ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM0ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9pbWFfcG9saWN5CkBAIC0wLDAgKzEsNjEgQEAKK1doYXQ6CQlzZWN1cml0eS9pbWEvcG9saWN5CitEYXRlOgkJTWF5IDIwMDgKK0NvbnRhY3Q6CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkJTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkgbWFpbnRhaW5zIGEgbGlzdCBvZiBoYXNoCisJCXZhbHVlcyBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgc2Vuc2l0aXZlIHN5c3RlbSBmaWxlcworCQlsb2FkZWQgaW50byB0aGUgcnVuLXRpbWUgb2YgdGhpcyBzeXN0ZW0uICBBdCBydW50aW1lLAorCQl0aGUgcG9saWN5IGNhbiBiZSBjb25zdHJhaW5lZCBiYXNlZCBvbiBMU00gc3BlY2lmaWMgZGF0YS4KKwkJUG9saWNpZXMgYXJlIGxvYWRlZCBpbnRvIHRoZSBzZWN1cml0eWZzIGZpbGUgaW1hL3BvbGljeQorCQlieSBvcGVuaW5nIHRoZSBmaWxlLCB3cml0aW5nIHRoZSBydWxlcyBvbmUgYXQgYSB0aW1lIGFuZAorCQl0aGVuIGNsb3NpbmcgdGhlIGZpbGUuICBUaGUgbmV3IHBvbGljeSB0YWtlcyBlZmZlY3QgYWZ0ZXIKKwkJdGhlIGZpbGUgaW1hL3BvbGljeSBpcyBjbG9zZWQuCisKKwkJcnVsZSBmb3JtYXQ6IGFjdGlvbiBbY29uZGl0aW9uIC4uLl0KKworCQlhY3Rpb246IG1lYXN1cmUgfCBkb250X21lYXN1cmUKKwkJY29uZGl0aW9uOj0gYmFzZSB8IGxzbQorCQkJYmFzZToJW1tmdW5jPV0gW21hc2s9XSBbZnNtYWdpYz1dIFt1aWQ9XV0KKwkJCWxzbToJW1tzdWJqX3VzZXI9XSBbc3Vial9yb2xlPV0gW3N1YmpfdHlwZT1dCisJCQkJIFtvYmpfdXNlcj1dIFtvYmpfcm9sZT1dIFtvYmpfdHlwZT1dXQorCisJCWJhc2U6IAlmdW5jOj0gW0JQUk1fQ0hFQ0tdW0ZJTEVfTU1BUF1bSU5PREVfUEVSTUlTU0lPTl0KKwkJCW1hc2s6PSBbTUFZX1JFQURdIFtNQVlfV1JJVEVdIFtNQVlfQVBQRU5EXSBbTUFZX0VYRUNdCisJCQlmc21hZ2ljOj0gaGV4IHZhbHVlCisJCQl1aWQ6PSBkZWNpbWFsIHZhbHVlCisJCWxzbTogIAlhcmUgTFNNIHNwZWNpZmljCisKKwkJZGVmYXVsdCBwb2xpY3k6CisJCQkjIFBST0NfU1VQRVJfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4OWZhMAorCQkJIyBTWVNGU19NQUdJQworCQkJZG9udF9tZWFzdXJlIGZzbWFnaWM9MHg2MjY1NjU3MgorCQkJIyBERUJVR0ZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDY0NjI2NzIwCisJCQkjIFRNUEZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDAxMDIxOTk0CisJCQkjIFNFQ1VSSVRZRlNfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4NzM2MzY2NzMKKworCQkJbWVhc3VyZSBmdW5jPUJQUk1fQ0hFQ0sKKwkJCW1lYXN1cmUgZnVuYz1GSUxFX01NQVAgbWFzaz1NQVlfRVhFQworCQkJbWVhc3VyZSBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRCB1aWQ9MAorCisJCVRoZSBkZWZhdWx0IHBvbGljeSBtZWFzdXJlcyBhbGwgZXhlY3V0YWJsZXMgaW4gYnBybV9jaGVjaywKKwkJYWxsIGZpbGVzIG1tYXBwZWQgZXhlY3V0YWJsZSBpbiBmaWxlX21tYXAsIGFuZCBhbGwgZmlsZXMKKwkJb3BlbiBmb3IgcmVhZCBieSByb290IGluIGlub2RlX3Blcm1pc3Npb24uCisKKwkJRXhhbXBsZXMgb2YgTFNNIHNwZWNpZmljIGRlZmluaXRpb25zOgorCisJCVNFTGludXg6CisJCQkjIFNFTElOVVhfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4Rjk3Q0ZGOEMKKworCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPXZhcl9sb2dfdAorCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPWF1ZGl0ZF9sb2dfdAorCQkJbWVhc3VyZSBzdWJqX3VzZXI9c3lzdGVtX3UgZnVuYz1JTk9ERV9QRVJNIG1hc2s9TUFZX1JFQUQKKwkJCW1lYXN1cmUgc3Vial9yb2xlPXN5c3RlbV9yIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisKKwkJU21hY2s6CisJCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggMTQ2MmVkOC4uYTNhODNkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKIAkgICAgZ2FkZ2V0LnhtbCBsaWJhdGEueG1sIG10ZG5hbmQueG1sIGxpYnJzLnhtbCByYXBpZGlvLnhtbCBcCiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCi0JICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sCisJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKKwkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCmluZGV4IDlkNjQ0ZjcuLjAyMzBhOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApAQCAtMSwxMSArMSwxMSBAQAotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjQuMS8vRU4iPgotCi08Ym9vaz4KLTw/ZGJodG1sIGZpbGVuYW1lPSJpbmRleC5odG1sIj4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgogCiA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIDwhLS0gSGVhZGVyICAtLT4KIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPGJvb2sgaWQ9IkFMU0EtRHJpdmVyLUFQSSI+CiAgIDxib29raW5mbz4KICAgICA8dGl0bGU+VGhlIEFMU0EgRHJpdmVyIEFQSTwvdGl0bGU+CiAKQEAgLTM1LDYgKzM1LDggQEAKIAogICA8L2Jvb2tpbmZvPgogCis8dG9jPjwvdG9jPgorCiAgIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnZW1lbnQ8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2luaXQuYwpAQCAtNzEsNiArNzMsMTAgQEAKICFFc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCiAhRXNvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKICAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5WaXJ0dWFsIE1hc3RlciBDb250cm9sIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvdm1hc3Rlci5jCishSWluY2x1ZGUvc291bmQvY29udHJvbC5oCisgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KICAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgpAQCAtODksNiArOTUsOSBAQAogICAgICA8c2VjdDE+PHRpdGxlPkhhcmR3YXJlLURlcGVuZGVudCBEZXZpY2VzIEFQSTwvdGl0bGU+CiAhRXNvdW5kL2NvcmUvaHdkZXAuYwogICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkphY2sgQWJzdHJhY3Rpb24gTGF5ZXIgQVBJPC90aXRsZT4KKyFFc291bmQvY29yZS9qYWNrLmMKKyAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5JU0EgRE1BIEhlbHBlcnM8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2lzYWRtYS5jCiAgICAgIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbAppbmRleCAzYTg4MmQ5Li5jNjcxYTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKQEAgLTQ0MCw2ICs0NDAsNyBAQAogICAgICB1c2VkIGluIHRoZSBnZW5lcmljIElSUSBsYXllci4KICAgICAgPC9wYXJhPgogIUlpbmNsdWRlL2xpbnV4L2lycS5oCishSWluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hYzgwMjExLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAppbmRleCA3N2MzYzIwLi44YWY2ZDk2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbApAQCAtMTcsOCArMTcsNyBAQAogICAgIDwvYXV0aG9yZ3JvdXA+CiAKICAgICA8Y29weXJpZ2h0PgotICAgICAgPHllYXI+MjAwNzwveWVhcj4KLSAgICAgIDx5ZWFyPjIwMDg8L3llYXI+CisgICAgICA8eWVhcj4yMDA3LTIwMDk8L3llYXI+CiAgICAgICA8aG9sZGVyPkpvaGFubmVzIEJlcmc8L2hvbGRlcj4KICAgICA8L2NvcHlyaWdodD4KIApAQCAtMTY1LDggKzE2NCw4IEBACiAhUGluY2x1ZGUvbmV0L21hYzgwMjExLmggRnJhbWUgZm9ybWF0CiAgICAgICA8L3NlY3QxPgogICAgICAgPHNlY3QxPgotICAgICAgICA8dGl0bGU+QWxpZ25tZW50IGlzc3VlczwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyAgICAgICAgPHRpdGxlPlBhY2tldCBhbGlnbm1lbnQ8L3RpdGxlPgorIVBuZXQvbWFjODAyMTEvcnguYyBQYWNrZXQgYWxpZ25tZW50CiAgICAgICA8L3NlY3QxPgogICAgICAgPHNlY3QxPgogICAgICAgICA8dGl0bGU+Q2FsbGluZyBpbnRvIG1hYzgwMjExIGZyb20gaW50ZXJydXB0czwvdGl0bGU+CkBAIC0yMjMsNiArMjIyLDExIEBACiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2tleV9mbGFncwogICAgIDwvY2hhcHRlcj4KIAorICAgIDxjaGFwdGVyIGlkPSJwb3dlcnNhdmUiPgorICAgICAgPHRpdGxlPlBvd2Vyc2F2ZSBzdXBwb3J0PC90aXRsZT4KKyFQaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBQb3dlcnNhdmUgc3VwcG9ydAorICAgIDwvY2hhcHRlcj4KKwogICAgIDxjaGFwdGVyIGlkPSJxb3MiPgogICAgICAgPHRpdGxlPk11bHRpcGxlIHF1ZXVlcyBhbmQgUW9TIHN1cHBvcnQ8L3RpdGxlPgogICAgICAgPHBhcmE+VEJEPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCmluZGV4IDUyZTFiNzkuLjhmNmUzYjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKQEAgLTQyLDYgKzQyLDEzIEBACiAKIDxyZXZoaXN0b3J5PgogCTxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuODwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDgtMTItMjQ8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmhqazwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBuYW1lIGF0dHJpYnV0ZXMgaW4gbWVtIGFuZCBwb3J0aW8gc3lzZnMgZGlyZWN0b3JpZXMuCisJCTwvcmV2cmVtYXJrPgorCTwvcmV2aXNpb24+CisJPHJldmlzaW9uPgogCTxyZXZudW1iZXI+MC43PC9yZXZudW1iZXI+CiAJPGRhdGU+MjAwOC0xMi0yMzwvZGF0ZT4KIAk8YXV0aG9yaW5pdGlhbHM+aGprPC9hdXRob3Jpbml0aWFscz4KQEAgLTMwMywxMiArMzEwLDE5IEBACiAJYXBwZWFyIGlmIHRoZSBzaXplIG9mIHRoZSBtYXBwaW5nIGlzIG5vdCAwLgogPC9wYXJhPgogPHBhcmE+Ci0JRWFjaCA8ZmlsZW5hbWU+bWFwWC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgdHdvIHJlYWQtb25seSBmaWxlcwotCXRoYXQgc2hvdyBzdGFydCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBtZW1vcnk6CisJRWFjaCA8ZmlsZW5hbWU+bWFwWC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgZm91ciByZWFkLW9ubHkgZmlsZXMKKwl0aGF0IHNob3cgYXR0cmlidXRlcyBvZiB0aGUgbWVtb3J5OgogPC9wYXJhPgogPGl0ZW1pemVkbGlzdD4KIDxsaXN0aXRlbT4KIAk8cGFyYT4KKwk8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+OiBBIHN0cmluZyBpZGVudGlmaWVyIGZvciB0aGlzIG1hcHBpbmcuIFRoaXMKKwlpcyBvcHRpb25hbCwgdGhlIHN0cmluZyBjYW4gYmUgZW1wdHkuIERyaXZlcnMgY2FuIHNldCB0aGlzIHRvIG1ha2UgaXQKKwllYXNpZXIgZm9yIHVzZXJzcGFjZSB0byBmaW5kIHRoZSBjb3JyZWN0IG1hcHBpbmcuCisJPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKwk8cGFyYT4KIAk8ZmlsZW5hbWU+YWRkcjwvZmlsZW5hbWU+OiBUaGUgYWRkcmVzcyBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgbWFwcGVkLgogCTwvcGFyYT4KIDwvbGlzdGl0ZW0+CkBAIC0zNjYsMTIgKzM4MCwxOSBAQAogCTxmaWxlbmFtZT4vc3lzL2NsYXNzL3Vpby91aW9YL3BvcnRpby88L2ZpbGVuYW1lPi4KIDwvcGFyYT4KIDxwYXJhPgotCUVhY2ggPGZpbGVuYW1lPnBvcnRYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0aHJlZSByZWFkLW9ubHkKLQlmaWxlcyB0aGF0IHNob3cgc3RhcnQsIHNpemUsIGFuZCB0eXBlIG9mIHRoZSBwb3J0IHJlZ2lvbjoKKwlFYWNoIDxmaWxlbmFtZT5wb3J0WC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgZm91ciByZWFkLW9ubHkKKwlmaWxlcyB0aGF0IHNob3cgbmFtZSwgc3RhcnQsIHNpemUsIGFuZCB0eXBlIG9mIHRoZSBwb3J0IHJlZ2lvbjoKIDwvcGFyYT4KIDxpdGVtaXplZGxpc3Q+CiA8bGlzdGl0ZW0+CiAJPHBhcmE+CisJPGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPjogQSBzdHJpbmcgaWRlbnRpZmllciBmb3IgdGhpcyBwb3J0IHJlZ2lvbi4KKwlUaGUgc3RyaW5nIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgZW1wdHkuIERyaXZlcnMgY2FuIHNldCBpdCB0byBtYWtlIGl0CisJZWFzaWVyIGZvciB1c2Vyc3BhY2UgdG8gZmluZCBhIGNlcnRhaW4gcG9ydCByZWdpb24uCisJPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKwk8cGFyYT4KIAk8ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPjogVGhlIGZpcnN0IHBvcnQgb2YgdGhpcyByZWdpb24uCiAJPC9wYXJhPgogPC9saXN0aXRlbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCmluZGV4IDg3YTdjMDdhLi40NmIwOGZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtMSwxMSArMSwxMSBAQAotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjQuMS8vRU4iPgotCi08Ym9vaz4KLTw/ZGJodG1sIGZpbGVuYW1lPSJpbmRleC5odG1sIj4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgogCiA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIDwhLS0gSGVhZGVyICAtLT4KIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPGJvb2sgaWQ9IldyaXRpbmctYW4tQUxTQS1Ecml2ZXIiPgogICA8Ym9va2luZm8+CiAgICAgPHRpdGxlPldyaXRpbmcgYW4gQUxTQSBEcml2ZXI8L3RpdGxlPgogICAgIDxhdXRob3I+CkBAIC00OTIsOSArNDkyLDkgQEAKICAgICAgICAgICB9CiAKICAgICAgICAgICAvKiAoMikgKi8KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLSAgICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgICAgICAgLyogKDMpICovCiAgICAgICAgICAgZXJyID0gc25kX215Y2hpcF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CkBAIC01OTAsOCArNTkwLDkgQEAKICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwogICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgIGludCBlcnI7CiAgIC4uLi4KLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogXV0+CiAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgpAQCAtODA5LDI2ICs4MTAsMjggQEAKIAogICAgICAgPHBhcmE+CiAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgdG8gY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSwgY2FsbAotICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPi4KIAogICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgogICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwogICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpOworICBpbnQgZXJyOworICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUsICZjYXJkKTsKIF1dPgogICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZ1bmN0aW9uIHRha2VzIGZvdXIgYXJndW1lbnRzLCB0aGUgY2FyZC1pbmRleCBudW1iZXIsIHRoZQorICAgICAgICBUaGUgZnVuY3Rpb24gdGFrZXMgZml2ZSBhcmd1bWVudHMsIHRoZSBjYXJkLWluZGV4IG51bWJlciwgdGhlCiAgICAgICAgIGlkIHN0cmluZywgdGhlIG1vZHVsZSBwb2ludGVyICh1c3VhbGx5CiAgICAgICAgIDxjb25zdGFudD5USElTX01PRFVMRTwvY29uc3RhbnQ+KSwKLSAgICAgICAgYW5kIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UuICBUaGUgbGFzdCBhcmd1bWVudCBpcyB1c2VkIHRvCisgICAgICAgIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UsIGFuZCB0aGUgcG9pbnRlciB0byByZXR1cm4gdGhlCisgICAgICAgIGNhcmQgaW5zdGFuY2UuICBUaGUgZXh0cmFfc2l6ZSBhcmd1bWVudCBpcyB1c2VkIHRvCiAgICAgICAgIGFsbG9jYXRlIGNhcmQtJmd0O3ByaXZhdGVfZGF0YSBmb3IgdGhlCiAgICAgICAgIGNoaXAtc3BlY2lmaWMgZGF0YS4gIE5vdGUgdGhhdCB0aGVzZSBkYXRhCi0gICAgICAgIGFyZSBhbGxvY2F0ZWQgYnkgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisgICAgICAgIGFyZSBhbGxvY2F0ZWQgYnkgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4uCiAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC05MTUsMTUgKzkxOCwxNiBAQAogICAgICAgPC9wYXJhPgogCiAgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KLSAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CisgICAgICAgIDx0aXRsZT4xLiBBbGxvY2F0aW5nIHZpYSA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPi48L3RpdGxlPgogICAgICAgICA8cGFyYT4KICAgICAgICAgICBBcyBtZW50aW9uZWQgYWJvdmUsIHlvdSBjYW4gcGFzcyB0aGUgZXh0cmEtZGF0YS1sZW5ndGgKLQkgIHRvIHRoZSA0dGggYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4sIGkuZS4KKwkgIHRvIHRoZSA0dGggYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4sIGkuZS4KIAogICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CiAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiA8IVtDREFUQVsKLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBteWNoaXApKTsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteWNoaXApLCAmY2FyZCk7CiBdXT4KICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CkBAIC05NTIsOCArOTU2LDggQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICBBZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEKLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiAod2l0aAotICAgICAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4gKHdpdGgKKyAgICAgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IG9uIHRoZSA0dGggYXJnKSwgY2FsbAogICAgICAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPi4gCiAKICAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgpAQCAtOTYxLDcgKzk2NSw3IEBACiA8IVtDREFUQVsKICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwogICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAgIC4uLi4uCiAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogXV0+CkBAIC01NzUwLDggKzU3NTQsOSBAQAogICAgICAgICAgIC4uLi4KICAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKICAgICAgICAgICAuLi4uCiAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgLi4uLgpAQCAtNTc2Myw3ICs1NzY4LDcgQEAKICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgogCiAJV2hlbiB5b3UgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIHdpdGgKLQk8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaXQncyBhbnl3YXkgYWNjZXNzaWJsZQorCTxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LCBpdCdzIGFueXdheSBhY2Nlc3NpYmxlCiAJdmlhIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2RhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZC4KIAogICAgICAgPGluZm9ybWFsZXhhbXBsZT4KQEAgLTU3NzUsOSArNTc4MCwxMCBAQAogICAgICAgICAgIC4uLi4KICAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteWNoaXApKTsKKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXljaGlwKSwgJmNhcmQpOwogICAgICAgICAgIC4uLi4KICAgICAgICAgICBjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogICAgICAgICAgIC4uLi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dAppbmRleCA2MzRjOTUyLi5kNWFmM2Y2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0CkBAIC0zNSw5ICszNSwzIEBACiAjIGVjaG8gYW50aWNpcGF0b3J5ID4gL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCiAjIGNhdCAvc3lzL2Jsb2NrL2hkYS9xdWV1ZS9zY2hlZHVsZXIKIG5vb3AgW2FudGljaXBhdG9yeV0gZGVhZGxpbmUgY2ZxCi0KLUVhY2ggaW8gcXVldWUgaGFzIGEgc2V0IG9mIGlvIHNjaGVkdWxlciB0dW5hYmxlcyBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZXNlCi10dW5hYmxlcyBjb250cm9sIGhvdyB0aGUgaW8gc2NoZWR1bGVyIHdvcmtzLiBZb3UgY2FuIGZpbmQgdGhlc2UgZW50cmllcwotaW46Ci0KLS9zeXMvYmxvY2svPGRldmljZT4vcXVldWUvaW9zY2hlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CmluZGV4IDViMGNmYTYuLmNlNzNmM2ViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CkBAIC0xMTcsMTAgKzExNywyOCBAQAogc2FtcGxpbmdfcmF0ZTogbWVhc3VyZWQgaW4gdVMgKDEwXi02IHNlY29uZHMpLCB0aGlzIGlzIGhvdyBvZnRlbiB5b3UKIHdhbnQgdGhlIGtlcm5lbCB0byBsb29rIGF0IHRoZSBDUFUgdXNhZ2UgYW5kIHRvIG1ha2UgZGVjaXNpb25zIG9uCiB3aGF0IHRvIGRvIGFib3V0IHRoZSBmcmVxdWVuY3kuICBUeXBpY2FsbHkgdGhpcyBpcyBzZXQgdG8gdmFsdWVzIG9mCi1hcm91bmQgJzEwMDAwJyBvciBtb3JlLgorYXJvdW5kICcxMDAwMCcgb3IgbW9yZS4gSXQncyBkZWZhdWx0IHZhbHVlIGlzIChjbXAuIHdpdGggdXNlcnMtZ3VpZGUudHh0KToKK3RyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDAKK1RoZSBsb3dlc3QgdmFsdWUgeW91IGNhbiBzZXQgaXM6Cit0cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAgb3IgaXQgbWF5IGdldCByZXN0cmljdGVkIHRvIGEgdmFsdWUgd2hlcmUgaXQKK21ha2VzIG5vdCBzZW5zZSBmb3IgdGhlIGtlcm5lbCBhbnltb3JlIHRvIHBvbGwgdGhhdCBvZnRlbiB3aGljaCBkZXBlbmRzCitvbiB5b3VyIEhaIGNvbmZpZyB2YXJpYWJsZSAoSFo9MTAwMDogbWF4PTIwMDAwdXMsIEhaPTI1MDogbWF4PTUwMDApLgorQmUgYXdhcmUgdGhhdCB0cmFuc2l0aW9uIGxhdGVuY3kgaXMgaW4gbnMgYW5kIHNhbXBsaW5nX3JhdGUgaXMgaW4gdXMsIHNvIHlvdQorZ2V0IHRoZSBzYW1lIHN5c2ZzIHZhbHVlIGJ5IGRlZmF1bHQuCitTYW1wbGluZyByYXRlIHNob3VsZCBhbHdheXMgZ2V0IGFkanVzdGVkIGNvbnNpZGVyaW5nIHRoZSB0cmFuc2l0aW9uIGxhdGVuY3kKK1RvIHNldCB0aGUgc2FtcGxpbmcgcmF0ZSA3NTAgdGltZXMgYXMgaGlnaCBhcyB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5CitpbiB0aGUgYmFzaCAoYXMgc2FpZCwgMTAwMCBpcyBkZWZhdWx0KSwgZG86CitlY2hvIGAkKCgkKGNhdCBjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSkgKiA3NTAgLyAxMDAwKSkgXAorICAgID5vbmRlbWFuZC9zYW1wbGluZ19yYXRlCiAKLXNob3dfc2FtcGxpbmdfcmF0ZV8obWlufG1heCk6IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNhbXBsaW5nIHJhdGVzCi1hdmFpbGFibGUgdGhhdCB5b3UgbWF5IHNldCAnc2FtcGxpbmdfcmF0ZScgdG8uCitzaG93X3NhbXBsaW5nX3JhdGVfKG1pbnxtYXgpOiBUSElTIElOVEVSRkFDRSBJUyBERVBSRUNBVEVELCBET04nVCBVU0UgSVQuCitZb3UgY2FuIHVzZSB3aWRlciByYW5nZXMgbm93IGFuZCB0aGUgZ2VuZXJhbAorY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kgdmFyaWFibGUgKGNtcC4gd2l0aCB1c2VyLWd1aWRlLnR4dCkgY2FuIGJlCit1c2VkIHRvIG9idGFpbiBleGFjdGx5IHRoZSBzYW1lIGluZm86CitzaG93X3NhbXBsaW5nX3JhdGVfbWluID0gdHJhbnN0aXRpb25fbGF0ZW5jeSAqIDUwMCAgICAvIDEwMDAKK3Nob3dfc2FtcGxpbmdfcmF0ZV9tYXggPSB0cmFuc3RpdGlvbl9sYXRlbmN5ICogNTAwMDAwIC8gMTAwMAorKGRpdmlkZWQgYnkgMTAwMCBpcyB0byBpbGx1c3RyYXRlIHRoYXQgc2FtcGxpbmcgcmF0ZSBpcyBpbiB1cyBhbmQKK3RyYW5zaXRpb24gbGF0ZW5jeSBpcyBleHBvcnRlZCBucykuCiAKIHVwX3RocmVzaG9sZDogZGVmaW5lcyB3aGF0IHRoZSBhdmVyYWdlIENQVSB1c2FnZSBiZXR3ZWVuIHRoZSBzYW1wbGluZ3MKIG9mICdzYW1wbGluZ19yYXRlJyBuZWVkcyB0byBiZSBmb3IgdGhlIGtlcm5lbCB0byBtYWtlIGEgZGVjaXNpb24gb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CmluZGV4IDkxNzkxOGYuLjc1ZjQxMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dApAQCAtMTUyLDYgKzE1MiwxOCBAQAogCQkJCWZyZXF1ZW5jeSB0aGUgcHJvY2Vzc29yIGNhbiBydW4gYXQoaW4ga0h6KSAKIGNwdWluZm9fbWF4X2ZyZXEgOgkJdGhpcyBmaWxlIHNob3dzIHRoZSBtYXhpbXVtIG9wZXJhdGluZwogCQkJCWZyZXF1ZW5jeSB0aGUgcHJvY2Vzc29yIGNhbiBydW4gYXQoaW4ga0h6KSAKK2NwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5CVRoZSB0aW1lIGl0IHRha2VzIG9uIHRoaXMgQ1BVIHRvCisJCQkJc3dpdGNoIGJldHdlZW4gdHdvIGZyZXF1ZW5jaWVzIGluIG5hbm8KKwkJCQlzZWNvbmRzLiBJZiB1bmtub3duIG9yIGtub3duIHRvIGJlCisJCQkJdGhhdCBoaWdoIHRoYXQgdGhlIGRyaXZlciBkb2VzIG5vdAorCQkJCXdvcmsgd2l0aCB0aGUgb25kZW1hbmQgZ292ZXJub3IsIC0xCisJCQkJKENQVUZSRVFfRVRFUk5BTCkgd2lsbCBiZSByZXR1cm5lZC4KKwkJCQlVc2luZyB0aGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWwKKwkJCQl0byBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgcG9sbGluZworCQkJCWZyZXF1ZW5jeSBmb3IgYSBrZXJuZWwgZ292ZXJub3Igb3IKKwkJCQl1c2Vyc3BhY2UgZGFlbW9uLiBNYWtlIHN1cmUgdG8gbm90CisJCQkJc3dpdGNoIHRoZSBmcmVxdWVuY3kgdG9vIG9mdGVuCisJCQkJcmVzdWx0aW5nIGluIHBlcmZvcm1hbmNlIGxvc3MuCiBzY2FsaW5nX2RyaXZlciA6CQl0aGlzIGZpbGUgc2hvd3Mgd2hhdCBjcHVmcmVxIGRyaXZlciBpcwogCQkJCXVzZWQgdG8gc2V0IHRoZSBmcmVxdWVuY3kgb24gdGhpcyBDUFUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggMWU4OWE1MS4uODg1MTlkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC02Miw3ICs2Miw2IEBACiBhaWM3KnNlcS5oKgogYWljYXNtCiBhaWNkYi5oKgotYXNtCiBhc20tb2Zmc2V0cy5oCiBhc21fb2Zmc2V0cy5oCiBhdXRvY29uZi5oKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dCBiL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0YzU2NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQKQEAgLTAsMCArMSwyNDAgQEAKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHVzZSB0aGUgZHluYW1pYyBkZWJ1ZyAoZGRlYnVnKSBmZWF0dXJlLgorCitEeW5hbWljIGRlYnVnIGlzIGRlc2lnbmVkIHRvIGFsbG93IHlvdSB0byBkeW5hbWljYWxseSBlbmFibGUvZGlzYWJsZSBrZXJuZWwKK2NvZGUgdG8gb2J0YWluIGFkZGl0aW9uYWwga2VybmVsIGluZm9ybWF0aW9uLiBDdXJyZW50bHksIGlmCitDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBzZXQsIHRoZW4gYWxsIHByX2RlYnVnKCkvZGV2X2RlYnVnKCkgY2FsbHMgY2FuIGJlCitkeW5hbWljYWxseSBlbmFibGVkIHBlci1jYWxsc2l0ZS4KKworRHluYW1pYyBkZWJ1ZyBoYXMgZXZlbiBtb3JlIHVzZWZ1bCBmZWF0dXJlczoKKworICogU2ltcGxlIHF1ZXJ5IGxhbmd1YWdlIGFsbG93cyB0dXJuaW5nIG9uIGFuZCBvZmYgZGVidWdnaW5nIHN0YXRlbWVudHMgYnkKKyAgIG1hdGNoaW5nIGFueSBjb21iaW5hdGlvbiBvZjoKKworICAgLSBzb3VyY2UgZmlsZW5hbWUKKyAgIC0gZnVuY3Rpb24gbmFtZQorICAgLSBsaW5lIG51bWJlciAoaW5jbHVkaW5nIHJhbmdlcyBvZiBsaW5lIG51bWJlcnMpCisgICAtIG1vZHVsZSBuYW1lCisgICAtIGZvcm1hdCBzdHJpbmcKKworICogUHJvdmlkZXMgYSBkZWJ1Z2ZzIGNvbnRyb2wgZmlsZTogPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbCB3aGljaCBjYW4gYmUKKyAgIHJlYWQgdG8gZGlzcGxheSB0aGUgY29tcGxldGUgbGlzdCBvZiBrbm93biBkZWJ1ZyBzdGF0ZW1lbnRzLCB0byBoZWxwIGd1aWRlIHlvdQorCitDb250cm9sbGluZyBkeW5hbWljIGRlYnVnIEJlaGF2aW91cgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYmVoYXZpb3VyIG9mIHByX2RlYnVnKCkvZGV2X2RlYnVnKClzIGFyZSBjb250cm9sbGVkIHZpYSB3cml0aW5nIHRvIGEKK2NvbnRyb2wgZmlsZSBpbiB0aGUgJ2RlYnVnZnMnIGZpbGVzeXN0ZW0uIFRodXMsIHlvdSBtdXN0IGZpcnN0IG1vdW50IHRoZSBkZWJ1Z2ZzCitmaWxlc3lzdGVtLCBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiB0aGlzIGZlYXR1cmUuIFN1YnNlcXVlbnRseSwgd2UgcmVmZXIgdG8gdGhlCitjb250cm9sIGZpbGUgYXM6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0bworZW5hYmxlIHByaW50aW5nIGZyb20gc291cmNlIGZpbGUgJ3N2Y3NvY2suYycsIGxpbmUgMTYwMyB5b3Ugc2ltcGx5IGRvOgorCitudWxsYXJib3I6fiAjIGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworSWYgeW91IG1ha2UgYSBtaXN0YWtlIHdpdGggdGhlIHN5bnRheCwgdGhlIHdyaXRlIHdpbGwgZmFpbCB0aHVzOgorCitudWxsYXJib3I6fiAjIGVjaG8gJ2ZpbGUgc3Zjc29jay5jIHd0ZiAxICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorLWJhc2g6IGVjaG86IHdyaXRlIGVycm9yOiBJbnZhbGlkIGFyZ3VtZW50CisKK1ZpZXdpbmcgRHluYW1pYyBEZWJ1ZyBCZWhhdmlvdXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIHZpZXcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGJlaGF2aW91ciBvZiBhbGwgdGhlIGRlYnVnIHN0YXRlbWVudHMKK3ZpYToKKworbnVsbGFyYm9yOn4gIyBjYXQgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y19yZG1hLmM6MzIzIFtzdmN4cHJ0X3JkbWFdc3ZjX3JkbWFfY2xlYW51cCAtICJTVkNSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFwwMTIiCisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjM0MSBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2luaXQgLSAiXDAxMW1heF9pbmxpbmUgICAgICAgOiAlZFwwMTIiCisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjM0MCBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2luaXQgLSAiXDAxMXNxX2RlcHRoICAgICAgICAgOiAlZFwwMTIiCisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjMzOCBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2luaXQgLSAiXDAxMW1heF9yZXF1ZXN0cyAgICAgOiAlZFwwMTIiCisuLi4KKworCitZb3UgY2FuIGFsc28gYXBwbHkgc3RhbmRhcmQgVW5peCB0ZXh0IG1hbmlwdWxhdGlvbiBmaWx0ZXJzIHRvIHRoaXMKK2RhdGEsIGUuZy4KKworbnVsbGFyYm9yOn4gIyBncmVwIC1pIHJkbWEgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbCAgfCB3YyAtbAorNjIKKworbnVsbGFyYm9yOn4gIyBncmVwIC1pIHRjcCA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sIHwgd2MgLWwKKzQyCisKK05vdGUgaW4gcGFydGljdWxhciB0aGF0IHRoZSB0aGlyZCBjb2x1bW4gc2hvd3MgdGhlIGVuYWJsZWQgYmVoYXZpb3VyCitmbGFncyBmb3IgZWFjaCBkZWJ1ZyBzdGF0ZW1lbnQgY2FsbHNpdGUgKHNlZSBiZWxvdyBmb3IgZGVmaW5pdGlvbnMgb2YgdGhlCitmbGFncykuICBUaGUgZGVmYXVsdCB2YWx1ZSwgbm8gZXh0cmEgYmVoYXZpb3VyIGVuYWJsZWQsIGlzICItIi4gIFNvCit5b3UgY2FuIHZpZXcgYWxsIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQgY2FsbHNpdGVzIHdpdGggYW55IG5vbi1kZWZhdWx0IGZsYWdzOgorCitudWxsYXJib3I6fiAjIGF3ayAnJDMgIT0gIi0iJyA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisjIGZpbGVuYW1lOmxpbmVubyBbbW9kdWxlXWZ1bmN0aW9uIGZsYWdzIGZvcm1hdAorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3Zjc29jay5jOjE2MDMgW3N1bnJwY11zdmNfc2VuZCBwICJzdmNfcHJvY2Vzczogc3Rfc2VuZHRvIHJldHVybmVkICVkXDAxMiIKKworCitDb21tYW5kIExhbmd1YWdlIFJlZmVyZW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXQgdGhlIGxleGljYWwgbGV2ZWwsIGEgY29tbWFuZCBjb21wcmlzZXMgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzZXBhcmF0ZWQKK2J5IHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIE5vdGUgdGhhdCBuZXdsaW5lcyBhcmUgdHJlYXRlZCBhcyB3b3JkCitzZXBhcmF0b3JzIGFuZCBkbyAqbm90KiBlbmQgYSBjb21tYW5kIG9yIGFsbG93IG11bHRpcGxlIGNvbW1hbmRzIHRvCitiZSBkb25lIHRvZ2V0aGVyLiAgU28gdGhlc2UgYXJlIGFsbCBlcXVpdmFsZW50OgorCitudWxsYXJib3I6fiAjIGVjaG8gLWMgJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKK251bGxhcmJvcjp+ICMgZWNobyAtYyAnICBmaWxlICAgc3Zjc29jay5jICAgICBsaW5lICAxNjAzICtwICAnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCitudWxsYXJib3I6fiAjIGVjaG8gLWMgJ2ZpbGUgc3Zjc29jay5jXG5saW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworQ29tbWFuZHMgYXJlIGJvdW5kZWQgYnkgYSB3cml0ZSgpIHN5c3RlbSBjYWxsLiAgSWYgeW91IHdhbnQgdG8gZG8KK211bHRpcGxlIGNvbW1hbmRzIHlvdSBuZWVkIHRvIGRvIGEgc2VwYXJhdGUgImVjaG8iIGZvciBlYWNoLCBsaWtlOgorCitudWxsYXJib3I6fiAjIGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPiAvcHJvYy9kcHJpbnRrIDtcCis+IGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTU2MyArcCcgPiAvcHJvYy9kcHJpbnRrCisKK29yIGV2ZW4gbGlrZToKKworbnVsbGFyYm9yOn4gIyAoCis+IGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgO1wKKz4gZWNobyAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNTYzICtwJyA7XAorPiApID4gL3Byb2MvZHByaW50aworCitBdCB0aGUgc3ludGFjdGljYWwgbGV2ZWwsIGEgY29tbWFuZCBjb21wcmlzZXMgYSBzZXF1ZW5jZSBvZiBtYXRjaAorc3BlY2lmaWNhdGlvbnMsIGZvbGxvd2VkIGJ5IGEgZmxhZ3MgY2hhbmdlIHNwZWNpZmljYXRpb24uCisKK2NvbW1hbmQgOjo9IG1hdGNoLXNwZWMqIGZsYWdzLXNwZWMKKworVGhlIG1hdGNoLXNwZWMncyBhcmUgdXNlZCB0byBjaG9vc2UgYSBzdWJzZXQgb2YgdGhlIGtub3duIGRwcmludGsoKQorY2FsbHNpdGVzIHRvIHdoaWNoIHRvIGFwcGx5IHRoZSBmbGFncy1zcGVjLiAgVGhpbmsgb2YgdGhlbSBhcyBhIHF1ZXJ5Cit3aXRoIGltcGxpY2l0IEFORHMgYmV0d2VlbiBlYWNoIHBhaXIuICBOb3RlIHRoYXQgYW4gZW1wdHkgbGlzdCBvZgorbWF0Y2gtc3BlY3MgaXMgcG9zc2libGUsIGJ1dCBpcyBub3QgdmVyeSB1c2VmdWwgYmVjYXVzZSBpdCB3aWxsIG5vdAorbWF0Y2ggYW55IGRlYnVnIHN0YXRlbWVudCBjYWxsc2l0ZXMuCisKK0EgbWF0Y2ggc3BlY2lmaWNhdGlvbiBjb21wcmlzZXMgYSBrZXl3b3JkLCB3aGljaCBjb250cm9scyB0aGUgYXR0cmlidXRlCitvZiB0aGUgY2FsbHNpdGUgdG8gYmUgY29tcGFyZWQsIGFuZCBhIHZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdC4gIFBvc3NpYmxlCitrZXl3b3JkcyBhcmU6CisKK21hdGNoLXNwZWMgOjo9ICdmdW5jJyBzdHJpbmcgfAorCSAgICAgICAnZmlsZScgc3RyaW5nIHwKKwkgICAgICAgJ21vZHVsZScgc3RyaW5nIHwKKwkgICAgICAgJ2Zvcm1hdCcgc3RyaW5nIHwKKwkgICAgICAgJ2xpbmUnIGxpbmUtcmFuZ2UKKworbGluZS1yYW5nZSA6Oj0gbGluZW5vIHwKKwkgICAgICAgJy0nbGluZW5vIHwKKwkgICAgICAgbGluZW5vJy0nIHwKKwkgICAgICAgbGluZW5vJy0nbGluZW5vCisvLyBOb3RlOiBsaW5lLXJhbmdlIGNhbm5vdCBjb250YWluIHNwYWNlLCBlLmcuCisvLyAiMS0zMCIgaXMgdmFsaWQgcmFuZ2UgYnV0ICIxIC0gMzAiIGlzIG5vdC4KKworbGluZW5vIDo6PSB1bnNpZ25lZC1pbnQKKworVGhlIG1lYW5pbmdzIG9mIGVhY2gga2V5d29yZCBhcmU6CisKK2Z1bmMKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGZ1bmN0aW9uIG5hbWUKKyAgICBvZiBlYWNoIGNhbGxzaXRlLiAgRXhhbXBsZToKKworICAgIGZ1bmMgc3ZjX3RjcF9hY2NlcHQKKworZmlsZQorICAgIFRoZSBnaXZlbiBzdHJpbmcgaXMgY29tcGFyZWQgYWdhaW5zdCBlaXRoZXIgdGhlIGZ1bGwKKyAgICBwYXRobmFtZSBvciB0aGUgYmFzZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIG9mIGVhY2gKKyAgICBjYWxsc2l0ZS4gIEV4YW1wbGVzOgorCisgICAgZmlsZSBzdmNzb2NrLmMKKyAgICBmaWxlIC91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y3NvY2suYworCittb2R1bGUKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIG1vZHVsZSBuYW1lCisgICAgb2YgZWFjaCBjYWxsc2l0ZS4gIFRoZSBtb2R1bGUgbmFtZSBpcyB0aGUgc3RyaW5nIGFzCisgICAgc2VlbiBpbiAibHNtb2QiLCBpLmUuIHdpdGhvdXQgdGhlIGRpcmVjdG9yeSBvciB0aGUgLmtvCisgICAgc3VmZml4IGFuZCB3aXRoICctJyBjaGFuZ2VkIHRvICdfJy4gIEV4YW1wbGVzOgorCisgICAgbW9kdWxlIHN1bnJwYworICAgIG1vZHVsZSBuZnNkCisKK2Zvcm1hdAorICAgIFRoZSBnaXZlbiBzdHJpbmcgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBkeW5hbWljIGRlYnVnIGZvcm1hdAorICAgIHN0cmluZy4gIE5vdGUgdGhhdCB0aGUgc3RyaW5nIGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggdGhlCisgICAgZW50aXJlIGZvcm1hdCwgb25seSBzb21lIHBhcnQuICBXaGl0ZXNwYWNlIGFuZCBvdGhlcgorICAgIHNwZWNpYWwgY2hhcmFjdGVycyBjYW4gYmUgZXNjYXBlZCB1c2luZyBDIG9jdGFsIGNoYXJhY3RlcgorICAgIGVzY2FwZSBcb29vIG5vdGF0aW9uLCBlLmcuIHRoZSBzcGFjZSBjaGFyYWN0ZXIgaXMgXDA0MC4KKyAgICBBbHRlcm5hdGl2ZWx5LCB0aGUgc3RyaW5nIGNhbiBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGUKKyAgICBjaGFyYWN0ZXJzICgiKSBvciBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoJykuCisgICAgRXhhbXBsZXM6CisKKyAgICBmb3JtYXQgc3ZjcmRtYToJICAgIC8vIG1hbnkgb2YgdGhlIE5GUy9SRE1BIHNlcnZlciBkcHJpbnRrcworICAgIGZvcm1hdCByZWFkYWhlYWQJICAgIC8vIHNvbWUgZHByaW50a3MgaW4gdGhlIHJlYWRhaGVhZCBjYWNoZQorICAgIGZvcm1hdCBuZnNkOlwwNDBTRVRBVFRSIC8vIG9uZSB3YXkgdG8gbWF0Y2ggYSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlCisgICAgZm9ybWF0ICJuZnNkOiBTRVRBVFRSIiAgLy8gYSBuZWF0ZXIgd2F5IHRvIG1hdGNoIGEgZm9ybWF0IHdpdGggd2hpdGVzcGFjZQorICAgIGZvcm1hdCAnbmZzZDogU0VUQVRUUicgIC8vIHlldCBhbm90aGVyIHdheSB0byBtYXRjaCBhIGZvcm1hdCB3aXRoIHdoaXRlc3BhY2UKKworbGluZQorICAgIFRoZSBnaXZlbiBsaW5lIG51bWJlciBvciByYW5nZSBvZiBsaW5lIG51bWJlcnMgaXMgY29tcGFyZWQKKyAgICBhZ2FpbnN0IHRoZSBsaW5lIG51bWJlciBvZiBlYWNoIGRwcmludGsoKSBjYWxsc2l0ZS4gIEEgc2luZ2xlCisgICAgbGluZSBudW1iZXIgbWF0Y2hlcyB0aGUgY2FsbHNpdGUgbGluZSBudW1iZXIgZXhhY3RseS4gIEEKKyAgICByYW5nZSBvZiBsaW5lIG51bWJlcnMgbWF0Y2hlcyBhbnkgY2FsbHNpdGUgYmV0d2VlbiB0aGUgZmlyc3QKKyAgICBhbmQgbGFzdCBsaW5lIG51bWJlciBpbmNsdXNpdmUuICBBbiBlbXB0eSBmaXJzdCBudW1iZXIgbWVhbnMKKyAgICB0aGUgZmlyc3QgbGluZSBpbiB0aGUgZmlsZSwgYW4gZW1wdHkgbGluZSBudW1iZXIgbWVhbnMgdGhlCisgICAgbGFzdCBudW1iZXIgaW4gdGhlIGZpbGUuICBFeGFtcGxlczoKKworICAgIGxpbmUgMTYwMwkgICAgLy8gZXhhY3RseSBsaW5lIDE2MDMKKyAgICBsaW5lIDE2MDAtMTYwNSAgLy8gdGhlIHNpeCBsaW5lcyBmcm9tIGxpbmUgMTYwMCB0byBsaW5lIDE2MDUKKyAgICBsaW5lIC0xNjA1CSAgICAvLyB0aGUgMTYwNSBsaW5lcyBmcm9tIGxpbmUgMSB0byBsaW5lIDE2MDUKKyAgICBsaW5lIDE2MDAtCSAgICAvLyBhbGwgbGluZXMgZnJvbSBsaW5lIDE2MDAgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZQorCitUaGUgZmxhZ3Mgc3BlY2lmaWNhdGlvbiBjb21wcmlzZXMgYSBjaGFuZ2Ugb3BlcmF0aW9uIGZvbGxvd2VkCitieSBvbmUgb3IgbW9yZSBmbGFnIGNoYXJhY3RlcnMuICBUaGUgY2hhbmdlIG9wZXJhdGlvbiBpcyBvbmUKK29mIHRoZSBjaGFyYWN0ZXJzOgorCistCisgICAgcmVtb3ZlIHRoZSBnaXZlbiBmbGFncworCisrCisgICAgYWRkIHRoZSBnaXZlbiBmbGFncworCis9CisgICAgc2V0IHRoZSBmbGFncyB0byB0aGUgZ2l2ZW4gZmxhZ3MKKworVGhlIGZsYWdzIGFyZToKKworcAorICAgIENhdXNlcyBhIHByaW50aygpIG1lc3NhZ2UgdG8gYmUgZW1pdHRlZCB0byBkbWVzZworCitOb3RlIHRoZSByZWdleHAgXlstKz1dW3NjcF0rJCBtYXRjaGVzIGEgZmxhZ3Mgc3BlY2lmaWNhdGlvbi4KK05vdGUgYWxzbyB0aGF0IHRoZXJlIGlzIG5vIGNvbnZlbmllbnQgc3ludGF4IHRvIHJlbW92ZSBhbGwKK3RoZSBmbGFncyBhdCBvbmNlLCB5b3UgbmVlZCB0byB1c2UgIi1wc2MiLgorCitFeGFtcGxlcworPT09PT09PT0KKworLy8gZW5hYmxlIHRoZSBtZXNzYWdlIGF0IGxpbmUgMTYwMyBvZiBmaWxlIHN2Y3NvY2suYworbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIGZpbGUgc3Zjc29jay5jCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIHRoZSBtZXNzYWdlcyBpbiB0aGUgTkZTIHNlcnZlciBtb2R1bGUKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnbW9kdWxlIG5mc2QgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZGlzYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyAtcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZW5hYmxlIG1lc3NhZ2VzIGZvciBORlMgY2FsbHMgUkVBRCwgUkVBRExJTkssIFJFQURESVIgYW5kIFJFQURESVIrLgorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmb3JtYXQgIm5mc2Q6IFJFQUQiICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDIwZDNiOTQuLmU0N2MwZmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTIyOSw3ICsyMjksOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWI0MyBzdXBwb3J0IGZvciBmaXJtd2FyZSByZXZpc2lvbiA8IDQxMAotV2hlbjoJSnVseSAyMDA4CitXaGVuOglUaGUgc2NoZWR1bGUgd2FzIEp1bHkgMjAwOCwgYnV0IGl0IHdhcyBkZWNpZGVkIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGtlZXAgdGhlCisgICAgICAgIGNvZGUgYXMgbG9uZyBhcyB0aGVyZSBhcmUgbm8gbWFqb3IgbWFpbnRhbmFuY2UgaGVhZGFjaGVzLgorCVNvIGl0IF9jb3VsZF8gYmUgcmVtb3ZlZCBfYW55XyB0aW1lIG5vdywgaWYgaXQgY29uZmxpY3RzIHdpdGggc29tZXRoaW5nIG5ldy4KIFdoeToJVGhlIHN1cHBvcnQgY29kZSBmb3IgdGhlIG9sZCBmaXJtd2FyZSBodXJ0cyBjb2RlIHJlYWRhYmlsaXR5L21haW50YWluYWJpbGl0eQogCWFuZCBzbGlnaHRseSBodXJ0cyBydW50aW1lIHBlcmZvcm1hbmNlLiBCdWdmaXhlcyBmb3IgdGhlIG9sZCBmaXJtd2FyZQogCWFyZSBub3QgcHJvdmlkZWQgYnkgQnJvYWRjb20gYW55bW9yZS4KQEAgLTM0NCwzICszNDYsMjAgQEAKIAlSZW1vdmFsIGlzIHN1YmplY3QgdG8gZml4aW5nIGFueSByZW1haW5pbmcgYnVncyBpbiBBQ1BJIHdoaWNoIG1heQogCWNhdXNlIHRoZSB0aGVybWFsIHRocm90dGxpbmcgbm90IHRvIGhhcHBlbiBhdCB0aGUgcmlnaHQgdGltZS4KIFdobzoJRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIE1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CV9fZG9fSVJRIGFsbCBpbiBvbmUgZml0cyBub3RoaW5nIGludGVycnVwdCBoYW5kbGVyCitXaGVuOgkyLjYuMzIKK1doeToJX19kb19JUlEgd2FzIGtlcHQgZm9yIGVhc3kgbWlncmF0aW9uIHRvIHRoZSB0eXBlIGZsb3cgaGFuZGxlcnMuCisJTW9yZSB0aGFuIHR3byB5ZWFycyBvZiBtaWdyYXRpb24gdGltZSBpcyBlbm91Z2guCitXaG86CVRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglvYnNvbGV0ZSBnZW5lcmljIGlycSBkZWZpbmVzIGFuZCB0eXBlZGVmcworV2hlbjoJMi42LjMwCitXaHk6CVRoZSBkZWZpbmVzIGFuZCB0eXBlZGVmcyAoaHdfaW50ZXJydXB0X3R5cGUsIG5vX2lycV90eXBlLCBpcnFfZGVzY190KQorCWhhdmUgYmVlbiBrZXB0IGFyb3VuZCBmb3IgbWlncmF0aW9uIHJlYXNvbnMuIEFmdGVyIG1vcmUgdGhhbiB0d28geWVhcnMKKwlpdCdzIHRpbWUgdG8gcmVtb3ZlIHRoZW0gZmluYWxseQorV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwppbmRleCBlYzZhOTM5Li40ZTc4Y2U2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC00MzcsOCArNDM3LDExIEBACiBjYW4gYW5kIHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSBpbnRlcm5hbCBsb2NraW5nIHdpdGggc21hbGxlciBjcml0aWNhbCBhcmVhcykuCiBDdXJyZW50IHdvcnN0IG9mZmVuZGVyIGlzIGV4dDJfZ2V0X2Jsb2NrKCkuLi4KIAotLT5mYXN5bmMoKSBpcyBhIG1lc3MuIFRoaXMgYXJlYSBuZWVkcyBhIGJpZyBjbGVhbnVwIGFuZCB0aGF0IHdpbGwgcHJvYmFibHkKLWFmZmVjdCBsb2NraW5nLgorLT5mYXN5bmMoKSBpcyBjYWxsZWQgd2l0aG91dCBCS0wgcHJvdGVjdGlvbiwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvcgorbWFpbnRhaW5pbmcgdGhlIEZBU1lOQyBiaXQgaW4gZmlscC0+Zl9mbGFncy4gIE1vc3QgaW5zdGFuY2VzIGNhbGwKK2Zhc3luY19oZWxwZXIoKSwgd2hpY2ggZG9lcyB0aGF0IG1haW50ZW5hbmNlLCBzbyBpdCdzIG5vdCBub3JtYWxseQorc29tZXRoaW5nIG9uZSBuZWVkcyB0byB3b3JyeSBhYm91dC4gIFJldHVybiB2YWx1ZXMgPiAwIHdpbGwgYmUgbWFwcGVkIHRvCit6ZXJvIGluIHRoZSBWRlMgbGF5ZXIuCiAKIC0+cmVhZGRpcigpIGFuZCAtPmlvY3RsKCkgb24gZGlyZWN0b3JpZXMgbXVzdCBiZSBjaGFuZ2VkLiBJZGVhbGx5IHdlIHdvdWxkCiBtb3ZlIC0+cmVhZGRpcigpIHRvIGlub2RlX29wZXJhdGlvbnMgYW5kIHVzZSBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDU0ZjIxYTUuLmZhNGUxMjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00NCw2ICs0NCw3IEBACiAJRkIJVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgZW5hYmxlZC4KIAlIVwlBcHByb3ByaWF0ZSBoYXJkd2FyZSBpcyBlbmFibGVkLgogCUlBLTY0CUlBLTY0IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCUlNQSAgICAgSW50ZWdyaXR5IG1lYXN1cmVtZW50IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgogCUlPU0NIRUQJTW9yZSB0aGFuIG9uZSBJL08gc2NoZWR1bGVyIGlzIGVuYWJsZWQuCiAJSVBfUE5QCUlQIERIQ1AsIEJPT1RQLCBvciBSQVJQIGlzIGVuYWJsZWQuCiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgpAQCAtNDkyLDEwICs0OTMsMTIgQEAKIAkJCURlZmF1bHQ6IDY0CiAKIAlocGV0PQkJW1g4Ni0zMixIUEVUXSBvcHRpb24gdG8gY29udHJvbCBIUEVUIHVzYWdlCi0JCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB9CisJCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB8CisJCQkJdmVyYm9zZSB9CiAJCQlkaXNhYmxlOiBkaXNhYmxlIEhQRVQgYW5kIHVzZSBQSVQgaW5zdGVhZAogCQkJZm9yY2U6IGFsbG93IGZvcmNlIGVuYWJsZWQgb2YgdW5kb2N1bWVudGVkIGNoaXBzIChJQ0g0LAogCQkJVklBLCBuVmlkaWEpCisJCQl2ZXJib3NlOiBzaG93IGNvbnRlbnRzIG9mIEhQRVQgcmVnaXN0ZXJzIGR1cmluZyBzZXR1cAogCiAJY29tMjAwMjA9CVtIVyxORVRdIEFSQ25ldCAtIENPTTIwMDIwIGNoaXBzZXQKIAkJCUZvcm1hdDoKQEAgLTgyOSw2ICs4MzIsOSBAQAogCiAJaHZjX2l1Y3Y9CVtTMzkwXSBOdW1iZXIgb2Ygei9WTSBJVUNWIGh5cGVydmlzb3IgY29uc29sZSAoSFZDKQogCQkJICAgICAgIHRlcm1pbmFsIGRldmljZXMuIFZhbGlkIHZhbHVlczogMC4uOAorCWh2Y19pdWN2X2FsbG93PQlbUzM5MF0gQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcy4KKwkJCSAgICAgICBJZiBzcGVjaWZpZWQsIHovVk0gSVVDViBIVkMgYWNjZXB0cyBjb25uZWN0aW9ucworCQkJICAgICAgIGZyb20gbGlzdGVkIHovVk0gdXNlciBJRHMgb25seS4KIAogCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKQEAgLTkwMiw2ICs5MDgsMTUgQEAKIAlpaGFzaF9lbnRyaWVzPQlbS05MXQogCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIGlub2RlIGNhY2hlLgogCisJaW1hX2F1ZGl0PQlbSU1BXQorCQkJRm9ybWF0OiB7ICIwIiB8ICIxIiB9CisJCQkwIC0tIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4gKERlZmF1bHQpCisJCQkxIC0tIGVuYWJsZSBpbmZvcm1hdGlvbmFsIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4KKworCWltYV9oYXNoPQlbSU1BXQorCQkJRm9ybXQ6IHsgInNoYTEiIHwgIm1kNSIgfQorCQkJZGVmYXVsdDogInNoYTEiCisKIAlpbjIwMDA9CQlbSFcsU0NTSV0KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2luMjAwMC5jLgogCkBAIC0xODE2LDExICsxODMxLDYgQEAKIAkJCWF1dG9jb25maWd1cmF0aW9uLgogCQkJUmFuZ2VzIGFyZSBpbiBwYWlycyAobWVtb3J5IGJhc2UgYW5kIHNpemUpLgogCi0JZHluYW1pY19wcmludGsJRW5hYmxlcyBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBpZgotCQkJQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGhhcyBiZWVuIGVuYWJsZWQuCi0JCQlUaGVzZSBjYW4gYWxzbyBiZSBzd2l0Y2hlZCBvbi9vZmYgdmlhCi0JCQk8ZGVidWdmcz4vZHluYW1pY19wcmludGsvbW9kdWxlcwotCiAJcHJpbnQtZmF0YWwtc2lnbmFscz0KIAkJCVtLTkxdIGRlYnVnOiBwcmludCBmYXRhbCBzaWduYWxzCiAJCQlwcmludC1mYXRhbC1zaWduYWxzPTE6IHByaW50IHNlZ2ZhdWx0IGluZm8gdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAppbmRleCA3YTNiYjFhLi5iMTMyZTRhMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApAQCAtMTQxLDcgKzE0MSw4IEBACiAJRGVmYXVsdCBDQ0lEIGZvciB0aGUgcmVjZWl2ZXItc2VuZGVyIGhhbGYtY29ubmVjdGlvbjsgc2VlIHR4X2NjaWQuCiAKIHNlcV93aW5kb3cgPSAxMDAKLQlUaGUgaW5pdGlhbCBzZXF1ZW5jZSB3aW5kb3cgKHNlYy4gNy41LjIpLgorCVRoZSBpbml0aWFsIHNlcXVlbmNlIHdpbmRvdyAoc2VjLiA3LjUuMikgb2YgdGhlIHNlbmRlci4gVGhpcyBpbmZsdWVuY2VzCisJdGhlIGxvY2FsIGFja25vIHZhbGlkaXR5IGFuZCB0aGUgcmVtb3RlIHNlcW5vIHZhbGlkaXR5IHdpbmRvd3MgKDcuNS4xKS4KIAogdHhfcWxlbiA9IDUKIAlUaGUgc2l6ZSBvZiB0aGUgdHJhbnNtaXQgYnVmZmVyIGluIHBhY2tldHMuIEEgdmFsdWUgb2YgMCBjb3JyZXNwb25kcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCBjNzcxMjc4Li5lYzVkZTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtMiw3ICsyLDcgQEAKIAogaXBfZm9yd2FyZCAtIEJPT0xFQU4KIAkwIC0gZGlzYWJsZWQgKGRlZmF1bHQpCi0Jbm90IDAgLSBlbmFibGVkIAorCW5vdCAwIC0gZW5hYmxlZAogCiAJRm9yd2FyZCBQYWNrZXRzIGJldHdlZW4gaW50ZXJmYWNlcy4KIApAQCAtMzYsNDkgKzM2LDQ5IEBACiBJUCBGcmFnbWVudGF0aW9uOgogCiBpcGZyYWdfaGlnaF90aHJlc2ggLSBJTlRFR0VSCi0JTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQIGZyYWdtZW50cy4gV2hlbiAKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuCiAJaXBmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZSwKIAl0aGUgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MgcGFja2V0cyB1bnRpbCBpcGZyYWdfbG93X3RocmVzaAogCWlzIHJlYWNoZWQuCi0JCisKIGlwZnJhZ19sb3dfdGhyZXNoIC0gSU5URUdFUgotCVNlZSBpcGZyYWdfaGlnaF90aHJlc2gJCisJU2VlIGlwZnJhZ19oaWdoX3RocmVzaAogCiBpcGZyYWdfdGltZSAtIElOVEVHRVIKLQlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUCBmcmFnbWVudCBpbiBtZW1vcnkuCQorCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQIGZyYWdtZW50IGluIG1lbW9yeS4KIAogaXBmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKLQlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lCiAJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQIGZyYWdtZW50cy4KIAlEZWZhdWx0OiA2MDAKIAogaXBmcmFnX21heF9kaXN0IC0gSU5URUdFUgotCWlwZnJhZ19tYXhfZGlzdCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGRlZmluZXMgdGhlIAotCW1heGltdW0gImRpc29yZGVyIiB3aGljaCBpcyBhbGxvd2VkIGFtb25nIGZyYWdtZW50cyB3aGljaCBzaGFyZSBhIAotCWNvbW1vbiBJUCBzb3VyY2UgYWRkcmVzcy4gTm90ZSB0aGF0IHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpcyAKLQlub3QgdW51c3VhbCwgYnV0IGlmIGEgbGFyZ2UgbnVtYmVyIG9mIGZyYWdtZW50cyBhcnJpdmUgZnJvbSBhIHNvdXJjZSAKLQlJUCBhZGRyZXNzIHdoaWxlIGEgcGFydGljdWxhciBmcmFnbWVudCBxdWV1ZSByZW1haW5zIGluY29tcGxldGUsIGl0IAotCXByb2JhYmx5IGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlIGZyYWdtZW50cyBiZWxvbmdpbmcgdG8gdGhhdCBxdWV1ZSAKLQloYXZlIGJlZW4gbG9zdC4gV2hlbiBpcGZyYWdfbWF4X2Rpc3QgaXMgcG9zaXRpdmUsIGFuIGFkZGl0aW9uYWwgY2hlY2sgCi0JaXMgZG9uZSBvbiBmcmFnbWVudHMgYmVmb3JlIHRoZXkgYXJlIGFkZGVkIHRvIGEgcmVhc3NlbWJseSBxdWV1ZSAtIGlmIAotCWlwZnJhZ19tYXhfZGlzdCAob3IgbW9yZSkgZnJhZ21lbnRzIGhhdmUgYXJyaXZlZCBmcm9tIGEgcGFydGljdWxhciBJUCAKLQlhZGRyZXNzIGJldHdlZW4gYWRkaXRpb25zIHRvIGFueSBJUCBmcmFnbWVudCBxdWV1ZSB1c2luZyB0aGF0IHNvdXJjZSAKLQlhZGRyZXNzLCBpdCdzIHByZXN1bWVkIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGluIHRoZSBxdWV1ZSBhcmUgCi0JbG9zdC4gVGhlIGV4aXN0aW5nIGZyYWdtZW50IHF1ZXVlIHdpbGwgYmUgZHJvcHBlZCwgYW5kIGEgbmV3IG9uZSAKKwlpcGZyYWdfbWF4X2Rpc3QgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aGljaCBkZWZpbmVzIHRoZQorCW1heGltdW0gImRpc29yZGVyIiB3aGljaCBpcyBhbGxvd2VkIGFtb25nIGZyYWdtZW50cyB3aGljaCBzaGFyZSBhCisJY29tbW9uIElQIHNvdXJjZSBhZGRyZXNzLiBOb3RlIHRoYXQgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGlzCisJbm90IHVudXN1YWwsIGJ1dCBpZiBhIGxhcmdlIG51bWJlciBvZiBmcmFnbWVudHMgYXJyaXZlIGZyb20gYSBzb3VyY2UKKwlJUCBhZGRyZXNzIHdoaWxlIGEgcGFydGljdWxhciBmcmFnbWVudCBxdWV1ZSByZW1haW5zIGluY29tcGxldGUsIGl0CisJcHJvYmFibHkgaW5kaWNhdGVzIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGJlbG9uZ2luZyB0byB0aGF0IHF1ZXVlCisJaGF2ZSBiZWVuIGxvc3QuIFdoZW4gaXBmcmFnX21heF9kaXN0IGlzIHBvc2l0aXZlLCBhbiBhZGRpdGlvbmFsIGNoZWNrCisJaXMgZG9uZSBvbiBmcmFnbWVudHMgYmVmb3JlIHRoZXkgYXJlIGFkZGVkIHRvIGEgcmVhc3NlbWJseSBxdWV1ZSAtIGlmCisJaXBmcmFnX21heF9kaXN0IChvciBtb3JlKSBmcmFnbWVudHMgaGF2ZSBhcnJpdmVkIGZyb20gYSBwYXJ0aWN1bGFyIElQCisJYWRkcmVzcyBiZXR3ZWVuIGFkZGl0aW9ucyB0byBhbnkgSVAgZnJhZ21lbnQgcXVldWUgdXNpbmcgdGhhdCBzb3VyY2UKKwlhZGRyZXNzLCBpdCdzIHByZXN1bWVkIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGluIHRoZSBxdWV1ZSBhcmUKKwlsb3N0LiBUaGUgZXhpc3RpbmcgZnJhZ21lbnQgcXVldWUgd2lsbCBiZSBkcm9wcGVkLCBhbmQgYSBuZXcgb25lCiAJc3RhcnRlZC4gQW4gaXBmcmFnX21heF9kaXN0IHZhbHVlIG9mIHplcm8gZGlzYWJsZXMgdGhpcyBjaGVjay4KIAogCVVzaW5nIGEgdmVyeSBzbWFsbCB2YWx1ZSwgZS5nLiAxIG9yIDIsIGZvciBpcGZyYWdfbWF4X2Rpc3QgY2FuCiAJcmVzdWx0IGluIHVubmVjZXNzYXJpbHkgZHJvcHBpbmcgZnJhZ21lbnQgcXVldWVzIHdoZW4gbm9ybWFsCi0JcmVvcmRlcmluZyBvZiBwYWNrZXRzIG9jY3Vycywgd2hpY2ggY291bGQgbGVhZCB0byBwb29yIGFwcGxpY2F0aW9uIAotCXBlcmZvcm1hbmNlLiBVc2luZyBhIHZlcnkgbGFyZ2UgdmFsdWUsIGUuZy4gNTAwMDAsIGluY3JlYXNlcyB0aGUgCi0JbGlrZWxpaG9vZCBvZiBpbmNvcnJlY3RseSByZWFzc2VtYmxpbmcgSVAgZnJhZ21lbnRzIHRoYXQgb3JpZ2luYXRlIAorCXJlb3JkZXJpbmcgb2YgcGFja2V0cyBvY2N1cnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcG9vciBhcHBsaWNhdGlvbgorCXBlcmZvcm1hbmNlLiBVc2luZyBhIHZlcnkgbGFyZ2UgdmFsdWUsIGUuZy4gNTAwMDAsIGluY3JlYXNlcyB0aGUKKwlsaWtlbGlob29kIG9mIGluY29ycmVjdGx5IHJlYXNzZW1ibGluZyBJUCBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGUKIAlmcm9tIGRpZmZlcmVudCBJUCBkYXRhZ3JhbXMsIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkYXRhIGNvcnJ1cHRpb24uCiAJRGVmYXVsdDogNjQKIAogSU5FVCBwZWVyIHN0b3JhZ2U6CiAKIGluZXRfcGVlcl90aHJlc2hvbGQgLSBJTlRFR0VSCi0JVGhlIGFwcHJveGltYXRlIHNpemUgb2YgdGhlIHN0b3JhZ2UuICBTdGFydGluZyBmcm9tIHRoaXMgdGhyZXNob2xkCQorCVRoZSBhcHByb3hpbWF0ZSBzaXplIG9mIHRoZSBzdG9yYWdlLiAgU3RhcnRpbmcgZnJvbSB0aGlzIHRocmVzaG9sZAogCWVudHJpZXMgd2lsbCBiZSB0aHJvd24gYWdncmVzc2l2ZWx5LiAgVGhpcyB0aHJlc2hvbGQgYWxzbyBkZXRlcm1pbmVzCiAJZW50cmllcycgdGltZS10by1saXZlIGFuZCB0aW1lIGludGVydmFscyBiZXR3ZWVuIGdhcmJhZ2UgY29sbGVjdGlvbgogCXBhc3Nlcy4gIE1vcmUgZW50cmllcywgbGVzcyB0aW1lLXRvLWxpdmUsIGxlc3MgR0MgaW50ZXJ2YWwuCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpbiBlZmZlY3QgdW5kZXIgbG93IChvciBhYnNlbnQpIG1lbW9yeSBwcmVzc3VyZSBvbiB0aGUgcG9vbC4KIAlNZWFzdXJlZCBpbiBzZWNvbmRzLgogCi1UQ1AgdmFyaWFibGVzOiAKK1RDUCB2YXJpYWJsZXM6CiAKIHNvbWF4Y29ubiAtIElOVEVHRVIKIAlMaW1pdCBvZiBzb2NrZXQgbGlzdGVuKCkgYmFja2xvZywga25vd24gaW4gdXNlcnNwYWNlIGFzIFNPTUFYQ09OTi4KQEAgLTMxMCw3ICszMTAsNyBAQAogCiB0Y3BfcmVvcmRlcmluZyAtIElOVEVHRVIKIAlNYXhpbWFsIHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpbiBhIFRDUCBzdHJlYW0uCi0JRGVmYXVsdDogMwkKKwlEZWZhdWx0OiAzCiAKIHRjcF9yZXRyYW5zX2NvbGxhcHNlIC0gQk9PTEVBTgogCUJ1Zy10by1idWcgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgYnJva2VuIHByaW50ZXJzLgpAQCAtNTIxLDcgKzUyMSw3IEBACiAKIGlwX2xvY2FsX3BvcnRfcmFuZ2UgLSAyIElOVEVHRVJTCiAJRGVmaW5lcyB0aGUgbG9jYWwgcG9ydCByYW5nZSB0aGF0IGlzIHVzZWQgYnkgVENQIGFuZCBVRFAgdG8KLQljaG9vc2UgdGhlIGxvY2FsIHBvcnQuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGZpcnN0LCB0aGUgCisJY2hvb3NlIHRoZSBsb2NhbCBwb3J0LiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBmaXJzdCwgdGhlCiAJc2Vjb25kIHRoZSBsYXN0IGxvY2FsIHBvcnQgbnVtYmVyLiBEZWZhdWx0IHZhbHVlIGRlcGVuZHMgb24KIAlhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtOgogCT4gMTI4TWIgMzI3NjgtNjEwMDAKQEAgLTU5NCwxMiArNTk0LDEyIEBACiAKIAlJZiB6ZXJvLCBpY21wIGVycm9yIG1lc3NhZ2VzIGFyZSBzZW50IHdpdGggdGhlIHByaW1hcnkgYWRkcmVzcyBvZgogCXRoZSBleGl0aW5nIGludGVyZmFjZS4KLSAKKwogCUlmIG5vbi16ZXJvLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mCiAJdGhlIGludGVyZmFjZSB0aGF0IHJlY2VpdmVkIHRoZSBwYWNrZXQgdGhhdCBjYXVzZWQgdGhlIGljbXAgZXJyb3IuCiAJVGhpcyBpcyB0aGUgYmVoYXZpb3VyIG5ldHdvcmsgbWFueSBhZG1pbmlzdHJhdG9ycyB3aWxsIGV4cGVjdCBmcm9tCiAJYSByb3V0ZXIuIEFuZCBpdCBjYW4gbWFrZSBkZWJ1Z2dpbmcgY29tcGxpY2F0ZWQgbmV0d29yayBsYXlvdXRzCi0JbXVjaCBlYXNpZXIuIAorCW11Y2ggZWFzaWVyLgogCiAJTm90ZSB0aGF0IGlmIG5vIHByaW1hcnkgYWRkcmVzcyBleGlzdHMgZm9yIHRoZSBpbnRlcmZhY2Ugc2VsZWN0ZWQsCiAJdGhlbiB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBub24tbG9vcGJhY2sgaW50ZXJmYWNlIHRoYXQKQEAgLTYxMSw3ICs2MTEsNyBAQAogCUNoYW5nZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGdyb3VwcyB3ZSBjYW4gc3Vic2NyaWJlIHRvLgogCURlZmF1bHQ6IDIwCiAKLWNvbmYvaW50ZXJmYWNlLyogIGNoYW5nZXMgc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlICh3aGVyZSAiaW50ZXJmYWNlIiBpcyAKK2NvbmYvaW50ZXJmYWNlLyogIGNoYW5nZXMgc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlICh3aGVyZSAiaW50ZXJmYWNlIiBpcwogCQkgIHRoZSBuYW1lIG9mIHlvdXIgbmV0d29yayBpbnRlcmZhY2UpCiBjb25mL2FsbC8qCSAgaXMgc3BlY2lhbCwgY2hhbmdlcyB0aGUgc2V0dGluZ3MgZm9yIGFsbCBpbnRlcmZhY2VzCiAKQEAgLTYyNSwxMSArNjI1LDExIEBACiBhY2NlcHRfcmVkaXJlY3RzIC0gQk9PTEVBTgogCUFjY2VwdCBJQ01QIHJlZGlyZWN0IG1lc3NhZ2VzLgogCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmOgotCS0gYm90aCBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGFyZSBUUlVFIGluIHRoZSBjYXNlIGZvcndhcmRpbmcKLQkgIGZvciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKKwktIGJvdGggY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBhcmUgVFJVRSBpbiB0aGUgY2FzZQorCSAgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkCiAJb3IKLQktIGF0IGxlYXN0IG9uZSBvZiBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgaW4gdGhlIGNhc2UKLQkgIGZvcndhcmRpbmcgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQKKwktIGF0IGxlYXN0IG9uZSBvZiBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgaW4gdGhlCisJICBjYXNlIGZvcndhcmRpbmcgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQKIAlhY2NlcHRfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCiAJZGVmYXVsdCBUUlVFIChob3N0KQogCQlGQUxTRSAocm91dGVyKQpAQCAtNjQwLDggKzY0MCw4IEBACiBtY19mb3J3YXJkaW5nIC0gQk9PTEVBTgogCURvIG11bHRpY2FzdCByb3V0aW5nLiBUaGUga2VybmVsIG5lZWRzIHRvIGJlIGNvbXBpbGVkIHdpdGggQ09ORklHX01ST1VURQogCWFuZCBhIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbiBpcyByZXF1aXJlZC4KLQljb25mL2FsbC9tY19mb3J3YXJkaW5nIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBlbmFibGUgbXVsdGljYXN0IHJvdXRpbmcKLQlmb3IgdGhlIGludGVyZmFjZQorCWNvbmYvYWxsL21jX2ZvcndhcmRpbmcgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBtdWx0aWNhc3QKKwlyb3V0aW5nCWZvciB0aGUgaW50ZXJmYWNlCiAKIG1lZGl1bV9pZCAtIElOVEVHRVIKIAlJbnRlZ2VyIHZhbHVlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgZGV2aWNlcyBieSB0aGUgbWVkaXVtIHRoZXkKQEAgLTY0OSw3ICs2NDksNyBAQAogCXRoZSBicm9hZGNhc3QgcGFja2V0cyBhcmUgcmVjZWl2ZWQgb25seSBvbiBvbmUgb2YgdGhlbS4KIAlUaGUgZGVmYXVsdCB2YWx1ZSAwIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyB0aGUgb25seSBpbnRlcmZhY2UKIAl0byBpdHMgbWVkaXVtLCB2YWx1ZSBvZiAtMSBtZWFucyB0aGF0IG1lZGl1bSBpcyBub3Qga25vd24uCi0JCisKIAlDdXJyZW50bHksIGl0IGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBwcm94eV9hcnAgYmVoYXZpb3I6CiAJdGhlIHByb3h5X2FycCBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHBhY2tldHMgZm9yd2FyZGVkIGJldHdlZW4KIAl0d28gZGV2aWNlcyBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbWVkaWEuCkBAIC02OTksMTYgKzY5OSwyMiBAQAogCWRlZmF1bHQgVFJVRSAocm91dGVyKQogCQlGQUxTRSAoaG9zdCkKIAotcnBfZmlsdGVyIC0gQk9PTEVBTgotCTEgLSBkbyBzb3VyY2UgdmFsaWRhdGlvbiBieSByZXZlcnNlZCBwYXRoLCBhcyBzcGVjaWZpZWQgaW4gUkZDMTgxMgotCSAgICBSZWNvbW1lbmRlZCBvcHRpb24gZm9yIHNpbmdsZSBob21lZCBob3N0cyBhbmQgc3R1YiBuZXR3b3JrCi0JICAgIHJvdXRlcnMuIENvdWxkIGNhdXNlIHRyb3VibGVzIGZvciBjb21wbGljYXRlZCAobm90IGxvb3AgZnJlZSkKLQkgICAgbmV0d29ya3MgcnVubmluZyBhIHNsb3cgdW5yZWxpYWJsZSBwcm90b2NvbCAoc29ydCBvZiBSSVApLAotCSAgICBvciB1c2luZyBzdGF0aWMgcm91dGVzLgotCitycF9maWx0ZXIgLSBJTlRFR0VSCiAJMCAtIE5vIHNvdXJjZSB2YWxpZGF0aW9uLgorCTEgLSBTdHJpY3QgbW9kZSBhcyBkZWZpbmVkIGluIFJGQzM3MDQgU3RyaWN0IFJldmVyc2UgUGF0aAorCSAgICBFYWNoIGluY29taW5nIHBhY2tldCBpcyB0ZXN0ZWQgYWdhaW5zdCB0aGUgRklCIGFuZCBpZiB0aGUgaW50ZXJmYWNlCisJICAgIGlzIG5vdCB0aGUgYmVzdCByZXZlcnNlIHBhdGggdGhlIHBhY2tldCBjaGVjayB3aWxsIGZhaWwuCisJICAgIEJ5IGRlZmF1bHQgZmFpbGVkIHBhY2tldHMgYXJlIGRpc2NhcmRlZC4KKwkyIC0gTG9vc2UgbW9kZSBhcyBkZWZpbmVkIGluIFJGQzM3MDQgTG9vc2UgUmV2ZXJzZSBQYXRoCisJICAgIEVhY2ggaW5jb21pbmcgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgaXMgYWxzbyB0ZXN0ZWQgYWdhaW5zdCB0aGUgRklCCisJICAgIGFuZCBpZiB0aGUgc291cmNlIGFkZHJlc3MgaXMgbm90IHJlYWNoYWJsZSB2aWEgYW55IGludGVyZmFjZQorCSAgICB0aGUgcGFja2V0IGNoZWNrIHdpbGwgZmFpbC4KIAotCWNvbmYvYWxsL3JwX2ZpbHRlciBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZG8gc291cmNlIHZhbGlkYXRpb24KKwlDdXJyZW50IHJlY29tbWVuZGVkIHByYWN0aWNlIGluIFJGQzM3MDQgaXMgdG8gZW5hYmxlIHN0cmljdCBtb2RlCisJdG8gcHJldmVudCBJUCBzcG9vZmluZyBmcm9tIEREb3MgYXR0YWNrcy4gSWYgdXNpbmcgYXN5bW1ldHJpYyByb3V0aW5nCisJb3Igb3RoZXIgY29tcGxpY2F0ZWQgcm91dGluZywgdGhlbiBsb29zZSBtb2RlIGlzIHJlY29tbWVuZGVkLgorCisJY29uZi9hbGwvcnBfZmlsdGVyIG11c3QgYWxzbyBiZSBzZXQgdG8gbm9uLXplcm8gdG8gZG8gc291cmNlIHZhbGlkYXRpb24KIAlvbiB0aGUgaW50ZXJmYWNlCiAKIAlEZWZhdWx0IHZhbHVlIGlzIDAuIE5vdGUgdGhhdCBzb21lIGRpc3RyaWJ1dGlvbnMgZW5hYmxlIGl0CkBAIC03ODIsNiArNzg4LDEyIEBACiAJVGhlIG1heCB2YWx1ZSBmcm9tIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FycF9pZ25vcmUgaXMgdXNlZAogCXdoZW4gQVJQIHJlcXVlc3QgaXMgcmVjZWl2ZWQgb24gdGhlIHtpbnRlcmZhY2V9CiAKK2FycF9ub3RpZnkgLSBCT09MRUFOCisJRGVmaW5lIG1vZGUgZm9yIG5vdGlmaWNhdGlvbiBvZiBhZGRyZXNzIGFuZCBkZXZpY2UgY2hhbmdlcy4KKwkwIC0gKGRlZmF1bHQpOiBkbyBub3RoaW5nCisJMSAtIEdlbmVyYXRlIGdyYXR1aXRvdXMgYXJwIHJlcGxpZXMgd2hlbiBkZXZpY2UgaXMgYnJvdWdodCB1cAorCSAgICBvciBoYXJkd2FyZSBhZGRyZXNzIGNoYW5nZXMuCisKIGFycF9hY2NlcHQgLSBCT09MRUFOCiAJRGVmaW5lIGJlaGF2aW9yIHdoZW4gZ3JhdHVpdG91cyBhcnAgcmVwbGllcyBhcmUgcmVjZWl2ZWQ6CiAJMCAtIGRyb3AgZ3JhdHVpdG91cyBhcnAgZnJhbWVzCkBAIC04MjMsNyArODM1LDcgQEAKIAogYmluZHY2b25seSAtIEJPT0xFQU4KIAlEZWZhdWx0IHZhbHVlIGZvciBJUFY2X1Y2T05MWSBzb2NrZXQgb3B0aW9uLAotCXdoaWNoIHJlc3RyaWN0cyB1c2Ugb2YgdGhlIElQdjYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbiAKKwl3aGljaCByZXN0cmljdHMgdXNlIG9mIHRoZSBJUHY2IHNvY2tldCB0byBJUHY2IGNvbW11bmljYXRpb24KIAlvbmx5LgogCQlUUlVFOiBkaXNhYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQogCQlGQUxTRTogZW5hYmxlIElQdjQtbWFwcGVkIGFkZHJlc3MgZmVhdHVyZQpAQCAtODMzLDE5ICs4NDUsMTkgQEAKIElQdjYgRnJhZ21lbnRhdGlvbjoKIAogaXA2ZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKLQlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVB2NiBmcmFnbWVudHMuIFdoZW4gCisJTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQdjYgZnJhZ21lbnRzLiBXaGVuCiAJaXA2ZnJhZ19oaWdoX3RocmVzaCBieXRlcyBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGlzIHB1cnBvc2UsCiAJdGhlIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzIHBhY2tldHMgdW50aWwgaXA2ZnJhZ19sb3dfdGhyZXNoCiAJaXMgcmVhY2hlZC4KLQkKKwogaXA2ZnJhZ19sb3dfdGhyZXNoIC0gSU5URUdFUgotCVNlZSBpcDZmcmFnX2hpZ2hfdGhyZXNoCQorCVNlZSBpcDZmcmFnX2hpZ2hfdGhyZXNoCiAKIGlwNmZyYWdfdGltZSAtIElOVEVHRVIKIAlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUHY2IGZyYWdtZW50IGluIG1lbW9yeS4KIAogaXA2ZnJhZ19zZWNyZXRfaW50ZXJ2YWwgLSBJTlRFR0VSCi0JUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lIAorCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZQogCWZvciB0aGUgaGFzaCBzZWNyZXQpIGZvciBJUHY2IGZyYWdtZW50cy4KIAlEZWZhdWx0OiA2MDAKIApAQCAtODU0LDE3ICs4NjYsMTcgQEAKIAogCiBjb25mL2FsbC8qOgotCUNoYW5nZSBhbGwgdGhlIGludGVyZmFjZS1zcGVjaWZpYyBzZXR0aW5ncy4gIAorCUNoYW5nZSBhbGwgdGhlIGludGVyZmFjZS1zcGVjaWZpYyBzZXR0aW5ncy4KIAogCVtYWFg6ICBPdGhlciBzcGVjaWFsIGZlYXR1cmVzIHRoYW4gZm9yd2FyZGluZz9dCiAKIGNvbmYvYWxsL2ZvcndhcmRpbmcgLSBCT09MRUFOCi0JRW5hYmxlIGdsb2JhbCBJUHY2IGZvcndhcmRpbmcgYmV0d2VlbiBhbGwgaW50ZXJmYWNlcy4gIAorCUVuYWJsZSBnbG9iYWwgSVB2NiBmb3J3YXJkaW5nIGJldHdlZW4gYWxsIGludGVyZmFjZXMuCiAKLQlJUHY0IGFuZCBJUHY2IHdvcmsgZGlmZmVyZW50bHkgaGVyZTsgZS5nLiBuZXRmaWx0ZXIgbXVzdCBiZSB1c2VkIAorCUlQdjQgYW5kIElQdjYgd29yayBkaWZmZXJlbnRseSBoZXJlOyBlLmcuIG5ldGZpbHRlciBtdXN0IGJlIHVzZWQKIAl0byBjb250cm9sIHdoaWNoIGludGVyZmFjZXMgbWF5IGZvcndhcmQgcGFja2V0cyBhbmQgd2hpY2ggbm90LgogCi0JVGhpcyBhbHNvIHNldHMgYWxsIGludGVyZmFjZXMnIEhvc3QvUm91dGVyIHNldHRpbmcgCisJVGhpcyBhbHNvIHNldHMgYWxsIGludGVyZmFjZXMnIEhvc3QvUm91dGVyIHNldHRpbmcKIAknZm9yd2FyZGluZycgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KIAogCVRoaXMgcmVmZXJyZWQgdG8gYXMgZ2xvYmFsIGZvcndhcmRpbmcuCkBAIC04NzUsMTIgKzg4NywxMiBAQAogY29uZi9pbnRlcmZhY2UvKjoKIAlDaGFuZ2Ugc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlLgogCi0JVGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3VyIGZvciBjZXJ0YWluIHNldHRpbmdzIGlzIGRpZmZlcmVudCAKKwlUaGUgZnVuY3Rpb25hbCBiZWhhdmlvdXIgZm9yIGNlcnRhaW4gc2V0dGluZ3MgaXMgZGlmZmVyZW50CiAJZGVwZW5kaW5nIG9uIHdoZXRoZXIgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkIG9yIG5vdC4KIAogYWNjZXB0X3JhIC0gQk9PTEVBTgogCUFjY2VwdCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHM7IGF1dG9jb25maWd1cmUgdXNpbmcgdGhlbS4KLQkKKwogCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLgogCQkJICAgIGRpc2FibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZC4KIApAQCAtOTI2LDcgKzkzOCw3IEBACiAJRGVmYXVsdDogMAogCiBhdXRvY29uZiAtIEJPT0xFQU4KLQlBdXRvY29uZmlndXJlIGFkZHJlc3NlcyB1c2luZyBQcmVmaXggSW5mb3JtYXRpb24gaW4gUm91dGVyIAorCUF1dG9jb25maWd1cmUgYWRkcmVzc2VzIHVzaW5nIFByZWZpeCBJbmZvcm1hdGlvbiBpbiBSb3V0ZXIKIAlBZHZlcnRpc2VtZW50cy4KIAogCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBhY2NlcHRfcmFfcGluZm8gaXMgZW5hYmxlZC4KQEAgLTkzNSwxMSArOTQ3LDExIEBACiBkYWRfdHJhbnNtaXRzIC0gSU5URUdFUgogCVRoZSBhbW91bnQgb2YgRHVwbGljYXRlIEFkZHJlc3MgRGV0ZWN0aW9uIHByb2JlcyB0byBzZW5kLgogCURlZmF1bHQ6IDEKLQkKLWZvcndhcmRpbmcgLSBCT09MRUFOCi0JQ29uZmlndXJlIGludGVyZmFjZS1zcGVjaWZpYyBIb3N0L1JvdXRlciBiZWhhdmlvdXIuICAKIAotCU5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIGhhdmUgdGhlIHNhbWUgc2V0dGluZyBvbiBhbGwgCitmb3J3YXJkaW5nIC0gQk9PTEVBTgorCUNvbmZpZ3VyZSBpbnRlcmZhY2Utc3BlY2lmaWMgSG9zdC9Sb3V0ZXIgYmVoYXZpb3VyLgorCisJTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGUgc2FtZSBzZXR0aW5nIG9uIGFsbAogCWludGVyZmFjZXM7IG1peGVkIHJvdXRlci9ob3N0IHNjZW5hcmlvcyBhcmUgcmF0aGVyIHVuY29tbW9uLgogCiAJRkFMU0U6CkBAIC05NDgsMTMgKzk2MCwxMyBAQAogCiAJMS4gSXNSb3V0ZXIgZmxhZyBpcyBub3Qgc2V0IGluIE5laWdoYm91ciBBZHZlcnRpc2VtZW50cy4KIAkyLiBSb3V0ZXIgU29saWNpdGF0aW9ucyBhcmUgYmVpbmcgc2VudCB3aGVuIG5lY2Vzc2FyeS4KLQkzLiBJZiBhY2NlcHRfcmEgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSb3V0ZXIgCisJMy4gSWYgYWNjZXB0X3JhIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUm91dGVyCiAJICAgQWR2ZXJ0aXNlbWVudHMgKGFuZCBkbyBhdXRvY29uZmlndXJhdGlvbikuCiAJNC4gSWYgYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJlZGlyZWN0cy4KIAogCVRSVUU6CiAKLQlJZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIFJvdXRlciBiZWhhdmlvdXIgaXMgYXNzdW1lZC4gCisJSWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLCBSb3V0ZXIgYmVoYXZpb3VyIGlzIGFzc3VtZWQuCiAJVGhpcyBtZWFucyBleGFjdGx5IHRoZSByZXZlcnNlIGZyb20gdGhlIGFib3ZlOgogCiAJMS4gSXNSb3V0ZXIgZmxhZyBpcyBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgpAQCAtOTg5LDcgKzEwMDEsNyBAQAogCURlZmF1bHQ6IDQKIAogcm91dGVyX3NvbGljaXRhdGlvbnMgLSBJTlRFR0VSCi0JTnVtYmVyIG9mIFJvdXRlciBTb2xpY2l0YXRpb25zIHRvIHNlbmQgdW50aWwgYXNzdW1pbmcgbm8gCisJTnVtYmVyIG9mIFJvdXRlciBTb2xpY2l0YXRpb25zIHRvIHNlbmQgdW50aWwgYXNzdW1pbmcgbm8KIAlyb3V0ZXJzIGFyZSBwcmVzZW50LgogCURlZmF1bHQ6IDMKIApAQCAtMTAxMywxMSArMTAyNSwxMSBAQAogCiBtYXhfZGVzeW5jX2ZhY3RvciAtIElOVEVHRVIKIAlNYXhpbXVtIHZhbHVlIGZvciBERVNZTkNfRkFDVE9SLCB3aGljaCBpcyBhIHJhbmRvbSB2YWx1ZQotCXRoYXQgZW5zdXJlcyB0aGF0IGNsaWVudHMgZG9uJ3Qgc3luY2hyb25pemUgd2l0aCBlYWNoIAorCXRoYXQgZW5zdXJlcyB0aGF0IGNsaWVudHMgZG9uJ3Qgc3luY2hyb25pemUgd2l0aCBlYWNoCiAJb3RoZXIgYW5kIGdlbmVyYXRlIG5ldyBhZGRyZXNzZXMgYXQgZXhhY3RseSB0aGUgc2FtZSB0aW1lLgogCXZhbHVlIGlzIGluIHNlY29uZHMuCiAJRGVmYXVsdDogNjAwCi0JCisKIHJlZ2VuX21heF9yZXRyeSAtIElOVEVHRVIKIAlOdW1iZXIgb2YgYXR0ZW1wdHMgYmVmb3JlIGdpdmUgdXAgYXR0ZW1wdGluZyB0byBnZW5lcmF0ZQogCXZhbGlkIHRlbXBvcmFyeSBhZGRyZXNzZXMuCkBAIC0xMDI1LDEzICsxMDM3LDE1IEBACiAKIG1heF9hZGRyZXNzZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIG1heGltdW0gYWRkcmVzc2VzIHBlciBpbnRlcmZhY2UuICAwIGRpc2FibGVzIGxpbWl0YXRpb24uCi0JSXQgaXMgcmVjb21tZW5kZWQgbm90IHNldCB0b28gbGFyZ2UgdmFsdWUgKG9yIDApIGJlY2F1c2UgaXQgd291bGQgCi0JYmUgdG9vIGVhc3kgd2F5IHRvIGNyYXNoIGtlcm5lbCB0byBhbGxvdyB0byBjcmVhdGUgdG9vIG11Y2ggb2YgCisJSXQgaXMgcmVjb21tZW5kZWQgbm90IHNldCB0b28gbGFyZ2UgdmFsdWUgKG9yIDApIGJlY2F1c2UgaXQgd291bGQKKwliZSB0b28gZWFzeSB3YXkgdG8gY3Jhc2gga2VybmVsIHRvIGFsbG93IHRvIGNyZWF0ZSB0b28gbXVjaCBvZgogCWF1dG9jb25maWd1cmVkIGFkZHJlc3Nlcy4KIAlEZWZhdWx0OiAxNgogCiBkaXNhYmxlX2lwdjYgLSBCT09MRUFOCi0JRGlzYWJsZSBJUHY2IG9wZXJhdGlvbi4KKwlEaXNhYmxlIElQdjYgb3BlcmF0aW9uLiAgSWYgYWNjZXB0X2RhZCBpcyBzZXQgdG8gMiwgdGhpcyB2YWx1ZQorCXdpbGwgYmUgZHluYW1pY2FsbHkgc2V0IHRvIFRSVUUgaWYgREFEIGZhaWxzIGZvciB0aGUgbGluay1sb2NhbAorCWFkZHJlc3MuCiAJRGVmYXVsdDogRkFMU0UgKGVuYWJsZSBJUHY2IG9wZXJhdGlvbikKIAogYWNjZXB0X2RhZCAtIElOVEVHRVIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjY4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0CkBAIC0wLDAgKzEsMTk5IEBACitMaW51eCBCYXNlIERyaXZlciBmb3IgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBJbnRlbChSKSBOZXR3b3JrIENvbm5lY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNYXJjaCAxMCwgMjAwOQorCisKK0NvbnRlbnRzCis9PT09PT09PQorCistIEluIFRoaXMgUmVsZWFzZQorLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorLSBBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCistIFN1cHBvcnQKKworCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGl4Z2JlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgMTAgR2lnYWJpdCBQQ0kKK0V4cHJlc3MgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uLiAgVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IKK0l0YW5pdW0oUikyLWJhc2VkIHN5c3RlbXMuCisKK0ZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uCitzdXBwbGllZCB3aXRoIHlvdXIgMTAgR2lnYWJpdCBhZGFwdGVyLiAgQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgYXBwbHkKK3RvIHVzZSB3aXRoIExpbnV4LgorCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhpcyBrZXJuZWw6CisgLSBOYXRpdmUgVkxBTnMKKyAtIENoYW5uZWwgQm9uZGluZyAodGVhbWluZykKKyAtIFNOTVAKKyAtIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkCisgLSBEYXRhIENlbnRlciBCcmlkZ2luZworCitDaGFubmVsIEJvbmRpbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2U6CisvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisKK0V0aHRvb2wsIGxzcGNpLCBhbmQgaWZjb25maWcgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBkZXZpY2UgYW5kIGRyaXZlcgorc3BlY2lmaWMgaW5mb3JtYXRpb24uCisKKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgZGV2aWNlcyBiYXNlZCBvbiB0aGUgODI1OTggY29udHJvbGxlciBhbmQgdGhlIDgyNTk5Citjb250cm9sbGVyLgorCitGb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gaWRlbnRpZnlpbmcgd2hpY2ggYWRhcHRlciB5b3UgaGF2ZSwgcGxlYXNlIHZpc2l0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9zYi9DUy0wMDg0NDEuaHRtCisKKworQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitzZWxlY3QgbSBmb3IgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiIGxvY2F0ZWQgYXQ6CisgICAgICBMb2NhdGlvbjoKKyAgICAgICAgLT4gRGV2aWNlIERyaXZlcnMKKyAgICAgICAgICAtPiBOZXR3b3JrIGRldmljZSBzdXBwb3J0IChORVRERVZJQ0VTIFs9eV0pCisgICAgICAgICAgICAtPiBFdGhlcm5ldCAoMTAwMDAgTWJpdCkgKE5FVERFVl8xMDAwMCBbPXldKQorCisxLiBtYWtlIG1vZHVsZXMgJiBtYWtlIG1vZHVsZXNfaW5zdGFsbAorCisyLiBMb2FkIHRoZSBtb2R1bGU6CisKKyMgbW9kcHJvYmUgaXhnYmUKKworICAgVGhlIGluc21vZCBjb21tYW5kIGNhbiBiZSB1c2VkIGlmIHRoZSBmdWxsCisgICBwYXRoIHRvIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHNwZWNpZmllZC4gIEZvciBleGFtcGxlOgorCisgICAgIGluc21vZCAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUua28KKworICAgV2l0aCAyLjYgYmFzZWQga2VybmVscyBhbHNvIG1ha2Ugc3VyZSB0aGF0IG9sZGVyIGl4Z2JlIGRyaXZlcnMgYXJlCisgICByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCwgYmVmb3JlIGxvYWRpbmcgdGhlIG5ldyBtb2R1bGU6CisKKyAgICAgcm1tb2QgaXhnYmU7IG1vZHByb2JlIGl4Z2JlCisKKzMuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKKyAgIHggaXMgdGhlIGludGVyZmFjZSBudW1iZXI6CisKKyAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KKworNC4gVmVyaWZ5IHRoYXQgdGhlIGludGVyZmFjZSB3b3Jrcy4gRW50ZXIgdGhlIGZvbGxvd2luZywgd2hlcmUgPElQX2FkZHJlc3M+CisgICBpcyB0aGUgSVAgYWRkcmVzcyBmb3IgYW5vdGhlciBtYWNoaW5lIG9uIHRoZSBzYW1lIHN1Ym5ldCBhcyB0aGUgaW50ZXJmYWNlCisgICB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKKworICAgICBwaW5nICA8SVBfYWRkcmVzcz4KKworCitBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzCisgIHJlc3RyaWN0aW5nIHN5c3RlbSBtZXNzYWdlcy4gSW4gb3JkZXIgdG8gc2VlIG5ldHdvcmsgZHJpdmVyIGxpbmsgbWVzc2FnZXMgb24KKyAgeW91ciBjb25zb2xlLCBzZXQgZG1lc2cgdG8gZWlnaHQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGRtZXNnIC1uIDgKKworICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLgorCisKKyAgSnVtYm8gRnJhbWVzCisgIC0tLS0tLS0tLS0tLQorICBUaGUgZHJpdmVyIHN1cHBvcnRzIEp1bWJvIEZyYW1lcyBmb3IgYWxsIGFkYXB0ZXJzLiBKdW1ibyBGcmFtZXMgc3VwcG9ydCBpcworICBlbmFibGVkIGJ5IGNoYW5naW5nIHRoZSBNVFUgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiAxNTAwLgorICBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIE1UVSBpcyAxNjExMC4gIFVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0bworICBpbmNyZWFzZSB0aGUgTVRVIHNpemUuICBGb3IgZXhhbXBsZToKKworICAgICAgICBpZmNvbmZpZyBldGh4IG10dSA5MDAwIHVwCisKKyAgVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyAxNjExMC4gIFRoaXMgdmFsdWUgY29pbmNpZGVzCisgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgMTYxMjguCisKKyAgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIGFrYSBHUk8KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlIGRyaXZlciBzdXBwb3J0cyB0aGUgaW4ta2VybmVsIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIEdSTy4gIEdSTyBoYXMKKyAgc2hvd24gdGhhdCBieSBjb2FsZXNjaW5nIFJ4IHRyYWZmaWMgaW50byBsYXJnZXIgY2h1bmtzIG9mIGRhdGEsIENQVQorICB1dGlsaXphdGlvbiBjYW4gYmUgc2lnbmlmaWNhbnRseSByZWR1Y2VkIHdoZW4gdW5kZXIgbGFyZ2UgUnggbG9hZC4gIEdSTyBpcyBhbgorICBldm9sdXRpb24gb2YgdGhlIHByZXZpb3VzbHktdXNlZCBMUk8gaW50ZXJmYWNlLiAgR1JPIGlzIGFibGUgdG8gY29hbGVzY2UKKyAgb3RoZXIgcHJvdG9jb2xzIGJlc2lkZXMgVENQLiAgSXQncyBhbHNvIHNhZmUgdG8gdXNlIHdpdGggY29uZmlndXJhdGlvbnMgdGhhdAorICBhcmUgcHJvYmxlbWF0aWMgZm9yIExSTywgbmFtZWx5IGJyaWRnaW5nIGFuZCBpU0NTSS4KKworICBHUk8gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBkcml2ZXIuICBGdXR1cmUgdmVyc2lvbnMgb2YgZXRodG9vbCB3aWxsCisgIHN1cHBvcnQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBHUk8gb24gdGhlIGZseS4KKworCisgIERhdGEgQ2VudGVyIEJyaWRnaW5nLCBha2EgRENCCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRENCIGlzIGEgY29uZmlndXJhdGlvbiBRdWFsaXR5IG9mIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gaW4gaGFyZHdhcmUuCisgIEl0IHVzZXMgdGhlIFZMQU4gcHJpb3JpdHkgdGFnICg4MDIuMXApIHRvIGZpbHRlciB0cmFmZmljLiAgVGhhdCBtZWFucworICB0aGF0IHRoZXJlIGFyZSA4IGRpZmZlcmVudCBwcmlvcml0aWVzIHRoYXQgdHJhZmZpYyBjYW4gYmUgZmlsdGVyZWQgaW50by4KKyAgSXQgYWxzbyBlbmFibGVzIHByaW9yaXR5IGZsb3cgY29udHJvbCB3aGljaCBjYW4gbGltaXQgb3IgZWxpbWluYXRlIHRoZQorICBudW1iZXIgb2YgZHJvcHBlZCBwYWNrZXRzIGR1cmluZyBuZXR3b3JrIHN0cmVzcy4gIEJhbmR3aWR0aCBjYW4gYmUKKyAgYWxsb2NhdGVkIHRvIGVhY2ggb2YgdGhlc2UgcHJpb3JpdGllcywgd2hpY2ggaXMgZW5mb3JjZWQgYXQgdGhlIGhhcmR3YXJlCisgIGxldmVsLgorCisgIFRvIGVuYWJsZSBEQ0Igc3VwcG9ydCBpbiBpeGdiZSwgeW91IG11c3QgZW5hYmxlIHRoZSBEQ0IgbmV0bGluayBsYXllciB0bworICBhbGxvdyB0aGUgdXNlcnNwYWNlIHRvb2xzIChzZWUgYmVsb3cpIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRyaXZlci4KKyAgVGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGhlcmU6CisKKyAgICAgICAgLT4gTmV0d29ya2luZyBzdXBwb3J0CisgICAgICAgICAgLT4gTmV0d29ya2luZyBvcHRpb25zCisgICAgICAgICAgICAtPiBEYXRhIENlbnRlciBCcmlkZ2luZyBzdXBwb3J0CisKKyAgT25jZSB0aGlzIGlzIHNlbGVjdGVkLCBEQ0Igc3VwcG9ydCBtdXN0IGJlIHNlbGVjdGVkIGZvciBpeGdiZS4gIFRoaXMgY2FuCisgIGJlIGZvdW5kIGhlcmU6CisKKyAgICAgICAgLT4gRGV2aWNlIERyaXZlcnMKKyAgICAgICAgICAtPiBOZXR3b3JrIGRldmljZSBzdXBwb3J0IChORVRERVZJQ0VTIFs9eV0pCisgICAgICAgICAgICAtPiBFdGhlcm5ldCAoMTAwMDAgTWJpdCkgKE5FVERFVl8xMDAwMCBbPXldKQorICAgICAgICAgICAgICAtPiBJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0CisgICAgICAgICAgICAgICAgLT4gRGF0YSBDZW50ZXIgQnJpZGdpbmcgKERDQikgU3VwcG9ydAorCisgIEFmdGVyIHRoZXNlIG9wdGlvbnMgYXJlIHNlbGVjdGVkLCB5b3UgbXVzdCByZWJ1aWxkIHlvdXIga2VybmVsIGFuZCB5b3VyCisgIG1vZHVsZXMuCisKKyAgSW4gb3JkZXIgdG8gdXNlIERDQiwgdXNlcnNwYWNlIHRvb2xzIG11c3QgYmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkLgorICBUaGUgZGNiZCB0b29scyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgICAgICAgaHR0cDovL2UxMDAwLnNmLm5ldAorCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKKyAgdmVyc2lvbiAzLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisKKworICBOQVBJCisgIC0tLS0KKworICBOQVBJIChSeCBwb2xsaW5nIG1vZGUpIGlzIHN1cHBvcnRlZCBpbiB0aGUgaXhnYmUgZHJpdmVyLiAgTkFQSSBpcyBlbmFibGVkCisgIGJ5IGRlZmF1bHQgaW4gdGhlIGRyaXZlci4KKworICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgorCisKK1N1cHBvcnQKKz09PT09PT0KKworRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KKworb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CisKKyAgICBodHRwOi8vZTEwMDAuc291cmNlZm9yZ2UubmV0CisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKK3RvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Jkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MDc3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZHMudHh0CkBAIC0wLDAgKzEsMzU2IEBACisKK092ZXJ2aWV3Cis9PT09PT09PQorCitUaGlzIHJlYWRtZSB0cmllcyB0byBwcm92aWRlIHNvbWUgYmFja2dyb3VuZCBvbiB0aGUgaG93cyBhbmQgd2h5cyBvZiBSRFMsCithbmQgd2lsbCBob3BlZnVsbHkgaGVscCB5b3UgZmluZCB5b3VyIHdheSBhcm91bmQgdGhlIGNvZGUuCisKK0luIGFkZGl0aW9uLCBwbGVhc2Ugc2VlIHRoaXMgZW1haWwgYWJvdXQgUkRTIG9yaWdpbnM6CitodHRwOi8vb3NzLm9yYWNsZS5jb20vcGlwZXJtYWlsL3Jkcy1kZXZlbC8yMDA3LU5vdmVtYmVyLzAwMDIyOC5odG1sCisKK1JEUyBBcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT0KKworUkRTIHByb3ZpZGVzIHJlbGlhYmxlLCBvcmRlcmVkIGRhdGFncmFtIGRlbGl2ZXJ5IGJ5IHVzaW5nIGEgc2luZ2xlCityZWxpYWJsZSBjb25uZWN0aW9uIGJldHdlZW4gYW55IHR3byBub2RlcyBpbiB0aGUgY2x1c3Rlci4gVGhpcyBhbGxvd3MKK2FwcGxpY2F0aW9ucyB0byB1c2UgYSBzaW5nbGUgc29ja2V0IHRvIHRhbGsgdG8gYW55IG90aGVyIHByb2Nlc3MgaW4gdGhlCitjbHVzdGVyIC0gc28gaW4gYSBjbHVzdGVyIHdpdGggTiBwcm9jZXNzZXMgeW91IG5lZWQgTiBzb2NrZXRzLCBpbiBjb250cmFzdAordG8gTipOIGlmIHlvdSB1c2UgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCB0cmFuc3BvcnQgbGlrZSBUQ1AuCisKK1JEUyBpcyBub3QgSW5maW5pYmFuZC1zcGVjaWZpYzsgaXQgd2FzIGRlc2lnbmVkIHRvIHN1cHBvcnQgZGlmZmVyZW50Cit0cmFuc3BvcnRzLiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlZCB0byBzdXBwb3J0IFJEUyBvdmVyIFRDUCBhcyB3ZWxsCithcyBJQi4gV29yayBpcyBpbiBwcm9ncmVzcyB0byBzdXBwb3J0IFJEUyBvdmVyIGlXQVJQLCBhbmQgdXNpbmcgRENFIHRvCitndWFyYW50ZWUgbm8gZHJvcHBlZCBwYWNrZXRzIG9uIEV0aGVybmV0LCBpdCBtYXkgYmUgcG9zc2libGUgdG8gdXNlIFJEUyBvdmVyCitVRFAgaW4gdGhlIGZ1dHVyZS4KKworVGhlIGhpZ2gtbGV2ZWwgc2VtYW50aWNzIG9mIFJEUyBmcm9tIHRoZSBhcHBsaWNhdGlvbidzIHBvaW50IG9mIHZpZXcgYXJlCisKKyAqCUFkZHJlc3NpbmcKKyAgICAgICAgUkRTIHVzZXMgSVB2NCBhZGRyZXNzZXMgYW5kIDE2Yml0IHBvcnQgbnVtYmVycyB0byBpZGVudGlmeQorICAgICAgICB0aGUgZW5kIHBvaW50IG9mIGEgY29ubmVjdGlvbi4gQWxsIHNvY2tldCBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZQorICAgICAgICBwYXNzaW5nIGFkZHJlc3NlcyBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZSBnZW5lcmFsbHkKKyAgICAgICAgdXNlIGEgc3RydWN0IHNvY2thZGRyX2luLgorCisgICAgICAgIFRoZSBmYWN0IHRoYXQgSVB2NCBhZGRyZXNzZXMgYXJlIHVzZWQgZG9lcyBub3QgbWVhbiB0aGUgdW5kZXJseWluZworICAgICAgICB0cmFuc3BvcnQgaGFzIHRvIGJlIElQLWJhc2VkLiBJbiBmYWN0LCBSRFMgb3ZlciBJQiB1c2VzIGEKKyAgICAgICAgcmVsaWFibGUgSUIgY29ubmVjdGlvbjsgdGhlIElQIGFkZHJlc3MgaXMgdXNlZCBleGNsdXNpdmVseSB0bworICAgICAgICBsb2NhdGUgdGhlIHJlbW90ZSBub2RlJ3MgR0lEIChieSBBUlBpbmcgZm9yIHRoZSBnaXZlbiBJUCkuCisKKyAgICAgICAgVGhlIHBvcnQgc3BhY2UgaXMgZW50aXJlbHkgaW5kZXBlbmRlbnQgb2YgVURQLCBUQ1Agb3IgYW55IG90aGVyCisgICAgICAgIHByb3RvY29sLgorCisgKglTb2NrZXQgaW50ZXJmYWNlCisgICAgICAgIFJEUyBzb2NrZXRzIHdvcmsgKm1vc3RseSogYXMgeW91IHdvdWxkIGV4cGVjdCBmcm9tIGEgQlNECisgICAgICAgIHNvY2tldC4gVGhlIG5leHQgc2VjdGlvbiB3aWxsIGNvdmVyIHRoZSBkZXRhaWxzLiBBdCBhbnkgcmF0ZSwKKyAgICAgICAgYWxsIEkvTyBpcyBwZXJmb3JtZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgQlNEIHNvY2tldCBBUEkuCisgICAgICAgIFNvbWUgYWRkaXRpb25zIGxpa2UgemVyb2NvcHkgc3VwcG9ydCBhcmUgaW1wbGVtZW50ZWQgdGhyb3VnaAorICAgICAgICBjb250cm9sIG1lc3NhZ2VzLCB3aGlsZSBvdGhlciBleHRlbnNpb25zIHVzZSB0aGUgZ2V0c29ja29wdC8KKyAgICAgICAgc2V0c29ja29wdCBjYWxscy4KKworICAgICAgICBTb2NrZXRzIG11c3QgYmUgYm91bmQgYmVmb3JlIHlvdSBjYW4gc2VuZCBvciByZWNlaXZlIGRhdGEuCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgYmluZGluZyBhbHNvIHNlbGVjdHMgYSB0cmFuc3BvcnQgYW5kCisgICAgICAgIGF0dGFjaGVzIGl0IHRvIHRoZSBzb2NrZXQuIE9uY2UgYm91bmQsIHRoZSB0cmFuc3BvcnQgYXNzaWdubWVudAorICAgICAgICBkb2VzIG5vdCBjaGFuZ2UuIFJEUyB3aWxsIHRvbGVyYXRlIElQcyBtb3ZpbmcgYXJvdW5kIChlZyBpbgorICAgICAgICBhIGFjdGl2ZS1hY3RpdmUgSEEgc2NlbmFyaW8pLCBidXQgb25seSBhcyBsb25nIGFzIHRoZSBhZGRyZXNzCisgICAgICAgIGRvZXNuJ3QgbW92ZSB0byBhIGRpZmZlcmVudCB0cmFuc3BvcnQuCisKKyAqCXN5c2N0bHMKKyAgICAgICAgUkRTIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHN5c2N0bHMgaW4gL3Byb2Mvc3lzL25ldC9yZHMKKworCitTb2NrZXQgSW50ZXJmYWNlCis9PT09PT09PT09PT09PT09CisKKyAgQUZfUkRTLCBQRl9SRFMsIFNPTF9SRFMKKyAgICAgICAgVGhlc2UgY29uc3RhbnRzIGhhdmVuJ3QgYmVlbiBhc3NpZ25lZCB5ZXQsIGJlY2F1c2UgUkRTIGlzbid0IGluCisgICAgICAgIG1haW5saW5lIHlldC4gQ3VycmVudGx5LCB0aGUga2VybmVsIG1vZHVsZSBhc3NpZ25zIHNvbWUgY29uc3RhbnQKKyAgICAgICAgYW5kIHB1Ymxpc2hlcyBpdCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdHdvIHN5c2N0bCBmaWxlcworICAgICAgICAgICAgICAgIC9wcm9jL3N5cy9uZXQvcmRzL3BmX3JkcworICAgICAgICAgICAgICAgIC9wcm9jL3N5cy9uZXQvcmRzL3NvbF9yZHMKKworICBmZCA9IHNvY2tldChQRl9SRFMsIFNPQ0tfU0VRUEFDS0VULCAwKTsKKyAgICAgICAgVGhpcyBjcmVhdGVzIGEgbmV3LCB1bmJvdW5kIFJEUyBzb2NrZXQuCisKKyAgc2V0c29ja29wdChTT0xfU09DS0VUKTogc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgc2l6ZQorICAgICAgICBSRFMgaG9ub3JzIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBzaXplIHNvY2tldCBvcHRpb25zLgorICAgICAgICBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHF1ZXVlIG1vcmUgdGhhbiBTT19TTkRTSVpFIGJ5dGVzIHRvCisgICAgICAgIGEgc29ja2V0LiBBIG1lc3NhZ2UgaXMgcXVldWVkIHdoZW4gc2VuZG1zZyBpcyBjYWxsZWQsIGFuZAorICAgICAgICBpdCBsZWF2ZXMgdGhlIHF1ZXVlIHdoZW4gdGhlIHJlbW90ZSBzeXN0ZW0gYWNrbm93bGVkZ2VzCisgICAgICAgIGl0cyBhcnJpdmFsLgorCisgICAgICAgIFRoZSBTT19SQ1ZTSVpFIG9wdGlvbiBjb250cm9scyB0aGUgbWF4aW11bSByZWNlaXZlIHF1ZXVlIGxlbmd0aC4KKyAgICAgICAgVGhpcyBpcyBhIHNvZnQgbGltaXQgcmF0aGVyIHRoYW4gYSBoYXJkIGxpbWl0IC0gUkRTIHdpbGwKKyAgICAgICAgY29udGludWUgdG8gYWNjZXB0IGFuZCBxdWV1ZSBpbmNvbWluZyBtZXNzYWdlcywgZXZlbiBpZiB0aGF0CisgICAgICAgIHRha2VzIHRoZSBxdWV1ZSBsZW5ndGggb3ZlciB0aGUgbGltaXQuIEhvd2V2ZXIsIGl0IHdpbGwgYWxzbworICAgICAgICBtYXJrIHRoZSBwb3J0IGFzICJjb25nZXN0ZWQiIGFuZCBzZW5kIGEgY29uZ2VzdGlvbiB1cGRhdGUgdG8KKyAgICAgICAgdGhlIHNvdXJjZSBub2RlLiBUaGUgc291cmNlIG5vZGUgaXMgc3VwcG9zZWQgdG8gdGhyb3R0bGUgYW55CisgICAgICAgIHByb2Nlc3NlcyBzZW5kaW5nIHRvIHRoaXMgY29uZ2VzdGVkIHBvcnQuCisKKyAgYmluZChmZCwgJnNvY2thZGRyX2luLCAuLi4pCisgICAgICAgIFRoaXMgYmluZHMgdGhlIHNvY2tldCB0byBhIGxvY2FsIElQIGFkZHJlc3MgYW5kIHBvcnQsIGFuZCBhCisgICAgICAgIHRyYW5zcG9ydC4KKworICBzZW5kbXNnKGZkLCAuLi4pCisgICAgICAgIFNlbmRzIGEgbWVzc2FnZSB0byB0aGUgaW5kaWNhdGVkIHJlY2lwaWVudC4gVGhlIGtlcm5lbCB3aWxsCisgICAgICAgIHRyYW5zcGFyZW50bHkgZXN0YWJsaXNoIHRoZSB1bmRlcmx5aW5nIHJlbGlhYmxlIGNvbm5lY3Rpb24KKyAgICAgICAgaWYgaXQgaXNuJ3QgdXAgeWV0LgorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2VuZCBhIG1lc3NhZ2UgdGhhdCBleGNlZWRzIFNPX1NORFNJWkUgd2lsbAorICAgICAgICByZXR1cm4gd2l0aCAtRU1TR1NJWkUKKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNlbmQgYSBtZXNzYWdlIHRoYXQgd291bGQgdGFrZSB0aGUgdG90YWwgbnVtYmVyCisgICAgICAgIG9mIHF1ZXVlZCBieXRlcyBvdmVyIHRoZSBTT19TTkRTSVpFIHRocmVzaG9sZCB3aWxsIHJldHVybgorICAgICAgICBFQUdBSU4uCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZW5kIGEgbWVzc2FnZSB0byBhIGRlc3RpbmF0aW9uIHRoYXQgaXMgbWFya2VkCisgICAgICAgIGFzICJjb25nZXN0ZWQiIHdpbGwgcmV0dXJuIEVOT0JVRlMuCisKKyAgcmVjdm1zZyhmZCwgLi4uKQorICAgICAgICBSZWNlaXZlcyBhIG1lc3NhZ2UgdGhhdCB3YXMgcXVldWVkIHRvIHRoaXMgc29ja2V0LiBUaGUgc29ja2V0cworICAgICAgICByZWN2IHF1ZXVlIGFjY291bnRpbmcgaXMgYWRqdXN0ZWQsIGFuZCBpZiB0aGUgcXVldWUgbGVuZ3RoCisgICAgICAgIGRyb3BzIGJlbG93IFNPX1NORFNJWkUsIHRoZSBwb3J0IGlzIG1hcmtlZCB1bmNvbmdlc3RlZCwgYW5kCisgICAgICAgIGEgY29uZ2VzdGlvbiB1cGRhdGUgaXMgc2VudCB0byBhbGwgcGVlcnMuCisKKyAgICAgICAgQXBwbGljYXRpb25zIGNhbiBhc2sgdGhlIFJEUyBrZXJuZWwgbW9kdWxlIHRvIHJlY2VpdmUKKyAgICAgICAgbm90aWZpY2F0aW9ucyB2aWEgY29udHJvbCBtZXNzYWdlcyAoZm9yIGluc3RhbmNlLCB0aGVyZSBpcyBhCisgICAgICAgIG5vdGlmaWNhdGlvbiB3aGVuIGEgY29uZ2VzdGlvbiB1cGRhdGUgYXJyaXZlZCwgb3Igd2hlbiBhIFJETUEKKyAgICAgICAgb3BlcmF0aW9uIGNvbXBsZXRlcykuIFRoZXNlIG5vdGlmaWNhdGlvbnMgYXJlIHJlY2VpdmVkIHRocm91Z2gKKyAgICAgICAgdGhlIG1zZy5tc2dfY29udHJvbCBidWZmZXIgb2Ygc3RydWN0IG1zZ2hkci4gVGhlIGZvcm1hdCBvZiB0aGUKKyAgICAgICAgbWVzc2FnZXMgaXMgZGVzY3JpYmVkIGluIG1hbnBhZ2VzLgorCisgIHBvbGwoZmQpCisgICAgICAgIFJEUyBzdXBwb3J0cyB0aGUgcG9sbCBpbnRlcmZhY2UgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uCisgICAgICAgIHRvIGltcGxlbWVudCBhc3luYyBJL08uCisKKyAgICAgICAgUE9MTElOIGhhbmRsaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFdoZW4gdGhlcmUncyBhbgorICAgICAgICBpbmNvbWluZyBtZXNzYWdlIHF1ZXVlZCB0byB0aGUgc29ja2V0LCBvciBhIHBlbmRpbmcgbm90aWZpY2F0aW9uLAorICAgICAgICB3ZSBzaWduYWwgUE9MTElOLgorCisgICAgICAgIFBPTExPVVQgaXMgYSBsaXR0bGUgaGFyZGVyLiBTaW5jZSB5b3UgY2FuIGVzc2VudGlhbGx5IHNlbmQKKyAgICAgICAgdG8gYW55IGRlc3RpbmF0aW9uLCBSRFMgd2lsbCBhbHdheXMgc2lnbmFsIFBPTExPVVQgYXMgbG9uZyBhcworICAgICAgICB0aGVyZSdzIHJvb20gb24gdGhlIHNlbmQgcXVldWUgKGllIHRoZSBudW1iZXIgb2YgYnl0ZXMgcXVldWVkCisgICAgICAgIGlzIGxlc3MgdGhhbiB0aGUgc2VuZGJ1ZiBzaXplKS4KKworICAgICAgICBIb3dldmVyLCB0aGUga2VybmVsIHdpbGwgcmVmdXNlIHRvIGFjY2VwdCBtZXNzYWdlcyB0bworICAgICAgICBhIGRlc3RpbmF0aW9uIG1hcmtlZCBjb25nZXN0ZWQgLSBpbiB0aGlzIGNhc2UgeW91IHdpbGwgbG9vcAorICAgICAgICBmb3JldmVyIGlmIHlvdSByZWx5IG9uIHBvbGwgdG8gdGVsbCB5b3Ugd2hhdCB0byBkby4KKyAgICAgICAgVGhpcyBpc24ndCBhIHRyaXZpYWwgcHJvYmxlbSwgYnV0IGFwcGxpY2F0aW9ucyBjYW4gZGVhbCB3aXRoCisgICAgICAgIHRoaXMgLSBieSB1c2luZyBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbnMsIGFuZCBieSBjaGVja2luZyBmb3IKKyAgICAgICAgRU5PQlVGUyBlcnJvcnMgcmV0dXJuZWQgYnkgc2VuZG1zZy4KKworICBzZXRzb2Nrb3B0KFNPTF9SRFMsIFJEU19DQU5DRUxfU0VOVF9UTywgJnNvY2thZGRyX2luKQorICAgICAgICBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gZGlzY2FyZCBhbGwgbWVzc2FnZXMgcXVldWVkIHRvIGEKKyAgICAgICAgc3BlY2lmaWMgZGVzdGluYXRpb24gb24gdGhpcyBwYXJ0aWN1bGFyIHNvY2tldC4KKworICAgICAgICBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gY2FuY2VsIG91dHN0YW5kaW5nIG1lc3NhZ2VzIGlmCisgICAgICAgIGl0IGRldGVjdHMgYSB0aW1lb3V0LiBGb3IgaW5zdGFuY2UsIGlmIGl0IHRyaWVkIHRvIHNlbmQgYSBtZXNzYWdlLAorICAgICAgICBhbmQgdGhlIHJlbW90ZSBob3N0IGlzIHVucmVhY2hhYmxlLCBSRFMgd2lsbCBrZWVwIHRyeWluZyBmb3JldmVyLgorICAgICAgICBUaGUgYXBwbGljYXRpb24gbWF5IGRlY2lkZSBpdCdzIG5vdCB3b3J0aCBpdCwgYW5kIGNhbmNlbCB0aGUKKyAgICAgICAgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIGl0IHdvdWxkIHVzZSBSRFNfQ0FOQ0VMX1NFTlRfVE8gdG8KKyAgICAgICAgbnVrZSBhbnkgcGVuZGluZyBtZXNzYWdlcy4KKworCitSRE1BIGZvciBSRFMKKz09PT09PT09PT09PQorCisgIHNlZSByZHMtcmRtYSg3KSBtYW5wYWdlIChhdmFpbGFibGUgaW4gcmRzLXRvb2xzKQorCisKK0Nvbmdlc3Rpb24gTm90aWZpY2F0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgc2VlIHJkcyg3KSBtYW5wYWdlCisKKworUkRTIFByb3RvY29sCis9PT09PT09PT09PT0KKworICBNZXNzYWdlIGhlYWRlcgorCisgICAgVGhlIG1lc3NhZ2UgaGVhZGVyIGlzIGEgJ3N0cnVjdCByZHNfaGVhZGVyJyAoc2VlIHJkcy5oKToKKyAgICBGaWVsZHM6CisgICAgICBoX3NlcXVlbmNlOgorICAgICAgICAgIHBlci1wYWNrZXQgc2VxdWVuY2UgbnVtYmVyCisgICAgICBoX2FjazoKKyAgICAgICAgICBwaWdneWJhY2tlZCBhY2tub3dsZWRnbWVudCBvZiBsYXN0IHBhY2tldCByZWNlaXZlZAorICAgICAgaF9sZW46CisgICAgICAgICAgbGVuZ3RoIG9mIGRhdGEsIG5vdCBpbmNsdWRpbmcgaGVhZGVyCisgICAgICBoX3Nwb3J0OgorICAgICAgICAgIHNvdXJjZSBwb3J0CisgICAgICBoX2Rwb3J0OgorICAgICAgICAgIGRlc3RpbmF0aW9uIHBvcnQKKyAgICAgIGhfZmxhZ3M6CisgICAgICAgICAgQ09OR19CSVRNQVAgLSB0aGlzIGlzIGEgY29uZ2VzdGlvbiB1cGRhdGUgYml0bWFwCisgICAgICAgICAgQUNLX1JFUVVJUkVEIC0gcmVjZWl2ZXIgbXVzdCBhY2sgdGhpcyBwYWNrZXQKKyAgICAgICAgICBSRVRSQU5TTUlUVEVEIC0gcGFja2V0IGhhcyBwcmV2aW91c2x5IGJlZW4gc2VudAorICAgICAgaF9jcmVkaXQ6CisgICAgICAgICAgaW5kaWNhdGUgdG8gb3RoZXIgZW5kIG9mIGNvbm5lY3Rpb24gdGhhdAorICAgICAgICAgIGl0IGhhcyBtb3JlIGNyZWRpdHMgYXZhaWxhYmxlIChpLmUuIHRoZXJlIGlzCisgICAgICAgICAgbW9yZSBzZW5kIHJvb20pCisgICAgICBoX3BhZGRpbmdbNF06CisgICAgICAgICAgdW51c2VkLCBmb3IgZnV0dXJlIHVzZQorICAgICAgaF9jc3VtOgorICAgICAgICAgIGhlYWRlciBjaGVja3N1bQorICAgICAgaF9leHRoZHI6CisgICAgICAgICAgb3B0aW9uYWwgZGF0YSBjYW4gYmUgcGFzc2VkIGhlcmUuIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgZm9yCisgICAgICAgICAgcGFzc2luZyBSRE1BLXJlbGF0ZWQgaW5mb3JtYXRpb24uCisKKyAgQUNLIGFuZCByZXRyYW5zbWl0IGhhbmRsaW5nCisKKyAgICAgIE9uZSBtaWdodCB0aGluayB0aGF0IHdpdGggcmVsaWFibGUgSUIgY29ubmVjdGlvbnMgeW91IHdvdWxkbid0IG5lZWQKKyAgICAgIHRvIGFjayBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgSUIKKyAgICAgIGhhcmR3YXJlIGdlbmVyYXRlcyBhbiBhY2sgbWVzc2FnZSBiZWZvcmUgaXQgaGFzIERNQWVkIHRoZSBtZXNzYWdlCisgICAgICBpbnRvIG1lbW9yeS4gIFRoaXMgY3JlYXRlcyBhIHBvdGVudGlhbCBtZXNzYWdlIGxvc3MgaWYgdGhlIEhDQSBpcworICAgICAgZGlzYWJsZWQgZm9yIGFueSByZWFzb24gYmV0d2VlbiB3aGVuIGl0IHNlbmRzIHRoZSBhY2sgYW5kIGJlZm9yZQorICAgICAgdGhlIG1lc3NhZ2UgaXMgRE1BZWQgYW5kIHByb2Nlc3NlZC4gIFRoaXMgaXMgb25seSBhIHBvdGVudGlhbCBpc3N1ZQorICAgICAgaWYgYW5vdGhlciBIQ0EgaXMgYXZhaWxhYmxlIGZvciBmYWlsLW92ZXIuCisKKyAgICAgIFNlbmRpbmcgYW4gYWNrIGltbWVkaWF0ZWx5IHdvdWxkIGFsbG93IHRoZSBzZW5kZXIgdG8gZnJlZSB0aGUgc2VudAorICAgICAgbWVzc2FnZSBmcm9tIHRoZWlyIHNlbmQgcXVldWUgcXVpY2tseSwgYnV0IGNvdWxkIGNhdXNlIGV4Y2Vzc2l2ZQorICAgICAgdHJhZmZpYyB0byBiZSB1c2VkIGZvciBhY2tzLiBSRFMgcGlnZ3liYWNrcyBhY2tzIG9uIHNlbnQgZGF0YQorICAgICAgcGFja2V0cy4gIEFjay1vbmx5IHBhY2tldHMgYXJlIHJlZHVjZWQgYnkgb25seSBhbGxvd2luZyBvbmUgdG8gYmUKKyAgICAgIGluIGZsaWdodCBhdCBhIHRpbWUsIGFuZCBieSB0aGUgc2VuZGVyIG9ubHkgYXNraW5nIGZvciBhY2tzIHdoZW4KKyAgICAgIGl0cyBzZW5kIGJ1ZmZlcnMgc3RhcnQgdG8gZmlsbCB1cC4gQWxsIHJldHJhbnNtaXNzaW9ucyBhcmUgYWxzbworICAgICAgYWNrZWQuCisKKyAgRmxvdyBDb250cm9sCisKKyAgICAgIFJEUydzIElCIHRyYW5zcG9ydCB1c2VzIGEgY3JlZGl0LWJhc2VkIG1lY2hhbmlzbSB0byB2ZXJpZnkgdGhhdAorICAgICAgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHBlZXIncyByZWNlaXZlIGJ1ZmZlcnMgZm9yIG1vcmUgZGF0YS4gVGhpcworICAgICAgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgaGFyZHdhcmUgcmV0cmllcyBvbiB0aGUgY29ubmVjdGlvbi4KKworICBDb25nZXN0aW9uCisKKyAgICAgIE1lc3NhZ2VzIHdhaXRpbmcgaW4gdGhlIHJlY2VpdmUgcXVldWUgb24gdGhlIHJlY2VpdmluZyBzb2NrZXQKKyAgICAgIGFyZSBhY2NvdW50ZWQgYWdhaW5zdCB0aGUgc29ja2V0cyBTT19SQ1ZCVUYgb3B0aW9uIHZhbHVlLiAgT25seQorICAgICAgdGhlIHBheWxvYWQgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgYXJlIGFjY291bnRlZCBmb3IuICBJZiB0aGUKKyAgICAgIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgZXF1YWxzIG9yIGV4Y2VlZHMgcmN2YnVmIHRoZW4gdGhlIHNvY2tldAorICAgICAgaXMgY29uZ2VzdGVkLiAgQWxsIHNlbmRzIGF0dGVtcHRlZCB0byB0aGlzIHNvY2tldCdzIGFkZHJlc3MKKyAgICAgIHNob3VsZCByZXR1cm4gYmxvY2sgb3IgcmV0dXJuIC1FV09VTERCTE9DSy4KKworICAgICAgQXBwbGljYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSByZWFzb25hYmx5IHR1bmVkIHN1Y2ggdGhhdCB0aGlzCisgICAgICBzaXR1YXRpb24gdmVyeSByYXJlbHkgb2NjdXJzLiAgQW4gYXBwbGljYXRpb24gZW5jb3VudGVyaW5nIHRoaXMKKyAgICAgICJiYWNrLXByZXNzdXJlIiBpcyBjb25zaWRlcmVkIGEgYnVnLgorCisgICAgICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyBlYWNoIG5vZGUgbWFpbnRhaW4gYml0bWFwcyB3aGljaAorICAgICAgaW5kaWNhdGUgd2hpY2ggcG9ydHMgb24gYm91bmQgYWRkcmVzc2VzIGFyZSBjb25nZXN0ZWQuICBBcyB0aGUKKyAgICAgIGJpdG1hcCBjaGFuZ2VzIGl0IGlzIHNlbnQgdGhyb3VnaCBhbGwgdGhlIGNvbm5lY3Rpb25zIHdoaWNoCisgICAgICB0ZXJtaW5hdGUgaW4gdGhlIGxvY2FsIGFkZHJlc3Mgb2YgdGhlIGJpdG1hcCB3aGljaCBjaGFuZ2VkLgorCisgICAgICBUaGUgYml0bWFwcyBhcmUgYWxsb2NhdGVkIGFzIGNvbm5lY3Rpb25zIGFyZSBicm91Z2h0IHVwLiAgVGhpcworICAgICAgYXZvaWRzIGFsbG9jYXRpb24gaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBwYXRoIHdoaWNoIHF1ZXVlcworICAgICAgc2FnZXMgb24gc29ja2V0cy4gIFRoZSBkZW5zZSBiaXRtYXBzIGxldCB0cmFuc3BvcnRzIHNlbmQgdGhlCisgICAgICBlbnRpcmUgYml0bWFwIG9uIGFueSBiaXRtYXAgY2hhbmdlIHJlYXNvbmFibHkgZWZmaWNpZW50bHkuICBUaGlzCisgICAgICBpcyBtdWNoIGVhc2llciB0byBpbXBsZW1lbnQgdGhhbiBzb21lIGZpbmVyLWdyYWluZWQKKyAgICAgIGNvbW11bmljYXRpb24gb2YgcGVyLXBvcnQgY29uZ2VzdGlvbi4gIFRoZSBzZW5kZXIgZG9lcyBhIHZlcnkKKyAgICAgIGluZXhwZW5zaXZlIGJpdCB0ZXN0IHRvIHRlc3QgaWYgdGhlIHBvcnQgaXQncyBhYm91dCB0byBzZW5kIHRvCisgICAgICBpcyBjb25nZXN0ZWQgb3Igbm90LgorCisKK1JEUyBUcmFuc3BvcnQgTGF5ZXIKKz09PT09PT09PT09PT09PT09PQorCisgIEFzIG1lbnRpb25lZCBhYm92ZSwgUkRTIGlzIG5vdCBJQi1zcGVjaWZpYy4gSXRzIGNvZGUgaXMgZGl2aWRlZAorICBpbnRvIGEgZ2VuZXJhbCBSRFMgbGF5ZXIgYW5kIGEgdHJhbnNwb3J0IGxheWVyLgorCisgIFRoZSBnZW5lcmFsIGxheWVyIGhhbmRsZXMgdGhlIHNvY2tldCBBUEksIGNvbmdlc3Rpb24gaGFuZGxpbmcsCisgIGxvb3BiYWNrLCBzdGF0cywgdXNlcm1lbSBwaW5uaW5nLCBhbmQgdGhlIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZS4KKworICBUaGUgdHJhbnNwb3J0IGxheWVyIGhhbmRsZXMgdGhlIGRldGFpbHMgb2YgdGhlIHRyYW5zcG9ydC4gVGhlIElCCisgIHRyYW5zcG9ydCwgZm9yIGV4YW1wbGUsIGhhbmRsZXMgYWxsIHRoZSBxdWV1ZSBwYWlycywgd29yayByZXF1ZXN0cywKKyAgQ00gZXZlbnQgaGFuZGxlcnMsIGFuZCBvdGhlciBJbmZpbmliYW5kIGRldGFpbHMuCisKKworUkRTIEtlcm5lbCBTdHJ1Y3R1cmVzCis9PT09PT09PT09PT09PT09PT09PT0KKworICBzdHJ1Y3QgcmRzX21lc3NhZ2UKKyAgICBha2EgcG9zc2libHkgInJkc19vdXRnb2luZyIsIHRoZSBnZW5lcmljIFJEUyBsYXllciBjb3BpZXMgZGF0YSB0bworICAgIGJlIHNlbnQgYW5kIHNldHMgaGVhZGVyIGZpZWxkcyBhcyBuZWVkZWQsIGJhc2VkIG9uIHRoZSBzb2NrZXQgQVBJLgorICAgIFRoaXMgaXMgdGhlbiBxdWV1ZWQgZm9yIHRoZSBpbmRpdmlkdWFsIGNvbm5lY3Rpb24gYW5kIHNlbnQgYnkgdGhlCisgICAgY29ubmVjdGlvbidzIHRyYW5zcG9ydC4KKyAgc3RydWN0IHJkc19pbmNvbWluZworICAgIGEgZ2VuZXJpYyBzdHJ1Y3QgcmVmZXJyaW5nIHRvIGluY29taW5nIGRhdGEgdGhhdCBjYW4gYmUgaGFuZGVkIGZyb20KKyAgICB0aGUgdHJhbnNwb3J0IHRvIHRoZSBnZW5lcmFsIGNvZGUgYW5kIHF1ZXVlZCBieSB0aGUgZ2VuZXJhbCBjb2RlCisgICAgd2hpbGUgdGhlIHNvY2tldCBpcyBhd29rZW4uIEl0IGlzIHRoZW4gcGFzc2VkIGJhY2sgdG8gdGhlIHRyYW5zcG9ydAorICAgIGNvZGUgdG8gaGFuZGxlIHRoZSBhY3R1YWwgY29weS10by11c2VyLgorICBzdHJ1Y3QgcmRzX3NvY2tldAorICAgIHBlci1zb2NrZXQgaW5mb3JtYXRpb24KKyAgc3RydWN0IHJkc19jb25uZWN0aW9uCisgICAgcGVyLWNvbm5lY3Rpb24gaW5mb3JtYXRpb24KKyAgc3RydWN0IHJkc190cmFuc3BvcnQKKyAgICBwb2ludGVycyB0byB0cmFuc3BvcnQtc3BlY2lmaWMgZnVuY3Rpb25zCisgIHN0cnVjdCByZHNfc3RhdGlzdGljcworICAgIG5vbi10cmFuc3BvcnQtc3BlY2lmaWMgc3RhdGlzdGljcworICBzdHJ1Y3QgcmRzX2NvbmdfbWFwCisgICAgd3JhcHMgdGhlIHJhdyBjb25nZXN0aW9uIGJpdG1hcCwgY29udGFpbnMgcmJub2RlLCB3YWl0cSwgZXRjLgorCitDb25uZWN0aW9uIG1hbmFnZW1lbnQKKz09PT09PT09PT09PT09PT09PT09PQorCisgIENvbm5lY3Rpb25zIG1heSBiZSBpbiBVUCwgRE9XTiwgQ09OTkVDVElORywgRElTQ09OTkVDVElORywgYW5kCisgIEVSUk9SIHN0YXRlcy4KKworICBUaGUgZmlyc3QgdGltZSBhbiBhdHRlbXB0IGlzIG1hZGUgYnkgYW4gUkRTIHNvY2tldCB0byBzZW5kIGRhdGEgdG8KKyAgYSBub2RlLCBhIGNvbm5lY3Rpb24gaXMgYWxsb2NhdGVkIGFuZCBjb25uZWN0ZWQuIFRoYXQgY29ubmVjdGlvbiBpcworICB0aGVuIG1haW50YWluZWQgZm9yZXZlciAtLSBpZiB0aGVyZSBhcmUgdHJhbnNwb3J0IGVycm9ycywgdGhlCisgIGNvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkIGFuZCByZS1lc3RhYmxpc2hlZC4KKworICBEcm9wcGluZyBhIGNvbm5lY3Rpb24gd2hpbGUgcGFja2V0cyBhcmUgcXVldWVkIHdpbGwgY2F1c2UgcXVldWVkIG9yCisgIHBhcnRpYWxseS1zZW50IGRhdGFncmFtcyB0byBiZSByZXRyYW5zbWl0dGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMKKyAgcmUtZXN0YWJsaXNoZWQuCisKKworVGhlIHNlbmQgcGF0aAorPT09PT09PT09PT09PQorCisgIHJkc19zZW5kbXNnKCkKKyAgICBzdHJ1Y3QgcmRzX21lc3NhZ2UgYnVpbHQgZnJvbSBpbmNvbWluZyBkYXRhCisgICAgQ01TR3MgcGFyc2VkIChlLmcuIFJETUEgb3BzKQorICAgIHRyYW5zcG9ydCBjb25uZWN0aW9uIGFsbG9jZWQgYW5kIGNvbm5lY3RlZCBpZiBub3QgYWxyZWFkeQorICAgIHJkc19tZXNzYWdlIHBsYWNlZCBvbiBzZW5kIHF1ZXVlCisgICAgc2VuZCB3b3JrZXIgYXdva2VuCisgIHJkc19zZW5kX3dvcmtlcigpCisgICAgY2FsbHMgcmRzX3NlbmRfeG1pdCgpIHVudGlsIHF1ZXVlIGlzIGVtcHR5CisgIHJkc19zZW5kX3htaXQoKQorICAgIHRyYW5zbWl0cyBjb25nZXN0aW9uIG1hcCBpZiBvbmUgaXMgcGVuZGluZworICAgIG1heSBzZXQgQUNLX1JFUVVJUkVECisgICAgY2FsbHMgdHJhbnNwb3J0IHRvIHNlbmQgZWl0aGVyIG5vbi1SRE1BIG9yIFJETUEgbWVzc2FnZQorICAgIChSRE1BIG9wcyBuZXZlciByZXRyYW5zbWl0dGVkKQorICByZHNfaWJfeG1pdCgpCisgICAgYWxsb2NzIHdvcmsgcmVxdWVzdHMgZnJvbSBzZW5kIHJpbmcKKyAgICBhZGRzIGFueSBuZXcgc2VuZCBjcmVkaXRzIGF2YWlsYWJsZSB0byBwZWVyIChoX2NyZWRpdHMpCisgICAgbWFwcyB0aGUgcmRzX21lc3NhZ2UncyBzZyBsaXN0CisgICAgcGlnZ3liYWNrcyBhY2sKKyAgICBwb3B1bGF0ZXMgd29yayByZXF1ZXN0cworICAgIHBvc3Qgc2VuZCB0byBjb25uZWN0aW9uJ3MgcXVldWUgcGFpcgorCitUaGUgcmVjdiBwYXRoCis9PT09PT09PT09PT09CisKKyAgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKCkKKyAgICBsb29rcyBhdCB3cml0ZSBjb21wbGV0aW9ucworICAgIHVubWFwcyByZWN2IGJ1ZmZlciBmcm9tIGRldmljZQorICAgIG5vIGVycm9ycywgY2FsbCByZHNfaWJfcHJvY2Vzc19yZWN2KCkKKyAgICByZWZpbGwgcmVjdiByaW5nCisgIHJkc19pYl9wcm9jZXNzX3JlY3YoKQorICAgIHZhbGlkYXRlIGhlYWRlciBjaGVja3N1bQorICAgIGNvcHkgaGVhZGVyIHRvIHJkc19pYl9pbmNvbWluZyBzdHJ1Y3QgaWYgc3RhcnQgb2YgYSBuZXcgZGF0YWdyYW0KKyAgICBhZGQgdG8gaWJpbmMncyBmcmFnbGlzdAorICAgIGlmIGNvbXBldGVkIGRhdGFncmFtOgorICAgICAgdXBkYXRlIGNvbmcgbWFwIGlmIGRhdGFncmFtIHdhcyBjb25nIHVwZGF0ZQorICAgICAgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpIG90aGVyd2lzZQorICAgICAgbm90ZSBpZiBhY2sgaXMgcmVxdWlyZWQKKyAgcmRzX3JlY3ZfaW5jb21pbmcoKQorICAgIGRyb3AgZHVwbGljYXRlIHBhY2tldHMKKyAgICByZXNwb25kIHRvIHBpbmdzCisgICAgZmluZCB0aGUgc29jayBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRhZ3JhbQorICAgIGFkZCB0byBzb2NrIHF1ZXVlCisgICAgd2FrZSB1cCBzb2NrCisgICAgZG8gc29tZSBjb25nZXN0aW9uIGNhbGN1bGF0aW9ucworICByZHNfcmVjdm1zZworICAgIGNvcHkgZGF0YSBpbnRvIHVzZXIgaW92ZWMKKyAgICBoYW5kbGUgQ01TR3MKKyAgICByZXR1cm4gdG8gYXBwbGljYXRpb24KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNThiNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dApAQCAtMCwwICsxLDE4MCBAQAorVGhlIGV4aXN0aW5nIGludGVyZmFjZXMgZm9yIGdldHRpbmcgbmV0d29yayBwYWNrYWdlcyB0aW1lIHN0YW1wZWQgYXJlOgorCisqIFNPX1RJTUVTVEFNUAorICBHZW5lcmF0ZSB0aW1lIHN0YW1wIGZvciBlYWNoIGluY29taW5nIHBhY2tldCB1c2luZyB0aGUgKG5vdCBuZWNlc3NhcmlseQorICBtb25vdG9ub3VzISkgc3lzdGVtIHRpbWUuIFJlc3VsdCBpcyByZXR1cm5lZCB2aWEgcmVjdl9tc2coKSBpbiBhCisgIGNvbnRyb2wgbWVzc2FnZSBhcyB0aW1ldmFsICh1c2VjIHJlc29sdXRpb24pLgorCisqIFNPX1RJTUVTVEFNUE5TCisgIFNhbWUgdGltZSBzdGFtcGluZyBtZWNoYW5pc20gYXMgU09fVElNRVNUQU1QLCBidXQgcmV0dXJucyByZXN1bHQgYXMKKyAgdGltZXNwZWMgKG5zZWMgcmVzb2x1dGlvbikuCisKKyogSVBfTVVMVElDQVNUX0xPT1AgKyBTT19USU1FU1RBTVBbTlNdCisgIE9ubHkgZm9yIG11bHRpY2FzdHM6IGFwcHJveGltYXRlIHNlbmQgdGltZSBzdGFtcCBieSByZWNlaXZpbmcgdGhlIGxvb3BlZAorICBwYWNrZXQgYW5kIHVzaW5nIGl0cyByZWNlaXZlIHRpbWUgc3RhbXAuCisKK1RoZSBmb2xsb3dpbmcgaW50ZXJmYWNlIGNvbXBsZW1lbnRzIHRoZSBleGlzdGluZyBvbmVzOiByZWNlaXZlIHRpbWUKK3N0YW1wcyBjYW4gYmUgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZCBmb3IgYXJiaXRyYXJ5IHBhY2tldHMgYW5kIG11Y2gKK2Nsb3NlciB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIHBhY2tldCBpcyByZWFsbHkgc2VudC4gVGltZSBzdGFtcHMgY2FuCitiZSBnZW5lcmF0ZWQgaW4gc29mdHdhcmUgKGFzIGJlZm9yZSkgb3IgaW4gaGFyZHdhcmUgKGlmIHRoZSBoYXJkd2FyZQoraGFzIHN1Y2ggYSBmZWF0dXJlKS4KKworU09fVElNRVNUQU1QSU5HOgorCitJbnN0cnVjdHMgdGhlIHNvY2tldCBsYXllciB3aGljaCBraW5kIG9mIGluZm9ybWF0aW9uIGlzIHdhbnRlZC4gVGhlCitwYXJhbWV0ZXIgaXMgYW4gaW50ZWdlciB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBiaXRzIHNldC4gU2V0dGluZworb3RoZXIgYml0cyBpcyBhbiBlcnJvciBhbmQgZG9lc24ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgc3RhdGUuCisKK1NPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkU6ICB0cnkgdG8gb2J0YWluIHNlbmQgdGltZSBzdGFtcCBpbiBoYXJkd2FyZQorU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRTogIGlmIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgaXMgb2ZmIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHMsIHRoZW4gZG8gaXQgaW4gc29mdHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU6ICByZXR1cm4gdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIHRpbWUgc3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBnZW5lcmF0ZWQgYnkgdGhlIGhhcmR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFOiAgaWYgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSBpcyBvZmYgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlscywgdGhlbiBkbyBpdCBpbiBzb2Z0d2FyZQorU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU6IHJldHVybiBvcmlnaW5hbCByYXcgaGFyZHdhcmUgdGltZSBzdGFtcAorU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkU6IHJldHVybiBoYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSB0aW1lIGJhc2UKK1NPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU6ICAgICByZXR1cm4gc3lzdGVtIHRpbWUgc3RhbXAgZ2VuZXJhdGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUKKworU09GX1RJTUVTVEFNUElOR19UWC9SWCBkZXRlcm1pbmUgaG93IHRpbWUgc3RhbXBzIGFyZSBnZW5lcmF0ZWQuCitTT0ZfVElNRVNUQU1QSU5HX1JBVy9TWVMgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSByZXBvcnRlZCBpbiB0aGUKK2ZvbGxvd2luZyBjb250cm9sIG1lc3NhZ2U6CisgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgeworICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgc3lzdGltZTsKKyAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIGh3dGltZXRyYW5zOworICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaHd0aW1lcmF3OworICAgIH07CisKK3JlY3Ztc2coKSBjYW4gYmUgdXNlZCB0byBnZXQgdGhpcyBjb250cm9sIG1lc3NhZ2UgZm9yIHJlZ3VsYXIgaW5jb21pbmcKK3BhY2tldHMuIEZvciBzZW5kIHRpbWUgc3RhbXBzIHRoZSBvdXRnb2luZyBwYWNrZXQgaXMgbG9vcGVkIGJhY2sgdG8KK3RoZSBzb2NrZXQncyBlcnJvciBxdWV1ZSB3aXRoIHRoZSBzZW5kIHRpbWUgc3RhbXAocykgYXR0YWNoZWQuIEl0IGNhbgorYmUgcmVjZWl2ZWQgd2l0aCByZWN2bXNnKGZsYWdzPU1TR19FUlJRVUVVRSkuIFRoZSBjYWxsIHJldHVybnMgdGhlCitvcmlnaW5hbCBvdXRnb2luZyBwYWNrZXQgZGF0YSBpbmNsdWRpbmcgYWxsIGhlYWRlcnMgcHJlcHJlbmRlZCBkb3duIHRvCithbmQgaW5jbHVkaW5nIHRoZSBsaW5rIGxheWVyLCB0aGUgc2NtX3RpbWVzdGFtcGluZyBjb250cm9sIG1lc3NhZ2UgYW5kCithIHNvY2tfZXh0ZW5kZWRfZXJyIGNvbnRyb2wgbWVzc2FnZSB3aXRoIGVlX2Vycm5vPT1FTk9NU0cgYW5kCitlZV9vcmlnaW49PVNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcuIEEgc29ja2V0IHdpdGggc3VjaCBhIHBlbmRpbmcKK2JvdW5jZWQgcGFja2V0IGlzIHJlYWR5IGZvciByZWFkaW5nIGFzIGZhciBhcyBzZWxlY3QoKSBpcyBjb25jZXJuZWQuCitJZiB0aGUgb3V0Z29pbmcgcGFja2V0IGhhcyB0byBiZSBmcmFnbWVudGVkLCB0aGVuIG9ubHkgdGhlIGZpcnN0CitmcmFnbWVudCBpcyB0aW1lIHN0YW1wZWQgYW5kIHJldHVybmVkIHRvIHRoZSBzZW5kaW5nIHNvY2tldC4KKworQWxsIHRocmVlIHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIGV2ZW50IGluIHRpbWUsIGJ1dCB3ZXJlCitnZW5lcmF0ZWQgaW4gZGlmZmVyZW50IHdheXMuIEVhY2ggb2YgdGhlc2UgdmFsdWVzIG1heSBiZSBlbXB0eSAoPSBhbGwKK3plcm8pLCBpbiB3aGljaCBjYXNlIG5vIHN1Y2ggdmFsdWUgd2FzIGF2YWlsYWJsZS4gSWYgdGhlIGFwcGxpY2F0aW9uCitpcyBub3QgaW50ZXJlc3RlZCBpbiBzb21lIG9mIHRoZXNlIHZhbHVlcywgdGhleSBjYW4gYmUgbGVmdCBibGFuayB0bworYXZvaWQgdGhlIHBvdGVudGlhbCBvdmVyaGVhZCBvZiBjYWxjdWxhdGluZyB0aGVtLgorCitzeXN0aW1lIGlzIHRoZSB2YWx1ZSBvZiB0aGUgc3lzdGVtIHRpbWUgYXQgdGhhdCBtb21lbnQuIFRoaXMKK2NvcnJlc3BvbmRzIHRvIHRoZSB2YWx1ZSBhbHNvIHJldHVybmVkIHZpYSBTT19USU1FU1RBTVBbTlNdLiBJZiB0aGUKK3RpbWUgc3RhbXAgd2FzIGdlbmVyYXRlZCBieSBoYXJkd2FyZSwgdGhlbiB0aGlzIGZpZWxkIGlzCitlbXB0eS4gT3RoZXJ3aXNlIGl0IGlzIGZpbGxlZCBpbiBpZiBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIGlzCitzZXQuCisKK2h3dGltZXJhdyBpcyB0aGUgb3JpZ2luYWwgaGFyZHdhcmUgdGltZSBzdGFtcC4gRmlsbGVkIGluIGlmCitTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSBpcyBzZXQuIE5vIGFzc3VtcHRpb25zIGFib3V0IGl0cworcmVsYXRpb24gdG8gc3lzdGVtIHRpbWUgc2hvdWxkIGJlIG1hZGUuCisKK2h3dGltZXRyYW5zIGlzIHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIHNvIHRoYXQgaXQKK2NvcnJlc3BvbmRzIGFzIGdvb2QgYXMgcG9zc2libGUgdG8gc3lzdGVtIHRpbWUuIFRoaXMgY29ycmVsYXRpb24gaXMKK25vdCBwZXJmZWN0OyBhcyBhIGNvbnNlcXVlbmNlLCBzb3J0aW5nIHBhY2tldHMgcmVjZWl2ZWQgdmlhIGRpZmZlcmVudAorTklDcyBieSB0aGVpciBod3RpbWV0cmFucyBtYXkgZGlmZmVyIGZyb20gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZQorcmVjZWl2ZWQuIGh3dGltZXRyYW5zIG1heSBiZSBub24tbW9ub3RvbmljIGV2ZW4gZm9yIHRoZSBzYW1lIE5JQy4KK0ZpbGxlZCBpbiBpZiBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSBpcyBzZXQuIFJlcXVpcmVzIHN1cHBvcnQKK2J5IHRoZSBuZXR3b3JrIGRldmljZSBhbmQgd2lsbCBiZSBlbXB0eSB3aXRob3V0IHRoYXQgc3VwcG9ydC4KKworCitTSU9DU0hXVFNUQU1QOgorCitIYXJkd2FyZSB0aW1lIHN0YW1waW5nIG11c3QgYWxzbyBiZSBpbml0aWFsaXplZCBmb3IgZWFjaCBkZXZpY2UgZHJpdmVyCit0aGF0IGlzIGV4cGVjdGVkIHRvIGRvIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcuIFRoZSBwYXJhbWV0ZXIgaXM6CisKK3N0cnVjdCBod3RzdGFtcF9jb25maWcgeworICAgIGludCBmbGFnczsgICAgICAgICAgIC8qIG5vIGZsYWdzIGRlZmluZWQgcmlnaHQgbm93LCBtdXN0IGJlIHplcm8gKi8KKyAgICBpbnQgdHhfdHlwZTsgICAgICAgICAvKiBIV1RTVEFNUF9UWF8qICovCisgICAgaW50IHJ4X2ZpbHRlcjsgICAgICAgLyogSFdUU1RBTVBfRklMVEVSXyogKi8KK307CisKK0Rlc2lyZWQgYmVoYXZpb3IgaXMgcGFzc2VkIGludG8gdGhlIGtlcm5lbCBhbmQgdG8gYSBzcGVjaWZpYyBkZXZpY2UgYnkKK2NhbGxpbmcgaW9jdGwoU0lPQ1NIV1RTVEFNUCkgd2l0aCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgaWZyZXEgd2hvc2UKK2lmcl9kYXRhIHBvaW50cyB0byBhIHN0cnVjdCBod3RzdGFtcF9jb25maWcuIFRoZSB0eF90eXBlIGFuZAorcnhfZmlsdGVyIGFyZSBoaW50cyB0byB0aGUgZHJpdmVyIHdoYXQgaXQgaXMgZXhwZWN0ZWQgdG8gZG8uIElmCit0aGUgcmVxdWVzdGVkIGZpbmUtZ3JhaW5lZCBmaWx0ZXJpbmcgZm9yIGluY29taW5nIHBhY2tldHMgaXMgbm90CitzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgbWF5IHRpbWUgc3RhbXAgbW9yZSB0aGFuIGp1c3QgdGhlIHJlcXVlc3RlZCB0eXBlcworb2YgcGFja2V0cy4KKworQSBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBzaGFsbCB1cGRhdGUgdGhlIHN0cnVjdAord2l0aCB0aGUgYWN0dWFsLCBwb3NzaWJseSBtb3JlIHBlcm1pc3NpdmUgY29uZmlndXJhdGlvbi4gSWYgdGhlCityZXF1ZXN0ZWQgcGFja2V0cyBjYW5ub3QgYmUgdGltZSBzdGFtcGVkLCB0aGVuIG5vdGhpbmcgc2hvdWxkIGJlCitjaGFuZ2VkIGFuZCBFUkFOR0Ugc2hhbGwgYmUgcmV0dXJuZWQgKGluIGNvbnRyYXN0IHRvIEVJTlZBTCwgd2hpY2gKK2luZGljYXRlcyB0aGF0IFNJT0NTSFdUU1RBTVAgaXMgbm90IHN1cHBvcnRlZCBhdCBhbGwpLgorCitPbmx5IGEgcHJvY2Vzc2VzIHdpdGggYWRtaW4gcmlnaHRzIG1heSBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24uIFVzZXIKK3NwYWNlIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IG11bHRpcGxlIHByb2Nlc3NlcyBkb24ndCBpbnRlcmZlcmUKK3dpdGggZWFjaCBvdGhlciBhbmQgdGhhdCB0aGUgc2V0dGluZ3MgYXJlIHJlc2V0LgorCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+dHhfdHlwZSAqLworZW51bSB7CisJLyoKKwkgKiBubyBvdXRnb2luZyBwYWNrZXQgd2lsbCBuZWVkIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmc7CisJICogc2hvdWxkIGEgcGFja2V0IGFycml2ZSB3aGljaCBhc2tzIGZvciBpdCwgbm8gaGFyZHdhcmUKKwkgKiB0aW1lIHN0YW1waW5nIHdpbGwgYmUgZG9uZQorCSAqLworCUhXVFNUQU1QX1RYX09GRiwKKworCS8qCisJICogZW5hYmxlcyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGZvciBvdXRnb2luZyBwYWNrZXRzOworCSAqIHRoZSBzZW5kZXIgb2YgdGhlIHBhY2tldCBkZWNpZGVzIHdoaWNoIGFyZSB0byBiZQorCSAqIHRpbWUgc3RhbXBlZCBieSBzZXR0aW5nIFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUKKwkgKiBiZWZvcmUgc2VuZGluZyB0aGUgcGFja2V0CisJICovCisJSFdUU1RBTVBfVFhfT04sCit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+cnhfZmlsdGVyICovCitlbnVtIHsKKwkvKiB0aW1lIHN0YW1wIG5vIGluY29taW5nIHBhY2tldCBhdCBhbGwgKi8KKwlIV1RTVEFNUF9GSUxURVJfTk9ORSwKKworCS8qIHRpbWUgc3RhbXAgYW55IGluY29taW5nIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9BTEwsCisKKyAgICAgICAgLyogcmV0dXJuIHZhbHVlOiB0aW1lIHN0YW1wIGFsbCBwYWNrZXRzIHJlcXVlc3RlZCBwbHVzIHNvbWUgb3RoZXJzICovCisgICAgICAgIEhXVFNUQU1QX0ZJTFRFUl9TT01FLAorCisJLyogUFRQIHYxLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQsCisKKyAgICAgICAgLi4uCit9OworCisKK0RFVklDRSBJTVBMRU1FTlRBVElPTgorCitBIGRyaXZlciB3aGljaCBzdXBwb3J0cyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG11c3Qgc3VwcG9ydCB0aGUKK1NJT0NTSFdUU1RBTVAgaW9jdGwuIFRpbWUgc3RhbXBzIGZvciByZWNlaXZlZCBwYWNrZXRzIG11c3QgYmUgc3RvcmVkCitpbiB0aGUgc2tiIHdpdGggc2tiX2h3dHN0YW1wX3NldCgpLgorCitUaW1lIHN0YW1wcyBmb3Igb3V0Z29pbmcgcGFja2V0cyBhcmUgdG8gYmUgZ2VuZXJhdGVkIGFzIGZvbGxvd3M6CistIEluIGhhcmRfc3RhcnRfeG1pdCgpLCBjaGVjayBpZiBza2JfaHd0c3RhbXBfY2hlY2tfdHhfaGFyZHdhcmUoKQorICByZXR1cm5zIG5vbi16ZXJvLiBJZiB5ZXMsIHRoZW4gdGhlIGRyaXZlciBpcyBleHBlY3RlZAorICB0byBkbyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nLgorLSBJZiB0aGlzIGlzIHBvc3NpYmxlIGZvciB0aGUgc2tiIGFuZCByZXF1ZXN0ZWQsIHRoZW4gZGVjbGFyZQorICB0aGF0IHRoZSBkcml2ZXIgaXMgZG9pbmcgdGhlIHRpbWUgc3RhbXBpbmcgYnkgY2FsbGluZworICBza2JfaHd0c3RhbXBfdHhfaW5fcHJvZ3Jlc3MoKS4gQSBkcml2ZXIgbm90IHN1cHBvcnRpbmcKKyAgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBkb2Vzbid0IGRvIHRoYXQuIEEgZHJpdmVyIG11c3QgbmV2ZXIKKyAgdG91Y2ggc2tfYnVmZjo6dHN0YW1wISBJdCBpcyB1c2VkIHRvIHN0b3JlIGhvdyB0aW1lIHN0YW1waW5nCisgIGZvciBhbiBvdXRnb2luZyBwYWNrZXRzIGlzIHRvIGJlIGRvbmUuCistIEFzIHNvb24gYXMgdGhlIGRyaXZlciBoYXMgc2VudCB0aGUgcGFja2V0IGFuZC9vciBvYnRhaW5lZCBhCisgIGhhcmR3YXJlIHRpbWUgc3RhbXAgZm9yIGl0LCBpdCBwYXNzZXMgdGhlIHRpbWUgc3RhbXAgYmFjayBieQorICBjYWxsaW5nIHNrYl9od3RzdGFtcF90eCgpIHdpdGggdGhlIG9yaWdpbmFsIHNrYiwgdGhlIHJhdworICBoYXJkd2FyZSB0aW1lIHN0YW1wIGFuZCBhIGhhbmRsZSB0byB0aGUgZGV2aWNlIChuZWNlc3NhcnkKKyAgdG8gY29udmVydCB0aGUgaGFyZHdhcmUgdGltZSBzdGFtcCB0byBzeXN0ZW0gdGltZSkuIElmIG9idGFpbmluZworICB0aGUgaGFyZHdhcmUgdGltZSBzdGFtcCBzb21laG93IGZhaWxzLCB0aGVuIHRoZSBkcml2ZXIgc2hvdWxkCisgIG5vdCBmYWxsIGJhY2sgdG8gc29mdHdhcmUgdGltZSBzdGFtcGluZy4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0CisgIHRoaXMgd291bGQgb2NjdXIgYXQgYSBsYXRlciB0aW1lIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lCisgIHRoYW4gb3RoZXIgc29mdHdhcmUgdGltZSBzdGFtcGluZyBhbmQgdGhlcmVmb3JlIGNvdWxkIGxlYWQKKyAgdG8gdW5leHBlY3RlZCBkZWx0YXMgYmV0d2VlbiB0aW1lIHN0YW1wcy4KKy0gSWYgdGhlIGRyaXZlciBkaWQgbm90IGNhbGwgc2tiX2h3dHN0YW1wX3R4X2luX3Byb2dyZXNzKCksIHRoZW4KKyAgZGV2X2hhcmRfc3RhcnRfeG1pdCgpIGNoZWNrcyB3aGV0aGVyIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcKKyAgaXMgd2FudGVkIGFzIGZhbGxiYWNrIGFuZCBwb3RlbnRpYWxseSBnZW5lcmF0ZXMgdGhlIHRpbWUgc3RhbXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLy5naXRpZ25vcmUgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlODFlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACit0aW1lc3RhbXBpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTQ4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorQ1BQRkxBR1MgPSAtSS4uLy4uLy4uL2luY2x1ZGUKKwordGltZXN0YW1waW5nOiB0aW1lc3RhbXBpbmcuYworCitjbGVhbjoKKwlybSAtZiB0aW1lc3RhbXBpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3RpbWVzdGFtcGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3RpbWVzdGFtcGluZy5jCkBAIC0wLDAgKzEsNTMzIEBACisvKgorICogVGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyBob3cgdGhlIHZhcmlvdXMgdGltZSBzdGFtcGluZyBmZWF0dXJlcyBpbgorICogdGhlIExpbnV4IGtlcm5lbCB3b3JrLiBJdCBlbXVsYXRlcyB0aGUgYmVoYXZpb3Igb2YgYSBQVFAKKyAqIGltcGxlbWVudGF0aW9uIGluIHN0YW5kLWFsb25lIG1hc3RlciBtb2RlIGJ5IHNlbmRpbmcgUFRQdjEgU3luYworICogbXVsdGljYXN0cyBvbmNlIGV2ZXJ5IHNlY29uZC4gSXQgbG9va3MgZm9yIHNpbWlsYXIgcGFja2V0cywgYnV0CisgKiBiZXlvbmQgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IGltcGxlbWVudCBQVFAuCisgKgorICogT3V0Z29pbmcgcGFja2V0cyBhcmUgdGltZSBzdGFtcGVkIHdpdGggU09fVElNRVNUQU1QSU5HIHdpdGggb3IKKyAqIHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydC4KKyAqCisgKiBJbmNvbWluZyBwYWNrZXRzIGFyZSB0aW1lIHN0YW1wZWQgd2l0aCBTT19USU1FU1RBTVBJTkcgd2l0aCBvcgorICogd2l0aG91dCBoYXJkd2FyZSBzdXBwb3J0LCBTSU9DR1NUQU1QW05TXSAocGVyLXNvY2tldCB0aW1lIHN0YW1wKSBhbmQKKyAqIFNPX1RJTUVTVEFNUFtOU10uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKworI2luY2x1ZGUgImFzbS90eXBlcy5oIgorI2luY2x1ZGUgImxpbnV4L25ldF90c3RhbXAuaCIKKyNpbmNsdWRlICJsaW51eC9lcnJxdWV1ZS5oIgorCisjaWZuZGVmIFNPX1RJTUVTVEFNUElORworIyBkZWZpbmUgU09fVElNRVNUQU1QSU5HICAgICAgICAgMzcKKyMgZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcgICAgICAgIFNPX1RJTUVTVEFNUElORworI2VuZGlmCisKKyNpZm5kZWYgU09fVElNRVNUQU1QTlMKKyMgZGVmaW5lIFNPX1RJTUVTVEFNUE5TIDM1CisjZW5kaWYKKworI2lmbmRlZiBTSU9DR1NUQU1QTlMKKyMgZGVmaW5lIFNJT0NHU1RBTVBOUyAweDg5MDcKKyNlbmRpZgorCisjaWZuZGVmIFNJT0NTSFdUU1RBTVAKKyMgZGVmaW5lIFNJT0NTSFdUU1RBTVAgMHg4OWIwCisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqZXJyb3IpCit7CisJaWYgKGVycm9yKQorCQlwcmludGYoImludmFsaWQgb3B0aW9uOiAlc1xuIiwgZXJyb3IpOworCXByaW50ZigidGltZXN0YW1waW5nIGludGVyZmFjZSBvcHRpb24qXG5cbiIKKwkgICAgICAgIk9wdGlvbnM6XG4iCisJICAgICAgICIgIElQX01VTFRJQ0FTVF9MT09QIC0gbG9vcGluZyBvdXRnb2luZyBtdWx0aWNhc3RzXG4iCisJICAgICAgICIgIFNPX1RJTUVTVEFNUCAtIG5vcm1hbCBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nLCBtcyByZXNvbHV0aW9uXG4iCisJICAgICAgICIgIFNPX1RJTUVTVEFNUE5TIC0gbW9yZSBhY2N1cmF0ZSBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgLSBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG9mIG91dGdvaW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSAtIHNvZnR3YXJlIGZhbGxiYWNrIGZvciBvdXRnb2luZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgLSBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG9mIGluY29taW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSAtIHNvZnR3YXJlIGZhbGxiYWNrIGZvciBpbmNvbWluZyBwYWNrZXRzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgLSByZXF1ZXN0IHJlcG9ydGluZyBvZiBzb2Z0d2FyZSB0aW1lIHN0YW1wc1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSAtIHJlcXVlc3QgcmVwb3J0aW5nIG9mIHRyYW5zZm9ybWVkIEhXIHRpbWUgc3RhbXBzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIC0gcmVxdWVzdCByZXBvcnRpbmcgb2YgcmF3IEhXIHRpbWUgc3RhbXBzXG4iCisJICAgICAgICIgIFNJT0NHU1RBTVAgLSBjaGVjayBsYXN0IHNvY2tldCB0aW1lIHN0YW1wXG4iCisJICAgICAgICIgIFNJT0NHU1RBTVBOUyAtIG1vcmUgYWNjdXJhdGUgc29ja2V0IHRpbWUgc3RhbXBcbiIpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhaWwoY29uc3QgY2hhciAqZXJyb3IpCit7CisJcHJpbnRmKCIlczogJXNcbiIsIGVycm9yLCBzdHJlcnJvcihlcnJubykpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN5bmNbXSA9IHsKKwkweDAwLCAweDAxLCAweDAwLCAweDAxLAorCTB4NWYsIDB4NDQsIDB4NDYsIDB4NGMsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMSwKKworCS8qIGZha2UgdXVpZCAqLworCTB4MDAsIDB4MDEsCisJMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKworCTB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NDksIDB4MDUsIDB4Y2QsIDB4MDEsCisJMHgyOSwgMHhiMSwgMHg4ZCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDEsCisKKwkvKiBmYWtlIHV1aWQgKi8KKwkweDAwLCAweDAxLAorCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisKKwkweDAwLCAweDAwLCAweDAwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0NCwgMHg0NiwgMHg0YywgMHg1NCwKKwkweDAwLCAweDAwLCAweGYwLCAweDYwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDAwLCAweDAwLCAweGYwLCAweDYwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDQ0LCAweDQ2LCAweDRjLCAweDU0LAorCTB4MDAsIDB4MDEsCisKKwkvKiBmYWtlIHV1aWQgKi8KKwkweDAwLCAweDAxLAorCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgdm9pZCBzZW5kcGFja2V0KGludCBzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhZGRyX2xlbikKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHJlczsKKworCXJlcyA9IHNlbmR0byhzb2NrLCBzeW5jLCBzaXplb2Yoc3luYyksIDAsCisJCWFkZHIsIGFkZHJfbGVuKTsKKwlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisJaWYgKHJlcyA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAic2VuZCIsIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQlwcmludGYoIiVsZC4lMDZsZDogc2VudCAlZCBieXRlc1xuIiwKKwkJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCQkgICAgICAgcmVzKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRwYWNrZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmVzLAorCQkJY2hhciAqZGF0YSwKKwkJCWludCBzb2NrLCBpbnQgcmVjdm1zZ19mbGFncywKKwkJCWludCBzaW9jZ3N0YW1wLCBpbnQgc2lvY2dzdGFtcG5zKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqZnJvbV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CisJc3RydWN0IGNtc2doZHIgKmNtc2c7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKworCXByaW50ZigiJWxkLiUwNmxkOiByZWNlaXZlZCAlcyBkYXRhLCAlZCBieXRlcyBmcm9tICVzLCAlZCBieXRlcyBjb250cm9sIG1lc3NhZ2VzXG4iLAorCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkgICAgICAgKHJlY3Ztc2dfZmxhZ3MgJiBNU0dfRVJSUVVFVUUpID8gImVycm9yIiA6ICJyZWd1bGFyIiwKKwkgICAgICAgcmVzLAorCSAgICAgICBpbmV0X250b2EoZnJvbV9hZGRyLT5zaW5fYWRkciksCisJICAgICAgIG1zZy0+bXNnX2NvbnRyb2xsZW4pOworCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIobXNnKTsKKwkgICAgIGNtc2c7CisJICAgICBjbXNnID0gQ01TR19OWFRIRFIobXNnLCBjbXNnKSkgeworCQlwcmludGYoIiAgIGNtc2cgbGVuICVkOiAiLCBjbXNnLT5jbXNnX2xlbik7CisJCXN3aXRjaCAoY21zZy0+Y21zZ19sZXZlbCkgeworCQljYXNlIFNPTF9TT0NLRVQ6CisJCQlwcmludGYoIlNPTF9TT0NLRVQgIik7CisJCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkgeworCQkJY2FzZSBTT19USU1FU1RBTVA6IHsKKwkJCQlzdHJ1Y3QgdGltZXZhbCAqc3RhbXAgPQorCQkJCQkoc3RydWN0IHRpbWV2YWwgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJTT19USU1FU1RBTVAgJWxkLiUwNmxkIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3VzZWMpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBTT19USU1FU1RBTVBOUzogeworCQkJCXN0cnVjdCB0aW1lc3BlYyAqc3RhbXAgPQorCQkJCQkoc3RydWN0IHRpbWVzcGVjICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiU09fVElNRVNUQU1QTlMgJWxkLiUwOWxkIiwKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X3NlYywKKwkJCQkgICAgICAgKGxvbmcpc3RhbXAtPnR2X25zZWMpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBTT19USU1FU1RBTVBJTkc6IHsKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgKnN0YW1wID0KKwkJCQkJKHN0cnVjdCB0aW1lc3BlYyAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIlNPX1RJTUVTVEFNUElORyAiKTsKKwkJCQlwcmludGYoIlNXICVsZC4lMDlsZCAiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJc3RhbXArKzsKKwkJCQlwcmludGYoIkhXIHRyYW5zZm9ybWVkICVsZC4lMDlsZCAiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJc3RhbXArKzsKKwkJCQlwcmludGYoIkhXIHJhdyAlbGQuJTA5bGQiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigidHlwZSAlZCIsIGNtc2ctPmNtc2dfdHlwZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBJUFBST1RPX0lQOgorCQkJcHJpbnRmKCJJUFBST1RPX0lQICIpOworCQkJc3dpdGNoIChjbXNnLT5jbXNnX3R5cGUpIHsKKwkJCWNhc2UgSVBfUkVDVkVSUjogeworCQkJCXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyID0KKwkJCQkJKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIklQX1JFQ1ZFUlIgZWVfZXJybm8gJyVzJyBlZV9vcmlnaW4gJWQgPT4gJXMiLAorCQkJCQlzdHJlcnJvcihlcnItPmVlX2Vycm5vKSwKKwkJCQkJZXJyLT5lZV9vcmlnaW4sCisjaWZkZWYgU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORworCQkJCQllcnItPmVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HID8KKwkJCQkJImJvdW5jZWQgcGFja2V0IiA6ICJ1bmV4cGVjdGVkIG9yaWdpbiIKKyNlbHNlCisJCQkJCSJwcm9iYWJseSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HIgorI2VuZGlmCisJCQkJCSk7CisJCQkJaWYgKHJlcyA8IHNpemVvZihzeW5jKSkKKwkJCQkJcHJpbnRmKCIgPT4gdHJ1bmNhdGVkIGRhdGE/ISIpOworCQkJCWVsc2UgaWYgKCFtZW1jbXAoc3luYywgZGF0YSArIHJlcyAtIHNpemVvZihzeW5jKSwKKwkJCQkJCQlzaXplb2Yoc3luYykpKQorCQkJCQlwcmludGYoIiA9PiBHT1QgT1VSIERBVEEgQkFDSyAoSFVSUkFZISkiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgSVBfUEtUSU5GTzogeworCQkJCXN0cnVjdCBpbl9wa3RpbmZvICpwa3RpbmZvID0KKwkJCQkJKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiSVBfUEtUSU5GTyBpbnRlcmZhY2UgaW5kZXggJXUiLAorCQkJCQlwa3RpbmZvLT5pcGlfaWZpbmRleCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigidHlwZSAlZCIsIGNtc2ctPmNtc2dfdHlwZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigibGV2ZWwgJWQgdHlwZSAlZCIsCisJCQkJY21zZy0+Y21zZ19sZXZlbCwKKwkJCQljbXNnLT5jbXNnX3R5cGUpOworCQkJYnJlYWs7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWlmIChzaW9jZ3N0YW1wKSB7CisJCWlmIChpb2N0bChzb2NrLCBTSU9DR1NUQU1QLCAmdHYpKQorCQkJcHJpbnRmKCIgICAlczogJXNcbiIsICJTSU9DR1NUQU1QIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJTSU9DR1NUQU1QICVsZC4lMDZsZFxuIiwKKwkJCSAgICAgICAobG9uZyl0di50dl9zZWMsCisJCQkgICAgICAgKGxvbmcpdHYudHZfdXNlYyk7CisJfQorCWlmIChzaW9jZ3N0YW1wbnMpIHsKKwkJaWYgKGlvY3RsKHNvY2ssIFNJT0NHU1RBTVBOUywgJnRzKSkKKwkJCXByaW50ZigiICAgJXM6ICVzXG4iLCAiU0lPQ0dTVEFNUE5TIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJTSU9DR1NUQU1QTlMgJWxkLiUwOWxkXG4iLAorCQkJICAgICAgIChsb25nKXRzLnR2X3NlYywKKwkJCSAgICAgICAobG9uZyl0cy50dl9uc2VjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlY3ZwYWNrZXQoaW50IHNvY2ssIGludCByZWN2bXNnX2ZsYWdzLAorCQkgICAgICAgaW50IHNpb2Nnc3RhbXAsIGludCBzaW9jZ3N0YW1wbnMpCit7CisJY2hhciBkYXRhWzI1Nl07CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGlvdmVjIGVudHJ5OworCXN0cnVjdCBzb2NrYWRkcl9pbiBmcm9tX2FkZHI7CisJc3RydWN0IHsKKwkJc3RydWN0IGNtc2doZHIgY207CisJCWNoYXIgY29udHJvbFs1MTJdOworCX0gY29udHJvbDsKKwlpbnQgcmVzOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwltc2cubXNnX2lvdiA9ICZlbnRyeTsKKwltc2cubXNnX2lvdmxlbiA9IDE7CisJZW50cnkuaW92X2Jhc2UgPSBkYXRhOworCWVudHJ5Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7CisJbXNnLm1zZ19uYW1lID0gKGNhZGRyX3QpJmZyb21fYWRkcjsKKwltc2cubXNnX25hbWVsZW4gPSBzaXplb2YoZnJvbV9hZGRyKTsKKwltc2cubXNnX2NvbnRyb2wgPSAmY29udHJvbDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7CisKKwlyZXMgPSByZWN2bXNnKHNvY2ssICZtc2csIHJlY3Ztc2dfZmxhZ3N8TVNHX0RPTlRXQUlUKTsKKwlpZiAocmVzIDwgMCkgeworCQlwcmludGYoIiVzICVzOiAlc1xuIiwKKwkJICAgICAgICJyZWN2bXNnIiwKKwkJICAgICAgIChyZWN2bXNnX2ZsYWdzICYgTVNHX0VSUlFVRVVFKSA/ICJlcnJvciIgOiAicmVndWxhciIsCisJCSAgICAgICBzdHJlcnJvcihlcnJubykpOworCX0gZWxzZSB7CisJCXByaW50cGFja2V0KCZtc2csIHJlcywgZGF0YSwKKwkJCSAgICBzb2NrLCByZWN2bXNnX2ZsYWdzLAorCQkJICAgIHNpb2Nnc3RhbXAsIHNpb2Nnc3RhbXBucyk7CisJfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IHNvX3RpbWVzdGFtcGluZ19mbGFncyA9IDA7CisJaW50IHNvX3RpbWVzdGFtcCA9IDA7CisJaW50IHNvX3RpbWVzdGFtcG5zID0gMDsKKwlpbnQgc2lvY2dzdGFtcCA9IDA7CisJaW50IHNpb2Nnc3RhbXBucyA9IDA7CisJaW50IGlwX211bHRpY2FzdF9sb29wID0gMDsKKwljaGFyICppbnRlcmZhY2U7CisJaW50IGk7CisJaW50IGVuYWJsZWQgPSAxOworCWludCBzb2NrOworCXN0cnVjdCBpZnJlcSBkZXZpY2U7CisJc3RydWN0IGlmcmVxIGh3dHN0YW1wOworCXN0cnVjdCBod3RzdGFtcF9jb25maWcgaHdjb25maWcsIGh3Y29uZmlnX3JlcXVlc3RlZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlzdHJ1Y3QgaXBfbXJlcSBpbXI7CisJc3RydWN0IGluX2FkZHIgaWFkZHI7CisJaW50IHZhbDsKKwlzb2NrbGVuX3QgbGVuOworCXN0cnVjdCB0aW1ldmFsIG5leHQ7CisKKwlpZiAoYXJnYyA8IDIpCisJCXVzYWdlKDApOworCWludGVyZmFjZSA9IGFyZ3ZbMV07CisKKwlmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09fVElNRVNUQU1QIikpCisJCQlzb190aW1lc3RhbXAgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09fVElNRVNUQU1QTlMiKSkKKwkJCXNvX3RpbWVzdGFtcG5zID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNJT0NHU1RBTVAiKSkKKwkJCXNpb2Nnc3RhbXAgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU0lPQ0dTVEFNUE5TIikpCisJCQlzaW9jZ3N0YW1wbnMgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiSVBfTVVMVElDQVNUX0xPT1AiKSkKKwkJCWlwX211bHRpY2FzdF9sb29wID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTsKKwkJZWxzZQorCQkJdXNhZ2UoYXJndltpXSk7CisJfQorCisJc29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CisJaWYgKHNvY2tldCA8IDApCisJCWJhaWwoInNvY2tldCIpOworCisJbWVtc2V0KCZkZXZpY2UsIDAsIHNpemVvZihkZXZpY2UpKTsKKwlzdHJuY3B5KGRldmljZS5pZnJfbmFtZSwgaW50ZXJmYWNlLCBzaXplb2YoZGV2aWNlLmlmcl9uYW1lKSk7CisJaWYgKGlvY3RsKHNvY2ssIFNJT0NHSUZBRERSLCAmZGV2aWNlKSA8IDApCisJCWJhaWwoImdldHRpbmcgaW50ZXJmYWNlIElQIGFkZHJlc3MiKTsKKworCW1lbXNldCgmaHd0c3RhbXAsIDAsIHNpemVvZihod3RzdGFtcCkpOworCXN0cm5jcHkoaHd0c3RhbXAuaWZyX25hbWUsIGludGVyZmFjZSwgc2l6ZW9mKGh3dHN0YW1wLmlmcl9uYW1lKSk7CisJaHd0c3RhbXAuaWZyX2RhdGEgPSAodm9pZCAqKSZod2NvbmZpZzsKKwltZW1zZXQoJmh3Y29uZmlnLCAwLCBzaXplb2YoJmh3Y29uZmlnKSk7CisJaHdjb25maWcudHhfdHlwZSA9CisJCShzb190aW1lc3RhbXBpbmdfZmxhZ3MgJiBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKSA/CisJCUhXVFNUQU1QX1RYX09OIDogSFdUU1RBTVBfVFhfT0ZGOworCWh3Y29uZmlnLnJ4X2ZpbHRlciA9CisJCShzb190aW1lc3RhbXBpbmdfZmxhZ3MgJiBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFKSA/CisJCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfU1lOQyA6IEhXVFNUQU1QX0ZJTFRFUl9OT05FOworCWh3Y29uZmlnX3JlcXVlc3RlZCA9IGh3Y29uZmlnOworCWlmIChpb2N0bChzb2NrLCBTSU9DU0hXVFNUQU1QLCAmaHd0c3RhbXApIDwgMCkgeworCQlpZiAoKGVycm5vID09IEVJTlZBTCB8fCBlcnJubyA9PSBFTk9UU1VQKSAmJgorCQkgICAgaHdjb25maWdfcmVxdWVzdGVkLnR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT0ZGICYmCisJCSAgICBod2NvbmZpZ19yZXF1ZXN0ZWQucnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9OT05FKQorCQkJcHJpbnRmKCJTSU9DU0hXVFNUQU1QOiBkaXNhYmxpbmcgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBub3QgcG9zc2libGVcbiIpOworCQllbHNlCisJCQliYWlsKCJTSU9DU0hXVFNUQU1QIik7CisJfQorCXByaW50ZigiU0lPQ1NIV1RTVEFNUDogdHhfdHlwZSAlZCByZXF1ZXN0ZWQsIGdvdCAlZDsgcnhfZmlsdGVyICVkIHJlcXVlc3RlZCwgZ290ICVkXG4iLAorCSAgICAgICBod2NvbmZpZ19yZXF1ZXN0ZWQudHhfdHlwZSwgaHdjb25maWcudHhfdHlwZSwKKwkgICAgICAgaHdjb25maWdfcmVxdWVzdGVkLnJ4X2ZpbHRlciwgaHdjb25maWcucnhfZmlsdGVyKTsKKworCS8qIGJpbmQgdG8gUFRQIHBvcnQgKi8KKwlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisJYWRkci5zaW5fcG9ydCA9IGh0b25zKDMxOSAvKiBQVFAgZXZlbnQgcG9ydCAqLyk7CisJaWYgKGJpbmQoc29jaywKKwkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKKwkJIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApCisJCWJhaWwoImJpbmQiKTsKKworCS8qIHNldCBtdWx0aWNhc3QgZ3JvdXAgZm9yIG91dGdvaW5nIHBhY2tldHMgKi8KKwlpbmV0X2F0b24oIjIyNC4wLjEuMTMwIiwgJmlhZGRyKTsgLyogYWx0ZXJuYXRlIFBUUCBkb21haW4gMSAqLworCWFkZHIuc2luX2FkZHIgPSBpYWRkcjsKKwlpbXIuaW1yX211bHRpYWRkci5zX2FkZHIgPSBpYWRkci5zX2FkZHI7CisJaW1yLmltcl9pbnRlcmZhY2Uuc19hZGRyID0KKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmZGV2aWNlLmlmcl9hZGRyKS0+c2luX2FkZHIuc19hZGRyOworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX01VTFRJQ0FTVF9JRiwKKwkJICAgICAgICZpbXIuaW1yX2ludGVyZmFjZS5zX2FkZHIsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIDwgMCkKKwkJYmFpbCgic2V0IG11bHRpY2FzdCIpOworCisJLyogam9pbiBtdWx0aWNhc3QgZ3JvdXAsIGxvb3Agb3VyIG93biBwYWNrZXQgKi8KKwlpZiAoc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9BRERfTUVNQkVSU0hJUCwKKwkJICAgICAgICZpbXIsIHNpemVvZihzdHJ1Y3QgaXBfbXJlcSkpIDwgMCkKKwkJYmFpbCgiam9pbiBtdWx0aWNhc3QgZ3JvdXAiKTsKKworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX01VTFRJQ0FTVF9MT09QLAorCQkgICAgICAgJmlwX211bHRpY2FzdF9sb29wLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkgeworCQliYWlsKCJsb29wIG11bHRpY2FzdCIpOworCX0KKworCS8qIHNldCBzb2NrZXQgb3B0aW9ucyBmb3IgdGltZSBzdGFtcGluZyAqLworCWlmIChzb190aW1lc3RhbXAgJiYKKwkJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVAsCisJCQkgICAmZW5hYmxlZCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApCisJCWJhaWwoInNldHNvY2tvcHQgU09fVElNRVNUQU1QIik7CisKKwlpZiAoc29fdGltZXN0YW1wbnMgJiYKKwkJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBOUywKKwkJCSAgICZlbmFibGVkLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkKKwkJYmFpbCgic2V0c29ja29wdCBTT19USU1FU1RBTVBOUyIpOworCisJaWYgKHNvX3RpbWVzdGFtcGluZ19mbGFncyAmJgorCQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUElORywKKwkJCSAgICZzb190aW1lc3RhbXBpbmdfZmxhZ3MsCisJCQkgICBzaXplb2Yoc29fdGltZXN0YW1waW5nX2ZsYWdzKSkgPCAwKQorCQliYWlsKCJzZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUElORyIpOworCisJLyogcmVxdWVzdCBJUF9QS1RJTkZPIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KKwlpZiAoc2V0c29ja29wdChzb2NrLCBTT0xfSVAsIElQX1BLVElORk8sCisJCSAgICAgICAmZW5hYmxlZCwgc2l6ZW9mKGVuYWJsZWQpKSA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAic2V0c29ja29wdCBJUF9QS1RJTkZPIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCS8qIHZlcmlmeSBzb2NrZXQgb3B0aW9ucyAqLworCWxlbiA9IHNpemVvZih2YWwpOworCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUCwgJnZhbCwgJmxlbikgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgImdldHNvY2tvcHQgU09fVElNRVNUQU1QIiwgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlCisJCXByaW50ZigiU09fVElNRVNUQU1QICVkXG4iLCB2YWwpOworCisJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QTlMsICZ2YWwsICZsZW4pIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJnZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUE5TIiwKKwkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQlwcmludGYoIlNPX1RJTUVTVEFNUE5TICVkXG4iLCB2YWwpOworCisJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLCAmdmFsLCAmbGVuKSA8IDApIHsKKwkJcHJpbnRmKCIlczogJXNcbiIsICJnZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUElORyIsCisJCSAgICAgICBzdHJlcnJvcihlcnJubykpOworCX0gZWxzZSB7CisJCXByaW50ZigiU09fVElNRVNUQU1QSU5HICVkXG4iLCB2YWwpOworCQlpZiAodmFsICE9IHNvX3RpbWVzdGFtcGluZ19mbGFncykKKwkJCXByaW50ZigiICAgbm90IHRoZSBleHBlY3RlZCB2YWx1ZSAlZFxuIiwKKwkJCSAgICAgICBzb190aW1lc3RhbXBpbmdfZmxhZ3MpOworCX0KKworCS8qIHNlbmQgcGFja2V0cyBmb3JldmVyIGV2ZXJ5IGZpdmUgc2Vjb25kcyAqLworCWdldHRpbWVvZmRheSgmbmV4dCwgMCk7CisJbmV4dC50dl9zZWMgPSAobmV4dC50dl9zZWMgKyAxKSAvIDUgKiA1OworCW5leHQudHZfdXNlYyA9IDA7CisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IHRpbWV2YWwgbm93OworCQlzdHJ1Y3QgdGltZXZhbCBkZWx0YTsKKwkJbG9uZyBkZWx0YV91czsKKwkJaW50IHJlczsKKwkJZmRfc2V0IHJlYWRmcywgZXJyb3JmczsKKworCQlnZXR0aW1lb2ZkYXkoJm5vdywgMCk7CisJCWRlbHRhX3VzID0gKGxvbmcpKG5leHQudHZfc2VjIC0gbm93LnR2X3NlYykgKiAxMDAwMDAwICsKKwkJCShsb25nKShuZXh0LnR2X3VzZWMgLSBub3cudHZfdXNlYyk7CisJCWlmIChkZWx0YV91cyA+IDApIHsKKwkJCS8qIGNvbnRpbnVlIHdhaXRpbmcgZm9yIHRpbWVvdXQgb3IgZGF0YSAqLworCQkJZGVsdGEudHZfc2VjID0gZGVsdGFfdXMgLyAxMDAwMDAwOworCQkJZGVsdGEudHZfdXNlYyA9IGRlbHRhX3VzICUgMTAwMDAwMDsKKworCQkJRkRfWkVSTygmcmVhZGZzKTsKKwkJCUZEX1pFUk8oJmVycm9yZnMpOworCQkJRkRfU0VUKHNvY2ssICZyZWFkZnMpOworCQkJRkRfU0VUKHNvY2ssICZlcnJvcmZzKTsKKwkJCXByaW50ZigiJWxkLiUwNmxkOiBzZWxlY3QgJWxkdXNcbiIsCisJCQkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJCQkgICAgICAgZGVsdGFfdXMpOworCQkJcmVzID0gc2VsZWN0KHNvY2sgKyAxLCAmcmVhZGZzLCAwLCAmZXJyb3JmcywgJmRlbHRhKTsKKwkJCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKwkJCXByaW50ZigiJWxkLiUwNmxkOiBzZWxlY3QgcmV0dXJuZWQ6ICVkLCAlc1xuIiwKKwkJCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkJCSAgICAgICByZXMsCisJCQkgICAgICAgcmVzIDwgMCA/IHN0cmVycm9yKGVycm5vKSA6ICJzdWNjZXNzIik7CisJCQlpZiAocmVzID4gMCkgeworCQkJCWlmIChGRF9JU1NFVChzb2NrLCAmcmVhZGZzKSkKKwkJCQkJcHJpbnRmKCJyZWFkeSBmb3IgcmVhZGluZ1xuIik7CisJCQkJaWYgKEZEX0lTU0VUKHNvY2ssICZlcnJvcmZzKSkKKwkJCQkJcHJpbnRmKCJoYXMgZXJyb3JcbiIpOworCQkJCXJlY3ZwYWNrZXQoc29jaywgMCwKKwkJCQkJICAgc2lvY2dzdGFtcCwKKwkJCQkJICAgc2lvY2dzdGFtcG5zKTsKKwkJCQlyZWN2cGFja2V0KHNvY2ssIE1TR19FUlJRVUVVRSwKKwkJCQkJICAgc2lvY2dzdGFtcCwKKwkJCQkJICAgc2lvY2dzdGFtcG5zKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHdyaXRlIG9uZSBwYWNrZXQgKi8KKwkJCXNlbmRwYWNrZXQoc29jaywKKwkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCisJCQkJICAgc2l6ZW9mKGFkZHIpKTsKKwkJCW5leHQudHZfc2VjICs9IDU7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dAppbmRleCA3ZmE0YjI3Li5lZGI3YWUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dApAQCAtNTYsNiArNTYsMTIgQEAKICAgICBoYXJkd2FyZS4KICAgLSBmc2wsbWFnaWMtcGFja2V0IDogSWYgcHJlc2VudCwgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIHN1cHBvcnRzCiAgICAgd2FraW5nIHVwIHZpYSBtYWdpYyBwYWNrZXQuCisgIC0gYmQtc3Rhc2ggOiBJZiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgc3Rhc2hpbmcKKyAgICBidWZmZXIgZGVzY3JpcHRvcnMgaW4gdGhlIEwyLgorICAtIHJ4LXN0YXNoLWxlbiA6IERlbm90ZXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiBhIHJlY2VpdmVkIGJ1ZmZlciB0byBzdGFzaAorICAgIGluIHRoZSBMMi4KKyAgLSByeC1zdGFzaC1pZHggOiBEZW5vdGVzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYnl0ZSBmcm9tIHRoZSByZWNlaXZlZAorICAgIGJ1ZmZlciB0byBzdGFzaCBpbiB0aGUgTDIuCiAKIEV4YW1wbGU6CiAJZXRoZXJuZXRAMjQwMDAgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWAppbmRleCBhYWJjYzNhLi4zYzAwYzljIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWApAQCAtMiw4ICsyLDYgQEAKIAktIHRoaXMgZmlsZS4KIHNjaGVkLWFyY2gudHh0CiAJLSBDUFUgU2NoZWR1bGVyIGltcGxlbWVudGF0aW9uIGhpbnRzIGZvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZS4KLXNjaGVkLWNvZGluZy50eHQKLQktIHJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlci4KIHNjaGVkLWRlc2lnbi1DRlMudHh0CiAJLSBnb2FscywgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ29tcGxldGUgRmFpciBTY2hlZHVsZXIuCiBzY2hlZC1kb21haW5zLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtY29kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWNvZGluZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZDhkYjcuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtY29kaW5nLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0gICAgIFJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlcgotCQlSb2JlcnQgTG92ZSA8cm1sQHRlY2g5Lm5ldD4sIE1vbnRhVmlzdGEgU29mdHdhcmUKLQotCi1Ob3RlIG1vc3Qgb2YgdGhlc2UgbWV0aG9kcyBhcmUgbG9jYWwgdG8ga2VybmVsL3NjaGVkLmMgLSB0aGlzIGlzIGJ5IGRlc2lnbi4KLVRoZSBzY2hlZHVsZXIgaXMgbWVhbnQgdG8gYmUgc2VsZi1jb250YWluZWQgYW5kIGFic3RyYWN0ZWQgYXdheS4gIFRoaXMgZG9jdW1lbnQKLWlzIHByaW1hcmlseSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NoZWR1bGVyLCBub3QgaW50ZXJmYWNpbmcgdG8gaXQuICBTb21lIG9mCi10aGUgZGlzY3Vzc2VkIGludGVyZmFjZXMsIGhvd2V2ZXIsIGFyZSBnZW5lcmFsIHByb2Nlc3Mvc2NoZWR1bGluZyBtZXRob2RzLgotVGhleSBhcmUgdHlwaWNhbGx5IGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oLgotCi0KLU1haW4gU2NoZWR1bGluZyBNZXRob2RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIGxvYWRfYmFsYW5jZShydW5xdWV1ZV90ICp0aGlzX3JxLCBpbnQgaWRsZSkKLQlBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb25lIGNwdSB0byBhbm90aGVyIHRvIGJhbGFuY2UgY3B1IHVzYWdlLAotCWlmIG5lZWRlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBleHBsaWNpdGx5IGlmIHRoZSBydW5xdWV1ZXMgYXJlCi0JaW1iYWxhbmNlZCBvciBwZXJpb2RpY2FsbHkgYnkgdGhlIHRpbWVyIHRpY2suICBQcmlvciB0byBjYWxsaW5nLAotCXRoZSBjdXJyZW50IHJ1bnF1ZXVlIG11c3QgYmUgbG9ja2VkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotCi12b2lkIHNjaGVkdWxlKCkKLQlUaGUgbWFpbiBzY2hlZHVsaW5nIGZ1bmN0aW9uLiAgVXBvbiByZXR1cm4sIHRoZSBoaWdoZXN0IHByaW9yaXR5Ci0JcHJvY2VzcyB3aWxsIGJlIGFjdGl2ZS4KLQotCi1Mb2NraW5nCi0tLS0tLS0tCi0KLUVhY2ggcnVucXVldWUgaGFzIGl0cyBvd24gbG9jaywgcnEtPmxvY2suICBXaGVuIG11bHRpcGxlIHJ1bnF1ZXVlcyBuZWVkCi10byBiZSBsb2NrZWQsIGxvY2sgYWNxdWlyZXMgbXVzdCBiZSBvcmRlcmVkIGJ5IGFzY2VuZGluZyAmcnVucXVldWUgdmFsdWUuCi0KLUEgc3BlY2lmaWMgcnVucXVldWUgaXMgbG9ja2VkIHZpYQotCi0JdGFza19ycV9sb2NrKHRhc2tfdCBwaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotCi13aGljaCBkaXNhYmxlcyBwcmVlbXB0aW9uLCBkaXNhYmxlcyBpbnRlcnJ1cHRzLCBhbmQgbG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcwotcnVubmluZyBvbi4gIExpa2V3aXNlLAotCi0JdGFza19ycV91bmxvY2sodGFza190IHBpZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCi0KLXVubG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcyBydW5uaW5nIG9uLCByZXN0b3JlcyBpbnRlcnJ1cHRzIHRvIHRoZWlyIHByZXZpb3VzCi1zdGF0ZSwgYW5kIHJlZW5hYmxlcyBwcmVlbXB0aW9uLgotCi1UaGUgcm91dGluZXMKLQotCWRvdWJsZV9ycV9sb2NrKHJ1bnF1ZXVlX3QgKnJxMSwgcnVucXVldWVfdCAqcnEyKQotCi1hbmQKLQotCWRvdWJsZV9ycV91bmxvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCi0KLXNhZmVseSBsb2NrIGFuZCB1bmxvY2ssIHJlc3BlY3RpdmVseSwgdGhlIHR3byBzcGVjaWZpZWQgcnVucXVldWVzLiAgVGhleSBkbwotbm90LCBob3dldmVyLCBkaXNhYmxlIGFuZCByZXN0b3JlIGludGVycnVwdHMuICBVc2VycyBhcmUgcmVxdWlyZWQgdG8gZG8gc28KLW1hbnVhbGx5IGJlZm9yZSBhbmQgYWZ0ZXIgY2FsbHMuCi0KLQotVmFsdWVzCi0tLS0tLS0KLQotTUFYX1BSSU8KLQlUaGUgbWF4aW11bSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLCBzdG9yZWQgaW4gdGhlIHRhc2sgYXMgdGFzay0+cHJpby4KLQlMb3dlciBwcmlvcml0aWVzIGFyZSBoaWdoZXIuICBOb3JtYWwgKG5vbi1SVCkgcHJpb3JpdGllcyByYW5nZSBmcm9tCi0JTUFYX1JUX1BSSU8gdG8gKE1BWF9QUklPIC0gMSkuCi1NQVhfUlRfUFJJTwotCVRoZSBtYXhpbXVtIHJlYWwtdGltZSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLiAgVmFsaWQgUlQgcHJpb3JpdGllcwotCXJhbmdlIGZyb20gMCB0byAoTUFYX1JUX1BSSU8gLSAxKS4KLU1BWF9VU0VSX1JUX1BSSU8KLQlUaGUgbWF4aW11bSByZWFsLXRpbWUgcHJpb3JpdHkgdGhhdCBpcyBleHBvcnRlZCB0byB1c2VyLXNwYWNlLiAgU2hvdWxkCi0JYWx3YXlzIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBNQVhfUlRfUFJJTy4gIFNldHRpbmcgaXQgbGVzcyBhbGxvd3MKLQlrZXJuZWwgdGhyZWFkcyB0byBoYXZlIGhpZ2hlciBwcmlvcml0aWVzIHRoYW4gYW55IHVzZXItc3BhY2UgdGFzay4KLU1JTl9USU1FU0xJQ0UKLU1BWF9USU1FU0xJQ0UKLQlSZXNwZWN0aXZlbHksIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHRpbWVzbGljZXMgKHF1YW50YSkgb2YgYSBwcm9jZXNzLgotCi1EYXRhCi0tLS0tCi0KLXN0cnVjdCBydW5xdWV1ZQotCVRoZSBtYWluIHBlci1DUFUgcnVucXVldWUgZGF0YSBzdHJ1Y3R1cmUuCi1zdHJ1Y3QgdGFza19zdHJ1Y3QKLQlUaGUgbWFpbiBwZXItcHJvY2VzcyBkYXRhIHN0cnVjdHVyZS4KLQotCi1HZW5lcmFsIE1ldGhvZHMKLS0tLS0tLS0tLS0tLS0tLQotCi1jcHVfcnEoY3B1KQotCVJldHVybnMgdGhlIHJ1bnF1ZXVlIG9mIHRoZSBzcGVjaWZpZWQgY3B1LgotdGhpc19ycSgpCi0JUmV0dXJucyB0aGUgcnVucXVldWUgb2YgdGhlIGN1cnJlbnQgY3B1LgotdGFza19ycShwaWQpCi0JUmV0dXJucyB0aGUgcnVucXVldWUgd2hpY2ggaG9sZHMgdGhlIHNwZWNpZmllZCBwaWQuCi1jcHVfY3VycihjcHUpCi0JUmV0dXJucyB0aGUgdGFzayBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgZ2l2ZW4gY3B1LgotcnRfdGFzayhwaWQpCi0JUmV0dXJucyB0cnVlIGlmIHBpZCBpcyByZWFsLXRpbWUsIGZhbHNlIGlmIG5vdC4KLQotCi1Qcm9jZXNzIENvbnRyb2wgTWV0aG9kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBzZXRfdXNlcl9uaWNlKHRhc2tfdCAqcCwgbG9uZyBuaWNlKQotCVNldHMgdGhlICJuaWNlIiB2YWx1ZSBvZiB0YXNrIHAgdG8gdGhlIGdpdmVuIHZhbHVlLgotaW50IHNldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCi0JU2V0cyB0aGUgc2NoZWR1bGluZyBwb2xpY3kgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBnaXZlbiBwaWQuCi1pbnQgc2V0X2NwdXNfYWxsb3dlZCh0YXNrX3QgKnAsIHVuc2lnbmVkIGxvbmcgbmV3X21hc2spCi0JU2V0cyBhIGdpdmVuIHRhc2sncyBDUFUgYWZmaW5pdHkgYW5kIG1pZ3JhdGVzIGl0IHRvIGEgcHJvcGVyIGNwdS4KLQlDYWxsZXJzIG11c3QgaGF2ZSBhIHZhbGlkIHJlZmVyZW5jZSB0byB0aGUgdGFzayBhbmQgYXNzdXJlIHRoZQotCXRhc2sgbm90IGV4aXQgcHJlbWF0dXJlbHkuICBObyBsb2NrcyBjYW4gYmUgaGVsZCBkdXJpbmcgdGhlIGNhbGwuCi1zZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQotCVNldHMgdGhlIGdpdmVuIHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCi1zZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkKLQlTZXRzIHRoZSBjdXJyZW50IHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCi12b2lkIHNldF90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBnaXZlbiB0YXNrLgotdm9pZCBjbGVhcl90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotCUNsZWFycyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGdpdmVuIHRhc2suCi12b2lkIHNldF9uZWVkX3Jlc2NoZWQoKQotCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBjdXJyZW50IHRhc2suCi12b2lkIGNsZWFyX25lZWRfcmVzY2hlZCgpCi0JQ2xlYXJzIG5lZWRfcmVzY2hlZCBpbiB0aGUgY3VycmVudCB0YXNrLgotaW50IG5lZWRfcmVzY2hlZCgpCi0JUmV0dXJucyB0cnVlIGlmIG5lZWRfcmVzY2hlZCBpcyBzZXQgaW4gdGhlIGN1cnJlbnQgdGFzaywgZmFsc2UKLQlvdGhlcndpc2UuCi15aWVsZCgpCi0JUGxhY2UgdGhlIGN1cnJlbnQgcHJvY2VzcyBhdCB0aGUgZW5kIG9mIHRoZSBydW5xdWV1ZSBhbmQgY2FsbCBzY2hlZHVsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggODQxYTkzNi4uMDEyODU4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTM0Niw2ICszNDYsOSBAQAogICAgIHNiaXJxCS0gSVJRICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKICAgICBzYmRtYTgJLSA4Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCiAgICAgc2JkbWExNgktIDE2Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisgICAgZm1wb3J0CS0gKG9wdGlvbmFsKSBPUEwzIEkvTyBwb3J0CisgICAgbXB1cG9ydAktIChvcHRpb25hbCkgTVBVNDAxIEkvTyBwb3J0CisgICAgbXB1aXJxCS0gKG9wdGlvbmFsKSBNUFU0MDEgaXJxICMKIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzIGFuZCBhdXRvcHJvYmUuCiAKQEAgLTM4OCwzNCArMzkxLDExIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAgICAgCi0gIE1vZHVsZSBzbmQtY3M0MjMyCi0gIC0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzMi9DUzQyMzJBIElTQSBjaGlwcy4KLQotICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCi0KLSAgICB3aXRoIGlzYXBucD0wLCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKLQotICAgIHBvcnQJLSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDUzNCkKLSAgICBjcG9ydAktIGNvbnRyb2wgcG9ydCAjIGZvciBDUzQyMzIgY2hpcCAoUG5QIHNldHVwIC0gMHgxMjAsMHgyMTAsMHhmMDApCi0gICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwIC0gMHgzMDApLCAtMSA9IGRpc2FibGUKLSAgICBmbV9wb3J0CS0gRk0gcG9ydCAjIGZvciBDUzQyMzIgY2hpcCAoUG5QIHNldHVwIC0gMHgzODgpLCAtMSA9IGRpc2FibGUKLSAgICBpcnEJCS0gSVJRICMgZm9yIENTNDIzMiBjaGlwICg1LDcsOSwxMSwxMiwxNSkKLSAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoOSwxMSwxMiwxNSkKLSAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIENTNDIzMiBjaGlwICgwLDEsMykKLSAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBZYW1haGEgQ1M0MjMyIGNoaXAgKDAsMSwzKSwgLTEgPSBkaXNhYmxlCi0gICAgCi0gICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCi0gICAgKGlmIElTQSBQblAgaXMgbm90IHVzZWQpIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZQotICAgIG9wdGlvbmFsLgotCi0gICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgotICAgIAogICBNb2R1bGUgc25kLWNzNDIzNgogICAtLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQyMzUvQ1M0MjM2L0NTNDIzNkIvQ1M0MjM3Qi8KKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzMi9DUzQyMzJBLAorICAgIAkgICAgICAgCSAgICAgCSAgIAkgICBDUzQyMzUvQ1M0MjM2L0NTNDIzNkIvQ1M0MjM3Qi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1M0MjM4Qi9DUzQyMzkgSVNBIGNoaXBzLgogCiAgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKQEAgLTQzNyw2ICs0MTcsOSBAQAogCiAgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgogCisgICAgVGhpcyBtb2R1bGUgaXMgYWxpYXNlZCBhcyBzbmQtY3M0MjMyIHNpbmNlIGl0IHByb3ZpZGVzIHRoZSBvbGQKKyAgICBzbmQtY3M0MjMyIGZ1bmN0aW9uYWxpdHksIHRvby4KKwogICBNb2R1bGUgc25kLWNzNDI4MQogICAtLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02MDYsNiArNTg5LDcgQEAKICAgICBNb2R1bGUgZm9yIEVTUyBBdWRpb0RyaXZlIEVTLTE2ODggYW5kIEVTLTY4OCBzb3VuZCBjYXJkcy4KIAogICAgIHBvcnQJLSBwb3J0ICMgZm9yIEVTLTE2ODggY2hpcCAoMHgyMjAsMHgyNDAsMHgyNjApCisgICAgZm1fcG9ydAktIHBvcnQgIyBmb3IgT1BMMyAob3B0aW9uOyBzaGFyZSB0aGUgc2FtZSBwb3J0IGFzIGRlZmF1bHQpCiAgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgcG9ydCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApLCAtMSA9IGRpc2FibGUgKGRlZmF1bHQpCiAgICAgaXJxCQktIElSUSAjIGZvciBFUy0xNjg4IGNoaXAgKDUsNyw5LDEwKQogICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBwb3J0ICg1LDcsOSwxMCkKQEAgLTc1Nyw2ICs3NDEsOSBAQAogICAgIG1vZGVsCS0gZm9yY2UgdGhlIG1vZGVsIG5hbWUKICAgICBwb3NpdGlvbl9maXggLSBGaXggRE1BIHBvaW50ZXIgKDAgPSBhdXRvLCAxID0gdXNlIExQSUIsIDIgPSBQT1NCVUYpCiAgICAgcHJvYmVfbWFzayAgLSBCaXRtYXNrIHRvIHByb2JlIGNvZGVjcyAoZGVmYXVsdCA9IC0xLCBtZWFuaW5nIGFsbCBzbG90cykKKyAgICAJCSAgV2hlbiB0aGUgYml0IDggKDB4MTAwKSBpcyBzZXQsIHRoZSBsb3dlciA4IGJpdHMgYXJlIHVzZWQKKwkJICBhcyB0aGUgImZpeGVkIiBjb2RlYyBzbG90czsgaS5lLiB0aGUgZHJpdmVyIHByb2JlcyB0aGUKKwkJICBzbG90cyByZWdhcmRsZXNzIHdoYXQgaGFyZHdhcmUgcmVwb3J0cyBiYWNrCiAgICAgcHJvYmVfb25seQktIE9ubHkgcHJvYmluZyBhbmQgbm8gY29kZWMgaW5pdGlhbGl6YXRpb24gKGRlZmF1bHQ9b2ZmKTsKIAkJICBVc2VmdWwgdG8gY2hlY2sgdGhlIGluaXRpYWwgY29kZWMgc3RhdHVzIGZvciBkZWJ1Z2dpbmcKICAgICBiZGxfcG9zX2FkagktIFNwZWNpZmllcyB0aGUgRE1BIElSUSB0aW1pbmcgZGVsYXkgaW4gc2FtcGxlcy4KQEAgLTExODUsNiArMTE3Miw1NCBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcyBhbmQgUG5QLgogICAgIAorICBNb2R1bGUgc25kLW1zbmQtY2xhc3NpYworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGkgb3IgTW9udGVyZXkKKyAgICBzb3VuZGNhcmRzLgorCisgICAgaW8JCS0gUG9ydCAjIGZvciBtc25kLWNsYXNzaWMgY2FyZAorICAgIGlycQkJLSBJUlEgIyBmb3IgbXNuZC1jbGFzc2ljIGNhcmQKKyAgICBtZW0JCS0gTWVtb3J5IGFkZHJlc3MgKDB4YjAwMDAsIDB4YzgwMDAsIDB4ZDAwMDAsIDB4ZDgwMDAsCisJCSAgMHhlMDAwMCBvciAweGU4MDAwKQorICAgIHdyaXRlX25kZWxheSAtIGVuYWJsZSB3cml0ZSBuZGVsYXkgKGRlZmF1bHQgPSAxKQorICAgIGNhbGlicmF0ZV9zaWduYWwgLSBjYWxpYnJhdGUgc2lnbmFsIChkZWZhdWx0ID0gMCkKKyAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIGRpZ2l0YWwJLSBEaWdpdGFsIGRhdWdodGVyYm9hcmQgcHJlc2VudCAoZGVmYXVsdCA9IDApCisgICAgY2ZnCQktIENvbmZpZyBwb3J0ICgweDI1MCwgMHgyNjAgb3IgMHgyNzApIGRlZmF1bHQgPSBQblAKKyAgICByZXNldAktIFJlc2V0IGFsbCBkZXZpY2VzCisgICAgbXB1X2lvCS0gTVBVNDAxIEkvTyBwb3J0CisgICAgbXB1X2lycQktIE1QVTQwMSBpcnEjCisgICAgaWRlX2lvMAktIElERSBwb3J0ICMwCisgICAgaWRlX2lvMQktIElERSBwb3J0ICMxCisgICAgaWRlX2lycQktIElERSBpcnEjCisgICAgam95c3RpY2tfaW8JLSBKb3lzdGljayBJL08gcG9ydAorCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBmaWxlcyAidHVydGxlYmVhY2gvbXNuZGluaXQuYmluIiBhbmQKKyAgICAidHVydGxlYmVhY2gvbXNuZHBlcm0uYmluIiBpbiB0aGUgcHJvcGVyIGZpcm13YXJlIGRpcmVjdG9yeS4KKworICAgIFNlZSBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24KKyAgICBhYm91dCB0aGlzIGRyaXZlci4gIE5vdGUgdGhhdCBpdCBoYXMgYmVlbiBkaXNjb250aW51ZWQsIGJ1dCB0aGUgCisgICAgVm95ZXRyYSBUdXJ0bGUgQmVhY2gga25vd2xlZGdlIGJhc2UgZW50cnkgZm9yIGl0IGlzIHN0aWxsIGF2YWlsYWJsZQorICAgIGF0CisJaHR0cDovL3d3dy50dXJ0bGViZWFjaC5jb20vc2l0ZS9rYl9mdHAvNzkwLmFzcAorCisgIE1vZHVsZSBzbmQtbXNuZC1waW5uYWNsZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgUGlubmFjbGUvRmlqaSBzb3VuZGNhcmRzLgorCisgICAgaW8JCS0gUG9ydCAjIGZvciBwaW5uYWNsZS9maWppIGNhcmQKKyAgICBpcnEJCS0gSVJRICMgZm9yIHBpbm5hbGNlL2ZpamkgY2FyZAorICAgIG1lbQkJLSBNZW1vcnkgYWRkcmVzcyAoMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwKKwkJICAweGUwMDAwIG9yIDB4ZTgwMDApCisgICAgd3JpdGVfbmRlbGF5IC0gZW5hYmxlIHdyaXRlIG5kZWxheSAoZGVmYXVsdCA9IDEpCisgICAgY2FsaWJyYXRlX3NpZ25hbCAtIGNhbGlicmF0ZSBzaWduYWwgKGRlZmF1bHQgPSAwKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGZpbGVzICJ0dXJ0bGViZWFjaC9wbmRzcGluaS5iaW4iIGFuZAorICAgICJ0dXJ0bGViZWFjaC9wbmRzcGVybS5iaW4iIGluIHRoZSBwcm9wZXIgZmlybXdhcmUgZGlyZWN0b3J5LgorCiAgIE1vZHVsZSBzbmQtbXRwYXYKICAgLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xODI0LDcgKzE4NTksNyBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZSBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLAotICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCBhbmQgSERBVjEuMyAoRGVsdXhlKS4KKyAgICBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIEhEQVYxLjMgKERlbHV4ZSksIGFuZCBFc3NlbmNlIFNUWC4KIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgY2FyZHMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKaW5kZXggMGY1ZDI2Yi4uOGVlYzA1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKQEAgLTU2LDYgKzU2LDcgQEAKICAgc29ueS1hc3NhbWQJU29ueSBBU1NBTUQKICAgdG9zaGliYS1zMDYJVG9zaGliYSBTMDYKICAgdG9zaGliYS1yeDEJVG9zaGliYSBSWDEKKyAgdHlhbgkJVHlhbiBUaHVuZGVyIG42NjUwVyAoUzI5MTUtRSkKICAgdWx0cmEJCVNhbXN1bmcgUTEgVWx0cmEgVmlzdGEgbW9kZWwKICAgbGVub3ZvLTMwMDAJTGVub3ZvIDMwMDAgeTQxMAogICBuZWMJCU5FQyBWZXJzYSBTOTEwMApAQCAtMjYxLDYgKzI2Miw4IEBACiA9PT09PT09PT09PT09CiAgIGxhcHRvcAlCYXNpYyBMYXB0b3AgY29uZmlnIChkZWZhdWx0KQogICBocAkJSFAgU3BhcnRhbiBsYXB0b3AKKyAgaHAtZHY2NzM2CUhQIGR2NjczNgorICBsZW5vdm8teDIwMAlMZW5vdm8gWDIwMCBsYXB0b3AKIAogU1RBQzkyMDAKID09PT09PT09CkBAIC0yNzgsNiArMjgxLDcgQEAKICAgZ2F0ZXdheS1tNAlHYXRld2F5IGxhcHRvcHMgd2l0aCBFQVBEIGNvbnRyb2wKICAgZ2F0ZXdheS1tNC0yCUdhdGV3YXkgbGFwdG9wcyB3aXRoIEVBUEQgY29udHJvbAogICBwYW5hc29uaWMJUGFuYXNvbmljIENGLTc0CisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjA1LzkyNTQKID09PT09PT09PT09PT0KQEAgLTI4NSw2ICsyODksOCBAQAogICBkZWxsLW00MglEZWxsICh1bmtub3duKQogICBkZWxsLW00MwlEZWxsIFByZWNpc2lvbgogICBkZWxsLW00NAlEZWxsIEluc3Bpcm9uCisgIGVhcGQJCUtlZXAgRUFQRCBvbiAoZS5nLiBHYXRld2F5IFQxNjE2KQorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIyMC85MjIxCiA9PT09PT09PT09PT09CkBAIC0zMDgsNiArMzE0LDcgQEAKICAgZGVsbC1kODIJRGVsbCAodW5rbm93bikKICAgZGVsbC1tODEJRGVsbCAodW5rbm93bikKICAgZGVsbC1tODIJRGVsbCBYUFMgTTEyMTAKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMDIvOTI1MC85MjUxCiA9PT09PT09PT09PT09PT09PT0KQEAgLTMxOSw2ICszMjYsNyBAQAogICBtMwkJU29tZSBHYXRld2F5IE1YIHNlcmllcyBsYXB0b3BzCiAgIG01CQlTb21lIEdhdGV3YXkgTVggc2VyaWVzIGxhcHRvcHMgKE1QNjk1NCkKICAgbTYJCVNvbWUgR2F0ZXdheSBOWCBzZXJpZXMgbGFwdG9wcworICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIyNy85MjI4LzkyMjkvOTI3eAogPT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMyOCw2ICszMzYsNyBAQAogICA1c3RhY2sJRDk2NSA1c3RhY2sgKyBTUERJRgogICBkZWxsLTNzdGFjawlEZWxsIERpbWVuc2lvbiBFNTIwCiAgIGRlbGwtYmlvcwlGaXhlcyB3aXRoIERlbGwgQklPUyBzZXR1cAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDcxQioKID09PT09PT09PT09PQpAQCAtMzM1LDcgKzM0NCwxMCBAQAogICBkZWxsLW00LTEJRGVsbCBkZXNrdG9wcwogICBkZWxsLW00LTIJRGVsbCBkZXNrdG9wcwogICBkZWxsLW00LTMJRGVsbCBkZXNrdG9wcwotICBocC1tNAkJSFAgZHYgbGFwdG9wcworICBocC1tNAkJSFAgbWluaSAxMDAwCisgIGhwLWR2NQlIUCBkdiBzZXJpZXMKKyAgaHAtaGR4CUhQIEhEWCBzZXJpZXMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ3MyoKID09PT09PT09PT09CkBAIC0zNDUsMTMgKzM1NywxNiBAQAogICBkZWxsLW02LWRtaWMJRGVsbCBkZXNrdG9wcy9sYXB0b3BzIHdpdGggZGlnaXRhbCBtaWNzCiAgIGRlbGwtbTYJRGVsbCBkZXNrdG9wcy9sYXB0b3BzIHdpdGggYm90aCB0eXBlIG9mIG1pY3MKICAgZGVsbC1lcQlEZWxsIGRlc2t0b3BzL2xhcHRvcHMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ4MyoKID09PT09PT09PT09CiAgIHJlZgkJUmVmZXJlbmNlIGJvYXJkCiAgIG1pYy1yZWYJUmVmZXJlbmNlIGJvYXJkIHdpdGggcG93ZXIgbWFuYWdtZW50IGZvciBwb3J0cworICBkZWxsLXMxNAlEZWxsIGxhcHRvcAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTg3MgogPT09PT09PT0KLSAgdmFpbwkJU2V0dXAgZm9yIFZBSU8gRkU1NTBHL1NaMTEwCi0gIHZhaW8tYXIgU2V0dXAgZm9yIFZBSU8gQVIKKyAgdmFpbwkJVkFJTyBsYXB0b3Agd2l0aG91dCBTUERJRgorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKaW5kZXggOGQ2OGZmZi4uYzU5NDhmMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CkBAIC0xMDksNiArMTA5LDEzIEBACiBTaW5jZSAyLjYuMjkga2VybmVsLCB0aGUgZHJpdmVyIGhhcyBhIG1vcmUgcm9idXN0IHByb2JpbmcgbWV0aG9kLCBzbwogdGhpcyBlcnJvciBtaWdodCBoYXBwZW4gcmFyZWx5LCB0aG91Z2guCiAKK09uIGEgbWFjaGluZSB3aXRoIGEgYnJva2VuIEJJT1MsIHNvbWV0aW1lcyB5b3UgbmVlZCB0byBmb3JjZSB0aGUKK2RyaXZlciB0byBwcm9iZSB0aGUgY29kZWMgc2xvdHMgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgcmVwb3J0IGZvciB1c2UuCitJbiBzdWNoIGEgY2FzZSwgdHVybiB0aGUgYml0IDggKDB4MTAwKSBvZiBgcHJvYmVfbWFza2Agb3B0aW9uIG9uLgorVGhlbiB0aGUgcmVzdCA4IGJpdHMgYXJlIHBhc3NlZCBhcyB0aGUgY29kZWMgc2xvdHMgdG8gcHJvYmUKK3VuY29uZGl0aW9uYWxseS4gIEZvciBleGFtcGxlLCBgcHJvYmVfbWFzaz0weDEwM2Agd2lsbCBmb3JjZSB0byBwcm9iZQordGhlIGNvZGVjIHNsb3RzIDAgYW5kIDEgbm8gbWF0dGVyIHdoYXQgdGhlIGhhcmR3YXJlIHJlcG9ydHMuCisKIAogSW50ZXJydXB0IEhhbmRsaW5nCiB+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTM1OCwxMCArMzY1LDI2IEBACiAgIHRvIHRoaXMgZmlsZS4KIGluaXRfdmVyYnM6OgogICBUaGUgZXh0cmEgdmVyYnMgdG8gZXhlY3V0ZSBhdCBpbml0aWFsaXphdGlvbi4gIFlvdSBjYW4gYWRkIGEgdmVyYiBieQotICB3cml0aW5nIHRvIHRoaXMgZmlsZS4gIFBhc3MgdHJlZSBudW1iZXJzLCBuaWQsIHZlcmIgYW5kIHBhcmFtZXRlci4KKyAgd3JpdGluZyB0byB0aGlzIGZpbGUuICBQYXNzIHRocmVlIG51bWJlcnM6IG5pZCwgdmVyYiBhbmQgcGFyYW1ldGVyCisgIChzZXBhcmF0ZWQgd2l0aCBhIHNwYWNlKS4KIGhpbnRzOjoKLSAgU2hvd3MgaGludCBzdHJpbmdzIGZvciBjb2RlYyBwYXJzZXJzIGZvciBhbnkgdXNlLiAgUmlnaHQgbm93IGl0J3MKLSAgbm90IHVzZWQuCisgIFNob3dzIC8gc3RvcmVzIGhpbnQgc3RyaW5ncyBmb3IgY29kZWMgcGFyc2VycyBmb3IgYW55IHVzZS4KKyAgSXRzIGZvcm1hdCBpcyBga2V5ID0gdmFsdWVgLiAgRm9yIGV4YW1wbGUsIHBhc3NpbmcgYGhwX2RldGVjdCA9IHllc2AKKyAgdG8gSURUL1NUQUMgY29kZWMgcGFyc2VyIHdpbGwgcmVzdWx0IGluIHRoZSBkaXNhYmxlbWVudCBvZiB0aGUKKyAgaGVhZHBob25lIGRldGVjdGlvbi4KK2luaXRfcGluX2NvbmZpZ3M6OgorICBTaG93cyB0aGUgaW5pdGlhbCBwaW4gZGVmYXVsdCBjb25maWcgdmFsdWVzIHNldCBieSBCSU9TLgorZHJpdmVyX3Bpbl9jb25maWdzOjoKKyAgU2hvd3MgdGhlIHBpbiBkZWZhdWx0IHZhbHVlcyBzZXQgYnkgdGhlIGNvZGVjIHBhcnNlciBleHBsaWNpdGx5LgorICBUaGlzIGRvZXNuJ3Qgc2hvdyBhbGwgcGluIHZhbHVlcyBidXQgb25seSB0aGUgY2hhbmdlZCB2YWx1ZXMgYnkKKyAgdGhlIHBhcnNlci4gIFRoYXQgaXMsIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBjaGFuZ2UgdGhlIHBpbiBkZWZhdWx0CisgIGNvbmZpZyB2YWx1ZXMgYnkgaXRzZWxmLCB0aGlzIHdpbGwgY29udGFpbiBub3RoaW5nLgordXNlcl9waW5fY29uZmlnczo6CisgIFNob3dzIHRoZSBwaW4gZGVmYXVsdCBjb25maWcgdmFsdWVzIHRvIG92ZXJyaWRlIHRoZSBCSU9TIHNldHVwLgorICBXcml0aW5nIHRoaXMgKHdpdGggdHdvIG51bWJlcnMsIE5JRCBhbmQgdmFsdWUpIGFwcGVuZHMgdGhlIG5ldworICB2YWx1ZS4gIFRoZSBnaXZlbiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW5pdGlhbCBCSU9TIHZhbHVlIGF0CisgIHRoZSBuZXh0IHJlY29uZmlndXJhdGlvbiB0aW1lLiAgTm90ZSB0aGF0IHRoaXMgY29uZmlnIHdpbGwgb3ZlcnJpZGUKKyAgZXZlbiB0aGUgZHJpdmVyIHBpbiBjb25maWdzLCB0b28uCiByZWNvbmZpZzo6CiAgIFRyaWdnZXJzIHRoZSBjb2RlYyByZS1jb25maWd1cmF0aW9uLiAgV2hlbiBhbnkgdmFsdWUgaXMgd3JpdHRlbiB0bwogICB0aGlzIGZpbGUsIHRoZSBkcml2ZXIgcmUtaW5pdGlhbGl6ZSBhbmQgcGFyc2VzIHRoZSBjb2RlYyB0cmVlCkBAIC0zNzEsNiArMzk0LDE0IEBACiAgIFJlc2V0cyB0aGUgY29kZWMsIHJlbW92ZXMgdGhlIG1peGVyIGVsZW1lbnRzIGFuZCBQQ00gc3R1ZmYgb2YgdGhlCiAgIHNwZWNpZmllZCBjb2RlYywgYW5kIGNsZWFyIGFsbCBpbml0IHZlcmJzIGFuZCBoaW50cy4KIAorRm9yIGV4YW1wbGUsIHdoZW4geW91IHdhbnQgdG8gY2hhbmdlIHRoZSBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uCit2YWx1ZSBvZiB0aGUgcGluIHdpZGdldCAweDE0IHRvIDB4OTk5MzAxM2YsIGFuZCBsZXQgdGhlIGRyaXZlcgorcmUtY29uZmlndXJlIGJhc2VkIG9uIHRoYXQgc3RhdGUsIHJ1biBsaWtlIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICMgZWNobyAweDE0IDB4OTk5MzAxM2YgPiAvc3lzL2NsYXNzL3NvdW5kL2h3QzBEMC91c2VyX3Bpbl9jb25maWdzCisgICMgZWNobyAxID4gL3N5cy9jbGFzcy9zb3VuZC9od0MwRDAvcmVjb25maWcgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIAogUG93ZXItU2F2aW5nCiB+fn5+fn5+fn5+fn4KQEAgLTQ2MSw2ICs0OTIsMTYgQEAKIFRoZXJlIGFyZSBzb21lIG90aGVyIHVzZWZ1bCBvcHRpb25zLiAgU2VlIGAtLWhlbHBgIG9wdGlvbiBvdXRwdXQgZm9yCiBkZXRhaWxzLgogCitXaGVuIGEgcHJvYmUgZXJyb3Igb2NjdXJzIG9yIHdoZW4gdGhlIGRyaXZlciBvYnZpb3VzbHkgYXNzaWducyBhCittaXNtYXRjaGVkIG1vZGVsLCBpdCdkIGJlIGhlbHBmdWwgdG8gbG9hZCB0aGUgZHJpdmVyIHdpdGgKK2Bwcm9iZV9vbmx5PTFgIG9wdGlvbiAoYXQgYmVzdCBhZnRlciB0aGUgY29sZCByZWJvb3QpIGFuZCBydW4KK2Fsc2EtaW5mbyBhdCB0aGlzIHN0YXRlLiAgV2l0aCB0aGlzIG9wdGlvbiwgdGhlIGRyaXZlciB3b24ndCBjb25maWd1cmUKK3RoZSBtaXhlciBhbmQgUENNIGJ1dCBqdXN0IHRyaWVzIHRvIHByb2JlIHRoZSBjb2RlYyBzbG90LiAgQWZ0ZXIKK3Byb2JpbmcsIHRoZSBwcm9jIGZpbGUgaXMgYXZhaWxhYmxlLCBzbyB5b3UgY2FuIGdldCB0aGUgcmF3IGNvZGVjCitpbmZvcm1hdGlvbiBiZWZvcmUgbW9kaWZpZWQgYnkgdGhlIGRyaXZlci4gIE9mIGNvdXJzZSwgdGhlIGRyaXZlcgoraXNuJ3QgdXNhYmxlIHdpdGggYHByb2JlX29ubHk9MWAuICBCdXQgeW91IGNhbiBjb250aW51ZSB0aGUKK2NvbmZpZ3VyYXRpb24gdmlhIGh3ZGVwIHN5c2ZzIGZpbGUgaWYgaGRhLXJlY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLgorCiAKIGhkYS12ZXJiCiB+fn5+fn5+fgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKaW5kZXggNDZmOTY4NC4uOWU2NzYzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CkBAIC0xMTYsNiArMTE2LDkgQEAKIFNORF9TT0NfREFQTV9NSVhFUigiT3V0cHV0IE1peGVyIiwgV004NzMxX1BXUiwgNCwgMSwgd204NzMxX291dHB1dF9taXhlcl9jb250cm9scywKIAlBUlJBWV9TSVpFKHdtODczMV9vdXRwdXRfbWl4ZXJfY29udHJvbHMpKSwKIAorSWYgeW91IGRvbnQgd2FudCB0aGUgbWl4ZXIgZWxlbWVudHMgcHJlZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbWl4ZXIgd2lkZ2V0LAoreW91IGNhbiB1c2UgU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTCBpbnN0ZWFkLiB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUKK2FzIGZvciBTTkRfU09DX0RBUE1fTUlYRVIuCiAKIDIuMyBQbGF0Zm9ybS9NYWNoaW5lIGRvbWFpbiBXaWRnZXRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDZhZjdhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVRvIGNvbmZpZ3VyZSB0aGUgQ3J5c3RhbCBDUzQyM3ggc291bmQgY2hpcCBhbmQgYWN0aXZhdGUgaXRzIERTUCBmdW5jdGlvbnMsCi1tb2R1bGVzIG1heSBiZSBsb2FkZWQgaW4gdGhpcyBvcmRlcjoKLSAgCi0JbW9kcHJvYmUgc291bmQKLQlpbnNtb2QgYWQxODQ4Ci0JaW5zbW9kIHVhcnQ0MDEKLQlpbnNtb2QgY3M0MjMyIGlvPSogaXJxPSogZG1hPSogZG1hMj0qCi0gIAotVGhpcyBpcyB0aGUgbWVhbmluZyBvZiB0aGUgcGFyYW1ldGVyczoKLSAgCi0JaW8tLUkvTyBhZGRyZXNzIG9mIHRoZSBXaW5kb3dzIFNvdW5kIFN5c3RlbSAobm9ybWFsbHkgMHg1MzQpCi0JaXJxLS1JUlEgb2YgdGhpcyBkZXZpY2UKLQlkbWEgYW5kIGRtYTItLURNQSBjaGFubmVscyAoRE1BMiBtYXkgYmUgMCkKLSAgCi1PbiBzb21lIGNhcmRzLCB0aGUgYm9hcmQgYXR0ZW1wdHMgdG8gZG8gbm9uLVBuUCBzZXR1cCwgYW5kIGZhaWxzLiAgSWYgeW91Ci1oYXZlIHByb2JsZW1zLCB1c2UgTGludXgnIFBuUCBmYWNpbGl0aWVzLiAKLSAgCi1UbyBnZXQgTUlESSBmYWNpbGl0aWVzIGFkZAotICAKLQlpbnNtb2Qgb3BsMyBpbz0qCi0gIAotd2hlcmUgImlvIiBpcyB0aGUgSS9PIGFkZHJlc3Mgb2YgdGhlIE9QTDMgc3ludGhlc2l6ZXIuIFRoaXMgd2lsbCBiZSBzaG93bgotaW4gL3Byb2Mvc3lzL3BucCBhbmQgaXMgbm9ybWFsbHkgMHgzODguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KaW5kZXggZjA0YmE2Yi4uNzVkOTY3ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgpAQCAtODAsNyArODAsNyBAQAogICAgIGFkZGl0aW9uYWwgZmVhdHVyZXMuCiAKIDIuICBUaGUgY29tbWVyY2lhbCBPU1MgZHJpdmVyIG1heSBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzaXRlOgotICAgIGh0dHA6Ly93d3cvb3BlbnNvdW5kLmNvbS4gIFRoaXMgbWF5IGJlIHVzZWQgZm9yIGNhcmRzIHRoYXQKKyAgICBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20uICBUaGlzIG1heSBiZSB1c2VkIGZvciBjYXJkcyB0aGF0CiAgICAgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLCBvciBtYXkgYmUgdXNlZAogICAgIGJ5IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLiAgCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CmluZGV4IDI3MDQ4MTkuLjZjM2M2MjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dApAQCAtMjI5LDE2ICsyMjksMjYgQEAKIAlpbnQgc3RhdHVzOwkJLyogMjg6ICovCiAJdW5zaWduZWQgaW50IGxlbmd0aDsJLyogMzI6IExlbmd0aCBvZiBkYXRhIChzdWJtaXR0ZWQgb3IgYWN0dWFsKSAqLwogCXVuc2lnbmVkIGludCBsZW5fY2FwOwkvKiAzNjogRGVsaXZlcmVkIGxlbmd0aCAqLwotCXVuc2lnbmVkIGNoYXIgc2V0dXBbOF07CS8qIDQwOiBPbmx5IGZvciBDb250cm9sICdTJyAqLwotfTsJCQkJLyogNDggYnl0ZXMgdG90YWwgKi8KKwl1bmlvbiB7CQkJLyogNDA6ICovCisJCXVuc2lnbmVkIGNoYXIgc2V0dXBbU0VUVVBfTEVOXTsJLyogT25seSBmb3IgQ29udHJvbCBTLXR5cGUgKi8KKwkJc3RydWN0IGlzb19yZWMgewkJLyogT25seSBmb3IgSVNPICovCisJCQlpbnQgZXJyb3JfY291bnQ7CisJCQlpbnQgbnVtZGVzYzsKKwkJfSBpc287CisJfSBzOworCWludCBpbnRlcnZhbDsJCS8qIDQ4OiBPbmx5IGZvciBJbnRlcnJ1cHQgYW5kIElTTyAqLworCWludCBzdGFydF9mcmFtZTsJLyogNTI6IEZvciBJU08gKi8KKwl1bnNpZ25lZCBpbnQgeGZlcl9mbGFnczsgLyogNTY6IGNvcHkgb2YgVVJCJ3MgdHJhbnNmZXJfZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgbmRlc2M7CS8qIDYwOiBBY3R1YWwgbnVtYmVyIG9mIElTTyBkZXNjcmlwdG9ycyAqLworfTsJCQkJLyogNjQgdG90YWwgbGVuZ3RoICovCiAKIFRoZXNlIGV2ZW50cyBjYW4gYmUgcmVjZWl2ZWQgZnJvbSBhIGNoYXJhY3RlciBkZXZpY2UgYnkgcmVhZGluZyB3aXRoIHJlYWQoMiksCi13aXRoIGFuIGlvY3RsKDIpLCBvciBieSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciB3aXRoIG1tYXAuCit3aXRoIGFuIGlvY3RsKDIpLCBvciBieSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciB3aXRoIG1tYXAuIEhvd2V2ZXIsIHJlYWQoMikKK29ubHkgcmV0dXJucyBmaXJzdCA0OCBieXRlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgogCiBUaGUgY2hhcmFjdGVyIGRldmljZSBpcyB1c3VhbGx5IGNhbGxlZCAvZGV2L3VzYm1vbk4sIHdoZXJlIE4gaXMgdGhlIFVTQiBidXMKIG51bWJlci4gTnVtYmVyIHplcm8gKC9kZXYvdXNibW9uMCkgaXMgc3BlY2lhbCBhbmQgbWVhbnMgImFsbCBidXNlcyIuCi1Ib3dldmVyLCB0aGlzIGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIHlldC4gTm90ZSB0aGF0IHNwZWNpZmljIG5hbWluZwotcG9saWN5IGlzIHNldCBieSB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KK05vdGUgdGhhdCBzcGVjaWZpYyBuYW1pbmcgcG9saWN5IGlzIHNldCBieSB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KIAogSWYgeW91IGNyZWF0ZSAvZGV2L3VzYm1vbjAgYnkgaGFuZCwgbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3duZWQgYnkgcm9vdAogYW5kIGhhcyBtb2RlIDA2MDAuIE90aGVyd2lzZSwgdW5wcml2aWxlZGdlZCB1c2VycyB3aWxsIGJlIGFibGUgdG8gc25vb3AKQEAgLTI3OSw5ICsyODksMTAgQEAKIFRoaXMgY2FsbCByZXR1cm5zIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KIAogIE1PTl9JT0NYX0dFVCwgZGVmaW5lZCBhcyBfSU9XKE1PTl9JT0NfTUFHSUMsIDYsIHN0cnVjdCBtb25fZ2V0X2FyZykKKyBNT05fSU9DWF9HRVRYLCBkZWZpbmVkIGFzIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fZ2V0X2FyZykKIAotVGhpcyBjYWxsIHdhaXRzIGZvciBldmVudHMgdG8gYXJyaXZlIGlmIG5vbmUgd2VyZSBpbiB0aGUga2VybmVsIGJ1ZmZlciwKLXRoZW4gcmV0dXJucyB0aGUgZmlyc3QgZXZlbnQuIEl0cyBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZvbGxvd2luZworVGhlc2UgY2FsbHMgd2FpdCBmb3IgZXZlbnRzIHRvIGFycml2ZSBpZiBub25lIHdlcmUgaW4gdGhlIGtlcm5lbCBidWZmZXIsCit0aGVuIHJldHVybiB0aGUgZmlyc3QgZXZlbnQuIFRoZSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZvbGxvd2luZwogc3RydWN0dXJlOgogCiBzdHJ1Y3QgbW9uX2dldF9hcmcgewpAQCAtMjk0LDYgKzMwNSw4IEBACiBwb2ludGVkIGJ5IGhkciBjb250YWlucyB0aGUgbmV4dCBldmVudCBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGF0YSBidWZmZXIgY29udGFpbnMKIHRoZSBkYXRhLCBpZiBhbnkuIFRoZSBldmVudCBpcyByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCBidWZmZXIuCiAKK1RoZSBNT05fSU9DWF9HRVQgY29waWVzIDQ4IGJ5dGVzLCBNT05fSU9DWF9HRVRYIGNvcGllcyA2NCBieXRlcy4KKwogIE1PTl9JT0NYX01GRVRDSCwgZGVmaW5lZCBhcyBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX21mZXRjaF9hcmcpCiAKIFRoaXMgaW9jdGwgaXMgcHJpbWFyaWx5IHVzZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gYWNjZXNzZXMgdGhlIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA1ZDQ2MGM5Li5mYTdiZTA0IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTAxMSw2ICsxMDExLDggQEAKIFM6CVN1cHBvcnRlZAogCiBCUk9BRENPTSBURzMgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVIKK1A6CU1hdHQgQ2FybHNvbgorTToJbWNhcmxzb25AYnJvYWRjb20uY29tCiBQOglNaWNoYWVsIENoYW4KIE06CW1jaGFuQGJyb2FkY29tLmNvbQogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtMTI2OSw2ICsxMjcxLDEyIEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2hlcmJlcnQvY3J5cHRvLTIuNi5naXQKIFM6CU1haW50YWluZWQKIAorQ1JZUFRPR1JBUEhJQyBSQU5ET00gTlVNQkVSIEdFTkVSQVRPUgorUDoJTmVpbCBIb3JtYW4KK006CW5ob3JtYW5AdHV4ZHJpdmVyLmNvbQorTDoJbGludXgtY3J5cHRvQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBDUzU1MzUgQXVkaW8gQUxTQSBkcml2ZXIKIFA6CUpheWEgS3VtYXIKIE06CWpheWFrdW1hci5hbHNhQGdtYWlsLmNvbQpAQCAtMjIxNiw2ICsyMjI0LDExIEBACiBMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKK0lOVEVHUklUWSBNRUFTVVJFTUVOVCBBUkNISVRFQ1RVUkUgKElNQSkKK1A6CU1pbWkgWm9oYXIKK006CXpvaGFyQHVzLmlibS5jb20KK1M6CVN1cHBvcnRlZAorCiBJTVMgVFdJTlRVUkJPIEZSQU1FQlVGRkVSIERSSVZFUgogTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU9ycGhhbgpAQCAtMjgzMiw3ICsyODQ1LDcgQEAKIE06CXppcHBlbEBsaW51eC1tNjhrLm9yZwogTDoJbGludXgtbTY4a0BsaXN0cy5saW51eC1tNjhrLm9yZwogVzoJaHR0cDovL3d3dy5saW51eC1tNjhrLm9yZy8KLVc6CWh0dHA6Ly9saW51eC1tNjhrLWN2cy51YmIuY2EvCitUOglnaXQgZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dlZXJ0L2xpbnV4LW02OGsuZ2l0CiBTOglNYWludGFpbmVkCiAKIE02OEsgT04gQVBQTEUgTUFDSU5UT1NICkBAIC0zNjM1LDYgKzM2NDgsMTIgQEAKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorUkRTIC0gUkVMSUFCTEUgREFUQUdSQU0gU09DS0VUUworUDoJQW5keSBHcm92ZXIKK006CWFuZHkuZ3JvdmVyQG9yYWNsZS5jb20KK0w6CXJkcy1kZXZlbEBvc3Mub3JhY2xlLmNvbQorUzoJU3VwcG9ydGVkCisKIFJFQUQtQ09QWSBVUERBVEUgKFJDVSkKIFA6CURpcGFua2FyIFNhcm1hCiBNOglkaXBhbmthckBpbi5pYm0uY29tCkBAIC0zNzI2LDYgKzM3NDUsMTUgQEAKIFc6CWh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saW51eDM5MC8KIFM6CVN1cHBvcnRlZAogCitTMzkwIFpDUllQVCBEUklWRVIKK1A6CUZlbGl4IEJlY2sKK006CWZlbGl4LmJlY2tAZGUuaWJtLmNvbQorUDoJUmFscGggV3VlcnRobmVyCitNOglyYWxwaC53dWVydGhuZXJAZGUuaWJtLmNvbQorTToJbGludXgzOTBAZGUuaWJtLmNvbQorTDoJbGludXgtczM5MEB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorCiBTMzkwIFpGQ1AgRFJJVkVSCiBQOglDaHJpc3RvZiBTY2htaXR0CiBNOgljaHJpc3RvZi5zY2htaXR0QGRlLmlibS5jb20KQEAgLTM4NDQsNiArMzg3Miw3IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnIChzdWdnZXN0ZWQgQ2M6KQogVDoJZ2l0IGtlcm5lbC5vcmc6cHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ptb3JyaXMvc2VjdXJpdHktdGVzdGluZy0yLjYuZ2l0CitXOglodHRwOi8vc2VjdXJpdHkud2lraS5rZXJuZWwub3JnLwogUzoJU3VwcG9ydGVkCiAKIFNFQ1VSSVRZIENPTlRBQ1QKQEAgLTQyODUsNiArNDMxNCwxOSBAQAogVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90bGFuLwogUzoJTWFpbnRhaW5lZAogCitUT01PWU8gU0VDVVJJVFkgTU9EVUxFCitQOglLZW50YXJvIFRha2VkYQorTToJdGFrZWRha25AbnR0ZGF0YS5jby5qcAorUDoJVGV0c3VvIEhhbmRhCitNOglwZW5ndWluLWtlcm5lbEBJLWxvdmUuU0FLVVJBLm5lLmpwCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIChrZXJuZWwgaXNzdWVzKQorTDoJdG9tb3lvLXVzZXJzLWVuQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgZGV2ZWxvcGVycyBhbmQgdXNlcnMgaW4gRW5nbGlzaCkKK0w6CXRvbW95by1kZXZAbGlzdHMuc291cmNlZm9yZ2UuanAgKHN1YnNjcmliZXJzLW9ubHksIGZvciBkZXZlbG9wZXJzIGluIEphcGFuZXNlKQorTDoJdG9tb3lvLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgdXNlcnMgaW4gSmFwYW5lc2UpCitXOglodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwLworVDoJcXVpbHQgaHR0cDovL3N2bi5zb3VyY2Vmb3JnZS5qcC9zdm5yb290L3RvbW95by90cnVuay8yLjIueC90b21veW8tbHNtL3BhdGNoZXMvCitTOglNYWludGFpbmVkCisKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCiBQOglKb2huIEJlbG1vbnRlCiBNOgl0b3NoaWJhX2FjcGlAbWVtZWJlYW0ub3JnCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBhMTA1N2MyLi4zNjQxZWMxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYyLDYgKzYyLDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKIC8qIE9fTk9OQkxPQ0sgY2xhc2hlcyB3aXRoIHRoZSBiaXRzIHVzZWQgZm9yIHNvY2tldCB0eXBlcy4gIFRoZXJlZm9yZSB3ZQogICogaGF2ZSB0byBkZWZpbmUgU09DS19OT05CTE9DSyB0byBhIGRpZmZlcmVudCB2YWx1ZSBoZXJlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCBkZTM1Y2Q0Li5jY2QyZTE4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9BTFBIQV9TVEFURlNfSAogI2RlZmluZSBfQUxQSEFfU1RBVEZTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIEFscGhhIGlzIHRoZSBvbmx5IDY0LWJpdCBwbGF0Zm9ybSB3aXRoIDMyLWJpdCBzdGF0ZnMuIEFuZCBkb2Vzbid0CiAgICBldmVuIHNlZW0gdG8gaW1wbGVtZW50IHN0YXRmczY0ICovCiAjZGVmaW5lIF9fc3RhdGZzX3dvcmQgX191MzIKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggNjhlNzA4OS4uNGQ2ODJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BTFBIQV9TV0FCX0gKICNkZWZpbmUgX0FMUEhBX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCmluZGV4IDcwMzczMWEuLmQzODEyZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCkBAIC05MCw3ICs5MCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpcnEpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaXJxXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGlycSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaXJxXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJWMlcyIsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCmluZGV4IGUxNmFlYjYuLjY3YzE5ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCkBAIC02NCw3ICs2NCw3IEBACiAJCXNtcF9wZXJjcHVfdGltZXJfaW50ZXJydXB0KHJlZ3MpOwogCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJCWlmIChjcHUgIT0gYm9vdF9jcHVpZCkgewotCQkgICAgICAgIGtzdGF0X2NwdShjcHUpLmlycXNbUlRDX0lSUV0rKzsKKwkJICAgICAgICBrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoUlRDX0lSUSwgaXJxX3RvX2Rlc2MoUlRDX0lSUSkpOwogCQl9IGVsc2UgewogCQkJaGFuZGxlX2lycShSVENfSVJRKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmgKaW5kZXggNzk0ODlmZC4uMDgzODk0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBfX0FSTV9BX09VVF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGV4ZWMKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGYyY2QxOGEuLmVlMTMwNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBfX0FTTUFSTV9TRVRVUF9ICiAjZGVmaW5lIF9fQVNNQVJNX1NFVFVQX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMTAyNAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDY4MTdiZTkuLjUzN2RlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDI3YTY4OWIuLmNhMmJmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNkZWZpbmUgX19BU01fQVJNX1NXQUJfSAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IDM2M2RiMTguLjcyOTZmMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKaW5kZXggYjM0MDRiNy4uMGQyMDc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCkBAIC0yMzEsMTQgKzIzMSwxNyBAQAogCiB2b2lkIF9faW5pdCBraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqZCwgaW50IGlycSkKIHsKKwlpbnQgaTsKKwogCWlmIChpcnEgIT0gTk9fSVJRKSB7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBpcnE7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwogCX0KIAotCWQtPm1paV9idXMgPSAma2lya3dvb2RfZ2UwMF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZraXJrd29vZF9nZTAwLmRldjsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnJfY2hpcHM7IGkrKykKKwkJZC0+Y2hpcFtpXS5taWlfYnVzID0gJmtpcmt3b29kX2dlMDBfc2hhcmVkLmRldjsKIAlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2Rfc3dpdGNoX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYwppbmRleCA5YTBlOTA1Li5lMWMwNTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCkBAIC04Myw2ICs4MywxMSBAQAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9nZTAxX2RhdGEgPSB7CiAJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoMTEpLAogfTsKQEAgLTEwNSwxMiArMTEwLDEyIEBACiAJa2lya3dvb2RfZ2UwMF9pbml0KCZyZDg4ZjYyODFfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOwogCWlmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMCkgewotCQlyZDg4ZjYyODFfc3dpdGNoX2RhdGEuc3dfYWRkciA9IDEwOworCQlyZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YS5zd19hZGRyID0gMTA7CiAJCWtpcmt3b29kX2dlMDFfaW5pdCgmcmQ4OGY2MjgxX2dlMDFfZGF0YSk7CiAJfSBlbHNlIHsKLQkJcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLnBvcnRfbmFtZXNbNF0gPSAid2FuIjsKKwkJcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEucG9ydF9uYW1lc1s0XSA9ICJ3YW4iOwogCX0KLQlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisJa2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MjgxX3N3aXRjaF9wbGF0X2RhdGEsIE5PX0lSUSk7CiAKIAlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcmQ4OGY2MjgxX3NhdGFfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCmluZGV4IDIyZTBlYjYuLmZlYjBlNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCkBAIC02Myw3ICs2Myw2IEBACiAjZWxzZQogc3RhdGljIHZvaWQgaGFuZGxlX3ByaW9faXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC03Miw3ICs3MSw3IEBACiAJQlVHX09OKGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7Ci0Ja3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKHVubGlrZWx5KCFhY3Rpb24gfHwgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCmluZGV4IDhhMGU0OWQuLjY4Y2MzZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2VoY2ktb3Jpb24uaD4KICNpbmNsdWRlIDxwbGF0L212X3hvci5oPgogI2luY2x1ZGUgPHBsYXQvb3Jpb25fbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb241eF93ZHQuaD4KICNpbmNsdWRlIDxwbGF0L3RpbWUuaD4KICNpbmNsdWRlICJjb21tb24uaCIKIApAQCAtMjE5LDE0ICsyMjAsMTcgQEAKIAogdm9pZCBfX2luaXQgb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQogeworCWludCBpOworCiAJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7CiAJfQogCi0JZC0+bWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZvcmlvbjV4X2V0aC5kZXY7CisJZm9yIChpID0gMDsgaSA8IGQtPm5yX2NoaXBzOyBpKyspCisJCWQtPmNoaXBbaV0ubWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCW9yaW9uNXhfc3dpdGNoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfc3dpdGNoX2RldmljZSk7CkBAIC01MzMsNiArNTM3LDI5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXYXRjaGRvZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgb3Jpb241eF93ZHRfZGF0YSA9IHsKKwkudGNsawkJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAib3Jpb241eF93ZHQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmb3Jpb241eF93ZHRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3sKKwlvcmlvbjV4X3dkdF9kYXRhLnRjbGsgPSBvcmlvbjV4X3RjbGs7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kZXZpY2UpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGltZSBoYW5kbGluZwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgb3Jpb241eF90Y2xrOwpAQCAtNjMxLDYgKzY1OCwxMSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJPcmlvbjogQXBwbHlpbmcgNTI4MSBEMCBXRkkgd29ya2Fyb3VuZC5cbiIpOwogCQlkaXNhYmxlX2hsdCgpOwogCX0KKworCS8qCisJICogUmVnaXN0ZXIgd2F0Y2hkb2cgZHJpdmVyCisJICovCisJb3Jpb241eF93ZHRfaW5pdCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZnhvLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwppbmRleCAxNWY1MzIzLi45YzFjYTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYwpAQCAtOTQsNyArOTQsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZnhvX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKQEAgLTEwMyw2ICsxMDMsMTEgQEAKIAkucG9ydF9uYW1lc1s3XQk9ICJsYW4zIiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJkODhmNTE4MWxfZnhvX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTE3LDcgKzEyMiw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9meG9fZXRoX2RhdGEpOwotCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9meG9fc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFJEODhGNTE4MUxfRlhPX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwppbmRleCA4YWQzOTM0Li5lZTEzOTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTA0LDYgKzEwNCwxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2dlX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHJkODhmNTE4MWxfZ2VfaTJjX3J0YyA9IHsKIAlJMkNfQk9BUkRfSU5GTygiZHMxMzM4IiwgMHg2OCksCiB9OwpAQCAtMTIyLDcgKzEyNyw4IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmcmQ4OGY1MTgxbF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDgpKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfcGxhdF9kYXRhLAorCQkJCWdwaW9fdG9faXJxKDgpKTsKIAlvcmlvbjV4X2kyY19pbml0KCk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjYxODNhcC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKaW5kZXggMjYyZTI1ZS4uNzczN2NmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzJdCT0gImxhbjMiLApAQCAtNDQsNiArNDQsMTEgQEAKIAkucG9ydF9uYW1lc1s1XQk9ICJjcHUiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYxODNhcF9nZV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcmQ4OGY2MTgzYXBfZ2VfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUJPSAia2VybmVsIiwKQEAgLTg5LDcgKzk0LDggQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjYxODNhcF9nZV9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9kYXRhLCBncGlvX3RvX2lycSgzKSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNjE4M2FwX2dlX3N3aXRjaF9wbGF0X2RhdGEsCisJCQkJZ3Bpb190b19pcnEoMykpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJkODhmNjE4M2FwX2dlX3NwaV9zbGF2ZV9pbmZvLAogCQkJCUFSUkFZX1NJWkUocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8pKTsKIAlvcmlvbjV4X3NwaV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwppbmRleCBjYzhmODkyLi4xYjRhZDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzJdCT0gIndhbiIsCkBAIC0xMTUsNiArMTE1LDExIEBACiAJLnBvcnRfbmFtZXNbN10JPSAibGFuNCIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZ3cnQzNTBuX3YyX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgd3J0MzUwbl92Ml9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTEyOSw3ICsxMzQsNyBAQAogCSAqLwogCW9yaW9uNXhfZWhjaTBfaW5pdCgpOwogCW9yaW9uNXhfZXRoX2luaXQoJndydDM1MG5fdjJfZXRoX2RhdGEpOwotCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZ3cnQzNTBuX3YyX3N3aXRjaF9kYXRhLCBOT19JUlEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZ3cnQzNTBuX3YyX3N3aXRjaF9wbGF0X2RhdGEsIE5PX0lSUSk7CiAJb3Jpb241eF91YXJ0MF9pbml0KCk7CiAKIAlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihXUlQzNTBOX1YyX05PUl9CT09UX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKaW5kZXggNmQ0OGUwMC4uYTZmZmY3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwpAQCAtMTM1LDYgKzEzNSwxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPMTZfR1BJTywgIC8qIEFDOTcgY29kZWMgQVZERDIgc3VwcGx5IChhbmFsb2d1ZSBwb3dlcikgKi8KKwlHUElPNDBfR1BJTywgIC8qIE1pYyBhbXAgcG93ZXIgKi8KKwlHUElPNDFfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KKwogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwogCUdQSU80NF9HUElPLCAgLyogQ0QxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKaW5kZXggYmUxYWI4ZS4uNjY1MDY2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwpAQCAtMTMzLDYgKzEzMywxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPNF9HUElPLCAgLyogSGVhZHBob25lIGFtcCBwb3dlciAqLworCUdQSU83X0dQSU8sICAvKiBTcGVha2VyIGFtcCBwb3dlciAqLworCUdQSU8zN19HUElPLCAvKiBIZWFkcGhvbmUgZGV0ZWN0ICovCisKIAkvKiBQQyBDYXJkICovCiAJR1BJTzhfR1BJTywgICAvKiBDRDAgKi8KIAlHUElPNDRfR1BJTywgIC8qIENEMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKaW5kZXggZGE2ZTQ0Mi4uMjk1ZWM0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCkBAIC0xNTMsNiArMTUzLDEzIEBACiAJR1BJTzIzX1NTUDFfU0NMSywKIAlHUElPMjVfU1NQMV9UWEQsCiAJR1BJTzI2X1NTUDFfUlhELAorCisJLyogSTJTICovCisJR1BJTzI4X0kyU19CSVRDTEtfT1VULAorCUdQSU8yOV9JMlNfU0RBVEFfSU4sCisJR1BJTzMwX0kyU19TREFUQV9PVVQsCisJR1BJTzMxX0kyU19TWU5DLAorCUdQSU8zMl9JMlNfU1lTQ0xLLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaAppbmRleCBlZmJkMmFhLi5mM2U1NTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCkBAIC00NSw2ICs0NSwyMSBAQAogLyogZTd4eCBJckRBIHBvd2VyIGNvbnRyb2wgKi8KICNkZWZpbmUgR1BJT19FN1hYX0lSX09GRiAgICAgICAgIDM4CiAKKy8qIGU3NDAgYXVkaW8gY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPX0U3NDBfV005NzA1X25BVkREMiAgMTYKKyNkZWZpbmUgR1BJT19FNzQwX01JQ19PTiAgICAgICAgIDQwCisjZGVmaW5lIEdQSU9fRTc0MF9BTVBfT04gICAgICAgICA0MQorCisvKiBlNzUwIGF1ZGlvIGNvbnRyb2wgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19FNzUwX0hQX0FNUF9PRkYgICAgICA0CisjZGVmaW5lIEdQSU9fRTc1MF9TUEtfQU1QX09GRiAgICAgNworI2RlZmluZSBHUElPX0U3NTBfSFBfREVURUNUICAgICAgMzcKKworLyogZTgwMCBhdWRpbyBjb250cm9sIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRTgwMF9IUF9ERVRFQ1QgICAgICA4MQorI2RlZmluZSBHUElPX0U4MDBfSFBfQU1QX09GRiAgICAgODIKKyNkZWZpbmUgR1BJT19FODAwX1NQS19BTVBfT04gICAgIDgzCisKIC8qIEFTSUMgcmVsYXRlZCBHUElPcyAqLwogI2RlZmluZSBHUElPX0VTRVJJRVNfVE1JT19JUlEgICAgICAgIDUKICNkZWZpbmUgR1BJT19FU0VSSUVTX1RNSU9fUENMUiAgICAgIDE5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCmluZGV4IGNmMzE5ODYuLjAxOGY2ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLwogI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCgoeCkgLSAxKSA8PCAyNCkJLyogVGltZSBzbG90cyBwZXIgZnJhbWUgWzEuLjhdICovCi0jZGVmaW5lIFNTQ1IwX0FEQwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNTQ1IwX0FDUwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCiAjZGVmaW5lIFNTQ1IwX01PRAkoMSA8PCAzMSkJLyogTW9kZSAobm9ybWFsIG9yIG5ldHdvcmspICovCiAjZW5kaWYKIApAQCAtMTA5LDYgKzEwOSwxMSBAQAogI2RlZmluZSBTU1NSX1RJTlQJCSgxIDw8IDE5KQkvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgU1NTUl9QSU5UCQkoMSA8PCAxOCkJLyogUGVyaXBoZXJhbCBUcmFpbGluZyBCeXRlIEludGVycnVwdCAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUFhBM3h4KQorI2RlZmluZSBTU1BTUF9FRE1ZU1RPUCh4KQkoKHgpIDw8IDI4KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RvcCAqLworI2RlZmluZSBTU1BTUF9FRE1ZU1RSVCh4KQkoKHgpIDw8IDI2KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RhcnQgKi8KKyNlbmRpZgorCiAjZGVmaW5lIFNTUFNQX0ZTUlQJCSgxIDw8IDI1KQkvKiBGcmFtZSBTeW5jIFJlbGF0aXZlIFRpbWluZyAqLwogI2RlZmluZSBTU1BTUF9ETVlTVE9QKHgpCSgoeCkgPDwgMjMpCS8qIER1bW15IFN0b3AgKi8KICNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKCh4KSA8PCAxNikJLyogU2VyaWFsIEZyYW1lIFdpZHRoICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCA2ZDQ0N2M5Li4wZDYyZDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTEwNSw2ICsxMDUsMTIgQEAKIAlHUElPNTdfbklPSVMxNiwKIAlHUElPMTA0X1BTS1RTRUwsCiAKKwkvKiBJMlMgKi8KKwlHUElPMjhfSTJTX0JJVENMS19PVVQsCisJR1BJTzI5X0kyU19TREFUQV9JTiwKKwlHUElPMzBfSTJTX1NEQVRBX09VVCwKKwlHUElPMzFfSTJTX1NZTkMsCisKIAkvKiBNTUMgKi8KIAlHUElPMzJfTU1DX0NMSywKIAlHUElPMTEyX01NQ19DTUQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKaW5kZXggNTUyYjRjNy4uNDQwYzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCA2MDc4ZjA5Li44MzMxZThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5jbHVkZSA8bWFjaC9iYXN0LW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvYmFzdC1pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCmluZGV4IDkxOTg1NmMuLjllMzQ3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogI2RlZmluZSBNQVAoeCkgeyAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKaW5kZXggNWI1ZWUwYi4uNjliNmNmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0NDBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggMmE1OGE0ZC4uODQzMGU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiAjZGVmaW5lIE1BUCh4KSB7IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmggYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWNmNmEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BMQVRfT1JJT041WF9XRFRfSAorI2RlZmluZSBfX1BMQVRfT1JJT041WF9XRFRfSAorCitzdHJ1Y3Qgb3Jpb241eF93ZHRfcGxhdGZvcm1fZGF0YSB7CisJdTMyCXRjbGs7CQkvKiBubyA8bGludXgvY2xrLmg+IHN1cHBvcnQgeWV0ICovCit9OworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2F1ZGlvLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9hdWRpby5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCmluZGV4IDI1ZDQwNTguLjBmYWQ3NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKQEAgLTMzLDYgKzMzLDkgQEAKICNkZWZpbmUgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFCSgxIDw8IDEpCiAjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkUJKDEgPDwgMCkKIAorI2RlZmluZSBTM0M2NFhYX0lJU01PRF9JTVNfUENMSwkJKDAgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfSUlTTU9EX0lNU19TWVNNVVgJKDEgPDwgMTApCisKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMCSgwIDw8IDEwKQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfRVhURVJOQUwJKDEgPDwgMTApCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NMQVZFCQkoMiA8PCAxMCkKQEAgLTQ0LDggKzQ3LDggQEAKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfTExPVwkJKDAgPDwgNykKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfUkxPVwkJKDEgPDwgNykKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0lJUwkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01TQgkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0xTQgkJKDAgPDwgNSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01TQgkJKDEgPDwgNSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0xTQgkJKDIgPDwgNSkKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01BU0sJCSgzIDw8IDUpCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfMjU2RlMJKDAgPDwgMykKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS181MTJGUwkoMSA8PCAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaAppbmRleCBjZDkxZDE1Li44MjJjODdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKQEAgLTEsOSArMSw5IEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgKKy8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKLSAqIFMzQzI0MTAgLSB1c2IgcG9ydCBpbmZvcm1hdGlvbgorICogUzNDIC0gVVNCIGhvc3QgcG9ydCBpbmZvcm1hdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTEsNyArMTEsNyBAQAogKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAotI2RlZmluZSBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSCAiYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oIgorI2RlZmluZSBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAogCiAjZGVmaW5lIFMzQ19IQ0RGTEdfVVNFRAkoMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9yZWdzLWlpcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcmVncy1paXMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jCmluZGV4IGE5OGM2ZGQuLjU1OWJiY2IwIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTE2eC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggMzU4NjNmMi4uMDRjODYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX19BU01fQVZSMzJfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggYTE0YWE1Yi4uMTRjYzczNyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTQsNyArNCw3IEBACiAjaWZuZGVmIF9fQVNNX0FWUjMyX1NXQUJfSAogI2RlZmluZSBfX0FTTV9BVlIzMl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IGVkMDkyMzkuLjI0NWIyZWUyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMjMwLDEwICsyMzAsMTAgQEAKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKIAkJIjE6CWxkLiIgc3VmZml4ICIJJTEsICUzCQkJXG4iCVwKIAkJIjI6CQkJCQkJXG4iCVwKLQkJIgkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIgkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMQkJCQlcbiIJXAogCQkiMzoJbW92CSUwLCAlNAkJCQlcbiIJXAogCQkiCXJqbXAJMmIJCQkJXG4iCVwKLQkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAwCQkJCVxuIglcCiAJCSIJLnNlY3Rpb24gX19leF90YWJsZSwgXCJhXCIJCVxuIglcCiAJCSIJLmxvbmcJMWIsIDNiCQkJCVxuIglcCiAJCSIJLnByZXZpb3VzCQkJCVxuIglcCkBAIC0yOTUsMTAgKzI5NSwxMCBAQAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAogCQkiMToJc3QuIiBzdWZmaXggIgklMSwgJTMJCQlcbiIJXAogCQkiMjoJCQkJCQlcbiIJXAotCQkiCS5zZWN0aW9uIC5maXh1cCwgXCJheFwiCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAxCQkJCVxuIglcCiAJCSIzOgltb3YJJTAsICU0CQkJCVxuIglcCiAJCSIJcmptcAkyYgkJCQlcbiIJXAotCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDAJCQkJXG4iCVwKIAkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIgkJXG4iCVwKIAkJIgkubG9uZwkxYiwgM2IJCQkJXG4iCVwKIAkJIgkucHJldmlvdXMJCQkJXG4iCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKaW5kZXggMzNkNDkzNy4uMDA5YTgwMSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKQEAgLTE1MCwxMCArMTUwLDEwIEBACiAJdGxibWlzc19yZXN0b3JlCiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fcGFnZV9mYXVsdAorCWNhbGwJZG9fcGFnZV9mYXVsdAogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMgpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIAkuZ2xvYmFsIHJldF9mcm9tX2ZvcmsKIHJldF9mcm9tX2Zvcms6Ci0JcmNhbGwgICBzY2hlZHVsZV90YWlsCisJY2FsbCAgIHNjaGVkdWxlX3RhaWwKIAogCS8qIGNoZWNrIGZvciBzeXNjYWxsIHRyYWNpbmcgKi8KIAlnZXRfdGhyZWFkX2luZm8gcjAKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiBzeXNjYWxsX3RyYWNlX2VudGVyOgogCXB1c2htCXI4LXIxMgotCXJjYWxsCXN5c2NhbGxfdHJhY2UKKwljYWxsCXN5c2NhbGxfdHJhY2UKIAlwb3BtCXI4LXIxMgogCXJqbXAJc3lzY2FsbF90cmFjZV9jb250CiAKQEAgLTI2OSwxNCArMjY5LDE0IEBACiAJYmxkCXIxLCBUSUZfU1lTQ0FMTF9UUkFDRQogCWJyY2MJMWYKIAl1bm1hc2tfaW50ZXJydXB0cwotCXJjYWxsCXN5c2NhbGxfdHJhY2UKKwljYWxsCXN5c2NhbGxfdHJhY2UKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAogMToJYmxkCXIxLCBUSUZfTkVFRF9SRVNDSEVECiAJYnJjYwkyZgogCXVubWFza19pbnRlcnJ1cHRzCi0JcmNhbGwJc2NoZWR1bGUKKwljYWxsCXNjaGVkdWxlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAkxYgpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCBzcAogCW1vdglyMTEsIHIwCi0JcmNhbGwJZG9fbm90aWZ5X3Jlc3VtZQorCWNhbGwJZG9fbm90aWZ5X3Jlc3VtZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJMWIKQEAgLTM5NCw3ICszOTQsNyBAQAogCiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2NyaXRpY2FsX2V4Y2VwdGlvbgorCWNhbGwJZG9fY3JpdGljYWxfZXhjZXB0aW9uCiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuLi4gKi8KIGJhZF9yZXR1cm46CkBAIC00MDcsMTggKzQwNywxOCBAQAogZG9fYnVzX2Vycm9yX3dyaXRlOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbW92CXIxMSwgMQogCXJqbXAJMWYKIAogZG9fYnVzX2Vycm9yX3JlYWQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltb3YJcjExLCAwCiAxOgltZnNyCXIxMiwgU1lTUkVHX0JFQVIKIAltb3YJcjEwLCBzcAotCXJjYWxsCWRvX2J1c19lcnJvcgorCWNhbGwJZG9fYnVzX2Vycm9yCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogCS5hbGlnbgkxCkBAIC00MzMsNyArNDMzLDcgQEAKIDE6CXB1c2htCXI4LCByOQkvKiBQQyBhbmQgU1IgKi8KIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fbm1pCisJY2FsbAlkb19ubWkKIAlwb3BtCXI4LXI5CiAJbXRzcglTWVNSRUdfUkFSX05NSSwgcjgKIAl0c3QJcjAsIHIwCkBAIC00NTcsMjkgKzQ1NywyOSBAQAogaGFuZGxlX2FkZHJlc3NfZmF1bHQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fYWRkcmVzc19leGNlcHRpb24KKwljYWxsCWRvX2FkZHJlc3NfZXhjZXB0aW9uCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogaGFuZGxlX3Byb3RlY3Rpb25fZmF1bHQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fcGFnZV9mYXVsdAorCWNhbGwJZG9fcGFnZV9mYXVsdAogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMQogZG9faWxsZWdhbF9vcGNvZGVfbGw6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9faWxsZWdhbF9vcGNvZGUKKwljYWxsCWRvX2lsbGVnYWxfb3Bjb2RlCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogZG9fZHRsYl9tb2RpZmllZDoKQEAgLTUxMywxMSArNTEzLDExIEBACiBkb19mcGVfbGw6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAl1bm1hc2tfaW50ZXJydXB0cwogCW1vdglyMTIsIDI2CiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19mcGUKKwljYWxsCWRvX2ZwZQogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKQEAgLTU1Myw3ICs1NTMsNyBAQAogCWxkZHNwCXI0LCBzcFtSRUdfU1JdCiAJYmxkCXI0LCBTWVNSRUdfR01fT0ZGU0VUCiAJYnJjcwkxZgotCXJjYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCisJY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQogMToKICNlbmRpZgogCkBAIC01ODIsNyArNTgyLDcgQEAKIAlibGQJcjEsIFRJRl9ORUVEX1JFU0NIRUQKIAlicmNjCTFmCiAJdW5tYXNrX2ludGVycnVwdHMKLQlyY2FsbAlzY2hlZHVsZQorCWNhbGwJc2NoZWR1bGUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCWZhdWx0X2V4aXRfd29yawpAQCAtNTkzLDcgKzU5Myw3IEBACiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCBzcAogCW1vdglyMTEsIHIwCi0JcmNhbGwJZG9fbm90aWZ5X3Jlc3VtZQorCWNhbGwJZG9fbm90aWZ5X3Jlc3VtZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJZmF1bHRfZXhpdF93b3JrCkBAIC02MTYsMTAgKzYxNiwxMCBAQAogCiAuTGRlYnVnX2ZpeHVwX2NvbnQ6CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmCisJY2FsbAl0cmFjZV9oYXJkaXJxc19vZmYKICNlbmRpZgogCW1vdglyMTIsIHNwCi0JcmNhbGwJZG9fZGVidWcKKwljYWxsCWRvX2RlYnVnCiAJbW92CXNwLCByMTIKIAogCWxkZHNwCXIyLCBzcFtSRUdfU1JdCkBAIC02NDMsNyArNjQzLDcgQEAKIAltdHNyCVNZU1JFR19SU1JfREJHLCByMTEKIAltdHNyCVNZU1JFR19SQVJfREJHLCByMTAKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KIDE6CiAjZW5kaWYKIAlsZG10cwlzcCsrLCByMC1scgpAQCAtNjc2LDcgKzY3Niw3IEBACiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJYmxkCXIxMSwgU1lTUkVHX0dNX09GRlNFVAogCWJyY2MJMWYKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KIDE6CiAjZW5kaWYKIAltZnNyCXIyLCBTWVNSRUdfU1IKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCW1vdglyMTEsIHNwCiAJbW92CXIxMiwgXGxldmVsCiAKLQlyY2FsbAlkb19JUlEKKwljYWxsCWRvX0lSUQogCiAJbGRkc3AJcjQsIHNwW1JFR19TUl0KIAliZmV4dHUJcjQsIHI0LCBTWVNSRUdfTTBfT0ZGU0VULCAzCkBAIC03NjcsNyArNzY3LDcgQEAKIAogMToKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KICNlbmRpZgogCXBvcG0JcjgtcjkKIAltdHNyCXJhcl9pbnRcbGV2ZWwsIHI4CkBAIC04MDcsNyArODA3LDcgQEAKIAlsZGRzcAlyNCwgc3BbUkVHX1NSXQogCWJsZAlyNCwgU1lTUkVHX0dNX09GRlNFVAogCWJyY3MJMWIKLQlyY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQorCWNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKICNlbmRpZgogCXJqbXAJMWIKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwppbmRleCBhOGU3NjdkLi45ZjU3MjIyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCmluZGV4IDY3MzE3OGUuLmY3MjQ0Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKQEAgLTYxLDcgKzYxLDcgQEAKIF9fc3lzX21tYXAyOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX21tYXAyCisJY2FsbAlzeXNfbW1hcDIKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC03MCw3ICs3MCw3IEBACiBfX3N5c19zZW5kdG86CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc2VuZHRvCisJY2FsbAlzeXNfc2VuZHRvCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtNzksNyArNzksNyBAQAogX19zeXNfcmVjdmZyb206CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfcmVjdmZyb20KKwljYWxsCXN5c19yZWN2ZnJvbQogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTg4LDcgKzg4LDcgQEAKIF9fc3lzX3BzZWxlY3Q2OgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3BzZWxlY3Q2CisJY2FsbAlzeXNfcHNlbGVjdDYKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC05Nyw3ICs5Nyw3IEBACiBfX3N5c19zcGxpY2U6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc3BsaWNlCisJY2FsbAlzeXNfc3BsaWNlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtMTA2LDcgKzEwNiw3IEBACiBfX3N5c19lcG9sbF9wd2FpdDoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19lcG9sbF9wd2FpdAorCWNhbGwJc3lzX2Vwb2xsX3B3YWl0CiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtMTE1LDYgKzExNSw2IEBACiBfX3N5c19zeW5jX2ZpbGVfcmFuZ2U6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc3luY19maWxlX3JhbmdlCisJY2FsbAlzeXNfc3luY19maWxlX3JhbmdlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TIGIvYXJjaC9hdnIzMi9saWIvc3Rybmxlbl91c2VyLlMKaW5kZXggNjVjZTExYS4uZTQ2ZjQ3MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCisrKyBiL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCkBAIC00OCw3ICs0OCw3IEBACiAJbGRkcGMJbHIsIF90YXNrX3NpemUKIAlzdWIJcjExLCBsciwgcjEyCiAJbW92CXI5LCByMTEKLQlyY2FsbAlfX3N0cm5sZW5fdXNlcgorCWNhbGwJX19zdHJubGVuX3VzZXIKIAljcC53CXIxMiwgcjkKIAlicmd0CTFmCiAJcG9wbQlwYwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggMmNhNzAyZS4uZmFjN2ZlOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Myw0ICs1Myw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYJCQkJLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2OWEwNTFiLi42NDAzYWQyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0JMQUNLRklOX1NXQUJfSAogI2RlZmluZSBfQkxBQ0tGSU5fU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwppbmRleCA3ZmQxMjY1Li5iZDA1MmE2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCkBAIC04Myw3ICs4Myw3IEBACiAJCQlnb3RvIHNraXA7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA5ZGYwY2E4Li5kNWNmNzQwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Niw2ICs1Niw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDJkZmFjOGMuLjdmNjQyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLmMgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKaW5kZXggNzNhYmFlNy4uYWYzZTgyNCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2lycS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYwpAQCAtNzQsNyArNzQsNyBAQAogCQlpZiAoYWN0aW9uKSB7CiAJCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJCXNlcV9wcmludGYocCwgIiAlMTBzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSA/IDogIi0iKTsKIAkJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkYTI1MjBkLi42MDI1MThhNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBjMTA4ZjM5Li4zOWFiYmY1IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0g4MzAwX1NXQUJfSAogI2RlZmluZSBfSDgzMDBfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwppbmRleCBlZjRmMDA0Li43NGY4ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKKwlpbnQgaSA9ICoobG9mZl90ICopIHY7CiAJc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmgKaW5kZXggMzg1OTU1OC4uMGMyNjE1NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mcHUuaApAQCAtNiw4ICs2LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KIC8qIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlcjogKi8KICNkZWZpbmUgRlBTUl9UUkFQX1ZECSgxIDw8IDApCS8qIGludmFsaWQgb3AgdHJhcCBkaXNhYmxlZCAqLwogI2RlZmluZSBGUFNSX1RSQVBfREQJKDEgPDwgMSkJLyogZGVub3JtYWwgdHJhcCBkaXNhYmxlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmgKaW5kZXggMGY1YjU1OS4uYzJjNWZkOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ2NjX2ludHJpbi5oCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMgU3VyZXNoIFNpZGRoYSA8c3VyZXNoLmIuc2lkZGhhQGludGVsLmNvbT4KICAqLwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKiBkZWZpbmUgdGhpcyBtYWNybyB0byBnZXQgc29tZSBhc20gc3RtdHMgaW5jbHVkZWQgaW4gJ2MnIGZpbGVzICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaAppbmRleCBhM2U0NGE1Li5jNDc4MzBlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKiBpbmNsdWRlIGNvbXBpbGVyIHNwZWNpZmljIGludHJpbnNpY3MgKi8KICNpbmNsdWRlIDxhc20vaWE2NHJlZ3MuaD4KICNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggYmZhODZiNi4uMThhN2U0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMjEsOCArMjEsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKIC8qIFNlbGVjdCB4ODYgc3BlY2lmaWMgZmVhdHVyZXMgaW4gPGxpbnV4L2t2bS5oPiAqLwpAQCAtMTY2LDcgKzE2NSw0MCBAQAogCXVuc2lnbmVkIGxvbmcgIHZjcHVpZFs1XTsKIAl1bnNpZ25lZCBsb25nICB2cHNyOwogCXVuc2lnbmVkIGxvbmcgIHZwcjsKLQl1bnNpZ25lZCBsb25nICB2Y3JbMTI4XTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgIHZjclsxMjhdOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBkY3I7CisJCQl1bnNpZ25lZCBsb25nIGl0bTsKKwkJCXVuc2lnbmVkIGxvbmcgaXZhOworCQkJdW5zaWduZWQgbG9uZyByc3YxWzVdOworCQkJdW5zaWduZWQgbG9uZyBwdGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjJbN107CisJCQl1bnNpZ25lZCBsb25nIGlwc3I7CisJCQl1bnNpZ25lZCBsb25nIGlzcjsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2MzsKKwkJCXVuc2lnbmVkIGxvbmcgaWlwOworCQkJdW5zaWduZWQgbG9uZyBpZmE7CisJCQl1bnNpZ25lZCBsb25nIGl0aXI7CisJCQl1bnNpZ25lZCBsb25nIGlpcGE7CisJCQl1bnNpZ25lZCBsb25nIGlmczsKKwkJCXVuc2lnbmVkIGxvbmcgaWltOworCQkJdW5zaWduZWQgbG9uZyBpaGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjRbMzhdOworCQkJdW5zaWduZWQgbG9uZyBsaWQ7CisJCQl1bnNpZ25lZCBsb25nIGl2cjsKKwkJCXVuc2lnbmVkIGxvbmcgdHByOworCQkJdW5zaWduZWQgbG9uZyBlb2k7CisJCQl1bnNpZ25lZCBsb25nIGlycls0XTsKKwkJCXVuc2lnbmVkIGxvbmcgaXR2OworCQkJdW5zaWduZWQgbG9uZyBwbXY7CisJCQl1bnNpZ25lZCBsb25nIGNtY3Y7CisJCQl1bnNpZ25lZCBsb25nIHJzdjVbNV07CisJCQl1bnNpZ25lZCBsb25nIGxycjA7CisJCQl1bnNpZ25lZCBsb25nIGxycjE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjZbNDZdOworCQl9OworCX07CiB9OwogCiBzdHJ1Y3Qga3ZtX3JlZ3MgewpAQCAtMjE0LDQgKzI0NiwxOCBAQAogc3RydWN0IGt2bV9mcHUgewogfTsKIAorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NISUZUCTE2CisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRQkoMVVMIDw8IEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0hJRlQpCisKK3N0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIHsKKwl1bnNpZ25lZCBjaGFyIHN0YWNrW0tWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRV07Cit9OworCitzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCB7Cit9OworCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAzNDg2NjM2Li40NTQyNjUxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTEyLDcgKzExMiwxMSBAQAogI2RlZmluZSBWQ1BVX1NUUlVDVF9TSElGVAkxNgogI2RlZmluZSBWQ1BVX1NUUlVDVF9TSVpFCShfX0lBNjRfVUxfQ09OU1QoMSkgPDwgVkNQVV9TVFJVQ1RfU0hJRlQpCiAKLSNkZWZpbmUgS1ZNX1NUS19PRkZTRVQJCVZDUFVfU1RSVUNUX1NJWkUKKy8qCisgKiBUaGlzIG11c3QgbWF0Y2ggS1ZNX0lBNjRfVkNQVV9TVEFDS197U0hJRlQsU0laRX0gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCisgKi8KKyNkZWZpbmUgS1ZNX1NUS19TSElGVAkJMTYKKyNkZWZpbmUgS1ZNX1NUS19PRkZTRVQJCShfX0lBNjRfVUxfQ09OU1QoMSk8PCBLVk1fU1RLX1NISUZUKQogCiAjZGVmaW5lIEtWTV9WTV9TVFJVQ1RfU0hJRlQJMTkKICNkZWZpbmUgS1ZNX1ZNX1NUUlVDVF9TSVpFCShfX0lBNjRfVUxfQ09OU1QoMSkgPDwgS1ZNX1ZNX1NUUlVDVF9TSElGVCkKQEAgLTE1MywxMCArMTU3LDEwIEBACiAJc3RydWN0IGt2bV92Y3B1X2RhdGEgdmNwdV9kYXRhW0tWTV9NQVhfVkNQVVNdOwogfTsKIAotI2RlZmluZSBWQ1BVX0JBU0UobikJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKLQkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIHZjcHVfZGF0YVtuXSkKLSNkZWZpbmUgVk1fQkFTRQkJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKLQkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV92bV9zdHJ1Y3QpCisjZGVmaW5lIFZDUFVfQkFTRShuKQkoS1ZNX1ZNX0RBVEFfQkFTRSArIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIHZjcHVfZGF0YVtuXSkpCisjZGVmaW5lIEtWTV9WTV9CQVNFCShLVk1fVk1fREFUQV9CQVNFICsgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBrdm1fdm1fZGF0YSwga3ZtX3ZtX3N0cnVjdCkpCiAjZGVmaW5lIEtWTV9NRU1fRElSVFlfTE9HX0JBU0UJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKIAkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV9tZW1fZGlydHlfbG9nKQogCkBAIC0yMzUsOCArMjM5LDYgQEAKIAogc3RydWN0IGt2bTsKIHN0cnVjdCBrdm1fdmNwdTsKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWd7Ci19OwogCiBzdHJ1Y3Qga3ZtX21taW9fcmVxIHsKIAl1aW50NjRfdCBhZGRyOyAgICAgICAgICAvKiAgcGh5c2ljYWwgYWRkcmVzcwkJKi8KQEAgLTQ2Miw2ICs0NjQsOCBAQAogCXVuc2lnbmVkIGxvbmcJbWV0YXBoeXNpY2FsX3JyNDsKIAl1bnNpZ25lZCBsb25nCXZtbV9pbml0X3JyOwogCisJaW50CQlvbmxpbmVfdmNwdXM7CisKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYzsKIAlzdHJ1Y3Qga3ZtX3ZtX3N0YXQgc3RhdDsKIAlzdHJ1Y3Qga3ZtX3NhbF9kYXRhIHJkdl9zYWxfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJjMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21zaWRlZi5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0lBNjRfTVNJX0RFRl9ICisjZGVmaW5lIF9JQTY0X01TSV9ERUZfSAorCisvKgorICogU2hpZnRzIGZvciBBUElDLWJhc2VkIGRhdGEKKyAqLworCisjZGVmaW5lICAgICBNU0lfREFUQV9WRUNUT1JfU0hJRlQJMAorI2RlZmluZQkgICAgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh1OCl2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9WRUNUT1JfTUFTSwkweGZmZmZmZjAwCisKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQJOAorI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfRklYRUQJKDAgPDwgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0xPV1BSSQkoMSA8PCBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9TSElGVAkxNAorI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfREVBU1NFUlQJKDAgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9BU1NFUlQJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQJMTUKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkoMCA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9MRVZFTAkoMSA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQorCisvKgorICogU2hpZnQvbWFzayBmaWVsZHMgZm9yIEFQSUMtYmFzZWQgYnVzIGFkZHJlc3MKKyAqLworCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX0lEX1NISUZUCTQKKyNkZWZpbmUgICAgIE1TSV9BRERSX0hFQURFUgkJMHhmZWUwMDAwMAorCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX0lEX01BU0sJMHhmZmYwMDAwZgorI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9DUFUoY3B1KQkoKGNwdSkgPDwgTVNJX0FERFJfREVTVF9JRF9TSElGVCkKKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUCTIKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfTU9ERV9QSFlTCSgwIDw8IE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCkKKyNkZWZpbmUJICAgIE1TSV9BRERSX0RFU1RfTU9ERV9MT0dJQwkoMSA8PCBNU0lfQUREUl9ERVNUX01PREVfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKKyNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSQkoMSA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKworI2VuZGlmLyogX0lBNjRfTVNJX0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZDVlZjBhYS4uNzQ1NDIxMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjMsNCArNjMsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggNmFhNThiNi4uYzg5YThjYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC02LDcgKzYsNyBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvLgogICovCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKaW5kZXggYTU4ZjY0Yy4uNGY1OTY2MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCkBAIC04MCw3ICs4MCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCX0KICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCmluZGV4IDg5MDMzOTMuLjM2OGVlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKQEAgLTcsNDQgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLS8qCi0gKiBTaGlmdHMgZm9yIEFQSUMtYmFzZWQgZGF0YQotICovCi0KLSNkZWZpbmUgTVNJX0RBVEFfVkVDVE9SX1NISUZUCQkwCi0jZGVmaW5lCSAgICBNU0lfREFUQV9WRUNUT1IodikJCSgoKHU4KXYpIDw8IE1TSV9EQVRBX1ZFQ1RPUl9TSElGVCkKLSNkZWZpbmUgTVNJX0RBVEFfVkVDVE9SX01BU0sJCTB4ZmZmZmZmMDAKLQotI2RlZmluZSBNU0lfREFUQV9ERUxJVkVSWV9TSElGVAkJOAotI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfRklYRUQJKDAgPDwgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkJKDEgPDwgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfTEVWRUxfU0hJRlQJCTE0Ci0jZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9ERUFTU0VSVAkoMCA8PCBNU0lfREFUQV9MRVZFTF9TSElGVCkKLSNkZWZpbmUgICAgIE1TSV9EQVRBX0xFVkVMX0FTU0VSVAkoMSA8PCBNU0lfREFUQV9MRVZFTF9TSElGVCkKLQotI2RlZmluZSBNU0lfREFUQV9UUklHR0VSX1NISUZUCQkxNQotI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9FREdFCSgwIDw8IE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX0xFVkVMCSgxIDw8IE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQpCi0KLS8qCi0gKiBTaGlmdC9tYXNrIGZpZWxkcyBmb3IgQVBJQy1iYXNlZCBidXMgYWRkcmVzcwotICovCi0KLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJCTQKLSNkZWZpbmUgTVNJX0FERFJfSEVBREVSCQkJMHhmZWUwMDAwMAotCi0jZGVmaW5lIE1TSV9BRERSX0RFU1RJRF9NQVNLCQkweGZmZjAwMDBmCi0jZGVmaW5lICAgICBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdSkJKChjcHUpIDw8IE1TSV9UQVJHRVRfQ1BVX1NISUZUKQotCi0jZGVmaW5lIE1TSV9BRERSX0RFU1RNT0RFX1NISUZUCQkyCi0jZGVmaW5lICAgICBNU0lfQUREUl9ERVNUTU9ERV9QSFlTCSgwIDw8IE1TSV9BRERSX0RFU1RNT0RFX1NISUZUKQotI2RlZmluZQkgICAgTVNJX0FERFJfREVTVE1PREVfTE9HSUMJKDEgPDwgTVNJX0FERFJfREVTVE1PREVfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQJMwotI2RlZmluZSAgICAgTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVCSgwIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJCSgxIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQorI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcAlpYTY0X21zaV9jaGlwOwogCkBAIC02NSw4ICsyOCw4IEBACiAJcmVhZF9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlhZGRyID0gbXNnLmFkZHJlc3NfbG87Ci0JYWRkciAmPSBNU0lfQUREUl9ERVNUSURfTUFTSzsKLQlhZGRyIHw9IE1TSV9BRERSX0RFU1RJRF9DUFUoY3B1X3BoeXNpY2FsX2lkKGNwdSkpOworCWFkZHIgJj0gTVNJX0FERFJfREVTVF9JRF9NQVNLOworCWFkZHIgfD0gTVNJX0FERFJfREVTVF9JRF9DUFUoY3B1X3BoeXNpY2FsX2lkKGNwdSkpOwogCW1zZy5hZGRyZXNzX2xvID0gYWRkcjsKIAogCWRhdGEgPSBtc2cuZGF0YTsKQEAgLTk4LDkgKzYxLDkgQEAKIAltc2cuYWRkcmVzc19oaSA9IDA7CiAJbXNnLmFkZHJlc3NfbG8gPQogCQlNU0lfQUREUl9IRUFERVIgfAotCQlNU0lfQUREUl9ERVNUTU9ERV9QSFlTIHwKKwkJTVNJX0FERFJfREVTVF9NT0RFX1BIWVMgfAogCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFUgfAotCQlNU0lfQUREUl9ERVNUSURfQ1BVKGRlc3RfcGh5c19pZCk7CisJCU1TSV9BRERSX0RFU1RfSURfQ1BVKGRlc3RfcGh5c19pZCk7CiAKIAltc2cuZGF0YSA9CiAJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8CkBAIC0xODMsOCArMTQ2LDggQEAKIAogCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKIAltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOwotCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKKwltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOworCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKIAogCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7CiAJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9ICptYXNrOwpAQCAtMjE1LDkgKzE3OCw5IEBACiAJbXNnLT5hZGRyZXNzX2hpID0gMDsKIAltc2ctPmFkZHJlc3NfbG8gPQogCQlNU0lfQUREUl9IRUFERVIgfAotCQlNU0lfQUREUl9ERVNUTU9ERV9QSFlTIHwKKwkJTVNJX0FERFJfREVTVF9NT0RFX1BIWVMgfAogCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFUgfAotCQlNU0lfQUREUl9ERVNUSURfQ1BVKGRlc3QpOworCQlNU0lfQUREUl9ERVNUX0lEX0NQVShkZXN0KTsKIAogCW1zZy0+ZGF0YSA9CiAJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL0tjb25maWcgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKaW5kZXggZjgzM2EwYi4uMGEyZDZiOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwpAQCAtNCw2ICs0LDEwIEBACiBjb25maWcgSEFWRV9LVk0KIAlib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgeQorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVwZW5kcyBvbiBIQVZFX0tWTSB8fCBJQTY0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2lycS5oIGIvYXJjaC9pYTY0L2t2bS9pcnEuaAppbmRleCBjNjc4NmU4Li5jMDc4NWE3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2lycS5oCisrKyBiL2FyY2gvaWE2NC9rdm0vaXJxLmgKQEAgLTIzLDYgKzIzLDggQEAKICNpZm5kZWYgX19JUlFfSAogI2RlZmluZSBfX0lSUV9ICiAKKyNpbmNsdWRlICJsYXBpYy5oIgorCiBzdGF0aWMgaW5saW5lIGludCBpcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKaW5kZXggMjhmOTgyMC4uMDc2YjAwZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJc3dpdGNoIChleHQpIHsKIAljYXNlIEtWTV9DQVBfSVJRQ0hJUDoKIAljYXNlIEtWTV9DQVBfTVBfU1RBVEU6Ci0KKwljYXNlIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVM6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CkBAIC0zMTQsNyArMzE0LDcgQEAKIAl1bmlvbiBpYTY0X2xpZCBsaWQ7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoa3ZtLT52Y3B1c1tpXSkgewogCQkJbGlkLnZhbCA9IFZDUFVfTElEKGt2bS0+dmNwdXNbaV0pOwogCQkJaWYgKGxpZC5pZCA9PSBpZCAmJiBsaWQuZWlkID09IGVpZCkKQEAgLTM4OCw3ICszODgsNyBAQAogCiAJY2FsbF9kYXRhLnB0Y19nX2RhdGEgPSBwLT51LnB0Y19nX2RhdGE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoIWt2bS0+dmNwdXNbaV0gfHwga3ZtLT52Y3B1c1tpXS0+YXJjaC5tcF9zdGF0ZSA9PQogCQkJCQkJS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQgfHwKIAkJCQkJdmNwdSA9PSBrdm0tPnZjcHVzW2ldKQpAQCAtNzg4LDYgKzc4OCw4IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWt2bV9pbml0X3ZtKGt2bSk7CiAKKwlrdm0tPmFyY2gub25saW5lX3ZjcHVzID0gMDsKKwogCXJldHVybiBrdm07CiAKIH0KQEAgLTkxOSw3ICs5MjEsMTMgQEAKIAkJciA9IGt2bV9pb2FwaWNfaW5pdChrdm0pOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoa3ZtKTsKKwkJaWYgKHIpIHsKKwkJCWtmcmVlKGt2bS0+YXJjaC52aW9hcGljKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWJyZWFrOworCWNhc2UgS1ZNX0lSUV9MSU5FX1NUQVRVUzoKIAljYXNlIEtWTV9JUlFfTElORTogewogCQlzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnFfZXZlbnQ7CiAKQEAgLTkyNywxMCArOTM1LDE3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaXJxX2V2ZW50LCBhcmdwLCBzaXplb2YgaXJxX2V2ZW50KSkKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgeworCQkJX19zMzIgc3RhdHVzOwogCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQkJCWt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAorCQkJc3RhdHVzID0ga3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCiAJCQkJICAgIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CiAJCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCQlpZiAoaW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUykgeworCQkJCWlycV9ldmVudC5zdGF0dXMgPSBzdGF0dXM7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaXJxX2V2ZW50LAorCQkJCQkJCXNpemVvZiBpcnFfZXZlbnQpKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCXIgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtMTE0OSw3ICsxMTY0LDcgQEAKIAogCQkvKkluaXRpYWxpemUgaXRjIG9mZnNldCBmb3IgdmNwdXMqLwogCQlpdGNfb2Zmc2V0ID0gMFVMIC0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQkJdiA9IChzdHJ1Y3Qga3ZtX3ZjcHUgKikoKGNoYXIgKil2Y3B1ICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV9kYXRhKSAqIGkpOwogCQkJdi0+YXJjaC5pdGNfb2Zmc2V0ID0gaXRjX29mZnNldDsKQEAgLTEyODMsNiArMTI5OCw4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlrdm0tPmFyY2gub25saW5lX3ZjcHVzKys7CisKIAlyZXR1cm4gdmNwdTsKIGZhaWw6CiAJcmV0dXJuIEVSUl9QVFIocik7CkBAIC0xMzAzLDggKzEzMjAsOCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTE0MjEsNiArMTQzOCwyMyBAQAogCXJldHVybiAwOwogfQogCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrKQoreworCW1lbWNweShzdGFjaywgdmNwdSwgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICBzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2spCit7CisJbWVtY3B5KHZjcHUgKyAxLCAmc3RhY2stPnN0YWNrWzBdICsgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksCisJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykgLSBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7CisKKwl2Y3B1LT5hcmNoLmV4aXRfZGF0YSA9ICgoc3RydWN0IGt2bV92Y3B1ICopc3RhY2spLT5hcmNoLmV4aXRfZGF0YTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBrdm1fYXJjaF92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAKQEAgLTE0MzAsOSArMTQ2NCw3OCBAQAogCiAKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayAqc3RhY2sgPSBOVUxMOworCWxvbmcgcjsKKworCXN3aXRjaCAoaW9jdGwpIHsKKwljYXNlIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiB7CisJCXN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIF9fdXNlciAqdXNlcl9zdGFjazsKKwkgICAgICAgIHZvaWQgX191c2VyICpmaXJzdF9wID0gYXJncDsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX3N0YWNrLCBmaXJzdF9wLCBzaXplb2Yodm9pZCAqKSkpCisJCQlnb3RvIG91dDsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzZXJfc3RhY2ssCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIktWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLOiAiCisJCQkgICAgICAgIklsbGVnYWwgdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBzdGFja1xuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzdGFjayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3RhY2spIHsKKwkJCXIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3RhY2sodmNwdSwgc3RhY2spOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9zdGFjaywgc3RhY2ssCisJCQkJIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKQorCQkJZ290byBvdXQ7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0s6IHsKKwkJc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgX191c2VyICp1c2VyX3N0YWNrOworCSAgICAgICAgdm9pZCBfX3VzZXIgKmZpcnN0X3AgPSBhcmdwOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXJfc3RhY2ssIGZpcnN0X3AsIHNpemVvZih2b2lkICopKSkKKwkJCWdvdG8gb3V0OworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX3N0YWNrLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJLVk1fSUE2NF9WQ1BVX1NFVF9TVEFDSzogIgorCQkJICAgICAgICJJbGxlZ2FsIHVzZXIgYWRkcmVzcyBmb3Igc3RhY2tcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YWNrKSB7CisJCQlyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihzdGFjaywgdXNlcl9zdGFjaywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkKKwkJCWdvdG8gb3V0OworCisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zdGFjayh2Y3B1LCBzdGFjayk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXIgPSAtRUlOVkFMOworCX0KKworb3V0OgorCWtmcmVlKHN0YWNrKTsKKwlyZXR1cm4gcjsKIH0KIAogaW50IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTE0NzIsNyArMTU3NSw3IEBACiB9CiAKIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAotCQl1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTE3MzcsNyArMTg0MCw3IEBACiAJc3RydWN0IGt2bV92Y3B1ICpsdmNwdSA9IGt2bS0+dmNwdXNbMF07CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQlpZiAoIWt2bS0+dmNwdXNbaV0pCiAJCQljb250aW51ZTsKIAkJaWYgKGx2Y3B1LT5hcmNoLnh0cCA+IGt2bS0+dmNwdXNbaV0tPmFyY2gueHRwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYyBiL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMKaW5kZXggY2I3NjAwYi4uYThhZTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm1fZncuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jCkBAIC0yMjcsNiArMjI3LDE4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3JlZ2lzdGVyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3JlZ2lzdGVyX2luZm8oaW4xLCAmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9jYWNoZV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIApAQCAtMjY4LDggKzI4MCwxMiBAQAogc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3ZtX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgaW4wLCBpbjEsIGluMiwgaW4zOwogCi0JSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisKKwlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfdm1faW5mbyhpbjEsIGluMiwKKwkJCShwYWxfdGNfaW5mb191X3QgKikmcmVzdWx0LnYxLCAmcmVzdWx0LnYyKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yOTIsNiArMzA4LDEwOCBAQAogCXZjcHUtPmFyY2gudGltZXJfZmlyZWQgPSAwOwogfQogCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfcGVyZl9tb25faW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjMsIHI5OworCXVuc2lnbmVkIGxvbmcgcG1fYnVmZmVyWzE2XTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlzdGF0dXMgPSBpYTY0X3BhbF9wZXJmX21vbl9pbmZvKHBtX2J1ZmZlciwKKwkJCQkocGFsX3BlcmZfbW9uX2luZm9fdV90ICopICZyOSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHIlBBTF9QRVJGX01PTl9JTkZPIGZhaWxzIHJldD0lbGRcbiIsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKGluMSkKKwkJCW1lbWNweSgodm9pZCAqKWluMSwgcG1fYnVmZmVyLCBzaXplb2YocG1fYnVmZmVyKSk7CisJCWVsc2UgeworCQkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIkludmFsaWQgcGFyYW1ldGVycyAiCisJCQkJCQkiZm9yIFBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwkJfQorCX0KKwlyZXR1cm4gKHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwpe3N0YXR1cywgcjksIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfaGFsdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHJlcyA9IDEwMDBVTCB8ICgxMDAwVUwgPDwgMTYpIHwgKDEwVUwgPDwgMzIpCisJCQkJCXwgKDFVTCA8PCA2MSkgfCAoMVVMIDw8IDYwKTsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKwlpZiAoaW4xKSB7CisJCW1lbWNweSgodm9pZCAqKWluMSwgJnJlcywgc2l6ZW9mKHJlcykpOworCQlzdGF0dXMgPSAwOworCX0gZWxzZXsKKwkJc3RhdHVzID0gUEFMX1NUQVRVU19FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkciSW52YWxpZCBwYXJhbWV0ZXJzICIKKwkJCQkJImZvciBQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJfQorCisJcmV0dXJuIChzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsKXtzdGF0dXMsIDAsIDAsIDB9OworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfbWVtX2F0dHJpYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyByOTsKKwlsb25nIHN0YXR1czsKKworCXN0YXR1cyA9IGlhNjRfcGFsX21lbV9hdHRyaWIoJnI5KTsKKworCXJldHVybiAoc3RydWN0IGlhNjRfcGFsX3JldHZhbCl7c3RhdHVzLCByOSwgMCwgMH07Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZV9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2b2lkICp2KQoreworCXM2NCB0cmFuc190eXBlID0gKHM2NCl2OworCWlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodHJhbnNfdHlwZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9wcmVmZXRjaF92aXNpYmlsaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoaW4xKTsKKwlpZiAocmVzdWx0LnN0YXR1cyA9PSAwKSB7CisJCS8qIE11c3QgYmUgcGVyZm9ybWVkIG9uIGFsbCByZW1vdGUgcHJvY2Vzc29ycworCQlpbiB0aGUgY29oZXJlbmNlIGRvbWFpbi4gKi8KKwkJc21wX2NhbGxfZnVuY3Rpb24ocmVtb3RlX3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5LAorCQkJCQkodm9pZCAqKWluMSwgMSk7CisJCS8qIFVubmVjZXNzYXJ5IG9uIHJlbW90ZSBwcm9jZXNzb3IgZm9yIG90aGVyIHZjcHVzISovCisJCXJlc3VsdC5zdGF0dXMgPSAxOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfcGFsX21jX2RyYWluKHZvaWQgKnYpCit7CisJaWE2NF9wYWxfbWNfZHJhaW4oKTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX2dldF9icmFuZF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdCA9IHswLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKKworCWt2bV9nZXRfcGFsX2NhbGxfZGF0YSh2Y3B1LCAmaW4wLCAmaW4xLCAmaW4yLCAmaW4zKTsKKworCWlmIChpbjEgPT0gMCAmJiBpbjIpIHsKKwkJY2hhciBicmFuZF9pbmZvWzEyOF07CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9nZXRfYnJhbmRfaW5mbyhicmFuZF9pbmZvKTsKKwkJaWYgKHJlc3VsdC5zdGF0dXMgPT0gUEFMX1NUQVRVU19TVUNDRVNTKQorCQkJbWVtY3B5KCh2b2lkICopaW4yLCBicmFuZF9pbmZvLCAxMjgpOworCX0gZWxzZSB7CisJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1JFUVVJUkVTX01FTU9SWTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyJJbnZhbGlkIHBhcmFtZXRlcnMgZm9yICIKKwkJCQkJIlBBTCBjYWxsOjB4JWx4IVxuIiwgaW4wKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBpbnQga3ZtX3BhbF9lbXVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bikKIHsKIApAQCAtMzAwLDE0ICs0MTgsMjIgQEAKIAlpbnQgcmV0ID0gMTsKIAogCWdyMjggPSBrdm1fZ2V0X3BhbF9jYWxsX2luZGV4KHZjcHUpOwotCS8qcHJpbnRrKCJwYWxfY2FsbCBpbmRleDolbHhcbiIsZ3IyOCk7Ki8KIAlzd2l0Y2ggKGdyMjgpIHsKIAljYXNlIFBBTF9DQUNIRV9GTFVTSDoKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX2ZsdXNoKHZjcHUpOwogCQlicmVhazsKKwljYXNlIFBBTF9NRU1fQVRUUklCOgorCQlyZXN1bHQgPSBwYWxfbWVtX2F0dHJpYih2Y3B1KTsKKwkJYnJlYWs7CiAJY2FzZSBQQUxfQ0FDSEVfU1VNTUFSWToKIAkJcmVzdWx0ID0gcGFsX2NhY2hlX3N1bW1hcnkodmNwdSk7CiAJCWJyZWFrOworCWNhc2UgUEFMX1BFUkZfTU9OX0lORk86CisJCXJlc3VsdCA9IHBhbF9wZXJmX21vbl9pbmZvKHZjcHUpOworCQlicmVhazsKKwljYXNlIFBBTF9IQUxUX0lORk86CisJCXJlc3VsdCA9IHBhbF9oYWx0X2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX0hBTFRfTElHSFQ6CiAJewogCQlJTklUX1BBTF9TVEFUVVNfU1VDQ0VTUyhyZXN1bHQpOwpAQCAtMzE3LDYgKzQ0MywxNiBAQAogCX0KIAkJYnJlYWs7CiAKKwljYXNlIFBBTF9QUkVGRVRDSF9WSVNJQklMSVRZOgorCQlyZXN1bHQgPSBwYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfTUNfRFJBSU46CisJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9tY19kcmFpbigpOworCQkvKiBGSVhNRTogQWxsIHZjcHVzIGxpa2VseSBjYWxsIFBBTF9NQ19EUkFJTi4KKwkJICAgVGhhdCBjYXVzZXMgdGhlIGNvbmdlc3Rpb24uICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlbW90ZV9wYWxfbWNfZHJhaW4sIE5VTEwsIDEpOworCQlicmVhazsKKwogCWNhc2UgUEFMX0ZSRVFfUkFUSU9TOgogCQlyZXN1bHQgPSBwYWxfZnJlcV9yYXRpb3ModmNwdSk7CiAJCWJyZWFrOwpAQCAtMzQ2LDYgKzQ4Miw5IEBACiAJCUlOSVRfUEFMX1NUQVRVU19TVUNDRVNTKHJlc3VsdCk7CiAJCXJlc3VsdC52MSA9ICgxTCA8PCAzMikgfCAxTDsKIAkJYnJlYWs7CisJY2FzZSBQQUxfUkVHSVNURVJfSU5GTzoKKwkJcmVzdWx0ID0gcGFsX3JlZ2lzdGVyX2luZm8odmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX1ZNX1BBR0VfU0laRToKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZtX3BhZ2Vfc2l6ZSgmcmVzdWx0LnYwLAogCQkJCQkJCSZyZXN1bHQudjEpOwpAQCAtMzY1LDEyICs1MDQsMTggQEAKIAkJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZlcnNpb24oCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjAsCiAJCQkJKHBhbF92ZXJzaW9uX3VfdCAqKSZyZXN1bHQudjEpOwotCiAJCWJyZWFrOwogCWNhc2UgUEFMX0ZJWEVEX0FERFI6CiAJCXJlc3VsdC5zdGF0dXMgPSBQQUxfU1RBVFVTX1NVQ0NFU1M7CiAJCXJlc3VsdC52MCA9IHZjcHUtPnZjcHVfaWQ7CiAJCWJyZWFrOworCWNhc2UgUEFMX0JSQU5EX0lORk86CisJCXJlc3VsdCA9IHBhbF9nZXRfYnJhbmRfaW5mbyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfR0VUX1BTVEFURToKKwljYXNlIFBBTF9DQUNIRV9TSEFSRURfSU5GTzoKKwkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJSU5JVF9QQUxfU1RBVFVTX1VOSU1QTEVNRU5URUQocmVzdWx0KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyJrdm06IFVuc3VwcG9ydGVkIHBhbCBjYWxsLCIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKaW5kZXggMjMwZWFlNC4uYjFkYzgwOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKQEAgLTE2Nyw3ICsxNjcsNiBAQAogCXJldHVybiAocnIxLnZhbCk7CiB9CiAKLQogLyoKICAqIFNldCB2SUZBICYgdklUSVIgJiB2SUhBLCB3aGVuIHZQU1IuaWMgPTEKICAqIFBhcmFtZXRlcjoKQEAgLTIyMiw4ICsyMjEsNiBAQAogCWluamVjdF9ndWVzdF9pbnRlcnJ1cHRpb24odmNwdSwgSUE2NF9JTlNUX1RMQl9WRUNUT1IpOwogfQogCi0KLQogLyoKICAqIERhdGEgTmVzdGVkIFRMQiBGYXVsdAogICogIEAgRGF0YSBOZXN0ZWQgVExCIFZlY3RvcgpAQCAtMjQ1LDcgKzI0Miw2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X0FMVF9EQVRBX1RMQl9WRUNUT1IpOwogfQogCi0KIC8qCiAgKiBEYXRhIFRMQiBGYXVsdAogICogIEAgRGF0YSBUTEIgdmVjdG9yCkBAIC0yNjUsOCArMjYxLDYgQEAKIAkvKiBJZiB2UFNSLmljLCBJRkEsIElUSVIsIElIQSovCiAJc2V0X2lmYV9pdGlyX2loYSh2Y3B1LCB2YWRyLCAxLCAxLCAxKTsKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfVkhQVF9UUkFOU19WRUNUT1IpOwotCi0KIH0KIAogLyoKQEAgLTI3OSw3ICsyNzMsNiBAQAogCV92aHB0X2ZhdWx0KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qCiAgKiBWSFBUIERhdGEgRmF1bHQKICAqICBAIFZIUFQgVHJhbnNsYXRpb24gdmVjdG9yCkBAIC0yOTAsOCArMjgzLDYgQEAKIAlfdmhwdF9mYXVsdCh2Y3B1LCB2YWRyKTsKIH0KIAotCi0KIC8qCiAgKiBEZWFsIHdpdGg6CiAgKiAgR2VuZXJhbCBFeGNlcHRpb24gdmVjdG9yCkBAIC0zMDEsNyArMjkyLDYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfR0VORVhfVkVDVE9SKTsKIH0KIAotCiAvKgogICogSWxsZWdhbCBPcGVyYXRpb24gRmF1bHQKICAqICBAIEdlbmVyYWwgRXhjZXB0aW9uIFZlY3RvcgpAQCAtNDE5LDE5ICs0MDksMTYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfUEFHRV9OT1RfUFJFU0VOVF9WRUNUT1IpOwogfQogCi0KIHZvaWQgZGF0YV9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIHZvaWQgaW5zdF9wYWdlX25vdF9wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhZHIpCiB7CiAJX19wYWdlX25vdF9wcmVzZW50KHZjcHUsIHZhZHIpOwogfQogCi0KIC8qIERlYWwgd2l0aAogICogIERhdGEgYWNjZXNzIHJpZ2h0cyB2ZWN0b3IKICAqLwpAQCAtNTYzLDIyICs1NTAsNjQgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIHZlY3Rvcik7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV90cmFuc19wYWxfY2FsbF9hcmdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB0aGFzaF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZ3BhLCBwb2ZmOworCisJaWYgKCFpc19waHlzaWNhbF9tb2RlKHZjcHUpKSB7CisJCS8qIERlcGVuZHMgb24gY2FsbGVyIHRvIHByb3ZpZGUgdGhlIERUUiBvciBEVEMgbWFwcGluZy4qLworCQlkYXRhID0gdnRsYl9sb29rdXAodmNwdSwgYXJnLCBEX1RMQik7CisJCWlmIChkYXRhKQorCQkJZ3BhID0gZGF0YS0+cGFnZV9mbGFncyAmIF9QQUdFX1BQTl9NQVNLOworCQllbHNlIHsKKwkJCWRhdGEgPSB2aHB0X2xvb2t1cChhcmcpOworCQkJaWYgKCFkYXRhKQorCQkJCXJldHVybiAwOworCQkJZ3BhID0gZGF0YS0+Z3BhZGRyICYgX1BBR0VfUFBOX01BU0s7CisJCX0KKworCQlwb2ZmID0gYXJnICYgKFBTSVpFKGRhdGEtPnBzKSAtIDEpOworCQlhcmcgPSBQQUdFQUxJR04oZ3BhLCBkYXRhLT5wcykgfCBwb2ZmOworCX0KKwlhcmcgPSBrdm1fZ3BhX3RvX21wYShhcmcgPDwgMSA+PiAxKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKGFyZyk7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9wYWxfY2FsbF9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGdyMjggPSB2Y3B1X2dldF9ncih2Y3B1LCAyOCk7CisJdW5zaWduZWQgbG9uZyBncjI5ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjkpOworCXVuc2lnbmVkIGxvbmcgZ3IzMCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMwKTsKIAogCS8qRklYTUU6Rm9yIHN0YXRpYyBhbmQgc3RhY2tlZCBjb252ZW50aW9uLCBmaXJtd2FyZQogCSAqIGhhcyBwdXQgdGhlIHBhcmFtZXRlcnMgaW4gZ3IyOC1ncjMxIGJlZm9yZQogCSAqIGJyZWFrIHRvIHZtbSAgISEqLwogCi0JcC0+dS5wYWxfZGF0YS5ncjI4ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjgpOwotCXAtPnUucGFsX2RhdGEuZ3IyOSA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI5KTsKLQlwLT51LnBhbF9kYXRhLmdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CisJc3dpdGNoIChncjI4KSB7CisJY2FzZSBQQUxfUEVSRl9NT05fSU5GTzoKKwljYXNlIFBBTF9IQUxUX0lORk86CisJCXAtPnUucGFsX2RhdGEuZ3IyOSA9ICBrdm1fdHJhbnNfcGFsX2NhbGxfYXJncyh2Y3B1LCBncjI5KTsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOworCQlicmVhazsKKwljYXNlIFBBTF9CUkFORF9JTkZPOgorCQlwLT51LnBhbF9kYXRhLmdyMjkgPSBncjI5OzsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0ga3ZtX3RyYW5zX3BhbF9jYWxsX2FyZ3ModmNwdSwgZ3IzMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXAtPnUucGFsX2RhdGEuZ3IyOSA9IGdyMjk7OworCQlwLT51LnBhbF9kYXRhLmdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CisJfQorCXAtPnUucGFsX2RhdGEuZ3IyOCA9IGdyMjg7CiAJcC0+dS5wYWxfZGF0YS5ncjMxID0gdmNwdV9nZXRfZ3IodmNwdSwgMzEpOworCiAJcC0+ZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9QQUxfQ0FMTDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3BhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBnZXRfcGFsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKIApAQCAtNjA2LDcgKzYzNSw3IEBACiAJcC0+ZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9TQUxfQ0FMTDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3NhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBnZXRfc2FsX2NhbGxfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcCA9ICZ2Y3B1LT5hcmNoLmV4aXRfZGF0YTsKIApAQCAtNjI5LDEzICs2NTgsMTMgQEAKIAkJaWYgKGlpbSA9PSBET01OX1BBTF9SRVFVRVNUKSB7CiAJCQlzZXRfcGFsX2NhbGxfZGF0YSh2KTsKIAkJCXZtbV90cmFuc2l0aW9uKHYpOwotCQkJc2V0X3BhbF9jYWxsX3Jlc3VsdCh2KTsKKwkJCWdldF9wYWxfY2FsbF9yZXN1bHQodik7CiAJCQl2Y3B1X2luY3JlbWVudF9paXAodik7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoaWltID09IERPTU5fU0FMX1JFUVVFU1QpIHsKIAkJCXNldF9zYWxfY2FsbF9kYXRhKHYpOwogCQkJdm1tX3RyYW5zaXRpb24odik7Ci0JCQlzZXRfc2FsX2NhbGxfcmVzdWx0KHYpOworCQkJZ2V0X3NhbF9jYWxsX3Jlc3VsdCh2KTsKIAkJCXZjcHVfaW5jcmVtZW50X2lpcCh2KTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzAzLDcgKzczMiw2IEBACiAJfQogfQogCi0KIHZvaWQgbGVhdmVfaHlwZXJ2aXNvcl90YWlsKHZvaWQpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2ID0gY3VycmVudF92Y3B1OwpAQCAtNzM3LDcgKzc2NSw2IEBACiAJfQogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfbGRzKHN0cnVjdCBrdm1fcHRfcmVncyAqcmVncykKIHsKIAlyZWdzLT5jcl9pcHNyIHw9IElBNjRfUFNSX0VEOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwppbmRleCBlY2Q1MjZiLi5kNGQyODA1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuYworKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAJcmV0dXJuOwogfQogCi0KIHZvaWQgc3dpdGNoX3RvX3ZpcnR1YWxfcmlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIHBzcjsKQEAgLTE2Niw4ICsxNjUsNiBAQAogCXJldHVybjsKIH0KIAotCi0KIC8qCiAgKiBJbiBwaHlzaWNhbCBtb2RlLCBpbnNlcnQgdGMvdHIgZm9yIHJlZ2lvbiAwIGFuZCA0IHVzZXMKICAqIFJJRFswXSBhbmQgUklEWzRdIHdoaWNoIGlzIGZvciBwaHlzaWNhbCBtb2RlIGVtdWxhdGlvbi4KQEAgLTI2OSw3ICsyNjYsNiBAQAogCXJldHVybiByb3RhdGVfcmVnKDk2LCBycmJfZnIsIChyZWdudW0gLSBJQTY0X0ZJUlNUX1JPVEFUSU5HX0ZSKSk7CiB9CiAKLQogLyoKICAqIFRoZSBpbnZlcnNlIG9mIHRoZSBhYm92ZTogZ2l2ZW4gYnNwc3RvcmUgYW5kIHRoZSBudW1iZXIgb2YKICAqIHJlZ2lzdGVycywgY2FsY3VsYXRlIGFyLmJzcC4KQEAgLTgxMSwxMiArODA3LDE1IEBACiBzdGF0aWMgdm9pZCB2Y3B1X3NldF9pdGMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdjsKKwlzdHJ1Y3Qga3ZtICprdm07CiAJaW50IGk7CiAJbG9uZyBpdGNfb2Zmc2V0ID0gdmFsIC0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CiAJdW5zaWduZWQgbG9uZyB2aXR2ID0gVkNQVSh2Y3B1LCBpdHYpOwogCisJa3ZtID0gKHN0cnVjdCBrdm0gKilLVk1fVk1fQkFTRTsKKwogCWlmICh2Y3B1LT52Y3B1X2lkID09IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7CiAJCQl2ID0gKHN0cnVjdCBrdm1fdmNwdSAqKSgoY2hhciAqKXZjcHUgKwogCQkJCQlzaXplb2Yoc3RydWN0IGt2bV92Y3B1X2RhdGEpICogaSk7CiAJCQlWTVgodiwgaXRjX29mZnNldCkgPSBpdGNfb2Zmc2V0OwpAQCAtMTAzOSw4ICsxMDM4LDYgQEAKIAlyZXR1cm4ga2V5OwogfQogCi0KLQogdm9pZCBrdm1fdGhhc2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRoYXNoLCB2YWRyOwpAQCAtMTA1MCw3ICsxMDQ3LDYgQEAKIAl2Y3B1X3NldF9ncih2Y3B1LCBpbnN0Lk00Ni5yMSwgdGhhc2gsIDApOwogfQogCi0KIHZvaWQga3ZtX3R0YWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRhZywgdmFkcjsKQEAgLTExMzEsNyArMTEyNyw2IEBACiAJcmV0dXJuIElBNjRfTk9fRkFVTFQ7CiB9CiAKLQogaW50IGt2bV90cGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHIxLCByMzsKQEAgLTExNTQsNyArMTE0OSw2IEBACiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NNDYucjEsIHIxLCAwKTsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbnNlcnQvUHVyZ2UgdHJhbnNsYXRpb24gcmVnaXN0ZXIvY2FjaGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzg1LDcgKzEzNzksNiBAQAogCXZjcHVfc2V0X2l0Yyh2Y3B1LCByMik7CiB9CiAKLQogdm9pZCBrdm1fbW92X2Zyb21fYXJfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMTsKQEAgLTEzOTMsOCArMTM4Niw5IEBACiAJcjEgPSB2Y3B1X2dldF9pdGModmNwdSk7CiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NMzEucjEsIHIxLCAwKTsKIH0KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIHN0cnVjdCBrdm1fdmNwdSpwcm90ZWN0aW9uIGtleSByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMKKyAgc3RydWN0IGt2bV92Y3B1IHByb3RlY3Rpb24ga2V5IHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X3BrcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmVnKQpAQCAtMTQwNywyMCArMTQwMSw2IEBACiAJaWE2NF9zZXRfcGtyKHJlZywgdmFsKTsKIH0KIAotCi11bnNpZ25lZCBsb25nIHZjcHVfZ2V0X2l0aXJfb25fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGlmYSkKLXsKLQl1bmlvbiBpYTY0X3JyIHJyLCBycjE7Ci0KLQlyci52YWwgPSB2Y3B1X2dldF9ycih2Y3B1LCBpZmEpOwotCXJyMS52YWwgPSAwOwotCXJyMS5wcyA9IHJyLnBzOwotCXJyMS5yaWQgPSByci5yaWQ7Ci0JcmV0dXJuIChycjEudmFsKTsKLX0KLQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTW92ZXMgdG8gcHJpdmlsZWdlZCByZWdpc3RlcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0NjQsOCArMTQ0NCw2IEBACiAJcmV0dXJuIChJQTY0X05PX0ZBVUxUKTsKIH0KIAotCi0KIHZvaWQga3ZtX21vdl90b19ycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjMsIHIyOwpAQCAtMTUxMCw4ICsxNDg4LDYgQEAKIAl2Y3B1X3NldF9wa3IodmNwdSwgcjMsIHIyKTsKIH0KIAotCi0KIHZvaWQga3ZtX21vdl9mcm9tX3JyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMywgcjE7CkBAIC0xNTU3LDcgKzE1MzMsNiBAQAogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTQzLnIxLCByMSwgMCk7CiB9CiAKLQogdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmVnKQogewogCS8qIEZJWE1FOiBUaGlzIGNvdWxkIGdldCBjYWxsZWQgYXMgYSByZXN1bHQgb2YgYSByc3ZkLXJlZyBmYXVsdCAqLwpAQCAtMTYwOSw3ICsxNTg0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiB1bnNpZ25lZCBsb25nIGt2bV9tb3ZfZnJvbV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgdGd0ID0gaW5zdC5NMzMucjE7CkBAIC0xNjMzLDggKzE2MDcsNiBAQAogCXJldHVybiAwOwogfQogCi0KLQogdm9pZCB2Y3B1X3NldF9wc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIApAQCAtMTc3Niw5ICsxNzQ4LDYgQEAKIAl9CiB9CiAKLQotCi0KIHZvaWQgdmNwdV9yZmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgaWZzLCBwc3I7CkBAIC0xNzk2LDcgKzE3NjUsNiBAQAogCXJlZ3MtPmNyX2lpcCA9IFZDUFUodmNwdSwgaWlwKTsKIH0KIAotCiAvKgogICAgVlBTUiBjYW4ndCBrZWVwIHRyYWNrIG9mIGJlbG93IGJpdHMgb2YgZ3Vlc3QgUFNSCiAgICBUaGlzIGZ1bmN0aW9uIGdldHMgZ3Vlc3QgUFNSCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaCBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCmluZGV4IGIyZjEyYTUuLjA0MmFmOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdmNwdS5oCisrKyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCkBAIC03MDMsNyArNzAzLDcgQEAKIGV4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2VudHJpZXMoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgdmEsIHU2NCBwcyk7CiBleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9lbnRyaWVzX3JlbW90ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCB2YSwgdTY0IHBzKTsKIGV4dGVybiB1NjQgdHJhbnNsYXRlX3BoeV9wdGUodTY0ICpwdGUsIHU2NCBpdGlyLCB1NjQgdmEpOwotZXh0ZXJuIGludCB0aGFzaF9wdXJnZV9hbmRfaW5zZXJ0KHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHB0ZSwKK2V4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLAogCQl1NjQgaXRpciwgdTY0IGlmYSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgdGhhc2hfcHVyZ2VfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdik7CiBleHRlcm4gc3RydWN0IHRoYXNoX2RhdGEgKnZ0bGJfbG9va3VwKHN0cnVjdCBrdm1fdmNwdSAqdiwKQEAgLTczOCw3ICs3MzgsNyBAQAogdm9pZCB0aGFzaF9pbml0KHN0cnVjdCB0aGFzaF9jYiAqaGNiLCB1NjQgc3opOwogCiB2b2lkIHBhbmljX3ZtKHN0cnVjdCBrdm1fdmNwdSAqdiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotCit1NjQga3ZtX2dwYV90b19tcGEodTY0IGdwYSk7CiBleHRlcm4gdTY0IGlhNjRfY2FsbF92c2EodTY0IHByb2MsIHU2NCBhcmcxLCB1NjQgYXJnMiwgdTY0IGFyZzMsCiAJCXU2NCBhcmc0LCB1NjQgYXJnNSwgdTY0IGFyZzYsIHU2NCBhcmc3KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92dGxiLmMgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwppbmRleCA2YjYzMDdhLi4zODIzMmIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYworKysgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwpAQCAtMTY0LDExICsxNjQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHBzLCBncGFkZHI7CiAKIAlwcyA9IGl0aXJfcHMoaXRpcik7Ci0KLQlncGFkZHIgPSAoKGdwdGUgJiBfUEFHRV9QUE5fTUFTSykgPj4gcHMgPDwgcHMpIHwKLQkJKGlmYSAmICgoMVVMIDw8IHBzKSAtIDEpKTsKLQogCXJyLnZhbCA9IGlhNjRfZ2V0X3JyKGlmYSk7CisKKwkgZ3BhZGRyID0gKChncHRlICYgX1BBR0VfUFBOX01BU0spID4+IHBzIDw8IHBzKSB8CisJCQkJCShpZmEgJiAoKDFVTCA8PCBwcykgLSAxKSk7CisKIAloZWFkID0gKHN0cnVjdCB0aGFzaF9kYXRhICopaWE2NF90aGFzaChpZmEpOwogCWhlYWQtPmV0YWcgPSBJTlZBTElEX1RJX1RBRzsKIAlpYTY0X21mKCk7CkBAIC00MTIsMTYgKzQxMiwxNCBAQAogCiAvKgogICogUHVyZ2Ugb3ZlcmxhcCBUQ3MgYW5kIHRoZW4gaW5zZXJ0IHRoZSBuZXcgZW50cnkgdG8gZW11bGF0ZSBpdGMgb3BzLgotICogICAgTm90ZXM6IE9ubHkgVEMgZW50cnkgY2FuIHB1cmdlIGFuZCBpbnNlcnQuCi0gKiAgICAxIGluZGljYXRlcyB0aGlzIGlzIE1NSU8KKyAqIE5vdGVzOiBPbmx5IFRDIGVudHJ5IGNhbiBwdXJnZSBhbmQgaW5zZXJ0LgogICovCi1pbnQgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsIHU2NCBpdGlyLAordm9pZCAgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsIHU2NCBpdGlyLAogCQkJCQkJdTY0IGlmYSwgaW50IHR5cGUpCiB7CiAJdTY0IHBzOwogCXU2NCBwaHlfcHRlLCBpb19tYXNrLCBpbmRleDsKIAl1bmlvbiBpYTY0X3JyIHZyciwgbXJyOwotCWludCByZXQgPSAwOwogCiAJcHMgPSBpdGlyX3BzKGl0aXIpOwogCXZyci52YWwgPSB2Y3B1X2dldF9ycih2LCBpZmEpOwpAQCAtNDQxLDI1ICs0MzksMTkgQEAKIAkJcGh5X3B0ZSAmPSB+X1BBR0VfTUFfTUFTSzsKIAl9CiAKLQlpZiAocHRlICYgVlRMQl9QVEVfSU8pCi0JCXJldCA9IDE7Ci0KIAl2dGxiX3B1cmdlKHYsIGlmYSwgcHMpOwogCXZocHRfcHVyZ2UodiwgaWZhLCBwcyk7CiAKLQlpZiAocHMgPT0gbXJyLnBzKSB7Ci0JCWlmICghKHB0ZSZWVExCX1BURV9JTykpIHsKLQkJCXZocHRfaW5zZXJ0KHBoeV9wdGUsIGl0aXIsIGlmYSwgcHRlKTsKLQkJfSBlbHNlIHsKLQkJCXZ0bGJfaW5zZXJ0KHYsIHB0ZSwgaXRpciwgaWZhKTsKLQkJCXZjcHVfcXVpY2tfcmVnaW9uX3NldChWTVgodiwgdGNfcmVnaW9ucyksIGlmYSk7Ci0JCX0KLQl9IGVsc2UgaWYgKHBzID4gbXJyLnBzKSB7CisJaWYgKChwcyAhPSBtcnIucHMpIHx8IChwdGUgJiBWVExCX1BURV9JTykpIHsKIAkJdnRsYl9pbnNlcnQodiwgcHRlLCBpdGlyLCBpZmEpOwogCQl2Y3B1X3F1aWNrX3JlZ2lvbl9zZXQoVk1YKHYsIHRjX3JlZ2lvbnMpLCBpZmEpOwotCQlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKQotCQkJdmhwdF9pbnNlcnQocGh5X3B0ZSwgaXRpciwgaWZhLCBwdGUpOwotCX0gZWxzZSB7CisJfQorCWlmIChwdGUgJiBWVExCX1BURV9JTykKKwkJcmV0dXJuOworCisJaWYgKHBzID49IG1yci5wcykKKwkJdmhwdF9pbnNlcnQocGh5X3B0ZSwgaXRpciwgaWZhLCBwdGUpOworCWVsc2UgewogCQl1NjQgcHNyOwogCQlwaHlfcHRlICAmPSB+UEFHRV9GTEFHU19SVl9NQVNLOwogCQlwc3IgPSBpYTY0X2NsZWFyX2ljKCk7CkBAIC00NjksNyArNDYxLDYgQEAKIAlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKQogCQltYXJrX3BhZ2VzX2RpcnR5KHYsIHB0ZSwgcHMpOwogCi0JcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTUwOSw3ICs1MDAsNiBAQAogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAotCiAvKgogICogTG9va3VwIHRoZSBoYXNoIHRhYmxlIGFuZCBpdHMgY29sbGlzaW9uIGNoYWluIHRvIGZpbmQgYW4gZW50cnkKICAqIGNvdmVyaW5nIHRoaXMgYWRkcmVzcyByaWQ6dmEgb3IgdGhlIGVudHJ5LgpAQCAtNTE3LDcgKzUwNyw2IEBACiAgKiBJTlBVVDoKICAqICBpbjogVExCIGZvcm1hdCBmb3IgYm90aCBWSFBUICYgVExCLgogICovCi0KIHN0cnVjdCB0aGFzaF9kYXRhICp2dGxiX2xvb2t1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCB2YSwgaW50IGlzX2RhdGEpCiB7CiAJc3RydWN0IHRoYXNoX2RhdGEgICpjY2g7CkBAIC01NDcsNyArNTM2LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotCiAvKgogICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBjb250cm9sIGRhdGEgYmVmb3JlIHNlcnZpY2UuCiAgKi8KQEAgLTU3Myw2ICs1NjEsMTAgQEAKIHU2NCBrdm1fZ2V0X21wdF9lbnRyeSh1NjQgZ3BmbikKIHsKIAl1NjQgKmJhc2UgPSAodTY0ICopIEtWTV9QMk1fQkFTRTsKKworCWlmIChncGZuID49IChLVk1fUDJNX1NJWkUgPj4gMykpCisJCXBhbmljX3ZtKGN1cnJlbnRfdmNwdSwgIkludmFsaWQgZ3BmbiA9JWx4XG4iLCBncGZuKTsKKwogCXJldHVybiAqKGJhc2UgKyBncGZuKTsKIH0KIApAQCAtNTg5LDcgKzU4MSw2IEBACiAJcmV0dXJuIChwdGUgPj4gUEFHRV9TSElGVCA8PCBQQUdFX1NISUZUKSB8IChncGEgJiB+UEFHRV9NQVNLKTsKIH0KIAotCiAvKgogICogRmV0Y2ggZ3Vlc3QgYnVuZGxlIGNvZGUuCiAgKiBJTlBVVDoKQEAgLTYzMSw3ICs2MjIsNiBAQAogCXJldHVybiBJQTY0X05PX0ZBVUxUOwogfQogCi0KIHZvaWQga3ZtX2luaXRfdmhwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiB7CiAJdi0+YXJjaC52aHB0Lm51bSA9IFZIUFRfTlVNX0VOVFJJRVM7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lycS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwppbmRleCAyYWVhZTQ2Li44ZGZkMzFlIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL01ha2VmaWxlIGIvYXJjaC9tNjhrL01ha2VmaWxlCmluZGV4IDgxMzNkYmMuLjU3MGQ4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9NYWtlZmlsZQorKysgYi9hcmNoL202OGsvTWFrZWZpbGUKQEAgLTExNywzICsxMTcsNiBAQAogCiBhcmNoY2xlYW46CiAJcm0gLWYgdm1saW51eC5neiB2bWxpbnV4LmJ6MgorCitpbnN0YWxsOgorCXNoICQoc3JjdHJlZSkvYXJjaC9tNjhrL2luc3RhbGwuc2ggJChLRVJORUxSRUxFQVNFKSB2bWxpbnV4Lmd6IFN5c3RlbS5tYXAgIiQoSU5TVEFMTF9QQVRIKSIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pcnFfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pcnFfbW0uaAppbmRleCAyMjZiZmMwLi4wY2FiNDJjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCiAvKgpAQCAtODAsNyArODEsNyBAQAogICogaW50ZXJydXB0IHNvdXJjZSAoaWYgaXQgc3VwcG9ydHMgY2hhaW5pbmcpLgogICovCiB0eXBlZGVmIHN0cnVjdCBpcnFfbm9kZSB7Ci0JaW50CQkoKmhhbmRsZXIpKGludCwgdm9pZCAqKTsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqKTsKIAl2b2lkCQkqZGV2X2lkOwogCXN0cnVjdCBpcnFfbm9kZSAqbmV4dDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCmluZGV4IDA1MzA5ZjcuLjUwZGIzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKQEAgLTM0LDYgKzM0LDcgQEAKIAljaGFyIHNjY190eXBlOwogCWNoYXIgZXRoZXJfdHlwZTsKIAljaGFyIG51YnVzX3R5cGU7CisJY2hhciBmbG9wcHlfdHlwZTsKIH07CiAKICNkZWZpbmUgTUFDX0FEQl9OT05FCQkwCkBAIC03MSw2ICs3MiwxMiBAQAogI2RlZmluZSBNQUNfTk9fTlVCVVMJCTAKICNkZWZpbmUgTUFDX05VQlVTCQkxCiAKKyNkZWZpbmUgTUFDX0ZMT1BQWV9JV00JCTAKKyNkZWZpbmUgTUFDX0ZMT1BQWV9TV0lNX0FERFIxCTEKKyNkZWZpbmUgTUFDX0ZMT1BQWV9TV0lNX0FERFIyCTIKKyNkZWZpbmUgTUFDX0ZMT1BQWV9TV0lNX0lPUAkzCisjZGVmaW5lIE1BQ19GTE9QUFlfQVYJCTQKKwogLyoKICAqCUdlc3RhbHQgbnVtYmVycwogICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZGJjNjRlOS4uY2E4N2Y5MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbnN0YWxsLnNoIGIvYXJjaC9tNjhrL2luc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2YmFlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pbnN0YWxsLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIENvcHlyaWdodCAoQykgMTk5NSBieSBMaW51cyBUb3J2YWxkcworIworIyBBZGFwdGVkIGZyb20gY29kZSBpbiBhcmNoL2kzODYvYm9vdC9NYWtlZmlsZSBieSBILiBQZXRlciBBbnZpbgorIworIyAibWFrZSBpbnN0YWxsIiBzY3JpcHQgZm9yIG02OGsgYXJjaGl0ZWN0dXJlCisjCisjIEFyZ3VtZW50czoKKyMgICAkMSAtIGtlcm5lbCB2ZXJzaW9uCisjICAgJDIgLSBrZXJuZWwgaW1hZ2UgZmlsZQorIyAgICQzIC0ga2VybmVsIG1hcCBmaWxlCisjICAgJDQgLSBkZWZhdWx0IGluc3RhbGwgcGF0aCAoYmxhbmsgaWYgcm9vdCBkaXJlY3RvcnkpCisjCisKK3ZlcmlmeSAoKSB7CisJaWYgWyAhIC1mICIkMSIgXTsgdGhlbgorCQllY2hvICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQllY2hvICIgKioqIE1pc3NpbmcgZmlsZTogJDEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQllY2hvICcgKioqIFlvdSBuZWVkIHRvIHJ1biAibWFrZSIgYmVmb3JlICJtYWtlIGluc3RhbGwiLicgMT4mMgorCQllY2hvICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQlleGl0IDEKKwlmaQorfQorCisjIE1ha2Ugc3VyZSB0aGUgZmlsZXMgYWN0dWFsbHkgZXhpc3QKK3ZlcmlmeSAiJDIiCit2ZXJpZnkgIiQzIgorCisjIFVzZXIgbWF5IGhhdmUgYSBjdXN0b20gaW5zdGFsbCBzY3JpcHQKKworaWYgWyAteCB+L2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCBdOyB0aGVuIGV4ZWMgfi9iaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgIiRAIjsgZmkKK2lmIFsgLXggL3NiaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgXTsgdGhlbiBleGVjIC9zYmluLyR7Q1JPU1NfQ09NUElMRX1pbnN0YWxsa2VybmVsICIkQCI7IGZpCisKKyMgRGVmYXVsdCBpbnN0YWxsIC0gc2FtZSBhcyBtYWtlIHpsaWxvCisKK2lmIFsgLWYgJDQvdm1saW51eiBdOyB0aGVuCisJbXYgJDQvdm1saW51eiAkNC92bWxpbnV6Lm9sZAorZmkKKworaWYgWyAtZiAkNC9TeXN0ZW0ubWFwIF07IHRoZW4KKwltdiAkNC9TeXN0ZW0ubWFwICQ0L1N5c3RlbS5vbGQKK2ZpCisKK2NhdCAkMiA+ICQ0L3ZtbGludXoKK2NwICQzICQ0L1N5c3RlbS5tYXAKKworc3luYwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKaW5kZXggOThiNmJjZi4uYmUwMTc5OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuYworKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC0yMiw2ICsyMiw3IEBACiAvKiBrZXliICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2RlZmluZSBCT09USU5GT19DT01QQVRfMV8wCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00Myw2ICs0NCwxMCBAQAogI2luY2x1ZGUgPGFzbS9tYWNfb3NzLmg+CiAjaW5jbHVkZSA8YXNtL21hY19wc2MuaD4KIAorLyogcGxhdGZvcm0gZGV2aWNlIGluZm8gKi8KKworI2RlZmluZSBTV0lNX0lPX1NJWkUgMHgyMDAwCS8qIFNXSU0gSU8gcmVzb3VyY2Ugc2l6ZSAqLworCiAvKiBNYWMgYm9vdGluZm8gc3RydWN0ICovCiAKIHN0cnVjdCBtYWNfYm9vdGVyX2RhdGEgbWFjX2JpX2RhdGE7CkBAIC0yMjQsNyArMjI5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNCiAJfSwKIAogCS8qCkBAIC0yMzksNyArMjQ1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJWCwKIAkJLm5hbWUJCT0gIklJeCIsCkBAIC0yNDcsNyArMjU0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUNYLAogCQkubmFtZQkJPSAiSUljeCIsCkBAIC0yNTUsNyArMjYzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9TRTMwLAogCQkubmFtZQkJPSAiU0UvMzAiLApAQCAtMjYzLDcgKzI3Miw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTI4MCw3ICsyOTAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlGWCwKIAkJLm5hbWUJCT0gIklJZngiLApAQCAtMjg4LDcgKzI5OSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJU0ksCiAJCS5uYW1lCQk9ICJJSXNpIiwKQEAgLTI5Niw3ICszMDgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWSSwKIAkJLm5hbWUJCT0gIklJdmkiLApAQCAtMzA0LDcgKzMxNyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZYLAogCQkubmFtZQkJPSAiSUl2eCIsCkBAIC0zMTIsNyArMzI2LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC0zMjYsNyArMzQxLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0NDTCwKIAkJLm5hbWUJCT0gIkNvbG9yIENsYXNzaWMiLApAQCAtMzM0LDcgKzM1MCw5IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVN9LAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJfSwKIAogCS8qCiAJICoJU29tZSBNYWMgTEMgbWFjaGluZXMuIEJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgSUljaSwgQURCIGxpa2UgSUlzaQpAQCAtMzQ3LDcgKzM2NSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJLAogCQkubmFtZQkJPSAiTEMgSUkiLApAQCAtMzU1LDcgKzM3NCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJSSwKIAkJLm5hbWUJCT0gIkxDIElJSSIsCkBAIC0zNjMsNyArMzgzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC0zODMsNyArNDA0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MDVfQUNDLAogCQkubmFtZQkJPSAiUXVhZHJhIDYwNSIsCkBAIC0zOTEsNyArNDEzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjEwIiwKQEAgLTQwMCw3ICs0MjMsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYzMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MzAiLApAQCAtNDEwLDcgKzQzNCw4IEBACiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTY1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2NTAiLApAQCAtNDE5LDcgKzQ0NCw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sCiAJLyoJVGhlIFE3MDAgZG9lcyBoYXZlIGEgTlMgU29uaWMgKi8KIAl7CkBAIC00MzAsNyArNDU2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RODAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDgwMCIsCkBAIC00MzksNyArNDY2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4NDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODQwQVYiLApAQCAtNDQ4LDcgKzQ3Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEzLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1BTQywKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfTUFDRSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfQVYKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTkwMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA5MDAiLApAQCAtNDU3LDcgKzQ4Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5NTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgOTUwIiwKQEAgLTQ2Niw3ICs0OTYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAogCX0sCiAKIAkvKgpAQCAtNDgwLDcgKzUxMSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1LAogCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCkBAIC00ODgsNyArNTIwLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NUYsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKQEAgLTQ5Niw3ICs1MjksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTIwLAogCQkubmFtZQkJPSAgIlBlcmZvcm1hIDUyMCIsCkBAIC01MDQsNyArNTM4LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NTAsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTUwIiwKQEAgLTUxMiw3ICs1NDcsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCS8qIFRoZXNlIGhhdmUgdGhlIGNvbW0gc2xvdCwgYW5kIHRoZXJlZm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgU09OSUMgZXRoZXJuZXQgKi8KIAl7CkBAIC01MjMsNyArNTU5LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU4OCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDU4OCIsCkBAIC01MzMsNyArNTcwLDggQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1RWLAogCQkubmFtZQkJPSAiVFYiLApAQCAtNTQxLDcgKzU3OSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A2MDAsCiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA2MDAiLApAQCAtNTQ5LDcgKzU4OCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtNTY1LDcgKzYwNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjUwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2NTAiLApAQCAtNTc0LDcgKzYxNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjYwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2NjBBViIsCkBAIC01ODMsNyArNjI1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgogCX0sCiAKIAkvKgpAQCAtNTk5LDcgKzY0Miw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE0NSwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNDUiLApAQCAtNjA3LDcgKzY1MSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE1MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNTAiLApAQCAtNjE2LDcgKzY2MSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfUEIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTYwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2MCIsCkBAIC02MjQsNyArNjcwLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTY1LAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NSIsCkBAIC02MzIsNyArNjc5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTY1QywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjVjIiwKQEAgLTY0MCw3ICs2ODgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNzAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTcwIiwKQEAgLTY0OCw3ICs2OTcsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxODAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwIiwKQEAgLTY1Niw3ICs3MDYsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MGMiLApAQCAtNjY0LDcgKzcxNSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE5MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxOTAiLApAQCAtNjczLDcgKzcyNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfQkFCT09OLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjUyMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayA1MjAiLApAQCAtNjgyLDcgKzczNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtNzAyLDcgKzc1Niw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyMzAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDIzMCIsCkBAIC03MTAsNyArNzY1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI1MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjUwIiwKQEAgLTcxOCw3ICs3NzQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjcwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjcwYyIsCkBAIC03MjYsNyArNzgzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwIiwKQEAgLTczNCw3ICs3OTIsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwYyIsCkBAIC03NDIsNyArODAxLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtODE1LDMgKzg3NSw0MiBAQAogCXN0cmNweShzdHIsICJNYWNpbnRvc2ggIik7CiAJc3RyY2F0KHN0ciwgbWFjaW50b3NoX2NvbmZpZy0+bmFtZSk7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3dpbV9yZXNvdXJjZXNbMV07CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN3aW1fZGV2aWNlID0geworCS5uYW1lCQk9ICJzd2ltIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHN3aW1fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzd2ltX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYWNfcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnN3aW1fZGV2aWNlCit9OworCitpbnQgX19pbml0IG1hY19wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJdTggKnN3aW1fYmFzZTsKKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+ZmxvcHB5X3R5cGUpIHsKKwljYXNlIE1BQ19GTE9QUFlfU1dJTV9BRERSMToKKwkJc3dpbV9iYXNlID0gKHU4ICopKFZJQTFfQkFTRSArIDB4MUUwMDApOworCQlicmVhazsKKwljYXNlIE1BQ19GTE9QUFlfU1dJTV9BRERSMjoKKwkJc3dpbV9iYXNlID0gKHU4ICopKFZJQTFfQkFTRSArIDB4MTYwMDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlzd2ltX3Jlc291cmNlc1swXS5uYW1lID0gInN3aW0tcmVncyI7CisJc3dpbV9yZXNvdXJjZXNbMF0uc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KXN3aW1fYmFzZTsKKwlzd2ltX3Jlc291cmNlc1swXS5lbmQgPSAocmVzb3VyY2Vfc2l6ZV90KShzd2ltX2Jhc2UgKyBTV0lNX0lPX1NJWkUpOworCXN3aW1fcmVzb3VyY2VzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMobWFjX3BsYXRmb3JtX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUobWFjX3BsYXRmb3JtX2RldmljZXMpKTsKK30KKworYXJjaF9pbml0Y2FsbChtYWNfcGxhdGZvcm1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3ZpYS5jIGIvYXJjaC9tNjhrL21hYy92aWEuYwppbmRleCA3ZDk3YmE1Li4xMWJjZTNjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL3ZpYS5jCisrKyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKQEAgLTY0NSwzICs2NDUsMTIgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgdmlhMV9zZXRfaGVhZChpbnQgaGVhZCkKK3sKKwlpZiAoaGVhZCA9PSAwKQorCQl2aWExW3ZCdWZBXSAmPSB+VklBMUFfdkhlYWRTZWw7CisJZWxzZQorCQl2aWExW3ZCdWZBXSB8PSBWSUExQV92SGVhZFNlbDsKK30KK0VYUE9SVF9TWU1CT0wodmlhMV9zZXRfaGVhZCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYwppbmRleCAwNmQ4ODdjLi44NTVmYzZhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMKQEAgLTQ5LDggKzQ5LDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyMHhfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyMHhfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgzMDAwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MzAwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAzNiwKKwkJLmVuZAkJPSA2NCArIDM2LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDQwLAorCQkuZW5kCQk9IDY0ICsgNDAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDIsCisJCS5lbmQJCT0gNjQgKyA0MiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTIweF9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01MjB4X2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTIweF9mZWNfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01MjB4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTIweF91YXJ0LAorCSZtNTIweF9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTAzLDYgKzEzNCwzMCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyMHhfZmVjX2luaXQodm9pZCkKK3sKKwl1MzIgaW1yOworCXU4IHY7CisKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMHg0LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMzYpOworCXdyaXRlYigweDQsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyA0MCk7CisJd3JpdGViKDB4NCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDQyKTsKKworCWltciA9IHJlYWRsKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCWltciAmPSB+MHgwMDAxRkZGMDsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKworCS8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIHRvIGV0aGVybmV0IG1vZGUgKi8KKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUMpOworCXdyaXRlYih2IHwgMHhmMCwgTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUMpOworCisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDSTJDKTsKKwl3cml0ZWIodiB8IDB4MGYsIE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDSTJDKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogLyoKICAqICBQcm9ncmFtIHRoZSB2ZWN0b3IgdG8gYmUgYW4gYXV0by12ZWN0b3JlZC4KICAqLwpAQCAtMTE4LDYgKzE3Myw3IEBACiB7CiAJbWFjaF9yZXNldCA9IGNvbGRmaXJlX3Jlc2V0OwogCW01MjB4X3VhcnRzX2luaXQoKTsKKwltNTIweF9mZWNfaW5pdCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKaW5kZXggMTNmMDI2MS4uNzQxMzNmMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCkBAIC01MCw4ICs1MCwzOSBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MjN4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MjN4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDIzLAorCQkuZW5kCQk9IDY0ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjcsCisJCS5lbmQJCT0gNjQgKyAyNywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyOSwKKwkJLmVuZAkJPSA2NCArIDI5LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjN4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyM3hfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjN4X2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyM3hfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjN4X3VhcnQsCisJJm01MjN4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04Myw2ICsxMTQsMjUgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01MjN4X2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlYigweDI4LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjMpOworCXdyaXRlYigweDI3LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjcpOworCXdyaXRlYigweDI2LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjkpOworCisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weGY7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7CisJaW1yICY9IH4weGZmODAwMDAxOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB2b2lkIG1jZl9kaXNhYmxlYWxsKHZvaWQpCiB7CiAJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCkpID0gMHhmZmZmZmZmZjsKQEAgLTEwMyw2ICsxNTMsNyBAQAogCW1jZl9kaXNhYmxlYWxsKCk7CiAJbWFjaF9yZXNldCA9IGNvbGRmaXJlX3Jlc2V0OwogCW01MjN4X3VhcnRzX2luaXQoKTsKKwltNTIzeF9mZWNfaW5pdCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMKaW5kZXggMjMwYmFlNi4uZTA0OTI0NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jCkBAIC01NSw4ICs1NSwzOSBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MjcyX3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MjcyX2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4ODQwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHg4NDAgKyAweDFjZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gODYsCisJCS5lbmQJCT0gODYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDg3LAorCQkuZW5kCQk9IDg3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA4OCwKKwkJLmVuZAkJPSA4OCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI3Ml9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01MjcyX2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTI3Ml9mZWNfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01MjcyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTI3Ml91YXJ0LAorCSZtNTI3Ml9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTEsNiArMTIyLDIyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTI3Ml9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwlpbXIgPSByZWFkbChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IzKTsKKwlpbXIgPSAoaW1yICYgfjB4MDAwMDBmZmYpIHwgMHgwMDAwMGRkZDsKKwl3cml0ZWwoaW1yLCBNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IzKTsKKworCWltciA9IHJlYWRsKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOworCWltciA9IChpbXIgJiB+MHgwZjAwMDAwMCkgfCAweDBkMDAwMDAwOworCXdyaXRlbChpbXIsIE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB2b2lkIG1jZl9kaXNhYmxlYWxsKHZvaWQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqaWNycDsKQEAgLTE1NSw2ICsyMDIsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9CU1Aodm9pZCkKIHsKIAltNTI3Ml91YXJ0c19pbml0KCk7CisJbTUyNzJfZmVjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTI3Ml9kZXZpY2VzLCBBUlJBWV9TSVpFKG01MjcyX2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCmluZGV4IDczY2QxYWUuLjQ5MzQzZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYwpAQCAtNTAsOCArNTAsNzMgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTI3eF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTI3eF9mZWMwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjMsCisJCS5lbmQJCT0gNjQgKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyNywKKwkJLmVuZAkJPSA2NCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI5LAorCQkuZW5kCQk9IDY0ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTI3eF9mZWMxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxODAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxODAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDEyOCArIDIzLAorCQkuZW5kCQk9IDEyOCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSAxMjggKyAyNywKKwkJLmVuZAkJPSAxMjggKyAyNywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gMTI4ICsgMjksCisJCS5lbmQJCT0gMTI4ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyN3hfZmVjW10gPSB7CisJeworCQkubmFtZQkJPSAiZmVjIiwKKwkJLmlkCQk9IDAsCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtNTI3eF9mZWMwX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IG01Mjd4X2ZlYzBfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZQkJPSAiZmVjIiwKKwkJLmlkCQk9IDEsCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtNTI3eF9mZWMxX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IG01Mjd4X2ZlYzFfcmVzb3VyY2VzLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyN3hfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01Mjd4X3VhcnQsCisJJm01Mjd4X2ZlY1swXSwKKyNpZmRlZiBDT05GSUdfRkVDMgorCSZtNTI3eF9mZWNbMV0sCisjZW5kaWYKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05Nyw2ICsxNjIsNTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01Mjd4X2ZlY19pcnFfaW5pdChpbnQgbnIpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXUzMiBpbXI7CisKKwliYXNlID0gTUNGX0lQU0JBUiArIChuciA/IE1DRklDTV9JTlRDMSA6IE1DRklDTV9JTlRDMCk7CisKKwl3cml0ZWIoMHgyOCwgYmFzZSArIE1DRklOVENfSUNSMCArIDIzKTsKKwl3cml0ZWIoMHgyNywgYmFzZSArIE1DRklOVENfSUNSMCArIDI3KTsKKwl3cml0ZWIoMHgyNiwgYmFzZSArIE1DRklOVENfSUNSMCArIDI5KTsKKworCWltciA9IHJlYWRsKGJhc2UgKyBNQ0ZJTlRDX0lNUkgpOworCWltciAmPSB+MHhmOworCXdyaXRlbChpbXIsIGJhc2UgKyBNQ0ZJTlRDX0lNUkgpOworCWltciA9IHJlYWRsKGJhc2UgKyBNQ0ZJTlRDX0lNUkwpOworCWltciAmPSB+MHhmZjgwMDAwMTsKKwl3cml0ZWwoaW1yLCBiYXNlICsgTUNGSU5UQ19JTVJMKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG01Mjd4X2ZlY19pbml0KHZvaWQpCit7CisJdTE2IHBhcjsKKwl1OCB2OworCisJbTUyN3hfZmVjX2lycV9pbml0KDApOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMCAqLworCXBhciA9IHJlYWR3KE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJd3JpdGV3KHBhciB8IDB4ZjAwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwODIpOworCXYgPSByZWFkYihNQ0ZfSVBTQkFSICsgMHgxMDAwNzgpOworCXdyaXRlYih2IHwgMHhjMCwgTUNGX0lQU0JBUiArIDB4MTAwMDc4KTsKKworI2lmZGVmIENPTkZJR19GRUMyCisJbTUyN3hfZmVjX2lycV9pbml0KDEpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMSAqLworCXBhciA9IHJlYWR3KE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJd3JpdGV3KHBhciB8IDB4YTAsIE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyAweDEwMDA3OSk7CisJd3JpdGViKHYgfCAweGMwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNzkpOworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMTE2LDEzICsyMjYsMTQgQEAKIHsKIAltY2ZfZGlzYWJsZWFsbCgpOwogCW1hY2hfcmVzZXQgPSBjb2xkZmlyZV9yZXNldDsKKwltNTI3eF91YXJ0c19pbml0KCk7CisJbTUyN3hfZmVjX2luaXQoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9CU1Aodm9pZCkKIHsKLQltNTI3eF91YXJ0c19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobTUyN3hfZGV2aWNlcywgQVJSQVlfU0laRShtNTI3eF9kZXZpY2VzKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI4eC9jb25maWcuYwppbmRleCA0NGJhZWIyLi5iZWU1MjZmIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKQEAgLTU3LDggKzU3LDQwIEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyOHhfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyOHhfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjMsCisJCS5lbmQJCT0gNjQgKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyNywKKwkJLmVuZAkJPSA2NCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI5LAorCQkuZW5kCQk9IDY0ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyOHhfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTI4eF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUyOHhfZmVjX3Jlc291cmNlcywKK307CisKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01Mjh4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTI4eF91YXJ0LAorCSZtNTI4eF9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTksNiArMTMxLDMxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTI4eF9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisJdTE2IHYxNjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlYigweDI4LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjMpOworCXdyaXRlYigweDI3LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjcpOworCXdyaXRlYigweDI2LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjkpOworCisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weGY7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7CisJaW1yICY9IH4weGZmODAwMDAxOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkwpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMCAqLworCXYxNiA9IHJlYWR3KE1DRl9JUFNCQVIgKyAweDEwMDA1Nik7CisJd3JpdGV3KHYxNiB8IDB4ZjAwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNTYpOworCXdyaXRlYigweGMwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNTgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB2b2lkIG1jZl9kaXNhYmxlYWxsKHZvaWQpCiB7CiAJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCkpID0gMHhmZmZmZmZmZjsKQEAgLTE1OCw2ICsyMTUsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9CU1Aodm9pZCkKIHsKIAltNTI4eF91YXJ0c19pbml0KCk7CisJbTUyOHhfZmVjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTI4eF9kZXZpY2VzLCBBUlJBWV9TSVpFKG01Mjh4X2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzJ4L2NvbmZpZy5jCmluZGV4IGEzNDc2MjMuLjU5MWYyZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYwpAQCAtNjEsOCArNjEsMzggQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTMyeF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTMyeF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gMHhmYzAzMDAwMCwKKwkJLmVuZAkJPSAweGZjMDMwN2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDM2LAorCQkuZW5kCQk9IDY0ICsgMzYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDAsCisJCS5lbmQJCT0gNjQgKyA0MCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MiwKKwkJLmVuZAkJPSA2NCArIDQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MzJ4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUzMnhfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MzJ4X2ZlY19yZXNvdXJjZXMsCit9Owogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01MzJ4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTMyeF91YXJ0LAorCSZtNTMyeF9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTMsNiArMTIzLDI0IEBACiAJZm9yIChsaW5lID0gMDsgKGxpbmUgPCBucmxpbmVzKTsgbGluZSsrKQogCQltNTMyeF91YXJ0X2luaXRfbGluZShsaW5lLCBtNTMyeF91YXJ0X3BsYXRmb3JtW2xpbmVdLmlycSk7CiB9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfX2luaXQgbTUzMnhfZmVjX2luaXQodm9pZCkKK3sKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwlNQ0ZfSU5UQzBfSUNSMzYgPSAweDI7CisJTUNGX0lOVEMwX0lDUjQwID0gMHgyOworCU1DRl9JTlRDMF9JQ1I0MiA9IDB4MjsKKworCU1DRl9JTlRDMF9JTVJIICY9IH4oTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM2IHwKKwkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQwIHwgTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQyKTsKKworCS8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIHRvIGV0aGVybmV0IG1vZGUgZm9yIGZlYzAgKi8KKwlNQ0ZfR1BJT19QQVJfRkVDSTJDIHw9IChNQ0ZfR1BJT19QQVJfRkVDSTJDX1BBUl9NRENfRU1EQyB8CisJCU1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01ESU9fRU1ESU8pOworCU1DRl9HUElPX1BBUl9GRUMgPSAoTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDXzdXX0ZFQyB8CisJCU1DRl9HUElPX1BBUl9GRUNfUEFSX0ZFQ19NSUlfRkVDKTsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTUwLDYgKzE5OCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01MzJ4X3VhcnRzX2luaXQoKTsKKwltNTMyeF9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01MzJ4X2RldmljZXMsIEFSUkFZX1NJWkUobTUzMnhfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYwppbmRleCBhMWUzNTI2Li5kZmJmZDdlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYworKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYwpAQCAtMzMsOCArMzMsOCBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmlvZGV2X2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKik7Ci1zdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitzdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgaW9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBzdGF0aWMgaW50IGlvZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIHNzaXplX3QgaW9kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QgcywgbG9mZl90ICopOwpAQCAtNjUsMTMgKzY1LDEzIEBACiAJLmZvcHMJCT0gJmZvcHMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpb2Rldl9kcml2ZXIgPQotewotCS5uYW1lCQk9IChjaGFyICopIGlvZGV2X25hbWUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW9kZXZfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IGlvZGV2X25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBpb2Rldl9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKGlvZGV2X3JlbW92ZSkKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlvZGV2X3JlbW92ZSksCiB9OwogCiAKQEAgLTg5LDExICs4OSwxMCBAQAogCiAKIC8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19pbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkdiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqIGNvbnN0IHJpID0KLQkJaW9kZXZfZ2V0X3Jlc291cmNlKHBkdiwgSU9ERVZfUkVTT1VSQ0VfSVJRLCBJT1JFU09VUkNFX0lSUSk7CisJCWlvZGV2X2dldF9yZXNvdXJjZShkZXYsIElPREVWX1JFU09VUkNFX0lSUSwgSU9SRVNPVVJDRV9JUlEpOwogCiAJaWYgKHVubGlrZWx5KCFyaSkpCiAJCXJldHVybiAtRU5YSU87CkBAIC0xMDQsNyArMTAzLDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBtaXNjX2RlcmVnaXN0ZXIoJm1pc2NkZXYpOwogfQpAQCAtMTYwLDE0ICsxNTksMTQgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW9kZXZfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7CiB9CiAKIAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaW9kZXZfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW9kZXZfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAppbmRleCAwNDE3NTE2Li41MjZmMzI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaApAQCAtMTM5MSwxMSArMTM5MSwxMSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKIHNldF9jMF8jI25hbWUodW5zaWduZWQgaW50IHNldCkJCQkJCVwKIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCByZXMsIG5ldzsJCQkJCVwKIAkJCQkJCQkJXAogCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCi0JcmVzIHw9IHNldDsJCQkJCQlcCi0Jd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJbmV3ID0gcmVzIHwgc2V0OwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShuZXcpOwkJCQkJXAogCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CQkJCQkJCQlcCkBAIC0xNDAzLDI0ICsxNDAzLDI0IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAogY2xlYXJfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjbGVhcikJCQkJXAogewkJCQkJCQkJXAotCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IHJlcywgbmV3OwkJCQkJXAogCQkJCQkJCQlcCiAJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKLQlyZXMgJj0gfmNsZWFyOwkJCQkJCVwKLQl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwluZXcgPSByZXMgJiB+Y2xlYXI7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKG5ldyk7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXR1cm4gcmVzOwkJCQkJCVwKIH0JCQkJCQkJCVwKIAkJCQkJCQkJXAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKLWNoYW5nZV9jMF8jI25hbWUodW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWduZWQgaW50IG5ldykJCVwKK2NoYW5nZV9jMF8jI25hbWUodW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWduZWQgaW50IHZhbCkJCVwKIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCByZXMsIG5ldzsJCQkJCVwKIAkJCQkJCQkJXAogCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCi0JcmVzICY9IH5jaGFuZ2U7CQkJCQkJXAotCXJlcyB8PSAobmV3ICYgY2hhbmdlKTsJCQkJCVwKLQl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwluZXcgPSByZXMgJiB+Y2hhbmdlOwkJCQkJXAorCW5ldyB8PSAodmFsICYgY2hhbmdlKTsJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUobmV3KTsJCQkJCVwKIAkJCQkJCQkJXAogCXJldHVybiByZXM7CQkJCQkJXAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKaW5kZXggOWNlMDYwNy4uOWU4OWNmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCkBAIC05LDYgKzksNyBAQAogI2lmbmRlZiBfQVNNX1NJR0NPTlRFWFRfSAogI2RlZmluZSBfQVNNX1NJR0NPTlRFWFRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGZhY2MyZDcuLjJhYmNhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTc1LDYgKzc1LDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qKiBzb2NrX3R5cGUgLSBTb2NrZXQgdHlwZXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDg4ZjFmN2QuLjk5OTkzYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgX0FTTV9TV0FCX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDRiNDAwN2IuLjdiODQ1YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwppbmRleCAxYTg2Zjg0Li40OWFhYzZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggYjJkNzA0MS4uMjlmYWRhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTUyMCw3ICsxNTIwLDkgQEAKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKIAlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkgeworCQl1bnNpZ25lZCBsb25nIHNyID0gc2V0X2MwX3N0YXR1cyhTVDBfQkVWKTsKIAkJd3JpdGVfYzBfZWJhc2UoZWJhc2UpOworCQl3cml0ZV9jMF9zdGF0dXMoc3IpOwogCQkvKiBTZXR0aW5nIHZlY3RvciBzcGFjaW5nIGVuYWJsZXMgRUkvVkkgbW9kZSAgKi8KIAkJY2hhbmdlX2MwX2ludGN0bCgweDNlMCwgVkVDVE9SU1BBQ0lORyk7CiAJfQpAQCAtMTYwMiw4ICsxNjA0LDYgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl1bnNpZ25lZCBsb25nIHVuY2FjaGVkX2ViYXNlID0gVE9fVU5DQUMoZWJhc2UpOwogI2VuZGlmCi0JaWYgKGNwdV9oYXNfbWlwc19yMikKLQkJdW5jYWNoZWRfZWJhc2UgKz0gKHJlYWRfYzBfZWJhc2UoKSAmIDB4M2ZmZmYwMDApOwogCiAJaWYgKCFhZGRyKQogCQlwYW5pYyhwYW5pY19udWxsX2NlcnIpOwpAQCAtMTYzNSw5ICsxNjM1LDExIEBACiAJCXJldHVybjsJLyogQWxyZWFkeSBkb25lICovCiAjZW5kaWYKIAotCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KQotCQllYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290bWVtX2xvd19wYWdlcygweDIwMCArIFZFQ1RPUlNQQUNJTkcqNjQpOwotCWVsc2UgeworCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDB4MjAwICsgVkVDVE9SU1BBQ0lORyo2NDsKKwkJZWJhc2UgPSAodW5zaWduZWQgbG9uZykKKwkJCV9fYWxsb2NfYm9vdG1lbShzaXplLCAxIDw8IGZscyhzaXplKSwgMCk7CisJfSBlbHNlIHsKIAkJZWJhc2UgPSBDQUNfQkFTRTsKIAkJaWYgKGNwdV9oYXNfbWlwc19yMikKIAkJCWViYXNlICs9IChyZWFkX2MwX2ViYXNlKCkgJiAweDNmZmZmMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggYzQzZjRiMi4uODcxZTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTc4MCw3ICs3ODAsNyBAQAogCQljLT5kY2FjaGUud2F5cyA9IDI7CiAJCWMtPmRjYWNoZS53YXliaXQgPSAwOwogCi0JCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfQ0FDSEVfQ0RFWF9QOworCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX0NBQ0hFX0NERVhfUCB8IE1JUFNfQ1BVX1BSRUZFVENIOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX1RYNDlYWDoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKaW5kZXggNTQ2ZTY5Ny4uYmVkNTZmMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWlmICghcGxhdF9kZXZpY2VfaXNfY29oZXJlbnQoZGV2KSAmJiBkaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSkgewogCQl1bnNpZ25lZCBsb25nIGFkZHI7CiAKLQkJYWRkciA9IHBsYXRfZG1hX2FkZHJfdG9fcGh5cyhkbWFfYWRkcmVzcyk7CisJCWFkZHIgPSBkbWFfYWRkcl90b192aXJ0KGRtYV9hZGRyZXNzKTsKIAkJZG1hX2NhY2hlX3diYWNrX2ludihhZGRyLCBzaXplKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCmluZGV4IDU2YzY0Y2MuLjUwZmRiNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCWlmIChhY3Rpb24pIHsKIAkJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQkJc2VxX3ByaW50ZihwLCAiICUxNHMuJXUiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lLAogCQkJCSAgIChHeElDUihpKSAmIEd4SUNSX0xFVkVMKSA+PgogCQkJCSAgIEd4SUNSX0xFVkVMX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKaW5kZXggYzU4NGIwMC4uNDMwZjFhZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKQEAgLTMzNiwxMCArMzM2LDExIEBACiAjZGVmaW5lIE5VTV9QRENfUkVTVUxUCTMyCiAKICNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCi0jaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorI2lmZGVmIF9fS0VSTkVMX18KKwogZXh0ZXJuIGludCBwZGNfdHlwZTsKIAogLyogVmFsdWVzIGZvciBwZGNfdHlwZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBmYmE0MDJjLi44ODU0NzJiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNiArNTQsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkweDQwMWYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTB4NDAyMAorI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAvKiBPX05PTkJMT0NLIGNsYXNoZXMgd2l0aCB0aGUgYml0cyB1c2VkIGZvciBzb2NrZXQgdHlwZXMuICBUaGVyZWZvcmUgd2UKICAqIGhhdmUgdG8gZGVmaW5lIFNPQ0tfTk9OQkxPQ0sgdG8gYSBkaWZmZXJlbnQgdmFsdWUgaGVyZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDNmZjE2YzUuLmU3ODQwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9QQVJJU0NfU1dBQl9ICiAjZGVmaW5lIF9QQVJJU0NfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCmluZGV4IDI5ZTcwZTEuLmFkZmQ2MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbHNlCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCmluZGV4IDhiNWJhODIuLjQ0NDdkZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwpAQCAtMTI3LDYgKzEyNywxMyBAQAogCQkJZGNyLXJlZyA9IDwweDAxMCAweDAwMj47CiAJCX07CiAKKwkJQ1JZUFRPOiBjcnlwdG9AMTgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1jYyxwcGM0NjBleC1jcnlwdG8iLCAiYW1jYyxwcGM0eHgtY3J5cHRvIjsKKwkJCXJlZyA9IDw0IDB4MDAxODAwMDAgMHg4MDQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxZCAweDQ+OworCQl9OworCiAJCU1BTDA6IG1jbWFsIHsKIAkJCWNvbXBhdGlibGUgPSAiaWJtLG1jbWFsLTQ2MGV4IiwgImlibSxtY21hbDIiOwogCQkJZGNyLXJlZyA9IDwweDE4MCAweDA2Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKaW5kZXggMjgwNDQ0NC4uNWU2YjA4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwpAQCAtOTcsNiArOTcsMTMgQEAKIAkJCQkgICAgICAweDYgMHg0PjsJLyogRUNDIFNFQyBFcnJvciAqLyAKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0BlZjcwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDA1ZXgtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8MHhlZjcwMDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDE3IDB4Mj47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDA1ZXgiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKaW5kZXggNTdiODJlMy4uNjBhM2M5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb3R4LmgKQEAgLTksNyArOSw3IEBACiAjaWZuZGVmIF9fQVNNX0JPT1RYX0hfXwogI2RlZmluZSBfX0FTTV9CT09UWF9IX18KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBtYWNpbnRvc2gKICNpbmNsdWRlIDxUeXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGNkNDZmMDIuLmI1NjAwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYXV4dmVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggZjk5M2U0MS4uYmIyZGU2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMjAsNyArMjAsNyBAQAogI2lmbmRlZiBfX0xJTlVYX0tWTV9QT1dFUlBDX0gKICNkZWZpbmUgX19MSU5VWF9LVk1fUE9XRVJQQ19ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3Qga3ZtX3JlZ3MgewogCV9fdTY0IHBjOwpAQCAtNTIsNCArNTIsMTEgQEAKIAlfX3U2NCBmcHJbMzJdOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworCiAjZW5kaWYgLyogX19MSU5VWF9LVk1fUE9XRVJQQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAppbmRleCBmNDkwMzFiLi5kMjJkMzk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKQEAgLTI4LDYgKzI4LDEzIEBACiAgKiBuZWVkIHRvIGZpbmQgc29tZSB3YXkgb2YgYWR2ZXJ0aXNpbmcgaXQuICovCiAjZGVmaW5lIEtWTTQ0eF9HVUVTVF9UTEJfU0laRSA2NAogCitzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHsKKwl1MzIgdGlkOyAvKiBPbmx5IHRoZSBsb3cgOCBiaXRzIGFyZSB1c2VkLiAqLworCXUzMiB3b3JkMDsKKwl1MzIgd29yZDE7CisJdTMyIHdvcmQyOworfTsKKwogc3RydWN0IGt2bXBwY180NHhfc2hhZG93X3JlZiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTE2IGd0bGJfaW5kZXg7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAppbmRleCAyMTk3NzY0Li41NmJmYWU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKQEAgLTQyLDcgKzQyLDEyIEBACiAjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1MgMTMKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX0lUTEJfTUlTUyAxNAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfREVCVUcgMTUKLSNkZWZpbmUgQk9PS0VfTUFYX0lOVEVSUlVQVCAxNQorCisvKiBFNTAwICovCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TUEVfVU5BVkFJTCAzMgorI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX0RBVEEgMzMKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9ST1VORCAzNAorI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfUEVSRk9STUFOQ0VfTU9OSVRPUiAzNQogCiAjZGVmaW5lIFJFU1VNRV9GTEFHX05WICAgICAgICAgICgxPDwwKSAgLyogUmVsb2FkIGd1ZXN0IG5vbnZvbGF0aWxlIHN0YXRlPyAqLwogI2RlZmluZSBSRVNVTUVfRkxBR19IT1NUICAgICAgICAoMTw8MSkgIC8qIFJlc3VtZSBob3N0PyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2U1MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDQ5N2NlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogWXUgTGl1LCA8eXUubGl1QGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0tWTV9FNTAwX0hfXworI2RlZmluZSBfX0FTTV9LVk1fRTUwMF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NJWkUgMzYKKworI2RlZmluZSBFNTAwX1BJRF9OVU0gICAzCisjZGVmaW5lIEU1MDBfVExCX05VTSAgIDIKKworc3RydWN0IHRsYmV7CisJdTMyIG1hczE7CisJdTMyIG1hczI7CisJdTMyIG1hczM7CisJdTMyIG1hczc7Cit9OworCitzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCB7CisJLyogVW5tb2RpZmllZCBjb3B5IG9mIHRoZSBndWVzdCdzIFRMQi4gKi8KKwlzdHJ1Y3QgdGxiZSAqZ3Vlc3RfdGxiW0U1MDBfVExCX05VTV07CisJLyogVExCIHRoYXQncyBhY3R1YWxseSB1c2VkIHdoZW4gdGhlIGd1ZXN0IGlzIHJ1bm5pbmcuICovCisJc3RydWN0IHRsYmUgKnNoYWRvd190bGJbRTUwMF9UTEJfTlVNXTsKKwkvKiBQYWdlcyB3aGljaCBhcmUgcmVmZXJlbmNlZCBpbiB0aGUgc2hhZG93IFRMQi4gKi8KKwlzdHJ1Y3QgcGFnZSAqKnNoYWRvd19wYWdlc1tFNTAwX1RMQl9OVU1dOworCisJdW5zaWduZWQgaW50IGd1ZXN0X3RsYl9zaXplW0U1MDBfVExCX05VTV07CisJdW5zaWduZWQgaW50IHNoYWRvd190bGJfc2l6ZVtFNTAwX1RMQl9OVU1dOworCXVuc2lnbmVkIGludCBndWVzdF90bGJfbnZbRTUwMF9UTEJfTlVNXTsKKworCXUzMiBob3N0X3BpZFtFNTAwX1BJRF9OVU1dOworCXUzMiBwaWRbRTUwMF9QSURfTlVNXTsKKworCXUzMiBtYXMwOworCXUzMiBtYXMxOworCXUzMiBtYXMyOworCXUzMiBtYXMzOworCXUzMiBtYXM0OworCXUzMiBtYXM1OworCXUzMiBtYXM2OworCXUzMiBtYXM3OworCXUzMiBsMWNzcjE7CisJdTMyIGhpZDA7CisJdTMyIGhpZDE7CisKKwlzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnRvX2U1MDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBjb250YWluZXJfb2YodmNwdSwgc3RydWN0IGt2bXBwY192Y3B1X2U1MDAsIHZjcHUpOworfQorCisjZW5kaWYgLyogX19BU01fS1ZNX0U1MDBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGMxZTQzNmYuLmRmZGYxM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC02NCwxMyArNjQsNiBAQAogCXUzMiBoYWx0X3dha2V1cDsKIH07CiAKLXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgewotCXUzMiB0aWQ7IC8qIE9ubHkgdGhlIGxvdyA4IGJpdHMgYXJlIHVzZWQuICovCi0JdTMyIHdvcmQwOwotCXUzMiB3b3JkMTsKLQl1MzIgd29yZDI7Ci19OwotCiBlbnVtIGt2bV9leGl0X3R5cGVzIHsKIAlNTUlPX0VYSVRTLAogCURDUl9FWElUUywKQEAgLTExOCwxMSArMTExLDYgQEAKIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAl1MzIgaG9zdF9zdGFjazsKIAl1MzIgaG9zdF9waWQ7Ci0JdTMyIGhvc3RfZGJjcjA7Ci0JdTMyIGhvc3RfZGJjcjE7Ci0JdTMyIGhvc3RfZGJjcjI7Ci0JdTMyIGhvc3RfaWFjWzRdOwotCXUzMiBob3N0X21zcjsKIAogCXU2NCBmcHJbMzJdOwogCXVsb25nIGdwclszMl07CkBAIC0xNTcsNyArMTQ1LDcgQEAKIAl1MzIgdGJ1OwogCXUzMiB0Y3I7CiAJdTMyIHRzcjsKLQl1MzIgaXZvclsxNl07CisJdTMyIGl2b3JbNjRdOwogCXVsb25nIGl2cHI7CiAJdTMyIHBpcjsKIApAQCAtMTcwLDYgKzE1OCw3IEBACiAJdTMyIGNjcjE7CiAJdTMyIGRiY3IwOwogCXUzMiBkYmNyMTsKKwl1MzIgZGJzcjsKIAogI2lmZGVmIENPTkZJR19LVk1fRVhJVF9USU1JTkcKIAlzdHJ1Y3Qga3ZtcHBjX2V4aXRfdGltaW5nIHRpbWluZ19leGl0OwpAQCAtMjAwLDEwICsxODksNCBAQAogCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19leGNlcHRpb25zOwogfTsKIAotc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyB7Ci0JaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgbG9uZyBicFs0XTsKLQlpbnQgc2luZ2xlc3RlcDsKLX07Ci0KICNlbmRpZiAvKiBfX1BPV0VSUENfS1ZNX0hPU1RfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCAzNmQyYTUwLi4yYzZlZTM0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCkBAIC01MiwxMyArNTIsMTkgQEAKIGV4dGVybiBpbnQga3ZtcHBjX2VtdWxhdGVfbW1pbyhzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2VtdWxhdGVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKKy8qIENvcmUtc3BlY2lmaWMgaG9va3MgKi8KKwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZhZGRyLCBncGFfdCBncGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgYXNpZCwgdTMyIGZsYWdzLCB1MzIgbWF4X2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGd0bGJfaWR4KTsKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfcHJpdl9zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdXNlcm1vZGUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9zd2l0Y2hfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHBpZCk7Ci0KLS8qIENvcmUtc3BlY2lmaWMgaG9va3MgKi8KK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworZXh0ZXJuIGludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CitleHRlcm4gaW50IGt2bXBwY19tbXVfaXRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKTsKK2V4dGVybiBncGFfdCBrdm1wcGNfbW11X3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndmFfdCBlYWRkcik7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2R0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9pdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkKTsKQEAgLTcxLDkgKzc3LDYgQEAKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1leHRlcm4gdm9pZCBrdm1wcGNfY29yZV9sb2FkX2hvc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9kZWxpdmVyX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiBpbnQga3ZtcHBjX2NvcmVfcGVuZGluZ19kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCmluZGV4IDNmOTQxYzAuLjQyODViNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaApAQCAtNzUsNiArNzUsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCitleHRlcm4gdW5zaWduZWQgaW50IHRsYmNhbV9pbmRleDsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludAlpZDsKIAl1bnNpZ25lZCBpbnQJYWN0aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAppbmRleCAzZjEyMWZlLi5lNzIzM2E4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaApAQCAtMTksNiArMTksNyBAQAogI2lmbmRlZiBfQVNNX1BPV0VSUENfUFMzRkJfSF8KICNkZWZpbmUgX0FTTV9QT1dFUlBDX1BTM0ZCX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKIC8qIGlvY3RsICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZjVhNGUxNjguLjFlNWNmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYxLDQgKzYxLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZgkvKiBfQVNNX1BPV0VSUENfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKaW5kZXggMzU0NWVmYi4uMTI4NmM4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKQEAgLTIzLDkgKzIzLDEwIEBACiAjaWZuZGVmIF9TUFVfSU5GT19ICiAjZGVmaW5lIF9TUFVfSU5GT19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9zcHUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2Vsc2UKIHN0cnVjdCBtZmNfY3Ffc3IgewogCV9fdTY0IG1mY19jcV9kYXRhMF9SVzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGVmODI0YWUuLmM1ODFlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtOCw3ICs4LDcgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2lmZGVmIF9fR05VQ19fCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMTllZTQ5MS4uNDJmZTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2FscGFjYS5oPgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0tWTQotI2luY2x1ZGUgPGFzbS9rdm1fNDR4Lmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHXzQweCkKQEAgLTM2MSw4ICszNjEsNiBAQAogCURFRklORShQVEVfU0laRSwgc2l6ZW9mKHB0ZV90KSk7CiAKICNpZmRlZiBDT05GSUdfS1ZNCi0JREVGSU5FKFRMQkVfQllURVMsIHNpemVvZihzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlKSk7Ci0KIAlERUZJTkUoVkNQVV9IT1NUX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9zdGFjaykpOwogCURFRklORShWQ1BVX0hPU1RfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9waWQpKTsKIAlERUZJTkUoVkNQVV9HUFJTLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZ3ByKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAyM2I4YjVlLi4xN2VmYjcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbHNlCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKaW5kZXggYTY2YmVjNS4uMGNlZjgwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCkBAIC0yOCw3MiArMjgsNiBAQAogCiAjaW5jbHVkZSAiNDR4X3RsYi5oIgogCi0vKiBOb3RlOiBjbGVhcmluZyBNU1JbREVdIGp1c3QgbWVhbnMgdGhhdCB0aGUgZGVidWcgaW50ZXJydXB0IHdpbGwgbm90IGJlCi0gKiBkZWxpdmVyZWQgKmltbWVkaWF0ZWx5Ki4gSW5zdGVhZCwgaXQgc2ltcGx5IHNldHMgdGhlIGFwcHJvcHJpYXRlIERCU1IgYml0cy4KLSAqIElmIHRob3NlIERCU1IgYml0cyBhcmUgc3RpbGwgc2V0IHdoZW4gTVNSW0RFXSBpcyByZS1lbmFibGVkLCB0aGUgaW50ZXJydXB0Ci0gKiB3aWxsIGJlIGRlbGl2ZXJlZCBhcyBhbiAiaW1wcmVjaXNlIGRlYnVnIGV2ZW50IiAod2hpY2ggaXMgaW5kaWNhdGVkIGJ5Ci0gKiBEQlNSW0lERV0uCi0gKi8KLXN0YXRpYyB2b2lkIGt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHModm9pZCkKLXsKLQltdG1zcihtZm1zcigpICYgfk1TUl9ERSk7Ci19Ci0KLXZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKLQotCW10c3ByKFNQUk5fSUFDMSwgdmNwdS0+YXJjaC5ob3N0X2lhY1swXSk7Ci0JbXRzcHIoU1BSTl9JQUMyLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzFdKTsKLQltdHNwcihTUFJOX0lBQzMsIHZjcHUtPmFyY2guaG9zdF9pYWNbMl0pOwotCW10c3ByKFNQUk5fSUFDNCwgdmNwdS0+YXJjaC5ob3N0X2lhY1szXSk7Ci0JbXRzcHIoU1BSTl9EQkNSMSwgdmNwdS0+YXJjaC5ob3N0X2RiY3IxKTsKLQltdHNwcihTUFJOX0RCQ1IyLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjIpOwotCW10c3ByKFNQUk5fREJDUjAsIHZjcHUtPmFyY2guaG9zdF9kYmNyMCk7Ci0JbXRtc3IodmNwdS0+YXJjaC5ob3N0X21zcik7Ci19Ci0KLXZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcgPSAmdmNwdS0+Z3Vlc3RfZGVidWc7Ci0JdTMyIGRiY3IwID0gMDsKLQotCXZjcHUtPmFyY2guaG9zdF9tc3IgPSBtZm1zcigpOwotCWt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKLQotCS8qIFNhdmUgaG9zdCBkZWJ1ZyByZWdpc3RlciBzdGF0ZS4gKi8KLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzBdID0gbWZzcHIoU1BSTl9JQUMxKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzFdID0gbWZzcHIoU1BSTl9JQUMyKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzJdID0gbWZzcHIoU1BSTl9JQUMzKTsKLQl2Y3B1LT5hcmNoLmhvc3RfaWFjWzNdID0gbWZzcHIoU1BSTl9JQUM0KTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjAgPSBtZnNwcihTUFJOX0RCQ1IwKTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjEgPSBtZnNwcihTUFJOX0RCQ1IxKTsKLQl2Y3B1LT5hcmNoLmhvc3RfZGJjcjIgPSBtZnNwcihTUFJOX0RCQ1IyKTsKLQotCS8qIHNldCByZWdpc3RlcnMgdXAgZm9yIGd1ZXN0ICovCi0KLQlpZiAoZGJnLT5icFswXSkgewotCQltdHNwcihTUFJOX0lBQzEsIGRiZy0+YnBbMF0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMxIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFsxXSkgewotCQltdHNwcihTUFJOX0lBQzIsIGRiZy0+YnBbMV0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMyIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFsyXSkgewotCQltdHNwcihTUFJOX0lBQzMsIGRiZy0+YnBbMl0pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUMzIHwgREJDUjBfSURNOwotCX0KLQlpZiAoZGJnLT5icFszXSkgewotCQltdHNwcihTUFJOX0lBQzQsIGRiZy0+YnBbM10pOwotCQlkYmNyMCB8PSBEQkNSMF9JQUM0IHwgREJDUjBfSURNOwotCX0KLQotCW10c3ByKFNQUk5fREJDUjAsIGRiY3IwKTsKLQltdHNwcihTUFJOX0RCQ1IxLCAwKTsKLQltdHNwcihTUFJOX0RCQ1IyLCAwKTsKLX0KLQogdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCWt2bXBwY180NHhfdGxiX2xvYWQodmNwdSk7CkBAIC0xNDksOCArODMsNiBAQAogaW50IGt2bXBwY19jb3JlX3ZjcHVfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uICp0cikKIHsKLQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZTsKIAlpbnQgaW5kZXg7CiAJZ3ZhX3QgZWFkZHI7CiAJdTggcGlkOwpAQCAtMTY2LDkgKzk4LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZ3RsYmUgPSAmdmNwdV80NHgtPmd1ZXN0X3RsYltpbmRleF07Ci0KLQl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IHRsYl94bGF0ZShndGxiZSwgZWFkZHIpOworCXRyLT5waHlzaWNhbF9hZGRyZXNzID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBpbmRleCwgZWFkZHIpOwogCS8qIFhYWCB3aGF0IGRvZXMgIndyaXRlYWJsZSIgYW5kICJ1c2VybW9kZSIgZXZlbiBtZWFuPyAqLwogCXRyLT52YWxpZCA9IDE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYwppbmRleCA4MjQ4OWE3Li42MWFmNThmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jCkBAIC0yNywyNSArMjcsMTIgQEAKICNpbmNsdWRlICJib29rZS5oIgogI2luY2x1ZGUgIjQ0eF90bGIuaCIKIAotI2RlZmluZSBPUF9SRkkgICAgICAxOQotCi0jZGVmaW5lIFhPUF9SRkkgICAgIDUwCi0jZGVmaW5lIFhPUF9NRk1TUiAgIDgzCi0jZGVmaW5lIFhPUF9XUlRFRSAgIDEzMQotI2RlZmluZSBYT1BfTVRNU1IgICAxNDYKLSNkZWZpbmUgWE9QX1dSVEVFSSAgMTYzCiAjZGVmaW5lIFhPUF9NRkRDUiAgIDMyMwogI2RlZmluZSBYT1BfTVREQ1IgICA0NTEKICNkZWZpbmUgWE9QX1RMQlNYICAgOTE0CiAjZGVmaW5lIFhPUF9JQ0NDSSAgIDk2NgogI2RlZmluZSBYT1BfVExCV0UgICA5NzgKIAotc3RhdGljIHZvaWQga3ZtcHBjX2VtdWxfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl2Y3B1LT5hcmNoLnBjID0gdmNwdS0+YXJjaC5zcnIwOwotCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guc3JyMSk7Ci19Ci0KIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX29wKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpCiB7CkBAIC01OSw0OCArNDYsOSBAQAogCWludCB3czsKIAogCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7Ci0JY2FzZSBPUF9SRkk6Ci0JCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgewotCQljYXNlIFhPUF9SRkk6Ci0JCQlrdm1wcGNfZW11bF9yZmkodmNwdSk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9SRklfRVhJVFMpOwotCQkJKmFkdmFuY2UgPSAwOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KIAljYXNlIDMxOgogCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKIAotCQljYXNlIFhPUF9NRk1TUjoKLQkJCXJ0ID0gZ2V0X3J0KGluc3QpOwotCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5tc3I7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRk1TUl9FWElUUyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFhPUF9NVE1TUjoKLQkJCXJzID0gZ2V0X3JzKGluc3QpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRNU1JfRVhJVFMpOwotCQkJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWE9QX1dSVEVFOgotCQkJcnMgPSBnZXRfcnMoaW5zdCk7Ci0JCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCi0JCQkJCQkJIHwgKHZjcHUtPmFyY2guZ3ByW3JzXSAmIE1TUl9FRSk7Ci0JCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7Ci0JCQlicmVhazsKLQotCQljYXNlIFhPUF9XUlRFRUk6Ci0JCQl2Y3B1LT5hcmNoLm1zciA9ICh2Y3B1LT5hcmNoLm1zciAmIH5NU1JfRUUpCi0JCQkJCQkJIHwgKGluc3QgJiBNU1JfRUUpOwotCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfV1JURUVfRVhJVFMpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBYT1BfTUZEQ1I6CiAJCQlkY3JuID0gZ2V0X2Rjcm4oaW5zdCk7CiAJCQlydCA9IGdldF9ydChpbnN0KTsKQEAgLTE4NiwxODYgKzEzNCw1MSBAQAogCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKIAl9CiAKKwlpZiAoZW11bGF0ZWQgPT0gRU1VTEFURV9GQUlMKQorCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX29wKHJ1biwgdmNwdSwgaW5zdCwgYWR2YW5jZSk7CisKIAlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKIHsKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKIAlzd2l0Y2ggKHNwcm4pIHsKLQljYXNlIFNQUk5fTU1VQ1I6Ci0JCXZjcHUtPmFyY2gubW11Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwogCWNhc2UgU1BSTl9QSUQ6CiAJCWt2bXBwY19zZXRfcGlkKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7IGJyZWFrOworCWNhc2UgU1BSTl9NTVVDUjoKKwkJdmNwdS0+YXJjaC5tbXVjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjA6CiAJCXZjcHUtPmFyY2guY2NyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjE6CiAJCXZjcHUtPmFyY2guY2NyMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0VTUjoKLQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMDoKLQkJdmNwdS0+YXJjaC5kYmNyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmRiY3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fVFNSOgotCQl2Y3B1LT5hcmNoLnRzciAmPSB+dmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fVENSOgotCQl2Y3B1LT5hcmNoLnRjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJa3ZtcHBjX2VtdWxhdGVfZGVjKHZjcHUpOwotCQlicmVhazsKLQotCS8qIE5vdGU6IFNQUkc0LTcgYXJlIHVzZXItcmVhZGFibGUuIFRoZXNlIHZhbHVlcyBhcmUKLQkgKiBsb2FkZWQgaW50byB0aGUgcmVhbCBTUFJHcyB3aGVuIHJlc3VtaW5nIHRoZQotCSAqIGd1ZXN0LiAqLwotCWNhc2UgU1BSTl9TUFJHNDoKLQkJdmNwdS0+YXJjaC5zcHJnNCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0JY2FzZSBTUFJOX1NQUkc1OgotCQl2Y3B1LT5hcmNoLnNwcmc1ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKLQljYXNlIFNQUk5fU1BSRzY6Ci0JCXZjcHUtPmFyY2guc3ByZzYgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwotCWNhc2UgU1BSTl9TUFJHNzoKLQkJdmNwdS0+YXJjaC5zcHJnNyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7Ci0KLQljYXNlIFNQUk5fSVZQUjoKLQkJdmNwdS0+YXJjaC5pdnByID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjA6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0NSSVRJQ0FMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IyOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjM6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRV0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjU6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FMSUdOTUVOVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNzoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SODoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SOToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTA6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRklUXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEzOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE0OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE1OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUJVR10gPSB2Y3B1LT5hcmNoLmdwcltyc107Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKLQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcih2Y3B1LCBzcHJuLCBycyk7CiAJfQogCiAJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRTUFJfRVhJVFMpOwotCXJldHVybiBFTVVMQVRFX0RPTkU7CisJcmV0dXJuIGVtdWxhdGVkOwogfQogCiBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpCiB7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCiAJc3dpdGNoIChzcHJuKSB7Ci0JLyogNDQwICovCisJY2FzZSBTUFJOX1BJRDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5waWQ7IGJyZWFrOwogCWNhc2UgU1BSTl9NTVVDUjoKIAkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5tbXVjcjsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjA6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY2NyMDsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjE6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY2NyMTsgYnJlYWs7Ci0KLQkvKiBCb29rIEUgKi8KLQljYXNlIFNQUk5fUElEOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnBpZDsgYnJlYWs7Ci0JY2FzZSBTUFJOX0lWUFI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZwcjsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGVhcjsgYnJlYWs7Ci0JY2FzZSBTUFJOX0VTUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5lc3I7IGJyZWFrOwotCWNhc2UgU1BSTl9EQkNSMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYmNyMDsgYnJlYWs7Ci0JY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IxOyBicmVhazsKLQotCWNhc2UgU1BSTl9JVk9SMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQ1JJVElDQUxdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRV07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I0OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF07Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SNToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I2OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I3OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I4OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1I5OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFJOX0lWT1IxMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVDUkVNRU5URVJdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjExOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdOwotCQlicmVhazsKLQljYXNlIFNQUk5fSVZPUjEyOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTM6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RUTEJfTUlTU107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lUTEJfTUlTU107Ci0JCWJyZWFrOwotCWNhc2UgU1BSTl9JVk9SMTU6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgotCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHZjcHUsIHNwcm4sIHJ0KTsKIAl9CiAKIAlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRlNQUl9FWElUUyk7Ci0JcmV0dXJuIEVNVUxBVEVfRE9ORTsKKwlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKaW5kZXggOWEzNGI4ZS4uNGExNmY0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKQEAgLTIwOCwyMCArMjA4LDM4IEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCitncGFfdCBrdm1wcGNfbW11X3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIGd2YV90IGVhZGRyKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOworCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07CisJdW5zaWduZWQgaW50IHBnbWFzayA9IGdldF90bGJfYnl0ZXMoZ3RsYmUpIC0gMTsKKworCXJldHVybiBnZXRfdGxiX3JhZGRyKGd0bGJlKSB8IChlYWRkciAmIHBnbWFzayk7Cit9CisKK2ludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUyk7CiAKIAlyZXR1cm4ga3ZtcHBjXzQ0eF90bGJfaW5kZXgodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGlkLCBhcyk7CiB9CiAKLWludCBrdm1wcGNfNDR4X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK2ludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUyk7CiAKIAlyZXR1cm4ga3ZtcHBjXzQ0eF90bGJfaW5kZXgodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGlkLCBhcyk7CiB9CiAKK3ZvaWQga3ZtcHBjX21tdV9pdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19tbXVfZHRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKK30KKwogc3RhdGljIHZvaWQga3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0bGJfaW5kZXgpCiB7CkBAIC0yNDgsNyArMjY2LDcgQEAKIAlLVk1UUkFDRV8xRChTVExCX0lOVkFMLCAmdmNwdV80NHgtPnZjcHUsIHN0bGJfaW5kZXgsIGhhbmRsZXIpOwogfQogCi12b2lkIGt2bXBwY19jb3JlX2Rlc3Ryb3lfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3ZvaWQga3ZtcHBjX21tdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfNDR4ICp2Y3B1XzQ0eCA9IHRvXzQ0eCh2Y3B1KTsKIAlpbnQgaTsKQEAgLTI2OSwxNSArMjg3LDE5IEBACiAgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGd1ZXN0IFRMQiBlbnRyeSBpcyBzYWZlIHRvIGluc2VydCBpbnRvCiAgKiB0aGUgc2hhZG93IFRMQi4KICAqLwotdm9pZCBrdm1wcGNfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmFkZHIsIGdwYV90IGdwYWRkciwgdTY0IGFzaWQsCi0gICAgICAgICAgICAgICAgICAgIHUzMiBmbGFncywgdTMyIG1heF9ieXRlcywgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgpCit2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3RsYl9pbmRleCkKIHsKIAlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHN0bGJlOwogCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOworCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlID0gJnZjcHVfNDR4LT5ndWVzdF90bGJbZ3RsYl9pbmRleF07CiAJc3RydWN0IGt2bXBwY180NHhfc2hhZG93X3JlZiAqcmVmOwogCXN0cnVjdCBwYWdlICpuZXdfcGFnZTsKIAlocGFfdCBocGFkZHI7CiAJZ2ZuX3QgZ2ZuOworCXUzMiBhc2lkID0gZ3RsYmUtPnRpZDsKKwl1MzIgZmxhZ3MgPSBndGxiZS0+d29yZDI7CisJdTMyIG1heF9ieXRlcyA9IGdldF90bGJfYnl0ZXMoZ3RsYmUpOwogCXVuc2lnbmVkIGludCB2aWN0aW07CiAKIAkvKiBTZWxlY3QgVExCIGVudHJ5IHRvIGNsb2JiZXIuIEluZGlyZWN0bHkgZ3VhcmQgYWdhaW5zdCByYWNlcyB3aXRoIHRoZSBUTEIKQEAgLTQ0OCwxMCArNDcwLDggQEAKIAl9CiAKIAlpZiAodGxiZV9pc19ob3N0X3NhZmUodmNwdSwgdGxiZSkpIHsKLQkJdTY0IGFzaWQ7CiAJCWd2YV90IGVhZGRyOwogCQlncGFfdCBncGFkZHI7Ci0JCXUzMiBmbGFnczsKIAkJdTMyIGJ5dGVzOwogCiAJCWVhZGRyID0gZ2V0X3RsYl9lYWRkcih0bGJlKTsKQEAgLTQ2MiwxMCArNDgyLDcgQEAKIAkJZWFkZHIgJj0gfihieXRlcyAtIDEpOwogCQlncGFkZHIgJj0gfihieXRlcyAtIDEpOwogCi0JCWFzaWQgPSAodGxiZS0+d29yZDAgJiBQUEM0NHhfVExCX1RTKSB8IHRsYmUtPnRpZDsKLQkJZmxhZ3MgPSB0bGJlLT53b3JkMiAmIDB4ZmZmZjsKLQotCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBhc2lkLCBmbGFncywgYnl0ZXMsIGd0bGJfaW5kZXgpOworCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBndGxiX2luZGV4KTsKIAl9CiAKIAlLVk1UUkFDRV81RChHVExCX1dSSVRFLCB2Y3B1LCBndGxiX2luZGV4LCB0bGJlLT50aWQsIHRsYmUtPndvcmQwLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmggYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaAppbmRleCA3NzIxOTFmLi5hOWZmODBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaApAQCAtMjUsOCArMjUsNiBAQAogCiBleHRlcm4gaW50IGt2bXBwY180NHhfdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwaWQsIHVuc2lnbmVkIGludCBhcyk7Ci1leHRlcm4gaW50IGt2bXBwY180NHhfZHRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKTsKLWV4dGVybiBpbnQga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOwogCiBleHRlcm4gaW50IGt2bXBwY180NHhfZW11bF90bGJzeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHJ0LCB1OCByYSwgdTggcmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCByYyk7CkBAIC04NSwxMSArODMsNCBAQAogCXJldHVybiAodmNwdS0+YXJjaC5tbXVjciA+PiAxNikgJiAweDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZ3BhX3QgdGxiX3hsYXRlKHN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKnRsYmUsIGd2YV90IGVhZGRyKQotewotCXVuc2lnbmVkIGludCBwZ21hc2sgPSBnZXRfdGxiX2J5dGVzKHRsYmUpIC0gMTsKLQotCXJldHVybiBnZXRfdGxiX3JhZGRyKHRsYmUpIHwgKGVhZGRyICYgcGdtYXNrKTsKLX0KLQogI2VuZGlmIC8qIF9fS1ZNX1BPV0VSUENfVExCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCmluZGV4IDZkYmRjNDguLjVhMTUyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTIsNiArMiw5IEBACiAjIEtWTSBjb25maWd1cmF0aW9uCiAjCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJLS0taGVscC0tLQpAQCAtNDMsNiArNDYsMTkgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEtWTV9FNTAwCisJYm9vbCAiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMCBwcm9jZXNzb3JzIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEU1MDAKKwlzZWxlY3QgS1ZNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgRTUwMCBndWVzdCBrZXJuZWxzIGluIHZpcnR1YWwgbWFjaGluZXMgb24KKwkgIEU1MDAgaG9zdCBwcm9jZXNzb3JzLgorCisJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoCisJICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEtWTV9UUkFDRQogCWJvb2wgIktWTSB0cmFjZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gS1ZNICYmIE1BUktFUlMgJiYgU1lTRlMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCmluZGV4IGRmN2JhNTkuLjRiMmRmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQpAQCAtMTYsOCArMTYsMTggQEAKIAoga3ZtLTQ0MC1vYmpzIDo9IFwKIAlib29rZS5vIFwKKwlib29rZV9lbXVsYXRlLm8gXAogCWJvb2tlX2ludGVycnVwdHMubyBcCiAJNDR4Lm8gXAogCTQ0eF90bGIubyBcCiAJNDR4X2VtdWxhdGUubwogb2JqLSQoQ09ORklHX0tWTV80NDApICs9IGt2bS00NDAubworCitrdm0tZTUwMC1vYmpzIDo9IFwKKwlib29rZS5vIFwKKwlib29rZV9lbXVsYXRlLm8gXAorCWJvb2tlX2ludGVycnVwdHMubyBcCisJZTUwMC5vIFwKKwllNTAwX3RsYi5vIFwKKwllNTAwX2VtdWxhdGUubworb2JqLSQoQ09ORklHX0tWTV9FNTAwKSArPSBrdm0tZTUwMC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKaW5kZXggMzU0ODVkZC4uNjQyZTQyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYwpAQCAtMzAsMTAgKzMwLDggQEAKICNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgogI2luY2x1ZGUgInRpbWluZy5oIgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV80NHguaD4KIAogI2luY2x1ZGUgImJvb2tlLmgiCi0jaW5jbHVkZSAiNDR4X3RsYi5oIgogCiB1bnNpZ25lZCBsb25nIGt2bXBwY19ib29rZV9oYW5kbGVyczsKIApAQCAtMTIwLDYgKzExOCw5IEBACiAJY2FzZSBCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRToKIAljYXNlIEJPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFOgogCWNhc2UgQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMOgorCWNhc2UgQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTDoKKwljYXNlIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEE6CisJY2FzZSBCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORDoKIAljYXNlIEJPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTDoKIAljYXNlIEJPT0tFX0lSUVBSSU9fQUxJR05NRU5UOgogCQlhbGxvd2VkID0gMTsKQEAgLTE2NSw3ICsxNjYsNyBAQAogCXVuc2lnbmVkIGludCBwcmlvcml0eTsKIAogCXByaW9yaXR5ID0gX19mZnMoKnBlbmRpbmcpOwotCXdoaWxlIChwcmlvcml0eSA8PSBCT09LRV9NQVhfSU5URVJSVVBUKSB7CisJd2hpbGUgKHByaW9yaXR5IDw9IEJPT0tFX0lSUVBSSU9fTUFYKSB7CiAJCWlmIChrdm1wcGNfYm9va2VfaXJxcHJpb19kZWxpdmVyKHZjcHUsIHByaW9yaXR5KSkKIAkJCWJyZWFrOwogCkBAIC0yNjMsNiArMjY0LDIxIEBACiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCWJyZWFrOwogCisJY2FzZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUw6CisJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUwpOworCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKworCWNhc2UgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBOgorCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBKTsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisKKwljYXNlIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQ6CisJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EKTsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisKIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0U6CiAJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKIAkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKQEAgLTI4NCwyOSArMzAwLDI3IEBACiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCWJyZWFrOwogCi0JLyogWFhYIG1vdmUgdG8gYSA0NDAtc3BlY2lmaWMgZmlsZS4gKi8KIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1M6IHsKLQkJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHggPSB0b180NHgodmNwdSk7Ci0JCXN0cnVjdCBrdm1wcGNfNDR4X3RsYmUgKmd0bGJlOwogCQl1bnNpZ25lZCBsb25nIGVhZGRyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQlpbnQgZ3RsYl9pbmRleDsKKwkJZ3BhX3QgZ3BhZGRyOwogCQlnZm5fdCBnZm47CiAKIAkJLyogQ2hlY2sgdGhlIGd1ZXN0IFRMQi4gKi8KLQkJZ3RsYl9pbmRleCA9IGt2bXBwY180NHhfZHRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CisJCWd0bGJfaW5kZXggPSBrdm1wcGNfbW11X2R0bGJfaW5kZXgodmNwdSwgZWFkZHIpOwogCQlpZiAoZ3RsYl9pbmRleCA8IDApIHsKIAkJCS8qIFRoZSBndWVzdCBkaWRuJ3QgaGF2ZSBhIG1hcHBpbmcgZm9yIGl0LiAqLwogCQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19EVExCX01JU1MpOwogCQkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKKwkJCWt2bXBwY19tbXVfZHRsYl9taXNzKHZjcHUpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEVExCX1JFQUxfTUlTU19FWElUUyk7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQkJYnJlYWs7CiAJCX0KIAotCQlndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOwotCQl2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkID0gdGxiX3hsYXRlKGd0bGJlLCBlYWRkcik7Ci0JCWdmbiA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQgPj4gUEFHRV9TSElGVDsKKwkJZ3BhZGRyID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBndGxiX2luZGV4LCBlYWRkcik7CisJCWdmbiA9IGdwYWRkciA+PiBQQUdFX1NISUZUOwogCiAJCWlmIChrdm1faXNfdmlzaWJsZV9nZm4odmNwdS0+a3ZtLCBnZm4pKSB7CiAJCQkvKiBUaGUgZ3Vlc3QgVExCIGhhZCBhIG1hcHBpbmcsIGJ1dCB0aGUgc2hhZG93IFRMQgpAQCAtMzE1LDEzICszMjksMTMgQEAKIAkJCSAqIGIpIHRoZSBndWVzdCB1c2VkIGEgbGFyZ2UgbWFwcGluZyB3aGljaCB3ZSdyZSBmYWtpbmcKIAkJCSAqIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gc2F0aXNmeSB0aGUgZmF1bHQgd2l0aG91dAogCQkJICogaW52b2tpbmcgdGhlIGd1ZXN0LiAqLwotCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQsIGd0bGJlLT50aWQsCi0JCQkgICAgICAgICAgICAgICBndGxiZS0+d29yZDIsIGdldF90bGJfYnl0ZXMoZ3RsYmUpLCBndGxiX2luZGV4KTsKKwkJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGd0bGJfaW5kZXgpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEVExCX1ZJUlRfTUlTU19FWElUUyk7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwogCQl9IGVsc2UgewogCQkJLyogR3Vlc3QgaGFzIG1hcHBlZCBhbmQgYWNjZXNzZWQgYSBwYWdlIHdoaWNoIGlzIG5vdAogCQkJICogYWN0dWFsbHkgUkFNLiAqLworCQkJdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCA9IGdwYWRkcjsKIAkJCXIgPSBrdm1wcGNfZW11bGF0ZV9tbWlvKHJ1biwgdmNwdSk7CiAJCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIE1NSU9fRVhJVFMpOwogCQl9CkBAIC0zMjksMTAgKzM0Myw3IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIFhYWCBtb3ZlIHRvIGEgNDQwLXNwZWNpZmljIGZpbGUuICovCiAJY2FzZSBCT09LRV9JTlRFUlJVUFRfSVRMQl9NSVNTOiB7Ci0JCXN0cnVjdCBrdm1wcGNfdmNwdV80NHggKnZjcHVfNDR4ID0gdG9fNDR4KHZjcHUpOwotCQlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICpndGxiZTsKIAkJdW5zaWduZWQgbG9uZyBlYWRkciA9IHZjcHUtPmFyY2gucGM7CiAJCWdwYV90IGdwYWRkcjsKIAkJZ2ZuX3QgZ2ZuOwpAQCAtMzQxLDE4ICszNTIsMTggQEAKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAogCQkvKiBDaGVjayB0aGUgZ3Vlc3QgVExCLiAqLwotCQlndGxiX2luZGV4ID0ga3ZtcHBjXzQ0eF9pdGxiX2luZGV4KHZjcHUsIGVhZGRyKTsKKwkJZ3RsYl9pbmRleCA9IGt2bXBwY19tbXVfaXRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CiAJCWlmIChndGxiX2luZGV4IDwgMCkgewogCQkJLyogVGhlIGd1ZXN0IGRpZG4ndCBoYXZlIGEgbWFwcGluZyBmb3IgaXQuICovCiAJCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX0lUTEJfTUlTUyk7CisJCQlrdm1wcGNfbW11X2l0bGJfbWlzcyh2Y3B1KTsKIAkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgSVRMQl9SRUFMX01JU1NfRVhJVFMpOwogCQkJYnJlYWs7CiAJCX0KIAogCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIElUTEJfVklSVF9NSVNTX0VYSVRTKTsKIAotCQlndGxiZSA9ICZ2Y3B1XzQ0eC0+Z3Vlc3RfdGxiW2d0bGJfaW5kZXhdOwotCQlncGFkZHIgPSB0bGJfeGxhdGUoZ3RsYmUsIGVhZGRyKTsKKwkJZ3BhZGRyID0ga3ZtcHBjX21tdV94bGF0ZSh2Y3B1LCBndGxiX2luZGV4LCBlYWRkcik7CiAJCWdmbiA9IGdwYWRkciA+PiBQQUdFX1NISUZUOwogCiAJCWlmIChrdm1faXNfdmlzaWJsZV9nZm4odmNwdS0+a3ZtLCBnZm4pKSB7CkBAIC0zNjIsOCArMzczLDcgQEAKIAkJCSAqIGIpIHRoZSBndWVzdCB1c2VkIGEgbGFyZ2UgbWFwcGluZyB3aGljaCB3ZSdyZSBmYWtpbmcKIAkJCSAqIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gc2F0aXNmeSB0aGUgZmF1bHQgd2l0aG91dAogCQkJICogaW52b2tpbmcgdGhlIGd1ZXN0LiAqLwotCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYmUtPnRpZCwKLQkJCSAgICAgICAgICAgICAgIGd0bGJlLT53b3JkMiwgZ2V0X3RsYl9ieXRlcyhndGxiZSksIGd0bGJfaW5kZXgpOworCQkJa3ZtcHBjX21tdV9tYXAodmNwdSwgZWFkZHIsIGdwYWRkciwgZ3RsYl9pbmRleCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBHdWVzdCBtYXBwZWQgYW5kIGxlYXBlZCBhdCBub24tUkFNISAqLwogCQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuaAppbmRleCBjZjdjOTRjLi5kNTliY2NhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KICNpbmNsdWRlICJ0aW1pbmcuaCIKIAogLyogaW50ZXJydXB0IHByaW9ydGl0eSBvcmRlcmluZyAqLwpAQCAtMzAsMTcgKzMxLDI0IEBACiAjZGVmaW5lIEJPT0tFX0lSUVBSSU9fQUxJR05NRU5UIDIKICNkZWZpbmUgQk9PS0VfSVJRUFJJT19QUk9HUkFNIDMKICNkZWZpbmUgQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMIDQKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19TWVNDQUxMIDUKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMIDYKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19EVExCX01JU1MgNwotI2RlZmluZSBCT09LRV9JUlFQUklPX0lUTEJfTUlTUyA4Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDSyA5Ci0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVCVUcgMTAKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19DUklUSUNBTCAxMQotI2RlZmluZSBCT09LRV9JUlFQUklPX1dBVENIRE9HIDEyCi0jZGVmaW5lIEJPT0tFX0lSUVBSSU9fRVhURVJOQUwgMTMKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19GSVQgMTQKLSNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUiAxNQorI2RlZmluZSBCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMIDUKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TUEVfRlBfREFUQSA2CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EIDcKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19TWVNDQUxMIDgKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMIDkKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19EVExCX01JU1MgMTAKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19JVExCX01JU1MgMTEKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLIDEyCisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fREVCVUcgMTMKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19DUklUSUNBTCAxNAorI2RlZmluZSBCT09LRV9JUlFQUklPX1dBVENIRE9HIDE1CisjZGVmaW5lIEJPT0tFX0lSUVBSSU9fRVhURVJOQUwgMTYKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19GSVQgMTcKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUiAxOAorI2RlZmluZSBCT09LRV9JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1IgMTkKKyNkZWZpbmUgQk9PS0VfSVJRUFJJT19NQVggMTkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcga3ZtcHBjX2Jvb2tlX2hhbmRsZXJzOwogCiAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yICJmdWxsIiBNU1Igd3JpdGVzLiBObyBuZWVkIHRvIGNhbGwgdGhpcyBpZiBvbmx5IEVFIGlzCiAgKiBjaGFuZ2luZy4gKi8KQEAgLTU3LDQgKzY1LDkgQEAKIAl9OwogfQogCitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpOworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCk7CitpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKTsKKwogI2VuZGlmIC8qIF9fS1ZNX0JPT0tFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2VtdWxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJjNjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqCisgKiBBdXRob3JzOiBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL2Rpc2Fzc2VtYmxlLmg+CisKKyNpbmNsdWRlICJib29rZS5oIgorCisjZGVmaW5lIE9QXzE5X1hPUF9SRkkgICAgIDUwCisKKyNkZWZpbmUgT1BfMzFfWE9QX01GTVNSICAgODMKKyNkZWZpbmUgT1BfMzFfWE9QX1dSVEVFICAgMTMxCisjZGVmaW5lIE9QXzMxX1hPUF9NVE1TUiAgIDE0NgorI2RlZmluZSBPUF8zMV9YT1BfV1JURUVJICAxNjMKKworc3RhdGljIHZvaWQga3ZtcHBjX2VtdWxfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5hcmNoLnBjID0gdmNwdS0+YXJjaC5zcnIwOworCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guc3JyMSk7Cit9CisKK2ludCBrdm1wcGNfYm9va2VfZW11bGF0ZV9vcChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisJaW50IHJzOworCWludCBydDsKKworCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7CisJY2FzZSAxOToKKwkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CisJCWNhc2UgT1BfMTlfWE9QX1JGSToKKwkJCWt2bXBwY19lbXVsX3JmaSh2Y3B1KTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1JGSV9FWElUUyk7CisJCQkqYWR2YW5jZSA9IDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMzE6CisJCXN3aXRjaCAoZ2V0X3hvcChpbnN0KSkgeworCisJCWNhc2UgT1BfMzFfWE9QX01GTVNSOgorCQkJcnQgPSBnZXRfcnQoaW5zdCk7CisJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLm1zcjsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01GTVNSX0VYSVRTKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfMzFfWE9QX01UTVNSOgorCQkJcnMgPSBnZXRfcnMoaW5zdCk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NVE1TUl9FWElUUyk7CisJCQlrdm1wcGNfc2V0X21zcih2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10pOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUF8zMV9YT1BfV1JURUU6CisJCQlycyA9IGdldF9ycyhpbnN0KTsKKwkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKKwkJCQkJCQkgfCAodmNwdS0+YXJjaC5ncHJbcnNdICYgTVNSX0VFKTsKKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1dSVEVFX0VYSVRTKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BfMzFfWE9QX1dSVEVFSToKKwkJCXZjcHUtPmFyY2gubXNyID0gKHZjcHUtPmFyY2gubXNyICYgfk1TUl9FRSkKKwkJCQkJCQkgfCAoaW5zdCAmIE1TUl9FRSk7CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9XUlRFRV9FWElUUyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fREVBUjoKKwkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fRVNSOgorCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IwOgorCQl2Y3B1LT5hcmNoLmRiY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjE6CisJCXZjcHUtPmFyY2guZGJjcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9EQlNSOgorCQl2Y3B1LT5hcmNoLmRic3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1RTUjoKKwkJdmNwdS0+YXJjaC50c3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1RDUjoKKwkJdmNwdS0+YXJjaC50Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWt2bXBwY19lbXVsYXRlX2RlYyh2Y3B1KTsKKwkJYnJlYWs7CisKKwkvKiBOb3RlOiBTUFJHNC03IGFyZSB1c2VyLXJlYWRhYmxlLiBUaGVzZSB2YWx1ZXMgYXJlCisJICogbG9hZGVkIGludG8gdGhlIHJlYWwgU1BSR3Mgd2hlbiByZXN1bWluZyB0aGUKKwkgKiBndWVzdC4gKi8KKwljYXNlIFNQUk5fU1BSRzQ6CisJCXZjcHUtPmFyY2guc3ByZzQgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9TUFJHNToKKwkJdmNwdS0+YXJjaC5zcHJnNSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX1NQUkc2OgorCQl2Y3B1LT5hcmNoLnNwcmc2ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwljYXNlIFNQUk5fU1BSRzc6CisJCXZjcHUtPmFyY2guc3ByZzcgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCisJY2FzZSBTUFJOX0lWUFI6CisJCXZjcHUtPmFyY2guaXZwciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IwOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMjoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjQ6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I1OgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjY6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjc6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjg6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjk6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEwOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTE6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTI6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMzoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fSVZQUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdnByOyBicmVhazsKKwljYXNlIFNQUk5fREVBUjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kZWFyOyBicmVhazsKKwljYXNlIFNQUk5fRVNSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmVzcjsgYnJlYWs7CisJY2FzZSBTUFJOX0RCQ1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IwOyBicmVhazsKKwljYXNlIFNQUk5fREJDUjE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGJjcjE7IGJyZWFrOworCWNhc2UgU1BSTl9EQlNSOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRic3I7IGJyZWFrOworCisJY2FzZSBTUFJOX0lWT1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1I1OgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjY6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjc6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZQX1VOQVZBSUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjg6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjk6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdOworCQlicmVhazsKKwljYXNlIFNQUk5fSVZPUjEwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMTI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1dBVENIRE9HXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IxNToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKaW5kZXggMDg0ZWJjZC4uZDBjNmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKQEAgLTg2LDYgKzg2LDkgQEAKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1MKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MKIEtWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9ERUJVRworS1ZNX0hBTkRMRVIgQk9PS0VfSU5URVJSVVBUX1NQRV9VTkFWQUlMCitLVk1fSEFORExFUiBCT09LRV9JTlRFUlJVUFRfU1BFX0ZQX0RBVEEKK0tWTV9IQU5ETEVSIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQKIAogX0dMT0JBTChrdm1wcGNfaGFuZGxlcl9sZW4pCiAJLmxvbmcga3ZtcHBjX2hhbmRsZXJfMSAtIGt2bXBwY19oYW5kbGVyXzAKQEAgLTM0Nyw3ICszNTAsOSBAQAogCWx3eglyMywgVkNQVV9TSEFET1dfUElEKHI0KQogCW10c3ByCVNQUk5fUElELCByMwogCisjaWZkZWYgQ09ORklHXzQ0eAogCWljY2NpCTAsIDAgLyogWFhYIGhhY2sgKi8KKyNlbmRpZgogCiAJLyogTG9hZCBzb21lIGd1ZXN0IHZvbGF0aWxlcy4gKi8KIAlsd3oJcjAsIFZDUFVfR1BSKHIwKShyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNjdmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBZdSBMaXUsIDx5dS5saXVAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYXJjaC9wb3dlcnBjL2t2bS80NHguYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZTUwMC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisKKyNpbmNsdWRlICJib29rZS5oIgorI2luY2x1ZGUgImU1MDBfdGxiLmgiCisKK3ZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKK3sKKwlrdm1wcGNfZTUwMF90bGJfbG9hZCh2Y3B1LCBjcHUpOworfQorCit2b2lkIGt2bXBwY19jb3JlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfZTUwMF90bGJfcHV0KHZjcHUpOworfQorCitpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCh2b2lkKQoreworCWludCByOworCisJaWYgKHN0cmNtcChjdXJfY3B1X3NwZWMtPmNwdV9uYW1lLCAiZTUwMHYyIikgPT0gMCkKKwkJciA9IDA7CisJZWxzZQorCQlyID0gLUVOT1RTVVBQOworCisJcmV0dXJuIHI7Cit9CisKK2ludCBrdm1wcGNfY29yZV92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCWt2bXBwY19lNTAwX3RsYl9zZXR1cCh2Y3B1X2U1MDApOworCisJLyogVXNlIHRoZSBzYW1lIGNvcmUgdmVydGlvbiBhcyBob3N0J3MgKi8KKwl2Y3B1LT5hcmNoLnB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKKworCXJldHVybiAwOworfQorCisvKiAnbGluZWFyX2FkZHJlc3MnIGlzIGFjdHVhbGx5IGFuIGVuY29kaW5nIG9mIEFTfFBJRHxFQUREUiAuICovCitpbnQga3ZtcHBjX2NvcmVfdmNwdV90cmFuc2xhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKnRyKQoreworCWludCBpbmRleDsKKwlndmFfdCBlYWRkcjsKKwl1OCBwaWQ7CisJdTggYXM7CisKKwllYWRkciA9IHRyLT5saW5lYXJfYWRkcmVzczsKKwlwaWQgPSAodHItPmxpbmVhcl9hZGRyZXNzID4+IDMyKSAmIDB4ZmY7CisJYXMgPSAodHItPmxpbmVhcl9hZGRyZXNzID4+IDQwKSAmIDB4MTsKKworCWluZGV4ID0ga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaCh2Y3B1LCBlYWRkciwgcGlkLCBhcyk7CisJaWYgKGluZGV4IDwgMCkgeworCQl0ci0+dmFsaWQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IGt2bXBwY19tbXVfeGxhdGUodmNwdSwgaW5kZXgsIGVhZGRyKTsKKwkvKiBYWFggd2hhdCBkb2VzICJ3cml0ZWFibGUiIGFuZCAidXNlcm1vZGUiIGV2ZW4gbWVhbj8gKi8KKwl0ci0+dmFsaWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IGVycjsKKworCXZjcHVfZTUwMCA9IGttZW1fY2FjaGVfemFsbG9jKGt2bV92Y3B1X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHVfZTUwMCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl2Y3B1ID0gJnZjcHVfZTUwMC0+dmNwdTsKKwllcnIgPSBrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV92Y3B1OworCisJZXJyID0ga3ZtcHBjX2U1MDBfdGxiX2luaXQodmNwdV9lNTAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVuaW5pdF92Y3B1OworCisJcmV0dXJuIHZjcHU7CisKK3VuaW5pdF92Y3B1OgorCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKK2ZyZWVfdmNwdToKKwlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHZjcHVfZTUwMCk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBrdm1wcGNfY29yZV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCisJa3ZtcHBjX2U1MDBfdGxiX3VuaW5pdCh2Y3B1X2U1MDApOworCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKKwlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHZjcHVfZTUwMCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfaW5pdCh2b2lkKQoreworCWludCByLCBpOworCXVuc2lnbmVkIGxvbmcgaXZvclszXTsKKwl1bnNpZ25lZCBsb25nIG1heF9pdm9yID0gMDsKKworCXIgPSBrdm1wcGNfYm9va2VfaW5pdCgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCS8qIGNvcHkgZXh0cmEgRTUwMCBleGNlcHRpb24gaGFuZGxlcnMgKi8KKwlpdm9yWzBdID0gbWZzcHIoU1BSTl9JVk9SMzIpOworCWl2b3JbMV0gPSBtZnNwcihTUFJOX0lWT1IzMyk7CisJaXZvclsyXSA9IG1mc3ByKFNQUk5fSVZPUjM0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpdm9yW2ldID4gbWF4X2l2b3IpCisJCQltYXhfaXZvciA9IGl2b3JbaV07CisKKwkJbWVtY3B5KCh2b2lkICopa3ZtcHBjX2Jvb2tlX2hhbmRsZXJzICsgaXZvcltpXSwKKwkJICAgICAgIGt2bXBwY19oYW5kbGVyc19zdGFydCArIChpICsgMTYpICoga3ZtcHBjX2hhbmRsZXJfbGVuLAorCQkgICAgICAga3ZtcHBjX2hhbmRsZXJfbGVuKTsKKwl9CisJZmx1c2hfaWNhY2hlX3JhbmdlKGt2bXBwY19ib29rZV9oYW5kbGVycywKKwkJCWt2bXBwY19ib29rZV9oYW5kbGVycyArIG1heF9pdm9yICsga3ZtcHBjX2hhbmRsZXJfbGVuKTsKKworCXJldHVybiBrdm1faW5pdChOVUxMLCBzaXplb2Yoc3RydWN0IGt2bXBwY192Y3B1X2U1MDApLCBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX2V4aXQodm9pZCkKK3sKKwlrdm1wcGNfYm9va2VfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChrdm1wcGNfZTUwMF9pbml0KTsKK21vZHVsZV9leGl0KGt2bXBwY19lNTAwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3NjA0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMsCisgKiBieSBIb2xsaXMgQmxhbmNoYXJkIDxob2xsaXNiQHVzLmlibS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKworI2luY2x1ZGUgImJvb2tlLmgiCisjaW5jbHVkZSAiZTUwMF90bGIuaCIKKworI2RlZmluZSBYT1BfVExCSVZBWCA3ODYKKyNkZWZpbmUgWE9QX1RMQlNYICAgOTE0CisjZGVmaW5lIFhPUF9UTEJSRSAgIDk0NgorI2RlZmluZSBYT1BfVExCV0UgICA5NzgKKworaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfb3Aoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluc3QsIGludCAqYWR2YW5jZSkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisJaW50IHJhOworCWludCByYjsKKworCXN3aXRjaCAoZ2V0X29wKGluc3QpKSB7CisJY2FzZSAzMToKKwkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CisKKwkJY2FzZSBYT1BfVExCUkU6CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxicmUodmNwdSk7CisJCQlicmVhazsKKworCQljYXNlIFhPUF9UTEJXRToKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJ3ZSh2Y3B1KTsKKwkJCWJyZWFrOworCisJCWNhc2UgWE9QX1RMQlNYOgorCQkJcmIgPSBnZXRfcmIoaW5zdCk7CisJCQllbXVsYXRlZCA9IGt2bXBwY19lNTAwX2VtdWxfdGxic3godmNwdSxyYik7CisJCQlicmVhazsKKworCQljYXNlIFhPUF9UTEJJVkFYOgorCQkJcmEgPSBnZXRfcmEoaW5zdCk7CisJCQlyYiA9IGdldF9yYihpbnN0KTsKKwkJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF90bGJpdmF4KHZjcHUsIHJhLCByYik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCWlmIChlbXVsYXRlZCA9PSBFTVVMQVRFX0ZBSUwpCisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfb3AocnVuLCB2Y3B1LCBpbnN0LCBhZHZhbmNlKTsKKworCXJldHVybiBlbXVsYXRlZDsKK30KKworaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKworCXN3aXRjaCAoc3BybikgeworCWNhc2UgU1BSTl9QSUQ6CisJCXZjcHVfZTUwMC0+cGlkWzBdID0gdmNwdS0+YXJjaC5zaGFkb3dfcGlkID0KKwkJCXZjcHUtPmFyY2gucGlkID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fUElEMToKKwkJdmNwdV9lNTAwLT5waWRbMV0gPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9QSUQyOgorCQl2Y3B1X2U1MDAtPnBpZFsyXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzA6CisJCXZjcHVfZTUwMC0+bWFzMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzE6CisJCXZjcHVfZTUwMC0+bWFzMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzI6CisJCXZjcHVfZTUwMC0+bWFzMiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzM6CisJCXZjcHVfZTUwMC0+bWFzMyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzQ6CisJCXZjcHVfZTUwMC0+bWFzNCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzY6CisJCXZjcHVfZTUwMC0+bWFzNiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX01BUzc6CisJCXZjcHVfZTUwMC0+bWFzNyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJY2FzZSBTUFJOX0wxQ1NSMToKKwkJdmNwdV9lNTAwLT5sMWNzcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9ISUQwOgorCQl2Y3B1X2U1MDAtPmhpZDAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCWNhc2UgU1BSTl9ISUQxOgorCQl2Y3B1X2U1MDAtPmhpZDEgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCisJY2FzZSBTUFJOX01NVUNTUjA6CisJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF9tdF9tbXVjc3IwKHZjcHVfZTUwMCwKKwkJCQl2Y3B1LT5hcmNoLmdwcltyc10pOworCQlicmVhazsKKworCS8qIGV4dHJhIGV4Y2VwdGlvbnMgKi8KKwljYXNlIFNQUk5fSVZPUjMyOgorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzM6CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNDoKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNToKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tdHNwcih2Y3B1LCBzcHJuLCBycyk7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQorCitpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCBpbnQgcnQpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCisJc3dpdGNoIChzcHJuKSB7CisJY2FzZSBTUFJOX1BJRDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5waWRbMF07IGJyZWFrOworCWNhc2UgU1BSTl9QSUQxOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFsxXTsgYnJlYWs7CisJY2FzZSBTUFJOX1BJRDI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+cGlkWzJdOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMwOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMxOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMyOyBicmVhazsKKwljYXNlIFNQUk5fTUFTMzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMzOyBicmVhazsKKwljYXNlIFNQUk5fTUFTNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM0OyBicmVhazsKKwljYXNlIFNQUk5fTUFTNjoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM2OyBicmVhazsKKwljYXNlIFNQUk5fTUFTNzoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM3OyBicmVhazsKKworCWNhc2UgU1BSTl9UTEIwQ0ZHOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1RMQjBDRkcpOworCQl2Y3B1LT5hcmNoLmdwcltydF0gJj0gfjB4ZmZmVUw7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzBdOworCQlicmVhazsKKworCWNhc2UgU1BSTl9UTEIxQ0ZHOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1RMQjFDRkcpOworCQl2Y3B1LT5hcmNoLmdwcltydF0gJj0gfjB4ZmZmVUw7CisJCXZjcHUtPmFyY2guZ3ByW3J0XSB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdOworCQlicmVhazsKKworCWNhc2UgU1BSTl9MMUNTUjE6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bDFjc3IxOyBicmVhazsKKwljYXNlIFNQUk5fSElEMDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5oaWQwOyBicmVhazsKKwljYXNlIFNQUk5fSElEMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5oaWQxOyBicmVhazsKKworCWNhc2UgU1BSTl9NTVVDU1IwOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSAwOyBicmVhazsKKworCS8qIGV4dHJhIGV4Y2VwdGlvbnMgKi8KKwljYXNlIFNQUk5fSVZPUjMyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTF07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JVk9SMzM6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNDoKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lWT1IzNToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUl07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbWZzcHIodmNwdSwgc3BybiwgcnQpOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzczZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKQEAgLTAsMCArMSw3NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgeXUubGl1QGZyZWVzY2FsZS5jb20KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBhcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9lNTAwLmg+CisKKyNpbmNsdWRlICIuLi9tbS9tbXVfZGVjbC5oIgorI2luY2x1ZGUgImU1MDBfdGxiLmgiCisKKyNkZWZpbmUgdG9faHRsYjFfZXNlbChlc2VsKSAodGxiMV9lbnRyeV9udW0gLSAoZXNlbCkgLSAxKQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRsYjFfZW50cnlfbnVtOworCit2b2lkIGt2bXBwY19kdW1wX3RsYnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXN0cnVjdCB0bGJlICp0bGJlOworCWludCBpLCB0bGJzZWw7CisKKwlwcmludGsoInwgJThzIHwgJThzIHwgJThzIHwgJThzIHwgJThzIHxcbiIsCisJCQkibnIiLCAibWFzMSIsICJtYXMyIiwgIm1hczMiLCAibWFzNyIpOworCisJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykgeworCQlwcmludGsoIkd1ZXN0IFRMQiVkOlxuIiwgdGxic2VsKTsKKwkJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgaSsrKSB7CisJCQl0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1baV07CisJCQlpZiAodGxiZS0+bWFzMSAmIE1BUzFfVkFMSUQpCisJCQkJcHJpbnRrKCIgR1slZF1bJTNkXSB8ICAlMDhYIHwgJTA4WCB8ICUwOFggfCAlMDhYIHxcbiIsCisJCQkJCXRsYnNlbCwgaSwgdGxiZS0+bWFzMSwgdGxiZS0+bWFzMiwKKwkJCQkJdGxiZS0+bWFzMywgdGxiZS0+bWFzNyk7CisJCX0KKwl9CisKKwlmb3IgKHRsYnNlbCA9IDA7IHRsYnNlbCA8IDI7IHRsYnNlbCsrKSB7CisJCXByaW50aygiU2hhZG93IFRMQiVkOlxuIiwgdGxic2VsKTsKKwkJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+c2hhZG93X3RsYl9zaXplW3RsYnNlbF07IGkrKykgeworCQkJdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtpXTsKKwkJCWlmICh0bGJlLT5tYXMxICYgTUFTMV9WQUxJRCkKKwkJCQlwcmludGsoIiBTWyVkXVslM2RdIHwgICUwOFggfCAlMDhYIHwgJTA4WCB8ICUwOFggfFxuIiwKKwkJCQkJdGxic2VsLCBpLCB0bGJlLT5tYXMxLCB0bGJlLT5tYXMyLAorCQkJCQl0bGJlLT5tYXMzLCB0bGJlLT5tYXM3KTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGxiMF9nZXRfbmV4dF92aWN0aW0oCisJCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJdW5zaWduZWQgaW50IHZpY3RpbTsKKworCXZpY3RpbSA9IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdKys7CisJaWYgKHVubGlrZWx5KHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdID49IEtWTV9FNTAwX1RMQjBfV0FZX05VTSkpCisJCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzBdID0gMDsKKworCXJldHVybiB2aWN0aW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRsYjFfbWF4X3NoYWRvd19zaXplKHZvaWQpCit7CisJcmV0dXJuIHRsYjFfZW50cnlfbnVtIC0gdGxiY2FtX2luZGV4OworfQorCitzdGF0aWMgaW5saW5lIGludCB0bGJlX2lzX3dyaXRhYmxlKHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiB0bGJlLT5tYXMzICYgKE1BUzNfU1d8TUFTM19VVyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGU1MDBfc2hhZG93X21hczNfYXR0cmliKHUzMiBtYXMzLCBpbnQgdXNlcm1vZGUpCit7CisJLyogTWFzayBvZmYgcmVzZXJ2ZWQgYml0cy4gKi8KKwltYXMzICY9IE1BUzNfQVRUUklCX01BU0s7CisKKwlpZiAoIXVzZXJtb2RlKSB7CisJCS8qIEd1ZXN0IGlzIGluIHN1cGVydmlzb3IgbW9kZSwKKwkJICogc28gd2UgbmVlZCB0byB0cmFuc2xhdGUgZ3Vlc3QKKwkJICogc3VwZXJ2aXNvciBwZXJtaXNzaW9ucyBpbnRvIHVzZXIgcGVybWlzc2lvbnMuICovCisJCW1hczMgJj0gfkU1MDBfVExCX1VTRVJfUEVSTV9NQVNLOworCQltYXMzIHw9IChtYXMzICYgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLKSA8PCAxOworCX0KKworCXJldHVybiBtYXMzIHwgRTUwMF9UTEJfU1VQRVJfUEVSTV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBlNTAwX3NoYWRvd19tYXMyX2F0dHJpYih1MzIgbWFzMiwgaW50IHVzZXJtb2RlKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gKG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLKSB8IE1BUzJfTTsKKyNlbHNlCisJcmV0dXJuIG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLOworI2VuZGlmCit9CisKKy8qCisgKiB3cml0aW5nIHNoYWRvdyB0bGIgZW50cnkgdG8gaG9zdCBUTEIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVfaG9zdF90bGJlKHN0cnVjdCB0bGJlICpzdGxiZSkKK3sKKwltdHNwcihTUFJOX01BUzEsIHN0bGJlLT5tYXMxKTsKKwltdHNwcihTUFJOX01BUzIsIHN0bGJlLT5tYXMyKTsKKwltdHNwcihTUFJOX01BUzMsIHN0bGJlLT5tYXMzKTsKKwltdHNwcihTUFJOX01BUzcsIHN0bGJlLT5tYXM3KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRsYndlXG4iIDogOiApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaG9zdF90bGJlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKHRsYnNlbCA9PSAwKSB7CisJCV9fd3JpdGVfaG9zdF90bGJlKHN0bGJlKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCByZWdpc3RlciBtYXMwOworCisJCW1hczAgPSBtZnNwcihTUFJOX01BUzApOworCisJCW10c3ByKFNQUk5fTUFTMCwgTUFTMF9UTEJTRUwoMSkgfCBNQVMwX0VTRUwodG9faHRsYjFfZXNlbChlc2VsKSkpOworCQlfX3dyaXRlX2hvc3RfdGxiZShzdGxiZSk7CisKKwkJbXRzcHIoU1BSTl9NQVMwLCBtYXMwKTsKKwl9CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgaTsKKwl1bnNpZ25lZCByZWdpc3RlciBtYXMwOworCisJLyogTG9hZCBhbGwgdmFsaWQgVExCMSBlbnRyaWVzIHRvIHJlZHVjZSBndWVzdCB0bGIgbWlzcyBmYXVsdCAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbWFzMCA9IG1mc3ByKFNQUk5fTUFTMCk7CisJZm9yIChpID0gMDsgaSA8IHRsYjFfbWF4X3NoYWRvd19zaXplKCk7IGkrKykgeworCQlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdW2ldOworCisJCWlmIChnZXRfdGxiX3Yoc3RsYmUpKSB7CisJCQltdHNwcihTUFJOX01BUzAsIE1BUzBfVExCU0VMKDEpCisJCQkJCXwgTUFTMF9FU0VMKHRvX2h0bGIxX2VzZWwoaSkpKTsKKwkJCV9fd3JpdGVfaG9zdF90bGJlKHN0bGJlKTsKKwkJfQorCX0KKwltdHNwcihTUFJOX01BUzAsIG1hczApOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKwordm9pZCBrdm1wcGNfZTUwMF90bGJfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlfdGxiaWxfYWxsKCk7Cit9CisKKy8qIFNlYXJjaCB0aGUgZ3Vlc3QgVExCIGZvciBhIG1hdGNoaW5nIGVudHJ5LiAqLworc3RhdGljIGludCBrdm1wcGNfZTUwMF90bGJfaW5kZXgoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJZ3ZhX3QgZWFkZHIsIGludCB0bGJzZWwsIHVuc2lnbmVkIGludCBwaWQsIGludCBhcykKK3sKKwlpbnQgaTsKKworCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbdGxic2VsXTsgaSsrKSB7CisJCXN0cnVjdCB0bGJlICp0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1baV07CisJCXVuc2lnbmVkIGludCB0aWQ7CisKKwkJaWYgKGVhZGRyIDwgZ2V0X3RsYl9lYWRkcih0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlYWRkciA+IGdldF90bGJfZW5kKHRsYmUpKQorCQkJY29udGludWU7CisKKwkJdGlkID0gZ2V0X3RsYl90aWQodGxiZSk7CisJCWlmICh0aWQgJiYgKHRpZCAhPSBwaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFnZXRfdGxiX3YodGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X3RsYl90cyh0bGJlKSAhPSBhcyAmJiBhcyAhPSAtMSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBpOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2Uoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCXN0cnVjdCBwYWdlICpwYWdlID0gdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXTsKKworCWlmIChwYWdlKSB7CisJCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzW3RsYnNlbF1bZXNlbF0gPSBOVUxMOworCisJCWlmIChnZXRfdGxiX3Yoc3RsYmUpKSB7CisJCQlpZiAodGxiZV9pc193cml0YWJsZShzdGxiZSkpCisJCQkJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCWVsc2UKKwkJCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF9zdGxiZV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1X2U1MDAtPnNoYWRvd190bGJbdGxic2VsXVtlc2VsXTsKKworCWt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwlzdGxiZS0+bWFzMSA9IDA7CisJS1ZNVFJBQ0VfNUQoU1RMQl9JTlZBTCwgJnZjcHVfZTUwMC0+dmNwdSwgaW5kZXhfb2YodGxic2VsLCBlc2VsKSwKKwkJCXN0bGJlLT5tYXMxLCBzdGxiZS0+bWFzMiwgc3RsYmUtPm1hczMsIHN0bGJlLT5tYXM3LAorCQkJaGFuZGxlcik7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19lNTAwX3RsYjFfaW52YWxpZGF0ZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCQlndmFfdCBlYWRkciwgZ3ZhX3QgZWVuZCwgdTMyIHRpZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGlkID0gdGlkICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJZm9yIChpID0gMDsgaSA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV07IGkrKykgeworCQlzdHJ1Y3QgdGxiZSAqc3RsYmUgPSAmdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdW2ldOworCQl1bnNpZ25lZCBpbnQgdGlkOworCisJCWlmICghZ2V0X3RsYl92KHN0bGJlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlZW5kIDwgZ2V0X3RsYl9lYWRkcihzdGxiZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZWFkZHIgPiBnZXRfdGxiX2VuZChzdGxiZSkpCisJCQljb250aW51ZTsKKworCQl0aWQgPSBnZXRfdGxiX3RpZChzdGxiZSk7CisJCWlmICh0aWQgJiYgKHRpZCAhPSBwaWQpKQorCQkJY29udGludWU7CisKKwkJa3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIDEsIGkpOworCQl3cml0ZV9ob3N0X3RsYmUodmNwdV9lNTAwLCAxLCBpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfZTUwMF9kZWxpdmVyX3RsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJdW5zaWduZWQgaW50IGVhZGRyLCBpbnQgYXMpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJdW5zaWduZWQgaW50IHZpY3RpbSwgcGlkc2VsLCB0c2l6ZWQ7CisJaW50IHRsYnNlbDsKKworCS8qIHNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4gKi8KKwl0bGJzZWwgPSAodmNwdV9lNTAwLT5tYXM0ID4+IDI4KSAmIDB4MTsKKwl2aWN0aW0gPSAodGxic2VsID09IDApID8gdGxiMF9nZXRfbmV4dF92aWN0aW0odmNwdV9lNTAwKSA6IDA7CisJcGlkc2VsID0gKHZjcHVfZTUwMC0+bWFzNCA+PiAxNikgJiAweGY7CisJdHNpemVkID0gKHZjcHVfZTUwMC0+bWFzNCA+PiA4KSAmIDB4ZjsKKworCXZjcHVfZTUwMC0+bWFzMCA9IE1BUzBfVExCU0VMKHRsYnNlbCkgfCBNQVMwX0VTRUwodmljdGltKQorCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJdmNwdV9lNTAwLT5tYXMxID0gTUFTMV9WQUxJRCB8IChhcyA/IE1BUzFfVFMgOiAwKQorCQl8IE1BUzFfVElEKHZjcHVfZTUwMC0+cGlkW3BpZHNlbF0pCisJCXwgTUFTMV9UU0laRSh0c2l6ZWQpOworCXZjcHVfZTUwMC0+bWFzMiA9IChlYWRkciAmIE1BUzJfRVBOKQorCQl8ICh2Y3B1X2U1MDAtPm1hczQgJiBNQVMyX0FUVFJJQl9NQVNLKTsKKwl2Y3B1X2U1MDAtPm1hczMgJj0gTUFTM19VMCB8IE1BUzNfVTEgfCBNQVMzX1UyIHwgTUFTM19VMzsKKwl2Y3B1X2U1MDAtPm1hczYgPSAodmNwdV9lNTAwLT5tYXM2ICYgTUFTNl9TUElEMSkKKwkJfCAoZ2V0X2N1cl9waWQodmNwdSkgPDwgMTYpCisJCXwgKGFzID8gTUFTNl9TQVMgOiAwKTsKKwl2Y3B1X2U1MDAtPm1hczcgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX2U1MDBfc2hhZG93X21hcChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLAorCXU2NCBndmFkZHIsIGdmbl90IGdmbiwgc3RydWN0IHRsYmUgKmd0bGJlLCBpbnQgdGxic2VsLCBpbnQgZXNlbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CisJc3RydWN0IHRsYmUgKnN0bGJlOworCWhwYV90IGhwYWRkcjsKKworCXN0bGJlID0gJnZjcHVfZTUwMC0+c2hhZG93X3RsYlt0bGJzZWxdW2VzZWxdOworCisJLyogR2V0IHJlZmVyZW5jZSB0byBuZXcgcGFnZS4gKi8KKwluZXdfcGFnZSA9IGdmbl90b19wYWdlKHZjcHVfZTUwMC0+dmNwdS5rdm0sIGdmbik7CisJaWYgKGlzX2Vycm9yX3BhZ2UobmV3X3BhZ2UpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ2V0IGd1ZXN0IHBhZ2UgZm9yIGdmbiAlbHghXG4iLCBnZm4pOworCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKG5ld19wYWdlKTsKKwkJcmV0dXJuOworCX0KKwlocGFkZHIgPSBwYWdlX3RvX3BoeXMobmV3X3BhZ2UpOworCisJLyogRHJvcCByZWZlcmVuY2UgdG8gb2xkIHBhZ2UuICovCisJa3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2UodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCisJdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXSA9IG5ld19wYWdlOworCisJLyogRm9yY2UgVFM9MSBJUFJPVD0wIFRTSVpFPTRLQiBmb3IgYWxsIGd1ZXN0IG1hcHBpbmdzLiAqLworCXN0bGJlLT5tYXMxID0gTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspCisJCXwgTUFTMV9USUQoZ2V0X3RsYl90aWQoZ3RsYmUpKSB8IE1BUzFfVFMgfCBNQVMxX1ZBTElEOworCXN0bGJlLT5tYXMyID0gKGd2YWRkciAmIE1BUzJfRVBOKQorCQl8IGU1MDBfc2hhZG93X21hczJfYXR0cmliKGd0bGJlLT5tYXMyLAorCQkJCXZjcHVfZTUwMC0+dmNwdS5hcmNoLm1zciAmIE1TUl9QUik7CisJc3RsYmUtPm1hczMgPSAoaHBhZGRyICYgTUFTM19SUE4pCisJCXwgZTUwMF9zaGFkb3dfbWFzM19hdHRyaWIoZ3RsYmUtPm1hczMsCisJCQkJdmNwdV9lNTAwLT52Y3B1LmFyY2gubXNyICYgTVNSX1BSKTsKKwlzdGxiZS0+bWFzNyA9IChocGFkZHIgPj4gMzIpICYgTUFTN19SUE47CisKKwlLVk1UUkFDRV81RChTVExCX1dSSVRFLCAmdmNwdV9lNTAwLT52Y3B1LCBpbmRleF9vZih0bGJzZWwsIGVzZWwpLAorCQkJc3RsYmUtPm1hczEsIHN0bGJlLT5tYXMyLCBzdGxiZS0+bWFzMywgc3RsYmUtPm1hczcsCisJCQloYW5kbGVyKTsKK30KKworLyogWFhYIG9ubHkgbWFwIHRoZSBvbmUtb25lIGNhc2UsIGZvciBub3cgdXNlIFRMQjAgKi8KK3N0YXRpYyBpbnQga3ZtcHBjX2U1MDBfc3RsYmVfbWFwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwsIGludCBlc2VsKQoreworCXN0cnVjdCB0bGJlICpndGxiZTsKKworCWd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlrdm1wcGNfZTUwMF9zaGFkb3dfbWFwKHZjcHVfZTUwMCwgZ2V0X3RsYl9lYWRkcihndGxiZSksCisJCQlnZXRfdGxiX3JhZGRyKGd0bGJlKSA+PiBQQUdFX1NISUZULAorCQkJZ3RsYmUsIHRsYnNlbCwgZXNlbCk7CisKKwlyZXR1cm4gZXNlbDsKK30KKworLyogQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBndWVzdCBUTEIgZW50cnkgaXMgc2FmZSB0byBpbnNlcnQgaW50bworICogdGhlIHNoYWRvdyBUTEIuICovCisvKiBYWFggZm9yIGJvdGggb25lLW9uZSBhbmQgb25lLXRvLW1hbnkgLCBmb3Igbm93IHVzZSBUTEIxICovCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX3RsYjFfbWFwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCXU2NCBndmFkZHIsIGdmbl90IGdmbiwgc3RydWN0IHRsYmUgKmd0bGJlKQoreworCXVuc2lnbmVkIGludCB2aWN0aW07CisKKwl2aWN0aW0gPSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlsxXSsrOworCisJaWYgKHVubGlrZWx5KHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252WzFdID49IHRsYjFfbWF4X3NoYWRvd19zaXplKCkpKQorCQl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9udlsxXSA9IDA7CisKKwlrdm1wcGNfZTUwMF9zaGFkb3dfbWFwKHZjcHVfZTUwMCwgZ3ZhZGRyLCBnZm4sIGd0bGJlLCAxLCB2aWN0aW0pOworCisJcmV0dXJuIHZpY3RpbTsKK30KKworLyogSW52YWxpZGF0ZSBhbGwgZ3Vlc3Qga2VybmVsIG1hcHBpbmdzIHdoZW4gZW50ZXIgdXNlcm1vZGUsCisgKiBzbyB0aGF0IHdoZW4gdGhleSBmYXVsdCBiYWNrIGluIHRoZXkgd2lsbCBnZXQgdGhlCisgKiBwcm9wZXIgcGVybWlzc2lvbiBiaXRzLiAqLwordm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKQoreworCWlmICh1c2VybW9kZSkgeworCQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwkJaW50IGk7CisKKwkJLyogWFhYIFJlcGxhY2UgbG9vcCB3aXRoIGZhbmN5IGRhdGEgc3RydWN0dXJlcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHRsYjFfbWF4X3NoYWRvd19zaXplKCk7IGkrKykKKwkJCWt2bXBwY19lNTAwX3N0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAxLCBpKTsKKworCQlfdGxiaWxfYWxsKCk7CisJfQorfQorCitzdGF0aWMgaW50IGt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwKKwkJaW50IHRsYnNlbCwgaW50IGVzZWwpCit7CisJc3RydWN0IHRsYmUgKmd0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiW3RsYnNlbF1bZXNlbF07CisKKwlpZiAodW5saWtlbHkoZ2V0X3RsYl9pcHJvdChndGxiZSkpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodGxic2VsID09IDEpIHsKKwkJa3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgZ2V0X3RsYl9lYWRkcihndGxiZSksCisJCQkJZ2V0X3RsYl9lbmQoZ3RsYmUpLAorCQkJCWdldF90bGJfdGlkKGd0bGJlKSk7CisJfSBlbHNlIHsKKwkJa3ZtcHBjX2U1MDBfc3RsYmVfaW52YWxpZGF0ZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CisJfQorCisJZ3RsYmUtPm1hczEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX210X21tdWNzcjAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCwgdWxvbmcgdmFsdWUpCit7CisJaW50IGVzZWw7CisKKwlpZiAodmFsdWUgJiBNTVVDU1IwX1RMQjBGSSkKKwkJZm9yIChlc2VsID0gMDsgZXNlbCA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMF07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAwLCBlc2VsKTsKKwlpZiAodmFsdWUgJiBNTVVDU1IwX1RMQjFGSSkKKwkJZm9yIChlc2VsID0gMDsgZXNlbCA8IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMV07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCAxLCBlc2VsKTsKKworCV90bGJpbF9hbGwoKTsKKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CisKK2ludCBrdm1wcGNfZTUwMF9lbXVsX3RsYml2YXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmEsIGludCByYikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwl1bnNpZ25lZCBpbnQgaWE7CisJaW50IGVzZWwsIHRsYnNlbDsKKwlndmFfdCBlYTsKKworCWVhID0gKChyYSkgPyB2Y3B1LT5hcmNoLmdwcltyYV0gOiAwKSArIHZjcHUtPmFyY2guZ3ByW3JiXTsKKworCWlhID0gKGVhID4+IDIpICYgMHgxOworCisJLyogc2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLiAqLworCXRsYnNlbCA9IChlYSA+PiAzKSAmIDB4MTsKKworCWlmIChpYSkgeworCQkvKiBpbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovCisJCWZvciAoZXNlbCA9IDA7IGVzZWwgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGVzZWwrKykKKwkJCWt2bXBwY19lNTAwX2d0bGJlX2ludmFsaWRhdGUodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOworCX0gZWxzZSB7CisJCWVhICY9IDB4ZmZmZmYwMDA7CisJCWVzZWwgPSBrdm1wcGNfZTUwMF90bGJfaW5kZXgodmNwdV9lNTAwLCBlYSwgdGxic2VsLAorCQkJCWdldF9jdXJfcGlkKHZjcHUpLCAtMSk7CisJCWlmIChlc2VsID49IDApCisJCQlrdm1wcGNfZTUwMF9ndGxiZV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgdGxic2VsLCBlc2VsKTsKKwl9CisKKwlfdGxiaWxfYWxsKCk7CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IHRsYnNlbCwgZXNlbDsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmU7CisKKwl0bGJzZWwgPSBnZXRfdGxiX3RsYnNlbCh2Y3B1X2U1MDApOworCWVzZWwgPSBnZXRfdGxiX2VzZWwodmNwdV9lNTAwLCB0bGJzZWwpOworCisJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKwl2Y3B1X2U1MDAtPm1hczAgJj0gfk1BUzBfTlYofjApOworCXZjcHVfZTUwMC0+bWFzMCB8PSBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCXZjcHVfZTUwMC0+bWFzMSA9IGd0bGJlLT5tYXMxOworCXZjcHVfZTUwMC0+bWFzMiA9IGd0bGJlLT5tYXMyOworCXZjcHVfZTUwMC0+bWFzMyA9IGd0bGJlLT5tYXMzOworCXZjcHVfZTUwMC0+bWFzNyA9IGd0bGJlLT5tYXM3OworCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxic3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmIpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGFzID0gISFnZXRfY3VyX3Nhcyh2Y3B1X2U1MDApOworCXVuc2lnbmVkIGludCBwaWQgPSBnZXRfY3VyX3NwaWQodmNwdV9lNTAwKTsKKwlpbnQgZXNlbCwgdGxic2VsOworCXN0cnVjdCB0bGJlICpndGxiZSA9IE5VTEw7CisJZ3ZhX3QgZWE7CisKKwllYSA9IHZjcHUtPmFyY2guZ3ByW3JiXTsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJZXNlbCA9IGt2bXBwY19lNTAwX3RsYl9pbmRleCh2Y3B1X2U1MDAsIGVhLCB0bGJzZWwsIHBpZCwgYXMpOworCQlpZiAoZXNlbCA+PSAwKSB7CisJCQlndGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZ3RsYmUpIHsKKwkJdmNwdV9lNTAwLT5tYXMwID0gTUFTMF9UTEJTRUwodGxic2VsKSB8IE1BUzBfRVNFTChlc2VsKQorCQkJfCBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOworCQl2Y3B1X2U1MDAtPm1hczEgPSBndGxiZS0+bWFzMTsKKwkJdmNwdV9lNTAwLT5tYXMyID0gZ3RsYmUtPm1hczI7CisJCXZjcHVfZTUwMC0+bWFzMyA9IGd0bGJlLT5tYXMzOworCQl2Y3B1X2U1MDAtPm1hczcgPSBndGxiZS0+bWFzNzsKKwl9IGVsc2UgeworCQlpbnQgdmljdGltOworCisJCS8qIHNpbmNlIHdlIG9ubHkgaGF2ZSB0d28gVExCcywgb25seSBsb3dlciBiaXQgaXMgdXNlZC4gKi8KKwkJdGxic2VsID0gdmNwdV9lNTAwLT5tYXM0ID4+IDI4ICYgMHgxOworCQl2aWN0aW0gPSAodGxic2VsID09IDApID8gdGxiMF9nZXRfbmV4dF92aWN0aW0odmNwdV9lNTAwKSA6IDA7CisKKwkJdmNwdV9lNTAwLT5tYXMwID0gTUFTMF9UTEJTRUwodGxic2VsKSB8IE1BUzBfRVNFTCh2aWN0aW0pCisJCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CisJCXZjcHVfZTUwMC0+bWFzMSA9ICh2Y3B1X2U1MDAtPm1hczYgJiBNQVM2X1NQSUQwKQorCQkJfCAodmNwdV9lNTAwLT5tYXM2ICYgKE1BUzZfU0FTID8gTUFTMV9UUyA6IDApKQorCQkJfCAodmNwdV9lNTAwLT5tYXM0ICYgTUFTNF9UU0laRUQofjApKTsKKwkJdmNwdV9lNTAwLT5tYXMyICY9IE1BUzJfRVBOOworCQl2Y3B1X2U1MDAtPm1hczIgfD0gdmNwdV9lNTAwLT5tYXM0ICYgTUFTMl9BVFRSSUJfTUFTSzsKKwkJdmNwdV9lNTAwLT5tYXMzICY9IE1BUzNfVTAgfCBNQVMzX1UxIHwgTUFTM19VMiB8IE1BUzNfVTM7CisJCXZjcHVfZTUwMC0+bWFzNyA9IDA7CisJfQorCisJcmV0dXJuIEVNVUxBVEVfRE9ORTsKK30KKworaW50IGt2bXBwY19lNTAwX2VtdWxfdGxid2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAgPSB0b19lNTAwKHZjcHUpOworCXU2NCBlYWRkcjsKKwl1NjQgcmFkZHI7CisJdTMyIHRpZDsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmU7CisJaW50IHRsYnNlbCwgZXNlbCwgc3RsYnNlbCwgc2VzZWw7CisKKwl0bGJzZWwgPSBnZXRfdGxiX3RsYnNlbCh2Y3B1X2U1MDApOworCWVzZWwgPSBnZXRfdGxiX2VzZWwodmNwdV9lNTAwLCB0bGJzZWwpOworCisJZ3RsYmUgPSAmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsXVtlc2VsXTsKKworCWlmIChnZXRfdGxiX3YoZ3RsYmUpICYmIHRsYnNlbCA9PSAxKSB7CisJCWVhZGRyID0gZ2V0X3RsYl9lYWRkcihndGxiZSk7CisJCXRpZCA9IGdldF90bGJfdGlkKGd0bGJlKTsKKwkJa3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHZjcHVfZTUwMCwgZWFkZHIsCisJCQkJZ2V0X3RsYl9lbmQoZ3RsYmUpLCB0aWQpOworCX0KKworCWd0bGJlLT5tYXMxID0gdmNwdV9lNTAwLT5tYXMxOworCWd0bGJlLT5tYXMyID0gdmNwdV9lNTAwLT5tYXMyOworCWd0bGJlLT5tYXMzID0gdmNwdV9lNTAwLT5tYXMzOworCWd0bGJlLT5tYXM3ID0gdmNwdV9lNTAwLT5tYXM3OworCisJS1ZNVFJBQ0VfNUQoR1RMQl9XUklURSwgdmNwdSwgdmNwdV9lNTAwLT5tYXMwLAorCQkJZ3RsYmUtPm1hczEsIGd0bGJlLT5tYXMyLCBndGxiZS0+bWFzMywgZ3RsYmUtPm1hczcsCisJCQloYW5kbGVyKTsKKworCS8qIEludmFsaWRhdGUgc2hhZG93IG1hcHBpbmdzIGZvciB0aGUgYWJvdXQtdG8tYmUtY2xvYmJlcmVkIFRMQkUuICovCisJaWYgKHRsYmVfaXNfaG9zdF9zYWZlKHZjcHUsIGd0bGJlKSkgeworCQlzd2l0Y2ggKHRsYnNlbCkgeworCQljYXNlIDA6CisJCQkvKiBUTEIwICovCisJCQlndGxiZS0+bWFzMSAmPSB+TUFTMV9UU0laRSh+MCk7CisJCQlndGxiZS0+bWFzMSB8PSBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80Syk7CisKKwkJCXN0bGJzZWwgPSAwOworCQkJc2VzZWwgPSBrdm1wcGNfZTUwMF9zdGxiZV9tYXAodmNwdV9lNTAwLCAwLCBlc2VsKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSAxOgorCQkJLyogVExCMSAqLworCQkJZWFkZHIgPSBnZXRfdGxiX2VhZGRyKGd0bGJlKTsKKwkJCXJhZGRyID0gZ2V0X3RsYl9yYWRkcihndGxiZSk7CisKKwkJCS8qIENyZWF0ZSBhIDRLQiBtYXBwaW5nIG9uIHRoZSBob3N0LgorCQkJICogSWYgdGhlIGd1ZXN0IHdhbnRlZCBhIGxhcmdlIHBhZ2UsCisJCQkgKiBvbmx5IHRoZSBmaXJzdCA0S0IgaXMgbWFwcGVkIGhlcmUgYW5kIHRoZSByZXN0CisJCQkgKiBhcmUgbWFwcGVkIG9uIHRoZSBmbHkuICovCisJCQlzdGxic2VsID0gMTsKKwkJCXNlc2VsID0ga3ZtcHBjX2U1MDBfdGxiMV9tYXAodmNwdV9lNTAwLCBlYWRkciwKKwkJCQkJcmFkZHIgPj4gUEFHRV9TSElGVCwgZ3RsYmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJCXdyaXRlX2hvc3RfdGxiZSh2Y3B1X2U1MDAsIHN0bGJzZWwsIHNlc2VsKTsKKwl9CisKKwlyZXR1cm4gRU1VTEFURV9ET05FOworfQorCitpbnQga3ZtcHBjX21tdV9pdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpOworCisJcmV0dXJuIGt2bXBwY19lNTAwX3RsYl9zZWFyY2godmNwdSwgZWFkZHIsIGdldF9jdXJfcGlkKHZjcHUpLCBhcyk7Cit9CisKK2ludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgYXMgPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUyk7CisKKwlyZXR1cm4ga3ZtcHBjX2U1MDBfdGxiX3NlYXJjaCh2Y3B1LCBlYWRkciwgZ2V0X2N1cl9waWQodmNwdSksIGFzKTsKK30KKwordm9pZCBrdm1wcGNfbW11X2l0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgaW50IGFzID0gISEodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVMpOworCisJa3ZtcHBjX2U1MDBfZGVsaXZlcl90bGJfbWlzcyh2Y3B1LCB2Y3B1LT5hcmNoLnBjLCBhcyk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGludCBhcyA9ICEhKHZjcHUtPmFyY2gubXNyICYgTVNSX0RTKTsKKworCWt2bXBwY19lNTAwX2RlbGl2ZXJfdGxiX21pc3ModmNwdSwgdmNwdS0+YXJjaC5mYXVsdF9kZWFyLCBhcyk7Cit9CisKK2dwYV90IGt2bXBwY19tbXVfeGxhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQlndmFfdCBlYWRkcikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlzdHJ1Y3QgdGxiZSAqZ3RsYmUgPQorCQkmdmNwdV9lNTAwLT5ndWVzdF90bGJbdGxic2VsX29mKGluZGV4KV1bZXNlbF9vZihpbmRleCldOworCXU2NCBwZ21hc2sgPSBnZXRfdGxiX2J5dGVzKGd0bGJlKSAtIDE7CisKKwlyZXR1cm4gZ2V0X3RsYl9yYWRkcihndGxiZSkgfCAoZWFkZHIgJiBwZ21hc2spOworfQorCit2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IHRsYnNlbCwgaTsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspCisJCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplW3RsYnNlbF07IGkrKykKKwkJCWt2bXBwY19lNTAwX3NoYWRvd19yZWxlYXNlKHZjcHVfZTUwMCwgdGxic2VsLCBpKTsKKworCS8qIGRpc2NhcmQgYWxsIGd1ZXN0IG1hcHBpbmcgKi8KKwlfdGxiaWxfYWxsKCk7Cit9CisKK3ZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWFkZHIsIGdwYV90IGdwYWRkciwKKwkJCXVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKwlpbnQgdGxic2VsID0gdGxic2VsX29mKGluZGV4KTsKKwlpbnQgZXNlbCA9IGVzZWxfb2YoaW5kZXgpOworCWludCBzdGxic2VsLCBzZXNlbDsKKworCXN3aXRjaCAodGxic2VsKSB7CisJY2FzZSAwOgorCQlzdGxic2VsID0gMDsKKwkJc2VzZWwgPSBlc2VsOworCQlicmVhazsKKworCWNhc2UgMTogeworCQlnZm5fdCBnZm4gPSBncGFkZHIgPj4gUEFHRV9TSElGVDsKKwkJc3RydWN0IHRsYmUgKmd0bGJlCisJCQk9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlt0bGJzZWxdW2VzZWxdOworCisJCXN0bGJzZWwgPSAxOworCQlzZXNlbCA9IGt2bXBwY19lNTAwX3RsYjFfbWFwKHZjcHVfZTUwMCwgZWFkZHIsIGdmbiwgZ3RsYmUpOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXdyaXRlX2hvc3RfdGxiZSh2Y3B1X2U1MDAsIHN0bGJzZWwsIHNlc2VsKTsKK30KKworaW50IGt2bXBwY19lNTAwX3RsYl9zZWFyY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCWd2YV90IGVhZGRyLCB1bnNpZ25lZCBpbnQgcGlkLCBpbnQgYXMpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CisJaW50IGVzZWwsIHRsYnNlbDsKKworCWZvciAodGxic2VsID0gMDsgdGxic2VsIDwgMjsgdGxic2VsKyspIHsKKwkJZXNlbCA9IGt2bXBwY19lNTAwX3RsYl9pbmRleCh2Y3B1X2U1MDAsIGVhZGRyLCB0bGJzZWwsIHBpZCwgYXMpOworCQlpZiAoZXNlbCA+PSAwKQorCQkJcmV0dXJuIGluZGV4X29mKHRsYnNlbCwgZXNlbCk7CisJfQorCisJcmV0dXJuIC0xOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl9zZXR1cChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXN0cnVjdCB0bGJlICp0bGJlOworCisJLyogSW5zZXJ0IGxhcmdlIGluaXRpYWwgbWFwcGluZyBmb3IgZ3Vlc3QuICovCisJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVswXTsKKwl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzI1Nk0pOworCXRsYmUtPm1hczIgPSAwOworCXRsYmUtPm1hczMgPSBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0s7CisJdGxiZS0+bWFzNyA9IDA7CisKKwkvKiA0SyBtYXAgZm9yIHNlcmlhbCBvdXRwdXQuIFVzZWQgYnkga2VybmVsIHdyYXBwZXIuICovCisJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVsxXTsKKwl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzRLKTsKKwl0bGJlLT5tYXMyID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IE1BUzJfSSB8IE1BUzJfRzsKKwl0bGJlLT5tYXMzID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSzsKKwl0bGJlLT5tYXM3ID0gMDsKK30KKworaW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJdGxiMV9lbnRyeV9udW0gPSBtZnNwcihTUFJOX1RMQjFDRkcpICYgMHhGRkY7CisKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzBdID0gS1ZNX0U1MDBfVExCMF9TSVpFOworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5ndWVzdF90bGJbMF0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0OworCisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiX3NpemVbMF0gPSBLVk1fRTUwMF9UTEIwX1NJWkU7CisJdmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9ndWVzdDA7CisKKwl2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdID0gS1ZNX0U1MDBfVExCMV9TSVpFOworCXZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHRsYmUpICogS1ZNX0U1MDBfVExCMV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5ndWVzdF90bGJbMV0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X3NoYWRvdzA7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd190bGJfc2l6ZVsxXSA9IHRsYjFfZW50cnlfbnVtOworCXZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bGJlKSAqIHRsYjFfZW50cnlfbnVtLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzFdID09IE5VTEwpCisJCWdvdG8gZXJyX291dF9ndWVzdDE7CisKKwl2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSA9IChzdHJ1Y3QgcGFnZSAqKikKKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBLVk1fRTUwMF9UTEIwX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1swXSA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfc2hhZG93MTsKKworCXZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzFdID0gKHN0cnVjdCBwYWdlICoqKQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIHRsYjFfZW50cnlfbnVtLCBHRlBfS0VSTkVMKTsKKwlpZiAodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMV0gPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0X3BhZ2UwOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcGFnZTA6CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0pOworZXJyX291dF9zaGFkb3cxOgorCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSk7CitlcnJfb3V0X2d1ZXN0MToKKwlrZnJlZSh2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXSk7CitlcnJfb3V0X3NoYWRvdzA6CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfdGxiWzBdKTsKK2Vycl9vdXRfZ3Vlc3QwOgorCWtmcmVlKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzBdKTsKK2Vycl9vdXQ6CisJcmV0dXJuIC0xOworfQorCit2b2lkIGt2bXBwY19lNTAwX3RsYl91bmluaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCkKK3sKKwlrZnJlZSh2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1sxXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbMF0pOworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlsxXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMV0pOworCWtmcmVlKHZjcHVfZTUwMC0+c2hhZG93X3RsYlswXSk7CisJa2ZyZWUodmNwdV9lNTAwLT5ndWVzdF90bGJbMF0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjA2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgeXUubGl1QGZyZWVzY2FsZS5jb20KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBhcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuaCwKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19LVk1fRTUwMF9UTEJfSF9fCisjZGVmaW5lIF9fS1ZNX0U1MDBfVExCX0hfXworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vbW11LWZzbC1ib29rZS5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KKworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX0JJVAk3CS8qIEZpeGVkICovCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkUJCSgxVUwgPDwgS1ZNX0U1MDBfVExCMF9XQVlfU0laRV9CSVQpCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX1NJWkVfTUFTSwkoS1ZNX0U1MDBfVExCMF9XQVlfU0laRSAtIDEpCisKKyNkZWZpbmUgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX0JJVAkxCS8qIE5vIGdyZWF0ZXIgdGhhbiA3ICovCisjZGVmaW5lIEtWTV9FNTAwX1RMQjBfV0FZX05VTQkJKDFVTCA8PCBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fQklUKQorI2RlZmluZSBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fTUFTSwkoS1ZNX0U1MDBfVExCMF9XQVlfTlVNIC0gMSkKKworI2RlZmluZSBLVk1fRTUwMF9UTEIwX1NJWkUgIChLVk1fRTUwMF9UTEIwX1dBWV9TSVpFICogS1ZNX0U1MDBfVExCMF9XQVlfTlVNKQorI2RlZmluZSBLVk1fRTUwMF9UTEIxX1NJWkUgIDE2CisKKyNkZWZpbmUgaW5kZXhfb2YodGxic2VsLCBlc2VsKQkoKCh0bGJzZWwpIDw8IDE2KSB8ICgoZXNlbCkgJiAweEZGRkYpKQorI2RlZmluZSB0bGJzZWxfb2YoaW5kZXgpCSgoaW5kZXgpID4+IDE2KQorI2RlZmluZSBlc2VsX29mKGluZGV4KQkJKChpbmRleCkgJiAweEZGRkYpCisKKyNkZWZpbmUgRTUwMF9UTEJfVVNFUl9QRVJNX01BU0sgKE1BUzNfVVh8TUFTM19VUnxNQVMzX1VXKQorI2RlZmluZSBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0sgKE1BUzNfU1h8TUFTM19TUnxNQVMzX1NXKQorI2RlZmluZSBNQVMyX0FUVFJJQl9NQVNLIFwKKwkgIChNQVMyX1gwIHwgTUFTMl9YMSkKKyNkZWZpbmUgTUFTM19BVFRSSUJfTUFTSyBcCisJICAoTUFTM19VMCB8IE1BUzNfVTEgfCBNQVMzX1UyIHwgTUFTM19VMyBcCisJICAgfCBFNTAwX1RMQl9VU0VSX1BFUk1fTUFTSyB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSykKKworZXh0ZXJuIHZvaWQga3ZtcHBjX2R1bXBfdGxicyhzdHJ1Y3Qga3ZtX3ZjcHUgKik7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfbXRfbW11Y3NyMChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqLCB1bG9uZyk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxid2Uoc3RydWN0IGt2bV92Y3B1ICopOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF9lbXVsX3RsYnJlKHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiBpbnQga3ZtcHBjX2U1MDBfZW11bF90bGJpdmF4KHN0cnVjdCBrdm1fdmNwdSAqLCBpbnQsIGludCk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX2VtdWxfdGxic3goc3RydWN0IGt2bV92Y3B1ICosIGludCk7CitleHRlcm4gaW50IGt2bXBwY19lNTAwX3RsYl9zZWFyY2goc3RydWN0IGt2bV92Y3B1ICosIGd2YV90LCB1bnNpZ25lZCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfcHV0KHN0cnVjdCBrdm1fdmNwdSAqKTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqLCBpbnQpOworZXh0ZXJuIGludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqKTsKK2V4dGVybiB2b2lkIGt2bXBwY19lNTAwX3RsYl91bmluaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKik7CitleHRlcm4gdm9pZCBrdm1wcGNfZTUwMF90bGJfc2V0dXAoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKik7CisKKy8qIFRMQiBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3NpemUoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDgpICYgMHhmOworfQorCitzdGF0aWMgaW5saW5lIGd2YV90IGdldF90bGJfZWFkZHIoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCit7CisJcmV0dXJuIHRsYmUtPm1hczIgJiAweGZmZmZmMDAwOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGxiX2J5dGVzKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXVuc2lnbmVkIGludCBwZ3NpemUgPSBnZXRfdGxiX3NpemUodGxiZSk7CisJcmV0dXJuIDFVTEwgPDwgMTAgPDwgKHBnc2l6ZSA8PCAxKTsKK30KKworc3RhdGljIGlubGluZSBndmFfdCBnZXRfdGxiX2VuZChjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwl1NjQgYnl0ZXMgPSBnZXRfdGxiX2J5dGVzKHRsYmUpOworCXJldHVybiBnZXRfdGxiX2VhZGRyKHRsYmUpICsgYnl0ZXMgLSAxOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGxiX3JhZGRyKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXU2NCBycG4gPSB0bGJlLT5tYXM3OworCXJldHVybiAocnBuIDw8IDMyKSB8ICh0bGJlLT5tYXMzICYgMHhmZmZmZjAwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdGlkKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAxNikgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX3RzKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAxMikgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfdihjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKK3sKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gMzEpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2lwcm90KGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCXJldHVybiAodGxiZS0+bWFzMSA+PiAzMCkgJiAweDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jdXJfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5waWQgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3VyX3NwaWQoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuICh2Y3B1X2U1MDAtPm1hczYgPj4gMTYpICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2N1cl9zYXMoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuIHZjcHVfZTUwMC0+bWFzNiAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl90bGJzZWwoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJLyoKKwkgKiBNYW51YWwgc2F5cyB0aGF0IHRsYnNlbCBoYXMgMiBiaXRzIHdpZGUuCisJICogU2luY2Ugd2Ugb25seSBoYXZlIHR3byBUTEJzLCBvbmx5IGxvd2VyIGJpdCBpcyB1c2VkLgorCSAqLworCXJldHVybiAodmNwdV9lNTAwLT5tYXMwID4+IDI4KSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9udl9iaXQoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCit7CisJcmV0dXJuIHZjcHVfZTUwMC0+bWFzMCAmIDB4ZmZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2VzZWxfYml0KAorCQljb25zdCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKQoreworCXJldHVybiAodmNwdV9lNTAwLT5tYXMwID4+IDE2KSAmIDB4ZmZmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfdGxiX2VzZWwoCisJCWNvbnN0IHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCisJCWludCB0bGJzZWwpCit7CisJdW5zaWduZWQgaW50IGVzZWwgPSBnZXRfdGxiX2VzZWxfYml0KHZjcHVfZTUwMCk7CisKKwlpZiAodGxic2VsID09IDApIHsKKwkJZXNlbCAmPSBLVk1fRTUwMF9UTEIwX1dBWV9OVU1fTUFTSzsKKwkJZXNlbCB8PSAoKHZjcHVfZTUwMC0+bWFzMiA+PiAxMikgJiBLVk1fRTUwMF9UTEIwX1dBWV9TSVpFX01BU0spCisJCQkJPDwgS1ZNX0U1MDBfVExCMF9XQVlfTlVNX0JJVDsKKwl9IGVsc2UgeworCQllc2VsICY9IEtWTV9FNTAwX1RMQjFfU0laRSAtIDE7CisJfQorCisJcmV0dXJuIGVzZWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRsYmVfaXNfaG9zdF9zYWZlKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCWNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQoreworCWdwYV90IGdwYTsKKworCWlmICghZ2V0X3RsYl92KHRsYmUpKQorCQlyZXR1cm4gMDsKKworCS8qIERvZXMgaXQgbWF0Y2ggY3VycmVudCBndWVzdCBBUz8gKi8KKwkvKiBYWFggd2hhdCBhYm91dCBJUyAhPSBEUz8gKi8KKwlpZiAoZ2V0X3RsYl90cyh0bGJlKSAhPSAhISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9JUykpCisJCXJldHVybiAwOworCisJZ3BhID0gZ2V0X3RsYl9yYWRkcih0bGJlKTsKKwlpZiAoIWdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpKQorCQkvKiBNYXBwaW5nIGlzIG5vdCBmb3IgUkFNLiAqLworCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogX19LVk1fRTUwMF9UTEJfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCmluZGV4IGQxZDM4ZGEuLmE1NjFkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCkBAIC0zMCw2ICszMCwzOSBAQAogI2luY2x1ZGUgPGFzbS9kaXNhc3NlbWJsZS5oPgogI2luY2x1ZGUgInRpbWluZy5oIgogCisjZGVmaW5lIE9QX1RSQVAgMworCisjZGVmaW5lIE9QXzMxX1hPUF9MV1pYICAgICAgMjMKKyNkZWZpbmUgT1BfMzFfWE9QX0xCWlggICAgICA4NworI2RlZmluZSBPUF8zMV9YT1BfU1RXWCAgICAgIDE1MQorI2RlZmluZSBPUF8zMV9YT1BfU1RCWCAgICAgIDIxNQorI2RlZmluZSBPUF8zMV9YT1BfU1RCVVggICAgIDI0NworI2RlZmluZSBPUF8zMV9YT1BfTEhaWCAgICAgIDI3OQorI2RlZmluZSBPUF8zMV9YT1BfTEhaVVggICAgIDMxMQorI2RlZmluZSBPUF8zMV9YT1BfTUZTUFIgICAgIDMzOQorI2RlZmluZSBPUF8zMV9YT1BfU1RIWCAgICAgIDQwNworI2RlZmluZSBPUF8zMV9YT1BfU1RIVVggICAgIDQzOQorI2RlZmluZSBPUF8zMV9YT1BfTVRTUFIgICAgIDQ2NworI2RlZmluZSBPUF8zMV9YT1BfRENCSSAgICAgIDQ3MAorI2RlZmluZSBPUF8zMV9YT1BfTFdCUlggICAgIDUzNAorI2RlZmluZSBPUF8zMV9YT1BfVExCU1lOQyAgIDU2NgorI2RlZmluZSBPUF8zMV9YT1BfU1RXQlJYICAgIDY2MgorI2RlZmluZSBPUF8zMV9YT1BfTEhCUlggICAgIDc5MAorI2RlZmluZSBPUF8zMV9YT1BfU1RIQlJYICAgIDkxOAorCisjZGVmaW5lIE9QX0xXWiAgMzIKKyNkZWZpbmUgT1BfTFdaVSAzMworI2RlZmluZSBPUF9MQlogIDM0CisjZGVmaW5lIE9QX0xCWlUgMzUKKyNkZWZpbmUgT1BfU1RXICAzNgorI2RlZmluZSBPUF9TVFdVIDM3CisjZGVmaW5lIE9QX1NUQiAgMzgKKyNkZWZpbmUgT1BfU1RCVSAzOQorI2RlZmluZSBPUF9MSFogIDQwCisjZGVmaW5lIE9QX0xIWlUgNDEKKyNkZWZpbmUgT1BfU1RIICA0NAorI2RlZmluZSBPUF9TVEhVIDQ1CisKIHZvaWQga3ZtcHBjX2VtdWxhdGVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAodmNwdS0+YXJjaC50Y3IgJiBUQ1JfRElFKSB7CkBAIC03OCw3ICsxMTEsNyBAQAogCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX0lOU1RfRVhJVFMpOwogCiAJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKLQljYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhcCAqLworCWNhc2UgT1BfVFJBUDoKIAkJdmNwdS0+YXJjaC5lc3IgfD0gRVNSX1BUUjsKIAkJa3ZtcHBjX2NvcmVfcXVldWVfcHJvZ3JhbSh2Y3B1KTsKIAkJYWR2YW5jZSA9IDA7CkBAIC04NywzMSArMTIwLDMxIEBACiAJY2FzZSAzMToKIAkJc3dpdGNoIChnZXRfeG9wKGluc3QpKSB7CiAKLQkJY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbHd6eCAqLworCQljYXNlIE9QXzMxX1hPUF9MV1pYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxienggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEJaWDoKIAkJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMSwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDE1MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHd4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUV1g6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5ncHJbcnNdLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAyMTU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RieCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEJYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YnV4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUQlVYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTI2LDEyICsxNTksMTIgQEAKIAkJCXZjcHUtPmFyY2guZ3ByW3JzXSA9IGVhOwogCQkJYnJlYWs7CiAKLQkJY2FzZSAyNzk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGh6eCAqLworCQljYXNlIE9QXzMxX1hPUF9MSFpYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAyLCAxKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMzExOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoenV4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xIWlVYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTQ0LDcgKzE3Nyw3IEBACiAJCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSBlYTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMzM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1mc3ByICovCisJCWNhc2UgT1BfMzFfWE9QX01GU1BSOgogCQkJc3BybiA9IGdldF9zcHJuKGluc3QpOwogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAKQEAgLTE4NSw3ICsyMTgsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSA0MDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoeCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEhYOgogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwpAQCAtMTk1LDcgKzIyOCw3IEBACiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMSk7CiAJCQlicmVhazsKIAotCQljYXNlIDQzOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGh1eCAqLworCQljYXNlIE9QXzMxX1hPUF9TVEhVWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTIxMCw3ICsyNDMsNyBAQAogCQkJdmNwdS0+YXJjaC5ncHJbcmFdID0gZWE7CiAJCQlicmVhazsKIAotCQljYXNlIDQ2NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtdHNwciAqLworCQljYXNlIE9QXzMxX1hPUF9NVFNQUjoKIAkJCXNwcm4gPSBnZXRfc3BybihpbnN0KTsKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJc3dpdGNoIChzcHJuKSB7CkBAIC0yNDYsNyArMjc5LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgNDcwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRjYmkgKi8KKwkJY2FzZSBPUF8zMV9YT1BfRENCSToKIAkJCS8qIERvIG5vdGhpbmcuIFRoZSBndWVzdCBpcyBwZXJmb3JtaW5nIGRjYmkgYmVjYXVzZQogCQkJICogaGFyZHdhcmUgRE1BIGlzIG5vdCBzbm9vcGVkIGJ5IHRoZSBkY2FjaGUsIGJ1dAogCQkJICogZW11bGF0ZWQgRE1BIGVpdGhlciBnb2VzIHRocm91Z2ggdGhlIGRjYWNoZSBhcwpAQCAtMjU0LDE1ICsyODcsMTUgQEAKIAkJCSAqIGNvaGVyZW5jZS4gKi8KIAkJCWJyZWFrOwogCi0JCWNhc2UgNTM0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3YnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX0xXQlJYOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAwKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgNTY2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRsYnN5bmMgKi8KKwkJY2FzZSBPUF8zMV9YT1BfVExCU1lOQzoKIAkJCWJyZWFrOwogCi0JCWNhc2UgNjYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0d2JyeCAqLworCQljYXNlIE9QXzMxX1hPUF9TVFdCUlg6CiAJCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJCXJhID0gZ2V0X3JhKGluc3QpOwogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CkBAIC0yNzIsMTIgKzMwNSwxMiBAQAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA3OTA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGhicnggKi8KKwkJY2FzZSBPUF8zMV9YT1BfTEhCUlg6CiAJCQlydCA9IGdldF9ydChpbnN0KTsKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDApOwogCQkJYnJlYWs7CiAKLQkJY2FzZSA5MTg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoYnJ4ICovCisJCWNhc2UgT1BfMzFfWE9QX1NUSEJSWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKQEAgLTI5MywzNyArMzI2LDM3IEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGx3eiAqLworCWNhc2UgT1BfTFdaOgogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgNCwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsd3p1ICovCisJY2FzZSBPUF9MV1pVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDQsIDEpOwogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgMzQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGJ6ICovCisJY2FzZSBPUF9MQlo6CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAxLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxienUgKi8KKwljYXNlIE9QX0xCWlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMSwgMSk7CiAJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CiAJCWJyZWFrOwogCi0JY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHcgKi8KKwljYXNlIE9QX1NUVzoKIAkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwogCQlicmVhazsKIAotCWNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3R3dSAqLworCWNhc2UgT1BfU1RXVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCkBAIC0zMzEsMTMgKzM2NCwxMyBAQAogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RiICovCisJY2FzZSBPUF9TVEI6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YnUgKi8KKwljYXNlIE9QX1NUQlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLApAQCAtMzQ1LDI1ICszNzgsMjUgQEAKIAkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKIAkJYnJlYWs7CiAKLQljYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxoeiAqLworCWNhc2UgT1BfTEhaOgogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMiwgMSk7CiAJCWJyZWFrOwogCi0JY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaHp1ICovCisJY2FzZSBPUF9MSFpVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnQgPSBnZXRfcnQoaW5zdCk7CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9sb2FkKHJ1biwgdmNwdSwgcnQsIDIsIDEpOwogCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOwogCQlicmVhazsKIAotCWNhc2UgNDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RoICovCisJY2FzZSBPUF9TVEg6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIDQ1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0aHUgKi8KKwljYXNlIE9QX1NUSFU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCA1ZjgxMjU2Li45MDU3MzM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtMjE2LDQ2ICsyMTYsMjMgQEAKIAogdm9pZCBrdm1fYXJjaF92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Ja3ZtcHBjX2NvcmVfZGVzdHJveV9tbXUodmNwdSk7CisJa3ZtcHBjX21tdV9kZXN0cm95KHZjcHUpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZSh2Y3B1KTsKLQogCWt2bXBwY19jb3JlX3ZjcHVfbG9hZCh2Y3B1LCBjcHUpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKLQkJa3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUodmNwdSk7Ci0KLQkvKiBEb24ndCBsZWF2ZSBndWVzdCBUTEIgZW50cmllcyByZXNpZGVudCB3aGVuIGJlaW5nIGRlLXNjaGVkdWxlZC4gKi8KLQkvKiBYWFggSXQgd291bGQgYmUgbmljZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaGVhdnl3ZWlnaHQgZXhpdCBhbmQKLQkgKiBzY2hlZF9vdXQgaGVyZSwgc2luY2Ugd2UgY291bGQgYXZvaWQgdGhlIFRMQiBmbHVzaCBmb3IgaGVhdnl3ZWlnaHQKLQkgKiBleGl0cy4gKi8KLQlfdGxiaWxfYWxsKCk7CiAJa3ZtcHBjX2NvcmVfdmNwdV9wdXQodmNwdSk7CiB9CiAKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCWludCBpOwotCi0JdmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCA9IGRiZy0+ZW5hYmxlZDsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkgewotCQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+Z3Vlc3RfZGVidWcuYnApOyBpKyspIHsKLQkJCWlmIChkYmctPmJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpCi0JCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7Ci0JCQllbHNlCi0JCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9kY3JfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKaW5kZXggMjhjMDRkYS4uODgyZTQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwpAQCAtMjM3LDggKzIzNyw2IEBACiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9paWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CkBAIC0yNTQsNyArMjUyLDcgQEAKIAkJZ290byBvdXRfZW9pOwogCX0KIAotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJLyogTWFyayB0aGUgSVJRIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4qLwogCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKaW5kZXggNmEwYWQxOS4uZjA4NTM2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZjdHgtPnJxLCAmc3B1X3ByaW8tPnJ1bnFbY3R4LT5wcmlvXSk7CiAJCXNldF9iaXQoY3R4LT5wcmlvLCBzcHVfcHJpby0+Yml0bWFwKTsKIAkJaWYgKCFzcHVfcHJpby0+bnJfd2FpdGluZysrKQotCQkJX19tb2RfdGltZXIoJnNwdXNjaGVkX3RpbWVyLCBqaWZmaWVzICsgU1BVU0NIRURfVElDSyk7CisJCQltb2RfdGltZXIoJnNwdXNjaGVkX3RpbWVyLCBqaWZmaWVzICsgU1BVU0NIRURfVElDSyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKaW5kZXggNTgzMTFhOC4uYTcwNWZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RyaXZlciAqZHJ2OwogCiAJQlVHX09OKCFkZXYpOwotCXByX2RlYnVnKCIgLT4gJXM6JWQ6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIF9kZXYtPmJ1c19pZCk7CisJZGV2X2RiZyhfZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAlkcnYgPSBwczNfc3lzdGVtX2J1c19kZXZfdG9fc3lzdGVtX2J1c19kcnYoZGV2KTsKIAlCVUdfT04oIWRydik7CkBAIC0zOTgsNyArMzk4LDcgQEAKIAlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyICpkcnY7CiAKIAlCVUdfT04oIWRldik7Ci0JcHJfZGVidWcoIiAtPiAlczolZDogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgX2Rldi0+YnVzX2lkKTsKKwlkZXZfZGJnKF9kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCWRydiA9IHBzM19zeXN0ZW1fYnVzX2Rldl90b19zeXN0ZW1fYnVzX2RydihkZXYpOwogCUJVR19PTighZHJ2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggNmIwYTM1My4uMmE4YWY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTM0MywxMyArMzQzLDYgQEAKIAogY29tbWVudCAiSS9PIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIgogCi1jb25maWcgTUFDSENIS19XQVJOSU5HCi0JYm9vbCAiUHJvY2VzcyB3YXJuaW5nIG1hY2hpbmUgY2hlY2tzIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUgbWFjaGluZSBjaGVjayBoYW5kbGVyIG9uIElCTSBTLzM5MCBvcgotCSAgelNlcmllcyB0byBwcm9jZXNzIHdhcm5pbmcgbWFjaGluZSBjaGVja3MgKGUuZy4gb24gcG93ZXIgZmFpbHVyZXMpLgotCSAgSWYgdW5zdXJlLCBzYXkgIlkiLgotCiBjb25maWcgUURJTwogCXRyaXN0YXRlICJRRElPIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtNTIxLDcgKzUxNCw3IEBACiAKIGNvbmZpZyBBUFBMREFUQV9ORVRfU1VNCiAJdHJpc3RhdGUgIk1vbml0b3Igb3ZlcmFsbCBuZXR3b3JrIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFCisJZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFICYmIE5FVAogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgbmV0d29yayByZWxhdGVkIGRhdGEgdG8gdGhlIExpbnV4IC0gVk0gTW9uaXRvciBTdHJlYW0sCiAJICBjdXJyZW50bHkgdGhlcmUgaXMgb25seSBhIHRvdGFsIHN1bSBvZiBuZXR3b3JrIEkvTyBzdGF0aXN0aWNzLCBubwpAQCAtNTUyLDcgKzU0NSw3IEBACiAJICBidXQgaXMgaW5kZXBlbmRlbnQgb2YgaGFyZHdhcmUvbWljcm9jb2RlIHN1cHBvcnQuCiAKIGNvbmZpZyBaRkNQRFVNUAotCXRyaXN0YXRlICJ6ZmNwZHVtcCBzdXBwb3J0IgorCWJvb2wgInpmY3BkdW1wIHN1cHBvcnQiCiAJc2VsZWN0IFNNUAogCWRlZmF1bHQgbgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jIGIvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKaW5kZXggZWNhNzI0ZC4uYjQ5YzAwYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKQEAgLTIwMSw4ICsyMDEsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHBybmdfZXhpdCh2b2lkKQogewogCS8qIHdpcGUgbWUgKi8KLQltZW1zZXQocC0+YnVmLCAwLCBwcm5nX2NodW5rX3NpemUpOwotCWtmcmVlKHAtPmJ1Zik7CisJa3pmcmVlKHAtPmJ1Zik7CiAJa2ZyZWUocCk7CiAKIAltaXNjX2RlcmVnaXN0ZXIoJnBybmdfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhLmggYi9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oCmluZGV4IDFjZWFmYTUuLmY0ZTlkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEuaApAQCAtMjksNyArMjksOSBAQAogCWludCBmdW5jOwkJLyogS0lNRCBmdW5jdGlvbiB0byB1c2UgKi8KIH07CiAKLXZvaWQgczM5MF9zaGFfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKLXZvaWQgczM5MF9zaGFfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCk7CitzdHJ1Y3Qgc2hhc2hfZGVzYzsKKworaW50IHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOworaW50IHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYwppbmRleCBiM2NiNWE4Li5lODViYTM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKQEAgLTIzLDE3ICsyMywxNyBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgInNoYS5oIgogCi1zdGF0aWMgdm9pZCBzaGExX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyBpbnQgc2hhMV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMV9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTFfSDE7CkBAIC00MiwzNCArNDIsMzYgQEAKIAlzY3R4LT5zdGF0ZVs0XSA9IFNIQTFfSDQ7CiAJc2N0eC0+Y291bnQgPSAwOwogCXNjdHgtPmZ1bmMgPSBLSU1EX1NIQV8xOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTEiLAotCS5jcmFfZHJpdmVyX25hbWU9CSJzaGExLXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAotCS5jcmFfYmxvY2tzaXplCT0JU0hBMV9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEExX0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTFfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBhbGcgPSB7CisJLmRpZ2VzdHNpemUJPQlTSEExX0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTFfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTEiLAorCQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMS1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMV9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoYTFfczM5MF9pbml0KHZvaWQpCiB7CiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzEpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNoYTFfczM5MF9maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOwogfQogCiBtb2R1bGVfaW5pdChzaGExX3MzOTBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKaW5kZXggMTljMDNmYi4uZjlmZWZjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYwpAQCAtMTYsMTcgKzE2LDE3IEBACiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CiAKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAjaW5jbHVkZSAic2hhLmgiCiAKLXN0YXRpYyB2b2lkIHNoYTI1Nl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTI1Nl9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMjU2X0gwOwogCXNjdHgtPnN0YXRlWzFdID0gU0hBMjU2X0gxOwpAQCAtMzgsMjIgKzM4LDI0IEBACiAJc2N0eC0+c3RhdGVbN10gPSBTSEEyNTZfSDc7CiAJc2N0eC0+Y291bnQgPSAwOwogCXNjdHgtPmZ1bmMgPSBLSU1EX1NIQV8yNTY7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKLQkuY3JhX25hbWUJPQkic2hhMjU2IiwKLQkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTI1Ni1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEEyNTZfRElHRVNUX1NJWkUsCi0JLmRpYV9pbml0CT0Jc2hhMjU2X2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTI1Nl9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhMjU2IiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTI1Ni1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMjU2X0JMT0NLX1NJWkUsCisJCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCisJfQogfTsKIAogc3RhdGljIGludCBzaGEyNTZfczM5MF9pbml0KHZvaWQpCkBAIC02MSwxMiArNjMsMTIgQEAKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMjU2KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNoYTI1Nl9zMzkwX2Zpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIG1vZHVsZV9pbml0KHNoYTI1Nl9zMzkwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCmluZGV4IDIzYzc4NjEuLjgzMTkyYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKQEAgLTEyLDE2ICsxMiwxNiBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKICNpbmNsdWRlICJzaGEuaCIKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLXN0YXRpYyB2b2lkIHNoYTUxMl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTUxMl9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMF0gPSAweDZhMDllNjY3ZjNiY2M5MDhVTEw7CiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzJdID0gMHhiYjY3YWU4NTg0Y2FhNzNiVUxMOwpAQCAtMzMsMjkgKzMzLDMxIEBACiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzE0XSA9IDB4NWJlMGNkMTkxMzdlMjE3OVVMTDsKIAljdHgtPmNvdW50ID0gMDsKIAljdHgtPmZ1bmMgPSBLSU1EX1NIQV81MTI7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTUxMl9hbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTUxMiIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGE1MTItczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEE1MTJfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChzaGE1MTJfYWxnLmNyYV9saXN0KSwKLQkuY3JhX3UJCT0JeyAuZGlnZXN0ID0gewotCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTUxMl9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGE1MTJfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGE1MTJfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBNTEyX0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTUxMl9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhNTEyIiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTUxMi1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBNTEyX0JMT0NLX1NJWkUsCisJCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCisJfQogfTsKIAogTU9EVUxFX0FMSUFTKCJzaGE1MTIiKTsKIAotc3RhdGljIHZvaWQgc2hhMzg0X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyBpbnQgc2hhMzg0X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCSooX191NjQgKikmY3R4LT5zdGF0ZVswXSA9IDB4Y2JiYjlkNWRjMTA1OWVkOFVMTDsKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMl0gPSAweDYyOWEyOTJhMzY3Y2Q1MDdVTEw7CkBAIC02NywyMiArNjksMjUgQEAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMTRdID0gMHg0N2I1NDgxZGJlZmE0ZmE0VUxMOwogCWN0eC0+Y291bnQgPSAwOwogCWN0eC0+ZnVuYyA9IEtJTURfU0hBXzUxMjsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhMzg0X2FsZyA9IHsKLQkuY3JhX25hbWUJPQkic2hhMzg0IiwKLQkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTM4NC1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTM4NF9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKHNoYTM4NF9hbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTM4NF9pbml0LAotCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIHNoYTM4NF9hbGcgPSB7CisJLmRpZ2VzdHNpemUJPQlTSEEzODRfRElHRVNUX1NJWkUsCisJLmluaXQJCT0Jc2hhMzg0X2luaXQsCisJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCisJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQk9CSJzaGEzODQiLAorCQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMzg0LXMzOTAiLAorCQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKKwkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKKwkJLmNyYV9ibG9ja3NpemUJPQlTSEEzODRfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIE1PRFVMRV9BTElBUygic2hhMzg0Iik7CkBAIC05MywxOCArOTgsMTggQEAKIAogCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV81MTIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGE1MTJfYWxnKSkgPCAwKQorCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGE1MTJfYWxnKSkgPCAwKQogCQlnb3RvIG91dDsKLQlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnNoYTM4NF9hbGcpKSA8IDApCi0JCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZyk7CisJaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJnNoYTM4NF9hbGcpKSA8IDApCisJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGE1MTJfYWxnKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTM4NF9hbGcpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKaW5kZXggOWQ2ZWI4Yy4uNzkwM2VjNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKQEAgLTEzLDE0ICsxMywxNCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlICJzaGEuaCIKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLXZvaWQgczM5MF9zaGFfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoraW50IHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKGRlc2MtPnRmbSk7CiAJdW5zaWduZWQgaW50IGluZGV4OwogCWludCByZXQ7CiAKQEAgLTUxLDEzICs1MSwxNSBAQAogc3RvcmU6CiAJaWYgKGxlbikKIAkJbWVtY3B5KGN0eC0+YnVmICsgaW5kZXggLCBkYXRhLCBsZW4pOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV91cGRhdGUpOwogCi12b2lkIHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpCitpbnQgczM5MF9zaGFfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKGRlc2MtPnRmbSk7CiAJdTY0IGJpdHM7CiAJdW5zaWduZWQgaW50IGluZGV4LCBlbmQsIHBsZW47CiAJaW50IHJldDsKQEAgLTg3LDkgKzg5LDExIEBACiAJQlVHX09OKHJldCAhPSBlbmQpOwogCiAJLyogY29weSBkaWdlc3QgdG8gb3V0ICovCi0JbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShjcnlwdG9faGFzaF9jYXN0KHRmbSkpKTsKKwltZW1jcHkob3V0LCBjdHgtPnN0YXRlLCBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShkZXNjLT50Zm0pKTsKIAkvKiB3aXBlIGNvbnRleHQgKi8KIAltZW1zZXQoY3R4LCAwLCBzaXplb2YgKmN0eCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHMzOTBfc2hhX2ZpbmFsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDhlOTI0M2EuLmIzMDYwNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTU3LDcgKzU3LDcgQEAKICAqIHdpdGggb3BlcmF0aW9uIG9mIHRoZSBmb3JtICJzZXRfYml0KGJpdG5yLCBmbGFncykiLgogICovCiAKLS8qIGJpdG1hcCB0YWJsZXMgZnJvbSBhcmNoL1MzOTAva2VybmVsL2JpdG1hcC5TICovCisvKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYyAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgX29pX2JpdG1hcFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX25pX2JpdG1hcFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX3piX2ZpbmRtYXBbXTsKQEAgLTUyNSwxNiArNTI1LDE2IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnpfd29yZCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHdvcmQpCiB7CiAjaWZkZWYgX19zMzkweF9fCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmZmZmZikgPT0gMHhmZmZmZmZmZikgewogCQl3b3JkID4+PSAzMjsKIAkJbnIgKz0gMzI7CiAJfQogI2VuZGlmCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZikgPT0gMHhmZmZmKSkgeworCWlmICgod29yZCAmIDB4ZmZmZikgPT0gMHhmZmZmKSB7CiAJCXdvcmQgPj49IDE2OwogCQluciArPSAxNjsKIAl9Ci0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDB4ZmYpKSB7CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMHhmZikgewogCQl3b3JkID4+PSA4OwogCQluciArPSA4OwogCX0KQEAgLTU0OSwxNiArNTQ5LDE2IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnNfd29yZCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHdvcmQpCiB7CiAjaWZkZWYgX19zMzkweF9fCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmZmZmZikgPT0gMCkgewogCQl3b3JkID4+PSAzMjsKIAkJbnIgKz0gMzI7CiAJfQogI2VuZGlmCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZikgPT0gMCkpIHsKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDApIHsKIAkJd29yZCA+Pj0gMTY7CiAJCW5yICs9IDE2OwogCX0KLQlpZiAobGlrZWx5KCh3b3JkICYgMHhmZikgPT0gMCkpIHsKKwlpZiAoKHdvcmQgJiAweGZmKSA9PSAwKSB7CiAJCXdvcmQgPj49IDg7CiAJCW5yICs9IDg7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODVhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICAgRGF0YSBkZWZpbml0aW9ucyBmb3IgY2hhbm5lbCByZXBvcnQgcHJvY2Vzc2luZworICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX0NSV19ICisjZGVmaW5lIF9BU01fUzM5MF9DUldfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIENoYW5uZWwgUmVwb3J0IFdvcmQKKyAqLworc3RydWN0IGNydyB7CisJX191MzIgcmVzMSA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KKwlfX3UzMiBzbGN0IDogIDE7ICAgLyogc29saWNpdGVkICovCisJX191MzIgb2ZsdyA6ICAxOyAgIC8qIG92ZXJmbG93ICovCisJX191MzIgY2huICA6ICAxOyAgIC8qIGNoYWluZWQgKi8KKwlfX3UzMiByc2MgIDogIDQ7ICAgLyogcmVwb3J0aW5nIHNvdXJjZSBjb2RlICovCisJX191MzIgYW5jICA6ICAxOyAgIC8qIGFuY2lsbGFyeSByZXBvcnQgKi8KKwlfX3UzMiByZXMyIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLworCV9fdTMyIGVyYyAgOiAgNjsgICAvKiBlcnJvci1yZWNvdmVyeSBjb2RlICovCisJX191MzIgcnNpZCA6IDE2OyAgIC8qIHJlcG9ydGluZy1zb3VyY2UgSUQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit0eXBlZGVmIHZvaWQgKCpjcndfaGFuZGxlcl90KShzdHJ1Y3QgY3J3ICosIHN0cnVjdCBjcncgKiwgaW50KTsKKworZXh0ZXJuIGludCBjcndfcmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpOworZXh0ZXJuIHZvaWQgY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjKTsKK2V4dGVybiB2b2lkIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQodm9pZCk7CisKKyNkZWZpbmUgTlJfUlNDUyAxNgorCisjZGVmaW5lIENSV19SU0NfTU9OSVRPUiAgMHgyICAvKiBtb25pdG9yaW5nIGZhY2lsaXR5ICovCisjZGVmaW5lIENSV19SU0NfU0NICSAweDMgIC8qIHN1YmNoYW5uZWwgKi8KKyNkZWZpbmUgQ1JXX1JTQ19DUEFUSAkgMHg0ICAvKiBjaGFubmVsIHBhdGggKi8KKyNkZWZpbmUgQ1JXX1JTQ19DT05GSUcJIDB4OSAgLyogY29uZmlndXJhdGlvbi1hbGVydCBmYWNpbGl0eSAqLworI2RlZmluZSBDUldfUlNDX0NTUwkgMHhCICAvKiBjaGFubmVsIHN1YnN5c3RlbSAqLworCisjZGVmaW5lIENSV19FUkNfRVZFTlQJIDB4MDAgLyogZXZlbnQgaW5mb3JtYXRpb24gcGVuZGluZyAqLworI2RlZmluZSBDUldfRVJDX0FWQUlMCSAweDAxIC8qIGF2YWlsYWJsZSAqLworI2RlZmluZSBDUldfRVJDX0lOSVQJIDB4MDIgLyogaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19URVJST1IJIDB4MDMgLyogdGVtcG9yYXJ5IGVycm9yICovCisjZGVmaW5lIENSV19FUkNfSVBBUk0JIDB4MDQgLyogaW5zdGFsbGVkIHBhcm0gaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19URVJNCSAweDA1IC8qIHRlcm1pbmFsICovCisjZGVmaW5lIENSV19FUkNfUEVSUk4JIDB4MDYgLyogcGVybS4gZXJyb3IsIGZhYy4gbm90IGluaXQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19QRVJSSQkgMHgwNyAvKiBwZXJtLiBlcnJvciwgZmFjaWxpdHkgaW5pdCAqLworI2RlZmluZSBDUldfRVJDX1BNT0QJIDB4MDggLyogaW5zdGFsbGVkIHBhcmFtZXRlcnMgbW9kaWZpZWQgKi8KKworc3RhdGljIGlubGluZSBpbnQgc3Rjcncoc3RydWN0IGNydyAqcGNydykKK3sKKwlpbnQgY2NvZGU7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJc3RjcncJMCglMilcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjhcbiIKKwkJOiAiPWQiIChjY29kZSksICI9bSIgKCpwY3J3KQorCQk6ICJhIiAocGNydykKKwkJOiAiY2MiICk7CisJcmV0dXJuIGNjb2RlOworfQorCisjZW5kaWYgLyogX0FTTV9TMzkwX0NSV19IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAppbmRleCBlMmRiNmYxLi4yMThiY2U4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKQEAgLTE2MiwxNSArMTYyLDE1IEBACiAgICAgICAgIHVuc2lnbmVkIGludCBkYXNkX2lvX25yX3JlcVszMl07IC8qIGhpc3RvZ3JhbSBvZiAjIG9mIHJlcXVlc3RzIGluIGNoYW5xICovCiB9IGRhc2RfcHJvZmlsZV9pbmZvX3Q7CiAKLS8qIAorLyoKICAqIHN0cnVjdCBmb3JtYXRfZGF0YV90CiAgKiByZXByZXNlbnRzIGFsbCBkYXRhIG5lY2Vzc2FyeSB0byBmb3JtYXQgYSBkYXNkCiAgKi8KIHR5cGVkZWYgc3RydWN0IGZvcm1hdF9kYXRhX3QgewotCWludCBzdGFydF91bml0OyAvKiBmcm9tIHRyYWNrICovCi0JaW50IHN0b3BfdW5pdDsgIC8qIHRvIHRyYWNrICovCi0JaW50IGJsa3NpemU7ICAgIC8qIHNlY3RvcnNpemUgKi8KLSAgICAgICAgaW50IGludGVuc2l0eTsgIAorCXVuc2lnbmVkIGludCBzdGFydF91bml0OyAvKiBmcm9tIHRyYWNrICovCisJdW5zaWduZWQgaW50IHN0b3BfdW5pdDsgIC8qIHRvIHRyYWNrICovCisJdW5zaWduZWQgaW50IGJsa3NpemU7CSAvKiBzZWN0b3JzaXplICovCisJdW5zaWduZWQgaW50IGludGVuc2l0eTsKIH0gZm9ybWF0X2RhdGFfdDsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKaW5kZXggZTgyYzEwZS4uYWFlMjc2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKQEAgLTQ0LDI0ICs0NCwxOCBAQAogLyoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGlkYWwgd29yZHMgbmVlZGVkIGZvciBhbiBhZGRyZXNzL2xlbmd0aCBwYWlyLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotaWRhbF9ucl93b3Jkcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlkYWxfbnJfd29yZHModm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgX19zMzkweF9fCi0JaWYgKGlkYWxfaXNfbmVlZGVkKHZhZGRyLCBsZW5ndGgpKQotCQlyZXR1cm4gKChfX3BhKHZhZGRyKSAmIChJREFfQkxPQ0tfU0laRS0xKSkgKyBsZW5ndGggKyAKLQkJCShJREFfQkxPQ0tfU0laRS0xKSkgPj4gSURBX1NJWkVfTE9HOwotI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuICgoX19wYSh2YWRkcikgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsKKwkJKElEQV9CTE9DS19TSVpFLTEpKSA+PiBJREFfU0laRV9MT0c7CiB9CiAKIC8qCiAgKiBDcmVhdGUgdGhlIGxpc3Qgb2YgaWRhbCB3b3JkcyBmb3IgYW4gYWRkcmVzcy9sZW5ndGggcGFpci4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICoKLWlkYWxfY3JlYXRlX3dvcmRzKHVuc2lnbmVkIGxvbmcgKmlkYXdzLCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqaWRhbF9jcmVhdGVfd29yZHModW5zaWduZWQgbG9uZyAqaWRhd3MsCisJCQkJCSAgICAgICB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKLSNpZmRlZiBfX3MzOTB4X18KIAl1bnNpZ25lZCBsb25nIHBhZGRyOwogCXVuc2lnbmVkIGludCBjaWRhdzsKIApAQCAtNzQsNyArNjgsNiBAQAogCQlwYWRkciArPSBJREFfQkxPQ0tfU0laRTsKIAkJKmlkYXdzKysgPSBwYWRkcjsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gaWRhd3M7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaAppbmRleCBlMWY1NDY1Li4wYjJmODI5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCkBAIC00Miw0ICs0MiwxMSBAQAogCV9fdTY0IGZwcnNbMTZdOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2M1NWU0MS4uYzZlNjc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIxLDkgKzIxLDYgQEAKIC8qIG1lbW9yeSBzbG90cyB0aGF0IGRvZXMgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlICovCiAjZGVmaW5lIEtWTV9QUklWQVRFX01FTV9TTE9UUyA0CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotfTsKLQogc3RydWN0IHNjYV9lbnRyeSB7CiAJYXRvbWljX3Qgc2NuOwogCV9fdTY0CXJlc2VydmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggZjM3MjBkZS4uYjM0OWYxYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xMSwxMjkgKzExLDExOCBAQAogI2lmbmRlZiBfQVNNX1MzOTBfTE9XQ09SRV9ICiAjZGVmaW5lIF9BU01fUzM5MF9MT1dDT1JFX0gKIAotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxOAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDIwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMjgKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAzMAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cgICAgICAgICAgICAgICAgIDB4MDM4Ci0jZGVmaW5lIF9fTENfRVhUX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNTgKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2MAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDY4Ci0jZGVmaW5lIF9fTENfTUNLX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNzAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDA3OAotI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDEzMAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE0MAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE1MAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE2MAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cgICAgICAgICAgICAgICAgIDB4MDE3MAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFiMAotI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFjMAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFkMAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFlMAotI2RlZmluZSBfX0xDX0lPX05FV19QU1cgICAgICAgICAgICAgICAgIDB4MDFmMAotI2VuZGlmIC8qICFfX3MzOTB4X18gKi8KKyNkZWZpbmUgX19MQ19JUExfUEFSTUJMT0NLX1BUUgkJMHgwMDE0CisjZGVmaW5lIF9fTENfRVhUX1BBUkFNUwkJCTB4MDA4MAorI2RlZmluZSBfX0xDX0NQVV9BRERSRVNTCQkweDAwODQKKyNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUJCTB4MDA4NgogCi0jZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDE0Ci0jZGVmaW5lIF9fTENfRVhUX1BBUkFNUyAgICAgICAgICAgICAgICAgMHgwODAKLSNkZWZpbmUgX19MQ19DUFVfQUREUkVTUyAgICAgICAgICAgICAgICAweDA4NAotI2RlZmluZSBfX0xDX0VYVF9JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDg2CisjZGVmaW5lIF9fTENfU1ZDX0lMQwkJCTB4MDA4OAorI2RlZmluZSBfX0xDX1NWQ19JTlRfQ09ERQkJMHgwMDhhCisjZGVmaW5lIF9fTENfUEdNX0lMQwkJCTB4MDA4YworI2RlZmluZSBfX0xDX1BHTV9JTlRfQ09ERQkJMHgwMDhlCiAKLSNkZWZpbmUgX19MQ19TVkNfSUxDICAgICAgICAgICAgICAgICAgICAweDA4OAotI2RlZmluZSBfX0xDX1NWQ19JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDhBCi0jZGVmaW5lIF9fTENfUEdNX0lMQyAgICAgICAgICAgICAgICAgICAgMHgwOEMKLSNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUgICAgICAgICAgICAgICAweDA4RQorI2RlZmluZSBfX0xDX1BFUl9BVE1JRAkJCTB4MDA5NgorI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDAwOTgKKyNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDAwYTEKKyNkZWZpbmUgX19MQ19BUl9NT0RFX0lECQkJMHgwMGEzCiAKLSNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDA5NgotI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDA5OAotI2RlZmluZSBfX0xDX1BFUl9BQ0NFU1NfSUQJCTB4MEExCi0jZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MEEzCisjZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9JRAkJMHgwMGI4CisjZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9OUgkJMHgwMGJhCisjZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0JCTB4MDBiYworI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JECQkweDAwYzAKKyNkZWZpbmUgX19MQ19NQ0NLX0NPREUJCQkweDAwZTgKIAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQgICAgICAgICAgICAgIDB4MEI4Ci0jZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9OUiAgICAgICAgICAgICAgMHgwQkEKLSNkZWZpbmUgX19MQ19JT19JTlRfUEFSTSAgICAgICAgICAgICAgICAweDBCQwotI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JEICAgICAgICAgICAgICAgIDB4MEMwCi0jZGVmaW5lIF9fTENfTUNDS19DT0RFICAgICAgICAgICAgICAgICAgMHgwRTgKLQotI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsgCQkweDExMAotCi0jZGVmaW5lIF9fTENfUkVUVVJOX1BTVyAgICAgICAgICAgICAgICAgMHgyMDAKLQotI2RlZmluZSBfX0xDX1NBVkVfQVJFQSAgICAgICAgICAgICAgICAgIDB4QzAwCisjZGVmaW5lIF9fTENfRFVNUF9SRUlQTAkJCTB4MGUwMAogCiAjaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX0lSQgkJCTB4MjA4Ci0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgyNDgKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgyNTAKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgyNTgKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgyNjAKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MjY4Ci0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MjcwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4Mjc4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MjgwCi0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXICAgICAgICAgICAgMHgyODgKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sgICAgICAgICAgICAgICAweEM0MAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweEM0NAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLICAgICAgICAgICAgICAgIDB4QzQ4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4QzRDCi0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHhDNTAKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSyAgICAgICAgICAgICAgICAweEM1NAotI2RlZmluZSBfX0xDX0NQVUlEICAgICAgICAgICAgICAgICAgICAgIDB4QzYwCi0jZGVmaW5lIF9fTENfQ1BVQUREUiAgICAgICAgICAgICAgICAgICAgMHhDNjgKLSNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweEM3QwotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEM5MAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4Qzk4CisjZGVmaW5lIF9fTENfRVhUX09MRF9QU1cJCTB4MDAxOAorI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXCQkweDAwMjAKKyNkZWZpbmUgX19MQ19QR01fT0xEX1BTVwkJMHgwMDI4CisjZGVmaW5lIF9fTENfTUNLX09MRF9QU1cJCTB4MDAzMAorI2RlZmluZSBfX0xDX0lPX09MRF9QU1cJCQkweDAwMzgKKyNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVwkJMHgwMDU4CisjZGVmaW5lIF9fTENfU1ZDX05FV19QU1cJCTB4MDA2MAorI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXCQkweDAwNjgKKyNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVwkJMHgwMDcwCisjZGVmaW5lIF9fTENfSU9fTkVXX1BTVwkJCTB4MDA3OAorI2RlZmluZSBfX0xDX1NBVkVfQVJFQQkJCTB4MDIwMAorI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cJCQkweDAyNDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fTUNDS19QU1cJCTB4MDI0OAorI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MDI1MAorI2RlZmluZSBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCQkweDAyNTgKKyNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgwMjYwCisjZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MDI2OAorI2RlZmluZSBfX0xDX1NZU1RFTV9USU1FUgkJMHgwMjcwCisjZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MDI3OAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDAyODAKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9DTE9DSwkJMHgwMjg4CisjZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4MDI5MAorI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweDAyOTQKKyNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sJCTB4MDI5OAorI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLCQkweDAyOWMKKyNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSwkJMHgwMmEwCisjZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4MDJhNAorI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4MDJhOAorI2RlZmluZSBfX0xDX1VTRVJfRVhFQ19BU0NFCQkweDAyYWMKKyNkZWZpbmUgX19MQ19DUFVJRAkJCTB4MDJiMAorI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4MDJjOAorI2RlZmluZSBfX0xDX0lSQgkJCTB4MDMwMAorI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDAwODAKKyNkZWZpbmUgX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBCTB4MDBkOAorI2RlZmluZSBfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBCTB4MDBlMAorI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MDEwMAorI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MDEwOAorI2RlZmluZSBfX0xDX0FSRUdTX1NBVkVfQVJFQQkJMHgwMTIwCisjZGVmaW5lIF9fTENfRlBSRUdTX1NBVkVfQVJFQQkJMHgwMTYwCisjZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQQkJMHgwMTgwCisjZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBCQkweDAxYzAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX0lSQgkJCTB4MjEwCi0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgyNTAKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgyNTgKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgyNjAKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgyNjgKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MjcwCi0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4Mjc4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MjgwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4Mjg4Ci0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXICAgICAgICAgICAgMHgyOTAKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sgICAgICAgICAgICAgICAweEQ0MAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweEQ0OAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLICAgICAgICAgICAgICAgIDB4RDUwCi0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4RDU4Ci0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHhENjAKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ2OAotI2RlZmluZSBfX0xDX0NQVUlECQkJMHhEODAKLSNkZWZpbmUgX19MQ19DUFVBRERSCQkJMHhEODgKLSNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweERCOAotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEREOAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4REU4Ci0jZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweEUzOAotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCi0jZGVmaW5lIF9fTENfUEFTVEUJCQkweEU0MAotCi0jZGVmaW5lIF9fTENfUEFOSUNfTUFHSUMJCTB4RTAwCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MDgwCi0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQSAgICAgICAgMHgwRDgKLSNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDBFMAotI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgxMDgKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEyMAotI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTYwCi0jZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQSAgICAgICAgICAgMHgxODAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDFDMAotI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0gICAgICAgICAgICAgMHgxMUI4CisjZGVmaW5lIF9fTENfTEFTVF9CUkVBSwkJCTB4MDExMAorI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAxMzAKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMTQwCisjZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDE1MAorI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAxNjAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMTcwCisjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDFiMAorI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAxYzAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMWQwCisjZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDFlMAorI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAxZjAKKyNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjgwCisjZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyOTAKKyNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyYTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMmE4CisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDJiMAorI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyYjgKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDJjMAorI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyYzgKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMmQwCisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDJkOAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyZTAKKyNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMmU4CisjZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyZjAKKyNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMmY4CisjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDMwMAorI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAzMDgKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAzMTAKKyNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMzE4CisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAzMjAKKyNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAzNDAKKyNkZWZpbmUgX19MQ19WRFNPX1BFUl9DUFUJCTB4MDM1MAorI2RlZmluZSBfX0xDX0lSQgkJCTB4MDM4MAorI2RlZmluZSBfX0xDX1BBU1RFCQkJMHgwM2MwCisjZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0JCTB4MTFiOAogI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTIwMAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTI4MAorI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MTI4MAogI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTMwMAogI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTMxOAotI2RlZmluZSBfX0xDX0ZQX0NSRUdfU0FWRV9BUkVBCQkweDEzMUMKKyNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFjCiAjZGVmaW5lIF9fTENfVE9EUkVHX1NBVkVfQVJFQQkJMHgxMzI0Ci0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQSAgICAgICAgMHgxMzI4CisjZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDEzMjgKICNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDEzMzEKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzNDAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzODAKKyNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MTM0MAorI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgxMzgwCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0xOTgsMjIyICsxODcsMjQwIEBACiBzdHJ1Y3QgX2xvd2NvcmUKIHsKICNpZm5kZWYgX19zMzkweF9fCi0gICAgICAgIC8qIHByZWZpeCBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCXBzd190ICAgICAgICByZXN0YXJ0X3BzdzsgICAgICAgICAgICAgIC8qIDB4MDAwICovCi0JX191MzIgICAgICAgIGNjdzJbNF07ICAgICAgICAgICAgICAgICAgLyogMHgwMDggKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfb2xkX3BzdzsgICAgICAgICAvKiAweDAxOCAqLwotCXBzd190ICAgICAgICBzdmNfb2xkX3BzdzsgICAgICAgICAgICAgIC8qIDB4MDIwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fb2xkX3BzdzsgICAgICAgICAgLyogMHgwMjggKi8KLQlwc3dfdCAgICAgICAgbWNja19vbGRfcHN3OyAgICAgICAgICAgICAvKiAweDAzMCAqLwotCXBzd190ICAgICAgICBpb19vbGRfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MDM4ICovCi0JX191OCAgICAgICAgIHBhZDFbMHg1OC0weDQwXTsgICAgICAgICAgLyogMHgwNDAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfbmV3X3BzdzsgICAgICAgICAvKiAweDA1OCAqLwotCXBzd190ICAgICAgICBzdmNfbmV3X3BzdzsgICAgICAgICAgICAgIC8qIDB4MDYwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fbmV3X3BzdzsgICAgICAgICAgLyogMHgwNjggKi8KLQlwc3dfdCAgICAgICAgbWNja19uZXdfcHN3OyAgICAgICAgICAgICAvKiAweDA3MCAqLwotCXBzd190ICAgICAgICBpb19uZXdfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MDc4ICovCi0JX191MzIgICAgICAgIGV4dF9wYXJhbXM7ICAgICAgICAgICAgICAgLyogMHgwODAgKi8KLQlfX3UxNiAgICAgICAgY3B1X2FkZHI7ICAgICAgICAgICAgICAgICAvKiAweDA4NCAqLwotCV9fdTE2ICAgICAgICBleHRfaW50X2NvZGU7ICAgICAgICAgICAgIC8qIDB4MDg2ICovCi0gICAgICAgIF9fdTE2ICAgICAgICBzdmNfaWxjOyAgICAgICAgICAgICAgICAgIC8qIDB4MDg4ICovCi0gICAgICAgIF9fdTE2ICAgICAgICBzdmNfY29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDhhICovCi0gICAgICAgIF9fdTE2ICAgICAgICBwZ21faWxjOyAgICAgICAgICAgICAgICAgIC8qIDB4MDhjICovCi0gICAgICAgIF9fdTE2ICAgICAgICBwZ21fY29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDhlICovCi0JX191MzIgICAgICAgIHRyYW5zX2V4Y19jb2RlOyAgICAgICAgICAgLyogMHgwOTAgKi8KLQlfX3UxNiAgICAgICAgbW9uX2NsYXNzX251bTsgICAgICAgICAgICAvKiAweDA5NCAqLwotCV9fdTE2ICAgICAgICBwZXJfcGVyY19hdG1pZDsgICAgICAgICAgIC8qIDB4MDk2ICovCi0JX191MzIgICAgICAgIHBlcl9hZGRyZXNzOyAgICAgICAgICAgICAgLyogMHgwOTggKi8KLQlfX3UzMiAgICAgICAgbW9uaXRvcl9jb2RlOyAgICAgICAgICAgICAvKiAweDA5YyAqLwotCV9fdTggICAgICAgICBleGNfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGEwICovCi0JX191OCAgICAgICAgIHBlcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTEgKi8KLQlfX3U4ICAgICAgICAgcGFkMlsweEI4LTB4QTJdOyAgICAgICAgICAvKiAweDBhMiAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX2lkOyAgICAgICAgICAgIC8qIDB4MGI4ICovCi0JX191MTYgICAgICAgIHN1YmNoYW5uZWxfbnI7ICAgICAgICAgICAgLyogMHgwYmEgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3Bhcm07ICAgICAgICAgICAgICAvKiAweDBiYyAqLwotCV9fdTMyICAgICAgICBpb19pbnRfd29yZDsgICAgICAgICAgICAgIC8qIDB4MGMwICovCi0JX191OAkgICAgIHBhZDNbMHhjOC0weGM0XTsJICAgICAgIC8qIDB4MGM0ICovCi0JX191MzIJICAgICBzdGZsX2ZhY19saXN0OwkgICAgICAgLyogMHgwYzggKi8KLQlfX3U4CSAgICAgcGFkNFsweGQ0LTB4Y2NdOwkgICAgICAgLyogMHgwY2MgKi8KLQlfX3UzMiAgICAgICAgZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHI7ICAvKiAweDBkNCAqLwotCV9fdTMyICAgICAgICBjcHVfdGltZXJfc2F2ZV9hcmVhWzJdOyAgIC8qIDB4MGQ4ICovCi0JX191MzIgICAgICAgIGNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOyAgLyogMHgwZTAgKi8KLQlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KLQlfX3U4CSAgICAgcGFkNVsweGY0LTB4ZjBdOwkgICAgICAgLyogMHgwZjAgKi8KLQlfX3UzMiAgICAgICAgZXh0ZXJuYWxfZGFtYWdlX2NvZGU7ICAgICAvKiAweDBmNCAqLwotCV9fdTMyICAgICAgICBmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsgIC8qIDB4MGY4ICovCi0JX191OAkgICAgIHBhZDZbMHgxMDAtMHhmY107CSAgICAgICAvKiAweDBmYyAqLwotCV9fdTMyICAgICAgICBzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOy8qIDB4MTAwICovCi0JX191OAkgICAgIHBhZDdbMHgxMjAtMHgxMTBdOyAgICAgICAgLyogMHgxMTAgKi8KLQlfX3UzMiAgICAgICAgYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsvKiAweDEyMCAqLwotCV9fdTMyICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbOF07IC8qIDB4MTYwICovCi0JX191MzIgICAgICAgIGdwcmVnc19zYXZlX2FyZWFbMTZdOyAgICAgLyogMHgxODAgKi8KLQlfX3UzMiAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAvKiAweDFjMCAqLwkKKwkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJcHN3X3QJcmVzdGFydF9wc3c7CQkJLyogMHgwMDAwICovCisJX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMDE4ICovCisJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMDIwICovCisJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMDI4ICovCisJcHN3X3QJbWNja19vbGRfcHN3OwkJCS8qIDB4MDAzMCAqLworCXBzd190CWlvX29sZF9wc3c7CQkJLyogMHgwMDM4ICovCisJX191OAlwYWRfMHgwMDQwWzB4MDA1OC0weDAwNDBdOwkvKiAweDAwNDAgKi8KKwlwc3dfdAlleHRlcm5hbF9uZXdfcHN3OwkJLyogMHgwMDU4ICovCisJcHN3X3QJc3ZjX25ld19wc3c7CQkJLyogMHgwMDYwICovCisJcHN3X3QJcHJvZ3JhbV9uZXdfcHN3OwkJLyogMHgwMDY4ICovCisJcHN3X3QJbWNja19uZXdfcHN3OwkJCS8qIDB4MDA3MCAqLworCXBzd190CWlvX25ld19wc3c7CQkJLyogMHgwMDc4ICovCisJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KKwlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KKwlfX3UxNglleHRfaW50X2NvZGU7CQkJLyogMHgwMDg2ICovCisJX191MTYJc3ZjX2lsYzsJCQkvKiAweDAwODggKi8KKwlfX3UxNglzdmNfY29kZTsJCQkvKiAweDAwOGEgKi8KKwlfX3UxNglwZ21faWxjOwkJCS8qIDB4MDA4YyAqLworCV9fdTE2CXBnbV9jb2RlOwkJCS8qIDB4MDA4ZSAqLworCV9fdTMyCXRyYW5zX2V4Y19jb2RlOwkJCS8qIDB4MDA5MCAqLworCV9fdTE2CW1vbl9jbGFzc19udW07CQkJLyogMHgwMDk0ICovCisJX191MTYJcGVyX3BlcmNfYXRtaWQ7CQkJLyogMHgwMDk2ICovCisJX191MzIJcGVyX2FkZHJlc3M7CQkJLyogMHgwMDk4ICovCisJX191MzIJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDA5YyAqLworCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KKwlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCisJX191OAlwYWRfMHgwMGEyWzB4MDBiOC0weDAwYTJdOwkvKiAweDAwYTIgKi8KKwlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLworCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCisJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCisJX191MzIJaW9faW50X3dvcmQ7CQkJLyogMHgwMGMwICovCisJX191OAlwYWRfMHgwMGM0WzB4MDBjOC0weDAwYzRdOwkvKiAweDAwYzQgKi8KKwlfX3UzMglzdGZsX2ZhY19saXN0OwkJCS8qIDB4MDBjOCAqLworCV9fdTgJcGFkXzB4MDBjY1sweDAwZDQtMHgwMGNjXTsJLyogMHgwMGNjICovCisJX191MzIJZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHI7CS8qIDB4MDBkNCAqLworCV9fdTMyCWNwdV90aW1lcl9zYXZlX2FyZWFbMl07CQkvKiAweDAwZDggKi8KKwlfX3UzMgljbG9ja19jb21wX3NhdmVfYXJlYVsyXTsJLyogMHgwMGUwICovCisJX191MzIJbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsJLyogMHgwMGU4ICovCisJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KKwlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLworCV9fdTMyCWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KKwlfX3U4CXBhZF8weDAwZmNbMHgwMTAwLTB4MDBmY107CS8qIDB4MDBmYyAqLworCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MDEwMCAqLworCV9fdTgJcGFkXzB4MDExMFsweDAxMjAtMHgwMTEwXTsJLyogMHgwMTEwICovCiAKLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9wc3c7ICAgICAgICAgICAgICAgLyogMHgyMDAgKi8KLQlfX3U4CSAgICAgaXJiWzY0XTsJCSAgICAgICAvKiAweDIwOCAqLwotCV9fdTY0ICAgICAgICBzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgIC8qIDB4MjQ4ICovCi0JX191NjQgICAgICAgIGFzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgLyogMHgyNTAgKi8KLQlfX3U2NCAgICAgICAgZXhpdF90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI1OCAqLwotCV9fdTY0CSAgICAgdXNlcl90aW1lcjsJICAgICAgIC8qIDB4MjYwICovCi0JX191NjQJICAgICBzeXN0ZW1fdGltZXI7CSAgICAgICAvKiAweDI2OCAqLwotCV9fdTY0CSAgICAgc3RlYWxfdGltZXI7CSAgICAgICAvKiAweDI3MCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfdGltZXI7ICAgICAgICAvKiAweDI3OCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfY2xvY2s7ICAgICAgICAvKiAweDI4MCAqLwotICAgICAgICBwc3dfdCAgICAgICAgcmV0dXJuX21jY2tfcHN3OyAgICAgICAgICAvKiAweDI4OCAqLwotCV9fdTggICAgICAgICBwYWQ4WzB4YzAwLTB4MjkwXTsgICAgICAgIC8qIDB4MjkwICovCisJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlfX3UzMglhY2Nlc3NfcmVnc19zYXZlX2FyZWFbMTZdOwkvKiAweDAxMjAgKi8KKwlfX3UzMglmbG9hdGluZ19wdF9zYXZlX2FyZWFbOF07CS8qIDB4MDE2MCAqLworCV9fdTMyCWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgwMTgwICovCisJX191MzIJY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MDFjMCAqLwogCi0gICAgICAgIC8qIFN5c3RlbSBpbmZvIGFyZWEgKi8KLQlfX3UzMiAgICAgICAgc2F2ZV9hcmVhWzE2XTsgICAgICAgICAgICAvKiAweGMwMCAqLwotCV9fdTMyICAgICAgICBrZXJuZWxfc3RhY2s7ICAgICAgICAgICAgIC8qIDB4YzQwICovCi0JX191MzIgICAgICAgIHRocmVhZF9pbmZvOyAgICAgICAgICAgICAgLyogMHhjNDQgKi8KLQlfX3UzMiAgICAgICAgYXN5bmNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGM0OCAqLwotCV9fdTMyICAgICAgICBrZXJuZWxfYXNjZTsgICAgICAgICAgICAgIC8qIDB4YzRjICovCi0JX191MzIgICAgICAgIHVzZXJfYXNjZTsgICAgICAgICAgICAgICAgLyogMHhjNTAgKi8KLQlfX3UzMiAgICAgICAgcGFuaWNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGM1NCAqLwotCV9fdTMyCSAgICAgdXNlcl9leGVjX2FzY2U7CSAgICAgICAvKiAweGM1OCAqLwotCV9fdTgJICAgICBwYWQxMFsweGM2MC0weGM1Y107ICAgICAgIC8qIDB4YzVjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBzdGFydCAqLwotCXN0cnVjdCAgICAgICBjcHVpbmZvX1MzOTAgY3B1X2RhdGE7ICAgIC8qIDB4YzYwICovCi0JX191MzIgICAgICAgIGlwbF9kZXZpY2U7ICAgICAgICAgICAgICAgLyogMHhjN2MgKi8KLQkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIGVuZCAqLworCS8qIFJldHVybiBwc3dzLiAqLworCV9fdTMyCXNhdmVfYXJlYVsxNl07CQkJLyogMHgwMjAwICovCisJcHN3X3QJcmV0dXJuX3BzdzsJCQkvKiAweDAyNDAgKi8KKwlwc3dfdAlyZXR1cm5fbWNja19wc3c7CQkvKiAweDAyNDggKi8KIAotICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLwotCV9fdTY0CSAgICAgY2xvY2tfY29tcGFyYXRvcjsJICAgICAgIC8qIDB4YzgwICovCi0JX191MzIgICAgICAgIGV4dF9jYWxsX2Zhc3Q7ICAgICAgICAgICAgLyogMHhjODggKi8KLQlfX3UzMiAgICAgICAgcGVyY3B1X29mZnNldDsgICAgICAgICAgICAvKiAweGM4YyAqLwotCV9fdTMyICAgICAgICBjdXJyZW50X3Rhc2s7CSAgICAgICAvKiAweGM5MCAqLwotCV9fdTMyICAgICAgICBzb2Z0aXJxX3BlbmRpbmc7CSAgICAgICAvKiAweGM5NCAqLwotCV9fdTY0ICAgICAgICBpbnRfY2xvY2s7ICAgICAgICAgICAgICAgIC8qIDB4Yzk4ICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQxMVsweGUwMC0weGNhMF07ICAgICAgIC8qIDB4Y2EwICovCisJLyogQ1BVIHRpbWUgYWNjb3VudGluZyB2YWx1ZXMgKi8KKwlfX3U2NAlzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMjUwICovCisJX191NjQJYXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyNTggKi8KKwlfX3U2NAlleGl0X3RpbWVyOwkJCS8qIDB4MDI2MCAqLworCV9fdTY0CXVzZXJfdGltZXI7CQkJLyogMHgwMjY4ICovCisJX191NjQJc3lzdGVtX3RpbWVyOwkJCS8qIDB4MDI3MCAqLworCV9fdTY0CXN0ZWFsX3RpbWVyOwkJCS8qIDB4MDI3OCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX3RpbWVyOwkJLyogMHgwMjgwICovCisJX191NjQJbGFzdF91cGRhdGVfY2xvY2s7CQkvKiAweDAyODggKi8KIAotICAgICAgICAvKiAweGUwMCBpcyB1c2VkIGFzIGluZGljYXRvciBmb3IgZHVtcCB0b29scyAqLwotICAgICAgICAvKiB3aGV0aGVyIHRoZSBrZXJuZWwgZGllZCB3aXRoIHBhbmljKCkgb3Igbm90ICovCi0gICAgICAgIF9fdTMyICAgICAgICBwYW5pY19tYWdpYzsgICAgICAgICAgICAgIC8qIDB4ZTAwICovCisJLyogQ3VycmVudCBwcm9jZXNzLiAqLworCV9fdTMyCWN1cnJlbnRfdGFzazsJCQkvKiAweDAyOTAgKi8KKwlfX3UzMgl0aHJlYWRfaW5mbzsJCQkvKiAweDAyOTQgKi8KKwlfX3UzMglrZXJuZWxfc3RhY2s7CQkJLyogMHgwMjk4ICovCiAKLSAgICAgICAgLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLwotCV9fdTggICAgICAgICBwYWQxMlsweDEwMDAtMHhlMDRdOyAgICAgIC8qIDB4ZTA0ICovCisJLyogSW50ZXJydXB0IGFuZCBwYW5pYyBzdGFjay4gKi8KKwlfX3UzMglhc3luY19zdGFjazsJCQkvKiAweDAyOWMgKi8KKwlfX3UzMglwYW5pY19zdGFjazsJCQkvKiAweDAyYTAgKi8KKworCS8qIEFkZHJlc3Mgc3BhY2UgcG9pbnRlci4gKi8KKwlfX3UzMglrZXJuZWxfYXNjZTsJCQkvKiAweDAyYTQgKi8KKwlfX3UzMgl1c2VyX2FzY2U7CQkJLyogMHgwMmE4ICovCisJX191MzIJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMmFjICovCisKKwkvKiBTTVAgaW5mbyBhcmVhICovCisJY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDJiMCAqLworCV9fdTMyCWNwdV9ucjsJCQkJLyogMHgwMmI4ICovCisJX191MzIJc29mdGlycV9wZW5kaW5nOwkJLyogMHgwMmJjICovCisJX191MzIJcGVyY3B1X29mZnNldDsJCQkvKiAweDAyYzAgKi8KKwlfX3UzMglleHRfY2FsbF9mYXN0OwkJCS8qIDB4MDJjNCAqLworCV9fdTY0CWludF9jbG9jazsJCQkvKiAweDAyYzggKi8KKwlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMmQwICovCisJX191OAlwYWRfMHgwMmQ4WzB4MDMwMC0weDAyZDhdOwkvKiAweDAyZDggKi8KKworCS8qIEludGVycnVwdCByZXNwb25zZSBibG9jayAqLworCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzMDAgKi8KKworCV9fdTgJcGFkXzB4MDQwMFsweDBlMDAtMHgwNDAwXTsJLyogMHgwNDAwICovCisKKwkvKgorCSAqIDB4ZTAwIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBJUEwgUGFyYW1ldGVyIEluZm9ybWF0aW9uCisJICogYmxvY2suIER1bXAgdG9vbHMgbmVlZCBJUElCIGZvciBJUEwgYWZ0ZXIgZHVtcC4KKwkgKiBOb3RlOiBkbyBub3QgY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiBhbnkgZmllbGRzIGluIDB4MGUwMC0weDBmMDAKKwkgKi8KKwlfX3UzMglpcGliOwkJCQkvKiAweDBlMDAgKi8KKwlfX3UzMglpcGliX2NoZWNrc3VtOwkJCS8qIDB4MGUwNCAqLworCisJLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLworCV9fdTgJcGFkXzB4MGUwOFsweDEwMDAtMHgwZTA4XTsJLyogMHgwZTA4ICovCiAjZWxzZSAvKiAhX19zMzkweF9fICovCi0gICAgICAgIC8qIHByZWZpeCBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCV9fdTMyICAgICAgICBjY3cxWzJdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAwICovCi0JX191MzIgICAgICAgIGNjdzJbNF07ICAgICAgICAgICAgICAgICAgLyogMHgwMDggKi8KLQlfX3U4ICAgICAgICAgcGFkMVsweDgwLTB4MThdOyAgICAgICAgICAvKiAweDAxOCAqLwotCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCi0JX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KLQlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLwotCV9fdTMyICAgICAgICBkYXRhX2V4Y19jb2RlOyAgICAgICAgICAgIC8qIDB4MDkwICovCi0JX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KLQlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLwotCWFkZHJfdCAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCi0JX191OCAgICAgICAgIGV4Y19hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTAgKi8KLQlfX3U4ICAgICAgICAgcGVyX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMSAqLwotCV9fdTggICAgICAgICBvcF9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEyICovCi0JX191OCAgICAgICAgIGFyX2FjY2Vzc19pZDsgICAgICAgICAgICAgLyogMHgwYTMgKi8KLQlfX3U4ICAgICAgICAgcGFkMlsweEE4LTB4QTRdOyAgICAgICAgICAvKiAweDBhNCAqLwotCWFkZHJfdCAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MEEwICovCi0JYWRkcl90ICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCi0JX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLwotCV9fdTggICAgICAgICBwYWQzWzB4YzgtMHhjNF07ICAgICAgICAgIC8qIDB4MGM0ICovCi0JX191MzIgICAgICAgIHN0ZmxfZmFjX2xpc3Q7ICAgICAgICAgICAgLyogMHgwYzggKi8KLQlfX3U4ICAgICAgICAgcGFkNFsweGU4LTB4Y2NdOyAgICAgICAgICAvKiAweDBjYyAqLwotCV9fdTMyICAgICAgICBtY2NrX2ludGVycnVwdGlvbl9jb2RlWzJdOyAvKiAweDBlOCAqLwotCV9fdTggICAgICAgICBwYWQ1WzB4ZjQtMHhmMF07ICAgICAgICAgIC8qIDB4MGYwICovCi0JX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KLQlhZGRyX3QgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLwotCV9fdTggICAgICAgICBwYWQ2WzB4MTIwLTB4MTAwXTsgICAgICAgIC8qIDB4MTAwICovCi0JcHN3X3QgICAgICAgIHJlc3RhcnRfb2xkX3BzdzsgICAgICAgICAgLyogMHgxMjAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfb2xkX3BzdzsgICAgICAgICAvKiAweDEzMCAqLwotCXBzd190ICAgICAgICBzdmNfb2xkX3BzdzsgICAgICAgICAgICAgIC8qIDB4MTQwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fb2xkX3BzdzsgICAgICAgICAgLyogMHgxNTAgKi8KLQlwc3dfdCAgICAgICAgbWNja19vbGRfcHN3OyAgICAgICAgICAgICAvKiAweDE2MCAqLwotCXBzd190ICAgICAgICBpb19vbGRfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MTcwICovCi0JX191OCAgICAgICAgIHBhZDdbMHgxYTAtMHgxODBdOyAgICAgICAgLyogMHgxODAgKi8KLQlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDFhMCAqLwotCXBzd190ICAgICAgICBleHRlcm5hbF9uZXdfcHN3OyAgICAgICAgIC8qIDB4MWIwICovCi0JcHN3X3QgICAgICAgIHN2Y19uZXdfcHN3OyAgICAgICAgICAgICAgLyogMHgxYzAgKi8KLQlwc3dfdCAgICAgICAgcHJvZ3JhbV9uZXdfcHN3OyAgICAgICAgICAvKiAweDFkMCAqLwotCXBzd190ICAgICAgICBtY2NrX25ld19wc3c7ICAgICAgICAgICAgIC8qIDB4MWUwICovCi0JcHN3X3QgICAgICAgIGlvX25ld19wc3c7ICAgICAgICAgICAgICAgLyogMHgxZjAgKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9wc3c7ICAgICAgICAgICAgICAgLyogMHgyMDAgKi8KLQlfX3U4CSAgICAgaXJiWzY0XTsJCSAgICAgICAvKiAweDIxMCAqLwotCV9fdTY0ICAgICAgICBzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgIC8qIDB4MjUwICovCi0JX191NjQgICAgICAgIGFzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgLyogMHgyNTggKi8KLQlfX3U2NCAgICAgICAgZXhpdF90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI2MCAqLwotCV9fdTY0CSAgICAgdXNlcl90aW1lcjsJICAgICAgIC8qIDB4MjY4ICovCi0JX191NjQJICAgICBzeXN0ZW1fdGltZXI7CSAgICAgICAvKiAweDI3MCAqLwotCV9fdTY0CSAgICAgc3RlYWxfdGltZXI7CSAgICAgICAvKiAweDI3OCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfdGltZXI7ICAgICAgICAvKiAweDI4MCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfY2xvY2s7ICAgICAgICAvKiAweDI4OCAqLwotICAgICAgICBwc3dfdCAgICAgICAgcmV0dXJuX21jY2tfcHN3OyAgICAgICAgICAvKiAweDI5MCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDJhMF07ICAgICAgICAvKiAweDJhMCAqLwotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCi0JX191NjQgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KLSAgICAgICAgX191OCAgICAgICAgIHBhZDlbMHhkNDAtMHhjODBdOyAgICAgICAgLyogMHhjODAgKi8KLSAJX191NjQgICAgICAgIGtlcm5lbF9zdGFjazsgICAgICAgICAgICAgLyogMHhkNDAgKi8KLQlfX3U2NCAgICAgICAgdGhyZWFkX2luZm87ICAgICAgICAgICAgICAvKiAweGQ0OCAqLwotCV9fdTY0ICAgICAgICBhc3luY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDUwICovCi0JX191NjQgICAgICAgIGtlcm5lbF9hc2NlOyAgICAgICAgICAgICAgLyogMHhkNTggKi8KLQlfX3U2NCAgICAgICAgdXNlcl9hc2NlOyAgICAgICAgICAgICAgICAvKiAweGQ2MCAqLwotCV9fdTY0ICAgICAgICBwYW5pY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDY4ICovCi0JX191NjQJICAgICB1c2VyX2V4ZWNfYXNjZTsJICAgICAgIC8qIDB4ZDcwICovCi0JX191OAkgICAgIHBhZDEwWzB4ZDgwLTB4ZDc4XTsgICAgICAgLyogMHhkNzggKi8KLQkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIHN0YXJ0ICovCi0Jc3RydWN0ICAgICAgIGNwdWluZm9fUzM5MCBjcHVfZGF0YTsgICAgLyogMHhkODAgKi8KLQlfX3UzMiAgICAgICAgaXBsX2RldmljZTsgICAgICAgICAgICAgICAvKiAweGRiOCAqLwotCV9fdTMyICAgICAgICBwYWQxMTsgICAgICAgICAgICAgICAgICAgIC8qIDB4ZGJjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKwkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191MzIJY2N3MVsyXTsJCQkvKiAweDAwMDAgKi8KKwlfX3UzMgljY3cyWzRdOwkJCS8qIDB4MDAwOCAqLworCV9fdTgJcGFkXzB4MDAxOFsweDAwODAtMHgwMDE4XTsJLyogMHgwMDE4ICovCisJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KKwlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KKwlfX3UxNglleHRfaW50X2NvZGU7CQkJLyogMHgwMDg2ICovCisJX191MTYJc3ZjX2lsYzsJCQkvKiAweDAwODggKi8KKwlfX3UxNglzdmNfY29kZTsJCQkvKiAweDAwOGEgKi8KKwlfX3UxNglwZ21faWxjOwkJCS8qIDB4MDA4YyAqLworCV9fdTE2CXBnbV9jb2RlOwkJCS8qIDB4MDA4ZSAqLworCV9fdTMyCWRhdGFfZXhjX2NvZGU7CQkJLyogMHgwMDkwICovCisJX191MTYJbW9uX2NsYXNzX251bTsJCQkvKiAweDAwOTQgKi8KKwlfX3UxNglwZXJfcGVyY19hdG1pZDsJCQkvKiAweDAwOTYgKi8KKwlhZGRyX3QJcGVyX2FkZHJlc3M7CQkJLyogMHgwMDk4ICovCisJX191OAlleGNfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMCAqLworCV9fdTgJcGVyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTEgKi8KKwlfX3U4CW9wX2FjY2Vzc19pZDsJCQkvKiAweDAwYTIgKi8KKwlfX3U4CWFyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTMgKi8KKwlfX3U4CXBhZF8weDAwYTRbMHgwMGE4LTB4MDBhNF07CS8qIDB4MDBhNCAqLworCWFkZHJfdAl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwYTggKi8KKwlhZGRyX3QJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDBiMCAqLworCV9fdTE2CXN1YmNoYW5uZWxfaWQ7CQkJLyogMHgwMGI4ICovCisJX191MTYJc3ViY2hhbm5lbF9ucjsJCQkvKiAweDAwYmEgKi8KKwlfX3UzMglpb19pbnRfcGFybTsJCQkvKiAweDAwYmMgKi8KKwlfX3UzMglpb19pbnRfd29yZDsJCQkvKiAweDAwYzAgKi8KKwlfX3U4CXBhZF8weDAwYzRbMHgwMGM4LTB4MDBjNF07CS8qIDB4MDBjNCAqLworCV9fdTMyCXN0ZmxfZmFjX2xpc3Q7CQkJLyogMHgwMGM4ICovCisJX191OAlwYWRfMHgwMGNjWzB4MDBlOC0weDAwY2NdOwkvKiAweDAwY2MgKi8KKwlfX3UzMgltY2NrX2ludGVycnVwdGlvbl9jb2RlWzJdOwkvKiAweDAwZTggKi8KKwlfX3U4CXBhZF8weDAwZjBbMHgwMGY0LTB4MDBmMF07CS8qIDB4MDBmMCAqLworCV9fdTMyCWV4dGVybmFsX2RhbWFnZV9jb2RlOwkJLyogMHgwMGY0ICovCisJYWRkcl90CWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KKwlfX3U4CXBhZF8weDAxMDBbMHgwMTIwLTB4MDEwMF07CS8qIDB4MDEwMCAqLworCXBzd190CXJlc3RhcnRfb2xkX3BzdzsJCS8qIDB4MDEyMCAqLworCXBzd190CWV4dGVybmFsX29sZF9wc3c7CQkvKiAweDAxMzAgKi8KKwlwc3dfdAlzdmNfb2xkX3BzdzsJCQkvKiAweDAxNDAgKi8KKwlwc3dfdAlwcm9ncmFtX29sZF9wc3c7CQkvKiAweDAxNTAgKi8KKwlwc3dfdAltY2NrX29sZF9wc3c7CQkJLyogMHgwMTYwICovCisJcHN3X3QJaW9fb2xkX3BzdzsJCQkvKiAweDAxNzAgKi8KKwlfX3U4CXBhZF8weDAxODBbMHgwMWEwLTB4MDE4MF07CS8qIDB4MDE4MCAqLworCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDFhMCAqLworCXBzd190CWV4dGVybmFsX25ld19wc3c7CQkvKiAweDAxYjAgKi8KKwlwc3dfdAlzdmNfbmV3X3BzdzsJCQkvKiAweDAxYzAgKi8KKwlwc3dfdAlwcm9ncmFtX25ld19wc3c7CQkvKiAweDAxZDAgKi8KKwlwc3dfdAltY2NrX25ld19wc3c7CQkJLyogMHgwMWUwICovCisJcHN3X3QJaW9fbmV3X3BzdzsJCQkvKiAweDAxZjAgKi8KIAotICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLwotCV9fdTY0CSAgICAgY2xvY2tfY29tcGFyYXRvcjsJICAgICAgIC8qIDB4ZGMwICovCi0JX191NjQgICAgICAgIGV4dF9jYWxsX2Zhc3Q7ICAgICAgICAgICAgLyogMHhkYzggKi8KLQlfX3U2NCAgICAgICAgcGVyY3B1X29mZnNldDsgICAgICAgICAgICAvKiAweGRkMCAqLwotCV9fdTY0ICAgICAgICBjdXJyZW50X3Rhc2s7CSAgICAgICAvKiAweGRkOCAqLwotCV9fdTMyCSAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhkZTAgKi8KLQlfX3UzMgkgICAgIHBhZF8weDBkZTQ7CSAgICAgICAvKiAweGRlNCAqLwotCV9fdTY0ICAgICAgICBpbnRfY2xvY2s7ICAgICAgICAgICAgICAgIC8qIDB4ZGU4ICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQxMlsweGUwMC0weGRmMF07ICAgICAgIC8qIDB4ZGYwICovCisJLyogRW50cnkvZXhpdCBzYXZlIGFyZWEgJiByZXR1cm4gcHN3cy4gKi8KKwlfX3U2NAlzYXZlX2FyZWFbMTZdOwkJCS8qIDB4MDIwMCAqLworCXBzd190CXJldHVybl9wc3c7CQkJLyogMHgwMjgwICovCisJcHN3X3QJcmV0dXJuX21jY2tfcHN3OwkJLyogMHgwMjkwICovCiAKLSAgICAgICAgLyogMHhlMDAgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIGR1bXAgdG9vbHMgKi8KLSAgICAgICAgLyogd2hldGhlciB0aGUga2VybmVsIGRpZWQgd2l0aCBwYW5pYygpIG9yIG5vdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgcGFuaWNfbWFnaWM7ICAgICAgICAgICAgICAvKiAweGUwMCAqLworCS8qIENQVSBhY2NvdW50aW5nIGFuZCB0aW1pbmcgdmFsdWVzLiAqLworCV9fdTY0CXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyYTAgKi8KKwlfX3U2NAlhc3luY19lbnRlcl90aW1lcjsJCS8qIDB4MDJhOCAqLworCV9fdTY0CWV4aXRfdGltZXI7CQkJLyogMHgwMmIwICovCisJX191NjQJdXNlcl90aW1lcjsJCQkvKiAweDAyYjggKi8KKwlfX3U2NAlzeXN0ZW1fdGltZXI7CQkJLyogMHgwMmMwICovCisJX191NjQJc3RlYWxfdGltZXI7CQkJLyogMHgwMmM4ICovCisJX191NjQJbGFzdF91cGRhdGVfdGltZXI7CQkvKiAweDAyZDAgKi8KKwlfX3U2NAlsYXN0X3VwZGF0ZV9jbG9jazsJCS8qIDB4MDJkOCAqLworCisJLyogQ3VycmVudCBwcm9jZXNzLiAqLworCV9fdTY0CWN1cnJlbnRfdGFzazsJCQkvKiAweDAyZTAgKi8KKwlfX3U2NAl0aHJlYWRfaW5mbzsJCQkvKiAweDAyZTggKi8KKwlfX3U2NAlrZXJuZWxfc3RhY2s7CQkJLyogMHgwMmYwICovCisKKwkvKiBJbnRlcnJ1cHQgYW5kIHBhbmljIHN0YWNrLiAqLworCV9fdTY0CWFzeW5jX3N0YWNrOwkJCS8qIDB4MDJmOCAqLworCV9fdTY0CXBhbmljX3N0YWNrOwkJCS8qIDB4MDMwMCAqLworCisJLyogQWRkcmVzcyBzcGFjZSBwb2ludGVyLiAqLworCV9fdTY0CWtlcm5lbF9hc2NlOwkJCS8qIDB4MDMwOCAqLworCV9fdTY0CXVzZXJfYXNjZTsJCQkvKiAweDAzMTAgKi8KKwlfX3U2NAl1c2VyX2V4ZWNfYXNjZTsJCQkvKiAweDAzMTggKi8KKworCS8qIFNNUCBpbmZvIGFyZWEgKi8KKwljcHVpZF90CWNwdV9pZDsJCQkJLyogMHgwMzIwICovCisJX191MzIJY3B1X25yOwkJCQkvKiAweDAzMjggKi8KKwlfX3UzMglzb2Z0aXJxX3BlbmRpbmc7CQkvKiAweDAzMmMgKi8KKwlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDMzMCAqLworCV9fdTY0CWV4dF9jYWxsX2Zhc3Q7CQkJLyogMHgwMzM4ICovCisJX191NjQJaW50X2Nsb2NrOwkJCS8qIDB4MDM0MCAqLworCV9fdTY0CWNsb2NrX2NvbXBhcmF0b3I7CQkvKiAweDAzNDggKi8KKwlfX3U2NAl2ZHNvX3Blcl9jcHVfZGF0YTsJCS8qIDB4MDM1MCAqLworCV9fdTgJcGFkXzB4MDM1OFsweDAzODAtMHgwMzU4XTsJLyogMHgwMzU4ICovCisKKwkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2suICovCisJX191OAlpcmJbNjRdOwkJCS8qIDB4MDM4MCAqLwogCiAJLyogUGVyIGNwdSBwcmltYXJ5IHNwYWNlIGFjY2VzcyBsaXN0ICovCi0JX191OAkgICAgIHBhZF8weGUwNFsweGUzOC0weGUwNF07ICAgLyogMHhlMDQgKi8KLQlfX3U2NAkgICAgIHZkc29fcGVyX2NwdV9kYXRhOwkgICAgICAgLyogMHhlMzggKi8KLQlfX3UzMgkgICAgIHBhc3RlWzE2XTsJCSAgICAgICAvKiAweGU0MCAqLworCV9fdTMyCXBhc3RlWzE2XTsJCQkvKiAweDAzYzAgKi8KIAotCV9fdTgJICAgICBwYWQxM1sweDExYjgtMHhlODBdOyAgICAgIC8qIDB4ZTgwICovCisJX191OAlwYWRfMHgwNDAwWzB4MGUwMC0weDA0MDBdOwkvKiAweDA0MDAgKi8KIAotCS8qIDY0IGJpdCBleHRwYXJhbSB1c2VkIGZvciBwZmF1bHQsIGRpYWcgMjUwIGV0YyAgKi8KLQlfX3U2NCAgICAgICAgZXh0X3BhcmFtczI7ICAgICAgICAgICAgICAgLyogMHgxMUI4ICovCisJLyoKKwkgKiAweGUwMCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgSVBMIFBhcmFtZXRlciBJbmZvcm1hdGlvbgorCSAqIGJsb2NrLiBEdW1wIHRvb2xzIG5lZWQgSVBJQiBmb3IgSVBMIGFmdGVyIGR1bXAuCisJICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW55IGZpZWxkcyBpbiAweDBlMDAtMHgwZjAwCisJICovCisJX191NjQJaXBpYjsJCQkJLyogMHgwZTAwICovCisJX191MzIJaXBpYl9jaGVja3N1bTsJCQkvKiAweDBlMDggKi8KKwlfX3U4CXBhZF8weDBlMGNbMHgxMWI4LTB4MGUwY107CS8qIDB4MGUwYyAqLwogCi0JX191OCAgICAgICAgIHBhZDE0WzB4MTIwMC0weDExQzBdOyAgICAgIC8qIDB4MTFDMCAqLworCS8qIDY0IGJpdCBleHRwYXJhbSB1c2VkIGZvciBwZmF1bHQvZGlhZyAyNTA6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191NjQJZXh0X3BhcmFtczI7CQkJLyogMHgxMUI4ICovCisJX191OAlwYWRfMHgxMWMwWzB4MTIwMC0weDExQzBdOwkvKiAweDExQzAgKi8KIAotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovIAotCi0JX191NjQgICAgICAgIGZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07IC8qIDB4MTIwMCAqLwotCV9fdTY0ICAgICAgICBncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAvKiAweDEyODAgKi8KLQlfX3UzMiAgICAgICAgc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsgLyogMHgxMzAwICovCi0JX191OCAgICAgICAgIHBhZDE1WzB4MTMxOC0weDEzMTBdOyAgICAgIC8qIDB4MTMxMCAqLwotCV9fdTMyICAgICAgICBwcmVmaXhyZWdfc2F2ZV9hcmVhOyAgICAgICAvKiAweDEzMTggKi8KLQlfX3UzMiAgICAgICAgZnB0X2NyZWdfc2F2ZV9hcmVhOyAgICAgICAgLyogMHgxMzFjICovCi0JX191OCAgICAgICAgIHBhZDE2WzB4MTMyNC0weDEzMjBdOyAgICAgIC8qIDB4MTMyMCAqLwotCV9fdTMyICAgICAgICB0b2RfcHJvZ3JlZ19zYXZlX2FyZWE7ICAgICAvKiAweDEzMjQgKi8KLQlfX3UzMiAgICAgICAgY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsgICAgLyogMHgxMzI4ICovCi0JX191MzIgICAgICAgIGNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOyAgIC8qIDB4MTMzMCAqLwotCV9fdTggICAgICAgICBwYWQxN1sweDEzNDAtMHgxMzM4XTsgICAgICAvKiAweDEzMzggKi8KLQlfX3UzMiAgICAgICAgYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgLyogMHgxMzQwICovIAotCV9fdTY0ICAgICAgICBjcmVnc19zYXZlX2FyZWFbMTZdOyAgICAgICAvKiAweDEzODAgKi8KKwkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTY0CWZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07CS8qIDB4MTIwMCAqLworCV9fdTY0CWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgxMjgwICovCisJX191MzIJc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsJLyogMHgxMzAwICovCisJX191OAlwYWRfMHgxMzEwWzB4MTMxOC0weDEzMTBdOwkvKiAweDEzMTAgKi8KKwlfX3UzMglwcmVmaXhyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzE4ICovCisJX191MzIJZnB0X2NyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzFjICovCisJX191OAlwYWRfMHgxMzIwWzB4MTMyNC0weDEzMjBdOwkvKiAweDEzMjAgKi8KKwlfX3UzMgl0b2RfcHJvZ3JlZ19zYXZlX2FyZWE7CQkvKiAweDEzMjQgKi8KKwlfX3UzMgljcHVfdGltZXJfc2F2ZV9hcmVhWzJdOwkJLyogMHgxMzI4ICovCisJX191MzIJY2xvY2tfY29tcF9zYXZlX2FyZWFbMl07CS8qIDB4MTMzMCAqLworCV9fdTgJcGFkXzB4MTMzOFsweDEzNDAtMHgxMzM4XTsJLyogMHgxMzM4ICovCisJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgxMzQwICovCisJX191NjQJY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTM4MCAqLwogCiAJLyogYWxpZ24gdG8gdGhlIHRvcCBvZiB0aGUgcHJlZml4IGFyZWEgKi8KLQotCV9fdTggICAgICAgICBwYWQxOFsweDIwMDAtMHgxNDAwXTsgICAgICAvKiAweDE0MDAgKi8KKwlfX3U4CXBhZF8weDE0MDBbMHgyMDAwLTB4MTQwMF07CS8qIDB4MTQwMCAqLwogI2VuZGlmIC8qICFfX3MzOTB4X18gKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IC8qIEVuZCBzdHJ1Y3R1cmUqLwogCkBAIC00MzMsOCArNDQwLDYgQEAKIAlyZXR1cm4gYWRkcmVzczsKIH0KIAotI2RlZmluZSBfX1BBTklDX01BR0lDICAgICAgICAgICAweERFQURDMERFCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMjhlYzg3MC4uZmM3ZWRkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTc0LDcgKzc0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPmNwdV92bV9tYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG5leHQpKTsKIAl1cGRhdGVfbW0obmV4dCwgdHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjYwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICAgTWFjaGluZSBjaGVjayBoYW5kbGVyIGRlZmluaXRpb25zCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX05NSV9ICisjZGVmaW5lIF9BU01fUzM5MF9OTUlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IG1jaSB7CisJX191MzIgc2QgOiAgMTsgLyogMDAgc3lzdGVtIGRhbWFnZSAqLworCV9fdTMyIHBkIDogIDE7IC8qIDAxIGluc3RydWN0aW9uLXByb2Nlc3NpbmcgZGFtYWdlICovCisJX191MzIgc3IgOiAgMTsgLyogMDIgc3lzdGVtIHJlY292ZXJ5ICovCisJX191MzIJIDogIDE7IC8qIDAzICovCisJX191MzIgY2QgOiAgMTsgLyogMDQgdGltaW5nLWZhY2lsaXR5IGRhbWFnZSAqLworCV9fdTMyIGVkIDogIDE7IC8qIDA1IGV4dGVybmFsIGRhbWFnZSAqLworCV9fdTMyCSA6ICAxOyAvKiAwNiAqLworCV9fdTMyIGRnIDogIDE7IC8qIDA3IGRlZ3JhZGF0aW9uICovCisJX191MzIgdyAgOiAgMTsgLyogMDggd2FybmluZyBwZW5kaW5nICovCisJX191MzIgY3AgOiAgMTsgLyogMDkgY2hhbm5lbC1yZXBvcnQgcGVuZGluZyAqLworCV9fdTMyIHNwIDogIDE7IC8qIDEwIHNlcnZpY2UtcHJvY2Vzc29yIGRhbWFnZSAqLworCV9fdTMyIGNrIDogIDE7IC8qIDExIGNoYW5uZWwtc3Vic3lzdGVtIGRhbWFnZSAqLworCV9fdTMyCSA6ICAyOyAvKiAxMi0xMyAqLworCV9fdTMyIGIgIDogIDE7IC8qIDE0IGJhY2tlZCB1cCAqLworCV9fdTMyCSA6ICAxOyAvKiAxNSAqLworCV9fdTMyIHNlIDogIDE7IC8qIDE2IHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KKwlfX3UzMiBzYyA6ICAxOyAvKiAxNyBzdG9yYWdlIGVycm9yIGNvcnJlY3RlZCAqLworCV9fdTMyIGtlIDogIDE7IC8qIDE4IHN0b3JhZ2Uta2V5IGVycm9yIHVuY29ycmVjdGVkICovCisJX191MzIgZHMgOiAgMTsgLyogMTkgc3RvcmFnZSBkZWdyYWRhdGlvbiAqLworCV9fdTMyIHdwIDogIDE7IC8qIDIwIHBzdyBtd3AgdmFsaWRpdHkgKi8KKwlfX3UzMiBtcyA6ICAxOyAvKiAyMSBwc3cgbWFzayBhbmQga2V5IHZhbGlkaXR5ICovCisJX191MzIgcG0gOiAgMTsgLyogMjIgcHN3IHByb2dyYW0gbWFzayBhbmQgY2MgdmFsaWRpdHkgKi8KKwlfX3UzMiBpYSA6ICAxOyAvKiAyMyBwc3cgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB2YWxpZGl0eSAqLworCV9fdTMyIGZhIDogIDE7IC8qIDI0IGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzIHZhbGlkaXR5ICovCisJX191MzIJIDogIDE7IC8qIDI1ICovCisJX191MzIgZWMgOiAgMTsgLyogMjYgZXh0ZXJuYWwgZGFtYWdlIGNvZGUgdmFsaWRpdHkgKi8KKwlfX3UzMiBmcCA6ICAxOyAvKiAyNyBmbG9hdGluZyBwb2ludCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGdyIDogIDE7IC8qIDI4IGdlbmVyYWwgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBjciA6ICAxOyAvKiAyOSBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIJIDogIDE7IC8qIDMwICovCisJX191MzIgc3QgOiAgMTsgLyogMzEgc3RvcmFnZSBsb2dpY2FsIHZhbGlkaXR5ICovCisJX191MzIgaWUgOiAgMTsgLyogMzIgaW5kaXJlY3Qgc3RvcmFnZSBlcnJvciAqLworCV9fdTMyIGFyIDogIDE7IC8qIDMzIGFjY2VzcyByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGRhIDogIDE7IC8qIDM0IGRlbGF5ZWQgYWNjZXNzIGV4Y2VwdGlvbiAqLworCV9fdTMyCSA6ICA3OyAvKiAzNS00MSAqLworCV9fdTMyIHByIDogIDE7IC8qIDQyIHRvZCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBmYyA6ICAxOyAvKiA0MyBmcCBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgYXAgOiAgMTsgLyogNDQgYW5jaWxsYXJ5IHJlcG9ydCAqLworCV9fdTMyCSA6ICAxOyAvKiA0NSAqLworCV9fdTMyIGN0IDogIDE7IC8qIDQ2IGNwdSB0aW1lciB2YWxpZGl0eSAqLworCV9fdTMyIGNjIDogIDE7IC8qIDQ3IGNsb2NrIGNvbXBhcmF0b3IgdmFsaWRpdHkgKi8KKwlfX3UzMgkgOiAxNjsgLyogNDctNjMgKi8KK307CisKK3N0cnVjdCBwdF9yZWdzOworCitleHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9BU01fUzM5MF9OTUlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGRiNDUyM2YuLjYxODYyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTQyLDIyICs0Miw4IEBACiAJYXNtIHZvbGF0aWxlKCJzdGlkcCAwKCUxKSIgOiAiPW0iICgqcHRyKSA6ICJhIiAocHRyKSk7CiB9CiAKLXN0cnVjdCBjcHVpbmZvX1MzOTAKLXsKLSAgICAgICAgY3B1aWRfdCAgY3B1X2lkOwotICAgICAgICBfX3UxNiAgICBjcHVfYWRkcjsKLSAgICAgICAgX191MTYgICAgY3B1X25yOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOwotI2lmZGVmIF9fczM5MHhfXwotICAgICAgICB1bnNpZ25lZCBsb25nICpwbWRfcXVpY2s7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgKnB0ZV9xdWljazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OwotfTsKLQogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKLWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKik7CitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyh2b2lkKTsKIGV4dGVybiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqKTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA4OTIwMDI1Li5mMWIwNTE2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xNzIsNiArMTcyLDggQEAKICNkZWZpbmUgTlVNX0NSUwkJMTYKICNkZWZpbmUgTlVNX0FDUlMJMTYKIAorI2RlZmluZSBOVU1fQ1JfV09SRFMJMworCiAjZGVmaW5lIEZQUl9TSVpFCTgKICNkZWZpbmUgRlBDX1NJWkUJNAogI2RlZmluZSBGUENfUEFEX1NJWkUJNCAvKiBnY2MgaW5zaXN0cyBvbiBhbGlnbmluZyB0aGUgZnByZWdzICovCkBAIC0zMzQsNyArMzM2LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1bnNpZ25lZCBsb25nIGNyWzNdOworCXVuc2lnbmVkIGxvbmcgY3JbTlVNX0NSX1dPUkRTXTsKIH0gcGVyX2NyX3dvcmRzOwogCiAjZGVmaW5lIFBFUl9FTV9NQVNLIDB4RTgwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggMjdmYzE3NC4uNDAyZDZkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0zMTQsNiArMzE0LDcgQEAKIAkJCSAgICBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIHFkaW8gZXJyb3JzIHJlcG9ydGVkIHRvIHRoZSB1cHBlci1sYXllciBwcm9ncmFtICovCisjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9UQVJHRVQJCQkweDAyCiAjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9BQ0NFU1NfRVhDRVBUSU9OCTB4MTAKICNkZWZpbmUgUURJT19FUlJPUl9TSUdBX0JVU1kJCQkweDIwCiAjZGVmaW5lIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OCTB4NDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAwMjRiOTFlLi4yMDA5MTU4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC01MCwxMiArNTAsNyBAQAogIAogI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZCTIwCQkvKiBTY2hlZHVsZSBwZW5hbHR5ICovCiAKLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9ucikKLQotc3RhdGljIGlubGluZSBfX3UxNiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlyZXR1cm4gc3RhcCgpOwotfQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShTMzkwX2xvd2NvcmUuY3B1X25yKQogCiAvKgogICogcmV0dXJucyAxIGlmIGNwdSBpcyBpbiBzdG9wcGVkL2NoZWNrIHN0b3BwZWQgc3RhdGUgb3Igbm90IG9wZXJhdGlvbmFsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggYzc4NmFiNi4uMDIzMzBjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjIsNCArNjIsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCBkMDc0NjczLi5jZDAyNDFkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC0xMDAsNiArMTAwLDcgQEAKIAogc3RhdGljIGlubGluZSBjaGFyICpzdHJjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCiB7CisjaWYgX19HTlVDX18gPCA0CiAJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gMDsKIAljaGFyICpyZXQgPSBkc3Q7CiAKQEAgLTEwOSwxMCArMTEwLDE0IEBACiAJCTogIismYSIgKGRzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJjcHkoZHN0LCBzcmMpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcjAgYXNtKCIwIikgPSAwOwogCWNvbnN0IGNoYXIgKnRtcCA9IHM7CiAKQEAgLTEyMSw2ICsxMjYsOSBAQAogCQkiCWpvCTBiIgogCQk6ICIrZCIgKHIwKSwgIithIiAodG1wKSA6ICA6ICJjYyIpOwogCXJldHVybiByMCAtICh1bnNpZ25lZCBsb25nKSBzOworI2Vsc2UKKwlyZXR1cm4gX19idWlsdGluX3N0cmxlbihzKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBzaXplX3QgbikKQEAgLTEzNSw3ICsxNDMsMTMgQEAKIAkJOiAiK2EiIChlbmQpLCAiK2EiICh0bXApIDogImQiIChyMCkgIDogImNjIik7CiAJcmV0dXJuIGVuZCAtIHM7CiB9Ci0KKyNlbHNlIC8qIElOX0FSQ0hfU1RSSU5HX0MgKi8KK3ZvaWQgKm1lbWNocihjb25zdCB2b2lkICogcywgaW50IGMsIHNpemVfdCBuKTsKK3ZvaWQgKm1lbXNjYW4odm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKK2NoYXIgKnN0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyk7CitjaGFyICpzdHJjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKTsKK3NpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBzaXplX3Qgbik7CiAjZW5kaWYgLyogIUlOX0FSQ0hfU1RSSU5HX0MgKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCmluZGV4IGFkOTMyMTIuLjlkNzAwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaApAQCAtMTAwLDYgKzEwMCw3IEBACiAJCWNoYXIgcmVzZXJ2ZWRfMVsyNF07CiAKIAl9IHZtWzhdOworCWNoYXIgcmVzZXJ2ZWRfNTQ0WzM1NTJdOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgc3RzaSh2b2lkICpzeXNpbmZvLCBpbnQgZmMsIGludCBzZWwxLCBpbnQgc2VsMikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggZDYwMzk0Yi4uMzA0Y2ZmYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAkgKiBJZiB0aGUgcHJvY2VzcyBvbmx5IHJhbiBvbiB0aGUgbG9jYWwgY3B1LCBkbyBhIGxvY2FsIGZsdXNoLgogCSAqLwogCWxvY2FsX2NwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmIChjcHVzX2VxdWFsKG1tLT5jcHVfdm1fbWFzaywgbG9jYWxfY3B1bWFzaykpCisJaWYgKGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksICZsb2NhbF9jcHVtYXNrKSkKIAkJX190bGJfZmx1c2hfbG9jYWwoKTsKIAllbHNlCiAJCV9fdGxiX2ZsdXNoX2dsb2JhbCgpOwpAQCAtNzMsNyArNzMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfZmx1c2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqIG1tKQogewotCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KG1tLT5jcHVfdm1fbWFzaykpKQorCWlmICh1bmxpa2VseShjcHVtYXNrX2VtcHR5KG1tX2NwdW1hc2sobW0pKSkpCiAJCXJldHVybjsKIAkvKgogCSAqIElmIHRoZSBtYWNoaW5lIGhhcyBJRFRFIHdlIHByZWZlciB0byBkbyBhIHBlciBtbSBmbHVzaApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCBjOTc5YzNiLi41ZTBhZDYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNSw3ICs1LDYgQEAKIAogI2RlZmluZSBtY19jYXBhYmxlKCkJKDEpCiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KTsKIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZWdyb3VwX21hc2sodW5zaWduZWQgaW50IGNwdSk7CiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmgKaW5kZXggM2E1MjY3ZC4uODQwNmEyYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdnRvYy5oCkBAIC0zOSw3ICszOSw3IEBACiAJX191MTYgZGF5OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbAorc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsX2NkbAogewogCWNoYXIgdm9sa2V5WzRdOwkJLyogdm9sdW1lIGtleSA9IHZvbHVtZSBsYWJlbCAqLwogCWNoYXIgdm9sbGJsWzRdOwkJLyogdm9sdW1lIGxhYmVsICovCkBAIC01Niw2ICs1NiwxNCBAQAogCWNoYXIgcmVzM1syOV07CQkvKiByZXNlcnZlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9sZGwgeworCWNoYXIgdm9sbGJsWzRdOwkJLyogdm9sdW1lIGxhYmVsICovCisJY2hhciB2b2xpZFs2XTsJCS8qIHZvbHVtZSBpZGVudGlmaWVyICovCisJY2hhciByZXMzWzY5XTsJCS8qIHJlc2VydmVkICovCisJY2hhciBsZGxfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIsIHZhbGlkIGZvciBsZGwgZm9ybWF0ICovCisJX191NjQgZm9ybWF0dGVkX2Jsb2NrczsgLyogdmFsaWQgd2hlbiBsZGxfdmVyc2lvbiA+PSBmMiAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgdnRvY19leHRlbnQKIHsKIAlfX3U4IHR5cGVpbmQ7CQkJLyogZXh0ZW50IHR5cGUgaW5kaWNhdG9yICovCkBAIC0xNDAsNyArMTQ4LDExIEBACiAJY2hhciByZXMyWzEwXTsJCS8qIHJlc2VydmVkICovCiAJX191OCBEUzRFRkxWTDsJCS8qIGV4dGVuZGVkIGZyZWUtc3BhY2UgbWFuYWdlbWVudCBsZXZlbCAqLwogCXN0cnVjdCB2dG9jX2NjaGhiIERTNEVGUFRSOyAvKiBwb2ludGVyIHRvIGV4dGVuZGVkIGZyZWUtc3BhY2UgaW5mbyAqLwotCWNoYXIgcmVzM1s5XTsJCS8qIHJlc2VydmVkICovCisJY2hhciByZXMzOwkJLyogcmVzZXJ2ZWQgKi8KKwlfX3UzMiBEUzREQ1lMOwkJLyogbnVtYmVyIG9mIGxvZ2ljYWwgY3lscyAqLworCWNoYXIgcmVzNFsyXTsJCS8qIHJlc2VydmVkICovCisJX191OCBEUzRERVZGMjsJCS8qIGRldmljZSBmbGFncyAqLworCWNoYXIgcmVzNTsJCS8qIHJlc2VydmVkICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHZ0b2NfZHM1ZXh0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCAzZWRjNmM2Li4yMjhlMzEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTE3LDEwICsxNywxMiBAQAogIwogQ0ZMQUdTX3B0cmFjZS5vCQkrPSAtRFVUU19NQUNISU5FPSciJChVVFNfTUFDSElORSkiJwogCitDRkxBR1Nfc3lzaW5mby5vICs9IC1JaW5jbHVkZS9tYXRoLWVtdSAtSWFyY2gvczM5MC9tYXRoLWVtdSAtdworCiBvYmoteQk6PSAgYml0bWFwLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIGJhc2UubyBlYXJseS5vIHNldHVwLm8gXAogCSAgICBwcm9jZXNzb3IubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAogCSAgICBzMzkwX2V4dC5vIGRlYnVnLm8gaXJxLm8gaXBsLm8gZGlzLm8gZGlhZy5vIG1lbV9kZXRlY3QubyBcCi0JICAgIHZkc28ubyB2dGltZS5vCisJICAgIHZkc28ubyB2dGltZS5vIHN5c2luZm8ubyBubWkubwogCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxlbnRyeTY0Lm8sZW50cnkubykKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYjQxZjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUwotICogICAgQml0bWFwcyBmb3Igc2V0X2JpdCwgY2xlYXJfYml0LCB0ZXN0X2FuZF9zZXRfYml0LCAuLi4KLSAqICAgIFNlZSBpbmNsdWRlL2FzbS1zMzkwL3tiaXRvcHMuaHxwb3NpeF90eXBlcy5ofSBmb3IgZGV0YWlscwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKi8KLQotICAgICAgICAgLmdsb2JsIF9vaV9iaXRtYXAKLV9vaV9iaXRtYXA6Ci0gICAgICAgICAuYnl0ZSAgMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwCi0KLSAgICAgICAgIC5nbG9ibCBfbmlfYml0bWFwCi1fbmlfYml0bWFwOgotICAgICAgICAgLmJ5dGUgIDB4RkUsMHhGRCwweEZCLDB4RjcsMHhFRiwweERGLDB4QkYsMHg3RgotCi0gICAgICAgICAuZ2xvYmwgX3piX2ZpbmRtYXAKLV96Yl9maW5kbWFwOgotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCAKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNwotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw4Ci0KLSAgICAgICAgIC5nbG9ibCBfc2JfZmluZG1hcAotX3NiX2ZpbmRtYXA6Ci0gICAgICAgICAuYnl0ZSAgOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA3LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2JpdG1hcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU0NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogICAgQml0bWFwcyBmb3Igc2V0X2JpdCwgY2xlYXJfYml0LCB0ZXN0X2FuZF9zZXRfYml0LCAuLi4KKyAqICAgIFNlZSBpbmNsdWRlL2FzbS97Yml0b3BzLmh8cG9zaXhfdHlwZXMuaH0gZm9yIGRldGFpbHMKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAwOQorICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworY29uc3QgY2hhciBfb2lfYml0bWFwW10gPSB7IDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAgfTsKK0VYUE9SVF9TWU1CT0woX29pX2JpdG1hcCk7CisKK2NvbnN0IGNoYXIgX25pX2JpdG1hcFtdID0geyAweGZlLCAweGZkLCAweGZiLCAweGY3LCAweGVmLCAweGRmLCAweGJmLCAweDdmIH07CitFWFBPUlRfU1lNQk9MKF9uaV9iaXRtYXApOworCitjb25zdCBjaGFyIF96Yl9maW5kbWFwW10gPSB7CisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNiwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw3LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsOCB9OworRVhQT1JUX1NZTUJPTChfemJfZmluZG1hcCk7CisKK2NvbnN0IGNoYXIgX3NiX2ZpbmRtYXBbXSA9IHsKKwk4LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwIH07CitFWFBPUlRfU1lNQk9MKF9zYl9maW5kbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKaW5kZXggYTJiZTNhOS4uMTIzZGQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKQEAgLTEsMTAgKzEsMTEgQEAKICNpZm5kZWYgX1BUUkFDRTMyX0gKICNkZWZpbmUgX1BUUkFDRTMyX0gKIAorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4gICAgLyogbmVlZGVkIGZvciBOVU1fQ1JfV09SRFMgKi8KICNpbmNsdWRlICJjb21wYXRfbGludXguaCIgIC8qIG5lZWRlZCBmb3IgcHN3X2NvbXBhdF90ICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlfX3UzMiBjclszXTsKKwlfX3UzMiBjcltOVU1fQ1JfV09SRFNdOwogfSBwZXJfY3Jfd29yZHMzMjsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IGJhMDNmYzAuLmJlOGJjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogc3RhdGljIGludAogZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgaSA9IDAsIHJjID0gMDsKKwlpbnQgaSwgcmMgPSAwOwogCWZpbGVfcHJpdmF0ZV9pbmZvX3QgKnBfaW5mbzsKIAlkZWJ1Z19pbmZvX3QgKmRlYnVnX2luZm8sICpkZWJ1Z19pbmZvX3NuYXBzaG90OwogCkBAIC02NDIsOCArNjQyLDcgQEAKIAlwX2luZm8gPSBrbWFsbG9jKHNpemVvZihmaWxlX3ByaXZhdGVfaW5mb190KSwKIAkJCQkJCUdGUF9LRVJORUwpOwogCWlmKCFwX2luZm8pewotCQlpZihkZWJ1Z19pbmZvX3NuYXBzaG90KQotCQkJZGVidWdfaW5mb19mcmVlKGRlYnVnX2luZm9fc25hcHNob3QpOworCQlkZWJ1Z19pbmZvX2ZyZWUoZGVidWdfaW5mb19zbmFwc2hvdCk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjk4LDggKzY5Nyw3IEBACiAJaWYgKCh1aWQgIT0gMCkgfHwgKGdpZCAhPSAwKSkKIAkJcHJfd2FybmluZygiUm9vdCBiZWNvbWVzIHRoZSBvd25lciBvZiBhbGwgczM5MGRiZiBmaWxlcyAiCiAJCQkgICAiaW4gc3lzZnNcbiIpOwotCWlmICghaW5pdGlhbGl6ZWQpCi0JCUJVRygpOworCUJVR19PTighaW5pdGlhbGl6ZWQpOwogCW11dGV4X2xvY2soJmRlYnVnX211dGV4KTsKIAogICAgICAgICAvKiBjcmVhdGUgbmV3IGRlYnVnX2luZm8gKi8KQEAgLTExNTYsNyArMTE1NCw2IEBACiAJZWxzZSB7CiAJCWRlYnVnZnNfcmVtb3ZlKGlkLT5kZWJ1Z2ZzX2VudHJpZXNbaV0pOwogCQlpZC0+dmlld3NbaV0gPSBOVUxMOwotCQlyYyA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkLT5sb2NrLCBmbGFncyk7CiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKaW5kZXggMmEyY2EyNi4uNGQyMjFjOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwpAQCAtNiw2ICs2LDcgQEAKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2NwY21kLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KICNpbmNsdWRlICJlbnRyeS5oIgpAQCAtMTczLDE5ICsxNzUsMjEgQEAKIAkJcGFnZV9zZXRfc3RvcmFnZV9rZXkoaW5pdF9wZm4gPDwgUEFHRV9TSElGVCwgUEFHRV9ERUZBVUxUX0tFWSk7CiB9CiAKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBzeXNpbmZvXzNfMl8yIHZtbXMgX19hbGlnbmVkKFBBR0VfU0laRSk7CisKIHN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7CisJLyogTm8gVk0gaW5mb3JtYXRpb24/IExvb2tzIGxpa2UgTFBBUiAqLworCWlmIChzdHNpKCZ2bW1zLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQorCQlyZXR1cm47CisJaWYgKCF2bW1zLmNvdW50KQorCQlyZXR1cm47CiAKLQlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2lkKTsKLQotCS8qIFJ1bm5pbmcgdW5kZXIgei9WTSA/ICovCi0JaWYgKGNwdWluZm8tPmNwdV9pZC52ZXJzaW9uID09IDB4ZmYpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX1ZNOwotCi0JLyogUnVubmluZyB1bmRlciBLVk0gPyAqLwotCWlmIChjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiA9PSAweGZlKQorCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNPyBJZiBub3Qgd2UgYXNzdW1lIHovVk0gKi8KKwlpZiAoIW1lbWNtcCh2bW1zLnZtWzBdLmNwaSwgIlx4ZDJceGU1XHhkNCIsIDMpKQogCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19LVk07CisJZWxzZQorCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19WTTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3BnbV9jaGVja19oYW5kbGVyKHZvaWQpCkBAIC0zNDgsNyArMzUyLDYgQEAKIAogCS8qIGNvcHkgYXJjaCBjb21tYW5kIGxpbmUgKi8KIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOwotCWJvb3RfY29tbWFuZF9saW5lW0FSQ0hfQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9IDA7CiAKIAkvKiBhcHBlbmQgSVBMIFBBUk0gZGF0YSB0byB0aGUgYm9vdCBjb21tYW5kIGxpbmUgKi8KIAlpZiAoTUFDSElORV9JU19WTSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwppbmRleCBlYzdlMzVmLi4xMDQ2YzJjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwpAQCAtNDY5LDYgKzQ2OSw4IEBACiAJLm9yZwkweDEwMDAwCiBzdGFydHVwOmJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQogLkxQRzA6CisJeGMJMHgyMDAoMjU2KSwweDIwMAkjIHBhcnRpYWxseSBjbGVhciBsb3djb3JlCisJeGMJMHgzMDAoMjU2KSwweDMwMAogCiAjaWZuZGVmIENPTkZJR19NQVJDSF9HNQogCSMgY2hlY2sgcHJvY2Vzc29yIHZlcnNpb24gYWdhaW5zdCBNQVJDSF97RzUsWjkwMCxaOTkwLFo5XzEwOSxaMTB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwppbmRleCBkYjQ3NmQxLi4yY2VkODQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKQEAgLTIwLDcgKzIwLDYgQEAKIAlsY3RsCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpICMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWwJJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQogCQkJCQkjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCi0JbXZjCV9fTENfSVBMREVWKDQpLElQTF9ERVZJQ0UtUEFSTUFSRUEoJXIxMikKICMKICMgU2V0dXAgc3RhY2sKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCmluZGV4IGY5ZjcwYWEuLjY1NjY3YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwpAQCAtODYsNyArODYsNiBAQAogCWxjdGxnCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpCSMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWxnCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKQkjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQotCW12YwlfX0xDX0lQTERFVig0KSxJUExfREVWSUNFKzQtUEFSTUFSRUEoJXIxMikKIAlsZ2hpCSVyMCxfX0xDX1BBU1RFCiAJc3RnCSVyMCxfX0xDX1ZEU09fUEVSX0NQVQogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggMmRjZjU5MGYuLjZmMzcxMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vcmVzZXQuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogCiAjZGVmaW5lIElQTF9QQVJNX0JMT0NLX1ZFUlNJT04gMAogCkBAIC01NiwxMyArNTYsMTQgQEAKIH07CiAKIC8qCi0gKiBGaXZlIHNodXRkb3duIGFjdGlvbiB0eXBlcyBhcmUgc3VwcG9ydGVkOgorICogVGhlIGZvbGxvd2luZyBzaHV0ZG93biBhY3Rpb24gdHlwZXMgYXJlIHN1cHBvcnRlZDoKICAqLwogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fSVBMX1NUUgkJImlwbCIKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX1JFSVBMX1NUUgkicmVpcGwiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9EVU1QX1NUUgkiZHVtcCIKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX1ZNQ01EX1NUUgkidm1jbWQiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9TVE9QX1NUUgkic3RvcCIKKyNkZWZpbmUgU0hVVERPV05fQUNUSU9OX0RVTVBfUkVJUExfU1RSCSJkdW1wX3JlaXBsIgogCiBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIHsKIAljaGFyICpuYW1lOwpAQCAtMTQ2LDYgKzE0Nyw3IEBACiBzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2ZjcDsKIHN0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqcmVpcGxfYmxvY2tfY2N3Owogc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19uc3M7CitzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2FjdHVhbDsKIAogc3RhdGljIGludCBkdW1wX2NhcGFiaWxpdGllcyA9IERVTVBfVFlQRV9OT05FOwogc3RhdGljIGVudW0gZHVtcF90eXBlIGR1bXBfdHlwZSA9IERVTVBfVFlQRV9OT05FOwpAQCAtODM1LDYgKzgzNyw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfQ0NXX1ZNOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfQ0NXX0NJTzsKKwkJcmVpcGxfYmxvY2tfYWN0dWFsID0gcmVpcGxfYmxvY2tfY2N3OwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX0ZDUDoKIAkJaWYgKGRpYWczMDhfc2V0X3dvcmtzKQpAQCAtODQzLDYgKzg0Niw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfRkNQX1JPX1ZNOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfRkNQX1JPX0RJQUc7CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX2ZjcDsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1BfRFVNUDoKIAkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9EVU1QOwpAQCAtODUyLDYgKzg1Niw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfTlNTX0RJQUc7CiAJCWVsc2UKIAkJCXJlaXBsX21ldGhvZCA9IFJFSVBMX01FVEhPRF9OU1M7CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX25zczsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9VTktOT1dOOgogCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfREVGQVVMVDsKQEAgLTk2MCw3ICs5NjUsNiBAQAogCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUlQTF9NRVRIT0RfRkNQX0RVTVA6Ci0JZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CkBAIC0xMDY5LDEwICsxMDczLDEyIEBACiB7CiAJaW50IHJjOwogCi0JaWYgKCghZGlhZzMwOF9zZXRfd29ya3MpICYmIChpcGxfaW5mby50eXBlICE9IElQTF9UWVBFX0ZDUCkpCi0JCXJldHVybiAwOwotCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1ApKQotCQltYWtlX2F0dHJzX3JvKHJlaXBsX2ZjcF9hdHRycyk7CisJaWYgKCFkaWFnMzA4X3NldF93b3JrcykgeworCQlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1ApCisJCQltYWtlX2F0dHJzX3JvKHJlaXBsX2ZjcF9hdHRycyk7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KIAogCXJlaXBsX2Jsb2NrX2ZjcCA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXJlaXBsX2Jsb2NrX2ZjcCkKQEAgLTEyNTMsNyArMTI1OSw2IEBACiAJCWRpYWczMDgoRElBRzMwOF9EVU1QLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBEVU1QX01FVEhPRF9OT05FOgotCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9CiAJcHJpbnRrKEtFUk5fRU1FUkcgIkR1bXAgZmFpbGVkIVxuIik7CkBAIC0xMzMyLDYgKzEzMzcsNDkgQEAKIAkuaW5pdAk9IGR1bXBfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIGR1bXBfcmVpcGxfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCS8qCisJICogQnlwYXNzIGR5bmFtaWMgYWRkcmVzcyB0cmFuc2xhdGlvbiAoREFUKSB3aGVuIHN0b3JpbmcgSVBMIHBhcmFtZXRlcgorCSAqIGluZm9ybWF0aW9uIGJsb2NrIGFkZHJlc3MgYW5kIGNoZWNrc3VtIGludG8gdGhlIHByZWZpeCBhcmVhCisJICogKGNvcnJlc3BvbmRpbmcgdG8gYWJzb2x1dGUgYWRkcmVzc2VzIDAtODE5MSkuCisJICogV2hlbiBlbmhhbmNlZCBEQVQgYXBwbGllcyBhbmQgdGhlIFNURSBmb3JtYXQgY29udHJvbCBpbiBvbmUsCisJICogdGhlIGFic29sdXRlIGFkZHJlc3MgaXMgZm9ybWVkIHdpdGhvdXQgcHJlZml4aW5nLiBJbiB0aGlzIGNhc2UgYQorCSAqIG5vcm1hbCBzdG9yZSAoc3RnL3N0KSBpbnRvIHRoZSBwcmVmaXggYXJlYSB3b3VsZCBubyBtb3JlIG1hdGNoIHRvCisJICogYWJzb2x1dGUgYWRkcmVzc2VzIDAtODE5MS4KKwkgKi8KKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlhc20gdm9sYXRpbGUoInN0dXJnICUwLCUxIgorCQk6OiAiYSIgKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19hY3R1YWwpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliKSk7CisjZWxzZQorCWFzbSB2b2xhdGlsZSgic3R1cmEgJTAsJTEiCisJCTo6ICJhIiAoKHVuc2lnbmVkIGxvbmcpIHJlaXBsX2Jsb2NrX2FjdHVhbCksCisJCSJhIiAoJmxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0tPmlwaWIpKTsKKyNlbmRpZgorCWFzbSB2b2xhdGlsZSgic3R1cmEgJTAsJTEiCisJCTo6ICJhIiAoY3N1bV9wYXJ0aWFsKHJlaXBsX2Jsb2NrX2FjdHVhbCwKKwkJCQkgICAgIHJlaXBsX2Jsb2NrX2FjdHVhbC0+aGRyLmxlbiwgMCkpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliX2NoZWNrc3VtKSk7CisJcHJlZW1wdF9lbmFibGUoKTsKKwlkdW1wX3J1bih0cmlnZ2VyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZHVtcF9yZWlwbF9pbml0KHZvaWQpCit7CisJaWYgKCFkaWFnMzA4X3NldF93b3JrcykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIF9fcmVmZGF0YSBkdW1wX3JlaXBsX2FjdGlvbiA9IHsKKwkubmFtZQk9IFNIVVRET1dOX0FDVElPTl9EVU1QX1JFSVBMX1NUUiwKKwkuZm4JPSBkdW1wX3JlaXBsX3J1biwKKwkuaW5pdAk9IGR1bXBfcmVpcGxfaW5pdCwKK307CisKIC8qCiAgKiB2bWNtZCBzaHV0ZG93biBhY3Rpb246IFRyaWdnZXIgdm0gY29tbWFuZCBvbiBzaHV0ZG93bi4KICAqLwpAQCAtMTQyMSw3ICsxNDY5LDggQEAKIC8qIGFjdGlvbiBsaXN0ICovCiAKIHN0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uICpzaHV0ZG93bl9hY3Rpb25zX2xpc3RbXSA9IHsKLQkmaXBsX2FjdGlvbiwgJnJlaXBsX2FjdGlvbiwgJmR1bXBfYWN0aW9uLCAmdm1jbWRfYWN0aW9uLCAmc3RvcF9hY3Rpb259OworCSZpcGxfYWN0aW9uLCAmcmVpcGxfYWN0aW9uLCAmZHVtcF9yZWlwbF9hY3Rpb24sICZkdW1wX2FjdGlvbiwKKwkmdm1jbWRfYWN0aW9uLCAmc3RvcF9hY3Rpb259OwogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05TX0NPVU5UIChzaXplb2Yoc2h1dGRvd25fYWN0aW9uc19saXN0KSAvIHNpemVvZih2b2lkICopKQogCiAvKgpAQCAtMTQzNCwxMSArMTQ4MywxMSBAQAogCQkgICAgICAgc2l6ZV90IGxlbikKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBTSFVURE9XTl9BQ1RJT05TX0NPVU5UOyBpKyspIHsKIAkJaWYgKCFzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0pCiAJCQljb250aW51ZTsKLQkJaWYgKHN0cm5jbXAoYnVmLCBzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0tPm5hbWUsCi0JCQkgICAgc3RybGVuKHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXS0+bmFtZSkpID09IDApIHsKKwkJaWYgKHN5c2ZzX3N0cmVxKGJ1Ziwgc2h1dGRvd25fYWN0aW9uc19saXN0W2ldLT5uYW1lKSkgewogCQkJdHJpZ2dlci0+YWN0aW9uID0gc2h1dGRvd25fYWN0aW9uc19saXN0W2ldOwogCQkJcmV0dXJuIGxlbjsKIAkJfQpAQCAtMTY3Miw3ICsxNzIxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvbl9wYW5pY19uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IG9uX3BhbmljX25vdGlmeSwKLQkucHJpb3JpdHkgPSAwLAorCS5wcmlvcml0eSA9IElOVF9NSU4sCiB9OwogCiB2b2lkIF9faW5pdCBzZXR1cF9pcGwodm9pZCkKQEAgLTE2OTYsNyArMTc0NSw2IEBACiAJCQlzaXplb2YoaXBsX2luZm8uZGF0YS5uc3MubmFtZSkpOwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX1VOS05PV046Ci0JZGVmYXVsdDoKIAkJLyogV2UgaGF2ZSBubyBpbmZvIHRvIGNvcHkgKi8KIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNTliNGU3OS4uZWVkNGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC0zMTAsMTUgKzMxMCwyMCBAQAogCQkJaW5mby0+cGx0X2luaXRpYWxpemVkID0gMTsKIAkJfQogCQlpZiAocl90eXBlID09IFJfMzkwX1BMVE9GRjE2IHx8Ci0JCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGMzIKLQkJICAgIHx8IHJfdHlwZSA9PSBSXzM5MF9QTFRPRkY2NAotCQkJKQorCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjMyIHx8CisJCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGNjQpCiAJCQl2YWwgPSBtZS0+YXJjaC5wbHRfb2Zmc2V0IC0gbWUtPmFyY2guZ290X29mZnNldCArCiAJCQkJaW5mby0+cGx0X29mZnNldCArIHJlbGEtPnJfYWRkZW5kOwotCQllbHNlCi0JCQl2YWwgPSAgKEVsZl9BZGRyKSBtZS0+bW9kdWxlX2NvcmUgKwotCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKyBpbmZvLT5wbHRfb2Zmc2V0ICsgCi0JCQkJcmVsYS0+cl9hZGRlbmQgLSBsb2M7CisJCWVsc2UgeworCQkJaWYgKCEoKHJfdHlwZSA9PSBSXzM5MF9QTFQxNkRCTCAmJgorCQkJICAgICAgIHZhbCAtIGxvYyArIDB4ZmZmZlVMIDwgMHgxZmZmZmVVTCkgfHwKKwkJCSAgICAgIChyX3R5cGUgPT0gUl8zOTBfUExUMzJEQkwgJiYKKwkJCSAgICAgICB2YWwgLSBsb2MgKyAweGZmZmZmZmZmVUxMIDwgMHgxZmZmZmZmZmVVTEwpKSkKKwkJCQl2YWwgPSAoRWxmX0FkZHIpIG1lLT5tb2R1bGVfY29yZSArCisJCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKworCQkJCQlpbmZvLT5wbHRfb2Zmc2V0OworCQkJdmFsICs9IHJlbGEtPnJfYWRkZW5kIC0gbG9jOworCQl9CiAJCWlmIChyX3R5cGUgPT0gUl8zOTBfUExUMTZEQkwpCiAJCQkqKHVuc2lnbmVkIHNob3J0ICopIGxvYyA9IHZhbCA+PiAxOwogCQllbHNlIGlmIChyX3R5cGUgPT0gUl8zOTBfUExUT0ZGMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKcmVuYW1lIHRvIGFyY2gvczM5MC9rZXJuZWwvbm1pLmMKaW5kZXggOTJiMDQxNy4uNGJmZGM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwpAQCAtMSwxMzcgKzEsMjMgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKLSAqICAgUy8zOTAgbWFjaGluZSBjaGVjayBoYW5kbGVyCisgKiAgIE1hY2hpbmUgY2hlY2sgaGFuZGxlcgogICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA4Ci0gKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIChhZGx1bmdAZGUuaWJtLmNvbSkKLSAqCQkgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQotICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+CisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyA8YWRsdW5nQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+LAorICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxhc20vZXRyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vY2lvLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9ldHIuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+Ci0jaW5jbHVkZSAiczM5MG1hY2guaCIKLQotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbV9zZW07Ci0KLXN0YXRpYyBOT1JFVF9UWVBFIHZvaWQKLXMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNtcF9zZW5kX3N0b3AoKTsKLSNlbmRpZgotCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZm9yKDs7KTsKLX0KLQotc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOwotCi0vKioKLSAqIHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKiBAaGFuZGxlcjogaGFuZGxlciB0byBiZSByZWdpc3RlcmVkCi0gKgotICogUmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotaW50IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKQotewotCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFjbXB4Y2hnKCZjcndfaGFuZGxlcnNbcnNjXSwgTlVMTCwgaGFuZGxlcikpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUJVU1k7Ci19Ci0KLS8qKgotICogczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKCkgLSB1bnJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKi8KLXZvaWQgczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MpCi17Ci0JaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQotCQlyZXR1cm47Ci0JeGNoZygmY3J3X2hhbmRsZXJzW3JzY10sIE5VTEwpOwotCXN5bmNocm9uaXplX3NjaGVkKCk7Ci19Ci0KLS8qCi0gKiBSZXRyaWV2ZSBDUldzIGFuZCBjYWxsIGZ1bmN0aW9uIHRvIGhhbmRsZSBldmVudC4KLSAqLwotc3RhdGljIGludCBzMzkwX2NvbGxlY3RfY3J3X2luZm8odm9pZCAqcGFyYW0pCi17Ci0Jc3RydWN0IGNydyBjcndbMl07Ci0JaW50IGNjb2RlOwotCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKLQl1bnNpZ25lZCBpbnQgY2hhaW47Ci0JaW50IGlnbm9yZTsKLQotCXNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopcGFyYW07Ci1yZXBlYXQ6Ci0JaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci0JY2hhaW4gPSAwOwotCXdoaWxlICgxKSB7Ci0JCWlmICh1bmxpa2VseShjaGFpbiA+IDEpKSB7Ci0JCQlzdHJ1Y3QgY3J3IHRtcF9jcnc7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvZGUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlICIKLQkJCSAgICAgICAidGhhbiB0d28gY2hhaW5lZCBjcndzOyBwbGVhc2UgcmVwb3J0IHRvICIKLQkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKLQkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgotCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHRtcF9jcncuc2xjdCwgdG1wX2Nydy5vZmx3LAotCQkJICAgICAgIHRtcF9jcncuY2huLCB0bXBfY3J3LnJzYywgdG1wX2Nydy5hbmMsCi0JCQkgICAgICAgdG1wX2Nydy5lcmMsIHRtcF9jcncucnNpZCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBUaGlzIHdhcyBjcncgbnVtYmVyICV4IGluIHRoZSAiCi0JCQkgICAgICAgImNoYWluXG4iLCBfX2Z1bmNfXywgY2hhaW4pOwotCQkJaWYgKGNjb2RlICE9IDApCi0JCQkJYnJlYWs7Ci0JCQljaGFpbiA9IHRtcF9jcncuY2huID8gY2hhaW4gKyAxIDogMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOwotCQlpZiAoY2NvZGUgIT0gMCkKLQkJCWJyZWFrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCi0JCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkgICAgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAotCQkgICAgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKLQkJICAgICAgIGNyd1tjaGFpbl0ucnNpZCk7Ci0JCS8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCi0JCWlmIChjcndbY2hhaW5dLm9mbHcpIHsKLQkJCWludCBpOwotCi0JCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBOUl9SU0NTOyBpKyspIHsKLQkJCQlpZiAoY3J3X2hhbmRsZXJzW2ldKQotCQkJCQljcndfaGFuZGxlcnNbaV0oTlVMTCwgTlVMTCwgMSk7Ci0JCQl9Ci0JCQljaGFpbiA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKLQkJCWNoYWluKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3X2hhbmRsZXJzW2Nyd1tjaGFpbl0ucnNjXSkKLQkJCWNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY10oJmNyd1swXSwKLQkJCQkJCSAgICAgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwKLQkJCQkJCSAgICAgMCk7Ci0JCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KLQkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7Ci0JfQotCWdvdG8gcmVwZWF0OwotCXJldHVybiAwOwotfQorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKIHN0cnVjdCBtY2NrX3N0cnVjdCB7CiAJaW50IGtpbGxfdGFzazsKQEAgLTE0MiwxMiArMjgsMTggQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2NrX3N0cnVjdCwgY3B1X21jY2spOwogCitzdGF0aWMgTk9SRVRfVFlQRSB2b2lkIHMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCit7CisJc21wX3NlbmRfc3RvcCgpOworCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJd2hpbGUgKDEpOworfQorCiAvKgogICogTWFpbiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgZnVuY3Rpb24uIFdpbGwgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkCiAgKiBvciBkaXNhYmxlZCBhbmQgbWFjaGluZSBjaGVja3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAqLwotdm9pZAotczM5MF9oYW5kbGVfbWNjayh2b2lkKQordm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWNja19zdHJ1Y3QgbWNjazsKQEAgLTE2NiwyOSArNTgsMjQgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAobWNjay5jaGFubmVsX3JlcG9ydCkKLQkJdXAoJm1fc2VtKTsKLQotI2lmZGVmIENPTkZJR19NQUNIQ0hLX1dBUk5JTkcKLS8qCi0gKiBUaGUgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KLSAqIChhY3R1YWxseSB0aWxsIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQgb2ZmLCBvciB1bnRpbCB0aGUgcHJvYmxlbSBpcyBnb25lKQotICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBwcmV2ZW50IGNvbnRpbnVvdXNseQotICogYmVpbmcgaW50ZXJydXB0ZWQuICBPbmUgY2F2ZWF0IGlzIGhvd2V2ZXIsIHRoYXQgd2UgbXVzdCBkbyB0aGlzIHBlcgotICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCi0gKiBPbiBWTSB3ZSBvbmx5IGdldCBvbmUgaW50ZXJydXB0IHBlciB2aXJ0YWxseSBwcmVzZW50ZWQgbWFjaGluZWNoZWNrLgotICogVGhvdWdoIG9uZSBzdWZmaWNlcywgd2UgbWF5IGdldCBvbmUgaW50ZXJydXB0IHBlciAodmlydHVhbCkgcHJvY2Vzc29yLgotICovCisJCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwkvKgorCSAqIEEgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KKwkgKiAoYWN0dWFsbHkgdW50aWwgdGhlIG1hY2hpbmUgaXMgcG93ZXJlZCBvZmYsIG9yIHRoZSBwcm9ibGVtIGlzIGdvbmUpCisJICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBhdm9pZCBjb250aW51b3VzbHkKKwkgKiBiZWluZyBpbnRlcnJ1cHRlZC4gIE9uZSBjYXZlYXQgaXMgaG93ZXZlciwgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgcGVyCisJICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCisJICogT24gVk0gd2Ugb25seSBnZXQgb25lIGludGVycnVwdCBwZXIgdmlydGFsbHkgcHJlc2VudGVkIG1hY2hpbmVjaGVjay4KKwkgKiBUaG91Z2ggb25lIHN1ZmZpY2VzLCB3ZSBtYXkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyICh2aXJ0dWFsKSBjcHUuCisJICovCiAJaWYgKG1jY2sud2FybmluZykgewkvKiBXQVJOSU5HIHBlbmRpbmcgPyAqLwogCQlzdGF0aWMgaW50IG1jaGNoa193bmdfcG9zdGVkID0gMDsKLQkJLyoKLQkJICogVXNlIHNpbmdsZSBtYWNoaW5lIGNsZWFyLCBhcyB3ZSBjYW5ub3QgaGFuZGxlIHNtcCByaWdodCBub3cKLQkJICovCisKKwkJLyogVXNlIHNpbmdsZSBjcHUgY2xlYXIsIGFzIHdlIGNhbm5vdCBoYW5kbGUgc21wIGhlcmUuICovCiAJCV9fY3RsX2NsZWFyX2JpdCgxNCwgMjQpOwkvKiBEaXNhYmxlIFdBUk5JTkcgTUNIICovCiAJCWlmICh4Y2hnKCZtY2hjaGtfd25nX3Bvc3RlZCwgMSkgPT0gMCkKIAkJCWtpbGxfY2FkX3BpZChTSUdQV1IsIDEpOwogCX0KLSNlbmRpZgotCiAJaWYgKG1jY2sua2lsbF90YXNrKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIm1jY2s6IFRlcm1pbmF0aW5nIHRhc2sgYmVjYXVzZSBvZiBtYWNoaW5lICIKQEAgLTIwNCw4ICs5MSw3IEBACiAgKiByZXR1cm5zIDAgaWYgYWxsIHJlZ2lzdGVycyBjb3VsZCBiZSB2YWxpZGF0ZWQKICAqIHJldHVybnMgMSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludAotczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCitzdGF0aWMgaW50IG5vdHJhY2UgczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCiB7CiAJaW50IGtpbGxfdGFzazsKIAl1NjQgdG1wY2xvY2s7CkBAIC0yMTQsMjIgKzEwMCwyMSBAQAogCiAJa2lsbF90YXNrID0gMDsKIAl6ZXJvID0gMDsKLQkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmdyKQorCisJaWYgKCFtY2ktPmdyKSB7CiAJCS8qCiAJCSAqIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgY291bGRuJ3QgYmUgcmVzdG9yZWQgYW5kIGhhdmUKIAkJICogdW5rbm93biBjb250ZW50cy4gUHJvY2VzcyBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgogCQkgKi8KIAkJa2lsbF90YXNrID0gMTsKLQotCS8qIFJldmFsaWRhdGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmZwKQorCX0KKwlpZiAoIW1jaS0+ZnApIHsKIAkJLyoKIAkJICogRmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGNhbid0IGJlIHJlc3RvcmVkIGFuZAogCQkgKiB0aGVyZWZvcmUgdGhlIHByb2Nlc3MgbmVlZHMgdG8gYmUgdGVybWluYXRlZC4KIAkJICovCiAJCWtpbGxfdGFzayA9IDE7Ci0KKwl9CiAjaWZuZGVmIENPTkZJR182NEJJVAogCWFzbSB2b2xhdGlsZSgKIAkJIglsZAkwLDAoJTApXG4iCkBAIC0yNDUsOSArMTMwLDggQEAKIAkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gJlMzOTBfbG93Y29yZS5mcHRfY3JlZ19zYXZlX2FyZWE7CiAjZWxzZQogCQlmcHRfc2F2ZV9hcmVhID0gKHZvaWQgKikgUzM5MF9sb3djb3JlLmV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwotCQlmcHRfY3JlZ19zYXZlX2FyZWEgPSBmcHRfc2F2ZV9hcmVhKzEyODsKKwkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gZnB0X3NhdmVfYXJlYSArIDEyODsKICNlbmRpZgotCQkvKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyICovCiAJCWlmICghbWNpLT5mYykgewogCQkJLyoKIAkJCSAqIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIgY2FuJ3QgYmUgcmVzdG9yZWQuCkBAIC0yNzgsMjYgKzE2MiwyNSBAQAogCQkJIglsZAkxNSwxMjAoJTApXG4iCiAJCQk6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7CiAJfQotCiAJLyogUmV2YWxpZGF0ZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJYXNtIHZvbGF0aWxlKAogCQkiCWxhbQkwLDE1LDAoJTApIgogCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOwotCWlmICghbWNpLT5hcikKKwlpZiAoIW1jaS0+YXIpIHsKIAkJLyoKIAkJICogQWNjZXNzIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCiAJCSAqIFRlcm1pbmF0aW5nIHRhc2suCiAJCSAqLwogCQlraWxsX3Rhc2sgPSAxOwotCisJfQogCS8qIFJldmFsaWRhdGUgY29udHJvbCByZWdpc3RlcnMgKi8KLQlpZiAoIW1jaS0+Y3IpCisJaWYgKCFtY2ktPmNyKSB7CiAJCS8qCiAJCSAqIENvbnRyb2wgcmVnaXN0ZXJzIGhhdmUgdW5rbm93biBjb250ZW50cy4KIAkJICogQ2FuJ3QgcmVjb3ZlciBhbmQgdGhlcmVmb3JlIHN0b3BwaW5nIG1hY2hpbmUuCiAJCSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoImludmFsaWQgY29udHJvbCByZWdpc3RlcnMuIik7Ci0JZWxzZQorCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHXzY0QklUCiAJCWFzbSB2b2xhdGlsZSgKIAkJCSIJbGN0bGcJMCwxNSwwKCUwKSIKQEAgLTMwNywxMiArMTkwLDExIEBACiAJCQkiCWxjdGwJMCwxNSwwKCUwKSIKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7CiAjZW5kaWYKLQorCX0KIAkvKgogCSAqIFdlIGRvbid0IGV2ZW4gdHJ5IHRvIHJldmFsaWRhdGUgdGhlIFRPRCByZWdpc3Rlciwgc2luY2Ugd2Ugc2ltcGx5CiAJICogY2FuJ3Qgd3JpdGUgc29tZXRoaW5nIHNlbnNpYmxlIGludG8gdGhhdCByZWdpc3Rlci4KIAkgKi8KLQogI2lmZGVmIENPTkZJR182NEJJVAogCS8qCiAJICogU2VlIGlmIHdlIGNhbiByZXZhbGlkYXRlIHRoZSBUT0QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHdpdGggaXRzCkBAIC0zMzAsNyArMjEyLDYgQEAKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUudG9kX3Byb2dyZWdfc2F2ZV9hcmVhKQogCQkJOiAiMCIsICJjYyIpOwogI2VuZGlmCi0KIAkvKiBSZXZhbGlkYXRlIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KIAlhc20gdm9sYXRpbGUoCiAJCSIJc3RjawkwKCUxKVxuIgpAQCAtMzU0LDMyICsyMzUsMzUgQEAKICNkZWZpbmUgTUFYX0lQRF9DT1VOVAkyOQogI2RlZmluZSBNQVhfSVBEX1RJTUUJKDUgKiA2MCAqIFVTRUNfUEVSX1NFQykgLyogNSBtaW51dGVzICovCiAKKyNkZWZpbmUgRURfU1RQX0lTTEFORAk2CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgaXNsYW5kIGNoZWNrICovCisjZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCisjZGVmaW5lIEVEX0VUUl9TWU5DCTEyCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3luYyBjaGVjayAqLworI2RlZmluZSBFRF9FVFJfU1dJVENICTEzCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3dpdGNoIHRvIGxvY2FsICovCisKIC8qCiAgKiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuCiAgKi8KLXZvaWQKLXMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgbm90cmFjZSBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RhdGljIGludCBpcGRfY291bnQ7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhpcGRfbG9jayk7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X2lwZDsKLQlzdGF0aWMgaW50IGlwZF9jb3VudDsKKwlzdHJ1Y3QgbWNja19zdHJ1Y3QgKm1jY2s7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAlzdHJ1Y3QgbWNpICptY2k7Ci0Jc3RydWN0IG1jY2tfc3RydWN0ICptY2NrOwogCWludCB1bW9kZTsKIAogCWxvY2tkZXBfb2ZmKCk7Ci0KIAlzMzkwX2lkbGVfY2hlY2soKTsKIAogCW1jaSA9IChzdHJ1Y3QgbWNpICopICZTMzkwX2xvd2NvcmUubWNja19pbnRlcnJ1cHRpb25fY29kZTsKIAltY2NrID0gJl9fZ2V0X2NwdV92YXIoY3B1X21jY2spOwogCXVtb2RlID0gdXNlcl9tb2RlKHJlZ3MpOwogCi0JaWYgKG1jaS0+c2QpCisJaWYgKG1jaS0+c2QpIHsKIAkJLyogU3lzdGVtIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3lzdGVtIGRhbWFnZSBtYWNoaW5lIGNoZWNrLiIpOwotCisJfQogCWlmIChtY2ktPnBkKSB7CiAJCWlmIChtY2ktPmIpIHsKIAkJCS8qIFByb2Nlc3NpbmcgYmFja3VwIC0+IHZlcmlmeSBpZiB3ZSBjYW4gc3Vydml2ZSB0aGlzICovCkBAIC00MDksMjQgKzI5MywxNyBAQAogCQkJICogTnVsbGlmeWluZyBleGlnZW50IGNvbmRpdGlvbiwgdGhlcmVmb3JlIHdlIG1pZ2h0CiAJCQkgKiByZXRyeSB0aGlzIGluc3RydWN0aW9uLgogCQkJICovCi0KIAkJCXNwaW5fbG9jaygmaXBkX2xvY2spOwotCiAJCQl0bXAgPSBnZXRfY2xvY2soKTsKLQogCQkJaWYgKCgodG1wIC0gbGFzdF9pcGQpID4+IDEyKSA8IE1BWF9JUERfVElNRSkKIAkJCQlpcGRfY291bnQrKzsKIAkJCWVsc2UKIAkJCQlpcGRfY291bnQgPSAxOwotCiAJCQlsYXN0X2lwZCA9IHRtcDsKLQogCQkJaWYgKGlwZF9jb3VudCA9PSBNQVhfSVBEX0NPVU5UKQogCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidG9vIG1hbnkgaXBkIHJldHJpZXMuIik7Ci0KIAkJCXNwaW5fdW5sb2NrKCZpcGRfbG9jayk7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBQcm9jZXNzaW5nIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIGluc3RydWN0aW9uIHByb2Nlc3NpbmcgIgogCQkJCQkgICAiZGFtYWdlIG1hY2hpbmUgY2hlY2suIik7CkBAIC00NDEsMjAgKzMxOCwxOCBAQAogCQkJbWNjay0+a2lsbF90YXNrID0gMTsKIAkJCW1jY2stPm1jY2tfY29kZSA9ICoodW5zaWduZWQgbG9uZyBsb25nICopIG1jaTsKIAkJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKLQkJfQotCQllbHNlCisJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogQ291bGRuJ3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXIgY29udGVudHMgd2hpbGUgaW4KIAkJCSAqIGtlcm5lbCBtb2RlIC0+IHN0b3BwaW5nIG1hY2hpbmUuCiAJCQkgKi8KIAkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidW5hYmxlIHRvIHJldmFsaWRhdGUgcmVnaXN0ZXJzLiIpOworCQl9CiAJfQotCiAJaWYgKG1jaS0+Y2QpIHsKIAkJLyogVGltaW5nIGZhY2lsaXR5IGRhbWFnZSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoIlRPRCBjbG9jayBkYW1hZ2VkIik7CiAJfQotCiAJaWYgKG1jaS0+ZWQgJiYgbWNpLT5lYykgewogCQkvKiBFeHRlcm5hbCBkYW1hZ2UgKi8KIAkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9FVFJfU1lOQykpCkBAIC00NjYsMjggKzM0MSwyMyBAQAogCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX1NUUF9JU0xBTkQpKQogCQkJc3RwX2lzbGFuZF9jaGVjaygpOwogCX0KLQogCWlmIChtY2ktPnNlKQogCQkvKiBTdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5rZSkKIAkJLyogU3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgKi8KIAkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGtleS1lcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5kcyAmJiBtY2ktPmZhKQogCQkvKiBTdG9yYWdlIGRlZ3JhZGF0aW9uICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBkZWdyYWRhdGlvbiBtYWNoaW5lICIKIAkJCQkgICAiY2hlY2suIik7Ci0KIAlpZiAobWNpLT5jcCkgewogCQkvKiBDaGFubmVsIHJlcG9ydCB3b3JkIHBlbmRpbmcgKi8KIAkJbWNjay0+Y2hhbm5lbF9yZXBvcnQgPSAxOwogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CiAJfQotCiAJaWYgKG1jaS0+dykgewogCQkvKiBXYXJuaW5nIHBlbmRpbmcgKi8KIAkJbWNjay0+d2FybmluZyA9IDE7CkBAIC00OTYsNDMgKzM2NiwxMSBAQAogCWxvY2tkZXBfb24oKTsKIH0KIAotLyoKLSAqIHMzOTBfaW5pdF9tYWNoaW5lX2NoZWNrCi0gKgotICogaW5pdGlhbGl6ZSBtYWNoaW5lIGNoZWNrIGhhbmRsaW5nCi0gKi8KLXN0YXRpYyBpbnQKLW1hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbWFjaGluZV9jaGVja19pbml0KHZvaWQpCiB7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJm1fc2VtKTsKIAljdGxfc2V0X2JpdCgxNCwgMjUpOwkvKiBlbmFibGUgZXh0ZXJuYWwgZGFtYWdlIE1DSCAqLwotCWN0bF9zZXRfYml0KDE0LCAyNyk7ICAgIC8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCi0jaWZkZWYgQ09ORklHX01BQ0hDSEtfV0FSTklORworCWN0bF9zZXRfYml0KDE0LCAyNyk7CS8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCiAJY3RsX3NldF9iaXQoMTQsIDI0KTsJLyogZW5hYmxlIHdhcm5pbmcgTUNIICovCi0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIG1hY2hpbmUgY2hlY2sgaGFuZGxlciByZWFsbHkgZWFybHkgdG8gYmUgYWJsZSB0bwotICogY2F0Y2ggYWxsIG1hY2hpbmUgY2hlY2tzIHRoYXQgaGFwcGVuIGR1cmluZyBib290Ci0gKi8KIGFyY2hfaW5pdGNhbGwobWFjaGluZV9jaGVja19pbml0KTsKLQotLyoKLSAqIE1hY2hpbmUgY2hlY2tzIGZvciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gbXVzdCBiZSBlbmFibGVkCi0gKiBhZnRlciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQKLSAqLwotc3RhdGljIGludCBfX2luaXQKLW1hY2hpbmVfY2hlY2tfY3J3X2luaXQgKHZvaWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCi0JdGFzayA9IGt0aHJlYWRfcnVuKHMzOTBfY29sbGVjdF9jcndfaW5mbywgJm1fc2VtLCAia21jaGVjayIpOwotCWlmIChJU19FUlIodGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHRhc2spOwotCWN0bF9zZXRfYml0KDE0LCAyOCk7CS8qIGVuYWJsZSBjaGFubmVsIHJlcG9ydCBNQ0ggKi8KLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsIChtYWNoaW5lX2NoZWNrX2Nyd19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWNkMzhhOS4uYjQ4ZTk2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsMTggKzEsMTAgQEAKIC8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuCiAgKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAotICoKLSAqICBEZXJpdmVkIGZyb20gImFyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIgotICogICAgQ29weXJpZ2h0IChDKSAxOTk1LCBMaW51cyBUb3J2YWxkcwotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDA5CisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIEhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KQEAgLTQ3LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBhc20gKCJyZXRfZnJvbV9mb3JrIik7CkBAIC03Niw3ICs2OSw2IEBACiAJcmV0dXJuIHNmLT5ncHJzWzhdOwogfQogCi1leHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwogLyoKICAqIFRoZSBpZGxlIGxvb3Agb24gYSBTMzkwLi4uCiAgKi8KQEAgLTE0OSw2ICsxNDEsNyBAQAogCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwKIAkJICAgICAgIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KK0VYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKIC8qCiAgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgpAQCAtMTY4LDM0ICsxNjEsMzUgQEAKIH0KIAogaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAotCXVuc2lnbmVkIGxvbmcgdW51c2VkLAotICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCisJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAorCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotICAgICAgICBzdHJ1Y3QgZmFrZV9mcmFtZQotICAgICAgICAgIHsKLQkgICAgc3RydWN0IHN0YWNrX2ZyYW1lIHNmOwotICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOwotICAgICAgICAgIH0gKmZyYW1lOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJc3RydWN0IGZha2VfZnJhbWUKKwl7CisJCXN0cnVjdCBzdGFja19mcmFtZSBzZjsKKwkJc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOworCX0gKmZyYW1lOwogCi0gICAgICAgIGZyYW1lID0gY29udGFpbmVyX29mKHRhc2tfcHRfcmVncyhwKSwgc3RydWN0IGZha2VfZnJhbWUsIGNoaWxkcmVncyk7Ci0gICAgICAgIHAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJZnJhbWUgPSBjb250YWluZXJfb2YodGFza19wdF9yZWdzKHApLCBzdHJ1Y3QgZmFrZV9mcmFtZSwgY2hpbGRyZWdzKTsKKwlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwogCS8qIFN0b3JlIGFjY2VzcyByZWdpc3RlcnMgdG8ga2VybmVsIHN0YWNrIG9mIG5ldyBwcm9jZXNzLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzID0gKnJlZ3M7CisJZnJhbWUtPmNoaWxkcmVncyA9ICpyZWdzOwogCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1syXSA9IDA7CS8qIGNoaWxkIHJldHVybnMgMCBvbiBmb3JrLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMTVdID0gbmV3X3N0YWNrcDsKLSAgICAgICAgZnJhbWUtPnNmLmJhY2tfY2hhaW4gPSAwOworCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1sxNV0gPSBuZXdfc3RhY2twOworCWZyYW1lLT5zZi5iYWNrX2NoYWluID0gMDsKIAotICAgICAgICAvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KLSAgICAgICAgZnJhbWUtPnNmLmdwcnNbOF0gPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKKwkvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KKwlmcmFtZS0+c2YuZ3Byc1s4XSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0gICAgICAgIC8qIGZha2UgcmV0dXJuIHN0YWNrIGZvciByZXN1bWUoKSwgZG9uJ3QgZ28gYmFjayB0byBzY2hlZHVsZSAqLwotICAgICAgICBmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKKwkvKiBmYWtlIHJldHVybiBzdGFjayBmb3IgcmVzdW1lKCksIGRvbid0IGdvIGJhY2sgdG8gc2NoZWR1bGUgKi8KKwlmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAogCS8qIFNhdmUgYWNjZXNzIHJlZ2lzdGVycyB0byBuZXcgdGhyZWFkIHN0cnVjdHVyZS4gKi8KIAlzYXZlX2FjY2Vzc19yZWdzKCZwLT50aHJlYWQuYWNyc1swXSk7CiAKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGNoaWxkLgogCSAqLwpAQCAtMjIwLDEwICsyMTQsMTMgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAkvKiBzdGFydCBuZXcgcHJvY2VzcyB3aXRoIGFyNCBwb2ludGluZyB0byB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlICovCiAJcC0+dGhyZWFkLm1tX3NlZ21lbnQgPSBnZXRfZnMoKTsKLSAgICAgICAgLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KLSAgICAgICAgbWVtc2V0KCZwLT50aHJlYWQucGVyX2luZm8sMCxzaXplb2YocC0+dGhyZWFkLnBlcl9pbmZvKSk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisJLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KKwltZW1zZXQoJnAtPnRocmVhZC5wZXJfaW5mbywgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfaW5mbykpOworCS8qIEluaXRpYWxpemUgcGVyIHRocmVhZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXIgdmFsdWVzICovCisJdGkgPSB0YXNrX3RocmVhZF9pbmZvKHApOworCXRpLT51c2VyX3RpbWVyID0gMDsKKwl0aS0+c3lzdGVtX3RpbWVyID0gMDsKKwlyZXR1cm4gMDsKIH0KIAogU1lTQ0FMTF9ERUZJTkUwKGZvcmspCkBAIC0zMTEsNyArMzA4LDcgQEAKIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGR1bXAuCiAJICovCkBAIC0zMjIsNiArMzE5LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC0zNDYsNCArMzQ0LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgyYzE4NzIuLjgwMmM4YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMTgsMTAgKzE4LDExIEBACiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KIAotdm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbykKK3ZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHZvaWQpCiB7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0YXJ0ZWQsIGFkZHJlc3MgJWQsIGlkZW50aWZpY2F0aW9uICUwNlhcbiIsCi0JCWNwdWluZm8tPmNwdV9uciwgY3B1aW5mby0+Y3B1X2FkZHIsIGNwdWluZm8tPmNwdV9pZC5pZGVudCk7CisJCVMzOTBfbG93Y29yZS5jcHVfbnIsIFMzOTBfbG93Y29yZS5jcHVfYWRkciwKKwkJUzM5MF9sb3djb3JlLmNwdV9pZC5pZGVudCk7CiB9CiAKIC8qCkBAIC0zMCw0OCArMzEsNDYgQEAKIAogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbOF0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IgorCQkiZWRhdCIsICJldGYzZWgiCiAJfTsKLSAgICAgICBzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKLSAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgX2xvd2NvcmUgKmxjOworCXVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKKwlpbnQgaTsKIAotICAgICAgIHMzOTBfYWRqdXN0X2ppZmZpZXMoKTsKLSAgICAgICBwcmVlbXB0X2Rpc2FibGUoKTsKLSAgICAgICBpZiAoIW4pIHsKLQkgICAgICAgc2VxX3ByaW50ZihtLCAidmVuZG9yX2lkICAgICAgIDogSUJNL1MzOTBcbiIKLQkJCSAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCi0JCQkgICJib2dvbWlwcyBwZXIgY3B1OiAlbHUuJTAybHVcbiIsCi0JCQkgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCi0JCQkgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOwotCSAgICAgICBzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7Ci0JICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCSAgICAgICBpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKLQkJCSAgICAgICBzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwotCSAgICAgICBzZXFfcHV0cyhtLCAiXG4iKTsKLSAgICAgICB9CisJczM5MF9hZGp1c3RfamlmZmllcygpOworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICghbikgeworCQlzZXFfcHJpbnRmKG0sICJ2ZW5kb3JfaWQgICAgICAgOiBJQk0vUzM5MFxuIgorCQkJICAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCisJCQkgICAiYm9nb21pcHMgcGVyIGNwdTogJWx1LiUwMmx1XG4iLAorCQkJICAgbnVtX29ubGluZV9jcHVzKCksIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkJCSAgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOworCQlzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKKwkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOworCQlzZXFfcHV0cyhtLCAiXG4iKTsKKwl9CiAKLSAgICAgICBpZiAoY3B1X29ubGluZShuKSkgeworCWlmIChjcHVfb25saW5lKG4pKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCSAgICAgICBpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IG4pCi0JCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKLQkgICAgICAgZWxzZQotCQkgICAgICAgY3B1aW5mbyA9ICZsb3djb3JlX3B0cltuXS0+Y3B1X2RhdGE7CisJCWxjID0gKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBuKSA/CisJCQkmUzM5MF9sb3djb3JlIDogbG93Y29yZV9wdHJbbl07CiAjZWxzZQotCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKKwkJbGMgPSAmUzM5MF9sb3djb3JlOwogI2VuZGlmCi0JICAgICAgIHNlcV9wcmludGYobSwgInByb2Nlc3NvciAlbGk6ICIKLQkJCSAgInZlcnNpb24gPSAlMDJYLCAgIgotCQkJICAiaWRlbnRpZmljYXRpb24gPSAlMDZYLCAgIgotCQkJICAibWFjaGluZSA9ICUwNFhcbiIsCi0JCQkgIG4sIGNwdWluZm8tPmNwdV9pZC52ZXJzaW9uLAotCQkJICBjcHVpbmZvLT5jcHVfaWQuaWRlbnQsCi0JCQkgIGNwdWluZm8tPmNwdV9pZC5tYWNoaW5lKTsKLSAgICAgICB9Ci0gICAgICAgcHJlZW1wdF9lbmFibGUoKTsKLSAgICAgICByZXR1cm4gMDsKKwkJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yICVsaTogIgorCQkJICAgInZlcnNpb24gPSAlMDJYLCAgIgorCQkJICAgImlkZW50aWZpY2F0aW9uID0gJTA2WCwgICIKKwkJCSAgICJtYWNoaW5lID0gJTA0WFxuIiwKKwkJCSAgIG4sIGxjLT5jcHVfaWQudmVyc2lvbiwKKwkJCSAgIGxjLT5jcHVfaWQuaWRlbnQsCisJCQkgICBsYy0+Y3B1X2lkLm1hY2hpbmUpOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwppbmRleCBjNDE5MzA0Li43NzQxNDc4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwpAQCAtMSwxMCArMSw3IEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgKEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbSkKLQkJIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycCAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KQEAgLTMwLDcgKzI3LDcgQEAKIAkJbXZjCV9fTENfUFJFRklYX1NBVkVfQVJFQS0weDEwMDAoNCwlcjEpLDAoJXIxMCkKIAkJc3RmcGMJX19MQ19GUF9DUkVHX1NBVkVfQVJFQS0weDEwMDAoJXIxKQogCQlzdGNrYwkuTGNsa2NtcC0uTHBnMCglcjEzKQotCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQS0weDEwMDAoOCwlcjEpLC5MY2xrY21wLS5McGcwKCVyMTMpCisJCW12YwlfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLTB4MTAwMCg3LCVyMSksLkxjbGtjbXAtLkxwZzAoJXIxMykKIAkJc3RwdAlfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3RnCSVyMTMsIF9fTENfUFNXX1NBVkVfQVJFQS0weDEwMDArOCglcjEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKaW5kZXggNDZiOTBjYi4uNjU2ZmNiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKQEAgLTEsNDkgKzEsNSBAQAotLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8YXNtL2NwY21kLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vZnRyYWNlLmg+Ci0jaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAotI2luY2x1ZGUgPG5ldC9hcnAuaD4KLSNlbmRpZgotCi0vKgotICogbWVtb3J5IG1hbmFnZW1lbnQKLSAqLwotRVhQT1JUX1NZTUJPTChfb2lfYml0bWFwKTsKLUVYUE9SVF9TWU1CT0woX25pX2JpdG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF96Yl9maW5kbWFwKTsKLUVYUE9SVF9TWU1CT0woX3NiX2ZpbmRtYXApOwotCi0vKgotICogYmluZm10X2VsZiBsb2FkZXIgCi0gKi8KLWV4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICogcmVncywgczM5MF9mcF9yZWdzICpmcHJlZ3MpOwotRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7Ci1FWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7Ci0KLS8qCi0gKiBtaXNjLgotICovCi1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfZmxhZ3MpOwotRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwotRVhQT1JUX1NZTUJPTChjc3VtX2ZvbGQpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX21vZGUpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX2Rldm5vKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9pcnEpOwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCBjNWNmYjYxLi4wNjIwMWI5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03NCw5ICs3NCwxNyBAQAogICogTWFjaGluZSBzZXR1cC4uCiAgKi8KIHVuc2lnbmVkIGludCBjb25zb2xlX21vZGUgPSAwOworRVhQT1JUX1NZTUJPTChjb25zb2xlX21vZGUpOworCiB1bnNpZ25lZCBpbnQgY29uc29sZV9kZXZubyA9IC0xOworRVhQT1JUX1NZTUJPTChjb25zb2xlX2Rldm5vKTsKKwogdW5zaWduZWQgaW50IGNvbnNvbGVfaXJxID0gLTE7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfaXJxKTsKKwogdW5zaWduZWQgbG9uZyBtYWNoaW5lX2ZsYWdzOworRVhQT1JUX1NZTUJPTChtYWNoaW5lX2ZsYWdzKTsKKwogdW5zaWduZWQgbG9uZyBlbGZfaHdjYXAgPSAwOwogY2hhciBlbGZfcGxhdGZvcm1bRUxGX1BMQVRGT1JNX1NJWkVdOwogCkBAIC04Niw2ICs5NCwxMCBAQAogaW50IF9faW5pdGRhdGEgbWVtb3J5X2VuZF9zZXQ7CiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKIAorLyogQW4gYXJyYXkgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGxvd2NvcmUgb2YgZXZlcnkgQ1BVLiAqLworc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKK0VYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOworCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKiBmb3IgUzM5MCBuZWVkIHRvIGZpbmQgb3V0LCB3aGF0IHdlIGhhdmUgdG8gc2V0dXAKQEAgLTEwOSwxMyArMTIxLDEwIEBACiAgKi8KIHZvaWQgX19jcHVpbml0IGNwdV9pbml0KHZvaWQpCiB7Ci0gICAgICAgIGludCBhZGRyID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KICAgICAgICAgLyoKICAgICAgICAgICogU3RvcmUgcHJvY2Vzc29yIGlkIGluIGxvd2NvcmUgKHVzZWQgZS5nLiBpbiB0aW1lcl9pbnRlcnJ1cHQpCiAgICAgICAgICAqLwotCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfaWQpOwotICAgICAgICBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHIgPSBhZGRyOworCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfaWQpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZvcmNlIEZQVSBpbml0aWFsaXphdGlvbjoKQEAgLTEyNSw4ICsxMzQsNyBAQAogCiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07Ci0gICAgICAgIGlmIChjdXJyZW50LT5tbSkKLSAgICAgICAgICAgICAgICBCVUcoKTsKKwlCVUdfT04oY3VycmVudC0+bW0pOwogICAgICAgICBlbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3VycmVudCk7CiB9CiAKQEAgLTIxNyw3ICsyMjUsNyBAQAogCX0KIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19aRkNQRFVNUF9NT0RVTEUpCisjaWZkZWYgQ09ORklHX1pGQ1BEVU1QCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfemZjcGR1bXAodW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm8pCiB7CiAJc3RhdGljIGNoYXIgc3RyWzQxXTsKQEAgLTI4OSwxMSArMjk3LDcgQEAKIGVhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9wYXJzZV9tZW0pOwogCiAjaWZkZWYgQ09ORklHX1MzOTBfU1dJVENIX0FNT0RFCi0jaWZkZWYgQ09ORklHX1BHU1RFCi11bnNpZ25lZCBpbnQgc3dpdGNoX2Ftb2RlID0gMTsKLSNlbHNlCiB1bnNpZ25lZCBpbnQgc3dpdGNoX2Ftb2RlID0gMDsKLSNlbmRpZgogRVhQT1JUX1NZTUJPTF9HUEwoc3dpdGNoX2Ftb2RlKTsKIAogc3RhdGljIGludCBzZXRfYW1vZGVfYW5kX3VhY2Nlc3ModW5zaWduZWQgbG9uZyB1c2VyX2Ftb2RlLApAQCAtNDE0LDcgKzQxOCw2IEBACiAJCVBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIG1jY2tfaW50X2hhbmRsZXI7CiAJbGMtPmlvX25ld19wc3cubWFzayA9IHBzd19rZXJuZWxfYml0czsKIAlsYy0+aW9fbmV3X3Bzdy5hZGRyID0gUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgaW9faW50X2hhbmRsZXI7Ci0JbGMtPmlwbF9kZXZpY2UgPSBTMzkwX2xvd2NvcmUuaXBsX2RldmljZTsKIAlsYy0+Y2xvY2tfY29tcGFyYXRvciA9IC0xVUxMOwogCWxjLT5rZXJuZWxfc3RhY2sgPSAoKHVuc2lnbmVkIGxvbmcpICZpbml0X3RocmVhZF91bmlvbikgKyBUSFJFQURfU0laRTsKIAlsYy0+YXN5bmNfc3RhY2sgPSAodW5zaWduZWQgbG9uZykKQEAgLTQzNCw2ICs0MzcsNyBAQAogCWxjLT52ZHNvX3Blcl9jcHVfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmbGMtPnBhc3RlWzBdOwogI2VuZGlmCiAJc2V0X3ByZWZpeCgodTMyKSh1bnNpZ25lZCBsb25nKSBsYyk7CisJbG93Y29yZV9wdHJbMF0gPSBsYzsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0CkBAIC01MTAsNyArNTE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9tZW07CiAJaW50IGk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aRkNQRFVNUCkgfHwgZGVmaW5lZChDT05GSUdfWkZDUERVTVBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19aRkNQRFVNUAogCWlmIChpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUF9EVU1QKSB7CiAJCW1lbW9yeV9lbmQgPSBaRkNQRFVNUF9IU0FfU0laRTsKIAkJbWVtb3J5X2VuZF9zZXQgPSAxOwpAQCAtNjc3LDcgKzY4MSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaHdjYXBzKHZvaWQpCiB7CiAJc3RhdGljIGNvbnN0IGludCBzdGZsX2JpdHNbNl0gPSB7IDAsIDIsIDcsIDE3LCAxOSwgMjEgfTsKLQlzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZmFjaWxpdHlfbGlzdF9leHRlbmRlZDsKIAl1bnNpZ25lZCBpbnQgZmFjaWxpdHlfbGlzdDsKIAlpbnQgaTsKQEAgLTY5MywxNSArNjk2LDIyIEBACiAJICogICBCaXQgMTc6IHRoZSBtZXNzYWdlLXNlY3VyaXR5IGFzc2lzdCBpcyBpbnN0YWxsZWQKIAkgKiAgIEJpdCAxOTogdGhlIGxvbmctZGlzcGxhY2VtZW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqICAgQml0IDIxOiB0aGUgZXh0ZW5kZWQtaW1tZWRpYXRlIGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDIyOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGlzIGluc3RhbGxlZAorCSAqICAgQml0IDMwOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGVuaGFuY2VtZW50IGZhY2lsaXR5CiAJICogVGhlc2UgZ2V0IHRyYW5zbGF0ZWQgdG86CiAJICogICBIV0NBUF9TMzkwX0VTQU4zIGJpdCAwLCBIV0NBUF9TMzkwX1pBUkNIIGJpdCAxLAogCSAqICAgSFdDQVBfUzM5MF9TVEZMRSBiaXQgMiwgSFdDQVBfUzM5MF9NU0EgYml0IDMsCi0JICogICBIV0NBUF9TMzkwX0xESVNQIGJpdCA0LCBhbmQgSFdDQVBfUzM5MF9FSU1NIGJpdCA1LgorCSAqICAgSFdDQVBfUzM5MF9MRElTUCBiaXQgNCwgSFdDQVBfUzM5MF9FSU1NIGJpdCA1IGFuZAorCSAqICAgSFdDQVBfUzM5MF9FVEYzRUggYml0IDggKDIyICYmIDMwKS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlpZiAoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gc3RmbF9iaXRzW2ldKSkpCiAJCQllbGZfaHdjYXAgfD0gMVVMIDw8IGk7CiAKKwlpZiAoKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDIyKSkpCisJICAgICYmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAzMCkpKSkKKwkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA4OworCiAJLyoKIAkgKiBDaGVjayBmb3IgYWRkaXRpb25hbCBmYWNpbGl0aWVzIHdpdGggc3RvcmUtZmFjaWxpdHktbGlzdC1leHRlbmRlZC4KIAkgKiBzdGZsZSBzdG9yZXMgZG91Ymxld29yZHMgKDggYnl0ZSkgd2l0aCBiaXQgMVVMTDw8NjMgYXMgYml0IDAKQEAgLTcxMCwyMCArNzIwLDIyIEBACiAJICogSG93IG1hbnkgZmFjaWxpdHkgd29yZHMgYXJlIHN0b3JlZCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKIAkgKiBkb3VibGV3b3JkcyBwYXNzZWQgdG8gdGhlIGluc3RydWN0aW9uLiBUaGUgYWRkaXRpb25hbCBmYWNpbGl0ZXMKIAkgKiBhcmU6Ci0JICogICBCaXQgNDM6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDI6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDQ6IHBlcmZvcm0gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uIGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqIHRyYW5zbGF0ZWQgdG86Ci0JICogICBIV0NBUF9TMzkwX0RGUCBiaXQgNi4KKwkgKiAgIEhXQ0FQX1MzOTBfREZQIGJpdCA2ICg0MiAmJiA0NCkuCiAJICovCiAJaWYgKChlbGZfaHdjYXAgJiAoMVVMIDw8IDIpKSAmJgogCSAgICBfX3N0ZmxlKCZmYWNpbGl0eV9saXN0X2V4dGVuZGVkLCAxKSA+IDApIHsKLQkJaWYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjQgLSA0MykpKQorCQlpZiAoKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0MikpKQorCQkgICAgJiYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0NCkpKSkKIAkJCWVsZl9od2NhcCB8PSAxVUwgPDwgNjsKIAl9CiAKIAlpZiAoTUFDSElORV9IQVNfSFBBR0UpCiAJCWVsZl9od2NhcCB8PSAxVUwgPDwgNzsKIAotCXN3aXRjaCAoY3B1aW5mby0+Y3B1X2lkLm1hY2hpbmUpIHsKKwlzd2l0Y2ggKFMzOTBfbG93Y29yZS5jcHVfaWQubWFjaGluZSkgewogCWNhc2UgMHg5NjcyOgogI2lmICFkZWZpbmVkKENPTkZJR182NEJJVCkKIAlkZWZhdWx0OgkvKiBVc2UgImc1IiBhcyBkZWZhdWx0IGZvciAzMSBiaXQga2VybmVscy4gKi8KQEAgLTgxNiw3ICs4MjgsNyBAQAogCXNldHVwX2xvd2NvcmUoKTsKIAogICAgICAgICBjcHVfaW5pdCgpOwotICAgICAgICBfX2NwdV9sb2dpY2FsX21hcFswXSA9IFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfYWRkcjsKKwlfX2NwdV9sb2dpY2FsX21hcFswXSA9IHN0YXAoKTsKIAlzMzkwX2luaXRfY3B1X3RvcG9sb2d5KCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMmQzMzdjYi4uMDA2ZWQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC01MCwxMiArNTEsNiBAQAogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKIAotLyoKLSAqIEFuIGFycmF5IHdpdGggYSBwb2ludGVyIHRoZSBsb3djb3JlIG9mIGV2ZXJ5IENQVS4KLSAqLwotc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKLUVYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOwotCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3NldFtOUl9DUFVTXTsKIAogc3RhdGljIHU4IHNtcF9jcHVfdHlwZTsKQEAgLTgxLDkgKzc2LDcgQEAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMvbWFjaGluZSBjaGVja3MgKi8KIAlfX2xvYWRfcHN3X21hc2socHN3X2tlcm5lbF9iaXRzICYgflBTV19NQVNLX01DSEVDSyk7Ci0KLQkvKiB3cml0ZSBtYWdpYyBudW1iZXIgdG8gemVybyBwYWdlIChhYnNvbHV0ZSAwKSAqLwotCWxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0tPnBhbmljX21hZ2ljID0gX19QQU5JQ19NQUdJQzsKKwl0cmFjZV9oYXJkaXJxc19vZmYoKTsKIAogCS8qIHN0b3AgYWxsIHByb2Nlc3NvcnMgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewpAQCAtMjMzLDcgKzIyNiw3IEBACiAgKi8KICNkZWZpbmUgQ1BVX0lOSVRfTk8JMQogCi0jaWYgZGVmaW5lZChDT05GSUdfWkZDUERVTVApIHx8IGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAogLyoKICAqIHpmY3BkdW1wX3ByZWZpeF9hcnJheSBob2xkcyBwcmVmaXggcmVnaXN0ZXJzIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgpAQCAtMjc0LDcgKzI2Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfZ2V0X3NhdmVfYXJlYSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcGh5X2NwdSkgeyB9CiAKLSNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgfHwgQ09ORklHX1pGQ1BEVU1QX01PRFVMRSAqLworI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwogCiBzdGF0aWMgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCiB7CkBAIC0zMDQsOCArMjk3LDggQEAKIHsKIAlpbnQgY3B1X2lkLCBsb2dpY2FsX2NwdTsKIAotCWxvZ2ljYWxfY3B1ID0gZmlyc3RfY3B1KGF2YWlsKTsKLQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfZmlyc3QoJmF2YWlsKTsKKwlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIDA7CiAJZm9yIChjcHVfaWQgPSAwOyBjcHVfaWQgPD0gNjU1MzU7IGNwdV9pZCsrKSB7CiAJCWlmIChjcHVfa25vd24oY3B1X2lkKSkKQEAgLTMxNiw4ICszMDksOCBAQAogCQkJY29udGludWU7CiAJCWNwdV9zZXQobG9naWNhbF9jcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMyOSw4ICszMjIsOCBAQAogCWludCBjcHVfaWQsIGxvZ2ljYWxfY3B1LCBjcHU7CiAJaW50IHJjOwogCi0JbG9naWNhbF9jcHUgPSBmaXJzdF9jcHUoYXZhaWwpOwotCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19maXJzdCgmYXZhaWwpOworCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQlyZXR1cm4gMDsKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCkBAIC0zNTEsOCArMzQ0LDggQEAKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX1NUQU5EQlk7CiAJCWVsc2UKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIG91dDoKQEAgLTM3OSw3ICszNzIsNyBAQAogCiAJY19jcHVzID0gMTsKIAlzX2NwdXMgPSAwOwotCWJvb3RfY3B1X2FkZHIgPSBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHI7CisJYm9vdF9jcHVfYWRkciA9IF9fY3B1X2xvZ2ljYWxfbWFwWzBdOwogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcGFuaWMoInNtcF9kZXRlY3RfY3B1cyBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKQEAgLTQ1Myw3ICs0NDYsNyBAQAogCS8qIFN3aXRjaCBvbiBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCS8qIFByaW50IGluZm8gYWJvdXQgdGhpcyBwcm9jZXNzb3IgKi8KLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCS8qIGNwdV9pZGxlIHdpbGwgY2FsbCBzY2hlZHVsZSBmb3IgdXMgKi8KIAljcHVfaWRsZSgpOwogCXJldHVybiAwOwpAQCAtNTE1LDcgKzUwOCw2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyB2b2lkIHNtcF9mcmVlX2xvd2NvcmUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmU7CkBAIC01MzQsNyArNTI2LDYgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CiAJbG93Y29yZV9wdHJbY3B1XSA9IE5VTEw7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIC8qIFVwcGluZyBhbmQgZG93bmluZyBvZiBDUFVzICovCiBpbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCkBAIC01NDMsMTYgKzUzNCwyMyBAQAogCXN0cnVjdCBfbG93Y29yZSAqY3B1X2xvd2NvcmU7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpzZjsKIAlzaWdwX2Njb2RlIGNjb2RlOworCXUzMiBsb3djb3JlOwogCiAJaWYgKHNtcF9jcHVfc3RhdGVbY3B1XSAhPSBDUFVfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHNtcF9hbGxvY19sb3djb3JlKGNwdSkpCiAJCXJldHVybiAtRU5PTUVNOworCWRvIHsKKwkJY2NvZGUgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9pbml0aWFsX2NwdV9yZXNldCk7CisJCWlmIChjY29kZSA9PSBzaWdwX2J1c3kpCisJCQl1ZGVsYXkoMTApOworCQlpZiAoY2NvZGUgPT0gc2lncF9ub3Rfb3BlcmF0aW9uYWwpCisJCQlnb3RvIGVycl9vdXQ7CisJfSB3aGlsZSAoY2NvZGUgPT0gc2lncF9idXN5KTsKIAotCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3Nvcl9wKChfX3UzMikodW5zaWduZWQgbG9uZykobG93Y29yZV9wdHJbY3B1XSksCi0JCQkJICAgY3B1LCBzaWdwX3NldF9wcmVmaXgpOwotCWlmIChjY29kZSkKLQkJcmV0dXJuIC1FSU87CisJbG93Y29yZSA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpbG93Y29yZV9wdHJbY3B1XTsKKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3Nvcl9wKGxvd2NvcmUsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCisJCXVkZWxheSgxMCk7CiAKIAlpZGxlID0gY3VycmVudF9zZXRbY3B1XTsKIAljcHVfbG93Y29yZSA9IGxvd2NvcmVfcHRyW2NwdV07CkBAIC01NzEsOSArNTY5LDggQEAKIAkJOiA6ICJhIiAoJmNwdV9sb3djb3JlLT5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpIDogIm1lbW9yeSIpOwogCWNwdV9sb3djb3JlLT5wZXJjcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwogCWNwdV9sb3djb3JlLT5jdXJyZW50X3Rhc2sgPSAodW5zaWduZWQgbG9uZykgaWRsZTsKLQljcHVfbG93Y29yZS0+Y3B1X2RhdGEuY3B1X25yID0gY3B1OworCWNwdV9sb3djb3JlLT5jcHVfbnIgPSBjcHU7CiAJY3B1X2xvd2NvcmUtPmtlcm5lbF9hc2NlID0gUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlOwotCWNwdV9sb3djb3JlLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJZWllaW8oKTsKIAogCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9yZXN0YXJ0KSA9PSBzaWdwX2J1c3kpCkBAIC01ODIsNiArNTc5LDEwIEBACiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCiAJCWNwdV9yZWxheCgpOwogCXJldHVybiAwOworCitlcnJfb3V0OgorCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcG9zc2libGVfY3B1cyhjaGFyICpzKQpAQCAtNTg5LDkgKzU5MCw4IEBACiAJaW50IHBjcHVzLCBjcHU7CiAKIAlwY3B1cyA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOwotCWNwdV9wb3NzaWJsZV9tYXAgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQlmb3IgKGNwdSA9IDE7IGNwdSA8IHBjcHVzICYmIGNwdSA8IE5SX0NQVVM7IGNwdSsrKQotCQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBwY3B1cyAmJiBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykKKwkJc2V0X2NwdV9wb3NzaWJsZShjcHUsIHRydWUpOwogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oInBvc3NpYmxlX2NwdXMiLCBzZXR1cF9wb3NzaWJsZV9jcHVzKTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCS8qIHJlcXVlc3QgdGhlIDB4MTIwMSBlbWVyZ2VuY3kgc2lnbmFsIGV4dGVybmFsIGludGVycnVwdCAqLwogCWlmIChyZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgxMjAxLCBkb19leHRfY2FsbF9pbnRlcnJ1cHQpICE9IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZXF1ZXN0IGV4dGVybmFsIGludGVycnVwdCAweDEyMDEiKTsKLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCiAJLyogUmVhbGxvY2F0ZSBjdXJyZW50IGxvd2NvcmUsIGJ1dCBrZWVwIGl0cyBjb250ZW50cy4gKi8KIAlsY19vcmRlciA9IHNpemVvZihsb25nKSA9PSA4ID8gMSA6IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc3lzaW5mby5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3N5c2luZm8uYwpyZW5hbWUgdG8gYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKaW5kZXggMGVlYTkwNy4uYjVlNzVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3N5c2luZm8uYwotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDgKLSAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIChVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tKQotICoJICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDkKKyAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIDxVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tPiwKKyAqCSAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI0LDcgKzIyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgc3RzaV8wKHZvaWQpCiB7Ci0JaW50IHJjID0gc3RzaSAoTlVMTCwgMCwgMCwgMCk7CisJaW50IHJjID0gc3RzaShOVUxMLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmMgPT0gLUVOT1NZUyA/IHJjIDogKCgodW5zaWduZWQgaW50KSByYykgPj4gMjgpOwogfQogCkBAIC03OCwyMyArNzYsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLSNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyBpbnQgc3RzaV8xXzJfMShzdHJ1Y3Qgc3lzaW5mb18xXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlpZiAoc3RzaShpbmZvLCAxLCAyLCAxKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JRUJDQVNDKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIENQVTogICAgICAgICAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8xXzJfMihzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKmV4dDsKQEAgLTE0NSwzMyArMTI2LDE1IEBACiAJaWYgKGluZm8tPnNlY29uZGFyeV9jYXBhYmlsaXR5ICE9IDApCiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZWNvbmRhcnkgQ2FwYWJpbGl0eTogJWRcbiIsCiAJCQkgICAgICAgaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkpOwotCiAJcmV0dXJuIGxlbjsKIH0KIAotI2lmIDAgLyogQ3VycmVudGx5IHVudXNlZCAqLwotc3RhdGljIGludCBzdHNpXzJfMl8xKHN0cnVjdCBzeXNpbmZvXzJfMl8xICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWlmIChzdHNpKGluZm8sIDIsIDIsIDEpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKLQlFQkNBU0MgKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MgKGluZm8tPnBsYW50LCBzaXplb2YoaW5mby0+cGxhbnQpKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VxdWVuY2UgQ29kZSBvZiBsb2dpY2FsIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIGxvZ2ljYWwgQ1BVOiAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8yXzJfMihzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlpZiAoc3RzaShpbmZvLCAyLCAyLCAyKSA9PSAtRU5PU1lTKQogCQlyZXR1cm4gbGVuOwogCi0JRUJDQVNDIChpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOworCUVCQ0FTQyhpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOwogCiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgTnVtYmVyOiAgICAgICAgICAlZFxuIiwKQEAgLTIxNCw4ICsxNzcsOCBAQAogCWlmIChzdHNpKGluZm8sIDMsIDIsIDIpID09IC1FTk9TWVMpCiAJCXJldHVybiBsZW47CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPmNvdW50OyBpKyspIHsKLQkJRUJDQVNDIChpbmZvLT52bVtpXS5uYW1lLCBzaXplb2YoaW5mby0+dm1baV0ubmFtZSkpOwotCQlFQkNBU0MgKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOworCQlFQkNBU0MoaW5mby0+dm1baV0ubmFtZSwgc2l6ZW9mKGluZm8tPnZtW2ldLm5hbWUpKTsKKwkJRUJDQVNDKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOwogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBOYW1lOiAgICAgICAgICAgICUtOC44c1xuIiwKIAkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5uYW1lKTsKQEAgLTIzNywxNCArMjAwLDEzIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotCiBzdGF0aWMgaW50IHByb2NfcmVhZF9zeXNpbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpbmZvID0gZ2V0X3plcm9lZF9wYWdlIChHRlBfS0VSTkVMKTsKKwl1bnNpZ25lZCBsb25nIGluZm8gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaW50IGxldmVsLCBsZW47Ci0JCisKIAlpZiAoIWluZm8pCiAJCXJldHVybiAwOwogCkBAIC0yNjIsOCArMjI0LDggQEAKIAlpZiAobGV2ZWwgPj0gMykKIAkJbGVuID0gc3RzaV8zXzJfMigoc3RydWN0IHN5c2luZm9fM18yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKIAotCWZyZWVfcGFnZSAoaW5mbyk7Ci0gICAgICAgIHJldHVybiBsZW47CisJZnJlZV9wYWdlKGluZm8pOworCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3N5c2luZm8odm9pZCkKQEAgLTI3Miw4ICsyMzQsNyBAQAogCQkJICAgICAgIHByb2NfcmVhZF9zeXNpbmZvLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KLQotX19pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKK2RldmljZV9pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKIAogLyoKICAqIFNlcnZpY2UgbGV2ZWxzIGludGVyZmFjZS4KQEAgLTM4NywxMyArMzQ4LDExIEBACiAJCXJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJnNlcnZpY2VfbGV2ZWxfdm0pOwogCXJldHVybiAwOwogfQotCiBzdWJzeXNfaW5pdGNhbGwoY3JlYXRlX3Byb2Nfc2VydmljZV9sZXZlbCk7CiAKIC8qCiAgKiBCb2dvbWlwcyBjYWxjdWxhdGlvbiBiYXNlZCBvbiBjcHUgY2FwYWJpbGl0eS4KICAqLwotCiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqY2FwYWJpbGl0eSkKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggZmM0NjhjYS4uZjcyZDQxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTMzMSw2ICszMzEsNyBAQAogfQogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGNsb2NrX3N5bmNfd29yZCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2NrX3N5bmNfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xvY2tfc3luY19mbGFnczsKIAogI2RlZmluZSBDTE9DS19TWU5DX0hBU19FVFIJMApAQCAtMzk0LDYgKzM5NSwyMCBAQAogCWF0b21pY19zZXRfbWFzaygweDgwMDAwMDAwLCBzd19wdHIpOwogfQogCisvKgorICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGNsb2NrIGlzIGluIHN5bmMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N5bmNfY2xvY2sodm9pZCkKK3sKKwlhdG9taWNfdCAqc3dfcHRyOworCWludCByYzsKKworCXN3X3B0ciA9ICZnZXRfY3B1X3ZhcihjbG9ja19zeW5jX3dvcmQpOworCXJjID0gKGF0b21pY19yZWFkKHN3X3B0cikgJiAweDgwMDAwMDAwVSkgIT0gMDsKKwlwdXRfY3B1X3ZhcihjbG9ja19zeW5jX3N5bmMpOworCXJldHVybiByYzsKK30KKwogLyogU2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSB1c2VkIGZvciBldHIgYW5kIHN0cCBzeW5jIGV2ZW50cyAqLwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0aW1lX3N5bmNfd3E7CiAKQEAgLTQ4NSw2ICs1MDAsOCBAQAogCWlmIChldHJfc2V0cigmZXRyX2VhY3IpID09IDApIHsKIAkJZXRyX3RvbGVjID0gZ2V0X2Nsb2NrKCk7CiAJCXNldF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfSBlbHNlIGlmIChldHJfcG9ydDBfb25saW5lIHx8IGV0cl9wb3J0MV9vbmxpbmUpIHsKIAkJcHJfd2FybmluZygiVGhlIHJlYWwgb3IgdmlydHVhbCBoYXJkd2FyZSBzeXN0ZW0gZG9lcyAiCiAJCQkgICAibm90IHByb3ZpZGUgYW4gRVRSIGludGVyZmFjZVxuIik7CkBAIC01MzMsOCArNTUwLDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLnNsKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1dJVENIX0xPQ0FMLCAmZXRyX2V2ZW50cyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiB9CkBAIC01NDksOCArNTY1LDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLmVzKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1lOQ19DSEVDSywgJmV0cl9ldmVudHMpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogfQpAQCAtOTE0LDcgKzkyOSw3IEBACiAJICogRG8gbm90IHRyeSB0byBnZXQgdGhlIGFsdGVybmF0ZSBwb3J0IGFpYiBpZiB0aGUgY2xvY2sKIAkgKiBpcyBub3QgaW4gc3luYyB5ZXQuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpICYmICFlYWNyLmVzKQorCWlmICghY2hlY2tfc3luY19jbG9jaygpKQogCQlyZXR1cm4gZWFjcjsKIAogCS8qCkBAIC05OTcsNyArMTAxMiw2IEBACiAJCW9uX2VhY2hfY3B1KGRpc2FibGVfc3luY19jbG9jaywgTlVMTCwgMSk7CiAJCWRlbF90aW1lcl9zeW5jKCZldHJfdGltZXIpOwogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC0xMDcxLDE4ICsxMDg1LDEzIEBACiAJCS8qIEJvdGggcG9ydHMgbm90IHVzYWJsZS4gKi8KIAkJZWFjci5lcyA9IGVhY3Iuc2wgPSAwOwogCQlzeW5jX3BvcnQgPSAtMTsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQllYWNyLmVzID0gMDsKLQogCS8qCiAJICogSWYgdGhlIGNsb2NrIGlzIGluIHN5bmMganVzdCB1cGRhdGUgdGhlIGVhY3IgYW5kIHJldHVybi4KIAkgKiBJZiB0aGVyZSBpcyBubyB2YWxpZCBzeW5jIHBvcnQgd2FpdCBmb3IgYSBwb3J0IHVwZGF0ZS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSB8fAotCSAgICBlYWNyLmVzIHx8IHN5bmNfcG9ydCA8IDApIHsKKwlpZiAoY2hlY2tfc3luY19jbG9jaygpIHx8IHN5bmNfcG9ydCA8IDApIHsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwogCQlldHJfc2V0X3RvbGVjX3RpbWVvdXQobm93KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTEwMywxMyArMTExMiwxMSBAQAogCSAqIGFuZCBzZXQgdXAgYSB0aW1lciB0byB0cnkgYWdhaW4gYWZ0ZXIgMC41IHNlY29uZHMKIAkgKi8KIAlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0Jc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCWlmIChub3cgPCBldHJfdG9sZWMgKyAoMTYwMDAwMCA8PCAxMikgfHwKIAkgICAgZXRyX3N5bmNfY2xvY2tfc3RvcCgmYWliLCBzeW5jX3BvcnQpICE9IDApIHsKIAkJLyogU3luYyBmYWlsZWQuIFRyeSBhZ2FpbiBpbiAxLzIgc2Vjb25kLiAqLwogCQllYWNyLmVzID0gMDsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJZXRyX3NldF9zeW5jX3RpbWVvdXQoKTsKIAl9IGVsc2UKIAkJZXRyX3NldF90b2xlY190aW1lb3V0KG5vdyk7CkBAIC0xMTkxLDE5ICsxMTk4LDMwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwltdXRleF9sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlpZiAoZGV2ID09ICZldHJfcG9ydDBfZGV2KSB7CiAJCWlmIChldHJfcG9ydDBfb25saW5lID09IHZhbHVlKQotCQkJcmV0dXJuIGNvdW50OwkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQkJZ290byBvdXQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCiAJCWV0cl9wb3J0MF9vbmxpbmUgPSB2YWx1ZTsKKwkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgJiYgZXRyX3BvcnQxX29ubGluZSkKKwkJCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCXNldF9iaXQoRVRSX0VWRU5UX1BPUlQwX0NIQU5HRSwgJmV0cl9ldmVudHMpOwogCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIAl9IGVsc2UgewogCQlpZiAoZXRyX3BvcnQxX29ubGluZSA9PSB2YWx1ZSkKLQkJCXJldHVybiBjb3VudDsJLyogTm90aGluZyB0byBkby4gKi8KKwkJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIGRvLiAqLwogCQlldHJfcG9ydDFfb25saW5lID0gdmFsdWU7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlzZXRfYml0KEVUUl9FVkVOVF9QT1JUMV9DSEFOR0UsICZldHJfZXZlbnRzKTsKIAkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNDcxLDggKzE0ODksNiBAQAogICovCiB2b2lkIHN0cF9zeW5jX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTQ4NSw4ICsxNTAxLDYgQEAKICAqLwogdm9pZCBzdHBfaXNsYW5kX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTUxMywxMCArMTUyNyw2IEBACiAKIAllbmFibGVfc3luY19jbG9jaygpOwogCi0Jc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7Ci0KIAlyYyA9IDA7CiAJaWYgKHN0cF9pbmZvLnRvZG9mZlswXSB8fCBzdHBfaW5mby50b2RvZmZbMV0gfHwKIAkgICAgc3RwX2luZm8udG9kb2ZmWzJdIHx8IHN0cF9pbmZvLnRvZG9mZlszXSB8fApAQCAtMTUzNSw5ICsxNTQ1LDYgQEAKIAlpZiAocmMpIHsKIAkJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCQlzdHBfc3luYy0+aW5fc3luYyA9IC1FQUdBSU47Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCQlpZiAoZXRyX3BvcnQwX29ubGluZSB8fCBldHJfcG9ydDFfb25saW5lKQotCQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfSBlbHNlCiAJCXN0cF9zeW5jLT5pbl9zeW5jID0gMTsKIAl4Y2hnKCZmaXJzdCwgMCk7CkBAIC0xNTY5LDYgKzE1NzYsMTAgQEAKIAlpZiAocmMgfHwgc3RwX2luZm8uYyA9PSAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwkvKiBTa2lwIHN5bmNocm9uaXphdGlvbiBpZiB0aGUgY2xvY2sgaXMgYWxyZWFkeSBpbiBzeW5jLiAqLworCWlmIChjaGVja19zeW5jX2Nsb2NrKCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCW1lbXNldCgmc3RwX3N5bmMsIDAsIHNpemVvZihzdHBfc3luYykpOwogCWdldF9vbmxpbmVfY3B1cygpOwogCWF0b21pY19zZXQoJnN0cF9zeW5jLmNwdXMsIG51bV9vbmxpbmVfY3B1cygpIC0gMSk7CkBAIC0xNjg0LDggKzE2OTUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0hBU19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCW11dGV4X2xvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCXN0cF9vbmxpbmUgPSB2YWx1ZTsKKwlpZiAoc3RwX29ubGluZSkKKwkJc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZzdHBfd29yayk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCBjYzM2MmM5Li4zYzcyYzljIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC03NCw3ICs3NCw3IEBACiAKIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjb3JlX2luZm8gKmNvcmUgPSAmY29yZV9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggNDU4NGQ4MS4uYzJlNDJjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtNjEsOSArNjEsMTEgQEAKICNkZWZpbmUgc3RhY2tfcG9pbnRlciAoeyB2b2lkICoqc3A7IGFzbSgibGEgJTAsMCgxNSkiIDogIj0mZCIgKHNwKSk7IHNwOyB9KQogCiAjaWZuZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBMT05HICIlMDhseCAiCiAjZGVmaW5lIEZPVVJMT05HICIlMDhseCAlMDhseCAlMDhseCAlMDhseFxuIgogc3RhdGljIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSAxMjsKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLworI2RlZmluZSBMT05HICIlMDE2bHggIgogI2RlZmluZSBGT1VSTE9ORyAiJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XG4iCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDIwOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwpAQCAtMTU1LDcgKzE1Nyw3IEBACiAJCQlicmVhazsKIAkJaWYgKGkgJiYgKChpICogc2l6ZW9mIChsb25nKSAlIDMyKSA9PSAwKSkKIAkJCXByaW50aygiXG4gICAgICAgIik7Ci0JCXByaW50aygiJXAgIiwgKHZvaWQgKikqc3RhY2srKyk7CisJCXByaW50ayhMT05HLCAqc3RhY2srKyk7CiAJfQogCXByaW50aygiXG4iKTsKIAlzaG93X3RyYWNlKHRhc2ssIHNwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNjkwZTE3OC4uODliMmU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIHZkc29fZnJlZV9wZXJfY3B1KGludCBjcHUsIHN0cnVjdCBfbG93Y29yZSAqbG93Y29yZSkKIHsKIAl1bnNpZ25lZCBsb25nIHNlZ21lbnRfdGFibGUsIHBhZ2VfdGFibGUsIHBhZ2VfZnJhbWU7CkBAIC0xNjMsNyArMTYyLDYgQEAKIAlmcmVlX3BhZ2UocGFnZV90YWJsZSk7CiAJZnJlZV9wYWdlcyhzZWdtZW50X3RhYmxlLCBTRUdNRU5UX09SREVSKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIHZvaWQgX192ZHNvX2luaXRfY3I1KHZvaWQgKmR1bW15KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQ3OTZkMDUuLjdhMjA2M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwOCw2ICsxMDgsOCBAQAogCQlFWElUX1RFWFQKIAl9CiAKKwkvKiBlYXJseS5jIHVzZXMgc3RzaSwgd2hpY2ggcmVxdWlyZXMgcGFnZSBhbGlnbmVkIGRhdGEuICovCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmluaXQuZGF0YSA6IHsKIAkJSU5JVF9EQVRBCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCmluZGV4IGUwNTFjYWQuLjNlMjYwYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZworKysgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKQEAgLTQsNiArNCw5IEBACiBjb25maWcgSEFWRV9LVk0KICAgICAgICBib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwppbmRleCA2MTIzNjEwLi45ZDE5ODAzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogc3RhdGljIGludGVyY2VwdF9oYW5kbGVyX3QgaW5zdHJ1Y3Rpb25faGFuZGxlcnNbMjU2XSA9IHsKIAlbMHg4M10gPSBrdm1fczM5MF9oYW5kbGVfZGlhZywKIAlbMHhhZV0gPSBrdm1fczM5MF9oYW5kbGVfc2lncCwKLQlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfcHJpdiwKKwlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfYjIsCiAJWzB4YjddID0gaGFuZGxlX2xjdGwsCiAJWzB4ZWJdID0gaGFuZGxlX2xjdGxnLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IGY0ZmUyOGEuLjAxODkzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtNTU1LDkgKzU1NSwxNCBAQAogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHByb2dyYW0gY2hlY2sgJWQgKGZyb20gdXNlcikiLAogCQkJICAgczM5MGludC0+cGFybSk7CiAJCWJyZWFrOworCWNhc2UgS1ZNX1MzOTBfU0lHUF9TRVRfUFJFRklYOgorCQlpbnRpLT5wcmVmaXguYWRkcmVzcyA9IHMzOTBpbnQtPnBhcm07CisJCWludGktPnR5cGUgPSBzMzkwaW50LT50eXBlOworCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHNldCBwcmVmaXggdG8gJXggKGZyb20gdXNlcikiLAorCQkJICAgczM5MGludC0+cGFybSk7CisJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfU0lHUF9TVE9QOgogCWNhc2UgS1ZNX1MzOTBfUkVTVEFSVDoKLQljYXNlIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWDoKIAljYXNlIEtWTV9TMzkwX0lOVF9FTUVSR0VOQ1k6CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgImluamVjdDogdHlwZSAleCIsIHMzOTBpbnQtPnR5cGUpOwogCQlpbnRpLT50eXBlID0gczM5MGludC0+dHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAwZDMzODkzLi5mNGQ1NmU5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSAia3ZtLXMzOTAuaCIKICNpbmNsdWRlICJnYWNjZXNzLmgiCiAKQEAgLTI4Niw3ICsyODYsNyBAQAogCXNldHVwX3RpbWVyKCZ2Y3B1LT5hcmNoLmNrY190aW1lciwga3ZtX3MzOTBfaWRsZV93YWtldXAsCiAJCSAodW5zaWduZWQgbG9uZykgdmNwdSk7CiAJZ2V0X2NwdV9pZCgmdmNwdS0+YXJjaC5jcHVfaWQpOwotCXZjcHUtPmFyY2guY3B1X2lkLnZlcnNpb24gPSAweGZlOworCXZjcHUtPmFyY2guY3B1X2lkLnZlcnNpb24gPSAweGZmOwogCXJldHVybiAwOwogfQogCkBAIC00MjIsOCArNDIyLDggQEAKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQpAQCAtNDQwLDggKzQ0MCw2IEBACiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KIAotZXh0ZXJuIHZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKLQogc3RhdGljIHZvaWQgX192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJbWVtY3B5KCZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2cxNCwgJnZjcHUtPmFyY2guZ3Vlc3RfZ3Byc1sxNF0sIDE2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCAzODkzY2YxLi4wMGJiZTY5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC01MCw3ICs1MCw3IEBACiBpbnQga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNvZGUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBwcml2LmMgKi8KLWludCBrdm1fczM5MF9oYW5kbGVfcHJpdihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBzaWdwLmMgKi8KIGludCBrdm1fczM5MF9oYW5kbGVfc2lncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCAzNjA1ZGY0NS4uNGI4ODgzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKQEAgLTMwNCwxMiArMzA0LDI0IEBACiAJWzB4YjFdID0gaGFuZGxlX3N0ZmwsCiB9OwogCi1pbnQga3ZtX3MzOTBfaGFuZGxlX3ByaXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoraW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaW50ZXJjZXB0X2hhbmRsZXJfdCBoYW5kbGVyOwogCisJLyoKKwkgKiBhIGxvdCBvZiBCMiBpbnN0cnVjdGlvbnMgYXJlIHByaXZpbGVkZ2VkLiBXZSBmaXJzdCBjaGVjayBmb3IKKwkgKiB0aGUgcHJpdmlsZWRnZXMgb25lcywgdGhhdCB3ZSBjYW4gaGFuZGxlIGluIHRoZSBrZXJuZWwuIElmIHRoZQorCSAqIGtlcm5lbCBjYW4gaGFuZGxlIHRoaXMgaW5zdHJ1Y3Rpb24sIHdlIGNoZWNrIGZvciB0aGUgcHJvYmxlbQorCSAqIHN0YXRlIGJpdCBhbmQgKGEpIGhhbmRsZSB0aGUgaW5zdHJ1Y3Rpb24gb3IgKGIpIHNlbmQgYSBjb2RlIDIKKwkgKiBwcm9ncmFtIGNoZWNrLgorCSAqIEFueXRoaW5nIGVsc2UgZ29lcyB0byB1c2Vyc3BhY2UuKi8KIAloYW5kbGVyID0gcHJpdl9oYW5kbGVyc1t2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBhICYgMHgwMGZmXTsKLQlpZiAoaGFuZGxlcikKLQkJcmV0dXJuIGhhbmRsZXIodmNwdSk7CisJaWYgKGhhbmRsZXIpIHsKKwkJaWYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCisJCQlyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsCisJCQkJCQkgICBQR01fUFJJVklMRUdFRF9PUEVSQVRJT04pOworCQllbHNlCisJCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKKwl9CiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vc2lncC5jIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKaW5kZXggMmEwMWI5ZS4uZjI3ZGJlZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKQEAgLTE1Myw4ICsxNTMsNiBAQAogCiAJc3dpdGNoIChwYXJhbWV0ZXIgJiAweGZmKSB7CiAJY2FzZSAwOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJrdm06IHJlcXVlc3QgdG8gc3dpdGNoIHRvIEVTQS8zOTAgbW9kZSIKLQkJCQkJCQkiIG5vdCBzdXBwb3J0ZWQiKTsKIAkJcmMgPSAzOyAvKiBub3Qgb3BlcmF0aW9uYWwgKi8KIAkJYnJlYWs7CiAJY2FzZSAxOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCmluZGV4IDZjY2I5ZmEuLjNmNWY2ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtOTIsNiArOTMsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQorRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CiAKIC8qCiAgKiBTaW1wbGUgdWRlbGF5IHZhcmlhbnQuIFRvIGJlIHVzZWQgb24gc3RhcnR1cCBhbmQgcmVib290CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3N0cmluZy5jIGIvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYwppbmRleCBhZTVjZjVkLi40MTQzYjdjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3N0cmluZy5jCisrKyBiL2FyY2gvczM5MC9saWIvc3RyaW5nLmMKQEAgLTQ0LDcgKzQ0LDExIEBACiAgKi8KIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZXR1cm4gX19zdHJlbmQocykgLSBzOworI2Vsc2UKKwlyZXR1cm4gX19idWlsdGluX3N0cmxlbihzKTsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogCkBAIC03MCw2ICs3NCw3IEBACiAgKi8KIGNoYXIgKnN0cmNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCiB7CisjaWYgX19HTlVDX18gPCA0CiAJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gMDsKIAljaGFyICpyZXQgPSBkZXN0OwogCkBAIC03OCw2ICs4Myw5IEBACiAJCSAgICAgIDogIismYSIgKGRlc3QpLCAiKyZhIiAoc3JjKSA6ICJkIiAocjApCiAJCSAgICAgIDogImNjIiwgIm1lbW9yeSIgKTsKIAlyZXR1cm4gcmV0OworI2Vsc2UKKwlyZXR1cm4gX19idWlsdGluX3N0cmNweShkZXN0LCBzcmMpOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHN0cmNweSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggNGQ1MzcyMC4uODMzZTgzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTIwMCwyOSArMjAwLDYgQEAKIAlkb19ub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIDApOwogfQogCi0vKgotICogV2UgcmFuIG91dCBvZiBtZW1vcnksIG9yIHNvbWUgb3RoZXIgdGhpbmcgaGFwcGVuZWQgdG8gdXMgdGhhdCBtYWRlCi0gKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCi0gKi8KLXN0YXRpYyBpbnQgZG9fb3V0X29mX21lbW9yeShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwotCi0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfZ2xvYmFsX2luaXQodHNrKSkgewotCQl5aWVsZCgpOwotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXJldHVybiAxOwotCX0KLQlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQotCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCWRvX25vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0zNjcsNyArMzQ0LDYgQEAKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfQogCi1zdXJ2aXZlOgogCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKIAkJYWRkcmVzcyAmPSBIUEFHRV9NQVNLOwogCS8qCkBAIC0zNzgsOCArMzU0LDggQEAKIAlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCB3cml0ZSk7CiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewotCQkJaWYgKGRvX291dF9vZl9tZW1vcnkocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcykpCi0JCQkJZ290byBzdXJ2aXZlOworCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCWRvX3NpZ2J1cyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IGYwMjU4Y2EuLmM2MzRkZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtNDAsNyArNDAsOSBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhQQUdFX1NJWkUpKSk7CisKIGNoYXIgIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFBBR0VfU0laRSkpKTsKK0VYUE9SVF9TWU1CT0woZW1wdHlfemVyb19wYWdlKTsKIAogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDZiNmRkYzQuLmJlNmMxY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMjU4LDYgKzI1OCwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKm9sZF9tbTsKIAorCS8qIERvIHdlIGhhdmUgc3dpdGNoZWQgYW1vZGU/IElmIG5vLCB3ZSBjYW5ub3QgZG8gc2llICovCisJaWYgKCFzd2l0Y2hfYW1vZGUpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogRG8gd2UgaGF2ZSBwZ3N0ZXM/IGlmIHllcywgd2UgYXJlIGRvbmUgKi8KIAlpZiAodHNrLT5tbS0+Y29udGV4dC5oYXNfcGdzdGUpCiAJCXJldHVybiAwOwpAQCAtMjkyLDcgKzI5Niw3IEBACiAJdHNrLT5tbSA9IHRzay0+YWN0aXZlX21tID0gbW07CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJdXBkYXRlX21tKG1tLCB0c2spOwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXRhc2tfdW5sb2NrKHRzayk7CiAJbW1wdXQob2xkX21tKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBlYmFiZTUxLi44ZDUwZDUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xMDcsNiArMTA3LDkgQEAKIGNvbmZpZyBTWVNfU1VQUE9SVFNfUENJCiAJYm9vbAogCitjb25maWcgU1lTX1NVUFBPUlRTX0NNVAorCWJvb2wKKwogY29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVAogCWRlZl9ib29sIHkKIApAQCAtMTc2LDYgKzE3OSwxMCBAQAogY29uZmlnIENQVV9TSFgzCiAJYm9vbAogCitjb25maWcgQVJDSF9TSE1PQklMRQorCWJvb2wKKwlzZWxlY3QgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCisKIGNob2ljZQogCXByb21wdCAiUHJvY2Vzc29yIHN1Yi10eXBlIHNlbGVjdGlvbiIKIApAQCAtMTg4LDYgKzE5NSw3IEBACiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NjE5CiAJYm9vbCAiU3VwcG9ydCBTSDc2MTkgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogIyBTSC0yQSBQcm9jZXNzb3IgU3VwcG9ydAogCkBAIC0yMDAsMTUgKzIwOCwxOCBAQAogCWJvb2wgIlN1cHBvcnQgU0g3MjAzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMkEKIAlzZWxlY3QgQ1BVX0hBU19GUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MjA2CiAJYm9vbCAiU3VwcG9ydCBTSDcyMDYgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDcyNjMKIAlib29sICJTdXBwb3J0IFNINzI2MyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDJBCiAJc2VsZWN0IENQVV9IQVNfRlBVCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX01YRwogCWJvb2wgIlN1cHBvcnQgTVgtRyBwcm9jZXNzb3IiCkBAIC0zMjMsNyArMzM0LDkgQEAKIAlib29sICJTdXBwb3J0IFNINzcyMyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAloZWxwCiAJICBTZWxlY3QgU0g3NzIzIGlmIHlvdSBoYXZlIGFuIFNILU1vYmlsZVIyIENQVS4KIApAQCAtMzQ4LDYgKzM2MSwxNCBAQAogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAorY29uZmlnIENQVV9TVUJUWVBFX1NINzc4NgorCWJvb2wgIlN1cHBvcnQgU0g3Nzg2IHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NINEEKKwlzZWxlY3QgQ1BVX1NIWDMKKwlzZWxlY3QgQ1BVX0hBU19QVEVBRVgKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSFgzCiAJYm9vbCAiU3VwcG9ydCBTSC1YMyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBCkBAIC0zNjIsMjAgKzM4MywyNiBAQAogY29uZmlnIENQVV9TVUJUWVBFX1NINzM0MwogCWJvb2wgIlN1cHBvcnQgU0g3MzQzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAorCXNlbGVjdCBBUkNIX1NITU9CSUxFCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzcyMgogCWJvb2wgIlN1cHBvcnQgU0g3NzIyIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBDUFVfU0hYMgorCXNlbGVjdCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDczNjYKIAlib29sICJTdXBwb3J0IFNINzM2NiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBTF9EU1AKIAlzZWxlY3QgQ1BVX1NIWDIKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiAjIFNILTUgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtMzk4LDI1ICs0MjUsMzQgQEAKIG1lbnUgIlRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uIgogCiBjb25maWcgU0hfVE1VCi0JZGVmX2Jvb2wgeQotCXByb21wdCAiVE1VIHRpbWVyIHN1cHBvcnQiCisJYm9vbCAiVE1VIHRpbWVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU0gzIHx8IENQVV9TSDQKKwlkZWZhdWx0IHkKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgVE1VIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKIGNvbmZpZyBTSF9DTVQKLQlkZWZfYm9vbCB5Ci0JcHJvbXB0ICJDTVQgdGltZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9TSDIgJiYgIUNQVV9TVUJUWVBFX01YRworCWJvb2wgIkNNVCB0aW1lciBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX0NNVCAmJiBDUFVfU0gyCisJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIENNVCBhcyB0aGUgc3lzdGVtIHRpbWVyLgogCisjCisjIFN1cHBvcnQgZm9yIHRoZSBuZXctc3R5bGUgQ01UIGRyaXZlci4gVGhpcyB3aWxsIHJlcGxhY2UgU0hfQ01UCisjIG9uY2UgaXRzIG90aGVyIGRlcGVuZGVuY2llcyBhcmUgbWVyZ2VkLgorIworY29uZmlnIFNIX1RJTUVSX0NNVAorCWJvb2wgIkNNVCBjbG9ja2V2ZW50cyBkcml2ZXIiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfQ01UICYmICFTSF9DTVQKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCiBjb25maWcgU0hfTVRVMgotCWRlZl9ib29sIG4KLQlwcm9tcHQgIk1UVTIgdGltZXIgc3VwcG9ydCIKKwlib29sICJNVFUyIHRpbWVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU0gyQQorCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBNVFUyIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKQEAgLTQyNiw3ICs0NjIsOCBAQAogCQkJQ1BVX1NVQlRZUEVfU0g3NzYzCiAJZGVmYXVsdCAiODYiIGlmIENQVV9TVUJUWVBFX1NINzYxOQogCWRlZmF1bHQgIjE0MCIgaWYgQ1BVX1NVQlRZUEVfU0g3MjA2Ci0JZGVmYXVsdCAiMTQyIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDMKKwlkZWZhdWx0ICIxNDIiIGlmIENQVV9TVUJUWVBFX1NINzIwMyAmJiBTSF9DTVQKKwlkZWZhdWx0ICIxNTMiIGlmIENQVV9TVUJUWVBFX1NINzIwMyAmJiBTSF9NVFUyCiAJZGVmYXVsdCAiMjM4IiBpZiBDUFVfU1VCVFlQRV9NWEcKIAlkZWZhdWx0ICIxNiIKIApAQCAtNDM4LDcgKzQ3NSw4IEBACiAJZGVmYXVsdCAiMzMzMzMzMzMiIGlmIENQVV9TVUJUWVBFX1NINzc3MCB8fCBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgXAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3NzYwIHx8IENQVV9TVUJUWVBFX1NINzcwNSB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDMgfHwgQ1BVX1NVQlRZUEVfU0g3MjA2IHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBDUFVfU1VCVFlQRV9NWEcKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MyB8fCBDUFVfU1VCVFlQRV9NWEcgICAgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAlkZWZhdWx0ICI1MDAwMDAwMCIKQEAgLTUyMSw2ICs1NTksMTMgQEAKIAogCSAgRm9yIG1vcmUgZGV0YWlscyBzZWUgRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKIAorY29uZmlnIEtFWEVDX0pVTVAKKwlib29sICJrZXhlYyBqdW1wIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gU1VQRVJIMzIgJiYgS0VYRUMgJiYgSElCRVJOQVRJT04gJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSnVtcCBiZXR3ZWVuIG9yaWdpbmFsIGtlcm5lbCBhbmQga2V4ZWNlZCBrZXJuZWwgYW5kIGludm9rZQorCSAgY29kZSB2aWEgS0VYRUMKKwogY29uZmlnIFNFQ0NPTVAKIAlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuY3B1IGIvYXJjaC9zaC9LY29uZmlnLmNwdQppbmRleCAwZTI3ZmUzLi5jN2Q3MDQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcuY3B1CisrKyBiL2FyY2gvc2gvS2NvbmZpZy5jcHUKQEAgLTEwNCw2ICsxMDQsOSBAQAogY29uZmlnIENQVV9IQVNfUFRFQQogCWJvb2wKIAorY29uZmlnIENQVV9IQVNfUFRFQUVYCisJYm9vbAorCiBjb25maWcgQ1BVX0hBU19EU1AKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDQwNjdiMGQuLmJlY2UxZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtODAsNiArODAsNyBAQAogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NVUEVSSDMyKQkJCTo9IHpJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1NINzc4NUxDUikJCTo9IHVJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1JTSykJCQk6PSB1SW1hZ2UKK2RlZmF1bHRpbWFnZS0kKENPTkZJR19TSF9VUlFVRUxMKQkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwppbmRleCA4NjE5MTQ3Li5kY2MxYWY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCisrKyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKQEAgLTE1NSwxNyArMTU1LDIyIEBACiAKIGNvbmZpZyBTSF9TSDc3ODVMQ1JfMjlCSVRfUEhZU01BUFMKIAlib29sICJTSDc3ODVMQ1IgMjliaXQgcGh5c21hcHMiCi0JZGVwZW5kcyBvbiBTSF9TSDc3ODVMQ1IKKwlkZXBlbmRzIG9uIFNIX1NINzc4NUxDUiAmJiAyOUJJVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgYm9hcmQgaGFzIDIgcGh5c2ljYWwgbWVtb3J5IG1hcHMuIEl0IGNhbiBiZSBjaGFuZ2VkIHdpdGgKIAkgIERJUCBzd2l0Y2goUzItNSkuIElmIHlvdSBzZXQgdGhlIERJUCBzd2l0Y2ggZm9yIFMyLTUgPSBPTiwKIAkgIHlvdSBjYW4gYWNjZXNzIGFsbCBvbi1ib2FyZCBkZXZpY2UgaW4gMjliaXQgYWRkcmVzcyBtb2RlLgogCitjb25maWcgU0hfVVJRVUVMTAorCWJvb2wgIlVycXVlbGwiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODYKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwogY29uZmlnIFNIX01JR09SCiAJYm9vbCAiTWlnby1SIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIyCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFNlbGVjdCBNaWdvLVIgaWYgY29uZmlndXJpbmcgZm9yIHRoZSBTSDc3MjIgTWlnby1SIHBsYXRmb3JtCiAgICAgICAgICAgYnkgUmVuZXNhcyBTeXN0ZW0gU29sdXRpb25zIEFzaWEgUHRlLiBMdGQuCkBAIC0xNzMsNyArMTc4LDcgQEAKIGNvbmZpZyBTSF9BUDMyNVJYQQogCWJvb2wgIkFQLTMyNVJYQSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMwotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBSZW5lc2FzICJBUC0zMjVSWEEiIHN1cHBvcnQuCiAJICBDb21wYXRpYmxlIHdpdGggQUxHTyBTWVNURU0gQ08uLExURC4gIkFQLTMyMEEiCkBAIC0xODUsNiArMTkwLDEzIEBACiAJICBTZWxlY3QgU0g3NzYzUkRQIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgU0g3NzYzCiAJICBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgU0hfRVNQVAorCWJvb2wgIkVTUFQiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjMKKwloZWxwCisJICBTZWxlY3QgRVNQVCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFNINzc2MworCSAgd2l0aCBnaWdhYml0IGV0aGVyIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF9FRE9TSzc3MDUKIAlib29sICJFRE9TSzc3MDUiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDUKQEAgLTI0MCw3ICsyNTIsNyBAQAogY29uZmlnIFNIX01BR0lDX1BBTkVMX1IyCiAJYm9vbCAiTWFnaWMgUGFuZWwgUjIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjAKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgU2VsZWN0IE1hZ2ljIFBhbmVsIFIyIGlmIGNvbmZpZ3VyaW5nIGZvciBNYWdpYyBQYW5lbCBSMi4KIApAQCAtMjQ5LDYgKzI2MSwxMyBAQAogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g1XzEwMSB8fCBDUFVfU1VCVFlQRV9TSDVfMTAzCiAJc2VsZWN0IFNZU19TVVBQT1JUU19QQ0kKIAorY29uZmlnIFNIX1BPTEFSSVMKKwlib29sICJTTVNDIFBvbGFyaXMiCisJc2VsZWN0IENQVV9IQVNfSVBSX0lSUQorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA5CisJaGVscAorCSAgU2VsZWN0IGlmIGNvbmZpZ3VyaW5nIGZvciBhbiBTTVNDIFBvbGFyaXMgZGV2ZWxvcG1lbnQgYm9hcmQKKwogZW5kbWVudQogCiBzb3VyY2UgImFyY2gvc2gvYm9hcmRzL21hY2gtcjJkL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IDI2OWFlMmIuLjdiYWEyMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC00LDUgKzQsOCBAQAogb2JqLSQoQ09ORklHX1NIX0FQMzI1UlhBKQkrPSBib2FyZC1hcDMyNXJ4YS5vCiBvYmotJChDT05GSUdfU0hfTUFHSUNfUEFORUxfUjIpCSs9IGJvYXJkLW1hZ2ljcGFuZWxyMi5vCiBvYmotJChDT05GSUdfU0hfU0g3Nzg1TENSKQkrPSBib2FyZC1zaDc3ODVsY3Iubworb2JqLSQoQ09ORklHX1NIX1VSUVVFTEwpCSs9IGJvYXJkLXVycXVlbGwubwogb2JqLSQoQ09ORklHX1NIX1NITUlOKQkJKz0gYm9hcmQtc2htaW4ubwogb2JqLSQoQ09ORklHX1NIX0VET1NLNzc2MCkJKz0gYm9hcmQtZWRvc2s3NzYwLm8KK29iai0kKENPTkZJR19TSF9FU1BUKQkJKz0gYm9hcmQtZXNwdC5vCitvYmotJChDT05GSUdfU0hfUE9MQVJJUykJKz0gYm9hcmQtcG9sYXJpcy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCAxNWI2ZDQ1Li5hNjRlMzg4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTE2Niw2ICsxNjYsMTYgQEAKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIAorc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwkvKiBiYWNrbGlnaHQgKi8KKwljdHJsX291dHcoMCwgRlBHQV9CS0xSRUcpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMSk7CisKKwkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT0ZGICovCisJY3RybF9vdXR3KDAsIEZQR0FfTENEUkVHKTsKK30KKwogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGNfaW5mbyA9IHsKIAkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfRVhURVJOQUwsCiAJLmNoWzBdID0gewpAQCAtMTkxLDYgKzIwMSw3IEBACiAJCX0sCiAJCS5ib2FyZF9jZmcgPSB7CiAJCQkuZGlzcGxheV9vbiA9IGFwMzIwX3d2Z2FfcG93ZXJfb24sCisJCQkuZGlzcGxheV9vZmYgPSBhcDMyMF93dmdhX3Bvd2VyX29mZiwKIAkJfSwKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZXNwdC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZXNwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2U1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBEYXRhIFRlY2hub2xvZ3kgSW5jLiBFU1BULUdJR0EgYm9hcmQgc3Vwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9zaF9ldGguaD4KKworLyogTk9SIEZsYXNoICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXNwdF9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPSAiVS1Cb290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDIgKiBTWl8xMjhLKSwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0gIkxpbnV4LUtlcm5lbCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gKDIwICogU1pfMTI4SyksCisJfSwgeworCQkubmFtZSA9ICJSb290IEZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVzcHRfbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gMiwKKwkucGFydHMgPSBlc3B0X25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoZXNwdF9ub3JfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUgPSAiTk9SIEZsYXNoIiwKKwkJLnN0YXJ0ID0gMCwKKwkJLmVuZCA9IFNaXzhNIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcHRfbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkucmVzb3VyY2UgPSBlc3B0X25vcl9mbGFzaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXNwdF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyogU0gtRXRoZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfZXRoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ICA9IDB4RkVFMDA4MDAsICAgLyogdXNlIGV0aDEgKi8KKwkJLmVuZCAgICA9IDB4RkVFMDBGN0MgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgID0gNTcsICAgLyogaXJxIG51bWJlciAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSBzaDc3NjNfZXRoX3BkYXRhID0geworCS5waHkgPSAwLAorCS5lZG1hY19lbmRpYW4gPSBFRE1BQ19MSVRUTEVfRU5ESUFOLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwdF9ldGhfZGV2aWNlID0geworCS5uYW1lICAgICAgID0gInNoLWV0aCIsCisJLnJlc291cmNlICAgPSBzaF9ldGhfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2hfZXRoX3Jlc291cmNlcyksCisJLmRldiAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNoNzc2M19ldGhfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplc3B0X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlc3B0X25vcl9mbGFzaF9kZXZpY2UsCisJJmVzcHRfZXRoX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVzcHRfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlc3B0X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoZXNwdF9kZXZpY2VzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwoZXNwdF9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9lc3B0IF9faW5pdG12ID0geworCS5tdl9uYW1lID0gIkVTUFQtR0lHQSIsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjA3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBKdW5lIDIwMDYgc3RldmUuZ2xlbmRpbm5pbmdAc21zYy5jb20KKyAqCisgKiBQb2xhcmlzLXNwZWNpZmljIHJlc291cmNlIGRlY2xhcmF0aW9uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxjcHUvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gtc2UvbWFjaC9zZS5oPgorCisjZGVmaW5lIEJDUjIJCSgweEZGRkZGRjYyKQorI2RlZmluZSBXQ1IyCQkoMHhGRkZGRkY2NikKKyNkZWZpbmUgQVJFQTVfV0FJVF9DVFJMCSgweDFDMDApCisjZGVmaW5lIFdBSVRfU1RBVEVTXzEwCSgweDcpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtbWVtb3J5IiwKKwkJLnN0YXJ0CQk9IFBBX0VYVDUsCisJCS5lbmQJCT0gUEFfRVhUNSArIDB4MWZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtaXJxIiwKKwkJLnN0YXJ0CQk9IElSUTBfSVJRLAorCQkuZW5kCQk9IElSUTBfSVJRLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfT1BFTl9EUkFJTiwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtc2M5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtc2M5MTF4X3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYXJ0YmVhdF9iaXRfcG9zW10gPSB7IDAsIDEsIDIsIDMgfTsKKworc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKKwkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAorCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCisJLnJlZ3NpemUJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQT1JUX1BDRFIsCisJCS5lbmQJPSBQT1JUX1BDRFIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvbGFyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtc2M5MTF4X2RldmljZSwKKwkmaGVhcnRiZWF0X2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBvbGFyaXNfaW5pdGlhbGlzZSh2b2lkKQoreworCXUxNiB3Y3IsIGJjcl9tYXNrOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ29uZmlndXJpbmcgUG9sYXJpcyBleHRlcm5hbCBidXNcbiIpOworCisJLyogQ29uZmlndXJlIGFyZWEgNSB3aXRoIDIgd2FpdCBzdGF0ZXMgKi8KKwl3Y3IgPSBjdHJsX2ludyhXQ1IyKTsKKwl3Y3IgJj0gKH5BUkVBNV9XQUlUX0NUUkwpOworCXdjciB8PSAoV0FJVF9TVEFURVNfMTAgPDwgMTApOworCWN0cmxfb3V0dyh3Y3IsIFdDUjIpOworCisJLyogQ29uZmlndXJlIGFyZWEgNSBmb3IgMzItYml0IGFjY2VzcyAqLworCWJjcl9tYXNrID0gY3RybF9pbncoQkNSMik7CisJYmNyX21hc2sgfD0gMSA8PCAxMDsKKwljdHJsX291dHcoYmNyX21hc2ssIEJDUjIpOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHBvbGFyaXNfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShwb2xhcmlzX2RldmljZXMpKTsKK30KK2FyY2hfaW5pdGNhbGwocG9sYXJpc19pbml0aWFsaXNlKTsKKworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBpcHJfaXJxX3RhYmxlW10gPSB7CisJLyogRXh0ZXJuYWwgSVJRcyAqLworCXsgSVJRMF9JUlEsIDAsICAwLCAgMSwgfSwJLyogSVJRMCAqLworCXsgSVJRMV9JUlEsIDAsICA0LCAgMSwgfSwJLyogSVJRMSAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaXByX29mZnNldHNbXSA9IHsKKwlJTlRDX0lQUkMKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXByX2Rlc2MgaXByX2lycV9kZXNjID0geworCS5pcHJfb2Zmc2V0cwk9IGlwcl9vZmZzZXRzLAorCS5ucl9vZmZzZXRzCT0gQVJSQVlfU0laRShpcHJfb2Zmc2V0cyksCisKKwkuaXByX2RhdGEJPSBpcHJfaXJxX3RhYmxlLAorCS5ucl9pcnFzCT0gQVJSQVlfU0laRShpcHJfaXJxX3RhYmxlKSwKKwkuY2hpcCA9IHsKKwkJLm5hbWUJPSAic2g3NzA5LWV4dCIsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X3BvbGFyaXNfaXJxKHZvaWQpCit7CisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkEpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkIpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkMpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkQpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkUpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkYpOworCWN0cmxfb3V0dygwLCBCQ1JfSUxDUkcpOworCisJcmVnaXN0ZXJfaXByX2NvbnRyb2xsZXIoJmlwcl9pcnFfZGVzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfcG9sYXJpcyBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiUG9sYXJpcyIsCisJLm12X25yX2lycXMJCT0gNjEsCisJLm12X2luaXRfaXJxCQk9IGluaXRfcG9sYXJpc19pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCAzOGE2NDk2Li45NGMwMjk2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMjc1LDcgKzI3NSwxOCBAQAogCiBzdGF0aWMgdm9pZCBzaDc3ODVsY3JfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JY3RybF9vdXRiKDB4MDEsIFAyU0VHQUREUihQTERfUE9GQ1IpKTsKKwl1bnNpZ25lZCBjaGFyICpwOworCisJcCA9IGlvcmVtYXAoUExEX1BPRkNSLCBQTERfUE9GQ1IgKyAxKTsKKwlpZiAoIXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBlcnJvci5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwkqcCA9IDB4MDE7CisJaW91bm1hcChwKTsKKwlzZXRfYmxfYml0KCk7CisJd2hpbGUgKDEpCisJCWNwdV9yZWxheCgpOwogfQogCiAvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDM2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gU0g3Nzg2IFVycXVlbGwgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC91cnF1ZWxsLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzc4Ni5oPgorI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBCT0FSRFJFRyhTTEVEUiksCisJCS5lbmQJPSBCT0FSRFJFRyhTTEVEUiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0geworCS5yZWdzaXplID0gMTYsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7CisJLmZsYWdzID0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9ldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZSAgID0gIlNNQzkxQzExMSIgLAorCQkuc3RhcnQgID0gMHgwNTgwMDMwMCwKKwkJLmVuZCAgICA9IDB4MDU4MDAzMGYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDExLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9ldGhfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzbWM5MXgiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc21jOTF4X2V0aF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNtYzkxeF9ldGhfcmVzb3VyY2VzLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtYzkxeF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IFNaXzUxMkssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJib290ZW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzUxMkssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNE0sCisJfSwKKwl7CisJCS5uYW1lCQk9ICJkYXRhIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBub3JfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gTk9SX0ZMQVNIX0FERFIsCisJCS5lbmQJPSBOT1JfRkxBU0hfQUREUiArIE5PUl9GTEFTSF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG5vcl9mbGFzaF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXJxdWVsbF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGVhcnRiZWF0X2RldmljZSwKKwkmc21jOTF4X2V0aF9kZXZpY2UsCisJJm5vcl9mbGFzaF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1cnF1ZWxsX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwkvKiBVU0IgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9VU0JfT1ZDMCwgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1VTQl9QRU5DMCwgTlVMTCk7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXModXJxdWVsbF9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHVycXVlbGxfZGV2aWNlcykpOworfQorZGV2aWNlX2luaXRjYWxsKHVycXVlbGxfZGV2aWNlc19zZXR1cCk7CisKK3N0YXRpYyB2b2lkIHVycXVlbGxfcG93ZXJfb2ZmKHZvaWQpCit7CisJX19yYXdfd3JpdGV3KDB4YTVhNSwgVUJPQVJEUkVHKFNSU1RSKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB1cnF1ZWxsX2luaXRfaXJxKHZvaWQpCit7CisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkwzMjEwX01BU0spOworfQorCisvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLworc3RhdGljIHZvaWQgX19pbml0IHVycXVlbGxfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gVXJxdWVsbCBzdXBwb3J0LlxuIik7CisKKwlwbV9wb3dlcl9vZmYgPSB1cnF1ZWxsX3Bvd2VyX29mZjsKK30KKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3VycXVlbGwgX19pbml0bXYgPSB7CisJLm12X25hbWUJPSAiVXJxdWVsbCIsCisJLm12X3NldHVwCT0gdXJxdWVsbF9zZXR1cCwKKwkubXZfaW5pdF9pcnEJPSB1cnF1ZWxsX2luaXRfaXJxLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKaW5kZXggMDgwNTdmNi4uZGVmNDljYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcKQEAgLTE4LDcgKzE4LDcgQEAKIGNvbmZpZyBTSF9SNzc4NVJQCiAJYm9vbCAiUjc3ODVSUCBib2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3Nzg1Ci0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCiBlbmRjaG9pY2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG1fd2FrZXVwLlMKaW5kZXggNDRiNjQ4Yy4uNGYxOGQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TCkBAIC0xMCw0NyArMTAsMzIgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8Y3B1L21tdV9jb250ZXh0Lmg+CiAKLSNkZWZpbmUgazAJcjAKLSNkZWZpbmUgazEJcjEKLSNkZWZpbmUgazIJcjIKLSNkZWZpbmUgazMJcjMKLSNkZWZpbmUgazQJcjQKLQogLyoKICAqIEtlcm5lbCBtb2RlIHJlZ2lzdGVyIHVzYWdlOgogICoJazAJc2NyYXRjaAogICoJazEJc2NyYXRjaAotICoJazIJc2NyYXRjaCAoRXhjZXB0aW9uIGNvZGUpCi0gKglrMwlzY3JhdGNoIChSZXR1cm4gYWRkcmVzcykKLSAqCWs0CXNjcmF0Y2gKLSAqCWs1CXJlc2VydmVkCi0gKglrNglHbG9iYWwgSW50ZXJydXB0IE1hc2sgKDAtLTE1IDw8IDQpCi0gKglrNwlDVVJSRU5UX1RIUkVBRF9JTkZPIChwb2ludGVyIHRvIGN1cnJlbnQgdGhyZWFkIGluZm8pCisgKiBGb3IgbW9yZSBkZXRhaWxzLCBwbGVhc2UgaGF2ZSBhIGxvb2sgYXQgZW50cnkuUwogICovCiAKKyNkZWZpbmUgazAJcjAKKyNkZWZpbmUgazEJcjEKKwogRU5UUlkod2FrZXVwX3N0YXJ0KQogISBjbGVhciBTVEJZIGJpdAotCW1vdgkjLTEyNiwgazIKKwltb3YJIy0xMjYsIGsxCiAgICAJYW5kCSMxMjcsIGswCi0JbW92LmIJazAsIEBrMgorCW1vdi5iCWswLCBAazEKICEgZW5hYmxlIHJlZnJlc2gKIAltb3YubAk1ZiwgazEKIAltb3Yudwk2ZiwgazAKICAgCW1vdi53CWswLCBAazEKICEganVtcCB0byBoYW5kbGVyCi0JbW92LmwJMmYsIGsyCi0JbW92LmwJM2YsIGszCi0JbW92LmwJQGsyLCBrMgotCiAJbW92LmwJNGYsIGsxCiAJam1wCUBrMQotCW5vcAorCSBub3AKIAogCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTI6CS5sb25nCUlOVEVWVAotMzoJLmxvbmcJcmV0X2Zyb21faXJxCi00OgkubG9uZwloYW5kbGVfZXhjZXB0aW9uCis0OgkubG9uZwloYW5kbGVfaW50ZXJydXB0CiA1OgkubG9uZwkweGZmZmZmZjY4CiA2Ogkud29yZAkweDA1MjQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IDc0Njc0MmJkLi44ZjMwNWIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCkBAIC0xMTUsNyArMTE1LDYgQEAKIAkubXZfc2V0dXAgPSBocDZ4eF9zZXR1cCwKIAkvKiBJUlEncyA6IENQVSg2NCkgKyBDQ0hJUCgxNikgKyBGUkVFX1RPX1VTRSg2KSAqLwogCS5tdl9ucl9pcnFzID0gSEQ2NDQ2MV9JUlFCQVNFICsgSEQ2NDQ2MV9JUlFfTlVNICsgNiwKLQkubXZfaXJxX2RlbXV4ID0gaGQ2NDQ2MV9pcnFfZGVtdXgsCiAJLyogRW5hYmxlIElSUTAgLT4gSVJRMyBpbiBJUlFfTU9ERSAqLwogCS5tdl9pbml0X2lycSA9IGhwNnh4X2luaXRfaXJxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCAyOGU1NmM1Li5iYzM1YjRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC00NTAsNiArNDUwLDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1pZ29yX2RldmljZXNfc2V0dXAodm9pZCkKIHsKKworI2lmZGVmIENPTkZJR19QTQorCS8qIExldCBEMTEgTEVEIHNob3cgU1RBVFVTMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NUQVRVUzAsIE5VTEwpOworCisJLyogTGl0IEQxMiBMRUQgc2hvdyBQRFNUQVRVUyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsKKyNlbHNlCiAJLyogTGl0IEQxMSBMRUQgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19QVEo3LCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo3LCAxKTsKQEAgLTQ1OSw2ICs0NjcsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX1BUSjUsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjUsIDEpOwogCWdwaW9fZXhwb3J0KEdQSU9fUFRKNSwgMCk7CisjZW5kaWYKIAogCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL0tjb25maWcKaW5kZXggYmZmMDk1ZC4uYWVmZjNiMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiAKIGNvbmZpZyBTSF9SU0s3MjAzCiAJYm9vbCAiUlNLNzIwMyIKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDcyMDMKIAogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwppbmRleCA2ZjkyNmZkLi4zOTA1MzRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKQEAgLTYzLDE1ICs2MywxOSBAQAogCX0sCiB9OwogCi0vKiBTSC1FdGhlciAqLworLyoKKyAqIFNILUV0aGVyCisgKgorICogU0ggRXRoZXIgb2YgU0g3NzYzIGhhcyBtdWx0aSBJUlEgaGFuZGxpbmcuCisgKiAoNTcsNTgsNTkgLT4gNTcpCisgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfZXRoX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ICA9IDB4RkVFMDA4MDAsICAgLyogdXNlIGV0aDEgKi8KIAkJLmVuZCAgICA9IDB4RkVFMDBGN0MgLSAxLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgID0gNTgsICAgLyogaXJxIG51bWJlciAqLwotCQkuZW5kICAgID0gNTgsCisJCS5zdGFydCAgPSA1NywgICAvKiBpcnEgbnVtYmVyICovCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCBjMTZjY2Q0Li45NTQ4M2QxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0zMywyMCArMzMsMjQgQEAKICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXg6IEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL2NvbXByZXNzZWQgJEAKIAotaWZlcSAoJChDT05GSUdfMzJCSVQpLHkpCi1LRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKLQkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAotCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKLWVsc2UKLUtFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAotCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCi0JCQkkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAotCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKK0tFUk5FTF9NRU1PUlkgOj0gMHgwMDAwMDAwMAoraWZlcSAoJChDT05GSUdfUE1CX0ZJWEVEKSx5KQorS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19NRU1PUllfU1RBUlQpICYgMHgxZmZmZmZmZl0nKQogZW5kaWYKK2lmZXEgKCQoQ09ORklHXzI5QklUKSx5KQorS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19NRU1PUllfU1RBUlQpXScpCitlbmRpZgorCitLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAorCQkJJChLRVJORUxfTUVNT1JZKSArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCiAKIEtFUk5FTF9FTlRSWQk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAotCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKKwkJCSQoS0VSTkVMX01FTU9SWSkgKyBcCiAJCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKSArICQoQ09ORklHX0VOVFJZX09GRlNFVCldJykKIAogcXVpZXRfY21kX3VpbWFnZSA9IFVJTUFHRSAgJEAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKaW5kZXggMjdjZWViOS4uMjVlZjkxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKQEAgLTUzLDIxICs1MywyMiBAQAogCS51bm1hc2sJCT0gaGQ2NDQ2MV91bm1hc2tfaXJxLAogfTsKIAotaW50IGhkNjQ0NjFfaXJxX2RlbXV4KGludCBpcnEpCitzdGF0aWMgdm9pZCBoZDY0NDYxX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JaWYgKGlycSA9PSBDT05GSUdfSEQ2NDQ2MV9JUlEpIHsKLQkJdW5zaWduZWQgc2hvcnQgYml0OwotCQl1bnNpZ25lZCBzaG9ydCBuaXJyID0gaW53KEhENjQ0NjFfTklSUik7Ci0JCXVuc2lnbmVkIHNob3J0IG5pbXIgPSBpbncoSEQ2NDQ2MV9OSU1SKTsKLQkJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KEhENjQ0NjFfTklSUik7CisJc3RydWN0IGlycV9kZXNjICpleHRfZGVzYzsKKwl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IEhENjQ0NjFfSVJRQkFTRTsKIAotCQluaXJyICY9IH5uaW1yOwotCQlmb3IgKGJpdCA9IDEsIGkgPSAwOyBpIDwgMTY7IGJpdCA8PD0gMSwgaSsrKQotCQkJaWYgKG5pcnIgJiBiaXQpCi0JCQkJYnJlYWs7Ci0JCWlycSA9IEhENjQ0NjFfSVJRQkFTRSArIGk7CisJaW50diAmPSAoMSA8PCBIRDY0NDYxX0lSUV9OVU0pIC0gMTsKKworCXdoaWxlIChpbnR2KSB7CisJCWlmIChpbnR2ICYgMSkgeworCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7CisJCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKKwkJfQorCQlpbnR2ID4+PSAxOworCQlleHRfaXJxKys7CiAJfQotCXJldHVybiBpcnE7CiB9CiAKIGludCBfX2luaXQgc2V0dXBfaGQ2NDQ2MSh2b2lkKQpAQCAtOTMsNiArOTQsOSBAQAogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmhkNjQ0NjFfaXJxX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAorCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKENPTkZJR19IRDY0NDYxX0lSUSwgaGQ2NDQ2MV9pcnFfZGVtdXgpOworCXNldF9pcnFfdHlwZShDT05GSUdfSEQ2NDQ2MV9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CisKICNpZmRlZiBDT05GSUdfSEQ2NDQ2MV9FTkFCTEVSCiAJcHJpbnRrKEtFUk5fSU5GTyAiSEQ2NDQ2MTogZW5hYmxpbmcgUENNQ0lBIGRldmljZXNcbiIpOwogCV9fcmF3X3dyaXRlYigweDRjLCBIRDY0NDYxX1BDQzFDU0NJRVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2VjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTkwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3CisjIFR1ZSBNYXIgMTcgMTM6MjU6NTggMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CitDT05GSUdfVVRTX05TPXkKK0NPTkZJR19JUENfTlM9eQorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2Mz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX1NINzc2M1JEUCBpcyBub3Qgc2V0CitDT05GSUdfU0hfRVNQVD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0yOAorQ09ORklHX1NIX1BDTEtfRlJFUT02NjY2NjY2NgorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorQ09ORklHX1NIX0VUSD15CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0zCitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GT1JFSUdOX0VORElBTj15CitDT05GSUdfRkJfQk9USF9FTkRJQU49eQorIyBDT05GSUdfRkJfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfU0g3NzYwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfTE9HT19TVVBFUkhfTU9OTz15CitDT05GSUdfTE9HT19TVVBFUkhfVkdBMTY9eQorQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0FVVE9GU19GUz15CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT15CitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj15CitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND15CitDT05GSUdfTkxTX0lTTzg4NTlfOD15CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9eQorQ09ORklHX05MU19JU084ODU5XzM9eQorQ09ORklHX05MU19JU084ODU5XzQ9eQorQ09ORklHX05MU19JU084ODU5XzU9eQorQ09ORklHX05MU19JU084ODU5XzY9eQorQ09ORklHX05MU19JU084ODU5Xzc9eQorQ09ORklHX05MU19JU084ODU5Xzk9eQorQ09ORklHX05MU19JU084ODU5XzEzPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xND15CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQorQ09ORklHX05MU19LT0k4X1I9eQorQ09ORklHX05MU19LT0k4X1U9eQorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjBkZWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTY5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0CisjIFdlZCBGZWIgMTEgMTg6NDE6NTkgMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIMz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MEMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVX0VNVT15CitDT05GSUdfU0hfQURDPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19JUFJfSVJRPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAorQ09ORklHX1NIX1BPTEFSSVM9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzMwMDAwMDAKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCitDT05GSUdfU0hfRE1BX0FQST15CitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTQKKyMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorIyBDT05GSUdfR1VTQV9SQiBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIG1lbT02M00gbXRkcGFydHM9cGh5c21hcC1mbGFzaC4wOjB4MDAxMDAwMDAoYm9vdGxvYWRlcilybywweDAwNTAwMDAwKEtlcm5lbClybywweDAwQTAwMDAwKEZpbGVzeXN0ZW0pIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9DT01QQVQ9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMTAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKK0NPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0g9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CitDT05GSUdfREVCVUdfUElfTElTVD15CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVA9eQorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tERVAgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0c9eQorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weDAwMDAwMDAwCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9HRU5FUklDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZTFkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE1NTMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgRnJpIEZlYiAyMCAxODoyNToyOSAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKK0NPTkZJR19DUFVfU0hYMj15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4NDAwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDIwMDAwMDAwCisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQl9FTkFCTEU9eQorIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKK0NPTkZJR19QTUJfRklYRUQ9eQorIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAorQ09ORklHX1ZTWVNDQUxMPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTIKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVPXkKK0NPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ISUdITEFOREVSIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9TSDc3ODVMQ1I9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MjgKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKK0NPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX1BDSV9BVVRPPXkKK0NPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUw9eQorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorQ09ORklHX1I4MTY5PXkKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPUENBPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GSUxMUkVDVD1tCitDT05GSUdfRkJfU1lTX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9TWVNfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRk9QUz1tCitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD1tCisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1RFU1Q9bQorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlM1QzM3Mj15CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTcyNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMzMiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNAorIyBUaHUgTWFyICA1IDE3OjI4OjEzIDIwMDkKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorQ09ORklHX0NQVV9TSFgzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4Nj15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAorQ09ORklHX1ZTWVNDQUxMPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfRlBVPXkKK0NPTkZJR19TSF9TVE9SRV9RVUVVRVM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX1VSUVVFTEw9eQorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwgMzg0MDAgZWFybHlwcmludGs9c2VyaWFsIGlwPW9uIGlnbm9yZV9sb2dsZXZlbCByb290PS9kZXYvbmZzIGlwPWRoY3AgbWVtY2h1bmsudnB1PTRtIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT1BDQT15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCitDT05GSUdfSTJDX1BDQV9QTEFURk9STT15CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorQ09ORklHX01GRF9TTTUwMT15CisjIENPTkZJR19NRkRfU001MDFfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GSUxMUkVDVD1tCitDT05GSUdfRkJfU1lTX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9TWVNfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRk9QUz1tCitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCitDT05GSUdfRkJfU001MDE9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCAwMTkzNjM2Li5mMTNhMDUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC05LDEzICs5LDIxIEBACiAJc2VsZWN0IFNIX0RNQV9BUEkKIAlkZWZhdWx0IG4KIAorY29uZmlnIFNIX0RNQV9JUlFfTVVMVEkKKwlib29sCisJZGVwZW5kcyBvbiBTSF9ETUEKKwlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwIHx8IENQVV9TVUJUWVBFX1NINzc1MSB8fCBcCisJCUNQVV9TVUJUWVBFX1NINzc1MFMgfHwgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSIHx8IFwKKwkJQ1BVX1NVQlRZUEVfU0g3MDkxIHx8IENQVV9TVUJUWVBFX1NINzc2MyB8fCBDUFVfU1VCVFlQRV9TSDc3NjQgfHwgXAorCQlDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CisKIGNvbmZpZyBOUl9PTkNISVBfRE1BX0NIQU5ORUxTCiAJaW50CiAJZGVwZW5kcyBvbiBTSF9ETUEKLQlkZWZhdWx0ICI2IiBpZiBDUFVfU1VCVFlQRV9TSDc3MjAgfHwgQ1BVX1NVQlRZUEVfU0g3NzIxCi0JZGVmYXVsdCAiOCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCi0JZGVmYXVsdCAiMTIiIGlmIENQVV9TVUJUWVBFX1NINzc4MAotCWRlZmF1bHQgIjQiCisJZGVmYXVsdCAiNCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwIHx8IENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTBTCisJZGVmYXVsdCAiOCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSIHx8IENQVV9TVUJUWVBFX1NINzc2MAorCWRlZmF1bHQgIjEyIiBpZiBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NQorCWRlZmF1bHQgIjYiCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBjaGFubmVscyB0aGF0IHRoZSBvbi1jaGlwCiAJICBETUFDIHN1cHBvcnRzLiBUaGlzIHdpbGwgYmUgNCBmb3IgU0g3NzUwL1NINzc1MSBhbmQgOCBmb3IgdGhlCkBAIC00Niw0ICs1NCwyOCBAQAogCSAgb2YgdGhlIFNINzc2MC4KIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBBdWRpby9VU0IgRE1BIG9uIHlvdXIgU0g3NzYwIGJvYXJkLgogCitjb25maWcgUFZSMl9ETUEKKwl0cmlzdGF0ZSAiUG93ZXJWUiAyIERNQUMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVCAmJiBTSF9ETUEKKwloZWxwCisJICBTZWxlY3RpbmcgdGhpcyB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgUFZSMiBETUEgY29udHJvbGxlci4KKwkgIEFzIHRoaXMgY2hhaW5zIG9mZiBvZiB0aGUgb24tY2hpcCBETUFDLCB0aGF0IG11c3QgYWxzbyBiZQorCSAgZW5hYmxlZCBieSBkZWZhdWx0LgorCisJICBUaGlzIGlzIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBwdnIyZmIgZnJhbWVidWZmZXIgZHJpdmVyIGZvcgorCSAgY2VydGFpbiBvcHRpbWl6YXRpb25zLCBidXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25hbGl0eS4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCitjb25maWcgRzJfRE1BCisJdHJpc3RhdGUgIkcyIEJ1cyBETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVAorCXNlbGVjdCBTSF9ETUFfQVBJCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBETUEgY29udHJvbGxlciBmb3IgdGhlIERyZWFtY2FzdCdzCisJICBHMiBidXMuIERyaXZlcnMgdGhhdCB3YW50IHRoaXMgd2lsbCBnZW5lcmFsbHkgZW5hYmxlIHRoaXMgb24KKwkgIHRoZWlyIG93bi4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRleCBhYjk1NmFkLi5jNjA2ODEzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTQsNSArNCw2IEBACiAKIG9iai0kKENPTkZJR19TSF9ETUFfQVBJKQkrPSBkbWEtYXBpLm8gZG1hLXN5c2ZzLm8KIG9iai0kKENPTkZJR19TSF9ETUEpCQkrPSBkbWEtc2gubwotb2JqLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJKz0gZG1hLXB2cjIubyBkbWEtZzIubworb2JqLSQoQ09ORklHX1BWUjJfRE1BKQkJKz0gZG1hLXB2cjIubworb2JqLSQoQ09ORklHX0cyX0RNQSkJCSs9IGRtYS1nMi5vCiBvYmotJChDT05GSUdfU0hfRE1BQlJHKQkJKz0gZG1hYnJnLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCmluZGV4IDUwODg3YTUuLjM3ZmI1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwpAQCAtMTcsMjggKzE3LDE2IEBACiAjaW5jbHVkZSA8bWFjaC1kcmVhbWNhc3QvbWFjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAiZG1hLXNoLmgiCisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogCi1zdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdID0gewotCURNVEUwX0lSUSwKLQlETVRFMV9JUlEsCi0JRE1URTJfSVJRLAotCURNVEUzX0lSUSwKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKLQlETVRFNF9JUlEsCi0JRE1URTVfSVJRLAorI2lmIGRlZmluZWQoRE1BRTFfSVJRKQorI2RlZmluZSBOUl9ETUFFCQkyCisjZWxzZQorI2RlZmluZSBOUl9ETUFFCQkxCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKSB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKLQlETVRFNl9JUlEsCi0JRE1URTdfSVJRLAotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICpkbWFlX25hbWVbXSA9IHsKKwkiRE1BQyBBZGRyZXNzIEVycm9yMCIsICJETUFDIEFkZHJlc3MgRXJyb3IxIgogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2RtdGVfaXJxKHVuc2lnbmVkIGludCBjaGFuKQpAQCAtNDYsNyArMzQsMTQgQEAKIAl1bnNpZ25lZCBpbnQgaXJxID0gMDsKIAlpZiAoY2hhbiA8IEFSUkFZX1NJWkUoZG10ZV9pcnFfbWFwKSkKIAkJaXJxID0gZG10ZV9pcnFfbWFwW2NoYW5dOworCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwlpZiAoaXJxID4gRE1URTZfSVJRKQorCQlyZXR1cm4gRE1URTZfSVJROworCXJldHVybiBETVRFMF9JUlE7CisjZWxzZQogCXJldHVybiBpcnE7CisjZW5kaWYKIH0KIAogLyoKQEAgLTU5LDcgKzU0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsY194bWl0X3NoaWZ0KHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQl1MzIgY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCXUzMiBjaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCiAJcmV0dXJuIHRzX3NoaWZ0WyhjaGNyICYgQ0hDUl9UU19NQVNLKT4+Q0hDUl9UU19TSElGVF07CiB9CkBAIC03NSwxMyArNzAsMTMgQEAKIAlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4gPSBkZXZfaWQ7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAogCWlmICghKGNoY3IgJiBDSENSX1RFKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJY2hjciAmPSB+KENIQ1JfSUUgfCBDSENSX0RFKTsKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJd2FrZV91cCgmY2hhbi0+d2FpdF9xdWV1ZSk7CiAKQEAgLTk0LDcgKzg5LDEyIEBACiAJCXJldHVybiAwOwogCiAJcmV0dXJuIHJlcXVlc3RfaXJxKGdldF9kbXRlX2lycShjaGFuLT5jaGFuKSwgZG1hX3RlaSwKLQkJCSAgIElSUUZfRElTQUJMRUQsIGNoYW4tPmRldl9pZCwgY2hhbik7CisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwkJCQlJUlFGX1NIQVJFRCwKKyNlbHNlCisJCQkJSVJRRl9ESVNBQkxFRCwKKyNlbmRpZgorCQkJCWNoYW4tPmRldl9pZCwgY2hhbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2RtYWNfZnJlZV9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMTE1LDcgKzExNSw3IEBACiAJCWNoYW4tPmZsYWdzICY9IH5ETUFfVEVJX0NBUEFCTEU7CiAJfQogCi0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCWNoYW4tPmZsYWdzIHw9IERNQV9DT05GSUdVUkVEOwogCXJldHVybiAwOwpAQCAtMTI2LDEzICsxMjYsMTMgQEAKIAlpbnQgaXJxOwogCXUzMiBjaGNyOwogCi0JY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAJY2hjciB8PSBDSENSX0RFOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKQogCQljaGNyIHw9IENIQ1JfSUU7CiAKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKSB7CiAJCWlycSA9IGdldF9kbXRlX2lycShjaGFuLT5jaGFuKTsKQEAgLTE1MCw5ICsxNTAsOSBAQAogCQlkaXNhYmxlX2lycShpcnEpOwogCX0KIAotCWNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCWNoY3IgJj0gfihDSENSX0RFIHwgQ0hDUl9URSB8IENIQ1JfSUUpOwotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfZG1hY194ZmVyX2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCkBAIC0xODMsMTIgKzE4MywxMyBAQAogCSAqLwogCWlmIChjaGFuLT5zYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKIAkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCi0JCWN0cmxfb3V0bChjaGFuLT5zYXIsIFNBUltjaGFuLT5jaGFuXSk7CisJCWN0cmxfb3V0bChjaGFuLT5zYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dK1NBUikpOwogCWlmIChjaGFuLT5kYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKIAkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCi0JCWN0cmxfb3V0bChjaGFuLT5kYXIsIERBUltjaGFuLT5jaGFuXSk7CisJCWN0cmxfb3V0bChjaGFuLT5kYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgREFSKSk7CiAKLQljdHJsX291dGwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLCBETUFUQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGFuLT5jb3VudCA+PiBjYWxjX3htaXRfc2hpZnQoY2hhbiksCisJCShkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKSk7CiAKIAlzaF9kbWFjX2VuYWJsZV9kbWEoY2hhbik7CiAKQEAgLTE5NywzNiArMTk4LDI2IEBACiAKIHN0YXRpYyBpbnQgc2hfZG1hY19nZXRfZG1hX3Jlc2lkdWUoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWlmICghKGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pICYgQ0hDUl9ERSkpCisJaWYgKCEoY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpICYgQ0hDUl9ERSkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGN0cmxfaW5sKERNQVRDUltjaGFuLT5jaGFuXSkgPDwgY2FsY194bWl0X3NoaWZ0KGNoYW4pOworCXJldHVybiBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKQorCQkgPDwgY2FsY194bWl0X3NoaWZ0KGNoYW4pOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotI2RlZmluZSBkbWFvcl9yZWFkX3JlZygpCWN0cmxfaW53KERNQU9SKQotI2RlZmluZSBkbWFvcl93cml0ZV9yZWcoZGF0YSkJY3RybF9vdXR3KGRhdGEsIERNQU9SKQotI2Vsc2UKLSNkZWZpbmUgZG1hb3JfcmVhZF9yZWcoKQljdHJsX2lubChETUFPUikKLSNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKGRhdGEpCWN0cmxfb3V0bChkYXRhLCBETUFPUikKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBkbWFvcl9yZXNldCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgZG1hb3JfcmVzZXQoaW50IG5vKQogewotCXVuc2lnbmVkIGxvbmcgZG1hb3IgPSBkbWFvcl9yZWFkX3JlZygpOworCXVuc2lnbmVkIGxvbmcgZG1hb3IgPSBkbWFvcl9yZWFkX3JlZyhubyk7CiAKIAkvKiBUcnkgdG8gY2xlYXIgdGhlIGVycm9yIGZsYWdzIGZpcnN0LCBpbmNhc2UgdGhleSBhcmUgc2V0ICovCiAJZG1hb3IgJj0gfihETUFPUl9OTUlGIHwgRE1BT1JfQUUpOwotCWRtYW9yX3dyaXRlX3JlZyhkbWFvcik7CisJZG1hb3Jfd3JpdGVfcmVnKG5vLCBkbWFvcik7CiAKIAlkbWFvciB8PSBETUFPUl9JTklUOwotCWRtYW9yX3dyaXRlX3JlZyhkbWFvcik7CisJZG1hb3Jfd3JpdGVfcmVnKG5vLCBkbWFvcik7CiAKIAkvKiBTZWUgaWYgd2UgZ290IGFuIGVycm9yIGFnYWluICovCi0JaWYgKChkbWFvcl9yZWFkX3JlZygpICYgKERNQU9SX0FFIHwgRE1BT1JfTk1JRikpKSB7CisJaWYgKChkbWFvcl9yZWFkX3JlZyhubykgJiAoRE1BT1JfQUUgfCBETUFPUl9OTUlGKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJkbWEtc2g6IENhbid0IGluaXRpYWxpemUgRE1BT1IuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjM3LDEwICsyMjgsMzMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQogc3RhdGljIGlycXJldHVybl90IGRtYV9lcnIoaW50IGlycSwgdm9pZCAqZHVtbXkpCiB7Ci0JZG1hb3JfcmVzZXQoKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCWludCBjbnQgPSAwOworCXN3aXRjaCAoaXJxKSB7CisjaWYgZGVmaW5lZChETVRFNl9JUlEpICYmIGRlZmluZWQoRE1BRTFfSVJRKQorCWNhc2UgRE1URTZfSVJROgorCQljbnQrKzsKKyNlbmRpZgorCWNhc2UgRE1URTBfSVJROgorCQlpZiAoZG1hb3JfcmVhZF9yZWcoY250KSAmIChETUFPUl9OTUlGIHwgRE1BT1JfQUUpKSB7CisJCQlkaXNhYmxlX2lycShpcnEpOworCQkJLyogRE1BIG11bHRpIGFuZCBlcnJvciBJUlEgKi8KKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCWRlZmF1bHQ6CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisjZWxzZQorCWRtYW9yX3Jlc2V0KDApOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorCWRtYW9yX3Jlc2V0KDEpOworI2VuZGlmCiAJZGlzYWJsZV9pcnEoaXJxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKKyNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTI1OSwyNCArMjczLDU5IEBACiAJLmZsYWdzCQk9IERNQUNfQ0hBTk5FTFNfVEVJX0NBUEFCTEUsCiB9OwogCisjaWZkZWYgQ09ORklHX0NQVV9TSDQKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2RtYV9lcnJvcl9pcnEoaW50IG4pCit7CisjaWYgZGVmaW5lZChDT05GSUdfU0hfRE1BX0lSUV9NVUxUSSkKKwlyZXR1cm4gKG4gPT0gMCkgPyBnZXRfZG10ZV9pcnEoMCkgOiBnZXRfZG10ZV9pcnEoNik7CisjZWxzZQorCXJldHVybiAobiA9PSAwKSA/IERNQUUwX0lSUSA6CisjaWYgZGVmaW5lZChETUFFMV9JUlEpCisJCQkJRE1BRTFfSVJROworI2Vsc2UKKwkJCQktMTsKKyNlbmRpZgorI2VuZGlmCit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgc2hfZG1hY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRtYV9pbmZvICppbmZvID0gJnNoX2RtYWNfaW5mbzsKIAlpbnQgaTsKIAogI2lmZGVmIENPTkZJR19DUFVfU0g0Ci0JaSA9IHJlcXVlc3RfaXJxKERNQUVfSVJRLCBkbWFfZXJyLCBJUlFGX0RJU0FCTEVELCAiRE1BQyBBZGRyZXNzIEVycm9yIiwgMCk7Ci0JaWYgKHVubGlrZWx5KGkgPCAwKSkKLQkJcmV0dXJuIGk7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgTlJfRE1BRTsgbisrKSB7CisJCWkgPSByZXF1ZXN0X2lycShnZXRfZG1hX2Vycm9yX2lycShuKSwgZG1hX2VyciwKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCQkJCUlSUUZfU0hBUkVELAorI2Vsc2UKKwkJCQlJUlFGX0RJU0FCTEVELAogI2VuZGlmCisJCQkJZG1hZV9uYW1lW25dLCAodm9pZCAqKWRtYWVfbmFtZVtuXSk7CisJCWlmICh1bmxpa2VseShpIDwgMCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgcmVxdWVzdF9pcnEgZmFpbFxuIiwgZG1hZV9uYW1lW25dKTsKKwkJCXJldHVybiBpOworCQl9CisJfQorI2VuZGlmIC8qIENPTkZJR19DUFVfU0g0ICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUgRE1BT1IsIGFuZCBjbGVhbiB1cCBhbnkgZXJyb3IgZmxhZ3MgdGhhdCBtYXkgaGF2ZQogCSAqIGJlZW4gc2V0LgogCSAqLwotCWkgPSBkbWFvcl9yZXNldCgpOworCWkgPSBkbWFvcl9yZXNldCgwKTsKIAlpZiAodW5saWtlbHkoaSAhPSAwKSkKIAkJcmV0dXJuIGk7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisJaSA9IGRtYW9yX3Jlc2V0KDEpOworCWlmICh1bmxpa2VseShpICE9IDApKQorCQlyZXR1cm4gaTsKKyNlbmRpZgogCiAJcmV0dXJuIHJlZ2lzdGVyX2RtYWMoaW5mbyk7CiB9CkBAIC0yODQsOCArMzMzLDEyIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc2hfZG1hY19leGl0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0NQVV9TSDQKLQlmcmVlX2lycShETUFFX0lSUSwgMCk7Ci0jZW5kaWYKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBOUl9ETUFFOyBuKyspIHsKKwkJZnJlZV9pcnEoZ2V0X2RtYV9lcnJvcl9pcnEobiksICh2b2lkICopZG1hZV9uYW1lW25dKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NQVV9TSDQgKi8KIAl1bnJlZ2lzdGVyX2RtYWMoJnNoX2RtYWNfaW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmggYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWZlY2Q1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgVGFrYXNoaSBZT1NISUkKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fRE1BX1NIX0gKLSNkZWZpbmUgX19ETUFfU0hfSAotCi0jaW5jbHVkZSA8Y3B1L2RtYS5oPgotCi0vKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCi0jZGVmaW5lIFJFUV9MCTB4MDAwMDAwMDAKLSNkZWZpbmUgUkVRX0UJMHgwMDA4MDAwMAotI2RlZmluZSBSQUNLX0gJMHgwMDAwMDAwMAotI2RlZmluZSBSQUNLX0wJMHgwMDA0MDAwMAotI2RlZmluZSBBQ0tfUgkweDAwMDAwMDAwCi0jZGVmaW5lIEFDS19XCTB4MDAwMjAwMDAKLSNkZWZpbmUgQUNLX0gJMHgwMDAwMDAwMAotI2RlZmluZSBBQ0tfTAkweDAwMDEwMDAwCi0jZGVmaW5lIERNX0lOQwkweDAwMDA0MDAwCi0jZGVmaW5lIERNX0RFQwkweDAwMDA4MDAwCi0jZGVmaW5lIFNNX0lOQwkweDAwMDAxMDAwCi0jZGVmaW5lIFNNX0RFQwkweDAwMDAyMDAwCi0jZGVmaW5lIFJTX0lOCTB4MDAwMDAyMDAKLSNkZWZpbmUgUlNfT1VUCTB4MDAwMDAzMDAKLSNkZWZpbmUgVFNfQkxLCTB4MDAwMDAwNDAKLSNkZWZpbmUgVE1fQlVSCTB4MDAwMDAwMjAKLSNkZWZpbmUgQ0hDUl9ERSAweDAwMDAwMDAxCi0jZGVmaW5lIENIQ1JfVEUgMHgwMDAwMDAwMgotI2RlZmluZSBDSENSX0lFIDB4MDAwMDAwMDQKLQotLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAotI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKLSNkZWZpbmUgRE1BT1JfRE1FCTB4MDAwMDAwMDEKLQotLyoKLSAqIERlZmluZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkdWFsIGFkZHJlc3MgbWVtb3J5LW1lbW9yeSB0cmFuc2Zlci4KLSAqIFRoZSAweDQwMCB2YWx1ZSByZXByZXNlbnRzIGF1dG8tcmVxdWVzdCwgZXh0ZXJuYWwtPmV4dGVybmFsLgotICovCi0jZGVmaW5lIFJTX0RVQUwJKERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgVFNfMzIpCi0KLSNkZWZpbmUgTUFYX0RNQUNfQ0hBTk5FTFMJKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQotCi0vKgotICogU3VidHlwZXMgdGhhdCBoYXZlIGZld2VyIGNoYW5uZWxzIHRoYW4gdGhpcyBzaW1wbHkgbmVlZCB0byBjaGFuZ2UKLSAqIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTLiBMaWtld2lzZSwgc3VidHlwZXMgd2l0aCBhIGxhcmdlciBudW1iZXIKLSAqIG9mIGNoYW5uZWxzIHNob3VsZCBleHBhbmQgb24gdGhpcy4KLSAqCi0gKiBGb3IgbW9zdCBzdWJ0eXBlcyB3ZSBjYW4gZWFzaWx5IGZpZ3VyZSB0aGVzZSB2YWx1ZXMgb3V0IHdpdGggc29tZQotICogYmFzaWMgY2FsY3VsYXRpb24sIHVuZm9ydHVuYXRlbHkgb24gb3RoZXIgc3VidHlwZXMgdGhlc2UgYXJlIG1vcmUKLSAqIHNjYXR0ZXJlZCwgc28gd2UganVzdCBsZWF2ZSBpdCB1bnJvbGxlZCBmb3Igc2ltcGxpY2l0eS4KLSAqLwotI2RlZmluZSBTQVIJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDAsIFNIX0RNQUNfQkFTRSArIDB4MTAsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDIwLCBTSF9ETUFDX0JBU0UgKyAweDMwLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1MCwgU0hfRE1BQ19CQVNFICsgMHg2MH0pCi0jZGVmaW5lIERBUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwNCwgU0hfRE1BQ19CQVNFICsgMHgxNCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjQsIFNIX0RNQUNfQkFTRSArIDB4MzQsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDU0LCBTSF9ETUFDX0JBU0UgKyAweDY0fSkKLSNkZWZpbmUgRE1BVENSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDA4LCBTSF9ETUFDX0JBU0UgKyAweDE4LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyOCwgU0hfRE1BQ19CQVNFICsgMHgzOCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NTgsIFNIX0RNQUNfQkFTRSArIDB4Njh9KQotI2RlZmluZSBDSENSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDBjLCBTSF9ETUFDX0JBU0UgKyAweDFjLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyYywgU0hfRE1BQ19CQVNFICsgMHgzYywgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NWMsIFNIX0RNQUNfQkFTRSArIDB4NmN9KQotCi0jZGVmaW5lIERNQU9SCShTSF9ETUFDX0JBU0UgKyAweDQwKQotCi0jZW5kaWYgLyogX19ETUFfU0hfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCmluZGV4IDA3OGRjNDQuLjc3M2Q1NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCkBAIC0xMjcsOCArMTI3LDggQEAKIAlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lMU1IwKTsKIAlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDEsIFNINF9QQ0lMU1IxKTsKIAkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCXdvcmQgPSAoQ09ORklHX01FTU9SWV9TSVpFID4gMHgwODAwMDAwMCkgPyAweDEwMDAwMDAwIDogMHgwODAwMDAwMDsKLQlwY2lfd3JpdGVfcmVnKHdvcmQgfCAweGEwMDAwMDAwLCBTSDRfUENJTEFSMCk7CisJd29yZCA9IENPTkZJR19NRU1PUllfU1RBUlQgfCAoQ09ORklHX01FTU9SWV9TSVpFIC0gMHgwMTAwMDAwMCk7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTEFSMCk7CiAJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDc3ODBfUENJTUJBUjApOwogCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAxIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCiAJcGNpX3dyaXRlX3JlZygweDAwMDAwMDAwLCBTSDRfUENJTEFSMSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaAppbmRleCAzNjczNmM3Li44MGQ0MDgxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKQEAgLTMxLDcgKzMxLDcgQEAKIC8qIFJldHVybnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBQblNFRyAobj0xLDIpIGFkZHJlc3MgICAqLwogI2RlZmluZSBQSFlTQUREUihhKQkoKCh1bnNpZ25lZCBsb25nKShhKSkgJiAweDFmZmZmZmZmKQogCi0jaWZkZWYgQ09ORklHXzI5QklUCisjaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKIC8qCiAgKiBNYXAgYW4gYWRkcmVzcyB0byBhIGNlcnRhaW4gcHJpdmlsZWdlZCBzZWdtZW50CiAgKi8KQEAgLTQzLDcgKzQzLDcgQEAKIAkoKF9fdHlwZW9mX18oYSkpKCgodW5zaWduZWQgbG9uZykoYSkgJiAweDFmZmZmZmZmKSB8IFAzU0VHKSkKICNkZWZpbmUgUDRTRUdBRERSKGEpCVwKIAkoKF9fdHlwZW9mX18oYSkpKCgodW5zaWduZWQgbG9uZykoYSkgJiAweDFmZmZmZmZmKSB8IFA0U0VHKSkKLSNlbmRpZiAvKiAyOUJJVCAqLworI2VuZGlmIC8qIDI5QklUIHx8IFBNQl9GSVhFRCAqLwogI2VuZGlmIC8qIFAxU0VHICovCiAKIC8qIENoZWNrIGlmIGFuIGFkZHJlc3MgY2FuIGJlIHJlYWNoZWQgaW4gMjkgYml0cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtaXJxLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaAppbmRleCA3NGY3OTQzLi5hMGIzNDgwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaApAQCAtMTEsNyArMTEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiArPSBpOworCXYtPmNvdW50ZXIgKz0gaTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTIwLDcgKzIwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgLT0gaTsKKwl2LT5jb3VudGVyIC09IGk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yOSw5ICsyOSw5IEBACiAJdW5zaWduZWQgbG9uZyB0ZW1wLCBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0ZW1wID0gKihsb25nICopdjsKKwl0ZW1wID0gdi0+Y291bnRlcjsKIAl0ZW1wICs9IGk7Ci0JKihsb25nICopdiA9IHRlbXA7CisJdi0+Y291bnRlciA9IHRlbXA7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHRlbXA7CkBAIC00Miw5ICs0Miw5IEBACiAJdW5zaWduZWQgbG9uZyB0ZW1wLCBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0ZW1wID0gKihsb25nICopdjsKKwl0ZW1wID0gdi0+Y291bnRlcjsKIAl0ZW1wIC09IGk7Ci0JKihsb25nICopdiA9IHRlbXA7CisJdi0+Y291bnRlciA9IHRlbXA7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHRlbXA7CkBAIC01NSw3ICs1NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2ICY9IH5tYXNrOworCXYtPmNvdW50ZXIgJj0gfm1hc2s7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC02NCw3ICs2NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2IHw9IG1hc2s7CisJdi0+Y291bnRlciB8PSBtYXNrOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCmluZGV4IDFkMmZjMGIuLmQ4MzI4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fQVNNX1NIX0JJVE9QU19MTFNDX0gKICNkZWZpbmUgX19BU01fU0hfQklUT1BTX0xMU0NfSAogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC0xMywxNiArMTMsMTYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCiAJCSJtb3ZsaS5sCUAlMSwgJTAJISBzZXRfYml0CQlcblx0IgotCQkib3IJCSUzLCAlMAkJCQlcblx0IgorCQkib3IJCSUyLCAlMAkJCQlcblx0IgogCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogIj0meiIgKHRtcCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC0zNCwxNiArMzQsMTYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCiAJCSJtb3ZsaS5sCUAlMSwgJTAJISBjbGVhcl9iaXQJCVxuXHQiCi0JCSJhbmQJCSUzLCAlMAkJCQlcblx0IgorCQkiYW5kCQklMiwgJTAJCQkJXG5cdCIKIAkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpCi0JCTogIjEiIChhKSwgInIiICh+bWFzaykKKwkJOiAiPSZ6IiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAofm1hc2spCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7CiAJaW50CW1hc2s7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTU1LDg2ICs1NSw4NiBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKIAkJIm1vdmxpLmwJQCUxLCAlMAkhIGNoYW5nZV9iaXQJCVxuXHQiCisJCSJ4b3IJCSUyLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKKwkJIm9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSUzLCAlMQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB0ZXN0X2FuZF9jbGVhcl9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCisJCSJhbmQJCSU0LCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTMsICUxCQkJCVxuXHQiCisJCSJzeW5jbwkJCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgdGVzdF9hbmRfY2hhbmdlX2JpdAlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKIAkJInhvcgkJJTMsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKQotCQk6ICJ0IiwgIm1lbW9yeSIKLQkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCi17Ci0JaW50CW1hc2ssIHJldHZhbDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYSArPSBuciA+PiA1OwotCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJIm9yCQklNCwgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgotCQkiYmYJCTFiCQkJCVxuXHQiCi0JCSJhbmQJCSU0LCAlMgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCi0JCTogInQiLCAibWVtb3J5IgotCSk7Ci0KLQlyZXR1cm4gcmV0dmFsICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQotewotCWludAltYXNrLCByZXR2YWw7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWEgKz0gbnIgPj4gNTsKLQltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgotCQkibW92CQklMCwgJTIJCQkJXG5cdCIKLQkJImFuZAkJJTUsICUwCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKLQkJImJmCQkxYgkJCQlcblx0IgotCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKKwkJImFuZAkJJTMsICUxCQkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAoYSksICJyIiAobWFzayksICJyIiAofm1hc2spCi0JCTogInQiLCAibWVtb3J5IgotCSk7Ci0KLQlyZXR1cm4gcmV0dmFsICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLQlpbnQJbWFzaywgcmV0dmFsOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlhICs9IG5yID4+IDU7Ci0JbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9jaGFuZ2VfYml0CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkieG9yCQklNCwgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgotCQkiYmYJCTFiCQkJCVxuXHQiCi0JCSJhbmQJCSU0LCAlMgkJCQlcblx0IgotCQkic3luY28JCQkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChhKSwgInIiIChtYXNrKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKaW5kZXggZjljODg1OC4uMmY2Yzk2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaApAQCAtMTUsNiArMTUsNyBAQAogCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICpjbGspOwogCXZvaWQgKCpyZWNhbGMpKHN0cnVjdCBjbGsgKmNsayk7CiAJaW50ICgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLCBpbnQgYWxnb19pZCk7CisJaW50ICgqc2V0X3BhcmVudCkoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpOwogCWxvbmcgKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaAppbmRleCBhZWUzYmYyLi4wZmFjM2RhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKQEAgLTgsMTQgKzgsMTQgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191MzIJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJXG5cdCIKLQkJIm1vdgkJJTQsICUwCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB4Y2hnX3UzMglcblx0IgorCQkibW92CQklMCwgJTEJCQlcblx0IgorCQkibW92CQklMywgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJXG5cdCIKIAkJImJmCQkxYgkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJXG5cdCIKLQkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKG0pLCAiciIgKHZhbCkKKwkJOiAiPSZ6Iih0bXApLCAiPSZyIiAocmV0dmFsKQorCQk6ICJyIiAobSksICJyIiAodmFsKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCkBAIC0yOSwxNCArMjksMTQgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191OAlcblx0IgotCQkibW92CQklMCwgJTIJCQlcblx0IgotCQkibW92CQklNCwgJTAJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHhjaGdfdTgJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJXG5cdCIKKwkJIm1vdgkJJTMsICUwCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCVxuXHQiCiAJCSJiZgkJMWIJCQlcblx0IgogCQkic3luY28JCQkJCVxuXHQiCi0JCTogIj0meiIodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChtKSwgInIiICh2YWwgJiAweGZmKQorCQk6ICI9JnoiKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChtKSwgInIiICh2YWwgJiAweGZmKQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCkBAIC01MSwxNyArNTEsMTcgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIF9fY21weGNoZ191MzIJCVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkiY21wL2VxCQklMiwgJTQJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIF9fY21weGNoZ191MzIJCVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgorCQkiY21wL2VxCQklMSwgJTMJCQkJXG5cdCIKIAkJImJmCQkyZgkJCQlcblx0IgotCQkibW92CQklNSwgJTAJCQkJXG5cdCIKKwkJIm1vdgkJJTMsICUwCQkJCVxuXHQiCiAJCSIyOgkJCQkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKG0pLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAobSksICJyIiAob2xkKSwgInIiIChuZXcpCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChtKSwgInIiIChvbGQpLCAiciIgKG5ldykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKaW5kZXggODYzMDhhYS4uNjk0YWJlNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCkBAIC0yMSw1ICsyMSw2IEBACiAjZGVmaW5lIENQVV9IQVNfTExTQwkJMHgwMDQwCS8qIG1vdmxpLmwvbW92Y28ubCAqLwogI2RlZmluZSBDUFVfSEFTX0wyX0NBQ0hFCTB4MDA4MAkvKiBTZWNvbmRhcnkgY2FjaGUgLyBVUkFNICovCiAjZGVmaW5lIENQVV9IQVNfT1AzMgkJMHgwMTAwCS8qIDMyLWJpdCBpbnN0cnVjdGlvbiBzdXBwb3J0ICovCisjZGVmaW5lIENQVV9IQVNfUFRFQUVYCQkweDAyMDAJLyogUFRFIEFTSUQgRXh0ZW5zaW9uIHN1cHBvcnQgKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzhmOGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIGFyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFRha2FzaGkgWU9TSElJCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0RNQV9TSF9ICisjZGVmaW5lIF9fRE1BX1NIX0gKKworI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxjcHUvZG1hLmg+CisKKy8qIERNQU9SIGNvbnRvcmw6IFRoZSBETUFPUiBhY2Nlc3Mgc2l6ZSBpcyBkaWZmZXJlbnQgYnkgQ1BVLiovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQl8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQl8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorI2RlZmluZSBkbWFvcl9yZWFkX3JlZyhuKSBcCisgICAgKG4gPyBjdHJsX2ludyhTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKKwk6IGN0cmxfaW53KFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCisjZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhuLCBkYXRhKSBcCisgICAgKG4gPyBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCisgICAgOiBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyNlbHNlIC8qIE90aGVyIENQVSAqLworI2RlZmluZSBkbWFvcl9yZWFkX3JlZyhuKSBjdHJsX2ludyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpCisjZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhuLCBkYXRhKSBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZG10ZV9pcnFfbWFwW10gX19tYXliZV91bnVzZWQgPSB7CisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNCkKKyAgICBETVRFMF9JUlEsCisgICAgRE1URTBfSVJRICsgMSwKKyAgICBETVRFMF9JUlEgKyAyLAorICAgIERNVEUwX0lSUSArIDMsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA2KQorICAgIERNVEU0X0lSUSwKKyAgICBETVRFNF9JUlEgKyAxLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gOCkKKyAgICBETVRFNl9JUlEsCisgICAgRE1URTZfSVJRICsgMSwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDEyKQorICAgIERNVEU4X0lSUSwKKyAgICBETVRFOV9JUlEsCisgICAgRE1URTEwX0lSUSwKKyAgICBETVRFMTFfSVJRLAorI2VuZGlmCit9OworCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCisjZGVmaW5lIFJFUV9MCTB4MDAwMDAwMDAKKyNkZWZpbmUgUkVRX0UJMHgwMDA4MDAwMAorI2RlZmluZSBSQUNLX0gJMHgwMDAwMDAwMAorI2RlZmluZSBSQUNLX0wJMHgwMDA0MDAwMAorI2RlZmluZSBBQ0tfUgkweDAwMDAwMDAwCisjZGVmaW5lIEFDS19XCTB4MDAwMjAwMDAKKyNkZWZpbmUgQUNLX0gJMHgwMDAwMDAwMAorI2RlZmluZSBBQ0tfTAkweDAwMDEwMDAwCisjZGVmaW5lIERNX0lOQwkweDAwMDA0MDAwCisjZGVmaW5lIERNX0RFQwkweDAwMDA4MDAwCisjZGVmaW5lIFNNX0lOQwkweDAwMDAxMDAwCisjZGVmaW5lIFNNX0RFQwkweDAwMDAyMDAwCisjZGVmaW5lIFJTX0lOCTB4MDAwMDAyMDAKKyNkZWZpbmUgUlNfT1VUCTB4MDAwMDAzMDAKKyNkZWZpbmUgVFNfQkxLCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1fQlVSCTB4MDAwMDAwMjAKKyNkZWZpbmUgQ0hDUl9ERSAweDAwMDAwMDAxCisjZGVmaW5lIENIQ1JfVEUgMHgwMDAwMDAwMgorI2RlZmluZSBDSENSX0lFIDB4MDAwMDAwMDQKKworLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAorI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKKyNkZWZpbmUgRE1BT1JfRE1FCTB4MDAwMDAwMDEKKworLyoKKyAqIERlZmluZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkdWFsIGFkZHJlc3MgbWVtb3J5LW1lbW9yeSB0cmFuc2Zlci4KKyAqIFRoZSAweDQwMCB2YWx1ZSByZXByZXNlbnRzIGF1dG8tcmVxdWVzdCwgZXh0ZXJuYWwtPmV4dGVybmFsLgorICovCisjZGVmaW5lIFJTX0RVQUwJKERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgVFNfMzIpCisKKy8qIERNQSBiYXNlIGFkZHJlc3MgKi8KK3N0YXRpYyB1MzIgZG1hX2Jhc2VfYWRkcltdIF9fbWF5YmVfdW51c2VkID0geworI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDQpCisJU0hfRE1BQ19CQVNFMCArIDB4MDAsCS8qIGNoYW5uZWwgMCAqLworCVNIX0RNQUNfQkFTRTAgKyAweDEwLAorCVNIX0RNQUNfQkFTRTAgKyAweDIwLAorCVNIX0RNQUNfQkFTRTAgKyAweDMwLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNikKKwlTSF9ETUFDX0JBU0UwICsgMHg1MCwKKwlTSF9ETUFDX0JBU0UwICsgMHg2MCwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDgpCisJU0hfRE1BQ19CQVNFMSArIDB4MDAsCisJU0hfRE1BQ19CQVNFMSArIDB4MTAsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSAxMikKKwlTSF9ETUFDX0JBU0UxICsgMHgyMCwKKwlTSF9ETUFDX0JBU0UxICsgMHgzMCwKKwlTSF9ETUFDX0JBU0UxICsgMHg1MCwKKwlTSF9ETUFDX0JBU0UxICsgMHg2MCwgLyogY2hhbm5lbCAxMSAqLworI2VuZGlmCit9OworCisvKiBETUEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FSICAgICAweDAwCisjZGVmaW5lIERBUiAgICAgMHgwNAorI2RlZmluZSBUQ1IgICAgIDB4MDgKKyNkZWZpbmUgQ0hDUiAgICAweDBDCisjZGVmaW5lIERNQU9SCTB4NDAKKworI2VuZGlmIC8qIF9fRE1BX1NIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IGJlY2E3MTIuLjZiZDE3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMjUsOSArMjUsOSBAQAogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCsweDEwMDAwMDAwKQogCiAjaWZkZWYgQ09ORklHX05SX0RNQV9DSEFOTkVMUwotIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJKENPTkZJR19OUl9ETUFfQ0hBTk5FTFMpCisjICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAgIChDT05GSUdfTlJfRE1BX0NIQU5ORUxTKQogI2Vsc2UKLSMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTCShDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUykKKyMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTICAgKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUwppbmRleCAyZGFiMGI4Li4zYTQ3NTJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMKQEAgLTMxLDMgKzMxLDggQEAKICNlbmRpZgkKIAkuZW5kbQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMkEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjIGRlZmluZSBQUkVGKHgpCXByZWYJQHgKKyNlbHNlCisjIGRlZmluZSBQUkVGKHgpCW5vcAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCmluZGV4IDkwNjczNjUuLjYxZjkzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0xOSw4ICsxOSw0MiBAQAogI2luY2x1ZGUgPGNwdS9ncGlvLmg+CiAjZW5kaWYKIAorI2RlZmluZSBBUkNIX05SX0dQSU9TIDUxMgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2lmZGVmIENPTkZJR19HUElPTElCCisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJX19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fY2Fuc2xlZXAodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2NhbnNsZWVwKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQoreworCVdBUk5fT04oMSk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2VuZGlmIC8qIENPTkZJR19HUElPTElCICovCisKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGlubXV4X2VudW1fdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBwaW5tdXhfZmxhZ190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwaW5tdXhfZmxhZ190OwogCiAjZGVmaW5lIFBJTk1VWF9UWVBFX05PTkUgICAgICAgICAgICAwCiAjZGVmaW5lIFBJTk1VWF9UWVBFX0ZVTkNUSU9OICAgICAgICAxCkBAIC0zNCw2ICs2OCwxMSBAQAogI2RlZmluZSBQSU5NVVhfRkxBR19XQU5UX1BVTExVUCAgICAgKDEgPDwgMykKICNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMRE9XTiAgICgxIDw8IDQpCiAKKyNkZWZpbmUgUElOTVVYX0ZMQUdfREJJVF9TSElGVCAgICAgIDUKKyNkZWZpbmUgUElOTVVYX0ZMQUdfREJJVCAgICAgICAgICAgICgweDFmIDw8IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQpCisjZGVmaW5lIFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQgICAgICAxMAorI2RlZmluZSBQSU5NVVhfRkxBR19EUkVHICAgICAgICAgICAgKDB4M2YgPDwgUElOTVVYX0ZMQUdfRFJFR19TSElGVCkKKwogc3RydWN0IHBpbm11eF9ncGlvIHsKIAlwaW5tdXhfZW51bV90IGVudW1faWQ7CiAJcGlubXV4X2ZsYWdfdCBmbGFnczsKQEAgLTU0LDcgKzkzLDcgQEAKIAkuZW51bV9pZHMgPSAocGlubXV4X2VudW1fdCBbKHJfd2lkdGggLyBmX3dpZHRoKSAqICgxIDw8IGZfd2lkdGgpXSkgXAogCiBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHsKLQl1bnNpZ25lZCBsb25nIHJlZywgcmVnX3dpZHRoOworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIHJlZ19zaGFkb3c7CiAJcGlubXV4X2VudW1fdCAqZW51bV9pZHM7CiB9OwogCkBAIC04OSwzNCArMTI4LDkgQEAKIAl1bnNpZ25lZCBpbnQgZ3Bpb19kYXRhX3NpemU7CiAKIAl1bnNpZ25lZCBsb25nICpncGlvX2luX3VzZTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CiB9OwogCiBpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKTsKIAotaW50IF9fZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8pOwotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXJldHVybiBfX2dwaW9fcmVxdWVzdChncGlvKTsKLX0KLXZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOwotaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwotaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotCi0vKiBJUlEgbW9kZXMgYXJlIHVuc3Bwb3J0ZWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JV0FSTl9PTigxKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQotewotCVdBUk5fT04oMSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+Ci0KICNlbmRpZiAvKiBfX0FTTV9TSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaGQ2NDQ2MS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmgKaW5kZXggOGMxMzUzYi4uNTJiNGI2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmgKQEAgLTI0Miw3ICsyNDIsNiBAQAogI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CiAKIC8qIGFyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9zZXR1cC5jICovCi1pbnQgaGQ2NDQ2MV9pcnFfZGVtdXgoaW50IGlycSk7CiB2b2lkIGhkNjQ0NjFfcmVnaXN0ZXJfaXJxX2RlbXV4KGludCBpcnEsCiAJCQkJaW50ICgqZGVtdXgpIChpbnQgaXJxLCB2b2lkICpkZXYpLCB2b2lkICpkZXYpOwogdm9pZCBoZDY0NDYxX3VucmVnaXN0ZXJfaXJxX2RlbXV4KGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDYxZjZkYWUuLjA0NTRmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTIzOCw3ICsyMzgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgogX19pb3JlbWFwX21vZGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgzMikgJiYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKIAl1bnNpZ25lZCBsb25nIGxhc3RfYWRkciA9IG9mZnNldCArIHNpemUgLSAxOwogI2VuZGlmCiAJdm9pZCBfX2lvbWVtICpyZXQ7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCisjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJLyoKIAkgKiBGb3IgUDEgYW5kIFAyIHNwYWNlIHRoaXMgaXMgdHJpdmlhbCwgYXMgZXZlcnl0aGluZyBpcyBhbHJlYWR5CiAJICogbWFwcGVkLiBVbmNhY2hlZCBhY2Nlc3MgZm9yIFAxIGFkZHJlc3NlcyBhcmUgZG9uZSB0aHJvdWdoIFAyLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9rcHJvYmVzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCA2MDc4ZDhlLi42MTM2NDRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMTYsNyArMTYsNyBAQAogCT8gKE1BWF9TVEFDS19TSVpFKSBcCiAJOiAoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKyBUSFJFQURfU0laRSAtIChBRERSKSkpCiAKLSNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykJCSgocmVncyktPnJlZ3NbMF0pCisjZGVmaW5lIHJlZ3NfcmV0dXJuX3ZhbHVlKF9yZWdzKQkJKChfcmVncyktPnJlZ3NbMF0pCiAjZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemUJMAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggNWQ5MTU3Yi4uMmE5YzU1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTksMTMgKzE5LDE4IEBACiAgKiAgICAoYSkgVExCIGNhY2hlIHZlcnNpb24gKG9yIHJvdW5kLCBjeWNsZSB3aGF0ZXZlciBleHByZXNzaW9uIHlvdSBsaWtlKQogICogICAgKGIpIEFTSUQgKEFkZHJlc3MgU3BhY2UgSURlbnRpZmllcikKICAqLworI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUFFWAorI2RlZmluZSBNTVVfQ09OVEVYVF9BU0lEX01BU0sJCTB4MDAwMGZmZmYKKyNlbHNlCiAjZGVmaW5lIE1NVV9DT05URVhUX0FTSURfTUFTSwkJMHgwMDAwMDBmZgotI2RlZmluZSBNTVVfQ09OVEVYVF9WRVJTSU9OX01BU0sJMHhmZmZmZmYwMAotI2RlZmluZSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCTB4MDAwMDAxMDAKLSNkZWZpbmUgTk9fQ09OVEVYVAkJCTBVTAorI2VuZGlmCiAKLS8qIEFTSUQgaXMgOC1iaXQgdmFsdWUsIHNvIGl0IGNhbid0IGJlIDB4MTAwICovCi0jZGVmaW5lIE1NVV9OT19BU0lECQkJMHgxMDAKKyNkZWZpbmUgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLCSh+MFVMICYgfk1NVV9DT05URVhUX0FTSURfTUFTSykKKyNkZWZpbmUgTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTgkoTU1VX0NPTlRFWFRfQVNJRF9NQVNLICsgMSkKKworLyogSW1wb3NzaWJsZSBBU0lEIHZhbHVlLCB0byBkaWZmZXJlbnRpYXRlIGZyb20gTk9fQ09OVEVYVC4gKi8KKyNkZWZpbmUgTU1VX05PX0FTSUQJCQlNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCisjZGVmaW5lIE5PX0NPTlRFWFQJCQkwVUwKIAogI2RlZmluZSBhc2lkX2NhY2hlKGNwdSkJCShjcHVfZGF0YVtjcHVdLmFzaWRfY2FjaGUpCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAppbmRleCBmNGY5YWViLi44ZWY4MDBjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCkBAIC0xMCw2ICsxMCwxNyBAQAogCS8qIERvIG5vdGhpbmcgKi8KIH0KIAorI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUFFWAorc3RhdGljIGlubGluZSB2b2lkIHNldF9hc2lkKHVuc2lnbmVkIGxvbmcgYXNpZCkKK3sKKwlfX3Jhd193cml0ZWwoYXNpZCwgTU1VX1BURUFFWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfYXNpZCh2b2lkKQoreworCXJldHVybiBfX3Jhd19yZWFkbChNTVVfUFRFQUVYKSAmIE1NVV9DT05URVhUX0FTSURfTUFTSzsKK30KKyNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FzaWQodW5zaWduZWQgbG9uZyBhc2lkKQogewogCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKQEAgLTMzLDYgKzQ0LDcgQEAKIAlhc2lkICY9IE1NVV9DT05URVhUX0FTSURfTUFTSzsKIAlyZXR1cm4gYXNpZDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0hBU19QVEVBRVggKi8KIAogLyogTU1VX1RUQiBpcyB1c2VkIGZvciBvcHRpbWl6aW5nIHRoZSBmYXVsdCBoYW5kbGluZy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfVFRCKHBnZF90ICpwZ2QpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDU4NzFkNzguLjljNmQyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMjksNyArMTI5LDEyIEBACiAgKiBpcyBub3QgdmlzaWJsZSAoaXQgaXMgcGFydCBvZiB0aGUgUE1CIG1hcHBpbmcpIGFuZCBzbyBuZWVkcyB0byBiZQogICogYWRkZWQgb3Igc3VidHJhY3RlZCBhcyByZXF1aXJlZC4KICAqLwotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmIGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKKy8qIHBoeXMgPSB2aXJ0IC0gUEFHRV9PRkZTRVQgLSAoX19NRU1PUllfU1RBUlQgJiAweGUwMDAwMDAwKSAqLworI2RlZmluZSBQTUJfT0ZGU0VUCShQQUdFX09GRlNFVCAtIFBYU0VHKF9fTUVNT1JZX1NUQVJUKSkKKyNkZWZpbmUgX19wYSh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUE1CX09GRlNFVCkKKyNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUE1CX09GRlNFVCkpCisjZWxpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKICNkZWZpbmUgX19wYSh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpLVBBR0VfT0ZGU0VUK19fTUVNT1JZX1NUQVJUKQogI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkrUEFHRV9PRkZTRVQtX19NRU1PUllfU1RBUlQpKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDFlZjRiMjQuLjFmZDU4YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMzEsNyArMzEsNyBAQAogCUNQVV9TSDc3NjAsIENQVV9TSDRfMjAyLCBDUFVfU0g0XzUwMSwKIAogCS8qIFNILTRBIHR5cGVzICovCi0JQ1BVX1NINzc2MywgQ1BVX1NINzc3MCwgQ1BVX1NINzc4MCwgQ1BVX1NINzc4MSwgQ1BVX1NINzc4NSwKKwlDUFVfU0g3NzYzLCBDUFVfU0g3NzcwLCBDUFVfU0g3NzgwLCBDUFVfU0g3NzgxLCBDUFVfU0g3Nzg1LCBDUFVfU0g3Nzg2LAogCUNQVV9TSDc3MjMsIENQVV9TSFgzLAogCiAJLyogU0g0QUwtRFNQIHR5cGVzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAppbmRleCBkNzkwNjNjLi5lZmRkNzhhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTEwOCwxMiArMTA4LDEyIEBACiAvKgogICogRG8gbmVjZXNzYXJ5IHNldHVwIHRvIHN0YXJ0IHVwIGEgbmV3bHkgZXhlY3V0ZWQgdGhyZWFkLgogICovCi0jZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKF9yZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKIAlzZXRfZnMoVVNFUl9EUyk7CQkJIFwKLQlyZWdzLT5wciA9IDA7CQkJCSBcCi0JcmVncy0+c3IgPSBTUl9GRDsJLyogVXNlciBtb2RlLiAqLyBcCi0JcmVncy0+cGMgPSBuZXdfcGM7CQkJIFwKLQlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcAorCV9yZWdzLT5wciA9IDA7CQkJCSBcCisJX3JlZ3MtPnNyID0gU1JfRkQ7CS8qIFVzZXIgbW9kZS4gKi8gXAorCV9yZWdzLT5wYyA9IG5ld19wYzsJCQkgXAorCV9yZWdzLT5yZWdzWzE1XSA9IG5ld19zcAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwogc3RydWN0IHRhc2tfc3RydWN0OwpAQCAtMTg5LDEwICsxODksOSBAQAogI2RlZmluZSBLU1RLX0VJUCh0c2spICAodGFza19wdF9yZWdzKHRzayktPnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAodGFza19wdF9yZWdzKHRzayktPnJlZ3NbMTVdKQogCi0jZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5yZWdzWzE1XSkKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKF9yZWdzKQkoKF9yZWdzKS0+cmVnc1sxNV0pCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMkEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCiAjZGVmaW5lIFBSRUZFVENIX1NUUklERQkJTDFfQ0FDSEVfQllURVMKICNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKICNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA4MDMxNzdmLi41NzI3ZDMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTE0NSwxMyArMTQ1LDEzIEBACiAgKi8KICNkZWZpbmUgU1JfVVNFUiAoU1JfTU1VIHwgU1JfRkQpCiAKLSNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wYywgbmV3X3NwKQkJCVwKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKF9yZWdzLCBuZXdfcGMsIG5ld19zcCkJCQlcCiAJc2V0X2ZzKFVTRVJfRFMpOwkJCQkJXAotCXJlZ3MtPnNyID0gU1JfVVNFUjsJLyogVXNlciBtb2RlLiAqLwkJXAotCXJlZ3MtPnBjID0gbmV3X3BjIC0gNDsJLyogQ29tcGVuc2F0ZSBzeXNjYWxsIGV4aXQgKi8JXAotCXJlZ3MtPnBjIHw9IDE7CQkvKiBTZXQgU0htZWRpYSAhICovCQlcCi0JcmVncy0+cmVnc1sxOF0gPSAwOwkJCQkJXAotCXJlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCisJX3JlZ3MtPnNyID0gU1JfVVNFUjsJLyogVXNlciBtb2RlLiAqLwkJXAorCV9yZWdzLT5wYyA9IG5ld19wYyAtIDQ7CS8qIENvbXBlbnNhdGUgc3lzY2FsbCBleGl0ICovCVwKKwlfcmVncy0+cGMgfD0gMTsJCS8qIFNldCBTSG1lZGlhICEgKi8JCVwKKwlfcmVncy0+cmVnc1sxOF0gPSAwOwkJCQkJXAorCV9yZWdzLT5yZWdzWzE1XSA9IG5ld19zcAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwogc3RydWN0IHRhc2tfc3RydWN0OwpAQCAtMjI2LDcgKzIyNiw3IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAotI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihfcmVncykJKChfcmVncyktPnJlZ3NbMTVdKQogCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19BU01fU0hfUFJPQ0VTU09SXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDEyOTEyYWIuLjgxYzY1NjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTIyLDE0ICsxMjIsMTIgQEAKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisJCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykpIC0gMSkKICNkZWZpbmUgdGFza19wdF9kc3ByZWdzKHRhc2spIFwKLQkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCi0JCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorCSgoc3RydWN0IHB0X2RzcHJlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCiAjZWxzZQogI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAotCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAppbmRleCA4ZjhmNGFkLi4wMWE0MDc2YTM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KIAorZXh0ZXJuIHZvaWQgX19ub3NhdmVfYmVnaW4sIF9fbm9zYXZlX2VuZDsKIGV4dGVybiBsb25nIF9fbWFjaHZlY19zdGFydCwgX19tYWNodmVjX2VuZDsKIGV4dGVybiBjaGFyIF9fdW5jYWNoZWRfc3RhcnQsIF9fdW5jYWNoZWRfZW5kOwogZXh0ZXJuIGNoYXIgX2Vic3NbXTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDZkNGJmNjUuLjM0NTY1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9fQVNNX1NIX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjk5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9BU01fU0hfU1VTUEVORF9ICisjZGVmaW5lIF9BU01fU0hfU1VTUEVORF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfc3VzcGVuZCh2b2lkKSB7IHJldHVybiAwOyB9CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0cnVjdCBzd3N1c3BfYXJjaF9yZWdzIHsKKwlzdHJ1Y3QgcHRfcmVncyB1c2VyX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBiYW5rMV9yZWdzWzhdOworfTsKKyNlbmRpZgorCisvKiBmbGFncyBwYXNzZWQgdG8gYXNzZW1ibHkgc3VzcGVuZCBjb2RlICovCisjZGVmaW5lIFNVU1BfU0hfU0xFRVAJCSgxIDw8IDApIC8qIFJlZ3VsYXIgc2xlZXAgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1NUQU5EQlkJCSgxIDw8IDEpIC8qIFNILU1vYmlsZSBTb2Z0d2FyZSBzdGFuZGJ5IG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9SU1RBTkRCWQkoMSA8PCAyKSAvKiBTSC1Nb2JpbGUgUi1zdGFuZGJ5IG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9VU1RBTkRCWQkoMSA8PCAzKSAvKiBTSC1Nb2JpbGUgVS1zdGFuZGJ5IG1vZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9TRgkJKDEgPDwgNCkgLyogRW5hYmxlIHNlbGYtcmVmcmVzaCAqLworCisjZW5kaWYgLyogX0FTTV9TSF9TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaAppbmRleCBhN2NhM2ExLi40YzNiNjZlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXIuaApAQCAtOSw3ICs5LDYgQEAKIAlpbnQgKCppbml0KSh2b2lkKTsKIAlpbnQgKCpzdGFydCkodm9pZCk7CiAJaW50ICgqc3RvcCkodm9pZCk7Ci0JY3ljbGVfdCAoKnJlYWQpKHZvaWQpOwogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiAJdW5zaWduZWQgbG9uZyAoKmdldF9vZmZzZXQpKHZvaWQpOwogI2VuZGlmCkBAIC0zOSw2ICszOCw3IEBACiAKIC8qIGFyY2gvc2gva2VybmVsL3RpbWUuYyAqLwogdm9pZCBoYW5kbGVfdGltZXJfdGljayh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNoX2hwdF9mcmVxdWVuY3k7CisKK2V4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2Vfc2g7CiAKICNlbmRpZiAvKiBfX0FTTV9TSF9USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAppbmRleCA4OGZmMWFlLi45YzE2ZjczIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTYsMjIgKzYsMTA2IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKLSNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkgXAotCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpCi0KLSNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCVwKLQlmbHVzaF90bGJfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCkKLQotI2RlZmluZSBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyZXNzKQlkbyB7IH0gd2hpbGUgKDApCisjaWZkZWYgQ09ORklHX01NVQorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIC8qCi0gKiBGbHVzaCB3aG9sZSBUTEJzIGZvciBNTQorICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKKyAqIHRhYmxlcywgYW5kIGVmZmljaWVudGx5IGhhbmRsZSB0aGUgVExCIGlzc3Vlcy4KICAqLwotI2RlZmluZSB0bGJfZmx1c2godGxiKQkJCQlmbHVzaF90bGJfbW0oKHRsYiktPm1tKQorc3RydWN0IG1tdV9nYXRoZXIgeworCXN0cnVjdCBtbV9zdHJ1Y3QJKm1tOworCXVuc2lnbmVkIGludAkJZnVsbG1tOworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0LCBlbmQ7Cit9OwogCi0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3RsYl9nYXRoZXIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGItPnN0YXJ0ID0gVEFTS19TSVpFOworCXRsYi0+ZW5kID0gMDsKKworCWlmICh0bGItPmZ1bGxtbSkgeworCQl0bGItPnN0YXJ0ID0gMDsKKwkJdGxiLT5lbmQgPSBUQVNLX1NJWkU7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbXVfZ2F0aGVyICoKK3RsYl9nYXRoZXJfbW11KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgZnVsbF9tbV9mbHVzaCkKK3sKKwlzdHJ1Y3QgbW11X2dhdGhlciAqdGxiID0gJmdldF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKKworCXRsYi0+bW0gPSBtbTsKKwl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisKKwlpbml0X3RsYl9nYXRoZXIodGxiKTsKKworCXJldHVybiB0bGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX2ZpbmlzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHRsYi0+ZnVsbG1tKQorCQlmbHVzaF90bGJfbW0odGxiLT5tbSk7CisKKwkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KKwljaGVja19wZ3RfY2FjaGUoKTsKKworCXB1dF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0bGJfcmVtb3ZlX3RsYl9lbnRyeShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCWlmICh0bGItPnN0YXJ0ID4gYWRkcmVzcykKKwkJdGxiLT5zdGFydCA9IGFkZHJlc3M7CisJaWYgKHRsYi0+ZW5kIDwgYWRkcmVzcyArIFBBR0VfU0laRSkKKwkJdGxiLT5lbmQgPSBhZGRyZXNzICsgUEFHRV9TSVpFOworfQorCisvKgorICogSW4gdGhlIGNhc2Ugb2YgdGxiIHZtYSBoYW5kbGluZywgd2UgY2FuIG9wdGltaXNlIHRoZXNlIGF3YXkgaW4gdGhlCisgKiBjYXNlIHdoZXJlIHdlJ3JlIGRvaW5nIGEgZnVsbCBNTSBmbHVzaC4gIFdoZW4gd2UncmUgZG9pbmcgYSBtdW5tYXAsCisgKiB0aGUgdm1hcyBhcmUgYWRqdXN0ZWQgdG8gb25seSBjb3ZlciB0aGUgcmVnaW9uIHRvIGJlIHRvcm4gZG93bi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0bGJfc3RhcnRfdm1hKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmICghdGxiLT5mdWxsbW0pCisJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9lbmRfdm1hKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmICghdGxiLT5mdWxsbW0gJiYgdGxiLT5lbmQpIHsKKwkJZmx1c2hfdGxiX3JhbmdlKHZtYSwgdGxiLT5zdGFydCwgdGxiLT5lbmQpOworCQlpbml0X3RsYl9nYXRoZXIodGxiKTsKKwl9Cit9CisKKyNkZWZpbmUgdGxiX3JlbW92ZV9wYWdlKHRsYixwYWdlKQlmcmVlX3BhZ2VfYW5kX3N3YXBfY2FjaGUocGFnZSkKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCkJCXB0ZV9mcmVlKCh0bGIpLT5tbSwgcHRlcCkKKyNkZWZpbmUgcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCkJCXBtZF9mcmVlKCh0bGIpLT5tbSwgcG1kcCkKKyNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYiwgcHVkcCkJCXB1ZF9mcmVlKCh0bGIpLT5tbSwgcHVkcCkKKworI2RlZmluZSB0bGJfbWlncmF0ZV9maW5pc2gobW0pCQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbHNlIC8qIENPTkZJR19NTVUgKi8KKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikJCQkJCWRvIHsgfSB3aGlsZSAoMCkKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgogCisjZW5kaWYgLyogQ09ORklHX01NVSAqLwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1RMQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKaW5kZXggNjgxM2MzMi4uMGVhMTVmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaApAQCAtMSwyMiArMSwxNyBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0gzX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDNfRE1BX0gKIAotCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhhNDAxMDAyMAotI2Vsc2UKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4YTQwMDAwMjAKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIpCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhhNDAxMDAyMAorI2Vsc2UgLyogU0g3NzA1LzA2LzA3LzA5ICovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhhNDAwMDAyMAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKICNkZWZpbmUgRE1URTBfSVJRCTQ4Ci0jZGVmaW5lIERNVEUxX0lSUQk0OQotI2RlZmluZSBETVRFMl9JUlEJNTAKLSNkZWZpbmUgRE1URTNfSVJRCTUxCiAjZGVmaW5lIERNVEU0X0lSUQk3NgotI2RlZmluZSBETVRFNV9JUlEJNzcKLSNlbmRpZgogCiAvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCiAjZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDAwMjAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkNTE3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKKyNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzczMCkKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CisjZGVmaW5lIERNVEU0X0lSUQk3NgorI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkUwMDkwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2NCkKKyNkZWZpbmUgRE1URTBfSVJRCTM0CisjZGVmaW5lIERNVEU0X0lSUQk0NAorI2RlZmluZSBETUFFMF9JUlEJMzgKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZGNjA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRjYwOTAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQorI2RlZmluZSBETVRFMF9JUlEJNDgJLyogRE1BQzBBKi8KKyNkZWZpbmUgRE1URTRfSVJRCTQwCS8qIERNQUMwQiAqLworI2RlZmluZSBETVRFNl9JUlEJNDIKKyNkZWZpbmUgRE1URThfSVJRCTc2CS8qIERNQUMxQSAqLworI2RlZmluZSBETVRFOV9JUlEJNzcKKyNkZWZpbmUgRE1URTEwX0lSUQk3MgkvKiBETUFDMUIgKi8KKyNkZWZpbmUgRE1URTExX0lSUQk3MworI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIERNQUUxX0lSUQk3NAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkRDMDkwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKKyNkZWZpbmUgRE1URTBfSVJRCTM0CisjZGVmaW5lIERNVEU0X0lSUQk0NAorI2RlZmluZSBETVRFNl9JUlEJNDYKKyNkZWZpbmUgRE1URThfSVJRCTkyCisjZGVmaW5lIERNVEU5X0lSUQk5MworI2RlZmluZSBETVRFMTBfSVJRCTk0CisjZGVmaW5lIERNVEUxMV9JUlEJOTUKKyNkZWZpbmUgRE1BRTBfSVJRCTM4CS8qIERNQSBFcnJvciBJUlEgKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQzgxODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkM4MDkwMDAKKyNlbHNlIC8qIFNINzc4NSAqLworI2RlZmluZSBETVRFMF9JUlEJMzMKKyNkZWZpbmUgRE1URTRfSVJRCTM3CisjZGVmaW5lIERNVEU2X0lSUQk1MgorI2RlZmluZSBETVRFOF9JUlEJNTQKKyNkZWZpbmUgRE1URTlfSVJRCTU1CisjZGVmaW5lIERNVEUxMF9JUlEJNTYKKyNkZWZpbmUgRE1URTExX0lSUQk1NworI2RlZmluZSBETUFFMF9JUlEJMzkJLyogRE1BIEVycm9yIElSUTAgKi8KKyNkZWZpbmUgRE1BRTFfSVJRCTU4CS8qIERNQSBFcnJvciBJUlExICovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkNDMDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZW5kaWYKKworI2RlZmluZSBSRVFfSEUJMHgwMDAwMDBDMAorI2RlZmluZSBSRVFfSAkweDAwMDAwMDgwCisjZGVmaW5lIFJFUV9MRQkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDAyMAorI2RlZmluZSBUU184CTB4MDAwMDAwMDAKKyNkZWZpbmUgVFNfMTYJMHgwMDAwMDAwOAorI2RlZmluZSBUU18zMgkweDAwMDAwMDEwCisjZGVmaW5lIFRTXzE2QkxLCTB4MDAwMDAwMTgKKyNkZWZpbmUgVFNfMzJCTEsJMHgwMDEwMDAwMAorCisvKgorICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKKyAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgorICoKKyAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCisgKi8KK2VudW0geworCVhNSVRfU1pfOEJJVCwKKwlYTUlUX1NaXzE2QklULAorCVhNSVRfU1pfMzJCSVQsCisJWE1JVF9TWl8xMjhCSVQsCisJWE1JVF9TWl8yNTZCSVQsCit9OworCisvKgorICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKKwlbWE1JVF9TWl84QklUXQkJPSAwLAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNzc4MC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDc3ODAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiNDI2YS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNzc4MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAotI2RlZmluZSBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAotCi0jZGVmaW5lIFJFUV9IRQkweDAwMDAwMEMwCi0jZGVmaW5lIFJFUV9ICTB4MDAwMDAwODAKLSNkZWZpbmUgUkVRX0xFCTB4MDAwMDAwNDAKLSNkZWZpbmUgVE1fQlVSU1QgMHgwMDAwMDIwCi0jZGVmaW5lIFRTXzgJMHgwMDAwMDAwMAotI2RlZmluZSBUU18xNgkweDAwMDAwMDA4Ci0jZGVmaW5lIFRTXzMyCTB4MDAwMDAwMTAKLSNkZWZpbmUgVFNfMTZCTEsJMHgwMDAwMDAxOAotI2RlZmluZSBUU18zMkJMSwkweDAwMTAwMDAwCi0KLS8qCi0gKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAotICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCi0gKgotICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KLSAqLwotZW51bSB7Ci0JWE1JVF9TWl84QklULAotCVhNSVRfU1pfMTZCSVQsCi0JWE1JVF9TWl8zMkJJVCwKLQlYTUlUX1NaXzEyOEJJVCwKLQlYTUlUX1NaXzI1NkJJVCwKLX07Ci0KLS8qCi0gKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCi0JW1hNSVRfU1pfMjU2QklUXQk9IDUsCi19OwotCi0jZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAppbmRleCAyMzViN2NkLi5iY2IzMDI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCkBAIC0xLDMxICsxLDI5IEBACiAjaWZuZGVmIF9fQVNNX0NQVV9TSDRfRE1BX0gKICNkZWZpbmUgX19BU01fQ1BVX1NINF9ETUFfSAogCi0jZGVmaW5lIERNQU9SX0lOSVQJKCAweDgwMDAgfCBETUFPUl9ETUUgKQotCiAvKiBTSDc3NTEvNzc2MC83NzgwIERNQSBJUlEgc291cmNlcyAqLwotI2RlZmluZSBETVRFMF9JUlEJMzQKLSNkZWZpbmUgRE1URTFfSVJRCTM1Ci0jZGVmaW5lIERNVEUyX0lSUQkzNgotI2RlZmluZSBETVRFM19JUlEJMzcKLSNkZWZpbmUgRE1URTRfSVJRCTQ0Ci0jZGVmaW5lIERNVEU1X0lSUQk0NQotI2RlZmluZSBETVRFNl9JUlEJNDYKLSNkZWZpbmUgRE1URTdfSVJRCTQ3Ci0jZGVmaW5lIERNQUVfSVJRCTM4CiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINEEKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4ZmM4MDgwMjAKIAorI2RlZmluZSBETUFPUl9JTklUCShETUFPUl9ETUUpCiAjZGVmaW5lIENIQ1JfVFNfTUFTSwkweDE4CiAjZGVmaW5lIENIQ1JfVFNfU0hJRlQJMwogCi0jaW5jbHVkZSA8Y3B1L2RtYS1zaDc3ODAuaD4KLSNlbHNlCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGZmYTAwMDAwCisjaW5jbHVkZSA8Y3B1L2RtYS1zaDRhLmg+CisjZWxzZSAvKiBDT05GSUdfQ1BVX1NINEEgKi8KKy8qCisgKiBTSDc3NTAvU0g3NzUxL1NINzc2MAorICovCisjZGVmaW5lIERNVEUwX0lSUQkzNAorI2RlZmluZSBETVRFNF9JUlEJNDQKKyNkZWZpbmUgRE1URTZfSVJRCTQ2CisjZGVmaW5lIERNQUUwX0lSUQkzOAogCisjZGVmaW5lIERNQU9SX0lOSVQJKDB4ODAwMHxETUFPUl9ETUUpCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhmZmEwMDAwMAorI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4ZmZhMDAwNzAKIC8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KLSNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDgwCisjZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDAwODAKICNkZWZpbmUgVFNfOAkJMHgwMDAwMDAxMAogI2RlZmluZSBUU18xNgkJMHgwMDAwMDAyMAogI2RlZmluZSBUU18zMgkJMHgwMDAwMDAzMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmgKaW5kZXggYzIzYWY4MS4uNzQ5ZDFjNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oCkBAIC0yOSw2ICsyOSwxMCBAQAogI2RlZmluZSBGUlFDUjAJCQkweGZmYzgwMDAwCiAjZGVmaW5lIEZSUUNSMQkJCTB4ZmZjODAwMDQKICNkZWZpbmUgRlJRTVIxCQkJMHhmZmM4MDAxNAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQorI2RlZmluZSBGUlFDUjAJCQkweGZmYzQwMDAwCisjZGVmaW5lIEZSUUNSMQkJCTB4ZmZjNDAwMDQKKyNkZWZpbmUgRlJRTVIxCQkJMHhmZmM0MDAxNAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKICNkZWZpbmUgRlJRQ1IJCQkweGZmYzAwMDE0CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAppbmRleCA5ZWE4ZWIyLi4zY2U3ZWY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaApAQCAtMTQsMjggKzE0LDM1IEBACiAjZGVmaW5lIE1NVV9QVEVMCTB4RkYwMDAwMDQJLyogUGFnZSB0YWJsZSBlbnRyeSByZWdpc3RlciBMT1cgKi8KICNkZWZpbmUgTU1VX1RUQgkJMHhGRjAwMDAwOAkvKiBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1NVV9URUEJCTB4RkYwMDAwMEMJLyogVExCIEV4Y2VwdGlvbiBBZGRyZXNzICovCi0jZGVmaW5lIE1NVV9QVEVBCTB4RkYwMDAwMzQJLyogUGFnZSB0YWJsZSBlbnRyeSBhc3Npc3RhbmNlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NVV9QVEVBCTB4RkYwMDAwMzQJLyogUFRFIGFzc2lzdGFuY2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1VX1BURUFFWAkweEZGMDAwMDdDCS8qIFBURSBBU0lEIGV4dGVuc2lvbiByZWdpc3RlciAqLwogCiAjZGVmaW5lIE1NVUNSCQkweEZGMDAwMDEwCS8qIE1NVSBDb250cm9sIFJlZ2lzdGVyICovCiAKLSNkZWZpbmUgTU1VX0lUTEJfQUREUkVTU19BUlJBWQkweEYyMDAwMDAwCiAjZGVmaW5lIE1NVV9VVExCX0FERFJFU1NfQVJSQVkJMHhGNjAwMDAwMAorI2RlZmluZSBNTVVfVVRMQl9BRERSRVNTX0FSUkFZMgkweEY2ODAwMDAwCiAjZGVmaW5lIE1NVV9QQUdFX0FTU09DX0JJVAkweDgwCiAKICNkZWZpbmUgTU1VQ1JfVEkJCSgxPDwyKQogCi0jaWZkZWYgQ09ORklHX1gyVExCCi0jZGVmaW5lIE1NVUNSX01FCQkoMSA8PCA3KQotI2Vsc2UKLSNkZWZpbmUgTU1VQ1JfTUUJCSgwKQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkgJiYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MCkKICNkZWZpbmUgTU1VQ1JfU0UJCSgxIDw8IDQpCiAjZWxzZQogI2RlZmluZSBNTVVDUl9TRQkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUFFWAorI2RlZmluZSBNTVVDUl9BRVgJCSgxIDw8IDYpCisjZWxzZQorI2RlZmluZSBNTVVDUl9BRVgJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDJUTEIKKyNkZWZpbmUgTU1VQ1JfTUUJCSgxIDw8IDcpCisjZWxzZQorI2RlZmluZSBNTVVDUl9NRQkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TSF9TVE9SRV9RVUVVRVMKICNkZWZpbmUgTU1VQ1JfU1FNRAkJKDEgPDwgOSkKICNlbHNlCkBAIC00MywxNyArNTAsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgTU1VX05UTEJfRU5UUklFUwk2NAotI2RlZmluZSBNTVVfQ09OVFJPTF9JTklUCSgweDA1fE1NVUNSX1NRTUR8TU1VQ1JfTUV8TU1VQ1JfU0UpCi0KLSNkZWZpbmUgTU1VX0lUTEJfREFUQV9BUlJBWQkweEYzMDAwMDAwCi0jZGVmaW5lIE1NVV9VVExCX0RBVEFfQVJSQVkJMHhGNzAwMDAwMAotCi0jZGVmaW5lIE1NVV9VVExCX0VOVFJJRVMJICAgNjQKLSNkZWZpbmUgTU1VX1VfRU5UUllfU0hJRlQJICAgIDgKLSNkZWZpbmUgTU1VX1VUTEJfVkFMSUQJCTB4MTAwCi0jZGVmaW5lIE1NVV9JVExCX0VOVFJJRVMJICAgIDQKLSNkZWZpbmUgTU1VX0lfRU5UUllfU0hJRlQJICAgIDgKLSNkZWZpbmUgTU1VX0lUTEJfVkFMSUQJCTB4MTAwCisjZGVmaW5lIE1NVV9DT05UUk9MX0lOSVQJKDB4MDV8TU1VQ1JfU1FNRHxNTVVDUl9NRXxNTVVDUl9TRXxNTVVDUl9BRVgpCiAKICNkZWZpbmUgVFJBCTB4ZmYwMDAwMjAKICNkZWZpbmUgRVhQRVZUCTB4ZmYwMDAwMjQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY4OGFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogU0g3Nzg2IFBpbm11eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gc2g3Nzg1LmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQ1BVX1NINzc4Nl9IX18KKyNkZWZpbmUgX19DUFVfU0g3Nzg2X0hfXworCitlbnVtIHsKKwkvKiBQQSAqLworCUdQSU9fUEE3LCBHUElPX1BBNiwgR1BJT19QQTUsIEdQSU9fUEE0LAorCUdQSU9fUEEzLCBHUElPX1BBMiwgR1BJT19QQTEsIEdQSU9fUEEwLAorCisJLyogUEIgKi8KKwlHUElPX1BCNywgR1BJT19QQjYsIEdQSU9fUEI1LCBHUElPX1BCNCwKKwlHUElPX1BCMywgR1BJT19QQjIsIEdQSU9fUEIxLCBHUElPX1BCMCwKKworCS8qIFBDICovCisJR1BJT19QQzcsIEdQSU9fUEM2LCBHUElPX1BDNSwgR1BJT19QQzQsCisJR1BJT19QQzMsIEdQSU9fUEMyLCBHUElPX1BDMSwgR1BJT19QQzAsCisKKwkvKiBQRCAqLworCUdQSU9fUEQ3LCBHUElPX1BENiwgR1BJT19QRDUsIEdQSU9fUEQ0LAorCUdQSU9fUEQzLCBHUElPX1BEMiwgR1BJT19QRDEsIEdQSU9fUEQwLAorCisJLyogUEUgKi8KKwlHUElPX1BFNSwgR1BJT19QRTQsIEdQSU9fUEUzLCBHUElPX1BFMiwKKwlHUElPX1BFMSwgR1BJT19QRTAsCisKKwkvKiBQRiAqLworCUdQSU9fUEY3LCBHUElPX1BGNiwgR1BJT19QRjUsIEdQSU9fUEY0LAorCUdQSU9fUEYzLCBHUElPX1BGMiwgR1BJT19QRjEsIEdQSU9fUEYwLAorCisJLyogUEcgKi8KKwlHUElPX1BHNywgR1BJT19QRzYsIEdQSU9fUEc1LCBHUElPX1BHNCwKKwlHUElPX1BHMywgR1BJT19QRzIsIEdQSU9fUEcxLCBHUElPX1BHMCwKKworCS8qIFBIICovCisJR1BJT19QSDcsIEdQSU9fUEg2LCBHUElPX1BINSwgR1BJT19QSDQsCisJR1BJT19QSDMsIEdQSU9fUEgyLCBHUElPX1BIMSwgR1BJT19QSDAsCisKKwkvKiBQSiAqLworCUdQSU9fUEo3LCBHUElPX1BKNiwgR1BJT19QSjUsIEdQSU9fUEo0LAorCUdQSU9fUEozLCBHUElPX1BKMiwgR1BJT19QSjEsIEdQSU9fUEowLAorCisJR1BJT19GTl9DREUsCisJR1BJT19GTl9FVEhfTUFHSUMsCisJR1BJT19GTl9ESVNQLAorCUdQSU9fRk5fRVRIX0xJTkssCisJR1BJT19GTl9EUjUsCisJR1BJT19GTl9FVEhfVFhfRVIsCisJR1BJT19GTl9EUjQsCisJR1BJT19GTl9FVEhfVFhfRU4sCisJR1BJT19GTl9EUjMsCisJR1BJT19GTl9FVEhfVFhEMywKKwlHUElPX0ZOX0RSMiwKKwlHUElPX0ZOX0VUSF9UWEQyLAorCUdQSU9fRk5fRFIxLAorCUdQSU9fRk5fRVRIX1RYRDEsCisJR1BJT19GTl9EUjAsCisJR1BJT19GTl9FVEhfVFhEMCwKKwlHUElPX0ZOX1ZTWU5DLAorCUdQSU9fRk5fSFNQSV9DTEssCisJR1BJT19GTl9PRERGLAorCUdQSU9fRk5fSFNQSV9DUywKKwlHUElPX0ZOX0RHNSwKKwlHUElPX0ZOX0VUSF9NRElPLAorCUdQSU9fRk5fREc0LAorCUdQSU9fRk5fRVRIX1JYX0NMSywKKwlHUElPX0ZOX0RHMywKKwlHUElPX0ZOX0VUSF9NREMsCisJR1BJT19GTl9ERzIsCisJR1BJT19GTl9FVEhfQ09MLAorCUdQSU9fRk5fREcxLAorCUdQSU9fRk5fRVRIX1RYX0NMSywKKwlHUElPX0ZOX0RHMCwKKwlHUElPX0ZOX0VUSF9DUlMsCisJR1BJT19GTl9EQ0xLSU4sCisJR1BJT19GTl9IU1BJX1JYLAorCUdQSU9fRk5fSFNZTkMsCisJR1BJT19GTl9IU1BJX1RYLAorCUdQSU9fRk5fREI1LAorCUdQSU9fRk5fRVRIX1JYRDMsCisJR1BJT19GTl9EQjQsCisJR1BJT19GTl9FVEhfUlhEMiwKKwlHUElPX0ZOX0RCMywKKwlHUElPX0ZOX0VUSF9SWEQxLAorCUdQSU9fRk5fREIyLAorCUdQSU9fRk5fRVRIX1JYRDAsCisJR1BJT19GTl9EQjEsCisJR1BJT19GTl9FVEhfUlhfRFYsCisJR1BJT19GTl9EQjAsCisJR1BJT19GTl9FVEhfUlhfRVIsCisJR1BJT19GTl9EQ0xLT1VULAorCUdQSU9fRk5fU0NJRjFfU0xLLAorCUdQSU9fRk5fU0NJRjFfUlhELAorCUdQSU9fRk5fU0NJRjFfVFhELAorCUdQSU9fRk5fREFDSzEsCisJR1BJT19GTl9CQUNLLAorCUdQSU9fRk5fRkFMRSwKKwlHUElPX0ZOX0RBQ0swLAorCUdQSU9fRk5fRkNMRSwKKwlHUElPX0ZOX0RSRVExLAorCUdQSU9fRk5fQlJFUSwKKwlHUElPX0ZOX1VTQl9PVkMxLAorCUdQSU9fRk5fRFJFUTAsCisJR1BJT19GTl9VU0JfT1ZDMCwKKwlHUElPX0ZOX1VTQl9QRU5DMSwKKwlHUElPX0ZOX1VTQl9QRU5DMCwKKwlHUElPX0ZOX0hBQzFfU0RPVVQsCisJR1BJT19GTl9TU0kxX1NEQVRBLAorCUdQSU9fRk5fU0RJRjFDTUQsCisJR1BJT19GTl9IQUMxX1NESU4sCisJR1BJT19GTl9TU0kxX1NDSywKKwlHUElPX0ZOX1NESUYxQ0QsCisJR1BJT19GTl9IQUMxX1NZTkMsCisJR1BJT19GTl9TU0kxX1dTLAorCUdQSU9fRk5fU0RJRjFXUCwKKwlHUElPX0ZOX0hBQzFfQklUQ0xLLAorCUdQSU9fRk5fU1NJMV9DTEssCisJR1BJT19GTl9TRElGMUNMSywKKwlHUElPX0ZOX0hBQzBfU0RPVVQsCisJR1BJT19GTl9TU0kwX1NEQVRBLAorCUdQSU9fRk5fU0RJRjFEMywKKwlHUElPX0ZOX0hBQzBfU0RJTiwKKwlHUElPX0ZOX1NTSTBfU0NLLAorCUdQSU9fRk5fU0RJRjFEMiwKKwlHUElPX0ZOX0hBQzBfU1lOQywKKwlHUElPX0ZOX1NTSTBfV1MsCisJR1BJT19GTl9TRElGMUQxLAorCUdQSU9fRk5fSEFDMF9CSVRDTEssCisJR1BJT19GTl9TU0kwX0NMSywKKwlHUElPX0ZOX1NESUYxRDAsCisJR1BJT19GTl9TQ0lGM19TQ0ssCisJR1BJT19GTl9TU0kyX1NEQVRBLAorCUdQSU9fRk5fU0NJRjNfUlhELAorCUdQSU9fRk5fVENMSywKKwlHUElPX0ZOX1NTSTJfU0NLLAorCUdQSU9fRk5fU0NJRjNfVFhELAorCUdQSU9fRk5fSEFDX1JFUywKKwlHUElPX0ZOX1NTSTJfV1MsCisJR1BJT19GTl9EQUNLMywKKwlHUElPX0ZOX1NESUYwQ01ELAorCUdQSU9fRk5fREFDSzIsCisJR1BJT19GTl9TRElGMENELAorCUdQSU9fRk5fRFJFUTMsCisJR1BJT19GTl9TRElGMFdQLAorCUdQSU9fRk5fU0NJRjBfQ1RTLAorCUdQSU9fRk5fRFJFUTIsCisJR1BJT19GTl9TRElGMENMSywKKwlHUElPX0ZOX1NDSUYwX1JUUywKKwlHUElPX0ZOX0lSTDcsCisJR1BJT19GTl9TRElGMEQzLAorCUdQSU9fRk5fU0NJRjBfU0NLLAorCUdQSU9fRk5fSVJMNiwKKwlHUElPX0ZOX1NESUYwRDIsCisJR1BJT19GTl9TQ0lGMF9SWEQsCisJR1BJT19GTl9JUkw1LAorCUdQSU9fRk5fU0RJRjBEMSwKKwlHUElPX0ZOX1NDSUYwX1RYRCwKKwlHUElPX0ZOX0lSTDQsCisJR1BJT19GTl9TRElGMEQwLAorCUdQSU9fRk5fU0NJRjVfU0NLLAorCUdQSU9fRk5fRlJCLAorCUdQSU9fRk5fU0NJRjVfUlhELAorCUdQSU9fRk5fSU9JUzE2LAorCUdQSU9fRk5fU0NJRjVfVFhELAorCUdQSU9fRk5fQ0UyQiwKKwlHUElPX0ZOX0RSQUszLAorCUdQSU9fRk5fQ0UyQSwKKwlHUElPX0ZOX1NDSUY0X1NDSywKKwlHUElPX0ZOX0RSQUsyLAorCUdQSU9fRk5fU1NJM19XUywKKwlHUElPX0ZOX1NDSUY0X1JYRCwKKwlHUElPX0ZOX0RSQUsxLAorCUdQSU9fRk5fU1NJM19TREFUQSwKKwlHUElPX0ZOX0ZTVEFUVVMsCisJR1BJT19GTl9TQ0lGNF9UWEQsCisJR1BJT19GTl9EUkFLMCwKKwlHUElPX0ZOX1NTSTNfU0NLLAorCUdQSU9fRk5fRlNFLAorfTsKKworI2VuZGlmIC8qIF9fQ1BVX1NINzc4Nl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3VycXVlbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3VycXVlbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzZTFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdXJxdWVsbC5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX19NQUNIX1VSUVVFTExfSAorI2RlZmluZSBfX01BQ0hfVVJRVUVMTF9ICisKKy8qCisgKiAtLS0tLS0gMHgwMDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzAgfCAoU1cxLFNXNDcpICAgIEVFUFJPTSwgU1JBTSwgTk9SIEZMQVNICisgKiAtLS0tLSsgMHgwNDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzEgfCAoU1c0NykgICAgICAgIFNSQU0sIFNSQU0tTEFOLVBDTUNJQSwgTk9SIEZMQVNICisgKiAtLS0tLSsgMHgwODAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzIgfCAgICAgICAgICAgICAgIEREUjMKKyAqICBDUzMgfAorICogLS0tLS0rIDB4MTAwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M0IHwgICAgICAgICAgICAgICBQQ0llCisgKiAtLS0tLSsgMHgxNDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzUgfCAoU1c0NykgICAgICAgIExSQU0vVVJBTSwgU1JBTS1MQU4tUENNQ0lBCisgKiAtLS0tLSsgMHgxODAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzYgfCAgICAgICAgICAgICAgIEFUQSwgTkFORCBGTEFTSAorICogLS0tLS0rIDB4MWMwMDAwMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ1M3IHwgICAgICAgICAgICAgICBTSDc3ODYgcmVnaXN0ZXIKKyAqIC0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNkZWZpbmUgTk9SX0ZMQVNIX0FERFIJMHgwMDAwMDAwMAorI2RlZmluZSBOT1JfRkxBU0hfU0laRQkweDA0MDAwMDAwCisKKyNkZWZpbmUgQ1MxX0JBU0UJMHgwNTAwMDAwMAorI2RlZmluZSBDUzVfQkFTRQkweDE1MDAwMDAwCisjZGVmaW5lIEZQR0FfQkFTRQlDUzFfQkFTRQorCisjZGVmaW5lIEJPQVJEUkVHKG9mcykJKEZQR0FfQkFTRSArIG9mcyMjX09GUykKKyNkZWZpbmUgVUJPQVJEUkVHKG9mcykJKDB4YTAwMDAwMDAgKyBGUEdBX0JBU0UgKyBvZnMjI19PRlMpCisKKyNkZWZpbmUgU1JTVFJfT0ZTCTB4MDAwMCAvKiBTeXN0ZW0gcmVzZXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkRNUl9PRlMJMHgwMDEwIC8qIEJvYXJkIG9wZXJhdGluZyBtb2RlIHJlc2lzdGVyICovCisjZGVmaW5lIElSTDBTUl9PRlMJMHgwMDIwIC8qIElSTDAgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDBNU0tSX09GUwkweDAwMzAgLyogSVJMMCBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDFTUl9PRlMJMHgwMDQwIC8qIElSTDEgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDFNU0tSX09GUwkweDAwNTAgLyogSVJMMSBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDJTUl9PRlMJMHgwMDYwIC8qIElSTDIgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDJNU0tSX09GUwkweDAwNzAgLyogSVJMMiBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDNTUl9PRlMJMHgwMDgwIC8qIElSTDMgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElSTDNNU0tSX09GUwkweDAwOTAgLyogSVJMMyBNYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIFNPRlRJTlRSX09GUwkweDAxMjAgLyogU29mdHdlYXIgSW50ZXJydXB0IHJlZ2lzdGVyICovCisjZGVmaW5lIFNMRURSX09GUwkweDAxMzAgLyogTEVEIGNvbnRyb2wgcmVzaXN0ZXIgKi8KKyNkZWZpbmUgTUFQU0NJRlNXUl9PRlMJMHgwMTQwIC8qIE1hcC9TQ0lGIFN3aXRjaCByZWdpc3RlciAqLworI2RlZmluZSBGUFZFUlJfT0ZTCTB4MDE1MCAvKiBGUEdBIFZlcnNpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBEQVRFUl9PRlMJMHgwMTYwIC8qIEZQR0EgRGF0ZSByZWdpc3RlciAqLworI2RlZmluZSBGUFlFQVJSX09GUwkweDAxNzAgLyogRlBHQSBZZWFyIHJlZ2lzdGVyICovCisjZGVmaW5lIFRDTEtDUl9PRlMJMHgwMTgwIC8qIFRDTEsgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBESVBTV01SX09GUwkweDEwMDAgLyogRElQU1cgbW9uaXRvciByZWdpc3RlciAqLworI2RlZmluZSBGUE9EUl9PRlMJMHgxMDEwIC8qIE91dHB1dCBwb3J0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVRBQ05SX09GUwkweDEwMjAgLyogQVRBLUNOIENvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQSU5EUl9PRlMJMHgxMDMwIC8qIElucHV0IHBvcnQgZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBNRFNXTVJfT0ZTCTB4MTA0MCAvKiBNT0RFIFNXIG1vbml0b3IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRERSM0JVUENSX09GUwkweDEwNTAgLyogRERSMyBCYWNrdXAgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTU0lDT0RFQ0NSX09GUwkweDEwNjAgLyogU1NJLUNPREVDIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRVNMT1RTUl9PRlMJMHgxMDcwIC8qIFBDSWV4cHJlc3MgU2xvdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIRVJQT1JUU1JfT0ZTCTB4MTA4MCAvKiBFdGhlclBoeSBQb3J0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBMQVRDSENSX09GUwkweDMwMDAgLyogTGF0Y2ggY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBMQVRDVUFSX09GUwkweDMwMTAgLyogTGF0Y2ggdXBwZXIgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBMQVRDTEFSX09GUwkweDMwMTIgLyogTGF0Y2ggbG93ZXIgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBMQVRDTFVEUl9PRlMJMHgzMDI0IC8qIExhdGNoIEQzMS0xNiByZWdpc3RlciAqLworI2RlZmluZSBMQVRDTExEUl9PRlMJMHgzMDI2IC8qIExhdGNoIEQxNS0wIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0hBUkxFRF9PRlMJMHgyMDAwIC8qIENoYXJhY3RlciBMRUQgKi8KKworI2VuZGlmICAvKiBfX01BQ0hfVVJRVUVMTF9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKaW5kZXggMmUxYjg2ZS4uODJhM2ExNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIKQEAgLTMwLDUgKzMwLDYgQEAKIG9iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0RVTVBfQ09ERSkJCSs9IGRpc2Fzc2VtYmxlLm8KK29iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gc3dzdXNwLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDU3Y2YwZTAuLjk5YWNlYjI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEyLDggKzEyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKIGludCBtYWluKHZvaWQpCiB7CkBAIC0yNSw1ICsyNywxMSBAQAogCURFRklORShUSV9QUkVfQ09VTlQsCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcHJlZW1wdF9jb3VudCkpOwogCURFRklORShUSV9SRVNUQVJUX0JMT0NLLG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcmVzdGFydF9ibG9jaykpOwogCisjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCisJREVGSU5FKFBCRV9BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBhZGRyZXNzKSk7CisJREVGSU5FKFBCRV9PUklHX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBwYmUsIG9yaWdfYWRkcmVzcykpOworCURFRklORShQQkVfTkVYVCwgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgbmV4dCkpOworCURFRklORShTV1NVU1BfQVJDSF9SRUdTX1NJWkUsIHNpemVvZihzdHJ1Y3Qgc3dzdXNwX2FyY2hfcmVncykpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggZjQ3MWQyNC4uMjYwMDY0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogIyBTcGVjaWFsIGNhc2VzIGZvciBmYW1pbHkgYW5jZXN0cnkuCiAKIG9iai0kKENPTkZJR19DUFVfU0g0QSkJCSs9IHNoNGEvCitvYmotJChDT05GSUdfQVJDSF9TSE1PQklMRSkJKz0gc2htb2JpbGUvCiAKICMgQ29tbW9uIGludGVyZmFjZXMuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKaW5kZXggN2IxNzEzNy4uMWRjODk2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0yMzksNiArMjQxLDM1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjbGtfcmVjYWxjX3JhdGUpOwogCitpbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNsayAqb2xkOworCisJaWYgKCFwYXJlbnQgfHwgIWNsaykKKwkJcmV0dXJuIHJldDsKKworCW9sZCA9IGNsay0+cGFyZW50OworCWlmIChsaWtlbHkoY2xrLT5vcHMgJiYgY2xrLT5vcHMtPnNldF9wYXJlbnQpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJCXJldCA9IGNsay0+b3BzLT5zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQljbGstPnBhcmVudCA9IChyZXQgPyBvbGQgOiBwYXJlbnQpOworCX0KKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ0xLX1JBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19zZXRfcGFyZW50KTsKKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnBhcmVudDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19nZXRfcGFyZW50KTsKKwogbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5yb3VuZF9yYXRlKSkgewpAQCAtMzI5LDYgKzM2MCw3MCBAQAogCXJldHVybiBwIC0gYnVmOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGNsa3Nfc3lzZGV2X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0YXRpYyBwbV9tZXNzYWdlX3QgcHJldl9zdGF0ZTsKKwlzdHJ1Y3QgY2xrICpjbGtwOworCisJc3dpdGNoIChzdGF0ZS5ldmVudCkgeworCWNhc2UgUE1fRVZFTlRfT046CisJCS8qIFJlc3VtZWluZyBmcm9tIGhpYmVybmF0aW9uICovCisJCWlmIChwcmV2X3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tfbGlzdCwgbm9kZSkKKwkJCQlpZiAobGlrZWx5KGNsa3AtPm9wcykpIHsKKwkJCQkJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrcC0+cmF0ZTsKKworCQkJCQlpZiAobGlrZWx5KGNsa3AtPm9wcy0+c2V0X3BhcmVudCkpCisJCQkJCQljbGtwLT5vcHMtPnNldF9wYXJlbnQoY2xrcCwKKwkJCQkJCQljbGtwLT5wYXJlbnQpOworCQkJCQlpZiAobGlrZWx5KGNsa3AtPm9wcy0+c2V0X3JhdGUpKQorCQkJCQkJY2xrcC0+b3BzLT5zZXRfcmF0ZShjbGtwLAorCQkJCQkJCXJhdGUsIE5PX0NIQU5HRSk7CisJCQkJCWVsc2UgaWYgKGxpa2VseShjbGtwLT5vcHMtPnJlY2FsYykpCisJCQkJCQljbGtwLT5vcHMtPnJlY2FsYyhjbGtwKTsKKwkJCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUE1fRVZFTlRfRlJFRVpFOgorCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX1NVU1BFTkQ6CisJCWJyZWFrOworCX0KKworCXByZXZfc3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGtzX3N5c2Rldl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY2xrc19zeXNkZXZfc3VzcGVuZChkZXYsIFBNU0dfT04pOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBjbGtzX3N5c2Rldl9jbGFzcyA9IHsKKwkubmFtZSA9ICJjbGtzIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBjbGtzX3N5c2Rldl9kcml2ZXIgPSB7CisJLnN1c3BlbmQgPSBjbGtzX3N5c2Rldl9zdXNwZW5kLAorCS5yZXN1bWUgPSBjbGtzX3N5c2Rldl9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgY2xrc19zeXNkZXZfZGV2ID0geworCS5jbHMgPSAmY2xrc19zeXNkZXZfY2xhc3MsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjbGtfc3lzZGV2X2luaXQodm9pZCkKK3sKKwlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmNsa3Nfc3lzZGV2X2NsYXNzKTsKKwlzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjbGtzX3N5c2Rldl9jbGFzcywgJmNsa3Nfc3lzZGV2X2RyaXZlcik7CisJc3lzZGV2X3JlZ2lzdGVyKCZjbGtzX3N5c2Rldl9kZXYpOworCisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwoY2xrX3N5c2Rldl9pbml0KTsKKyNlbmRpZgorCiBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCiB7CiAJaW50IGksIHJldCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwppbmRleCA1NmU1ODc4Li4wZTMyZDhlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDc2MTkgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBZb3NoaW5vcmkgU2F0bworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOCwxNSArMTksMTAgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJV0RULCBFRE1BQywgQ01UMCwgQ01UMSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSwKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLAogCUhJRl9ISUZJLCBISUZfSElGQkksCiAJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsCiAJU0lPRiwKLQotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlTQ0lGMCwgU0NJRjEsIFNDSUYyLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0zNiwyNCArMzIsMTggQEAKIAlJTlRDX0lSUShJUlE2LCA4MiksIElOVENfSVJRKElSUTcsIDgzKSwKIAlJTlRDX0lSUShXRFQsIDg0KSwgSU5UQ19JUlEoRURNQUMsIDg1KSwKIAlJTlRDX0lSUShDTVQwLCA4NiksIElOVENfSVJRKENNVDEsIDg3KSwKLQlJTlRDX0lSUShTQ0lGMF9FUkksIDg4KSwgSU5UQ19JUlEoU0NJRjBfUlhJLCA4OSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCA5MCksIElOVENfSVJRKFNDSUYwX1RYSSwgOTEpLAotCUlOVENfSVJRKFNDSUYxX0VSSSwgOTIpLCBJTlRDX0lSUShTQ0lGMV9SWEksIDkzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDk0KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCA5NSksCi0JSU5UQ19JUlEoU0NJRjJfRVJJLCA5NiksIElOVENfSVJRKFNDSUYyX1JYSSwgOTcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgOTgpLCBJTlRDX0lSUShTQ0lGMl9UWEksIDk5KSwKKwlJTlRDX0lSUShTQ0lGMCwgODgpLCBJTlRDX0lSUShTQ0lGMCwgODkpLAorCUlOVENfSVJRKFNDSUYwLCA5MCksIElOVENfSVJRKFNDSUYwLCA5MSksCisJSU5UQ19JUlEoU0NJRjEsIDkyKSwgSU5UQ19JUlEoU0NJRjEsIDkzKSwKKwlJTlRDX0lSUShTQ0lGMSwgOTQpLCBJTlRDX0lSUShTQ0lGMSwgOTUpLAorCUlOVENfSVJRKFNDSUYyLCA5NiksIElOVENfSVJRKFNDSUYyLCA5NyksCisJSU5UQ19JUlEoU0NJRjIsIDk4KSwgSU5UQ19JUlEoU0NJRjIsIDk5KSwKIAlJTlRDX0lSUShISUZfSElGSSwgMTAwKSwgSU5UQ19JUlEoSElGX0hJRkJJLCAxMDEpLAogCUlOVENfSVJRKERNQUMwLCAxMDQpLCBJTlRDX0lSUShETUFDMSwgMTA1KSwKIAlJTlRDX0lSUShETUFDMiwgMTA2KSwgSU5UQ19JUlEoRE1BQzMsIDEwNyksCiAJSU5UQ19JUlEoU0lPRiwgMTA4KSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEkpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZjgxNDAwMDYsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMyB9IH0sCiAJeyAweGY4MTQwMDA4LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LApAQCAtNjQsNyArNTQsNyBAQAogCXsgMHhmODA4MDAwOCwgMCwgMTYsIDQsIC8qIElQUkcgKi8geyBTSU9GIH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc2MTkiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NjE5IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewpAQCAtNzIsMTcgKzYyLDE3IEBACiAJCS5tYXBiYXNlCT0gMHhmODQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDg4LCA4OSwgOTEsIDkwfSwKKwkJLmlycXMJCT0geyA4OCwgODgsIDg4LCA4OCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGY4NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgOTIsIDkzLCA5NSwgOTR9LAorCQkuaXJxcwkJPSB7IDkyLCA5MiwgOTIsIDkyIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4Zjg0MjAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyA5NiwgOTcsIDk5LCA5OH0sCisJCS5pcnFzCQk9IHsgOTYsIDk2LCA5NiwgOTYgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtbXhnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYwppbmRleCBlNjExZDc5Li44NDQyOTM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSZW5lc2FzIE1YLUcgKFI4QTAzMDIyQkcpIFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yMCwyMyArMjAsMTUgQEAKIAlJUlE4LCBJUlE5LCBJUlExMCwgSVJRMTEsIElSUTEyLCBJUlExMywgSVJRMTQsIElSUTE1LAogCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAotCiAJU0lOVDgsIFNJTlQ3LCBTSU5UNiwgU0lOVDUsIFNJTlQ0LCBTSU5UMywgU0lOVDIsIFNJTlQxLAogCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKKwlTQ0lGMCwgU0NJRjEsCiAKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKLQlNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXLAorCU1UVTJfR1JPVVAxLCBNVFUyX0dST1VQMiwgTVRVMl9HUk9VUDMsIE1UVTJfR1JPVVA0LCBNVFUyX0dST1VQNQorCU1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgU0NJRjAsIFNDSUYxLAotCU1UVTJfR1JPVVAxLCBNVFUyX0dST1VQMiwgTVRVMl9HUk9VUDMsIE1UVTJfR1JPVVA0LCBNVFUyX0dST1VQNQorCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU5LDQ3ICs1MSwzNiBAQAogCUlOVENfSVJRKFNJTlQ0LCA5OCksIElOVENfSVJRKFNJTlQzLCA5OSksCiAJSU5UQ19JUlEoU0lOVDIsIDEwMCksIElOVENfSVJRKFNJTlQxLCAxMDEpLAogCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAyMjApLCBJTlRDX0lSUShTQ0lGMF9UWEksIDIyMSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAyMjIpLCBJTlRDX0lSUShTQ0lGMF9FUkksIDIyMyksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAyMjQpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDIyNSksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAyMjYpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDIyNyksCisJSU5UQ19JUlEoU0NJRjAsIDIyMCksIElOVENfSVJRKFNDSUYwLCAyMjEpLAorCUlOVENfSVJRKFNDSUYwLCAyMjIpLCBJTlRDX0lSUShTQ0lGMCwgMjIzKSwKKwlJTlRDX0lSUShTQ0lGMSwgMjI0KSwgSU5UQ19JUlEoU0NJRjEsIDIyNSksCisJSU5UQ19JUlEoU0NJRjEsIDIyNiksIElOVENfSVJRKFNDSUYxLCAyMjcpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMjI4KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMjI5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAyMzApLCBJTlRDX0lSUShNVFUyX1RHSTBELCAyMzEpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDIzMiksIElOVENfSVJRKE1UVTJfVEdJMEUsIDIzMyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIyOCksIElOVENfSVJRKE1UVTJfR1JPVVAxLCAyMjkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzApLCBJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMyksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTBGLCAyMzQpLCBJTlRDX0lSUShNVFUyX1RHSTFBLCAyMzUpLAotCUlOVENfSVJRKE1UVTJfVEdJMUIsIDIzNiksIElOVENfSVJRKE1UVTJfVENJMVYsIDIzNyksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMjM4KSwgSU5UQ19JUlEoTVRVMl9UR0kyQSwgMjM5KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM0KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNiksIElOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzcpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzgpLCBJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM5KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMkIsIDI0MCksIElOVENfSVJRKE1UVTJfVENJMlYsIDI0MSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMjQyKSwgSU5UQ19JUlEoTVRVMl9UR0kzQSwgMjQzKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMywgMjQwKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MiksIElOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDMpLAogCiAJSU5UQ19JUlEoTVRVMl9UR0kzQiwgMjQ0KSwKIAlJTlRDX0lSUShNVFUyX1RHSTNDLCAyNDUpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kzRCwgMjQ2KSwgSU5UQ19JUlEoTVRVMl9UQ0kzViwgMjQ3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAyNDgpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAyNDkpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDI1MCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDI1MSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0NiksIElOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDcpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDgpLCBJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ5KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNCwgMjUwKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI1MSksCiAKLQlJTlRDX0lSUShNVFUyX1RDSTRWLCAyNTIpLCBJTlRDX0lSUShNVFUyX1RHSTVVLCAyNTMpLAotCUlOVENfSVJRKE1UVTJfVEdJNVYsIDI1NCksIElOVENfSVJRKE1UVTJfVEdJNVcsIDI1NSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1MiksIElOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTMpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTQpLCBJTlRDX0lSUShNVFUyX0dST1VQNSwgMjU1KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAxLCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCQkgICBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAyLCBNVFUyX1RHSTBGLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLAotCQkgICBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLCBNVFUyX1RHSTJBKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVAzLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCQkgICBNVFUyX1RHSTNBKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVA0LCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLCBNVFUyX1RHSTRBLAotCQkgICBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTJfR1JPVVA1LCBNVFUyX1RDSTRWLCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTM3LDcgKzExOCw3IEBACiAJCS5tYXBiYXNlCT0gMHhmZjgwNDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjIzLCAyMjAsIDIyMSwgMjIyIH0sCisJCS5pcnFzCQk9IHsgMjIwLCAyMjAsIDIyMCwgMjIwIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKaW5kZXggMDYzMWU0Mi4uMDBmNDJmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgU0g3MjAxIHNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCAgUGV0ZXIgR3JpZmZpbiBwZ3JpZmZpbkBtcGMtZGF0YS5jby51aworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOCw1NyArMTksMzIgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAorCiAJQURDX0FESSwKLQlNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAotCU1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYsCi0JTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSwKLQlNVFUyX1RHSTJBLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAotCU1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsCi0JTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCwgTVRVMl9UQ0k0ViwKLQlNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXLAotCVJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVAsCi0JV0RULAotCUlJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLCBJSUMzMF9URUksCi0JSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksIElJQzMxX1RFSSwKLQlJSUMzMl9TVFBJLCBJSUMzMl9OQUtJLCBJSUMzMl9SWEksIElJQzMyX1RYSSwgSUlDMzJfVEVJLAorCisJTVRVMjBfQUJDRCwgTVRVMjBfVkVGLCBNVFUyMV9BQiwgTVRVMjFfVlUsIE1UVTIyX0FCLCBNVFUyMl9WVSwKKwlNVFUyM19BQkNELCBNVFUyNF9BQkNELCBNVFUyNV9VVlcsIE1UVTJfVENJM1YsIE1UVTJfVENJNFYsCisKKwlSVEMsIFdEVCwKKworCUlJQzMwLCBJSUMzMSwgSUlDMzIsCiAKIAlETUFDMF9ETUlOVDAsIERNQUMxX0RNSU5UMSwKIAlETUFDMl9ETUlOVDIsIERNQUMzX0RNSU5UMywKIAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKLQlTQ0lGNF9CUkksIFNDSUY0X0VSSSwgU0NJRjRfUlhJLCBTQ0lGNF9UWEksCi0JU0NJRjVfQlJJLCBTQ0lGNV9FUkksIFNDSUY1X1JYSSwgU0NJRjVfVFhJLAotCVNDSUY2X0JSSSwgU0NJRjZfRVJJLCBTQ0lGNl9SWEksIFNDSUY2X1RYSSwKLQlTQ0lGN19CUkksIFNDSUY3X0VSSSwgU0NJRjdfUlhJLCBTQ0lGN19UWEksCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwgU0NJRjYsIFNDSUY3LAogCiAJRE1BQzBfRE1JTlRBLCBETUFDNF9ETUlOVDQsIERNQUM1X0RNSU5UNSwgRE1BQzZfRE1JTlQ2LAogCURNQUM3X0RNSU5UNywKIAotCVJDQU4wX0VSUywgUkNBTjBfT1ZSLAotCVJDQU4wX1NMRSwKLQlSQ0FOMF9STTAsIFJDQU4wX1JNMSwKLQotCVJDQU4xX0VSUywgUkNBTjFfT1ZSLAotCVJDQU4xX1NMRSwKLQlSQ0FOMV9STTAsIFJDQU4xX1JNMSwKKwlSQ0FOMCwgUkNBTjEsCiAKIAlTU0kwX1NTSUksIFNTSTFfU1NJSSwKIAotCVRNUjBfQ01JQTAsIFRNUjBfQ01JQjAsIFRNUjBfT1ZJMCwKLQlUTVIxX0NNSUExLCBUTVIxX0NNSUIxLCBUTVIxX09WSTEsCisJVE1SMCwgVE1SMSwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQotCUlSUSwgUElOVCwgQURDLAotCU1UVTIwX0FCQ0QsIE1UVTIwX1ZFRiwgTVRVMjFfQUIsIE1UVTIxX1ZVLCBNVFUyMl9BQiwgTVRVMjJfVlUsCi0JTVRVMjNfQUJDRCwgTVRVMjRfQUJDRCwgTVRVMjVfVVZXLAotCVJUQywgSUlDMzAsIElJQzMxLCBJSUMzMiwKLQlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LCBTQ0lGNiwgU0NJRjcsCi0JUkNBTjAsIFJDQU4xLCBUTVIwLCBUTVIxCi0KKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC03Niw2ICs1Miw3IEBACiAJSU5UQ19JUlEoSVJRMiwgNjYpLCBJTlRDX0lSUShJUlEzLCA2NyksCiAJSU5UQ19JUlEoSVJRNCwgNjgpLCBJTlRDX0lSUShJUlE1LCA2OSksCiAJSU5UQ19JUlEoSVJRNiwgNzApLCBJTlRDX0lSUShJUlE3LCA3MSksCisKIAlJTlRDX0lSUShQSU5UMCwgODApLCBJTlRDX0lSUShQSU5UMSwgODEpLAogCUlOVENfSVJRKFBJTlQyLCA4MiksIElOVENfSVJRKFBJTlQzLCA4MyksCiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKQEAgLTgzLDEyMyArNjAsOTIgQEAKIAogCUlOVENfSVJRKEFEQ19BREksIDkyKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDEwOCksIElOVENfSVJRKE1UVTJfVEdJMEIsIDEwOSksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTEwKSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTExKSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxMTIpLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDExMyksIElOVENfSVJRKE1UVTJfVEdJMEYsIDExNCksCisJSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTA4KSwgSU5UQ19JUlEoTVRVMjBfQUJDRCwgMTA5KSwKKwlJTlRDX0lSUShNVFUyMF9BQkNELCAxMTApLCBJTlRDX0lSUShNVFUyMF9BQkNELCAxMTEpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTE2KSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTE3KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxMjApLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxMjEpLAorCUlOVENfSVJRKE1UVTIwX1ZFRiwgMTEyKSwgSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTMpLAorCUlOVENfSVJRKE1UVTIwX1ZFRiwgMTE0KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDEyNCksIElOVENfSVJRKE1UVTJfVEdJMkIsIDEyNSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTI4KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTI5KSwKKwlJTlRDX0lSUShNVFUyMV9BQiwgMTE2KSwgSU5UQ19JUlEoTVRVMjFfQUIsIDExNyksCisJSU5UQ19JUlEoTVRVMjFfVlUsIDEyMCksIElOVENfSVJRKE1UVTIxX1ZVLCAxMjEpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kzQSwgMTMyKSwgSU5UQ19JUlEoTVRVMl9UR0kzQiwgMTMzKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNDLCAxMzQpLCBJTlRDX0lSUShNVFUyX1RHSTNELCAxMzUpLAorCUlOVENfSVJRKE1UVTIyX0FCLCAxMjQpLCBJTlRDX0lSUShNVFUyMl9BQiwgMTI1KSwKKwlJTlRDX0lSUShNVFUyMl9WVSwgMTI4KSwgSU5UQ19JUlEoTVRVMjJfVlUsIDEyOSksCisKKwlJTlRDX0lSUShNVFUyM19BQkNELCAxMzIpLCBJTlRDX0lSUShNVFUyM19BQkNELCAxMzMpLAorCUlOVENfSVJRKE1UVTIzX0FCQ0QsIDEzNCksIElOVENfSVJRKE1UVTIzX0FCQ0QsIDEzNSksCisKIAlJTlRDX0lSUShNVFUyX1RDSTNWLCAxMzYpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMTQwKSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMTQxKSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAxNDIpLCBJTlRDX0lSUShNVFUyX1RHSTRELCAxNDMpLAorCUlOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MCksIElOVENfSVJRKE1UVTI0X0FCQ0QsIDE0MSksCisJSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQyKSwgSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQzKSwKKwogCUlOVENfSVJRKE1UVTJfVENJNFYsIDE0NCksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTVVLCAxNDgpLCBJTlRDX0lSUShNVFUyX1RHSTVWLCAxNDkpLAotCUlOVENfSVJRKE1UVTJfVEdJNVcsIDE1MCksCisJSU5UQ19JUlEoTVRVMjVfVVZXLCAxNDgpLCBJTlRDX0lSUShNVFUyNV9VVlcsIDE0OSksCisJSU5UQ19JUlEoTVRVMjVfVVZXLCAxNTApLAogCi0JSU5UQ19JUlEoUlRDX0FSTSwgMTUyKSwgSU5UQ19JUlEoUlRDX1BSRCwgMTUzKSwKLQlJTlRDX0lSUShSVENfQ1VQLCAxNTQpLCBJTlRDX0lSUShXRFQsIDE1NiksCisJSU5UQ19JUlEoUlRDLCAxNTIpLCBJTlRDX0lSUShSVEMsIDE1MyksCisJSU5UQ19JUlEoUlRDLCAxNTQpLAogCi0JSU5UQ19JUlEoSUlDMzBfU1RQSSwgMTU3KSwgSU5UQ19JUlEoSUlDMzBfTkFLSSwgMTU4KSwKLQlJTlRDX0lSUShJSUMzMF9SWEksIDE1OSksIElOVENfSVJRKElJQzMwX1RYSSwgMTYwKSwKLQlJTlRDX0lSUShJSUMzMF9URUksIDE2MSksCisJSU5UQ19JUlEoV0RULCAxNTYpLAogCi0JSU5UQ19JUlEoSUlDMzFfU1RQSSwgMTY0KSwgSU5UQ19JUlEoSUlDMzFfTkFLSSwgMTY1KSwKLQlJTlRDX0lSUShJSUMzMV9SWEksIDE2NiksIElOVENfSVJRKElJQzMxX1RYSSwgMTY3KSwKLQlJTlRDX0lSUShJSUMzMV9URUksIDE2OCksCisJSU5UQ19JUlEoSUlDMzAsIDE1NyksIElOVENfSVJRKElJQzMwLCAxNTgpLAorCUlOVENfSVJRKElJQzMwLCAxNTkpLCBJTlRDX0lSUShJSUMzMCwgMTYwKSwKKwlJTlRDX0lSUShJSUMzMCwgMTYxKSwKIAotCUlOVENfSVJRKElJQzMyX1NUUEksIDE3MCksIElOVENfSVJRKElJQzMyX05BS0ksIDE3MSksCi0JSU5UQ19JUlEoSUlDMzJfUlhJLCAxNzIpLCBJTlRDX0lSUShJSUMzMl9UWEksIDE3MyksCi0JSU5UQ19JUlEoSUlDMzJfVEVJLCAxNzQpLAorCUlOVENfSVJRKElJQzMxLCAxNjQpLCBJTlRDX0lSUShJSUMzMSwgMTY1KSwKKwlJTlRDX0lSUShJSUMzMSwgMTY2KSwgSU5UQ19JUlEoSUlDMzEsIDE2NyksCisJSU5UQ19JUlEoSUlDMzEsIDE2OCksCisKKwlJTlRDX0lSUShJSUMzMiwgMTcwKSwgSU5UQ19JUlEoSUlDMzIsIDE3MSksCisJSU5UQ19JUlEoSUlDMzIsIDE3MiksIElOVENfSVJRKElJQzMyLCAxNzMpLAorCUlOVENfSVJRKElJQzMyLCAxNzQpLAogCiAJSU5UQ19JUlEoRE1BQzBfRE1JTlQwLCAxNzYpLCBJTlRDX0lSUShETUFDMV9ETUlOVDEsIDE3NyksCiAJSU5UQ19JUlEoRE1BQzJfRE1JTlQyLCAxNzgpLCBJTlRDX0lSUShETUFDM19ETUlOVDMsIDE3OSksCiAKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDE4MCksIElOVENfSVJRKFNDSUYwX0VSSSwgMTgxKSwKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDE4MiksIElOVENfSVJRKFNDSUYwX1RYSSwgMTgzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDE4NCksIElOVENfSVJRKFNDSUYxX0VSSSwgMTg1KSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDE4NiksIElOVENfSVJRKFNDSUYxX1RYSSwgMTg3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDE4OCksIElOVENfSVJRKFNDSUYyX0VSSSwgMTg5KSwKLQlJTlRDX0lSUShTQ0lGMl9SWEksIDE5MCksIElOVENfSVJRKFNDSUYyX1RYSSwgMTkxKSwKLQlJTlRDX0lSUShTQ0lGM19CUkksIDE5MiksIElOVENfSVJRKFNDSUYzX0VSSSwgMTkzKSwKLQlJTlRDX0lSUShTQ0lGM19SWEksIDE5NCksIElOVENfSVJRKFNDSUYzX1RYSSwgMTk1KSwKLQlJTlRDX0lSUShTQ0lGNF9CUkksIDE5NiksIElOVENfSVJRKFNDSUY0X0VSSSwgMTk3KSwKLQlJTlRDX0lSUShTQ0lGNF9SWEksIDE5OCksIElOVENfSVJRKFNDSUY0X1RYSSwgMTk5KSwKLQlJTlRDX0lSUShTQ0lGNV9CUkksIDIwMCksIElOVENfSVJRKFNDSUY1X0VSSSwgMjAxKSwKLQlJTlRDX0lSUShTQ0lGNV9SWEksIDIwMiksIElOVENfSVJRKFNDSUY1X1RYSSwgMjAzKSwKLQlJTlRDX0lSUShTQ0lGNl9CUkksIDIwNCksIElOVENfSVJRKFNDSUY2X0VSSSwgMjA1KSwKLQlJTlRDX0lSUShTQ0lGNl9SWEksIDIwNiksIElOVENfSVJRKFNDSUY2X1RYSSwgMjA3KSwKLQlJTlRDX0lSUShTQ0lGN19CUkksIDIwOCksIElOVENfSVJRKFNDSUY3X0VSSSwgMjA5KSwKLQlJTlRDX0lSUShTQ0lGN19SWEksIDIxMCksIElOVENfSVJRKFNDSUY3X1RYSSwgMjExKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTgwKSwgSU5UQ19JUlEoU0NJRjAsIDE4MSksCisJSU5UQ19JUlEoU0NJRjAsIDE4MiksIElOVENfSVJRKFNDSUYwLCAxODMpLAorCUlOVENfSVJRKFNDSUYxLCAxODQpLCBJTlRDX0lSUShTQ0lGMSwgMTg1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMTg2KSwgSU5UQ19JUlEoU0NJRjEsIDE4NyksCisJSU5UQ19JUlEoU0NJRjIsIDE4OCksIElOVENfSVJRKFNDSUYyLCAxODkpLAorCUlOVENfSVJRKFNDSUYyLCAxOTApLCBJTlRDX0lSUShTQ0lGMiwgMTkxKSwKKwlJTlRDX0lSUShTQ0lGMywgMTkyKSwgSU5UQ19JUlEoU0NJRjMsIDE5MyksCisJSU5UQ19JUlEoU0NJRjMsIDE5NCksIElOVENfSVJRKFNDSUYzLCAxOTUpLAorCUlOVENfSVJRKFNDSUY0LCAxOTYpLCBJTlRDX0lSUShTQ0lGNCwgMTk3KSwKKwlJTlRDX0lSUShTQ0lGNCwgMTk4KSwgSU5UQ19JUlEoU0NJRjQsIDE5OSksCisJSU5UQ19JUlEoU0NJRjUsIDIwMCksIElOVENfSVJRKFNDSUY1LCAyMDEpLAorCUlOVENfSVJRKFNDSUY1LCAyMDIpLCBJTlRDX0lSUShTQ0lGNSwgMjAzKSwKKwlJTlRDX0lSUShTQ0lGNiwgMjA0KSwgSU5UQ19JUlEoU0NJRjYsIDIwNSksCisJSU5UQ19JUlEoU0NJRjYsIDIwNiksIElOVENfSVJRKFNDSUY2LCAyMDcpLAorCUlOVENfSVJRKFNDSUY3LCAyMDgpLCBJTlRDX0lSUShTQ0lGNywgMjA5KSwKKwlJTlRDX0lSUShTQ0lGNywgMjEwKSwgSU5UQ19JUlEoU0NJRjcsIDIxMSksCiAKIAlJTlRDX0lSUShETUFDMF9ETUlOVEEsIDIxMiksIElOVENfSVJRKERNQUM0X0RNSU5UNCwgMjE2KSwKIAlJTlRDX0lSUShETUFDNV9ETUlOVDUsIDIxNyksIElOVENfSVJRKERNQUM2X0RNSU5UNiwgMjE4KSwKIAlJTlRDX0lSUShETUFDN19ETUlOVDcsIDIxOSksCiAKLQlJTlRDX0lSUShSQ0FOMF9FUlMsIDIyOCksIElOVENfSVJRKFJDQU4wX09WUiwgMjI5KSwKLQlJTlRDX0lSUShSQ0FOMF9TTEUsIDIzMCksCi0JSU5UQ19JUlEoUkNBTjBfUk0wLCAyMzEpLCBJTlRDX0lSUShSQ0FOMF9STTEsIDIzMiksCisJSU5UQ19JUlEoUkNBTjAsIDIyOCksIElOVENfSVJRKFJDQU4wLCAyMjkpLAorCUlOVENfSVJRKFJDQU4wLCAyMzApLAorCUlOVENfSVJRKFJDQU4wLCAyMzEpLCBJTlRDX0lSUShSQ0FOMCwgMjMyKSwKIAotCUlOVENfSVJRKFJDQU4xX0VSUywgMjM0KSwgSU5UQ19JUlEoUkNBTjFfT1ZSLCAyMzUpLAotCUlOVENfSVJRKFJDQU4xX1NMRSwgMjM2KSwKLQlJTlRDX0lSUShSQ0FOMV9STTAsIDIzNyksIElOVENfSVJRKFJDQU4xX1JNMSwgMjM4KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM0KSwgSU5UQ19JUlEoUkNBTjEsIDIzNSksCisJSU5UQ19JUlEoUkNBTjEsIDIzNiksCisJSU5UQ19JUlEoUkNBTjEsIDIzNyksIElOVENfSVJRKFJDQU4xLCAyMzgpLAogCiAJSU5UQ19JUlEoU1NJMF9TU0lJLCAyNDQpLCBJTlRDX0lSUShTU0kxX1NTSUksIDI0NSksCiAKLQlJTlRDX0lSUShUTVIwX0NNSUEwLCAyNDYpLCBJTlRDX0lSUShUTVIwX0NNSUIwLCAyNDcpLAotCUlOVENfSVJRKFRNUjBfT1ZJMCwgMjQ4KSwKKwlJTlRDX0lSUShUTVIwLCAyNDYpLCBJTlRDX0lSUShUTVIwLCAyNDcpLAorCUlOVENfSVJRKFRNUjAsIDI0OCksCiAKLQlJTlRDX0lSUShUTVIxX0NNSUExLCAyNTIpLCBJTlRDX0lSUShUTVIxX0NNSUIxLCAyNTMpLAotCUlOVENfSVJRKFRNUjFfT1ZJMSwgMjU0KSwKLQorCUlOVENfSVJRKFRNUjEsIDI1MiksIElOVENfSVJRKFRNUjEsIDI1MyksCisJSU5UQ19JUlEoVE1SMSwgMjU0KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKE1UVTIwX0FCQ0QsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQpLAotCUlOVENfR1JPVVAoTVRVMjBfVkVGLCBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGKSwKLQotCUlOVENfR1JPVVAoTVRVMjFfQUIsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIpLAotCUlOVENfR1JPVVAoTVRVMjFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMjJfQUIsIE1UVTJfVEdJMkEsIE1UVTJfVEdJMkIpLAotCUlOVENfR1JPVVAoTVRVMjJfVlUsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUpLAotCUlOVENfR1JPVVAoTVRVMjNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFUyNF9BQkNELCBNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTI1X1VWVywgTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VyksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BUk0sIFJUQ19QUkQsIFJUQ19DVVAgKSwKLQotCUlOVENfR1JPVVAoSUlDMzAsIElJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLAotCQkgICBJSUMzMF9URUkpLAotCUlOVENfR1JPVVAoSUlDMzEsIElJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLAotCQkgICBJSUMzMV9URUkpLAotCUlOVENfR1JPVVAoSUlDMzIsIElJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLAotCQkgICBJSUMzMl9URUkpLAotCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY0LCBTQ0lGNF9CUkksIFNDSUY0X0VSSSwgU0NJRjRfUlhJLCBTQ0lGNF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjUsIFNDSUY1X0JSSSwgU0NJRjVfRVJJLCBTQ0lGNV9SWEksIFNDSUY1X1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNiwgU0NJRjZfQlJJLCBTQ0lGNl9FUkksIFNDSUY2X1JYSSwgU0NJRjZfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY3LCBTQ0lGN19CUkksIFNDSUY3X0VSSSwgU0NJRjdfUlhJLCBTQ0lGN19UWEkpLAotCi0JSU5UQ19HUk9VUChSQ0FOMCwgUkNBTjBfRVJTLCBSQ0FOMF9PVlIsIFJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCQkgICBSQ0FOMF9TTEUpLAotCUlOVENfR1JPVVAoUkNBTjEsIFJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwKLQkJICAgUkNBTjFfU0xFKSwKLQotCUlOVENfR1JPVVAoVE1SMCwgVE1SMF9DTUlBMCwgVE1SMF9DTUlCMCwgVE1SMF9PVkkwKSwKLQlJTlRDX0dST1VQKFRNUjEsIFRNUjFfQ01JQTEsIFRNUjFfQ01JQjEsIFRNUjFfT1ZJMSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMjEyLDcgKzE1OCw3IEBACiAKIAl7IDB4ZmZmZTk4MDYsIDAsIDE2LCA0LCAvKiBJUFIwOSAqLyB7IFJUQywgV0RULCBJSUMzMCwgMCB9IH0sCiAJeyAweGZmZmU5ODA4LCAwLCAxNiwgNCwgLyogSVBSMTAgKi8geyBJSUMzMSwgSUlDMzIsIERNQUMwX0RNSU5UMCwgRE1BQzFfRE1JTlQxIH0gfSwKLQl7IDB4ZmZmZTk4MGEsIDAsIDE2LCA0LCAvKiBJUFIxMSAqLyB7IERNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLCBTQ0lGMCAsIFNDSUYxIH0gfSwKKwl7IDB4ZmZmZTk4MGEsIDAsIDE2LCA0LCAvKiBJUFIxMSAqLyB7IERNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLCBTQ0lGMCwgU0NJRjEgfSB9LAogCXsgMHhmZmZlOTgwYywgMCwgMTYsIDQsIC8qIElQUjEyICovIHsgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUgfSB9LAogCXsgMHhmZmZlOTgwZSwgMCwgMTYsIDQsIC8qIElQUjEzICovIHsgU0NJRjYsIFNDSUY3LCBETUFDMF9ETUlOVEEsIERNQUM0X0RNSU5UNCAgfSB9LAogCXsgMHhmZmZlOTgxMCwgMCwgMTYsIDQsIC8qIElQUjE0ICovIHsgRE1BQzVfRE1JTlQ1LCBETUFDNl9ETUlOVDYsIERNQUM3X0RNSU5UNywgMCB9IH0sCkBAIC0yMzQsNDIgKzE4MCw0MiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE4MSwgMTgyLCAxODMsIDE4MH0KKwkJLmlycXMJCT0geyAxODAsIDE4MCwgMTgwLCAxODAgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODUsIDE4NiwgMTg3LCAxODR9CisJCS5pcnFzCQk9IHsgMTg0LCAxODQsIDE4NCwgMTg0IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTg5LCAxODYsIDE4NywgMTg4fQorCQkuaXJxcwkJPSB7IDE4OCwgMTg4LCAxODgsIDE4OCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE5MywgMTk0LCAxOTUsIDE5Mn0KKwkJLmlycXMJCT0geyAxOTIsIDE5MiwgMTkyLCAxOTIgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmVhMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxOTYsIDE5OCwgMTk5LCAxOTZ9CisJCS5pcnFzCQk9IHsgMTk2LCAxOTYsIDE5NiwgMTk2IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjAxLCAyMDIsIDIwMywgMjAwfQorCQkuaXJxcwkJPSB7IDIwMCwgMjAwLCAyMDAsIDIwMCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWIwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIwNSwgMjA2LCAyMDcsIDIwNH0KKwkJLmlycXMJCT0geyAyMDQsIDIwNCwgMjA0LCAyMDQgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmViODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDksIDIxMCwgMjExLCAyMDh9CisJCS5pcnFzCQk9IHsgMjA4LCAyMDgsIDIwOCwgMjA4IH0KIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMjkwLDE3ICsyMzYsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDE1MywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAxNTQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMTUyLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwppbmRleCBlOThkYzQ0Li44MjBkZmIyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTSDcyMDMgYW5kIFNINzI2MyBTZXR1cAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDUwICsxOCwyNyBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCi0JRE1BQzBfREVJLCBETUFDMF9IRUksIERNQUMxX0RFSSwgRE1BQzFfSEVJLAotCURNQUMyX0RFSSwgRE1BQzJfSEVJLCBETUFDM19ERUksIERNQUMzX0hFSSwKLQlETUFDNF9ERUksIERNQUM0X0hFSSwgRE1BQzVfREVJLCBETUFDNV9IRUksCi0JRE1BQzZfREVJLCBETUFDNl9IRUksIERNQUM3X0RFSSwgRE1BQzdfSEVJLAorCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKIAlVU0IsIExDREMsIENNVDAsIENNVDEsIEJTQywgV0RULAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAorCisJTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKKwlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwgTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwKKwogCUFEQ19BREksCi0JSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksIElJQzMwX1RFSSwKLQlJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwgSUlDMzFfVEVJLAotCUlJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLCBJSUMzMl9URUksCi0JSUlDMzNfU1RQSSwgSUlDMzNfTkFLSSwgSUlDMzNfUlhJLCBJSUMzM19UWEksIElJQzMzX1RFSSwKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAotCVNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEksCi0JU1NVMF9TU0VSSSwgU1NVMF9TU1JYSSwgU1NVMF9TU1RYSSwKLQlTU1UxX1NTRVJJLCBTU1UxX1NTUlhJLCBTU1UxX1NTVFhJLAorCisJSUlDMzAsIElJQzMxLCBJSUMzMiwgSUlDMzMsCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisKKwlTU1UwLCBTU1UxLAorCiAJU1NJMF9TU0lJLCBTU0kxX1NTSUksIFNTSTJfU1NJSSwgU1NJM19TU0lJLAogCiAJLyogUk9NLURFQywgU0RISSwgU1JDLCBhbmQgSUVCIGFyZSBTSDcyNjMgc3BlY2lmaWMgKi8KLQlST01ERUNfSVNZLCBST01ERUNfSUVSUiwgUk9NREVDX0lBUkcsIFJPTURFQ19JU0VDLCBST01ERUNfSUJVRiwKLQlST01ERUNfSVJFQURZLAotCi0JRkxDVExfRkxTVEVJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxUUkVRMUksCi0KLQlTREhJMywgU0RISTAsIFNESEkxLAotCi0JUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCwKLQlSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsIFJDQU4wX1NMRSwKLQlSQ0FOMV9FUlMsIFJDQU4xX09WUiwgUkNBTjFfUk0wLCBSQ0FOMV9STTEsIFJDQU4xX1NMRSwKLQotCVNSQ19PVkYsIFNSQ19PREZJLCBTUkNfSURFSSwgSUVCSSwKKwlST01ERUMsIEZMQ1RMLCBTREhJLCBSVEMsIFJDQU4wLCBSQ0FOMSwKKwlTUkMsIElFQkksCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAotCU1UVTBfQUJDRCwgTVRVMF9WRUYsIE1UVTFfQUIsIE1UVTFfVlUsIE1UVTJfQUIsIE1UVTJfVlUsCi0JTVRVM19BQkNELCBNVFU0X0FCQ0QsCi0JSUlDMzAsIElJQzMxLCBJSUMzMiwgSUlDMzMsIFNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAotCVNTVTAsIFNTVTEsIFJPTURFQywgU0RISSwgRkxDVEwsIFJUQywgUkNBTjAsIFJDQU4xLCBTUkMKKwlQSU5ULAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC03Myw3OSArNTAsODAgQEAKIAlJTlRDX0lSUShQSU5UMiwgODIpLCBJTlRDX0lSUShQSU5UMywgODMpLAogCUlOVENfSVJRKFBJTlQ0LCA4NCksIElOVENfSVJRKFBJTlQ1LCA4NSksCiAJSU5UQ19JUlEoUElOVDYsIDg2KSwgSU5UQ19JUlEoUElOVDcsIDg3KSwKLQlJTlRDX0lSUShETUFDMF9ERUksIDEwOCksIElOVENfSVJRKERNQUMwX0hFSSwgMTA5KSwKLQlJTlRDX0lSUShETUFDMV9ERUksIDExMiksIElOVENfSVJRKERNQUMxX0hFSSwgMTEzKSwKLQlJTlRDX0lSUShETUFDMl9ERUksIDExNiksIElOVENfSVJRKERNQUMyX0hFSSwgMTE3KSwKLQlJTlRDX0lSUShETUFDM19ERUksIDEyMCksIElOVENfSVJRKERNQUMzX0hFSSwgMTIxKSwKLQlJTlRDX0lSUShETUFDNF9ERUksIDEyNCksIElOVENfSVJRKERNQUM0X0hFSSwgMTI1KSwKLQlJTlRDX0lSUShETUFDNV9ERUksIDEyOCksIElOVENfSVJRKERNQUM1X0hFSSwgMTI5KSwKLQlJTlRDX0lSUShETUFDNl9ERUksIDEzMiksIElOVENfSVJRKERNQUM2X0hFSSwgMTMzKSwKLQlJTlRDX0lSUShETUFDN19ERUksIDEzNiksIElOVENfSVJRKERNQUM3X0hFSSwgMTM3KSwKKwlJTlRDX0lSUShETUFDMCwgMTA4KSwgSU5UQ19JUlEoRE1BQzAsIDEwOSksCisJSU5UQ19JUlEoRE1BQzEsIDExMiksIElOVENfSVJRKERNQUMxLCAxMTMpLAorCUlOVENfSVJRKERNQUMyLCAxMTYpLCBJTlRDX0lSUShETUFDMiwgMTE3KSwKKwlJTlRDX0lSUShETUFDMywgMTIwKSwgSU5UQ19JUlEoRE1BQzMsIDEyMSksCisJSU5UQ19JUlEoRE1BQzQsIDEyNCksIElOVENfSVJRKERNQUM0LCAxMjUpLAorCUlOVENfSVJRKERNQUM1LCAxMjgpLCBJTlRDX0lSUShETUFDNSwgMTI5KSwKKwlJTlRDX0lSUShETUFDNiwgMTMyKSwgSU5UQ19JUlEoRE1BQzYsIDEzMyksCisJSU5UQ19JUlEoRE1BQzcsIDEzNiksIElOVENfSVJRKERNQUM3LCAxMzcpLAogCUlOVENfSVJRKFVTQiwgMTQwKSwgSU5UQ19JUlEoTENEQywgMTQxKSwKIAlJTlRDX0lSUShDTVQwLCAxNDIpLCBJTlRDX0lSUShDTVQxLCAxNDMpLAogCUlOVENfSVJRKEJTQywgMTQ0KSwgSU5UQ19JUlEoV0RULCAxNDUpLAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDE0NiksIElOVENfSVJRKE1UVTJfVEdJMEIsIDE0NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTQ4KSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTQ5KSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxNTApLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDE1MSksIElOVENfSVJRKE1UVTJfVEdJMEYsIDE1MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTUzKSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTU0KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxNTUpLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxNTYpLAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDE1NyksIElOVENfSVJRKE1UVTJfVEdJMkIsIDE1OCksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTU5KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTYwKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxNjEpLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxNjIpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDE2MyksIElOVENfSVJRKE1UVTJfVEdJM0QsIDE2NCksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNDYpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE0NyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNDgpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE0OSksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE1MCksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE1MSksIElOVENfSVJRKE1UVTBfVkVGLCAxNTIpLAorCUlOVENfSVJRKE1UVTFfQUIsIDE1MyksIElOVENfSVJRKE1UVTFfQUIsIDE1NCksCisJSU5UQ19JUlEoTVRVMV9WVSwgMTU1KSwgSU5UQ19JUlEoTVRVMV9WVSwgMTU2KSwKKwlJTlRDX0lSUShNVFUyX0FCLCAxNTcpLCBJTlRDX0lSUShNVFUyX0FCLCAxNTgpLAorCUlOVENfSVJRKE1UVTJfVlUsIDE1OSksIElOVENfSVJRKE1UVTJfVlUsIDE2MCksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxNjEpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MiksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxNjMpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE2NCksCiAJSU5UQ19JUlEoTVRVMl9UQ0kzViwgMTY1KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxNjYpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxNjcpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE2OCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE2OSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxNjYpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE2NyksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxNjgpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE2OSksCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTcwKSwKIAlJTlRDX0lSUShBRENfQURJLCAxNzEpLAotCUlOVENfSVJRKElJQzMwX1NUUEksIDE3MiksIElOVENfSVJRKElJQzMwX05BS0ksIDE3MyksCi0JSU5UQ19JUlEoSUlDMzBfUlhJLCAxNzQpLCBJTlRDX0lSUShJSUMzMF9UWEksIDE3NSksCi0JSU5UQ19JUlEoSUlDMzBfVEVJLCAxNzYpLAotCUlOVENfSVJRKElJQzMxX1NUUEksIDE3NyksIElOVENfSVJRKElJQzMxX05BS0ksIDE3OCksCi0JSU5UQ19JUlEoSUlDMzFfUlhJLCAxNzkpLCBJTlRDX0lSUShJSUMzMV9UWEksIDE4MCksCi0JSU5UQ19JUlEoSUlDMzFfVEVJLCAxODEpLAotCUlOVENfSVJRKElJQzMyX1NUUEksIDE4MiksIElOVENfSVJRKElJQzMyX05BS0ksIDE4MyksCi0JSU5UQ19JUlEoSUlDMzJfUlhJLCAxODQpLCBJTlRDX0lSUShJSUMzMl9UWEksIDE4NSksCi0JSU5UQ19JUlEoSUlDMzJfVEVJLCAxODYpLAotCUlOVENfSVJRKElJQzMzX1NUUEksIDE4NyksIElOVENfSVJRKElJQzMzX05BS0ksIDE4OCksCi0JSU5UQ19JUlEoSUlDMzNfUlhJLCAxODkpLCBJTlRDX0lSUShJSUMzM19UWEksIDE5MCksCi0JSU5UQ19JUlEoSUlDMzNfVEVJLCAxOTEpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMTkyKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAxOTMpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMTk0KSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAxOTUpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMTk2KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAxOTcpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMTk4KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAxOTkpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMjAwKSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAyMDEpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMjAyKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAyMDMpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMjA0KSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAyMDUpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMjA2KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAyMDcpLAotCUlOVENfSVJRKFNTVTBfU1NFUkksIDIwOCksIElOVENfSVJRKFNTVTBfU1NSWEksIDIwOSksCi0JSU5UQ19JUlEoU1NVMF9TU1RYSSwgMjEwKSwKLQlJTlRDX0lSUShTU1UxX1NTRVJJLCAyMTEpLCBJTlRDX0lSUShTU1UxX1NTUlhJLCAyMTIpLAotCUlOVENfSVJRKFNTVTFfU1NUWEksIDIxMyksCisJSU5UQ19JUlEoSUlDMzAsIDE3MiksIElOVENfSVJRKElJQzMwLCAxNzMpLAorCUlOVENfSVJRKElJQzMwLCAxNzQpLCBJTlRDX0lSUShJSUMzMCwgMTc1KSwKKwlJTlRDX0lSUShJSUMzMCwgMTc2KSwKKwlJTlRDX0lSUShJSUMzMSwgMTc3KSwgSU5UQ19JUlEoSUlDMzEsIDE3OCksCisJSU5UQ19JUlEoSUlDMzEsIDE3OSksIElOVENfSVJRKElJQzMxLCAxODApLAorCUlOVENfSVJRKElJQzMxLCAxODEpLAorCUlOVENfSVJRKElJQzMyLCAxODIpLCBJTlRDX0lSUShJSUMzMiwgMTgzKSwKKwlJTlRDX0lSUShJSUMzMiwgMTg0KSwgSU5UQ19JUlEoSUlDMzIsIDE4NSksCisJSU5UQ19JUlEoSUlDMzIsIDE4NiksCisJSU5UQ19JUlEoSUlDMzMsIDE4NyksIElOVENfSVJRKElJQzMzLCAxODgpLAorCUlOVENfSVJRKElJQzMzLCAxODkpLCBJTlRDX0lSUShJSUMzMywgMTkwKSwKKwlJTlRDX0lSUShJSUMzMywgMTkxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTkyKSwgSU5UQ19JUlEoU0NJRjAsIDE5MyksCisJSU5UQ19JUlEoU0NJRjAsIDE5NCksIElOVENfSVJRKFNDSUYwLCAxOTUpLAorCUlOVENfSVJRKFNDSUYxLCAxOTYpLCBJTlRDX0lSUShTQ0lGMSwgMTk3KSwKKwlJTlRDX0lSUShTQ0lGMSwgMTk4KSwgSU5UQ19JUlEoU0NJRjEsIDE5OSksCisJSU5UQ19JUlEoU0NJRjIsIDIwMCksIElOVENfSVJRKFNDSUYyLCAyMDEpLAorCUlOVENfSVJRKFNDSUYyLCAyMDIpLCBJTlRDX0lSUShTQ0lGMiwgMjAzKSwKKwlJTlRDX0lSUShTQ0lGMywgMjA0KSwgSU5UQ19JUlEoU0NJRjMsIDIwNSksCisJSU5UQ19JUlEoU0NJRjMsIDIwNiksIElOVENfSVJRKFNDSUYzLCAyMDcpLAorCUlOVENfSVJRKFNTVTAsIDIwOCksIElOVENfSVJRKFNTVTAsIDIwOSksCisJSU5UQ19JUlEoU1NVMCwgMjEwKSwKKwlJTlRDX0lSUShTU1UxLCAyMTEpLCBJTlRDX0lSUShTU1UxLCAyMTIpLAorCUlOVENfSVJRKFNTVTEsIDIxMyksCiAJSU5UQ19JUlEoU1NJMF9TU0lJLCAyMTQpLCBJTlRDX0lSUShTU0kxX1NTSUksIDIxNSksCiAJSU5UQ19JUlEoU1NJMl9TU0lJLCAyMTYpLCBJTlRDX0lSUShTU0kzX1NTSUksIDIxNyksCi0JSU5UQ19JUlEoRkxDVExfRkxTVEVJLCAyMjQpLCBJTlRDX0lSUShGTENUTF9GTFRFTkRJLCAyMjUpLAotCUlOVENfSVJRKEZMQ1RMX0ZMVFJFUTBJLCAyMjYpLCBJTlRDX0lSUShGTENUTF9GTFRSRVExSSwgMjI3KSwKLQlJTlRDX0lSUShSVENfQVJNLCAyMzEpLCBJTlRDX0lSUShSVENfUFJELCAyMzIpLAotCUlOVENfSVJRKFJUQ19DVVAsIDIzMyksCi0JSU5UQ19JUlEoUkNBTjBfRVJTLCAyMzQpLCBJTlRDX0lSUShSQ0FOMF9PVlIsIDIzNSksCi0JSU5UQ19JUlEoUkNBTjBfUk0wLCAyMzYpLCBJTlRDX0lSUShSQ0FOMF9STTEsIDIzNyksCi0JSU5UQ19JUlEoUkNBTjBfU0xFLCAyMzgpLAotCUlOVENfSVJRKFJDQU4xX0VSUywgMjM5KSwgSU5UQ19JUlEoUkNBTjFfT1ZSLCAyNDApLAotCUlOVENfSVJRKFJDQU4xX1JNMCwgMjQxKSwgSU5UQ19JUlEoUkNBTjFfUk0xLCAyNDIpLAotCUlOVENfSVJRKFJDQU4xX1NMRSwgMjQzKSwKKwlJTlRDX0lSUShGTENUTCwgMjI0KSwgSU5UQ19JUlEoRkxDVEwsIDIyNSksCisJSU5UQ19JUlEoRkxDVEwsIDIyNiksIElOVENfSVJRKEZMQ1RMLCAyMjcpLAorCUlOVENfSVJRKFJUQywgMjMxKSwgSU5UQ19JUlEoUlRDLCAyMzIpLAorCUlOVENfSVJRKFJUQywgMjMzKSwKKwlJTlRDX0lSUShSQ0FOMCwgMjM0KSwgSU5UQ19JUlEoUkNBTjAsIDIzNSksCisJSU5UQ19JUlEoUkNBTjAsIDIzNiksIElOVENfSVJRKFJDQU4wLCAyMzcpLAorCUlOVENfSVJRKFJDQU4wLCAyMzgpLAorCUlOVENfSVJRKFJDQU4xLCAyMzkpLCBJTlRDX0lSUShSQ0FOMSwgMjQwKSwKKwlJTlRDX0lSUShSQ0FOMSwgMjQxKSwgSU5UQ19JUlEoUkNBTjEsIDI0MiksCisJSU5UQ19JUlEoUkNBTjEsIDI0MyksCiAKIAkvKiBTSDcyNjMtc3BlY2lmaWMgdHJhc2ggKi8KICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzCi0JSU5UQ19JUlEoUk9NREVDX0lTWSwgMjE4KSwgSU5UQ19JUlEoUk9NREVDX0lFUlIsIDIxOSksCi0JSU5UQ19JUlEoUk9NREVDX0lBUkcsIDIyMCksIElOVENfSVJRKFJPTURFQ19JU0VDLCAyMjEpLAotCUlOVENfSVJRKFJPTURFQ19JQlVGLCAyMjIpLCBJTlRDX0lSUShST01ERUNfSVJFQURZLCAyMjMpLAorCUlOVENfSVJRKFJPTURFQywgMjE4KSwgSU5UQ19JUlEoUk9NREVDLCAyMTkpLAorCUlOVENfSVJRKFJPTURFQywgMjIwKSwgSU5UQ19JUlEoUk9NREVDLCAyMjEpLAorCUlOVENfSVJRKFJPTURFQywgMjIyKSwgSU5UQ19JUlEoUk9NREVDLCAyMjMpLAogCi0JSU5UQ19JUlEoU0RISTMsIDIyOCksIElOVENfSVJRKFNESEkwLCAyMjkpLCBJTlRDX0lSUShTREhJMSwgMjMwKSwKKwlJTlRDX0lSUShTREhJLCAyMjgpLCBJTlRDX0lSUShTREhJLCAyMjkpLAorCUlOVENfSVJRKFNESEksIDIzMCksCiAKLQlJTlRDX0lSUShTUkNfT1ZGLCAyNDQpLCBJTlRDX0lSUShTUkNfT0RGSSwgMjQ1KSwKLQlJTlRDX0lSUShTUkNfSURFSSwgMjQ2KSwKKwlJTlRDX0lSUShTUkMsIDI0NCksIElOVENfSVJRKFNSQywgMjQ1KSwKKwlJTlRDX0lSUShTUkMsIDI0NiksCiAKIAlJTlRDX0lSUShJRUJJLCAyNDcpLAogI2VuZGlmCkBAIC0xNTQsNTAgKzEzMiw2IEBACiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfREVJLCBETUFDMF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSSwgRE1BQzFfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUksIERNQUMyX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMywgRE1BQzNfREVJLCBETUFDM19IRUkpLAotCUlOVENfR1JPVVAoRE1BQzQsIERNQUM0X0RFSSwgRE1BQzRfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM1LCBETUFDNV9ERUksIERNQUM1X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNiwgRE1BQzZfREVJLCBETUFDNl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzcsIERNQUM3X0RFSSwgRE1BQzdfSEVJKSwKLQlJTlRDX0dST1VQKE1UVTBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUwX1ZFRiwgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiksCi0JSU5UQ19HUk9VUChNVFUxX0FCLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCKSwKLQlJTlRDX0dST1VQKE1UVTFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyX1ZVLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVKSwKLQlJTlRDX0dST1VQKE1UVTNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoSUlDMzAsIElJQzMwX1NUUEksIElJQzMwX05BS0ksIElJQzMwX1JYSSwgSUlDMzBfVFhJLAotCQkgICBJSUMzMF9URUkpLAotCUlOVENfR1JPVVAoSUlDMzEsIElJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLAotCQkgICBJSUMzMV9URUkpLAotCUlOVENfR1JPVVAoSUlDMzIsIElJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLAotCQkgICBJSUMzMl9URUkpLAotCUlOVENfR1JPVVAoSUlDMzMsIElJQzMzX1NUUEksIElJQzMzX05BS0ksIElJQzMzX1JYSSwgSUlDMzNfVFhJLAotCQkgICBJSUMzM19URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjMsIFNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSksCi0JSU5UQ19HUk9VUChTU1UwLCBTU1UwX1NTRVJJLCBTU1UwX1NTUlhJLCBTU1UwX1NTVFhJKSwKLQlJTlRDX0dST1VQKFNTVTEsIFNTVTFfU1NFUkksIFNTVTFfU1NSWEksIFNTVTFfU1NUWEkpLAotCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxUUkVRMEksCi0JCSAgIEZMQ1RMX0ZMVFJFUTFJKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCksCi0JSU5UQ19HUk9VUChSQ0FOMCwgUkNBTjBfRVJTLCBSQ0FOMF9PVlIsIFJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCQkgICBSQ0FOMF9TTEUpLAotCUlOVENfR1JPVVAoUkNBTjEsIFJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwKLQkJICAgUkNBTjFfU0xFKSwKLQotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMKLQlJTlRDX0dST1VQKFJPTURFQywgUk9NREVDX0lTWSwgUk9NREVDX0lFUlIsIFJPTURFQ19JQVJHLAotCQkgICBST01ERUNfSVNFQywgUk9NREVDX0lCVUYsIFJPTURFQ19JUkVBRFkpLAotCUlOVENfR1JPVVAoU0RISSwgU0RISTMsIFNESEkwLCBTREhJMSksCi0JSU5UQ19HUk9VUChTUkMsIFNSQ19PVkYsIFNSQ19PREZJLCBTUkNfSURFSSksCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yNDIsMjIgKzE3NiwyMiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAxOTMsIDE5NCwgMTk1LCAxOTIgfSwKKwkJLmlycXMJCT0gIHsgMTkyLCAxOTIsIDE5MiwgMTkyIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAxOTcsIDE5OCwgMTk5LCAxOTYgfSwKKwkJLmlycXMJCT0gIHsgMTk2LCAxOTYsIDE5NiwgMTk2IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTkwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyMDEsIDIwMiwgMjAzLCAyMDAgfSwKKwkJLmlycXMJCT0gIHsgMjAwLCAyMDAsIDIwMCwgMjAwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyMDUsIDIwNiwgMjA3LCAyMDQgfSwKKwkJLmlycXMJCT0gIHsgMjA0LCAyMDQsIDIwNCwgMjA0IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTI3OCwxNyArMjEyLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjMzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIzMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKaW5kZXggZTZkNGVjNC4uYzQ2YTgzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDcyMDYgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBZb3NoaW5vcmkgU2F0bworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOSwzNCArMjAsMjMgQEAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKIAlBRENfQURJMCwgQURDX0FESTEsCi0JRE1BQzBfREVJLCBETUFDMF9IRUksIERNQUMxX0RFSSwgRE1BQzFfSEVJLAotCURNQUMyX0RFSSwgRE1BQzJfSEVJLCBETUFDM19ERUksIERNQUMzX0hFSSwKLQlETUFDNF9ERUksIERNQUM0X0hFSSwgRE1BQzVfREVJLCBETUFDNV9IRUksCi0JRE1BQzZfREVJLCBETUFDNl9IRUksIERNQUM3X0RFSSwgRE1BQzdfSEVJLAotCUNNVDAsIENNVDEsIEJTQywgV0RULAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCi0JUE9FMl9PRUkxLCBQT0UyX09FSTIsCi0JTVRVMlNfVEdJM0EsIE1UVTJTX1RHSTNCLCBNVFUyU19UR0kzQywgTVRVMlNfVEdJM0QsIE1UVTJTX1RDSTNWLAotCU1UVTJTX1RHSTRBLCBNVFUyU19UR0k0QiwgTVRVMlNfVEdJNEMsIE1UVTJTX1RHSTRELCBNVFUyU19UQ0k0ViwKLQlNVFUyU19UR0k1VSwgTVRVMlNfVEdJNVYsIE1UVTJTX1RHSTVXLAotCVBPRTJfT0VJMywKLQlJSUMzX1NUUEksIElJQzNfTkFLSSwgSUlDM19SWEksIElJQzNfVFhJLCBJSUMzX1RFSSwKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAotCVNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEksCiAKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUElOVCwgRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAorCURNQUMwLCBETUFDMSwgRE1BQzIsIERNQUMzLCBETUFDNCwgRE1BQzUsIERNQUM2LCBETUFDNywKKwogCU1UVTBfQUJDRCwgTVRVMF9WRUYsIE1UVTFfQUIsIE1UVTFfVlUsIE1UVTJfQUIsIE1UVTJfVlUsCiAJTVRVM19BQkNELCBNVFU0X0FCQ0QsIE1UVTUsIFBPRTJfMTIsIE1UVTNTX0FCQ0QsIE1UVTRTX0FCQ0QsIE1UVTVTLAotCUlJQzMsIFNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAorCUlJQzMsCisKKwlDTVQwLCBDTVQxLCBCU0MsIFdEVCwKKworCU1UVTJfVENJM1YsIE1UVTJfVENJNFYsIE1UVTJTX1RDSTNWLCBNVFUyU19UQ0k0ViwKKworCVBPRTJfT0VJMywKKworCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyAqLworCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU5LDg2ICs0OSw1OCBAQAogCUlOVENfSVJRKFBJTlQ0LCA4NCksIElOVENfSVJRKFBJTlQ1LCA4NSksCiAJSU5UQ19JUlEoUElOVDYsIDg2KSwgSU5UQ19JUlEoUElOVDcsIDg3KSwKIAlJTlRDX0lSUShBRENfQURJMCwgOTIpLCBJTlRDX0lSUShBRENfQURJMSwgOTYpLAotCUlOVENfSVJRKERNQUMwX0RFSSwgMTA4KSwgSU5UQ19JUlEoRE1BQzBfSEVJLCAxMDkpLAotCUlOVENfSVJRKERNQUMxX0RFSSwgMTEyKSwgSU5UQ19JUlEoRE1BQzFfSEVJLCAxMTMpLAotCUlOVENfSVJRKERNQUMyX0RFSSwgMTE2KSwgSU5UQ19JUlEoRE1BQzJfSEVJLCAxMTcpLAotCUlOVENfSVJRKERNQUMzX0RFSSwgMTIwKSwgSU5UQ19JUlEoRE1BQzNfSEVJLCAxMjEpLAotCUlOVENfSVJRKERNQUM0X0RFSSwgMTI0KSwgSU5UQ19JUlEoRE1BQzRfSEVJLCAxMjUpLAotCUlOVENfSVJRKERNQUM1X0RFSSwgMTI4KSwgSU5UQ19JUlEoRE1BQzVfSEVJLCAxMjkpLAotCUlOVENfSVJRKERNQUM2X0RFSSwgMTMyKSwgSU5UQ19JUlEoRE1BQzZfSEVJLCAxMzMpLAotCUlOVENfSVJRKERNQUM3X0RFSSwgMTM2KSwgSU5UQ19JUlEoRE1BQzdfSEVJLCAxMzcpLAorCUlOVENfSVJRKERNQUMwLCAxMDgpLCBJTlRDX0lSUShETUFDMCwgMTA5KSwKKwlJTlRDX0lSUShETUFDMSwgMTEyKSwgSU5UQ19JUlEoRE1BQzEsIDExMyksCisJSU5UQ19JUlEoRE1BQzIsIDExNiksIElOVENfSVJRKERNQUMyLCAxMTcpLAorCUlOVENfSVJRKERNQUMzLCAxMjApLCBJTlRDX0lSUShETUFDMywgMTIxKSwKKwlJTlRDX0lSUShETUFDNCwgMTI0KSwgSU5UQ19JUlEoRE1BQzQsIDEyNSksCisJSU5UQ19JUlEoRE1BQzUsIDEyOCksIElOVENfSVJRKERNQUM1LCAxMjkpLAorCUlOVENfSVJRKERNQUM2LCAxMzIpLCBJTlRDX0lSUShETUFDNiwgMTMzKSwKKwlJTlRDX0lSUShETUFDNywgMTM2KSwgSU5UQ19JUlEoRE1BQzcsIDEzNyksCiAJSU5UQ19JUlEoQ01UMCwgMTQwKSwgSU5UQ19JUlEoQ01UMSwgMTQ0KSwKIAlJTlRDX0lSUShCU0MsIDE0OCksIElOVENfSVJRKFdEVCwgMTUyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAxNTYpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAxNTcpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDE1OCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDE1OSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMTYwKSwKLQlJTlRDX0lSUShNVFUyX1RHSTBFLCAxNjEpLCBJTlRDX0lSUShNVFUyX1RHSTBGLCAxNjIpLAotCUlOVENfSVJRKE1UVTJfVEdJMUEsIDE2NCksIElOVENfSVJRKE1UVTJfVEdJMUIsIDE2NSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kxViwgMTY4KSwgSU5UQ19JUlEoTVRVMl9UQ0kxVSwgMTY5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTJBLCAxNzIpLCBJTlRDX0lSUShNVFUyX1RHSTJCLCAxNzMpLAotCUlOVENfSVJRKE1UVTJfVENJMlYsIDE3NiksIElOVENfSVJRKE1UVTJfVENJMlUsIDE3NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQSwgMTgwKSwgSU5UQ19JUlEoTVRVMl9UR0kzQiwgMTgxKSwKLQlJTlRDX0lSUShNVFUyX1RHSTNDLCAxODIpLCBJTlRDX0lSUShNVFUyX1RHSTNELCAxODMpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTU2KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNTcpLAorCUlOVENfSVJRKE1UVTBfQUJDRCwgMTU4KSwgSU5UQ19JUlEoTVRVMF9BQkNELCAxNTkpLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNjApLCBJTlRDX0lSUShNVFUwX1ZFRiwgMTYxKSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTYyKSwKKwlJTlRDX0lSUShNVFUxX0FCLCAxNjQpLCBJTlRDX0lSUShNVFUxX0FCLCAxNjUpLAorCUlOVENfSVJRKE1UVTFfVlUsIDE2OCksIElOVENfSVJRKE1UVTFfVlUsIDE2OSksCisJSU5UQ19JUlEoTVRVMl9BQiwgMTcyKSwgSU5UQ19JUlEoTVRVMl9BQiwgMTczKSwKKwlJTlRDX0lSUShNVFUyX1ZVLCAxNzYpLCBJTlRDX0lSUShNVFUyX1ZVLCAxNzcpLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTgwKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxODEpLAorCUlOVENfSVJRKE1UVTNfQUJDRCwgMTgyKSwgSU5UQ19JUlEoTVRVM19BQkNELCAxODMpLAogCUlOVENfSVJRKE1UVTJfVENJM1YsIDE4NCksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QSwgMTg4KSwgSU5UQ19JUlEoTVRVMl9UR0k0QiwgMTg5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRDLCAxOTApLCBJTlRDX0lSUShNVFUyX1RHSTRELCAxOTEpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTg4KSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxODkpLAorCUlOVENfSVJRKE1UVTRfQUJDRCwgMTkwKSwgSU5UQ19JUlEoTVRVNF9BQkNELCAxOTEpLAogCUlOVENfSVJRKE1UVTJfVENJNFYsIDE5MiksCi0JSU5UQ19JUlEoTVRVMl9UR0k1VSwgMTk2KSwgSU5UQ19JUlEoTVRVMl9UR0k1ViwgMTk3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTVXLCAxOTgpLAotCUlOVENfSVJRKFBPRTJfT0VJMSwgMjAwKSwgSU5UQ19JUlEoUE9FMl9PRUkyLCAyMDEpLAotCUlOVENfSVJRKE1UVTJTX1RHSTNBLCAyMDQpLCBJTlRDX0lSUShNVFUyU19UR0kzQiwgMjA1KSwKLQlJTlRDX0lSUShNVFUyU19UR0kzQywgMjA2KSwgSU5UQ19JUlEoTVRVMlNfVEdJM0QsIDIwNyksCisJSU5UQ19JUlEoTVRVNSwgMTk2KSwgSU5UQ19JUlEoTVRVNSwgMTk3KSwKKwlJTlRDX0lSUShNVFU1LCAxOTgpLAorCUlOVENfSVJRKFBPRTJfMTIsIDIwMCksIElOVENfSVJRKFBPRTJfMTIsIDIwMSksCisJSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA0KSwgSU5UQ19JUlEoTVRVM1NfQUJDRCwgMjA1KSwKKwlJTlRDX0lSUShNVFUzU19BQkNELCAyMDYpLCBJTlRDX0lSUShNVFUzU19BQkNELCAyMDcpLAogCUlOVENfSVJRKE1UVTJTX1RDSTNWLCAyMDgpLAotCUlOVENfSVJRKE1UVTJTX1RHSTRBLCAyMTIpLCBJTlRDX0lSUShNVFUyU19UR0k0QiwgMjEzKSwKLQlJTlRDX0lSUShNVFUyU19UR0k0QywgMjE0KSwgSU5UQ19JUlEoTVRVMlNfVEdJNEQsIDIxNSksCisJSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjEyKSwgSU5UQ19JUlEoTVRVNFNfQUJDRCwgMjEzKSwKKwlJTlRDX0lSUShNVFU0U19BQkNELCAyMTQpLCBJTlRDX0lSUShNVFU0U19BQkNELCAyMTUpLAogCUlOVENfSVJRKE1UVTJTX1RDSTRWLCAyMTYpLAotCUlOVENfSVJRKE1UVTJTX1RHSTVVLCAyMjApLCBJTlRDX0lSUShNVFUyU19UR0k1ViwgMjIxKSwKLQlJTlRDX0lSUShNVFUyU19UR0k1VywgMjIyKSwKKwlJTlRDX0lSUShNVFU1UywgMjIwKSwgSU5UQ19JUlEoTVRVNVMsIDIyMSksCisJSU5UQ19JUlEoTVRVNVMsIDIyMiksCiAJSU5UQ19JUlEoUE9FMl9PRUkzLCAyMjQpLAotCUlOVENfSVJRKElJQzNfU1RQSSwgMjI4KSwgSU5UQ19JUlEoSUlDM19OQUtJLCAyMjkpLAotCUlOVENfSVJRKElJQzNfUlhJLCAyMzApLCBJTlRDX0lSUShJSUMzX1RYSSwgMjMxKSwKLQlJTlRDX0lSUShJSUMzX1RFSSwgMjMyKSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDI0MCksIElOVENfSVJRKFNDSUYwX0VSSSwgMjQxKSwKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDI0MiksIElOVENfSVJRKFNDSUYwX1RYSSwgMjQzKSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDI0NCksIElOVENfSVJRKFNDSUYxX0VSSSwgMjQ1KSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDI0NiksIElOVENfSVJRKFNDSUYxX1RYSSwgMjQ3KSwKLQlJTlRDX0lSUShTQ0lGMl9CUkksIDI0OCksIElOVENfSVJRKFNDSUYyX0VSSSwgMjQ5KSwKLQlJTlRDX0lSUShTQ0lGMl9SWEksIDI1MCksIElOVENfSVJRKFNDSUYyX1RYSSwgMjUxKSwKLQlJTlRDX0lSUShTQ0lGM19CUkksIDI1MiksIElOVENfSVJRKFNDSUYzX0VSSSwgMjUzKSwKLQlJTlRDX0lSUShTQ0lGM19SWEksIDI1NCksIElOVENfSVJRKFNDSUYzX1RYSSwgMjU1KSwKKwlJTlRDX0lSUShJSUMzLCAyMjgpLCBJTlRDX0lSUShJSUMzLCAyMjkpLAorCUlOVENfSVJRKElJQzMsIDIzMCksIElOVENfSVJRKElJQzMsIDIzMSksCisJSU5UQ19JUlEoSUlDMywgMjMyKSwKKwlJTlRDX0lSUShTQ0lGMCwgMjQwKSwgSU5UQ19JUlEoU0NJRjAsIDI0MSksCisJSU5UQ19JUlEoU0NJRjAsIDI0MiksIElOVENfSVJRKFNDSUYwLCAyNDMpLAorCUlOVENfSVJRKFNDSUYxLCAyNDQpLCBJTlRDX0lSUShTQ0lGMSwgMjQ1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMjQ2KSwgSU5UQ19JUlEoU0NJRjEsIDI0NyksCisJSU5UQ19JUlEoU0NJRjIsIDI0OCksIElOVENfSVJRKFNDSUYyLCAyNDkpLAorCUlOVENfSVJRKFNDSUYyLCAyNTApLCBJTlRDX0lSUShTQ0lGMiwgMjUxKSwKKwlJTlRDX0lSUShTQ0lGMywgMjUyKSwgSU5UQ19JUlEoU0NJRjMsIDI1MyksCisJSU5UQ19JUlEoU0NJRjMsIDI1NCksIElOVENfSVJRKFNDSUYzLCAyNTUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RFSSwgRE1BQzBfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ERUksIERNQUMxX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQzJfREVJLCBETUFDMl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzMsIERNQUMzX0RFSSwgRE1BQzNfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM0LCBETUFDNF9ERUksIERNQUM0X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNSwgRE1BQzVfREVJLCBETUFDNV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzYsIERNQUM2X0RFSSwgRE1BQzZfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM3LCBETUFDN19ERUksIERNQUM3X0hFSSksCi0JSU5UQ19HUk9VUChNVFUwX0FCQ0QsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQpLAotCUlOVENfR1JPVVAoTVRVMF9WRUYsIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYpLAotCUlOVENfR1JPVVAoTVRVMV9BQiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiksCi0JSU5UQ19HUk9VUChNVFUxX1ZVLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVKSwKLQlJTlRDX0dST1VQKE1UVTJfQUIsIE1UVTJfVEdJMkEsIE1UVTJfVEdJMkIpLAotCUlOVENfR1JPVVAoTVRVMl9WVSwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSksCi0JSU5UQ19HUk9VUChNVFUzX0FCQ0QsIE1UVTJfVEdJM0EsIE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVNF9BQkNELCBNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKLQlJTlRDX0dST1VQKE1UVTUsIE1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcpLAotCUlOVENfR1JPVVAoUE9FMl8xMiwgUE9FMl9PRUkxLCBQT0UyX09FSTIpLAotCUlOVENfR1JPVVAoTVRVM1NfQUJDRCwgTVRVMlNfVEdJM0EsIE1UVTJTX1RHSTNCLAotCQkgICBNVFUyU19UR0kzQywgTVRVMlNfVEdJM0QpLAotCUlOVENfR1JPVVAoTVRVNFNfQUJDRCwgTVRVMlNfVEdJNEEsIE1UVTJTX1RHSTRCLAotCQkgICBNVFUyU19UR0k0QywgTVRVMlNfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVNVMsIE1UVTJTX1RHSTVVLCBNVFUyU19UR0k1ViwgTVRVMlNfVEdJNVcpLAotCUlOVENfR1JPVVAoSUlDMywgSUlDM19TVFBJLCBJSUMzX05BS0ksIElJQzNfUlhJLCBJSUMzX1RYSSwgSUlDM19URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjMsIFNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTc0LDIyICsxMzYsMjIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZmU4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQxLCAyNDIsIDI0MywgMjQwIH0sCisJCS5pcnFzCQk9IHsgMjQwLCAyNDAsIDI0MCwgMjQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDUsIDI0NiwgMjQ3LCAyNDQgfSwKKwkJLmlycXMJCT0geyAyNDQsIDI0NCwgMjQ0LCAyNDQgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0OSwgMjUwLCAyNTEsIDI0OCB9LAorCQkuaXJxcwkJPSB7IDI0OCwgMjQ4LCAyNDgsIDI0OCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5ODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjUzLCAyNTQsIDI1NSwgMjUyIH0sCisJCS5pcnFzCQk9IHsgMjUyLCAyNTIsIDI1MiwgMjUyIH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IGUwN2M2OWUuLmVjYWIyNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtNCw2ICs0LDggQEAKIAogb2JqLXkJOj0gZXgubyBwcm9iZS5vIGVudHJ5Lm8gc2V0dXAtc2gzLm8KIAorb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkJKz0gc3dzdXNwLm8KKwogIyBDUFUgc3VidHlwZSBzZXR1cAogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkJKz0gc2V0dXAtc2g3NzA1Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpCSs9IHNldHVwLXNoNzcweC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggYjQxMDZkMC4uNTVkYTBmZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxjcHUvbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAhIE5PVEU6CiAhIEdOVSBhcyAoYXMgb2YgMi45LjEpIGNoYW5nZXMgYmYvcyBpbnRvIGJ0L3MgYW5kIGJyYSwgd2hlbiB0aGUgYWRkcmVzcwpAQCAtMTg3LDQ0ICsxODgsMzUgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQogCS8qIFVud2luZCB0aGUgc3RhY2sgYW5kIGptcCB0byB0aGUgZGVidWcgZW50cnkgKi8KIEVOVFJZKHNoX2Jpb3NfaGFuZGxlcikKLQltb3YubAlAcjE1KywgcjAKLQltb3YubAlAcjE1KywgcjEKLQltb3YubAlAcjE1KywgcjIKLQltb3YubAlAcjE1KywgcjMKLQltb3YubAlAcjE1KywgcjQKLQltb3YubAlAcjE1KywgcjUKLQltb3YubAlAcjE1KywgcjYKLQltb3YubAlAcjE1KywgcjcKLQlzdGMJc3IsIHI4Ci0JbW92LmwJMWYsIHI5CQkJISBCTCA9MSwgUkI9MSwgSU1BU0s9MHgwRgotCW9yCXI5LCByOAotCWxkYwlyOCwgc3IJCQkhIGhlcmUsIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYmFuawotCW1vdi5sCUByMTUrLCByOAotCW1vdi5sCUByMTUrLCByOQotCW1vdi5sCUByMTUrLCByMTAKLQltb3YubAlAcjE1KywgcjExCi0JbW92LmwJQHIxNSssIHIxMgotCW1vdi5sCUByMTUrLCByMTMKLQltb3YubAlAcjE1KywgcjE0Ci0JbW92LmwJQHIxNSssIGswCi0JbGRjLmwJQHIxNSssIHNwYwotCWxkcy5sCUByMTUrLCBwcgotCW1vdi5sCUByMTUrLCBrMQotCWxkYy5sCUByMTUrLCBnYnIKLQlsZHMubAlAcjE1KywgbWFjaAotCWxkcy5sCUByMTUrLCBtYWNsCi0JbW92CWswLCByMTUKKwltb3YubAkxZiwgcjgKKwlic3IJcmVzdG9yZV9yZWdzCisJIG5vcAorCisJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgorCW1vdglrNCwgcjE1CiAJIQogCW1vdi5sCTJmLCBrMAogCW1vdi5sCUBrMCwgazAKIAlqbXAJQGswCi0JIGxkYwlrMSwgc3NyCisJIGxkYwlrMywgc3NyCiAJLmFsaWduCTIKIDE6CS5sb25nCTB4MzAwMDAwZjAKIDI6CS5sb25nCWdkYl92YnJfdmVjdG9yCiAjZW5kaWYgLyogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgKi8KIAotcmVzdG9yZV9hbGw6CishIHJlc3RvcmVfcmVncygpCishIC0gcmVzdG9yZSByMCwgcjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjcgZnJvbSB0aGUgc3RhY2sKKyEgLSBzd2l0Y2ggYmFuaworISAtIHJlc3RvcmUgcjgsIHI5LCByMTAsIHIxMSwgcjEyLCByMTMsIHIxNCwgcjE1IGZyb20gdGhlIHN0YWNrCishIC0gcmVzdG9yZSBzcGMsIHByKiwgc3NyLCBnYnIsIG1hY2gsIG1hY2wsIHNraXAgZGVmYXVsdCB0cmEKKyEgazIgcmV0dXJucyBvcmlnaW5hbCBwcgorISBrMyByZXR1cm5zIG9yaWdpbmFsIHNyCishIGs0IHJldHVybnMgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgorISByOCBwYXNzZXMgU1IgYml0bWFzaywgb3ZlcndyaXR0ZW4gd2l0aCByZXN0b3JlZCBkYXRhIG9uIHJldHVybgorISByOSB0cmFzaGVkCishIEJMPTAgb24gZW50cnksIG9uIGV4aXQgQkw9MSAoZGVwZW5kaW5nIG9uIHI4KS4KKworRU5UUlkocmVzdG9yZV9yZWdzKQogCW1vdi5sCUByMTUrLCByMAogCW1vdi5sCUByMTUrLCByMQogCW1vdi5sCUByMTUrLCByMgpAQCAtMjM0LDEwICsyMjYsOSBAQAogCW1vdi5sCUByMTUrLCByNgogCW1vdi5sCUByMTUrLCByNwogCSEKLQlzdGMJc3IsIHI4Ci0JbW92LmwJN2YsIHI5Ci0Jb3IJcjksIHI4CQkJISBCTCA9MSwgUkI9MQotCWxkYwlyOCwgc3IJCQkhIGhlcmUsIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYmFuaworCXN0YwlzciwgcjkKKwlvcglyOCwgcjkKKwlsZGMJcjksIHNyCiAJIQogCW1vdi5sCUByMTUrLCByOAogCW1vdi5sCUByMTUrLCByOQpAQCAtMjQ4LDEyICsyMzksMjAgQEAKIAltb3YubAlAcjE1KywgcjE0CiAJbW92LmwJQHIxNSssIGs0CQkhIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIKIAlsZGMubAlAcjE1Kywgc3BjCi0JbGRzLmwJQHIxNSssIHByCisJbW92LmwJQHIxNSssIGsyCQkhIG9yaWdpbmFsIFBSCiAJbW92LmwJQHIxNSssIGszCQkhIG9yaWdpbmFsIFNSCiAJbGRjLmwJQHIxNSssIGdicgogCWxkcy5sCUByMTUrLCBtYWNoCiAJbGRzLmwJQHIxNSssIG1hY2wKLQlhZGQJIzQsIHIxNQkJCSEgU2tpcCBzeXNjYWxsIG51bWJlcgorCXJ0cworCSBhZGQJIzQsIHIxNQkJCSEgU2tpcCBzeXNjYWxsIG51bWJlcgorCityZXN0b3JlX2FsbDoKKwltb3YubAk3ZiwgcjgKKwlic3IJcmVzdG9yZV9yZWdzCisJIG5vcAorCisJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgogCSEKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAJbW92LmwJQHIxNSssIGswCQkhIERTUCBtb2RlIG1hcmtlcgpAQCAtMjk0LDcgKzI5Myw3IEBACiAJbW92CSMweGYwLCBrMQogCWV4dHUuYglrMSwgazEKIAlub3QJazEsIGsxCi0JYW5kCWsxLCBrMgkJCSEgTWFzayBvcmlnbmFsIFNSIHZhbHVlCisJYW5kCWsxLCBrMgkJCSEgTWFzayBvcmlnaW5hbCBTUiB2YWx1ZQogCSEKIAltb3YJazMsIGswCQkJISBDYWxjdWxhdGUgSU1BU0stYml0cwogCXNobHIyCWswCkBAIC0zMTMsNyArMzEyLDYgQEAKIAltb3YJIzAsIGsxCiAJbW92LmIJazEsIEBrMAogI2VuZGlmCi0JbW92LmwJQHIxNSssIGsyCQkhIHJlc3RvcmUgRVhQRVZUCiAJbW92CWs0LCByMTUKIAlydGUKIAkgbm9wCkBAIC0zMzYsODEgKzMzNCw1NSBAQAogRU5UUlkodmJyX2Jhc2UpCiAJLmxvbmcJMAogIQorISAweDEwMDogR2VuZXJhbCBleGNlcHRpb24gdmVjdG9yCishCiAJLmJhbGlnbiAJMjU2LDAsMjU2CiBnZW5lcmFsX2V4Y2VwdGlvbjoKLQltb3YubAkxZiwgazIKLQltb3YubAkyZiwgazMKLSNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMwotCW1vdi5sCUBrMiwgazIKKyNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMKKwlicmEJaGFuZGxlX2V4Y2VwdGlvbgorCSBzdHMJcHIsIGszCQkhIHNhdmUgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKyNlbHNlCisJbW92LmwJMWYsIGs0CisJbW92LmwJQGs0LCBrNAogCiAJISBJcyBFWFBFVlQgbGFyZ2VyIHRoYW4gMHg4MDA/CiAJbW92CSMweDgsIGswCiAJc2hsbDgJazAKLQljbXAvaHMJazAsIGsyCisJY21wL2hzCWswLCBrNAogCWJmCTBmCiAKIAkhIHRoZW4gYWRkIDB4NTgwIChrMiBpcyAweGQ4MCBvciAweGRhMCkKIAltb3YJIzB4NTgsIGswCiAJc2hsbDIJazAKIAlzaGxsMglrMAotCWFkZAlrMCwgazIKKwlhZGQJazAsIGs0CiAwOgotCWJyYQloYW5kbGVfZXhjZXB0aW9uCisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAogCSBub3AKLSNlbHNlCi0JYnJhCWhhbmRsZV9leGNlcHRpb24KLQkgbW92LmwJQGsyLCBrMgorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YJCWs0LCBrMgkJISBrZWVwIHZlY3RvciBpbiBrMgorCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG5vcAorCisJYnJhCWhhbmRsZV9leGNlcHRpb25fc3BlY2lhbAorCSBub3AKKworCS5hbGlnbgkyCisxOgkubG9uZwlFWFBFVlQKICNlbmRpZgotCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTI6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgotIQotIQogCi0JLmJhbGlnbiAJMTAyNCwwLDEwMjQKLXRsYl9taXNzOgotCW1vdi5sCTFmLCBrMgotCW1vdi5sCTRmLCBrMwotCWJyYQloYW5kbGVfZXhjZXB0aW9uCi0JIG1vdi5sCUBrMiwgazIKLSEKLQkuYmFsaWduIAk1MTIsMCw1MTIKLWludGVycnVwdDoKLQltb3YubAkzZiwgazMKLSNpZiBkZWZpbmVkKENPTkZJR19LR0RCKQotCW1vdi5sCTJmLCBrMgotCSEgRGVib3VuY2UgKGZpbHRlciBuZXN0ZWQgTk1JKQotCW1vdi5sCUBrMiwgazAKLQltb3YubAk1ZiwgazEKLQljbXAvZXEJazEsIGswCi0JYmYJMGYKLQltb3YubAk2ZiwgazEKLQl0YXMuYglAazEKLQlidAkwZgotCXJ0ZQotCSBub3AKLQkuYWxpZ24JMgotMjoJLmxvbmcJSU5URVZUCi01OgkubG9uZwlOTUlfVkVDCi02OgkubG9uZwlpbl9ubWkKLTA6Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfS0dEQikgKi8KLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgotCSBtb3YJIy0xLCBrMgkJISBpbnRlcnJ1cHQgZXhjZXB0aW9uIG1hcmtlcgorISBwcmVwYXJlX3N0YWNrX3NhdmVfZHNwKCkKKyEgLSByb2xsIGJhY2sgZ1JCCishIC0gc3dpdGNoIHRvIGtlcm5lbCBzdGFjaworISAtIHNhdmUgRFNQCishIGswIHJldHVybnMgb3JpZ2luYWwgc3AgKGFmdGVyIHJvbGwgYmFjaykKKyEgazEgdHJhc2hlZAorISBrMiB0cmFzaGVkCiAKLQkuYWxpZ24JMgotMToJLmxvbmcJRVhQRVZUCi0zOgkubG9uZwlyZXRfZnJvbV9pcnEKLTQ6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgotCi0hCi0hCi0JLmFsaWduCTIKLUVOVFJZKGhhbmRsZV9leGNlcHRpb24pCi0JISBVc2luZyBrMCwgazEgZm9yIHNjcmF0Y2ggcmVnaXN0ZXJzIChyMF9iYW5rMSwgcjFfYmFuayksCi0JISBzYXZlIGFsbCByZWdpc3RlcnMgb250byBzdGFjay4KLQkhCi0KK3ByZXBhcmVfc3RhY2tfc2F2ZV9kc3A6CiAjaWZkZWYgQ09ORklHX0dVU0EKIAkhIENoZWNrIGZvciByb2xsIGJhY2sgZ1JCIChVc2VyIGFuZCBLZXJuZWwpCiAJbW92CXIxNSwgazAKQEAgLTQzMCw3ICs0MDIsNyBAQAogMjoJbW92CWsxLCByMTUJCSEgU1AgPSByMQogMToKICNlbmRpZgotCisJISBTd2l0Y2ggdG8ga2VybmVsIHN0YWNrIGlmIG5lZWRlZAogCXN0Ywlzc3IsIGswCQkhIElzIGl0IGZyb20ga2VybmVsIHNwYWNlPwogCXNobGwJazAJCSEgQ2hlY2sgTUQgYml0IChiaXQzMCkgYnkgc2hpZnRpbmcgaXQgaW50by4uLgogCXNobGwJazAJCSEgICAgICAgLi4udGhlIFQgYml0CkBAIC00NDMsMTggKzQxNSwxNyBAQAogCWFkZAljdXJyZW50LCBrMQogCW1vdglrMSwgcjE1CQkhIGNoYW5nZSB0byBrZXJuZWwgc3RhY2sKIAkhCi0xOgltb3YubAkyZiwgazEKLQkhCisxOgogI2lmZGVmIENPTkZJR19TSF9EU1AKLQltb3YubAlyMiwgQC1yMTUJCSEgU2F2ZSByMiwgd2UgbmVlZCBhbm90aGVyIHJlZwotCXN0YwlzciwgazQKLQltb3YubAkxZiwgcjIKLQl0c3QJcjIsIGs0CQkJISBDaGVjayBpZiBpbiBEU1AgbW9kZQotCW1vdi5sCUByMTUrLCByMgkJISBSZXN0b3JlIHIyIG5vdworCSEgU2F2ZSBEU1AgY29udGV4dCBpZiBuZWVkZWQKKwlzdGMJc3IsIGsxCisJbW92CSMweDEwLCBrMgorCXNobGw4ICAgazIJCQkhIERTUD0xICgweDAwMDAxMDAwKQorCXRzdAlrMiwgazEJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlIChwYXNzZWQgaW4gazIpCiAJYnQvcwlza2lwX3NhdmUKLQkgbW92CSMwLCBrNAkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKKwkgbW92CSMwLCBrMQkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKIAotCW1vdglyMiwgazQJCQkhIEJhY2t1cCByMiAoaW4gazQpIGZvciBsYXRlcgorCW1vdglrMiwgazEJCQkhIFNhdmUgaGFzLWZyYW1lIG1hcmtlcgogCiAJISBTYXZlIERTUCByZWdpc3RlcnMgb24gc3RhY2sKIAlzdGMubAltb2QsIEAtcjE1CkBAIC00NzMsMzUgKzQ0NCw3NCBAQAogCSEgYXMgd2UncmUgbm90IGF0IGFsbCBpbnRlcmVzdGVkIGluIHN1cHBvcnRpbmcgYW5jaWVudCB0b29sY2hhaW5zIGF0CiAJISB0aGlzIHBvaW50LiAtLSBQRk0uCiAKLQltb3YJcjE1LCByMgorCW1vdglyMTUsIGsyCiAJLndvcmQJMHhmNjUzCQkJISBtb3ZzLmwJYTEsIEAtcjIKIAkud29yZAkweGY2ZjMJCQkhIG1vdnMubAlhMGcsIEAtcjIKIAkud29yZAkweGY2ZDMJCQkhIG1vdnMubAlhMWcsIEAtcjIKIAkud29yZAkweGY2YzMJCQkhIG1vdnMubAltMCwgQC1yMgogCS53b3JkCTB4ZjZlMwkJCSEgbW92cy5sCW0xLCBALXIyCi0JbW92CXIyLCByMTUKKwltb3YJazIsIHIxNQogCi0JbW92CWs0LCByMgkJCSEgUmVzdG9yZSByMgotCW1vdi5sCTFmLCBrNAkJCSEgRm9yY2UgRFNQIHN0YWNrIGZyYW1lCiBza2lwX3NhdmU6Ci0JbW92LmwJazQsIEAtcjE1CQkhIFB1c2ggRFNQIG1vZGUgbWFya2VyIG9udG8gc3RhY2sKKwltb3YubAlrMSwgQC1yMTUJCSEgUHVzaCBEU1AgbW9kZSBtYXJrZXIgb250byBzdGFjawogI2VuZGlmCi0JISBTYXZlIHRoZSB1c2VyIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suCi0JbW92LmwJazIsIEAtcjE1CSEgRVhQRVZUCisJcnRzCisJIG5vcAorIQorISAweDQwMDogSW5zdHJ1Y3Rpb24gYW5kIERhdGEgVExCIG1pc3MgZXhjZXB0aW9uIHZlY3RvcgorIQorCS5iYWxpZ24gCTEwMjQsMCwxMDI0Cit0bGJfbWlzczoKKwlzdHMJcHIsIGszCQkhIHNhdmUgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKIAotCW1vdgkjLTEsIGs0Ci0JbW92LmwJazQsIEAtcjE1CSEgc2V0IFRSQSAoZGVmYXVsdDogLTEpCi0JIQoraGFuZGxlX2V4Y2VwdGlvbjoKKwltb3ZhCWV4Y2VwdGlvbl9kYXRhLCBrMAorCisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCSBQUkVGKGswKQorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YubAk1ZiwgazIJCSEgdmVjdG9yIHJlZ2lzdGVyIGFkZHJlc3MKKwltb3YubAkxZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCWJzcglzYXZlX3JlZ3MJISBuZWVkcyBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCSBtb3YubAlAazIsIGsyCQkhIHJlYWQgb3V0IHZlY3RvciBhbmQga2VlcCBpbiBrMgorCitoYW5kbGVfZXhjZXB0aW9uX3NwZWNpYWw6CisJISBTZXR1cCByZXR1cm4gYWRkcmVzcyBhbmQganVtcCB0byBleGNlcHRpb24gaGFuZGxlcgorCW1vdi5sCTdmLCByOQkJISBmZXRjaCByZXR1cm4gYWRkcmVzcworCXN0YwlyMl9iYW5rLCByMAkhIGsyICh2ZWN0b3IpCisJbW92LmwJNmYsIHIxMAorCXNobHIyCXIwCisJc2hscglyMAorCW1vdi5sCUAocjAsIHIxMCksIHIxMAorCWptcAlAcjEwCisJIGxkcwlyOSwgcHIJCSEgcHV0IHJldHVybiBhZGRyZXNzIGluIHByCisKKwkuYWxpZ24JTDFfQ0FDSEVfU0hJRlQKKworISBzYXZlX3JlZ3MoKQorISAtIHNhdmUgZGVmYXVsdCB0cmEsIG1hY2wsIG1hY2gsIGdiciwgc3NyLCBwciogYW5kIHNwYyBvbiB0aGUgc3RhY2sKKyEgLSBzYXZlIHIxNSosIHIxNCwgcjEzLCByMTIsIHIxMSwgcjEwLCByOSwgcjggb24gdGhlIHN0YWNrCishIC0gc3dpdGNoIGJhbmsKKyEgLSBzYXZlIHI3LCByNiwgcjUsIHI0LCByMywgcjIsIHIxLCByMCBvbiB0aGUgc3RhY2sKKyEgazAgY29udGFpbnMgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcioKKyEgazEgdHJhc2hlZAorISBrMyBwYXNzZXMgb3JpZ2luYWwgcHIqCishIGs0IHBhc3NlcyBTUiBiaXRtYXNrCishIEJMPTEgb24gZW50cnksIG9uIGV4aXQgQkw9MC4KKworRU5UUlkoc2F2ZV9yZWdzKQorCW1vdgkjLTEsIHIxCisJbW92LmwJazEsIEAtcjE1CSEgc2V0IFRSQSAoZGVmYXVsdDogLTEpCiAJc3RzLmwJbWFjbCwgQC1yMTUKIAlzdHMubAltYWNoLCBALXIxNQogCXN0Yy5sCWdiciwgQC1yMTUKIAlzdGMubAlzc3IsIEAtcjE1Ci0Jc3RzLmwJcHIsIEAtcjE1CisJbW92LmwJazMsIEAtcjE1CSEgb3JpZ2luYWwgcHIgaW4gazMKIAlzdGMubAlzcGMsIEAtcjE1Ci0JIQotCWxkcwlrMywgcHIJCSEgU2V0IHRoZSByZXR1cm4gYWRkcmVzcyB0byBwcgotCSEKLQltb3YubAlrMCwgQC1yMTUJISBzYXZlIG9yaWduYWwgc3RhY2sKKworCW1vdi5sCWswLCBALXIxNQkhIG9yaWdpbmFsIHN0YWNrIHBvaW50ZXIgaW4gazAKIAltb3YubAlyMTQsIEAtcjE1CiAJbW92LmwJcjEzLCBALXIxNQogCW1vdi5sCXIxMiwgQC1yMTUKQEAgLTUwOSwxMyArNTE5LDIzIEBACiAJbW92LmwJcjEwLCBALXIxNQogCW1vdi5sCXI5LCBALXIxNQogCW1vdi5sCXI4LCBALXIxNQotCSEKLQlzdGMJc3IsIHI4CQkhIEJhY2sgdG8gbm9ybWFsIHJlZ2lzdGVyIGJhbmssIGFuZAotCW9yCWsxLCByOAkJISBCbG9jayBhbGwgaW50ZXJydXB0cwotCW1vdi5sCTNmLCBrMQotCWFuZAlrMSwgcjgJCSEgLi4uCi0JbGRjCXI4LCBzcgkJISAuLi5jaGFuZ2VkIGhlcmUuCi0JIQorCisJbW92LmwJMGYsIGszCQkhIFNSIGJpdHMgdG8gc2V0IGluIGszCisKKwkhIGZhbGwtdGhyb3VnaAorCishIHNhdmVfbG93X3JlZ3MoKQorISAtIG1vZGlmeSBTUiBmb3IgYmFuayBzd2l0Y2gKKyEgLSBzYXZlIHI3LCByNiwgcjUsIHI0LCByMywgcjIsIHIxLCByMCBvbiB0aGUgc3RhY2sKKyEgazMgcGFzc2VzIGJpdHMgdG8gc2V0IGluIFNSCishIGs0IHBhc3NlcyBiaXRzIHRvIGNsZWFyIGluIFNSCisKK0VOVFJZKHNhdmVfbG93X3JlZ3MpCisJc3RjCXNyLCByOAorCW9yCWszLCByOAorCWFuZAlrNCwgcjgKKwlsZGMJcjgsIHNyCisKIAltb3YubAlyNywgQC1yMTUKIAltb3YubAlyNiwgQC1yMTUKIAltb3YubAlyNSwgQC1yMTUKQEAgLTUyMyw1MiArNTQzLDYzIEBACiAJbW92LmwJcjMsIEAtcjE1CiAJbW92LmwJcjIsIEAtcjE1CiAJbW92LmwJcjEsIEAtcjE1Ci0JbW92LmwJcjAsIEAtcjE1Ci0KLQkvKgotCSAqIFRoaXMgZ2V0cyBhIGJpdCB0cmlja3kuLiBpbiB0aGUgSU5URVZUIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byB1c2UKLQkgKiB0aGUgVkJSIG9mZnNldCBhcyBhIGRlc3RpbmF0aW9uIGluIHRoZSBqdW1wIGNhbGwgdGFibGUsIHNpbmNlIGFsbAotCSAqIG9mIHRoZSBkZXN0aW5hdGlvbnMgYXJlIHRoZSBzYW1lLiBJbiB0aGlzIGNhc2UsIChpbnRlcnJ1cHQpIHNldHMKLQkgKiBhIG1hcmtlciBpbiByMiAobm93IHIyX2Jhbmsgc2luY2UgU1IuUkIgY2hhbmdlZCksIHdoaWNoIHdlIGNoZWNrCi0JICogdG8gZGV0ZXJtaW5lIHRoZSBleGNlcHRpb24gdHlwZS4gRm9yIGFsbCBvdGhlciBleGNlcHRpb25zLCB3ZQotCSAqIGZvcmNpYmx5IHJlYWQgRVhQRVZUIGZyb20gbWVtb3J5IGFuZCBmaXggdXAgdGhlIGp1bXAgYWRkcmVzcywgaW4KLQkgKiB0aGUgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYXNlIHdlIGp1bXAgdG8gZG9fSVJRKCkgYW5kIGRlZmVyIHRoZQotCSAqIElOVEVWVCByZWFkIHVudGlsIHRoZXJlLiBBcyBhIGJvbnVzLCB3ZSBjYW4gYWxzbyBjbGVhbiB1cCB0aGUgU1IuUkIKLQkgKiBjaGVja3MgdGhhdCBkb19JUlEoKSB3YXMgZG9pbmcuLgotCSAqLwotCXN0YwlyMl9iYW5rLCByOAotCWNtcC9weglyOAotCWJmCWludGVycnVwdF9leGNlcHRpb24KLQlzaGxyMglyOAotCXNobHIJcjgKLQltb3YubAk0ZiwgcjkKLQlhZGQJcjgsIHI5Ci0JbW92LmwJQHI5LCByOQotCWptcAlAcjkKLQkgbm9wCiAJcnRzCisJIG1vdi5sCXIwLCBALXIxNQorCishCishIDB4NjAwOiBJbnRlcnJ1cHQgLyBOTUkgdmVjdG9yCishCisJLmJhbGlnbiAJNTEyLDAsNTEyCitFTlRSWShoYW5kbGVfaW50ZXJydXB0KQorI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCisJbW92LmwJMmYsIGsyCisJISBEZWJvdW5jZSAoZmlsdGVyIG5lc3RlZCBOTUkpCisJbW92LmwJQGsyLCBrMAorCW1vdi5sCTlmLCBrMQorCWNtcC9lcQlrMSwgazAKKwliZgkxMWYKKwltb3YubAkxMGYsIGsxCisJdGFzLmIJQGsxCisJYnQJMTFmCisJcnRlCiAJIG5vcAotCiAJLmFsaWduCTIKLTE6CS5sb25nCTB4MDAwMDEwMDAJISBEU1A9MQotMjoJLmxvbmcJMHgwMDAwODBmMAkhIEZEPTEsIElNQVNLPTE1Ci0zOgkubG9uZwkweGNmZmZmZmZmCSEgUkI9MCwgQkw9MAotNDoJLmxvbmcJZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlCis5OgkubG9uZwlOTUlfVkVDCisxMDoJLmxvbmcJaW5fbm1pCisxMToKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19LR0RCKSAqLworCXN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCiAKLWludGVycnVwdF9leGNlcHRpb246Ci0JbW92LmwJMWYsIHI5CisJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKKwlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCSBQUkVGKGswKQorCisJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKKwltb3YubAkxZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCWJzcglzYXZlX3JlZ3MJISBuZWVkcyBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworCSBtb3YJIy0xLCBrMgkJISBkZWZhdWx0IHZlY3RvciBrZXB0IGluIGsyCisKKwkhIFNldHVwIHJldHVybiBhZGRyZXNzIGFuZCBqdW1wIHRvIGRvX0lSUQorCW1vdi5sCTRmLCByOQkJISBmZXRjaCByZXR1cm4gYWRkcmVzcworCWxkcwlyOSwgcHIJCSEgcHV0IHJldHVybiBhZGRyZXNzIGluIHByCiAJbW92LmwJMmYsIHI0Ci0JbW92LmwJQHI0LCByNAorCW1vdi5sCTNmLCByOQorCW1vdi5sCUByNCwgcjQJCSEgcGFzcyBJTlRFVlQgdmVjdG9yIGFzIGFyZzAKIAlqbXAJQHI5Ci0JIG1vdglyMTUsIHI1Ci0JcnRzCi0JIG5vcAorCSBtb3YJcjE1LCByNQkJISBwYXNzIHNhdmVkIHJlZ2lzdGVycyBhcyBhcmcxCiAKLQkuYWxpZ24gMgotMToJLmxvbmcJZG9fSVJRCi0yOgkubG9uZwlJTlRFVlQKLQotCS5hbGlnbgkyCiBFTlRSWShleGNlcHRpb25fbm9uZSkKIAlydHMKIAkgbm9wCisKKwkuYWxpZ24JTDFfQ0FDSEVfU0hJRlQKK2V4Y2VwdGlvbl9kYXRhOgorMDoJLmxvbmcJMHgwMDAwODBmMAkhIEZEPTEsIElNQVNLPTE1CisxOgkubG9uZwkweGNmZmZmZmZmCSEgUkI9MCwgQkw9MAorMjoJLmxvbmcJSU5URVZUCiszOgkubG9uZwlkb19JUlEKKzQ6CS5sb25nCXJldF9mcm9tX2lycQorNToJLmxvbmcJRVhQRVZUCis2OgkubG9uZwlleGNlcHRpb25faGFuZGxpbmdfdGFibGUKKzc6CS5sb25nCXJldF9mcm9tX2V4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKaW5kZXggNjQ2OGFlOC4uNjNiNjdiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNINzcwNSBTZXR1cAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA5ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMSw1MSArMjEsMzYgQEAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsCiAJUElOVDA3LCBQSU5UODE1LAotCURNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMywKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JQURDX0FESSwKLQlVU0JfVVNJMCwgVVNCX1VTSTEsCi0JVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywKLQlUTVUwLCBUTVUxLCBUTVUyX1RVTkksIFRNVTJfVElDUEksCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGX1JDTUksCiAKLQkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCi0JUlRDLCBUTVUyLCBETUFDLCBVU0IsIFNDSUYyLCBTQ0lGMCwKKwlETUFDLCBTQ0lGMCwgU0NJRjIsIEFEQ19BREksIFVTQiwKKworCVRQVTAsIFRQVTEsIFRQVTIsIFRQVTMsCisJVE1VMCwgVE1VMSwgVE1VMiwKKworCVJUQywgV0RULCBSRUZfUkNNSSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCS8qIElSUTAtPjUgYXJlIGhhbmRsZWQgaW4gc2V0dXAtc2gzLmMgKi8KIAlJTlRDX1ZFQ1QoUElOVDA3LCAweDcwMCksIElOVENfVkVDVChQSU5UODE1LCAweDcyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAotCUlOVENfVkVDVChTQ0lGMl9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMl9UWEksIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4MjApLAorCUlOVENfVkVDVChETUFDLCAweDg0MCksIElOVENfVkVDVChETUFDLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoQURDX0FESSwgMHg5ODApLAotCUlOVENfVkVDVChVU0JfVVNJMCwgMHhhMjApLCBJTlRDX1ZFQ1QoVVNCX1VTSTEsIDB4YTQwKSwKKwlJTlRDX1ZFQ1QoVVNCLCAweGEyMCksIElOVENfVkVDVChVU0IsIDB4YTQwKSwKIAlJTlRDX1ZFQ1QoVFBVMCwgMHhjMDApLCBJTlRDX1ZFQ1QoVFBVMSwgMHhjMjApLAogCUlOVENfVkVDVChUUFUyLCAweGM4MCksIElOVENfVkVDVChUUFUzLCAweGNhMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMl9UVU5JLCAweDQ0MCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDQ2MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFRNVTIsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoVVNCLCBVU0JfVVNJMCwgVVNCX1VTSTEpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEkpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZmZmZlZTIsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4ZmZmZmZlZTQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUZfUkNNSSwgMCwgMCB9IH0sCkBAIC03OCw3ICs2Myw3IEBACiAKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MDUiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzA1IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewpAQCAtODYsMTIgKzcxLDEyIEBACiAJCS5tYXBiYXNlCT0gMHhhNDQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTYsIDU3LCA1OSB9LAorCQkuaXJxcwkJPSB7IDU2LCA1NiwgNTYgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSB9LAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMTE1LDE0ICsxMDAsNiBAQAogCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfcnRjX3BsYXRmb3JtX2luZm8gcnRjX2luZm8gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwppbmRleCA5M2M1NWUyLi5hNzRmOTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDMgU2V0dXAgY29kZSBmb3IgU0g3NzA2LCBTSDc3MDcsIFNINzcwOCwgU0g3NzA5CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgTWFnbnVzIERhbW0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBCYXNlZCBvbiBzZXR1cC1zaDc3MDkuYwogICoKQEAgLTI0LDQ2ICsyNSwzNyBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKIAlQSU5UMDcsIFBJTlQ4MTUsCi0JRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCi0JU0NJX0VSSSwgU0NJX1JYSSwgU0NJX1RYSSwgU0NJX1RFSSwKLQlBRENfQURJLAorCURNQUMsIFNDSUYwLCBTQ0lGMiwgU0NJLCBBRENfQURJLAogCUxDREMsIFBDQzAsIFBDQzEsCi0JVE1VMCwgVE1VMSwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVJFRl9SQ01JLCBSRUZfUk9WSSwKLQotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIFJFRiwgVE1VMiwgRE1BQywgU0NJLCBTQ0lGMiwgU0NJRjAsCisJVE1VMCwgVE1VMSwgVE1VMiwKKwlSVEMsIFdEVCwgUkVGLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMl9UVU5JLCAweDQ0MCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDQ2MCksCi0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAotCUlOVENfVkVDVChTQ0lfRVJJLCAweDRlMCksIElOVENfVkVDVChTQ0lfUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNDSV9UWEksIDB4NTIwKSwgSU5UQ19WRUNUKFNDSV9URUksIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg0NjApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoU0NJLCAweDRlMCksIElOVENfVkVDVChTQ0ksIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0NJLCAweDUyMCksIElOVENfVkVDVChTQ0ksIDB4NTQwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCi0JSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksCi0JSU5UQ19WRUNUKFJFRl9ST1ZJLCAweDVhMCksCisJSU5UQ19WRUNUKFJFRiwgMHg1ODApLAorCUlOVENfVkVDVChSRUYsIDB4NWEwKSwKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwotCUlOVENfVkVDVChETUFDX0RFSTAsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUNfREVJMSwgMHg4MjApLAotCUlOVENfVkVDVChETUFDX0RFSTIsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUNfREVJMywgMHg4NjApLAorCUlOVENfVkVDVChETUFDLCAweDgwMCksIElOVENfVkVDVChETUFDLCAweDgyMCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODYwKSwKIAlJTlRDX1ZFQ1QoQURDX0FESSwgMHg5ODApLAotCUlOVENfVkVDVChTQ0lGMl9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYyX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMl9CUkksIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYyX1RYSSwgMHg5NjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYyLCAweDk2MCksCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAJSU5UQ19WRUNUKFBJTlQwNywgMHg3MDApLCBJTlRDX1ZFQ1QoUElOVDgxNSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg4YTApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhlMCksCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpCiAJSU5UQ19WRUNUKExDREMsIDB4OWEwKSwKQEAgLTcxLDE2ICs2Myw2IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFRNVTIsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChSRUYsIFJFRl9SQ01JLCBSRUZfUk9WSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoU0NJLCBTQ0lfRVJJLCBTQ0lfUlhJLCBTQ0lfVFhJLCBTQ0lfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmZmZmZmVlMiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhmZmZmZmVlNCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRiwgU0NJLCAwIH0gfSwKQEAgLTEwMSw3ICs4Myw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MHgiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzB4IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewpAQCAtMTExLDE0ICs5Myw2IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0JewotCQkuc3RhcnQgID0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7CiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKQEAgLTEzNiw3ICsxMTAsNyBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZmZlODAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0ksCi0JCS5pcnFzCQk9IHsgMjMsIDI0LCAyNSwgMCB9LAorCQkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKIAl9LAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXApAQCAtMTQ1LDcgKzExOSw3IEBACiAJCS5tYXBiYXNlCT0gMHhhNDAwMDE1MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTYsIDU3LCA1OSwgNTggfSwKKwkJLmlycXMJCT0geyA1NiwgNTYsIDU2LCA1NiB9LAogCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKQEAgLTE1NCw3ICsxMjgsNyBAQAogCQkubWFwYmFzZQk9IDB4YTQwMDAxNDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9JUkRBLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKIAl9LAogI2VuZGlmCiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKaW5kZXggNzdlZWU0OC4uMzM1MDk4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNIMyBTZXR1cCBjb2RlIGZvciBTSDc3MTAsIFNINzcxMgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA5ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMCw1OSArMjAsNDAgQEAKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKLQlETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlETUFDX0RFSTQsIERNQUNfREVJNSwKLQlJUFNFQywKKwlETUFDMSwgU0NJRjAsIFNDSUYxLCBETUFDMiwgSVBTRUMsCiAJRURNQUMwLCBFRE1BQzEsIEVETUFDMiwKLQlTSU9GMF9FUkksIFNJT0YwX1RYSSwgU0lPRjBfUlhJLCBTSU9GMF9DQ0ksCi0JU0lPRjFfRVJJLCBTSU9GMV9UWEksIFNJT0YxX1JYSSwgU0lPRjFfQ0NJLAotCVRNVTAsIFRNVTEsIFRNVTIsCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGLAorCVNJT0YwLCBTSU9GMSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIERNQUMxLCBTQ0lGMCwgU0NJRjEsIERNQUMyLCBTSU9GMCwgU0lPRjEsCisJVE1VMCwgVE1VMSwgVE1VMiwKKwlSVEMsIFdEVCwgUkVGLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwotCUlOVENfVkVDVChETUFDX0RFSTAsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUNfREVJMSwgMHg4MjApLAotCUlOVENfVkVDVChETUFDX0RFSTIsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUNfREVJMywgMHg4NjApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg4YTApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4OGMwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg4ZTApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHg5MjApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHg5NjApLAotCUlOVENfVkVDVChETUFDX0RFSTQsIDB4YjgwKSwgSU5UQ19WRUNUKERNQUNfREVJNSwgMHhiYTApLAorCUlOVENfVkVDVChETUFDMSwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMxLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4OTAwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDkyMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDk0MCksIElOVENfVkVDVChTQ0lGMSwgMHg5NjApLAorCUlOVENfVkVDVChETUFDMiwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQzIsIDB4YmEwKSwKICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwCiAJSU5UQ19WRUNUKElQU0VDLCAweGJlMCksCiAjZW5kaWYKIAlJTlRDX1ZFQ1QoRURNQUMwLCAweGMwMCksIElOVENfVkVDVChFRE1BQzEsIDB4YzIwKSwKIAlJTlRDX1ZFQ1QoRURNQUMyLCAweGM0MCksCi0JSU5UQ19WRUNUKFNJT0YwX0VSSSwgMHhlMDApLCBJTlRDX1ZFQ1QoU0lPRjBfVFhJLCAweGUyMCksCi0JSU5UQ19WRUNUKFNJT0YwX1JYSSwgMHhlNDApLCBJTlRDX1ZFQ1QoU0lPRjBfQ0NJLCAweGU2MCksCi0JSU5UQ19WRUNUKFNJT0YxX0VSSSwgMHhlODApLCBJTlRDX1ZFQ1QoU0lPRjFfVFhJLCAweGVhMCksCi0JSU5UQ19WRUNUKFNJT0YxX1JYSSwgMHhlYzApLCBJTlRDX1ZFQ1QoU0lPRjFfQ0NJLCAweGVlMCksCisJSU5UQ19WRUNUKFNJT0YwLCAweGUwMCksIElOVENfVkVDVChTSU9GMCwgMHhlMjApLAorCUlOVENfVkVDVChTSU9GMCwgMHhlNDApLCBJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTYwKSwKKwlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZTgwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGVhMCksCisJSU5UQ19WRUNUKFNJT0YxLCAweGVjMCksIElOVENfVkVDVChTSU9GMSwgMHhlZTApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChETUFDMiwgRE1BQ19ERUk0LCBETUFDX0RFSTUpLAotCUlOVENfR1JPVVAoU0lPRjAsIFNJT0YwX0VSSSwgU0lPRjBfVFhJLCBTSU9GMF9SWEksIFNJT0YwX0NDSSksCi0JSU5UQ19HUk9VUChTSU9GMSwgU0lPRjFfRVJJLCBTSU9GMV9UWEksIFNJT0YxX1JYSSwgU0lPRjFfQ0NJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGZmZmZmZWUyLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweGZmZmZmZWU0LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGLCAwLCAwIH0gfSwKQEAgLTg1LDcgKzY2LDcgQEAKIAl7IDB4YTQwODAwMDYsIDAsIDE2LCA0LCAvKiBJUFJJICovIHsgMCwgMCwgU0lPRjEgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcxMCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MTAiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC05OCwxNCArNzksNiBAQAogCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi0JWzJdID0JewotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfcnRjX3BsYXRmb3JtX2luZm8gcnRjX2luZm8gPSB7CkBAIC0xMjcsMTIgKzEwMCwxMiBAQAogCQkubWFwYmFzZQk9IDB4YTQ0MDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhhNDQxMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzICAgICAgICAgICA9IHsgNTYsIDU3LCA1OSwgNTggfSwKKwkJLmlycXMgICAgICAgICAgID0geyA1NiwgNTYsIDU2LCA1NiB9LAogCX0sIHsKIAogCQkuZmxhZ3MgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKaW5kZXggZjgwN2EyMS4uMDAzODc0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCkBAIC0yLDYgKzIsNyBAQAogICogU0g3NzIwIFNldHVwCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgTWFya3VzIEJydW5uZXIsIE1hcmsgSm9uYXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiAgQmFzZWQgb24gYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYzoKICAqCkBAIC0yNiwxNyArMjcsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtMTUwLDYyICsxNDEsNDkgQEAKIAlVTlVTRUQgPSAwLAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlUTVUwLCBUTVUxLCBUTVUyLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwgUkVGX1JDTUksIFNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5ELAorCVRNVTAsIFRNVTEsIFRNVTIsIFJUQywKKwlXRFQsIFJFRl9SQ01JLCBTSU0sCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywKIAlVU0JGX1NQRCwgVE1VX1NVTkksIElSUTUsIElSUTQsCi0JRE1BQzFfREVJMCwgRE1BQzFfREVJMSwgRE1BQzFfREVJMiwgRE1BQzFfREVJMywgTENEQywgU1NMLAotCUFEQywgRE1BQzJfREVJNCwgRE1BQzJfREVJNSwgVVNCRkkwLCBVU0JGSTEsIENNVCwKKwlETUFDMSwgTENEQywgU1NMLAorCUFEQywgRE1BQzIsIFVTQkZJLCBDTVQsCiAJU0NJRjAsIFNDSUYxLAotCVBJTlQwNywgUElOVDgxNSwgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywgSUlDLAotCVNJT0YwLCBTSU9GMSwgTU1DSTAsIE1NQ0kxLCBNTUNJMiwgTU1DSTMsIFBDQywKKwlQSU5UMDcsIFBJTlQ4MTUsIFRQVSwgSUlDLAorCVNJT0YwLCBTSU9GMSwgTU1DLCBQQ0MsCiAJVVNCSEksIEFGRUlGLAogCUhfVURJLAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlUTVUsIFJUQywgU0lNLCBETUFDMSwgVVNCRkksIERNQUMyLCBVU0IsIFRQVSwgTU1DLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwogCUlOVENfVkVDVChUTVUwLCAweDQwMCksICAgICAgIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgICAgICAgSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwKLQlJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLCAgICBJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAotCUlOVENfVkVDVChTSU1fRVJJLCAweDRlMCksICAgIElOVENfVkVDVChTSU1fUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNJTV9UWEksIDB4NTIwKSwgICAgSU5UQ19WRUNUKFNJTV9URU5ELCAweDU0MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgICAgICAgSU5UQ19WRUNUKFJUQywgMHg0ODApLAorCUlOVENfVkVDVChSVEMsIDB4NGEwKSwJICAgICAgSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTSU0sIDB4NGUwKSwJICAgICAgSU5UQ19WRUNUKFNJTSwgMHg1MDApLAorCUlOVENfVkVDVChTSU0sIDB4NTIwKSwJICAgICAgSU5UQ19WRUNUKFNJTSwgMHg1NDApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwgICAgICAgIElOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLAogCS8qIEhfVURJIGNhbm5vdCBiZSBtYXNrZWQgKi8gIElOVENfVkVDVChUTVVfU1VOSSwgMHg2YzApLAotCUlOVENfVkVDVChVU0JGX1NQRCwgMHg2ZTApLCAgIElOVENfVkVDVChETUFDMV9ERUkwLCAweDgwMCksCi0JSU5UQ19WRUNUKERNQUMxX0RFSTEsIDB4ODIwKSwgSU5UQ19WRUNUKERNQUMxX0RFSTIsIDB4ODQwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfREVJMywgMHg4NjApLCBJTlRDX1ZFQ1QoTENEQywgMHg5MDApLAorCUlOVENfVkVDVChVU0JGX1NQRCwgMHg2ZTApLCAgIElOVENfVkVDVChETUFDMSwgMHg4MDApLAorCUlOVENfVkVDVChETUFDMSwgMHg4MjApLCAgICAgIElOVENfVkVDVChETUFDMSwgMHg4NDApLAorCUlOVENfVkVDVChETUFDMSwgMHg4NjApLCAgICAgIElOVENfVkVDVChMQ0RDLCAweDkwMCksCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKQogCUlOVENfVkVDVChTU0wsIDB4OTgwKSwKICNlbmRpZgotCUlOVENfVkVDVChVU0JGSTAsIDB4YTIwKSwgICAgIElOVENfVkVDVChVU0JGSTEsIDB4YTQwKSwKKwlJTlRDX1ZFQ1QoVVNCRkksIDB4YTIwKSwgICAgICBJTlRDX1ZFQ1QoVVNCRkksIDB4YTQwKSwKIAlJTlRDX1ZFQ1QoVVNCSEksIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzJfREVJNCwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQzJfREVJNSwgMHhiYTApLAorCUlOVENfVkVDVChETUFDMiwgMHhiODApLCAgICAgIElOVENfVkVDVChETUFDMiwgMHhiYTApLAogCUlOVENfVkVDVChBREMsIDB4YmUwKSwgICAgICAgIElOVENfVkVDVChTQ0lGMCwgMHhjMDApLAogCUlOVENfVkVDVChTQ0lGMSwgMHhjMjApLCAgICAgIElOVENfVkVDVChQSU5UMDcsIDB4YzgwKSwKIAlJTlRDX1ZFQ1QoUElOVDgxNSwgMHhjYTApLCAgICBJTlRDX1ZFQ1QoU0lPRjAsIDB4ZDAwKSwKLQlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZDIwKSwgICAgICBJTlRDX1ZFQ1QoVFBVMCwgMHhkODApLAotCUlOVENfVkVDVChUUFUxLCAweGRhMCksICAgICAgIElOVENfVkVDVChUUFUyLCAweGRjMCksCi0JSU5UQ19WRUNUKFRQVTMsIDB4ZGUwKSwgICAgICAgSU5UQ19WRUNUKElJQywgMHhlMDApLAotCUlOVENfVkVDVChNTUNJMCwgMHhlODApLCAgICAgIElOVENfVkVDVChNTUNJMSwgMHhlYTApLAotCUlOVENfVkVDVChNTUNJMiwgMHhlYzApLCAgICAgIElOVENfVkVDVChNTUNJMywgMHhlZTApLAorCUlOVENfVkVDVChTSU9GMSwgMHhkMjApLCAgICAgIElOVENfVkVDVChUUFUsIDB4ZDgwKSwKKwlJTlRDX1ZFQ1QoVFBVLCAweGRhMCksICAgICAgICBJTlRDX1ZFQ1QoVFBVLCAweGRjMCksCisJSU5UQ19WRUNUKFRQVSwgMHhkZTApLCAgICAgICAgSU5UQ19WRUNUKElJQywgMHhlMDApLAorCUlOVENfVkVDVChNTUMsIDB4ZTgwKSwgICAgICAgIElOVENfVkVDVChNTUMsIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoTU1DLCAweGVjMCksICAgICAgICBJTlRDX1ZFQ1QoTU1DLCAweGVlMCksCiAJSU5UQ19WRUNUKENNVCwgMHhmMDApLCAgICAgICAgSU5UQ19WRUNUKFBDQywgMHhmNjApLAogCUlOVENfVkVDVChBRkVJRiwgMHhmZTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChUTVUsIFRNVTAsIFRNVTEsIFRNVTIpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFNJTSwgU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSTAsIERNQUMxX0RFSTEsIERNQUMxX0RFSTIsIERNQUMxX0RFSTMpLAotCUlOVENfR1JPVVAoVVNCRkksIFVTQkZJMCwgVVNCRkkxKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUk0LCBETUFDMl9ERUk1KSwKLQlJTlRDX0dST1VQKFRQVSwgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMyksCi0JSU5UQ19HUk9VUChNTUMsIE1NQ0kwLCBNTUNJMSwgTU1DSTIsIE1NQ0kzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweEE0MTRGRUUyVUwsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4QTQxNEZFRTRVTCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRl9SQ01JLCBTSU0sIDAgfSB9LApAQCAtMjE5LDcgKzE5Nyw3IEBACiAJeyAweEE0MDgwMDA4VUwsIDAsIDE2LCA0LCAvKiBJUFJKICovIHsgMCwgVVNCSEksIDAsIEFGRUlGIH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MjAiLCB2ZWN0b3JzLCBncm91cHMsCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzIwIiwgdmVjdG9ycywgTlVMTCwKIAkJTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNDU0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIGswCXIwCisjZGVmaW5lIGsxCXIxCisjZGVmaW5lIGsyCXIyCisjZGVmaW5lIGszCXIzCisjZGVmaW5lIGs0CXI0CisKKyEgc3dzdXNwX2FyY2hfcmVzdW1lKCkKKyEgLSBjb3B5IHJlc3RvcmVfcGJsaXN0IHBhZ2VzCishIC0gcmVzdG9yZSByZWdpc3RlcnMgZnJvbSBzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKworRU5UUlkoc3dzdXNwX2FyY2hfcmVzdW1lKQorCW1vdi5sCTFmLCByMTUKKwltb3YubAkyZiwgcjQKKwltb3YubAlAcjQsIHI0CisKK3N3c3VzcF9jb3B5X2xvb3A6CisJbW92CXI0LCByMAorCWNtcC9lcQkjMCwgcjAKKwlidAlzd3N1c3BfcmVzdG9yZV9yZWdzCisKKwltb3YubAlAKFBCRV9BRERSRVNTLCByNCksIHIyCisJbW92LmwJQChQQkVfT1JJR19BRERSRVNTLCByNCksIHI1CisKKwltb3YJIyhQQUdFX1NJWkUgPj4gMTApLCByMworCXNobGw4CXIzCisJc2hscjIJcjMgLyogUEFHRV9TSVpFIC8gMTYgKi8KK3N3c3VzcF9jb3B5X3BhZ2U6CisJZHQJcjMKKwltb3YubAlAcjIrLHIxICAgLyogIDE2biswICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMQkgIC8qICAxNm4rNCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzggKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxICAgLyogIDE2bisxMiAqLworCW1vdi5sCXIxLEByNQorCWJmL3MJc3dzdXNwX2NvcHlfcGFnZQorCSBhZGQJIzQscjUKKworCWJyYQlzd3N1c3BfY29weV9sb29wCisJIG1vdi5sCUAoUEJFX05FWFQsIHI0KSwgcjQKKworc3dzdXNwX3Jlc3RvcmVfcmVnczoKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdi5sCTNmLCByOAorCW1vdi5sCTRmLCByNQorCWpzcglAcjUKKwkgbm9wCisKKwkhIEJMPTE6IFI3LT5SMCBpcyBiYW5rMQorCWxkcwlrMiwgcHIKKwlsZGMJazMsIHNzcgorCisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJbW92LmwJQHIxNSssIHI3CisKKwlydGUKKwkgbm9wCisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKworCS5hbGlnbgkyCisxOgkubG9uZwlzd3N1c3BfYXJjaF9yZWdzX2NwdTAKKzI6CS5sb25nCXJlc3RvcmVfcGJsaXN0CiszOgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQorNDoJLmxvbmcJcmVzdG9yZV9yZWdzCisKKyEgc3dzdXNwX2FyY2hfc3VzcGVuZCgpCishIC0gcHJlcGFyZSBwYyBmb3IgcmVzdW1lLCByZXR1cm4gZnJvbSBmdW5jdGlvbiB3aXRob3V0IHN3c3VzcF9zYXZlIG9uIHJlc3VtZQorISAtIHNhdmUgcmVnaXN0ZXJzIGluIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorISAtIGNhbGwgc3dzdXNwX3NhdmUgd3JpdGUgc3VzcGVuZCBpbWFnZQorCitFTlRSWShzd3N1c3BfYXJjaF9zdXNwZW5kKQorCXN0cwlwciwgcjAJCSEgc2F2ZSBwciBpbiByMAorCW1vdglyMTUsIHIyCQkhIHNhdmUgc3AgaW4gcjIKKwltb3YJcjgsIHI1CQkhIHNhdmUgcjggaW4gcjUKKwlzdGMJc3IsIHIxCisJbGRjCXIxLCBzc3IJCSEgc2F2ZSBzciBpbiBzc3IKKwltb3YubAkxZiwgcjEKKwlsZGMJcjEsIHNwYwkJISBzZXR1cCBwYyB2YWx1ZSBmb3IgcmVzdW1pbmcKKwltb3YubAk1ZiwgcjE1CQkhIHVzZSBzd3N1c3BfYXJjaF9yZWdzX2NwdTAgYXMgc3RhY2sKKwltb3YubAk2ZiwgcjMKKwlhZGQJcjMsIHIxNQkJISBzYXZlIGZyb20gdG9wIG9mIHN0cnVjdHVyZQorCisJISBCTD0wOiBSNy0+UjAgaXMgYmFuazAKKwltb3YubAkyZiwgcjMJCSEgZ2V0IG5ldyBTUiB2YWx1ZSBmb3IgYmFuazEKKwltb3YJIzAsIHI0CisJbW92LmwJN2YsIHIxCisJanNyCUByMQkJISBzd2l0Y2ggdG8gYmFuazEgYW5kIHNhdmUgYmFuazEgcjctPnIwCisJIG5vdAlyNCwgcjQKKworCSEgQkw9MTogUjctPlIwIGlzIGJhbmsxCisJc3RjCXIyX2JhbmssIGswCSEgZmV0Y2ggb2xkIHNwIGZyb20gcjJfYmFuazAKKwltb3YubAkzZiwgazQJCSEgU1IgYml0cyB0byBjbGVhciBpbiBrNAorCW1vdi5sCThmLCBrMQorCWpzcglAazEJCSEgc3dpdGNoIHRvIGJhbmswIGFuZCBzYXZlIGFsbCByZWdzCisJIHN0YwlyMF9iYW5rLCBrMwkhIGZldGNoIG9sZCBwciBmcm9tIHIwX2JhbmswCisKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdglyMiwgcjE1CQkhIHJlc3RvcmUgb2xkIHNwCisJbW92CXI1LCByOAkJISByZXN0b3JlIG9sZCByOAorCXN0Ywlzc3IsIHIxCisJbGRjCXIxLCBzcgkJISByZXN0b3JlIG9sZCBzcgorCWxkcwlyMCwgcHIJCSEgcmVzdG9yZSBvbGQgcHIKKwltb3YubAk0ZiwgcjAKKwlqbXAJQHIwCisJIG5vcAorCitzd3N1c3BfY2FsbF9zYXZlOgorCW1vdglyMiwgcjE1CQkhIHJlc3RvcmUgb2xkIHNwCisJbW92CXI1LCByOAkJISByZXN0b3JlIG9sZCByOAorCWxkcwlyMCwgcHIJCSEgcmVzdG9yZSBvbGQgcHIKKwlydHMKKwkgbW92CSMwLCByMAorCisJLmFsaWduCTIKKzE6CS5sb25nCXN3c3VzcF9jYWxsX3NhdmUKKzI6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCiszOgkubG9uZwkweGRmZmZmZmZmICEgUkI9MAorNDoJLmxvbmcJc3dzdXNwX3NhdmUKKzU6CS5sb25nCXN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorNjoJLmxvbmcJU1dTVVNQX0FSQ0hfUkVHU19TSVpFCis3OgkubG9uZwlzYXZlX2xvd19yZWdzCis4OgkubG9uZwlzYXZlX3JlZ3MKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCmluZGV4IGQ2MDg1NTcuLjIwM2IxODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIG9iai15CTo9IHByb2JlLm8gY29tbW9uLm8KIGNvbW1vbi15CSs9ICQoYWRkcHJlZml4IC4uL3NoMy8sIGVudHJ5Lm8gZXgubykKIAorb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkJKz0gJChhZGRwcmVmaXggLi4vc2gzLywgc3dzdXNwLm8pCiBvYmotJChDT05GSUdfU0hfRlBVKQkJCSs9IGZwdS5vIHNvZnRmbG9hdC5vCiBvYmotJChDT05GSUdfU0hfU1RPUkVfUVVFVUVTKQkJKz0gc3EubwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggMmU0MjU3Mi4uM2QzYTNjNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19QRVJGX0NPVU5URVIgfAogCQkJCQkgIENQVV9IQVNfTExTQzsKIAkJYnJlYWs7CisJY2FzZSAweDQwMDQ6CisJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3ODY7CisJCWJvb3RfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OworCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKKwkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVSB8IENQVV9IQVNfUEVSRl9DT1VOVEVSIHwKKwkJCUNQVV9IQVNfTExTQyB8IENQVV9IQVNfUFRFQUVYOworCQlicmVhazsKIAljYXNlIDB4MzAwODoKIAkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKaW5kZXggZWM4ODQwMy4uYTFjODBkOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCkBAIC0yMSwxNyArMjEsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtNTAsMTMgKzQwLDEzIEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJCS5pcnFzCQk9IHsgMjMsIDIzLCAyMywgMCB9LAogCX0sIHsKICNlbmRpZgogCQkubWFwYmFzZQk9IDB4ZmZlODAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtODcsNDMgKzc3LDI3IEBACiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSTDAsIElSTDEsIElSTDIsIElSTDMsIC8qIG9ubHkgSVJMTSBtb2RlIHN1cHBvcnRlZCAqLwotCUhVREksIEdQSU9JLAotCURNQUNfRE1URTAsIERNQUNfRE1URTEsIERNQUNfRE1URTIsIERNQUNfRE1URTMsCi0JRE1BQ19ETVRFNCwgRE1BQ19ETVRFNSwgRE1BQ19ETVRFNiwgRE1BQ19ETVRFNywKLQlETUFDX0RNQUUsCisJSFVESSwgR1BJT0ksIERNQUMsCiAJUENJQzBfUENJU0VSUiwgUENJQzFfUENJRVJSLCBQQ0lDMV9QQ0lQV0RXTiwgUENJQzFfUENJUFdPTiwKIAlQQ0lDMV9QQ0lETUEwLCBQQ0lDMV9QQ0lETUExLCBQQ0lDMV9QQ0lETUEyLCBQQ0lDMV9QQ0lETUEzLAotCVRNVTMsIFRNVTQsIFRNVTAsIFRNVTEsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVNDSTFfRVJJLCBTQ0kxX1JYSSwgU0NJMV9UWEksIFNDSTFfVEVJLAotCVNDSUZfRVJJLCBTQ0lGX1JYSSwgU0NJRl9CUkksIFNDSUZfVFhJLAotCVdEVCwKLQlSRUZfUkNNSSwgUkVGX1JPVkksCisJVE1VMywgVE1VNCwgVE1VMCwgVE1VMSwgVE1VMiwgUlRDLCBTQ0kxLCBTQ0lGLCBXRFQsIFJFRiwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlETUFDLCBQQ0lDMSwgVE1VMiwgUlRDLCBTQ0kxLCBTQ0lGLCBSRUYsCisJUENJQzEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLCBJTlRDX1ZFQ1QoR1BJT0ksIDB4NjIwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNDSTFfRVJJLCAweDRlMCksIElOVENfVkVDVChTQ0kxX1JYSSwgMHg1MDApLAotCUlOVENfVkVDVChTQ0kxX1RYSSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJMV9URUksIDB4NTQwKSwKLQlJTlRDX1ZFQ1QoU0NJRl9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUZfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUZfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGX1RYSSwgMHg3NjApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTQ0kxLCAweDRlMCksIElOVENfVkVDVChTQ0kxLCAweDUwMCksCisJSU5UQ19WRUNUKFNDSTEsIDB4NTIwKSwgSU5UQ19WRUNUKFNDSTEsIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoU0NJRiwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRiwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGLCAweDc0MCksIElOVENfVkVDVChTQ0lGLCAweDc2MCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAotCUlOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLCBJTlRDX1ZFQ1QoUkVGX1JPVkksIDB4NWEwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChTQ0kxLCBTQ0kxX0VSSSwgU0NJMV9SWEksIFNDSTFfVFhJLCBTQ0kxX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGLCBTQ0lGX0VSSSwgU0NJRl9SWEksIFNDSUZfQlJJLCBTQ0lGX1RYSSksCi0JSU5UQ19HUk9VUChSRUYsIFJFRl9SQ01JLCBSRUZfUk9WSSksCisJSU5UQ19WRUNUKFJFRiwgMHg1ODApLCBJTlRDX1ZFQ1QoUkVGLCAweDVhMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTM2LDcgKzExMCw3IEBACiAJCQkJCQkgUENJQzEsIFBDSUMwX1BDSVNFUlIgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc1MCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3NTAiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogLyogU0g3NzUwLCBTSDc3NTBTLCBTSDc3NTEgYW5kIFNINzA5MSBhbGwgaGF2ZSA0LWNoYW5uZWwgRE1BIGNvbnRyb2xsZXJzICovCkBAIC0xNDUsMzkgKzExOSwyOCBAQAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSkKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfZG1hNFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKERNQUNfRE1URTAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUNfRE1URTEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDX0RNQUUsIDB4NmMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNfZG1hNFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RNVEUwLCBETUFDX0RNVEUxLCBETUFDX0RNVEUyLAotCQkgICBETUFDX0RNVEUzLCBETUFDX0RNQUUpLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2YzApLAogfTsKIAogc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19kbWE0LCAic2g3NzUwX2RtYTQiLAotCQkJIHZlY3RvcnNfZG1hNCwgZ3JvdXBzX2RtYTQsCisJCQkgdmVjdG9yc19kbWE0LCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKICNlbmRpZgogCiAvKiBTSDc3NTBSIGFuZCBTSDc3NTFSIGJvdGggaGF2ZSA4LWNoYW5uZWwgRE1BIGNvbnRyb2xsZXJzICovCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfZG1hOFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKERNQUNfRE1URTAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUNfRE1URTEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDX0RNVEU0LCAweDc4MCksIElOVENfVkVDVChETUFDX0RNVEU1LCAweDdhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTYsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUNfRE1URTcsIDB4N2UwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETUFFLCAweDZjMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzX2RtYThbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoRE1BQywgRE1BQ19ETVRFMCwgRE1BQ19ETVRFMSwgRE1BQ19ETVRFMiwKLQkJICAgRE1BQ19ETVRFMywgRE1BQ19ETVRFNCwgRE1BQ19ETVRFNSwKLQkJICAgRE1BQ19ETVRFNiwgRE1BQ19ETVRFNywgRE1BQ19ETUFFKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2NjApLAorCUlOVENfVkVDVChETUFDLCAweDY4MCksIElOVENfVkVDVChETUFDLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQywgMHg3ZTApLAorCUlOVENfVkVDVChETUFDLCAweDZjMCksCiB9OwogCiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2RtYTgsICJzaDc3NTBfZG1hOCIsCi0JCQkgdmVjdG9yc19kbWE4LCBncm91cHNfZG1hOCwKKwkJCSB2ZWN0b3JzX2RtYTgsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKaW5kZXggOGUzNDRlYy4uMWE5MjM2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQkrPSBzZXR1cC1zaDc3NzAubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJKz0gc2V0dXAtc2g3NzgwLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCSs9IHNldHVwLXNoNzc4NS5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQkrPSBzZXR1cC1zaDc3ODYubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJKz0gc2V0dXAtc2g3MzQzLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCSs9IHNldHVwLXNoNzcyMi5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQkrPSBzZXR1cC1zaDc3MjMubwpAQCAtMjEsNiArMjIsNyBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQk6PSBjbG9jay1zaDc3NzAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQk6PSBjbG9jay1zaDc3ODAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQk6PSBjbG9jay1zaDc3ODUubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBjbG9jay1zaDc3ODYubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQk6PSBjbG9jay1zaDc3MjIubwpAQCAtMzEsNiArMzMsNyBAQAogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJOj0gcGlubXV4LXNoNzcyMi5vCiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQk6PSBwaW5tdXgtc2g3NzIzLm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCTo9IHBpbm11eC1zaDc3ODUubworcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJOj0gcGlubXV4LXNoNzc4Ni5vCiAKIG9iai15CQkJKz0gJChjbG9jay15KQogb2JqLSQoQ09ORklHX1NNUCkJKz0gJChzbXAteSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0YTljMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKyAqCisgKiBTSDc3ODYgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBTSDc3ODUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IGlmY19kaXZpc29yc1tdID0geyAxLCAyLCA0LCAxIH07CitzdGF0aWMgaW50IHNmY19kaXZpc29yc1tdID0geyAxLCAxLCA0LCAxIH07CitzdGF0aWMgaW50IGJmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxMiwgMTYsIDEsCisJCQkgICAgIDI0LCAzMiwgMSwgMSwgMSwgMSwgMSwgMSB9Oworc3RhdGljIGludCBtZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Oworc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgMTYsIDEsCisJCQkgICAgICAyNCwgMzIsIDEsIDQ4LCAxLCAxLCAxLCAxIH07CisKK3N0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmXTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9IChjdHJsX2lubChGUlFNUjEpICYgMHgwMDBmKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X21vZHVsZV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gbW9kdWxlX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAxNikgJiAweDAwMGYpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfYnVzX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDI4KSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDc3ODZfY2xrX29wc1tdID0geworCSZzaDc3ODZfbWFzdGVyX2Nsa19vcHMsCisJJnNoNzc4Nl9tb2R1bGVfY2xrX29wcywKKwkmc2g3Nzg2X2J1c19jbGtfb3BzLAorCSZzaDc3ODZfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwlpZiAoaWR4IDwgQVJSQVlfU0laRShzaDc3ODZfY2xrX29wcykpCisJCSpvcHMgPSBzaDc3ODZfY2xrX29wc1tpZHhdOworfQorCitzdGF0aWMgdm9pZCBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRTVIxKSA+PiAyMCkgJiAweDAwMDMpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc2ZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfc2h5d2F5X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBzaHl3YXlfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoNzc4Nl9zaHl3YXlfY2xrID0geworCS5uYW1lCQk9ICJzaHl3YXlfY2xrIiwKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJnNoNzc4Nl9zaHl3YXlfY2xrX29wcywKK307CisKK3N0YXRpYyB2b2lkIGRkcl9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDEyKSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9kZHJfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGRkcl9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X2Rkcl9jbGsgPSB7CisJLm5hbWUJCT0gImRkcl9jbGsiLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmc2g3Nzg2X2Rkcl9jbGtfb3BzLAorfTsKKworLyoKKyAqIEFkZGl0aW9uYWwgU0g3Nzg2LXNwZWNpZmljIG9uLWNoaXAgY2xvY2tzIHRoYXQgYXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUKKyAqIGNsb2NrIGZyYW1ld29yaworICovCitzdGF0aWMgc3RydWN0IGNsayAqc2g3Nzg2X29uY2hpcF9jbG9ja3NbXSA9IHsKKwkmc2g3Nzg2X3NoeXdheV9jbGssCisJJnNoNzc4Nl9kZHJfY2xrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3Nzg2X2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAibWFzdGVyX2NsayIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2g3Nzg2X29uY2hpcF9jbG9ja3MpOyBpKyspIHsKKwkJc3RydWN0IGNsayAqY2xrcCA9IHNoNzc4Nl9vbmNoaXBfY2xvY2tzW2ldOworCisJCWNsa3AtPnBhcmVudCA9IGNsazsKKwkJY2xrX3JlZ2lzdGVyKGNsa3ApOworCQljbGtfZW5hYmxlKGNsa3ApOworCX0KKworCS8qCisJICogTm93IHRoYXQgd2UgaGF2ZSB0aGUgcmVzdCBvZiB0aGUgY2xvY2tzIHJlZ2lzdGVyZWQsIHdlIG5lZWQgdG8KKwkgKiBmb3JjZSB0aGUgcGFyZW50IGNsb2NrIHRvIHByb3BhZ2F0ZSBzbyB0aGF0IHRoZXNlIGNsb2NrcyB3aWxsCisJICogYXV0b21hdGljYWxseSBmaWd1cmUgb3V0IHRoZWlyIHJhdGUuIFdlIGNoZWF0IGJ5IGhhbmRpbmcgdGhlCisJICogcGFyZW50IGNsb2NrIGl0cyBjdXJyZW50IHJhdGUgYW5kIGZvcmNpbmcgY2hpbGQgcHJvcGFnYXRpb24uCisJICovCisJY2xrX3NldF9yYXRlKGNsaywgY2xrX2dldF9yYXRlKGNsaykpOworCisJY2xrX3B1dChjbGspOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHNoNzc4Nl9jbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczYjM0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwpAQCAtMCwwICsxLDk1MCBAQAorLyoKKyAqIFNINzc4NiBQaW5tdXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIEJhc2VkIG9uIFNINzc4NSBwaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGNwdS9zaDc3ODYuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBLAorCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBLAorCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCVBDM19EQVRBLCBQQzJfREFUQSwgUEMxX0RBVEEsIFBDMF9EQVRBLAorCVBEN19EQVRBLCBQRDZfREFUQSwgUEQ1X0RBVEEsIFBENF9EQVRBLAorCVBEM19EQVRBLCBQRDJfREFUQSwgUEQxX0RBVEEsIFBEMF9EQVRBLAorCVBFN19EQVRBLCBQRTZfREFUQSwKKwlQRjdfREFUQSwgUEY2X0RBVEEsIFBGNV9EQVRBLCBQRjRfREFUQSwKKwlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSwKKwlQRzdfREFUQSwgUEc2X0RBVEEsIFBHNV9EQVRBLAorCVBIN19EQVRBLCBQSDZfREFUQSwgUEg1X0RBVEEsIFBINF9EQVRBLAorCVBIM19EQVRBLCBQSDJfREFUQSwgUEgxX0RBVEEsIFBIMF9EQVRBLAorCVBKN19EQVRBLCBQSjZfREFUQSwgUEo1X0RBVEEsIFBKNF9EQVRBLAorCVBKM19EQVRBLCBQSjJfREFUQSwgUEoxX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBBN19JTiwgUEE2X0lOLCBQQTVfSU4sIFBBNF9JTiwKKwlQQTNfSU4sIFBBMl9JTiwgUEExX0lOLCBQQTBfSU4sCisJUEI3X0lOLCBQQjZfSU4sIFBCNV9JTiwgUEI0X0lOLAorCVBCM19JTiwgUEIyX0lOLCBQQjFfSU4sIFBCMF9JTiwKKwlQQzdfSU4sIFBDNl9JTiwgUEM1X0lOLCBQQzRfSU4sCisJUEMzX0lOLCBQQzJfSU4sIFBDMV9JTiwgUEMwX0lOLAorCVBEN19JTiwgUEQ2X0lOLCBQRDVfSU4sIFBENF9JTiwKKwlQRDNfSU4sIFBEMl9JTiwgUEQxX0lOLCBQRDBfSU4sCisJUEU3X0lOLCBQRTZfSU4sCisJUEY3X0lOLCBQRjZfSU4sIFBGNV9JTiwgUEY0X0lOLAorCVBGM19JTiwgUEYyX0lOLCBQRjFfSU4sIFBGMF9JTiwKKwlQRzdfSU4sIFBHNl9JTiwgUEc1X0lOLAorCVBIN19JTiwgUEg2X0lOLCBQSDVfSU4sIFBINF9JTiwKKwlQSDNfSU4sIFBIMl9JTiwgUEgxX0lOLCBQSDBfSU4sCisJUEo3X0lOLCBQSjZfSU4sIFBKNV9JTiwgUEo0X0lOLAorCVBKM19JTiwgUEoyX0lOLCBQSjFfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sCisJUEE3X0lOX1BVLCBQQTZfSU5fUFUsIFBBNV9JTl9QVSwgUEE0X0lOX1BVLAorCVBBM19JTl9QVSwgUEEyX0lOX1BVLCBQQTFfSU5fUFUsIFBBMF9JTl9QVSwKKwlQQjdfSU5fUFUsIFBCNl9JTl9QVSwgUEI1X0lOX1BVLCBQQjRfSU5fUFUsCisJUEIzX0lOX1BVLCBQQjJfSU5fUFUsIFBCMV9JTl9QVSwgUEIwX0lOX1BVLAorCVBDN19JTl9QVSwgUEM2X0lOX1BVLCBQQzVfSU5fUFUsIFBDNF9JTl9QVSwKKwlQQzNfSU5fUFUsIFBDMl9JTl9QVSwgUEMxX0lOX1BVLCBQQzBfSU5fUFUsCisJUEQ3X0lOX1BVLCBQRDZfSU5fUFUsIFBENV9JTl9QVSwgUEQ0X0lOX1BVLAorCVBEM19JTl9QVSwgUEQyX0lOX1BVLCBQRDFfSU5fUFUsIFBEMF9JTl9QVSwKKwlQRTdfSU5fUFUsIFBFNl9JTl9QVSwKKwlQRjdfSU5fUFUsIFBGNl9JTl9QVSwgUEY1X0lOX1BVLCBQRjRfSU5fUFUsCisJUEYzX0lOX1BVLCBQRjJfSU5fUFUsIFBGMV9JTl9QVSwgUEYwX0lOX1BVLAorCVBHN19JTl9QVSwgUEc2X0lOX1BVLCBQRzVfSU5fUFUsCisJUEg3X0lOX1BVLCBQSDZfSU5fUFUsIFBINV9JTl9QVSwgUEg0X0lOX1BVLAorCVBIM19JTl9QVSwgUEgyX0lOX1BVLCBQSDFfSU5fUFUsIFBIMF9JTl9QVSwKKwlQSjdfSU5fUFUsIFBKNl9JTl9QVSwgUEo1X0lOX1BVLCBQSjRfSU5fUFUsCisJUEozX0lOX1BVLCBQSjJfSU5fUFUsIFBKMV9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUEE3X09VVCwgUEE2X09VVCwgUEE1X09VVCwgUEE0X09VVCwKKwlQQTNfT1VULCBQQTJfT1VULCBQQTFfT1VULCBQQTBfT1VULAorCVBCN19PVVQsIFBCNl9PVVQsIFBCNV9PVVQsIFBCNF9PVVQsCisJUEIzX09VVCwgUEIyX09VVCwgUEIxX09VVCwgUEIwX09VVCwKKwlQQzdfT1VULCBQQzZfT1VULCBQQzVfT1VULCBQQzRfT1VULAorCVBDM19PVVQsIFBDMl9PVVQsIFBDMV9PVVQsIFBDMF9PVVQsCisJUEQ3X09VVCwgUEQ2X09VVCwgUEQ1X09VVCwgUEQ0X09VVCwKKwlQRDNfT1VULCBQRDJfT1VULCBQRDFfT1VULCBQRDBfT1VULAorCVBFN19PVVQsIFBFNl9PVVQsCisJUEY3X09VVCwgUEY2X09VVCwgUEY1X09VVCwgUEY0X09VVCwKKwlQRjNfT1VULCBQRjJfT1VULCBQRjFfT1VULCBQRjBfT1VULAorCVBHN19PVVQsIFBHNl9PVVQsIFBHNV9PVVQsCisJUEg3X09VVCwgUEg2X09VVCwgUEg1X09VVCwgUEg0X09VVCwKKwlQSDNfT1VULCBQSDJfT1VULCBQSDFfT1VULCBQSDBfT1VULAorCVBKN19PVVQsIFBKNl9PVVQsIFBKNV9PVVQsIFBKNF9PVVQsCisJUEozX09VVCwgUEoyX09VVCwgUEoxX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQQTdfRk4sIFBBNl9GTiwgUEE1X0ZOLCBQQTRfRk4sCisJUEEzX0ZOLCBQQTJfRk4sIFBBMV9GTiwgUEEwX0ZOLAorCVBCN19GTiwgUEI2X0ZOLCBQQjVfRk4sIFBCNF9GTiwKKwlQQjNfRk4sIFBCMl9GTiwgUEIxX0ZOLCBQQjBfRk4sCisJUEM3X0ZOLCBQQzZfRk4sIFBDNV9GTiwgUEM0X0ZOLAorCVBDM19GTiwgUEMyX0ZOLCBQQzFfRk4sIFBDMF9GTiwKKwlQRDdfRk4sIFBENl9GTiwgUEQ1X0ZOLCBQRDRfRk4sCisJUEQzX0ZOLCBQRDJfRk4sIFBEMV9GTiwgUEQwX0ZOLAorCVBFN19GTiwgUEU2X0ZOLAorCVBGN19GTiwgUEY2X0ZOLCBQRjVfRk4sIFBGNF9GTiwKKwlQRjNfRk4sIFBGMl9GTiwgUEYxX0ZOLCBQRjBfRk4sCisJUEc3X0ZOLCBQRzZfRk4sIFBHNV9GTiwKKwlQSDdfRk4sIFBINl9GTiwgUEg1X0ZOLCBQSDRfRk4sCisJUEgzX0ZOLCBQSDJfRk4sIFBIMV9GTiwgUEgwX0ZOLAorCVBKN19GTiwgUEo2X0ZOLCBQSjVfRk4sIFBKNF9GTiwKKwlQSjNfRk4sIFBKMl9GTiwgUEoxX0ZOLAorCVAxTVNFTDE0XzAsIFAxTVNFTDE0XzEsCisJUDFNU0VMMTNfMCwgUDFNU0VMMTNfMSwKKwlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCVAxTVNFTDExXzAsIFAxTVNFTDExXzEsCisJUDFNU0VMMTBfMCwgUDFNU0VMMTBfMSwKKwlQMU1TRUw5XzAsIFAxTVNFTDlfMSwKKwlQMU1TRUw4XzAsIFAxTVNFTDhfMSwKKwlQMU1TRUw3XzAsIFAxTVNFTDdfMSwKKwlQMU1TRUw2XzAsIFAxTVNFTDZfMSwKKwlQMU1TRUw1XzAsIFAxTVNFTDVfMSwKKwlQMU1TRUw0XzAsIFAxTVNFTDRfMSwKKwlQMU1TRUwzXzAsIFAxTVNFTDNfMSwKKwlQMU1TRUwyXzAsIFAxTVNFTDJfMSwKKwlQMU1TRUwxXzAsIFAxTVNFTDFfMSwKKwlQMU1TRUwwXzAsIFAxTVNFTDBfMSwKKworCVAyTVNFTDE1XzAsIFAyTVNFTDE1XzEsCisJUDJNU0VMMTRfMCwgUDJNU0VMMTRfMSwKKwlQMk1TRUwxM18wLCBQMk1TRUwxM18xLAorCVAyTVNFTDEyXzAsIFAyTVNFTDEyXzEsCisJUDJNU0VMMTFfMCwgUDJNU0VMMTFfMSwKKwlQMk1TRUwxMF8wLCBQMk1TRUwxMF8xLAorCVAyTVNFTDlfMCwgUDJNU0VMOV8xLAorCVAyTVNFTDhfMCwgUDJNU0VMOF8xLAorCVAyTVNFTDdfMCwgUDJNU0VMN18xLAorCVAyTVNFTDZfMCwgUDJNU0VMNl8xLAorCVAyTVNFTDVfMCwgUDJNU0VMNV8xLAorCVAyTVNFTDRfMCwgUDJNU0VMNF8xLAorCVAyTVNFTDNfMCwgUDJNU0VMM18xLAorCVAyTVNFTDJfMCwgUDJNU0VMMl8xLAorCVAyTVNFTDFfMCwgUDJNU0VMMV8xLAorCVAyTVNFTDBfMCwgUDJNU0VMMF8xLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlDREVfTUFSSywKKwlFVEhfTUFHSUNfTUFSSywKKwlESVNQX01BUkssCisJRVRIX0xJTktfTUFSSywKKwlEUjVfTUFSSywKKwlFVEhfVFhfRVJfTUFSSywKKwlEUjRfTUFSSywKKwlFVEhfVFhfRU5fTUFSSywKKwlEUjNfTUFSSywKKwlFVEhfVFhEM19NQVJLLAorCURSMl9NQVJLLAorCUVUSF9UWEQyX01BUkssCisJRFIxX01BUkssCisJRVRIX1RYRDFfTUFSSywKKwlEUjBfTUFSSywKKwlFVEhfVFhEMF9NQVJLLAorCisJVlNZTkNfTUFSSywKKwlIU1BJX0NMS19NQVJLLAorCU9EREZfTUFSSywKKwlIU1BJX0NTX01BUkssCisJREc1X01BUkssCisJRVRIX01ESU9fTUFSSywKKwlERzRfTUFSSywKKwlFVEhfUlhfQ0xLX01BUkssCisJREczX01BUkssCisJRVRIX01EQ19NQVJLLAorCURHMl9NQVJLLAorCUVUSF9DT0xfTUFSSywKKwlERzFfTUFSSywKKwlFVEhfVFhfQ0xLX01BUkssCisJREcwX01BUkssCisJRVRIX0NSU19NQVJLLAorCisJRENMS0lOX01BUkssCisJSFNQSV9SWF9NQVJLLAorCUhTWU5DX01BUkssCisJSFNQSV9UWF9NQVJLLAorCURCNV9NQVJLLAorCUVUSF9SWEQzX01BUkssCisJREI0X01BUkssCisJRVRIX1JYRDJfTUFSSywKKwlEQjNfTUFSSywKKwlFVEhfUlhEMV9NQVJLLAorCURCMl9NQVJLLAorCUVUSF9SWEQwX01BUkssCisJREIxX01BUkssCisJRVRIX1JYX0RWX01BUkssCisJREIwX01BUkssCisJRVRIX1JYX0VSX01BUkssCisKKwlEQ0xLT1VUX01BUkssCisJU0NJRjFfU0xLX01BUkssCisJU0NJRjFfUlhEX01BUkssCisJU0NJRjFfVFhEX01BUkssCisJREFDSzFfTUFSSywKKwlCQUNLX01BUkssCisJRkFMRV9NQVJLLAorCURBQ0swX01BUkssCisJRkNMRV9NQVJLLAorCURSRVExX01BUkssCisJQlJFUV9NQVJLLAorCVVTQl9PVkMxX01BUkssCisJRFJFUTBfTUFSSywKKwlVU0JfT1ZDMF9NQVJLLAorCisJVVNCX1BFTkMxX01BUkssCisJVVNCX1BFTkMwX01BUkssCisKKwlIQUMxX1NET1VUX01BUkssCisJU1NJMV9TREFUQV9NQVJLLAorCVNESUYxQ01EX01BUkssCisJSEFDMV9TRElOX01BUkssCisJU1NJMV9TQ0tfTUFSSywKKwlTRElGMUNEX01BUkssCisJSEFDMV9TWU5DX01BUkssCisJU1NJMV9XU19NQVJLLAorCVNESUYxV1BfTUFSSywKKwlIQUMxX0JJVENMS19NQVJLLAorCVNTSTFfQ0xLX01BUkssCisJU0RJRjFDTEtfTUFSSywKKwlIQUMwX1NET1VUX01BUkssCisJU1NJMF9TREFUQV9NQVJLLAorCVNESUYxRDNfTUFSSywKKwlIQUMwX1NESU5fTUFSSywKKwlTU0kwX1NDS19NQVJLLAorCVNESUYxRDJfTUFSSywKKwlIQUMwX1NZTkNfTUFSSywKKwlTU0kwX1dTX01BUkssCisJU0RJRjFEMV9NQVJLLAorCUhBQzBfQklUQ0xLX01BUkssCisJU1NJMF9DTEtfTUFSSywKKwlTRElGMUQwX01BUkssCisKKwlTQ0lGM19TQ0tfTUFSSywKKwlTU0kyX1NEQVRBX01BUkssCisJU0NJRjNfUlhEX01BUkssCisJVENMS19NQVJLLAorCVNTSTJfU0NLX01BUkssCisJU0NJRjNfVFhEX01BUkssCisJSEFDX1JFU19NQVJLLAorCVNTSTJfV1NfTUFSSywKKworCURBQ0szX01BUkssCisJU0RJRjBDTURfTUFSSywKKwlEQUNLMl9NQVJLLAorCVNESUYwQ0RfTUFSSywKKwlEUkVRM19NQVJLLAorCVNESUYwV1BfTUFSSywKKwlTQ0lGMF9DVFNfTUFSSywKKwlEUkVRMl9NQVJLLAorCVNESUYwQ0xLX01BUkssCisJU0NJRjBfUlRTX01BUkssCisJSVJMN19NQVJLLAorCVNESUYwRDNfTUFSSywKKwlTQ0lGMF9TQ0tfTUFSSywKKwlJUkw2X01BUkssCisJU0RJRjBEMl9NQVJLLAorCVNDSUYwX1JYRF9NQVJLLAorCUlSTDVfTUFSSywKKwlTRElGMEQxX01BUkssCisJU0NJRjBfVFhEX01BUkssCisJSVJMNF9NQVJLLAorCVNESUYwRDBfTUFSSywKKworCVNDSUY1X1NDS19NQVJLLAorCUZSQl9NQVJLLAorCVNDSUY1X1JYRF9NQVJLLAorCUlPSVMxNl9NQVJLLAorCVNDSUY1X1RYRF9NQVJLLAorCUNFMkJfTUFSSywKKwlEUkFLM19NQVJLLAorCUNFMkFfTUFSSywKKwlTQ0lGNF9TQ0tfTUFSSywKKwlEUkFLMl9NQVJLLAorCVNTSTNfV1NfTUFSSywKKwlTQ0lGNF9SWERfTUFSSywKKwlEUkFLMV9NQVJLLAorCVNTSTNfU0RBVEFfTUFSSywKKwlGU1RBVFVTX01BUkssCisJU0NJRjRfVFhEX01BUkssCisJRFJBSzBfTUFSSywKKwlTU0kzX1NDS19NQVJLLAorCUZTRV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSBHUElPICovCisJUElOTVVYX0RBVEEoUEE3X0RBVEEsIFBBN19JTiwgUEE3X09VVCwgUEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTZfREFUQSwgUEE2X0lOLCBQQTZfT1VULCBQQTZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4sIFBBNV9PVVQsIFBBNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEE0X0RBVEEsIFBBNF9JTiwgUEE0X09VVCwgUEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTNfREFUQSwgUEEzX0lOLCBQQTNfT1VULCBQQTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4sIFBBMl9PVVQsIFBBMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEExX0RBVEEsIFBBMV9JTiwgUEExX09VVCwgUEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTBfREFUQSwgUEEwX0lOLCBQQTBfT1VULCBQQTBfSU5fUFUpLAorCisJLyogUEIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBCN19EQVRBLCBQQjdfSU4sIFBCN19PVVQsIFBCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNl9JTiwgUEI2X09VVCwgUEI2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjVfREFUQSwgUEI1X0lOLCBQQjVfT1VULCBQQjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNF9EQVRBLCBQQjRfSU4sIFBCNF9PVVQsIFBCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM19JTiwgUEIzX09VVCwgUEIzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjJfREFUQSwgUEIyX0lOLCBQQjJfT1VULCBQQjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMV9EQVRBLCBQQjFfSU4sIFBCMV9PVVQsIFBCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCMF9JTiwgUEIwX09VVCwgUEIwX0lOX1BVKSwKKworCS8qIFBDIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQzdfREFUQSwgUEM3X0lOLCBQQzdfT1VULCBQQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNl9EQVRBLCBQQzZfSU4sIFBDNl9PVVQsIFBDNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEM1X0RBVEEsIFBDNV9JTiwgUEM1X09VVCwgUEM1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzRfREFUQSwgUEM0X0lOLCBQQzRfT1VULCBQQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDM19EQVRBLCBQQzNfSU4sIFBDM19PVVQsIFBDM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEMyX0RBVEEsIFBDMl9JTiwgUEMyX09VVCwgUEMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzFfREFUQSwgUEMxX0lOLCBQQzFfT1VULCBQQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMF9EQVRBLCBQQzBfSU4sIFBDMF9PVVQsIFBDMF9JTl9QVSksCisKKwkvKiBQRCBHUElPICovCisJUElOTVVYX0RBVEEoUEQ3X0RBVEEsIFBEN19JTiwgUEQ3X09VVCwgUEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDZfREFUQSwgUEQ2X0lOLCBQRDZfT1VULCBQRDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENV9EQVRBLCBQRDVfSU4sIFBENV9PVVQsIFBENV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ0X0RBVEEsIFBENF9JTiwgUEQ0X09VVCwgUEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDNfREFUQSwgUEQzX0lOLCBQRDNfT1VULCBQRDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMl9EQVRBLCBQRDJfSU4sIFBEMl9PVVQsIFBEMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQxX0RBVEEsIFBEMV9JTiwgUEQxX09VVCwgUEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDBfREFUQSwgUEQwX0lOLCBQRDBfT1VULCBQRDBfSU5fUFUpLAorCisJLyogUEUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBFN19EQVRBLCBQRTdfSU4sIFBFN19PVVQsIFBFN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEU2X0RBVEEsIFBFNl9JTiwgUEU2X09VVCwgUEU2X0lOX1BVKSwKKworCS8qIFBGIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRjdfREFUQSwgUEY3X0lOLCBQRjdfT1VULCBQRjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNl9EQVRBLCBQRjZfSU4sIFBGNl9PVVQsIFBGNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEY1X0RBVEEsIFBGNV9JTiwgUEY1X09VVCwgUEY1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjRfREFUQSwgUEY0X0lOLCBQRjRfT1VULCBQRjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGM19EQVRBLCBQRjNfSU4sIFBGM19PVVQsIFBGM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEYyX0RBVEEsIFBGMl9JTiwgUEYyX09VVCwgUEYyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjFfREFUQSwgUEYxX0lOLCBQRjFfT1VULCBQRjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMF9EQVRBLCBQRjBfSU4sIFBGMF9PVVQsIFBGMF9JTl9QVSksCisKKwkvKiBQRyBHUElPICovCisJUElOTVVYX0RBVEEoUEc3X0RBVEEsIFBHN19JTiwgUEc3X09VVCwgUEc3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRzZfREFUQSwgUEc2X0lOLCBQRzZfT1VULCBQRzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHNV9EQVRBLCBQRzVfSU4sIFBHNV9PVVQsIFBHNV9JTl9QVSksCisKKwkvKiBQSCBHUElPICovCisJUElOTVVYX0RBVEEoUEg3X0RBVEEsIFBIN19JTiwgUEg3X09VVCwgUEg3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDZfREFUQSwgUEg2X0lOLCBQSDZfT1VULCBQSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINV9EQVRBLCBQSDVfSU4sIFBINV9PVVQsIFBINV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEg0X0RBVEEsIFBINF9JTiwgUEg0X09VVCwgUEg0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDNfREFUQSwgUEgzX0lOLCBQSDNfT1VULCBQSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMl9EQVRBLCBQSDJfSU4sIFBIMl9PVVQsIFBIMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEgxX0RBVEEsIFBIMV9JTiwgUEgxX09VVCwgUEgxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDBfREFUQSwgUEgwX0lOLCBQSDBfT1VULCBQSDBfSU5fUFUpLAorCisJLyogUEogR1BJTyAqLworCVBJTk1VWF9EQVRBKFBKN19EQVRBLCBQSjdfSU4sIFBKN19PVVQsIFBKN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEo2X0RBVEEsIFBKNl9JTiwgUEo2X09VVCwgUEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjVfREFUQSwgUEo1X0lOLCBQSjVfT1VULCBQSjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNF9EQVRBLCBQSjRfSU4sIFBKNF9PVVQsIFBKNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEozX0RBVEEsIFBKM19JTiwgUEozX09VVCwgUEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjJfREFUQSwgUEoyX0lOLCBQSjJfT1VULCBQSjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKMV9EQVRBLCBQSjFfSU4sIFBKMV9PVVQsIFBKMV9JTl9QVSksCisKKwkvKiBQQSBGTiAqLworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVBJTk1VWF9EQVRBKENERV9NQVJLLAkJUDFNU0VMMl8wLCBQQTdfRk4pLAorCVBJTk1VWF9EQVRBKERJU1BfTUFSSywJCVAxTVNFTDJfMCwgUEE2X0ZOKSwKKwlQSU5NVVhfREFUQShEUjVfTUFSSywJCVAxTVNFTDJfMCwgUEE1X0ZOKSwKKwlQSU5NVVhfREFUQShEUjRfTUFSSywJCVAxTVNFTDJfMCwgUEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEUjNfTUFSSywJCVAxTVNFTDJfMCwgUEEzX0ZOKSwKKwlQSU5NVVhfREFUQShEUjJfTUFSSywJCVAxTVNFTDJfMCwgUEEyX0ZOKSwKKwlQSU5NVVhfREFUQShEUjFfTUFSSywJCVAxTVNFTDJfMCwgUEExX0ZOKSwKKwlQSU5NVVhfREFUQShEUjBfTUFSSywJCVAxTVNFTDJfMCwgUEEwX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTUFHSUNfTUFSSywJUDFNU0VMMl8xLCBQQTdfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9MSU5LX01BUkssCVAxTVNFTDJfMSwgUEE2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhfRVJfTUFSSywJUDFNU0VMMl8xLCBQQTVfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9FTl9NQVJLLAlQMU1TRUwyXzEsIFBBNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDNfTUFSSywJUDFNU0VMMl8xLCBQQTNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQyX01BUkssCVAxTVNFTDJfMSwgUEEyX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEMV9NQVJLLAlQMU1TRUwyXzEsIFBBMV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDBfTUFSSywJUDFNU0VMMl8xLCBQQTBfRk4pLAorCisJLyogUEIgRk4gKi8KKwlQSU5NVVhfREFUQShWU1lOQ19NQVJLLAkJUDFNU0VMM18wLCBQQjdfRk4pLAorCVBJTk1VWF9EQVRBKE9EREZfTUFSSywJCVAxTVNFTDNfMCwgUEI2X0ZOKSwKKwlQSU5NVVhfREFUQShERzVfTUFSSywJCVAxTVNFTDJfMCwgUEI1X0ZOKSwKKwlQSU5NVVhfREFUQShERzRfTUFSSywJCVAxTVNFTDJfMCwgUEI0X0ZOKSwKKwlQSU5NVVhfREFUQShERzNfTUFSSywJCVAxTVNFTDJfMCwgUEIzX0ZOKSwKKwlQSU5NVVhfREFUQShERzJfTUFSSywJCVAxTVNFTDJfMCwgUEIyX0ZOKSwKKwlQSU5NVVhfREFUQShERzFfTUFSSywJCVAxTVNFTDJfMCwgUEIxX0ZOKSwKKwlQSU5NVVhfREFUQShERzBfTUFSSywJCVAxTVNFTDJfMCwgUEIwX0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX0NMS19NQVJLLAlQMU1TRUwzXzEsIFBCN19GTiksCisJUElOTVVYX0RBVEEoSFNQSV9DU19NQVJLLAlQMU1TRUwzXzEsIFBCNl9GTiksCisJUElOTVVYX0RBVEEoRVRIX01ESU9fTUFSSywJUDFNU0VMMl8xLCBQQjVfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWF9DTEtfTUFSSywJUDFNU0VMMl8xLCBQQjRfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9NRENfTUFSSywJUDFNU0VMMl8xLCBQQjNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9DT0xfTUFSSywJUDFNU0VMMl8xLCBQQjJfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9DTEtfTUFSSywJUDFNU0VMMl8xLCBQQjFfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9DUlNfTUFSSywJUDFNU0VMMl8xLCBQQjBfRk4pLAorCisJLyogUEMgRk4gKi8KKwlQSU5NVVhfREFUQShEQ0xLSU5fTUFSSywJUDFNU0VMM18wLCBQQzdfRk4pLAorCVBJTk1VWF9EQVRBKEhTWU5DX01BUkssCQlQMU1TRUwzXzAsIFBDNl9GTiksCisJUElOTVVYX0RBVEEoREI1X01BUkssCQlQMU1TRUwyXzAsIFBDNV9GTiksCisJUElOTVVYX0RBVEEoREI0X01BUkssCQlQMU1TRUwyXzAsIFBDNF9GTiksCisJUElOTVVYX0RBVEEoREIzX01BUkssCQlQMU1TRUwyXzAsIFBDM19GTiksCisJUElOTVVYX0RBVEEoREIyX01BUkssCQlQMU1TRUwyXzAsIFBDMl9GTiksCisJUElOTVVYX0RBVEEoREIxX01BUkssCQlQMU1TRUwyXzAsIFBDMV9GTiksCisJUElOTVVYX0RBVEEoREIwX01BUkssCQlQMU1TRUwyXzAsIFBDMF9GTiksCisKKwlQSU5NVVhfREFUQShIU1BJX1JYX01BUkssCVAxTVNFTDNfMSwgUEM3X0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX1RYX01BUkssCVAxTVNFTDNfMSwgUEM2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEM19NQVJLLAlQMU1TRUwyXzEsIFBDNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDJfTUFSSywJUDFNU0VMMl8xLCBQQzRfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQxX01BUkssCVAxTVNFTDJfMSwgUEMzX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEMF9NQVJLLAlQMU1TRUwyXzEsIFBDMl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYX0RWX01BUkssCVAxTVNFTDJfMSwgUEMxX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhfRVJfTUFSSywJUDFNU0VMMl8xLCBQQzBfRk4pLAorCisJLyogUEQgRk4gKi8KKwlQSU5NVVhfREFUQShEQ0xLT1VUX01BUkssCVBEN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0xLX01BUkssCVBENl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssCVBENV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfVFhEX01BUkssCVBENF9GTiksCisJUElOTVVYX0RBVEEoREFDSzFfTUFSSywJCVAxTVNFTDEzXzEsIFAxTVNFTDEyXzAsIFBEM19GTiksCisJUElOTVVYX0RBVEEoQkFDS19NQVJLLAkJUDFNU0VMMTNfMCwgUDFNU0VMMTJfMSwgUEQzX0ZOKSwKKwlQSU5NVVhfREFUQShGQUxFX01BUkssCQlQMU1TRUwxM18wLCBQMU1TRUwxMl8wLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0swX01BUkssCQlQMU1TRUwxNF8xLCBQRDJfRk4pLAorCVBJTk1VWF9EQVRBKEZDTEVfTUFSSywJCVAxTVNFTDE0XzAsIFBEMl9GTiksCisJUElOTVVYX0RBVEEoRFJFUTFfTUFSSywJCVAxTVNFTDEwXzAsIFAxTVNFTDlfMSwgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShCUkVRX01BUkssCQlQMU1TRUwxMF8xLCBQMU1TRUw5XzAsIFBEMV9GTiksCisJUElOTVVYX0RBVEEoVVNCX09WQzFfTUFSSywJUDFNU0VMMTBfMCwgUDFNU0VMOV8wLCBQRDFfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssCQlQMU1TRUwxMV8xLCBQRDBfRk4pLAorCVBJTk1VWF9EQVRBKFVTQl9PVkMwX01BUkssCVAxTVNFTDExXzAsIFBEMF9GTiksCisKKwkvKiBQRSBGTiAqLworCVBJTk1VWF9EQVRBKFVTQl9QRU5DMV9NQVJLLAlQRTdfRk4pLAorCVBJTk1VWF9EQVRBKFVTQl9QRU5DMF9NQVJLLAlQRTZfRk4pLAorCisJLyogUEYgRk4gKi8KKwlQSU5NVVhfREFUQShIQUMxX1NET1VUX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGN19GTiksCisJUElOTVVYX0RBVEEoSEFDMV9TRElOX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGNl9GTiksCisJUElOTVVYX0RBVEEoSEFDMV9TWU5DX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzAsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoSEFDMV9CSVRDTEtfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NET1VUX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGM19GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TRElOX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGMl9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9TWU5DX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzAsIFBGMV9GTiksCisJUElOTVVYX0RBVEEoSEFDMF9CSVRDTEtfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYwX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1NEQVRBX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGN19GTiksCisJUElOTVVYX0RBVEEoU1NJMV9TQ0tfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1dTX01BUkssCVAyTVNFTDE1XzAsIFAyTVNFTDE0XzEsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoU1NJMV9DTEtfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1NEQVRBX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGM19GTiksCisJUElOTVVYX0RBVEEoU1NJMF9TQ0tfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYyX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1dTX01BUkssCVAyTVNFTDEzXzAsIFAyTVNFTDEyXzEsIFBGMV9GTiksCisJUElOTVVYX0RBVEEoU1NJMF9DTEtfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYwX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUNNRF9NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjdfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxQ0RfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMVdQX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGNV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFDTEtfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY0X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQzX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGM19GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEMl9NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjJfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDFfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQwX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGMF9GTiksCisKKwkvKiBQRyBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUYzX1NDS19NQVJLLAlQMU1TRUw4XzAsIFBHN19GTiksCisJUElOTVVYX0RBVEEoU1NJMl9TREFUQV9NQVJLLAlQMU1TRUw4XzEsIFBHN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfUlhEX01BUkssCVAxTVNFTDdfMCwgUDFNU0VMNl8wLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTJfU0NLX01BUkssCVAxTVNFTDdfMSwgUDFNU0VMNl8wLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFRDTEtfTUFSSywJCVAxTVNFTDdfMCwgUDFNU0VMNl8xLCBQRzZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1RYRF9NQVJLLAlQMU1TRUw1XzAsIFAxTVNFTDRfMCwgUEc1X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kyX1dTX01BUkssCVAxTVNFTDVfMSwgUDFNU0VMNF8wLCBQRzVfRk4pLAorCVBJTk1VWF9EQVRBKEhBQ19SRVNfTUFSSywJUDFNU0VMNV8wLCBQMU1TRUw0XzEsIFBHNV9GTiksCisKKwkvKiBQSCBGTiAqLworCVBJTk1VWF9EQVRBKERBQ0szX01BUkssCQlQMk1TRUw0XzAsIFBIN19GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDTURfTUFSSywJUDJNU0VMNF8xLCBQSDdfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0syX01BUkssCQlQMk1TRUw0XzAsIFBINl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDRF9NQVJLLAlQMk1TRUw0XzEsIFBINl9GTiksCisJUElOTVVYX0RBVEEoRFJFUTNfTUFSSywJCVAyTVNFTDRfMCwgUEg1X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMFdQX01BUkssCVAyTVNFTDRfMSwgUEg1X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLAkJUDJNU0VMM18wLCBQMk1TRUwyXzEsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBDTEtfTUFSSywJUDJNU0VMM18xLCBQMk1TRUwyXzAsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfQ1RTX01BUkssCVAyTVNFTDNfMCwgUDJNU0VMMl8wLCBQSDRfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDNfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlRTX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKElSTDdfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDNfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDJfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDJfRk4pLAorCVBJTk1VWF9EQVRBKElSTDZfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDJfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDFfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUlhEX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKElSTDVfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDFfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwRDBfTUFSSywJUDJNU0VMMV8xLCBQMk1TRUwwXzAsIFBIMF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfVFhEX01BUkssCVAyTVNFTDFfMCwgUDJNU0VMMF8wLCBQSDBfRk4pLAorCVBJTk1VWF9EQVRBKElSTDRfTUFSSywJCVAyTVNFTDFfMCwgUDJNU0VMMF8xLCBQSDBfRk4pLAorCisJLyogUEogRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGNV9TQ0tfTUFSSywJUDJNU0VMMTFfMSwgUEo3X0ZOKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywJCVAyTVNFTDExXzAsIFBKN19GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUlhEX01BUkssCVAyTVNFTDEwXzAsIFBKNl9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssCVAyTVNFTDEwXzEsIFBKNl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfVFhEX01BUkssCVAyTVNFTDEwXzAsIFBKNV9GTiksCisJUElOTVVYX0RBVEEoQ0UyQl9NQVJLLAkJUDJNU0VMMTBfMSwgUEo1X0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLM19NQVJLLAkJUDJNU0VMN18wLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKENFMkFfTUFSSywJCVAyTVNFTDdfMSwgUEo0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9TQ0tfTUFSSywJUDJNU0VMOV8wLCBQMk1TRUw4XzAsIFBKM19GTiksCisJUElOTVVYX0RBVEEoRFJBSzJfTUFSSywJCVAyTVNFTDlfMCwgUDJNU0VMOF8xLCBQSjNfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfV1NfTUFSSywJUDJNU0VMOV8xLCBQMk1TRUw4XzAsIFBKM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfUlhEX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8wLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKERSQUsxX01BUkssCQlQMk1TRUw2XzAsIFAyTVNFTDVfMSwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShGU1RBVFVTX01BUkssCVAyTVNFTDZfMCwgUDJNU0VMNV8wLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfU0RBVEFfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzEsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjRfVFhEX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8wLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKERSQUswX01BUkssCQlQMk1TRUw2XzAsIFAyTVNFTDVfMSwgUEoxX0ZOKSwKKwlQSU5NVVhfREFUQShGU0VfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8wLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTNfU0NLX01BUkssCVAyTVNFTDZfMSwgUDJNU0VMNV8xLCBQSjFfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQQSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEE3LCBQQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTYsIFBBNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNSwgUEE1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE0LCBQQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTMsIFBBM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMiwgUEEyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEExLCBQQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTAsIFBBMF9EQVRBKSwKKworCS8qIFBCICovCisJUElOTVVYX0dQSU8oR1BJT19QQjcsIFBCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNiwgUEI2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI1LCBQQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjQsIFBCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMywgUEIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIyLCBQQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjEsIFBCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMCwgUEIwX0RBVEEpLAorCisJLyogUEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BDNywgUEM3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM2LCBQQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzUsIFBDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNCwgUEM0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMzLCBQQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzIsIFBDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMSwgUEMxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMwLCBQQzBfREFUQSksCisKKwkvKiBQRCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEQ3LCBQRDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDYsIFBENl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENSwgUEQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ0LCBQRDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDMsIFBEM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMiwgUEQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxLCBQRDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDAsIFBEMF9EQVRBKSwKKworCS8qIFBFICovCisJUElOTVVYX0dQSU8oR1BJT19QRTUsIFBFN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNCwgUEU2X0RBVEEpLAorCisJLyogUEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BGNywgUEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY2LCBQRjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjUsIFBGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNCwgUEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYzLCBQRjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIsIFBGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMSwgUEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYwLCBQRjBfREFUQSksCisKKwkvKiBQRyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEc3LCBQRzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRzYsIFBHNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHNSwgUEc1X0RBVEEpLAorCisJLyogUEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BINywgUEg3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg2LCBQSDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDUsIFBINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINCwgUEg0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgzLCBQSDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDIsIFBIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMSwgUEgxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgwLCBQSDBfREFUQSksCisKKwkvKiBQSiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEo3LCBQSjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjYsIFBKNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNSwgUEo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo0LCBQSjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjMsIFBKM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMiwgUEoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEoxLCBQSjFfREFUQSksCisKKwkvKiBGTiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0RFLAkJQ0RFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01BR0lDLAkJRVRIX01BR0lDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRElTUCwJCURJU1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTElOSywJCUVUSF9MSU5LX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFI1LAkJRFI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYX0VSLAkJRVRIX1RYX0VSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFI0LAkJRFI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYX0VOLAkJRVRIX1RYX0VOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIzLAkJRFIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDMsCQlFVEhfVFhEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMiwJCURSMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQyLAkJRVRIX1RYRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjEsCQlEUjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMSwJCUVUSF9UWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIwLAkJRFIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDAsCQlFVEhfVFhEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZTWU5DLAkJVlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX0NMSywJCUhTUElfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fT0RERiwJCU9EREZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX0NTLAkJSFNQSV9DU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHNSwJCURHNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9NRElPLAkJRVRIX01ESU9fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzQsCQlERzRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfQ0xLLAkJRVRIX1JYX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMywJCURHM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9NREMsCQlFVEhfTURDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREcyLAkJREcyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX0NPTCwJCUVUSF9DT0xfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzEsCQlERzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfQ0xLLAkJRVRIX1RYX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMCwJCURHMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9DUlMsCQlFVEhfQ1JTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRENMS0lOLAkJRENMS0lOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9SWCwJCUhTUElfUlhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1lOQywJCUhTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFNQSV9UWCwJCUhTUElfVFhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjUsCQlEQjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMywJCUVUSF9SWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREI0LAkJREI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDIsCQlFVEhfUlhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMywJCURCM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQxLAkJRVRIX1JYRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjIsCQlEQjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMCwJCUVUSF9SWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIxLAkJREIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYX0RWLAkJRVRIX1JYX0RWX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIwLAkJREIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYX0VSLAkJRVRIX1JYX0VSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRENMS09VVCwJCURDTEtPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9TTEssCQlTQ0lGMV9TTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9SWEQsCQlTQ0lGMV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsCQlTQ0lGMV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMSwJCURBQ0sxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQkFDSywJCUJBQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQUxFLAkJRkFMRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swLAkJREFDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0xFLAkJRkNMRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExLAkJRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUkVRLAkJQlJFUV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9PVkMxLAkJVVNCX09WQzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwJCURSRVEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX09WQzAsCQlVU0JfT1ZDMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9QRU5DMSwJCVVTQl9QRU5DMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQl9QRU5DMCwJCVVTQl9QRU5DMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfU0RPVVQsCQlIQUMxX1NET1VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9TREFUQSwJCVNTSTFfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUNNRCwJCVNESUYxQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TRElOLAkJSEFDMV9TRElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9TQ0ssCQlTU0kxX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ0QsCQlTRElGMUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TWU5DLAkJSEFDMV9TWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9XUywJCVNTSTFfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMVdQLAkJU0RJRjFXUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzFfQklUQ0xLLAlIQUMxX0JJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfQ0xLLAkJU1NJMV9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUNMSywJCVNESUYxQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TRE9VVCwJCUhBQzBfU0RPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1NEQVRBLAkJU1NJMF9TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDMsCQlTRElGMUQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TRElOLAkJSEFDMF9TRElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9TQ0ssCQlTU0kwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDIsCQlTRElGMUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9TWU5DLAkJSEFDMF9TWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9XUywJCVNTSTBfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQxLAkJU0RJRjFEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hBQzBfQklUQ0xLLAlIQUMwX0JJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfQ0xLLAkJU1NJMF9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMUQwLAkJU0RJRjFEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1NDSywJCVNDSUYzX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfU0RBVEEsCQlTU0kyX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUlhELAkJU0NJRjNfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMSywJCVRDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kyX1NDSywJCVNTSTJfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfVFhELAkJU0NJRjNfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDX1JFUywJCUhBQ19SRVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kyX1dTLAkJU1NJMl9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0szLAkJREFDSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMENNRCwJCVNESUYwQ01EX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzIsCQlEQUNLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ0QsCQlTRElGMENEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTMsCQlEUkVRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwV1AsCQlTRElGMFdQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfQ1RTLAkJU0NJRjBfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTIsCQlEUkVRMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ0xLLAkJU0RJRjBDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SVFMsCQlTQ0lGMF9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw3LAkJSVJMN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDMsCQlTRElGMEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfU0NLLAkJU0NJRjBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNiwJCUlSTDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQyLAkJU0RJRjBEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JYRCwJCVNDSUYwX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDUsCQlJUkw1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMSwJCVNESUYwRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9UWEQsCQlTQ0lGMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw0LAkJSVJMNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDAsCQlTRElGMEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfU0NLLAkJU0NJRjVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlJCLAkJRlJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUlhELAkJU0NJRjVfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LAkJSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfVFhELAkJU0NJRjVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQiwJCUNFMkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMywJCURSQUszX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQSwJCUNFMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9TQ0ssCQlTQ0lGNF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMiwJCURSQUsyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJM19XUywJCVNTSTNfV1NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9SWEQsCQlTQ0lGNF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkFLMSwJCURSQUsxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJM19TREFUQSwJCVNTSTNfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GU1RBVFVTLAkJRlNUQVRVU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1RYRCwJCVNDSUY0X1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUswLAkJRFJBSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1NDSywJCVNTSTNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNFLAkJRlNFX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhmZmNjMDAwMCwgMTYsIDIpIHsKKwkJUEE3X0ZOLCBQQTdfT1VULCBQQTdfSU4sIFBBN19JTl9QVSwKKwkJUEE2X0ZOLCBQQTZfT1VULCBQQTZfSU4sIFBBNl9JTl9QVSwKKwkJUEE1X0ZOLCBQQTVfT1VULCBQQTVfSU4sIFBBNV9JTl9QVSwKKwkJUEE0X0ZOLCBQQTRfT1VULCBQQTRfSU4sIFBBNF9JTl9QVSwKKwkJUEEzX0ZOLCBQQTNfT1VULCBQQTNfSU4sIFBBM19JTl9QVSwKKwkJUEEyX0ZOLCBQQTJfT1VULCBQQTJfSU4sIFBBMl9JTl9QVSwKKwkJUEExX0ZOLCBQQTFfT1VULCBQQTFfSU4sIFBBMV9JTl9QVSwKKwkJUEEwX0ZOLCBQQTBfT1VULCBQQTBfSU4sIFBBMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSIiwgMHhmZmNjMDAwMiwgMTYsIDIpIHsKKwkJUEI3X0ZOLCBQQjdfT1VULCBQQjdfSU4sIFBCN19JTl9QVSwKKwkJUEI2X0ZOLCBQQjZfT1VULCBQQjZfSU4sIFBCNl9JTl9QVSwKKwkJUEI1X0ZOLCBQQjVfT1VULCBQQjVfSU4sIFBCNV9JTl9QVSwKKwkJUEI0X0ZOLCBQQjRfT1VULCBQQjRfSU4sIFBCNF9JTl9QVSwKKwkJUEIzX0ZOLCBQQjNfT1VULCBQQjNfSU4sIFBCM19JTl9QVSwKKwkJUEIyX0ZOLCBQQjJfT1VULCBQQjJfSU4sIFBCMl9JTl9QVSwKKwkJUEIxX0ZOLCBQQjFfT1VULCBQQjFfSU4sIFBCMV9JTl9QVSwKKwkJUEIwX0ZOLCBQQjBfT1VULCBQQjBfSU4sIFBCMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhmZmNjMDAwNCwgMTYsIDIpIHsKKwkJUEM3X0ZOLCBQQzdfT1VULCBQQzdfSU4sIFBDN19JTl9QVSwKKwkJUEM2X0ZOLCBQQzZfT1VULCBQQzZfSU4sIFBDNl9JTl9QVSwKKwkJUEM1X0ZOLCBQQzVfT1VULCBQQzVfSU4sIFBDNV9JTl9QVSwKKwkJUEM0X0ZOLCBQQzRfT1VULCBQQzRfSU4sIFBDNF9JTl9QVSwKKwkJUEMzX0ZOLCBQQzNfT1VULCBQQzNfSU4sIFBDM19JTl9QVSwKKwkJUEMyX0ZOLCBQQzJfT1VULCBQQzJfSU4sIFBDMl9JTl9QVSwKKwkJUEMxX0ZOLCBQQzFfT1VULCBQQzFfSU4sIFBDMV9JTl9QVSwKKwkJUEMwX0ZOLCBQQzBfT1VULCBQQzBfSU4sIFBDMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhmZmNjMDAwNiwgMTYsIDIpIHsKKwkJUEQ3X0ZOLCBQRDdfT1VULCBQRDdfSU4sIFBEN19JTl9QVSwKKwkJUEQ2X0ZOLCBQRDZfT1VULCBQRDZfSU4sIFBENl9JTl9QVSwKKwkJUEQ1X0ZOLCBQRDVfT1VULCBQRDVfSU4sIFBENV9JTl9QVSwKKwkJUEQ0X0ZOLCBQRDRfT1VULCBQRDRfSU4sIFBENF9JTl9QVSwKKwkJUEQzX0ZOLCBQRDNfT1VULCBQRDNfSU4sIFBEM19JTl9QVSwKKwkJUEQyX0ZOLCBQRDJfT1VULCBQRDJfSU4sIFBEMl9JTl9QVSwKKwkJUEQxX0ZOLCBQRDFfT1VULCBQRDFfSU4sIFBEMV9JTl9QVSwKKwkJUEQwX0ZOLCBQRDBfT1VULCBQRDBfSU4sIFBEMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSIiwgMHhmZmNjMDAwOCwgMTYsIDIpIHsKKwkJUEU3X0ZOLCBQRTdfT1VULCBQRTdfSU4sIFBFN19JTl9QVSwKKwkJUEU2X0ZOLCBQRTZfT1VULCBQRTZfSU4sIFBFNl9JTl9QVSwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4ZmZjYzAwMGEsIDE2LCAyKSB7CisJCVBGN19GTiwgUEY3X09VVCwgUEY3X0lOLCBQRjdfSU5fUFUsCisJCVBGNl9GTiwgUEY2X09VVCwgUEY2X0lOLCBQRjZfSU5fUFUsCisJCVBGNV9GTiwgUEY1X09VVCwgUEY1X0lOLCBQRjVfSU5fUFUsCisJCVBGNF9GTiwgUEY0X09VVCwgUEY0X0lOLCBQRjRfSU5fUFUsCisJCVBGM19GTiwgUEYzX09VVCwgUEYzX0lOLCBQRjNfSU5fUFUsCisJCVBGMl9GTiwgUEYyX09VVCwgUEYyX0lOLCBQRjJfSU5fUFUsCisJCVBGMV9GTiwgUEYxX09VVCwgUEYxX0lOLCBQRjFfSU5fUFUsCisJCVBGMF9GTiwgUEYwX09VVCwgUEYwX0lOLCBQRjBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4ZmZjYzAwMGMsIDE2LCAyKSB7CisJCVBHN19GTiwgUEc3X09VVCwgUEc3X0lOLCBQRzdfSU5fUFUsCisJCVBHNl9GTiwgUEc2X09VVCwgUEc2X0lOLCBQRzZfSU5fUFUsCisJCVBHNV9GTiwgUEc1X09VVCwgUEc1X0lOLCBQRzVfSU5fUFUsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGZmY2MwMDBlLCAxNiwgMikgeworCQlQSDdfRk4sIFBIN19PVVQsIFBIN19JTiwgUEg3X0lOX1BVLAorCQlQSDZfRk4sIFBINl9PVVQsIFBINl9JTiwgUEg2X0lOX1BVLAorCQlQSDVfRk4sIFBINV9PVVQsIFBINV9JTiwgUEg1X0lOX1BVLAorCQlQSDRfRk4sIFBINF9PVVQsIFBINF9JTiwgUEg0X0lOX1BVLAorCQlQSDNfRk4sIFBIM19PVVQsIFBIM19JTiwgUEgzX0lOX1BVLAorCQlQSDJfRk4sIFBIMl9PVVQsIFBIMl9JTiwgUEgyX0lOX1BVLAorCQlQSDFfRk4sIFBIMV9PVVQsIFBIMV9JTiwgUEgxX0lOX1BVLAorCQlQSDBfRk4sIFBIMF9PVVQsIFBIMF9JTiwgUEgwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGZmY2MwMDEwLCAxNiwgMikgeworCQlQSjdfRk4sIFBKN19PVVQsIFBKN19JTiwgUEo3X0lOX1BVLAorCQlQSjZfRk4sIFBKNl9PVVQsIFBKNl9JTiwgUEo2X0lOX1BVLAorCQlQSjVfRk4sIFBKNV9PVVQsIFBKNV9JTiwgUEo1X0lOX1BVLAorCQlQSjRfRk4sIFBKNF9PVVQsIFBKNF9JTiwgUEo0X0lOX1BVLAorCQlQSjNfRk4sIFBKM19PVVQsIFBKM19JTiwgUEozX0lOX1BVLAorCQlQSjJfRk4sIFBKMl9PVVQsIFBKMl9JTiwgUEoyX0lOX1BVLAorCQlQSjFfRk4sIFBKMV9PVVQsIFBKMV9JTiwgUEoxX0lOX1BVLAorCQkwLCAwLCAwLCAwLCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQMU1TRUxSIiwgMHhmZmNjMDA4MCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUDFNU0VMMTRfMCwgUDFNU0VMMTRfMSwKKwkJUDFNU0VMMTNfMCwgUDFNU0VMMTNfMSwKKwkJUDFNU0VMMTJfMCwgUDFNU0VMMTJfMSwKKwkJUDFNU0VMMTFfMCwgUDFNU0VMMTFfMSwKKwkJUDFNU0VMMTBfMCwgUDFNU0VMMTBfMSwKKwkJUDFNU0VMOV8wLCAgUDFNU0VMOV8xLAorCQlQMU1TRUw4XzAsICBQMU1TRUw4XzEsCisJCVAxTVNFTDdfMCwgIFAxTVNFTDdfMSwKKwkJUDFNU0VMNl8wLCAgUDFNU0VMNl8xLAorCQlQMU1TRUw1XzAsICBQMU1TRUw1XzEsCisJCVAxTVNFTDRfMCwgIFAxTVNFTDRfMSwKKwkJUDFNU0VMM18wLCAgUDFNU0VMM18xLAorCQlQMU1TRUwyXzAsICBQMU1TRUwyXzEsCisJCVAxTVNFTDFfMCwgIFAxTVNFTDFfMSwKKwkJUDFNU0VMMF8wLCAgUDFNU0VMMF8xIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlAyTVNFTFIiLCAweGZmY2MwMDgyLCAxNiwgMSkgeworCQlQMk1TRUwxNV8wLCBQMk1TRUwxNV8xLAorCQlQMk1TRUwxNF8wLCBQMk1TRUwxNF8xLAorCQlQMk1TRUwxM18wLCBQMk1TRUwxM18xLAorCQlQMk1TRUwxMl8wLCBQMk1TRUwxMl8xLAorCQlQMk1TRUwxMV8wLCBQMk1TRUwxMV8xLAorCQlQMk1TRUwxMF8wLCBQMk1TRUwxMF8xLAorCQlQMk1TRUw5XzAsICBQMk1TRUw5XzEsCisJCVAyTVNFTDhfMCwgIFAyTVNFTDhfMSwKKwkJUDJNU0VMN18wLCAgUDJNU0VMN18xLAorCQlQMk1TRUw2XzAsICBQMk1TRUw2XzEsCisJCVAyTVNFTDVfMCwgIFAyTVNFTDVfMSwKKwkJUDJNU0VMNF8wLCAgUDJNU0VMNF8xLAorCQlQMk1TRUwzXzAsICBQMk1TRUwzXzEsCisJCVAyTVNFTDJfMCwgIFAyTVNFTDJfMSwKKwkJUDJNU0VMMV8wLCAgUDJNU0VMMV8xLAorCQlQMk1TRUwwXzAsICBQMk1TRUwwXzEgfQorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHBpbm11eF9kYXRhX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEFEUiIsIDB4ZmZjYzAwMjAsIDgpIHsKKwkJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSIiwgMHhmZmNjMDAyMiwgOCkgeworCQlQQjdfREFUQSwgUEI2X0RBVEEsIFBCNV9EQVRBLCBQQjRfREFUQSwKKwkJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGZmY2MwMDI0LCA4KSB7CisJCVBDN19EQVRBLCBQQzZfREFUQSwgUEM1X0RBVEEsIFBDNF9EQVRBLAorCQlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4ZmZjYzAwMjYsIDgpIHsKKwkJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJCVBEM19EQVRBLCBQRDJfREFUQSwgUEQxX0RBVEEsIFBEMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRURSIiwgMHhmZmNjMDAyOCwgOCkgeworCQlQRTdfREFUQSwgUEU2X0RBVEEsCisJCTAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFIiLCAweGZmY2MwMDJhLCA4KSB7CisJCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCQlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEdEUiIsIDB4ZmZjYzAwMmMsIDgpIHsKKwkJUEc3X0RBVEEsIFBHNl9EQVRBLCBQRzVfREFUQSwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4ZmZjYzAwMmUsIDgpIHsKKwkJUEg3X0RBVEEsIFBINl9EQVRBLCBQSDVfREFUQSwgUEg0X0RBVEEsCisJCVBIM19EQVRBLCBQSDJfREFUQSwgUEgxX0RBVEEsIFBIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhmZmNjMDAzMCwgOCkgeworCQlQSjdfREFUQSwgUEo2X0RBVEEsIFBKNV9EQVRBLCBQSjRfREFUQSwKKwkJUEozX0RBVEEsIFBKMl9EQVRBLCBQSjFfREFUQSwgMCB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzc4Nl9waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3ODZfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fRlNFLAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3Nzg2X3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCmluZGV4IDRmZjRkYzYuLmMxNTQ5MzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpaWMwX3Jlc291cmNlc1tdID0gewpAQCAtMTQwLDYgKzE0MSwzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShqcHVfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTE3NSw2ICsyMDgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM0M19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmaWljMF9kZXZpY2UsCiAJJmlpYzFfZGV2aWNlLAogCSZzY2lfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwppbmRleCA4MzlhZTk3Li45M2VjZjhlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaWljX3Jlc291cmNlc1tdID0gewpAQCAtMTQ3LDYgKzE0OCwzOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2ZXUxX3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCkBAIC0xNjcsNiArMjAwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczNjZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJmlpY19kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCiAJJnVzYl9ob3N0X2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggNTE0NmFmYy4uMGU1ZDIwNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCkBAIC0xNzYsNiArMTc3LDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGpwdV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMjA5LDYgKzI0Miw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZ1c2JmX2RldmljZSwKIAkmaWljX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKaW5kZXggODQ5NzcwZC4uNTMzOGRhYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCkBAIC0xMDAsNiArMTAxLDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZldTFfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMDAwMDAsCkBAIC0yMjEsNiArMjU0LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJmlpY19kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCmluZGV4IDNjNWI2MjkuLmJkZjBmNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFlvc2hpaGlybyBTaGltb2RhCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBOb2J1aGlybyBJd2FtYXRzdQorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgTm9idWhpcm8gSXdhbWF0c3UKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMjIsMTggKzIyLDggQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAl9LAogCVsxXSA9IHsKLQkJLyogUGVyaW9kIElSUSAqLwotCQkuc3RhcnQJPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLwotCQkuc3RhcnQJPSAyMCwKKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KKwkJLnN0YXJ0ICA9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTUwLDE3ICs0MCwxNyBAQAogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmUwODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNzYsIDc3LCA3OSwgNzggfSwKKwkJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxMDQsIDEwNSwgMTA3LCAxMDYgfSwKKwkJLmlycXMJCT0geyAxMDQsIDEwNCwgMTA0LCAxMDQgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMTQ4LDkzICsxMzgsNjUgQEAKIAlJUkxfSEhMTCwgSVJMX0hITEgsIElSTF9ISEhMLAogCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLCBMQ0RDLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsCi0JSUlDMCwgSUlDMSwKLQlDTVQsCi0JR0VJTlQwLCBHRUlOVDEsIEdFSU5UMiwKLQlIQUMsCi0JUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwKLQlQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDAsCi0JU1RJRjAsIFNUSUYxLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTSU9GMCwgU0lPRjEsIFNJT0YyLAotCVVTQkgsIFVTQkZJMCwgVVNCRkkxLAotCVRQVSwgUENDLAotCU1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFksCi0JU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQsCisJUlRDLCBXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgTENEQywgRE1BQywgU0NJRjAsIElJQzAsIElJQzEsIENNVCwgR0VUSEVSLCBIQUMsCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU1RJRjAsIFNUSUYxLCBTQ0lGMSwgU0lPRjAsIFNJT0YxLCBTSU9GMiwKKwlVU0JILCBVU0JGLCBUUFUsIFBDQywgTU1DSUYsIFNJTSwKIAlUTVUzLCBUTVU0LCBUTVU1LCBBREMsIFNTSTAsIFNTSTEsIFNTSTIsIFNTSTMsCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJLAotCUdQSU9fQ0gwLCBHUElPX0NIMSwgR1BJT19DSDIsIEdQSU9fQ0gzLAorCVNDSUYyLCBHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JVE1VMDEyLCBUTVUzNDUsIFJUQywgRE1BQywgU0NJRjAsIEdFVEhFUiwgUENJQzUsCi0JU0NJRjEsIFVTQkYsIE1NQ0lGLCBTSU0sIFNDSUYyLCBHUElPLAorCVRNVTAxMiwgVE1VMzQ1LAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksIElOVENfVkVDVChUTVUwLCAweDU4MCksCiAJSU5UQ19WRUNUKFRNVTEsIDB4NWEwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwKIAlJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg1ZTApLCBJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAogCUlOVENfVkVDVChMQ0RDLCAweDYyMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNQUUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4NzYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDc4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2NjApLAorCUlOVENfVkVDVChETUFDLCAweDY4MCksIElOVENfVkVDVChETUFDLCAweDZhMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChETUFDLCAweDc4MCksIElOVENfVkVDVChETUFDLCAweDdhMCksCiAJSU5UQ19WRUNUKElJQzAsIDB4OEEwKSwgSU5UQ19WRUNUKElJQzEsIDB4OEMwKSwKLQlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChHRUlOVDAsIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoR0VJTlQxLCAweDk0MCksIElOVENfVkVDVChHRUlOVDIsIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChHRVRIRVIsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoR0VUSEVSLCAweDk0MCksIElOVENfVkVDVChHRVRIRVIsIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoSEFDLCAweDk4MCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKIAlJTlRDX1ZFQ1QoU1RJRjAsIDB4YjQwKSwgSU5UQ19WRUNUKFNUSUYxLCAweGI2MCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweGJhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweGJlMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGI4MCksIElOVENfVkVDVChTQ0lGMSwgMHhiYTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmUwKSwKIAlJTlRDX1ZFQ1QoU0lPRjAsIDB4YzAwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGMyMCksCi0JSU5UQ19WRUNUKFVTQkgsIDB4YzYwKSwgSU5UQ19WRUNUKFVTQkZJMCwgMHhjODApLAotCUlOVENfVkVDVChVU0JGSTEsIDB4Y2EwKSwKKwlJTlRDX1ZFQ1QoVVNCSCwgMHhjNjApLCBJTlRDX1ZFQ1QoVVNCRiwgMHhjODApLAorCUlOVENfVkVDVChVU0JGLCAweGNhMCksCiAJSU5UQ19WRUNUKFRQVSwgMHhjYzApLCBJTlRDX1ZFQ1QoUENDLCAweGNlMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0ZTVEFULCAweGQwMCksIElOVENfVkVDVChNTUNJRl9UUkFOLCAweGQyMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0VSUiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUZfRlJEWSwgMHhkNjApLAotCUlOVENfVkVDVChTSU1fRVJJLCAweGQ4MCksIElOVENfVkVDVChTSU1fUlhJLCAweGRhMCksCi0JSU5UQ19WRUNUKFNJTV9UWEksIDB4ZGMwKSwgSU5UQ19WRUNUKFNJTV9URU5ELCAweGRlMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweGQ4MCksIElOVENfVkVDVChTSU0sIDB4ZGEwKSwKKwlJTlRDX1ZFQ1QoU0lNLCAweGRjMCksIElOVENfVkVDVChTSU0sIDB4ZGUwKSwKIAlJTlRDX1ZFQ1QoVE1VMywgMHhlMDApLCBJTlRDX1ZFQ1QoVE1VNCwgMHhlMjApLAogCUlOVENfVkVDVChUTVU1LCAweGU0MCksIElOVENfVkVDVChBREMsIDB4ZTYwKSwKIAlJTlRDX1ZFQ1QoU1NJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhlYTApLAogCUlOVENfVkVDVChTU0kyLCAweGVjMCksIElOVENfVkVDVChTU0kzLCAweGVlMCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHhmMDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweGYyMCksCi0JSU5UQ19WRUNUKFNDSUYyX0JSSSwgMHhmNDApLCBJTlRDX1ZFQ1QoU0NJRjJfVFhJLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9fQ0gwLCAweGY4MCksIElOVENfVkVDVChHUElPX0NIMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPX0NIMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT19DSDMsIDB4ZmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjAwKSwgSU5UQ19WRUNUKFNDSUYyLCAweGYyMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweGY0MCksIElOVENfVkVDVChTQ0lGMiwgMHhmNjApLAorCUlOVENfVkVDVChHUElPLCAweGY4MCksIElOVENfVkVDVChHUElPLCAweGZhMCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmUwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoVE1VMDEyLCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJKSwKIAlJTlRDX0dST1VQKFRNVTM0NSwgVE1VMywgVE1VNCwgVE1VNSksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoRE1BQywgRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwKLQkJICAgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKEdFVEhFUiwgR0VJTlQwLCBHRUlOVDEsIEdFSU5UMiksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoVVNCRiwgVVNCRkkwLCBVU0JGSTEpLAotCUlOVENfR1JPVVAoTU1DSUYsIE1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFkpLAotCUlOVENfR1JPVVAoU0lNLCBTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9fQ0gwLCBHUElPX0NIMSwgR1BJT19DSDIsIEdQSU9fQ0gzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCmluZGV4IGZiODIwMGMuLjZmNzIyN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCkBAIC0yMCwxNyArMjAsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCisJCS8qIFNoYXJlZCBQZXJpb2QvQ2FycnkvQWxhcm0gSVJRICovCiAJCS5zdGFydAk9IDIwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtNDgsMTIgKzM4LDEyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTkwLDgyICs4MCw1NSBAQAogCUlSTF9ISExMLCBJUkxfSEhMSCwgSVJMX0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULAotCVRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCi0JSFVESSwKLQlETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLCBETUFDMF9ETUlOVDMsIERNQUMwX0RNQUUsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCURNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywKLQlDTVQsIEhBQywKLQlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELAotCVBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JU0lPRiwgSFNQSSwKLQlNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZLAotCURNQUMxX0RNSU5UOCwgRE1BQzFfRE1JTlQ5LCBETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExLAotCVRNVTMsIFRNVTQsIFRNVTUsCi0JU1NJLAotCUZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEsCi0JR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzLAorCVJUQywgV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAorCUhVREksIERNQUMwLCBTQ0lGMCwgRE1BQzEsIENNVCwgSEFDLAorCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsIFBDSUM1LAorCVNDSUYxLCBTSU9GLCBIU1BJLCBNTUNJRiwgVE1VMywgVE1VNCwgVE1VNSwgU1NJLCBGTENUTCwJR1BJTywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KIAotCVJUQywgVE1VMDEyLCBETUFDMCwgU0NJRjAsIERNQUM0NSwgRE1BQzEsCi0JUENJQzUsIFNDSUYxLCBNTUNJRiwgVE1VMzQ1LCBGTENUTCwgR1BJTywKKwlUTVUwMTIsCVRNVTM0NSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChUTVUwLCAweDU4MCksIElOVENfVkVDVChUTVUxLCAweDVhMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NWUwKSwKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDIsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMywgMHg2YTApLAotCUlOVENfVkVDVChETUFDMF9ETUFFLCAweDZjMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDc2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UNCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ1LCAweDdhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UNiwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ3LCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY0MCksIElOVENfVkVDVChETUFDMCwgMHg2NjApLAorCUlOVENfVkVDVChETUFDMCwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChETUFDMCwgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4N2MwKSwgSU5UQ19WRUNUKERNQUMxLCAweDdlMCksCiAJSU5UQ19WRUNUKENNVCwgMHg5MDApLCBJTlRDX1ZFQ1QoSEFDLCAweDk4MCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweGJhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHhiYzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweGJlMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJhMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGJjMCksIElOVENfVkVDVChTQ0lGMSwgMHhiZTApLAogCUlOVENfVkVDVChTSU9GLCAweGMwMCksIElOVENfVkVDVChIU1BJLCAweGM4MCksCi0JSU5UQ19WRUNUKE1NQ0lGX0ZTVEFULCAweGQwMCksIElOVENfVkVDVChNTUNJRl9UUkFOLCAweGQyMCksCi0JSU5UQ19WRUNUKE1NQ0lGX0VSUiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUZfRlJEWSwgMHhkNjApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDgsIDB4ZDgwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UOSwgMHhkYTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDEwLCAweGRjMCksIElOVENfVkVDVChETUFDMV9ETUlOVDExLCAweGRlMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ZDgwKSwgSU5UQ19WRUNUKERNQUMxLCAweGRhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweGRjMCksIElOVENfVkVDVChETUFDMSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwKIAlJTlRDX1ZFQ1QoU1NJLCAweGU4MCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMU1RFLCAweGYwMCksIElOVENfVkVDVChGTENUTF9GTEVORCwgMHhmMjApLAotCUlOVENfVkVDVChGTENUTF9GTFRSUTAsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMSwgMHhmNjApLAotCUlOVENfVkVDVChHUElPSTAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9JMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPSTIsIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU9JMywgMHhmZTApLAorCUlOVENfVkVDVChGTENUTCwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAogCUlOVENfR1JPVVAoVE1VMDEyLCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLAotCQkgICBETUFDMF9ETUlOVDMsIERNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsCi0JCSAgIERNQUMxX0RNSU5UOSwgRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoTU1DSUYsIE1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsCi0JCSAgIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCAzMGJhYTYzLi5kODA4MDJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtMjAsMTggKzIwLDEzIEBACiAJCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZWIwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0NCwgNDUsIDQ3LCA0NiB9LAotCX0sCi0KLQkvKgotCSAqIFRoZSByZXN0IG9mIHRoZXNlIGFsbCBoYXZlIG11bHRpcGxleGVkIElSUXMKLQkgKi8KLQl7CisJCS5pcnFzCQk9IHsgNDQsIDQ0LCA0NCwgNDQgfSwKKwl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmVjMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCkBAIC05MSwzMyArODYsMTkgQEAKIAlJUkw0X0hITEwsIElSTDRfSEhMSCwgSVJMNF9ISEhMLAogCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKLQlXRFQsCi0JVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywKLQlETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCURNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsIERNQUMxX0RNSU5UOSwKLQlETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExLCBETUFDMV9ETUFFLAotCUhTUEksCisJV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAorCUhVREksIERNQUMwLCBTQ0lGMCwgU0NJRjEsIERNQUMxLCBIU1BJLAogCVNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAotCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsCi0JUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwLAotCVNJT0YsCi0JTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSwKLQlEVSwKLQlHRFRBX0dBQ0xJLCBHRFRBX0dBTUNJLCBHRFRBX0dBRVJJLAorCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsIFBDSUM1LAorCVNJT0YsIE1NQ0lGLCBEVSwgR0RUQSwKIAlUTVUzLCBUTVU0LCBUTVU1LAogCVNTSTAsIFNTSTEsCiAJSEFDMCwgSEFDMSwKLQlGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExLAotCUdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMywKKwlGTENUTCwgR1BJTywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KIAotCVRNVTAxMiwgRE1BQzAsIFNDSUYwLCBTQ0lGMSwgRE1BQzEsCi0JUENJQzUsIE1NQ0lGLCBHRFRBLCBUTVUzNDUsIEZMQ1RMLCBHUElPCisJVE1VMDEyLAlUTVUzNDUKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtMTI1LDU3ICsxMDYsNDUgQEAKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg1ODApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg1YTApLAogCUlOVENfVkVDVChUTVUyLCAweDVjMCksIElOVENfVkVDVChUTVUyX1RJQ1BJLCAweDVlMCksCiAJSU5UQ19WRUNUKEhVREksIDB4NjAwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQwLCAweDYyMCksIElOVENfVkVDVChETUFDMF9ETUlOVDEsIDB4NjQwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQyLCAweDY2MCksIElOVENfVkVDVChETUFDMF9ETUlOVDMsIDB4NjgwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDZhMCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1BRSwgMHg2ZTApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg3NjApLAotCUlOVENfVkVDVChTQ0lGMV9FUkksIDB4NzgwKSwgSU5UQ19WRUNUKFNDSUYxX1JYSSwgMHg3YTApLAotCUlOVENfVkVDVChTQ0lGMV9CUkksIDB4N2MwKSwgSU5UQ19WRUNUKFNDSUYxX1RYSSwgMHg3ZTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDYsIDB4ODgwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UNywgMHg4YTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDgsIDB4OGMwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UOSwgMHg4ZTApLAotCUlOVENfVkVDVChETUFDMV9ETUlOVDEwLCAweDkwMCksIElOVENfVkVDVChETUFDMV9ETUlOVDExLCAweDkyMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNQUUsIDB4OTQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY0MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY2MCksIElOVENfVkVDVChETUFDMCwgMHg2ODApLAorCUlOVENfVkVDVChETUFDMCwgMHg2YTApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDc0MCksIElOVENfVkVDVChTQ0lGMCwgMHg3NjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3ODApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4N2EwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4N2MwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDg4MCksIElOVENfVkVDVChETUFDMSwgMHg4YTApLAorCUlOVENfVkVDVChETUFDMSwgMHg4YzApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4OTAwKSwgSU5UQ19WRUNUKERNQUMxLCAweDkyMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDk0MCksCiAJSU5UQ19WRUNUKEhTUEksIDB4OTYwKSwKIAlJTlRDX1ZFQ1QoU0NJRjIsIDB4OTgwKSwgSU5UQ19WRUNUKFNDSUYzLCAweDlhMCksCiAJSU5UQ19WRUNUKFNDSUY0LCAweDljMCksIElOVENfVkVDVChTQ0lGNSwgMHg5ZTApLAogCUlOVENfVkVDVChQQ0lTRVJSLCAweGEwMCksIElOVENfVkVDVChQQ0lJTlRBLCAweGEyMCksCiAJSU5UQ19WRUNUKFBDSUlOVEIsIDB4YTQwKSwgSU5UQ19WRUNUKFBDSUlOVEMsIDB4YTYwKSwKLQlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJRVJSLCAweGFhMCksCi0JSU5UQ19WRUNUKFBDSVBXRDMsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSVBXRDIsIDB4YWUwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJUFdEMCwgMHhiMjApLAorCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lDNSwgMHhhYTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhhYzApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWUwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGIyMCksCiAJSU5UQ19WRUNUKFNJT0YsIDB4YzAwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQwMCksIElOVENfVkVDVChNTUNJRiwgMHhkMjApLAorCUlOVENfVkVDVChNTUNJRiwgMHhkNDApLCBJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDYwKSwKIAlJTlRDX1ZFQ1QoRFUsIDB4ZDgwKSwKLQlJTlRDX1ZFQ1QoR0RUQV9HQUNMSSwgMHhkYTApLCBJTlRDX1ZFQ1QoR0RUQV9HQU1DSSwgMHhkYzApLAotCUlOVENfVkVDVChHRFRBX0dBRVJJLCAweGRlMCksCisJSU5UQ19WRUNUKEdEVEEsIDB4ZGEwKSwgSU5UQ19WRUNUKEdEVEEsIDB4ZGMwKSwKKwlJTlRDX1ZFQ1QoR0RUQSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwKIAlJTlRDX1ZFQ1QoU1NJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhlYTApLAogCUlOVENfVkVDVChIQUMwLCAweGVjMCksIElOVENfVkVDVChIQUMxLCAweGVlMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMU1RFLCAweGYwMCksIElOVENfVkVDVChGTENUTF9GTEVORCwgMHhmMjApLAotCUlOVENfVkVDVChGTENUTF9GTFRSUTAsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMSwgMHhmNjApLAotCUlOVENfVkVDVChHUElPSTAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9JMSwgMHhmYTApLAotCUlOVENfVkVDVChHUElPSTIsIDB4ZmMwKSwgSU5UQ19WRUNUKEdQSU9JMywgMHhmZTApLAorCUlOVENfVkVDVChGTENUTCwgMHhmMDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjQwKSwgSU5UQ19WRUNUKEZMQ1RMLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsCi0JCSAgIERNQUMwX0RNSU5UMywgRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDMV9ETUlOVDYsIERNQUMxX0RNSU5UNywgRE1BQzFfRE1JTlQ4LAotCQkgICBETUFDMV9ETUlOVDksIERNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsIERNQUMxX0RNQUUpLAotCUlOVENfR1JPVVAoUENJQzUsIFBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCi0JSU5UQ19HUk9VUChHRFRBLCBHRFRBX0dBQ0xJLCBHRFRBX0dBTUNJLCBHRFRBX0dBRVJJKSwKIAlJTlRDX0dST1VQKFRNVTM0NSwgVE1VMywgVE1VNCwgVE1VNSksCi0JSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELAotCQkgICBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSksCi0JSU5UQ19HUk9VUChHUElPLCBHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0N2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCkBAIC0wLDAgKzEsNDkwIEBACisvKgorICogU0g3Nzg2IFNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIFNINzc4NSBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwl9LAorCS8qCisJICogVGhlIHJlc3Qgb2YgdGhlc2UgYWxsIGhhdmUgbXVsdGlwbGV4ZWQgSVJRcworCSAqLworCXsKKwkJLm1hcGJhc2UJPSAweGZmZWIwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA0NCwgNDQsIDQ0LCA0NCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWMwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MCwgNTAsIDUwLCA1MCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWQwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MSwgNTEsIDUxLCA1MSB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWUwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZmZWYwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MywgNTMsIDUzLCA1MyB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2Jfb2hjaV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4ZmZlNzA0MDAsCisJCS5lbmQJPSAweGZmZTcwNGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gNzcsCisJCS5lbmQJPSA3NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgdXNiX29oY2lfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX29oY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9vaGNpIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZ1c2Jfb2hjaV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2Jfb2hjaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVzYl9vaGNpX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaV9kZXZpY2UsCisJJnVzYl9vaGNpX2RldmljZSwKK307CisKKworLyoKKyAqIFBsZWFzZSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91ciBwbGF0Zm9ybSBib2FyZAorICogdXNlIGV4dGVybmFsIGNsb2NrIGZvciBVU0IKKyAqICovCisjZGVmaW5lIFVTQkNUTDAJCTB4ZmZlNzA4NTgKKyNkZWZpbmUgQ0xPQ0tfTU9ERV9NQVNLIDB4ZmZmZmZmN2YKKyNkZWZpbmUgRVhUX0NMT0NLX01PREUgIDB4MDAwMDAwODAKK3ZvaWQgX19pbml0IHNoNzc4Nl91c2JfdXNlX2V4Y2xvY2sodm9pZCkKK3sKKwl1MzIgdmFsID0gX19yYXdfcmVhZGwoVVNCQ1RMMCkgJiBDTE9DS19NT0RFX01BU0s7CisJX19yYXdfd3JpdGVsKHZhbCB8IEVYVF9DTE9DS19NT0RFLCBVU0JDVEwwKTsKK30KKworI2RlZmluZSBVU0JJTklUUkVHMQkweGZmZTcwMDk0CisjZGVmaW5lIFVTQklOSVRSRUcyCTB4ZmZlNzAwOWMKKyNkZWZpbmUgVVNCSU5JVFZBTDEJMHgwMGZmMDA0MAorI2RlZmluZSBVU0JJTklUVkFMMgkweDAwMDAwMDAxCisKKyNkZWZpbmUgVVNCUENUTDEJMHhmZmU3MDgwNAorI2RlZmluZSBVU0JTVAkJMHhmZmU3MDgwOAorI2RlZmluZSBQSFlfRU5CCQkweDAwMDAwMDAxCisjZGVmaW5lIFBMTF9FTkIJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUEhZX1JTVAkJMHgwMDAwMDAwNAorI2RlZmluZSBBQ1RfUExMX1NUQVRVUwkweGMwMDAwMDAwCitzdGF0aWMgdm9pZCBfX2luaXQgc2g3Nzg2X3VzYl9zZXR1cCh2b2lkKQoreworCWludCBpID0gMTAwMDAwMDsKKworCS8qCisJICogVVNCIGluaXRpYWwgc2V0dGluZ3MKKwkgKgorCSAqIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIG5lY2Vzc2FyeQorCSAqIGZvciB1c2luZyB0aGUgVVNCIG1vZHVsZXMuCisJICoKKwkgKiBzZWUgIlVTQiBJbml0YWwgU2V0dGluZ3MiIGZvciBkZXRhaWwKKwkgKi8KKwlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDEsIFVTQklOSVRSRUcxKTsKKwlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDIsIFVTQklOSVRSRUcyKTsKKworCS8qCisJICogU2V0IHRoZSBQSFkgYW5kIFBMTCBlbmFibGUgYml0CisJICovCisJX19yYXdfd3JpdGVsKFBIWV9FTkIgfCBQTExfRU5CLCBVU0JQQ1RMMSk7CisJd2hpbGUgKGktLSAmJgorCSAgICAgICAoKF9fcmF3X3JlYWRsKFVTQlNUKSAmIEFDVF9QTExfU1RBVFVTKSAhPSBBQ1RfUExMX1NUQVRVUykpCisJCWNwdV9yZWxheCgpOworCisJaWYgKGkpIHsKKwkJLyogU2V0IHRoZSBQSFkgUlNUIGJpdCAqLworCQlfX3Jhd193cml0ZWwoUEhZX0VOQiB8IFBMTF9FTkIgfCBQSFlfUlNULCBVU0JQQ1RMMSk7CisJCXByaW50ayhLRVJOX0lORk8gInNoNzc4NiB1c2Igc2V0dXAgZG9uZVxuIik7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODZfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXNoNzc4Nl91c2Jfc2V0dXAoKTsKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3Nzg2X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3Nzg2X2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbChzaDc3ODZfZGV2aWNlc19zZXR1cCk7CisKK2VudW0geworCVVOVVNFRCA9IDAsCisKKwkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLworCisJSVJMMF9MTExMLCBJUkwwX0xMTEgsIElSTDBfTExITCwgSVJMMF9MTEhILAorCUlSTDBfTEhMTCwgSVJMMF9MSExILCBJUkwwX0xISEwsIElSTDBfTEhISCwKKwlJUkwwX0hMTEwsIElSTDBfSExMSCwgSVJMMF9ITEhMLCBJUkwwX0hMSEgsCisJSVJMMF9ISExMLCBJUkwwX0hITEgsIElSTDBfSEhITCwKKworCUlSTDRfTExMTCwgSVJMNF9MTExILCBJUkw0X0xMSEwsIElSTDRfTExISCwKKwlJUkw0X0xITEwsIElSTDRfTEhMSCwgSVJMNF9MSEhMLCBJUkw0X0xISEgsCisJSVJMNF9ITExMLCBJUkw0X0hMTEgsIElSTDRfSExITCwgSVJMNF9ITEhILAorCUlSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsCisKKwlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAorCVdEVCwKKwlUTVUwXzAsIFRNVTBfMSwgVE1VMF8yLCBUTVUwXzMsCisJVE1VMV8wLCBUTVUxXzEsIFRNVTFfMiwKKwlETUFDMF8wLCBETUFDMF8xLCBETUFDMF8yLCBETUFDMF8zLCBETUFDMF80LCBETUFDMF81LCBETUFDMF82LAorCUhVREkxLCBIVURJMCwKKwlETUFDMV8wLCBETUFDMV8xLCBETUFDMV8yLCBETUFDMV8zLAorCUhQQl8wLCBIUEJfMSwgSFBCXzIsCisJU0NJRjBfMCwgU0NJRjBfMSwgU0NJRjBfMiwgU0NJRjBfMywKKwlTQ0lGMSwKKwlUTVUyLCBUTVUzLAorCVNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAorCUV0aF8wLCBFdGhfMSwKKwlQQ0llQzBfMCwgUENJZUMwXzEsIFBDSWVDMF8yLAorCVBDSWVDMV8wLCBQQ0llQzFfMSwgUENJZUMxXzIsCisJVVNCLAorCUkyQzAsIEkyQzEsCisJRFUsCisJU1NJMCwgU1NJMSwgU1NJMiwgU1NJMywKKwlQQ0llQzJfMCwgUENJZUMyXzEsIFBDSWVDMl8yLAorCUhBQzAsIEhBQzEsCisJRkxDVEwsCisJSFNQSSwKKwlHUElPMCwgR1BJTzEsCisJVGhlcm1hbCwKKwlJTlRDMCwgSU5UQzEsIElOVEMyLCBJTlRDMywgSU5UQzQsIElOVEM1LCBJTlRDNiwgSU5UQzcsCisKKwkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoV0RULCAweDNlMCksCisJSU5UQ19WRUNUKFRNVTBfMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMF8xLCAweDQyMCksCisJSU5UQ19WRUNUKFRNVTBfMiwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMF8zLCAweDQ2MCksCisJSU5UQ19WRUNUKFRNVTFfMCwgMHg0ODApLCBJTlRDX1ZFQ1QoVE1VMV8xLCAweDRhMCksCisJSU5UQ19WRUNUKFRNVTFfMiwgMHg0YzApLAorCUlOVENfVkVDVChETUFDMF8wLCAweDUwMCksIElOVENfVkVDVChETUFDMF8xLCAweDUyMCksCisJSU5UQ19WRUNUKERNQUMwXzIsIDB4NTQwKSwgSU5UQ19WRUNUKERNQUMwXzMsIDB4NTYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfNCwgMHg1ODApLCBJTlRDX1ZFQ1QoRE1BQzBfNSwgMHg1YTApLAorCUlOVENfVkVDVChETUFDMF82LCAweDVjMCksCisJSU5UQ19WRUNUKEhVREkxLCAweDVlMCksIElOVENfVkVDVChIVURJMCwgMHg2MDApLAorCUlOVENfVkVDVChETUFDMV8wLCAweDYyMCksIElOVENfVkVDVChETUFDMV8xLCAweDY0MCksCisJSU5UQ19WRUNUKERNQUMxXzIsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMxXzMsIDB4NjgwKSwKKwlJTlRDX1ZFQ1QoSFBCXzAsIDB4NmEwKSwgSU5UQ19WRUNUKEhQQl8xLCAweDZjMCksCisJSU5UQ19WRUNUKEhQQl8yLCAweDZlMCksCisJSU5UQ19WRUNUKFNDSUYwXzAsIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwXzEsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjBfMiwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfMywgMHg3NjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3ODApLAorCUlOVENfVkVDVChUTVUyLCAweDdhMCksIElOVENfVkVDVChUTVUzLCAweDdjMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDg0MCksIElOVENfVkVDVChTQ0lGMywgMHg4NjApLAorCUlOVENfVkVDVChTQ0lGNCwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjUsIDB4OGEwKSwKKwlJTlRDX1ZFQ1QoRXRoXzAsIDB4OGMwKSwgSU5UQ19WRUNUKEV0aF8xLCAweDhlMCksCisJSU5UQ19WRUNUKFBDSWVDMF8wLCAweGFlMCksIElOVENfVkVDVChQQ0llQzBfMSwgMHhiMDApLAorCUlOVENfVkVDVChQQ0llQzBfMiwgMHhiMjApLAorCUlOVENfVkVDVChQQ0llQzFfMCwgMHhiNDApLCBJTlRDX1ZFQ1QoUENJZUMxXzEsIDB4YjYwKSwKKwlJTlRDX1ZFQ1QoUENJZUMxXzIsIDB4YjgwKSwKKwlJTlRDX1ZFQ1QoVVNCLCAweGJhMCksCisJSU5UQ19WRUNUKEkyQzAsIDB4Y2MwKSwgSU5UQ19WRUNUKEkyQzEsIDB4Y2UwKSwKKwlJTlRDX1ZFQ1QoRFUsIDB4ZDAwKSwKKwlJTlRDX1ZFQ1QoU1NJMCwgMHhkMjApLCBJTlRDX1ZFQ1QoU1NJMSwgMHhkNDApLAorCUlOVENfVkVDVChTU0kyLCAweGQ2MCksIElOVENfVkVDVChTU0kzLCAweGQ4MCksCisJSU5UQ19WRUNUKFBDSWVDMl8wLCAweGRhMCksIElOVENfVkVDVChQQ0llQzJfMSwgMHhkYzApLAorCUlOVENfVkVDVChQQ0llQzJfMiwgMHhkZTApLAorCUlOVENfVkVDVChIQUMwLCAweGUwMCksIElOVENfVkVDVChIQUMxLCAweGUyMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGU0MCksCisJSU5UQ19WRUNUKEhTUEksIDB4ZTgwKSwKKwlJTlRDX1ZFQ1QoR1BJTzAsIDB4ZWEwKSwgSU5UQ19WRUNUKEdQSU8xLCAweGVjMCksCisJSU5UQ19WRUNUKFRoZXJtYWwsIDB4ZWUwKSwKK307CisKKy8qIEZJWE1FOiBNYWluIENQVSBzdXBwb3J0IG9ubHkgbm93ICovCisjaWYgMSAvKiBNYWluIENQVSAqLworI2RlZmluZSBDbklOVE1TSzAJMHhmZTQxMDAzMAorI2RlZmluZSBDbklOVE1TSzEJMHhmZTQxMDA0MAorI2RlZmluZSBDbklOVE1TS0NMUjAJMHhmZTQxMDA1MAorI2RlZmluZSBDbklOVE1TS0NMUjEJMHhmZTQxMDA2MAorI2RlZmluZSBDbklOVDJNU0tSMAkweGZlNDEwYTIwCisjZGVmaW5lIENuSU5UMk1TS1IxCTB4ZmU0MTBhMjQKKyNkZWZpbmUgQ25JTlQyTVNLUjIJMHhmZTQxMGEyOAorI2RlZmluZSBDbklOVDJNU0tSMwkweGZlNDEwYTJjCisjZGVmaW5lIENuSU5UMk1TS0NSMAkweGZlNDEwYTMwCisjZGVmaW5lIENuSU5UMk1TS0NSMQkweGZlNDEwYTM0CisjZGVmaW5lIENuSU5UMk1TS0NSMgkweGZlNDEwYTM4CisjZGVmaW5lIENuSU5UMk1TS0NSMwkweGZlNDEwYTNjCisjZWxzZSAvKiBTdWIgQ1BVICovCisjZGVmaW5lIENuSU5UTVNLMAkweGZlNDEwMDM0CisjZGVmaW5lIENuSU5UTVNLMQkweGZlNDEwMDQ0CisjZGVmaW5lIENuSU5UTVNLQ0xSMAkweGZlNDEwMDU0CisjZGVmaW5lIENuSU5UTVNLQ0xSMQkweGZlNDEwMDY0CisjZGVmaW5lIENuSU5UMk1TS1IwCTB4ZmU0MTBiMjAKKyNkZWZpbmUgQ25JTlQyTVNLUjEJMHhmZTQxMGIyNAorI2RlZmluZSBDbklOVDJNU0tSMgkweGZlNDEwYjI4CisjZGVmaW5lIENuSU5UMk1TS1IzCTB4ZmU0MTBiMmMKKyNkZWZpbmUgQ25JTlQyTVNLQ1IwCTB4ZmU0MTBiMzAKKyNkZWZpbmUgQ25JTlQyTVNLQ1IxCTB4ZmU0MTBiMzQKKyNkZWZpbmUgQ25JTlQyTVNLQ1IyCTB4ZmU0MTBiMzgKKyNkZWZpbmUgQ25JTlQyTVNLQ1IzCTB4ZmU0MTBiM2MKKyNlbmRpZgorCisjZGVmaW5lIElOVE1TSzIJCTB4ZmU0MTAwNjgKKyNkZWZpbmUgSU5UTVNLQ0xSMgkweGZlNDEwMDZjCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyBDbklOVE1TSzAsIENuSU5UTVNLQ0xSMCwgMzIsCisJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorCXsgSU5UTVNLMiwgSU5UTVNLQ0xSMiwgMzIsCisJICB7IElSTDBfTExMTCwgSVJMMF9MTExILCBJUkwwX0xMSEwsIElSTDBfTExISCwKKwkgICAgSVJMMF9MSExMLCBJUkwwX0xITEgsIElSTDBfTEhITCwgSVJMMF9MSEhILAorCSAgICBJUkwwX0hMTEwsIElSTDBfSExMSCwgSVJMMF9ITEhMLCBJUkwwX0hMSEgsCisJICAgIElSTDBfSEhMTCwgSVJMMF9ISExILCBJUkwwX0hISEwsIDAsCisJICAgIElSTDRfTExMTCwgSVJMNF9MTExILCBJUkw0X0xMSEwsIElSTDRfTExISCwKKwkgICAgSVJMNF9MSExMLCBJUkw0X0xITEgsIElSTDRfTEhITCwgSVJMNF9MSEhILAorCSAgICBJUkw0X0hMTEwsIElSTDRfSExMSCwgSVJMNF9ITEhMLCBJUkw0X0hMSEgsCisJICAgIElSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsIDAsIH0gfSwKKwl7IENuSU5UMk1TS1IwLCBDbklOVDJNU0tDUjAgLCAzMiwKKwkgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgV0RUIH0gfSwKKwl7IENuSU5UMk1TS1IxLCBDbklOVDJNU0tDUjEsIDMyLAorCSAgeyBUTVUwXzAsIFRNVTBfMSwgVE1VMF8yLCBUTVUwXzMsIFRNVTFfMCwgVE1VMV8xLCBUTVUxXzIsIDAsCisJICAgIERNQUMwXzAsIERNQUMwXzEsIERNQUMwXzIsIERNQUMwXzMsIERNQUMwXzQsIERNQUMwXzUsIERNQUMwXzYsCisJICAgIEhVREkxLCBIVURJMCwKKwkgICAgRE1BQzFfMCwgRE1BQzFfMSwgRE1BQzFfMiwgRE1BQzFfMywKKwkgICAgSFBCXzAsIEhQQl8xLCBIUEJfMiwKKwkgICAgU0NJRjBfMCwgU0NJRjBfMSwgU0NJRjBfMiwgU0NJRjBfMywKKwkgICAgU0NJRjEsCisJICAgIFRNVTIsIFRNVTMsIDAsIH0gfSwKKwl7IENuSU5UMk1TS1IyLCBDbklOVDJNU0tDUjIsIDMyLAorCSAgeyAwLCAwLCBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSwKKwkgICAgRXRoXzAsIEV0aF8xLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICBQQ0llQzBfMCwgUENJZUMwXzEsIFBDSWVDMF8yLAorCSAgICBQQ0llQzFfMCwgUENJZUMxXzEsIFBDSWVDMV8yLAorCSAgICBVU0IsIDAsIDAgfSB9LAorCXsgQ25JTlQyTVNLUjMsIENuSU5UMk1TS0NSMywgMzIsCisJICB7IDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIEkyQzAsIEkyQzEsCisJICAgIERVLCBTU0kwLCBTU0kxLCBTU0kyLCBTU0kzLAorCSAgICBQQ0llQzJfMCwgUENJZUMyXzEsIFBDSWVDMl8yLAorCSAgICBIQUMwLCBIQUMxLAorCSAgICBGTENUTCwgMCwKKwkgICAgSFNQSSwgR1BJTzAsIEdQSU8xLCBUaGVybWFsLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGZlNDEwMDEwLCAwLCAzMiwgNCwgLyogSU5UUFJJICovICAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLAorCQkJCQkJIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorCXsgMHhmZTQxMDgwMCwgMCwgMzIsIDgsIC8qIElOVDJQUkkwICovIHsgMCwgMCwgMCwgV0RUIH0gfSwKKwl7IDB4ZmU0MTA4MDQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMSAqLyB7IFRNVTBfMCwgVE1VMF8xLAorCQkJCQkJIFRNVTBfMiwgVE1VMF8zIH0gfSwKKwl7IDB4ZmU0MTA4MDgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMiAqLyB7IFRNVTFfMCwgVE1VMV8xLAorCQkJCQkJIFRNVTFfMiwgMCB9IH0sCisJeyAweGZlNDEwODBjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTMgKi8geyBETUFDMF8wLCBETUFDMF8xLAorCQkJCQkJIERNQUMwXzIsIERNQUMwXzMgfSB9LAorCXsgMHhmZTQxMDgxMCwgMCwgMzIsIDgsIC8qIElOVDJQUkk0ICovIHsgRE1BQzBfNCwgRE1BQzBfNSwKKwkJCQkJCSBETUFDMF82LCBIVURJMSB9IH0sCisJeyAweGZlNDEwODE0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTUgKi8geyBIVURJMCwgRE1BQzFfMCwKKwkJCQkJCSBETUFDMV8xLCBETUFDMV8yIH0gfSwKKwl7IDB4ZmU0MTA4MTgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNiAqLyB7IERNQUMxXzMsIEhQQl8wLAorCQkJCQkJIEhQQl8xLCBIUEJfMiB9IH0sCisJeyAweGZlNDEwODFjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTcgKi8geyBTQ0lGMF8wLCBTQ0lGMF8xLAorCQkJCQkJIFNDSUYwXzIsIFNDSUYwXzMgfSB9LAorCXsgMHhmZTQxMDgyMCwgMCwgMzIsIDgsIC8qIElOVDJQUkk4ICovIHsgU0NJRjEsIFRNVTIsIFRNVTMsIDAgfSB9LAorCXsgMHhmZTQxMDgyNCwgMCwgMzIsIDgsIC8qIElOVDJQUkk5ICovIHsgMCwgMCwgU0NJRjIsIFNDSUYzIH0gfSwKKwl7IDB4ZmU0MTA4MjgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTAgKi8geyBTQ0lGNCwgU0NJRjUsCisJCQkJCQkgIEV0aF8wLCBFdGhfMSB9IH0sCisJeyAweGZlNDEwODJjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTExICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODMwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTEyICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODM0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTEzICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODM4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTE0ICovIHsgMCwgMCwgMCwgUENJZUMwXzAgfSB9LAorCXsgMHhmZTQxMDgzYywgMCwgMzIsIDgsIC8qIElOVDJQUkkxNSAqLyB7IFBDSWVDMF8xLCBQQ0llQzBfMiwKKwkJCQkJCSAgUENJZUMxXzAsIFBDSWVDMV8xIH0gfSwKKwl7IDB4ZmU0MTA4NDAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTYgKi8geyBQQ0llQzFfMiwgVVNCLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NDQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTcgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NDgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTggKi8geyAwLCAwLCBJMkMwLCBJMkMxIH0gfSwKKwl7IDB4ZmU0MTA4NGMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTkgKi8geyBEVSwgU1NJMCwgU1NJMSwgU1NJMiB9IH0sCisJeyAweGZlNDEwODUwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTIwICovIHsgU1NJMywgUENJZUMyXzAsCisJCQkJCQkgIFBDSWVDMl8xLCBQQ0llQzJfMiB9IH0sCisJeyAweGZlNDEwODU0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTIxICovIHsgSEFDMCwgSEFDMSwgRkxDVEwsIDAgfSB9LAorCXsgMHhmZTQxMDg1OCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyMiAqLyB7IEhTUEksIEdQSU8wLAorCQkJCQkJICBHUElPMSwgVGhlcm1hbCB9IH0sCisJeyAweGZlNDEwODVjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTIzICovIHsgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZlNDEwODYwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTI0ICovIHsgMCwgMCwgMCwgMCB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3Nzg2IiwgdmVjdG9ycywgTlVMTCwKKwkJCSBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIE5VTEwpOworCisvKiBTdXBwb3J0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucyBpbiBJUlEgbW9kZSAqLworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lycTAxMjNbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUlEwLCAweDIwMCksIElOVENfVkVDVChJUlExLCAweDI0MCksCisJSU5UQ19WRUNUKElSUTIsIDB4MjgwKSwgSU5UQ19WRUNUKElSUTMsIDB4MmMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJxNDU2N1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSUTQsIDB4MzAwKSwgSU5UQ19WRUNUKElSUTUsIDB4MzQwKSwKKwlJTlRDX1ZFQ1QoSVJRNiwgMHgzODApLCBJTlRDX1ZFQ1QoSVJRNywgMHgzYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3NlbnNlX3JlZyBzZW5zZV9yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZTQxMDAxYywgMzIsIDIsIC8qIElDUjEgKi8gICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsCisJCQkJCSAgICBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBhY2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZmU0MTAwMjQsIDAsIDMyLCAvKiBJTlRSRVEgKi8KKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzY19pcnEwMTIzLCAic2g3Nzg2LWlycTAxMjMiLAorCQkJICAgICB2ZWN0b3JzX2lycTAxMjMsIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjX2Rlc2NfaXJxNDU2NywgInNoNzc4Ni1pcnE0NTY3IiwKKwkJCSAgICAgdmVjdG9yc19pcnE0NTY3LCBOVUxMLCBtYXNrX3JlZ2lzdGVycywKKwkJCSAgICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyk7CisKKy8qIEV4dGVybmFsIGludGVycnVwdCBwaW5zIGluIElSTCBtb2RlICovCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJsMDEyM1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSTDBfTExMTCwgMHgyMDApLCBJTlRDX1ZFQ1QoSVJMMF9MTExILCAweDIyMCksCisJSU5UQ19WRUNUKElSTDBfTExITCwgMHgyNDApLCBJTlRDX1ZFQ1QoSVJMMF9MTEhILCAweDI2MCksCisJSU5UQ19WRUNUKElSTDBfTEhMTCwgMHgyODApLCBJTlRDX1ZFQ1QoSVJMMF9MSExILCAweDJhMCksCisJSU5UQ19WRUNUKElSTDBfTEhITCwgMHgyYzApLCBJTlRDX1ZFQ1QoSVJMMF9MSEhILCAweDJlMCksCisJSU5UQ19WRUNUKElSTDBfSExMTCwgMHgzMDApLCBJTlRDX1ZFQ1QoSVJMMF9ITExILCAweDMyMCksCisJSU5UQ19WRUNUKElSTDBfSExITCwgMHgzNDApLCBJTlRDX1ZFQ1QoSVJMMF9ITEhILCAweDM2MCksCisJSU5UQ19WRUNUKElSTDBfSEhMTCwgMHgzODApLCBJTlRDX1ZFQ1QoSVJMMF9ISExILCAweDNhMCksCisJSU5UQ19WRUNUKElSTDBfSEhITCwgMHgzYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcmw0NTY3W10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJMNF9MTExMLCAweDkwMCksIElOVENfVkVDVChJUkw0X0xMTEgsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MTEhMLCAweDk0MCksIElOVENfVkVDVChJUkw0X0xMSEgsIDB4OTYwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MSExMLCAweDk4MCksIElOVENfVkVDVChJUkw0X0xITEgsIDB4OWEwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9MSEhMLCAweDljMCksIElOVENfVkVDVChJUkw0X0xISEgsIDB4OWUwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ITExMLCAweGEwMCksIElOVENfVkVDVChJUkw0X0hMTEgsIDB4YTIwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ITEhMLCAweGE0MCksIElOVENfVkVDVChJUkw0X0hMSEgsIDB4YTYwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ISExMLCAweGE4MCksIElOVENfVkVDVChJUkw0X0hITEgsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoSVJMNF9ISEhMLCAweGFjMCksCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2lybDAxMjMsICJzaDc3ODYtaXJsMDEyMyIsIHZlY3RvcnNfaXJsMDEyMywKKwkJCSBOVUxMLCBtYXNrX3JlZ2lzdGVycywgTlVMTCwgTlVMTCk7CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfaXJsNDU2NywgInNoNzc4Ni1pcmw0NTY3IiwgdmVjdG9yc19pcmw0NTY3LAorCQkJIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLCBOVUxMLCBOVUxMKTsKKworI2RlZmluZSBJTlRDX0lDUjAJMHhmZTQxMDAwMAorI2RlZmluZSBJTlRDX0lOVE1TSzAJQ25JTlRNU0swCisjZGVmaW5lIElOVENfSU5UTVNLMQlDbklOVE1TSzEKKyNkZWZpbmUgSU5UQ19JTlRNU0syCUlOVE1TSzIKKyNkZWZpbmUgSU5UQ19JTlRNU0tDTFIxCUNuSU5UTVNLQ0xSMQorI2RlZmluZSBJTlRDX0lOVE1TS0NMUjIJSU5UTVNLQ0xSMgorCit2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQoreworCS8qIGRpc2FibGUgSVJRMy0wICsgSVJRNy00ICovCisJY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisKKwkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLworCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCisJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KKwljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCisJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOworfQorCit2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQoreworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgSVJRX01PREVfSVJRNzY1NDoKKwkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkw3LTQgKi8KKwkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgorCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLworCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CisJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KKwkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDMyMTA6CisJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KKwkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKKwkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCisJCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmw0NTY3KTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CisJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLworCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKwordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGJmYTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L1N1cGVySCBTSC1Nb2JpbGUgYmFja2VuZHMuCisjCisKKyMgUG93ZXIgTWFuYWdlbWVudCAmIFNsZWVwIG1vZGUKK29iai0kKENPTkZJR19QTSkJKz0gcG0ubyBzbGVlcC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDY3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG0uYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcG0tc2hfbW9iaWxlLmMKKyAqCisgKiBQb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgY29kZSBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBTbGVlcCBtb2RlcyBhdmFpbGFibGUgb24gU3VwZXJIIE1vYmlsZToKKyAqCisgKiBTbGVlcCBtb2RlIGlzIGp1c3QgcGxhaW4gInNsZWVwIiBpbnN0cnVjdGlvbgorICogU2xlZXAgU2VsZi1SZWZyZXNoIG1vZGUgaXMgYWJvdmUgcGx1cyBSQU0gcHV0IGluIFNlbGYtUmVmcmVzaAorICogU3RhbmRieSBTZWxmLVJlZnJlc2ggbW9kZSBpcyBhYm92ZSBwbHVzIHN0b3BwZWQgY2xvY2tzCisgKi8KKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQCQkoU1VTUF9TSF9TTEVFUCkKKyNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQX1NGCShTVVNQX1NIX1NMRUVQIHwgU1VTUF9TSF9TRikKKyNkZWZpbmUgU1VTUF9NT0RFX1NUQU5EQllfU0YJKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBub3QgdGhlcmUgeWV0OgorICoKKyAqIFItc3RhbmRieSBtb2RlIGlzIHVuc3VwcG9ydGVkLCBidXQgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlCisgKiBVLXN0YW5kYnkgbW9kZSBpcyBsb3cgcHJpb3JpdHkgc2luY2UgaXQgbmVlZHMgYm9vdGxvYWRlciBoYWNrcworICoKKyAqIEFsbCBtb2RlcyBzaG91bGQgYmUgdGllZCBpbiB3aXRoIGNwdWlkbGUuIEJ1dCBiZWZvcmUgdGhhdCBjYW4KKyAqIGhhcHBlbiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgZW5hYmxlZCBoYXJkd2FyZSBibG9ja3Mgc28gd2UKKyAqIGNhbiBhdm9pZCBlbnRlcmluZyBzbGVlcCBtb2RlcyB0aGF0IHN0b3AgY2xvY2tzIHRvIGhhcmR3YXJlCisgKiBibG9ja3MgdGhhdCBhcmUgaW4gdXNlIGV2ZW4gdGhvdWdoIHRoZSBjcHUgY29yZSBpcyBpZGxlLgorICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHNoX21vYmlsZV9zdGFuZGJ5W107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHNoX21vYmlsZV9zdGFuZGJ5X3NpemU7CisKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9jYWxsX3N0YW5kYnkodW5zaWduZWQgbG9uZyBtb2RlKQoreworCWV4dGVybiB2b2lkICp2YnJfYmFzZTsKKwl2b2lkICpvbmNoaXBfbWVtID0gKHZvaWQgKikweGU1MjAwMDAwOyAvKiBJTFJBTSAqLworCXZvaWQgKCpzdGFuZGJ5X29uY2hpcF9tZW0pKHVuc2lnbmVkIGxvbmcpID0gb25jaGlwX21lbTsKKworCS8qIE5vdGU6IFdha2UgdXAgZnJvbSBzbGVlcCBtYXkgZ2VuZXJhdGUgZXhjZXB0aW9ucyEKKwkgKiBTZXR1cCBWQlIgdG8gcG9pbnQgdG8gb24tY2hpcCByYW0gaWYgc2VsZi1yZWZyZXNoIGlzCisJICogZ29pbmcgdG8gYmUgdXNlZC4KKwkgKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKG9uY2hpcF9tZW0pIDogIm1lbW9yeSIpOworCisJLyogQ29weSB0aGUgYXNzZW1ibHkgc25pcHBldCB0byB0aGUgb3RoZXJ3aXNlIHVudW5zZWQgSUxSQU0gKi8KKwltZW1jcHkob25jaGlwX21lbSwgc2hfbW9iaWxlX3N0YW5kYnksIHNoX21vYmlsZV9zdGFuZGJ5X3NpemUpOworCXdtYigpOworCWN0cmxfYmFycmllcigpOworCisJLyogTGV0IGFzc2VtYmx5IHNuaXBwZXQgaW4gb24tY2hpcCBtZW1vcnkgaGFuZGxlIHRoZSByZXN0ICovCisJc3RhbmRieV9vbmNoaXBfbWVtKG1vZGUpOworCisJLyogUHV0IFZCUiBiYWNrIGluIFN5c3RlbSBSQU0gYWdhaW4gKi8KKwlpZiAobW9kZSAmIFNVU1BfU0hfU0YpCisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbnQgc2hfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc2V0X2JsX2JpdCgpOworCXNoX21vYmlsZV9jYWxsX3N0YW5kYnkoU1VTUF9NT0RFX1NUQU5EQllfU0YpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJY2xlYXJfYmxfYml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgc2hfcG1fb3BzID0geworCS5lbnRlciAgICAgICAgICA9IHNoX3BtX2VudGVyLAorCS52YWxpZCAgICAgICAgICA9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9wbV9pbml0KHZvaWQpCit7CisJc3VzcGVuZF9zZXRfb3BzKCZzaF9wbV9vcHMpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHNoX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg4OGVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbGVlcC1zaF9tb2JpbGUuUworICoKKyAqIFNsZWVwIG1vZGUgYW5kIFN0YW5kYnkgbW9kZXMgc3VwcG9ydCBmb3IgU3VwZXJIIE1vYmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKworLyogbWFuYWdlIHNlbGYtcmVmcmVzaCBhbmQgZW50ZXIgc3RhbmRieSBtb2RlLgorICogdGhpcyBjb2RlIHdpbGwgYmUgY29waWVkIHRvIG9uLWNoaXAgbWVtb3J5IGFuZCBleGVjdXRlZCBmcm9tIHRoZXJlLgorICovCisKKwkuYmFsaWduIAk0MDk2LDAsNDA5NgorRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnkpCisJbW92CXI0LCByMAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfc2V0X3NmCisKKwkvKiBTRFJBTTogZGlzYWJsZSBwb3dlciBkb3duIGFuZCBwdXQgaW4gc2VsZi1yZWZyZXNoIG1vZGUgKi8KKwltb3YubAkxZiwgcjQKKwltb3YubAkyZiwgcjEKKwltb3YubAlAcjQsIHIyCisJb3IJcjEsIHIyCisJbW92LmwgICAzZiwgcjMKKwlhbmQJcjMsIHIyCisJbW92LmwJcjIsIEByNAorCitza2lwX3NldF9zZjoKKwl0c3QJI1NVU1BfU0hfU0xFRVAsIHIwCisJYnQJdGVzdF9zdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAic2xlZXAgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDAwLCByMQorCit0ZXN0X3N0YW5kYnk6CisJdHN0CSNTVVNQX1NIX1NUQU5EQlksIHIwCisJYnQJdGVzdF9yc3RhbmRieQorCisJLyogc2V0IG1vZGUgdG8gInNvZnR3YXJlIHN0YW5kYnkgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDgwLCByMQorCit0ZXN0X3JzdGFuZGJ5OgorCXRzdAkjU1VTUF9TSF9SU1RBTkRCWSwgcjAKKwlidAl0ZXN0X3VzdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAici1zdGFuZGJ5IG1vZGUiICovCisJYnJhCWRvX3NsZWVwCisJIG1vdgkjMHgyMCwgcjEKKwordGVzdF91c3RhbmRieToKKwl0c3QJI1NVU1BfU0hfVVNUQU5EQlksIHIwCisJYnQJZG9uZV9zbGVlcAorCisJLyogc2V0IG1vZGUgdG8gInUtc3RhbmRieSBtb2RlIiAqLworCW1vdgkjMHgxMCwgcjEKKworCS8qIGZhbGwtdGhyb3VnaCAqLworCitkb19zbGVlcDoKKwkvKiBzZXR1cCBhbmQgZW50ZXIgc2VsZWN0ZWQgc3RhbmRieSBtb2RlICovCisJbW92LmwJNWYsIHI0CisJbW92LmwJcjEsIEByNAorCXNsZWVwCisKK2RvbmVfc2xlZXA6CisJLyogcmVzZXQgc3RhbmRieSBtb2RlIHRvIHNsZWVwIG1vZGUgKi8KKwltb3YubAk1ZiwgcjQKKwltb3YJIzB4MDAsIHIxCisJbW92LmwJcjEsIEByNAorCisJdHN0CSNTVVNQX1NIX1NGLCByMAorCWJ0CXNraXBfcmVzdG9yZV9zZgorCisJLyogU0RSQU06IHNldCBhdXRvLXJlZnJlc2ggbW9kZSAqLworCW1vdi5sCTFmLCByNAorCW1vdi5sCUByNCwgcjIKKwltb3YubCAgIDRmLCByMworCWFuZAlyMywgcjIKKwltb3YubAlyMiwgQHI0CisJbW92LmwJNmYsIHI0CisJbW92LmwJN2YsIHIxCisJbW92LmwJOGYsIHIyCisJbW92LmwJQHI0LCByMworCW1vdgkjLTEsIHI0CisJYWRkCXI0LCByMworCW9yCXIyLCByMworCW1vdi5sCXIzLCBAcjEKK3NraXBfcmVzdG9yZV9zZjoKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKKzE6CS5sb25nCTB4ZmU0MDAwMDggLyogU0RDUjAgKi8KKzI6CS5sb25nCTB4MDAwMDA0MDAKKzM6CS5sb25nCTB4ZmZmZjdmZmYKKzQ6CS5sb25nCTB4ZmZmZmZiZmYKKzU6CS5sb25nCTB4YTQxNTAwMjAgLyogU1RCQ1IgKi8KKzY6CS5sb25nICAgMHhmZTQwMDAxYyAvKiBSVENPUiAqLworNzoJLmxvbmcgICAweGZlNDAwMDE4IC8qIFJUQ05UICovCis4OgkubG9uZyAgIDB4YTU1YTAwMDAKKworLyogaW50ZXJydXB0IHZlY3RvciBAIDB4NjAwICovCisJLmJhbGlnbiAJMHg0MDAsMCwweDQwMAorCS5sb25nCTB4ZGVhZGJlZWYKKwkuYmFsaWduIAkweDIwMCwwLDB4MjAwCisJLyogc2g3NzIyIHdpbGwgZW5kIHVwIGhlcmUgaW4gc2xlZXAgbW9kZSAqLworCXJ0ZQorCSBub3AKK3NoX21vYmlsZV9zdGFuZGJ5X2VuZDoKKworRU5UUlkoc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZSkKKwkubG9uZyBzaF9tb2JpbGVfc3RhbmRieV9lbmQgLSBzaF9tb2JpbGVfc3RhbmRieQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCmluZGV4IGQzNzE2NTMuLmQyMmU1YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2dwaW8uYworKysgYi9hcmNoL3NoL2tlcm5lbC9ncGlvLmMKQEAgLTE5LDIyICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi1zdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87Ci0KLXN0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQotewotCWlmICghcmVnaXN0ZXJlZF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKLX0KLQogc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKIHsKIAlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQpAQCAtNDYsOSArMzAsNjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCByZWFkX3dyaXRlX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCi0JCQkgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAotCQkJICB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZG9fd3JpdGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3JlYWRfcmF3X3JlZyh1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgpCit7CisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCXJldHVybiBjdHJsX2luYihyZWcpOworCWNhc2UgMTY6CisJCXJldHVybiBjdHJsX2ludyhyZWcpOworCWNhc2UgMzI6CisJCXJldHVybiBjdHJsX2lubChyZWcpOworCX0KKworCUJVRygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBncGlvX3dyaXRlX3Jhd19yZWcodW5zaWduZWQgbG9uZyByZWcsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQljdHJsX291dGIoZGF0YSwgcmVnKTsKKwkJcmV0dXJuOworCWNhc2UgMTY6CisJCWN0cmxfb3V0dyhkYXRhLCByZWcpOworCQlyZXR1cm47CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCXJldHVybjsKKwl9CisKKwlCVUcoKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb193cml0ZV9iaXQoc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGluX3BvcywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBvczsKKworCXBvcyA9IGRyLT5yZWdfd2lkdGggLSAoaW5fcG9zICsgMSk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX2JpdCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkXG4iLAorCQlkci0+cmVnLCAhIXZhbHVlLCBwb3MsIGRyLT5yZWdfd2lkdGgpOworI2VuZGlmCisKKwlpZiAodmFsdWUpCisJCXNldF9iaXQocG9zLCAmZHItPnJlZ19zaGFkb3cpOworCWVsc2UKKwkJY2xlYXJfYml0KHBvcywgJmRyLT5yZWdfc2hhZG93KTsKKworCWdwaW9fd3JpdGVfcmF3X3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLCBkci0+cmVnX3NoYWRvdyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19yZWFkX3JlZyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyByZWdfd2lkdGgsCisJCQkgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhLCBtYXNrLCBwb3M7CiAKQEAgLTU3LDUyICs5Niw1MyBAQAogCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CiAKICNpZmRlZiBERUJVRwotCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJcHJfaW5mbygicmVhZF9yZWc6IGFkZHIgPSAlbHgsIHBvcyA9ICVsZCwgIgogCQkicl93aWR0aCA9ICVsZCwgZl93aWR0aCA9ICVsZFxuIiwKLQkJZG9fd3JpdGUgPyAid3JpdGUiIDogInJlYWQiLCByZWcsIHZhbHVlLCBwb3MsCi0JCXJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworCQlyZWcsIHBvcywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CiAjZW5kaWYKIAotCXN3aXRjaCAocmVnX3dpZHRoKSB7Ci0JY2FzZSA4OgotCQlkYXRhID0gY3RybF9pbmIocmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJZGF0YSA9IGN0cmxfaW53KHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWRhdGEgPSBjdHJsX2lubChyZWcpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoIWRvX3dyaXRlKQotCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7Ci0KLQlkYXRhICY9IH4obWFzayA8PCBwb3MpOwotCWRhdGEgfD0gdmFsdWUgPDwgcG9zOwotCi0Jc3dpdGNoIChyZWdfd2lkdGgpIHsKLQljYXNlIDg6Ci0JCWN0cmxfb3V0YihkYXRhLCByZWcpOwotCQlicmVhazsKLQljYXNlIDE2OgotCQljdHJsX291dHcoZGF0YSwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJY3RybF9vdXRsKGRhdGEsIHJlZyk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKKwlkYXRhID0gZ3Bpb19yZWFkX3Jhd19yZWcocmVnLCByZWdfd2lkdGgpOworCXJldHVybiAoZGF0YSA+PiBwb3MpICYgbWFzazsKIH0KIAotc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKLQkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3N0YXRpYyB2b2lkIGdwaW9fd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmllbGRfd2lkdGgsIHVuc2lnbmVkIGxvbmcgaW5fcG9zLAorCQkJICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHBvczsKKworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIndyaXRlX3JlZyBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlyZWcsIHZhbHVlLCBwb3MsIHJlZ193aWR0aCwgZmllbGRfd2lkdGgpOworI2VuZGlmCisKKwltYXNrID0gfihtYXNrIDw8IHBvcyk7CisJdmFsdWUgPSB2YWx1ZSA8PCBwb3M7CisKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2UgODoKKwkJY3RybF9vdXRiKChjdHJsX2luYihyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJY3RybF9vdXR3KChjdHJsX2ludyhyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKChjdHJsX2lubChyZWcpICYgbWFzaykgfCB2YWx1ZSwgcmVnKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNldHVwX2RhdGFfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9ncGlvICpncGlvcCA9ICZncGlvYy0+Z3Bpb3NbZ3Bpb107CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZGF0YV9yZWc7CiAJaW50IGssIG47CiAKLQlpZiAoIWVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5kYXRhKSkKKwlpZiAoIWVudW1faW5fcmFuZ2UoZ3Bpb3AtPmVudW1faWQsICZncGlvYy0+ZGF0YSkpCiAJCXJldHVybiAtMTsKIAogCWsgPSAwOwpAQCAtMTEzLDE5ICsxNTMsNTggQEAKIAkJCWJyZWFrOwogCiAJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKLQkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgewotCQkJCSpkcnAgPSBkYXRhX3JlZzsKLQkJCQkqYml0cCA9IG47CisJCQlpZiAoZGF0YV9yZWctPmVudW1faWRzW25dID09IGdwaW9wLT5lbnVtX2lkKSB7CisJCQkJZ3Bpb3AtPmZsYWdzICY9IH5QSU5NVVhfRkxBR19EUkVHOworCQkJCWdwaW9wLT5mbGFncyB8PSAoayA8PCBQSU5NVVhfRkxBR19EUkVHX1NISUZUKTsKKwkJCQlncGlvcC0+ZmxhZ3MgJj0gflBJTk1VWF9GTEFHX0RCSVQ7CisJCQkJZ3Bpb3AtPmZsYWdzIHw9IChuIDw8IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQpOwogCQkJCXJldHVybiAwOwotCiAJCQl9CiAJCX0KIAkJaysrOwogCX0KIAorCUJVRygpOworCiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9kYXRhX3JlZ3Moc3RydWN0IHBpbm11eF9pbmZvICpncGlvYykKK3sKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkcnA7CisJaW50IGs7CisKKwlmb3IgKGsgPSBncGlvYy0+Zmlyc3RfZ3BpbzsgayA8PSBncGlvYy0+bGFzdF9ncGlvOyBrKyspCisJCXNldHVwX2RhdGFfcmVnKGdwaW9jLCBrKTsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWRycCA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZHJwLT5yZWdfd2lkdGgpCisJCQlicmVhazsKKworCQlkcnAtPnJlZ19zaGFkb3cgPSBncGlvX3JlYWRfcmF3X3JlZyhkcnAtPnJlZywgZHJwLT5yZWdfd2lkdGgpOworCQlrKys7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9kYXRhX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqKmRycCwgaW50ICpiaXRwKQoreworCXN0cnVjdCBwaW5tdXhfZ3BpbyAqZ3Bpb3AgPSAmZ3Bpb2MtPmdwaW9zW2dwaW9dOworCWludCBrLCBuOworCisJaWYgKCFlbnVtX2luX3JhbmdlKGdwaW9wLT5lbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gKGdwaW9wLT5mbGFncyAmIFBJTk1VWF9GTEFHX0RSRUcpID4+IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQ7CisJbiA9IChncGlvcC0+ZmxhZ3MgJiBQSU5NVVhfRkxBR19EQklUKSA+PiBQSU5NVVhfRkxBR19EQklUX1NISUZUOworCSpkcnAgPSBncGlvYy0+ZGF0YV9yZWdzICsgazsKKwkqYml0cCA9IG47CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgcGlubXV4X2VudW1fdCBlbnVtX2lkLAogCQkJICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKipjcnAsIGludCAqaW5kZXhwLAogCQkJICB1bnNpZ25lZCBsb25nICoqY250cCkKQEAgLTE4Nyw5ICsyNjYsOSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCi0JCQkgICAgc3RydWN0IHBpbm11eF9jZmdfcmVnICpjcnAsCi0JCQkgICAgaW50IGluZGV4KQorc3RhdGljIHZvaWQgd3JpdGVfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICAgaW50IGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgbmNvbWIsIHBvcywgdmFsdWU7CiAKQEAgLTE5Nyw4ICsyNzYsNyBAQAogCXBvcyA9IGluZGV4IC8gbmNvbWI7CiAJdmFsdWUgPSBpbmRleCAlIG5jb21iOwogCi0JcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKLQkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworCWdwaW9fd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwgY3JwLT5maWVsZF93aWR0aCwgcG9zLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLApAQCAtMjExLDggKzI4OSw4IEBACiAJcG9zID0gaW5kZXggLyBuY29tYjsKIAl2YWx1ZSA9IGluZGV4ICUgbmNvbWI7CiAKLQlpZiAocmVhZF93cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLAotCQkJICAgY3JwLT5maWVsZF93aWR0aCwgcG9zLCAwLCAwKSA9PSB2YWx1ZSkKKwlpZiAoZ3Bpb19yZWFkX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsCisJCQkgIGNycC0+ZmllbGRfd2lkdGgsIHBvcykgPT0gdmFsdWUpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC0xOwpAQCAtMjIwLDggKzI5OCw4IEBACiAKIGVudW0geyBHUElPX0NGR19EUllSVU4sIEdQSU9fQ0ZHX1JFUSwgR1BJT19DRkdfRlJFRSB9OwogCi1pbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCi0JCSAgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKK3N0YXRpYyBpbnQgcGlubXV4X2NvbmZpZ19ncGlvKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCisJCQkgICAgICBpbnQgcGlubXV4X3R5cGUsIGludCBjZmdfbW9kZSkKIHsKIAlzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNyID0gTlVMTDsKIAlwaW5tdXhfZW51bV90IGVudW1faWQ7CkBAIC0yODcsOCArMzY1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgR1BJT19DRkdfUkVROgotCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKLQkJCQlnb3RvIG91dF9lcnI7CisJCQl3cml0ZV9jb25maWdfcmVnKGdwaW9jLCBjciwgaW5kZXgpOwogCQkJKmNudHAgPSAqY250cCArIDE7CiAJCQlicmVhazsKIApAQCAtMzA1LDkgKzM4MiwxNCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CiAKLWludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKQorc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyAqY2hpcF90b19waW5tdXgoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBpbm11eF9pbmZvLCBjaGlwKTsKK30KKworc3RhdGljIGludCBzaF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCByZXQsIHBpbm11eF90eXBlOwpAQCAtMzE5LDI5ICs0MDEsMzAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCWlmICgoZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKKwlpZiAoKGdwaW9jLT5ncGlvc1tvZmZzZXRdLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRSkgIT0gUElOTVVYX1RZUEVfTk9ORSkKIAkJZ290byBlcnJfdW5sb2NrOwogCiAJLyogc2V0dXAgcGluIGZ1bmN0aW9uIGhlcmUgaWYgbm8gZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggcGluICovCiAKLQlpZiAoZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHVtbXksICZpKSAhPSAwKQorCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIG9mZnNldCwgJmR1bW15LCAmaSkgIT0gMCkKIAkJcGlubXV4X3R5cGUgPSBQSU5NVVhfVFlQRV9GVU5DVElPTjsKIAllbHNlCiAJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfR1BJTzsKIAogCWlmIChwaW5tdXhfdHlwZSA9PSBQSU5NVVhfVFlQRV9GVU5DVElPTikgewotCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsCiAJCQkJICAgICAgIHBpbm11eF90eXBlLAogCQkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCiAJCQlnb3RvIGVycl91bmxvY2s7CiAKLQkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LAogCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKIAkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQkJQlVHKCk7CiAJfQogCi0JZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gcGlubXV4X3R5cGU7CiAKIAlyZXQgPSAwOwogIGVycl91bmxvY2s6CkBAIC0zNDksMTEgKzQzMiwxMCBAQAogIGVycl9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19ncGlvX3JlcXVlc3QpOwogCi12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQorc3RhdGljIHZvaWQgc2hfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBjaGlwX3RvX3Bpbm11eChjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwaW5tdXhfdHlwZTsKIApAQCAtMzYyLDIwICs0NDQsMjMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKLQlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKLQlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOworCXBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgb2Zmc2V0LCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgfD0gUElOTVVYX1RZUEVfTk9ORTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX2ZyZWUpOwogCiBzdGF0aWMgaW50IHBpbm11eF9kaXJlY3Rpb24oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKIAkJCSAgICB1bnNpZ25lZCBncGlvLCBpbnQgbmV3X3Bpbm11eF90eXBlKQogewotCWludCByZXQsIHBpbm11eF90eXBlOworCWludCBwaW5tdXhfdHlwZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCXJldCA9IC1FSU5WQUw7CisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCiAJcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOwogCiAJc3dpdGNoIChwaW5tdXhfdHlwZSkgewpAQCAtNDAxLDEwMiArNDg2LDk5IEBACiAJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQogCQlCVUcoKTsKIAotCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyA9IG5ld19waW5tdXhfdHlwZTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJj0gflBJTk1VWF9GTEFHX1RZUEU7CisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzIHw9IG5ld19waW5tdXhfdHlwZTsKIAogCXJldCA9IDA7CiAgZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIWdwaW9jKQotCQlnb3RvIGVycl9vdXQ7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9JTlBVVCk7CisJcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgb2Zmc2V0LCBQSU5NVVhfVFlQRV9JTlBVVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0gZXJyX291dDoKKwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKIAotc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAotCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKLQkJCQlpbnQgZG9fd3JpdGUpCitzdGF0aWMgdm9pZCBzaF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgICB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOwogCWludCBiaXQgPSAwOwogCi0JaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCWlmICghZ3Bpb2MgfHwgZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApCiAJCUJVRygpOwogCWVsc2UKLQkJdmFsdWUgPSByZWFkX3dyaXRlX3JlZyhkci0+cmVnLCBkci0+cmVnX3dpZHRoLAotCQkJCSAgICAgICAxLCBiaXQsICEhdmFsdWUsIGRvX3dyaXRlKTsKLQotCXJldHVybiB2YWx1ZTsKKwkJZ3Bpb193cml0ZV9iaXQoZHIsIGJpdCwgdmFsdWUpOwogfQogCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2hfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJaW50IHJldDsKIAotCWlmICghZ3Bpb2MpCi0JCWdvdG8gZXJyX291dDsKLQorCXNoX2dwaW9fc2V0X3ZhbHVlKGdwaW9jLCBvZmZzZXQsIHZhbHVlKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKLQlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9PVVRQVVQpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIG9mZnNldCwgUElOTVVYX1RZUEVfT1VUUFVUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLSBlcnJfb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKIAotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8pCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB2YWx1ZSA9IDA7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOwogCi0JaWYgKCFncGlvYykKKwlpZiAoIWdwaW9jIHx8IGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKSB7CiAJCUJVRygpOwotCWVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JCXZhbHVlID0gX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIDAsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHZhbHVlOworCXJldHVybiBncGlvX3JlYWRfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsIDEsIGJpdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZ2V0X3ZhbHVlKTsKIAotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHNoX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWdwaW9jKQotCQlCVUcoKTsKLQllbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQlfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgdmFsdWUsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQl9CisJcmV0dXJuIHNoX2dwaW9fZ2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQpOwogfQotRVhQT1JUX1NZTUJPTChncGlvX3NldF92YWx1ZSk7CisKK3N0YXRpYyB2b2lkIHNoX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXNoX2dwaW9fc2V0X3ZhbHVlKGNoaXBfdG9fcGlubXV4KGNoaXApLCBvZmZzZXQsIHZhbHVlKTsKK30KIAogaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCkKIHsKLQlyZWdpc3RlcmVkX2dwaW8gPSBwaXA7Ci0JcHJfaW5mbygicGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAorCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSAmcGlwLT5jaGlwOworCisJcHJfaW5mbygic2ggcGlubXV4OiAlcyBoYW5kbGluZyBncGlvICVkIC0+ICVkXG4iLAogCQlwaXAtPm5hbWUsIHBpcC0+Zmlyc3RfZ3BpbywgcGlwLT5sYXN0X2dwaW8pOwogCi0JcmV0dXJuIDA7CisJc2V0dXBfZGF0YV9yZWdzKHBpcCk7CisKKwljaGlwLT5yZXF1ZXN0ID0gc2hfZ3Bpb19yZXF1ZXN0OworCWNoaXAtPmZyZWUgPSBzaF9ncGlvX2ZyZWU7CisJY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID0gc2hfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJY2hpcC0+Z2V0ID0gc2hfZ3Bpb19nZXQ7CisJY2hpcC0+ZGlyZWN0aW9uX291dHB1dCA9IHNoX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwljaGlwLT5zZXQgPSBzaF9ncGlvX3NldDsKKworCVdBUk5fT04ocGlwLT5maXJzdF9ncGlvICE9IDApOyAvKiBuZWVkcyB0ZXN0aW5nICovCisKKwljaGlwLT5sYWJlbCA9IHBpcC0+bmFtZTsKKwljaGlwLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNoaXAtPmJhc2UgPSBwaXAtPmZpcnN0X2dwaW87CisJY2hpcC0+bmdwaW8gPSAocGlwLT5sYXN0X2dwaW8gLSBwaXAtPmZpcnN0X2dwaW8pICsgMTsKKworCXJldHVybiBncGlvY2hpcF9hZGQoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDY0Yjc2OTAuLjNmMTM3MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC01MSw3ICs1MSw3IEBACiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICItJS04cyIsIGlycV9kZXNjW2ldLm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCX0KICNlbmRpZgogCi0JaXJxID0gaXJxX2RlbXV4KGV2dDJpcnEoaXJxKSk7CisJaXJxID0gaXJxX2RlbXV4KGludGNfZXZ0MmlycShpcnEpKTsKIAogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIAljdXJjdHggPSAodW5pb24gaXJxX2N0eCAqKWN1cnJlbnRfdGhyZWFkX2luZm8oKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA5NGRmNTZiLi43ZWEyNzA0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xNCwyMSArMTQsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXR5cGVkZWYgTk9SRVRfVFlQRSB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSgKLQkJCQl1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCi0JCQkJdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCi0JCQkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLAotCQkJCXVuc2lnbmVkIGxvbmcgdmJyX3JlZykgQVRUUklCX05PUkVUOwordHlwZWRlZiB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzKTsKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CiBleHRlcm4gdm9pZCAqZ2RiX3Zicl92ZWN0b3I7CitleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CiAKIHZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQogewpAQCAtNDUsNiArNDYsMTIgQEAKICAqLwogaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKKwkvKiBvbGRlciB2ZXJzaW9ucyBvZiBrZXhlYy10b29scyBhcmUgcGFzc2luZworCSAqIHRoZSB6SW1hZ2UgZW50cnkgcG9pbnQgYXMgYSB2aXJ0dWFsIGFkZHJlc3MuCisJICovCisJaWYgKGltYWdlLT5zdGFydCAhPSBQSFlTQUREUihpbWFnZS0+c3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogdXBncmFkZSB5b3VyIGtleGVjLXRvb2xzICovCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzMsMTcgKzgwLDMzIEBACiAgKi8KIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKLQogCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0OwogCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgdmJyX3JlZzsKIAlyZWxvY2F0ZV9uZXdfa2VybmVsX3Qgcm5rOworCXVuc2lnbmVkIGxvbmcgZW50cnk7CisJdW5zaWduZWQgbG9uZyAqcHRyOworCWludCBzYXZlX2Z0cmFjZV9lbmFibGVkOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLQl2YnJfcmVnID0gKCh1bnNpZ25lZCBsb25nIClnZGJfdmJyX3ZlY3RvcikgLSAweDEwMDsKLSNlbHNlCi0JdmJyX3JlZyA9IDB4ODAwMDAwMDA7ICAvLyBkdW1teQorCS8qCisJICogTmlja2VkIGZyb20gdGhlIG1pcHMgdmVyc2lvbiBvZiBtYWNoaW5lX2tleGVjKCk6CisJICogVGhlIGdlbmVyaWMga2V4ZWMgY29kZSBidWlsZHMgYSBwYWdlIGxpc3Qgd2l0aCBwaHlzaWNhbAorCSAqIGFkZHJlc3Nlcy4gVXNlIHBoeXNfdG9fdmlydCgpIHRvIGNvbnZlcnQgdGhlbSB0byB2aXJ0dWFsLgorCSAqLworCWZvciAocHRyID0gJmltYWdlLT5oZWFkOyAoZW50cnkgPSAqcHRyKSAmJiAhKGVudHJ5ICYgSU5EX0RPTkUpOworCSAgICAgcHRyID0gKGVudHJ5ICYgSU5EX0lORElSRUNUSU9OKSA/CisJICAgICAgIHBoeXNfdG9fdmlydChlbnRyeSAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9ICh1bnNpZ25lZCBsb25nKSBwaHlzX3RvX3ZpcnQoKnB0cik7CisJfQorCisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CiAjZW5kaWYKKworCXNhdmVfZnRyYWNlX2VuYWJsZWQgPSBfX2Z0cmFjZV9lbmFibGVkX3NhdmUoKTsKKwogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIApAQCAtOTcsMTIgKzEyMCwzNyBAQAogCW1lbWNweSgodm9pZCAqKXJlYm9vdF9jb2RlX2J1ZmZlciwgcmVsb2NhdGVfbmV3X2tlcm5lbCwKIAkJCQkJCXJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CiAKLSAgICAgICAga2V4ZWNfaW5mbyhpbWFnZSk7CisJa2V4ZWNfaW5mbyhpbWFnZSk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDoKKwkJICAgICA6ICJyIiAoKCh1bnNpZ25lZCBsb25nKSBnZGJfdmJyX3ZlY3RvcikgLSAweDEwMCkKKwkJICAgICA6ICJtZW1vcnkiKTsKKyNlbmRpZgorCiAJLyogbm93IGNhbGwgaXQgKi8KIAlybmsgPSAocmVsb2NhdGVfbmV3X2tlcm5lbF90KSByZWJvb3RfY29kZV9idWZmZXI7Ci0JKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLCBQMlNFR0FERFIoaW1hZ2UtPnN0YXJ0KSwgdmJyX3JlZyk7CisJKCpybmspKHBhZ2VfbGlzdCwgcmVib290X2NvZGVfYnVmZmVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoaW1hZ2UtPnN0YXJ0KSk7CisKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDogOiAiciIgKCZ2YnJfYmFzZSkgOiAibWVtb3J5Iik7CisKKwlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CisKKwkvKiBDb252ZXJ0IHBhZ2UgbGlzdCBiYWNrIHRvIHBoeXNpY2FsIGFkZHJlc3Nlcywgd2hhdCBhIG1lc3MuICovCisJZm9yIChwdHIgPSAmaW1hZ2UtPmhlYWQ7IChlbnRyeSA9ICpwdHIpICYmICEoZW50cnkgJiBJTkRfRE9ORSk7CisJICAgICBwdHIgPSAoKnB0ciAmIElORF9JTkRJUkVDVElPTikgPworCSAgICAgICBwaHlzX3RvX3ZpcnQoKnB0ciAmIFBBR0VfTUFTSykgOiBwdHIgKyAxKSB7CisJCWlmICgqcHRyICYgSU5EX1NPVVJDRSB8fCAqcHRyICYgSU5EX0lORElSRUNUSU9OIHx8CisJCSAgICAqcHRyICYgSU5EX0RFU1RJTkFUSU9OKQorCQkJKnB0ciA9IHZpcnRfdG9fcGh5cygqcHRyKTsKKwl9CisjZW5kaWYKKworCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIH0KIAogdm9pZCBhcmNoX2NyYXNoX3NhdmVfdm1jb3JlaW5mbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCBjNjZjYjMyLi5mY2M5OTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworKysgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtNCw2ICs0LDggQEAKICAqCiAgKiBMQU5ESVNLL3NoNCBpcyBzdXBwb3J0ZWQuIE1heWJlLCBTSCBhcmNodGVjdHVyZSB3b3JrcyB3ZWxsLgogICoKKyAqIDIwMDktMDMtMTggTWFnbnVzIERhbW0gLSBBZGRlZCBLZXhlYyBKdW1wIHN1cHBvcnQKKyAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKICAqIFZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KQEAgLTE2LDIzICsxOCwxNDEgQEAKIAkvKiByNCA9IGluZGlyZWN0aW9uX3BhZ2UgICAqLwogCS8qIHI1ID0gcmVib290X2NvZGVfYnVmZmVyICovCiAJLyogcjYgPSBzdGFydF9hZGRyZXNzICAgICAgKi8KLQkvKiByNyA9IHZicl9yZWcgICAgICAgICAgICAqLwogCi0JbW92LmwJMTBmLHI4CSAgLyogUEFHRV9TSVpFICovCi0JbW92LmwJMTFmLHI5ICAgIC8qIFAyU0VHICovCisJbW92LmwJMTBmLCByMAkJLyogUEFHRV9TSVpFICovCisJYWRkCXI1LCByMAkJLyogc2V0dXAgbmV3IHN0YWNrIGF0IGVuZCBvZiBjb250cm9sIHBhZ2UgKi8KIAotCS8qICBzdGFjayBzZXR0aW5nICovCi0JYWRkCXI4LHI1Ci0JbW92CXI1LHIxNQorCS8qIHNhdmUgcjE1LT5yOCB0byBuZXcgc3RhY2sgKi8KKwltb3YubAlyMTUsIEAtcjAKKwltb3YJcjAsIHIxNQorCW1vdi5sCXIxNCwgQC1yMTUKKwltb3YubAlyMTMsIEAtcjE1CisJbW92LmwJcjEyLCBALXIxNQorCW1vdi5sCXIxMSwgQC1yMTUKKwltb3YubAlyMTAsIEAtcjE1CisJbW92LmwJcjksIEAtcjE1CisJbW92LmwJcjgsIEAtcjE1CiAKKwkvKiBzYXZlIG90aGVyIHJhbmRvbSByZWdpc3RlcnMgKi8KKwlzdHMubAltYWNsLCBALXIxNQorCXN0cy5sCW1hY2gsIEAtcjE1CisJc3RjLmwJZ2JyLCBALXIxNQorCXN0Yy5sCXNzciwgQC1yMTUKKwlzdGMubAlzciwgQC1yMTUKKwlzdHMubAlwciwgQC1yMTUKKwlzdGMubAlzcGMsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazEgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCXN0YwlzciwgcjgKKwlvcglyOSwgcjgKKwlsZGMJcjgsIHNyCisJbW92LmwJcjcsIEAtcjE1CisJbW92LmwJcjYsIEAtcjE1CisJbW92LmwJcjUsIEAtcjE1CisJbW92LmwJcjQsIEAtcjE1CisJbW92LmwJcjMsIEAtcjE1CisJbW92LmwJcjIsIEAtcjE1CisJbW92LmwJcjEsIEAtcjE1CisJbW92LmwJcjAsIEAtcjE1CisKKwkvKiBzd2l0Y2ggdG8gYmFuazAgYW5kIHNhdmUgcjctPnIwICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwltb3YubAlyMCwgQC1yMTUKKworCW1vdi5sCXI0LCBALXIxNQkvKiBzYXZlIGluZGlyZWN0aW9uIHBhZ2UgYWdhaW4gKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmVmb3JlIGp1bXBpbmcgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdmEJMTFmLCByMAorCW1vdi5sCXIxNSwgQHIwCS8qIHNhdmUgcG9pbnRlciB0byBzdGFjayAqLworCisJanNyCUByNgkJLyogaGFuZCBvdmVyIGNvbnRyb2wgdG8gbmV3IGtlcm5lbCAqLworCSBub3AKKworCW1vdi5sCTExZiwgcjE1CS8qIGdldCBwb2ludGVyIHRvIHN0YWNrICovCisJbW92LmwJQHIxNSssIHI0CS8qIHJlc3RvcmUgcjQgdG8gZ2V0IGluZGlyZWN0aW9uIHBhZ2UgKi8KKworCWJzcglzd2FwX3BhZ2VzCS8qIHN3YXAgcGFnZXMgYmFjayB0byBwcmV2aW91cyBzdGF0ZSAqLworCSBub3AKKworCS8qIG1ha2Ugc3VyZSBiYW5rMCBpcyBhY3RpdmUgYW5kIHJlc3RvcmUgcjAtPnI3ICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCB0byBiYW5rMSBhbmQgcmVzdG9yZSByMC0+cjcgKi8KKwltb3YubAkxMmYsIHI5CisJc3RjCXNyLCByOAorCW9yCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCS8qIHN3aXRjaCBiYWNrIHRvIGJhbmswICovCisJbW92LmwJMTJmLCByOQorCW5vdAlyOSwgcjkKKwlzdGMJc3IsIHI4CisJYW5kCXI5LCByOAorCWxkYwlyOCwgc3IKKworCS8qIHJlc3RvcmUgb3RoZXIgcmFuZG9tIHJlZ2lzdGVycyAqLworCWxkYy5sCUByMTUrLCBzcGMKKwlsZHMubAlAcjE1KywgcHIKKwlsZGMubAlAcjE1Kywgc3IKKwlsZGMubAlAcjE1Kywgc3NyCisJbGRjLmwJQHIxNSssIGdicgorCWxkcy5sCUByMTUrLCBtYWNoCisJbGRzLmwJQHIxNSssIG1hY2wKKworCS8qIHJlc3RvcmUgcjgtPnIxNSAqLworCW1vdi5sCUByMTUrLCByOAorCW1vdi5sCUByMTUrLCByOQorCW1vdi5sCUByMTUrLCByMTAKKwltb3YubAlAcjE1KywgcjExCisJbW92LmwJQHIxNSssIHIxMgorCW1vdi5sCUByMTUrLCByMTMKKwltb3YubAlAcjE1KywgcjE0CisJbW92LmwJQHIxNSssIHIxNQorCXJ0cworCSBub3AKKworc3dhcF9wYWdlczoKIAlicmEJMWYKLQltb3YJcjQscjAJICAvKiBjbWQgPSBpbmRpcmVjdGlvbl9wYWdlICovCisJIG1vdglyNCxyMAkgIC8qIGNtZCA9IGluZGlyZWN0aW9uX3BhZ2UgKi8KIDA6CiAJbW92LmwJQHI0KyxyMAkgIC8qIGNtZCA9ICppbmQrKyAqLwogCi0xOgkvKiBhZGRyID0gKGNtZCB8IFAyU0VHKSAmIDB4ZmZmZmZmZjAgKi8KKzE6CS8qIGFkZHIgPSBjbWQgJiAweGZmZmZmZmYwICovCiAJbW92CXIwLHIyCi0Jb3IJcjkscjIKIAltb3YJIy0xNixyMQogCWFuZAlyMSxyMgogCkBAIC00MCw1NyArMTYwLDcwIEBACiAJdHN0CSMxLHIwCiAJYnQJMmYKIAlicmEJMGIKLQltb3YJcjIscjUKKwkgbW92CXIyLHI1CiAKIDI6CS8qIGVsc2UgaWYoY21kICYgSU5EX0lORElSRUNUSU9OKSBpbmQgPSBhZGRyICAqLwogCXRzdAkjMixyMAogCWJ0CTNmCiAJYnJhCTBiCi0JbW92CXIyLHI0CisJIG1vdglyMixyNAogCi0zOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSBnb3RvIDYgICovCiszOgkvKiBlbHNlIGlmKGNtZCAmIElORF9ET05FKSByZXR1cm4gKi8KIAl0c3QJIzQscjAKIAlidAk0ZgotCWJyYQk2ZgotCW5vcAorCXJ0cworCSBub3AKIAogNDoJLyogZWxzZSBpZihjbWQgJiBJTkRfU09VUkNFKSBtZW1jcHkoZHN0LGFkZHIsUEFHRV9TSVpFKSAqLwogCXRzdAkjOCxyMAogCWJ0CTBiCiAKLQltb3YJcjgscjMKKwltb3YubAkxMGYscjMJICAvKiBQQUdFX1NJWkUgKi8KIAlzaGxyMglyMwogCXNobHIyCXIzCiA1OgogCWR0CXIzCi0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMCAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQotCW1vdi5sCUByMisscjEJICAvKiAgMTZuKzQgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKLQltb3YubAlAcjIrLHIxICAgLyogIDE2bis4ICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1Ci0JbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rMTIgKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKKworCS8qIHJlZ3VsYXIga2V4ZWMganVzdCBvdmVyd3JpdGVzIHRoZSBkZXN0aW5hdGlvbiBwYWdlCisJICogd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHNvdXJjZSBwYWdlLgorCSAqIGZvciB0aGUga2V4ZWMganVtcCBjYXNlIHdlIG5lZWQgdG8gc3dhcCB0aGUgY29udGVudHMKKwkgKiBvZiB0aGUgcGFnZXMuCisJICogdG8ga2VlcCBpdCBzaW1wbGUgc3dhcCB0aGUgY29udGVudHMgZm9yIGJvdGggY2FzZXMuCisJICovCisJbW92LmwJQCgwLCByMiksIHI4CisJbW92LmwJQCgwLCByNSksIHIxCisJbW92LmwJcjgsIEAoMCwgcjUpCisJbW92LmwJcjEsIEAoMCwgcjIpCisKKwltb3YubAlAKDQsIHIyKSwgcjgKKwltb3YubAlAKDQsIHI1KSwgcjEKKwltb3YubAlyOCwgQCg0LCByNSkKKwltb3YubAlyMSwgQCg0LCByMikKKworCW1vdi5sCUAoOCwgcjIpLCByOAorCW1vdi5sCUAoOCwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDgsIHI1KQorCW1vdi5sCXIxLCBAKDgsIHIyKQorCisJbW92LmwJQCgxMiwgcjIpLCByOAorCW1vdi5sCUAoMTIsIHI1KSwgcjEKKwltb3YubAlyOCwgQCgxMiwgcjUpCisJbW92LmwJcjEsIEAoMTIsIHIyKQorCisJYWRkCSMxNixyNQorCWFkZAkjMTYscjIKIAliZgk1YgogCiAJYnJhCTBiCi0Jbm9wCi02OgotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi0JbGRjICAgcjcsIHZicgotI2VuZGlmCi0Jam1wIEByNgotCW5vcAorCSBub3AKIAogCS5hbGlnbiAyCiAxMDoKIAkubG9uZwlQQUdFX1NJWkUKIDExOgotCS5sb25nCVAyU0VHCisJLmxvbmcJMAorMTI6CisJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKIAogcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQ6CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM3MGQyY2YuLjI0YzYwMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDMyLDYgKzQzMiw3IEBACiAJW0NQVV9TSDc3NjNdCT0gIlNINzc2MyIsCVtDUFVfU0g3NzcwXQk9ICJTSDc3NzAiLAogCVtDUFVfU0g3NzgwXQk9ICJTSDc3ODAiLAlbQ1BVX1NINzc4MV0JPSAiU0g3NzgxIiwKIAlbQ1BVX1NINzM0M10JPSAiU0g3MzQzIiwJW0NQVV9TSDc3ODVdCT0gIlNINzc4NSIsCisJW0NQVV9TSDc3ODZdCT0gIlNINzc4NiIsCiAJW0NQVV9TSDc3MjJdCT0gIlNINzcyMiIsCVtDUFVfU0hYM10JPSAiU0gtWDMiLAogCVtDUFVfU0g1XzEwMV0JPSAiU0g1LTEwMSIsCVtDUFVfU0g1XzEwM10JPSAiU0g1LTEwMyIsCiAJW0NQVV9NWEddCT0gIk1YLUciLAlbQ1BVX1NINzcyM10JPSAiU0g3NzIzIiwKQEAgLTQ0OCw3ICs0NDksNyBAQAogLyogU3ltYm9saWMgQ1BVIGZsYWdzLCBrZWVwIGluIHN5bmMgd2l0aCBhc20vY3B1LWZlYXR1cmVzLmggKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjcHVfZmxhZ3NbXSA9IHsKIAkibm9uZSIsICJmcHUiLCAicDJmbHVzaCIsICJtbXVhc3NvYyIsICJkc3AiLCAicGVyZmN0ciIsCi0JInB0ZWEiLCAibGxzYyIsICJsMiIsICJvcDMyIiwgTlVMTAorCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsICJwdGVhZXgiLCBOVUxMCiB9OwogCiBzdGF0aWMgdm9pZCBzaG93X2NwdWZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNoX2NwdWluZm8gKmMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYyBiL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjY0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9zd3N1c3AuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogc3dzdXNwLmMgLSBTdXBlckggaGliZXJuYXRpb24gc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisKK3N0cnVjdCBzd3N1c3BfYXJjaF9yZWdzIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MDsKKworaW50IHBmbl9pc19ub3NhdmUodW5zaWduZWQgbG9uZyBwZm4pCit7CisJdW5zaWduZWQgbG9uZyBiZWdpbl9wZm4gPSBfX3BhKCZfX25vc2F2ZV9iZWdpbikgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQQUdFX0FMSUdOKF9fcGEoJl9fbm9zYXZlX2VuZCkpID4+IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4gKHBmbiA+PSBiZWdpbl9wZm4pICYmIChwZm4gPCBlbmRfcGZuKTsKK30KKwordm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQoreworCWluaXRfZnB1KGN1cnJlbnQpOworfQorCit2b2lkIHJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDg0NTdmODMuLmMzNGUxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKQEAgLTQxLDE0ICs0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBOdWxsIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGZ1bmN0aW9ucyBmb3Igc3lzdGVtcyBsYWNraW5nIG9uZS4KLSAqLwotc3RhdGljIGN5Y2xlX3QgbnVsbF9ocHRfcmVhZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKikgPSBudWxsX3J0Y19nZXRfdGltZTsKIGludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KSA9IG51bGxfcnRjX3NldF90aW1lOwogCkBAIC0xMTIsNyArMTA0LDYgQEAKIEVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKICNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfVElNRSAqLwogCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAvKiBsYXN0IHRpbWUgdGhlIFJUQyBjbG9jayBnb3QgdXBkYXRlZCAqLwogc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlOwogCkBAIC0xNTYsNyArMTQ3LDYgQEAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKICNlbmRpZgogfQotI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgdGltZXJfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0xODksNyArMTc5LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRpbWVyX2luaXRfc3lzZnModm9pZCkKIHsKLQlpbnQgcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1lcl9zeXNjbGFzcyk7CisJaW50IHJldDsKKworCWlmICghc3lzX3RpbWVyKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfc3lzY2xhc3MpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjAwLDQyICsxOTUsMjEgQEAKIAogdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CiAKLS8qCi0gKiBTaGFtZWxlc3NseSBiYXNlZCBvbiB0aGUgTUlQUyBhbmQgU3BhcmM2NCB3b3JrLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCBfX3JlYWRfbW9zdGx5OwotdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5ID0gMDsKLQotI2RlZmluZSBOU0VDX1BFUl9DWUNfU0hJRlQJMTAKLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKK3N0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaCA9IHsKIAkubmFtZQkJPSAiU3VwZXJIIiwKLQkucmF0aW5nCQk9IDIwMCwKLQkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkucmVhZAkJPSBudWxsX2hwdF9yZWFkLAotCS5zaGlmdAkJPSAxNiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zaF9jbG9ja3NvdXJjZSh2b2lkKQotewotCWlmICghc2hfaHB0X2ZyZXF1ZW5jeSB8fCBjbG9ja3NvdXJjZV9zaC5yZWFkID09IG51bGxfaHB0X3JlYWQpCi0JCXJldHVybjsKLQotCWNsb2Nrc291cmNlX3NoLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHNoX2hwdF9mcmVxdWVuY3ksCi0JCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKLQotCXRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChzaF9ocHRfZnJlcXVlbmN5LCBOU0VDX1BFUl9DWUNfU0hJRlQpOwotCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3NoKTsKLX0KLQogI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrcyA9IGNsb2Nrc291cmNlX3NoLnJlYWQoKTsKLQlyZXR1cm4gKHRpY2tzICogdGltZXJfdGlja3NfcGVyX25zZWNfcXVvdGllbnQpID4+IE5TRUNfUEVSX0NZQ19TSElGVDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzOworCisJLyogamlmZmllcyBiYXNlZCBzY2hlZF9jbG9jayBpZiBubyBjbG9ja3NvdXJjZSBpcyBpbnN0YWxsZWQgKi8KKwlpZiAoIWNsb2Nrc291cmNlX3NoLnJhdGluZykKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqIChOU0VDX1BFUl9TRUMgLyBIWik7CisKKwljeWNsZXMgPSBjbG9ja3NvdXJjZV9zaC5yZWFkKCk7CisJcmV0dXJuIGN5YzJucygmY2xvY2tzb3VyY2Vfc2gsIGN5Y2xlcyk7CiB9CiAjZW5kaWYKIApAQCAtMjU5LDE3ICsyMzMsOCBAQAogCSAqIGluaXRpYWxpemVkIGZvciB1cy4KIAkgKi8KIAlzeXNfdGltZXIgPSBnZXRfc3lzX3RpbWVyKCk7CisJaWYgKHVubGlrZWx5KCFzeXNfdGltZXIpKQorCQlwYW5pYygiU3lzdGVtIHRpbWVyIG1pc3NpbmcuXG4iKTsKKwogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nICVzIGZvciBzeXN0ZW0gdGltZXJcbiIsIHN5c190aW1lci0+bmFtZSk7Ci0KLQotCWlmIChzeXNfdGltZXItPm9wcy0+cmVhZCkKLQkJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHN5c190aW1lci0+b3BzLT5yZWFkOwotCi0JaW5pdF9zaF9jbG9ja3NvdXJjZSgpOwotCi0JaWYgKHNoX2hwdF9mcmVxdWVuY3kpCi0JCXByaW50aygiVXNpbmcgJWx1LiUwM2x1IE1IeiBoaWdoIHByZWNpc2lvbiB0aW1lci5cbiIsCi0JCSAgICAgICAoKHNoX2hwdF9mcmVxdWVuY3kgKyA1MDApIC8gMTAwMCkgLyAxMDAwLAotCQkgICAgICAgKChzaF9ocHRfZnJlcXVlbmN5ICsgNTAwKSAvIDEwMDApICUgMTAwMCk7Ci0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCmluZGV4IGMzZDIzN2UuLjlhNzdhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYwpAQCAtMzUsNyArMzUsOCBAQAogI2RlZmluZSBNVFUyX1RTUl8xCTB4ZmZmZTQzODUKICNkZWZpbmUgTVRVMl9UQ05UXzEJMHhmZmZlNDM4NgkvKiAxNi1iaXQgY291bnRlciAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMykKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4OAogI2Vsc2UKICNkZWZpbmUgTVRVMl9UR1JBXzEJMHhmZmZlNDM4YQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCmluZGV4IDBkYjNmOTUuLjEwYjVhNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKQEAgLTE0Niw3ICsxNDYsMTQgQEAKIAlfdG11X2NsZWFyX3N0YXR1cyhUTVUwKTsKIAlfdG11X3NldF9pcnEoVE1VMCx0bXUwX2Nsb2NrZXZlbnQubW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKIAotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCXN3aXRjaCAodG11MF9jbG9ja2V2ZW50Lm1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIzNyw2ICsyNDQsNyBAQAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgJiYgXAorICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKIAljdHJsX291dGIoVE1VX1RPQ1JfSU5JVCwgVE1VX1RPQ1IpOwogI2VuZGlmCkBAIC0yNTQsNyArMjYyLDE0IEBACiAKIAlfdG11X3N0YXJ0KFRNVTEpOwogCi0Jc2hfaHB0X2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MV9jbGspOworCWNsb2Nrc291cmNlX3NoLnJhdGluZyA9IDIwMDsKKwljbG9ja3NvdXJjZV9zaC5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMik7CisJY2xvY2tzb3VyY2Vfc2gucmVhZCA9IHRtdV90aW1lcl9yZWFkOworCWNsb2Nrc291cmNlX3NoLnNoaWZ0ID0gMTA7CisJY2xvY2tzb3VyY2Vfc2gubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY2xrX2dldF9yYXRlKCZ0bXUxX2NsayksCisJCQkJCQkgIGNsb2Nrc291cmNlX3NoLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9zaC5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9zaCk7CiAKIAl0bXUwX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhmcmVxdWVuY3ksIE5TRUNfUEVSX1NFQywKIAkJCQkgICAgICB0bXUwX2Nsb2NrZXZlbnQuc2hpZnQpOwpAQCAtMjY0LDYgKzI3OSw3IEBACiAJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZ0bXUwX2Nsb2NrZXZlbnQpOwogCiAJdG11MF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCXRtdTBfY2xvY2tldmVudC5yYXRpbmcgPSAxMDA7CiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnRtdTBfY2xvY2tldmVudCk7CiAKQEAgLTI3NCw3ICsyOTAsNiBAQAogCS5pbml0CQk9IHRtdV90aW1lcl9pbml0LAogCS5zdGFydAkJPSB0bXVfdGltZXJfc3RhcnQsCiAJLnN0b3AJCT0gdG11X3RpbWVyX3N0b3AsCi0JLnJlYWQJCT0gdG11X3RpbWVyX3JlYWQsCiB9OwogCiBzdHJ1Y3Qgc3lzX3RpbWVyIHRtdV90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCmluZGV4IDdiNGI4MmJkLi5kMGIyYTcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMKQEAgLTE1LDcgKzE1LDEwIEBACiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19QTUJfRklYRUQKKwkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgKENPTkZJR19NRU1PUllfU1RBUlQgJiAweDFmZmZmZmZmKSArCisJICAgIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOworI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCiAJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwogI2Vsc2UKIAkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDU1NWVjOTcuLjEwYzI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTU3LDcgKzU3LDcgQEAKIAlib29sCiAJZGVmYXVsdCB5IGlmIENQVV9TSDUKIAotY29uZmlnIFBNQgorY29uZmlnIFBNQl9FTkFCTEUKIAlib29sICJTdXBwb3J0IDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHRocm91Z2ggUE1CIgogCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKIAlzZWxlY3QgMzJCSVQKQEAgLTY3LDYgKzY3LDMzIEBACiAJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKIAkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KIAorY2hvaWNlCisJcHJvbXB0ICJQTUIgaGFuZGxpbmcgdHlwZSIKKwlkZXBlbmRzIG9uIFBNQl9FTkFCTEUKKwlkZWZhdWx0IFBNQl9GSVhFRAorCitjb25maWcgUE1CCisJYm9vbCAiUE1CIgorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCisJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKKwkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KKworY29uZmlnIFBNQl9GSVhFRAorCWJvb2wgImZpeGVkIFBNQiIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBcCisJCQkJCSAgIENQVV9TVUJUWVBFX1NINzc4NSkKKwlzZWxlY3QgMzJCSVQKKwloZWxwCisJICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBmaXhlZCBQTUIgbWFwcGluZ3MgYXJlIGluaGVyaXRlZAorCSAgZnJvbSB0aGUgYm9vdCBsb2FkZXIsIGFuZCB0aGUga2VybmVsIGRvZXMgbm90IGF0dGVtcHQgZHluYW1pYworCSAgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgY2xvc2VzdCB0byBsZWdhY3kgMjktYml0IHBoeXNpY2FsIG1vZGUsCisJICBhbmQgYWxsb3dzIHN5c3RlbXMgdG8gc3VwcG9ydCB1cCB0byA1MTJNaUIgb2Ygc3lzdGVtIG1lbW9yeS4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBYMlRMQgogCWJvb2wgIkVuYWJsZSBleHRlbmRlZCBUTEIgbW9kZSIKIAlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMiBiL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIKaW5kZXggY2IyZjNmMi4uOTg2YTFlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL21tL01ha2VmaWxlXzMyCkBAIC0yNSw4ICsyNSwxMCBAQAogZW5kaWYKIAogaWZkZWYgQ09ORklHX01NVQotb2JqLSQoQ09ORklHX0NQVV9TSDMpCSs9IHRsYi1zaDMubwotb2JqLSQoQ09ORklHX0NQVV9TSDQpCSs9IHRsYi1zaDQubwordGxiLSQoQ09ORklHX0NQVV9TSDMpCQk6PSB0bGItc2gzLm8KK3RsYi0kKENPTkZJR19DUFVfU0g0KQkJOj0gdGxiLXNoNC5vCit0bGItJChDT05GSUdfQ1BVX0hBU19QVEVBRVgpCTo9IHRsYi1wdGVhZXgubworb2JqLXkJCQkJKz0gJCh0bGIteSkKIGlmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCiBvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IHBnLXNoNC5vCiBvYmotJChDT05GSUdfU0g3NzA1X0NBQ0hFXzMyS0IpCSs9IHBnLXNoNzcwNS5vCkBAIC0zNSw2ICszNyw3IEBACiAKIG9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpCSs9IGh1Z2V0bGJwYWdlLm8KIG9iai0kKENPTkZJR19QTUIpCQkrPSBwbWIubworb2JqLSQoQ09ORklHX1BNQl9GSVhFRCkJCSs9IHBtYi1maXhlZC5vCiBvYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWEubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2FzaWRzLWRlYnVnZnMuYwppbmRleCA4ZTkxMmExLi5jZDhjM2JmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKQEAgLTM3LDEwICszNyw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocC0+bW0pCi0JCQlzZXFfcHJpbnRmKGZpbGUsICIlNWQgOiAlMDJseFxuIiwgcGlkLAorCQkJc2VxX3ByaW50ZihmaWxlLCAiJTVkIDogJTA0bHhcbiIsIHBpZCwKIAkJCQkgICBjcHVfYXNpZChzbXBfcHJvY2Vzc29yX2lkKCksIHAtPm1tKSk7Ci0JCWVsc2UKLQkJCXNlcV9wcmludGYoZmlsZSwgIiU1ZCA6IChub25lKVxuIiwgcGlkKTsKIAl9CiAKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IDMyOTQ2ZmIuLjYwY2M0ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC01OSwxMSArNTksMTMgQEAKIAlpZiAoaXNfcGNpX21lbWFkZHIocGh5c19hZGRyKSAmJiBpc19wY2lfbWVtYWRkcihsYXN0X2FkZHIpKQogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfYWRkcjsKIAorI2lmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCiAJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJaWYgKHBoeXNfYWRkciA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpCiAJCXJldHVybiBOVUxMOworI2VuZGlmCiAKIAkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCkBAIC04MSw3ICs4Myw3IEBACiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwogCW9yaWdfYWRkciA9IGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOwogCi0jaWZkZWYgQ09ORklHXzMyQklUCisjaWZkZWYgQ09ORklHX1BNQgogCS8qCiAJICogRmlyc3QgdHJ5IHRvIHJlbWFwIHRocm91Z2ggdGhlIFBNQiBvbmNlIGEgdmFsaWQgVk1BIGhhcyBiZWVuCiAJICogZXN0YWJsaXNoZWQuIFNtYWxsZXIgYWxsb2NhdGlvbnMgKG9yIHRoZSByZXN0IG9mIHRoZSBzaXplCkBAIC0xMTksMTAgKzEyMSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgc2VnID0gUFhTRUcodmFkZHIpOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CiAKLQlpZiAoc2VnIDwgUDNTRUcgfHwgc2VnID49IFAzX0FERFJfTUFYIHx8IGlzX3BjaV9tZW1hZGRyKHZhZGRyKSkKKwlpZiAoc2VnIDwgUDNTRUcgfHwgdmFkZHIgPj0gUDNfQUREUl9NQVggfHwgaXNfcGNpX21lbWFkZHIodmFkZHIpKQogCQlyZXR1cm47CiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfUE1CCiAJLyoKIAkgKiBQdXJnZSBhbnkgUE1CIGVudHJpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzCiAJICogbWFwcGluZywgdGhlbiBwcm9jZWVkIHdpdGggY29udmVudGlvbmFsIFZNQSB0ZWFyZG93bi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLWZpeGVkLmMgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzhlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3BtYi1maXhlZC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBhcmNoL3NoL21tL2ZpeGVkX3BtYi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKK3N0YXRpYyBpbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZml4ZWRfcG1iX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUE1CX0VOVFJZX01BWDsgaSsrKSB7CisJCWFkZHIgPSBQTUJfREFUQSArIChpIDw8IFBNQl9FX1NISUZUKTsKKwkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQlpZiAoIShkYXRhICYgUE1CX1YpKQorCQkJY29udGludWU7CisKKwkJaWYgKGRhdGEgJiBQTUJfQykgeworI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCkKKwkJCWRhdGEgfD0gUE1CX1dUOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQorCQkJZGF0YSAmPSB+UE1CX1dUOworI2Vsc2UKKwkJCWRhdGEgJj0gfihQTUJfQyB8IFBNQl9XVCk7CisjZW5kaWYKKwkJfQorCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJfQorCisJYmFja190b19jYWNoZWQoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChmaXhlZF9wbWJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi5jIGIvYXJjaC9zaC9tbS9wbWIuYwppbmRleCA4NDI0MTY3Li5iMWE3MTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTE1LDYgKzE1LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC00MDIsMyArNDA0LDM5IEBACiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChwbWJfZGVidWdmc19pbml0KTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbWJfc3lzZGV2X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0YXRpYyBwbV9tZXNzYWdlX3QgcHJldl9zdGF0ZTsKKworCS8qIFJlc3RvcmUgdGhlIFBNQiBhZnRlciBhIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uICovCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OICYmCisJICAgIHByZXZfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisJCXNwaW5fbG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCQlmb3IgKHBtYmUgPSBwbWJfbGlzdDsgcG1iZTsgcG1iZSA9IHBtYmUtPm5leHQpCisJCQlzZXRfcG1iX2VudHJ5KHBtYmUpOworCQlzcGluX3VubG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCX0KKwlwcmV2X3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1iX3N5c2Rldl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcG1iX3N5c2Rldl9zdXNwZW5kKGRldiwgUE1TR19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBwbWJfc3lzZGV2X2RyaXZlciA9IHsKKwkuc3VzcGVuZCA9IHBtYl9zeXNkZXZfc3VzcGVuZCwKKwkucmVzdW1lID0gcG1iX3N5c2Rldl9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbWJfc3lzZGV2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJnBtYl9zeXNkZXZfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHBtYl9zeXNkZXZfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jIGIvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhYjNlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBhcmNoL3NoL21tL3RsYi1wdGVhZXguYworICoKKyAqIFRMQiBvcGVyYXRpb25zIGZvciBTSC1YMyBDUFVzIGZlYXR1cmluZyBQVEUgQVNJRCBFeHRlbnNpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBwdGV2YWw7CisJdW5zaWduZWQgbG9uZyB2cG47CisKKwkvKiBQdHJhY2UgbWF5IGNhbGwgdGhpcyByb3V0aW5lLiAqLworCWlmICh2bWEgJiYgY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCisJCXJldHVybjsKKworI2lmbmRlZiBDT05GSUdfQ0FDSEVfT0ZGCisJeworCQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKworCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCQkJaWYgKCF0ZXN0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncykpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwdGVfdmFsKHB0ZSkgJiBQVEVfUEhZU19NQVNLOworCQkJCV9fZmx1c2hfd2JhY2tfcmVnaW9uKCh2b2lkICopUDFTRUdBRERSKHBoeXMpLAorCQkJCQkJICAgICBQQUdFX1NJWkUpOworCQkJCV9fc2V0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncyk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCisJdnBuID0gYWRkcmVzcyAmIE1NVV9WUE5fTUFTSzsKKwlfX3Jhd193cml0ZWwodnBuLCBNTVVfUFRFSCk7CisKKwkvKiBTZXQgUFRFQUVYICovCisJX19yYXdfd3JpdGVsKGdldF9hc2lkKCksIE1NVV9QVEVBRVgpOworCisJcHRldmFsID0gcHRlLnB0ZV9sb3c7CisKKwkvKiBTZXQgUFRFQSByZWdpc3RlciAqLworI2lmZGVmIENPTkZJR19YMlRMQgorCS8qCisJICogRm9yIHRoZSBleHRlbmRlZCBtb2RlIFRMQiB0aGlzIGlzIHRyaXZpYWwsIG9ubHkgdGhlIEVTWiBhbmQKKwkgKiBFUFIgYml0cyBuZWVkIHRvIGJlIHdyaXR0ZW4gb3V0IHRvIFBURUEsIHdpdGggdGhlIHJlbWFpbmRlciBvZgorCSAqIHRoZSBwcm90ZWN0aW9uIGJpdHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgY29tcGF0LW1vZGUgU1oKKwkgKiBhbmQgUFIgYml0cywgd2hpY2ggYXJlIGNsZWFyZWQpIGJlaW5nIHdyaXR0ZW4gb3V0IGluIFBURUwuCisJICovCisJX19yYXdfd3JpdGVsKHB0ZS5wdGVfaGlnaCwgTU1VX1BURUEpOworI2VuZGlmCisKKwkvKiBTZXQgUFRFTCByZWdpc3RlciAqLworCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCisjaWZkZWYgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSAorCXB0ZXZhbCB8PSBfUEFHRV9XVDsKKyNlbmRpZgorCS8qIGNvbnZlbmllbnRseSwgd2Ugd2FudCBhbGwgdGhlIHNvZnR3YXJlIGZsYWdzIHRvIGJlIDAgYW55d2F5ICovCisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOworCisJLyogTG9hZCB0aGUgVExCICovCisJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFdoaWxlIFNILVgyIGV4dGVuZGVkIFRMQiBtb2RlIHNwbGl0cyBvdXQgdGhlIG1lbW9yeS1tYXBwZWQgSS9VVExCCisgKiBkYXRhIGFycmF5cywgU0gtWDMgY29yZXMgd2l0aCBQVEVBRVggc3BsaXQgb3V0IHRoZSBtZW1vcnktbWFwcGVkCisgKiBhZGRyZXNzIGFycmF5cy4gSW4gY29tcGF0IG1vZGUgdGhlIHNlY29uZCBhcnJheSBpcyBpbmFjY2Vzc2libGUsIHdoaWxlCisgKiBpbiBleHRlbmRlZCBtb2RlLCB0aGUgbGVnYWN5IDgtYml0IEFTSUQgZmllbGQgaW4gYWRkcmVzcyBhcnJheSAxIGhhcworICogdW5kZWZpbmVkIGJlaGF2aW91ci4KKyAqLwordm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJanVtcF90b191bmNhY2hlZCgpOworCV9fcmF3X3dyaXRlbChwYWdlLCBNTVVfVVRMQl9BRERSRVNTX0FSUkFZIHwgTU1VX1BBR0VfQVNTT0NfQklUKTsKKwlfX3Jhd193cml0ZWwoYXNpZCwgTU1VX1VUTEJfQUREUkVTU19BUlJBWTIgfCBNTVVfUEFHRV9BU1NPQ19CSVQpOworCWJhY2tfdG9fY2FjaGVkKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9zaC9vcHJvZmlsZS9jb21tb24uYwppbmRleCAxZDk3ZDY0Li4xYjlkNDMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvc2gvb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCWNhc2UgQ1BVX1NINzc4MDoKIAljYXNlIENQVV9TSDc3ODE6CiAJY2FzZSBDUFVfU0g3Nzg1OgorCWNhc2UgQ1BVX1NINzc4NjoKIAljYXNlIENQVV9TSDc3MjM6CiAJY2FzZSBDUFVfU0hYMzoKIAkJbG1vZGVsID0gJm9wX21vZGVsX3NoNGFfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDI4NGI3ZTguLjg0NzdiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTUyLDMgKzUyLDYgQEAKIEFQMzI1UlhBCQlTSF9BUDMyNVJYQQogU0g3NzYzUkRQCQlTSF9TSDc3NjNSRFAKIFNINzc4NUxDUgkJU0hfU0g3Nzg1TENSCitVUlFVRUxMCQkJU0hfVVJRVUVMTAorRVNQVAkJCVNIX0VTUFQKK1BPTEFSSVMJCQlTSF9QT0xBUklTCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBiZjUwZDBjLi45ODJhMTJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTUwLDYgKzUwLDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMHgwMDIyCiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkweDAwMjMKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogU2VjdXJpdHkgbGV2ZWxzIC0gYXMgcGVyIE5STCBJUHY2IC0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgKi8KICNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04JCTB4NTAwMQogI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkweDUwMDIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCmluZGV4IGVjODFjZGUuLmVlMzhlNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaApAQCAtNTcsNiArNTcsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqbXApCiB7CisJaWYgKCFtcC0+ZnVsbG1tKQorCQlmbHVzaF90bGJfcGVuZGluZygpOwogCWlmIChtcC0+bmVlZF9mbHVzaCkgewogCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKG1wLT5wYWdlcywgbXAtPnBhZ2VzX25yKTsKIAkJbXAtPnBhZ2VzX25yID0gMDsKQEAgLTc4LDggKzgwLDYgQEAKIAogCWlmIChtcC0+ZnVsbG1tKQogCQltcC0+ZnVsbG1tID0gMDsKLQllbHNlCi0JCWZsdXNoX3RsYl9wZW5kaW5nKCk7CiAKIAkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KIAljaGVja19wZ3RfY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKaW5kZXggMWMzNzhkOC4uOGJhMDY0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTlzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwppbmRleCAyZGIzYzIyLi42NDI1NjJkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3N0YXJmaXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IDNkN2FhZDAuLjMzNmI2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC00Miw3ICs0Miw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJjMmZiYWQuLjNhMzMwYTQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTE2NSw2ICsxNjUsOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorICAgICAgIGRlZl9ib29sIHkKKwogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCmluZGV4IDkwM2RlNGEuLmViZTdkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0FFU19YODZfNjQpICs9IGFlcy14ODZfNjQubwogb2JqLSQoQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82NCkgKz0gdHdvZmlzaC14ODZfNjQubwogb2JqLSQoQ09ORklHX0NSWVBUT19TQUxTQTIwX1g4Nl82NCkgKz0gc2Fsc2EyMC14ODZfNjQubworb2JqLSQoQ09ORklHX0NSWVBUT19BRVNfTklfSU5URUwpICs9IGFlc25pLWludGVsLm8KIAogb2JqLSQoQ09ORklHX0NSWVBUT19DUkMzMkNfSU5URUwpICs9IGNyYzMyYy1pbnRlbC5vCiAKQEAgLTE5LDMgKzIwLDUgQEAKIGFlcy14ODZfNjQteSA6PSBhZXMteDg2XzY0LWFzbV82NC5vIGFlc19nbHVlLm8KIHR3b2Zpc2gteDg2XzY0LXkgOj0gdHdvZmlzaC14ODZfNjQtYXNtXzY0Lm8gdHdvZmlzaF9nbHVlLm8KIHNhbHNhMjAteDg2XzY0LXkgOj0gc2Fsc2EyMC14ODZfNjQtYXNtXzY0Lm8gc2Fsc2EyMF9nbHVlLm8KKworYWVzbmktaW50ZWwteSA6PSBhZXNuaS1pbnRlbF9hc20ubyBhZXNuaS1pbnRlbF9nbHVlLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUyBiL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUwppbmRleCBlNDFiMTQ3Li5iOTQ5ZWMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TCkBAIC00MSwxNCArNDEsMTQgQEAKICNkZWZpbmUgdGxlbiAxMDI0ICAgLy8gbGVuZ3RoIG9mIGVhY2ggb2YgNCAneG9yJyBhcnJheXMgKDI1NiAzMi1iaXQgd29yZHMpCiAKIC8qIG9mZnNldHMgdG8gcGFyYW1ldGVycyB3aXRoIG9uZSByZWdpc3RlciBwdXNoZWQgb250byBzdGFjayAqLwotI2RlZmluZSB0Zm0gOAorI2RlZmluZSBjdHggOAogI2RlZmluZSBvdXRfYmxrIDEyCiAjZGVmaW5lIGluX2JsayAxNgogCi0vKiBvZmZzZXRzIGluIGNyeXB0b190Zm0gc3RydWN0dXJlICovCi0jZGVmaW5lIGtsZW4gKGNyeXB0b190Zm1fY3R4X29mZnNldCArIDApCi0jZGVmaW5lIGVrZXkgKGNyeXB0b190Zm1fY3R4X29mZnNldCArIDQpCi0jZGVmaW5lIGRrZXkgKGNyeXB0b190Zm1fY3R4X29mZnNldCArIDI0NCkKKy8qIG9mZnNldHMgaW4gY3J5cHRvX2Flc19jdHggc3RydWN0dXJlICovCisjZGVmaW5lIGtsZW4gKDQ4MCkKKyNkZWZpbmUgZWtleSAoMCkKKyNkZWZpbmUgZGtleSAoMjQwKQogCiAvLyByZWdpc3RlciBtYXBwaW5nIGZvciBlbmNyeXB0IGFuZCBkZWNyeXB0IHN1YnJvdXRpbmVzCiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCWRvX2NvbCAodGFibGUsIHI1LHIwLHIxLHI0LCByMixyMyk7CQkvKiBpZHg9cjUgKi8KIAogLy8gQUVTIChSaWpuZGFlbCkgRW5jcnlwdGlvbiBTdWJyb3V0aW5lCi0vKiB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLworLyogdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCiAKIC5nbG9iYWwgIGFlc19lbmNfYmxrCiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiBhZXNfZW5jX2JsazoKIAlwdXNoICAgICVlYnAKLQltb3YgICAgIHRmbSglZXNwKSwlZWJwCisJbW92ICAgICBjdHgoJWVzcCksJWVicAogCiAvLyBDQVVUSU9OOiB0aGUgb3JkZXIgYW5kIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGVzZSBhc3NpZ25zIAogLy8gcmVseSBvbiB0aGUgcmVnaXN0ZXIgbWFwcGluZ3MKQEAgLTI5Miw3ICsyOTIsNyBAQAogCXJldAogCiAvLyBBRVMgKFJpam5kYWVsKSBEZWNyeXB0aW9uIFN1YnJvdXRpbmUKLS8qIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCisvKiB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KIAogLmdsb2JhbCAgYWVzX2RlY19ibGsKIApAQCAtMzAzLDcgKzMwMyw3IEBACiAKIGFlc19kZWNfYmxrOgogCXB1c2ggICAgJWVicAotCW1vdiAgICAgdGZtKCVlc3ApLCVlYnAKKwltb3YgICAgIGN0eCglZXNwKSwlZWJwCiAKIC8vIENBVVRJT046IHRoZSBvcmRlciBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZXNlIGFzc2lnbnMgCiAvLyByZWx5IG9uIHRoZSByZWdpc3RlciBtYXBwaW5ncwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUwppbmRleCBhMTIwZjUyLi41YjU3N2Q1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUwpAQCAtMTcsOCArMTcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKLSNkZWZpbmUgQkFTRSBjcnlwdG9fdGZtX2N0eF9vZmZzZXQKLQogI2RlZmluZSBSMQklcmF4CiAjZGVmaW5lIFIxRQklZWF4CiAjZGVmaW5lIFIxWAklYXgKQEAgLTU2LDEzICs1NCwxMyBAQAogCS5hbGlnbgk4OwkJCVwKIEZVTkM6CW1vdnEJcjEscjI7CQkJXAogCW1vdnEJcjMscjQ7CQkJXAotCWxlYXEJQkFTRStLRVkrNDgrNChyOCkscjk7CVwKKwlsZWFxCUtFWSs0OChyOCkscjk7CQlcCiAJbW92cQlyMTAscjExOwkJXAogCW1vdmwJKHI3KSxyNSAjIyBFOwkJXAogCW1vdmwJNChyNykscjEgIyMgRTsJCVwKIAltb3ZsCTgocjcpLHI2ICMjIEU7CQlcCiAJbW92bAkxMihyNykscjcgIyMgRTsJCVwKLQltb3ZsCUJBU0UrMChyOCkscjEwICMjIEU7CVwKKwltb3ZsCTQ4MChyOCkscjEwICMjIEU7CVwKIAl4b3JsCS00OChyOSkscjUgIyMgRTsJXAogCXhvcmwJLTQ0KHI5KSxyMSAjIyBFOwlcCiAJeG9ybAktNDAocjkpLHI2ICMjIEU7CVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMKaW5kZXggNzFmNDU3OC4uNDlhZTlmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMKQEAgLTUsMTcgKzUsMjkgQEAKIAogI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KIAotYXNtbGlua2FnZSB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7Ci1hc21saW5rYWdlIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluKTsKKwordm9pZCBjcnlwdG9fYWVzX2VuY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCWFlc19lbmNfYmxrKGN0eCwgZHN0LCBzcmMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2Flc19lbmNyeXB0X3g4Nik7CisKK3ZvaWQgY3J5cHRvX2Flc19kZWNyeXB0X3g4NihzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlhZXNfZGVjX2JsayhjdHgsIGRzdCwgc3JjKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hZXNfZGVjcnlwdF94ODYpOwogCiBzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogewotCWFlc19lbmNfYmxrKHRmbSwgZHN0LCBzcmMpOworCWFlc19lbmNfYmxrKGNyeXB0b190Zm1fY3R4KHRmbSksIGRzdCwgc3JjKTsKIH0KIAogc3RhdGljIHZvaWQgYWVzX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKLQlhZXNfZGVjX2Jsayh0Zm0sIGRzdCwgc3JjKTsKKwlhZXNfZGVjX2JsayhjcnlwdG9fdGZtX2N0eCh0Zm0pLCBkc3QsIHNyYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNfYWxnID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYmE5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMKQEAgLTAsMCArMSw4OTYgQEAKKy8qCisgKiBJbXBsZW1lbnQgQUVTIGFsZ29yaXRobSBpbiBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zLgorICoKKyAqIFRoZSB3aGl0ZSBwYXBlciBvZiBBRVMtTkkgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBkb3dubG9hZGVkIGZyb206CisgKiAgIGh0dHA6Ly9zb2Z0d2FyZWNvbW11bml0eS5pbnRlbC5jb20vaXNuL2Rvd25sb2Fkcy9pbnRlbGF2eC9BRVMtSW5zdHJ1Y3Rpb25zLVNldF9XUC5wZGYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEludGVsIENvcnAuCisgKiAgICBBdXRob3I6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgorICogICAgICAgICAgICBWaW5vZGggR29wYWwgPHZpbm9kaC5nb3BhbEBpbnRlbC5jb20+CisgKiAgICAgICAgICAgIEthaHJhbWFuIEFrZGVtaXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKy50ZXh0CisKKyNkZWZpbmUgU1RBVEUxCSV4bW0wCisjZGVmaW5lIFNUQVRFMgkleG1tNAorI2RlZmluZSBTVEFURTMJJXhtbTUKKyNkZWZpbmUgU1RBVEU0CSV4bW02CisjZGVmaW5lIFNUQVRFCVNUQVRFMQorI2RlZmluZSBJTjEJJXhtbTEKKyNkZWZpbmUgSU4yCSV4bW03CisjZGVmaW5lIElOMwkleG1tOAorI2RlZmluZSBJTjQJJXhtbTkKKyNkZWZpbmUgSU4JSU4xCisjZGVmaW5lIEtFWQkleG1tMgorI2RlZmluZSBJVgkleG1tMworCisjZGVmaW5lIEtFWVAJJXJkaQorI2RlZmluZSBPVVRQCSVyc2kKKyNkZWZpbmUgSU5QCSVyZHgKKyNkZWZpbmUgTEVOCSVyY3gKKyNkZWZpbmUgSVZQCSVyOAorI2RlZmluZSBLTEVOCSVyOWQKKyNkZWZpbmUgVDEJJXIxMAorI2RlZmluZSBUS0VZUAlUMQorI2RlZmluZSBUMgklcjExCisKK19rZXlfZXhwYW5zaW9uXzEyODoKK19rZXlfZXhwYW5zaW9uXzI1NmE6CisJcHNodWZkICQwYjExMTExMTExLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXB4b3IgJXhtbTEsICV4bW0wCisJbW92YXBzICV4bW0wLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwlyZXQKKworX2tleV9leHBhbnNpb25fMTkyYToKKwlwc2h1ZmQgJDBiMDEwMTAxMDEsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJcHhvciAleG1tMSwgJXhtbTAKKworCW1vdmFwcyAleG1tMiwgJXhtbTUKKwltb3ZhcHMgJXhtbTIsICV4bW02CisJcHNsbGRxICQ0LCAleG1tNQorCXBzaHVmZCAkMGIxMTExMTExMSwgJXhtbTAsICV4bW0zCisJcHhvciAleG1tMywgJXhtbTIKKwlweG9yICV4bW01LCAleG1tMgorCisJbW92YXBzICV4bW0wLCAleG1tMQorCXNodWZwcyAkMGIwMTAwMDEwMCwgJXhtbTAsICV4bW02CisJbW92YXBzICV4bW02LCAoJXJjeCkKKwlzaHVmcHMgJDBiMDEwMDExMTAsICV4bW0yLCAleG1tMQorCW1vdmFwcyAleG1tMSwgMTYoJXJjeCkKKwlhZGQgJDB4MjAsICVyY3gKKwlyZXQKKworX2tleV9leHBhbnNpb25fMTkyYjoKKwlwc2h1ZmQgJDBiMDEwMTAxMDEsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJcHhvciAleG1tMSwgJXhtbTAKKworCW1vdmFwcyAleG1tMiwgJXhtbTUKKwlwc2xsZHEgJDQsICV4bW01CisJcHNodWZkICQwYjExMTExMTExLCAleG1tMCwgJXhtbTMKKwlweG9yICV4bW0zLCAleG1tMgorCXB4b3IgJXhtbTUsICV4bW0yCisKKwltb3ZhcHMgJXhtbTAsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCXJldAorCitfa2V5X2V4cGFuc2lvbl8yNTZiOgorCXBzaHVmZCAkMGIxMDEwMTAxMCwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMiwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMgorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTIsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTIKKwlweG9yICV4bW0xLCAleG1tMgorCW1vdmFwcyAleG1tMiwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJcmV0CisKKy8qCisgKiBpbnQgYWVzbmlfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmluX2tleSwKKyAqICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQorICovCitFTlRSWShhZXNuaV9zZXRfa2V5KQorCW1vdnVwcyAoJXJzaSksICV4bW0wCQkjIHVzZXIga2V5IChmaXJzdCAxNiBieXRlcykKKwltb3ZhcHMgJXhtbTAsICglcmRpKQorCWxlYSAweDEwKCVyZGkpLCAlcmN4CQkjIGtleSBhZGRyCisJbW92bCAlZWR4LCA0ODAoJXJkaSkKKwlweG9yICV4bW00LCAleG1tNAkJIyB4bW00IGlzIGFzc3VtZWQgMCBpbiBfa2V5X2V4cGFuc2lvbl94CisJY21wICQyNCwgJWRsCisJamIgLkxlbmNfa2V5MTI4CisJamUgLkxlbmNfa2V5MTkyCisJbW92dXBzIDB4MTAoJXJzaSksICV4bW0yCSMgb3RoZXIgdXNlciBrZXkKKwltb3ZhcHMgJXhtbTIsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0yLCAleG1tMQkjIHJvdW5kIDEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0yLCAleG1tMQkjIHJvdW5kIDIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0yLCAleG1tMQkjIHJvdW5kIDMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0yLCAleG1tMQkjIHJvdW5kIDQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA1CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDYKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0MCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4NDAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwlqbXAgLkxkZWNfa2V5CisuTGVuY19rZXkxOTI6CisJbW92cSAweDEwKCVyc2kpLCAleG1tMgkJIyBvdGhlciB1c2VyIGtleQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0yLCAleG1tMQkjIHJvdW5kIDEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTIsICV4bW0xCSMgcm91bmQgMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMiwgJXhtbTEJIyByb3VuZCAzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0yLCAleG1tMQkjIHJvdW5kIDQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDYKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NDAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDcKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDQwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4ODAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDgKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDgwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJam1wIC5MZGVjX2tleQorLkxlbmNfa2V5MTI4OgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0wLCAleG1tMQkjIHJvdW5kIDEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMCwgJXhtbTEJIyByb3VuZCAyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTAsICV4bW0xCSMgcm91bmQgMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0wLCAleG1tMQkjIHJvdW5kIDQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA2CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NDAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDcKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDQwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4MCwgJXhtbTAsICV4bW0xCSMgcm91bmQgOAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4ODAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDFiLCAleG1tMCwgJXhtbTEJIyByb3VuZCA5CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgxYgorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MzYsICV4bW0wLCAleG1tMQkjIHJvdW5kIDEwCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgzNgorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisuTGRlY19rZXk6CisJc3ViICQweDEwLCAlcmN4CisJbW92YXBzICglcmRpKSwgJXhtbTAKKwltb3ZhcHMgKCVyY3gpLCAleG1tMQorCW1vdmFwcyAleG1tMCwgMjQwKCVyY3gpCisJbW92YXBzICV4bW0xLCAyNDAoJXJkaSkKKwlhZGQgJDB4MTAsICVyZGkKKwlsZWEgMjQwLTE2KCVyY3gpLCAlcnNpCisuYWxpZ24gNAorLkxkZWNfa2V5X2xvb3A6CisJbW92YXBzICglcmRpKSwgJXhtbTAKKwkjIGFlc2ltYyAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRiLCAweGM4CisJbW92YXBzICV4bW0xLCAoJXJzaSkKKwlhZGQgJDB4MTAsICVyZGkKKwlzdWIgJDB4MTAsICVyc2kKKwljbXAgJXJjeCwgJXJkaQorCWpiIC5MZGVjX2tleV9sb29wCisJeG9yICVyYXgsICVyYXgKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQorICovCitFTlRSWShhZXNuaV9lbmMpCisJbW92bCA0ODAoS0VZUCksIEtMRU4JCSMga2V5IGxlbmd0aAorCW1vdnVwcyAoSU5QKSwgU1RBVEUJCSMgaW5wdXQKKwljYWxsIF9hZXNuaV9lbmMxCisJbW92dXBzIFNUQVRFLCAoT1VUUCkJCSMgb3V0cHV0CisJcmV0CisKKy8qCisgKiBfYWVzbmlfZW5jMToJCWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJcm91bmQgY291bnQKKyAqCVNUQVRFOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKiBvdXRwdXQ6CisgKglTVEFURToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZW5jMToKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFCQkjIHJvdW5kIDAKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MZW5jMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MZW5jMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKy5hbGlnbiA0CisuTGVuYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisuYWxpZ24gNAorLkxlbmMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhjMgorCXJldAorCisvKgorICogX2Flc25pX2VuYzQ6CWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJcm91bmQgY291bnQKKyAqCVNUQVRFMToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogb3V0cHV0OgorICoJU1RBVEUxOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9lbmM0OgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUxCQkjIHJvdW5kIDAKKwlweG9yIEtFWSwgU1RBVEUyCisJcHhvciBLRVksIFNUQVRFMworCXB4b3IgS0VZLCBTVEFURTQKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MNGVuYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTDRlbmMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisjLmFsaWduIDQKKy5MNGVuYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKyMuYWxpZ24gNAorLkw0ZW5jMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFMQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGMyCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhlMgorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZWEKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGYyCisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2RlYyAoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCisgKi8KK0VOVFJZKGFlc25pX2RlYykKKwltb3YgNDgwKEtFWVApLCBLTEVOCQkjIGtleSBsZW5ndGgKKwlhZGQgJDI0MCwgS0VZUAorCW1vdnVwcyAoSU5QKSwgU1RBVEUJCSMgaW5wdXQKKwljYWxsIF9hZXNuaV9kZWMxCisJbW92dXBzIFNUQVRFLCAoT1VUUCkJCSNvdXRwdXQKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9kZWMxOgkJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlrZXkgbGVuZ3RoCisgKglTVEFURToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICogb3V0cHV0OgorICoJU1RBVEU6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2RlYzE6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURQkJIyByb3VuZCAwCisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTGRlYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTGRlYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisuYWxpZ24gNAorLkxkZWMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorLmFsaWduIDQKKy5MZGVjMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFCQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGMyCisJcmV0CisKKy8qCisgKiBfYWVzbmlfZGVjNDoJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlrZXkgbGVuZ3RoCisgKglTVEFURTE6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIG91dHB1dDoKKyAqCVNUQVRFMToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZGVjNDoKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFMQkJIyByb3VuZCAwCisJcHhvciBLRVksIFNUQVRFMgorCXB4b3IgS0VZLCBTVEFURTMKKwlweG9yIEtFWSwgU1RBVEU0CisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTDRkZWMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkw0ZGVjMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorLmFsaWduIDQKKy5MNGRlYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKy5hbGlnbiA0CisuTDRkZWMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUxCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4YzIKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGUyCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhlYQorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4ZjIKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZWNiX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuKQorICovCitFTlRSWShhZXNuaV9lY2JfZW5jKQorCXRlc3QgTEVOLCBMRU4JCSMgY2hlY2sgbGVuZ3RoCisJanogLkxlY2JfZW5jX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9lbmNfcmV0CisJY21wICQ2NCwgTEVOCisJamIgLkxlY2JfZW5jX2xvb3AxCisuYWxpZ24gNAorLkxlY2JfZW5jX2xvb3A0OgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJbW92dXBzIDB4MTAoSU5QKSwgU1RBVEUyCisJbW92dXBzIDB4MjAoSU5QKSwgU1RBVEUzCisJbW92dXBzIDB4MzAoSU5QKSwgU1RBVEU0CisJY2FsbCBfYWVzbmlfZW5jNAorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCW1vdnVwcyBTVEFURTIsIDB4MTAoT1VUUCkKKwltb3Z1cHMgU1RBVEUzLCAweDIwKE9VVFApCisJbW92dXBzIFNUQVRFNCwgMHgzMChPVVRQKQorCXN1YiAkNjQsIExFTgorCWFkZCAkNjQsIElOUAorCWFkZCAkNjQsIE9VVFAKKwljbXAgJDY0LCBMRU4KKwlqZ2UgLkxlY2JfZW5jX2xvb3A0CisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZW5jX3JldAorLmFsaWduIDQKKy5MZWNiX2VuY19sb29wMToKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCWNhbGwgX2Flc25pX2VuYzEKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MZWNiX2VuY19sb29wMQorLkxlY2JfZW5jX3JldDoKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZWNiX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuKTsKKyAqLworRU5UUlkoYWVzbmlfZWNiX2RlYykKKwl0ZXN0IExFTiwgTEVOCisJanogLkxlY2JfZGVjX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwlhZGQgJDI0MCwgS0VZUAorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2RlY19yZXQKKwljbXAgJDY0LCBMRU4KKwlqYiAuTGVjYl9kZWNfbG9vcDEKKy5hbGlnbiA0CisuTGVjYl9kZWNfbG9vcDQ6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwltb3Z1cHMgMHgxMChJTlApLCBTVEFURTIKKwltb3Z1cHMgMHgyMChJTlApLCBTVEFURTMKKwltb3Z1cHMgMHgzMChJTlApLCBTVEFURTQKKwljYWxsIF9hZXNuaV9kZWM0CisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJbW92dXBzIFNUQVRFMiwgMHgxMChPVVRQKQorCW1vdnVwcyBTVEFURTMsIDB4MjAoT1VUUCkKKwltb3Z1cHMgU1RBVEU0LCAweDMwKE9VVFApCisJc3ViICQ2NCwgTEVOCisJYWRkICQ2NCwgSU5QCisJYWRkICQ2NCwgT1VUUAorCWNtcCAkNjQsIExFTgorCWpnZSAuTGVjYl9kZWNfbG9vcDQKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9kZWNfcmV0CisuYWxpZ24gNAorLkxlY2JfZGVjX2xvb3AxOgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJY2FsbCBfYWVzbmlfZGVjMQorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxlY2JfZGVjX2xvb3AxCisuTGVjYl9kZWNfcmV0OgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9jYmNfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4sIHU4ICppdikKKyAqLworRU5UUlkoYWVzbmlfY2JjX2VuYykKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGNiY19lbmNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCW1vdnVwcyAoSVZQKSwgU1RBVEUJIyBsb2FkIGl2IGFzIGluaXRpYWwgc3RhdGUKKy5hbGlnbiA0CisuTGNiY19lbmNfbG9vcDoKKwltb3Z1cHMgKElOUCksIElOCSMgbG9hZCBpbnB1dAorCXB4b3IgSU4sIFNUQVRFCisJY2FsbCBfYWVzbmlfZW5jMQorCW1vdnVwcyBTVEFURSwgKE9VVFApCSMgc3RvcmUgb3V0cHV0CisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGNiY19lbmNfbG9vcAorCW1vdnVwcyBTVEFURSwgKElWUCkKKy5MY2JjX2VuY19yZXQ6CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2NiY19kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbiwgdTggKml2KQorICovCitFTlRSWShhZXNuaV9jYmNfZGVjKQorCWNtcCAkMTYsIExFTgorCWpiIC5MY2JjX2RlY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJYWRkICQyNDAsIEtFWVAKKwltb3Z1cHMgKElWUCksIElWCisJY21wICQ2NCwgTEVOCisJamIgLkxjYmNfZGVjX2xvb3AxCisuYWxpZ24gNAorLkxjYmNfZGVjX2xvb3A0OgorCW1vdnVwcyAoSU5QKSwgSU4xCisJbW92YXBzIElOMSwgU1RBVEUxCisJbW92dXBzIDB4MTAoSU5QKSwgSU4yCisJbW92YXBzIElOMiwgU1RBVEUyCisJbW92dXBzIDB4MjAoSU5QKSwgSU4zCisJbW92YXBzIElOMywgU1RBVEUzCisJbW92dXBzIDB4MzAoSU5QKSwgSU40CisJbW92YXBzIElONCwgU1RBVEU0CisJY2FsbCBfYWVzbmlfZGVjNAorCXB4b3IgSVYsIFNUQVRFMQorCXB4b3IgSU4xLCBTVEFURTIKKwlweG9yIElOMiwgU1RBVEUzCisJcHhvciBJTjMsIFNUQVRFNAorCW1vdmFwcyBJTjQsIElWCisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJbW92dXBzIFNUQVRFMiwgMHgxMChPVVRQKQorCW1vdnVwcyBTVEFURTMsIDB4MjAoT1VUUCkKKwltb3Z1cHMgU1RBVEU0LCAweDMwKE9VVFApCisJc3ViICQ2NCwgTEVOCisJYWRkICQ2NCwgSU5QCisJYWRkICQ2NCwgT1VUUAorCWNtcCAkNjQsIExFTgorCWpnZSAuTGNiY19kZWNfbG9vcDQKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGNiY19kZWNfcmV0CisuYWxpZ24gNAorLkxjYmNfZGVjX2xvb3AxOgorCW1vdnVwcyAoSU5QKSwgSU4KKwltb3ZhcHMgSU4sIFNUQVRFCisJY2FsbCBfYWVzbmlfZGVjMQorCXB4b3IgSVYsIFNUQVRFCisJbW92dXBzIFNUQVRFLCAoT1VUUCkKKwltb3ZhcHMgSU4sIElWCisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGNiY19kZWNfbG9vcDEKKwltb3Z1cHMgSVYsIChJVlApCisuTGNiY19kZWNfcmV0OgorCXJldApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhZjBhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKQEAgLTAsMCArMSw0NjEgQEAKKy8qCisgKiBTdXBwb3J0IGZvciBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zLiBUaGlzIGZpbGUgY29udGFpbnMgZ2x1ZQorICogY29kZSwgdGhlIHJlYWwgQUVTIGltcGxlbWVudGF0aW9uIGlzIGluIGludGVsLWFlc19hc20uUy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEludGVsIENvcnAuCisgKiAgICBBdXRob3I6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0ZC5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisjaW5jbHVkZSA8YXNtL2Flcy5oPgorCitzdHJ1Y3QgYXN5bmNfYWVzX2N0eCB7CisJc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtOworfTsKKworI2RlZmluZSBBRVNOSV9BTElHTgkxNgorI2RlZmluZSBBRVNfQkxPQ0tfTUFTSwkofihBRVNfQkxPQ0tfU0laRS0xKSkKKworYXNtbGlua2FnZSBpbnQgYWVzbmlfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmluX2tleSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZWNiX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZWNiX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfY2JjX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9jYmNfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOworCitzdGF0aWMgaW5saW5lIGludCBrZXJuZWxfZnB1X3VzaW5nKHZvaWQpCit7CisJaWYgKGluX2ludGVycnVwdCgpICYmICEocmVhZF9jcjAoKSAmIFg4Nl9DUjBfVFMpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmFlc19jdHgodm9pZCAqcmF3X2N0eCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyYXdfY3R4OworCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSBBRVNOSV9BTElHTjsKKworCWlmIChhbGlnbiA8PSBjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSkKKwkJYWxpZ24gPSAxOworCXJldHVybiAoc3RydWN0IGNyeXB0b19hZXNfY3R4ICopQUxJR04oYWRkciwgYWxpZ24pOworfQorCitzdGF0aWMgaW50IGFlc19zZXRfa2V5X2NvbW1vbihzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB2b2lkICpyYXdfY3R4LAorCQkJICAgICAgY29uc3QgdTggKmluX2tleSwgdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KHJhd19jdHgpOworCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CisJaW50IGVycjsKKworCWlmIChrZXlfbGVuICE9IEFFU19LRVlTSVpFXzEyOCAmJiBrZXlfbGVuICE9IEFFU19LRVlTSVpFXzE5MiAmJgorCSAgICBrZXlfbGVuICE9IEFFU19LRVlTSVpFXzI1NikgeworCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJCWVyciA9IGNyeXB0b19hZXNfZXhwYW5kX2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CisJZWxzZSB7CisJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwkJZXJyID0gYWVzbmlfc2V0X2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhZXNfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LAorCQkgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJcmV0dXJuIGFlc19zZXRfa2V5X2NvbW1vbih0Zm0sIGNyeXB0b190Zm1fY3R4KHRmbSksIGluX2tleSwga2V5X2xlbik7Cit9CisKK3N0YXRpYyB2b2lkIGFlc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwkJY3J5cHRvX2Flc19lbmNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKKwllbHNlIHsKKwkJa2VybmVsX2ZwdV9iZWdpbigpOworCQlhZXNuaV9lbmMoY3R4LCBkc3QsIHNyYyk7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJCWNyeXB0b19hZXNfZGVjcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CisJZWxzZSB7CisJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwkJYWVzbmlfZGVjKGN0eCwgZHN0LCBzcmMpOworCQlrZXJuZWxfZnB1X2VuZCgpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc25pX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gImFlcyIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJhZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gMzAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCkrQUVTTklfQUxJR04tMSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChhZXNuaV9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQk9IHsKKwkJLmNpcGhlcgk9IHsKKwkJCS5jaWFfbWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLmNpYV9tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuY2lhX3NldGtleQkJPSBhZXNfc2V0X2tleSwKKwkJCS5jaWFfZW5jcnlwdAkJPSBhZXNfZW5jcnlwdCwKKwkJCS5jaWFfZGVjcnlwdAkJPSBhZXNfZGVjcnlwdAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBlY2JfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfZWNiX2VuYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0spOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBlY2JfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfZWNiX2RlYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0spOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGJsa19lY2JfYWxnID0geworCS5jcmFfbmFtZQkJPSAiX19lY2ItYWVzLWFlc25pIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gIl9fZHJpdmVyLWVjYi1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2Flc19jdHgpK0FFU05JX0FMSUdOLTEsCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYmxrX2VjYl9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdSA9IHsKKwkJLmJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkJPSBhZXNfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gZWNiX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGVjYl9kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IGNiY19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9jYmNfZW5jKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSywgd2Fsay5pdik7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNiY19kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9jYmNfZGVjKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSywgd2Fsay5pdik7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYmxrX2NiY19hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJfX2NiYy1hZXMtYWVzbmkiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCkrQUVTTklfQUxJR04tMSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChibGtfY2JjX2FsZy5jcmFfbGlzdCksCisJLmNyYV91ID0geworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFlc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBjYmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gY2JjX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgYWJsa19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorCQkJdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOworCisJcmV0dXJuIGNyeXB0b19hYmxrY2lwaGVyX3NldGtleSgmY3R4LT5jcnlwdGRfdGZtLT5iYXNlLCBrZXksIGtleV9sZW4pOworfQorCitzdGF0aWMgaW50IGFibGtfZW5jcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKSB7CisJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQorCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOworCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShjcnlwdGRfcmVxLCAmY3R4LT5jcnlwdGRfdGZtLT5iYXNlKTsKKwkJcmV0dXJuIGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQoY3J5cHRkX3JlcSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CisJCWRlc2MudGZtID0gY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoY3R4LT5jcnlwdGRfdGZtKTsKKwkJZGVzYy5pbmZvID0gcmVxLT5pbmZvOworCQlkZXNjLmZsYWdzID0gMDsKKwkJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfY3J0KGRlc2MudGZtKS0+ZW5jcnlwdCgKKwkJCSZkZXNjLCByZXEtPmRzdCwgcmVxLT5zcmMsIHJlcS0+bmJ5dGVzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWJsa19kZWNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpIHsKKwkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CisJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CisJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CisJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKGNyeXB0ZF9yZXEsICZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UpOworCQlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChjcnlwdGRfcmVxKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKKwkJZGVzYy50Zm0gPSBjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChjdHgtPmNyeXB0ZF90Zm0pOworCQlkZXNjLmluZm8gPSByZXEtPmluZm87CisJCWRlc2MuZmxhZ3MgPSAwOworCQlyZXR1cm4gY3J5cHRvX2Jsa2NpcGhlcl9jcnQoZGVzYy50Zm0pLT5kZWNyeXB0KAorCQkJJmRlc2MsIHJlcS0+ZHN0LCByZXEtPnNyYywgcmVxLT5uYnl0ZXMpOworCX0KK30KKworc3RhdGljIHZvaWQgYWJsa19leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljcnlwdGRfZnJlZV9hYmxrY2lwaGVyKGN0eC0+Y3J5cHRkX3RmbSk7Cit9CisKK3N0YXRpYyB2b2lkIGFibGtfaW5pdF9jb21tb24oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCSAgICAgc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtKQoreworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3R4LT5jcnlwdGRfdGZtID0gY3J5cHRkX3RmbTsKKwl0Zm0tPmNydF9hYmxrY2lwaGVyLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCkgKworCQljcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKCZjcnlwdGRfdGZtLT5iYXNlKTsKK30KKworc3RhdGljIGludCBhYmxrX2VjYl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtOworCisJY3J5cHRkX3RmbSA9IGNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKCJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwgMCwgMCk7CisJaWYgKElTX0VSUihjcnlwdGRfdGZtKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J5cHRkX3RmbSk7CisJYWJsa19pbml0X2NvbW1vbih0Zm0sIGNyeXB0ZF90Zm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWJsa19lY2JfYWxnID0geworCS5jcmFfbmFtZQkJPSAiZWNiKGFlcykiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiZWNiLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSA0MDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUnxDUllQVE9fQUxHX0FTWU5DLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGFzeW5jX2Flc19jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChhYmxrX2VjYl9hbGcuY3JhX2xpc3QpLAorCS5jcmFfaW5pdAkJPSBhYmxrX2VjYl9pbml0LAorCS5jcmFfZXhpdAkJPSBhYmxrX2V4aXQsCisJLmNyYV91ID0geworCQkuYWJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkJPSBhYmxrX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGFibGtfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gYWJsa19kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IGFibGtfY2JjX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm07CisKKwljcnlwdGRfdGZtID0gY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIoIl9fZHJpdmVyLWNiYy1hZXMtYWVzbmkiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNyeXB0ZF90Zm0pKQorCQlyZXR1cm4gUFRSX0VSUihjcnlwdGRfdGZtKTsKKwlhYmxrX2luaXRfY29tbW9uKHRmbSwgY3J5cHRkX3RmbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhYmxrX2NiY19hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJjYmMoYWVzKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJjYmMtYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDQwMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSfENSWVBUT19BTEdfQVNZTkMsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgYXN5bmNfYWVzX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGFibGtfY2JjX2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9IGFibGtfY2JjX2luaXQsCisJLmNyYV9leGl0CQk9IGFibGtfZXhpdCwKKwkuY3JhX3UgPSB7CisJCS5hYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuaXZzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCQkJLnNldGtleQkJPSBhYmxrX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGFibGtfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gYWJsa19kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZXNuaV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWlmICghY3B1X2hhc19hZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgZGV0ZWN0ZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWVzbmlfYWxnKSkpCisJCWdvdG8gYWVzX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmJsa19lY2JfYWxnKSkpCisJCWdvdG8gYmxrX2VjYl9lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZibGtfY2JjX2FsZykpKQorCQlnb3RvIGJsa19jYmNfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWJsa19lY2JfYWxnKSkpCisJCWdvdG8gYWJsa19lY2JfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWJsa19jYmNfYWxnKSkpCisJCWdvdG8gYWJsa19jYmNfZXJyOworCisJcmV0dXJuIGVycjsKKworYWJsa19jYmNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19lY2JfYWxnKTsKK2FibGtfZWNiX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19jYmNfYWxnKTsKK2Jsa19jYmNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpOworYmxrX2VjYl9lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpOworYWVzX2VycjoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWVzbmlfZXhpdCh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19jYmNfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY2JjX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfZWNiX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpOworfQorCittb2R1bGVfaW5pdChhZXNuaV9pbml0KTsKK21vZHVsZV9leGl0KGFlc25pX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlJpam5kYWVsIChBRVMpIENpcGhlciBBbGdvcml0aG0sIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgb3B0aW1pemVkIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImFlcyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU0NWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWVzLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBBU01fWDg2X0FFU19ICisjZGVmaW5lIEFTTV9YODZfQUVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKwordm9pZCBjcnlwdG9fYWVzX2VuY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LAorCQkJICAgIGNvbnN0IHU4ICpzcmMpOwordm9pZCBjcnlwdG9fYWVzX2RlY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LAorCQkJICAgIGNvbnN0IHU4ICpzcmMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggNzMwMWU2MC4uMGJlYmEwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMjEzLDYgKzIxMyw3IEBACiAjZGVmaW5lIGNwdV9oYXNfeG1tCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NKQogI2RlZmluZSBjcHVfaGFzX3htbTIJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0yKQogI2RlZmluZSBjcHVfaGFzX3htbTMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0zKQorI2RlZmluZSBjcHVfaGFzX2FlcwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FFUykKICNkZWZpbmUgY3B1X2hhc19odAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hUKQogI2RlZmluZSBjcHVfaGFzX21wCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVApCiAjZGVmaW5lIGNwdV9oYXNfbngJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OWCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggODg2Yzk0MC4uZGMzZjZjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgX19LVk1fSEFWRV9ERVZJQ0VfQVNTSUdOTUVOVAogI2RlZmluZSBfX0tWTV9IQVZFX01TSQogI2RlZmluZSBfX0tWTV9IQVZFX1VTRVJfTk1JCisjZGVmaW5lIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKIAogLyogQXJjaGl0ZWN0dXJhbCBpbnRlcnJ1cHQgbGluZSBjb3VudC4gKi8KICNkZWZpbmUgS1ZNX05SX0lOVEVSUlVQVFMgMjU2CkBAIC0yMTIsNyArMjEzLDMwIEBACiAJX19zNjQgY291bnRfbG9hZF90aW1lOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworCV9fdTMyIGV4Y2VwdGlvbjsKKwlfX3UzMiBwYWQ7CisJX191NjQgcGM7CisJX191NjQgZHI2OworCV9fdTY0IGRyNzsKK307CisKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1VTRV9TV19CUAkJMHgwMDAxMDAwMAorI2RlZmluZSBLVk1fR1VFU1REQkdfVVNFX0hXX0JQCQkweDAwMDIwMDAwCisjZGVmaW5lIEtWTV9HVUVTVERCR19JTkpFQ1RfREIJCTB4MDAwNDAwMDAKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX0lOSkVDVF9CUAkJMHgwMDA4MDAwMAorCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKKwlfX3U2NCBkZWJ1Z3JlZ1s4XTsKK307CisKIHN0cnVjdCBrdm1fcGl0X3N0YXRlIHsKIAlzdHJ1Y3Qga3ZtX3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOwogfTsKKworc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sIHsKKwlfX3U4IHBpdF9yZWluamVjdDsKKwlfX3U4IHJlc2VydmVkWzMxXTsKK307CiAjZW5kaWYgLyogX0FTTV9YODZfS1ZNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDczMDg0M2QuLmYwZmFmNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wdmNsb2NrLWFiaS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CiAKICNkZWZpbmUgS1ZNX01BWF9WQ1BVUyAxNgogI2RlZmluZSBLVk1fTUVNT1JZX1NMT1RTIDMyCkBAIC0xMzQsMTEgKzEzNSwxOCBAQAogCiAjZGVmaW5lIEtWTV9OUl9NRU1fT0JKUyA0MAogCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLQlpbnQgZW5hYmxlZDsKLQl1bnNpZ25lZCBsb25nIGJwWzRdOwotCWludCBzaW5nbGVzdGVwOwotfTsKKyNkZWZpbmUgS1ZNX05SX0RCX1JFR1MJNAorCisjZGVmaW5lIERSNl9CRAkJKDEgPDwgMTMpCisjZGVmaW5lIERSNl9CUwkJKDEgPDwgMTQpCisjZGVmaW5lIERSNl9GSVhFRF8xCTB4ZmZmZjBmZjAKKyNkZWZpbmUgRFI2X1ZPTEFUSUxFCTB4MDAwMGUwMGYKKworI2RlZmluZSBEUjdfQlBfRU5fTUFTSwkweDAwMDAwMGZmCisjZGVmaW5lIERSN19HRQkJKDEgPDwgOSkKKyNkZWZpbmUgRFI3X0dECQkoMSA8PCAxMykKKyNkZWZpbmUgRFI3X0ZJWEVEXzEJMHgwMDAwMDQwMAorI2RlZmluZSBEUjdfVk9MQVRJTEUJMHhmZmZmMjNmZgogCiAvKgogICogV2UgZG9uJ3Qgd2FudCBhbGxvY2F0aW9uIGZhaWx1cmVzIHdpdGhpbiB0aGUgbW11IGNvZGUsIHNvIHdlIHByZWFsbG9jYXRlCkBAIC0xNjIsNyArMTcwLDggQEAKICAqICAgYml0cyAwOjMgLSB0b3RhbCBndWVzdCBwYWdpbmcgbGV2ZWxzICgyLTQsIG9yIHplcm8gZm9yIHJlYWwgbW9kZSkKICAqICAgYml0cyA0OjcgLSBwYWdlIHRhYmxlIGxldmVsIGZvciB0aGlzIHNoYWRvdyAoMS00KQogICogICBiaXRzIDg6OSAtIHBhZ2UgdGFibGUgcXVhZHJhbnQgZm9yIDItbGV2ZWwgZ3Vlc3RzCi0gKiAgIGJpdCAgIDE2IC0gIm1ldGFwaHlzaWNhbCIgLSBnZm4gaXMgbm90IGEgcmVhbCBwYWdlIChodWdlIHBhZ2UvcmVhbCBtb2RlKQorICogICBiaXQgICAxNiAtIGRpcmVjdCBtYXBwaW5nIG9mIHZpcnR1YWwgdG8gcGh5c2ljYWwgbWFwcGluZyBhdCBnZm4KKyAqICAgICAgICAgICAgICB1c2VkIGZvciByZWFsIG1vZGUgYW5kIHR3by1kaW1lbnNpb25hbCBwYWdpbmcKICAqICAgYml0cyAxNzoxOSAtIGNvbW1vbiBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGFsbCBwdGVzIGluIHRoaXMgc2hhZG93IHBhZ2UKICAqLwogdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgewpAQCAtMTcyLDkgKzE4MSwxMCBAQAogCQl1bnNpZ25lZCBsZXZlbDo0OwogCQl1bnNpZ25lZCBxdWFkcmFudDoyOwogCQl1bnNpZ25lZCBwYWRfZm9yX25pY2VfaGV4X291dHB1dDo2OwotCQl1bnNpZ25lZCBtZXRhcGh5c2ljYWw6MTsKKwkJdW5zaWduZWQgZGlyZWN0OjE7CiAJCXVuc2lnbmVkIGFjY2VzczozOwogCQl1bnNpZ25lZCBpbnZhbGlkOjE7CisJCXVuc2lnbmVkIGNyNF9wZ2U6MTsKIAl9OwogfTsKIApAQCAtMjE4LDYgKzIyOCwxOCBAQAogCWNoYXIgYnVmWzUxMl0gX19hbGlnbmVkKHNpemVvZihsb25nKSk7CiB9OwogCitzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCWludCBjdXJfY291bnQ7CisJZ3ZhX3QgZ3Vlc3RfZ3ZhOworCWludCBpbjsKKwlpbnQgcG9ydDsKKwlpbnQgc2l6ZTsKKwlpbnQgc3RyaW5nOworCWludCBkb3duOworCWludCByZXA7Cit9OworCiAvKgogICogeDg2IHN1cHBvcnRzIDMgcGFnaW5nIG1vZGVzICg0LWxldmVsIDY0LWJpdCwgMy1sZXZlbCA2NC1iaXQsIGFuZCAyLWxldmVsCiAgKiAzMi1iaXQpLiAgVGhlIGt2bV9tbXUgc3RydWN0dXJlIGFic3RyYWN0cyB0aGUgZGV0YWlscyBvZiB0aGUgY3VycmVudCBtbXUKQEAgLTIzNiw2ICsyNTgsNyBAQAogCWhwYV90IHJvb3RfaHBhOwogCWludCByb290X2xldmVsOwogCWludCBzaGFkb3dfcm9vdF9sZXZlbDsKKwl1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSBiYXNlX3JvbGU7CiAKIAl1NjQgKnBhZV9yb290OwogfTsKQEAgLTI1OCw2ICsyODEsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3IzOwogCXVuc2lnbmVkIGxvbmcgY3I0OwogCXVuc2lnbmVkIGxvbmcgY3I4OworCXUzMiBoZmxhZ3M7CiAJdTY0IHBkcHRyc1s0XTsgLyogcGFlICovCiAJdTY0IHNoYWRvd19lZmVyOwogCXU2NCBhcGljX2Jhc2U7CkBAIC0zMzgsNiArMzYyLDE1IEBACiAKIAlzdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGU7CiAJdTMyIHBhdDsKKworCWludCBzd2l0Y2hfZGJfcmVnczsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZGJbS1ZNX05SX0RCX1JFR1NdOworCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjY7CisJdW5zaWduZWQgbG9uZyBob3N0X2RyNzsKKwl1bnNpZ25lZCBsb25nIGRiW0tWTV9OUl9EQl9SRUdTXTsKKwl1bnNpZ25lZCBsb25nIGRyNjsKKwl1bnNpZ25lZCBsb25nIGRyNzsKKwl1bnNpZ25lZCBsb25nIGVmZl9kYltLVk1fTlJfREJfUkVHU107CiB9OwogCiBzdHJ1Y3Qga3ZtX21lbV9hbGlhcyB7CkBAIC0zNzgsNiArNDExLDcgQEAKIAogCXVuc2lnbmVkIGxvbmcgaXJxX3NvdXJjZXNfYml0bWFwOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRlc1tLVk1fSU9BUElDX05VTV9QSU5TXTsKKwl1NjQgdm1faW5pdF90c2M7CiB9OwogCiBzdHJ1Y3Qga3ZtX3ZtX3N0YXQgewpAQCAtNDQ2LDggKzQ4MCw3IEBACiAJdm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJaW50ICgqc2V0X2d1ZXN0X2RlYnVnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKTsKLQl2b2lkICgqZ3Vlc3RfZGVidWdfcHJlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCQkJICAgICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyk7CiAJaW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKTsKIAlpbnQgKCpzZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCBkYXRhKTsKIAl1NjQgKCpnZXRfc2VnbWVudF9iYXNlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpOwpAQCAtNTgzLDE2ICs2MTYsMTIgQEAKIHZvaWQga3ZtX2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjIsCiAJCQkgICB1MzIgZXJyb3JfY29kZSk7CiAKLXZvaWQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKK2ludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogCiB2b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi1pbnQgZW11bGF0b3JfcmVhZF9zdGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICB2b2lkICp2YWwsCi0JCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgY29uc3Qgdm9pZCAqdmFsLAogCQkJICAgIHVuc2lnbmVkIGludCBieXRlcywKQEAgLTczNyw2ICs3NjYsMTAgQEAKIAlUQVNLX1NXSVRDSF9HQVRFID0gMywKIH07CiAKKyNkZWZpbmUgSEZfR0lGX01BU0sJCSgxIDw8IDApCisjZGVmaW5lIEhGX0hJRl9NQVNLCQkoMSA8PCAxKQorI2RlZmluZSBIRl9WSU5UUl9NQVNLCQkoMSA8PCAyKQorCiAvKgogICogSGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9uIGluc3RydWN0aW9ucyBtYXkgZmF1bHQgaWYgYQogICogcmVib290IHR1cm5zIG9mZiB2aXJ0dWFsaXphdGlvbiB3aGlsZSBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDM1OGFjYzUuLmY0ZTUwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0xOCwxMSArMTgsMTUgQEAKICNkZWZpbmUgX0VGRVJfTE1FCQk4ICAvKiBMb25nIG1vZGUgZW5hYmxlICovCiAjZGVmaW5lIF9FRkVSX0xNQQkJMTAgLyogTG9uZyBtb2RlIGFjdGl2ZSAocmVhZC1vbmx5KSAqLwogI2RlZmluZSBfRUZFUl9OWAkJMTEgLyogTm8gZXhlY3V0ZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VGRVJfU1ZNRQkJMTIgLyogRW5hYmxlIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIF9FRkVSX0ZGWFNSCQkxNCAvKiBFbmFibGUgRmFzdCBGWFNBVkUvRlhSU1RPUiAqLwogCiAjZGVmaW5lIEVGRVJfU0NFCQkoMTw8X0VGRVJfU0NFKQogI2RlZmluZSBFRkVSX0xNRQkJKDE8PF9FRkVSX0xNRSkKICNkZWZpbmUgRUZFUl9MTUEJCSgxPDxfRUZFUl9MTUEpCiAjZGVmaW5lIEVGRVJfTlgJCQkoMTw8X0VGRVJfTlgpCisjZGVmaW5lIEVGRVJfU1ZNRQkJKDE8PF9FRkVSX1NWTUUpCisjZGVmaW5lIEVGRVJfRkZYU1IJCSgxPDxfRUZFUl9GRlhTUikKIAogLyogSW50ZWwgTVNScy4gU29tZSBhbHNvIGF2YWlsYWJsZSBvbiBvdGhlciBDUFVzICovCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIwCQkweDAwMDAwMGMxCkBAIC0zNjAsNCArMzY0LDkgQEAKICNkZWZpbmUgTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMiAgICAweDAwMDAwNDhiCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FUFRfVlBJRF9DQVAgICAgICAgMHgwMDAwMDQ4YwogCisvKiBBTUQtViBNU1JzICovCisKKyNkZWZpbmUgTVNSX1ZNX0NSICAgICAgICAgICAgICAgICAgICAgICAweGMwMDEwMTE0CisjZGVmaW5lIE1TUl9WTV9IU0FWRV9QQSAgICAgICAgICAgICAgICAgMHhjMDAxMDExNworCiAjZW5kaWYgLyogX0FTTV9YODZfTVNSX0lOREVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCmluZGV4IGE4ODk0NjQuLjNhYzUwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaApAQCAtNiw4ICs2LDQgQEAKICNkZWZpbmUgQVJDSF9HRVRfRlMgMHgxMDAzCiAjZGVmaW5lIEFSQ0hfR0VUX0dTIDB4MTAwNAogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotZXh0ZXJuIGxvbmcgc3lzX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBlYmU4NThjLi5jMjMwOGY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTEsMjcgKzEsMTIgQEAKICNpZm5kZWYgX0FTTV9YODZfU0VUVVBfSAogI2RlZmluZSBfQVNNX1g4Nl9TRVRVUF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjA0OAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0vKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwotdm9pZCB2c21wX2luaXQodm9pZCk7Ci0KLQotdm9pZCBzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2sodm9pZCk7Ci0KLQotI2lmZGVmIENPTkZJR19YODZfVklTV1MKLWV4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKLWV4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLWV4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7Ci1leHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKIC8qCiAgKiBBbnkgc2V0dXAgcXVpcmtzIHRvIGJlIHBlcmZvcm1lZD8KICAqLwpAQCAtNDgsMTYgKzMzLDggQEAKIAlpbnQgKCp1cGRhdGVfZ2VuYXBpYykodm9pZCk7CiB9OwogCi1leHRlcm4gc3RydWN0IHg4Nl9xdWlya3MgKng4Nl9xdWlya3M7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF92aWRlb19tb2RlOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2RlZmluZSBwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2lmZGVmIF9faTM4Nl9fCiAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KQEAgLTc4LDYgKzU1LDI4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KIAorLyogSW50ZXJydXB0IGNvbnRyb2wgZm9yIHZTTVBvd2VyZWQgeDg2XzY0IHN5c3RlbXMgKi8KK3ZvaWQgdnNtcF9pbml0KHZvaWQpOworCit2b2lkIHNldHVwX2Jpb3NfY29ycnVwdGlvbl9jaGVjayh2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfVklTV1MKK2V4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKK2V4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKK2V4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7CitleHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKK2V4dGVybiBzdHJ1Y3QgeDg2X3F1aXJrcyAqeDg2X3F1aXJrczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX3ZpZGVvX21vZGU7CisKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCisjZGVmaW5lIHBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjaWZuZGVmIF9TRVRVUAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA4YWI5Y2M4Li5jYThiZjJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fWDg2X1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCmluZGV4IDFiOGFmYTcuLjgyYWRhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCkBAIC0xNzQsMTAgKzE3NCw2IEBACiAjZGVmaW5lIFNWTV9DUFVJRF9GRUFUVVJFX1NISUZUIDIKICNkZWZpbmUgU1ZNX0NQVUlEX0ZVTkMgMHg4MDAwMDAwYQogCi0jZGVmaW5lIE1TUl9FRkVSX1NWTUVfTUFTSyAoMVVMTCA8PCAxMikKLSNkZWZpbmUgTVNSX1ZNX0NSICAgICAgIDB4YzAwMTAxMTQKLSNkZWZpbmUgTVNSX1ZNX0hTQVZFX1BBIDB4YzAwMTAxMTdVTEwKLQogI2RlZmluZSBTVk1fVk1fQ1JfU1ZNX0RJU0FCTEUgNAogCiAjZGVmaW5lIFNWTV9TRUxFQ1RPUl9TX1NISUZUIDQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCmluZGV4IGMwYjBiZGEuLmUyNmQzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApAQCAtNzQsNiArNzQsNyBAQAogYXNtbGlua2FnZSBsb25nIHN5c19leGVjdmUoY2hhciBfX3VzZXIgKiwgY2hhciBfX3VzZXIgKiBfX3VzZXIgKiwKIAkJCSAgIGNoYXIgX191c2VyICogX191c2VyICosCiAJCQkgICBzdHJ1Y3QgcHRfcmVncyAqKTsKK2xvbmcgc3lzX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKIAogLyoga2VybmVsL2lvcG9ydC5jICovCiBhc21saW5rYWdlIGxvbmcgc3lzX2lvcGwodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCmluZGV4IDJiYjZhODMuLjRmNWMyNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaApAQCAtMTEsOCArMTEsOCBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIGludCB0aW1lcl9hY2s7CisjZW5kaWYKIGV4dGVybiBpbnQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKIGV4dGVybiBpbnQgbm9fdGltZXJfY2hlY2s7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaAppbmRleCA1OTM2MzYyLi5lMGY5YWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogCXdybXNybChNU1JfVk1fSFNBVkVfUEEsIDApOwogCXJkbXNybChNU1JfRUZFUiwgZWZlcik7Ci0Jd3Jtc3JsKE1TUl9FRkVSLCBlZmVyICYgfk1TUl9FRkVSX1NWTUVfTUFTSyk7CisJd3Jtc3JsKE1TUl9FRkVSLCBlZmVyICYgfkVGRVJfU1ZNRSk7CiB9CiAKIC8qKiBNYWtlcyBzdXJlIFNWTSBpcyBkaXNhYmxlZCwgaWYgaXQgaXMgc3VwcG9ydGVkIG9uIHRoZSBDUFUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKaW5kZXggZDAyMzhlNi4uNDk4Zjk0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKQEAgLTI3MCw4ICsyNzAsOSBAQAogCiAjZGVmaW5lIElOVFJfVFlQRV9FWFRfSU5UUiAgICAgICAgICAgICAgKDAgPDwgOCkgLyogZXh0ZXJuYWwgaW50ZXJydXB0ICovCiAjZGVmaW5lIElOVFJfVFlQRV9OTUlfSU5UUgkJKDIgPDwgOCkgLyogTk1JICovCi0jZGVmaW5lIElOVFJfVFlQRV9FWENFUFRJT04gICAgICAgICAgICAgKDMgPDwgOCkgLyogcHJvY2Vzc29yIGV4Y2VwdGlvbiAqLworI2RlZmluZSBJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04JKDMgPDwgOCkgLyogcHJvY2Vzc29yIGV4Y2VwdGlvbiAqLwogI2RlZmluZSBJTlRSX1RZUEVfU09GVF9JTlRSICAgICAgICAgICAgICg0IDw8IDgpIC8qIHNvZnR3YXJlIGludGVycnVwdCAqLworI2RlZmluZSBJTlRSX1RZUEVfU09GVF9FWENFUFRJT04JKDYgPDwgOCkgLyogc29mdHdhcmUgZXhjZXB0aW9uICovCiAKIC8qIEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyBmbGFncy4gKi8KICNkZWZpbmUgR1VFU1RfSU5UUl9TVEFURV9TVEkJCTB4MDAwMDAwMDEKQEAgLTMxMSw3ICszMTIsNyBAQAogI2RlZmluZSBERUJVR19SRUdfQUNDRVNTX1RZUEUgICAgICAgICAgIDB4MTAgICAgLyogNCwgZGlyZWN0aW9uIG9mIGFjY2VzcyAqLwogI2RlZmluZSBUWVBFX01PVl9UT19EUiAgICAgICAgICAgICAgICAgICgwIDw8IDQpCiAjZGVmaW5lIFRZUEVfTU9WX0ZST01fRFIgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgREVCVUdfUkVHX0FDQ0VTU19SRUcgICAgICAgICAgICAweGYwMCAgIC8qIDExOjgsIGdlbmVyYWwgcHVycG9zZSByZWcuICovCisjZGVmaW5lIERFQlVHX1JFR19BQ0NFU1NfUkVHKGVxKSAgICAgICAgKCgoZXEpID4+IDgpICYgMHhmKSAvKiAxMTo4LCBnZW5lcmFsIHB1cnBvc2UgcmVnLiAqLwogCiAKIC8qIHNlZ21lbnQgQVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKaW5kZXggNjU3OTJjMi4uNTJjODM5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKQEAgLTg3LDMwICs4NywxNSBAQAogY29uZmlnIFg4Nl9QT1dFUk5PV19LOAogCXRyaXN0YXRlICJBTUQgT3B0ZXJvbi9BdGhsb242NCBQb3dlck5vdyEiCiAJc2VsZWN0IENQVV9GUkVRX1RBQkxFCisJZGVwZW5kcyBvbiBBQ1BJICYmIEFDUElfUFJPQ0VTU09SCiAJaGVscAotCSAgVGhpcyBhZGRzIHRoZSBDUFVGcmVxIGRyaXZlciBmb3IgbW9iaWxlIEFNRCBPcHRlcm9uL0F0aGxvbjY0IHByb2Nlc3NvcnMuCisJICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBLOC9LMTAgT3B0ZXJvbi9BdGhsb242NCBwcm9jZXNzb3JzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3dlcm5vdy1rOC4KIAogCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXEvPi4KIAotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCi1jb25maWcgWDg2X1BPV0VSTk9XX0s4X0FDUEkKLQlib29sCi0JcHJvbXB0ICJBQ1BJIFN1cHBvcnQiIGlmIFg4Nl8zMgotCWRlcGVuZHMgb24gQUNQSSAmJiBYODZfUE9XRVJOT1dfSzggJiYgQUNQSV9QUk9DRVNTT1IKLQlkZXBlbmRzIG9uICEoWDg2X1BPV0VSTk9XX0s4ID0geSAmJiBBQ1BJX1BST0NFU1NPUiA9IG0pCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhpcyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEs4cyBQcm9jZXNzb3IgUGVyZm9ybWFuY2UgU3RhdGVzIHZpYSBBQ1BJLgotCSAgVGhpcyBkcml2ZXIgaXMgcHJvYmFibHkgcmVxdWlyZWQgZm9yIENQVUZyZXEgdG8gd29yayB3aXRoIG11bHRpLXNvY2tldCBhbmQKLQkgIFNNUCBzeXN0ZW1zLiAgSXQgaXMgbm90IHJlcXVpcmVkIG9uIGF0IGxlYXN0IHNvbWUgc2luZ2xlLXNvY2tldCB5ZXQKLQkgIG11bHRpLWNvcmUgc3lzdGVtcywgZXZlbiBpZiBTTVAgaXMgZW5hYmxlZC4KLQotCSAgSXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLgotCiBjb25maWcgWDg2X0dYX1NVU1BNT0QKIAl0cmlzdGF0ZSAiQ3lyaXggTWVkaWFHWC9OYXRTZW1pIEdlb2RlIFN1c3BlbmQgTW9kdWxhdGlvbiIKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQppbmRleCA1NjBmNzc2Li41MDkyOTZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCkBAIC0xLDYgKzEsMTEgQEAKKyMgTGluayBvcmRlciBtYXR0ZXJzLiBLOCBpcyBwcmVmZXJyZWQgdG8gQUNQSSBiZWNhdXNlIG9mIGZpcm13YXJlIGJ1Z3MgaW4gZWFybHkKKyMgSzggc3lzdGVtcy4gQUNQSSBpcyBwcmVmZXJyZWQgdG8gYWxsIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuCisjIHNwZWVkc3RlcC0qIGlzIHByZWZlcnJlZCBvdmVyIHA0LWNsb2NrbW9kLgorCitvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s4KQkJKz0gcG93ZXJub3ctazgubworb2JqLSQoQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVEpCQkrPSBhY3BpLWNwdWZyZXEubwogb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNikJCSs9IHBvd2Vybm93LWs2Lm8KIG9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzcpCQkrPSBwb3dlcm5vdy1rNy5vCi1vYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s4KQkJKz0gcG93ZXJub3ctazgubwogb2JqLSQoQ09ORklHX1g4Nl9MT05HSEFVTCkJCSs9IGxvbmdoYXVsLm8KIG9iai0kKENPTkZJR19YODZfRV9QT1dFUlNBVkVSKQkJKz0gZV9wb3dlcnNhdmVyLm8KIG9iai0kKENPTkZJR19FTEFOX0NQVUZSRVEpCQkrPSBlbGFuZnJlcS5vCkBAIC0xMCw3ICsxNSw2IEBACiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9JQ0gpCQkrPSBzcGVlZHN0ZXAtaWNoLm8KIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0xJQikJCSs9IHNwZWVkc3RlcC1saWIubwogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfU01JKQkJKz0gc3BlZWRzdGVwLXNtaS5vCi1vYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTykJKz0gc3BlZWRzdGVwLWNlbnRyaW5vLm8KIG9iai0kKENPTkZJR19YODZfUDRfQ0xPQ0tNT0QpCQkrPSBwNC1jbG9ja21vZC5vCiBvYmotJChDT05GSUdfWDg2X0NQVUZSRVFfTkZPUkNFMikJKz0gY3B1ZnJlcS1uZm9yY2UyLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCA0YjFjMzE5Li4zYmFiZTFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFjcGktY3B1ZnJlcS5jIC0gQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyICgkUmV2aXNpb246IDEuNCAkKQorICogYWNwaS1jcHVmcmVxLmMgLSBBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KQEAgLTM2LDE2ICszNiwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAiYWNwaS1jcHVmcmVxIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImFjcGktY3B1ZnJlcSIsIG1zZykKIAogTU9EVUxFX0FVVEhPUigiUGF1bCBEaWVmZW5iYXVnaCwgRG9taW5payBCcm9kb3dza2kiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyIik7CkBAIC05NSw3ICs5Nyw3IEBACiAKIAlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwogCi0JZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CiAJCWlmICh2YWx1ZSA9PSBwZXJmLT5zdGF0ZXNbaV0uc3RhdHVzKQogCQkJcmV0dXJuIGRhdGEtPmZyZXFfdGFibGVbaV0uZnJlcXVlbmN5OwogCX0KQEAgLTExMCw3ICsxMTIsNyBAQAogCW1zciAmPSBJTlRFTF9NU1JfUkFOR0U7CiAJcGVyZiA9IGRhdGEtPmFjcGlfZGF0YTsKIAotCWZvciAoaT0wOyBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CisJZm9yIChpID0gMDsgZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgewogCQlpZiAobXNyID09IHBlcmYtPnN0YXRlc1tkYXRhLT5mcmVxX3RhYmxlW2ldLmluZGV4XS5zdGF0dXMpCiAJCQlyZXR1cm4gZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3k7CiAJfQpAQCAtMTM4LDE1ICsxNDAsMTMgQEAKIAl1OCBiaXRfd2lkdGg7CiB9OwogCi10eXBlZGVmIHVuaW9uIHsKLQlzdHJ1Y3QgbXNyX2FkZHIgbXNyOwotCXN0cnVjdCBpb19hZGRyIGlvOwotfSBkcnZfYWRkcl91bmlvbjsKLQogc3RydWN0IGRydl9jbWQgewogCXVuc2lnbmVkIGludCB0eXBlOwogCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrOwotCWRydl9hZGRyX3VuaW9uIGFkZHI7CisJdW5pb24geworCQlzdHJ1Y3QgbXNyX2FkZHIgbXNyOworCQlzdHJ1Y3QgaW9fYWRkciBpbzsKKwl9IGFkZHI7CiAJdTMyIHZhbDsKIH07CiAKQEAgLTM2OSw3ICszNjksNyBAQAogCXVuc2lnbmVkIGludCBjdXJfZnJlcTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaT0wOyBpPDEwMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAJCWN1cl9mcmVxID0gZXh0cmFjdF9mcmVxKGdldF9jdXJfdmFsKG1hc2spLCBkYXRhKTsKIAkJaWYgKGN1cl9mcmVxID09IGZyZXEpCiAJCQlyZXR1cm4gMTsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCQl1bnNpZ25lZCBsb25nIGZyZXE7CiAJCXVuc2lnbmVkIGxvbmcgZnJlcW4gPSBwZXJmLT5zdGF0ZXNbMF0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwogCi0JCWZvciAoaT0wOyBpPChwZXJmLT5zdGF0ZV9jb3VudC0xKTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAocGVyZi0+c3RhdGVfY291bnQtMSk7IGkrKykgewogCQkJZnJlcSA9IGZyZXFuOwogCQkJZnJlcW4gPSBwZXJmLT5zdGF0ZXNbaSsxXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJCQlpZiAoKDIgKiBjcHVfa2h6KSA+IChmcmVxbiArIGZyZXEpKSB7CkBAIC02NzMsNyArNjczLDcgQEAKIAogCS8qIGRldGVjdCB0cmFuc2l0aW9uIGxhdGVuY3kgKi8KIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMDsKLQlmb3IgKGk9MDsgaTxwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKIAkJaWYgKChwZXJmLT5zdGF0ZXNbaV0udHJhbnNpdGlvbl9sYXRlbmN5ICogMTAwMCkgPgogCQkgICAgcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSkKIAkJCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPQpAQCAtNjgyLDggKzY4Miw4IEBACiAKIAlkYXRhLT5tYXhfZnJlcSA9IHBlcmYtPnN0YXRlc1swXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJLyogdGFibGUgaW5pdCAqLwotCWZvciAoaT0wOyBpPHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKLQkJaWYgKGk+MCAmJiBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgPj0KKwlmb3IgKGkgPSAwOyBpIDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKykgeworCQlpZiAoaSA+IDAgJiYgcGVyZi0+c3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ID49CiAJCSAgICBkYXRhLT5mcmVxX3RhYmxlW3ZhbGlkX3N0YXRlcy0xXS5mcmVxdWVuY3kgLyAxMDAwKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwppbmRleCA5NjVlYTUyLi43MzMwOTNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiBuZm9yY2UyX2NoaXBzZXQ6CiAgKiBGU0IgaXMgY2hhbmdlZCB1c2luZyB0aGUgY2hpcHNldAogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5mb3JjZTJfY2hpcHNldF9kZXY7CitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5mb3JjZTJfZGV2OwogCiAvKiBmaWQ6CiAgKiBtdWx0aXBsaWVyICogMTAKQEAgLTU2LDcgKzU2LDkgQEAKIE1PRFVMRV9QQVJNX0RFU0MobWluX2ZzYiwKIAkJIk1pbmltdW0gRlNCIHRvIHVzZSwgaWYgbm90IGRlZmluZWQ6IGN1cnJlbnQgRlNCIC0gNTAiKTsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJjcHVmcmVxLW5mb3JjZTIiLCBtc2cpCisjZGVmaW5lIFBGWCAiY3B1ZnJlcS1uZm9yY2UyOiAiCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkiY3B1ZnJlcS1uZm9yY2UyIiwgbXNnKQogCiAvKioKICAqIG5mb3JjZTJfY2FsY19mc2IgLSBjYWxjdWxhdGUgRlNCCkBAIC0xMTgsMTEgKzEyMCwxMSBAQAogCWludCB0ZW1wOwogCiAJLyogU2V0IHRoZSBwbGwgYWRkci4gdG8gMHgwMCAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExBRFIsIDApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMQURSLCAwKTsKIAogCS8qIE5vdyB3cml0ZSB0aGUgdmFsdWUgaW4gYWxsIDY0IHJlZ2lzdGVycyAqLwogCWZvciAodGVtcCA9IDA7IHRlbXAgPD0gMHgzZjsgdGVtcCsrKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMUkVHLCBwbGwpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTFJFRywgcGxsKTsKIAogCXJldHVybjsKIH0KQEAgLTEzOSw4ICsxNDEsOCBAQAogCXUzMiBmc2IsIHRlbXAgPSAwOwogCiAJLyogR2V0IGNoaXBzZXQgYm9vdCBGU0IgZnJvbSBzdWJkZXZpY2UgNSAoRlNCIGF0IGJvb3QtdGltZSkgKi8KLQluZm9yY2UyX3N1YjUgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwKLQkJCQkJCTB4MDFFRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJbmZvcmNlMl9zdWI1ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsIDB4MDFFRiwKKwkJCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKIAlpZiAoIW5mb3JjZTJfc3ViNSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE0OCwxMyArMTUwLDEzIEBACiAJZnNiIC89IDEwMDAwMDA7CiAKIAkvKiBDaGVjayBpZiBQTEwgcmVnaXN0ZXIgaXMgYWxyZWFkeSBzZXQgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOwogCiAJaWYgKGJvb3Rmc2IgfHwgIXRlbXApCiAJCXJldHVybiBmc2I7CiAKIAkvKiBVc2UgUExMIHJlZ2lzdGVyIEZTQiB2YWx1ZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTFJFRywgJnRlbXApOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExSRUcsICZ0ZW1wKTsKIAlmc2IgPSBuZm9yY2UyX2NhbGNfZnNiKHRlbXApOwogCiAJcmV0dXJuIGZzYjsKQEAgLTE3NCwxOCArMTc2LDE4IEBACiAJaW50IHBsbCA9IDA7CiAKIAlpZiAoKGZzYiA+IG1heF9mc2IpIHx8IChmc2IgPCBORk9SQ0UyX01JTl9GU0IpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogRlNCICVkIGlzIG91dCBvZiByYW5nZSFcbiIsIGZzYik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkZTQiAlZCBpcyBvdXQgb2YgcmFuZ2UhXG4iLCBmc2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAl0ZnNiID0gbmZvcmNlMl9mc2JfcmVhZCgwKTsKIAlpZiAoIXRmc2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBGU0JcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvciB3aGlsZSByZWFkaW5nIHRoZSBGU0JcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBGaXJzdCB3cml0ZT8gVGhlbiBzZXQgYWN0dWFsIHZhbHVlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCAqKSZ0ZW1wKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCAqKSZ0ZW1wKTsKIAlpZiAoIXRlbXApIHsKIAkJcGxsID0gbmZvcmNlMl9jYWxjX3BsbCh0ZnNiKTsKIApAQCAtMTk3LDcgKzE5OSw3IEBACiAKIAkvKiBFbmFibGUgd3JpdGUgYWNjZXNzICovCiAJdGVtcCA9IDB4MDE7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTgpdGVtcCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4KXRlbXApOwogCiAJZGlmZiA9IHRmc2IgLSBmc2I7CiAKQEAgLTIyMiw3ICsyMjQsNyBAQAogCX0KIAogCXRlbXAgPSAweDQwOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEFEUiwgKHU4KXRlbXApOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExBRFIsICh1OCl0ZW1wKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ0LDcgKzI0Niw4IEBACiAgKiBuZm9yY2UyX3RhcmdldCAtIHNldCBhIG5ldyBDUFVGcmVxIHBvbGljeQogICogQHBvbGljeTogbmV3IHBvbGljeQogICogQHRhcmdldF9mcmVxOiB0aGUgdGFyZ2V0IGZyZXF1ZW5jeQotICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCisgKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeQorICogIChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQogICoKICAqIFNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kuCiAgKi8KQEAgLTI3Niw3ICsyNzksNyBAQAogCS8qIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgKi8KIAogCWlmIChuZm9yY2UyX3NldF9mc2IodGFyZ2V0X2ZzYikgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IENoYW5naW5nIEZTQiB0byAlZCBmYWlsZWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNoYW5naW5nIEZTQiB0byAlZCBmYWlsZWRcbiIsCiAJCQl0YXJnZXRfZnNiKTsKIAllbHNlCiAJCWRwcmludGsoIkNoYW5nZWQgRlNCIHN1Y2Nlc3NmdWxseSB0byAlZFxuIiwKQEAgLTMyNyw4ICszMzAsOCBAQAogCS8qIEZJWDogR2V0IEZJRCBmcm9tIENQVSAqLwogCWlmICghZmlkKSB7CiAJCWlmICghY3B1X2toeikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjcHVmcmVxOiBjcHVfa2h6IG5vdCBzZXQsIGNhbid0IGNhbGN1bGF0ZSBtdWx0aXBsaWVyIVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJImNwdV9raHogbm90IHNldCwgY2FuJ3QgY2FsY3VsYXRlIG11bHRpcGxpZXIhXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKQEAgLTM0Myw3ICszNDYsNyBAQAogCQl9CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3B1ZnJlcTogRlNCIGN1cnJlbnRseSBhdCAlaSBNSHosIEZJRCAlZC4lZFxuIiwgZnNiLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJGU0IgY3VycmVudGx5IGF0ICVpIE1IeiwgRklEICVkLiVkXG4iLCBmc2IsCiAJICAgICAgIGZpZCAvIDEwLCBmaWQgJSAxMCk7CiAKIAkvKiBTZXQgbWF4aW11bSBGU0IgdG8gRlNCIGF0IGJvb3QgdGltZSAqLwpAQCAtMzkyLDE3ICszOTUsMTggQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBuZm9yY2UyX2RldGVjdF9jaGlwc2V0KHZvaWQpCiB7Ci0JbmZvcmNlMl9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfTlZJRElBLAorCW5mb3JjZTJfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsCiAJCQkJCVBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTIsCiAJCQkJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwogCi0JaWYgKG5mb3JjZTJfY2hpcHNldF9kZXYgPT0gTlVMTCkKKwlpZiAobmZvcmNlMl9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcmludGsoS0VSTl9JTkZPICJjcHVmcmVxOiBEZXRlY3RlZCBuRm9yY2UyIGNoaXBzZXQgcmV2aXNpb24gJVhcbiIsCi0JICAgICAgIG5mb3JjZTJfY2hpcHNldF9kZXYtPnJldmlzaW9uKTsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJjcHVmcmVxOiBGU0IgY2hhbmdpbmcgaXMgbWF5YmUgdW5zdGFibGUgYW5kIGNhbiBsZWFkIHRvIGNyYXNoZXMgYW5kIGRhdGEgbG9zcy5cbiIpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJEZXRlY3RlZCBuRm9yY2UyIGNoaXBzZXQgcmV2aXNpb24gJVhcbiIsCisJICAgICAgIG5mb3JjZTJfZGV2LT5yZXZpc2lvbik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkgICAgICAgIkZTQiBjaGFuZ2luZyBpcyBtYXliZSB1bnN0YWJsZSBhbmQgY2FuIGxlYWQgdG8gIgorCSAgICAgICAiY3Jhc2hlcyBhbmQgZGF0YSBsb3NzLlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyMCw3ICs0MjQsNyBAQAogCiAJLyogZGV0ZWN0IGNoaXBzZXQgKi8KIAlpZiAobmZvcmNlMl9kZXRlY3RfY2hpcHNldCgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogTm8gbkZvcmNlMiBjaGlwc2V0LlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBuRm9yY2UyIGNoaXBzZXQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKaW5kZXggYzJmOTMwZC4uM2Y4M2VhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwpAQCAtMTIsMTIgKzEyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vdHNjLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKICNkZWZpbmUgRVBTX0JSQU5EX0M3TQkwCiAjZGVmaW5lIEVQU19CUkFORF9DNwkxCkBAIC0xODQsNyArMTg0LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0Jc3dpdGNoKGJyYW5kKSB7CisJc3dpdGNoIChicmFuZCkgewogCWNhc2UgRVBTX0JSQU5EX0M3TToKIAkJcHJpbnRrKEtFUk5fQ09OVCAiQzctTVxuIik7CiAJCWJyZWFrOwpAQCAtMjE4LDE3ICsyMTgsMjAgQEAKIAkvKiBQcmludCB2b2x0YWdlIGFuZCBtdWx0aXBsaWVyICovCiAJcmRtc3IoTVNSX0lBMzJfUEVSRl9TVEFUVVMsIGxvLCBoaSk7CiAJY3VycmVudF92b2x0YWdlID0gbG8gJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gImVwczogQ3VycmVudCB2b2x0YWdlID0gJWRtVlxuIiwgY3VycmVudF92b2x0YWdlICogMTYgKyA3MDApOworCXByaW50ayhLRVJOX0lORk8gImVwczogQ3VycmVudCB2b2x0YWdlID0gJWRtVlxuIiwKKwkJCWN1cnJlbnRfdm9sdGFnZSAqIDE2ICsgNzAwKTsKIAljdXJyZW50X211bHRpcGxpZXIgPSAobG8gPj4gOCkgJiAweGZmOwogCXByaW50ayhLRVJOX0lORk8gImVwczogQ3VycmVudCBtdWx0aXBsaWVyID0gJWRcbiIsIGN1cnJlbnRfbXVsdGlwbGllcik7CiAKIAkvKiBQcmludCBsaW1pdHMgKi8KIAltYXhfdm9sdGFnZSA9IGhpICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJlcHM6IEhpZ2hlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsIG1heF92b2x0YWdlICogMTYgKyA3MDApOworCXByaW50ayhLRVJOX0lORk8gImVwczogSGlnaGVzdCB2b2x0YWdlID0gJWRtVlxuIiwKKwkJCW1heF92b2x0YWdlICogMTYgKyA3MDApOwogCW1heF9tdWx0aXBsaWVyID0gKGhpID4+IDgpICYgMHhmZjsKIAlwcmludGsoS0VSTl9JTkZPICJlcHM6IEhpZ2hlc3QgbXVsdGlwbGllciA9ICVkXG4iLCBtYXhfbXVsdGlwbGllcik7CiAJbWluX3ZvbHRhZ2UgPSAoaGkgPj4gMTYpICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJlcHM6IExvd2VzdCB2b2x0YWdlID0gJWRtVlxuIiwgbWluX3ZvbHRhZ2UgKiAxNiArIDcwMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBMb3dlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsCisJCQltaW5fdm9sdGFnZSAqIDE2ICsgNzAwKTsKIAltaW5fbXVsdGlwbGllciA9IChoaSA+PiAyNCkgJiAweGZmOwogCXByaW50ayhLRVJOX0lORk8gImVwczogTG93ZXN0IG11bHRpcGxpZXIgPSAlZFxuIiwgbWluX211bHRpcGxpZXIpOwogCkBAIC0zMTgsNyArMzIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIGVwc19hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqZXBzX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0zNTYsNyArMzU5LDcgQEAKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZlcHNfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiUmFmYbMgQmlsc2tpIDxyYWZhbGJpbHNraUBpbnRlcmlhLnBsPiIpOworTU9EVUxFX0FVVEhPUigiUmFmYWwgQmlsc2tpIDxyYWZhbGJpbHNraUBpbnRlcmlhLnBsPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJFbmhhbmNlZCBQb3dlclNhdmVyIGRyaXZlciBmb3IgVklBIEM3IENQVSdzLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCmluZGV4IGZlNjEzYzkuLjAwNmIyNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCkBAIC0xODQsNyArMTg0LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZlbGFuZnJlcV90YWJsZVswXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmZWxhbmZyZXFfdGFibGVbMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVsYW5mcmVxX3NldF9jcHVfc3RhdGUobmV3c3RhdGUpOwpAQCAtMzAxLDcgKzMwMiw4IEBACiBtb2R1bGVfcGFyYW0obWF4X2ZyZXEsIGludCwgMDQ0NCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFN2ZW4gR2VnZ3VzIDxzdmVuQGdlZ2d1cy5uZXQ+Iik7CitNT0RVTEVfQVVUSE9SKCJSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCAiCisJCSJTdmVuIEdlZ2d1cyA8c3ZlbkBnZWdndXMubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJjcHVmcmVxIGRyaXZlciBmb3IgQU1EJ3MgRWxhbiBDUFVzIik7CiAKIG1vZHVsZV9pbml0KGVsYW5mcmVxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKaW5kZXggOWQ5ZWFlOC4uYWMyN2VjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCkBAIC03OSw4ICs3OSw5IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWN5cml4Lmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKIC8qIFBDSSBjb25maWcgcmVnaXN0ZXJzLCBhbGwgYXQgRjAgKi8KICNkZWZpbmUgUENJX1BNRVIxCTB4ODAJLyogcG93ZXIgbWFuYWdlbWVudCBlbmFibGUgcmVnaXN0ZXIgMSAqLwpAQCAtMTIyLDggKzEyMyw4IEBACiBzdGF0aWMgaW50IHN0b2NrX2ZyZXE7CiAKIC8qIFBDSSBidXMgY2xvY2sgLSBkZWZhdWx0cyB0byAzMC4wMDAgaWYgY3B1X2toeiBpcyBub3QgYXZhaWxhYmxlICovCi1zdGF0aWMgaW50IHBjaV9idXNjbGsgPSAwOwotbW9kdWxlX3BhcmFtIChwY2lfYnVzY2xrLCBpbnQsIDA0NDQpOworc3RhdGljIGludCBwY2lfYnVzY2xrOworbW9kdWxlX3BhcmFtKHBjaV9idXNjbGssIGludCwgMDQ0NCk7CiAKIC8qIG1heGltdW0gZHVyYXRpb24gZm9yIHdoaWNoIHRoZSBjcHUgbWF5IGJlIHN1c3BlbmRlZAogICogKDMydXMgKiBNQVhfRFVSQVRJT04pLiBJZiBubyBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIHRoaXMgZGVmYXVsdHMKQEAgLTEzMiw3ICsxMzMsNyBAQAogICogaXMgc3VzcGVuZGVkIC0tIHByb2Nlc3NpbmcgcG93ZXIgaXMganVzdCAwLjM5JSBvZiB3aGF0IGl0IHVzZWQgdG8gYmUsCiAgKiB0aG91Z2guIDc4MS4yNSBrSHooISkgZm9yIGEgMjAwIE1IeiBwcm9jZXNzb3IgLS0gd293LiAqLwogc3RhdGljIGludCBtYXhfZHVyYXRpb24gPSAyNTU7Ci1tb2R1bGVfcGFyYW0gKG1heF9kdXJhdGlvbiwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShtYXhfZHVyYXRpb24sIGludCwgMDQ0NCk7CiAKIC8qIEZvciB0aGUgZGVmYXVsdCBwb2xpY3ksIHdlIHdhbnQgYXQgbGVhc3Qgc29tZSBwcm9jZXNzaW5nIHBvd2VyCiAgKiAtIGxldCdzIHNheSA1JS4gKG1pbiA9IG1heGZyZXEgLyBQT0xJQ1lfTUlOX0RJVikKQEAgLTE0MCw3ICsxNDEsOCBAQAogI2RlZmluZSBQT0xJQ1lfTUlOX0RJViAyMAogCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAiZ3gtc3VzcG1vZCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJneC1zdXNwbW9kIiwgbXNnKQogCiAvKioKICAqIHdlIGNhbiBkZXRlY3QgYSBjb3JlIG11bHRpcGlsZXIgZnJvbSBkaXIwX2xzYgpAQCAtMTY2LDEyICsxNjgsMjAgQEAKICAqCUxvdyBMZXZlbCBjaGlwc2V0IGludGVyZmFjZQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBneF9jaGlwc2V0X3RibFtdIF9faW5pdGRhdGEgPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKIAl7IDAsIH0sCiB9OwogCitzdGF0aWMgdm9pZCBneF93cml0ZV9ieXRlKGludCByZWcsIGludCB2YWx1ZSkKK3sKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIHJlZywgdmFsdWUpOworfQorCiAvKioKICAqIGd4X2RldGVjdF9jaGlwc2V0OgogICoKQEAgLTIwMCw3ICsyMTAsOCBAQAogLyoqCiAgKiBneF9nZXRfY3B1c3BlZWQ6CiAgKgotICogRmluZHMgb3V0IGF0IHdoaWNoIGVmZmljaWVudCBmcmVxdWVuY3kgdGhlIEN5cml4IE1lZGlhR1gvTmF0U2VtaSBHZW9kZSBDUFUgcnVucy4KKyAqIEZpbmRzIG91dCBhdCB3aGljaCBlZmZpY2llbnQgZnJlcXVlbmN5IHRoZSBDeXJpeCBNZWRpYUdYL05hdFNlbWkKKyAqIEdlb2RlIENQVSBydW5zLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGd4X2dldF9jcHVzcGVlZCh1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtMjE3LDE3ICsyMjgsMTggQEAKICAqCiAgKiovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ3hfdmFsaWRhdGVfc3BlZWQodW5zaWduZWQgaW50IGtoeiwgdTggKm9uX2R1cmF0aW9uLCB1OCAqb2ZmX2R1cmF0aW9uKQorc3RhdGljIHVuc2lnbmVkIGludCBneF92YWxpZGF0ZV9zcGVlZCh1bnNpZ25lZCBpbnQga2h6LCB1OCAqb25fZHVyYXRpb24sCisJCXU4ICpvZmZfZHVyYXRpb24pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdTggdG1wX29uLCB0bXBfb2ZmOwogCWludCBvbGRfdG1wX2ZyZXEgPSBzdG9ja19mcmVxOwogCWludCB0bXBfZnJlcTsKIAotCSpvZmZfZHVyYXRpb249MTsKLQkqb25fZHVyYXRpb249MDsKKwkqb2ZmX2R1cmF0aW9uID0gMTsKKwkqb25fZHVyYXRpb24gPSAwOwogCi0JZm9yIChpPW1heF9kdXJhdGlvbjsgaT4wOyBpLS0pIHsKKwlmb3IgKGkgPSBtYXhfZHVyYXRpb247IGkgPiAwOyBpLS0pIHsKIAkJdG1wX29mZiA9ICgoa2h6ICogaSkgLyBzdG9ja19mcmVxKSAmIDB4ZmY7CiAJCXRtcF9vbiA9IGkgLSB0bXBfb2ZmOwogCQl0bXBfZnJlcSA9IChzdG9ja19mcmVxICogdG1wX29mZikgLyBpOwpAQCAtMjU5LDI2ICsyNzEsMzQgQEAKIAlmcmVxcy5jcHUgPSAwOwogCWZyZXFzLm9sZCA9IGd4X2dldF9jcHVzcGVlZCgwKTsKIAotCW5ld19raHogPSBneF92YWxpZGF0ZV9zcGVlZChraHosICZneF9wYXJhbXMtPm9uX2R1cmF0aW9uLCAmZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOworCW5ld19raHogPSBneF92YWxpZGF0ZV9zcGVlZChraHosICZneF9wYXJhbXMtPm9uX2R1cmF0aW9uLAorCQkJJmd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKIAogCWZyZXFzLm5ldyA9IG5ld19raHo7CiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCWlmIChuZXdfa2h6ICE9IHN0b2NrX2ZyZXEpIHsgIC8qIGlmIG5ldyBraHogPT0gMTAwJSBvZiBDUFUgc3BlZWQsIGl0IGlzIHNwZWNpYWwgY2FzZSAqLworCisKKwlpZiAobmV3X2toeiAhPSBzdG9ja19mcmVxKSB7CisJCS8qIGlmIG5ldyBraHogPT0gMTAwJSBvZiBDUFUgc3BlZWQsIGl0IGlzIHNwZWNpYWwgY2FzZSAqLwogCQlzd2l0Y2ggKGd4X3BhcmFtcy0+Y3M1NXgwLT5kZXZpY2UpIHsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZOgogCQkJcG1lcjEgPSBneF9wYXJhbXMtPnBjaV9wbWVyMSB8IElSUV9TUERVUCB8IFZJRF9TUERVUDsKIAkJCS8qIEZJWE1FOiBuZWVkIHRvIHRlc3Qgb3RoZXIgdmFsdWVzIC0tIFp3YW5lLE1pdXJhICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9JUlFUQywgNCk7IC8qIHR5cGljYWwgMiB0byA0bXMgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1ZJRFRDLCAxMDApOy8qIHR5cGljYWwgNTAgdG8gMTAwbXMgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1BNRVIxLCBwbWVyMSk7CisJCQkvKiB0eXBpY2FsIDIgdG8gNG1zICovCisJCQlneF93cml0ZV9ieXRlKFBDSV9JUlFUQywgNCk7CisJCQkvKiB0eXBpY2FsIDUwIHRvIDEwMG1zICovCisJCQlneF93cml0ZV9ieXRlKFBDSV9WSURUQywgMTAwKTsKKwkJCWd4X3dyaXRlX2J5dGUoUENJX1BNRVIxLCBwbWVyMSk7CiAKLQkJCWlmIChneF9wYXJhbXMtPmNzNTV4MC0+cmV2aXNpb24gPCAweDEwKSB7ICAgLyogQ1M1NTMwKHJldiAxLjIsIDEuMykgKi8KLQkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmcgfCBTVVNNT0Q7Ci0JCQl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENTNTUzMEEsQi4uICovCi0JCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnIHwgU1VTTU9EIHwgUFdSU1ZFOworCQkJaWYgKGd4X3BhcmFtcy0+Y3M1NXgwLT5yZXZpc2lvbiA8IDB4MTApIHsKKwkJCQkvKiBDUzU1MzAocmV2IDEuMiwgMS4zKSAqLworCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZ3xTVVNNT0Q7CisJCQl9IGVsc2UgeworCQkJCS8qIENTNTUzMEEsQi4uICovCisJCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnfFNVU01PRHxQV1JTVkU7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjA6CkBAIC0yOTQsMTMgKzMxNCwxMyBAQAogCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmcgJiB+KFNVU01PRCk7CiAJCWd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uID0gMDsKIAkJZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbiA9IDA7Ci0JCWRwcmludGsoInN1c3BlbmQgbW9kdWxhdGlvbiBkaXNhYmxlZDogY3B1IHJ1bnMgMTAwIHBlcmNlbnQgc3BlZWQuXG4iKTsKKwkJZHByaW50aygic3VzcGVuZCBtb2R1bGF0aW9uIGRpc2FibGVkOiBjcHUgcnVucyAxMDAlJSBzcGVlZC5cbiIpOwogCX0KIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX01PRE9GRiwgZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX01PRE9OLCBneF9wYXJhbXMtPm9uX2R1cmF0aW9uKTsKKwlneF93cml0ZV9ieXRlKFBDSV9NT0RPRkYsIGd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKKwlneF93cml0ZV9ieXRlKFBDSV9NT0RPTiwgZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbik7CiAKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9TVVNDRkcsIHN1c2NmZyk7CisJZ3hfd3JpdGVfYnl0ZShQQ0lfU1VTQ0ZHLCBzdXNjZmcpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfU1VTQ0ZHLCAmc3VzY2ZnKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTMzNCw3ICszNTQsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBvbGljeS0+Y3B1ID0gMDsKLQljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLCBzdG9ja19mcmVxKTsKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLAorCQkJc3RvY2tfZnJlcSk7CiAKIAkvKiBpdCBuZWVkcyB0byBiZSBhc3N1cmVkIHRoYXQgYXQgbGVhc3Qgb25lIHN1cHBvcnRlZCBmcmVxdWVuY3kgaXMKIAkgKiB3aXRoaW4gcG9saWN5LT5taW4gYW5kIHBvbGljeS0+bWF4LiBJZiBpdCBpcyBub3QsIHBvbGljeS0+bWF4CkBAIC0zNTQsNyArMzc1LDggQEAKIAlwb2xpY3ktPm1heCA9IHRtcF9mcmVxOwogCWlmIChwb2xpY3ktPm1heCA8IHBvbGljeS0+bWluKQogCQlwb2xpY3ktPm1heCA9IHBvbGljeS0+bWluOwotCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksIHN0b2NrX2ZyZXEpOworCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksCisJCQlzdG9ja19mcmVxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzk4LDE4ICs0MjAsMTggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBkZXRlcm1pbmUgbWF4aW11bSBmcmVxdWVuY3kgKi8KLQlpZiAocGNpX2J1c2NsaykgeworCWlmIChwY2lfYnVzY2xrKQogCQltYXhmcmVxID0gcGNpX2J1c2NsayAqIGd4X2ZyZXFfbXVsdFtnZXRDeDg2KENYODZfRElSMSkgJiAweDBmXTsKLQl9IGVsc2UgaWYgKGNwdV9raHopIHsKKwllbHNlIGlmIChjcHVfa2h6KQogCQltYXhmcmVxID0gY3B1X2toejsKLQl9IGVsc2UgeworCWVsc2UKIAkJbWF4ZnJlcSA9IDMwMDAwICogZ3hfZnJlcV9tdWx0W2dldEN4ODYoQ1g4Nl9ESVIxKSAmIDB4MGZdOwotCX0KKwogCXN0b2NrX2ZyZXEgPSBtYXhmcmVxOwogCWN1cmZyZXEgPSBneF9nZXRfY3B1c3BlZWQoMCk7CiAKIAlkcHJpbnRrKCJjcHUgbWF4IGZyZXF1ZW5jeSBpcyAlZC5cbiIsIG1heGZyZXEpOwotCWRwcmludGsoImNwdSBjdXJyZW50IGZyZXF1ZW5jeSBpcyAlZGtIei5cbiIsY3VyZnJlcSk7CisJZHByaW50aygiY3B1IGN1cnJlbnQgZnJlcXVlbmN5IGlzICVka0h6LlxuIiwgY3VyZnJlcSk7CiAKIAkvKiBzZXR1cCBiYXNpYyBzdHJ1Y3QgZm9yIGNwdWZyZXEgQVBJICovCiAJcG9saWN5LT5jcHUgPSAwOwpAQCAtNDQ3LDcgKzQ2OSw4IEBACiAJc3RydWN0IHBjaV9kZXYgKmd4X3BjaTsKIAogCS8qIFRlc3QgaWYgd2UgaGF2ZSB0aGUgcmlnaHQgaGFyZHdhcmUgKi8KLQlpZiAoKGd4X3BjaSA9IGd4X2RldGVjdF9jaGlwc2V0KCkpID09IE5VTEwpCisJZ3hfcGNpID0gZ3hfZGV0ZWN0X2NoaXBzZXQoKTsKKwlpZiAoZ3hfcGNpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogY2hlY2sgd2hldGhlciBtb2R1bGUgcGFyYW1ldGVycyBhcmUgc2FuZSAqLwpAQCAtNDY4LDkgKzQ5MSwxMSBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfUE1FUjEsICYocGFyYW1zLT5wY2lfcG1lcjEpKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX1BNRVIyLCAmKHBhcmFtcy0+cGNpX3BtZXIyKSk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPTiwgJihwYXJhbXMtPm9uX2R1cmF0aW9uKSk7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPRkYsICYocGFyYW1zLT5vZmZfZHVyYXRpb24pKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9GRiwKKwkJCSYocGFyYW1zLT5vZmZfZHVyYXRpb24pKTsKIAotCWlmICgocmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmd4X3N1c3Btb2RfZHJpdmVyKSkpIHsKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmZ3hfc3VzcG1vZF9kcml2ZXIpOworCWlmIChyZXQpIHsKIAkJa2ZyZWUocGFyYW1zKTsKIAkJcmV0dXJuIHJldDsgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgZXJyb3IhICovCiAJfQpAQCAtNDg1LDkgKzUxMCw5IEBACiAJa2ZyZWUoZ3hfcGFyYW1zKTsKIH0KIAotTU9EVUxFX0FVVEhPUiAoIkhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJDcHVmcmVxIGRyaXZlciBmb3IgQ3lyaXggTWVkaWFHWCBhbmQgTmF0U2VtaSBHZW9kZSIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhpcm9zaGkgTWl1cmEgPG1pdXJhQGRhLWNoYS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNwdWZyZXEgZHJpdmVyIGZvciBDeXJpeCBNZWRpYUdYIGFuZCBOYXRTZW1pIEdlb2RlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGNwdWZyZXFfZ3hfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX2d4X2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCBhNGNmZjVkLi5mMWM1MWFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtMzAsMTIgKzMwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCiAjaW5jbHVkZSAibG9uZ2hhdWwuaCIKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgVVNFX05PUlRIQlJJREdFCQkoMSA8PCAyKQogCiBzdGF0aWMgaW50IGNwdV9tb2RlbDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtc2NhbGVzPTE2Oworc3RhdGljIHVuc2lnbmVkIGludCBudW1zY2FsZXMgPSAxNjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnNiOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1WX3BvcyAqdnJtX21WX3RhYmxlOwpAQCAtNjcsOCArNjcsOCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBoaWdoZXN0X3NwZWVkLCBsb3dlc3Rfc3BlZWQ7IC8qIGtIeiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBtaW5tdWx0LCBtYXhtdWx0Owogc3RhdGljIGludCBjYW5fc2NhbGVfdm9sdGFnZTsKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByOworc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3g7CiBzdGF0aWMgdTMyIGFjcGlfcmVnc19hZGRyOwogc3RhdGljIHU4IGxvbmdoYXVsX2ZsYWdzOwogc3RhdGljIHVuc2lnbmVkIGludCBsb25naGF1bF9pbmRleDsKQEAgLTc4LDEyICs3OCwxMyBAQAogc3RhdGljIGludCBkaXNhYmxlX2FjcGlfYzM7CiBzdGF0aWMgaW50IHJldmlkX2VycmF0YTsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJsb25naGF1bCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJsb25naGF1bCIsIG1zZykKIAogCiAvKiBDbG9jayByYXRpb3MgbXVsdGlwbGllZCBieSAxMCAqLwotc3RhdGljIGludCBjbG9ja19yYXRpb1szMl07Ci1zdGF0aWMgaW50IGVibGNyX3RhYmxlWzMyXTsKK3N0YXRpYyBpbnQgbXVsdHNbMzJdOworc3RhdGljIGludCBlYmxjclszMl07CiBzdGF0aWMgaW50IGxvbmdoYXVsX3ZlcnNpb247CiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpsb25naGF1bF90YWJsZTsKIApAQCAtOTMsNyArOTQsNyBAQAogc3RhdGljIGNoYXIgKnByaW50X3NwZWVkKGludCBzcGVlZCkKIHsKIAlpZiAoc3BlZWQgPCAxMDAwKSB7Ci0JCXNucHJpbnRmKHNwZWVkYnVmZmVyLCBzaXplb2Yoc3BlZWRidWZmZXIpLCIlZE1IeiIsIHNwZWVkKTsKKwkJc25wcmludGYoc3BlZWRidWZmZXIsIHNpemVvZihzcGVlZGJ1ZmZlciksICIlZE1IeiIsIHNwZWVkKTsKIAkJcmV0dXJuIHNwZWVkYnVmZmVyOwogCX0KIApAQCAtMTIyLDI3ICsxMjMsMjggQEAKIAogc3RhdGljIGludCBsb25naGF1bF9nZXRfY3B1X211bHQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGludmFsdWU9MCxsbywgaGk7CisJdW5zaWduZWQgbG9uZyBpbnZhbHVlID0gMCwgbG8sIGhpOwogCi0JcmRtc3IgKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBsbywgaGkpOwotCWludmFsdWUgPSAobG8gJiAoMTw8MjJ8MTw8MjN8MTw8MjR8MTw8MjUpKSA+PjIyOwotCWlmIChsb25naGF1bF92ZXJzaW9uPT1UWVBFX0xPTkdIQVVMX1YyIHx8IGxvbmdoYXVsX3ZlcnNpb249PVRZUEVfUE9XRVJTQVZFUikgeworCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBsbywgaGkpOworCWludmFsdWUgPSAobG8gJiAoMTw8MjJ8MTw8MjN8MTw8MjR8MTw8MjUpKT4+MjI7CisJaWYgKGxvbmdoYXVsX3ZlcnNpb24gPT0gVFlQRV9MT05HSEFVTF9WMiB8fAorCSAgICBsb25naGF1bF92ZXJzaW9uID09IFRZUEVfUE9XRVJTQVZFUikgewogCQlpZiAobG8gJiAoMTw8MjcpKQotCQkJaW52YWx1ZSs9MTY7CisJCQlpbnZhbHVlICs9IDE2OwogCX0KLQlyZXR1cm4gZWJsY3JfdGFibGVbaW52YWx1ZV07CisJcmV0dXJuIGVibGNyW2ludmFsdWVdOwogfQogCiAvKiBGb3IgcHJvY2Vzc29yIHdpdGggQkNSMiBNU1IgKi8KIAotc3RhdGljIHZvaWQgZG9fbG9uZ2hhdWwxKHVuc2lnbmVkIGludCBjbG9ja19yYXRpb19pbmRleCkKK3N0YXRpYyB2b2lkIGRvX2xvbmdoYXVsMSh1bnNpZ25lZCBpbnQgbXVsdHNfaW5kZXgpCiB7CiAJdW5pb24gbXNyX2JjcjIgYmNyMjsKIAogCXJkbXNybChNU1JfVklBX0JDUjIsIGJjcjIudmFsKTsKIAkvKiBFbmFibGUgc29mdHdhcmUgY2xvY2sgbXVsdGlwbGllciAqLwogCWJjcjIuYml0cy5FU09GVEJGID0gMTsKLQliY3IyLmJpdHMuQ0xPQ0tNVUwgPSBjbG9ja19yYXRpb19pbmRleCAmIDB4ZmY7CisJYmNyMi5iaXRzLkNMT0NLTVVMID0gbXVsdHNfaW5kZXggJiAweGZmOwogCiAJLyogU3luYyB0byB0aW1lciB0aWNrICovCiAJc2FmZV9oYWx0KCk7CkBAIC0xNjEsNyArMTYzLDcgQEAKIAogLyogRm9yIHByb2Nlc3NvciB3aXRoIExvbmdoYXVsIE1TUiAqLwogCi1zdGF0aWMgdm9pZCBkb19wb3dlcnNhdmVyKGludCBjeF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXgsCitzdGF0aWMgdm9pZCBkb19wb3dlcnNhdmVyKGludCBjeF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgbXVsdHNfaW5kZXgsCiAJCQkgIHVuc2lnbmVkIGludCBkaXIpCiB7CiAJdW5pb24gbXNyX2xvbmdoYXVsIGxvbmdoYXVsOwpAQCAtMTczLDExICsxNzUsMTEgQEAKIAkJbG9uZ2hhdWwuYml0cy5SZXZpc2lvbktleSA9IGxvbmdoYXVsLmJpdHMuUmV2aXNpb25JRDsKIAllbHNlCiAJCWxvbmdoYXVsLmJpdHMuUmV2aXNpb25LZXkgPSAwOwotCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvID0gY2xvY2tfcmF0aW9faW5kZXggJiAweGY7Ci0JbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW80ID0gKGNsb2NrX3JhdGlvX2luZGV4ICYgMHgxMCkgPj4gNDsKKwlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbyA9IG11bHRzX2luZGV4ICYgMHhmOworCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvNCA9IChtdWx0c19pbmRleCAmIDB4MTApID4+IDQ7CiAJLyogU2V0dXAgbmV3IHZvbHRhZ2UgKi8KIAlpZiAoY2FuX3NjYWxlX3ZvbHRhZ2UpCi0JCWxvbmdoYXVsLmJpdHMuU29mdFZJRCA9IChjbG9ja19yYXRpb19pbmRleCA+PiA4KSAmIDB4MWY7CisJCWxvbmdoYXVsLmJpdHMuU29mdFZJRCA9IChtdWx0c19pbmRleCA+PiA4KSAmIDB4MWY7CiAJLyogU3luYyB0byB0aW1lciB0aWNrICovCiAJc2FmZV9oYWx0KCk7CiAJLyogUmFpc2Ugdm9sdGFnZSBpZiBuZWNlc3NhcnkgKi8KQEAgLTI0MCwxNCArMjQyLDE0IEBACiAKIC8qKgogICogbG9uZ2hhdWxfc2V0X2NwdV9mcmVxdWVuY3koKQotICogQGNsb2NrX3JhdGlvX2luZGV4IDogYml0cGF0dGVybiBvZiB0aGUgbmV3IG11bHRpcGxpZXIuCisgKiBAbXVsdHNfaW5kZXggOiBiaXRwYXR0ZXJuIG9mIHRoZSBuZXcgbXVsdGlwbGllci4KICAqCiAgKiBTZXRzIGEgbmV3IGNsb2NrIHJhdGlvLgogICovCiAKIHN0YXRpYyB2b2lkIGxvbmdoYXVsX3NldHN0YXRlKHVuc2lnbmVkIGludCB0YWJsZV9pbmRleCkKIHsKLQl1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXg7CisJdW5zaWduZWQgaW50IG11bHRzX2luZGV4OwogCWludCBzcGVlZCwgbXVsdDsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjU2LDkgKzI1OCw5IEBACiAJdTMyIGJtX3RpbWVvdXQgPSAxMDAwOwogCXVuc2lnbmVkIGludCBkaXIgPSAwOwogCi0JY2xvY2tfcmF0aW9faW5kZXggPSBsb25naGF1bF90YWJsZVt0YWJsZV9pbmRleF0uaW5kZXg7CisJbXVsdHNfaW5kZXggPSBsb25naGF1bF90YWJsZVt0YWJsZV9pbmRleF0uaW5kZXg7CiAJLyogU2FmZXR5IHByZWNhdXRpb25zICovCi0JbXVsdCA9IGNsb2NrX3JhdGlvW2Nsb2NrX3JhdGlvX2luZGV4ICYgMHgxZl07CisJbXVsdCA9IG11bHRzW211bHRzX2luZGV4ICYgMHgxZl07CiAJaWYgKG11bHQgPT0gLTEpCiAJCXJldHVybjsKIAlzcGVlZCA9IGNhbGNfc3BlZWQobXVsdCk7CkBAIC0yNzQsNyArMjc2LDcgQEAKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAKLQlkcHJpbnRrICgiU2V0dGluZyB0byBGU0I6JWRNSHogTXVsdDolZC4lZHggKCVzKVxuIiwKKwlkcHJpbnRrKCJTZXR0aW5nIHRvIEZTQjolZE1IeiBNdWx0OiVkLiVkeCAoJXMpXG4iLAogCQkJZnNiLCBtdWx0LzEwLCBtdWx0JTEwLCBwcmludF9zcGVlZChzcGVlZC8xMDAwKSk7CiByZXRyeV9sb29wOgogCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtMjgyLDggKzI4NCw4IEBACiAKIAlwaWMyX21hc2sgPSBpbmIoMHhBMSk7CiAJcGljMV9tYXNrID0gaW5iKDB4MjEpOwkvKiB3b3JrcyBvbiBDMy4gc2F2ZSBtYXNrLiAqLwotCW91dGIoMHhGRiwweEExKTsJLyogT3ZlcmtpbGwgKi8KLQlvdXRiKDB4RkUsMHgyMSk7CS8qIFRNUjAgb25seSAqLworCW91dGIoMHhGRiwgMHhBMSk7CS8qIE92ZXJraWxsICovCisJb3V0YigweEZFLCAweDIxKTsJLyogVE1SMCBvbmx5ICovCiAKIAkvKiBXYWl0IHdoaWxlIFBDSSBidXMgaXMgYnVzeS4gKi8KIAlpZiAoYWNwaV9yZWdzX2FkZHIgJiYgKGxvbmdoYXVsX2ZsYWdzICYgVVNFX05PUlRIQlJJREdFCkBAIC0zMTIsNyArMzE0LDcgQEAKIAkgKiBTb2Z0d2FyZSBjb250cm9sbGVkIG11bHRpcGxpZXJzIG9ubHkuCiAJICovCiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YxOgotCQlkb19sb25naGF1bDEoY2xvY2tfcmF0aW9faW5kZXgpOworCQlkb19sb25naGF1bDEobXVsdHNfaW5kZXgpOwogCQlicmVhazsKIAogCS8qCkBAIC0zMjcsOSArMzI5LDkgQEAKIAkJaWYgKGxvbmdoYXVsX2ZsYWdzICYgVVNFX0FDUElfQzMpIHsKIAkJCS8qIERvbid0IGFsbG93IHdha2V1cCAqLwogCQkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQsIDApOwotCQkJZG9fcG93ZXJzYXZlcihjeC0+YWRkcmVzcywgY2xvY2tfcmF0aW9faW5kZXgsIGRpcik7CisJCQlkb19wb3dlcnNhdmVyKGN4LT5hZGRyZXNzLCBtdWx0c19pbmRleCwgZGlyKTsKIAkJfSBlbHNlIHsKLQkJCWRvX3Bvd2Vyc2F2ZXIoMCwgY2xvY2tfcmF0aW9faW5kZXgsIGRpcik7CisJCQlkb19wb3dlcnNhdmVyKDAsIG11bHRzX2luZGV4LCBkaXIpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTM0MSw4ICszNDMsOCBAQAogCQkvKiBFbmFibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiAqLwogCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMCk7CiAJfQotCW91dGIocGljMl9tYXNrLDB4QTEpOwkvKiByZXN0b3JlIG1hc2sgKi8KLQlvdXRiKHBpYzFfbWFzaywweDIxKTsKKwlvdXRiKHBpYzJfbWFzaywgMHhBMSk7CS8qIHJlc3RvcmUgbWFzayAqLworCW91dGIocGljMV9tYXNrLCAweDIxKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwpAQCAtMzkyLDcgKzM5NCw4IEBACiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAKIAlpZiAoIWJtX3RpbWVvdXQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXJuaW5nOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGlkbGUgUENJIGJ1cy5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiV2FybmluZzogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciAiCisJCQkJImlkbGUgUENJIGJ1cy5cbiIpOwogfQogCiAvKgpAQCAtNDU4LDMxICs0NjEsMzIgQEAKIAkJYnJlYWs7CiAJfQogCi0JZHByaW50ayAoIk1pbk11bHQ6JWQuJWR4IE1heE11bHQ6JWQuJWR4XG4iLAorCWRwcmludGsoIk1pbk11bHQ6JWQuJWR4IE1heE11bHQ6JWQuJWR4XG4iLAogCQkgbWlubXVsdC8xMCwgbWlubXVsdCUxMCwgbWF4bXVsdC8xMCwgbWF4bXVsdCUxMCk7CiAKIAloaWdoZXN0X3NwZWVkID0gY2FsY19zcGVlZChtYXhtdWx0KTsKIAlsb3dlc3Rfc3BlZWQgPSBjYWxjX3NwZWVkKG1pbm11bHQpOwotCWRwcmludGsgKCJGU0I6JWRNSHogIExvd2VzdCBzcGVlZDogJXMgICBIaWdoZXN0IHNwZWVkOiVzXG4iLCBmc2IsCisJZHByaW50aygiRlNCOiVkTUh6ICBMb3dlc3Qgc3BlZWQ6ICVzICAgSGlnaGVzdCBzcGVlZDolc1xuIiwgZnNiLAogCQkgcHJpbnRfc3BlZWQobG93ZXN0X3NwZWVkLzEwMDApLAogCQkgcHJpbnRfc3BlZWQoaGlnaGVzdF9zcGVlZC8xMDAwKSk7CiAKIAlpZiAobG93ZXN0X3NwZWVkID09IGhpZ2hlc3Rfc3BlZWQpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJoaWdoZXN0c3BlZWQgPT0gbG93ZXN0LCBhYm9ydGluZy5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGlnaGVzdHNwZWVkID09IGxvd2VzdCwgYWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChsb3dlc3Rfc3BlZWQgPiBoaWdoZXN0X3NwZWVkKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAibm9uc2Vuc2UhIGxvd2VzdCAoJWQgPiAlZCkgIVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIm5vbnNlbnNlISBsb3dlc3QgKCVkID4gJWQpICFcbiIsCiAJCQlsb3dlc3Rfc3BlZWQsIGhpZ2hlc3Rfc3BlZWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlsb25naGF1bF90YWJsZSA9IGttYWxsb2MoKG51bXNjYWxlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSksIEdGUF9LRVJORUwpOwotCWlmKCFsb25naGF1bF90YWJsZSkKKwlsb25naGF1bF90YWJsZSA9IGttYWxsb2MoKG51bXNjYWxlcyArIDEpICogc2l6ZW9mKCpsb25naGF1bF90YWJsZSksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWxvbmdoYXVsX3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaiA9IDA7IGogPCBudW1zY2FsZXM7IGorKykgewotCQlyYXRpbyA9IGNsb2NrX3JhdGlvW2pdOworCQlyYXRpbyA9IG11bHRzW2pdOwogCQlpZiAocmF0aW8gPT0gLTEpCiAJCQljb250aW51ZTsKIAkJaWYgKHJhdGlvID4gbWF4bXVsdCB8fCByYXRpbyA8IG1pbm11bHQpCkBAIC01MDcsMTMgKzUxMSwxMCBAQAogCQkJfQogCQl9CiAJCWlmIChtaW5faSAhPSBqKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdGVtcDsKLQkJCXRlbXAgPSBsb25naGF1bF90YWJsZVtqXS5mcmVxdWVuY3k7Ci0JCQlsb25naGF1bF90YWJsZVtqXS5mcmVxdWVuY3kgPSBsb25naGF1bF90YWJsZVttaW5faV0uZnJlcXVlbmN5OwotCQkJbG9uZ2hhdWxfdGFibGVbbWluX2ldLmZyZXF1ZW5jeSA9IHRlbXA7Ci0JCQl0ZW1wID0gbG9uZ2hhdWxfdGFibGVbal0uaW5kZXg7Ci0JCQlsb25naGF1bF90YWJsZVtqXS5pbmRleCA9IGxvbmdoYXVsX3RhYmxlW21pbl9pXS5pbmRleDsKLQkJCWxvbmdoYXVsX3RhYmxlW21pbl9pXS5pbmRleCA9IHRlbXA7CisJCQlzd2FwKGxvbmdoYXVsX3RhYmxlW2pdLmZyZXF1ZW5jeSwKKwkJCSAgICAgbG9uZ2hhdWxfdGFibGVbbWluX2ldLmZyZXF1ZW5jeSk7CisJCQlzd2FwKGxvbmdoYXVsX3RhYmxlW2pdLmluZGV4LAorCQkJICAgICBsb25naGF1bF90YWJsZVttaW5faV0uaW5kZXgpOwogCQl9CiAJfQogCkBAIC01MjEsNyArNTIyLDcgQEAKIAogCS8qIEZpbmQgaW5kZXggd2UgYXJlIHJ1bm5pbmcgb24gKi8KIAlmb3IgKGogPSAwOyBqIDwgazsgaisrKSB7Ci0JCWlmIChjbG9ja19yYXRpb1tsb25naGF1bF90YWJsZVtqXS5pbmRleCAmIDB4MWZdID09IG11bHQpIHsKKwkJaWYgKG11bHRzW2xvbmdoYXVsX3RhYmxlW2pdLmluZGV4ICYgMHgxZl0gPT0gbXVsdCkgewogCQkJbG9uZ2hhdWxfaW5kZXggPSBqOwogCQkJYnJlYWs7CiAJCX0KQEAgLTU1OSwyMCArNTYwLDIyIEBACiAJbWF4dmlkID0gdnJtX21WX3RhYmxlW2xvbmdoYXVsLmJpdHMuTWF4aW11bVZJRF07CiAKIAlpZiAobWludmlkLm1WID09IDAgfHwgbWF4dmlkLm1WID09IDAgfHwgbWludmlkLm1WID4gbWF4dmlkLm1WKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiQm9ndXMgdmFsdWVzIE1pbjolZC4lMDNkIE1heDolZC4lMDNkLiAiCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJCb2d1cyB2YWx1ZXMgTWluOiVkLiUwM2QgTWF4OiVkLiUwM2QuICIKIAkJCQkJIlZvbHRhZ2Ugc2NhbGluZyBkaXNhYmxlZC5cbiIsCi0JCQkJCW1pbnZpZC5tVi8xMDAwLCBtaW52aWQubVYlMTAwMCwgbWF4dmlkLm1WLzEwMDAsIG1heHZpZC5tViUxMDAwKTsKKwkJCQkJbWludmlkLm1WLzEwMDAsIG1pbnZpZC5tViUxMDAwLAorCQkJCQltYXh2aWQubVYvMTAwMCwgbWF4dmlkLm1WJTEwMDApOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKG1pbnZpZC5tViA9PSBtYXh2aWQubVYpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJDbGFpbXMgdG8gc3VwcG9ydCB2b2x0YWdlIHNjYWxpbmcgYnV0IG1pbiAmIG1heCBhcmUgIgotCQkJCSJib3RoICVkLiUwM2QuIFZvbHRhZ2Ugc2NhbGluZyBkaXNhYmxlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNsYWltcyB0byBzdXBwb3J0IHZvbHRhZ2Ugc2NhbGluZyBidXQgIgorCQkJCSJtaW4gJiBtYXggYXJlIGJvdGggJWQuJTAzZC4gIgorCQkJCSJWb2x0YWdlIHNjYWxpbmcgZGlzYWJsZWRcbiIsCiAJCQkJbWF4dmlkLm1WLzEwMDAsIG1heHZpZC5tViUxMDAwKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qIEhvdyBtYW55IHZvbHRhZ2Ugc3RlcHMgKi8KKwkvKiBIb3cgbWFueSB2b2x0YWdlIHN0ZXBzKi8KIAludW12c2NhbGVzID0gbWF4dmlkLnBvcyAtIG1pbnZpZC5wb3MgKyAxOwogCXByaW50ayhLRVJOX0lORk8gUEZYCiAJCSJNYXggVklEPSVkLiUwM2QgICIKQEAgLTU4Niw3ICs1ODksNyBAQAogCWogPSBsb25naGF1bC5iaXRzLk1pbk1IekJSOwogCWlmIChsb25naGF1bC5iaXRzLk1pbk1IekJSNCkKIAkJaiArPSAxNjsKLQltaW5fdmlkX3NwZWVkID0gZWJsY3JfdGFibGVbal07CisJbWluX3ZpZF9zcGVlZCA9IGVibGNyW2pdOwogCWlmIChtaW5fdmlkX3NwZWVkID09IC0xKQogCQlyZXR1cm47CiAJc3dpdGNoIChsb25naGF1bC5iaXRzLk1pbk1IekZTQikgewpAQCAtNjE3LDcgKzYyMCw4IEBACiAJCQlwb3MgPSBtaW52aWQucG9zOwogCQlsb25naGF1bF90YWJsZVtqXS5pbmRleCB8PSBtVl92cm1fdGFibGVbcG9zXSA8PCA4OwogCQl2aWQgPSB2cm1fbVZfdGFibGVbbVZfdnJtX3RhYmxlW3Bvc11dOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZjogJWQga0h6LCBpbmRleDogJWQsIHZpZDogJWQgbVZcbiIsIHNwZWVkLCBqLCB2aWQubVYpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZjogJWQga0h6LCBpbmRleDogJWQsIHZpZDogJWQgbVZcbiIsCisJCQkJc3BlZWQsIGosIHZpZC5tVik7CiAJCWorKzsKIAl9CiAKQEAgLTY0MCw3ICs2NDQsOCBAQAogCXVuc2lnbmVkIGludCBkaXIgPSAwOwogCXU4IHZpZCwgY3VycmVudF92aWQ7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgbG9uZ2hhdWxfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJnRhYmxlX2luZGV4KSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgbG9uZ2hhdWxfdGFibGUsIHRhcmdldF9mcmVxLAorCQkJCXJlbGF0aW9uLCAmdGFibGVfaW5kZXgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIERvbid0IHNldCBzYW1lIGZyZXF1ZW5jeSBhZ2FpbiAqLwpAQCAtNjU2LDcgKzY2MSw4IEBACiAJCSAqIHRoaXMgaW4gaGFyZHdhcmUsIEMzIGlzIG9sZCBhbmQgd2UgbmVlZCB0byBkbyB0aGlzCiAJCSAqIGluIHNvZnR3YXJlLiAqLwogCQlpID0gbG9uZ2hhdWxfaW5kZXg7Ci0JCWN1cnJlbnRfdmlkID0gKGxvbmdoYXVsX3RhYmxlW2xvbmdoYXVsX2luZGV4XS5pbmRleCA+PiA4KSAmIDB4MWY7CisJCWN1cnJlbnRfdmlkID0gKGxvbmdoYXVsX3RhYmxlW2xvbmdoYXVsX2luZGV4XS5pbmRleCA+PiA4KTsKKwkJY3VycmVudF92aWQgJj0gMHgxZjsKIAkJaWYgKHRhYmxlX2luZGV4ID4gbG9uZ2hhdWxfaW5kZXgpCiAJCQlkaXIgPSAxOwogCQl3aGlsZSAoaSAhPSB0YWJsZV9pbmRleCkgewpAQCAtNjkxLDkgKzY5Nyw5IEBACiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkOwogCi0JaWYgKCBhY3BpX2J1c19nZXRfZGV2aWNlKG9ial9oYW5kbGUsICZkKSApIHsKKwlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShvYmpfaGFuZGxlLCAmZCkpCiAJCXJldHVybiAwOwotCX0KKwogCSpyZXR1cm5fdmFsdWUgPSBhY3BpX2RyaXZlcl9kYXRhKGQpOwogCXJldHVybiAxOwogfQpAQCAtNzUwLDcgKzc1Niw3IEBACiAJLyogRmluZCBWVDgyMzUgc291dGhicmlkZ2UgKi8KIAlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzNSwgTlVMTCk7CiAJaWYgKGRldiA9PSBOVUxMKQotCS8qIEZpbmQgVlQ4MjM3IHNvdXRoYnJpZGdlICovCisJCS8qIEZpbmQgVlQ4MjM3IHNvdXRoYnJpZGdlICovCiAJCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLAogCQkJCSAgICAgUENJX0RFVklDRV9JRF9WSUFfODIzNywgTlVMTCk7CiAJaWYgKGRldiAhPSBOVUxMKSB7CkBAIC03NjksNyArNzc1LDggQEAKIAkJaWYgKHBjaV9jbWQgJiAxIDw8IDcpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4ODgsICZhY3BpX3JlZ3NfYWRkcik7CiAJCQlhY3BpX3JlZ3NfYWRkciAmPSAweGZmMDA7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUNQSSBJL08gYXQgMHgleFxuIiwgYWNwaV9yZWdzX2FkZHIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFDUEkgSS9PIGF0IDB4JXhcbiIsCisJCQkJCWFjcGlfcmVnc19hZGRyKTsKIAkJfQogCiAJCXBjaV9kZXZfcHV0KGRldik7CkBAIC03ODEsNyArNzg4LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGxvbmdoYXVsX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKLQljaGFyICpjcHVuYW1lPU5VTEw7CisJY2hhciAqY3B1bmFtZSA9IE5VTEw7CiAJaW50IHJldDsKIAl1MzIgbG8sIGhpOwogCkBAIC03OTEsOCArNzk4LDggQEAKIAkJY3B1X21vZGVsID0gQ1BVX1NBTVVFTDsKIAkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsJyBbQzVBXSI7CiAJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOwotCQltZW1jcHkgKGNsb2NrX3JhdGlvLCBzYW11ZWwxX2Nsb2NrX3JhdGlvLCBzaXplb2Yoc2FtdWVsMV9jbG9ja19yYXRpbykpOwotCQltZW1jcHkgKGVibGNyX3RhYmxlLCBzYW11ZWwxX2VibGNyLCBzaXplb2Yoc2FtdWVsMV9lYmxjcikpOworCQltZW1jcHkobXVsdHMsIHNhbXVlbDFfbXVsdHMsIHNpemVvZihzYW11ZWwxX211bHRzKSk7CisJCW1lbWNweShlYmxjciwgc2FtdWVsMV9lYmxjciwgc2l6ZW9mKHNhbXVlbDFfZWJsY3IpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDc6CkBAIC04MDMsMTAgKzgxMCw4IEBACiAJCQljcHVuYW1lID0gIkMzICdTYW11ZWwgMicgW0M1Ql0iOwogCQkJLyogTm90ZSwgdGhpcyBpcyBub3QgYSB0eXBvLCBlYXJseSBTYW11ZWwyJ3MgaGFkCiAJCQkgKiBTYW11ZWwxIHJhdGlvcy4gKi8KLQkJCW1lbWNweShjbG9ja19yYXRpbywgc2FtdWVsMV9jbG9ja19yYXRpbywKLQkJCQlzaXplb2Yoc2FtdWVsMV9jbG9ja19yYXRpbykpOwotCQkJbWVtY3B5KGVibGNyX3RhYmxlLCBzYW11ZWwyX2VibGNyLAotCQkJCXNpemVvZihzYW11ZWwyX2VibGNyKSk7CisJCQltZW1jcHkobXVsdHMsIHNhbXVlbDFfbXVsdHMsIHNpemVvZihzYW11ZWwxX211bHRzKSk7CisJCQltZW1jcHkoZWJsY3IsIHNhbXVlbDJfZWJsY3IsIHNpemVvZihzYW11ZWwyX2VibGNyKSk7CiAJCQlicmVhazsKIAkJY2FzZSAxIC4uLiAxNToKIAkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOwpAQCAtODE3LDEwICs4MjIsOCBAQAogCQkJCWNwdV9tb2RlbCA9IENQVV9FWlJBOwogCQkJCWNwdW5hbWUgPSAiQzMgJ0V6cmEnIFtDNUNdIjsKIAkJCX0KLQkJCW1lbWNweShjbG9ja19yYXRpbywgZXpyYV9jbG9ja19yYXRpbywKLQkJCQlzaXplb2YoZXpyYV9jbG9ja19yYXRpbykpOwotCQkJbWVtY3B5KGVibGNyX3RhYmxlLCBlenJhX2VibGNyLAotCQkJCXNpemVvZihlenJhX2VibGNyKSk7CisJCQltZW1jcHkobXVsdHMsIGV6cmFfbXVsdHMsIHNpemVvZihlenJhX211bHRzKSk7CisJCQltZW1jcHkoZWJsY3IsIGV6cmFfZWJsY3IsIHNpemVvZihlenJhX2VibGNyKSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTgyOSwxOCArODMyLDE2IEBACiAJCWNwdV9tb2RlbCA9IENQVV9FWlJBX1Q7CiAJCWNwdW5hbWUgPSAiQzMgJ0V6cmEtVCcgW0M1TV0iOwogCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9QT1dFUlNBVkVSOwotCQludW1zY2FsZXM9MzI7Ci0JCW1lbWNweSAoY2xvY2tfcmF0aW8sIGV6cmF0X2Nsb2NrX3JhdGlvLCBzaXplb2YoZXpyYXRfY2xvY2tfcmF0aW8pKTsKLQkJbWVtY3B5IChlYmxjcl90YWJsZSwgZXpyYXRfZWJsY3IsIHNpemVvZihlenJhdF9lYmxjcikpOworCQludW1zY2FsZXMgPSAzMjsKKwkJbWVtY3B5KG11bHRzLCBlenJhdF9tdWx0cywgc2l6ZW9mKGV6cmF0X211bHRzKSk7CisJCW1lbWNweShlYmxjciwgZXpyYXRfZWJsY3IsIHNpemVvZihlenJhdF9lYmxjcikpOwogCQlicmVhazsKIAogCWNhc2UgOToKIAkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfUE9XRVJTQVZFUjsKIAkJbnVtc2NhbGVzID0gMzI7Ci0JCW1lbWNweShjbG9ja19yYXRpbywKLQkJICAgICAgIG5laGVtaWFoX2Nsb2NrX3JhdGlvLAotCQkgICAgICAgc2l6ZW9mKG5laGVtaWFoX2Nsb2NrX3JhdGlvKSk7Ci0JCW1lbWNweShlYmxjcl90YWJsZSwgbmVoZW1pYWhfZWJsY3IsIHNpemVvZihuZWhlbWlhaF9lYmxjcikpOworCQltZW1jcHkobXVsdHMsIG5laGVtaWFoX211bHRzLCBzaXplb2YobmVoZW1pYWhfbXVsdHMpKTsKKwkJbWVtY3B5KGVibGNyLCBuZWhlbWlhaF9lYmxjciwgc2l6ZW9mKG5laGVtaWFoX2VibGNyKSk7CiAJCXN3aXRjaCAoYy0+eDg2X21hc2spIHsKIAkJY2FzZSAwIC4uLiAxOgogCQkJY3B1X21vZGVsID0gQ1BVX05FSEVNSUFIOwpAQCAtODY5LDE0ICs4NzAsMTQgQEAKIAkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOwogCX0KIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVklBICVzIENQVSBkZXRlY3RlZC4gICIsIGNwdW5hbWUpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJWSUEgJXMgQ1BVIGRldGVjdGVkLiAgIiwgY3B1bmFtZSk7CiAJc3dpdGNoIChsb25naGF1bF92ZXJzaW9uKSB7CiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YxOgogCWNhc2UgVFlQRV9MT05HSEFVTF9WMjoKLQkJcHJpbnRrICgiTG9uZ2hhdWwgdiVkIHN1cHBvcnRlZC5cbiIsIGxvbmdoYXVsX3ZlcnNpb24pOworCQlwcmludGsoS0VSTl9DT05UICJMb25naGF1bCB2JWQgc3VwcG9ydGVkLlxuIiwgbG9uZ2hhdWxfdmVyc2lvbik7CiAJCWJyZWFrOwogCWNhc2UgVFlQRV9QT1dFUlNBVkVSOgotCQlwcmludGsgKCJQb3dlcnNhdmVyIHN1cHBvcnRlZC5cbiIpOworCQlwcmludGsoS0VSTl9DT05UICJQb3dlcnNhdmVyIHN1cHBvcnRlZC5cbiIpOwogCQlicmVhazsKIAl9OwogCkBAIC05NDAsNyArOTQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIGxvbmdoYXVsX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpsb25naGF1bF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtOTY2LDEzICs5NjcsMTUgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIk1vcmUgdGhhbiAxIENQVSBkZXRlY3RlZCwgbG9uZ2hhdWwgZGlzYWJsZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTW9yZSB0aGFuIDEgQ1BVIGRldGVjdGVkLCAiCisJCQkJImxvbmdoYXVsIGRpc2FibGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCWlmIChjcHVfaGFzX2FwaWMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQVBJQyBkZXRlY3RlZC4gTG9uZ2hhdWwgaXMgY3VycmVudGx5IGJyb2tlbiBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQVBJQyBkZXRlY3RlZC4gTG9uZ2hhdWwgaXMgY3VycmVudGx5ICIKKwkJCQkiYnJva2VuIGluIHRoaXMgY29uZmlndXJhdGlvbi5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjZW5kaWYKQEAgLTk5Myw4ICs5OTYsOCBAQAogewogCWludCBpOwogCi0JZm9yIChpPTA7IGkgPCBudW1zY2FsZXM7IGkrKykgewotCQlpZiAoY2xvY2tfcmF0aW9baV0gPT0gbWF4bXVsdCkgeworCWZvciAoaSA9IDA7IGkgPCBudW1zY2FsZXM7IGkrKykgeworCQlpZiAobXVsdHNbaV0gPT0gbWF4bXVsdCkgewogCQkJbG9uZ2hhdWxfc2V0c3RhdGUoaSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTAwNywxMSArMTAxMCwxMSBAQAogLyogRXZlbiBpZiBCSU9TIGlzIGV4cG9ydGluZyBBQ1BJIEMzIHN0YXRlLCBhbmQgaXQgaXMgdXNlZAogICogd2l0aCBzdWNjZXNzIHdoZW4gQ1BVIGlzIGlkbGUsIHRoaXMgc3RhdGUgZG9lc24ndAogICogdHJpZ2dlciBmcmVxdWVuY3kgdHJhbnNpdGlvbiBpbiBzb21lIGNhc2VzLiAqLwotbW9kdWxlX3BhcmFtIChkaXNhYmxlX2FjcGlfYzMsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9hY3BpX2MzLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2FjcGlfYzMsICJEb24ndCB1c2UgQUNQSSBDMyBzdXBwb3J0Iik7CiAvKiBDaGFuZ2UgQ1BVIHZvbHRhZ2Ugd2l0aCBmcmVxdWVuY3kuIFZlcnkgdXNlZnVsbCB0byBzYXZlCiAgKiBwb3dlciwgYnV0IG1vc3QgVklBIEMzIHByb2Nlc3NvcnMgYXJlbid0IHN1cHBvcnRpbmcgaXQuICovCi1tb2R1bGVfcGFyYW0gKHNjYWxlX3ZvbHRhZ2UsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oc2NhbGVfdm9sdGFnZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NhbGVfdm9sdGFnZSwgIlNjYWxlIHZvbHRhZ2Ugb2YgcHJvY2Vzc29yIik7CiAvKiBGb3JjZSByZXZpc2lvbiBrZXkgdG8gMCBmb3IgcHJvY2Vzc29ycyB3aGljaCBkb2Vzbid0CiAgKiBzdXBwb3J0IHZvbHRhZ2Ugc2NhbGluZywgYnV0IGFyZSBpbnRyb2R1Y2luZyBpdHNlbGYgYXMKQEAgLTEwMTksOSArMTAyMiw5IEBACiBtb2R1bGVfcGFyYW0ocmV2aWRfZXJyYXRhLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZXZpZF9lcnJhdGEsICJJZ25vcmUgQ1BVIFJldmlzaW9uIElEIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiTG9uZ2hhdWwgZHJpdmVyIGZvciBWSUEgQ3lyaXggcHJvY2Vzc29ycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMb25naGF1bCBkcml2ZXIgZm9yIFZJQSBDeXJpeCBwcm9jZXNzb3JzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKGxvbmdoYXVsX2luaXQpOwogbW9kdWxlX2V4aXQobG9uZ2hhdWxfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCmluZGV4IDRmY2MzMjAuLmUyMzYwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCkBAIC00OSwxNCArNDksMTQgQEAKIAogLyoKICAqIENsb2NrIHJhdGlvIHRhYmxlcy4gRGl2L01vZCBieSAxMCB0byBnZXQgcmF0aW8uCi0gKiBUaGUgZWJsY3Igb25lcyBzcGVjaWZ5IHRoZSByYXRpbyByZWFkIGZyb20gdGhlIENQVS4KLSAqIFRoZSBjbG9ja19yYXRpbyBvbmVzIHNwZWNpZnkgd2hhdCB0byB3cml0ZSB0byB0aGUgQ1BVLgorICogVGhlIGVibGNyIHZhbHVlcyBzcGVjaWZ5IHRoZSByYXRpbyByZWFkIGZyb20gdGhlIENQVS4KKyAqIFRoZSBtdWx0cyB2YWx1ZXMgc3BlY2lmeSB3aGF0IHRvIHdyaXRlIHRvIHRoZSBDUFUuCiAgKi8KIAogLyoKICAqIFZJQSBDMyBTYW11ZWwgMSAgJiBTYW11ZWwgMiAoc3RlcHBpbmcgMCkKICAqLwotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIHNhbXVlbDFfY2xvY2tfcmF0aW9bMTZdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIHNhbXVlbDFfbXVsdHNbMTZdID0gewogCS0xLCAvKiAwMDAwIC0+IFJFU0VSVkVEICovCiAJMzAsIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtMTE5LDcgKzExOSw3IEBACiAvKgogICogVklBIEMzIEV6cmEKICAqLwotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmFfY2xvY2tfcmF0aW9bMTZdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmFfbXVsdHNbMTZdID0gewogCTEwMCwgLyogMDAwMCAtPiAxMC4weCAqLwogCTMwLCAgLyogMDAwMSAtPiAgMy4weCAqLwogCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtMTYwLDcgKzE2MCw3IEBACiAvKgogICogVklBIEMzIChFenJhLVQpIFtDNU1dLgogICovCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYXRfY2xvY2tfcmF0aW9bMzJdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmF0X211bHRzWzMyXSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTIzNSw3ICsyMzUsNyBAQAogLyoKICAqIFZJQSBDMyBOZWhlbWlhaCAqLwogCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgIG5laGVtaWFoX2Nsb2NrX3JhdGlvWzMyXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSAgbmVoZW1pYWhfbXVsdHNbMzJdID0gewogCTEwMCwgLyogMDAwMCAtPiAxMC4weCAqLwogCS0xLCAvKiAwMDAxIC0+IDE2LjB4ICovCiAJNDAsICAvKiAwMDEwIC0+ICA0LjB4ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwppbmRleCA3NzdhN2ZmLi5kYTVmNzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKQEAgLTExLDEyICsxMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImxvbmdydW4iLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkibG9uZ3J1biIsIG1zZykKIAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlcglsb25ncnVuX2RyaXZlcjsKIApAQCAtNTEsNyArNTIsNyBAQAogCW1zcl9sbyAmPSAweDAwMDAwMDdGOwogCW1zcl9oaSAmPSAweDAwMDAwMDdGOwogCi0JaWYgKCBsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxICkgeworCWlmIChsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxKSB7CiAJCS8qIEFzc3VtZSBkZWdlbmVyYXRlIExvbmdydW4gdGFibGUgKi8KIAkJcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IGxvbmdydW5faGlnaF9mcmVxOwogCX0gZWxzZSB7CkBAIC03OSw3ICs4MCw3IEBACiAJaWYgKCFwb2xpY3kpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCBsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxICkgeworCWlmIChsb25ncnVuX2hpZ2hfZnJlcSA8PSBsb25ncnVuX2xvd19mcmVxKSB7CiAJCS8qIEFzc3VtZSBkZWdlbmVyYXRlIExvbmdydW4gdGFibGUgKi8KIAkJcGN0Z19sbyA9IHBjdGdfaGkgPSAxMDA7CiAJfSBlbHNlIHsKQEAgLTE1Miw3ICsxNTMsNyBAQAogCWNwdWlkKDB4ODA4NjAwMDcsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCWRwcmludGsoImNwdWlkIGVheCBpcyAldVxuIiwgZWF4KTsKIAotCXJldHVybiAoZWF4ICogMTAwMCk7CisJcmV0dXJuIGVheCAqIDEwMDA7CiB9CiAKIC8qKgpAQCAtMTk2LDcgKzE5Nyw4IEBACiAJCXJkbXNyKE1TUl9UTVRBX0xSVElfVk9MVF9NSFosIG1zcl9sbywgbXNyX2hpKTsKIAkJKmhpZ2hfZnJlcSA9IG1zcl9sbyAqIDEwMDA7IC8qIHRvIGtIeiAqLwogCi0JCWRwcmludGsoImxvbmdydW4gdGFibGUgaW50ZXJmYWNlIHRvbGQgJXUgLSAldSBrSHpcbiIsICpsb3dfZnJlcSwgKmhpZ2hfZnJlcSk7CisJCWRwcmludGsoImxvbmdydW4gdGFibGUgaW50ZXJmYWNlIHRvbGQgJXUgLSAldSBrSHpcbiIsCisJCQkJKmxvd19mcmVxLCAqaGlnaF9mcmVxKTsKIAogCQlpZiAoKmxvd19mcmVxID4gKmhpZ2hfZnJlcSkKIAkJCSpsb3dfZnJlcSA9ICpoaWdoX2ZyZXE7CkBAIC0yMTksNyArMjIxLDcgQEAKIAljcHVpZCgweDgwODYwMDA3LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAkvKiB0cnkgZGVjcmVhc2luZyBpbiAxMCUgc3RlcHMsIHNvbWUgcHJvY2Vzc29ycyByZWFjdCBvbmx5CiAJICogb24gc29tZSBiYXJyaWVyIHZhbHVlcyAqLwotCWZvciAodHJ5X2hpID0gODA7IHRyeV9oaSA+IDAgJiYgZWN4ID4gOTA7IHRyeV9oaSAtPTEwKSB7CisJZm9yICh0cnlfaGkgPSA4MDsgdHJ5X2hpID4gMCAmJiBlY3ggPiA5MDsgdHJ5X2hpIC09IDEwKSB7CiAJCS8qIHNldCB0byAwIHRvIHRyeV9oaSBwZXJmX3BjdGcgKi8KIAkJbXNyX2xvICY9IDB4RkZGRkZGODA7CiAJCW1zcl9oaSAmPSAweEZGRkZGRjgwOwpAQCAtMjM2LDcgKzIzOCw3IEBACiAKIAkvKiBwZXJmb3JtYW5jZV9wY3RnID0gKGN1cnJlbnRfZnJlcSAtIGxvd19mcmVxKS8oaGlnaF9mcmVxIC0gbG93X2ZyZXEpCiAJICogZXFhbHMKLQkgKiBsb3dfZnJlcSAqICggMSAtIHBlcmZfcGN0ZykgPSAoY3VyX2ZyZXEgLSBoaWdoX2ZyZXEgKiBwZXJmX3BjdGcpCisJICogbG93X2ZyZXEgKiAoMSAtIHBlcmZfcGN0ZykgPSAoY3VyX2ZyZXEgLSBoaWdoX2ZyZXEgKiBwZXJmX3BjdGcpCiAJICoKIAkgKiBoaWdoX2ZyZXEgKiBwZXJmX3BjdGcgaXMgc3RvcmVkIHRlbXBvYXJpbHkgaW50byAiZWJ4Ii4KIAkgKi8KQEAgLTMxNyw5ICszMTksMTAgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiTG9uZ1J1biBkcml2ZXIgZm9yIFRyYW5zbWV0YSBDcnVzb2UgYW5kIEVmZmljZW9uIHByb2Nlc3NvcnMuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMb25nUnVuIGRyaXZlciBmb3IgVHJhbnNtZXRhIENydXNvZSBhbmQgIgorCQkiRWZmaWNlb24gcHJvY2Vzc29ycy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQobG9uZ3J1bl9pbml0KTsKIG1vZHVsZV9leGl0KGxvbmdydW5fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IDMxNzhjM2EuLjQxZWQ5NDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0yNywxNSArMjcsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KIAogI2luY2x1ZGUgInNwZWVkc3RlcC1saWIuaCIKIAogI2RlZmluZSBQRlgJInA0LWNsb2NrbW9kOiAiCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInA0LWNsb2NrbW9kIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInA0LWNsb2NrbW9kIiwgbXNnKQogCiAvKgogICogRHV0eSBDeWNsZSAoM2JpdHMpLCBub3RlIERDX0RJU0FCTEUgaXMgbm90IHNwZWNpZmllZCBpbgpAQCAtNTgsNyArNjAsOCBAQAogewogCXUzMiBsLCBoOwogCi0JaWYgKCFjcHVfb25saW5lKGNwdSkgfHwgKG5ld3N0YXRlID4gRENfRElTQUJMRSkgfHwgKG5ld3N0YXRlID09IERDX1JFU1YpKQorCWlmICghY3B1X29ubGluZShjcHUpIHx8CisJICAgIChuZXdzdGF0ZSA+IERDX0RJU0FCTEUpIHx8IChuZXdzdGF0ZSA9PSBEQ19SRVNWKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZG1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9USEVSTV9TVEFUVVMsICZsLCAmaCk7CkBAIC02Niw3ICs2OSw4IEBACiAJaWYgKGwgJiAweDAxKQogCQlkcHJpbnRrKCJDUFUjJWQgY3VycmVudGx5IHRoZXJtYWwgdGhyb3R0bGVkXG4iLCBjcHUpOwogCi0JaWYgKGhhc19ONDRfTzE3X2VycmF0YVtjcHVdICYmIChuZXdzdGF0ZSA9PSBEQ18yNVBUIHx8IG5ld3N0YXRlID09IERDX0RGTFQpKQorCWlmIChoYXNfTjQ0X08xN19lcnJhdGFbY3B1XSAmJgorCSAgICAobmV3c3RhdGUgPT0gRENfMjVQVCB8fCBuZXdzdGF0ZSA9PSBEQ19ERkxUKSkKIAkJbmV3c3RhdGUgPSBEQ18zOFBUOwogCiAJcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEhFUk1fQ09OVFJPTCwgJmwsICZoKTsKQEAgLTExMiw3ICsxMTYsOCBAQAogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCWludCBpOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmcmVxcy5vbGQgPSBjcHVmcmVxX3A0X2dldChwb2xpY3ktPmNwdSk7CkBAIC0xMjcsNyArMTMyLDggQEAKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAl9CiAKLQkvKiBydW4gb24gZWFjaCBsb2dpY2FsIENQVSwgc2VlIHNlY3Rpb24gMTMuMTUuMyBvZiBJQTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZQorCS8qIHJ1biBvbiBlYWNoIGxvZ2ljYWwgQ1BVLAorCSAqIHNlZSBzZWN0aW9uIDEzLjE1LjMgb2YgSUEzMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUKIAkgKiBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAzCiAJICovCiAJZm9yX2VhY2hfY3B1KGksIHBvbGljeS0+Y3B1cykKQEAgLTE1MywyOCArMTU5LDMwIEBACiB7CiAJaWYgKGMtPng4NiA9PSAweDA2KSB7CiAJCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgQ1BVIGRldGVjdGVkLiAiCi0JCQkgICAgICAgIlRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyB2b2x0YWdlIHNjYWxpbmciCi0JCQkgICAgICAgIiBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgc2NhbGluZy4gWW91IHNob3VsZCB1c2UgIgotCQkJICAgICAgICJ0aGF0IGluc3RlYWQgb2YgcDQtY2xvY2ttb2QsIGlmIHBvc3NpYmxlLlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgQ1BVICIKKwkJCSAgICAgICAiZGV0ZWN0ZWQuIFRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyAiCisJCQkgICAgICAgInZvbHRhZ2Ugc2NhbGluZyBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgIgorCQkJICAgICAgICJzY2FsaW5nLiBZb3Ugc2hvdWxkIHVzZSB0aGF0IGluc3RlYWQgb2YgIgorCQkJICAgICAgICJwNC1jbG9ja21vZCwgaWYgcG9zc2libGUuXG4iKTsKIAkJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAkJY2FzZSAweDBFOiAvKiBDb3JlICovCiAJCWNhc2UgMHgwRjogLyogQ29yZSBEdW8gKi8KIAkJY2FzZSAweDE2OiAvKiBDZWxlcm9uIENvcmUgKi8KIAkJCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7Ci0JCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUENPUkUpOworCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUENPUkUpOwogCQljYXNlIDB4MEQ6IC8qIFBlbnRpdW0gTSAoRG90aGFuKSAqLwogCQkJcDRjbG9ja21vZF9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIDB4MDk6IC8qIFBlbnRpdW0gTSAoQmFuaWFzKSAqLwotCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1BNKTsKKwkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1BNKTsKIAkJfQogCX0KIAogCWlmIChjLT54ODYgIT0gMHhGKSB7CiAJCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gcDQtY2xvY2ttb2QtY2FwYWJsZSBDUFUuICIKLQkJCQkiUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxjcHVmcmVxQHZnZXIua2VybmVsLm9yZz5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gQ1BVLiAiCisJCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byAiCisJCQkJIjxjcHVmcmVxQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE4MiwxNiArMTkwLDE2IEBACiAJICogdGhyb3R0bGluZyBpcyBhY3RpdmUgb3Igbm90LiAqLwogCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7CiAKLQlpZiAoc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKSA9PSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TSkgeworCWlmIChzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpID09IFNQRUVEU1RFUF9DUFVfUDRNKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBQZW50aXVtIDQtTSBkZXRlY3RlZC4gIgogCQkgICAgICAgIlRoZSBzcGVlZHN0ZXAtaWNoIG9yIGFjcGkgY3B1ZnJlcSBtb2R1bGVzIG9mZmVyICIKIAkJICAgICAgICJ2b2x0YWdlIHNjYWxpbmcgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5IHNjYWxpbmcuICIKIAkJICAgICAgICJZb3Ugc2hvdWxkIHVzZSBlaXRoZXIgb25lIGluc3RlYWQgb2YgcDQtY2xvY2ttb2QsICIKIAkJICAgICAgICJpZiBwb3NzaWJsZS5cbiIpOwotCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNKTsKKwkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUDRNKTsKIAl9CiAKLQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUDREKTsKKwlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koU1BFRURTVEVQX0NQVV9QNEQpOwogfQogCiAKQEAgLTIxNywxNCArMjI1LDIwIEBACiAJCWRwcmludGsoImhhcyBlcnJhdGEgLS0gZGlzYWJsaW5nIGxvdyBmcmVxdWVuY2llc1xuIik7CiAJfQogCisJaWYgKHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkgPT0gU1BFRURTVEVQX0NQVV9QNEQgJiYKKwkgICAgYy0+eDg2X21vZGVsIDwgMikgeworCQkvKiBzd2l0Y2ggdG8gbWF4aW11bSBmcmVxdWVuY3kgYW5kIG1lYXN1cmUgcmVzdWx0ICovCisJCWNwdWZyZXFfcDRfc2V0ZGMocG9saWN5LT5jcHUsIERDX0RJU0FCTEUpOworCQlyZWNhbGlicmF0ZV9jcHVfa2h6KCk7CisJfQogCS8qIGdldCBtYXggZnJlcXVlbmN5ICovCiAJc3RvY2tfZnJlcSA9IGNwdWZyZXFfcDRfZ2V0X2ZyZXF1ZW5jeShjKTsKIAlpZiAoIXN0b2NrX2ZyZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogdGFibGUgaW5pdCAqLwotCWZvciAoaT0xOyAocDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKLQkJaWYgKChpPDIpICYmIChoYXNfTjQ0X08xN19lcnJhdGFbcG9saWN5LT5jcHVdKSkKKwlmb3IgKGkgPSAxOyAocDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwkJaWYgKChpIDwgMikgJiYgKGhhc19ONDRfTzE3X2VycmF0YVtwb2xpY3ktPmNwdV0pKQogCQkJcDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CiAJCWVsc2UKIAkJCXA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ID0gKHN0b2NrX2ZyZXEgKiBpKS84OwpAQCAtMjMyLDcgKzI0NiwxMCBAQAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHA0Y2xvY2ttb2RfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwOyAvKiBhc3N1bWVkICovCisKKwkvKiB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5IGlzIHNldCB0byBiZSAxIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtCisJICogdHJhbnNpdGlvbiBsYXRlbmN5IG9mIHRoZSBvbmRlbWFuZCBnb3Zlcm5vciAqLworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwMTsKIAlwb2xpY3ktPmN1ciA9IHN0b2NrX2ZyZXE7CiAKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksICZwNGNsb2NrbW9kX3RhYmxlWzBdKTsKQEAgLTI1OCwxMiArMjc1LDEyIEBACiAJCWwgPSBEQ19ESVNBQkxFOwogCiAJaWYgKGwgIT0gRENfRElTQUJMRSkKLQkJcmV0dXJuIChzdG9ja19mcmVxICogbCAvIDgpOworCQlyZXR1cm4gc3RvY2tfZnJlcSAqIGwgLyA4OwogCiAJcmV0dXJuIHN0b2NrX2ZyZXE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBwNGNsb2NrbW9kX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpwNGNsb2NrbW9kX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0yOTgsOSArMzE1LDEwIEBACiAKIAlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmcDRjbG9ja21vZF9kcml2ZXIpOwogCWlmICghcmV0KQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUDQvWGVvbihUTSkgQ1BVIE9uLURlbWFuZCBDbG9jayBNb2R1bGF0aW9uIGF2YWlsYWJsZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJQNC9YZW9uKFRNKSBDUFUgT24tRGVtYW5kIENsb2NrICIKKwkJCQkiTW9kdWxhdGlvbiBhdmFpbGFibGVcbiIpOwogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMzEwLDkgKzMyOCw5IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIlp3YW5lIE13YWlrYW1ibyA8endhbmVAY29tbWZpcmVzZXJ2aWNlcy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJjcHVmcmVxIGRyaXZlciBmb3IgUGVudGl1bShUTSkgNC9YZW9uKFRNKSIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlp3YW5lIE13YWlrYW1ibyA8endhbmVAY29tbWZpcmVzZXJ2aWNlcy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNwdWZyZXEgZHJpdmVyIGZvciBQZW50aXVtKFRNKSA0L1hlb24oVE0pIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIGxhdGVfaW5pdGNhbGwoY3B1ZnJlcV9wNF9pbml0KTsKIG1vZHVsZV9leGl0KGNwdWZyZXFfcDRfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCmluZGV4IGMxYWM1NzkuLmYxMGRlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqICBUaGlzIGZpbGUgd2FzIGJhc2VkIHVwb24gY29kZSBpbiBQb3dlcnR3ZWFrIExpbnV4IChodHRwOi8vcG93ZXJ0d2Vhay5zZi5uZXQpCi0gKiAgKEMpIDIwMDAtMjAwMyAgRGF2ZSBKb25lcywgQXJqYW4gdmFuIGRlIFZlbiwgSmFubmUgUMOkbmvDpGzDpCwgRG9taW5payBCcm9kb3dza2kuCisgKiAgKEMpIDIwMDAtMjAwMyAgRGF2ZSBKb25lcywgQXJqYW4gdmFuIGRlIFZlbiwgSmFubmUgUMOkbmvDpGzDpCwKKyAqICAgICAgICAgICAgICAgICBEb21pbmlrIEJyb2Rvd3NraS4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgogICoKQEAgLTEzLDE0ICsxNCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL21zci5oPgorCiAjZGVmaW5lIFBPV0VSTk9XX0lPUE9SVCAweGZmZjAgICAgICAgICAgLyogaXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUsIGFzIGxvbmcKIAkJCQkJICAgYXMgaXQgaXMgdW51c2VkICovCiAKKyNkZWZpbmUgUEZYICJwb3dlcm5vdy1rNjogIgogc3RhdGljIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgIGJ1c2ZyZXE7ICAgLyogRlNCLCBpbiAxMCBrSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICBtYXhfbXVsdGlwbGllcjsKIApAQCAtNDcsOCArNDksOCBAQAogICovCiBzdGF0aWMgaW50IHBvd2Vybm93X2s2X2dldF9jcHVfbXVsdGlwbGllcih2b2lkKQogewotCXU2NCAgICAgICAgICAgICBpbnZhbHVlID0gMDsKLQl1MzIgICAgICAgICAgICAgbXNydmFsOworCXU2NCBpbnZhbHVlID0gMDsKKwl1MzIgbXNydmFsOwogCiAJbXNydmFsID0gUE9XRVJOT1dfSU9QT1JUICsgMHgxOwogCXdybXNyKE1TUl9LNl9FUE1SLCBtc3J2YWwsIDApOyAvKiBlbmFibGUgdGhlIFBvd2VyTm93IHBvcnQgKi8KQEAgLTY4LDEyICs3MCwxMiBAQAogICovCiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rNl9zZXRfc3RhdGUodW5zaWduZWQgaW50IGJlc3RfaSkKIHsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICBvdXR2YWx1ZSA9IDAsIGludmFsdWUgPSAwOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIG1zcnZhbDsKLQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAgICBmcmVxczsKKwl1bnNpZ25lZCBsb25nIG91dHZhbHVlID0gMCwgaW52YWx1ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBtc3J2YWw7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAKIAlpZiAoY2xvY2tfcmF0aW9bYmVzdF9pXS5pbmRleCA+IG1heF9tdWx0aXBsaWVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogaW52YWxpZCB0YXJnZXQgZnJlcXVlbmN5XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCB0YXJnZXQgZnJlcXVlbmN5XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTE5LDcgKzEyMSw4IEBACiAgKiBwb3dlcm5vd19rNl9zZXRwb2xpY3kgLSBzZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5CiAgKiBAcG9saWN5OiBuZXcgcG9saWN5CiAgKiBAdGFyZ2V0X2ZyZXE6IHRoZSB0YXJnZXQgZnJlcXVlbmN5Ci0gKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeSAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKKyAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5CisgKiAgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogc2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeQogICovCkBAIC0xMjcsOSArMTMwLDEwIEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKLQl1bnNpZ25lZCBpbnQgICAgbmV3c3RhdGUgPSAwOworCXVuc2lnbmVkIGludCBuZXdzdGF0ZSA9IDA7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJmNsb2NrX3JhdGlvWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZjbG9ja19yYXRpb1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcG93ZXJub3dfazZfc2V0X3N0YXRlKG5ld3N0YXRlKTsKQEAgLTE0MCw3ICsxNDQsNyBAQAogCiBzdGF0aWMgaW50IHBvd2Vybm93X2s2X2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBpLCBmOwogCWludCByZXN1bHQ7CiAKIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKQEAgLTE1MiwxMCArMTU2LDExIEBACiAKIAkvKiB0YWJsZSBpbml0ICovCiAJZm9yIChpID0gMDsgKGNsb2NrX3JhdGlvW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewotCQlpZiAoY2xvY2tfcmF0aW9baV0uaW5kZXggPiBtYXhfbXVsdGlwbGllcikKKwkJZiA9IGNsb2NrX3JhdGlvW2ldLmluZGV4OworCQlpZiAoZiA+IG1heF9tdWx0aXBsaWVyKQogCQkJY2xvY2tfcmF0aW9baV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOwogCQllbHNlCi0JCQljbG9ja19yYXRpb1tpXS5mcmVxdWVuY3kgPSBidXNmcmVxICogY2xvY2tfcmF0aW9baV0uaW5kZXg7CisJCQljbG9ja19yYXRpb1tpXS5mcmVxdWVuY3kgPSBidXNmcmVxICogZjsKIAl9CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KQEAgLTE4NSw3ICsxOTAsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vybm93X2s2X2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXJldHVybiBidXNmcmVxICogcG93ZXJub3dfazZfZ2V0X2NwdV9tdWx0aXBsaWVyKCk7CisJdW5zaWduZWQgaW50IHJldDsKKwlyZXQgPSAoYnVzZnJlcSAqIHBvd2Vybm93X2s2X2dldF9jcHVfbXVsdGlwbGllcigpKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcG93ZXJub3dfazZfYXR0cltdID0gewpAQCAtMjIxLDcgKzIyOCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihQT1dFUk5PV19JT1BPUlQsIDE2LCAiUG93ZXJOb3chIikpIHsKLQkJcHJpbnRrKCJjcHVmcmVxOiBQb3dlck5vdyBJT1BPUlQgcmVnaW9uIGFscmVhZHkgdXNlZC5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUG93ZXJOb3cgSU9QT1JUIHJlZ2lvbiBhbHJlYWR5IHVzZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNDYsNyArMjUzLDggQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuLCBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0FVVEhPUigiQXJqYW4gdmFuIGRlIFZlbiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sICIKKwkJIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUG93ZXJOb3chIGRyaXZlciBmb3IgQU1EIEs2LTIrIC8gSzYtMysgcHJvY2Vzc29ycy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwppbmRleCAxYjQ0NmQ3Li4zYzI4Y2NkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwpAQCAtNiwxMCArNiwxMiBAQAogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KICAqICBCYXNlZCB1cG9uIGRhdGFzaGVldHMgJiBzYW1wbGUgQ1BVcyBraW5kbHkgcHJvdmlkZWQgYnkgQU1ELgogICoKLSAqIEVycmF0YSA1OiBQcm9jZXNzb3IgbWF5IGZhaWwgdG8gZXhlY3V0ZSBhIEZJRC9WSUQgY2hhbmdlIGluIHByZXNlbmNlIG9mIGludGVycnVwdC4KLSAqIC0gV2UgY2xpL3N0aSBvbiBzdGVwcGluZyBBMCBDUFVzIGFyb3VuZCB0aGUgRklEL1ZJRCB0cmFuc2l0aW9uLgotICogRXJyYXRhIDE1OiBQcm9jZXNzb3JzIHdpdGggaGFsZiBmcmVxdWVuY3kgbXVsdGlwbGllcnMgbWF5IGhhbmcgdXBvbiB3YWtldXAgZnJvbSBkaXNjb25uZWN0LgotICogLSBXZSBkaXNhYmxlIGhhbGYgbXVsdGlwbGllcnMgaWYgQUNQSSBpcyB1c2VkIG9uIEEwIHN0ZXBwaW5nIENQVXMuCisgKiBFcnJhdGEgNToKKyAqICBDUFUgbWF5IGZhaWwgdG8gZXhlY3V0ZSBhIEZJRC9WSUQgY2hhbmdlIGluIHByZXNlbmNlIG9mIGludGVycnVwdC4KKyAqICAtIFdlIGNsaS9zdGkgb24gc3RlcHBpbmcgQTAgQ1BVcyBhcm91bmQgdGhlIEZJRC9WSUQgdHJhbnNpdGlvbi4KKyAqIEVycmF0YSAxNToKKyAqICBDUFUgd2l0aCBoYWxmIGZyZXF1ZW5jeSBtdWx0aXBsaWVycyBtYXkgaGFuZyB1cG9uIHdha2V1cCBmcm9tIGRpc2Nvbm5lY3QuCisgKiAgLSBXZSBkaXNhYmxlIGhhbGYgbXVsdGlwbGllcnMgaWYgQUNQSSBpcyB1c2VkIG9uIEEwIHN0ZXBwaW5nIENQVXMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjAsMTEgKzIyLDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS90aW1lci5oPgkJLyogTmVlZGVkIGZvciByZWNhbGlicmF0ZV9jcHVfa2h6KCkgKi8KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LN19BQ1BJCkBAIC01OCw5ICs2MCw5IEBACiB1bmlvbiBwb3dlcm5vd19hY3BpX2NvbnRyb2xfdCB7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgbG9uZyBmaWQ6NSwKLQkJdmlkOjUsCi0JCXNndGM6MjAsCi0JCXJlczE6MjsKKwkJCXZpZDo1LAorCQkJc2d0YzoyMCwKKwkJCXJlczE6MjsKIAl9IGJpdHM7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiB9OwpAQCAtOTQsMTQgKzk2LDE1IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FuX3NjYWxlX2J1czsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FuX3NjYWxlX3ZpZDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zcGVlZD0tMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zcGVlZCA9IC0xOwogc3RhdGljIHVuc2lnbmVkIGludCBtYXhpbXVtX3NwZWVkOwogc3RhdGljIHVuc2lnbmVkIGludCBudW1iZXJfc2NhbGVzOwogc3RhdGljIHVuc2lnbmVkIGludCBmc2I7CiBzdGF0aWMgdW5zaWduZWQgaW50IGxhdGVuY3k7CiBzdGF0aWMgY2hhciBoYXZlX2EwOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInBvd2Vybm93LWs3IiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInBvd2Vybm93LWs3IiwgbXNnKQogCiBzdGF0aWMgaW50IGNoZWNrX2ZzYih1bnNpZ25lZCBpbnQgZnNic3BlZWQpCiB7CkBAIC0xMDksNyArMTEyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZiA9IGZzYiAvIDEwMDA7CiAKIAlkZWx0YSA9IChmc2JzcGVlZCA+IGYpID8gZnNic3BlZWQgLSBmIDogZiAtIGZzYnNwZWVkOwotCXJldHVybiAoZGVsdGEgPCA1KTsKKwlyZXR1cm4gZGVsdGEgPCA1OwogfQogCiBzdGF0aWMgaW50IGNoZWNrX3Bvd2Vybm93KHZvaWQpCkBAIC0xMTcsMjQgKzEyMCwyNiBAQAogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAl1bnNpZ25lZCBpbnQgbWF4ZWksIGVheCwgZWJ4LCBlY3gsIGVkeDsKIAotCWlmICgoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkgfHwgKGMtPng4NiAhPTYpKSB7CisJaWYgKChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKSB8fCAoYy0+eDg2ICE9IDYpKSB7CiAjaWZkZWYgTU9EVUxFCi0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aXRoIEFNRCBLNyBDUFVzXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRoaXMgbW9kdWxlIG9ubHkgd29ya3Mgd2l0aCAiCisJCQkJIkFNRCBLNyBDUFVzXG4iKTsKICNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBHZXQgbWF4aW11bSBjYXBhYmlsaXRpZXMgKi8KLQltYXhlaSA9IGNwdWlkX2VheCAoMHg4MDAwMDAwMCk7CisJbWF4ZWkgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMCk7CiAJaWYgKG1heGVpIDwgMHg4MDAwMDAwNykgewkvKiBBbnkgcG93ZXJub3cgaW5mbyA/ICovCiAjaWZkZWYgTU9EVUxFCi0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiTm8gcG93ZXJub3cgY2FwYWJpbGl0aWVzIGRldGVjdGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIHBvd2Vybm93IGNhcGFiaWxpdGllcyBkZXRlY3RlZFxuIik7CiAjZW5kaWYKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKChjLT54ODZfbW9kZWwgPT0gNikgJiYgKGMtPng4Nl9tYXNrID09IDApKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiSzcgNjYwW0EwXSBjb3JlIGRldGVjdGVkLCBlbmFibGluZyBlcnJhdGEgd29ya2Fyb3VuZHNcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSzcgNjYwW0EwXSBjb3JlIGRldGVjdGVkLCAiCisJCQkJImVuYWJsaW5nIGVycmF0YSB3b3JrYXJvdW5kc1xuIik7CiAJCWhhdmVfYTAgPSAxOwogCX0KIApAQCAtMTQ0LDM3ICsxNDksNDIgQEAKIAlpZiAoIShlZHggJiAoMSA8PCAxIHwgMSA8PCAyKSkpCiAJCXJldHVybiAwOwogCi0JcHJpbnRrIChLRVJOX0lORk8gUEZYICJQb3dlck5PVyEgVGVjaG5vbG9neSBwcmVzZW50LiBDYW4gc2NhbGU6ICIpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJQb3dlck5PVyEgVGVjaG5vbG9neSBwcmVzZW50LiBDYW4gc2NhbGU6ICIpOwogCiAJaWYgKGVkeCAmIDEgPDwgMSkgewotCQlwcmludGsgKCJmcmVxdWVuY3kiKTsKLQkJY2FuX3NjYWxlX2J1cz0xOworCQlwcmludGsoImZyZXF1ZW5jeSIpOworCQljYW5fc2NhbGVfYnVzID0gMTsKIAl9CiAKIAlpZiAoKGVkeCAmICgxIDw8IDEgfCAxIDw8IDIpKSA9PSAweDYpCi0JCXByaW50ayAoIiBhbmQgIik7CisJCXByaW50aygiIGFuZCAiKTsKIAogCWlmIChlZHggJiAxIDw8IDIpIHsKLQkJcHJpbnRrICgidm9sdGFnZSIpOwotCQljYW5fc2NhbGVfdmlkPTE7CisJCXByaW50aygidm9sdGFnZSIpOworCQljYW5fc2NhbGVfdmlkID0gMTsKIAl9CiAKLQlwcmludGsgKCIuXG4iKTsKKwlwcmludGsoIi5cbiIpOwogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2VudHJ5KHVuc2lnbmVkIGludCBlbnRyeSkKK3sKKwlwb3dlcm5vd190YWJsZVtlbnRyeV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworfQogCi1zdGF0aWMgaW50IGdldF9yYW5nZXMgKHVuc2lnbmVkIGNoYXIgKnBzdCkKK3N0YXRpYyBpbnQgZ2V0X3Jhbmdlcyh1bnNpZ25lZCBjaGFyICpwc3QpCiB7CiAJdW5zaWduZWQgaW50IGo7CiAJdW5zaWduZWQgaW50IHNwZWVkOwogCXU4IGZpZCwgdmlkOwogCi0JcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqIChudW1iZXJfc2NhbGVzICsgMSkpLCBHRlBfS0VSTkVMKTsKKwlwb3dlcm5vd190YWJsZSA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICoKKwkJCQkobnVtYmVyX3NjYWxlcyArIDEpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3dlcm5vd190YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGo9MCA7IGogPCBudW1iZXJfc2NhbGVzOyBqKyspIHsKKwlmb3IgKGogPSAwIDsgaiA8IG51bWJlcl9zY2FsZXM7IGorKykgewogCQlmaWQgPSAqcHN0Kys7CiAKIAkJcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ID0gKGZzYiAqIGZpZF9jb2Rlc1tmaWRdKSAvIDEwOwpAQCAtMTgyLDEwICsxOTIsMTAgQEAKIAogCQlzcGVlZCA9IHBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeTsKIAotCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApPT01KSB7CisJCWlmICgoZmlkX2NvZGVzW2ZpZF0gJSAxMCkgPT0gNSkgewogI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzdfQUNQSQogCQkJaWYgKGhhdmVfYTAgPT0gMSkKLQkJCQlwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQkJaW52YWxpZGF0ZV9lbnRyeShqKTsKICNlbmRpZgogCQl9CiAKQEAgLTE5Nyw3ICsyMDcsNyBAQAogCQl2aWQgPSAqcHN0Kys7CiAJCXBvd2Vybm93X3RhYmxlW2pdLmluZGV4IHw9ICh2aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwogCi0JCWRwcmludGsgKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgorCQlkcHJpbnRrKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgogCQkJICJWSUQ6IDB4JXggKCVkLiUwM2RWKVxuIiwgZmlkLCBmaWRfY29kZXNbZmlkXSAvIDEwLAogCQkJIGZpZF9jb2Rlc1tmaWRdICUgMTAsIHNwZWVkLzEwMDAsIHZpZCwKIAkJCSBtb2JpbGVfdmlkX3RhYmxlW3ZpZF0vMTAwMCwKQEAgLTIxNCwxMyArMjI0LDEzIEBACiB7CiAJdW5pb24gbXNyX2ZpZHZpZGN0bCBmaWR2aWRjdGw7CiAKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CiAJaWYgKGZpZHZpZGN0bC5iaXRzLkZJRCAhPSBmaWQpIHsKIAkJZmlkdmlkY3RsLmJpdHMuU0dUQyA9IGxhdGVuY3k7CiAJCWZpZHZpZGN0bC5iaXRzLkZJRCA9IGZpZDsKIAkJZmlkdmlkY3RsLmJpdHMuVklEQyA9IDA7CiAJCWZpZHZpZGN0bC5iaXRzLkZJREMgPSAxOwotCQl3cm1zcmwgKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CisJCXdybXNybChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOwogCX0KIH0KIApAQCAtMjI5LDE4ICsyMzksMTggQEAKIHsKIAl1bmlvbiBtc3JfZmlkdmlkY3RsIGZpZHZpZGN0bDsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKIAlpZiAoZmlkdmlkY3RsLmJpdHMuVklEICE9IHZpZCkgewogCQlmaWR2aWRjdGwuYml0cy5TR1RDID0gbGF0ZW5jeTsKIAkJZmlkdmlkY3RsLmJpdHMuVklEID0gdmlkOwogCQlmaWR2aWRjdGwuYml0cy5GSURDID0gMDsKIAkJZmlkdmlkY3RsLmJpdHMuVklEQyA9IDE7Ci0JCXdybXNybCAoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKKwkJd3Jtc3JsKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CiAJfQogfQogCiAKLXN0YXRpYyB2b2lkIGNoYW5nZV9zcGVlZCAodW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHZvaWQgY2hhbmdlX3NwZWVkKHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAl1OCBmaWQsIHZpZDsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKQEAgLTI1Nyw3ICsyNjcsNyBAQAogCiAJZnJlcXMuY3B1ID0gMDsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAljZmlkID0gZmlkdmlkc3RhdHVzLmJpdHMuQ0ZJRDsKIAlmcmVxcy5vbGQgPSBmc2IgKiBmaWRfY29kZXNbY2ZpZF0gLyAxMDsKIApAQCAtMzIxLDEyICszMzEsMTQgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCWlmIChhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CisJaWYgKGFjcGlfcHJvY2Vzc29yX3BlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQgIT0KKwkJCUFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMjsKIAl9CiAKLQlpZiAoYWNwaV9wcm9jZXNzb3JfcGVyZi0+c3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB7CisJaWYgKGFjcGlfcHJvY2Vzc29yX3BlcmYtPnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCAhPQorCQkJQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnIyOwogCX0KQEAgLTMzOCw3ICszNTAsOCBAQAogCQlnb3RvIGVycjI7CiAJfQogCi0JcG93ZXJub3dfdGFibGUgPSBremFsbG9jKChudW1iZXJfc2NhbGVzICsgMSkgKiAoc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkpLCBHRlBfS0VSTkVMKTsKKwlwb3dlcm5vd190YWJsZSA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICoKKwkJCQkobnVtYmVyX3NjYWxlcyArIDEpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3dlcm5vd190YWJsZSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjI7CkBAIC0zNTIsNyArMzY1LDcgQEAKIAkJdW5zaWduZWQgaW50IHNwZWVkLCBzcGVlZF9taHo7CiAKIAkJcGMudmFsID0gKHVuc2lnbmVkIGxvbmcpIHN0YXRlLT5jb250cm9sOwotCQlkcHJpbnRrICgiYWNwaTogIFAlZDogJWQgTUh6ICVkIG1XICVkIHVTIGNvbnRyb2wgJTA4eCBTR1RDICVkXG4iLAorCQlkcHJpbnRrKCJhY3BpOiAgUCVkOiAlZCBNSHogJWQgbVcgJWQgdVMgY29udHJvbCAlMDh4IFNHVEMgJWRcbiIsCiAJCQkgaSwKIAkJCSAodTMyKSBzdGF0ZS0+Y29yZV9mcmVxdWVuY3ksCiAJCQkgKHUzMikgc3RhdGUtPnBvd2VyLApAQCAtMzgxLDEyICszOTQsMTIgQEAKIAkJaWYgKHNwZWVkICUgMTAwMCA+IDApCiAJCQlzcGVlZF9taHorKzsKIAotCQlpZiAoKGZpZF9jb2Rlc1tmaWRdICUgMTApPT01KSB7CisJCWlmICgoZmlkX2NvZGVzW2ZpZF0gJSAxMCkgPT0gNSkgewogCQkJaWYgKGhhdmVfYTAgPT0gMSkKLQkJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQkJaW52YWxpZGF0ZV9lbnRyeShpKTsKIAkJfQogCi0JCWRwcmludGsgKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgorCQlkcHJpbnRrKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgogCQkJICJWSUQ6IDB4JXggKCVkLiUwM2RWKVxuIiwgZmlkLCBmaWRfY29kZXNbZmlkXSAvIDEwLAogCQkJIGZpZF9jb2Rlc1tmaWRdICUgMTAsIHNwZWVkX21oeiwgdmlkLAogCQkJIG1vYmlsZV92aWRfdGFibGVbdmlkXS8xMDAwLApAQCAtNDIyLDcgKzQzNSw4IEBACiBlcnIwNToKIAlrZnJlZShhY3BpX3Byb2Nlc3Nvcl9wZXJmKTsKIGVycjA6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkFDUEkgcGVyZmxpYiBjYW4gbm90IGJlIHVzZWQgaW4gdGhpcyBwbGF0Zm9ybVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkFDUEkgcGVyZmxpYiBjYW4gbm90IGJlIHVzZWQgb24gIgorCQkJInRoaXMgcGxhdGZvcm1cbiIpOwogCWFjcGlfcHJvY2Vzc29yX3BlcmYgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC00MzUsNyArNDQ5LDE0IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBwb3dlcm5vd19kZWNvZGVfYmlvcyAoaW50IG1heGZpZCwgaW50IHN0YXJ0dmlkKQorc3RhdGljIHZvaWQgcHJpbnRfcHN0X2VudHJ5KHN0cnVjdCBwc3RfcyAqcHN0LCB1bnNpZ25lZCBpbnQgaikKK3sKKwlkcHJpbnRrKCJQU1Q6JWQgKEAlcClcbiIsIGosIHBzdCk7CisJZHByaW50aygiIGNwdWlkOiAweCV4ICBmc2I6ICVkICBtYXhGSUQ6IDB4JXggIHN0YXJ0dmlkOiAweCV4XG4iLAorCQlwc3QtPmNwdWlkLCBwc3QtPmZzYnNwZWVkLCBwc3QtPm1heGZpZCwgcHN0LT5zdGFydHZpZCk7Cit9CisKK3N0YXRpYyBpbnQgcG93ZXJub3dfZGVjb2RlX2Jpb3MoaW50IG1heGZpZCwgaW50IHN0YXJ0dmlkKQogewogCXN0cnVjdCBwc2JfcyAqcHNiOwogCXN0cnVjdCBwc3RfcyAqcHN0OwpAQCAtNDQ2LDYxICs0NjcsNjcgQEAKIAogCWV0dXBsZSA9IGNwdWlkX2VheCgweDgwMDAwMDAxKTsKIAotCWZvciAoaT0weEMwMDAwOyBpIDwgMHhmZmZmMCA7IGkrPTE2KSB7CisJZm9yIChpID0gMHhDMDAwMDsgaSA8IDB4ZmZmZjAgOyBpICs9IDE2KSB7CiAKIAkJcCA9IHBoeXNfdG9fdmlydChpKTsKIAotCQlpZiAobWVtY21wKHAsICJBTURLN1BOT1chIiwgIDEwKSA9PSAwKXsKLQkJCWRwcmludGsgKCJGb3VuZCBQU0IgaGVhZGVyIGF0ICVwXG4iLCBwKTsKKwkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsICAxMCkgPT0gMCkgeworCQkJZHByaW50aygiRm91bmQgUFNCIGhlYWRlciBhdCAlcFxuIiwgcCk7CiAJCQlwc2IgPSAoc3RydWN0IHBzYl9zICopIHA7Ci0JCQlkcHJpbnRrICgiVGFibGUgdmVyc2lvbjogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOworCQkJZHByaW50aygiVGFibGUgdmVyc2lvbjogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOwogCQkJaWYgKHBzYi0+dGFibGV2ZXJzaW9uICE9IDB4MTIpIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlNvcnJ5LCBvbmx5IHYxLjIgdGFibGVzIHN1cHBvcnRlZCByaWdodCBub3dcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJTb3JyeSwgb25seSB2MS4yIHRhYmxlcyIKKwkJCQkJCSIgc3VwcG9ydGVkIHJpZ2h0IG5vd1xuIik7CiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQl9CiAKLQkJCWRwcmludGsgKCJGbGFnczogMHgleFxuIiwgcHNiLT5mbGFncyk7Ci0JCQlpZiAoKHBzYi0+ZmxhZ3MgJiAxKT09MCkgewotCQkJCWRwcmludGsgKCJNb2JpbGUgdm9sdGFnZSByZWd1bGF0b3JcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlkcHJpbnRrICgiRGVza3RvcCB2b2x0YWdlIHJlZ3VsYXRvclxuIik7Ci0JCQl9CisJCQlkcHJpbnRrKCJGbGFnczogMHgleFxuIiwgcHNiLT5mbGFncyk7CisJCQlpZiAoKHBzYi0+ZmxhZ3MgJiAxKSA9PSAwKQorCQkJCWRwcmludGsoIk1vYmlsZSB2b2x0YWdlIHJlZ3VsYXRvclxuIik7CisJCQllbHNlCisJCQkJZHByaW50aygiRGVza3RvcCB2b2x0YWdlIHJlZ3VsYXRvclxuIik7CiAKIAkJCWxhdGVuY3kgPSBwc2ItPnNldHRsaW5ndGltZTsKIAkJCWlmIChsYXRlbmN5IDwgMTAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkJJT1Mgc2V0IHNldHRsaW5nIHRpbWUgdG8gJWQgbWljcm9zZWNvbmRzLiAiCi0JCQkJCQkiU2hvdWxkIGJlIGF0IGxlYXN0IDEwMC4gQ29ycmVjdGluZy5cbiIsIGxhdGVuY3kpOworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJCSU9TIHNldCBzZXR0bGluZyB0aW1lICIKKwkJCQkJCSJ0byAlZCBtaWNyb3NlY29uZHMuICIKKwkJCQkJCSJTaG91bGQgYmUgYXQgbGVhc3QgMTAwLiAiCisJCQkJCQkiQ29ycmVjdGluZy5cbiIsIGxhdGVuY3kpOwogCQkJCWxhdGVuY3kgPSAxMDA7CiAJCQl9Ci0JCQlkcHJpbnRrICgiU2V0dGxpbmcgVGltZTogJWQgbWljcm9zZWNvbmRzLlxuIiwgcHNiLT5zZXR0bGluZ3RpbWUpOwotCQkJZHByaW50ayAoIkhhcyAlZCBQU1QgdGFibGVzLiAoT25seSBkdW1waW5nIG9uZXMgcmVsZXZhbnQgdG8gdGhpcyBDUFUpLlxuIiwgcHNiLT5udW1wc3QpOworCQkJZHByaW50aygiU2V0dGxpbmcgVGltZTogJWQgbWljcm9zZWNvbmRzLlxuIiwKKwkJCQkJcHNiLT5zZXR0bGluZ3RpbWUpOworCQkJZHByaW50aygiSGFzICVkIFBTVCB0YWJsZXMuIChPbmx5IGR1bXBpbmcgb25lcyAiCisJCQkJCSJyZWxldmFudCB0byB0aGlzIENQVSkuXG4iLAorCQkJCQlwc2ItPm51bXBzdCk7CiAKLQkJCXAgKz0gc2l6ZW9mIChzdHJ1Y3QgcHNiX3MpOworCQkJcCArPSBzaXplb2Yoc3RydWN0IHBzYl9zKTsKIAogCQkJcHN0ID0gKHN0cnVjdCBwc3RfcyAqKSBwOwogCi0JCQlmb3IgKGo9MDsgajxwc2ItPm51bXBzdDsgaisrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgcHNiLT5udW1wc3Q7IGorKykgewogCQkJCXBzdCA9IChzdHJ1Y3QgcHN0X3MgKikgcDsKIAkJCQludW1iZXJfc2NhbGVzID0gcHN0LT5udW1wc3RhdGVzOwogCi0JCQkJaWYgKChldHVwbGUgPT0gcHN0LT5jcHVpZCkgJiYgY2hlY2tfZnNiKHBzdC0+ZnNic3BlZWQpICYmCi0JCQkJICAgIChtYXhmaWQ9PXBzdC0+bWF4ZmlkKSAmJiAoc3RhcnR2aWQ9PXBzdC0+c3RhcnR2aWQpKQotCQkJCXsKLQkJCQkJZHByaW50ayAoIlBTVDolZCAoQCVwKVxuIiwgaiwgcHN0KTsKLQkJCQkJZHByaW50ayAoIiBjcHVpZDogMHgleCAgZnNiOiAlZCAgbWF4RklEOiAweCV4ICBzdGFydHZpZDogMHgleFxuIiwKLQkJCQkJCSBwc3QtPmNwdWlkLCBwc3QtPmZzYnNwZWVkLCBwc3QtPm1heGZpZCwgcHN0LT5zdGFydHZpZCk7Ci0KLQkJCQkJcmV0ID0gZ2V0X3JhbmdlcyAoKGNoYXIgKikgcHN0ICsgc2l6ZW9mIChzdHJ1Y3QgcHN0X3MpKTsKKwkJCQlpZiAoKGV0dXBsZSA9PSBwc3QtPmNwdWlkKSAmJgorCQkJCSAgICBjaGVja19mc2IocHN0LT5mc2JzcGVlZCkgJiYKKwkJCQkgICAgKG1heGZpZCA9PSBwc3QtPm1heGZpZCkgJiYKKwkJCQkgICAgKHN0YXJ0dmlkID09IHBzdC0+c3RhcnR2aWQpKSB7CisJCQkJCXByaW50X3BzdF9lbnRyeShwc3QsIGopOworCQkJCQlwID0gKGNoYXIgKilwc3QgKyBzaXplb2Yoc3RydWN0IHBzdF9zKTsKKwkJCQkJcmV0ID0gZ2V0X3JhbmdlcyhwKTsKIAkJCQkJcmV0dXJuIHJldDsKIAkJCQl9IGVsc2UgewogCQkJCQl1bnNpZ25lZCBpbnQgazsKLQkJCQkJcCA9IChjaGFyICopIHBzdCArIHNpemVvZiAoc3RydWN0IHBzdF9zKTsKLQkJCQkJZm9yIChrPTA7IGs8bnVtYmVyX3NjYWxlczsgaysrKQotCQkJCQkJcCs9MjsKKwkJCQkJcCA9IChjaGFyICopcHN0ICsgc2l6ZW9mKHN0cnVjdCBwc3Rfcyk7CisJCQkJCWZvciAoayA9IDA7IGsgPCBudW1iZXJfc2NhbGVzOyBrKyspCisJCQkJCQlwICs9IDI7CiAJCQkJfQogCQkJfQotCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJObyBQU1QgdGFibGVzIG1hdGNoIHRoaXMgY3B1aWQgKDB4JXgpXG4iLCBldHVwbGUpOwotCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUaGlzIGlzIGluZGljYXRpdmUgb2YgYSBicm9rZW4gQklPUy5cbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIFBTVCB0YWJsZXMgbWF0Y2ggdGhpcyBjcHVpZCAiCisJCQkJCSIoMHgleClcbiIsIGV0dXBsZSk7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVGhpcyBpcyBpbmRpY2F0aXZlIG9mIGEgYnJva2VuICIKKwkJCQkJIkJJT1MuXG4iKTsKIAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTUxMSwxMyArNTM4LDE0IEBACiB9CiAKIAotc3RhdGljIGludCBwb3dlcm5vd190YXJnZXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBwb3dlcm5vd190YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGU7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgcG93ZXJub3dfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgcG93ZXJub3dfdGFibGUsIHRhcmdldF9mcmVxLAorCQkJCXJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNoYW5nZV9zcGVlZChuZXdzdGF0ZSk7CkBAIC01MjYsNyArNTU0LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IHBvd2Vybm93X3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHBvd2Vybm93X3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgcG93ZXJub3dfdGFibGUpOwogfQpAQCAtNTY2LDE4ICs1OTQsMjMgQEAKIAogCWlmIChjcHUpCiAJCXJldHVybiAwOwotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAljZmlkID0gZmlkdmlkc3RhdHVzLmJpdHMuQ0ZJRDsKIAotCXJldHVybiAoZnNiICogZmlkX2NvZGVzW2NmaWRdIC8gMTApOworCXJldHVybiBmc2IgKiBmaWRfY29kZXNbY2ZpZF0gLyAxMDsKIH0KIAogCiBzdGF0aWMgaW50IF9faW5pdCBhY2VyX2NwdWZyZXFfcHN0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkKQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGxhcHRvcCB3aXRoIGJyb2tlbiBQU1QgdGFibGVzIGluIEJJT1MgZGV0ZWN0ZWQuXG4iLCBkLT5pZGVudCk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiWW91IG5lZWQgdG8gZG93bmdyYWRlIHRvIDNBMjEgKDA5LzA5LzIwMDIpLCBvciB0cnkgYSBuZXdlciBCSU9TIHRoYW4gM0E3MSAoMDEvMjAvMjAwMylcbiIpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgImNwdWZyZXEgc2NhbGluZyBoYXMgYmVlbiBkaXNhYmxlZCBhcyBhIHJlc3VsdCBvZiB0aGlzLlxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJIiVzIGxhcHRvcCB3aXRoIGJyb2tlbiBQU1QgdGFibGVzIGluIEJJT1MgZGV0ZWN0ZWQuXG4iLAorCQlkLT5pZGVudCk7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJIllvdSBuZWVkIHRvIGRvd25ncmFkZSB0byAzQTIxICgwOS8wOS8yMDAyKSwgb3IgdHJ5IGEgbmV3ZXIgIgorCQkiQklPUyB0aGFuIDNBNzEgKDAxLzIwLzIwMDMpXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkiY3B1ZnJlcSBzY2FsaW5nIGhhcyBiZWVuIGRpc2FibGVkIGFzIGEgcmVzdWx0IG9mIHRoaXMuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTk4LDcgKzYzMSw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19jcHVfaW5pdCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAl1bmlvbiBtc3JfZmlkdmlkc3RhdHVzIGZpZHZpZHN0YXR1czsKIAlpbnQgcmVzdWx0OwpAQCAtNjA2LDcgKzYzOSw3IEBACiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmRtc3JsIChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOworCXJkbXNybChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOwogCiAJcmVjYWxpYnJhdGVfY3B1X2toeigpOwogCkBAIC02MTgsMTkgKzY1MSwyMSBAQAogCWRwcmludGsoIkZTQjogJTNkTUh6XG4iLCBmc2IvMTAwMCk7CiAKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShwb3dlcm5vd19kbWlfdGFibGUpIHx8IGFjcGlfZm9yY2UpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJQU0IvUFNUIGtub3duIHRvIGJlIGJyb2tlbi4gIFRyeWluZyBBQ1BJIGluc3RlYWRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUFNCL1BTVCBrbm93biB0byBiZSBicm9rZW4uICAiCisJCQkJIlRyeWluZyBBQ1BJIGluc3RlYWRcbiIpOwogCQlyZXN1bHQgPSBwb3dlcm5vd19hY3BpX2luaXQoKTsKIAl9IGVsc2UgewotCQlyZXN1bHQgPSBwb3dlcm5vd19kZWNvZGVfYmlvcyhmaWR2aWRzdGF0dXMuYml0cy5NRklELCBmaWR2aWRzdGF0dXMuYml0cy5TVklEKTsKKwkJcmVzdWx0ID0gcG93ZXJub3dfZGVjb2RlX2Jpb3MoZmlkdmlkc3RhdHVzLmJpdHMuTUZJRCwKKwkJCQlmaWR2aWRzdGF0dXMuYml0cy5TVklEKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUcnlpbmcgQUNQSSBwZXJmbGliXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJUcnlpbmcgQUNQSSBwZXJmbGliXG4iKTsKIAkJCW1heGltdW1fc3BlZWQgPSAwOwogCQkJbWluaW11bV9zcGVlZCA9IC0xOwogCQkJbGF0ZW5jeSA9IDA7CiAJCQlyZXN1bHQgPSBwb3dlcm5vd19hY3BpX2luaXQoKTsKIAkJCWlmIChyZXN1bHQpIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkFDUEkgYW5kIGxlZ2FjeSBtZXRob2RzIGZhaWxlZFxuIik7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJTZWUgaHR0cDovL3d3dy5jb2RlbW9ua2V5Lm9yZy51ay9wcm9qZWN0cy9jcHVmcmVxL3Bvd2Vybm93LWs3Lmh0bWxcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJCSJBQ1BJIGFuZCBsZWdhY3kgbWV0aG9kcyBmYWlsZWRcbiIpOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogU0dUQyB1c2UgdGhlIGJ1cyBjbG9jayBhcyB0aW1lciAqLwpAQCAtNjQyLDEwICs2NzcsMTEgQEAKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCi0JcHJpbnRrIChLRVJOX0lORk8gUEZYICJNaW5pbXVtIHNwZWVkICVkIE1Iei4gTWF4aW11bSBzcGVlZCAlZCBNSHouXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJNaW5pbXVtIHNwZWVkICVkIE1Iei4gTWF4aW11bSBzcGVlZCAlZCBNSHouXG4iLAogCQkJCW1pbmltdW1fc3BlZWQvMTAwMCwgbWF4aW11bV9zcGVlZC8xMDAwKTsKIAotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBjcHVmcmVxX3NjYWxlKDIwMDAwMDBVTCwgZnNiLCBsYXRlbmN5KTsKKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0KKwkJY3B1ZnJlcV9zY2FsZSgyMDAwMDAwVUwsIGZzYiwgbGF0ZW5jeSk7CiAKIAlwb2xpY3ktPmN1ciA9IHBvd2Vybm93X2dldCgwKTsKIApAQCAtNjU0LDcgKzY5MCw4IEBACiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBwb3dlcm5vd190YWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgcG93ZXJub3dfY3B1X2V4aXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KSB7CitzdGF0aWMgaW50IHBvd2Vybm93X2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorewogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3B1dF9hdHRyKHBvbGljeS0+Y3B1KTsKIAogI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzdfQUNQSQpAQCAtNjY5LDcgKzcwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBwb3dlcm5vd190YWJsZV9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcG93ZXJub3dfdGFibGVfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTY4NSwxNSArNzIyLDE1IEBACiAJLmF0dHIJPSBwb3dlcm5vd190YWJsZV9hdHRyLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93X2luaXQodm9pZCkKIHsKLQlpZiAoY2hlY2tfcG93ZXJub3coKT09MCkKKwlpZiAoY2hlY2tfcG93ZXJub3coKSA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnBvd2Vybm93X2RyaXZlcik7CiB9CiAKIAotc3RhdGljIHZvaWQgX19leGl0IHBvd2Vybm93X2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcG93ZXJub3dfZXhpdCh2b2lkKQogewogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJnBvd2Vybm93X2RyaXZlcik7CiB9CkBAIC03MDEsOSArNzM4LDkgQEAKIG1vZHVsZV9wYXJhbShhY3BpX2ZvcmNlLCAgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWNwaV9mb3JjZSwgIkZvcmNlIEFDUEkgdG8gYmUgdXNlZC4iKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJQb3dlcm5vdyBkcml2ZXIgZm9yIEFNRCBLNyBwcm9jZXNzb3JzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2Vybm93IGRyaXZlciBmb3IgQU1EIEs3IHByb2Nlc3NvcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIGxhdGVfaW5pdGNhbGwocG93ZXJub3dfaW5pdCk7CiBtb2R1bGVfZXhpdChwb3dlcm5vd19leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggNjQyOGFhMS4uYTE1YWM5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTMzLDE2ICszMywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBmb3IgY3VycmVudCAvIHNldF9jcHVzX2FsbG93ZWQoKSAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+Ci0jZW5kaWYKIAogI2RlZmluZSBQRlggInBvd2Vybm93LWs4OiAiCiAjZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMi4yMC4wMCIKQEAgLTcxLDcgKzY5LDggQEAKIAlyZXR1cm4gMTAwMCAqIGZpbmRfZnJlcV9mcm9tX2ZpZChmaWQpOwogfQogCi1zdGF0aWMgdTMyIGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpkYXRhLCB1MzIgcHN0YXRlKQorc3RhdGljIHUzMiBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZGF0YSwKKwkJdTMyIHBzdGF0ZSkKIHsKIAlyZXR1cm4gZGF0YVtwc3RhdGVdLmZyZXF1ZW5jeTsKIH0KQEAgLTE4Niw3ICsxODUsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlsbyA9IGZpZCB8IChkYXRhLT5jdXJydmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCkgfCBNU1JfQ19MT19JTklUX0ZJRF9WSUQ7CisJbG8gPSBmaWQ7CisJbG8gfD0gKGRhdGEtPmN1cnJ2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKTsKKwlsbyB8PSBNU1JfQ19MT19JTklUX0ZJRF9WSUQ7CiAKIAlkcHJpbnRrKCJ3cml0aW5nIGZpZCAweCV4LCBsbyAweCV4LCBoaSAweCV4XG4iLAogCQlmaWQsIGxvLCBkYXRhLT5wbGxsb2NrICogUExMX0xPQ0tfQ09OVkVSU0lPTik7CkBAIC0xOTQsNyArMTk1LDkgQEAKIAlkbyB7CiAJCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgZGF0YS0+cGxsbG9jayAqIFBMTF9MT0NLX0NPTlZFUlNJT04pOwogCQlpZiAoaSsrID4gMTAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJIYXJkd2FyZSBlcnJvciAtIHBlbmRpbmcgYml0IHZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiSGFyZHdhcmUgZXJyb3IgLSBwZW5kaW5nIGJpdCB2ZXJ5IHN0dWNrIC0gIgorCQkJCSJubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSB3aGlsZSAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpOwpAQCAtMjAyLDE0ICsyMDUsMTYgQEAKIAljb3VudF9vZmZfaXJ0KGRhdGEpOwogCiAJaWYgKHNhdmV2aWQgIT0gZGF0YS0+Y3VycnZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2aWQgY2hhbmdlIG9uIGZpZCB0cmFucywgb2xkIDB4JXgsIG5ldyAweCV4XG4iLAotCQkgICAgICAgc2F2ZXZpZCwgZGF0YS0+Y3VycnZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJ2aWQgY2hhbmdlIG9uIGZpZCB0cmFucywgb2xkIDB4JXgsIG5ldyAweCV4XG4iLAorCQkJc2F2ZXZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmIChmaWQgIT0gZGF0YS0+Y3VycmZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmaWQgdHJhbnMgZmFpbGVkLCBmaWQgMHgleCwgY3VyciAweCV4XG4iLCBmaWQsCi0JCSAgICAgICAgZGF0YS0+Y3VycmZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJmaWQgdHJhbnMgZmFpbGVkLCBmaWQgMHgleCwgY3VyciAweCV4XG4iLCBmaWQsCisJCQlkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMjgsNyArMjMzLDkgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JbG8gPSBkYXRhLT5jdXJyZmlkIHwgKHZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpIHwgTVNSX0NfTE9fSU5JVF9GSURfVklEOworCWxvID0gZGF0YS0+Y3VycmZpZDsKKwlsbyB8PSAodmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCk7CisJbG8gfD0gTVNSX0NfTE9fSU5JVF9GSURfVklEOwogCiAJZHByaW50aygid3JpdGluZyB2aWQgMHgleCwgbG8gMHgleCwgaGkgMHgleFxuIiwKIAkJdmlkLCBsbywgU1RPUF9HUkFOVF81TlMpOwpAQCAtMjM2LDIwICsyNDMsMjQgQEAKIAlkbyB7CiAJCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgU1RPUF9HUkFOVF81TlMpOwogCQlpZiAoaSsrID4gMTAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnRlcm5hbCBlcnJvciAtIHBlbmRpbmcgYml0IHZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImludGVybmFsIGVycm9yIC0gcGVuZGluZyBiaXQgIgorCQkJCQkidmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlICIKKwkJCQkJImNoYW5nZXMgcG9zc2libGVcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IHdoaWxlIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSk7CiAKIAlpZiAoc2F2ZWZpZCAhPSBkYXRhLT5jdXJyZmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZpZCBjaGFuZ2VkIG9uIHZpZCB0cmFucywgb2xkIDB4JXggbmV3IDB4JXhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggImZpZCBjaGFuZ2VkIG9uIHZpZCB0cmFucywgb2xkICIKKwkJCSIweCV4IG5ldyAweCV4XG4iLAogCQkgICAgICAgc2F2ZWZpZCwgZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmICh2aWQgIT0gZGF0YS0+Y3VycnZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2aWQgdHJhbnMgZmFpbGVkLCB2aWQgMHgleCwgY3VyciAweCV4XG4iLCB2aWQsCi0JCQkJZGF0YS0+Y3VycnZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInZpZCB0cmFucyBmYWlsZWQsIHZpZCAweCV4LCAiCisJCQkJImN1cnIgMHgleFxuIiwKKwkJCQl2aWQsIGRhdGEtPmN1cnJ2aWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTI2MSw3ICsyNzIsOCBAQAogICogRGVjcmVhc2luZyB2aWQgY29kZXMgcmVwcmVzZW50IGluY3JlYXNpbmcgdm9sdGFnZXM6CiAgKiB2aWQgb2YgMCBpcyAxLjU1MFYsIHZpZCBvZiAweDFlIGlzIDAuODAwViwgdmlkIG9mIFZJRF9PRkYgaXMgb2ZmLgogICovCi1zdGF0aWMgaW50IGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXF2aWQsIHUzMiBzdGVwKQorc3RhdGljIGludCBkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1MzIgcmVxdmlkLCB1MzIgc3RlcCkKIHsKIAlpZiAoKGRhdGEtPmN1cnJ2aWQgLSByZXF2aWQpID4gc3RlcCkKIAkJcmVxdmlkID0gZGF0YS0+Y3VycnZpZCAtIHN0ZXA7CkBAIC0yODMsNyArMjk1LDggQEAKIH0KIAogLyogQ2hhbmdlIE9wdGVyb24vQXRobG9uNjQgZmlkIGFuZCB2aWQsIGJ5IHRoZSAzIHBoYXNlcy4gKi8KLXN0YXRpYyBpbnQgdHJhbnNpdGlvbl9maWRfdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxZmlkLCB1MzIgcmVxdmlkKQorc3RhdGljIGludCB0cmFuc2l0aW9uX2ZpZF92aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXUzMiByZXFmaWQsIHUzMiByZXF2aWQpCiB7CiAJaWYgKGNvcmVfdm9sdGFnZV9wcmVfdHJhbnNpdGlvbihkYXRhLCByZXF2aWQpKQogCQlyZXR1cm4gMTsKQEAgLTI5OCw3ICszMTEsOCBAQAogCQlyZXR1cm4gMTsKIAogCWlmICgocmVxZmlkICE9IGRhdGEtPmN1cnJmaWQpIHx8IChyZXF2aWQgIT0gZGF0YS0+Y3VycnZpZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIChjcHUlZCk6IHJlcSAweCV4IDB4JXgsIGN1cnIgMHgleCAweCV4XG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgKGNwdSVkKTogcmVxIDB4JXggMHgleCwgIgorCQkJCSJjdXJyIDB4JXggMHgleFxuIiwKIAkJCQlzbXBfcHJvY2Vzc29yX2lkKCksCiAJCQkJcmVxZmlkLCByZXF2aWQsIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCQlyZXR1cm4gMTsKQEAgLTMxMSwxMyArMzI1LDE1IEBACiB9CiAKIC8qIFBoYXNlIDEgLSBjb3JlIHZvbHRhZ2UgdHJhbnNpdGlvbiAuLi4gc2V0dXAgdm9sdGFnZSAqLwotc3RhdGljIGludCBjb3JlX3ZvbHRhZ2VfcHJlX3RyYW5zaXRpb24oc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXF2aWQpCitzdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wcmVfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdTMyIHJlcXZpZCkKIHsKIAl1MzIgcnZvc3RlcHMgPSBkYXRhLT5ydm87CiAJdTMyIHNhdmVmaWQgPSBkYXRhLT5jdXJyZmlkOwogCXUzMiBtYXh2aWQsIGxvOwogCi0JZHByaW50aygicGgxIChjcHUlZCk6IHN0YXJ0LCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgcmVxdmlkIDB4JXgsIHJ2byAweCV4XG4iLAorCWRwcmludGsoInBoMSAoY3B1JWQpOiBzdGFydCwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsICIKKwkJInJlcXZpZCAweCV4LCBydm8gMHgleFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkLCByZXF2aWQsIGRhdGEtPnJ2byk7CiAKQEAgLTM0MCw3ICszNTYsNyBAQAogCQl9IGVsc2UgewogCQkJZHByaW50aygicGgxOiBjaGFuZ2luZyB2aWQgZm9yIHJ2bywgcmVxIDB4JXhcbiIsCiAJCQkJZGF0YS0+Y3VycnZpZCAtIDEpOwotCQkJaWYgKGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoZGF0YSwgZGF0YS0+Y3VycnZpZCAtIDEsIDEpKQorCQkJaWYgKGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoZGF0YSwgZGF0YS0+Y3VycnZpZC0xLCAxKSkKIAkJCQlyZXR1cm4gMTsKIAkJCXJ2b3N0ZXBzLS07CiAJCX0KQEAgLTM1MCw3ICszNjYsOCBAQAogCQlyZXR1cm4gMTsKIAogCWlmIChzYXZlZmlkICE9IGRhdGEtPmN1cnJmaWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgxIGVyciwgY3VycmZpZCBjaGFuZ2VkIDB4JXhcbiIsIGRhdGEtPmN1cnJmaWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDEgZXJyLCBjdXJyZmlkIGNoYW5nZWQgMHgleFxuIiwKKwkJCQlkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zNjMsMjAgKzM4MCwyNCBAQAogLyogUGhhc2UgMiAtIGNvcmUgZnJlcXVlbmN5IHRyYW5zaXRpb24gKi8KIHN0YXRpYyBpbnQgY29yZV9mcmVxdWVuY3lfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcWZpZCkKIHsKLQl1MzIgdmNvcmVxZmlkLCB2Y29jdXJyZmlkLCB2Y29maWRkaWZmLCBmaWRfaW50ZXJ2YWwsIHNhdmV2aWQgPSBkYXRhLT5jdXJydmlkOworCXUzMiB2Y29yZXFmaWQsIHZjb2N1cnJmaWQsIHZjb2ZpZGRpZmY7CisJdTMyIGZpZF9pbnRlcnZhbCwgc2F2ZXZpZCA9IGRhdGEtPmN1cnJ2aWQ7CiAKLQlpZiAoKHJlcWZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyOiBpbGxlZ2FsIGxvLWxvIHRyYW5zaXRpb24gMHgleCAweCV4XG4iLAotCQkJcmVxZmlkLCBkYXRhLT5jdXJyZmlkKTsKKwlpZiAoKHJlcWZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pICYmCisJICAgIChkYXRhLT5jdXJyZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyOiBpbGxlZ2FsIGxvLWxvIHRyYW5zaXRpb24gIgorCQkJCSIweCV4IDB4JXhcbiIsIHJlcWZpZCwgZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmIChkYXRhLT5jdXJyZmlkID09IHJlcWZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDIgbnVsbCBmaWQgdHJhbnNpdGlvbiAweCV4XG4iLCBkYXRhLT5jdXJyZmlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGgyIG51bGwgZmlkIHRyYW5zaXRpb24gMHgleFxuIiwKKwkJCQlkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZHByaW50aygicGgyIChjcHUlZCk6IHN0YXJ0aW5nLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgcmVxZmlkIDB4JXhcbiIsCisJZHByaW50aygicGgyIChjcHUlZCk6IHN0YXJ0aW5nLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgIgorCQkicmVxZmlkIDB4JXhcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCwgcmVxZmlkKTsKIApAQCAtMzkwLDE0ICs0MTEsMTQgQEAKIAogCQlpZiAocmVxZmlkID4gZGF0YS0+Y3VycmZpZCkgewogCQkJaWYgKGRhdGEtPmN1cnJmaWQgPiBMT19GSURfVEFCTEVfVE9QKSB7Ci0JCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwgZGF0YS0+Y3VycmZpZCArIGZpZF9pbnRlcnZhbCkpIHsKKwkJCQlpZiAod3JpdGVfbmV3X2ZpZChkYXRhLAorCQkJCQkJZGF0YS0+Y3VycmZpZCArIGZpZF9pbnRlcnZhbCkpCiAJCQkJCXJldHVybiAxOwotCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHdyaXRlX25ld19maWQKLQkJCQkgICAgKGRhdGEsIDIgKyBjb252ZXJ0X2ZpZF90b192Y29fZmlkKGRhdGEtPmN1cnJmaWQpKSkgeworCQkJCSAgICAoZGF0YSwKKwkJCQkgICAgIDIgKyBjb252ZXJ0X2ZpZF90b192Y29fZmlkKGRhdGEtPmN1cnJmaWQpKSkKIAkJCQkJcmV0dXJuIDE7Ci0JCQkJfQogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKHdyaXRlX25ld19maWQoZGF0YSwgZGF0YS0+Y3VycmZpZCAtIGZpZF9pbnRlcnZhbCkpCkBAIC00MTcsNyArNDM4LDggQEAKIAogCWlmIChkYXRhLT5jdXJyZmlkICE9IHJlcWZpZCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkicGgyOiBtaXNtYXRjaCwgZmFpbGVkIGZpZCB0cmFuc2l0aW9uLCBjdXJyIDB4JXgsIHJlcSAweCV4XG4iLAorCQkJInBoMjogbWlzbWF0Y2gsIGZhaWxlZCBmaWQgdHJhbnNpdGlvbiwgIgorCQkJImN1cnIgMHgleCwgcmVxIDB4JXhcbiIsCiAJCQlkYXRhLT5jdXJyZmlkLCByZXFmaWQpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC00MzUsNyArNDU3LDggQEAKIH0KIAogLyogUGhhc2UgMyAtIGNvcmUgdm9sdGFnZSB0cmFuc2l0aW9uIGZsb3cgLi4uIGp1bXAgdG8gdGhlIGZpbmFsIHZpZC4gKi8KLXN0YXRpYyBpbnQgY29yZV92b2x0YWdlX3Bvc3RfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcXZpZCkKK3N0YXRpYyBpbnQgY29yZV92b2x0YWdlX3Bvc3RfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdTMyIHJlcXZpZCkKIHsKIAl1MzIgc2F2ZWZpZCA9IGRhdGEtPmN1cnJmaWQ7CiAJdTMyIHNhdmVyZXF2aWQgPSByZXF2aWQ7CkBAIC00NTcsNyArNDgwLDggQEAKIAogCQlpZiAoZGF0YS0+Y3VycnZpZCAhPSByZXF2aWQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAicGgzOiBmYWlsZWQgdmlkIHRyYW5zaXRpb25cbiwgcmVxIDB4JXgsIGN1cnIgMHgleCIsCisJCQkgICAgICAgInBoMzogZmFpbGVkIHZpZCB0cmFuc2l0aW9uXG4sICIKKwkJCSAgICAgICAicmVxIDB4JXgsIGN1cnIgMHgleCIsCiAJCQkgICAgICAgcmVxdmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC01MDgsNyArNTMyLDggQEAKIAlpZiAoKGVheCAmIENQVUlEX1hGQU0pID09IENQVUlEX1hGQU1fSzgpIHsKIAkJaWYgKCgoZWF4ICYgQ1BVSURfVVNFX1hGQU1fWE1PRCkgIT0gQ1BVSURfVVNFX1hGQU1fWE1PRCkgfHwKIAkJICAgICgoZWF4ICYgQ1BVSURfWE1PRCkgPiBDUFVJRF9YTU9EX1JFVl9NQVNLKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByb2Nlc3NvciBjcHVpZCAleCBub3Qgc3VwcG9ydGVkXG4iLCBlYXgpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkiUHJvY2Vzc29yIGNwdWlkICV4IG5vdCBzdXBwb3J0ZWRcbiIsIGVheCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC01MjAsOCArNTQ1LDEwIEBACiAJCX0KIAogCQljcHVpZChDUFVJRF9GUkVRX1ZPTFRfQ0FQQUJJTElUSUVTLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLQkJaWYgKChlZHggJiBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkgIT0gUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJQb3dlciBzdGF0ZSB0cmFuc2l0aW9ucyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJaWYgKChlZHggJiBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkKKwkJCSE9IFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCSJQb3dlciBzdGF0ZSB0cmFuc2l0aW9ucyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsgLyogbXVzdCBiZSBhIEhXIFBzdGF0ZSBjYXBhYmxlIHByb2Nlc3NvciAqLwpAQCAtNTM5LDcgKzU2Niw4IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX3BzdF90YWJsZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IHBzdF9zICpwc3QsIHU4IG1heHZpZCkKK3N0YXRpYyBpbnQgY2hlY2tfcHN0X3RhYmxlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgcHN0X3MgKnBzdCwKKwkJdTggbWF4dmlkKQogewogCXVuc2lnbmVkIGludCBqOwogCXU4IGxhc3RmaWQgPSAweGZmOwpAQCAtNTUwLDEyICs1NzgsMTQgQEAKIAkJCSAgICAgICBqLCBwc3Rbal0udmlkKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChwc3Rbal0udmlkIDwgZGF0YS0+cnZvKSB7CS8qIHZpZCArIHJ2byA+PSAwICovCisJCWlmIChwc3Rbal0udmlkIDwgZGF0YS0+cnZvKSB7CisJCQkvKiB2aWQgKyBydm8gPj0gMCAqLwogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIjAgdmlkIGV4Y2VlZGVkIHdpdGggcHN0YXRlIgogCQkJICAgICAgICIgJWRcbiIsIGopOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJaWYgKHBzdFtqXS52aWQgPCBtYXh2aWQgKyBkYXRhLT5ydm8pIHsJLyogdmlkICsgcnZvID49IG1heHZpZCAqLworCQlpZiAocHN0W2pdLnZpZCA8IG1heHZpZCArIGRhdGEtPnJ2bykgeworCQkJLyogdmlkICsgcnZvID49IG1heHZpZCAqLwogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIm1heHZpZCBleGNlZWRlZCB3aXRoIHBzdGF0ZSIKIAkJCSAgICAgICAiICVkXG4iLCBqKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtNTc5LDIzICs2MDksMzEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChsYXN0ZmlkID4gTE9fRklEX1RBQkxFX1RPUCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBGV19CVUcgUEZYICAiZmlyc3QgZmlkIG5vdCBmcm9tIGxvIGZyZXEgdGFibGVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIEZXX0JVRyBQRlgKKwkJCSJmaXJzdCBmaWQgbm90IGZyb20gbG8gZnJlcSB0YWJsZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9lbnRyeShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGVudHJ5KQoreworCWRhdGEtPnBvd2Vybm93X3RhYmxlW2VudHJ5XS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X2Jhc2ljcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkKIHsKIAlpbnQgajsKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykgewotCQlpZiAoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ICE9IENQVUZSRVFfRU5UUllfSU5WQUxJRCkgeworCQlpZiAoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ICE9CisJCQkJQ1BVRlJFUV9FTlRSWV9JTlZBTElEKSB7CiAJCQlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgICVkIDogcHN0YXRlICVkICglZCBNSHopXG4iLAotCQkJCQlqLAorCQkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJCSIgICAlZCA6IHBzdGF0ZSAlZCAoJWQgTUh6KVxuIiwgaiwKIAkJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXgsCiAJCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeS8xMDAwKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgICVkIDogZmlkIDB4JXggKCVkIE1IeiksIHZpZCAweCV4XG4iLAorCQkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJCSIgICAlZCA6IGZpZCAweCV4ICglZCBNSHopLCB2aWQgMHgleFxuIiwKIAkJCQkJaiwKIAkJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXggJiAweGZmLAogCQkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kvMTAwMCwKQEAgLTYwNCwyMCArNjQyLDI1IEBACiAJCX0KIAl9CiAJaWYgKGRhdGEtPmJhdHBzKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT25seSAlZCBwc3RhdGVzIG9uIGJhdHRlcnlcbiIsIGRhdGEtPmJhdHBzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9ubHkgJWQgcHN0YXRlcyBvbiBiYXR0ZXJ5XG4iLAorCQkJCWRhdGEtPmJhdHBzKTsKIH0KIAotc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgcHN0X3MgKnBzdCwgdTggbWF4dmlkKQorc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQlzdHJ1Y3QgcHN0X3MgKnBzdCwgdTggbWF4dmlkKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGU7CiAJdW5zaWduZWQgaW50IGo7CiAKLQlpZiAoZGF0YS0+YmF0cHMpIHsgICAgLyogdXNlIEFDUEkgc3VwcG9ydCB0byBnZXQgZnVsbCBzcGVlZCBvbiBtYWlucyBwb3dlciAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiT25seSAlZCBwc3RhdGVzIHVzYWJsZSAodXNlIEFDUEkgZHJpdmVyIGZvciBmdWxsIHJhbmdlXG4iLCBkYXRhLT5iYXRwcyk7CisJaWYgKGRhdGEtPmJhdHBzKSB7CisJCS8qIHVzZSBBQ1BJIHN1cHBvcnQgdG8gZ2V0IGZ1bGwgc3BlZWQgb24gbWFpbnMgcG93ZXIgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCSJPbmx5ICVkIHBzdGF0ZXMgdXNhYmxlICh1c2UgQUNQSSBkcml2ZXIgZm9yIGZ1bGwgIgorCQkJInJhbmdlXG4iLCBkYXRhLT5iYXRwcyk7CiAJCWRhdGEtPm51bXBzID0gZGF0YS0+YmF0cHM7CiAJfQogCi0JZm9yICggaj0xOyBqPGRhdGEtPm51bXBzOyBqKysgKSB7CisJZm9yIChqID0gMTsgaiA8IGRhdGEtPm51bXBzOyBqKyspIHsKIAkJaWYgKHBzdFtqLTFdLmZpZCA+PSBwc3Rbal0uZmlkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJQU1Qgb3V0IG9mIHNlcXVlbmNlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjQwLDkgKzY4MywxMSBAQAogCX0KIAogCWZvciAoaiA9IDA7IGogPCBkYXRhLT5udW1wczsgaisrKSB7CisJCWludCBmcmVxOwogCQlwb3dlcm5vd190YWJsZVtqXS5pbmRleCA9IHBzdFtqXS5maWQ7IC8qIGxvd2VyIDggYml0cyAqLwogCQlwb3dlcm5vd190YWJsZVtqXS5pbmRleCB8PSAocHN0W2pdLnZpZCA8PCA4KTsgLyogdXBwZXIgOCBiaXRzICovCi0JCXBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQocHN0W2pdLmZpZCk7CisJCWZyZXEgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKHBzdFtqXS5maWQpOworCQlwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgPSBmcmVxOwogCX0KIAlwb3dlcm5vd190YWJsZVtkYXRhLT5udW1wc10uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7CiAJcG93ZXJub3dfdGFibGVbZGF0YS0+bnVtcHNdLmluZGV4ID0gMDsKQEAgLTY1OCw3ICs3MDMsOCBAQAogCQlwcmludF9iYXNpY3MoZGF0YSk7CiAKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykKLQkJaWYgKChwc3Rbal0uZmlkPT1kYXRhLT5jdXJyZmlkKSAmJiAocHN0W2pdLnZpZD09ZGF0YS0+Y3VycnZpZCkpCisJCWlmICgocHN0W2pdLmZpZCA9PSBkYXRhLT5jdXJyZmlkKSAmJgorCQkgICAgKHBzdFtqXS52aWQgPT0gZGF0YS0+Y3VycnZpZCkpCiAJCQlyZXR1cm4gMDsKIAogCWRwcmludGsoImN1cnJmaWQvdmlkIGRvIG5vdCBtYXRjaCBQU1QsIGlnbm9yaW5nXG4iKTsKQEAgLTY5OCw3ICs3NDQsOCBAQAogCQl9CiAKIAkJZGF0YS0+dnN0YWJsZSA9IHBzYi0+dnN0YWJsZTsKLQkJZHByaW50aygidm9sdGFnZSBzdGFiaWxpemF0aW9uIHRpbWU6ICVkKCoyMHVzKVxuIiwgZGF0YS0+dnN0YWJsZSk7CisJCWRwcmludGsoInZvbHRhZ2Ugc3RhYmlsaXphdGlvbiB0aW1lOiAlZCgqMjB1cylcbiIsCisJCQkJZGF0YS0+dnN0YWJsZSk7CiAKIAkJZHByaW50aygiZmxhZ3MyOiAweCV4XG4iLCBwc2ItPmZsYWdzMik7CiAJCWRhdGEtPnJ2byA9IHBzYi0+ZmxhZ3MyICYgMzsKQEAgLTcxMywxMSArNzYwLDEyIEBACiAKIAkJZHByaW50aygibnVtcHN0OiAweCV4XG4iLCBwc2ItPm51bV90YWJsZXMpOwogCQljcHN0ID0gcHNiLT5udW1fdGFibGVzOwotCQlpZiAoKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZjMCkgfHwgKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZlMCkgKXsKKwkJaWYgKChwc2ItPmNwdWlkID09IDB4MDAwMDBmYzApIHx8CisJCSAgICAocHNiLT5jcHVpZCA9PSAweDAwMDAwZmUwKSkgewogCQkJdGhpc2NwdWlkID0gY3B1aWRfZWF4KENQVUlEX1BST0NFU1NPUl9TSUdOQVRVUkUpOwotCQkJaWYgKCh0aGlzY3B1aWQgPT0gMHgwMDAwMGZjMCkgfHwgKHRoaXNjcHVpZCA9PSAweDAwMDAwZmUwKSApIHsKKwkJCWlmICgodGhpc2NwdWlkID09IDB4MDAwMDBmYzApIHx8CisJCQkgICAgKHRoaXNjcHVpZCA9PSAweDAwMDAwZmUwKSkKIAkJCQljcHN0ID0gMTsKLQkJCX0KIAkJfQogCQlpZiAoY3BzdCAhPSAxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAibnVtcHN0IG11c3QgYmUgMVxuIik7CkBAIC03MzIsNyArNzgwLDggQEAKIAogCQlkYXRhLT5udW1wcyA9IHBzYi0+bnVtcHM7CiAJCWRwcmludGsoIm51bXBzdGF0ZXM6IDB4JXhcbiIsIGRhdGEtPm51bXBzKTsKLQkJcmV0dXJuIGZpbGxfcG93ZXJub3dfdGFibGUoZGF0YSwgKHN0cnVjdCBwc3RfcyAqKShwc2IrMSksIG1heHZpZCk7CisJCXJldHVybiBmaWxsX3Bvd2Vybm93X3RhYmxlKGRhdGEsCisJCQkJKHN0cnVjdCBwc3RfcyAqKShwc2IrMSksIG1heHZpZCk7CiAJfQogCS8qCiAJICogSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIGNvbXBsYWluIHRvIEJJT1MgbWFudWZhY3R1cmVyLiBJZgpAQCAtNzQ1LDI4ICs3OTQsMzEgQEAKIAkgKiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUsIHdoaWNoIGlzIGF2YWlsYWJsZSBvbgogCSAqIHd3dy5hbWQuY29tCiAJICovCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiQklPUyBlcnJvciAtIG5vIFBTQiBvciBBQ1BJIF9QU1Mgb2JqZWN0c1xuIik7CisJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIk5vIFBTQiBvciBBQ1BJIF9QU1Mgb2JqZWN0c1xuIik7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKLXN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHZvaWQgcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CisJYWNwaV9pbnRlZ2VyIGNvbnRyb2w7CisKIAlpZiAoIWRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCB8fCAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKSkKIAkJcmV0dXJuOwogCi0JZGF0YS0+aXJ0ID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gSVJUX1NISUZUKSAmIElSVF9NQVNLOwotCWRhdGEtPnJ2byA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IFJWT19TSElGVCkgJiBSVk9fTUFTSzsKLQlkYXRhLT5leHR0eXBlID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gRVhUX1RZUEVfU0hJRlQpICYgRVhUX1RZUEVfTUFTSzsKLQlkYXRhLT5wbGxsb2NrID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gUExMX0xfU0hJRlQpICYgUExMX0xfTUFTSzsKLQlkYXRhLT52aWRtdnMgPSAxIDw8ICgoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBNVlNfU0hJRlQpICYgTVZTX01BU0spOwotCWRhdGEtPnZzdGFibGUgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBWU1RfU0hJRlQpICYgVlNUX01BU0s7Ci19CisJY29udHJvbCA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2w7IGRhdGEtPmlydCA9IChjb250cm9sCisJCQk+PiBJUlRfU0hJRlQpICYgSVJUX01BU0s7IGRhdGEtPnJ2byA9IChjb250cm9sID4+CisJCQkJUlZPX1NISUZUKSAmIFJWT19NQVNLOyBkYXRhLT5leHR0eXBlID0gKGNvbnRyb2wKKwkJCQkJPj4gRVhUX1RZUEVfU0hJRlQpICYgRVhUX1RZUEVfTUFTSzsKKwlkYXRhLT5wbGxsb2NrID0gKGNvbnRyb2wgPj4gUExMX0xfU0hJRlQpICYgUExMX0xfTUFTSzsgZGF0YS0+dmlkbXZzID0gMQorCQk8PCAoKGNvbnRyb2wgPj4gTVZTX1NISUZUKSAmIE1WU19NQVNLKTsgZGF0YS0+dnN0YWJsZSA9CisJCShjb250cm9sID4+IFZTVF9TSElGVCkgJiBWU1RfTUFTSzsgfQogCiBzdGF0aWMgaW50IHBvd2Vybm93X2s4X2NwdV9pbml0X2FjcGkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZTsKIAlpbnQgcmV0X3ZhbCA9IC1FTk9ERVY7CisJYWNwaV9pbnRlZ2VyIHNwYWNlX2lkOwogCiAJaWYgKGFjcGlfcHJvY2Vzc29yX3JlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsIGRhdGEtPmNwdSkpIHsKIAkJZHByaW50aygicmVnaXN0ZXIgcGVyZm9ybWFuY2UgZmFpbGVkOiBiYWQgQUNQSSBkYXRhXG4iKTsKQEAgLTc3OSwxMSArODMxLDEyIEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoKGRhdGEtPmFjcGlfZGF0YS5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB8fAotCQkoZGF0YS0+YWNwaV9kYXRhLnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkpIHsKKwlzcGFjZV9pZCA9IGRhdGEtPmFjcGlfZGF0YS5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkOworCWlmICgoc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHx8CisJCShzcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkpIHsKIAkJZHByaW50aygiSW52YWxpZCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKCV4IC0gJXgpXG4iLAogCQkJZGF0YS0+YWNwaV9kYXRhLmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQsCi0JCQlkYXRhLT5hY3BpX2RhdGEuc3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkKTsKKwkJCXNwYWNlX2lkKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIApAQCAtODAyLDcgKzg1NSw4IEBACiAJaWYgKHJldF92YWwpCiAJCWdvdG8gZXJyX291dF9tZW07CiAKLQlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCXBvd2Vybm93X3RhYmxlW2RhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudF0uZnJlcXVlbmN5ID0KKwkJQ1BVRlJFUV9UQUJMRV9FTkQ7CiAJcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5pbmRleCA9IDA7CiAJZGF0YS0+cG93ZXJub3dfdGFibGUgPSBwb3dlcm5vd190YWJsZTsKIApAQCAtODMwLDEzICs4ODQsMTUgQEAKIGVycl9vdXQ6CiAJYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpOwogCi0JLyogZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IGluZm9ybXMgdXMgYXQgLT5leGl0KCkgd2hldGhlciBBQ1BJIHdhcyB1c2VkICovCisJLyogZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IGluZm9ybXMgdXMgYXQgLT5leGl0KCkKKwkgKiB3aGV0aGVyIEFDUEkgd2FzIHVzZWQgKi8KIAlkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgPSAwOwogCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQogewogCWludCBpOwogCXUzMiBoaSA9IDAsIGxvID0gMDsKQEAgLTg0OCw4NCArOTA0LDEwMSBAQAogCiAJCWluZGV4ID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sICYgSFdfUFNUQVRFX01BU0s7CiAJCWlmIChpbmRleCA+IGRhdGEtPm1heF9od19wc3RhdGUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgcHN0YXRlICVkIC0gYmFkIHZhbHVlICVkLlxuIiwgaSwgaW5kZXgpOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUGxlYXNlIHJlcG9ydCB0byBCSU9TIG1hbnVmYWN0dXJlclxuIik7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIHBzdGF0ZSAlZCAtICIKKwkJCQkJImJhZCB2YWx1ZSAlZC5cbiIsIGksIGluZGV4KTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIlBsZWFzZSByZXBvcnQgdG8gQklPUyAiCisJCQkJCSJtYW51ZmFjdHVyZXJcbiIpOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXJkbXNyKE1TUl9QU1RBVEVfREVGX0JBU0UgKyBpbmRleCwgbG8sIGhpKTsKIAkJaWYgKCEoaGkgJiBIV19QU1RBVEVfVkFMSURfTUFTSykpIHsKIAkJCWRwcmludGsoImludmFsaWQgcHN0YXRlICVkLCBpZ25vcmluZ1xuIiwgaW5kZXgpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJcG93ZXJub3dfdGFibGVbaV0uaW5kZXggPSBpbmRleDsKIAotCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKKwkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0KKwkJCWRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSkKK3N0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCiB7CiAJaW50IGk7CiAJaW50IGNudGxvZnJlcSA9IDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50OyBpKyspIHsKIAkJdTMyIGZpZDsKIAkJdTMyIHZpZDsKKwkJdTMyIGZyZXEsIGluZGV4OworCQlhY3BpX2ludGVnZXIgc3RhdHVzLCBjb250cm9sOwogCiAJCWlmIChkYXRhLT5leHR0eXBlKSB7Ci0JCQlmaWQgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLnN0YXR1cyAmIEVYVF9GSURfTUFTSzsKLQkJCXZpZCA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLnN0YXR1cyA+PiBWSURfU0hJRlQpICYgRVhUX1ZJRF9NQVNLOworCQkJc3RhdHVzID0gIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uc3RhdHVzOworCQkJZmlkID0gc3RhdHVzICYgRVhUX0ZJRF9NQVNLOworCQkJdmlkID0gKHN0YXR1cyA+PiBWSURfU0hJRlQpICYgRVhUX1ZJRF9NQVNLOwogCQl9IGVsc2UgewotCQkJZmlkID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sICYgRklEX01BU0s7Ci0JCQl2aWQgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sID4+IFZJRF9TSElGVCkgJiBWSURfTUFTSzsKKwkJCWNvbnRyb2wgPSAgZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb250cm9sOworCQkJZmlkID0gY29udHJvbCAmIEZJRF9NQVNLOworCQkJdmlkID0gKGNvbnRyb2wgPj4gVklEX1NISUZUKSAmIFZJRF9NQVNLOwogCQl9CiAKIAkJZHByaW50aygiICAgJWQgOiBmaWQgMHgleCwgdmlkIDB4JXhcbiIsIGksIGZpZCwgdmlkKTsKIAotCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCA9IGZpZDsgLyogbG93ZXIgOCBiaXRzICovCi0JCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4IHw9ICh2aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwotCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGZpZCk7CisJCWluZGV4ID0gZmlkIHwgKHZpZDw8OCk7CisJCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4ID0gaW5kZXg7CisKKwkJZnJlcSA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZmlkKTsKKwkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gZnJlcTsKIAogCQkvKiB2ZXJpZnkgZnJlcXVlbmN5IGlzIE9LICovCi0JCWlmICgocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID4gKE1BWF9GUkVRICogMTAwMCkpIHx8Ci0JCQkocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5IDwgKE1JTl9GUkVRICogMTAwMCkpKSB7Ci0JCQlkcHJpbnRrKCJpbnZhbGlkIGZyZXEgJXUga0h6LCBpZ25vcmluZ1xuIiwgcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5KTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJaWYgKChmcmVxID4gKE1BWF9GUkVRICogMTAwMCkpIHx8IChmcmVxIDwgKE1JTl9GUkVRICogMTAwMCkpKSB7CisJCQlkcHJpbnRrKCJpbnZhbGlkIGZyZXEgJXUga0h6LCBpZ25vcmluZ1xuIiwgZnJlcSk7CisJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiB2ZXJpZnkgdm9sdGFnZSBpcyBPSyAtIEJJT1NzIGFyZSB1c2luZyAib2ZmIiB0byBpbmRpY2F0ZSBpbnZhbGlkICovCisJCS8qIHZlcmlmeSB2b2x0YWdlIGlzIE9LIC0KKwkJICogQklPU3MgYXJlIHVzaW5nICJvZmYiIHRvIGluZGljYXRlIGludmFsaWQgKi8KIAkJaWYgKHZpZCA9PSBWSURfT0ZGKSB7CiAJCQlkcHJpbnRrKCJpbnZhbGlkIHZpZCAldSwgaWdub3JpbmdcbiIsIHZpZCk7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiB2ZXJpZnkgb25seSAxIGVudHJ5IGZyb20gdGhlIGxvIGZyZXF1ZW5jeSB0YWJsZSAqLwogCQlpZiAoZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgewogCQkJaWYgKGNudGxvZnJlcSkgewotCQkJCS8qIGlmIGJvdGggZW50cmllcyBhcmUgdGhlIHNhbWUsIGlnbm9yZSB0aGlzIG9uZSAuLi4gKi8KLQkJCQlpZiAoKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmZyZXF1ZW5jeSkgfHwKLQkJCQkgICAgKHBvd2Vybm93X3RhYmxlW2ldLmluZGV4ICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uaW5kZXgpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlRvbyBtYW55IGxvIGZyZXEgdGFibGUgZW50cmllc1xuIik7CisJCQkJLyogaWYgYm90aCBlbnRyaWVzIGFyZSB0aGUgc2FtZSwKKwkJCQkgKiBpZ25vcmUgdGhpcyBvbmUgLi4uICovCisJCQkJaWYgKChmcmVxICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uZnJlcXVlbmN5KSB8fAorCQkJCSAgICAoaW5kZXggIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5pbmRleCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCQkJIlRvbyBtYW55IGxvIGZyZXEgdGFibGUgIgorCQkJCQkJImVudHJpZXNcbiIpOwogCQkJCQlyZXR1cm4gMTsKIAkJCQl9CiAKLQkJCQlkcHJpbnRrKCJkb3VibGUgbG93IGZyZXF1ZW5jeSB0YWJsZSBlbnRyeSwgaWdub3JpbmcgaXQuXG4iKTsKLQkJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQkJZHByaW50aygiZG91YmxlIGxvdyBmcmVxdWVuY3kgdGFibGUgZW50cnksICIKKwkJCQkJCSJpZ25vcmluZyBpdC5cbiIpOworCQkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UKIAkJCQljbnRsb2ZyZXEgPSBpOwogCQl9CiAKLQkJaWYgKHBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDApKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaW52YWxpZCBmcmVxIGVudHJpZXMgJXUga0h6IHZzLiAldSBrSHpcbiIsCi0JCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5LAotCQkJCSh1bnNpZ25lZCBpbnQpIChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMCkpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQlpZiAoZnJlcSAhPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDApKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaW52YWxpZCBmcmVxIGVudHJpZXMgIgorCQkJCSIldSBrSHogdnMuICV1IGtIelxuIiwgZnJlcSwKKwkJCQkodW5zaWduZWQgaW50KQorCQkJCShkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5CisJCQkJICogMTAwMCkpOworCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQpAQCAtOTM1LDcgKzEwMDgsOCBAQAogc3RhdGljIHZvaWQgcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkKIHsKIAlpZiAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50KQotCQlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsIGRhdGEtPmNwdSk7CisJCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwKKwkJCQlkYXRhLT5jcHUpOwogCWZyZWVfY3B1bWFza192YXIoZGF0YS0+YWNwaV9kYXRhLnNoYXJlZF9jcHVfbWFwKTsKIH0KIApAQCAtOTUzLDE1ICsxMDI3LDkgQEAKIAlyZXR1cm4gMTAwMCAqIG1heF9sYXRlbmN5OwogfQogCi0jZWxzZQotc3RhdGljIGludCBwb3dlcm5vd19rOF9jcHVfaW5pdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKSB7IHJldHVybiAtRU5PREVWOyB9Ci1zdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9jcHVfZXhpdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKSB7IHJldHVybjsgfQotc3RhdGljIHZvaWQgcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgaW50IGdldF90cmFuc2l0aW9uX2xhdGVuY3koc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkgKi8KLQogLyogVGFrZSBhIGZyZXF1ZW5jeSwgYW5kIGlzc3VlIHRoZSBmaWQvdmlkIHRyYW5zaXRpb24gY29tbWFuZCAqLwotc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJdTMyIGZpZCA9IDA7CiAJdTMyIHZpZCA9IDA7CkBAIC05ODksNyArMTA1Nyw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICgoZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgJiYgKGRhdGEtPmN1cnJmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgeworCWlmICgoZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgJiYKKwkgICAgKGRhdGEtPmN1cnJmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCSAgICAgICAiaWdub3JpbmcgaWxsZWdhbCBjaGFuZ2UgaW4gbG8gZnJlcSB0YWJsZS0leCB0byAweCV4XG4iLAogCQkgICAgICAgZGF0YS0+Y3VycmZpZCwgZmlkKTsKQEAgLTEwMTcsNyArMTA4Niw4IEBACiB9CiAKIC8qIFRha2UgYSBmcmVxdWVuY3ksIGFuZCBpc3N1ZSB0aGUgaGFyZHdhcmUgcHN0YXRlIHRyYW5zaXRpb24gY29tbWFuZCAqLwotc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJdTMyIHBzdGF0ZSA9IDA7CiAJaW50IHJlcywgaTsKQEAgLTEwMjksNyArMTA5OSw4IEBACiAJcHN0YXRlID0gaW5kZXggJiBIV19QU1RBVEVfTUFTSzsKIAlpZiAocHN0YXRlID4gZGF0YS0+bWF4X2h3X3BzdGF0ZSkKIAkJcmV0dXJuIDA7Ci0JZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwgZGF0YS0+Y3VycnBzdGF0ZSk7CisJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwKKwkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIHBzdGF0ZSk7CiAKIAlmb3JfZWFjaF9jcHVfbWFza19ucihpLCAqKGRhdGEtPmF2YWlsYWJsZV9jb3JlcykpIHsKQEAgLTEwNDgsNyArMTExOSw4IEBACiB9CiAKIC8qIERyaXZlciBlbnRyeSBwb2ludCB0byBzd2l0Y2ggdG8gdGhlIHRhcmdldCBmcmVxdWVuY3kgKi8KLXN0YXRpYyBpbnQgcG93ZXJub3drOF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wsIHVuc2lnbmVkIHRhcmdmcmVxLCB1bnNpZ25lZCByZWxhdGlvbikKK3N0YXRpYyBpbnQgcG93ZXJub3drOF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wsCisJCXVuc2lnbmVkIHRhcmdmcmVxLCB1bnNpZ25lZCByZWxhdGlvbikKIHsKIAljcHVtYXNrX3Qgb2xkbWFzazsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IHBlcl9jcHUocG93ZXJub3dfZGF0YSwgcG9sLT5jcHUpOwpAQCAtMTA4NywxNCArMTE1OSwxOCBAQAogCQlkcHJpbnRrKCJ0YXJnOiBjdXJyIGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKLQkJaWYgKChjaGVja3ZpZCAhPSBkYXRhLT5jdXJydmlkKSB8fCAoY2hlY2tmaWQgIT0gZGF0YS0+Y3VycmZpZCkpIHsKKwkJaWYgKChjaGVja3ZpZCAhPSBkYXRhLT5jdXJydmlkKSB8fAorCQkgICAgKGNoZWNrZmlkICE9IGRhdGEtPmN1cnJmaWQpKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJCSJlcnJvciAtIG91dCBvZiBzeW5jLCBmaXggMHgleCAweCV4LCB2aWQgMHgleCAweCV4XG4iLAotCQkJCWNoZWNrZmlkLCBkYXRhLT5jdXJyZmlkLCBjaGVja3ZpZCwgZGF0YS0+Y3VycnZpZCk7CisJCQkJImVycm9yIC0gb3V0IG9mIHN5bmMsIGZpeCAweCV4IDB4JXgsICIKKwkJCQkidmlkIDB4JXggMHgleFxuIiwKKwkJCQljaGVja2ZpZCwgZGF0YS0+Y3VycmZpZCwKKwkJCQljaGVja3ZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCX0KIAl9CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbCwgZGF0YS0+cG93ZXJub3dfdGFibGUsIHRhcmdmcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbCwgZGF0YS0+cG93ZXJub3dfdGFibGUsCisJCQkJdGFyZ2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlnb3RvIGVycl9vdXQ7CiAKIAltdXRleF9sb2NrKCZmaWR2aWRfbXV0ZXgpOwpAQCAtMTExNCw3ICsxMTkwLDggQEAKIAltdXRleF91bmxvY2soJmZpZHZpZF9tdXRleCk7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIG5ld3N0YXRlKTsKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJCW5ld3N0YXRlKTsKIAllbHNlCiAJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAlyZXQgPSAwOwpAQCAtMTE0MSw2ICsxMjE4LDcgQEAKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YTsKIAljcHVtYXNrX3Qgb2xkbWFzazsKIAlpbnQgcmM7CisJc3RhdGljIGludCBwcmludF9vbmNlOwogCiAJaWYgKCFjcHVfb25saW5lKHBvbC0+Y3B1KSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTYzLDMzICsxMjQxLDMxIEBACiAJCSAqIGFuIFVQIHZlcnNpb24sIGFuZCBpcyBkZXByZWNhdGVkIGJ5IEFNRC4KIAkJICovCiAJCWlmIChudW1fb25saW5lX2NwdXMoKSAhPSAxKSB7Ci0jaWZuZGVmIENPTkZJR19BQ1BJX1BST0NFU1NPUgotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQUNQSSBQcm9jZXNzb3Igc3VwcG9ydCBpcyByZXF1aXJlZCAiCi0JCQkgICAgICAgImZvciBTTVAgc3lzdGVtcyBidXQgaXMgYWJzZW50LiBQbGVhc2UgbG9hZCB0aGUgIgotCQkJICAgICAgICJBQ1BJIFByb2Nlc3NvciBtb2R1bGUgYmVmb3JlIHN0YXJ0aW5nIHRoaXMgIgotCQkJICAgICAgICJkcml2ZXIuXG4iKTsKLSNlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiWW91ciBCSU9TIGRvZXMgbm90IHByb3ZpZGUiCi0JCQkgICAgICAgIiBBQ1BJIF9QU1Mgb2JqZWN0cyBpbiBhIHdheSB0aGF0IExpbnV4ICIKLQkJCSAgICAgICAidW5kZXJzdGFuZHMuIFBsZWFzZSByZXBvcnQgdGhpcyB0byB0aGUgTGludXggIgotCQkJICAgICAgICJBQ1BJIG1haW50YWluZXJzIGFuZCBjb21wbGFpbiB0byB5b3VyIEJJT1MgIgotCQkJICAgICAgICJ2ZW5kb3IuXG4iKTsKLSNlbmRpZgotCQkJa2ZyZWUoZGF0YSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCS8qCisJCQkgKiBSZXBsYWNlIHRoaXMgb25lIHdpdGggcHJpbnRfb25jZSBhcyBzb29uIGFzIHN1Y2ggYQorCQkJICogdGhpbmcgZ2V0cyBpbnRyb2R1Y2VkCisJCQkgKi8KKwkJCWlmICghcHJpbnRfb25jZSkgeworCQkJCVdBUk5fT05DRSgxLCBLRVJOX0VSUiBGV19CVUcgUEZYICJZb3VyIEJJT1MgIgorCQkJCQkiZG9lcyBub3QgcHJvdmlkZSBBQ1BJIF9QU1Mgb2JqZWN0cyAiCisJCQkJCSJpbiBhIHdheSB0aGF0IExpbnV4IHVuZGVyc3RhbmRzLiAiCisJCQkJCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdGhlIExpbnV4IEFDUEkiCisJCQkJCSIgbWFpbnRhaW5lcnMgYW5kIGNvbXBsYWluIHRvIHlvdXIgIgorCQkJCQkiQklPUyB2ZW5kb3IuXG4iKTsKKwkJCQlwcmludF9vbmNlKys7CisJCQl9CisJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJaWYgKHBvbC0+Y3B1ICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJObyBBQ1BJIF9QU1Mgb2JqZWN0cyBmb3IgIgogCQkJICAgICAgICJDUFUgb3RoZXIgdGhhbiBDUFUwLiBDb21wbGFpbiB0byB5b3VyIEJJT1MgIgogCQkJICAgICAgICJ2ZW5kb3IuXG4iKTsKLQkJCWtmcmVlKGRhdGEpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJcmMgPSBmaW5kX3BzYl90YWJsZShkYXRhKTsKLQkJaWYgKHJjKSB7Ci0JCQlrZnJlZShkYXRhKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX291dDsKKwogCQkvKiBUYWtlIGEgY3J1ZGUgZ3Vlc3MgaGVyZS4KIAkJICogVGhhdCBndWVzcyB3YXMgaW4gbWljcm9zZWNvbmRzLCBzbyBtdWx0aXBseSB3aXRoIDEwMDAgKi8KIAkJcG9sLT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9ICgKQEAgLTEyMDQsMTYgKzEyODAsMTYgQEAKIAogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gcG9sLT5jcHUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgcG9sLT5jcHUpOwotCQlnb3RvIGVycl9vdXQ7CisJCWdvdG8gZXJyX291dF91bm1hc2s7CiAJfQogCiAJaWYgKHBlbmRpbmdfYml0X3N0dWNrKCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGluZyBpbml0LCBjaGFuZ2UgcGVuZGluZyBiaXQgc2V0XG4iKTsKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfdW5tYXNrOwogCX0KIAogCWlmIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSkKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfdW5tYXNrOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX09QVEVST04pCiAJCWZpZHZpZF9tc3JfaW5pdCgpOwpAQCAtMTIyOCw3ICsxMzA0LDggQEAKIAlkYXRhLT5hdmFpbGFibGVfY29yZXMgPSBwb2wtPmNwdXM7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIGRhdGEtPmN1cnJwc3RhdGUpOworCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsCisJCQkJZGF0YS0+Y3VycnBzdGF0ZSk7CiAJZWxzZQogCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CiAJZHByaW50aygicG9saWN5IGN1cnJlbnQgZnJlcXVlbmN5ICVkIGtIelxuIiwgcG9sLT5jdXIpOwpAQCAtMTI0NSw3ICsxMzIyLDggQEAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihkYXRhLT5wb3dlcm5vd190YWJsZSwgcG9sLT5jcHUpOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBwc3RhdGUgMHgleFxuIiwgZGF0YS0+Y3VycnBzdGF0ZSk7CisJCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgcHN0YXRlIDB4JXhcbiIsCisJCQkJZGF0YS0+Y3VycnBzdGF0ZSk7CiAJZWxzZQogCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwpAQCAtMTI1NCwxNSArMTMzMiwxNiBAQAogCiAJcmV0dXJuIDA7CiAKLWVycl9vdXQ6CitlcnJfb3V0X3VubWFzazoKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkbWFzayk7CiAJcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShkYXRhKTsKIAorZXJyX291dDoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgcG93ZXJub3drOF9jcHVfZXhpdCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwb3dlcm5vd2s4X2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sKQogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gcGVyX2NwdShwb3dlcm5vd19kYXRhLCBwb2wtPmNwdSk7CiAKQEAgLTEyNzksNyArMTM1OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG93ZXJub3drOF9nZXQgKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vybm93azhfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CkBAIC0xMzE1LDcgKzEzOTQsNyBAQAogCXJldHVybiBraHo7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBwb3dlcm5vd19rOF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcG93ZXJub3dfazhfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTEzNjAsNyArMTQzOSw4IEBACiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmY3B1ZnJlcV9hbWQ2NF9kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJQYXVsIERldnJpZW5kdCA8cGF1bC5kZXZyaWVuZHRAYW1kLmNvbT4gYW5kIE1hcmsgTGFuZ3Nkb3JmIDxtYXJrLmxhbmdzZG9yZkBhbWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiUGF1bCBEZXZyaWVuZHQgPHBhdWwuZGV2cmllbmR0QGFtZC5jb20+IGFuZCAiCisJCSJNYXJrIExhbmdzZG9yZiA8bWFyay5sYW5nc2RvcmZAYW1kLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQU1EIEF0aGxvbiA2NCBhbmQgT3B0ZXJvbiBwcm9jZXNzb3IgZnJlcXVlbmN5IGRyaXZlci4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaAppbmRleCA4ZWNjNzViLi42YzY2OThmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaApAQCAtNDUsMTEgKzQ1LDEwIEBACiAJICogZnJlcXVlbmN5IGlzIGluIGtIeiAqLwogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAgKnBvd2Vybm93X3RhYmxlOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJCiAJLyogdGhlIGFjcGkgdGFibGUgbmVlZHMgdG8gYmUga2VwdC4gaXQncyBvbmx5IGF2YWlsYWJsZSBpZiBBQ1BJIHdhcwogCSAqIHVzZWQgdG8gZGV0ZXJtaW5lIHZhbGlkIGZyZXF1ZW5jeS92aWQvZmlkIHN0YXRlcyAqLwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSBhY3BpX2RhdGE7Ci0jZW5kaWYKKwogCS8qIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBhc3NvY2lhdGVkIGNvcmVzLCBidXQgbGV0IGNwdWZyZXEKIAkgKiBoYW5kbGUgaG90cGx1ZyBldmVudHMgLSBzbyBqdXN0IHBvaW50IGF0IGNwdWZyZXEgcG9sLT5jcHVzCiAJICogc3RydWN0dXJlICovCkBAIC0yMjIsMTAgKzIyMSw4IEBACiAKIHN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KTsKIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQogc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSk7CiBzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGlubGluZSB2b2lkIGRlZmluZV9zaWJsaW5ncyhpbnQgY3B1LCBjcHVtYXNrX3QgY3B1X3NoYXJlZGNvcmVfbWFza1tdKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKaW5kZXggNDJkYTliZC4uNDM1YTk5NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCkBAIC0xOSwxNyArMTksMTkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBNTUNSX0JBU0UJMHhmZmZlZjAwMAkvKiBUaGUgZGVmYXVsdCBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgT0ZGU19DUFVDVEwJMHgyICAgLyogQ1BVIENvbnRyb2wgUmVnaXN0ZXIgKi8KIAogc3RhdGljIF9fdTggX19pb21lbSAqY3B1Y3RsOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNjNTIwX2ZyZXEiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic2M1MjBfZnJlcSIsIG1zZykKKyNkZWZpbmUgUEZYICJzYzUyMF9mcmVxOiAiCiAKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgc2M1MjBfZnJlcV90YWJsZVtdID0gewogCXsweDAxLAkxMDAwMDB9LApAQCAtNDMsNyArNDUsOCBAQAogCiAJc3dpdGNoIChjbG9ja3NwZWVkX3JlZyAmIDB4MDMpIHsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgInNjNTIwX2ZyZXE6IGVycm9yOiBjcHVjdGwgcmVnaXN0ZXIgaGFzIHVuZXhwZWN0ZWQgdmFsdWUgJTAyeFxuIiwgY2xvY2tzcGVlZF9yZWcpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJvcjogY3B1Y3RsIHJlZ2lzdGVyIGhhcyB1bmV4cGVjdGVkICIKKwkJCQkidmFsdWUgJTAyeFxuIiwgY2xvY2tzcGVlZF9yZWcpOwogCWNhc2UgMHgwMToKIAkJcmV0dXJuIDEwMDAwMDsKIAljYXNlIDB4MDI6CkBAIC01MSw3ICs1NCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzYzUyMF9mcmVxX3NldF9jcHVfc3RhdGUgKHVuc2lnbmVkIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNjNTIwX2ZyZXFfc2V0X2NwdV9zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcwlmcmVxczsKQEAgLTc2LDE4ICs3OSwxOSBAQAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogfTsKIAotc3RhdGljIGludCBzYzUyMF9mcmVxX3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHNjNTIwX2ZyZXFfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCAmc2M1MjBfZnJlcV90YWJsZVswXSk7CiB9CiAKLXN0YXRpYyBpbnQgc2M1MjBfZnJlcV90YXJnZXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBzYzUyMF9mcmVxX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCiAJCQkgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewogCXVuc2lnbmVkIGludCBuZXdzdGF0ZSA9IDA7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgc2M1MjBfZnJlcV90YWJsZSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBzYzUyMF9mcmVxX3RhYmxlLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzYzUyMF9mcmVxX3NldF9jcHVfc3RhdGUobmV3c3RhdGUpOwpAQCAtMTE2LDcgKzEyMCw3IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc2M1MjBfZnJlcV90YWJsZSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuIChyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc2M1MjBfZnJlcV90YWJsZSwgcG9saWN5LT5jcHUpOwogCkBAIC0xMzEsNyArMTM1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogc2M1MjBfZnJlcV9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqc2M1MjBfZnJlcV9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMTU1LDEzICsxNTksMTMgQEAKIAlpbnQgZXJyOwogCiAJLyogVGVzdCBpZiB3ZSBoYXZlIHRoZSByaWdodCBoYXJkd2FyZSAqLwotCWlmKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwKLQkJCQljLT54ODYgIT0gNCB8fCBjLT54ODZfbW9kZWwgIT0gOSkgeworCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8CisJICAgIGMtPng4NiAhPSA0IHx8IGMtPng4Nl9tb2RlbCAhPSA5KSB7CiAJCWRwcmludGsoIm5vIEVsYW4gU0M1MjAgcHJvY2Vzc29yIGZvdW5kIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljcHVjdGwgPSBpb3JlbWFwKCh1bnNpZ25lZCBsb25nKShNTUNSX0JBU0UgKyBPRkZTX0NQVUNUTCksIDEpOwotCWlmKCFjcHVjdGwpIHsKKwlpZiAoIWNwdWN0bCkgewogCQlwcmludGsoS0VSTl9FUlIgInNjNTIwX2ZyZXE6IGVycm9yOiBmYWlsZWQgdG8gcmVtYXAgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggZGVkYzFlOS4uOGJiYjExYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCkBAIC0zOSw3ICszOSw3IEBACiAKIC8qIHNwZWVkc3RlcF9wcm9jZXNzb3IKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX3Byb2Nlc3NvcjsKIAogc3RhdGljIHUzMiBwbWJhc2U7CiAKQEAgLTU0LDcgKzU0LDggQEAKIH07CiAKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzcGVlZHN0ZXAtaWNoIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNwZWVkc3RlcC1pY2giLCBtc2cpCiAKIAogLyoqCkBAIC02Miw3ICs2Myw3IEBACiAgKgogICogUmV0dXJuczogLUVOT0RFViBpZiBubyByZWdpc3RlciBjb3VsZCBiZSBmb3VuZAogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF9maW5kX3JlZ2lzdGVyICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfZmluZF9yZWdpc3Rlcih2b2lkKQogewogCWlmICghc3BlZWRzdGVwX2NoaXBzZXRfZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTkwLDcgKzkxLDcgQEAKICAqCiAgKiAgIFRyaWVzIHRvIGNoYW5nZSB0aGUgU3BlZWRTdGVwIHN0YXRlLgogICovCi1zdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlICh1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlKHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKIAl1OCBwbTJfYmxrOwogCXU4IHZhbHVlOwpAQCAtMTMzLDExICsxMzQsMTEgQEAKIAogCWRwcmludGsoInJlYWQgYXQgcG1iYXNlIDB4JXggKyAweDUwIHJldHVybmVkIDB4JXhcbiIsIHBtYmFzZSwgdmFsdWUpOwogCi0JaWYgKHN0YXRlID09ICh2YWx1ZSAmIDB4MSkpIHsKLQkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWRcbiIsIChzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3NvcikgLyAxMDAwKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIGZhaWxlZCAtIEkvTyBlcnJvclxuIik7Ci0JfQorCWlmIChzdGF0ZSA9PSAodmFsdWUgJiAweDEpKQorCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZFxuIiwKKwkJCXNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpIC8gMTAwMCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSBmYWlsZWQgLSBJL08gZXJyb3JcbiIpOwogCiAJcmV0dXJuOwogfQpAQCAtMTQ5LDcgKzE1MCw3IEBACiAgKiAgIFRyaWVzIHRvIGFjdGl2YXRlIHRoZSBTcGVlZFN0ZXAgc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVycy4KICAqIFJldHVybnMgLUVJTlZBTCBvbiBhbiB1bnN1cHBvcnRlZCBjaGlwc2V0LCBhbmQgemVybyBvbiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF9hY3RpdmF0ZSAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX2FjdGl2YXRlKHZvaWQpCiB7CiAJdTE2IHZhbHVlID0gMDsKIApAQCAtMTc1LDIwICsxNzYsMTggQEAKICAqIGZ1bmN0aW9ucy4gUmV0dXJucyB0aGUgU1BFRURTVEVQX0NISVBTRVRfLW51bWJlciBmb3IgdGhlIGRldGVjdGVkCiAgKiBjaGlwc2V0LCBvciB6ZXJvIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0ICh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X2NoaXBzZXQodm9pZCkKIHsKIAlzcGVlZHN0ZXBfY2hpcHNldF9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEyLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAJaWYgKHNwZWVkc3RlcF9jaGlwc2V0X2RldikKIAkJcmV0dXJuIDQ7IC8qIDQtTSAqLwogCiAJc3BlZWRzdGVwX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCSAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMiwKLQkJCSAgICAgIFBDSV9BTllfSUQsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAorCQkJICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJCSAgICAgIE5VTEwpOwogCWlmIChzcGVlZHN0ZXBfY2hpcHNldF9kZXYpCiAJCXJldHVybiAzOyAvKiAzLU0gKi8KQEAgLTE5Niw4ICsxOTUsNyBAQAogCiAJc3BlZWRzdGVwX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCSAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8xMCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAorCQkJICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJCSAgICAgIE5VTEwpOwogCWlmIChzcGVlZHN0ZXBfY2hpcHNldF9kZXYpIHsKIAkJLyogc3BlZWRzdGVwLmMgY2F1c2VzIGxvY2t1cHMgb24gRGVsbCBJbnNwaXJvbnMgODAwMCBhbmQKQEAgLTIwOCw4ICsyMDYsNyBAQAogCiAJCWhvc3RicmlkZ2UgID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCSAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfTUMsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAogCQlpZiAoIWhvc3RicmlkZ2UpCkBAIC0yMzYsNyArMjMzLDcgQEAKIAogCWNwdXNfYWxsb3dlZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVzKTsKLQlzcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKKwlzcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpOwogCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVzX2FsbG93ZWQpOwogCWRwcmludGsoImRldGVjdGVkICV1IGtIeiBhcyBjdXJyZW50IGZyZXF1ZW5jeVxuIiwgc3BlZWQpOwogCXJldHVybiBzcGVlZDsKQEAgLTI1MSwxMSArMjQ4LDEyIEBACiAgKiBzcGVlZHN0ZXBfdGFyZ2V0IC0gc2V0IGEgbmV3IENQVUZyZXEgcG9saWN5CiAgKiBAcG9saWN5OiBuZXcgcG9saWN5CiAgKiBAdGFyZ2V0X2ZyZXE6IHRoZSB0YXJnZXQgZnJlcXVlbmN5Ci0gKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeSAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKKyAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5CisgKgkoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKICAqCiAgKiBTZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5LgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBzcGVlZHN0ZXBfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCiAJCQkgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKQEAgLTI2NCw3ICsyNjIsOCBAQAogCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CiAJaW50IGk7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmcmVxcy5vbGQgPSBfc3BlZWRzdGVwX2dldChwb2xpY3ktPmNwdXMpOwpAQCAtMzA4LDcgKzMwNyw3IEBACiAgKiBMaW1pdCBtdXN0IGJlIHdpdGhpbiBzcGVlZHN0ZXBfbG93X2ZyZXEgYW5kIHNwZWVkc3RlcF9oaWdoX2ZyZXEsIHdpdGgKICAqIGF0IGxlYXN0IG9uZSBib3JkZXIgaW5jbHVkZWQuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0pOwogfQpAQCAtMzQ0LDcgKzM0Myw4IEBACiAJCXJldHVybiAtRUlPOwogCiAJZHByaW50aygiY3VycmVudGx5IGF0ICVzIHNwZWVkIHNldHRpbmcgLSAlaSBNSHpcbiIsCi0JCShzcGVlZCA9PSBzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5KSA/ICJsb3ciIDogImhpZ2giLAorCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkKKwkJPyAibG93IiA6ICJoaWdoIiwKIAkJKHNwZWVkIC8gMTAwMCkpOwogCiAJLyogY3B1aW5mbyBhbmQgZGVmYXVsdCBwb2xpY3kgdmFsdWVzICovCkBAIC0zNTIsOSArMzUyLDkgQEAKIAogCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBzcGVlZHN0ZXBfZnJlcXMpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybiAocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzcGVlZHN0ZXBfZnJlcXMsIHBvbGljeS0+Y3B1KTsKKwljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzcGVlZHN0ZXBfZnJlcXMsIHBvbGljeS0+Y3B1KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzY2LDcgKzM2Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBzcGVlZHN0ZXBfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnNwZWVkc3RlcF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMzk2LDEzICszOTYsMTUgQEAKIAkvKiBkZXRlY3QgcHJvY2Vzc29yICovCiAJc3BlZWRzdGVwX3Byb2Nlc3NvciA9IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCk7CiAJaWYgKCFzcGVlZHN0ZXBfcHJvY2Vzc29yKSB7Ci0JCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgY2FwYWJsZSBwcm9jZXNzb3Igbm90IGZvdW5kXG4iKTsKKwkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBjYXBhYmxlIHByb2Nlc3NvciAiCisJCQkJIm5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIGRldGVjdCBjaGlwc2V0ICovCiAJaWYgKCFzcGVlZHN0ZXBfZGV0ZWN0X2NoaXBzZXQoKSkgewotCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGZvciB0aGlzIGNoaXBzZXQgbm90ICh5ZXQpIGF2YWlsYWJsZS5cbiIpOworCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGZvciB0aGlzIGNoaXBzZXQgbm90ICIKKwkJCQkiKHlldCkgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDMxLDkgKzQzMywxMSBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiU3BlZWRzdGVwIGRyaXZlciBmb3IgSW50ZWwgbW9iaWxlIHByb2Nlc3NvcnMgb24gY2hpcHNldHMgd2l0aCBJQ0gtTSBzb3V0aGJyaWRnZXMuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sICIKKwkJIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3BlZWRzdGVwIGRyaXZlciBmb3IgSW50ZWwgbW9iaWxlIHByb2Nlc3NvcnMgb24gY2hpcHNldHMgIgorCQkid2l0aCBJQ0gtTSBzb3V0aGJyaWRnZXMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHNwZWVkc3RlcF9pbml0KTsKIG1vZHVsZV9leGl0KHNwZWVkc3RlcF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCmluZGV4IGNkYWM3ZDYuLjJlM2M2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwpAQCAtMTYsMTIgKzE2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS90c2MuaD4KICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAic3BlZWRzdGVwLWxpYiIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJzcGVlZHN0ZXAtbGliIiwgbXNnKQorCisjZGVmaW5lIFBGWCAic3BlZWRzdGVwLWxpYjogIgogCiAjaWZkZWYgQ09ORklHX1g4Nl9TUEVFRFNURVBfUkVMQVhFRF9DQVBfQ0hFQ0sKLXN0YXRpYyBpbnQgcmVsYXhlZF9jaGVjayA9IDA7CitzdGF0aWMgaW50IHJlbGF4ZWRfY2hlY2s7CiAjZWxzZQogI2RlZmluZSByZWxheGVkX2NoZWNrIDAKICNlbmRpZgpAQCAtMzAsMTQgKzM0LDE0IEBACiAgKiAgICAgICAgICAgICAgICAgICBHRVQgUFJPQ0VTU09SIENPUkUgU1BFRUQgSU4gS0haICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHBlbnRpdW0zX2dldF9mcmVxdWVuY3kgKHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCitzdGF0aWMgdW5zaWduZWQgaW50IHBlbnRpdW0zX2dldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3NvcikKIHsKLSAgICAgICAgLyogU2VlIHRhYmxlIDE0IG9mIHAzX2RzLnBkZiBhbmQgdGFibGUgMjIgb2YgMjk4MzQwMDMucGRmICovCisJLyogU2VlIHRhYmxlIDE0IG9mIHAzX2RzLnBkZiBhbmQgdGFibGUgMjIgb2YgMjk4MzQwMDMucGRmICovCiAJc3RydWN0IHsKIAkJdW5zaWduZWQgaW50IHJhdGlvOwkvKiBGcmVxdWVuY3kgTXVsdGlwbGllciAoeDEwKSAqLwogCQl1OCBiaXRtYXA7CQkvKiBwb3dlciBvbiBjb25maWd1cmF0aW9uIGJpdHMKIAkJCQkJWzI3LCAyNToyMl0gKGluIE1TUiAweDJhKSAqLwotCX0gbXNyX2RlY29kZV9tdWx0IFtdID0geworCX0gbXNyX2RlY29kZV9tdWx0W10gPSB7CiAJCXsgMzAsIDB4MDEgfSwKIAkJeyAzNSwgMHgwNSB9LAogCQl7IDQwLCAweDAyIH0sCkBAIC01Miw3ICs1Niw3IEBACiAJCXsgODUsIDB4MjYgfSwKIAkJeyA5MCwgMHgyMCB9LAogCQl7IDEwMCwgMHgyYiB9LAotCQl7IDAsIDB4ZmYgfSAgICAgLyogZXJyb3Igb3IgdW5rbm93biB2YWx1ZSAqLworCQl7IDAsIDB4ZmYgfQkvKiBlcnJvciBvciB1bmtub3duIHZhbHVlICovCiAJfTsKIAogCS8qIFBJSUkoLU0pIEZTQiBzZXR0aW5nczogc2VlIHRhYmxlIGIxLWIgb2YgMjQ1NDcyMDYucGRmICovCkBAIC02MCw3ICs2NCw3IEBACiAJCXVuc2lnbmVkIGludCB2YWx1ZTsJLyogRnJvbnQgU2lkZSBCdXMgc3BlZWQgaW4gTUh6ICovCiAJCXU4IGJpdG1hcDsJCS8qIHBvd2VyIG9uIGNvbmZpZ3VyYXRpb24gYml0cyBbMTg6IDE5XQogCQkJCQkoaW4gTVNSIDB4MmEpICovCi0JfSBtc3JfZGVjb2RlX2ZzYiBbXSA9IHsKKwl9IG1zcl9kZWNvZGVfZnNiW10gPSB7CiAJCXsgIDY2LCAweDAgfSwKIAkJeyAxMDAsIDB4MiB9LAogCQl7IDEzMywgMHgxIH0sCkBAIC04NSw3ICs4OSw3IEBACiAJfQogCiAJLyogZGVjb2RlIHRoZSBtdWx0aXBsaWVyICovCi0JaWYgKHByb2Nlc3NvciA9PSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQ19FQVJMWSkgeworCWlmIChwcm9jZXNzb3IgPT0gU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFkpIHsKIAkJZHByaW50aygid29ya2Fyb3VuZCBmb3IgZWFybHkgUElJSXNcbiIpOwogCQltc3JfbG8gJj0gMHgwM2MwMDAwMDsKIAl9IGVsc2UKQEAgLTk3LDkgKzEwMSwxMCBAQAogCQlqKys7CiAJfQogCi0JZHByaW50aygic3BlZWQgaXMgJXVcbiIsIChtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMCkpOworCWRwcmludGsoInNwZWVkIGlzICV1XG4iLAorCQkobXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDApKTsKIAotCXJldHVybiAobXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDApOworCXJldHVybiBtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMDsKIH0KIAogCkBAIC0xMTIsMjAgKzExNywyMyBAQAogCiAJLyogc2VlIHRhYmxlIEItMiBvZiAyNDU0NzIxMi5wZGYgKi8KIAlpZiAobXNyX2xvICYgMHgwMDA0MDAwMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAic3BlZWRzdGVwLWxpYjogUE0gLSBpbnZhbGlkIEZTQjogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl90bXApOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlBNIC0gaW52YWxpZCBGU0I6IDB4JXggMHgleFxuIiwKKwkJCQltc3JfbG8sIG1zcl90bXApOwogCQlyZXR1cm4gMDsKIAl9CiAKIAltc3JfdG1wID0gKG1zcl9sbyA+PiAyMikgJiAweDFmOwotCWRwcmludGsoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLCBtc3JfdG1wLCAobXNyX3RtcCAqIDEwMCAqIDEwMDApKTsKKwlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwKKwkJCW1zcl90bXAsIChtc3JfdG1wICogMTAwICogMTAwMCkpOwogCi0JcmV0dXJuIChtc3JfdG1wICogMTAwICogMTAwMCk7CisJcmV0dXJuIG1zcl90bXAgKiAxMDAgKiAxMDAwOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBlbnRpdW1fY29yZV9nZXRfZnJlcXVlbmN5KHZvaWQpCiB7CiAJdTMyIGZzYiA9IDA7CiAJdTMyIG1zcl9sbywgbXNyX3RtcDsKKwlpbnQgcmV0OwogCiAJcmRtc3IoTVNSX0ZTQl9GUkVRLCBtc3JfbG8sIG1zcl90bXApOwogCS8qIHNlZSB0YWJsZSBCLTIgb2YgMjUzNjY5MjAucGRmICovCkBAIC0xNTMsMTIgKzE2MSwxNSBAQAogCX0KIAogCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBtc3JfbG8sIG1zcl90bXApOwotCWRwcmludGsoIlBDT1JFIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKKwlkcHJpbnRrKCJQQ09SRSAtIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOiAweCV4IDB4JXhcbiIsCisJCQltc3JfbG8sIG1zcl90bXApOwogCiAJbXNyX3RtcCA9IChtc3JfbG8gPj4gMjIpICYgMHgxZjsKLQlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwgbXNyX3RtcCwgKG1zcl90bXAgKiBmc2IpKTsKKwlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwKKwkJCW1zcl90bXAsIChtc3JfdG1wICogZnNiKSk7CiAKLQlyZXR1cm4gKG1zcl90bXAgKiBmc2IpOworCXJldCA9IChtc3JfdG1wICogZnNiKTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTE2Nyw2ICsxNzgsMTYgQEAKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKIAl1MzIgbXNyX2xvLCBtc3JfaGksIG11bHQ7CiAJdW5zaWduZWQgaW50IGZzYiA9IDA7CisJdW5zaWduZWQgaW50IHJldDsKKwl1OCBmc2JfY29kZTsKKworCS8qIFBlbnRpdW0gNCBNb2RlbCAwIGFuZCAxIGRvIG5vdCBoYXZlIHRoZSBDb3JlIENsb2NrIEZyZXF1ZW5jeQorCSAqIHRvIFN5c3RlbSBCdXMgRnJlcXVlbmN5IFJhdGlvIEZpZWxkIGluIHRoZSBQcm9jZXNzb3IgRnJlcXVlbmN5CisJICogQ29uZmlndXJhdGlvbiBSZWdpc3RlciBvZiB0aGUgTVNSLiBUaGVyZWZvcmUgdGhlIGN1cnJlbnQKKwkgKiBmcmVxdWVuY3kgY2Fubm90IGJlIGNhbGN1bGF0ZWQgYW5kIGhhcyB0byBiZSBtZWFzdXJlZC4KKwkgKi8KKwlpZiAoYy0+eDg2X21vZGVsIDwgMikKKwkJcmV0dXJuIGNwdV9raHo7CiAKIAlyZG1zcigweDJjLCBtc3JfbG8sIG1zcl9oaSk7CiAKQEAgLTE3Nyw2MiArMTk4LDYxIEBACiAJICogcmV2aXNpb24gIzEyIGluIFRhYmxlIEItMTogTVNScyBpbiB0aGUgUGVudGl1bSA0IGFuZAogCSAqIEludGVsIFhlb24gUHJvY2Vzc29ycywgb24gcGFnZSBCLTQgYW5kIEItNS4KIAkgKi8KLQlpZiAoYy0+eDg2X21vZGVsIDwgMikKKwlmc2JfY29kZSA9IChtc3JfbG8gPj4gMTYpICYgMHg3OworCXN3aXRjaCAoZnNiX2NvZGUpIHsKKwljYXNlIDA6CiAJCWZzYiA9IDEwMCAqIDEwMDA7Ci0JZWxzZSB7Ci0JCXU4IGZzYl9jb2RlID0gKG1zcl9sbyA+PiAxNikgJiAweDc7Ci0JCXN3aXRjaCAoZnNiX2NvZGUpIHsKLQkJY2FzZSAwOgotCQkJZnNiID0gMTAwICogMTAwMDsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlmc2IgPSAxMzMzMyAqIDEwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWZzYiA9IDIwMCAqIDEwMDA7Ci0JCQlicmVhazsKLQkJfQorCQlicmVhazsKKwljYXNlIDE6CisJCWZzYiA9IDEzMzMzICogMTA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZnNiID0gMjAwICogMTAwMDsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKCFmc2IpCi0JCXByaW50ayhLRVJOX0RFQlVHICJzcGVlZHN0ZXAtbGliOiBjb3VsZG4ndCBkZXRlY3QgRlNCIHNwZWVkLiBQbGVhc2Ugc2VuZCBhbiBlLW1haWwgdG8gPGxpbnV4QGJyb2RvLmRlPlxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiY291bGRuJ3QgZGV0ZWN0IEZTQiBzcGVlZC4gIgorCQkJCSJQbGVhc2Ugc2VuZCBhbiBlLW1haWwgdG8gPGxpbnV4QGJyb2RvLmRlPlxuIik7CiAKIAkvKiBNdWx0aXBsaWVyLiAqLwogCW11bHQgPSBtc3JfbG8gPj4gMjQ7CiAKLQlkcHJpbnRrKCJQNCAtIEZTQiAldSBrSHo7IE11bHRpcGxpZXIgJXU7IFNwZWVkICV1IGtIelxuIiwgZnNiLCBtdWx0LCAoZnNiICogbXVsdCkpOworCWRwcmludGsoIlA0IC0gRlNCICV1IGtIejsgTXVsdGlwbGllciAldTsgU3BlZWQgJXUga0h6XG4iLAorCQkJZnNiLCBtdWx0LCAoZnNiICogbXVsdCkpOwogCi0JcmV0dXJuIChmc2IgKiBtdWx0KTsKKwlyZXQgPSAoZnNiICogbXVsdCk7CisJcmV0dXJuIHJldDsKIH0KIAogCi11bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCit1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3NvcikKIHsKIAlzd2l0Y2ggKHByb2Nlc3NvcikgewotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QQ09SRToKKwljYXNlIFNQRUVEU1RFUF9DUFVfUENPUkU6CiAJCXJldHVybiBwZW50aXVtX2NvcmVfZ2V0X2ZyZXF1ZW5jeSgpOwotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QTToKKwljYXNlIFNQRUVEU1RFUF9DUFVfUE06CiAJCXJldHVybiBwZW50aXVtTV9nZXRfZnJlcXVlbmN5KCk7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0RDoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QNEQ6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1A0TToKIAkJcmV0dXJuIHBlbnRpdW00X2dldF9mcmVxdWVuY3koKTsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9UOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0M6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQ19FQVJMWToKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9UOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0M6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWToKIAkJcmV0dXJuIHBlbnRpdW0zX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9OwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgREVURUNUIFNQRUVEU1RFUC1DQVBBQkxFIFBST0NFU1NPUiAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi11bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IgKHZvaWQpCit1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3Iodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAJdTMyIGVieCwgbXNyX2xvLCBtc3JfaGk7CkBAIC0yNjEsNyArMjgxLDcgQEAKIAkJCSAqIHNhbXBsZSBoYXMgZWJ4ID0gMHgwZiwgcHJvZHVjdGlvbiBoYXMgMHgwZS4KIAkJCSAqLwogCQkJaWYgKChlYnggPT0gMHgwZSkgfHwgKGVieCA9PSAweDBmKSkKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QNE07CisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUDRNOwogCQkJYnJlYWs7CiAJCWNhc2UgNzoKIAkJCS8qCkBAIC0yNzIsNyArMjkyLDcgQEAKIAkJCSAqIHNhbXBsZXMgYXJlIG9ubHkgb2YgQi1zdGVwcGluZy4uLgogCQkJICovCiAJCQlpZiAoZWJ4ID09IDB4MGUpCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1A0TTsKIAkJCWJyZWFrOwogCQljYXNlIDk6CiAJCQkvKgpAQCAtMjg4LDEwICszMDgsMTMgQEAKIAkJCSAqIE0tUDQtTXMgbWF5IGhhdmUgZWl0aGVyIGVieD0weGUgb3IgMHhmIFtzZWUgYWJvdmVdCiAJCQkgKiBNLVA0LzUzMyBoYXZlIGVpdGhlciBlYng9MHhlIG9yIDB4Zi4gWzI1MzE3NjA3LnBkZl0KIAkJCSAqIGFsc28sIE0tUDRNIEhUcyBoYXZlIGVieD0weDgsIHRvbwotCQkJICogRm9yIG5vdywgdGhleSBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbW9kZWxfaWQgc3RyaW5nCisJCQkgKiBGb3Igbm93LCB0aGV5IGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBtb2RlbF9pZAorCQkJICogc3RyaW5nCiAJCQkgKi8KLQkJCWlmICgoZWJ4ID09IDB4MGUpIHx8IChzdHJzdHIoYy0+eDg2X21vZGVsX2lkLCJNb2JpbGUgSW50ZWwoUikgUGVudGl1bShSKSA0IikgIT0gTlVMTCkpCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNOworCQkJaWYgKChlYnggPT0gMHgwZSkgfHwKKwkJCQkoc3Ryc3RyKGMtPng4Nl9tb2RlbF9pZCwKKwkJCQkgICAgIk1vYmlsZSBJbnRlbChSKSBQZW50aXVtKFIpIDQiKSAhPSBOVUxMKSkKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QNE07CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtMzAxLDcgKzMyNCw4IEBACiAKIAlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewogCWNhc2UgMHgwQjogLyogSW50ZWwgUElJSSBbVHVhbGF0aW5dICovCi0JCS8qIGNwdWlkX2VieCgxKSBpcyAweDA0IGZvciBkZXNrdG9wIFBJSUksIDB4MDYgZm9yIG1vYmlsZSBQSUlJLU0gKi8KKwkJLyogY3B1aWRfZWJ4KDEpIGlzIDB4MDQgZm9yIGRlc2t0b3AgUElJSSwKKwkJICogMHgwNiBmb3IgbW9iaWxlIFBJSUktTSAqLwogCQllYnggPSBjcHVpZF9lYngoMHgwMDAwMDAwMSk7CiAJCWRwcmludGsoImVieCBpcyAleFxuIiwgZWJ4KTsKIApAQCAtMzEzLDE0ICszMzcsMTUgQEAKIAkJLyogU28gZmFyIGFsbCBQSUlJLU0gcHJvY2Vzc29ycyBzdXBwb3J0IFNwZWVkU3RlcC4gU2VlCiAJCSAqIEludGVsJ3MgMjQ1NDA2NDAucGRmIG9mIEp1bmUgMjAwMwogCQkgKi8KLQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9UOworCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QSUlJX1Q7CiAKIAljYXNlIDB4MDg6IC8qIEludGVsIFBJSUkgW0NvcHBlcm1pbmVdICovCiAKIAkJLyogYWxsIG1vYmlsZSBQSUlJIENvcHBlcm1pbmVzIGhhdmUgRlNCIDEwMCBNSHoKIAkJICogPT0+IHNvcnQgb3V0IGEgZmV3IGRlc2t0b3AgUElJSXMuICovCiAJCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBtc3JfbG8sIG1zcl9oaSk7Ci0JCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OIGlzIDB4JXgsIDB4JXhcbiIsIG1zcl9sbywgbXNyX2hpKTsKKwkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfRUJMX0NSX1BPV0VST04gaXMgMHgleCwgMHgleFxuIiwKKwkJCQltc3JfbG8sIG1zcl9oaSk7CiAJCW1zcl9sbyAmPSAweDAwYzAwMDA7CiAJCWlmIChtc3JfbG8gIT0gMHgwMDgwMDAwKQogCQkJcmV0dXJuIDA7CkBAIC0zMzIsMTMgKzM1NywxNSBAQAogCQkgKiBiaXQgNTYgb3IgNTcgaXMgc2V0CiAJCSAqLwogCQlyZG1zcihNU1JfSUEzMl9QTEFURk9STV9JRCwgbXNyX2xvLCBtc3JfaGkpOwotCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9QTEFURk9STSBJRCBpcyAweCV4LCAweCV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7Ci0JCWlmICgobXNyX2hpICYgKDE8PDE4KSkgJiYgKHJlbGF4ZWRfY2hlY2sgPyAxIDogKG1zcl9oaSAmICgzPDwyNCkpKSkgeworCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9QTEFURk9STSBJRCBpcyAweCV4LCAweCV4XG4iLAorCQkJCW1zcl9sbywgbXNyX2hpKTsKKwkJaWYgKChtc3JfaGkgJiAoMTw8MTgpKSAmJgorCQkgICAgKHJlbGF4ZWRfY2hlY2sgPyAxIDogKG1zcl9oaSAmICgzPDwyNCkpKSkgewogCQkJaWYgKGMtPng4Nl9tYXNrID09IDB4MDEpIHsKIAkJCQlkcHJpbnRrKCJlYXJseSBQSUlJIHZlcnNpb25cbiIpOwotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQ19FQVJMWTsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk7CiAJCQl9IGVsc2UKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0M7CisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9DOwogCQl9CiAKIAlkZWZhdWx0OgpAQCAtMzY5LDcgKzM5Niw3IEBACiAJZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBib3RoIHNwZWVkc1xuIik7CiAKIAkvKiBnZXQgY3VycmVudCBzcGVlZCAqLwotCXByZXZfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kocHJvY2Vzc29yKTsKKwlwcmV2X3NwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlpZiAoIXByZXZfc3BlZWQpCiAJCXJldHVybiAtRUlPOwogCkBAIC0zNzksNyArNDA2LDcgQEAKIAogCS8qIHN3aXRjaCB0byBsb3cgc3RhdGUgKi8KIAlzZXRfc3RhdGUoU1BFRURTVEVQX0xPVyk7Ci0JKmxvd19zcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShwcm9jZXNzb3IpOworCSpsb3dfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWlmICghKmxvd19zcGVlZCkgewogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKQEAgLTM5OCw3ICs0MjUsNyBAQAogCWlmICh0cmFuc2l0aW9uX2xhdGVuY3kpCiAJCWRvX2dldHRpbWVvZmRheSgmdHYyKTsKIAotCSpoaWdoX3NwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CisJKmhpZ2hfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWlmICghKmhpZ2hfc3BlZWQpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CkBAIC00MjYsOSArNDUzLDEyIEBACiAJCS8qIGNoZWNrIGlmIHRoZSBsYXRlbmN5IG1lYXN1cmVtZW50IGlzIHRvbyBoaWdoIG9yIHRvbyBsb3cKIAkJICogYW5kIHNldCBpdCB0byBhIHNhZmUgdmFsdWUgKDUwMHVTZWMpIGluIHRoYXQgY2FzZQogCQkgKi8KLQkJaWYgKCp0cmFuc2l0aW9uX2xhdGVuY3kgPiAxMDAwMDAwMCB8fCAqdHJhbnNpdGlvbl9sYXRlbmN5IDwgNTAwMDApIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcGVlZHN0ZXA6IGZyZXF1ZW5jeSB0cmFuc2l0aW9uIG1lYXN1cmVkIHNlZW1zIG91dCBvZiAiCi0JCQkJCSJyYW5nZSAoJXUgblNlYyksIGZhbGxpbmcgYmFjayB0byBhIHNhZmUgb25lIG9mICV1IG5TZWMuXG4iLAorCQlpZiAoKnRyYW5zaXRpb25fbGF0ZW5jeSA+IDEwMDAwMDAwIHx8CisJCSAgICAqdHJhbnNpdGlvbl9sYXRlbmN5IDwgNTAwMDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJmcmVxdWVuY3kgdHJhbnNpdGlvbiAiCisJCQkJCSJtZWFzdXJlZCBzZWVtcyBvdXQgb2YgcmFuZ2UgKCV1ICIKKwkJCQkJIm5TZWMpLCBmYWxsaW5nIGJhY2sgdG8gYSBzYWZlIG9uZSBvZiIKKwkJCQkJIiV1IG5TZWMuXG4iLAogCQkJCQkqdHJhbnNpdGlvbl9sYXRlbmN5LCA1MDAwMDApOwogCQkJKnRyYW5zaXRpb25fbGF0ZW5jeSA9IDUwMDAwMDsKIAkJfQpAQCAtNDM2LDE1ICs0NjYsMTYgQEAKIAogb3V0OgogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNwZWVkc3RlcF9nZXRfZnJlcXMpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9TUEVFRFNURVBfUkVMQVhFRF9DQVBfQ0hFQ0sKIG1vZHVsZV9wYXJhbShyZWxheGVkX2NoZWNrLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhyZWxheGVkX2NoZWNrLCAiRG9uJ3QgZG8gYWxsIGNoZWNrcyBmb3Igc3BlZWRzdGVwIGNhcGFiaWxpdHkuIik7CitNT0RVTEVfUEFSTV9ERVNDKHJlbGF4ZWRfY2hlY2ssCisJCSJEb24ndCBkbyBhbGwgY2hlY2tzIGZvciBzcGVlZHN0ZXAgY2FwYWJpbGl0eS4iKTsKICNlbmRpZgogCi1NT0RVTEVfQVVUSE9SICgiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiTGlicmFyeSBmb3IgSW50ZWwgU3BlZWRTdGVwIDEgb3IgMiBjcHVmcmVxIGRyaXZlcnMuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMaWJyYXJ5IGZvciBJbnRlbCBTcGVlZFN0ZXAgMSBvciAyIGNwdWZyZXEgZHJpdmVycy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCmluZGV4IGIxMWJjYzYuLjJiNmMwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaApAQCAtMTIsMTcgKzEyLDE3IEBACiAKIC8qIHByb2Nlc3NvcnMgKi8KIAotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQ19FQVJMWQkweDAwMDAwMDAxICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0MJCTB4MDAwMDAwMDIgIC8qIENvcHBlcm1pbmUgY29yZSAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVAkJMHgwMDAwMDAwMyAgLyogVHVhbGF0aW4gY29yZSAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TQkJCTB4MDAwMDAwMDQgIC8qIFA0LU0gICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZCTB4MDAwMDAwMDEgIC8qIENvcHBlcm1pbmUgY29yZSAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BJSUlfQwkJMHgwMDAwMDAwMiAgLyogQ29wcGVybWluZSBjb3JlICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUElJSV9UCQkweDAwMDAwMDAzICAvKiBUdWFsYXRpbiBjb3JlICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUDRNCQkweDAwMDAwMDA0ICAvKiBQNC1NICAqLwogCiAvKiB0aGUgZm9sbG93aW5nIHByb2Nlc3NvcnMgYXJlIG5vdCBzcGVlZHN0ZXAtY2FwYWJsZSBhbmQgYXJlIG5vdCBhdXRvLWRldGVjdGVkCiAgKiBpbiBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpLiBIb3dldmVyLCB0aGVpciBzcGVlZCBjYW4gYmUgZGV0ZWN0ZWQgdXNpbmcKLSAqIHRoZSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koKSBjYWxsLiAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BNCQkJMHhGRkZGRkYwMyAgLyogUGVudGl1bSBNICAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0RAkJCTB4RkZGRkZGMDQgIC8qIGRlc2t0b3AgUDQgICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUENPUkUJCTB4RkZGRkZGMDUgIC8qIENvcmUgKi8KKyAqIHRoZSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSgpIGNhbGwuICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUE0JCTB4RkZGRkZGMDMgIC8qIFBlbnRpdW0gTSAgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QNEQJCTB4RkZGRkZGMDQgIC8qIGRlc2t0b3AgUDQgICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUENPUkUJCTB4RkZGRkZGMDUgIC8qIENvcmUgKi8KIAogLyogc3BlZWRzdGVwIHN0YXRlcyAtLSBvbmx5IHR3byBvZiB0aGVtICovCiAKQEAgLTM0LDcgKzM0LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IgKHZvaWQpOwogCiAvKiBkZXRlY3QgdGhlIGN1cnJlbnQgc3BlZWQgKGluIGtoeikgb2YgdGhlIHByb2Nlc3NvciAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3Nvcik7CitleHRlcm4gdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpOwogCiAKIC8qIGRldGVjdCB0aGUgbG93IGFuZCBoaWdoIHNwZWVkcyBvZiB0aGUgcHJvY2Vzc29yLiBUaGUgY2FsbGJhY2sKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCmluZGV4IDhhODVjOTMuLmJlZmVhMDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9pc3QuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgInNwZWVkc3RlcC1saWIuaCIKIApAQCAtMzAsMTIgKzMwLDEyIEBACiAgKiBJZiB1c2VyIGdpdmVzIGl0LCB0aGVzZSBhcmUgdXNlZC4KICAqCiAgKi8KLXN0YXRpYyBpbnQgc21pX3BvcnQgPSAwOwotc3RhdGljIGludCBzbWlfY21kID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc21pX3NpZyA9IDA7CitzdGF0aWMgaW50IHNtaV9wb3J0Oworc3RhdGljIGludCBzbWlfY21kOworc3RhdGljIHVuc2lnbmVkIGludCBzbWlfc2lnOwogCiAvKiBpbmZvIGFib3V0IHRoZSBwcm9jZXNzb3IgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX3Byb2Nlc3NvciA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3I7CiAKIC8qCiAgKiBUaGVyZSBhcmUgb25seSB0d28gZnJlcXVlbmN5IHN0YXRlcyBmb3IgZWFjaCBwcm9jZXNzb3IuIFZhbHVlcwpAQCAtNTYsMTIgKzU2LDEzIEBACiAgKiBvZiBETUEgYWN0aXZpdHkgZ29pbmcgb24/ICovCiAjZGVmaW5lIFNNSV9UUklFUyA1CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAic3BlZWRzdGVwLXNtaSIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJzcGVlZHN0ZXAtc21pIiwgbXNnKQogCiAvKioKICAqIHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAgKHZvaWQpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwKHZvaWQpCiB7CiAJdTMyIGNvbW1hbmQsIHJlc3VsdCwgbWFnaWMsIGR1bW15OwogCXUzMiBmdW5jdGlvbiA9IEdFVF9TUEVFRFNURVBfT1dORVI7CkBAIC03MCwxNiArNzEsMTggQEAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAJbWFnaWMgPSB2aXJ0X3RvX3BoeXMobWFnaWNfZGF0YSk7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gb2J0YWluIG93bmVyc2hpcCB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOworCWRwcmludGsoInRyeWluZyB0byBvYnRhaW4gb3duZXJzaGlwIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLAorCQkJY29tbWFuZCwgc21pX3BvcnQpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJwdXNoICUlZWJwXG4iCiAJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCSJwb3AgJSVlYnBcbiIKLQkJOiAiPUQiIChyZXN1bHQpLCAiPWEiIChkdW1teSksICI9YiIgKGR1bW15KSwgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksCi0JCQkiPVMiIChkdW1teSkKKwkJOiAiPUQiIChyZXN1bHQpLAorCQkgICI9YSIgKGR1bW15KSwgIj1iIiAoZHVtbXkpLCAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwKKwkJICAiPVMiIChkdW1teSkKIAkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiICgwKSwgImQiIChzbWlfcG9ydCksCi0JCQkiRCIgKDApLCAiUyIgKG1hZ2ljKQorCQkgICJEIiAoMCksICJTIiAobWFnaWMpCiAJCTogIm1lbW9yeSIKIAkpOwogCkBAIC05NywxMCArMTAwLDEwIEBACiAgKiBldmVuIGhhbmdzIFtjZi4gYnVnbWUub3NkbC5vcmcgIyAxNDIyXSBvbiBlYXJsaWVyIHN5c3RlbXMuIEVtcGlyaWNhbCB0ZXN0aW5nCiAgKiBzaG93cyB0aGF0IHRoZSBsYXR0ZXIgb2NjdXJzIGlmICEoaXN0X2luZm8uZXZlbnQgJiAweEZGRkYpLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfZ2V0X2ZyZXFzICh1bnNpZ25lZCBpbnQgKmxvdywgdW5zaWduZWQgaW50ICpoaWdoKQorc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcyh1bnNpZ25lZCBpbnQgKmxvdywgdW5zaWduZWQgaW50ICpoaWdoKQogewogCXUzMiBjb21tYW5kLCByZXN1bHQgPSAwLCBlZGksIGhpZ2hfbWh6LCBsb3dfbWh6LCBkdW1teTsKLQl1MzIgc3RhdGU9MDsKKwl1MzIgc3RhdGUgPSAwOwogCXUzMiBmdW5jdGlvbiA9IEdFVF9TUEVFRFNURVBfRlJFUVM7CiAKIAlpZiAoIShpc3RfaW5mby5ldmVudCAmIDB4RkZGRikpIHsKQEAgLTExMCwxNyArMTEzLDI1IEBACiAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGZyZXF1ZW5jaWVzIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwkJCWNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkicG9wICUlZWJwIgotCQk6ICI9YSIgKHJlc3VsdCksICI9YiIgKGhpZ2hfbWh6KSwgIj1jIiAobG93X21oeiksICI9ZCIgKHN0YXRlKSwgIj1EIiAoZWRpKSwgIj1TIiAoZHVtbXkpCi0JCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoc3RhdGUpLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQorCQk6ICI9YSIgKHJlc3VsdCksCisJCSAgIj1iIiAoaGlnaF9taHopLAorCQkgICI9YyIgKGxvd19taHopLAorCQkgICI9ZCIgKHN0YXRlKSwgIj1EIiAoZWRpKSwgIj1TIiAoZHVtbXkpCisJCTogImEiIChjb21tYW5kKSwKKwkJICAiYiIgKGZ1bmN0aW9uKSwKKwkJICAiYyIgKHN0YXRlKSwKKwkJICAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQogCSk7CiAKLQlkcHJpbnRrKCJyZXN1bHQgJXgsIGxvd19mcmVxICV1LCBoaWdoX2ZyZXEgJXVcbiIsIHJlc3VsdCwgbG93X21oeiwgaGlnaF9taHopOworCWRwcmludGsoInJlc3VsdCAleCwgbG93X2ZyZXEgJXUsIGhpZ2hfZnJlcSAldVxuIiwKKwkJCXJlc3VsdCwgbG93X21oeiwgaGlnaF9taHopOwogCiAJLyogYWJvcnQgaWYgcmVzdWx0cyBhcmUgb2J2aW91c2x5IGluY29ycmVjdC4uLiAqLwogCWlmICgoaGlnaF9taHogKyBsb3dfbWh6KSA8IDYwMCkKQEAgLTEzNywyNiArMTQ4LDMwIEBACiAgKiBAc3RhdGU6IHByb2Nlc3NvciBmcmVxdWVuY3kgc3RhdGUgKFNQRUVEU1RFUF9MT1cgb3IgU1BFRURTVEVQX0hJR0gpCiAgKgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF9nZXRfc3RhdGUgKHZvaWQpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9nZXRfc3RhdGUodm9pZCkKIHsKLQl1MzIgZnVuY3Rpb249R0VUX1NQRUVEU1RFUF9TVEFURTsKKwl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX1NUQVRFOwogCXUzMiByZXN1bHQsIHN0YXRlLCBlZGksIGNvbW1hbmQsIGR1bW15OwogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBjdXJyZW50IHNldHRpbmcgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgc2V0dGluZyB3aXRoIGNvbW1hbmQgJXggIgorCQkiYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJwdXNoICUlZWJwXG4iCiAJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCSJwb3AgJSVlYnBcbiIKLQkJOiAiPWEiIChyZXN1bHQpLCAiPWIiIChzdGF0ZSksICI9RCIgKGVkaSksICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLCAiPVMiIChkdW1teSkKLQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiICgwKSwgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKKwkJOiAiPWEiIChyZXN1bHQpLAorCQkgICI9YiIgKHN0YXRlKSwgIj1EIiAoZWRpKSwKKwkJICAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCisJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksCisJCSAgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkpOwogCiAJZHByaW50aygic3RhdGUgaXMgJXgsIHJlc3VsdCBpcyAleFxuIiwgc3RhdGUsIHJlc3VsdCk7CiAKLQlyZXR1cm4gKHN0YXRlICYgMSk7CisJcmV0dXJuIHN0YXRlICYgMTsKIH0KIAogCkBAIC0xNjUsMTEgKzE4MCwxMSBAQAogICogQHN0YXRlOiBuZXcgcHJvY2Vzc29yIGZyZXF1ZW5jeSBzdGF0ZSAoU1BFRURTVEVQX0xPVyBvciBTUEVFRFNURVBfSElHSCkKICAqCiAgKi8KLXN0YXRpYyB2b2lkIHNwZWVkc3RlcF9zZXRfc3RhdGUgKHVuc2lnbmVkIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNwZWVkc3RlcF9zZXRfc3RhdGUodW5zaWduZWQgaW50IHN0YXRlKQogewogCXVuc2lnbmVkIGludCByZXN1bHQgPSAwLCBjb21tYW5kLCBuZXdfc3RhdGUsIGR1bW15OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGZ1bmN0aW9uPVNFVF9TUEVFRFNURVBfU1RBVEU7CisJdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gU0VUX1NQRUVEU1RFUF9TVEFURTsKIAl1bnNpZ25lZCBpbnQgcmV0cnkgPSAwOwogCiAJaWYgKHN0YXRlID4gMHgxKQpAQCAtMTgwLDExICsxOTUsMTQgQEAKIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBzZXQgZnJlcXVlbmN5IHRvIHN0YXRlICV1IHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLCBzdGF0ZSwgY29tbWFuZCwgc21pX3BvcnQpOworCWRwcmludGsoInRyeWluZyB0byBzZXQgZnJlcXVlbmN5IHRvIHN0YXRlICV1ICIKKwkJIndpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLAorCQlzdGF0ZSwgY29tbWFuZCwgc21pX3BvcnQpOwogCiAJZG8gewogCQlpZiAocmV0cnkpIHsKLQkJCWRwcmludGsoInJldHJ5ICV1LCBwcmV2aW91cyByZXN1bHQgJXUsIHdhaXRpbmcuLi5cbiIsIHJldHJ5LCByZXN1bHQpOworCQkJZHByaW50aygicmV0cnkgJXUsIHByZXZpb3VzIHJlc3VsdCAldSwgd2FpdGluZy4uLlxuIiwKKwkJCQkJcmV0cnksIHJlc3VsdCk7CiAJCQltZGVsYXkocmV0cnkgKiA1MCk7CiAJCX0KIAkJcmV0cnkrKzsKQEAgLTE5MiwyMCArMjEwLDI2IEBACiAJCQkicHVzaCAlJWVicFxuIgogCQkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJCSJwb3AgJSVlYnAiCi0JCQk6ICI9YiIgKG5ld19zdGF0ZSksICI9RCIgKHJlc3VsdCksICI9YyIgKGR1bW15KSwgIj1hIiAoZHVtbXkpLAotCQkJCSI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCi0JCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKHN0YXRlKSwgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKKwkJCTogIj1iIiAobmV3X3N0YXRlKSwgIj1EIiAocmVzdWx0KSwKKwkJCSAgIj1jIiAoZHVtbXkpLCAiPWEiIChkdW1teSksCisJCQkgICI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCisJCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKHN0YXRlKSwKKwkJCSAgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkJCSk7CiAJfSB3aGlsZSAoKG5ld19zdGF0ZSAhPSBzdGF0ZSkgJiYgKHJldHJ5IDw9IFNNSV9UUklFUykpOwogCiAJLyogZW5hYmxlIElSUXMgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlpZiAobmV3X3N0YXRlID09IHN0YXRlKSB7Ci0JCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkIGFmdGVyICV1IHRyaWVzIHdpdGggcmVzdWx0ICV1XG4iLCAoc3BlZWRzdGVwX2ZyZXFzW25ld19zdGF0ZV0uZnJlcXVlbmN5IC8gMTAwMCksIHJldHJ5LCByZXN1bHQpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIHRvIHN0YXRlICV1IGZhaWxlZCB3aXRoIG5ld19zdGF0ZSAldSBhbmQgcmVzdWx0ICV1XG4iLCBzdGF0ZSwgbmV3X3N0YXRlLCByZXN1bHQpOwotCX0KKwlpZiAobmV3X3N0YXRlID09IHN0YXRlKQorCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZCBhZnRlciAldSB0cmllcyAiCisJCQkid2l0aCByZXN1bHQgJXVcbiIsCisJCQkoc3BlZWRzdGVwX2ZyZXFzW25ld19zdGF0ZV0uZnJlcXVlbmN5IC8gMTAwMCksCisJCQlyZXRyeSwgcmVzdWx0KTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIHRvIHN0YXRlICV1ICIKKwkJCSJmYWlsZWQgd2l0aCBuZXdfc3RhdGUgJXUgYW5kIHJlc3VsdCAldVxuIiwKKwkJCXN0YXRlLCBuZXdfc3RhdGUsIHJlc3VsdCk7CiAKIAlyZXR1cm47CiB9CkBAIC0yMTksMTMgKzI0MywxNCBAQAogICoKICAqIFNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kvZnJlcS4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCXVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewogCXVuc2lnbmVkIGludCBuZXdzdGF0ZSA9IDA7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmcmVxcy5vbGQgPSBzcGVlZHN0ZXBfZnJlcXNbc3BlZWRzdGVwX2dldF9zdGF0ZSgpXS5mcmVxdWVuY3k7CkBAIC0yNTAsNyArMjc1LDcgQEAKICAqIExpbWl0IG11c3QgYmUgd2l0aGluIHNwZWVkc3RlcF9sb3dfZnJlcSBhbmQgc3BlZWRzdGVwX2hpZ2hfZnJlcSwgd2l0aAogICogYXQgbGVhc3Qgb25lIGJvcmRlciBpbmNsdWRlZC4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSk7CiB9CkBAIC0yNTksNyArMjg0LDggQEAKIHN0YXRpYyBpbnQgc3BlZWRzdGVwX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgaW50IHNwZWVkLHN0YXRlOworCXVuc2lnbmVkIGludCBzcGVlZCwgc3RhdGU7CisJdW5zaWduZWQgaW50ICpsb3csICpoaWdoOwogCiAJLyogY2FwYWJpbGl0eSBjaGVjayAqLwogCWlmIChwb2xpY3ktPmNwdSAhPSAwKQpAQCAtMjcyLDE5ICsyOTgsMjMgQEAKIAl9CiAKIAkvKiBkZXRlY3QgbG93IGFuZCBoaWdoIGZyZXF1ZW5jeSAqLwotCXJlc3VsdCA9IHNwZWVkc3RlcF9zbWlfZ2V0X2ZyZXFzKCZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5LAotCQkJCSZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0hJR0hdLmZyZXF1ZW5jeSk7CisJbG93ID0gJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3k7CisJaGlnaCA9ICZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0hJR0hdLmZyZXF1ZW5jeTsKKworCXJlc3VsdCA9IHNwZWVkc3RlcF9zbWlfZ2V0X2ZyZXFzKGxvdywgaGlnaCk7CiAJaWYgKHJlc3VsdCkgewotCQkvKiBmYWxsIGJhY2sgdG8gc3BlZWRzdGVwX2xpYi5jIGRlY3Rpb24gbWVjaGFuaXNtOiB0cnkgYm90aCBzdGF0ZXMgb3V0ICovCi0JCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgbG93IGFuZCBoaWdoIGZyZXF1ZW5jaWVzIGJ5IFNNSSBjYWxsLlxuIik7CisJCS8qIGZhbGwgYmFjayB0byBzcGVlZHN0ZXBfbGliLmMgZGVjdGlvbiBtZWNoYW5pc206CisJCSAqIHRyeSBib3RoIHN0YXRlcyBvdXQgKi8KKwkJZHByaW50aygiY291bGQgbm90IGRldGVjdCBsb3cgYW5kIGhpZ2ggZnJlcXVlbmNpZXMgIgorCQkJCSJieSBTTUkgY2FsbC5cbiIpOwogCQlyZXN1bHQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXFzKHNwZWVkc3RlcF9wcm9jZXNzb3IsCi0JCQkJJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3ksCi0JCQkJJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfSElHSF0uZnJlcXVlbmN5LAorCQkJCWxvdywgaGlnaCwKIAkJCQlOVUxMLAogCQkJCSZzcGVlZHN0ZXBfc2V0X3N0YXRlKTsKIAogCQlpZiAocmVzdWx0KSB7Ci0JCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IHR3byBkaWZmZXJlbnQgc3BlZWRzIC0tIGFib3J0aW5nLlxuIik7CisJCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IHR3byBkaWZmZXJlbnQgc3BlZWRzIgorCQkJCQkiIC0tIGFib3J0aW5nLlxuIik7CiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9IGVsc2UKIAkJCWRwcmludGsoIndvcmthcm91bmQgd29ya2VkLlxuIik7CkBAIC0yOTUsNyArMzI1LDggQEAKIAlzcGVlZCA9IHNwZWVkc3RlcF9mcmVxc1tzdGF0ZV0uZnJlcXVlbmN5OwogCiAJZHByaW50aygiY3VycmVudGx5IGF0ICVzIHNwZWVkIHNldHRpbmcgLSAlaSBNSHpcbiIsCi0JCShzcGVlZCA9PSBzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5KSA/ICJsb3ciIDogImhpZ2giLAorCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkKKwkJPyAibG93IiA6ICJoaWdoIiwKIAkJKHNwZWVkIC8gMTAwMCkpOwogCiAJLyogY3B1aW5mbyBhbmQgZGVmYXVsdCBwb2xpY3kgdmFsdWVzICovCkBAIC0zMDQsNyArMzM1LDcgQEAKIAogCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBzcGVlZHN0ZXBfZnJlcXMpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybiAocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNwZWVkc3RlcF9mcmVxcywgcG9saWN5LT5jcHUpOwogCkBAIC0zMjEsNyArMzUyLDcgQEAKIHsKIAlpZiAoY3B1KQogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpOworCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKIH0KIAogCkBAIC0zMzUsNyArMzY2LDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogc3BlZWRzdGVwX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpzcGVlZHN0ZXBfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTM2NCwyMSArMzk1LDIzIEBACiAJc3BlZWRzdGVwX3Byb2Nlc3NvciA9IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCk7CiAKIAlzd2l0Y2ggKHNwZWVkc3RlcF9wcm9jZXNzb3IpIHsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9UOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0M6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQ19FQVJMWToKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9UOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0M6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3BlZWRzdGVwX3Byb2Nlc3NvciA9IDA7CiAJfQogCiAJaWYgKCFzcGVlZHN0ZXBfcHJvY2Vzc29yKSB7Ci0JCWRwcmludGsgKCJObyBzdXBwb3J0ZWQgSW50ZWwgQ1BVIGRldGVjdGVkLlxuIik7CisJCWRwcmludGsoIk5vIHN1cHBvcnRlZCBJbnRlbCBDUFUgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZHByaW50aygic2lnbmF0dXJlOjB4JS44bHgsIGNvbW1hbmQ6MHglLjhseCwgZXZlbnQ6MHglLjhseCwgcGVyZl9sZXZlbDoweCUuOGx4LlxuIiwKLQkJaXN0X2luZm8uc2lnbmF0dXJlLCBpc3RfaW5mby5jb21tYW5kLCBpc3RfaW5mby5ldmVudCwgaXN0X2luZm8ucGVyZl9sZXZlbCk7CisJZHByaW50aygic2lnbmF0dXJlOjB4JS44bHgsIGNvbW1hbmQ6MHglLjhseCwgIgorCQkiZXZlbnQ6MHglLjhseCwgcGVyZl9sZXZlbDoweCUuOGx4LlxuIiwKKwkJaXN0X2luZm8uc2lnbmF0dXJlLCBpc3RfaW5mby5jb21tYW5kLAorCQlpc3RfaW5mby5ldmVudCwgaXN0X2luZm8ucGVyZl9sZXZlbCk7CiAKIAkvKiBFcnJvciBpZiBubyBJU1QtU01JIEJJT1Mgb3Igbm8gUEFSTQogCQkgc2lnPSAnSVNHRScgYWthICdJbnRlbCBTcGVlZHN0ZXAgR2F0ZSBFJyAqLwpAQCAtNDE2LDE3ICs0NDksMjAgQEAKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZzcGVlZHN0ZXBfZHJpdmVyKTsKIH0KIAotbW9kdWxlX3BhcmFtKHNtaV9wb3J0LCAgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShzbWlfY21kLCAgIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0oc21pX3NpZywgIHVpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHNtaV9wb3J0LCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHNtaV9jbWQsICBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHNtaV9zaWcsIHVpbnQsIDA0NDQpOwogCi1NT0RVTEVfUEFSTV9ERVNDKHNtaV9wb3J0LCAiT3ZlcnJpZGUgdGhlIEJJT1MtZ2l2ZW4gSVNUIHBvcnQgd2l0aCB0aGlzIHZhbHVlIC0tIEludGVsJ3MgZGVmYXVsdCBzZXR0aW5nIGlzIDB4YjIiKTsKLU1PRFVMRV9QQVJNX0RFU0Moc21pX2NtZCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBjb21tYW5kIHdpdGggdGhpcyB2YWx1ZSAtLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweDgyIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHNtaV9zaWcsICJTZXQgdG8gMSB0byBmYWtlIHRoZSBJU1Qgc2lnbmF0dXJlIHdoZW4gdXNpbmcgdGhlIFNNSSBpbnRlcmZhY2UuIik7CitNT0RVTEVfUEFSTV9ERVNDKHNtaV9wb3J0LCAiT3ZlcnJpZGUgdGhlIEJJT1MtZ2l2ZW4gSVNUIHBvcnQgd2l0aCB0aGlzIHZhbHVlICIKKwkJIi0tIEludGVsJ3MgZGVmYXVsdCBzZXR0aW5nIGlzIDB4YjIiKTsKK01PRFVMRV9QQVJNX0RFU0Moc21pX2NtZCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBjb21tYW5kIHdpdGggdGhpcyB2YWx1ZSAiCisJCSItLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweDgyIik7CitNT0RVTEVfUEFSTV9ERVNDKHNtaV9zaWcsICJTZXQgdG8gMSB0byBmYWtlIHRoZSBJU1Qgc2lnbmF0dXJlIHdoZW4gdXNpbmcgdGhlICIKKwkJIlNNSSBpbnRlcmZhY2UuIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJIaXJvc2hpIE1pdXJhIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJU1QgYXBwbGV0IFNNSSBpbnRlcmZhY2UuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGlyb3NoaSBNaXVyYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJU1QgYXBwbGV0IFNNSSBpbnRlcmZhY2UuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHNwZWVkc3RlcF9pbml0KTsKIG1vZHVsZV9leGl0KHNwZWVkc3RlcF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwppbmRleCAyNGZmMjZhLi41ZmZmMDBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApAQCAtNTYsMTEgKzU3LDE2IEBACiAKIAkvKgogCSAqIGMtPng4Nl9wb3dlciBpcyA4MDAwXzAwMDcgZWR4LiBCaXQgOCBpcyBUU0MgcnVucyBhdCBjb25zdGFudCByYXRlCi0JICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMKKwkgKiB3aXRoIFAvVCBzdGF0ZXMgYW5kIGRvZXMgbm90IHN0b3AgaW4gZGVlcCBDLXN0YXRlcy4KKwkgKgorCSAqIEl0IGlzIGFsc28gcmVsaWFibGUgYWNyb3NzIGNvcmVzIGFuZCBzb2NrZXRzLiAoYnV0IG5vdCBhY3Jvc3MKKwkgKiBjYWJpbmV0cyAtIHdlIHR1cm4gaXQgb2ZmIGluIHRoYXQgY2FzZSBleHBsaWNpdGx5LikKIAkgKi8KIAlpZiAoYy0+eDg2X3Bvd2VyICYgKDEgPDwgOCkpIHsKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpOworCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpOworCQlzY2hlZF9jbG9ja19zdGFibGUgPSAxOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggYTAwNTQ1Zi4uNjQ4YjNhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC04MCw2ICs4MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYm9vdF9ocGV0X2Rpc2FibGU7CiBpbnQgaHBldF9mb3JjZV91c2VyOworc3RhdGljIGludCBocGV0X3ZlcmJvc2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGhwZXRfc2V0dXAoY2hhciAqc3RyKQogewpAQCAtODgsNiArODksOCBAQAogCQkJYm9vdF9ocGV0X2Rpc2FibGUgPSAxOwogCQlpZiAoIXN0cm5jbXAoImZvcmNlIiwgc3RyLCA1KSkKIAkJCWhwZXRfZm9yY2VfdXNlciA9IDE7CisJCWlmICghc3RybmNtcCgidmVyYm9zZSIsIHN0ciwgNykpCisJCQlocGV0X3ZlcmJvc2UgPSAxOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTExOSw2ICsxMjIsNDMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzX2hwZXRfZW5hYmxlZCk7CiAKK3N0YXRpYyB2b2lkIF9ocGV0X3ByaW50X2NvbmZpZyhjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IGxpbmUpCit7CisJdTMyIGksIHRpbWVycywgbCwgaDsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiAlcyglZCk6XG4iLCBmdW5jdGlvbiwgbGluZSk7CisJbCA9IGhwZXRfcmVhZGwoSFBFVF9JRCk7CisJaCA9IGhwZXRfcmVhZGwoSFBFVF9QRVJJT0QpOworCXRpbWVycyA9ICgobCAmIEhQRVRfSURfTlVNQkVSKSA+PiBIUEVUX0lEX05VTUJFUl9TSElGVCkgKyAxOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IElEOiAweCV4LCBQRVJJT0Q6IDB4JXhcbiIsIGwsIGgpOworCWwgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKKwloID0gaHBldF9yZWFkbChIUEVUX1NUQVRVUyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogQ0ZHOiAweCV4LCBTVEFUVVM6IDB4JXhcbiIsIGwsIGgpOworCWwgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CisJaCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKzQpOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IENPVU5URVJfbDogMHgleCwgQ09VTlRFUl9oOiAweCV4XG4iLCBsLCBoKTsKKworCWZvciAoaSA9IDA7IGkgPCB0aW1lcnM7IGkrKykgeworCQlsID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhpKSk7CisJCWggPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGkpKzQpOworCQlwcmludGsoS0VSTl9JTkZPICJocGV0OiBUJWQ6IENGR19sOiAweCV4LCBDRkdfaDogMHgleFxuIiwKKwkJICAgICAgIGksIGwsIGgpOworCQlsID0gaHBldF9yZWFkbChIUEVUX1RuX0NNUChpKSk7CisJCWggPSBocGV0X3JlYWRsKEhQRVRfVG5fQ01QKGkpKzQpOworCQlwcmludGsoS0VSTl9JTkZPICJocGV0OiBUJWQ6IENNUF9sOiAweCV4LCBDTVBfaDogMHgleFxuIiwKKwkJICAgICAgIGksIGwsIGgpOworCQlsID0gaHBldF9yZWFkbChIUEVUX1RuX1JPVVRFKGkpKTsKKwkJaCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9ST1VURShpKSs0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogVCVkIFJPVVRFX2w6IDB4JXgsIFJPVVRFX2g6IDB4JXhcbiIsCisJCSAgICAgICBpLCBsLCBoKTsKKwl9Cit9CisKKyNkZWZpbmUgaHBldF9wcmludF9jb25maWcoKQkJCQkJXAorZG8gewkJCQkJCQkJXAorCWlmIChocGV0X3ZlcmJvc2UpCQkJCQlcCisJCV9ocGV0X3ByaW50X2NvbmZpZyhfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsJXAorfSB3aGlsZSAoMCkKKwogLyoKICAqIFdoZW4gdGhlIGhwZXQgZHJpdmVyICgvZGV2L2hwZXQpIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gcmVzZXJ2ZQogICogdGltZXIgMCBhbmQgdGltZXIgMSBpbiBjYXNlIG9mIFJUQyBlbXVsYXRpb24uCkBAIC0xOTEsMjcgKzIzMSwzNyBAQAogCS5yYXRpbmcJCT0gNTAsCiB9OwogCi1zdGF0aWMgdm9pZCBocGV0X3N0YXJ0X2NvdW50ZXIodm9pZCkKK3N0YXRpYyB2b2lkIGhwZXRfc3RvcF9jb3VudGVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKLQogCWNmZyAmPSB+SFBFVF9DRkdfRU5BQkxFOwogCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOwogCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUik7CiAJaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSICsgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGhwZXRfc3RhcnRfY291bnRlcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2ZnID0gaHBldF9yZWFkbChIUEVUX0NGRyk7CiAJY2ZnIHw9IEhQRVRfQ0ZHX0VOQUJMRTsKIAlocGV0X3dyaXRlbChjZmcsIEhQRVRfQ0ZHKTsKIH0KIAorc3RhdGljIHZvaWQgaHBldF9yZXN0YXJ0X2NvdW50ZXIodm9pZCkKK3sKKwlocGV0X3N0b3BfY291bnRlcigpOworCWhwZXRfc3RhcnRfY291bnRlcigpOworfQorCiBzdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9kZXZpY2Uodm9pZCkKIHsKIAlmb3JjZV9ocGV0X3Jlc3VtZSgpOwogfQogCi1zdGF0aWMgdm9pZCBocGV0X3Jlc3RhcnRfY291bnRlcih2b2lkKQorc3RhdGljIHZvaWQgaHBldF9yZXN1bWVfY291bnRlcih2b2lkKQogewogCWhwZXRfcmVzdW1lX2RldmljZSgpOwotCWhwZXRfc3RhcnRfY291bnRlcigpOworCWhwZXRfcmVzdGFydF9jb3VudGVyKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwZXRfZW5hYmxlX2xlZ2FjeV9pbnQodm9pZCkKQEAgLTI1OSwyOSArMzA5LDIzIEBACiBzdGF0aWMgdm9pZCBocGV0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQsIGludCB0aW1lcikKIHsKLQl1bnNpZ25lZCBsb25nIGNmZywgY21wLCBub3c7CisJdW5zaWduZWQgbG9uZyBjZmc7CiAJdWludDY0X3QgZGVsdGE7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlocGV0X3N0b3BfY291bnRlcigpOwogCQlkZWx0YSA9ICgodWludDY0X3QpKE5TRUNfUEVSX1NFQy9IWikpICogZXZ0LT5tdWx0OwogCQlkZWx0YSA+Pj0gZXZ0LT5zaGlmdDsKLQkJbm93ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCQljbXAgPSBub3cgKyAodW5zaWduZWQgbG9uZykgZGVsdGE7CiAJCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJLyogTWFrZSBzdXJlIHdlIHVzZSBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzICovCiAJCWNmZyAmPSB+SFBFVF9UTl9MRVZFTDsKIAkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl9QRVJJT0RJQyB8CiAJCSAgICAgICBIUEVUX1ROX1NFVFZBTCB8IEhQRVRfVE5fMzJCSVQ7CiAJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcodGltZXIpKTsKLQkJLyoKLQkJICogVGhlIGZpcnN0IHdyaXRlIGFmdGVyIHdyaXRpbmcgVE5fU0VUVkFMIHRvIHRoZQotCQkgKiBjb25maWcgcmVnaXN0ZXIgc2V0cyB0aGUgY291bnRlciB2YWx1ZSwgdGhlIHNlY29uZAotCQkgKiB3cml0ZSBzZXRzIHRoZSBwZXJpb2QuCi0JCSAqLwotCQlocGV0X3dyaXRlbChjbXAsIEhQRVRfVG5fQ01QKHRpbWVyKSk7Ci0JCXVkZWxheSgxKTsKIAkJaHBldF93cml0ZWwoKHVuc2lnbmVkIGxvbmcpIGRlbHRhLCBIUEVUX1RuX0NNUCh0aW1lcikpOworCQlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKKwkJaHBldF9wcmludF9jb25maWcoKTsKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CkBAIC0zMDgsNiArMzUyLDcgQEAKIAkJCWlycV9zZXRfYWZmaW5pdHkoaGRldi0+aXJxLCBjcHVtYXNrX29mKGhkZXYtPmNwdSkpOwogCQkJZW5hYmxlX2lycShoZGV2LT5pcnEpOwogCQl9CisJCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTUyNiw2ICs1NzEsNyBAQAogCiAJbnVtX3RpbWVycyA9ICgoaWQgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpOwogCW51bV90aW1lcnMrKzsgLyogVmFsdWUgcmVhZCBvdXQgc3RhcnRzIGZyb20gMCAqLworCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAKIAlocGV0X2RldnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHBldF9kZXYpICogbnVtX3RpbWVycywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFocGV0X2RldnMpCkBAIC02OTUsNyArNzQxLDcgQEAKIAkubWFzawkJPSBIUEVUX01BU0ssCiAJLnNoaWZ0CQk9IEhQRVRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAotCS5yZXN1bWUJCT0gaHBldF9yZXN0YXJ0X2NvdW50ZXIsCisJLnJlc3VtZQkJPSBocGV0X3Jlc3VtZV9jb3VudGVyLAogI2lmZGVmIENPTkZJR19YODZfNjQKIAkudnJlYWQJCT0gdnJlYWRfaHBldCwKICNlbmRpZgpAQCAtNzA3LDcgKzc1Myw3IEBACiAJY3ljbGVfdCB0MTsKIAogCS8qIFN0YXJ0IHRoZSBjb3VudGVyICovCi0JaHBldF9zdGFydF9jb3VudGVyKCk7CisJaHBldF9yZXN0YXJ0X2NvdW50ZXIoKTsKIAogCS8qIFZlcmlmeSB3aGV0aGVyIGhwZXQgY291bnRlciB3b3JrcyAqLwogCXQxID0gcmVhZF9ocGV0KCk7CkBAIC03OTMsNiArODM5LDcgQEAKIAkgKiBpbmZvcm1hdGlvbiBhbmQgdGhlIG51bWJlciBvZiBjaGFubmVscwogCSAqLwogCWlkID0gaHBldF9yZWFkbChIUEVUX0lEKTsKKwlocGV0X3ByaW50X2NvbmZpZygpOwogCiAjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKIAkvKgpAQCAtODQ1LDYgKzg5Miw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaHBldF9yZXNlcnZlX3BsYXRmb3JtX3RpbWVycyhocGV0X3JlYWRsKEhQRVRfSUQpKTsKKwlocGV0X3ByaW50X2NvbmZpZygpOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaHBldF9jcHVocF9ub3RpZnkoTlVMTCwgQ1BVX09OTElORSwgKHZvaWQgKikobG9uZyljcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCmluZGV4IDMwOTk0OWUuLjY5N2QxYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTE3Miw3ICsxNzIsOCBAQAogCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzcsCiAJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKLQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2ExNiwJLyogSUNIMTAgKi8KKwkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmNhY2hlZF9kZXY7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwppbmRleCBkNWNlYmI1Li4wOGFmYTE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC0xNywyMCArMTcsMjEgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogCi11bnNpZ25lZCBpbnQgY3B1X2toejsgICAgICAgICAgIC8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovCit1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBjcHVfa2h6OwkvKiBUU0MgY2xvY2tzIC8gdXNlYywgbm90IHVzZWQgaGVyZSAqLwogRVhQT1JUX1NZTUJPTChjcHVfa2h6KTsKLXVuc2lnbmVkIGludCB0c2Nfa2h6OworCit1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSB0c2Nfa2h6OwogRVhQT1JUX1NZTUJPTCh0c2Nfa2h6KTsKIAogLyoKICAqIFRTQyBjYW4gYmUgdW5zdGFibGUgZHVlIHRvIGNwdWZyZXEgb3IgZHVlIHRvIHVuc3luY2VkIFRTQ3MKICAqLwotc3RhdGljIGludCB0c2NfdW5zdGFibGU7CitzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgdHNjX3Vuc3RhYmxlOwogCiAvKiBuYXRpdmVfc2NoZWRfY2xvY2soKSBpcyBjYWxsZWQgYmVmb3JlIHRzY19pbml0KCksIHNvCiAgICB3ZSBtdXN0IHN0YXJ0IHdpdGggdGhlIFRTQyBzb2Z0IGRpc2FibGVkIHRvIHByZXZlbnQKICAgIGVycm9uZW91cyByZHRzYyB1c2FnZSBvbiAhY3B1X2hhc190c2MgcHJvY2Vzc29ycyAqLwotc3RhdGljIGludCB0c2NfZGlzYWJsZWQgPSAtMTsKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0c2NfZGlzYWJsZWQgPSAtMTsKIAogc3RhdGljIGludCB0c2NfY2xvY2tzb3VyY2VfcmVsaWFibGU7CiAvKgpAQCAtNTQzLDggKzU0NCw2IEBACiAJcmV0dXJuIHRzY19waXRfbWluOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotLyogT25seSBjYWxsZWQgZnJvbSB0aGUgUG93ZXJub3cgSzcgY3B1IGZyZXEgZHJpdmVyICovCiBpbnQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKQogewogI2lmbmRlZiBDT05GSUdfU01QCkBAIC01NjYsNyArNTY1LDYgQEAKIAogRVhQT1JUX1NZTUJPTChyZWNhbGlicmF0ZV9jcHVfa2h6KTsKIAotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyogQWNjZWxlcmF0b3JzIGZvciBzY2hlZF9jbG9jaygpCiAgKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9LY29uZmlnIGIvYXJjaC94ODYva3ZtL0tjb25maWcKaW5kZXggYjgxMTI1Zi4uMGEzMDNjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcKKysrIGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTQsNiArNCwxMCBAQAogY29uZmlnIEhBVkVfS1ZNCiAgICAgICAgYm9vbAogCitjb25maWcgSEFWRV9LVk1fSVJRQ0hJUAorICAgICAgIGJvb2wKKyAgICAgICBkZWZhdWx0IHkKKwogbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTgogCWJvb2wgIlZpcnR1YWxpemF0aW9uIgogCWRlcGVuZHMgb24gSEFWRV9LVk0gfHwgWDg2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDcyYmQyNzUuLmMxM2JiOTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC0yMDEsNiArMjAxLDkgQEAKIAlpZiAoIWF0b21pY19pbmNfYW5kX3Rlc3QoJnB0LT5wZW5kaW5nKSkKIAkJc2V0X2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZ2Y3B1MC0+cmVxdWVzdHMpOwogCisJaWYgKCFwdC0+cmVpbmplY3QpCisJCWF0b21pY19zZXQoJnB0LT5wZW5kaW5nLCAxKTsKKwogCWlmICh2Y3B1MCAmJiB3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1MC0+d3EpKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZjcHUwLT53cSk7CiAKQEAgLTUzNiw2ICs1MzksMTYgQEAKIAlwaXQtPnBpdF9zdGF0ZS5pcnFfYWNrID0gMTsKIH0KIAorc3RhdGljIHZvaWQgcGl0X21hc2tfbm90aWZlcihzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uLCBib29sIG1hc2spCit7CisJc3RydWN0IGt2bV9waXQgKnBpdCA9IGNvbnRhaW5lcl9vZihraW1uLCBzdHJ1Y3Qga3ZtX3BpdCwgbWFza19ub3RpZmllcik7CisKKwlpZiAoIW1hc2spIHsKKwkJYXRvbWljX3NldCgmcGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnBlbmRpbmcsIDApOworCQlwaXQtPnBpdF9zdGF0ZS5pcnFfYWNrID0gMTsKKwl9Cit9CisKIHN0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9waXQgKnBpdDsKQEAgLTU0NSw5ICs1NTgsNyBAQAogCWlmICghcGl0KQogCQlyZXR1cm4gTlVMTDsKIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CiAJcGl0LT5pcnFfc291cmNlX2lkID0ga3ZtX3JlcXVlc3RfaXJxX3NvdXJjZV9pZChrdm0pOwotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAlpZiAocGl0LT5pcnFfc291cmNlX2lkIDwgMCkgewogCQlrZnJlZShwaXQpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTU4MCwxMCArNTkxLDE0IEBACiAJcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyLmdzaSA9IDA7CiAJcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyLmlycV9hY2tlZCA9IGt2bV9waXRfYWNrX2lycTsKIAlrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihrdm0sICZwaXRfc3RhdGUtPmlycV9hY2tfbm90aWZpZXIpOworCXBpdF9zdGF0ZS0+cGl0X3RpbWVyLnJlaW5qZWN0ID0gdHJ1ZTsKIAltdXRleF91bmxvY2soJnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCiAJa3ZtX3BpdF9yZXNldChwaXQpOwogCisJcGl0LT5tYXNrX25vdGlmaWVyLmZ1bmMgPSBwaXRfbWFza19ub3RpZmVyOworCWt2bV9yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihrdm0sIDAsICZwaXQtPm1hc2tfbm90aWZpZXIpOworCiAJcmV0dXJuIHBpdDsKIH0KIApAQCAtNTkyLDYgKzYwNyw4IEBACiAJc3RydWN0IGhydGltZXIgKnRpbWVyOwogCiAJaWYgKGt2bS0+YXJjaC52cGl0KSB7CisJCWt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKGt2bSwgMCwKKwkJCQkJICAgICAgICZrdm0tPmFyY2gudnBpdC0+bWFza19ub3RpZmllcik7CiAJCW11dGV4X2xvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CiAJCXRpbWVyID0gJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnRpbWVyOwogCQlocnRpbWVyX2NhbmNlbCh0aW1lcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaCBiL2FyY2gveDg2L2t2bS9pODI1NC5oCmluZGV4IDQxNzgwMjIuLjZhY2JlNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5oCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5oCkBAIC05LDYgKzksNyBAQAogCXM2NCBwZXJpb2Q7IC8qIHVuaXQ6IG5zICovCiAJczY0IHNjaGVkdWxlZDsKIAlhdG9taWNfdCBwZW5kaW5nOworCWJvb2wgcmVpbmplY3Q7CiB9OwogCiBzdHJ1Y3Qga3ZtX2twaXRfY2hhbm5lbF9zdGF0ZSB7CkBAIC00NSw2ICs0Niw3IEBACiAJc3RydWN0IGt2bSAqa3ZtOwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSBwaXRfc3RhdGU7CiAJaW50IGlycV9zb3VyY2VfaWQ7CisJc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciBtYXNrX25vdGlmaWVyOwogfTsKIAogI2RlZmluZSBLVk1fUElUX0JBU0VfQUREUkVTUwkgICAgMHg0MApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU5LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTkuYwppbmRleCAxNzlkY2IwLi4xY2NiNTBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTkuYwpAQCAtMzIsMTEgKzMyLDEzIEBACiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KIAogc3RhdGljIHZvaWQgcGljX2xvY2soc3RydWN0IGt2bV9waWMgKnMpCisJX19hY3F1aXJlcygmcy0+bG9jaykKIHsKIAlzcGluX2xvY2soJnMtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBwaWNfdW5sb2NrKHN0cnVjdCBrdm1fcGljICpzKQorCV9fcmVsZWFzZXMoJnMtPmxvY2spCiB7CiAJc3RydWN0IGt2bSAqa3ZtID0gcy0+a3ZtOwogCXVuc2lnbmVkIGFja3MgPSBzLT5wZW5kaW5nX2Fja3M7CkBAIC00OSw3ICs1MSw4IEBACiAJc3Bpbl91bmxvY2soJnMtPmxvY2spOwogCiAJd2hpbGUgKGFja3MpIHsKLQkJa3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBfX2ZmcyhhY2tzKSk7CisJCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgU0VMRUNUX1BJQyhfX2ZmcyhhY2tzKSksCisJCQkJICAgICBfX2ZmcyhhY2tzKSk7CiAJCWFja3MgJj0gYWNrcyAtIDE7CiAJfQogCkBAIC03NiwxMiArNzksMTMgQEAKIC8qCiAgKiBzZXQgaXJxIGxldmVsLiBJZiBhbiBlZGdlIGlzIGRldGVjdGVkLCB0aGVuIHRoZSBJUlIgaXMgc2V0IHRvIDEKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHBpY19zZXRfaXJxMShzdHJ1Y3Qga3ZtX2twaWNfc3RhdGUgKnMsIGludCBpcnEsIGludCBsZXZlbCkKK3N0YXRpYyBpbmxpbmUgaW50IHBpY19zZXRfaXJxMShzdHJ1Y3Qga3ZtX2twaWNfc3RhdGUgKnMsIGludCBpcnEsIGludCBsZXZlbCkKIHsKLQlpbnQgbWFzazsKKwlpbnQgbWFzaywgcmV0ID0gMTsKIAltYXNrID0gMSA8PCBpcnE7CiAJaWYgKHMtPmVsY3IgJiBtYXNrKQkvKiBsZXZlbCB0cmlnZ2VyZWQgKi8KIAkJaWYgKGxldmVsKSB7CisJCQlyZXQgPSAhKHMtPmlyciAmIG1hc2spOwogCQkJcy0+aXJyIHw9IG1hc2s7CiAJCQlzLT5sYXN0X2lyciB8PSBtYXNrOwogCQl9IGVsc2UgewpAQCAtOTAsMTEgKzk0LDE1IEBACiAJCX0KIAllbHNlCS8qIGVkZ2UgdHJpZ2dlcmVkICovCiAJCWlmIChsZXZlbCkgewotCQkJaWYgKChzLT5sYXN0X2lyciAmIG1hc2spID09IDApCisJCQlpZiAoKHMtPmxhc3RfaXJyICYgbWFzaykgPT0gMCkgeworCQkJCXJldCA9ICEocy0+aXJyICYgbWFzayk7CiAJCQkJcy0+aXJyIHw9IG1hc2s7CisJCQl9CiAJCQlzLT5sYXN0X2lyciB8PSBtYXNrOwogCQl9IGVsc2UKIAkJCXMtPmxhc3RfaXJyICY9IH5tYXNrOworCisJcmV0dXJuIChzLT5pbXIgJiBtYXNrKSA/IC0xIDogcmV0OwogfQogCiAvKgpAQCAtMTcxLDE2ICsxNzksMTkgQEAKIAlwaWNfdW5sb2NrKHMpOwogfQogCi12b2lkIGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCkKK2ludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7CiAJc3RydWN0IGt2bV9waWMgKnMgPSBvcGFxdWU7CisJaW50IHJldCA9IC0xOwogCiAJcGljX2xvY2socyk7CiAJaWYgKGlycSA+PSAwICYmIGlycSA8IFBJQ19OVU1fUElOUykgewotCQlwaWNfc2V0X2lycTEoJnMtPnBpY3NbaXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7CisJCXJldCA9IHBpY19zZXRfaXJxMSgmcy0+cGljc1tpcnEgPj4gM10sIGlycSAmIDcsIGxldmVsKTsKIAkJcGljX3VwZGF0ZV9pcnEocyk7CiAJfQogCXBpY191bmxvY2socyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMjMyLDcgKzI0Myw3IEBACiAJfQogCXBpY191cGRhdGVfaXJxKHMpOwogCXBpY191bmxvY2socyk7Ci0Ja3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBpcnEpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgU0VMRUNUX1BJQyhpcnEpLCBpcnEpOwogCiAJcmV0dXJuIGludG5vOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5oIGIvYXJjaC94ODYva3ZtL2lycS5oCmluZGV4IDgyNTc5ZWUuLjlmNTkzMTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuaAorKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmgKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJsYXBpYy5oIgogCiAjZGVmaW5lIFBJQ19OVU1fUElOUyAxNgorI2RlZmluZSBTRUxFQ1RfUElDKGlycSkgXAorCSgoaXJxKSA8IDggPyBLVk1fSVJRQ0hJUF9QSUNfTUFTVEVSIDogS1ZNX0lSUUNISVBfUElDX1NMQVZFKQogCiBzdHJ1Y3Qga3ZtOwogc3RydWN0IGt2bV92Y3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9zdm0uaCBiL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmgKaW5kZXggOGU1ZWU5OS4uZWQ2NmU0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9zdm0uaAorKysgYi9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oCkBAIC0xOCw3ICsxOCw2IEBACiB9OwogCiAjZGVmaW5lIE5SX0hPU1RfU0FWRV9VU0VSX01TUlMgQVJSQVlfU0laRShob3N0X3NhdmVfdXNlcl9tc3JzKQotI2RlZmluZSBOVU1fREJfUkVHUyA0CiAKIHN0cnVjdCBrdm1fdmNwdTsKIApAQCAtMjksMTggKzI4LDIzIEBACiAJc3RydWN0IHN2bV9jcHVfZGF0YSAqc3ZtX2RhdGE7CiAJdWludDY0X3QgYXNpZF9nZW5lcmF0aW9uOwogCi0JdW5zaWduZWQgbG9uZyBkYl9yZWdzW05VTV9EQl9SRUdTXTsKLQogCXU2NCBuZXh0X3JpcDsKIAogCXU2NCBob3N0X3VzZXJfbXNyc1tOUl9IT1NUX1NBVkVfVVNFUl9NU1JTXTsKIAl1NjQgaG9zdF9nc19iYXNlOwogCXVuc2lnbmVkIGxvbmcgaG9zdF9jcjI7Ci0JdW5zaWduZWQgbG9uZyBob3N0X2RiX3JlZ3NbTlVNX0RCX1JFR1NdOwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjY7Ci0JdW5zaWduZWQgbG9uZyBob3N0X2RyNzsKIAogCXUzMiAqbXNycG07CisJc3RydWN0IHZtY2IgKmhzYXZlOworCXU2NCBoc2F2ZV9tc3I7CisKKwl1NjQgbmVzdGVkX3ZtY2I7CisKKwkvKiBUaGVzZSBhcmUgdGhlIG1lcmdlZCB2ZWN0b3JzICovCisJdTMyICpuZXN0ZWRfbXNycG07CisKKwkvKiBncGEgcG9pbnRlcnMgdG8gdGhlIHJlYWwgdmVjdG9ycyAqLworCXU2NCBuZXN0ZWRfdm1jYl9tc3JwbTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDJkNDQ3N2MuLjJhMzZmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTE0NSwxMSArMTQ1LDIwIEBACiAJc3RydWN0IGt2bV9ybWFwX2Rlc2MgKm1vcmU7CiB9OwogCi1zdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHsKLQlpbnQgKCplbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqd2Fsaywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkgICAgIHU2NCBhZGRyLCB1NjQgKnNwdGUsIGludCBsZXZlbCk7CitzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIHsKKwl1NjQgYWRkcjsKKwlocGFfdCBzaGFkb3dfYWRkcjsKKwlpbnQgbGV2ZWw7CisJdTY0ICpzcHRlcDsKKwl1bnNpZ25lZCBpbmRleDsKIH07CiAKKyNkZWZpbmUgZm9yX2VhY2hfc2hhZG93X2VudHJ5KF92Y3B1LCBfYWRkciwgX3dhbGtlcikgICAgXAorCWZvciAoc2hhZG93X3dhbGtfaW5pdCgmKF93YWxrZXIpLCBfdmNwdSwgX2FkZHIpOwlcCisJICAgICBzaGFkb3dfd2Fsa19va2F5KCYoX3dhbGtlcikpOwkJCVwKKwkgICAgIHNoYWRvd193YWxrX25leHQoJihfd2Fsa2VyKSkpCisKKwogc3RydWN0IGt2bV91bnN5bmNfd2FsayB7CiAJaW50ICgqZW50cnkpIChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgc3RydWN0IGt2bV91bnN5bmNfd2FsayAqd2Fsayk7CiB9OwpAQCAtMzQzLDcgKzM1Miw2IEBACiAKIAlCVUdfT04oIW1jLT5ub2Jqcyk7CiAJcCA9IG1jLT5vYmplY3RzWy0tbWMtPm5vYmpzXTsKLQltZW1zZXQocCwgMCwgc2l6ZSk7CiAJcmV0dXJuIHA7CiB9CiAKQEAgLTc5NCwxMCArODAyLDggQEAKIAlzZXRfcGFnZV9wcml2YXRlKHZpcnRfdG9fcGFnZShzcC0+c3B0KSwgKHVuc2lnbmVkIGxvbmcpc3ApOwogCWxpc3RfYWRkKCZzcC0+bGluaywgJnZjcHUtPmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmc3AtPm9vc19saW5rKTsKLQlBU1NFUlQoaXNfZW1wdHlfc2hhZG93X3BhZ2Uoc3AtPnNwdCkpOwogCWJpdG1hcF96ZXJvKHNwLT5zbG90X2JpdG1hcCwgS1ZNX01FTU9SWV9TTE9UUyArIEtWTV9QUklWQVRFX01FTV9TTE9UUyk7CiAJc3AtPm11bHRpbWFwcGVkID0gMDsKLQlzcC0+Z2xvYmFsID0gMTsKIAlzcC0+cGFyZW50X3B0ZSA9IHBhcmVudF9wdGU7CiAJLS12Y3B1LT5rdm0tPmFyY2gubl9mcmVlX21tdV9wYWdlczsKIAlyZXR1cm4gc3A7CkBAIC05ODMsOCArOTg5LDggQEAKIAkgICAgIGlkeCA8IDUxMjsJCQkJCVwKIAkgICAgIGlkeCA9IGZpbmRfbmV4dF9iaXQoYml0bWFwLCA1MTIsIGlkeCsxKSkKIAotaW50IG1tdV9wYWdlc19hZGQoc3RydWN0IGt2bV9tbXVfcGFnZXMgKnB2ZWMsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAotCQkgICBpbnQgaWR4KQorc3RhdGljIGludCBtbXVfcGFnZXNfYWRkKHN0cnVjdCBrdm1fbW11X3BhZ2VzICpwdmVjLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKKwkJCSBpbnQgaWR4KQogewogCWludCBpOwogCkBAIC0xMDU5LDcgKzEwNjUsNyBAQAogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShzcCwgbm9kZSwgYnVja2V0LCBoYXNoX2xpbmspCi0JCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUubWV0YXBoeXNpY2FsCisJCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUuZGlyZWN0CiAJCSAgICAmJiAhc3AtPnJvbGUuaW52YWxpZCkgewogCQkJcGdwcmludGsoIiVzOiBmb3VuZCByb2xlICV4XG4iLAogCQkJCSBfX2Z1bmNfXywgc3AtPnJvbGUud29yZCk7CkBAIC0xMTE1LDggKzExMjEsOSBAQAogCQkJaSA8IHB2ZWMubnIgJiYgKHsgc3AgPSBwdmVjLnBhZ2VbaV0uc3A7IDE7fSk7CVwKIAkJCWkgPSBtbXVfcGFnZXNfbmV4dCgmcHZlYywgJnBhcmVudHMsIGkpKQogCi1pbnQgbW11X3BhZ2VzX25leHQoc3RydWN0IGt2bV9tbXVfcGFnZXMgKnB2ZWMsIHN0cnVjdCBtbXVfcGFnZV9wYXRoICpwYXJlbnRzLAotCQkgICBpbnQgaSkKK3N0YXRpYyBpbnQgbW11X3BhZ2VzX25leHQoc3RydWN0IGt2bV9tbXVfcGFnZXMgKnB2ZWMsCisJCQkgIHN0cnVjdCBtbXVfcGFnZV9wYXRoICpwYXJlbnRzLAorCQkJICBpbnQgaSkKIHsKIAlpbnQgbjsKIApAQCAtMTEzNSw3ICsxMTQyLDcgQEAKIAlyZXR1cm4gbjsKIH0KIAotdm9pZCBtbXVfcGFnZXNfY2xlYXJfcGFyZW50cyhzdHJ1Y3QgbW11X3BhZ2VfcGF0aCAqcGFyZW50cykKK3N0YXRpYyB2b2lkIG1tdV9wYWdlc19jbGVhcl9wYXJlbnRzKHN0cnVjdCBtbXVfcGFnZV9wYXRoICpwYXJlbnRzKQogewogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCXVuc2lnbmVkIGludCBsZXZlbCA9IDA7CkBAIC0xMTkzLDcgKzEyMDAsNyBAQAogCQkJCQkgICAgIGdmbl90IGdmbiwKIAkJCQkJICAgICBndmFfdCBnYWRkciwKIAkJCQkJICAgICB1bnNpZ25lZCBsZXZlbCwKLQkJCQkJICAgICBpbnQgbWV0YXBoeXNpY2FsLAorCQkJCQkgICAgIGludCBkaXJlY3QsCiAJCQkJCSAgICAgdW5zaWduZWQgYWNjZXNzLAogCQkJCQkgICAgIHU2NCAqcGFyZW50X3B0ZSkKIHsKQEAgLTEyMDQsMTAgKzEyMTEsOSBAQAogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOwogCi0Jcm9sZS53b3JkID0gMDsKLQlyb2xlLmdsZXZlbHMgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsOworCXJvbGUgPSB2Y3B1LT5hcmNoLm1tdS5iYXNlX3JvbGU7CiAJcm9sZS5sZXZlbCA9IGxldmVsOwotCXJvbGUubWV0YXBoeXNpY2FsID0gbWV0YXBoeXNpY2FsOworCXJvbGUuZGlyZWN0ID0gZGlyZWN0OwogCXJvbGUuYWNjZXNzID0gYWNjZXNzOwogCWlmICh2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsIDw9IFBUMzJfUk9PVF9MRVZFTCkgewogCQlxdWFkcmFudCA9IGdhZGRyID4+IChQQUdFX1NISUZUICsgKFBUNjRfUFRfQklUUyAqIGxldmVsKSk7CkBAIC0xMjQyLDggKzEyNDgsOSBAQAogCXBncHJpbnRrKCIlczogYWRkaW5nIGdmbiAlbHggcm9sZSAleFxuIiwgX19mdW5jX18sIGdmbiwgcm9sZS53b3JkKTsKIAlzcC0+Z2ZuID0gZ2ZuOwogCXNwLT5yb2xlID0gcm9sZTsKKwlzcC0+Z2xvYmFsID0gcm9sZS5jcjRfcGdlOwogCWhsaXN0X2FkZF9oZWFkKCZzcC0+aGFzaF9saW5rLCBidWNrZXQpOwotCWlmICghbWV0YXBoeXNpY2FsKSB7CisJaWYgKCFkaXJlY3QpIHsKIAkJaWYgKHJtYXBfd3JpdGVfcHJvdGVjdCh2Y3B1LT5rdm0sIGdmbikpCiAJCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKIAkJYWNjb3VudF9zaGFkb3dlZCh2Y3B1LT5rdm0sIGdmbik7CkBAIC0xMjU1LDM1ICsxMjYyLDM1IEBACiAJcmV0dXJuIHNwOwogfQogCi1zdGF0aWMgaW50IHdhbGtfc2hhZG93KHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKndhbGtlciwKLQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIpCitzdGF0aWMgdm9pZCBzaGFkb3dfd2Fsa19pbml0KHN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgKml0ZXJhdG9yLAorCQkJICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyKQogewotCWhwYV90IHNoYWRvd19hZGRyOwotCWludCBsZXZlbDsKLQlpbnQgcjsKLQl1NjQgKnNwdGVwOwotCXVuc2lnbmVkIGluZGV4OwotCi0Jc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKLQlsZXZlbCA9IHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsOwotCWlmIChsZXZlbCA9PSBQVDMyRV9ST09UX0xFVkVMKSB7Ci0JCXNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107Ci0JCXNoYWRvd19hZGRyICY9IFBUNjRfQkFTRV9BRERSX01BU0s7Ci0JCWlmICghc2hhZG93X2FkZHIpCi0JCQlyZXR1cm4gMTsKLQkJLS1sZXZlbDsKKwlpdGVyYXRvci0+YWRkciA9IGFkZHI7CisJaXRlcmF0b3ItPnNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucm9vdF9ocGE7CisJaXRlcmF0b3ItPmxldmVsID0gdmNwdS0+YXJjaC5tbXUuc2hhZG93X3Jvb3RfbGV2ZWw7CisJaWYgKGl0ZXJhdG9yLT5sZXZlbCA9PSBQVDMyRV9ST09UX0xFVkVMKSB7CisJCWl0ZXJhdG9yLT5zaGFkb3dfYWRkcgorCQkJPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFsoYWRkciA+PiAzMCkgJiAzXTsKKwkJaXRlcmF0b3ItPnNoYWRvd19hZGRyICY9IFBUNjRfQkFTRV9BRERSX01BU0s7CisJCS0taXRlcmF0b3ItPmxldmVsOworCQlpZiAoIWl0ZXJhdG9yLT5zaGFkb3dfYWRkcikKKwkJCWl0ZXJhdG9yLT5sZXZlbCA9IDA7CiAJfQorfQogCi0Jd2hpbGUgKGxldmVsID49IFBUX1BBR0VfVEFCTEVfTEVWRUwpIHsKLQkJaW5kZXggPSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpOwotCQlzcHRlcCA9ICgodTY0ICopX192YShzaGFkb3dfYWRkcikpICsgaW5kZXg7Ci0JCXIgPSB3YWxrZXItPmVudHJ5KHdhbGtlciwgdmNwdSwgYWRkciwgc3B0ZXAsIGxldmVsKTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gcjsKLQkJc2hhZG93X2FkZHIgPSAqc3B0ZXAgJiBQVDY0X0JBU0VfQUREUl9NQVNLOwotCQktLWxldmVsOwotCX0KLQlyZXR1cm4gMDsKK3N0YXRpYyBib29sIHNoYWRvd193YWxrX29rYXkoc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciAqaXRlcmF0b3IpCit7CisJaWYgKGl0ZXJhdG9yLT5sZXZlbCA8IFBUX1BBR0VfVEFCTEVfTEVWRUwpCisJCXJldHVybiBmYWxzZTsKKwlpdGVyYXRvci0+aW5kZXggPSBTSEFET1dfUFRfSU5ERVgoaXRlcmF0b3ItPmFkZHIsIGl0ZXJhdG9yLT5sZXZlbCk7CisJaXRlcmF0b3ItPnNwdGVwCT0gKCh1NjQgKilfX3ZhKGl0ZXJhdG9yLT5zaGFkb3dfYWRkcikpICsgaXRlcmF0b3ItPmluZGV4OworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzaGFkb3dfd2Fsa19uZXh0KHN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgKml0ZXJhdG9yKQoreworCWl0ZXJhdG9yLT5zaGFkb3dfYWRkciA9ICppdGVyYXRvci0+c3B0ZXAgJiBQVDY0X0JBU0VfQUREUl9NQVNLOworCS0taXRlcmF0b3ItPmxldmVsOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fbW11X3BhZ2VfdW5saW5rX2NoaWxkcmVuKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTEzODgsNyArMTM5NSw3IEBACiAJa3ZtX21tdV9wYWdlX3VubGlua19jaGlsZHJlbihrdm0sIHNwKTsKIAlrdm1fbW11X3VubGlua19wYXJlbnRzKGt2bSwgc3ApOwogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwotCWlmICghc3AtPnJvbGUuaW52YWxpZCAmJiAhc3AtPnJvbGUubWV0YXBoeXNpY2FsKQorCWlmICghc3AtPnJvbGUuaW52YWxpZCAmJiAhc3AtPnJvbGUuZGlyZWN0KQogCQl1bmFjY291bnRfc2hhZG93ZWQoa3ZtLCBzcC0+Z2ZuKTsKIAlpZiAoc3AtPnVuc3luYykKIAkJa3ZtX3VubGlua191bnN5bmNfcGFnZShrdm0sIHNwKTsKQEAgLTE0NTEsNyArMTQ1OCw3IEBACiAJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKIAlidWNrZXQgPSAma3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsIG4sIGJ1Y2tldCwgaGFzaF9saW5rKQotCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCkgeworCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLmRpcmVjdCkgewogCQkJcGdwcmludGsoIiVzOiBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fZnVuY19fLCBnZm4sCiAJCQkJIHNwLT5yb2xlLndvcmQpOwogCQkJciA9IDE7CkBAIC0xNDYzLDExICsxNDcwLDIwIEBACiAKIHN0YXRpYyB2b2lkIG1tdV91bnNoYWRvdyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKKwl1bnNpZ25lZCBpbmRleDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm47CiAKLQl3aGlsZSAoKHNwID0ga3ZtX21tdV9sb29rdXBfcGFnZShrdm0sIGdmbikpICE9IE5VTEwpIHsKLQkJcGdwcmludGsoIiVzOiB6YXAgJWx4ICV4XG4iLCBfX2Z1bmNfXywgZ2ZuLCBzcC0+cm9sZS53b3JkKTsKLQkJa3ZtX21tdV96YXBfcGFnZShrdm0sIHNwKTsKKwlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOworCWJ1Y2tldCA9ICZrdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgbm4sIGJ1Y2tldCwgaGFzaF9saW5rKSB7CisJCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUuZGlyZWN0CisJCSAgICAmJiAhc3AtPnJvbGUuaW52YWxpZCkgeworCQkJcGdwcmludGsoIiVzOiB6YXAgJWx4ICV4XG4iLAorCQkJCSBfX2Z1bmNfXywgZ2ZuLCBzcC0+cm9sZS53b3JkKTsKKwkJCWt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCk7CisJCX0KIAl9CiB9CiAKQEAgLTE2MjIsNyArMTYzOCw3IEBACiAJYnVja2V0ID0gJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAkvKiBkb24ndCB1bnN5bmMgaWYgcGFnZXRhYmxlIGlzIHNoYWRvd2VkIHdpdGggbXVsdGlwbGUgcm9sZXMgKi8KIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIG5vZGUsIG4sIGJ1Y2tldCwgaGFzaF9saW5rKSB7Ci0JCWlmIChzLT5nZm4gIT0gc3AtPmdmbiB8fCBzLT5yb2xlLm1ldGFwaHlzaWNhbCkKKwkJaWYgKHMtPmdmbiAhPSBzcC0+Z2ZuIHx8IHMtPnJvbGUuZGlyZWN0KQogCQkJY29udGludWU7CiAJCWlmIChzLT5yb2xlLndvcmQgIT0gc3AtPnJvbGUud29yZCkKIAkJCXJldHVybiAxOwpAQCAtMTY2OSw4ICsxNjg1LDYgQEAKIAl1NjQgbXRfbWFzayA9IHNoYWRvd19tdF9tYXNrOwogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzaGFkb3dfcHRlKSk7CiAKLQlpZiAoISh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfUEdFKSkKLQkJZ2xvYmFsID0gMDsKIAlpZiAoIWdsb2JhbCAmJiBzcC0+Z2xvYmFsKSB7CiAJCXNwLT5nbG9iYWwgPSAwOwogCQlpZiAoc3AtPnVuc3luYykgewpAQCAtMTc3NywxMiArMTc5MSw4IEBACiAJCQlwZ3ByaW50aygiaGZuIG9sZCAlbHggbmV3ICVseFxuIiwKIAkJCQkgc3B0ZV90b19wZm4oKnNoYWRvd19wdGUpLCBwZm4pOwogCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzaGFkb3dfcHRlKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChsYXJnZXBhZ2UpCi0JCQkJd2FzX3JtYXBwZWQgPSBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpOwotCQkJZWxzZQotCQkJCXdhc19ybWFwcGVkID0gMTsKLQkJfQorCQl9IGVsc2UKKwkJCXdhc19ybWFwcGVkID0gMTsKIAl9CiAJaWYgKHNldF9zcHRlKHZjcHUsIHNoYWRvd19wdGUsIHB0ZV9hY2Nlc3MsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAogCQkgICAgICBkaXJ0eSwgbGFyZ2VwYWdlLCBnbG9iYWwsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSkpIHsKQEAgLTE4MjAsNjcgKzE4MzAsNDIgQEAKIHsKIH0KIAotc3RydWN0IGRpcmVjdF9zaGFkb3dfd2FsayB7Ci0Jc3RydWN0IGt2bV9zaGFkb3dfd2FsayB3YWxrZXI7Ci0JcGZuX3QgcGZuOwotCWludCB3cml0ZTsKLQlpbnQgbGFyZ2VwYWdlOwotCWludCBwdF93cml0ZTsKLX07Ci0KLXN0YXRpYyBpbnQgZGlyZWN0X21hcF9lbnRyeShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICpfd2FsaywKLQkJCSAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgdTY0IGFkZHIsIHU2NCAqc3B0ZXAsIGludCBsZXZlbCkKLXsKLQlzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrICp3YWxrID0KLQkJY29udGFpbmVyX29mKF93YWxrLCBzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrLCB3YWxrZXIpOwotCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwotCWdmbl90IHBzZXVkb19nZm47Ci0JZ2ZuX3QgZ2ZuID0gYWRkciA+PiBQQUdFX1NISUZUOwotCi0JaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKLQkgICAgfHwgKHdhbGstPmxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7Ci0JCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgQUNDX0FMTCwgQUNDX0FMTCwKLQkJCSAgICAgMCwgd2Fsay0+d3JpdGUsIDEsICZ3YWxrLT5wdF93cml0ZSwKLQkJCSAgICAgd2Fsay0+bGFyZ2VwYWdlLCAwLCBnZm4sIHdhbGstPnBmbiwgZmFsc2UpOwotCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgqc3B0ZXAgPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKLQkJcHNldWRvX2dmbiA9IChhZGRyICYgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7Ci0JCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCBwc2V1ZG9fZ2ZuLCAoZ3ZhX3QpYWRkciwgbGV2ZWwgLSAxLAotCQkJCSAgICAgIDEsIEFDQ19BTEwsIHNwdGVwKTsKLQkJaWYgKCFzcCkgewotCQkJcGdwcmludGsoIm5vbnBhZ2luZ19tYXA6IEVOT01FTVxuIik7Ci0JCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4od2Fsay0+cGZuKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsCi0JCQkgICAgICAgX19wYShzcC0+c3B0KQotCQkJICAgICAgIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSwotCQkJICAgICAgIHwgc2hhZG93X3VzZXJfbWFzayB8IHNoYWRvd194X21hc2spOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2RpcmVjdF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2LCBpbnQgd3JpdGUsCiAJCQlpbnQgbGFyZ2VwYWdlLCBnZm5fdCBnZm4sIHBmbl90IHBmbikKIHsKLQlpbnQgcjsKLQlzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrIHdhbGtlciA9IHsKLQkJLndhbGtlciA9IHsgLmVudHJ5ID0gZGlyZWN0X21hcF9lbnRyeSwgfSwKLQkJLnBmbiA9IHBmbiwKLQkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKLQkJLndyaXRlID0gd3JpdGUsCi0JCS5wdF93cml0ZSA9IDAsCi0JfTsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOworCWludCBwdF93cml0ZSA9IDA7CisJZ2ZuX3QgcHNldWRvX2dmbjsKIAotCXIgPSB3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ2ZuIDw8IFBBR0VfU0hJRlQpOwotCWlmIChyIDwgMCkKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIHdhbGtlci5wdF93cml0ZTsKKwlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgKHU2NClnZm4gPDwgUEFHRV9TSElGVCwgaXRlcmF0b3IpIHsKKwkJaWYgKGl0ZXJhdG9yLmxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKKwkJICAgIHx8IChsYXJnZXBhZ2UgJiYgaXRlcmF0b3IubGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgeworCQkJbW11X3NldF9zcHRlKHZjcHUsIGl0ZXJhdG9yLnNwdGVwLCBBQ0NfQUxMLCBBQ0NfQUxMLAorCQkJCSAgICAgMCwgd3JpdGUsIDEsICZwdF93cml0ZSwKKwkJCQkgICAgIGxhcmdlcGFnZSwgMCwgZ2ZuLCBwZm4sIGZhbHNlKTsKKwkJCSsrdmNwdS0+c3RhdC5wZl9maXhlZDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCppdGVyYXRvci5zcHRlcCA9PSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSkgeworCQkJcHNldWRvX2dmbiA9IChpdGVyYXRvci5hZGRyICYgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisJCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcHNldWRvX2dmbiwgaXRlcmF0b3IuYWRkciwKKwkJCQkJICAgICAgaXRlcmF0b3IubGV2ZWwgLSAxLAorCQkJCQkgICAgICAxLCBBQ0NfQUxMLCBpdGVyYXRvci5zcHRlcCk7CisJCQlpZiAoIXNwKSB7CisJCQkJcGdwcmludGsoIm5vbnBhZ2luZ19tYXA6IEVOT01FTVxuIik7CisJCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCXNldF9zaGFkb3dfcHRlKGl0ZXJhdG9yLnNwdGVwLAorCQkJCSAgICAgICBfX3BhKHNwLT5zcHQpCisJCQkJICAgICAgIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSworCQkJCSAgICAgICB8IHNoYWRvd191c2VyX21hc2sgfCBzaGFkb3dfeF9tYXNrKTsKKwkJfQorCX0KKwlyZXR1cm4gcHRfd3JpdGU7CiB9CiAKIHN0YXRpYyBpbnQgbm9ucGFnaW5nX21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHYsIGludCB3cml0ZSwgZ2ZuX3QgZ2ZuKQpAQCAtMTk2Miw3ICsxOTQ3LDcgQEAKIAlpbnQgaTsKIAlnZm5fdCByb290X2dmbjsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlpbnQgbWV0YXBoeXNpY2FsID0gMDsKKwlpbnQgZGlyZWN0ID0gMDsKIAogCXJvb3RfZ2ZuID0gdmNwdS0+YXJjaC5jcjMgPj4gUEFHRV9TSElGVDsKIApAQCAtMTk3MSwxOCArMTk1NiwxOCBAQAogCiAJCUFTU0VSVCghVkFMSURfUEFHRShyb290KSk7CiAJCWlmICh0ZHBfZW5hYmxlZCkKLQkJCW1ldGFwaHlzaWNhbCA9IDE7CisJCQlkaXJlY3QgPSAxOwogCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcm9vdF9nZm4sIDAsCi0JCQkJICAgICAgUFQ2NF9ST09UX0xFVkVMLCBtZXRhcGh5c2ljYWwsCisJCQkJICAgICAgUFQ2NF9ST09UX0xFVkVMLCBkaXJlY3QsCiAJCQkJICAgICAgQUNDX0FMTCwgTlVMTCk7CiAJCXJvb3QgPSBfX3BhKHNwLT5zcHQpOwogCQkrK3NwLT5yb290X2NvdW50OwogCQl2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSA9IHJvb3Q7CiAJCXJldHVybjsKIAl9Ci0JbWV0YXBoeXNpY2FsID0gIWlzX3BhZ2luZyh2Y3B1KTsKKwlkaXJlY3QgPSAhaXNfcGFnaW5nKHZjcHUpOwogCWlmICh0ZHBfZW5hYmxlZCkKLQkJbWV0YXBoeXNpY2FsID0gMTsKKwkJZGlyZWN0ID0gMTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CiAJCWhwYV90IHJvb3QgPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFtpXTsKIApAQCAtMTk5Niw3ICsxOTgxLDcgQEAKIAkJfSBlbHNlIGlmICh2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsID09IDApCiAJCQlyb290X2dmbiA9IDA7CiAJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCByb290X2dmbiwgaSA8PCAzMCwKLQkJCQkgICAgICBQVDMyX1JPT1RfTEVWRUwsIG1ldGFwaHlzaWNhbCwKKwkJCQkgICAgICBQVDMyX1JPT1RfTEVWRUwsIGRpcmVjdCwKIAkJCQkgICAgICBBQ0NfQUxMLCBOVUxMKTsKIAkJcm9vdCA9IF9fcGEoc3AtPnNwdCk7CiAJCSsrc3AtPnJvb3RfY291bnQ7CkBAIC0yMjUxLDE3ICsyMjM2LDIzIEBACiAKIHN0YXRpYyBpbnQgaW5pdF9rdm1fc29mdG1tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaW50IHI7CisKIAlBU1NFUlQodmNwdSk7CiAJQVNTRVJUKCFWQUxJRF9QQUdFKHZjcHUtPmFyY2gubW11LnJvb3RfaHBhKSk7CiAKIAlpZiAoIWlzX3BhZ2luZyh2Y3B1KSkKLQkJcmV0dXJuIG5vbnBhZ2luZ19pbml0X2NvbnRleHQodmNwdSk7CisJCXIgPSBub25wYWdpbmdfaW5pdF9jb250ZXh0KHZjcHUpOwogCWVsc2UgaWYgKGlzX2xvbmdfbW9kZSh2Y3B1KSkKLQkJcmV0dXJuIHBhZ2luZzY0X2luaXRfY29udGV4dCh2Y3B1KTsKKwkJciA9IHBhZ2luZzY0X2luaXRfY29udGV4dCh2Y3B1KTsKIAllbHNlIGlmIChpc19wYWUodmNwdSkpCi0JCXJldHVybiBwYWdpbmczMkVfaW5pdF9jb250ZXh0KHZjcHUpOworCQlyID0gcGFnaW5nMzJFX2luaXRfY29udGV4dCh2Y3B1KTsKIAllbHNlCi0JCXJldHVybiBwYWdpbmczMl9pbml0X2NvbnRleHQodmNwdSk7CisJCXIgPSBwYWdpbmczMl9pbml0X2NvbnRleHQodmNwdSk7CisKKwl2Y3B1LT5hcmNoLm1tdS5iYXNlX3JvbGUuZ2xldmVscyA9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWw7CisKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBpbml0X2t2bV9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjQ5Miw3ICsyNDgzLDcgQEAKIAlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOwogCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspIHsKLQkJaWYgKHNwLT5nZm4gIT0gZ2ZuIHx8IHNwLT5yb2xlLm1ldGFwaHlzaWNhbCB8fCBzcC0+cm9sZS5pbnZhbGlkKQorCQlpZiAoc3AtPmdmbiAhPSBnZm4gfHwgc3AtPnJvbGUuZGlyZWN0IHx8IHNwLT5yb2xlLmludmFsaWQpCiAJCQljb250aW51ZTsKIAkJcHRlX3NpemUgPSBzcC0+cm9sZS5nbGV2ZWxzID09IFBUMzJfUk9PVF9MRVZFTCA/IDQgOiA4OwogCQltaXNhbGlnbmVkID0gKG9mZnNldCBeIChvZmZzZXQgKyBieXRlcyAtIDEpKSAmIH4ocHRlX3NpemUgLSAxKTsKQEAgLTMxMzAsNyArMzEyMSw3IEBACiAJZ2ZuX3QgZ2ZuOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzcCwgJnZjcHUtPmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzLCBsaW5rKSB7Ci0JCWlmIChzcC0+cm9sZS5tZXRhcGh5c2ljYWwpCisJCWlmIChzcC0+cm9sZS5kaXJlY3QpCiAJCQljb250aW51ZTsKIAogCQlnZm4gPSB1bmFsaWFzX2dmbih2Y3B1LT5rdm0sIHNwLT5nZm4pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oCmluZGV4IDI1OGU1ZDUuLmVhYWIyMTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAorKysgYi9hcmNoL3g4Ni9rdm0vbW11LmgKQEAgLTU0LDcgKzU0LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xvbmdfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyICYgRUZFUl9MTUU7CisJcmV0dXJuIHZjcHUtPmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX0xNQTsKICNlbHNlCiAJcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKaW5kZXggOWZkNzhiNi4uNmJkNzAyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZiBQVFRZUEUgPT0gNjQKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1NjQKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXI2NAotCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyNjQKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjNjRfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDY0X0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0sKQEAgLTQyLDcgKzQxLDYgQEAKICNlbGlmIFBUVFlQRSA9PSAzMgogCSNkZWZpbmUgcHRfZWxlbWVudF90IHUzMgogCSNkZWZpbmUgZ3Vlc3Rfd2Fsa2VyIGd1ZXN0X3dhbGtlcjMyCi0JI2RlZmluZSBzaGFkb3dfd2Fsa2VyIHNoYWRvd193YWxrZXIzMgogCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyMzMl8jI25hbWUKIAkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUMzJfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDMyX0RJUl9CQVNFX0FERFJfTUFTSwpAQCAtNzMsMTggKzcxLDYgQEAKIAl1MzIgZXJyb3JfY29kZTsKIH07CiAKLXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHsKLQlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHdhbGtlcjsKLQlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndWVzdF93YWxrZXI7Ci0JaW50IHVzZXJfZmF1bHQ7Ci0JaW50IHdyaXRlX2ZhdWx0OwotCWludCBsYXJnZXBhZ2U7Ci0JaW50ICpwdHdyaXRlOwotCXBmbl90IHBmbjsKLQl1NjQgKnNwdGVwOwotCWdwYV90IHB0ZV9ncGE7Ci19OwotCiBzdGF0aWMgZ2ZuX3QgZ3B0ZV90b19nZm4ocHRfZWxlbWVudF90IGdwdGUpCiB7CiAJcmV0dXJuIChncHRlICYgUFRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CkBAIC0yODMsOTEgKzI2OSw3OSBAQAogLyoKICAqIEZldGNoIGEgc2hhZG93IHB0ZSBmb3IgYSBzcGVjaWZpYyBsZXZlbCBpbiB0aGUgcGFnaW5nIGhpZXJhcmNoeS4KICAqLwotc3RhdGljIGludCBGTkFNRShzaGFkb3dfd2Fsa19lbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3N3LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLAotCQkJCSAgICB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IHNoYWRvd193YWxrZXIgKnN3ID0KLQkJY29udGFpbmVyX29mKF9zdywgc3RydWN0IHNoYWRvd193YWxrZXIsIHdhbGtlcik7Ci0Jc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3cgPSBzdy0+Z3Vlc3Rfd2Fsa2VyOwotCXVuc2lnbmVkIGFjY2VzcyA9IGd3LT5wdF9hY2Nlc3M7Ci0Jc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93X3BhZ2U7Ci0JdTY0IHNwdGU7Ci0JaW50IG1ldGFwaHlzaWNhbDsKLQlnZm5fdCB0YWJsZV9nZm47Ci0JaW50IHI7Ci0JcHRfZWxlbWVudF90IGN1cnJfcHRlOwotCi0JaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKLQkgICAgfHwgKHN3LT5sYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgewotCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIGFjY2VzcywgZ3ctPnB0ZV9hY2Nlc3MgJiBhY2Nlc3MsCi0JCQkgICAgIHN3LT51c2VyX2ZhdWx0LCBzdy0+d3JpdGVfZmF1bHQsCi0JCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCi0JCQkgICAgIHN3LT5wdHdyaXRlLCBzdy0+bGFyZ2VwYWdlLAotCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9HTE9CQUxfTUFTSywKLQkJCSAgICAgZ3ctPmdmbiwgc3ctPnBmbiwgZmFsc2UpOwotCQlzdy0+c3B0ZXAgPSBzcHRlcDsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApICYmICFpc19sYXJnZV9wdGUoKnNwdGVwKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpIHsKLQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKLQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7Ci0JCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOwotCX0KLQotCWlmIChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwgJiYgZ3ctPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgewotCQltZXRhcGh5c2ljYWwgPSAxOwotCQlpZiAoIWlzX2RpcnR5X3B0ZShndy0+cHRlc1tsZXZlbCAtIDFdKSkKLQkJCWFjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7Ci0JCXRhYmxlX2dmbiA9IGdwdGVfdG9fZ2ZuKGd3LT5wdGVzW2xldmVsIC0gMV0pOwotCX0gZWxzZSB7Ci0JCW1ldGFwaHlzaWNhbCA9IDA7Ci0JCXRhYmxlX2dmbiA9IGd3LT50YWJsZV9nZm5bbGV2ZWwgLSAyXTsKLQl9Ci0Jc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgKGd2YV90KWFkZHIsIGxldmVsLTEsCi0JCQkJICAgICAgIG1ldGFwaHlzaWNhbCwgYWNjZXNzLCBzcHRlcCk7Ci0JaWYgKCFtZXRhcGh5c2ljYWwpIHsKLQkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIGd3LT5wdGVfZ3BhW2xldmVsIC0gMl0sCi0JCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKLQkJaWYgKHIgfHwgY3Vycl9wdGUgIT0gZ3ctPnB0ZXNbbGV2ZWwgLSAyXSkgewotCQkJa3ZtX21tdV9wdXRfcGFnZShzaGFkb3dfcGFnZSwgc3B0ZXApOwotCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHN3LT5wZm4pOwotCQkJc3ctPnNwdGVwID0gTlVMTDsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0Jc3B0ZSA9IF9fcGEoc2hhZG93X3BhZ2UtPnNwdCkgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLCi0JCXwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSzsKLQkqc3B0ZXAgPSBzcHRlOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTY0ICpGTkFNRShmZXRjaCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyLAotCQkJIHN0cnVjdCBndWVzdF93YWxrZXIgKmd1ZXN0X3dhbGtlciwKKwkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndywKIAkJCSBpbnQgdXNlcl9mYXVsdCwgaW50IHdyaXRlX2ZhdWx0LCBpbnQgbGFyZ2VwYWdlLAogCQkJIGludCAqcHR3cml0ZSwgcGZuX3QgcGZuKQogewotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHdhbGtlciA9IHsKLQkJLndhbGtlciA9IHsgLmVudHJ5ID0gRk5BTUUoc2hhZG93X3dhbGtfZW50cnkpLCB9LAotCQkuZ3Vlc3Rfd2Fsa2VyID0gZ3Vlc3Rfd2Fsa2VyLAotCQkudXNlcl9mYXVsdCA9IHVzZXJfZmF1bHQsCi0JCS53cml0ZV9mYXVsdCA9IHdyaXRlX2ZhdWx0LAotCQkubGFyZ2VwYWdlID0gbGFyZ2VwYWdlLAotCQkucHR3cml0ZSA9IHB0d3JpdGUsCi0JCS5wZm4gPSBwZm4sCi0JfTsKKwl1bnNpZ25lZCBhY2Nlc3MgPSBndy0+cHRfYWNjZXNzOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNoYWRvd19wYWdlOworCXU2NCBzcHRlLCAqc3B0ZXA7CisJaW50IGRpcmVjdDsKKwlnZm5fdCB0YWJsZV9nZm47CisJaW50IHI7CisJaW50IGxldmVsOworCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOwogCi0JaWYgKCFpc19wcmVzZW50X3B0ZShndWVzdF93YWxrZXItPnB0ZXNbZ3Vlc3Rfd2Fsa2VyLT5sZXZlbCAtIDFdKSkKKwlpZiAoIWlzX3ByZXNlbnRfcHRlKGd3LT5wdGVzW2d3LT5sZXZlbCAtIDFdKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQl3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgYWRkcik7CisJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsIGFkZHIsIGl0ZXJhdG9yKSB7CisJCWxldmVsID0gaXRlcmF0b3IubGV2ZWw7CisJCXNwdGVwID0gaXRlcmF0b3Iuc3B0ZXA7CisJCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCisJCSAgICB8fCAobGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgYWNjZXNzLAorCQkJCSAgICAgZ3ctPnB0ZV9hY2Nlc3MgJiBhY2Nlc3MsCisJCQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKKwkJCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCisJCQkJICAgICBwdHdyaXRlLCBsYXJnZXBhZ2UsCisJCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9HTE9CQUxfTUFTSywKKwkJCQkgICAgIGd3LT5nZm4sIHBmbiwgZmFsc2UpOworCQkJYnJlYWs7CisJCX0KIAotCXJldHVybiB3YWxrZXIuc3B0ZXA7CisJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSAmJiAhaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpIHsKKwkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOworCQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOworCQl9CisKKwkJaWYgKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTAorCQkgICAgJiYgZ3ctPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgeworCQkJZGlyZWN0ID0gMTsKKwkJCWlmICghaXNfZGlydHlfcHRlKGd3LT5wdGVzW2xldmVsIC0gMV0pKQorCQkJCWFjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7CisJCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbihndy0+cHRlc1tsZXZlbCAtIDFdKTsKKwkJfSBlbHNlIHsKKwkJCWRpcmVjdCA9IDA7CisJCQl0YWJsZV9nZm4gPSBndy0+dGFibGVfZ2ZuW2xldmVsIC0gMl07CisJCX0KKwkJc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgYWRkciwgbGV2ZWwtMSwKKwkJCQkJICAgICAgIGRpcmVjdCwgYWNjZXNzLCBzcHRlcCk7CisJCWlmICghZGlyZWN0KSB7CisJCQlyID0ga3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwKKwkJCQkJCSAgZ3ctPnB0ZV9ncGFbbGV2ZWwgLSAyXSwKKwkJCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKKwkJCWlmIChyIHx8IGN1cnJfcHRlICE9IGd3LT5wdGVzW2xldmVsIC0gMl0pIHsKKwkJCQlrdm1fbW11X3B1dF9wYWdlKHNoYWRvd19wYWdlLCBzcHRlcCk7CisJCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCQkJc3B0ZXAgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJc3B0ZSA9IF9fcGEoc2hhZG93X3BhZ2UtPnNwdCkKKwkJCXwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSworCQkJfCBQVF9XUklUQUJMRV9NQVNLIHwgUFRfVVNFUl9NQVNLOworCQkqc3B0ZXAgPSBzcHRlOworCX0KKworCXJldHVybiBzcHRlcDsKIH0KIAogLyoKQEAgLTQ2NSw1NCArNDM5LDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgRk5BTUUoc2hhZG93X2ludmxwZ19lbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3N3LAotCQkJCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsCi0JCQkJICAgICAgdTY0ICpzcHRlcCwgaW50IGxldmVsKQotewotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyICpzdyA9Ci0JCWNvbnRhaW5lcl9vZihfc3csIHN0cnVjdCBzaGFkb3dfd2Fsa2VyLCB3YWxrZXIpOwotCi0JLyogRklYTUU6IHByb3Blcmx5IGhhbmRsZSBpbnZscGcgb24gbGFyZ2UgZ3Vlc3QgcGFnZXMgKi8KLQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCB8fAotCSAgICAoKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSB7Ci0JCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOwotCi0JCXN3LT5wdGVfZ3BhID0gKHNwLT5nZm4gPDwgUEFHRV9TSElGVCk7Ci0JCXN3LT5wdGVfZ3BhICs9IChzcHRlcCAtIHNwLT5zcHQpICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7Ci0KLQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKSB7Ci0JCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKLQkJCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkKLQkJCQktLXZjcHUtPmt2bS0+c3RhdC5scGFnZXM7Ci0JCX0KLQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBGTkFNRShpbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQogeworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGtfaXRlcmF0b3IgaXRlcmF0b3I7CiAJcHRfZWxlbWVudF90IGdwdGU7Ci0Jc3RydWN0IHNoYWRvd193YWxrZXIgd2Fsa2VyID0gewotCQkud2Fsa2VyID0geyAuZW50cnkgPSBGTkFNRShzaGFkb3dfaW52bHBnX2VudHJ5KSwgfSwKLQkJLnB0ZV9ncGEgPSAtMSwKLQl9OworCWdwYV90IHB0ZV9ncGEgPSAtMTsKKwlpbnQgbGV2ZWw7CisJdTY0ICpzcHRlcDsKKwlpbnQgbmVlZF9mbHVzaCA9IDA7CiAKIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwotCXdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBndmEpOworCisJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsIGd2YSwgaXRlcmF0b3IpIHsKKwkJbGV2ZWwgPSBpdGVyYXRvci5sZXZlbDsKKwkJc3B0ZXAgPSBpdGVyYXRvci5zcHRlcDsKKworCQkvKiBGSVhNRTogcHJvcGVybHkgaGFuZGxlIGludmxwZyBvbiBsYXJnZSBndWVzdCBwYWdlcyAqLworCQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCB8fAorCQkgICAgKChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSkgeworCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGVwKSk7CisKKwkJCXB0ZV9ncGEgPSAoc3AtPmdmbiA8PCBQQUdFX1NISUZUKTsKKwkJCXB0ZV9ncGEgKz0gKHNwdGVwIC0gc3AtPnNwdCkgKiBzaXplb2YocHRfZWxlbWVudF90KTsKKworCQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKSB7CisJCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CisJCQkJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKQorCQkJCQktLXZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CisJCQkJbmVlZF9mbHVzaCA9IDE7CisJCQl9CisJCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG5lZWRfZmx1c2gpCisJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKLQlpZiAod2Fsa2VyLnB0ZV9ncGEgPT0gLTEpCisKKwlpZiAocHRlX2dwYSA9PSAtMSkKIAkJcmV0dXJuOwotCWlmIChrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCB3YWxrZXIucHRlX2dwYSwgJmdwdGUsCisJaWYgKGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIHB0ZV9ncGEsICZncHRlLAogCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCkpKQogCQlyZXR1cm47CiAJaWYgKGlzX3ByZXNlbnRfcHRlKGdwdGUpICYmIChncHRlICYgUFRfQUNDRVNTRURfTUFTSykpIHsKIAkJaWYgKG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUpKQogCQkJcmV0dXJuOwotCQlrdm1fbW11X3B0ZV93cml0ZSh2Y3B1LCB3YWxrZXIucHRlX2dwYSwgKGNvbnN0IHU4ICopJmdwdGUsCisJCWt2bV9tbXVfcHRlX3dyaXRlKHZjcHUsIHB0ZV9ncGEsIChjb25zdCB1OCAqKSZncHRlLAogCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCksIDApOwogCX0KIH0KQEAgLTU0MCw3ICs1MTYsNyBAQAogCXB0X2VsZW1lbnRfdCBwdFsyNTYgLyBzaXplb2YocHRfZWxlbWVudF90KV07CiAJZ3BhX3QgcHRlX2dwYTsKIAotCWlmIChzcC0+cm9sZS5tZXRhcGh5c2ljYWwKKwlpZiAoc3AtPnJvbGUuZGlyZWN0CiAJICAgIHx8IChQVFRZUEUgPT0gMzIgJiYgc3AtPnJvbGUubGV2ZWwgPiBQVF9QQUdFX1RBQkxFX0xFVkVMKSkgewogCQlub25wYWdpbmdfcHJlZmV0Y2hfcGFnZSh2Y3B1LCBzcCk7CiAJCXJldHVybjsKQEAgLTYxOSw3ICs1OTUsNiBAQAogCiAjdW5kZWYgcHRfZWxlbWVudF90CiAjdW5kZWYgZ3Vlc3Rfd2Fsa2VyCi0jdW5kZWYgc2hhZG93X3dhbGtlcgogI3VuZGVmIEZOQU1FCiAjdW5kZWYgUFRfQkFTRV9BRERSX01BU0sKICN1bmRlZiBQVF9JTkRFWApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IGE5ZTc2OWUuLjE4MjFjMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTM4LDkgKzM4LDYgQEAKICNkZWZpbmUgSU9QTV9BTExPQ19PUkRFUiAyCiAjZGVmaW5lIE1TUlBNX0FMTE9DX09SREVSIDEKIAotI2RlZmluZSBEUjdfR0RfTUFTSyAoMSA8PCAxMykKLSNkZWZpbmUgRFI2X0JEX01BU0sgKDEgPDwgMTMpCi0KICNkZWZpbmUgU0VHX1RZUEVfTERUIDIKICNkZWZpbmUgU0VHX1RZUEVfQlVTWV9UU1MxNiAzCiAKQEAgLTUwLDYgKzQ3LDE1IEBACiAKICNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUyAofigweDNmVUxMKSkKIAorLyogVHVybiBvbiB0byBnZXQgZGVidWdnaW5nIG91dHB1dCovCisvKiAjZGVmaW5lIE5FU1RFRF9ERUJVRyAqLworCisjaWZkZWYgTkVTVEVEX0RFQlVHCisjZGVmaW5lIG5zdm1fcHJpbnRrKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fSU5GTyBmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBuc3ZtX3ByaW50ayhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKwogLyogZW5hYmxlIE5QVCBmb3IgQU1ENjQgYW5kIFg4NiB3aXRoIFBBRSAqLwogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkKIHN0YXRpYyBib29sIG5wdF9lbmFibGVkID0gdHJ1ZTsKQEAgLTYwLDE0ICs2NiwyOSBAQAogCiBtb2R1bGVfcGFyYW0obnB0LCBpbnQsIFNfSVJVR08pOwogCitzdGF0aWMgaW50IG5lc3RlZCA9IDA7Cittb2R1bGVfcGFyYW0obmVzdGVkLCBpbnQsIFNfSVJVR08pOworCiBzdGF0aWMgdm9pZCBrdm1fcmVwdXRfaXJxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIHN0YXRpYyB2b2lkIHN2bV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAorc3RhdGljIGludCBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBrdm1fb3ZlcnJpZGUpOworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKKwkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKTsKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9jaGVja19leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHVuc2lnbmVkIG5yLAorCQkJCSAgICAgIGJvb2wgaGFzX2Vycm9yX2NvZGUsIHUzMiBlcnJvcl9jb2RlKTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmNwdV9zdm0gKnRvX3N2bShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZih2Y3B1LCBzdHJ1Y3QgdmNwdV9zdm0sIHZjcHUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXJldHVybiBzdm0tPm5lc3RlZF92bWNiOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3BtX2Jhc2U7CiAKIHN0cnVjdCBrdm1fbGR0dHNzX2Rlc2MgewpAQCAtMTU3LDMyICsxNzgsNiBAQAogCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVjcjIiIDo6ICJyIiAodmFsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2RyNih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZHI2OwotCi0JYXNtIHZvbGF0aWxlICgibW92ICUlZHI2LCAlMCIgOiAiPXIiIChkcjYpKTsKLQlyZXR1cm4gZHI2OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZHI2KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjYiIDo6ICJyIiAodmFsKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2RyNyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZHI3OwotCi0JYXNtIHZvbGF0aWxlICgibW92ICUlZHI3LCAlMCIgOiAiPXIiIChkcjcpKTsKLQlyZXR1cm4gZHI3OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZHI3KHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjciIDo6ICJyIiAodmFsKSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmb3JjZV9uZXdfYXNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdG9fc3ZtKHZjcHUpLT5hc2lkX2dlbmVyYXRpb24tLTsKQEAgLTE5OCw3ICsxOTMsNyBAQAogCWlmICghbnB0X2VuYWJsZWQgJiYgIShlZmVyICYgRUZFUl9MTUEpKQogCQllZmVyICY9IH5FRkVSX0xNRTsKIAotCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5lZmVyID0gZWZlciB8IE1TUl9FRkVSX1NWTUVfTUFTSzsKKwl0b19zdm0odmNwdSktPnZtY2ItPnNhdmUuZWZlciA9IGVmZXIgfCBFRkVSX1NWTUU7CiAJdmNwdS0+YXJjaC5zaGFkb3dfZWZlciA9IGVmZXI7CiB9CiAKQEAgLTIwNyw2ICsyMDIsMTEgQEAKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAorCS8qIElmIHdlIGFyZSB3aXRoaW4gYSBuZXN0ZWQgVk0gd2UnZCBiZXR0ZXIgI1ZNRVhJVCBhbmQgbGV0IHRoZQorCSAgIGd1ZXN0IGhhbmRsZSB0aGUgZXhjZXB0aW9uICovCisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN2bSwgbnIsIGhhc19lcnJvcl9jb2RlLCBlcnJvcl9jb2RlKSkKKwkJcmV0dXJuOworCiAJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IG5yCiAJCXwgU1ZNX0VWVElOSl9WQUxJRAogCQl8IChoYXNfZXJyb3JfY29kZSA/IFNWTV9FVlRJTkpfVkFMSURfRVJSIDogMCkKQEAgLTI0Miw3ICsyNDIsNyBAQAogCWt2bV9yaXBfd3JpdGUodmNwdSwgc3ZtLT5uZXh0X3JpcCk7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9zdGF0ZSAmPSB+U1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSzsKIAotCXZjcHUtPmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuID0gMTsKKwl2Y3B1LT5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9IChzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbnQgaGFzX3N2bSh2b2lkKQpAQCAtMjUwLDcgKzI1MCw3IEBACiAJY29uc3QgY2hhciAqbXNnOwogCiAJaWYgKCFjcHVfaGFzX3N2bSgmbXNnKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJoYXNfc3ZuOiAlc1xuIiwgbXNnKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGFzX3N2bTogJXNcbiIsIG1zZyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjkyLDcgKzI5Miw3IEBACiAJc3ZtX2RhdGEtPnRzc19kZXNjID0gKHN0cnVjdCBrdm1fbGR0dHNzX2Rlc2MgKikoZ2R0ICsgR0RUX0VOVFJZX1RTUyk7CiAKIAlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOwotCXdybXNybChNU1JfRUZFUiwgZWZlciB8IE1TUl9FRkVSX1NWTUVfTUFTSyk7CisJd3Jtc3JsKE1TUl9FRkVSLCBlZmVyIHwgRUZFUl9TVk1FKTsKIAogCXdybXNybChNU1JfVk1fSFNBVkVfUEEsCiAJICAgICAgIHBhZ2VfdG9fcGZuKHN2bV9kYXRhLT5zYXZlX2FyZWEpIDw8IFBBR0VfU0hJRlQpOwpAQCAtNDE3LDYgKzQxNywxNCBAQAogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpKQogCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX05YKTsKIAorCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfRlhTUl9PUFQpKQorCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX0ZGWFNSKTsKKworCWlmIChuZXN0ZWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBOZXN0ZWQgVmlydHVhbGl6YXRpb24gZW5hYmxlZFxuIik7CisJCWt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfU1ZNRSk7CisJfQorCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJciA9IHN2bV9jcHVfaW5pdChjcHUpOwogCQlpZiAocikKQEAgLTU1OSw3ICs1NjcsNyBAQAogCWluaXRfc3lzX3NlZygmc2F2ZS0+bGR0ciwgU0VHX1RZUEVfTERUKTsKIAlpbml0X3N5c19zZWcoJnNhdmUtPnRyLCBTRUdfVFlQRV9CVVNZX1RTUzE2KTsKIAotCXNhdmUtPmVmZXIgPSBNU1JfRUZFUl9TVk1FX01BU0s7CisJc2F2ZS0+ZWZlciA9IEVGRVJfU1ZNRTsKIAlzYXZlLT5kcjYgPSAweGZmZmYwZmYwOwogCXNhdmUtPmRyNyA9IDB4NDAwOwogCXNhdmUtPnJmbGFncyA9IDI7CkBAIC01OTEsNiArNTk5LDkgQEAKIAkJc2F2ZS0+Y3I0ID0gMDsKIAl9CiAJZm9yY2VfbmV3X2FzaWQoJnN2bS0+dmNwdSk7CisKKwlzdm0tPm5lc3RlZF92bWNiID0gMDsKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgPSBIRl9HSUZfTUFTSzsKIH0KIAogc3RhdGljIGludCBzdm1fdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02MTUsNiArNjI2LDggQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgcGFnZSAqbXNycG1fcGFnZXM7CisJc3RydWN0IHBhZ2UgKmhzYXZlX3BhZ2U7CisJc3RydWN0IHBhZ2UgKm5lc3RlZF9tc3JwbV9wYWdlczsKIAlpbnQgZXJyOwogCiAJc3ZtID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUwpOwpAQCAtNjM3LDE0ICs2NTAsMjUgQEAKIAltc3JwbV9wYWdlcyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIE1TUlBNX0FMTE9DX09SREVSKTsKIAlpZiAoIW1zcnBtX3BhZ2VzKQogCQlnb3RvIHVuaW5pdDsKKworCW5lc3RlZF9tc3JwbV9wYWdlcyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIE1TUlBNX0FMTE9DX09SREVSKTsKKwlpZiAoIW5lc3RlZF9tc3JwbV9wYWdlcykKKwkJZ290byB1bmluaXQ7CisKIAlzdm0tPm1zcnBtID0gcGFnZV9hZGRyZXNzKG1zcnBtX3BhZ2VzKTsKIAlzdm1fdmNwdV9pbml0X21zcnBtKHN2bS0+bXNycG0pOwogCisJaHNhdmVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFoc2F2ZV9wYWdlKQorCQlnb3RvIHVuaW5pdDsKKwlzdm0tPmhzYXZlID0gcGFnZV9hZGRyZXNzKGhzYXZlX3BhZ2UpOworCisJc3ZtLT5uZXN0ZWRfbXNycG0gPSBwYWdlX2FkZHJlc3MobmVzdGVkX21zcnBtX3BhZ2VzKTsKKwogCXN2bS0+dm1jYiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAljbGVhcl9wYWdlKHN2bS0+dm1jYik7CiAJc3ZtLT52bWNiX3BhID0gcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVDsKIAlzdm0tPmFzaWRfZ2VuZXJhdGlvbiA9IDA7Ci0JbWVtc2V0KHN2bS0+ZGJfcmVncywgMCwgc2l6ZW9mKHN2bS0+ZGJfcmVncykpOwogCWluaXRfdm1jYihzdm0pOwogCiAJZnhfaW5pdCgmc3ZtLT52Y3B1KTsKQEAgLTY2OSw2ICs2OTMsOCBAQAogCiAJX19mcmVlX3BhZ2UocGZuX3RvX3BhZ2Uoc3ZtLT52bWNiX3BhID4+IFBBR0VfU0hJRlQpKTsKIAlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKHN2bS0+bXNycG0pLCBNU1JQTV9BTExPQ19PUkRFUik7CisJX19mcmVlX3BhZ2UodmlydF90b19wYWdlKHN2bS0+aHNhdmUpKTsKKwlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKHN2bS0+bmVzdGVkX21zcnBtKSwgTVNSUE1fQUxMT0NfT1JERVIpOwogCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKIAlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHN2bSk7CiB9CkBAIC03MTgsNiArNzQ0LDE2IEBACiAJdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLnJmbGFncyA9IHJmbGFnczsKIH0KIAorc3RhdGljIHZvaWQgc3ZtX3NldF92aW50cihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9IDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSOworfQorCitzdGF0aWMgdm9pZCBzdm1fY2xlYXJfdmludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKK30KKwogc3RhdGljIHN0cnVjdCB2bWNiX3NlZyAqc3ZtX3NlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCiB7CiAJc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzYXZlID0gJnRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZTsKQEAgLTc2MCwyMCArNzk2LDM3IEBACiAJdmFyLT5kYiA9IChzLT5hdHRyaWIgPj4gU1ZNX1NFTEVDVE9SX0RCX1NISUZUKSAmIDE7CiAJdmFyLT5nID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfR19TSElGVCkgJiAxOwogCi0JLyoKLQkgKiBTVk0gYWx3YXlzIHN0b3JlcyAwIGZvciB0aGUgJ0cnIGJpdCBpbiB0aGUgQ1Mgc2VsZWN0b3IgaW4KLQkgKiB0aGUgVk1DQiBvbiBhIFZNRVhJVC4gVGhpcyBodXJ0cyBjcm9zcy12ZW5kb3IgbWlncmF0aW9uOgotCSAqIEludGVsJ3MgVk1FTlRSWSBoYXMgYSBjaGVjayBvbiB0aGUgJ0cnIGJpdC4KLQkgKi8KLQlpZiAoc2VnID09IFZDUFVfU1JFR19DUykKKwlzd2l0Y2ggKHNlZykgeworCWNhc2UgVkNQVV9TUkVHX0NTOgorCQkvKgorCQkgKiBTVk0gYWx3YXlzIHN0b3JlcyAwIGZvciB0aGUgJ0cnIGJpdCBpbiB0aGUgQ1Mgc2VsZWN0b3IgaW4KKwkJICogdGhlIFZNQ0Igb24gYSBWTUVYSVQuIFRoaXMgaHVydHMgY3Jvc3MtdmVuZG9yIG1pZ3JhdGlvbjoKKwkJICogSW50ZWwncyBWTUVOVFJZIGhhcyBhIGNoZWNrIG9uIHRoZSAnRycgYml0LgorCQkgKi8KIAkJdmFyLT5nID0gcy0+bGltaXQgPiAweGZmZmZmOwotCi0JLyoKLQkgKiBXb3JrIGFyb3VuZCBhIGJ1ZyB3aGVyZSB0aGUgYnVzeSBmbGFnIGluIHRoZSB0ciBzZWxlY3RvcgotCSAqIGlzbid0IGV4cG9zZWQKLQkgKi8KLQlpZiAoc2VnID09IFZDUFVfU1JFR19UUikKKwkJYnJlYWs7CisJY2FzZSBWQ1BVX1NSRUdfVFI6CisJCS8qCisJCSAqIFdvcmsgYXJvdW5kIGEgYnVnIHdoZXJlIHRoZSBidXN5IGZsYWcgaW4gdGhlIHRyIHNlbGVjdG9yCisJCSAqIGlzbid0IGV4cG9zZWQKKwkJICovCiAJCXZhci0+dHlwZSB8PSAweDI7CisJCWJyZWFrOworCWNhc2UgVkNQVV9TUkVHX0RTOgorCWNhc2UgVkNQVV9TUkVHX0VTOgorCWNhc2UgVkNQVV9TUkVHX0ZTOgorCWNhc2UgVkNQVV9TUkVHX0dTOgorCQkvKgorCQkgKiBUaGUgYWNjZXNzZWQgYml0IG11c3QgYWx3YXlzIGJlIHNldCBpbiB0aGUgc2VnbWVudAorCQkgKiBkZXNjcmlwdG9yIGNhY2hlLCBhbHRob3VnaCBpdCBjYW4gYmUgY2xlYXJlZCBpbiB0aGUKKwkJICogZGVzY3JpcHRvciwgdGhlIGNhY2hlZCBiaXQgYWx3YXlzIHJlbWFpbnMgYXQgMS4gU2luY2UKKwkJICogSW50ZWwgaGFzIGEgY2hlY2sgb24gdGhpcywgc2V0IGl0IGhlcmUgdG8gc3VwcG9ydAorCQkgKiBjcm9zcy12ZW5kb3IgbWlncmF0aW9uLgorCQkgKi8KKwkJaWYgKCF2YXItPnVudXNhYmxlKQorCQkJdmFyLT50eXBlIHw9IDB4MTsKKwkJYnJlYWs7CisJfQogCiAJdmFyLT51bnVzYWJsZSA9ICF2YXItPnByZXNlbnQ7CiB9CkBAIC05MDUsOSArOTU4LDM3IEBACiAKIH0KIAotc3RhdGljIGludCBzdm1fZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitzdGF0aWMgaW50IHN2bV9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaW50IG9sZF9kZWJ1ZyA9IHZjcHUtPmd1ZXN0X2RlYnVnOworCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOworCisJdmNwdS0+Z3Vlc3RfZGVidWcgPSBkYmctPmNvbnRyb2w7CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJj0KKwkJfigoMSA8PCBEQl9WRUNUT1IpIHwgKDEgPDwgQlBfVkVDVE9SKSk7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgeworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgorCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0KKwkJCQkxIDw8IERCX1ZFQ1RPUjsKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9TV19CUCkKKwkJCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PQorCQkJCTEgPDwgQlBfVkVDVE9SOworCX0gZWxzZQorCQl2Y3B1LT5ndWVzdF9kZWJ1ZyA9IDA7CisKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQorCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gZGJnLT5hcmNoLmRlYnVncmVnWzddOworCWVsc2UKKwkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IHZjcHUtPmFyY2guZHI3OworCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgfD0gWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkY7CisJZWxzZSBpZiAob2xkX2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJj0gfihYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzdm1fZ2V0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC05NDksNyArMTAzMCwyOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKQogewotCXVuc2lnbmVkIGxvbmcgdmFsID0gdG9fc3ZtKHZjcHUpLT5kYl9yZWdzW2RyXTsKKwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXN3aXRjaCAoZHIpIHsKKwljYXNlIDAgLi4uIDM6CisJCXZhbCA9IHZjcHUtPmFyY2guZGJbZHJdOworCQlicmVhazsKKwljYXNlIDY6CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApCisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRyNjsKKwkJZWxzZQorCQkJdmFsID0gc3ZtLT52bWNiLT5zYXZlLmRyNjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQorCQkJdmFsID0gdmNwdS0+YXJjaC5kcjc7CisJCWVsc2UKKwkJCXZhbCA9IHN2bS0+dm1jYi0+c2F2ZS5kcjc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCA9IDA7CisJfQorCiAJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCXJldHVybiB2YWw7CiB9CkBAIC05NTksMzMgKzEwNjIsNDAgQEAKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAotCSpleGNlcHRpb24gPSAwOworCUtWTVRSQUNFXzJEKERSX1dSSVRFLCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbHVlLCBoYW5kbGVyKTsKIAotCWlmIChzdm0tPnZtY2ItPnNhdmUuZHI3ICYgRFI3X0dEX01BU0spIHsKLQkJc3ZtLT52bWNiLT5zYXZlLmRyNyAmPSB+RFI3X0dEX01BU0s7Ci0JCXN2bS0+dm1jYi0+c2F2ZS5kcjYgfD0gRFI2X0JEX01BU0s7Ci0JCSpleGNlcHRpb24gPSBEQl9WRUNUT1I7Ci0JCXJldHVybjsKLQl9CisJKmV4Y2VwdGlvbiA9IDA7CiAKIAlzd2l0Y2ggKGRyKSB7CiAJY2FzZSAwIC4uLiAzOgotCQlzdm0tPmRiX3JlZ3NbZHJdID0gdmFsdWU7CisJCXZjcHUtPmFyY2guZGJbZHJdID0gdmFsdWU7CisJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCisJCQl2Y3B1LT5hcmNoLmVmZl9kYltkcl0gPSB2YWx1ZTsKIAkJcmV0dXJuOwogCWNhc2UgNCAuLi4gNToKLQkJaWYgKHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9ERSkgeworCQlpZiAodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X0RFKQogCQkJKmV4Y2VwdGlvbiA9IFVEX1ZFQ1RPUjsKLQkJCXJldHVybjsKLQkJfQotCWNhc2UgNzogewotCQlpZiAodmFsdWUgJiB+KCgxVUxMIDw8IDMyKSAtIDEpKSB7CisJCXJldHVybjsKKwljYXNlIDY6CisJCWlmICh2YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgewogCQkJKmV4Y2VwdGlvbiA9IEdQX1ZFQ1RPUjsKIAkJCXJldHVybjsKIAkJfQotCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gdmFsdWU7CisJCXZjcHUtPmFyY2guZHI2ID0gKHZhbHVlICYgRFI2X1ZPTEFUSUxFKSB8IERSNl9GSVhFRF8xOwogCQlyZXR1cm47Ci0JfQorCWNhc2UgNzoKKwkJaWYgKHZhbHVlICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7CisJCQkqZXhjZXB0aW9uID0gR1BfVkVDVE9SOworCQkJcmV0dXJuOworCQl9CisJCXZjcHUtPmFyY2guZHI3ID0gKHZhbHVlICYgRFI3X1ZPTEFUSUxFKSB8IERSN19GSVhFRF8xOworCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSB7CisJCQlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gdmNwdS0+YXJjaC5kcjc7CisJCQl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0gKHZhbHVlICYgRFI3X0JQX0VOX01BU0spOworCQl9CisJCXJldHVybjsKIAlkZWZhdWx0OgorCQkvKiBGSVhNRTogUG9zc2libGUgY2FzZT8gKi8KIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmV4cGVjdGVkIGRyICV1XG4iLAogCQkgICAgICAgX19mdW5jX18sIGRyKTsKIAkJKmV4Y2VwdGlvbiA9IFVEX1ZFQ1RPUjsKQEAgLTEwMzEsNiArMTE0MSwyNyBAQAogCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcywgZXJyb3JfY29kZSk7CiB9CiAKK3N0YXRpYyBpbnQgZGJfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAoIShzdm0tPnZjcHUuZ3Vlc3RfZGVidWcgJgorCSAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkgeworCQlrdm1fcXVldWVfZXhjZXB0aW9uKCZzdm0tPnZjcHUsIERCX1ZFQ1RPUik7CisJCXJldHVybiAxOworCX0KKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPSBzdm0tPnZtY2ItPnNhdmUuY3MuYmFzZSArIHN2bS0+dm1jYi0+c2F2ZS5yaXA7CisJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBEQl9WRUNUT1I7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnBfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPSBzdm0tPnZtY2ItPnNhdmUuY3MuYmFzZSArIHN2bS0+dm1jYi0+c2F2ZS5yaXA7CisJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBCUF9WRUNUT1I7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdWRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlpbnQgZXI7CkBAIC0xMDgwLDcgKzEyMTEsNyBAQAogc3RhdGljIGludCBpb19pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXUzMiBpb19pbmZvID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xOyAvKiBhZGRyZXNzIHNpemUgYnVnPyAqLwotCWludCBzaXplLCBkb3duLCBpbiwgc3RyaW5nLCByZXA7CisJaW50IHNpemUsIGluLCBzdHJpbmc7CiAJdW5zaWduZWQgcG9ydDsKIAogCSsrc3ZtLT52Y3B1LnN0YXQuaW9fZXhpdHM7CkBAIC0xMDk5LDggKzEyMzAsNiBAQAogCWluID0gKGlvX2luZm8gJiBTVk1fSU9JT19UWVBFX01BU0spICE9IDA7CiAJcG9ydCA9IGlvX2luZm8gPj4gMTY7CiAJc2l6ZSA9IChpb19pbmZvICYgU1ZNX0lPSU9fU0laRV9NQVNLKSA+PiBTVk1fSU9JT19TSVpFX1NISUZUOwotCXJlcCA9IChpb19pbmZvICYgU1ZNX0lPSU9fUkVQX01BU0spICE9IDA7Ci0JZG93biA9IChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19ERikgIT0gMDsKIAogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAJcmV0dXJuIGt2bV9lbXVsYXRlX3Bpbygmc3ZtLT52Y3B1LCBrdm1fcnVuLCBpbiwgc2l6ZSwgcG9ydCk7CkBAIC0xMTM5LDYgKzEyNjgsNTY3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlpZiAoIShzdm0tPnZjcHUuYXJjaC5zaGFkb3dfZWZlciAmIEVGRVJfU1ZNRSkKKwkgICAgfHwgIWlzX3BhZ2luZygmc3ZtLT52Y3B1KSkgeworCQlrdm1fcXVldWVfZXhjZXB0aW9uKCZzdm0tPnZjcHUsIFVEX1ZFQ1RPUik7CisJCXJldHVybiAxOworCX0KKworCWlmIChzdm0tPnZtY2ItPnNhdmUuY3BsKSB7CisJCWt2bV9pbmplY3RfZ3AoJnN2bS0+dmNwdSwgMCk7CisJCXJldHVybiAxOworCX0KKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBuciwKKwkJCQkgICAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKK3sKKwlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX0VYQ1BfQkFTRSArIG5yOworCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlX2hpID0gMDsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xID0gZXJyb3JfY29kZTsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yID0gc3ZtLT52Y3B1LmFyY2guY3IyOworCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtLCBmYWxzZSkpIHsKKwkJCW5zdm1fcHJpbnRrKCJWTWV4aXQgLT4gRVhDUCAweCV4XG4iLCBucik7CisKKwkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXN0ZWRfc3ZtX2ludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJaWYgKGlzX25lc3RlZChzdm0pKSB7CisJCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCEoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfSElGX01BU0spKQorCQkJcmV0dXJuIDA7CisKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX0lOVFI7CisKKwkJaWYgKG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSwgZmFsc2UpKSB7CisJCQluc3ZtX3ByaW50aygiVk1leGl0IC0+IElOVFJcbiIpOworCQkJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbmVzdGVkX3N2bV9nZXRfcGFnZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGdwYSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlwYWdlID0gZ2ZuX3RvX3BhZ2Uoc3ZtLT52Y3B1Lmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoaXNfZXJyb3JfcGFnZShwYWdlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogY291bGQgbm90IGZpbmQgcGFnZSBhdCAweCVsbHhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZ3BhKTsKKwkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKKwkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBwYWdlOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZG8oc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkgdTY0IGFyZzFfZ3BhLCB1NjQgYXJnMl9ncGEsIHZvaWQgKm9wYXF1ZSwKKwkJCSBpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKKwkJCQkJdm9pZCAqYXJnMSwKKwkJCQkJdm9pZCAqYXJnMiwKKwkJCQkJdm9pZCAqb3BhcXVlKSkKK3sKKwlzdHJ1Y3QgcGFnZSAqYXJnMV9wYWdlOworCXN0cnVjdCBwYWdlICphcmcyX3BhZ2UgPSBOVUxMOworCXZvaWQgKmFyZzE7CisJdm9pZCAqYXJnMiA9IE5VTEw7CisJaW50IHJldHZhbDsKKworCWFyZzFfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcxX2dwYSk7CisJaWYoYXJnMV9wYWdlID09IE5VTEwpCisJCXJldHVybiAxOworCisJaWYgKGFyZzJfZ3BhKSB7CisJCWFyZzJfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcyX2dwYSk7CisJCWlmKGFyZzJfcGFnZSA9PSBOVUxMKSB7CisJCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKGFyZzFfcGFnZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWFyZzEgPSBrbWFwX2F0b21pYyhhcmcxX3BhZ2UsIEtNX1VTRVIwKTsKKwlpZiAoYXJnMl9ncGEpCisJCWFyZzIgPSBrbWFwX2F0b21pYyhhcmcyX3BhZ2UsIEtNX1VTRVIxKTsKKworCXJldHZhbCA9IGhhbmRsZXIoc3ZtLCBhcmcxLCBhcmcyLCBvcGFxdWUpOworCisJa3VubWFwX2F0b21pYyhhcmcxLCBLTV9VU0VSMCk7CisJaWYgKGFyZzJfZ3BhKQorCQlrdW5tYXBfYXRvbWljKGFyZzIsIEtNX1VTRVIxKTsKKworCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMV9wYWdlKTsKKwlpZiAoYXJnMl9ncGEpCisJCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMl9wYWdlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfcmVhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKKwkJCQkJdm9pZCAqYXJnMSwKKwkJCQkJdm9pZCAqYXJnMiwKKwkJCQkJdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJYm9vbCBrdm1fb3ZlcnJpZGVzID0gKihib29sICopb3BhcXVlOworCXUzMiBleGl0X2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlOworCisJaWYgKGt2bV9vdmVycmlkZXMpIHsKKwkJc3dpdGNoIChleGl0X2NvZGUpIHsKKwkJY2FzZSBTVk1fRVhJVF9JTlRSOgorCQljYXNlIFNWTV9FWElUX05NSToKKwkJCXJldHVybiAwOworCQkvKiBGb3Igbm93IHdlIGFyZSBhbHdheXMgaGFuZGxpbmcgTlBGcyB3aGVuIHVzaW5nIHRoZW0gKi8KKwkJY2FzZSBTVk1fRVhJVF9OUEY6CisJCQlpZiAobnB0X2VuYWJsZWQpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJLyogV2hlbiB3ZSdyZSBzaGFkb3dpbmcsIHRyYXAgUEZzICovCisJCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SOgorCQkJaWYgKCFucHRfZW5hYmxlZCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGV4aXRfY29kZSkgeworCWNhc2UgU1ZNX0VYSVRfUkVBRF9DUjAgLi4uIFNWTV9FWElUX1JFQURfQ1I4OiB7CisJCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9DUjApOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgJiBjcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX1dSSVRFX0NSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfQ1I4OiB7CisJCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfQ1IwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmIGNyX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfUkVBRF9EUjAgLi4uIFNWTV9FWElUX1JFQURfRFI3OiB7CisJCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9EUjApOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgJiBkcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX1dSSVRFX0RSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfRFI3OiB7CisJCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfRFIwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSAmIGRyX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFIC4uLiBTVk1fRVhJVF9FWENQX0JBU0UgKyAweDFmOiB7CisJCXUzMiBleGNwX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9FWENQX0JBU0UpOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJiBleGNwX2JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJdTY0IGV4aXRfYml0cyA9IDFVTEwgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX0lOVFIpOworCQluc3ZtX3ByaW50aygiZXhpdCBjb2RlOiAweCV4XG4iLCBleGl0X2NvZGUpOworCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICYgZXhpdF9iaXRzKQorCQkJcmV0dXJuIDE7CisJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKKwkJCQkgICAgICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiwKKwkJCQkgICAgICAgdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJdTggKm1zcnBtID0gKHU4ICopYXJnMjsKKyAgICAgICAgdTMyIHQwLCB0MTsKKwl1MzIgbXNyID0gc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKKwl1MzIgcGFyYW0gPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgJiAxOworCisJaWYgKCEobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICYgKDFVTEwgPDwgSU5URVJDRVBUX01TUl9QUk9UKSkpCisJCXJldHVybiAwOworCisJc3dpdGNoKG1zcikgeworCWNhc2UgMCAuLi4gMHgxZmZmOgorCQl0MCA9IChtc3IgKiAyKSAlIDg7CisJCXQxID0gbXNyIC8gODsKKwkJYnJlYWs7CisJY2FzZSAweGMwMDAwMDAwIC4uLiAweGMwMDAxZmZmOgorCQl0MCA9ICg4MTkyICsgbXNyIC0gMHhjMDAwMDAwMCkgKiAyOworCQl0MSA9ICh0MCAvIDgpOworCQl0MCAlPSA4OworCQlicmVhazsKKwljYXNlIDB4YzAwMTAwMDAgLi4uIDB4YzAwMTFmZmY6CisJCXQwID0gKDE2Mzg0ICsgbXNyIC0gMHhjMDAxMDAwMCkgKiAyOworCQl0MSA9ICh0MCAvIDgpOworCQl0MCAlPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCWlmIChtc3JwbVt0MV0gJiAoKDEgPDwgcGFyYW0pIDw8IHQwKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBrdm1fb3ZlcnJpZGUpCit7CisJYm9vbCBrID0ga3ZtX292ZXJyaWRlOworCisJc3dpdGNoIChzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlKSB7CisJY2FzZSBTVk1fRVhJVF9NU1I6CisJCXJldHVybiBuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYiwKKwkJCQkgICAgIHN2bS0+bmVzdGVkX3ZtY2JfbXNycG0sIE5VTEwsCisJCQkJICAgICBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3IpOworCWRlZmF1bHQ6IGJyZWFrOworCX0KKworCXJldHVybiBuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYiwgMCwgJmssCisJCQkgICAgIG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX3JlYWwpOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3JlYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKmFyZzEsCisJCQkJICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiID0gKHN0cnVjdCB2bWNiICopYXJnMTsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPmhzYXZlOworCXU2NCBuZXN0ZWRfc2F2ZVtdID0geyBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjAsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjQsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+c2F2ZS5lZmVyLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZCwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0LAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYSwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmlvcG1fYmFzZV9wYSwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLnRzY19vZmZzZXQgfTsKKworCS8qIEdpdmUgdGhlIGN1cnJlbnQgdm1jYiB0byB0aGUgZ3Vlc3QgKi8KKwltZW1jcHkobmVzdGVkX3ZtY2IsIHN2bS0+dm1jYiwgc2l6ZW9mKHN0cnVjdCB2bWNiKSk7CisJbmVzdGVkX3ZtY2ItPnNhdmUuY3IwID0gbmVzdGVkX3NhdmVbMF07CisJaWYgKCFucHRfZW5hYmxlZCkKKwkJbmVzdGVkX3ZtY2ItPnNhdmUuY3IzID0gbmVzdGVkX3NhdmVbMV07CisJbmVzdGVkX3ZtY2ItPnNhdmUuY3I0ID0gbmVzdGVkX3NhdmVbMl07CisJbmVzdGVkX3ZtY2ItPnNhdmUuZWZlciA9IG5lc3RlZF9zYXZlWzNdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkID0gbmVzdGVkX3NhdmVbNF07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlID0gbmVzdGVkX3NhdmVbNV07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgPSBuZXN0ZWRfc2F2ZVs2XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGUgPSBuZXN0ZWRfc2F2ZVs3XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IG5lc3RlZF9zYXZlWzhdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCA9IG5lc3RlZF9zYXZlWzldOworCW5lc3RlZF92bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEgPSBuZXN0ZWRfc2F2ZVsxMF07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW9wbV9iYXNlX3BhID0gbmVzdGVkX3NhdmVbMTFdOworCW5lc3RlZF92bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSBuZXN0ZWRfc2F2ZVsxMl07CisKKwkvKiBXZSBhbHdheXMgc2V0IFZfSU5UUl9NQVNLSU5HIGFuZCByZW1lbWJlciB0aGUgb2xkIHZhbHVlIGluIGhmbGFncyAqLworCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICY9IH5WX0lOVFJfTUFTS0lOR19NQVNLOworCisJaWYgKChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICYgVl9JUlFfTUFTSykgJiYKKwkgICAgKG5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IpKSB7CisJCW5zdm1fcHJpbnRrKCJXQVJOSU5HOiBJUlEgMHgleCBzdGlsbCBlbmFibGVkIG9uICNWTUVYSVRcbiIsCisJCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X3ZlY3Rvcik7CisJfQorCisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgY29udHJvbCBlbnRyaWVzICovCisJc3ZtLT52bWNiLT5jb250cm9sID0gaHNhdmUtPmNvbnRyb2w7CisKKwkvKiBLaWxsIGFueSBwZW5kaW5nIGV4Y2VwdGlvbnMgKi8KKwlpZiAoc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPT0gdHJ1ZSkKKwkJbnN2bV9wcmludGsoIldBUk5JTkc6IFBlbmRpbmcgRXhjZXB0aW9uXG4iKTsKKwlzdm0tPnZjcHUuYXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOworCisJLyogUmVzdG9yZSBzZWxlY3RlZCBzYXZlIGVudHJpZXMgKi8KKwlzdm0tPnZtY2ItPnNhdmUuZXMgPSBoc2F2ZS0+c2F2ZS5lczsKKwlzdm0tPnZtY2ItPnNhdmUuY3MgPSBoc2F2ZS0+c2F2ZS5jczsKKwlzdm0tPnZtY2ItPnNhdmUuc3MgPSBoc2F2ZS0+c2F2ZS5zczsKKwlzdm0tPnZtY2ItPnNhdmUuZHMgPSBoc2F2ZS0+c2F2ZS5kczsKKwlzdm0tPnZtY2ItPnNhdmUuZ2R0ciA9IGhzYXZlLT5zYXZlLmdkdHI7CisJc3ZtLT52bWNiLT5zYXZlLmlkdHIgPSBoc2F2ZS0+c2F2ZS5pZHRyOworCXN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgPSBoc2F2ZS0+c2F2ZS5yZmxhZ3M7CisJc3ZtX3NldF9lZmVyKCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmVmZXIpOworCXN2bV9zZXRfY3IwKCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmNyMCB8IFg4Nl9DUjBfUEUpOworCXN2bV9zZXRfY3I0KCZzdm0tPnZjcHUsIGhzYXZlLT5zYXZlLmNyNCk7CisJaWYgKG5wdF9lbmFibGVkKSB7CisJCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSBoc2F2ZS0+c2F2ZS5jcjM7CisJCXN2bS0+dmNwdS5hcmNoLmNyMyA9IGhzYXZlLT5zYXZlLmNyMzsKKwl9IGVsc2UgeworCQlrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjMpOworCX0KKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JBWCwgaHNhdmUtPnNhdmUucmF4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JTUCwgaHNhdmUtPnNhdmUucnNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JJUCwgaHNhdmUtPnNhdmUucmlwKTsKKwlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gMDsKKwlzdm0tPnZtY2ItPnNhdmUuY3BsID0gMDsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbyA9IDA7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX0dJRl9NQVNLOworCS8qIEV4aXQgbmVzdGVkIFNWTSBtb2RlICovCisJc3ZtLT5uZXN0ZWRfdm1jYiA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwluc3ZtX3ByaW50aygiVk1leGl0XG4iKTsKKwlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2IsIDAsCisJCQkgIE5VTEwsIG5lc3RlZF9zdm1fdm1leGl0X3JlYWwpKQorCQlyZXR1cm4gMTsKKworCWt2bV9tbXVfcmVzZXRfY29udGV4dCgmc3ZtLT52Y3B1KTsKKwlrdm1fbW11X2xvYWQoJnN2bS0+dmNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuX21zcnBtKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAorCQkJCSAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCWludCBpOworCXUzMiAqbmVzdGVkX21zcnBtID0gKHUzMiopYXJnMTsKKwlmb3IgKGk9MDsgaTwgUEFHRV9TSVpFICogKDEgPDwgTVNSUE1fQUxMT0NfT1JERVIpIC8gNDsgaSsrKQorCQlzdm0tPm5lc3RlZF9tc3JwbVtpXSA9IHN2bS0+bXNycG1baV0gfCBuZXN0ZWRfbXNycG1baV07CisJc3ZtLT52bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEgPSBfX3BhKHN2bS0+bmVzdGVkX21zcnBtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKmFyZzEsCisJCQkgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJc3RydWN0IHZtY2IgKmhzYXZlID0gc3ZtLT5oc2F2ZTsKKworCS8qIG5lc3RlZF92bWNiIGlzIG91ciBpbmRpY2F0b3IgaWYgbmVzdGVkIFNWTSBpcyBhY3RpdmF0ZWQgKi8KKwlzdm0tPm5lc3RlZF92bWNiID0gc3ZtLT52bWNiLT5zYXZlLnJheDsKKworCS8qIENsZWFyIGludGVybmFsIHN0YXR1cyAqLworCXN2bS0+dmNwdS5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZmFsc2U7CisKKwkvKiBTYXZlIHRoZSBvbGQgdm1jYiwgc28gd2UgZG9uJ3QgbmVlZCB0byBwaWNrIHdoYXQgd2Ugc2F2ZSwgYnV0CisJICAgY2FuIHJlc3RvcmUgZXZlcnl0aGluZyB3aGVuIGEgVk1FWElUIG9jY3VycyAqLworCW1lbWNweShoc2F2ZSwgc3ZtLT52bWNiLCBzaXplb2Yoc3RydWN0IHZtY2IpKTsKKwkvKiBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBDUjMgaW4gdGhlIFNQVCBjYXNlICovCisJaWYgKCFucHRfZW5hYmxlZCkKKwkJaHNhdmUtPnNhdmUuY3IzID0gc3ZtLT52Y3B1LmFyY2guY3IzOworCWhzYXZlLT5zYXZlLmNyNCA9IHN2bS0+dmNwdS5hcmNoLmNyNDsKKwloc2F2ZS0+c2F2ZS5yaXAgPSBzdm0tPm5leHRfcmlwOworCisJaWYgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQorCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfSElGX01BU0s7CisJZWxzZQorCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX0hJRl9NQVNLOworCisJLyogTG9hZCB0aGUgbmVzdGVkIGd1ZXN0IHN0YXRlICovCisJc3ZtLT52bWNiLT5zYXZlLmVzID0gbmVzdGVkX3ZtY2ItPnNhdmUuZXM7CisJc3ZtLT52bWNiLT5zYXZlLmNzID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3M7CisJc3ZtLT52bWNiLT5zYXZlLnNzID0gbmVzdGVkX3ZtY2ItPnNhdmUuc3M7CisJc3ZtLT52bWNiLT5zYXZlLmRzID0gbmVzdGVkX3ZtY2ItPnNhdmUuZHM7CisJc3ZtLT52bWNiLT5zYXZlLmdkdHIgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5nZHRyOworCXN2bS0+dm1jYi0+c2F2ZS5pZHRyID0gbmVzdGVkX3ZtY2ItPnNhdmUuaWR0cjsKKwlzdm0tPnZtY2ItPnNhdmUucmZsYWdzID0gbmVzdGVkX3ZtY2ItPnNhdmUucmZsYWdzOworCXN2bV9zZXRfZWZlcigmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5lZmVyKTsKKwlzdm1fc2V0X2NyMCgmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjApOworCXN2bV9zZXRfY3I0KCZzdm0tPnZjcHUsIG5lc3RlZF92bWNiLT5zYXZlLmNyNCk7CisJaWYgKG5wdF9lbmFibGVkKSB7CisJCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjM7CisJCXN2bS0+dmNwdS5hcmNoLmNyMyA9IG5lc3RlZF92bWNiLT5zYXZlLmNyMzsKKwl9IGVsc2UgeworCQlrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMpOworCQlrdm1fbW11X3Jlc2V0X2NvbnRleHQoJnN2bS0+dmNwdSk7CisJfQorCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjI7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SQVgsIG5lc3RlZF92bWNiLT5zYXZlLnJheCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SU1AsIG5lc3RlZF92bWNiLT5zYXZlLnJzcCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SSVAsIG5lc3RlZF92bWNiLT5zYXZlLnJpcCk7CisJLyogSW4gY2FzZSB3ZSBkb24ndCBldmVuIHJlYWNoIHZjcHVfcnVuLCB0aGUgZmllbGRzIGFyZSBub3QgdXBkYXRlZCAqLworCXN2bS0+dm1jYi0+c2F2ZS5yYXggPSBuZXN0ZWRfdm1jYi0+c2F2ZS5yYXg7CisJc3ZtLT52bWNiLT5zYXZlLnJzcCA9IG5lc3RlZF92bWNiLT5zYXZlLnJzcDsKKwlzdm0tPnZtY2ItPnNhdmUucmlwID0gbmVzdGVkX3ZtY2ItPnNhdmUucmlwOworCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5kcjc7CisJc3ZtLT52bWNiLT5zYXZlLmRyNiA9IG5lc3RlZF92bWNiLT5zYXZlLmRyNjsKKwlzdm0tPnZtY2ItPnNhdmUuY3BsID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3BsOworCisJLyogV2UgZG9uJ3Qgd2FudCBhIG5lc3RlZCBndWVzdCB0byBiZSBtb3JlIHBvd2VyZnVsIHRoYW4gdGhlIGd1ZXN0LAorCSAgIHNvIGFsbCBpbnRlcmNlcHRzIGFyZSBPUmVkICovCisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZCB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfcmVhZDsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnM7CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdDsKKworCXN2bS0+bmVzdGVkX3ZtY2JfbXNycG0gPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhOworCisJZm9yY2VfbmV3X2FzaWQoJnN2bS0+dmNwdSk7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8gPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvX2VyciA9IG5lc3RlZF92bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm9fZXJyOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCB8IFZfSU5UUl9NQVNLSU5HX01BU0s7CisJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgJiBWX0lSUV9NQVNLKSB7CisJCW5zdm1fcHJpbnRrKCJuU1ZNIEluamVjdGluZyBJbnRlcnJ1cHQ6IDB4JXhcbiIsCisJCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCk7CisJfQorCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICYgVl9JTlRSX01BU0tJTkdfTUFTSykKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX1ZJTlRSX01BU0s7CisJZWxzZQorCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX1ZJTlRSX01BU0s7CisKKwluc3ZtX3ByaW50aygiblNWTSBleGl0X2ludF9pbmZvOiAweCV4IHwgaW50X3N0YXRlOiAweCV4XG4iLAorCQkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbywKKwkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9zdGF0ZSk7CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X3ZlY3RvciA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3I7CisJc3ZtLT52bWNiLT5jb250cm9sLmludF9zdGF0ZSA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludF9zdGF0ZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0OworCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmogJiBTVk1fRVZUSU5KX1ZBTElEKQorCQluc3ZtX3ByaW50aygiSW5qZWN0aW5nIEV2ZW50OiAweCV4XG4iLAorCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2luaik7CisJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IG5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2luajsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VyciA9IG5lc3RlZF92bWNiLT5jb250cm9sLmV2ZW50X2lual9lcnI7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfR0lGX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3RydWN0IHZtY2IgKmZyb21fdm1jYiwgc3RydWN0IHZtY2IgKnRvX3ZtY2IpCit7CisJdG9fdm1jYi0+c2F2ZS5mcyA9IGZyb21fdm1jYi0+c2F2ZS5mczsKKwl0b192bWNiLT5zYXZlLmdzID0gZnJvbV92bWNiLT5zYXZlLmdzOworCXRvX3ZtY2ItPnNhdmUudHIgPSBmcm9tX3ZtY2ItPnNhdmUudHI7CisJdG9fdm1jYi0+c2F2ZS5sZHRyID0gZnJvbV92bWNiLT5zYXZlLmxkdHI7CisJdG9fdm1jYi0+c2F2ZS5rZXJuZWxfZ3NfYmFzZSA9IGZyb21fdm1jYi0+c2F2ZS5rZXJuZWxfZ3NfYmFzZTsKKwl0b192bWNiLT5zYXZlLnN0YXIgPSBmcm9tX3ZtY2ItPnNhdmUuc3RhcjsKKwl0b192bWNiLT5zYXZlLmxzdGFyID0gZnJvbV92bWNiLT5zYXZlLmxzdGFyOworCXRvX3ZtY2ItPnNhdmUuY3N0YXIgPSBmcm9tX3ZtY2ItPnNhdmUuY3N0YXI7CisJdG9fdm1jYi0+c2F2ZS5zZm1hc2sgPSBmcm9tX3ZtY2ItPnNhdmUuc2ZtYXNrOworCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3MgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3M7CisJdG9fdm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3AgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwOworCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2VpcDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1sb2FkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKKwkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXJldHVybiBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoKHN0cnVjdCB2bWNiICopbmVzdGVkX3ZtY2IsIHN2bS0+dm1jYik7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXNhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKm5lc3RlZF92bWNiLAorCQkJICAgICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCit7CisJcmV0dXJuIG5lc3RlZF9zdm1fdm1sb2Fkc2F2ZShzdm0tPnZtY2IsIChzdHJ1Y3Qgdm1jYiAqKW5lc3RlZF92bWNiKTsKK30KKworc3RhdGljIGludCB2bWxvYWRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwluZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgMCwgTlVMTCwgbmVzdGVkX3N2bV92bWxvYWQpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsIE5VTEwsIG5lc3RlZF9zdm1fdm1zYXZlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZtcnVuX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJbnN2bV9wcmludGsoIlZNcnVuXG4iKTsKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsCisJCQkgIE5VTEwsIG5lc3RlZF9zdm1fdm1ydW4pKQorCQlyZXR1cm4gMTsKKworCWlmIChuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYl9tc3JwbSwgMCwKKwkJICAgICAgTlVMTCwgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3RnaV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCisJCXJldHVybiAxOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9HSUZfTUFTSzsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNsZ2lfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJj0gfkhGX0dJRl9NQVNLOworCisJLyogQWZ0ZXIgYSBDTEdJIG5vIGludGVycnVwdHMgc2hvdWxkIGNvbWUgKi8KKwlzdm1fY2xlYXJfdmludHIoc3ZtKTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JUlFfTUFTSzsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewpAQCAtMTI1MCw2ICsxOTQwLDE1IEBACiAJY2FzZSBNU1JfSUEzMl9MQVNUSU5UVE9JUDoKIAkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUubGFzdF9leGNwX3RvOwogCQlicmVhazsKKwljYXNlIE1TUl9WTV9IU0FWRV9QQToKKwkJKmRhdGEgPSBzdm0tPmhzYXZlX21zcjsKKwkJYnJlYWs7CisJY2FzZSBNU1JfVk1fQ1I6CisJCSpkYXRhID0gMDsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CisJCSpkYXRhID0gMHgwMTAwMDA2NTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGt2bV9nZXRfbXNyX2NvbW1vbih2Y3B1LCBlY3gsIGRhdGEpOwogCX0KQEAgLTEzNDQsNiArMjA0Myw5IEBACiAJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBwZXJmY3RyIHdybXNyOiAweCV4IGRhdGEgMHglbGx4XG4iLCBlY3gsIGRhdGEpOwogCiAJCWJyZWFrOworCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgorCQlzdm0tPmhzYXZlX21zciA9IGRhdGE7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBrdm1fc2V0X21zcl9jb21tb24odmNwdSwgZWN4LCBkYXRhKTsKIAl9CkBAIC0xMzgwLDcgKzIwODIsNyBAQAogewogCUtWTVRSQUNFXzBEKFBFTkRfSU5UUiwgJnN2bS0+dmNwdSwgaGFuZGxlcik7CiAKLQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBJTlRFUkNFUFRfVklOVFIpOworCXN2bV9jbGVhcl92aW50cihzdm0pOwogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsICY9IH5WX0lSUV9NQVNLOwogCS8qCiAJICogSWYgdGhlIHVzZXIgc3BhY2Ugd2FpdHMgdG8gaW5qZWN0IGludGVycnVwdHMsIGV4aXQgYXMgc29vbiBhcwpAQCAtMTQxNyw2ICsyMTE5LDggQEAKIAlbU1ZNX0VYSVRfV1JJVEVfRFIzXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dSSVRFX0RSNV0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9EUjddCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgREJfVkVDVE9SXQk9IGRiX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgQlBfVkVDVE9SXQk9IGJwX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SXQk9IHVkX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SXSAJPSBwZl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIE5NX1ZFQ1RPUl0gCT0gbm1faW50ZXJjZXB0aW9uLApAQCAtMTQzNiwxMiArMjE0MCwxMiBAQAogCVtTVk1fRVhJVF9NU1JdCQkJCT0gbXNyX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfVEFTS19TV0lUQ0hdCQkJPSB0YXNrX3N3aXRjaF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1NIVVRET1dOXQkJCT0gc2h1dGRvd25faW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9WTVJVTl0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WTVJVTl0JCQk9IHZtcnVuX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfVk1NQ0FMTF0JCQk9IHZtbWNhbGxfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9WTUxPQURdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfVk1TQVZFXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1NUR0ldCQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX0NMR0ldCQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1ZNTE9BRF0JCQk9IHZtbG9hZF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1ZNU0FWRV0JCQk9IHZtc2F2ZV9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1NUR0ldCQkJCT0gc3RnaV9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0NMR0ldCQkJCT0gY2xnaV9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1NLSU5JVF0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XQklOVkRdICAgICAgICAgICAgICAgICAgICAgICA9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9NT05JVE9SXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCkBAIC0xNDU3LDYgKzIxNjEsMTcgQEAKIAlLVk1UUkFDRV8zRChWTUVYSVQsIHZjcHUsIGV4aXRfY29kZSwgKHUzMilzdm0tPnZtY2ItPnNhdmUucmlwLAogCQkgICAgKHUzMikoKHU2NClzdm0tPnZtY2ItPnNhdmUucmlwID4+IDMyKSwgZW50cnlleGl0KTsKIAorCWlmIChpc19uZXN0ZWQoc3ZtKSkgeworCQluc3ZtX3ByaW50aygibmVzdGVkIGhhbmRsZV9leGl0OiAweCV4IHwgMHglbHggfCAweCVseCB8IDB4JWx4XG4iLAorCQkJICAgIGV4aXRfY29kZSwgc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xLAorCQkJICAgIHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiwgc3ZtLT52bWNiLT5zYXZlLnJpcCk7CisJCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIHRydWUpKSB7CisJCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOworCQkJbnN2bV9wcmludGsoIi0+ICNWTUVYSVRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKIAlpZiAobnB0X2VuYWJsZWQpIHsKIAkJaW50IG1tdV9yZWxvYWQgPSAwOwogCQlpZiAoKHZjcHUtPmFyY2guY3IwIF4gc3ZtLT52bWNiLT5zYXZlLmNyMCkgJiBYODZfQ1IwX1BHKSB7CkBAIC0xNTQ0LDYgKzIyNTksOCBAQAogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCisJbmVzdGVkX3N2bV9pbnRyKHN2bSk7CisKIAlzdm1faW5qZWN0X2lycShzdm0sIGlycSk7CiB9CiAKQEAgLTE1ODksMTEgKzIzMDYsMTcgQEAKIAlpZiAoIWt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKIAkJZ290byBvdXQ7CiAKKwlpZiAobmVzdGVkX3N2bV9pbnRyKHN2bSkpCisJCWdvdG8gb3V0OworCisJaWYgKCEoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spKQorCQlnb3RvIG91dDsKKwogCWlmICghKHZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikgfHwKIAkgICAgKHZtY2ItPmNvbnRyb2wuaW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykgfHwKIAkgICAgKHZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qICYgU1ZNX0VWVElOSl9WQUxJRCkpIHsKIAkJLyogdW5hYmxlIHRvIGRlbGl2ZXIgaXJxLCBzZXQgcGVuZGluZyBpcnEgKi8KLQkJdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgfD0gKDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKKwkJc3ZtX3NldF92aW50cihzdm0pOwogCQlzdm1faW5qZWN0X2lycShzdm0sIDB4MCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE2MTUsNyArMjMzOCw4IEBACiAJfQogCiAJc3ZtLT52Y3B1LmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuID0KLQkJIShjb250cm9sLT5pbnRfc3RhdGUgJiBTVk1fSU5URVJSVVBUX1NIQURPV19NQVNLKTsKKwkJIShjb250cm9sLT5pbnRfc3RhdGUgJiBTVk1fSU5URVJSVVBUX1NIQURPV19NQVNLKSAmJgorCQkgKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0dJRl9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgc3ZtX2RvX2luamVjdF92ZWN0b3Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC0xNjM3LDkgKzIzNjEsMTMgQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmc3ZtLT52bWNiLT5jb250cm9sOwogCisJaWYgKG5lc3RlZF9zdm1faW50cihzdm0pKQorCQlyZXR1cm47CisKIAlzdm0tPnZjcHUuYXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPQogCQkoIShjb250cm9sLT5pbnRfc3RhdGUgJiBTVk1fSU5URVJSVVBUX1NIQURPV19NQVNLKSAmJgotCQkgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSk7CisJCSAoc3ZtLT52bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpICYmCisJCSAoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spKTsKIAogCWlmIChzdm0tPnZjcHUuYXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYgc3ZtLT52Y3B1LmFyY2guaXJxX3N1bW1hcnkpCiAJCS8qCkBAIC0xNjUyLDkgKzIzODAsOSBAQAogCSAqLwogCWlmICghc3ZtLT52Y3B1LmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuICYmCiAJICAgIChzdm0tPnZjcHUuYXJjaC5pcnFfc3VtbWFyeSB8fCBrdm1fcnVuLT5yZXF1ZXN0X2ludGVycnVwdF93aW5kb3cpKQotCQljb250cm9sLT5pbnRlcmNlcHQgfD0gMVVMTCA8PCBJTlRFUkNFUFRfVklOVFI7Ci0JIGVsc2UKLQkJY29udHJvbC0+aW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBJTlRFUkNFUFRfVklOVFIpOworCQlzdm1fc2V0X3ZpbnRyKHN2bSk7CisJZWxzZQorCQlzdm1fY2xlYXJfdmludHIoc3ZtKTsKIH0KIAogc3RhdGljIGludCBzdm1fc2V0X3Rzc19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpCkBAIC0xNjYyLDIyICsyMzkwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2F2ZV9kYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmRiX3JlZ3MpCi17Ci0JYXNtIHZvbGF0aWxlICgibW92ICUlZHIwLCAlMCIgOiAiPXIiKGRiX3JlZ3NbMF0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjEsICUwIiA6ICI9ciIoZGJfcmVnc1sxXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMiwgJTAiIDogIj1yIihkYl9yZWdzWzJdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUlZHIzLCAlMCIgOiAiPXIiKGRiX3JlZ3NbM10pKTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9kYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmRiX3JlZ3MpCi17Ci0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWRyMCIgOiA6ICJyIihkYl9yZWdzWzBdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWRyMSIgOiA6ICJyIihkYl9yZWdzWzFdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWRyMiIgOiA6ICJyIihkYl9yZWdzWzJdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWRyMyIgOiA6ICJyIihkYl9yZWdzWzNdKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN2bV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWZvcmNlX25ld19hc2lkKHZjcHUpOwpAQCAtMTczNiwxOSArMjQ0OCwxMiBAQAogCWdzX3NlbGVjdG9yID0ga3ZtX3JlYWRfZ3MoKTsKIAlsZHRfc2VsZWN0b3IgPSBrdm1fcmVhZF9sZHQoKTsKIAlzdm0tPmhvc3RfY3IyID0ga3ZtX3JlYWRfY3IyKCk7Ci0Jc3ZtLT5ob3N0X2RyNiA9IHJlYWRfZHI2KCk7Ci0Jc3ZtLT5ob3N0X2RyNyA9IHJlYWRfZHI3KCk7Ci0Jc3ZtLT52bWNiLT5zYXZlLmNyMiA9IHZjcHUtPmFyY2guY3IyOworCWlmICghaXNfbmVzdGVkKHN2bSkpCisJCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSB2Y3B1LT5hcmNoLmNyMjsKIAkvKiByZXF1aXJlZCBmb3IgbGl2ZSBtaWdyYXRpb24gd2l0aCBOUFQgKi8KIAlpZiAobnB0X2VuYWJsZWQpCiAJCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSB2Y3B1LT5hcmNoLmNyMzsKIAotCWlmIChzdm0tPnZtY2ItPnNhdmUuZHI3ICYgMHhmZikgewotCQl3cml0ZV9kcjcoMCk7Ci0JCXNhdmVfZGJfcmVncyhzdm0tPmhvc3RfZGJfcmVncyk7Ci0JCWxvYWRfZGJfcmVncyhzdm0tPmRiX3JlZ3MpOwotCX0KLQogCWNsZ2koKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTE4MjQsMTYgKzI1MjksMTEgQEAKICNlbmRpZgogCQkpOwogCi0JaWYgKChzdm0tPnZtY2ItPnNhdmUuZHI3ICYgMHhmZikpCi0JCWxvYWRfZGJfcmVncyhzdm0tPmhvc3RfZGJfcmVncyk7Ci0KIAl2Y3B1LT5hcmNoLmNyMiA9IHN2bS0+dm1jYi0+c2F2ZS5jcjI7CiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gc3ZtLT52bWNiLT5zYXZlLnJheDsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSBzdm0tPnZtY2ItPnNhdmUucnNwOwogCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yaXA7CiAKLQl3cml0ZV9kcjYoc3ZtLT5ob3N0X2RyNik7Ci0Jd3JpdGVfZHI3KHN2bS0+aG9zdF9kcjcpOwogCWt2bV93cml0ZV9jcjIoc3ZtLT5ob3N0X2NyMik7CiAKIAlrdm1fbG9hZF9mcyhmc19zZWxlY3Rvcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14LmMKaW5kZXggNzYxMWFmNS4uYmI0ODEzMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5jCisrKyBiL2FyY2gveDg2L2t2bS92bXguYwpAQCAtOTEsNiArOTEsNyBAQAogCX0gcm1vZGU7CiAJaW50IHZwaWQ7CiAJYm9vbCBlbXVsYXRpb25fcmVxdWlyZWQ7CisJZW51bSBlbXVsYXRpb25fcmVzdWx0IGludmFsaWRfc3RhdGVfZW11bGF0aW9uX3Jlc3VsdDsKIAogCS8qIFN1cHBvcnQgZm9yIHZubWktbGVzcyBDUFVzICovCiAJaW50IHNvZnRfdm5taV9ibG9ja2VkOwpAQCAtMTg5LDIxICsxOTAsMjEgQEAKIHsKIAlyZXR1cm4gKGludHJfaW5mbyAmIChJTlRSX0lORk9fSU5UUl9UWVBFX01BU0sgfCBJTlRSX0lORk9fVkVDVE9SX01BU0sgfAogCQkJICAgICBJTlRSX0lORk9fVkFMSURfTUFTSykpID09Ci0JCShJTlRSX1RZUEVfRVhDRVBUSU9OIHwgUEZfVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworCQkoSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OIHwgUEZfVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19ub19kZXZpY2UodTMyIGludHJfaW5mbykKIHsKIAlyZXR1cm4gKGludHJfaW5mbyAmIChJTlRSX0lORk9fSU5UUl9UWVBFX01BU0sgfCBJTlRSX0lORk9fVkVDVE9SX01BU0sgfAogCQkJICAgICBJTlRSX0lORk9fVkFMSURfTUFTSykpID09Ci0JCShJTlRSX1RZUEVfRVhDRVBUSU9OIHwgTk1fVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworCQkoSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OIHwgTk1fVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19pbnZhbGlkX29wY29kZSh1MzIgaW50cl9pbmZvKQogewogCXJldHVybiAoaW50cl9pbmZvICYgKElOVFJfSU5GT19JTlRSX1RZUEVfTUFTSyB8IElOVFJfSU5GT19WRUNUT1JfTUFTSyB8CiAJCQkgICAgIElOVFJfSU5GT19WQUxJRF9NQVNLKSkgPT0KLQkJKElOVFJfVFlQRV9FWENFUFRJT04gfCBVRF9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCShJTlRSX1RZUEVfSEFSRF9FWENFUFRJT04gfCBVRF9WRUNUT1IgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2V4dGVybmFsX2ludGVycnVwdCh1MzIgaW50cl9pbmZvKQpAQCAtNDgwLDggKzQ4MSwxMyBAQAogCWViID0gKDF1IDw8IFBGX1ZFQ1RPUikgfCAoMXUgPDwgVURfVkVDVE9SKTsKIAlpZiAoIXZjcHUtPmZwdV9hY3RpdmUpCiAJCWViIHw9IDF1IDw8IE5NX1ZFQ1RPUjsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKLQkJZWIgfD0gMXUgPDwgREJfVkVDVE9SOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19FTkFCTEUpIHsKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYKKwkJICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQorCQkJZWIgfD0gMXUgPDwgREJfVkVDVE9SOworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKQorCQkJZWIgfD0gMXUgPDwgQlBfVkVDVE9SOworCX0KIAlpZiAodmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpCiAJCWViID0gfjA7CiAJaWYgKHZtX25lZWRfZXB0KCkpCkBAIC03NDcsMjkgKzc1MywzMyBAQAogCQkJCWJvb2wgaGFzX2Vycm9yX2NvZGUsIHUzMiBlcnJvcl9jb2RlKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOworCXUzMiBpbnRyX2luZm8gPSBuciB8IElOVFJfSU5GT19WQUxJRF9NQVNLOwogCi0JaWYgKGhhc19lcnJvcl9jb2RlKQorCWlmIChoYXNfZXJyb3JfY29kZSkgewogCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfRVhDRVBUSU9OX0VSUk9SX0NPREUsIGVycm9yX2NvZGUpOworCQlpbnRyX2luZm8gfD0gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLOworCX0KIAogCWlmICh2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkgewogCQl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gdHJ1ZTsKIAkJdm14LT5ybW9kZS5pcnEudmVjdG9yID0gbnI7CiAJCXZteC0+cm1vZGUuaXJxLnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKLQkJaWYgKG5yID09IEJQX1ZFQ1RPUikKKwkJaWYgKG5yID09IEJQX1ZFQ1RPUiB8fCBuciA9PSBPRl9WRUNUT1IpCiAJCQl2bXgtPnJtb2RlLmlycS5yaXArKzsKLQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKLQkJCSAgICAgbnIgfCBJTlRSX1RZUEVfU09GVF9JTlRSCi0JCQkgICAgIHwgKGhhc19lcnJvcl9jb2RlID8gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLIDogMCkKLQkJCSAgICAgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCWludHJfaW5mbyB8PSBJTlRSX1RZUEVfU09GVF9JTlRSOworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELCBpbnRyX2luZm8pOwogCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5TVFJVQ1RJT05fTEVOLCAxKTsKIAkJa3ZtX3JpcF93cml0ZSh2Y3B1LCB2bXgtPnJtb2RlLmlycS5yaXAgLSAxKTsKIAkJcmV0dXJuOwogCX0KIAotCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsCi0JCSAgICAgbnIgfCBJTlRSX1RZUEVfRVhDRVBUSU9OCi0JCSAgICAgfCAoaGFzX2Vycm9yX2NvZGUgPyBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0sgOiAwKQotCQkgICAgIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworCWlmIChuciA9PSBCUF9WRUNUT1IgfHwgbnIgPT0gT0ZfVkVDVE9SKSB7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sIDEpOworCQlpbnRyX2luZm8gfD0gSU5UUl9UWVBFX1NPRlRfRVhDRVBUSU9OOworCX0gZWxzZQorCQlpbnRyX2luZm8gfD0gSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OOworCisJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwgaW50cl9pbmZvKTsKIH0KIAogc3RhdGljIGJvb2wgdm14X2V4Y2VwdGlvbl9pbmplY3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC04NTYsMTEgKzg2Niw4IEBACiAgKiB3cml0ZXMgJ2d1ZXN0X3RzYycgaW50byBndWVzdCdzIHRpbWVzdGFtcCBjb3VudGVyICJyZWdpc3RlciIKICAqIGd1ZXN0X3RzYyA9IGhvc3RfdHNjICsgdHNjX29mZnNldCA9PT4gdHNjX29mZnNldCA9IGd1ZXN0X3RzYyAtIGhvc3RfdHNjCiAgKi8KLXN0YXRpYyB2b2lkIGd1ZXN0X3dyaXRlX3RzYyh1NjQgZ3Vlc3RfdHNjKQorc3RhdGljIHZvaWQgZ3Vlc3Rfd3JpdGVfdHNjKHU2NCBndWVzdF90c2MsIHU2NCBob3N0X3RzYykKIHsKLQl1NjQgaG9zdF90c2M7Ci0KLQlyZHRzY2xsKGhvc3RfdHNjKTsKIAl2bWNzX3dyaXRlNjQoVFNDX09GRlNFVCwgZ3Vlc3RfdHNjIC0gaG9zdF90c2MpOwogfQogCkBAIC05MjUsMTQgKzkzMiwxNSBAQAogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXN0cnVjdCBrdm1fbXNyX2VudHJ5ICptc3I7CisJdTY0IGhvc3RfdHNjOwogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChtc3JfaW5kZXgpIHsKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJY2FzZSBNU1JfRUZFUjoKIAkJdm14X2xvYWRfaG9zdF9zdGF0ZSh2bXgpOwogCQlyZXQgPSBrdm1fc2V0X21zcl9jb21tb24odmNwdSwgbXNyX2luZGV4LCBkYXRhKTsKIAkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAogCWNhc2UgTVNSX0ZTX0JBU0U6CiAJCXZtY3Nfd3JpdGVsKEdVRVNUX0ZTX0JBU0UsIGRhdGEpOwogCQlicmVhazsKQEAgLTk1MCw3ICs5NTgsOCBAQAogCQl2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FU1AsIGRhdGEpOwogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUjoKLQkJZ3Vlc3Rfd3JpdGVfdHNjKGRhdGEpOworCQlyZHRzY2xsKGhvc3RfdHNjKTsKKwkJZ3Vlc3Rfd3JpdGVfdHNjKGRhdGEsIGhvc3RfdHNjKTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfUDZfUEVSRkNUUjA6CiAJY2FzZSBNU1JfUDZfUEVSRkNUUjE6CkBAIC05OTksNDAgKzEwMDgsMjggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQorc3RhdGljIGludCBzZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7Ci0JdW5zaWduZWQgbG9uZyBkcjcgPSAweDQwMDsKLQlpbnQgb2xkX3NpbmdsZXN0ZXA7CisJaW50IG9sZF9kZWJ1ZyA9IHZjcHUtPmd1ZXN0X2RlYnVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlvbGRfc2luZ2xlc3RlcCA9IHZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXA7CisJdmNwdS0+Z3Vlc3RfZGVidWcgPSBkYmctPmNvbnRyb2w7CisJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfRU5BQkxFKSkKKwkJdmNwdS0+Z3Vlc3RfZGVidWcgPSAwOwogCi0JdmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCA9IGRiZy0+ZW5hYmxlZDsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkgewotCQlpbnQgaTsKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQorCQl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIGRiZy0+YXJjaC5kZWJ1Z3JlZ1s3XSk7CisJZWxzZQorCQl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIHZjcHUtPmFyY2guZHI3KTsKIAotCQlkcjcgfD0gMHgyMDA7ICAvKiBleGFjdCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0JCQlpZiAoIWRiZy0+YnJlYWtwb2ludHNbaV0uZW5hYmxlZCkKLQkJCQljb250aW51ZTsKLQkJCXZjcHUtPmd1ZXN0X2RlYnVnLmJwW2ldID0gZGJnLT5icmVha3BvaW50c1tpXS5hZGRyZXNzOwotCQkJZHI3IHw9IDIgPDwgKGkqMik7ICAgIC8qIGdsb2JhbCBlbmFibGUgKi8KLQkJCWRyNyB8PSAwIDw8IChpKjQrMTYpOyAvKiBleGVjdXRpb24gYnJlYWtwb2ludCAqLwotCQl9Ci0KLQkJdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcCA9IGRiZy0+c2luZ2xlc3RlcDsKLQl9IGVsc2UKLQkJdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcCA9IDA7Ci0KLQlpZiAob2xkX3NpbmdsZXN0ZXAgJiYgIXZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXApIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKKwlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKKwkJZmxhZ3MgfD0gWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkY7CisJZWxzZSBpZiAob2xkX2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCiAJCWZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkYpOwotCQl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIGZsYWdzKTsKLQl9CisJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCBmbGFncyk7CiAKIAl1cGRhdGVfZXhjZXB0aW9uX2JpdG1hcCh2Y3B1KTsKLQl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIGRyNyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MzMsNiArMTQzMCwyOSBAQAogCWluaXRfcm1vZGUodmNwdS0+a3ZtKTsKIH0KIAorc3RhdGljIHZvaWQgdm14X3NldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCit7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisJc3RydWN0IGt2bV9tc3JfZW50cnkgKm1zciA9IGZpbmRfbXNyX2VudHJ5KHZteCwgTVNSX0VGRVIpOworCisJdmNwdS0+YXJjaC5zaGFkb3dfZWZlciA9IGVmZXI7CisJaWYgKCFtc3IpCisJCXJldHVybjsKKwlpZiAoZWZlciAmIEVGRVJfTE1BKSB7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKKwkJCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpIHwKKwkJCSAgICAgVk1fRU5UUllfSUEzMkVfTU9ERSk7CisJCW1zci0+ZGF0YSA9IGVmZXI7CisJfSBlbHNlIHsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAorCQkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykgJgorCQkJICAgICB+Vk1fRU5UUllfSUEzMkVfTU9ERSk7CisKKwkJbXNyLT5kYXRhID0gZWZlciAmIH5FRkVSX0xNRTsKKwl9CisJc2V0dXBfbXNycyh2bXgpOworfQorCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCiBzdGF0aWMgdm9pZCBlbnRlcl9sbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xNDQ3LDEzICsxNDY3LDggQEAKIAkJCSAgICAgKGd1ZXN0X3RyX2FyICYgfkFSX1RZUEVfTUFTSykKIAkJCSAgICAgfCBBUl9UWVBFX0JVU1lfNjRfVFNTKTsKIAl9Ci0KIAl2Y3B1LT5hcmNoLnNoYWRvd19lZmVyIHw9IEVGRVJfTE1BOwotCi0JZmluZF9tc3JfZW50cnkodG9fdm14KHZjcHUpLCBNU1JfRUZFUiktPmRhdGEgfD0gRUZFUl9MTUEgfCBFRkVSX0xNRTsKLQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCi0JCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpCi0JCSAgICAgfCBWTV9FTlRSWV9JQTMyRV9NT0RFKTsKKwl2bXhfc2V0X2VmZXIodmNwdSwgdmNwdS0+YXJjaC5zaGFkb3dfZWZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGV4aXRfbG1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTYxMiwzMCArMTYyNyw2IEBACiAJdm1jc193cml0ZWwoR1VFU1RfQ1I0LCBod19jcjQpOwogfQogCi1zdGF0aWMgdm9pZCB2bXhfc2V0X2VmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcikKLXsKLQlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtX21zcl9lbnRyeSAqbXNyID0gZmluZF9tc3JfZW50cnkodm14LCBNU1JfRUZFUik7Ci0KLQl2Y3B1LT5hcmNoLnNoYWRvd19lZmVyID0gZWZlcjsKLQlpZiAoIW1zcikKLQkJcmV0dXJuOwotCWlmIChlZmVyICYgRUZFUl9MTUEpIHsKLQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAotCQkJCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpIHwKLQkJCQkgICAgIFZNX0VOVFJZX0lBMzJFX01PREUpOwotCQltc3ItPmRhdGEgPSBlZmVyOwotCi0JfSBlbHNlIHsKLQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAotCQkJCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpICYKLQkJCQkgICAgIH5WTV9FTlRSWV9JQTMyRV9NT0RFKTsKLQotCQltc3ItPmRhdGEgPSBlZmVyICYgfkVGRVJfTE1FOwotCX0KLQlzZXR1cF9tc3JzKHZteCk7Ci19Ci0KIHN0YXRpYyB1NjQgdm14X2dldF9zZWdtZW50X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKQogewogCXN0cnVjdCBrdm1fdm14X3NlZ21lbnRfZmllbGQgKnNmID0gJmt2bV92bXhfc2VnbWVudF9maWVsZHNbc2VnXTsKQEAgLTE2NTMsNyArMTY0NCw3IEBACiAJdmFyLT5saW1pdCA9IHZtY3NfcmVhZDMyKHNmLT5saW1pdCk7CiAJdmFyLT5zZWxlY3RvciA9IHZtY3NfcmVhZDE2KHNmLT5zZWxlY3Rvcik7CiAJYXIgPSB2bWNzX3JlYWQzMihzZi0+YXJfYnl0ZXMpOwotCWlmIChhciAmIEFSX1VOVVNBQkxFX01BU0spCisJaWYgKChhciAmIEFSX1VOVVNBQkxFX01BU0spICYmICFlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpCiAJCWFyID0gMDsKIAl2YXItPnR5cGUgPSBhciAmIDE1OwogCXZhci0+cyA9IChhciA+PiA0KSAmIDE7CkBAIC0xNzg4LDE0ICsxNzc5LDE2IEBACiAJdm14X2dldF9zZWdtZW50KHZjcHUsICZjcywgVkNQVV9TUkVHX0NTKTsKIAljc19ycGwgPSBjcy5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLOwogCisJaWYgKGNzLnVudXNhYmxlKQorCQlyZXR1cm4gZmFsc2U7CiAJaWYgKH5jcy50eXBlICYgKEFSX1RZUEVfQ09ERV9NQVNLfEFSX1RZUEVfQUNDRVNTRVNfTUFTSykpCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIWNzLnMpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoISh+Y3MudHlwZSAmIChBUl9UWVBFX0NPREVfTUFTS3xBUl9UWVBFX1dSSVRFQUJMRV9NQVNLKSkpIHsKKwlpZiAoY3MudHlwZSAmIEFSX1RZUEVfV1JJVEVBQkxFX01BU0spIHsKIAkJaWYgKGNzLmRwbCA+IGNzX3JwbCkKIAkJCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgaWYgKGNzLnR5cGUgJiBBUl9UWVBFX0NPREVfTUFTSykgeworCX0gZWxzZSB7CiAJCWlmIChjcy5kcGwgIT0gY3NfcnBsKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE4MTQsNyArMTgwNyw5IEBACiAJdm14X2dldF9zZWdtZW50KHZjcHUsICZzcywgVkNQVV9TUkVHX1NTKTsKIAlzc19ycGwgPSBzcy5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLOwogCi0JaWYgKChzcy50eXBlICE9IDMpIHx8IChzcy50eXBlICE9IDcpKQorCWlmIChzcy51bnVzYWJsZSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKHNzLnR5cGUgIT0gMyAmJiBzcy50eXBlICE9IDcpCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXNzLnMpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE4MzQsNiArMTgyOSw4IEBACiAJdm14X2dldF9zZWdtZW50KHZjcHUsICZ2YXIsIHNlZyk7CiAJcnBsID0gdmFyLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CiAKKwlpZiAodmFyLnVudXNhYmxlKQorCQlyZXR1cm4gdHJ1ZTsKIAlpZiAoIXZhci5zKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKCF2YXIucHJlc2VudCkKQEAgLTE4NTUsOSArMTg1MiwxMSBAQAogCiAJdm14X2dldF9zZWdtZW50KHZjcHUsICZ0ciwgVkNQVV9TUkVHX1RSKTsKIAorCWlmICh0ci51bnVzYWJsZSkKKwkJcmV0dXJuIGZhbHNlOwogCWlmICh0ci5zZWxlY3RvciAmIFNFTEVDVE9SX1RJX01BU0spCS8qIFRJID0gMSAqLwogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKCh0ci50eXBlICE9IDMpIHx8ICh0ci50eXBlICE9IDExKSkgLyogVE9ETzogQ2hlY2sgaWYgZ3Vlc3QgaXMgaW4gSUEzMmUgbW9kZSAqLworCWlmICh0ci50eXBlICE9IDMgJiYgdHIudHlwZSAhPSAxMSkgLyogVE9ETzogQ2hlY2sgaWYgZ3Vlc3QgaXMgaW4gSUEzMmUgbW9kZSAqLwogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKCF0ci5wcmVzZW50KQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xODcxLDYgKzE4NzAsOCBAQAogCiAJdm14X2dldF9zZWdtZW50KHZjcHUsICZsZHRyLCBWQ1BVX1NSRUdfTERUUik7CiAKKwlpZiAobGR0ci51bnVzYWJsZSkKKwkJcmV0dXJuIHRydWU7CiAJaWYgKGxkdHIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9USV9NQVNLKQkvKiBUSSA9IDEgKi8KIAkJcmV0dXJuIGZhbHNlOwogCWlmIChsZHRyLnR5cGUgIT0gMikKQEAgLTIxMTIsNyArMjExMyw3IEBACiB7CiAJdTMyIGhvc3Rfc3lzZW50ZXJfY3MsIG1zcl9sb3csIG1zcl9oaWdoOwogCXUzMiBqdW5rOwotCXU2NCBob3N0X3BhdDsKKwl1NjQgaG9zdF9wYXQsIHRzY190aGlzLCB0c2NfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGE7CiAJc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgZHQ7CiAJaW50IGk7CkBAIC0yMjQwLDYgKzIyNDEsMTIgQEAKIAl2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+MFVMKTsKIAl2bWNzX3dyaXRlbChDUjRfR1VFU1RfSE9TVF9NQVNLLCBLVk1fR1VFU1RfQ1I0X01BU0spOwogCisJdHNjX2Jhc2UgPSB2bXgtPnZjcHUua3ZtLT5hcmNoLnZtX2luaXRfdHNjOworCXJkdHNjbGwodHNjX3RoaXMpOworCWlmICh0c2NfdGhpcyA8IHZteC0+dmNwdS5rdm0tPmFyY2gudm1faW5pdF90c2MpCisJCXRzY19iYXNlID0gdHNjX3RoaXM7CisKKwlndWVzdF93cml0ZV90c2MoMCwgdHNjX2Jhc2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzE5LDcgKzIzMjYsNiBAQAogCQlrdm1fcmlwX3dyaXRlKHZjcHUsIDApOwogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNQLCAwKTsKIAotCS8qIHRvZG86IGRyMCA9IGRyMSA9IGRyMiA9IGRyMyA9IDA7IGRyNiA9IDB4ZmZmZjBmZjAgKi8KIAl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIDB4NDAwKTsKIAogCXZtY3Nfd3JpdGVsKEdVRVNUX0dEVFJfQkFTRSwgMCk7CkBAIC0yMzMyLDggKzIzMzgsNiBAQAogCXZtY3Nfd3JpdGUzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sIDApOwogCXZtY3Nfd3JpdGUzMihHVUVTVF9QRU5ESU5HX0RCR19FWENFUFRJT05TLCAwKTsKIAotCWd1ZXN0X3dyaXRlX3RzYygwKTsKLQogCS8qIFNwZWNpYWwgcmVnaXN0ZXJzICovCiAJdm1jc193cml0ZTY0KEdVRVNUX0lBMzJfREVCVUdDVEwsIDApOwogCkBAIC0yNDg2LDYgKzI0OTAsMTEgQEAKIHsKIAl2bXhfdXBkYXRlX3dpbmRvd19zdGF0ZXModmNwdSk7CiAKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKKwkJdm1jc19jbGVhcl9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKKwkJCQlHVUVTVF9JTlRSX1NUQVRFX1NUSSB8CisJCQkJR1VFU1RfSU5UUl9TVEFURV9NT1ZfU1MpOworCiAJaWYgKHZjcHUtPmFyY2gubm1pX3BlbmRpbmcgJiYgIXZjcHUtPmFyY2gubm1pX2luamVjdGVkKSB7CiAJCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nKSB7CiAJCQllbmFibGVfbm1pX3dpbmRvdyh2Y3B1KTsKQEAgLTI1MzYsMjQgKzI1NDUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfZGVidWdfcHJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcgPSAmdmNwdS0+Z3Vlc3RfZGVidWc7Ci0KLQlzZXRfZGVidWdyZWcoZGJnLT5icFswXSwgMCk7Ci0Jc2V0X2RlYnVncmVnKGRiZy0+YnBbMV0sIDEpOwotCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzJdLCAyKTsKLQlzZXRfZGVidWdyZWcoZGJnLT5icFszXSwgMyk7Ci0KLQlpZiAoZGJnLT5zaW5nbGVzdGVwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7Ci0JCWZsYWdzIHw9IFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGOwotCQl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIGZsYWdzKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgaGFuZGxlX3Jtb2RlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICBpbnQgdmVjLCB1MzIgZXJyX2NvZGUpCiB7CkBAIC0yNTcwLDkgKzI1NjEsMTcgQEAKIAkgKiAgICAgICAgdGhlIHJlcXVpcmVkIGRlYnVnZ2luZyBpbmZyYXN0cnVjdHVyZSByZXdvcmsuCiAJICovCiAJc3dpdGNoICh2ZWMpIHsKLQljYXNlIERFX1ZFQ1RPUjoKIAljYXNlIERCX1ZFQ1RPUjoKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYKKwkJICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQorCQkJcmV0dXJuIDA7CisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgdmVjKTsKKwkJcmV0dXJuIDE7CiAJY2FzZSBCUF9WRUNUT1I6CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfU1dfQlApCisJCQlyZXR1cm4gMDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBERV9WRUNUT1I6CiAJY2FzZSBPRl9WRUNUT1I6CiAJY2FzZSBCUl9WRUNUT1I6CiAJY2FzZSBVRF9WRUNUT1I6CkBAIC0yNTg5LDggKzI1ODgsOCBAQAogc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JdTMyIGludHJfaW5mbywgZXJyb3JfY29kZTsKLQl1bnNpZ25lZCBsb25nIGNyMiwgcmlwOworCXUzMiBpbnRyX2luZm8sIGV4X25vLCBlcnJvcl9jb2RlOworCXVuc2lnbmVkIGxvbmcgY3IyLCByaXAsIGRyNjsKIAl1MzIgdmVjdF9pbmZvOwogCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcjsKIApAQCAtMjY0OSwxNCArMjY0OCwzMCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoKGludHJfaW5mbyAmIChJTlRSX0lORk9fSU5UUl9UWVBFX01BU0sgfCBJTlRSX0lORk9fVkVDVE9SX01BU0spKSA9PQotCSAgICAoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IDEpKSB7CisJZXhfbm8gPSBpbnRyX2luZm8gJiBJTlRSX0lORk9fVkVDVE9SX01BU0s7CisJc3dpdGNoIChleF9ubykgeworCWNhc2UgREJfVkVDVE9SOgorCQlkcjYgPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7CisJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYKKwkJICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7CisJCQl2Y3B1LT5hcmNoLmRyNiA9IGRyNiB8IERSNl9GSVhFRF8xOworCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBEQl9WRUNUT1IpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5kcjYgPSBkcjYgfCBEUjZfRklYRURfMTsKKwkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5kcjcgPSB2bWNzX3JlYWRsKEdVRVNUX0RSNyk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQlBfVkVDVE9SOgogCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOwotCQlyZXR1cm4gMDsKKwkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5wYyA9IHZtY3NfcmVhZGwoR1VFU1RfQ1NfQkFTRSkgKyByaXA7CisJCWt2bV9ydW4tPmRlYnVnLmFyY2guZXhjZXB0aW9uID0gZXhfbm87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRVhDRVBUSU9OOworCQlrdm1fcnVuLT5leC5leGNlcHRpb24gPSBleF9ubzsKKwkJa3ZtX3J1bi0+ZXguZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJCWJyZWFrOwogCX0KLQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0VYQ0VQVElPTjsKLQlrdm1fcnVuLT5leC5leGNlcHRpb24gPSBpbnRyX2luZm8gJiBJTlRSX0lORk9fVkVDVE9SX01BU0s7Ci0Ja3ZtX3J1bi0+ZXguZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NzcsNyArMjY5Miw3IEBACiBzdGF0aWMgaW50IGhhbmRsZV9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uOwotCWludCBzaXplLCBkb3duLCBpbiwgc3RyaW5nLCByZXA7CisJaW50IHNpemUsIGluLCBzdHJpbmc7CiAJdW5zaWduZWQgcG9ydDsKIAogCSsrdmNwdS0+c3RhdC5pb19leGl0czsKQEAgLTI2OTMsOCArMjcwOCw2IEBACiAKIAlzaXplID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDcpICsgMTsKIAlpbiA9IChleGl0X3F1YWxpZmljYXRpb24gJiA4KSAhPSAwOwotCWRvd24gPSAodm1jc19yZWFkbChHVUVTVF9SRkxBR1MpICYgWDg2X0VGTEFHU19ERikgIT0gMDsKLQlyZXAgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMzIpICE9IDA7CiAJcG9ydCA9IGV4aXRfcXVhbGlmaWNhdGlvbiA+PiAxNjsKIAogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CkBAIC0yNzk1LDIxICsyODA4LDQ0IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGRyLCByZWc7CiAKLQkvKgotCSAqIEZJWE1FOiB0aGlzIGNvZGUgYXNzdW1lcyB0aGUgaG9zdCBpcyBkZWJ1Z2dpbmcgdGhlIGd1ZXN0LgotCSAqICAgICAgICBuZWVkIHRvIGRlYWwgd2l0aCBndWVzdCBkZWJ1Z2dpbmcgaXRzZWxmIHRvby4KLQkgKi8KKwlkciA9IHZtY3NfcmVhZGwoR1VFU1RfRFI3KTsKKwlpZiAoZHIgJiBEUjdfR0QpIHsKKwkJLyoKKwkJICogQXMgdGhlIHZtLWV4aXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBkZWJ1ZyB0cmFwLCB3ZQorCQkgKiBuZWVkIHRvIGVtdWxhdGUgdGhlIGxhdHRlciwgZWl0aGVyIGZvciB0aGUgaG9zdCBvciB0aGUKKwkJICogZ3Vlc3QgZGVidWdnaW5nIGl0c2VsZi4KKwkJICovCisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApIHsKKwkJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI2ID0gdmNwdS0+YXJjaC5kcjY7CisJCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmRyNyA9IGRyOworCQkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5wYyA9CisJCQkJdm1jc19yZWFkbChHVUVTVF9DU19CQVNFKSArCisJCQkJdm1jc19yZWFkbChHVUVTVF9SSVApOworCQkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBEQl9WRUNUT1I7CisJCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQl2Y3B1LT5hcmNoLmRyNyAmPSB+RFI3X0dEOworCQkJdmNwdS0+YXJjaC5kcjYgfD0gRFI2X0JEOworCQkJdm1jc193cml0ZWwoR1VFU1RfRFI3LCB2Y3B1LT5hcmNoLmRyNyk7CisJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIERCX1ZFQ1RPUik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwogCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKLQlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmIDc7Ci0JcmVnID0gKGV4aXRfcXVhbGlmaWNhdGlvbiA+PiA4KSAmIDE1OwotCWlmIChleGl0X3F1YWxpZmljYXRpb24gJiAxNikgewotCQkvKiBtb3YgZnJvbSBkciAqLworCWRyID0gZXhpdF9xdWFsaWZpY2F0aW9uICYgREVCVUdfUkVHX0FDQ0VTU19OVU07CisJcmVnID0gREVCVUdfUkVHX0FDQ0VTU19SRUcoZXhpdF9xdWFsaWZpY2F0aW9uKTsKKwlpZiAoZXhpdF9xdWFsaWZpY2F0aW9uICYgVFlQRV9NT1ZfRlJPTV9EUikgewogCQlzd2l0Y2ggKGRyKSB7CisJCWNhc2UgMCAuLi4gMzoKKwkJCXZhbCA9IHZjcHUtPmFyY2guZGJbZHJdOworCQkJYnJlYWs7CiAJCWNhc2UgNjoKLQkJCXZhbCA9IDB4ZmZmZjBmZjA7CisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRyNjsKIAkJCWJyZWFrOwogCQljYXNlIDc6Ci0JCQl2YWwgPSAweDQwMDsKKwkJCXZhbCA9IHZjcHUtPmFyY2guZHI3OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl2YWwgPSAwOwpAQCAtMjgxNyw3ICsyODUzLDM4IEBACiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCByZWcsIHZhbCk7CiAJCUtWTVRSQUNFXzJEKERSX1JFQUQsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsLCBoYW5kbGVyKTsKIAl9IGVsc2UgewotCQkvKiBtb3YgdG8gZHIgKi8KKwkJdmFsID0gdmNwdS0+YXJjaC5yZWdzW3JlZ107CisJCXN3aXRjaCAoZHIpIHsKKwkJY2FzZSAwIC4uLiAzOgorCQkJdmNwdS0+YXJjaC5kYltkcl0gPSB2YWw7CisJCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQorCQkJCXZjcHUtPmFyY2guZWZmX2RiW2RyXSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIDQgLi4uIDU6CisJCQlpZiAodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X0RFKQorCQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQlpZiAodmFsICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7CisJCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBHUF9WRUNUT1IpOworCQkJCWJyZWFrOworCQkJfQorCQkJdmNwdS0+YXJjaC5kcjYgPSAodmFsICYgRFI2X1ZPTEFUSUxFKSB8IERSNl9GSVhFRF8xOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWlmICh2YWwgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKKwkJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEdQX1ZFQ1RPUik7CisJCQkJYnJlYWs7CisJCQl9CisJCQl2Y3B1LT5hcmNoLmRyNyA9ICh2YWwgJiBEUjdfVk9MQVRJTEUpIHwgRFI3X0ZJWEVEXzE7CisJCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSB7CisJCQkJdm1jc193cml0ZWwoR1VFU1RfRFI3LCB2Y3B1LT5hcmNoLmRyNyk7CisJCQkJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9CisJCQkJCSh2YWwgJiBEUjdfQlBfRU5fTUFTSyk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlLVk1UUkFDRV8yRChEUl9XUklURSwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCX0KIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCXJldHVybiAxOwpAQCAtMjk2OCwxNyArMzAzNSwyNSBAQAogCX0KIAl0c3Nfc2VsZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb247CiAKLQlyZXR1cm4ga3ZtX3Rhc2tfc3dpdGNoKHZjcHUsIHRzc19zZWxlY3RvciwgcmVhc29uKTsKKwlpZiAoIWt2bV90YXNrX3N3aXRjaCh2Y3B1LCB0c3Nfc2VsZWN0b3IsIHJlYXNvbikpCisJCXJldHVybiAwOworCisJLyogY2xlYXIgYWxsIGxvY2FsIGJyZWFrcG9pbnQgZW5hYmxlIGZsYWdzICovCisJdm1jc193cml0ZWwoR1VFU1RfRFI3LCB2bWNzX3JlYWRsKEdVRVNUX0RSNykgJiB+NTUpOworCisJLyoKKwkgKiBUT0RPOiBXaGF0IGFib3V0IGRlYnVnIHRyYXBzIG9uIHRzcyBzd2l0Y2g/CisJICogICAgICAgQXJlIHdlIHN1cHBvc2VkIHRvIGluamVjdCB0aGVtIGFuZCB1cGRhdGUgZHI2PworCSAqLworCisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAl1NjQgZXhpdF9xdWFsaWZpY2F0aW9uOwotCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcjsKIAlncGFfdCBncGE7Ci0JdW5zaWduZWQgbG9uZyBodmE7CiAJaW50IGdsYV92YWxpZGl0eTsKLQlpbnQgcjsKIAogCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZDY0KEVYSVRfUVVBTElGSUNBVElPTik7CiAKQEAgLTMwMDEsMzIgKzMwNzYsNyBAQAogCX0KIAogCWdwYSA9IHZtY3NfcmVhZDY0KEdVRVNUX1BIWVNJQ0FMX0FERFJFU1MpOwotCWh2YSA9IGdmbl90b19odmEodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7Ci0JaWYgKCFrdm1faXNfZXJyb3JfaHZhKGh2YSkpIHsKLQkJciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEgJiBQQUdFX01BU0ssIDApOwotCQlpZiAociA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRVBUOiBOb3QgZW5vdWdoIG1lbW9yeSFcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JfSBlbHNlIHsKLQkJLyogbXVzdCBiZSBNTUlPICovCi0JCWVyID0gZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBrdm1fcnVuLCAwLCAwLCAwKTsKLQotCQlpZiAoZXIgPT0gRU1VTEFURV9GQUlMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAiRVBUOiBGYWlsIHRvIGhhbmRsZSBFUFQgdmlvbGF0aW9uIHZtZXhpdCFlciBpcyAlZFxuIiwKLQkJCSBlcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVQVDogR1BBOiAweCVseCwgR1ZBOiAweCVseFxuIiwKLQkJCSAobG9uZyB1bnNpZ25lZCBpbnQpdm1jc19yZWFkNjQoR1VFU1RfUEhZU0lDQUxfQUREUkVTUyksCi0JCQkgKGxvbmcgdW5zaWduZWQgaW50KXZtY3NfcmVhZDY0KEdVRVNUX0xJTkVBUl9BRERSRVNTKSk7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVQVDogRXhpdCBxdWFsaWZpY2F0aW9uIGlzIDB4JWx4XG4iLAotCQkJCShsb25nIHVuc2lnbmVkIGludClleGl0X3F1YWxpZmljYXRpb24pOwotCQkJcmV0dXJuIC1FTk9UU1VQUDsKLQkJfSBlbHNlIGlmIChlciA9PSBFTVVMQVRFX0RPX01NSU8pCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7CisJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEgJiBQQUdFX01BU0ssIDApOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCkBAIC0zMDQ2LDcgKzMwOTYsNyBAQAogCQkJCXN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCWludCBlcnI7CisJZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyciA9IEVNVUxBVEVfRE9ORTsKIAogCXByZWVtcHRfZW5hYmxlKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtMzA3MSwxMCArMzEyMSw3IEBACiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAotCS8qIEd1ZXN0IHN0YXRlIHNob3VsZCBiZSB2YWxpZCBub3cgZXhjZXB0IGlmIHdlIG5lZWQgdG8KLQkgKiBlbXVsYXRlIGFuIE1NSU8gKi8KLQlpZiAoZ3Vlc3Rfc3RhdGVfdmFsaWQodmNwdSkpCi0JCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMDsKKwl2bXgtPmludmFsaWRfc3RhdGVfZW11bGF0aW9uX3Jlc3VsdCA9IGVycjsKIH0KIAogLyoKQEAgLTMxMjMsOCArMzE3MCwxMSBAQAogCiAJLyogSWYgd2UgbmVlZCB0byBlbXVsYXRlIGFuIE1NSU8gZnJvbSBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZQogCSAqIHdlIGp1c3QgcmV0dXJuIDAgKi8KLQlpZiAodm14LT5lbXVsYXRpb25fcmVxdWlyZWQgJiYgZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKQotCQlyZXR1cm4gMDsKKwlpZiAodm14LT5lbXVsYXRpb25fcmVxdWlyZWQgJiYgZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKSB7CisJCWlmIChndWVzdF9zdGF0ZV92YWxpZCh2Y3B1KSkKKwkJCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMDsKKwkJcmV0dXJuIHZteC0+aW52YWxpZF9zdGF0ZV9lbXVsYXRpb25fcmVzdWx0ICE9IEVNVUxBVEVfRE9fTU1JTzsKKwl9CiAKIAkvKiBBY2Nlc3MgQ1IzIGRvbid0IGNhdXNlIFZNRXhpdCBpbiBwYWdpbmcgbW9kZSwgc28gd2UgbmVlZAogCSAqIHRvIHN5bmMgd2l0aCBndWVzdCByZWFsIENSMy4gKi8KQEAgLTMyMzgsNyArMzI4OCw4IEBACiAJCQl2bXgtPnZjcHUuYXJjaC5ubWlfaW5qZWN0ZWQgPSBmYWxzZTsKIAl9CiAJa3ZtX2NsZWFyX2V4Y2VwdGlvbl9xdWV1ZSgmdm14LT52Y3B1KTsKLQlpZiAoaWR0dl9pbmZvX3ZhbGlkICYmIHR5cGUgPT0gSU5UUl9UWVBFX0VYQ0VQVElPTikgeworCWlmIChpZHR2X2luZm9fdmFsaWQgJiYgKHR5cGUgPT0gSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OIHx8CisJCQkJdHlwZSA9PSBJTlRSX1RZUEVfU09GVF9FWENFUFRJT04pKSB7CiAJCWlmIChpZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19ERUxJVkVSX0NPREVfTUFTSykgewogCQkJZXJyb3IgPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0VSUk9SX0NPREUpOwogCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKCZ2bXgtPnZjcHUsIHZlY3RvciwgZXJyb3IpOwpAQCAtMzI1OSw2ICszMzEwLDExIEBACiAKIAl2bXhfdXBkYXRlX3dpbmRvd19zdGF0ZXModmNwdSk7CiAKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKKwkJdm1jc19jbGVhcl9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKKwkJCQlHVUVTVF9JTlRSX1NUQVRFX1NUSSB8CisJCQkJR1VFU1RfSU5UUl9TVEFURV9NT1ZfU1MpOworCiAJaWYgKHZjcHUtPmFyY2gubm1pX3BlbmRpbmcgJiYgIXZjcHUtPmFyY2gubm1pX2luamVjdGVkKSB7CiAJCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nKSB7CiAJCQllbmFibGVfbm1pX3dpbmRvdyh2Y3B1KTsKQEAgLTMzNDcsNiArMzQwMyw4IEBACiAJICovCiAJdm1jc193cml0ZWwoSE9TVF9DUjAsIHJlYWRfY3IwKCkpOwogCisJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwogCWFzbSgKIAkJLyogU3RvcmUgaG9zdCByZWdpc3RlcnMgKi8KIAkJInB1c2ggJSUiUiJkeDsgcHVzaCAlJSJSImJwOyIKQEAgLTM0NDEsNiArMzQ5OSw4IEBACiAJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApKTsKIAl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSAwOwogCisJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwogCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTsKIAlpZiAodm14LT5ybW9kZS5pcnEucGVuZGluZykKIAkJZml4dXBfcm1vZGVfaXJxKHZteCk7CkBAIC0zNTk1LDcgKzM2NTUsNiBAQAogCS52Y3B1X3B1dCA9IHZteF92Y3B1X3B1dCwKIAogCS5zZXRfZ3Vlc3RfZGVidWcgPSBzZXRfZ3Vlc3RfZGVidWcsCi0JLmd1ZXN0X2RlYnVnX3ByZSA9IGt2bV9ndWVzdF9kZWJ1Z19wcmUsCiAJLmdldF9tc3IgPSB2bXhfZ2V0X21zciwKIAkuc2V0X21zciA9IHZteF9zZXRfbXNyLAogCS5nZXRfc2VnbWVudF9iYXNlID0gdm14X2dldF9zZWdtZW50X2Jhc2UsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzU4YjdhMS4uOGNhMTAwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CkBAIC02OSw2ICs3MCw4IEBACiAKIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKIAkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKTsKK3N0cnVjdCBrdm1fY3B1aWRfZW50cnkyICprdm1fZmluZF9jcHVpZF9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSAgICAgIHUzMiBmdW5jdGlvbiwgdTMyIGluZGV4KTsKIAogc3RydWN0IGt2bV94ODZfb3BzICprdm1feDg2X29wczsKIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV94ODZfb3BzKTsKQEAgLTE3Myw2ICsxNzYsNyBAQAogCQkJICAgdTMyIGVycm9yX2NvZGUpCiB7CiAJKyt2Y3B1LT5zdGF0LnBmX2d1ZXN0OworCiAJaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpIHsKIAkJaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLm5yID09IFBGX1ZFQ1RPUikgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImt2bTogaW5qZWN0X3BhZ2VfZmF1bHQ6IgpAQCAtMzYxLDYgKzM2NSw3IEBACiAJfQogCWt2bV94ODZfb3BzLT5zZXRfY3I0KHZjcHUsIGNyNCk7CiAJdmNwdS0+YXJjaC5jcjQgPSBjcjQ7CisJdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlLmNyNF9wZ2UgPSAoY3I0ICYgWDg2X0NSNF9QR0UpICYmICF0ZHBfZW5hYmxlZDsKIAlrdm1fbW11X3N5bmNfZ2xvYmFsKHZjcHUpOwogCWt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTsKIH0KQEAgLTQ0Miw2ICs0NDcsMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfY3I4KTsKIAorc3RhdGljIGlubGluZSB1MzIgYml0KGludCBiaXRubykKK3sKKwlyZXR1cm4gMSA8PCAoYml0bm8gJiAzMSk7Cit9CisKIC8qCiAgKiBMaXN0IG9mIG1zciBudW1iZXJzIHdoaWNoIHdlIGV4cG9zZSB0byB1c2Vyc3BhY2UgdGhyb3VnaCBLVk1fR0VUX01TUlMKICAqIGFuZCBLVk1fU0VUX01TUlMsIGFuZCBLVk1fR0VUX01TUl9JTkRFWF9MSVNULgpAQCAtNDU2LDcgKzQ2Niw3IEBACiAJTVNSX0NTVEFSLCBNU1JfS0VSTkVMX0dTX0JBU0UsIE1TUl9TWVNDQUxMX01BU0ssIE1TUl9MU1RBUiwKICNlbmRpZgogCU1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUiwgTVNSX0tWTV9TWVNURU1fVElNRSwgTVNSX0tWTV9XQUxMX0NMT0NLLAotCU1TUl9JQTMyX1BFUkZfU1RBVFVTLCBNU1JfSUEzMl9DUl9QQVQKKwlNU1JfSUEzMl9QRVJGX1NUQVRVUywgTVNSX0lBMzJfQ1JfUEFULCBNU1JfVk1fSFNBVkVfUEEKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBudW1fbXNyc190b19zYXZlOwpAQCAtNDgxLDYgKzQ5MSwyOCBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKGVmZXIgJiBFRkVSX0ZGWFNSKSB7CisJCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpmZWF0OworCisJCWZlYXQgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAxLCAwKTsKKwkJaWYgKCFmZWF0IHx8ICEoZmVhdC0+ZWR4ICYgYml0KFg4Nl9GRUFUVVJFX0ZYU1JfT1BUKSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfZWZlcjogI0dQLCBlbmFibGUgRkZYU1Igdy9vIENQVUlEIGNhcGFiaWxpdHlcbiIpOworCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChlZmVyICYgRUZFUl9TVk1FKSB7CisJCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpmZWF0OworCisJCWZlYXQgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAxLCAwKTsKKwkJaWYgKCFmZWF0IHx8ICEoZmVhdC0+ZWN4ICYgYml0KFg4Nl9GRUFUVVJFX1NWTSkpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2VmZXI6ICNHUCwgZW5hYmxlIFNWTSB3L28gU1ZNXG4iKTsKKwkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlrdm1feDg2X29wcy0+c2V0X2VmZXIodmNwdSwgZWZlcik7CiAKIAllZmVyICY9IH5FRkVSX0xNQTsKQEAgLTU4Niw2ICs2MTgsOCBAQAogCQkgaHZfY2xvY2stPnRzY190b19zeXN0ZW1fbXVsKTsKIH0KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGNwdV90c2Nfa2h6KTsKKwogc3RhdGljIHZvaWQga3ZtX3dyaXRlX2d1ZXN0X3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2KQogewogCXN0cnVjdCB0aW1lc3BlYyB0czsKQEAgLTU5Niw5ICs2MzAsOSBAQAogCWlmICgoIXZjcHUtPnRpbWVfcGFnZSkpCiAJCXJldHVybjsKIAotCWlmICh1bmxpa2VseSh2Y3B1LT5odl9jbG9ja190c2Nfa2h6ICE9IHRzY19raHopKSB7Ci0JCWt2bV9zZXRfdGltZV9zY2FsZSh0c2Nfa2h6LCAmdmNwdS0+aHZfY2xvY2spOwotCQl2Y3B1LT5odl9jbG9ja190c2Nfa2h6ID0gdHNjX2toejsKKwlpZiAodW5saWtlbHkodmNwdS0+aHZfY2xvY2tfdHNjX2toeiAhPSBfX2dldF9jcHVfdmFyKGNwdV90c2Nfa2h6KSkpIHsKKwkJa3ZtX3NldF90aW1lX3NjYWxlKF9fZ2V0X2NwdV92YXIoY3B1X3RzY19raHopLCAmdmNwdS0+aHZfY2xvY2spOworCQl2Y3B1LT5odl9jbG9ja190c2Nfa2h6ID0gX19nZXRfY3B1X3ZhcihjcHVfdHNjX2toeik7CiAJfQogCiAJLyogS2VlcCBpcnEgZGlzYWJsZWQgdG8gcHJldmVudCBjaGFuZ2VzIHRvIHRoZSBjbG9jayAqLwpAQCAtNjI5LDYgKzY2MywxNiBAQAogCW1hcmtfcGFnZV9kaXJ0eSh2LT5rdm0sIHZjcHUtPnRpbWUgPj4gUEFHRV9TSElGVCk7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KQoreworCXN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gJnYtPmFyY2g7CisKKwlpZiAoIXZjcHUtPnRpbWVfcGFnZSkKKwkJcmV0dXJuIDA7CisJc2V0X2JpdChLVk1fUkVRX0tWTUNMT0NLX1VQREFURSwgJnYtPnJlcXVlc3RzKTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGJvb2wgbXNyX210cnJfdmFsaWQodW5zaWduZWQgbXNyKQogewogCXN3aXRjaCAobXNyKSB7CkBAIC03MjIsNiArNzY2LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9XUklURToKKwljYXNlIE1TUl9WTV9IU0FWRV9QQToKIAkJYnJlYWs7CiAJY2FzZSAweDIwMCAuLi4gMHgyZmY6CiAJCXJldHVybiBzZXRfbXNyX210cnIodmNwdSwgbXNyLCBkYXRhKTsKQEAgLTc1OCw3ICs4MDMsNyBAQAogCQkJdmNwdS0+YXJjaC50aW1lX3BhZ2UgPSBOVUxMOwogCQl9CiAKLQkJa3ZtX3dyaXRlX2d1ZXN0X3RpbWUodmNwdSk7CisJCWt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHZjcHUpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTg0Myw2ICs4ODgsNyBAQAogCWNhc2UgTVNSX0lBMzJfTEFTVEJSQU5DSFRPSVA6CiAJY2FzZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQOgogCWNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6CisJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CiAJCWRhdGEgPSAwOwogCQlicmVhazsKIAljYXNlIE1TUl9NVFJSY2FwOgpAQCAtOTY3LDEwICsxMDEzLDEzIEBACiAJY2FzZSBLVk1fQ0FQX01NVV9TSEFET1dfQ0FDSEVfQ09OVFJPTDoKIAljYXNlIEtWTV9DQVBfU0VUX1RTU19BRERSOgogCWNhc2UgS1ZNX0NBUF9FWFRfQ1BVSUQ6CisJY2FzZSBLVk1fQ0FQX0NMT0NLU09VUkNFOgogCWNhc2UgS1ZNX0NBUF9QSVQ6CiAJY2FzZSBLVk1fQ0FQX05PUF9JT19ERUxBWToKIAljYXNlIEtWTV9DQVBfTVBfU1RBVEU6CiAJY2FzZSBLVk1fQ0FQX1NZTkNfTU1VOgorCWNhc2UgS1ZNX0NBUF9SRUlOSkVDVF9DT05UUk9MOgorCWNhc2UgS1ZNX0NBUF9JUlFfSU5KRUNUX1NUQVRVUzoKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9DT0FMRVNDRURfTU1JTzoKQEAgLTk5MSw5ICsxMDQwLDYgQEAKIAljYXNlIEtWTV9DQVBfSU9NTVU6CiAJCXIgPSBpb21tdV9mb3VuZCgpOwogCQlicmVhazsKLQljYXNlIEtWTV9DQVBfQ0xPQ0tTT1VSQ0U6Ci0JCXIgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMTA0NCw3ICsxMDkwLDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjcHVpZCwgY3B1aWRfYXJnLCBzaXplb2YgY3B1aWQpKQogCQkJZ290byBvdXQ7CiAJCXIgPSBrdm1fZGV2X2lvY3RsX2dldF9zdXBwb3J0ZWRfY3B1aWQoJmNwdWlkLAotCQkJY3B1aWRfYXJnLT5lbnRyaWVzKTsKKwkJCQkJCSAgICAgIGNwdWlkX2FyZy0+ZW50cmllcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAKQEAgLTEwNjQsNyArMTExMCw3IEBACiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CiAJa3ZtX3g4Nl9vcHMtPnZjcHVfbG9hZCh2Y3B1LCBjcHUpOwotCWt2bV93cml0ZV9ndWVzdF90aW1lKHZjcHUpOworCWt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHZjcHUpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTExNDIsOCArMTE4OCw4IEBACiB9CiAKIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfc2V0X2NwdWlkMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQorCQkJCSAgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAorCQkJCSAgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQogewogCWludCByOwogCkBAIC0xMTYyLDggKzEyMDgsOCBAQAogfQogCiBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2dldF9jcHVpZDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKIHsKIAlpbnQgcjsKIApAQCAtMTE3Miw3ICsxMjE4LDcgQEAKIAkJZ290byBvdXQ7CiAJciA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcihlbnRyaWVzLCAmdmNwdS0+YXJjaC5jcHVpZF9lbnRyaWVzLAotCQkJICAgdmNwdS0+YXJjaC5jcHVpZF9uZW50ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSkpCisJCQkgdmNwdS0+YXJjaC5jcHVpZF9uZW50ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSkpCiAJCWdvdG8gb3V0OwogCXJldHVybiAwOwogCkBAIC0xMTgxLDE4ICsxMjI3LDEzIEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGJpdChpbnQgYml0bm8pCi17Ci0JcmV0dXJuIDEgPDwgKGJpdG5vICYgMzEpOwotfQotCiBzdGF0aWMgdm9pZCBkb19jcHVpZF8xX2VudChzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZW50cnksIHUzMiBmdW5jdGlvbiwKLQkJCSAgdTMyIGluZGV4KQorCQkJICAgdTMyIGluZGV4KQogewogCWVudHJ5LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCWVudHJ5LT5pbmRleCA9IGluZGV4OwogCWNwdWlkX2NvdW50KGVudHJ5LT5mdW5jdGlvbiwgZW50cnktPmluZGV4LAotCQkmZW50cnktPmVheCwgJmVudHJ5LT5lYngsICZlbnRyeS0+ZWN4LCAmZW50cnktPmVkeCk7CisJCSAgICAmZW50cnktPmVheCwgJmVudHJ5LT5lYngsICZlbnRyeS0+ZWN4LCAmZW50cnktPmVkeCk7CiAJZW50cnktPmZsYWdzID0gMDsKIH0KIApAQCAtMTIyMiwxNSArMTI2MywxNyBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIAkJYml0KFg4Nl9GRUFUVVJFX0xNKSB8CiAjZW5kaWYKKwkJYml0KFg4Nl9GRUFUVVJFX0ZYU1JfT1BUKSB8CiAJCWJpdChYODZfRkVBVFVSRV9NTVhFWFQpIHwKIAkJYml0KFg4Nl9GRUFUVVJFXzNETk9XRVhUKSB8CiAJCWJpdChYODZfRkVBVFVSRV8zRE5PVyk7CiAJY29uc3QgdTMyIGt2bV9zdXBwb3J0ZWRfd29yZDNfeDg2X2ZlYXR1cmVzID0KIAkJYml0KFg4Nl9GRUFUVVJFX1hNTTMpIHwgYml0KFg4Nl9GRUFUVVJFX0NYMTYpOwogCWNvbnN0IHUzMiBrdm1fc3VwcG9ydGVkX3dvcmQ2X3g4Nl9mZWF0dXJlcyA9Ci0JCWJpdChYODZfRkVBVFVSRV9MQUhGX0xNKSB8IGJpdChYODZfRkVBVFVSRV9DTVBfTEVHQUNZKTsKKwkJYml0KFg4Nl9GRUFUVVJFX0xBSEZfTE0pIHwgYml0KFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kpIHwKKwkJYml0KFg4Nl9GRUFUVVJFX1NWTSk7CiAKLQkvKiBhbGwgZnVuYyAyIGNwdWlkX2NvdW50KCkgc2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSBjcHUgKi8KKwkvKiBhbGwgY2FsbHMgdG8gY3B1aWRfY291bnQoKSBzaG91bGQgYmUgbWFkZSBvbiB0aGUgc2FtZSBjcHUgKi8KIAlnZXRfY3B1KCk7CiAJZG9fY3B1aWRfMV9lbnQoZW50cnksIGZ1bmN0aW9uLCBpbmRleCk7CiAJKysqbmVudDsKQEAgLTEzMDQsNyArMTM0Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQorCQkJCSAgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKQogewogCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpjcHVpZF9lbnRyaWVzOwogCWludCBsaW1pdCwgbmVudCA9IDAsIHIgPSAtRTJCSUc7CkBAIC0xMzIxLDcgKzEzNjQsNyBAQAogCWxpbWl0ID0gY3B1aWRfZW50cmllc1swXS5lYXg7CiAJZm9yIChmdW5jID0gMTsgZnVuYyA8PSBsaW1pdCAmJiBuZW50IDwgY3B1aWQtPm5lbnQ7ICsrZnVuYykKIAkJZG9fY3B1aWRfZW50KCZjcHVpZF9lbnRyaWVzW25lbnRdLCBmdW5jLCAwLAotCQkJCSZuZW50LCBjcHVpZC0+bmVudCk7CisJCQkgICAgICZuZW50LCBjcHVpZC0+bmVudCk7CiAJciA9IC1FMkJJRzsKIAlpZiAobmVudCA+PSBjcHVpZC0+bmVudCkKIAkJZ290byBvdXRfZnJlZTsKQEAgLTEzMzAsMTAgKzEzNzMsMTAgQEAKIAlsaW1pdCA9IGNwdWlkX2VudHJpZXNbbmVudCAtIDFdLmVheDsKIAlmb3IgKGZ1bmMgPSAweDgwMDAwMDAxOyBmdW5jIDw9IGxpbWl0ICYmIG5lbnQgPCBjcHVpZC0+bmVudDsgKytmdW5jKQogCQlkb19jcHVpZF9lbnQoJmNwdWlkX2VudHJpZXNbbmVudF0sIGZ1bmMsIDAsCi0JCQkgICAgICAgJm5lbnQsIGNwdWlkLT5uZW50KTsKKwkJCSAgICAgJm5lbnQsIGNwdWlkLT5uZW50KTsKIAlyID0gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKGVudHJpZXMsIGNwdWlkX2VudHJpZXMsCi0JCQluZW50ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSkpCisJCQkgbmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikpKQogCQlnb3RvIG91dF9mcmVlOwogCWNwdWlkLT5uZW50ID0gbmVudDsKIAlyID0gMDsKQEAgLTE0NzcsNyArMTUyMCw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY3B1aWQsIGNwdWlkX2FyZywgc2l6ZW9mIGNwdWlkKSkKIAkJCWdvdG8gb3V0OwogCQlyID0ga3ZtX3ZjcHVfaW9jdGxfc2V0X2NwdWlkMih2Y3B1LCAmY3B1aWQsCi0JCQkJY3B1aWRfYXJnLT5lbnRyaWVzKTsKKwkJCQkJICAgICAgY3B1aWRfYXJnLT5lbnRyaWVzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CkBAIC0xNDkwLDcgKzE1MzMsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNwdWlkLCBjcHVpZF9hcmcsIHNpemVvZiBjcHVpZCkpCiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV92Y3B1X2lvY3RsX2dldF9jcHVpZDIodmNwdSwgJmNwdWlkLAotCQkJCWNwdWlkX2FyZy0+ZW50cmllcyk7CisJCQkJCSAgICAgIGNwdWlkX2FyZy0+ZW50cmllcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwpAQCAtMTcxMCw2ICsxNzUzLDE1IEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3JlaW5qZWN0KHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sICpjb250cm9sKQoreworCWlmICgha3ZtLT5hcmNoLnZwaXQpCisJCXJldHVybiAtRU5YSU87CisJa3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIucmVpbmplY3QgPSBjb250cm9sLT5waXRfcmVpbmplY3Q7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBHZXQgKGFuZCBjbGVhcikgdGhlIGRpcnR5IG1lbW9yeSBsb2cgZm9yIGEgbWVtb3J5IHNsb3QuCiAgKi8KQEAgLTE4MDcsMTMgKzE4NTksMjYgQEAKIAkJCX0KIAkJfSBlbHNlCiAJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKGt2bSk7CisJCWlmIChyKSB7CisJCQlrZnJlZShrdm0tPmFyY2gudnBpYyk7CisJCQlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CisJCQlnb3RvIG91dDsKKwkJfQogCQlicmVhazsKIAljYXNlIEtWTV9DUkVBVEVfUElUOgorCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCQlyID0gLUVFWElTVDsKKwkJaWYgKGt2bS0+YXJjaC52cGl0KQorCQkJZ290byBjcmVhdGVfcGl0X3VubG9jazsKIAkJciA9IC1FTk9NRU07CiAJCWt2bS0+YXJjaC52cGl0ID0ga3ZtX2NyZWF0ZV9waXQoa3ZtKTsKIAkJaWYgKGt2bS0+YXJjaC52cGl0KQogCQkJciA9IDA7CisJY3JlYXRlX3BpdF91bmxvY2s6CisJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fSVJRX0xJTkVfU1RBVFVTOgogCWNhc2UgS1ZNX0lSUV9MSU5FOiB7CiAJCXN0cnVjdCBrdm1faXJxX2xldmVsIGlycV9ldmVudDsKIApAQCAtMTgyMSwxMCArMTg4NiwxNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlycV9ldmVudCwgYXJncCwgc2l6ZW9mIGlycV9ldmVudCkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKGlycWNoaXBfaW5fa2VybmVsKGt2bSkpIHsKKwkJCV9fczMyIHN0YXR1czsKIAkJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7Ci0JCQlrdm1fc2V0X2lycShrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwKLQkJCQkgICAgaXJxX2V2ZW50LmlycSwgaXJxX2V2ZW50LmxldmVsKTsKKwkJCXN0YXR1cyA9IGt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAorCQkJCQlpcnFfZXZlbnQuaXJxLCBpcnFfZXZlbnQubGV2ZWwpOwogCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQkJaWYgKGlvY3RsID09IEtWTV9JUlFfTElORV9TVEFUVVMpIHsKKwkJCQlpcnFfZXZlbnQuc3RhdHVzID0gc3RhdHVzOworCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlycV9ldmVudCwKKwkJCQkJCQlzaXplb2YgaXJxX2V2ZW50KSkKKwkJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlyID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTE5MDcsNiArMTk3OSwxNyBAQAogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgS1ZNX1JFSU5KRUNUX0NPTlRST0w6IHsKKwkJc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sIGNvbnRyb2w7CisJCXIgPSAgLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb250cm9sLCBhcmdwLCBzaXplb2YoY29udHJvbCkpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fdm1faW9jdGxfcmVpbmplY3Qoa3ZtLCAmY29udHJvbCk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCXIgPSAwOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJOwogCX0KQEAgLTE5NjAsMTAgKzIwNDMsOCBAQAogCXJldHVybiBkZXY7CiB9CiAKLWludCBlbXVsYXRvcl9yZWFkX3N0ZCh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgIHZvaWQgKnZhbCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgaW50IGt2bV9yZWFkX2d1ZXN0X3ZpcnQoZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXZvaWQgKmRhdGEgPSB2YWw7CiAJaW50IHIgPSBYODZFTVVMX0NPTlRJTlVFOwpAQCAtMTk3MSwyNyArMjA1Miw1NyBAQAogCXdoaWxlIChieXRlcykgewogCQlncGFfdCBncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIpOwogCQl1bnNpZ25lZCBvZmZzZXQgPSBhZGRyICYgKFBBR0VfU0laRS0xKTsKLQkJdW5zaWduZWQgdG9jb3B5ID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwkJdW5zaWduZWQgdG9yZWFkID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKIAkJaW50IHJldDsKIAogCQlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkgewogCQkJciA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJcmV0ID0ga3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIHRvY29weSk7CisJCXJldCA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCB0b3JlYWQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJciA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlieXRlcyAtPSB0b2NvcHk7Ci0JCWRhdGEgKz0gdG9jb3B5OwotCQlhZGRyICs9IHRvY29weTsKKwkJYnl0ZXMgLT0gdG9yZWFkOworCQlkYXRhICs9IHRvcmVhZDsKKwkJYWRkciArPSB0b3JlYWQ7CiAJfQogb3V0OgogCXJldHVybiByOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoZW11bGF0b3JfcmVhZF9zdGQpOworCitzdGF0aWMgaW50IGt2bV93cml0ZV9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2b2lkICpkYXRhID0gdmFsOworCWludCByID0gWDg2RU1VTF9DT05USU5VRTsKKworCXdoaWxlIChieXRlcykgeworCQlncGFfdCBncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIpOworCQl1bnNpZ25lZCBvZmZzZXQgPSBhZGRyICYgKFBBR0VfU0laRS0xKTsKKwkJdW5zaWduZWQgdG93cml0ZSA9IG1pbihieXRlcywgKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCk7CisJCWludCByZXQ7CisKKwkJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpIHsKKwkJCXIgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJldCA9IGt2bV93cml0ZV9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgdG93cml0ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlyID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWJ5dGVzIC09IHRvd3JpdGU7CisJCWRhdGEgKz0gdG93cml0ZTsKKwkJYWRkciArPSB0b3dyaXRlOworCX0KK291dDoKKwlyZXR1cm4gcjsKK30KKwogCiBzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSAgdm9pZCAqdmFsLApAQCAtMjAxMyw4ICsyMTI0LDggQEAKIAlpZiAoKGdwYSAmIFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSkKIAkJZ290byBtbWlvOwogCi0JaWYgKGVtdWxhdG9yX3JlYWRfc3RkKGFkZHIsIHZhbCwgYnl0ZXMsIHZjcHUpCi0JCQk9PSBYODZFTVVMX0NPTlRJTlVFKQorCWlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KGFkZHIsIHZhbCwgYnl0ZXMsIHZjcHUpCisJCQkJPT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiAJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpCiAJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKQEAgLTIyMTcsNyArMjMyOCw3IEBACiAKIAlyaXBfbGluZWFyID0gcmlwICsgZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfQ1MpOwogCi0JZW11bGF0b3JfcmVhZF9zdGQocmlwX2xpbmVhciwgKHZvaWQgKilvcGNvZGVzLCA0LCB2Y3B1KTsKKwlrdm1fcmVhZF9ndWVzdF92aXJ0KHJpcF9saW5lYXIsICh2b2lkICopb3Bjb2RlcywgNCwgdmNwdSk7CiAKIAlwcmludGsoS0VSTl9FUlIgImVtdWxhdGlvbiBmYWlsZWQgKCVzKSByaXAgJWx4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJICAgICAgIGNvbnRleHQsIHJpcCwgb3Bjb2Rlc1swXSwgb3Bjb2Rlc1sxXSwgb3Bjb2Rlc1syXSwgb3Bjb2Rlc1szXSk7CkBAIC0yMjI1LDcgKzIzMzYsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlcG9ydF9lbXVsYXRpb25fZmFpbHVyZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0gewotCS5yZWFkX3N0ZCAgICAgICAgICAgID0gZW11bGF0b3JfcmVhZF9zdGQsCisJLnJlYWRfc3RkICAgICAgICAgICAgPSBrdm1fcmVhZF9ndWVzdF92aXJ0LAogCS5yZWFkX2VtdWxhdGVkICAgICAgID0gZW11bGF0b3JfcmVhZF9lbXVsYXRlZCwKIAkud3JpdGVfZW11bGF0ZWQgICAgICA9IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkLAogCS5jbXB4Y2hnX2VtdWxhdGVkICAgID0gZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCwKQEAgLTIzMjcsNDAgKzI0MzgsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVtdWxhdGVfaW5zdHJ1Y3Rpb24pOwogCi1zdGF0aWMgdm9pZCBmcmVlX3Bpb19ndWVzdF9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlcyk7ICsraSkKLQkJaWYgKHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzW2ldKSB7Ci0JCQlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzW2ldKTsKLQkJCXZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2VzW2ldID0gTlVMTDsKLQkJfQotfQotCiBzdGF0aWMgaW50IHBpb19jb3B5X2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXZvaWQgKnAgPSB2Y3B1LT5hcmNoLnBpb19kYXRhOwotCXZvaWQgKnE7CisJZ3ZhX3QgcSA9IHZjcHUtPmFyY2gucGlvLmd1ZXN0X2d2YTsKIAl1bnNpZ25lZCBieXRlczsKLQlpbnQgbnJfcGFnZXMgPSB2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1sxXSA/IDIgOiAxOworCWludCByZXQ7CiAKLQlxID0gdm1hcCh2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlcywgbnJfcGFnZXMsIFZNX1JFQUR8Vk1fV1JJVEUsCi0JCSBQQUdFX0tFUk5FTCk7Ci0JaWYgKCFxKSB7Ci0JCWZyZWVfcGlvX2d1ZXN0X3BhZ2VzKHZjcHUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcSArPSB2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlX29mZnNldDsKIAlieXRlcyA9IHZjcHUtPmFyY2gucGlvLnNpemUgKiB2Y3B1LT5hcmNoLnBpby5jdXJfY291bnQ7CiAJaWYgKHZjcHUtPmFyY2gucGlvLmluKQotCQltZW1jcHkocSwgcCwgYnl0ZXMpOworCQlyZXQgPSBrdm1fd3JpdGVfZ3Vlc3RfdmlydChxLCBwLCBieXRlcywgdmNwdSk7CiAJZWxzZQotCQltZW1jcHkocCwgcSwgYnl0ZXMpOwotCXEgLT0gdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZV9vZmZzZXQ7Ci0JdnVubWFwKHEpOwotCWZyZWVfcGlvX2d1ZXN0X3BhZ2VzKHZjcHUpOwotCXJldHVybiAwOworCQlyZXQgPSBrdm1fcmVhZF9ndWVzdF92aXJ0KHEsIHAsIGJ5dGVzLCB2Y3B1KTsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgY29tcGxldGVfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTI0NzEsNyArMjU2MSw2IEBACiAJdmNwdS0+YXJjaC5waW8uaW4gPSBpbjsKIAl2Y3B1LT5hcmNoLnBpby5zdHJpbmcgPSAwOwogCXZjcHUtPmFyY2gucGlvLmRvd24gPSAwOwotCXZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2Vfb2Zmc2V0ID0gMDsKIAl2Y3B1LT5hcmNoLnBpby5yZXAgPSAwOwogCiAJaWYgKHZjcHUtPnJ1bi0+aW8uZGlyZWN0aW9uID09IEtWTV9FWElUX0lPX0lOKQpAQCAtMjQ5OSw5ICsyNTg4LDcgQEAKIAkJICBndmFfdCBhZGRyZXNzLCBpbnQgcmVwLCB1bnNpZ25lZCBwb3J0KQogewogCXVuc2lnbmVkIG5vdywgaW5fcGFnZTsKLQlpbnQgaSwgcmV0ID0gMDsKLQlpbnQgbnJfcGFnZXMgPSAxOwotCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQgPSAwOwogCXN0cnVjdCBrdm1faW9fZGV2aWNlICpwaW9fZGV2OwogCiAJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lPOwpAQCAtMjUxMyw3ICsyNjAwLDYgQEAKIAl2Y3B1LT5hcmNoLnBpby5pbiA9IGluOwogCXZjcHUtPmFyY2gucGlvLnN0cmluZyA9IDE7CiAJdmNwdS0+YXJjaC5waW8uZG93biA9IGRvd247Ci0JdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyZXNzKTsKIAl2Y3B1LT5hcmNoLnBpby5yZXAgPSByZXA7CiAKIAlpZiAodmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fSU4pCkBAIC0yNTMzLDE1ICsyNjE5LDggQEAKIAllbHNlCiAJCWluX3BhZ2UgPSBvZmZzZXRfaW5fcGFnZShhZGRyZXNzKSArIHNpemU7CiAJbm93ID0gbWluKGNvdW50LCAodW5zaWduZWQgbG9uZylpbl9wYWdlIC8gc2l6ZSk7Ci0JaWYgKCFub3cpIHsKLQkJLyoKLQkJICogU3RyaW5nIEkvTyBzdHJhZGRsZXMgcGFnZSBib3VuZGFyeS4gIFBpbiB0d28gZ3Vlc3QgcGFnZXMKLQkJICogc28gdGhhdCB3ZSBzYXRpc2Z5IGF0b21pY2l0eSBjb25zdHJhaW50cy4gIERvIGp1c3Qgb25lCi0JCSAqIHRyYW5zYWN0aW9uIHRvIGF2b2lkIGNvbXBsZXhpdHkuCi0JCSAqLwotCQlucl9wYWdlcyA9IDI7CisJaWYgKCFub3cpCiAJCW5vdyA9IDE7Ci0JfQogCWlmIChkb3duKSB7CiAJCS8qCiAJCSAqIFN0cmluZyBJL08gaW4gcmV2ZXJzZS4gIFl1Y2suICBLaWxsIHRoZSBndWVzdCwgZml4IGxhdGVyLgpAQCAtMjU1NiwxNSArMjYzNSw3IEBACiAJaWYgKHZjcHUtPmFyY2gucGlvLmN1cl9jb3VudCA9PSB2Y3B1LT5hcmNoLnBpby5jb3VudCkKIAkJa3ZtX3g4Nl9vcHMtPnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7ICsraSkgewotCQlwYWdlID0gZ3ZhX3RvX3BhZ2UodmNwdSwgYWRkcmVzcyArIGkgKiBQQUdFX1NJWkUpOwotCQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSA9IHBhZ2U7Ci0JCWlmICghcGFnZSkgewotCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCWZyZWVfcGlvX2d1ZXN0X3BhZ2VzKHZjcHUpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9CisJdmNwdS0+YXJjaC5waW8uZ3Vlc3RfZ3ZhID0gYWRkcmVzczsKIAogCXBpb19kZXYgPSB2Y3B1X2ZpbmRfcGlvX2Rldih2Y3B1LCBwb3J0LAogCQkJCSAgICB2Y3B1LT5hcmNoLnBpby5jdXJfY291bnQsCkBAIC0yNTcyLDcgKzI2NDMsMTEgQEAKIAlpZiAoIXZjcHUtPmFyY2gucGlvLmluKSB7CiAJCS8qIHN0cmluZyBQSU8gd3JpdGUgKi8KIAkJcmV0ID0gcGlvX2NvcHlfZGF0YSh2Y3B1KTsKLQkJaWYgKHJldCA+PSAwICYmIHBpb19kZXYpIHsKKwkJaWYgKHJldCA9PSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCkgeworCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChyZXQgPT0gMCAmJiBwaW9fZGV2KSB7CiAJCQlwaW9fc3RyaW5nX3dyaXRlKHBpb19kZXYsIHZjcHUpOwogCQkJY29tcGxldGVfcGlvKHZjcHUpOwogCQkJaWYgKHZjcHUtPmFyY2gucGlvLmNvdW50ID09IDApCkBAIC0yNTg3LDkgKzI2NjIsNzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9lbXVsYXRlX3Bpb19zdHJpbmcpOwogCitzdGF0aWMgdm9pZCBib3VuY2Vfb2ZmKHZvaWQgKmluZm8pCit7CisJLyogbm90aGluZyAqLworfQorCitzdGF0aWMgdW5zaWduZWQgaW50ICByZWZfZnJlcTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRzY19raHpfcmVmOworCitzdGF0aWMgaW50IGt2bWNsb2NrX2NwdWZyZXFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKKwlzdHJ1Y3Qga3ZtICprdm07CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCWludCBpLCBzZW5kX2lwaSA9IDA7CisKKwlpZiAoIXJlZl9mcmVxKQorCQlyZWZfZnJlcSA9IGZyZXEtPm9sZDsKKworCWlmICh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgJiYgZnJlcS0+b2xkID4gZnJlcS0+bmV3KQorCQlyZXR1cm4gMDsKKwlpZiAodmFsID09IENQVUZSRVFfUE9TVENIQU5HRSAmJiBmcmVxLT5vbGQgPCBmcmVxLT5uZXcpCisJCXJldHVybiAwOworCXBlcl9jcHUoY3B1X3RzY19raHosIGZyZXEtPmNwdSkgPSBjcHVmcmVxX3NjYWxlKHRzY19raHpfcmVmLCByZWZfZnJlcSwgZnJlcS0+bmV3KTsKKworCXNwaW5fbG9jaygma3ZtX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoa3ZtLCAmdm1fbGlzdCwgdm1fbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7CisJCQl2Y3B1ID0ga3ZtLT52Y3B1c1tpXTsKKwkJCWlmICghdmNwdSkKKwkJCQljb250aW51ZTsKKwkJCWlmICh2Y3B1LT5jcHUgIT0gZnJlcS0+Y3B1KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZSh2Y3B1KSkKKwkJCQljb250aW51ZTsKKwkJCWlmICh2Y3B1LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCXNlbmRfaXBpKys7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKKworCWlmIChmcmVxLT5vbGQgPCBmcmVxLT5uZXcgJiYgc2VuZF9pcGkpIHsKKwkJLyoKKwkJICogV2UgdXBzY2FsZSB0aGUgZnJlcXVlbmN5LiAgTXVzdCBtYWtlIHRoZSBndWVzdAorCQkgKiBkb2Vzbid0IHNlZSBvbGQga3ZtY2xvY2sgdmFsdWVzIHdoaWxlIHJ1bm5pbmcgd2l0aAorCQkgKiB0aGUgbmV3IGZyZXF1ZW5jeSwgb3RoZXJ3aXNlIHdlIHJpc2sgdGhlIGd1ZXN0IHNlZXMKKwkJICogdGltZSBnbyBiYWNrd2FyZHMuCisJCSAqCisJCSAqIEluIGNhc2Ugd2UgdXBkYXRlIHRoZSBmcmVxdWVuY3kgZm9yIGFub3RoZXIgY3B1CisJCSAqICh3aGljaCBtaWdodCBiZSBpbiBndWVzdCBjb250ZXh0KSBzZW5kIGFuIGludGVycnVwdAorCQkgKiB0byBraWNrIHRoZSBjcHUgb3V0IG9mIGd1ZXN0IGNvbnRleHQuICBOZXh0IHRpbWUKKwkJICogZ3Vlc3QgY29udGV4dCBpcyBlbnRlcmVkIGt2bWNsb2NrIHdpbGwgYmUgdXBkYXRlZCwKKwkJICogc28gdGhlIGd1ZXN0IHdpbGwgbm90IHNlZSBzdGFsZSB2YWx1ZXMuCisJCSAqLworCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoZnJlcS0+Y3B1LCBib3VuY2Vfb2ZmLCBOVUxMLCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtY2xvY2tfY3B1ZnJlcV9ub3RpZmllcl9ibG9jayA9IHsKKyAgICAgICAgLm5vdGlmaWVyX2NhbGwgID0ga3ZtY2xvY2tfY3B1ZnJlcV9ub3RpZmllcgorfTsKKwogaW50IGt2bV9hcmNoX2luaXQodm9pZCAqb3BhcXVlKQogewotCWludCByOworCWludCByLCBjcHU7CiAJc3RydWN0IGt2bV94ODZfb3BzICpvcHMgPSAoc3RydWN0IGt2bV94ODZfb3BzICopb3BhcXVlOwogCiAJaWYgKGt2bV94ODZfb3BzKSB7CkBAIC0yNjIwLDYgKzI3NTgsMTUgQEAKIAlrdm1fbW11X3NldF9iYXNlX3B0ZXMoUFRfUFJFU0VOVF9NQVNLKTsKIAlrdm1fbW11X3NldF9tYXNrX3B0ZXMoUFRfVVNFUl9NQVNLLCBQVF9BQ0NFU1NFRF9NQVNLLAogCQkJUFRfRElSVFlfTUFTSywgUFQ2NF9OWF9NQVNLLCAwLCAwKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCXBlcl9jcHUoY3B1X3RzY19raHosIGNwdSkgPSB0c2Nfa2h6OworCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpIHsKKwkJdHNjX2toel9yZWYgPSB0c2Nfa2h6OworCQljcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAorCQkJCQkgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CisJfQorCiAJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTI4MjcsMjUgKzI5NzQsMjAgQEAKIAlpZiAoKGUtPmZsYWdzICYgS1ZNX0NQVUlEX0ZMQUdfU0lHTklGQ0FOVF9JTkRFWCkgJiYgZS0+aW5kZXggIT0gaW5kZXgpCiAJCXJldHVybiAwOwogCWlmICgoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TVEFURUZVTF9GVU5DKSAmJgotCQkhKGUtPmZsYWdzICYgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVfUkVBRF9ORVhUKSkKKwkgICAgIShlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NUQVRFX1JFQURfTkVYVCkpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQogCi12b2lkIGt2bV9lbXVsYXRlX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0cnVjdCBrdm1fY3B1aWRfZW50cnkyICprdm1fZmluZF9jcHVpZF9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSAgICAgIHUzMiBmdW5jdGlvbiwgdTMyIGluZGV4KQogewogCWludCBpOwotCXUzMiBmdW5jdGlvbiwgaW5kZXg7Ci0Jc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmUsICpiZXN0OworCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0ID0gTlVMTDsKIAotCWZ1bmN0aW9uID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7Ci0JaW5kZXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKLQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgMCk7Ci0Ja3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIDApOwotCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCAwKTsKLQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgMCk7Ci0JYmVzdCA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guY3B1aWRfbmVudDsgKytpKSB7CisJCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplOworCiAJCWUgPSAmdmNwdS0+YXJjaC5jcHVpZF9lbnRyaWVzW2ldOwogCQlpZiAoaXNfbWF0Y2hpbmdfY3B1aWRfZW50cnkoZSwgZnVuY3Rpb24sIGluZGV4KSkgewogCQkJaWYgKGUtPmZsYWdzICYgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVGVUxfRlVOQykKQEAgLTI4NjAsNiArMzAwMiwyMSBAQAogCQkJaWYgKCFiZXN0IHx8IGUtPmZ1bmN0aW9uID4gYmVzdC0+ZnVuY3Rpb24pCiAJCQkJYmVzdCA9IGU7CiAJfQorCXJldHVybiBiZXN0OworfQorCit2b2lkIGt2bV9lbXVsYXRlX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1MzIgZnVuY3Rpb24sIGluZGV4OworCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0OworCisJZnVuY3Rpb24gPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwlpbmRleCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCAwKTsKKwliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgZnVuY3Rpb24sIGluZGV4KTsKIAlpZiAoYmVzdCkgewogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgYmVzdC0+ZWF4KTsKIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIGJlc3QtPmVieCk7CkBAIC0yOTQ1LDYgKzMxMDIsOCBAQAogCWlmICh2Y3B1LT5yZXF1ZXN0cykgewogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTUlHUkFURV9USU1FUiwgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCV9fa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFLCAmdmNwdS0+cmVxdWVzdHMpKQorCQkJa3ZtX3dyaXRlX2d1ZXN0X3RpbWUodmNwdSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NTVVfU1lOQywgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKSkKQEAgLTI5NzksOSArMzEzOCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQlrdm1feDg2X29wcy0+Z3Vlc3RfZGVidWdfcHJlKHZjcHUpOwotCiAJdmNwdS0+Z3Vlc3RfbW9kZSA9IDE7CiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCBndWVzdF9tb2RlIGFzc2lnbm1lbnQgd29uJ3QgaGFwcGVuIGFmdGVyCkBAIC0zMDAyLDEwICszMTU4LDM0IEBACiAKIAlrdm1fZ3Vlc3RfZW50ZXIoKTsKIAorCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI2LCA2KTsKKwlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNywgNyk7CisJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MpKSB7CisJCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMF0sIDApOworCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzFdLCAxKTsKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsyXSwgMik7CisJCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbM10sIDMpOworCisJCXNldF9kZWJ1Z3JlZygwLCA3KTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZWZmX2RiWzBdLCAwKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZWZmX2RiWzFdLCAxKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZWZmX2RiWzJdLCAyKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZWZmX2RiWzNdLCAzKTsKKwl9CiAKIAlLVk1UUkFDRV8wRChWTUVOVFJZLCB2Y3B1LCBlbnRyeWV4aXQpOwogCWt2bV94ODZfb3BzLT5ydW4odmNwdSwga3ZtX3J1bik7CiAKKwlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykpIHsKKwkJc2V0X2RlYnVncmVnKDAsIDcpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzBdLCAwKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsxXSwgMSk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMl0sIDIpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzNdLCAzKTsKKwl9CisJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjYsIDYpOworCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI3LCA3KTsKKwogCXZjcHUtPmd1ZXN0X21vZGUgPSAwOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMzE5Miw3ICszMzcyLDcgQEAKIAkvKgogCSAqIERvbid0IGxlYWsgZGVidWcgZmxhZ3MgaW4gY2FzZSB0aGV5IHdlcmUgc2V0IGZvciBndWVzdCBkZWJ1Z2dpbmcKIAkgKi8KLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCAmJiB2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwKQorCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQogCQlyZWdzLT5yZmxhZ3MgJj0gfihYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRik7CiAKIAl2Y3B1X3B1dCh2Y3B1KTsKQEAgLTM4MTEsMTUgKzM5OTEsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7Ci0JaW50IHI7CisJaW50IGksIHI7CiAKIAl2Y3B1X2xvYWQodmNwdSk7CiAKKwlpZiAoKGRiZy0+Y29udHJvbCAmIChLVk1fR1VFU1REQkdfRU5BQkxFIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpID09CisJICAgIChLVk1fR1VFU1REQkdfRU5BQkxFIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEtWTV9OUl9EQl9SRUdTOyArK2kpCisJCQl2Y3B1LT5hcmNoLmVmZl9kYltpXSA9IGRiZy0+YXJjaC5kZWJ1Z3JlZ1tpXTsKKwkJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9CisJCQkoZGJnLT5hcmNoLmRlYnVncmVnWzddICYgRFI3X0JQX0VOX01BU0spOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBLVk1fTlJfREJfUkVHUzsgaSsrKQorCQkJdmNwdS0+YXJjaC5lZmZfZGJbaV0gPSB2Y3B1LT5hcmNoLmRiW2ldOworCQl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0gKHZjcHUtPmFyY2guZHI3ICYgRFI3X0JQX0VOX01BU0spOworCX0KKwogCXIgPSBrdm1feDg2X29wcy0+c2V0X2d1ZXN0X2RlYnVnKHZjcHUsIGRiZyk7CiAKKwlpZiAoZGJnLT5jb250cm9sICYgS1ZNX0dVRVNUREJHX0lOSkVDVF9EQikKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBEQl9WRUNUT1IpOworCWVsc2UgaWYgKGRiZy0+Y29udHJvbCAmIEtWTV9HVUVTVERCR19JTkpFQ1RfQlApCisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgQlBfVkVDVE9SKTsKKwogCXZjcHVfcHV0KHZjcHUpOwogCiAJcmV0dXJuIHI7CkBAIC00MDA3LDYgKzQyMDQsMTEgQEAKIAl2Y3B1LT5hcmNoLm5taV9wZW5kaW5nID0gZmFsc2U7CiAJdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQgPSBmYWxzZTsKIAorCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPSAwOworCW1lbXNldCh2Y3B1LT5hcmNoLmRiLCAwLCBzaXplb2YodmNwdS0+YXJjaC5kYikpOworCXZjcHUtPmFyY2guZHI2ID0gRFI2X0ZJWEVEXzE7CisJdmNwdS0+YXJjaC5kcjcgPSBEUjdfRklYRURfMTsKKwogCXJldHVybiBrdm1feDg2X29wcy0+dmNwdV9yZXNldCh2Y3B1KTsKIH0KIApAQCAtNDEwMCw2ICs0MzAyLDggQEAKIAkvKiBSZXNlcnZlIGJpdCAwIG9mIGlycV9zb3VyY2VzX2JpdG1hcCBmb3IgdXNlcnNwYWNlIGlycSBzb3VyY2UgKi8KIAlzZXRfYml0KEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwgJmt2bS0+YXJjaC5pcnFfc291cmNlc19iaXRtYXApOwogCisJcmR0c2NsbChrdm0tPmFyY2gudm1faW5pdF90c2MpOworCiAJcmV0dXJuIGt2bTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYwppbmRleCBkMTc0ZGI3Li5jYTkxNzQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJMCwgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwKIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IE1vdiwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBNb3YsCiAJLyogMHhDOCAtIDB4Q0YgKi8KLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIEltcGxpY2l0T3BzIHwgU3RhY2ssIDAsIDAsIDAsIDAsCiAJLyogMHhEMCAtIDB4RDcgKi8KIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sCkBAIC0xMTM2LDE4ICsxMTM2LDE5IEBACiB9CiAKIHN0YXRpYyBpbnQgZW11bGF0ZV9wb3Aoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCisJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCisJCSAgICAgICB2b2lkICpkZXN0LCBpbnQgbGVuKQogewogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCWludCByYzsKIAogCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0KSwKIAkJCQkJCSBjLT5yZWdzW1ZDUFVfUkVHU19SU1BdKSwKLQkJCQkmYy0+c3JjLnZhbCwgYy0+c3JjLmJ5dGVzLCBjdHh0LT52Y3B1KTsKKwkJCQlkZXN0LCBsZW4sIGN0eHQtPnZjcHUpOwogCWlmIChyYyAhPSAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSwgYy0+c3JjLmJ5dGVzKTsKKwlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSwgbGVuKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTExNTcsMTEgKzExNTgsOSBAQAogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCWludCByYzsKIAotCWMtPnNyYy5ieXRlcyA9IGMtPmRzdC5ieXRlczsKLQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcyk7CisJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjLT5kc3QudmFsLCBjLT5kc3QuYnl0ZXMpOwogCWlmIChyYyAhPSAwKQogCQlyZXR1cm4gcmM7Ci0JYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNzksNiArMTI3OCwyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVtdWxhdGVfcmV0X2ZhcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBjczsKKworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZWlwLCBjLT5vcF9ieXRlcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKGMtPm9wX2J5dGVzID09IDQpCisJCWMtPmVpcCA9ICh1MzIpYy0+ZWlwOworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmY3MsIGMtPm9wX2J5dGVzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LT52Y3B1LCAodTE2KWNzLCAxLCBWQ1BVX1NSRUdfQ1MpOworCXJldHVybiByYzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgd3JpdGViYWNrKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKIHsKQEAgLTE0NjcsMTEgKzE0ODUsOSBAQAogCQlicmVhazsKIAljYXNlIDB4NTggLi4uIDB4NWY6IC8qIHBvcCByZWcgKi8KIAlwb3BfaW5zdHJ1Y3Rpb246Ci0JCWMtPnNyYy5ieXRlcyA9IGMtPm9wX2J5dGVzOwotCQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcyk7CisJCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZHN0LnZhbCwgYy0+b3BfYnl0ZXMpOwogCQlpZiAocmMgIT0gMCkKIAkJCWdvdG8gZG9uZTsKLQkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CiAJCWJyZWFrOwogCWNhc2UgMHg2MzoJCS8qIG1vdnN4ZCAqLwogCQlpZiAoY3R4dC0+bW9kZSAhPSBYODZFTVVMX01PREVfUFJPVDY0KQpAQCAtMTczOCw2ICsxNzU0LDExIEBACiAJbW92OgogCQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKIAkJYnJlYWs7CisJY2FzZSAweGNiOgkJLyogcmV0IGZhciAqLworCQlyYyA9IGVtdWxhdGVfcmV0X2ZhcihjdHh0LCBvcHMpOworCQlpZiAocmMpCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOwogCWNhc2UgMHhkMCAuLi4gMHhkMToJLyogR3JwMiAqLwogCQljLT5zcmMudmFsID0gMTsKIAkJZW11bGF0ZV9ncnAyKGN0eHQpOwpAQCAtMTkwOCwxMSArMTkyOSwxNiBAQAogCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwogCQkJYnJlYWs7CiAJCWNhc2UgMzogLyogbGlkdC92bW1jYWxsICovCi0JCQlpZiAoYy0+bW9kcm1fbW9kID09IDMgJiYgYy0+bW9kcm1fcm0gPT0gMSkgewotCQkJCXJjID0ga3ZtX2ZpeF9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7Ci0JCQkJaWYgKHJjKQotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJa3ZtX2VtdWxhdGVfaHlwZXJjYWxsKGN0eHQtPnZjcHUpOworCQkJaWYgKGMtPm1vZHJtX21vZCA9PSAzKSB7CisJCQkJc3dpdGNoIChjLT5tb2RybV9ybSkgeworCQkJCWNhc2UgMToKKwkJCQkJcmMgPSBrdm1fZml4X2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKKwkJCQkJaWYgKHJjKQorCQkJCQkJZ290byBkb25lOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcmMgPSByZWFkX2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBjLT5zcmMucHRyLAogCQkJCQkJICAgICAmc2l6ZSwgJmFkZHJlc3MsCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDYxMDA2ODIuLmRkMWE3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02NSw0ICs2NSw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYJLyogX1hURU5TQV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGY1MGI2OTcuLjIyNmEzOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTExLDcgKzExLDcgQEAKICNpZm5kZWYgX1hURU5TQV9TV0FCX0gKICNkZWZpbmUgX1hURU5TQV9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKaW5kZXggNWZiY2RlNS4uZjNiNjZmYiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYwpAQCAtOTksNyArOTksNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAyOWJjZmFjLi45OTZlZDkwIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTYwMywxMyArNjAzLDEwIEBACiAJcS0+cXVldWVfZmxhZ3MJCT0gUVVFVUVfRkxBR19ERUZBVUxUOwogCXEtPnF1ZXVlX2xvY2sJCT0gbG9jazsKIAotCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHEsIEJMS19TRUdfQk9VTkRBUllfTUFTSyk7Ci0KKwkvKgorCSAqIFRoaXMgYWxzbyBzZXRzIGh3L3BoeXMgc2VnbWVudHMsIGJvdW5kYXJ5IGFuZCBzaXplCisJICovCiAJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChxLCBfX21ha2VfcmVxdWVzdCk7Ci0JYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgTUFYX1NFR01FTlRfU0laRSk7Ci0KLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIE1BWF9IV19TRUdNRU5UUyk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIE1BWF9QSFlTX1NFR01FTlRTKTsKIAogCXEtPnNnX3Jlc2VydmVkX3NpemUgPSBJTlRfTUFYOwogCkBAIC03MzUsNyArNzMyLDYgQEAKIAkJX19mcmVlZF9yZXF1ZXN0KHEsIHJ3IF4gMSk7CiB9CiAKLSNkZWZpbmUgYmxrZGV2X2ZyZWVfcnEobGlzdCkgbGlzdF9lbnRyeSgobGlzdCktPm5leHQsIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpCiAvKgogICogR2V0IGEgZnJlZSByZXF1ZXN0LCBxdWV1ZV9sb2NrIG11c3QgYmUgaGVsZC4KICAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLCB3aXRoIHF1ZXVlX2xvY2sgaGVsZC4KQEAgLTEwNjYsNiArMTA2Miw5IEBACiAKIAllbHZfY29tcGxldGVkX3JlcXVlc3QocSwgcmVxKTsKIAorCS8qIHRoaXMgaXMgYSBiaW8gbGVhayAqLworCVdBUk5fT04ocmVxLT5iaW8gIT0gTlVMTCk7CisKIAkvKgogCSAqIFJlcXVlc3QgbWF5IG5vdCBoYXZlIG9yaWdpbmF0ZWQgZnJvbSBsbF9yd19ibGsuIGlmIG5vdCwKIAkgKiBpdCBkaWRuJ3QgY29tZSBvdXQgb2Ygb3VyIHJlc2VydmVkIHJxIHBvb2xzCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWVyZ2UuYyBiL2Jsb2NrL2Jsay1tZXJnZS5jCmluZGV4IDVhMjQ0ZjAuLmUzOWNiMjQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tZXJnZS5jCisrKyBiL2Jsb2NrL2Jsay1tZXJnZS5jCkBAIC00MDMsNiArNDAzLDggQEAKIAlpZiAoYmxrX3JxX2NwdV92YWxpZChuZXh0KSkKIAkJcmVxLT5jcHUgPSBuZXh0LT5jcHU7CiAKKwkvKiBvd25lci1zaGlwIG9mIGJpbyBwYXNzZWQgZnJvbSBuZXh0IHRvIHJlcSAqLworCW5leHQtPmJpbyA9IE5VTEw7CiAJX19ibGtfcHV0X3JlcXVlc3QocSwgbmV4dCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9ic2cuYyBiL2Jsb2NrL2JzZy5jCmluZGV4IDBjZTg4MDYuLjIwNjA2MGUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JzZy5jCisrKyBiL2Jsb2NrL2JzZy5jCkBAIC0yMTgsOSArMjE4LDYgQEAKIAogCWlmIChoZHItPmd1YXJkICE9ICdRJykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGhkci0+ZG91dF94ZmVyX2xlbiA+IChxLT5tYXhfc2VjdG9ycyA8PCA5KSB8fAotCSAgICBoZHItPmRpbl94ZmVyX2xlbiA+IChxLT5tYXhfc2VjdG9ycyA8PCA5KSkKLQkJcmV0dXJuIC1FSU87CiAKIAlzd2l0Y2ggKGhkci0+cHJvdG9jb2wpIHsKIAljYXNlIEJTR19QUk9UT0NPTF9TQ1NJOgpAQCAtMzUzLDYgKzM1MCw4IEBACiBzdGF0aWMgdm9pZCBic2dfYWRkX2NvbW1hbmQoc3RydWN0IGJzZ19kZXZpY2UgKmJkLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJCSAgICBzdHJ1Y3QgYnNnX2NvbW1hbmQgKmJjLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CisJaW50IGF0X2hlYWQgPSAoMCA9PSAoYmMtPmhkci5mbGFncyAmIEJTR19GTEFHX1FfQVRfVEFJTCkpOworCiAJLyoKIAkgKiBhZGQgYmMgY29tbWFuZCB0byBidXN5IHF1ZXVlIGFuZCBzdWJtaXQgcnEgZm9yIGlvCiAJICovCkBAIC0zNjgsNyArMzY3LDcgQEAKIAlkcHJpbnRrKCIlczogcXVldWVpbmcgcnEgJXAsIGJjICVwXG4iLCBiZC0+bmFtZSwgcnEsIGJjKTsKIAogCXJxLT5lbmRfaW9fZGF0YSA9IGJjOwotCWJsa19leGVjdXRlX3JxX25vd2FpdChxLCBOVUxMLCBycSwgMSwgYnNnX3JxX2VuZF9pbyk7CisJYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHEsIE5VTEwsIHJxLCBhdF9oZWFkLCBic2dfcnFfZW5kX2lvKTsKIH0KIAogc3RhdGljIHN0cnVjdCBic2dfY29tbWFuZCAqYnNnX25leHRfZG9uZV9jbWQoc3RydWN0IGJzZ19kZXZpY2UgKmJkKQpAQCAtOTI0LDYgKzkyMyw3IEBACiAJCXN0cnVjdCByZXF1ZXN0ICpycTsKIAkJc3RydWN0IGJpbyAqYmlvLCAqYmlkaV9iaW8gPSBOVUxMOwogCQlzdHJ1Y3Qgc2dfaW9fdjQgaGRyOworCQlpbnQgYXRfaGVhZDsKIAkJdTggc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmhkciwgdWFyZywgc2l6ZW9mKGhkcikpKQpAQCAtOTM2LDcgKzkzNiw5IEBACiAJCWJpbyA9IHJxLT5iaW87CiAJCWlmIChycS0+bmV4dF9ycSkKIAkJCWJpZGlfYmlvID0gcnEtPm5leHRfcnEtPmJpbzsKLQkJYmxrX2V4ZWN1dGVfcnEoYmQtPnF1ZXVlLCBOVUxMLCBycSwgMCk7CisKKwkJYXRfaGVhZCA9ICgwID09IChoZHIuZmxhZ3MgJiBCU0dfRkxBR19RX0FUX1RBSUwpKTsKKwkJYmxrX2V4ZWN1dGVfcnEoYmQtPnF1ZXVlLCBOVUxMLCBycSwgYXRfaGVhZCk7CiAJCXJldCA9IGJsa19jb21wbGV0ZV9zZ3Y0X2hkcl9ycShycSwgJmhkciwgYmlvLCBiaWRpX2Jpbyk7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcih1YXJnLCAmaGRyLCBzaXplb2YoaGRyKSkpCmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggZWU5YzY3ZC4uNjI2ZWUyNyAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMjE0LDIxICsyMTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIHVubWFwIGEgcmVxdWVzdCB0aGF0IHdhcyBwcmV2aW91c2x5IG1hcHBlZCB0byB0aGlzIHNnX2lvX2hkci4gaGFuZGxlcwotICogYm90aCBzZyBhbmQgbm9uLXNnIHNnX2lvX2hkci4KLSAqLwotc3RhdGljIGludCBibGtfdW5tYXBfc2doZHJfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3Qgc2dfaW9faGRyICpoZHIpCi17Ci0JYmxrX3JxX3VubWFwX3VzZXIocnEtPmJpbyk7Ci0JYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBibGtfY29tcGxldGVfc2doZHJfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3Qgc2dfaW9faGRyICpoZHIsCiAJCQkJIHN0cnVjdCBiaW8gKmJpbykKIHsKLQlpbnQgciwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCS8qCiAJICogZmlsbCBpbiBhbGwgdGhlIG91dHB1dCBtZW1iZXJzCkBAIC0yNTMsMTIgKzI0MiwxMCBAQAogCQkJcmV0ID0gLUVGQVVMVDsKIAl9CiAKLQlycS0+YmlvID0gYmlvOwotCXIgPSBibGtfdW5tYXBfc2doZHJfcnEocnEsIGhkcik7Ci0JaWYgKHJldCkKLQkJciA9IHJldDsKKwlibGtfcnFfdW5tYXBfdXNlcihiaW8pOworCWJsa19wdXRfcmVxdWVzdChycSk7CiAKLQlyZXR1cm4gcjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNnX2lvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZ2VuZGlzayAqYmRfZGlzaywKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggOGRkZTRmYy4uNzRkMGU2MiAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTU2LDYgKzU2LDcgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBDUllQVE9fQUxHQVBJMgogCXNlbGVjdCBDUllQVE9fUk5HMgorCXNlbGVjdCBDUllQVE9fV09SS1FVRVVFCiAKIGNvbmZpZyBDUllQVE9fSEFTSAogCXRyaXN0YXRlCkBAIC03NSw2ICs3NiwxMCBAQAogCXRyaXN0YXRlCiAJc2VsZWN0IENSWVBUT19BTEdBUEkyCiAKK2NvbmZpZyBDUllQVE9fUENPTVAKKwl0cmlzdGF0ZQorCXNlbGVjdCBDUllQVE9fQUxHQVBJMgorCiBjb25maWcgQ1JZUFRPX01BTkFHRVIKIAl0cmlzdGF0ZSAiQ3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gbWFuYWdlciIKIAlzZWxlY3QgQ1JZUFRPX01BTkFHRVIyCkBAIC04Nyw2ICs5Miw3IEBACiAJc2VsZWN0IENSWVBUT19BRUFEMgogCXNlbGVjdCBDUllQVE9fSEFTSDIKIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUjIKKwlzZWxlY3QgQ1JZUFRPX1BDT01QCiAKIGNvbmZpZyBDUllQVE9fR0YxMjhNVUwKIAl0cmlzdGF0ZSAiR0YoMl4xMjgpIG11bHRpcGxpY2F0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKQEAgLTEwNiwxMSArMTEyLDE1IEBACiAJaGVscAogCSAgVGhlc2UgYXJlICdOdWxsJyBhbGdvcml0aG1zLCB1c2VkIGJ5IElQc2VjLCB3aGljaCBkbyBub3RoaW5nLgogCitjb25maWcgQ1JZUFRPX1dPUktRVUVVRQorICAgICAgIHRyaXN0YXRlCisKIGNvbmZpZyBDUllQVE9fQ1JZUFRECiAJdHJpc3RhdGUgIlNvZnR3YXJlIGFzeW5jIGNyeXB0byBkYWVtb24iCiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKIAlzZWxlY3QgQ1JZUFRPX0hBU0gKIAlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKwlzZWxlY3QgQ1JZUFRPX1dPUktRVUVVRQogCWhlbHAKIAkgIFRoaXMgaXMgYSBnZW5lcmljIHNvZnR3YXJlIGFzeW5jaHJvbm91cyBjcnlwdG8gZGFlbW9uIHRoYXQKIAkgIGNvbnZlcnRzIGFuIGFyYml0cmFyeSBzeW5jaHJvbm91cyBzb2Z0d2FyZSBjcnlwdG8gYWxnb3JpdGhtCkBAIC00NzAsNiArNDgwLDMxIEBACiAKIAkgIFNlZSA8aHR0cDovL2NzcmMubmlzdC5nb3YvZW5jcnlwdGlvbi9hZXMvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorY29uZmlnIENSWVBUT19BRVNfTklfSU5URUwKKwl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIChBRVMtTkkpIgorCWRlcGVuZHMgb24gKFg4NiB8fCBVTUxfWDg2KSAmJiA2NEJJVAorCXNlbGVjdCBDUllQVE9fQUVTX1g4Nl82NAorCXNlbGVjdCBDUllQVE9fQ1JZUFRECisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwloZWxwCisJICBVc2UgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBmb3IgQUVTIGFsZ29yaXRobS4KKworCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbAorCSAgYWxnb3JpdGhtLgorCisJICBSaWpuZGFlbCBhcHBlYXJzIHRvIGJlIGNvbnNpc3RlbnRseSBhIHZlcnkgZ29vZCBwZXJmb3JtZXIgaW4KKwkgIGJvdGggaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgY29tcHV0aW5nCisJICBlbnZpcm9ubWVudHMgcmVnYXJkbGVzcyBvZiBpdHMgdXNlIGluIGZlZWRiYWNrIG9yIG5vbi1mZWVkYmFjaworCSAgbW9kZXMuIEl0cyBrZXkgc2V0dXAgdGltZSBpcyBleGNlbGxlbnQsIGFuZCBpdHMga2V5IGFnaWxpdHkgaXMKKwkgIGdvb2QuIFJpam5kYWVsJ3MgdmVyeSBsb3cgbWVtb3J5IHJlcXVpcmVtZW50cyBtYWtlIGl0IHZlcnkgd2VsbAorCSAgc3VpdGVkIGZvciByZXN0cmljdGVkLXNwYWNlIGVudmlyb25tZW50cywgaW4gd2hpY2ggaXQgYWxzbworCSAgZGVtb25zdHJhdGVzIGV4Y2VsbGVudCBwZXJmb3JtYW5jZS4gUmlqbmRhZWwncyBvcGVyYXRpb25zIGFyZQorCSAgYW1vbmcgdGhlIGVhc2llc3QgdG8gZGVmZW5kIGFnYWluc3QgcG93ZXIgYW5kIHRpbWluZyBhdHRhY2tzLgorCisJICBUaGUgQUVTIHNwZWNpZmllcyB0aHJlZSBrZXkgc2l6ZXM6IDEyOCwgMTkyIGFuZCAyNTYgYml0cworCisJICBTZWUgPGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIGNvbmZpZyBDUllQVE9fQU5VQklTCiAJdHJpc3RhdGUgIkFudWJpcyBjaXBoZXIgYWxnb3JpdGhtIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCkBAIC03MTQsNiArNzQ5LDE1IEBACiAKIAkgIFlvdSB3aWxsIG1vc3QgcHJvYmFibHkgd2FudCB0aGlzIGlmIHVzaW5nIElQU2VjLgogCitjb25maWcgQ1JZUFRPX1pMSUIKKwl0cmlzdGF0ZSAiWmxpYiBjb21wcmVzc2lvbiBhbGdvcml0aG0iCisJc2VsZWN0IENSWVBUT19QQ09NUAorCXNlbGVjdCBaTElCX0lORkxBVEUKKwlzZWxlY3QgWkxJQl9ERUZMQVRFCisJc2VsZWN0IE5MQVRUUgorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIHpsaWIgYWxnb3JpdGhtLgorCiBjb25maWcgQ1JZUFRPX0xaTwogCXRyaXN0YXRlICJMWk8gY29tcHJlc3Npb24gYWxnb3JpdGhtIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggNDZiMDhiZi4uNjczZDlmNyAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKyBiL2NyeXB0by9NYWtlZmlsZQpAQCAtNSw2ICs1LDggQEAKIG9iai0kKENPTkZJR19DUllQVE8pICs9IGNyeXB0by5vCiBjcnlwdG8tb2JqcyA6PSBhcGkubyBjaXBoZXIubyBkaWdlc3QubyBjb21wcmVzcy5vCiAKK29iai0kKENPTkZJR19DUllQVE9fV09SS1FVRVVFKSArPSBjcnlwdG9fd3EubworCiBvYmotJChDT05GSUdfQ1JZUFRPX0ZJUFMpICs9IGZpcHMubwogCiBjcnlwdG9fYWxnYXBpLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2MubwpAQCAtMjUsNiArMjcsOCBAQAogY3J5cHRvX2hhc2gtb2JqcyArPSBzaGFzaC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0hBU0gyKSArPSBjcnlwdG9faGFzaC5vCiAKK29iai0kKENPTkZJR19DUllQVE9fUENPTVApICs9IHBjb21wcmVzcy5vCisKIGNyeXB0b21nci1vYmpzIDo9IGFsZ2Jvc3MubyB0ZXN0bWdyLm8KIAogb2JqLSQoQ09ORklHX0NSWVBUT19NQU5BR0VSMikgKz0gY3J5cHRvbWdyLm8KQEAgLTcwLDYgKzc0LDcgQEAKIG9iai0kKENPTkZJR19DUllQVE9fU0VFRCkgKz0gc2VlZC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NBTFNBMjApICs9IHNhbHNhMjBfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFRkxBVEUpICs9IGRlZmxhdGUubworb2JqLSQoQ09ORklHX0NSWVBUT19aTElCKSArPSB6bGliLm8KIG9iai0kKENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMpICs9IG1pY2hhZWxfbWljLm8KIG9iai0kKENPTkZJR19DUllQVE9fQ1JDMzJDKSArPSBjcmMzMmMubwogb2JqLSQoQ09ORklHX0NSWVBUT19BVVRIRU5DKSArPSBhdXRoZW5jLm8KZGlmZiAtLWdpdCBhL2NyeXB0by9hYmxrY2lwaGVyLmMgYi9jcnlwdG8vYWJsa2NpcGhlci5jCmluZGV4IDk0MTQwYjMuLmUxMWNlMzcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hYmxrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2FibGtjaXBoZXIuYwpAQCAtMjgyLDYgKzI4MiwyNSBAQAogCQkJCQkgIGFsZy0+Y3JhX2FibGtjaXBoZXIuaXZzaXplKSkKIAkJcmV0dXJuIGFsZzsKIAorCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUsIHR5cGUgfCBDUllQVE9fQUxHX1RFU1RFRCwKKwkJCQkgICAgbWFzayAmIH5DUllQVE9fQUxHX1RFU1RFRCk7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gYWxnOworCisJaWYgKChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PQorCSAgICBDUllQVE9fQUxHX1RZUEVfR0lWQ0lQSEVSKSB7CisJCWlmICgoYWxnLT5jcmFfZmxhZ3MgXiB0eXBlIF4gfm1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpIHsKKwkJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJCQlhbGcgPSBFUlJfUFRSKC1FTk9FTlQpOworCQl9CisJCXJldHVybiBhbGc7CisJfQorCisJQlVHX09OKCEoKGFsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19UWVBFX01BU0spID09CisJCSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSID8gYWxnLT5jcmFfYmxrY2lwaGVyLml2c2l6ZSA6CisJCQkJCSAgICAgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpKTsKKwogCXJldHVybiBFUlJfUFRSKGNyeXB0b19naXZjaXBoZXJfZGVmYXVsdChhbGcsIHR5cGUsIG1hc2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FlYWQuYyBiL2NyeXB0by9hZWFkLmMKaW5kZXggM2E2ZjNmNS4uZDlhYTczMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FlYWQuYworKysgYi9jcnlwdG8vYWVhZC5jCkBAIC00MjIsNiArNDIyLDIyIEBACiAJaWYgKCFhbGctPmNyYV9hZWFkLml2c2l6ZSkKIAkJcmV0dXJuIGFsZzsKIAorCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUsIHR5cGUgfCBDUllQVE9fQUxHX1RFU1RFRCwKKwkJCQkgICAgbWFzayAmIH5DUllQVE9fQUxHX1RFU1RFRCk7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gYWxnOworCisJaWYgKGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19hZWFkX3R5cGUpIHsKKwkJaWYgKChhbGctPmNyYV9mbGFncyBeIHR5cGUgXiB+bWFzaykgJiBDUllQVE9fQUxHX1RFU1RFRCkgeworCQkJY3J5cHRvX21vZF9wdXQoYWxnKTsKKwkJCWFsZyA9IEVSUl9QVFIoLUVOT0VOVCk7CisJCX0KKwkJcmV0dXJuIGFsZzsKKwl9CisKKwlCVUdfT04oIWFsZy0+Y3JhX2FlYWQuaXZzaXplKTsKKwogCXJldHVybiBFUlJfUFRSKGNyeXB0b19uaXZhZWFkX2RlZmF1bHQoYWxnLCB0eXBlLCBtYXNrKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hbGdib3NzLmMgYi9jcnlwdG8vYWxnYm9zcy5jCmluZGV4IDQ2MDFlNDI2Li42OTA2ZjkyIDEwMDY0NAotLS0gYS9jcnlwdG8vYWxnYm9zcy5jCisrKyBiL2NyeXB0by9hbGdib3NzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9hZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMDYsOCArMjA2LDcgQEAKIAl1MzIgdHlwZSA9IHBhcmFtLT50eXBlOwogCWludCBlcnIgPSAwOwogCi0JaWYgKCEoKHR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSKSAmCi0JICAgICAgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUl9NQVNLKSAmJiAhKHR5cGUgJiBDUllQVE9fQUxHX0dFTklWKSkKKwlpZiAodHlwZSAmIENSWVBUT19BTEdfVEVTVEVEKQogCQlnb3RvIHNraXB0ZXN0OwogCiAJZXJyID0gYWxnX3Rlc3QocGFyYW0tPmRyaXZlciwgcGFyYW0tPmFsZywgdHlwZSwgQ1JZUFRPX0FMR19URVNURUQpOwpAQCAtMjIzLDYgKzIyMiw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CiAJc3RydWN0IGNyeXB0b190ZXN0X3BhcmFtICpwYXJhbTsKKwl1MzIgdHlwZTsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlnb3RvIGVycjsKQEAgLTIzMyw3ICsyMzMsMTkgQEAKIAogCW1lbWNweShwYXJhbS0+ZHJpdmVyLCBhbGctPmNyYV9kcml2ZXJfbmFtZSwgc2l6ZW9mKHBhcmFtLT5kcml2ZXIpKTsKIAltZW1jcHkocGFyYW0tPmFsZywgYWxnLT5jcmFfbmFtZSwgc2l6ZW9mKHBhcmFtLT5hbGcpKTsKLQlwYXJhbS0+dHlwZSA9IGFsZy0+Y3JhX2ZsYWdzOworCXR5cGUgPSBhbGctPmNyYV9mbGFnczsKKworCS8qIFRoaXMgcGllY2Ugb2YgY3JhcCBuZWVkcyB0byBkaXNhcHBlYXIgaW50byBwZXItdHlwZSB0ZXN0IGhvb2tzLiAqLworCWlmICgoISgodHlwZSBeIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIpICYKKwkgICAgICAgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUl9NQVNLKSAmJiAhKHR5cGUgJiBDUllQVE9fQUxHX0dFTklWKSAmJgorCSAgICAgKChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PQorCSAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIgPyBhbGctPmNyYV9ibGtjaXBoZXIuaXZzaXplIDoKKwkJCQkJICBhbGctPmNyYV9hYmxrY2lwaGVyLml2c2l6ZSkpIHx8CisJICAgICghKCh0eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0FFQUQpICYgQ1JZUFRPX0FMR19UWVBFX01BU0spICYmCisJICAgICBhbGctPmNyYV90eXBlID09ICZjcnlwdG9fbml2YWVhZF90eXBlICYmIGFsZy0+Y3JhX2FlYWQuaXZzaXplKSkKKwkJdHlwZSB8PSBDUllQVE9fQUxHX1RFU1RFRDsKKworCXBhcmFtLT50eXBlID0gdHlwZTsKIAogCXRocmVhZCA9IGt0aHJlYWRfcnVuKGNyeXB0b21ncl90ZXN0LCBwYXJhbSwgImNyeXB0b21ncl90ZXN0Iik7CiAJaWYgKElTX0VSUih0aHJlYWQpKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Fuc2lfY3BybmcuYyBiL2NyeXB0by9hbnNpX2Nwcm5nLmMKaW5kZXggMGZhYzhmZi4uZDgwZWQ0YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2Fuc2lfY3BybmcuYworKysgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCkBAIC0xMzIsOSArMTMyLDE1IEBACiAJCQkgKi8KIAkJCWlmICghbWVtY21wKGN0eC0+cmFuZF9kYXRhLCBjdHgtPmxhc3RfcmFuZF9kYXRhLAogCQkJCQlERUZBVUxUX0JMS19TWikpIHsKKwkJCQlpZiAoZmlwc19lbmFibGVkKSB7CisJCQkJCXBhbmljKCJjcHJuZyAlcCBGYWlsZWQgcmVwZXRpdGlvbiBjaGVjayFcbiIsCisJCQkJCQljdHgpOworCQkJCX0KKwogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCQkiY3R4ICVwIEZhaWxlZCByZXBldGl0aW9uIGNoZWNrIVxuIiwKIAkJCQkJY3R4KTsKKwogCQkJCWN0eC0+ZmxhZ3MgfD0gUFJOR19ORUVEX1JFU0VUOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQpAQCAtMzM4LDcgKzM0NCwxNiBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmN0eC0+cHJuZ19sb2NrKTsKIAotCXJldHVybiByZXNldF9wcm5nX2NvbnRleHQoY3R4LCBOVUxMLCBERUZBVUxUX1BSTkdfS1NaLCBOVUxMLCBOVUxMKTsKKwlpZiAocmVzZXRfcHJuZ19jb250ZXh0KGN0eCwgTlVMTCwgREVGQVVMVF9QUk5HX0tTWiwgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogYWZ0ZXIgYWxsb2NhdGlvbiwgd2Ugc2hvdWxkIGFsd2F5cyBmb3JjZSB0aGUgdXNlciB0byByZXNldAorCSAqIHNvIHRoZXkgZG9uJ3QgaW5hZHZlcnRlbnRseSB1c2UgdGhlIGluc2VjdXJlIGRlZmF1bHQgdmFsdWVzCisJICogd2l0aG91dCBzcGVjaWZ5aW5nIHRoZW0gaW50ZW50aWFsbHkKKwkgKi8KKwljdHgtPmZsYWdzIHw9IFBSTkdfTkVFRF9SRVNFVDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY3BybmdfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FwaS5jIGIvY3J5cHRvL2FwaS5jCmluZGV4IDM4YTJiYzAuLjMxNGRhYjkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcGkuYworKysgYi9jcnlwdG8vYXBpLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWxnICpsYXJ2YWw7CiAJaW50IG9rOwogCi0JaWYgKCEobWFzayAmIENSWVBUT19BTEdfVEVTVEVEKSkgeworCWlmICghKCh0eXBlIHwgbWFzaykgJiBDUllQVE9fQUxHX1RFU1RFRCkpIHsKIAkJdHlwZSB8PSBDUllQVE9fQUxHX1RFU1RFRDsKIAkJbWFzayB8PSBDUllQVE9fQUxHX1RFU1RFRDsKIAl9CkBAIC00NjQsOCArNDY0LDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19iYXNlKTsKIAotc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19jcmVhdGVfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQordm9pZCAqY3J5cHRvX2NyZWF0ZV90Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJCWNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCiB7CiAJY2hhciAqbWVtOwogCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBOVUxMOwpAQCAtNDk5LDkgKzQ5OSw5IEBACiAJCWNyeXB0b19zaG9vdF9hbGcoYWxnKTsKIAlrZnJlZShtZW0pOwogb3V0X2VycjoKLQl0Zm0gPSBFUlJfUFRSKGVycik7CisJbWVtID0gRVJSX1BUUihlcnIpOwogb3V0OgotCXJldHVybiB0Zm07CisJcmV0dXJuIG1lbTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19jcmVhdGVfdGZtKTsKIApAQCAtNTI1LDEyICs1MjUsMTEgQEAKICAqCiAgKglJbiBjYXNlIG9mIGVycm9yIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgcG9pbnRlci4KICAqLwotc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnX25hbWUsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsCi0JCQkJICAgIHUzMiB0eXBlLCB1MzIgbWFzaykKK3ZvaWQgKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnX25hbWUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLCB1MzIgdHlwZSwgdTMyIG1hc2spCiB7CiAJc3RydWN0IGNyeXB0b19hbGcgKigqbG9va3VwKShjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJdm9pZCAqdGZtOwogCWludCBlcnI7CiAKIAl0eXBlICY9IGZyb250ZW5kLT5tYXNrY2xlYXI7CmRpZmYgLS1naXQgYS9jcnlwdG8vYmxrY2lwaGVyLmMgYi9jcnlwdG8vYmxrY2lwaGVyLmMKaW5kZXggZDcwYTQxYy4uOTBkMjZjOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jsa2NpcGhlci5jCisrKyBiL2NyeXB0by9ibGtjaXBoZXIuYwpAQCAtNTIxLDcgKzUyMSw3IEBACiAJaW50IGVycjsKIAogCXR5cGUgPSBjcnlwdG9fc2tjaXBoZXJfdHlwZSh0eXBlKTsKLQltYXNrID0gY3J5cHRvX3NrY2lwaGVyX21hc2sobWFzaykgfCBDUllQVE9fQUxHX0dFTklWOworCW1hc2sgPSBjcnlwdG9fc2tjaXBoZXJfbWFzayhtYXNrKXwgQ1JZUFRPX0FMR19HRU5JVjsKIAogCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKIAlpZiAoSVNfRVJSKGFsZykpCmRpZmYgLS1naXQgYS9jcnlwdG8vY2hhaW5pdi5jIGIvY3J5cHRvL2NoYWluaXYuYwppbmRleCA3YzM3YTQ5Li5iYTIwMGIwIDEwMDY0NAotLS0gYS9jcnlwdG8vY2hhaW5pdi5jCisrKyBiL2NyeXB0by9jaGFpbml2LmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9za2NpcGhlci5oPgogI2luY2x1ZGUgPGNyeXB0by9ybmcuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRvX3dxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTMzLDcgKzEzNCw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlxdWV1ZWQgPSBzY2hlZHVsZV93b3JrKCZjdHgtPnBvc3Rwb25lZCk7CisJcXVldWVkID0gcXVldWVfd29yayhrY3J5cHRvX3dxLCAmY3R4LT5wb3N0cG9uZWQpOwogCUJVR19PTighcXVldWVkKTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0ZC5jIGIvY3J5cHRvL2NyeXB0ZC5jCmluZGV4IGQyOWUwNmIuLmQxNGIyMjYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdGQuYworKysgYi9jcnlwdG8vY3J5cHRkLmMKQEAgLTEyLDMwICsxMiwzMSBAQAogCiAjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgogI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0ZC5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdG9fd3EuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAotI2RlZmluZSBDUllQVERfTUFYX1FMRU4gMTAwCisjZGVmaW5lIENSWVBURF9NQVhfQ1BVX1FMRU4gMTAwCiAKLXN0cnVjdCBjcnlwdGRfc3RhdGUgewotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CitzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSB7CiAJc3RydWN0IGNyeXB0b19xdWV1ZSBxdWV1ZTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9OworCitzdHJ1Y3QgY3J5cHRkX3F1ZXVlIHsKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOwogfTsKIAogc3RydWN0IGNyeXB0ZF9pbnN0YW5jZV9jdHggewogCXN0cnVjdCBjcnlwdG9fc3Bhd24gc3Bhd247Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWU7CiB9OwogCiBzdHJ1Y3QgY3J5cHRkX2Jsa2NpcGhlcl9jdHggewpAQCAtNTQsMTEgKzU1LDg1IEBACiAJY3J5cHRvX2NvbXBsZXRpb25fdCBjb21wbGV0ZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0ZF9zdGF0ZSAqY3J5cHRkX2dldF9zdGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIHZvaWQgY3J5cHRkX3F1ZXVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdGF0aWMgaW50IGNyeXB0ZF9pbml0X3F1ZXVlKHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbWF4X2NwdV9xbGVuKQoreworCWludCBjcHU7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKKworCXF1ZXVlLT5jcHVfcXVldWUgPSBhbGxvY19wZXJjcHUoc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUpOworCWlmICghcXVldWUtPmNwdV9xdWV1ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQljcHVfcXVldWUgPSBwZXJfY3B1X3B0cihxdWV1ZS0+Y3B1X3F1ZXVlLCBjcHUpOworCQljcnlwdG9faW5pdF9xdWV1ZSgmY3B1X3F1ZXVlLT5xdWV1ZSwgbWF4X2NwdV9xbGVuKTsKKwkJSU5JVF9XT1JLKCZjcHVfcXVldWUtPndvcmssIGNyeXB0ZF9xdWV1ZV93b3JrZXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRkX2ZpbmlfcXVldWUoc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUpCit7CisJaW50IGNwdTsKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQljcHVfcXVldWUgPSBwZXJfY3B1X3B0cihxdWV1ZS0+Y3B1X3F1ZXVlLCBjcHUpOworCQlCVUdfT04oY3B1X3F1ZXVlLT5xdWV1ZS5xbGVuKTsKKwl9CisJZnJlZV9wZXJjcHUocXVldWUtPmNwdV9xdWV1ZSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRkX2VucXVldWVfcmVxdWVzdChzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSwKKwkJCQkgIHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlpbnQgY3B1LCBlcnI7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKKworCWNwdSA9IGdldF9jcHUoKTsKKwljcHVfcXVldWUgPSBwZXJfY3B1X3B0cihxdWV1ZS0+Y3B1X3F1ZXVlLCBjcHUpOworCWVyciA9IGNyeXB0b19lbnF1ZXVlX3JlcXVlc3QoJmNwdV9xdWV1ZS0+cXVldWUsIHJlcXVlc3QpOworCXF1ZXVlX3dvcmtfb24oY3B1LCBrY3J5cHRvX3dxLCAmY3B1X3F1ZXVlLT53b3JrKTsKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBDYWxsZWQgaW4gd29ya3F1ZXVlIGNvbnRleHQsIGRvIG9uZSByZWFsIGNyeXB0aW9uIHdvcmsgKHZpYQorICogcmVxLT5jb21wbGV0ZSkgYW5kIHJlc2NoZWR1bGUgaXRzZWxmIGlmIHRoZXJlIGFyZSBtb3JlIHdvcmsgdG8KKyAqIGRvLiAqLworc3RhdGljIHZvaWQgY3J5cHRkX3F1ZXVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKKwlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgKmJhY2tsb2c7CisKKwljcHVfcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUsIHdvcmspOworCS8qIE9ubHkgaGFuZGxlIG9uZSByZXF1ZXN0IGF0IGEgdGltZSB0byBhdm9pZCBob2dnaW5nIGNyeXB0bworCSAqIHdvcmtxdWV1ZS4gcHJlZW1wdF9kaXNhYmxlL2VuYWJsZSBpcyB1c2VkIHRvIHByZXZlbnQKKwkgKiBiZWluZyBwcmVlbXB0ZWQgYnkgY3J5cHRkX2VucXVldWVfcmVxdWVzdCgpICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJYmFja2xvZyA9IGNyeXB0b19nZXRfYmFja2xvZygmY3B1X3F1ZXVlLT5xdWV1ZSk7CisJcmVxID0gY3J5cHRvX2RlcXVldWVfcmVxdWVzdCgmY3B1X3F1ZXVlLT5xdWV1ZSk7CisJcHJlZW1wdF9lbmFibGUoKTsKKworCWlmICghcmVxKQorCQlyZXR1cm47CisKKwlpZiAoYmFja2xvZykKKwkJYmFja2xvZy0+Y29tcGxldGUoYmFja2xvZywgLUVJTlBST0dSRVNTKTsKKwlyZXEtPmNvbXBsZXRlKHJlcSwgMCk7CisKKwlpZiAoY3B1X3F1ZXVlLT5xdWV1ZS5xbGVuKQorCQlxdWV1ZV93b3JrKGtjcnlwdG9fd3EsICZjcHVfcXVldWUtPndvcmspOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdGRfcXVldWUgKmNyeXB0ZF9nZXRfcXVldWUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gY3J5cHRvX3RmbV9hbGdfaW5zdGFuY2UodGZtKTsKIAlzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCAqaWN0eCA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7Ci0JcmV0dXJuIGljdHgtPnN0YXRlOworCXJldHVybiBpY3R4LT5xdWV1ZTsKIH0KIAogc3RhdGljIGludCBjcnlwdGRfYmxrY2lwaGVyX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnBhcmVudCwKQEAgLTEzMCwxOSArMjA1LDEzIEBACiB7CiAJc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfcmVxdWVzdF9jdHggKnJjdHggPSBhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9Ci0JCWNyeXB0ZF9nZXRfc3RhdGUoY3J5cHRvX2FibGtjaXBoZXJfdGZtKHRmbSkpOwotCWludCBlcnI7CisJc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWU7CiAKKwlxdWV1ZSA9IGNyeXB0ZF9nZXRfcXVldWUoY3J5cHRvX2FibGtjaXBoZXJfdGZtKHRmbSkpOwogCXJjdHgtPmNvbXBsZXRlID0gcmVxLT5iYXNlLmNvbXBsZXRlOwogCXJlcS0+YmFzZS5jb21wbGV0ZSA9IGNvbXBsZXRlOwogCi0Jc3Bpbl9sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0JZXJyID0gYWJsa2NpcGhlcl9lbnF1ZXVlX3JlcXVlc3QoJnN0YXRlLT5xdWV1ZSwgcmVxKTsKLQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmxvY2spOwotCi0Jd2FrZV91cF9wcm9jZXNzKHN0YXRlLT50YXNrKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KHF1ZXVlLCAmcmVxLT5iYXNlKTsKIH0KIAogc3RhdGljIGludCBjcnlwdGRfYmxrY2lwaGVyX2VuY3J5cHRfZW5xdWV1ZShzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCkBAIC0xNzYsMjEgKzI0NSwxMiBAQAogc3RhdGljIHZvaWQgY3J5cHRkX2Jsa2NpcGhlcl9leGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCXN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9IGNyeXB0ZF9nZXRfc3RhdGUodGZtKTsKLQlpbnQgYWN0aXZlOwotCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQlhY3RpdmUgPSBhYmxrY2lwaGVyX3RmbV9pbl9xdWV1ZSgmc3RhdGUtPnF1ZXVlLAotCQkJCQkgX19jcnlwdG9fYWJsa2NpcGhlcl9jYXN0KHRmbSkpOwotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQotCUJVR19PTihhY3RpdmUpOwogCiAJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGN0eC0+Y2hpbGQpOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRkX2FsbG9jX2luc3RhbmNlKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCi0JCQkJCQkgICAgIHN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlKQorCQkJCQkJICAgICBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwogCXN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4ICpjdHg7CkBAIC0yMTMsNyArMjczLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX2luc3Q7CiAKLQljdHgtPnN0YXRlID0gc3RhdGU7CisJY3R4LT5xdWV1ZSA9IHF1ZXVlOwogCiAJbWVtY3B5KGluc3QtPmFsZy5jcmFfbmFtZSwgYWxnLT5jcmFfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSk7CiAKQEAgLTIzMSw3ICsyOTEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRkX2FsbG9jX2Jsa2NpcGhlcigKLQlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlKQorCXN0cnVjdCBydGF0dHIgKip0Yiwgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUpCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOwpAQCAtMjQxLDcgKzMwMSw3IEBACiAJaWYgKElTX0VSUihhbGcpKQogCQlyZXR1cm4gRVJSX0NBU1QoYWxnKTsKIAotCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBzdGF0ZSk7CisJaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHF1ZXVlKTsKIAlpZiAoSVNfRVJSKGluc3QpKQogCQlnb3RvIG91dF9wdXRfYWxnOwogCkBAIC0yODksMTUgKzM0OSw2IEBACiBzdGF0aWMgdm9pZCBjcnlwdGRfaGFzaF9leGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCXN0cnVjdCBjcnlwdGRfaGFzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPSBjcnlwdGRfZ2V0X3N0YXRlKHRmbSk7Ci0JaW50IGFjdGl2ZTsKLQotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7Ci0JYWN0aXZlID0gYWhhc2hfdGZtX2luX3F1ZXVlKCZzdGF0ZS0+cXVldWUsCi0JCQkJX19jcnlwdG9fYWhhc2hfY2FzdCh0Zm0pKTsKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0KLQlCVUdfT04oYWN0aXZlKTsKIAogCWNyeXB0b19mcmVlX2hhc2goY3R4LT5jaGlsZCk7CiB9CkBAIC0zMjMsMTkgKzM3NCwxMyBAQAogewogCXN0cnVjdCBjcnlwdGRfaGFzaF9yZXF1ZXN0X2N0eCAqcmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CiAJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0KLQkJY3J5cHRkX2dldF9zdGF0ZShjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOwotCWludCBlcnI7CisJc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUgPQorCQljcnlwdGRfZ2V0X3F1ZXVlKGNyeXB0b19haGFzaF90Zm0odGZtKSk7CiAKIAlyY3R4LT5jb21wbGV0ZSA9IHJlcS0+YmFzZS5jb21wbGV0ZTsKIAlyZXEtPmJhc2UuY29tcGxldGUgPSBjb21wbGV0ZTsKIAotCXNwaW5fbG9ja19iaCgmc3RhdGUtPmxvY2spOwotCWVyciA9IGFoYXNoX2VucXVldWVfcmVxdWVzdCgmc3RhdGUtPnF1ZXVlLCByZXEpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0KLQl3YWtlX3VwX3Byb2Nlc3Moc3RhdGUtPnRhc2spOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3QocXVldWUsICZyZXEtPmJhc2UpOwogfQogCiBzdGF0aWMgdm9pZCBjcnlwdGRfaGFzaF9pbml0KHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxX2FzeW5jLCBpbnQgZXJyKQpAQCAtNDY4LDcgKzUxMyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2NfaGFzaCgKLQlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlKQorCXN0cnVjdCBydGF0dHIgKip0Yiwgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUpCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOwpAQCAtNDc4LDcgKzUyMyw3IEBACiAJaWYgKElTX0VSUihhbGcpKQogCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKGFsZykpOwogCi0JaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHN0YXRlKTsKKwlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgcXVldWUpOwogCWlmIChJU19FUlIoaW5zdCkpCiAJCWdvdG8gb3V0X3B1dF9hbGc7CiAKQEAgLTUwMiw3ICs1NDcsNyBAQAogCXJldHVybiBpbnN0OwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0ZF9zdGF0ZSBzdGF0ZTsKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRkX3F1ZXVlIHF1ZXVlOwogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRkX2FsbG9jKHN0cnVjdCBydGF0dHIgKip0YikKIHsKQEAgLTUxNCw5ICs1NTksOSBAQAogCiAJc3dpdGNoIChhbGd0LT50eXBlICYgYWxndC0+bWFzayAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSOgotCQlyZXR1cm4gY3J5cHRkX2FsbG9jX2Jsa2NpcGhlcih0YiwgJnN0YXRlKTsKKwkJcmV0dXJuIGNyeXB0ZF9hbGxvY19ibGtjaXBoZXIodGIsICZxdWV1ZSk7CiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfRElHRVNUOgotCQlyZXR1cm4gY3J5cHRkX2FsbG9jX2hhc2godGIsICZzdGF0ZSk7CisJCXJldHVybiBjcnlwdGRfYWxsb2NfaGFzaCh0YiwgJnF1ZXVlKTsKIAl9CiAKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTUzNyw4MiArNTgyLDU4IEBACiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgY3J5cHRkX2NyZWF0ZV90aHJlYWQoc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUsCi0JCQkJICAgICAgIGludCAoKmZuKSh2b2lkICpkYXRhKSwgY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIoY29uc3QgY2hhciAqYWxnX25hbWUsCisJCQkJCQkgIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKLQlzcGluX2xvY2tfaW5pdCgmc3RhdGUtPmxvY2spOwotCW11dGV4X2luaXQoJnN0YXRlLT5tdXRleCk7Ci0JY3J5cHRvX2luaXRfcXVldWUoJnN0YXRlLT5xdWV1ZSwgQ1JZUFREX01BWF9RTEVOKTsKKwljaGFyIGNyeXB0ZF9hbGdfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbTsKIAotCXN0YXRlLT50YXNrID0ga3RocmVhZF9ydW4oZm4sIHN0YXRlLCBuYW1lKTsKLQlpZiAoSVNfRVJSKHN0YXRlLT50YXNrKSkKLQkJcmV0dXJuIFBUUl9FUlIoc3RhdGUtPnRhc2spOworCWlmIChzbnByaW50ZihjcnlwdGRfYWxnX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsCisJCSAgICAgImNyeXB0ZCglcykiLCBhbGdfbmFtZSkgPj0gQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJdGZtID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIoY3J5cHRkX2FsZ19uYW1lLCB0eXBlLCBtYXNrKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBFUlJfQ0FTVCh0Zm0pOworCWlmIChjcnlwdG9fYWJsa2NpcGhlcl90Zm0odGZtKS0+X19jcnRfYWxnLT5jcmFfbW9kdWxlICE9IFRISVNfTU9EVUxFKSB7CisJCWNyeXB0b19mcmVlX2FibGtjaXBoZXIodGZtKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIF9fY3J5cHRkX2FibGtjaXBoZXJfY2FzdCh0Zm0pOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRkX3N0b3BfdGhyZWFkKHN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlKQorc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKQogewotCUJVR19PTihzdGF0ZS0+cXVldWUucWxlbik7Ci0Ja3RocmVhZF9zdG9wKHN0YXRlLT50YXNrKTsKKwlzdHJ1Y3QgY3J5cHRkX2Jsa2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCgmdGZtLT5iYXNlKTsKKwlyZXR1cm4gY3R4LT5jaGlsZDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKTsKIAotc3RhdGljIGludCBjcnlwdGRfdGhyZWFkKHZvaWQgKmRhdGEpCit2b2lkIGNyeXB0ZF9mcmVlX2FibGtjaXBoZXIoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pCiB7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPSBkYXRhOwotCWludCBzdG9wOwotCi0JY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7Ci0KLQlkbyB7Ci0JCXN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCAqYmFja2xvZzsKLQotCQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0JCWJhY2tsb2cgPSBjcnlwdG9fZ2V0X2JhY2tsb2coJnN0YXRlLT5xdWV1ZSk7Ci0JCXJlcSA9IGNyeXB0b19kZXF1ZXVlX3JlcXVlc3QoJnN0YXRlLT5xdWV1ZSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0KLQkJc3RvcCA9IGt0aHJlYWRfc2hvdWxkX3N0b3AoKTsKLQotCQlpZiAoc3RvcCB8fCByZXEpIHsKLQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJCWlmIChyZXEpIHsKLQkJCQlpZiAoYmFja2xvZykKLQkJCQkJYmFja2xvZy0+Y29tcGxldGUoYmFja2xvZywKLQkJCQkJCQkgIC1FSU5QUk9HUkVTUyk7Ci0JCQkJcmVxLT5jb21wbGV0ZShyZXEsIDApOwotCQkJfQotCQl9Ci0KLQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCi0JCXNjaGVkdWxlKCk7Ci0JfSB3aGlsZSAoIXN0b3ApOwotCi0JcmV0dXJuIDA7CisJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcigmdGZtLT5iYXNlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0ZF9mcmVlX2FibGtjaXBoZXIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdGRfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBjcnlwdGRfY3JlYXRlX3RocmVhZCgmc3RhdGUsIGNyeXB0ZF90aHJlYWQsICJjcnlwdGQiKTsKKwllcnIgPSBjcnlwdGRfaW5pdF9xdWV1ZSgmcXVldWUsIENSWVBURF9NQVhfQ1BVX1FMRU4pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0ZF90bXBsKTsKIAlpZiAoZXJyKQotCQlrdGhyZWFkX3N0b3Aoc3RhdGUudGFzayk7CisJCWNyeXB0ZF9maW5pX3F1ZXVlKCZxdWV1ZSk7CiAKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRkX2V4aXQodm9pZCkKIHsKLQljcnlwdGRfc3RvcF90aHJlYWQoJnN0YXRlKTsKKwljcnlwdGRfZmluaV9xdWV1ZSgmcXVldWUpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdGRfdG1wbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdG9fd3EuYyBiL2NyeXB0by9jcnlwdG9fd3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGNmNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2NyeXB0b193cS5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBXb3JrcXVldWUgZm9yIGNyeXB0byBzdWJzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycC4KKyAqICAgQXV0aG9yOiBIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdG9fd3EuaD4KKworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtjcnlwdG9fd3E7CitFWFBPUlRfU1lNQk9MX0dQTChrY3J5cHRvX3dxKTsKKworc3RhdGljIGludCBfX2luaXQgY3J5cHRvX3dxX2luaXQodm9pZCkKK3sKKwlrY3J5cHRvX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiY3J5cHRvIik7CisJaWYgKHVubGlrZWx5KCFrY3J5cHRvX3dxKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG9fd3FfZXhpdCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKGtjcnlwdG9fd3EpOworfQorCittb2R1bGVfaW5pdChjcnlwdG9fd3FfaW5pdCk7Cittb2R1bGVfZXhpdChjcnlwdG9fd3FfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiV29ya3F1ZXVlIGZvciBjcnlwdG8gc3Vic3lzdGVtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZ2YxMjhtdWwuYyBiL2NyeXB0by9nZjEyOG11bC5jCmluZGV4IGVjYmVhYTEuLmE5MGQyNjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9nZjEyOG11bC5jCisrKyBiL2NyeXB0by9nZjEyOG11bC5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA2LCBSaWsgU25lbCA8cnNuZWxAY3ViZS5keW5kbnMub3JnPgogICoKICAqIEJhc2VkIG9uIERyIEJyaWFuIEdsYWRtYW4ncyAoR1BMJ2QpIHdvcmsgcHVibGlzaGVkIGF0Ci0gKiBodHRwOi8vZnAuZ2xhZG1hbi5wbHVzLmNvbS9jcnlwdG9ncmFwaHlfdGVjaG5vbG9neS9pbmRleC5odG0KKyAqIGh0dHA6Ly9nbGFkbWFuLnBsdXNob3N0LmNvLnVrL29sZHNpdGUvY3J5cHRvZ3JhcGh5X3RlY2hub2xvZ3kvaW5kZXgucGhwCiAgKiBTZWUgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYmVsb3cuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKZGlmZiAtLWdpdCBhL2NyeXB0by9pbnRlcm5hbC5oIGIvY3J5cHRvL2ludGVybmFsLmgKaW5kZXggM2MxOWEyNy4uZmM3NmUxZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2ludGVybmFsLmgKKysrIGIvY3J5cHRvL2ludGVybmFsLmgKQEAgLTEwOSw4ICsxMDksMTAgQEAKIHZvaWQgY3J5cHRvX3Nob290X2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKTsKIHN0cnVjdCBjcnlwdG9fdGZtICpfX2NyeXB0b19hbGxvY190Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywgdTMyIHR5cGUsCiAJCQkJICAgICAgdTMyIG1hc2spOwotc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19jcmVhdGVfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKTsKK3ZvaWQgKmNyeXB0b19jcmVhdGVfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKTsKK3ZvaWQgKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnX25hbWUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLCB1MzIgdHlwZSwgdTMyIG1hc2spOwogCiBpbnQgY3J5cHRvX3JlZ2lzdGVyX2luc3RhbmNlKHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwsCiAJCQkgICAgIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Bjb21wcmVzcy5jIGIvY3J5cHRvL3Bjb21wcmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOWE0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcGNvbXByZXNzLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIFBhcnRpYWwgKGRlKWNvbXByZXNzaW9uIG9wZXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjcnlwdG8vY29tcHJlc3MuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCisKKworc3RhdGljIGludCBjcnlwdG9fcGNvbXBfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3J5cHRvX3Bjb21wX2V4dHNpemUoc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJCQkJIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCit7CisJcmV0dXJuIGFsZy0+Y3JhX2N0eHNpemU7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3Bjb21wX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkJIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19wY29tcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGNyeXB0b19hbGcgKmFsZykKKwlfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CitzdGF0aWMgdm9pZCBjcnlwdG9fcGNvbXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJc2VxX3ByaW50ZihtLCAidHlwZSAgICAgICAgIDogcGNvbXBcbiIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19wY29tcF90eXBlID0geworCS5leHRzaXplCT0gY3J5cHRvX3Bjb21wX2V4dHNpemUsCisJLmluaXQJCT0gY3J5cHRvX3Bjb21wX2luaXQsCisJLmluaXRfdGZtCT0gY3J5cHRvX3Bjb21wX2luaXRfdGZtLAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJLnNob3cJCT0gY3J5cHRvX3Bjb21wX3Nob3csCisjZW5kaWYKKwkubWFza2NsZWFyCT0gfkNSWVBUT19BTEdfVFlQRV9NQVNLLAorCS5tYXNrc2V0CT0gQ1JZUFRPX0FMR19UWVBFX01BU0ssCisJLnR5cGUJCT0gQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUywKKwkudGZtc2l6ZQk9IG9mZnNldG9mKHN0cnVjdCBjcnlwdG9fcGNvbXAsIGJhc2UpLAorfTsKKworc3RydWN0IGNyeXB0b19wY29tcCAqY3J5cHRvX2FsbG9jX3Bjb21wKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwKKwkJCQkJdTMyIG1hc2spCit7CisJcmV0dXJuIGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsICZjcnlwdG9fcGNvbXBfdHlwZSwgdHlwZSwgbWFzayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfcGNvbXApOworCitpbnQgY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYmFzZSA9ICZhbGctPmJhc2U7CisKKwliYXNlLT5jcmFfdHlwZSA9ICZjcnlwdG9fcGNvbXBfdHlwZTsKKwliYXNlLT5jcmFfZmxhZ3MgJj0gfkNSWVBUT19BTEdfVFlQRV9NQVNLOworCWJhc2UtPmNyYV9mbGFncyB8PSBDUllQVE9fQUxHX1RZUEVfUENPTVBSRVNTOworCisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoYmFzZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fcmVnaXN0ZXJfcGNvbXApOworCitpbnQgY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXAoc3RydWN0IHBjb21wX2FsZyAqYWxnKQoreworCXJldHVybiBjcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZy0+YmFzZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fdW5yZWdpc3Rlcl9wY29tcCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUGFydGlhbCAoZGUpY29tcHJlc3Npb24gdHlwZSIpOworTU9EVUxFX0FVVEhPUigiU29ueSBDb3Jwb3JhdGlvbiIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMgYi9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYwppbmRleCBjYWEzNTQyLi42MzQ5ZDgzIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYworKysgYi9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYwpAQCAtMiw3ICsyLDcgQEAKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIFNIQS0yNTYsIGFzIHNwZWNpZmllZCBpbgotICogaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvc2hzL3NoYTI1Ni0zODQtNTEyLnBkZgorICogaHR0cDovL2NzcmMubmlzdC5nb3YvZ3JvdXBzL1NUTS9jYXZwL2RvY3VtZW50cy9zaHMvc2hhMjU2LTM4NC01MTIucGRmCiAgKgogICogU0hBLTI1NiBjb2RlIGJ5IEplYW4tTHVjIENvb2tlIDxqbGNvb2tlQGNlcnRhaW5rZXkuY29tPi4KICAqCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhc2guYyBiL2NyeXB0by9zaGFzaC5jCmluZGV4IGQ1YTJiNjEuLjdhNjU5NzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGFzaC5jCisrKyBiL2NyeXB0by9zaGFzaC5jCkBAIC0xOCwxNSArMTgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSBjcnlwdG9fc2hhc2hfdHlwZTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3NoYXNoICpfX2NyeXB0b19zaGFzaF9jYXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih0Zm0sIHN0cnVjdCBjcnlwdG9fc2hhc2gsIGJhc2UpOwotfQotCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSBjcnlwdG9fc2hhc2hfdHlwZTsKKwogc3RhdGljIGludCBzaGFzaF9zZXRrZXlfdW5hbGlnbmVkKHN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSwgY29uc3QgdTggKmtleSwKIAkJCQkgIHVuc2lnbmVkIGludCBrZXlsZW4pCiB7CkBAIC0yODIsOCArMjc3LDcgQEAKIAlpZiAoIWNyeXB0b19tb2RfZ2V0KGNhbGcpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXNoYXNoID0gX19jcnlwdG9fc2hhc2hfY2FzdChjcnlwdG9fY3JlYXRlX3RmbSgKLQkJY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKSk7CisJc2hhc2ggPSBjcnlwdG9fY3JlYXRlX3RmbShjYWxnLCAmY3J5cHRvX3NoYXNoX3R5cGUpOwogCWlmIChJU19FUlIoc2hhc2gpKSB7CiAJCWNyeXB0b19tb2RfcHV0KGNhbGcpOwogCQlyZXR1cm4gUFRSX0VSUihzaGFzaCk7CkBAIC0zOTEsOCArMzg1LDcgQEAKIAlpZiAoIWNyeXB0b19tb2RfZ2V0KGNhbGcpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXNoYXNoID0gX19jcnlwdG9fc2hhc2hfY2FzdChjcnlwdG9fY3JlYXRlX3RmbSgKLQkJY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKSk7CisJc2hhc2ggPSBjcnlwdG9fY3JlYXRlX3RmbShjYWxnLCAmY3J5cHRvX3NoYXNoX3R5cGUpOwogCWlmIChJU19FUlIoc2hhc2gpKSB7CiAJCWNyeXB0b19tb2RfcHV0KGNhbGcpOwogCQlyZXR1cm4gUFRSX0VSUihzaGFzaCk7CkBAIC00NDIsOCArNDM1LDYgQEAKIHN0YXRpYyBpbnQgY3J5cHRvX3NoYXNoX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCiAJCQkJIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCiB7Ci0JaWYgKGZyb250ZW5kLT50eXBlICE9IENSWVBUT19BTEdfVFlQRV9TSEFTSCkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4Miw4ICs0NzMsNyBAQAogc3RydWN0IGNyeXB0b19zaGFzaCAqY3J5cHRvX2FsbG9jX3NoYXNoKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwKIAkJCQkJdTMyIG1hc2spCiB7Ci0JcmV0dXJuIF9fY3J5cHRvX3NoYXNoX2Nhc3QoCi0JCWNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsICZjcnlwdG9fc2hhc2hfdHlwZSwgdHlwZSwgbWFzaykpOworCXJldHVybiBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAmY3J5cHRvX3NoYXNoX3R5cGUsIHR5cGUsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FsbG9jX3NoYXNoKTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3RjcnlwdC5jIGIvY3J5cHRvL3RjcnlwdC5jCmluZGV4IDI4YTQ1YTEuLmMzYzkxMjQgMTAwNjQ0Ci0tLSBhL2NyeXB0by90Y3J5cHQuYworKysgYi9jcnlwdG8vdGNyeXB0LmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkiY2FzdDYiLCAiYXJjNCIsICJtaWNoYWVsX21pYyIsICJkZWZsYXRlIiwgImNyYzMyYyIsICJ0ZWEiLCAieHRlYSIsCiAJImtoYXphZCIsICJ3cDUxMiIsICJ3cDM4NCIsICJ3cDI1NiIsICJ0bmVwcmVzIiwgInhldGEiLCAgImZjcnlwdCIsCiAJImNhbWVsbGlhIiwgInNlZWQiLCAic2Fsc2EyMCIsICJybWQxMjgiLCAicm1kMTYwIiwgInJtZDI1NiIsICJybWQzMjAiLAotCSJsem8iLCAiY3RzIiwgTlVMTAorCSJsem8iLCAiY3RzIiwgInpsaWIiLCBOVUxMCiB9OwogCiBzdGF0aWMgaW50IHRlc3RfY2lwaGVyX2ppZmZpZXMoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLCBpbnQgZW5jLApAQCAtNjYxLDYgKzY2MSwxMCBAQAogCQl0Y3J5cHRfdGVzdCgiZWNiKHNlZWQpIik7CiAJCWJyZWFrOwogCisJY2FzZSA0NDoKKwkJdGNyeXB0X3Rlc3QoInpsaWIiKTsKKwkJYnJlYWs7CisKIAljYXNlIDEwMDoKIAkJdGNyeXB0X3Rlc3QoImhtYWMobWQ1KSIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmMgYi9jcnlwdG8vdGVzdG1nci5jCmluZGV4IGE3NWYxMWYuLmI1MGMzYzYgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmMKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuYwpAQCAtNzIsNiArNzIsMTMgQEAKIAl9IGNvbXAsIGRlY29tcDsKIH07CiAKK3N0cnVjdCBwY29tcF90ZXN0X3N1aXRlIHsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgcGNvbXBfdGVzdHZlYyAqdmVjczsKKwkJdW5zaWduZWQgaW50IGNvdW50OworCX0gY29tcCwgZGVjb21wOworfTsKKwogc3RydWN0IGhhc2hfdGVzdF9zdWl0ZSB7CiAJc3RydWN0IGhhc2hfdGVzdHZlYyAqdmVjczsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CkBAIC04Niw2ICs5Myw3IEBACiAJCXN0cnVjdCBhZWFkX3Rlc3Rfc3VpdGUgYWVhZDsKIAkJc3RydWN0IGNpcGhlcl90ZXN0X3N1aXRlIGNpcGhlcjsKIAkJc3RydWN0IGNvbXBfdGVzdF9zdWl0ZSBjb21wOworCQlzdHJ1Y3QgcGNvbXBfdGVzdF9zdWl0ZSBwY29tcDsKIAkJc3RydWN0IGhhc2hfdGVzdF9zdWl0ZSBoYXNoOwogCX0gc3VpdGU7CiB9OwpAQCAtODk4LDYgKzkwNiwxNTkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHRlc3RfcGNvbXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkgICAgICBzdHJ1Y3QgcGNvbXBfdGVzdHZlYyAqY3RlbXBsYXRlLAorCQkgICAgICBzdHJ1Y3QgcGNvbXBfdGVzdHZlYyAqZHRlbXBsYXRlLCBpbnQgY3Rjb3VudCwKKwkJICAgICAgaW50IGR0Y291bnQpCit7CisJY29uc3QgY2hhciAqYWxnbyA9IGNyeXB0b190Zm1fYWxnX2RyaXZlcl9uYW1lKGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciByZXN1bHRbQ09NUF9CVUZfU0laRV07CisJaW50IGVycm9yOworCisJZm9yIChpID0gMDsgaSA8IGN0Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0IHJlcTsKKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc19zZXR1cCh0Zm0sIGN0ZW1wbGF0ZVtpXS5wYXJhbXMsCisJCQkJCSAgICAgIGN0ZW1wbGF0ZVtpXS5wYXJhbXNpemUpOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gc2V0dXAgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfaW5pdCh0Zm0pOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gaW5pdCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisKKwkJcmVxLm5leHRfaW4gPSBjdGVtcGxhdGVbaV0uaW5wdXQ7CisJCXJlcS5hdmFpbF9pbiA9IGN0ZW1wbGF0ZVtpXS5pbmxlbiAvIDI7CisJCXJlcS5uZXh0X291dCA9IHJlc3VsdDsKKwkJcmVxLmF2YWlsX291dCA9IGN0ZW1wbGF0ZVtpXS5vdXRsZW4gLyAyOworCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX3VwZGF0ZSh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiB1cGRhdGUgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJLyogQWRkIHJlbWFpbmluZyBpbnB1dCBkYXRhICovCisJCXJlcS5hdmFpbF9pbiArPSAoY3RlbXBsYXRlW2ldLmlubGVuICsgMSkgLyAyOworCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX3VwZGF0ZSh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiB1cGRhdGUgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJLyogUHJvdmlkZSByZW1haW5pbmcgb3V0cHV0IHNwYWNlICovCisJCXJlcS5hdmFpbF9vdXQgKz0gQ09NUF9CVUZfU0laRSAtIGN0ZW1wbGF0ZVtpXS5vdXRsZW4gLyAyOworCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX2ZpbmFsKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiBmaW5hbCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQlpZiAoQ09NUF9CVUZfU0laRSAtIHJlcS5hdmFpbF9vdXQgIT0gY3RlbXBsYXRlW2ldLm91dGxlbikgeworCQkJcHJfZXJyKCJhbGc6IGNvbXA6IENvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAlczogIgorCQkJICAgICAgICJvdXRwdXQgbGVuID0gJWQgKGV4cGVjdGVkICVkKVxuIiwgaSArIDEsIGFsZ28sCisJCQkgICAgICAgQ09NUF9CVUZfU0laRSAtIHJlcS5hdmFpbF9vdXQsCisJCQkgICAgICAgY3RlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChtZW1jbXAocmVzdWx0LCBjdGVtcGxhdGVbaV0ub3V0cHV0LCBjdGVtcGxhdGVbaV0ub3V0bGVuKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBDb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgIgorCQkJICAgICAgICIlc1xuIiwgaSArIDEsIGFsZ28pOworCQkJaGV4ZHVtcChyZXN1bHQsIGN0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZHRjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBjb21wX3JlcXVlc3QgcmVxOworCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3Nfc2V0dXAodGZtLCBkdGVtcGxhdGVbaV0ucGFyYW1zLAorCQkJCQkJZHRlbXBsYXRlW2ldLnBhcmFtc2l6ZSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIHNldHVwIGZhaWxlZCBvbiAiCisJCQkgICAgICAgInRlc3QgJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sCisJCQkgICAgICAgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc19pbml0KHRmbSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIGluaXQgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOworCisJCXJlcS5uZXh0X2luID0gZHRlbXBsYXRlW2ldLmlucHV0OworCQlyZXEuYXZhaWxfaW4gPSBkdGVtcGxhdGVbaV0uaW5sZW4gLyAyOworCQlyZXEubmV4dF9vdXQgPSByZXN1bHQ7CisJCXJlcS5hdmFpbF9vdXQgPSBkdGVtcGxhdGVbaV0ub3V0bGVuIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX3VwZGF0ZSh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiB1cGRhdGUgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBBZGQgcmVtYWluaW5nIGlucHV0IGRhdGEgKi8KKwkJcmVxLmF2YWlsX2luICs9IChkdGVtcGxhdGVbaV0uaW5sZW4gKyAxKSAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc191cGRhdGUodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gdXBkYXRlIGZhaWxlZCBvbiAiCisJCQkgICAgICAgInRlc3QgJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sCisJCQkgICAgICAgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJLyogUHJvdmlkZSByZW1haW5pbmcgb3V0cHV0IHNwYWNlICovCisJCXJlcS5hdmFpbF9vdXQgKz0gQ09NUF9CVUZfU0laRSAtIGR0ZW1wbGF0ZVtpXS5vdXRsZW4gLyAyOworCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfZmluYWwodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gZmluYWwgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQlpZiAoQ09NUF9CVUZfU0laRSAtIHJlcS5hdmFpbF9vdXQgIT0gZHRlbXBsYXRlW2ldLm91dGxlbikgeworCQkJcHJfZXJyKCJhbGc6IGNvbXA6IERlY29tcHJlc3Npb24gdGVzdCAlZCBmYWlsZWQgZm9yICIKKwkJCSAgICAgICAiJXM6IG91dHB1dCBsZW4gPSAlZCAoZXhwZWN0ZWQgJWQpXG4iLCBpICsgMSwKKwkJCSAgICAgICBhbGdvLCBDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCwKKwkJCSAgICAgICBkdGVtcGxhdGVbaV0ub3V0bGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKG1lbWNtcChyZXN1bHQsIGR0ZW1wbGF0ZVtpXS5vdXRwdXQsIGR0ZW1wbGF0ZVtpXS5vdXRsZW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IERlY29tcHJlc3Npb24gdGVzdCAlZCBmYWlsZWQgZm9yICIKKwkJCSAgICAgICAiJXNcbiIsIGkgKyAxLCBhbGdvKTsKKwkJCWhleGR1bXAocmVzdWx0LCBkdGVtcGxhdGVbaV0ub3V0bGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYWxnX3Rlc3RfYWVhZChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZHJpdmVyLAogCQkJIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKQEAgLTEwMDcsNiArMTE2OCwyOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYWxnX3Rlc3RfcGNvbXAoY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmRyaXZlciwKKwkJCSAgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbTsKKwlpbnQgZXJyOworCisJdGZtID0gY3J5cHRvX2FsbG9jX3Bjb21wKGRyaXZlciwgdHlwZSwgbWFzayk7CisJaWYgKElTX0VSUih0Zm0pKSB7CisJCXByX2VycigiYWxnOiBwY29tcDogRmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLAorCQkgICAgICAgZHJpdmVyLCBQVFJfRVJSKHRmbSkpOworCQlyZXR1cm4gUFRSX0VSUih0Zm0pOworCX0KKworCWVyciA9IHRlc3RfcGNvbXAodGZtLCBkZXNjLT5zdWl0ZS5wY29tcC5jb21wLnZlY3MsCisJCQkgZGVzYy0+c3VpdGUucGNvbXAuZGVjb21wLnZlY3MsCisJCQkgZGVzYy0+c3VpdGUucGNvbXAuY29tcC5jb3VudCwKKwkJCSBkZXNjLT5zdWl0ZS5wY29tcC5kZWNvbXAuY291bnQpOworCisJY3J5cHRvX2ZyZWVfcGNvbXAodGZtKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGFsZ190ZXN0X2hhc2goY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmRyaXZlciwKIAkJCSB1MzIgdHlwZSwgdTMyIG1hc2spCiB7CkBAIC0xODM1LDYgKzIwMTgsMjEgQEAKIAkJCQl9CiAJCQl9CiAJCX0KKwl9LCB7CisJCS5hbGcgPSAiemxpYiIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfcGNvbXAsCisJCS5zdWl0ZSA9IHsKKwkJCS5wY29tcCA9IHsKKwkJCQkuY29tcCA9IHsKKwkJCQkJLnZlY3MgPSB6bGliX2NvbXBfdHZfdGVtcGxhdGUsCisJCQkJCS5jb3VudCA9IFpMSUJfQ09NUF9URVNUX1ZFQ1RPUlMKKwkJCQl9LAorCQkJCS5kZWNvbXAgPSB7CisJCQkJCS52ZWNzID0gemxpYl9kZWNvbXBfdHZfdGVtcGxhdGUsCisJCQkJCS5jb3VudCA9IFpMSUJfREVDT01QX1RFU1RfVkVDVE9SUworCQkJCX0KKwkJCX0KKwkJfQogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmggYi9jcnlwdG8vdGVzdG1nci5oCmluZGV4IDEzMjk1M2UuLjUyNmYwMGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmgKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuaApAQCAtMTUsNiArMTUsMTEgQEAKICNpZm5kZWYgX0NSWVBUT19URVNUTUdSX0gKICNkZWZpbmUgX0NSWVBUT19URVNUTUdSX0gKIAorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CisKKyNpbmNsdWRlIDxjcnlwdG8vY29tcHJlc3MuaD4KKwogI2RlZmluZSBNQVhfRElHRVNUX1NJWkUJCTY0CiAjZGVmaW5lIE1BWF9UQVAJCQk4CiAKQEAgLTgzNDcsMTAgKzgzNTIsMTkgQEAKIAljaGFyIG91dHB1dFtDT01QX0JVRl9TSVpFXTsKIH07CiAKK3N0cnVjdCBwY29tcF90ZXN0dmVjIHsKKwl2b2lkICpwYXJhbXM7CisJdW5zaWduZWQgaW50IHBhcmFtc2l6ZTsKKwlpbnQgaW5sZW4sIG91dGxlbjsKKwljaGFyIGlucHV0W0NPTVBfQlVGX1NJWkVdOworCWNoYXIgb3V0cHV0W0NPTVBfQlVGX1NJWkVdOworfTsKKwogLyoKICAqIERlZmxhdGUgdGVzdCB2ZWN0b3JzIChudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncykuCiAgKiBQYXJhbXM6IHdpbmJpdHM9LTExLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIE1BWF9NRU1fTEVWRUwuCiAgKi8KKwogI2RlZmluZSBERUZMQVRFX0NPTVBfVEVTVF9WRUNUT1JTIDIKICNkZWZpbmUgREVGTEFURV9ERUNPTVBfVEVTVF9WRUNUT1JTIDIKIApAQCAtODQyNiw2ICs4NDQwLDEzOSBAQAogCX0sCiB9OwogCisjZGVmaW5lIFpMSUJfQ09NUF9URVNUX1ZFQ1RPUlMgMgorI2RlZmluZSBaTElCX0RFQ09NUF9URVNUX1ZFQ1RPUlMgMgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdHJ1Y3QgbmxhdHRyIG5sYTsKKwlpbnQgdmFsOworfSBkZWZsYXRlX2NvbXBfcGFyYW1zW10gPSB7CisJeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfTEVWRUwsCisJCX0sCisJCS52YWwJCQk9IFpfREVGQVVMVF9DT01QUkVTU0lPTiwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9NRVRIT0QsCisJCX0sCisJCS52YWwJCQk9IFpfREVGTEFURUQsCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfV0lORE9XQklUUywKKwkJfSwKKwkJLnZhbAkJCT0gLTExLAorCX0sIHsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX01FTUxFVkVMLAorCQl9LAorCQkudmFsCQkJPSBNQVhfTUVNX0xFVkVMLAorCX0sIHsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX1NUUkFURUdZLAorCQl9LAorCQkudmFsCQkJPSBaX0RFRkFVTFRfU1RSQVRFR1ksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJc3RydWN0IG5sYXR0ciBubGE7CisJaW50IHZhbDsKK30gZGVmbGF0ZV9kZWNvbXBfcGFyYW1zW10gPSB7CisJeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0RFQ09NUF9XSU5ET1dCSVRTLAorCQl9LAorCQkudmFsCQkJPSAtMTEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwY29tcF90ZXN0dmVjIHpsaWJfY29tcF90dl90ZW1wbGF0ZVtdID0geworCXsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2NvbXBfcGFyYW1zLAorCQkucGFyYW1zaXplID0gc2l6ZW9mKGRlZmxhdGVfY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSA3MCwKKwkJLm91dGxlbgk9IDM4LAorCQkuaW5wdXQJPSAiSm9pbiB1cyBub3cgYW5kIHNoYXJlIHRoZSBzb2Z0d2FyZSAiCisJCQkiSm9pbiB1cyBub3cgYW5kIHNoYXJlIHRoZSBzb2Z0d2FyZSAiLAorCQkub3V0cHV0CT0gIlx4ZjNceGNhXHhjZlx4Y2NceDUzXHgyOFx4MmRceDU2IgorCQkJICAiXHhjOFx4Y2JceDJmXHg1N1x4NDhceGNjXHg0Ylx4NTEiCisJCQkgICJceDI4XHhjZVx4NDhceDJjXHg0YVx4NTVceDI4XHhjOSIKKwkJCSAgIlx4NDhceDU1XHgyOFx4Y2VceDRmXHgyYlx4MjlceDA3IgorCQkJICAiXHg3MVx4YmNceDA4XHgyYlx4MDFceDAwIiwKKwl9LCB7CisJCS5wYXJhbXMgPSAmZGVmbGF0ZV9jb21wX3BhcmFtcywKKwkJLnBhcmFtc2l6ZSA9IHNpemVvZihkZWZsYXRlX2NvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gMTkxLAorCQkub3V0bGVuCT0gMTIyLAorCQkuaW5wdXQJPSAiVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIERFRkxBVEUiCisJCQkiY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgVGhpcyBkb2N1bWVudCBkZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiBvZiAiCisJCQkidGhlIERFRkxBVEUgYWxnb3JpdGhtIHRvIHRoZSBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sLiIsCisJCS5vdXRwdXQJPSAiXHg1ZFx4OGRceDMxXHgwZVx4YzJceDMwXHgxMFx4MDQiCisJCQkgICJceGJmXHhiMlx4MmZceGM4XHgxZlx4MTBceDA0XHgwOSIKKwkJCSAgIlx4ODlceGMyXHg4NVx4M2ZceDcwXHhiMVx4MmZceGY4IgorCQkJICAiXHgyNFx4ZGJceDY3XHhkOVx4NDdceGMxXHhlZlx4NDkiCisJCQkgICJceDY4XHgxMlx4NTFceGFlXHg3Nlx4NjdceGQ2XHgyNyIKKwkJCSAgIlx4MTlceDg4XHgxYVx4ZGVceDg1XHhhYlx4MjFceGYyIgorCQkJICAiXHgwOFx4NWRceDE2XHgxZVx4MjBceDA0XHgyZFx4YWQiCisJCQkgICJceGYzXHgxOFx4YTJceDE1XHg4NVx4MmRceDY5XHhjNCIKKwkJCSAgIlx4NDJceDgzXHgyM1x4YjZceDZjXHg4OVx4NzFceDliIgorCQkJICAiXHhlZlx4Y2ZceDhiXHg5Zlx4Y2ZceDMzXHhjYVx4MmYiCisJCQkgICJceGVkXHg2Mlx4YTlceDRjXHg4MFx4ZmZceDEzXHhhZiIKKwkJCSAgIlx4NTJceDM3XHhlZFx4MGVceDUyXHg2Ylx4NTlceDAyIgorCQkJICAiXHhkOVx4NGVceGU4XHg3YVx4NzZceDFkXHgwMlx4OTgiCisJCQkgICJceGZlXHg4YVx4ODdceDgzXHhhM1x4NGZceDU2XHg4YSIKKwkJCSAgIlx4YjhceDllXHg4ZVx4NWNceDU3XHhkM1x4YTBceDc5IgorCQkJICAiXHhmYVx4MDIiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBjb21wX3Rlc3R2ZWMgemxpYl9kZWNvbXBfdHZfdGVtcGxhdGVbXSA9IHsKKwl7CisJCS5wYXJhbXMgPSAmZGVmbGF0ZV9kZWNvbXBfcGFyYW1zLAorCQkucGFyYW1zaXplID0gc2l6ZW9mKGRlZmxhdGVfZGVjb21wX3BhcmFtcyksCisJCS5pbmxlbgk9IDEyMiwKKwkJLm91dGxlbgk9IDE5MSwKKwkJLmlucHV0CT0gIlx4NWRceDhkXHgzMVx4MGVceGMyXHgzMFx4MTBceDA0IgorCQkJICAiXHhiZlx4YjJceDJmXHhjOFx4MWZceDEwXHgwNFx4MDkiCisJCQkgICJceDg5XHhjMlx4ODVceDNmXHg3MFx4YjFceDJmXHhmOCIKKwkJCSAgIlx4MjRceGRiXHg2N1x4ZDlceDQ3XHhjMVx4ZWZceDQ5IgorCQkJICAiXHg2OFx4MTJceDUxXHhhZVx4NzZceDY3XHhkNlx4MjciCisJCQkgICJceDE5XHg4OFx4MWFceGRlXHg4NVx4YWJceDIxXHhmMiIKKwkJCSAgIlx4MDhceDVkXHgxNlx4MWVceDIwXHgwNFx4MmRceGFkIgorCQkJICAiXHhmM1x4MThceGEyXHgxNVx4ODVceDJkXHg2OVx4YzQiCisJCQkgICJceDQyXHg4M1x4MjNceGI2XHg2Y1x4ODlceDcxXHg5YiIKKwkJCSAgIlx4ZWZceGNmXHg4Ylx4OWZceGNmXHgzM1x4Y2FceDJmIgorCQkJICAiXHhlZFx4NjJceGE5XHg0Y1x4ODBceGZmXHgxM1x4YWYiCisJCQkgICJceDUyXHgzN1x4ZWRceDBlXHg1Mlx4NmJceDU5XHgwMiIKKwkJCSAgIlx4ZDlceDRlXHhlOFx4N2FceDc2XHgxZFx4MDJceDk4IgorCQkJICAiXHhmZVx4OGFceDg3XHg4M1x4YTNceDRmXHg1Nlx4OGEiCisJCQkgICJceGI4XHg5ZVx4OGVceDVjXHg1N1x4ZDNceGEwXHg3OSIKKwkJCSAgIlx4ZmFceDAyIiwKKwkJLm91dHB1dAk9ICJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBhIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgREVGTEFURSIKKwkJCSJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKKwkJCSJ0aGUgREVGTEFURSBhbGdvcml0aG0gdG8gdGhlIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wuIiwKKwl9LCB7CisJCS5wYXJhbXMgPSAmZGVmbGF0ZV9kZWNvbXBfcGFyYW1zLAorCQkucGFyYW1zaXplID0gc2l6ZW9mKGRlZmxhdGVfZGVjb21wX3BhcmFtcyksCisJCS5pbmxlbgk9IDM4LAorCQkub3V0bGVuCT0gNzAsCisJCS5pbnB1dAk9ICJceGYzXHhjYVx4Y2ZceGNjXHg1M1x4MjhceDJkXHg1NiIKKwkJCSAgIlx4YzhceGNiXHgyZlx4NTdceDQ4XHhjY1x4NGJceDUxIgorCQkJICAiXHgyOFx4Y2VceDQ4XHgyY1x4NGFceDU1XHgyOFx4YzkiCisJCQkgICJceDQ4XHg1NVx4MjhceGNlXHg0Zlx4MmJceDI5XHgwNyIKKwkJCSAgIlx4NzFceGJjXHgwOFx4MmJceDAxXHgwMCIsCisJCS5vdXRwdXQJPSAiSm9pbiB1cyBub3cgYW5kIHNoYXJlIHRoZSBzb2Z0d2FyZSAiCisJCQkiSm9pbiB1cyBub3cgYW5kIHNoYXJlIHRoZSBzb2Z0d2FyZSAiLAorCX0sCit9OworCiAvKgogICogTFpPIHRlc3QgdmVjdG9ycyAobnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MpLgogICovCmRpZmYgLS1naXQgYS9jcnlwdG8vemxpYi5jIGIvY3J5cHRvL3psaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzYwOWJhCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3psaWIuYwpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIFpsaWIgYWxnb3JpdGhtCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIEJhc2VkIG9uIGRlZmxhdGUuYywgd2hpY2ggaXMKKyAqIENvcHlyaWdodCAoYykgMjAwMyBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZJWE1FOiBkZWZsYXRlIHRyYW5zZm9ybXMgd2lsbCByZXF1aXJlIHVwIHRvIGEgdG90YWwgb2YgYWJvdXQgNDM2ayBvZiBrZXJuZWwKKyAqIG1lbW9yeSBvbiBpMzg2ICgzOTBrIGZvciBjb21wcmVzc2lvbiwgdGhlIHJlc3QgZm9yIGRlY29tcHJlc3Npb24pLCBhcyB0aGUKKyAqIGN1cnJlbnQgemxpYiBrZXJuZWwgY29kZSB1c2VzIGEgd29yc3QgY2FzZSBwcmUtYWxsb2NhdGlvbiBzeXN0ZW0gYnkgZGVmYXVsdC4KKyAqIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgc28gdGhhdCB0aGUgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZCBpcyBwcm9wZXJseQorICogcmVsYXRlZCB0byB0aGUgd2luYml0cyBhbmQgbWVtbGV2ZWwgcGFyYW1ldGVycy4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSIlczogIiBmbXQsIF9fZnVuY19fCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvemxpYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oPgorCisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKworCitzdHJ1Y3QgemxpYl9jdHggeworCXN0cnVjdCB6X3N0cmVhbV9zIGNvbXBfc3RyZWFtOworCXN0cnVjdCB6X3N0cmVhbV9zIGRlY29tcF9zdHJlYW07CisJaW50IGRlY29tcF93aW5kb3dCaXRzOworfTsKKworCitzdGF0aWMgdm9pZCB6bGliX2NvbXBfZXhpdChzdHJ1Y3QgemxpYl9jdHggKmN0eCkKK3sKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CisKKwlpZiAoc3RyZWFtLT53b3Jrc3BhY2UpIHsKKwkJemxpYl9kZWZsYXRlRW5kKHN0cmVhbSk7CisJCXZmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKKwkJc3RyZWFtLT53b3Jrc3BhY2UgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgemxpYl9kZWNvbXBfZXhpdChzdHJ1Y3QgemxpYl9jdHggKmN0eCkKK3sKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+ZGVjb21wX3N0cmVhbTsKKworCWlmIChzdHJlYW0tPndvcmtzcGFjZSkgeworCQl6bGliX2luZmxhdGVFbmQoc3RyZWFtKTsKKwkJa2ZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IHpsaWJfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB6bGliX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgemxpYl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwl6bGliX2NvbXBfZXhpdChjdHgpOworCXpsaWJfZGVjb21wX2V4aXQoY3R4KTsKK30KKworCitzdGF0aWMgaW50IHpsaWJfY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgemxpYl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmNvbXBfc3RyZWFtOworCXN0cnVjdCBubGF0dHIgKnRiW1pMSUJfQ09NUF9NQVggKyAxXTsKKwlzaXplX3Qgd29ya3NwYWNlc2l6ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gbmxhX3BhcnNlKHRiLCBaTElCX0NPTVBfTUFYLCBwYXJhbXMsIGxlbiwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXpsaWJfY29tcF9leGl0KGN0eCk7CisKKwl3b3Jrc3BhY2VzaXplID0gemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKTsKKwlzdHJlYW0tPndvcmtzcGFjZSA9IHZtYWxsb2Mod29ya3NwYWNlc2l6ZSk7CisJaWYgKCFzdHJlYW0tPndvcmtzcGFjZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoc3RyZWFtLT53b3Jrc3BhY2UsIDAsIHdvcmtzcGFjZXNpemUpOworCXJldCA9IHpsaWJfZGVmbGF0ZUluaXQyKHN0cmVhbSwKKwkJCQl0YltaTElCX0NPTVBfTEVWRUxdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX0xFVkVMXSkKKwkJCQkJOiBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCisJCQkJdGJbWkxJQl9DT01QX01FVEhPRF0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTUVUSE9EXSkKKwkJCQkJOiBaX0RFRkxBVEVELAorCQkJCXRiW1pMSUJfQ09NUF9XSU5ET1dCSVRTXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9XSU5ET1dCSVRTXSkKKwkJCQkJOiBNQVhfV0JJVFMsCisJCQkJdGJbWkxJQl9DT01QX01FTUxFVkVMXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9NRU1MRVZFTF0pCisJCQkJCTogREVGX01FTV9MRVZFTCwKKwkJCQl0YltaTElCX0NPTVBfU1RSQVRFR1ldCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX1NUUkFURUdZXSkKKwkJCQkJOiBaX0RFRkFVTFRfU1RSQVRFR1kpOworCWlmIChyZXQgIT0gWl9PSykgeworCQl2ZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5jb21wX3N0cmVhbTsKKworCXJldCA9IHpsaWJfZGVmbGF0ZVJlc2V0KHN0cmVhbSk7CisJaWYgKHJldCAhPSBaX09LKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfY29tcHJlc3NfdXBkYXRlKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+Y29tcF9zdHJlYW07CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldVxuIiwgcmVxLT5hdmFpbF9pbiwgcmVxLT5hdmFpbF9vdXQpOworCXN0cmVhbS0+bmV4dF9pbiA9IHJlcS0+bmV4dF9pbjsKKwlzdHJlYW0tPmF2YWlsX2luID0gcmVxLT5hdmFpbF9pbjsKKwlzdHJlYW0tPm5leHRfb3V0ID0gcmVxLT5uZXh0X291dDsKKwlzdHJlYW0tPmF2YWlsX291dCA9IHJlcS0+YXZhaWxfb3V0OworCisJcmV0ID0gemxpYl9kZWZsYXRlKHN0cmVhbSwgWl9OT19GTFVTSCk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIFpfT0s6CisJCWJyZWFrOworCisJY2FzZSBaX0JVRl9FUlJPUjoKKwkJcHJfZGVidWcoInpsaWJfZGVmbGF0ZSBjb3VsZCBub3QgbWFrZSBwcm9ncmVzc1xuIik7CisJCXJldHVybiAtRUFHQUlOOworCisJZGVmYXVsdDoKKwkJcHJfZGVidWcoInpsaWJfZGVmbGF0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1IChjb25zdW1lZCAldSwgcHJvZHVjZWQgJXUpXG4iLAorCQkgc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQsCisJCSByZXEtPmF2YWlsX2luIC0gc3RyZWFtLT5hdmFpbF9pbiwKKwkJIHJlcS0+YXZhaWxfb3V0IC0gc3RyZWFtLT5hdmFpbF9vdXQpOworCXJlcS0+bmV4dF9pbiA9IHN0cmVhbS0+bmV4dF9pbjsKKwlyZXEtPmF2YWlsX2luID0gc3RyZWFtLT5hdmFpbF9pbjsKKwlyZXEtPm5leHRfb3V0ID0gc3RyZWFtLT5uZXh0X291dDsKKwlyZXEtPmF2YWlsX291dCA9IHN0cmVhbS0+YXZhaWxfb3V0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJICAgICAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5jb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlyZXQgPSB6bGliX2RlZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CisJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJcHJfZGVidWcoInpsaWJfZGVmbGF0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1IChjb25zdW1lZCAldSwgcHJvZHVjZWQgJXUpXG4iLAorCQkgc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQsCisJCSByZXEtPmF2YWlsX2luIC0gc3RyZWFtLT5hdmFpbF9pbiwKKwkJIHJlcS0+YXZhaWxfb3V0IC0gc3RyZWFtLT5hdmFpbF9vdXQpOworCXJlcS0+bmV4dF9pbiA9IHN0cmVhbS0+bmV4dF9pbjsKKwlyZXEtPmF2YWlsX2luID0gc3RyZWFtLT5hdmFpbF9pbjsKKwlyZXEtPm5leHRfb3V0ID0gc3RyZWFtLT5uZXh0X291dDsKKwlyZXEtPmF2YWlsX291dCA9IHN0cmVhbS0+YXZhaWxfb3V0OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgemxpYl9kZWNvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwgdm9pZCAqcGFyYW1zLAorCQkJCSB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+ZGVjb21wX3N0cmVhbTsKKwlzdHJ1Y3QgbmxhdHRyICp0YltaTElCX0RFQ09NUF9NQVggKyAxXTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IG5sYV9wYXJzZSh0YiwgWkxJQl9ERUNPTVBfTUFYLCBwYXJhbXMsIGxlbiwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXpsaWJfZGVjb21wX2V4aXQoY3R4KTsKKworCWN0eC0+ZGVjb21wX3dpbmRvd0JpdHMgPSB0YltaTElCX0RFQ09NUF9XSU5ET1dCSVRTXQorCQkJCSA/IG5sYV9nZXRfdTMyKHRiW1pMSUJfREVDT01QX1dJTkRPV0JJVFNdKQorCQkJCSA6IERFRl9XQklUUzsKKworCXN0cmVhbS0+d29ya3NwYWNlID0ga3phbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHpsaWJfaW5mbGF0ZUluaXQyKHN0cmVhbSwgY3R4LT5kZWNvbXBfd2luZG93Qml0cyk7CisJaWYgKHJldCAhPSBaX09LKSB7CisJCWtmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKKwkJc3RyZWFtLT53b3Jrc3BhY2UgPSBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKKworCXJldCA9IHpsaWJfaW5mbGF0ZVJlc2V0KHN0cmVhbSk7CisJaWYgKHJldCAhPSBaX09LKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCSAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmRlY29tcF9zdHJlYW07CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldVxuIiwgcmVxLT5hdmFpbF9pbiwgcmVxLT5hdmFpbF9vdXQpOworCXN0cmVhbS0+bmV4dF9pbiA9IHJlcS0+bmV4dF9pbjsKKwlzdHJlYW0tPmF2YWlsX2luID0gcmVxLT5hdmFpbF9pbjsKKwlzdHJlYW0tPm5leHRfb3V0ID0gcmVxLT5uZXh0X291dDsKKwlzdHJlYW0tPmF2YWlsX291dCA9IHJlcS0+YXZhaWxfb3V0OworCisJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgWl9PSzoKKwljYXNlIFpfU1RSRUFNX0VORDoKKwkJYnJlYWs7CisKKwljYXNlIFpfQlVGX0VSUk9SOgorCQlwcl9kZWJ1ZygiemxpYl9pbmZsYXRlIGNvdWxkIG5vdCBtYWtlIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiemxpYl9pbmZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9kZWNvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmRlY29tcF9zdHJlYW07CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldVxuIiwgcmVxLT5hdmFpbF9pbiwgcmVxLT5hdmFpbF9vdXQpOworCXN0cmVhbS0+bmV4dF9pbiA9IHJlcS0+bmV4dF9pbjsKKwlzdHJlYW0tPmF2YWlsX2luID0gcmVxLT5hdmFpbF9pbjsKKwlzdHJlYW0tPm5leHRfb3V0ID0gcmVxLT5uZXh0X291dDsKKwlzdHJlYW0tPmF2YWlsX291dCA9IHJlcS0+YXZhaWxfb3V0OworCisJaWYgKGRjdHgtPmRlY29tcF93aW5kb3dCaXRzIDwgMCkgeworCQlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiB6bGliLCB3aGljaCBzb21ldGltZXMgd2FudHMgdG8gdGFzdGUgYW4KKwkJICogZXh0cmEgYnl0ZSB3aGVuIGJlaW5nIHVzZWQgaW4gdGhlICh1bmRvY3VtZW50ZWQpIHJhdyBkZWZsYXRlCisJCSAqIG1vZGUuIChGcm9tIFVTQUdJKS4KKwkJICovCisJCWlmIChyZXQgPT0gWl9PSyAmJiAhc3RyZWFtLT5hdmFpbF9pbiAmJiBzdHJlYW0tPmF2YWlsX291dCkgeworCQkJY29uc3Qgdm9pZCAqc2F2ZWRfbmV4dF9pbiA9IHN0cmVhbS0+bmV4dF9pbjsKKwkJCXU4IHplcm9zdHVmZiA9IDA7CisKKwkJCXN0cmVhbS0+bmV4dF9pbiA9ICZ6ZXJvc3R1ZmY7CisJCQlzdHJlYW0tPmF2YWlsX2luID0gMTsKKwkJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwkJCXN0cmVhbS0+bmV4dF9pbiA9IHNhdmVkX25leHRfaW47CisJCQlzdHJlYW0tPmF2YWlsX2luID0gMDsKKwkJfQorCX0gZWxzZQorCQlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CisJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJcHJfZGVidWcoInpsaWJfaW5mbGF0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1IChjb25zdW1lZCAldSwgcHJvZHVjZWQgJXUpXG4iLAorCQkgc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQsCisJCSByZXEtPmF2YWlsX2luIC0gc3RyZWFtLT5hdmFpbF9pbiwKKwkJIHJlcS0+YXZhaWxfb3V0IC0gc3RyZWFtLT5hdmFpbF9vdXQpOworCXJlcS0+bmV4dF9pbiA9IHN0cmVhbS0+bmV4dF9pbjsKKwlyZXEtPmF2YWlsX2luID0gc3RyZWFtLT5hdmFpbF9pbjsKKwlyZXEtPm5leHRfb3V0ID0gc3RyZWFtLT5uZXh0X291dDsKKwlyZXEtPmF2YWlsX291dCA9IHN0cmVhbS0+YXZhaWxfb3V0OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGNvbXBfYWxnIHpsaWJfYWxnID0geworCS5jb21wcmVzc19zZXR1cAkJPSB6bGliX2NvbXByZXNzX3NldHVwLAorCS5jb21wcmVzc19pbml0CQk9IHpsaWJfY29tcHJlc3NfaW5pdCwKKwkuY29tcHJlc3NfdXBkYXRlCT0gemxpYl9jb21wcmVzc191cGRhdGUsCisJLmNvbXByZXNzX2ZpbmFsCQk9IHpsaWJfY29tcHJlc3NfZmluYWwsCisJLmRlY29tcHJlc3Nfc2V0dXAJPSB6bGliX2RlY29tcHJlc3Nfc2V0dXAsCisJLmRlY29tcHJlc3NfaW5pdAk9IHpsaWJfZGVjb21wcmVzc19pbml0LAorCS5kZWNvbXByZXNzX3VwZGF0ZQk9IHpsaWJfZGVjb21wcmVzc191cGRhdGUsCisJLmRlY29tcHJlc3NfZmluYWwJPSB6bGliX2RlY29tcHJlc3NfZmluYWwsCisKKwkuYmFzZQkJCT0geworCQkuY3JhX25hbWUJPSAiemxpYiIsCisJCS5jcmFfZmxhZ3MJPSBDUllQVE9fQUxHX1RZUEVfUENPTVBSRVNTLAorCQkuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IHpsaWJfY3R4KSwKKwkJLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKwkJLmNyYV9pbml0CT0gemxpYl9pbml0LAorCQkuY3JhX2V4aXQJPSB6bGliX2V4aXQsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgemxpYl9tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfcGNvbXAoJnpsaWJfYWxnKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHpsaWJfbW9kX2Zpbmkodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9wY29tcCgmemxpYl9hbGcpOworfQorCittb2R1bGVfaW5pdCh6bGliX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHpsaWJfbW9kX2ZpbmkpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlpsaWIgQ29tcHJlc3Npb24gQWxnb3JpdGhtIik7CitNT0RVTEVfQVVUSE9SKCJTb255IENvcnBvcmF0aW9uIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCAzNTA5NGYyLi43YWY3ZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCQlzaXplb2Yoc3RydWN0IGRvY2tfc3RhdGlvbiAqKSk7CiAKIAkvKiB3ZSB3YW50IHRoZSBkb2NrIGRldmljZSB0byBzZW5kIHVldmVudHMgKi8KLQlkb2NrX2RldmljZS0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJmRvY2tfZGV2aWNlLT5kZXYsIDApOwogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkKIAkJZG9ja19zdGF0aW9uLT5mbGFncyB8PSBET0NLX0lTX0RPQ0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCmluZGV4IDBjMjRiZDQuLmFlYjdlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC0yMzUsMTEgKzIzNSw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcmVzdWx0ID0KLQkgICAgZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBhY3BpX2V2ZW50X21jZ3JwLmlkLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVzdWx0KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiRmFpbGVkIHRvIHNlbmQgYSBHZW5ldGxpbmsgbWVzc2FnZSFcbiIpKTsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIGFjcGlfZXZlbnRfbWNncnAuaWQsIEdGUF9BVE9NSUMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVzLmMKaW5kZXggMDBjNDZlMC4uM2Q3NjNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbWJhL2J1cy5jCisrKyBiL2RyaXZlcnMvYW1iYS9idXMuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJZGV2LT5kZXYucmVsZWFzZSA9IGFtYmFfZGV2aWNlX3JlbGVhc2U7CiAJZGV2LT5kZXYuYnVzID0gJmFtYmFfYnVzdHlwZTsKIAlkZXYtPmRldi5kbWFfbWFzayA9ICZkZXYtPmRtYV9tYXNrOwotCWRldi0+cmVzLm5hbWUgPSBkZXYtPmRldi5idXNfaWQ7CisJZGV2LT5yZXMubmFtZSA9IGRldl9uYW1lKCZkZXYtPmRldik7CiAKIAlpZiAoIWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrICYmIGRldi0+ZG1hX21hc2spCiAJCWRldl93YXJuKCZkZXYtPmRldiwgImNvaGVyZW50IGRtYSBtYXNrIGlzIHVuc2V0XG4iKTsKQEAgLTI5NCw3ICsyOTQsNyBAQAogCWlmIChkLT5wYXJlbnQpCiAJCXIgJj0gZC0+cGFyZW50ID09IGRldi0+cGFyZW50OwogCWlmIChkLT5idXNpZCkKLQkJciAmPSBzdHJjbXAoZGV2LT5idXNfaWQsIGQtPmJ1c2lkKSA9PSAwOworCQlyICY9IHN0cmNtcChkZXZfbmFtZShkZXYpLCBkLT5idXNpZCkgPT0gMDsKIAogCWlmIChyKSB7CiAJCWdldF9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCA2NmUwMTJjLi43ODhiYmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC00MDQsNyArNDA0LDcgQEAKIAkvKiBib2FyZF9haGNpICovCiAJewogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQxMiw3ICs0MTIsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfTk9fTkNRIHwgQUhDSV9IRkxBR19OT19QTVApLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV92dDgyNTFfb3BzLAogCX0sCkBAIC00MjAsNyArNDIwLDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX0lHTl9JUlFfSUZfRVJSKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC00MzAsNyArNDMwLDcgQEAKIAkJCQkgQUhDSV9IRkxBR18zMkJJVF9PTkxZIHwgQUhDSV9IRkxBR19OT19NU0kgfAogCQkJCSBBSENJX0hGTEFHX1NFQ1QyNTUpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9zYjYwMF9vcHMsCiAJfSwKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCQkJCSBBSENJX0hGTEFHX01WX1BBVEEgfCBBSENJX0hGTEFHX05PX1BNUCksCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fRE1BLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19JR05fU0VSUl9JTlRFUk5BTCksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX3NiNjAwX29wcywKIAl9LApAQCAtNDU2LDcgKzQ1Niw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19ZRVNfTkNRKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC00NjQsNyArNDY0LDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX05PX1BNUCksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtMTM0OCw3ICsxMzQ4LDcgQEAKIAl3cml0ZWwobWVzc2FnZVsxXSwgbW1pbyArIGhwcml2LT5lbV9sb2MrNCk7CiAKIAkvKiBzYXZlIG9mZiBuZXcgbGVkIHN0YXRlIGZvciBwb3J0L3Nsb3QgKi8KLQllbXAtPmxlZF9zdGF0ZSA9IG1lc3NhZ2VbMV07CisJZW1wLT5sZWRfc3RhdGUgPSBzdGF0ZTsKIAogCS8qCiAJICogdGVsbCBoYXJkd2FyZSB0byB0cmFuc21pdCB0aGUgbWVzc2FnZQpAQCAtMjU2NSw2ICsyNTY1LDE1IEBACiAJCQkvKiBQQ0kgc2xvdCBudW1iZXIgb2YgdGhlIGNvbnRyb2xsZXIgKi8KIAkJCS5kcml2ZXJfZGF0YSA9ICh2b2lkICopMHgxRlVMLAogCQl9LAorCQl7CisJCQkuaWRlbnQgPSAiSFAgQ29tcGFxIDY3MjBzIiwKKwkJCS5tYXRjaGVzID0geworCQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgQ29tcGFxIDY3MjBzIiksCisJCQl9LAorCQkJLyogUENJIHNsb3QgbnVtYmVyIG9mIHRoZSBjb250cm9sbGVyICovCisJCQkuZHJpdmVyX2RhdGEgPSAodm9pZCAqKTB4MUZVTCwKKwkJfSwKIAogCQl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIAl9OwpAQCAtMjY0Nyw4ICsyNjU2LDggQEAKIAlpZiAoYm9hcmRfaWQgPT0gYm9hcmRfYWhjaV9zYjcwMCAmJiBwZGV2LT5yZXZpc2lvbiA+PSAweDQwKQogCQlocHJpdi0+ZmxhZ3MgJj0gfkFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUw7CiAKLQlpZiAoKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fTVNJKSB8fCBwY2lfZW5hYmxlX21zaShwZGV2KSkKLQkJcGNpX2ludHgocGRldiwgMSk7CisJaWYgKCEoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19OT19NU0kpKQorCQlwY2lfZW5hYmxlX21zaShwZGV2KTsKIAogCS8qIHNhdmUgaW5pdGlhbCBjb25maWcgKi8KIAlhaGNpX3NhdmVfaW5pdGlhbF9jb25maWcocGRldiwgaHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKaW5kZXggZGM0OGE2My4uZWNmZDIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCkBAIC0xMTgsOCArMTE4LDggQEAKIAl1MTYgY29tbWFuZDsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmZ2VuZXJpY19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwppbmRleCBlZjhiMzBkLi5lNWNiZTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKQEAgLTQ0NiwzNCArNDQ2LDM0IEBACiAJW3BpaXhfcGF0YV9td2RtYV0gPSAJLyogUElJWDMgTVdETUEgb25seSAqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KIAkJLnBvcnRfb3BzCT0gJnBpaXhfcGF0YV9vcHMsCiAJfSwKIAogCVtwaWl4X3BhdGFfMzNdID0JLyogUElJWDQgYXQgMzNNSHogKi8KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQV9NQVNLXzQwQywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfcGF0YV9vcHMsCiAJfSwKIAogCVtpY2hfcGF0YV8zM10gPSAJLyogSUNIMCAtIElDSCBhdCAzM01oeiovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sgCT0gMHgxZiwJLyogcGlvIDAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIENoZWNrOiBtYXliZSAweDA3ICAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLCAvKiBVRE1BMzMgKi8KKwkJLnBpb19tYXNrIAk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIENoZWNrOiBtYXliZSBNV0RNQTAgaXMgb2sgICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZpY2hfcGF0YV9vcHMsCiAJfSwKIAogCVtpY2hfcGF0YV82Nl0gPSAJLyogSUNIIGNvbnRyb2xsZXJzIHVwIHRvIDY2TUh6ICovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sgCT0gMHgxZiwJLyogcGlvIDAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIE1XRE1BMCBpcyBicm9rZW4gb24gY2hpcCAqLworCQkucGlvX21hc2sgCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogTVdETUEwIGlzIGJyb2tlbiBvbiBjaGlwICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZpY2hfcGF0YV9vcHMsCiAJfSwKQEAgLTQ4MSwxNyArNDgxLDE3IEBACiAJW2ljaF9wYXRhXzEwMF0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUyB8IFBJSVhfRkxBR19DSEVDS0lOVFIsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsIC8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJmljaF9wYXRhX29wcywKIAl9LAogCiAJW2ljaDVfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTQ5OSw4ICs0OTksOCBAQAogCVtpY2g2X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MDgsOCArNTA4LDggQEAKIAlbaWNoNm1fc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTUxNyw4ICs1MTcsOCBAQAogCVtpY2g4X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfU0lEUFIsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MjYsOCArNTI2LDggQEAKIAlbaWNoOF8ycG9ydF9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTIHwgUElJWF9GTEFHX1NJRFBSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTM1LDggKzUzNSw4IEBACiAJW3RvbGFwYWlfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTU0NCw4ICs1NDQsOCBAQAogCVtpY2g4bV9hcHBsZV9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTUzLDkgKzU1Myw5IEBACiAJW3BpaXhfcGF0YV92bXddID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQV9NQVNLXzQwQywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfdm13X29wcywKIAl9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCAwNjBiY2Q2Li5lN2VhNzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgpAQCAtMjM4OSw2ICsyMzkwLDcgQEAKIAlkZXYtPmN5bGluZGVycyA9IDA7CiAJZGV2LT5oZWFkcyA9IDA7CiAJZGV2LT5zZWN0b3JzID0gMDsKKwlkZXYtPm11bHRpX2NvdW50ID0gMDsKIAogCS8qCiAJICogY29tbW9uIEFUQSwgQVRBUEkgZmVhdHVyZSB0ZXN0cwpAQCAtMjQyNiw4ICsyNDI4LDE1IEBACiAKIAkJZGV2LT5uX3NlY3RvcnMgPSBhdGFfaWRfbl9zZWN0b3JzKGlkKTsKIAotCQlpZiAoZGV2LT5pZFs1OV0gJiAweDEwMCkKLQkJCWRldi0+bXVsdGlfY291bnQgPSBkZXYtPmlkWzU5XSAmIDB4ZmY7CisJCS8qIGdldCBjdXJyZW50IFIvVyBNdWx0aXBsZSBjb3VudCBzZXR0aW5nICovCisJCWlmICgoZGV2LT5pZFs0N10gPj4gOCkgPT0gMHg4MCAmJiAoZGV2LT5pZFs1OV0gJiAweDEwMCkpIHsKKwkJCXVuc2lnbmVkIGludCBtYXggPSBkZXYtPmlkWzQ3XSAmIDB4ZmY7CisJCQl1bnNpZ25lZCBpbnQgY250ID0gZGV2LT5pZFs1OV0gJiAweGZmOworCQkJLyogb25seSByZWNvZ25pemUvYWxsb3cgcG93ZXJzIG9mIHR3byBoZXJlICovCisJCQlpZiAoaXNfcG93ZXJfb2ZfMihtYXgpICYmIGlzX3Bvd2VyX29mXzIoY250KSkKKwkJCQlpZiAoY250IDw9IG1heCkKKwkJCQkJZGV2LT5tdWx0aV9jb3VudCA9IGNudDsKKwkJfQogCiAJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKIAkJCWNvbnN0IGNoYXIgKmxiYV9kZXNjOwpAQCAtNjcwOSw2ICs2NzE4LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kb19kZXZfcmVhZF9pZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9zaW11bGF0ZSk7CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9waW9fcXVldWVfdGFzayk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGlvX25lZWRfaW9yZHkpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3RpbWluZ19maW5kX21vZGUpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3RpbWluZ19jb21wdXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggZWE4OTA5MS4uMDE4MzEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCiAJLyogRm9yIG5ldyBFSCwgYWxsIHFjcyBhcmUgZmluaXNoZWQgaW4gb25lIG9mIHRocmVlIHdheXMgLQogCSAqIG5vcm1hbCBjb21wbGV0aW9uLCBlcnJvciBjb21wbGV0aW9uLCBhbmQgU0NTSSB0aW1lb3V0LgotCSAqIEJvdGggY21wbGV0aW9ucyBjYW4gcmFjZSBhZ2FpbnN0IFNDU0kgdGltZW91dC4gIFdoZW4gbm9ybWFsCisJICogQm90aCBjb21wbGV0aW9ucyBjYW4gcmFjZSBhZ2FpbnN0IFNDU0kgdGltZW91dC4gIFdoZW4gbm9ybWFsCiAJICogY29tcGxldGlvbiB3aW5zLCB0aGUgcWMgbmV2ZXIgcmVhY2hlcyBFSC4gIFdoZW4gZXJyb3IKIAkgKiBjb21wbGV0aW9uIHdpbnMsIHRoZSBxYyBoYXMgQVRBX1FDRkxBR19GQUlMRUQgc2V0LgogCSAqCkBAIC01NjIsNyArNTYyLDE5IEBACiAJCWludCBucl90aW1lZG91dCA9IDA7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKKwkJCisJCS8qIFRoaXMgbXVzdCBvY2N1ciB1bmRlciB0aGUgYXAtPmxvY2sgYXMgd2UgZG9uJ3Qgd2FudAorCQkgICBhIHBvbGxlZCByZWNvdmVyeSB0byByYWNlIHRoZSByZWFsIGludGVycnVwdCBoYW5kbGVyCisJCSAgIAorCQkgICBUaGUgbG9zdF9pbnRlcnJ1cHQgaGFuZGxlciBjaGVja3MgZm9yIGFueSBjb21wbGV0ZWQgYnV0CisJCSAgIG5vbi1ub3RpZmllZCBjb21tYW5kIGFuZCBjb21wbGV0ZXMgbXVjaCBsaWtlIGFuIElSUSBoYW5kbGVyLgorCQkgICAKKwkJICAgV2UgdGhlbiBmYWxsIGludG8gdGhlIGVycm9yIHJlY292ZXJ5IGNvZGUgd2hpY2ggd2lsbCB0cmVhdAorCQkgICB0aGlzIGFzIGlmIG5vcm1hbCBjb21wbGV0aW9uIHdvbiB0aGUgcmFjZSAqLwogCisJCWlmIChhcC0+b3BzLT5sb3N0X2ludGVycnVwdCkKKwkJCWFwLT5vcHMtPmxvc3RfaW50ZXJydXB0KGFwKTsKKwkJCQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NtZCwgdG1wLCAmaG9zdC0+ZWhfY21kX3EsIGVoX2VudHJ5KSB7CiAJCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCkBAIC02MDYsNiArNjE4LDkgQEAKIAkJYXAtPmVoX3RyaWVzID0gQVRBX0VIX01BWF9UUklFUzsKIAl9IGVsc2UKIAkJc3Bpbl91bmxvY2tfd2FpdChhcC0+bG9jayk7CisJCQorCS8qIElmIHdlIHRpbWVkIHJhY2VkIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvCisJICAgcmVjb3ZlciBucl90aW1lZG91dCA9PSAwIHdoeSBleGFjdGx5IGFyZSB3ZSBkb2luZyBlcnJvciByZWNvdmVyeSA/ICovCiAKICByZXBlYXQ6CiAJLyogaW52b2tlIGVycm9yIGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCBmOTNkYzAyLi44MzMyZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC01Miw2ICs1Miw3IEBACiAJLnNvZnRyZXNldAkJPSBhdGFfc2ZmX3NvZnRyZXNldCwKIAkuaGFyZHJlc2V0CQk9IHNhdGFfc2ZmX2hhcmRyZXNldCwKIAkucG9zdHJlc2V0CQk9IGF0YV9zZmZfcG9zdHJlc2V0LAorCS5kcmFpbl9maWZvCQk9IGF0YV9zZmZfZHJhaW5fZmlmbywKIAkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfc2ZmX2Vycm9yX2hhbmRsZXIsCiAJLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX3NmZl9wb3N0X2ludGVybmFsX2NtZCwKIApAQCAtNjQsNiArNjUsOCBAQAogCS5zZmZfaXJxX29uCQk9IGF0YV9zZmZfaXJxX29uLAogCS5zZmZfaXJxX2NsZWFyCQk9IGF0YV9zZmZfaXJxX2NsZWFyLAogCisJLmxvc3RfaW50ZXJydXB0CQk9IGF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQsCisKIAkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9wb3J0X29wcyk7CkBAIC0xNjQ2LDcgKzE2NDksNyBAQAogICoJUkVUVVJOUzoKICAqCU9uZSBpZiBpbnRlcnJ1cHQgd2FzIGhhbmRsZWQsIHplcm8gaWYgbm90IChzaGFyZWQgaXJxKS4KICAqLwotaW5saW5lIHVuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAordW5zaWduZWQgaW50IGF0YV9zZmZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkJICAgICAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+bGluay5laF9pbmZvOwpAQCAtMTc3NSw2ICsxNzc4LDQ4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2ludGVycnVwdCk7CiAKIC8qKgorICoJYXRhX3NmZl9sb3N0X2ludGVycnVwdAktCUNoZWNrIGZvciBhbiBhcHBhcmVudCBsb3N0IGludGVycnVwdAorICoJQGFwOiBwb3J0IHRoYXQgYXBwZWFycyB0byBoYXZlIHRpbWVkIG91dAorICoKKyAqCUNhbGxlZCBmcm9tIHRoZSBsaWJhdGEgZXJyb3IgaGFuZGxlcnMgd2hlbiB0aGUgY29yZSBjb2RlIHN1c3BlY3RzCisgKglhbiBpbnRlcnJ1cHQgaGFzIGJlZW4gbG9zdC4gSWYgaXQgaGFzIGNvbXBsZXRlIGFueXRoaW5nIHdlIGNhbiBhbmQKKyAqCXRoZW4gcmV0dXJuLiBJbnRlcmZhY2UgbXVzdCBzdXBwb3J0IGFsdHN0YXR1cyBmb3IgdGhpcyBmYXN0ZXIKKyAqCXJlY292ZXJ5IHRvIG9jY3VyLgorICoKKyAqCUxvY2tpbmc6CisgKglDYWxsZXIgaG9sZHMgaG9zdCBsb2NrCisgKi8KKwordm9pZCBhdGFfc2ZmX2xvc3RfaW50ZXJydXB0KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdTggc3RhdHVzOworCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CisKKwkvKiBPbmx5IG9uZSBvdXRzdGFuZGluZyBjb21tYW5kIHBlciBTRkYgY2hhbm5lbCAqLworCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKKwkvKiBDaGVjayB3ZSBoYXZlIGEgbGl2ZSBvbmUuLiAqLworCWlmIChxYyA9PSBOVUxMIHx8ICAhKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSkKKwkJcmV0dXJuOworCS8qIFdlIGNhbm5vdCBsb3NlIGFuIGludGVycnVwdCBvbiBhIHBvbGxlZCBjb21tYW5kICovCisJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQlyZXR1cm47CisJLyogU2VlIGlmIHRoZSBjb250cm9sbGVyIHRoaW5rcyBpdCBpcyBzdGlsbCBidXN5IC0gaWYgc28gdGhlIGNvbW1hbmQKKwkgICBpc24ndCBhIGxvc3QgSVJRIGJ1dCBpcyBzdGlsbCBpbiBwcm9ncmVzcyAqLworCXN0YXR1cyA9IGF0YV9zZmZfYWx0c3RhdHVzKGFwKTsKKwlpZiAoc3RhdHVzICYgQVRBX0JVU1kpCisJCXJldHVybjsKKworCS8qIFRoZXJlIHdhcyBhIGNvbW1hbmQgcnVubmluZywgd2UgYXJlIG5vIGxvbmdlciBidXN5IGFuZCB3ZSBoYXZlCisJICAgbm8gaW50ZXJydXB0LiAqLworCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLCAibG9zdCBpbnRlcnJ1cHQgKFN0YXR1cyAweCV4KVxuIiwKKwkJCQkJCQkJc3RhdHVzKTsKKwkvKiBSdW4gdGhlIGhvc3QgaW50ZXJydXB0IGxvZ2ljIGFzIGlmIHRoZSBpbnRlcnJ1cHQgaGFkIG5vdCBiZWVuCisJICAgbG9zdCAqLworCWF0YV9zZmZfaG9zdF9pbnRyKGFwLCBxYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2xvc3RfaW50ZXJydXB0KTsKKworLyoqCiAgKglhdGFfc2ZmX2ZyZWV6ZSAtIEZyZWV6ZSBTRkYgY29udHJvbGxlciBwb3J0CiAgKglAYXA6IHBvcnQgdG8gZnJlZXplCiAgKgpAQCAtMjE5OSw2ICsyMjQ0LDM5IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3Bvc3RyZXNldCk7CiAKIC8qKgorICoJYXRhX3NmZl9kcmFpbl9maWZvIC0gU3RvY2sgRklGTyBkcmFpbiBsb2dpYyBmb3IgU0ZGIGNvbnRyb2xsZXJzCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglEcmFpbiB0aGUgRklGTyBhbmQgZGV2aWNlIG9mIGFueSBzdHVjayBkYXRhIGZvbGxvd2luZyBhIGNvbW1hbmQKKyAqCWZhaWxpbmcgdG8gY29tcGxldGUuIEluIHNvbWUgY2FzZXMgdGhpcyBpcyBuZWNjZXNzYXJ5IGJlZm9yZSBhCisgKglyZXNldCB3aWxsIHJlY292ZXIgdGhlIGRldmljZS4KKyAqCisgKi8KKwordm9pZCBhdGFfc2ZmX2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKworCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBpbmNvbWluZyBkYXRhIHdoZW4gYSBjb21tYW5kIHdhcyBydW5uaW5nICovCisJaWYgKHFjID09IE5VTEwgfHwgcWMtPmRtYV9kaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuOworCisJYXAgPSBxYy0+YXA7CisJLyogRHJhaW4gdXAgdG8gNjRLIG9mIGRhdGEgYmVmb3JlIHdlIGdpdmUgdXAgdGhpcyByZWNvdmVyeSBtZXRob2QgKi8KKwlmb3IgKGNvdW50ID0gMDsgKGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApICYgQVRBX0RSUSkKKwkJCQkJCSYmIGNvdW50IDwgMzI3Njg7IGNvdW50KyspCisJCWlvcmVhZDE2KGFwLT5pb2FkZHIuZGF0YV9hZGRyKTsKKworCS8qIENhbiBiZWNvbWUgREVCVUcgbGF0ZXIgKi8KKwlpZiAoY291bnQpCisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9ERUJVRywKKwkJCSJkcmFpbmVkICVkIGJ5dGVzIHRvIGNsZWFyIERSUS5cbiIsIGNvdW50KTsKKworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9kcmFpbl9maWZvKTsKKworLyoqCiAgKglhdGFfc2ZmX2Vycm9yX2hhbmRsZXIgLSBTdG9jayBlcnJvciBoYW5kbGVyIGZvciBCTURNQSBjb250cm9sbGVyCiAgKglAYXA6IHBvcnQgdG8gaGFuZGxlIGVycm9yIGZvcgogICoKQEAgLTIyMzksNyArMjMxNyw4IEBACiAJCSAqIHJlYWxseSBhIHRpbWVvdXQgZXZlbnQsIGFkanVzdCBlcnJvciBtYXNrIGFuZAogCQkgKiBjYW5jZWwgZnJvemVuIHN0YXRlLgogCQkgKi8KLQkJaWYgKHFjLT5lcnJfbWFzayA9PSBBQ19FUlJfVElNRU9VVCAmJiAoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7CisJCWlmIChxYy0+ZXJyX21hc2sgPT0gQUNfRVJSX1RJTUVPVVQKKwkJCQkJCSYmIChob3N0X3N0YXQgJiBBVEFfRE1BX0VSUikpIHsKIAkJCXFjLT5lcnJfbWFzayA9IEFDX0VSUl9IT1NUX0JVUzsKIAkJCXRoYXcgPSAxOwogCQl9CkBAIC0yMjUwLDYgKzIzMjksMTMgQEAKIAlhdGFfc2ZmX3N5bmMoYXApOwkJLyogRklYTUU6IFdlIGRvbid0IG5lZWQgdGhpcyAqLwogCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOwogCWFwLT5vcHMtPnNmZl9pcnFfY2xlYXIoYXApOworCS8qIFdlICpNVVNUKiBkbyBGSUZPIGRyYWluaW5nIGJlZm9yZSB3ZSBpc3N1ZSBhIHJlc2V0IGFzIHNldmVyYWwKKwkgKiBkZXZpY2VzIGhlbHBmdWxseSBjbGVhciB0aGVpciBpbnRlcm5hbCBzdGF0ZSBhbmQgd2lsbCBsb2NrIHNvbGlkCisJICogaWYgd2UgdG91Y2ggdGhlIGRhdGEgcG9ydCBwb3N0IHJlc2V0LiBQYXNzIHFjIGluIGNhc2UgYW55b25lIHdhbnRzCisJICogIHRvIGRvIGRpZmZlcmVudCBQSU8vRE1BIHJlY292ZXJ5IG9yIGhhcyBwZXIgY29tbWFuZCBmaXh1cHMKKwkgKi8KKwlpZiAoYXAtPm9wcy0+ZHJhaW5fZmlmbykKKwkJYXAtPm9wcy0+ZHJhaW5fZmlmbyhxYyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI5NTksNCArMzA0NSwzIEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX3NmZl9pbml0X29uZSk7CiAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKaW5kZXggY2VhODAxNC4uODlhMWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLmgKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKQEAgLTc5LDggKzc5LDYgQEAKIAkJCSAgIHU2NCBibG9jaywgdTMyIG5fYmxvY2ssIHVuc2lnbmVkIGludCB0Zl9mbGFncywKIAkJCSAgIHVuc2lnbmVkIGludCB0YWcpOwogZXh0ZXJuIHU2NCBhdGFfdGZfcmVhZF9ibG9jayhzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Ziwgc3RydWN0IGF0YV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBhdGFfcGlvX3F1ZXVlX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCAqZGF0YSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlbGF5KTsKIGV4dGVybiB2b2lkIGF0YV9wb3J0X2ZsdXNoX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdW5zaWduZWQgYXRhX2V4ZWNfaW50ZXJuYWwoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBjb25zdCB1OCAqY2RiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwppbmRleCA4Yjc3YTk4Li5kOGYzNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwpAQCAtMjQ2LDkgKzI0Niw5IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCi0JCS51ZG1hX21hc2sgCT0gMHg3ZiwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTYsCiAKIAkJLnBvcnRfb3BzCT0gJnBhY3BpX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKaW5kZXggZWI5OWRiZS4uNzUxYjdlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC00OTIsNTMgKzQ5Miw1MyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2Vhcmx5ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJmFsaV9lYXJseV9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHgyMCBhZGRlZCBETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmYWxpXzIwX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweDIwIHdpdGggc3VwcG9ydCBsb2dpYyBhZGRlZCBVRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fMjBfdWRtYSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkudWRtYV9tYXNrID0gMHgwNywJLyogVURNQTMzICovCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZhbGlfMjBfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzIgYWRkcyBVRE1BNjYgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jMiA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmYWxpX2MyX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEMzIGlzIFVETUE2NiBmb3Igbm93ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzMgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmFsaV9jMl9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDNCBpcyBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmFsaV9jNF9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDNSBpcyBVRE1BMTMzIHdpdGggTEJBNDggRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzUgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmFsaV9jNV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbWQuYwppbmRleCAxMTViMWNkLi4zM2E3NGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKQEAgLTQ1NSw3NCArNDU1LDc0IEBACiBzdGF0aWMgaW50IGFtZF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzEwXSA9IHsKLQkJewkvKiAwOiBBTUQgNzQwMSAqLworCQl7CS8qIDA6IEFNRCA3NDAxIC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAkvKiBObyBTV0RNQSAqLwotCQkJLnVkbWFfbWFzayA9IDB4MDcsCS8qIFVETUEgMzMgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZhbWQzM19wb3J0X29wcwogCQl9LAogCQl7CS8qIDE6IEVhcmx5IEFNRDc0MDkgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAkvKiBVRE1BIDY2ICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCQkucG9ydF9vcHMgPSAmYW1kNjZfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiAyOiBBTUQgNzQwOSwgbm8gc3dkbWEgZXJyYXRhICovCisJCXsJLyogMjogQU1EIDc0MDkgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwJLyogVURNQSA2NiAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmFtZDY2X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogMzogQU1EIDc0MTEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMDBfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiA0OiBBTUQgNzQ0MSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9LAotCQl7CS8qIDU6IEFNRCA4MTExKi8KKwkJewkvKiA1OiBBTUQgODExMSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCS8qIFVETUEgMTMzLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkJLnBvcnRfb3BzID0gJmFtZDEzM19wb3J0X29wcwogCQl9LAotCQl7CS8qIDY6IEFNRCA4MTExIFVETUEgMTAwIChTZXJlbmFkZSkgKi8KKwkJewkvKiA2OiBBTUQgODExMSBVRE1BIDEwMCAoU2VyZW5hZGUpIC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAsIG5vIHN3ZG1hICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogNzogTnZpZGlhIE5mb3JjZSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJm52MTAwX3BvcnRfb3BzCiAJCX0sCi0JCXsJLyogODogTnZpZGlhIE5mb3JjZTIgYW5kIGxhdGVyICovCisJCXsJLyogODogTnZpZGlhIE5mb3JjZTIgYW5kIGxhdGVyIC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogVURNQSAxMzMsIG5vIHN3ZG1hICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCQkucG9ydF9vcHMgPSAmbnYxMzNfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiA5OiBBTUQgQ1M1NTM2IChHZW9kZSBjb21wYW5pb24pICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTAwX3BvcnRfb3BzCiAJCX0KIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCmluZGV4IDZiMzA5MmMuLmQzMzJjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCQlwZXJmb3JtYW5jZSBBbGVzc2FuZHJvIFp1bW1vIDxhbGVzc2FuZHJvLnp1bW1vQHRvd2VydGVjaC5pdD4KICAqCiAgKglUT0RPCi0gKgk4NTAgc2VyaWFsaXphdGlvbiBvbmNlIHRoZSBjb3JlIHN1cHBvcnRzIGl0CiAgKglJbnZlc3RpZ2F0ZSBub19kc2Mgb24gODUwUgogICoJQ2xvY2sgZGV0ZWN0CiAgKi8KQEAgLTI5LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9hcnRvcCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC40IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC40LjUiCiAKIC8qCiAgKglUaGUgQVJUT1AgaGFzIDMzIE1oeiBhbmQgIm92ZXIgY2xvY2tlZCIgdGltaW5nIHRhYmxlcy4gVW50aWwgd2UKQEAgLTI4Myw2ICsyODIsMzEgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0NCArIGFwLT5wb3J0X25vLCB1bHRyYSk7CiB9CiAKKy8qKgorICoJYXJ0b3BfNjIxMF9xY19kZWZlcgktCWltcGxlbWVudCBzZXJpYWxpemF0aW9uCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglJc3N1ZSBjb21tYW5kcyBwZXIgaG9zdCBvbiB0aGlzIGNoaXAuCisgKi8KKworc3RhdGljIGludCBhcnRvcDYyMTBfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBOb3cgYXBwbHkgc2VyaWFsaXphdGlvbiBydWxlcy4gT25seSBhbGxvdyBhIGNvbW1hbmQgaWYgdGhlCisJICAgb3RoZXIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KKwlpZiAoYWx0ICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4JQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFydG9wX3NodCA9IHsKIAlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CkBAIC0yOTMsNiArMzE3LDcgQEAKIAkuc2V0X3Bpb21vZGUJCT0gYXJ0b3A2MjEwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBhcnRvcDYyMTBfc2V0X2RtYW1vZGUsCiAJLnByZXJlc2V0CQk9IGFydG9wNjIxMF9wcmVfcmVzZXQsCisJLnFjX2RlZmVyCQk9IGFydG9wNjIxMF9xY19kZWZlciwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhcnRvcDYyNjBfb3BzID0gewpAQCAtMzIzLDI5ICszNDgsMjkgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182MjEwID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyMTBfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI2eCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjYwX29wcywKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyOHggPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182Mjh4X2Zhc3QgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKQEAgLTM2MiwxMiArMzg3LDggQEAKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMCkgewkvKiA2MjEwIHZhcmlhbnQgKi8KIAkJcHBpWzBdID0gJmluZm9fNjIxMDsKLQkJcHBpWzFdID0gJmF0YV9kdW1teV9wb3J0X2luZm87CiAJCS8qIEJJT1MgbWF5IGhhdmUgbGVmdCB1cyBpbiBVRE1BLCBjbGVhciBpdCBiZWZvcmUgbGliYXRhIHByb2JlICovCiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDU0LCAwKTsKLQkJLyogRm9yIHRoZSBtb21lbnQgKGFsc28gbGFja3MgZHNjKSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUlRPUCA2MjEwIHJlcXVpcmVzIHNlcmlhbGl6ZSBmdW5jdGlvbmFsaXR5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IGxpYmF0YS5cbiIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTZWNvbmRhcnkgQVRBIHBvcnRzIHdpbGwgbm90IGJlIGFjdGl2YXRlZC5cbiIpOwogCX0KIAllbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMSkJLyogNjI2MCAqLwogCQlwcGlbMF0gPSAmaW5mb182MjZ4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0MzIuYwppbmRleCBhYjYxMDk1Li41YzEyOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0MzIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0MzIuYwpAQCAtNjcsNyArNjcsOSBAQAogICoKICAqIEFsdGVyIFBJT19NQVNLIGJlbG93IGFjY29yZGluZyB0byB0YWJsZSB0byBzZXQgbWF4aW1hbCBQSU8gbW9kZS4KICAqLwotI2RlZmluZSBQSU9fTUFTSyAoMHgxZikKK2VudW0geworICBQSU9fTUFTSyA9IEFUQV9QSU80LAorfTsKIAogLyoKICAqIFN0cnVjdCBjb250YWluaW5nIHByaXZhdGUgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggNTA2YWRkZS4uYmVjMGI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0yMjAsOSArMjIwLDkgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA2LAkvKiBObyBNV0RNQTAgc3VwcG9ydCAqLwotCQkudWRtYV9tYXNrID0gMHgzRiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMTJfT05MWSwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmF0aWl4cF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBhdGlpeHBfZW5hYmxlX2JpdHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwppbmRleCAxMDUwZmVkLi5jNGI0N2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCkBAIC0xNTAyLDcgKzE1MDIsNyBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUwogCQkJCXwgQVRBX0ZMQUdfTU1JTwogCQkJCXwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gMCwKIAkJLnVkbWFfbWFzawk9IDAsCiAJCS5wb3J0X29wcwk9ICZiZmluX3BhdGFfb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKaW5kZXggMzRhMzk0Mi4uNWFjZjlmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZjbWQ2NDBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCmluZGV4IDMxNjdkOGYuLmY5OGRmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwpAQCAtMjk5LDQwICsyOTksNDAgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gY21kX2luZm9bNl0gPSB7CiAJCXsJLyogQ01EIDY0MyAtIG5vIFVETUEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkucG9ydF9vcHMgPSAmY21kNjR4X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0NiB3aXRoIGJyb2tlbiBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgd2l0aCB3b3JraW5nIFVETUEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgcmV2IDEgICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0NnIxX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0OCAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCQkucG9ydF9vcHMgPSAmY21kNjQ4X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0OSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmY21kNjQ4X3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCmluZGV4IDExODZiY2QuLmRiNmE5NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjdGxfcG9ydFtdID0geyAweDNGNiwgMHgzNzYgfTsKIAlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaSA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkucG9ydF9vcHMJPSAmY3M1NTIwX3BvcnRfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVsyXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCmluZGV4IGJiYTQ1MzMuLmM5NzRiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwpAQCAtMjk4LDE1ICsyOTgsMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkudWRtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJmNzNTUzMF9wb3J0X29wcwogCX07CiAJLyogVGhlIGRvY2tpbmcgY29ubmVjdG9yIGRvZXNuJ3QgZG8gVURNQSwgYW5kIGl0IHNlZW1zIG5vdCBNV0RNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX3BhbG1heF9zZWNvbmRhcnkgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmY3M1NTMwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYwppbmRleCA4YjIzNmFmLi5kMzNhYTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKQEAgLTE4MSw4ICsxODEsOCBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZjczU1MzVfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKaW5kZXggYWZlZDkyOS4uNmRhNGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCkBAIC0yNDEsOCArMjQxLDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmY3M1NTM2X3BvcnRfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCmluZGV4IGQ1NDY0MjUuLjhmYjA0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCkBAIC0xMjQsOCArMTI0LDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmY3k4MmM2OTNfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sICZhdGFfZHVtbXlfcG9ydF9pbmZvIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jCmluZGV4IGFjNjM5MmUuLjIwODVlMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jCkBAIC0yNTEsOSArMjUxLDkgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMS0yICovCi0JCS51ZG1hX21hc2sgCT0gMHgwZiwgLyogVURNQSA2NiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmVmYXJfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggNjVjMjhlNS4uZDdmMmRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0zMzYsOCArMzM2LDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNjYgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmhwdDM2Nl9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCA0MjE2Mzk5Li44MWFiNTcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCkBAIC03NTMsNTUgKzc1Myw1NSBAQAogCS8qIEhQVDM3MCAtIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3MF9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwQSAtIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBhID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBhX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzAgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwXzMzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MEEgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwYV8zMyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwYV9wb3J0X29wcwogCX07CiAJLyogSFBUMzcxLCAzNzIgYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcyID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzNzJfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3NCAtIFVETUExMDAsIGZ1bmN0aW9uIDEgdXNlcyBkaWZmZXJlbnQgcHJlcmVzZXQgbWV0aG9kICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0Mzc0X2ZuMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcyX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4xID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzRfZm4xX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggZDVjOWZkNy4uM2Q1OWZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTQ0MSw4ICs0NDEsOCBAQAogCS8qIEhQVDM3Mk4gYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmhwdDN4Mm5fcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKaW5kZXggZjE5Y2M2NC4uN2UzMTAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCkBAIC0xODgsMTEgKzE4OCwxMSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKICNpZiBkZWZpbmVkKENPTkZJR19QQVRBX0hQVDNYM19ETUEpCiAJCS8qIEZ1cnRoZXIgZGVidWcgbmVlZGVkICovCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKICNlbmRpZgogCQkucG9ydF9vcHMgPSAmaHB0M3gzX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCmluZGV4IGNmOWU5ODQuLmU3MzQ3ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIAlpZiAoZWMtPmRtYSAhPSBOT19ETUEgJiYgIXJlcXVlc3RfZG1hKGVjLT5kbWEsIERSVl9OQU1FKSkgewogCQlzdGF0ZS0+ZG1hID0gZWMtPmRtYTsKLQkJaW5mby0+bXdkbWFfbWFzayA9IDB4MDc7CS8qIE1XMC4uMiAqLworCQlpbmZvLT5td2RtYV9tYXNrID0gQVRBX01XRE1BMjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ucl9wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKIAotCQlhcC0+cGlvX21hc2sgPSAweDFmOworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAkJYXAtPm13ZG1hX21hc2sgPSBpbmZvLT5td2RtYV9tYXNrOwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPm9wcyA9ICZwYXRhX2ljc2lkZV9wb3J0X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCmluZGV4IDE1Y2RiOTEuLjRiY2ViODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX2lzYXBucCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4yIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjUiCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGlzYXBucF9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMjgsNiArMjgsMTMgQEAKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpc2FwbnBfbm9hbHRfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCisJLyogTm8gYWx0c3RhdHVzIHNvIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBsb3N0IGludGVycnVwdCBwb2xsICovCisJLmxvc3RfaW50ZXJydXB0ID0gQVRBX09QX05VTEwsCit9OworCiAvKioKICAqCWlzYXBucF9pbml0X29uZQkJLQlhdHRhY2ggYW4gaXNhcG5wIGludGVyZmFjZQogICoJQGlkZXY6IFBuUCBkZXZpY2UKQEAgLTY1LDggKzcyLDggQEAKIAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKLQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAxOworCWFwLT5vcHMgPSAmaXNhcG5wX25vYWx0X3BvcnRfb3BzOworCWFwLT5waW9fbWFzayA9IEFUQV9QSU8wOwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCiAJYXAtPmlvYWRkci5jbWRfYWRkciA9IGNtZF9hZGRyOwpAQCAtNzYsNiArODMsNyBAQAogCQkJCQkgICBwbnBfcG9ydF9zdGFydChpZGV2LCAxKSwgMSk7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9IGN0bF9hZGRyOworCQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKIAl9CiAKIAlhdGFfc2ZmX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYwppbmRleCBjMTEzZDdjLi5mMTU2ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKQEAgLTI2Miw4ICsyNjIsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsIC8qIEZJWE1FOiB3YW50IFVETUEgMTAwPyAqLwogCQkucG9ydF9vcHMJPSAmaXQ4MjEzX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKaW5kZXggYjA1Yjg2YS4uMTg4YmMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCkBAIC04NzUsMjkgKzg3NSwyOSBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc21hcnQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9zbWFydF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcGFzc3RocnUgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9wYXNzdGhydV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcmRjID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZpdDgyMXhfcmRjX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19yZGNfMTEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLyogTm8gVURNQSAqLwogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3JkY19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwppbmRleCBiMTczYzE1Li4xOWZkZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKIAlhcC0+b3BzCT0gJml4cDR4eF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAweDFmOyAvKiBQSU80ICovCisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19OT19BVEFQSTsKIAogCWl4cDR4eF9zZXR1cF9wb3J0KGFwLCBkYXRhLCBjczAtPnN0YXJ0LCBjczEtPnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKaW5kZXggMzhjZjFhYi4uM2ExNDc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKQEAgLTEzNiw4ICsxMzYsOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAKIAkJLnBvcnRfb3BzCT0gJmptaWNyb25fb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKaW5kZXggZTNiYzFiNC4uM2Y4MzBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIHN0YXRpYyBpbnQgd2luYm9uZDsJCS8qIFNldCB0byBwcm9iZSBXaW5ib25kIGNvbnRyb2xsZXJzLAogCQkJCQlnaXZlIEkvTyBwb3J0IGlmIG5vbiBzdGFuZGFyZCAqLwogc3RhdGljIGludCBhdXRvc3BlZWQ7CQkvKiBDaGlwIHByZXNlbnQgd2hpY2ggc25vb3BzIHNwZWVkIGNoYW5nZXMgKi8KLXN0YXRpYyBpbnQgcGlvX21hc2sgPSAweDFGOwkvKiBQSU8gcmFuZ2UgZm9yIGF1dG9zcGVlZCBkZXZpY2VzICovCitzdGF0aWMgaW50IHBpb19tYXNrID0gQVRBX1BJTzQ7CS8qIFBJTyByYW5nZSBmb3IgYXV0b3NwZWVkIGRldmljZXMgKi8KIHN0YXRpYyBpbnQgaW9yZHlfbWFzayA9IDB4RkZGRkZGRkY7CS8qIFVzZSBpb3JkeSBpZiBhdmFpbGFibGUgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCmluZGV4IDc2ZTM5OWIuLjIwOTZmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCkBAIC0xMzYsOCArMTM2LDggQEAKIAkJLyogU2xhdmUgcG9zc2libGUgYXMgaXRzIG1hZ2ljYWxseSBtYXBwZWQgbm90IHJlYWwgKi8KIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCmluZGV4IDUwYWU2ZDEuLjY4ZDI3YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNzM3LDEwICs3MzcsMTAgQEAKIAkgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAibXdkbWEtbW9kZSIsICZwcm9wbGVuKTsKIAlpZiAoKHByb3ApICYmIChwcm9wbGVuID49IDQpKQotCQltd2RtYV9tYXNrID0gMHg3ICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOworCQltd2RtYV9tYXNrID0gQVRBX01XRE1BMiAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAidWRtYS1tb2RlIiwgJnByb3BsZW4pOwogCWlmICgocHJvcCkgJiYgKHByb3BsZW4gPj0gNCkpCi0JCXVkbWFfbWFzayA9IDB4NyAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKKwkJdWRtYV9tYXNrID0gQVRBX1VETUEyICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOwogCiAJYXRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKIAlpZiAoYXRhX2lycSA9PSBOT19JUlEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYwppbmRleCBhYTU3NmNhLi5iMjFmMDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkgICB0aGUgTVBJSVggeW91ciBib3ggZ29lcyBjYXN0b3JzIHVwICovCiAKIAlhcC0+b3BzID0gJm1waWl4X3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4MUY7CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IDlkYzA1ZTEuLmJkYjIzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC01MSw4ICs1MSw4IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkvKiBBY3R1YWxseSB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGVzZSBhcyB0aGUKIAkJICAgZmlybXdhcmUgZGVhbHMgd2l0aCBpdCAqLwotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwgLyogVURNQSAxMzMgKi8KIAkJLnBvcnRfb3BzCT0gJm5ldGNlbGxfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jCmluZGV4IDRkZDlhM2IuLjBmYjZiMWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcC0+b3BzID0gJm5pbmphMzJfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMHgxRjsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBiYXNlICsgMHgxMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggNDBkNDExYy4uY2E1M2ZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDBGLAorCQkucGlvX21hc2sgPSBBVEFfUElPMywKIAkJLnBvcnRfb3BzID0gJm5zODc0MTBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKaW5kZXggODliZjVmOC4uNzczYjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKQEAgLTM0Niw4ICszNDYsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm5zODc0MTVfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CkBAIC0zNTUsOCArMzU1LDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19TVVBFUklPKQogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvODc1NjAgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMJPSAmbnM4NzU2MF9wYXRhX29wcywKIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwppbmRleCAwZmU0ZWYzLi5lZmUyYzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCWFwLT5wcml2YXRlX2RhdGEgPSBjZl9wb3J0OwogCWNmX3BvcnQtPmFwID0gYXA7CiAJYXAtPm9wcyA9ICZvY3Rlb25fY2Zfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4N2Y7IC8qIFN1cHBvcnQgUElPIDAtNiAqLworCWFwLT5waW9fbWFzayA9IEFUQV9QSU82OwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZCiAJCSAgfCBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HOwogCkBAIC05MDAsNyArOTAwLDcgQEAKIAkJYXAtPmlvYWRkci5jdGxfYWRkcgk9IGNzMSArICg2IDw8IDEpICsgMTsKIAkJb2N0ZW9uX2NmX29wcy5zZmZfZGF0YV94ZmVyID0gb2N0ZW9uX2NmX2RhdGFfeGZlcjE2OwogCi0JCWFwLT5td2RtYV9tYXNrCT0gMHgxZjsgLyogU3VwcG9ydCBNV0RNQSAwLTQgKi8KKwkJYXAtPm13ZG1hX21hc2sJPSBBVEFfTVdETUE0OwogCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCQlpcnFfaGFuZGxlciA9IG9jdGVvbl9jZl9pbnRlcnJ1cHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggMmMxYTkxYy4uODRhYzUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm9sZHBpaXhfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCmluZGV4IGU0ZmE0ZDUuLjk5ZWRkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZvcHRpX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCmluZGV4IDkzYmI2ZTkuLjg2ODg1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCkBAIC0zOTksMTUgKzM5OSwxNSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzgyYzcwMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmb3B0aWRtYV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZvcHRpcGx1c19wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb184MmM3MDAsIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDY0YjJlMjIuLmY0ZDAwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfcGNtY2lhIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuNSIKIAogLyoKICAqCVByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gZ2x1ZSBzdHVmZiB0b2dldGhlcgpAQCAtMTI2LDYgKzEyNiwzNyBAQAogCXJldHVybiBidWZsZW47CiB9CiAKKy8qKgorICoJcGNtY2lhXzhiaXRfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisgCit2b2lkIHBjbWNpYV84Yml0X2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKworCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBpbmNvbWluZyBkYXRhIHdoZW4gYSBjb21tYW5kIHdhcyBydW5uaW5nICovCisJaWYgKHFjID09IE5VTEwgfHwgcWMtPmRtYV9kaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuOworCisJYXAgPSBxYy0+YXA7CisKKwkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLworCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQorCQkJCQkJCSYmIGNvdW50KysgPCA2NTUzNjspCisJCWlvcmVhZDgoYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImRyYWluZWQgJWQgYnl0ZXMgdG8gY2xlYXIgRFJRLlxuIiwKKwkJCQkJCQkJY291bnQpOworCit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBjbWNpYV9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMTQzLDYgKzE3NCw3IEBACiAJLnNmZl9kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyXzhiaXQsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlXzhiaXQsCisJLmRyYWluX2ZpZm8JPSBwY21jaWFfOGJpdF9kcmFpbl9maWZvLAogfTsKIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCkBAIC0yOTksNyArMzMxLDcgQEAKIAkJYXAgPSBob3N0LT5wb3J0c1twXTsKIAogCQlhcC0+b3BzID0gb3BzOwotCQlhcC0+cGlvX21hc2sgPSAxOwkJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPMDsJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGlvX2FkZHIgKyAweDEwICogcDsKIAkJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0bF9hZGRyICsgMHgxMCAqIHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKaW5kZXggZTk0ZWZjYy4uY2E1Y2FkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwpAQCAtMTUyLDE4ICsxNTIsMTggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJICAgICAgICAgICAgICAgICAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmcGRjMjAyN3hfcGF0YTEwMF9vcHMsCiAJfSwKIAkvKiBQRENfVURNQV8xMzMgKi8KIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKICAgICAgICAgICAgICAgICAgICAgICAgIAkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsIC8qIHVkbWEwLTYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkYzIwMjd4X3BhdGExMzNfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKaW5kZXggNzk5YTZhMC4uNWZlZGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCkBAIC0yOTEsMjIgKzI5MSwyMiBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzNdID0gewogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI0eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwppbmRleCBmMWIyNmY3Li40NTg3OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKQEAgLTIxMiwxMSArMjEyLDExIEBACiAKIAlpZiAodHlwZSA9PSA2NTgwKSB7CiAJCWFwLT5vcHMgPSAmcWRpNjU4MF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCX0gZWxzZSB7CiAJCWFwLT5vcHMgPSAmcWRpNjUwMF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgwNzsJLyogQWN0dWFsbHkgUElPMyAhSU9SRFkgaXMgcG9zc2libGUgKi8KKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzI7IC8qIEFjdHVhbGx5IFBJTzMgIUlPUkRZIGlzIHBvc3NpYmxlICovCiAJCWFwLT5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19JT1JEWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKaW5kZXggNjk1ZDQ0YS4uNDQwMWIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKQEAgLTIxNiw5ICsyMTYsOSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KLQkJLnVkbWFfbWFzawk9IDB4MTQsIC8qIFVETUEzMy82NiBvbmx5ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTI0X09OTFksCiAJCS5wb3J0X29wcwk9ICZyYWRpc3lzX3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCmluZGV4IGViZmNkYTIuLjhlM2NkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKQEAgLTQ4LDYzICs0OCwxMSBAQAogc3RydWN0IHJiNTMyX2NmX2luZm8gewogCXZvaWQgX19pb21lbQkqaW9iYXNlOwogCXVuc2lnbmVkIGludAlncGlvX2xpbmU7Ci0JaW50CQlmcm96ZW47CiAJdW5zaWduZWQgaW50CWlycTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmI1MzJfcGF0YV9maW5pc2hfaW8oc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gYXAtPmhvc3Q7Ci0Jc3RydWN0IHJiNTMyX2NmX2luZm8gKmluZm8gPSBhaC0+cHJpdmF0ZV9kYXRhOwotCi0JLyogRklYTUU6IEtlZXAgcHJldmlvdXMgZGVsYXkuIElmIHRoaXMgaXMgbWVyZWx5IGEgZmVuY2UgdGhlbgotCSAgIGF0YV9zZmZfc3luYyBtaWdodCBiZSBzdWZmaWNpZW50LiAqLwotCWF0YV9zZmZfZG1hX3BhdXNlKGFwKTsKLQluZGVsYXkoUkI1MDBfQ0ZfSU9fREVMQVkpOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCWNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXdyaXRlYih0Zi0+Y29tbWFuZCwgYXAtPmlvYWRkci5jb21tYW5kX2FkZHIpOwotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFwKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByYjUzMl9wYXRhX2RhdGFfeGZlcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCXVuc2lnbmVkIGludCBidWZsZW4sIGludCB3cml0ZV9kYXRhKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhZGV2LT5saW5rLT5hcDsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOwotCWludCByZXRsZW4gPSBidWZsZW47Ci0KLQlpZiAod3JpdGVfZGF0YSkgewotCQlmb3IgKDsgYnVmbGVuID4gMDsgYnVmbGVuLS0sIGJ1ZisrKQotCQkJd3JpdGViKCpidWYsIGlvYWRkcik7Ci0JfSBlbHNlIHsKLQkJZm9yICg7IGJ1ZmxlbiA+IDA7IGJ1Zmxlbi0tLCBidWYrKykKLQkJCSpidWYgPSByZWFkYihpb2FkZHIpOwotCX0KLQotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFkZXYtPmxpbmstPmFwKTsKLQlyZXR1cm4gcmV0bGVuOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHJiNTMyX3BhdGFfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDA7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCByYjUzMl9wYXRhX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gZGV2X2luc3RhbmNlOwpAQCAtMTEyLDggKzYwLDcgQEAKIAogCWlmIChncGlvX2dldF92YWx1ZShpbmZvLT5ncGlvX2xpbmUpKSB7CiAJCXNldF9pcnFfdHlwZShpbmZvLT5pcnEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0JCWlmICghaW5mby0+ZnJvemVuKQotCQkJYXRhX3NmZl9pbnRlcnJ1cHQoaW5mby0+aXJxLCBkZXZfaW5zdGFuY2UpOworCQlhdGFfc2ZmX2ludGVycnVwdChpbmZvLT5pcnEsIGRldl9pbnN0YW5jZSk7CiAJfSBlbHNlIHsKIAkJc2V0X2lycV90eXBlKGluZm8tPmlycSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7CiAJfQpAQCAtMTIzLDEwICs3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByYjUzMl9wYXRhX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKLQkuc2ZmX2V4ZWNfY29tbWFuZAk9IHJiNTMyX3BhdGFfZXhlY19jb21tYW5kLAotCS5zZmZfZGF0YV94ZmVyCQk9IHJiNTMyX3BhdGFfZGF0YV94ZmVyLAotCS5mcmVlemUJCQk9IHJiNTMyX3BhdGFfZnJlZXplLAotCS50aGF3CQkJPSByYjUzMl9wYXRhX3RoYXcsCisJLnNmZl9kYXRhX3hmZXIJCT0gYXRhX3NmZl9kYXRhX3hmZXIzMiwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTQ1LDcgKzg5LDcgQEAKIAlhcCA9IGFoLT5wb3J0c1swXTsKIAogCWFwLT5vcHMJCT0gJnJiNTMyX3BhdGFfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrCT0gMHgxZjsgLyogUElPNCAqLworCWFwLT5waW9fbWFzawk9IEFUQV9QSU80OwogCWFwLT5mbGFncwk9IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX01NSU87CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyCT0gaW5mby0+aW9iYXNlICsgUkI1MDBfQ0ZfUkVHX0JBU0U7CkBAIC0xNjAsNyArMTA0LDcgQEAKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgcmI1MzJfcGF0YV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOworCWludCBpcnE7CiAJaW50IGdwaW87CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGF0YV9ob3N0ICphaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IDQ2ZDZiYzEuLjBjNTc0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtODgsNyArODgsNyBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJnJ6MTAwMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggOWE0YmRjYS4uZjQ5ODE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yLDcgKzIsNiBAQAogICogTmV3IEFUQSBsYXllciBTQzEyMDAgZHJpdmVyCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqIFRPRE86IE1vZGUgc2VsZWN0aW9uIGZpbHRlcmluZwotICogVE9ETzogQ2FuJ3QgZW5hYmxlIHNlY29uZCBjaGFubmVsIHVudGlsIEFUQSBjb3JlIGhhcyBzZXJpYWxpemUKICAqIFRPRE86IE5lZWRzIGN1c3RvbSBETUEgY2xlYW51cCBjb2RlCiAgKgogICogQmFzZWQgdmVyeSBoZWF2aWx5IG9uCkBAIC0xNzgsNiArMTc3LDMxIEBACiAJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCisvKioKKyAqCXNjMTIwMF9xY19kZWZlcgktCWltcGxlbWVudCBzZXJpYWxpemF0aW9uCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglTZXJpYWxpemUgY29tbWFuZCBpc3N1ZSBvbiB0aGlzIGNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIGludCBzYzEyMDBfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBOb3cgYXBwbHkgc2VyaWFsaXphdGlvbiBydWxlcy4gT25seSBhbGxvdyBhIGNvbW1hbmQgaWYgdGhlCisJICAgb3RoZXIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KKwlpZiAoYWx0ICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4JQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjMTIwMF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQk9IExJQkFUQV9EVU1CX01BWF9QUkQsCkBAIC0xODcsNiArMjExLDcgQEAKIAkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5xY19wcmVwIAk9IGF0YV9zZmZfZHVtYl9xY19wcmVwLAogCS5xY19pc3N1ZQk9IHNjMTIwMF9xY19pc3N1ZSwKKwkucWNfZGVmZXIJPSBzYzEyMDBfcWNfZGVmZXIsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gc2MxMjAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHNjMTIwMF9zZXRfZG1hbW9kZSwKQEAgLTIwNSwxMyArMjMwLDEzIEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwogCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCB9OwogCiAJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2MxMjAwX3NodCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCBkNDQ3ZjFjLi40MjU3ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTEwMDEsOCArMTAwMSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NjX3BvcnRfaW5mb1tdID0gewogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDAwLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLyogTm8gTVdETUEgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnNjY19wYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zY2guYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKaW5kZXggNmFlZWVlYi4uOTljY2ViNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2guYwpAQCAtODQsOSArODQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NoX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSBBVEFfUElPNCwgICAvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsIC8qIG13ZG1hMC0yICovCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgIC8qIHVkbWEwLTUgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2NoX3BhdGFfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDhkMmZkOWQuLmJlYWVkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKQEAgLTM5OCwyNiArMzk4LDI2IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bNF0gPSB7CiAJCXsgLyogT1NCNCAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19vc2I0X3BvcnRfb3BzCiAJCX0sIHsgLyogT1NCNCBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSAweDAwLAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkvKiBObyBVRE1BICovCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX2NzYl9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgLSBsYXRlciByZXZpc2lvbnMqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3NfY3NiX3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDllNzY0ZTUuLjRjYjY0OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMjgyLDE1ICsyODIsMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmc2lsNjgwX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbG93ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZzaWw2ODBfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKaW5kZXggMjdjZWI0Mi4uNDg4ZTc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCkBAIC01NTIsNTEgKzU1Miw1NyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJPSAweDA3LAotCS51ZG1hX21hc2sJPSAwLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkvKiBObyBVRE1BICovCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzMzID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCT0gMHgwNywKLQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAkvKiBVRE1BIDMzICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzY2ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLworCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJLnBvcnRfb3BzCT0gJnNpc182Nl9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2lzXzEwMF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwX2Vhcmx5ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzMgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX29wcywKIH07CiBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzM19mb3Jfc2F0YSA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Zvcl9zYXRhX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZWFybHkgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Vhcmx5X29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKaW5kZXggMWIwZTdiNi4uMjlmNzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwpAQCAtMjgzLDEzICsyODMsMTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19kbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNsODJjMTA1X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZzbDgyYzEwNV9wb3J0X29wcwogCX07CiAJLyogZm9yIG5vdyB1c2Ugb25seSB0aGUgZmlyc3QgcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwppbmRleCBlZjk1OTc1Li5mMWYxM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwpAQCAtMTkxLDggKzE5MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnRyaWZsZXhfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IGJhNTU2ZDMuLmIwOGU2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtNDIyLDQ2ICs0MjIsNDYgQEAKIAkvKiBFYXJseSBWSUEgd2l0aG91dCBVRE1BIHN1cHBvcnQgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX213ZG1hX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogRGl0dG8gd2l0aCBJUlEgbWFza2luZyByZXF1aXJlZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mb19ib3JrZWQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wc19ub2lycSwKIAl9OwogCS8qIFZJQSBVRE1BIDMzIGRldmljZXMgKGFuZCBib3JrZWQgNjYpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMzNfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSA2NiBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hNjZfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSAxMDAgZGV2aWNlcyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTEwMF9pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFVETUExMzMgd2l0aCBiYWQgQVNUIChBbGwgY3VycmVudCAxMzMpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogRklYTUU6IHNob3VsZCBjaGVjayBub3J0aCBicmlkZ2UgKi8KIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCmluZGV4IDMxOWUxNjQuLjZkODYxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJYXRhX3BvcnRfZGVzYyhhcCwgImNtZCAweCVseCBjdGwgMHglbHgiLCBjbWRfcG9ydCwgY3RsX3BvcnQpOwogCiAJCWFwLT5vcHMgPSAmd2luYm9uZF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCQlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCmluZGV4IGJlNTM1NDUuLjM5NTg4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwpAQCAtMTQ4LDYgKzE0OCw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWRtYV9hdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKIAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKKwogCS5jaGVja19hdGFwaV9kbWEJPSBhZG1hX2NoZWNrX2F0YXBpX2RtYSwKIAkucWNfcHJlcAkJPSBhZG1hX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFkbWFfcWNfaXNzdWUsCkBAIC0xNjYsNyArMTY4LDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmYWRtYV9hdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCA1NWJjODhjLi5jMmU5MGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTEyNzksOCArMTI3OSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2F0YV9mc2xfcG9ydF9pbmZvW10gPSB7CiAJewogCSAuZmxhZ3MgPSBTQVRBX0ZTTF9IT1NUX0ZMQUdTLAotCSAucGlvX21hc2sgPSAweDFmLAkvKiBwaW8gMC00ICovCi0JIC51ZG1hX21hc2sgPSAweDdmLAkvKiB1ZG1hIDAtNiAqLworCSAucGlvX21hc2sgPSBBVEFfUElPNCwKKwkgLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkgLnBvcnRfb3BzID0gJnNhdGFfZnNsX29wcywKIAkgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKaW5kZXggZmJiZDg3Yy4uMzA1YTRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwpAQCAtNzQ0LDggKzc0NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmljX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19QSU9fRE1BLAotCS5waW9fbWFzawkJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawkJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCS5waW9fbWFzawkJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawkJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwkJPSAmaW5pY19wb3J0X29wcwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCA3NGIxMDgwLi5hMzc3MjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0xLDEwICsxLDEzIEBACiAvKgogICogc2F0YV9tdi5jIC0gTWFydmVsbCBTQVRBIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgMjAwODogTWFydmVsbCBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDk6IE1hcnZlbGwgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNTogRU1DIENvcnBvcmF0aW9uLCBhbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJldHQgUnVzcy4KKyAqIEV4dGVuc2l2ZSBvdmVyaGF1bCBhbmQgZW5oYW5jZW1lbnQgYnkgTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+LgorICoKICAqIFBsZWFzZSBBTFdBWVMgY29weSBsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnIG9uIGVtYWlscy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsMjAgKzI4LDEzIEBACiAvKgogICogc2F0YV9tdiBUT0RPIGxpc3Q6CiAgKgotICogLS0+IEVycmF0YSB3b3JrYXJvdW5kIGZvciBOQ1EgZGV2aWNlIGVycm9ycy4KLSAqCiAgKiAtLT4gTW9yZSBlcnJhdGEgd29ya2Fyb3VuZHMgZm9yIFBDSS1YLgogICoKICAqIC0tPiBDb21wbGV0ZSBhIGZ1bGwgZXJyYXRhIGF1ZGl0IGZvciBhbGwgY2hpcHNldHMgdG8gaWRlbnRpZnkgb3RoZXJzLgogICoKLSAqIC0tPiBBVEFQSSBzdXBwb3J0IChNYXJ2ZWxsIGNsYWltcyB0aGUgNjB4eC83MHh4IGNoaXBzIGNhbiBkbyBpdCkuCi0gKgogICogLS0+IERldmVsb3AgYSBsb3ctcG93ZXItY29uc3VtcHRpb24gc3RyYXRlZ3ksIGFuZCBpbXBsZW1lbnQgaXQuCiAgKgotICogLS0+IFtFeHBlcmltZW50LCBsb3cgcHJpb3JpdHldIEludmVzdGlnYXRlIGludGVycnVwdCBjb2FsZXNjaW5nLgotICogICAgICAgUXVpdGUgb2Z0ZW4sIGVzcGVjaWFsbHkgd2l0aCBQQ0kgTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0cyAoTVNJKSwKLSAqICAgICAgIHRoZSBvdmVyaGVhZCByZWR1Y2VkIGJ5IGludGVycnVwdCBtaXRpZ2F0aW9uIGlzIHF1aXRlIG9mdGVuIG5vdAotICogICAgICAgd29ydGggdGhlIGxhdGVuY3kgY29zdC4KKyAqIC0tPiBBZGQgc3lzZnMgYXR0cmlidXRlcyBmb3IgcGVyLWNoaXAgLyBwZXItSEMgSVJRIGNvYWxlc2NpbmcgdGhyZXNob2xkcy4KICAqCiAgKiAtLT4gW0V4cGVyaW1lbnQsIE1hcnZlbGwgdmFsdWUgYWRkZWRdIElzIGl0IHBvc3NpYmxlIHRvIHVzZSB0YXJnZXQKICAqICAgICAgIG1vZGUgdG8gY3Jvc3MtY29ubmVjdCB0d28gTGludXggYm94ZXMgd2l0aCBNYXJ2ZWxsIGNhcmRzPyAgSWYgc28sCkBAIC02OCw3ICs2NCwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX212IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4yNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMjciCisKKy8qCisgKiBtb2R1bGUgb3B0aW9ucworICovCisKK3N0YXRpYyBpbnQgbXNpOworI2lmZGVmIENPTkZJR19QQ0kKK21vZHVsZV9wYXJhbShtc2ksIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7CisjZW5kaWYKKworc3RhdGljIGludCBpcnFfY29hbGVzY2luZ19pb19jb3VudDsKK21vZHVsZV9wYXJhbShpcnFfY29hbGVzY2luZ19pb19jb3VudCwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2NvYWxlc2NpbmdfaW9fY291bnQsCisJCSAiSVJRIGNvYWxlc2NpbmcgSS9PIGNvdW50IHRocmVzaG9sZCAoMC4uMjU1KSIpOworCitzdGF0aWMgaW50IGlycV9jb2FsZXNjaW5nX3VzZWNzOworbW9kdWxlX3BhcmFtKGlycV9jb2FsZXNjaW5nX3VzZWNzLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpcnFfY29hbGVzY2luZ191c2VjcywKKwkJICJJUlEgY29hbGVzY2luZyB0aW1lIHRocmVzaG9sZCBpbiB1c2VjcyIpOwogCiBlbnVtIHsKIAkvKiBCQVIncyBhcmUgZW51bWVyYXRlZCBpbiB0ZXJtcyBvZiBwY2lfcmVzb3VyY2Vfc3RhcnQoKSB0ZXJtcyAqLwpAQCAtNzksMTMgKzk1LDMyIEBACiAJTVZfTUFKT1JfUkVHX0FSRUFfU1oJPSAweDEwMDAwLAkvKiA2NEtCICovCiAJTVZfTUlOT1JfUkVHX0FSRUFfU1oJPSAweDIwMDAsCS8qIDhLQiAqLwogCisJLyogRm9yIHVzZSB3aXRoIGJvdGggSVJRIGNvYWxlc2NpbmcgbWV0aG9kcyAoImFsbCBwb3J0cyIgb3IgInBlci1IQyIgKi8KKwlDT0FMX0NMT0NLU19QRVJfVVNFQwk9IDE1MCwJCS8qIGZvciBjYWxjdWxhdGluZyBDT0FMX1RJTUVzICovCisJTUFYX0NPQUxfVElNRV9USFJFU0hPTEQJPSAoKDEgPDwgMjQpIC0gMSksIC8qIGludGVybmFsIGNsb2NrcyBjb3VudCAqLworCU1BWF9DT0FMX0lPX0NPVU5UCT0gMjU1LAkJLyogY29tcGxldGVkIEkvTyBjb3VudCAqLworCiAJTVZfUENJX1JFR19CQVNFCQk9IDAsCi0JTVZfSVJRX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAkvKiA2eHh4IHBhcnQgb25seSAqLwotCU1WX0lSUV9DT0FMX0NBVVNFCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4MDgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0xPCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ODgpLAotCU1WX0lSUV9DT0FMX0NBVVNFX0hJCQk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAotCU1WX0lSUV9DT0FMX1RIUkVTSE9MRAkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweGNjKSwKLQlNVl9JUlFfQ09BTF9USU1FX1RIUkVTSE9MRAk9IChNVl9JUlFfQ09BTF9SRUdfQkFTRSArIDB4ZDApLAorCisJLyoKKwkgKiBQZXItY2hpcCAoImFsbCBwb3J0cyIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBvbmx5IGZvciBHRU5fSUkgLyBHRU5fSUlFIGhhcmR3YXJlLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCU1WX0NPQUxfUkVHX0JBU0UJPSAweDE4MDAwLAorCU1WX0lSUV9DT0FMX0NBVVNFCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDA4KSwKKwlBTExfUE9SVFNfQ09BTF9JUlEJPSAoMSA8PCA0KSwJLyogYWxsIHBvcnRzIGlycSBldmVudCAqLworCisJTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEICAgPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4Y2MpLAorCU1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEID0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweGQwKSwKKworCS8qCisJICogUmVnaXN0ZXJzIGZvciB0aGUgKHVudXNlZCBoZXJlKSB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nIGZlYXR1cmU6CisJICovCisJTVZfVFJBTl9DT0FMX0NBVVNFX0xPCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDg4KSwKKwlNVl9UUkFOX0NPQUxfQ0FVU0VfSEkJPSAoTVZfQ09BTF9SRUdfQkFTRSArIDB4OGMpLAogCiAJTVZfU0FUQUhDMF9SRUdfQkFTRQk9IDB4MjAwMDAsCiAJTVZfRkxBU0hfQ1RMX09GUwk9IDB4MTA0NmMsCkBAIC0xMTcsMTcgKzE1MiwxNiBAQAogCiAJLyogSG9zdCBGbGFncyAqLwogCU1WX0ZMQUdfRFVBTF9IQwkJPSAoMSA8PCAzMCksICAvKiB0d28gU0FUQSBIb3N0IENvbnRyb2xsZXJzICovCi0JTVZfRkxBR19JUlFfQ09BTEVTQ0UJPSAoMSA8PCAyOSksICAvKiBJUlEgY29hbGVzY2luZyBjYXBhYmlsaXR5ICovCiAKIAlNVl9DT01NT05fRkxBR1MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fQVRBUEkgfAotCQkJCSAgQVRBX0ZMQUdfUElPX1BPTExJTkcsCisJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX1BPTExJTkcsCiAKLQlNVl82WFhYX0ZMQUdTCQk9IE1WX0ZMQUdfSVJRX0NPQUxFU0NFLAorCU1WX0dFTl9JX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX05PX0FUQVBJLAogCi0JTVZfR0VOSUlFX0ZMQUdTCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAotCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKLQkJCQkgIEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0FOLAorCU1WX0dFTl9JSV9GTEFHUwkJPSBNVl9DT01NT05fRkxBR1MgfCBBVEFfRkxBR19OQ1EgfAorCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBLAorCisJTVZfR0VOX0lJRV9GTEFHUwk9IE1WX0dFTl9JSV9GTEFHUyB8IEFUQV9GTEFHX0FOLAogCiAJQ1JRQl9GTEFHX1JFQUQJCT0gKDEgPDwgMCksCiAJQ1JRQl9UQUdfU0hJRlQJCT0gMSwKQEAgLTE4MCwxNiArMjE0LDE4IEBACiAJUENJX0hDX01BSU5fSVJRX01BU0tfT0ZTICA9IDB4MWQ2NCwKIAlTT0NfSENfTUFJTl9JUlFfQ0FVU0VfT0ZTID0gMHgyMDAyMCwKIAlTT0NfSENfTUFJTl9JUlFfTUFTS19PRlMgID0gMHgyMDAyNCwKLQlFUlJfSVJRCQkJPSAoMSA8PCAwKSwJLyogc2hpZnQgYnkgcG9ydCAjICovCi0JRE9ORV9JUlEJCT0gKDEgPDwgMSksCS8qIHNoaWZ0IGJ5IHBvcnQgIyAqLworCUVSUl9JUlEJCQk9ICgxIDw8IDApLAkvKiBzaGlmdCBieSAoMiAqIHBvcnQgIykgKi8KKwlET05FX0lSUQkJPSAoMSA8PCAxKSwJLyogc2hpZnQgYnkgKDIgKiBwb3J0ICMpICovCiAJSEMwX0lSUV9QRU5ECQk9IDB4MWZmLAkvKiBiaXRzIDAtOCA9IEhDMCdzIHBvcnRzICovCiAJSENfU0hJRlQJCT0gOSwJCS8qIGJpdHMgOS0xNyA9IEhDMSdzIHBvcnRzICovCisJRE9ORV9JUlFfMF8zCQk9IDB4MDAwMDAwYWEsCS8qIERPTkVfSVJRIHBvcnRzIDAsMSwyLDMgKi8KKwlET05FX0lSUV80XzcJCT0gKERPTkVfSVJRXzBfMyA8PCBIQ19TSElGVCksICAvKiA0LDUsNiw3ICovCiAJUENJX0VSUgkJCT0gKDEgPDwgMTgpLAotCVRSQU5fTE9fRE9ORQkJPSAoMSA8PCAxOSksCS8qIDZ4eHg6IElSUSBjb2FsZXNjaW5nICovCi0JVFJBTl9ISV9ET05FCQk9ICgxIDw8IDIwKSwJLyogNnh4eDogSVJRIGNvYWxlc2NpbmcgKi8KLQlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCi0JUE9SVFNfNF83X0NPQUxfRE9ORQk9ICgxIDw8IDE3KSwKLQlQT1JUU18wXzdfQ09BTF9ET05FCT0gKDEgPDwgMjEpLAkvKiA2eHh4OiBJUlEgY29hbGVzY2luZyAqLworCVRSQU5fQ09BTF9MT19ET05FCT0gKDEgPDwgMTkpLAkvKiB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nICovCisJVFJBTl9DT0FMX0hJX0RPTkUJPSAoMSA8PCAyMCksCS8qIHRyYW5zYWN0aW9uIGNvYWxlc2NpbmcgKi8KKwlQT1JUU18wXzNfQ09BTF9ET05FCT0gKDEgPDwgOCksCS8qIEhDMCBJUlEgY29hbGVzY2luZyAqLworCVBPUlRTXzRfN19DT0FMX0RPTkUJPSAoMSA8PCAxNyksCS8qIEhDMSBJUlEgY29hbGVzY2luZyAqLworCUFMTF9QT1JUU19DT0FMX0RPTkUJPSAoMSA8PCAyMSksCS8qIEdFTl9JSShFKSBJUlEgY29hbGVzY2luZyAqLwogCUdQSU9fSU5UCQk9ICgxIDw8IDIyKSwKIAlTRUxGX0lOVAkJPSAoMSA8PCAyMyksCiAJVFdTSV9JTlQJCT0gKDEgPDwgMjQpLApAQCAtMjA1LDYgKzI0MSwyMSBAQAogCUhDX0NPQUxfSVJRCQk9ICgxIDw8IDQpLAkvKiBJUlEgY29hbGVzY2luZyAqLwogCURFVl9JUlEJCQk9ICgxIDw8IDgpLAkvKiBzaGlmdCBieSBwb3J0ICMgKi8KIAorCS8qCisJICogUGVyLUhDIChIb3N0LUNvbnRyb2xsZXIpIGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmUuCisJICogVGhpcyBpcyBwcmVzZW50IG9uIGFsbCBjaGlwIGdlbmVyYXRpb25zLgorCSAqCisJICogQ29hbGVzY2luZyBkZWZlcnMgdGhlIGludGVycnVwdCB1bnRpbCBlaXRoZXIgdGhlIElPX1RIUkVTSE9MRAorCSAqIChjb3VudCBvZiBjb21wbGV0ZWQgSS9PcykgaXMgbWV0LCBvciB0aGUgVElNRV9USFJFU0hPTEQgaXMgbWV0LgorCSAqLworCUhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMJPSAweDAwMGMsCisJSENfSVJRX0NPQUxfVElNRV9USFJFU0hPTERfT0ZTCT0gMHgwMDEwLAorCisJU09DX0xFRF9DVFJMX09GUwk9IDB4MmMsCisJU09DX0xFRF9DVFJMX0JMSU5LCT0gKDEgPDwgMCksCS8qIEFjdGl2ZSBMRUQgYmxpbmsgKi8KKwlTT0NfTEVEX0NUUkxfQUNUX1BSRVNFTkNFID0gKDEgPDwgMiksCS8qIE11bHRpcGxleCBkZXYgcHJlc2VuY2UgKi8KKwkJCQkJCS8qICB3aXRoIGRldiBhY3Rpdml0eSBMRUQgKi8KKwogCS8qIFNoYWRvdyBibG9jayByZWdpc3RlcnMgKi8KIAlTSERfQkxLX09GUwkJPSAweDEwMCwKIAlTSERfQ1RMX0FTVF9PRlMJCT0gMHgyMCwJCS8qIG9mcyBmcm9tIFNIRF9CTEtfT0ZTICovCkBAIC0zNDYsNiArMzk3LDEyIEBACiAJRURNQV9BUkJfQ0ZHX09GUwk9IDB4MzgsCiAKIAlFRE1BX0hBTFRDT05EX09GUwk9IDB4NjAsCQkvKiBHZW5JSWUgaGFsdCBjb25kaXRpb25zICovCisJRURNQV9VTktOT1dOX1JTVkRfT0ZTCT0gMHg2QywJCS8qIEdlbklJZSB1bmtub3duL3Jlc2VydmVkICovCisKKwlCTURNQV9DTURfT0ZTCQk9IDB4MjI0LAkvKiBibWRtYSBjb21tYW5kIHJlZ2lzdGVyICovCisJQk1ETUFfU1RBVFVTX09GUwk9IDB4MjI4LAkvKiBibWRtYSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlCTURNQV9QUkRfTE9XX09GUwk9IDB4MjJjLAkvKiBibWRtYSBQUkQgYWRkciAzMTowICovCisJQk1ETUFfUFJEX0hJR0hfT0ZTCT0gMHgyMzAsCS8qIGJtZG1hIFBSRCBhZGRyIDYzOjMyICovCiAKIAkvKiBIb3N0IHByaXZhdGUgZmxhZ3MgKGhwX2ZsYWdzKSAqLwogCU1WX0hQX0ZMQUdfTVNJCQk9ICgxIDw8IDApLApAQCAtMzU5LDEyICs0MTYsMTQgQEAKIAlNVl9IUF9QQ0lFCQk9ICgxIDw8IDkpLAkvKiBQQ0llIGJ1cy9yZWdzOiA3MDQyICovCiAJTVZfSFBfQ1VUX1RIUk9VR0gJPSAoMSA8PCAxMCksCS8qIGNhbiB1c2UgRURNQSBjdXQtdGhyb3VnaCAqLwogCU1WX0hQX0ZMQUdfU09DCQk9ICgxIDw8IDExKSwJLyogU3lzdGVtT25DaGlwLCBubyBQQ0kgKi8KKwlNVl9IUF9RVUlSS19MRURfQkxJTktfRU4gPSAoMSA8PCAxMiksCS8qIGlzIGxlZCBibGlua2luZyBlbmFibGVkPyAqLwogCiAJLyogUG9ydCBwcml2YXRlIGZsYWdzIChwcF9mbGFncykgKi8KIAlNVl9QUF9GTEFHX0VETUFfRU4JPSAoMSA8PCAwKSwJLyogaXMgRURNQSBlbmdpbmUgZW5hYmxlZD8gKi8KIAlNVl9QUF9GTEFHX05DUV9FTgk9ICgxIDw8IDEpLAkvKiBpcyBFRE1BIHNldCB1cCBmb3IgTkNRPyAqLwogCU1WX1BQX0ZMQUdfRkJTX0VOCT0gKDEgPDwgMiksCS8qIGlzIEVETUEgc2V0IHVwIGZvciBGQlM/ICovCiAJTVZfUFBfRkxBR19ERUxBWUVEX0VICT0gKDEgPDwgMyksCS8qIGRlbGF5ZWQgZGV2IGVyciBoYW5kbGluZyAqLworCU1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSA9ICgxIDw8IDQpLAkvKiBpZ25vcmUgaW5pdGlhbCBBVEFfRFJEWSAqLwogfTsKIAogI2RlZmluZSBJU19HRU5fSShocHJpdikgKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfR0VOX0kpCkBAIC00MzMsNiArNDkyLDE4IEBACiAJX19sZTMyCQkJcmVzZXJ2ZWQ7CiB9OwogCisvKgorICogV2Uga2VlcCBhIGxvY2FsIGNhY2hlIG9mIGEgZmV3IGZyZXF1ZW50bHkgYWNjZXNzZWQgcG9ydAorICogcmVnaXN0ZXJzIGhlcmUsIHRvIGF2b2lkIGhhdmluZyB0byByZWFkIHRoZW0gKHZlcnkgc2xvdykKKyAqIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gRURNQSBhbmQgbm9uLUVETUEgbW9kZXMuCisgKi8KK3N0cnVjdCBtdl9jYWNoZWRfcmVncyB7CisJdTMyCQkJZmlzY2ZnOworCXUzMgkJCWx0bW9kZTsKKwl1MzIJCQloYWx0Y29uZDsKKwl1MzIJCQl1bmtub3duX3JzdmQ7Cit9OworCiBzdHJ1Y3QgbXZfcG9ydF9wcml2IHsKIAlzdHJ1Y3QgbXZfY3JxYgkJKmNycWI7CiAJZG1hX2FkZHJfdAkJY3JxYl9kbWE7CkBAIC00NDUsNiArNTE2LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJlc3BfaWR4OwogCiAJdTMyCQkJcHBfZmxhZ3M7CisJc3RydWN0IG12X2NhY2hlZF9yZWdzCWNhY2hlZDsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5ZWRfZWhfcG1wX21hcDsKIH07CiAKQEAgLTUzNSw3ICs2MDcsNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgcG9ydF9ubyk7CiBzdGF0aWMgaW50IG12X3N0b3BfZWRtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyBpbnQgbXZfc3RvcF9lZG1hX2VuZ2luZSh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyk7Ci1zdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EpOworc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9lZG1hKTsKIAogc3RhdGljIHZvaWQgbXZfcG1wX3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgcG1wKTsKIHN0YXRpYyBpbnQgbXZfcG1wX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCkBAIC01NDYsNiArNjE4LDE0IEBACiBzdGF0aWMgdm9pZCBtdl9wcm9jZXNzX2NycGJfZW50cmllcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCQlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCk7CiAKK3N0YXRpYyB2b2lkIG12X3NmZl9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IG12X2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB2b2lkIG12X2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHU4ICAgbXZfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHU4IG12X3NmZl9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKIC8qIC5zZ190YWJsZXNpemUgaXMgKE1WX01BWF9TR19DVCAvIDIpIGluIHRoZSBzdHJ1Y3R1cmVzIGJlbG93CiAgKiBiZWNhdXNlIHdlIGhhdmUgdG8gYWxsb3cgcm9vbSBmb3Igd29yc3QgY2FzZSBzcGxpdHRpbmcgb2YKICAqIFBSRHMgZm9yIDY0SyBib3VuZGFyaWVzIGluIG12X2ZpbGxfc2coKS4KQEAgLTU2Niw2ICs2NDYsOCBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12NV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAorCiAJLnFjX2RlZmVyCQk9IG12X3FjX2RlZmVyLAogCS5xY19wcmVwCQk9IG12X3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IG12X3FjX2lzc3VlLApAQCAtNTkzLDYgKzY3NSwxNCBAQAogCS5wbXBfc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuc29mdHJlc2V0CQk9IG12X3NvZnRyZXNldCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBtdl9wbXBfZXJyb3JfaGFuZGxlciwKKworCS5zZmZfY2hlY2tfc3RhdHVzCT0gbXZfc2ZmX2NoZWNrX3N0YXR1cywKKwkuc2ZmX2lycV9jbGVhcgkJPSBtdl9zZmZfaXJxX2NsZWFyLAorCS5jaGVja19hdGFwaV9kbWEJPSBtdl9jaGVja19hdGFwaV9kbWEsCisJLmJtZG1hX3NldHVwCQk9IG12X2JtZG1hX3NldHVwLAorCS5ibWRtYV9zdGFydAkJPSBtdl9ibWRtYV9zdGFydCwKKwkuYm1kbWFfc3RvcAkJPSBtdl9ibWRtYV9zdG9wLAorCS5ibWRtYV9zdGF0dXMJCT0gbXZfYm1kbWFfc3RhdHVzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12X2lpZV9vcHMgPSB7CkBAIC02MDMsNTMgKzY5Myw0OSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbXZfcG9ydF9pbmZvW10gPSB7CiAJeyAgLyogY2hpcF81MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDh4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF81MDgwICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCisJCS5mbGFncwkJPSBNVl9HRU5fSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF82MDR4ICovCi0JCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKLQkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8Ci0JCQkJICBBVEFfRkxBR19OQ1EsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY2X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNjA4eCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8Ci0JCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAotCQkJCSAgQVRBX0ZMQUdfTkNRIHwgTVZfRkxBR19EVUFMX0hDLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12Nl9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzYwNDIgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKIAl9LAogCXsgIC8qIGNoaXBfNzA0MiAqLwotCQkuZmxhZ3MJCT0gTVZfR0VOSUlFX0ZMQUdTLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJRV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdl9paWVfb3BzLAogCX0sCiAJeyAgLyogY2hpcF9zb2MgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKQEAgLTc5NCw2ICs4ODAsNDQgQEAKIAlyZXR1cm4gKChwb3J0X2ZsYWdzICYgTVZfRkxBR19EVUFMX0hDKSA/IDIgOiAxKTsKIH0KIAorLyoqCisgKiAgICAgIG12X3NhdmVfY2FjaGVkX3JlZ3MgLSAocmUtKWluaXRpYWxpemUgY2FjaGVkIHBvcnQgcmVnaXN0ZXJzCisgKiAgICAgIEBhcDogdGhlIHBvcnQgd2hvc2UgcmVnaXN0ZXJzIHdlIGFyZSBjYWNoaW5nCisgKgorICoJSW5pdGlhbGl6ZSB0aGUgbG9jYWwgY2FjaGUgb2YgcG9ydCByZWdpc3RlcnMsCisgKglzbyB0aGF0IHJlYWRpbmcgdGhlbSBvdmVyIGFuZCBvdmVyIGFnYWluIGNhbgorICoJYmUgYXZvaWRlZCBvbiB0aGUgaG90dGVyIHBhdGhzIG9mIHRoaXMgZHJpdmVyLgorICoJVGhpcyBzYXZlcyBhIGZldyBtaWNyb3NlY29uZHMgZWFjaCB0aW1lIHdlIHN3aXRjaAorICoJdG8vZnJvbSBFRE1BIG1vZGUgdG8gcGVyZm9ybSAoZWcuKSBhIGRyaXZlIGNhY2hlIGZsdXNoLgorICovCitzdGF0aWMgdm9pZCBtdl9zYXZlX2NhY2hlZF9yZWdzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlwcC0+Y2FjaGVkLmZpc2NmZyA9IHJlYWRsKHBvcnRfbW1pbyArIEZJU0NGR19PRlMpOworCXBwLT5jYWNoZWQubHRtb2RlID0gcmVhZGwocG9ydF9tbWlvICsgTFRNT0RFX09GUyk7CisJcHAtPmNhY2hlZC5oYWx0Y29uZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTKTsKKwlwcC0+Y2FjaGVkLnVua25vd25fcnN2ZCA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfVU5LTk9XTl9SU1ZEX09GUyk7Cit9CisKKy8qKgorICogICAgICBtdl93cml0ZV9jYWNoZWRfcmVnIC0gd3JpdGUgdG8gYSBjYWNoZWQgcG9ydCByZWdpc3RlcgorICogICAgICBAYWRkcjogaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKKyAqICAgICAgQG9sZDogcG9pbnRlciB0byBjYWNoZWQgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyCisgKiAgICAgIEBuZXc6IG5ldyB2YWx1ZSBmb3IgdGhlIHJlZ2lzdGVyCisgKgorICoJV3JpdGUgYSBuZXcgdmFsdWUgdG8gYSBjYWNoZWQgcmVnaXN0ZXIsCisgKglidXQgb25seSBpZiB0aGUgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gYmVmb3JlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbXZfd3JpdGVfY2FjaGVkX3JlZyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiAqb2xkLCB1MzIgbmV3KQoreworCWlmIChuZXcgIT0gKm9sZCkgeworCQkqb2xkID0gbmV3OworCQl3cml0ZWwobmV3LCBhZGRyKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9lZG1hX3B0cnModm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgICAgIHN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2LAogCQkJICAgICBzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCkKQEAgLTgyNSw2ICs5NDksMjMgQEAKIAkJIHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOwogfQogCitzdGF0aWMgdm9pZCBtdl93cml0ZV9tYWluX2lycV9tYXNrKHUzMiBtYXNrLCBzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdikKK3sKKwkvKgorCSAqIFdoZW4gd3JpdGluZyB0byB0aGUgbWFpbl9pcnFfbWFzayBpbiBoYXJkd2FyZSwKKwkgKiB3ZSBtdXN0IGVuc3VyZSBleGNsdXNpdml0eSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBiaXRzCisJICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGluZGl2aWR1YWwgcG9ydCBET05FX0lSUSBiaXRzLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgcmVhbGx5IGFuICJJUlEgZW5hYmxlIiByZWdpc3RlciwKKwkgKiBub3QgYW4gIklSUSBtYXNrIiByZWdpc3RlciBhcyBNYXJ2ZWxsJ3MgbmFtaW5nIG1pZ2h0IHN1Z2dlc3QuCisJICovCisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzBfM19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV8wXzM7CisJaWYgKG1hc2sgJiAoQUxMX1BPUlRTX0NPQUxfRE9ORSB8IFBPUlRTXzRfN19DT0FMX0RPTkUpKQorCQltYXNrICY9IH5ET05FX0lSUV80Xzc7CisJd3JpdGVsZmwobWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkIG12X3NldF9tYWluX2lycV9tYXNrKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKIAkJCQkgdTMyIGRpc2FibGVfYml0cywgdTMyIGVuYWJsZV9iaXRzKQogewpAQCAtODM1LDcgKzk3Niw3IEBACiAJbmV3X21hc2sgPSAob2xkX21hc2sgJiB+ZGlzYWJsZV9iaXRzKSB8IGVuYWJsZV9iaXRzOwogCWlmIChuZXdfbWFzayAhPSBvbGRfbWFzaykgewogCQlocHJpdi0+bWFpbl9pcnFfbWFzayA9IG5ld19tYXNrOwotCQl3cml0ZWxmbChuZXdfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2sobmV3X21hc2ssIGhwcml2KTsKIAl9CiB9CiAKQEAgLTg1Miw4ICs5OTMsOTQgQEAKIAltdl9zZXRfbWFpbl9pcnFfbWFzayhhcC0+aG9zdCwgZGlzYWJsZV9iaXRzLCBlbmFibGVfYml0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIG12X2NsZWFyX2FuZF9lbmFibGVfcG9ydF9pcnFzKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJCSAgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCisJCQkJCSAgdW5zaWduZWQgaW50IHBvcnRfaXJxcykKK3sKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJaW50IGhhcmRwb3J0ID0gbXZfaGFyZHBvcnRfZnJvbV9wb3J0KGFwLT5wb3J0X25vKTsKKwl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKKwkJCQltdl9ob3N0X2Jhc2UoYXAtPmhvc3QpLCBhcC0+cG9ydF9ubyk7CisJdTMyIGhjX2lycV9jYXVzZTsKKworCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCisJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgRURNQV9FUlJfSVJRX0NBVVNFX09GUyk7CisKKwkvKiBjbGVhciBwZW5kaW5nIGlycSBldmVudHMgKi8KKwloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOworCXdyaXRlbGZsKGhjX2lycV9jYXVzZSwgaGNfbW1pbyArIEhDX0lSUV9DQVVTRV9PRlMpOworCisJLyogY2xlYXIgRklTIElSUSBDYXVzZSAqLworCWlmIChJU19HRU5fSUlFKGhwcml2KSkKKwkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisKKwltdl9lbmFibGVfcG9ydF9pcnFzKGFwLCBwb3J0X2lycXMpOworfQorCitzdGF0aWMgdm9pZCBtdl9zZXRfaXJxX2NvYWxlc2Npbmcoc3RydWN0IGF0YV9ob3N0ICpob3N0LAorCQkJCSAgdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgdXNlY3MpCit7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICptbWlvID0gaHByaXYtPmJhc2UsICpoY19tbWlvOworCXUzMiBjb2FsX2VuYWJsZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2xrcywgaXNfZHVhbF9oYyA9IGhwcml2LT5uX3BvcnRzID4gTVZfUE9SVFNfUEVSX0hDOworCWNvbnN0IHUzMiBjb2FsX2Rpc2FibGUgPSBQT1JUU18wXzNfQ09BTF9ET05FIHwgUE9SVFNfNF83X0NPQUxfRE9ORSB8CisJCQkJCQkJQUxMX1BPUlRTX0NPQUxfRE9ORTsKKworCS8qIERpc2FibGUgSVJRIGNvYWxlc2NpbmcgaWYgZWl0aGVyIHRocmVzaG9sZCBpcyB6ZXJvICovCisJaWYgKCF1c2VjcyB8fCAhY291bnQpIHsKKwkJY2xrcyA9IGNvdW50ID0gMDsKKwl9IGVsc2UgeworCQkvKiBSZXNwZWN0IG1heGltdW0gbGltaXRzIG9mIHRoZSBoYXJkd2FyZSAqLworCQljbGtzID0gdXNlY3MgKiBDT0FMX0NMT0NLU19QRVJfVVNFQzsKKwkJaWYgKGNsa3MgPiBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRCkKKwkJCWNsa3MgPSBNQVhfQ09BTF9USU1FX1RIUkVTSE9MRDsKKwkJaWYgKGNvdW50ID4gTUFYX0NPQUxfSU9fQ09VTlQpCisJCQljb3VudCA9IE1BWF9DT0FMX0lPX0NPVU5UOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgY29hbF9kaXNhYmxlLCAwKTsKKworCWlmIChpc19kdWFsX2hjICYmICFJU19HRU5fSShocHJpdikpIHsKKwkJLyoKKwkJICogR0VOX0lJL0dFTl9JSUUgd2l0aCBkdWFsIGhvc3QgY29udHJvbGxlcnM6CisJCSAqIG9uZSBzZXQgb2YgZ2xvYmFsIHRocmVzaG9sZHMgZm9yIHRoZSBlbnRpcmUgY2hpcC4KKwkJICovCisJCXdyaXRlbChjbGtzLCAgbW1pbyArIE1WX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEKTsKKwkJd3JpdGVsKGNvdW50LCBtbWlvICsgTVZfSVJRX0NPQUxfSU9fVEhSRVNIT0xEKTsKKwkJLyogY2xlYXIgbGVmdG92ZXIgY29hbCBJUlEgYml0ICovCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCQlpZiAoY291bnQpCisJCQljb2FsX2VuYWJsZSA9IEFMTF9QT1JUU19DT0FMX0RPTkU7CisJCWNsa3MgPSBjb3VudCA9IDA7IC8qIGZvcmNlIGNsZWFyaW5nIG9mIHJlZ3VsYXIgcmVncyBiZWxvdyAqLworCX0KKworCS8qCisJICogQWxsIGNoaXBzOiBpbmRlcGVuZGVudCB0aHJlc2hvbGRzIGZvciBlYWNoIEhDIG9uIHRoZSBjaGlwLgorCSAqLworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtbWlvLCAwKTsKKwl3cml0ZWwoY2xrcywgIGhjX21taW8gKyBIQ19JUlFfQ09BTF9USU1FX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCXdyaXRlbCh+SENfQ09BTF9JUlEsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKKwlpZiAoY291bnQpCisJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzBfM19DT0FMX0RPTkU7CisJaWYgKGlzX2R1YWxfaGMpIHsKKwkJaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KG1taW8sIE1WX1BPUlRTX1BFUl9IQyk7CisJCXdyaXRlbChjbGtzLCAgaGNfbW1pbyArIEhDX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEX09GUyk7CisJCXdyaXRlbChjb3VudCwgaGNfbW1pbyArIEhDX0lSUV9DT0FMX0lPX1RIUkVTSE9MRF9PRlMpOworCQl3cml0ZWwofkhDX0NPQUxfSVJRLCBoY19tbWlvICsgSENfSVJRX0NBVVNFX09GUyk7CisJCWlmIChjb3VudCkKKwkJCWNvYWxfZW5hYmxlIHw9IFBPUlRTXzRfN19DT0FMX0RPTkU7CisJfQorCisJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgY29hbF9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoqCi0gKiAgICAgIG12X3N0YXJ0X2RtYSAtIEVuYWJsZSBlRE1BIGVuZ2luZQorICogICAgICBtdl9zdGFydF9lZG1hIC0gRW5hYmxlIGVETUEgZW5naW5lCiAgKiAgICAgIEBiYXNlOiBwb3J0IGJhc2UgYWRkcmVzcwogICogICAgICBAcHA6IHBvcnQgcHJpdmF0ZSBkYXRhCiAgKgpAQCAtODYzLDcgKzEwOTAsNyBAQAogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXN0YXRpYyB2b2lkIG12X3N0YXJ0X2RtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKK3N0YXRpYyB2b2lkIG12X3N0YXJ0X2VkbWEoc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCiAJCQkgc3RydWN0IG12X3BvcnRfcHJpdiAqcHAsIHU4IHByb3RvY29sKQogewogCWludCB3YW50X25jcSA9IChwcm90b2NvbCA9PSBBVEFfUFJPVF9OQ1EpOwpAQCAtODc1LDI2ICsxMTAyLDExIEBACiAJfQogCWlmICghKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikpIHsKIAkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCQlpbnQgaGFyZHBvcnQgPSBtdl9oYXJkcG9ydF9mcm9tX3BvcnQoYXAtPnBvcnRfbm8pOwotCQl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKLQkJCQkJbXZfaG9zdF9iYXNlKGFwLT5ob3N0KSwgYXAtPnBvcnRfbm8pOwotCQl1MzIgaGNfaXJxX2NhdXNlOwogCi0JCS8qIGNsZWFyIEVETUEgZXZlbnQgaW5kaWNhdG9ycywgaWYgYW55ICovCi0JCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfRVJSX0lSUV9DQVVTRV9PRlMpOwotCi0JCS8qIGNsZWFyIHBlbmRpbmcgaXJxIGV2ZW50cyAqLwotCQloY19pcnFfY2F1c2UgPSB+KChERVZfSVJRIHwgRE1BX0lSUSkgPDwgaGFyZHBvcnQpOwotCQl3cml0ZWxmbChoY19pcnFfY2F1c2UsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKLQotCQltdl9lZG1hX2NmZyhhcCwgd2FudF9uY3EpOwotCi0JCS8qIGNsZWFyIEZJUyBJUlEgQ2F1c2UgKi8KLQkJaWYgKElTX0dFTl9JSUUoaHByaXYpKQotCQkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgU0FUQV9GSVNfSVJRX0NBVVNFX09GUyk7CisJCW12X2VkbWFfY2ZnKGFwLCB3YW50X25jcSwgMSk7CiAKIAkJbXZfc2V0X2VkbWFfcHRycyhwb3J0X21taW8sIGhwcml2LCBwcCk7Ci0JCW12X2VuYWJsZV9wb3J0X2lycXMoYXAsIERPTkVfSVJRfEVSUl9JUlEpOworCQltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgcG9ydF9tbWlvLCBET05FX0lSUXxFUlJfSVJRKTsKIAogCQl3cml0ZWxmbChFRE1BX0VOLCBwb3J0X21taW8gKyBFRE1BX0NNRF9PRlMpOwogCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19FRE1BX0VOOwpAQCAtOTUyLDYgKzExNjQsNyBAQAogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCWludCBlcnIgPSAwOwogCiAJaWYgKCEocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSkKIAkJcmV0dXJuIDA7CkBAIC05NTksOSArMTE3MiwxMCBAQAogCW12X3dhaXRfZm9yX2VkbWFfZW1wdHlfaWRsZShhcCk7CiAJaWYgKG12X3N0b3BfZWRtYV9lbmdpbmUocG9ydF9tbWlvKSkgewogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiVW5hYmxlIHRvIHN0b3AgZURNQVxuIik7Ci0JCXJldHVybiAtRUlPOworCQllcnIgPSAtRUlPOwogCX0KLQlyZXR1cm4gMDsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CisJcmV0dXJuIGVycjsKIH0KIAogI2lmZGVmIEFUQV9ERUJVRwpAQCAtMTEzMCwzNSArMTM0NCwzMyBAQAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KIAotc3RhdGljIHZvaWQgbXZfY29uZmlnX2Zicyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywgaW50IHdhbnRfbmNxLCBpbnQgd2FudF9mYnMpCitzdGF0aWMgdm9pZCBtdl9jb25maWdfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZmJzKQogewotCXUzMiBuZXdfZmlzY2ZnLCBvbGRfZmlzY2ZnOwotCXUzMiBuZXdfbHRtb2RlLCBvbGRfbHRtb2RlOwotCXUzMiBuZXdfaGFsdGNvbmQsIG9sZF9oYWx0Y29uZDsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW87CiAKLQlvbGRfZmlzY2ZnICAgPSByZWFkbChwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlvbGRfbHRtb2RlICAgPSByZWFkbChwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlvbGRfaGFsdGNvbmQgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJdTMyIGZpc2NmZywgICAqb2xkX2Zpc2NmZyAgID0gJnBwLT5jYWNoZWQuZmlzY2ZnOworCXUzMiBsdG1vZGUsICAgKm9sZF9sdG1vZGUgICA9ICZwcC0+Y2FjaGVkLmx0bW9kZTsKKwl1MzIgaGFsdGNvbmQsICpvbGRfaGFsdGNvbmQgPSAmcHAtPmNhY2hlZC5oYWx0Y29uZDsKIAotCW5ld19maXNjZmcgICA9IG9sZF9maXNjZmcgJiB+KEZJU0NGR19TSU5HTEVfU1lOQyB8IEZJU0NGR19XQUlUX0RFVl9FUlIpOwotCW5ld19sdG1vZGUgICA9IG9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7Ci0JbmV3X2hhbHRjb25kID0gb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOworCWx0bW9kZSAgID0gKm9sZF9sdG1vZGUgJiB+TFRNT0RFX0JJVDg7CisJaGFsdGNvbmQgPSAqb2xkX2hhbHRjb25kIHwgRURNQV9FUlJfREVWOwogCiAJaWYgKHdhbnRfZmJzKSB7Ci0JCW5ld19maXNjZmcgPSBvbGRfZmlzY2ZnIHwgRklTQ0ZHX1NJTkdMRV9TWU5DOwotCQluZXdfbHRtb2RlID0gb2xkX2x0bW9kZSB8IExUTU9ERV9CSVQ4OworCQlmaXNjZmcgPSAqb2xkX2Zpc2NmZyB8IEZJU0NGR19TSU5HTEVfU1lOQzsKKwkJbHRtb2RlID0gKm9sZF9sdG1vZGUgfCBMVE1PREVfQklUODsKIAkJaWYgKHdhbnRfbmNxKQotCQkJbmV3X2hhbHRjb25kICY9IH5FRE1BX0VSUl9ERVY7CisJCQloYWx0Y29uZCAmPSB+RURNQV9FUlJfREVWOwogCQllbHNlCi0JCQluZXdfZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCQkJZmlzY2ZnIHw9ICBGSVNDRkdfV0FJVF9ERVZfRVJSOworCX0gZWxzZSB7CisJCWZpc2NmZyA9ICpvbGRfZmlzY2ZnICYgfihGSVNDRkdfU0lOR0xFX1NZTkMgfCBGSVNDRkdfV0FJVF9ERVZfRVJSKTsKIAl9CiAKLQlpZiAobmV3X2Zpc2NmZyAhPSBvbGRfZmlzY2ZnKQotCQl3cml0ZWxmbChuZXdfZmlzY2ZnLCBwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKLQlpZiAobmV3X2x0bW9kZSAhPSBvbGRfbHRtb2RlKQotCQl3cml0ZWxmbChuZXdfbHRtb2RlLCBwb3J0X21taW8gKyBMVE1PREVfT0ZTKTsKLQlpZiAobmV3X2hhbHRjb25kICE9IG9sZF9oYWx0Y29uZCkKLQkJd3JpdGVsZmwobmV3X2hhbHRjb25kLCBwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJbXZfd3JpdGVfY2FjaGVkX3JlZyhwb3J0X21taW8gKyBGSVNDRkdfT0ZTLCBvbGRfZmlzY2ZnLCBmaXNjZmcpOworCW12X3dyaXRlX2NhY2hlZF9yZWcocG9ydF9tbWlvICsgTFRNT0RFX09GUywgb2xkX2x0bW9kZSwgbHRtb2RlKTsKKwltdl93cml0ZV9jYWNoZWRfcmVnKHBvcnRfbW1pbyArIEVETUFfSEFMVENPTkRfT0ZTLCBvbGRfaGFsdGNvbmQsIGhhbHRjb25kKTsKIH0KIAogc3RhdGljIHZvaWQgbXZfNjB4MV9lcnJhdGFfc2F0YTI1KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSkKQEAgLTExNzYsNyArMTM4OCw4NiBAQAogCQl3cml0ZWwobmV3LCBocHJpdi0+YmFzZSArIE1WX0dQSU9fUE9SVF9DVExfT0ZTKTsKIH0KIAotc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxKQorLyoqCisgKgltdl9ibWRtYV9lbmFibGUgLSBzZXQgYSBtYWdpYyBiaXQgb24gR0VOX0lJRSB0byBhbGxvdyBibWRtYQorICoJQGFwOiBQb3J0IGJlaW5nIGluaXRpYWxpemVkCisgKgorICoJVGhlcmUgYXJlIHR3byBETUEgbW9kZXMgb24gdGhlc2UgY2hpcHM6ICBiYXNpYyBETUEsIGFuZCBFRE1BLgorICoKKyAqCUJpdC0wIG9mIHRoZSAiRURNQSBSRVNFUlZFRCIgcmVnaXN0ZXIgZW5hYmxlcy9kaXNhYmxlcyB1c2UKKyAqCW9mIGJhc2ljIERNQSBvbiB0aGUgR0VOX0lJRSB2ZXJzaW9ucyBvZiB0aGUgY2hpcHMuCisgKgorICoJVGhpcyBiaXQgc3Vydml2ZXMgRURNQSByZXNldHMsIGFuZCBtdXN0IGJlIHNldCBmb3IgYmFzaWMgRE1BCisgKgl0byBmdW5jdGlvbiwgYW5kIHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gRURNQSBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkIG12X2JtZG1hX2VuYWJsZV9paWUoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IGVuYWJsZV9ibWRtYSkKK3sKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdTMyIG5ldywgKm9sZCA9ICZwcC0+Y2FjaGVkLnVua25vd25fcnN2ZDsKKworCWlmIChlbmFibGVfYm1kbWEpCisJCW5ldyA9ICpvbGQgfCAxOworCWVsc2UKKwkJbmV3ID0gKm9sZCAmIH4xOworCW12X3dyaXRlX2NhY2hlZF9yZWcobXZfYXBfYmFzZShhcCkgKyBFRE1BX1VOS05PV05fUlNWRF9PRlMsIG9sZCwgbmV3KTsKK30KKworLyoKKyAqIFNPQyBjaGlwcyBoYXZlIGFuIGlzc3VlIHdoZXJlYnkgdGhlIEhERCBMRURzIGRvbid0IGFsd2F5cyBibGluaworICogZHVyaW5nIEkvTyB3aGVuIE5DUSBpcyBlbmFibGVkLiBFbmFibGluZyBhIHNwZWNpYWwgIkxFRCBibGluayIgbW9kZQorICogb2YgdGhlIFNPQyB0YWtlcyBjYXJlIG9mIGl0LCBnZW5lcmF0aW5nIGEgc3RlYWR5IGJsaW5rIHJhdGUgd2hlbgorICogYW55IGRyaXZlIG9uIHRoZSBjaGlwIGlzIGFjdGl2ZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgYmxpbmsgbW9kZSBpcyBhIGdsb2JhbCBoYXJkd2FyZSBzZXR0aW5nIGZvciB0aGUgU09DLAorICogc28gd2UgbXVzdCB1c2UgaXQgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIHBvcnQgb24gdGhlIFNPQyBoYXMgTkNRIGVuYWJsZWQuCisgKgorICogV2UgdHVybiAiTEVEIGJsaW5rIiBvZmYgd2hlbiBOQ1EgaXMgbm90IGluIHVzZSBhbnl3aGVyZSwgYmVjYXVzZSB0aGUgbm9ybWFsCisgKiBMRUQgb3BlcmF0aW9uIHdvcmtzIHRoZW4sIGFuZCBwcm92aWRlcyBiZXR0ZXIgKG1vcmUgYWNjdXJhdGUpIGZlZWRiYWNrLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IGFuIFNPQyBuZXZlciBoYXMgbW9yZSB0aGFuIG9uZSBIQyBvbmJvYXJkLgorICovCitzdGF0aWMgdm9pZCBtdl9zb2NfbGVkX2JsaW5rX2VuYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisKKwlpZiAoaHByaXYtPmhwX2ZsYWdzICYgTVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOKQorCQlyZXR1cm47CisJaHByaXYtPmhwX2ZsYWdzIHw9IE1WX0hQX1FVSVJLX0xFRF9CTElOS19FTjsKKwloY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobXZfaG9zdF9iYXNlKGhvc3QpLCBhcC0+cG9ydF9ubyk7CisJbGVkX2N0cmwgPSByZWFkbChoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7CisJd3JpdGVsKGxlZF9jdHJsIHwgU09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X3NvY19sZWRfYmxpbmtfZGlzYWJsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNfbW1pbzsKKwl1MzIgbGVkX2N0cmw7CisJdW5zaWduZWQgaW50IHBvcnQ7CisKKwlpZiAoIShocHJpdi0+aHBfZmxhZ3MgJiBNVl9IUF9RVUlSS19MRURfQkxJTktfRU4pKQorCQlyZXR1cm47CisKKwkvKiBkaXNhYmxlIGxlZC1ibGluayBvbmx5IGlmIG5vIHBvcnRzIGFyZSB1c2luZyBOQ1EgKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaHByaXYtPm5fcG9ydHM7IHBvcnQrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKnRoaXNfYXAgPSBob3N0LT5wb3J0c1twb3J0XTsKKwkJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSB0aGlzX2FwLT5wcml2YXRlX2RhdGE7CisKKwkJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKQorCQkJcmV0dXJuOworCX0KKworCWhwcml2LT5ocF9mbGFncyAmPSB+TVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOOworCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtdl9ob3N0X2Jhc2UoaG9zdCksIGFwLT5wb3J0X25vKTsKKwlsZWRfY3RybCA9IHJlYWRsKGhjX21taW8gKyBTT0NfTEVEX0NUUkxfT0ZTKTsKKwl3cml0ZWwobGVkX2N0cmwgJiB+U09DX0xFRF9DVFJMX0JMSU5LLCBoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZWRtYSkKIHsKIAl1MzIgY2ZnOwogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwICAgID0gYXAtPnByaXZhdGVfZGF0YTsKQEAgLTExODUsNyArMTQ3Niw4IEBACiAKIAkvKiBzZXQgdXAgbm9uLU5DUSBFRE1BIGNvbmZpZ3VyYXRpb24gKi8KIAljZmcgPSBFRE1BX0NGR19RX0RFUFRIOwkJLyogYWx3YXlzIDB4MWYgZm9yICphbGwqIGNoaXBzICovCi0JcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZCU19FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAlpZiAoSVNfR0VOX0koaHByaXYpKQogCQljZmcgfD0gKDEgPDwgOCk7CS8qIGVuYWIgY29uZmlnIGJ1cnN0IHNpemUgbWFzayAqLwpAQCAtMTIwNiw3ICsxNDk4LDcgQEAKIAkJICovCiAJCXdhbnRfZmJzICY9IHdhbnRfbmNxOwogCi0JCW12X2NvbmZpZ19mYnMocG9ydF9tbWlvLCB3YW50X25jcSwgd2FudF9mYnMpOworCQltdl9jb25maWdfZmJzKGFwLCB3YW50X25jcSwgd2FudF9mYnMpOwogCiAJCWlmICh3YW50X2ZicykgewogCQkJcHAtPnBwX2ZsYWdzIHw9IE1WX1BQX0ZMQUdfRkJTX0VOOwpAQCAtMTIxNCwxOCArMTUwNiwyNyBAQAogCQl9CiAKIAkJY2ZnIHw9ICgxIDw8IDIzKTsJLyogZG8gbm90IG1hc2sgUE0gZmllbGQgaW4gcngnZCBGSVMgKi8KLQkJY2ZnIHw9ICgxIDw8IDIyKTsJLyogZW5hYiA0LWVudHJ5IGhvc3QgcXVldWUgY2FjaGUgKi8KLQkJaWYgKCFJU19TT0MoaHByaXYpKQotCQkJY2ZnIHw9ICgxIDw8IDE4KTsJLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCWlmICh3YW50X2VkbWEpIHsKKwkJCWNmZyB8PSAoMSA8PCAyMik7IC8qIGVuYWIgNC1lbnRyeSBob3N0IHF1ZXVlIGNhY2hlICovCisJCQlpZiAoIUlTX1NPQyhocHJpdikpCisJCQkJY2ZnIHw9ICgxIDw8IDE4KTsgLyogZW5hYiBlYXJseSBjb21wbGV0aW9uICovCisJCX0KIAkJaWYgKGhwcml2LT5ocF9mbGFncyAmIE1WX0hQX0NVVF9USFJPVUdIKQogCQkJY2ZnIHw9ICgxIDw8IDE3KTsgLyogZW5hYiBjdXQtdGhydSAoZGlzIHN0b3ImZm9yd3JkKSAqLworCQltdl9ibWRtYV9lbmFibGVfaWllKGFwLCAhd2FudF9lZG1hKTsKKworCQlpZiAoSVNfU09DKGhwcml2KSkgeworCQkJaWYgKHdhbnRfbmNxKQorCQkJCW12X3NvY19sZWRfYmxpbmtfZW5hYmxlKGFwKTsKKwkJCWVsc2UKKwkJCQltdl9zb2NfbGVkX2JsaW5rX2Rpc2FibGUoYXApOworCQl9CiAJfQogCiAJaWYgKHdhbnRfbmNxKSB7CiAJCWNmZyB8PSBFRE1BX0NGR19OQ1E7CiAJCXBwLT5wcF9mbGFncyB8PSAgTVZfUFBfRkxBR19OQ1FfRU47Ci0JfSBlbHNlCi0JCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19OQ1FfRU47CisJfQogCiAJd3JpdGVsZmwoY2ZnLCBwb3J0X21taW8gKyBFRE1BX0NGR19PRlMpOwogfQpAQCAtMTMwOSw2ICsxNjEwLDggQEAKIAkJCXBwLT5zZ190YmxfZG1hW3RhZ10gPSBwcC0+c2dfdGJsX2RtYVswXTsKIAkJfQogCX0KKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAJcmV0dXJuIDA7CiAKIG91dF9wb3J0X2ZyZWVfZG1hX21lbToKQEAgLTEzNTcsMTIgKzE2NjAsMTMgQEAKIAkJCXUzMiBvZmZzZXQgPSBhZGRyICYgMHhmZmZmOwogCQkJdTMyIGxlbiA9IHNnX2xlbjsKIAotCQkJaWYgKChvZmZzZXQgKyBzZ19sZW4gPiAweDEwMDAwKSkKKwkJCWlmIChvZmZzZXQgKyBsZW4gPiAweDEwMDAwKQogCQkJCWxlbiA9IDB4MTAwMDAgLSBvZmZzZXQ7CiAKIAkJCW12X3NnLT5hZGRyID0gY3B1X3RvX2xlMzIoYWRkciAmIDB4ZmZmZmZmZmYpOwogCQkJbXZfc2ctPmFkZHJfaGkgPSBjcHVfdG9fbGUzMigoYWRkciA+PiAxNikgPj4gMTYpOwogCQkJbXZfc2ctPmZsYWdzX3NpemUgPSBjcHVfdG9fbGUzMihsZW4gJiAweGZmZmYpOworCQkJbXZfc2ctPnJlc2VydmVkID0gMDsKIAogCQkJc2dfbGVuIC09IGxlbjsKIAkJCWFkZHIgKz0gbGVuOwpAQCAtMTM3NCw2ICsxNjc4LDcgQEAKIAogCWlmIChsaWtlbHkobGFzdF9zZykpCiAJCWxhc3Rfc2ctPmZsYWdzX3NpemUgfD0gY3B1X3RvX2xlMzIoRVBSRF9GTEFHX0VORF9PRl9UQkwpOworCW1iKCk7IC8qIGVuc3VyZSBkYXRhIHN0cnVjdHVyZSBpcyB2aXNpYmxlIHRvIHRoZSBjaGlwc2V0ICovCiB9CiAKIHN0YXRpYyB2b2lkIG12X2NycWJfcGFja19jbWQoX19sZTE2ICpjbWR3LCB1OCBkYXRhLCB1OCBhZGRyLCB1bnNpZ25lZCBsYXN0KQpAQCAtMTM4NCw2ICsxNjg5LDE0NyBAQAogfQogCiAvKioKKyAqCW12X3NmZl9pcnFfY2xlYXIgLSBDbGVhciBoYXJkd2FyZSBpbnRlcnJ1cHQgYWZ0ZXIgRE1BLgorICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KKyAqCisgKglXZSBuZWVkIHRoaXMgb25seSBmb3IgQVRBUEkgYm1kbWEgdHJhbnNhY3Rpb25zLAorICoJYXMgb3RoZXJ3aXNlIHdlIGV4cGVyaWVuY2Ugc3B1cmlvdXMgaW50ZXJydXB0cworICoJYWZ0ZXIgbGliYXRhLXNmZiBoYW5kbGVzIHRoZSBibWRtYSBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgdm9pZCBtdl9zZmZfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJbXZfY2xlYXJfYW5kX2VuYWJsZV9wb3J0X2lycXMoYXAsIG12X2FwX2Jhc2UoYXApLCBFUlJfSVJRKTsKK30KKworLyoqCisgKgltdl9jaGVja19hdGFwaV9kbWEgLSBGaWx0ZXIgQVRBUEkgY21kcyB3aGljaCBhcmUgdW5zdWl0YWJsZSBmb3IgRE1BLgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBjaGVjayBmb3IgY2hpcHNldC9ETUEgY29tcGF0aWJpbGl0eS4KKyAqCisgKglUaGUgYm1kbWEgZW5naW5lcyBjYW5ub3QgaGFuZGxlIHNwZWN1bGF0aXZlIGRhdGEgc2l6ZXMKKyAqCShieXRlY291bnQgdW5kZXIvb3ZlciBmbG93KS4gIFNvIG9ubHkgYWxsb3cgRE1BIGZvcgorICoJZGF0YSB0cmFuc2ZlciBjb21tYW5kcyB3aXRoIGtub3duIGRhdGEgc2l6ZXMuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIGludCBtdl9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gcWMtPnNjc2ljbWQ7CisKKwlpZiAoc2NtZCkgeworCQlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKKwkJY2FzZSBSRUFEXzY6CisJCWNhc2UgUkVBRF8xMDoKKwkJY2FzZSBSRUFEXzEyOgorCQljYXNlIFdSSVRFXzY6CisJCWNhc2UgV1JJVEVfMTA6CisJCWNhc2UgV1JJVEVfMTI6CisJCWNhc2UgR1BDTURfUkVBRF9DRDoKKwkJY2FzZSBHUENNRF9TRU5EX0RWRF9TVFJVQ1RVUkU6CisJCWNhc2UgR1BDTURfU0VORF9DVUVfU0hFRVQ6CisJCQlyZXR1cm4gMDsgLyogRE1BIGlzIHNhZmUgKi8KKwkJfQorCX0KKwlyZXR1cm4gLUVPUE5PVFNVUFA7IC8qIHVzZSBQSU8gaW5zdGVhZCAqLworfQorCisvKioKKyAqCW12X2JtZG1hX3NldHVwIC0gU2V0IHVwIEJNRE1BIHRyYW5zYWN0aW9uCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUgRE1BIGZvci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwltdl9maWxsX3NnKHFjKTsKKworCS8qIGNsZWFyIGFsbCBETUEgY21kIGJpdHMgKi8KKwl3cml0ZWwoMCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7CisKKwkvKiBsb2FkIFBSRCB0YWJsZSBhZGRyLiAqLworCXdyaXRlbCgocHAtPnNnX3RibF9kbWFbcWMtPnRhZ10gPj4gMTYpID4+IDE2LAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfSElHSF9PRlMpOworCXdyaXRlbGZsKHBwLT5zZ190YmxfZG1hW3FjLT50YWddLAorCQlwb3J0X21taW8gKyBCTURNQV9QUkRfTE9XX09GUyk7CisKKwkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLworCWFwLT5vcHMtPnNmZl9leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXJ0IC0gU3RhcnQgYSBCTURNQSB0cmFuc2FjdGlvbgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBzdGFydCBETUEgb24uCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdW5zaWduZWQgaW50IHJ3ID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7CisJdTMyIGNtZCA9IChydyA/IDAgOiBBVEFfRE1BX1dSKSB8IEFUQV9ETUFfU1RBUlQ7CisKKwkvKiBzdGFydCBob3N0IERNQSB0cmFuc2FjdGlvbiAqLworCXdyaXRlbGZsKGNtZCwgcG9ydF9tbWlvICsgQk1ETUFfQ01EX09GUyk7Cit9CisKKy8qKgorICoJbXZfYm1kbWFfc3RvcCAtIFN0b3AgQk1ETUEgdHJhbnNmZXIKKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gc3RvcCBETUEgb24uCisgKgorICoJQ2xlYXJzIHRoZSBBVEFfRE1BX1NUQVJUIGZsYWcgaW4gdGhlIGJtZG1hIGNvbnRyb2wgcmVnaXN0ZXIKKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXUzMiBjbWQ7CisKKwkvKiBjbGVhciBzdGFydC9zdG9wIGJpdCAqLworCWNtZCA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCWNtZCAmPSB+QVRBX0RNQV9TVEFSVDsKKwl3cml0ZWxmbChjbWQsIHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCisJLyogb25lLVBJTy1jeWNsZSBndWFyYW50ZWVkIHdhaXQsIHBlciBzcGVjLCBmb3IgSERNQTE6MCB0cmFuc2l0aW9uICovCisJYXRhX3NmZl9kbWFfcGF1c2UoYXApOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0YXR1cyAtIFJlYWQgQk1ETUEgc3RhdHVzCisgKglAYXA6IHBvcnQgZm9yIHdoaWNoIHRvIHJldHJpZXZlIERNQSBzdGF0dXMuCisgKgorICoJUmVhZCBhbmQgcmV0dXJuIGVxdWl2YWxlbnQgb2YgdGhlIHNmZiBCTURNQSBzdGF0dXMgcmVnaXN0ZXIuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHU4IG12X2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdTMyIHJlZywgc3RhdHVzOworCisJLyoKKwkgKiBPdGhlciBiaXRzIGFyZSB2YWxpZCBvbmx5IGlmIEFUQV9ETUFfQUNUSVZFPT0wLAorCSAqIGFuZCB0aGUgQVRBX0RNQV9JTlRSIGJpdCBkb2Vzbid0IGV4aXN0LgorCSAqLworCXJlZyA9IHJlYWRsKHBvcnRfbW1pbyArIEJNRE1BX1NUQVRVU19PRlMpOworCWlmIChyZWcgJiBBVEFfRE1BX0FDVElWRSkKKwkJc3RhdHVzID0gQVRBX0RNQV9BQ1RJVkU7CisJZWxzZQorCQlzdGF0dXMgPSAocmVnICYgQVRBX0RNQV9FUlIpIHwgQVRBX0RNQV9JTlRSOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogICAgICBtdl9xY19wcmVwIC0gSG9zdCBzcGVjaWZpYyBjb21tYW5kIHByZXBhcmF0aW9uLgogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUKICAqCkBAIC0xNTQ1LDYgKzE5OTEsMTMyIEBACiB9CiAKIC8qKgorICoJbXZfc2ZmX2NoZWNrX3N0YXR1cyAtIGZldGNoIGRldmljZSBzdGF0dXMsIGlmIHZhbGlkCisgKglAYXA6IEFUQSBwb3J0IHRvIGZldGNoIHN0YXR1cyBmcm9tCisgKgorICoJV2hlbiB1c2luZyBjb21tYW5kIGlzc3VlIHZpYSBtdl9xY19pc3N1ZV9maXMoKSwKKyAqCXRoZSBpbml0aWFsIEFUQV9CVVNZIHN0YXRlIGRvZXMgbm90IHNob3cgdXAgaW4gdGhlCisgKglBVEEgc3RhdHVzIChzaGFkb3cpIHJlZ2lzdGVyLiAgVGhpcyBjYW4gY29uZnVzZSBsaWJhdGEhCisgKgorICoJU28gd2UgaGF2ZSBhIGhvb2sgaGVyZSB0byBmYWtlIEFUQV9CVVNZIGZvciB0aGF0IHNpdHVhdGlvbiwKKyAqCXVudGlsIHRoZSBmaXJzdCB0aW1lIGEgQlVTWSwgRFJRLCBvciBFUlIgYml0IGlzIHNlZW4uCisgKgorICoJVGhlIHJlc3Qgb2YgdGhlIHRpbWUsIGl0IHNpbXBseSByZXR1cm5zIHRoZSBBVEEgc3RhdHVzIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdTggbXZfc2ZmX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXQgPSBpb3JlYWQ4KGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1kpIHsKKwkJaWYgKHN0YXQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRIHwgQVRBX0VSUikpCisJCQlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWTsKKwkJZWxzZQorCQkJc3RhdCA9IEFUQV9CVVNZOworCX0KKwlyZXR1cm4gc3RhdDsKK30KKworLyoqCisgKgltdl9zZW5kX2ZpcyAtIFNlbmQgYSBGSVMsIHVzaW5nIHRoZSAiVmVuZG9yLVVuaXF1ZSBGSVMiIHJlZ2lzdGVyCisgKglAZmlzOiBmaXMgdG8gYmUgc2VudAorICoJQG53b3JkczogbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyBpbiB0aGUgZmlzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXZfc2VuZF9maXMoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyICpmaXMsIGludCBud29yZHMpCit7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwl1MzIgaWZjdGwsIG9sZF9pZmN0bCwgaWZzdGF0OworCWludCBpLCB0aW1lb3V0ID0gMjAwLCBmaW5hbF93b3JkID0gbndvcmRzIC0gMTsKKworCS8qIEluaXRpYXRlIEZJUyB0cmFuc21pc3Npb24gbW9kZSAqLworCW9sZF9pZmN0bCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKwlpZmN0bCA9IDB4MTAwIHwgKG9sZF9pZmN0bCAmIDB4Zik7CisJd3JpdGVsZmwoaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKworCS8qIFNlbmQgYWxsIHdvcmRzIG9mIHRoZSBGSVMgZXhjZXB0IGZvciB0aGUgZmluYWwgd29yZCAqLworCWZvciAoaSA9IDA7IGkgPCBmaW5hbF93b3JkOyArK2kpCisJCXdyaXRlbChmaXNbaV0sIHBvcnRfbW1pbyArIFZFTkRPUl9VTklRVUVfRklTX09GUyk7CisKKwkvKiBGbGFnIGVuZC1vZi10cmFuc21pc3Npb24sIGFuZCB0aGVuIHNlbmQgdGhlIGZpbmFsIHdvcmQgKi8KKwl3cml0ZWxmbChpZmN0bCB8IDB4MjAwLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisJd3JpdGVsZmwoZmlzW2ZpbmFsX3dvcmRdLCBwb3J0X21taW8gKyBWRU5ET1JfVU5JUVVFX0ZJU19PRlMpOworCisJLyoKKwkgKiBXYWl0IGZvciBGSVMgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlLgorCSAqIFRoaXMgdHlwaWNhbGx5IHRha2VzIGp1c3QgYSBzaW5nbGUgaXRlcmF0aW9uLgorCSAqLworCWRvIHsKKwkJaWZzdGF0ID0gcmVhZGwocG9ydF9tbWlvICsgU0FUQV9JRlNUQVRfT0ZTKTsKKwl9IHdoaWxlICghKGlmc3RhdCAmIDB4MTAwMCkgJiYgLS10aW1lb3V0KTsKKworCS8qIFJlc3RvcmUgb3JpZ2luYWwgcG9ydCBjb25maWd1cmF0aW9uICovCisJd3JpdGVsZmwob2xkX2lmY3RsLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisKKwkvKiBTZWUgaWYgaXQgd29ya2VkICovCisJaWYgKChpZnN0YXQgJiAweDMwMDApICE9IDB4MTAwMCkgeworCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywKKwkJCQkiJXMgdHJhbnNtaXNzaW9uIGVycm9yLCBpZnN0YXQ9JTA4eFxuIiwKKwkJCQlfX2Z1bmNfXywgaWZzdGF0KTsKKwkJcmV0dXJuIEFDX0VSUl9PVEhFUjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJbXZfcWNfaXNzdWVfZmlzIC0gSXNzdWUgYSBjb21tYW5kIGRpcmVjdGx5IGFzIGEgRklTCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CisgKgorICoJTm90ZSB0aGF0IHRoZSBBVEEgc2hhZG93IHJlZ2lzdGVycyBhcmUgbm90IHVwZGF0ZWQKKyAqCWFmdGVyIGNvbW1hbmQgaXNzdWUsIHNvIHRoZSBkZXZpY2Ugd2lsbCBhcHBlYXIgIlJFQURZIgorICoJaWYgcG9sbGVkLCBldmVuIHdoaWxlIGl0IGlzIEJVU1kgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4KKyAqCisgKglTbyB3ZSB1c2UgYSBzdGF0dXMgaG9vayB0byBmYWtlIEFUQV9CVVNZIHVudGlsIHRoZSBkcml2ZSBjaGFuZ2VzIHN0YXRlLgorICoKKyAqCU5vdGU6IHdlIGRvbid0IGdldCB1cGRhdGVkIHNoYWRvdyByZWdzIG9uICpjb21wbGV0aW9uKgorICoJb2Ygbm9uLWRhdGEgY29tbWFuZHMuIFNvIGF2b2lkIHNlbmRpbmcgdGhlbSB2aWEgdGhpcyBmdW5jdGlvbiwKKyAqCWFzIHRoZXkgd2lsbCBhcHBlYXIgdG8gaGF2ZSBjb21wbGV0ZWQgaW1tZWRpYXRlbHkuCisgKgorICoJR0VOX0lJRSBoYXMgc3BlY2lhbCByZWdpc3RlcnMgdGhhdCB3ZSBjb3VsZCBnZXQgdGhlIHJlc3VsdCB0ZiBmcm9tLAorICoJYnV0IGVhcmxpZXIgY2hpcHNldHMgZG8gbm90LiAgRm9yIG5vdywgd2UgaWdub3JlIHRob3NlIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtdl9xY19pc3N1ZV9maXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbmsgPSBxYy0+ZGV2LT5saW5rOworCXUzMiBmaXNbNV07CisJaW50IGVyciA9IDA7CisKKwlhdGFfdGZfdG9fZmlzKCZxYy0+dGYsIGxpbmstPnBtcCwgMSwgKHZvaWQgKilmaXMpOworCWVyciA9IG12X3NlbmRfZmlzKGFwLCBmaXMsIHNpemVvZihmaXMpIC8gc2l6ZW9mKGZpc1swXSkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBUElfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6CisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9GSVJTVDsKKwkJYnJlYWs7CisJY2FzZSBBVEFfUFJPVF9QSU86CisJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7CisJCWVsc2UKKwkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7CisJCWJyZWFrOworCX0KKworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogICAgICBtdl9xY19pc3N1ZSAtIEluaXRpYXRlIGEgY29tbWFuZCB0byB0aGUgaG9zdAogICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0YXJ0CiAgKgpAQCAtMTU1OCwxNCArMjEzMCwyOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CisJc3RhdGljIGludCBsaW1pdF93YXJuaW5ncyA9IDEwOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTMyIGluX2luZGV4OworCXVuc2lnbmVkIGludCBwb3J0X2lycXM7CiAKLQlpZiAoKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9ETUEpICYmCi0JICAgIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfTkNRKSkgewotCQlzdGF0aWMgaW50IGxpbWl0X3dhcm5pbmdzID0gMTA7CisJcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7IC8qIHBhcmFub2lhICovCisKKwlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgeworCWNhc2UgQVRBX1BST1RfRE1BOgorCWNhc2UgQVRBX1BST1RfTkNROgorCQltdl9zdGFydF9lZG1hKGFwLCBwb3J0X21taW8sIHBwLCBxYy0+dGYucHJvdG9jb2wpOworCQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKKwkJaW5faW5kZXggPSBwcC0+cmVxX2lkeCA8PCBFRE1BX1JFUV9RX1BUUl9TSElGVDsKKworCQkvKiBXcml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLworCQl3cml0ZWxmbCgocHAtPmNycWJfZG1hICYgRURNQV9SRVFfUV9CQVNFX0xPX01BU0spIHwgaW5faW5kZXgsCisJCQkJCXBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7CisJCXJldHVybiAwOworCisJY2FzZSBBVEFfUFJPVF9QSU86CiAJCS8qCiAJCSAqIEVycmF0YSBTQVRBIzE2LCBTQVRBIzI0OiB3YXJuIGlmIG11bHRpcGxlIERSUXMgZXhwZWN0ZWQuCiAJCSAqCkBAIC0xNTgzLDI3ICsyMTY5LDQ2IEBACiAJCQkJCSI6IGF0dGVtcHRpbmcgUElPIHcvbXVsdGlwbGUgRFJROiAiCiAJCQkJCSJ0aGlzIG1heSBmYWlsIGR1ZSB0byBoL3cgZXJyYXRhXG4iKTsKIAkJfQotCQkvKgotCQkgKiBXZSdyZSBhYm91dCB0byBzZW5kIGEgbm9uLUVETUEgY2FwYWJsZSBjb21tYW5kIHRvIHRoZQotCQkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKLQkJICogc2hhZG93IGJsb2NrLCBldGMgcmVnaXN0ZXJzLgotCQkgKi8KLQkJbXZfc3RvcF9lZG1hKGFwKTsKLQkJbXZfZW5hYmxlX3BvcnRfaXJxcyhhcCwgRVJSX0lSUSk7Ci0JCW12X3BtcF9zZWxlY3QoYXAsIHFjLT5kZXYtPmxpbmstPnBtcCk7Ci0JCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKKwkJLyogZHJvcCB0aHJvdWdoICovCisJY2FzZSBBVEFfUFJPVF9OT0RBVEE6CisJY2FzZSBBVEFQSV9QUk9UX1BJTzoKKwljYXNlIEFUQVBJX1BST1RfTk9EQVRBOgorCQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUElPX1BPTExJTkcpCisJCQlxYy0+dGYuZmxhZ3MgfD0gQVRBX1RGTEFHX1BPTExJTkc7CisJCWJyZWFrOwogCX0KIAotCW12X3N0YXJ0X2RtYShhcCwgcG9ydF9tbWlvLCBwcCwgcWMtPnRmLnByb3RvY29sKTsKKwlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCXBvcnRfaXJxcyA9IEVSUl9JUlE7CS8qIG1hc2sgZGV2aWNlIGludGVycnVwdCB3aGVuIHBvbGxpbmcgKi8KKwllbHNlCisJCXBvcnRfaXJxcyA9IEVSUl9JUlEgfCBET05FX0lSUTsJLyogdW5tYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAKLQlwcC0+cmVxX2lkeCA9IChwcC0+cmVxX2lkeCArIDEpICYgTVZfTUFYX1FfREVQVEhfTUFTSzsKLQlpbl9pbmRleCA9IHBwLT5yZXFfaWR4IDw8IEVETUFfUkVRX1FfUFRSX1NISUZUOworCS8qCisJICogV2UncmUgYWJvdXQgdG8gc2VuZCBhIG5vbi1FRE1BIGNhcGFibGUgY29tbWFuZCB0byB0aGUKKwkgKiBwb3J0LiAgVHVybiBvZmYgRURNQSBzbyB0aGVyZSB3b24ndCBiZSBwcm9ibGVtcyBhY2Nlc3NpbmcKKwkgKiBzaGFkb3cgYmxvY2ssIGV0YyByZWdpc3RlcnMuCisJICovCisJbXZfc3RvcF9lZG1hKGFwKTsKKwltdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhhcCwgbXZfYXBfYmFzZShhcCksIHBvcnRfaXJxcyk7CisJbXZfcG1wX3NlbGVjdChhcCwgcWMtPmRldi0+bGluay0+cG1wKTsKIAotCS8qIGFuZCB3cml0ZSB0aGUgcmVxdWVzdCBpbiBwb2ludGVyIHRvIGtpY2sgdGhlIEVETUEgdG8gbGlmZSAqLwotCXdyaXRlbGZsKChwcC0+Y3JxYl9kbWEgJiBFRE1BX1JFUV9RX0JBU0VfTE9fTUFTSykgfCBpbl9pbmRleCwKLQkJIHBvcnRfbW1pbyArIEVETUFfUkVRX1FfSU5fUFRSX09GUyk7Ci0KLQlyZXR1cm4gMDsKKwlpZiAocWMtPnRmLmNvbW1hbmQgPT0gQVRBX0NNRF9SRUFEX0xPR19FWFQpIHsKKwkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCQkvKgorCQkgKiBXb3JrYXJvdW5kIGZvciA4OFNYNjB4MSBGRXIgU0FUQSMyNSAocGFydCAyKS4KKwkJICoKKwkJICogQWZ0ZXIgYW55IE5DUSBlcnJvciwgdGhlIFJFQURfTE9HX0VYVCBjb21tYW5kCisJCSAqIGZyb20gbGliYXRhLWVoICptdXN0KiB1c2UgbXZfcWNfaXNzdWVfZmlzKCkuCisJCSAqIE90aGVyd2lzZSBpdCBtaWdodCBmYWlsLCBkdWUgdG8gY2hpcCBlcnJhdGEuCisJCSAqCisJCSAqIFJhdGhlciB0aGFuIHNwZWNpYWwtY2FzZSBpdCwgd2UnbGwganVzdCAqYWx3YXlzKgorCQkgKiB1c2UgdGhpcyBtZXRob2QgaGVyZSBmb3IgUkVBRF9MT0dfRVhULCBtYWtpbmcgZm9yCisJCSAqIGVhc2llciB0ZXN0aW5nLgorCQkgKi8KKwkJaWYgKElTX0dFTl9JSShocHJpdikpCisJCQlyZXR1cm4gbXZfcWNfaXNzdWVfZmlzKHFjKTsKKwl9CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgc3RydWN0IGF0YV9xdWV1ZWRfY21kICptdl9nZXRfYWN0aXZlX3FjKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0xNjE0LDggKzIyMTksMTIgQEAKIAlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pCiAJCXJldHVybiBOVUxMOwogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKLQlpZiAocWMgJiYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkKLQkJcWMgPSBOVUxMOworCWlmIChxYykgeworCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCQlxYyA9IE5VTEw7CisJCWVsc2UgaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKQorCQkJcWMgPSBOVUxMOworCX0KIAlyZXR1cm4gcWM7CiB9CiAKQEAgLTIwODQsNiArMjY5MywxMCBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5iYXNlLCAqaGNfbW1pbzsKIAl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDAsIHBvcnQ7CiAKKwkvKiBJZiBhc3NlcnRlZCwgY2xlYXIgdGhlICJhbGwgcG9ydHMiIElSUSBjb2FsZXNjaW5nIGJpdCAqLworCWlmIChtYWluX2lycV9jYXVzZSAmIEFMTF9QT1JUU19DT0FMX0RPTkUpCisJCXdyaXRlbCh+QUxMX1BPUlRTX0NPQUxfSVJRLCBtbWlvICsgTVZfSVJRX0NPQUxfQ0FVU0UpOworCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhwcml2LT5uX3BvcnRzOyBwb3J0KyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW3BvcnRdOwogCQl1bnNpZ25lZCBpbnQgcCwgc2hpZnQsIGhhcmRwb3J0LCBwb3J0X2NhdXNlOwpAQCAtMjExNiw2ICsyNzI5LDggQEAKIAkJCSAqIHRvIGFjayAob25seSkgdGhvc2UgcG9ydHMgdmlhIGhjX2lycV9jYXVzZS4KIAkJCSAqLwogCQkJYWNrX2lycXMgPSAwOworCQkJaWYgKGhjX2NhdXNlICYgUE9SVFNfMF8zX0NPQUxfRE9ORSkKKwkJCQlhY2tfaXJxcyA9IEhDX0NPQUxfSVJROwogCQkJZm9yIChwID0gMDsgcCA8IE1WX1BPUlRTX1BFUl9IQzsgKytwKSB7CiAJCQkJaWYgKChwb3J0ICsgcCkgPj0gaHByaXYtPm5fcG9ydHMpCiAJCQkJCWJyZWFrOwpAQCAtMjIwNCw3ICsyODE5LDcgQEAKIAogCS8qIGZvciBNU0k6ICBibG9jayBuZXcgaW50ZXJydXB0cyB3aGlsZSBpbiBoZXJlICovCiAJaWYgKHVzaW5nX21zaSkKLQkJd3JpdGVsKDAsIGhwcml2LT5tYWluX2lycV9tYXNrX2FkZHIpOworCQltdl93cml0ZV9tYWluX2lycV9tYXNrKDAsIGhwcml2KTsKIAogCW1haW5faXJxX2NhdXNlID0gcmVhZGwoaHByaXYtPm1haW5faXJxX2NhdXNlX2FkZHIpOwogCXBlbmRpbmdfaXJxcyAgID0gbWFpbl9pcnFfY2F1c2UgJiBocHJpdi0+bWFpbl9pcnFfbWFzazsKQEAgLTIyMjEsNyArMjgzNiw3IEBACiAKIAkvKiBmb3IgTVNJOiB1bm1hc2s7IGludGVycnVwdCBjYXVzZSBiaXRzIHdpbGwgcmV0cmlnZ2VyIG5vdyAqLwogCWlmICh1c2luZ19tc2kpCi0JCXdyaXRlbChocHJpdi0+bWFpbl9pcnFfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2soaHByaXYtPm1haW5faXJxX21hc2ssIGhwcml2KTsKIAogCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKIApAQCAtMjc3NCw2ICszMzg5LDggQEAKIAogCW12X3Jlc2V0X2NoYW5uZWwoaHByaXYsIG1taW8sIGFwLT5wb3J0X25vKTsKIAlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRURNQV9FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBlcnJhdGEgRkVyIFNBVEEjMTAgKHBhcnQgMikgKi8KIAlkbyB7CkBAIC0yNzkzLDYgKzM0MTAsOCBAQAogCQkJCWV4dHJhID0gSFo7IC8qIG9ubHkgZXh0ZW5kIGl0IG9uY2UsIG1heCAqLwogCQl9CiAJfSB3aGlsZSAoc3N0YXR1cyAhPSAweDAgJiYgc3N0YXR1cyAhPSAweDExMyAmJiBzc3RhdHVzICE9IDB4MTIzKTsKKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTI2LDYgKzM3NDUsOCBAQAogCSAqIFRoZSBwZXItcG9ydCBpbnRlcnJ1cHRzIGdldCBkb25lIGxhdGVyIGFzIHBvcnRzIGFyZSBzZXQgdXAuCiAJICovCiAJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgUENJX0VSUik7CisJbXZfc2V0X2lycV9jb2FsZXNjaW5nKGhvc3QsIGlycV9jb2FsZXNjaW5nX2lvX2NvdW50LAorCQkJCSAgICBpcnFfY29hbGVzY2luZ191c2Vjcyk7CiBkb25lOgogCXJldHVybiByYzsKIH0KQEAgLTMyODcsMTIgKzM5MDgsNiBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLS8qCi0gKiBtb2R1bGUgb3B0aW9ucwotICovCi1zdGF0aWMgaW50IG1zaTsJICAgICAgLyogVXNlIFBDSSBtc2k7IGVpdGhlciB6ZXJvIChvZmYsIGRlZmF1bHQpIG9yIG5vbi16ZXJvICovCi0KLQogLyogbW92ZSB0byBQQ0kgbGF5ZXIgb3IgbGliYXRhIGNvcmU/ICovCiBzdGF0aWMgaW50IHBjaV9nb182NChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTM0NzQsMTAgKzQwODksNSBAQAogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKIAotI2lmZGVmIENPTkZJR19QQ0kKLW1vZHVsZV9wYXJhbShtc2ksIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7Ci0jZW5kaWYKLQogbW9kdWxlX2luaXQobXZfaW5pdCk7CiBtb2R1bGVfZXhpdChtdl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCBmNjViNTM3Li42Y2RhMTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC01Nyw5ICs1Nyw5IEBACiAJTlZfTU1JT19CQVIJCQk9IDUsCiAKIAlOVl9QT1JUUwkJCT0gMiwKLQlOVl9QSU9fTUFTSwkJCT0gMHgxZiwKLQlOVl9NV0RNQV9NQVNLCQkJPSAweDA3LAotCU5WX1VETUFfTUFTSwkJCT0gMHg3ZiwKKwlOVl9QSU9fTUFTSwkJCT0gQVRBX1BJTzQsCisJTlZfTVdETUFfTUFTSwkJCT0gQVRBX01XRE1BMiwKKwlOVl9VRE1BX01BU0sJCQk9IEFUQV9VRE1BNiwKIAlOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVAkJPSAweDAwLAogCU5WX1BPUlQxX1NDUl9SRUdfT0ZGU0VUCQk9IDB4NDAsCiAKQEAgLTQwOCw2ICs0MDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfY29tbW9uX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAJLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKaW5kZXggYmE5YTI1Ny4uYjFmZDdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKQEAgLTE3Niw3ICsxNzYsOSBAQAogCS5jaGVja19hdGFwaV9kbWEJPSBwZGNfY2hlY2tfYXRhcGlfZG1hLAogCS5xY19wcmVwCQk9IHBkY19xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWUsCisKIAkuc2ZmX2lycV9jbGVhcgkJPSBwZGNfaXJxX2NsZWFyLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAogCS5wb3N0X2ludGVybmFsX2NtZAk9IHBkY19wb3N0X2ludGVybmFsX2NtZCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfZXJyb3JfaGFuZGxlciwKQEAgLTIxMyw4ICsyMTUsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHX1NBVEFfUEFUQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19vbGRfc2F0YV9vcHMsCiAJfSwKQEAgLTIyMiw4ICsyMjQsOCBAQAogCVtib2FyZF8yMDM3eF9wYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfcGF0YV9vcHMsCiAJfSwKQEAgLTIzMiw4ICsyMzQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHXzRfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfb2xkX3NhdGFfb3BzLAogCX0sCkBAIC0yNDIsOCArMjQ0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkJICBQRENfRkxBR180X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3BhdGFfb3BzLAogCX0sCkBAIC0yNTIsOCArMjU0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR19HRU5fSUkgfCBQRENfRkxBR19TQVRBX1BBVEEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfc2F0YV9vcHMsCiAJfSwKQEAgLTI2Miw4ICsyNjQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCQkgIFBEQ19GTEFHX0dFTl9JSSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19wYXRhX29wcywKIAl9LApAQCAtMjcyLDggKzI3NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJIHwgUERDX0ZMQUdfNF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19zYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCmluZGV4IGEwMDBjODYuLmMzOTM2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCS5zb2Z0cmVzZXQJCT0gQVRBX09QX05VTEwsCiAJLmVycm9yX2hhbmRsZXIJCT0gcXNfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBBVEFfT1BfTlVMTCwKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAKIAkuc2NyX3JlYWQJCT0gcXNfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBxc19zY3Jfd3JpdGUsCkBAIC0xNjAsNyArMTYxLDcgQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcXNfYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKaW5kZXggZDAwOTE2MC4uZTY3Y2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCkBAIC0yMDAsOCArMjAwLDggQEAKIAkvKiBzaWxfMzExMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX01PRDE1V1JJVEUsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApAQCAtMjA5LDI0ICsyMDksMjQgQEAKIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFIHwKIAkJCQkgIFNJTF9GTEFHX05PX1NBVEFfSVJRLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKIAkvKiBzaWxfMzUxMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX1JFUlJfT05fRE1BX0FDVCwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCiAJLyogc2lsXzMxMTQgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCmluZGV4IDI1OTBjMjIuLjBkODk5MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKQEAgLTQyOSwyNSArNDI5LDI1IEBACiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoNCkgfAogCQkJCSAgU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsMjRfb3BzLAogCX0sCiAJLyogc2lsXzMxMzIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygyKSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKIAkvKiBzaWxfMzEzMS9zaWxfMzUzMSAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDEpLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbDI0X29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCmluZGV4IDljNDNiNGUuLjhmOTgzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwpAQCAtOTcsOCArOTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHg3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCmluZGV4IDYwOWQxNDcuLjcyNTdmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwpAQCAtMzYxLDggKzM2MSw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19OT19BVEFQSV9ETUEsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zNzEsOCArMzcxLDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfTk9fQVRBUElfRE1BIHwKIAkJCQkgIEsyX0ZMQUdfU0FUQV84X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApAQCAtMzgwLDggKzM4MCw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19CQVJfUE9TXzMsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zODksOCArMzg5LDggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwppbmRleCBlYzA0YjhkLi5kY2UzZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjXzIwNjIxX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKaW5kZXggMDE5NTc1Yi4uZTViZmY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCkBAIC04OSw3ICs4OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdWxpX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkgIEFUQV9GTEFHX0lHTl9TSU1QTEVYLAotCS5waW9fbWFzayAgICAgICA9IDB4MWYsCQkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sgICAgICAgPSBBVEFfUElPNCwKIAkudWRtYV9tYXNrICAgICAgPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzICAgICAgID0gJnVsaV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggNWM2MmRhOS4uOThlOGM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC0xNDYsMjQgKzE0NiwyNCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIwX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHgwNywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ2NDIwX3NhdGFfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMV9zcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDA3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfc2F0YV9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIxX3Bwb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDAsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfcGF0YV9vcHMsCiB9OwpAQCAtMTcxLDggKzE3MSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ4MjUxX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJICBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4MDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0ODI1MV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggYzU3Y2RmZi4uZWQ3MGJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC0zMDgsNiArMzA4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZzY19zYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkvKiBUaGUgSVJRIGhhbmRsaW5nIGlzIG5vdCBxdWl0ZSBzdGFuZGFyZCBTRkYgYmVoYXZpb3VyIHNvIHdlCisJICAgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBsb3N0IGludGVycnVwdCBoYW5kbGVyICovCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCS5zZmZfdGZfbG9hZAkJPSB2c2Nfc2F0YV90Zl9sb2FkLAogCS5zZmZfdGZfcmVhZAkJPSB2c2Nfc2F0YV90Zl9yZWFkLAogCS5mcmVlemUJCQk9IHZzY19mcmVlemUsCkBAIC0zNDUsOCArMzQ4LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnZzY19zYXRhX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCmluZGV4IDk4MDk5ZjUuLmIxMTk2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYworKysgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKQEAgLTE2OTAsMTcgKzE2OTAsMTcgQEAKIAkJICB8ICgwICogU0FSTU9ERTBfU0hBREVOKSAvKiBXZSBkb24ndCB1c2Ugc2hhZG93IHJlZ2lzdGVycy4gKi8KIAkJICB8ICgxICogU0FSTU9ERTBfSU5UTU9ERV9SRUFEQ0xFQVIpCiAJCSAgfCAoMSAqIFNBUk1PREUwX0NXUkUpCi0JCSAgfCBJU19GUzUwKGRldik/U0FSTU9ERTBfUFJQV1RfRlM1MF81OiAKLQkJICAgICAgICAgICAgICAgICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zCisJCSAgfCAoSVNfRlM1MChkZXYpID8gU0FSTU9ERTBfUFJQV1RfRlM1MF81OgorCQkJICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zKQogCQkgIHwgKDEgKiBTQVJNT0RFMF9DQUxTVVBfMSkKLQkJICB8IElTX0ZTNTAgKGRldik/KDAKKwkJICB8IChJU19GUzUwKGRldikgPyAoMAogCQkJCSAgIHwgU0FSTU9ERTBfUlhWQ1NfMzIKIAkJCQkgICB8IFNBUk1PREUwX0FCUlZDU18zMiAKIAkJCQkgICB8IFNBUk1PREUwX1RYVkNTXzMyKToKIAkJICAgICAgICAgICAgICAgICAgKDAKIAkJCQkgICB8IFNBUk1PREUwX1JYVkNTXzFrCiAJCQkJICAgfCBTQVJNT0RFMF9BQlJWQ1NfMWsgCi0JCQkJICAgfCBTQVJNT0RFMF9UWFZDU18xaykpOworCQkJCSAgIHwgU0FSTU9ERTBfVFhWQ1NfMWspKSk7CiAKIAkvKiAxMG1zICogMTAwIGlzIDEgc2Vjb25kLiBUaGF0IHNob3VsZCBiZSBlbm91Z2gsIGFzIEFOMzo5IHNheXMgaXQgdGFrZXMKIAkgICAxbXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pcGhhc2UuYyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCmluZGV4IGUxYzc2MTEuLjc4Yzk3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC05NzcsOSArOTc3LDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwQnVmICs9IHNwcmludGYoIHBCdWYsICIuIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgc3ByaW50ZiggcEJ1ZiwgIlxuIiApOwotICAgICAgICAvLyBTUHJpbnQocHJudEJ1Zik7Ci0gICAgICAgIHByaW50ayhwcm50QnVmKTsKKyAgICAgICAgcHJpbnRrKCIlc1xuIiwgcHJudEJ1Zik7CiAgICAgICAgIGNvdW50ICs9IGNvbDsKICAgICAgICAgcEJ1ZiA9IHBybnRCdWY7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtYXR0cmxpc3QuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhMjgwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKQEAgLTAsMCArMSw3MCBAQAorU09MT1NfQVRUUl9STyhEcml2ZXJWZXJzaW9uKQorU09MT1NfQVRUUl9STyhBUElWZXJzaW9uKQorU09MT1NfQVRUUl9STyhGaXJtd2FyZVZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKERzcFZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKENvbW1vbkhhbmRzaGFrZSkKK1NPTE9TX0FUVFJfUk8oQ29ubmVjdGVkKQorU09MT1NfQVRUUl9STyhPcGVyYXRpb25hbE1vZGUpCitTT0xPU19BVFRSX1JPKFN0YXRlKQorU09MT1NfQVRUUl9STyhXYXRjaGRvZykKK1NPTE9TX0FUVFJfUk8oT3BlcmF0aW9uUHJvZ3Jlc3MpCitTT0xPU19BVFRSX1JPKExhc3RGYWlsZWQpCitTT0xPU19BVFRSX1JPKFR4Qml0UmF0ZSkKK1NPTE9TX0FUVFJfUk8oUnhCaXRSYXRlKQorLy8gU09MT1NfQVRUUl9STyhEZWx0QUNUQVRQZHMpCisvLyBTT0xPU19BVFRSX1JPKERlbHRBQ1RBVFB1cykKK1NPTE9TX0FUVFJfUk8oVHhBVFRORFIpCitTT0xPU19BVFRSX1JPKFJ4QVRUTkRSKQorU09MT1NfQVRUUl9STyhBbm5leFR5cGUpCitTT0xPU19BVFRSX1JPKEdlbmVyYWxGYWlsdXJlKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlRHBEbikKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZURwVXApCitTT0xPU19BVFRSX1JPKFJTQ29ycmVjdGVkRXJyb3JzRG4pCitTT0xPU19BVFRSX1JPKFJTVW5Db3JyZWN0ZWRFcnJvcnNEbikKK1NPTE9TX0FUVFJfUk8oUlNDb3JyZWN0ZWRFcnJvcnNVcCkKK1NPTE9TX0FUVFJfUk8oUlNVbkNvcnJlY3RlZEVycm9yc1VwKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUkRuKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUlVwKQorU09MT1NfQVRUUl9STyhTaG93dGltZVN0YXJ0KQorU09MT1NfQVRUUl9STyhBVFVSVmVuZG9yKQorU09MT1NfQVRUUl9STyhBVFVDQ291bnRyeSkKK1NPTE9TX0FUVFJfUk8oQVRVUkFOU0lSZXYpCitTT0xPU19BVFRSX1JPKEFUVVJBTlNJU1REKQorU09MT1NfQVRUUl9STyhBVFVDQU5TSVJldikKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lJZCkKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lTVEQpCitTT0xPU19BVFRSX1JPKERhdGFCb29zdCkKK1NPTE9TX0FUVFJfUk8oTG9jYWxJVFVDb3VudHJ5Q29kZSkKK1NPTE9TX0FUVFJfUk8oTG9jYWxTRUYpCitTT0xPU19BVFRSX1JPKExvY2FsRW5kTE9TKQorU09MT1NfQVRUUl9STyhMb2NhbFNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTG9jYWxMaW5lQXR0bikKK1NPTE9TX0FUVFJfUk8oUmF3QXR0bikKK1NPTE9TX0FUVFJfUk8oTG9jYWxUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVTRUYpCitTT0xPU19BVFRSX1JPKFJlbW90ZUxPUykKK1NPTE9TX0FUVFJfUk8oUmVtb3RlTGluZUF0dG4pCitTT0xPU19BVFRSX1JPKFJlbW90ZVNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTGluZVVwQ291bnQpCitTT0xPU19BVFRSX1JPKFNSQUNudCkKK1NPTE9TX0FUVFJfUk8oU1JBQ250VXApCitTT0xPU19BVFRSX1JPKFByb2ZpbGVTdGF0dXMpCitTT0xPU19BVFRSX1JXKEFjdGlvbikKK1NPTE9TX0FUVFJfUlcoQWN0aXZhdGVMaW5lKQorU09MT1NfQVRUUl9STyhMaW5lU3RhdHVzKQorU09MT1NfQVRUUl9SVyhIb3N0Q29udHJvbCkKK1NPTE9TX0FUVFJfUlcoQXV0b1N0YXJ0KQorU09MT1NfQVRUUl9SVyhGYWlsc2FmZSkKK1NPTE9TX0FUVFJfUlcoU2hvd3RpbWVMZWQpCitTT0xPU19BVFRSX1JXKFJldHJhaW4pCitTT0xPU19BVFRSX1JXKERlZmF1bHRzKQorU09MT1NfQVRUUl9SVyhMaW5lTW9kZSkKK1NPTE9TX0FUVFJfUlcoUHJvZmlsZSkKK1NPTE9TX0FUVFJfUlcoRGV0ZWN0Tm9pc2UpCitTT0xPU19BVFRSX1JPKFN1cHBvcnRlZEFubmV4ZXMpCitTT0xPU19BVFRSX1JPKFN0YXR1cykKK1NPTE9TX0FUVFJfUk8oVG90YWxTdGFydCkKK1NPTE9TX0FUVFJfUk8oUmVjZW50U2hvd3RpbWVTdGFydCkKK1NPTE9TX0FUVFJfUk8oVG90YWxSeEJsb2NrcykKK1NPTE9TX0FUVFJfUk8oVG90YWxUeEJsb2NrcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKaW5kZXggODlkN2E2ZS4uYmUyMDQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKQEAgLTksNiArOSw3IEBACiAgKgogICogQXV0aG9yczogTmF0aGFuIFdpbGxpYW1zIDxuYXRoYW5AdHJhdmVyc2UuY29tLmF1PgogICogICAgICAgICAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICogICAgICAgICAgVHJla2VyIENoZW4gPHRyZWtlckB4cmlvLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzYsOCArMzcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhYi5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjAuMDQiCisjZGVmaW5lIFZFUlNJT04gIjAuMDciCiAjZGVmaW5lIFBUQUcgInNvbG9zLXBjaSIKIAogI2RlZmluZSBDT05GSUdfUkFNX1NJWkUJMTI4CkBAIC00NSwxNiArNDksMzEgQEAKICNkZWZpbmUgSVJRX0VOX0FERFIJMHg3OAogI2RlZmluZSBGUEdBX1ZFUgkweDc0CiAjZGVmaW5lIElSUV9DTEVBUgkweDcwCi0jZGVmaW5lIEJVR19GTEFHCTB4NkMKKyNkZWZpbmUgV1JJVEVfRkxBU0gJMHg2QworI2RlZmluZSBQT1JUUwkJMHg2OAorI2RlZmluZSBGTEFTSF9CTE9DSwkweDY0CisjZGVmaW5lIEZMQVNIX0JVU1kJMHg2MAorI2RlZmluZSBGUEdBX01PREUJMHg1QworI2RlZmluZSBGTEFTSF9NT0RFCTB4NTgKKyNkZWZpbmUgVFhfRE1BX0FERFIocG9ydCkJKDB4NDAgKyAoNCAqIChwb3J0KSkpCisjZGVmaW5lIFJYX0RNQV9BRERSKHBvcnQpCSgweDMwICsgKDQgKiAocG9ydCkpKQogCiAjZGVmaW5lIERBVEFfUkFNX1NJWkUJMzI3NjgKICNkZWZpbmUgQlVGX1NJWkUJNDA5NgorI2RlZmluZSBGUEdBX1BBR0UJNTI4IC8qIEZQR0EgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgU09MT1NfUEFHRQk1MTIgLyogU29sb3MgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgRlBHQV9CTE9DSwkoRlBHQV9QQUdFICogOCkgLyogRlBHQSBmbGFzaCBibG9jayBzaXplKi8KKyNkZWZpbmUgU09MT1NfQkxPQ0sJKFNPTE9TX1BBR0UgKiA4KSAvKiBTb2xvcyBmbGFzaCBibG9jayBzaXplKi8KIAogI2RlZmluZSBSWF9CVUYoY2FyZCwgbnIpICgoY2FyZC0+YnVmZmVycykgKyAobnIpKkJVRl9TSVpFKjIpCiAjZGVmaW5lIFRYX0JVRihjYXJkLCBucikgKChjYXJkLT5idWZmZXJzKSArIChucikqQlVGX1NJWkUqMiArIEJVRl9TSVpFKQogCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKKyNkZWZpbmUgUlhfRE1BX1NJWkUJMjA0OAorCitzdGF0aWMgaW50IHJlc2V0ID0gMDsKIHN0YXRpYyBpbnQgYXRtZGVidWcgPSAwOworc3RhdGljIGludCBmaXJtd2FyZV91cGdyYWRlID0gMDsKK3N0YXRpYyBpbnQgZnBnYV91cGdyYWRlID0gMDsKIAogc3RydWN0IHBrdF9oZHIgewogCV9fbGUxNiBzaXplOwpAQCAtNjMsMjMgKzgyLDQ4IEBACiAJX19sZTE2IHR5cGU7CiB9OwogCitzdHJ1Y3Qgc29sb3Nfc2tiX2NiIHsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCXVpbnQzMl90IGRtYV9hZGRyOworfTsKKworCisjZGVmaW5lIFNLQl9DQihza2IpCQkoKHN0cnVjdCBzb2xvc19za2JfY2IgKilza2ItPmNiKQorCiAjZGVmaW5lIFBLVF9EQVRBCTAKICNkZWZpbmUgUEtUX0NPTU1BTkQJMQogI2RlZmluZSBQS1RfUE9QRU4JMwogI2RlZmluZSBQS1RfUENMT1NFCTQKKyNkZWZpbmUgUEtUX1NUQVRVUwk1CiAKIHN0cnVjdCBzb2xvc19jYXJkIHsKIAl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOwogCXZvaWQgX19pb21lbSAqYnVmZmVyczsKIAlpbnQgbnJfcG9ydHM7CisJaW50IHR4X21hc2s7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgYXRtX2RldiAqYXRtZGV2WzRdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bGV0OwogCXNwaW5sb2NrX3QgdHhfbG9jazsKIAlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJc3BpbmxvY2tfdCBjbGlfcXVldWVfbG9jazsKKwlzcGlubG9ja190IHBhcmFtX3F1ZXVlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwYXJhbV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlWzRdOwogCXN0cnVjdCBza19idWZmX2hlYWQgY2xpX3F1ZXVlWzRdOworCXN0cnVjdCBza19idWZmICp0eF9za2JbNF07CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYls0XTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBwYXJhbV93cTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmd193cTsKKwlpbnQgdXNpbmdfZG1hOworfTsKKworCitzdHJ1Y3Qgc29sb3NfcGFyYW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlwaWRfdCBwaWQ7CisJaW50IHBvcnQ7CisJc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlOwogfTsKIAogI2RlZmluZSBTT0xPU19DSEFOKGF0bWRldikgKChpbnQpKHVuc2lnbmVkIGxvbmcpKGF0bWRldiktPnBoeV9kYXRhKQpAQCAtODgsMTkgKzEzMiwyMiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2xvcyBQQ0kgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgTG9vcGJhY2siKTsKK01PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJSZXNldCBTb2xvcyBjaGlwcyBvbiBzdGFydHVwIik7CiBNT0RVTEVfUEFSTV9ERVNDKGF0bWRlYnVnLCAiUHJpbnQgQVRNIGRhdGEiKTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShhdG1kZWJ1ZywgaW50LCAwNDQ0KTsKLQotc3RhdGljIGludCBvcGVuczsKK01PRFVMRV9QQVJNX0RFU0MoZmlybXdhcmVfdXBncmFkZSwgIkluaXRpYXRlIFNvbG9zIGZpcm13YXJlIHVwZ3JhZGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoZnBnYV91cGdyYWRlLCAiSW5pdGlhdGUgRlBHQSB1cGdyYWRlIik7Cittb2R1bGVfcGFyYW0ocmVzZXQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oYXRtZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZmlybXdhcmVfdXBncmFkZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShmcGdhX3VwZ3JhZGUsIGludCwgMDQ0NCk7CiAKIHN0YXRpYyB2b2lkIGZwZ2FfcXVldWUoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYyk7Ci1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKik7CitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzb2xvc19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyogZmluZF92Y2Moc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLCBpbnQgdmNpKTsKIHN0YXRpYyBpbnQgbGlzdF92Y2NzKGludCB2Y2kpOworc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpOwogc3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyB2b2lkIGF0bV9yZW1vdmUoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgaW50IHNlbmRfY29tbWFuZChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CkBAIC0xMTUsNiArMTYyLDI2NCBAQAogICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNvbG9zX3BhcmFtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMDsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHNvbG9zX3BhcmFtX3Nob3coKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiIsIGN1cnJlbnQtPnBpZCwgYXR0ci0+YXR0ci5uYW1lKTsKKwlza2JfcHV0KHNrYiwgYnVmbGVuKTsKKworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJaWYgKCFwcm0ucmVzcG9uc2UpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gcHJtLnJlc3BvbnNlLT5sZW47CisJbWVtY3B5KGJ1ZiwgcHJtLnJlc3BvbnNlLT5kYXRhLCBidWZsZW4pOworCWtmcmVlX3NrYihwcm0ucmVzcG9uc2UpOworCisJcmV0dXJuIGJ1ZmxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc29sb3NfcGFyYW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCXNzaXplX3QgcmV0OworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMSArIGNvdW50OworCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gc29sb3NfcGFyYW1fc3RvcmUoKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiVzXG4iLCBjdXJyZW50LT5waWQsIGF0dHItPmF0dHIubmFtZSwgYnVmKTsKKworCXNrYl9wdXQoc2tiLCBidWZsZW4pOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJc2tiID0gcHJtLnJlc3BvbnNlOworCisJaWYgKCFza2IpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gc2tiLT5sZW47CisKKwkvKiBTb21ldGltZXMgaXQgaGFzIGEgbmV3bGluZSwgc29tZXRpbWVzIGl0IGRvZXNuJ3QuICovCisJaWYgKHNrYi0+ZGF0YVtidWZsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZsZW4tLTsKKworCWlmIChidWZsZW4gPT0gMiAmJiAhc3RybmNtcChza2ItPmRhdGEsICJPSyIsIDIpKQorCQlyZXQgPSBjb3VudDsKKwllbHNlIGlmIChidWZsZW4gPT0gNSAmJiAhc3RybmNtcChza2ItPmRhdGEsICJFUlJPUiIsIDUpKQorCQlyZXQgPSAtRUlPOworCWVsc2UgeworCQkvKiBXZSBrbm93IHdlIGhhdmUgZW5vdWdoIHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhpczsgd2UgYWxsb2NhdGVkIAorCQkgICBpdCBvdXJzZWx2ZXMgKi8KKwkJc2tiLT5kYXRhW2J1Zmxlbl0gPSAwOworCQorCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbmV4cGVjdGVkIHBhcmFtZXRlciByZXNwb25zZTogJyVzJ1xuIiwKKwkJCSBza2ItPmRhdGEpOworCQlyZXQgPSAtRUlPOworCX0KKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpuZXh0X3N0cmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBpID0gMDsKKwljaGFyICp0aGlzID0gc2tiLT5kYXRhOworCQorCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbjsgaSsrKSB7CisJCWlmICh0aGlzW2ldID09ICdcbicpIHsKKwkJCXRoaXNbaV0gPSAwOworCQkJc2tiX3B1bGwoc2tiLCBpICsgMSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoIWlzcHJpbnQodGhpc1tpXSkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdGF0dXMgcGFja2V0IGhhcyBmaWVsZHMgc2VwYXJhdGVkIGJ5IFxuLCBzdGFydGluZyB3aXRoIGEgdmVyc2lvbiBudW1iZXIKKyAqIGZvciB0aGUgaW5mb3JtYXRpb24gdGhlcmVpbi4gRmllbGRzIGFyZS4uLi4KKyAqCisgKiAgICAgcGFja2V0IHZlcnNpb24KKyAqICAgICBSeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBUeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBTdGF0ZQkJKHZlcnNpb24gPj0gMSkKKyAqICAgICBMb2NhbFNOUk1hcmdpbgkodmVyc2lvbiA+PSAxKQorICogICAgIExvY2FsTGluZUF0dG4JKHZlcnNpb24gPj0gMSkKKyAqLyAgICAgICAKK3N0YXRpYyBpbnQgcHJvY2Vzc19zdGF0dXMoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNoYXIgKnN0ciwgKmVuZCwgKnN0YXRlX3N0ciwgKnNuciwgKmF0dG47CisJaW50IHZlciwgcmF0ZV91cCwgcmF0ZV9kb3duOworCisJaWYgKCFjYXJkLT5hdG1kZXZbcG9ydF0pCisJCXJldHVybiAtRU5PREVWOworCisJc3RyID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisKKwl2ZXIgPSBzaW1wbGVfc3RydG9sKHN0ciwgTlVMTCwgMTApOworCWlmICh2ZXIgPCAxKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuZXhwZWN0ZWQgc3RhdHVzIGludGVycnVwdCB2ZXJzaW9uICVkXG4iLAorCQkJIHZlcik7CisJCXJldHVybiAtRUlPOworCX0KKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCWlmICghc3RyY21wKHN0ciwgIkVSUk9SIikpIHsKKwkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJTdGF0dXMgcGFja2V0IGluZGljYXRlZCBTb2xvcyBlcnJvciBvbiBwb3J0ICVkIChzdGFydGluZyB1cD8pXG4iLAorCQkJIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYXRlX2Rvd24gPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCXJhdGVfdXAgPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0YXRlX3N0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdGF0ZV9zdHIpCisJCXJldHVybiAtRUlPOworCisJLyogQW55dGhpbmcgYnV0ICdTaG93dGltZScgaXMgZG93biAqLworCWlmIChzdHJjbXAoc3RhdGVfc3RyLCAiU2hvd3RpbWUiKSkgeworCQljYXJkLT5hdG1kZXZbcG9ydF0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCXJlbGVhc2VfdmNjcyhjYXJkLT5hdG1kZXZbcG9ydF0pOworCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJQb3J0ICVkOiAlc1xuIiwgcG9ydCwgc3RhdGVfc3RyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25yID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisJYXR0biA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFhdHRuKQorCQlyZXR1cm4gLUVJTzsKKworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlBvcnQgJWQ6ICVzIEAlZC8lZCBrYi9zJXMlcyVzJXNcbiIsCisJCSBwb3J0LCBzdGF0ZV9zdHIsIHJhdGVfZG93bi8xMDAwLCByYXRlX3VwLzEwMDAsCisJCSBzbnJbMF0/IiwgU05SICI6IiIsIHNuciwgYXR0blswXT8iLCBBdHRuICI6IiIsIGF0dG4pOworCQorCWNhcmQtPmF0bWRldltwb3J0XS0+bGlua19yYXRlID0gcmF0ZV9kb3duIC8gNDI0OworCWNhcmQtPmF0bWRldltwb3J0XS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfRk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2NvbW1hbmQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzb2xvc19wYXJhbSAqcHJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNtZHBpZDsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKHNrYi0+bGVuIDwgNykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2tiLT5kYXRhWzBdICE9ICdMJyAgICB8fCAhaXNkaWdpdChza2ItPmRhdGFbMV0pIHx8CisJICAgICFpc2RpZ2l0KHNrYi0+ZGF0YVsyXSkgfHwgIWlzZGlnaXQoc2tiLT5kYXRhWzNdKSB8fAorCSAgICAhaXNkaWdpdChza2ItPmRhdGFbNF0pIHx8ICFpc2RpZ2l0KHNrYi0+ZGF0YVs1XSkgfHwKKwkgICAgc2tiLT5kYXRhWzZdICE9ICdcbicpCisJCXJldHVybiAwOworCisJY21kcGlkID0gc2ltcGxlX3N0cnRvbCgmc2tiLT5kYXRhWzFdLCBOVUxMLCAxMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJtLCAmY2FyZC0+cGFyYW1fcXVldWUsIGxpc3QpIHsKKwkJaWYgKHBybS0+cG9ydCA9PSBwb3J0ICYmIHBybS0+cGlkID09IGNtZHBpZCkgeworCQkJcHJtLT5yZXNwb25zZSA9IHNrYjsKKwkJCXNrYl9wdWxsKHNrYiwgNyk7CisJCQl3YWtlX3VwKCZjYXJkLT5wYXJhbV93cSk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZvdW5kOworfQorCiBzdGF0aWMgc3NpemVfdCBjb25zb2xlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICBjaGFyICpidWYpCiB7CkBAIC0xNDAsOCArNDQ1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAic2l6ZTogJWRcbiIsIHNpemUpOwotCiAJaWYgKHNpemUgPiAoQlVGX1NJWkUgLSBzaXplb2YoKmhlYWRlcikpKSB7CiAJCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiQ29tbWFuZCBpcyB0b28gYmlnLiAgRHJvcHBpbmcgcmVxdWVzdFxuIik7CiAJCXJldHVybiAwOwpAQCAtMTgwLDgyICs0ODMsMTgxIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb25zb2xlLCAwNjQ0LCBjb25zb2xlX3Nob3csIGNvbnNvbGVfc3RvcmUpOwogCisKKyNkZWZpbmUgU09MT1NfQVRUUl9STyh4KSBzdGF0aWMgREVWSUNFX0FUVFIoeCwgMDQ0NCwgc29sb3NfcGFyYW1fc2hvdywgTlVMTCk7CisjZGVmaW5lIFNPTE9TX0FUVFJfUlcoeCkgc3RhdGljIERFVklDRV9BVFRSKHgsIDA2NDQsIHNvbG9zX3BhcmFtX3Nob3csIHNvbG9zX3BhcmFtX3N0b3JlKTsKKworI2luY2x1ZGUgInNvbG9zLWF0dHJsaXN0LmMiCisKKyN1bmRlZiBTT0xPU19BVFRSX1JPCisjdW5kZWYgU09MT1NfQVRUUl9SVworCisjZGVmaW5lIFNPTE9TX0FUVFJfUk8oeCkgJmRldl9hdHRyXyMjeC5hdHRyLAorI2RlZmluZSBTT0xPU19BVFRSX1JXKHgpICZkZXZfYXR0cl8jI3guYXR0ciwKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNvbG9zX2F0dHJzW10gPSB7CisjaW5jbHVkZSAic29sb3MtYXR0cmxpc3QuYyIKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzb2xvc19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHNvbG9zX2F0dHJzLAorCS5uYW1lID0gInBhcmFtZXRlcnMiLAorfTsKKworc3RhdGljIGludCBmbGFzaF91cGdyYWRlKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgY2hpcCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CisJdWludDMyX3QgZGF0YTMyID0gMDsKKwlpbnQgYmxvY2tzaXplID0gMDsKKwlpbnQgbnVtYmxvY2tzID0gMDsKKwlpbnQgb2Zmc2V0OworCisJaWYgKGNoaXAgPT0gMCkgeworCQlmd19uYW1lID0gInNvbG9zLUZQR0EuYmluIjsKKwkJYmxvY2tzaXplID0gRlBHQV9CTE9DSzsKKwl9IGVsc2UgeworCQlmd19uYW1lID0gInNvbG9zLUZpcm13YXJlLmJpbiI7CisJCWJsb2Nrc2l6ZSA9IFNPTE9TX0JMT0NLOworCX0KKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmNhcmQtPmRldi0+ZGV2KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJGbGFzaCB1cGdyYWRlIHN0YXJ0aW5nXG4iKTsKKworCW51bWJsb2NrcyA9IGZ3LT5zaXplIC8gYmxvY2tzaXplOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkZpcm13YXJlIHNpemU6ICV6ZFxuIiwgZnctPnNpemUpOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIk51bWJlciBvZiBibG9ja3M6ICVkXG4iLCBudW1ibG9ja3MpOworCQorCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkNoYW5naW5nIEZQR0EgdG8gVXBkYXRlIG1vZGVcbiIpOworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKworCS8qIFNldCBtb2RlIHRvIENoaXAgRXJhc2UgKi8KKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJTZXQgRlBHQSBGbGFzaCBtb2RlIHRvICVzIENoaXAgRXJhc2VcbiIsCisJCSBjaGlwPyJTb2xvcyI6IkZQR0EiKTsKKwlpb3dyaXRlMzIoKGNoaXAgKiAyKSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKworCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZnctPnNpemU7IG9mZnNldCArPSBibG9ja3NpemUpIHsKKwkJaW50IGk7CisKKwkJLyogQ2xlYXIgd3JpdGUgZmxhZyAqLworCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisKKwkJLyogU2V0IG1vZGUgdG8gQmxvY2sgV3JpdGUgKi8KKwkJLyogZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiU2V0IEZQR0EgRmxhc2ggbW9kZSB0byBCbG9jayBXcml0ZVxuIik7ICovCisJCWlvd3JpdGUzMigoKGNoaXAgKiAyKSArIDEpLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX01PREUpOworCisJCS8qIENvcHkgYmxvY2sgdG8gYnVmZmVyLCBzd2FwcGluZyBlYWNoIDE2IGJpdHMgKi8KKwkJZm9yKGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpICs9IDQpIHsKKwkJCXVpbnQzMl90IHdvcmQgPSBzd2FoYjMycCgodWludDMyX3QgKikoZnctPmRhdGEgKyBvZmZzZXQgKyBpKSk7CisJCQlpb3dyaXRlMzIod29yZCwgUlhfQlVGKGNhcmQsIDMpICsgaSk7CisJCX0KKworCQkvKiBTcGVjaWZ5IGJsb2NrIG51bWJlciBhbmQgdGhlbiB0cmlnZ2VyIGZsYXNoIHdyaXRlICovCisJCWlvd3JpdGUzMihvZmZzZXQgLyBibG9ja3NpemUsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfQkxPQ0spOworCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKwl9CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZXR1cm5pbmcgRlBHQSB0byBEYXRhIG1vZGVcbiIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc29sb3NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGRldl9pZDsKIAlpbnQgaGFuZGxlZCA9IDE7CiAKLQkvL0FDSyBJUlEKIAlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfQ0xFQVIpOwotCS8vRGlzYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAotCS8qIElmIHdlIG9ubHkgZG8gaXQgd2hlbiB0aGUgZGV2aWNlIGlzIG9wZW4sIHdlIGxvc2UgY29uc29sZQotCSAgIG1lc3NhZ2VzICovCi0JaWYgKDEgfHwgb3BlbnMpCisJLyogSWYgd2UncmUgdXAgYW5kIHJ1bm5pbmcsIGp1c3Qga2ljayB0aGUgdGFza2xldCB0byBwcm9jZXNzIFRYL1JYICovCisJaWYgKGNhcmQtPmF0bWRldlswXSkKIAkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJZWxzZQorCQl3YWtlX3VwKCZjYXJkLT5md193cSk7CiAKLQkvL0VuYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAogdm9pZCBzb2xvc19iaCh1bnNpZ25lZCBsb25nIGNhcmRfYXJnKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gKHZvaWQgKiljYXJkX2FyZzsKLQlpbnQgcG9ydDsKIAl1aW50MzJfdCBjYXJkX2ZsYWdzOwotCXVpbnQzMl90IHR4X21hc2s7CiAJdWludDMyX3QgcnhfZG9uZSA9IDA7CisJaW50IHBvcnQ7CiAKLQljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLQotCS8qIFRoZSBUWCBiaXRzIGFyZSBzZXQgaWYgdGhlIGNoYW5uZWwgaXMgYnVzeTsgY2xlYXIgaWYgbm90LiBXZSB3YW50IHRvCi0JICAgaW52b2tlIGZwZ2FfdHgoKSB1bmxlc3MgX2FsbF8gdGhlIGJpdHMgZm9yIGFjdGl2ZSBjaGFubmVscyBhcmUgc2V0ICovCi0JdHhfbWFzayA9ICgxIDw8IGNhcmQtPm5yX3BvcnRzKSAtIDE7Ci0JaWYgKChjYXJkX2ZsYWdzICYgdHhfbWFzaykgIT0gdHhfbWFzaykKLQkJZnBnYV90eChjYXJkKTsKKwkvKgorCSAqIFNpbmNlIGZwZ2FfdHgoKSBpcyBnb2luZyB0byBuZWVkIHRvIHJlYWQgdGhlIGZsYWdzIHVuZGVyIGl0cyBsb2NrLAorCSAqIGl0IGNhbiByZXR1cm4gdGhlbSB0byB1cyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gaGl0IFBDSSBNTUlPCisJICogYWdhaW4gZm9yIHRoZSBzYW1lIGluZm9ybWF0aW9uCisJICovCisJY2FyZF9mbGFncyA9IGZwZ2FfdHgoY2FyZCk7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2FyZC0+bnJfcG9ydHM7IHBvcnQrKykgewogCQlpZiAoY2FyZF9mbGFncyAmICgweDEwIDw8IHBvcnQpKSB7Ci0JCQlzdHJ1Y3QgcGt0X2hkciBoZWFkZXI7CisJCQlzdHJ1Y3QgcGt0X2hkciBfaGRyLCAqaGVhZGVyOwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXN0cnVjdCBhdG1fdmNjICp2Y2M7CiAJCQlpbnQgc2l6ZTsKIAotCQkJcnhfZG9uZSB8PSAweDEwIDw8IHBvcnQ7CisJCQlpZiAoY2FyZC0+dXNpbmdfZG1hKSB7CisJCQkJc2tiID0gY2FyZC0+cnhfc2tiW3BvcnRdOworCQkJCWNhcmQtPnJ4X3NrYltwb3J0XSA9IE5VTEw7CiAKLQkJCW1lbWNweV9mcm9taW8oJmhlYWRlciwgUlhfQlVGKGNhcmQsIHBvcnQpLCBzaXplb2YoaGVhZGVyKSk7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQkJc2l6ZSA9IGxlMTZfdG9fY3B1KGhlYWRlci5zaXplKTsKKwkJCQloZWFkZXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJCQlzaXplID0gbGUxNl90b19jcHUoaGVhZGVyLT5zaXplKTsKKwkJCQlza2JfcHV0KHNrYiwgc2l6ZSArIHNpemVvZigqaGVhZGVyKSk7CisJCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCQkJfSBlbHNlIHsKKwkJCQloZWFkZXIgPSAmX2hkcjsKIAotCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFza2IpIHsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBmb3IgUlhcbiIpOwotCQkJCWNvbnRpbnVlOworCQkJCXJ4X2RvbmUgfD0gMHgxMCA8PCBwb3J0OworCisJCQkJbWVtY3B5X2Zyb21pbyhoZWFkZXIsIFJYX0JVRihjYXJkLCBwb3J0KSwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNpemUpOworCisJCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyAxLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIXNrYikgeworCQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgZm9yIFJYXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJbWVtY3B5X2Zyb21pbyhza2JfcHV0KHNrYiwgc2l6ZSksCisJCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZigqaGVhZGVyKSwKKwkJCQkJICAgICAgc2l6ZSk7CiAJCQl9Ci0KLQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLAotCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZihoZWFkZXIpLAotCQkJCSAgICAgIHNpemUpOwotCiAJCQlpZiAoYXRtZGVidWcpIHsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZWNlaXZlZDogZGV2aWNlICVkXG4iLCBwb3J0KTsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJzaXplOiAlZCBWUEk6ICVkIFZDSTogJWRcbiIsCi0JCQkJCSBzaXplLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQkJIHNpemUsIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJcHJpbnRfYnVmZmVyKHNrYik7CiAJCQl9CiAKLQkJCXN3aXRjaCAobGUxNl90b19jcHUoaGVhZGVyLnR5cGUpKSB7CisJCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhlYWRlci0+dHlwZSkpIHsKIAkJCWNhc2UgUEtUX0RBVEE6Ci0JCQkJdmNjID0gZmluZF92Y2MoY2FyZC0+YXRtZGV2W3BvcnRdLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQl2Y2MgPSBmaW5kX3ZjYyhjYXJkLT5hdG1kZXZbcG9ydF0sIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJaWYgKCF2Y2MpIHsKIAkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlJlY2VpdmVkIHBhY2tldCBmb3IgdW5rbm93biBWQ0kuVlBJICVkLiVkIG9uIHBvcnQgJWRcbiIsCi0JCQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKKwkJCQkJCQkgbGUxNl90b19jcHUoaGVhZGVyLT52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCiAJCQkJCQkJIHBvcnQpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC0yNjQsMTkgKzY2Niw1MCBAQAogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBQS1RfU1RBVFVTOgorCQkJCWlmIChwcm9jZXNzX3N0YXR1cyhjYXJkLCBwb3J0LCBza2IpICYmCisJCQkJICAgIG5ldF9yYXRlbGltaXQoKSkgeworCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJCYWQgc3RhdHVzIHBhY2tldCBvZiAlZCBieXRlcyBvbiBwb3J0ICVkOlxuIiwgc2tiLT5sZW4sIHBvcnQpOworCQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQl9CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBQS1RfQ09NTUFORDoKIAkJCWRlZmF1bHQ6IC8qIEZJWE1FOiBOb3QgcmVhbGx5LCBzdXJlbHk/ICovCisJCQkJaWYgKHByb2Nlc3NfY29tbWFuZChjYXJkLCBwb3J0LCBza2IpKQorCQkJCQlicmVhazsKIAkJCQlzcGluX2xvY2soJmNhcmQtPmNsaV9xdWV1ZV9sb2NrKTsKIAkJCQlpZiAoc2tiX3F1ZXVlX2xlbigmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdKSA+IDEwKSB7CiAJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJEcm9wcGluZyBjb25zb2xlIHJlc3BvbnNlIG9uIHBvcnQgJWRcbiIsCiAJCQkJCQkJIHBvcnQpOworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCX0gZWxzZQogCQkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdLCBza2IpOwogCQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5jbGlfcXVldWVfbG9jayk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJLyogQWxsb2NhdGUgUlggc2ticyBmb3IgYW55IHBvcnRzIHdoaWNoIG5lZWQgdGhlbSAqLworCQlpZiAoY2FyZC0+dXNpbmdfZG1hICYmIGNhcmQtPmF0bWRldltwb3J0XSAmJgorCQkgICAgIWNhcmQtPnJ4X3NrYltwb3J0XSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihSWF9ETUFfU0laRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoc2tiKSB7CisJCQkJU0tCX0NCKHNrYiktPmRtYV9hZGRyID0KKwkJCQkJcGNpX21hcF9zaW5nbGUoY2FyZC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCQkgICAgICAgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaW93cml0ZTMyKFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJICBjYXJkLT5jb25maWdfcmVncyArIFJYX0RNQV9BRERSKHBvcnQpKTsKKwkJCQljYXJkLT5yeF9za2JbcG9ydF0gPSBza2I7CisJCQl9IGVsc2UgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBSWCBza2IiKTsKKworCQkJCS8qIFdlJ2xsIGhhdmUgdG8gdHJ5IGFnYWluIGxhdGVyICovCisJCQkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJCQl9CisJCX0KIAl9CiAJaWYgKHJ4X2RvbmUpCiAJCWlvd3JpdGUzMihyeF9kb25lLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwpAQCAtMzI2LDcgKzc1OSw3IEBACiAJCQkgICAgICAgdmNjLT52Y2kpOwogCQl9CiAJfSBlbHNlIHsKLQkJZm9yKGk9MDsgaTwzMjsgaSsrKXsKKwkJZm9yKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspewogCQkJaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKIAkJCXNrX2Zvcl9lYWNoKHMsIG5vZGUsIGhlYWQpIHsKIAkJCQludW1fZm91bmQgKys7CkBAIC0zNDIsNiArNzc1LDI4IEBACiAJcmV0dXJuIG51bV9mb3VuZDsKIH0KIAorc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpCit7CisgICAgICAgIGludCBpOworCisgICAgICAgIHdyaXRlX2xvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29jayAqczsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCisgICAgICAgICAgICAgICAgc2tfZm9yX2VhY2hfc2FmZShzLCBub2RlLCB0bXAsIGhlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZjYyA9IGF0bV9zayhzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Y2MtPmRldiA9PSBkZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNjX3JlbGVhc2VfYXN5bmModmNjLCAtRVBJUEUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza19kZWxfbm9kZV9pbml0KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworfQorCiAKIHN0YXRpYyBpbnQgcG9wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKQEAgLTM0OSw2ICs4MDQsMTIgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuc3VwcG9ydGVkIEFUTSB0eXBlICVkXG4iLAorCQkJIHZjYy0+cW9zLmFhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlciksIEdGUF9BVE9NSUMpOwogCWlmICghc2tiICYmIG5ldF9yYXRlbGltaXQoKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBwb3BlbigpXG4iKTsKQEAgLTM1NiwyMiArODE3LDE3IEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QT1BFTik7CiAKIAlmcGdhX3F1ZXVlKGNhcmQsIFNPTE9TX0NIQU4odmNjLT5kZXYpLCBza2IsIE5VTEwpOwogCi0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIk9wZW4gZm9yIHZwaSAlZCBhbmQgdmNpICVkIG9uIGludGVyZmFjZSAlZFxuIiwgdmNjLT52cGksIHZjYy0+dmNpLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSk7Ci0Jc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOyAvLyBhY2NlcHQgdGhlIHZwaSAvIHZjaQorCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCWxpc3RfdmNjcygwKTsKIAotCWlmICghb3BlbnMpCi0JCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQotCW9wZW5zKys7IC8vY291bnQgb3BlbiBQVkNzCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4OSwxNyArODQ1LDEzIEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QQ0xPU0UpOwogCiAJZnBnYV9xdWV1ZShjYXJkLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSwgc2tiLCBOVUxMKTsKIAotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJDbG9zZSBmb3IgdnBpICVkIGFuZCB2Y2kgJWQgb24gaW50ZXJmYWNlICVkXG4iLCB2Y2MtPnZwaSwgdmNjLT52Y2ksIFNPTE9TX0NIQU4odmNjLT5kZXYpKTsKLQlpZiAoIS0tb3BlbnMpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQogCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOwogCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIApAQCAtNDM5LDIyICs4OTEsMjYgQEAKIAkJICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJaW50IG9sZF9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCSoodm9pZCAqKilza2ItPmNiID0gdmNjOworCVNLQl9DQihza2IpLT52Y2MgPSB2Y2M7CiAKLQlzcGluX2xvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJb2xkX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJmNhcmQtPnR4X3F1ZXVlW3BvcnRdKTsKIAlza2JfcXVldWVfdGFpbCgmY2FyZC0+dHhfcXVldWVbcG9ydF0sIHNrYik7Ci0Jc3Bpbl91bmxvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCWlmICghb2xkX2xlbikKKwkJY2FyZC0+dHhfbWFzayB8PSAoMSA8PCBwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAKLQkvKiBJZiBUWCBtaWdodCBuZWVkIHRvIGJlIHN0YXJ0ZWQsIGRvIHNvICovCisJLyogVGhlb3JldGljYWxseSB3ZSBjb3VsZCBqdXN0IHNjaGVkdWxlIHRoZSB0YXNrbGV0IGhlcmUsIGJ1dAorCSAgIHRoYXQgaW50cm9kdWNlcyBsYXRlbmN5IHdlIGRvbid0IHdhbnQgLS0gaXQncyBub3RpY2VhYmxlICovCiAJaWYgKCFvbGRfbGVuKQogCQlmcGdhX3R4KGNhcmQpOwogfQogCi1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQpCitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCkKIHsKLQl1aW50MzJfdCB0eF9wZW5kaW5nOworCXVpbnQzMl90IHR4X3BlbmRpbmcsIGNhcmRfZmxhZ3M7CiAJdWludDMyX3QgdHhfc3RhcnRlZCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwpAQCAtNDYyLDY5ICs5MTgsNzcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKKwkKKwljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkvKgorCSAqIFRoZSBxdWV1ZSBsb2NrIGlzIHJlcXVpcmVkIGZvciBfd3JpdGluZ18gdG8gdHhfbWFzaywgYnV0IHdlJ3JlCisJICogT0sgdG8gcmVhZCBpdCBoZXJlIHdpdGhvdXQgbG9ja2luZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVwZGF0ZQorCSAqIHRoYXQgd2UgY291bGQgcmFjZSB3aXRoIGlzIGluIGZwZ2FfcXVldWUoKSB3aGVyZSBpdCBzZXRzIGEgYml0CisJICogZm9yIGEgbmV3IHBvcnQuLi4gYnV0IGl0J3MgZ29pbmcgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluIGlmCisJICogaXQncyBkb2luZyB0aGF0LCBhbnl3YXkuCisJICovCisJdHhfcGVuZGluZyA9IGNhcmQtPnR4X21hc2sgJiB+Y2FyZF9mbGFnczsKIAotCXR4X3BlbmRpbmcgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotCi0JZGV2X3ZkYmcoJmNhcmQtPmRldi0+ZGV2LCAiVFggRmxhZ3MgYXJlICVYXG4iLCB0eF9wZW5kaW5nKTsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBjYXJkLT5ucl9wb3J0czsgcG9ydCsrKSB7Ci0JCWlmICghKHR4X3BlbmRpbmcgJiAoMSA8PCBwb3J0KSkpIHsKKwlmb3IgKHBvcnQgPSAwOyB0eF9wZW5kaW5nOyB0eF9wZW5kaW5nID4+PSAxLCBwb3J0KyspIHsKKwkJaWYgKHR4X3BlbmRpbmcgJiAxKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiID0gY2FyZC0+dHhfc2tiW3BvcnRdOworCQkJaWYgKG9sZHNrYikKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPmRldiwgU0tCX0NCKG9sZHNrYiktPmRtYV9hZGRyLAorCQkJCQkJIG9sZHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQkJc3Bpbl9sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT50eF9xdWV1ZVtwb3J0XSk7CisJCQlpZiAoIXNrYikKKwkJCQljYXJkLT50eF9tYXNrICY9IH4oMSA8PCBwb3J0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAotCQkJaWYgKCFza2IpCisJCQlpZiAoc2tiICYmICFjYXJkLT51c2luZ19kbWEpIHsKKwkJCQltZW1jcHlfdG9pbyhUWF9CVUYoY2FyZCwgcG9ydCksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OworCQkJCW9sZHNrYiA9IHNrYjsgLyogV2UncmUgZG9uZSB3aXRoIHRoaXMgc2tiIGFscmVhZHkgKi8KKwkJCX0gZWxzZSBpZiAoc2tiICYmIGNhcmQtPnVzaW5nX2RtYSkgeworCQkJCVNLQl9DQihza2IpLT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJCQkgICAgICAgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWlvd3JpdGUzMihTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCSAgY2FyZC0+Y29uZmlnX3JlZ3MgKyBUWF9ETUFfQUREUihwb3J0KSk7CisJCQl9CisKKwkJCWlmICghb2xkc2tiKQogCQkJCWNvbnRpbnVlOwogCisJCQkvKiBDbGVhbiB1cCBhbmQgZnJlZSBvbGRza2Igbm93IGl0J3MgZ29uZSAqLwogCQkJaWYgKGF0bWRlYnVnKSB7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiVHJhbnNtaXR0ZWQ6IHBvcnQgJWRcbiIsCiAJCQkJCSBwb3J0KTsKLQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQlwcmludF9idWZmZXIob2xkc2tiKTsKIAkJCX0KLQkJCW1lbWNweV90b2lvKFRYX0JVRihjYXJkLCBwb3J0KSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkJCXZjYyA9ICoodm9pZCAqKilza2ItPmNiOworCQkJdmNjID0gU0tCX0NCKG9sZHNrYiktPnZjYzsKIAogCQkJaWYgKHZjYykgewogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKLQkJCQlzb2xvc19wb3AodmNjLCBza2IpOworCQkJCXNvbG9zX3BvcCh2Y2MsIG9sZHNrYik7CiAJCQl9IGVsc2UKLQkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJCWRldl9rZnJlZV9za2JfaXJxKG9sZHNrYik7CiAKLQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OyAvL1NldCBUWCBmdWxsIGZsYWcKIAkJfQogCX0KKwkvKiBGb3Igbm9uLURNQSBUWCwgd3JpdGUgdGhlICdUWCBzdGFydCcgYml0IGZvciBhbGwgZm91ciBwb3J0cyBzaW11bHRhbmVvdXNseSAqLwogCWlmICh0eF9zdGFydGVkKQogCQlpb3dyaXRlMzIodHhfc3RhcnRlZCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2FyZF9mbGFnczsKIH0KIAogc3RhdGljIGludCBwc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gdmNjLT5kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOworCWludCBwa3RsZW47CiAKLQkvL2Rldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAicHNlbmQgY2FsbGVkLlxuIik7Ci0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImRldix2cGksdmNpID0gJWQsJWQsJWRcbiIsU09MT1NfQ0hBTih2Y2MtPmRldiksdmNjLT52cGksdmNjLT52Y2kpOwotCi0JaWYgKGRlYnVnKSB7Ci0JCXNrYjIgPSBhdG1fYWxsb2NfY2hhcmdlKHZjYywgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoc2tiMikgewotCQkJbWVtY3B5KHNrYjItPmRhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQkJc2tiX3B1dChza2IyLCBza2ItPmxlbik7Ci0JCQl2Y2MtPnB1c2godmNjLCBza2IyKTsKLQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKLQkJfQotCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eCk7Ci0JCXNvbG9zX3BvcCh2Y2MsIHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChza2ItPmxlbiA+IChCVUZfU0laRSAtIHNpemVvZigqaGVhZGVyKSkpIHsKKwlwa3RsZW4gPSBza2ItPmxlbjsKKwlpZiAocGt0bGVuID4gKEJVRl9TSVpFIC0gc2l6ZW9mKCpoZWFkZXIpKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJMZW5ndGggb2YgUERVIGlzIHRvbyBsYXJnZS4gRHJvcHBpbmcgUERVLlxuIik7CiAJCXNvbG9zX3BvcCh2Y2MsIHNrYik7CiAJCXJldHVybiAwOwpAQCAtNTM5LDYgKzEwMDMsNyBAQAogCiAJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBleHBhbmRfYnksIDAsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0KSB7CisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJwc2tiX2V4cGFuZF9oZWFkIGZhaWxlZC5cbiIpOwogCQkJc29sb3NfcG9wKHZjYywgc2tiKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTU0Niw3ICsxMDExLDggQEAKIAogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCS8qIFRoaXMgZG9lcyBfbm90XyBpbmNsdWRlIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgKi8KKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihwa3RsZW4pOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9EQVRBKTsKQEAgLTU3MywyMCArMTAzOSwxOSBAQAogCiBzdGF0aWMgaW50IGZwZ2FfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWludCBlcnIsIGk7CisJaW50IGVycjsKIAl1aW50MTZfdCBmcGdhX3ZlcjsKIAl1aW50OF90IG1ham9yX3ZlciwgbWlub3JfdmVyOwogCXVpbnQzMl90IGRhdGEzMjsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZDsKIAotCWlmIChkZWJ1ZykKLQkJcmV0dXJuIDA7Ci0KIAljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJY2FyZC0+ZGV2ID0gZGV2OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPmZ3X3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5wYXJhbV93cSk7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKQEAgLTU5NCw2ICsxMDU5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWVyciA9IHBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikgeworCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IDMyLWJpdCBETUEgbWFza1xuIik7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAic29sb3MiKTsKIAlpZiAoZXJyKSB7CiAJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvbnNcbiIpOwpAQCAtNjExLDE3ICsxMDgyLDEzIEBACiAJCWdvdG8gb3V0X3VubWFwX2NvbmZpZzsKIAl9CiAKLS8vCWZvcihpPTA7aTw2NCA7aSs9NCl7Ci0vLwkJZGF0YTMyPWlvcmVhZDMyKGNhcmQtPmJ1ZmZlcnMgKyBpKTsKLS8vCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIiUwOGxYXG4iLCh1bnNpZ25lZCBsb25nKWRhdGEzMik7Ci0vLwl9CisJaWYgKHJlc2V0KSB7CisJCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCiAKLQkvL0ZpbGwgQ29uZmlnIE1lbSB3aXRoIHplcm9zCi0JZm9yKGkgPSAwOyBpIDwgMTI4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIGkpOwotCi0JLy9TZXQgUlggZW1wdHkgZmxhZ3MKLQlpb3dyaXRlMzIoMHhGMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwl9CiAKIAlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfVkVSKTsKIAlmcGdhX3ZlciA9IChkYXRhMzIgJiAweDAwMDBGRkZGKTsKQEAgLTYzMCw1NSArMTA5Nyw1MyBAQAogCWRldl9pbmZvKCZkZXYtPmRldiwgIlNvbG9zIEZQR0EgVmVyc2lvbiAlZC4lMDJkIHN2bi0lZFxuIiwKIAkJIG1ham9yX3ZlciwgbWlub3JfdmVyLCBmcGdhX3Zlcik7CiAKLQljYXJkLT5ucl9wb3J0cyA9IDI7IC8qIEZJWE1FOiBEZXRlY3QgZGF1Z2h0ZXJib2FyZCAqLworCWlmICgwICYmIGZwZ2FfdmVyID4gMjcpCisJCWNhcmQtPnVzaW5nX2RtYSA9IDE7CisJZWxzZSB7CisJCS8qIFNldCBSWCBlbXB0eSBmbGFnIGZvciBhbGwgcG9ydHMgKi8KKwkJaW93cml0ZTMyKDB4RjAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJfQogCi0JZXJyID0gYXRtX2luaXQoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5tYXBfYm90aDsKKwlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIFBPUlRTKTsKKwljYXJkLT5ucl9wb3J0cyA9IChkYXRhMzIgJiAweDAwMDAwMEZGKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOworCiAJdGFza2xldF9pbml0KCZjYXJkLT50bGV0LCBzb2xvc19iaCwgKHVuc2lnbmVkIGxvbmcpY2FyZCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnR4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+Y2xpX3F1ZXVlX2xvY2spOwotLyoKLQkvLyBTZXQgTG9vcGJhY2sgbW9kZQotCWRhdGEzMiA9IDB4MDAwMTAwMDA7Ci0JaW93cml0ZTMyKGRhdGEzMixjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotKi8KLS8qCi0JLy8gRmlsbCBCdWZmZXJzIHdpdGggemVyb3MKLQlmb3IgKGkgPSAwOyBpIDwgQlVGX1NJWkUgKiA4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5idWZmZXJzICsgaSk7Ci0qLwotLyoKLQlmb3IoaSA9IDA7IGkgPCAoQlVGX1NJWkUgKiAxKTsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHgxMjM0NTY3OCwgY2FyZC0+YnVmZmVycyArIGkgKyAoMCpCVUZfU0laRSkpOwotCWZvcihpID0gMDsgaSA8IChCVUZfU0laRSAqIDEpOyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGFiY2RlZjk4LCBjYXJkLT5idWZmZXJzICsgaSArICgxKkJVRl9TSVpFKSk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5wYXJhbV9xdWV1ZSk7CiAKLQkvLyBSZWFkIENvbmZpZyBNZW1vcnkKLQlwcmludGsoS0VSTl9ERUJVRyAiUmVhZGluZyBDb25maWcgTUVNXG4iKTsKLQlpID0gMDsKLQlmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWRhdGEzMj1pb3JlYWQzMihjYXJkLT5idWZmZXJzICsgaSooQlVGX1NJWkUvMikpOwotCQlwcmludGsoS0VSTl9BTEVSVCAiQWRkcjogJWxYIERhdGE6ICUwOGxYXG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKGFkZHJfc3RhcnQgKyBpKihCVUZfU0laRS8yKSksCi0JCSAgICAgICAodW5zaWduZWQgbG9uZylkYXRhMzIpOwotCX0KLSovCi0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIlJlcXVlc3RpbmcgSVJROiAlZFxuIixkZXYtPmlycSk7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbG9zX2lycSwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc29sb3NfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCSAgInNvbG9zLXBjaSIsIGNhcmQpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGludGVycnVwdCBJUlE6ICVkXG4iLCBkZXYtPmlycSk7CisJCWdvdG8gb3V0X3VubWFwX2JvdGg7CisJfQogCi0JLy8gRW5hYmxlIElSUXMKIAlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKKwlpZiAoZnBnYV91cGdyYWRlKQorCQlmbGFzaF91cGdyYWRlKGNhcmQsIDApOworCisJaWYgKGZpcm13YXJlX3VwZ3JhZGUpCisJCWZsYXNoX3VwZ3JhZGUoY2FyZCwgMSk7CisKKwllcnIgPSBhdG1faW5pdChjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2lycTsKKwogCXJldHVybiAwOwogCisgb3V0X2ZyZWVfaXJxOgorCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKKwlmcmVlX2lycShkZXYtPmlycSwgY2FyZCk7CisJdGFza2xldF9raWxsKCZjYXJkLT50bGV0KTsKKwkKICBvdXRfdW5tYXBfYm90aDoKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmNvbmZpZ19yZWdzKTsKICBvdXRfdW5tYXBfY29uZmlnOgogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CkBAIC02OTMsOSArMTE1OCwxMCBAQAogewogCWludCBpOwogCi0Jb3BlbnMgPSAwOwotCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm5yX3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT50eF9xdWV1ZVtpXSk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPmNsaV9xdWV1ZVtpXSk7CiAKQEAgLTcwNyw2ICsxMTczLDggQEAKIAkJfQogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2RldiwgJmRldl9hdHRyX2NvbnNvbGUpKQogCQkJZGV2X2VycigmY2FyZC0+ZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgY29uc29sZSBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CisJCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKSkKKwkJCWRldl9lcnIoJmNhcmQtPmRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHBhcmFtZXRlciBncm91cCBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CiAKIAkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmVnaXN0ZXJlZCBBVE0gZGV2aWNlICVkXG4iLCBjYXJkLT5hdG1kZXZbaV0tPm51bWJlcik7CiAKQEAgLTcxNCw2ICsxMTgyLDIyIEBACiAJCWNhcmQtPmF0bWRldltpXS0+Y2lfcmFuZ2UudmNpX2JpdHMgPSAxNjsKIAkJY2FyZC0+YXRtZGV2W2ldLT5kZXZfZGF0YSA9IGNhcmQ7CiAJCWNhcmQtPmF0bWRldltpXS0+cGh5X2RhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWk7CisJCWNhcmQtPmF0bWRldltpXS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IpIHsKKwkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIGF0bV9pbml0KClcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfU1RBVFVTKTsKKworCQlmcGdhX3F1ZXVlKGNhcmQsIGksIHNrYiwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzI0LDggKzEyMDgsMjggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ucl9wb3J0czsgaSsrKSB7CiAJCWlmIChjYXJkLT5hdG1kZXZbaV0pIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisKIAkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlVucmVnaXN0ZXJpbmcgQVRNIGRldmljZSAlZFxuIiwgY2FyZC0+YXRtZGV2W2ldLT5udW1iZXIpOworCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKTsKIAkJCWF0bV9kZXZfZGVyZWdpc3RlcihjYXJkLT5hdG1kZXZbaV0pOworCisJCQlza2IgPSBjYXJkLT5yeF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQl9CisJCQlza2IgPSBjYXJkLT50eF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJfQorCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+dHhfcXVldWVbaV0pKSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisgCiAJCX0KIAl9CiB9CkBAIC03MzMsMzEgKzEyMzcsMzEgQEAKIHN0YXRpYyB2b2lkIGZwZ2FfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwkKKwkvKiBEaXNhYmxlIElSUXMgKi8KKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKLQlpZiAoZGVidWcpCi0JCXJldHVybjsKKwkvKiBSZXNldCBGUEdBICovCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkodm9pZClpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAogCiAJYXRtX3JlbW92ZShjYXJkKTsKIAotCWRldl92ZGJnKCZkZXYtPmRldiwgIkZyZWVpbmcgSVJRXG4iKTsKLQkvLyBEaXNhYmxlIElSUXMgZnJvbSBGUEdBCi0JaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBjYXJkKTsKIAl0YXNrbGV0X2tpbGwoJmNhcmQtPnRsZXQpOwogCi0JLy8JaW93cml0ZTMyKDB4MDEscGNpcmVncyk7Ci0JZGV2X3ZkYmcoJmRldi0+ZGV2LCAiVW5tYXBwaW5nIFBDSSByZXNvdXJjZVxuIik7CisJLyogUmVsZWFzZSBkZXZpY2UgZnJvbSByZXNldCAqLworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJKHZvaWQpaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5jb25maWdfcmVncyk7CiAKLQlkZXZfdmRiZygmZGV2LT5kZXYsICJSZWxlYXNpbmcgUENJIFJlZ2lvblxuIik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJa2ZyZWUoY2FyZCk7Ci0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImZwZ2FfcmVtb3ZlXG4iKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmcGdhX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKaW5kZXggOWY1MGYxYi4uZGRjOTc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaAorKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCkBAIC02Myw2ICs2MywzMiBAQAogI2RlZmluZSB0b19jbGFzcyhvYmopCVwKIAljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY2xhc3NfcHJpdmF0ZSwgY2xhc3Nfc3Vic3lzLmtvYmopCiAKKy8qKgorICogc3RydWN0IGRldmljZV9wcml2YXRlIC0gc3RydWN0dXJlIHRvIGhvbGQgdGhlIHByaXZhdGUgdG8gdGhlIGRyaXZlciBjb3JlIHBvcnRpb25zIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICoKKyAqIEBrbGlzdF9jaGlsZHJlbiAtIGtsaXN0IGNvbnRhaW5pbmcgYWxsIGNoaWxkcmVuIG9mIHRoaXMgZGV2aWNlCisgKiBAa25vZGVfcGFyZW50IC0gbm9kZSBpbiBzaWJsaW5nIGxpc3QKKyAqIEBrbm9kZV9kcml2ZXIgLSBub2RlIGluIGRyaXZlciBsaXN0CisgKiBAa25vZGVfYnVzIC0gbm9kZSBpbiBidXMgbGlzdAorICogQGRldmljZSAtIHBvaW50ZXIgYmFjayB0byB0aGUgc3RydWN0IGNsYXNzIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMKKyAqIGFzc29jaWF0ZWQgd2l0aC4KKyAqCisgKiBOb3RoaW5nIG91dHNpZGUgb2YgdGhlIGRyaXZlciBjb3JlIHNob3VsZCBldmVyIHRvdWNoIHRoZXNlIGZpZWxkcy4KKyAqLworc3RydWN0IGRldmljZV9wcml2YXRlIHsKKwlzdHJ1Y3Qga2xpc3Qga2xpc3RfY2hpbGRyZW47CisJc3RydWN0IGtsaXN0X25vZGUga25vZGVfcGFyZW50OworCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2RyaXZlcjsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9idXM7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworfTsKKyNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG9iaikJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfcGFyZW50KQorI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9kcml2ZXIob2JqKQlcCisJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9kcml2ZXIpCisjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX2J1cyhvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsIGtub2RlX2J1cykKKwogLyogaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGRldmljZXNfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgYnVzZXNfaW5pdCh2b2lkKTsKQEAgLTg2LDYgKzExMiwxMSBAQAogCiBleHRlcm4gdm9pZCBkcml2ZXJfZGV0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwogZXh0ZXJuIGludCBkcml2ZXJfcHJvYmVfZGV2aWNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgaW5saW5lIGludCBkcml2ZXJfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCisJCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkcnYtPmJ1cy0+bWF0Y2ggJiYgZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KTsKK30KIAogZXh0ZXJuIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggODNmMzJiOC4uZGMwMzBmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJaW50IGVyciA9IC1FTk9ERVY7CiAKIAlkZXYgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1Zik7Ci0JaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMKSB7CisJaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMICYmIGRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKSB7CiAJCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KIAkJCWRvd24oJmRldi0+cGFyZW50LT5zZW0pOwogCQlkb3duKCZkZXYtPnNlbSk7CkBAIC0yNTMsNyArMjUzLDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cykgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OworCisJaWYgKG4pIHsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTI4Niw3ICsyOTMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZidXMtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPmtub2RlX2J1cyA6IE5VTEwpKTsKKwkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9idXMgOiBOVUxMKSk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihkZXYsIGRhdGEpOwogCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CkBAIC0zMjAsNyArMzI3LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmYnVzLT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9idXMgOiBOVUxMKSk7CisJCQkgICAgIChzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfYnVzIDogTlVMTCkpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkKIAkJaWYgKG1hdGNoKGRldiwgZGF0YSkgJiYgZ2V0X2RldmljZShkZXYpKQogCQkJYnJlYWs7CkBAIC01MDcsNyArNTE0LDggQEAKIAkJCXJldCA9IGRldmljZV9hdHRhY2goZGV2KTsKIAkJV0FSTl9PTihyZXQgPCAwKTsKIAkJaWYgKHJldCA+PSAwKQotCQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfYnVzLCAmYnVzLT5wLT5rbGlzdF9kZXZpY2VzKTsKKwkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX2J1cywKKwkJCQkgICAgICAgJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcyk7CiAJfQogfQogCkBAIC01MjgsOCArNTM2LDggQEAKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+YnVzLT5wLT5kZXZpY2VzX2tzZXQtPmtvYmosCiAJCQkJICBkZXZfbmFtZShkZXYpKTsKIAkJZGV2aWNlX3JlbW92ZV9hdHRycyhkZXYtPmJ1cywgZGV2KTsKLQkJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfYnVzKSkKLQkJCWtsaXN0X2RlbCgmZGV2LT5rbm9kZV9idXMpOworCQlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5wLT5rbm9kZV9idXMpKQorCQkJa2xpc3RfZGVsKCZkZXYtPnAtPmtub2RlX2J1cyk7CiAKIAkJcHJfZGVidWcoImJ1czogJyVzJzogcmVtb3ZlIGRldmljZSAlc1xuIiwKIAkJCSBkZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CkBAIC04MzEsMTQgKzgzOSwxNiBAQAogCiBzdGF0aWMgdm9pZCBrbGlzdF9kZXZpY2VzX2dldChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCiAJZ2V0X2RldmljZShkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBrbGlzdF9kZXZpY2VzX3B1dChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCiAJcHV0X2RldmljZShkZXYpOwogfQpAQCAtOTMyLDYgKzk0Miw3IEBACiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7CiAJa2ZyZWUoYnVzLT5wKTsKIG91dDoKKwlidXMtPnAgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChidXNfcmVnaXN0ZXIpOwpAQCAtOTUzLDYgKzk2NCw3IEBACiAJYnVzX3JlbW92ZV9maWxlKGJ1cywgJmJ1c19hdHRyX3VldmVudCk7CiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7CiAJa2ZyZWUoYnVzLT5wKTsKKwlidXMtPnAgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3VucmVnaXN0ZXIpOwogCkBAIC05OTMsMTggKzEwMDUsMjAgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJc3RydWN0IGtsaXN0X25vZGUgKm47CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OwogCXN0cnVjdCBkZXZpY2UgKmI7CiAKIAlsaXN0X2Zvcl9lYWNoKHBvcywgbGlzdCkgewogCQluID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IGtsaXN0X25vZGUsIG5fbm9kZSk7Ci0JCWIgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJYiA9IGRldl9wcnYtPmRldmljZTsKIAkJaWYgKGNvbXBhcmUoYSwgYikgPD0gMCkgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsCi0JCQkJICAgICAgICZiLT5rbm9kZV9idXMubl9ub2RlKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZhLT5wLT5rbm9kZV9idXMubl9ub2RlLAorCQkJCSAgICAgICAmYi0+cC0+a25vZGVfYnVzLm5fbm9kZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOworCWxpc3RfbW92ZV90YWlsKCZhLT5wLT5rbm9kZV9idXMubl9ub2RlLCBsaXN0KTsKIH0KIAogdm9pZCBidXNfc29ydF9icmVhZHRoZmlyc3Qoc3RydWN0IGJ1c190eXBlICpidXMsCkBAIC0xMDE0LDYgKzEwMjgsNyBAQAogCUxJU1RfSEVBRChzb3J0ZWRfZGV2aWNlcyk7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwogCXN0cnVjdCBrbGlzdF9ub2RlICpuOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGtsaXN0ICpkZXZpY2Vfa2xpc3Q7CiAKQEAgLTEwMjIsNyArMTAzNyw4IEBACiAJc3Bpbl9sb2NrKCZkZXZpY2Vfa2xpc3QtPmtfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmZGV2aWNlX2tsaXN0LT5rX2xpc3QpIHsKIAkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOwotCQlkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2J1cyhuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCQlkZXZpY2VfaW5zZXJ0aW9uX3NvcnRfa2xpc3QoZGV2LCAmc29ydGVkX2RldmljZXMsIGNvbXBhcmUpOwogCX0KIAlsaXN0X3NwbGljZSgmc29ydGVkX2RldmljZXMsICZkZXZpY2Vfa2xpc3QtPmtfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCBmM2VhZTYzLi5lNzNjOTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTEwOSw2ICsxMDksNyBAQAogc3RhdGljIHZvaWQgZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmopOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcCA9IGRldi0+cDsKIAogCWlmIChkZXYtPnJlbGVhc2UpCiAJCWRldi0+cmVsZWFzZShkZXYpOwpAQCAtMTIwLDYgKzEyMSw3IEBACiAJCVdBUk4oMSwgS0VSTl9FUlIgIkRldmljZSAnJXMnIGRvZXMgbm90IGhhdmUgYSByZWxlYXNlKCkgIgogCQkJImZ1bmN0aW9uLCBpdCBpcyBicm9rZW4gYW5kIG11c3QgYmUgZml4ZWQuXG4iLAogCQkJZGV2X25hbWUoZGV2KSk7CisJa2ZyZWUocCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGRldmljZV9rdHlwZSA9IHsKQEAgLTEzNCw4ICsxMzYsNiBAQAogCiAJaWYgKGt0eXBlID09ICZkZXZpY2Vfa3R5cGUpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmopOwotCQlpZiAoZGV2LT51ZXZlbnRfc3VwcHJlc3MpCi0JCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+YnVzKQogCQkJcmV0dXJuIDE7CiAJCWlmIChkZXYtPmNsYXNzKQpAQCAtNTA3LDE0ICs1MDcsMTYgQEAKIAogc3RhdGljIHZvaWQga2xpc3RfY2hpbGRyZW5fZ2V0KHN0cnVjdCBrbGlzdF9ub2RlICpuKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9wYXJlbnQpOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcCA9IHRvX2RldmljZV9wcml2YXRlX3BhcmVudChuKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwLT5kZXZpY2U7CiAKIAlnZXRfZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGtsaXN0X2NoaWxkcmVuX3B1dChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnAgPSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcC0+ZGV2aWNlOwogCiAJcHV0X2RldmljZShkZXYpOwogfQpAQCAtNTM4LDggKzU0MCw2IEBACiB7CiAJZGV2LT5rb2JqLmtzZXQgPSBkZXZpY2VzX2tzZXQ7CiAJa29iamVjdF9pbml0KCZkZXYtPmtvYmosICZkZXZpY2Vfa3R5cGUpOwotCWtsaXN0X2luaXQoJmRldi0+a2xpc3RfY2hpbGRyZW4sIGtsaXN0X2NoaWxkcmVuX2dldCwKLQkJICAga2xpc3RfY2hpbGRyZW5fcHV0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5kbWFfcG9vbHMpOwogCWluaXRfTVVURVgoJmRldi0+c2VtKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5kZXZyZXNfbG9jayk7CkBAIC03NzcsMTcgKzc3NywxMiBAQAogaW50IGRldl9zZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgdmFyZ3M7Ci0JY2hhciAqczsKKwlpbnQgZXJyOwogCiAJdmFfc3RhcnQodmFyZ3MsIGZtdCk7Ci0JdnNucHJpbnRmKGRldi0+YnVzX2lkLCBzaXplb2YoZGV2LT5idXNfaWQpLCBmbXQsIHZhcmdzKTsKKwllcnIgPSBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKCZkZXYtPmtvYmosIGZtdCwgdmFyZ3MpOwogCXZhX2VuZCh2YXJncyk7Ci0KLQkvKiBld3d3Li4uIHNvbWUgb2YgdGhlc2UgYnVnZ2VycyBoYXZlIC8gaW4gdGhlIG5hbWUuLi4gKi8KLQl3aGlsZSAoKHMgPSBzdHJjaHIoZGV2LT5idXNfaWQsICcvJykpKQotCQkqcyA9ICchJzsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfc2V0X25hbWUpOwogCkBAIC04NjQsMTIgKzg1OSwyNiBAQAogCWlmICghZGV2KQogCQlnb3RvIGRvbmU7CiAKLQkvKiBUZW1wb3JhcmlseSBzdXBwb3J0IGluaXRfbmFtZSBpZiBpdCBpcyBzZXQuCi0JICogSXQgd2lsbCBvdmVycmlkZSBidXNfaWQgZm9yIG5vdyAqLwotCWlmIChkZXYtPmluaXRfbmFtZSkKLQkJZGV2X3NldF9uYW1lKGRldiwgIiVzIiwgZGV2LT5pbml0X25hbWUpOworCWRldi0+cCA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYtPnApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5wLT5kZXZpY2UgPSBkZXY7CisJa2xpc3RfaW5pdCgmZGV2LT5wLT5rbGlzdF9jaGlsZHJlbiwga2xpc3RfY2hpbGRyZW5fZ2V0LAorCQkgICBrbGlzdF9jaGlsZHJlbl9wdXQpOwogCi0JaWYgKCFzdHJsZW4oZGV2LT5idXNfaWQpKQorCS8qCisJICogZm9yIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGRldmljZXMsIHdoaWNoIHNob3VsZCBhbGwgYmUgY29udmVydGVkCisJICogc29tZSBkYXksIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbmFtZS4gV2UgcHJldmVudCByZWFkaW5nIGJhY2sKKwkgKiB0aGUgbmFtZSwgYW5kIGZvcmNlIHRoZSB1c2Ugb2YgZGV2X25hbWUoKQorCSAqLworCWlmIChkZXYtPmluaXRfbmFtZSkgeworCQlkZXZfc2V0X25hbWUoZGV2LCBkZXYtPmluaXRfbmFtZSk7CisJCWRldi0+aW5pdF9uYW1lID0gTlVMTDsKKwl9CisKKwlpZiAoIWRldl9uYW1lKGRldikpCiAJCWdvdG8gZG9uZTsKIAogCXByX2RlYnVnKCJkZXZpY2U6ICclcyc6ICVzXG4iLCBkZXZfbmFtZShkZXYpLCBfX2Z1bmNfXyk7CkBAIC05MjgsNyArOTM3LDggQEAKIAlrb2JqZWN0X3VldmVudCgmZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAJYnVzX2F0dGFjaF9kZXZpY2UoZGV2KTsKIAlpZiAocGFyZW50KQotCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9wYXJlbnQsICZwYXJlbnQtPmtsaXN0X2NoaWxkcmVuKTsKKwkJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfcGFyZW50LAorCQkJICAgICAgICZwYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuKTsKIAogCWlmIChkZXYtPmNsYXNzKSB7CiAJCW11dGV4X2xvY2soJmRldi0+Y2xhc3MtPnAtPmNsYXNzX211dGV4KTsKQEAgLTEwNDIsNyArMTA1Miw3IEBACiAJZGV2aWNlX3BtX3JlbW92ZShkZXYpOwogCWRwbV9zeXNmc19yZW1vdmUoZGV2KTsKIAlpZiAocGFyZW50KQotCQlrbGlzdF9kZWwoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJa2xpc3RfZGVsKCZkZXYtPnAtPmtub2RlX3BhcmVudCk7CiAJaWYgKE1BSk9SKGRldi0+ZGV2dCkpIHsKIAkJZGV2aWNlX3JlbW92ZV9zeXNfZGV2X2VudHJ5KGRldik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZ0X2F0dHIpOwpAQCAtMTEwMyw3ICsxMTEzLDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCkgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpwOworCisJaWYgKG4pIHsKKwkJcCA9IHRvX2RldmljZV9wcml2YXRlX3BhcmVudChuKTsKKwkJZGV2ID0gcC0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTExMjUsNyArMTE0Miw3IEBACiAJc3RydWN0IGRldmljZSAqY2hpbGQ7CiAJaW50IGVycm9yID0gMDsKIAotCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5rbGlzdF9jaGlsZHJlbiwgJmkpOworCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbiwgJmkpOwogCXdoaWxlICgoY2hpbGQgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihjaGlsZCwgZGF0YSk7CiAJa2xpc3RfaXRlcl9leGl0KCZpKTsKQEAgLTExNTYsNyArMTE3Myw3IEBACiAJaWYgKCFwYXJlbnQpCiAJCXJldHVybiBOVUxMOwogCi0Ja2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CisJa2xpc3RfaXRlcl9pbml0KCZwYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuLCAmaSk7CiAJd2hpbGUgKChjaGlsZCA9IG5leHRfZGV2aWNlKCZpKSkpCiAJCWlmIChtYXRjaChjaGlsZCwgZGF0YSkgJiYgZ2V0X2RldmljZShjaGlsZCkpCiAJCQlicmVhazsKQEAgLTEzNDgsNyArMTM2NSwxMCBAQAogCWRldi0+cmVsZWFzZSA9IGRldmljZV9jcmVhdGVfcmVsZWFzZTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcnZkYXRhKTsKIAotCXZzbnByaW50ZihkZXYtPmJ1c19pZCwgQlVTX0lEX1NJWkUsIGZtdCwgYXJncyk7CisJcmV0dmFsID0ga29iamVjdF9zZXRfbmFtZV92YXJncygmZGV2LT5rb2JqLCBmbXQsIGFyZ3MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycm9yOwpAQCAtMTQ1MiwxOSArMTQ3MiwxNSBAQAogCQlvbGRfY2xhc3NfbmFtZSA9IG1ha2VfY2xhc3NfbmFtZShkZXYtPmNsYXNzLT5uYW1lLCAmZGV2LT5rb2JqKTsKICNlbmRpZgogCi0Jb2xkX2RldmljZV9uYW1lID0ga21hbGxvYyhCVVNfSURfU0laRSwgR0ZQX0tFUk5FTCk7CisJb2xkX2RldmljZV9uYW1lID0ga3N0cmR1cChkZXZfbmFtZShkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9sZF9kZXZpY2VfbmFtZSkgewogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQlzdHJsY3B5KG9sZF9kZXZpY2VfbmFtZSwgZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFKTsKLQlzdHJsY3B5KGRldi0+YnVzX2lkLCBuZXdfbmFtZSwgQlVTX0lEX1NJWkUpOwogCiAJZXJyb3IgPSBrb2JqZWN0X3JlbmFtZSgmZGV2LT5rb2JqLCBuZXdfbmFtZSk7Ci0JaWYgKGVycm9yKSB7Ci0JCXN0cmxjcHkoZGV2LT5idXNfaWQsIG9sZF9kZXZpY2VfbmFtZSwgQlVTX0lEX1NJWkUpOworCWlmIChlcnJvcikKIAkJZ290byBvdXQ7Ci0JfQogCiAjaWZkZWYgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQKIAlpZiAob2xkX2NsYXNzX25hbWUpIHsKQEAgLTE1NDUsOCArMTU2MSwxMCBAQAogICogZGV2aWNlX21vdmUgLSBtb3ZlcyBhIGRldmljZSB0byBhIG5ldyBwYXJlbnQKICAqIEBkZXY6IHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZGV2aWNlIHRvIGJlIG1vdmVkCiAgKiBAbmV3X3BhcmVudDogdGhlIG5ldyBwYXJlbnQgb2YgdGhlIGRldmljZSAoY2FuIGJ5IE5VTEwpCisgKiBAZHBtX29yZGVyOiBob3cgdG8gcmVvcmRlciB0aGUgZHBtX2xpc3QKICAqLwotaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCkKK2ludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQsCisJCWVudW0gZHBtX29yZGVyIGRwbV9vcmRlcikKIHsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGRldmljZSAqb2xkX3BhcmVudDsKQEAgLTE1NTYsNiArMTU3NCw3IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2aWNlX3BtX2xvY2soKTsKIAluZXdfcGFyZW50ID0gZ2V0X2RldmljZShuZXdfcGFyZW50KTsKIAluZXdfcGFyZW50X2tvYmogPSBnZXRfZGV2aWNlX3BhcmVudChkZXYsIG5ld19wYXJlbnQpOwogCkBAIC0xNTcwLDkgKzE1ODksMTAgQEAKIAlvbGRfcGFyZW50ID0gZGV2LT5wYXJlbnQ7CiAJZGV2LT5wYXJlbnQgPSBuZXdfcGFyZW50OwogCWlmIChvbGRfcGFyZW50KQotCQlrbGlzdF9yZW1vdmUoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJa2xpc3RfcmVtb3ZlKCZkZXYtPnAtPmtub2RlX3BhcmVudCk7CiAJaWYgKG5ld19wYXJlbnQpIHsKLQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LCAmbmV3X3BhcmVudC0+a2xpc3RfY2hpbGRyZW4pOworCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQsCisJCQkgICAgICAgJm5ld19wYXJlbnQtPnAtPmtsaXN0X2NoaWxkcmVuKTsKIAkJc2V0X2Rldl9ub2RlKGRldiwgZGV2X3RvX25vZGUobmV3X3BhcmVudCkpOwogCX0KIApAQCAtMTU4NCwxMSArMTYwNCwxMSBAQAogCQlkZXZpY2VfbW92ZV9jbGFzc19saW5rcyhkZXYsIG5ld19wYXJlbnQsIG9sZF9wYXJlbnQpOwogCQlpZiAoIWtvYmplY3RfbW92ZSgmZGV2LT5rb2JqLCAmb2xkX3BhcmVudC0+a29iaikpIHsKIAkJCWlmIChuZXdfcGFyZW50KQotCQkJCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9wYXJlbnQpOworCQkJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9wYXJlbnQpOwogCQkJZGV2LT5wYXJlbnQgPSBvbGRfcGFyZW50OwogCQkJaWYgKG9sZF9wYXJlbnQpIHsKLQkJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9wYXJlbnQsCi0JCQkJCSAgICAgICAmb2xkX3BhcmVudC0+a2xpc3RfY2hpbGRyZW4pOworCQkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX3BhcmVudCwKKwkJCQkJICAgICAgICZvbGRfcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAJCQkJc2V0X2Rldl9ub2RlKGRldiwgZGV2X3RvX25vZGUob2xkX3BhcmVudCkpOwogCQkJfQogCQl9CkBAIC0xNTk2LDkgKzE2MTYsMjMgQEAKIAkJcHV0X2RldmljZShuZXdfcGFyZW50KTsKIAkJZ290byBvdXQ7CiAJfQorCXN3aXRjaCAoZHBtX29yZGVyKSB7CisJY2FzZSBEUE1fT1JERVJfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVDoKKwkJZGV2aWNlX3BtX21vdmVfYWZ0ZXIoZGV2LCBuZXdfcGFyZW50KTsKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVY6CisJCWRldmljZV9wbV9tb3ZlX2JlZm9yZShuZXdfcGFyZW50LCBkZXYpOworCQlicmVhazsKKwljYXNlIERQTV9PUkRFUl9ERVZfTEFTVDoKKwkJZGV2aWNlX3BtX21vdmVfbGFzdChkZXYpOworCQlicmVhazsKKwl9CiBvdXRfcHV0OgogCXB1dF9kZXZpY2Uob2xkX3BhcmVudCk7CiBvdXQ6CisJZGV2aWNlX3BtX3VubG9jaygpOwogCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jCmluZGV4IDEzNTIzMTIuLmYxN2MzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZC5jCkBAIC0zMCw3ICszMCw3IEBACiAKIHN0YXRpYyB2b2lkIGRyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfZHJpdmVyKSkgeworCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPnAtPmtub2RlX2RyaXZlcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRldmljZSAlcyBhbHJlYWR5IGJvdW5kXG4iLAogCQkJX19mdW5jX18sIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CiAJCXJldHVybjsKQEAgLTQzLDcgKzQzLDcgQEAKIAkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZGV2LT5idXMtPnAtPmJ1c19ub3RpZmllciwKIAkJCQkJICAgICBCVVNfTk9USUZZX0JPVU5EX0RSSVZFUiwgZGV2KTsKIAotCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX2RyaXZlciwgJmRldi0+ZHJpdmVyLT5wLT5rbGlzdF9kZXZpY2VzKTsKKwlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9kcml2ZXIsICZkZXYtPmRyaXZlci0+cC0+a2xpc3RfZGV2aWNlcyk7CiB9CiAKIHN0YXRpYyBpbnQgZHJpdmVyX3N5c2ZzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0xNzIsMTYgKzE3MiwxMiBAQAogLyoqCiAgKiB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUKICAqIFdhaXQgZm9yIGRldmljZSBwcm9iaW5nIHRvIGJlIGNvbXBsZXRlZC4KLSAqCi0gKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHBvbGxzIGF0IDEwMCBtc2VjIGludGVydmFscy4KICAqLwotaW50IHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKQordm9pZCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCkKIHsKIAkvKiB3YWl0IGZvciB0aGUga25vd24gZGV2aWNlcyB0byBjb21wbGV0ZSB0aGVpciBwcm9iaW5nICovCi0Jd2hpbGUgKGRyaXZlcl9wcm9iZV9kb25lKCkgIT0gMCkKLQkJbXNsZWVwKDEwMCk7CisJd2FpdF9ldmVudChwcm9iZV93YWl0cXVldWUsIGF0b21pY19yZWFkKCZwcm9iZV9jb3VudCkgPT0gMCk7CiAJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOwotCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE4OSwxNCArMTg1LDggQEAKICAqIEBkcnY6IGRyaXZlciB0byBiaW5kIGEgZGV2aWNlIHRvCiAgKiBAZGV2OiBkZXZpY2UgdG8gdHJ5IHRvIGJpbmQgdG8gdGhlIGRyaXZlcgogICoKLSAqIEZpcnN0LCB3ZSBjYWxsIHRoZSBidXMncyBtYXRjaCBmdW5jdGlvbiwgaWYgb25lIHByZXNlbnQsIHdoaWNoIHNob3VsZAotICogY29tcGFyZSB0aGUgZGV2aWNlIElEcyB0aGUgZHJpdmVyIHN1cHBvcnRzIHdpdGggdGhlIGRldmljZSBJRHMgb2YgdGhlCi0gKiBkZXZpY2UuIE5vdGUgd2UgZG9uJ3QgZG8gdGhpcyBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZQotICogZm9ybWF0IG9mIHRoZSBJRCBzdHJ1Y3R1cmVzLCBub3Igd2hhdCBpcyB0byBiZSBjb25zaWRlcmVkIGEgbWF0Y2ggYW5kCi0gKiB3aGF0IGlzIG5vdC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSBpZiBhIG1hdGNoIGlzIGZvdW5kLCAtRU5PREVWIGlmIHRoZSBkZXZpY2UgaXMKLSAqIG5vdCByZWdpc3RlcmVkLCBhbmQgMCBvdGhlcndpc2UuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVOT0RFViBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLAorICogMSBpZiB0aGUgZGV2aWNlIGlzIGJvdW5kIHN1Y2Vzc2Z1bGx5IGFuZCAwIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQGRldi0+c2VtIGhlbGQuICBXaGVuIGNhbGxlZCBmb3IgYQogICogVVNCIGludGVyZmFjZSwgQGRldi0+cGFyZW50LT5zZW0gbXVzdCBiZSBoZWxkIGFzIHdlbGwuCkBAIC0yMDcsMjEgKzE5NywyMiBAQAogCiAJaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoZHJ2LT5idXMtPm1hdGNoICYmICFkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpKQotCQlnb3RvIGRvbmU7CiAKIAlwcl9kZWJ1ZygiYnVzOiAnJXMnOiAlczogbWF0Y2hlZCBkZXZpY2UgJXMgd2l0aCBkcml2ZXIgJXNcbiIsCiAJCSBkcnYtPmJ1cy0+bmFtZSwgX19mdW5jX18sIGRldl9uYW1lKGRldiksIGRydi0+bmFtZSk7CiAKIAlyZXQgPSByZWFsbHlfcHJvYmUoZGV2LCBkcnYpOwogCi1kb25lOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpY2VfYXR0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCWlmICghZHJpdmVyX21hdGNoX2RldmljZShkcnYsIGRldikpCisJCXJldHVybiAwOworCiAJcmV0dXJuIGRyaXZlcl9wcm9iZV9kZXZpY2UoZHJ2LCBkZXYpOwogfQogCkBAIC0yNzQsNyArMjY1LDcgQEAKIAkgKiBpcyBhbiBlcnJvci4KIAkgKi8KIAotCWlmIChkcnYtPmJ1cy0+bWF0Y2ggJiYgIWRydi0+YnVzLT5tYXRjaChkZXYsIGRydikpCisJaWYgKCFkcml2ZXJfbWF0Y2hfZGV2aWNlKGRydiwgZGV2KSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZGV2LT5wYXJlbnQpCS8qIE5lZWRlZCBmb3IgVVNCICovCkBAIC0zMjcsNyArMzE4LDcgQEAKIAkJCWRydi0+cmVtb3ZlKGRldik7CiAJCWRldnJlc19yZWxlYXNlX2FsbChkZXYpOwogCQlkZXYtPmRyaXZlciA9IE5VTEw7Ci0JCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9kcml2ZXIpOworCQlrbGlzdF9yZW1vdmUoJmRldi0+cC0+a25vZGVfZHJpdmVyKTsKIAl9CiB9CiAKQEAgLTM1Nyw2ICszNDgsNyBAQAogICovCiB2b2lkIGRyaXZlcl9kZXRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAJZm9yICg7OykgewpAQCAtMzY1LDggKzM1NywxMCBAQAogCQkJc3Bpbl91bmxvY2soJmRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xvY2spOwogCQkJYnJlYWs7CiAJCX0KLQkJZGV2ID0gbGlzdF9lbnRyeShkcnYtPnAtPmtsaXN0X2RldmljZXMua19saXN0LnByZXYsCi0JCQkJc3RydWN0IGRldmljZSwga25vZGVfZHJpdmVyLm5fbm9kZSk7CisJCWRldl9wcnYgPSBsaXN0X2VudHJ5KGRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xpc3QucHJldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwKKwkJCQkgICAgIGtub2RlX2RyaXZlci5uX25vZGUpOworCQlkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CiAJCWdldF9kZXZpY2UoZGV2KTsKIAkJc3Bpbl91bmxvY2soJmRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggMWUyYmRhNy4uYzUxZjExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtMTksNyArMTksMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpuZXh0X2RldmljZShzdHJ1Y3Qga2xpc3RfaXRlciAqaSkKIHsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbiA9IGtsaXN0X25leHQoaSk7Ci0JcmV0dXJuIG4gPyBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfZHJpdmVyKSA6IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CisKKwlpZiAobikgeworCQlkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfZHJpdmVyKG4pOworCQlkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CisJfQorCXJldHVybiBkZXY7CiB9CiAKIC8qKgpAQCAtNDIsNyArNDksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZkcnYtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICBzdGFydCA/ICZzdGFydC0+a25vZGVfZHJpdmVyIDogTlVMTCk7CisJCQkgICAgIHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9kcml2ZXIgOiBOVUxMKTsKIAl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkgJiYgIWVycm9yKQogCQllcnJvciA9IGZuKGRldiwgZGF0YSk7CiAJa2xpc3RfaXRlcl9leGl0KCZpKTsKQEAgLTc2LDcgKzgzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9kcml2ZXIgOiBOVUxMKSk7CisJCQkgICAgIChzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfZHJpdmVyIDogTlVMTCkpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkKIAkJaWYgKG1hdGNoKGRldiwgZGF0YSkgJiYgZ2V0X2RldmljZShkZXYpKQogCQkJYnJlYWs7CkBAIC0yMTYsNiArMjIzLDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpvdGhlcjsKIAorCUJVR19PTighZHJ2LT5idXMtPnApOworCiAJaWYgKChkcnYtPmJ1cy0+cHJvYmUgJiYgZHJ2LT5wcm9iZSkgfHwKIAkgICAgKGRydi0+YnVzLT5yZW1vdmUgJiYgZHJ2LT5yZW1vdmUpIHx8CiAJICAgIChkcnYtPmJ1cy0+c2h1dGRvd24gJiYgZHJ2LT5zaHV0ZG93bikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCmluZGV4IDQ0Njk5ZDkuLmQzYTU5YzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMzE5LDcgKzMxOSw3IEBACiAJZl9kZXYtPnBhcmVudCA9IGRldmljZTsKIAlmX2Rldi0+Y2xhc3MgPSAmZmlybXdhcmVfY2xhc3M7CiAJZGV2X3NldF9kcnZkYXRhKGZfZGV2LCBmd19wcml2KTsKLQlmX2Rldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhmX2RldiwgMSk7CiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGZfZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoZGV2aWNlLCAiJXM6IGRldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCX0KIAogCWlmICh1ZXZlbnQpCi0JCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhmX2RldiwgMCk7CiAJKmRldl9wID0gZl9kZXY7CiAJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggMzQ5YTEwMS4uZDIxOThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTIxNyw2ICsyMTcsNyBAQAogCWlmIChkKSB7CiAJCW1lbWNweShkLCBkYXRhLCBzaXplKTsKIAkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBkOworCQlwZGV2LT5wbGF0Zm9ybV9kYXRhID0gZDsKIAl9CiAJcmV0dXJuIGQgPyAwIDogLUVOT01FTTsKIH0KQEAgLTI0Niw2ICsyNDcsMjEgQEAKIAllbHNlCiAJCWRldl9zZXRfbmFtZSgmcGRldi0+ZGV2LCBwZGV2LT5uYW1lKTsKIAorCS8qIFdlIHdpbGwgcmVtb3ZlIHBsYXRmb3JtX2RhdGEgZmllbGQgZnJvbSBzdHJ1Y3QgZGV2aWNlCisJKiBpZiBhbGwgcGxhdGZvcm0gZGV2aWNlcyBwYXNzIGl0cyBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhCisJKiBmcm9tIHBsYXRmb3JtX2RldmljZS4gVGhlIGNvbnZlcnNpb24gaXMgZ29pbmcgdG8gYmUgYQorCSogbG9uZyB0aW1lLCBzbyB3ZSBhbGxvdyB0aGUgdHdvIGNhc2VzIGNvZXhpc3QgdG8gbWFrZQorCSogdGhpcyBraW5kIG9mIGZpeCBtb3JlIGVhc2lseSovCisJaWYgKHBkZXYtPnBsYXRmb3JtX2RhdGEgJiYgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiB1c2Ugd2hpY2ggcGxhdGZvcm1fZGF0YT9cbiIsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldikpOworCX0gZWxzZSBpZiAocGRldi0+cGxhdGZvcm1fZGF0YSkgeworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkZXYtPnBsYXRmb3JtX2RhdGE7CisJfSBlbHNlIGlmIChwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlwZGV2LT5wbGF0Zm9ybV9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IHBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnAsICpyID0gJnBkZXYtPnJlc291cmNlW2ldOwogCkBAIC01ODQsMTAgKzYwMCwyNSBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAotCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPXBsYXRmb3JtOiVzIiwgcGRldi0+bmFtZSk7CisJYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9JXMlcyIsIFBMQVRGT1JNX01PRFVMRV9QUkVGSVgsCisJCShwZGV2LT5pZF9lbnRyeSkgPyBwZGV2LT5pZF9lbnRyeS0+bmFtZSA6IHBkZXYtPm5hbWUpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqcGxhdGZvcm1fbWF0Y2hfaWQoCisJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZCwKKwkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJd2hpbGUgKGlkLT5uYW1lWzBdKSB7CisJCWlmIChzdHJjbXAocGRldi0+bmFtZSwgaWQtPm5hbWUpID09IDApIHsKKwkJCXBkZXYtPmlkX2VudHJ5ID0gaWQ7CisJCQlyZXR1cm4gaWQ7CisJCX0KKwkJaWQrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qKgogICogcGxhdGZvcm1fbWF0Y2ggLSBiaW5kIHBsYXRmb3JtIGRldmljZSB0byBwbGF0Zm9ybSBkcml2ZXIuCiAgKiBAZGV2OiBkZXZpY2UuCkBAIC02MDMsOSArNjM0LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgcGxhdGZvcm1fbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZHJ2KTsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCS8qIG1hdGNoIGFnYWluc3QgdGhlIGlkIHRhYmxlIGZpcnN0ICovCisJaWYgKHBkcnYtPmlkX3RhYmxlKQorCQlyZXR1cm4gcGxhdGZvcm1fbWF0Y2hfaWQocGRydi0+aWRfdGFibGUsIHBkZXYpICE9IE5VTEw7CisKKwkvKiBmYWxsLWJhY2sgdG8gZHJpdmVyIG5hbWUgbWF0Y2ggKi8KIAlyZXR1cm4gKHN0cmNtcChwZGV2LT5uYW1lLCBkcnYtPm5hbWUpID09IDApOwogfQogCkBAIC02MjMsMjYgKzY1OSwyNCBAQAogCiBzdGF0aWMgaW50IHBsYXRmb3JtX2xlZ2FjeV9zdXNwZW5kX2xhdGUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQgPSAwOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+c3VzcGVuZF9sYXRlKQotCQlyZXQgPSBkcnYtPnN1c3BlbmRfbGF0ZShwZGV2LCBtZXNnKTsKKwlpZiAoZGV2LT5kcml2ZXIgJiYgcGRydi0+c3VzcGVuZF9sYXRlKQorCQlyZXQgPSBwZHJ2LT5zdXNwZW5kX2xhdGUocGRldiwgbWVzZyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBsYXRmb3JtX2xlZ2FjeV9yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldCA9IDA7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5yZXN1bWVfZWFybHkpCi0JCXJldCA9IGRydi0+cmVzdW1lX2Vhcmx5KHBkZXYpOworCWlmIChkZXYtPmRyaXZlciAmJiBwZHJ2LT5yZXN1bWVfZWFybHkpCisJCXJldCA9IHBkcnYtPnJlc3VtZV9lYXJseShwZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAyZDE0ZjRhLi5lMjU1MzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTEwNyw2ICsxMDcsNTAgQEAKIH0KIAogLyoqCisgKglkZXZpY2VfcG1fbW92ZV9iZWZvcmUgLSBtb3ZlIGRldmljZSBpbiBkcG1fbGlzdAorICoJQGRldmE6ICBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdAorICoJQGRldmI6ICBEZXZpY2UgQGRldmEgc2hvdWxkIGNvbWUgYmVmb3JlCisgKi8KK3ZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKmRldmEsIHN0cnVjdCBkZXZpY2UgKmRldmIpCit7CisJcHJfZGVidWcoIlBNOiBNb3ZpbmcgJXM6JXMgYmVmb3JlICVzOiVzXG4iLAorCQkgZGV2YS0+YnVzID8gZGV2YS0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmEtPmtvYmopLAorCQkgZGV2Yi0+YnVzID8gZGV2Yi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmItPmtvYmopKTsKKwkvKiBEZWxldGUgZGV2YSBmcm9tIGRwbV9saXN0IGFuZCByZWluc2VydCBiZWZvcmUgZGV2Yi4gKi8KKwlsaXN0X21vdmVfdGFpbCgmZGV2YS0+cG93ZXIuZW50cnksICZkZXZiLT5wb3dlci5lbnRyeSk7Cit9CisKKy8qKgorICoJZGV2aWNlX3BtX21vdmVfYWZ0ZXIgLSBtb3ZlIGRldmljZSBpbiBkcG1fbGlzdAorICoJQGRldmE6ICBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdAorICoJQGRldmI6ICBEZXZpY2UgQGRldmEgc2hvdWxkIGNvbWUgYWZ0ZXIKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICpkZXZhLCBzdHJ1Y3QgZGV2aWNlICpkZXZiKQoreworCXByX2RlYnVnKCJQTTogTW92aW5nICVzOiVzIGFmdGVyICVzOiVzXG4iLAorCQkgZGV2YS0+YnVzID8gZGV2YS0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmEtPmtvYmopLAorCQkgZGV2Yi0+YnVzID8gZGV2Yi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmItPmtvYmopKTsKKwkvKiBEZWxldGUgZGV2YSBmcm9tIGRwbV9saXN0IGFuZCByZWluc2VydCBhZnRlciBkZXZiLiAqLworCWxpc3RfbW92ZSgmZGV2YS0+cG93ZXIuZW50cnksICZkZXZiLT5wb3dlci5lbnRyeSk7Cit9CisKKy8qKgorICogCWRldmljZV9wbV9tb3ZlX2xhc3QgLSBtb3ZlIGRldmljZSB0byBlbmQgb2YgZHBtX2xpc3QKKyAqIAlAZGV2OiAgIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKi8KK3ZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcHJfZGVidWcoIlBNOiBNb3ZpbmcgJXM6JXMgdG8gZW5kIG9mIGxpc3RcbiIsCisJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOworCWxpc3RfbW92ZV90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2xpc3QpOworfQorCisvKioKICAqCXBtX29wIC0gZXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcGlhdGUgZm9yIGdpdmVuIFBNIGV2ZW50CiAgKglAZGV2OglEZXZpY2UuCiAgKglAb3BzOglQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAppbmRleCA0MWY1MWZhLi5jN2NiNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaApAQCAtMTgsMTEgKzE4LDE5IEBACiAKIGV4dGVybiB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKik7CiAKICNlbHNlIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKmRldmEsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXZiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKmRldmEsCisJCQkJCXN0cnVjdCBkZXZpY2UgKmRldmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggYjQyOGM4Yy4uY2JkMzZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIAogc3RhdGljIHNzaXplX3QKLXN5c2Rldl9zaG93KHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKiBidWZmZXIpCitzeXNkZXZfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmZmVyKQogewotCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOwotCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOworCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOwogCiAJaWYgKHN5c2Rldl9hdHRyLT5zaG93KQogCQlyZXR1cm4gc3lzZGV2X2F0dHItPnNob3coc3lzZGV2LCBzeXNkZXZfYXR0ciwgYnVmZmVyKTsKQEAgLTQyLDExICs0MiwxMSBAQAogCiAKIHN0YXRpYyBzc2l6ZV90Ci1zeXNkZXZfc3RvcmUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwKLQkgICAgIGNvbnN0IGNoYXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3N5c2Rldl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOwotCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOworCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOwogCiAJaWYgKHN5c2Rldl9hdHRyLT5zdG9yZSkKIAkJcmV0dXJuIHN5c2Rldl9hdHRyLT5zdG9yZShzeXNkZXYsIHN5c2Rldl9hdHRyLCBidWZmZXIsIGNvdW50KTsKQEAgLTYzLDEzICs2MywxMyBAQAogfTsKIAogCi1pbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICogcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBhKQoraW50IHN5c2Rldl9jcmVhdGVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmEpCiB7CiAJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9maWxlKCZzLT5rb2JqLCAmYS0+YXR0cik7CiB9CiAKIAotdm9pZCBzeXNkZXZfcmVtb3ZlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKiBzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIGEpCit2b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmEpCiB7CiAJc3lzZnNfcmVtb3ZlX2ZpbGUoJnMtPmtvYmosICZhLT5hdHRyKTsKIH0KQEAgLTg0LDcgKzg0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHN5c2Rldl9jbGFzc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJCSBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOwogCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyID0gdG9fc3lzZGV2X2NsYXNzX2F0dHIoYXR0cik7CiAKIAlpZiAoY2xhc3NfYXR0ci0+c2hvdykKQEAgLTk1LDggKzk1LDggQEAKIHN0YXRpYyBzc2l6ZV90IHN5c2Rldl9jbGFzc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqIGNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY2xhc3NfYXR0ciA9IHRvX3N5c2Rldl9jbGFzc19hdHRyKGF0dHIpOwogCiAJaWYgKGNsYXNzX2F0dHItPnN0b3JlKQogCQlyZXR1cm4gY2xhc3NfYXR0ci0+c3RvcmUoY2xhc3MsIGJ1ZmZlciwgY291bnQpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga3NldCAqc3lzdGVtX2tzZXQ7CiAKLWludCBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscykKK2ludCBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQogewogCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXNkZXYgY2xhc3MgJyVzJ1xuIiwgY2xzLT5uYW1lKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJcmV0dXJuIGtzZXRfcmVnaXN0ZXIoJmNscy0+a3NldCk7CiB9CiAKLXZvaWQgc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscykKK3ZvaWQgc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQogewogCXByX2RlYnVnKCJVbnJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLAogCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwpAQCAtMjAzLDggKzIwMyw4IEBACiAgKglAY2xzOglDbGFzcyBkcml2ZXIgYmVsb25ncyB0by4KICAqCUBkcnY6CURyaXZlci4KICAqLwotdm9pZCBzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscywKLQkJCSAgICAgIHN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2KQordm9pZCBzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzLAorCQkJICAgICAgc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydikKIHsKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2RlbF9pbml0KCZkcnYtPmVudHJ5KTsKQEAgLTIyOSwxMCArMjI5LDEwIEBACiAgKglAc3lzZGV2OglkZXZpY2UgaW4gcXVlc3Rpb24KICAqCiAgKi8KLWludCBzeXNkZXZfcmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYpCitpbnQgc3lzZGV2X3JlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCiB7CiAJaW50IGVycm9yOwotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHMgPSBzeXNkZXYtPmNsczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMgPSBzeXNkZXYtPmNsczsKIAogCWlmICghY2xzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkJCSAgICAgc3lzZGV2LT5pZCk7CiAKIAlpZiAoIWVycm9yKSB7Ci0JCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCiAJCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXMgZGV2aWNlICclcydcbiIsCiAJCQkga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKQEAgLTI3NCw5ICsyNzQsOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBzeXNkZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldikKK3ZvaWQgc3lzZGV2X3VucmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqIGRydjsKKwlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCiAJbXV0ZXhfbG9jaygmc3lzZGV2X2RyaXZlcnNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZzeXNkZXYtPmNscy0+ZHJpdmVycywgZW50cnkpIHsKQEAgLTMwNSwxOSArMzA1LDE5IEBACiAgKi8KIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHM7CiAKIAlwcl9kZWJ1ZygiU2h1dHRpbmcgRG93biBTeXN0ZW0gRGV2aWNlc1xuIik7CiAKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldjsKKwkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCQlwcl9kZWJ1ZygiU2h1dHRpbmcgZG93biB0eXBlICclcyc6XG4iLAogCQkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7Ci0JCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqIGRydjsKKwkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAJCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwogCiAJCQkvKiBDYWxsIGF1eGlsbGFyeSBkcml2ZXJzIGZpcnN0ICovCkBAIC0zNjQsNyArMzY0LDcgQEAKICAqLwogaW50IHN5c2Rldl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCAqZXJyX2RldjsKIAlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2LCAqZXJyX2RydjsKIAlpbnQgcmV0OwpAQCAtNDQyLDEyICs0NDIsMTIgQEAKICAqLwogaW50IHN5c2Rldl9yZXN1bWUodm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAogCXByX2RlYnVnKCJSZXN1bWluZyBTeXN0ZW0gRGV2aWNlc1xuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNscywgJnN5c3RlbV9rc2V0LT5saXN0LCBrc2V0LmtvYmouZW50cnkpIHsKLQkJc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXY7CisJCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXY7CiAKIAkJcHJfZGVidWcoIlJlc3VtaW5nIHR5cGUgJyVzJzpcbiIsCiAJCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IDAzNDRhOGEuLmU3YjhhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTQ1LDYgKzQ1LDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKQogCSAgZmxvcHB5IGNvbnRyb2xsZXIsIHNheSBZIGhlcmUuIE1vc3QgY29tbW9ubHkgZm91bmQgaW4gUG93ZXJNYWNzLgogCitjb25maWcgQkxLX0RFVl9TV0lNCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNXSU0gTWFjaW50b3NoIGZsb3BweSIKKwlkZXBlbmRzIG9uIE02OEsgJiYgTUFDCisJaGVscAorCSAgWW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmxvcHB5IHN1cHBvcnQKKwkgIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy4KKwogY29uZmlnIEFNSUdBX1oyUkFNCiAJdHJpc3RhdGUgIkFtaWdhIFpvcnJvIElJIHJhbWRpc2sgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFpPUlJPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQppbmRleCA4N2UxMjBlLi4zMTQ1MTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiAjIAogCiBvYmotJChDT05GSUdfTUFDX0ZMT1BQWSkJKz0gc3dpbTMubworb2JqLSQoQ09ORklHX0JMS19ERVZfU1dJTSkJKz0gc3dpbV9tb2Qubwogb2JqLSQoQ09ORklHX0JMS19ERVZfRkQpCSs9IGZsb3BweS5vCiBvYmotJChDT05GSUdfQU1JR0FfRkxPUFBZKQkrPSBhbWlmbG9wLm8KIG9iai0kKENPTkZJR19QUzNfRElTSykJCSs9IHBzM2Rpc2subwpAQCAtMzMsMyArMzQsNSBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfSEQpCSs9IGhkLm8KIAogb2JqLSQoQ09ORklHX1hFTl9CTEtERVZfRlJPTlRFTkQpCSs9IHhlbi1ibGtmcm9udC5vCisKK3N3aW1fbW9kLW9ianMJOj0gc3dpbS5vIHN3aW1fYXNtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKaW5kZXggYzYwOTliYS4uY2UwZDYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFvZV9wdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYW9lX3B0IF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FPRSksCiAJLmZ1bmMgPSBhb2VuZXRfcmN2LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA0ZjliNmQ3Li41ZDBlMTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0zODk4LDYgKzM4OTgsMTMgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgY2Npc3NfaW5pdCh2b2lkKQogeworCS8qCisJICogVGhlIGhhcmR3YXJlIHJlcXVpcmVzIHRoYXQgY29tbWFuZHMgYXJlIGFsaWduZWQgb24gYSA2NC1iaXQKKwkgKiBib3VuZGFyeS4gR2l2ZW4gdGhhdCB3ZSB1c2UgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSB0byBhbGxvY2F0ZSBhbgorCSAqIGFycmF5IG9mIHRoZW0sIHRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorCSAqLworCUJVSUxEX0JVR19PTihzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSAlIDgpOworCiAJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiXG4iKTsKIAogCS8qIFJlZ2lzdGVyIGZvciBvdXIgUENJIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwppbmRleCA1ZDM5ZGYxLi5jYTI2OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKKysrIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCkBAIC02MTcsNiArNjE3LDcgQEAKIAlpbnQgaTsKIAogCWMtPnBjaV9kZXYgPSBwZGV2OworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgImNwcWFycmF5OiBVbmFibGUgdG8gRW5hYmxlIFBDSSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCA4M2Q4ZWQzLi5jMmM5NWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTQxMzUsMTAgKzQxMzUsOSBAQAogc3RhdGljIHNzaXplX3QgZmxvcHB5X2Ntb3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnAgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgZHJpdmU7CiAKLQlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSxkZXYpOwogCWRyaXZlID0gcC0+aWQ7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJVhcbiIsIFVEUC0+Y21vcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IGJmMDM0NTUuLjI2MjFlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC00NzQsMTAgKzQ3NCwzNSBAQAogCWludCByZXQ7CiAKIAlwb3MgPSAoKGxvZmZfdCkgYmlvLT5iaV9zZWN0b3IgPDwgOSkgKyBsby0+bG9fb2Zmc2V0OwotCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkKKworCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkgeworCQlpbnQgYmFycmllciA9IGJpb19iYXJyaWVyKGJpbyk7CisJCXN0cnVjdCBmaWxlICpmaWxlID0gbG8tPmxvX2JhY2tpbmdfZmlsZTsKKworCQlpZiAoYmFycmllcikgeworCQkJaWYgKHVubGlrZWx5KCFmaWxlLT5mX29wLT5mc3luYykpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcmV0ID0gdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCQkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKIAkJcmV0ID0gbG9fc2VuZChsbywgYmlvLCBwb3MpOwotCWVsc2UKKworCQlpZiAoYmFycmllciAmJiAhcmV0KSB7CisJCQlyZXQgPSB2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CisJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQlyZXQgPSAtRUlPOworCQl9CisJfSBlbHNlCiAJCXJldCA9IGxvX3JlY2VpdmUobG8sIGJpbywgbG8tPmxvX2Jsb2Nrc2l6ZSwgcG9zKTsKKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgyNiw2ICs4NTEsOSBAQAogCWxvLT5sb19xdWV1ZS0+cXVldWVkYXRhID0gbG87CiAJbG8tPmxvX3F1ZXVlLT51bnBsdWdfZm4gPSBsb29wX3VucGx1ZzsKIAorCWlmICghKGxvX2ZsYWdzICYgTE9fRkxBR1NfUkVBRF9PTkxZKSAmJiBmaWxlLT5mX29wLT5mc3luYykKKwkJYmxrX3F1ZXVlX29yZGVyZWQobG8tPmxvX3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKKwogCXNldF9jYXBhY2l0eShsby0+bG9fZGlzaywgc2l6ZSk7CiAJYmRfc2V0X3NpemUoYmRldiwgc2l6ZSA8PCA5KTsKIApAQCAtOTQxLDExICs5NjksMTggQEAKIAkJYmRfc2V0X3NpemUoYmRldiwgMCk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC0+Zl9tYXBwaW5nLCBnZnApOwogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7Ci0JZnB1dChmaWxwKTsKIAkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCWlmIChtYXhfcGFydCA+IDApCiAJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKKwltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCS8qCisJICogTmVlZCBub3QgaG9sZCBsb19jdGxfbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuCisJICogQ2FsbGluZyBmcHV0IGhvbGRpbmcgbG9fY3RsX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIKKwkgKiBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhcyBmcHV0IGNhbiB0YWtlCisJICogYmRfbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fY3RsX211dGV4LgorCSAqLworCWZwdXQoZmlscCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjMsNyArMTE5OCw3IEBACiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmxvLT5sb19jdGxfbXV0ZXgsIDEpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBMT09QX1NFVF9GRDoKIAkJZXJyID0gbG9vcF9zZXRfZmQobG8sIG1vZGUsIGJkZXYsIGFyZyk7CkBAIC0xMTcyLDcgKzEyMDcsMTAgQEAKIAkJZXJyID0gbG9vcF9jaGFuZ2VfZmQobG8sIGJkZXYsIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgTE9PUF9DTFJfRkQ6CisJCS8qIGxvb3BfY2xyX2ZkIHdvdWxkIGhhdmUgdW5sb2NrZWQgbG9fY3RsX211dGV4IG9uIHN1Y2Nlc3MgKi8KIAkJZXJyID0gbG9vcF9jbHJfZmQobG8sIGJkZXYpOworCQlpZiAoIWVycikKKwkJCWdvdG8gb3V0X3VubG9ja2VkOwogCQlicmVhazsKIAljYXNlIExPT1BfU0VUX1NUQVRVUzoKIAkJZXJyID0gbG9vcF9zZXRfc3RhdHVzX29sZChsbywgKHN0cnVjdCBsb29wX2luZm8gX191c2VyICopIGFyZyk7CkBAIC0xMTkwLDYgKzEyMjgsOCBAQAogCQllcnIgPSBsby0+aW9jdGwgPyBsby0+aW9jdGwobG8sIGNtZCwgYXJnKSA6IC1FSU5WQUw7CiAJfQogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisKK291dF91bmxvY2tlZDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmNjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyAqIERyaXZlciBmb3IgU1dJTSAoU2FuZGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUpIGZsb3BweSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTYKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTEwLTMwIChsdikgLSBQb3J0IHRvIDIuNgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorCisjZGVmaW5lIENBUkROQU1FICJzd2ltIgorCitzdHJ1Y3Qgc2VjdG9yX2hlYWRlciB7CisJdW5zaWduZWQgY2hhciBzaWRlOworCXVuc2lnbmVkIGNoYXIgdHJhY2s7CisJdW5zaWduZWQgY2hhciBzZWN0b3I7CisJdW5zaWduZWQgY2hhciBzaXplOworCXVuc2lnbmVkIGNoYXIgY3JjMDsKKwl1bnNpZ25lZCBjaGFyIGNyYzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJWZXJzaW9uIDAuMiAoMjAwOC0xMC0zMCkiCisKKyNkZWZpbmUgUkVHKHgpCXVuc2lnbmVkIGNoYXIgeCwgeCAjIyBfcGFkWzB4MjAwIC0gMV07CisKK3N0cnVjdCBzd2ltIHsKKwlSRUcod3JpdGVfZGF0YSkKKwlSRUcod3JpdGVfbWFyaykKKwlSRUcod3JpdGVfQ1JDKQorCVJFRyh3cml0ZV9wYXJhbWV0ZXIpCisJUkVHKHdyaXRlX3BoYXNlKQorCVJFRyh3cml0ZV9zZXR1cCkKKwlSRUcod3JpdGVfbW9kZTApCisJUkVHKHdyaXRlX21vZGUxKQorCisJUkVHKHJlYWRfZGF0YSkKKwlSRUcocmVhZF9tYXJrKQorCVJFRyhyZWFkX2Vycm9yKQorCVJFRyhyZWFkX3BhcmFtZXRlcikKKwlSRUcocmVhZF9waGFzZSkKKwlSRUcocmVhZF9zZXR1cCkKKwlSRUcocmVhZF9zdGF0dXMpCisJUkVHKHJlYWRfaGFuZHNoYWtlKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCYoYmFzZSktPndyaXRlXyMjcmVnLCAodikpCisjZGVmaW5lIHN3aW1fcmVhZChiYXNlLCByZWcpCQlpbl84KCYoYmFzZSktPnJlYWRfIyNyZWcpCisKKy8qIElXTSByZWdpc3RlcnMgKi8KKworc3RydWN0IGl3bSB7CisJUkVHKHBoMEwpCisJUkVHKHBoMEgpCisJUkVHKHBoMUwpCisJUkVHKHBoMUgpCisJUkVHKHBoMkwpCisJUkVHKHBoMkgpCisJUkVHKHBoM0wpCisJUkVHKHBoM0gpCisJUkVHKG10ck9mZikKKwlSRUcobXRyT24pCisJUkVHKGludERyaXZlKQorCVJFRyhleHREcml2ZSkKKwlSRUcocTZMKQorCVJFRyhxNkgpCisJUkVHKHE3TCkKKwlSRUcocTdIKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBpd21fd3JpdGUoYmFzZSwgcmVnLCB2KSAJb3V0XzgoJihiYXNlKS0+cmVnLCAodikpCisjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJihiYXNlKS0+cmVnKQorCisvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgU0VFS19QT1NJVElWRQkweDA3MAorI2RlZmluZSBTRUVLX05FR0FUSVZFCTB4MDc0CisjZGVmaW5lIFNURVAJCTB4MDcxCisjZGVmaW5lIE1PVE9SX09OCTB4MDcyCisjZGVmaW5lIE1PVE9SX09GRgkweDA3NgorI2RlZmluZSBJTkRFWAkJMHgwNzMKKyNkZWZpbmUgRUpFQ1QJCTB4MDc3CisjZGVmaW5lIFNFVE1GTQkJMHgxNzEKKyNkZWZpbmUgU0VUR0NSCQkweDE3NQorCisjZGVmaW5lIFJFTEFYCQkweDAzMworI2RlZmluZSBMU1RSQgkJMHgwMDgKKworI2RlZmluZSBDQV9NQVNLCQkweDA3NworCisvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovCisKKyNkZWZpbmUgUkVBRF9EQVRBXzAJMHgwNzQKKyNkZWZpbmUgVFdPTUVHX0RSSVZFCTB4MDc1CisjZGVmaW5lIFNJTkdMRV9TSURFRAkweDA3NgorI2RlZmluZSBEUklWRV9QUkVTRU5UCTB4MDc3CisjZGVmaW5lIERJU0tfSU4JCTB4MTcwCisjZGVmaW5lIFdSSVRFX1BST1QJMHgxNzEKKyNkZWZpbmUgVFJBQ0tfWkVSTwkweDE3MgorI2RlZmluZSBUQUNITwkJMHgxNzMKKyNkZWZpbmUgUkVBRF9EQVRBXzEJMHgxNzQKKyNkZWZpbmUgTUZNX01PREUJMHgxNzUKKyNkZWZpbmUgU0VFS19DT01QTEVURQkweDE3NgorI2RlZmluZSBPTkVNRUdfTUVESUEJMHgxNzcKKworLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQVJLX0JZVEUJMHgwMQorI2RlZmluZSBDUkNfWkVSTwkweDAyCisjZGVmaW5lIFJEREFUQQkJMHgwNAorI2RlZmluZSBTRU5TRQkJMHgwOAorI2RlZmluZSBNT1RFTgkJMHgxMAorI2RlZmluZSBFUlJPUgkJMHgyMAorI2RlZmluZSBEQVQyQllURQkweDQwCisjZGVmaW5lIERBVDFCWVRFCTB4ODAKKworLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqLworCisjZGVmaW5lIFNfSU5WX1dEQVRBCTB4MDEKKyNkZWZpbmUgU18zXzVfU0VMRUNUCTB4MDIKKyNkZWZpbmUgU19HQ1IJCTB4MDQKKyNkZWZpbmUgU19GQ0xLX0RJVjIJMHgwOAorI2RlZmluZSBTX0VSUk9SX0NPUlIJMHgxMAorI2RlZmluZSBTX0lCTV9EUklWRQkweDIwCisjZGVmaW5lIFNfR0NSX1dSSVRFCTB4NDAKKyNkZWZpbmUgU19USU1FT1VUCTB4ODAKKworLyogYml0cyBpbiBtb2RlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0xGSUZPCQkweDAxCisjZGVmaW5lIEVOQkwxCQkweDAyCisjZGVmaW5lIEVOQkwyCQkweDA0CisjZGVmaW5lIEFDVElPTgkJMHgwOAorI2RlZmluZSBXUklURV9NT0RFCTB4MTAKKyNkZWZpbmUgSEVEU0VMCQkweDIwCisjZGVmaW5lIE1PVE9OCQkweDgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2VudW0gZHJpdmVfbG9jYXRpb24geworCUlOVEVSTkFMX0RSSVZFID0gMHgwMiwKKwlFWFRFUk5BTF9EUklWRSA9IDB4MDQsCit9OworCitlbnVtIG1lZGlhX3R5cGUgeworCUREX01FRElBLAorCUhEX01FRElBLAorfTsKKworc3RydWN0IGZsb3BweV9zdGF0ZSB7CisKKwkvKiBwaHlzaWNhbCBwcm9wZXJ0aWVzICovCisKKwllbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uOwkvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqLworCWludAkJIGhlYWRfbnVtYmVyOwkvKiBzaW5nbGUtIG9yIGRvdWJsZS1zaWRlZCBkcml2ZSAqLworCisJLyogbWVkaWEgKi8KKworCWludAkJIGRpc2tfaW47CisJaW50CQkgZWplY3RlZDsKKwllbnVtIG1lZGlhX3R5cGUJIHR5cGU7CisJaW50CQkgd3JpdGVfcHJvdGVjdGVkOworCisJaW50CQkgdG90YWxfc2VjczsKKwlpbnQJCSBzZWNwZXJjeWw7CisJaW50CQkgc2VjcGVydHJhY2s7CisKKwkvKiBpbi11c2UgaW5mb3JtYXRpb24gKi8KKworCWludAkJdHJhY2s7CisJaW50CQlyZWZfY291bnQ7CisKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKworCS8qIHBhcmVudCBjb250cm9sbGVyICovCisKKwlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2Q7Cit9OworCitlbnVtIG1vdG9yX2FjdGlvbiB7CisJT0ZGLAorCU9OLAorfTsKKworZW51bSBoZWFkIHsKKwlMT1dFUl9IRUFEID0gMCwKKwlVUFBFUl9IRUFEID0gMSwKK307CisKKyNkZWZpbmUgRkRfTUFYX1VOSVQJMgorCitzdHJ1Y3Qgc3dpbV9wcml2IHsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CisJaW50IGZsb3BweV9jb3VudDsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdOworfTsKKworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJCSAgIHN0cnVjdCBzZWN0b3JfaGVhZGVyICpoZWFkZXIpOworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpCit7CisJc3RydWN0IGl3bSBfX2lvbWVtICppd21fYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFlbmFibGUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMHhmOCk7CisJCXJldHVybjsKKwl9CisKKwlpd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBtdHJPZmYpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpOworCisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDE3KTsKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHg1Nyk7CisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjUpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjUpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjYpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjYpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjcpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjcpCisJCWdvdG8gaXNfaXdtOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMTsKK2lzX2l3bToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKQoreworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTsKKworCXZpYTFfc2V0X2hlYWQoc2VsICYgMHgxMDApOworCisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsICYgQ0FfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBhY3Rpb24pOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgTFNUUkIpOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgKCh+TFNUUkIpICYgMHgwRikpOworCXVkZWxheSgxKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpCit7CisJaW50IHN0YXQ7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBiaXQpOworCisJdWRlbGF5KDEwKTsKKworCXN0YXQgPSBzd2ltX3JlYWQoYmFzZSwgaGFuZHNoYWtlKTsKKworCXJldHVybiAoc3RhdCAmIFNFTlNFKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKK3sKKwlpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqLworCX0gZWxzZSBpZiAobG9jYXRpb24gPT0gRVhURVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAwIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBFWFRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAxIGJpdCAqLworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCSAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbikKK3sKKwlpZiAoYWN0aW9uID09IE9OKSB7CisJCWludCBpOworCisJCXN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMipIWjsgaSsrKSB7CisJCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIE1PVE9SX09OKSkKKwkJCQlicmVhazsKKwkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJfQorCX0gZWxzZSBpZiAoYWN0aW9uID09IE9GRikgeworCQlzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PRkYpOworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCWludCBpOworCisJc3dpbV9hY3Rpb24oYmFzZSwgRUpFQ1QpOworCisJZm9yIChpID0gMDsgaSA8IDIqSFo7IGkrKykgeworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKQorCQkJYnJlYWs7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0KKwlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2hlYWQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgZW51bSBoZWFkIGhlYWQpCit7CisJLyogd2FpdCBkcml2ZSBpcyByZWFkeSAqLworCisJaWYgKGhlYWQgPT0gVVBQRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzEpOworCWVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgd2FpdDsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNURVApOworCisJZm9yICh3YWl0ID0gMDsgd2FpdCA8IEhaOyB3YWl0KyspIHsKKworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIFNURVApKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV90cmFjazAwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJaW50IHRyeTsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCisJZm9yICh0cnkgPSAwOyB0cnkgPCAxMDA7IHRyeSsrKSB7CisKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQkJYnJlYWs7CisKKwkJaWYgKHN3aW1fc3RlcChiYXNlKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKQoreworCWlmIChzdGVwID09IDApCisJCXJldHVybiAwOworCisJaWYgKHN0ZXAgPCAwKSB7CisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCQlzdGVwID0gLXN0ZXA7CisJfSBlbHNlCisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfUE9TSVRJVkUpOworCisJZm9yICggOyBzdGVwID4gMDsgc3RlcC0tKSB7CisJCWlmIChzd2ltX3N0ZXAoYmFzZSkpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJaW50IHJldDsKKworCXJldCA9IHN3aW1fc2VlayhiYXNlLCB0cmFjayAtIGZzLT50cmFjayk7CisKKwlpZiAocmV0ID09IDApCisJCWZzLT50cmFjayA9IHRyYWNrOworCWVsc2UgeworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisJCWZzLT50cmFjayA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlzd2ltX2RyaXZlKGJhc2UsIGZzLT5sb2NhdGlvbik7CisJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCXN3aW1fZWplY3QoYmFzZSk7CisKKwlmcy0+ZGlza19pbiA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZF9zZWN0b3Ioc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsCisJCQkJICAgaW50IHNpZGUsIGludCB0cmFjaywKKwkJCQkgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2VjdG9yX2hlYWRlciBoZWFkZXI7CisJaW50IHJldCA9IC0xOworCXNob3J0IGk7CisKKwlzd2ltX3RyYWNrKGZzLCB0cmFjayk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7CisJc3dpbV9oZWFkKGJhc2UsIHNpZGUpOworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIHNpZGUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCAzNjsgaSsrKSB7CisJCXJldCA9IHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsICZoZWFkZXIpOworCQlpZiAoIXJldCAmJiAoaGVhZGVyLnNlY3RvciA9PSBzZWN0b3IpKSB7CisJCQkvKiBmb3VuZCAqLworCisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoYmFzZSwgYnVmZmVyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTsKKworCWlmICgoaGVhZGVyLnNpZGUgIT0gc2lkZSkgIHx8IChoZWFkZXIudHJhY2sgIT0gdHJhY2spIHx8CisJICAgICAoaGVhZGVyLnNlY3RvciAhPSBzZWN0b3IpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JlYWRfc2VjdG9ycyhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywKKwkJCSAgICAgICBpbnQgcmVxX3NlY3RvciwgaW50IHNlY3RvcnNfbmIsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCWludCByZXQ7CisJaW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7CisJaW50IGksIHRyeTsKKworCisJc3dpbV9kcml2ZShiYXNlLCBmcy0+bG9jYXRpb24pOworCWZvciAoaSA9IHJlcV9zZWN0b3I7IGkgPCByZXFfc2VjdG9yICsgc2VjdG9yc19uYjsgaSsrKSB7CisJCWludCB4OworCQl0cmFjayA9IGkgLyBmcy0+c2VjcGVyY3lsOworCQl4ID0gaSAlIGZzLT5zZWNwZXJjeWw7CisJCXNpZGUgPSB4IC8gZnMtPnNlY3BlcnRyYWNrOworCQlzZWN0b3IgPSB4ICUgZnMtPnNlY3BlcnRyYWNrICsgMTsKKworCQl0cnkgPSA1OworCQlkbyB7CisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yKGZzLCBzaWRlLCB0cmFjaywgc2VjdG9yLAorCQkJCQkJYnVmZmVyKTsKKwkJCWlmICh0cnktLSA9PSAwKQorCQkJCXJldHVybiAtMTsKKwkJfSB3aGlsZSAocmV0ICE9IDUxMik7CisKKwkJYnVmZmVyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnM7CisKKwl3aGlsZSAoKHJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSkpKSB7CisKKwkJZnMgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKKwkJaWYgKHJlcS0+c2VjdG9yIDwgMCB8fCByZXEtPnNlY3RvciA+PSBmcy0+dG90YWxfc2VjcykgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9PSAwKSB7CisJCQllbmRfcmVxdWVzdChyZXEsIDEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmcy0+ZGlza19pbikgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CisJCQlpZiAoZnMtPndyaXRlX3Byb3RlY3RlZCkgeworCQkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7CisJCWNhc2UgV1JJVEU6CisJCQkvKiBOT1QgSU1QTEVNRU5URUQgKi8KKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEOgorCQkJaWYgKGZsb3BweV9yZWFkX3NlY3RvcnMoZnMsIHJlcS0+c2VjdG9yLAorCQkJCQkJcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsCisJCQkJCQlyZXEtPmJ1ZmZlcikpIHsKKwkJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmVxLT5ucl9zZWN0b3JzIC09IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOworCQkJcmVxLT5zZWN0b3IgKz0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJCQlyZXEtPmJ1ZmZlciArPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyAqIDUxMjsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlyZWRvX2ZkX3JlcXVlc3QocSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmbG9wcHlfdHlwZVs0XSA9IHsKKwl7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICAgKi8KKwl7ICA3MjAsICA5LCAxLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiAzNjBLQiBTUyAzLjUiKi8KKwl7IDE0NDAsICA5LCAyLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiA3MjBLQiAzLjUiICAgKi8KKwl7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41IiAgKi8KK307CisKK3N0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsCisJCQkgICAgICAgc3RydWN0IGZsb3BweV9zdHJ1Y3QgKipnKQoreworCWlmICh0eXBlID49IEFSUkFZX1NJWkUoZmxvcHB5X3R5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0eXBlKQorCQkqZyA9ICZmbG9wcHlfdHlwZVt0eXBlXTsKKwllbHNlIGlmIChmcy0+dHlwZSA9PSBIRF9NRURJQSkgLyogSGlnaC1EZW5zaXR5IG1lZGlhICovCisJCSpnID0gJmZsb3BweV90eXBlWzNdOworCWVsc2UgaWYgKGZzLT5oZWFkX251bWJlciA9PSAyKSAvKiBkb3VibGUtc2lkZWQgKi8KKwkJKmcgPSAmZmxvcHB5X3R5cGVbMl07CisJZWxzZQorCQkqZyA9ICZmbG9wcHlfdHlwZVsxXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9tZWRpdW0oc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKSB7CisJCXN0cnVjdCBmbG9wcHlfc3RydWN0ICpnOworCQlmcy0+ZGlza19pbiA9IDE7CisJCWZzLT53cml0ZV9wcm90ZWN0ZWQgPSBzd2ltX3JlYWRiaXQoYmFzZSwgV1JJVEVfUFJPVCk7CisJCWZzLT50eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19NRURJQSk7CisKKwkJaWYgKHN3aW1fdHJhY2swMChiYXNlKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJTV0lNOiBjYW5ub3QgbW92ZSBmbG9wcHkgaGVhZCB0byB0cmFjayAwXG4iKTsKKworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisKKwkJZ2V0X2Zsb3BweV9nZW9tZXRyeShmcywgMCwgJmcpOworCQlmcy0+dG90YWxfc2VjcyA9IGctPnNpemU7CisJCWZzLT5zZWNwZXJjeWwgPSBnLT5oZWFkICogZy0+c2VjdDsKKwkJZnMtPnNlY3BlcnRyYWNrID0gZy0+c2VjdDsKKwkJZnMtPnRyYWNrID0gMDsKKwl9IGVsc2UgeworCQlmcy0+ZGlza19pbiA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwlpbnQgZXJyOworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gLTEgfHwgKGZzLT5yZWZfY291bnQgJiYgbW9kZSAmIEZNT0RFX0VYQ0wpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKG1vZGUgJiBGTU9ERV9FWENMKQorCQlmcy0+cmVmX2NvdW50ID0gLTE7CisJZWxzZQorCQlmcy0+cmVmX2NvdW50Kys7CisKKwlzd2ltX3dyaXRlKGJhc2UsIHNldHVwLCBTX0lCTV9EUklWRSAgfCBTX0ZDTEtfRElWMik7CisJdWRlbGF5KDEwKTsKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlzd2ltX21vdG9yKGJhc2UsIE9OKTsKKwlzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pOworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKwlpZiAoIWZzLT5kaXNrX2luKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1vZGUgJiBGTU9ERV9OREVMQVkpCisJCXJldHVybiAwOworCisJaWYgKG1vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpIHsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CisJCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBmcy0+d3JpdGVfcHJvdGVjdGVkKSB7CisJCQllcnIgPSAtRVJPRlM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK291dDoKKwlpZiAoZnMtPnJlZl9jb3VudCA8IDApCisJCWZzLT5yZWZfY291bnQgPSAwOworCWVsc2UgaWYgKGZzLT5yZWZfY291bnQgPiAwKQorCQktLWZzLT5yZWZfY291bnQ7CisKKwlpZiAoZnMtPnJlZl9jb3VudCA9PSAwKQorCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJaWYgKGZzLT5yZWZfY291bnQgPCAwKQorCQlmcy0+cmVmX2NvdW50ID0gMDsKKwllbHNlIGlmIChmcy0+cmVmX2NvdW50ID4gMCkKKwkJLS1mcy0+cmVmX2NvdW50OworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gMCkKKwkJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCWlmICgoY21kICYgMHg4MCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZERUpFQ1Q6CisJCWlmIChmcy0+cmVmX2NvdW50ICE9IDEpCisJCQlyZXR1cm4gLUVCVVNZOworCQllcnIgPSBmbG9wcHlfZWplY3QoZnMpOworCQlyZXR1cm4gZXJyOworCisJY2FzZSBGREdFVFBSTToKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgcGFyYW0sICh2b2lkICopICZmbG9wcHlfdHlwZSwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBmbG9wcHlfc3RydWN0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiU1dJTSBmbG9wcHlfaW9jdGw6IHVua25vd24gY21kICVkXG4iLAorCQkgICAgICAgY21kKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7CisJaW50IHJldDsKKworCXJldCA9IGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsICZnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ2VvLT5oZWFkcyA9IGctPmhlYWQ7CisJZ2VvLT5zZWN0b3JzID0gZy0+c2VjdDsKKwlnZW8tPmN5bGluZGVycyA9IGctPnRyYWNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBmcy0+ZWplY3RlZDsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmV2YWxpZGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCXN3aW1fZHJpdmUoYmFzZSwgZnMtPmxvY2F0aW9uKTsKKworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKworCWlmICghZnMtPmRpc2tfaW4pCisJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwllbHNlCisJCWZzLT5lamVjdGVkID0gMDsKKworCXJldHVybiAhZnMtPmRpc2tfaW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CisJLm93bmVyCQkgPSBUSElTX01PRFVMRSwKKwkub3BlbgkJID0gZmxvcHB5X29wZW4sCisJLnJlbGVhc2UJID0gZmxvcHB5X3JlbGVhc2UsCisJLmxvY2tlZF9pb2N0bAkgPSBmbG9wcHlfaW9jdGwsCisJLmdldGdlbwkJID0gZmxvcHB5X2dldGdlbywKKwkubWVkaWFfY2hhbmdlZAkgPSBmbG9wcHlfY2hlY2tfY2hhbmdlLAorCS5yZXZhbGlkYXRlX2Rpc2sgPSBmbG9wcHlfcmV2YWxpZGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZmxvcHB5X2ZpbmQoZGV2X3QgZGV2LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gZGF0YTsKKwlpbnQgZHJpdmUgPSAoKnBhcnQgJiAzKTsKKworCWlmIChkcml2ZSA+IHN3ZC0+ZmxvcHB5X2NvdW50KQorCQlyZXR1cm4gTlVMTDsKKworCSpwYXJ0ID0gMDsKKwlyZXR1cm4gZ2V0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwKKwkJCQkgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSAmc3dkLT51bml0W3N3ZC0+ZmxvcHB5X2NvdW50XTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJZnMtPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTsKKworCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSkKKwkJZnMtPmhlYWRfbnVtYmVyID0gMTsKKwllbHNlCisJCWZzLT5oZWFkX251bWJlciA9IDI7CisJZnMtPnJlZl9jb3VudCA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJc3dkLT5mbG9wcHlfY291bnQrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX2Zsb3BweV9pbml0KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCkKK3sKKwlpbnQgZXJyOworCWludCBkcml2ZTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJLyogc2NhbiBmbG9wcHkgZHJpdmVzICovCisKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERSSVZFX1BSRVNFTlQpKQorCQlzd2ltX2FkZF9mbG9wcHkoc3dkLCBJTlRFUk5BTF9EUklWRSk7CisJc3dpbV9kcml2ZShiYXNlLCBFWFRFUk5BTF9EUklWRSk7CisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSkKKwkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpOworCisJLyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqLworCisJZXJyID0gcmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIFNXSU0gZmxvcHB5XG4iLAorCQkgICAgICAgRkxPUFBZX01BSk9SKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2sgPSBhbGxvY19kaXNrKDEpOworCQlpZiAoc3dkLT51bml0W2RyaXZlXS5kaXNrID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcHV0X2Rpc2tzOworCQl9CisJCXN3ZC0+dW5pdFtkcml2ZV0uc3dkID0gc3dkOworCX0KKworCXN3ZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LCAmc3dkLT5sb2NrKTsKKwlpZiAoIXN3ZC0+cXVldWUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3B1dF9kaXNrczsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPm1ham9yID0gRkxPUFBZX01BSk9SOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CisJCXNwcmludGYoc3dkLT51bml0W2RyaXZlXS5kaXNrLT5kaXNrX25hbWUsICJmZCVkIiwgZHJpdmUpOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnN3ZC0+dW5pdFtkcml2ZV07CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cXVldWUgPSBzd2QtPnF1ZXVlOworCQlzZXRfY2FwYWNpdHkoc3dkLT51bml0W2RyaXZlXS5kaXNrLCAyODgwKTsKKwkJYWRkX2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwl9CisKKwlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1NiwgVEhJU19NT0RVTEUsCisJCQkgICAgZmxvcHB5X2ZpbmQsIE5VTEwsIHN3ZCk7CisKKwlyZXR1cm4gMDsKKworZXhpdF9wdXRfZGlza3M6CisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKwl3aGlsZSAoZHJpdmUtLSkKKwkJcHV0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpzd2ltX2Jhc2U7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIENBUkROQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXN3aW1fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXN3aW1fYmFzZSkgeworCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfcmVsZWFzZV9pbzsKKwl9CisKKwkvKiBwcm9iZSBkZXZpY2UgKi8KKworCXNldF9zd2ltX21vZGUoc3dpbV9iYXNlLCAxKTsKKwlpZiAoIWdldF9zd2ltX21vZGUoc3dpbV9iYXNlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJTV0lNIGRldmljZSBub3QgZm91bmQgIVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJLyogc2V0IHBsYXRmb3JtIGRyaXZlciBkYXRhICovCisKKwlzd2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3dpbV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzd2QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzd2QpOworCisJc3dkLT5iYXNlID0gc3dpbV9iYXNlOworCisJcmV0ID0gc3dpbV9mbG9wcHlfaW5pdChzd2QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2tmcmVlOworCisJcmV0dXJuIDA7CisKK291dF9rZnJlZToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CitvdXRfaW91bm1hcDoKKwlpb3VubWFwKHN3aW1fYmFzZSk7CitvdXRfcmVsZWFzZV9pbzoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZHJpdmU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoRkxPUFBZX01BSk9SLCAwKSwgMjU2KTsKKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7CisJCWRlbF9nZW5kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJCXB1dF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJfQorCisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKworCWJsa19jbGVhbnVwX3F1ZXVlKHN3ZC0+cXVldWUpOworCisJLyogZWplY3QgZmxvcHBpZXMgKi8KKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKQorCQlmbG9wcHlfZWplY3QoJnN3ZC0+dW5pdFtkcml2ZV0pOworCisJaW91bm1hcChzd2QtPmJhc2UpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7CisJLnByb2JlICA9IHN3aW1fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHN3aW1fcmVtb3ZlKSwKKwkuZHJpdmVyICAgPSB7CisJCS5uYW1lCT0gQ0FSRE5BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzd2ltX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJTV0lNIGZsb3BweSBkcml2ZXIgJXNcbiIsIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN3aW1fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHN3aW1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzd2ltX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3dpbV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc3dpbV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkxhdXJlbnQgVml2aWVyIDxsYXVyZW50QGx2aXZpZXIuaW5mbz4iKTsKK01PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihGTE9QUFlfTUFKT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjY4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBsb3ctbGV2ZWwgZnVuY3Rpb25zIGZvciB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlcgorICoKKyAqIG5lZWRzIGFzc2VtYmx5IGxhbmd1YWdlIGJlY2F1c2UgaXMgdmVyeSB0aW1pbmcgZGVwZW5kZW50CisgKiB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzIG9ubHkgb24gbWFjaW50b3NoIDY4MHgwIGJhc2VkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTExLTA1IChsdikgLSBhZGQgZ2V0X3N3aW1fbW9kZQorICovCisKKwkuZXF1CXdyaXRlX2RhdGEsCTB4MDAwMAorCS5lcXUJd3JpdGVfbWFyaywJMHgwMjAwCisJLmVxdQl3cml0ZV9DUkMsCTB4MDQwMAorCS5lcXUJd3JpdGVfcGFyYW1ldGVyLDB4MDYwMAorCS5lcXUJd3JpdGVfcGhhc2UsCTB4MDgwMAorCS5lcXUJd3JpdGVfc2V0dXAsCTB4MGEwMAorCS5lcXUJd3JpdGVfbW9kZTAsCTB4MGMwMAorCS5lcXUJd3JpdGVfbW9kZTEsCTB4MGUwMAorCS5lcXUJcmVhZF9kYXRhLAkweDEwMDAKKwkuZXF1CXJlYWRfbWFyaywJMHgxMjAwCisJLmVxdQlyZWFkX2Vycm9yLAkweDE0MDAKKwkuZXF1CXJlYWRfcGFyYW1ldGVyLAkweDE2MDAKKwkuZXF1CXJlYWRfcGhhc2UsCTB4MTgwMAorCS5lcXUJcmVhZF9zZXR1cCwJMHgxYTAwCisJLmVxdQlyZWFkX3N0YXR1cywJMHgxYzAwCisJLmVxdQlyZWFkX2hhbmRzaGFrZSwJMHgxZTAwCisKKwkuZXF1CW9fc2lkZSwgMAorCS5lcXUJb190cmFjaywgMQorCS5lcXUJb19zZWN0b3IsIDIKKwkuZXF1CW9fc2l6ZSwgMworCS5lcXUJb19jcmMwLCA0CisJLmVxdQlvX2NyYzEsIDUKKworCS5lcXUJc2Vla190aW1lLCAzMDAwMAorCS5lcXUJbWF4X3JldHJ5LCA0MAorCS5lcXUJc2VjdG9yX3NpemUsIDUxMgorCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcgorc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXI6CisJbGluawklYTYsICMwCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhNCwlc3BALQorCW1vdmVsCSVhNkAoMHgwYyksICVhNAorCWJzcgltZm1fcmVhZF9hZGRybWFyaworCW1vdmVtbAklc3BAKywgJWQxLSVkNS8lYTAtJWE0CisJdW5sawklYTYKKwlydHMKKworc2VjdG9yX2FkZHJlc3NfbWFyazoKKwkuYnl0ZQkweGExLCAweGExLCAweGExLCAweGZlCitzZWN0b3JfZGF0YV9tYXJrOgorCS5ieXRlCTB4YTEsIDB4YTEsIDB4YTEsIDB4ZmIKKworbWZtX3JlYWRfYWRkcm1hcms6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3ZlcQkjLTEsICVkMAorCW1vdmV3CSNzZWVrX3RpbWUsICVkMgorCit3YWl0X2hlYWRlcl9pbml0OgorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCisJbGVhCXNlY3Rvcl9hZGRyZXNzX21hcmssICVhMAorCW1vdmVxCSMzLCAlZDEKKword2FpdF9hZGRyX21hcmtfYnl0ZToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCB3YWl0X2FkZHJfbWFya19ieXRlCisJYnBsCWhlYWRlcl9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZQorCWJuZQl3YWl0X2hlYWRlcl9pbml0CisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmswOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmswCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3RyYWNrKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMToJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zaWRlKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMjoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMgorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zZWN0b3IpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmszOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmszCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3NpemUpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworY3JjMDoJdHN0YgklYTJACisJZGJtaQklZDIsIGNyYzAKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fY3JjMCkKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCitjcmMxOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgY3JjMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19jcmMxKQorCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisKK2hlYWRlcl9leGl0OgorCW1vdmVxCSMwLCAlZDAKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwlydHMKK3NpZ25hbF9ub255YjoKKwltb3ZlcQkjLTEsICVkMAorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXJ0cworCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEKK3N3aW1fcmVhZF9zZWN0b3JfZGF0YToKKwlsaW5rCSVhNiwgIzAKKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWE1LCVzcEAtCisJbW92ZWwJJWE2QCgweDBjKSwgJWE0CisJYnNyCW1mbV9yZWFkX2RhdGEKKwltb3ZlbWwJJXNwQCssICVkMS0lZDUvJWEwLSVhNQorCXVubGsJJWE2CisJcnRzCisKK21mbV9yZWFkX2RhdGE6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX2RhdGEpLCAlYTUKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3Zldwkjc2Vla190aW1lLCAlZDIKKword2FpdF9kYXRhX2luaXQ6CisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisKKwlsZWEJc2VjdG9yX2RhdGFfbWFyaywgJWEwCisJbW92ZXEJIzMsICVkMQorCisJLyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqLworCit3YWl0X2RhdGFfbWFya19ieXRlOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIHdhaXRfZGF0YV9tYXJrX2J5dGUKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9kYXRhX21hcmtfYnl0ZQorCWJuZQl3YWl0X2RhdGFfaW5pdAorCisJLyogcmVhZCBkYXRhICovCisKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKworCW1vdmVsCSNzZWN0b3Jfc2l6ZS0xLCAlZDQJCS8qIHNlY3RvciBzaXplICovCityZWFkX25ld19kYXRhOgorCW1vdmV3CSNtYXhfcmV0cnksICVkMgorcmVhZF9kYXRhX2xvb3A6CisJbW92ZWIJJWEyQCwgJWQ1CisJYW5kYgkjMHhjMCwgJWQ1CisJZGJuZQklZDIsIHJlYWRfZGF0YV9sb29wCisJYmVxCWRhdGFfZXhpdAorCW1vdmViCSVhNUAsICVhNEArCisJYW5kYgkjMHg0MCwgJWQ1CisJZGJuZQklZDQsIHJlYWRfbmV3X2RhdGEKKwliZXEJZXhpdF9sb29wCisJbW92ZWIJJWE1QCwgJWE0QCsKKwlkYnJhCSVkNCwgcmVhZF9uZXdfZGF0YQorZXhpdF9sb29wOgorCisJLyogcmVhZCBDUkMgKi8KKworCW1vdmV3CSNtYXhfcmV0cnksICVkMgorZGF0YV9jcmMwOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIGRhdGFfY3JjMAorCWJwbAlkYXRhX2V4aXQKKworCW1vdmViCSVhM0AsICVkNQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2RhdGFfY3JjMToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCBkYXRhX2NyYzEKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDUKKworCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisKKwkvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KKworCW1vdmVsCSNzZWN0b3Jfc2l6ZSwgJWQwCisJYWRkdwkjMSwgJWQ0CisJc3VibAklZDQsICVkMAorCXJ0cworZGF0YV9leGl0OgorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmVxCSMtMSwgJWQwCisJcnRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggMTJmYjgxNi4uNjliN2Y4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCiAKLSNkZWZpbmUgdWJfdXNiX2lkcyAgc3RvcmFnZV91c2JfaWRzCisjZGVmaW5lIHViX3VzYl9pZHMgIHVzYl9zdG9yYWdlX3VzYl9pZHMKICNlbHNlCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1Yl91c2JfaWRzW10gPSB7CkBAIC0yMTQ2LDEwICsyMTQ2LDkgQEAKIAkJZXAgPSAmYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYzsKIAogCQkvKiBJcyBpdCBhIEJVTEsgZW5kcG9pbnQ/ICovCi0JCWlmICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXApKSB7CiAJCQkvKiBCVUxLIGluIG9yIG91dD8gKi8KLQkJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkgewogCQkJCWlmIChlcF9pbiA9PSBOVUxMKQogCQkJCQllcF9pbiA9IGVwOwogCQkJfSBlbHNlIHsKQEAgLTIxNjgsOSArMjE2Nyw5IEBACiAJc2MtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAlzYy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCmluZGV4IGQzZjE0YmUuLjJhMDA3MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwpAQCAtMjU3LDggKzI1Nyw3IEBACiAKIAlpZiAoaGRyICYgMHgxMCkgewogCQlCVF9FUlIoIiVzIGVycm9yIGluIGJsb2NrIiwgZGF0YS0+aGRldi0+bmFtZSk7Ci0JCWlmIChkYXRhLT5yZWFzc2VtYmx5KQotCQkJa2ZyZWVfc2tiKGRhdGEtPnJlYXNzZW1ibHkpOworCQlrZnJlZV9za2IoZGF0YS0+cmVhc3NlbWJseSk7CiAJCWRhdGEtPnJlYXNzZW1ibHkgPSBOVUxMOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggZmYxOTVjMi4uZDU4ZTIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtMzU5LDkgKzM1OSw5IEBACiAJCQlCVF9FUlIoIlZlcnkgc3RyYW5nZSAoc3RhdD0weCUwNHgpIiwgc3RhdCk7CiAJCX0gZWxzZSBpZiAoKHN0YXQgJiAweGZmKSAhPSAweGZmKSB7CiAJCQlpZiAoc3RhdCAmIDB4MDAyMCkgewotCQkJCWludCBzdGF0ID0gYnQzY19yZWFkKGlvYmFzZSwgMHg3MDAyKSAmIDB4MTA7CisJCQkJaW50IHN0YXR1cyA9IGJ0M2NfcmVhZChpb2Jhc2UsIDB4NzAwMikgJiAweDEwOwogCQkJCUJUX0lORk8oIiVzOiBBbnRlbm5hICVzIiwgaW5mby0+aGRldi0+bmFtZSwKLQkJCQkJCQlzdGF0ID8gIm91dCIgOiAiaW4iKTsKKwkJCQkJCQlzdGF0dXMgPyAib3V0IiA6ICJpbiIpOwogCQkJfQogCQkJaWYgKHN0YXQgJiAweDAwMDEpCiAJCQkJYnQzY19yZWNlaXZlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggYjVmYmRhNi4uZTcwYzU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40IgorI2RlZmluZSBWRVJTSU9OICIwLjUiCiAKIHN0YXRpYyBpbnQgaWdub3JlX2RnYTsKIHN0YXRpYyBpbnQgaWdub3JlX2NzcjsKQEAgLTE3MSw2ICsxNzEsNyBAQAogCiAJX191OCBjbWRyZXFfdHlwZTsKIAorCXVuc2lnbmVkIGludCBzY29fbnVtOwogCWludCBpc29jX2FsdHNldHRpbmc7CiAJaW50IHN1c3BlbmRfY291bnQ7CiB9OwpAQCAtNDk2LDExICs0OTcsMjMgQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBidHVzYl9zdWJtaXRfaW50cl91cmIoaGRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbGVkOworCisJZXJyID0gYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9LRVJORUwpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCWNsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKTsKKwkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aW50cl9hbmNob3IpOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKKwlzZXRfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKKwlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CisJY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY1NSwxOSArNjY4LDEwIEBACiAKIAlCVF9EQkcoIiVzIGV2dCAlZCIsIGhkZXYtPm5hbWUsIGV2dCk7CiAKLQlpZiAoaGRldi0+Y29ubl9oYXNoLmFjbF9udW0gPiAwKSB7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKLQkJCWlmIChidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0FUT01JQykgPCAwKQotCQkJCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCQllbHNlCi0JCQkJYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9BVE9NSUMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJdXNiX3VubGlua19hbmNob3JlZF91cmJzKCZkYXRhLT5idWxrX2FuY2hvcik7CisJaWYgKGhkZXYtPmNvbm5faGFzaC5zY29fbnVtICE9IGRhdGEtPnNjb19udW0pIHsKKwkJZGF0YS0+c2NvX251bSA9IGhkZXYtPmNvbm5faGFzaC5zY29fbnVtOworCQlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKIAl9Ci0KLQlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKIH0KIAogc3RhdGljIGludCBpbmxpbmUgX19zZXRfaXNvY19pbnRlcmZhY2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCBhbHRzZXR0aW5nKQpAQCAtOTgyLDkgKzk4NiwxMSBAQAogCX0KIAogCWlmICh0ZXN0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKLQkJaWYgKGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTykgPCAwKQorCQllcnIgPSBidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOworCQlpZiAoZXJyIDwgMCkgewogCQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJZWxzZQorCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlCiAJCQlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwppbmRleCBiMGZhZmIwLi5jMGNlODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwpAQCAtMTAyLDggKzEwMiw3IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJmg0LT50eHEpOwogCi0JaWYgKGg0LT5yeF9za2IpCi0JCWtmcmVlX3NrYihoNC0+cnhfc2tiKTsKKwlrZnJlZV9za2IoaDQtPnJ4X3NrYik7CiAKIAlodS0+cHJpdiA9IE5VTEw7CiAJa2ZyZWUoaDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwppbmRleCBiOTFkNDVhLi41YzY1MDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwpAQCAtMTYzLDggKzE2Myw3IEBACiAJc2tiX3F1ZXVlX3B1cmdlKCZsbC0+dHhfd2FpdF9xKTsKIAlza2JfcXVldWVfcHVyZ2UoJmxsLT50eHEpOwogCi0JaWYgKGxsLT5yeF9za2IpCi0JCWtmcmVlX3NrYihsbC0+cnhfc2tiKTsKKwlrZnJlZV9za2IobGwtPnJ4X3NrYik7CiAKIAlodS0+cHJpdiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKaW5kZXggYTUzNDk2OC4uNTQ0ODFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKQEAgLTEzLDEwICsxMywxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bmV0L2l1Y3YvaXVjdi5oPgpAQCAtOTUsNiArOTYsMTIgQEAKIC8qIEFycmF5IG9mIGFsbG9jYXRlZCBodmMgaXVjdiB0dHkgbGluZXMuLi4gKi8KIHN0YXRpYyBzdHJ1Y3QgaHZjX2l1Y3ZfcHJpdmF0ZSAqaHZjX2l1Y3ZfdGFibGVbTUFYX0hWQ19JVUNWX0xJTkVTXTsKICNkZWZpbmUgSVVDVl9IVkNfQ09OX0lEWAkoMCkKKy8qIExpc3Qgb2Ygei9WTSB1c2VyIElEIGZpbHRlciBlbnRyaWVzIChzdHJ1Y3QgaXVjdl92bWlkX2ZpbHRlcikgKi8KKyNkZWZpbmUgTUFYX1ZNSURfRklMVEVSCQkoNTAwKQorc3RhdGljIHNpemVfdCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsKK3N0YXRpYyB2b2lkICpodmNfaXVjdl9maWx0ZXI7CitzdGF0aWMgY29uc3QgY2hhciAqaHZjX2l1Y3ZfZmlsdGVyX3N0cmluZzsKK3N0YXRpYyBERUZJTkVfUldMT0NLKGh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKIAogLyogS21lbSBjYWNoZSBhbmQgbWVtcG9vbCBmb3IgaXVjdl90dHlfYnVmZmVyIGVsZW1lbnRzICovCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmh2Y19pdWN2X2J1ZmZlcl9jYWNoZTsKQEAgLTYxOCw2ICs2MjUsMjcgQEAKIH0KIAogLyoqCisgKiBodmNfaXVjdl9maWx0ZXJfY29ubnJlcSgpIC0gRmlsdGVyIGNvbm5lY3Rpb24gcmVxdWVzdCBiYXNlZCBvbiB6L1ZNIHVzZXIgSUQKKyAqIEBpcHZtaWQ6CU9yaWdpbmF0aW5nIHovVk0gdXNlciBJRCAocmlnaHQgcGFkZGVkIHdpdGggYmxhbmtzKQorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgei9WTSB1c2VyIElEIEBpcHZtaWQgaXMgYWxsb3dlZCB0byBjb25uZWN0aW9uLCBvdGhlcndpc2UKKyAqIG5vbi16ZXJvLgorICovCitzdGF0aWMgaW50IGh2Y19pdWN2X2ZpbHRlcl9jb25ucmVxKHU4IGlwdm1pZFs4XSkKK3sKKwlzaXplX3QgaTsKKworCS8qIE5vdGU6IGRlZmF1bHQgcG9saWN5IGlzIEFDQ0VQVCBpZiBubyBmaWx0ZXIgaXMgc2V0ICovCisJaWYgKCFodmNfaXVjdl9maWx0ZXJfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHZjX2l1Y3ZfZmlsdGVyX3NpemU7IGkrKykKKwkJaWYgKDAgPT0gbWVtY21wKGlwdm1pZCwgaHZjX2l1Y3ZfZmlsdGVyICsgKDggKiBpKSwgOCkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCiAgKiBodmNfaXVjdl9wYXRoX3BlbmRpbmcoKSAtIElVQ1YgaGFuZGxlciB0byBwcm9jZXNzIGEgY29ubmVjdGlvbiByZXF1ZXN0LgogICogQHBhdGg6CVBlbmRpbmcgcGF0aCAoc3RydWN0IGl1Y3ZfcGF0aCkKICAqIEBpcHZtaWQ6CXovVk0gc3lzdGVtIGlkZW50aWZpZXIgb2Ygb3JpZ2luYXRvcgpAQCAtNjQxLDYgKzY2OSw3IEBACiB7CiAJc3RydWN0IGh2Y19pdWN2X3ByaXZhdGUgKnByaXY7CiAJdTggbnVzZXJfZGF0YVsxNl07CisJdTggdm1fdXNlcl9pZFs5XTsKIAlpbnQgaSwgcmM7CiAKIAlwcml2ID0gTlVMTDsKQEAgLTY1Myw2ICs2ODIsMjAgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PREVWOwogCisJLyogRW5mb3JjZSB0aGF0IGlwdm1pZCBpcyBhbGxvd2VkIHRvIGNvbm5lY3QgdG8gdXMgKi8KKwlyZWFkX2xvY2soJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlyYyA9IGh2Y19pdWN2X2ZpbHRlcl9jb25ucmVxKGlwdm1pZCk7CisJcmVhZF91bmxvY2soJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlpZiAocmMpIHsKKwkJaXVjdl9wYXRoX3NldmVyKHBhdGgsIGlwdXNlcik7CisJCWl1Y3ZfcGF0aF9mcmVlKHBhdGgpOworCQltZW1jcHkodm1fdXNlcl9pZCwgaXB2bWlkLCA4KTsKKwkJdm1fdXNlcl9pZFs4XSA9IDA7CisJCXByX2luZm8oIkEgY29ubmVjdGlvbiByZXF1ZXN0IGZyb20gei9WTSB1c2VyIElEICVzICIKKwkJCSJ3YXMgcmVmdXNlZFxuIiwgdm1fdXNlcl9pZCk7CisJCXJldHVybiAwOworCX0KKwogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAkvKiBJZiB0aGUgdGVybWluYWwgaXMgYWxyZWFkeSBjb25uZWN0ZWQgb3IgYmVpbmcgc2V2ZXJlZCwgdGhlbiBzZXZlcgpAQCAtODc3LDYgKzkyMCwxNzEgQEAKIH0KIAogLyoqCisgKiBodmNfaXVjdl9wYXJzZV9maWx0ZXIoKSAtIFBhcnNlIGZpbHRlciBmb3IgYSBzaW5nbGUgei9WTSB1c2VyIElECisgKiBAZmlsdGVyOglTdHJpbmcgY29udGFpbmluZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmh2Y19pdWN2X3BhcnNlX2ZpbHRlcihjb25zdCBjaGFyICpmaWx0ZXIsIGNoYXIgKmRlc3QpCit7CisJY29uc3QgY2hhciAqbmV4dGRlbGltLCAqcmVzaWR1YWw7CisJc2l6ZV90IGxlbjsKKworCW5leHRkZWxpbSA9IHN0cmNocihmaWx0ZXIsICcsJyk7CisJaWYgKG5leHRkZWxpbSkgeworCQlsZW4gPSBuZXh0ZGVsaW0gLSBmaWx0ZXI7CisJCXJlc2lkdWFsID0gbmV4dGRlbGltICsgMTsKKwl9IGVsc2UgeworCQlsZW4gPSBzdHJsZW4oZmlsdGVyKTsKKwkJcmVzaWR1YWwgPSBmaWx0ZXIgKyBsZW47CisJfQorCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIGNoZWNrIGZvciAnXG4nIChpZiBjYWxsZWQgZnJvbSBzeXNmcykgKi8KKwlpZiAoZmlsdGVyW2xlbiAtIDFdID09ICdcbicpCisJCWxlbi0tOworCisJaWYgKGxlbiA+IDgpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogcGFkIHdpdGggYmxhbmtzIGFuZCBzYXZlIHVwcGVyIGNhc2UgdmVyc2lvbiBvZiB1c2VyIElEICovCisJbWVtc2V0KGRlc3QsICcgJywgOCk7CisJd2hpbGUgKGxlbi0tKQorCQlkZXN0W2xlbl0gPSB0b3VwcGVyKGZpbHRlcltsZW5dKTsKKwlyZXR1cm4gcmVzaWR1YWw7Cit9CisKKy8qKgorICogaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKCkgLSBTZXQgdXAgei9WTSB1c2VyIElEIGZpbHRlcgorICogQGZpbHRlcjoJU3RyaW5nIGNvbnNpc3Rpbmcgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKgorICogVGhlIGZ1bmN0aW9uIHBhcnNlcyB0aGUgQGZpbHRlciBzdHJpbmcgYW5kIGNyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZworICogdGhlIGxpc3Qgb2Ygei9WTSB1c2VyIElEIGZpbHRlciBlbnRyaWVzLgorICogUmV0dXJuIGNvZGUgMCBtZWFucyBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBmaWx0ZXIgaXMgc3ludGFjdGljYWxseQorICogaW5jb3JyZWN0LCAtRU5PTUVNIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUKKyAqIGZpbHRlciBsaXN0IGFycmF5LCBvciAtRU5PU1BDIGlmIHRvbyBtYW55IHovVk0gdXNlciBJRHMgaGF2ZSBiZWVuIHNwZWNpZmllZC4KKyAqLworc3RhdGljIGludCBodmNfaXVjdl9zZXR1cF9maWx0ZXIoY29uc3QgY2hhciAqdmFsKQoreworCWNvbnN0IGNoYXIgKnJlc2lkdWFsOworCWludCBlcnI7CisJc2l6ZV90IHNpemUsIGNvdW50OworCXZvaWQgKmFycmF5LCAqb2xkX2ZpbHRlcjsKKworCWNvdW50ID0gc3RybGVuKHZhbCk7CisJaWYgKGNvdW50ID09IDAgfHwgKGNvdW50ID09IDEgJiYgdmFsWzBdID09ICdcbicpKSB7CisJCXNpemUgID0gMDsKKwkJYXJyYXkgPSBOVUxMOworCQlnb3RvIG91dF9yZXBsYWNlX2ZpbHRlcjsJLyogY2xlYXIgZmlsdGVyICovCisJfQorCisJLyogY291bnQgdXNlciBJRHMgaW4gb3JkZXIgdG8gYWxsb2NhdGUgc3VmZmljaWVudCBtZW1vcnkgKi8KKwlzaXplID0gMTsKKwlyZXNpZHVhbCA9IHZhbDsKKwl3aGlsZSAoKHJlc2lkdWFsID0gc3RyY2hyKHJlc2lkdWFsLCAnLCcpKSAhPSBOVUxMKSB7CisJCXJlc2lkdWFsKys7CisJCXNpemUrKzsKKwl9CisKKwkvKiBjaGVjayBpZiB0aGUgc3BlY2lmaWVkIGxpc3QgZXhjZWVkcyB0aGUgZmlsdGVyIGxpbWl0ICovCisJaWYgKHNpemUgPiBNQVhfVk1JRF9GSUxURVIpCisJCXJldHVybiAtRU5PU1BDOworCisJYXJyYXkgPSBremFsbG9jKHNpemUgKiA4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFycmF5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvdW50ID0gc2l6ZTsKKwlyZXNpZHVhbCA9IHZhbDsKKwl3aGlsZSAoKnJlc2lkdWFsICYmIGNvdW50KSB7CisJCXJlc2lkdWFsID0gaHZjX2l1Y3ZfcGFyc2VfZmlsdGVyKHJlc2lkdWFsLAorCQkJCQkJIGFycmF5ICsgKChzaXplIC0gY291bnQpICogOCkpOworCQlpZiAoSVNfRVJSKHJlc2lkdWFsKSkgeworCQkJZXJyID0gUFRSX0VSUihyZXNpZHVhbCk7CisJCQlrZnJlZShhcnJheSk7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJY291bnQtLTsKKwl9CisKK291dF9yZXBsYWNlX2ZpbHRlcjoKKwl3cml0ZV9sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJb2xkX2ZpbHRlciA9IGh2Y19pdWN2X2ZpbHRlcjsKKwlodmNfaXVjdl9maWx0ZXJfc2l6ZSA9IHNpemU7CisJaHZjX2l1Y3ZfZmlsdGVyID0gYXJyYXk7CisJd3JpdGVfdW5sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJa2ZyZWUob2xkX2ZpbHRlcik7CisKKwllcnIgPSAwOworb3V0X2VycjoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHBhcmFtX3NldF92bWlkZmlsdGVyKCkgLSBTZXQgei9WTSB1c2VyIElEIGZpbHRlciBwYXJhbWV0ZXIKKyAqIEB2YWw6CVN0cmluZyBjb25zaXN0aW5nIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICogQGtwOgkJS2VybmVsIHBhcmFtZXRlciBwb2ludGluZyB0byBodmNfaXVjdl9maWx0ZXIgYXJyYXkKKyAqCisgKiBUaGUgZnVuY3Rpb24gc2V0cyB1cCB0aGUgei9WTSB1c2VyIElEIGZpbHRlciBzcGVjaWZpZWQgYXMgY29tbWEtc2VwYXJhdGVkCisgKiBsaXN0IG9mIHVzZXIgSURzIGluIEB2YWwuCisgKiBOb3RlOiBJZiBpdCBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2VzcywgQHZhbCBpcyBzdG9yZWQgYW5kCisgKgkgcGFyc2VkIGxhdGVyIGluIGh2Y19pdWN2X2luaXQoKS4KKyAqLworc3RhdGljIGludCBwYXJhbV9zZXRfdm1pZGZpbHRlcihjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByYzsKKworCWlmICghTUFDSElORV9JU19WTSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXZhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYyA9IDA7CisJaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpCisJCXJjID0gaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKHZhbCk7CisJZWxzZQorCQlodmNfaXVjdl9maWx0ZXJfc3RyaW5nID0gdmFsOwkvKiBkZWZlci4uLiAqLworCXJldHVybiByYzsKK30KKworLyoqCisgKiBwYXJhbV9nZXRfdm1pZGZpbHRlcigpIC0gR2V0IHovVk0gdXNlciBJRCBmaWx0ZXIKKyAqIEBidWZmZXI6CUJ1ZmZlciB0byBzdG9yZSB6L1ZNIHVzZXIgSUQgZmlsdGVyLAorICoJCShidWZmZXIgc2l6ZSBhc3N1bXB0aW9uIFBBR0VfU0laRSkKKyAqIEBrcDoJCUtlcm5lbCBwYXJhbWV0ZXIgcG9pbnRpbmcgdG8gdGhlIGh2Y19pdWN2X2ZpbHRlciBhcnJheQorICoKKyAqIFRoZSBmdW5jdGlvbiBzdG9yZXMgdGhlIGZpbHRlciBhcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqIGluIEBidWZmZXIuIFR5cGljYWxseSwgc3lzZnMgcm91dGluZXMgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBhdHRyIHNob3cuCisgKi8KK3N0YXRpYyBpbnQgcGFyYW1fZ2V0X3ZtaWRmaWx0ZXIoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgcmM7CisJc2l6ZV90IGluZGV4LCBsZW47CisJdm9pZCAqc3RhcnQsICplbmQ7CisKKwlpZiAoIU1BQ0hJTkVfSVNfVk0gfHwgIWh2Y19pdWN2X2RldmljZXMpCisJCXJldHVybiAtRU5PREVWOworCisJcmMgPSAwOworCXJlYWRfbG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGh2Y19pdWN2X2ZpbHRlcl9zaXplOyBpbmRleCsrKSB7CisJCXN0YXJ0ID0gaHZjX2l1Y3ZfZmlsdGVyICsgKDggKiBpbmRleCk7CisJCWVuZCAgID0gbWVtY2hyKHN0YXJ0LCAnICcsIDgpOworCQlsZW4gICA9IChlbmQpID8gZW5kIC0gc3RhcnQgOiA4OworCQltZW1jcHkoYnVmZmVyICsgcmMsIHN0YXJ0LCBsZW4pOworCQlyYyArPSBsZW47CisJCWJ1ZmZlcltyYysrXSA9ICcsJzsKKwl9CisJcmVhZF91bmxvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlpZiAocmMpCisJCWJ1ZmZlclstLXJjXSA9ICdcMCc7CS8qIHJlcGxhY2UgbGFzdCBjb21tYSBhbmQgdXBkYXRlIHJjICovCisJcmV0dXJuIHJjOworfQorCisjZGVmaW5lIHBhcmFtX2NoZWNrX3ZtaWRmaWx0ZXIobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB2b2lkKQorCisvKioKICAqIGh2Y19pdWN2X2luaXQoKSAtIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBpbml0aWFsaXphdGlvbgogICovCiBzdGF0aWMgaW50IF9faW5pdCBodmNfaXVjdl9pbml0KHZvaWQpCkBAIC04ODQsMjQgKzEwOTIsNTMgQEAKIAlpbnQgcmM7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoIU1BQ0hJTkVfSVNfVk0pIHsKLQkJcHJfaW5mbygiVGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBjYW5ub3QgIgotCQkJICAgImJlIHVzZWQgd2l0aG91dCB6L1ZNXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJaWYgKCFodmNfaXVjdl9kZXZpY2VzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChodmNfaXVjdl9kZXZpY2VzID4gTUFYX0hWQ19JVUNWX0xJTkVTKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIU1BQ0hJTkVfSVNfVk0pIHsKKwkJcHJfbm90aWNlKCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCAiCisJCQkgICAiYmUgdXNlZCB3aXRob3V0IHovVk1cbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCWlmIChodmNfaXVjdl9kZXZpY2VzID4gTUFYX0hWQ19JVUNWX0xJTkVTKSB7CisJCXByX2VycigiJWx1IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGUgaHZjX2l1Y3Y9ICIKKwkJCSJrZXJuZWwgcGFyYW1ldGVyXG4iLCBodmNfaXVjdl9kZXZpY2VzKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwkvKiBwYXJzZSBodmNfaXVjdl9hbGxvdyBzdHJpbmcgYW5kIGNyZWF0ZSB6L1ZNIHVzZXIgSUQgZmlsdGVyIGxpc3QgKi8KKwlpZiAoaHZjX2l1Y3ZfZmlsdGVyX3N0cmluZykgeworCQlyYyA9IGh2Y19pdWN2X3NldHVwX2ZpbHRlcihodmNfaXVjdl9maWx0ZXJfc3RyaW5nKTsKKwkJc3dpdGNoIChyYykgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAtRU5PTUVNOgorCQkJcHJfZXJyKCJBbGxvY2F0aW5nIG1lbW9yeSBmYWlsZWQgd2l0aCAiCisJCQkJInJlYXNvbiBjb2RlPSVkXG4iLCAzKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQljYXNlIC1FSU5WQUw6CisJCQlwcl9lcnIoImh2Y19pdWN2X2FsbG93PSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsaWQgIgorCQkJCSJ6L1ZNIHVzZXIgSUQgbGlzdFxuIik7CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJY2FzZSAtRU5PU1BDOgorCQkJcHJfZXJyKCJodmNfaXVjdl9hbGxvdz0gc3BlY2lmaWVzIHRvbyBtYW55ICIKKwkJCQkiei9WTSB1c2VyIElEc1xuIik7CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0X2Vycm9yOworCQl9CisJfQogCiAJaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoS01TR19DT01QT05FTlQsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3QgaXVjdl90dHlfYnVmZmVyKSwKIAkJCQkJICAgMCwgMCwgTlVMTCk7CiAJaWYgKCFodmNfaXVjdl9idWZmZXJfY2FjaGUpIHsKIAkJcHJfZXJyKCJBbGxvY2F0aW5nIG1lbW9yeSBmYWlsZWQgd2l0aCByZWFzb24gY29kZT0lZFxuIiwgMSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2Vycm9yOwogCX0KIAogCWh2Y19pdWN2X21lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUVNUE9PTF9NSU5fTlIsCkBAIC05MDksNyArMTE0Niw4IEBACiAJaWYgKCFodmNfaXVjdl9tZW1wb29sKSB7CiAJCXByX2VycigiQWxsb2NhdGluZyBtZW1vcnkgZmFpbGVkIHdpdGggcmVhc29uIGNvZGU9JWRcbiIsIDIpOwogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyb3I7CiAJfQogCiAJLyogcmVnaXN0ZXIgdGhlIGZpcnN0IHRlcm1pbmFsIGRldmljZSBhcyBjb25zb2xlCkBAIC05NTMsNiArMTE5MSw4IEBACiBvdXRfZXJyb3JfbWVtb3J5OgogCW1lbXBvb2xfZGVzdHJveShodmNfaXVjdl9tZW1wb29sKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlKTsKK291dF9lcnJvcjoKKwlodmNfaXVjdl9kZXZpY2VzID0gMDsgLyogZW5zdXJlIHRoYXQgd2UgZG8gbm90IHByb3ZpZGUgYW55IGRldmljZSAqLwogCXJldHVybiByYzsKIH0KIApAQCAtOTY4LDMgKzEyMDgsNCBAQAogCiBkZXZpY2VfaW5pdGNhbGwoaHZjX2l1Y3ZfaW5pdCk7CiBfX3NldHVwKCJodmNfaXVjdj0iLCBodmNfaXVjdl9jb25maWcpOworY29yZV9wYXJhbShodmNfaXVjdl9hbGxvdywgaHZjX2l1Y3ZfZmlsdGVyLCB2bWlkZmlsdGVyLCAwNjQwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwppbmRleCA4ODIyZWNhLi41ZmFiNjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCkBAIC0yMCw2ICsyMCwyMCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgSFdfUkFORE9NX1RJTUVSSU9NRU0KKwl0cmlzdGF0ZSAiVGltZXIgSU9NRU0gSFcgUmFuZG9tIE51bWJlciBHZW5lcmF0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiBIQVNfSU9NRU0KKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwtc2lkZSBzdXBwb3J0IGZvciBhIGdlbmVyaWMgUmFuZG9tCisJICBOdW1iZXIgR2VuZXJhdG9yIHVzZWQgYnkgcmVhZGluZyBhICdkdW1iJyBpb21lbSBhZGRyZXNzIHRoYXQKKwkgIGlzIHRvIGJlIHJlYWQgbm8gZmFzdGVyIHRoYW4sIGZvciBleGFtcGxlLCBvbmNlIGEgc2Vjb25kOworCSAgdGhlIGRlZmF1bHQgRlBHQSBiaXRzdHJlYW0gb24gdGhlIFRTLTc4MDAgaGFzIHN1Y2ggZnVuY3Rpb25hbGl0eS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGltZXJpb21lbS1ybmcuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBIV19SQU5ET01fSU5URUwKIAl0cmlzdGF0ZSAiSW50ZWwgSFcgUmFuZG9tIE51bWJlciBHZW5lcmF0b3Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiAoWDg2IHx8IElBNjQpICYmIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKaW5kZXggYjZlZmZiNy4uZTgxZDIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogCiBvYmotJChDT05GSUdfSFdfUkFORE9NKSArPSBybmctY29yZS5vCiBybmctY29yZS15IDo9IGNvcmUubworb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNKSArPSB0aW1lcmlvbWVtLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0lOVEVMKSArPSBpbnRlbC1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9BTUQpICs9IGFtZC1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9HRU9ERSkgKz0gZ2VvZGUtcm5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGFkNDFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+CisgKgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYworICogICBDb3B5cmlnaHQgMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBPdmVydmlldzoKKyAqICAgVGhpcyBkcml2ZXIgaXMgdXNlZnVsIGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGFuIElPIHJhbmdlIHRoYXQgcHJvdmlkZXMKKyAqICAgcGVyaW9kaWMgcmFuZG9tIGRhdGEgZnJvbSBhIHNpbmdsZSBJTyBtZW1vcnkgYWRkcmVzcy4gIEFsbCB0aGUgcGxhdGZvcm0KKyAqICAgaGFzIHRvIGRvIGlzIHByb3ZpZGUgdGhlIGFkZHJlc3MgYW5kICd3YWl0IHRpbWUnIHRoYXQgbmV3IGRhdGEgYmVjb21lcworICogICBhdmFpbGFibGUuCisgKgorICogVE9ETzogYWRkIHN1cHBvcnQgZm9yIHJlYWRpbmcgc2l6ZXMgb3RoZXIgdGhhbiAzMmJpdHMgYW5kIG1hc2tpbmcKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaHdfcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lcmlvbWVtLXJuZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCitzdGF0aWMgc3RydWN0IHRpbWVyaW9tZW1fcm5nX2RhdGEgKnRpbWVyaW9tZW1fcm5nX2RhdGE7CisKK3N0YXRpYyB2b2lkIHRpbWVyaW9tZW1fcm5nX3RyaWdnZXIodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgREVGSU5FX1RJTUVSKHRpbWVyaW9tZW1fcm5nX3RpbWVyLCB0aW1lcmlvbWVtX3JuZ190cmlnZ2VyLCAwLCAwKTsKKworLyoKKyAqIGhhdmUgZGF0YSByZXR1cm4gMSwgaG93ZXZlciByZXR1cm4gMCBpZiB3ZSBoYXZlIG5vdGhpbmcKKyAqLworc3RhdGljIGludCB0aW1lcmlvbWVtX3JuZ19kYXRhX3ByZXNlbnQoc3RydWN0IGh3cm5nICpybmcsIGludCB3YWl0KQoreworCWlmIChybmctPnByaXYgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXdhaXQgfHwgdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCkKKwkJcmV0dXJuIHRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQ7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0aW1lcmlvbWVtX3JuZ19kYXRhLT5jb21wbGV0aW9uKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRpbWVyaW9tZW1fcm5nX2RhdGFfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdTMyICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgY3VyOworCXMzMiBkZWxheTsKKworCSpkYXRhID0gcmVhZGwodGltZXJpb21lbV9ybmdfZGF0YS0+YWRkcmVzcyk7CisKKwlpZiAocm5nLT5wcml2ICE9IDApIHsKKwkJY3VyID0gamlmZmllczsKKworCQlkZWxheSA9IGN1ciAtIHRpbWVyaW9tZW1fcm5nX3RpbWVyLmV4cGlyZXM7CisJCWRlbGF5ID0gcm5nLT5wcml2IC0gKGRlbGF5ICUgcm5nLT5wcml2KTsKKworCQl0aW1lcmlvbWVtX3JuZ190aW1lci5leHBpcmVzID0gY3VyICsgZGVsYXk7CisJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQgPSAwOworCisJCWluaXRfY29tcGxldGlvbigmdGltZXJpb21lbV9ybmdfZGF0YS0+Y29tcGxldGlvbik7CisJCWFkZF90aW1lcigmdGltZXJpb21lbV9ybmdfdGltZXIpOworCX0KKworCXJldHVybiA0OworfQorCitzdGF0aWMgdm9pZCB0aW1lcmlvbWVtX3JuZ190cmlnZ2VyKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDE7CisJY29tcGxldGUoJnRpbWVyaW9tZW1fcm5nX2RhdGEtPmNvbXBsZXRpb24pOworfQorCitzdGF0aWMgc3RydWN0IGh3cm5nIHRpbWVyaW9tZW1fcm5nX29wcyA9IHsKKwkubmFtZQkJPSAidGltZXJpb21lbSIsCisJLmRhdGFfcHJlc2VudAk9IHRpbWVyaW9tZW1fcm5nX2RhdGFfcHJlc2VudCwKKwkuZGF0YV9yZWFkCT0gdGltZXJpb21lbV9ybmdfZGF0YV9yZWFkLAorCS5wcml2CQk9IDAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0aW1lcmlvbWVtX3JuZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwl0aW1lcmlvbWVtX3JuZ19kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAodGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kICE9IDAKKwkJJiYgdXNlY3NfdG9famlmZmllcyh0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpID4gMCkgeworCQl0aW1lcmlvbWVtX3JuZ190aW1lci5leHBpcmVzID0gamlmZmllczsKKworCQl0aW1lcmlvbWVtX3JuZ19vcHMucHJpdiA9IHVzZWNzX3RvX2ppZmZpZXMoCisJCQkJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpOworCX0KKwl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50ID0gMTsKKworCXJldCA9IGh3cm5nX3JlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19vcHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSByZWdpc3RlcmluZ1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIjMyYml0cyBmcm9tIDB4JXAgQCAlZHVzXG4iLAorCQkJdGltZXJpb21lbV9ybmdfZGF0YS0+YWRkcmVzcywKKwkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGltZXJpb21lbV9ybmdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZGVsX3RpbWVyX3N5bmMoJnRpbWVyaW9tZW1fcm5nX3RpbWVyKTsKKwlod3JuZ191bnJlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRpbWVyaW9tZW1fcm5nX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAidGltZXJpb21lbV9ybmciLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gdGltZXJpb21lbV9ybmdfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0aW1lcmlvbWVtX3JuZ19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGltZXJpb21lbV9ybmdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0aW1lcmlvbWVtX3JuZ19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRpbWVyaW9tZW1fcm5nX2luaXQpOworbW9kdWxlX2V4aXQodGltZXJpb21lbV9ybmdfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRpbWVyIElPTUVNIEgvVyBSTkcgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKaW5kZXggZGMwNzNlMS4uNTYwOGExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwpAQCAtNDMxMSwxMCArNDMxMSwxNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhkbGNkZXZfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoZGxjZGV2X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaGRsY2Rldl9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoZGxjZGV2X3R4X3RpbWVvdXQsCit9OworCiAvKioKICAqIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVyIHdoZW4gYWRkaW5nIGRldmljZSBpbnN0YW5jZQogICogZG8gZ2VuZXJpYyBIRExDIGluaXRpYWxpemF0aW9uCkBAIC00MzQxLDExICs0MzQ4LDggQEAKIAlkZXYtPmlycSAgICAgICA9IGluZm8tPmlycV9sZXZlbDsKIAogCS8qIG5ldHdvcmsgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwotCWRldi0+ZG9faW9jdGwgICAgICAgPSBoZGxjZGV2X2lvY3RsOwotCWRldi0+b3BlbiAgICAgICAgICAgPSBoZGxjZGV2X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICA9IGhkbGNkZXZfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0ICAgICA9IGhkbGNkZXZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7CisJZGV2LT5uZXRkZXZfb3BzCSAgICA9ICZoZGxjZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgID0gNTA7CiAKIAkvKiBnZW5lcmljIEhETEMgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDdjMTM1ODEuLjdjNDNhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTI0MSw2ICsyNDEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CiAKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUworIyBpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNTU4LDcgKzU2Miw3IEBACiAJdW5zaWduZWQgZG9udF9jb3VudF9lbnRyb3B5OjE7CiB9OwogCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqaXJxX3RpbWVyX3N0YXRlW05SX0lSUVNdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKaW5kZXggZjQzNzQ0My4uZmQzZGNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtODg4LDEyICs4ODgsNyBAQAogCiBzdGF0aWMgaW50IHNvbnlwaV9taXNjX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2RldmljZS5maWZvX2FzeW5jKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfZGV2aWNlLmZpZm9fYXN5bmMpOwogfQogCiBzdGF0aWMgaW50IHNvbnlwaV9taXNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCmluZGV4IGI4MDYzZDQuLjAwNTdhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCkBAIC04MDA3LDEwICs4MDA3LDE3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKLQotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaGRsY2Rldl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhkbGNkZXZfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBoZGxjZGV2X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGhkbGNkZXZfdHhfdGltZW91dCwKK307CisKIC8qKgogICogY2FsbGVkIGJ5IGRldmljZSBkcml2ZXIgd2hlbiBhZGRpbmcgZGV2aWNlIGluc3RhbmNlCiAgKiBkbyBnZW5lcmljIEhETEMgaW5pdGlhbGl6YXRpb24KQEAgLTgwMzgsMTEgKzgwNDUsOCBAQAogCWRldi0+ZG1hICAgICAgID0gaW5mby0+ZG1hX2xldmVsOwogCiAJLyogbmV0d29yayBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCi0JZGV2LT5kb19pb2N0bCAgICAgICA9IGhkbGNkZXZfaW9jdGw7Ci0JZGV2LT5vcGVuICAgICAgICAgICA9IGhkbGNkZXZfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgID0gaGRsY2Rldl9jbG9zZTsKLQlkZXYtPnR4X3RpbWVvdXQgICAgID0gaGRsY2Rldl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCpIWjsKKwlkZXYtPm5ldGRldl9vcHMgICAgID0gJmhkbGNkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCAqIEhaOwogCWRldi0+dHhfcXVldWVfbGVuICAgPSA1MDsKIAogCS8qIGdlbmVyaWMgSERMQyBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IGYzMjlmNDUuLmVmYjNkYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC0xNzYzLDEwICsxNzYzLDE3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKLQotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaGRsY2Rldl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhkbGNkZXZfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBoZGxjZGV2X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGhkbGNkZXZfdHhfdGltZW91dCwKK307CisKIC8qKgogICogY2FsbGVkIGJ5IGRldmljZSBkcml2ZXIgd2hlbiBhZGRpbmcgZGV2aWNlIGluc3RhbmNlCiAgKiBkbyBnZW5lcmljIEhETEMgaW5pdGlhbGl6YXRpb24KQEAgLTE3OTQsMTEgKzE4MDEsOCBAQAogCWRldi0+aXJxICAgICAgID0gaW5mby0+aXJxX2xldmVsOwogCiAJLyogbmV0d29yayBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCi0JZGV2LT5kb19pb2N0bCAgICAgICA9IGhkbGNkZXZfaW9jdGw7Ci0JZGV2LT5vcGVuICAgICAgICAgICA9IGhkbGNkZXZfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgID0gaGRsY2Rldl9jbG9zZTsKLQlkZXYtPnR4X3RpbWVvdXQgICAgID0gaGRsY2Rldl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCpIWjsKKwlkZXYtPm5ldGRldl9vcHMJICAgID0gJmhkbGNkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCAqIEhaOwogCWRldi0+dHhfcXVldWVfbGVuICAgPSA1MDsKIAogCS8qIGdlbmVyaWMgSERMQyBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwppbmRleCA3YjBjNWIyLi44ZWI2Yzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKQEAgLTE5MDcsMTAgKzE5MDcsMTcgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAluZXRpZl9yeChza2IpOwotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoZGxjZGV2X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaGRsY2Rldl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhkbGNkZXZfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gaGRsY2Rldl90eF90aW1lb3V0LAorfTsKKwogLyoqCiAgKiBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciB3aGVuIGFkZGluZyBkZXZpY2UgaW5zdGFuY2UKICAqIGRvIGdlbmVyaWMgSERMQyBpbml0aWFsaXphdGlvbgpAQCAtMTkzOCwxMSArMTk0NSw4IEBACiAJZGV2LT5pcnEgICAgICAgPSBpbmZvLT5pcnFfbGV2ZWw7CiAKIAkvKiBuZXR3b3JrIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KLQlkZXYtPmRvX2lvY3RsICAgICAgID0gaGRsY2Rldl9pb2N0bDsKLQlkZXYtPm9wZW4gICAgICAgICAgID0gaGRsY2Rldl9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgPSBoZGxjZGV2X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dCAgICAgPSBoZGxjZGV2X3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOworCWRldi0+bmV0ZGV2X29wcwkgICAgPSAmaGRsY2Rldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICA9IDUwOwogCiAJLyogZ2VuZXJpYyBIRExDIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDljNDdkYzQuLmNjZGQ4MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtNDI5LDEzNCArNDI5LDE0OCBAQAogI2RlZmluZSBUUE1fRElHRVNUX1NJWkUgMjAKICNkZWZpbmUgVFBNX0VSUk9SX1NJWkUgMTAKICNkZWZpbmUgVFBNX1JFVF9DT0RFX0lEWCA2Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9TSVpFX0lEWCAxMAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYIDE0Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFggMTgKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCAyMgotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzRfSURYIDI2Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1BFUk1fRElTQUJMRV9JRFggMTYKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUEVSTV9JTkFDVElWRV9JRFggMTgKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX0JPT0xfMV9JRFggMTQKLSNkZWZpbmUgVFBNX0dFVF9DQVBfVEVNUF9JTkFDVElWRV9JRFggMTYKLQotI2RlZmluZSBUUE1fQ0FQX0lEWCAxMwotI2RlZmluZSBUUE1fQ0FQX1NVQkNBUF9JRFggMjEKIAogZW51bSB0cG1fY2FwYWJpbGl0aWVzIHsKLQlUUE1fQ0FQX0ZMQUcgPSA0LAotCVRQTV9DQVBfUFJPUCA9IDUsCisJVFBNX0NBUF9GTEFHID0gY3B1X3RvX2JlMzIoNCksCisJVFBNX0NBUF9QUk9QID0gY3B1X3RvX2JlMzIoNSksCisJQ0FQX1ZFUlNJT05fMV8xID0gY3B1X3RvX2JlMzIoMHgwNiksCisJQ0FQX1ZFUlNJT05fMV8yID0gY3B1X3RvX2JlMzIoMHgxQSkKIH07CiAKIGVudW0gdHBtX3N1Yl9jYXBhYmlsaXRpZXMgewotCVRQTV9DQVBfUFJPUF9QQ1IgPSAweDEsCi0JVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiA9IDB4MywKLQlUUE1fQ0FQX0ZMQUdfUEVSTSA9IDB4OCwKLQlUUE1fQ0FQX0ZMQUdfVk9MID0gMHg5LAotCVRQTV9DQVBfUFJPUF9PV05FUiA9IDB4MTEsCi0JVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUID0gMHgxNSwKLQlUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OID0gMHgyMCwKKwlUUE1fQ0FQX1BST1BfUENSID0gY3B1X3RvX2JlMzIoMHgxMDEpLAorCVRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIgPSBjcHVfdG9fYmUzMigweDEwMyksCisJVFBNX0NBUF9GTEFHX1BFUk0gPSBjcHVfdG9fYmUzMigweDEwOCksCisJVFBNX0NBUF9GTEFHX1ZPTCA9IGNwdV90b19iZTMyKDB4MTA5KSwKKwlUUE1fQ0FQX1BST1BfT1dORVIgPSBjcHVfdG9fYmUzMigweDExMSksCisJVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUID0gY3B1X3RvX2JlMzIoMHgxMTUpLAorCVRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT04gPSBjcHVfdG9fYmUzMigweDEyMCksCisKIH07CiAKLS8qCi0gKiBUaGlzIGlzIGEgc2VtaSBnZW5lcmljIEdldENhcGFiaWxpdHkgY29tbWFuZCBmb3IgdXNlCi0gKiB3aXRoIHRoZSBjYXBhYmlsaXR5IHR5cGUgVFBNX0NBUF9QUk9QIG9yIFRQTV9DQVBfRkxBRwotICogYW5kIHRoZWlyIGFzc29jaWF0ZWQgc3ViX2NhcGFiaWxpdGllcy4KLSAqLwotCi1zdGF0aWMgY29uc3QgdTggdHBtX2NhcFtdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMjIsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAxMDEsCQkvKiBUUE1fT1JEX0dldENhcGFiaWxpdHkgKi8KLQkwLCAwLCAwLCAwLAkJLyogVFBNX0NBUF88VFlQRT4gKi8KLQkwLCAwLCAwLCA0LAkJLyogVFBNX0NBUF9TVUJfPFRZUEU+IHNpemUgKi8KLQkwLCAwLCAxLCAwCQkvKiBUUE1fQ0FQX1NVQl88VFlQRT4gKi8KLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2NtZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpkYXRhLCBpbnQgbGVuLAotCQkJICAgIGNoYXIgKmRlc2MpCitzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9jbWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBzdHJ1Y3QgdHBtX2NtZF90ICpjbWQsCisJCQkgICAgaW50IGxlbiwgY29uc3QgY2hhciAqZGVzYykKIHsKIAlpbnQgZXJyOwogCi0JbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsIGRhdGEsIGxlbik7CisJbGVuID0gdHBtX3RyYW5zbWl0KGNoaXAsKHU4ICopIGNtZCwgbGVuKTsKIAlpZiAobGVuIDwgIDApCiAJCXJldHVybiBsZW47CiAJaWYgKGxlbiA9PSBUUE1fRVJST1JfU0laRSkgewotCQllcnIgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpOworCQllcnIgPSBiZTMyX3RvX2NwdShjbWQtPmhlYWRlci5vdXQucmV0dXJuX2NvZGUpOwogCQlkZXZfZGJnKGNoaXAtPmRldiwgIkEgVFBNIGVycm9yICglZCkgb2NjdXJyZWQgJXNcbiIsIGVyciwgZGVzYyk7CiAJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwogfQogCisjZGVmaW5lIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSAyMDAKKyNkZWZpbmUgVFBNX1RBR19SUVVfQ09NTUFORCBjcHVfdG9fYmUxNigxOTMpCisjZGVmaW5lIFRQTV9PUkRfR0VUX0NBUCBjcHVfdG9fYmUzMigxMDEpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciB0cG1fZ2V0Y2FwX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMjIpLAorCS5vcmRpbmFsID0gVFBNX09SRF9HRVRfQ0FQCit9OworCitzc2l6ZV90IHRwbV9nZXRjYXAoc3RydWN0IGRldmljZSAqZGV2LCBfX2JlMzIgc3ViY2FwX2lkLCBjYXBfdCAqY2FwLAorCQkgICBjb25zdCBjaGFyICpkZXNjKQoreworCXN0cnVjdCB0cG1fY21kX3QgdHBtX2NtZDsKKwlpbnQgcmM7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCWlmIChzdWJjYXBfaWQgPT0gQ0FQX1ZFUlNJT05fMV8xIHx8IHN1YmNhcF9pZCA9PSBDQVBfVkVSU0lPTl8xXzIpIHsKKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IHN1YmNhcF9pZDsKKwkJLypzdWJjYXAgZmllbGQgbm90IG5lY2Vzc2FyeSAqLworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMigwKTsKKwkJdHBtX2NtZC5oZWFkZXIuaW4ubGVuZ3RoIC09IGNwdV90b19iZTMyKHNpemVvZihfX2JlMzIpKTsKKwl9IGVsc2UgeworCQlpZiAoc3ViY2FwX2lkID09IFRQTV9DQVBfRkxBR19QRVJNIHx8CisJCSAgICBzdWJjYXBfaWQgPT0gVFBNX0NBUF9GTEFHX1ZPTCkKKwkJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX0ZMQUc7CisJCWVsc2UKKwkJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gc3ViY2FwX2lkOworCX0KKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBkZXNjKTsKKwlpZiAoIXJjKQorCQkqY2FwID0gdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX291dC5jYXA7CisJcmV0dXJuIHJjOworfQorCiB2b2lkIHRwbV9nZW5faW50ZXJydXB0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQl1OCBkYXRhW21heF90KGludCwgQVJSQVlfU0laRSh0cG1fY2FwKSwgMzApXTsKKwlzdHJ1Y3QJdHBtX2NtZF90IHRwbV9jbWQ7CiAJc3NpemVfdCByYzsKIAotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKIAotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2dlbl9pbnRlcnJ1cHQpOwogCiB2b2lkIHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXU4IGRhdGFbbWF4X3QoaW50LCBBUlJBWV9TSVpFKHRwbV9jYXApLCAzMCldOworCXN0cnVjdCB0cG1fY21kX3QgdHBtX2NtZDsKKwlzdHJ1Y3QgdGltZW91dF90ICp0aW1lb3V0X2NhcDsKKwlzdHJ1Y3QgZHVyYXRpb25fdCAqZHVyYXRpb25fY2FwOwogCXNzaXplX3QgcmM7CiAJdTMyIHRpbWVvdXQ7CiAKLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGltZW91dHMiKTsKIAlpZiAocmMpCiAJCWdvdG8gZHVyYXRpb247CiAKLQlpZiAoYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYKSkpCisJaWYgKGJlMzJfdG9fY3B1KHRwbV9jbWQuaGVhZGVyLm91dC5sZW5ndGgpCiAJICAgICE9IDQgKiBzaXplb2YodTMyKSkKIAkJZ290byBkdXJhdGlvbjsKIAorCXRpbWVvdXRfY2FwID0gJnRwbV9jbWQucGFyYW1zLmdldGNhcF9vdXQuY2FwLnRpbWVvdXQ7CiAJLyogRG9uJ3Qgb3ZlcndyaXRlIGRlZmF1bHQgaWYgdmFsdWUgaXMgMCAqLwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+YSk7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+Yik7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2IgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+Yyk7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2MgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCXRpbWVvdXQgPQotCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzRfSURYKSkpOworCXRpbWVvdXQgPSBiZTMyX3RvX2NwdSh0aW1lb3V0X2NhcC0+ZCk7CiAJaWYgKHRpbWVvdXQpCiAJCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCiBkdXJhdGlvbjoKLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OOworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTjsKIAotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIHNpemVvZihkYXRhKSwKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBkdXJhdGlvbnMiKTsKIAlpZiAocmMpCiAJCXJldHVybjsKIAotCWlmIChiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFgpKSkKKwlpZiAoYmUzMl90b19jcHUodHBtX2NtZC5oZWFkZXIub3V0LnJldHVybl9jb2RlKQogCSAgICAhPSAzICogc2l6ZW9mKHUzMikpCiAJCXJldHVybjsKLQorCWR1cmF0aW9uX2NhcCA9ICZ0cG1fY21kLnBhcmFtcy5nZXRjYXBfb3V0LmNhcC5kdXJhdGlvbjsKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9Ci0JICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKLQkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCi0JCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdShkdXJhdGlvbl9jYXAtPnRwbV9zaG9ydCkpOwogCS8qIFRoZSBCcm9hZGNvbSBCQ00wMTAyIGNoaXBzZXQgaW4gYSBEZWxsIExhdGl0dWRlIEQ4MjAgZ2V0cyB0aGUgYWJvdmUKIAkgKiB2YWx1ZSB3cm9uZyBhbmQgYXBwYXJlbnRseSByZXBvcnRzIG1zZWNzIHJhdGhlciB0aGFuIHVzZWNzLiBTbyB3ZQogCSAqIGZpeCB1cCB0aGUgcmVzdWx0aW5nIHRvby1zbWFsbCBUUE1fU0hPUlQgdmFsdWUgdG8gbWFrZSB0aGluZ3Mgd29yay4KQEAgLTU2NSwxMyArNTc5LDkgQEAKIAkJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPSBIWjsKIAogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTUVESVVNXSA9Ci0JICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKLQkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCi0JCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYKSkpKTsKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdShkdXJhdGlvbl9jYXAtPnRwbV9tZWRpdW0pKTsKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX0xPTkddID0KLQkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQotCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKLQkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFgpKSkpOworCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1KGR1cmF0aW9uX2NhcC0+dHBtX2xvbmcpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9nZXRfdGltZW91dHMpOwogCkBAIC01ODcsMzYgKzU5NywxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2NvbnRpbnVlX3NlbGZ0ZXN0KTsKIAotI2RlZmluZSAgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFIDIwMAotCiBzc2l6ZV90IHRwbV9zaG93X2VuYWJsZWQoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAogCQkJY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfRkxBRzsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUdfUEVSTTsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXRwaW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGVuYWJsZWQgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9GTEFHX1BFUk0sICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgZW5hYmxlZCBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhZGF0YVtUUE1fR0VUX0NBUF9QRVJNX0RJU0FCTEVfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICFjYXAucGVybV9mbGFncy5kaXNhYmxlKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19lbmFibGVkKTsKQEAgLTYyNCwzMSArNjE2LDE1IEBACiBzc2l6ZV90IHRwbV9zaG93X2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCiAJCQljaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9GTEFHOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfRkxBR19QRVJNOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtdHBpbmcgdG8gZGV0ZXJtaW5lIHRoZSBwZXJtYW5lbnQgYWN0aXZlIHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfRkxBR19QRVJNLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGFjdGl2ZSBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhZGF0YVtUUE1fR0VUX0NBUF9QRVJNX0lOQUNUSVZFX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhY2FwLnBlcm1fZmxhZ3MuZGVhY3RpdmF0ZWQpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2FjdGl2ZSk7CkBAIC02NTYsMzEgKzYzMiwxNSBAQAogc3NpemVfdCB0cG1fc2hvd19vd25lZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsCiAJCQljaGFyICpidWYpCiB7Ci0JdTggKmRhdGE7CisJY2FwX3QgY2FwOwogCXNzaXplX3QgcmM7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9PV05FUjsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgb3duZXIgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX09XTkVSLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgb3duZXIgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YVtUUE1fR0VUX0NBUF9SRVRfQk9PTF8xX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYXAub3duZWQpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X293bmVkKTsKQEAgLTY4OCwxMTYgKzY0OCwxODAgQEAKIHNzaXplX3QgdHBtX3Nob3dfdGVtcF9kZWFjdGl2YXRlZChzdHJ1Y3QgZGV2aWNlICogZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfRkxBRzsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUdfVk9MOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0ZW1wb3Jhcnkgc3RhdGUiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7CisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9GTEFHX1ZPTCwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRlbXBvcmFyeSBzdGF0ZSIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhW1RQTV9HRVRfQ0FQX1RFTVBfSU5BQ1RJVkVfSURYXSk7Ci0KLQlrZnJlZShkYXRhKTsKKwlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGNhcC5zdGNsZWFyX2ZsYWdzLmRlYWN0aXZhdGVkKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd190ZW1wX2RlYWN0aXZhdGVkKTsKIAotc3RhdGljIGNvbnN0IHU4IHBjcnJlYWRbXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDE0LAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMjEsCQkvKiBUUE1fT1JEX1BjclJlYWQgKi8KLQkwLCAwLCAwLCAwCQkvKiBQQ1IgaW5kZXggKi8KKy8qCisgKiB0cG1fY2hpcF9maW5kX2dldCAtIHJldHVybiB0cG1fY2hpcCBmb3IgZ2l2ZW4gY2hpcCBudW1iZXIKKyAqLworc3RhdGljIHN0cnVjdCB0cG1fY2hpcCAqdHBtX2NoaXBfZmluZF9nZXQoaW50IGNoaXBfbnVtKQoreworCXN0cnVjdCB0cG1fY2hpcCAqcG9zLCAqY2hpcCA9IE5VTEw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9zLCAmdHBtX2NoaXBfbGlzdCwgbGlzdCkgeworCQlpZiAoY2hpcF9udW0gIT0gVFBNX0FOWV9OVU0gJiYgY2hpcF9udW0gIT0gcG9zLT5kZXZfbnVtKQorCQkJY29udGludWU7CisKKwkJaWYgKHRyeV9tb2R1bGVfZ2V0KHBvcy0+ZGV2LT5kcml2ZXItPm93bmVyKSkgeworCQkJY2hpcCA9IHBvczsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBjaGlwOworfQorCisjZGVmaW5lIFRQTV9PUkRJTkFMX1BDUlJFQUQgY3B1X3RvX2JlMzIoMjEpCisjZGVmaW5lIFJFQURfUENSX1JFU1VMVF9TSVpFIDMwCitzdGF0aWMgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgcGNycmVhZF9oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDE0KSwKKwkub3JkaW5hbCA9IFRQTV9PUkRJTkFMX1BDUlJFQUQKIH07CiAKK2ludCBfX3RwbV9wY3JfcmVhZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1ZikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRwbV9jbWRfdCBjbWQ7CisKKwljbWQuaGVhZGVyLmluID0gcGNycmVhZF9oZWFkZXI7CisJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKKwlCVUlMRF9CVUdfT04oY21kLmhlYWRlci5pbi5sZW5ndGggPiBSRUFEX1BDUl9SRVNVTFRfU0laRSk7CisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJCQkgICJhdHRlbXB0aW5nIHRvIHJlYWQgYSBwY3IgdmFsdWUiKTsKKworCWlmIChyYyA9PSAwKQorCQltZW1jcHkocmVzX2J1ZiwgY21kLnBhcmFtcy5wY3JyZWFkX291dC5wY3JfcmVzdWx0LAorCQkgICAgICAgVFBNX0RJR0VTVF9TSVpFKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogdHBtX3Bjcl9yZWFkIC0gcmVhZCBhIHBjciB2YWx1ZQorICogQGNoaXBfbnVtOiAJdHBtIGlkeCAjIG9yIEFOWQorICogQHBjcl9pZHg6CXBjciBpZHggdG8gcmV0cmlldmUKKyAqIEByZXNfYnVmOiAJVFBNX1BDUiB2YWx1ZQorICogCQlzaXplIG9mIHJlc19idWYgaXMgMjAgYnl0ZXMgKG9yIE5VTEwgaWYgeW91IGRvbid0IGNhcmUpCisgKgorICogVGhlIFRQTSBkcml2ZXIgc2hvdWxkIGJlIGJ1aWx0LWluLCBidXQgZm9yIHdoYXRldmVyIHJlYXNvbiBpdAorICogaXNuJ3QsIHByb3RlY3QgYWdhaW5zdCB0aGUgY2hpcCBkaXNhcHBlYXJpbmcsIGJ5IGluY3JlbWVudGluZworICogdGhlIG1vZHVsZSB1c2FnZSBjb3VudC4KKyAqLworaW50IHRwbV9wY3JfcmVhZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1ZikKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisJaW50IHJjOworCisJY2hpcCA9IHRwbV9jaGlwX2ZpbmRfZ2V0KGNoaXBfbnVtKTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyYyA9IF9fdHBtX3Bjcl9yZWFkKGNoaXAsIHBjcl9pZHgsIHJlc19idWYpOworCW1vZHVsZV9wdXQoY2hpcC0+ZGV2LT5kcml2ZXItPm93bmVyKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcGNyX3JlYWQpOworCisvKioKKyAqIHRwbV9wY3JfZXh0ZW5kIC0gZXh0ZW5kIHBjciB2YWx1ZSB3aXRoIGhhc2gKKyAqIEBjaGlwX251bTogCXRwbSBpZHggIyBvciBBTiYKKyAqIEBwY3JfaWR4OglwY3IgaWR4IHRvIGV4dGVuZAorICogQGhhc2g6IAloYXNoIHZhbHVlIHVzZWQgdG8gZXh0ZW5kIHBjciB2YWx1ZQorICoKKyAqIFRoZSBUUE0gZHJpdmVyIHNob3VsZCBiZSBidWlsdC1pbiwgYnV0IGZvciB3aGF0ZXZlciByZWFzb24gaXQKKyAqIGlzbid0LCBwcm90ZWN0IGFnYWluc3QgdGhlIGNoaXAgZGlzYXBwZWFyaW5nLCBieSBpbmNyZW1lbnRpbmcKKyAqIHRoZSBtb2R1bGUgdXNhZ2UgY291bnQuCisgKi8KKyNkZWZpbmUgVFBNX09SRF9QQ1JfRVhURU5EIGNwdV90b19iZTMyKDIwKQorI2RlZmluZSBFWFRFTkRfUENSX1NJWkUgMzQKK3N0YXRpYyBzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciBwY3JleHRlbmRfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigzNCksCisJLm9yZGluYWwgPSBUUE1fT1JEX1BDUl9FWFRFTkQKK307CisKK2ludCB0cG1fcGNyX2V4dGVuZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCBjb25zdCB1OCAqaGFzaCkKK3sKKwlzdHJ1Y3QgdHBtX2NtZF90IGNtZDsKKwlpbnQgcmM7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCisJY2hpcCA9IHRwbV9jaGlwX2ZpbmRfZ2V0KGNoaXBfbnVtKTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNtZC5oZWFkZXIuaW4gPSBwY3JleHRlbmRfaGVhZGVyOworCUJVSUxEX0JVR19PTihiZTMyX3RvX2NwdShjbWQuaGVhZGVyLmluLmxlbmd0aCkgPiBFWFRFTkRfUENSX1NJWkUpOworCWNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKKwltZW1jcHkoY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uaGFzaCwgaGFzaCwgVFBNX0RJR0VTVF9TSVpFKTsKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBjbWQuaGVhZGVyLmluLmxlbmd0aCwKKwkJCSAgImF0dGVtcHRpbmcgZXh0ZW5kIGEgUENSIHZhbHVlIik7CisKKwltb2R1bGVfcHV0KGNoaXAtPmRldi0+ZHJpdmVyLT5vd25lcik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Bjcl9leHRlbmQpOworCiBzc2l6ZV90IHRwbV9zaG93X3BjcnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKKwl1OCBkaWdlc3RbVFBNX0RJR0VTVF9TSVpFXTsKIAlzc2l6ZV90IHJjOwogCWludCBpLCBqLCBudW1fcGNyczsKLQlfX2JlMzIgaW5kZXg7CiAJY2hhciAqc3RyID0gYnVmOwotCiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfUENSOwotCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAorCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9QQ1IsICZjYXAsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBQQ1JTIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQogCi0JbnVtX3BjcnMgPSBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyAxNCkpKTsKKwludW1fcGNycyA9IGJlMzJfdG9fY3B1KGNhcC5udW1fcGNycyk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9wY3JzOyBpKyspIHsKLQkJbWVtY3B5KGRhdGEsIHBjcnJlYWQsIHNpemVvZihwY3JyZWFkKSk7Ci0JCWluZGV4ID0gY3B1X3RvX2JlMzIoaSk7Ci0JCW1lbWNweShkYXRhICsgMTAsICZpbmRleCwgNCk7Ci0JCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCQkiYXR0ZW1wdGluZyB0byByZWFkIGEgUENSIik7CisJCXJjID0gX190cG1fcGNyX3JlYWQoY2hpcCwgaSwgZGlnZXN0KTsKIAkJaWYgKHJjKQotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiUENSLSUwMmQ6ICIsIGkpOwogCQlmb3IgKGogPSAwOyBqIDwgVFBNX0RJR0VTVF9TSVpFOyBqKyspCi0JCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlMDJYICIsICooZGF0YSArIDEwICsgaikpOworCQkJc3RyICs9IHNwcmludGYoc3RyLCAiJTAyWCAiLCBkaWdlc3Rbal0pOwogCQlzdHIgKz0gc3ByaW50ZihzdHIsICJcbiIpOwogCX0KLW91dDoKLQlrZnJlZShkYXRhKTsKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfcGNycyk7CiAKICNkZWZpbmUgIFJFQURfUFVCRUtfUkVTVUxUX1NJWkUgMzE0Ci1zdGF0aWMgY29uc3QgdTggcmVhZHB1YmVrW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAzMCwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDEyNCwJCS8qIFRQTV9PUkRfUmVhZFB1YmVrICovCisjZGVmaW5lIFRQTV9PUkRfUkVBRFBVQkVLIGNwdV90b19iZTMyKDEyNCkKK3N0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHRwbV9yZWFkcHViZWtfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigzMCksCisJLm9yZGluYWwgPSBUUE1fT1JEX1JFQURQVUJFSwogfTsKIAogc3NpemVfdCB0cG1fc2hvd19wdWJlayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICAgY2hhciAqYnVmKQogewogCXU4ICpkYXRhOworCXN0cnVjdCB0cG1fY21kX3QgdHBtX2NtZDsKIAlzc2l6ZV90IGVycjsKIAlpbnQgaSwgcmM7CiAJY2hhciAqc3RyID0gYnVmOwogCiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkYXRhID0ga3phbGxvYyhSRUFEX1BVQkVLX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHJlYWRwdWJlaywgc2l6ZW9mKHJlYWRwdWJlaykpOwotCi0JZXJyID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFJFQURfUFVCRUtfUkVTVUxUX1NJWkUsCisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fcmVhZHB1YmVrX2hlYWRlcjsKKwllcnIgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFJFQURfUFVCRUtfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byByZWFkIHRoZSBQVUJFSyIpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtODEyLDcgKzgzNiw3IEBACiAJICAgMjU2IGJ5dGUgbW9kdWx1cwogCSAgIGlnbm9yZSBjaGVja3N1bSAyMCBieXRlcwogCSAqLwotCisJZGF0YSA9IHRwbV9jbWQucGFyYW1zLnJlYWRwdWJla19vdXRfYnVmZmVyOwogCXN0ciArPQogCSAgICBzcHJpbnRmKHN0ciwKIAkJICAgICJBbGdvcml0aG06ICUwMlggJTAyWCAlMDJYICUwMlhcbkVuY3NjaGVtZTogJTAyWCAlMDJYXG4iCkBAIC04MzIsNjUgKzg1NiwzMyBAQAogCX0KIG91dDoKIAlyYyA9IHN0ciAtIGJ1ZjsKLQlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19wdWJlayk7CiAKLSNkZWZpbmUgQ0FQX1ZFUlNJT05fMV8xIDYKLSNkZWZpbmUgQ0FQX1ZFUlNJT05fMV8yIDB4MUEKLSNkZWZpbmUgQ0FQX1ZFUlNJT05fSURYIDEzCi1zdGF0aWMgY29uc3QgdTggY2FwX3ZlcnNpb25bXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDE4LAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMTAxLAkJLyogVFBNX09SRF9HZXRDYXBhYmlsaXR5ICovCi0JMCwgMCwgMCwgMCwKLQkwLCAwLCAwLCAwCi19OwogCiBzc2l6ZV90IHRwbV9zaG93X2NhcHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUjsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSLCAmY2FwLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXIiKTsKLQlpZiAocmMpIHsKLQkJa2ZyZWUoZGF0YSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXN0ciArPSBzcHJpbnRmKHN0ciwgIk1hbnVmYWN0dXJlcjogMHgleFxuIiwKLQkJICAgICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOwotCi0JbWVtY3B5KGRhdGEsIGNhcF92ZXJzaW9uLCBzaXplb2YoY2FwX3ZlcnNpb24pKTsKLQlkYXRhW0NBUF9WRVJTSU9OX0lEWF0gPSBDQVBfVkVSU0lPTl8xXzE7Ci0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjEgdmVyc2lvbiIpOwogCWlmIChyYykKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOworCXN0ciArPSBzcHJpbnRmKHN0ciwgIk1hbnVmYWN0dXJlcjogMHgleFxuIiwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGNhcC5tYW51ZmFjdHVyZXJfaWQpKTsKIAorCXJjID0gdHBtX2dldGNhcChkZXYsIENBUF9WRVJTSU9OXzFfMSwgJmNhcCwKKwkJICAgICAgICAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMSB2ZXJzaW9uIik7CisJaWYgKHJjKQorCQlyZXR1cm4gMDsKIAlzdHIgKz0gc3ByaW50ZihzdHIsCiAJCSAgICAgICAiVENHIHZlcnNpb246ICVkLiVkXG5GaXJtd2FyZSB2ZXJzaW9uOiAlZC4lZFxuIiwKLQkJICAgICAgIChpbnQpIGRhdGFbMTRdLCAoaW50KSBkYXRhWzE1XSwgKGludCkgZGF0YVsxNl0sCi0JCSAgICAgICAoaW50KSBkYXRhWzE3XSk7Ci0KLW91dDoKLQlrZnJlZShkYXRhKTsKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbi5NYWpvciwgY2FwLnRwbV92ZXJzaW9uLk1pbm9yLAorCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uLnJldk1ham9yLCBjYXAudHBtX3ZlcnNpb24ucmV2TWlub3IpOwogCXJldHVybiBzdHIgLSBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19jYXBzKTsKQEAgLTg5OCw1MSArODkwLDI1IEBACiBzc2l6ZV90IHRwbV9zaG93X2NhcHNfMV8yKHN0cnVjdCBkZXZpY2UgKiBkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwgY2hhciAqYnVmKQogewotCXU4ICpkYXRhOwotCXNzaXplX3QgbGVuOworCWNhcF90IGNhcDsKKwlzc2l6ZV90IHJjOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUjsKLQotCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUpOwotCWlmIChsZW4gPD0gVFBNX0VSUk9SX1NJWkUpIHsKLQkJZGV2X2RiZyhjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICIKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbWFudWZhY3R1cmVyXG4iLAotCQkJYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKSk7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIsICZjYXAsCisJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG1hbnVmYWN0dXJlciIpOworCWlmIChyYykKIAkJcmV0dXJuIDA7Ci0JfQotCiAJc3RyICs9IHNwcmludGYoc3RyLCAiTWFudWZhY3R1cmVyOiAweCV4XG4iLAotCQkgICAgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7Ci0KLQltZW1jcHkoZGF0YSwgY2FwX3ZlcnNpb24sIHNpemVvZihjYXBfdmVyc2lvbikpOwotCWRhdGFbQ0FQX1ZFUlNJT05fSURYXSA9IENBUF9WRVJTSU9OXzFfMjsKLQotCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUpOwotCWlmIChsZW4gPD0gVFBNX0VSUk9SX1NJWkUpIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICIKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4yIHZlcnNpb25cbiIsCi0JCQliZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fUkVUX0NPREVfSURYKSkpKTsKLQkJZ290byBvdXQ7Ci0JfQorCQkgICAgICAgYmUzMl90b19jcHUoY2FwLm1hbnVmYWN0dXJlcl9pZCkpOworCXJjID0gdHBtX2dldGNhcChkZXYsIENBUF9WRVJTSU9OXzFfMiwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMiB2ZXJzaW9uIik7CisJaWYgKHJjKQorCQlyZXR1cm4gMDsKIAlzdHIgKz0gc3ByaW50ZihzdHIsCiAJCSAgICAgICAiVENHIHZlcnNpb246ICVkLiVkXG5GaXJtd2FyZSB2ZXJzaW9uOiAlZC4lZFxuIiwKLQkJICAgICAgIChpbnQpIGRhdGFbMTZdLCAoaW50KSBkYXRhWzE3XSwgKGludCkgZGF0YVsxOF0sCi0JCSAgICAgICAoaW50KSBkYXRhWzE5XSk7Ci0KLW91dDoKLQlrZnJlZShkYXRhKTsKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbl8xXzIuTWFqb3IsIGNhcC50cG1fdmVyc2lvbl8xXzIuTWlub3IsCisJCSAgICAgICBjYXAudHBtX3ZlcnNpb25fMV8yLnJldk1ham9yLAorCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uXzFfMi5yZXZNaW5vcik7CiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X2NhcHNfMV8yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmggYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCmluZGV4IDhlMzBkZjQuLjhlMDBiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RwbS5oPgogCiBlbnVtIHRwbV90aW1lb3V0IHsKIAlUUE1fVElNRU9VVCA9IDUsCS8qIG1zZWNzICovCkBAIC0xMjMsNiArMTI0LDE0NyBAQAogCW91dGIoaW5kZXgsIGJhc2UpOwogCW91dGIodmFsdWUgJiAweEZGLCBiYXNlKzEpOwogfQorc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgeworCV9fYmUxNgl0YWc7CisJX19iZTMyCWxlbmd0aDsKKwlfX2JlMzIJb3JkaW5hbDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRwbV9vdXRwdXRfaGVhZGVyIHsKKwlfX2JlMTYJdGFnOworCV9fYmUzMglsZW5ndGg7CisJX19iZTMyCXJldHVybl9jb2RlOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJc3RjbGVhcl9mbGFnc190IHsKKwlfX2JlMTYJdGFnOworCXU4CWRlYWN0aXZhdGVkOworCXU4CWRpc2FibGVGb3JjZUNsZWFyOworCXU4CXBoeXNpY2FsUHJlc2VuY2U7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUxvY2s7CisJdTgJYkdsb2JhbExvY2s7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fdmVyc2lvbl90IHsKKwl1OAlNYWpvcjsKKwl1OAlNaW5vcjsKKwl1OAlyZXZNYWpvcjsKKwl1OAlyZXZNaW5vcjsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV92ZXJzaW9uXzFfMl90IHsKKwlfX2JlMTYJdGFnOworCXU4CU1ham9yOworCXU4CU1pbm9yOworCXU4CXJldk1ham9yOworCXU4CXJldk1pbm9yOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdGltZW91dF90IHsKKwlfX2JlMzIJYTsKKwlfX2JlMzIJYjsKKwlfX2JlMzIJYzsKKwlfX2JlMzIJZDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGR1cmF0aW9uX3QgeworCV9fYmUzMgl0cG1fc2hvcnQ7CisJX19iZTMyCXRwbV9tZWRpdW07CisJX19iZTMyCXRwbV9sb25nOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcGVybWFuZW50X2ZsYWdzX3QgeworCV9fYmUxNgl0YWc7CisJdTgJZGlzYWJsZTsKKwl1OAlvd25lcnNoaXA7CisJdTgJZGVhY3RpdmF0ZWQ7CisJdTgJcmVhZFB1YmVrOworCXU4CWRpc2FibGVPd25lckNsZWFyOworCXU4CWFsbG93TWFpbnRlbmFuY2U7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUxpZmV0aW1lTG9jazsKKwl1OAlwaHlzaWNhbFByZXNlbmNlSFdFbmFibGU7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUNNREVuYWJsZTsKKwl1OAlDRUtQVXNlZDsKKwl1OAlUUE1wb3N0OworCXU4CVRQTXBvc3RMb2NrOworCXU4CUZJUFM7CisJdTgJb3BlcmF0b3I7CisJdTgJZW5hYmxlUmV2b2tlRUs7CisJdTgJbnZMb2NrZWQ7CisJdTgJcmVhZFNSS1B1YjsKKwl1OAl0cG1Fc3RhYmxpc2hlZDsKKwl1OAltYWludGVuYW5jZURvbmU7CisJdTgJZGlzYWJsZUZ1bGxEQUxvZ2ljSW5mbzsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0CXBlcm1hbmVudF9mbGFnc190IHBlcm1fZmxhZ3M7CisJc3RydWN0CXN0Y2xlYXJfZmxhZ3NfdAlzdGNsZWFyX2ZsYWdzOworCWJvb2wJb3duZWQ7CisJX19iZTMyCW51bV9wY3JzOworCXN0cnVjdAl0cG1fdmVyc2lvbl90CXRwbV92ZXJzaW9uOworCXN0cnVjdAl0cG1fdmVyc2lvbl8xXzJfdCB0cG1fdmVyc2lvbl8xXzI7CisJX19iZTMyCW1hbnVmYWN0dXJlcl9pZDsKKwlzdHJ1Y3QgdGltZW91dF90ICB0aW1lb3V0OworCXN0cnVjdCBkdXJhdGlvbl90IGR1cmF0aW9uOworfSBjYXBfdDsKKworc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX2luIHsKKwlfX2JlMzIJY2FwOworCV9fYmUzMglzdWJjYXBfc2l6ZTsKKwlfX2JlMzIJc3ViY2FwOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfb3V0IHsKKwlfX2JlMzIJY2FwX3NpemU7CisJY2FwX3QJY2FwOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX3JlYWRwdWJla19wYXJhbXNfb3V0IHsKKwl1OAlhbGdvcml0aG1bNF07CisJdTgJZW5jc2NoZW1lWzJdOworCXU4CXNpZ3NjaGVtZVsyXTsKKwl1OAlwYXJhbWV0ZXJzWzEyXTsgLyphc3N1bWluZyBSU0EqLworCV9fYmUzMglrZXlzaXplOworCXU4CW1vZHVsdXNbMjU2XTsKKwl1OAljaGVja3N1bVsyMF07Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdAl0cG1faW5wdXRfaGVhZGVyIGluOworCXN0cnVjdAl0cG1fb3V0cHV0X2hlYWRlciBvdXQ7Cit9IHRwbV9jbWRfaGVhZGVyOworCisjZGVmaW5lIFRQTV9ESUdFU1RfU0laRSAyMAorc3RydWN0IHRwbV9wY3JyZWFkX291dCB7CisJdTgJcGNyX3Jlc3VsdFtUUE1fRElHRVNUX1NJWkVdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdHBtX3BjcnJlYWRfaW4geworCV9fYmUzMglwY3JfaWR4OworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdHBtX3BjcmV4dGVuZF9pbiB7CisJX19iZTMyCXBjcl9pZHg7CisJdTgJaGFzaFtUUE1fRElHRVNUX1NJWkVdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QJdHBtX2dldGNhcF9wYXJhbXNfb3V0IGdldGNhcF9vdXQ7CisJc3RydWN0CXRwbV9yZWFkcHViZWtfcGFyYW1zX291dCByZWFkcHViZWtfb3V0OworCXU4CXJlYWRwdWJla19vdXRfYnVmZmVyW3NpemVvZihzdHJ1Y3QgdHBtX3JlYWRwdWJla19wYXJhbXNfb3V0KV07CisJc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX2luIGdldGNhcF9pbjsKKwlzdHJ1Y3QJdHBtX3BjcnJlYWRfaW4JcGNycmVhZF9pbjsKKwlzdHJ1Y3QJdHBtX3BjcnJlYWRfb3V0CXBjcnJlYWRfb3V0OworCXN0cnVjdAl0cG1fcGNyZXh0ZW5kX2luIHBjcmV4dGVuZF9pbjsKK30gdHBtX2NtZF9wYXJhbXM7CisKK3N0cnVjdCB0cG1fY21kX3QgeworCXRwbV9jbWRfaGVhZGVyCWhlYWRlcjsKKwl0cG1fY21kX3BhcmFtcwlwYXJhbXM7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3NzaXplX3QJdHBtX2dldGNhcChzdHJ1Y3QgZGV2aWNlICosIF9fYmUzMiwgY2FwX3QgKiwgY29uc3QgY2hhciAqKTsKIAogZXh0ZXJuIHZvaWQgdHBtX2dldF90aW1lb3V0cyhzdHJ1Y3QgdHBtX2NoaXAgKik7CiBleHRlcm4gdm9pZCB0cG1fZ2VuX2ludGVycnVwdChzdHJ1Y3QgdHBtX2NoaXAgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYwppbmRleCBkMGU3OTI2Li5jNjRhMWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKQEAgLTE2OCwxMiArMTY4LDIyIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXRtbF9kcnYgPSB7Ci0JLm5hbWUgPSAidHBtX2F0bWVsIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5zdXNwZW5kID0gdHBtX3BtX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHRwbV9wbV9yZXN1bWUsCitzdGF0aWMgaW50IHRwbV9hdG1sX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiB0cG1fcG1fc3VzcGVuZCgmZGV2LT5kZXYsIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgdHBtX2F0bWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdHBtX3BtX3Jlc3VtZSgmZGV2LT5kZXYpOworfQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtbF9kcnYgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBtX2F0bWVsIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSB0cG1fYXRtbF9zdXNwZW5kLAorCS5yZXN1bWUgPSB0cG1fYXRtbF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2F0bWVsKHZvaWQpCkBAIC0xODQsNyArMTk0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGJhc2U7CiAJc3RydWN0ICB0cG1fY2hpcCAqY2hpcDsKIAotCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZhdG1sX2Rydik7CisJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF0bWxfZHJ2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjIzLDEzICsyMzMsMTMgQEAKIAkJYXRtZWxfcmVsZWFzZV9yZWdpb24oYmFzZSwKIAkJCQkgICAgIHJlZ2lvbl9zaXplKTsKIGVycl91bnJlZ19kcnY6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfYXRtZWwodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CiAJYXRtbF9wbGF0X3JlbW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IDcxN2FmN2EuLmFlYzE5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC02NTQsMTIgKzY1NCwyMiBAQAogCQkgICAgc2l6ZW9mKHRwbV9wbnBfdGJsW1RJU19ISURfVVNSX0lEWF0uaWQpLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaGlkLCAiU2V0IGFkZGl0aW9uYWwgc3BlY2lmaWMgSElEIGZvciB0aGlzIGRyaXZlciB0byBwcm9iZSIpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdGlzX2RydiA9IHsKLQkubmFtZSA9ICJ0cG1fdGlzIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5zdXNwZW5kID0gdHBtX3BtX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHRwbV9wbV9yZXN1bWUsCitzdGF0aWMgaW50IHRwbV90aXNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHRwbV9wbV9zdXNwZW5kKCZkZXYtPmRldiwgbXNnKTsKK30KKworc3RhdGljIGludCB0cG1fdGlzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKK30KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRpc19kcnYgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBtX3RpcyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kID0gdHBtX3Rpc19zdXNwZW5kLAorCS5yZXN1bWUgPSB0cG1fdGlzX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwpAQCAtNjcyLDE0ICs2ODIsMTQgQEAKIAlpbnQgcmM7CiAKIAlpZiAoZm9yY2UpIHsKLQkJcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJnRpc19kcnYpOworCQlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGlzX2Rydik7CiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CiAJCWlmIChJU19FUlIocGRldj1wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJ0cG1fdGlzIiwgLTEsIE5VTEwsIDApKSkKIAkJCXJldHVybiBQVFJfRVJSKHBkZXYpOwogCQlpZigocmM9dHBtX3Rpc19pbml0KCZwZGV2LT5kZXYsIFRJU19NRU1fQkFTRSwgVElTX01FTV9MRU4sIDApKSAhPSAwKSB7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKIAkJfQogCQlyZXR1cm4gcmM7CiAJfQpAQCAtNzExLDcgKzcyMSw3IEBACiAKIAlpZiAoZm9yY2UpIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOwogCX0gZWxzZQogCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJnRpc19wbnBfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBiYzg0ZTEyLi4yMjRmMjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0yMTYyLDEzICsyMTYyLDEyIEBACiAJaWYgKGdldF91c2VyKG5vbmJsb2NrLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkvKiBmaWxlLT5mX2ZsYWdzIGlzIHN0aWxsIEJLTCBwcm90ZWN0ZWQgaW4gdGhlIGZzIGxheWVyIC0gdm9taXQgKi8KLQlsb2NrX2tlcm5lbCgpOworCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlpZiAobm9uYmxvY2spCiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAllbHNlCiAJCWZpbGUtPmZfZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKaW5kZXggNGYzYjNmOS4uZDk0ZDI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCisrKyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwpAQCAtNDc5LDE4ICs0NzksMTggQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqdmNfY2xhc3M7CiAKLXZvaWQgdmNzX21ha2Vfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgdmNzX21ha2Vfc3lzZnMoaW50IGluZGV4KQogewotCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEpLCBOVUxMLAotCQkgICAgICAidmNzJXUiLCB0dHktPmluZGV4ICsgMSk7Ci0JZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMTI5KSwgTlVMTCwKLQkJICAgICAgInZjc2EldSIsIHR0eS0+aW5kZXggKyAxKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMSksIE5VTEwsCisJCSAgICAgICJ2Y3MldSIsIGluZGV4ICsgMSk7CisJZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEyOSksIE5VTEwsCisJCSAgICAgICJ2Y3NhJXUiLCBpbmRleCArIDEpOwogfQogCi12b2lkIHZjc19yZW1vdmVfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgdmNzX3JlbW92ZV9zeXNmcyhpbnQgaW5kZXgpCiB7Ci0JZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEpKTsKLQlkZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMTI5KSk7CisJZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxKSk7CisJZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxMjkpKTsKIH0KIAogaW50IF9faW5pdCB2Y3NfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCA3OTAwYmQ2Li4yYzFkMTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtNzc4LDYgKzc3OCw3IEBACiAJICAgIH0KIAkgICAgdmMtPnZjX2ttYWxsb2NlZCA9IDE7CiAJICAgIHZjX2luaXQodmMsIHZjLT52Y19yb3dzLCB2Yy0+dmNfY29scywgMSk7CisJICAgIHZjc19tYWtlX3N5c2ZzKGN1cnJjb25zKTsKIAkgICAgYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX0FMTE9DQVRFLCAmcGFyYW0pOwogCX0KIAlyZXR1cm4gMDsKQEAgLTk4Nyw3ICs5ODgsOSBAQAogCWlmICh2Y19jb25zX2FsbG9jYXRlZChjdXJyY29ucykpIHsKIAkJc3RydWN0IHZjX2RhdGEgKnZjID0gdmNfY29uc1tjdXJyY29uc10uZDsKIAkJc3RydWN0IHZ0X25vdGlmaWVyX3BhcmFtIHBhcmFtID0geyAudmMgPSB2YyB9OworCiAJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZ2dF9ub3RpZmllcl9saXN0LCBWVF9ERUFMTE9DQVRFLCAmcGFyYW0pOworCQl2Y3NfcmVtb3ZlX3N5c2ZzKGN1cnJjb25zKTsKIAkJdmMtPnZjX3N3LT5jb25fZGVpbml0KHZjKTsKIAkJcHV0X3BpZCh2Yy0+dnRfcGlkKTsKIAkJbW9kdWxlX3B1dCh2Yy0+dmNfc3ctPm93bmVyKTsKQEAgLTI3NzUsNyArMjc3OCw2IEBACiAJCQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnIHw9IElVVEY4OwogCQkJZWxzZQogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyAmPSB+SVVURjg7Ci0JCQl2Y3NfbWFrZV9zeXNmcyh0dHkpOwogCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtMjc5NSw3ICsyNzk3LDYgQEAKIAlCVUdfT04odmMgPT0gTlVMTCk7CiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCXZjLT52Y190dHkgPSBOVUxMOwotCXZjc19yZW1vdmVfc3lzZnModHR5KTsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAJdHR5X3NodXRkb3duKHR0eSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQppbmRleCAxNTI1ODgyLi4xZWZiMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKQEAgLTIsMyArMiw0IEBACiBvYmotJChDT05GSUdfWDg2X0NZQ0xPTkVfVElNRVIpCSs9IGN5Y2xvbmUubwogb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gYWNwaV9wbS5vCiBvYmotJChDT05GSUdfU0N4MjAwSFJfVElNRVIpCSs9IHNjeDIwMF9ocnQubworb2JqLSQoQ09ORklHX1NIX1RJTUVSX0NNVCkJKz0gc2hfY210Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODNiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorICogU3VwZXJIIFRpbWVyIFN1cHBvcnQgLSBDTVQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY210Lmg+CisKK3N0cnVjdCBzaF9jbXRfcHJpdiB7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBsb25nIHdpZHRoOyAvKiAxNiBvciAzMiBiaXQgdmVyc2lvbiBvZiBoYXJkd2FyZSBibG9jayAqLworCXVuc2lnbmVkIGxvbmcgb3ZlcmZsb3dfYml0OworCXVuc2lnbmVkIGxvbmcgY2xlYXJfYml0czsKKwlzdHJ1Y3QgaXJxYWN0aW9uIGlycWFjdGlvbjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgbmV4dF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIG1heF9tYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2VkOworCXVuc2lnbmVkIGxvbmcgdG90YWxfY3ljbGVzOworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhzaF9jbXRfbG9jayk7CisKKyNkZWZpbmUgQ01TVFIgLTEgLyogc2hhcmVkIHJlZ2lzdGVyICovCisjZGVmaW5lIENNQ1NSIDAgLyogY2hhbm5lbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNOVCAxIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01DT1IgMiAvKiBjaGFubmVsIHJlZ2lzdGVyICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaF9jbXRfcmVhZChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCByZWdfbnIpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXZvaWQgX19pb21lbSAqYmFzZSA9IHAtPm1hcGJhc2U7CisJdW5zaWduZWQgbG9uZyBvZmZzOworCisJaWYgKHJlZ19uciA9PSBDTVNUUikgeworCQlvZmZzID0gMDsKKwkJYmFzZSAtPSBjZmctPmNoYW5uZWxfb2Zmc2V0OworCX0gZWxzZQorCQlvZmZzID0gcmVnX25yOworCisJaWYgKHAtPndpZHRoID09IDE2KQorCQlvZmZzIDw8PSAxOworCWVsc2UgeworCQlvZmZzIDw8PSAyOworCQlpZiAoKHJlZ19uciA9PSBDTUNOVCkgfHwgKHJlZ19uciA9PSBDTUNPUikpCisJCQlyZXR1cm4gaW9yZWFkMzIoYmFzZSArIG9mZnMpOworCX0KKworCXJldHVybiBpb3JlYWQxNihiYXNlICsgb2Zmcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9jbXRfd3JpdGUoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgcmVnX25yLAorCQkJCXVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXZvaWQgX19pb21lbSAqYmFzZSA9IHAtPm1hcGJhc2U7CisJdW5zaWduZWQgbG9uZyBvZmZzOworCisJaWYgKHJlZ19uciA9PSBDTVNUUikgeworCQlvZmZzID0gMDsKKwkJYmFzZSAtPSBjZmctPmNoYW5uZWxfb2Zmc2V0OworCX0gZWxzZQorCQlvZmZzID0gcmVnX25yOworCisJaWYgKHAtPndpZHRoID09IDE2KQorCQlvZmZzIDw8PSAxOworCWVsc2UgeworCQlvZmZzIDw8PSAyOworCQlpZiAoKHJlZ19uciA9PSBDTUNOVCkgfHwgKHJlZ19uciA9PSBDTUNPUikpIHsKKwkJCWlvd3JpdGUzMih2YWx1ZSwgYmFzZSArIG9mZnMpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaW93cml0ZTE2KHZhbHVlLCBiYXNlICsgb2Zmcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2NtdF9nZXRfY291bnRlcihzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCisJCQkJCWludCAqaGFzX3dyYXBwZWQpCit7CisJdW5zaWduZWQgbG9uZyB2MSwgdjIsIHYzOworCisJLyogTWFrZSBzdXJlIHRoZSB0aW1lciB2YWx1ZSBpcyBzdGFibGUuIFN0b2xlbiBmcm9tIGFjcGlfcG0uYyAqLworCWRvIHsKKwkJdjEgPSBzaF9jbXRfcmVhZChwLCBDTUNOVCk7CisJCXYyID0gc2hfY210X3JlYWQocCwgQ01DTlQpOworCQl2MyA9IHNoX2NtdF9yZWFkKHAsIENNQ05UKTsKKwl9IHdoaWxlICh1bmxpa2VseSgodjEgPiB2MiAmJiB2MSA8IHYzKSB8fCAodjIgPiB2MyAmJiB2MiA8IHYxKQorCQkJICB8fCAodjMgPiB2MSAmJiB2MyA8IHYyKSkpOworCisJKmhhc193cmFwcGVkID0gc2hfY210X3JlYWQocCwgQ01DU1IpICYgcC0+b3ZlcmZsb3dfYml0OworCXJldHVybiB2MjsKK30KKworCitzdGF0aWMgdm9pZCBzaF9jbXRfc3RhcnRfc3RvcF9jaChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCBzdGFydCkKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsdWU7CisKKwkvKiBzdGFydCBzdG9wIHJlZ2lzdGVyIHNoYXJlZCBieSBtdWx0aXBsZSB0aW1lciBjaGFubmVscyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzaF9jbXRfbG9jaywgZmxhZ3MpOworCXZhbHVlID0gc2hfY210X3JlYWQocCwgQ01TVFIpOworCisJaWYgKHN0YXJ0KQorCQl2YWx1ZSB8PSAxIDw8IGNmZy0+dGltZXJfYml0OworCWVsc2UKKwkJdmFsdWUgJj0gfigxIDw8IGNmZy0+dGltZXJfYml0KTsKKworCXNoX2NtdF93cml0ZShwLCBDTVNUUiwgdmFsdWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNoX2NtdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X2VuYWJsZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgKnJhdGUpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwkvKiBlbmFibGUgY2xvY2sgKi8KKwlyZXQgPSBjbGtfZW5hYmxlKHAtPmNsayk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInNoX2NtdDogY2Fubm90IGVuYWJsZSBjbG9jayBcIiVzXCJcbiIsIGNmZy0+Y2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJKnJhdGUgPSBjbGtfZ2V0X3JhdGUocC0+Y2xrKSAvIDg7CisKKwkvKiBtYWtlIHN1cmUgY2hhbm5lbCBpcyBkaXNhYmxlZCAqLworCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDApOworCisJLyogY29uZmlndXJlIGNoYW5uZWwsIHBlcmlvZGljIG1vZGUgYW5kIG1heGltdW0gdGltZW91dCAqLworCWlmIChwLT53aWR0aCA9PSAxNikKKwkJc2hfY210X3dyaXRlKHAsIENNQ1NSLCAwKTsKKwllbHNlCisJCXNoX2NtdF93cml0ZShwLCBDTUNTUiwgMHgwMWE0KTsKKworCXNoX2NtdF93cml0ZShwLCBDTUNPUiwgMHhmZmZmZmZmZik7CisJc2hfY210X3dyaXRlKHAsIENNQ05ULCAwKTsKKworCS8qIGVuYWJsZSBjaGFubmVsICovCisJc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9kaXNhYmxlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCkKK3sKKwkvKiBkaXNhYmxlIGNoYW5uZWwgKi8KKwlzaF9jbXRfc3RhcnRfc3RvcF9jaChwLCAwKTsKKworCS8qIHN0b3AgY2xvY2sgKi8KKwljbGtfZGlzYWJsZShwLT5jbGspOworfQorCisvKiBwcml2YXRlIGZsYWdzICovCisjZGVmaW5lIEZMQUdfQ0xPQ0tFVkVOVCAoMSA8PCAwKQorI2RlZmluZSBGTEFHX0NMT0NLU09VUkNFICgxIDw8IDEpCisjZGVmaW5lIEZMQUdfUkVQUk9HUkFNICgxIDw8IDIpCisjZGVmaW5lIEZMQUdfU0tJUEVWRU5UICgxIDw8IDMpCisjZGVmaW5lIEZMQUdfSVJRQ09OVEVYVCAoMSA8PCA0KQorCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorCQkJCQkgICAgICBpbnQgYWJzb2x1dGUpCit7CisJdW5zaWduZWQgbG9uZyBuZXdfbWF0Y2g7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSA9IHAtPm5leHRfbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBkZWxheSA9IDA7CisJdW5zaWduZWQgbG9uZyBub3cgPSAwOworCWludCBoYXNfd3JhcHBlZDsKKworCW5vdyA9IHNoX2NtdF9nZXRfY291bnRlcihwLCAmaGFzX3dyYXBwZWQpOworCXAtPmZsYWdzIHw9IEZMQUdfUkVQUk9HUkFNOyAvKiBmb3JjZSByZXByb2dyYW0gKi8KKworCWlmIChoYXNfd3JhcHBlZCkgeworCQkvKiB3ZSdyZSBjb21wZXRpbmcgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisJCSAqICAtPiBsZXQgdGhlIGludGVycnVwdCBoYW5kbGVyIHJlcHJvZ3JhbSB0aGUgdGltZXIuCisJCSAqICAtPiBpbnRlcnJ1cHQgbnVtYmVyIHR3byBoYW5kbGVzIHRoZSBldmVudC4KKwkJICovCisJCXAtPmZsYWdzIHw9IEZMQUdfU0tJUEVWRU5UOworCQlyZXR1cm47CisJfQorCisJaWYgKGFic29sdXRlKQorCQlub3cgPSAwOworCisJZG8geworCQkvKiByZXByb2dyYW0gdGhlIHRpbWVyIGhhcmR3YXJlLAorCQkgKiBidXQgZG9uJ3Qgc2F2ZSB0aGUgbmV3IG1hdGNoIHZhbHVlIHlldC4KKwkJICovCisJCW5ld19tYXRjaCA9IG5vdyArIHZhbHVlICsgZGVsYXk7CisJCWlmIChuZXdfbWF0Y2ggPiBwLT5tYXhfbWF0Y2hfdmFsdWUpCisJCQluZXdfbWF0Y2ggPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisKKwkJc2hfY210X3dyaXRlKHAsIENNQ09SLCBuZXdfbWF0Y2gpOworCisJCW5vdyA9IHNoX2NtdF9nZXRfY291bnRlcihwLCAmaGFzX3dyYXBwZWQpOworCQlpZiAoaGFzX3dyYXBwZWQgJiYgKG5ld19tYXRjaCA+IHAtPm1hdGNoX3ZhbHVlKSkgeworCQkJLyogd2UgYXJlIGNoYW5naW5nIHRvIGEgZ3JlYXRlciBtYXRjaCB2YWx1ZSwKKwkJCSAqIHNvIHRoaXMgd3JhcCBtdXN0IGJlIGNhdXNlZCBieSB0aGUgY291bnRlcgorCQkJICogbWF0Y2hpbmcgdGhlIG9sZCB2YWx1ZS4KKwkJCSAqIC0+IGZpcnN0IGludGVycnVwdCByZXByb2dyYW1zIHRoZSB0aW1lci4KKwkJCSAqIC0+IGludGVycnVwdCBudW1iZXIgdHdvIGhhbmRsZXMgdGhlIGV2ZW50LgorCQkJICovCisJCQlwLT5mbGFncyB8PSBGTEFHX1NLSVBFVkVOVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGhhc193cmFwcGVkKSB7CisJCQkvKiB3ZSBhcmUgY2hhbmdpbmcgdG8gYSBzbWFsbGVyIG1hdGNoIHZhbHVlLAorCQkJICogc28gdGhlIHdyYXAgbXVzdCBiZSBjYXVzZWQgYnkgdGhlIGNvdW50ZXIKKwkJCSAqIG1hdGNoaW5nIHRoZSBuZXcgdmFsdWUuCisJCQkgKiAtPiBzYXZlIHByb2dyYW1tZWQgbWF0Y2ggdmFsdWUuCisJCQkgKiAtPiBsZXQgaXNyIGhhbmRsZSB0aGUgZXZlbnQuCisJCQkgKi8KKwkJCXAtPm1hdGNoX3ZhbHVlID0gbmV3X21hdGNoOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBiZSBzYWZlOiB2ZXJpZnkgaGFyZHdhcmUgc2V0dGluZ3MgKi8KKwkJaWYgKG5vdyA8IG5ld19tYXRjaCkgeworCQkJLyogdGltZXIgdmFsdWUgaXMgYmVsb3cgbWF0Y2ggdmFsdWUsIGFsbCBnb29kLgorCQkJICogdGhpcyBtYWtlcyBzdXJlIHdlIHdvbid0IG1pc3MgYW55IG1hdGNoIGV2ZW50cy4KKwkJCSAqIC0+IHNhdmUgcHJvZ3JhbW1lZCBtYXRjaCB2YWx1ZS4KKwkJCSAqIC0+IGxldCBpc3IgaGFuZGxlIHRoZSBldmVudC4KKwkJCSAqLworCQkJcC0+bWF0Y2hfdmFsdWUgPSBuZXdfbWF0Y2g7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHRoZSBjb3VudGVyIGhhcyByZWFjaGVkIGEgdmFsdWUgZ3JlYXRlcgorCQkgKiB0aGFuIG91ciBuZXcgbWF0Y2ggdmFsdWUuIGFuZCBzaW5jZSB0aGUKKwkJICogaGFzX3dyYXBwZWQgZmxhZyBpc24ndCBzZXQgd2UgbXVzdCBoYXZlCisJCSAqIHByb2dyYW1tZWQgYSB0b28gY2xvc2UgZXZlbnQuCisJCSAqIC0+IGluY3JlYXNlIGRlbGF5IGFuZCByZXRyeS4KKwkJICovCisJCWlmIChkZWxheSkKKwkJCWRlbGF5IDw8PSAxOworCQllbHNlCisJCQlkZWxheSA9IDE7CisKKwkJaWYgKCFkZWxheSkKKwkJCXByX3dhcm5pbmcoInNoX2NtdDogdG9vIGxvbmcgZGVsYXlcbiIpOworCisJfSB3aGlsZSAoZGVsYXkpOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfc2V0X25leHQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nIGRlbHRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGVsdGEgPiBwLT5tYXhfbWF0Y2hfdmFsdWUpCisJCXByX3dhcm5pbmcoInNoX2NtdDogZGVsdGEgb3V0IG9mIHJhbmdlXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IGRlbHRhOworCXNoX2NtdF9jbG9ja19ldmVudF9wcm9ncmFtX3ZlcmlmeShwLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9jbXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBkZXZfaWQ7CisKKwkvKiBjbGVhciBmbGFncyAqLworCXNoX2NtdF93cml0ZShwLCBDTUNTUiwgc2hfY210X3JlYWQocCwgQ01DU1IpICYgcC0+Y2xlYXJfYml0cyk7CisKKwkvKiB1cGRhdGUgY2xvY2sgc291cmNlIGNvdW50ZXIgdG8gYmVnaW4gd2l0aCBpZiBlbmFibGVkCisJICogdGhlIHdyYXAgZmxhZyBzaG91bGQgYmUgY2xlYXJlZCBieSB0aGUgdGltZXIgc3BlY2lmaWMKKwkgKiBpc3IgYmVmb3JlIHdlIGVuZCB1cCBoZXJlLgorCSAqLworCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tTT1VSQ0UpCisJCXAtPnRvdGFsX2N5Y2xlcyArPSBwLT5tYXRjaF92YWx1ZTsKKworCWlmICghKHAtPmZsYWdzICYgRkxBR19SRVBST0dSQU0pKQorCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCisJcC0+ZmxhZ3MgfD0gRkxBR19JUlFDT05URVhUOworCisJaWYgKHAtPmZsYWdzICYgRkxBR19DTE9DS0VWRU5UKSB7CisJCWlmICghKHAtPmZsYWdzICYgRkxBR19TS0lQRVZFTlQpKSB7CisJCQlpZiAocC0+Y2VkLm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCkgeworCQkJCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisJCQkJcC0+ZmxhZ3MgfD0gRkxBR19SRVBST0dSQU07CisJCQl9CisKKwkJCXAtPmNlZC5ldmVudF9oYW5kbGVyKCZwLT5jZWQpOworCQl9CisJfQorCisJcC0+ZmxhZ3MgJj0gfkZMQUdfU0tJUEVWRU5UOworCisJaWYgKHAtPmZsYWdzICYgRkxBR19SRVBST0dSQU0pIHsKKwkJcC0+ZmxhZ3MgJj0gfkZMQUdfUkVQUk9HUkFNOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkocCwgMSk7CisKKwkJaWYgKHAtPmZsYWdzICYgRkxBR19DTE9DS0VWRU5UKQorCQkJaWYgKChwLT5jZWQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTikKKwkJCSAgICB8fCAocC0+bWF0Y2hfdmFsdWUgPT0gcC0+bmV4dF9tYXRjaF92YWx1ZSkpCisJCQkJcC0+ZmxhZ3MgJj0gfkZMQUdfUkVQUk9HUkFNOworCX0KKworCXAtPmZsYWdzICY9IH5GTEFHX0lSUUNPTlRFWFQ7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X3N0YXJ0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBmbGFnKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCEocC0+ZmxhZ3MgJiAoRkxBR19DTE9DS0VWRU5UIHwgRkxBR19DTE9DS1NPVVJDRSkpKQorCQlyZXQgPSBzaF9jbXRfZW5hYmxlKHAsICZwLT5yYXRlKTsKKworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCXAtPmZsYWdzIHw9IGZsYWc7CisKKwkvKiBzZXR1cCB0aW1lb3V0IGlmIG5vIGNsb2NrZXZlbnQgKi8KKwlpZiAoKGZsYWcgPT0gRkxBR19DTE9DS1NPVVJDRSkgJiYgKCEocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLRVZFTlQpKSkKKwkJc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7Cisgb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9zdG9wKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBmbGFnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCWYgPSBwLT5mbGFncyAmIChGTEFHX0NMT0NLRVZFTlQgfCBGTEFHX0NMT0NLU09VUkNFKTsKKwlwLT5mbGFncyAmPSB+ZmxhZzsKKworCWlmIChmICYmICEocC0+ZmxhZ3MgJiAoRkxBR19DTE9DS0VWRU5UIHwgRkxBR19DTE9DS1NPVVJDRSkpKQorCQlzaF9jbXRfZGlzYWJsZShwKTsKKworCS8qIGFkanVzdCB0aGUgdGltZW91dCB0byBtYXhpbXVtIGlmIG9ubHkgY2xvY2tzb3VyY2UgbGVmdCAqLworCWlmICgoZmxhZyA9PSBGTEFHX0NMT0NLRVZFTlQpICYmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tTT1VSQ0UpKQorCQlzaF9jbXRfc2V0X25leHQocCwgcC0+bWF4X21hdGNoX3ZhbHVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF9jbXRfcHJpdiAqY2VkX3RvX3NoX2NtdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjZWQsIHN0cnVjdCBzaF9jbXRfcHJpdiwgY2VkKTsKK30KKworc3RhdGljIHZvaWQgc2hfY210X2Nsb2NrX2V2ZW50X3N0YXJ0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHBlcmlvZGljKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZwLT5jZWQ7CisKKwlzaF9jbXRfc3RhcnQocCwgRkxBR19DTE9DS0VWRU5UKTsKKworCS8qIFRPRE86IGNhbGN1bGF0ZSBnb29kIHNoaWZ0IGZyb20gcmF0ZSBhbmQgY291bnRlciBiaXQgd2lkdGggKi8KKworCWNlZC0+c2hpZnQgPSAzMjsKKwljZWQtPm11bHQgPSBkaXZfc2MocC0+cmF0ZSwgTlNFQ19QRVJfU0VDLCBjZWQtPnNoaWZ0KTsKKwljZWQtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMocC0+bWF4X21hdGNoX3ZhbHVlLCBjZWQpOworCWNlZC0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDFmLCBjZWQpOworCisJaWYgKHBlcmlvZGljKQorCQlzaF9jbXRfc2V0X25leHQocCwgKHAtPnJhdGUgKyBIWi8yKSAvIEhaKTsKKwllbHNlCisJCXNoX2NtdF9zZXRfbmV4dChwLCBwLT5tYXhfbWF0Y2hfdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tfZXZlbnRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IGNlZF90b19zaF9jbXQoY2VkKTsKKworCS8qIGRlYWwgd2l0aCBvbGQgc2V0dGluZyBmaXJzdCAqLworCXN3aXRjaCAoY2VkLT5tb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCXNoX2NtdF9zdG9wKHAsIEZMQUdfQ0xPQ0tFVkVOVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBmb3IgcGVyaW9kaWMgY2xvY2sgZXZlbnRzXG4iLAorCQkJY2VkLT5uYW1lKTsKKwkJc2hfY210X2Nsb2NrX2V2ZW50X3N0YXJ0KHAsIDEpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBmb3Igb25lc2hvdCBjbG9jayBldmVudHNcbiIsCisJCQljZWQtPm5hbWUpOworCQlzaF9jbXRfY2xvY2tfZXZlbnRfc3RhcnQocCwgMCk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJCXNoX2NtdF9zdG9wKHAsIEZMQUdfQ0xPQ0tFVkVOVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBzaF9jbXRfY2xvY2tfZXZlbnRfbmV4dCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBjZWRfdG9fc2hfY210KGNlZCk7CisKKwlCVUdfT04oY2VkLT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOworCWlmIChsaWtlbHkocC0+ZmxhZ3MgJiBGTEFHX0lSUUNPTlRFWFQpKQorCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gZGVsdGE7CisJZWxzZQorCQlzaF9jbXRfc2V0X25leHQocCwgZGVsdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9yZWdpc3Rlcl9jbG9ja2V2ZW50KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwKKwkJCQkgICAgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyByYXRpbmcpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJnAtPmNlZDsKKworCW1lbXNldChjZWQsIDAsIHNpemVvZigqY2VkKSk7CisKKwljZWQtPm5hbWUgPSBuYW1lOworCWNlZC0+ZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQzsKKwljZWQtPmZlYXR1cmVzIHw9IENMT0NLX0VWVF9GRUFUX09ORVNIT1Q7CisJY2VkLT5yYXRpbmcgPSByYXRpbmc7CisJY2VkLT5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKwljZWQtPnNldF9uZXh0X2V2ZW50ID0gc2hfY210X2Nsb2NrX2V2ZW50X25leHQ7CisJY2VkLT5zZXRfbW9kZSA9IHNoX2NtdF9jbG9ja19ldmVudF9tb2RlOworCisJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7CisJY2VkLT5tdWx0ID0gMTsgLyogd29yayBhcm91bmQgbWlzcGxhY2VkIFdBUk5fT04oKSBpbiBjbG9ja2V2ZW50cy5jICovCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7Cit9CisKK2ludCBzaF9jbXRfcmVnaXN0ZXIoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBjaGFyICpuYW1lLAorCQkgICAgdW5zaWduZWQgbG9uZyBjbG9ja2V2ZW50X3JhdGluZywKKwkJICAgIHVuc2lnbmVkIGxvbmcgY2xvY2tzb3VyY2VfcmF0aW5nKQoreworCWlmIChwLT53aWR0aCA9PSAoc2l6ZW9mKHAtPm1heF9tYXRjaF92YWx1ZSkgKiA4KSkKKwkJcC0+bWF4X21hdGNoX3ZhbHVlID0gfjA7CisJZWxzZQorCQlwLT5tYXhfbWF0Y2hfdmFsdWUgPSAoMSA8PCBwLT53aWR0aCkgLSAxOworCisJcC0+bWF0Y2hfdmFsdWUgPSBwLT5tYXhfbWF0Y2hfdmFsdWU7CisJc3Bpbl9sb2NrX2luaXQoJnAtPmxvY2spOworCisJaWYgKGNsb2NrZXZlbnRfcmF0aW5nKQorCQlzaF9jbXRfcmVnaXN0ZXJfY2xvY2tldmVudChwLCBuYW1lLCBjbG9ja2V2ZW50X3JhdGluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9jbXRfc2V0dXAoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxLCByZXQ7CisJcmV0ID0gLUVOWElPOworCisJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCXAtPnBkZXYgPSBwZGV2OworCisJaWYgKCFjZmcpIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHApOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHAtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwLT5wZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGlycVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwkvKiBtYXAgbWVtb3J5LCBsZXQgbWFwYmFzZSBwb2ludCB0byBvdXIgY2hhbm5lbCAqLworCXAtPm1hcGJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAocC0+bWFwYmFzZSA9PSBOVUxMKSB7CisJCXByX2Vycigic2hfY210OiBmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwkvKiByZXF1ZXN0IGlycSB1c2luZyBzZXR1cF9pcnEoKSAodG9vIGVhcmx5IGZvciByZXF1ZXN0X2lycSgpKSAqLworCXAtPmlycWFjdGlvbi5uYW1lID0gY2ZnLT5uYW1lOworCXAtPmlycWFjdGlvbi5oYW5kbGVyID0gc2hfY210X2ludGVycnVwdDsKKwlwLT5pcnFhY3Rpb24uZGV2X2lkID0gcDsKKwlwLT5pcnFhY3Rpb24uZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTDsKKwlwLT5pcnFhY3Rpb24ubWFzayA9IENQVV9NQVNLX05PTkU7CisJcmV0ID0gc2V0dXBfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOworCQlnb3RvIGVycjE7CisJfQorCisJLyogZ2V0IGhvbGQgb2YgY2xvY2sgKi8KKwlwLT5jbGsgPSBjbGtfZ2V0KCZwLT5wZGV2LT5kZXYsIGNmZy0+Y2xrKTsKKwlpZiAoSVNfRVJSKHAtPmNsaykpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGNhbm5vdCBnZXQgY2xvY2sgXCIlc1wiXG4iLCBjZmctPmNsayk7CisJCXJldCA9IFBUUl9FUlIocC0+Y2xrKTsKKwkJZ290byBlcnIyOworCX0KKworCWlmIChyZXNvdXJjZV9zaXplKHJlcykgPT0gNikgeworCQlwLT53aWR0aCA9IDE2OworCQlwLT5vdmVyZmxvd19iaXQgPSAweDgwOworCQlwLT5jbGVhcl9iaXRzID0gfjB4YzA7CisJfSBlbHNlIHsKKwkJcC0+d2lkdGggPSAzMjsKKwkJcC0+b3ZlcmZsb3dfYml0ID0gMHg4MDAwOworCQlwLT5jbGVhcl9iaXRzID0gfjB4YzAwMDsKKwl9CisKKwlyZXR1cm4gc2hfY210X3JlZ2lzdGVyKHAsIGNmZy0+bmFtZSwKKwkJCSAgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAorCQkJICAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKKyBlcnIyOgorCWZyZWVfaXJxKGlycSwgcCk7CisgZXJyMToKKwlpb3VubWFwKHAtPm1hcGJhc2UpOworIGVycjA6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc2hfY210X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKKworCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCWlmIChwID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gc2hfY210X3NldHVwKHAsIHBkZXYpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUocCk7CisKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNoX2NtdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gLUVCVVNZOyAvKiBjYW5ub3QgdW5yZWdpc3RlciBjbG9ja2V2ZW50IGFuZCBjbG9ja3NvdXJjZSAqLworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9jbXRfZGV2aWNlX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc2hfY210X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfY210X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoX2NtdCIsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hfY210X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaF9jbXRfZGV2aWNlX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaF9jbXRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzaF9jbXRfZGV2aWNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNoX2NtdF9pbml0KTsKK21vZHVsZV9leGl0KHNoX2NtdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFnbnVzIERhbW0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIENNVCBUaW1lciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCmluZGV4IGI2ZmU3ZTcuLmM3NjllZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAJY25fcXVldWUuYwotICogCisgKgogICogMjAwNC0yMDA1IENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0zMSw2ICszMSw0OCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKKworLyoKKyAqIFRoaXMgam9iIGlzIHNlbnQgdG8gdGhlIGtldmVudCB3b3JrcXVldWUuCisgKiBXaGlsZSBubyBldmVudCBpcyBvbmNlIHNlbnQgdG8gYW55IGNhbGxiYWNrLCB0aGUgY29ubmVjdG9yIHdvcmtxdWV1ZQorICogaXMgbm90IGNyZWF0ZWQgdG8gYXZvaWQgYSB1c2VsZXNzIHdhaXRpbmcga2VybmVsIHRhc2suCisgKiBPbmNlIHRoZSBmaXJzdCBldmVudCBpcyByZWNlaXZlZCwgd2UgY3JlYXRlIHRoaXMgZGVkaWNhdGVkIHdvcmtxdWV1ZSB3aGljaAorICogaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGZsb3cgb2YgZGF0YSBjYW4gYmUgaGlnaCBhbmQgd2UgZG9uJ3Qgd2FudAorICogdG8gZW5jdW1iZXIga2V2ZW50ZCB3aXRoIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkIGNuX3F1ZXVlX2NyZWF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2OworCisJZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjbl9xdWV1ZV9kZXYsIHdxX2NyZWF0aW9uKTsKKworCWRldi0+Y25fcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXYtPm5hbWUpOworCS8qIElmIHdlIGZhaWwsIHdlIHdpbGwgdXNlIGtldmVudGQgZm9yIGFsbCBmb2xsb3dpbmcgY29ubmVjdG9yIGpvYnMgKi8KKwlXQVJOX09OKCFkZXYtPmNuX3F1ZXVlKTsKK30KKworLyoKKyAqIFF1ZXVlIGEgZGF0YSBzZW50IHRvIGEgY2FsbGJhY2suCisgKiBJZiB0aGUgY29ubmVjdG9yIHdvcmtxdWV1ZSBpcyBhbHJlYWR5IGNyZWF0ZWQsIHdlIHF1ZXVlIHRoZSBqb2Igb24gaXQuCisgKiBPdGhlcndpc2UsIHdlIHF1ZXVlIHRoZSBqb2IgdG8ga2V2ZW50IGFuZCBxdWV1ZSB0aGUgY29ubmVjdG9yIHdvcmtxdWV1ZQorICogY3JlYXRpb24gdG9vLgorICovCitpbnQgcXVldWVfY25fd29yayhzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjbl9xdWV1ZV9kZXYgKnBkZXYgPSBjYnEtPnBkZXY7CisKKwlpZiAobGlrZWx5KHBkZXYtPmNuX3F1ZXVlKSkKKwkJcmV0dXJuIHF1ZXVlX3dvcmsocGRldi0+Y25fcXVldWUsIHdvcmspOworCisJLyogRG9uJ3QgY3JlYXRlIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlIHR3aWNlICovCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwZGV2LT53cV9yZXF1ZXN0ZWQpID09IDEpCisJCXNjaGVkdWxlX3dvcmsoJnBkZXYtPndxX2NyZWF0aW9uKTsKKwllbHNlCisJCWF0b21pY19kZWMoJnBkZXYtPndxX3JlcXVlc3RlZCk7CisKKwlyZXR1cm4gc2NoZWR1bGVfd29yayh3b3JrKTsKK30KKwogdm9pZCBjbl9xdWV1ZV93cmFwcGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSA9CkBAIC01OCwxNCArMTAwLDE3IEBACiAJc25wcmludGYoY2JxLT5pZC5uYW1lLCBzaXplb2YoY2JxLT5pZC5uYW1lKSwgIiVzIiwgbmFtZSk7CiAJbWVtY3B5KCZjYnEtPmlkLmlkLCBpZCwgc2l6ZW9mKHN0cnVjdCBjYl9pZCkpOwogCWNicS0+ZGF0YS5jYWxsYmFjayA9IGNhbGxiYWNrOwotCQorCiAJSU5JVF9XT1JLKCZjYnEtPndvcmssICZjbl9xdWV1ZV93cmFwcGVyKTsKIAlyZXR1cm4gY2JxOwogfQogCiBzdGF0aWMgdm9pZCBjbl9xdWV1ZV9mcmVlX2NhbGxiYWNrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxKQogewotCWZsdXNoX3dvcmtxdWV1ZShjYnEtPnBkZXYtPmNuX3F1ZXVlKTsKKwkvKiBUaGUgZmlyc3Qgam9icyBoYXZlIGJlZW4gc2VudCB0byBrZXZlbnQsIGZsdXNoIHRoZW0gdG9vICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlpZiAoY2JxLT5wZGV2LT5jbl9xdWV1ZSkKKwkJZmx1c2hfd29ya3F1ZXVlKGNicS0+cGRldi0+Y25fcXVldWUpOwogCiAJa2ZyZWUoY2JxKTsKIH0KQEAgLTE0MywxNCArMTg4LDExIEBACiAJYXRvbWljX3NldCgmZGV2LT5yZWZjbnQsIDApOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnF1ZXVlX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnF1ZXVlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d3FfY3JlYXRlZCk7CiAKIAlkZXYtPm5scyA9IG5sczsKIAotCWRldi0+Y25fcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXYtPm5hbWUpOwotCWlmICghZGV2LT5jbl9xdWV1ZSkgewotCQlrZnJlZShkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJSU5JVF9XT1JLKCZkZXYtPndxX2NyZWF0aW9uLCBjbl9xdWV1ZV9jcmVhdGUpOwogCiAJcmV0dXJuIGRldjsKIH0KQEAgLTE1OCw5ICsyMDAsMjUgQEAKIHZvaWQgY25fcXVldWVfZnJlZV9kZXYoc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2KQogewogCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxLCAqbjsKKwlsb25nIHRpbWVvdXQ7CisJREVGSU5FX1dBSVQod2FpdCk7CiAKLQlmbHVzaF93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7Ci0JZGVzdHJveV93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7CisJLyogRmx1c2ggdGhlIGZpcnN0IHBlbmRpbmcgam9icyBxdWV1ZWQgb24ga2V2ZW50ICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCS8qIElmIHRoZSBjb25uZWN0b3Igd29ya3F1ZXVlIGNyZWF0aW9uIGlzIHN0aWxsIHBlbmRpbmcsIHdhaXQgZm9yIGl0ICovCisJcHJlcGFyZV90b193YWl0KCZkZXYtPndxX2NyZWF0ZWQsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJaWYgKGF0b21pY19yZWFkKCZkZXYtPndxX3JlcXVlc3RlZCkgJiYgIWRldi0+Y25fcXVldWUpIHsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQoSFogKiAyKTsKKwkJaWYgKCF0aW1lb3V0ICYmICFkZXYtPmNuX3F1ZXVlKQorCQkJV0FSTl9PTigxKTsKKwl9CisJZmluaXNoX3dhaXQoJmRldi0+d3FfY3JlYXRlZCwgJndhaXQpOworCisJaWYgKGRldi0+Y25fcXVldWUpIHsKKwkJZmx1c2hfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOworCQlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsKKwl9CiAKIAlzcGluX2xvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNicSwgbiwgJmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCmluZGV4IGJmNDgzMDAuLmZkMzM2YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqIAljb25uZWN0b3IuYwotICogCisgKgogICogMjAwNC0yMDA1IENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0xNDUsMTQgKzE0NSwxMyBAQAogCQkJCV9fY2JxLT5kYXRhLmRkYXRhID0gZGF0YTsKIAkJCQlfX2NicS0+ZGF0YS5kZXN0cnVjdF9kYXRhID0gZGVzdHJ1Y3RfZGF0YTsKIAotCQkJCWlmIChxdWV1ZV93b3JrKGRldi0+Y2JkZXYtPmNuX3F1ZXVlLAotCQkJCQkJCSZfX2NicS0+d29yaykpCisJCQkJaWYgKHF1ZXVlX2NuX3dvcmsoX19jYnEsICZfX2NicS0+d29yaykpCiAJCQkJCWVyciA9IDA7CiAJCQkJZWxzZQogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJfSBlbHNlIHsKIAkJCQlzdHJ1Y3QgY25fY2FsbGJhY2tfZGF0YSAqZDsKLQkJCQkKKwogCQkJCWVyciA9IC1FTk9NRU07CiAJCQkJX19uZXdfY2JxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5KSwgR0ZQX0FUT01JQyk7CiAJCQkJaWYgKF9fbmV3X2NicSkgewpAQCAtMTYzLDEwICsxNjIsMTIgQEAKIAkJCQkJZC0+ZGVzdHJ1Y3RfZGF0YSA9IGRlc3RydWN0X2RhdGE7CiAJCQkJCWQtPmZyZWUgPSBfX25ld19jYnE7CiAKKwkJCQkJX19uZXdfY2JxLT5wZGV2ID0gX19jYnEtPnBkZXY7CisKIAkJCQkJSU5JVF9XT1JLKCZfX25ld19jYnEtPndvcmssCiAJCQkJCQkJJmNuX3F1ZXVlX3dyYXBwZXIpOwogCi0JCQkJCWlmIChxdWV1ZV93b3JrKGRldi0+Y2JkZXYtPmNuX3F1ZXVlLAorCQkJCQlpZiAocXVldWVfY25fd29yayhfX25ld19jYnEsCiAJCQkJCQkgICAgJl9fbmV3X2NicS0+d29yaykpCiAJCQkJCQllcnIgPSAwOwogCQkJCQllbHNlIHsKQEAgLTIzNyw3ICsyMzgsNyBAQAogCiAJCXJlcSA9IChzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqKWN0bC0+ZGF0YTsKIAkJZm9yIChpID0gMDsgaSA8IGN0bC0+aWR4X25vdGlmeV9udW07ICsraSwgKytyZXEpIHsKLQkJCWlmIChpZC0+aWR4ID49IHJlcS0+Zmlyc3QgJiYgCisJCQlpZiAoaWQtPmlkeCA+PSByZXEtPmZpcnN0ICYmCiAJCQkJCWlkLT5pZHggPCByZXEtPmZpcnN0ICsgcmVxLT5yYW5nZSkgewogCQkJCWlkeF9mb3VuZCA9IDE7CiAJCQkJYnJlYWs7CkBAIC0yNDUsNyArMjQ2LDcgQEAKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBjdGwtPnZhbF9ub3RpZnlfbnVtOyArK2ksICsrcmVxKSB7Ci0JCQlpZiAoaWQtPnZhbCA+PSByZXEtPmZpcnN0ICYmIAorCQkJaWYgKGlkLT52YWwgPj0gcmVxLT5maXJzdCAmJgogCQkJCQlpZC0+dmFsIDwgcmVxLT5maXJzdCArIHJlcS0+cmFuZ2UpIHsKIAkJCQl2YWxfZm91bmQgPSAxOwogCQkJCWJyZWFrOwpAQCAtNDU5LDcgKzQ2MCw3IEBACiAJCW5ldGxpbmtfa2VybmVsX3JlbGVhc2UoZGV2LT5ubHMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JCisKIAljbl9hbHJlYWR5X2luaXRpYWxpemVkID0gMTsKIAogCWVyciA9IGNuX2FkZF9jYWxsYmFjaygmZGV2LT5pZCwgImNvbm5lY3RvciIsICZjbl9jYWxsYmFjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCBkNmRhZjNjLi5kMjcwZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTEwNCw3ICsxMDQsOCBAQAogCiAKIC8qIGludGVybmFsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgX19jcHVmcmVxX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgZXZlbnQpOworc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCXVuc2lnbmVkIGludCBldmVudCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CiBzdGF0aWMgdm9pZCBoYW5kbGVfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKQEAgLTEyOCw3ICsxMjksNyBAQAogcHVyZV9pbml0Y2FsbChpbml0X2NwdWZyZXFfdHJhbnNpdGlvbl9ub3RpZmllcl9saXN0KTsKIAogc3RhdGljIExJU1RfSEVBRChjcHVmcmVxX2dvdmVybm9yX2xpc3QpOwotc3RhdGljIERFRklORV9NVVRFWCAoY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOwogCiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmNwdWZyZXFfY3B1X2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtMzcxLDcgKzM3Miw3IEBACiAJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKnQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZjcHVmcmVxX2dvdmVybm9yX2xpc3QsIGdvdmVybm9yX2xpc3QpCi0JCWlmICghc3RybmljbXAoc3RyX2dvdmVybm9yLHQtPm5hbWUsQ1BVRlJFUV9OQU1FX0xFTikpCisJCWlmICghc3RybmljbXAoc3RyX2dvdmVybm9yLCB0LT5uYW1lLCBDUFVGUkVRX05BTUVfTEVOKSkKIAkJCXJldHVybiB0OwogCiAJcmV0dXJuIE5VTEw7CkBAIC00MjksMTUgKzQzMCwxMSBAQAogCiAJCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CiAJfQotICBvdXQ6CitvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAogCi0vKiBkcml2ZXJzL2Jhc2UvY3B1LmMgKi8KLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGNwdV9zeXNkZXZfY2xhc3M7Ci0KLQogLyoqCiAgKiBjcHVmcmVxX3Blcl9jcHVfYXR0cl9yZWFkKCkgLyBzaG93XyMjZmlsZV9uYW1lKCkgLQogICogcHJpbnQgb3V0IGNwdWZyZXEgaW5mb3JtYXRpb24KQEAgLTQ1MCwxMSArNDQ3LDEyIEBACiBzdGF0aWMgc3NpemVfdCBzaG93XyMjZmlsZV9uYW1lCQkJCVwKIChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQkJXAogewkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBwb2xpY3ktPm9iamVjdCk7CVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcG9saWN5LT5vYmplY3QpOwlcCiB9CiAKIHNob3dfb25lKGNwdWluZm9fbWluX2ZyZXEsIGNwdWluZm8ubWluX2ZyZXEpOwogc2hvd19vbmUoY3B1aW5mb19tYXhfZnJlcSwgY3B1aW5mby5tYXhfZnJlcSk7CitzaG93X29uZShjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSwgY3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kpOwogc2hvd19vbmUoc2NhbGluZ19taW5fZnJlcSwgbWluKTsKIHNob3dfb25lKHNjYWxpbmdfbWF4X2ZyZXEsIG1heCk7CiBzaG93X29uZShzY2FsaW5nX2N1cl9mcmVxLCBjdXIpOwpAQCAtNDc2LDcgKzQ3NCw3IEBACiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZuZXdfcG9saWN5Lm9iamVjdCk7CQkJXAorCXJldCA9IHNzY2FuZihidWYsICIldSIsICZuZXdfcG9saWN5Lm9iamVjdCk7CQkJXAogCWlmIChyZXQgIT0gMSkJCQkJCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC00ODYsOCArNDg0LDggQEAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CQkJCQlcCiB9CiAKLXN0b3JlX29uZShzY2FsaW5nX21pbl9mcmVxLG1pbik7Ci1zdG9yZV9vbmUoc2NhbGluZ19tYXhfZnJlcSxtYXgpOworc3RvcmVfb25lKHNjYWxpbmdfbWluX2ZyZXEsIG1pbik7CitzdG9yZV9vbmUoc2NhbGluZ19tYXhfZnJlcSwgbWF4KTsKIAogLyoqCiAgKiBzaG93X2NwdWluZm9fY3VyX2ZyZXEgLSBjdXJyZW50IENQVSBmcmVxdWVuY3kgYXMgZGV0ZWN0ZWQgYnkgaGFyZHdhcmUKQEAgLTUwNywxMiArNTA1LDEzIEBACiAgKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfc2NhbGluZ19nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCWlmKHBvbGljeS0+cG9saWN5ID09IENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRSkKKwlpZiAocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUE9XRVJTQVZFKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJwb3dlcnNhdmVcbiIpOwogCWVsc2UgaWYgKHBvbGljeS0+cG9saWN5ID09IENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJwZXJmb3JtYW5jZVxuIik7CiAJZWxzZSBpZiAocG9saWN5LT5nb3Zlcm5vcikKLQkJcmV0dXJuIHNjbnByaW50ZihidWYsIENQVUZSRVFfTkFNRV9MRU4sICIlc1xuIiwgcG9saWN5LT5nb3Zlcm5vci0+bmFtZSk7CisJCXJldHVybiBzY25wcmludGYoYnVmLCBDUFVGUkVRX05BTUVfTEVOLCAiJXNcbiIsCisJCQkJcG9saWN5LT5nb3Zlcm5vci0+bmFtZSk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTUzMSw3ICs1MzAsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiUxNXMiLCBzdHJfZ292ZXJub3IpOworCXJldCA9IHNzY2FuZihidWYsICIlMTVzIiwgc3RyX2dvdmVybm9yKTsKIAlpZiAocmV0ICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01NzUsNyArNTc0LDggQEAKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZjcHVmcmVxX2dvdmVybm9yX2xpc3QsIGdvdmVybm9yX2xpc3QpIHsKLQkJaWYgKGkgPj0gKHNzaXplX3QpICgoUEFHRV9TSVpFIC8gc2l6ZW9mKGNoYXIpKSAtIChDUFVGUkVRX05BTUVfTEVOICsgMikpKQorCQlpZiAoaSA+PSAoc3NpemVfdCkgKChQQUdFX1NJWkUgLyBzaXplb2YoY2hhcikpCisJCSAgICAtIChDUFVGUkVRX05BTUVfTEVOICsgMikpKQogCQkJZ290byBvdXQ7CiAJCWkgKz0gc2NucHJpbnRmKCZidWZbaV0sIENQVUZSRVFfTkFNRV9MRU4sICIlcyAiLCB0LT5uYW1lKTsKIAl9CkBAIC01OTQsNyArNTk0LDcgQEAKIAkJCWkgKz0gc2NucHJpbnRmKCZidWZbaV0sIChQQUdFX1NJWkUgLSBpIC0gMiksICIgIik7CiAJCWkgKz0gc2NucHJpbnRmKCZidWZbaV0sIChQQUdFX1NJWkUgLSBpIC0gMiksICIldSIsIGNwdSk7CiAJCWlmIChpID49IChQQUdFX1NJWkUgLSA1KSkKLQkJICAgIGJyZWFrOworCQkJYnJlYWs7CiAJfQogCWkgKz0gc3ByaW50ZigmYnVmW2ldLCAiXG4iKTsKIAlyZXR1cm4gaTsKQEAgLTY2MCw2ICs2NjAsNyBAQAogZGVmaW5lX29uZV9ybzA0MDAoY3B1aW5mb19jdXJfZnJlcSk7CiBkZWZpbmVfb25lX3JvKGNwdWluZm9fbWluX2ZyZXEpOwogZGVmaW5lX29uZV9ybyhjcHVpbmZvX21heF9mcmVxKTsKK2RlZmluZV9vbmVfcm8oY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kpOwogZGVmaW5lX29uZV9ybyhzY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMpOwogZGVmaW5lX29uZV9ybyhzY2FsaW5nX2RyaXZlcik7CiBkZWZpbmVfb25lX3JvKHNjYWxpbmdfY3VyX2ZyZXEpOwpAQCAtNjczLDYgKzY3NCw3IEBACiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVmYXVsdF9hdHRyc1tdID0gewogCSZjcHVpbmZvX21pbl9mcmVxLmF0dHIsCiAJJmNwdWluZm9fbWF4X2ZyZXEuYXR0ciwKKwkmY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kuYXR0ciwKIAkmc2NhbGluZ19taW5fZnJlcS5hdHRyLAogCSZzY2FsaW5nX21heF9mcmVxLmF0dHIsCiAJJmFmZmVjdGVkX2NwdXMuYXR0ciwKQEAgLTY4NCwxMCArNjg2LDEwIEBACiAJTlVMTAogfTsKIAotI2RlZmluZSB0b19wb2xpY3koaykgY29udGFpbmVyX29mKGssc3RydWN0IGNwdWZyZXFfcG9saWN5LGtvYmopCi0jZGVmaW5lIHRvX2F0dHIoYSkgY29udGFpbmVyX29mKGEsc3RydWN0IGZyZXFfYXR0cixhdHRyKQorI2RlZmluZSB0b19wb2xpY3koaykgY29udGFpbmVyX29mKGssIHN0cnVjdCBjcHVmcmVxX3BvbGljeSwga29iaikKKyNkZWZpbmUgdG9fYXR0cihhKSBjb250YWluZXJfb2YoYSwgc3RydWN0IGZyZXFfYXR0ciwgYXR0cikKIAotc3RhdGljIHNzaXplX3Qgc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciAsY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gdG9fcG9saWN5KGtvYmopOwogCXN0cnVjdCBmcmVxX2F0dHIgKmZhdHRyID0gdG9fYXR0cihhdHRyKTsKQEAgLTg1MywxMCArODU1LDEwIEBACiAJCWlmIChjcHUgPT0gaikKIAkJCWNvbnRpbnVlOwogCi0JCS8qIGNoZWNrIGZvciBleGlzdGluZyBhZmZlY3RlZCBDUFVzLiAgVGhleSBtYXkgbm90IGJlIGF3YXJlCi0JCSAqIG9mIGl0IGR1ZSB0byBDUFUgSG90cGx1Zy4KKwkJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGFmZmVjdGVkIENQVXMuCisJCSAqIFRoZXkgbWF5IG5vdCBiZSBhd2FyZSBvZiBpdCBkdWUgdG8gQ1BVIEhvdHBsdWcuCiAJCSAqLwotCQltYW5hZ2VkX3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChqKTsJCS8vIEZJWE1FOiBXaGVyZSBpcyB0aGlzIHJlbGVhc2VkPyAgV2hhdCBhYm91dCBlcnJvciBwYXRocz8KKwkJbWFuYWdlZF9wb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoaik7CQkvKiBGSVhNRTogV2hlcmUgaXMgdGhpcyByZWxlYXNlZD8gIFdoYXQgYWJvdXQgZXJyb3IgcGF0aHM/ICovCiAJCWlmICh1bmxpa2VseShtYW5hZ2VkX3BvbGljeSkpIHsKIAogCQkJLyogU2V0IHByb3BlciBwb2xpY3lfY3B1ICovCkBAIC0xMTI3LDggKzExMjksOCBAQAogICoJQG9sZF9mcmVxOiBDUFUgZnJlcXVlbmN5IHRoZSBrZXJuZWwgdGhpbmtzIHRoZSBDUFUgcnVucyBhdAogICoJQG5ld19mcmVxOiBDUFUgZnJlcXVlbmN5IHRoZSBDUFUgYWN0dWFsbHkgcnVucyBhdAogICoKLSAqCVdlIGFkanVzdCB0byBjdXJyZW50IGZyZXF1ZW5jeSBmaXJzdCwgYW5kIG5lZWQgdG8gY2xlYW4gdXAgbGF0ZXIuIFNvIGVpdGhlciBjYWxsCi0gKgl0byBjcHVmcmVxX3VwZGF0ZV9wb2xpY3koKSBvciBzY2hlZHVsZSBoYW5kbGVfdXBkYXRlKCkpLgorICoJV2UgYWRqdXN0IHRvIGN1cnJlbnQgZnJlcXVlbmN5IGZpcnN0LCBhbmQgbmVlZCB0byBjbGVhbiB1cCBsYXRlci4KKyAqCVNvIGVpdGhlciBjYWxsIHRvIGNwdWZyZXFfdXBkYXRlX3BvbGljeSgpIG9yIHNjaGVkdWxlIGhhbmRsZV91cGRhdGUoKSkuCiAgKi8KIHN0YXRpYyB2b2lkIGNwdWZyZXFfb3V0X29mX3N5bmModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IG9sZF9mcmVxLAogCQkJCXVuc2lnbmVkIGludCBuZXdfZnJlcSkKQEAgLTE2MTAsNyArMTYxMiw4IEBACiAKIC8qKgogICogY3B1ZnJlcV9nZXRfcG9saWN5IC0gZ2V0IHRoZSBjdXJyZW50IGNwdWZyZXFfcG9saWN5Ci0gKiBAcG9saWN5OiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgaW50byB3aGljaCB0aGUgY3VycmVudCBjcHVmcmVxX3BvbGljeSBpcyB3cml0dGVuCisgKiBAcG9saWN5OiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgaW50byB3aGljaCB0aGUgY3VycmVudCBjcHVmcmVxX3BvbGljeQorICoJaXMgd3JpdHRlbgogICoKICAqIFJlYWRzIHRoZSBjdXJyZW50IGNwdWZyZXEgcG9saWN5LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IDAzMjA5NjIuLjJlY2Q5NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoQykgIDIwMDEgUnVzc2VsbCBLaW5nCiAgKiAgICAgICAgICAgIChDKSAgMjAwMyBWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4uCiAgKiAgICAgICAgICAgICAgICAgICAgICBKdW4gTmFrYWppbWEgPGp1bi5uYWthamltYUBpbnRlbC5jb20+Ci0gKiAgICAgICAgICAgIChDKSAgMjAwNCBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleC1rZXJuZWxAZGlncml6Lm9yZy51az4KKyAqICAgICAgICAgICAgKEMpICAyMDA5IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMywyMiArMTMsMTcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwogLyoKICAqIGRicyBpcyB1c2VkIGluIHRoaXMgZmlsZSBhcyBhIHNob3J0Zm9ybSBmb3IgZGVtYW5kYmFzZWQgc3dpdGNoaW5nCiAgKiBJdCBoZWxwcyB0byBrZWVwIHZhcmlhYmxlIG5hbWVzIHNtYWxsZXIsIHNpbXBsZXIKQEAgLTQzLDE5ICszOCwzMSBAQAogICogbGF0ZW5jeSBvZiB0aGUgcHJvY2Vzc29yLiBUaGUgZ292ZXJub3Igd2lsbCB3b3JrIG9uIGFueSBwcm9jZXNzb3Igd2l0aAogICogdHJhbnNpdGlvbiBsYXRlbmN5IDw9IDEwbVMsIHVzaW5nIGFwcHJvcHJpYXRlIHNhbXBsaW5nCiAgKiByYXRlLgotICogRm9yIENQVXMgd2l0aCB0cmFuc2l0aW9uIGxhdGVuY3kgPiAxMG1TIChtb3N0bHkgZHJpdmVycwotICogd2l0aCBDUFVGUkVRX0VURVJOQUwpLCB0aGlzIGdvdmVybm9yIHdpbGwgbm90IHdvcmsuCisgKiBGb3IgQ1BVcyB3aXRoIHRyYW5zaXRpb24gbGF0ZW5jeSA+IDEwbVMgKG1vc3RseSBkcml2ZXJzIHdpdGggQ1BVRlJFUV9FVEVSTkFMKQorICogdGhpcyBnb3Zlcm5vciB3aWxsIG5vdCB3b3JrLgogICogQWxsIHRpbWVzIGhlcmUgYXJlIGluIHVTLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZl9zYW1wbGluZ19yYXRlOwogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURV9SQVRJTwkJCSgyKQogLyogZm9yIGNvcnJlY3Qgc3RhdGlzdGljcywgd2UgbmVlZCBhdCBsZWFzdCAxMCB0aWNrcyBiZXR3ZWVuIGVhY2ggbWVhc3VyZSAqLwotI2RlZmluZSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCQkJXAorI2RlZmluZSBNSU5fU1RBVF9TQU1QTElOR19SQVRFIAkJCVwKIAkJCShNSU5fU0FNUExJTkdfUkFURV9SQVRJTyAqIGppZmZpZXNfdG9fdXNlY3MoMTApKQogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURQkJCVwKIAkJCShkZWZfc2FtcGxpbmdfcmF0ZSAvIE1JTl9TQU1QTElOR19SQVRFX1JBVElPKQorLyogQWJvdmUgTUlOX1NBTVBMSU5HX1JBVEUgd2lsbCB2YW5pc2ggd2l0aCBpdHMgc3lzZnMgZmlsZSBzb29uCisgKiBEZWZpbmUgdGhlIG1pbmltYWwgc2V0dGFibGUgc2FtcGxpbmcgcmF0ZSB0byB0aGUgZ3JlYXRlciBvZjoKKyAqICAgLSAiSFcgdHJhbnNpdGlvbiBsYXRlbmN5IiAqIDEwMCAoc2FtZSBhcyBkZWZhdWx0IHNhbXBsaW5nIC8gMTApCisgKiAgIC0gTUlOX1NUQVRfU0FNUExJTkdfUkFURQorICogVG8gYXZvaWQgdGhhdCB1c2Vyc3BhY2Ugc2hvb3RzIGl0c2VsZi4KKyovCitzdGF0aWMgdW5zaWduZWQgaW50IG1pbmltdW1fc2FtcGxpbmdfcmF0ZSh2b2lkKQoreworCXJldHVybiBtYXgoZGVmX3NhbXBsaW5nX3JhdGUgLyAxMCwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7Cit9CisKKy8qIFRoaXMgd2lsbCBhbHNvIHZhbmlzaCBzb29uIHdpdGggcmVtb3Zpbmcgc2FtcGxpbmdfcmF0ZV9tYXggKi8KICNkZWZpbmUgTUFYX1NBTVBMSU5HX1JBVEUJCQkoNTAwICogZGVmX3NhbXBsaW5nX3JhdGUpCi0jZGVmaW5lIERFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUgkoMTAwMCkKKyNkZWZpbmUgTEFURU5DWV9NVUxUSVBMSUVSCQkJKDEwMDApCiAjZGVmaW5lIERFRl9TQU1QTElOR19ET1dOX0ZBQ1RPUgkJKDEpCiAjZGVmaW5lIE1BWF9TQU1QTElOR19ET1dOX0ZBQ1RPUgkJKDEwKQogI2RlZmluZSBUUkFOU0lUSU9OX0xBVEVOQ1lfTElNSVQJCSgxMCAqIDEwMDAgKiAxMDAwKQpAQCAtNjMsMTIgKzcwLDE1IEBACiBzdGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RydWN0IGNwdV9kYnNfaW5mb19zIHsKKwljcHV0aW1lNjRfdCBwcmV2X2NwdV9pZGxlOworCWNwdXRpbWU2NF90IHByZXZfY3B1X3dhbGw7CisJY3B1dGltZTY0X3QgcHJldl9jcHVfbmljZTsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmN1cl9wb2xpY3k7Ci0JdW5zaWduZWQgaW50IHByZXZfY3B1X2lkbGVfdXA7Ci0JdW5zaWduZWQgaW50IHByZXZfY3B1X2lkbGVfZG93bjsKLQl1bnNpZ25lZCBpbnQgZW5hYmxlOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAl1bnNpZ25lZCBpbnQgZG93bl9za2lwOwogCXVuc2lnbmVkIGludCByZXF1ZXN0ZWRfZnJlcTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGludCBlbmFibGU6MTsKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9kYnNfaW5mb19zLCBjcHVfZGJzX2luZm8pOwogCkBAIC04MiwxOSArOTIsMTggQEAKICAqIGNwdV9ob3RwbHVnIGxvY2sgc2hvdWxkIGJlIHRha2VuIGJlZm9yZSB0aGF0LiBOb3RlIHRoYXQgY3B1X2hvdHBsdWcgbG9jawogICogaXMgcmVjdXJzaXZlIGZvciB0aGUgc2FtZSBwcm9jZXNzLiAtVmVua2kKICAqLwotc3RhdGljIERFRklORV9NVVRFWCAoZGJzX211dGV4KTsKLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhkYnNfd29yaywgZG9fZGJzX3RpbWVyKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZGJzX211dGV4KTsKIAotc3RydWN0IGRic190dW5lcnMgeworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSprY29uc2VydmF0aXZlX3dxOworCitzdGF0aWMgc3RydWN0IGRic190dW5lcnMgewogCXVuc2lnbmVkIGludCBzYW1wbGluZ19yYXRlOwogCXVuc2lnbmVkIGludCBzYW1wbGluZ19kb3duX2ZhY3RvcjsKIAl1bnNpZ25lZCBpbnQgdXBfdGhyZXNob2xkOwogCXVuc2lnbmVkIGludCBkb3duX3RocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgaWdub3JlX25pY2U7CiAJdW5zaWduZWQgaW50IGZyZXFfc3RlcDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGJzX3R1bmVycyBkYnNfdHVuZXJzX2lucyA9IHsKK30gZGJzX3R1bmVyc19pbnMgPSB7CiAJLnVwX3RocmVzaG9sZCA9IERFRl9GUkVRVUVOQ1lfVVBfVEhSRVNIT0xELAogCS5kb3duX3RocmVzaG9sZCA9IERFRl9GUkVRVUVOQ1lfRE9XTl9USFJFU0hPTEQsCiAJLnNhbXBsaW5nX2Rvd25fZmFjdG9yID0gREVGX1NBTVBMSU5HX0RPV05fRkFDVE9SLApAQCAtMTAyLDE4ICsxMTEsMzcgQEAKIAkuZnJlcV9zdGVwID0gNSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lX2ppZmZ5KHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQkJY3B1dGltZTY0X3QgKndhbGwpCiB7Ci0JdW5zaWduZWQgaW50IGFkZF9uaWNlID0gMCwgcmV0OworCWNwdXRpbWU2NF90IGlkbGVfdGltZTsKKwljcHV0aW1lNjRfdCBjdXJfd2FsbF90aW1lOworCWNwdXRpbWU2NF90IGJ1c3lfdGltZTsKIAotCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkKLQkJYWRkX25pY2UgPSBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lm5pY2U7CisJY3VyX3dhbGxfdGltZSA9IGppZmZpZXM2NF90b19jcHV0aW1lNjQoZ2V0X2ppZmZpZXNfNjQoKSk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnVzZXIsCisJCQlrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnN5c3RlbSk7CiAKLQlyZXQgPSBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LmlkbGUgKwotCQlrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lmlvd2FpdCArCi0JCWFkZF9uaWNlOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LmlycSk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuc29mdGlycSk7CisJYnVzeV90aW1lID0gY3B1dGltZTY0X2FkZChidXN5X3RpbWUsIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQuc3RlYWwpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lm5pY2UpOwogCi0JcmV0dXJuIHJldDsKKwlpZGxlX3RpbWUgPSBjcHV0aW1lNjRfc3ViKGN1cl93YWxsX3RpbWUsIGJ1c3lfdGltZSk7CisJaWYgKHdhbGwpCisJCSp3YWxsID0gY3VyX3dhbGxfdGltZTsKKworCXJldHVybiBpZGxlX3RpbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpCit7CisJdTY0IGlkbGVfdGltZSA9IGdldF9jcHVfaWRsZV90aW1lX3VzKGNwdSwgd2FsbCk7CisKKwlpZiAoaWRsZV90aW1lID09IC0xVUxMKQorCQlyZXR1cm4gZ2V0X2NwdV9pZGxlX3RpbWVfamlmZnkoY3B1LCB3YWxsKTsKKworCXJldHVybiBpZGxlX3RpbWU7CiB9CiAKIC8qIGtlZXAgdHJhY2sgb2YgZnJlcXVlbmN5IHRyYW5zaXRpb25zICovCkBAIC0xMjUsMTAgKzE1MywyMSBAQAogCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywKIAkJCQkJCQlmcmVxLT5jcHUpOwogCisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisKIAlpZiAoIXRoaXNfZGJzX2luZm8tPmVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKLQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IGZyZXEtPm5ldzsKKwlwb2xpY3kgPSB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5OworCisJLyoKKwkgKiB3ZSBvbmx5IGNhcmUgaWYgb3VyIGludGVybmFsbHkgdHJhY2tlZCBmcmVxIG1vdmVzIG91dHNpZGUKKwkgKiB0aGUgJ3ZhbGlkJyByYW5nZXMgb2YgZnJlcWVuY3kgYXZhaWxhYmxlIHRvIHVzIG90aGVyd2lzZQorCSAqIHdlIGRvIG5vdCBjaGFuZ2UgaXQKKwkqLworCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA+IHBvbGljeS0+bWF4CisJCQl8fCB0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA8IHBvbGljeS0+bWluKQorCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IGZyZXEtPm5ldzsKIAogCXJldHVybiAwOwogfQpAQCAtMTQwLDE2ICsxNzksMzEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBzeXNmcyBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21heChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBjb25zZXJ2YXRpdmUgc2FtcGxpbmdfcmF0ZV9tYXggIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWluKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IGNvbnNlcnZhdGl2ZSBzYW1wbGluZ19yYXRlX21heCAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKIH0KIAotI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKQkJCQlcCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciBfbmFtZSA9CQkJCVwKKyNkZWZpbmUgZGVmaW5lX29uZV9ybyhfbmFtZSkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyIF9uYW1lID0JCVwKIF9fQVRUUihfbmFtZSwgMDQ0NCwgc2hvd18jI19uYW1lLCBOVUxMKQogCiBkZWZpbmVfb25lX3JvKHNhbXBsaW5nX3JhdGVfbWF4KTsKQEAgLTE3NCw3ICsyMjgsOCBAQAogewogCXVuc2lnbmVkIGludCBpbnB1dDsKIAlpbnQgcmV0OwotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmaW5wdXQpOworCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CisKIAlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfRE9XTl9GQUNUT1IgfHwgaW5wdXQgPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTkwLDE1ICsyNDUsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOworCisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gTUFYX1NBTVBMSU5HX1JBVEUgfHwgaW5wdXQgPCBNSU5fU0FNUExJTkdfUkFURSkgewotCQltdXRleF91bmxvY2soJmRic19tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBpbnB1dDsKKwlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gbWF4KGlucHV0LCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUoKSk7CiAJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMjA5LDEwICsyNjIsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPD0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpIHsKKwlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwKKwkJCWlucHV0IDw9IGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjI4LDEwICsyODIsMTIgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiAxMDAgfHwgaW5wdXQgPj0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CisJLyogY2Fubm90IGJlIGxvd2VyIHRoYW4gMTEgb3RoZXJ3aXNlIGZyZXEgd2lsbCBub3QgZmFsbCAqLworCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA8IDExIHx8IGlucHV0ID4gMTAwIHx8CisJCQlpbnB1dCA+PSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNjQsMTIgKzMyMCwxNCBAQAogCX0KIAlkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSA9IGlucHV0OwogCi0JLyogd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBwcmV2X2NwdV9pZGxlX3VwIGFuZCBwcmV2X2NwdV9pZGxlX2Rvd24gKi8KKwkvKiB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHByZXZfY3B1X2lkbGUgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKLQkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpqX2Ric19pbmZvOwotCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKLQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cCA9IGdldF9jcHVfaWRsZV90aW1lKGopOwotCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24gPSBqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOworCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvOworCQlkYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CisJCWRic19pbmZvLT5wcmV2X2NwdV9pZGxlID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwKKwkJCQkJCSZkYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7CisJCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkKKwkJCWRic19pbmZvLT5wcmV2X2NwdV9uaWNlID0ga3N0YXRfY3B1KGopLmNwdXN0YXQubmljZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCkBAIC0yODEsNyArMzM5LDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAlpZiAocmV0ICE9IDEpCkBAIC0zMTAsNyArMzY3LDcgQEAKIGRlZmluZV9vbmVfcncoaWdub3JlX25pY2VfbG9hZCk7CiBkZWZpbmVfb25lX3J3KGZyZXFfc3RlcCk7CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZGJzX2F0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYnNfYXR0cmlidXRlc1tdID0gewogCSZzYW1wbGluZ19yYXRlX21heC5hdHRyLAogCSZzYW1wbGluZ19yYXRlX21pbi5hdHRyLAogCSZzYW1wbGluZ19yYXRlLmF0dHIsCkBAIC0zMjksNTUgKzM4Niw3OCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogc3lzZnMgZW5kICoqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgZGJzX2NoZWNrX2NwdShpbnQgY3B1KQorc3RhdGljIHZvaWQgZGJzX2NoZWNrX2NwdShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8pCiB7Ci0JdW5zaWduZWQgaW50IGlkbGVfdGlja3MsIHVwX2lkbGVfdGlja3MsIGRvd25faWRsZV90aWNrczsKLQl1bnNpZ25lZCBpbnQgdG1wX2lkbGVfdGlja3MsIHRvdGFsX2lkbGVfdGlja3M7CisJdW5zaWduZWQgaW50IGxvYWQgPSAwOwogCXVuc2lnbmVkIGludCBmcmVxX3RhcmdldDsKLQl1bnNpZ25lZCBpbnQgZnJlcV9kb3duX3NhbXBsaW5nX3JhdGU7Ci0Jc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBjcHUpOwotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OwogCi0JaWYgKCF0aGlzX2Ric19pbmZvLT5lbmFibGUpCi0JCXJldHVybjsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwl1bnNpZ25lZCBpbnQgajsKIAogCXBvbGljeSA9IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3k7CiAKIAkvKgotCSAqIFRoZSBkZWZhdWx0IHNhZmUgcmFuZ2UgaXMgMjAlIHRvIDgwJQotCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUsIHdlIGNoZWNrCi0JICoJLSBJZiBjdXJyZW50IGlkbGUgdGltZSBpcyBsZXNzIHRoYW4gMjAlLCB0aGVuIHdlIHRyeSB0bwotCSAqCSAgaW5jcmVhc2UgZnJlcXVlbmN5Ci0JICogRXZlcnkgc2FtcGxpbmdfcmF0ZSpzYW1wbGluZ19kb3duX2ZhY3Rvciwgd2UgY2hlY2sKLQkgKgktIElmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIG1vcmUgdGhhbiA4MCUsIHRoZW4gd2UgdHJ5IHRvCi0JICoJICBkZWNyZWFzZSBmcmVxdWVuY3kKKwkgKiBFdmVyeSBzYW1wbGluZ19yYXRlLCB3ZSBjaGVjaywgaWYgY3VycmVudCBpZGxlIHRpbWUgaXMgbGVzcworCSAqIHRoYW4gMjAlIChkZWZhdWx0KSwgdGhlbiB3ZSB0cnkgdG8gaW5jcmVhc2UgZnJlcXVlbmN5CisJICogRXZlcnkgc2FtcGxpbmdfcmF0ZSpzYW1wbGluZ19kb3duX2ZhY3Rvciwgd2UgY2hlY2ssIGlmIGN1cnJlbnQKKwkgKiBpZGxlIHRpbWUgaXMgbW9yZSB0aGFuIDgwJSwgdGhlbiB3ZSB0cnkgdG8gZGVjcmVhc2UgZnJlcXVlbmN5CiAJICoKIAkgKiBBbnkgZnJlcXVlbmN5IGluY3JlYXNlIHRha2VzIGl0IHRvIHRoZSBtYXhpbXVtIGZyZXF1ZW5jeS4KIAkgKiBGcmVxdWVuY3kgcmVkdWN0aW9uIGhhcHBlbnMgYXQgbWluaW11bSBzdGVwcyBvZgotCSAqIDUlIChkZWZhdWx0KSBvZiBtYXhfZnJlcXVlbmN5CisJICogNSUgKGRlZmF1bHQpIG9mIG1heGltdW0gZnJlcXVlbmN5CiAJICovCiAKLQkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGluY3JlYXNlICovCi0JaWRsZV90aWNrcyA9IFVJTlRfTUFYOworCS8qIEdldCBBYnNvbHV0ZSBMb2FkICovCisJZm9yX2VhY2hfY3B1KGosIHBvbGljeS0+Y3B1cykgeworCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87CisJCWNwdXRpbWU2NF90IGN1cl93YWxsX3RpbWUsIGN1cl9pZGxlX3RpbWU7CisJCXVuc2lnbmVkIGludCBpZGxlX3RpbWUsIHdhbGxfdGltZTsKKworCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKKworCQljdXJfaWRsZV90aW1lID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwgJmN1cl93YWxsX3RpbWUpOworCisJCXdhbGxfdGltZSA9ICh1bnNpZ25lZCBpbnQpIGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwKKwkJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsKTsKKwkJal9kYnNfaW5mby0+cHJldl9jcHVfd2FsbCA9IGN1cl93YWxsX3RpbWU7CisKKwkJaWRsZV90aW1lID0gKHVuc2lnbmVkIGludCkgY3B1dGltZTY0X3N1YihjdXJfaWRsZV90aW1lLAorCQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUpOworCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlID0gY3VyX2lkbGVfdGltZTsKKworCQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpIHsKKwkJCWNwdXRpbWU2NF90IGN1cl9uaWNlOworCQkJdW5zaWduZWQgbG9uZyBjdXJfbmljZV9qaWZmaWVzOworCisJCQljdXJfbmljZSA9IGNwdXRpbWU2NF9zdWIoa3N0YXRfY3B1KGopLmNwdXN0YXQubmljZSwKKwkJCQkJIGpfZGJzX2luZm8tPnByZXZfY3B1X25pY2UpOworCQkJLyoKKwkJCSAqIEFzc3VtcHRpb246IG5pY2UgdGltZSBiZXR3ZWVuIHNhbXBsaW5nIHBlcmlvZHMgd2lsbAorCQkJICogYmUgbGVzcyB0aGFuIDJeMzIgamlmZmllcyBmb3IgMzIgYml0IHN5cworCQkJICovCisJCQljdXJfbmljZV9qaWZmaWVzID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJCWNwdXRpbWU2NF90b19qaWZmaWVzNjQoY3VyX25pY2UpOworCisJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlID0ga3N0YXRfY3B1KGopLmNwdXN0YXQubmljZTsKKwkJCWlkbGVfdGltZSArPSBqaWZmaWVzX3RvX3VzZWNzKGN1cl9uaWNlX2ppZmZpZXMpOworCQl9CisKKwkJaWYgKHVubGlrZWx5KCF3YWxsX3RpbWUgfHwgd2FsbF90aW1lIDwgaWRsZV90aW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWxvYWQgPSAxMDAgKiAod2FsbF90aW1lIC0gaWRsZV90aW1lKSAvIHdhbGxfdGltZTsKKwl9CisKKwkvKgorCSAqIGJyZWFrIG91dCBpZiB3ZSAnY2Fubm90JyByZWR1Y2UgdGhlIHNwZWVkIGFzIHRoZSB1c2VyIG1pZ2h0CisJICogd2FudCBmcmVxX3N0ZXAgdG8gYmUgemVybworCSAqLworCWlmIChkYnNfdHVuZXJzX2lucy5mcmVxX3N0ZXAgPT0gMCkKKwkJcmV0dXJuOwogCiAJLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBpbmNyZWFzZSAqLwotCXRvdGFsX2lkbGVfdGlja3MgPSBnZXRfY3B1X2lkbGVfdGltZShjcHUpOwotCXRtcF9pZGxlX3RpY2tzID0gdG90YWxfaWRsZV90aWNrcyAtCi0JCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7Ci0JdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cCA9IHRvdGFsX2lkbGVfdGlja3M7Ci0KLQlpZiAodG1wX2lkbGVfdGlja3MgPCBpZGxlX3RpY2tzKQotCQlpZGxlX3RpY2tzID0gdG1wX2lkbGVfdGlja3M7Ci0KLQkvKiBTY2FsZSBpZGxlIHRpY2tzIGJ5IDEwMCBhbmQgY29tcGFyZSB3aXRoIHVwIGFuZCBkb3duIHRpY2tzICovCi0JaWRsZV90aWNrcyAqPSAxMDA7Ci0JdXBfaWRsZV90aWNrcyA9ICgxMDAgLSBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpICoKLQkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7Ci0KLQlpZiAoaWRsZV90aWNrcyA8IHVwX2lkbGVfdGlja3MpIHsKKwlpZiAobG9hZCA+IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgewogCQl0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPSAwOwotCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24gPQotCQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKIAogCQkvKiBpZiB3ZSBhcmUgYWxyZWFkeSBhdCBmdWxsIHNwZWVkIHRoZW4gYnJlYWsgb3V0IGVhcmx5ICovCiAJCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9PSBwb2xpY3ktPm1heCkKQEAgLTM5OCw0OSArNDc4LDI0IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGRlY3JlYXNlICovCi0JdGhpc19kYnNfaW5mby0+ZG93bl9za2lwKys7Ci0JaWYgKHRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA8IGRic190dW5lcnNfaW5zLnNhbXBsaW5nX2Rvd25fZmFjdG9yKQotCQlyZXR1cm47Ci0KLQkvKiBDaGVjayBmb3IgZnJlcXVlbmN5IGRlY3JlYXNlICovCi0JdG90YWxfaWRsZV90aWNrcyA9IHRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7Ci0JdG1wX2lkbGVfdGlja3MgPSB0b3RhbF9pZGxlX3RpY2tzIC0KLQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duOwotCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93biA9IHRvdGFsX2lkbGVfdGlja3M7Ci0KLQlpZiAodG1wX2lkbGVfdGlja3MgPCBpZGxlX3RpY2tzKQotCQlpZGxlX3RpY2tzID0gdG1wX2lkbGVfdGlja3M7Ci0KLQkvKiBTY2FsZSBpZGxlIHRpY2tzIGJ5IDEwMCBhbmQgY29tcGFyZSB3aXRoIHVwIGFuZCBkb3duIHRpY2tzICovCi0JaWRsZV90aWNrcyAqPSAxMDA7Ci0JdGhpc19kYnNfaW5mby0+ZG93bl9za2lwID0gMDsKLQotCWZyZXFfZG93bl9zYW1wbGluZ19yYXRlID0gZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSAqCi0JCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX2Rvd25fZmFjdG9yOwotCWRvd25faWRsZV90aWNrcyA9ICgxMDAgLSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgKgotCQl1c2Vjc190b19qaWZmaWVzKGZyZXFfZG93bl9zYW1wbGluZ19yYXRlKTsKLQotCWlmIChpZGxlX3RpY2tzID4gZG93bl9pZGxlX3RpY2tzKSB7Ci0JCS8qCi0JCSAqIGlmIHdlIGFyZSBhbHJlYWR5IGF0IHRoZSBsb3dlc3Qgc3BlZWQgdGhlbiBicmVhayBvdXQgZWFybHkKLQkJICogb3IgaWYgd2UgJ2Nhbm5vdCcgcmVkdWNlIHRoZSBzcGVlZCBhcyB0aGUgdXNlciBtaWdodCB3YW50Ci0JCSAqIGZyZXFfdGFyZ2V0IHRvIGJlIHplcm8KLQkJICovCi0JCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9PSBwb2xpY3ktPm1pbgotCQkJCXx8IGRic190dW5lcnNfaW5zLmZyZXFfc3RlcCA9PSAwKQotCQkJcmV0dXJuOwotCisJLyoKKwkgKiBUaGUgb3B0aW1hbCBmcmVxdWVuY3kgaXMgdGhlIGZyZXF1ZW5jeSB0aGF0IGlzIHRoZSBsb3dlc3QgdGhhdAorCSAqIGNhbiBzdXBwb3J0IHRoZSBjdXJyZW50IENQVSB1c2FnZSB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHVwCisJICogcG9saWN5LiBUbyBiZSBzYWZlLCB3ZSBmb2N1cyAxMCBwb2ludHMgdW5kZXIgdGhlIHRocmVzaG9sZC4KKwkgKi8KKwlpZiAobG9hZCA8IChkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCAtIDEwKSkgewogCQlmcmVxX3RhcmdldCA9IChkYnNfdHVuZXJzX2lucy5mcmVxX3N0ZXAgKiBwb2xpY3ktPm1heCkgLyAxMDA7CiAKLQkJLyogbWF4IGZyZXEgY2Fubm90IGJlIGxlc3MgdGhhbiAxMDAuIEJ1dCB3aG8ga25vd3MuLi4uICovCi0JCWlmICh1bmxpa2VseShmcmVxX3RhcmdldCA9PSAwKSkKLQkJCWZyZXFfdGFyZ2V0ID0gNTsKLQogCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSAtPSBmcmVxX3RhcmdldDsKIAkJaWYgKHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxIDwgcG9saWN5LT5taW4pCiAJCQl0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA9IHBvbGljeS0+bWluOwogCisJCS8qCisJCSAqIGlmIHdlIGNhbm5vdCByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBhbnltb3JlLCBicmVhayBvdXQgZWFybHkKKwkJICovCisJCWlmIChwb2xpY3ktPmN1ciA9PSBwb2xpY3ktPm1pbikKKwkJCXJldHVybjsKKwogCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIHRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxLAogCQkJCUNQVUZSRVFfUkVMQVRJT05fSCk7CiAJCXJldHVybjsKQEAgLTQ0OSwyNyArNTA0LDQ1IEBACiAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaW50IGk7Ci0JbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCi0JCWRic19jaGVja19jcHUoaSk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkYnNfd29yaywKLQkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOwotCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKKwlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcHVfZGJzX2luZm9fcywgd29yay53b3JrKTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGJzX2luZm8tPmNwdTsKKworCS8qIFdlIHdhbnQgYWxsIENQVXMgdG8gZG8gc2FtcGxpbmcgbmVhcmx5IG9uIHNhbWUgamlmZnkgKi8KKwlpbnQgZGVsYXkgPSB1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpOworCisJZGVsYXkgLT0gamlmZmllcyAlIGRlbGF5OworCisJaWYgKGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSkgPCAwKQorCQlyZXR1cm47CisKKwlpZiAoIWRic19pbmZvLT5lbmFibGUpIHsKKwkJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOworCQlyZXR1cm47CisJfQorCisJZGJzX2NoZWNrX2NwdShkYnNfaW5mbyk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmtfb24oY3B1LCBrY29uc2VydmF0aXZlX3dxLCAmZGJzX2luZm8tPndvcmssIGRlbGF5KTsKKwl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9pbml0KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8pCiB7Ci0JaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZkYnNfd29yay50aW1lcik7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkYnNfd29yaywKLQkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOwotCXJldHVybjsKKwkvKiBXZSB3YW50IGFsbCBDUFVzIHRvIGRvIHNhbXBsaW5nIG5lYXJseSBvbiBzYW1lIGppZmZ5ICovCisJaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKTsKKwlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CisKKwlkYnNfaW5mby0+ZW5hYmxlID0gMTsKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZkYnNfaW5mby0+d29yaywgZG9fZGJzX3RpbWVyKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmtfb24oZGJzX2luZm8tPmNwdSwga2NvbnNlcnZhdGl2ZV93cSwgJmRic19pbmZvLT53b3JrLAorCQkJCWRlbGF5KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9leGl0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZkYnNfd29yayk7Ci0JcmV0dXJuOworCWRic19pbmZvLT5lbmFibGUgPSAwOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRic19pbmZvLT53b3JrKTsKIH0KIAogc3RhdGljIGludCBjcHVmcmVxX2dvdmVybm9yX2RicyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKQEAgLTUwMywxMSArNTc2LDEzIEBACiAJCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKIAkJCWpfZGJzX2luZm8tPmN1cl9wb2xpY3kgPSBwb2xpY3k7CiAKLQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXAgPSBnZXRfY3B1X2lkbGVfdGltZShjcHUpOwotCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duCi0JCQkJPSBqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOworCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1lKGosCisJCQkJCQkmal9kYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7CisJCQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpIHsKKwkJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlID0KKwkJCQkJCWtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2U7CisJCQl9CiAJCX0KLQkJdGhpc19kYnNfaW5mby0+ZW5hYmxlID0gMTsKIAkJdGhpc19kYnNfaW5mby0+ZG93bl9za2lwID0gMDsKIAkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBwb2xpY3ktPmN1cjsKIApAQCAtNTIzLDM4ICs1OTgsMzYgQEAKIAkJCWlmIChsYXRlbmN5ID09IDApCiAJCQkJbGF0ZW5jeSA9IDE7CiAKLQkJCWRlZl9zYW1wbGluZ19yYXRlID0gMTAgKiBsYXRlbmN5ICoKLQkJCQkJREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSOwotCi0JCQlpZiAoZGVmX3NhbXBsaW5nX3JhdGUgPCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKQotCQkJCWRlZl9zYW1wbGluZ19yYXRlID0gTUlOX1NUQVRfU0FNUExJTkdfUkFURTsKKwkJCWRlZl9zYW1wbGluZ19yYXRlID0KKwkJCQltYXgobGF0ZW5jeSAqIExBVEVOQ1lfTVVMVElQTElFUiwKKwkJCQkgICAgTUlOX1NUQVRfU0FNUExJTkdfUkFURSk7CiAKIAkJCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBkZWZfc2FtcGxpbmdfcmF0ZTsKIAotCQkJZGJzX3RpbWVyX2luaXQoKTsKIAkJCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoCiAJCQkJCSZkYnNfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKIAkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKIAkJfQorCQlkYnNfdGltZXJfaW5pdCh0aGlzX2Ric19pbmZvKTsKIAogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CisKIAkJYnJlYWs7CiAKIAljYXNlIENQVUZSRVFfR09WX1NUT1A6CiAJCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JCXRoaXNfZGJzX2luZm8tPmVuYWJsZSA9IDA7CisJCWRic190aW1lcl9leGl0KHRoaXNfZGJzX2luZm8pOwogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJmRic19hdHRyX2dyb3VwKTsKIAkJZGJzX2VuYWJsZS0tOworCiAJCS8qCiAJCSAqIFN0b3AgdGhlIHRpbWVyc2NoZWR1bGUgd29yaywgd2hlbiB0aGlzIGdvdmVybm9yCiAJCSAqIGlzIHVzZWQgZm9yIGZpcnN0IHRpbWUKIAkJICovCi0JCWlmIChkYnNfZW5hYmxlID09IDApIHsKLQkJCWRic190aW1lcl9leGl0KCk7CisJCWlmIChkYnNfZW5hYmxlID09IDApCiAJCQljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoCiAJCQkJCSZkYnNfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKIAkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKLQkJfQogCiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIApAQCAtNTcxLDYgKzY0NCw3IEBACiAJCQkJCXRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ksCiAJCQkJCXBvbGljeS0+bWluLCBDUFVGUkVRX1JFTEFUSU9OX0wpOwogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CisKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtNTg4LDIzICs2NjIsMzMgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV9nb3ZfZGJzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfY29uc2VydmF0aXZlKTsKKwlpbnQgZXJyOworCisJa2NvbnNlcnZhdGl2ZV93cSA9IGNyZWF0ZV93b3JrcXVldWUoImtjb25zZXJ2YXRpdmUiKTsKKwlpZiAoIWtjb25zZXJ2YXRpdmVfd3EpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDcmVhdGlvbiBvZiBrY29uc2VydmF0aXZlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWVyciA9IGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292X2NvbnNlcnZhdGl2ZSk7CisJaWYgKGVycikKKwkJZGVzdHJveV93b3JrcXVldWUoa2NvbnNlcnZhdGl2ZV93cSk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9nb3ZfZGJzX2V4aXQodm9pZCkKIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc2NoZWR1bGVkIHdvcmsgaXMgaW5kZWVkIG5vdCBydW5uaW5nICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWNwdWZyZXFfdW5yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfY29uc2VydmF0aXZlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShrY29uc2VydmF0aXZlX3dxKTsKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiQWxleGFuZGVyIENsb3V0ZXIgPGFsZXgta2VybmVsQGRpZ3Jpei5vcmcudWs+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCInY3B1ZnJlcV9jb25zZXJ2YXRpdmUnIC0gQSBkeW5hbWljIGNwdWZyZXEgZ292ZXJub3IgZm9yICIKK01PRFVMRV9BVVRIT1IoIkFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIidjcHVmcmVxX2NvbnNlcnZhdGl2ZScgLSBBIGR5bmFtaWMgY3B1ZnJlcSBnb3Zlcm5vciBmb3IgIgogCQkiTG93IExhdGVuY3kgRnJlcXVlbmN5IFRyYW5zaXRpb24gY2FwYWJsZSBwcm9jZXNzb3JzICIKIAkJIm9wdGltaXNlZCBmb3IgdXNlIGluIGEgYmF0dGVyeSBlbnZpcm9ubWVudCIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUKIGZzX2luaXRjYWxsKGNwdWZyZXFfZ292X2Ric19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCmluZGV4IDZmNDViMTYuLjMzOGY0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogZGJzIGlzIHVzZWQgaW4gdGhpcyBmaWxlIGFzIGEgc2hvcnRmb3JtIGZvciBkZW1hbmRiYXNlZCBzd2l0Y2hpbmcKQEAgLTUxLDggKzUyLDIwIEBACiAJCQkoTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8gKiBqaWZmaWVzX3RvX3VzZWNzKDEwKSkKICNkZWZpbmUgTUlOX1NBTVBMSU5HX1JBVEUJCQlcCiAJCQkoZGVmX3NhbXBsaW5nX3JhdGUgLyBNSU5fU0FNUExJTkdfUkFURV9SQVRJTykKKy8qIEFib3ZlIE1JTl9TQU1QTElOR19SQVRFIHdpbGwgdmFuaXNoIHdpdGggaXRzIHN5c2ZzIGZpbGUgc29vbgorICogRGVmaW5lIHRoZSBtaW5pbWFsIHNldHRhYmxlIHNhbXBsaW5nIHJhdGUgdG8gdGhlIGdyZWF0ZXIgb2Y6CisgKiAgIC0gIkhXIHRyYW5zaXRpb24gbGF0ZW5jeSIgKiAxMDAgKHNhbWUgYXMgZGVmYXVsdCBzYW1wbGluZyAvIDEwKQorICogICAtIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUKKyAqIFRvIGF2b2lkIHRoYXQgdXNlcnNwYWNlIHNob290cyBpdHNlbGYuCisqLworc3RhdGljIHVuc2lnbmVkIGludCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUodm9pZCkKK3sKKwlyZXR1cm4gbWF4KGRlZl9zYW1wbGluZ19yYXRlIC8gMTAsIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOworfQorCisvKiBUaGlzIHdpbGwgYWxzbyB2YW5pc2ggc29vbiB3aXRoIHJlbW92aW5nIHNhbXBsaW5nX3JhdGVfbWF4ICovCiAjZGVmaW5lIE1BWF9TQU1QTElOR19SQVRFCQkJKDUwMCAqIGRlZl9zYW1wbGluZ19yYXRlKQotI2RlZmluZSBERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVIJKDEwMDApCisjZGVmaW5lIExBVEVOQ1lfTVVMVElQTElFUgkJCSgxMDAwKQogI2RlZmluZSBUUkFOU0lUSU9OX0xBVEVOQ1lfTElNSVQJCSgxMCAqIDEwMDAgKiAxMDAwKQogCiBzdGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTY1LDE0ICs3OCwxNCBAQAogCWNwdXRpbWU2NF90IHByZXZfY3B1X3dhbGw7CiAJY3B1dGltZTY0X3QgcHJldl9jcHVfbmljZTsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmN1cl9wb2xpY3k7Ci0gCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOwogCXVuc2lnbmVkIGludCBmcmVxX2xvOwogCXVuc2lnbmVkIGludCBmcmVxX2xvX2ppZmZpZXM7CiAJdW5zaWduZWQgaW50IGZyZXFfaGlfamlmZmllczsKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGludCBlbmFibGU6MSwKLQkgICAgICAgICAgICAgc2FtcGxlX3R5cGU6MTsKKwkJc2FtcGxlX3R5cGU6MTsKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9kYnNfaW5mb19zLCBjcHVfZGJzX2luZm8pOwogCkBAIC0yMDMsMTIgKzIxNiwyOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3NpemVfdCBzaG93X3NhbXBsaW5nX3JhdGVfbWF4KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CisJc3RhdGljIGludCBwcmludF9vbmNlOworCisJaWYgKCFwcmludF9vbmNlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVUZSRVE6IG9uZGVtYW5kIHNhbXBsaW5nX3JhdGVfbWF4ICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21pbihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBvbmRlbWFuZCBzYW1wbGluZ19yYXRlX21pbiAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsCisJCSAgICAgICBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CiB9CiAKICNkZWZpbmUgZGVmaW5lX29uZV9ybyhfbmFtZSkJCVwKQEAgLTIzOCwxMyArMjY3LDExIEBACiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gTUFYX1NBTVBMSU5HX1JBVEUKLQkJICAgICB8fCBpbnB1dCA8IE1JTl9TQU1QTElOR19SQVRFKSB7CisJaWYgKHJldCAhPSAxKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGlucHV0OworCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBtYXgoaW5wdXQsIG1pbmltdW1fc2FtcGxpbmdfcmF0ZSgpKTsKIAltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0yNzksMTQgKzMwNiwxNCBAQAogCXVuc2lnbmVkIGludCBqOwogCiAJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKLQlpZiAoIHJldCAhPSAxICkKKwlpZiAocmV0ICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCBpbnB1dCA+IDEgKQorCWlmIChpbnB1dCA+IDEpCiAJCWlucHV0ID0gMTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKCBpbnB1dCA9PSBkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSApIHsgLyogbm90aGluZyB0byBkbyAqLworCWlmIChpbnB1dCA9PSBkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkgeyAvKiBub3RoaW5nIHRvIGRvICovCiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIGNvdW50OwogCX0KQEAgLTMzNyw3ICszNjQsNyBAQAogZGVmaW5lX29uZV9ydyhpZ25vcmVfbmljZV9sb2FkKTsKIGRlZmluZV9vbmVfcncocG93ZXJzYXZlX2JpYXMpOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRic19hdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGJzX2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2FtcGxpbmdfcmF0ZV9tYXguYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZV9taW4uYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZS5hdHRyLApAQCAtNTEyLDggKzUzOSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChkYnNfaW5mby0+Y3VyX3BvbGljeSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAJZGJzX2luZm8tPmZyZXFfbG8sCi0JICAgICAgICAgICAgICAgICAgICAgICAgCUNQVUZSRVFfUkVMQVRJT05fSCk7CisJCQlkYnNfaW5mby0+ZnJlcV9sbywgQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAl9CiAJcXVldWVfZGVsYXllZF93b3JrX29uKGNwdSwga29uZGVtYW5kX3dxLCAmZGJzX2luZm8tPndvcmssIGRlbGF5KTsKIAl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CkBAIC01MzAsNyArNTU2LDcgQEAKIAlkYnNfaW5mby0+c2FtcGxlX3R5cGUgPSBEQlNfTk9STUFMX1NBTVBMRTsKIAlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZkYnNfaW5mby0+d29yaywgZG9fZGJzX3RpbWVyKTsKIAlxdWV1ZV9kZWxheWVkX3dvcmtfb24oZGJzX2luZm8tPmNwdSwga29uZGVtYW5kX3dxLCAmZGJzX2luZm8tPndvcmssCi0JICAgICAgICAgICAgICAgICAgICAgIGRlbGF5KTsKKwkJZGVsYXkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKQEAgLTU5MSwxMSArNjE3LDkgQEAKIAkJCWlmIChsYXRlbmN5ID09IDApCiAJCQkJbGF0ZW5jeSA9IDE7CiAKLQkJCWRlZl9zYW1wbGluZ19yYXRlID0gbGF0ZW5jeSAqCi0JCQkJCURFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUjsKLQotCQkJaWYgKGRlZl9zYW1wbGluZ19yYXRlIDwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSkKLQkJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEU7CisJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9CisJCQkJbWF4KGxhdGVuY3kgKiBMQVRFTkNZX01VTFRJUExJRVIsCisJCQkJICAgIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOwogCiAJCQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gZGVmX3NhbXBsaW5nX3JhdGU7CiAJCX0KQEAgLTYxNywxMiArNjQxLDEwIEBACiAJCW11dGV4X2xvY2soJmRic19tdXRleCk7CiAJCWlmIChwb2xpY3ktPm1heCA8IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ktPmN1cikKIAkJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3ktPm1heCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIENQVUZSRVFfUkVMQVRJT05fSCk7CisJCQkJcG9saWN5LT5tYXgsIENQVUZSRVFfUkVMQVRJT05fSCk7CiAJCWVsc2UgaWYgKHBvbGljeS0+bWluID4gdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeS0+Y3VyKQogCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQodGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS0+bWluLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUV9SRUxBVElPTl9MKTsKKwkJCQlwb2xpY3ktPm1pbiwgQ1BVRlJFUV9SRUxBVElPTl9MKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlicmVhazsKIAl9CkBAIC02NzcsNyArNjk5LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPiIpOwogTU9EVUxFX0FVVEhPUigiQWxleGV5IFN0YXJpa292c2tpeSA8YWxleGV5Lnkuc3Rhcmlrb3Zza2l5QGludGVsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiJ2NwdWZyZXFfb25kZW1hbmQnIC0gQSBkeW5hbWljIGNwdWZyZXEgZ292ZXJub3IgZm9yICIKLSAgICAgICAgICAgICAgICAgICAiTG93IExhdGVuY3kgRnJlcXVlbmN5IFRyYW5zaXRpb24gY2FwYWJsZSBwcm9jZXNzb3JzIik7CisJIkxvdyBMYXRlbmN5IEZyZXF1ZW5jeSBUcmFuc2l0aW9uIGNhcGFibGUgcHJvY2Vzc29ycyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5ECmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwppbmRleCBjMGZmOTdkLi41YTYyZDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKQEAgLTIsNyArMiw3IEBACiAgKiAgZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4uCi0gKgkgICAgICAoQykgMjAwNCBab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+LgorICogIChDKSAyMDA0IFpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMyw3ICsyMyw3IEBACiAKIHN0YXRpYyBzcGlubG9ja190IGNwdWZyZXFfc3RhdHNfbG9jazsKIAotI2RlZmluZSBDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUihfbmFtZSxfbW9kZSxfc2hvdykgXAorI2RlZmluZSBDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93KSBcCiBzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciBfYXR0cl8jI19uYW1lID0ge1wKIAkuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSwgfSwgXAogCS5zaG93ID0gX3Nob3csXApAQCAtNTAsOCArNTAsNyBAQAogCXNzaXplX3QoKnNob3cpIChzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqLCBjaGFyICopOwogfTsKIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0c191cGRhdGUgKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdHNfdXBkYXRlKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIGN1cl90aW1lOwpAQCAtNjgsOCArNjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdAotc2hvd190b3RhbF90cmFucyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190b3RhbF90cmFucyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBwb2xpY3ktPmNwdSk7CiAJaWYgKCFzdGF0KQpAQCAtNzgsOCArNzYsNyBAQAogCQkJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBzdGF0LT5jcHUpLT50b3RhbF90cmFucyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3RpbWVfaW5fc3RhdGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGltZV9pbl9zdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXNzaXplX3QgbGVuID0gMDsKIAlpbnQgaTsKQEAgLTg5LDE0ICs4NiwxNCBAQAogCWNwdWZyZXFfc3RhdHNfdXBkYXRlKHN0YXQtPmNwdSk7CiAJZm9yIChpID0gMDsgaSA8IHN0YXQtPnN0YXRlX251bTsgaSsrKSB7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV1ICVsbHVcbiIsIHN0YXQtPmZyZXFfdGFibGVbaV0sCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KHN0YXQtPnRpbWVfaW5fc3RhdGVbaV0pKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQljcHV0aW1lNjRfdG9fY2xvY2tfdChzdGF0LT50aW1lX2luX3N0YXRlW2ldKSk7CiAJfQogCXJldHVybiBsZW47CiB9CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTCi1zdGF0aWMgc3NpemVfdAotc2hvd190cmFuc190YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190cmFuc190YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewogCXNzaXplX3QgbGVuID0gMDsKIAlpbnQgaSwgajsKQEAgLTEzOSwxMSArMTM2LDExIEBACiAJCXJldHVybiBQQUdFX1NJWkU7CiAJcmV0dXJuIGxlbjsKIH0KLUNQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRyYW5zX3RhYmxlLDA0NDQsc2hvd190cmFuc190YWJsZSk7CitDUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0cmFuc190YWJsZSwgMDQ0NCwgc2hvd190cmFuc190YWJsZSk7CiAjZW5kaWYKIAotQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodG90YWxfdHJhbnMsMDQ0NCxzaG93X3RvdGFsX3RyYW5zKTsKLUNQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRpbWVfaW5fc3RhdGUsMDQ0NCxzaG93X3RpbWVfaW5fc3RhdGUpOworQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodG90YWxfdHJhbnMsIDA0NDQsIHNob3dfdG90YWxfdHJhbnMpOworQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodGltZV9pbl9zdGF0ZSwgMDQ0NCwgc2hvd190aW1lX2luX3N0YXRlKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfYXR0cnNbXSA9IHsKIAkmX2F0dHJfdG90YWxfdHJhbnMuYXR0ciwKQEAgLTE1OCw4ICsxNTUsNyBAQAogCS5uYW1lID0gInN0YXRzIgogfTsKIAotc3RhdGljIGludAotZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQsIHVuc2lnbmVkIGludCBmcmVxKQorc3RhdGljIGludCBmcmVxX3RhYmxlX2dldF9pbmRleChzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCwgdW5zaWduZWQgaW50IGZyZXEpCiB7CiAJaW50IGluZGV4OwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXQtPm1heF9zdGF0ZTsgaW5kZXgrKykKQEAgLTE4Myw4ICsxNzksNyBAQAogCQljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKIH0KIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBjcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgY291bnQgPSAwLCByZXQgPSAwOwpAQCAtMTk0LDcgKzE4OSw4IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHBvbGljeS0+Y3B1OwogCWlmIChwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSkpCiAJCXJldHVybiAtRUJVU1k7Ci0JaWYgKChzdGF0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfc3RhdHMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlzdGF0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoKHN0YXQpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZGF0YSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwpAQCAtMjAzLDEzICsxOTksMTQgQEAKIAkJZ290byBlcnJvcl9nZXRfZmFpbDsKIAl9CiAKLQlpZiAoKHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGF0YS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApKSkKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRhdGEtPmtvYmosICZzdGF0c19hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQogCQlnb3RvIGVycm9yX291dDsKIAogCXN0YXQtPmNwdSA9IGNwdTsKIAlwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSkgPSBzdGF0OwogCi0JZm9yIChpPTA7IHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CisJZm9yIChpID0gMDsgdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwpAQCAtMjU1LDkgKzI1Miw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3BvbGljeSAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCXZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdF9ub3RpZmllcl9wb2xpY3koc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGRhdGE7CkBAIC0yNjgsMTQgKzI2NCwxNCBAQAogCXRhYmxlID0gY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKGNwdSk7CiAJaWYgKCF0YWJsZSkKIAkJcmV0dXJuIDA7Ci0JaWYgKChyZXQgPSBjcHVmcmVxX3N0YXRzX2NyZWF0ZV90YWJsZShwb2xpY3ksIHRhYmxlKSkpCisJcmV0ID0gY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUocG9saWN5LCB0YWJsZSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3RyYW5zIChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3RyYW5zKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdDsKQEAgLTM0MCwxOSArMzM2LDIwIEBACiAJLm5vdGlmaWVyX2NhbGwgPSBjcHVmcmVxX3N0YXRfbm90aWZpZXJfdHJhbnMKIH07CiAKLXN0YXRpYyBpbnQKLV9faW5pdCBjcHVmcmVxX3N0YXRzX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfc3RhdHNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGNwdTsKIAogCXNwaW5fbG9ja19pbml0KCZjcHVmcmVxX3N0YXRzX2xvY2spOwotCWlmICgocmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfcG9saWN5X2Jsb2NrLAotCQkJCUNQVUZSRVFfUE9MSUNZX05PVElGSUVSKSkpCisJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfcG9saWN5X2Jsb2NrLAorCQkJCUNQVUZSRVFfUE9MSUNZX05PVElGSUVSKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl90cmFuc19ibG9jaywKLQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpKSkgeworCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3RyYW5zX2Jsb2NrLAorCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CisJaWYgKHJldCkgewogCQljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3BvbGljeV9ibG9jaywKIAkJCQlDUFVGUkVRX1BPTElDWV9OT1RJRklFUik7CiAJCXJldHVybiByZXQ7CkBAIC0zNjQsOCArMzYxLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgdm9pZAotX19leGl0IGNwdWZyZXFfc3RhdHNfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNwdWZyZXFfc3RhdHNfZXhpdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHU7CiAKQEAgLTM3OSwxMCArMzc1LDEwIEBACiAJfQogfQogCi1NT0RVTEVfQVVUSE9SICgiWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiJ2NwdWZyZXFfc3RhdHMnIC0gQSBkcml2ZXIgdG8gZXhwb3J0IGNwdWZyZXEgc3RhdHMgIgorTU9EVUxFX0FVVEhPUigiWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCInY3B1ZnJlcV9zdGF0cycgLSBBIGRyaXZlciB0byBleHBvcnQgY3B1ZnJlcSBzdGF0cyAiCiAJCQkJInRocm91Z2ggc3lzZnMgZmlsZXN5c3RlbSIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoY3B1ZnJlcV9zdGF0c19pbml0KTsKIG1vZHVsZV9leGl0KGNwdWZyZXFfc3RhdHNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCmluZGV4IDE0NDJiYmEuLjY2ZDJkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCkBAIC0yNCw5ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotCiAvKioKICAqIEEgZmV3IHZhbHVlcyBuZWVkZWQgYnkgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vcgogICovCkBAIC0zNyw3ICszNCw3IEBACiAJCQkJCQkJdXNlcnNwYWNlICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBjcHVfaXNfbWFuYWdlZCk7CiAKLXN0YXRpYyBERUZJTkVfTVVURVgJKHVzZXJzcGFjZV9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHVzZXJzcGFjZV9tdXRleCk7CiBzdGF0aWMgaW50IGNwdXNfdXNpbmdfdXNlcnNwYWNlX2dvdmVybm9yOwogCiAjZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCkBAIC00Niw5ICs0Myw5IEBACiAvKiBrZWVwIHRyYWNrIG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLwogc3RhdGljIGludAogdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCisJdm9pZCAqZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXEgPSBkYXRhOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKIAogCWlmICghcGVyX2NwdShjcHVfaXNfbWFuYWdlZCwgZnJlcS0+Y3B1KSkKIAkJcmV0dXJuIDA7CkBAIC01NywxMSArNTQsMTEgQEAKIAkJCWZyZXEtPmNwdSwgZnJlcS0+bmV3KTsKIAlwZXJfY3B1KGNwdV9jdXJfZnJlcSwgZnJlcS0+Y3B1KSA9IGZyZXEtPm5ldzsKIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcl9ibG9jayA9IHsKLSAgICAgICAgLm5vdGlmaWVyX2NhbGwgID0gdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXIKKwkubm90aWZpZXJfY2FsbCAgPSB1c2Vyc3BhY2VfY3B1ZnJlcV9ub3RpZmllcgogfTsKIAogCkBAIC05Myw4ICs5MCwxMSBAQAogCSAqIFdlJ3JlIHNhZmUgZnJvbSBjb25jdXJyZW50IGNhbGxzIHRvIC0+dGFyZ2V0KCkgaGVyZQogCSAqIGFzIHdlIGhvbGQgdGhlIHVzZXJzcGFjZV9tdXRleCBsb2NrLiBJZiB3ZSB3ZXJlIGNhbGxpbmcKIAkgKiBjcHVmcmVxX2RyaXZlcl90YXJnZXQsIGEgZGVhZGxvY2sgc2l0dWF0aW9uIG1pZ2h0IG9jY3VyOgotCSAqIEE6IGNwdWZyZXFfc2V0IChsb2NrIHVzZXJzcGFjZV9tdXRleCkgLT4gY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGxvY2sgcG9saWN5LT5sb2NrKQotCSAqIEI6IGNwdWZyZXFfc2V0X3BvbGljeShsb2NrIHBvbGljeS0+bG9jaykgLT4gX19jcHVmcmVxX2dvdmVybm9yIC0+IGNwdWZyZXFfZ292ZXJub3JfdXNlcnNwYWNlIChsb2NrIHVzZXJzcGFjZV9tdXRleCkKKwkgKiBBOiBjcHVmcmVxX3NldCAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpIC0+CisJICogICAgICBjcHVmcmVxX2RyaXZlcl90YXJnZXQobG9jayBwb2xpY3ktPmxvY2spCisJICogQjogY3B1ZnJlcV9zZXRfcG9saWN5KGxvY2sgcG9saWN5LT5sb2NrKSAtPgorCSAqICAgICAgX19jcHVmcmVxX2dvdmVybm9yIC0+CisJICogICAgICAgICBjcHVmcmVxX2dvdmVybm9yX3VzZXJzcGFjZSAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpCiAJICovCiAJcmV0ID0gX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCBmcmVxLCBDUFVGUkVRX1JFTEFUSU9OX0wpOwogCkBAIC0yMTAsOSArMjEwLDEwIEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4sIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJDUFVmcmVxIHBvbGljeSBnb3Zlcm5vciAndXNlcnNwYWNlJyIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4sICIKKwkJIlJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQVWZyZXEgcG9saWN5IGdvdmVybm9yICd1c2Vyc3BhY2UnIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFCiBmc19pbml0Y2FsbChjcHVmcmVxX2dvdl91c2Vyc3BhY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwppbmRleCA5MDcxZDgwLi5hOWJkM2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWF4X2ZyZXEgPSAwOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpIHsKIAkJCWRwcmludGsoInRhYmxlIGVudHJ5ICV1IGlzIGludmFsaWQsIHNraXBwaW5nXG4iLCBpKTsKQEAgLTcwLDcgKzcwLDcgQEAKIAljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAogCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CkBAIC0xMjUsMTMgKzEyNSwxMyBAQAogCWlmICghY3B1X29ubGluZShwb2xpY3ktPmNwdSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKIAkJaWYgKChmcmVxIDwgcG9saWN5LT5taW4pIHx8IChmcmVxID4gcG9saWN5LT5tYXgpKQogCQkJY29udGludWU7Ci0JCXN3aXRjaChyZWxhdGlvbikgeworCQlzd2l0Y2ggKHJlbGF0aW9uKSB7CiAJCWNhc2UgQ1BVRlJFUV9SRUxBVElPTl9IOgogCQkJaWYgKGZyZXEgPD0gdGFyZ2V0X2ZyZXEpIHsKIAkJCQlpZiAoZnJlcSA+PSBvcHRpbWFsLmZyZXF1ZW5jeSkgewpAQCAtMTc4LDcgKzE3OCw3IEBACiAvKioKICAqIHNob3dfYXZhaWxhYmxlX2ZyZXFzIC0gc2hvdyBhdmFpbGFibGUgZnJlcXVlbmNpZXMgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfYXZhaWxhYmxlX2ZyZXFzIChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19hdmFpbGFibGVfZnJlcXMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAl1bnNpZ25lZCBpbnQgaSA9IDA7CiAJdW5zaWduZWQgaW50IGNwdSA9IHBvbGljeS0+Y3B1OwpAQCAtMTkwLDcgKzE5MCw3IEBACiAKIAl0YWJsZSA9IHBlcl9jcHUoc2hvd190YWJsZSwgY3B1KTsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQlpZiAodGFibGVbaV0uZnJlcXVlbmN5ID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCArPSBzcHJpbnRmKCZidWZbY291bnRdLCAiJWQgIiwgdGFibGVbaV0uZnJlcXVlbmN5KTsKQEAgLTIzNCw2ICsyMzQsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkNQVWZyZXEgZnJlcXVlbmN5IHRhYmxlIGhlbHBlcnMiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQVWZyZXEgZnJlcXVlbmN5IHRhYmxlIGhlbHBlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCmluZGV4IGU1MjIxNDQuLjAxYWZkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKKysrIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwpAQCAtODYsNyArODYsNyBAQAogY29uZmlnIENSWVBUT19TSEExX1MzOTAKIAl0cmlzdGF0ZSAiU0hBMSBkaWdlc3QgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gUzM5MAotCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19IQVNICiAJaGVscAogCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIFNIQS0xIHNlY3VyZSBoYXNoIHN0YW5kYXJkIChGSVBTIDE4MC0xL0RGSVBTIDE4MC0yKS4KQEAgLTk0LDcgKzk0LDcgQEAKIGNvbmZpZyBDUllQVE9fU0hBMjU2X1MzOTAKIAl0cmlzdGF0ZSAiU0hBMjU2IGRpZ2VzdCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBTMzkwCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBMjU2IHNlY3VyZSBoYXNoIHN0YW5kYXJkIChERklQUyAxODAtMikuCkBAIC0xMDUsNyArMTA1LDcgQEAKIGNvbmZpZyBDUllQVE9fU0hBNTEyX1MzOTAKIAl0cmlzdGF0ZSAiU0hBMzg0IGFuZCBTSEE1MTIgZGlnZXN0IGFsZ29yaXRobSIKIAlkZXBlbmRzIG9uIFMzOTAKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fSEFTSAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEE1MTIgc2VjdXJlIGhhc2ggc3RhbmRhcmQuCkBAIC0yMDAsNCArMjAwLDEzIEBACiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgSVhQNHh4IE5QRSBjcnlwdG8gZW5naW5lLgogCitjb25maWcgQ1JZUFRPX0RFVl9QUEM0WFgKKwl0cmlzdGF0ZSAiRHJpdmVyIEFNQ0MgUFBDNHh4IGNyeXB0byBhY2NlbGVyYXRvciIKKwlkZXBlbmRzIG9uIFBQQyAmJiA0eHgKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBoYXZlIHN1cHBvcnQgZm9yIEFNQ0MgY3J5cHRvIGFjY2VsZXJhdGlvbi4KKwogZW5kaWYgIyBDUllQVE9fSFcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKaW5kZXggNzM1NTdiMi4uOWJmNGEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVgpICs9IGhpZm5fNzk1eC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TKSArPSB0YWxpdG9zLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX0lYUDRYWCkgKz0gaXhwNHh4X2NyeXB0by5vCitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFgpICs9IGFtY2MvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL01ha2VmaWxlIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM3NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai0kKENPTkZJR19DUllQVE9fREVWX1BQQzRYWCkgKz0gY3J5cHRvNHh4Lm8KK2NyeXB0bzR4eC1vYmpzIDo9ICBjcnlwdG80eHhfY29yZS5vIGNyeXB0bzR4eF9hbGcubyBjcnlwdG80eHhfc2EubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9hbGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWI2ZTFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBMaW51eCBjcnlwdG8gYWxnb3JpdGhtcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CisjaW5jbHVkZSAiY3J5cHRvNHh4X3JlZ19kZWYuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfc2EuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfY29yZS5oIgorCit2b2lkIHNldF9keW5hbWljX3NhX2NvbW1hbmRfMChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhLCB1MzIgc2F2ZV9oLAorCQkJICAgICAgdTMyIHNhdmVfaXYsIHUzMiBsZF9oLCB1MzIgbGRfaXYsIHUzMiBoZHJfcHJvYywKKwkJCSAgICAgIHUzMiBoLCB1MzIgYywgdTMyIHBhZF90eXBlLCB1MzIgb3BfZ3JwLCB1MzIgb3AsCisJCQkgICAgICB1MzIgZGlyKQoreworCXNhLT5zYV9jb21tYW5kXzAudyA9IDA7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5zYXZlX2hhc2hfc3RhdGUgPSBzYXZlX2g7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5zYXZlX2l2ID0gc2F2ZV9pdjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmxvYWRfaGFzaF9zdGF0ZSA9IGxkX2g7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5sb2FkX2l2ID0gbGRfaXY7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5oZHJfcHJvYyA9IGhkcl9wcm9jOworCXNhLT5zYV9jb21tYW5kXzAuYmYuaGFzaF9hbGcgPSBoOworCXNhLT5zYV9jb21tYW5kXzAuYmYuY2lwaGVyX2FsZyA9IGM7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5wYWRfdHlwZSA9IHBhZF90eXBlICYgMzsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmV4dGVuZF9wYWQgPSBwYWRfdHlwZSA+PiAyOworCXNhLT5zYV9jb21tYW5kXzAuYmYub3BfZ3JvdXAgPSBvcF9ncnA7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5vcGNvZGUgPSBvcDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmRpciA9IGRpcjsKK30KKwordm9pZCBzZXRfZHluYW1pY19zYV9jb21tYW5kXzEoc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYSwgdTMyIGNtLCB1MzIgaG1hY19tYywKKwkJCSAgICAgIHUzMiBjZmIsIHUzMiBlc24sIHUzMiBzbl9tYXNrLCB1MzIgbXV0ZSwKKwkJCSAgICAgIHUzMiBjcF9wYWQsIHUzMiBjcF9wYXksIHUzMiBjcF9oZHIpCit7CisJc2EtPnNhX2NvbW1hbmRfMS53ID0gMDsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNyeXB0b19tb2RlMzEgPSAoY20gJiA0KSA+PiAyOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY3J5cHRvX21vZGU5XzggPSBjbSAmIDM7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5mZWVkYmFja19tb2RlID0gY2ZiLAorCXNhLT5zYV9jb21tYW5kXzEuYmYuc2FfcmV2ID0gMTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmV4dGVuZGVkX3NlcV9udW0gPSBlc247CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5zZXFfbnVtX21hc2sgPSBzbl9tYXNrOworCXNhLT5zYV9jb21tYW5kXzEuYmYubXV0YWJsZV9iaXRfcHJvYyA9IG11dGU7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jb3B5X3BhZCA9IGNwX3BhZDsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNvcHlfcGF5bG9hZCA9IGNwX3BheTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNvcHlfaGRyID0gY3BfaGRyOworfQorCitpbnQgY3J5cHRvNHh4X2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+ZGlyZWN0aW9uID0gRElSX09VVEJPVU5EOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisJY3R4LT5pc19oYXNoID0gMDsKKwljdHgtPnBkX2N0bCA9IDB4MTsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkJICByZXEtPm5ieXRlcywgcmVxLT5pbmZvLAorCQkJCSAgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShjdHgpKTsKK30KKworaW50IGNyeXB0bzR4eF9kZWNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisJY3R4LT5pc19oYXNoID0gMDsKKwljdHgtPnBkX2N0bCA9IDE7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsIHJlcS0+ZHN0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIHJlcS0+aW5mbywKKwkJCQkgIGdldF9keW5hbWljX3NhX2l2X3NpemUoY3R4KSk7Cit9CisKKy8qKgorICogQUVTIEZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IGNyeXB0bzR4eF9zZXRrZXlfYWVzKHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyLAorCQkJCWNvbnN0IHU4ICprZXksCisJCQkJdW5zaWduZWQgaW50IGtleWxlbiwKKwkJCQl1bnNpZ25lZCBjaGFyIGNtLAorCQkJCXU4IGZiKQoreworCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl90Zm0oY2lwaGVyKTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCWludCAgICByYzsKKworCWlmIChrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMjU2ICYmCisJCWtleWxlbiAhPSBBRVNfS0VZU0laRV8xOTIgJiYga2V5bGVuICE9IEFFU19LRVlTSVpFXzEyOCkgeworCQljcnlwdG9fYWJsa2NpcGhlcl9zZXRfZmxhZ3MoY2lwaGVyLAorCQkJCUNSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ3JlYXRlIFNBICovCisJaWYgKGN0eC0+c2FfaW5fZG1hX2FkZHIgfHwgY3R4LT5zYV9vdXRfZG1hX2FkZHIpCisJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisKKwlyYyA9IGNyeXB0bzR4eF9hbGxvY19zYShjdHgsIFNBX0FFUzEyOF9MRU4gKyAoa2V5bGVuLTE2KSAvIDQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyID09IDApIHsKKwkJcmMgPSBjcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKGN0eCk7CisJCWlmIChyYykgeworCQkJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKwkvKiBTZXR1cCBTQSAqLworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCWN0eC0+aGFzaF9maW5hbCA9IDA7CisKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzAoc2EsIFNBX05PVF9TQVZFX0hBU0gsIFNBX05PVF9TQVZFX0lWLAorCQkJCSBTQV9MT0FEX0hBU0hfRlJPTV9TQSwgU0FfTE9BRF9JVl9GUk9NX1NUQVRFLAorCQkJCSBTQV9OT19IRUFERVJfUFJPQywgU0FfSEFTSF9BTEdfTlVMTCwKKwkJCQkgU0FfQ0lQSEVSX0FMR19BRVMsIFNBX1BBRF9UWVBFX1pFUk8sCisJCQkJIFNBX09QX0dST1VQX0JBU0lDLCBTQV9PUENPREVfREVDUllQVCwKKwkJCQkgRElSX0lOQk9VTkQpOworCisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8xKHNhLCBjbSwgU0FfSEFTSF9NT0RFX0hBU0gsCisJCQkJIGZiLCBTQV9FWFRFTkRFRF9TTl9PRkYsCisJCQkJIFNBX1NFUV9NQVNLX09GRiwgU0FfTUNfRU5BQkxFLAorCQkJCSBTQV9OT1RfQ09QWV9QQUQsIFNBX05PVF9DT1BZX1BBWUxPQUQsCisJCQkJIFNBX05PVF9DT1BZX0hEUik7CisJY3J5cHRvNHh4X21lbWNweV9sZShjdHgtPnNhX2luICsgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2tleV9maWVsZChjdHgpLAorCQkJICAgIGtleSwga2V5bGVuKTsKKwlzYS0+c2FfY29udGVudHMgPSBTQV9BRVNfQ09OVEVOVFMgfCAoa2V5bGVuIDw8IDIpOworCXNhLT5zYV9jb21tYW5kXzEuYmYua2V5X2xlbiA9IGtleWxlbiA+PiAzOworCWN0eC0+aXNfaGFzaCA9IDA7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKwltZW1jcHkoY3R4LT5zYV9pbiArIGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoY3R4KSwKKwkJCSh2b2lkICopJmN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyLCA0KTsKKwljdHgtPm9mZnNldF90b19zcl9wdHIgPSBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKGN0eCk7CisKKwltZW1jcHkoY3R4LT5zYV9vdXQsIGN0eC0+c2FfaW4sIGN0eC0+c2FfbGVuICogNCk7CisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0OworCXNhLT5zYV9jb21tYW5kXzAuYmYuZGlyID0gRElSX09VVEJPVU5EOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfc2V0a2V5X2Flc19jYmMoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXIsCisJCQkgICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJcmV0dXJuIGNyeXB0bzR4eF9zZXRrZXlfYWVzKGNpcGhlciwga2V5LCBrZXlsZW4sIENSWVBUT19NT0RFX0NCQywKKwkJCQkgICAgQ1JZUFRPX0ZFRURCQUNLX01PREVfTk9fRkIpOworfQorCisvKioKKyAqIEhBU0ggU0hBMSBGdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBjcnlwdG80eHhfaGFzaF9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSAgIHVuc2lnbmVkIGludCBzYV9sZW4sCisJCQkJICAgdW5zaWduZWQgY2hhciBoYSwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIGhtKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSB0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqbXlfYWxnID0gY3J5cHRvX2FsZ190b19jcnlwdG80eHhfYWxnKGFsZyk7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKwlzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwICpzYV9pbjsKKwlpbnQgcmM7CisKKwljdHgtPmRldiAgID0gbXlfYWxnLT5kZXY7CisJY3R4LT5pc19oYXNoID0gMTsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCisJLyogQ3JlYXRlIFNBICovCisJaWYgKGN0eC0+c2FfaW5fZG1hX2FkZHIgfHwgY3R4LT5zYV9vdXRfZG1hX2FkZHIpCisJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisKKwlyYyA9IGNyeXB0bzR4eF9hbGxvY19zYShjdHgsIHNhX2xlbik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIgPT0gMCkgeworCQljcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKGN0eCk7CisJCWlmICghY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIpIHsKKwkJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXRmbS0+Y3J0X2FoYXNoLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpOworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMChzYSwgU0FfU0FWRV9IQVNILCBTQV9OT1RfU0FWRV9JViwKKwkJCQkgU0FfTk9UX0xPQURfSEFTSCwgU0FfTE9BRF9JVl9GUk9NX1NBLAorCQkJCSBTQV9OT19IRUFERVJfUFJPQywgaGEsIFNBX0NJUEhFUl9BTEdfTlVMTCwKKwkJCQkgU0FfUEFEX1RZUEVfWkVSTywgU0FfT1BfR1JPVVBfQkFTSUMsCisJCQkJIFNBX09QQ09ERV9IQVNILCBESVJfSU5CT1VORCk7CisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8xKHNhLCAwLCBTQV9IQVNIX01PREVfSEFTSCwKKwkJCQkgQ1JZUFRPX0ZFRURCQUNLX01PREVfTk9fRkIsIFNBX0VYVEVOREVEX1NOX09GRiwKKwkJCQkgU0FfU0VRX01BU0tfT0ZGLCBTQV9NQ19FTkFCTEUsCisJCQkJIFNBX05PVF9DT1BZX1BBRCwgU0FfTk9UX0NPUFlfUEFZTE9BRCwKKwkJCQkgU0FfTk9UX0NPUFlfSERSKTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCXNhLT5zYV9jb250ZW50cyA9IFNBX0hBU0gxNjBfQ09OVEVOVFM7CisJc2FfaW4gPSAoc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCAqKSBjdHgtPnNhX2luOworCS8qIE5lZWQgdG8gemVybyBoYXNoIGRpZ2VzdCBpbiBTQSAqLworCW1lbXNldChzYV9pbi0+aW5uZXJfZGlnZXN0LCAwLCBzaXplb2Yoc2FfaW4tPmlubmVyX2RpZ2VzdCkpOworCW1lbXNldChzYV9pbi0+b3V0ZXJfZGlnZXN0LCAwLCBzaXplb2Yoc2FfaW4tPm91dGVyX2RpZ2VzdCkpOworCXNhX2luLT5zdGF0ZV9wdHIgPSBjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcjsKKwljdHgtPm9mZnNldF90b19zcl9wdHIgPSBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKGN0eCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisJaW50IGRzOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisKKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwlkcyA9IGNyeXB0b19haGFzaF9kaWdlc3RzaXplKAorCQkJX19jcnlwdG9fYWhhc2hfY2FzdChyZXEtPmJhc2UudGZtKSk7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5kaWdlc3RfbGVuID0gZHMgPj4gMjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmxvYWRfaGFzaF9zdGF0ZSA9IFNBX0xPQURfSEFTSF9GUk9NX1NBOworCWN0eC0+aXNfaGFzaCA9IDE7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfdXBkYXRlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5pc19oYXNoID0gMTsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCWN0eC0+cGRfY3RsID0gMHgxMTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLAorCQkJCSAgKHN0cnVjdCBzY2F0dGVybGlzdCAqKSByZXEtPnJlc3VsdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCBOVUxMLCAwKTsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmhhc2hfZmluYWwgPSAxOworCWN0eC0+cGRfY3RsID0gMHgxMTsKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9JTkJPVU5EOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLAorCQkJCSAgKHN0cnVjdCBzY2F0dGVybGlzdCAqKSByZXEtPnJlc3VsdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCBOVUxMLCAwKTsKK30KKworLyoqCisgKiBTSEExIEFsZ29yaXRobQorICovCitpbnQgY3J5cHRvNHh4X3NoYTFfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvNHh4X2hhc2hfYWxnX2luaXQodGZtLCBTQV9IQVNIMTYwX0xFTiwgU0FfSEFTSF9BTEdfU0hBMSwKKwkJCQkgICAgICAgU0FfSEFTSF9NT0RFX0hBU0gpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBkZmIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCkBAIC0wLDAgKzEsMTMxMCBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgQU1DQyBjcnlwdG8gb2ZmbG9hZCBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciB1c2Ugd2l0aAorICogTGludXggQ3J5cHRvQVBJLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vZGNyLmg+CisjaW5jbHVkZSA8YXNtL2Rjci1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorI2luY2x1ZGUgImNyeXB0bzR4eF9yZWdfZGVmLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X2NvcmUuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfc2EuaCIKKworI2RlZmluZSBQUEM0WFhfU0VDX1ZFUlNJT05fU1RSCQkJIjAuNSIKKworLyoqCisgKiBQUEM0eHggQ3J5cHRvIEVuZ2luZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKi8KK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9od19pbml0KHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdW5pb24gY2VfcmluZ19zaXplIHJpbmdfc2l6ZTsKKwl1bmlvbiBjZV9yaW5nX2NvbnRvbCByaW5nX2N0cmw7CisJdW5pb24gY2VfcGFydF9yaW5nX3NpemUgcGFydF9yaW5nX3NpemU7CisJdW5pb24gY2VfaW9fdGhyZXNob2xkIGlvX3RocmVzaG9sZDsKKwl1MzIgcmFuZF9udW07CisJdW5pb24gY2VfcGVfZG1hX2NmZyBwZV9kbWFfY2ZnOworCisJd3JpdGVsKFBQQzRYWF9CWVRFX09SREVSLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfQllURV9PUkRFUl9DRkcpOworCS8qIHNldHVwIHBlIGRtYSwgaW5jbHVkZSByZXNldCBzZywgcGRyIGFuZCBwZSwgdGhlbiByZWxlYXNlIHJlc2V0ICovCisJcGVfZG1hX2NmZy53ID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3NncGRfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYuYm9fZGF0YV9lbiA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib19zYV9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5ib19wZF9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5keW5hbWljX3NhX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3NnID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BkciA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZSA9IDE7CisJd3JpdGVsKHBlX2RtYV9jZmcudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BFX0RNQV9DRkcpOworCS8qIHVuIHJlc2V0IHBlLHNnIGFuZCBwZHIgKi8KKwlwZV9kbWFfY2ZnLmJmLnBlX21vZGUgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfc2cgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGRyID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BlID0gMDsKKwlwZV9kbWFfY2ZnLmJmLmJvX3RkX2VuID0gMDsKKwl3cml0ZWwocGVfZG1hX2NmZy53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEVfRE1BX0NGRyk7CisJd3JpdGVsKGRldi0+cGRyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUERSX0JBU0UpOworCXdyaXRlbChkZXYtPnBkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JEUl9CQVNFKTsKKwl3cml0ZWwoUFBDNFhYX1BSTkdfQ1RSTF9BVVRPX0VOLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUFJOR19DVFJMKTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kX251bSwgc2l6ZW9mKHJhbmRfbnVtKSk7CisJd3JpdGVsKHJhbmRfbnVtLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUFJOR19TRUVEX0wpOworCWdldF9yYW5kb21fYnl0ZXMoJnJhbmRfbnVtLCBzaXplb2YocmFuZF9udW0pKTsKKwl3cml0ZWwocmFuZF9udW0sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QUk5HX1NFRURfSCk7CisJcmluZ19zaXplLncgPSAwOworCXJpbmdfc2l6ZS5iZi5yaW5nX29mZnNldCA9IFBQQzRYWF9QRF9TSVpFOworCXJpbmdfc2l6ZS5iZi5yaW5nX3NpemUgICA9IFBQQzRYWF9OVU1fUEQ7CisJd3JpdGVsKHJpbmdfc2l6ZS53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUklOR19TSVpFKTsKKwlyaW5nX2N0cmwudyA9IDA7CisJd3JpdGVsKHJpbmdfY3RybC53LCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUklOR19DVFJMKTsKKwl3cml0ZWwoUFBDNFhYX0RDXzNERVNfRU4sIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9ERVZJQ0VfQ1RSTCk7CisJd3JpdGVsKGRldi0+Z2RyX3BhLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0UpOworCXdyaXRlbChkZXYtPnNkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFKTsKKwlwYXJ0X3Jpbmdfc2l6ZS53ID0gMDsKKwlwYXJ0X3Jpbmdfc2l6ZS5iZi5zZHJfc2l6ZSA9IFBQQzRYWF9TRFJfU0laRTsKKwlwYXJ0X3Jpbmdfc2l6ZS5iZi5nZHJfc2l6ZSA9IFBQQzRYWF9HRFJfU0laRTsKKwl3cml0ZWwocGFydF9yaW5nX3NpemUudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BBUlRfUklOR19TSVpFKTsKKwl3cml0ZWwoUFBDNFhYX1NEX0JVRkZFUl9TSVpFLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEFSVF9SSU5HX0NGRyk7CisJaW9fdGhyZXNob2xkLncgPSAwOworCWlvX3RocmVzaG9sZC5iZi5vdXRwdXRfdGhyZXNob2xkID0gUFBDNFhYX09VVFBVVF9USFJFU0hPTEQ7CisJaW9fdGhyZXNob2xkLmJmLmlucHV0X3RocmVzaG9sZCAgPSBQUEM0WFhfSU5QVVRfVEhSRVNIT0xEOworCXdyaXRlbChpb190aHJlc2hvbGQudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lPX1RIUkVTSE9MRCk7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRFJfQkFTRV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SRFJfQkFTRV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QS1RfU1JDX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BLVF9ERVNUX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1NBX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFX1VBRERSKTsKKwl3cml0ZWwoMCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFX1VBRERSKTsKKwkvKiB1biByZXNldCBwZSxzZyBhbmQgcGRyICovCisJcGVfZG1hX2NmZy5iZi5wZV9tb2RlID0gMTsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3NnID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BkciA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZSA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib190ZF9lbiA9IDA7CisJd3JpdGVsKHBlX2RtYV9jZmcudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BFX0RNQV9DRkcpOworCS8qY2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0Ki8KKwl3cml0ZWwoUFBDNFhYX0lOVEVSUlVQVF9DTFIsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfQ0xSKTsKKwl3cml0ZWwoUFBDNFhYX0lOVF9ERVNDUl9DTlQsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfREVTQ1JfQ05UKTsKKwl3cml0ZWwoUFBDNFhYX0lOVF9ERVNDUl9DTlQsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfREVTQ1JfQ05UKTsKKwl3cml0ZWwoUFBDNFhYX0lOVF9DRkcsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfQ0ZHKTsKKwl3cml0ZWwoUFBDNFhYX1BEX0RPTkVfSU5ULCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0VOKTsKK30KKworaW50IGNyeXB0bzR4eF9hbGxvY19zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LCB1MzIgc2l6ZSkKK3sKKwljdHgtPnNhX2luID0gZG1hX2FsbG9jX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzaXplICogNCwKKwkJCQkJJmN0eC0+c2FfaW5fZG1hX2FkZHIsIEdGUF9BVE9NSUMpOworCWlmIChjdHgtPnNhX2luID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY3R4LT5zYV9vdXQgPSBkbWFfYWxsb2NfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNpemUgKiA0LAorCQkJCQkgJmN0eC0+c2Ffb3V0X2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoY3R4LT5zYV9vdXQgPT0gTlVMTCkgeworCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIGN0eC0+c2FfbGVuICogNCwKKwkJCQkgIGN0eC0+c2FfaW4sIGN0eC0+c2FfaW5fZG1hX2FkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY3R4LT5zYV9pbiwgMCwgc2l6ZSAqIDQpOworCW1lbXNldChjdHgtPnNhX291dCwgMCwgc2l6ZSAqIDQpOworCWN0eC0+c2FfbGVuID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCit2b2lkIGNyeXB0bzR4eF9mcmVlX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJaWYgKGN0eC0+c2FfaW4gIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIGN0eC0+c2FfbGVuICogNCwKKwkJCQkgIGN0eC0+c2FfaW4sIGN0eC0+c2FfaW5fZG1hX2FkZHIpOworCWlmIChjdHgtPnNhX291dCAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgY3R4LT5zYV9sZW4gKiA0LAorCQkJCSAgY3R4LT5zYV9vdXQsIGN0eC0+c2Ffb3V0X2RtYV9hZGRyKTsKKworCWN0eC0+c2FfaW5fZG1hX2FkZHIgPSAwOworCWN0eC0+c2Ffb3V0X2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX2xlbiA9IDA7Cit9CisKK3UzMiBjcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJY3R4LT5zdGF0ZV9yZWNvcmQgPSBkbWFfYWxsb2NfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpLAorCQkJCSZjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKCFjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGN0eC0+c3RhdGVfcmVjb3JkLCAwLCBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3J5cHRvNHh4X2ZyZWVfc3RhdGVfcmVjb3JkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJaWYgKGN0eC0+c3RhdGVfcmVjb3JkICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpLAorCQkJCSAgY3R4LT5zdGF0ZV9yZWNvcmQsCisJCQkJICBjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkcik7CisJY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIgPSAwOworfQorCisvKioKKyAqIGFsbG9jIG1lbW9yeSBmb3IgdGhlIGdhdGhlciByaW5nCisgKiBubyBuZWVkIHRvIGFsbG9jIGJ1ZiBmb3IgdGhlIHJpbmcKKyAqIGdkcl90YWlsLCBnZHJfaGVhZCBhbmQgZ2RyX2NvdW50IGFyZSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2J1aWxkX3BkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisJZGV2LT5wZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCwKKwkJCQkgICAgICAmZGV2LT5wZHJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5wZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5wZHJfdWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogUFBDNFhYX05VTV9QRCwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cGRyX3VpbmZvKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCwKKwkJCQkgIGRldi0+cGRyLAorCQkJCSAgZGV2LT5wZHJfcGEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGRldi0+cGRyLCAwLCAgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBQUEM0WFhfTlVNX1BEKTsKKwlkZXYtPnNoYWRvd19zYV9wb29sID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAyNTYgKiBQUEM0WFhfTlVNX1BELAorCQkJCSAgICZkZXYtPnNoYWRvd19zYV9wb29sX3BhLAorCQkJCSAgIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zaGFkb3dfc2FfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnNoYWRvd19zcl9wb29sID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCSBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJICZkZXYtPnNoYWRvd19zcl9wb29sX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2hhZG93X3NyX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCWZvciAoaSA9IDA7IGkgPCBQUEM0WFhfTlVNX1BEOyBpKyspIHsKKwkJcGRfdWluZm8gPSAoc3RydWN0IHBkX3VpbmZvICopIChkZXYtPnBkcl91aW5mbyArCisJCQkJCQlzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIGkpOworCisJCS8qIGFsbG9jIDI1NiBieXRlcyB3aGljaCBpcyBlbm91Z2ggZm9yIGFueSBraW5kIG9mIGR5bmFtaWMgc2EgKi8KKwkJcGRfdWluZm8tPnNhX3ZhID0gZGV2LT5zaGFkb3dfc2FfcG9vbCArIDI1NiAqIGk7CisJCXBkX3VpbmZvLT5zYV9wYSA9IGRldi0+c2hhZG93X3NhX3Bvb2xfcGEgKyAyNTYgKiBpOworCisJCS8qIGFsbG9jIHN0YXRlIHJlY29yZCAqLworCQlwZF91aW5mby0+c3JfdmEgPSBkZXYtPnNoYWRvd19zcl9wb29sICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIGk7CisJCXBkX3VpbmZvLT5zcl9wYSA9IGRldi0+c2hhZG93X3NyX3Bvb2xfcGEgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2Rlc3Ryb3lfcGRyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cGRyICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCwKKwkJCQkgIGRldi0+cGRyLCBkZXYtPnBkcl9wYSk7CisJaWYgKGRldi0+c2hhZG93X3NhX3Bvb2wpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwgMjU2ICogUFBDNFhYX05VTV9QRCwKKwkJCQkgIGRldi0+c2hhZG93X3NhX3Bvb2wsIGRldi0+c2hhZG93X3NhX3Bvb2xfcGEpOworCWlmIChkZXYtPnNoYWRvd19zcl9wb29sKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQlzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBQUEM0WFhfTlVNX1BELAorCQkJZGV2LT5zaGFkb3dfc3JfcG9vbCwgZGV2LT5zaGFkb3dfc3JfcG9vbF9wYSk7CisKKwlrZnJlZShkZXYtPnBkcl91aW5mbyk7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2dldF9wZF9mcm9tX3Bkcl9ub2xvY2soc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1MzIgcmV0dmFsOworCXUzMiB0bXA7CisKKwlyZXR2YWwgPSBkZXYtPnBkcl9oZWFkOworCXRtcCA9IChkZXYtPnBkcl9oZWFkICsgMSkgJSBQUEM0WFhfTlVNX1BEOworCisJaWYgKHRtcCA9PSBkZXYtPnBkcl90YWlsKQorCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisKKwlkZXYtPnBkcl9oZWFkID0gdG1wOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcHV0X3BkX3RvX3BkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCB1MzIgaWR4KQoreworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBkX3VpbmZvID0gKHN0cnVjdCBwZF91aW5mbyAqKShkZXYtPnBkcl91aW5mbyArCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogaWR4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPnBkcl90YWlsICE9IFBQQzRYWF9MQVNUX1BEKQorCQlkZXYtPnBkcl90YWlsKys7CisJZWxzZQorCQlkZXYtPnBkcl90YWlsID0gMDsKKwlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9GUkVFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNlX3BkICpjcnlwdG80eHhfZ2V0X3BkcChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBkbWFfYWRkcl90ICpwZF9kbWEsIHUzMiBpZHgpCit7CisJKnBkX2RtYSA9IGRldi0+cGRyX3BhICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBpZHg7CisKKwlyZXR1cm4gZGV2LT5wZHIgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIGlkeDsKK30KKworLyoqCisgKiBhbGxvYyBtZW1vcnkgZm9yIHRoZSBnYXRoZXIgcmluZworICogbm8gbmVlZCB0byBhbGxvYyBidWYgZm9yIHRoZSByaW5nCisgKiBnZHJfdGFpbCwgZ2RyX2hlYWQgYW5kIGdkcl9jb3VudCBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9idWlsZF9nZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlkZXYtPmdkciA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBQUEM0WFhfTlVNX0dELAorCQkJCSAgICAgICZkZXYtPmdkcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPmdkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoZGV2LT5nZHIsIDAsIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogUFBDNFhYX05VTV9HRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0bzR4eF9kZXN0cm95X2dkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBQUEM0WFhfTlVNX0dELAorCQkJICBkZXYtPmdkciwgZGV2LT5nZHJfcGEpOworfQorCisvKgorICogd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqIHByZWVtcHRpb24gb3IgaW50ZXJydXB0IG11c3QgYmUgZGlzYWJsZWQKKyAqLwordTMyIGNyeXB0bzR4eF9nZXRfbl9nZChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCBpbnQgbikKK3sKKwl1MzIgcmV0dmFsOworCXUzMiB0bXA7CisJaWYgKG4gPj0gUFBDNFhYX05VTV9HRCkKKwkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCisJcmV0dmFsID0gZGV2LT5nZHJfaGVhZDsKKwl0bXAgPSAoZGV2LT5nZHJfaGVhZCArIG4pICUgUFBDNFhYX05VTV9HRDsKKwlpZiAoZGV2LT5nZHJfaGVhZCA+IGRldi0+Z2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+Z2RyX2hlYWQgJiYgdG1wID49IGRldi0+Z2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfSBlbHNlIGlmIChkZXYtPmdkcl9oZWFkIDwgZGV2LT5nZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5nZHJfaGVhZCB8fCB0bXAgPj0gZGV2LT5nZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9CisJZGV2LT5nZHJfaGVhZCA9IHRtcDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3B1dF9nZF90b19nZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5nZHJfdGFpbCA9PSBkZXYtPmdkcl9oZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRldi0+Z2RyX3RhaWwgIT0gUFBDNFhYX0xBU1RfR0QpCisJCWRldi0+Z2RyX3RhaWwrKzsKKwllbHNlCisJCWRldi0+Z2RyX3RhaWwgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNlX2dkICpjcnlwdG80eHhfZ2V0X2dkcChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCQkgICAgICBkbWFfYWRkcl90ICpnZF9kbWEsIHUzMiBpZHgpCit7CisJKmdkX2RtYSA9IGRldi0+Z2RyX3BhICsgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBpZHg7CisKKwlyZXR1cm4gKHN0cnVjdCBjZV9nZCAqKSAoZGV2LT5nZHIgKyBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIGlkeCk7Cit9CisKKy8qKgorICogYWxsb2MgbWVtb3J5IGZvciB0aGUgc2NhdHRlciByaW5nCisgKiBuZWVkIHRvIGFsbG9jIGJ1ZiBmb3IgdGhlIHJpbmcKKyAqIHNkcl90YWlsLCBzZHJfaGVhZCBhbmQgc2RyX2NvdW50IGFyZSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2J1aWxkX3NkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBjZV9zZCAqc2RfYXJyYXk7CisKKwkvKiBhbGxvYyBtZW1vcnkgZm9yIHNjYXR0ZXIgZGVzY3JpcHRvciByaW5nICovCisJZGV2LT5zZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogUFBDNFhYX05VTV9TRCwKKwkJCQkgICAgICAmZGV2LT5zZHJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5zZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplID0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgPQorCQlkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICogUFBDNFhYX05VTV9TRCwKKwkJCSZkZXYtPnNjYXR0ZXJfYnVmZmVyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2NhdHRlcl9idWZmZXJfdmEpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgZGV2LT5zZHIsIGRldi0+c2RyX3BhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2RfYXJyYXkgPSBkZXYtPnNkcjsKKworCWZvciAoaSA9IDA7IGkgPCBQUEM0WFhfTlVNX1NEOyBpKyspIHsKKwkJc2RfYXJyYXlbaV0ucHRyID0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9wYSArCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKiBpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfZGVzdHJveV9zZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5zZHIgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgZGV2LT5zZHIsIGRldi0+c2RyX3BhKTsKKworCWlmIChkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhLAorCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9wYSk7Cit9CisKKy8qCisgKiB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICogcHJlZW1wdGlvbiBvciBpbnRlcnJ1cHQgbXVzdCBiZSBkaXNhYmxlZAorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9nZXRfbl9zZChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCBpbnQgbikKK3sKKwl1MzIgcmV0dmFsOworCXUzMiB0bXA7CisKKwlpZiAobiA+PSBQUEM0WFhfTlVNX1NEKQorCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisKKwlyZXR2YWwgPSBkZXYtPnNkcl9oZWFkOworCXRtcCA9IChkZXYtPnNkcl9oZWFkICsgbikgJSBQUEM0WFhfTlVNX1NEOworCWlmIChkZXYtPnNkcl9oZWFkID4gZGV2LT5nZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5zZHJfaGVhZCAmJiB0bXAgPj0gZGV2LT5zZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9IGVsc2UgaWYgKGRldi0+c2RyX2hlYWQgPCBkZXYtPnNkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPnNkcl9oZWFkIHx8IHRtcCA+PSBkZXYtPnNkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0gLyogdGhlIGhlYWQgPSB0YWlsLCBvciBlbXB0eSBjYXNlIGlzIGFscmVhZHkgdGFrZSBjYXJlZCAqLworCWRldi0+c2RyX2hlYWQgPSB0bXA7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wdXRfc2RfdG9fc2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+c2RyX3RhaWwgPT0gZGV2LT5zZHJfaGVhZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoZGV2LT5zZHJfdGFpbCAhPSBQUEM0WFhfTEFTVF9TRCkKKwkJZGV2LT5zZHJfdGFpbCsrOworCWVsc2UKKwkJZGV2LT5zZHJfdGFpbCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNlX3NkICpjcnlwdG80eHhfZ2V0X3NkcChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCQkgICAgICBkbWFfYWRkcl90ICpzZF9kbWEsIHUzMiBpZHgpCit7CisJKnNkX2RtYSA9IGRldi0+c2RyX3BhICsgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBpZHg7CisKKwlyZXR1cm4gIChzdHJ1Y3QgY2Vfc2QgKikoZGV2LT5zZHIgKyBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIGlkeCk7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2Uoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICBkbWFfYWRkcl90ICphZGRyLCB1MzIgKmxlbmd0aCwKKwkJCQkgICB1MzIgKmlkeCwgdTMyICpvZmZzZXQsIHUzMiAqbmJ5dGVzKQoreworCXUzMiBsZW47CisKKwlpZiAoKmxlbmd0aCA+IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgeworCQltZW1jcHkocGh5c190b192aXJ0KCphZGRyKSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgKworCQkJKmlkeCAqIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSArICpvZmZzZXQsCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpOworCQkqb2Zmc2V0ID0gMDsKKwkJKmxlbmd0aCAtPSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCSpuYnl0ZXMgLT0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQlpZiAoKmlkeCA9PSBQUEM0WFhfTEFTVF9TRCkKKwkJCSppZHggPSAwOworCQllbHNlCisJCQkoKmlkeCkrKzsKKwkJKmFkZHIgPSAqYWRkciArICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoKmxlbmd0aCA8IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSkgeworCQltZW1jcHkocGh5c190b192aXJ0KCphZGRyKSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgKworCQkJKmlkeCAqIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSArICpvZmZzZXQsICpsZW5ndGgpOworCQlpZiAoKCpvZmZzZXQgKyAqbGVuZ3RoKSA9PSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpIHsKKwkJCWlmICgqaWR4ID09IFBQQzRYWF9MQVNUX1NEKQorCQkJCSppZHggPSAwOworCQkJZWxzZQorCQkJCSgqaWR4KSsrOworCQkJKm5ieXRlcyAtPSAqbGVuZ3RoOworCQkJKm9mZnNldCA9IDA7CisJCX0gZWxzZSB7CisJCQkqbmJ5dGVzIC09ICpsZW5ndGg7CisJCQkqb2Zmc2V0ICs9ICpsZW5ndGg7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlsZW4gPSAoKm5ieXRlcyA8PSBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpID8KKwkJCQkoKm5ieXRlcykgOiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemU7CisJCW1lbWNweShwaHlzX3RvX3ZpcnQoKmFkZHIpLAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSArCisJCQkqaWR4ICogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICsgKm9mZnNldCwKKwkJCWxlbik7CisJCSpvZmZzZXQgPSAwOworCQkqbmJ5dGVzIC09IGxlbjsKKworCQlpZiAoKmlkeCA9PSBQUEM0WFhfTEFTVF9TRCkKKwkJCSppZHggPSAwOworCQllbHNlCisJCQkoKmlkeCkrKzsKKworCQlyZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9jb3B5X3BrdF90b19kc3Qoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgY2VfcGQgKnBkLAorCQkJCSAgICAgIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8sCisJCQkJICAgICAgdTMyIG5ieXRlcywKKwkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCkKK3sKKwlkbWFfYWRkcl90IGFkZHI7CisJdTMyIHRoaXNfc2Q7CisJdTMyIG9mZnNldDsKKwl1MzIgbGVuOworCXUzMiBpOworCXUzMiBzZ19sZW47CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCXRoaXNfc2QgPSBwZF91aW5mby0+Zmlyc3Rfc2Q7CisJb2Zmc2V0ID0gMDsKKwlpID0gMDsKKworCXdoaWxlIChuYnl0ZXMpIHsKKwkJc2cgPSAmZHN0W2ldOworCQlzZ19sZW4gPSBzZy0+bGVuZ3RoOworCQlhZGRyID0gZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShzZyksCisJCQkJc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisKKwkJaWYgKG9mZnNldCA9PSAwKSB7CisJCQlsZW4gPSAobmJ5dGVzIDw9IHNnLT5sZW5ndGgpID8gbmJ5dGVzIDogc2ctPmxlbmd0aDsKKwkJCXdoaWxlIChjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShkZXYsICZhZGRyLCAmbGVuLAorCQkJCSZ0aGlzX3NkLCAmb2Zmc2V0LCAmbmJ5dGVzKSkKKwkJCQk7CisJCQlpZiAoIW5ieXRlcykKKwkJCQlyZXR1cm47CisJCQlpKys7CisJCX0gZWxzZSB7CisJCQlsZW4gPSAobmJ5dGVzIDw9IChkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgLSBvZmZzZXQpKSA/CisJCQkJbmJ5dGVzIDogKGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAtIG9mZnNldCk7CisJCQlsZW4gPSAoc2ctPmxlbmd0aCA8IGxlbikgPyBzZy0+bGVuZ3RoIDogbGVuOworCQkJd2hpbGUgKGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKGRldiwgJmFkZHIsICZsZW4sCisJCQkJCSAgICAgICAmdGhpc19zZCwgJm9mZnNldCwgJm5ieXRlcykpCisJCQkJOworCQkJaWYgKCFuYnl0ZXMpCisJCQkJcmV0dXJuOworCQkJc2dfbGVuIC09IGxlbjsKKwkJCWlmIChzZ19sZW4pIHsKKwkJCQlhZGRyICs9IGxlbjsKKwkJCQl3aGlsZSAoY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2UoZGV2LCAmYWRkciwKKwkJCQkJJnNnX2xlbiwgJnRoaXNfc2QsICZvZmZzZXQsICZuYnl0ZXMpKQorCQkJCQk7CisJCQl9CisJCQlpKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2NvcHlfZGlnZXN0X3RvX2RzdChzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvLAorCQkJCQlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJc3RydWN0IHNhX3N0YXRlX3JlY29yZCAqc3RhdGVfcmVjb3JkID0KKwkJCQkoc3RydWN0IHNhX3N0YXRlX3JlY29yZCAqKSBwZF91aW5mby0+c3JfdmE7CisKKwlpZiAoc2EtPnNhX2NvbW1hbmRfMC5iZi5oYXNoX2FsZyA9PSBTQV9IQVNIX0FMR19TSEExKSB7CisJCW1lbWNweSgodm9pZCAqKSBwZF91aW5mby0+ZGVzdF92YSwgc3RhdGVfcmVjb3JkLT5zYXZlX2RpZ2VzdCwKKwkJICAgICAgIFNBX0hBU0hfQUxHX1NIQTFfRElHRVNUX1NJWkUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfcmV0X3NnX2Rlc2Moc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8pCit7CisJaW50IGk7CisJaWYgKHBkX3VpbmZvLT5udW1fZ2QpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkX3VpbmZvLT5udW1fZ2Q7IGkrKykKKwkJCWNyeXB0bzR4eF9wdXRfZ2RfdG9fZ2RyKGRldik7CisJCXBkX3VpbmZvLT5maXJzdF9nZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fZ2QgPSAwOworCX0KKwlpZiAocGRfdWluZm8tPm51bV9zZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGRfdWluZm8tPm51bV9zZDsgaSsrKQorCQkJY3J5cHRvNHh4X3B1dF9zZF90b19zZHIoZGV2KTsKKworCQlwZF91aW5mby0+Zmlyc3Rfc2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX3NkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X2FibGtjaXBoZXJfZG9uZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbywKKwkJCQkgICAgIHN0cnVjdCBjZV9wZCAqcGQpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eDsKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICphYmxrX3JlcTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdDsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlhYmxrX3JlcSA9IGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KHBkX3VpbmZvLT5hc3luY19yZXEpOworCWN0eCAgPSBjcnlwdG9fdGZtX2N0eChhYmxrX3JlcS0+YmFzZS50Zm0pOworCisJaWYgKHBkX3VpbmZvLT51c2luZ19zZCkgeworCQljcnlwdG80eHhfY29weV9wa3RfdG9fZHN0KGRldiwgcGQsIHBkX3VpbmZvLCBhYmxrX3JlcS0+bmJ5dGVzLAorCQkJCQkgIGFibGtfcmVxLT5kc3QpOworCX0gZWxzZSB7CisJCWRzdCA9IHBkX3VpbmZvLT5kZXN0X3ZhOworCQlhZGRyID0gZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShkc3QpLAorCQkJCSAgICBkc3QtPm9mZnNldCwgZHN0LT5sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CisJfQorCWNyeXB0bzR4eF9yZXRfc2dfZGVzYyhkZXYsIHBkX3VpbmZvKTsKKwlpZiAoYWJsa19yZXEtPmJhc2UuY29tcGxldGUgIT0gTlVMTCkKKwkJYWJsa19yZXEtPmJhc2UuY29tcGxldGUoJmFibGtfcmVxLT5iYXNlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9haGFzaF9kb25lKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbykKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4OworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphaGFzaF9yZXE7CisKKwlhaGFzaF9yZXEgPSBhaGFzaF9yZXF1ZXN0X2Nhc3QocGRfdWluZm8tPmFzeW5jX3JlcSk7CisJY3R4ICA9IGNyeXB0b190Zm1fY3R4KGFoYXNoX3JlcS0+YmFzZS50Zm0pOworCisJY3J5cHRvNHh4X2NvcHlfZGlnZXN0X3RvX2RzdChwZF91aW5mbywKKwkJCQkgICAgIGNyeXB0b190Zm1fY3R4KGFoYXNoX3JlcS0+YmFzZS50Zm0pKTsKKwljcnlwdG80eHhfcmV0X3NnX2Rlc2MoZGV2LCBwZF91aW5mbyk7CisJLyogY2FsbCB1c2VyIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHggKi8KKwlpZiAoYWhhc2hfcmVxLT5iYXNlLmNvbXBsZXRlICE9IE5VTEwpCisJCWFoYXNoX3JlcS0+YmFzZS5jb21wbGV0ZSgmYWhhc2hfcmVxLT5iYXNlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wZF9kb25lKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsIHUzMiBpZHgpCit7CisJc3RydWN0IGNlX3BkICpwZDsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCisJcGQgPSAgZGV2LT5wZHIgKyBzaXplb2Yoc3RydWN0IGNlX3BkKSppZHg7CisJcGRfdWluZm8gPSBkZXYtPnBkcl91aW5mbyArIHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pKmlkeDsKKwlpZiAoY3J5cHRvX3RmbV9hbGdfdHlwZShwZF91aW5mby0+YXN5bmNfcmVxLT50Zm0pID09CisJCQlDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUikKKwkJcmV0dXJuIGNyeXB0bzR4eF9hYmxrY2lwaGVyX2RvbmUoZGV2LCBwZF91aW5mbywgcGQpOworCWVsc2UKKwkJcmV0dXJuIGNyeXB0bzR4eF9haGFzaF9kb25lKGRldiwgcGRfdWluZm8pOworfQorCisvKioKKyAqIE5vdGU6IE9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY29weSBpdGVtcyB0aGF0IGlzIHdvcmQgYWxpZ25lZC4KKyAqLwordm9pZCBjcnlwdG80eHhfbWVtY3B5X2xlKHVuc2lnbmVkIGludCAqZHN0LAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSBpbnQgbGVuKQoreworCXU4ICp0bXA7CisJZm9yICg7IGxlbiA+PSA0OyBidWYgKz0gNCwgbGVuIC09IDQpCisJCSpkc3QrKyA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgaW50ICopIGJ1Zik7CisKKwl0bXAgPSAodTggKilkc3Q7CisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDM6CisJCSp0bXArKyA9IDA7CisJCSp0bXArKyA9ICooYnVmKzIpOworCQkqdG1wKysgPSAqKGJ1ZisxKTsKKwkJKnRtcCsrID0gKmJ1ZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAqKGJ1ZisxKTsKKwkJKnRtcCsrID0gKmJ1ZjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAqYnVmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9zdG9wX2FsbChzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldikKK3sKKwljcnlwdG80eHhfZGVzdHJveV9wZHIoY29yZV9kZXYtPmRldik7CisJY3J5cHRvNHh4X2Rlc3Ryb3lfZ2RyKGNvcmVfZGV2LT5kZXYpOworCWNyeXB0bzR4eF9kZXN0cm95X3Nkcihjb3JlX2Rldi0+ZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoY29yZV9kZXYtPmRldmljZSwgTlVMTCk7CisJaW91bm1hcChjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlKTsKKwlrZnJlZShjb3JlX2Rldi0+ZGV2KTsKKwlrZnJlZShjb3JlX2Rldik7Cit9CisKK3ZvaWQgY3J5cHRvNHh4X3JldHVybl9wZChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJIHUzMiBwZF9lbnRyeSwgc3RydWN0IGNlX3BkICpwZCwKKwkJCSBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvKQoreworCS8qIGlycSBzaG91bGQgYmUgYWxyZWFkeSBkaXNhYmxlZCAqLworCWRldi0+cGRyX2hlYWQgPSBwZF9lbnRyeTsKKwlwZC0+cGRfY3RsLncgPSAwOworCXBkLT5wZF9jdGxfbGVuLncgPSAwOworCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0ZSRUU7Cit9CisKKy8qCisgKiBkZXJpdmUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHNjYXR0ZXJsaXN0CisgKiBTaGFtbGVzc2x5IGNvcHkgZnJvbSB0YWxpdG9zLmMKKyAqLworc3RhdGljIGludCBnZXRfc2dfY291bnQoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19saXN0LCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzZ19saXN0OworCWludCBzZ19uZW50cyA9IDA7CisKKwl3aGlsZSAobmJ5dGVzKSB7CisJCXNnX25lbnRzKys7CisJCWlmIChzZy0+bGVuZ3RoID4gbmJ5dGVzKQorCQkJYnJlYWs7CisJCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOworCQlzZyA9IHNnX25leHQoc2cpOworCX0KKworCXJldHVybiBzZ19uZW50czsKK30KKworc3RhdGljIHUzMiBnZXRfbmV4dF9nZCh1MzIgY3VycmVudCkKK3sKKwlpZiAoY3VycmVudCAhPSBQUEM0WFhfTEFTVF9HRCkKKwkJcmV0dXJuIGN1cnJlbnQgKyAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X25leHRfc2QodTMyIGN1cnJlbnQpCit7CisJaWYgKGN1cnJlbnQgIT0gUFBDNFhYX0xBU1RfU0QpCisJCXJldHVybiBjdXJyZW50ICsgMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCit1MzIgY3J5cHRvNHh4X2J1aWxkX3BkKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLAorCQkgICAgICAgc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJICAgICAgIHZvaWQgKml2LCB1MzIgaXZfbGVuKQoreworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKKwlkbWFfYWRkcl90IGFkZHIsIHBkX2RtYSwgc2RfZG1hLCBnZF9kbWE7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBjZV9nZCAqZ2Q7CisJc3RydWN0IGNlX3BkICpwZDsKKwl1MzIgbnVtX2dkLCBudW1fc2Q7CisJdTMyIGZzdF9nZCA9IDB4ZmZmZmZmZmY7CisJdTMyIGZzdF9zZCA9IDB4ZmZmZmZmZmY7CisJdTMyIHBkX2VudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbyA9IE5VTEw7CisJdW5zaWduZWQgaW50IG5ieXRlcyA9IGRhdGFsZW4sIGlkeDsKKwl1bnNpZ25lZCBpbnQgaXZsZW4gPSAwOworCXUzMiBnZF9pZHggPSAwOworCisJLyogZmlndXJlIGhvdyBtYW55IGdkIGlzIG5lZWRlZCAqLworCW51bV9nZCA9IGdldF9zZ19jb3VudChzcmMsIGRhdGFsZW4pOworCWlmIChudW1fZ2QgPT0gMSkKKwkJbnVtX2dkID0gMDsKKworCS8qIGZpZ3VyZSBob3cgbWFueSBzZCBpcyBuZWVkZWQgKi8KKwlpZiAoc2dfaXNfbGFzdChkc3QpIHx8IGN0eC0+aXNfaGFzaCkgeworCQludW1fc2QgPSAwOworCX0gZWxzZSB7CisJCWlmIChkYXRhbGVuID4gUFBDNFhYX1NEX0JVRkZFUl9TSVpFKSB7CisJCQludW1fc2QgPSBkYXRhbGVuIC8gUFBDNFhYX1NEX0JVRkZFUl9TSVpFOworCQkJaWYgKGRhdGFsZW4gJSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpCisJCQkJbnVtX3NkKys7CisJCX0gZWxzZSB7CisJCQludW1fc2QgPSAxOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUgZm9sbG93IHNlY3Rpb24gb2YgY29kZSBuZWVkcyB0byBiZSBwcm90ZWN0ZWQKKwkgKiBUaGUgZ2F0aGVyIHJpbmcgYW5kIHNjYXR0ZXIgcmluZyBuZWVkcyB0byBiZSBjb25zZWN1dGl2ZQorCSAqIEluIGNhc2Ugb2YgcnVuIG91dCBvZiBhbnkga2luZCBvZiBkZXNjcmlwdG9yLCB0aGUgZGVzY3JpcHRvcgorCSAqIGFscmVhZHkgZ290IG11c3QgYmUgcmV0dXJuIHRoZSBvcmlnaW5hbCBwbGFjZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChudW1fZ2QpIHsKKwkJZnN0X2dkID0gY3J5cHRvNHh4X2dldF9uX2dkKGRldiwgbnVtX2dkKTsKKwkJaWYgKGZzdF9nZCA9PSBFUklOR19XQVNfRlVMTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisJaWYgKG51bV9zZCkgeworCQlmc3Rfc2QgPSBjcnlwdG80eHhfZ2V0X25fc2QoZGV2LCBudW1fc2QpOworCQlpZiAoZnN0X3NkID09IEVSSU5HX1dBU19GVUxMKSB7CisJCQlpZiAobnVtX2dkKQorCQkJCWRldi0+Z2RyX2hlYWQgPSBmc3RfZ2Q7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCX0KKwlwZF9lbnRyeSA9IGNyeXB0bzR4eF9nZXRfcGRfZnJvbV9wZHJfbm9sb2NrKGRldik7CisJaWYgKHBkX2VudHJ5ID09IEVSSU5HX1dBU19GVUxMKSB7CisJCWlmIChudW1fZ2QpCisJCQlkZXYtPmdkcl9oZWFkID0gZnN0X2dkOworCQlpZiAobnVtX3NkKQorCQkJZGV2LT5zZHJfaGVhZCA9IGZzdF9zZDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCisJcGRfdWluZm8gPSAoc3RydWN0IHBkX3VpbmZvICopKGRldi0+cGRyX3VpbmZvICsKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBwZF9lbnRyeSk7CisJcGQgPSBjcnlwdG80eHhfZ2V0X3BkcChkZXYsICZwZF9kbWEsIHBkX2VudHJ5KTsKKwlwZF91aW5mby0+YXN5bmNfcmVxID0gcmVxOworCXBkX3VpbmZvLT5udW1fZ2QgPSBudW1fZ2Q7CisJcGRfdWluZm8tPm51bV9zZCA9IG51bV9zZDsKKworCWlmIChpdl9sZW4gfHwgY3R4LT5pc19oYXNoKSB7CisJCWl2bGVuID0gaXZfbGVuOworCQlwZC0+c2EgPSBwZF91aW5mby0+c2FfcGE7CisJCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBwZF91aW5mby0+c2FfdmE7CisJCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJCW1lbWNweShzYSwgY3R4LT5zYV9pbiwgY3R4LT5zYV9sZW4gKiA0KTsKKwkJZWxzZQorCQkJbWVtY3B5KHNhLCBjdHgtPnNhX291dCwgY3R4LT5zYV9sZW4gKiA0KTsKKworCQltZW1jcHkoKHZvaWQgKikgc2EgKyBjdHgtPm9mZnNldF90b19zcl9wdHIsCisJCQkmcGRfdWluZm8tPnNyX3BhLCA0KTsKKworCQlpZiAoaXZfbGVuKQorCQkJY3J5cHRvNHh4X21lbWNweV9sZShwZF91aW5mby0+c3JfdmEsIGl2LCBpdl9sZW4pOworCX0gZWxzZSB7CisJCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkgeworCQkJcGQtPnNhID0gY3R4LT5zYV9pbl9kbWFfYWRkcjsKKwkJCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCQl9IGVsc2UgeworCQkJcGQtPnNhID0gY3R4LT5zYV9vdXRfZG1hX2FkZHI7CisJCQlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQ7CisJCX0KKwl9CisJcGQtPnNhX2xlbiA9IGN0eC0+c2FfbGVuOworCWlmIChudW1fZ2QpIHsKKwkJLyogZ2V0IGZpcnN0IGdkIHdlIGFyZSBnb2luZyB0byB1c2UgKi8KKwkJZ2RfaWR4ID0gZnN0X2dkOworCQlwZF91aW5mby0+Zmlyc3RfZ2QgPSBmc3RfZ2Q7CisJCXBkX3VpbmZvLT5udW1fZ2QgPSBudW1fZ2Q7CisJCWdkID0gY3J5cHRvNHh4X2dldF9nZHAoZGV2LCAmZ2RfZG1hLCBnZF9pZHgpOworCQlwZC0+c3JjID0gZ2RfZG1hOworCQkvKiBlbmFibGUgZ2F0aGVyICovCisJCXNhLT5zYV9jb21tYW5kXzAuYmYuZ2F0aGVyID0gMTsKKwkJaWR4ID0gMDsKKwkJc3JjID0gJnNyY1swXTsKKwkJLyogd2FsayB0aGUgc2csIGFuZCBzZXR1cCBnYXRoZXIgYXJyYXkgKi8KKwkJd2hpbGUgKG5ieXRlcykgeworCQkJc2cgPSAmc3JjW2lkeF07CisJCQlhZGRyID0gZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShzZyksCisJCQkJICAgIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCQkJZ2QtPnB0ciA9IGFkZHI7CisJCQlnZC0+Y3RsX2xlbi5sZW4gPSBzZy0+bGVuZ3RoOworCQkJZ2QtPmN0bF9sZW4uZG9uZSA9IDA7CisJCQlnZC0+Y3RsX2xlbi5yZWFkeSA9IDE7CisJCQlpZiAoc2ctPmxlbmd0aCA+PSBuYnl0ZXMpCisJCQkJYnJlYWs7CisJCQluYnl0ZXMgLT0gc2ctPmxlbmd0aDsKKwkJCWdkX2lkeCA9IGdldF9uZXh0X2dkKGdkX2lkeCk7CisJCQlnZCA9IGNyeXB0bzR4eF9nZXRfZ2RwKGRldiwgJmdkX2RtYSwgZ2RfaWR4KTsKKwkJCWlkeCsrOworCQl9CisJfSBlbHNlIHsKKwkJcGQtPnNyYyA9ICh1MzIpZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwgc2dfcGFnZShzcmMpLAorCQkJCXNyYy0+b2Zmc2V0LCBzcmMtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJCS8qCisJCSAqIERpc2FibGUgZ2F0aGVyIGluIHNhIGNvbW1hbmQKKwkJICovCisJCXNhLT5zYV9jb21tYW5kXzAuYmYuZ2F0aGVyID0gMDsKKwkJLyoKKwkJICogSW5kaWNhdGUgZ2F0aGVyIGFycmF5IGlzIG5vdCB1c2VkCisJCSAqLworCQlwZF91aW5mby0+Zmlyc3RfZ2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX2dkID0gMDsKKwl9CisJaWYgKGN0eC0+aXNfaGFzaCB8fCBzZ19pc19sYXN0KGRzdCkpIHsKKwkJLyoKKwkJICogd2Uga25vdyBhcHBsaWNhdGlvbiBnaXZlIHVzIGRzdCBhIHdob2xlIHBpZWNlIG9mIG1lbW9yeQorCQkgKiBubyBuZWVkIHRvIHVzZSBzY2F0dGVyIHJpbmcuCisJCSAqIEluIGNhc2Ugb2YgaXNfaGFzaCwgdGhlIGljdiBpcyBhbHdheXMgYXQgZW5kIG9mIHNyYyBkYXRhLgorCQkgKi8KKwkJcGRfdWluZm8tPnVzaW5nX3NkID0gMDsKKwkJcGRfdWluZm8tPmZpcnN0X3NkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9zZCA9IDA7CisJCXBkX3VpbmZvLT5kZXN0X3ZhID0gZHN0OworCQlzYS0+c2FfY29tbWFuZF8wLmJmLnNjYXR0ZXIgPSAwOworCQlpZiAoY3R4LT5pc19oYXNoKQorCQkJcGQtPmRlc3QgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilkc3QpOworCQllbHNlCisJCQlwZC0+ZGVzdCA9ICh1MzIpZG1hX21hcF9wYWdlKGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkJc2dfcGFnZShkc3QpLCBkc3QtPm9mZnNldCwKKwkJCQkJZHN0LT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjZV9zZCAqc2QgPSBOVUxMOworCQl1MzIgc2RfaWR4ID0gZnN0X3NkOworCQluYnl0ZXMgPSBkYXRhbGVuOworCQlzYS0+c2FfY29tbWFuZF8wLmJmLnNjYXR0ZXIgPSAxOworCQlwZF91aW5mby0+dXNpbmdfc2QgPSAxOworCQlwZF91aW5mby0+ZGVzdF92YSA9IGRzdDsKKwkJcGRfdWluZm8tPmZpcnN0X3NkID0gZnN0X3NkOworCQlwZF91aW5mby0+bnVtX3NkID0gbnVtX3NkOworCQlzZCA9IGNyeXB0bzR4eF9nZXRfc2RwKGRldiwgJnNkX2RtYSwgc2RfaWR4KTsKKwkJcGQtPmRlc3QgPSBzZF9kbWE7CisJCS8qIHNldHVwIHNjYXR0ZXIgZGVzY3JpcHRvciAqLworCQlzZC0+Y3RsLmRvbmUgPSAwOworCQlzZC0+Y3RsLnJkeSA9IDE7CisJCS8qIHNkLT5wdHIgc2hvdWxkIGJlIHNldHVwIGJ5IHNkX2luaXQgcm91dGluZSovCisJCWlkeCA9IDA7CisJCWlmIChuYnl0ZXMgPj0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFKQorCQkJbmJ5dGVzIC09IFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwkJZWxzZQorCQkJbmJ5dGVzID0gMDsKKwkJd2hpbGUgKG5ieXRlcykgeworCQkJc2RfaWR4ID0gZ2V0X25leHRfc2Qoc2RfaWR4KTsKKwkJCXNkID0gY3J5cHRvNHh4X2dldF9zZHAoZGV2LCAmc2RfZG1hLCBzZF9pZHgpOworCQkJLyogc2V0dXAgc2NhdHRlciBkZXNjcmlwdG9yICovCisJCQlzZC0+Y3RsLmRvbmUgPSAwOworCQkJc2QtPmN0bC5yZHkgPSAxOworCQkJaWYgKG5ieXRlcyA+PSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUpCisJCQkJbmJ5dGVzIC09IFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwkJCWVsc2UKKwkJCQkvKgorCQkJCSAqIFNEIGVudHJ5IGNhbiBob2xkIFBQQzRYWF9TRF9CVUZGRVJfU0laRSwKKwkJCQkgKiB3aGljaCBpcyBtb3JlIHRoYW4gbmJ5dGVzLCBzbyBkb25lLgorCQkJCSAqLworCQkJCW5ieXRlcyA9IDA7CisJCX0KKwl9CisKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmhhc2hfY3J5cHRvX29mZnNldCA9IDA7CisJcGQtPnBkX2N0bC53ID0gY3R4LT5wZF9jdGw7CisJcGQtPnBkX2N0bF9sZW4udyA9IDB4MDA0MDAwMDAgfCAoY3R4LT5ieXBhc3MgPDwgMjQpIHwgZGF0YWxlbjsKKwlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9JTlVTRTsKKwl3bWIoKTsKKwkvKiB3cml0ZSBhbnkgdmFsdWUgdG8gcHVzaCBlbmdpbmUgdG8gcmVhZCBhIHBkICovCisJd3JpdGVsKDEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfREVTQ1JfUkQpOworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKKy8qKgorICogQWxnb3JpdGhtIFJlZ2lzdHJhdGlvbiBGdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBjcnlwdG80eHhfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnID0gdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKmFtY2NfYWxnID0gY3J5cHRvX2FsZ190b19jcnlwdG80eHhfYWxnKGFsZyk7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljdHgtPmRldiA9IGFtY2NfYWxnLT5kZXY7CisJY3R4LT5zYV9pbiA9IE5VTEw7CisJY3R4LT5zYV9vdXQgPSBOVUxMOworCWN0eC0+c2FfaW5fZG1hX2FkZHIgPSAwOworCWN0eC0+c2Ffb3V0X2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX2xlbiA9IDA7CisKKwlpZiAoYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSkKKwkJdGZtLT5jcnRfYWJsa2NpcGhlci5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KTsKKwllbHNlIGlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWhhc2hfdHlwZSkKKwkJdGZtLT5jcnRfYWhhc2gucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2FsZ19leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCWNyeXB0bzR4eF9mcmVlX3N0YXRlX3JlY29yZChjdHgpOworfQorCitpbnQgY3J5cHRvNHh4X3JlZ2lzdGVyX2FsZyhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqc2VjX2RldiwKKwkJCSAgIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnLCBpbnQgYXJyYXlfc2l6ZSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqYWxnOworCWludCBpOworCWludCByYyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXlfc2l6ZTsgaSsrKSB7CisJCWFsZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfYWxnKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWxnKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJYWxnLT5hbGcgPSBjcnlwdG9fYWxnW2ldOworCQlJTklUX0xJU1RfSEVBRCgmYWxnLT5hbGcuY3JhX2xpc3QpOworCQlpZiAoYWxnLT5hbGcuY3JhX2luaXQgPT0gTlVMTCkKKwkJCWFsZy0+YWxnLmNyYV9pbml0ID0gY3J5cHRvNHh4X2FsZ19pbml0OworCQlpZiAoYWxnLT5hbGcuY3JhX2V4aXQgPT0gTlVMTCkKKwkJCWFsZy0+YWxnLmNyYV9leGl0ID0gY3J5cHRvNHh4X2FsZ19leGl0OworCQlhbGctPmRldiA9IHNlY19kZXY7CisJCXJjID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnLT5hbGcpOworCQlpZiAocmMpIHsKKwkJCWxpc3RfZGVsKCZhbGctPmVudHJ5KTsKKwkJCWtmcmVlKGFsZyk7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZhbGctPmVudHJ5LCAmc2VjX2Rldi0+YWxnX2xpc3QpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF91bnJlZ2lzdGVyX2FsZyhzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqc2VjX2RldikKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqYWxnLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFsZywgdG1wLCAmc2VjX2Rldi0+YWxnX2xpc3QsIGVudHJ5KSB7CisJCWxpc3RfZGVsKCZhbGctPmVudHJ5KTsKKwkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGctPmFsZyk7CisJCWtmcmVlKGFsZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfYmhfdGFza2xldF9jYih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKwlzdHJ1Y3QgY2VfcGQgKnBkOworCXUzMiB0YWlsOworCisJd2hpbGUgKGNvcmVfZGV2LT5kZXYtPnBkcl9oZWFkICE9IGNvcmVfZGV2LT5kZXYtPnBkcl90YWlsKSB7CisJCXRhaWwgPSBjb3JlX2Rldi0+ZGV2LT5wZHJfdGFpbDsKKwkJcGRfdWluZm8gPSBjb3JlX2Rldi0+ZGV2LT5wZHJfdWluZm8gKworCQkJc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykqdGFpbDsKKwkJcGQgPSAgY29yZV9kZXYtPmRldi0+cGRyICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiB0YWlsOworCQlpZiAoKHBkX3VpbmZvLT5zdGF0ZSA9PSBQRF9FTlRSWV9JTlVTRSkgJiYKKwkJCQkgICBwZC0+cGRfY3RsLmJmLnBlX2RvbmUgJiYKKwkJCQkgICAhcGQtPnBkX2N0bC5iZi5ob3N0X3JlYWR5KSB7CisJCQlwZC0+cGRfY3RsLmJmLnBlX2RvbmUgPSAwOworCQkJY3J5cHRvNHh4X3BkX2RvbmUoY29yZV9kZXYtPmRldiwgdGFpbCk7CisJCQljcnlwdG80eHhfcHV0X3BkX3RvX3Bkcihjb3JlX2Rldi0+ZGV2LCB0YWlsKTsKKwkJCXBkX3VpbmZvLT5zdGF0ZSA9IFBEX0VOVFJZX0ZSRUU7CisJCX0gZWxzZSB7CisJCQkvKiBpZiB0YWlsIG5vdCBkb25lLCBicmVhayAqLworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qKgorICogVG9wIEhhbGYgb2YgaXNyLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgY3J5cHRvNHh4X2NlX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoY29yZV9kZXYtPmRldi0+Y2VfYmFzZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdyaXRlbChQUEM0WFhfSU5URVJSVVBUX0NMUiwKKwkgICAgICAgY29yZV9kZXYtPmRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JTlRfQ0xSKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZjb3JlX2Rldi0+dGFza2xldCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogU3VwcG9ydGVkIENyeXB0byBBbGdvcml0aG1zCisgKi8KK3N0cnVjdCBjcnlwdG9fYWxnIGNyeXB0bzR4eF9hbGdbXSA9IHsKKwkvKiBDcnlwdG8gQUVTIG1vZGVzICovCisJeworCQkuY3JhX25hbWUgCT0gImNiYyhhZXMpIiwKKwkJLmNyYV9kcml2ZXJfbmFtZSA9ICJjYmMtYWVzLXBwYzR4eCIsCisJCS5jcmFfcHJpb3JpdHkgCT0gQ1JZUFRPNFhYX0NSWVBUT19QUklPUklUWSwKKwkJLmNyYV9mbGFncyAJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUiB8IENSWVBUT19BTEdfQVNZTkMsCisJCS5jcmFfYmxvY2tzaXplIAk9IEFFU19CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUgCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KSwKKwkJLmNyYV9hbGlnbm1hc2sgCT0gMCwKKwkJLmNyYV90eXBlIAk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCQkuY3JhX21vZHVsZSAJPSBUSElTX01PRFVMRSwKKwkJLmNyYV91IAkJPSB7CisJCQkuYWJsa2NpcGhlciA9IHsKKwkJCQkubWluX2tleXNpemUgCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCQkubWF4X2tleXNpemUgCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCQkuaXZzaXplCQk9IEFFU19JVl9TSVpFLAorCQkJCS5zZXRrZXkgCT0gY3J5cHRvNHh4X3NldGtleV9hZXNfY2JjLAorCQkJCS5lbmNyeXB0IAk9IGNyeXB0bzR4eF9lbmNyeXB0LAorCQkJCS5kZWNyeXB0IAk9IGNyeXB0bzR4eF9kZWNyeXB0LAorCQkJfQorCQl9CisJfSwKKwkvKiBIYXNoIFNIQTEgKi8KKwl7CisJCS5jcmFfbmFtZQk9ICJzaGExIiwKKwkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzaGExLXBwYzR4eCIsCisJCS5jcmFfcHJpb3JpdHkJPSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCT0gQ1JZUFRPX0FMR19UWVBFX0FIQVNIIHwgQ1JZUFRPX0FMR19BU1lOQywKKwkJLmNyYV9ibG9ja3NpemUJPSBTSEExX0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCksCisJCS5jcmFfYWxpZ25tYXNrCT0gMCwKKwkJLmNyYV90eXBlCT0gJmNyeXB0b19haGFzaF90eXBlLAorCQkuY3JhX2luaXQJPSBjcnlwdG80eHhfc2hhMV9hbGdfaW5pdCwKKwkJLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKwkJLmNyYV91CQk9IHsKKwkJCS5haGFzaCA9IHsKKwkJCQkuZGlnZXN0c2l6ZSAJPSBTSEExX0RJR0VTVF9TSVpFLAorCQkJCS5pbml0CQk9IGNyeXB0bzR4eF9oYXNoX2luaXQsCisJCQkJLnVwZGF0ZQkJPSBjcnlwdG80eHhfaGFzaF91cGRhdGUsCisJCQkJLmZpbmFsICAJPSBjcnlwdG80eHhfaGFzaF9maW5hbCwKKwkJCQkuZGlnZXN0IAk9IGNyeXB0bzR4eF9oYXNoX2RpZ2VzdCwKKwkJCX0KKwkJfQorCX0sCit9OworCisvKioKKyAqIE1vZHVsZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0bzR4eF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCWludCByYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2OworCisJcmMgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9mZGV2LT5ub2RlLCAwLCAmcmVzKTsKKwlpZiAocmMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhbWNjLHBwYzQ2MGV4LWNyeXB0byIpKSB7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNUKSB8IFBQQzQ2MEVYX0NFX1JFU0VUKTsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QpICYgflBQQzQ2MEVYX0NFX1JFU0VUKTsKKwl9IGVsc2UgaWYgKG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkiYW1jYyxwcGM0MDVleC1jcnlwdG8iKSkgeworCQltdGRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCkgfCBQUEM0MDVFWF9DRV9SRVNFVCk7CisJCW10ZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNUKSAmIH5QUEM0MDVFWF9DRV9SRVNFVCk7CisJfSBlbHNlIGlmIChvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJImFtY2MscHBjNDYwc3gtY3J5cHRvIikpIHsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QpIHwgUFBDNDYwU1hfQ0VfUkVTRVQpOworCQltdGRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCkgJiB+UFBDNDYwU1hfQ0VfUkVTRVQpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ3J5cHRvIEZ1bmN0aW9uIE5vdCBzdXBwb3J0ZWQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29yZV9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3JlX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBjb3JlX2Rldik7CisJY29yZV9kZXYtPm9mZGV2ID0gb2ZkZXY7CisJY29yZV9kZXYtPmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3JlX2Rldi0+ZGV2KQorCQlnb3RvIGVycl9hbGxvY19kZXY7CisKKwljb3JlX2Rldi0+ZGV2LT5jb3JlX2RldiA9IGNvcmVfZGV2OworCWNvcmVfZGV2LT5kZXZpY2UgPSBkZXY7CisJc3Bpbl9sb2NrX2luaXQoJmNvcmVfZGV2LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY29yZV9kZXYtPmRldi0+YWxnX2xpc3QpOworCXJjID0gY3J5cHRvNHh4X2J1aWxkX3Bkcihjb3JlX2Rldi0+ZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2J1aWxkX3BkcjsKKworCXJjID0gY3J5cHRvNHh4X2J1aWxkX2dkcihjb3JlX2Rldi0+ZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2J1aWxkX2dkcjsKKworCXJjID0gY3J5cHRvNHh4X2J1aWxkX3Nkcihjb3JlX2Rldi0+ZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2J1aWxkX3NkcjsKKworCS8qIEluaXQgdGFza2xldCBmb3IgYm90dG9tIGhhbGYgcHJvY2Vzc2luZyAqLworCXRhc2tsZXRfaW5pdCgmY29yZV9kZXYtPnRhc2tsZXQsIGNyeXB0bzR4eF9iaF90YXNrbGV0X2NiLAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOworCisJLyogUmVnaXN0ZXIgZm9yIENyeXB0byBpc3IsIENyeXB0byBFbmdpbmUgSVJRICovCisJY29yZV9kZXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5ub2RlLCAwKTsKKwlyYyA9IHJlcXVlc3RfaXJxKGNvcmVfZGV2LT5pcnEsIGNyeXB0bzR4eF9jZV9pbnRlcnJ1cHRfaGFuZGxlciwgMCwKKwkJCSBjb3JlX2Rldi0+ZGV2LT5uYW1lLCBkZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisKKwljb3JlX2Rldi0+ZGV2LT5jZV9iYXNlID0gb2ZfaW9tYXAob2ZkZXYtPm5vZGUsIDApOworCWlmICghY29yZV9kZXYtPmRldi0+Y2VfYmFzZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBvZl9pb21hcFxuIik7CisJCWdvdG8gZXJyX2lvbWFwOworCX0KKworCS8qIG5lZWQgdG8gc2V0dXAgcGRyLCByZHIsIGdkciBhbmQgc2RyIGJlZm9yZSB0aGlzICovCisJY3J5cHRvNHh4X2h3X2luaXQoY29yZV9kZXYtPmRldik7CisKKwkvKiBSZWdpc3RlciBzZWN1cml0eSBhbGdvcml0aG1zIHdpdGggTGludXggQ3J5cHRvQVBJICovCisJcmMgPSBjcnlwdG80eHhfcmVnaXN0ZXJfYWxnKGNvcmVfZGV2LT5kZXYsIGNyeXB0bzR4eF9hbGcsCisJCQkgICAgICAgQVJSQVlfU0laRShjcnlwdG80eHhfYWxnKSk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9zdGFydF9kZXY7CisKKwlyZXR1cm4gMDsKKworZXJyX3N0YXJ0X2RldjoKKwlpb3VubWFwKGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UpOworZXJyX2lvbWFwOgorCWZyZWVfaXJxKGNvcmVfZGV2LT5pcnEsIGRldik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhjb3JlX2Rldi0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJmNvcmVfZGV2LT50YXNrbGV0KTsKK2Vycl9yZXF1ZXN0X2lycToKKwljcnlwdG80eHhfZGVzdHJveV9zZHIoY29yZV9kZXYtPmRldik7CitlcnJfYnVpbGRfc2RyOgorCWNyeXB0bzR4eF9kZXN0cm95X2dkcihjb3JlX2Rldi0+ZGV2KTsKK2Vycl9idWlsZF9nZHI6CisJY3J5cHRvNHh4X2Rlc3Ryb3lfcGRyKGNvcmVfZGV2LT5kZXYpOworZXJyX2J1aWxkX3BkcjoKKwlrZnJlZShjb3JlX2Rldi0+ZGV2KTsKK2Vycl9hbGxvY19kZXY6CisJa2ZyZWUoY29yZV9kZXYpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBjcnlwdG80eHhfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlmcmVlX2lycShjb3JlX2Rldi0+aXJxLCBkZXYpOworCWlycV9kaXNwb3NlX21hcHBpbmcoY29yZV9kZXYtPmlycSk7CisKKwl0YXNrbGV0X2tpbGwoJmNvcmVfZGV2LT50YXNrbGV0KTsKKwkvKiBVbi1yZWdpc3RlciB3aXRoIExpbnV4IENyeXB0b0FQSSAqLworCWNyeXB0bzR4eF91bnJlZ2lzdGVyX2FsZyhjb3JlX2Rldi0+ZGV2KTsKKwkvKiBGcmVlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5ICovCisJY3J5cHRvNHh4X3N0b3BfYWxsKGNvcmVfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjcnlwdG80eHhfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlICAgICAgPSAiYW1jYyxwcGM0eHgtY3J5cHRvIix9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGNyeXB0bzR4eF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImNyeXB0bzR4eCIsCisJLm1hdGNoX3RhYmxlCT0gY3J5cHRvNHh4X21hdGNoLAorCS5wcm9iZQkJPSBjcnlwdG80eHhfcHJvYmUsCisJLnJlbW92ZQkJPSBjcnlwdG80eHhfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3J5cHRvNHh4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjcnlwdG80eHhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNyeXB0bzR4eF9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmNyeXB0bzR4eF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjcnlwdG80eHhfaW5pdCk7Cittb2R1bGVfZXhpdChjcnlwdG80eHhfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQU1DQyBQUEM0eHggY3J5cHRvIGFjY2VsZXJhdG9yIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWYxMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5oCkBAIC0wLDAgKzEsMTc3IEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgQU1DQyBDcnlwdG8gb2ZmbG9hZCBMaW51eCBkZXZpY2UgZHJpdmVyIGZvcgorICogdXNlIHdpdGggTGludXggQ3J5cHRvQVBJLgorCisgKi8KKworI2lmbmRlZiBfX0NSWVBUTzRYWF9DT1JFX0hfXworI2RlZmluZSBfX0NSWVBUTzRYWF9DT1JFX0hfXworCisjZGVmaW5lIFBQQzQ2MFNYX1NEUjBfU1JTVCAgICAgICAgICAgICAgICAgICAgICAweDIwMQorI2RlZmluZSBQUEM0MDVFWF9TRFIwX1NSU1QgICAgICAgICAgICAgICAgICAgICAgMHgyMDAKKyNkZWZpbmUgUFBDNDYwRVhfU0RSMF9TUlNUICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCisjZGVmaW5lIFBQQzQ2MEVYX0NFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFBQQzQ2MFNYX0NFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFBQQzQwNUVYX0NFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0NSWVBUT19QUklPUklUWQkJMzAwCisjZGVmaW5lIFBQQzRYWF9MQVNUX1BECQkJCTYzCisjZGVmaW5lIFBQQzRYWF9OVU1fUEQJCQkJNjQKKyNkZWZpbmUgUFBDNFhYX0xBU1RfR0QJCQkJMTAyMworI2RlZmluZSBQUEM0WFhfTlVNX0dECQkJCTEwMjQKKyNkZWZpbmUgUFBDNFhYX0xBU1RfU0QJCQkJNjMKKyNkZWZpbmUgUFBDNFhYX05VTV9TRAkJCQk2NAorI2RlZmluZSBQUEM0WFhfU0RfQlVGRkVSX1NJWkUJCQkyMDQ4CisKKyNkZWZpbmUgUERfRU5UUllfSU5VU0UJCQkJMQorI2RlZmluZSBQRF9FTlRSWV9GUkVFCQkJCTAKKyNkZWZpbmUgRVJJTkdfV0FTX0ZVTEwJCQkJMHhmZmZmZmZmZgorCitzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZTsKKworc3RydWN0IHBkX3VpbmZvIHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworCXUzMiAgIHN0YXRlOworCXUzMiB1c2luZ19zZDsKKwl1MzIgZmlyc3RfZ2Q7CQkvKiBmaXJzdCBnYXRoZXIgZGlzY3JpcHRvcgorCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl1MzIgbnVtX2dkOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZ2F0aGVyIGRpc2NyaXB0b3IKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdTMyIGZpcnN0X3NkOwkJLyogZmlyc3Qgc2NhdHRlciBkaXNjcmlwdG9yCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXUzMiBudW1fc2Q7CQkvKiBudW1iZXIgb2Ygc2NhdHRlciBkaXNjcmlwdG9ycworCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl2b2lkICpzYV92YTsJCS8qIHNoYWRvdyBzYSwgd2hlbiB1c2luZyBjcCBmcm9tIGN0eC0+c2EgKi8KKwl1MzIgc2FfcGE7CisJdm9pZCAqc3JfdmE7CQkvKiBzdGF0ZSByZWNvcmQgZm9yIHNoYWRvdyBzYSAqLworCXUzMiBzcl9wYTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRlc3RfdmE7CisJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphc3luY19yZXE7IAkvKiBiYXNlIGNyeXB0byByZXF1ZXN0CisJCQkJCQkJZm9yIHRoaXMgcGFja2V0ICovCit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSB7CisJc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXY7CisJY2hhciAqbmFtZTsKKwl1NjQgIGNlX3BoeV9hZGRyZXNzOworCXZvaWQgX19pb21lbSAqY2VfYmFzZTsKKworCXZvaWQgKnBkcjsJCQkvKiBiYXNlIGFkZHJlc3Mgb2YgcGFja2V0CisJCQkJCWRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3QgcGRyX3BhOwkJLyogcGh5c2ljYWwgYWRkcmVzcyB1c2VkIHRvCisJCQkJCXByb2dyYW0gY2UgcGRyX2Jhc2VfcmVnaXN0ZXIgKi8KKwl2b2lkICpnZHI7ICAgICAgICAgICAgICAgICAgICAgIC8qIGdhdGhlciBkZXNjcmlwdG9yIHJpbmcgKi8KKwlkbWFfYWRkcl90IGdkcl9wYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MgdXNlZCB0bworCQkJCQlwcm9ncmFtIGNlIGdkcl9iYXNlX3JlZ2lzdGVyICovCisJdm9pZCAqc2RyOwkJCS8qIHNjYXR0ZXIgZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBzZHJfcGE7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgdG8KKwkJCQkJcHJvZ3JhbSBjZSBzZHJfYmFzZV9yZWdpc3RlciAqLworCXZvaWQgKnNjYXR0ZXJfYnVmZmVyX3ZhOworCWRtYV9hZGRyX3Qgc2NhdHRlcl9idWZmZXJfcGE7CisJdTMyIHNjYXR0ZXJfYnVmZmVyX3NpemU7CisKKwl2b2lkICpzaGFkb3dfc2FfcG9vbDsJCS8qIHBvb2wgb2YgbWVtb3J5IGZvciBzYSBpbiBwZF91aW5mbyAqLworCWRtYV9hZGRyX3Qgc2hhZG93X3NhX3Bvb2xfcGE7CisJdm9pZCAqc2hhZG93X3NyX3Bvb2w7CQkvKiBwb29sIG9mIG1lbW9yeSBmb3Igc3IgaW4gcGRfdWluZm8gKi8KKwlkbWFfYWRkcl90IHNoYWRvd19zcl9wb29sX3BhOworCXUzMiBwZHJfdGFpbDsKKwl1MzIgcGRyX2hlYWQ7CisJdTMyIGdkcl90YWlsOworCXUzMiBnZHJfaGVhZDsKKwl1MzIgc2RyX3RhaWw7CisJdTMyIHNkcl9oZWFkOworCXZvaWQgKnBkcl91aW5mbzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFsZ19saXN0OwkvKiBMaXN0IG9mIGFsZ29yaXRobSBzdXBwb3J0ZWQKKwkJCQkJYnkgdGhpcyBkZXZpY2UgKi8KK307CisKK3N0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldjsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworCXUzMiBpbnRfc3RhdHVzOworCXUzMiBpcnE7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RydWN0IGNyeXB0bzR4eF9jdHggeworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CisJdm9pZCAqc2FfaW47CisJZG1hX2FkZHJfdCBzYV9pbl9kbWFfYWRkcjsKKwl2b2lkICpzYV9vdXQ7CisJZG1hX2FkZHJfdCBzYV9vdXRfZG1hX2FkZHI7CisJdm9pZCAqc3RhdGVfcmVjb3JkOworCWRtYV9hZGRyX3Qgc3RhdGVfcmVjb3JkX2RtYV9hZGRyOworCXUzMiBzYV9sZW47CisJdTMyIG9mZnNldF90b19zcl9wdHI7ICAgICAgICAgICAvKiBvZmZzZXQgdG8gc3RhdGUgcHRyLCBpbiBkeW5hbWljIHNhICovCisJdTMyIGRpcmVjdGlvbjsKKwl1MzIgbmV4dF9oZHI7CisJdTMyIHNhdmVfaXY7CisJdTMyIHBkX2N0bF9sZW47CisJdTMyIHBkX2N0bDsKKwl1MzIgYnlwYXNzOworCXUzMiBpc19oYXNoOworCXUzMiBoYXNoX2ZpbmFsOworfTsKKworc3RydWN0IGNyeXB0bzR4eF9yZXFfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OwkvKiBEZXZpY2UgaW4gd2hpY2gKKwkJCQkJb3BlcmF0aW9uIHRvIHNlbmQgdG8gKi8KKwl2b2lkICpzYTsKKwl1MzIgc2FfZG1hX2FkZHI7CisJdTE2IHNhX2xlbjsKK307CisKK3N0cnVjdCBjcnlwdG80eHhfYWxnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBlbnRyeTsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyBhbGc7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKK307CisKKyNkZWZpbmUgY3J5cHRvX2FsZ190b19jcnlwdG80eHhfYWxnKHgpIFwKKwkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBjcnlwdG80eHhfYWxnLCBhbGcpCisKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2FsbG9jX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsIHUzMiBzaXplKTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9mcmVlX3NhKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBjcnlwdG80eHhfYWxsb2Nfc2FfcmN0eChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LAorCQkJCSAgIHN0cnVjdCBjcnlwdG80eHhfY3R4ICpyY3R4KTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9mcmVlX3NhX3JjdHgoc3RydWN0IGNyeXB0bzR4eF9jdHggKnJjdHgpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X2ZyZWVfY3R4KHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBjcnlwdG80eHhfYWxsb2Nfc3RhdGVfcmVjb3JkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfa2V5X2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHUzMiBnZXRfZHluYW1pY19zYV9pdl9zaXplKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpOworZXh0ZXJuIHZvaWQgY3J5cHRvNHh4X21lbWNweV9sZSh1bnNpZ25lZCBpbnQgKmRzdCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOworZXh0ZXJuIHUzMiBjcnlwdG80eHhfYnVpbGRfcGQoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsCisJCQkgICAgICBzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LAorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJICAgICAgdm9pZCAqaXYsIHUzMiBpdl9sZW4pOworZXh0ZXJuIGludCBjcnlwdG80eHhfc2V0a2V5X2Flc19jYmMoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXIsCisJCQkJICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pOworZXh0ZXJuIGludCBjcnlwdG80eHhfZW5jcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfc2hhMV9hbGdfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF9maW5hbChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfdXBkYXRlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworZXh0ZXJuIGludCBjcnlwdG80eHhfaGFzaF9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9yZWdfZGVmLmggYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9yZWdfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0ZWRiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3JlZ19kZWYuaApAQCAtMCwwICsxLDI4NCBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxyIGRlZmluZXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgU2VjdXJpdHkgU3Vic3lzdGVtCisgKi8KKworI2lmbmRlZiBfX0NSWVBUTzRYWF9SRUdfREVGX0hfXworI2RlZmluZSBfX0NSWVBUTzRYWF9SRUdfREVGX0hfXworCisvKiBDUllQVE80WFggUmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIENSWVBUTzRYWF9ERVNDUklQVE9SCQkJMHgwMDAwMDAwMAorI2RlZmluZSBDUllQVE80WFhfQ1RSTF9TVEFUCQkJMHgwMDAwMDAwMAorI2RlZmluZSBDUllQVE80WFhfU09VUkNFCQkJMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE80WFhfREVTVAkJCQkweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUTzRYWF9TQQkJCQkweDAwMDAwMDBDCisjZGVmaW5lIENSWVBUTzRYWF9TQV9MRU5HVEgJCQkweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUTzRYWF9MRU5HVEgJCQkweDAwMDAwMDE0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BFX0RNQV9DRkcJCQkweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUTzRYWF9QRV9ETUFfU1RBVAkJCTB4MDAwMDAwNDQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BEUl9CQVNFCQkJMHgwMDAwMDA0OAorI2RlZmluZSBDUllQVE80WFhfUkRSX0JBU0UJCQkweDAwMDAwMDRjCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX1NJWkUJCQkweDAwMDAwMDUwCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX0NUUkwJCQkweDAwMDAwMDU0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUklOR19TVEFUCQkJMHgwMDAwMDA1OAorI2RlZmluZSBDUllQVE80WFhfRVhUX1JJTkdfU1RBVAkJCTB4MDAwMDAwNWMKKyNkZWZpbmUgQ1JZUFRPNFhYX0lPX1RIUkVTSE9MRAkJCTB4MDAwMDAwNjAKKyNkZWZpbmUgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFCQkweDAwMDAwMDY0CisjZGVmaW5lIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRQkJMHgwMDAwMDA2OAorI2RlZmluZSBDUllQVE80WFhfUEFSVF9SSU5HX1NJWkUJCTB4MDAwMDAwNmMKKyNkZWZpbmUgQ1JZUFRPNFhYX1BBUlRfUklOR19DRkcJCSAgICAgICAgMHgwMDAwMDA3MAorCisjZGVmaW5lIENSWVBUTzRYWF9QRFJfQkFTRV9VQUREUgkJMHgwMDAwMDA4MAorI2RlZmluZSBDUllQVE80WFhfUkRSX0JBU0VfVUFERFIJCTB4MDAwMDAwODQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BLVF9TUkNfVUFERFIJCQkweDAwMDAwMDg4CisjZGVmaW5lIENSWVBUTzRYWF9QS1RfREVTVF9VQUREUgkJMHgwMDAwMDA4YworI2RlZmluZSBDUllQVE80WFhfU0FfVUFERFIJCQkweDAwMDAwMDkwCisjZGVmaW5lIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRV9VQUREUgkJMHgwMDAwMDBBMAorI2RlZmluZSBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0VfVUFERFIJCTB4MDAwMDAwQTQKKworI2RlZmluZSBDUllQVE80WFhfU0VRX1JECQkJMHgwMDAwMDQwOAorI2RlZmluZSBDUllQVE80WFhfU0VRX01BU0tfUkQJCQkweDAwMDAwNDBDCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX0NNRF8wCQkJMHgwMDAxMDYwMAorI2RlZmluZSBDUllQVE80WFhfU0FfQ01EXzEJCQkweDAwMDEwNjA0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX1BUUgkJCTB4MDAwMTA2ZGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0lWCQkJMHgwMDAxMDcwMAorI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSEFTSF9CWVRFX0NOVF8wCQkweDAwMDEwNzEwCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9IQVNIX0JZVEVfQ05UXzEJCTB4MDAwMTA3MTQKKworI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSURJR0VTVF8wCQkweDAwMDEwNzE4CisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9JRElHRVNUXzEJCTB4MDAwMTA3MWMKKworI2RlZmluZSBDUllQVE80WFhfREFUQV9JTgkJCTB4MDAwMTgwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0RBVEFfT1VUCQkJMHgwMDAxYzAwMAorCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfVU5NQVNLX1NUQVQJCTB4MDAwNTAwYTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQVNLX1NUQVQJCQkweDAwMDUwMGE0CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfQ0xSCQkJMHgwMDA1MDBhNAorI2RlZmluZSBDUllQVE80WFhfSU5UX0VOCQkJMHgwMDA1MDBhOAorCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUEtBCQkJMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE80WFhfSU5UX1BEUl9ET05FCQkJMHgwMDAwODAwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX01BX1dSX0VSUgkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQV9SRF9FUlIJCQkweDAwMDEwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfUEVfRVJSCQkJMHgwMDAwMDIwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX1VTRVJfRE1BX0VSUgkJMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE80WFhfSU5UX1NMQVZFX0VSUgkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQVNURVJfRVJSCQkweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUTzRYWF9JTlRfRVJST1IJCQkweDAwMDMwMjU4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9DRkcJCQkweDAwMDUwMGFjCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfREVTQ1JfUkQJCQkweDAwMDUwMGIwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfREVTQ1JfQ05UCQkJMHgwMDA1MDBiNAorI2RlZmluZSBDUllQVE80WFhfSU5UX1RJTUVPVVRfQ05UCQkweDAwMDUwMGI4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFVklDRV9DVFJMCQkJMHgwMDA2MDA4MAorI2RlZmluZSBDUllQVE80WFhfREVWSUNFX0lECQkJMHgwMDA2MDA4NAorI2RlZmluZSBDUllQVE80WFhfREVWSUNFX0lORk8JCQkweDAwMDYwMDg4CisjZGVmaW5lIENSWVBUTzRYWF9ETUFfVVNFUl9TUkMJCQkweDAwMDYwMDk0CisjZGVmaW5lIENSWVBUTzRYWF9ETUFfVVNFUl9ERVNUCQkJMHgwMDA2MDA5OAorI2RlZmluZSBDUllQVE80WFhfRE1BX1VTRVJfQ01ECQkJMHgwMDA2MDA5QworCisjZGVmaW5lIENSWVBUTzRYWF9ETUFfQ0ZHCSAgICAgICAgCTB4MDAwNjAwZDQKKyNkZWZpbmUgQ1JZUFRPNFhYX0JZVEVfT1JERVJfQ0ZHIAkJMHgwMDA2MDBkOAorI2RlZmluZSBDUllQVE80WFhfRU5ESUFOX0NGRwkJCTB4MDAwNjAwZDgKKworI2RlZmluZSBDUllQVE80WFhfUFJOR19TVEFUCQkJMHgwMDA3MDAwMAorI2RlZmluZSBDUllQVE80WFhfUFJOR19DVFJMCQkJMHgwMDA3MDAwNAorI2RlZmluZSBDUllQVE80WFhfUFJOR19TRUVEX0wJCQkweDAwMDcwMDA4CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1NFRURfSAkJCTB4MDAwNzAwMGMKKworI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMAkJCTB4MDAwNzAwMjAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzEJCQkweDAwMDcwMDI0CisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18yCQkJMHgwMDA3MDAyOAorI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMwkJCTB4MDAwNzAwMkMKKworI2RlZmluZSBDUllQVE80WFhfUFJOR19MRlNSX0wJCQkweDAwMDcwMDMwCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX0xGU1JfSAkJCTB4MDAwNzAwMzQKKworLyoqCisgKiBJbml0aWxpemUgQ1JZUFRPIEVOR0lORSByZWdpc3RlcnMsIGFuZCBtZW1vcnkgYmFzZXMuCisgKi8KKyNkZWZpbmUgUFBDNFhYX1BEUl9QT0xMCQkJCTB4M2ZmCisjZGVmaW5lIFBQQzRYWF9PVVRQVVRfVEhSRVNIT0xECQkJMgorI2RlZmluZSBQUEM0WFhfSU5QVVRfVEhSRVNIT0xECQkJMgorI2RlZmluZSBQUEM0WFhfUERfU0laRQkJCQk2CisjZGVmaW5lIFBQQzRYWF9DVFhfRE9ORV9JTlQJCQkweDIwMDAKKyNkZWZpbmUgUFBDNFhYX1BEX0RPTkVfSU5UCQkJMHg4MDAwCisjZGVmaW5lIFBQQzRYWF9CWVRFX09SREVSCQkJMHgyMjIyMgorI2RlZmluZSBQUEM0WFhfSU5URVJSVVBUX0NMUgkJCTB4M2ZmZmYKKyNkZWZpbmUgUFBDNFhYX1BSTkdfQ1RSTF9BVVRPX0VOCQkweDMKKyNkZWZpbmUgUFBDNFhYX0RDXzNERVNfRU4JCQkxCisjZGVmaW5lIFBQQzRYWF9JTlRfREVTQ1JfQ05UCQkJNAorI2RlZmluZSBQUEM0WFhfSU5UX1RJTUVPVVRfQ05UCQkJMAorI2RlZmluZSBQUEM0WFhfSU5UX0NGRwkJCQkxCisvKioKKyAqIGFsbCBmb2xsb3cgZGVmaW5lIGFyZSBhZCBob2MKKyAqLworI2RlZmluZSBQUEM0WFhfUklOR19SRVRSWQkJCTEwMAorI2RlZmluZSBQUEM0WFhfUklOR19QT0xMCQkJMTAwCisjZGVmaW5lIFBQQzRYWF9TRFJfU0laRQkJCQlQUEM0WFhfTlVNX1NECisjZGVmaW5lIFBQQzRYWF9HRFJfU0laRQkJCQlQUEM0WFhfTlVNX0dECisKKy8qKgorICAqIEdlbmVyaWMgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB3aXRoIGFsbCBwb3NzaWJsZSBmaWVsZHMuIFRoZXNlIHdpbGwKKyAqIG5ldmVyIGxpa2VseSB1c2VkIGV4Y2VwdCBmb3IgcmVmZXJlbmNlIHB1cnBvc2UuIFRoZXNlIHN0cnVjdHVyZSBmb3JtYXQKKyAqIGNhbiBiZSBub3QgY2hhbmdlZCBhcyB0aGUgaGFyZHdhcmUgZXhwZWN0cyB0aGVtIHRvIGJlIGxheW91dCBhcyBkZWZpbmVkLgorICogRmllbGQgY2FuIGJlIHJlbW92ZWQgb3IgcmVkdWNlZCBidXQgb3JkZXJpbmcgY2FuIG5vdCBiZSBjaGFuZ2VkLgorICovCisjZGVmaW5lIENSWVBUTzRYWF9ETUFfQ0ZHX09GRlNFVAkJMHg0MAordW5pb24gY2VfcGVfZG1hX2NmZyB7CisJc3RydWN0IHsKKwkJdTMyIHJzdjo3OworCQl1MzIgZGlyX2hvc3Q6MTsKKwkJdTMyIHJzdjE6MjsKKwkJdTMyIGJvX3RkX2VuOjE7CisJCXUzMiBkaXNfcGRyX3VwZDoxOworCQl1MzIgYm9fc2dwZF9lbjoxOworCQl1MzIgYm9fZGF0YV9lbjoxOworCQl1MzIgYm9fc2FfZW46MTsKKwkJdTMyIGJvX3BkX2VuOjE7CisJCXUzMiByc3YyOjQ7CisJCXUzMiBkeW5hbWljX3NhX2VuOjE7CisJCXUzMiBwZHJfbW9kZToyOworCQl1MzIgcGVfbW9kZToxOworCQl1MzIgcnN2Mzo1OworCQl1MzIgcmVzZXRfc2c6MTsKKwkJdTMyIHJlc2V0X3BkcjoxOworCQl1MzIgcmVzZXRfcGU6MTsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfUERSX0JBU0VfT0ZGU0VUCQkweDQ4CisjZGVmaW5lIENSWVBUTzRYWF9SRFJfQkFTRV9PRkZTRVQJCTB4NGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfU0laRV9PRkZTRVQJCTB4NTAKK3VuaW9uIGNlX3Jpbmdfc2l6ZSB7CisJc3RydWN0IHsKKwkJdTMyIHJpbmdfb2Zmc2V0OjE2OworCQl1MzIgcnN2OjY7CisJCXUzMiByaW5nX3NpemU6MTA7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1JJTkdfQ09OVFJPTF9PRkZTRVQJCTB4NTQKK3VuaW9uIGNlX3JpbmdfY29udG9sIHsKKwlzdHJ1Y3QgeworCQl1MzIgY29udGludW91czoxOworCQl1MzIgcnN2OjU7CisJCXUzMiByaW5nX3JldHJ5X2Rpdmlzb3I6MTA7CisJCXUzMiByc3YxOjQ7CisJCXUzMiByaW5nX3BvbGxfZGl2aXNvcjoxMDsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfSU9fVEhSRVNIT0xEX09GRlNFVAkJMHg2MAordW5pb24gY2VfaW9fdGhyZXNob2xkIHsKKwlzdHJ1Y3QgeworCQl1MzIgcnN2OjY7CisJCXUzMiBvdXRwdXRfdGhyZXNob2xkOjEwOworCQl1MzIgcnN2MTo2OworCQl1MzIgaW5wdXRfdGhyZXNob2xkOjEwOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9HQVRIRVJfUklOR19CQVNFX09GRlNFVAkweDY0CisjZGVmaW5lIENSWVBUTzRYWF9TQ0FUVEVSX1JJTkdfQkFTRV9PRkZTRVQJMHg2OAorCit1bmlvbiBjZV9wYXJ0X3Jpbmdfc2l6ZSAgeworCXN0cnVjdCB7CisJCXUzMiBzZHJfc2l6ZToxNjsKKwkJdTMyIGdkcl9zaXplOjE2OworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzMyCQkJMAorI2RlZmluZSBNQVhfQlVSU1RfU0laRV82NAkJCTEKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfMTI4CQkJMgorI2RlZmluZSBNQVhfQlVSU1RfU0laRV8yNTYJCQkzCisKKy8qIGdhdGhlciBkZXNjcmlwdG9yIGNvbnRyb2wgbGVuZ3RoICovCitzdHJ1Y3QgZ2RfY3RsX2xlbiB7CisJdTMyIGxlbjoxNjsKKwl1MzIgcnN2OjE0OworCXUzMiBkb25lOjE7CisJdTMyIHJlYWR5OjE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2VfZ2QgeworCXUzMiBwdHI7CisJc3RydWN0IGdkX2N0bF9sZW4gY3RsX2xlbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzZF9jdGwgeworCXUzMiBjdGw6MzA7CisJdTMyIGRvbmU6MTsKKwl1MzIgcmR5OjE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2Vfc2QgeworICAgIHUzMiBwdHI7CisJc3RydWN0IHNkX2N0bCBjdGw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFBEX1BBRF9DVExfMzIJMHgxMAorI2RlZmluZSBQRF9QQURfQ1RMXzY0CTB4MjAKKyNkZWZpbmUgUERfUEFEX0NUTF8xMjgJMHg0MAorI2RlZmluZSBQRF9QQURfQ1RMXzI1NgkweDgwCit1bmlvbiBjZV9wZF9jdGwgeworCXN0cnVjdCB7CisJCXUzMiBwZF9wYWRfY3RsOjg7CisJCXUzMiBzdGF0dXM6ODsKKwkJdTMyIG5leHRfaGRyOjg7CisJCXUzMiByc3Y6MjsKKwkJdTMyIGNhY2hlZF9zYToxOworCQl1MzIgaGFzaF9maW5hbDoxOworCQl1MzIgaW5pdF9hcmM0OjE7CisJCXUzMiByc3YxOjE7CisJCXUzMiBwZV9kb25lOjE7CisJCXUzMiBob3N0X3JlYWR5OjE7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGNlX3BkX2N0bF9sZW4geworCXN0cnVjdCB7CisJCXUzMiBieXBhc3M6ODsKKwkJdTMyIHBlX2RvbmU6MTsKKwkJdTMyIGhvc3RfcmVhZHk6MTsKKwkJdTMyIHJzdjoyOworCQl1MzIgcGt0X2xlbjoyMDsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNlX3BkIHsKKwl1bmlvbiBjZV9wZF9jdGwgICBwZF9jdGw7CisJdTMyIHNyYzsKKwl1MzIgZGVzdDsKKwl1MzIgc2E7ICAgICAgICAgICAgICAgICAvKiBnZXQgZnJvbSBjdHgtPnNhX2RtYV9hZGRyICovCisJdTMyIHNhX2xlbjsgICAgICAgICAgICAgLyogb25seSBpZiBkeW5hbWljIHNhIGlzIHVzZWQgKi8KKwl1bmlvbiBjZV9wZF9jdGxfbGVuIHBkX2N0bF9sZW47CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NmZkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBAZmlsZSBjcnlwdG80eHhfc2EuYworICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBzZWN1cml0eSBjb250ZXh0CisgKiBhc3NvaWNhdGUgZm9ybWF0LgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vZGVzLmg+CisjaW5jbHVkZSAiY3J5cHRvNHh4X3JlZ19kZWYuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfc2EuaCIKKyNpbmNsdWRlICJjcnlwdG80eHhfY29yZS5oIgorCit1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2l2X2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdTMyIG9mZnNldDsKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKShjdHgtPnNhX2luKSktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKShjdHgtPnNhX291dCkpLT5zYV9jb250ZW50czsKKwlvZmZzZXQgPSBjdHMuYmYua2V5X3NpemUKKwkJKyBjdHMuYmYuaW5uZXJfc2l6ZQorCQkrIGN0cy5iZi5vdXRlcl9zaXplCisJCSsgY3RzLmJmLnNwaQorCQkrIGN0cy5iZi5zZXFfbnVtMAorCQkrIGN0cy5iZi5zZXFfbnVtMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2swCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMgorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2szOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9jdGwpICsgb2Zmc2V0ICogNDsKK30KKwordTMyIGdldF9keW5hbWljX3NhX29mZnNldF9zdGF0ZV9wdHJfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1MzIgb2Zmc2V0OworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW4pLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQpLT5zYV9jb250ZW50czsKKwlvZmZzZXQgPSBjdHMuYmYua2V5X3NpemUKKwkJKyBjdHMuYmYuaW5uZXJfc2l6ZQorCQkrIGN0cy5iZi5vdXRlcl9zaXplCisJCSsgY3RzLmJmLnNwaQorCQkrIGN0cy5iZi5zZXFfbnVtMAorCQkrIGN0cy5iZi5zZXFfbnVtMQorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2swCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMgorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2szCisJCSsgY3RzLmJmLml2MAorCQkrIGN0cy5iZi5pdjEKKwkJKyBjdHMuYmYuaXYyCisJCSsgY3RzLmJmLml2MzsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfY3RsKSArIG9mZnNldCAqIDQ7Cit9CisKK3UzMiBnZXRfZHluYW1pY19zYV9pdl9zaXplKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbiktPnNhX2NvbnRlbnRzOworCWVsc2UKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dCktPnNhX2NvbnRlbnRzOworCXJldHVybiAoY3RzLmJmLml2MCArIGN0cy5iZi5pdjEgKyBjdHMuYmYuaXYyICsgY3RzLmJmLml2MykgKiA0OworfQorCit1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2tleV9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW4pLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQpLT5zYV9jb250ZW50czsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfY3RsKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmggYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiODNlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oCkBAIC0wLDAgKzEsMjQzIEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgc2VjdXJpdHkgY29udGV4dAorICogYXNzb2ljYXRlIGZvcm1hdC4KKyAqLworCisjaWZuZGVmIF9fQ1JZUFRPNFhYX1NBX0hfXworI2RlZmluZSBfX0NSWVBUTzRYWF9TQV9IX18KKworI2RlZmluZSBBRVNfSVZfU0laRQkJCQkxNgorCisvKioKKyAqIENvbnRlbnRzIG9mIER5bmFtaWMgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB3aXRoIGFsbCBwb3NzaWJsZSBmaWVsZHMKKyAqLwordW5pb24gZHluYW1pY19zYV9jb250ZW50cyB7CisJc3RydWN0IHsKKwkJdTMyIGFyYzRfc3RhdGVfcHRyOjE7CisJCXUzMiBhcmM0X2lqX3B0cjoxOworCQl1MzIgc3RhdGVfcHRyOjE7CisJCXUzMiBpdjM6MTsKKwkJdTMyIGl2MjoxOworCQl1MzIgaXYxOjE7CisJCXUzMiBpdjA6MTsKKwkJdTMyIHNlcV9udW1fbWFzazM6MTsKKwkJdTMyIHNlcV9udW1fbWFzazI6MTsKKwkJdTMyIHNlcV9udW1fbWFzazE6MTsKKwkJdTMyIHNlcV9udW1fbWFzazA6MTsKKwkJdTMyIHNlcV9udW0xOjE7CisJCXUzMiBzZXFfbnVtMDoxOworCQl1MzIgc3BpOjE7CisJCXUzMiBvdXRlcl9zaXplOjU7CisJCXUzMiBpbm5lcl9zaXplOjU7CisJCXUzMiBrZXlfc2l6ZTo0OworCQl1MzIgY21kX3NpemU6NDsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBESVJfT1VUQk9VTkQJCQkJMAorI2RlZmluZSBESVJfSU5CT1VORAkJCQkxCisjZGVmaW5lIFNBX09QX0dST1VQX0JBU0lDCQkJMAorI2RlZmluZSBTQV9PUENPREVfRU5DUllQVAkJCTAKKyNkZWZpbmUgU0FfT1BDT0RFX0RFQ1JZUFQJCQkwCisjZGVmaW5lIFNBX09QQ09ERV9IQVNICQkJCTMKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19ERVMJCQkwCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfM0RFUwkJCTEKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19BUkM0CQkJMgorI2RlZmluZSBTQV9DSVBIRVJfQUxHX0FFUwkJCTMKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19LQVNVTUkJCQk0CisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfTlVMTAkJCTE1CisKKyNkZWZpbmUgU0FfSEFTSF9BTEdfTUQ1CQkJCTAKKyNkZWZpbmUgU0FfSEFTSF9BTEdfU0hBMQkJCTEKKyNkZWZpbmUgU0FfSEFTSF9BTEdfTlVMTAkJCTE1CisjZGVmaW5lIFNBX0hBU0hfQUxHX1NIQTFfRElHRVNUX1NJWkUJCTIwCisKKyNkZWZpbmUgU0FfTE9BRF9IQVNIX0ZST01fU0EJCQkwCisjZGVmaW5lIFNBX0xPQURfSEFTSF9GUk9NX1NUQVRFCQkJMgorI2RlZmluZSBTQV9OT1RfTE9BRF9IQVNICQkJMworI2RlZmluZSBTQV9MT0FEX0lWX0ZST01fU0EJCQkwCisjZGVmaW5lIFNBX0xPQURfSVZfRlJPTV9JTlBVVAkJCTEKKyNkZWZpbmUgU0FfTE9BRF9JVl9GUk9NX1NUQVRFCQkJMgorI2RlZmluZSBTQV9MT0FEX0lWX0dFTl9JVgkJCTMKKworI2RlZmluZSBTQV9QQURfVFlQRV9DT05TVEFOVAkJCTIKKyNkZWZpbmUgU0FfUEFEX1RZUEVfWkVSTwkJCTMKKyNkZWZpbmUgU0FfUEFEX1RZUEVfVExTCQkJCTUKKyNkZWZpbmUgU0FfUEFEX1RZUEVfRFRMUwkJCTUKKyNkZWZpbmUgU0FfTk9UX1NBVkVfSEFTSAkJCTAKKyNkZWZpbmUgU0FfU0FWRV9IQVNICQkJCTEKKyNkZWZpbmUgU0FfTk9UX1NBVkVfSVYJCQkJMAorI2RlZmluZSBTQV9TQVZFX0lWCQkJCTEKKyNkZWZpbmUgU0FfSEVBREVSX1BST0MJCQkJMQorI2RlZmluZSBTQV9OT19IRUFERVJfUFJPQwkJCTAKKwordW5pb24gc2FfY29tbWFuZF8wIHsKKwlzdHJ1Y3QgeworCQl1MzIgc2NhdHRlcjoxOworCQl1MzIgZ2F0aGVyOjE7CisJCXUzMiBzYXZlX2hhc2hfc3RhdGU6MTsKKwkJdTMyIHNhdmVfaXY6MTsKKwkJdTMyIGxvYWRfaGFzaF9zdGF0ZToyOworCQl1MzIgbG9hZF9pdjoyOworCQl1MzIgZGlnZXN0X2xlbjo0OworCQl1MzIgaGRyX3Byb2M6MTsKKwkJdTMyIGV4dGVuZF9wYWQ6MTsKKwkJdTMyIHN0cmVhbV9jaXBoZXJfcGFkOjE7CisJCXUzMiByc3Y6MTsKKwkJdTMyIGhhc2hfYWxnOjQ7CisJCXUzMiBjaXBoZXJfYWxnOjQ7CisJCXUzMiBwYWRfdHlwZToyOworCQl1MzIgb3BfZ3JvdXA6MjsKKwkJdTMyIGRpcjoxOworCQl1MzIgb3Bjb2RlOjM7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPX01PREVfRUNCCQkJCTAKKyNkZWZpbmUgQ1JZUFRPX01PREVfQ0JDCQkJCTEKKworI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV9OT19GQgkJMAorI2RlZmluZSBDUllQVE9fRkVFREJBQ0tfTU9ERV82NEJJVF9PRkIJCTAKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfOEJJVF9DRkIJCTEKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfMUJJVF9DRkIJCTIKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfMTI4QklUX0NGQgkJMworCisjZGVmaW5lIFNBX0FFU19LRVlfTEVOXzEyOAkJCTIKKyNkZWZpbmUgU0FfQUVTX0tFWV9MRU5fMTkyCQkJMworI2RlZmluZSBTQV9BRVNfS0VZX0xFTl8yNTYJCQk0CisKKyNkZWZpbmUgU0FfUkVWMgkJCQkJMQorLyoqCisgKiBUaGUgZm9sbG93IGRlZmluZXMgYml0cyBzYV9jb21tYW5kXzEKKyAqIEluIEJhc2ljIGhhc2ggbW9kZSAgdGhpcyBiaXQgZGVmaW5lIHNpbXBsZSBoYXNoIG9yIGhtYWMuCisgKiBJbiBJUHNlYyBtb2RlLCB0aGlzIGJpdCBkZWZpbmUgbXV0aW5nIGNvbnRyb2wuCisgKi8KKyNkZWZpbmUgU0FfSEFTSF9NT0RFX0hBU0gJCQkwCisjZGVmaW5lIFNBX0hBU0hfTU9ERV9ITUFDCQkJMQorI2RlZmluZSBTQV9NQ19FTkFCTEUJCQkJMAorI2RlZmluZSBTQV9NQ19ESVNBQkxFCQkJCTEKKyNkZWZpbmUgU0FfTk9UX0NPUFlfSERSCQkJCTAKKyNkZWZpbmUgU0FfQ09QWV9IRFIJCQkJMQorI2RlZmluZSBTQV9OT1RfQ09QWV9QQUQJCQkJMAorI2RlZmluZSBTQV9DT1BZX1BBRAkJCQkxCisjZGVmaW5lIFNBX05PVF9DT1BZX1BBWUxPQUQJCQkwCisjZGVmaW5lIFNBX0NPUFlfUEFZTE9BRAkJCQkxCisjZGVmaW5lIFNBX0VYVEVOREVEX1NOX09GRgkJCTAKKyNkZWZpbmUgU0FfRVhURU5ERURfU05fT04JCQkxCisjZGVmaW5lIFNBX1NFUV9NQVNLX09GRgkJCQkwCisjZGVmaW5lIFNBX1NFUV9NQVNLX09OCQkJCTEKKwordW5pb24gc2FfY29tbWFuZF8xIHsKKwlzdHJ1Y3QgeworCQl1MzIgY3J5cHRvX21vZGUzMToxOworCQl1MzIgc2F2ZV9hcmM0X3N0YXRlOjE7CisJCXUzMiBhcmM0X3N0YXRlZnVsOjE7CisJCXUzMiBrZXlfbGVuOjU7CisJCXUzMiBoYXNoX2NyeXB0b19vZmZzZXQ6ODsKKwkJdTMyIHNhX3JldjoyOworCQl1MzIgYnl0ZV9vZmZzZXQ6MTsKKwkJdTMyIGhtYWNfbXV0aW5nOjE7CisJCXUzMiBmZWVkYmFja19tb2RlOjI7CisJCXUzMiBjcnlwdG9fbW9kZTlfODoyOworCQl1MzIgZXh0ZW5kZWRfc2VxX251bToxOworCQl1MzIgc2VxX251bV9tYXNrOjE7CisJCXUzMiBtdXRhYmxlX2JpdF9wcm9jOjE7CisJCXUzMiBpcF92ZXJzaW9uOjE7CisJCXUzMiBjb3B5X3BhZDoxOworCQl1MzIgY29weV9wYXlsb2FkOjE7CisJCXUzMiBjb3B5X2hkcjoxOworCQl1MzIgcnN2MToxOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZHluYW1pY19zYV9jdGwgeworCXUzMiBzYV9jb250ZW50czsKKwl1bmlvbiBzYV9jb21tYW5kXzAgc2FfY29tbWFuZF8wOworCXVuaW9uIHNhX2NvbW1hbmRfMSBzYV9jb21tYW5kXzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFN0YXRlIFJlY29yZCBmb3IgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKQorICovCitzdHJ1Y3QgIHNhX3N0YXRlX3JlY29yZCB7CisJdTMyIHNhdmVfaXZbNF07CisJdTMyIHNhdmVfaGFzaF9ieXRlX2NudFsyXTsKKwl1MzIgc2F2ZV9kaWdlc3RbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBBRVMxMjgKKyAqCisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2FlczEyOCB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsCWN0cmw7CisJdTMyIGtleVs0XTsKKwl1MzIgaXZbNF07IC8qIGZvciBDQkMsIE9GQywgYW5kIENGQiBtb2RlICovCisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNBX0FFUzEyOF9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfYWVzMTI4KS80KQorI2RlZmluZSBTQV9BRVMxMjhfQ09OVEVOVFMJMHgzZTAwMDA0MgorCisvKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgQUVTMTkyCisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2FlczE5MiB7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsIGN0cmw7CisJdTMyIGtleVs2XTsKKwl1MzIgaXZbNF07IC8qIGZvciBDQkMsIE9GQywgYW5kIENGQiBtb2RlICovCisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNBX0FFUzE5Ml9MRU4JCShzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfYWVzMTkyKS80KQorI2RlZmluZSBTQV9BRVMxOTJfQ09OVEVOVFMJMHgzZTAwMDA2MgorCisvKioKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEFFUzI1NgorICovCitzdHJ1Y3QgZHluYW1pY19zYV9hZXMyNTYgeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCBjdHJsOworCXUzMiBrZXlbOF07CisJdTMyIGl2WzRdOyAvKiBmb3IgQ0JDLCBPRkMsIGFuZCBDRkIgbW9kZSAqLworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTQV9BRVMyNTZfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2FlczI1NikvNCkKKyNkZWZpbmUgU0FfQUVTMjU2X0NPTlRFTlRTCTB4M2UwMDAwODIKKyNkZWZpbmUgU0FfQUVTX0NPTlRFTlRTCQkweDNlMDAwMDAyCisKKy8qKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgSEFTSDE2MDogSE1BQy1TSEExCisgKi8KK3N0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjAgeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCBjdHJsOworCXUzMiBpbm5lcl9kaWdlc3RbNV07CisJdTMyIG91dGVyX2RpZ2VzdFs1XTsKKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIFNBX0hBU0gxNjBfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjApLzQpCisjZGVmaW5lIFNBX0hBU0gxNjBfQ09OVEVOVFMgICAgIDB4MjAwMGE1MDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rpby9kaW8uYyBiL2RyaXZlcnMvZGlvL2Rpby5jCmluZGV4IDEwYzNjNDkuLjU1ZGQ4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGlvL2Rpby5jCisrKyBiL2RyaXZlcnMvZGlvL2Rpby5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAogCS8qIEluaXRpYWxpemUgdGhlIERJTyBidXMgKi8gCiAJSU5JVF9MSVNUX0hFQUQoJmRpb19idXMuZGV2aWNlcyk7Ci0Jc3RyY3B5KGRpb19idXMuZGV2LmJ1c19pZCwgImRpbyIpOworCWRldl9zZXRfbmFtZSgmZGlvX2J1cy5kZXYsICJkaW8iKTsKIAllcnJvciA9IGRldmljZV9yZWdpc3RlcigmZGlvX2J1cy5kZXYpOwogCWlmIChlcnJvcikgewogCQlwcl9lcnIoIkRJTzogRXJyb3IgcmVnaXN0ZXJpbmcgZGlvX2J1c1xuIik7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAkJZGV2LT5zY29kZSA9IHNjb2RlOwogCQlkZXYtPnJlc291cmNlLnN0YXJ0ID0gcGE7CiAJCWRldi0+cmVzb3VyY2UuZW5kID0gcGEgKyBESU9fU0laRShzY29kZSwgdmEpOwotCQlzcHJpbnRmKGRldi0+ZGV2LmJ1c19pZCwiJTAyeCIsIHNjb2RlKTsKKwkJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiUwMngiLCBzY29kZSk7CiAKICAgICAgICAgICAgICAgICAvKiByZWFkIHRoZSBJRCBieXRlKHMpIGFuZCBlbmNvZGUgaWYgbmVjZXNzYXJ5LiAqLwogCQlwcmlkID0gRElPX0lEKHZhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCBhOTdjMDdlLi4yMGFkM2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogCWRtYV93cml0ZWwoZHcsIENGRywgRFdfQ0ZHX0RNQV9FTik7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogRGVzaWduV2FyZSBETUEgQ29udHJvbGxlciwgJWQgY2hhbm5lbHNcbiIsCi0JCQlwZGV2LT5kZXYuYnVzX2lkLCBkdy0+ZG1hLmNoYW5jbnQpOworCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIGR3LT5kbWEuY2hhbmNudCk7CiAKIAlkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZkdy0+ZG1hKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCmluZGV4IDI0ZjNjYTguLmNiMGY2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEOwogCW1jaS0+bW9kX25hbWUgPSAiY2VsbF9lZGFjIjsKIAltY2ktPmN0bF9uYW1lID0gIk1JQyI7Ci0JbWNpLT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJbWNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCW1jaS0+ZWRhY19jaGVjayA9IGNlbGxfZWRhY19jaGVjazsKIAljZWxsX2VkYWNfaW5pdF9jc3Jvd3MobWNpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IDg1M2VmMzcuLjQ2MzdhNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXBjaS0+ZGV2ID0gJm9wLT5kZXY7CiAJcGNpLT5tb2RfbmFtZSA9IEVEQUNfTU9EX1NUUjsKIAlwY2ktPmN0bF9uYW1lID0gcGRhdGEtPm5hbWU7Ci0JcGNpLT5kZXZfbmFtZSA9IG9wLT5kZXYuYnVzX2lkOworCXBjaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmb3AtPmRldik7CiAKIAlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKIAkJcGNpLT5lZGFjX2NoZWNrID0gbXBjODV4eF9wY2lfY2hlY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKaW5kZXggMDgzY2U4ZC4uNTEzMWFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJcGRhdGEtPmlycSA9IE5PX0lSUTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwY2kpOwogCXBjaS0+ZGV2ID0gJnBkZXYtPmRldjsKLQlwY2ktPmRldl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwlwY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAJcGNpLT5tb2RfbmFtZSA9IEVEQUNfTU9EX1NUUjsKIAlwY2ktPmN0bF9uYW1lID0gcGRhdGEtPm5hbWU7CiAKQEAgLTI5NCw3ICsyOTQsNyBAQAogCXBkYXRhLT5pcnEgPSBOT19JUlE7CiAJZWRhY19kZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZWRhY19kZXYpOwotCWVkYWNfZGV2LT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJZWRhY19kZXYtPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXIpIHsKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXBkYXRhLT5pcnEgPSBOT19JUlE7CiAJZWRhY19kZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZWRhY19kZXYpOwotCWVkYWNfZGV2LT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJZWRhY19kZXYtPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXIpIHsKQEAgLTcxMyw3ICs3MTMsNyBAQAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jaSk7CiAJcGRhdGEtPm5hbWUgPSAibXY2NHg2MF9tY19lcnIiOwogCXBkYXRhLT5pcnEgPSBOT19JUlE7Ci0JbWNpLT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJbWNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCXBkYXRhLT5lZGFjX2lkeCA9IGVkYWNfbWNfaWR4Kys7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKaW5kZXggYzk1MGJmOC4uNjY5NThiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKKysrIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWVkZXYtPmRldi5idXMgPSAmZWlzYV9idXNfdHlwZTsKIAllZGV2LT5kZXYuZG1hX21hc2sgPSAmZWRldi0+ZG1hX21hc2s7CiAJZWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZWRldi0+ZG1hX21hc2s7Ci0Jc3ByaW50ZiAoZWRldi0+ZGV2LmJ1c19pZCwgIiUwMlg6JTAyWCIsIHJvb3QtPmJ1c19uciwgc2xvdCk7CisJZGV2X3NldF9uYW1lKCZlZGV2LT5kZXYsICIlMDJYOiUwMlgiLCByb290LT5idXNfbnIsIHNsb3QpOwogCiAJZm9yIChpID0gMDsgaSA8IEVJU0FfTUFYX1JFU09VUkNFUzsgaSsrKSB7CiAjaWZkZWYgQ09ORklHX0VJU0FfTkFNRVMKQEAgLTMwMSw3ICszMDEsNyBAQAogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKIAogICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiRUlTQTogUHJvYmluZyBidXMgJWQgYXQgJXNcbiIsCi0JCXJvb3QtPmJ1c19uciwgcm9vdC0+ZGV2LT5idXNfaWQpOworCQlyb290LT5idXNfbnIsIGRldl9uYW1lKHJvb3QtPmRldikpOwogCiAJLyogRmlyc3QgdHJ5IHRvIGdldCBob2xkIG9mIHNsb3QgMC4gSWYgdGhlcmUgaXMgbm8gZGV2aWNlCiAJICogaGVyZSwgc2ltcGx5IGZhaWwsIHVubGVzcyByb290LT5mb3JjZV9wcm9iZSBpcyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMgYi9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKaW5kZXggN2ExMTY4Mi4uOTg0YjU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYwpAQCAtMTYwLDcgKzE2MCw3IEBACiB7CiAJc3RydWN0IGdwaW9fY2hpcCAqYyA9ICZiZy0+Z3BpbzsKIAotCWMtPmxhYmVsID0gYmctPnBkZXYtPmRldi5idXNfaWQ7CisJYy0+bGFiZWwgPSBkZXZfbmFtZSgmYmctPnBkZXYtPmRldik7CiAJYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljLT5kaXJlY3Rpb25faW5wdXQgPSBidDh4eGdwaW9fZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CiAJYy0+Z2V0ID0gYnQ4eHhncGlvX2dwaW9fZ2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwppbmRleCBmNTI2NjNlLi5lMTNjYjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwpAQCAtMzM3LDE0ICszMzcsMTAgQEAKIHsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPm1pbm9yLT5kZXY7Ci0JaW50IHJldGNvZGU7CiAKIAlEUk1fREVCVUcoImZkID0gJWQsIGRldmljZSA9IDB4JWx4XG4iLCBmZCwKIAkJICAobG9uZylvbGRfZW5jb2RlX2Rldihwcml2LT5taW5vci0+ZGV2aWNlKSk7Ci0JcmV0Y29kZSA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmZGV2LT5idWZfYXN5bmMpOwotCWlmIChyZXRjb2RlIDwgMCkKLQkJcmV0dXJuIHJldGNvZGU7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmZGV2LT5idWZfYXN5bmMpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZmFzeW5jKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCmluZGV4IDVhYTY3ODAuLjE4NmQwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKQEAgLTM1OSw4ICszNTksOCBAQAogCURSTV9ERUJVRygiYWRkaW5nIFwiJXNcIiB0byBzeXNmc1xuIiwKIAkJICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCi0Jc25wcmludGYoY29ubmVjdG9yLT5rZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJjYXJkJWQtJXMiLAotCQkgZGV2LT5wcmltYXJ5LT5pbmRleCwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwlkZXZfc2V0X25hbWUoJmNvbm5lY3Rvci0+a2RldiwgImNhcmQlZC0lcyIsCisJCSAgICAgZGV2LT5wcmltYXJ5LT5pbmRleCwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNvbm5lY3Rvci0+a2Rldik7CiAKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKaW5kZXggMWY1YjVkNC4uYWEyMTQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwpAQCAtMjI3LDEyICsyMjcsOSBAQAogICovCiBzdGF0aWMgaW50IGhpZGRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCWludCByZXR2YWw7CiAJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpc3QtPmZhc3luYyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggZTdkOTg0OC4uZmJiOTAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC04NDEsNyArODQxLDcgQEAKIAogCWlmIChjbGllbnQtPmRyaXZlciAmJiAhaXNfbmV3c3R5bGVfZHJpdmVyKGNsaWVudC0+ZHJpdmVyKSkgewogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9yZWxlYXNlOwotCQljbGllbnQtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmY2xpZW50LT5kZXYsIDEpOwogCX0gZWxzZQogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9kZXZfcmVsZWFzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggNWVhM2JmYS4uNjQwYzk5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC01Niw4ICs1NiwxMiBAQAogCiBjb21tZW50ICJQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzIgogCitjb25maWcgSURFX1hGRVJfTU9ERQorCWJvb2wKKwogY29uZmlnIElERV9USU1JTkdTCiAJYm9vbAorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAKIGNvbmZpZyBJREVfQVRBUEkKIAlib29sCkBAIC02OTgsNiArNzAyLDcgQEAKIGNvbmZpZyBCTEtfREVWX0lERV9BVTFYWFgKICAgICAgICBib29sICJJREUgZm9yIEFNRCBBbGNoZW15IEF1MTIwMCIKICAgICAgICBkZXBlbmRzIG9uIFNPQ19BVTEyMDAKKyAgICAgICBzZWxlY3QgSURFX1hGRVJfTU9ERQogY2hvaWNlCiAgICAgICAgcHJvbXB0ICJJREUgTW9kZSBmb3IgQU1EIEFsY2hlbXkgQXUxMjAwIgogICAgICAgIGRlZmF1bHQgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUEKQEAgLTg3MSw2ICs4NzYsNyBAQAogCiBjb25maWcgQkxLX0RFVl9EVEMyMjc4CiAJdHJpc3RhdGUgIkRUQy0yMjc4IHN1cHBvcnQiCisJc2VsZWN0IElERV9YRkVSX01PREUKIAlzZWxlY3QgSURFX0xFR0FDWQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgImR0YzIyNzgucHJvYmUiIGtlcm5lbApAQCAtOTAyLDYgKzkwOCw3IEBACiAKIGNvbmZpZyBCTEtfREVWX1VNQzg2NzIKIAl0cmlzdGF0ZSAiVU1DLTg2NzIgc3VwcG9ydCIKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAidW1jODY3Mi5wcm9iZSIga2VybmVsCkBAIC05MTUsNSArOTIyLDYgQEAKIGNvbmZpZyBCTEtfREVWX0lERURNQQogCWRlZl9ib29sIEJMS19ERVZfSURFRE1BX1NGRiB8fCBcCiAJCSBCTEtfREVWX0lERURNQV9JQ1MgfHwgQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCisJc2VsZWN0IElERV9YRkVSX01PREUKIAogZW5kaWYgIyBJREUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggMWMzMjZkOS4uOWI0YmJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTUsOSArNSwxMSBAQAogRVhUUkFfQ0ZMQUdTCQkJCSs9IC1JZHJpdmVycy9pZGUKIAogaWRlLWNvcmUteSArPSBpZGUubyBpZGUtaW9jdGxzLm8gaWRlLWlvLm8gaWRlLWlvcHMubyBpZGUtbGliLm8gaWRlLXByb2JlLm8gXAotCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXBpby1ibGFja2xpc3QubyBpZGUtc3lzZnMubworCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXN5c2ZzLm8gaWRlLWRldnNldHMubyBcCisJICAgICAgaWRlLWlvLXN0ZC5vIGlkZS1laC5vCiAKICMgY29yZSBJREUgY29kZQoraWRlLWNvcmUtJChDT05GSUdfSURFX1hGRVJfTU9ERSkJKz0gaWRlLXBpby1ibGFja2xpc3QubyBpZGUteGZlci1tb2RlLm8KIGlkZS1jb3JlLSQoQ09ORklHX0lERV9USU1JTkdTKQkJKz0gaWRlLXRpbWluZ3MubwogaWRlLWNvcmUtJChDT05GSUdfSURFX0FUQVBJKQkJKz0gaWRlLWF0YXBpLm8KIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFUENJKQkrPSBzZXR1cC1wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWVjNjJ4eC5jIGIvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCmluZGV4IDQ0ODViOWMuLjg3OGY4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FlYzYyeHguYworKysgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCWRyaXZlLT5od2lmLT5wb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBwaW8gKyBYRkVSX1BJT18wKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYWVjNjJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYWVjNjJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCS8qIFRoZXNlIGFyZSBuZWNlc3NhcnkgdG8gZ2V0IEFFQzYyODAgTWFjaW50b3NoIGNhcmRzIHRvIHdvcmsgKi8KIAlpZiAoKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1KSB8fApAQCAtMTU2LDcgKzE1Niw3IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGEsIHJlZzRhaCB8IDB4ODApOwogCX0KIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGF0cDg2eF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCmluZGV4IDY2ZjQzMDguLmQzNTEzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKKysrIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKglhcHByb3ByaWF0ZSBhbHNvIHNldHMgdXAgdGhlIDE1MzMgc291dGhicmlkZ2UuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYWxpMTV4MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYWxpMTV4MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggdG1wYnl0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FtZDc0eHguYyBiL2RyaXZlcnMvaWRlL2FtZDc0eHguYwppbmRleCA3NzI2N2M4Li42MjhjZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKICAqIFRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjay4gIEluaXRpYWxpemUgZHJpdmUgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2FtZDc0eHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2FtZDc0eHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCB0ID0gMCwgb2Zmc2V0ID0gYW1kX29mZnNldChkZXYpOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJdCB8PSAweGYwOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIEFNRF9JREVfQ09ORklHICsgb2Zmc2V0LCB0KTsKIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGFtZF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTE4MywxNCArMTgzLDYgQEAKIAkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2FtZDc0eHgoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCi0JaWYgKGh3aWYtPmlycSA9PSAwKSAvKiAwIGlzIGJvZ3VzIGJ1dCB3aWxsIGRvIGZvciBub3cgKi8KLQkJaHdpZi0+aXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIGh3aWYtPmNoYW5uZWwpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBhbWRfcG9ydF9vcHMgPSB7CiAJLnNldF9waW9fbW9kZQkJPSBhbWRfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hX21vZGUJCT0gYW1kX3NldF9kcml2ZSwKQEAgLTIwNyw3ICsxOTksNiBAQAogCXsJCQkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQkJCVwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hbWQ3NHh4LAkJCVwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hbWQ3NHh4LAkJCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDAsMHgwMiwweDAyfSwgezB4NDAsMHgwMSwweDAxfX0sCVwKIAkJLnBvcnRfb3BzCT0gJmFtZF9wb3J0X29wcywJCQlcCiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19BTUQsCQkJXApAQCAtMjIxLDcgKzIxMiw2IEBACiAJewkJCQkJCQkJXAogCQkubmFtZQkJPSBEUlZfTkFNRSwJCQkJXAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2FtZDc0eHgsCQkJXAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FtZDc0eHgsCQkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDAyLDB4MDJ9LCB7MHg1MCwweDAxLDB4MDF9fSwJXAogCQkucG9ydF9vcHMJPSAmYW1kX3BvcnRfb3BzLAkJCVwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0FNRCwJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCmluZGV4IGVjZDFlNjIuLjkyM2NiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCkBAIC0xNDIsNyArMTQyLDYgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5lbmFibGViaXRzCT0ge3sweDQ4LDB4MDEsMHgwMH0sIHsweDQ4LDB4MDgsMHgwMH19LAogCQkucG9ydF9vcHMJPSAmYXRpaXhwX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTE1MSw3ICsxNTAsNyBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4MDAsMHgwMCwweDAwfX0sCiAJCS5wb3J0X29wcwk9ICZhdGlpeHBfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSB8IElERV9IRkxBR19MRUdBQ1lfSVJRUywKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCmluZGV4IDc5YTJkZmUuLjE1NGVjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKQEAgLTUzNiw5ICs1MzYsOCBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IGF1X2lkZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1X2lkZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCV9hdWlkZV9od2lmICphaHdpZiA9ICZhdWlkZV9od2lmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKQEAgLTU1MiwyMyArNTUxLDIzIEBACiAjZW5kaWYKIAogCW1lbXNldCgmYXVpZGVfaHdpZiwgMCwgc2l6ZW9mKF9hdWlkZV9od2lmKSk7Ci0JYWh3aWYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJYWh3aWYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCIlcyAlZDogbm8gYmFzZSBhZGRyZXNzXG4iLCBEUlZfTkFNRSwgcGRldi0+aWQpOworCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIGJhc2UgYWRkcmVzc1xuIiwgRFJWX05BTUUsIGRldi0+aWQpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKGFod2lmLT5pcnEgPCAwKSB7Ci0JCXByX2RlYnVnKCIlcyAlZDogbm8gSVJRXG4iLCBEUlZfTkFNRSwgcGRldi0+aWQpOworCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIElSUVxuIiwgRFJWX05BTUUsIGRldi0+aWQpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAotCQkJCXBkZXYtPm5hbWUpKSB7CisJCQkJZGV2LT5uYW1lKSkgewogCQlwcl9kZWJ1ZygiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIERSVl9OQU1FKTsKIAkJcmV0ID0gIC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC01ODMsNyArNTgyLDcgQEAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlhdWlkZV9zZXR1cF9wb3J0cygmaHcsIGFod2lmKTsKIAlody5pcnEgPSBhaHdpZi0+aXJxOwotCWh3LmRldiA9IGRldjsKKwlody5kZXYgPSAmZGV2LT5kZXY7CiAJaHcuY2hpcHNldCA9IGlkZV9hdTF4eHg7CiAKIAlyZXQgPSBpZGVfaG9zdF9hZGQoJmF1MXh4eF9wb3J0X2luZm8sIGh3cywgJmhvc3QpOwpAQCAtNTkyLDcgKzU5MSw3IEBACiAKIAlhdWlkZV9od2lmLmh3aWYgPSBob3N0LT5wb3J0c1swXTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJBdTF4eHggSURFKGJ1aWx0aW4pIGNvbmZpZ3VyZWQgZm9yICVzXG4iLCBtb2RlICk7CiAKQEAgLTYwMCwzOCArNTk5LDM5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhdV9pZGVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXVfaWRlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAKIAlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CiAKIAlpb3VubWFwKCh2b2lkICopYWh3aWYtPnJlZ2Jhc2UpOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTEyMDBfaWRlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYXUxMjAwLWlkZSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTEyMDBfaWRlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxMjAwLWlkZSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZSAJCT0gYXVfaWRlX3Byb2JlLAogCS5yZW1vdmUJCT0gYXVfaWRlX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF1X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF1X2lkZV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCmluZGV4IDJmOTY4OGQuLmFlZWUwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAlyZXR1cm4gKGRtYV9zdGF0ICYgNykgIT0gNDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfY21kNjR4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9jbWQ2NHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCBtcmRtb2RlID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9jczU1MjAuYwppbmRleCBkMDAzYmVjLi41OGZiOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MjAuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MjAuYwpAQCAtMTMzLDcgKzEzMyw4IEBACiAJICoJZG8gYWxsIHRoZSBkZXZpY2Ugc2V0dXAgZm9yIHVzCiAJICovCiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMTQsICZod1swXSwgJmh3c1swXSk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsICZod1swXSwgJmh3c1swXSk7CisJaHdbMF0uaXJxID0gMTQ7CiAKIAlyZXR1cm4gaWRlX2hvc3RfYWRkKGQsIGh3cywgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCmluZGV4IGQ4ZWRlODUuLjhlOGIzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKICAqCUluaXRpYWxpemUgdGhlIGNzNTUzMCBicmlkZ2UgZm9yIHJlbGlhYmxlIElERSBETUEgb3BlcmF0aW9uLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2NzNTUzMChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfY3M1NTMwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKm1hc3Rlcl8wID0gTlVMTCwgKmNzNTUzMF8wID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMgYi9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYwppbmRleCA4ZjFiMmQ5Li5iYWNiMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYworKysgYi9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYwpAQCAtNDYsNyArNDYsNyBAQAogCS5xdWlya3Byb2MJCT0gaWRlX3VuZGVjb2RlZF9zbGF2ZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsa2luX2NiX2luaXRfY2hpcHNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBkZWxraW5fY2JfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCmluZGV4IDNlYjliNWMuLmQzYjNlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCkBAIC05OTUsNyArOTk1LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgbWNyX2FkZHIgKyAxLCBuZXdfbWNyKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaHB0MzY2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2UJPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oJmRldi0+ZGV2KTsKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAJaHB0M3h4X2Rpc2FibGVfZmFzdF9pcnEoZGV2LCAweDUwKTsKIAlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTQpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggaHB0M3h4X2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKaW5kZXggZWM3ZDA3Zi4uNWI3MDRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCkBAIC0yMCw5ICsyMCw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogCiAjZGVmaW5lIFJFR1NfUEVSX0dURgkJNwotc3RydWN0IHRhc2tmaWxlX2FycmF5IHsKLQl1OAl0ZmFbUkVHU19QRVJfR1RGXTsJLyogcmVncy4gMHgxZjEgLSAweDFmNyAqLwotfTsKIAogc3RydWN0IEdUTV9idWZmZXIgewogCXUzMglQSU9fc3BlZWQwOwpAQCAtODksMTIgKzg2LDggQEAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKLXN0YXRpYyBpbnQgaWRlX2FjcGlfYmxhY2tsaXN0KHZvaWQpCitpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKQogewotCXN0YXRpYyBpbnQgZG9uZTsKLQlpZiAoZG9uZSkKLQkJcmV0dXJuIDA7Ci0JZG9uZSA9IDE7CiAJZG1pX2NoZWNrX3N5c3RlbShpZGVfYWNwaV9kbWlfdGFibGUpOwogCXJldHVybiAwOwogfQpAQCAtMjAyLDQwICsxOTUsNiBAQAogfQogCiAvKioKLSAqIGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUgLSBHZXQgQUNQSSBvYmplY3QgaGFuZGxlIGZvciBhIGdpdmVuIGRyaXZlCi0gKiBAZHJpdmU6IGRldmljZSB0byBsb2NhdGUKLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIG9iamVjdCBoYW5kbGUgb2YgYSBnaXZlbiBkcml2ZS4gQWNjb3JkaW5nIHRvIHRoZSBBQ1BJCi0gKiBzcGVjIHRoZSBkcml2ZSBpcyBhIGNoaWxkIG9mIHRoZSBod2lmLgotICoKLSAqIFJldHVybnMgaGFuZGxlIG9uIHN1Y2Nlc3MsIDAgb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBhY3BpX2hhbmRsZSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90CSpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaW50CQkgcG9ydDsKLQlhY3BpX2hhbmRsZQkgZHJpdmVfaGFuZGxlOwotCi0JaWYgKCFod2lmLT5hY3BpZGF0YSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQotCQlyZXR1cm4gTlVMTDsKLQotCXBvcnQgPSBod2lmLT5jaGFubmVsID8gZHJpdmUtPmRuIC0gMjogZHJpdmUtPmRuOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcyBhdCBjaGFubmVsIzogJWQgcG9ydCM6ICVkXG4iLAotCQkgZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIHBvcnQpOwotCi0KLQkvKiBUQkQ6IGNvdWxkIGFsc28gY2hlY2sgQUNQSSBvYmplY3QgVkFMSUQgYml0cyAqLwotCWRyaXZlX2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBwb3J0KTsKLQlERUJQUklOVCgiZHJpdmUgJXMgaGFuZGxlIDB4JXBcbiIsIGRyaXZlLT5uYW1lLCBkcml2ZV9oYW5kbGUpOwotCi0JcmV0dXJuIGRyaXZlX2hhbmRsZTsKLX0KLQotLyoqCiAgKiBkb19kcml2ZV9nZXRfR1RGIC0gZ2V0IHRoZSBkcml2ZSBib290dXAgZGVmYXVsdCB0YXNrZmlsZSBzZXR0aW5ncwogICogQGRyaXZlOiB0aGUgZHJpdmUgZm9yIHdoaWNoIHRoZSB0YXNrZmlsZSBzZXR0aW5ncyBzaG91bGQgYmUgcmV0cmlldmVkCiAgKiBAZ3RmX2xlbmd0aDogbnVtYmVyIG9mIGJ5dGVzIG9mIF9HVEYgZGF0YSByZXR1cm5lZCBhdCBAZ3RmX2FkZHJlc3MKQEAgLTI1Nyw0NyArMjE2LDE1IEBACiAJYWNwaV9zdGF0dXMJCQlzdGF0dXM7CiAJc3RydWN0IGFjcGlfYnVmZmVyCQlvdXRwdXQ7CiAJdW5pb24gYWNwaV9vYmplY3QgCQkqb3V0X29iajsKLQlpZGVfaHdpZl90CQkJKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgZGV2aWNlCQkJKmRldiA9IGh3aWYtPmdlbmRldi5wYXJlbnQ7CiAJaW50CQkJCWVyciA9IC1FTk9ERVY7Ci0JaW50CQkJCXBvcnQ7CiAKIAkqZ3RmX2xlbmd0aCA9IDA7CiAJKmd0Zl9hZGRyZXNzID0gMFVMOwogCSpvYmpfbG9jID0gMFVMOwogCi0JaWYgKGlkZV9ub2FjcGkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFkZXYpIHsKLQkJREVCUFJJTlQoIm5vIFBDSSBkZXZpY2UgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFod2lmLT5hY3BpZGF0YSkgewotCQlERUJQUklOVCgibm8gQUNQSSBkYXRhIGZvciAlc1xuIiwgaHdpZi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXBvcnQgPSBod2lmLT5jaGFubmVsID8gZHJpdmUtPmRuIC0gMjogZHJpdmUtPmRuOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcyBhdCAlcywgcG9ydCM6ICVkLCBoYXJkX3BvcnQjOiAlZFxuIiwKLQkJIGh3aWYtPm5hbWUsIGRldl9uYW1lKGRldiksIHBvcnQsIGh3aWYtPmNoYW5uZWwpOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApIHsKLQkJREVCUFJJTlQoIiVzIGRyaXZlICVkOiVkIG5vdCBwcmVzZW50XG4iLAotCQkJIGh3aWYtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIHBvcnQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgdGhpcyBkcml2ZSdzIF9BRFIgaW5mby4gaWYgbm90IGFscmVhZHkga25vd24uICovCiAJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpIHsKLQkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZShkcml2ZSk7Ci0JCWlmICghZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKSB7Ci0JCQlERUJQUklOVCgiTm8gQUNQSSBvYmplY3QgZm91bmQgZm9yICVzXG4iLAotCQkJCSBkcml2ZS0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlERUJQUklOVCgiTm8gQUNQSSBvYmplY3QgZm91bmQgZm9yICVzXG4iLCBkcml2ZS0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFNldHRpbmcgdXAgb3V0cHV0IGJ1ZmZlciAqLwpAQCAtMzU1LDQzICsyODIsNiBAQAogfQogCiAvKioKLSAqIHRhc2tmaWxlX2xvYWRfcmF3IC0gc2VuZCB0YXNrZmlsZSByZWdpc3RlcnMgdG8gZHJpdmUKLSAqIEBkcml2ZTogZHJpdmUgdG8gd2hpY2ggb3V0cHV0IGlzIHNlbnQKLSAqIEBndGY6IHJhdyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0ICgweDFmMSAtIDB4MWY3KQotICoKLSAqIE91dHB1dHMgSURFIHRhc2tmaWxlIHRvIHRoZSBkcml2ZS4KLSAqLwotc3RhdGljIGludCB0YXNrZmlsZV9sb2FkX3JhdyhpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgKmd0ZikKLXsKLQlpZGVfdGFza190IGFyZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlERUJQUklOVCgiKDB4MWYxLTFmNyk6IGhleDogIgotCSAgICAgICAiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgZ3RmLT50ZmFbMF0sIGd0Zi0+dGZhWzFdLCBndGYtPnRmYVsyXSwKLQkgICAgICAgZ3RmLT50ZmFbM10sIGd0Zi0+dGZhWzRdLCBndGYtPnRmYVs1XSwgZ3RmLT50ZmFbNl0pOwotCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCi0JLyogY29udmVydCBndGYgdG8gSURFIFRhc2tmaWxlICovCi0JbWVtY3B5KCZhcmdzLnRmX2FycmF5WzddLCAmZ3RmLT50ZmEsIDcpOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCi0JaWYgKCFpZGVfYWNwaWd0ZikgewotCQlERUJQUklOVCgiX0dURiBleGVjdXRpb24gZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBlcnIpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqCiAgKiBkb19kcml2ZV9zZXRfdGFza2ZpbGVzIC0gd3JpdGUgdGhlIGRyaXZlIHRhc2tmaWxlIHNldHRpbmdzIGZyb20gX0dURgogICogQGRyaXZlOiB0aGUgZHJpdmUgdG8gd2hpY2ggdGhlIHRhc2tmaWxlIGNvbW1hbmQgc2hvdWxkIGJlIHNlbnQKICAqIEBndGZfbGVuZ3RoOiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiB0YXNrZmlsZXMKQEAgLTQwNCw0MyArMjk0LDQxIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgZ3RmX2xlbmd0aCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZ3RmX2FkZHJlc3MpCiB7Ci0JaW50CQkJcmMgPSAtRU5PREVWLCBlcnI7CisJaW50CQkJcmMgPSAwLCBlcnI7CiAJaW50CQkJZ3RmX2NvdW50ID0gZ3RmX2xlbmd0aCAvIFJFR1NfUEVSX0dURjsKIAlpbnQJCQlpeDsKLQlzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkJKmd0ZjsKLQotCWlmIChpZGVfbm9hY3BpKQotCQlyZXR1cm4gMDsKLQotCURFQlBSSU5UKCJFTlRFUjogJXMsIGhhcmRfcG9ydCM6ICVkXG4iLCBkcml2ZS0+bmFtZSwgZHJpdmUtPmRuKTsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQlnb3RvIG91dDsKLQotCWlmICghZ3RmX2NvdW50KQkJLyogc2hvdWxkbid0IGJlIGhlcmUgKi8KLQkJZ290byBvdXQ7CiAKIAlERUJQUklOVCgidG90YWwgR1RGIGJ5dGVzPSV1ICgweCV4KSwgZ3RmX2NvdW50PSVkLCBhZGRyPTB4JWx4XG4iLAogCQkgZ3RmX2xlbmd0aCwgZ3RmX2xlbmd0aCwgZ3RmX2NvdW50LCBndGZfYWRkcmVzcyk7CiAKLQlpZiAoZ3RmX2xlbmd0aCAlIFJFR1NfUEVSX0dURikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIEdURiBsZW5ndGggKCVkKVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBndGZfbGVuZ3RoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSAwOworCS8qIHNlbmQgYWxsIHRhc2tmaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwogCWZvciAoaXggPSAwOyBpeCA8IGd0Zl9jb3VudDsgaXgrKykgewotCQlndGYgPSAoc3RydWN0IHRhc2tmaWxlX2FycmF5ICopCi0JCQkoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7CisJCXU4ICpndGYgPSAodTggKikoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7CisJCWlkZV90YXNrX3QgdGFzazsKIAotCQkvKiBzZW5kIGFsbCBUYXNrRmlsZSByZWdpc3RlcnMgKDB4MWYxLTB4MWY3KSAqaW4qdGhhdCpvcmRlciogKi8KLQkJZXJyID0gdGFza2ZpbGVfbG9hZF9yYXcoZHJpdmUsIGd0Zik7Ci0JCWlmIChlcnIpCisJCURFQlBSSU5UKCIoMHgxZjEtMWY3KTogIgorCQkJICJoZXg6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkgZ3RmWzBdLCBndGZbMV0sIGd0ZlsyXSwKKwkJCSBndGZbM10sIGd0Zls0XSwgZ3RmWzVdLCBndGZbNl0pOworCisJCWlmICghaWRlX2FjcGlndGYpIHsKKwkJCURFQlBSSU5UKCJfR1RGIGV4ZWN1dGlvbiBkaXNhYmxlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGNvbnZlcnQgR1RGIHRvIHRhc2tmaWxlICovCisJCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwkJbWVtY3B5KCZ0YXNrLnRmX2FycmF5WzddLCBndGYsIFJFR1NfUEVSX0dURik7CisJCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlkZV9ub19kYXRhX3Rhc2tmaWxlIGZhaWxlZDogJXVcbiIsCisJCQkJCV9fZnVuY19fLCBlcnIpOwogCQkJcmMgPSBlcnI7CisJCX0KIAl9CiAKLW91dDoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY0NywyNiArNTM1LDIzIEBACiAJCURFQlBSSU5UKCJubyBBQ1BJIGRhdGEgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KKwogCS8qIGNoYW5uZWwgZmlyc3QgYW5kIHRoZW4gZHJpdmVzIGZvciBwb3dlciBvbiBhbmQgdmVyc2UgdmVyc2EgZm9yIHBvd2VyIG9mZiAqLwogCWlmIChvbikKIAkJYWNwaV9idXNfc2V0X3Bvd2VyKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBBQ1BJX1NUQVRFX0QwKTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKLQkJCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoZHJpdmUpOwotCi0JCWlmIChkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgJiYKLQkJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpKSB7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWYgKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKIAkJCWFjcGlfYnVzX3NldF9wb3dlcihkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUsCi0JCQkJb24/IEFDUElfU1RBVEVfRDA6IEFDUElfU1RBVEVfRDMpOwotCQl9CisJCQkJCSAgIG9uID8gQUNQSV9TVEFURV9EMCA6IEFDUElfU1RBVEVfRDMpOwogCX0KKwogCWlmICghb24pCiAJCWFjcGlfYnVzX3NldF9wb3dlcihod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwgQUNQSV9TVEFURV9EMyk7CiB9CiAKIC8qKgotICogaWRlX2FjcGlfaW5pdCAtIGluaXRpYWxpemUgdGhlIEFDUEkgbGluayBmb3IgYW4gSURFIGludGVyZmFjZQorICogaWRlX2FjcGlfaW5pdF9wb3J0IC0gaW5pdGlhbGl6ZSB0aGUgQUNQSSBsaW5rIGZvciBhbiBJREUgaW50ZXJmYWNlCiAgKiBAaHdpZjogdGFyZ2V0IElERSBpbnRlcmZhY2UgKGNoYW5uZWwpCiAgKgogICogVGhlIEFDUEkgc3BlYyBpcyBub3QgcXVpdGUgY2xlYXIgd2hlbiB0aGUgZHJpdmUgaWRlbnRpZnkgYnVmZmVyCkBAIC02NzYsMTAgKzU2MSw4IEBACiAgKiBTbyB3ZSBnZXQgdGhlIGluZm9ybWF0aW9uIGR1cmluZyBzdGFydHVwOyBidXQgdGhpcyBtZWFucyB0aGF0CiAgKiBhbnkgY2hhbmdlcyBkdXJpbmcgcnVuLXRpbWUgd2lsbCBiZSBsb3N0IGFmdGVyIHJlc3VtZS4KICAqLwotdm9pZCBpZGVfYWNwaV9pbml0KGlkZV9od2lmX3QgKmh3aWYpCit2b2lkIGlkZV9hY3BpX2luaXRfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewotCWlkZV9hY3BpX2JsYWNrbGlzdCgpOwotCiAJaHdpZi0+YWNwaWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWRlX2FjcGlfaHdpZl9saW5rKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFod2lmLT5hY3BpZGF0YSkKIAkJcmV0dXJuOwpAQCAtNzA4LDE1ICs1OTEsMjQgQEAKIAlod2lmLT5kZXZpY2VzWzBdLT5hY3BpZGF0YSA9ICZod2lmLT5hY3BpZGF0YS0+bWFzdGVyOwogCWh3aWYtPmRldmljZXNbMV0tPmFjcGlkYXRhID0gJmh3aWYtPmFjcGlkYXRhLT5zbGF2ZTsKIAotCS8qCi0JICogU2VuZCBJREVOVElGWSBmb3IgZWFjaCBkcml2ZQotCSAqLwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQltZW1zZXQoZHJpdmUtPmFjcGlkYXRhLCAwLCBzaXplb2YoKmRyaXZlLT5hY3BpZGF0YSkpOworCS8qIGdldCBfQURSIGluZm8gZm9yIGVhY2ggZGV2aWNlICovCisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZTsKIAotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJCWNvbnRpbnVlOworCQlERUJQUklOVCgiRU5URVI6ICVzIGF0IGNoYW5uZWwjOiAlZCBwb3J0IzogJWRcbiIsCisJCQkgZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIGRyaXZlLT5kbiAmIDEpOwogCisJCS8qIFRCRDogY291bGQgYWxzbyBjaGVjayBBQ1BJIG9iamVjdCBWQUxJRCBiaXRzICovCisJCWRldl9oYW5kbGUgPSBhY3BpX2dldF9jaGlsZChod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwKKwkJCQkJICAgIGRyaXZlLT5kbiAmIDEpOworCisJCURFQlBSSU5UKCJkcml2ZSAlcyBoYW5kbGUgMHglcFxuIiwgZHJpdmUtPm5hbWUsIGRldl9oYW5kbGUpOworCisJCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGRldl9oYW5kbGU7CisJfQorCisJLyogc2VuZCBJREVOVElGWSBmb3IgZWFjaCBkZXZpY2UgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQllcnIgPSB0YXNrZmlsZV9saWJfZ2V0X2lkZW50aWZ5KGRyaXZlLCBkcml2ZS0+YWNwaWRhdGEtPmlkYnVmZik7CiAJCWlmIChlcnIpCiAJCQlERUJQUklOVCgiaWRlbnRpZnkgZGV2aWNlICVzIGZhaWxlZCAoJWQpXG4iLApAQCAtNzM2LDkgKzYyOCw3IEBACiAJaWRlX2FjcGlfZ2V0X3RpbWluZyhod2lmKTsKIAlpZGVfYWNwaV9wdXNoX3RpbWluZyhod2lmKTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQotCQkJLyogRXhlY3V0ZSBBQ1BJIHN0YXJ0dXAgY29kZSAqLwotCQkJaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCmluZGV4IGU5ZDA0MmRiLi42YWRjNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYwpAQCAtMTQ5LDcgKzE0OSwxMCBAQAogCW1lbWNweShycS0+Y21kLCBwYy0+YywgMTIpOwogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUpCiAJCXJxLT5jbWRbMTNdID0gUkVRX0lERVRBUEVfUEMxOwotCWlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxKTsKKworCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7CisKKwllbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKIH0KIAogLyoKQEAgLTI5Nyw2ICszMDAsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9jZF9nZXRfeGZlcmxlbik7CiAKK3ZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTE2ICpiY291bnQsIHU4ICppcmVhc29uKQoreworCWlkZV90YXNrX3QgdGFzazsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8CisJCQlJREVfVEZMQUdfSU5fTlNFQ1Q7CisKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisKKwkqYmNvdW50ID0gKHRhc2sudGYubGJhaCA8PCA4KSB8IHRhc2sudGYubGJhbTsKKwkqaXJlYXNvbiA9IHRhc2sudGYubnNlY3QgJiAzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKKwogLyoKICAqIFRoaXMgaXMgdGhlIHVzdWFsIGludGVycnVwdCBoYW5kbGVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBhIHBhY2tldAogICogY29tbWFuZC4gIFdlIHdpbGwgdHJhbnNmZXIgc29tZSBvZiB0aGUgZGF0YSAoYXMgcmVxdWVzdGVkIGJ5IHRoZSBkcml2ZSkKQEAgLTQ1Niw2ICs0NzQsMjUgQEAKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKK3N0YXRpYyB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJaWRlX3Rhc2tfdCB0YXNrOworCXU4IGRtYSA9IGRyaXZlLT5kbWE7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8CisJCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKKwl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLworCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7CisJdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7CisKKwlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOworCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CisJaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7Cit9CisKIHN0YXRpYyB1OCBpZGVfcmVhZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfdGFza190IHRhc2s7CkBAIC02MjksNyArNjY2LDcgQEAKIAkJCQkJCSAgICAgICA6IFdBSVRfVEFQRV9DTUQ7CiAJfQogCi0JaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCB0Zl9mbGFncywgYmNvdW50LCBkcml2ZS0+ZG1hKTsKKwlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQpOwogCiAJLyogSXNzdWUgdGhlIHBhY2tldCBjb21tYW5kICovCiAJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IGRkZmJlYTQuLjIxNzdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC0yNDIsNyArMjQyLDkgQEAKIAkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZmFpbGVkX2NtZDogMHgleFxuIiwKIAkJCSAgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCi0JaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOworCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7CisKKwllbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKIH0KIAogc3RhdGljIHZvaWQgY2Ryb21fZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM5NTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpAQCAtMCwwICsxLDE5MCBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisKK0RFRklORV9NVVRFWChpZGVfc2V0dGluZ19tdHgpOworCitpZGVfZGV2c2V0X2dldChpb18zMmJpdCwgaW9fMzJiaXQpOworCitzdGF0aWMgaW50IHNldF9pb18zMmJpdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJpdmUtPmlvXzMyYml0ID0gYXJnOworCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7CisKK3N0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOworCitzdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQorCWludCBlcnIgPSAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZXJyID0gMDsKKworCWlmIChhcmcpIHsKKwkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKKwkJCWVyciA9IC1FSU87CisJfSBlbHNlCisJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKKworb3V0OgorCXJldHVybiBlcnI7CisjZWxzZQorCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIC1FUEVSTTsKKyNlbmRpZgorfQorCisvKgorICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKKyAqLworc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKK3sKKwlzd2l0Y2ggKHJlcV9waW8pIHsKKwljYXNlIDIwMjoKKwljYXNlIDIwMToKKwljYXNlIDIwMDoKKwljYXNlIDEwMjoKKwljYXNlIDEwMToKKwljYXNlIDEwMDoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKKwljYXNlIDk6CisJY2FzZSA4OgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7CisJY2FzZSA3OgorCWNhc2UgNjoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgeworCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQl9IGVsc2UKKwkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7CisJfSBlbHNlIHsKKwkJaW50IGtlZXBfZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOworCisJCWlkZV9zZXRfcGlvKGRyaXZlLCBhcmcpOworCisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgeworCQkJaWYgKGtlZXBfZG1hKQorCQkJCWlkZV9kbWFfb24oZHJpdmUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKKworc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOworX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOworCitpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsCisJCSAgICAgICBpbnQgYXJnKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKHNldHRpbmctPmZsYWdzICYgRFNfU1lOQykpCisJCXJldHVybiBzZXR0aW5nLT5zZXQoZHJpdmUsIGFyZyk7CisKKwlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBfX0dGUF9XQUlUKTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOworCXJxLT5jbWRfbGVuID0gNTsKKwlycS0+Y21kWzBdID0gUkVRX0RFVlNFVF9FWEVDOworCSooaW50ICopJnJxLT5jbWRbMV0gPSBhcmc7CisJcnEtPnNwZWNpYWwgPSBzZXR0aW5nLT5zZXQ7CisKKwlpZiAoYmxrX2V4ZWN1dGVfcnEocSwgTlVMTCwgcnEsIDApKQorCQlyZXQgPSBycS0+ZXJyb3JzOworCWJsa19wdXRfcmVxdWVzdChycSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX2RldnNldChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpbnQgZXJyLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCkgPSBycS0+c3BlY2lhbDsKKworCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOworCWlmIChlcnIpCisJCXJxLT5lcnJvcnMgPSBlcnI7CisJZWxzZQorCQllcnIgPSAxOworCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggMDU5YzkwYi4uYTg3OGY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtNDcwLDYgKzQ3MCw2MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV90aW1lb3V0KTsKIAorLyoKKyAqIHVuLWJ1c3kgdGhlIHBvcnQgZXRjLCBhbmQgY2xlYXIgYW55IHBlbmRpbmcgRE1BIHN0YXR1cy4gd2Ugd2FudCB0bworICogcmV0cnkgdGhlIGN1cnJlbnQgcmVxdWVzdCBpbiBwaW8gbW9kZSBpbnN0ZWFkIG9mIHJpc2tpbmcgdG9zc2luZyBpdAorICogYWxsIGF3YXkKKyAqLworaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCWlkZV9zdGFydHN0b3BfdCByZXQgPSBpZGVfc3RvcHBlZDsKKworCS8qCisJICogZW5kIGN1cnJlbnQgZG1hIHRyYW5zYWN0aW9uCisJICovCisKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOworCQkodm9pZClod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKKwkJcmV0ID0gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIHRpbWVvdXQgZXJyb3IiLAorCQkJCWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCByZXRyeVxuIiwgZHJpdmUtPm5hbWUpOworCQlod2lmLT5kbWFfb3BzLT5kbWFfdGltZW91dChkcml2ZSk7CisJfQorCisJLyoKKwkgKiBkaXNhYmxlIGRtYSBmb3Igbm93LCBidXQgcmVtZW1iZXIgdGhhdCB3ZSBkaWQgc28gYmVjYXVzZSBvZgorCSAqIGEgdGltZW91dCAtLSB3ZSdsbCByZWVuYWJsZSBhZnRlciB3ZSBmaW5pc2ggdGhpcyBuZXh0IHJlcXVlc3QKKwkgKiAob3IgcmF0aGVyIHRoZSBmaXJzdCBjaHVuayBvZiBpdCkgaW4gcGlvLgorCSAqLworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RNQV9QSU9fUkVUUlk7CisJZHJpdmUtPnJldHJ5X3BpbysrOworCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOworCisJLyoKKwkgKiB1bi1idXN5IGRyaXZlIGV0YyBhbmQgbWFrZSBzdXJlIHJlcXVlc3QgaXMgc2FuZQorCSAqLworCisJcnEgPSBod2lmLT5ycTsKKwlpZiAoIXJxKQorCQlnb3RvIG91dDsKKworCWh3aWYtPnJxID0gTlVMTDsKKworCXJxLT5lcnJvcnMgPSAwOworCisJaWYgKCFycS0+YmlvKQorCQlnb3RvIG91dDsKKworCXJxLT5zZWN0b3IgPSBycS0+YmlvLT5iaV9zZWN0b3I7CisJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IGJpb19pb3ZlYyhycS0+YmlvKS0+YnZfbGVuID4+IDk7CisJcnEtPmhhcmRfY3VyX3NlY3RvcnMgPSBycS0+Y3VycmVudF9ucl9zZWN0b3JzOworCXJxLT5idWZmZXIgPSBiaW9fZGF0YShycS0+YmlvKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZWguYyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzFiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpAQCAtMCwwICsxLDQyOCBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgICAgdTggc3RhdCwgdTggZXJyKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAorCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKKwkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KKwkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKKwl9IGVsc2UgaWYgKHN0YXQgJiBBVEFfRVJSKSB7CisJCS8qIGVyciBoYXMgZGlmZmVyZW50IG1lYW5pbmcgb24gY2Ryb20gYW5kIHRhcGUgKi8KKwkJaWYgKGVyciA9PSBBVEFfQUJPUlRFRCkgeworCQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQSkgJiYKKwkJCSAgICAvKiBzb21lIG5ld2VyIGRyaXZlcyBkb24ndCBzdXBwb3J0IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TICovCisJCQkgICAgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSA9PSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUykKKwkJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCX0gZWxzZSBpZiAoKGVyciAmIEJBRF9DUkMpID09IEJBRF9DUkMpIHsKKwkJCS8qIFVETUEgY3JjIGVycm9yLCBqdXN0IHJldHJ5IHRoZSBvcGVyYXRpb24gKi8KKwkJCWRyaXZlLT5jcmNfY291bnQrKzsKKwkJfSBlbHNlIGlmIChlcnIgJiAoQVRBX0JCSyB8IEFUQV9VTkMpKSB7CisJCQkvKiByZXRyaWVzIHdvbid0IGhlbHAgdGhlc2UgKi8KKwkJCXJxLT5lcnJvcnMgPSBFUlJPUl9NQVg7CisJCX0gZWxzZSBpZiAoZXJyICYgQVRBX1RSSzBORikgeworCQkJLyogaGVscCBpdCBmaW5kIHRyYWNrIHplcm8gKi8KKwkJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVDQUw7CisJCX0KKwl9CisKKwlpZiAoKHN0YXQgJiBBVEFfRFJRKSAmJiBycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJgorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPKSA9PSAwKSB7CisJCWludCBuc2VjdCA9IGRyaXZlLT5tdWx0X2NvdW50ID8gZHJpdmUtPm11bHRfY291bnQgOiAxOworCisJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIFJFQUQsIG5zZWN0ICogU0VDVE9SX1NJWkUpOworCX0KKworCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCB8fCBibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSkgeworCQlpZGVfa2lsbF9ycShkcml2ZSwgcnEpOworCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQorCisJaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKKwkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKKworCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFU0VUKSA9PSBFUlJPUl9SRVNFVCkgeworCQkrK3JxLT5lcnJvcnM7CisJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOworCX0KKworCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFQ0FMKSA9PSBFUlJPUl9SRUNBTCkKKwkJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSA9IDE7CisKKwkrK3JxLT5lcnJvcnM7CisKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2F0YXBpX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgICAgICB1OCBzdGF0LCB1OCBlcnIpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCisJaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8CisJICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgeworCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLworCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOworCX0gZWxzZSB7CisJCS8qIGFkZCBkZWNvZGluZyBlcnJvciBzdHVmZiAqLworCX0KKworCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCisJCS8qIGZvcmNlIGFuIGFib3J0ICovCisJCWh3aWYtPnRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfSURMRUlNTUVESUFURSk7CisKKwlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVgpIHsKKwkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKKwl9IGVsc2UgeworCQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKKwkJCSsrcnEtPmVycm9yczsKKwkJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOworCQl9CisJCSsrcnEtPmVycm9yczsKKwl9CisKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgX19pZGVfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgdTggc3RhdCwgdTggZXJyKQoreworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCXJldHVybiBpZGVfYXRhX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKKwlyZXR1cm4gaWRlX2F0YXBpX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKK30KKworLyoqCisgKglpZGVfZXJyb3IJLQloYW5kbGUgYW4gZXJyb3Igb24gdGhlIElERQorICoJQGRyaXZlOiBkcml2ZSB0aGUgZXJyb3Igb2NjdXJyZWQgb24KKyAqCUBtc2c6IG1lc3NhZ2UgdG8gcmVwb3J0CisgKglAc3RhdDogc3RhdHVzIGJpdHMKKyAqCisgKglpZGVfZXJyb3IoKSB0YWtlcyBhY3Rpb24gYmFzZWQgb24gdGhlIGVycm9yIHJldHVybmVkIGJ5IHRoZSBkcml2ZS4KKyAqCUZvciBub3JtYWwgSS9PIHRoYXQgbWF5IHdlbGwgaW5jbHVkZSByZXRyaWVzLiBXZSBkZWFsIHdpdGgKKyAqCWJvdGggbmV3LXN0eWxlICh0YXNrZmlsZSkgYW5kIG9sZCBzdHlsZSBjb21tYW5kIGhhbmRsaW5nIGhlcmUuCisgKglJbiB0aGUgY2FzZSBvZiB0YXNrZmlsZSBjb21tYW5kIGhhbmRsaW5nIHRoZXJlIGlzIHdvcmsgbGVmdCB0bworICoJZG8KKyAqLworCitpZGVfc3RhcnRzdG9wX3QgaWRlX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCB1OCBzdGF0KQoreworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwl1OCBlcnI7CisKKwllcnIgPSBpZGVfZHVtcF9zdGF0dXMoZHJpdmUsIG1zZywgc3RhdCk7CisKKwlycSA9IGRyaXZlLT5od2lmLT5ycTsKKwlpZiAocnEgPT0gTlVMTCkKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCisJLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCisJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKKwkJcnEtPmVycm9ycyA9IDE7CisJCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOworCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQorCisJcmV0dXJuIF9faWRlX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9lcnJvcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyKQoreworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKKworCWlmIChycSAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+Y21kWzBdID09IFJFUV9EUklWRV9SRVNFVCkKKwkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIgPyBlcnIgOiAxLCAwKTsKK30KKworLyogbmVlZGVkIGJlbG93ICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MShpZGVfZHJpdmVfdCAqLCBpbnQpOworCisvKgorICogYXRhcGlfcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uCisgKiBldmVyeSA1MG1zIGR1cmluZyBhbiBhdGFwaSBkcml2ZSByZXNldCBvcGVyYXRpb24uICBJZiB0aGUgZHJpdmUgaGFzIG5vdCB5ZXQKKyAqIHJlc3BvbmRlZCwgYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lcgorICogaXMgcmVzdGFydGVkIGZvciBhbm90aGVyIDUwbXMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgYXRhcGlfcmVzZXRfcG9sbGZ1bmMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzdGF0OworCisJU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwl1ZGVsYXkoMTApOworCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCisJaWYgKE9LX1NUQVQoc3RhdCwgMCwgQVRBX0JVU1kpKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogQVRBUEkgcmVzZXQgY29tcGxldGVcbiIsIGRyaXZlLT5uYW1lKTsKKwllbHNlIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKKwkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwKKwkJCQkJTlVMTCk7CisJCQkvKiBjb250aW51ZSBwb2xsaW5nICovCisJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJCX0KKwkJLyogZW5kIG9mIHBvbGxpbmcgKi8KKwkJaHdpZi0+cG9sbGluZyA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEFUQVBJIHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwKKwkJCWRyaXZlLT5uYW1lLCBzdGF0KTsKKwkJLyogZG8gaXQgdGhlIG9sZCBmYXNoaW9uZWQgd2F5ICovCisJCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDEpOworCX0KKwkvKiBkb25lIHBvbGxpbmcgKi8KKwlod2lmLT5wb2xsaW5nID0gMDsKKwlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIDApOworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIHZvaWQgaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihpZGVfaHdpZl90ICpod2lmLCB1OCBlcnIpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmVycl9tYXN0ZXJfdmFsc1tdID0KKwkJeyBOVUxMLCAicGFzc2VkIiwgImZvcm1hdHRlciBkZXZpY2UgZXJyb3IiLAorCQkgICJzZWN0b3IgYnVmZmVyIGVycm9yIiwgIkVDQyBjaXJjdWl0cnkgZXJyb3IiLAorCQkgICJjb250cm9sbGluZyBNUFUgZXJyb3IiIH07CisKKwl1OCBlcnJfbWFzdGVyID0gZXJyICYgMHg3ZjsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0OiBtYXN0ZXI6ICIsIGh3aWYtPm5hbWUpOworCWlmIChlcnJfbWFzdGVyICYmIGVycl9tYXN0ZXIgPCA2KQorCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGVycl9tYXN0ZXJfdmFsc1tlcnJfbWFzdGVyXSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9DT05UICJlcnJvciAoMHglMDJ4PykiLCBlcnIpOworCWlmIChlcnIgJiAweDgwKQorCQlwcmludGsoS0VSTl9DT05UICI7IHNsYXZlOiBmYWlsZWQiKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCisvKgorICogcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKKyAqIGR1cmluZyBhbiBpZGUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmVzIGhhdmUgbm90IHlldCByZXNwb25kZWQsCisgKiBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAorICogZm9yIGFub3RoZXIgNTBtcy4KKyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCByZXNldF9wb2xsZnVuYyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJdTggdG1wOworCWludCBlcnIgPSAwOworCisJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldF9wb2xsKSB7CisJCWVyciA9IHBvcnRfb3BzLT5yZXNldF9wb2xsKGRyaXZlKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaG9zdCByZXNldF9wb2xsIGZhaWx1cmUgZm9yICVzLlxuIiwKKwkJCQlod2lmLT5uYW1lLCBkcml2ZS0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXRtcCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisKKwlpZiAoIU9LX1NUQVQodG1wLCAwLCBBVEFfQlVTWSkpIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKKwkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCQkvKiBjb250aW51ZSBwb2xsaW5nICovCisJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJCX0KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJaHdpZi0+bmFtZSwgdG1wKTsKKwkJZHJpdmUtPmZhaWx1cmVzKys7CisJCWVyciA9IC1FSU87CisJfSBlbHNlICB7CisJCXRtcCA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKKworCQlpZiAodG1wID09IDEpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldDogc3VjY2Vzc1xuIiwgaHdpZi0+bmFtZSk7CisJCQlkcml2ZS0+ZmFpbHVyZXMgPSAwOworCQl9IGVsc2UgeworCQkJaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihod2lmLCB0bXApOworCQkJZHJpdmUtPmZhaWx1cmVzKys7CisJCQllcnIgPSAtRUlPOworCQl9CisJfQorb3V0OgorCWh3aWYtPnBvbGxpbmcgPSAwOwkvKiBkb25lIHBvbGxpbmcgKi8KKwlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIGVycik7CisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgdm9pZCBpZGVfZGlza19wcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWludCBsZWdhY3kgPSAoZHJpdmUtPmlkW0FUQV9JRF9DRlNfRU5BQkxFXzJdICYgMHgwNDAwKSA/IDAgOiAxOworCisJZHJpdmUtPnNwZWNpYWwuYWxsID0gMDsKKwlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeSA9IGxlZ2FjeTsKKwlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlICA9IGxlZ2FjeTsKKworCWRyaXZlLT5tdWx0X2NvdW50ID0gMDsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUEFSS0VEOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDAgJiYKKwkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKQorCQlkcml2ZS0+bXVsdF9yZXEgPSAwOworCisJaWYgKGRyaXZlLT5tdWx0X3JlcSAhPSBkcml2ZS0+bXVsdF9jb3VudCkKKwkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVsdG1vZGUgPSAxOworfQorCitzdGF0aWMgdm9pZCBwcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gZHJpdmUtPmh3aWYtPnBvcnRfb3BzOworCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJaWRlX2Rpc2tfcHJlX3Jlc2V0KGRyaXZlKTsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BPU1RfUkVTRVQ7CisKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpIHsKKwkJaWYgKGRyaXZlLT5jcmNfY291bnQpCisJCQlpZGVfY2hlY2tfZG1hX2NyYyhkcml2ZSk7CisJCWVsc2UKKwkJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKKwl9CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCkgeworCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKSB7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOworCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5wcmVfcmVzZXQpCisJCXBvcnRfb3BzLT5wcmVfcmVzZXQoZHJpdmUpOworCisJaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkICE9IDB4ZmYpCisJCWRyaXZlLT5kZXNpcmVkX3NwZWVkID0gZHJpdmUtPmN1cnJlbnRfc3BlZWQ7CisJZHJpdmUtPmN1cnJlbnRfc3BlZWQgPSAweGZmOworfQorCisvKgorICogZG9fcmVzZXQxKCkgYXR0ZW1wdHMgdG8gcmVjb3ZlciBhIGNvbmZ1c2VkIGRyaXZlIGJ5IHJlc2V0dGluZyBpdC4KKyAqIFVuZm9ydHVuYXRlbHksIHJlc2V0dGluZyBhIGRpc2sgZHJpdmUgYWN0dWFsbHkgcmVzZXRzIGFsbCBkZXZpY2VzIG9uCisgKiB0aGUgc2FtZSBpbnRlcmZhY2UsIHNvIGl0IGNhbiByZWFsbHkgYmUgdGhvdWdodCBvZiBhcyByZXNldHRpbmcgdGhlCisgKiBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gcmVzZXR0aW5nIHRoZSBkcml2ZS4KKyAqCisgKiBBVEFQSSBkZXZpY2VzIGhhdmUgdGhlaXIgb3duIHJlc2V0IG1lY2hhbmlzbSB3aGljaCBhbGxvd3MgdGhlbSB0byBiZQorICogaW5kaXZpZHVhbGx5IHJlc2V0IHdpdGhvdXQgY2xvYmJlcmluZyBvdGhlciBkZXZpY2VzIG9uIHRoZSBzYW1lIGludGVyZmFjZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgSURFIGludGVyZmFjZSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gbGV0CisgKiB1cyBrbm93IHdoZW4gdGhlIHJlc2V0IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQsIHNvIHdlIG11c3QgcG9sbCBmb3IgdGhpcy4KKyAqIEVxdWFsbHkgcG9vciwgdGhvdWdoLCBpcyB0aGUgZmFjdCB0aGF0IHRoaXMgbWF5IGEgdmVyeSBsb25nIHRpbWUgdG8gY29tcGxldGUsCisgKiAodXAgdG8gMzAgc2Vjb25kcyB3b3JzdGNhc2UpLiAgU28sIGluc3RlYWQgb2YgYnVzeS13YWl0aW5nIGhlcmUgZm9yIGl0LAorICogd2Ugc2V0IGEgdGltZXIgdG8gcG9sbCBhdCA1MG1zIGludGVydmFscy4KKyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZG9fbm90X3RyeV9hdGFwaSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wczsKKwlpZGVfZHJpdmVfdCAqdGRyaXZlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRpbWVvdXQ7CisJaW50IGk7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgbXVzdCBub3QgcmVzZXQgd2l0aCBydW5uaW5nIGhhbmRsZXJzICovCisJQlVHX09OKGh3aWYtPmhhbmRsZXIgIT0gTlVMTCk7CisKKwkvKiBGb3IgYW4gQVRBUEkgZGV2aWNlLCBmaXJzdCB0cnkgYW4gQVRBUEkgU1JTVC4gKi8KKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmICFkb19ub3RfdHJ5X2F0YXBpKSB7CisJCXByZV9yZXNldChkcml2ZSk7CisJCVNFTEVDVF9EUklWRShkcml2ZSk7CisJCXVkZWxheSgyMCk7CisJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKKwkJbmRlbGF5KDQwMCk7CisJCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKKwkJaHdpZi0+cG9sbGluZyA9IDE7CisJCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJfQorCisJLyogV2UgbXVzdCBub3QgZGlzdHVyYiBkZXZpY2VzIGluIHRoZSBJREVfREZMQUdfUEFSS0VEIHN0YXRlLiAqLworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBub3c7CisKKwkJcHJlcGFyZV90b193YWl0KCZpZGVfcGFya193cSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJdGltZW91dCA9IGppZmZpZXM7CisJCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIHRkcml2ZSwgaHdpZikgeworCQkJaWYgKCh0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QQVJLRUQpICYmCisJCQkgICAgdGltZV9hZnRlcih0ZHJpdmUtPnNsZWVwLCB0aW1lb3V0KSkKKwkJCQl0aW1lb3V0ID0gdGRyaXZlLT5zbGVlcDsKKwkJfQorCisJCW5vdyA9IGppZmZpZXM7CisJCWlmICh0aW1lX2JlZm9yZV9lcSh0aW1lb3V0LCBub3cpKQorCQkJYnJlYWs7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUodGltZW91dCAtIG5vdyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJfSB3aGlsZSAodGltZW91dCk7CisJZmluaXNoX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCk7CisKKwkvKgorCSAqIEZpcnN0LCByZXNldCBhbnkgZGV2aWNlIHN0YXRlIGRhdGEgd2Ugd2VyZSBtYWludGFpbmluZworCSAqIGZvciBhbnkgb2YgdGhlIGRyaXZlcyBvbiB0aGlzIGludGVyZmFjZS4KKwkgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgdGRyaXZlLCBod2lmKQorCQlwcmVfcmVzZXQodGRyaXZlKTsKKworCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIgPT0gMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgLUVOWElPKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCS8qCisJICogTm90ZSB0aGF0IHdlIGFsc28gc2V0IG5JRU4gd2hpbGUgcmVzZXR0aW5nIHRoZSBkZXZpY2UsCisJICogdG8gbWFzayB1bndhbnRlZCBpbnRlcnJ1cHRzIGZyb20gdGhlIGludGVyZmFjZSBkdXJpbmcgdGhlIHJlc2V0LgorCSAqIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZGVzaWduIG9mIFBDIGhhcmR3YXJlLCB0aGlzIHdpbGwgY2F1c2UgYW4KKwkgKiBpbW1lZGlhdGUgaW50ZXJydXB0IGR1ZSB0byB0aGUgZWRnZSB0cmFuc2l0aW9uIGl0IHByb2R1Y2VzLgorCSAqIFRoaXMgc2luZ2xlIGludGVycnVwdCBnaXZlcyB1cyBhICJmYXN0IHBvbGwiIGZvciBkcml2ZXMgdGhhdAorCSAqIHJlY292ZXIgZnJvbSByZXNldCB2ZXJ5IHF1aWNrbHksIHNhdmluZyB1cyB0aGUgZmlyc3QgNTBtcyB3YWl0IHRpbWUuCisJICoKKwkgKiBUT0RPOiBhZGQgLT5zb2Z0cmVzZXQgbWV0aG9kIGFuZCBzdG9wIGFidXNpbmcgLT5zZXRfaXJxCisJICovCisJLyogc2V0IFNSU1QgYW5kIG5JRU4gKi8KKwl0cF9vcHMtPnNldF9pcnEoaHdpZiwgNCk7CisJLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCisJdWRlbGF5KDEwKTsKKwkvKiBjbGVhciBTUlNULCBsZWF2ZSBuSUVOICh1bmxlc3MgZGV2aWNlIGlzIG9uIHRoZSBxdWlyayBsaXN0KSAqLworCXRwX29wcy0+c2V0X2lycShod2lmLCBkcml2ZS0+cXVpcmtfbGlzdCA9PSAyKTsKKwkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KKwl1ZGVsYXkoMTApOworCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKKwlod2lmLT5wb2xsaW5nID0gMTsKKwlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisKKwkvKgorCSAqIFNvbWUgd2VpcmQgY29udHJvbGxlciBsaWtlIHJlc2V0dGluZyB0aGVtc2VsdmVzIHRvIGEgc3RyYW5nZQorCSAqIHN0YXRlIHdoZW4gdGhlIGRpc2tzIGFyZSByZXNldCB0aGlzIHdheS4gQXQgbGVhc3QsIHRoZSBXaW5ib25kCisJICogNTUzIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0CisJICovCisJcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKwlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0cHJvYykKKwkJcG9ydF9vcHMtPnJlc2V0cHJvYyhkcml2ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGlkZV9zdGFydGVkOworfQorCisvKgorICogaWRlX2RvX3Jlc2V0KCkgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBkcml2ZS9pbnRlcmZhY2UgcmVzZXQgY29kZS4KKyAqLworCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woaWRlX2RvX3Jlc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYyBiL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWI0M2RkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCkBAIC0wLDAgKzEsMzE2IEBACisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworLyoKKyAqCUNvbnZlbnRpb25hbCBQSU8gb3BlcmF0aW9ucyBmb3IgQVRBIGRldmljZXMKKyAqLworCitzdGF0aWMgdTggaWRlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh1OCkgaW5iKHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBpZGVfb3V0Yih1OCB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlvdXRiKHZhbCwgcG9ydCk7Cit9CisKKy8qCisgKglNTUlPIG9wZXJhdGlvbnMsIHR5cGljYWxseSB1c2VkIGZvciBTQVRBIGNvbnRyb2xsZXJzCisgKi8KKworc3RhdGljIHU4IGlkZV9tbV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9tbV9vdXRiKHU4IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopIHBvcnQpOworfQorCit2b2lkIGlkZV9leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlYihjbWQsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOworCWVsc2UKKwkJb3V0YihjbWQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY19jb21tYW5kKTsKKwordTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX3N0YXR1cyk7CisKK3U4IGlkZV9yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOworCit2b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKK3sKKwl1OCBjdGwgPSBBVEFfREVWQ1RMX09CUzsKKworCWlmIChvbiA9PSA0KSB7IC8qIGhhY2sgZm9yIFNSU1QgKi8KKwkJY3RsIHw9IDQ7CisJCW9uICY9IH40OworCX0KKworCWN0bCB8PSBvbiA/IDAgOiAyOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJd3JpdGViKGN0bCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKKwllbHNlCisJCW91dGIoY3RsLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2lycSk7CisKK3ZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKwl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCisJaWYgKG1taW8pCisJCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKKwllbHNlCisJCXRmX291dGIgPSBpZGVfb3V0YjsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCQlISUhJID0gMHhGRjsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgeworCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKKworCQlpZiAobW1pbykKKwkJCXdyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7CisJCWVsc2UKKwkJCW91dHcoZGF0YSwgaW9fcG9ydHMtPmRhdGFfYWRkcik7CisJfQorCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwkJdGZfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCQl0Zl9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKKwkJdGZfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJCXRmX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwkJdGZfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwkJdGZfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJCXRmX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKKwkJdGZfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQorCQl0Zl9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAorCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7CisKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1OCAoKnRmX2luYikodW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKworCWlmIChtbWlvKSB7CisJCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKKwkJdGZfaW5iICA9IGlkZV9tbV9pbmI7CisJfSBlbHNlIHsKKwkJdGZfb3V0YiA9IGlkZV9vdXRiOworCQl0Zl9pbmIgID0gaWRlX2luYjsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCQl1MTYgZGF0YTsKKworCQlpZiAobW1pbykKKwkJCWRhdGEgPSByZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7CisJCWVsc2UKKwkJCWRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7CisKKwkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKKwkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOworCX0KKworCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KKwl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwkJdGYtPmxiYWwgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwkJdGYtPmxiYW0gICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwkJdGYtPmxiYWggICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCQl0Zi0+ZGV2aWNlID0gdGZfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQkJdGYtPmhvYl9mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQkJdGYtPmhvYl9uc2VjdCAgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQkJdGYtPmhvYl9sYmFsICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCQl0Zi0+aG9iX2xiYW0gICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfcmVhZCk7CisKKy8qCisgKiBTb21lIGxvY2FsYnVzIEVJREUgaW50ZXJmYWNlcyByZXF1aXJlIGEgc3BlY2lhbCBhY2Nlc3Mgc2VxdWVuY2UKKyAqIHdoZW4gdXNpbmcgMzItYml0IEkvTyBpbnN0cnVjdGlvbnMgdG8gdHJhbnNmZXIgZGF0YS4gIFdlIGNhbGwgdGhpcworICogdGhlICJ2bGJfc3luYyIgc2VxdWVuY2UsIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHN1Y2Nlc3NpdmUgcmVhZHMKKyAqIG9mIHRoZSBzZWN0b3IgY291bnQgcmVnaXN0ZXIgbG9jYXRpb24sIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAorICogdG8gZW5zdXJlIHRoYXQgdGhlIHJlYWRzIGFsbCBoYXBwZW4gdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkIGF0YV92bGJfc3luYyh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJKHZvaWQpaW5iKHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKKwkodm9pZClpbmIocG9ydCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICpmcm9tKiB0aGUgSURFIGludGVyZmFjZQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIHdpbGwgcm91bmQgdXAgYW55IHJlcXVlc3QgZm9yIGFuIG9kZCBudW1iZXIgb2YgYnl0ZXMsCisgKiBzbyBpZiBhbiBvZGQgbGVuIGlzIHNwZWNpZmllZCwgYmUgc3VyZSB0aGF0IHRoZXJlJ3MgYXQgbGVhc3Qgb25lCisgKiBleHRyYSBieXRlIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlci4KKyAqLwordm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAorCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOworCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCisJbGVuKys7CisKKwlpZiAoaW9fMzJiaXQpIHsKKwkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7CisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQl9CisKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9pbnNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCWVsc2UKKwkJCWluc2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKKwkJCWlmIChtbWlvKQorCQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKKwkJCQkJCSh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQkJZWxzZQorCQkJCWluc3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCQllbHNlCisJCQlpbnN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5wdXRfZGF0YSk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKKyAqLwordm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisKKwlsZW4rKzsKKworCWlmIChpb18zMmJpdCkgeworCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCX0KKworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX291dHNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCWVsc2UKKwkJCW91dHNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkJaWYgKChsZW4gJiAzKSA+PSAyKSB7CisJCQlpZiAobW1pbykKKwkJCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAorCQkJCQkJICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQkJZWxzZQorCQkJCW91dHN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWVsc2UKKwkJCW91dHN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfb3V0cHV0X2RhdGEpOworCitjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBkZWZhdWx0X3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCisJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCisJLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCisKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCBhOWE2YzIwLi4yZTkyNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtMTk2LDcgKzE5Niw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlkZV9lbmRfZHJpdmVfY21kKTsKIAotc3RhdGljIHZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWlmIChycS0+cnFfZGlzaykgewogCQlzdHJ1Y3QgaWRlX2RyaXZlciAqZHJ2OwpAQCAtMjA3LDEzMyArMjA3LDYgQEAKIAkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKIH0KIAotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0LCB1OCBlcnIpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8Ci0JICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgewotCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLwotCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOwotCX0gZWxzZSBpZiAoc3RhdCAmIEFUQV9FUlIpIHsKLQkJLyogZXJyIGhhcyBkaWZmZXJlbnQgbWVhbmluZyBvbiBjZHJvbSBhbmQgdGFwZSAqLwotCQlpZiAoZXJyID09IEFUQV9BQk9SVEVEKSB7Ci0JCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSAmJgotCQkJICAgIC8qIHNvbWUgbmV3ZXIgZHJpdmVzIGRvbid0IHN1cHBvcnQgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMgKi8KLQkJCSAgICBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpID09IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TKQotCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJfSBlbHNlIGlmICgoZXJyICYgQkFEX0NSQykgPT0gQkFEX0NSQykgewotCQkJLyogVURNQSBjcmMgZXJyb3IsIGp1c3QgcmV0cnkgdGhlIG9wZXJhdGlvbiAqLwotCQkJZHJpdmUtPmNyY19jb3VudCsrOwotCQl9IGVsc2UgaWYgKGVyciAmIChBVEFfQkJLIHwgQVRBX1VOQykpIHsKLQkJCS8qIHJldHJpZXMgd29uJ3QgaGVscCB0aGVzZSAqLwotCQkJcnEtPmVycm9ycyA9IEVSUk9SX01BWDsKLQkJfSBlbHNlIGlmIChlcnIgJiBBVEFfVFJLME5GKSB7Ci0JCQkvKiBoZWxwIGl0IGZpbmQgdHJhY2sgemVybyAqLwotCQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRUNBTDsKLQkJfQotCX0KLQotCWlmICgoc3RhdCAmIEFUQV9EUlEpICYmIHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEICYmCi0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8pID09IDApIHsKLQkJaW50IG5zZWN0ID0gZHJpdmUtPm11bHRfY291bnQgPyBkcml2ZS0+bXVsdF9jb3VudCA6IDE7Ci0KLQkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgUkVBRCwgbnNlY3QgKiBTRUNUT1JfU0laRSk7Ci0JfQotCi0JaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYIHx8IGJsa19ub3JldHJ5X3JlcXVlc3QocnEpKSB7Ci0JCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQotCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOwotCi0JaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7Ci0JCSsrcnEtPmVycm9yczsKLQkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7Ci0JfQotCi0JaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVDQUwpID09IEVSUk9SX1JFQ0FMKQotCQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlID0gMTsKLQotCSsrcnEtPmVycm9yczsKLQotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhcGlfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKLQkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7Ci0JCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0JfSBlbHNlIHsKLQkJLyogYWRkIGRlY29kaW5nIGVycm9yIHN0dWZmICovCi0JfQotCi0JaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKLQkJLyogZm9yY2UgYW4gYWJvcnQgKi8KLQkJaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9JRExFSU1NRURJQVRFKTsKLQotCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCkgewotCQlpZGVfa2lsbF9ycShkcml2ZSwgcnEpOwotCX0gZWxzZSB7Ci0JCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFU0VUKSA9PSBFUlJPUl9SRVNFVCkgewotCQkJKytycS0+ZXJyb3JzOwotCQkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7Ci0JCX0KLQkJKytycS0+ZXJyb3JzOwotCX0KLQotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIGlkZV9zdGFydHN0b3BfdAotX19pZGVfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQlyZXR1cm4gaWRlX2F0YV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Ci0JcmV0dXJuIGlkZV9hdGFwaV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Ci19Ci0KLS8qKgotICoJaWRlX2Vycm9yCS0JaGFuZGxlIGFuIGVycm9yIG9uIHRoZSBJREUKLSAqCUBkcml2ZTogZHJpdmUgdGhlIGVycm9yIG9jY3VycmVkIG9uCi0gKglAbXNnOiBtZXNzYWdlIHRvIHJlcG9ydAotICoJQHN0YXQ6IHN0YXR1cyBiaXRzCi0gKgotICoJaWRlX2Vycm9yKCkgdGFrZXMgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1cm5lZCBieSB0aGUgZHJpdmUuCi0gKglGb3Igbm9ybWFsIEkvTyB0aGF0IG1heSB3ZWxsIGluY2x1ZGUgcmV0cmllcy4gV2UgZGVhbCB3aXRoCi0gKglib3RoIG5ldy1zdHlsZSAodGFza2ZpbGUpIGFuZCBvbGQgc3R5bGUgY29tbWFuZCBoYW5kbGluZyBoZXJlLgotICoJSW4gdGhlIGNhc2Ugb2YgdGFza2ZpbGUgY29tbWFuZCBoYW5kbGluZyB0aGVyZSBpcyB3b3JrIGxlZnQgdG8KLSAqCWRvCi0gKi8KLSAKLWlkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IgKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCB1OCBzdGF0KQotewotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQl1OCBlcnI7Ci0KLQllcnIgPSBpZGVfZHVtcF9zdGF0dXMoZHJpdmUsIG1zZywgc3RhdCk7Ci0KLQlycSA9IGRyaXZlLT5od2lmLT5ycTsKLQlpZiAocnEgPT0gTlVMTCkKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCi0JLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCi0JaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJcnEtPmVycm9ycyA9IDE7Ci0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JcmV0dXJuIF9faWRlX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9lcnJvcik7Ci0KIHN0YXRpYyB2b2lkIGlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZikKIHsKIAl0Zi0+bnNlY3QgICA9IGRyaXZlLT5zZWN0OwpAQCAtNDkwLDcxICszNjMsMTYgQEAKICAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCi1pbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsCi0JCSAgICAgICBpbnQgYXJnKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghKHNldHRpbmctPmZsYWdzICYgRFNfU1lOQykpCi0JCXJldHVybiBzZXR0aW5nLT5zZXQoZHJpdmUsIGFyZyk7Ci0KLQlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBfX0dGUF9XQUlUKTsKLQlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwotCXJxLT5jbWRfbGVuID0gNTsKLQlycS0+Y21kWzBdID0gUkVRX0RFVlNFVF9FWEVDOwotCSooaW50ICopJnJxLT5jbWRbMV0gPSBhcmc7Ci0JcnEtPnNwZWNpYWwgPSBzZXR0aW5nLT5zZXQ7Ci0KLQlpZiAoYmxrX2V4ZWN1dGVfcnEocSwgTlVMTCwgcnEsIDApKQotCQlyZXQgPSBycS0+ZXJyb3JzOwotCWJsa19wdXRfcmVxdWVzdChycSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RldnNldF9leGVjdXRlKTsKLQogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfc3BlY2lhbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAl1OCBjbWQgPSBycS0+Y21kWzBdOwogCi0JaWYgKGNtZCA9PSBSRVFfUEFSS19IRUFEUyB8fCBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUykgewotCQlpZGVfdGFza190IHRhc2s7Ci0JCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7Ci0KLQkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCQlpZiAoY21kID09IFJFUV9QQVJLX0hFQURTKSB7Ci0JCQlkcml2ZS0+c2xlZXAgPSAqKHVuc2lnbmVkIGxvbmcgKilycS0+c3BlY2lhbDsKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1NMRUVQSU5HOwotCQkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7Ci0JCQl0Zi0+ZmVhdHVyZSA9IDB4NDQ7Ci0JCQl0Zi0+bGJhbCA9IDB4NGM7Ci0JCQl0Zi0+bGJhbSA9IDB4NGU7Ci0JCQl0Zi0+bGJhaCA9IDB4NTU7Ci0JCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKLQkJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLwotCQkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0NIS19QT1dFUjsKLQotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JCXRhc2sucnEgPSBycTsKLQkJZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOwotCQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKLQl9Ci0KIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUkVRX1BBUktfSEVBRFM6CisJY2FzZSBSRVFfVU5QQVJLX0hFQURTOgorCQlyZXR1cm4gaWRlX2RvX3BhcmtfdW5wYXJrKGRyaXZlLCBycSk7CiAJY2FzZSBSRVFfREVWU0VUX0VYRUM6Ci0JewotCQlpbnQgZXJyLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCkgPSBycS0+c3BlY2lhbDsKLQotCQllcnIgPSBzZXRmdW5jKGRyaXZlLCAqKGludCAqKSZycS0+Y21kWzFdKTsKLQkJaWYgKGVycikKLQkJCXJxLT5lcnJvcnMgPSBlcnI7Ci0JCWVsc2UKLQkJCWVyciA9IDE7Ci0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KKwkJcmV0dXJuIGlkZV9kb19kZXZzZXQoZHJpdmUsIHJxKTsKIAljYXNlIFJFUV9EUklWRV9SRVNFVDoKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJZGVmYXVsdDoKQEAgLTgyMCw2MyArNjM4LDYgQEAKIAkJYmxrX3BsdWdfZGV2aWNlKHEpOwogfQogCi0vKgotICogdW4tYnVzeSB0aGUgcG9ydCBldGMsIGFuZCBjbGVhciBhbnkgcGVuZGluZyBETUEgc3RhdHVzLiB3ZSB3YW50IHRvCi0gKiByZXRyeSB0aGUgY3VycmVudCByZXF1ZXN0IGluIHBpbyBtb2RlIGluc3RlYWQgb2Ygcmlza2luZyB0b3NzaW5nIGl0Ci0gKiBhbGwgYXdheQotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWlkZV9zdGFydHN0b3BfdCByZXQgPSBpZGVfc3RvcHBlZDsKLQotCS8qCi0JICogZW5kIGN1cnJlbnQgZG1hIHRyYW5zYWN0aW9uCi0JICovCi0KLQlpZiAoZXJyb3IgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOwotCQkodm9pZClod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKLQkJcmV0ID0gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIHRpbWVvdXQgZXJyb3IiLAotCQkJCWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCByZXRyeVxuIiwgZHJpdmUtPm5hbWUpOwotCQlod2lmLT5kbWFfb3BzLT5kbWFfdGltZW91dChkcml2ZSk7Ci0JfQotCi0JLyoKLQkgKiBkaXNhYmxlIGRtYSBmb3Igbm93LCBidXQgcmVtZW1iZXIgdGhhdCB3ZSBkaWQgc28gYmVjYXVzZSBvZgotCSAqIGEgdGltZW91dCAtLSB3ZSdsbCByZWVuYWJsZSBhZnRlciB3ZSBmaW5pc2ggdGhpcyBuZXh0IHJlcXVlc3QKLQkgKiAob3IgcmF0aGVyIHRoZSBmaXJzdCBjaHVuayBvZiBpdCkgaW4gcGlvLgotCSAqLwotCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RNQV9QSU9fUkVUUlk7Ci0JZHJpdmUtPnJldHJ5X3BpbysrOwotCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCi0JLyoKLQkgKiB1bi1idXN5IGRyaXZlIGV0YyBhbmQgbWFrZSBzdXJlIHJlcXVlc3QgaXMgc2FuZQotCSAqLwotCi0JcnEgPSBod2lmLT5ycTsKLQlpZiAoIXJxKQotCQlnb3RvIG91dDsKLQotCWh3aWYtPnJxID0gTlVMTDsKLQotCXJxLT5lcnJvcnMgPSAwOwotCi0JaWYgKCFycS0+YmlvKQotCQlnb3RvIG91dDsKLQotCXJxLT5zZWN0b3IgPSBycS0+YmlvLT5iaV9zZWN0b3I7Ci0JcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IGJpb19pb3ZlYyhycS0+YmlvKS0+YnZfbGVuID4+IDk7Ci0JcnEtPmhhcmRfY3VyX3NlY3RvcnMgPSBycS0+Y3VycmVudF9ucl9zZWN0b3JzOwotCXJxLT5idWZmZXIgPSBiaW9fZGF0YShycS0+YmlvKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBpZGVfcGx1Z19kZXZpY2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwpAQCAtODg4LDYgKzY0OSwyOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IGRyaXZlX2lzX3JlYWR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggc3RhdCA9IDA7CisKKwlpZiAoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkKKwkJcmV0dXJuIGh3aWYtPmRtYV9vcHMtPmRtYV90ZXN0X2lycShkcml2ZSk7CisKKwlpZiAoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIgJiYKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQlJPS0VOX0FMVFNUQVRVUykgPT0gMCkKKwkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9hbHRzdGF0dXMoaHdpZik7CisJZWxzZQorCQkvKiBOb3RlOiB0aGlzIG1heSBjbGVhciBhIHBlbmRpbmcgSVJRISEgKi8KKwkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisKKwlpZiAoc3RhdCAmIEFUQV9CVVNZKQorCQkvKiBkcml2ZSBidXN5OiBkZWZpbml0ZWx5IG5vdCBpbnRlcnJ1cHRpbmcgKi8KKwkJcmV0dXJuIDA7CisKKwkvKiBkcml2ZSByZWFkeTogKm1pZ2h0KiBiZSBpbnRlcnJ1cHRpbmcgKi8KKwlyZXR1cm4gMTsKK30KKwogLyoqCiAgKglpZGVfdGltZXJfZXhwaXJ5CS0JaGFuZGxlIGxhY2sgb2YgYW4gSURFIGludGVycnVwdAogICoJQGRhdGE6IHRpbWVyIGNhbGxiYWNrIG1hZ2ljIChod2lmKQpAQCAtMTE2NCw1NCArOTQ4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnRyKTsKIAotLyoqCi0gKglpZGVfZG9fZHJpdmVfY21kCS0JaXNzdWUgSURFIHNwZWNpYWwgY29tbWFuZAotICoJQGRyaXZlOiBkZXZpY2UgdG8gaXNzdWUgY29tbWFuZAotICoJQHJxOiByZXF1ZXN0IHRvIGlzc3VlCi0gKgotICoJVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYSBzcGVjaWFsIElERSBkZXZpY2UgcmVxdWVzdAotICoJb250byB0aGUgcmVxdWVzdCBxdWV1ZS4KLSAqCi0gKgl0aGUgcnEgaXMgcXVldWVkIGF0IHRoZSBoZWFkIG9mIHRoZSByZXF1ZXN0IHF1ZXVlLCBkaXNwbGFjaW5nCi0gKgl0aGUgY3VycmVudGx5LWJlaW5nLXByb2Nlc3NlZCByZXF1ZXN0IGFuZCB0aGlzIGZ1bmN0aW9uCi0gKglyZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIG5ldyBycSB0byBiZQotICoJY29tcGxldGVkLiAgVGhpcyBpcyBWRVJZIERBTkdFUk9VUywgYW5kIGlzIGludGVuZGVkIGZvcgotICoJY2FyZWZ1bCB1c2UgYnkgdGhlIEFUQVBJIHRhcGUvY2Ryb20gZHJpdmVyIGNvZGUuCi0gKi8KLQotdm9pZCBpZGVfZG9fZHJpdmVfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChpZGVfZG9fZHJpdmVfY21kKTsKLQotdm9pZCBpZGVfcGt0Y21kX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1MzIgdGZfZmxhZ3MsIHUxNiBiY291bnQsIHU4IGRtYSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0xCQUggfCBJREVfVEZMQUdfT1VUX0xCQU0gfAotCQkJSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgdGZfZmxhZ3M7Ci0JdGFzay50Zi5mZWF0dXJlID0gZG1hOwkJLyogVXNlIFBJTy9ETUEgKi8KLQl0YXNrLnRmLmxiYW0gICAgPSBiY291bnQgJiAweGZmOwotCXRhc2sudGYubGJhaCAgICA9IChiY291bnQgPj4gOCkgJiAweGZmOwotCi0JaWRlX3RmX2R1bXAoZHJpdmUtPm5hbWUsICZ0YXNrLnRmKTsKLQlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7Ci0JU0VMRUNUX01BU0soZHJpdmUsIDApOwotCWh3aWYtPnRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcGt0Y21kX3RmX2xvYWQpOwotCiB2b2lkIGlkZV9wYWRfdHJhbnNmZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgd3JpdGUsIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggYjE4OTJiZC4uMzE3YzVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC0yNywzNSArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLS8qCi0gKglDb252ZW50aW9uYWwgUElPIG9wZXJhdGlvbnMgZm9yIEFUQSBkZXZpY2VzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9pbmIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlyZXR1cm4gKHU4KSBpbmIocG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9vdXRiICh1OCB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlvdXRiKHZhbCwgcG9ydCk7Ci19Ci0KLS8qCi0gKglNTUlPIG9wZXJhdGlvbnMsIHR5cGljYWxseSB1c2VkIGZvciBTQVRBIGNvbnRyb2xsZXJzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9tbV9pbmIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlyZXR1cm4gKHU4KSByZWFkYigodm9pZCBfX2lvbWVtICopIHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfbW1fb3V0YiAodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci19Ci0KLXZvaWQgU0VMRUNUX0RSSVZFIChpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIFNFTEVDVF9EUklWRShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CkBAIC03OCwyNzcgKzUwLDYgQEAKIAkJcG9ydF9vcHMtPm1hc2twcm9jKGRyaXZlLCBtYXNrKTsKIH0KIAotdm9pZCBpZGVfZXhlY19jb21tYW5kKGlkZV9od2lmX3QgKmh3aWYsIHU4IGNtZCkKLXsKLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQl3cml0ZWIoY21kLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKLQllbHNlCi0JCW91dGIoY21kLCBod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2V4ZWNfY29tbWFuZCk7Ci0KLXU4IGlkZV9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQotewotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOwotCWVsc2UKLQkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9zdGF0dXMpOwotCi11OCBpZGVfcmVhZF9hbHRzdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLQllbHNlCi0JCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYWx0c3RhdHVzKTsKLQotdm9pZCBpZGVfc2V0X2lycShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pCi17Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXdyaXRlYihjdGwsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci0JZWxzZQotCQlvdXRiKGN0bCwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9pcnEpOwotCi12b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0Jdm9pZCAoKnRmX291dGIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0JdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKLQotCWlmIChtbWlvKQotCQl0Zl9vdXRiID0gaWRlX21tX291dGI7Ci0JZWxzZQotCQl0Zl9vdXRiID0gaWRlX291dGI7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKLQkJSElISSA9IDB4RkY7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpIHsKLQkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7Ci0KLQkJaWYgKG1taW8pCi0JCQl3cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCQllbHNlCi0JCQlvdXR3KGRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCX0KLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCi0JCXRmX291dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKLQkJdGZfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKLQkJdGZfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCi0JCXRmX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQotCQl0Zl9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCi0JCXRmX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCi0JCXRmX291dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQotCQl0Zl9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCi0JCXRmX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKLQkJdGZfb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKLQkJdGZfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKLQkJCSBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX2xvYWQpOwotCi12b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0Jdm9pZCAoKnRmX291dGIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0JdTggKCp0Zl9pbmIpKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0KLQlpZiAobW1pbykgewotCQl0Zl9vdXRiID0gaWRlX21tX291dGI7Ci0JCXRmX2luYiAgPSBpZGVfbW1faW5iOwotCX0gZWxzZSB7Ci0JCXRmX291dGIgPSBpZGVfb3V0YjsKLQkJdGZfaW5iICA9IGlkZV9pbmI7Ci0JfQotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKLQkJdTE2IGRhdGE7Ci0KLQkJaWYgKG1taW8pCi0JCQlkYXRhID0gcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCQllbHNlCi0JCQlkYXRhID0gaW53KGlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCi0JCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7Ci0JCXRmLT5ob2JfZGF0YSA9IChkYXRhID4+IDgpICYgMHhmZjsKLQl9Ci0KLQkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCi0JdGZfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKLQkJdGYtPm5zZWN0ICA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCi0JCXRmLT5sYmFsICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCi0JCXRmLT5sYmFtICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCi0JCXRmLT5sYmFoICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKLQkJdGYtPmRldmljZSA9IHRmX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7Ci0JCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwotCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKLQkJCXRmLT5ob2JfZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKLQkJCXRmLT5ob2JfbnNlY3QgICA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKLQkJCXRmLT5ob2JfbGJhbCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQotCQkJdGYtPmhvYl9sYmFtICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCi0JCQl0Zi0+aG9iX2xiYWggICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX3JlYWQpOwotCi0vKgotICogU29tZSBsb2NhbGJ1cyBFSURFIGludGVyZmFjZXMgcmVxdWlyZSBhIHNwZWNpYWwgYWNjZXNzIHNlcXVlbmNlCi0gKiB3aGVuIHVzaW5nIDMyLWJpdCBJL08gaW5zdHJ1Y3Rpb25zIHRvIHRyYW5zZmVyIGRhdGEuICBXZSBjYWxsIHRoaXMKLSAqIHRoZSAidmxiX3N5bmMiIHNlcXVlbmNlLCB3aGljaCBjb25zaXN0cyBvZiB0aHJlZSBzdWNjZXNzaXZlIHJlYWRzCi0gKiBvZiB0aGUgc2VjdG9yIGNvdW50IHJlZ2lzdGVyIGxvY2F0aW9uLCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKLSAqIHRvIGVuc3VyZSB0aGF0IHRoZSByZWFkcyBhbGwgaGFwcGVuIHRvZ2V0aGVyLgotICovCi1zdGF0aWMgdm9pZCBhdGFfdmxiX3N5bmModW5zaWduZWQgbG9uZyBwb3J0KQotewotCSh2b2lkKWluYihwb3J0KTsKLQkodm9pZClpbmIocG9ydCk7Ci0JKHZvaWQpaW5iKHBvcnQpOwotfQotCi0vKgotICogVGhpcyBpcyB1c2VkIGZvciBtb3N0IFBJTyBkYXRhIHRyYW5zZmVycyAqZnJvbSogdGhlIElERSBpbnRlcmZhY2UKLSAqCi0gKiBUaGVzZSByb3V0aW5lcyB3aWxsIHJvdW5kIHVwIGFueSByZXF1ZXN0IGZvciBhbiBvZGQgbnVtYmVyIG9mIGJ5dGVzLAotICogc28gaWYgYW4gb2RkIGxlbiBpcyBzcGVjaWZpZWQsIGJlIHN1cmUgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IG9uZQotICogZXh0cmEgYnl0ZSBhbGxvY2F0ZWQgZm9yIHRoZSBidWZmZXIuCi0gKi8KLXZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKLQkJICAgIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKLQl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQotCWxlbisrOwotCi0JaWYgKGlvXzMyYml0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgewotCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJfQotCi0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1faW5zbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCQllbHNlCi0JCQlpbnNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCi0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJaWYgKChsZW4gJiAzKSA+PSAyKSB7Ci0JCQlpZiAobW1pbykKLQkJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCi0JCQkJCQkodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJCWVsc2UKLQkJCQlpbnN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQkJZWxzZQotCQkJaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lucHV0X2RhdGEpOwotCi0vKgotICogVGhpcyBpcyB1c2VkIGZvciBtb3N0IFBJTyBkYXRhIHRyYW5zZmVycyAqdG8qIHRoZSBJREUgaW50ZXJmYWNlCi0gKi8KLXZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCi0JCSAgICAgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOwotCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCi0JbGVuKys7Ci0KLQlpZiAoaW9fMzJiaXQpIHsKLQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7Ci0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQl9Ci0KLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9vdXRzbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCQllbHNlCi0JCQlvdXRzbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JCWlmICgobGVuICYgMykgPj0gMikgewotCQkJaWYgKG1taW8pCi0JCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKLQkJCQkJCSAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJCWVsc2UKLQkJCQlvdXRzdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCQllbHNlCi0JCQlvdXRzdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX291dHB1dF9kYXRhKTsKLQogdTggaWRlX3JlYWRfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV90YXNrX3QgdGFzazsKQEAgLTM2MiwzNSArNjMsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfZXJyb3IpOwogCi12b2lkIGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIHUxNiAqYmNvdW50LCB1OCAqaXJlYXNvbikKLXsKLQlpZGVfdGFza190IHRhc2s7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkFIIHwgSURFX1RGTEFHX0lOX0xCQU0gfAotCQkJSURFX1RGTEFHX0lOX05TRUNUOwotCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOwotCi0JKmJjb3VudCA9ICh0YXNrLnRmLmxiYWggPDwgOCkgfCB0YXNrLnRmLmxiYW07Ci0JKmlyZWFzb24gPSB0YXNrLnRmLm5zZWN0ICYgMzsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbik7Ci0KLWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzID0gewotCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKLQkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAotCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCi0KLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQotCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAotCi0JLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCi0JLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKLX07Ci0KIHZvaWQgaWRlX2ZpeF9kcml2ZWlkKHUxNiAqaWQpCiB7CiAjaWZuZGVmIF9fTElUVExFX0VORElBTgpAQCAtNDEyLDcgKzg0LDcgQEAKICAqIHJldHVybmVkIGJ5IHRoZSBBVEFfQ01EX0lEX0FUQVtQSV0gY29tbWFuZHMuCiAgKi8KIAotdm9pZCBpZGVfZml4c3RyaW5nICh1OCAqcywgY29uc3QgaW50IGJ5dGVjb3VudCwgY29uc3QgaW50IGJ5dGVzd2FwKQordm9pZCBpZGVfZml4c3RyaW5nKHU4ICpzLCBjb25zdCBpbnQgYnl0ZWNvdW50LCBjb25zdCBpbnQgYnl0ZXN3YXApCiB7CiAJdTggKnAsICplbmQgPSAmc1tieXRlY291bnQgJiB+MV07IC8qIGJ5dGVjb3VudCBtdXN0IGJlIGV2ZW4gKi8KIApAQCAtNDM1LDQ0ICsxMDcsOSBAQAogCXdoaWxlIChwICE9IGVuZCkKIAkJKnArKyA9ICdcMCc7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX2ZpeHN0cmluZyk7CiAKIC8qCi0gKiBOZWVkZWQgZm9yIFBDSSBpcnEgc2hhcmluZwotICovCi1pbnQgZHJpdmVfaXNfcmVhZHkgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7Ci0JdTggc3RhdAkJCT0gMDsKLQotCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQotCQlyZXR1cm4gaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKTsKLQotCS8qCi0JICogV2UgZG8gYSBwYXNzaXZlIHN0YXR1cyB0ZXN0IHVuZGVyIHNoYXJlZCBQQ0kgaW50ZXJydXB0cyBvbgotCSAqIGNhcmRzIHRoYXQgdHJ1bHkgc2hhcmUgdGhlIEFUQSBzaWRlIGludGVycnVwdCwgYnV0IG1heSBhbHNvIHNoYXJlCi0JICogYW4gaW50ZXJydXB0IHdpdGggYW5vdGhlciBwY2kgY2FyZC9kZXZpY2UuICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zCi0JICogYWJvdXQgcG9zc2libGUgaXNhLXBucCBhbmQgcGNpLXBucCBpc3N1ZXMgeWV0LgotCSAqLwotCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkciAmJgotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19CUk9LRU5fQUxUU1RBVFVTKSA9PSAwKQotCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKTsKLQllbHNlCi0JCS8qIE5vdGU6IHRoaXMgbWF5IGNsZWFyIGEgcGVuZGluZyBJUlEhISAqLwotCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmIChzdGF0ICYgQVRBX0JVU1kpCi0JCS8qIGRyaXZlIGJ1c3k6ICBkZWZpbml0ZWx5IG5vdCBpbnRlcnJ1cHRpbmcgKi8KLQkJcmV0dXJuIDA7Ci0KLQkvKiBkcml2ZSByZWFkeTogKm1pZ2h0KiBiZSBpbnRlcnJ1cHRpbmcgKi8KLQlyZXR1cm4gMTsKLX0KLQotRVhQT1JUX1NZTUJPTChkcml2ZV9pc19yZWFkeSk7Ci0KLS8qCiAgKiBUaGlzIHJvdXRpbmUgYnVzeS13YWl0cyBmb3IgdGhlIGRyaXZlIHN0YXR1cyB0byBiZSBub3QgImJ1c3kiLgogICogSXQgdGhlbiBjaGVja3MgdGhlIHN0YXR1cyBmb3IgYWxsIG9mIHRoZSAiZ29vZCIgYml0cyBhbmQgbm9uZQogICogb2YgdGhlICJiYWQiIGJpdHMsIGFuZCBpZiBhbGwgaXMgb2theSBpdCByZXR1cm5zIDAuICBBbGwgb3RoZXIKQEAgLTQ4Myw3ICsxMjAsOCBAQAogICogc2V0dGluZyBhIHRpbWVyIHRvIHdha2UgdXAgYXQgaGFsZiBzZWNvbmQgaW50ZXJ2YWxzIHRoZXJlYWZ0ZXIsCiAgKiB1bnRpbCB0aW1lb3V0IGlzIGFjaGlldmVkLCBiZWZvcmUgdGltaW5nIG91dC4KICAqLwotc3RhdGljIGludCBfX2lkZV93YWl0X3N0YXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdTggKnJzdGF0KQorc3RhdGljIGludCBfX2lkZV93YWl0X3N0YXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsCisJCQkgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHU4ICpyc3RhdCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKQEAgLTU0MSw3ICsxNzksOCBAQAogICogVGhlIGNhbGxlciBzaG91bGQgcmV0dXJuIHRoZSB1cGRhdGVkIHZhbHVlIG9mICJzdGFydHN0b3AiIGluIHRoaXMgY2FzZSwKICAqICJzdGFydHN0b3AiIGlzIHVuY2hhbmdlZCB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuCiAgKi8KLWludCBpZGVfd2FpdF9zdGF0KGlkZV9zdGFydHN0b3BfdCAqc3RhcnRzdG9wLCBpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoraW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICpzdGFydHN0b3AsIGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwKKwkJICB1OCBiYWQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKIAlpbnQgZXJyOwogCXU4IHN0YXQ7CkBAIC01NjEsNyArMjAwLDYgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX3dhaXRfc3RhdCk7CiAKIC8qKgpAQCAtNTgyLDcgKzIyMCw2IEBACiAJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2luX2RyaXZlX2xpc3QpOwogCiAvKgpAQCAtNjA3LDcgKzI0NCw3IEBACiAgKiAgQWxsIGhvc3RzIHRoYXQgdXNlIHRoZSA4MGMgcmliYm9uIG11c3QgdXNlIQogICogIFRoZSBuYW1lIGlzIGRlcml2ZWQgZnJvbSB1cHBlciBieXRlIG9mIHdvcmQgOTMgYW5kIHRoZSA4MGMgcmliYm9uLgogICovCi11OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3U4IGVpZ2h0eV9uaW50eV90aHJlZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CkBAIC02NTIsNDcgKzI4OSwxOSBAQAogCiBpbnQgaWRlX2RyaXZlaWRfdXBkYXRlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAl1MTYgKmlkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTggc3RhdDsKKwlpbnQgcmM7CiAKLQkvKgotCSAqIFJlLXJlYWQgZHJpdmUtPmlkIGZvciBwb3NzaWJsZSBETUEgbW9kZQotCSAqIGNoYW5nZSAoY29waWVkIGZyb20gaWRlLXByb2JlLmMpCi0JICovCisJaWQgPSBrbWFsbG9jKFNFQ1RPUl9TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoaWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7Ci0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwotCW1zbGVlcCg1MCk7Ci0JdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9JRF9BVEEpOwotCi0JaWYgKGlkZV9idXN5X3NsZWVwKGh3aWYsIFdBSVRfV09SU1RDQVNFLCAxKSkgewotCQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCW1zbGVlcCg1MCk7CS8qIHdhaXQgZm9yIElSUSBhbmQgQVRBX0RSUSAqLwotCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIEFUQV9EUlEsIEJBRF9SX1NUQVQpKSB7Ci0JCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQkJcHJpbnRrKCIlczogQ0hFQ0sgZm9yIGdvb2QgU1RBVFVTXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIEFUQV9DTURfSURfQVRBLCBpZCk7CiAJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCWlkID0ga21hbGxvYyhTRUNUT1JfU0laRSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFpZCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQl0cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsIGlkLCBTRUNUT1JfU0laRSk7Ci0JKHZvaWQpdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsJLyogY2xlYXIgZHJpdmUgSVJRICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlpZGVfZml4X2RyaXZlaWQoaWQpOworCisJaWYgKHJjKQorCQlnb3RvIG91dF9lcnI7CiAKIAlkcml2ZS0+aWRbQVRBX0lEX1VETUFfTU9ERVNdICA9IGlkW0FUQV9JRF9VRE1BX01PREVTXTsKIAlkcml2ZS0+aWRbQVRBX0lEX01XRE1BX01PREVTXSA9IGlkW0FUQV9JRF9NV0RNQV9NT0RFU107CkBAIC03MDUsNiArMzE0LDEyIEBACiAJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKIAogCXJldHVybiAxOworb3V0X2VycjoKKwlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CisJaWYgKHJjID09IDIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBiYWQgc3RhdHVzXG4iLCBkcml2ZS0+bmFtZSwgX19mdW5jX18pOworCWtmcmVlKGlkKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKQEAgLTczMSwxOCArMzQ2LDE1IEBACiAJICogYnV0IGZvciBzb21lIHJlYXNvbiB0aGVzZSBkb24ndCB3b3JrIGF0CiAJICogdGhpcyBwb2ludCAobG9zdCBpbnRlcnJ1cHQpLgogCSAqLwotICAgICAgICAvKgotICAgICAgICAgKiBTZWxlY3QgdGhlIGRyaXZlLCBhbmQgaXNzdWUgdGhlIFNFVEZFQVRVUkVTIGNvbW1hbmQKLSAgICAgICAgICovCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGh3aWYtPmlycSk7Ci0JCisKIAkvKgogCSAqCUZJWE1FOiB3ZSByYWNlIGFnYWluc3QgdGhlIHJ1bm5pbmcgSVJRIGhlcmUgaWYKIAkgKgl0aGlzIGlzIGNhbGxlZCBmcm9tIG5vbiBJUlEgY29udGV4dC4gSWYgd2UgdXNlCiAJICoJZGlzYWJsZV9pcnEoKSB3ZSBoYW5nIG9uIHRoZSBlcnJvciBwYXRoLiBXb3JrCiAJICoJaXMgbmVlZGVkLgogCSAqLwotCSAKKwlkaXNhYmxlX2lycV9ub3N5bmMoaHdpZi0+aXJxKTsKKwogCXVkZWxheSgxKTsKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKQEAgLTgxMiw4ICs0MjQsOCBAQAogICoKICAqIFNlZSBhbHNvIGlkZV9leGVjdXRlX2NvbW1hbmQKICAqLwotc3RhdGljIHZvaWQgX19pZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKLQkJICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQordm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCkBAIC04MzUsOSArNDQ3LDggQEAKIAlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX3NldF9oYW5kbGVyKTsKLSAKKwogLyoqCiAgKglpZGVfZXhlY3V0ZV9jb21tYW5kCS0JZXhlY3V0ZSBhbiBJREUgY29tbWFuZAogICoJQGRyaXZlOiBJREUgZHJpdmUgdG8gaXNzdWUgdGhlIGNvbW1hbmQgYWdhaW5zdApAQCAtODQ3LDcgKzQ1OCw3IEBACiAgKglAZXhwaXJ5OiAgaGFuZGxlciB0byBydW4gb24gdGltZW91dAogICoKICAqCUhlbHBlciBmdW5jdGlvbiB0byBpc3N1ZSBhbiBJREUgY29tbWFuZC4gVGhpcyBoYW5kbGVzIHRoZQotICoJYXRvbWljaXR5IHJlcXVpcmVtZW50cywgY29tbWFuZCB0aW1pbmcgYW5kIGVuc3VyZXMgdGhhdCB0aGUgCisgKglhdG9taWNpdHkgcmVxdWlyZW1lbnRzLCBjb21tYW5kIHRpbWluZyBhbmQgZW5zdXJlcyB0aGF0IHRoZQogICoJaGFuZGxlciBhbmQgSVJRIHNldHVwIGRvIG5vdCByYWNlLiBBbGwgSURFIGNvbW1hbmQga2ljayBvZmYKICAqCXNob3VsZCBnbyB2aWEgdGhpcyBmdW5jdGlvbiBvciBkbyBlcXVpdmFsZW50IGxvY2tpbmcuCiAgKi8KQEAgLTg4NCwzMDEgKzQ5NSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY3V0ZV9wa3RfY21kKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnIpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCi0JaWYgKHJxICYmIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpICYmIHJxLT5jbWRbMF0gPT0gUkVRX0RSSVZFX1JFU0VUKQotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciA/IGVyciA6IDEsIDApOwotfQotCi0vKiBuZWVkZWQgYmVsb3cgKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxIChpZGVfZHJpdmVfdCAqLCBpbnQpOwotCi0vKgotICogYXRhcGlfcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKLSAqIGR1cmluZyBhbiBhdGFwaSBkcml2ZSByZXNldCBvcGVyYXRpb24uIElmIHRoZSBkcml2ZSBoYXMgbm90IHlldCByZXNwb25kZWQsCi0gKiBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAotICogZm9yIGFub3RoZXIgNTBtcy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBhdGFwaV9yZXNldF9wb2xsZnVuYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBzdGF0OwotCi0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQl1ZGVsYXkgKDEwKTsKLQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmIChPS19TVEFUKHN0YXQsIDAsIEFUQV9CVVNZKSkKLQkJcHJpbnRrKCIlczogQVRBUEkgcmVzZXQgY29tcGxldGVcbiIsIGRyaXZlLT5uYW1lKTsKLQllbHNlIHsKLQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0JCQkvKiBjb250aW51ZSBwb2xsaW5nICovCi0JCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JCX0KLQkJLyogZW5kIG9mIHBvbGxpbmcgKi8KLQkJaHdpZi0+cG9sbGluZyA9IDA7Ci0JCXByaW50aygiJXM6IEFUQVBJIHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwKLQkJCQlkcml2ZS0+bmFtZSwgc3RhdCk7Ci0JCS8qIGRvIGl0IHRoZSBvbGQgZmFzaGlvbmVkIHdheSAqLwotCQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAxKTsKLQl9Ci0JLyogZG9uZSBwb2xsaW5nICovCi0JaHdpZi0+cG9sbGluZyA9IDA7Ci0JaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAwKTsKLQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaWRlX2h3aWZfdCAqaHdpZiwgdTggZXJyKQotewotCXN0YXRpYyBjb25zdCBjaGFyICplcnJfbWFzdGVyX3ZhbHNbXSA9Ci0JCXsgTlVMTCwgInBhc3NlZCIsICJmb3JtYXR0ZXIgZGV2aWNlIGVycm9yIiwKLQkJICAic2VjdG9yIGJ1ZmZlciBlcnJvciIsICJFQ0MgY2lyY3VpdHJ5IGVycm9yIiwKLQkJICAiY29udHJvbGxpbmcgTVBVIGVycm9yIiB9OwotCi0JdTggZXJyX21hc3RlciA9IGVyciAmIDB4N2Y7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNldDogbWFzdGVyOiAiLCBod2lmLT5uYW1lKTsKLQlpZiAoZXJyX21hc3RlciAmJiBlcnJfbWFzdGVyIDwgNikKLQkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBlcnJfbWFzdGVyX3ZhbHNbZXJyX21hc3Rlcl0pOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAiZXJyb3IgKDB4JTAyeD8pIiwgZXJyKTsKLQlpZiAoZXJyICYgMHg4MCkKLQkJcHJpbnRrKEtFUk5fQ09OVCAiOyBzbGF2ZTogZmFpbGVkIik7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLX0KLQotLyoKLSAqIHJlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbiBldmVyeSA1MG1zCi0gKiBkdXJpbmcgYW4gaWRlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlcyBoYXZlIG5vdCB5ZXQgcmVzcG9uZGVkLAotICogYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKLSAqIGZvciBhbm90aGVyIDUwbXMuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcmVzZXRfcG9sbGZ1bmMgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQl1OCB0bXA7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0X3BvbGwpIHsKLQkJZXJyID0gcG9ydF9vcHMtPnJlc2V0X3BvbGwoZHJpdmUpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBob3N0IHJlc2V0X3BvbGwgZmFpbHVyZSBmb3IgJXMuXG4iLAotCQkJCWh3aWYtPm5hbWUsIGRyaXZlLT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JdG1wID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVCh0bXAsIDAsIEFUQV9CVVNZKSkgewotCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KLQkJCXJldHVybiBpZGVfc3RhcnRlZDsKLQkJfQotCQlwcmludGsoIiVzOiByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsIGh3aWYtPm5hbWUsIHRtcCk7Ci0JCWRyaXZlLT5mYWlsdXJlcysrOwotCQllcnIgPSAtRUlPOwotCX0gZWxzZSAgewotCQl0bXAgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7Ci0KLQkJaWYgKHRtcCA9PSAxKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXQ6IHN1Y2Nlc3NcbiIsIGh3aWYtPm5hbWUpOwotCQkJZHJpdmUtPmZhaWx1cmVzID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaHdpZiwgdG1wKTsKLQkJCWRyaXZlLT5mYWlsdXJlcysrOwotCQkJZXJyID0gLUVJTzsKLQkJfQotCX0KLW91dDoKLQlod2lmLT5wb2xsaW5nID0gMDsJLyogZG9uZSBwb2xsaW5nICovCi0JaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCBlcnIpOwotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpbnQgbGVnYWN5ID0gKGRyaXZlLT5pZFtBVEFfSURfQ0ZTX0VOQUJMRV8yXSAmIDB4MDQwMCkgPyAwIDogMTsKLQotCWRyaXZlLT5zcGVjaWFsLmFsbCA9IDA7Ci0JZHJpdmUtPnNwZWNpYWwuYi5zZXRfZ2VvbWV0cnkgPSBsZWdhY3k7Ci0JZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSAgPSBsZWdhY3k7Ci0KLQlkcml2ZS0+bXVsdF9jb3VudCA9IDA7Ci0JZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BBUktFRDsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwICYmCi0JICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkKLQkJZHJpdmUtPm11bHRfcmVxID0gMDsKLQotCWlmIChkcml2ZS0+bXVsdF9yZXEgIT0gZHJpdmUtPm11bHRfY291bnQpCi0JCWRyaXZlLT5zcGVjaWFsLmIuc2V0X211bHRtb2RlID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGRyaXZlLT5od2lmLT5wb3J0X29wczsKLQotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCWlkZV9kaXNrX3ByZV9yZXNldChkcml2ZSk7Ci0JZWxzZQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QT1NUX1JFU0VUOwotCi0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSB7Ci0JCWlmIChkcml2ZS0+Y3JjX2NvdW50KQotCQkJaWRlX2NoZWNrX2RtYV9jcmMoZHJpdmUpOwotCQllbHNlCi0JCQlpZGVfZG1hX29mZihkcml2ZSk7Ci0JfQotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDApIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkgewotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKLQkJCWRyaXZlLT5pb18zMmJpdCA9IDA7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cHJlX3Jlc2V0KQotCQlwb3J0X29wcy0+cHJlX3Jlc2V0KGRyaXZlKTsKLQotCWlmIChkcml2ZS0+Y3VycmVudF9zcGVlZCAhPSAweGZmKQotCQlkcml2ZS0+ZGVzaXJlZF9zcGVlZCA9IGRyaXZlLT5jdXJyZW50X3NwZWVkOwotCWRyaXZlLT5jdXJyZW50X3NwZWVkID0gMHhmZjsKLX0KLQotLyoKLSAqIGRvX3Jlc2V0MSgpIGF0dGVtcHRzIHRvIHJlY292ZXIgYSBjb25mdXNlZCBkcml2ZSBieSByZXNldHRpbmcgaXQuCi0gKiBVbmZvcnR1bmF0ZWx5LCByZXNldHRpbmcgYSBkaXNrIGRyaXZlIGFjdHVhbGx5IHJlc2V0cyBhbGwgZGV2aWNlcyBvbgotICogdGhlIHNhbWUgaW50ZXJmYWNlLCBzbyBpdCBjYW4gcmVhbGx5IGJlIHRob3VnaHQgb2YgYXMgcmVzZXR0aW5nIHRoZQotICogaW50ZXJmYWNlIHJhdGhlciB0aGFuIHJlc2V0dGluZyB0aGUgZHJpdmUuCi0gKgotICogQVRBUEkgZGV2aWNlcyBoYXZlIHRoZWlyIG93biByZXNldCBtZWNoYW5pc20gd2hpY2ggYWxsb3dzIHRoZW0gdG8gYmUKLSAqIGluZGl2aWR1YWxseSByZXNldCB3aXRob3V0IGNsb2JiZXJpbmcgb3RoZXIgZGV2aWNlcyBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuCi0gKgotICogVW5mb3J0dW5hdGVseSwgdGhlIElERSBpbnRlcmZhY2UgZG9lcyBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIGxldAotICogdXMga25vdyB3aGVuIHRoZSByZXNldCBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLCBzbyB3ZSBtdXN0IHBvbGwgZm9yIHRoaXMuCi0gKiBFcXVhbGx5IHBvb3IsIHRob3VnaCwgaXMgdGhlIGZhY3QgdGhhdCB0aGlzIG1heSBhIHZlcnkgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLAotICogKHVwIHRvIDMwIHNlY29uZHMgd29yc3RjYXNlKS4gIFNvLCBpbnN0ZWFkIG9mIGJ1c3ktd2FpdGluZyBoZXJlIGZvciBpdCwKLSAqIHdlIHNldCBhIHRpbWVyIHRvIHBvbGwgYXQgNTBtcyBpbnRlcnZhbHMuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkb19ub3RfdHJ5X2F0YXBpKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzOwotCWlkZV9kcml2ZV90ICp0ZHJpdmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgdGltZW91dDsKLQlpbnQgaTsKLQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBXZSBtdXN0IG5vdCByZXNldCB3aXRoIHJ1bm5pbmcgaGFuZGxlcnMgKi8KLQlCVUdfT04oaHdpZi0+aGFuZGxlciAhPSBOVUxMKTsKLQotCS8qIEZvciBhbiBBVEFQSSBkZXZpY2UsIGZpcnN0IHRyeSBhbiBBVEFQSSBTUlNULiAqLwotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgJiYgIWRvX25vdF90cnlfYXRhcGkpIHsKLQkJcHJlX3Jlc2V0KGRyaXZlKTsKLQkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQkJdWRlbGF5ICgyMCk7Ci0JCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKLQkJbmRlbGF5KDQwMCk7Ci0JCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKLQkJaHdpZi0+cG9sbGluZyA9IDE7Ci0JCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JfQotCi0JLyogV2UgbXVzdCBub3QgZGlzdHVyYiBkZXZpY2VzIGluIHRoZSBJREVfREZMQUdfUEFSS0VEIHN0YXRlLiAqLwotCWRvIHsKLQkJdW5zaWduZWQgbG9uZyBub3c7Ci0KLQkJcHJlcGFyZV90b193YWl0KCZpZGVfcGFya193cSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJdGltZW91dCA9IGppZmZpZXM7Ci0JCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCB0ZHJpdmUsIGh3aWYpIHsKLQkJCWlmICh0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UICYmCi0JCQkgICAgdGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEICYmCi0JCQkgICAgdGltZV9hZnRlcih0ZHJpdmUtPnNsZWVwLCB0aW1lb3V0KSkKLQkJCQl0aW1lb3V0ID0gdGRyaXZlLT5zbGVlcDsKLQkJfQotCi0JCW5vdyA9IGppZmZpZXM7Ci0JCWlmICh0aW1lX2JlZm9yZV9lcSh0aW1lb3V0LCBub3cpKQotCQkJYnJlYWs7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUodGltZW91dCAtIG5vdyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JfSB3aGlsZSAodGltZW91dCk7Ci0JZmluaXNoX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCk7Ci0KLQkvKgotCSAqIEZpcnN0LCByZXNldCBhbnkgZGV2aWNlIHN0YXRlIGRhdGEgd2Ugd2VyZSBtYWludGFpbmluZwotCSAqIGZvciBhbnkgb2YgdGhlIGRyaXZlcyBvbiB0aGlzIGludGVyZmFjZS4KLQkgKi8KLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgdGRyaXZlLCBod2lmKQotCQlwcmVfcmVzZXQodGRyaXZlKTsKLQotCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIgPT0gMCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgLUVOWElPKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCS8qCi0JICogTm90ZSB0aGF0IHdlIGFsc28gc2V0IG5JRU4gd2hpbGUgcmVzZXR0aW5nIHRoZSBkZXZpY2UsCi0JICogdG8gbWFzayB1bndhbnRlZCBpbnRlcnJ1cHRzIGZyb20gdGhlIGludGVyZmFjZSBkdXJpbmcgdGhlIHJlc2V0LgotCSAqIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZGVzaWduIG9mIFBDIGhhcmR3YXJlLCB0aGlzIHdpbGwgY2F1c2UgYW4KLQkgKiBpbW1lZGlhdGUgaW50ZXJydXB0IGR1ZSB0byB0aGUgZWRnZSB0cmFuc2l0aW9uIGl0IHByb2R1Y2VzLgotCSAqIFRoaXMgc2luZ2xlIGludGVycnVwdCBnaXZlcyB1cyBhICJmYXN0IHBvbGwiIGZvciBkcml2ZXMgdGhhdAotCSAqIHJlY292ZXIgZnJvbSByZXNldCB2ZXJ5IHF1aWNrbHksIHNhdmluZyB1cyB0aGUgZmlyc3QgNTBtcyB3YWl0IHRpbWUuCi0JICoKLQkgKiBUT0RPOiBhZGQgLT5zb2Z0cmVzZXQgbWV0aG9kIGFuZCBzdG9wIGFidXNpbmcgLT5zZXRfaXJxCi0JICovCi0JLyogc2V0IFNSU1QgYW5kIG5JRU4gKi8KLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgNCk7Ci0JLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCi0JdWRlbGF5KDEwKTsKLQkvKiBjbGVhciBTUlNULCBsZWF2ZSBuSUVOICh1bmxlc3MgZGV2aWNlIGlzIG9uIHRoZSBxdWlyayBsaXN0KSAqLwotCXRwX29wcy0+c2V0X2lycShod2lmLCBkcml2ZS0+cXVpcmtfbGlzdCA9PSAyKTsKLQkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KLQl1ZGVsYXkoMTApOwotCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKLQlod2lmLT5wb2xsaW5nID0gMTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0KLQkvKgotCSAqIFNvbWUgd2VpcmQgY29udHJvbGxlciBsaWtlIHJlc2V0dGluZyB0aGVtc2VsdmVzIHRvIGEgc3RyYW5nZQotCSAqIHN0YXRlIHdoZW4gdGhlIGRpc2tzIGFyZSByZXNldCB0aGlzIHdheS4gQXQgbGVhc3QsIHRoZSBXaW5ib25kCi0JICogNTUzIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0Ci0JICovCi0JcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0cHJvYykKLQkJcG9ydF9vcHMtPnJlc2V0cHJvYyhkcml2ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGlkZV9zdGFydGVkOwotfQotCi0vKgotICogaWRlX2RvX3Jlc2V0KCkgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBkcml2ZS9pbnRlcmZhY2UgcmVzZXQgY29kZS4KLSAqLwotCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaWRlX2RvX3Jlc2V0KTsKLQogLyoKICAqIGlkZV93YWl0X25vdF9idXN5KCkgd2FpdHMgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGV2aWNlIG9uIHRoZSBod2lmCiAgKiB0byByZXBvcnQgYSBub24tYnVzeSBzdGF0dXMsIHNlZSBjb21tZW50cyBpbiBpZGVfcHJvYmVfcG9ydCgpLgpAQCAtMTE4Nyw3ICs1MDMsNyBAQAogewogCXU4IHN0YXQgPSAwOwogCi0Jd2hpbGUodGltZW91dC0tKSB7CisJd2hpbGUgKHRpbWVvdXQtLSkgewogCQkvKgogCQkgKiBUdXJuIHRoaXMgaW50byBhIHNjaGVkdWxlKCkgc2xlZXAgb25jZSBJJ20gc3VyZQogCQkgKiBhYm91dCBsb2NraW5nIGlzc3VlcyAoMi41IHdvcmsgPykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKaW5kZXggMDk1MjZhMC4uZjZjNjgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwpAQCAtNSwxNjMgKzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqdWRtYV9zdHJbXSA9Ci0JIHsgIlVETUEvMTYiLCAiVURNQS8yNSIsICAiVURNQS8zMyIsICAiVURNQS80NCIsCi0JICAgIlVETUEvNjYiLCAiVURNQS8xMDAiLCAiVURNQS8xMzMiLCAiVURNQTciIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqbXdkbWFfc3RyW10gPQotCXsgIk1XRE1BMCIsICJNV0RNQTEiLCAiTVdETUEyIiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKnN3ZG1hX3N0cltdID0KLQl7ICJTV0RNQTAiLCAiU1dETUExIiwgIlNXRE1BMiIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICpwaW9fc3RyW10gPQotCXsgIlBJTzAiLCAiUElPMSIsICJQSU8yIiwgIlBJTzMiLCAiUElPNCIsICJQSU81IiB9OwotCi0vKioKLSAqCWlkZV94ZmVyX3ZlcmJvc2UJLQlyZXR1cm4gSURFIG1vZGUgbmFtZXMKLSAqCUBtb2RlOiB0cmFuc2ZlciBtb2RlCi0gKgotICoJUmV0dXJucyBhIGNvbnN0YW50IHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgb2YgdGhlIG1vZGUKLSAqCXJlcXVlc3RlZC4KLSAqLwotCi1jb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4IG1vZGUpCi17Ci0JY29uc3QgY2hhciAqczsKLQl1OCBpID0gbW9kZSAmIDB4ZjsKLQotCWlmIChtb2RlID49IFhGRVJfVURNQV8wICYmIG1vZGUgPD0gWEZFUl9VRE1BXzcpCi0JCXMgPSB1ZG1hX3N0cltpXTsKLQllbHNlIGlmIChtb2RlID49IFhGRVJfTVdfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX01XX0RNQV8yKQotCQlzID0gbXdkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9TV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfU1dfRE1BXzIpCi0JCXMgPSBzd2RtYV9zdHJbaV07Ci0JZWxzZSBpZiAobW9kZSA+PSBYRkVSX1BJT18wICYmIG1vZGUgPD0gWEZFUl9QSU9fNSkKLQkJcyA9IHBpb19zdHJbaSAmIDB4N107Ci0JZWxzZSBpZiAobW9kZSA9PSBYRkVSX1BJT19TTE9XKQotCQlzID0gIlBJTyBTTE9XIjsKLQllbHNlCi0JCXMgPSAiWEZFUiBFUlJPUiI7Ci0KLQlyZXR1cm4gczsKLX0KLUVYUE9SVF9TWU1CT0woaWRlX3hmZXJfdmVyYm9zZSk7Ci0KLS8qKgotICoJaWRlX3JhdGVfZmlsdGVyCQktCWZpbHRlciB0cmFuc2ZlciBtb2RlCi0gKglAZHJpdmU6IElERSBkZXZpY2UKLSAqCUBzcGVlZDogZGVzaXJlZCBzcGVlZAotICoKLSAqCUdpdmVuIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgbW9kZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zCi0gKgl0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQgYXQgb3IgYmVsb3cgdGhlIHNwZWVkIHJlcXVlc3RlZC4KLSAqCi0gKglUT0RPOiBjaGVjayBkZXZpY2UgUElPIGNhcGFiaWxpdGllcwotICovCi0KLXN0YXRpYyB1OCBpZGVfcmF0ZV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggbW9kZSA9IGlkZV9maW5kX2RtYV9tb2RlKGRyaXZlLCBzcGVlZCk7Ci0KLQlpZiAobW9kZSA9PSAwKSB7Ci0JCWlmIChod2lmLT5waW9fbWFzaykKLQkJCW1vZGUgPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMSArIFhGRVJfUElPXzA7Ci0JCWVsc2UKLQkJCW1vZGUgPSBYRkVSX1BJT180OwotCX0KLQotLyoJcHJpbnRrKCIlczogbW9kZSAweCUwMngsIHNwZWVkIDB4JTAyeFxuIiwgX19mdW5jX18sIG1vZGUsIHNwZWVkKTsgKi8KLQotCXJldHVybiBtaW4oc3BlZWQsIG1vZGUpOwotfQotCi0vKioKLSAqCWlkZV9nZXRfYmVzdF9waW9fbW9kZQktCWdldCBQSU8gbW9kZSBmcm9tIGRyaXZlCi0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbnNpZGVyCi0gKglAbW9kZV93YW50ZWQ6IHByZWZlcnJlZCBtb2RlCi0gKglAbWF4X21vZGU6IGhpZ2hlc3QgYWxsb3dlZCBtb2RlCi0gKgotICoJVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIFBJTyBzZXR0aW5ncyBmb3IgYSBnaXZlbiBkcml2ZSwKLSAqCWJhc2VkIG9uIHRoZSBkcml2ZS0+aWQgaW5mb3JtYXRpb24gYW5kIHRoZSBpZGVfcGlvX2JsYWNrbGlzdFtdLgotICoKLSAqCURyaXZlIFBJTyBtb2RlIGlzIGF1dG8tc2VsZWN0ZWQgaWYgMjU1IGlzIHBhc3NlZCBhcyBtb2RlX3dhbnRlZC4KLSAqCVRoaXMgaXMgdXNlZCBieSBtb3N0IGNoaXBzZXQgc3VwcG9ydCBtb2R1bGVzIHdoZW4gImF1dG8tdHVuaW5nIi4KLSAqLwotCi11OCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlX3dhbnRlZCwgdTggbWF4X21vZGUpCi17Ci0JdTE2ICppZCA9IGRyaXZlLT5pZDsKLQlpbnQgcGlvX21vZGUgPSAtMSwgb3ZlcnJpZGRlbiA9IDA7Ci0KLQlpZiAobW9kZV93YW50ZWQgIT0gMjU1KQotCQlyZXR1cm4gbWluX3QodTgsIG1vZGVfd2FudGVkLCBtYXhfbW9kZSk7Ci0KLQlpZiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BJT19OT19CTEFDS0xJU1QpID09IDApCi0JCXBpb19tb2RlID0gaWRlX3NjYW5fcGlvX2JsYWNrbGlzdCgoY2hhciAqKSZpZFtBVEFfSURfUFJPRF0pOwotCi0JaWYgKHBpb19tb2RlICE9IC0xKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpcyBvbiBQSU8gYmxhY2tsaXN0XG4iLCBkcml2ZS0+bmFtZSk7Ci0JfSBlbHNlIHsKLQkJcGlvX21vZGUgPSBpZFtBVEFfSURfT0xEX1BJT19NT0RFU10gPj4gODsKLQkJaWYgKHBpb19tb2RlID4gMikgewkvKiAyIGlzIG1heGltdW0gYWxsb3dlZCB0UElPIHZhbHVlICovCi0JCQlwaW9fbW9kZSA9IDI7Ci0JCQlvdmVycmlkZGVuID0gMTsKLQkJfQotCi0JCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewkgICAgICAvKiBBVEEyPyAqLwotCQkJaWYgKGF0YV9pZF9oYXNfaW9yZHkoaWQpKSB7Ci0JCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNykgewotCQkJCQlvdmVycmlkZGVuID0gMDsKLQkJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNCkKLQkJCQkJCXBpb19tb2RlID0gNTsKLQkJCQkJZWxzZSBpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiAyKQotCQkJCQkJcGlvX21vZGUgPSA0OwotCQkJCQllbHNlCi0JCQkJCQlwaW9fbW9kZSA9IDM7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKG92ZXJyaWRkZW4pCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogdFBJTyA+IDIsIGFzc3VtaW5nIHRQSU8gPSAyXG4iLAotCQkJCQkgZHJpdmUtPm5hbWUpOwotCX0KLQotCWlmIChwaW9fbW9kZSA+IG1heF9tb2RlKQotCQlwaW9fbW9kZSA9IG1heF9tb2RlOwotCi0JcmV0dXJuIHBpb19tb2RlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2dldF9iZXN0X3Bpb19tb2RlKTsKLQotLyogcmVxX3BpbyA9PSAiMjU1IiBmb3IgYXV0by10dW5lICovCi12b2lkIGlkZV9zZXRfcGlvKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmVxX3BpbykKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQl1OCBob3N0X3BpbywgcGlvOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuOwotCi0JQlVHX09OKGh3aWYtPnBpb19tYXNrID09IDB4MDApOwotCi0JaG9zdF9waW8gPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMTsKLQotCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcmVxX3BpbywgaG9zdF9waW8pOwotCi0JLyoKLQkgKiBUT0RPOgotCSAqIC0gcmVwb3J0IGRldmljZSBtYXggUElPIG1vZGUKLQkgKiAtIGNoZWNrIHJlcV9waW8gIT0gMjU1IGFnYWluc3QgZGV2aWNlIG1heCBQSU8gbW9kZQotCSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaG9zdCBtYXggUElPJWQgd2FudGVkIFBJTyVkJXMgc2VsZWN0ZWQgUElPJWRcbiIsCi0JCQkgIGRyaXZlLT5uYW1lLCBob3N0X3BpbywgcmVxX3BpbywKLQkJCSAgcmVxX3BpbyA9PSAyNTUgPyAiKGF1dG8tdHVuZSkiIDogIiIsIHBpbyk7Ci0KLQkodm9pZClpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfcGlvKTsKLQogLyoqCiAgKglpZGVfdG9nZ2xlX2JvdW5jZQktCWhhbmRsZSBib3VuY2UgYnVmZmVyaW5nCiAgKglAZHJpdmU6IGRyaXZlIHRvIHVwZGF0ZQpAQCAtMTg4LDg5ICszMSw2IEBACiAJCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZHJpdmUtPnF1ZXVlLCBhZGRyKTsKIH0KIAotaW50IGlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCi0JCXJldHVybiAwOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQkvKgotCSAqIFRPRE86IHRlbXBvcmFyeSBoYWNrIGZvciBzb21lIGxlZ2FjeSBob3N0IGRyaXZlcnMgdGhhdCBkaWRuJ3QKLQkgKiBzZXQgdHJhbnNmZXIgbW9kZSBvbiB0aGUgZGV2aWNlIGluIC0+c2V0X3Bpb19tb2RlIG1ldGhvZC4uLgotCSAqLwotCWlmIChwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpIHsKLQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7Ci0JCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKLQkJCXJldHVybiAtMTsKLQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKLQl9Ci19Ci0KLWludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQotCQlyZXR1cm4gMDsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgewotCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCi0JCQlyZXR1cm4gLTE7Ci0JCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKLQkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfZG1hX21vZGUpOwotCi0vKioKLSAqCWlkZV9zZXRfeGZlcl9yYXRlCS0Jc2V0IHRyYW5zZmVyIHJhdGUKLSAqCUBkcml2ZTogZHJpdmUgdG8gc2V0Ci0gKglAcmF0ZTogc3BlZWQgdG8gYXR0ZW1wdCB0byBzZXQKLSAqCi0gKglHZW5lcmFsIGhlbHBlciBmb3Igc2V0dGluZyB0aGUgc3BlZWQgb2YgYW4gSURFIGRldmljZS4gVGhpcwotICoJZnVuY3Rpb24ga25vd3MgYWJvdXQgdXNlciBlbmZvcmNlZCBsaW1pdHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbgotICoJd2hpY2ggLT5zZXRfcGlvX21vZGUvLT5zZXRfZG1hX21vZGUgZG9lcyBub3QuCi0gKi8KLQotaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCB8fAotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCi0JCXJldHVybiAtMTsKLQotCXJhdGUgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHJhdGUpOwotCi0JQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKLQotCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQotCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7Ci0KLQlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGlkZV9kdW1wX29wY29kZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBhcmsuYyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKaW5kZXggYzg3NWE5NS4uZjMwZTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBhcmsuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogCkBAIC02MCw2ICs2MSwzMCBAQAogCXJldHVybjsKIH0KIAoraWRlX3N0YXJ0c3RvcF90IGlkZV9kb19wYXJrX3VucGFyayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay50ZjsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwlpZiAocnEtPmNtZFswXSA9PSBSRVFfUEFSS19IRUFEUykgeworCQlkcml2ZS0+c2xlZXAgPSAqKHVuc2lnbmVkIGxvbmcgKilycS0+c3BlY2lhbDsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7CisJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOworCQl0Zi0+ZmVhdHVyZSA9IDB4NDQ7CisJCXRmLT5sYmFsID0gMHg0YzsKKwkJdGYtPmxiYW0gPSAweDRlOworCQl0Zi0+bGJhaCA9IDB4NTU7CisJCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOworCX0gZWxzZQkJLyogY21kID09IFJFUV9VTlBBUktfSEVBRFMgKi8KKwkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0NIS19QT1dFUjsKKworCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwl0YXNrLnJxID0gcnE7CisJZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOworCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOworfQorCiBzc2l6ZV90IGlkZV9wYXJrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYwppbmRleCBiZGRhZTJiLi42MTExMWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYwpAQCAtMzMsOCArMzMsNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGFsbF9nZW5lcmljX2lkZSwgaWRlX2dlbmVyaWNfYWxsLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWxsX2dlbmVyaWNfaWRlLCAiSURFIGdlbmVyaWMgd2lsbCBjbGFpbSBhbGwgdW5rbm93biBQQ0kgSURFIHN0b3JhZ2UgY29udHJvbGxlcnMuIik7CiAKLSNkZWZpbmUgSURFX0hGTEFHU19VTUMgKElERV9IRkxBR19OT19ETUEgfCBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVMpCi0KICNkZWZpbmUgREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoZXh0cmFfZmxhZ3MpIFwKIAl7IFwKIAkJLm5hbWUJCT0gRFJWX05BTUUsIFwKQEAgLTYxLDcgKzU5LDcgQEAKIAkvKiAgMjogU0FNVVJBSSAvIEhUNjU2NSAvIEhJTlRfSURFICovCiAJREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoMCksCiAJLyogIDM6IFVNODY3M0YgLyBVTTg4ODZBIC8gVU04ODg2QkYgKi8KLQlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdTX1VNQyksCisJREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoSURFX0hGTEFHX05PX0RNQSksCiAJLyogIDQ6IFZJQV9JREUgLyBPUFRJNjIxViAvIFBpY2NvbG8wMTB7MiwzLDV9ICovCiAJREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoSURFX0hGTEFHX05PX0FVVE9ETUEpLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IGVlOGUzZTcuLjk3NDA2NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xODEsMTYgKzE4MSwxNiBAQAogICoJZG9faWRlbnRpZnkJLQlpZGVudGlmeSBhIGRyaXZlCiAgKglAZHJpdmU6IGRyaXZlIHRvIGlkZW50aWZ5IAogICoJQGNtZDogY29tbWFuZCB1c2VkCisgKglAaWQ6IGJ1ZmZlciBmb3IgSURFTlRJRlkgZGF0YQogICoKICAqCUNhbGxlZCB3aGVuIHdlIGhhdmUgaXNzdWVkIGEgZHJpdmUgaWRlbnRpZnkgY29tbWFuZCB0bwogICoJcmVhZCBhbmQgcGFyc2UgdGhlIHJlc3VsdHMuIFRoaXMgZnVuY3Rpb24gaXMgcnVuIHdpdGgKICAqCWludGVycnVwdHMgZGlzYWJsZWQuIAogICovCiAKLXN0YXRpYyB2b2lkIGRvX2lkZW50aWZ5KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQorc3RhdGljIHZvaWQgZG9faWRlbnRpZnkoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQsIHUxNiAqaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJY2hhciAqbSA9IChjaGFyICopJmlkW0FUQV9JRF9QUk9EXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBic3dhcCA9IDE7CkBAIC0yMzMsMTYgKzIzMyw2IEBACiAJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUFJFU0VOVDsKIAlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfREVBRDsKIAotCS8qCi0JICogQ2hlY2sgZm9yIGFuIEFUQVBJIGRldmljZQotCSAqLwotCWlmIChjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkKLQkJaWRlX2NsYXNzaWZ5X2F0YXBpX2Rldihkcml2ZSk7Ci0JZWxzZQotCS8qCi0JICogTm90IGFuIEFUQVBJIGRldmljZTogbG9va3MgbGlrZSBhICJyZWd1bGFyIiBoYXJkIGRpc2sKLQkgKi8KLQkJaWRlX2NsYXNzaWZ5X2F0YV9kZXYoZHJpdmUpOwogCXJldHVybjsKIGVycl9taXNjOgogCWtmcmVlKGlkKTsKQEAgLTI1MCwyMSArMjQwLDE5IEBACiB9CiAKIC8qKgotICoJYWN0dWFsX3RyeV90b19pZGVudGlmeQktCXNlbmQgYXRhL2F0YXBpIGlkZW50aWZ5CisgKglpZGVfZGV2X3JlYWRfaWQJLQlzZW5kIEFUQS9BVEFQSSBJREVOVElGWSBjb21tYW5kCiAgKglAZHJpdmU6IGRyaXZlIHRvIGlkZW50aWZ5CiAgKglAY21kOiBjb21tYW5kIHRvIHVzZQorICoJQGlkOiBidWZmZXIgZm9yIElERU5USUZZIGRhdGEKICAqCi0gKgl0cnlfdG9faWRlbnRpZnkoKSBzZW5kcyBhbiBBVEEoUEkpIElERU5USUZZIHJlcXVlc3QgdG8gYSBkcml2ZQotICoJYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLiAgSXQgYWxzbyBtb25pdG9ycyBpcnFzIHdoaWxlIHRoaXMgaXMKLSAqCWhhcHBlbmluZywgaW4gaG9wZSBvZiBhdXRvbWF0aWNhbGx5IGRldGVybWluaW5nIHdoaWNoIG9uZSBpcwotICoJYmVpbmcgdXNlZCBieSB0aGUgaW50ZXJmYWNlLgorICoJU2VuZHMgYW4gQVRBKFBJKSBJREVOVElGWSByZXF1ZXN0IHRvIGEgZHJpdmUgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLgogICoKICAqCVJldHVybnM6CTAgIGRldmljZSB3YXMgaWRlbnRpZmllZAogICoJCQkxICBkZXZpY2UgdGltZWQtb3V0IChubyByZXNwb25zZSB0byBpZGVudGlmeSByZXF1ZXN0KQogICoJCQkyICBkZXZpY2UgYWJvcnRlZCB0aGUgY29tbWFuZCAocmVmdXNlZCB0byBpZGVudGlmeSBpdHNlbGYpCiAgKi8KIAotc3RhdGljIGludCBhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKK2ludCBpZGVfZGV2X3JlYWRfaWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQsIHUxNiAqaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwpAQCAtMjczLDYgKzI2MSwxMyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1OCBzID0gMCwgYSA9IDA7CiAKKwkvKgorCSAqIERpc2FibGUgZGV2aWNlIElSUS4gIE90aGVyd2lzZSB3ZSdsbCBnZXQgc3B1cmlvdXMgaW50ZXJydXB0cworCSAqIGR1cmluZyB0aGUgaWRlbnRpZnkgcGhhc2UgdGhhdCB0aGUgSVJRIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgorCSAqLworCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCisJCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKKwogCS8qIHRha2UgYSBkZWVwIGJyZWF0aCAqLwogCW1zbGVlcCg1MCk7CiAKQEAgLTMxNyw3ICszMTIsNyBAQAogCiAJaWYgKE9LX1NUQVQocywgQVRBX0RSUSwgQkFEX1JfU1RBVCkpIHsKIAkJLyogZHJpdmUgcmV0dXJuZWQgSUQgKi8KLQkJZG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7CisJCWRvX2lkZW50aWZ5KGRyaXZlLCBjbWQsIGlkKTsKIAkJLyogZHJpdmUgcmVzcG9uZGVkIHdpdGggSUQgKi8KIAkJcmMgPSAwOwogCQkvKiBjbGVhciBkcml2ZSBJUlEgKi8KQEAgLTMyOSw2MyArMzI0LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qKgotICoJdHJ5X3RvX2lkZW50aWZ5CS0JdHJ5IHRvIGlkZW50aWZ5IGEgZHJpdmUKLSAqCUBkcml2ZTogZHJpdmUgdG8gcHJvYmUKLSAqCUBjbWQ6IGNvbW1hbmQgdG8gdXNlCi0gKgotICoJSXNzdWUgdGhlIGlkZW50aWZ5IGNvbW1hbmQgYW5kIHRoZW4gZG8gSVJRIHByb2JpbmcgdG8KLSAqCWNvbXBsZXRlIHRoZSBpZGVudGlmaWNhdGlvbiB3aGVuIG5lZWRlZCBieSBmaW5kaW5nIHRoZQotICoJSVJRIHRoZSBkcml2ZSBpcyBhdHRhY2hlZCB0bwotICovCi0gCi1zdGF0aWMgaW50IHRyeV90b19pZGVudGlmeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JaW50IHJldHZhbDsKLQlpbnQgYXV0b3Byb2JlID0gMDsKLQl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IDA7Ci0KLQkvKgotCSAqIERpc2FibGUgZGV2aWNlIGlycSB1bmxlc3Mgd2UgbmVlZCB0bwotCSAqIHByb2JlIGZvciBpdC4gT3RoZXJ3aXNlIHdlJ2xsIGdldCBzcHVyaW91cwotCSAqIGludGVycnVwdHMgZHVyaW5nIHRoZSBpZGVudGlmeS1waGFzZSB0aGF0Ci0JICogdGhlIGlycSBoYW5kbGVyIGlzbid0IGV4cGVjdGluZy4KLQkgKi8KLQlpZiAoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpIHsKLQkJaWYgKCFod2lmLT5pcnEpIHsKLQkJCWF1dG9wcm9iZSA9IDE7Ci0JCQljb29raWUgPSBwcm9iZV9pcnFfb24oKTsKLQkJfQotCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgYXV0b3Byb2JlKTsKLQl9Ci0KLQlyZXR2YWwgPSBhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOwotCi0JaWYgKGF1dG9wcm9iZSkgewotCQlpbnQgaXJxOwotCi0JCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKLQkJLyogY2xlYXIgZHJpdmUgSVJRICovCi0JCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0JCXVkZWxheSg1KTsKLQkJaXJxID0gcHJvYmVfaXJxX29mZihjb29raWUpOwotCQlpZiAoIWh3aWYtPmlycSkgewotCQkJaWYgKGlycSA+IDApIHsKLQkJCQlod2lmLT5pcnEgPSBpcnE7Ci0JCQl9IGVsc2UgewotCQkJCS8qIE1tbW0uLiBtdWx0aXBsZSBJUlFzLi4KLQkJCQkgKiBkb24ndCBrbm93IHdoaWNoIHdhcyBvdXJzCi0JCQkJICovCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSVJRIHByb2JlIGZhaWxlZCAoMHglbHgpXG4iLAotCQkJCQlkcml2ZS0+bmFtZSwgY29va2llKTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCiBpbnQgaWRlX2J1c3lfc2xlZXAoaWRlX2h3aWZfdCAqaHdpZiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgYWx0c3RhdHVzKQogewogCXU4IHN0YXQ7CkBAIC00NDAsNiArMzc4LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKKwl1MTYgKmlkID0gZHJpdmUtPmlkOwogCWludCByYzsKIAl1OCBwcmVzZW50ID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSwgc3RhdDsKIApAQCAtNDc1LDExICs0MTQsMTAgQEAKIAogCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkgfHwKIAkgICAgcHJlc2VudCB8fCBjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkgewotCQkvKiBzZW5kIGNtZCBhbmQgd2FpdCAqLwotCQlpZiAoKHJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLCBjbWQpKSkgeworCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CisJCWlmIChyYykKIAkJCS8qIGZhaWxlZDogdHJ5IGFnYWluICovCi0JCQlyYyA9IHRyeV90b19pZGVudGlmeShkcml2ZSxjbWQpOwotCQl9CisJCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CiAKIAkJc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKQEAgLTQ5NCw3ICs0MzIsNyBAQAogCQkJbXNsZWVwKDUwKTsKIAkJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKIAkJCSh2b2lkKWlkZV9idXN5X3NsZWVwKGh3aWYsIFdBSVRfV09SU1RDQVNFLCAwKTsKLQkJCXJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOworCQkJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIGNtZCwgaWQpOwogCQl9CiAKIAkJLyogZW5zdXJlIGRyaXZlIElSUSBpcyBjbGVhciAqLwpAQCAtNTE3LDM3ICs0NTUsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyoKLSAqCi0gKi8KLXN0YXRpYyB2b2lkIGVuYWJsZV9uZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JdTggc3RhdDsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBlbmFibGluZyAlcyAtLSAiLAotCQlod2lmLT5uYW1lLCAoY2hhciAqKSZkcml2ZS0+aWRbQVRBX0lEX1BST0RdKTsKLQotCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JbXNsZWVwKDUwKTsKLQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfRVhBQllURV9FTkFCTEVfTkVTVCk7Ci0KLQlpZiAoaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDApKSB7Ci0JCXByaW50ayhLRVJOX0NPTlQgImZhaWxlZCAodGltZW91dClcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbXNsZWVwKDUwKTsKLQotCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIDAsIEJBRF9TVEFUKSkKLQkJcHJpbnRrKEtFUk5fQ09OVCAiZmFpbGVkIChzdGF0dXMgPSAweCUwMngpXG4iLCBzdGF0KTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0NPTlQgInN1Y2Nlc3NcbiIpOwotfQotCiAvKioKICAqCXByb2JlX2Zvcl9kcml2ZXMJLQl1cHBlciBsZXZlbCBkcml2ZSBwcm9iZQogICoJQGRyaXZlOiBkcml2ZSB0byBwcm9iZSBmb3IKQEAgLTU2Myw2ICs0NzAsOCBAQAogc3RhdGljIHU4IHByb2JlX2Zvcl9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJY2hhciAqbTsKKwlpbnQgcmM7CisJdTggY21kOwogCiAJLyoKIAkgKglJbiBvcmRlciB0byBrZWVwIHRoaW5ncyBzaW1wbGUgd2UgaGF2ZSBhbiBpZApAQCAtNTg2LDIxICs0OTUsMTkgQEAKIAogCS8qIHNraXAgcHJvYmluZz8gKi8KIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9QUk9CRSkgPT0gMCkgewotcmV0cnk6CiAJCS8qIGlmICEoc3VjY2Vzc3x8dGltZWQtb3V0KSAqLwotCQlpZiAoZG9fcHJvYmUoZHJpdmUsIEFUQV9DTURfSURfQVRBKSA+PSAyKQorCQljbWQgPSBBVEFfQ01EX0lEX0FUQTsKKwkJcmMgPSBkb19wcm9iZShkcml2ZSwgY21kKTsKKwkJaWYgKHJjID49IDIpIHsKIAkJCS8qIGxvb2sgZm9yIEFUQVBJIGRldmljZSAqLwotCQkJKHZvaWQpZG9fcHJvYmUoZHJpdmUsIEFUQV9DTURfSURfQVRBUEkpOworCQkJY21kID0gQVRBX0NNRF9JRF9BVEFQSTsKKwkJCXJjID0gZG9fcHJvYmUoZHJpdmUsIGNtZCk7CisJCX0KIAogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJCS8qIGRyaXZlIG5vdCBmb3VuZCAqLwogCQkJcmV0dXJuIDA7CiAKLQkJaWYgKHN0cnN0cihtLCAiRSBYIEEgQiBZIFQgRSBOIEUgUyBUIikpIHsKLQkJCWVuYWJsZV9uZXN0KGRyaXZlKTsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQogCQkvKiBpZGVudGlmaWNhdGlvbiBmYWlsZWQ/ICovCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19JRF9SRUFEKSA9PSAwKSB7CiAJCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKSB7CkBAIC02MTQsOCArNTIxLDEyIEBACiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVua25vd24gZGV2aWNlIG9uIGJ1cyByZWZ1c2VkIGlkZW50aWZpY2F0aW9uLiBJZ25vcmluZy5cbiIsIGRyaXZlLT5uYW1lKTsKIAkJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkKKwkJCQlpZGVfY2xhc3NpZnlfYXRhcGlfZGV2KGRyaXZlKTsKKwkJCWVsc2UKKwkJCQlpZGVfY2xhc3NpZnlfYXRhX2Rldihkcml2ZSk7CiAJCX0KLQkJLyogZHJpdmUgd2FzIGZvdW5kICovCiAJfQogCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCkBAIC03NzksNyArNjkwLDYgQEAKIHN0YXRpYyBpbnQgaWRlX3Byb2JlX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZGVfZHJpdmVfdCAqZHJpdmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaXJxZDsKIAlpbnQgaSwgcmMgPSAtRU5PREVWOwogCkBAIC03OTcsOSArNzA3LDYgQEAKIAlpZiAoaXJxZCkKIAkJZGlzYWJsZV9pcnEoaHdpZi0+aXJxKTsKIAotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwotCiAJaWYgKGlkZV9wb3J0X3dhaXRfcmVhZHkoaHdpZikgPT0gLUVCVVNZKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdhaXQgZm9yIHJlYWR5IGZhaWxlZCBiZWZvcmUgcHJvYmUgIVxuIiwgaHdpZi0+bmFtZSk7CiAKQEAgLTgxMyw4ICs3MjAsNiBAQAogCQkJcmMgPSAwOwogCX0KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQogCS8qCiAJICogVXNlIGNhY2hlZCBJUlEgbnVtYmVyLiBJdCBtaWdodCBiZSAoYW5kIGlzLi4uKSBjaGFuZ2VkIGJ5IHByb2JlCiAJICogY29kZSBhYm92ZQpAQCAtODMxLDI5ICs3MzYsMTggQEAKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaW50IGk7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewotCQkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5xdWlya3Byb2MpCi0JCQkJcG9ydF9vcHMtPnF1aXJrcHJvYyhkcml2ZSk7Ci0JCX0KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnF1aXJrcHJvYykKKwkJCXBvcnRfb3BzLT5xdWlya3Byb2MoZHJpdmUpOwogCX0KIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7Ci0JCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7CiAKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05JQ0UxOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OSUNFMTsKIAotCQkJaWYgKGh3aWYtPmRtYV9vcHMpCi0JCQkJaWRlX3NldF9kbWEoZHJpdmUpOwotCQl9Ci0JfQotCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0lPXzMyQklUKQotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fSU9fMzJCSVQ7Ci0JCWVsc2UKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19OT19JT18zMkJJVDsKKwkJaWYgKGh3aWYtPmRtYV9vcHMpCisJCQlpZGVfc2V0X2RtYShkcml2ZSk7CiAJfQogfQogCkBAIC05MjQsMTAgKzgxOCw3IEBACiAJaW50IGksIGogPSAwOwogCiAJbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKIAkJaWYgKGlkZV9pbml0X3F1ZXVlKGRyaXZlKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGU6IGZhaWxlZCB0byBpbml0ICVzXG4iLAogCQkJCQlkcml2ZS0+bmFtZSk7CkBAIC05NTMsMTMgKzg0NCw2IEBACiAJaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcjsKIAlpbnQgc2EgPSAwOwogCi0JbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwotCXNwaW5fbG9ja19pbml0KCZod2lmLT5sb2NrKTsKLQotCWluaXRfdGltZXIoJmh3aWYtPnRpbWVyKTsKLQlod2lmLT50aW1lci5mdW5jdGlvbiA9ICZpZGVfdGltZXJfZXhwaXJ5OwotCWh3aWYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylod2lmOwotCiAJaXJxX2hhbmRsZXIgPSBod2lmLT5ob3N0LT5pcnFfaGFuZGxlcjsKIAlpZiAoaXJxX2hhbmRsZXIgPT0gTlVMTCkKIAkJaXJxX2hhbmRsZXIgPSBpZGVfaW50cjsKQEAgLTk5NywxMCArODgxLDggQEAKIAkJcHJpbnRrKEtFUk5fQ09OVCAiIChzZXJpYWxpemVkKSIpOwogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAKLQltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIAlyZXR1cm4gMDsKIG91dF91cDoKLQltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTA5OSwxNCArOTgxLDkgQEAKIAogc3RhdGljIGludCBod2lmX2luaXQoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlpbnQgb2xkX2lycTsKLQogCWlmICghaHdpZi0+aXJxKSB7Ci0JCWh3aWYtPmlycSA9IF9faWRlX2RlZmF1bHRfaXJxKGh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcik7Ci0JCWlmICghaHdpZi0+aXJxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgbm8gSVJRXG4iLCBod2lmLT5uYW1lKTsKLQkJCXJldHVybiAwOwotCQl9CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCBubyBJUlFcbiIsIGh3aWYtPm5hbWUpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAocmVnaXN0ZXJfYmxrZGV2KGh3aWYtPm1ham9yLCBod2lmLT5uYW1lKSkKQEAgLTExMjQsMjkgKzEwMDEsMTIgQEAKIAogCXNnX2luaXRfdGFibGUoaHdpZi0+c2dfdGFibGUsIGh3aWYtPnNnX21heF9uZW50cyk7CiAJCi0JaWYgKGluaXRfaXJxKGh3aWYpID09IDApCi0JCWdvdG8gZG9uZTsKLQotCW9sZF9pcnEgPSBod2lmLT5pcnE7Ci0JLyoKLQkgKglJdCBmYWlsZWQgdG8gaW5pdGlhbGlzZS4gRmluZCB0aGUgZGVmYXVsdCBJUlEgZm9yIAotCSAqCXRoaXMgcG9ydCBhbmQgdHJ5IHRoYXQuCi0JICovCi0JaHdpZi0+aXJxID0gX19pZGVfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyKTsKLQlpZiAoIWh3aWYtPmlycSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgdW5hYmxlIHRvIGdldCBJUlEgJWRcbiIsCi0JCQlod2lmLT5uYW1lLCBvbGRfaXJxKTsKLQkJZ290byBvdXQ7Ci0JfQogCWlmIChpbml0X2lycShod2lmKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwcm9iZWQgSVJRICVkIGFuZCBkZWZhdWx0IElSUSAlZCBmYWlsZWRcbiIsCi0JCQlod2lmLT5uYW1lLCBvbGRfaXJxLCBod2lmLT5pcnEpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgdW5hYmxlIHRvIGdldCBJUlEgJWRcbiIsCisJCQlod2lmLT5uYW1lLCBod2lmLT5pcnEpOwogCQlnb3RvIG91dDsKIAl9Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHByb2JlZCBJUlEgJWQgZmFpbGVkLCB1c2luZyBkZWZhdWx0XG4iLAotCQlod2lmLT5uYW1lLCBod2lmLT5pcnEpOwogCi1kb25lOgogCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYoaHdpZi0+bWFqb3IsIDApLCBNQVhfRFJJVkVTIDw8IFBBUlROX0JJVFMsCiAJCQkgICAgVEhJU19NT0RVTEUsIGF0YV9wcm9iZSwgYXRhX2xvY2ssIGh3aWYpOwogCXJldHVybiAxOwpAQCAtMTE2MSwxMyArMTAyMSwxMCBAQAogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgeworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkcml2ZS0+Z2VuZGV2OwogCQlpbnQgcmV0OwogCi0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7Ci0KIAkJZGV2X3NldF9uYW1lKGRldiwgIiV1LiV1IiwgaHdpZi0+aW5kZXgsIGkpOwogCQlkZXYtPnBhcmVudCA9ICZod2lmLT5nZW5kZXY7CiAJCWRldi0+YnVzID0gJmlkZV9idXNfdHlwZTsKQEAgLTExOTIsNiArMTA0OSw4IEBACiAKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfSU9fMzJCSVQpCiAJCQlkcml2ZS0+aW9fMzJiaXQgPSAxOworCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19JT18zMkJJVCkKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX0lPXzMyQklUOwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19VTk1BU0tfSVJRUykKIAkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fVU5NQVNLX0lSUVMpCkBAIC0xMjEzLDEwICsxMDcyLDYgQEAKIAlpZiAoZC0+aW5pdF9pb3BzKQogCQlkLT5pbml0X2lvcHMoaHdpZik7CiAKLQlpZiAoKCFod2lmLT5pcnEgJiYgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTEVHQUNZX0lSUVMpKSB8fAotCSAgICAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUykpCi0JCWh3aWYtPmlycSA9IHBvcnQgPyAxNSA6IDE0OwotCiAJLyogLT5ob3N0X2ZsYWdzIG1heSBiZSBzZXQgYnkgLT5pbml0X2lvcHMgKG9yIGV2ZW4gZWFybGllci4uLikgKi8KIAlod2lmLT5ob3N0X2ZsYWdzIHw9IGQtPmhvc3RfZmxhZ3M7CiAJaHdpZi0+cGlvX21hc2sgPSBkLT5waW9fbWFzazsKQEAgLTEzMTcsNiArMTE3MiwxMiBAQAogCWh3aWYtPm5hbWVbMl0JPSAnZSc7CiAJaHdpZi0+bmFtZVszXQk9ICcwJyArIGluZGV4OwogCisJc3Bpbl9sb2NrX2luaXQoJmh3aWYtPmxvY2spOworCisJaW5pdF90aW1lcigmaHdpZi0+dGltZXIpOworCWh3aWYtPnRpbWVyLmZ1bmN0aW9uID0gJmlkZV90aW1lcl9leHBpcnk7CisJaHdpZi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3aWY7CisKIAlpbml0X2NvbXBsZXRpb24oJmh3aWYtPmdlbmRldl9yZWxfY29tcCk7CiAKIAlod2lmLT50cF9vcHMgPSAmZGVmYXVsdF90cF9vcHM7CkBAIC0xNTY3LDcgKzE0MjgsNyBAQAogCiAJCWorKzsKIAotCQlpZGVfYWNwaV9pbml0KGh3aWYpOworCQlpZGVfYWNwaV9pbml0X3BvcnQoaHdpZik7CiAKIAkJaWYgKGh3aWYtPnByZXNlbnQpCiAJCQlpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhod2lmKTsKQEAgLTE2MjQsMTEgKzE0ODUsOSBAQAogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgaTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7Ci0JCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKLQkJfQorCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWRldmljZV91bnJlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmZHJpdmUtPmdlbmRldl9yZWxfY29tcCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCBhN2I5Mjg3Li40MTdjZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTYwMCw3ICs2MDAsNyBAQAogCWludCBpOwogCiAJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwIHx8IGRyaXZlLT5wcm9jKQorCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCWRyaXZlLT5wcm9jID0gcHJvY19ta2Rpcihkcml2ZS0+bmFtZSwgcGFyZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTEwZjZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCkBAIC0wLDAgKzEsMjQ2IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKnVkbWFfc3RyW10gPQorCSB7ICJVRE1BLzE2IiwgIlVETUEvMjUiLCAgIlVETUEvMzMiLCAgIlVETUEvNDQiLAorCSAgICJVRE1BLzY2IiwgIlVETUEvMTAwIiwgIlVETUEvMTMzIiwgIlVETUE3IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm13ZG1hX3N0cltdID0KKwl7ICJNV0RNQTAiLCAiTVdETUExIiwgIk1XRE1BMiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzd2RtYV9zdHJbXSA9CisJeyAiU1dETUEwIiwgIlNXRE1BMSIsICJTV0RNQTIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGlvX3N0cltdID0KKwl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIgfTsKKworLyoqCisgKglpZGVfeGZlcl92ZXJib3NlCS0JcmV0dXJuIElERSBtb2RlIG5hbWVzCisgKglAbW9kZTogdHJhbnNmZXIgbW9kZQorICoKKyAqCVJldHVybnMgYSBjb25zdGFudCBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2RlCisgKglyZXF1ZXN0ZWQuCisgKi8KKworY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKQoreworCWNvbnN0IGNoYXIgKnM7CisJdTggaSA9IG1vZGUgJiAweGY7CisKKwlpZiAobW9kZSA+PSBYRkVSX1VETUFfMCAmJiBtb2RlIDw9IFhGRVJfVURNQV83KQorCQlzID0gdWRtYV9zdHJbaV07CisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9NV19ETUFfMikKKwkJcyA9IG13ZG1hX3N0cltpXTsKKwllbHNlIGlmIChtb2RlID49IFhGRVJfU1dfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1NXX0RNQV8yKQorCQlzID0gc3dkbWFfc3RyW2ldOworCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9QSU9fMCAmJiBtb2RlIDw9IFhGRVJfUElPXzUpCisJCXMgPSBwaW9fc3RyW2kgJiAweDddOworCWVsc2UgaWYgKG1vZGUgPT0gWEZFUl9QSU9fU0xPVykKKwkJcyA9ICJQSU8gU0xPVyI7CisJZWxzZQorCQlzID0gIlhGRVIgRVJST1IiOworCisJcmV0dXJuIHM7Cit9CitFWFBPUlRfU1lNQk9MKGlkZV94ZmVyX3ZlcmJvc2UpOworCisvKioKKyAqCWlkZV9nZXRfYmVzdF9waW9fbW9kZQktCWdldCBQSU8gbW9kZSBmcm9tIGRyaXZlCisgKglAZHJpdmU6IGRyaXZlIHRvIGNvbnNpZGVyCisgKglAbW9kZV93YW50ZWQ6IHByZWZlcnJlZCBtb2RlCisgKglAbWF4X21vZGU6IGhpZ2hlc3QgYWxsb3dlZCBtb2RlCisgKgorICoJVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIFBJTyBzZXR0aW5ncyBmb3IgYSBnaXZlbiBkcml2ZSwKKyAqCWJhc2VkIG9uIHRoZSBkcml2ZS0+aWQgaW5mb3JtYXRpb24gYW5kIHRoZSBpZGVfcGlvX2JsYWNrbGlzdFtdLgorICoKKyAqCURyaXZlIFBJTyBtb2RlIGlzIGF1dG8tc2VsZWN0ZWQgaWYgMjU1IGlzIHBhc3NlZCBhcyBtb2RlX3dhbnRlZC4KKyAqCVRoaXMgaXMgdXNlZCBieSBtb3N0IGNoaXBzZXQgc3VwcG9ydCBtb2R1bGVzIHdoZW4gImF1dG8tdHVuaW5nIi4KKyAqLworCit1OCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlX3dhbnRlZCwgdTggbWF4X21vZGUpCit7CisJdTE2ICppZCA9IGRyaXZlLT5pZDsKKwlpbnQgcGlvX21vZGUgPSAtMSwgb3ZlcnJpZGRlbiA9IDA7CisKKwlpZiAobW9kZV93YW50ZWQgIT0gMjU1KQorCQlyZXR1cm4gbWluX3QodTgsIG1vZGVfd2FudGVkLCBtYXhfbW9kZSk7CisKKwlpZiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BJT19OT19CTEFDS0xJU1QpID09IDApCisJCXBpb19tb2RlID0gaWRlX3NjYW5fcGlvX2JsYWNrbGlzdCgoY2hhciAqKSZpZFtBVEFfSURfUFJPRF0pOworCisJaWYgKHBpb19tb2RlICE9IC0xKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpcyBvbiBQSU8gYmxhY2tsaXN0XG4iLCBkcml2ZS0+bmFtZSk7CisJfSBlbHNlIHsKKwkJcGlvX21vZGUgPSBpZFtBVEFfSURfT0xEX1BJT19NT0RFU10gPj4gODsKKwkJaWYgKHBpb19tb2RlID4gMikgewkvKiAyIGlzIG1heGltdW0gYWxsb3dlZCB0UElPIHZhbHVlICovCisJCQlwaW9fbW9kZSA9IDI7CisJCQlvdmVycmlkZGVuID0gMTsKKwkJfQorCisJCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewkgICAgICAvKiBBVEEyPyAqLworCQkJaWYgKGF0YV9pZF9oYXNfaW9yZHkoaWQpKSB7CisJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNykgeworCQkJCQlvdmVycmlkZGVuID0gMDsKKwkJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNCkKKwkJCQkJCXBpb19tb2RlID0gNTsKKwkJCQkJZWxzZSBpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiAyKQorCQkJCQkJcGlvX21vZGUgPSA0OworCQkJCQllbHNlCisJCQkJCQlwaW9fbW9kZSA9IDM7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG92ZXJyaWRkZW4pCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogdFBJTyA+IDIsIGFzc3VtaW5nIHRQSU8gPSAyXG4iLAorCQkJCQkgZHJpdmUtPm5hbWUpOworCX0KKworCWlmIChwaW9fbW9kZSA+IG1heF9tb2RlKQorCQlwaW9fbW9kZSA9IG1heF9tb2RlOworCisJcmV0dXJuIHBpb19tb2RlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2dldF9iZXN0X3Bpb19tb2RlKTsKKworaW50IGlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCisJCXJldHVybiAwOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFRPRE86IHRlbXBvcmFyeSBoYWNrIGZvciBzb21lIGxlZ2FjeSBob3N0IGRyaXZlcnMgdGhhdCBkaWRuJ3QKKwkgKiBzZXQgdHJhbnNmZXIgbW9kZSBvbiB0aGUgZGV2aWNlIGluIC0+c2V0X3Bpb19tb2RlIG1ldGhvZC4uLgorCSAqLworCWlmIChwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpIHsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7CisJCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKKwkJCXJldHVybiAtMTsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKKwl9Cit9CisKK2ludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQorCQlyZXR1cm4gMDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgeworCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCisJCQlyZXR1cm4gLTE7CisJCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKKwkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfZG1hX21vZGUpOworCisvKiByZXFfcGlvID09ICIyNTUiIGZvciBhdXRvLXR1bmUgKi8KK3ZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByZXFfcGlvKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCXU4IGhvc3RfcGlvLCBwaW87CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQorCQlyZXR1cm47CisKKwlCVUdfT04oaHdpZi0+cGlvX21hc2sgPT0gMHgwMCk7CisKKwlob3N0X3BpbyA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxOworCisJcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCByZXFfcGlvLCBob3N0X3Bpbyk7CisKKwkvKgorCSAqIFRPRE86CisJICogLSByZXBvcnQgZGV2aWNlIG1heCBQSU8gbW9kZQorCSAqIC0gY2hlY2sgcmVxX3BpbyAhPSAyNTUgYWdhaW5zdCBkZXZpY2UgbWF4IFBJTyBtb2RlCisJICovCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0IG1heCBQSU8lZCB3YW50ZWQgUElPJWQlcyBzZWxlY3RlZCBQSU8lZFxuIiwKKwkJCSAgZHJpdmUtPm5hbWUsIGhvc3RfcGlvLCByZXFfcGlvLAorCQkJICByZXFfcGlvID09IDI1NSA/ICIoYXV0by10dW5lKSIgOiAiIiwgcGlvKTsKKworCSh2b2lkKWlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9waW8pOworCisvKioKKyAqCWlkZV9yYXRlX2ZpbHRlcgkJLQlmaWx0ZXIgdHJhbnNmZXIgbW9kZQorICoJQGRyaXZlOiBJREUgZGV2aWNlCisgKglAc3BlZWQ6IGRlc2lyZWQgc3BlZWQKKyAqCisgKglHaXZlbiB0aGUgYXZhaWxhYmxlIHRyYW5zZmVyIG1vZGVzIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICoJdGhlIGJlc3QgYXZhaWxhYmxlIHNwZWVkIGF0IG9yIGJlbG93IHRoZSBzcGVlZCByZXF1ZXN0ZWQuCisgKgorICoJVE9ETzogY2hlY2sgZGV2aWNlIFBJTyBjYXBhYmlsaXRpZXMKKyAqLworCitzdGF0aWMgdTggaWRlX3JhdGVfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IG1vZGUgPSBpZGVfZmluZF9kbWFfbW9kZShkcml2ZSwgc3BlZWQpOworCisJaWYgKG1vZGUgPT0gMCkgeworCQlpZiAoaHdpZi0+cGlvX21hc2spCisJCQltb2RlID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDEgKyBYRkVSX1BJT18wOworCQllbHNlCisJCQltb2RlID0gWEZFUl9QSU9fNDsKKwl9CisKKy8qCXByaW50aygiJXM6IG1vZGUgMHglMDJ4LCBzcGVlZCAweCUwMnhcbiIsIF9fZnVuY19fLCBtb2RlLCBzcGVlZCk7ICovCisKKwlyZXR1cm4gbWluKHNwZWVkLCBtb2RlKTsKK30KKworLyoqCisgKglpZGVfc2V0X3hmZXJfcmF0ZQktCXNldCB0cmFuc2ZlciByYXRlCisgKglAZHJpdmU6IGRyaXZlIHRvIHNldAorICoJQHJhdGU6IHNwZWVkIHRvIGF0dGVtcHQgdG8gc2V0CisgKgorICoJR2VuZXJhbCBoZWxwZXIgZm9yIHNldHRpbmcgdGhlIHNwZWVkIG9mIGFuIElERSBkZXZpY2UuIFRoaXMKKyAqCWZ1bmN0aW9uIGtub3dzIGFib3V0IHVzZXIgZW5mb3JjZWQgbGltaXRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKyAqCXdoaWNoIC0+c2V0X3Bpb19tb2RlLy0+c2V0X2RtYV9tb2RlIGRvZXMgbm90LgorICovCisKK2ludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwgfHwKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQorCQlyZXR1cm4gLTE7CisKKwlyYXRlID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCByYXRlKTsKKworCUJVR19PTihyYXRlIDwgWEZFUl9QSU9fMCk7CisKKwlpZiAocmF0ZSA+PSBYRkVSX1BJT18wICYmIHJhdGUgPD0gWEZFUl9QSU9fNSkKKwkJcmV0dXJuIGlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIHJhdGUpOworCisJcmV0dXJuIGlkZV9zZXRfZG1hX21vZGUoZHJpdmUsIHJhdGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCAwOTIwZTNiLi45MmM5YjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtNjIsMTYwICs2Miw2IEBACiAKIHN0cnVjdCBjbGFzcyAqaWRlX3BvcnRfY2xhc3M7CiAKLS8qCi0gKglMb2NrcyBmb3IgSURFIHNldHRpbmcgZnVuY3Rpb25hbGl0eQotICovCi0KLURFRklORV9NVVRFWChpZGVfc2V0dGluZ19tdHgpOwotCi1pZGVfZGV2c2V0X2dldChpb18zMmJpdCwgaW9fMzJiaXQpOwotCi1zdGF0aWMgaW50IHNldF9pb18zMmJpdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHJpdmUtPmlvXzMyYml0ID0gYXJnOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7Ci0KLXN0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYXJnKQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOwotCi1zdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQotCWludCBlcnIgPSAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gMDsKLQotCWlmIChhcmcpIHsKLQkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKLQkJCWVyciA9IC1FSU87Ci0JfSBlbHNlCi0JCWlkZV9kbWFfb2ZmKGRyaXZlKTsKLQotb3V0OgotCXJldHVybiBlcnI7Ci0jZWxzZQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIC1FUEVSTTsKLSNlbmRpZgotfQotCi0vKgotICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKLSAqLwotc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKLXsKLQlzd2l0Y2ggKHJlcV9waW8pIHsKLQljYXNlIDIwMjoKLQljYXNlIDIwMToKLQljYXNlIDIwMDoKLQljYXNlIDEwMjoKLQljYXNlIDEwMToKLQljYXNlIDEwMDoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKLQljYXNlIDk6Ci0JY2FzZSA4OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7Ci0JY2FzZSA3OgotCWNhc2UgNjoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCi0JCXJldHVybiAtRU5PU1lTOwotCi0JaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgewotCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQl9IGVsc2UKLQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7Ci0JfSBlbHNlIHsKLQkJaW50IGtlZXBfZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOwotCi0JCWlkZV9zZXRfcGlvKGRyaXZlLCBhcmcpOwotCi0JCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgewotCQkJaWYgKGtlZXBfZG1hKQotCQkJCWlkZV9kbWFfb24oZHJpdmUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKLQotc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmcpCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOwotaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7Ci1pZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKLWlkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOwotX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOwotCiAvKioKICAqIGlkZV9kZXZpY2VfZ2V0CS0JZ2V0IGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIGEgaWRlX2RyaXZlX3QKICAqIEBkcml2ZToJZGV2aWNlIHRvIGdldCBhIHJlZmVyZW5jZSB0bwpAQCAtNTI3LDYgKzM3Myw4IEBACiAJCWdvdG8gb3V0X3BvcnRfY2xhc3M7CiAJfQogCisJaWRlX2FjcGlfaW5pdCgpOworCiAJcHJvY19pZGVfY3JlYXRlKCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKaW5kZXggMTNiODE1My4uNmI5ZmM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDIwKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaXQ4MjF4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9pdDgyMXgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCBjb25mOwogCXN0YXRpYyBjaGFyICptb2RlWzJdID0geyAicGFzcyB0aHJvdWdoIiwgInNtYXJ0IiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCmluZGV4IDgzNjQzZWQuLmVhNDhhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL25zODc0MTUuYworKysgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKQEAgLTI4Niw5ICsyODYsNyBAQAogCX0KIAogCWlmICghdXNpbmdfaW50YSkKLQkJaHdpZi0+aXJxID0gX19pZGVfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyKTsKLQllbHNlIGlmICghaHdpZi0+aXJxICYmIGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+aXJxKQotCQlod2lmLT5pcnEgPSBod2lmLT5tYXRlLT5pcnE7CS8qIHNoYXJlIElSUSB3aXRoIG1hdGUgKi8KKwkJaHdpZi0+aXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIGh3aWYtPmNoYW5uZWwpOwogCiAJaWYgKCFod2lmLT5kbWFfYmFzZSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYwppbmRleCBmMjEyOTBjLi5iNjg5MDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYwpAQCAtMzI1LDcgKzMyNSw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3BkY25ldyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfcGRjbmV3KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IERSVl9OQU1FOwogCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogI2VuZGlmCiAKICBvdXQ6Ci0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKiBfX2RldmluaXQgcGRjMjAyNzBfZ2V0X2RldjIoc3RydWN0IHBjaV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKaW5kZXggOTcxOTMzMi4uY2JhNjZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCWlkZV9kbWFfdGltZW91dChkcml2ZSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9wZGMyMDJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZG1hYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwogCXU4IHVkbWFfc3BlZWRfZmxhZyA9IDAsIHByaW1hcnlfbW9kZSA9IDAsIHNlY29uZGFyeV9tb2RlID0gMDsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlwcmludGsoIiVzQUNUSVZFXG4iLCAoaW5iKGRtYWJhc2UgfCAweDFmKSAmIDEpID8gIiIgOiAiSU4iKTsKIAl9CiBvdXQ6Ci0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGRjMjAyYXRhNF9maXh1cF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BpaXguYyBiL2RyaXZlcnMvaWRlL3BpaXguYwppbmRleCBmMWUyZTRlLi4yYWE2OTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9waWl4LmMKKysrIGIvZHJpdmVycy9pZGUvcGlpeC5jCkBAIC0yMDQsNyArMjA0LDcgQEAKICAqCW91dCB0byBiZSBuaWNlIGFuZCBzaW1wbGUuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaWNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9pY2goc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MzIgZXh0cmEgPSAwOwogCkBAIC0zMTgsMTkgKzMxOCwxMiBAQAogCS5jYWJsZV9kZXRlY3QJCT0gcGlpeF9jYWJsZV9kZXRlY3QsCiB9OwogCi0jaWZuZGVmIENPTkZJR19JQTY0Ci0gI2RlZmluZSBJREVfSEZMQUdTX1BJSVggSURFX0hGTEFHX0xFR0FDWV9JUlFTCi0jZWxzZQotICNkZWZpbmUgSURFX0hGTEFHU19QSUlYIDAKLSNlbmRpZgotCiAjZGVmaW5lIERFQ0xBUkVfUElJWF9ERVYodWRtYSkgXAogCXsJCQkJCQlcCiAJCS5uYW1lCQk9IERSVl9OQU1FLAkJXAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BpaXgsCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDEsMHg4MCwweDgwfSwgezB4NDMsMHg4MCwweDgwfX0sIFwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfcG9ydF9vcHMsCVwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsCVwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCQlcCiAJCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLAlcCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwJXApAQCAtMzQ0LDcgKzMzNyw2IEBACiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGlpeCwgXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAogCQkucG9ydF9vcHMJPSAmaWNoX3BvcnRfb3BzLCBcCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19QSUlYLCBcCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LCBcCiAJCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLCBcCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgXApAQCAtMzYwLDggKzM1Miw3IEBACiAJCSAqLwogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NmQsMHhjMCwweDgwfSwgezB4NmQsMHhjMCwweGMwfX0sCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0lTQV9QT1JUUyB8IElERV9IRkxBR19OT19ETUEgfAotCQkJCSAgSURFX0hGTEFHU19QSUlYLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19JU0FfUE9SVFMgfCBJREVfSEZMQUdfTk9fRE1BLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLyogVGhpcyBpcyBhIHBhaW5mdWwgc3lzdGVtIGJlc3QgdG8gbGV0IGl0IHNlbGYgdHVuZSBmb3Igbm93ICovCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDM4MjEwMmIuLmI2NTU0ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKKysrIGIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1NCwgdWx0cmFfZW5hYmxlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc3Z3a3Moc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3N2d2tzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IHJlZzsKIAl1OCBidHI7CkBAIC0yNzAsNyArMjcwLDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1QSwgYnRyKTsKIAl9CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBhdGE2Nl9zdndrc19zdndrcyhpZGVfaHdpZl90ICpod2lmKQpAQCAtMzUzLDE0ICszNTMsMTEgQEAKIAkuY2FibGVfZGV0ZWN0CQk9IHN2d2tzX2NhYmxlX2RldGVjdCwKIH07CiAKLSNkZWZpbmUgSURFX0hGTEFHU19TVldLUyBJREVfSEZMQUdfTEVHQUNZX0lSUVMKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNlcnZlcndvcmtzX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CS8qIDA6IE9TQjQgKi8KIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZvc2I0X3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSAweDAwLCAvKiBVRE1BIGlzIHByb2JsZW1hdGljIG9uIE9TQjQgKi8KQEAgLTM2OSw3ICszNjYsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0zNzgsNyArMzc0LDYgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMzg3LDcgKzM4Miw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUyB8IElERV9IRkxBR19TSU5HTEUsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTM5Niw3ICszOTEsNyBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MgfCBJREVfSEZMQUdfU0lOR0xFLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCmluZGV4IGU4NWQxZWQuLjI0YmM4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCisrKyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCkBAIC0zMDUsNyArMzA1LDYgQEAKICAqCUBkZXY6IFBDSSBkZXZpY2UgaG9sZGluZyBpbnRlcmZhY2UKICAqCUBkOiBJREUgcG9ydCBpbmZvCiAgKglAcG9ydDogcG9ydCBudW1iZXIKLSAqCUBpcnE6IFBDSSBJUlEKICAqCUBodzogaHdfcmVnc190IGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwb3J0CiAgKgogICoJUGVyZm9ybSB0aGUgaW5pdGlhbCBzZXQgdXAgZm9yIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2Ugc3RydWN0dXJlLiBUaGlzCkBAIC0zMTYsNyArMzE1LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGlkZV9od19jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkgICAgdW5zaWduZWQgaW50IHBvcnQsIGludCBpcnEsIGh3X3JlZ3NfdCAqaHcpCisJCQkgICAgdW5zaWduZWQgaW50IHBvcnQsIGh3X3JlZ3NfdCAqaHcpCiB7CiAJdW5zaWduZWQgbG9uZyBjdGwgPSAwLCBiYXNlID0gMDsKIApAQCAtMzQ0LDcgKzM0Myw2IEBACiAJfQogCiAJbWVtc2V0KGh3LCAwLCBzaXplb2YoKmh3KSk7Ci0JaHctPmlycSA9IGlycTsKIAlody0+ZGV2ID0gJmRldi0+ZGV2OwogCWh3LT5jaGlwc2V0ID0gZC0+Y2hpcHNldCA/IGQtPmNoaXBzZXQgOiBpZGVfcGNpOwogCWlkZV9zdGRfaW5pdF9wb3J0cyhodywgYmFzZSwgY3RsIHwgMik7CkBAIC00NDgsNyArNDQ2LDYgQEAKICAqCWlkZV9wY2lfc2V0dXBfcG9ydHMJLQljb25maWd1cmUgcG9ydHMvZGV2aWNlcyBvbiBQQ0kgSURFCiAgKglAZGV2OiBQQ0kgZGV2aWNlCiAgKglAZDogSURFIHBvcnQgaW5mbwotICoJQHBjaWlycTogSVJRIGxpbmUKICAqCUBodzogaHdfcmVnc190IGluc3RhbmNlcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUENJIElERSBkZXZpY2UKICAqCUBod3M6IGh3X3JlZ3NfdCBwb2ludGVycyB0YWJsZSB0byB1cGRhdGUKICAqCkBAIC00NjIsNyArNDU5LDcgQEAKICAqLwogCiB2b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkgaW50IHBjaWlycSwgaHdfcmVnc190ICpodywgaHdfcmVnc190ICoqaHdzKQorCQkJIGh3X3JlZ3NfdCAqaHcsIGh3X3JlZ3NfdCAqKmh3cykKIHsKIAlpbnQgY2hhbm5lbHMgPSAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TSU5HTEUpID8gMSA6IDIsIHBvcnQ7CiAJdTggdG1wOwpAQCAtNDgxLDcgKzQ3OCw3IEBACiAJCQljb250aW51ZTsJLyogcG9ydCBub3QgZW5hYmxlZCAqLwogCQl9CiAKLQkJaWYgKGlkZV9od19jb25maWd1cmUoZGV2LCBkLCBwb3J0LCBwY2lpcnEsIGh3ICsgcG9ydCkpCisJCWlmIChpZGVfaHdfY29uZmlndXJlKGRldiwgZCwgcG9ydCwgaHcgKyBwb3J0KSkKIAkJCWNvbnRpbnVlOwogCiAJCSooaHdzICsgcG9ydCkgPSBodyArIHBvcnQ7CkBAIC01MjQsNyArNTIxLDcgQEAKIAkJaWYgKG5vaXN5KQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXM6IG5vdCAxMDAlJSBuYXRpdmUgbW9kZTogd2lsbCAiCiAJCQkJInByb2JlIGlycXMgbGF0ZXJcbiIsIGQtPm5hbWUsIHBjaV9uYW1lKGRldikpOwotCQlwY2lpcnEgPSByZXQ7CisJCXBjaWlycSA9IDA7CiAJfSBlbHNlIGlmICghcGNpaXJxICYmIG5vaXN5KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzICVzOiBiYWQgaXJxICglZCk6IHdpbGwgcHJvYmUgbGF0ZXJcbiIsCiAJCQlkLT5uYW1lLCBwY2lfbmFtZShkZXYpLCBwY2lpcnEpOwpAQCAtNTQ5LDcgKzU0Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsIDAsICZod1swXSwgJmh3c1swXSk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsICZod1swXSwgJmh3c1swXSk7CiAKIAlob3N0ID0gaWRlX2hvc3RfYWxsb2MoZCwgaHdzKTsKIAlpZiAoaG9zdCA9PSBOVUxMKSB7CkBAIC01NjgsNyArNTY1LDExIEBACiAJCWdvdG8gb3V0OwogCiAJLyogZml4dXAgSVJRICovCi0JaHdbMV0uaXJxID0gaHdbMF0uaXJxID0gcmV0OworCWlmIChpZGVfcGNpX2lzX2luX2NvbXBhdGliaWxpdHlfbW9kZShkZXYpKSB7CisJCWh3WzBdLmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoZGV2LCAwKTsKKwkJaHdbMV0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIDEpOworCX0gZWxzZQorCQlod1sxXS5pcnEgPSBod1swXS5pcnEgPSByZXQ7CiAKIAlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBkLCBod3MpOwogCWlmIChyZXQpCkBAIC01OTEsNyArNTkyLDcgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlpZGVfcGNpX3NldHVwX3BvcnRzKHBkZXZbaV0sIGQsIDAsICZod1tpKjJdLCAmaHdzW2kqMl0pOworCQlpZGVfcGNpX3NldHVwX3BvcnRzKHBkZXZbaV0sIGQsICZod1tpKjJdLCAmaHdzW2kqMl0pOwogCX0KIAogCWhvc3QgPSBpZGVfaG9zdF9hbGxvYyhkLCBod3MpOwpAQCAtNjE5LDcgKzYyMCwxMSBAQAogCQkJZ290byBvdXQ7CiAKIAkJLyogZml4dXAgSVJRICovCi0JCWh3W2kqMiArIDFdLmlycSA9IGh3W2kqMl0uaXJxID0gcmV0OworCQlpZiAoaWRlX3BjaV9pc19pbl9jb21wYXRpYmlsaXR5X21vZGUocGRldltpXSkpIHsKKwkJCWh3W2kqMl0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShwZGV2W2ldLCAwKTsKKwkJCWh3W2kqMiArIDFdLmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEocGRldltpXSwgMSk7CisJCX0gZWxzZQorCQkJaHdbaSoyICsgMV0uaXJxID0gaHdbaSoyXS5pcnEgPSByZXQ7CiAJfQogCiAJcmV0ID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgZCwgaHdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYwppbmRleCBjYjJiMzUyLi4xODExYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCkBAIC00NjQsNyArNDY0LDcgQEAKICAqCXRvIDEzMyBNSHogY2xvY2tpbmcgaWYgdGhlIHN5c3RlbSBpc24ndCBhbHJlYWR5IHNldCB1cCB0byBkbyBpdC4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zaWltYWdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9zaWltYWdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBob3N0LT5ob3N0X3ByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKaW5kZXggOWVjMWE0YS4uYWZjYTIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJcmV0dXJuIGNoaXBzZXRfZmFtaWx5OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zaXM1NTEzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9zaXM1NTEzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJLyogTWFrZSBnZW5lcmFsIGNvbmZpZyBvcHMgaGVyZQogCSAgIDEvIHRlbGwgSURFIGNoYW5uZWxzIHRvIG9wZXJhdGUgaW4gQ29tcGF0aWJpbGl0eSBtb2RlIG9ubHkKQEAgLTU2Myw3ICs1NjMsNyBAQAogCS5uYW1lCQk9IERSVl9OQU1FLAogCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc2lzNTUxMywKIAkuZW5hYmxlYml0cwk9IHsgezB4NGEsIDB4MDIsIDB4MDJ9LCB7MHg0YSwgMHgwNCwgMHgwNH0gfSwKLQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUyB8IElERV9IRkxBR19OT19BVVRPRE1BLAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX05PX0FVVE9ETUEsCiAJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCmluZGV4IDYyOTc5NTYuLmRiYTIxM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgKiBjaGFubmVsIDAgaGVyZSBhdCBsZWFzdCwgYnV0IGNoYW5uZWwgMSBoYXMgdG8gYmUgZW5hYmxlZCBieQogICogZmlybXdhcmUgb3IgYXJjaCBjb2RlLiBXZSBzdGlsbCBzZXQgYm90aCB0byAxNiBiaXRzIG1vZGUuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NsODJjMTA1KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9zbDgyYzEwNShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiB2YWw7CiAKQEAgLTI4MSw3ICsyODEsNyBAQAogCXZhbCB8PSBDVFJMX1AwRU4gfCBDVFJMX1AwRjE2IHwgQ1RSTF9QMUYxNjsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgdmFsKTsKIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgc2w4MmMxMDVfcG9ydF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwppbmRleCA0MGI0Yjk0Li5mNTVkN2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKQEAgLTEzNiw3ICsxMzYsNiBAQAogCS5uYW1lCQk9IERSVl9OQU1FLAogCS5lbmFibGViaXRzCT0geyB7MHg0MSwgMHg4MCwgMHg4MH0sIHsweDQzLCAweDgwLCAweDgwfSB9LAogCS5wb3J0X29wcwk9ICZzbGM5MGU2Nl9wb3J0X29wcywKLQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUywKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTJfT05MWSwKIAkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90cm0yOTAuYyBiL2RyaXZlcnMvaWRlL3RybTI5MC5jCmluZGV4IGI2YTEyODUuLjFjMDllNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3RybTI5MC5jCisrKyBiL2RyaXZlcnMvaWRlL3RybTI5MC5jCkBAIC0yNzcsOSArMjc3LDYgQEAKIAlpZiAocmVnICYgMHgxMCkKIAkJLyogbGVnYWN5IG1vZGUgKi8KIAkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7Ci0JZWxzZSBpZiAoIWh3aWYtPmlycSAmJiBod2lmLT5tYXRlICYmIGh3aWYtPm1hdGUtPmlycSkKLQkJLyogc2hhcmluZyBJUlEgd2l0aCBtYXRlICovCi0JCWh3aWYtPmlycSA9IGh3aWYtPm1hdGUtPmlycTsKIAogI2lmIDEKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS92aWE4MmN4eHguYyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCmluZGV4IDYwOTJmZTMuLjNmZjcyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCkBAIC0yNjcsNyArMjY3LDcgQEAKICAqCWFuZCBpbml0aWFsaXplIGl0cyBkcml2ZSBpbmRlcGVuZGVudCByZWdpc3RlcnMuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfdmlhODJjeHh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF92aWE4MmN4eHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldiA9IGhvc3QtPmhvc3RfcHJpdjsKQEAgLTQ0MywxNiArNDQzLDYgQEAKIAlpZiAoKHZpYV9jb25maWctPmZsYWdzICYgVklBX05PX1VOTUFTSykgPT0gMCkKIAkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19VTk1BU0tfSVJRUzsKIAotI2lmZGVmIENPTkZJR19QUENfQ0hSUAotCWlmIChtYWNoaW5lX2lzKGNocnApICYmIF9jaHJwX3R5cGUgPT0gX0NIUlBfUGVnYXNvcykKLQkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUzsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FNSUdBT05FCi0JaWYgKG1hY2hpbmVfaXMoYW1pZ2FvbmUpKQotCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTOwotI2VuZGlmCi0KIAlkLnVkbWFfbWFzayA9IHZpYV9jb25maWctPnVkbWFfbWFzazsKIAogCXZkZXYgPSBremFsbG9jKHNpemVvZigqdmRldiksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKaW5kZXggMzgzOGJjNC4uY2IxNWJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCkBAIC0xMzI1LDExICsxMzI1LDcgQEAKIAogCXN0cnVjdCB2aWRlb19jYXJkICp2aWRlbyA9IGZpbGVfdG9fdmlkZW9fY2FyZChmaWxlKTsKIAotCWludCByZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBkdjEzOTRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKaW5kZXggZjFlODJhOS4uNTEzMGZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCkBAIC05MjcsOCArOTI3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc2VydmljZV9tYXNrID0gc2VydmljZV9tYXNrID8gc2VydmljZV9tYXNrIDoKLQkJICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCXNlcnZpY2VfbWFzayA9IHNlcnZpY2VfbWFzayA/IHNlcnZpY2VfbWFzayA6IH5jcHVfdG9fYmU2NCgwKTsKIAlzZXJ2aWNlX2lkICY9IHNlcnZpY2VfbWFzazsKIAlpZiAoKHNlcnZpY2VfaWQgJiBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLKSA9PSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCAmJgogCSAgICAoc2VydmljZV9pZCAhPSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCkpCkBAIC05NTQsNyArOTUzLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY20ubG9jaywgZmxhZ3MpOwogCWlmIChzZXJ2aWNlX2lkID09IElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKSB7CiAJCWNtX2lkLT5zZXJ2aWNlX2lkID0gY3B1X3RvX2JlNjQoY20ubGlzdGVuX3NlcnZpY2VfaWQrKyk7Ci0JCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwkJY21faWQtPnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAl9IGVsc2UgewogCQljbV9pZC0+c2VydmljZV9pZCA9IHNlcnZpY2VfaWQ7CiAJCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBzZXJ2aWNlX21hc2s7CkBAIC0xMTM0LDcgKzExMzMsNyBAQAogCQkJZ290byBlcnJvcjE7CiAJfQogCWNtX2lkLT5zZXJ2aWNlX2lkID0gcGFyYW0tPnNlcnZpY2VfaWQ7Ci0JY21faWQtPnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAJY21faWRfcHJpdi0+dGltZW91dF9tcyA9IGNtX2NvbnZlcnRfdG9fbXMoCiAJCQkJICAgIHBhcmFtLT5wcmltYXJ5X3BhdGgtPnBhY2tldF9saWZlX3RpbWUpICogMiArCiAJCQkJIGNtX2NvbnZlcnRfdG9fbXMoCkBAIC0xNTQ1LDcgKzE1NDQsNyBAQAogCWNtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXIgPSBsaXN0ZW5fY21faWRfcHJpdi0+aWQuY21faGFuZGxlcjsKIAljbV9pZF9wcml2LT5pZC5jb250ZXh0ID0gbGlzdGVuX2NtX2lkX3ByaXYtPmlkLmNvbnRleHQ7CiAJY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCA9IHJlcV9tc2ctPnNlcnZpY2VfaWQ7Ci0JY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCiAJY21fcHJvY2Vzc19yb3V0ZWRfcmVxKHJlcV9tc2csIHdvcmstPm1hZF9yZWN2X3djLT53Yyk7CiAJY21fZm9ybWF0X3BhdGhzX2Zyb21fcmVxKHJlcV9tc2csICZ3b3JrLT5wYXRoWzBdLCAmd29yay0+cGF0aFsxXSk7CkBAIC0yODk4LDcgKzI4OTcsNyBAQAogCQlnb3RvIG91dDsKIAogCWNtX2lkLT5zZXJ2aWNlX2lkID0gcGFyYW0tPnNlcnZpY2VfaWQ7Ci0JY21faWQtPnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAJY21faWRfcHJpdi0+dGltZW91dF9tcyA9IHBhcmFtLT50aW1lb3V0X21zOwogCWNtX2lkX3ByaXYtPm1heF9jbV9yZXRyaWVzID0gcGFyYW0tPm1heF9jbV9yZXRyaWVzOwogCXJldCA9IGNtX2FsbG9jX21zZyhjbV9pZF9wcml2LCAmbXNnKTsKQEAgLTI5OTIsNyArMjk5MSw3IEBACiAJY21faWRfcHJpdi0+aWQuY21faGFuZGxlciA9IGN1cl9jbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyOwogCWNtX2lkX3ByaXYtPmlkLmNvbnRleHQgPSBjdXJfY21faWRfcHJpdi0+aWQuY29udGV4dDsKIAljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkID0gc2lkcl9yZXFfbXNnLT5zZXJ2aWNlX2lkOwotCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAogCWNtX2Zvcm1hdF9zaWRyX3JlcV9ldmVudCh3b3JrLCAmY3VyX2NtX2lkX3ByaXYtPmlkKTsKIAljbV9wcm9jZXNzX3dvcmsoY21faWRfcHJpdiwgd29yayk7CkBAIC0zNzg5LDcgKzM3ODgsNyBAQAogCXJ3bG9ja19pbml0KCZjbS5kZXZpY2VfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNtLmxvY2spOwogCWNtLmxpc3Rlbl9zZXJ2aWNlX3RhYmxlID0gUkJfUk9PVDsKLQljbS5saXN0ZW5fc2VydmljZV9pZCA9IF9fY29uc3RhbnRfYmU2NF90b19jcHUoSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpOworCWNtLmxpc3Rlbl9zZXJ2aWNlX2lkID0gYmU2NF90b19jcHUoSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpOwogCWNtLnJlbW90ZV9pZF90YWJsZSA9IFJCX1JPT1Q7CiAJY20ucmVtb3RlX3FwX3RhYmxlID0gUkJfUk9PVDsKIAljbS5yZW1vdGVfc2lkcl90YWJsZSA9IFJCX1JPT1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmgKaW5kZXggYWVjOWM3YS4uN2U2M2MwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaApAQCAtNDQsMTcgKzQ0LDE3IEBACiAKICNkZWZpbmUgSUJfQ01fQ0xBU1NfVkVSU0lPTgkyIC8qIElCIHNwZWNpZmljYXRpb24gMS4yICovCiAKLSNkZWZpbmUgQ01fUkVRX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBDTV9NUkFfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTEpCi0jZGVmaW5lIENNX1JFSl9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMikKLSNkZWZpbmUgQ01fUkVQX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDEzKQotI2RlZmluZSBDTV9SVFVfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTQpCi0jZGVmaW5lIENNX0RSRVFfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTUpCi0jZGVmaW5lIENNX0RSRVBfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTYpCi0jZGVmaW5lIENNX1NJRFJfUkVRX0FUVFJfSUQgX19jb25zdGFudF9odG9ucygweDAwMTcpCi0jZGVmaW5lIENNX1NJRFJfUkVQX0FUVFJfSUQgX19jb25zdGFudF9odG9ucygweDAwMTgpCi0jZGVmaW5lIENNX0xBUF9BVFRSX0lEICAgICAgX19jb25zdGFudF9odG9ucygweDAwMTkpCi0jZGVmaW5lIENNX0FQUl9BVFRSX0lEICAgICAgX19jb25zdGFudF9odG9ucygweDAwMUEpCisjZGVmaW5lIENNX1JFUV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIENNX01SQV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTEpCisjZGVmaW5lIENNX1JFSl9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTIpCisjZGVmaW5lIENNX1JFUF9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTMpCisjZGVmaW5lIENNX1JUVV9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTQpCisjZGVmaW5lIENNX0RSRVFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE1KQorI2RlZmluZSBDTV9EUkVQX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxNikKKyNkZWZpbmUgQ01fU0lEUl9SRVFfQVRUUl9JRAljcHVfdG9fYmUxNigweDAwMTcpCisjZGVmaW5lIENNX1NJRFJfUkVQX0FUVFJfSUQJY3B1X3RvX2JlMTYoMHgwMDE4KQorI2RlZmluZSBDTV9MQVBfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE5KQorI2RlZmluZSBDTV9BUFJfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDFBKQogCiBlbnVtIGNtX21zZ19zZXF1ZW5jZSB7CiAJQ01fTVNHX1NFUVVFTkNFX1JFUSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKaW5kZXggNzkxM2I4MC4uZDFmYmE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiAJQlVHX09OKGRldmljZS0+cmVnX3N0YXRlICE9IElCX0RFVl9VTlJFR0lTVEVSRUQpOwogCi0JaWJfZGV2aWNlX3VucmVnaXN0ZXJfc3lzZnMoZGV2aWNlKTsKKwlrb2JqZWN0X3B1dCgmZGV2aWNlLT5kZXYua29iaik7CiB9CiBFWFBPUlRfU1lNQk9MKGliX2RlYWxsb2NfZGV2aWNlKTsKIApAQCAtMzQ4LDYgKzM0OCw4IEBACiAKIAltdXRleF91bmxvY2soJmRldmljZV9tdXRleCk7CiAKKwlpYl9kZXZpY2VfdW5yZWdpc3Rlcl9zeXNmcyhkZXZpY2UpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZS0+Y2xpZW50X2RhdGFfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb250ZXh0LCB0bXAsICZkZXZpY2UtPmNsaWVudF9kYXRhX2xpc3QsIGxpc3QpCiAJCWtmcmVlKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCA1YzU0ZmMyLi5kZTkyMmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtMzAxLDYgKzMwMSwxNiBAQAogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5jb250ZXh0ID0gY29udGV4dDsKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQucXAgPSBwb3J0X3ByaXYtPnFwX2luZm9bcXBuXS5xcDsKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQucG9ydF9udW0gPSBwb3J0X251bTsKKwlzcGluX2xvY2tfaW5pdCgmbWFkX2FnZW50X3ByaXYtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+c2VuZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5kb25lX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+cm1wcF9saXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmbWFkX2FnZW50X3ByaXYtPnRpbWVkX3dvcmssIHRpbWVvdXRfc2VuZHMpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfbGlzdCk7CisJSU5JVF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfd29yaywgbG9jYWxfY29tcGxldGlvbnMpOworCWF0b21pY19zZXQoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCwgMSk7CisJaW5pdF9jb21wbGV0aW9uKCZtYWRfYWdlbnRfcHJpdi0+Y29tcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydF9wcml2LT5yZWdfbG9jaywgZmxhZ3MpOwogCW1hZF9hZ2VudF9wcml2LT5hZ2VudC5oaV90aWQgPSArK2liX21hZF9jbGllbnRfaWQ7CkBAIC0zNTAsMTcgKzM2MCw2IEBACiAJbGlzdF9hZGRfdGFpbCgmbWFkX2FnZW50X3ByaXYtPmFnZW50X2xpc3QsICZwb3J0X3ByaXYtPmFnZW50X2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKIAotCXNwaW5fbG9ja19pbml0KCZtYWRfYWdlbnRfcHJpdi0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5zZW5kX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+d2FpdF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmRvbmVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5ybXBwX2xpc3QpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+dGltZWRfd29yaywgdGltZW91dF9zZW5kcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF9saXN0KTsKLQlJTklUX1dPUksoJm1hZF9hZ2VudF9wcml2LT5sb2NhbF93b3JrLCBsb2NhbF9jb21wbGV0aW9ucyk7Ci0JYXRvbWljX3NldCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50LCAxKTsKLQlpbml0X2NvbXBsZXRpb24oJm1hZF9hZ2VudF9wcml2LT5jb21wKTsKLQogCXJldHVybiAmbWFkX2FnZW50X3ByaXYtPmFnZW50OwogCiBlcnJvcjQ6CkBAIC03NDMsOSArNzQyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfCBJQl9NQURfUkVTVUxUX0NPTlNVTUVEOgogCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBtYWRfcHJpdik7Ci0JCWtmcmVlKGxvY2FsKTsKLQkJcmV0ID0gMTsKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCWNhc2UgSUJfTUFEX1JFU1VMVF9TVUNDRVNTOgogCQkvKiBUcmVhdCBsaWtlIGFuIGluY29taW5nIHJlY2VpdmUgTUFEICovCiAJCXBvcnRfcHJpdiA9IGliX2dldF9tYWRfcG9ydChtYWRfYWdlbnRfcHJpdi0+YWdlbnQuZGV2aWNlLApAQCAtNzU2LDEwICs3NTMsMTIgQEAKIAkJCQkJCSAgICAgICAgJm1hZF9wcml2LT5tYWQubWFkKTsKIAkJfQogCQlpZiAoIXBvcnRfcHJpdiB8fCAhcmVjdl9tYWRfYWdlbnQpIHsKKwkJCS8qCisJCQkgKiBObyByZWNlaXZpbmcgYWdlbnQgc28gZHJvcCBwYWNrZXQgYW5kCisJCQkgKiBnZW5lcmF0ZSBzZW5kIGNvbXBsZXRpb24uCisJCQkgKi8KIAkJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIG1hZF9wcml2KTsKLQkJCWtmcmVlKGxvY2FsKTsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQl9CiAJCWxvY2FsLT5tYWRfcHJpdiA9IG1hZF9wcml2OwogCQlsb2NhbC0+cmVjdl9tYWRfYWdlbnQgPSByZWN2X21hZF9hZ2VudDsKQEAgLTIzNTYsNyArMjM1NSw3IEBACiAJc3RydWN0IGliX21hZF9sb2NhbF9wcml2YXRlICpsb2NhbDsKIAlzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgKnJlY3ZfbWFkX2FnZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJlY3YgPSAwOworCWludCBmcmVlX21hZDsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CiAJc3RydWN0IGliX21hZF9zZW5kX3djIG1hZF9zZW5kX3djOwogCkBAIC0yMzcwLDE0ICsyMzY5LDE1IEBACiAJCQkJICAgY29tcGxldGlvbl9saXN0KTsKIAkJbGlzdF9kZWwoJmxvY2FsLT5jb21wbGV0aW9uX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWRfYWdlbnRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlmcmVlX21hZCA9IDA7CiAJCWlmIChsb2NhbC0+bWFkX3ByaXYpIHsKIAkJCXJlY3ZfbWFkX2FnZW50ID0gbG9jYWwtPnJlY3ZfbWFkX2FnZW50OwogCQkJaWYgKCFyZWN2X21hZF9hZ2VudCkgewogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIHJlY2VpdmUgTUFEIGFnZW50IGZvciBsb2NhbCBjb21wbGV0aW9uXG4iKTsKKwkJCQlmcmVlX21hZCA9IDE7CiAJCQkJZ290byBsb2NhbF9zZW5kX2NvbXBsZXRpb247CiAJCQl9CiAKLQkJCXJlY3YgPSAxOwogCQkJLyoKIAkJCSAqIERlZmluZWQgYmVoYXZpb3IgaXMgdG8gY29tcGxldGUgcmVzcG9uc2UKIAkJCSAqIGJlZm9yZSByZXF1ZXN0CkBAIC0yNDIyLDcgKzI0MjIsNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWRfYWdlbnRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlhdG9taWNfZGVjKCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQpOwotCQlpZiAoIXJlY3YpCisJCWlmIChmcmVlX21hZCkKIAkJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIGxvY2FsLT5tYWRfcHJpdik7CiAJCWtmcmVlKGxvY2FsKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwppbmRleCAzYWYyYjg0Li41N2EzYzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKQEAgLTczNSw3ICs3MzUsNyBAQAogCQlnb3RvIGJhZDsKIAl9CiAKLQlpZiAocm1wcF9oZHItPnNlZ19udW0gPT0gX19jb25zdGFudF9odG9ubCgxKSkgeworCWlmIChybXBwX2hkci0+c2VnX251bSA9PSBjcHVfdG9fYmUzMigxKSkgewogCQlpZiAoIShpYl9nZXRfcm1wcF9mbGFncyhybXBwX2hkcikgJiBJQl9NR01UX1JNUFBfRkxBR19GSVJTVCkpIHsKIAkJCXJtcHBfc3RhdHVzID0gSUJfTUdNVF9STVBQX1NUQVRVU19CQURfU0VHOwogCQkJZ290byBiYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCA3ODYzYTUwLi4xODY1MDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTM5NSw2ICszOTUsOCBAQAogCX0KIAogCXNwaW5fbG9ja19pcnEoJnBvcnQtPmFoX2xvY2spOworCWlmIChwb3J0LT5zbV9haCkKKwkJa3JlZl9wdXQoJnBvcnQtPnNtX2FoLT5yZWYsIGZyZWVfc21fYWgpOwogCXBvcnQtPnNtX2FoID0gbmV3X2FoOwogCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+YWhfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCmluZGV4IGI0M2Y3ZDM2OC4uNWMwNGNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCkBAIC02NiwxMSArNjYsNiBAQAogCWludAkJCWluZGV4OwogfTsKIAotc3RhdGljIGlubGluZSBpbnQgaWJkZXZfaXNfYWxpdmUoY29uc3Qgc3RydWN0IGliX2RldmljZSAqZGV2KQotewotCXJldHVybiBkZXYtPnJlZ19zdGF0ZSA9PSBJQl9ERVZfUkVHSVNURVJFRDsKLX0KLQogc3RhdGljIHNzaXplX3QgcG9ydF9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC04MCw4ICs3NSw2IEBACiAKIAlpZiAoIXBvcnRfYXR0ci0+c2hvdykKIAkJcmV0dXJuIC1FSU87Ci0JaWYgKCFpYmRldl9pc19hbGl2ZShwLT5pYmRldikpCi0JCXJldHVybiAtRU5PREVWOwogCiAJcmV0dXJuIHBvcnRfYXR0ci0+c2hvdyhwLCBwb3J0X2F0dHIsIGJ1Zik7CiB9CkBAIC01NjIsOSArNTU1LDYgQEAKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwogCi0JaWYgKCFpYmRldl9pc19hbGl2ZShkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXN3aXRjaCAoZGV2LT5ub2RlX3R5cGUpIHsKIAljYXNlIFJETUFfTk9ERV9JQl9DQToJICByZXR1cm4gc3ByaW50ZihidWYsICIlZDogQ0FcbiIsIGRldi0+bm9kZV90eXBlKTsKIAljYXNlIFJETUFfTk9ERV9STklDOgkgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBSTklDXG4iLCBkZXYtPm5vZGVfdHlwZSk7CkBAIC01ODEsOSArNTcxLDYgQEAKIAlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgYXR0cjsKIAlzc2l6ZV90IHJldDsKIAotCWlmICghaWJkZXZfaXNfYWxpdmUoZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlyZXQgPSBpYl9xdWVyeV9kZXZpY2UoZGV2LCAmYXR0cik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTYwMCw5ICs1ODcsNiBAQAogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpYl9kZXZpY2UsIGRldik7CiAKLQlpZiAoIWliZGV2X2lzX2FsaXZlKGRldikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKIAkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopICZkZXYtPm5vZGVfZ3VpZClbMF0pLAogCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgJmRldi0+bm9kZV9ndWlkKVsxXSksCkBAIC04NDgsNiArODMyLDkgQEAKIAlzdHJ1Y3Qga29iamVjdCAqcCwgKnQ7CiAJc3RydWN0IGliX3BvcnQgKnBvcnQ7CiAKKwkvKiBIb2xkIGtvYmplY3QgdW50aWwgaWJfZGVhbGxvY19kZXZpY2UoKSAqLworCWtvYmplY3RfZ2V0KCZkZXZpY2UtPmRldi5rb2JqKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0LCAmZGV2aWNlLT5wb3J0X2xpc3QsIGVudHJ5KSB7CiAJCWxpc3RfZGVsKCZwLT5lbnRyeSk7CiAJCXBvcnQgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGliX3BvcnQsIGtvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwppbmRleCAxMTNmM2MwLi43ZDc5YWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwpAQCAtNzYsNyArNzYsNiBAQAogc3RhdGljIHZvaWQgYzJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyBpbnQgYzJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CiBzdGF0aWMgdm9pZCBjMl9yZXNldChzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmMyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGMyX3BjaV90YWJsZVtdID0gewogCXsgUENJX0RFVklDRSgweDE4YjgsIDB4YjAwMSkgfSwKQEAgLTM0OSw3ICszNDgsNyBAQAogCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfQUREUik7CiAJCQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoVFhQX0hUWERfRE9ORSksCiAJCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7Ci0JCQkJYzJfcG9ydC0+bmV0c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCWMyX3BvcnQtPm5ldGRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKIAkJCQlfX3Jhd193cml0ZXcoMCwKQEAgLTQ1Nyw3ICs0NTYsNyBAQAogCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOwogCiAJcHJfZGVidWcoInBhY2tldCBkcm9wcGVkXG4iKTsKLQljMl9wb3J0LT5uZXRzdGF0cy5yeF9kcm9wcGVkKys7CisJYzJfcG9ydC0+bmV0ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiB9CiAKIHN0YXRpYyB2b2lkIGMyX3J4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNTMyLDggKzUzMSw4IEBACiAJCW5ldGlmX3J4KHNrYik7CiAKIAkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJYzJfcG9ydC0+bmV0c3RhdHMucnhfcGFja2V0cysrOwotCQljMl9wb3J0LT5uZXRzdGF0cy5yeF9ieXRlcyArPSBidWZsZW47CisJCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGJ1ZmxlbjsKIAl9CiAKIAkvKiBTYXZlIHdoZXJlIHdlIGxlZnQgb2ZmICovCkBAIC03OTcsOCArNzk2LDggQEAKIAlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9SRUFEWSksCiAJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7CiAKLQljMl9wb3J0LT5uZXRzdGF0cy50eF9wYWNrZXRzKys7Ci0JYzJfcG9ydC0+bmV0c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOworCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOwogCiAJLyogTG9vcCB0aHJ1IGFkZGl0aW9uYWwgZGF0YSBmcmFnbWVudHMgYW5kIHF1ZXVlIHRoZW0gKi8KIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgewpAQCAtODIzLDggKzgyMiw4IEBACiAJCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9SRUFEWSksCiAJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKIAotCQkJYzJfcG9ydC0+bmV0c3RhdHMudHhfcGFja2V0cysrOwotCQkJYzJfcG9ydC0+bmV0c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOworCQkJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKIAkJfQogCX0KIApAQCAtODQ1LDEzICs4NDQsNiBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYzJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JcmV0dXJuICZjMl9wb3J0LT5uZXRzdGF0czsKLX0KLQogc3RhdGljIHZvaWQgYzJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTg4MCw2ICs4NzIsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGMyX25ldGRldiA9IHsKKwkubmRvX29wZW4gCQk9IGMyX3VwLAorCS5uZG9fc3RvcCAJCT0gYzJfZG93biwKKwkubmRvX3N0YXJ0X3htaXQJCT0gYzJfeG1pdF9mcmFtZSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gYzJfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYzJfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBJbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmMyX2RldmluaXQoc3RydWN0IGMyX2RldiAqYzJkZXYsCiAJCQkJICAgICB2b2lkIF9faW9tZW0gKiBtbWlvX2FkZHIpCkBAIC04OTQsMTIgKzg5Niw3IEBACiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZjMmRldi0+cGNpZGV2LT5kZXYpOwogCi0JbmV0ZGV2LT5vcGVuID0gYzJfdXA7Ci0JbmV0ZGV2LT5zdG9wID0gYzJfZG93bjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGMyX3htaXRfZnJhbWU7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBjMl9nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gYzJfdHhfdGltZW91dDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBjMl9jaGFuZ2VfbXR1OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjMl9uZXRkZXY7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEMyX1RYX1RJTUVPVVQ7CiAJbmV0ZGV2LT5pcnEgPSBjMmRldi0+cGNpZGV2LT5pcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmgKaW5kZXggZDEyYTI0YS4uZjdmZjY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmgKQEAgLTM2OSw4ICszNjksNiBAQAogCXVuc2lnbmVkIGxvbmcgbWVtX3NpemU7CiAKIAl1MzIgcnhfYnVmX3NpemU7Ci0KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRzdGF0czsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCmluZGV4IDUxMTlkNjUuLmYxOTQ4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCkBAIC03MDgsMjYgKzcwOCwyNyBAQAogCiBzdGF0aWMgaW50IGMyX3BzZXVkb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KQogewotCWludCByZXQgPSAwOwotCiAJaWYgKG5ld19tdHUgPCBFVEhfWkxFTiB8fCBuZXdfbXR1ID4gRVRIX0pVTUJPX01UVSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAKIAkvKiBUT0RPOiBUZWxsIHJuaWMgYWJvdXQgbmV3IHJtZGEgaW50ZXJmYWNlIG10dSAqLwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzJfcHNldWRvX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBjMl9wc2V1ZG9fdXAsCisJLm5kb19zdG9wIAkJPSBjMl9wc2V1ZG9fZG93biwKKwkubmRvX3N0YXJ0X3htaXQgCT0gYzJfcHNldWRvX3htaXRfZnJhbWUsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGMyX3BzZXVkb19jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQluZXRkZXYtPm9wZW4gPSBjMl9wc2V1ZG9fdXA7Ci0JbmV0ZGV2LT5zdG9wID0gYzJfcHNldWRvX2Rvd247Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjMl9wc2V1ZG9feG1pdF9mcmFtZTsKLQluZXRkZXYtPmdldF9zdGF0cyA9IE5VTEw7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gTlVMTDsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IE5VTEw7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gYzJfcHNldWRvX2NoYW5nZV9tdHU7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmMyX3BzZXVkb19uZXRkZXZfb3BzOworCiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDA7CiAJbmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCW5ldGRldi0+bXR1ID0gMTUwMDsKQEAgLTczNSw3ICs3MzYsNiBAQAogCW5ldGRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKIAluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CiAJbmV0ZGV2LT5mbGFncyB8PSBJRkZfTk9BUlA7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmMyX3BzZXVkb19uZXRkZXZfaW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMKaW5kZXggNGRjZjA4Yi4uYTRhODJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCWlmICgoQ1FFX09QQ09ERSgqY3FlKSA9PSBUM19SRUFEX1JFU1ApICYmIFNRX1RZUEUoKmNxZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKChDUUVfT1BDT0RFKCpjcWUpID09IFQzX1NFTkQpICYmIFJRX1RZUEUoKmNxZSkgJiYKKwlpZiAoQ1FFX1NFTkRfT1BDT0RFKCpjcWUpICYmIFJRX1RZUEUoKmNxZSkgJiYKIAkgICAgUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKQogCQlyZXR1cm4gMDsKIApAQCAtNzAxLDYgKzcwMSw5IEBACiAJdTMyIHN0YWdfaWR4OwogCXUzMiB3cHRyOwogCisJaWYgKHJkZXZfcC0+ZmxhZ3MpCisJCXJldHVybiAtRUlPOworCiAJc3RhZ19zdGF0ZSA9IHN0YWdfc3RhdGUgPiAwOwogCXN0YWdfaWR4ID0gKCpzdGFnKSA+PiA4OwogCkBAIC05MzgsNiArOTQxLDIzIEBACiAJaWYgKCFyZGV2X3AtPnQzY2Rldl9wKQogCQlyZGV2X3AtPnQzY2Rldl9wID0gZGV2MnQzY2RldihuZXRkZXZfcCk7CiAJcmRldl9wLT50M2NkZXZfcC0+dWxwID0gKHZvaWQgKikgcmRldl9wOworCisJZXJyID0gcmRldl9wLT50M2NkZXZfcC0+Y3RsKHJkZXZfcC0+dDNjZGV2X3AsIEdFVF9FTUJFRERFRF9JTkZPLAorCQkJCQkgJihyZGV2X3AtPmZ3X2luZm8pKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgdDNjZGV2X3AoJXApLT5jdGwgcmV0dXJuZWQgZXJyb3IgJWQuXG4iLAorCQkgICAgIF9fZnVuY19fLCByZGV2X3AtPnQzY2Rldl9wLCBlcnIpOworCQlnb3RvIGVycjE7CisJfQorCWlmIChHX0ZXX1ZFUlNJT05fTUFKT1IocmRldl9wLT5md19pbmZvLmZ3X3ZlcnMpICE9IENYSU9fRldfTUFKKSB7CisJCXByaW50ayhLRVJOX0VSUiBNT0QgImZhdGFsIGZpcm13YXJlIHZlcnNpb24gbWlzbWF0Y2g6ICIKKwkJICAgICAgICJuZWVkIHZlcnNpb24gJXUgYnV0IGFkYXB0ZXIgaGFzIHZlcnNpb24gJXVcbiIsCisJCSAgICAgICBDWElPX0ZXX01BSiwKKwkJICAgICAgIEdfRldfVkVSU0lPTl9NQUpPUihyZGV2X3AtPmZ3X2luZm8uZndfdmVycykpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjE7CisJfQorCiAJZXJyID0gcmRldl9wLT50M2NkZXZfcC0+Y3RsKHJkZXZfcC0+dDNjZGV2X3AsIFJETUFfR0VUX1BBUkFNUywKIAkJCQkJICYocmRldl9wLT5ybmljX2luZm8pKTsKIAlpZiAoZXJyKSB7CkBAIC0xMjA0LDExICsxMjI0LDEyIEBACiAJCX0KIAogCQkvKiBpbmNvbWluZyBTRU5EIHdpdGggbm8gcmVjZWl2ZSBwb3N0ZWQgZmFpbHVyZXMgKi8KLQkJaWYgKChDUUVfT1BDT0RFKCpod19jcWUpID09IFQzX1NFTkQpICYmIFJRX1RZUEUoKmh3X2NxZSkgJiYKKwkJaWYgKENRRV9TRU5EX09QQ09ERSgqaHdfY3FlKSAmJiBSUV9UWVBFKCpod19jcWUpICYmCiAJCSAgICBRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpIHsKIAkJCXJldCA9IC0xOwogCQkJZ290byBza2lwX2NxZTsKIAkJfQorCQlCVUdfT04oKCpjcWVfZmx1c2hlZCA9PSAwKSAmJiAhU1dfQ1FFKCpod19jcWUpKTsKIAkJZ290byBwcm9jX2NxZTsKIAl9CiAKQEAgLTEyMjMsNiArMTI0NCwxMyBAQAogCQkgKiB0aGVuIHdlIGNvbXBsZXRlIHRoaXMgd2l0aCBUUFRfRVJSX01TTiBhbmQgbWFyayB0aGUgd3EgaW4KIAkJICogZXJyb3IuCiAJCSAqLworCisJCWlmIChRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpIHsKKwkJCXdxLT5lcnJvciA9IDE7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gc2tpcF9jcWU7CisJCX0KKwogCQlpZiAodW5saWtlbHkoKENRRV9XUklEX01TTigqaHdfY3FlKSAhPSAod3EtPnJxX3JwdHIgKyAxKSkpKSB7CiAJCQl3cS0+ZXJyb3IgPSAxOwogCQkJaHdfY3FlLT5oZWFkZXIgfD0gaHRvbmwoVl9DUUVfU1RBVFVTKFRQVF9FUlJfTVNOKSk7CkBAIC0xMjc3LDYgKzEzMDUsNyBAQAogCQkJY3hpb19oYWxfcGJscG9vbF9mcmVlKHdxLT5yZGV2LAogCQkJCXdxLT5ycVtRX1BUUjJJRFgod3EtPnJxX3JwdHIsCiAJCQkJd3EtPnJxX3NpemVfbG9nMildLnBibF9hZGRyLCBUM19TVEFHMF9QQkxfU0laRSk7CisJCUJVR19PTihRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpOwogCQl3cS0+cnFfcnB0cisrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAppbmRleCA2NTZmZTQ3Li4wOTRhNjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaApAQCAtNjEsNiArNjEsOCBAQAogCiAjZGVmaW5lIFQzX01BWF9ERVZfTkFNRV9MRU4gMzIKIAorI2RlZmluZSBDWElPX0ZXX01BSiA3CisKIHN0cnVjdCBjeGlvX2hhbF9jdHJsX3FwIHsKIAl1MzIgd3B0cjsKIAl1MzIgcnB0cjsKQEAgLTEwOCw2ICsxMTAsOSBAQAogCXN0cnVjdCBnZW5fcG9vbCAqcGJsX3Bvb2w7CiAJc3RydWN0IGdlbl9wb29sICpycXRfcG9vbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCBjaF9lbWJlZGRlZF9pbmZvIGZ3X2luZm87CisJdTMyCWZsYWdzOworI2RlZmluZQlDWElPX0VSUk9SX0ZBVEFMCTEKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGN4aW9fbnVtX3N0YWdzKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCmluZGV4IDA0NjE4ZjcuLmZmOWJlMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaApAQCAtNjA0LDYgKzYwNCwxMiBAQAogI2RlZmluZSBDUUVfU1RBVFVTKHgpICAgICAoR19DUUVfU1RBVFVTKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSkKICNkZWZpbmUgQ1FFX09QQ09ERSh4KSAgICAgKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkpCiAKKyNkZWZpbmUgQ1FFX1NFTkRfT1BDT0RFKHgpKCBcCisJKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkgPT0gVDNfU0VORCkgfHwgXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkRfV0lUSF9TRSkgfHwgXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkRfV0lUSF9JTlYpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfU0VfSU5WKSkKKwogI2RlZmluZSBDUUVfTEVOKHgpICAgICAgICAoYmUzMl90b19jcHUoKHgpLmxlbikpCiAKIC8qIHVzZWQgZm9yIFJRIGNvbXBsZXRpb24gcHJvY2Vzc2luZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKaW5kZXggNDQ4OWM4OS4uMzdhNGZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCkBAIC01MSwxMyArNTEsMTUgQEAKIAogc3RhdGljIHZvaWQgb3Blbl9ybmljX2RldihzdHJ1Y3QgdDNjZGV2ICopOwogc3RhdGljIHZvaWQgY2xvc2Vfcm5pY19kZXYoc3RydWN0IHQzY2RldiAqKTsKK3N0YXRpYyB2b2lkIGl3Y2hfZXJyX2hhbmRsZXIoc3RydWN0IHQzY2RldiAqLCB1MzIsIHUzMik7CiAKIHN0cnVjdCBjeGdiM19jbGllbnQgdDNjX2NsaWVudCA9IHsKIAkubmFtZSA9ICJpd19jeGdiMyIsCiAJLmFkZCA9IG9wZW5fcm5pY19kZXYsCiAJLnJlbW92ZSA9IGNsb3NlX3JuaWNfZGV2LAogCS5oYW5kbGVycyA9IHQzY19oYW5kbGVycywKLQkucmVkaXJlY3QgPSBpd2NoX2VwX3JlZGlyZWN0CisJLnJlZGlyZWN0ID0gaXdjaF9lcF9yZWRpcmVjdCwKKwkuZXJyX2hhbmRsZXIgPSBpd2NoX2Vycl9oYW5kbGVyCiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGRldl9saXN0KTsKQEAgLTE2MCw2ICsxNjIsMTcgQEAKIAltdXRleF91bmxvY2soJmRldl9tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIGl3Y2hfZXJyX2hhbmRsZXIoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKQoreworCXN0cnVjdCBjeGlvX3JkZXYgKnJkZXYgPSB0ZGV2LT51bHA7CisKKwlpZiAoc3RhdHVzID09IE9GRkxPQURfU1RBVFVTX0RPV04pCisJCXJkZXYtPmZsYWdzID0gQ1hJT19FUlJPUl9GQVRBTDsKKworCXJldHVybjsKKworfQorCiBzdGF0aWMgaW50IF9faW5pdCBpd2NoX2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCmluZGV4IDQ0ZTkzNmUuLjg2OTk5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwpAQCAtMTY3OCw2ICsxNjc4LDkgQEAKIHsKIAlzdHJ1Y3QgaXdjaF9lcCAqZXAgPSBjdHg7CiAKKwlpZiAoc3RhdGVfcmVhZCgmZXAtPmNvbSkgIT0gRlBEVV9NT0RFKQorCQlyZXR1cm4gQ1BMX1JFVF9CVUZfRE9ORTsKKwogCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBjcGxfcmRtYV90ZXJtaW5hdGUpKTsKIAlQREJHKCIlcyBzYXZpbmcgJWQgYnl0ZXMgb2YgdGVybSBtc2dcbiIsIF9fZnVuY19fLCBza2ItPmxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYwppbmRleCA3YjY3YTY3Li43NDNjNWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKQEAgLTE3OSwxMSArMTc5LDYgQEAKIAljYXNlIFRQVF9FUlJfQk9VTkQ6CiAJY2FzZSBUUFRfRVJSX0lOVkFMSURBVEVfU0hBUkVEX01SOgogCWNhc2UgVFBUX0VSUl9JTlZBTElEQVRFX01SX1dJVEhfTVdfQk9VTkQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgLSBDUUUgRXJyIHFwaWQgMHgleCBvcGNvZGUgJWQgc3RhdHVzIDB4JXggIgotCQkgICAgICAgInR5cGUgJWQgd3JpZC5oaSAweCV4IHdyaWQubG8gMHgleCBcbiIsIF9fZnVuY19fLAotCQkgICAgICAgQ1FFX1FQSUQocnNwX21zZy0+Y3FlKSwgQ1FFX09QQ09ERShyc3BfbXNnLT5jcWUpLAotCQkgICAgICAgQ1FFX1NUQVRVUyhyc3BfbXNnLT5jcWUpLCBDUUVfVFlQRShyc3BfbXNnLT5jcWUpLAotCQkgICAgICAgQ1FFX1dSSURfSEkocnNwX21zZy0+Y3FlKSwgQ1FFX1dSSURfTE9XKHJzcF9tc2ctPmNxZSkpOwogCQkoKmNocC0+aWJjcS5jb21wX2hhbmRsZXIpKCZjaHAtPmliY3EsIGNocC0+aWJjcS5jcV9jb250ZXh0KTsKIAkJcG9zdF9xcF9ldmVudChybmljcCwgY2hwLCByc3BfbXNnLCBJQl9FVkVOVF9RUF9BQ0NFU1NfRVJSLCAxKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCAxOTY2MWIyLi5jNzU4ZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTk5LDggKzk5LDggQEAKIAlpZiAod3ItPm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NKSB7CiAJCXBsZW4gPSA0OwogCQl3cWUtPndyaXRlLnNnbFswXS5zdGFnID0gd3ItPmV4LmltbV9kYXRhOwotCQl3cWUtPndyaXRlLnNnbFswXS5sZW4gPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOwotCQl3cWUtPndyaXRlLm51bV9zZ2xlID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKKwkJd3FlLT53cml0ZS5zZ2xbMF0ubGVuID0gY3B1X3RvX2JlMzIoMCk7CisJCXdxZS0+d3JpdGUubnVtX3NnbGUgPSBjcHVfdG9fYmUzMigwKTsKIAkJKmZsaXRfY250ID0gNjsKIAl9IGVsc2UgewogCQlwbGVuID0gMDsKQEAgLTE5NSwxNSArMTk1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUQkQ6IHRoaXMgaXMgZ29pbmcgdG8gYmUgbW92ZWQgdG8gZmlybXdhcmUuIE1pc3NpbmcgcGRpZC9xcGlkIGNoZWNrIGZvciBub3cuCi0gKi8KIHN0YXRpYyBpbnQgaXdjaF9zZ2wycGJsX21hcChzdHJ1Y3QgaXdjaF9kZXYgKnJocCwgc3RydWN0IGliX3NnZSAqc2dfbGlzdCwKIAkJCSAgICB1MzIgbnVtX3NnbGUsIHUzMiAqIHBibF9hZGRyLCB1OCAqIHBhZ2Vfc2l6ZSkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaXdjaF9tciAqbWhwOwotCXUzMiBvZmZzZXQ7CisJdTY0IG9mZnNldDsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3NnbGU7IGkrKykgewogCiAJCW1ocCA9IGdldF9taHAocmhwLCAoc2dfbGlzdFtpXS5sa2V5KSA+PiA4KTsKQEAgLTIzNSw4ICsyMzIsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJb2Zmc2V0ID0gc2dfbGlzdFtpXS5hZGRyIC0gbWhwLT5hdHRyLnZhX2ZibzsKLQkJb2Zmc2V0ICs9ICgodTMyKSBtaHAtPmF0dHIudmFfZmJvKSAlCi0JCSAgICAgICAgICAoMVVMIDw8ICgxMiArIG1ocC0+YXR0ci5wYWdlX3NpemUpKTsKKwkJb2Zmc2V0ICs9IG1ocC0+YXR0ci52YV9mYm8gJgorCQkJICAoKDFVTCA8PCAoMTIgKyBtaHAtPmF0dHIucGFnZV9zaXplKSkgLSAxKTsKIAkJcGJsX2FkZHJbaV0gPSAoKG1ocC0+YXR0ci5wYmxfYWRkciAtCiAJCQkgICAgICAgIHJocC0+cmRldi5ybmljX2luZm8ucGJsX2Jhc2UpID4+IDMpICsKIAkJCSAgICAgIChvZmZzZXQgPj4gKDEyICsgbWhwLT5hdHRyLnBhZ2Vfc2l6ZSkpOwpAQCAtMjY2LDggKzI2Myw4IEBACiAJCXdxZS0+cmVjdi5zZ2xbaV0ubGVuID0gY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKIAogCQkvKiB0byBpbiB0aGUgV1FFID09IHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSAqLwotCQl3cWUtPnJlY3Yuc2dsW2ldLnRvID0gY3B1X3RvX2JlNjQoKCh1MzIpIHdyLT5zZ19saXN0W2ldLmFkZHIpICUKLQkJCQkoMVVMIDw8ICgxMiArIHBhZ2Vfc2l6ZVtpXSkpKTsKKwkJd3FlLT5yZWN2LnNnbFtpXS50byA9IGNwdV90b19iZTY0KCgodTMyKXdyLT5zZ19saXN0W2ldLmFkZHIpICYKKwkJCQkoKDFVTCA8PCAoMTIgKyBwYWdlX3NpemVbaV0pKSAtIDEpKTsKIAogCQkvKiBwYmxfYWRkciBpcyB0aGUgYWRhcHRlcnMgYWRkcmVzcyBpbiB0aGUgUEJMICovCiAJCXdxZS0+cmVjdi5wYmxfYWRkcltpXSA9IGNwdV90b19iZTMyKHBibF9hZGRyW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCmluZGV4IDQ0NDQ3YWEuLmM1NjhiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwpAQCAtNDYsMTEgKzQ2LDExIEBACiAjaW5jbHVkZSAiZWhjYV9pdmVyYnMuaCIKICNpbmNsdWRlICJoY3BfaWYuaCIKIAotI2RlZmluZSBJQl9NQURfU1RBVFVTX1JFRElSRUNUCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX01FVEhPRAlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKKyNkZWZpbmUgSUJfTUFEX1NUQVRVU19SRURJUkVDVAkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX1ZFUlNJT04JY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX01FVEhPRAljcHVfdG9fYmUxNigweDAwMDgpCiAKLSNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJX19jb25zdGFudF9odG9ucygweDAwMDEpCisjZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCWNwdV90b19iZTE2KDB4MDAwMSkKIAogLyoqCiAgKiBlaGNhX2RlZmluZV9zcXAgLSBEZWZpbmVzIHNwZWNpYWwgcXVldWUgcGFpciAxIChHU0kgUVApLiBXaGVuIHNwZWNpYWwgcXVldWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCA2OWMwY2UzLi5jYjlkYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0yNzE1LDcgKzI3MTUsNyBAQAogICogdG8gcHJldmVudCBIb0wgYmxvY2tpbmcsIHRoZW4gc3RhcnQgdGhlIEhvTCB0aW1lciB0aGF0CiAgKiBwZXJpb2RpY2FsbHkgY29udGludWVzLCB0aGVuIHN0b3AgcHJvY3MsIHNvIHRoZXkgY2FuIGRldGVjdAogICogbGluayBkb3duIGlmIHRoZXkgd2FudCwgYW5kIGRvIHNvbWV0aGluZyBhYm91dCBpdC4KLSAqIFRpbWVyIG1heSBhbHJlYWR5IGJlIHJ1bm5pbmcsIHNvIHVzZSBfX21vZF90aW1lciwgbm90IGFkZF90aW1lci4KKyAqIFRpbWVyIG1heSBhbHJlYWR5IGJlIHJ1bm5pbmcsIHNvIHVzZSBtb2RfdGltZXIsIG5vdCBhZGRfdGltZXIuCiAgKi8KIHZvaWQgaXBhdGhfaG9sX2Rvd24oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewpAQCAtMjcyNCw3ICsyNzI0LDcgQEAKIAlkZC0+aXBhdGhfaG9sX25leHQgPSBJUEFUSF9IT0xfRE9XTkNPTlQ7CiAJZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzID0gamlmZmllcyArCiAJCW1zZWNzX3RvX2ppZmZpZXMoaXBhdGhfaG9sX3RpbWVvdXRfbXMpOwotCV9fbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLCBkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOworCW1vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwgZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzKTsKIH0KIAogLyoKQEAgLTI3NjMsNyArMjc2Myw3IEBACiAJZWxzZSB7CiAJCWRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhpcGF0aF9ob2xfdGltZW91dF9tcyk7Ci0JCV9fbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLAorCQltb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsCiAJCQlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwppbmRleCBkYzM3Mjc3Li5mYzcxODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCkBAIC03NzIsOCArNzcyLDggQEAKIAkJCSAiMHgleCwgbm90IDB4JXhcbiIsIGNzdW0sIGlmcC0+aWZfY3N1bSk7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSAwVUxMIHx8Ci0JICAgICooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSBfX2NvbnN0YW50X2NwdV90b19iZTY0KC0xTEwpKSB7CisJaWYgKCooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSBjcHVfdG9fYmU2NCgwKSB8fAorCSAgICAqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gfmNwdV90b19iZTY0KDApKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJJbnZhbGlkIEdVSUQgJWxseCBmcm9tIGZsYXNoOyAiCiAJCQkgICAgICAiaWdub3JpbmdcbiIsCiAJCQkgICAgICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBpZnAtPmlmX2d1aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCmluZGV4IDY0YWVlZmIuLjA3Nzg3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWlmICghYWRkcnMpIHsKIAkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBzaGFkb3cgZG1hIGhhbmRsZSAiCiAJCQkgICAgICAiYXJyYXksIG5vIGV4cGVjdGVkIHNlbmRzIVxuIik7Ci0JCXZmcmVlKGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKKwkJdmZyZWUocGFnZXMpOwogCQlkZC0+aXBhdGhfcGFnZXNoYWRvdyA9IE5VTEw7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKaW5kZXggMTdhMTIzMS4uMTZhNzAyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwpAQCAtMzcsMTAgKzM3LDEwIEBACiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAotI2RlZmluZSBJQl9TTVBfVU5TVVBfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhPRAlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKLSNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhfQVRUUglfX2NvbnN0YW50X2h0b25zKDB4MDAwQykKLSNkZWZpbmUgSUJfU01QX0lOVkFMSURfRklFTEQJX19jb25zdGFudF9odG9ucygweDAwMUMpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9WRVJTSU9OCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhPRAljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIX0FUVFIJY3B1X3RvX2JlMTYoMHgwMDBDKQorI2RlZmluZSBJQl9TTVBfSU5WQUxJRF9GSUVMRAljcHVfdG9fYmUxNigweDAwMUMpCiAKIHN0YXRpYyBpbnQgcmVwbHkoc3RydWN0IGliX3NtcCAqc21wKQogewpAQCAtNzg5LDEyICs3ODksMTIgQEAKIAlyZXR1cm4gcmVjdl9zdWJuX2dldF9wa2V5dGFibGUoc21wLCBpYmRldik7CiB9CiAKLSNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfQ09OVFJPTAlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFQJX19jb25zdGFudF9odG9ucygweDAwMTEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxMikKLSNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlNfRVhUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFEKQotI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVF9FWFQJX19jb25zdGFudF9odG9ucygweDAwMUUpCisjZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19DT05UUk9MCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFQJY3B1X3RvX2JlMTYoMHgwMDExKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSUwkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSU19FWFQJY3B1X3RvX2JlMTYoMHgwMDFEKQorI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVF9FWFQJY3B1X3RvX2JlMTYoMHgwMDFFKQogCiBzdHJ1Y3QgaWJfcGVyZiB7CiAJdTggYmFzZV92ZXJzaW9uOwpAQCAtODg0LDE5ICs4ODQsMTkgQEAKIAlfX2JlMzIgcG9ydF9yY3ZfcGFja2V0czsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElCX1BNQV9TRUxfU1lNQk9MX0VSUk9SCQkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9TRUxfTElOS19FUlJPUl9SRUNPVkVSWQkJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1BNQV9TRUxfTElOS19ET1dORUQJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9FUlJPUlMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1JFTVBIWVNfRVJST1JTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9ESVNDQVJEUwkJX19jb25zdGFudF9odG9ucygweDAwNDApCi0jZGVmaW5lIElCX1BNQV9TRUxfTE9DQUxfTElOS19JTlRFR1JJVFlfRVJST1JTCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAwKQotI2RlZmluZSBJQl9QTUFfU0VMX0VYQ0VTU0lWRV9CVUZGRVJfT1ZFUlJVTlMJX19jb25zdGFudF9odG9ucygweDA0MDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9WTDE1X0RST1BQRUQJCV9fY29uc3RhbnRfaHRvbnMoMHgwODAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MTAwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MjAwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDQwMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDgwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfU1lNQk9MX0VSUk9SCQkJY3B1X3RvX2JlMTYoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRVJST1JfUkVDT1ZFUlkJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0RPV05FRAkJCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9FUlJPUlMJCWNwdV90b19iZTE2KDB4MDAwOCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUwljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RJU0NBUkRTCQljcHVfdG9fYmUxNigweDAwNDApCisjZGVmaW5lIElCX1BNQV9TRUxfTE9DQUxfTElOS19JTlRFR1JJVFlfRVJST1JTCWNwdV90b19iZTE2KDB4MDIwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9FWENFU1NJVkVfQlVGRkVSX09WRVJSVU5TCWNwdV90b19iZTE2KDB4MDQwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1ZMMTVfRFJPUFBFRAkJY3B1X3RvX2JlMTYoMHgwODAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9EQVRBCQljcHVfdG9fYmUxNigweDEwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQQkJY3B1X3RvX2JlMTYoMHgyMDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9QQUNLRVRTCQljcHVfdG9fYmUxNigweDQwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHg4MDAwKQogCiBzdHJ1Y3QgaWJfcG1hX3BvcnRjb3VudGVyc19leHQgewogCXU4IHJlc2VydmVkOwpAQCAtOTEzLDE0ICs5MTMsMTQgQEAKIAlfX2JlNjQgcG9ydF9tdWx0aWNhc3RfcmN2X3BhY2tldHM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfREFUQQkJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9YTUlUX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1JDVl9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDIwKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1hNSVRfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDA0MCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9SQ1ZfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDA4MCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEJCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfREFUQQkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9QQUNLRVRTCQljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1hNSVRfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1JDVl9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDAyMCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9YTUlUX1BBQ0tFVFMJY3B1X3RvX2JlMTYoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1JDVl9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDA4MCkKIAogc3RhdGljIGludCByZWN2X3BtYV9nZXRfY2xhc3Nwb3J0aW5mbyhzdHJ1Y3QgaWJfcGVyZiAqcG1wKQogewpAQCAtOTMzLDcgKzkzMyw3IEBACiAJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOwogCiAJLyogSW5kaWNhdGUgQWxsUG9ydFNlbGVjdCBpcyB2YWxpZCAob25seSBvbmUgcG9ydCBhbnl3YXkpICovCi0JcC0+Y2FwX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDEgPDwgOCk7CisJcC0+Y2FwX21hc2sgPSBjcHVfdG9fYmUxNigxIDw8IDgpOwogCXAtPmJhc2VfdmVyc2lvbiA9IDE7CiAJcC0+Y2xhc3NfdmVyc2lvbiA9IDE7CiAJLyoKQEAgLTk1MSwxMiArOTUxLDExIEBACiAgKiBXZSBzdXBwb3J0IDUgY291bnRlcnMgd2hpY2ggb25seSBjb3VudCB0aGUgbWFuZGF0b3J5IHF1YW50aXRpZXMuCiAgKi8KICNkZWZpbmUgQ09VTlRFUl9NQVNLKHEsIG4pIChxIDw8ICgoOSAtIG4pICogMykpCi0jZGVmaW5lIENPVU5URVJfTUFTSzBfOSBcCi0JX19jb25zdGFudF9jcHVfdG9fYmUzMihDT1VOVEVSX01BU0soMSwgMCkgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDEpIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAyKSB8IFwKLQkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMykgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDQpKQorI2RlZmluZSBDT1VOVEVSX01BU0swXzkgY3B1X3RvX2JlMzIoQ09VTlRFUl9NQVNLKDEsIDApIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgMSkgfCBcCisJCQkJICAgIENPVU5URVJfTUFTSygxLCAyKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDMpIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgNCkpCiAKIHN0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X3BvcnRzYW1wbGVzY29udHJvbChzdHJ1Y3QgaWJfcGVyZiAqcG1wLAogCQkJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKQEAgLTExMzcsNyArMTEzNiw3IEBACiAJCXN0YXR1cyA9IGRldi0+cG1hX3NhbXBsZV9zdGF0dXM7CiAJcC0+c2FtcGxlX3N0YXR1cyA9IGNwdV90b19iZTE2KHN0YXR1cyk7CiAJLyogNjQgYml0cyAqLwotCXAtPmV4dGVuZGVkX3dpZHRoID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKKwlwLT5leHRlbmRlZF93aWR0aCA9IGNwdV90b19iZTMyKDB4ODAwMDAwMDApOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+cG1hX2NvdW50ZXJfc2VsZWN0KTsgaSsrKQogCQlwLT5jb3VudGVyW2ldID0gKHN0YXR1cyAhPSBJQl9QTUFfU0FNUExFX1NUQVRVU19ET05FKSA/IDAgOgogCQkgICAgY3B1X3RvX2JlNjQoCkBAIC0xMTg1LDcgKzExODQsNyBAQAogCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAogCWlmIChjbnRycy5zeW1ib2xfZXJyb3JfY291bnRlciA+IDB4RkZGRlVMKQotCQlwLT5zeW1ib2xfZXJyb3JfY291bnRlciA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPQogCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcik7CkBAIC0xMTk5LDE3ICsxMTk4LDE3IEBACiAJZWxzZQogCQlwLT5saW5rX2Rvd25lZF9jb3VudGVyID0gKHU4KWNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXI7CiAJaWYgKGNudHJzLnBvcnRfcmN2X2Vycm9ycyA+IDB4RkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnBvcnRfcmN2X2Vycm9ycyA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPQogCQkJY3B1X3RvX2JlMTYoKHUxNikgY250cnMucG9ydF9yY3ZfZXJyb3JzKTsKIAlpZiAoY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMpOwogCWlmIChjbnRycy5wb3J0X3htaXRfZGlzY2FyZHMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMucG9ydF94bWl0X2Rpc2NhcmRzKTsKQEAgLTEyMjAsMjQgKzEyMTksMjQgQEAKIAlwLT5sbGlfZWJvcl9lcnJvcnMgPSAoY250cnMubG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzIDw8IDQpIHwKIAkJY250cnMuZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9yczsKIAlpZiAoY250cnMudmwxNV9kcm9wcGVkID4gMHhGRkZGVUwpCi0JCXAtPnZsMTVfZHJvcHBlZCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+dmwxNV9kcm9wcGVkID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnZsMTVfZHJvcHBlZCA9IGNwdV90b19iZTE2KCh1MTYpY250cnMudmwxNV9kcm9wcGVkKTsKIAlpZiAoY250cnMucG9ydF94bWl0X2RhdGEgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9kYXRhID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF94bWl0X2RhdGEgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3htaXRfZGF0YSk7CiAJaWYgKGNudHJzLnBvcnRfcmN2X2RhdGEgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfcmN2X2RhdGEgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCQlwLT5wb3J0X3Jjdl9kYXRhID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9kYXRhID0gY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3Jjdl9kYXRhKTsKIAlpZiAoY250cnMucG9ydF94bWl0X3BhY2tldHMgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF94bWl0X3BhY2tldHMgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0KIAkJCWNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF94bWl0X3BhY2tldHMpOwogCWlmIChjbnRycy5wb3J0X3Jjdl9wYWNrZXRzID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9wYWNrZXRzID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9IGNwdV90b19iZTMyKDB4RkZGRkZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9CiAJCQljcHVfdG9fYmUzMigodTMyKSBjbnRycy5wb3J0X3Jjdl9wYWNrZXRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKaW5kZXggOTE3MDcxMC4uNzliM2RiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKQEAgLTE3NDQsNyArMTc0NCw3IEBACiAJCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KIAkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCiAJCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCi0JCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCQkJY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOwogCQlicmVhazsKIAogCWNhc2UgT1AoUkRNQV9XUklURV9GSVJTVCk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYwppbmRleCA4ZTI1NWFkLi40YjA2OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZG1hLmMKQEAgLTc4MSwxMCArNzgxLDEwIEBACiAJCWRlc2NxcCA9ICZkZC0+aXBhdGhfc2RtYV9kZXNjcVtkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnRdLnF3WzBdOwogCWRlc2NxcCAtPSAyOwogCS8qIFNEbWFMYXN0RGVzYyAqLwotCWRlc2NxcFswXSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTEpOworCWRlc2NxcFswXSB8PSBjcHVfdG9fbGU2NCgxVUxMIDw8IDExKTsKIAlpZiAodHgtPnR4cmVxLmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX0lOVFJFUSkgewogCQkvKiBTRG1hSW50UmVxICovCi0JCWRlc2NxcFswXSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTUpOworCQlkZXNjcXBbMF0gfD0gY3B1X3RvX2xlNjQoMVVMTCA8PCAxNSk7CiAJfQogCiAJLyogQ29tbWl0IHdyaXRlcyB0byBtZW1vcnkgYW5kIGFkdmFuY2UgdGhlIHRhaWwgb24gdGhlIGNoaXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKaW5kZXggODJjYzU4OC4uMjJlNjA5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCQkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCiAJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkJICAgICAgIChvaGRyLT5idGhbMF0gJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCQkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCA5MWM3NGNjLi42MDc2Y2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJICovCiAJb2hkci0+YnRoWzFdID0gYWhfYXR0ci0+ZGxpZCA+PSBJUEFUSF9NVUxUSUNBU1RfTElEX0JBU0UgJiYKIAkJYWhfYXR0ci0+ZGxpZCAhPSBJUEFUSF9QRVJNSVNTSVZFX0xJRCA/Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoSVBBVEhfTVVMVElDQVNUX1FQTikgOgorCQljcHVfdG9fYmUzMihJUEFUSF9NVUxUSUNBU1RfUVBOKSA6CiAJCWNwdV90b19iZTMyKHdxZS0+d3Iud3IudWQucmVtb3RlX3Fwbik7CiAJb2hkci0+YnRoWzJdID0gY3B1X3RvX2JlMzIocXAtPnNfbmV4dF9wc24rKyAmIElQQVRIX1BTTl9NQVNLKTsKIAkvKgpAQCAtNTczLDcgKzU3Myw3IEBACiAJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLwogCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCi0JCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKwkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAogYmFpbDo7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwppbmRleCAwMTkwZWRjLi44NTU5MTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKQEAgLTIwOSwyMCArMjA5LDIwIEBACiAKIAltbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOwogCWlmICghbW0pCi0JCWdvdG8gYmFpbDsKKwkJcmV0dXJuOwogCiAJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3b3JrKQogCQlnb3RvIGJhaWxfbW07CiAKLQlnb3RvIGJhaWw7Ci0KIAlJTklUX1dPUksoJndvcmstPndvcmssIHVzZXJfcGFnZXNfYWNjb3VudCk7CiAJd29yay0+bW0gPSBtbTsKIAl3b3JrLT5udW1fcGFnZXMgPSBudW1fcGFnZXM7CiAKKwlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKKwlyZXR1cm47CisKIGJhaWxfbW06CiAJbW1wdXQobW0pOwotYmFpbDoKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKaW5kZXggODJkOWEwYi4uN2JmZjRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwpAQCAtNjY3LDEzICs2NjcsMTMgQEAKIAogc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2ZpcnN0X2Rlc2MwKF9fbGU2NCBkZXNjcSkKIHsKLQlyZXR1cm4gZGVzY3EgfCBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTIpOworCXJldHVybiBkZXNjcSB8IGNwdV90b19sZTY0KDFVTEwgPDwgMTIpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfbGFzdF9kZXNjMChfX2xlNjQgZGVzY3EpCiB7CiAJCQkJCSAgICAgIC8qIGxhc3QgKi8gIC8qIGRtYSBoZWFkICovCi0JcmV0dXJuIGRlc2NxIHwgX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDExIHwgMVVMTCA8PCAxMyk7CisJcmV0dXJuIGRlc2NxIHwgY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSB8IDFVTEwgPDwgMTMpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfZGVzYzEodTY0IGFkZHIpCkBAIC03NjMsNyArNzYzLDcgQEAKIAkJaWYgKG9mcyA+PSBJUEFUSF9TTUFMTEJVRl9EV09SRFMpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBwa3QtPm5hZGRyOyBpKyspIHsKIAkJCQlkZC0+aXBhdGhfc2RtYV9kZXNjcVtkdGFpbF0ucXdbMF0gfD0KLQkJCQkJX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDE0KTsKKwkJCQkJY3B1X3RvX2xlNjQoMVVMTCA8PCAxNCk7CiAJCQkJaWYgKCsrZHRhaWwgPT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250KQogCQkJCQlkdGFpbCA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCmluZGV4IGNkZjBlNmEuLjkyODlhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCkBAIC0xNTg1LDcgKzE1ODUsNyBAQAogCXU2NCBpYmNzdGF0OwogCiAJbWVtc2V0KHByb3BzLCAwLCBzaXplb2YoKnByb3BzKSk7Ci0JcHJvcHMtPmxpZCA9IGxpZCA/IGxpZCA6IF9fY29uc3RhbnRfYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOworCXByb3BzLT5saWQgPSBsaWQgPyBsaWQgOiBiZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CiAJcHJvcHMtPmxtYyA9IGRkLT5pcGF0aF9sbWM7CiAJcHJvcHMtPnNtX2xpZCA9IGRldi0+c21fbGlkOwogCXByb3BzLT5zbV9zbCA9IGRldi0+c21fc2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCmluZGV4IDExZTNmNjEuLmFlNmNmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC04NiwxMSArODYsMTEgQEAKICNkZWZpbmUgSUJfUE1BX1NBTVBMRV9TVEFUVVNfUlVOTklORwkweDAyCiAKIC8qIE1hbmRhdG9yeSBJQiBwZXJmb3JtYW5jZSBjb3VudGVyIHNlbGVjdCB2YWx1ZXMuICovCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfREFUQQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX0RBVEEJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfUEtUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAwMykKLSNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX1BLVFMJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfV0FJVAlfX2NvbnN0YW50X2h0b25zKDB4MDAwNSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9EQVRBCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX0RBVEEJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1BLVFMJY3B1X3RvX2JlMTYoMHgwMDAzKQorI2RlZmluZSBJQl9QTUFfUE9SVF9SQ1ZfUEtUUwljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfV0FJVAljcHVfdG9fYmUxNigweDAwMDUpCiAKIHN0cnVjdCBpYl9yZXRoIHsKIAlfX2JlNjQgdmFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCmluZGV4IDYwNmYxZTIuLjE5ZTY4YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCkBAIC0xNDcsNyArMTQ3LDggQEAKICAqIFNub29wIFNNIE1BRHMgZm9yIHBvcnQgaW5mbyBhbmQgUF9LZXkgdGFibGUgc2V0cywgc28gd2UgY2FuCiAgKiBzeW50aGVzaXplIExJRCBjaGFuZ2UgYW5kIFBfS2V5IGNoYW5nZSBldmVudHMuCiAgKi8KLXN0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKm1hZCkKK3N0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKm1hZCwKKwkJCQl1MTYgcHJldl9saWQpCiB7CiAJc3RydWN0IGliX2V2ZW50IGV2ZW50OwogCkBAIC0xNTcsNiArMTU4LDcgQEAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTykgewogCQkJc3RydWN0IGliX3BvcnRfaW5mbyAqcGluZm8gPQogCQkJCShzdHJ1Y3QgaWJfcG9ydF9pbmZvICopICgoc3RydWN0IGliX3NtcCAqKSBtYWQpLT5kYXRhOworCQkJdTE2IGxpZCA9IGJlMTZfdG9fY3B1KHBpbmZvLT5saWQpOwogCiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLAogCQkJCSAgICAgYmUxNl90b19jcHUocGluZm8tPnNtX2xpZCksCkBAIC0xNjUsMTIgKzE2NywxNSBAQAogCQkJZXZlbnQuZGV2aWNlCSAgICAgICA9IGliZGV2OwogCQkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnRfbnVtOwogCi0JCQlpZiAocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKQorCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkgewogCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVI7Ci0JCQllbHNlCi0JCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAKLQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQlpZiAocHJldl9saWQgIT0gbGlkKSB7CisJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAJCX0KIAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUEtFWV9UQUJMRSkgewpAQCAtMjI4LDggKzIzMyw5IEBACiAJCQlzdHJ1Y3QgaWJfd2MgKmluX3djLCBzdHJ1Y3QgaWJfZ3JoICppbl9ncmgsCiAJCQlzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCiB7Ci0JdTE2IHNsaWQ7CisJdTE2IHNsaWQsIHByZXZfbGlkID0gMDsKIAlpbnQgZXJyOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgcGF0dHI7CiAKIAlzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKIApAQCAtMjYzLDYgKzI2OSwxMyBAQAogCX0gZWxzZQogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOwogCisJaWYgKChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8gJiYKKwkgICAgIWliX3F1ZXJ5X3BvcnQoaWJkZXYsIHBvcnRfbnVtLCAmcGF0dHIpKQorCQlwcmV2X2xpZCA9IHBhdHRyLmxpZDsKKwogCWVyciA9IG1seDRfTUFEX0lGQyh0b19tZGV2KGliZGV2KSwKIAkJCSAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfTUtFWSwKIAkJCSAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfQktFWSwKQEAgLTI3MSw3ICsyODQsNyBAQAogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9GQUlMVVJFOwogCiAJaWYgKCFvdXRfbWFkLT5tYWRfaGRyLnN0YXR1cykgewotCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQpOworCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIHByZXZfbGlkKTsKIAkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwppbmRleCA2MTU4OGJkLi4yY2NiOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCkBAIC02OTksMTEgKzY5OSwxMiBAQAogCXN0cnVjdCBtbHg0X2liX2RldiAqaWJkZXYgPSBpYmRldl9wdHI7CiAJaW50IHA7CiAKKwltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKKwlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CisKIAlmb3IgKHAgPSAxOyBwIDw9IGliZGV2LT5udW1fcG9ydHM7ICsrcCkKIAkJbWx4NF9DTE9TRV9QT1JUKGRldiwgcCk7CiAKLQltbHg0X2liX21hZF9jbGVhbnVwKGliZGV2KTsKLQlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CiAJaW91bm1hcChpYmRldi0+dWFyX21hcCk7CiAJbWx4NF91YXJfZnJlZShkZXYsICZpYmRldi0+cHJpdl91YXIpOwogCW1seDRfcGRfZnJlZShkZXYsIGliZGV2LT5wcml2X3Bkbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCBhOTFjYjRjLi5mMzg1YTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTcxLDE3ICs3MSwxNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IF9fYmUzMiBtbHg0X2liX29wY29kZVtdID0gewotCVtJQl9XUl9TRU5EXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSwKLQlbSUJfV1JfTFNPXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAotCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU1NKSwKLQlbSUJfV1JfUkRNQV9XUklURV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKLQlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKLQlbSUJfV1JfUkRNQV9SRUFEXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfUkVBRCksCi0JW0lCX1dSX0FUT01JQ19DTVBfQU5EX1NXUF0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19DUyksCi0JW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKLQlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lOVkFMKSwKLQlbSUJfV1JfTE9DQUxfSU5WXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xPQ0FMX0lOVkFMKSwKLQlbSUJfV1JfRkFTVF9SRUdfTVJdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKKwlbSUJfV1JfU0VORF0JCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkQpLAorCVtJQl9XUl9MU09dCQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAorCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lNTSksCisJW0lCX1dSX1JETUFfV1JJVEVdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEUpLAorCVtJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKKwlbSUJfV1JfUkRNQV9SRUFEXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1JFQUQpLAorCVtJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1BdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0NTKSwKKwlbSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BRERdCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKKwlbSUJfV1JfU0VORF9XSVRIX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTlZBTCksCisJW0lCX1dSX0xPQ0FMX0lOVl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTE9DQUxfSU5WQUwpLAorCVtJQl9XUl9GQVNUX1JFR19NUl0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfRk1SKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWx4NF9pYl9zcXAgKnRvX21zcXAoc3RydWN0IG1seDRfaWJfcXAgKm1xcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwppbmRleCA2NDA0NDk1Li41NjQ4NjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCkBAIC0xMDQsNyArMTA0LDggQEAKICAqLwogc3RhdGljIHZvaWQgc21wX3Nub29wKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAogCQkgICAgICB1OCBwb3J0X251bSwKLQkJICAgICAgc3RydWN0IGliX21hZCAqbWFkKQorCQkgICAgICBzdHJ1Y3QgaWJfbWFkICptYWQsCisJCSAgICAgIHUxNiBwcmV2X2xpZCkKIHsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CiAKQEAgLTExNCw2ICsxMTUsNyBAQAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPKSB7CiAJCQlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaW5mbyA9CiAJCQkJKHN0cnVjdCBpYl9wb3J0X2luZm8gKikgKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGE7CisJCQl1MTYgbGlkID0gYmUxNl90b19jcHUocGluZm8tPmxpZCk7CiAKIAkJCW10aGNhX3VwZGF0ZV9yYXRlKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSk7CiAJCQl1cGRhdGVfc21fYWgodG9fbWRldihpYmRldiksIHBvcnRfbnVtLApAQCAtMTIzLDEyICsxMjUsMTUgQEAKIAkJCWV2ZW50LmRldmljZSAgICAgICAgICAgPSBpYmRldjsKIAkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAotCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOwotCQkJZWxzZQotCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCi0JCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJaWYgKHByZXZfbGlkICE9IGxpZCkgeworCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCQl9CiAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BLRVlfVEFCTEUpIHsKQEAgLTE5Niw2ICsyMDEsOCBAQAogCWludCBlcnI7CiAJdTggc3RhdHVzOwogCXUxNiBzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKwl1MTYgcHJldl9saWQgPSAwOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgcGF0dHI7CiAKIAkvKiBGb3J3YXJkIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYXBzIHRvIHRoZSBTTSAqLwogCWlmIChpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1RSQVAgJiYKQEAgLTIzMyw2ICsyNDAsMTIgQEAKIAkJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CiAJfSBlbHNlCiAJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CisJaWYgKChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCAmJgorCSAgICBpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8gJiYKKwkgICAgIWliX3F1ZXJ5X3BvcnQoaWJkZXYsIHBvcnRfbnVtLCAmcGF0dHIpKQorCQlwcmV2X2xpZCA9IHBhdHRyLmxpZDsKIAogCWVyciA9IG10aGNhX01BRF9JRkModG9fbWRldihpYmRldiksCiAJCQkgICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZLApAQCAtMjUyLDcgKzI2NSw3IEBACiAJfQogCiAJaWYgKCFvdXRfbWFkLT5tYWRfaGRyLnN0YXR1cykgewotCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQpOworCQlzbXBfc25vb3AoaWJkZXYsIHBvcnRfbnVtLCBpbl9tYWQsIHByZXZfbGlkKTsKIAkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCmluZGV4IGI5NjExYWQuLmNhNTk5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCmluZGV4IDEzYTViYjEuLjA0YjEyYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IDRhNjViOTYuLjUyNDI1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMTAzLDYgKzEwMyw3IEBACiBzdGF0aWMgdm9pZCBuZXNfZGlzY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKIHN0YXRpYyBpbnQgc2VuZF9zeW4oc3RydWN0IG5lc19jbV9ub2RlICosIHUzMiwgc3RydWN0IHNrX2J1ZmYgKik7CiBzdGF0aWMgaW50IHNlbmRfcmVzZXQoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIGludCBzZW5kX2FjayhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTEzLDggKzExNCw3IEBACiBzdGF0aWMgdm9pZCBhY3RpdmVfb3Blbl9lcnIoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBzdGF0aWMgdm9pZCBwYXNzaXZlX29wZW5fZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogc3RhdGljIHZvaWQgY2xlYW51cF9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKLXN0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAotCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUpOworc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIHZvaWQgZnJlZV9yZXRyYW5zX2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSk7CiBzdGF0aWMgaW50IGhhbmRsZV90Y3Bfb3B0aW9ucyhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdGlvbnNpemUsIGludCBwYXNzaXZlKTsKQEAgLTEyNCw2ICsxMjQsOCBAQAogc3RhdGljIHZvaWQgY21fZXZlbnRfY29ubmVjdF9lcnJvcihzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOwogc3RhdGljIHZvaWQgY21fZXZlbnRfcmVzZXQoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZXEoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZWplY3Qoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWN2X2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTMyIHJlbV9ub2RlKTsKIAogc3RhdGljIHZvaWQgcHJpbnRfY29yZShzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNvcmUpOwogCkBAIC0xOTYsNyArMTk4LDYgQEAKICAqLwogc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmV0OwogCWlmICghc2tiKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAic2tiIHNldCB0byBOVUxMXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjA2LDExICsyMDcsMjcgQEAKIAlmb3JtX2NtX2ZyYW1lKHNrYiwgY21fbm9kZSwgTlVMTCwgMCwgJmNtX25vZGUtPm1wYV9mcmFtZSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCBTRVRfQUNLKTsKIAotCXJldCA9IHNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBza2IsIE5FU19USU1FUl9UWVBFX1NFTkQsIDEsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKK30KIAotCXJldHVybiAwOworCisKK3N0YXRpYyBpbnQgc2VuZF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYiA9IE5VTEw7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9DTV9CVUZGRVIpOworCWlmICghc2tiKSB7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiRmFpbGVkIHRvIGdldCBhIEZyZWUgcGt0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc2VuZCBhbiBNUEEgcmVqZWN0IGZyYW1lICovCisJZm9ybV9jbV9mcmFtZShza2IsIGNtX25vZGUsIE5VTEwsIDAsICZjbV9ub2RlLT5tcGFfZnJhbWUsCisJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgU0VUX0FDSyB8IFNFVF9GSU4pOworCisJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOworCXJldHVybiBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKIH0KIAogCkBAIC0yMTgsMTQgKzIzNSwxNyBAQAogICogcmVjdl9tcGEgLSBwcm9jZXNzIGEgcmVjZWl2ZWQgVENQIHBrdCwgd2UgYXJlIGV4cGVjdGluZyBhbgogICogSUVURiBNUEEgZnJhbWUKICAqLwotc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgbGVuKQorc3RhdGljIGludCBwYXJzZV9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1OCAqYnVmZmVyLCB1MzIgKnR5cGUsCisJCXUzMiBsZW4pCiB7CiAJc3RydWN0IGlldGZfbXBhX2ZyYW1lICptcGFfZnJhbWU7CiAKKwkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9BQ0NFUFQ7CisKIAkvKiBhc3N1bWUgcmVxIGZyYW1lIGlzIGluIHRjcCBkYXRhIHBheWxvYWQgKi8KIAlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBzbWFsbCAoJXgpXG4iLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW1wYV9mcmFtZSA9IChzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKilidWZmZXI7CkBAIC0yMzQsMTQgKzI1NCwyNSBAQAogCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSArIHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICE9IGxlbikgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlRoZSByZWNlaXZlZCBpZXRmIGJ1ZmZlciB3YXMgbm90IHJpZ2h0IgogCQkJCSIgY29tcGxldGUgKCV4ICsgJXggIT0gJXgpXG4iLAotCQkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCAodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOwotCQlyZXR1cm4gLTE7CisJCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsCisJCQkJKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgdGhlIG1heCBzaXplICovCisJaWYgKGxlbiA+IE1BWF9DTV9CVUZGRVIpIHsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIHRvbyBsYXJnZSIKKwkJCQkiICgleCArICV4ICE9ICV4KVxuIiwKKwkJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwKKwkJCQkodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBjb3B5IGVudGlyZSBNUEEgZnJhbWUgdG8gb3VyIGNtX25vZGUncyBmcmFtZSAqLwogCW1lbWNweShjbV9ub2RlLT5tcGFfZnJhbWVfYnVmLCBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwKIAkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplKTsKIAorCWlmIChtcGFfZnJhbWUtPmZsYWdzICYgSUVURl9NUEFfRkxBR1NfUkVKRUNUKQorCQkqdHlwZSA9IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1Q7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4MCw3ICs0MTEsNyBAQAogCiAJbmV3X3NlbmQgPSBremFsbG9jKHNpemVvZigqbmV3X3NlbmQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19zZW5kKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogbmV3X3NlbmQtPnRpbWV0b3NlbmQgPSBjdXJyZW50dGltZSAqLwogCW5ld19zZW5kLT5yZXRyeWNvdW50ID0gTkVTX0RFRkFVTFRfUkVUUllTOwpAQCAtMzk0LDkgKzQyNSwxMSBAQAogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfQ0xPU0UpIHsKIAkJbmV3X3NlbmQtPnRpbWV0b3NlbmQgKz0gKEhaLzEwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJm5ld19zZW5kLT5saXN0LCAmY21fbm9kZS0+cmVjdl9saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKGNtX25vZGUtPnJlY3ZfZW50cnkpIHsKKwkJCVdBUk5fT04oMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljbV9ub2RlLT5yZWN2X2VudHJ5ID0gbmV3X3NlbmQ7CiAJfQogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfU0VORCkgewpAQCAtNDM1LDI0ICs0NjgsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBuZXNfcmV0cmFuc19leHBpcmVkKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3sKKwlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CisJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ6CisJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CisJCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNyZWF0ZV9ldmVudChjbV9ub2RlLCBORVNfQ01fRVZFTlRfQUJPUlRFRCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVjdl9lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHUzMiByZW1fbm9kZSkKK3sKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICpyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19xcCAqbmVzcXA7CisJdW5zaWduZWQgbG9uZyBxcGxvY2tmbGFnczsKKworCWlmICghcmVjdl9lbnRyeSkKKwkJcmV0dXJuOworCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7CisJaWYgKG5lc3FwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQlpZiAobmVzcXAtPmNtX2lkKSB7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKKwkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgorCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7CisJCQluZXNxcC0+bGFzdF9hZXEgPSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQ7CisJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgorCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCisJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggbm90aGluZyAiCisJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCisJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOworCQl9CisJfSBlbHNlIGlmIChyZW1fbm9kZSkgeworCQkvKiBUSU1FX1dBSVQgc3RhdGUgKi8KKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCX0KKwlpZiAoY21fbm9kZS0+Y21faWQpCisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwlrZnJlZShyZWN2X2VudHJ5KTsKKwljbV9ub2RlLT5yZWN2X2VudHJ5ID0gTlVMTDsKK30KIAogLyoqCiAgKiBuZXNfY21fdGltZXJfdGljawogICovCiBzdGF0aWMgdm9pZCBuZXNfY21fdGltZXJfdGljayh1bnNpZ25lZCBsb25nIHBhc3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG5leHR0aW1lb3V0ID0gamlmZmllcyArIE5FU19MT05HX1RJTUU7Ci0Jc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7CiAJc3RydWN0IG5lc190aW1lcl9lbnRyeSAqc2VuZF9lbnRyeSwgKnJlY3ZfZW50cnk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlLCAqbGlzdF9jb3JlX3RlbXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlLCAqbGlzdF9ub2RlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9ub2RlOwogCXN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSA9IGdfY21fY29yZTsKLQlzdHJ1Y3QgbmVzX3FwICpuZXNxcDsKIAl1MzIgc2V0dGltZXIgPSAwOwogCWludCByZXQgPSBORVRERVZfVFhfT0s7Ci0JZW51bSBuZXNfY21fbm9kZV9zdGF0ZSBsYXN0X3N0YXRlOwogCiAJc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9saXN0OwogCUlOSVRfTElTVF9IRUFEKCZ0aW1lcl9saXN0KTsKQEAgLTQ2MSw3ICs1NDgsNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLAogCQkJCSZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXMpIHsKIAkJY21fbm9kZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBuZXNfY21fbm9kZSwgbGlzdCk7Ci0JCWlmICghbGlzdF9lbXB0eSgmY21fbm9kZS0+cmVjdl9saXN0KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKKwkJaWYgKChjbV9ub2RlLT5yZWN2X2VudHJ5KSB8fCAoY21fbm9kZS0+c2VuZF9lbnRyeSkpIHsKIAkJCWFkZF9yZWZfY21fbm9kZShjbV9ub2RlKTsKIAkJCWxpc3RfYWRkKCZjbV9ub2RlLT50aW1lcl9lbnRyeSwgJnRpbWVyX2xpc3QpOwogCQl9CkBAIC00NzEsNTQgKzU1OCwxOCBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X25vZGUsIGxpc3RfY29yZV90ZW1wLCAmdGltZXJfbGlzdCkgewogCQljbV9ub2RlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5lc19jbV9ub2RlLAogCQkJCQl0aW1lcl9lbnRyeSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9jb3JlLCBsaXN0X25vZGVfdGVtcCwKLQkJCSZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJCXJlY3ZfZW50cnkgPSBjb250YWluZXJfb2YobGlzdF9jb3JlLAotCQkJCXN0cnVjdCBuZXNfdGltZXJfZW50cnksIGxpc3QpOwotCQkJaWYgKCFyZWN2X2VudHJ5KQotCQkJCWJyZWFrOworCQlyZWN2X2VudHJ5ID0gY21fbm9kZS0+cmVjdl9lbnRyeTsKKworCQlpZiAocmVjdl9lbnRyeSkgewogCQkJaWYgKHRpbWVfYWZ0ZXIocmVjdl9lbnRyeS0+dGltZXRvc2VuZCwgamlmZmllcykpIHsKIAkJCQlpZiAobmV4dHRpbWVvdXQgPiByZWN2X2VudHJ5LT50aW1ldG9zZW5kIHx8Ci0JCQkJCSFzZXR0aW1lcikgeworCQkJCQkJIXNldHRpbWVyKSB7CiAJCQkJCW5leHR0aW1lb3V0ID0gcmVjdl9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJc2V0dGltZXIgPSAxOwogCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQkJaWYgKG5lc3FwLT5jbV9pZCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgotCQkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgotCQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJCW5lc3FwLT5sYXN0X2FlcSA9IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDsKLQkJCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssCi0JCQkJCXFwbG9ja2ZsYWdzKTsKLQkJCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQl9IGVsc2UgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLAotCQkJCQlxcGxvY2tmbGFncyk7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCi0JCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCi0JCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIG5vdGhpbmcgIgotCQkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKLQkJCQkJYXRvbWljX3JlYWQoJm5lc3FwLT5yZWZjb3VudCkpOwotCQkJfQotCQkJaWYgKGNtX2lkKQotCQkJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQkJa2ZyZWUocmVjdl9lbnRyeSk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCX0gZWxzZQorCQkJCWhhbmRsZV9yZWN2X2VudHJ5KGNtX25vZGUsIDEpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrLCBmbGFncyk7CiAJCWRvIHsKQEAgLTUzMywxMiArNTg0LDExIEBACiAJCQkJCQluZXh0dGltZW91dCA9CiAJCQkJCQkJc2VuZF9lbnRyeS0+dGltZXRvc2VuZDsKIAkJCQkJCXNldHRpbWVyID0gMTsKLQkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJZnJlZV9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwotCQkJCQlicmVhazsKIAkJCQl9CisJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWlmICgoY21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkgfHwKQEAgLTU1MCwxNiArNjAwLDEyIEBACiAJCQlpZiAoIXNlbmRfZW50cnktPnJldHJhbnNjb3VudCB8fAogCQkJCSFzZW5kX2VudHJ5LT5yZXRyeWNvdW50KSB7CiAJCQkJY21fcGFja2V0c19kcm9wcGVkKys7Ci0JCQkJbGFzdF9zdGF0ZSA9IGNtX25vZGUtPnN0YXRlOwotCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQlmcmVlX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAogCQkJCQkmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAobGFzdF9zdGF0ZSA9PSBORVNfQ01fU1RBVEVfU1lOX1JDVkQpCi0JCQkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKLQkJCQllbHNlCi0JCQkJCWNyZWF0ZV9ldmVudChjbV9ub2RlLAotCQkJCQkJTkVTX0NNX0VWRU5UX0FCT1JURUQpOworCQkJCW5lc19yZXRyYW5zX2V4cGlyZWQoY21fbm9kZSk7CisJCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywKIAkJCQkJZmxhZ3MpOwogCQkJCWJyZWFrOwpAQCAtNzE0LDcgKzc2MCw3IEBACiAJCXNrYiA9IGRldl9hbGxvY19za2IoTUFYX0NNX0JVRkZFUik7CiAJaWYgKCFza2IpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJGYWlsZWQgdG8gZ2V0IGEgRnJlZSBwa3RcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvcm1fY21fZnJhbWUoc2tiLCBjbV9ub2RlLCBOVUxMLCAwLCBOVUxMLCAwLCBmbGFncyk7CkBAIC03NzgsMTQgKzgyNCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqaHRlOwogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKLQlfX2JlMzIgdG1wX2FkZHIgPSBjcHVfdG9fYmUzMihsb2NfYWRkcik7CiAKIAkvKiBnZXQgYSBoYW5kbGUgb24gdGhlIGh0ZSAqLwogCWh0ZSA9ICZjbV9jb3JlLT5jb25uZWN0ZWRfbm9kZXM7CiAKLQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlNlYXJjaGluZyBmb3IgYW4gb3duZXIgbm9kZTogJXBJNDoleCBmcm9tIGNvcmUgJXAtPiVwXG4iLAotCQkgICZ0bXBfYWRkciwgbG9jX3BvcnQsIGNtX2NvcmUsIGh0ZSk7Ci0KIAkvKiB3YWxrIGxpc3QgYW5kIGZpbmQgY21fbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uIElEICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmh0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtX25vZGUsIGh0ZSwgbGlzdCkgewpAQCAtODc1LDcgKzkxNyw4IEBACiBzdGF0aWMgaW50IG1pbmlfY21fZGVjX3JlZmNudF9saXN0ZW4oc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlLAogCXN0cnVjdCBuZXNfY21fbGlzdGVuZXIgKmxpc3RlbmVyLCBpbnQgZnJlZV9oYW5naW5nX25vZGVzKQogewotCWludCByZXQgPSAxOworCWludCByZXQgPSAtRUlOVkFMOworCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfdGVtcCA9IE5VTEw7CkBAIC05MDQsMTAgKzk0Nyw2MCBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3RlbXAsICZyZXNldF9saXN0KSB7CiAJCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9wb3MsIHN0cnVjdCBuZXNfY21fbm9kZSwKLQkJCQkJcmVzZXRfZW50cnkpOwotCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7Ci0JCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7Ci0JCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCQlyZXNldF9lbnRyeSk7CisJCXsKKwkJCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CisJCQlpZiAoTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMSA8PSBjbV9ub2RlLT5zdGF0ZSkgeworCQkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFsb29wYmFjaykgeworCQkJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCQkJCWlmIChlcnIpIHsKKwkJCQkJCWNtX25vZGUtPnN0YXRlID0KKwkJCQkJCQkgTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCVdBUk5fT04oMSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljbV9ub2RlLT5zdGF0ZSA9CisJCQkJCQkJTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQkJCXJlbV9yZWZfY21fbm9kZSgKKwkJCQkJCQljbV9ub2RlLT5jbV9jb3JlLAorCQkJCQkJCWNtX25vZGUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPQorCQkJCQkJCWxvb3BiYWNrLT5yZW1fYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9CisJCQkJCQkJbG9vcGJhY2stPmxvY19hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0KKwkJCQkJCQlsb29wYmFjay0+cmVtX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPQorCQkJCQkJCSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X2Nvbm5lY3RfZXJyb3IoJmV2ZW50KTsKKwkJCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKworCQkJCQlldmVudC5jbV9ub2RlID0gY21fbm9kZTsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9CisJCQkJCQkJIGNtX25vZGUtPnJlbV9hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0KKwkJCQkJCQkgY21fbm9kZS0+bG9jX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPQorCQkJCQkJCSBjbV9ub2RlLT5yZW1fcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9CisJCQkJCQkJIGNtX25vZGUtPmxvY19wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJCQkJCWNtX2V2ZW50X3Jlc2V0KCZldmVudCk7CisKKwkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsCisJCQkJCQkJIGNtX25vZGUpOworCisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2NvcmUtPmxpc3Rlbl9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTk2OCw2ICsxMDYxLDcgQEAKIAlpZiAoY21fbm9kZS0+YWNjZXB0X3BlbmQpIHsKIAkJQlVHX09OKCFjbV9ub2RlLT5saXN0ZW5lcik7CiAJCWF0b21pY19kZWMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAwOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KIApAQCAtOTk0LDcgKzEwODgsNyBAQAogCW1lbXNldCgmZmwsIDAsIHNpemVvZiBmbCk7CiAJZmwubmxfdS5pcDRfdS5kYWRkciA9IGh0b25sKGRzdF9pcCk7CiAJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKLQkJcHJpbnRrKCIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKIAkJCQlfX2Z1bmNfXywgZHN0X2lwKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTEwNTcsOCArMTE1MSw2IEBACiAJCQljbV9ub2RlLT5jbV9pZCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZjbV9ub2RlLT5yZWN2X2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jayk7CiAKIAljbV9ub2RlLT5sb29wYmFja3BhcnRuZXIgPSBOVUxMOwogCWF0b21pY19zZXQoJmNtX25vZGUtPnJlZl9jb3VudCwgMSk7CkBAIC0xMTI2LDEwICsxMjE4LDcgQEAKIHN0YXRpYyBpbnQgcmVtX3JlZl9jbV9ub2RlKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcXBsb2NrZmxhZ3M7Ci0Jc3RydWN0IG5lc190aW1lcl9lbnRyeSAqcmVjdl9lbnRyeTsKLQlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZSwgKmxpc3Rfbm9kZV90ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG5lc19xcCAqbmVzcXA7CiAKIAlpZiAoIWNtX25vZGUpCkBAIC0xMTUwLDM4ICsxMjM5LDkgQEAKIAkJYXRvbWljX2RlYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA8IDApOwogCX0KLQlCVUdfT04oY21fbm9kZS0+c2VuZF9lbnRyeSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfY29yZSwgbGlzdF9ub2RlX3RlbXAsICZjbV9ub2RlLT5yZWN2X2xpc3QpIHsKLQkJcmVjdl9lbnRyeSA9IGNvbnRhaW5lcl9vZihsaXN0X2NvcmUsIHN0cnVjdCBuZXNfdGltZXJfZW50cnksCi0JCQkJbGlzdCk7Ci0JCWxpc3RfZGVsKCZyZWN2X2VudHJ5LT5saXN0KTsKLQkJY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCWlmIChuZXNxcC0+Y21faWQpIHsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcDogSElUIEEgIgotCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyB0byBkbyFcbiIsCi0JCQkJbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkKTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJbmVzcXAtPmxhc3RfYWVxID0gTkVTX0FFUUVfQUVJRF9SRVNFVF9TRU5UOwotCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXA6IEhJVCBBICIKLQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBub3RoaW5nIHRvIGRvIVxuIiwKLQkJCQluZXNxcC0+aHdxcC5xcF9pZCwgY21faWQpOwotCQl9Ci0JCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQlrZnJlZShyZWN2X2VudHJ5KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0KKwlXQVJOX09OKGNtX25vZGUtPnNlbmRfZW50cnkpOworCWlmIChjbV9ub2RlLT5yZWN2X2VudHJ5KQorCQloYW5kbGVfcmVjdl9lbnRyeShjbV9ub2RlLCAwKTsKIAlpZiAoY21fbm9kZS0+bGlzdGVuZXIpIHsKIAkJbWluaV9jbV9kZWNfcmVmY250X2xpc3RlbihjbV9jb3JlLCBjbV9ub2RlLT5saXN0ZW5lciwgMCk7CiAJfSBlbHNlIHsKQEAgLTEyNjYsOCArMTMyNiw3IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX2Zpbl9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCXN0cnVjdCB0Y3BoZHIgKnRjcGgpCitzdGF0aWMgdm9pZCBoYW5kbGVfZmluX3BrdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJSZWNlaXZlZCBGSU4sIGNtX25vZGUgPSAlcCwgc3RhdGUgPSAldS4gIgogCQkicmVmY250PSVkXG4iLCBjbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSwKQEAgLTEyNzksMjMgKzEzMzgsMzAgQEAKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKIAljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVDoKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s7Ci0JCXNlbmRfZmluKGNtX25vZGUsIHNrYik7CisJCXNlbmRfZmluKGNtX25vZGUsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7Ci0JCXNlbmRfYWNrKGNtX25vZGUsIHNrYik7CisJCXNlbmRfYWNrKGNtX25vZGUsIE5VTEwpOworCQkvKiBXYWl0IGZvciBBQ0sgYXMgdGhpcyBpcyBzaW11bHRhbm91cyBjbG9zZS4uCisJCSogQWZ0ZXIgd2UgcmVjZWl2ZSBBQ0ssIGRvIG5vdCBzZW5kIGFueXRoaW5nLi4KKwkJKiBKdXN0IHJtIHRoZSBub2RlLi4gRG9uZS4uICovCiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVElNRV9XQUlUOwotCQlzZW5kX2FjayhjbV9ub2RlLCBza2IpOworCQlzZW5kX2FjayhjbV9ub2RlLCBOVUxMKTsKKwkJc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIE5VTEwsICBORVNfVElNRVJfVFlQRV9DTE9TRSwgMSwgMCk7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX1RJTUVfV0FJVDoKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAlkZWZhdWx0OgogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkVycm9yIFJjdmQgRklOIGZvciBub2RlLSVwIHN0YXRlID0gJWRcbiIsCiAJCQljbV9ub2RlLCBjbV9ub2RlLT5zdGF0ZSk7Ci0JCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTEzNDEsMjMgKzE0MDcsMzUgQEAKIAkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9USU1FX1dBSVQ6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkJhZCBzdGF0ZSAlc1sldV1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IsCi0JZW51bSBuZXNfY21fZXZlbnRfdHlwZSB0eXBlKQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAKLQlpbnQJcmV0OworCWludAlyZXQgPSAwOwogCWludCBkYXRhc2l6ZSA9IHNrYi0+bGVuOwogCXU4ICpkYXRhbG9jID0gc2tiLT5kYXRhOwotCXJldCA9IHBhcnNlX21wYShjbV9ub2RlLCBkYXRhbG9jLCBkYXRhc2l6ZSk7Ci0JaWYgKHJldCA8IDApIHsKKworCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUgdHlwZSA9IE5FU19DTV9FVkVOVF9VTktOT1dOOworCXUzMiAgICAgcmVzX3R5cGU7CisJcmV0ID0gcGFyc2VfbXBhKGNtX25vZGUsIGRhdGFsb2MsICZyZXNfdHlwZSwgZGF0YXNpemUpOworCWlmIChyZXQpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJkaWRuJ3QgbGlrZSBNUEEgUmVxdWVzdFxuIik7Ci0JCWlmICh0eXBlID09IE5FU19DTV9FVkVOVF9DT05ORUNURUQpIHsKKwkJaWYgKGNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVCkgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICIlc1sldV0gY3JlYXRlIGFib3J0IGZvciAiCiAJCQkJImNtX25vZGU9JXAgbGlzdGVuZXI9JXAgc3RhdGU9JWRcbiIsIF9fZnVuY19fLAogCQkJCV9fTElORV9fLCBjbV9ub2RlLCBjbV9ub2RlLT5saXN0ZW5lciwKQEAgLTEzNjYsMTggKzE0NDQsMzggQEAKIAkJfSBlbHNlIHsKIAkJCXBhc3NpdmVfb3Blbl9lcnIoY21fbm9kZSwgc2tiLCAxKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaWYgKHR5cGUgPT0gTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRCkKLQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RTQTsKLQkJZWxzZQotCQkJYXRvbWljX3NldCgmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSwKLQkJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKLQkJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwotCisJCXJldHVybjsKIAl9Ci0JcmV0dXJuIDsKKworCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKKwljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKKwkJaWYgKHJlc190eXBlID09IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QpIHsKKwkJCS8qQklHIHByb2JsZW0gYXMgd2UgYXJlIHJlY2VpdmluZyB0aGUgTVBBLi4gU28gc2hvdWxkCisJCQkqIG5vdCBiZSBSRUpFQ1QuLiBUaGlzIGlzIFBhc3NpdmUgT3Blbi4uIFdlIGNhbgorCQkJKiBvbmx5IHJlY2VpdmUgaXQgUmVqZWN0IGZvciBBY3RpdmUgT3Blbi4uLiovCisJCQlXQVJOX09OKDEpOworCQl9CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOworCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRVE7CisJCWF0b21pY19zZXQoJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUsCisJCQkJTkVTX1BBU1NJVkVfU1RBVEVfSU5ESUNBVEVEKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJCWlmIChyZXNfdHlwZSA9PSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUKSB7CisJCQl0eXBlID0gTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1Q7CisJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDsKKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSBORVNfQ01fRVZFTlRfQ09OTkVDVEVEOworCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVFNBOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJY3JlYXRlX2V2ZW50KGNtX25vZGUsIHR5cGUpOwogfQogCiBzdGF0aWMgdm9pZCBpbmRpY2F0ZV9wa3RfZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjUsOCArMTU2Myw2IEBACiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0xJU1RFTklORzoKIAkJLyogUGFzc2l2ZSBPUEVOICovCi0JCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMTsKLQkJYXRvbWljX2luYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOwogCQlpZiAoYXRvbWljX3JlYWQoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KSA+CiAJCQkJY21fbm9kZS0+bGlzdGVuZXItPmJhY2tsb2cpIHsKIAkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiZHJvcCBzeW4gZHVlIHRvIGJhY2tsb2cgIgpAQCAtMTQ4NCw2ICsxNTgwLDkgQEAKIAkJfQogCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIDE7CiAJCUJVR19PTihjbV9ub2RlLT5zZW5kX2VudHJ5KTsKKwkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAxOworCQlhdG9taWNfaW5jKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CisKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ7CiAJCXNlbmRfc3luKGNtX25vZGUsIDEsIHNrYik7CiAJCWJyZWFrOwpAQCAtMTUxOCw2ICsxNjE3LDcgQEAKIAlpbmNfc2VxdWVuY2UgPSBudG9obCh0Y3BoLT5zZXEpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQkvKiBhY3RpdmUgb3BlbiAqLwogCQlpZiAoY2hlY2tfc3luKGNtX25vZGUsIHRjcGgsIHNrYikpCiAJCQlyZXR1cm47CkBAIC0xNTY3LDEwICsxNjY3LDcgQEAKIAl1MzIgcmVtX3NlcTsKIAlpbnQgcmV0OwogCWludCBvcHRpb25zaXplOwotCXUzMiB0ZW1wX3NlcSA9IGNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bTsKLQogCW9wdGlvbnNpemUgPSAodGNwaC0+ZG9mZiA8PCAyKSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKLQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAogCWlmIChjaGVja19zZXEoY21fbm9kZSwgdGNwaCwgc2tiKSkKIAkJcmV0dXJuOwpAQCAtMTU4MCw3ICsxNjc3LDcgQEAKIAlyZW1fc2VxID0gbnRvaGwodGNwaC0+c2VxKTsKIAlyZW1fc2VxX2FjayA9ICBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAlkYXRhc2l6ZSA9IHNrYi0+bGVuOwotCisJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fUkNWRDoKIAkJLyogUGFzc2l2ZSBPUEVOICovCkBAIC0xNTg4LDcgKzE2ODUsNiBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwotCQljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSB0ZW1wX3NlcTsKIAkJaWYgKGNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSAhPQogCQkgICAgY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtKSB7CiAJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgInJlbV9hY2tfbnVtICE9IGxvY19zZXFfbnVtXG4iKTsKQEAgLTE1OTcsMzEgKzE2OTMsMzAgQEAKIAkJCXJldHVybjsKIAkJfQogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDsKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwgTkVTX0NNX0VWRU5UX01QQV9SRVEpOwotCQkgfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKKwkJfSBlbHNlIHsgLyogcmN2ZCBBQ0sgb25seSAqLwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJIH0KIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwotCQkvKiBXZSBleHBlY3QgbXBhIGZyYW1lIHRvIGJlIHJlY2VpdmVkIG9ubHkgKi8KKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwKLQkJCQlORVNfQ01fRVZFTlRfTVBBX1JFUSk7CisJCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IpOwogCQl9IGVsc2UKIAkJCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yZW1fYWNrX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwogCQlpZiAoZGF0YXNpemUpIHsKIAkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgZGF0YXNpemU7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsIE5FU19DTV9FVkVOVF9DT05ORUNURUQpOworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKIAkJfSBlbHNlIHsgLyogQ291bGQgYmUganVzdCBhbiBhY2sgcGt0Li4gKi8KIAkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0xNjMyLDEzICsxNzI3LDI0IEBACiAJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCWNtX25vZGUtPmNtX2lkLT5yZW1fcmVmKGNtX25vZGUtPmNtX2lkKTsKKwljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjsKKwkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQyOgogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDoKLQljYXNlIE5FU19DTV9TVEFURV9MQVNUX0FDSzoKLQljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgogCWNhc2UgTkVTX0NNX1NUQVRFX1VOS05PV046CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKQEAgLTE3NDgsNiArMTg1NCw3IEBACiB7CiAJZW51bSBuZXNfdGNwaXBfcGt0X3R5cGUJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfVU5LTk9XTjsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXUzMiAgICAgZmluX3NldCA9IDA7CiAJc2tiX3B1bGwoc2tiLCBpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJwcm9jZXNzX3BhY2tldDogY21fbm9kZT0lcCBzdGF0ZSA9JWQgc3luPSVkICIKQEAgLTE3NjAsMTAgKzE4NjcsMTAgQEAKIAkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOOwogCQlpZiAodGNwaC0+YWNrKQogCQkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfU1lOQUNLOwotCX0gZWxzZSBpZiAodGNwaC0+ZmluKQotCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9GSU47Ci0JZWxzZSBpZiAodGNwaC0+YWNrKQorCX0gZWxzZSBpZiAodGNwaC0+YWNrKQogCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9BQ0s7CisJaWYgKHRjcGgtPmZpbikKKwkJZmluX3NldCA9IDE7CiAKIAlzd2l0Y2ggKHBrdF90eXBlKSB7CiAJY2FzZSBORVNfUEtUX1RZUEVfU1lOOgpAQCAtMTc3NCwxNSArMTg4MSwxNiBAQAogCQlicmVhazsKIAljYXNlIE5FU19QS1RfVFlQRV9BQ0s6CiAJCWhhbmRsZV9hY2tfcGt0KGNtX25vZGUsIHNrYiwgdGNwaCk7CisJCWlmIChmaW5fc2V0KQorCQkJaGFuZGxlX2Zpbl9wa3QoY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX1BLVF9UWVBFX1JTVDoKIAkJaGFuZGxlX3JzdF9wa3QoY21fbm9kZSwgc2tiLCB0Y3BoKTsKIAkJYnJlYWs7Ci0JY2FzZSBORVNfUEtUX1RZUEVfRklOOgotCQloYW5kbGVfZmluX3BrdChjbV9ub2RlLCBza2IsIHRjcGgpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcm9wX3BhY2tldChza2IpOworCQlpZiAoZmluX3NldCkKKwkJCWhhbmRsZV9maW5fcGt0KGNtX25vZGUpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xOTI1LDcgKzIwMzMsNyBAQAogCQkJCWxvb3BiYWNrcmVtb3Rlbm9kZS0+dGNwX2NudHh0LnJjdl93c2NhbGU7CiAJCQlsb29wYmFja3JlbW90ZW5vZGUtPnRjcF9jbnR4dC5zbmRfd3NjYWxlID0KIAkJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X3dzY2FsZTsKLQorCQkJbG9vcGJhY2tyZW1vdGVub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKIAkJCWNyZWF0ZV9ldmVudChsb29wYmFja3JlbW90ZW5vZGUsIE5FU19DTV9FVkVOVF9NUEFfUkVRKTsKIAkJfQogCQlyZXR1cm4gY21fbm9kZTsKQEAgLTE5ODAsNyArMjA4OCwxMSBAQAogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqbXBhX2ZyYW1lLCBzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CiAJaW50IHBhc3NpdmVfc3RhdGU7CisJc3RydWN0IG5lc19jbV9ldmVudCBldmVudDsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisJc3RydWN0IG5lc19jbV9ub2RlICpsb29wYmFjayA9IGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcjsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiJXMgY21fbm9kZT0lcCB0eXBlPSVkIHN0YXRlPSVkXG4iLAogCQlfX2Z1bmNfXywgY21fbm9kZSwgY21fbm9kZS0+dGNwX2NudHh0LmNsaWVudCwgY21fbm9kZS0+c3RhdGUpOwpAQCAtMTk4OSwxMiArMjEwMSwzOCBAQAogCQlyZXR1cm4gcmV0OwogCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAotCXBhc3NpdmVfc3RhdGUgPSBhdG9taWNfYWRkX3JldHVybigxLCAmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSk7Ci0JY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwotCWlmIChwYXNzaXZlX3N0YXRlID09IE5FU19TRU5EX1JFU0VUX0VWRU5UKQorCWlmICghbG9vcGJhY2spIHsKKwkJcGFzc2l2ZV9zdGF0ZSA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlKTsKKwkJaWYgKHBhc3NpdmVfc3RhdGUgPT0gTkVTX1NFTkRfUkVTRVRfRVZFTlQpIHsKKwkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNlbmRfbXBhX3JlamVjdChjbV9ub2RlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJZXJyID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlXQVJOX09OKDEpOworCQkJfSBlbHNlCisJCQkJY21faWQtPmFkZF9yZWYoY21faWQpOworCQl9CisJfSBlbHNlIHsKKwkJY21fbm9kZS0+Y21faWQgPSBOVUxMOworCQlldmVudC5jbV9ub2RlID0gbG9vcGJhY2s7CisJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPSBsb29wYmFjay0+cmVtX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ubG9jX2FkZHIgPSBsb29wYmFjay0+bG9jX2FkZHI7CisJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPSBsb29wYmFjay0+cmVtX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCWV2ZW50LmNtX2luZm8uY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCWNtX2V2ZW50X21wYV9yZWplY3QoJmV2ZW50KTsKIAkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOwotCWVsc2UKLQkJcmV0ID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7CisKKwkJY21faWQgPSBsb29wYmFjay0+Y21faWQ7CisJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBsb29wYmFjayk7CisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDMxLDYgKzIxNjksNyBAQAogCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CiAJCXJldCA9IC0xOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAljYXNlIE5FU19DTV9TVEFURV9MSVNURU5JTkc6CiAJY2FzZSBORVNfQ01fU1RBVEVfVU5LTk9XTjoKIAljYXNlIE5FU19DTV9TVEFURV9JTklURUQ6CkBAIC0yMjI3LDE1ICsyMzY2LDE1IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgotCQkJY21fY29yZS0+bXR1ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKLQkJCWNtX2NvcmUtPmZyZWVfdHhfcGt0X21heCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiB1bmtub3duIHNldCBvcHRpb24gKi8KLQkJCXJldCA9IC1FSU5WQUw7CisJY2FzZSBORVNfQ01fU0VUX1BLVF9TSVpFOgorCQljbV9jb3JlLT5tdHUgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU0VUX0ZSRUVfUEtUX1FfU0laRToKKwkJY21fY29yZS0+ZnJlZV90eF9wa3RfbWF4ID0gdmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHVua25vd24gc2V0IG9wdGlvbiAqLworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yNjU0LDkgKzI3OTMsNyBAQAogCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfV1JQRFUpOwogCX0gZWxzZSB7CiAJCW5lc3FwLT5uZXNxcF9jb250ZXh0LT5pcmRfb3JkX3NpemVzIHw9Ci0JCQljcHVfdG9fbGUzMigoTkVTX1FQQ09OVEVYVF9PUkRJUkRfTFNNTV9QUkVTRU5UIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX1dSUERVIHwKLQkJCU5FU19RUENPTlRFWFRfT1JESVJEX0FMU01NKSk7CisJCQljcHVfdG9fbGUzMihORVNfUVBDT05URVhUX09SRElSRF9XUlBEVSk7CiAJfQogCW5lc3FwLT5za2lwX2xzbW0gPSAxOwogCkBAIC0yNzc4LDIzICsyOTE1LDM1IEBACiBpbnQgbmVzX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBjb25zdCB2b2lkICpwZGF0YSwgdTggcGRhdGFfbGVuKQogewogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrOworCiAJc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlOwogCiAJYXRvbWljX2luYygmY21fcmVqZWN0cyk7CiAJY21fbm9kZSA9IChzdHJ1Y3QgbmVzX2NtX25vZGUgKikgY21faWQtPnByb3ZpZGVyX2RhdGE7CisJbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CiAJY21fY29yZSA9IGNtX25vZGUtPmNtX2NvcmU7CisJY21fbm9kZS0+Y21faWQgPSBjbV9pZDsKIAljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsgcGRhdGFfbGVuOwogCi0Jc3RyY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUua2V5WzBdLCBJRUZUX01QQV9LRVlfUkVQKTsKLQltZW1jcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCWlmIChjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA+IE1BWF9DTV9CVUZGRVIpCisJCXJldHVybiAtRUlOVkFMOwogCi0JY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCXN0cmNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLmtleVswXSwgSUVGVF9NUEFfS0VZX1JFUCk7CisJaWYgKGxvb3BiYWNrKSB7CisJCW1lbWNweSgmbG9vcGJhY2stPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCQlsb29wYmFjay0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBwZGF0YV9sZW47CisJCWxvb3BiYWNrLT5tcGFfZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpICsKKwkJCQlwZGF0YV9sZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhLCBwZGF0YSwgcGRhdGFfbGVuKTsKKwkJY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YV9sZW4gPSBjcHVfdG9fYmUxNihwZGF0YV9sZW4pOworCX0KKwogCWNtX25vZGUtPm1wYV9mcmFtZS5yZXYgPSBtcGFfdmVyc2lvbjsKIAljbV9ub2RlLT5tcGFfZnJhbWUuZmxhZ3MgPSBJRVRGX01QQV9GTEFHU19DUkMgfCBJRVRGX01QQV9GTEFHU19SRUpFQ1Q7CiAKLQljbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKLQotCXJldHVybiAwOworCXJldHVybiBjbV9jb3JlLT5hcGktPnJlamVjdChjbV9jb3JlLCAmY21fbm9kZS0+bXBhX2ZyYW1lLCBjbV9ub2RlKTsKIH0KIAogCkBAIC0zMzAzLDEzICszNDUyLDU2IEBACiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPSBodG9ucyhldmVudC0+Y21faW5mby5yZW1fcG9ydCk7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ucmVtX2FkZHIpOwotCi0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YSAgICAgICAgICAgICAgICA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7Ci0JCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gICAgICAgICAgICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKKwljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuICA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CiAKIAlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKIAlpZiAocmV0KQotCQlwcmludGsoIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgY21fZXZlbnRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaXdfY21faWQgICAqY21faWQ7CisJc3RydWN0IGl3X2NtX2V2ZW50IGNtX2V2ZW50OworCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKKwlpbnQgcmV0OworCisJY21fbm9kZSA9IGV2ZW50LT5jbV9ub2RlOworCWlmICghY21fbm9kZSkKKwkJcmV0dXJuOworCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7CisKKwlhdG9taWNfaW5jKCZjbV9jb25uZWN0X3JlcXMpOworCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiY21fbm9kZSA9ICVwIC0gY21faWQgPSAlcCwgamlmZmllcyA9ICVsdVxuIiwKKwkJCWNtX25vZGUsIGNtX2lkLCBqaWZmaWVzKTsKKworCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ09OTkVDVF9SRVBMWTsKKwljbV9ldmVudC5zdGF0dXMgPSAtRUNPTk5SRUZVU0VEOworCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKworCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fcG9ydCA9IGh0b25zKGV2ZW50LT5jbV9pbmZvLmxvY19wb3J0KTsKKwljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLmxvY19hZGRyKTsKKworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoZXZlbnQtPmNtX2luZm8ucmVtX3BvcnQpOworCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLnJlbV9hZGRyKTsKKworCWNtX2V2ZW50LnByaXZhdGVfZGF0YSA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiA9ICh1OCkgY21fbm9kZS0+bXBhX2ZyYW1lX3NpemU7CisKKwluZXNfZGVidWcoTkVTX0RCR19DTSwgImNhbGwgQ01fRVZFTlRfTVBBX1JFSkVDVEVELCBsb2NhbF9hZGRyPSUwOHgsICIKKwkJCSJyZW1vdmVfYWRkcj0lMDh4XG4iLAorCQkJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIsCisJCQljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIpOworCisJcmV0ID0gY21faWQtPmV2ZW50X2hhbmRsZXIoY21faWQsICZjbV9ldmVudCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1sldV0gT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CiAKIAlyZXR1cm47CkBAIC0zMzc0LDYgKzM1NjYsMTQgQEAKIAkJY21fZXZlbnRfY29ubmVjdGVkKGV2ZW50KTsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJDTSBFdmVudDogQ09OTkVDVEVEXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fRVZFTlRfTVBBX1JFSkVDVDoKKwkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAorCQkJCShldmVudC0+Y21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkpCisJCQlicmVhazsKKwkJY21fZXZlbnRfbXBhX3JlamVjdChldmVudCk7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiQ00gRXZlbnQ6IFJFSkVDVFxuIik7CisJCWJyZWFrOworCiAJY2FzZSBORVNfQ01fRVZFTlRfQUJPUlRFRDoKIAkJaWYgKCghZXZlbnQtPmNtX25vZGUtPmNtX2lkKSB8fAogCQkJKGV2ZW50LT5jbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfVFNBKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCmluZGV4IGZhZmEzNTAuLmQ1Zjc3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMzksNiArMzksOSBAQAogI2RlZmluZSBORVNfTUFOQUdFX0FQQlZUX0RFTCAwCiAjZGVmaW5lIE5FU19NQU5BR0VfQVBCVlRfQUREIDEKIAorI2RlZmluZSBORVNfTVBBX1JFUVVFU1RfQUNDRVBUICAxCisjZGVmaW5lIE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QgIDIKKwogLyogSUVURiBNUEEgLS0gZGVmaW5lcywgZW51bXMsIHN0cnVjdHMgKi8KICNkZWZpbmUgSUVGVF9NUEFfS0VZX1JFUSAgIk1QQSBJRCBSZXEgRnJhbWUiCiAjZGVmaW5lIElFRlRfTVBBX0tFWV9SRVAgICJNUEEgSUQgUmVwIEZyYW1lIgpAQCAtMTg2LDYgKzE4OSw3IEBACiAJTkVTX0NNX1NUQVRFX0FDQ0VQVElORywKIAlORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQsCiAJTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZELAorCU5FU19DTV9TVEFURV9NUEFSRUpfUkNWRCwKIAlORVNfQ01fU1RBVEVfVFNBLAogCU5FU19DTV9TVEFURV9GSU5fV0FJVDEsCiAJTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMiwKQEAgLTI3OCwxMyArMjgyLDEyIEBACiAJc3RydWN0IG5lc190aW1lcl9lbnRyeQkqc2VuZF9lbnRyeTsKIAogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgcmV0cmFuc19saXN0X2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICByZWN2X2xpc3Q7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgICAgICByZWN2X2xpc3RfbG9jazsKKwlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICAqcmVjdl9lbnRyeTsKIAogCWludCAgICAgICAgICAgICAgICAgICAgICAgc2VuZF93cml0ZTA7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgbXBhX2ZyYW1lOwotCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltORVNfQ01fREVGQVVMVF9NVFVdOworCQl1OCAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX2J1ZltNQVhfQ01fQlVGRkVSXTsKIAl9OwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgbXBhX2ZyYW1lX3NpemU7CiAJc3RydWN0IGl3X2NtX2lkICAgICAgICAgICAqY21faWQ7CkBAIC0zMjYsNiArMzI5LDcgQEAKIAlORVNfQ01fRVZFTlRfTVBBX1JFUSwKIAlORVNfQ01fRVZFTlRfTVBBX0NPTk5FQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9BQ0NFUFQsCisJTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1QsCiAJTkVTX0NNX0VWRU5UX01QQV9FU1RBQkxJU0hFRCwKIAlORVNfQ01fRVZFTlRfQ09OTkVDVEVELAogCU5FU19DTV9FVkVOVF9DTE9TRUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKaW5kZXggZGE5ZGFiYS4uMGZiOGQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggNWQxMzlkYi4uNTJlNzM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0yNTQsNiArMjU0LDcgQEAKIAl1MzIgYWRhcHRlcl9zaXplOwogCXUzMiBhcnBfdGFibGVfc2l6ZTsKIAl1MTYgdmVuZG9yX2lkOworCXUxNiBkZXZpY2VfaWQ7CiAJdTggIE9uZUdfTW9kZTsKIAl1OCAgZnVuY19pbmRleDsKIApAQCAtMzU2LDYgKzM1NywxMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwluZXNhZGFwdGVyLT52ZW5kb3JfaWQgPSAoKCh1MzIpIG5lc2FkYXB0ZXItPm1hY19hZGRyX2hpZ2gpIDw8IDgpIHwKKwkJCQkobmVzYWRhcHRlci0+bWFjX2FkZHJfbG93ID4+IDI0KTsKKworCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChuZXNkZXYtPnBjaWRldi0+YnVzLCBuZXNkZXYtPnBjaWRldi0+ZGV2Zm4sCisJCQkJIFBDSV9ERVZJQ0VfSUQsICZkZXZpY2VfaWQpOworCW5lc2FkYXB0ZXItPnZlbmRvcl9wYXJ0X2lkID0gZGV2aWNlX2lkOworCiAJaWYgKG5lc19pbml0X3NlcmRlcyhuZXNkZXYsIGh3X3JldiwgcG9ydF9jb3VudCwgbmVzYWRhcHRlciwKIAkJCQkJCQlPbmVHX01vZGUpKSB7CiAJCWtmcmVlKG5lc2FkYXB0ZXIpOwpAQCAtMTYzNiw3ICsxNjQ0LDYgQEAKIAluZXN2bmljLT5wb3N0X2NxcF9yZXF1ZXN0ID0gbmVzX3Bvc3RfY3FwX3JlcXVlc3Q7CiAJbmVzdm5pYy0+bWNycV9tY2FzdF9maWx0ZXIgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2luaXQoJm5lc3ZuaWMtPm5pYy5zcV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmbmVzdm5pYy0+bmljLnJxX2xvY2spOwogCiAJLyogc2V0dXAgdGhlIFJRICovCkBAIC0yMjYxLDYgKzIyNjgsOCBAQAogCiAJCWlmICgrK2hlYWQgPj0gYWVxX3NpemUpCiAJCQloZWFkID0gMDsKKworCQluZXNfd3JpdGUzMihuZXNkZXYtPnJlZ3MgKyBORVNfQUVRX0FMTE9DLCAxIDw8IDE2KTsKIAl9CiAJd2hpbGUgKDEpOwogCWFlcS0+YWVxX2hlYWQgPSBoZWFkOwpAQCAtMjU0MSw3ICsyNTUwLDcgQEAKIHsKIAlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBuZXNfdm5pYywgbmljX2NxKTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZuZXN2bmljLT5uYXBpKTsKIH0KIAogCkBAIC0yNjIyLDkgKzI2MzEsOSBAQAogCQkJCQkJfSBlbHNlCiAJCQkJCQkJYnJlYWs7CiAJCQkJCX0KLQkJCQkJaWYgKHNrYikKLQkJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfQorCQkJCWlmIChza2IpCisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJbmVzbmljLT5zcV90YWlsKys7CiAJCQkJbmVzbmljLT5zcV90YWlsICY9IG5lc25pYy0+c3Ffc2l6ZS0xOwogCQkJCWlmIChzcV9jcWVzID4gMTI4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCBiYzBiNGRlLi5mNDFhODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC02MSw2ICs2MSw3IEBACiAJTkVTX0NRX0FDSyA9IDB4MDAzNCwKIAlORVNfV1FFX0FMTE9DID0gMHgwMDQwLAogCU5FU19DUUVfQUxMT0MgPSAweDAwNDQsCisJTkVTX0FFUV9BTExPQyA9IDB4MDA0OAogfTsKIAogZW51bSBpbmRleGVkX3JlZ3MgewpAQCAtODc1LDcgKzg3Niw2IEBACiAJdTggcmVwbGVuaXNoaW5nX3JxOwogCXU4IHJlc2VydmVkOwogCi0Jc3BpbmxvY2tfdCBzcV9sb2NrOwogCXNwaW5sb2NrX3QgcnFfbG9jazsKIH07CiAKQEAgLTExNDcsNyArMTE0Nyw2IEBACiBzdHJ1Y3QgbmVzX3ZuaWMgewogCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldjsKIAl1NjQgc3FfZnVsbDsKLQl1NjQgc3FfbG9ja2VkOwogCXU2NCB0c29fcmVxdWVzdHM7CiAJdTY0IHNlZ21lbnRlZF90c29fcmVxdWVzdHM7CiAJdTY0IGxpbmVhcml6ZWRfc2ticzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggNTdhNDdjZi4uOGQzZTRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTExMSw3ICsxMTEsNyBAQAogCW5lc19uaWNfY2VfaGFuZGxlcihuZXNkZXYsIG5lc2NxKTsKIAogCWlmIChuZXNjcS0+Y3Flc19wZW5kaW5nID09IDApIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIGNsZWFyIG91dCBjb21wbGV0ZWQgY3FlcyBhbmQgYXJtICovCiAJCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncytORVNfQ1FFX0FMTE9DLCBORVNfQ1FFX0FMTE9DX05PVElGWV9ORVhUIHwKIAkJCQluZXNjcS0+Y3FfbnVtYmVyIHwgKG5lc2NxLT5jcWVfYWxsb2NzX3BlbmRpbmcgPDwgMTYpKTsKQEAgLTQwMCw4ICs0MDAsNyBAQAogCWlmIChza2JfaGVhZGxlbihza2IpID09IHNrYi0+bGVuKSB7CiAJCWlmIChza2JfaGVhZGxlbihza2IpIDw9IE5FU19GSVJTVF9GUkFHX1NJWkUpIHsKIAkJCW5pY19zcWUtPndxZV93b3Jkc1tORVNfTklDX1NRX1dRRV9MRU5HVEhfMl8xX0lEWF0gPSAwOwotCQkJbmVzbmljLT50eF9za2JbbmVzbmljLT5zcV9oZWFkXSA9IE5VTEw7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQluZXNuaWMtPnR4X3NrYltuZXNuaWMtPnNxX2hlYWRdID0gc2tiOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRGVhbCB3aXRoIEZyYWdtZW50cyAqLwpAQCAtNDUzLDcgKzQ1Miw2IEBACiAJdTMyIHdxZV9jb3VudD0xOwogCXUzMiBzZW5kX3JjOwogCXN0cnVjdCBpcGhkciAqaXBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2ICp3cWVfZnJhZ21lbnRfbGVuZ3RoOwogCXUzMiBucl9mcmFnczsKIAl1MzIgb3JpZ2luYWxfZmlyc3RfbGVuZ3RoOwpAQCAtNDgwLDEzICs0NzgsNiBAQAogCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoIXNwaW5fdHJ5bG9jaygmbmVzbmljLT5zcV9sb2NrKSkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCW5lc3ZuaWMtPnNxX2xvY2tlZCsrOwotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9Ci0KIAkvKiBDaGVjayBpZiBTUSBpcyBmdWxsICovCiAJaWYgKCgoKG5lc25pYy0+c3FfdGFpbCsobmVzbmljLT5zcV9zaXplKjIpKS1uZXNuaWMtPnNxX2hlYWQpICYgKG5lc25pYy0+c3Ffc2l6ZSAtIDEpKSA9PSAxKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSB7CkBAIC00OTgsNyArNDg5LDYgQEAKIAkJCX0KIAkJfQogCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC01MzEsNyArNTIxLDYgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQluZXN2bmljLT5zcV9mdWxsKys7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAJCQkJbmVzX2RlYnVnKE5FU19EQkdfTklDX1RYLCAiJXM6IEhOSUMgU1EgZnVsbC0gVFNPIHJlcXVlc3QgaGFzIHRvbyBtYW55IGZyYWdzIVxuIiwKIAkJCQkJCW5ldGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwpAQCAtNjU2LDE3ICs2NDUsMTMgQEAKIAkJCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGhvZmZzZXQpOwogCQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG5ob2Zmc2V0KTsKIAkJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CisJCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCXNlbmRfcmMgPSBuZXNfbmljX3NlbmQoc2tiLCBuZXRkZXYpOwotCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOworCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spCiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQl9CiAJfQogCiAJYmFycmllcigpOwpAQCAtNjc2LDcgKzY2MSw2IEBACiAJCQkJKHdxZV9jb3VudCA8PCAyNCkgfCAoMSA8PCAyMykgfCBuZXN2bmljLT5uaWMucXBfaWQpOwogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTAxMiw3ICs5OTYsNiBAQAogCSJQYXVzZSBGcmFtZXMgUmVjZWl2ZWQiLAogCSJJbnRlcm5hbCBSb3V0aW5nIEVycm9ycyIsCiAJIlNRIFNXIERyb3BwZWQgU0tCcyIsCi0JIlNRIExvY2tlZCIsCiAJIlNRIEZ1bGwiLAogCSJTZWdtZW50ZWQgVFNPIFJlcXVlc3RzIiwKIAkiUnggU3ltYm9sIEVycm9ycyIsCkBAIC0xMTI5LDE2ICsxMTEyLDE3IEBACiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAl1MzIgbmljX2NvdW50OwogCXUzMiB1MzJ0ZW1wOworCXUzMiBpbmRleCA9IDA7CiAKIAl0YXJnZXRfZXRodG9vbF9zdGF0cy0+bl9zdGF0cyA9IE5FU19FVEhUT09MX1NUQVRfQ09VTlQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzBdID0gbmVzdm5pYy0+bmVzZGV2LT5saW5rX3N0YXR1c19pbnRlcnJ1cHRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxXSA9IG5lc3ZuaWMtPmxpbmVhcml6ZWRfc2ticzsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMl0gPSBuZXN2bmljLT50c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzW2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bGlua19zdGF0dXNfaW50ZXJydXB0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5saW5lYXJpemVkX3NrYnM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHNvX3JlcXVlc3RzOwogCiAJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAogCQkJTkVTX0lEWF9NQUNfVFhfUEFVU0VfRlJBTUVTICsgKG5lc3ZuaWMtPm5lc2Rldi0+bWFjX2luZGV4KjB4MjAwKSk7CiAJbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3NlbnQgKz0gdTMydGVtcDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbM10gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudDsKIAogCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwKIAkJCU5FU19JRFhfTUFDX1JYX1BBVVNFX0ZSQU1FUyArIChuZXN2bmljLT5uZXNkZXYtPm1hY19pbmRleCoweDIwMCkpOwpAQCAtMTIwOSw2MCArMTE5Myw1OSBAQAogCQluZXN2bmljLT5lbmRub2RlX2lwdjRfdGNwX3JldHJhbnNtaXRzICs9IHUzMnRlbXA7CiAJfQogCi0JdGFyZ2V0X3N0YXRfdmFsdWVzWzRdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzZdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbN10gPSBuZXN2bmljLT5zcV9sb2NrZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzhdID0gbmVzdm5pYy0+c3FfZnVsbDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbOV0gPSBuZXN2bmljLT5zZWdtZW50ZWRfdHNvX3JlcXVlc3RzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxMF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zeW1ib2xfZXJyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTFdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTJdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfb3ZlcnNpemVkX2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTNdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc2hvcnRfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE1XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfb2N0ZXRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNl0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTddID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxOV0gPSBtaF9kZXRlY3RlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjBdID0gbWhfcGF1c2VzX3NlbnQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIxXSA9IG5lc3ZuaWMtPmVuZG5vZGVfaXB2NF90Y3BfcmV0cmFuc21pdHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIyXSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIzXSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjRdID0gYXRvbWljX3JlYWQoJmNtX2Rpc2Nvbm5lY3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjVdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RlZHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syNl0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjddID0gYXRvbWljX3JlYWQoJmNtX3JlamVjdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOF0gPSBhdG9taWNfcmVhZCgmbW9kX3FwX3RpbW91dHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syOV0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szMF0gPSBhdG9taWNfcmVhZCgmc3dfcXBzX2Rlc3Ryb3llZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMxXSA9IGF0b21pY19yZWFkKCZxcHNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzJdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMzXSA9IGNtX3BhY2tldHNfc2VudDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzRdID0gY21fcGFja2V0c19ib3VuY2VkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szNV0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM2XSA9IGNtX3BhY2tldHNfcmVjZWl2ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM3XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzhdID0gY21fcGFja2V0c19yZXRyYW5zOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szOV0gPSBjbV9saXN0ZW5zX2NyZWF0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQwXSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0MV0gPSBjbV9iYWNrbG9nX2Ryb3BzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0Ml0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDNdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2NyZWF0ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0NF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDVdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VsX2Ryb3BwZWRfcGt0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ2XSA9IGF0b21pY19yZWFkKCZjbV9yZXNldHNfcmVjdmQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0N10gPSBpbnRfbW9kX3RpbWVyX2luaXQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ4XSA9IGludF9tb2RfY3FfZGVwdGhfMTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDldID0gaW50X21vZF9jcV9kZXB0aF80OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1MV0gPSBpbnRfbW9kX2NxX2RlcHRoXzI0OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1Ml0gPSBpbnRfbW9kX2NxX2RlcHRoXzMyOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1M10gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTRdID0gaW50X21vZF9jcV9kZXB0aF8yNTY7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU1XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTZdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1N10gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3JlY2VpdmVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmljX3J4X2V0aF9yb3V0ZV9lcnI7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+dHhfc3dfZHJvcHBlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5zcV9mdWxsOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnNlZ21lbnRlZF90c29fcmVxdWVzdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc3ltYm9sX2Vycl9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfamFiYmVyX2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9vdmVyc2l6ZWRfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3Nob3J0X2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2Rpc2NhcmQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9vY3RldHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfZGV0ZWN0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbWhfcGF1c2VzX3NlbnQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9pcHY0X3RjcF9yZXRyYW5zbWl0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9hY2NlcHRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fZGlzY29ubmVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0ZWRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdF9yZXFzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVqZWN0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJm1vZF9xcF90aW1vdXRzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZzd19xcHNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmcXBzX2Rlc3Ryb3llZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nsb3Nlcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19zZW50OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfYm91bmNlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2NyZWF0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZWNlaXZlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2Ryb3BwZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19yZXRyYW5zOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfY3JlYXRlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9iYWNrbG9nX2Ryb3BzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9sb29wYmFja3MpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19jcmVhdGVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fYWNjZWxfZHJvcHBlZF9wa3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fcmVzZXRzX3JlY3ZkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX3RpbWVyX2luaXQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8xOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfNDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE2OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMjQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8zMjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzEyODsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5mbHVzaGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogfQogCkBAIC0xNTY4LDYgKzE1NTEsMTkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5lc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbmVzX25ldGRldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXNfbmV0ZGV2X3N0b3AsCisJLm5kb19zdGFydF94bWl0IAk9IG5lc19uZXRkZXZfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXNfbmV0ZGV2X2dldF9zdGF0cywKKwkubmRvX3R4X3RpbWVvdXQgCT0gbmVzX25ldGRldl90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbmVzX25ldGRldl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgCT0gbmVzX25ldGRldl92bGFuX3J4X3JlZ2lzdGVyLAorfTsKIAogLyoqCiAgKiBuZXNfbmV0ZGV2X2luaXQgLSBpbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlCkBAIC0xNTc2LDcgKzE1NzIsNyBAQAogCQl2b2lkIF9faW9tZW0gKm1taW9fYWRkcikKIHsKIAl1NjQgdTY0dGVtcDsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBOVUxMOworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBuaWNfcXBfbWFwICpjdXJyX3FwX21hcDsKIAl1MzIgdTMydGVtcDsKQEAgLTE1ODgsMjIgKzE1ODQsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibmVzdm5pYyBldGhlcmRldiBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCW5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm5ldGRldiA9ICVwLCAlc1xuIiwgbmV0ZGV2LCBuZXRkZXYtPm5hbWUpOwogCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmbmVzZGV2LT5wY2lkZXYtPmRldik7CiAKLQluZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQltZW1zZXQobmVzdm5pYywgMCwgc2l6ZW9mKCpuZXN2bmljKSk7Ci0KLQluZXRkZXYtPm9wZW4gPSBuZXNfbmV0ZGV2X29wZW47Ci0JbmV0ZGV2LT5zdG9wID0gbmVzX25ldGRldl9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gbmVzX25ldGRldl9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gbmVzX25ldGRldl9nZXRfc3RhdHM7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gbmVzX25ldGRldl90eF90aW1lb3V0OwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gbmVzX25ldGRldl9zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBuZXNfbmV0ZGV2X2NoYW5nZV9tdHU7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IE5FU19UWF9USU1FT1VUOwogCW5ldGRldi0+aXJxID0gbmVzZGV2LT5wY2lkZXYtPmlycTsKIAluZXRkZXYtPm10dSA9IEVUSF9EQVRBX0xFTjsKQEAgLTE2MTEsNiArMTU5Nyw3IEBACiAJbmV0ZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwogCW5ldGRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9ISUdIRE1BOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZuZXNfbmV0ZGV2X29wczsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJm5lc19ldGh0b29sX29wczsKIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZuZXN2bmljLT5uYXBpLCBuZXNfbmV0ZGV2X3BvbGwsIDEyOCk7CiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIkVuYWJsaW5nIFZMQU4gSW5zZXJ0L0RlbGV0ZS5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCmluZGV4IGU2NDMwNmIuLmNjOTBjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwppbmRleCA2ZjNiYzFiLi5hMjgyMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCmluZGV4IGQ5M2E2NTYuLjdlNWI1YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtNTUxLDYgKzU1MSw3IEBACiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CiAJaW50IGkgPSAwOworCWludCByYzsKIAogCS8qIGZyZWUgdGhlIHJlc291cmNlcyAqLwogCWlmIChuZXNmbXItPmxlYWZfcGJsX2NudCA9PSAwKSB7CkBAIC01NzIsNyArNTczLDkgQEAKIAluZXNtci0+aWJtdy5ya2V5ID0gaWJmbXItPnJrZXk7CiAJbmVzbXItPmlibXcudW9iamVjdCA9IE5VTEw7CiAKLQlpZiAobmVzZm1yLT5uZXNtci5wYmxzX3VzZWQgIT0gMCkgeworCXJjID0gbmVzX2RlYWxsb2NfbXcoJm5lc21yLT5pYm13KTsKKworCWlmICgocmMgPT0gMCkgJiYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkICE9IDApKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCQlpZiAobmVzZm1yLT5uZXNtci5wYmxfNGspIHsKIAkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQ7CkBAIC01ODQsNyArNTg3LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlyZXR1cm4gbmVzX2RlYWxsb2NfbXcoJm5lc21yLT5pYm13KTsKKwlyZXR1cm4gcmM7CiB9CiAKIApAQCAtMTg4NiwyMSArMTg4OSw3NSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogcm9vdF8yNTYKKyAqLworc3RhdGljIHUzMiByb290XzI1NihzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LAorCQkgICAgc3RydWN0IG5lc19yb290X3ZwYmwgKnJvb3RfdnBibCwKKwkJICAgIHN0cnVjdCBuZXNfcm9vdF92cGJsICpuZXdfcm9vdCwKKwkJICAgIHUxNiBwYmxfY291bnRfNGssCisJCSAgICB1MTYgcGJsX2NvdW50XzI1NikKK3sKKwl1NjQgbGVhZl9wYmw7CisJaW50IGksIGosIGs7CisKKwlpZiAocGJsX2NvdW50XzRrID09IDEpIHsKKwkJbmV3X3Jvb3QtPnBibF92YmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LAorCQkJCQkJNTEyLCAmbmV3X3Jvb3QtPnBibF9wYmFzZSk7CisKKwkJaWYgKG5ld19yb290LT5wYmxfdmJhc2UgPT0gTlVMTCkKKwkJCXJldHVybiAwOworCisJCWxlYWZfcGJsID0gKHU2NClyb290X3ZwYmwtPnBibF9wYmFzZTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCW5ld19yb290LT5wYmxfdmJhc2VbaV0ucGFfbG93ID0KKwkJCQljcHVfdG9fbGUzMigodTMyKWxlYWZfcGJsKTsKKwkJCW5ld19yb290LT5wYmxfdmJhc2VbaV0ucGFfaGlnaCA9CisJCQkJY3B1X3RvX2xlMzIoKHUzMikoKCgodTY0KWxlYWZfcGJsKSA+PiAzMikpKTsKKwkJCWxlYWZfcGJsICs9IDI1NjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCQlqID0gaSAqIDE2OworCQkJcm9vdF92cGJsLT5wYmxfdmJhc2Vbal0gPSByb290X3ZwYmwtPnBibF92YmFzZVtpXTsKKwkJCWxlYWZfcGJsID0gbGUzMl90b19jcHUocm9vdF92cGJsLT5wYmxfdmJhc2Vbal0ucGFfbG93KSArCisJCQkgICAgKCgodTY0KWxlMzJfdG9fY3B1KHJvb3RfdnBibC0+cGJsX3ZiYXNlW2pdLnBhX2hpZ2gpKQorCQkJCTw8IDMyKTsKKwkJCWZvciAoayA9IDE7IGsgPCAxNjsgaysrKSB7CisJCQkJbGVhZl9wYmwgKz0gMjU2OworCQkJCXJvb3RfdnBibC0+cGJsX3ZiYXNlW2ogKyBrXS5wYV9sb3cgPQorCQkJCQkJY3B1X3RvX2xlMzIoKHUzMilsZWFmX3BibCk7CisJCQkJcm9vdF92cGJsLT5wYmxfdmJhc2VbaiArIGtdLnBhX2hpZ2ggPQorCQkJCSAgICBjcHVfdG9fbGUzMigodTMyKSgoKCh1NjQpbGVhZl9wYmwpID4+IDMyKSkpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKIAogLyoqCiAgKiBuZXNfcmVnX21yCiAgKi8KIHN0YXRpYyBpbnQgbmVzX3JlZ19tcihzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCBzdHJ1Y3QgbmVzX3BkICpuZXNwZCwKIAkJdTMyIHN0YWcsIHU2NCByZWdpb25fbGVuZ3RoLCBzdHJ1Y3QgbmVzX3Jvb3RfdnBibCAqcm9vdF92cGJsLAotCQlkbWFfYWRkcl90IHNpbmdsZV9idWZmZXIsIHUxNiBwYmxfY291bnQsIHUxNiByZXNpZHVhbF9wYWdlX2NvdW50LAotCQlpbnQgYWNjLCB1NjQgKmlvdmFfc3RhcnQpCisJCWRtYV9hZGRyX3Qgc2luZ2xlX2J1ZmZlciwgdTE2IHBibF9jb3VudF80aywKKwkJdTE2IHJlc2lkdWFsX3BhZ2VfY291bnRfNGssIGludCBhY2MsIHU2NCAqaW92YV9zdGFydCwKKwkJdTE2ICphY3R1YWxfcGJsX2NudCwgdTggKnVzZWRfNGtfcGJscykKIHsKIAlzdHJ1Y3QgbmVzX2h3X2NxcF93cWUgKmNxcF93cWU7CiAJc3RydWN0IG5lc19jcXBfcmVxdWVzdCAqY3FwX3JlcXVlc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKLQkvKiBpbnQgY291bnQ7ICovCisJdWludCBwZ19jbnQgPSAwOworCXUxNiBwYmxfY291bnRfMjU2OworCXUxNiBwYmxfY291bnQgPSAwOworCXU4ICB1c2VfMjU2X3BibHMgPSAwOworCXU4ICB1c2VfNGtfcGJscyA9IDA7CisJdTE2IHVzZV90d29fbGV2ZWwgPSAocGJsX2NvdW50XzRrID4gMSkgPyAxIDogMDsKKwlzdHJ1Y3QgbmVzX3Jvb3RfdnBibCBuZXdfcm9vdCA9IHswLCAwLCAwfTsKIAl1MzIgb3Bjb2RlID0gMDsKIAl1MTYgbWFqb3JfY29kZTsKIApAQCAtMTkxMyw0MSArMTk3MCw3MCBAQAogCWNxcF9yZXF1ZXN0LT53YWl0aW5nID0gMTsKIAljcXBfd3FlID0gJmNxcF9yZXF1ZXN0LT5jcXBfd3FlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JLyogdHJhY2sgUEJMIHJlc291cmNlcyAqLwotCWlmIChwYmxfY291bnQgIT0gMCkgewotCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJLyogVHdvIGxldmVsIFBCTCAqLwotCQkJaWYgKChwYmxfY291bnQrMSkgPiBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgNEtCIFBibHMgZm9yIHR3byBsZXZlbCByZXF1ZXN0LlxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQrMTsKLQkJCX0KLQkJfSBlbHNlIGlmIChyZXNpZHVhbF9wYWdlX2NvdW50ID4gMzIpIHsKLQkJCWlmIChwYmxfY291bnQgPiBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgNEtCIFBibHMuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudDsKKwlpZiAocGJsX2NvdW50XzRrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCisJCXBnX2NudCA9ICgocGJsX2NvdW50XzRrIC0gMSkgKiA1MTIpICsgcmVzaWR1YWxfcGFnZV9jb3VudF80azsKKwkJcGJsX2NvdW50XzI1NiA9IChwZ19jbnQgKyAzMSkgLyAzMjsKKwkJaWYgKHBnX2NudCA8PSAzMikgeworCQkJaWYgKHBibF9jb3VudF8yNTYgPD0gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpCisJCQkJdXNlXzI1Nl9wYmxzID0gMTsKKwkJCWVsc2UgaWYgKHBibF9jb3VudF80ayA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKQorCQkJCXVzZV80a19wYmxzID0gMTsKKwkJfSBlbHNlIGlmIChwZ19jbnQgPD0gMjA0OCkgeworCQkJaWYgKCgocGJsX2NvdW50XzRrICsgdXNlX3R3b19sZXZlbCkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgJiYKKwkJCSAgICAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IChuZXNhZGFwdGVyLT5tYXhfNGtwYmwgPj4gMSkpKSB7CisJCQkJdXNlXzRrX3BibHMgPSAxOworCQkJfSBlbHNlIGlmICgocGJsX2NvdW50XzI1NiArIDEpIDw9IG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsKSB7CisJCQkJdXNlXzI1Nl9wYmxzID0gMTsKKwkJCQl1c2VfdHdvX2xldmVsID0gMTsKKwkJCX0gZWxzZSBpZiAoKHBibF9jb3VudF80ayArIHVzZV90d29fbGV2ZWwpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKKwkJCQl1c2VfNGtfcGJscyA9IDE7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGJsX2NvdW50ID4gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiAyNTZCIFBibHMuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCAtPSBwYmxfY291bnQ7Ci0JCQl9CisJCQlpZiAoKHBibF9jb3VudF80ayArIDEpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpCisJCQkJdXNlXzRrX3BibHMgPSAxOwogCQl9CisKKwkJaWYgKHVzZV8yNTZfcGJscykgeworCQkJcGJsX2NvdW50ID0gcGJsX2NvdW50XzI1NjsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCX0gZWxzZSBpZiAodXNlXzRrX3BibHMpIHsKKwkJCXBibF9jb3VudCA9ICBwYmxfY291bnRfNGs7CisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgUGJsc1xuIik7CisJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCWlmICh1c2VfMjU2X3BibHMgJiYgdXNlX3R3b19sZXZlbCkgeworCQlpZiAocm9vdF8yNTYobmVzZGV2LCByb290X3ZwYmwsICZuZXdfcm9vdCwgcGJsX2NvdW50XzRrLCBwYmxfY291bnRfMjU2KSA9PSAxKSB7CisJCQlpZiAobmV3X3Jvb3QucGJsX3BiYXNlICE9IDApCisJCQkJcm9vdF92cGJsID0gJm5ld19yb290OworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBwYmxfY291bnRfMjU2ICsgdXNlX3R3b19sZXZlbDsKKwkJCXVzZV8yNTZfcGJscyA9IDA7CisKKwkJCWlmIChwYmxfY291bnRfNGsgPT0gMSkKKwkJCQl1c2VfdHdvX2xldmVsID0gMDsKKwkJCXBibF9jb3VudCA9IHBibF9jb3VudF80azsKKworCQkJaWYgKChwYmxfY291bnRfNGsgKyB1c2VfdHdvX2xldmVsKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7CisJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQkJCXVzZV80a19wYmxzID0gMTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisKKwkJCWlmICh1c2VfNGtfcGJscyA9PSAwKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQogCiAJb3Bjb2RlID0gTkVTX0NRUF9SRUdJU1RFUl9TVEFHIHwgTkVTX0NRUF9TVEFHX1JJR0hUU19MT0NBTF9SRUFEIHwKIAkJCQkJTkVTX0NRUF9TVEFHX1ZBX1RPIHwgTkVTX0NRUF9TVEFHX01SOwpAQCAtMTk3NiwxMCArMjA2Miw5IEBACiAJfSBlbHNlIHsKIAkJc2V0X3dxZV82NGJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEFfTE9XX0lEWCwgcm9vdF92cGJsLT5wYmxfcGJhc2UpOwogCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfQkxLX0NPVU5UX0lEWCwgcGJsX2NvdW50KTsKLQkJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0xFTl9JRFgsCi0JCQkJKCgocGJsX2NvdW50IC0gMSkgKiA0MDk2KSArIChyZXNpZHVhbF9wYWdlX2NvdW50KjgpKSk7CisJCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BCTF9MRU5fSURYLCAocGdfY250ICogOCkpOwogCi0JCWlmICgocGJsX2NvdW50ID4gMSkgfHwgKHJlc2lkdWFsX3BhZ2VfY291bnQgPiAzMikpCisJCWlmICh1c2VfNGtfcGJscykKIAkJCWNxcF93cWUtPndxZV93b3Jkc1tORVNfQ1FQX1dRRV9PUENPREVfSURYXSB8PSBjcHVfdG9fbGUzMihORVNfQ1FQX1NUQUdfUEJMX0JMS19TSVpFKTsKIAl9CiAJYmFycmllcigpOwpAQCAtMTk5NiwxMyArMjA4MSwyNSBAQAogCW1ham9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZTsKIAluZXNfcHV0X2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwogCisJaWYgKCghcmV0IHx8IG1ham9yX2NvZGUpICYmIHBibF9jb3VudCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQlpZiAodXNlXzI1Nl9wYmxzKQorCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJZWxzZSBpZiAodXNlXzRrX3BibHMpCisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJfQorCWlmIChuZXdfcm9vdC5wYmxfcGJhc2UpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsIDUxMiwgbmV3X3Jvb3QucGJsX3ZiYXNlLAorCQkJCSAgICBuZXdfcm9vdC5wYmxfcGJhc2UpOworCiAJaWYgKCFyZXQpCiAJCXJldHVybiAtRVRJTUU7CiAJZWxzZSBpZiAobWFqb3JfY29kZSkKIAkJcmV0dXJuIC1FSU87Ci0JZWxzZQotCQlyZXR1cm4gMDsKIAorCSphY3R1YWxfcGJsX2NudCA9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJKnVzZWRfNGtfcGJscyA9IHVzZV80a19wYmxzOwogCXJldHVybiAwOwogfQogCkBAIC0yMTY3LDE4ICsyMjY0LDE0IEBACiAJCXBibF9jb3VudCA9IHJvb3RfcGJsX2luZGV4OwogCX0KIAlyZXQgPSBuZXNfcmVnX21yKG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbl9sZW5ndGgsICZyb290X3ZwYmwsCi0JCQlidWZmZXJfbGlzdFswXS5hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCBpb3ZhX3N0YXJ0KTsKKwkJCWJ1ZmZlcl9saXN0WzBdLmFkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsIGlvdmFfc3RhcnQsCisJCQkmbmVzbXItPnBibHNfdXNlZCwgJm5lc21yLT5wYmxfNGspOwogCiAJaWYgKHJldCA9PSAwKSB7CiAJCW5lc21yLT5pYm1yLnJrZXkgPSBzdGFnOwogCQluZXNtci0+aWJtci5sa2V5ID0gc3RhZzsKIAkJbmVzbXItPm1vZGUgPSBJV05FU19NRU1SRUdfVFlQRV9NRU07CiAJCWlibXIgPSAmbmVzbXItPmlibXI7Ci0JCW5lc21yLT5wYmxfNGsgPSAoKHBibF9jb3VudCA+IDEpIHx8IChjdXJfcGJsX2luZGV4ID4gMzIpKSA/IDEgOiAwOwotCQluZXNtci0+cGJsc191c2VkID0gcGJsX2NvdW50OwotCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJbmVzbXItPnBibHNfdXNlZCsrOwotCQl9CiAJfSBlbHNlIHsKIAkJa2ZyZWUobmVzbXIpOwogCQlpYm1yID0gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTI0NTYsOCArMjU0OSw5IEBACiAJCQkJCXN0YWcsICh1bnNpZ25lZCBpbnQpaW92YV9zdGFydCwKIAkJCQkJKHVuc2lnbmVkIGludClyZWdpb25fbGVuZ3RoLCBzdGFnX2luZGV4LAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi0+bGVuZ3RoLCBwYmxfY291bnQpOwotCQkJcmV0ID0gbmVzX3JlZ19tciggbmVzZGV2LCBuZXNwZCwgc3RhZywgcmVnaW9uLT5sZW5ndGgsICZyb290X3ZwYmwsCi0JCQkJCWZpcnN0X2RtYV9hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCAmaW92YV9zdGFydCk7CisJCQlyZXQgPSBuZXNfcmVnX21yKG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbi0+bGVuZ3RoLCAmcm9vdF92cGJsLAorCQkJCQkgZmlyc3RfZG1hX2FkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsCisJCQkJCSAmaW92YV9zdGFydCwgJm5lc21yLT5wYmxzX3VzZWQsICZuZXNtci0+cGJsXzRrKTsKIAogCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJyZXQ9JWRcbiIsIHJldCk7CiAKQEAgLTI0NjYsMTEgKzI1NjAsNiBAQAogCQkJCW5lc21yLT5pYm1yLmxrZXkgPSBzdGFnOwogCQkJCW5lc21yLT5tb2RlID0gSVdORVNfTUVNUkVHX1RZUEVfTUVNOwogCQkJCWlibXIgPSAmbmVzbXItPmlibXI7Ci0JCQkJbmVzbXItPnBibF80ayA9ICgocGJsX2NvdW50ID4gMSkgfHwgKGN1cl9wYmxfaW5kZXggPiAzMikpID8gMSA6IDA7Ci0JCQkJbmVzbXItPnBibHNfdXNlZCA9IHBibF9jb3VudDsKLQkJCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJCQluZXNtci0+cGJsc191c2VkKys7Ci0JCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlpYl91bWVtX3JlbGVhc2UocmVnaW9uKTsKIAkJCQlrZnJlZShuZXNtcik7CkBAIC0yNjA5LDI0ICsyNjk4LDYgQEAKIAljcXBfcmVxdWVzdC0+d2FpdGluZyA9IDE7CiAJY3FwX3dxZSA9ICZjcXBfcmVxdWVzdC0+Y3FwX3dxZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCWlmIChuZXNtci0+cGJsc191c2VkICE9IDApIHsKLQkJaWYgKG5lc21yLT5wYmxfNGspIHsKLQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKLQkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gbmVzYWRhcHRlci0+bWF4XzRrcGJsKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSA0S0IgUEJMcygldSkgaGFzIGV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAotCQkJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCwgbmVzYWRhcHRlci0+bWF4XzRrcGJsKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7Ci0JCQlpZiAobmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgPiBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSAyNTZCIFBCTHMoJXUpIGhhcyBleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKLQkJCQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsLCBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKTsKLQkJCX0KLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJbmVzX2ZpbGxfaW5pdF9jcXBfd3FlKGNxcF93cWUsIG5lc2Rldik7CiAJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfV1FFX09QQ09ERV9JRFgsCiAJCQlORVNfQ1FQX0RFQUxMT0NBVEVfU1RBRyB8IE5FU19DUVBfU1RBR19WQV9UTyB8CkBAIC0yNjQ0LDExICsyNzE1LDYgQEAKIAkJCSIgQ1FQIE1ham9yOk1pbm9yIGNvZGVzID0gMHglMDRYOjB4JTA0WFxuIiwKIAkJCWliX21yLT5ya2V5LCByZXQsIGNxcF9yZXF1ZXN0LT5tYWpvcl9jb2RlLCBjcXBfcmVxdWVzdC0+bWlub3JfY29kZSk7CiAKLQluZXNfZnJlZV9yZXNvdXJjZShuZXNhZGFwdGVyLCBuZXNhZGFwdGVyLT5hbGxvY2F0ZWRfbXJzLAotCQkJKGliX21yLT5ya2V5ICYgMHgwZmZmZmYwMCkgPj4gOCk7Ci0KLQlrZnJlZShuZXNtcik7Ci0KIAltYWpvcl9jb2RlID0gY3FwX3JlcXVlc3QtPm1ham9yX2NvZGU7CiAJbWlub3JfY29kZSA9IGNxcF9yZXF1ZXN0LT5taW5vcl9jb2RlOwogCkBAIC0yNjY0LDggKzI3MzAsMzMgQEAKIAkJCQkiIHRvIGRlc3Ryb3kgU1RhZywgaWJfbXI9JXAsIHJrZXkgPSAweCUwOFhcbiIsCiAJCQkJbWFqb3JfY29kZSwgbWlub3JfY29kZSwgaWJfbXIsIGliX21yLT5ya2V5KTsKIAkJcmV0dXJuIC1FSU87Ci0JfSBlbHNlCi0JCXJldHVybiAwOworCX0KKworCWlmIChuZXNtci0+cGJsc191c2VkICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCWlmIChuZXNtci0+cGJsXzRrKSB7CisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7CisJCQlpZiAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IG5lc2FkYXB0ZXItPm1heF80a3BibCkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDRLQiBQQkxzKCV1KSBoYXMgIgorCQkJCQkiZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCisJCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwsCisJCQkJCW5lc2FkYXB0ZXItPm1heF80a3BibCk7CisJCX0gZWxzZSB7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBuZXNtci0+cGJsc191c2VkOworCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsID4gbmVzYWRhcHRlci0+bWF4XzI1NnBibCkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDI1NkIgUEJMcygldSkgaGFzICIKKwkJCQkJImV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAorCQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCwKKwkJCQkJbmVzYWRhcHRlci0+bWF4XzI1NnBibCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwl9CisJbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycywKKwkJCShpYl9tci0+cmtleSAmIDB4MGZmZmZmMDApID4+IDgpOworCisJa2ZyZWUobmVzbXIpOworCisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKaW5kZXggYWUwY2E5Yi4uNWU0OGY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCmluZGV4IGExOTI1ODEuLmRhNjA4MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTQ0NiwxMSArNDQ2LDExIEBACiAJCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCiAJCQlscm9fZmx1c2hfYWxsKCZwcml2LT5scm8ubHJvX21ncik7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWlmICh1bmxpa2VseShpYl9yZXFfbm90aWZ5X2NxKHByaXYtPnJlY3ZfY3EsCiAJCQkJCSAgICAgIElCX0NRX05FWFRfQ09NUCB8CiAJCQkJCSAgICAgIElCX0NRX1JFUE9SVF9NSVNTRURfRVZFTlRTKSkgJiYKLQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpCisJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlnb3RvIHBvbGxfbW9yZTsKIAl9CiAKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfcHRyOwogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYWluX3R4X2NxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IDBiZDJhNGYuLjQyMWE2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC02NjAsOCArNjYwLDEyIEBACiAKIAlwYXRoID0gX19wYXRoX2ZpbmQoZGV2LCBwaGRyLT5od2FkZHIgKyA0KTsKIAlpZiAoIXBhdGggfHwgIXBhdGgtPnZhbGlkKSB7Ci0JCWlmICghcGF0aCkKKwkJaW50IG5ld19wYXRoID0gMDsKKworCQlpZiAoIXBhdGgpIHsKIAkJCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LCBwaGRyLT5od2FkZHIgKyA0KTsKKwkJCW5ld19wYXRoID0gMTsKKwkJfQogCQlpZiAocGF0aCkgewogCQkJLyogcHV0IHBzZXVkb2hlYWRlciBiYWNrIG9uIGZvciBuZXh0IHRpbWUgKi8KIAkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mICpwaGRyKTsKQEAgLTY2OSw3ICs2NzMsOCBAQAogCiAJCQlpZiAoIXBhdGgtPnF1ZXJ5ICYmIHBhdGhfcmVjX3N0YXJ0KGRldiwgcGF0aCkpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQkJcGF0aF9mcmVlKGRldiwgcGF0aCk7CisJCQkJaWYgKG5ld19wYXRoKQorCQkJCQlwYXRoX2ZyZWUoZGV2LCBwYXRoKTsKIAkJCQlyZXR1cm47CiAJCQl9IGVsc2UKIAkJCQlfX3BhdGhfYWRkKGRldiwgcGF0aCk7CkBAIC0xMDE2LDE4ICsxMDIxLDIyIEBACiAJcHJpdi0+bHJvLmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJID0gaXBvaWJfb3BlbiwKKwkubmRvX3N0b3AJCSA9IGlwb2liX3N0b3AsCisJLm5kb19jaGFuZ2VfbXR1CQkgPSBpcG9pYl9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkgCSA9IGlwb2liX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQkgPSBpcG9pYl90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CSA9IGlwb2liX3NldF9tY2FzdF9saXN0LAorCS5uZG9fbmVpZ2hfc2V0dXAJID0gaXBvaWJfbmVpZ2hfc2V0dXBfZGV2LAorfTsKKwogc3RhdGljIHZvaWQgaXBvaWJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2LT5vcGVuCQkgPSBpcG9pYl9vcGVuOwotCWRldi0+c3RvcAkJID0gaXBvaWJfc3RvcDsKLQlkZXYtPmNoYW5nZV9tdHUJCSA9IGlwb2liX2NoYW5nZV9tdHU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJID0gaXBvaWJfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCSA9IGlwb2liX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQkgPSAmaXBvaWJfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMJCSA9ICZpcG9pYl9oZWFkZXJfb3BzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0CSA9IGlwb2liX3NldF9tY2FzdF9saXN0OwotCWRldi0+bmVpZ2hfc2V0dXAJID0gaXBvaWJfbmVpZ2hfc2V0dXBfZGV2OwogCiAJaXBvaWJfc2V0X2V0aHRvb2xfb3BzKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCmluZGV4IDMxOWIxODguLmVhOWUxNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYwpAQCAtNDAxLDEzICs0MDEsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbHVyZTsKIAotCWlzZXJfZGJnKCJwYXRoLm10dSBpcyAlZCBzZXR0aW5nIGl0IHRvICVkXG4iLAotCQkgY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1LCBJQl9NVFVfMTAyNCk7Ci0KLQkvKiB3ZSBtdXN0IHNldCB0aGUgTVRVIHRvIDEwMjQgYXMgdGhpcyBpcyB3aGF0IHRoZSB0YXJnZXQgaXMgYXNzdW1pbmcgKi8KLQlpZiAoY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1ID4gSUJfTVRVXzEwMjQpCi0JCWNtYV9pZC0+cm91dGUucGF0aF9yZWMtPm10dSA9IElCX01UVV8xMDI0OwotCiAJbWVtc2V0KCZjb25uX3BhcmFtLCAwLCBzaXplb2YgY29ubl9wYXJhbSk7CiAJY29ubl9wYXJhbS5yZXNwb25kZXJfcmVzb3VyY2VzID0gNDsKIAljb25uX3BhcmFtLmluaXRpYXRvcl9kZXB0aCAgICAgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IGVkOGJhYTAuLjdhN2EwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTk0LDExICs5NCw4IEBACiBzdGF0aWMgaW50IGV2ZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7CiAJc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyBpbnQgZXZkZXZfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGZsX293bmVyX3QgaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCA2ZjIzNjYyLi40MjI0ZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTE1OSwxMiArMTU5LDkgQEAKIAogc3RhdGljIGludCBqb3lkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBqb3lkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGpveWRldl9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jCmluZGV4IGU1MDA0N2IuLjc3Y2ZkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYwpAQCAtMyw3ICszLDcgQEAKICAqCUJhc2VkIG9uIGRyaXZlcnMvdXNiL2lmb3JjZS5jCiAgKgogICoJQ29weXJpZ2h0IFlhZWdhc2hpIFRha2VzaGksIDIwMDEKLSAqCUFkcmlhbiBNY01lbmFtaW4sIDIwMDgKKyAqCUFkcmlhbiBNY01lbmFtaW4sIDIwMDggLSAyMDA5CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjksNyArMjksNyBAQAogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlZGV2ID0gbXEtPmRldjsKIAlzdHJ1Y3QgZGNfcGFkICpwYWQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtYXBsZWRldik7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gcGFkLT5kZXY7Ci0JdW5zaWduZWQgY2hhciAqcmVzID0gbXEtPnJlY3ZidWY7CisJdW5zaWduZWQgY2hhciAqcmVzID0gbXEtPnJlY3ZidWYtPmJ1ZjsKIAogCWJ1dHRvbnMgPSB+bGUxNl90b19jcHVwKChfX2xlMTYgKikocmVzICsgOCkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCmluZGV4IDIyZjE3YTUuLjVhYTIzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIFNFR0EgRHJlYW1jYXN0IGtleWJvYXJkIGRyaXZlcgogICogQmFzZWQgb24gZHJpdmVycy91c2IvdXNia2JkLmMKLSAqIENvcHlyaWdodCBZQUVHQVNISSBUYWtlc2hpLCAyMDAxCi0gKiBQb3J0aW5nIHRvIDIuNiBDb3B5cmlnaHQgQWRyaWFuIE1jTWVuYW1pbiwgMjAwNywgMjAwOAorICogQ29weXJpZ2h0IChjKSBZQUVHQVNISSBUYWtlc2hpLCAyMDAxCisgKiBQb3J0aW5nIHRvIDIuNiBDb3B5cmlnaHQgKGMpIEFkcmlhbiBNY01lbmFtaW4sIDIwMDcgLSAyMDA5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMyw3ICszMyw3IEBACiAKICNkZWZpbmUgTlJfU0NBTkNPREVTIDI1NgogCi1NT0RVTEVfQVVUSE9SKCJZQUVHQVNISSBUYWtlc2hpLCBBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIDxhZHJpYW5AbWNtZW4uZGVtb24uY28udWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU0VHQSBEcmVhbWNhc3Qga2V5Ym9hcmQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTExNSw3ICsxMTUsNyBAQAogCQkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CiAJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleWNvZGUsIDApOwogCQkJfSBlbHNlCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hcGxlX2tleWI6ICIKKwkJCQlkZXZfZGJnKCZkZXYtPmRldiwKIAkJCQkJIlVua25vd24ga2V5IChzY2FuY29kZSAlI3gpIHJlbGVhc2VkLiIsCiAJCQkJCWNvZGUpOwogCQl9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAkJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAxKTsKIAkJCX0gZWxzZQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJtYXBsZV9rZXliOiAiCisJCQkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSBwcmVzc2VkLiIsCiAJCQkJCWNvZGUpOwogCQl9CkBAIC0xNDAsNyArMTQwLDcgQEAKIHsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptYXBsZWRldiA9IG1xLT5kZXY7CiAJc3RydWN0IGRjX2tiZCAqa2JkID0gbWFwbGVfZ2V0X2RydmRhdGEobWFwbGVkZXYpOwotCXVuc2lnbmVkIGxvbmcgKmJ1ZiA9IG1xLT5yZWN2YnVmOworCXVuc2lnbmVkIGxvbmcgKmJ1ZiA9ICh1bnNpZ25lZCBsb25nICopKG1xLT5yZWN2YnVmLT5idWYpOwogCiAJLyoKIAkgKiBXZSBzaG91bGQgYWx3YXlzIGdldCB0aGUgbG9jayBiZWNhdXNlIHRoZSBvbmx5CkBAIC0xNTksMjIgKzE1OSwyNyBAQAogCiBzdGF0aWMgaW50IHByb2JlX21hcGxlX2tiZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXYpOwotCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1hcGxlX2RyaXZlciAqbWRydjsKIAlpbnQgaSwgZXJyb3I7CiAJc3RydWN0IGRjX2tiZCAqa2JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CiAKLQlpZiAoIShtZGV2LT5mdW5jdGlvbiAmIE1BUExFX0ZVTkNfS0VZQk9BUkQpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwltZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7CisJbWRydiA9IHRvX21hcGxlX2RyaXZlcihkZXYtPmRyaXZlcik7CiAKIAlrYmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGNfa2JkKSwgR0ZQX0tFUk5FTCk7Ci0JaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICgha2JkIHx8ICFpZGV2KSB7CisJaWYgKCFrYmQpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCisJaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaWRldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9pZGV2X2FsbG9jOworCX0KKwogCWtiZC0+ZGV2ID0gaWRldjsKIAltZW1jcHkoa2JkLT5rZXljb2RlLCBkY19rYmRfa2V5Y29kZSwgc2l6ZW9mKGtiZC0+a2V5Y29kZSkpOwogCkBAIC0xOTUsNyArMjAwLDcgQEAKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOwogCWlmIChlcnJvcikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CiAKIAkvKiBNYXBsZSBwb2xsaW5nIGlzIGxvY2tlZCB0byBWQkxBTksgLSB3aGljaCBtYXkgYmUganVzdCA1MC9zICovCiAJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCBkY19rYmRfY2FsbGJhY2ssIEhaLzUwLApAQCAtMjA3LDEwICsyMTIsMTIgQEAKIAogCXJldHVybiBlcnJvcjsKIAotZmFpbDoKLQlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKLQlrZnJlZShrYmQpOworZmFpbF9yZWdpc3RlcjoKIAltYXBsZV9zZXRfZHJ2ZGF0YShtZGV2LCBOVUxMKTsKKwlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKK2ZhaWxfaWRldl9hbGxvYzoKKwlrZnJlZShrYmQpOworZmFpbDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwppbmRleCA1YzhhMWJjLi5lMTQ4MGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCkBAIC0yMTksNiArMjE5LDggQEAKIAkJICBwZGF0YS0+c2Nhbl90aW1pbmcsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKIAlpb3dyaXRlMTYoMCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZT1VURFJfT0ZGUyk7CiAJaW93cml0ZTE2KEtZQ1IyX0lSUV9MRVZFTCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpOworCisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCXJldHVybiAwOwogIGVycjU6CiAJZnJlZV9pcnEoaXJxLCBwZGV2KTsKQEAgLTI1MywxNyArMjU1LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfa2V5c2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzaF9rZXlzY19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7CiAKLSNkZWZpbmUgc2hfa2V5c2Nfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHNoX2tleXNjX3Jlc3VtZSBOVUxMCisJdmFsdWUgPSBpb3JlYWQxNihwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJdmFsdWUgfD0gMHg4MDsKKwllbHNlCisJCXZhbHVlICY9IH4weDgwOworCisJaW93cml0ZTE2KHZhbHVlLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9rZXlzY19kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gc2hfa2V5c2Nfc3VzcGVuZCwKK307CiAKIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfa2V5c2NfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2hfa2V5c2NfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaF9rZXlzY19yZW1vdmUpLAotCS5zdXNwZW5kCT0gc2hfa2V5c2Nfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNoX2tleXNjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAic2hfa2V5c2MiLAorCQkucG0JPSAmc2hfa2V5c2NfZGV2X3BtX29wcywKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggZWY5OWE3ZS4uMTdmZDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtNDAzLDEyICs0MDMsOSBAQAogCiBzdGF0aWMgaW50IG1vdXNlZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgbW91c2VkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1vdXNlZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggMDZiYmQwZS4uYjAzMDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC01OCwxMCArNTgsOCBAQAogc3RhdGljIGludCBzZXJpb19yYXdfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzZXJpb19yYXcgKnNlcmlvX3Jhd19sb2NhdGUoaW50IG1pbm9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYyBiL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKaW5kZXggMWJkODk2MC4uZmVhNWI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYworKysgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCkBAIC0yNTcsOSArMjU3LDkgQEAKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkgICAgICAgImFjdDIwMDBfaXNhX3JlY2VpdmU6IEludmFsaWQgQ0FQSSBtc2dcbiIpOwogCQkJCQl7Ci0JCQkJCQlpbnQgaTsgX191OCAqcDsgX191OCAqYzsgX191OCB0bXBbMzBdOwotCQkJCQkJZm9yIChpID0gMCwgcCA9IChfX3U4ICopJmNhcmQtPmlkYXQuaXNhLnJjdmhkciwgYyA9IHRtcDsgaSA8IDg7IGkrKykKLQkJCQkJCQljICs9IHNwcmludGYoYywgIiUwMnggIiwgKihwKyspKTsKKwkJCQkJCWludCBpOyBfX3U4ICpwOyBfX3U4ICp0OyBfX3U4IHRtcFszMF07CisJCQkJCQlmb3IgKGkgPSAwLCBwID0gKF9fdTggKikmY2FyZC0+aWRhdC5pc2EucmN2aGRyLCB0ID0gdG1wOyBpIDwgODsgaSsrKQorCQkJCQkJCXQgKz0gc3ByaW50Zih0LCAiJTAyeCAiLCAqKHArKykpOwogCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWN0MjAwMF9pc2FfcmVjZWl2ZTogJXNcbiIsIHRtcCk7CiAJCQkJCX0KIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggMWI1YmY4Ny4uM2U0NjhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJbGlzdF9kZWwoJm1wLT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaW1pbm9yX2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JaWYgKG1wLT50dHlza2IpIGtmcmVlX3NrYihtcC0+dHR5c2tiKTsKKwlrZnJlZV9za2IobXAtPnR0eXNrYik7CiAJbXAtPnR0eXNrYiA9IE5VTEw7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+aW5xdWV1ZSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+b3V0cXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCmluZGV4IGMyOTIwOGIuLjUwZWQ3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKQEAgLTIzOSw2ICsyMzksNyBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkICpjYXBpX2RyaXZlcl9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaykKIHsKIAlyZWFkX2xvY2soJmNhcGlfZHJpdmVyc19saXN0X2xvY2spOwogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmY2FwaV9kcml2ZXJzLCAqcG9zKTsKQEAgLTI1MCw2ICsyNTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBjYXBpX2RyaXZlcl9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmNhcGlfZHJpdmVyc19saXN0X2xvY2spCiB7CiAJcmVhZF91bmxvY2soJmNhcGlfZHJpdmVyc19saXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKaW5kZXggMDAxN2U1MC4uOWNhODg5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogbWVudWNvbmZpZyBJU0ROX0RSVl9HSUdBU0VUCi0JdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IChpc2RuKSIKKwl0cmlzdGF0ZSAiU2llbWVucyBHaWdhc2V0IHN1cHBvcnQiCiAJc2VsZWN0IENSQ19DQ0lUVAogCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscApAQCAtMTEsMTEgKzExLDExIEBACiAJICBvbmUgb2YgdGhlIGNvbm5lY3Rpb24gc3BlY2lmaWMgcGFydHMgdGhhdCBmb2xsb3cuCiAJICBUaGlzIHdpbGwgYnVpbGQgYSBtb2R1bGUgY2FsbGVkICJnaWdhc2V0Ii4KIAotaWYgSVNETl9EUlZfR0lHQVNFVCE9bgoraWYgSVNETl9EUlZfR0lHQVNFVAogCiBjb25maWcgR0lHQVNFVF9CQVNFCiAJdHJpc3RhdGUgIkdpZ2FzZXQgYmFzZSBzdGF0aW9uIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiBpbnRlcmZhY2Ugb2YgdGhlIEdpZ2FzZXQKIAkgIGJhc2UgZm9yIGNvbm5lY3Rpb24gdG8geW91ciBzeXN0ZW0uCkBAIC0yMyw3ICsyMyw3IEBACiAKIGNvbmZpZyBHSUdBU0VUX00xMDUKIAl0cmlzdGF0ZSAiR2lnYXNldCBNMTA1IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHRoZSBHaWdhc2V0IGJhc2UgdmlhIERFQ1QKIAkgIHVzaW5nIGEgR2lnYXNldCBNMTA1IChTaW51cyA0NSBEYXRhIDIpIFVTQiBERUNUIGRldmljZS4KQEAgLTMxLDcgKzMxLDYgQEAKIAogY29uZmlnIEdJR0FTRVRfTTEwMQogCXRyaXN0YXRlICJHaWdhc2V0IE0xMDEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTRE5fRFJWX0dJR0FTRVQKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gdGhlIEdpZ2FzZXQgYmFzZSB2aWEgREVDVAogCSAgdXNpbmcgYSBHaWdhc2V0IE0xMDEgKFNpbnVzIDQ1IERhdGEgMSkgUlMyMzIgREVDVCBkZXZpY2UuCkBAIC00OCw3ICs0Nyw2IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFVTQiByZXF1ZXN0cyB3ZSBvbmx5IGtub3cgZnJvbQogCSAgcmV2ZXJzZSBlbmdpbmVlcmluZyAoY3VycmVudGx5IE0xMDUgb25seSkuIElmIHlvdSBuZWVkCi0JICBmZWF0dXJlcyBsaWtlIGNvbmZpZ3VyYXRpb24gbW9kZSBvZiBNMTA1LCBzYXkgeWVzLiBJZiB5b3UKLQkgIGNhcmUgYWJvdXQgeW91ciBkZXZpY2UsIHNheSBuby4KKwkgIGZlYXR1cmVzIGxpa2UgY29uZmlndXJhdGlvbiBtb2RlIG9mIE0xMDUsIHNheSB5ZXMuCiAKLWVuZGlmICMgSVNETl9EUlZfR0lHQVNFVCAhPSBuCitlbmRpZiAjIElTRE5fRFJWX0dJR0FTRVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCmluZGV4IGFjMjQ1ZTcuLjMwNzFhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwpAQCAtMzg5LDggKzM4OSw3IEBACiAKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPQotCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAogCS8qIGFkYXB0ZWQgZnJvbSBwbGF0Zm9ybV9kZXZpY2VfcmVsZWFzZSgpIGluIGRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jICovCiAJLy9GSVhNRSBpcyB0aGlzIGFjdHVhbGx5IG5lY2Vzc2FyeT8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCmluZGV4IGZiYTYxZjYuLmQ3ODM4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwpAQCAtMjc4LDE3ICsyNzgsMTcgQEAKIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbW9kZW1fY3RybChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgb2xkX3N0YXRlLAogCQkJCSAgdW5zaWduZWQgbmV3X3N0YXRlKQogewotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogfQogCiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X2xpbmVfY3RybChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIHN0YXRpYyBpbnQgZ2lnYXNldF9iYXVkX3JhdGUoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNmbGFnKQogewotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogfQogI2VuZGlmCiAKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDE5LCAweDQxLAogCQkJICAgICAgIDAsIDAsICZidWYsIDYsIDIwMDApOwogI2Vsc2UKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCmluZGV4IDg0MzE4ZWMuLjMzY2U4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCkBAIC0xMTk4LDcgKzExOTgsNyBAQAogICAgICAgICBwQy0+eGJ1ZmZlcls1XSA9IChieXRlKShyeF9kbWFfbWFnaWMgPj4gIDgpOwogICAgICAgICBwQy0+eGJ1ZmZlcls2XSA9IChieXRlKShyeF9kbWFfbWFnaWMgPj4gMTYpOwogICAgICAgICBwQy0+eGJ1ZmZlcls3XSA9IChieXRlKShyeF9kbWFfbWFnaWMgPj4gMjQpOwotICAgICAgICBwQy0+eGJ1ZmZlcls4XSA9IChieXRlKURJVkFfTUFYX01BTkFHRU1FTlRfVFJBTlNGRVJfU0laRTsKKwlwQy0+eGJ1ZmZlcls4XSA9IChieXRlKShESVZBX01BWF9NQU5BR0VNRU5UX1RSQU5TRkVSX1NJWkUgJiAweEZGKTsKICAgICAgICAgcEMtPnhidWZmZXJbOV0gPSAoYnl0ZSkoRElWQV9NQVhfTUFOQUdFTUVOVF9UUkFOU0ZFUl9TSVpFID4+IDgpOwogICAgICAgICBwQy0+eGJ1ZmZlclsxMF0gPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCA0Y2M5NGYyLi4zMWY5MWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTExOTQsNyArMTE5NCw4IEBACiAvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbiBmb3IgZWFjaCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLWJ5dGUgY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBjaDsKICAgd29yZCBpOwpAQCAtMTQxMSw3ICsxNDEyLDggQEAKICAgcmV0dXJuIDI7CiB9CiAKLWJ5dGUgY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBpLCBJbmZvOwogICB3b3JkIFJlamVjdDsKQEAgLTE1NjcsMTMgKzE1NjksMTUgQEAKICAgcmV0dXJuIDE7CiB9CiAKLWJ5dGUgY29ubmVjdF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiY29ubmVjdF9hX3JlcyIpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvOwogICB3b3JkIGk7CkBAIC0xNjI4LDcgKzE2MzIsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiZGlzY29ubmVjdF9yZXMiKSk7CiAgIGlmKHBsY2kpCkBAIC0xNjU1LDcgKzE2NjAsOCBAQAogICByZXR1cm4gMDsKIH0KIAotYnl0ZSBsaXN0ZW5fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgbGlzdGVuX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvOwogICBieXRlIGk7CkBAIC0xNzA0LDcgKzE3MTAsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgaW5mb19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgaW5mb19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBpOwogICBBUElfUEFSU0UgKiBhaTsKQEAgLTE4MTMsMTMgKzE4MjAsMTUgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGluZm9fcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGluZm9fcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJpbmZvX3JlcyIpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGFsZXJ0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBhbGVydF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbzsKICAgYnl0ZSByZXQ7CkBAIC0xODQ5LDcgKzE4NTgsOCBAQAogICByZXR1cm4gcmV0OwogfQogCi1ieXRlIGZhY2lsaXR5X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBmYWNpbGl0eV9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvID0gMDsKICAgd29yZCBpICAgID0gMDsKQEAgLTI1OTksMTMgKzI2MDksMTUgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGZhY2lsaXR5X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBmYWNpbGl0eV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImZhY2lsaXR5X3JlcyIpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbyA9IDA7CiAgIGJ5dGUgcmVxOwpAQCAtMjgzOSw3ICsyODUxLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKICAgQVBJX1BBUlNFICogbmNwaTsKQEAgLTI5NTQsNyArMjk2Nyw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM19hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAKQEAgLTI5NzQsNyArMjk4OCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm87CiAgIHdvcmQgbmNjaTsKQEAgLTMwMzAsNyArMzA0NSw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAgIHdvcmQgaTsKQEAgLTMwODYsNyArMzEwMiw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkYXRhX2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRhdGFfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICBOQ0NJICAgKm5jY2lfcHRyOwogICBEQVRBX0IzX0RFU0MgICAqZGF0YTsKQEAgLTMxNjMsNyArMzE4MCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkYXRhX2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRhdGFfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG47CiAgIHdvcmQgbmNjaTsKQEAgLTMxOTYsNyArMzIxNCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSByZXNldF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSByZXNldF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm87CiAgIHdvcmQgbmNjaTsKQEAgLTMyMzcsNyArMzI1Niw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSByZXNldF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSByZXNldF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAKQEAgLTMyNjEsNyArMzI4MSw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX3Q5MF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfdDkwX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKICAgQVBJX1BBUlNFICogbmNwaTsKQEAgLTMyOTUsNyArMzMxNiw4IEBACiB9CiAKIAotYnl0ZSBzZWxlY3RfYl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgc2VsZWN0X2JfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbz0wOwogICB3b3JkIGk7CkBAIC04Njg5LDcgKzg3MTEsNyBAQAogLyogc2VuZCBhIHJlcXVlc3QgZm9yIHRoZSBzaWduYWxpbmcgZW50aXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIHNpZ19yZXEoUExDSSAgICogcGxjaSwgYnl0ZSByZXEsIGJ5dGUgSWQpCitzdGF0aWMgdm9pZCBzaWdfcmVxKFBMQ0kgKnBsY2ksIGJ5dGUgcmVxLCBieXRlIElkKQogewogICBpZighcGxjaSkgcmV0dXJuOwogICBpZihwbGNpLT5hZGFwdGVyLT5hZGFwdGVyX2Rpc2FibGVkKSByZXR1cm47CkBAIC04Nzg5LDcgKzg4MTEsNyBAQAogICBkYnVnKDEsZHByaW50Zigic2VuZF9vayIpKTsKIH0KIAotdm9pZCBzZW5kX2RhdGEoUExDSSAgICogcGxjaSkKK3N0YXRpYyB2b2lkIHNlbmRfZGF0YShQTENJICpwbGNpKQogewogICBESVZBX0NBUElfQURBUFRFUiAgICogYTsKICAgREFUQV9CM19ERVNDICAgKiBkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCmluZGV4IGYwZTE0ZGYuLjY0MWE5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKQEAgLTU2LDggKzU2LDggQEAKIHN0YXRpYyBpbnQgSEZDX2NudDsKIHN0YXRpYyB1aW50IGRlYnVnOwogc3RhdGljIHVpbnQgcG9sbCwgdGljczsKLXN0cnVjdCB0aW1lcl9saXN0IGhmY190bDsKLXUzMgloZmNfamlmZmllczsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoZmNfdGw7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBoZmNfamlmZmllczsKIAogTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwppbmRleCBiYTY5MjVmLi45YzQyN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tSVNETmh3Lmg+CiAjaW5jbHVkZSAiaGZjc3VzYi5oIgogCi1jb25zdCBjaGFyICpoZmNzdXNiX3JldiA9ICJSZXZpc2lvbjogMC4zLjMgKHNvY2tldCksIDIwMDgtMTEtMDUiOworc3RhdGljIGNvbnN0IGNoYXIgKmhmY3N1c2JfcmV2ID0gIlJldmlzaW9uOiAwLjMuMyAoc29ja2V0KSwgMjAwOC0xMS0wNSI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiBzdGF0aWMgaW50IHBvbGwgPSBERUZBVUxUX1RSQU5TUF9CVVJTVF9TWjsKQEAgLTk3NCw3ICs5NzQsNyBAQAogCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBmaWxsX2lzb2NfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCiAJICAgICAgdm9pZCAqYnVmLCBpbnQgbnVtX3BhY2tldHMsIGludCBwYWNrZXRfc2l6ZSwgaW50IGludGVydmFsLAogCSAgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KQpAQCAtMTcyMCw3ICsxNzIwLDcgQEAKIAogCiAvKiBIYXJkd2FyZSBJbml0aWFsaXphdGlvbiAqLwotaW50CitzdGF0aWMgaW50CiBzZXR1cF9oZmNzdXNiKHN0cnVjdCBoZmNzdXNiICpodykKIHsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmgKaW5kZXggMDk4NDg2Yi4uNDNlZmU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oCkBAIC0xOTgsNyArMTk4LDcgQEAKIH07CiAKIC8qIHN0cmluZyBkZXNjcmlwdGlvbiBvZiBjaG9zZW4gY29uZmlnICovCi1jaGFyICpjb25mX3N0cltdID0geworc3RhdGljIGNoYXIgKmNvbmZfc3RyW10gPSB7CiAJIjQgSW50ZXJydXB0IElOICsgMyBJc29jaHJvbiBPVVQiLAogCSIzIEludGVycnVwdCBJTiArIDMgSXNvY2hyb24gT1VUIiwKIAkiNCBJc29jaHJvbiBJTiArIDMgSXNvY2hyb24gT1VUIiwKQEAgLTMxNiw3ICszMTYsNyBAQAogI2RlZmluZSBIRkNfTUFYX1RFX0xBWUVSMV9TVEFURSA4CiAjZGVmaW5lIEhGQ19NQVhfTlRfTEFZRVIxX1NUQVRFIDQKIAotY29uc3QgY2hhciAqSEZDX1RFX0xBWUVSMV9TVEFURVNbSEZDX01BWF9URV9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpIRkNfVEVfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX1RFX0xBWUVSMV9TVEFURSArIDFdID0gewogCSJURSBGMCAtIFJlc2V0IiwKIAkiVEUgRjEgLSBSZXNldCIsCiAJIlRFIEYyIC0gU2Vuc2luZyIsCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkiVEUgRjggLSBMb3N0IGZyYW1pbmciLAogfTsKIAotY29uc3QgY2hhciAqSEZDX05UX0xBWUVSMV9TVEFURVNbSEZDX01BWF9OVF9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpIRkNfTlRfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX05UX0xBWUVSMV9TVEFURSArIDFdID0gewogCSJOVCBHMCAtIFJlc2V0IiwKIAkiTlQgRzEgLSBEZWFjdGl2ZSIsCiAJIk5UIEcyIC0gUGVuZGluZyBhY3RpdmF0aW9uIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKaW5kZXggN2M1NmM0NC4uMDI1YTIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKQEAgLTI0LDcgKzI0LDYgQEAKIGNvbnN0IGNoYXIgKmxsaV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuNTkuMi40ICQiOwogCiBleHRlcm4gc3RydWN0IElzZG5DYXJkIGNhcmRzW107Ci1leHRlcm4gaW50IG5yY2FyZHM7CiAKIHN0YXRpYyBpbnQgaW5pdF9iX3N0KHN0cnVjdCBDaGFubmVsICpjaGFucCwgaW50IGluY29taW5nKTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfYl9zdChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCmluZGV4IGRlZDlkMGIuLjRmYWIxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKQEAgLTM2MSwxMiArMzYxLDYgQEAKIAogaW50IG5yY2FyZHM7CiAKLWV4dGVybiBjb25zdCBjaGFyICpsMV9yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICpsMl9yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICpsM19yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICpsbGlfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqdGVpX3JldmlzaW9uOwotCiBjaGFyICpIaVNheF9nZXRyZXYoY29uc3QgY2hhciAqcmV2aXNpb24pCiB7CiAJY2hhciAqcmV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYwppbmRleCBjZjA4MjY2Li4yMGQ3Njg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgImhmY18yYmRzMC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKmhmY3NfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEwLjIuNCAkIjsKIAogc3RhdGljIGlycXJldHVybl90CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IGU4ZDQyOWYuLmY4NTI3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMjEsNiArMTIxLDE1IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKK2V4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOworZXh0ZXJuIGludCBucmNhcmRzOworCitleHRlcm4gY29uc3QgY2hhciAqbDFfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqbDJfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqbDNfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqbGxpX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRlaV9yZXZpc2lvbjsKKwogLyogaW5jbHVkZSBsM2RzczEgJiBuaTEgc3BlY2lmaWMgcHJvY2VzcyBzdHJ1Y3R1cmVzLCBidXQgbm8gb3RoZXIgZGVmaW5lcyAqLwogI2lmZGVmIENPTkZJR19ISVNBWF9FVVJPCiAgICNkZWZpbmUgbDNkc3MxX3Byb2Nlc3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYwppbmRleCBhMTQyMDRlLi4zMTdmMTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCkBAIC0xOCwxMiArMTgsMTIgQEAKICAqCiAgKi8KIAotY29uc3QgY2hhciAqbDFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjQ2LjIuNSAkIjsKLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCitjb25zdCBjaGFyICpsMV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuNDYuMi41ICQiOworCiAjZGVmaW5lIFRJTUVSM19WQUxVRSA3MDAwCiAKIHN0YXRpYyBzdHJ1Y3QgRnNtIGwxZnNtX2I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKaW5kZXggYTEwZGZhOC4uNTU2OWE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwpAQCAtNDgsOCArNDgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKlNlZGxiYXVlcl9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMzQuMi42ICQiOwogCiBzdGF0aWMgY29uc3QgY2hhciAqU2VkbGJhdWVyX1R5cGVzW10gPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCmluZGV4IDQ4NTgxMzMuLjNjYTBiZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlICJpc2FjLmgiCiAjaW5jbHVkZSAiaHNjeC5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKnRlbGVzMF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTUuMi40ICQiOwogCiAjZGVmaW5lIFRFTEVTX0lPTUVNX1NJWkUJMHg0MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYwppbmRleCA1ZGM5ZjFhLi5lOWY1YmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiaHNjeC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKIHN0YXRpYyBjb25zdCBjaGFyICp0ZWxlczNfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE5LjIuNCAkIjsKIAogI2RlZmluZSBieXRlb3V0KGFkZHIsdmFsKSBvdXRiKHZhbCxhZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYwppbmRleCA0NGQ5YzNkLi5mMWJiYzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYwpAQCAtNDEsMTEgKzQxLDExIEBACiAKIHN0YXRpYyB1X2ludCAqZGVidWc7CiBzdGF0aWMgTElTVF9IRUFEKGljbG9ja19saXN0KTsKLURFRklORV9SV0xPQ0soaWNsb2NrX2xvY2spOwotdTE2CWljbG9ja19jb3VudDsJCS8qIGNvdW50ZXIgb2YgbGFzdCBjbG9jayAqLwotc3RydWN0CXRpbWV2YWwgaWNsb2NrX3R2OwkvKiB0aW1lIHN0YW1wIG9mIGxhc3QgY2xvY2sgKi8KLWludAlpY2xvY2tfdHZfdmFsaWQ7CS8qIGFscmVhZHkgcmVjZWl2ZWQgb25lIHRpbWVzdGFtcCAqLwotc3RydWN0CW1JU0ROY2xvY2sgKmljbG9ja19jdXJyZW50Oworc3RhdGljIERFRklORV9SV0xPQ0soaWNsb2NrX2xvY2spOworc3RhdGljIHUxNiBpY2xvY2tfY291bnQ7CQkvKiBjb3VudGVyIG9mIGxhc3QgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBpY2xvY2tfdHY7CS8qIHRpbWUgc3RhbXAgb2YgbGFzdCBjbG9jayAqLworc3RhdGljIGludCBpY2xvY2tfdHZfdmFsaWQ7CQkvKiBhbHJlYWR5IHJlY2VpdmVkIG9uZSB0aW1lc3RhbXAgKi8KK3N0YXRpYyBzdHJ1Y3QgbUlTRE5jbG9jayAqaWNsb2NrX2N1cnJlbnQ7CiAKIHZvaWQKIG1JU0ROX2luaXRfY2xvY2sodV9pbnQgKmRwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwppbmRleCBmMmIzMjE4Li5iYmQ5OWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwpAQCAtMTUyLDggKzE1Miw3IEBACiAJdV9sb25nCQkJZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXItPmRldi0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZ0aW1lci0+bGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmdGltZXItPmxpc3QsICZ0aW1lci0+ZGV2LT5leHBpcmVkKTsKKwlsaXN0X21vdmVfdGFpbCgmdGltZXItPmxpc3QsICZ0aW1lci0+ZGV2LT5leHBpcmVkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lci0+ZGV2LT5sb2NrLCBmbGFncyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0aW1lci0+ZGV2LT53YWl0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwppbmRleCA1YmEyYTg3Li5lMDc1ZThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKKysrIGIvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCkBAIC0zNDcsOCArMzQ3LDcgQEAKIAkJaWYgKGRldi0+cmVhZF9mcmFtZSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjYml0X3JlY2VpdmU6IFR5cGUgMCBmcmFtZSBhbmQgcmVhZF9mcmFtZSAhPSBOVUxMXG4iKTsKIAkJCS8qIGRpc2NhcmQgcHJldmlvdXMgcXVldWVkIGZyYW1lICovCi0JCQlpZiAoZGV2LT5yZWFkX2ZyYW1lLT5za2IpCi0JCQkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKKwkJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CiAJCQlrZnJlZShkZXYtPnJlYWRfZnJhbWUpOwogCQkJZGV2LT5yZWFkX2ZyYW1lID0gTlVMTDsKIAkJfQpAQCAtNjAxLDggKzYwMCw3IEBACiAJZGV2LT53X2J1c3kgPSBkZXYtPnJfYnVzeSA9IDE7CiAKIAlpZiAoZGV2LT5yZWFkX2ZyYW1lKSB7Ci0JCWlmIChkZXYtPnJlYWRfZnJhbWUtPnNrYikKLQkJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CisJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CiAJCWtmcmVlKGRldi0+cmVhZF9mcmFtZSk7CiAJCWRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA3NDI3MTM2Li41NTZhZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMjIzLDQgKzIyMyw3IEBACiAJICBUaGlzIGFsbG93cyBMRURzIHRvIGJlIGluaXRpYWxpc2VkIGluIHRoZSBPTiBzdGF0ZS4KIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbW1lbnQgImlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkiCisJZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTCisKIGVuZGlmICMgTkVXX0xFRFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWNhL21jYS1idXMuYyBiL2RyaXZlcnMvbWNhL21jYS1idXMuYwppbmRleCBlZjJkYmZlLi5hZGE1ZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21jYS9tY2EtYnVzLmMKKysrIGIvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAogCW1jYV9kZXYtPmRldi5wYXJlbnQgPSAmbWNhX2J1cy0+ZGV2OwogCW1jYV9kZXYtPmRldi5idXMgPSAmbWNhX2J1c190eXBlOwotCXNwcmludGYgKG1jYV9kZXYtPmRldi5idXNfaWQsICIlMDJkOiUwMlgiLCBidXMsIG1jYV9kZXYtPnNsb3QpOworCWRldl9zZXRfbmFtZSgmbWNhX2Rldi0+ZGV2LCAiJTAyZDolMDJYIiwgYnVzLCBtY2FfZGV2LT5zbG90KTsKIAltY2FfZGV2LT5kbWFfbWFzayA9IG1jYV9idXMtPmRlZmF1bHRfZG1hX21hc2s7CiAJbWNhX2Rldi0+ZGV2LmRtYV9tYXNrID0gJm1jYV9kZXYtPmRtYV9tYXNrOwogCW1jYV9kZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IG1jYV9kZXYtPmRtYV9tYXNrOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJaWYgKCFtY2FfYnVzKQogCQlyZXR1cm4gTlVMTDsKIAotCXNwcmludGYobWNhX2J1cy0+ZGV2LmJ1c19pZCwibWNhJWQiLGJ1cyk7CisJZGV2X3NldF9uYW1lKCZtY2FfYnVzLT5kZXYsICJtY2ElZCIsIGJ1cyk7CiAJc3ByaW50ZihtY2FfYnVzLT5uYW1lLCJIb3N0ICVzIE1DQSBCcmlkZ2UiLCBidXMgPyAiU2Vjb25kYXJ5IiA6ICJQcmltYXJ5Iik7CiAJaWYgKGRldmljZV9yZWdpc3RlcigmbWNhX2J1cy0+ZGV2KSkgewogCQlrZnJlZShtY2FfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZWE1NzY0LmMKaW5kZXggNGQzNTMwOC4uMzkzNjIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZWE1NzY0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZWE1NzY0LmMKQEAgLTI5OCw3ICsyOTgsOCBAQAogCiAJc3RybGNweSh2LT5kcml2ZXIsIGRldi0+ZGV2LmRyaXZlci0+bmFtZSwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgZGV2LT5uYW1lLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiSTJDOiVzIiwgZGV2LT5kZXYuYnVzX2lkKTsKKwlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwKKwkJICJJMkM6JXMiLCBkZXZfbmFtZSgmZGV2LT5kZXYpKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKIAl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCmluZGV4IDY2Yzc1NWMuLmNlOThkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKQEAgLTgwMyw5ICs4MDMsMTAgQEAKIAkJcmV0dXJuICgtRU5PRU5UKTsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwgc2l6ZW9mKHNuZF9jeDg4X2NhcmRfdCkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuICgtRU5PTUVNKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHNuZF9jeDg4X2NhcmRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jeDg4X2Rldl9mcmVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDJhYzczOGYuLmYxMzJlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCkBAIC00NDgsOSArNDQ4LDEwIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiZW0yOHh4LWF1ZGlvLmM6IENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgIgogCQkJICJSZWNoYmVyZ2VyXG4iKTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bnJdLCAiRW0yOHh4IEF1ZGlvIiwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZucl0sICJFbTI4eHggQXVkaW8iLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXNwaW5fbG9ja19pbml0KCZhZGV2LT5zbG9jayk7CiAJZXJyID0gc25kX3BjbV9uZXcoY2FyZCwgIkVtMjh4eCBBdWRpbyIsIDAsIDAsIDEsICZwY20pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCmluZGV4IGM3NTBkM2QuLjhiMGI2NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKQEAgLTk5MCwxMCArOTkwLDEwIEBACiAJaWYgKCFlbmFibGVbZGV2bnVtXSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc25kX2NhcmRfc2FhNzEzNF90KSk7Ci0KLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnVtXSwgaWRbZGV2bnVtXSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc25kX2NhcmRfc2FhNzEzNF90KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNBQTcxMzQiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCmluZGV4IGNmOWQ0YzcuLjhhNGI3NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmdjRsMl9kZXYtPmxvY2spOwogCXY0bDJfZGV2LT5kZXYgPSBkZXY7CiAJc25wcmludGYodjRsMl9kZXYtPm5hbWUsIHNpemVvZih2NGwyX2Rldi0+bmFtZSksICIlcyAlcyIsCi0JCQlkZXYtPmRyaXZlci0+bmFtZSwgZGV2LT5idXNfaWQpOworCQkJZGV2LT5kcml2ZXItPm5hbWUsIGRldl9uYW1lKGRldikpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHY0bDJfZGV2KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tY3AtY29yZS5jCmluZGV4IDYwNjNkYzIuLjU3MjcxY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWNwLWNvcmUuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIGludCBtY3BfaG9zdF9yZWdpc3RlcihzdHJ1Y3QgbWNwICptY3ApCiB7Ci0Jc3RyY3B5KG1jcC0+YXR0YWNoZWRfZGV2aWNlLmJ1c19pZCwgIm1jcDAiKTsKKwlkZXZfc2V0X25hbWUoJm1jcC0+YXR0YWNoZWRfZGV2aWNlLCAibWNwMCIpOwogCXJldHVybiBkZXZpY2VfcmVnaXN0ZXIoJm1jcC0+YXR0YWNoZWRfZGV2aWNlKTsKIH0KIEVYUE9SVF9TWU1CT0wobWNwX2hvc3RfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwppbmRleCA2ODYwYzkyLi5mZWE5MDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwpAQCAtNDkyLDcgKzQ5Miw3IEBACiAKIAl1Y2ItPmRldi5jbGFzcyA9ICZ1Y2IxeDAwX2NsYXNzOwogCXVjYi0+ZGV2LnBhcmVudCA9ICZtY3AtPmF0dGFjaGVkX2RldmljZTsKLQlzdHJsY3B5KHVjYi0+ZGV2LmJ1c19pZCwgInVjYjF4MDAiLCBzaXplb2YodWNiLT5kZXYuYnVzX2lkKSk7CisJZGV2X3NldF9uYW1lKCZ1Y2ItPmRldiwgInVjYjF4MDAiKTsKIAogCXNwaW5fbG9ja19pbml0KCZ1Y2ItPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZ1Y2ItPmlvX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKaW5kZXggMmIxMTk2ZS4uZTk0ZTkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogCiAJdGFza2xldF9pbml0KCZob3N0LT50YXNrbGV0LCBhdG1jaV90YXNrbGV0X2Z1bmMsICh1bnNpZ25lZCBsb25nKWhvc3QpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdG1jaV9pbnRlcnJ1cHQsIDAsIHBkZXYtPmRldi5idXNfaWQsIGhvc3QpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtY2lfaW50ZXJydXB0LCAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgaG9zdCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMKaW5kZXggZmIyOTIxZi4uMGM0NGQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlpZiAoIWdwaW9faXNfdmFsaWQob21zLT5ncGlvc1tpXSkpCiAJCQljb250aW51ZTsKIAotCQlyZXQgPSBncGlvX3JlcXVlc3Qob21zLT5ncGlvc1tpXSwgZGV2LT5idXNfaWQpOworCQlyZXQgPSBncGlvX3JlcXVlc3Qob21zLT5ncGlvc1tpXSwgZGV2X25hbWUoZGV2KSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlvbXMtPmdwaW9zW2ldID0gLUVJTlZBTDsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDA0M2Q1MGYuLjcyOWY4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTU1MSw1ICs1NTEsMTUgQEAKIAogCSAgVGhpcyBzZWxlY3Rpb24gYXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBtYXBfcmFtIGRyaXZlci4KIAotZW5kbWVudQorY29uZmlnIE1URF9WTVUKKwl0cmlzdGF0ZSAiTWFwIGRyaXZlciBmb3IgRHJlYW1jYXN0IFZNVSIKKwlkZXBlbmRzIG9uIE1BUExFCisJaGVscAorCSAgVGhpcyBkcml2ZXIgZW5hYmxlcyBhY2Nlc3MgdG8gdGhlIERyZWFtY2FzdCBWaXN1YWwgTWVtb3J5IFVuaXQgKFZNVSkuCiAKKwkgIE1vc3QgRHJlYW1jYXN0IHVzZXJzIHdpbGwgd2FudCB0byBzYXkgWSBoZXJlLgorCisJICBUbyBidWlsZCB0aGlzIGFzIGEgbW9kdWxlIHNlbGVjdCBNIGhlcmUsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKKwkgIHZtdS1mbGFzaC4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggNmQ5YmEzNS4uMjZiMjhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC02MSwzICs2MSw0IEBACiBvYmotJChDT05GSUdfTVREX09NQVBfTk9SKQkrPSBvbWFwX25vci5vCiBvYmotJChDT05GSUdfTVREX0lOVEVMX1ZSX05PUikJKz0gaW50ZWxfdnJfbm9yLm8KIG9iai0kKENPTkZJR19NVERfQkZJTl9BU1lOQykJKz0gYmZpbi1hc3luYy1mbGFzaC5vCitvYmotJChDT05GSUdfTVREX1ZNVSkJCSs9IHZtdS1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwppbmRleCA3NzExMzljLi5lOTAyNmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKQEAgLTQxLDkgKzQxLDggQEAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKIAotc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqZmxhc2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm87CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwpAQCAtMTE0LDE1ICsxMTMsMTUgQEAKIAkJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWlmIChpbmZvLT5ucl9wYXJ0cykKQEAgLTE0MSw5ICsxNDAsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfZmxhc2hfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGluZm8tPm10ZCAmJiBpbmZvLT5tdGQtPnN1c3BlbmQpCkBAIC0xNTEsMTcgKzE1MCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mby0+bXRkICYmIGluZm8tPm10ZC0+cmVzdW1lKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQgcHhhMnh4X2ZsYXNoX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHB4YTJ4eF9mbGFzaF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvICYmIGluZm8tPm10ZC0+c3VzcGVuZChpbmZvLT5tdGQpID09IDApCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CkBAIC0xNzIsMTEgKzE3MSwxMyBAQAogI2RlZmluZSBweGEyeHhfZmxhc2hfc2h1dGRvd24gTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGEyeHhfZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJweGEyeHgtZmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2ZsYXNoX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAicHhhMnh4LWZsYXNoIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHB4YTJ4eF9mbGFzaF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YTJ4eF9mbGFzaF9yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2ZsYXNoX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBweGEyeHhfZmxhc2hfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTJ4eF9mbGFzaF9yZXN1bWUsCiAJLnNodXRkb3duCT0gcHhhMnh4X2ZsYXNoX3NodXRkb3duLApAQCAtMTg0LDEyICsxODUsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9weGEyeHhfZmxhc2godm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfcHhhMnh4X2ZsYXNoKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9weGEyeHhfZmxhc2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvdm11LWZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3MzI5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdm11LWZsYXNoLmMKQEAgLTAsMCArMSw4MzIgQEAKKy8qIHZtdS1mbGFzaC5jCisgKiBEcml2ZXIgZm9yIFNFR0EgRHJlYW1jYXN0IFZpc3VhbCBNZW1vcnkgVW5pdAorICoKKyAqIENvcHlyaWdodCAoYykgQWRyaWFuIE1jTWVuYW1pbiAyMDAyIC0gMjAwOQorICogQ29weXJpZ2h0IChjKSBQYXVsIE11bmR0IDIwMDEKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXBsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisKK3N0cnVjdCB2bXVfY2FjaGUgeworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsJCS8qIENhY2hlICovCisJdW5zaWduZWQgaW50IGJsb2NrOwkJLyogV2hpY2ggYmxvY2sgd2FzIGNhY2hlZCAqLworCXVuc2lnbmVkIGxvbmcgamlmZmllc19hdGM7CS8qIFdoZW4gd2FzIGl0IGNhY2hlZD8gKi8KKwlpbnQgdmFsaWQ7Cit9OworCitzdHJ1Y3QgbWRldl9wYXJ0IHsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCWludCBwYXJ0aXRpb247Cit9OworCitzdHJ1Y3Qgdm11cGFydCB7CisJdTE2IHVzZXJfYmxvY2tzOworCXUxNiByb290X2Jsb2NrOworCXUxNiBudW1ibG9ja3M7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgdm11X2NhY2hlICpwY2FjaGU7Cit9OworCitzdHJ1Y3QgbWVtY2FyZCB7CisJdTE2IHRlbXBBOworCXUxNiB0ZW1wQjsKKwl1MzIgcGFydGl0aW9uczsKKwl1MzIgYmxvY2tsZW47CisJdTMyIHdyaXRlY250OworCXUzMiByZWFkY250OworCXUzMiByZW1vdmVhYmxlOworCWludCBwYXJ0aXRpb247CisJaW50IHJlYWQ7CisJdW5zaWduZWQgY2hhciAqYmxvY2tyZWFkOworCXN0cnVjdCB2bXVwYXJ0ICpwYXJ0czsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKK307CisKK3N0cnVjdCB2bXVfYmxvY2sgeworCXVuc2lnbmVkIGludCBudW07IC8qIGJsb2NrIG51bWJlciAqLworCXVuc2lnbmVkIGludCBvZnM7IC8qIGJsb2NrIG9mZnNldCAqLworfTsKKworc3RhdGljIHN0cnVjdCB2bXVfYmxvY2sgKm9mc190b19ibG9jayh1bnNpZ25lZCBsb25nIHNyY19vZnMsCisJc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYXJ0aXRpb24pCit7CisJc3RydWN0IHZtdV9ibG9jayAqdmJsb2NrOworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJaW50IG51bTsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwlpZiAoc3JjX29mcyA+PSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuKQorCQlnb3RvIGZhaWxlZDsKKworCW51bSA9IHNyY19vZnMgLyBjYXJkLT5ibG9ja2xlbjsKKwlpZiAobnVtID4gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5udW1ibG9ja3MpCisJCWdvdG8gZmFpbGVkOworCisJdmJsb2NrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtdV9ibG9jayksIEdGUF9LRVJORUwpOworCWlmICghdmJsb2NrKQorCQlnb3RvIGZhaWxlZDsKKworCXZibG9jay0+bnVtID0gbnVtOworCXZibG9jay0+b2ZzID0gc3JjX29mcyAlIGNhcmQtPmJsb2NrbGVuOworCXJldHVybiB2YmxvY2s7CisKK2ZhaWxlZDoKKwlyZXR1cm4gTlVMTDsKK30KKworLyogTWFwbGUgYnVzIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciByZWFkcyAqLworc3RhdGljIHZvaWQgdm11X2Jsb2NrcmVhZChzdHJ1Y3QgbWFwbGVxICptcSkKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCisJbWRldiA9IG1xLT5kZXY7CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCS8qIGNvcHkgdGhlIHJlYWQgaW4gZGF0YSAqLworCisJaWYgKHVubGlrZWx5KCFjYXJkLT5ibG9ja3JlYWQpKQorCQlyZXR1cm47CisKKwltZW1jcHkoY2FyZC0+YmxvY2tyZWFkLCBtcS0+cmVjdmJ1Zi0+YnVmICsgMTIsCisJCWNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpOworCit9CisKKy8qIEludGVyZmFjZSB3aXRoIG1hcGxlIGJ1cyB0byByZWFkIGJsb2NrcworICogY2FjaGluZyB0aGUgcmVzdWx0cyBzbyB0aGF0IG90aGVyIHBhcnRzCisgKiBvZiB0aGUgZHJpdmVyIGNhbiBhY2Nlc3MgYmxvY2sgcmVhZHMgKi8KK3N0YXRpYyBpbnQgbWFwbGVfdm11X3JlYWRfYmxvY2sodW5zaWduZWQgaW50IG51bSwgdW5zaWduZWQgY2hhciAqYnVmLAorCXN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBtZW1jYXJkICpjYXJkOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJaW50IHBhcnRpdGlvbiwgZXJyb3IgPSAwLCB4LCB3YWl0OworCXVuc2lnbmVkIGNoYXIgKmJsb2NrcmVhZCA9IE5VTEw7CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCV9fYmUzMiBzZW5kYnVmOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCXBjYWNoZSA9IGNhcmQtPnBhcnRzW3BhcnRpdGlvbl0ucGNhY2hlOworCXBjYWNoZS0+dmFsaWQgPSAwOworCisJLyogcHJlcGFyZSB0aGUgY2FjaGUgZm9yIHRoaXMgYmxvY2sgKi8KKwlpZiAoIXBjYWNoZS0+YnVmZmVyKSB7CisJCXBjYWNoZS0+YnVmZmVyID0ga21hbGxvYyhjYXJkLT5ibG9ja2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGNhY2hlLT5idWZmZXIpIHsKKwkJCWRldl9lcnIoJm1kZXYtPmRldiwgIlZNVSBhdCAoJWQsICVkKSAtIHJlYWQgZmFpbHMgZHVlIgorCQkJCSIgdG8gbGFjayBvZiBtZW1vcnlcbiIsIG1kZXYtPnBvcnQsCisJCQkJbWRldi0+dW5pdCk7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlnb3RvIG91dEI7CisJCX0KKwl9CisKKwkvKgorCSogUmVhZHMgbWF5IGJlIHBoYXNlZCAtIGFnYWluIHRoZSBoYXJkd2FyZSBzcGVjCisJKiBzdXBwb3J0cyB0aGlzIC0gdGhvdWdoIG1heSBub3QgYmUgYW55IGRldmljZXMgaW4KKwkqIHRoZSB3aWxkIHRoYXQgaW1wbGVtZW50IGl0LCBidXQgd2Ugd2lsbCBoZXJlCisJKi8KKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+cmVhZGNudDsgeCsrKSB7CisJCXNlbmRidWYgPSBjcHVfdG9fYmUzMihwYXJ0aXRpb24gPDwgMjQgfCB4IDw8IDE2IHwgbnVtKTsKKworCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KG1kZXYtPm1hcGxlX3dhaXQsCisJCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaKTsKKwkJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgIlZNVSBhdCAoJWQsICVkKSIKKwkJCQkJIiBpcyBidXN5XG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJCQllcnJvciA9IC1FQUdBSU47CisJCQkJZ290byBvdXRCOworCQkJfQorCQl9CisKKwkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCWJsb2NrcmVhZCA9IGttYWxsb2MoY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmxvY2tyZWFkKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCWdvdG8gb3V0QjsKKwkJfQorCQljYXJkLT5ibG9ja3JlYWQgPSBibG9ja3JlYWQ7CisKKwkJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCB2bXVfYmxvY2tyZWFkLCAwLAorCQkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKwkJZXJyb3IgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsIE1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkJCQlNQVBMRV9DT01NQU5EX0JSRUFELCAyLCAmc2VuZGJ1Zik7CisJCS8qIFZlcnkgbG9uZyB0aW1lb3V0cyBzZWVtIHRvIGJlIG5lZWRlZCB3aGVuIGJveCBpcyBzdHJlc3NlZCAqLworCQl3YWl0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCShhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCB8fAorCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDIpLCBIWiAqIDMpOworCQkvKgorCQkqIE1URCBsYXllciBkb2VzIG5vdCBoYW5kbGUgaG90cGx1Z2dpbmcgd2VsbAorCQkqIHNvIGhhdmUgdG8gcmV0dXJuIGVycm9ycyB3aGVuIFZNVSBpcyB1bnBsdWdnZWQKKwkJKiBpbiB0aGUgbWlkZGxlIG9mIGEgcmVhZCAoYnVzeSA9PSAyKQorCQkqLworCQlpZiAoZXJyb3IgfHwgYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDIpIHsKKwkJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMikKKwkJCQllcnJvciA9IC1FTlhJTzsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJY2FyZC0+YmxvY2tyZWFkID0gTlVMTDsKKwkJCWdvdG8gb3V0QTsKKwkJfQorCQlpZiAod2FpdCA9PSAwIHx8IHdhaXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCQljYXJkLT5ibG9ja3JlYWQgPSBOVUxMOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQllcnJvciA9IC1FSU87CisJCQlsaXN0X2RlbF9pbml0KCYobWRldi0+bXEtPmxpc3QpKTsKKwkJCWtmcmVlKG1kZXYtPm1xLT5zZW5kYnVmKTsKKwkJCW1kZXYtPm1xLT5zZW5kYnVmID0gTlVMTDsKKwkJCWlmICh3YWl0ID09IC1FUkVTVEFSVFNZUykgeworCQkJCWRldl93YXJuKCZtZGV2LT5kZXYsICJWTVUgcmVhZCBvbiAoJWQsICVkKSIKKwkJCQkJIiBpbnRlcnJ1cHRlZCBvbiBibG9jayAweCVYXG4iLAorCQkJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBudW0pOworCQkJfSBlbHNlCisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiVk1VIHJlYWQgb24gKCVkLCAlZCkiCisJCQkJCSIgdGltZWQgb3V0IG9uIGJsb2NrIDB4JVhcbiIsCisJCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIG51bSk7CisJCQlnb3RvIG91dEE7CisJCX0KKworCQltZW1jcHkoYnVmICsgKGNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpICogeCwgYmxvY2tyZWFkLAorCQkJY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCk7CisKKwkJbWVtY3B5KHBjYWNoZS0+YnVmZmVyICsgKGNhcmQtPmJsb2NrbGVuL2NhcmQtPnJlYWRjbnQpICogeCwKKwkJCWNhcmQtPmJsb2NrcmVhZCwgY2FyZC0+YmxvY2tsZW4vY2FyZC0+cmVhZGNudCk7CisJCWNhcmQtPmJsb2NrcmVhZCA9IE5VTEw7CisJCXBjYWNoZS0+YmxvY2sgPSBudW07CisJCXBjYWNoZS0+amlmZmllc19hdGMgPSBqaWZmaWVzOworCQlwY2FjaGUtPnZhbGlkID0gMTsKKwkJa2ZyZWUoYmxvY2tyZWFkKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7CisKK291dEE6CisJa2ZyZWUoYmxvY2tyZWFkKTsKK291dEI6CisJcmV0dXJuIGVycm9yOworfQorCisvKiBjb21tdW5pY2F0ZSB3aXRoIG1hcGxlIGJ1cyBmb3IgcGhhc2VkIHdyaXRpbmcgKi8KK3N0YXRpYyBpbnQgbWFwbGVfdm11X3dyaXRlX2Jsb2NrKHVuc2lnbmVkIGludCBudW0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCWludCBwYXJ0aXRpb24sIGVycm9yLCBsb2NraW5nLCB4LCBwaGFzZWxlbiwgd2FpdDsKKwlfX2JlMzIgKnNlbmRidWY7CisKKwltcGFydCA9IG10ZC0+cHJpdjsKKwltZGV2ID0gbXBhcnQtPm1kZXY7CisJcGFydGl0aW9uID0gbXBhcnQtPnBhcnRpdGlvbjsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisKKwlwaGFzZWxlbiA9IGNhcmQtPmJsb2NrbGVuL2NhcmQtPndyaXRlY250OworCisJc2VuZGJ1ZiA9IGttYWxsb2MocGhhc2VsZW4gKyA0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlbmRidWYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9zZW5kYnVmOworCX0KKwlmb3IgKHggPSAwOyB4IDwgY2FyZC0+d3JpdGVjbnQ7IHgrKykgeworCQlzZW5kYnVmWzBdID0gY3B1X3RvX2JlMzIocGFydGl0aW9uIDw8IDI0IHwgeCA8PCAxNiB8IG51bSk7CisJCW1lbWNweSgmc2VuZGJ1ZlsxXSwgYnVmICsgcGhhc2VsZW4gKiB4LCBwaGFzZWxlbik7CisJCS8qIHdhaXQgdW50aWwgdGhlIGRldmljZSBpcyBub3QgYnVzeSBkb2luZyBzb21ldGhpbmcgZWxzZQorCQkqIG9yIDEgc2Vjb25kIC0gd2hpY2ggZXZlciBpcyBsb25nZXIgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAxKSB7CisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJCWF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwLCBIWik7CisJCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJCQllcnJvciA9IC1FQlVTWTsKKwkJCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsICJWTVUgd3JpdGUgYXQgKCVkLCAlZCkiCisJCQkJCSJmYWlsZWQgLSBkZXZpY2UgaXMgYnVzeVxuIiwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQkJZ290byBmYWlsX25vbG9jazsKKwkJCX0KKwkJfQorCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKworCQlsb2NraW5nID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LCBNQVBMRV9GVU5DX01FTUNBUkQsCisJCQlNQVBMRV9DT01NQU5EX0JXUklURSwgcGhhc2VsZW4gLyA0ICsgMiwgc2VuZGJ1Zik7CisJCXdhaXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtZGV2LT5tYXBsZV93YWl0LAorCQkJYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAsIEhaLzEwKTsKKwkJaWYgKGxvY2tpbmcpIHsKKwkJCWVycm9yID0gLUVJTzsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJZ290byBmYWlsX25vbG9jazsKKwkJfQorCQlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDIpIHsKKwkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQl9IGVsc2UgaWYgKHdhaXQgPT0gMCB8fCB3YWl0ID09IC1FUkVTVEFSVFNZUykgeworCQkJZXJyb3IgPSAtRUlPOworCQkJZGV2X3dhcm4oJm1kZXYtPmRldiwgIldyaXRlIGF0ICglZCwgJWQpIG9mIGJsb2NrIgorCQkJCSIgMHglWCBhdCBwaGFzZSAlZCBmYWlsZWQ6IGNvdWxkIG5vdCIKKwkJCQkiIGNvbW11bmljYXRlIHdpdGggVk1VIiwgbWRldi0+cG9ydCwKKwkJCQltZGV2LT51bml0LCBudW0sIHgpOworCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQlrZnJlZShtZGV2LT5tcS0+c2VuZGJ1Zik7CisJCQltZGV2LT5tcS0+c2VuZGJ1ZiA9IE5VTEw7CisJCQlsaXN0X2RlbF9pbml0KCYobWRldi0+bXEtPmxpc3QpKTsKKwkJCWdvdG8gZmFpbF9ub2xvY2s7CisJCX0KKwl9CisJa2ZyZWUoc2VuZGJ1Zik7CisKKwlyZXR1cm4gY2FyZC0+YmxvY2tsZW47CisKK2ZhaWxfbm9sb2NrOgorCWtmcmVlKHNlbmRidWYpOworZmFpbF9ub3NlbmRidWY6CisJZGV2X2VycigmbWRldi0+ZGV2LCAiVk1VICglZCwgJWQpOiB3cml0ZSBmYWlsZWRcbiIsIG1kZXYtPnBvcnQsCisJCW1kZXYtPnVuaXQpOworCXJldHVybiBlcnJvcjsKK30KKworLyogbXRkIGZ1bmN0aW9uIHRvIHNpbXVsYXRlIHJlYWRpbmcgYnl0ZSBieSBieXRlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciB2bXVfZmxhc2hfcmVhZF9jaGFyKHVuc2lnbmVkIGxvbmcgb2ZzLCBpbnQgKnJldHZhbCwKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgdm11X2Jsb2NrICp2YmxvY2s7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwl1bnNpZ25lZCBjaGFyICpidWYsIHJldDsKKwlpbnQgcGFydGl0aW9uLCBlcnJvcjsKKworCW1wYXJ0ID0gbXRkLT5wcml2OworCW1kZXYgPSBtcGFydC0+bWRldjsKKwlwYXJ0aXRpb24gPSBtcGFydC0+cGFydGl0aW9uOworCWNhcmQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtZGV2KTsKKwkqcmV0dmFsID0gIDA7CisKKwlidWYgPSBrbWFsbG9jKGNhcmQtPmJsb2NrbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQkqcmV0dmFsID0gMTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJdmJsb2NrID0gb2ZzX3RvX2Jsb2NrKG9mcywgbXRkLCBwYXJ0aXRpb24pOworCWlmICghdmJsb2NrKSB7CisJCSpyZXR2YWwgPSAzOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9idWY7CisJfQorCisJZXJyb3IgPSBtYXBsZV92bXVfcmVhZF9ibG9jayh2YmxvY2stPm51bSwgYnVmLCBtdGQpOworCWlmIChlcnJvcikgeworCQlyZXQgPSBlcnJvcjsKKwkJKnJldHZhbCA9IDI7CisJCWdvdG8gb3V0X3ZibG9jazsKKwl9CisKKwlyZXQgPSBidWZbdmJsb2NrLT5vZnNdOworCitvdXRfdmJsb2NrOgorCWtmcmVlKHZibG9jayk7CitvdXRfYnVmOgorCWtmcmVlKGJ1Zik7CitmaW5pc2g6CisJcmV0dXJuIHJldDsKK30KKworLyogbXRkIGhpZ2hlciBvcmRlciBmdW5jdGlvbiB0byByZWFkIGZsYXNoICovCitzdGF0aWMgaW50IHZtdV9mbGFzaF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwlzaXplX3QgKnJldGxlbiwgIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJc3RydWN0IG1kZXZfcGFydCAqbXBhcnQ7CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCXN0cnVjdCB2bXVfYmxvY2sgKnZibG9jazsKKwlpbnQgaW5kZXggPSAwLCByZXR2YWwsIHBhcnRpdGlvbiwgbGVmdG92ZXIsIG51bWJsb2NrczsKKwl1bnNpZ25lZCBjaGFyIGN4OworCisJaWYgKGxlbiA8IDEpCisJCXJldHVybiAtRUlPOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCisJbnVtYmxvY2tzID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5udW1ibG9ja3M7CisJaWYgKGZyb20gKyBsZW4gPiBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbikKKwkJbGVuID0gbnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4gLSBmcm9tOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU87CisJLyogSGF2ZSB3ZSBjYWNoZWQgdGhpcyBiaXQgYWxyZWFkeT8gKi8KKwlwY2FjaGUgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLnBjYWNoZTsKKwlkbyB7CisJCXZibG9jayA9ICBvZnNfdG9fYmxvY2soZnJvbSArIGluZGV4LCBtdGQsIHBhcnRpdGlvbik7CisJCWlmICghdmJsb2NrKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCS8qIEhhdmUgd2UgY2FjaGVkIHRoaXMgYW5kIGlzIHRoZSBjYWNoZSB2YWxpZCBhbmQgdGltZWx5PyAqLworCQlpZiAocGNhY2hlLT52YWxpZCAmJgorCQkJdGltZV9iZWZvcmUoamlmZmllcywgcGNhY2hlLT5qaWZmaWVzX2F0YyArIEhaKSAmJgorCQkJKHBjYWNoZS0+YmxvY2sgPT0gdmJsb2NrLT5udW0pKSB7CisJCQkvKiB3ZSBoYXZlIGNhY2hlZCBpdCwgc28gZG8gbmVjZXNzYXJ5IGNvcHlpbmcgKi8KKwkJCWxlZnRvdmVyID0gY2FyZC0+YmxvY2tsZW4gLSB2YmxvY2stPm9mczsKKwkJCWlmICh2YmxvY2stPm9mcyArIGxlbiAtIGluZGV4IDwgY2FyZC0+YmxvY2tsZW4pIHsKKwkJCQkvKiBvbmx5IGEgYml0IG9mIHRoaXMgYmxvY2sgdG8gY29weSAqLworCQkJCW1lbWNweShidWYgKyBpbmRleCwKKwkJCQkJcGNhY2hlLT5idWZmZXIgKyB2YmxvY2stPm9mcywKKwkJCQkJbGVuIC0gaW5kZXgpOworCQkJCWluZGV4ID0gbGVuOworCQkJfSBlbHNlIHsKKwkJCQkvKiBvdGhlcndpc2UgY29weSByZW1haW5kZXIgb2Ygd2hvbGUgYmxvY2sgKi8KKwkJCQltZW1jcHkoYnVmICsgaW5kZXgsIHBjYWNoZS0+YnVmZmVyICsKKwkJCQkJdmJsb2NrLT5vZnMsIGxlZnRvdmVyKTsKKwkJCQlpbmRleCArPSBsZWZ0b3ZlcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkqIE5vdCBjYWNoZWQgc28gcmVhZCBvbmUgYnl0ZSAtCisJCQkqIGJ1dCBjYWNoZSB0aGUgcmVzdCBvZiB0aGUgYmxvY2sKKwkJCSovCisJCQljeCA9IHZtdV9mbGFzaF9yZWFkX2NoYXIoZnJvbSArIGluZGV4LCAmcmV0dmFsLCBtdGQpOworCQkJaWYgKHJldHZhbCkgeworCQkJCSpyZXRsZW4gPSBpbmRleDsKKwkJCQlrZnJlZSh2YmxvY2spOworCQkJCXJldHVybiBjeDsKKwkJCX0KKwkJCW1lbXNldChidWYgKyBpbmRleCwgY3gsIDEpOworCQkJaW5kZXgrKzsKKwkJfQorCQlrZnJlZSh2YmxvY2spOworCX0gd2hpbGUgKGxlbiA+IGluZGV4KTsKKwkqcmV0bGVuID0gaW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXVfZmxhc2hfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlpbnQgaW5kZXggPSAwLCBwYXJ0aXRpb24sIGVycm9yID0gMCwgbnVtYmxvY2tzOworCXN0cnVjdCB2bXVfY2FjaGUgKnBjYWNoZTsKKwlzdHJ1Y3Qgdm11X2Jsb2NrICp2YmxvY2s7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJbXBhcnQgPSBtdGQtPnByaXY7CisJbWRldiA9IG1wYXJ0LT5tZGV2OworCXBhcnRpdGlvbiA9IG1wYXJ0LT5wYXJ0aXRpb247CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCisJLyogc2ltcGxlIHNhbml0eSBjaGVja3MgKi8KKwlpZiAobGVuIDwgMSkgeworCQllcnJvciA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwludW1ibG9ja3MgPSBjYXJkLT5wYXJ0c1twYXJ0aXRpb25dLm51bWJsb2NrczsKKwlpZiAodG8gKyBsZW4gPiBudW1ibG9ja3MgKiBjYXJkLT5ibG9ja2xlbikKKwkJbGVuID0gbnVtYmxvY2tzICogY2FyZC0+YmxvY2tsZW4gLSB0bzsKKwlpZiAobGVuID09IDApIHsKKwkJZXJyb3IgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwl2YmxvY2sgPSBvZnNfdG9fYmxvY2sodG8sIG10ZCwgcGFydGl0aW9uKTsKKwlpZiAoIXZibG9jaykgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCWJ1ZmZlciA9IGttYWxsb2MoY2FyZC0+YmxvY2tsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2J1ZmZlcjsKKwl9CisKKwlkbyB7CisJCS8qIFJlYWQgaW4gdGhlIGJsb2NrIHdlIGFyZSB0byB3cml0ZSB0byAqLworCQllcnJvciA9IG1hcGxlX3ZtdV9yZWFkX2Jsb2NrKHZibG9jay0+bnVtLCBidWZmZXIsIG10ZCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZmFpbF9pbzsKKworCQlkbyB7CisJCQlidWZmZXJbdmJsb2NrLT5vZnNdID0gYnVmW2luZGV4XTsKKwkJCXZibG9jay0+b2ZzKys7CisJCQlpbmRleCsrOworCQkJaWYgKGluZGV4ID49IGxlbikKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAodmJsb2NrLT5vZnMgPCBjYXJkLT5ibG9ja2xlbik7CisKKwkJLyogd3JpdGUgb3V0IG5ldyBidWZmZXIgKi8KKwkJZXJyb3IgPSBtYXBsZV92bXVfd3JpdGVfYmxvY2sodmJsb2NrLT5udW0sIGJ1ZmZlciwgbXRkKTsKKwkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGUgKi8KKwkJcGNhY2hlID0gY2FyZC0+cGFydHNbcGFydGl0aW9uXS5wY2FjaGU7CisJCXBjYWNoZS0+dmFsaWQgPSAwOworCisJCWlmIChlcnJvciAhPSBjYXJkLT5ibG9ja2xlbikKKwkJCWdvdG8gZmFpbF9pbzsKKworCQl2YmxvY2stPm51bSsrOworCQl2YmxvY2stPm9mcyA9IDA7CisJfSB3aGlsZSAobGVuID4gaW5kZXgpOworCisJa2ZyZWUoYnVmZmVyKTsKKwkqcmV0bGVuID0gaW5kZXg7CisJa2ZyZWUodmJsb2NrKTsKKwlyZXR1cm4gMDsKKworZmFpbF9pbzoKKwlrZnJlZShidWZmZXIpOworZmFpbF9idWZmZXI6CisJa2ZyZWUodmJsb2NrKTsKK2ZhaWxlZDoKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJWTVUgd3JpdGUgZmFpbGluZyB3aXRoIGVycm9yICVkXG4iLCBlcnJvcik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCB2bXVfZmxhc2hfc3luYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwkvKiBEbyBub3RoaW5nIGhlcmUgKi8KK30KKworLyogTWFwbGUgYnVzIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlY3Vyc2l2ZWx5IHF1ZXJ5IGhhcmR3YXJlIGRldGFpbHMgKi8KK3N0YXRpYyB2b2lkIHZtdV9xdWVyeWJsb2NrcyhzdHJ1Y3QgbWFwbGVxICptcSkKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXVuc2lnbmVkIHNob3J0ICpyZXM7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJX19iZTMyIHBhcnRudW07CisJc3RydWN0IHZtdV9jYWNoZSAqcGNhY2hlOworCXN0cnVjdCBtZGV2X3BhcnQgKm1wYXJ0OworCXN0cnVjdCBtdGRfaW5mbyAqbXRkX2N1cjsKKwlzdHJ1Y3Qgdm11cGFydCAqcGFydF9jdXI7CisJaW50IGVycm9yOworCisJbWRldiA9IG1xLT5kZXY7CisJY2FyZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1kZXYpOworCXJlcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSAobXEtPnJlY3ZidWYtPmJ1Zik7CisJY2FyZC0+dGVtcEEgPSByZXNbMTJdOworCWNhcmQtPnRlbXBCID0gcmVzWzZdOworCisJZGV2X2luZm8oJm1kZXYtPmRldiwgIlZNVSBkZXZpY2UgYXQgcGFydGl0aW9uICVkIGhhcyAlZCB1c2VyICIKKwkJImJsb2NrcyB3aXRoIGEgcm9vdCBibG9jayBhdCAlZFxuIiwgY2FyZC0+cGFydGl0aW9uLAorCQljYXJkLT50ZW1wQSwgY2FyZC0+dGVtcEIpOworCisJcGFydF9jdXIgPSAmY2FyZC0+cGFydHNbY2FyZC0+cGFydGl0aW9uXTsKKwlwYXJ0X2N1ci0+dXNlcl9ibG9ja3MgPSBjYXJkLT50ZW1wQTsKKwlwYXJ0X2N1ci0+cm9vdF9ibG9jayA9IGNhcmQtPnRlbXBCOworCXBhcnRfY3VyLT5udW1ibG9ja3MgPSBjYXJkLT50ZW1wQiArIDE7CisJcGFydF9jdXItPm5hbWUgPSBrbWFsbG9jKDEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRfY3VyLT5uYW1lKQorCQlnb3RvIGZhaWxfbmFtZTsKKworCXNwcmludGYocGFydF9jdXItPm5hbWUsICJ2bXUlZC4lZC4lZCIsCisJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGNhcmQtPnBhcnRpdGlvbik7CisJbXRkX2N1ciA9ICZjYXJkLT5tdGRbY2FyZC0+cGFydGl0aW9uXTsKKwltdGRfY3VyLT5uYW1lID0gcGFydF9jdXItPm5hbWU7CisJbXRkX2N1ci0+dHlwZSA9IDg7CisJbXRkX2N1ci0+ZmxhZ3MgPSBNVERfV1JJVEVBQkxFfE1URF9OT19FUkFTRTsKKwltdGRfY3VyLT5zaXplID0gcGFydF9jdXItPm51bWJsb2NrcyAqIGNhcmQtPmJsb2NrbGVuOworCW10ZF9jdXItPmVyYXNlc2l6ZSA9IGNhcmQtPmJsb2NrbGVuOworCW10ZF9jdXItPndyaXRlID0gdm11X2ZsYXNoX3dyaXRlOworCW10ZF9jdXItPnJlYWQgPSB2bXVfZmxhc2hfcmVhZDsKKwltdGRfY3VyLT5zeW5jID0gdm11X2ZsYXNoX3N5bmM7CisJbXRkX2N1ci0+d3JpdGVzaXplID0gY2FyZC0+YmxvY2tsZW47CisKKwltcGFydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZGV2X3BhcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1wYXJ0KQorCQlnb3RvIGZhaWxfbXBhcnQ7CisKKwltcGFydC0+bWRldiA9IG1kZXY7CisJbXBhcnQtPnBhcnRpdGlvbiA9IGNhcmQtPnBhcnRpdGlvbjsKKwltdGRfY3VyLT5wcml2ID0gbXBhcnQ7CisJbXRkX2N1ci0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCXBjYWNoZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bXVfY2FjaGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjYWNoZSkKKwkJZ290byBmYWlsX2NhY2hlX2NyZWF0ZTsKKwlwYXJ0X2N1ci0+cGNhY2hlID0gcGNhY2hlOworCisJZXJyb3IgPSBhZGRfbXRkX2RldmljZShtdGRfY3VyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9tdGRfcmVnaXN0ZXI7CisKKwltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIE5VTEwsIDAsCisJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisKKwkvKgorCSogU2V0IHVwIGEgcmVjdXJzaXZlIGNhbGwgdG8gdGhlIChwcm9iYWJseSB0aGVvcmV0aWNhbCkKKwkqIHNlY29uZCBvciBtb3JlIHBhcnRpdGlvbgorCSovCisJaWYgKCsrY2FyZC0+cGFydGl0aW9uIDwgY2FyZC0+cGFydGl0aW9ucykgeworCQlwYXJ0bnVtID0gY3B1X3RvX2JlMzIoY2FyZC0+cGFydGl0aW9uIDw8IDI0KTsKKwkJbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhtZGV2LCB2bXVfcXVlcnlibG9ja3MsIDAsCisJCQlNQVBMRV9GVU5DX01FTUNBUkQpOworCQltYXBsZV9hZGRfcGFja2V0KG1kZXYsIE1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkJCU1BUExFX0NPTU1BTkRfR0VUTUlORk8sIDIsICZwYXJ0bnVtKTsKKwl9CisJcmV0dXJuOworCitmYWlsX210ZF9yZWdpc3RlcjoKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgbWFwbGUgZGV2aWNlIGF0ICglZCwgJWQpIgorCQkiZXJyb3IgaXMgMHglWFxuIiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgZXJyb3IpOworCWZvciAoZXJyb3IgPSAwOyBlcnJvciA8PSBjYXJkLT5wYXJ0aXRpb247IGVycm9yKyspIHsKKwkJa2ZyZWUoKChjYXJkLT5wYXJ0cylbZXJyb3JdKS5wY2FjaGUpOworCQkoKGNhcmQtPnBhcnRzKVtlcnJvcl0pLnBjYWNoZSA9IE5VTEw7CisJfQorZmFpbF9jYWNoZV9jcmVhdGU6CitmYWlsX21wYXJ0OgorCWZvciAoZXJyb3IgPSAwOyBlcnJvciA8PSBjYXJkLT5wYXJ0aXRpb247IGVycm9yKyspIHsKKwkJa2ZyZWUoKChjYXJkLT5tdGQpW2Vycm9yXSkucHJpdik7CisJCSgoY2FyZC0+bXRkKVtlcnJvcl0pLnByaXYgPSBOVUxMOworCX0KKwltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIE5VTEwsIDAsCisJCU1BUExFX0ZVTkNfTUVNQ0FSRCk7CisJa2ZyZWUocGFydF9jdXItPm5hbWUpOworZmFpbF9uYW1lOgorCXJldHVybjsKK30KKworLyogSGFuZGxlcyB2ZXJ5IGJhc2ljIGluZm8gYWJvdXQgdGhlIGZsYXNoLCBxdWVyaWVzIGZvciBkZXRhaWxzICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2bXVfY29ubmVjdChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQoreworCXVuc2lnbmVkIGxvbmcgdGVzdF9mbGFzaF9kYXRhLCBiYXNpY19mbGFzaF9kYXRhOworCWludCBjLCBlcnJvcjsKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwl1MzIgcGFydG51bSA9IDA7CisKKwl0ZXN0X2ZsYXNoX2RhdGEgPSBiZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKTsKKwkvKiBOZWVkIHRvIGNvdW50IGhvdyBtYW55IGJpdHMgYXJlIHNldCAtIHRvIGZpbmQgb3V0IHdoaWNoCisJICogZnVuY3Rpb25fZGF0YSBlbGVtZW50IGhhcyBkZXRhaWxzIG9mIHRoZSBtZW1vcnkgY2FyZDoKKwkgKiB1c2luZyBCcmlhbiBLZXJuaWdoYW4ncy9QZXRlciBXZWduZXIncyBtZXRob2QgKi8KKwlmb3IgKGMgPSAwOyB0ZXN0X2ZsYXNoX2RhdGE7IGMrKykKKwkJdGVzdF9mbGFzaF9kYXRhICY9IHRlc3RfZmxhc2hfZGF0YSAtIDE7CisKKwliYXNpY19mbGFzaF9kYXRhID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbl9kYXRhW2MgLSAxXSk7CisKKwljYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lbWNhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJZXJyb3IgPSBFTk9NRU07CisJCWdvdG8gZmFpbF9ub21lbTsKKwl9CisKKwljYXJkLT5wYXJ0aXRpb25zID0gKGJhc2ljX2ZsYXNoX2RhdGEgPj4gMjQgJiAweEZGKSArIDE7CisJY2FyZC0+YmxvY2tsZW4gPSAoKGJhc2ljX2ZsYXNoX2RhdGEgPj4gMTYgJiAweEZGKSArIDEpIDw8IDU7CisJY2FyZC0+d3JpdGVjbnQgPSBiYXNpY19mbGFzaF9kYXRhID4+IDEyICYgMHhGOworCWNhcmQtPnJlYWRjbnQgPSBiYXNpY19mbGFzaF9kYXRhID4+IDggJiAweEY7CisJY2FyZC0+cmVtb3ZlYWJsZSA9IGJhc2ljX2ZsYXNoX2RhdGEgPj4gNyAmIDE7CisKKwljYXJkLT5wYXJ0aXRpb24gPSAwOworCisJLyoKKwkqIE5vdCBzdXJlIHRoZXJlIGFyZSBhY3R1YWxseSBhbnkgbXVsdGktcGFydGl0aW9uIGRldmljZXMgaW4gdGhlCisJKiByZWFsIHdvcmxkLCBidXQgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIHRoZW0sIHNvLCBzbyB3aWxsIHdlCisJKi8KKwljYXJkLT5wYXJ0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bXVwYXJ0KSAqIGNhcmQtPnBhcnRpdGlvbnMsCisJCUdGUF9LRVJORUwpOworCWlmICghY2FyZC0+cGFydHMpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfcGFydGl0aW9uczsKKwl9CisKKwljYXJkLT5tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICogY2FyZC0+cGFydGl0aW9ucywKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5tdGQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbXRkX2luZm87CisJfQorCisJbWFwbGVfc2V0X2RydmRhdGEobWRldiwgY2FyZCk7CisKKwkvKgorCSogV2Ugd2FudCB0byB0cmFwIG1lbWluZm8gbm90IGdldCBjb25kCisJKiBzbyBzZXQgaW50ZXJ2YWwgdG8gemVybywgYnV0IHJlbHkgb24gbWFwbGUgYnVzCisJKiBkcml2ZXIgdG8gcGFzcyBiYWNrIHRoZSByZXN1bHRzIG9mIHRoZSBtZW1pbmZvCisJKi8KKwltYXBsZV9nZXRjb25kX2NhbGxiYWNrKG1kZXYsIHZtdV9xdWVyeWJsb2NrcywgMCwKKwkJTUFQTEVfRlVOQ19NRU1DQVJEKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgY2xlYXIgdG8gZ28gKi8KKwlpZiAoYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDEpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWRldi0+bWFwbGVfd2FpdCwKKwkJCWF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwLCBIWik7CisJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMSkgeworCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiVk1VIGF0ICglZCwgJWQpIGlzIGJ1c3lcbiIsCisJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQllcnJvciA9IC1FQUdBSU47CisJCQlnb3RvIGZhaWxfZGV2aWNlX2J1c3k7CisJCX0KKwl9CisKKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAxKTsKKworCS8qCisJKiBTZXQgdXAgdGhlIG1pbmZvIGNhbGw6IHZtdV9xdWVyeWJsb2NrcyB3aWxsIGhhbmRsZQorCSogdGhlIGluZm9ybWF0aW9uIHBhc3NlZCBiYWNrCisJKi8KKwllcnJvciA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgTUFQTEVfRlVOQ19NRU1DQVJELAorCQlNQVBMRV9DT01NQU5EX0dFVE1JTkZPLCAyLCAmcGFydG51bSk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJm1kZXYtPmRldiwgIkNvdWxkIG5vdCBsb2NrIFZNVSBhdCAoJWQsICVkKSIKKwkJCSIgZXJyb3IgaXMgMHglWFxuIiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgZXJyb3IpOworCQlnb3RvIGZhaWxfbXRkX2luZm87CisJfQorCXJldHVybiAwOworCitmYWlsX2RldmljZV9idXN5OgorCWtmcmVlKGNhcmQtPm10ZCk7CitmYWlsX210ZF9pbmZvOgorCWtmcmVlKGNhcmQtPnBhcnRzKTsKK2ZhaWxfcGFydGl0aW9uczoKKwlrZnJlZShjYXJkKTsKK2ZhaWxfbm9tZW06CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdm11X2Rpc2Nvbm5lY3Qoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKK3sKKwlzdHJ1Y3QgbWVtY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbWRldl9wYXJ0ICptcGFydDsKKwlpbnQgeDsKKworCW1kZXYtPmNhbGxiYWNrID0gTlVMTDsKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJZm9yICh4ID0gMDsgeCA8IGNhcmQtPnBhcnRpdGlvbnM7IHgrKykgeworCQltcGFydCA9ICgoY2FyZC0+bXRkKVt4XSkucHJpdjsKKwkJbXBhcnQtPm1kZXYgPSBOVUxMOworCQlkZWxfbXRkX2RldmljZSgmKChjYXJkLT5tdGQpW3hdKSk7CisJCWtmcmVlKCgoY2FyZC0+cGFydHMpW3hdKS5uYW1lKTsKKwl9CisJa2ZyZWUoY2FyZC0+cGFydHMpOworCWtmcmVlKGNhcmQtPm10ZCk7CisJa2ZyZWUoY2FyZCk7Cit9CisKKy8qIENhbGxiYWNrIHRvIGhhbmRsZSBlY2NlbnRyaWNpdGllcyBvZiBib3RoIG10ZCBzdWJzeXN0ZW0KKyAqIGFuZCBnZW5lcmFsIGZsYWt5bmVzcyBvZiBEcmVhbWNhc3QgVk1VcworICovCitzdGF0aWMgaW50IHZtdV9jYW5fdW5sb2FkKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCit7CisJc3RydWN0IG1lbWNhcmQgKmNhcmQ7CisJaW50IHg7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisKKwljYXJkID0gbWFwbGVfZ2V0X2RydmRhdGEobWRldik7CisJZm9yICh4ID0gMDsgeCA8IGNhcmQtPnBhcnRpdGlvbnM7IHgrKykgeworCQltdGQgPSAmKChjYXJkLT5tdGQpW3hdKTsKKwkJaWYgKG10ZC0+dXNlY291bnQgPiAwKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisjZGVmaW5lIEVSUlNUUiAiVk1VIGF0ICglZCwgJWQpIGZpbGUgZXJyb3IgLSIKKworc3RhdGljIHZvaWQgdm11X2ZpbGVfZXJyb3Ioc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1ZikKK3sKKwllbnVtIG1hcGxlX2ZpbGVfZXJyb3JzIGVycm9yID0gKChpbnQgKilyZWN2YnVmKVsxXTsKKworCXN3aXRjaCAoZXJyb3IpIHsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9JTlZBTElEX1BBUlRJVElPTjoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBpbnZhbGlkIHBhcnRpdGlvbiBudW1iZXJcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfUEhBU0VfRVJST1I6CisJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgRVJSU1RSICIgcGhhc2UgZXJyb3JcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1BUExFX0ZJTEVFUlJfSU5WQUxJRF9CTE9DSzoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBpbnZhbGlkIGJsb2NrIG51bWJlclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9XUklURV9FUlJPUjoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiB3cml0ZSBlcnJvclxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9JTlZBTElEX1dSSVRFX0xFTkdUSDoKKwkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCBFUlJTVFIgIiBpbnZhbGlkIHdyaXRlIGxlbmd0aFxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQlicmVhazsKKworCWNhc2UgTUFQTEVfRklMRUVSUl9CQURfQ1JDOgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIGJhZCBDUkNcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfbm90aWNlKCZtZGV2LT5kZXYsIEVSUlNUUiAiIDB4JVhcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBlcnJvcik7CisJfQorfQorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByb2JlX21hcGxlX3ZtdShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKKwlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCW1kZXYtPmNhbl91bmxvYWQgPSB2bXVfY2FuX3VubG9hZDsKKwltZGV2LT5maWxlZXJyX2hhbmRsZXIgPSB2bXVfZmlsZV9lcnJvcjsKKwltZGV2LT5kcml2ZXIgPSBtZHJ2OworCisJZXJyb3IgPSB2bXVfY29ubmVjdChtZGV2KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCByZW1vdmVfbWFwbGVfdm11KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2ID0gdG9fbWFwbGVfZGV2KGRldik7CisKKwl2bXVfZGlzY29ubmVjdChtZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtYXBsZV9kcml2ZXIgdm11X2ZsYXNoX2RyaXZlciA9IHsKKwkuZnVuY3Rpb24gPQlNQVBMRV9GVU5DX01FTUNBUkQsCisJLmRydiA9IHsKKwkJLm5hbWUgPQkJIkRyZWFtY2FzdF92aXN1YWxfbWVtb3J5IiwKKwkJLnByb2JlID0JcHJvYmVfbWFwbGVfdm11LAorCQkucmVtb3ZlID0gCV9fZGV2ZXhpdF9wKHJlbW92ZV9tYXBsZV92bXUpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2bXVfZmxhc2hfbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gbWFwbGVfZHJpdmVyX3JlZ2lzdGVyKCZ2bXVfZmxhc2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZtdV9mbGFzaF9tYXBfZXhpdCh2b2lkKQoreworCW1hcGxlX2RyaXZlcl91bnJlZ2lzdGVyKCZ2bXVfZmxhc2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodm11X2ZsYXNoX21hcF9pbml0KTsKK21vZHVsZV9leGl0KHZtdV9mbGFzaF9tYXBfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFkcmlhbiBNY01lbmFtaW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRmxhc2ggbWFwcGluZyBmb3IgU2VnYSBEcmVhbWNhc3QgdmlzdWFsIG1lbW9yeSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwppbmRleCBjZWQxNGI1Li43MjQ0NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwpAQCAtMTI4LDExICsxMjgsMTEgQEAKICAqIFRoZSBiaW5kaW5nIHRvIHRoZSBtdGQgYW5kIGFsbCBhbGxvY2F0ZWQKICAqIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBleGNpdGVfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICogY29uc3QgdGhpcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKHVubGlrZWx5KCF0aGlzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYWxsZWQgJXMgd2l0aG91dCBwcml2YXRlIGRhdGEhISIsCkBAIC0xNTksOSArMTU5LDggQEAKICAqIGl0IGNhbiBhbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyB0aGVuIGNhbGxzIHRoZQogICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzLgogKi8KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqZHJ2ZGF0YTsJLyogcHJpdmF0ZSBkcml2ZXIgZGF0YSAqLwogCXN0cnVjdCBuYW5kX2NoaXAgKmJvYXJkX2NoaXA7CS8qIHByaXZhdGUgZmxhc2ggY2hpcCBkYXRhICovCiAJc3RydWN0IG10ZF9pbmZvICpib2FyZF9tdGQ7CS8qIG10ZCBpbmZvIGZvciB0aGlzIGJvYXJkICovCkBAIC0xNzUsNyArMTc0LDcgQEAKIAl9CiAKIAkvKiBiaW5kIHByaXZhdGUgZGF0YSBpbnRvIGRyaXZlciAqLwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydmRhdGEpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRydmRhdGEpOwogCiAJLyogYWxsb2NhdGUgYW5kIG1hcCB0aGUgcmVzb3VyY2UgKi8KIAlkcnZkYXRhLT5yZWdzID0KQEAgLTIxOSwyMyArMjE4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZXhjaXRlX25hbmQiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZXhjaXRlX25hbmQiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUgPSBleGNpdGVfbmFuZF9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AoZXhjaXRlX25hbmRfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChleGNpdGVfbmFuZF9yZW1vdmUpCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9pbml0KHZvaWQpCiB7CiAJcHJfaW5mbygiQmFzbGVyIGVYY2l0ZSBuYW5kIGZsYXNoIGRyaXZlciBWZXJzaW9uICIKIAkJRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OICJcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4Y2l0ZV9uYW5kX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZXhjaXRlX25hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCmluZGV4IDU4MmNmODAuLjg5YmY4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAluZGZjLT5tdGQubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMuJXMiLAotCQkJCSAgIG5kZmMtPm9mZGV2LT5kZXYuYnVzX2lkLCBmbGFzaF9ucC0+bmFtZSk7CisJCQlkZXZfbmFtZSgmbmRmYy0+b2ZkZXYtPmRldiksIGZsYXNoX25wLT5uYW1lKTsKIAlpZiAoIW5kZmMtPm10ZC5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwppbmRleCA1YjY5ZTc3Li4zYTQ5NmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYwpAQCAtMzYsMTAgKzM2LDkgQEAKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwCW9uZW5hbmQ7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZW5lcmljX29uZW5hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19vbmVuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtNDksNyArNDgsNyBAQAogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBkZXYtPmRyaXZlci0+bmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X2ZyZWVfaW5mbzsKIAl9CkBAIC04Miw3ICs4MSw3IEBACiAjZW5kaWYKIAkJZXJyID0gYWRkX210ZF9kZXZpY2UoJmluZm8tPm10ZCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtOTYsMTQgKzk1LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ2VuZXJpY19vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBnZW5lcmljX29uZW5hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5wYXJ0cykKQEAgLTEyMCw5ICsxMTgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGdlbmVyaWNfb25lbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZW5lcmljX29uZW5hbmRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gZ2VuZXJpY19vbmVuYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ2VuZXJpY19vbmVuYW5kX3JlbW92ZSksCiB9OwpAQCAtMTMxLDEyICsxMzEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19vbmVuYW5kX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdlbmVyaWNfb25lbmFuZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZ2VuZXJpY19vbmVuYW5kX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDEuYyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKaW5kZXggM2QxMzE4YS4uMWM1MzQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMS5jCkBAIC0xOTcsNiArMTk3LDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbF9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbDFfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGVsX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVsX3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKgogICoJZWwxX3Byb2JlMToKICAqCUBkZXY6IFRoZSBkZXZpY2Ugc3RydWN0dXJlIHRvIHVzZQpAQCAtMzA1LDEyICszMTYsOCBAQAogCSAqCVRoZSBFTDEtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KIAkgKi8KIAotCWRldi0+b3BlbiA9ICZlbF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmVsX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmVsX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOwotCWRldi0+c3RvcCA9ICZlbDFfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDUuYyBiL2RyaXZlcnMvbmV0LzNjNTA1LmMKaW5kZXggYTgxMDdmOS4uMmRlMWM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDUuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNS5jCkBAIC0xMzU0LDYgKzEzNTQsMTcgQEAKIAlyZXR1cm4gMDsJCS8qIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGxheWVyIGFib3ZlIHdpbGwgcmV0dXJuIC1FTk9ERVYgKi8KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbHBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZWxwX29wZW4sCisJLm5kb19zdG9wCQk9IGVscF9jbG9zZSwKKwkubmRvX2dldF9zdGF0cyAJCT0gZWxwX2dldF9zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWxwX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGVscF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWxwX3NldF9tY19saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTU1OCwxMyArMTU2OSw4IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkYXB0ZXIgY29uZmlndXJhdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJfQogCi0JZGV2LT5vcGVuID0gZWxwX29wZW47CQkJCS8qIGxvY2FsICovCi0JZGV2LT5zdG9wID0gZWxwX2Nsb3NlOwkJCQkvKiBsb2NhbCAqLwotCWRldi0+Z2V0X3N0YXRzID0gZWxwX2dldF9zdGF0czsJCQkvKiBsb2NhbCAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZWxwX3N0YXJ0X3htaXQ7CQkvKiBsb2NhbCAqLwotCWRldi0+dHhfdGltZW91dCA9IGVscF90aW1lb3V0OwkJCS8qIGxvY2FsICovCisJZGV2LT5uZXRkZXZfb3BzID0gJmVscF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCpIWjsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGVscF9zZXRfbWNfbGlzdDsJLyogbG9jYWwgKi8KIAlkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsJCS8qIGxvY2FsICovCiAKIAlkZXYtPm1lbV9zdGFydCA9IGRldi0+bWVtX2VuZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwNy5jIGIvZHJpdmVycy9uZXQvM2M1MDcuYwppbmRleCA0MjNlNjVkLi5mYmJhZjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKQEAgLTM1Miw2ICszNTIsMTYgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVsMTZfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWwxNl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZWwxNl9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwxNl90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBlbDE2X3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQogewogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGluaXRfSURfZG9uZSwgdmVyc2lvbl9wcmludGVkOwpAQCAtNDQ5LDEwICs0NTksNyBAQAogCQlnb3RvIG91dDE7CiAJfQogCi0gCWRldi0+b3BlbiA9IGVsMTZfb3BlbjsKLSAJZGV2LT5zdG9wID0gZWwxNl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGVsMTZfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gZWwxNl90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogIAlkZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOwkvKiBNdWx0aWNhc3QgZG9lc24ndCB3b3JrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwOS5jIGIvZHJpdmVycy9uZXQvM2M1MDkuYwppbmRleCA4YzY5NDIxLi5mYmIzNzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwOS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKQEAgLTUzNyw2ICs1MzcsMjEgQEAKIHN0YXRpYyBpbnQgbWNhX3JlZ2lzdGVyZWQ7CiAjZW5kaWYgLyogQ09ORklHX01DQSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlbDNfb3BlbiwKKwkubmRvX3N0b3AJIAk9IGVsM19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZWwzX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMgCQk9IGVsM19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0IAk9IGVsM190eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVsM19wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVsM19jb21tb25faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTUzLDE2ICs1NjgsOCBAQAogCX0KIAogCS8qIFRoZSBFTDMtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSAmZWwzX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWwzX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gJmVsM19jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9ICZlbDNfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBlbDNfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gZWwzX3BvbGxfY29udHJvbGxlcjsKLSNlbmRpZgogCVNFVF9FVEhUT09MX09QUyhkZXYsICZldGh0b29sX29wcyk7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTE1LmMgYi9kcml2ZXJzL25ldC8zYzUxNS5jCmluZGV4IDM5YWMxMjIuLjE2N2JmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTE1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MTUuYwpAQCAtNTYzLDYgKzU2MywyMCBAQAogCXJldHVybiBOVUxMOwogfQogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY29ya3NjcmV3X29wZW4sCisJLm5kb19zdG9wCQk9IGNvcmtzY3Jld19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gY29ya3NjcmV3X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGNvcmtzY3Jld190aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGNvcmtzY3Jld19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKworCiBzdGF0aWMgaW50IGNvcmtzY3Jld19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyLAogCQkJICAgIHN0cnVjdCBwbnBfZGV2ICppZGV2LCBpbnQgY2FyZF9udW1iZXIpCiB7CkBAIC02ODEsMTMgKzY5NSw4IEBACiAJdnAtPmZ1bGxfYnVzX21hc3Rlcl9yeCA9ICh2cC0+Y2FwYWJpbGl0aWVzICYgMHgyMCkgPyAxIDogMDsKIAogCS8qIFRoZSAzYzUxeC1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZjb3Jrc2NyZXdfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZjb3Jrc2NyZXdfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmY29ya3NjcmV3X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9ICg0MDAgKiBIWikgLyAxMDAwOwotCWRldi0+c3RvcCA9ICZjb3Jrc2NyZXdfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmY29ya3NjcmV3X2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKIAogCXJldHVybiByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTIzLmMgYi9kcml2ZXJzL25ldC8zYzUyMy5jCmluZGV4IGZmNDFlMWYuLjhmNzM0ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTIzLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjMuYwpAQCAtNDAzLDYgKzQwMywyMCBAQAogCXJldHVybiBsZW47CiB9CQkJCS8qIGVsbWNfZ2V0aW5mbygpICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsbWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWxtY19jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBlbG1jX2dldF9zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWxtY19zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gZWxtY190aW1lb3V0LAorI2lmZGVmIEVMTUNfTVVMVElDQVNUCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisjZW5kaWYKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50IF9faW5pdCBkb19lbG1jX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01NDQsMTcgKzU1OCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhhcmR3YXJlIGFkZHJlc3MgJXBNXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOwogCi0JZGV2LT5vcGVuID0gJmVsbWNfb3BlbjsKLQlkZXYtPnN0b3AgPSAmZWxtY19jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9ICZlbG1jX2dldF9zdGF0czsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbG1jX3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dCA9ICZlbG1jX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOwotI2lmZGVmIEVMTUNfTVVMVElDQVNUCi0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotI2Vsc2UKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IE5VTEw7Ci0jZW5kaWYKIAlkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKIAogCS8qIG5vdGUgdGhhdCB3ZSBoYXZlbid0IGFjdHVhbGx5IHJlcXVlc3RlZCB0aGUgSVJRIGZyb20gdGhlIGtlcm5lbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTI3LmMgYi9kcml2ZXJzL25ldC8zYzUyNy5jCmluZGV4IDJkZjNhZjMuLmI2MTA3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTI3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjcuYwpAQCAtMjg4LDYgKzI4OCwxOCBAQAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG1jMzJfb3BlbiwKKwkubmRvX3N0b3AJCT0gbWMzMl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbWMzMl9zZW5kX3BhY2tldCwKKwkubmRvX2dldF9zdGF0cwkJPSBtYzMyX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG1jMzJfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBtYzMyX3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKgogICogbWMzMl9wcm9iZTEJLQlDaGVjayBhIGdpdmVuIHNsb3QgZm9yIGEgYm9hcmQgYW5kIHRlc3QgdGhlIGNhcmQKICAqIEBkZXY6ICBEZXZpY2Ugc3RydWN0dXJlIHRvIGZpbGwgaW4KQEAgLTUxOCwxMiArNTMwLDcgQEAKIAlwcmludGsoIiVzOiBGaXJtd2FyZSBSZXYgJWQuICVkIFJYIGJ1ZmZlcnMsICVkIFRYIGJ1ZmZlcnMuIEJhc2Ugb2YgMHglMDhYLlxuIiwKIAkJZGV2LT5uYW1lLCBscC0+ZXhlY19ib3gtPmRhdGFbMTJdLCBscC0+cnhfbGVuLCBscC0+dHhfbGVuLCBscC0+YmFzZSk7CiAKLQlkZXYtPm9wZW4JCT0gbWMzMl9vcGVuOwotCWRldi0+c3RvcAkJPSBtYzMyX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gbWMzMl9zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cwkJPSBtYzMyX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG1jMzJfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dAkJPSBtYzMyX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWio1OwkvKiBCb2FyZCBkb2VzIGFsbCB0aGUgd29yayAqLwogCWRldi0+ZXRodG9vbF9vcHMJPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCBjZGJiYjYyLi5jNTY2OTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzU5eC5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKQEAgLTEwMiw4ICsxMDIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotRFJWX05BTUUgIjogRG9uYWxkIEJlY2tlciBhbmQgb3RoZXJzLlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJRFJWX05BTUUgIjogRG9uYWxkIEJlY2tlciBhbmQgb3RoZXJzLlxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiM0NvbSAzYzU5eC8zYzl4eCBldGhlcm5ldCBkcml2ZXIgIik7CkBAIC05OTIsNiArOTkyLDQyIEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJvb21yYW5nX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHZvcnRleF9vcGVuLAorCS5uZG9fc3RvcAkJPSB2b3J0ZXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGJvb21lcmFuZ19zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB2b3J0ZXhfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSB2b3J0ZXhfZ2V0X3N0YXRzLAorI2lmZGVmIENPTkZJR19QQ0kKKwkubmRvX2RvX2lvY3RsIAkJPSB2b3J0ZXhfaW9jdGwsCisjZW5kaWYKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfdm9ydGV4LAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZvcnRleF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB2b3J0ZXhfb3BlbiwKKwkubmRvX3N0b3AJCT0gdm9ydGV4X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB2b3J0ZXhfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdm9ydGV4X3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gdm9ydGV4X2dldF9zdGF0cywKKyNpZmRlZiBDT05GSUdfUENJCisJLm5kb19kb19pb2N0bCAJCT0gdm9ydGV4X2lvY3RsLAorI2VuZGlmCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBwb2xsX3ZvcnRleCwKKyNlbmRpZgorfTsKKwogLyoKICAqIFN0YXJ0IHVwIHRoZSBQQ0kvRUlTQSBkZXZpY2Ugd2hpY2ggaXMgZGVzY3JpYmVkIGJ5ICpnZW5kZXYuCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLgpAQCAtMTM2NiwxOCArMTQwMiwxNiBAQAogCX0KIAogCS8qIFRoZSAzYzU5eC1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9IHZvcnRleF9vcGVuOwogCWlmICh2cC0+ZnVsbF9idXNfbWFzdGVyX3R4KSB7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYm9vbWVyYW5nX3N0YXJ0X3htaXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZib29tcmFuZ19uZXRkZXZfb3BzOwogCQkvKiBBY3R1YWxseSwgaXQgc3RpbGwgc2hvdWxkIHdvcmsgd2l0aCBpb21tdS4gKi8KIAkJaWYgKGNhcmRfaWR4IDwgTUFYX1VOSVRTICYmCiAJCSAgICAoKGh3X2NoZWNrc3Vtc1tjYXJkX2lkeF0gPT0gLTEgJiYgKHZwLT5kcnZfZmxhZ3MgJiBIQVNfSFdDS1NNKSkgfHwKIAkJCQlod19jaGVja3N1bXNbY2FyZF9pZHhdID09IDEpKSB7CiAJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0c7CiAJCX0KLQl9IGVsc2UgewotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZvcnRleF9zdGFydF94bWl0OwotCX0KKwl9IGVsc2UKKwkJZGV2LT5uZXRkZXZfb3BzID0gICZ2b3J0ZXhfbmV0ZGV2X29wczsKIAogCWlmIChwcmludF9pbmZvKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzY2F0dGVyL2dhdGhlciAlc2FibGVkLiBoL3cgY2hlY2tzdW1zICVzYWJsZWRcbiIsCkBAIC0xMzg2LDE4ICsxNDIwLDkgQEAKIAkJCQkoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkgPyAiZW4iOiJkaXMiKTsKIAl9CiAKLQlkZXYtPnN0b3AgPSB2b3J0ZXhfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSB2b3J0ZXhfZ2V0X3N0YXRzOwotI2lmZGVmIENPTkZJR19QQ0kKLQlkZXYtPmRvX2lvY3RsID0gdm9ydGV4X2lvY3RsOwotI2VuZGlmCiAJZGV2LT5ldGh0b29sX29wcyA9ICZ2b3J0ZXhfZXRodG9vbF9vcHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZTsKLQlkZXYtPnR4X3RpbWVvdXQgPSB2b3J0ZXhfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKHdhdGNoZG9nICogSFopIC8gMTAwMDsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gcG9sbF92b3J0ZXg7Ci0jZW5kaWYKKwogCWlmIChwZGV2KSB7CiAJCXZwLT5wbV9zdGF0ZV92YWxpZCA9IDE7CiAgCQlwY2lfc2F2ZV9zdGF0ZShWT1JURVhfUENJKHZwKSk7CkBAIC0yODgzLDcgKzI5MDgsNyBAQAogCQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKFZPUlRFWF9QQ0kodnApKSk7CiAJfSBlbHNlIHsKIAkJaWYgKFZPUlRFWF9FSVNBKHZwKSkKLQkJCXNwcmludGYoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKHZwLT5nZW5kZXYpKTsKKwkJCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUodnAtPmdlbmRldikpOwogCQllbHNlCiAJCQlzcHJpbnRmKGluZm8tPmJ1c19pbmZvLCAiRUlTQSAweCVseCAlZCIsCiAJCQkJCWRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IDRlMTlhZTMuLmEwOWUzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC02MDQsNyArNjA0LDcgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKIAkJY3B3MTZfZihJbnRyTWFzaywgY3BfaW50cl9tYXNrKTsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOwogCX0KIApAQCAtNjQxLDkgKzY0MSw5IEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIChSeE9LIHwgUnhFcnIgfCBSeEVtcHR5IHwgUnhGSUZPT3ZyKSkKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmNwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZjcC0+bmFwaSkpIHsKIAkJCWNwdzE2X2YoSW50ck1hc2ssIGNwX25vcnhfaW50cl9tYXNrKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogCQl9CiAKIAlpZiAoc3RhdHVzICYgKFR4T0sgfCBUeEVyciB8IFR4RW1wdHkgfCBTV0ludCkpCkBAIC0xNjAyLDYgKzE2MDIsMjggQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgY3Bfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IGNwX3ByaXZhdGUgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisKKwlzcGluX2xvY2tfaXJxKCZjcC0+bG9jayk7CisKKwljcHc4X2YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOworCWNwdzMyX2YoTUFDMCArIDAsIGxlMzJfdG9fY3B1ICgqKF9fbGUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSk7CisJY3B3MzJfZihNQUMwICsgNCwgbGUzMl90b19jcHUgKCooX19sZTMyICopIChkZXYtPmRldl9hZGRyICsgNCkpKTsKKwljcHc4X2YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKKworCXNwaW5fdW5sb2NrX2lycSgmY3AtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFNlcmlhbCBFRVBST00gc2VjdGlvbi4gKi8KIAogLyogIEVFUFJPTV9DdHJsIGJpdHMuICovCkBAIC0xODIxLDcgKzE4NDMsNyBAQAogCS5uZG9fb3BlbgkJPSBjcF9vcGVuLAogCS5uZG9fc3RvcAkJPSBjcF9jbG9zZSwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gY3Bfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gY3Bfc2V0X3J4X21vZGUsCiAJLm5kb19nZXRfc3RhdHMJCT0gY3BfZ2V0X3N0YXRzLAogCS5uZG9fZG9faW9jdGwJCT0gY3BfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggYTViMjQyMC4uMjlkZjM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtNjQwLDYgKzY0MCw3IEBACiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCitzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApOwogc3RhdGljIGludCBydGw4MTM5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTM5X2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC05MTcsNyArOTE4LDcgQEAKIAkubmRvX3N0b3AJCT0gcnRsODEzOV9jbG9zZSwKIAkubmRvX2dldF9zdGF0cwkJPSBydGw4MTM5X2dldF9zdGF0cywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zdGFydF94bWl0CQk9IHJ0bDgxMzlfc3RhcnRfeG1pdCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHJ0bDgxMzlfc2V0X3J4X21vZGUsCiAJLm5kb19kb19pb2N0bAkJPSBuZXRkZXZfaW9jdGwsCkBAIC0yMTI4LDcgKzIxMjksNyBAQAogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CiAJCVJUTF9XMTZfRihJbnRyTWFzaywgcnRsODEzOV9pbnRyX21hc2spOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrKCZ0cC0+cnhfbG9jayk7CkBAIC0yMTc4LDkgKzIxNzksOSBAQAogCS8qIFJlY2VpdmUgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGJ5IHBvbGwgcm91dGluZS4KIAkgICBJZiBub3QgcnVubmluZyBzdGFydCBpdCBub3cuICovCiAJaWYgKHN0YXR1cyAmIFJ4QWNrQml0cyl7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CiAJCQlSVExfVzE2X0YgKEludHJNYXNrLCBydGw4MTM5X25vcnhfaW50cl9tYXNrKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCQl9CiAJfQogCkBAIC0yMjE1LDYgKzIyMTYsMjkgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisKKwlzcGluX2xvY2tfaXJxKCZ0cC0+bG9jayk7CisKKwlSVExfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisJUlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyAwKSkpOworCVJUTF9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtPmRldl9hZGRyICsgNCkpKTsKKwlSVExfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCisJc3Bpbl91bmxvY2tfaXJxKCZ0cC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBydGw4MTM5X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgyNTk2LmMgYi9kcml2ZXJzL25ldC84MjU5Ni5jCmluZGV4IGIyNzM1OTYuLmNjYTk0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgyNTk2LmMKKysrIGIvZHJpdmVycy9uZXQvODI1OTYuYwpAQCAtMTEyMiw2ICsxMTIyLDE3IEBACiBzdGF0aWMgaW50IGlvID0gMHgzMDA7CiBzdGF0aWMgaW50IGlycSA9IDEwOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGk1OTZfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGk1OTZfb3BlbiwKKwkubmRvX3N0b3AJCT0gaTU5Nl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaTU5Nl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBpNTk2X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IGk4MjU5Nl9wcm9iZShpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTIzMiwxMSArMTI0Myw3IEBACiAJREVCKERFQl9QUk9CRSxwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pKTsKIAogCS8qIFRoZSA4MjU5Ni1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9IGk1OTZfb3BlbjsKLQlkZXYtPnN0b3AgPSBpNTk2X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaTU5Nl9zdGFydF94bWl0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IGk1OTZfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaTU5Nl9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCiAJZGV2LT5tbF9wcml2ID0gKHZvaWQgKikoZGV2LT5tZW1fc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggNjJkNzMyYS4uZTVmZmMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0yNiw2ICsyNiwxNSBAQAogIyB0aGF0IGZvciBlYWNoIG9mIHRoZSBzeW1ib2xzLgogaWYgTkVUREVWSUNFUwogCitjb25maWcgQ09NUEFUX05FVF9ERVZfT1BTCisgICAgICAgZGVmYXVsdCB5CisgICAgICAgYm9vbCAiRW5hYmxlIG9sZGVyIG5ldHdvcmsgZGV2aWNlIEFQSSBjb21wYXRpYWJsaXR5IgorICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBUaGlzIG9wdGlvbiBlbmFibGVzIGtlcm5lbCBjb21wYXRpYWJpbGl0eSB3aXRoIG9sZGVyIG5ldHdvcmsgZGV2aWNlcworICAgICAgICAgIHRoYXQgZG8gbm90IHVzZSBuZXRfZGV2aWNlX29wcyBpbnRlcmZhY2UuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBJRkIKIAl0cmlzdGF0ZSAiSW50ZXJtZWRpYXRlIEZ1bmN0aW9uYWwgQmxvY2sgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5FVF9DTFNfQUNUCkBAIC0xODQwLDEwICsxODQ5LDEwIEBACiAKIGNvbmZpZyBGRUMKIAlib29sICJGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgQ1BVcykiCi0JZGVwZW5kcyBvbiBNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeAorCWRlcGVuZHMgb24gTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgTUFDSF9NWDI3CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJ1aWx0LWluIDEwLzEwMCBGYXN0IGV0aGVybmV0Ci0JICBjb250cm9sbGVyIG9uIHNvbWUgTW90b3JvbGEgQ29sZEZpcmUgcHJvY2Vzc29ycy4KKwkgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBhbmQgRnJlZXNjYWxlIGkuTVggcHJvY2Vzc29ycy4KIAogY29uZmlnIEZFQzIKIAlib29sICJTZWNvbmQgRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9uIHNvbWUgQ29sZEZpcmUgQ1BVcykiCkBAIC0yMDMwLDE1ICsyMDM5LDYgQEAKICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGlnYi4KIAotY29uZmlnIElHQl9MUk8gCi0JYm9vbCAiVXNlIHNvZnR3YXJlIExSTyIKLQlkZXBlbmRzIG9uIElHQiAmJiBJTkVUCi0Jc2VsZWN0IElORVRfTFJPCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgbGFyZ2UgcmVjZWl2ZSBvZmZsb2FkLiAKLQotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCiBjb25maWcgSUdCX0RDQQogCWJvb2wgIkRpcmVjdCBDYWNoZSBBY2Nlc3MgKERDQSkgU3VwcG9ydCIKIAlkZWZhdWx0IHkKQEAgLTIyODQsOSArMjI4NCwxNyBAQAogCiAgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEZTTF9QUV9NRElPCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBQUSBNRElPIgorCWRlcGVuZHMgb24gRlNMX1NPQworCXNlbGVjdCBQSFlMSUIKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTURJTyBidXMgdXNlZCBieSB0aGUgZ2lhbmZhciBhbmQgVUNDIGRyaXZlcnMuCisKIGNvbmZpZyBHSUFORkFSCiAJdHJpc3RhdGUgIkdpYW5mYXIgRXRoZXJuZXQiCiAJZGVwZW5kcyBvbiBGU0xfU09DCisJc2VsZWN0IEZTTF9QUV9NRElPCiAJc2VsZWN0IFBIWUxJQgogCXNlbGVjdCBDUkMzMgogCWhlbHAKQEAgLTIyOTYsNiArMjMwNCw3IEBACiBjb25maWcgVUNDX0dFVEgKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFFFIEdpZ2FiaXQgRXRoZXJuZXQiCiAJZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkUKKwlzZWxlY3QgRlNMX1BRX01ESU8KIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgbW9kZSBvZiB0aGUgUVVJQ0MgRW5naW5lLApAQCAtMjMxMiw2ICsyMzIxLDcgQEAKIGNvbmZpZyBNVjY0M1hYX0VUSAogCXRyaXN0YXRlICJNYXJ2ZWxsIERpc2NvdmVyeSAoNjQzWFgpIGFuZCBPcmlvbiBldGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gTVY2NDM2MCB8fCBNVjY0WDYwIHx8IChQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMikgfHwgUExBVF9PUklPTgorCXNlbGVjdCBJTkVUX0xSTwogCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZQpAQCAtMjQzMCw3ICsyNDQwLDYgQEAKIAl0cmlzdGF0ZSAiQ2hlbHNpbyBDb21tdW5pY2F0aW9ucyBUMyAxMEdiIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDSEVMU0lPX1QzX0RFUEVORFMKIAlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IElORVRfTFJPCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQ2hlbHNpbyBUMy1iYXNlZCBnaWdhYml0IGFuZCAxMEdiIEV0aGVybmV0CiAJICBhZGFwdGVycy4KQEAgLTI0NjYsNyArMjQ3NSw2IEBACiBjb25maWcgSVhHQkUKIAl0cmlzdGF0ZSAiSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCi0Jc2VsZWN0IElORVRfTFJPCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDQ3MWJhYWYuLjc1OGVjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0yNiwxMSArMjYsMTIgQEAKIAogZ2lhbmZhcl9kcml2ZXItb2JqcyA6PSBnaWFuZmFyLm8gXAogCQlnaWFuZmFyX2V0aHRvb2wubyBcCi0JCWdpYW5mYXJfbWlpLm8gXAogCQlnaWFuZmFyX3N5c2ZzLm8KIAogb2JqLSQoQ09ORklHX1VDQ19HRVRIKSArPSB1Y2NfZ2V0aF9kcml2ZXIubwotdWNjX2dldGhfZHJpdmVyLW9ianMgOj0gdWNjX2dldGgubyB1Y2NfZ2V0aF9taWkubyB1Y2NfZ2V0aF9ldGh0b29sLm8KK3VjY19nZXRoX2RyaXZlci1vYmpzIDo9IHVjY19nZXRoLm8gdWNjX2dldGhfZXRodG9vbC5vCisKK29iai0kKENPTkZJR19GU0xfUFFfTURJTykgKz0gZnNsX3BxX21kaW8ubwogCiAjCiAjIGxpbmsgb3JkZXIgaW1wb3J0YW50IGhlcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2EyMDY1LmMgYi9kcml2ZXJzL25ldC9hMjA2NS5jCmluZGV4IDdhNjBiZGQuLmQwZDBjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2EyMDY1LmMKKysrIGIvZHJpdmVycy9uZXQvYTIwNjUuYwpAQCAtNTUyLDE4ICs1NTIsMTMgQEAKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvbGF0aWxlIHN0cnVjdCBsYW5jZV9yZWdzICpsbCA9IGxwLT5sbDsKIAl2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfaW5pdF9ibG9jayAqaWIgPSBscC0+aW5pdF9ibG9jazsKLQlpbnQgZW50cnksIHNrYmxlbiwgbGVuOworCWludCBlbnRyeSwgc2tibGVuOwogCWludCBzdGF0dXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlza2JsZW4gPSBza2ItPmxlbjsKLQlsZW4gPSBza2JsZW47Ci0KLQlpZiAobGVuIDwgRVRIX1pMRU4pIHsKLQkJbGVuID0gRVRIX1pMRU47Ci0JCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKLQl9CisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJcmV0dXJuIDA7CisJc2tibGVuID0gbWF4X3QodW5zaWduZWQsIHNrYi0+bGVuLCBFVEhfWkxFTik7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTU4NiwxNSArNTgxLDExIEBACiAJfQogI2VuZGlmCiAJZW50cnkgPSBscC0+dHhfbmV3ICYgbHAtPnR4X3JpbmdfbW9kX21hc2s7Ci0JaWItPmJ0eF9yaW5nIFtlbnRyeV0ubGVuZ3RoID0gKC1sZW4pIHwgMHhmMDAwOworCWliLT5idHhfcmluZyBbZW50cnldLmxlbmd0aCA9ICgtc2tibGVuKSB8IDB4ZjAwMDsKIAlpYi0+YnR4X3JpbmcgW2VudHJ5XS5taXNjID0gMDsKIAogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAodm9pZCAqKSZpYi0+dHhfYnVmIFtlbnRyeV1bMF0sIHNrYmxlbik7CiAKLQkvKiBDbGVhciB0aGUgc2xhY2sgb2YgdGhlIHBhY2tldCwgZG8gSSBuZWVkIHRoaXM/ICovCi0JaWYgKGxlbiAhPSBza2JsZW4pCi0JCW1lbXNldCAoKHZvaWQgKikgJmliLT50eF9idWYgW2VudHJ5XVtza2JsZW5dLCAwLCBsZW4gLSBza2JsZW4pOwotCiAJLyogTm93LCBnaXZlIHRoZSBwYWNrZXQgdG8gdGhlIGxhbmNlICovCiAJaWItPmJ0eF9yaW5nIFtlbnRyeV0udG1kMV9iaXRzID0gKExFX1QxX1BPS3xMRV9UMV9PV04pOwogCWxwLT50eF9uZXcgPSAobHAtPnR4X25ldysxKSAmIGxwLT50eF9yaW5nX21vZF9tYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWNlbmljLmMgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwppbmRleCA5NTg5ZDYyMC4uMDZhOWYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljLmMKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogTU9EVUxFX1BBUk1fREVTQyh0eF9yYXRpbywgIkFjZU5JQy8zQzk4NS9HQTYyMCByYXRpbyBvZiBOSUMgbWVtb3J5IHVzZWQgZm9yIFRYL1JYIGRlc2NyaXB0b3JzIChyYW5nZSAwLTYzKSIpOwogCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAgICJhY2VuaWMuYzogdjAuOTIgMDgvMDUvMjAwMiAgSmVzIFNvcmVuc2VuLCBsaW51eC1hY2VuaWNAU3VuU0lURS5ka1xuIgogICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9ob21lLmNlcm4uY2gvfmplcy9naWdlL2FjZW5pYy5odG1sXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwppbmRleCA3NzA5OTkyLi5jYjljOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKQEAgLTgzMSw3ICs4MzEsNyBAQAogCWlmIChyeF9wa3RfbGltaXQgPiAwKSB7CiAJCS8qIFJlY2VpdmUgZGVzY3JpcHRvciBpcyBlbXB0eSBub3cgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJd3JpdGVsKFZBTDB8UklOVEVOMCwgbW1pbyArIElOVEVOMCk7CiAJCXdyaXRlbChWQUwyIHwgUkRNRDAsIG1taW8gKyBDTUQwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTExNzAsMTEgKzExNzAsMTEgQEAKIAogCS8qIENoZWNrIGlmIFJlY2VpdmUgSW50ZXJydXB0IGhhcyBvY2N1cnJlZC4gKi8KIAlpZiAoaW50cjAgJiBSSU5UMCkgewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgewogCQkJLyogRGlzYWJsZSByZWNlaXZlIGludGVydXB0cyAqLwogCQkJd3JpdGVsKFJJTlRFTjAsIG1taW8gKyBJTlRFTjApOwogCQkJLyogU2NoZWR1bGUgYSBwb2xsaW5nIHJvdXRpbmUgKi8KLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCQl9IGVsc2UgaWYgKGludHJlbjAgJiBSSU5URU4wKSB7CiAJCQlwcmludGsoIioqKioqKioqKioqKkRyaXZlciBidWchIFwKIAkJCQlpbnRlcnJ1cHQgd2hpbGUgaW4gcG9sbFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCmluZGV4IDNmZjlhZmYuLjY0NmRmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJQlVHTVNHKERfTk9STUFMLCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBza2IsICJyeCIpOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJDTkVUKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIDsKIAluZXRpZl9yeChza2IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCmluZGV4IDZiNTNlNWUuLmQ2ZDRhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKQEAgLTk1LDE3ICs5NSwxNiBAQAogRVhQT1JUX1NZTUJPTChhcmNuZXRfZGVidWcpOwogRVhQT1JUX1NZTUJPTChhbGxvY19hcmNkZXYpOwogRVhQT1JUX1NZTUJPTChhcmNuZXRfaW50ZXJydXB0KTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X29wZW4pOworRVhQT1JUX1NZTUJPTChhcmNuZXRfY2xvc2UpOworRVhQT1JUX1NZTUJPTChhcmNuZXRfc2VuZF9wYWNrZXQpOworRVhQT1JUX1NZTUJPTChhcmNuZXRfdGltZW91dCk7CiAKIC8qIEludGVybmFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgYXJjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGFyY25ldF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSB1bnNpZ25lZCBzaG9ydCB0eXBlLCBjb25zdCB2b2lkICpkYWRkciwKIAkJCSBjb25zdCB2b2lkICpzYWRkciwgdW5zaWduZWQgbGVuKTsKIHN0YXRpYyBpbnQgYXJjbmV0X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphcmNuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBnb190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIGludCBkZWJ1ZyA9IEFSQ05FVF9ERUJVRzsKQEAgLTMyMiwxMSArMzIxLDE4IEBACiAJLnJlYnVpbGQgPSBhcmNuZXRfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFyY25ldF9uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IGFyY25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGFyY25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhcmNuZXRfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0ID0gYXJjbmV0X3RpbWVvdXQsCit9OwogCiAvKiBTZXR1cCBhIHN0cnVjdCBkZXZpY2UgZm9yIEFSQ25ldC4gKi8KIHN0YXRpYyB2b2lkIGFyY2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+dHlwZSA9IEFSUEhSRF9BUkNORVQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFyY25ldF9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZhcmNuZXRfaGVhZGVyX29wczsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXJjaGRyKTsKIAlkZXYtPm10dSA9IGNob29zZV9tdHUoKTsKQEAgLTMzOSwxOCArMzQ1LDkgQEAKIAkvKiBOZXctc3R5bGUgZmxhZ3MuICovCiAJZGV2LT5mbGFncyA9IElGRl9CUk9BRENBU1Q7CiAKLQkvKgotCSAqIFB1dCBpbiB0aGlzIHN0dWZmIGhlcmUsIHNvIHdlIGRvbid0IGhhdmUgdG8gZXhwb3J0IHRoZSBzeW1ib2xzIHRvCi0JICogdGhlIGNoaXBzZXQgZHJpdmVycy4KLQkgKi8KLQlkZXYtPm9wZW4gPSBhcmNuZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSBhcmNuZXRfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhcmNuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gYXJjbmV0X3RpbWVvdXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBhcmNuZXRfZ2V0X3N0YXRzOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNoYXIgKm5hbWUpCitzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIApAQCAtMzcyLDcgKzM2OSw3IEBACiAgKiB0aGF0ICJzaG91bGQiIG9ubHkgbmVlZCB0byBiZSBzZXQgb25jZSBhdCBib290LCBzbyB0aGF0IHRoZXJlIGlzCiAgKiBub24tcmVib290IHdheSB0byByZWNvdmVyIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgogICovCi1zdGF0aWMgaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgYXJjbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGNvdW50LCBuZXdtdHUsIGVycm9yOwpAQCAtMzgzLDcgKzM4MCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJQlVHTFZMKERfUFJPVE8pIHsKLQkJaW50IGNvdW50OwogCQlCVUdNU0coRF9QUk9UTywgInByb3RvY29sIG1hcCAoZGVmYXVsdCBpcyAnJWMnKTogIiwKIAkJICAgICAgIGFyY19wcm90b19kZWZhdWx0LT5zdWZmaXgpOwogCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAyNTY7IGNvdW50KyspCkBAIC00NzIsNyArNDY4LDcgQEAKIAogCiAvKiBUaGUgaW52ZXJzZSByb3V0aW5lIHRvIGFyY25ldF9vcGVuIC0gc2h1dHMgZG93biB0aGUgY2FyZC4gKi8KLXN0YXRpYyBpbnQgYXJjbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgYXJjbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC01ODMsOCArNTc5LDggQEAKIAl9IGVsc2UgewogCQlCVUdNU0coRF9OT1JNQUwsCiAJCSAgICAgICAiSSBkb24ndCB1bmRlcnN0YW5kIGV0aGVybmV0IHByb3RvY29sICVYaCBhZGRyZXNzZXMhXG4iLCB0eXBlKTsKLQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCX0KIAogCS8qIGlmIHdlIGNvdWxkbid0IHJlc29sdmUgdGhlIGFkZHJlc3MuLi4gZ2l2ZSB1cC4gKi8KQEAgLTYwMSw3ICs1OTcsNyBAQAogCiAKIC8qIENhbGxlZCBieSB0aGUga2VybmVsIGluIG9yZGVyIHRvIHRyYW5zbWl0IGEgcGFja2V0LiAqLwotc3RhdGljIGludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFyY2hkciAqcGt0OwpAQCAtNjQ1LDcgKzY0MSw3IEBACiAJCSAgICAhcHJvdG8tPmFja190eCkgewogCQkJLyogZG9uZSByaWdodCBhd2F5IGFuZCB3ZSBkb24ndCB3YW50IHRvIGFja25vd2xlZGdlCiAJCQkgICB0aGUgcGFja2FnZSBsYXRlciAtIGZvcmdldCBhYm91dCBpdCBub3cgKi8KLQkJCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQlmcmVlc2tiID0gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIGRvIGl0IHRoZSAnc3BsaXQnIHdheSAqLwpAQCAtNzA5LDcgKzcwNSw3IEBACiAJLyogc3RhcnQgc2VuZGluZyAqLwogCUFDT01NQU5EKFRYY21kIHwgKGxwLT5jdXJfdHggPDwgMykpOwogCi0JbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAlscC0+bGFzdHRyYW5zX2Rlc3QgPSBscC0+bGFzdGxvYWRfZGVzdDsKIAlscC0+bGFzdGxvYWRfZGVzdCA9IDA7CiAJbHAtPmV4Y25ha19wZW5kaW5nID0gMDsKQEAgLTcyMCw3ICs3MTYsNyBAQAogCiAKIC8qIENhbGxlZCBieSB0aGUga2VybmVsIHdoZW4gdHJhbnNtaXQgdGltZXMgb3V0ICovCi1zdGF0aWMgdm9pZCBhcmNuZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBhcmNuZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNzMyLDExICs3MjgsMTEgQEAKIAkJbXNnID0gIiAtIG1pc3NlZCBJUlE/IjsKIAl9IGVsc2UgewogCQltc2cgPSAiIjsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJbHAtPnRpbWVkX291dCA9IDE7CiAJCUFDT01NQU5EKE5PVFhjbWQgfCAobHAtPmN1cl90eCA8PCAzKSk7CiAJfQotCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJLyogbWFrZSBzdXJlIHdlIGRpZG4ndCBtaXNzIGEgVFggb3IgYSBFWEMgTkFLIElSUSAqLwogCUFJTlRNQVNLKDApOwpAQCAtODY1LDggKzg2MSw4IEBACiAJCQkJCQkgICAgICAgInRyYW5zbWl0IHdhcyBub3QgYWNrbm93bGVkZ2VkISAiCiAJCQkJCQkgICAgICAgIihzdGF0dXM9JVhoLCBkZXN0PSUwMlhoKVxuIiwKIAkJCQkJCSAgICAgICBzdGF0dXMsIGxwLT5sYXN0dHJhbnNfZGVzdCk7Ci0JCQkJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlCVUdNU0coRF9EVVJJTkcsCiAJCQkJCQkgICAgICAgImJyb2FkY2FzdCB3YXMgbm90IGFja25vd2xlZGdlZDsgdGhhdCdzIG5vcm1hbCAiCkBAIC05MDUsNyArOTAxLDcgQEAKIAkJCQlpZiAodHhidWYgIT0gLTEpIHsKIAkJCQkJaWYgKGxwLT5vdXRnb2luZy5wcm90by0+Y29udGludWVfdHgoZGV2LCB0eGJ1ZikpIHsKIAkJCQkJCS8qIHRoYXQgd2FzIHRoZSBsYXN0IHNlZ21lbnQgKi8KLQkJCQkJCWxwLT5zdGF0cy50eF9ieXRlcyArPSBscC0+b3V0Z29pbmcuc2tiLT5sZW47CisJCQkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxwLT5vdXRnb2luZy5za2ItPmxlbjsKIAkJCQkJCWlmKCFscC0+b3V0Z29pbmcucHJvdG8tPmFja190eCkKIAkJCQkJCSAgewogCQkJCQkJICAgIGRldl9rZnJlZV9za2JfaXJxKGxwLT5vdXRnb2luZy5za2IpOwpAQCAtOTMwLDcgKzkyNiw3IEBACiAJCX0KIAkJaWYgKHN0YXR1cyAmIGxwLT5pbnRtYXNrICYgUkVDT05mbGFnKSB7CiAJCQlBQ09NTUFORChDRkxBR1NjbWQgfCBDT05GSUdjbGVhcik7Ci0JCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAogCQkJQlVHTVNHKERfUkVDT04sICJOZXR3b3JrIHJlY29uZmlndXJhdGlvbiBkZXRlY3RlZCAoc3RhdHVzPSVYaClcbiIsCiAJCQkgICAgICAgc3RhdHVzKTsKQEAgLTEwMzgsOCArMTAzNCw4IEBACiAJICAgICAgICIoJWQrNCBieXRlcylcbiIsCiAJICAgICAgIGJ1Zm51bSwgcGt0LmhhcmQuc291cmNlLCBwa3QuaGFyZC5kZXN0LCBsZW5ndGgpOwogCi0JbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoICsgQVJDX0hEUl9TSVpFOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoICsgQVJDX0hEUl9TSVpFOwogCiAJLyogY2FsbCB0aGUgcmlnaHQgcmVjZWl2ZXIgZm9yIHRoZSBwcm90b2NvbCAqLwogCWlmIChhcmNfcHJvdG9fbWFwW3NvZnQtPnByb3RvXS0+aXNfaXApIHsKQEAgLTEwNjcsMTggKzEwNjMsNiBAQAogfQogCiAKLQotLyogCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4gIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBjYXJkIG9wZW4gb3IKLSAqIGNsb3NlZC4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphcmNuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmbHAtPnN0YXRzOwotfQotCi0KIHN0YXRpYyB2b2lkIG51bGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1Zm51bSwKIAkJICAgIHN0cnVjdCBhcmNoZHIgKnBrdGhkciwgaW50IGxlbmd0aCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCmluZGV4IDMwNTgwYmIuLjA4M2UyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSArIHNpemVvZihpbnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJQlVHTVNHKERfTk9STUFMLCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFICsgc2l6ZW9mKGludCkpOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIAlCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIHNrYiwgInJ4Iik7CiAKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUkNORVQpOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwogOwogCW5ldGlmX3J4KHNrYik7CiB9CkBAIC0yODIsNyArMjgyLDcgQEAKICAgQlVHTVNHKERfUFJPVE8sICJBY2trbm93bGVkZ2UgZm9yIGNhcCBwYWNrZXQgJXguXG4iLAogCSAqKChpbnQqKSZhY2twa3QtPnNvZnQuY2FwLmNvb2tpZVswXSkpOwogCi0gIGFja3NrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSQ05FVCk7CisgIGFja3NrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BUkNORVQpOwogCiAgIEJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgYWNrc2tiLCAiYWNrX3R4X3JlY3YiKTsKICAgbmV0aWZfcngoYWNrc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYwppbmRleCBlYTUzYTk0Li5kYjA4ZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jCkBAIC0xNTEsNiArMTUxLDggQEAKIAlpZiAobm9kZSAmJiBub2RlICE9IDB4ZmYpCiAJCWRldi0+ZGV2X2FkZHJbMF0gPSBub2RlOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJmNvbTIwMDIwX25ldGRldl9vcHM7CisKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAJbHAtPmJhY2twbGFuZSA9IGJhY2twbGFuZTsKIAlscC0+Y2xvY2twID0gY2xvY2twICYgNzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYwppbmRleCA4YjUxZjYzLi5kYmY0ZGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCkBAIC03Miw2ICs3Miw5IEBACiAJZGV2ID0gYWxsb2NfYXJjZGV2KGRldmljZSk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5uZXRkZXZfb3BzID0gJmNvbTIwMDIwX25ldGRldl9vcHM7CisKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKaW5kZXggMTAzNjg4My4uNjUxMjc1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKQEAgLTE0OSw2ICsxNDksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNvbTIwMDIwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gYXJjbmV0X29wZW4sCisJLm5kb19zdG9wCT0gYXJjbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGFyY25ldF9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQgPSBhcmNuZXRfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGNvbTIwMDIwX3NldF9tY19saXN0LAorfTsKKwogLyogU2V0IHVwIHRoZSBzdHJ1Y3QgbmV0X2RldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYXJkLiAgQ2FsbGVkIGFmdGVyCiAgKiBwcm9iaW5nIHN1Y2NlZWRzLgogICovCkBAIC0xNzAsOCArMTc4LDYgQEAKIAlscC0+aHcuY29weV9mcm9tX2NhcmQgPSBjb20yMDAyMF9jb3B5X2Zyb21fY2FyZDsKIAlscC0+aHcuY2xvc2UgPSBjb20yMDAyMF9jbG9zZTsKIAotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gY29tMjAwMjBfc2V0X21jX2xpc3Q7Ci0KIAlpZiAoIWRldi0+ZGV2X2FkZHJbMF0pCiAJCWRldi0+ZGV2X2FkZHJbMF0gPSBpbmIoaW9hZGRyICsgQlVTX0FMSUdOKjgpOwkvKiBGSVhNRTogZG8gdGhpcyBzb21lIG90aGVyIHdheSEgKi8KIApAQCAtMzQyLDYgKzM0OCw3IEBACiAgICAgZGVmaW5lZChDT05GSUdfQVJDTkVUX0NPTTIwMDIwX0NTX01PRFVMRSkKIEVYUE9SVF9TWU1CT0woY29tMjAwMjBfY2hlY2spOwogRVhQT1JUX1NZTUJPTChjb20yMDAyMF9mb3VuZCk7CitFWFBPUlRfU1lNQk9MKGNvbTIwMDIwX25ldGRldl9vcHMpOwogI2VuZGlmCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jCmluZGV4IDQ5ZDM5YTkuLjA2ZjhmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYwpAQCAtODgsNyArODgsNiBAQAogICovCiBzdGF0aWMgX19iZTE2IHR5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFyY2hkciAqcGt0ID0gKHN0cnVjdCBhcmNoZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBhcmNfcmZjMTA1MSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTA1MTsKIAlpbnQgaGRyX3NpemUgPSBBUkNfSERSX1NJWkUgKyBSRkMxMDUxX0hEUl9TSVpFOwpAQCAtMTEyLDggKzExMSw4IEBACiAJCXJldHVybiBodG9ucyhFVEhfUF9BUlApOwogCiAJZGVmYXVsdDoKLQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNDAsNyArMTM5LDcgQEAKIAlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJQlVHTVNHKERfTk9STUFMLCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFKTsKQEAgLTE2OCw3ICsxNjcsNiBAQAogc3RhdGljIGludCBidWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXVuc2lnbmVkIHNob3J0IHR5cGUsIHVpbnQ4X3QgZGFkZHIpCiB7Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBoZHJfc2l6ZSA9IEFSQ19IRFJfU0laRSArIFJGQzEwNTFfSERSX1NJWkU7CiAJc3RydWN0IGFyY2hkciAqcGt0ID0gKHN0cnVjdCBhcmNoZHIgKikgc2tiX3B1c2goc2tiLCBoZHJfc2l6ZSk7CiAJc3RydWN0IGFyY19yZmMxMDUxICpzb2Z0ID0gJnBrdC0+c29mdC5yZmMxMDUxOwpAQCAtMTg0LDggKzE4Miw4IEBACiAJZGVmYXVsdDoKIAkJQlVHTVNHKERfTk9STUFMLCAiUkZDMTA1MTogSSBkb24ndCB1bmRlcnN0YW5kIHByb3RvY29sICVkICglWGgpXG4iLAogCQkgICAgICAgdHlwZSwgdHlwZSk7Ci0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYwppbmRleCAyMzAzZDNhLi43NDU1MzA2NTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMKQEAgLTkyLDcgKzkyLDYgQEAKIHsKIAlzdHJ1Y3QgYXJjaGRyICpwa3QgPSAoc3RydWN0IGFyY2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGFyY19yZmMxMjAxICpzb2Z0ID0gJnBrdC0+c29mdC5yZmMxMjAxOwotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaGRyX3NpemUgPSBBUkNfSERSX1NJWkUgKyBSRkMxMjAxX0hEUl9TSVpFOwogCiAJLyogUHVsbCBvZmYgdGhlIGFyY25ldCBoZWFkZXIuICovCkBAIC0xMjEsOCArMTIwLDggQEAKIAljYXNlIEFSQ19QX05PVkVMTF9FQzoKIAkJcmV0dXJuIGh0b25zKEVUSF9QXzgwMl8zKTsKIAlkZWZhdWx0OgotCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE3Miw4ICsxNzEsOCBAQAogCQkJIGluLT5zZXF1ZW5jZSwgc29mdC0+c3BsaXRfZmxhZywgc29mdC0+c2VxdWVuY2UpOwogCQkJbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEgPSBzb2Z0LT5zZXF1ZW5jZTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKGluLT5za2IpOwotCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCWluLT5za2IgPSBOVUxMOwogCQl9CiAJCWluLT5zZXF1ZW5jZSA9IHNvZnQtPnNlcXVlbmNlOwpAQCAtMTgxLDcgKzE4MCw3IEBACiAJCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCXJldHVybjsKIAkJfQogCQlza2JfcHV0KHNrYiwgbGVuZ3RoICsgQVJDX0hEUl9TSVpFKTsKQEAgLTIxMyw3ICsyMTIsNyBAQAogCQkJCQlCVUdNU0coRF9FWFRSQSwKIAkJCQkJICAgICAgICJBUlAgc291cmNlIGFkZHJlc3Mgd2FzIDAwaCwgc2V0IHRvICUwMlhoLlxuIiwKIAkJCQkJICAgICAgIHNhZGRyKTsKLQkJCQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQkJCSpjcHRyID0gc2FkZHI7CiAJCQkJfSBlbHNlIHsKIAkJCQkJQlVHTVNHKERfRFVSSU5HLCAiQVJQIHNvdXJjZSBhZGRyZXNzICglWGgpIGlzIGZpbmUuXG4iLApAQCAtMjIyLDggKzIyMSw4IEBACiAJCQl9IGVsc2UgewogCQkJCUJVR01TRyhEX05PUk1BTCwgImZ1bm55LXNoYXBlZCBBUlAgcGFja2V0LiAoJVhoLCAlWGgpXG4iLAogCQkJCSAgICAgICBhcnAtPmFyX2hsbiwgYXJwLT5hcl9wbG4pOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQl9CiAJCX0KIAkJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBza2IsICJyeCIpOwpAQCAtMjU3LDggKzI1Niw4IEBACiAJCQkgICAgICAgc29mdC0+c3BsaXRfZmxhZyk7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKIAkJCWluLT5za2IgPSBOVUxMOwotCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCWluLT5sYXN0cGFja2V0ID0gaW4tPm51bXBhY2tldHMgPSAwOwogCQl9CiAJCWlmIChzb2Z0LT5zcGxpdF9mbGFnICYgMSkgewkvKiBmaXJzdCBwYWNrZXQgaW4gc3BsaXQgKi8KQEAgLTI2OSw4ICsyNjgsOCBAQAogCQkJCSAgICAgICAiKHNwbGl0ZmxhZz0lZCwgc2VxPSVkKVxuIiwKIAkJCQkgICAgICAgaW4tPnNlcXVlbmNlLCBzb2Z0LT5zcGxpdF9mbGFnLAogCQkJCSAgICAgICBzb2Z0LT5zZXF1ZW5jZSk7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKIAkJCX0KIAkJCWluLT5zZXF1ZW5jZSA9IHNvZnQtPnNlcXVlbmNlOwpAQCAtMjgxLDggKzI4MCw4IEBACiAJCQkJQlVHTVNHKERfRVhUUkEsICJpbmNvbWluZyBwYWNrZXQgbW9yZSB0aGFuIDE2IHNlZ21lbnRzOyBkcm9wcGluZy4gKHNwbGl0ZmxhZz0lZClcbiIsCiAJCQkJICAgICAgIHNvZnQtPnNwbGl0X2ZsYWcpOwogCQkJCWxwLT5yZmMxMjAxLmFib3J0ZWRfc2VxID0gc29mdC0+c2VxdWVuY2U7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpbi0+c2tiID0gc2tiID0gYWxsb2Nfc2tiKDUwOCAqIGluLT5udW1wYWNrZXRzICsgQVJDX0hEUl9TSVpFLApAQCAtMjkwLDcgKzI4OSw3IEBACiAJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQlCVUdNU0coRF9OT1JNQUwsICIoc3BsaXQpIG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKIAkJCQlscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSA9IHNvZnQtPnNlcXVlbmNlOwotCQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJc2tiLT5kZXYgPSBkZXY7CkBAIC0zMTQsOCArMzEzLDggQEAKIAkJCQkJICAgICAgICJmaXJzdCEgKHNwbGl0ZmxhZz0lZCwgc2VxPSVkLCBhYm9ydGVkPSVkKVxuIiwKIAkJCQkJc29mdC0+c3BsaXRfZmxhZywgc29mdC0+c2VxdWVuY2UsCiAJCQkJCSAgICAgICBscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSk7Ci0JCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQkJfQogCQkJCXJldHVybjsKIAkJCX0KQEAgLTMyNSw4ICszMjQsOCBAQAogCQkJCWlmIChwYWNrZXRudW0gPD0gaW4tPmxhc3RwYWNrZXQgLSAxKSB7CiAJCQkJCUJVR01TRyhEX0VYVFJBLCAiZHVwbGljYXRlIHNwbGl0cGFja2V0IGlnbm9yZWQhIChzcGxpdGZsYWc9JWQpXG4iLAogCQkJCQkgICAgICAgc29mdC0+c3BsaXRfZmxhZyk7Ci0JCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJCQlyZXR1cm47CiAJCQkJfQogCQkJCS8qICJiYWQiIGR1cGxpY2F0ZSwga2lsbCByZWFzc2VtYmx5ICovCkBAIC0zMzYsOCArMzM1LDggQEAKIAkJCQlscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSA9IHNvZnQtPnNlcXVlbmNlOwogCQkJCWRldl9rZnJlZV9za2JfaXJxKGluLT5za2IpOwogCQkJCWluLT5za2IgPSBOVUxMOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQkJaW4tPmxhc3RwYWNrZXQgPSBpbi0+bnVtcGFja2V0cyA9IDA7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNDA0LDggKzQwMyw4IEBACiAJZGVmYXVsdDoKIAkJQlVHTVNHKERfTk9STUFMLCAiUkZDMTIwMTogSSBkb24ndCB1bmRlcnN0YW5kIHByb3RvY29sICVkICglWGgpXG4iLAogCQkgICAgICAgdHlwZSwgdHlwZSk7Ci0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCAzZWMyMGNjLi5jYzc3MDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogCQlpbnQgbW9yZSA9IDA7CiAKIAkJc3Bpbl9sb2NrX2lycSgmZXAtPnJ4X2xvY2spOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFggfCBSRUdfSU5URU5fUlgpOwogCQlpZiAoZXA5M3h4X2hhdmVfbW9yZV9yeChlcCkpIHsKIAkJCXdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFgpOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZlcC0+cnhfbG9jayk7CiAKLQkJaWYgKG1vcmUgJiYgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJaWYgKG1vcmUgJiYgbmFwaV9yZXNjaGVkdWxlKG5hcGkpKQogCQkJZ290byBwb2xsX3NvbWVfbW9yZTsKIAl9CiAKQEAgLTQxNSw5ICs0MTUsOSBAQAogCiAJaWYgKHN0YXR1cyAmIFJFR19JTlRTVFNfUlgpIHsKIAkJc3Bpbl9sb2NrKCZlcC0+cnhfbG9jayk7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZXAtPm5hcGkpKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmZXAtPm5hcGkpKSkgewogCQkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZlcC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmVwLT5uYXBpKTsKIAkJfQogCQlzcGluX3VubG9jaygmZXAtPnJ4X2xvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCmluZGV4IDVmY2UxZDUuLjVmZTE3ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwpAQCAtNDczLDcgKzQ3Myw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcnhfaXJxXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCiAJcW1ncl9kaXNhYmxlX2lycShwb3J0LT5wbGF0LT5yeHEpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIH0KIAogc3RhdGljIGludCBldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCkBAIC00OTgsMTYgKzQ5OCwxNiBAQAogCiAJCWlmICgobiA9IHF1ZXVlX2dldF9kZXNjKHJ4cSwgcG9ydCwgMCkpIDwgMCkgewogI2lmIERFQlVHX1JYCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9wb2xsIG5ldGlmX3J4X2NvbXBsZXRlXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcG9sbCBuYXBpX2NvbXBsZXRlXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXFtZ3JfZW5hYmxlX2lycShyeHEpOwogCQkJaWYgKCFxbWdyX3N0YXRfZW1wdHkocnhxKSAmJgotCQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpIHsKKwkJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpIHsKICNpZiBERUJVR19SWAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3BvbGwiCi0JCQkJICAgICAgICIgbmV0aWZfcnhfcmVzY2hlZHVsZSBzdWNjZXNzZWRcbiIsCisJCQkJICAgICAgICIgbmFwaV9yZXNjaGVkdWxlIHN1Y2Nlc3NlZFxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgogCQkJCXFtZ3JfZGlzYWJsZV9pcnEocnhxKTsKQEAgLTEwMzYsNyArMTAzNiw3IEBACiAJfQogCXBvcnRzX29wZW4rKzsKIAkvKiB3ZSBtYXkgYWxyZWFkeSBoYXZlIFJYIGRhdGEsIGVuYWJsZXMgSVJRICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggZjNhMTI3NC4uMzVjZDI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIHsKIAlzdHJsY3B5KGluZm8tPmRyaXZlciwgTU9EVUxFTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgTU9EVUxFVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKLQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBuZGV2LT5kZXYucGFyZW50LT5idXNfaWQsCisJc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUobmRldi0+ZGV2LnBhcmVudCksCiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdDE3MDAuYyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCmluZGV4IDcyZWE2ZTMuLmNlZDcwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCkBAIC04MjgsNyArODI4LDYgQEAKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgY2hhciBtY19maWx0ZXJbOF07CQkgLyogTXVsdGljYXN0IGhhc2ggZmlsdGVyICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwpAQCAtODU3LDYgKzg1Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmxwLT5sb2NrLCBmbGFncyk7CiAJaWYgKG1lbWNtcChtY19maWx0ZXIsIGxwLT5tY19maWx0ZXIsIHNpemVvZihtY19maWx0ZXIpKSkgeworCQlpbnQgaTsKIAkJaW50IHNhdmVkX2JhbmsgPSBpbncoaW9hZGRyICsgQ09ORklHXzApOwogCQkvKiBTd2l0Y2ggdG8gYmFuayAxIGFuZCBzZXQgdGhlIG11bHRpY2FzdCB0YWJsZS4gKi8KIAkJb3V0dygoc2F2ZWRfYmFuayAmIH4weDBDMDApIHwgMHgwNDgwLCBpb2FkZHIgKyBDT05GSUdfMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAppbmRleCBhYzExYjg0Li5lMTY1OGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaAppbmRleCBjNDk1NTBkLi4yYmY2M2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlLmgKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCS8qIEFsbCBEZXNjcmlwdG9yIG1lbW9yeSAqLwogCWRtYV9hZGRyX3QgIAlyaW5nX2RtYTsKIAl2b2lkICAgICAJKnJpbmdfdmlyX2FkZHI7Ci0JaW50ICAgICAgICAgICAgIHJpbmdfc2l6ZTsKKwl1MzIgICAgICAgICAgICAgcmluZ19zaXplOwogCiAJc3RydWN0IGF0bDFlX3R4X3JpbmcgdHhfcmluZzsKIAlzdHJ1Y3QgYXRsMWVfcnhfcmluZyByeF9yaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IGJiOTA5NGQuLmM3NTg4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTEzMjYsOSArMTMyNiw5IEBACiAJCQlBVF9XUklURV9SRUcoaHcsIFJFR19JTVIsCiAJCQkJICAgICBJTVJfTk9STUFMX01BU0sgJiB+SVNSX1JYX0VWRU5UKTsKIAkJCUFUX1dSSVRFX0ZMVVNIKGh3KTsKLQkJCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgKKwkJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKAogCQkJCSAgICZhZGFwdGVyLT5uYXBpKSkpCi0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCQkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAkJfQogCX0gd2hpbGUgKC0tbWF4X2ludHMgPiAwKTsKIAkvKiByZS1lbmFibGUgSW50ZXJydXB0Ki8KQEAgLTE1MTQsNyArMTUxNCw3IEBACiAJLyogSWYgbm8gVHggYW5kIG5vdCBlbm91Z2ggUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiBxdWl0X3BvbGxpbmc6Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpbXJfZGF0YSA9IEFUX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkVHX0lNUik7CiAJCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIsIGltcl9kYXRhIHwgSVNSX1JYX0VWRU5UKTsKIAkJLyogdGVzdCBkZWJ1ZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKaW5kZXggZjcyYWJiMy4uYjNiZTU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCkBAIC00MSw3ICs0MSw3IEBACiAKICNkZWZpbmUgQVRMMUVfUEFSQU0oeCwgZGVzYykgXAogCXN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSB4W0FUTDFFX01BWF9OSUMgKyAxXSA9IEFUTDFFX1BBUkFNX0lOSVQ7IFwKLQlzdGF0aWMgaW50IG51bV8jI3g7IFwKKwlzdGF0aWMgdW5zaWduZWQgaW50IG51bV8jI3g7IFwKIAltb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQoeCwgeCwgaW50LCAmbnVtXyMjeCwgMCk7IFwKIAlNT0RVTEVfUEFSTV9ERVNDKHgsIGRlc2MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCmluZGV4IGMwY2VlZTAuLjQzZmMxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCkBAIC0xMDUsNyArMTA1LDcgQEAKICAqIERlZmF1bHQgVmFsdWU6IDEwMCAoMjAwdXMpCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBpbnRfbW9kX3RpbWVyW0FUTDFfTUFYX05JQysxXSA9IEFUTDFfUEFSQU1fSU5JVDsKLXN0YXRpYyBpbnQgbnVtX2ludF9tb2RfdGltZXI7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9pbnRfbW9kX3RpbWVyOwogbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKGludF9tb2RfdGltZXIsIGludF9tb2RfdGltZXIsIGludCwKIAkmbnVtX2ludF9tb2RfdGltZXIsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kX3RpbWVyLCAiSW50ZXJydXB0IG1vZGVyYXRvciB0aW1lciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwppbmRleCBiYzM5NDQ5Li45ZmUwNmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwpAQCAtMjg1NCw3ICsyODU0LDcgQEAKICNlbHNlCiAjZGVmaW5lIEFUTDJfUEFSQU0oWCwgZGVzYykgXAogICAgIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBYW0FUTDJfTUFYX05JQysxXSA9IEFUTDJfUEFSQU1fSU5JVDsgXAotICAgIHN0YXRpYyBpbnQgbnVtXyMjWCA9IDA7IFwKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IG51bV8jI1g7IFwKICAgICBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQoWCwgWCwgaW50LCAmbnVtXyMjWCwgMCk7IFwKICAgICBNT0RVTEVfUEFSTV9ERVNDKFgsIGRlc2MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggOWM4NzViYi4uNDI3NGU0YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTgxLDI0ICs4MSw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vLyBwcm90b3R5cGVzCi1zdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBlbmFibGVfcnhfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50LCB2b2lkICopOwotc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOwotc3RhdGljIGludCBhdTEwMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50KTsKLXN0YXRpYyB2b2lkIGF1MTAwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50LCB1MTYpOwotc3RhdGljIHZvaWQgYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwotCiAvKgogICogVGhlb3J5IG9mIG9wZXJhdGlvbgogICoKQEAgLTE4OCw2ICsxNzAsMjYgQEAKICMgZXJyb3IgTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkgYnVzIG5vdCBzdXBwb3J0ZWQgeWV0CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2VfcmVzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlpZihmb3JjZV9yZXNldCB8fCAoIWF1cC0+bWFjX2VuYWJsZWQpKSB7CisJCSphdXAtPmVuYWJsZSA9IE1BQ19FTl9DTE9DS19FTkFCTEU7CisJCWF1X3N5bmNfZGVsYXkoMik7CisJCSphdXAtPmVuYWJsZSA9IChNQUNfRU5fUkVTRVQwIHwgTUFDX0VOX1JFU0VUMSB8IE1BQ19FTl9SRVNFVDIKKwkJCQl8IE1BQ19FTl9DTE9DS19FTkFCTEUpOworCQlhdV9zeW5jX2RlbGF5KDIpOworCisJCWF1cC0+bWFjX2VuYWJsZWQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworfQorCiAvKgogICogTUlJIG9wZXJhdGlvbnMKICAqLwpAQCAtMjgxLDYgKzI4MywxMDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaGFyZF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBoYXJkIHN0b3BcbiIsIGRldi0+bmFtZSk7CisKKwlhdXAtPm1hYy0+Y29udHJvbCAmPSB+KE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFKTsKKwlhdV9zeW5jX2RlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBlbmFibGVfcnhfdHhcbiIsIGRldi0+bmFtZSk7CisKKwlhdXAtPm1hYy0+Y29udHJvbCB8PSAoTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOworCWF1X3N5bmNfZGVsYXkoMTApOworfQorCitzdGF0aWMgdm9pZAorYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBhdXAtPnBoeV9kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWludCBzdGF0dXNfY2hhbmdlID0gMDsKKworCUJVR19PTighYXVwLT5waHlfZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX3NwZWVkICE9IHBoeWRldi0+c3BlZWQpKSB7CisJCS8vIHNwZWVkIGNoYW5nZWQKKworCQlzd2l0Y2gocGh5ZGV2LT5zcGVlZCkgeworCQljYXNlIFNQRUVEXzEwOgorCQljYXNlIFNQRUVEXzEwMDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogU3BlZWQgKCVkKSBpcyBub3QgMTAvMTAwID8/P1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQpOworCQkJYnJlYWs7CisJCX0KKworCQlhdXAtPm9sZF9zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCisJaWYgKHBoeWRldi0+bGluayAmJiAoYXVwLT5vbGRfZHVwbGV4ICE9IHBoeWRldi0+ZHVwbGV4KSkgeworCQkvLyBkdXBsZXggbW9kZSBjaGFuZ2VkCisKKwkJLyogc3dpdGNoaW5nIGR1cGxleCBtb2RlIHJlcXVpcmVzIHRvIGRpc2FibGUgcnggYW5kIHR4ISAqLworCQloYXJkX3N0b3AoZGV2KTsKKworCQlpZiAoRFVQTEVYX0ZVTEwgPT0gcGh5ZGV2LT5kdXBsZXgpCisJCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKKwkJCQkJICAgICB8IE1BQ19GVUxMX0RVUExFWCkKKwkJCQkJICAgICAmIH5NQUNfRElTQUJMRV9SWF9PV04pOworCQllbHNlCisJCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKKwkJCQkJICAgICAgJiB+TUFDX0ZVTExfRFVQTEVYKQorCQkJCQkgICAgIHwgTUFDX0RJU0FCTEVfUlhfT1dOKTsKKwkJYXVfc3luY19kZWxheSgxKTsKKworCQllbmFibGVfcnhfdHgoZGV2KTsKKwkJYXVwLT5vbGRfZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCisJaWYocGh5ZGV2LT5saW5rICE9IGF1cC0+b2xkX2xpbmspIHsKKwkJLy8gbGluayBzdGF0ZSBjaGFuZ2VkCisKKwkJaWYgKCFwaHlkZXYtPmxpbmspIHsKKwkJCS8qIGxpbmsgd2VudCBkb3duICovCisJCQlhdXAtPm9sZF9zcGVlZCA9IDA7CisJCQlhdXAtPm9sZF9kdXBsZXggPSAtMTsKKwkJfQorCisJCWF1cC0+b2xkX2xpbmsgPSBwaHlkZXYtPmxpbms7CisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHN0YXR1c19jaGFuZ2UpIHsKKwkJaWYgKHBoeWRldi0+bGluaykKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwICglZC8lcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkLAorCQkJICAgICAgIERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4ID8gIkZ1bGwiIDogIkhhbGYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbWlpX3Byb2JlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTM1NSw4ICs0NTgsOCBAQAogCS8qIG5vdyB3ZSBhcmUgc3VwcG9zZWQgdG8gaGF2ZSBhIHByb3BlciBwaHlkZXYsIHRvIGF0dGFjaCB0by4uLiAqLwogCUJVR19PTihwaHlkZXYtPmF0dGFjaGVkX2Rldik7CiAKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmF1MTAwMF9hZGp1c3RfbGluaywgMCwKLQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgJmF1MTAwMF9hZGp1c3RfbGluaywKKwkJCTAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOwpAQCAtMzgxLDggKzQ4NCw4IEBACiAJYXVwLT5waHlfZGV2ID0gcGh5ZGV2OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAiCi0JICAgICAgICIobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJICAgICAgICIobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTIsNDggKzUxNSw2IEBACiAJYXVwLT5wREJmcmVlID0gcERCOwogfQogCi1zdGF0aWMgdm9pZCBlbmFibGVfcnhfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuYWJsZV9yeF90eFxuIiwgZGV2LT5uYW1lKTsKLQotCWF1cC0+bWFjLT5jb250cm9sIHw9IChNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRSk7Ci0JYXVfc3luY19kZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhcmRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZCBzdG9wXG4iLCBkZXYtPm5hbWUpOwotCi0JYXVwLT5tYWMtPmNvbnRyb2wgJj0gfihNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRSk7Ci0JYXVfc3luY19kZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlX3Jlc2V0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCi0JaWYoZm9yY2VfcmVzZXQgfHwgKCFhdXAtPm1hY19lbmFibGVkKSkgewotCQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5BQkxFOwotCQlhdV9zeW5jX2RlbGF5KDIpOwotCQkqYXVwLT5lbmFibGUgPSAoTUFDX0VOX1JFU0VUMCB8IE1BQ19FTl9SRVNFVDEgfCBNQUNfRU5fUkVTRVQyCi0JCQkJfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFKTsKLQkJYXVfc3luY19kZWxheSgyKTsKLQotCQlhdXAtPm1hY19lbmFibGVkID0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIHZvaWQgcmVzZXRfbWFjX3VubG9ja2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTQyLDMwICs2MDMsNiBAQAogc3RhdGljIGludCBudW1faWZzOwogCiAvKgotICogU2V0dXAgdGhlIGJhc2UgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcwotICogYmFzZWQgb24gY3B1IHR5cGUgYW5kIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkIGluIHN5c19waW5mdW5jCi0gKiByZWdpc3Rlci4gVGhlIGxhc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgU1lTX1BGX05JMiAoYml0IDQpIGlzIDAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2lkKQotewotCWludCBuaSA9IChpbnQpKChhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKShTWVNfUEZfTkkyKSkgPj4gNCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZm91bmRfb25lID0gMDsKLQotCW51bV9pZnMgPSBOVU1fRVRIX0lOVEVSRkFDRVMgLSBuaTsKLQotCWZvcihpID0gMDsgaSA8IG51bV9pZnM7IGkrKykgewotCQlkZXYgPSBhdTEwMDBfcHJvYmUoaSk7Ci0JCWlmbGlzdFtpXS5kZXYgPSBkZXY7Ci0JCWlmIChkZXYpCi0JCQlmb3VuZF9vbmUrKzsKLQl9Ci0JaWYgKCFmb3VuZF9vbmUpCi0JCXJldHVybiAtRU5PREVWOwotCXJldHVybiAwOwotfQotCi0vKgogICogZXRodG9vbCBvcGVyYXRpb25zCiAgKi8KIApAQCAtNjExLDYgKzY0OCw0MDUgQEAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIAorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJmYWNlLgorICoKKyAqIFdoZW4gdGhlIGRldmljZSBwb3dlcnMgdXAsIHRoZSBjbG9ja3MgYXJlIGRpc2FibGVkIGFuZCB0aGUKKyAqIG1hYyBpcyBpbiByZXNldCBzdGF0ZS4gIFdoZW4gdGhlIGludGVyZmFjZSBpcyBjbG9zZWQsIHdlCisgKiBkbyB0aGUgc2FtZSAtLSByZXNldCB0aGUgZGV2aWNlIGFuZCBkaXNhYmxlIHRoZSBjbG9ja3MgdG8KKyAqIGNvbnNlcnZlIHBvd2VyLiBUaHVzLCB3aGVuZXZlciBhdTEwMDBfaW5pdCgpIGlzIGNhbGxlZCwKKyAqIHRoZSBkZXZpY2Ugc2hvdWxkIGFscmVhZHkgYmUgaW4gcmVzZXQgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgYXUxMDAwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwl1MzIgY29udHJvbDsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBhdTEwMDBfaW5pdFxuIiwgZGV2LT5uYW1lKTsKKworCS8qIGJyaW5nIHRoZSBkZXZpY2Ugb3V0IG9mIHJlc2V0ICovCisJZW5hYmxlX21hYyhkZXYsIDEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgPSAwOworCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2RtYV9yaW5nWzBdLT5idWZmX3N0YXQgJiAweEMpID4+IDI7CisJYXVwLT50eF90YWlsID0gYXVwLT50eF9oZWFkOworCWF1cC0+cnhfaGVhZCA9IChhdXAtPnJ4X2RtYV9yaW5nWzBdLT5idWZmX3N0YXQgJiAweEMpID4+IDI7CisKKwlhdXAtPm1hYy0+bWFjX2FkZHJfaGlnaCA9IGRldi0+ZGV2X2FkZHJbNV08PDggfCBkZXYtPmRldl9hZGRyWzRdOworCWF1cC0+bWFjLT5tYWNfYWRkcl9sb3cgPSBkZXYtPmRldl9hZGRyWzNdPDwyNCB8IGRldi0+ZGV2X2FkZHJbMl08PDE2IHwKKwkJZGV2LT5kZXZfYWRkclsxXTw8OCB8IGRldi0+ZGV2X2FkZHJbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RNQTsgaSsrKSB7CisJCWF1cC0+cnhfZG1hX3JpbmdbaV0tPmJ1ZmZfc3RhdCB8PSBSWF9ETUFfRU5BQkxFOworCX0KKwlhdV9zeW5jKCk7CisKKwljb250cm9sID0gTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7CisjaWZuZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgorCWNvbnRyb2wgfD0gTUFDX0JJR19FTkRJQU47CisjZW5kaWYKKwlpZiAoYXVwLT5waHlfZGV2KSB7CisJCWlmIChhdXAtPnBoeV9kZXYtPmxpbmsgJiYgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkKKwkJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOworCQllbHNlCisJCQljb250cm9sIHw9IE1BQ19ESVNBQkxFX1JYX09XTjsKKwl9IGVsc2UgeyAvKiBQSFktbGVzcyBvcCwgYXNzdW1lIGZ1bGwtZHVwbGV4ICovCisJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOworCX0KKworCWF1cC0+bWFjLT5jb250cm9sID0gY29udHJvbDsKKwlhdXAtPm1hYy0+dmxhbjFfdGFnID0gMHg4MTAwOyAvKiBhY3RpdmF0ZSB2bGFuIHN1cHBvcnQgKi8KKwlhdV9zeW5jKCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKKworCXBzLT5yeF9wYWNrZXRzKys7CisJaWYgKHN0YXR1cyAmIFJYX01DQVNUX0ZSQU1FKQorCQlwcy0+bXVsdGljYXN0Kys7CisKKwlpZiAoc3RhdHVzICYgUlhfRVJST1IpIHsKKwkJcHMtPnJ4X2Vycm9ycysrOworCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQorCQkJcHMtPnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIChSWF9PVkVSTEVOIHwgUlhfT1ZFUkxFTiB8IFJYX0xFTl9FUlJPUikpCisJCQlwcy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlpZiAoc3RhdHVzICYgUlhfQ1JDX0VSUk9SKQorCQkJcHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCisJCQlwcy0+Y29sbGlzaW9ucysrOworCX0KKwllbHNlCisJCXBzLT5yeF9ieXRlcyArPSBzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSzsKKworfQorCisvKgorICogQXUxMDAwIHJlY2VpdmUgcm91dGluZS4KKyAqLworc3RhdGljIGludCBhdTEwMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2xhdGlsZSByeF9kbWFfdCAqcHJ4ZDsKKwl1MzIgYnVmZl9zdGF0LCBzdGF0dXM7CisJZGJfZGVzdF90ICpwREI7CisJdTMyCWZybWxlbjsKKworCWlmIChhdTEwMDBfZGVidWcgPiA1KQorCQlwcmludGsoIiVzOiBhdTEwMDBfcnggaGVhZCAlZFxuIiwgZGV2LT5uYW1lLCBhdXAtPnJ4X2hlYWQpOworCisJcHJ4ZCA9IGF1cC0+cnhfZG1hX3JpbmdbYXVwLT5yeF9oZWFkXTsKKwlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7CisJd2hpbGUgKGJ1ZmZfc3RhdCAmIFJYX1RfRE9ORSkgIHsKKwkJc3RhdHVzID0gcHJ4ZC0+c3RhdHVzOworCQlwREIgPSBhdXAtPnJ4X2RiX2ludXNlW2F1cC0+cnhfaGVhZF07CisJCXVwZGF0ZV9yeF9zdGF0cyhkZXYsIHN0YXR1cyk7CisJCWlmICghKHN0YXR1cyAmIFJYX0VSUk9SKSkgIHsKKworCQkJLyogZ29vZCBmcmFtZSAqLworCQkJZnJtbGVuID0gKHN0YXR1cyAmIFJYX0ZSQU1FX0xFTl9NQVNLKTsKKwkJCWZybWxlbiAtPSA0OyAvKiBSZW1vdmUgRkNTICovCisJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGZybWxlbiArIDIpOworCQkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIElQIGhlYWRlciBhbGlnbiAqLworCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLAorCQkJCSh1bnNpZ25lZCBjaGFyICopcERCLT52YWRkciwgZnJtbGVuKTsKKwkJCXNrYl9wdXQoc2tiLCBmcm1sZW4pOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCW5ldGlmX3J4KHNrYik7CS8qIHBhc3MgdGhlIHBhY2tldCB0byB1cHBlciBsYXllcnMgKi8KKwkJfQorCQllbHNlIHsKKwkJCWlmIChhdTEwMDBfZGVidWcgPiA0KSB7CisJCQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKKwkJCQkJcHJpbnRrKCJyeCBtaXNzXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfV0RPR19USU1FUikKKwkJCQkJcHJpbnRrKCJyeCB3ZG9nXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfUlVOVCkKKwkJCQkJcHJpbnRrKCJyeCBydW50XG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfT1ZFUkxFTikKKwkJCQkJcHJpbnRrKCJyeCBvdmVybGVuXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfQ09MTCkKKwkJCQkJcHJpbnRrKCJyeCBjb2xsXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTUlJX0VSUk9SKQorCQkJCQlwcmludGsoInJ4IG1paSBlcnJvclxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKKwkJCQkJcHJpbnRrKCJyeCBjcmMgZXJyb3JcbiIpOworCQkJCWlmIChzdGF0dXMgJiBSWF9MRU5fRVJST1IpCisJCQkJCXByaW50aygicnggbGVuIGVycm9yXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfVV9DTlRSTF9GUkFNRSkKKwkJCQkJcHJpbnRrKCJyeCB1IGNvbnRyb2wgZnJhbWVcbiIpOworCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCisJCQkJCXByaW50aygicnggbWlzc1xuIik7CisJCQl9CisJCX0KKwkJcHJ4ZC0+YnVmZl9zdGF0ID0gKHUzMikocERCLT5kbWFfYWRkciB8IFJYX0RNQV9FTkFCTEUpOworCQlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9oZWFkICsgMSkgJiAoTlVNX1JYX0RNQSAtIDEpOworCQlhdV9zeW5jKCk7CisKKwkJLyogbmV4dCBkZXNjcmlwdG9yICovCisJCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07CisJCWJ1ZmZfc3RhdCA9IHByeGQtPmJ1ZmZfc3RhdDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKKworCWlmIChzdGF0dXMgJiBUWF9GUkFNRV9BQk9SVEVEKSB7CisJCWlmICghYXVwLT5waHlfZGV2IHx8IChEVVBMRVhfRlVMTCA9PSBhdXAtPnBoeV9kZXYtPmR1cGxleCkpIHsKKwkJCWlmIChzdGF0dXMgJiAoVFhfSkFCX1RJTUVPVVQgfCBUWF9VTkRFUlJVTikpIHsKKwkJCQkvKiBhbnkgb3RoZXIgdHggZXJyb3JzIGFyZSBvbmx5IHZhbGlkCisJCQkJICogaW4gaGFsZiBkdXBsZXggbW9kZSAqLworCQkJCXBzLT50eF9lcnJvcnMrKzsKKwkJCQlwcy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXBzLT50eF9lcnJvcnMrKzsKKwkJCXBzLT50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIChUWF9OT19DQVJSSUVSIHwgVFhfTE9TU19DQVJSSUVSKSkKKwkJCQlwcy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCX0KK30KKworLyoKKyAqIENhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHRvIGFja25vd2xlZGdlCisgKiB0aGUgVFggRE9ORSBiaXRzLiAgVGhpcyBpcyBhIG11c3QgaWYgdGhlIGlycSBpcyBzZXR1cCBhcworICogZWRnZSB0cmlnZ2VyZWQuCisgKi8KK3N0YXRpYyB2b2lkIGF1MTAwMF90eF9hY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7CisKKwlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOworCisJd2hpbGUgKHB0eGQtPmJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgeworCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOworCQlwdHhkLT5idWZmX3N0YXQgJj0gflRYX1RfRE9ORTsKKwkJcHR4ZC0+bGVuID0gMDsKKwkJYXVfc3luYygpOworCisJCWF1cC0+dHhfdGFpbCA9IChhdXAtPnR4X3RhaWwgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7CisJCXB0eGQgPSBhdXAtPnR4X2RtYV9yaW5nW2F1cC0+dHhfdGFpbF07CisKKwkJaWYgKGF1cC0+dHhfZnVsbCkgeworCQkJYXVwLT50eF9mdWxsID0gMDsKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJfQorCX0KK30KKworLyoKKyAqIEF1MTAwMCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYXUxMDAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKworCS8qIEhhbmRsZSBSWCBpbnRlcnJ1cHRzIGZpcnN0IHRvIG1pbmltaXplIGNoYW5jZSBvZiBvdmVycnVuICovCisKKwlhdTEwMDBfcngoZGV2KTsKKwlhdTEwMDBfdHhfYWNrKGRldik7CisJcmV0dXJuIElSUV9SRVRWQUwoMSk7Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBvcGVuOiBkZXY9JXBcbiIsIGRldi0+bmFtZSwgZGV2KTsKKworCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZhdTEwMDBfaW50ZXJydXB0LCAwLAorCQkJCQlkZXYtPm5hbWUsIGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAorCQkJCWRldi0+bmFtZSwgZGV2LT5pcnEpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICgocmV0dmFsID0gYXUxMDAwX2luaXQoZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChhdXAtPnBoeV9kZXYpIHsKKwkJLyogY2F1c2UgdGhlIFBIWSBzdGF0ZSBtYWNoaW5lIHRvIHNjaGVkdWxlIGEgbGluayBzdGF0ZSBjaGVjayAqLworCQlhdXAtPnBoeV9kZXYtPnN0YXRlID0gUEhZX0NIQU5HRUxJTks7CisJCXBoeV9zdGFydChhdXAtPnBoeV9kZXYpOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogb3BlbjogSW5pdGlhbGl6YXRpb24gZG9uZS5cbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBjbG9zZTogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CisKKwlpZiAoYXVwLT5waHlfZGV2KQorCQlwaHlfc3RvcChhdXAtPnBoeV9kZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJcmVzZXRfbWFjX3VubG9ja2VkIChkZXYpOworCisJLyogc3RvcCB0aGUgZGV2aWNlICovCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEF1MTAwMCB0cmFuc21pdCByb3V0aW5lLgorICovCitzdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKKwl2b2xhdGlsZSB0eF9kbWFfdCAqcHR4ZDsKKwl1MzIgYnVmZl9zdGF0OworCWRiX2Rlc3RfdCAqcERCOworCWludCBpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDUpCisJCXByaW50aygiJXM6IHR4OiBhdXAgJXggbGVuPSVkLCBkYXRhPSVwLCBoZWFkICVkXG4iLAorCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCwgc2tiLT5sZW4sCisJCQkJc2tiLT5kYXRhLCBhdXAtPnR4X2hlYWQpOworCisJcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF9oZWFkXTsKKwlidWZmX3N0YXQgPSBwdHhkLT5idWZmX3N0YXQ7CisJaWYgKGJ1ZmZfc3RhdCAmIFRYX0RNQV9FTkFCTEUpIHsKKwkJLyogV2UndmUgd3JhcHBlZCBhcm91bmQgYW5kIHRoZSB0cmFuc21pdHRlciBpcyBzdGlsbCBidXN5ICovCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJYXVwLT50eF9mdWxsID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCWVsc2UgaWYgKGJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgeworCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOworCQlwdHhkLT5sZW4gPSAwOworCX0KKworCWlmIChhdXAtPnR4X2Z1bGwpIHsKKwkJYXVwLT50eF9mdWxsID0gMDsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KKworCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKKwlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOworCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7CisJCWZvciAoaT1za2ItPmxlbjsgaTxFVEhfWkxFTjsgaSsrKSB7CisJCQkoKGNoYXIgKilwREItPnZhZGRyKVtpXSA9IDA7CisJCX0KKwkJcHR4ZC0+bGVuID0gRVRIX1pMRU47CisJfQorCWVsc2UKKwkJcHR4ZC0+bGVuID0gc2tiLT5sZW47CisKKwlwcy0+dHhfcGFja2V0cysrOworCXBzLT50eF9ieXRlcyArPSBwdHhkLT5sZW47CisKKwlwdHhkLT5idWZmX3N0YXQgPSBwREItPmRtYV9hZGRyIHwgVFhfRE1BX0VOQUJMRTsKKwlhdV9zeW5jKCk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2hlYWQgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgVHggcmluZyBoYXMgYmVlbiBmdWxsIGxvbmdlciB0aGFuIHRoZSB3YXRjaGRvZyB0aW1lb3V0CisgKiB2YWx1ZS4gVGhlIHRyYW5zbWl0dGVyIG11c3QgYmUgaHVuZz8KKyAqLworc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBhdTEwMDBfdHhfdGltZW91dDogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CisJcmVzZXRfbWFjKGRldik7CisJYXUxMDAwX2luaXQoZGV2KTsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50aygiJXM6IHNldF9yeF9tb2RlOiBmbGFncz0leFxuIiwgZGV2LT5uYW1lLCBkZXYtPmZsYWdzKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCisJCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QUk9NSVNDVU9VUzsKKwl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAgfHwKKwkJCSAgIGRldi0+bWNfY291bnQgPiBNVUxUSUNBU1RfRklMVEVSX0xJTUlUKSB7CisJCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QQVNTX0FMTF9NVUxUSTsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhc3MgYWxsIG11bHRpY2FzdFxuIiwgZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisJCXUzMiBtY19maWx0ZXJbMl07CS8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLworCisJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7CisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OworCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCQlzZXRfYml0KGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik+PjI2LAorCQkJCQkobG9uZyAqKW1jX2ZpbHRlcik7CisJCX0KKwkJYXVwLT5tYWMtPm11bHRpX2hhc2hfaGlnaCA9IG1jX2ZpbHRlclsxXTsKKwkJYXVwLT5tYWMtPm11bHRpX2hhc2hfbG93ID0gbWNfZmlsdGVyWzBdOworCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX1BST01JU0NVT1VTOworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfSEFTSF9NT0RFOworCX0KK30KKworc3RhdGljIGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWF1cC0+cGh5X2RldikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxlCisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChhdXAtPnBoeV9kZXYsIGlmX21paShycSksIGNtZCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIGF1MTAwMF9wcm9iZShpbnQgcG9ydF9udW0pCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZCA9IDA7CkBAIC02MjIsNyArMTA1OCw3IEBACiAJdTMyIGJhc2UsIG1hY2VuOwogCiAJaWYgKHBvcnRfbnVtID49IE5VTV9FVEhfSU5URVJGQUNFUykKLSAJCXJldHVybiBOVUxMOworCQlyZXR1cm4gTlVMTDsKIAogCWJhc2UgID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0uYmFzZV9hZGRyICk7CiAJbWFjZW4gPSBDUEhZU0FERFIoaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyKTsKQEAgLTgwNiwyMDAgKzEyNDIsMjYgQEAKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgdGhlIGludGVyZmFjZS4KLSAqCi0gKiBXaGVuIHRoZSBkZXZpY2UgcG93ZXJzIHVwLCB0aGUgY2xvY2tzIGFyZSBkaXNhYmxlZCBhbmQgdGhlCi0gKiBtYWMgaXMgaW4gcmVzZXQgc3RhdGUuICBXaGVuIHRoZSBpbnRlcmZhY2UgaXMgY2xvc2VkLCB3ZQotICogZG8gdGhlIHNhbWUgLS0gcmVzZXQgdGhlIGRldmljZSBhbmQgZGlzYWJsZSB0aGUgY2xvY2tzIHRvCi0gKiBjb25zZXJ2ZSBwb3dlci4gVGh1cywgd2hlbmV2ZXIgYXUxMDAwX2luaXQoKSBpcyBjYWxsZWQsCi0gKiB0aGUgZGV2aWNlIHNob3VsZCBhbHJlYWR5IGJlIGluIHJlc2V0IHN0YXRlLgorICogU2V0dXAgdGhlIGJhc2UgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcworICogYmFzZWQgb24gY3B1IHR5cGUgYW5kIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkIGluIHN5c19waW5mdW5jCisgKiByZWdpc3Rlci4gVGhlIGxhc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgU1lTX1BGX05JMiAoYml0IDQpIGlzIDAuCiAgKi8KLXN0YXRpYyBpbnQgYXUxMDAwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2lkKQogewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXUzMiBjb250cm9sOworCWludCBuaSA9IChpbnQpKChhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKShTWVNfUEZfTkkyKSkgPj4gNCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgaSwgZm91bmRfb25lID0gMDsKIAotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoIiVzOiBhdTEwMDBfaW5pdFxuIiwgZGV2LT5uYW1lKTsKKwludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7CiAKLQkvKiBicmluZyB0aGUgZGV2aWNlIG91dCBvZiByZXNldCAqLwotCWVuYWJsZV9tYWMoZGV2LCAxKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWF1cC0+bWFjLT5jb250cm9sID0gMDsKLQlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOwotCWF1cC0+dHhfdGFpbCA9IGF1cC0+dHhfaGVhZDsKLQlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOwotCi0JYXVwLT5tYWMtPm1hY19hZGRyX2hpZ2ggPSBkZXYtPmRldl9hZGRyWzVdPDw4IHwgZGV2LT5kZXZfYWRkcls0XTsKLQlhdXAtPm1hYy0+bWFjX2FkZHJfbG93ID0gZGV2LT5kZXZfYWRkclszXTw8MjQgfCBkZXYtPmRldl9hZGRyWzJdPDwxNiB8Ci0JCWRldi0+ZGV2X2FkZHJbMV08PDggfCBkZXYtPmRldl9hZGRyWzBdOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykgewotCQlhdXAtPnJ4X2RtYV9yaW5nW2ldLT5idWZmX3N0YXQgfD0gUlhfRE1BX0VOQUJMRTsKKwlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKKwkJZGV2ID0gYXUxMDAwX3Byb2JlKGkpOworCQlpZmxpc3RbaV0uZGV2ID0gZGV2OworCQlpZiAoZGV2KQorCQkJZm91bmRfb25lKys7CiAJfQotCWF1X3N5bmMoKTsKLQotCWNvbnRyb2wgPSBNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRTsKLSNpZm5kZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCi0JY29udHJvbCB8PSBNQUNfQklHX0VORElBTjsKLSNlbmRpZgotCWlmIChhdXAtPnBoeV9kZXYpIHsKLQkJaWYgKGF1cC0+cGh5X2Rldi0+bGluayAmJiAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKQotCQkJY29udHJvbCB8PSBNQUNfRlVMTF9EVVBMRVg7Ci0JCWVsc2UKLQkJCWNvbnRyb2wgfD0gTUFDX0RJU0FCTEVfUlhfT1dOOwotCX0gZWxzZSB7IC8qIFBIWS1sZXNzIG9wLCBhc3N1bWUgZnVsbC1kdXBsZXggKi8KLQkJY29udHJvbCB8PSBNQUNfRlVMTF9EVVBMRVg7Ci0JfQotCi0JYXVwLT5tYWMtPmNvbnRyb2wgPSBjb250cm9sOwotCWF1cC0+bWFjLT52bGFuMV90YWcgPSAweDgxMDA7IC8qIGFjdGl2YXRlIHZsYW4gc3VwcG9ydCAqLwotCWF1X3N5bmMoKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBhdXAtPnBoeV9kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWludCBzdGF0dXNfY2hhbmdlID0gMDsKLQotCUJVR19PTighYXVwLT5waHlfZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX3NwZWVkICE9IHBoeWRldi0+c3BlZWQpKSB7Ci0JCS8vIHNwZWVkIGNoYW5nZWQKLQotCQlzd2l0Y2gocGh5ZGV2LT5zcGVlZCkgewotCQljYXNlIFNQRUVEXzEwOgotCQljYXNlIFNQRUVEXzEwMDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogU3BlZWQgKCVkKSBpcyBub3QgMTAvMTAwID8/P1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlhdXAtPm9sZF9zcGVlZCA9IHBoeWRldi0+c3BlZWQ7Ci0KLQkJc3RhdHVzX2NoYW5nZSA9IDE7Ci0JfQotCi0JaWYgKHBoeWRldi0+bGluayAmJiAoYXVwLT5vbGRfZHVwbGV4ICE9IHBoeWRldi0+ZHVwbGV4KSkgewotCQkvLyBkdXBsZXggbW9kZSBjaGFuZ2VkCi0KLQkJLyogc3dpdGNoaW5nIGR1cGxleCBtb2RlIHJlcXVpcmVzIHRvIGRpc2FibGUgcnggYW5kIHR4ISAqLwotCQloYXJkX3N0b3AoZGV2KTsKLQotCQlpZiAoRFVQTEVYX0ZVTEwgPT0gcGh5ZGV2LT5kdXBsZXgpCi0JCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKLQkJCQkJICAgICB8IE1BQ19GVUxMX0RVUExFWCkKLQkJCQkJICAgICAmIH5NQUNfRElTQUJMRV9SWF9PV04pOwotCQllbHNlCi0JCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKLQkJCQkJICAgICAgJiB+TUFDX0ZVTExfRFVQTEVYKQotCQkJCQkgICAgIHwgTUFDX0RJU0FCTEVfUlhfT1dOKTsKLQkJYXVfc3luY19kZWxheSgxKTsKLQotCQllbmFibGVfcnhfdHgoZGV2KTsKLQkJYXVwLT5vbGRfZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7Ci0KLQkJc3RhdHVzX2NoYW5nZSA9IDE7Ci0JfQotCi0JaWYocGh5ZGV2LT5saW5rICE9IGF1cC0+b2xkX2xpbmspIHsKLQkJLy8gbGluayBzdGF0ZSBjaGFuZ2VkCi0KLQkJaWYgKCFwaHlkZXYtPmxpbmspIHsKLQkJCS8qIGxpbmsgd2VudCBkb3duICovCi0JCQlhdXAtPm9sZF9zcGVlZCA9IDA7Ci0JCQlhdXAtPm9sZF9kdXBsZXggPSAtMTsKLQkJfQotCi0JCWF1cC0+b2xkX2xpbmsgPSBwaHlkZXYtPmxpbms7Ci0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHN0YXR1c19jaGFuZ2UpIHsKLQkJaWYgKHBoeWRldi0+bGluaykKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwICglZC8lcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkLAotCQkJICAgICAgIERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4ID8gIkZ1bGwiIDogIkhhbGYiKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoIiVzOiBvcGVuOiBkZXY9JXBcbiIsIGRldi0+bmFtZSwgZGV2KTsKLQotCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZhdTEwMDBfaW50ZXJydXB0LCAwLAotCQkJCQlkZXYtPm5hbWUsIGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAotCQkJCWRldi0+bmFtZSwgZGV2LT5pcnEpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWlmICgocmV0dmFsID0gYXUxMDAwX2luaXQoZGV2KSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7Ci0JCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWlmIChhdXAtPnBoeV9kZXYpIHsKLQkJLyogY2F1c2UgdGhlIFBIWSBzdGF0ZSBtYWNoaW5lIHRvIHNjaGVkdWxlIGEgbGluayBzdGF0ZSBjaGVjayAqLwotCQlhdXAtPnBoeV9kZXYtPnN0YXRlID0gUEhZX0NIQU5HRUxJTks7Ci0JCXBoeV9zdGFydChhdXAtPnBoeV9kZXYpOwotCX0KLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogb3BlbjogSW5pdGlhbGl6YXRpb24gZG9uZS5cbiIsIGRldi0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoIiVzOiBjbG9zZTogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0KLQlpZiAoYXVwLT5waHlfZGV2KQotCQlwaHlfc3RvcChhdXAtPnBoeV9kZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCi0JcmVzZXRfbWFjX3VubG9ja2VkIChkZXYpOwotCi0JLyogc3RvcCB0aGUgZGV2aWNlICovCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCi0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KKwlpZiAoIWZvdW5kX29uZSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMjIsMjk4ICsxMjg0LDE1IEBACiAJCQlmb3IgKGogPSAwOyBqIDwgTlVNX1RYX0RNQTsgaisrKQogCQkJCWlmIChhdXAtPnR4X2RiX2ludXNlW2pdKQogCQkJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnR4X2RiX2ludXNlW2pdKTsKLSAJCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgotIAkJCQkJICAgICAoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKLSAJCQkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKLSAJCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1BQ19JT1NJWkUpOwotIAkJCXJlbGVhc2VfbWVtX3JlZ2lvbihDUEhZU0FERFIoaWZsaXN0W2ldLm1hY2VuX2FkZHIpLCA0KTsKKwkJCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqCisJCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCisJCQkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTUFDX0lPU0laRSk7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7CiAJCQlmcmVlX25ldGRldihkZXYpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7Ci0KLQlpZiAoc3RhdHVzICYgVFhfRlJBTUVfQUJPUlRFRCkgewotCQlpZiAoIWF1cC0+cGh5X2RldiB8fCAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKSB7Ci0JCQlpZiAoc3RhdHVzICYgKFRYX0pBQl9USU1FT1VUIHwgVFhfVU5ERVJSVU4pKSB7Ci0JCQkJLyogYW55IG90aGVyIHR4IGVycm9ycyBhcmUgb25seSB2YWxpZAotCQkJCSAqIGluIGhhbGYgZHVwbGV4IG1vZGUgKi8KLQkJCQlwcy0+dHhfZXJyb3JzKys7Ci0JCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwcy0+dHhfZXJyb3JzKys7Ci0JCQlwcy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKLQkJCWlmIChzdGF0dXMgJiAoVFhfTk9fQ0FSUklFUiB8IFRYX0xPU1NfQ0FSUklFUikpCi0JCQkJcHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHRvIGFja25vd2xlZGdlCi0gKiB0aGUgVFggRE9ORSBiaXRzLiAgVGhpcyBpcyBhIG11c3QgaWYgdGhlIGlycSBpcyBzZXR1cCBhcwotICogZWRnZSB0cmlnZ2VyZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGF1MTAwMF90eF9hY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7Ci0KLQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOwotCi0Jd2hpbGUgKHB0eGQtPmJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgewotCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOwotCQlwdHhkLT5idWZmX3N0YXQgJj0gflRYX1RfRE9ORTsKLQkJcHR4ZC0+bGVuID0gMDsKLQkJYXVfc3luYygpOwotCi0JCWF1cC0+dHhfdGFpbCA9IChhdXAtPnR4X3RhaWwgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7Ci0JCXB0eGQgPSBhdXAtPnR4X2RtYV9yaW5nW2F1cC0+dHhfdGFpbF07Ci0KLQkJaWYgKGF1cC0+dHhfZnVsbCkgewotCQkJYXVwLT50eF9mdWxsID0gMDsKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJfQotCX0KLX0KLQotCi0vKgotICogQXUxMDAwIHRyYW5zbWl0IHJvdXRpbmUuCi0gKi8KLXN0YXRpYyBpbnQgYXUxMDAwX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwotCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOwotCXUzMiBidWZmX3N0YXQ7Ci0JZGJfZGVzdF90ICpwREI7Ci0JaW50IGk7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCIlczogdHg6IGF1cCAleCBsZW49JWQsIGRhdGE9JXAsIGhlYWQgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLCAodW5zaWduZWQpYXVwLCBza2ItPmxlbiwKLQkJCQlza2ItPmRhdGEsIGF1cC0+dHhfaGVhZCk7Ci0KLQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X2hlYWRdOwotCWJ1ZmZfc3RhdCA9IHB0eGQtPmJ1ZmZfc3RhdDsKLQlpZiAoYnVmZl9zdGF0ICYgVFhfRE1BX0VOQUJMRSkgewotCQkvKiBXZSd2ZSB3cmFwcGVkIGFyb3VuZCBhbmQgdGhlIHRyYW5zbWl0dGVyIGlzIHN0aWxsIGJ1c3kgKi8KLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlhdXAtPnR4X2Z1bGwgPSAxOwotCQlyZXR1cm4gMTsKLQl9Ci0JZWxzZSBpZiAoYnVmZl9zdGF0ICYgVFhfVF9ET05FKSB7Ci0JCXVwZGF0ZV90eF9zdGF0cyhkZXYsIHB0eGQtPnN0YXR1cyk7Ci0JCXB0eGQtPmxlbiA9IDA7Ci0JfQotCi0JaWYgKGF1cC0+dHhfZnVsbCkgewotCQlhdXAtPnR4X2Z1bGwgPSAwOwotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQotCi0JcERCID0gYXVwLT50eF9kYl9pbnVzZVthdXAtPnR4X2hlYWRdOwotCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBwREItPnZhZGRyLCBza2ItPmxlbik7Ci0JaWYgKHNrYi0+bGVuIDwgRVRIX1pMRU4pIHsKLQkJZm9yIChpPXNrYi0+bGVuOyBpPEVUSF9aTEVOOyBpKyspIHsKLQkJCSgoY2hhciAqKXBEQi0+dmFkZHIpW2ldID0gMDsKLQkJfQotCQlwdHhkLT5sZW4gPSBFVEhfWkxFTjsKLQl9Ci0JZWxzZQotCQlwdHhkLT5sZW4gPSBza2ItPmxlbjsKLQotCXBzLT50eF9wYWNrZXRzKys7Ci0JcHMtPnR4X2J5dGVzICs9IHB0eGQtPmxlbjsKLQotCXB0eGQtPmJ1ZmZfc3RhdCA9IHBEQi0+ZG1hX2FkZHIgfCBUWF9ETUFfRU5BQkxFOwotCWF1X3N5bmMoKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JYXVwLT50eF9oZWFkID0gKGF1cC0+dHhfaGVhZCArIDEpICYgKE5VTV9UWF9ETUEgLSAxKTsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKLQotCXBzLT5yeF9wYWNrZXRzKys7Ci0JaWYgKHN0YXR1cyAmIFJYX01DQVNUX0ZSQU1FKQotCQlwcy0+bXVsdGljYXN0Kys7Ci0KLQlpZiAoc3RhdHVzICYgUlhfRVJST1IpIHsKLQkJcHMtPnJ4X2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQotCQkJcHMtPnJ4X21pc3NlZF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIChSWF9PVkVSTEVOIHwgUlhfT1ZFUkxFTiB8IFJYX0xFTl9FUlJPUikpCi0JCQlwcy0+cnhfbGVuZ3RoX2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgUlhfQ1JDX0VSUk9SKQotCQkJcHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCi0JCQlwcy0+Y29sbGlzaW9ucysrOwotCX0KLQllbHNlCi0JCXBzLT5yeF9ieXRlcyArPSBzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSzsKLQotfQotCi0vKgotICogQXUxMDAwIHJlY2VpdmUgcm91dGluZS4KLSAqLwotc3RhdGljIGludCBhdTEwMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl2b2xhdGlsZSByeF9kbWFfdCAqcHJ4ZDsKLQl1MzIgYnVmZl9zdGF0LCBzdGF0dXM7Ci0JZGJfZGVzdF90ICpwREI7Ci0JdTMyCWZybWxlbjsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA1KQotCQlwcmludGsoIiVzOiBhdTEwMDBfcnggaGVhZCAlZFxuIiwgZGV2LT5uYW1lLCBhdXAtPnJ4X2hlYWQpOwotCi0JcHJ4ZCA9IGF1cC0+cnhfZG1hX3JpbmdbYXVwLT5yeF9oZWFkXTsKLQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7Ci0Jd2hpbGUgKGJ1ZmZfc3RhdCAmIFJYX1RfRE9ORSkgIHsKLQkJc3RhdHVzID0gcHJ4ZC0+c3RhdHVzOwotCQlwREIgPSBhdXAtPnJ4X2RiX2ludXNlW2F1cC0+cnhfaGVhZF07Ci0JCXVwZGF0ZV9yeF9zdGF0cyhkZXYsIHN0YXR1cyk7Ci0JCWlmICghKHN0YXR1cyAmIFJYX0VSUk9SKSkgIHsKLQotCQkJLyogZ29vZCBmcmFtZSAqLwotCQkJZnJtbGVuID0gKHN0YXR1cyAmIFJYX0ZSQU1FX0xFTl9NQVNLKTsKLQkJCWZybWxlbiAtPSA0OyAvKiBSZW1vdmUgRkNTICovCi0JCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGZybWxlbiArIDIpOwotCQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIElQIGhlYWRlciBhbGlnbiAqLwotCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLAotCQkJCSh1bnNpZ25lZCBjaGFyICopcERCLT52YWRkciwgZnJtbGVuKTsKLQkJCXNrYl9wdXQoc2tiLCBmcm1sZW4pOwotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJCW5ldGlmX3J4KHNrYik7CS8qIHBhc3MgdGhlIHBhY2tldCB0byB1cHBlciBsYXllcnMgKi8KLQkJfQotCQllbHNlIHsKLQkJCWlmIChhdTEwMDBfZGVidWcgPiA0KSB7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKLQkJCQkJcHJpbnRrKCJyeCBtaXNzXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfV0RPR19USU1FUikKLQkJCQkJcHJpbnRrKCJyeCB3ZG9nXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfUlVOVCkKLQkJCQkJcHJpbnRrKCJyeCBydW50XG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfT1ZFUkxFTikKLQkJCQkJcHJpbnRrKCJyeCBvdmVybGVuXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfQ09MTCkKLQkJCQkJcHJpbnRrKCJyeCBjb2xsXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTUlJX0VSUk9SKQotCQkJCQlwcmludGsoInJ4IG1paSBlcnJvclxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKLQkJCQkJcHJpbnRrKCJyeCBjcmMgZXJyb3JcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9MRU5fRVJST1IpCi0JCQkJCXByaW50aygicnggbGVuIGVycm9yXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfVV9DTlRSTF9GUkFNRSkKLQkJCQkJcHJpbnRrKCJyeCB1IGNvbnRyb2wgZnJhbWVcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCi0JCQkJCXByaW50aygicnggbWlzc1xuIik7Ci0JCQl9Ci0JCX0KLQkJcHJ4ZC0+YnVmZl9zdGF0ID0gKHUzMikocERCLT5kbWFfYWRkciB8IFJYX0RNQV9FTkFCTEUpOwotCQlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9oZWFkICsgMSkgJiAoTlVNX1JYX0RNQSAtIDEpOwotCQlhdV9zeW5jKCk7Ci0KLQkJLyogbmV4dCBkZXNjcmlwdG9yICovCi0JCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07Ci0JCWJ1ZmZfc3RhdCA9IHByeGQtPmJ1ZmZfc3RhdDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIEF1MTAwMCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXUxMDAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQotCS8qIEhhbmRsZSBSWCBpbnRlcnJ1cHRzIGZpcnN0IHRvIG1pbmltaXplIGNoYW5jZSBvZiBvdmVycnVuICovCi0KLQlhdTEwMDBfcngoZGV2KTsKLQlhdTEwMDBfdHhfYWNrKGRldik7Ci0JcmV0dXJuIElSUV9SRVRWQUwoMSk7Ci19Ci0KLQotLyoKLSAqIFRoZSBUeCByaW5nIGhhcyBiZWVuIGZ1bGwgbG9uZ2VyIHRoYW4gdGhlIHdhdGNoZG9nIHRpbWVvdXQKLSAqIHZhbHVlLiBUaGUgdHJhbnNtaXR0ZXIgbXVzdCBiZSBodW5nPwotICovCi1zdGF0aWMgdm9pZCBhdTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByaW50ayhLRVJOX0VSUiAiJXM6IGF1MTAwMF90eF90aW1lb3V0OiBkZXY9JXBcbiIsIGRldi0+bmFtZSwgZGV2KTsKLQlyZXNldF9tYWMoZGV2KTsKLQlhdTEwMDBfaW5pdChkZXYpOwotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogc2V0X3J4X21vZGU6IGZsYWdzPSV4XG4iLCBkZXYtPm5hbWUsIGRldi0+ZmxhZ3MpOwotCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KLQkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX1BST01JU0NVT1VTOwotCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICB8fAotCQkJICAgZGV2LT5tY19jb3VudCA+IE1VTFRJQ0FTVF9GSUxURVJfTElNSVQpIHsKLQkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX1BBU1NfQUxMX01VTFRJOwotCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX1BST01JU0NVT1VTOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUGFzcyBhbGwgbXVsdGljYXN0XG4iLCBkZXYtPm5hbWUpOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJdTMyIG1jX2ZpbHRlclsyXTsJLyogTXVsdGljYXN0IGhhc2ggZmlsdGVyICovCi0KLQkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCQkgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQkJCXNldF9iaXQoZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKT4+MjYsCi0JCQkJCShsb25nICopbWNfZmlsdGVyKTsKLQkJfQotCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9oaWdoID0gbWNfZmlsdGVyWzFdOwotCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9sb3cgPSBtY19maWx0ZXJbMF07Ci0JCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7Ci0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19IQVNIX01PREU7Ci0JfQotfQotCi1zdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSByZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXVwLT5waHlfZGV2KSByZXR1cm4gLUVJTlZBTDsgLy8gUEhZIG5vdCBjb250cm9sbGFibGUKLQotCXJldHVybiBwaHlfbWlpX2lvY3RsKGF1cC0+cGh5X2RldiwgaWZfbWlpKHJxKSwgY21kKTsKLX0KLQogbW9kdWxlX2luaXQoYXUxMDAwX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGF1MTAwMF9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMgYi9kcml2ZXJzL25ldC9heDg4Nzk2LmMKaW5kZXggYTRlYjZjNC4uNjJkOWM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwpAQCAtOTMsNiArOTMsNyBAQAogCiAJdW5zaWduZWQgY2hhcgkJIHJ1bm5pbmc7CiAJdW5zaWduZWQgY2hhcgkJIHJlc3VtZV9vcGVuOworCXVuc2lnbmVkIGludAkJIGlycWZsYWdzOwogCiAJdTMyCQkJIHJlZ19vZmZzZXRzWzB4MjBdOwogfTsKQEAgLTQ3NCw3ICs0NzUsOCBAQAogCiAJZGV2X2RiZygmYXgtPmRldi0+ZGV2LCAiJXM6IG9wZW5cbiIsIGRldi0+bmFtZSk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYXhfZWlfaW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldik7CisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGF4X2VpX2ludGVycnVwdCwgYXgtPmlycWZsYWdzLAorCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNzMxLDEyICs3MzMsMTkgQEAKIAkvKiBsb2FkIHRoZSBtYWMtYWRkcmVzcyBmcm9tIHRoZSBkZXZpY2UgaWYgdGhpcyBpcyB0aGUKIAkgKiBmaXJzdCB0aW1lIHdlJ3ZlIGluaXRpYWxpc2VkICovCiAKLQlpZiAoZmlyc3RfaW5pdCAmJiBheC0+cGxhdC0+ZmxhZ3MgJiBBWEZMR19NQUNfRlJPTURFVikgewotCQllaV9vdXRiKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEgKyBFODM5MF9TVE9QLAotCQkJZWlfbG9jYWwtPm1lbSArIEU4MzkwX0NNRCk7IC8qIDB4NjEgKi8KKwlpZiAoZmlyc3RfaW5pdCkgeworCQlpZiAoYXgtPnBsYXQtPmZsYWdzICYgQVhGTEdfTUFDX0ZST01ERVYpIHsKKwkJCWVpX291dGIoRTgzOTBfTk9ETUEgKyBFODM5MF9QQUdFMSArIEU4MzkwX1NUT1AsCisJCQkJZWlfbG9jYWwtPm1lbSArIEU4MzkwX0NNRCk7IC8qIDB4NjEgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBFVEhFUl9BRERSX0xFTjsgaSsrKQorCQkJCWRldi0+ZGV2X2FkZHJbaV0gPQorCQkJCQllaV9pbmIoaW9hZGRyICsgRU4xX1BIWVNfU0hJRlQoaSkpOworCQl9CiAKLQkJZm9yIChpID0gMCA7IGkgPCBFVEhFUl9BRERSX0xFTiA7IGkrKykKLQkJCWRldi0+ZGV2X2FkZHJbaV0gPSBlaV9pbmIoaW9hZGRyICsgRU4xX1BIWVNfU0hJRlQoaSkpOworCQlpZiAoKGF4LT5wbGF0LT5mbGFncyAmIEFYRkxHX01BQ19GUk9NUExBVEZPUk0pICYmCisJCSAgICAgYXgtPnBsYXQtPm1hY19hZGRyKQorCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGF4LT5wbGF0LT5tYWNfYWRkciwKKwkJCQlFVEhFUl9BRERSX0xFTik7CiAJfQogCiAJYXhfcmVzZXRfODM5MChkZXYpOwpAQCAtODI5LDcgKzgzOCw3IEBACiAJc3RydWN0IGF4X2RldmljZSAgKmF4OwogCXN0cnVjdCByZXNvdXJjZSAgICpyZXM7CiAJc2l6ZV90IHNpemU7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWRldiA9IGF4X19hbGxvY19laV9uZXRkZXYoc2l6ZW9mKHN0cnVjdCBheF9kZXZpY2UpKTsKIAlpZiAoZGV2ID09IE5VTEwpCkBAIC04NTAsMTIgKzg1OSwxNCBAQAogCiAJLyogZmluZCB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzICovCiAKLQlyZXQgID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAocmV0IDwgMCkgeworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSBzcGVjaWZpZWRcbiIpOwogCQlnb3RvIGV4aXRfbWVtOwogCX0KLQlkZXYtPmlycSA9IHJldDsKKworCWRldi0+aXJxID0gcmVzLT5zdGFydDsKKwlheC0+aXJxZmxhZ3MgPSByZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCBkYzVmMDUxLi41Yzg0NTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtODc0LDcgKzg3NCw3IEBACiAJfQogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKIAl9CiAKQEAgLTkwNiwxMyArOTA2LDEzIEBACiAJCQlnb3RvIGlycV9hY2s7CiAJCX0KIAotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYnAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmJwLT5uYXBpKSkgewogCQkJLyogTk9URTogVGhlc2Ugd3JpdGVzIGFyZSBwb3N0ZWQgYnkgdGhlIHJlYWRiYWNrIG9mCiAJCQkgKiAgICAgICB0aGUgSVNUQVQgcmVnaXN0ZXIgYmVsb3cuCiAJCQkgKi8KIAkJCWJwLT5pc3RhdCA9IGlzdGF0OwogCQkJX19iNDRfZGlzYWJsZV9pbnRzKGJwKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmYnAtPm5hcGkpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEVycm9yLCBwb2xsIGFscmVhZHkgc2NoZWR1bGVkXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CkBAIC05NzMsNyArOTczLDcgQEAKIAkJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBtYXBwaW5nLCBsZW4sCiAJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAKLQkJYm91bmNlX3NrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKKwkJYm91bmNlX3NrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIGxlbiwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAoIWJvdW5jZV9za2IpCiAJCQlnb3RvIGVycl9vdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCmluZGV4IGYzMjdiZTUuLmM0OWRkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaApAQCAtMTAwLDkgKzEwMCw5IEBACiAJdTMyIGJlX3R4X3dyYnM7CQkvKiBudW1iZXIgb2YgdHggV1JCcyB1c2VkICovCiAJdTMyIGJlX3R4X2V2ZW50czsJLyogbnVtYmVyIG9mIHR4IGNvbXBsZXRpb24gZXZlbnRzICAqLwogCXUzMiBiZV90eF9jb21wbDsJLyogbnVtYmVyIG9mIHR4IGNvbXBsZXRpb24gZW50cmllcyBwcm9jZXNzZWQgKi8KLQl1NjQgYmVfdHhfamlmZmllczsKLQl1bG9uZyBiZV90eF9ieXRlczsKLQl1bG9uZyBiZV90eF9ieXRlc19wcmV2OworCXVsb25nIGJlX3R4X2ppZmZpZXM7CisJdTY0IGJlX3R4X2J5dGVzOworCXU2NCBiZV90eF9ieXRlc19wcmV2OwogCXUzMiBiZV90eF9yYXRlOwogCiAJdTMyIGNhY2hlX2JhcnJpZXJbMTZdOwpAQCAtMTEzLDkgKzExMyw5IEBACiAJdTMyIGJlX3J4X2NvbXBsOwkvKiBudW1iZXIgb2YgcnggY29tcGxldGlvbiBlbnRyaWVzIHByb2Nlc3NlZCAqLwogCXUzMiBiZV9scm9faGdyYW1fZGF0YVs4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBkYXRhIHBhY2tldHMgKi8KIAl1MzIgYmVfbHJvX2hncmFtX2Fja1s4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBBQ0tzICovCi0JdTY0IGJlX3J4X2ppZmZpZXM7Ci0JdWxvbmcgYmVfcnhfYnl0ZXM7Ci0JdWxvbmcgYmVfcnhfYnl0ZXNfcHJldjsKKwl1bG9uZyBiZV9yeF9qaWZmaWVzOworCXU2NCBiZV9yeF9ieXRlczsKKwl1NjQgYmVfcnhfYnl0ZXNfcHJldjsKIAl1MzIgYmVfcnhfcmF0ZTsKIAkvKiBudW1iZXIgb2Ygbm9uIGV0aGVyIHR5cGUgSUkgZnJhbWVzIGRyb3BwZWQgd2hlcmUKIAkgKiBmcmFtZSBsZW4gPiBsZW5ndGggZmllbGQgb2YgTWFjIEhkciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDBlY2FmZmIuLmY5MDFmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTI0NSwxOSArMjQ1LDI5IEBACiAvKiBVcGRhdGUgdGhlIEVRIGRlbGF5IG4gQkUgYmFzZWQgb24gdGhlIFJYIGZyYWdzIGNvbnN1bWVkIC8gc2VjICovCiBzdGF0aWMgdm9pZCBiZV9yeF9lcWRfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBlcWQ7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOwogCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisJdTMyIGVxZDsKKworCWlmICghcnhfZXEtPmVuYWJsZV9haWMpCisJCXJldHVybjsKKworCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPnJ4X2Zwc19qaWZmaWVzKSkgeworCQlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CiAKIAkvKiBVcGRhdGUgb25jZSBhIHNlY29uZCAqLwotCWlmICgoKGppZmZpZXMgLSBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpIDwgSFopIHx8IHJ4X2VxLT5lbmFibGVfYWljID09IDApCisJaWYgKChub3cgLSBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpIDwgSFopCiAJCXJldHVybjsKIAogCXN0YXRzLT5iZV9yeF9mcHMgPSAoc3RhdHMtPmJlX3J4X2ZyYWdzIC0gc3RhdHMtPmJlX3ByZXZfcnhfZnJhZ3MpIC8KLQkJCSgoamlmZmllcyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgLyBIWik7CisJCQkoKG5vdyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgLyBIWik7CiAKLQlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBqaWZmaWVzOworCXN0YXRzLT5yeF9mcHNfamlmZmllcyA9IG5vdzsKIAlzdGF0cy0+YmVfcHJldl9yeF9mcmFncyA9IHN0YXRzLT5iZV9yeF9mcmFnczsKIAllcWQgPSBzdGF0cy0+YmVfcnhfZnBzIC8gMTEwMDAwOwogCWVxZCA9IGVxZCA8PCAzOwpAQCAtMjgwLDI2ICsyOTAsMzggQEAKIAlyZXR1cm4gJmFkYXB0ZXItPnN0YXRzLm5ldF9zdGF0czsKIH0KIAorc3RhdGljIHZvaWQgYmVfdHhfcmF0ZV91cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKTsKKwl1bG9uZyBub3cgPSBqaWZmaWVzOworCisJLyogV3JhcHBlZCBhcm91bmQ/ICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPmJlX3R4X2ppZmZpZXMpKSB7CisJCXN0YXRzLT5iZV90eF9qaWZmaWVzID0gbm93OworCQlyZXR1cm47CisJfQorCisJLyogVXBkYXRlIHR4IHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLworCWlmICgobm93IC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpID4gMiAqIEhaKSB7CisJCXUzMiByOworCQlyID0gKHN0YXRzLT5iZV90eF9ieXRlcyAtIHN0YXRzLT5iZV90eF9ieXRlc19wcmV2KSAvCisJCQkoKG5vdyAtIHN0YXRzLT5iZV90eF9qaWZmaWVzKSAvIEhaKTsKKwkJciA9IHIgLyAxMDAwMDAwOwkJCS8qIE0gYnl0ZXMvcyAqLworCQlzdGF0cy0+YmVfdHhfcmF0ZSA9IHIgKiA4OwkvKiBNIGJpdHMvcyAqLworCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IG5vdzsKKwkJc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfdHhfYnl0ZXM7CisJfQorfQorCiBzdGF0aWMgdm9pZCBiZV90eF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgYm9vbCBzdG9wcGVkKQogewotCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CiAJc3RhdHMtPmJlX3R4X3JlcXMrKzsKIAlzdGF0cy0+YmVfdHhfd3JicyArPSB3cmJfY250OwogCXN0YXRzLT5iZV90eF9ieXRlcyArPSBjb3BpZWQ7CiAJaWYgKHN0b3BwZWQpCiAJCXN0YXRzLT5iZV90eF9zdG9wcysrOwotCi0JLyogVXBkYXRlIHR4IHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLwotCWlmICgoamlmZmllcyAtIHN0YXRzLT5iZV90eF9qaWZmaWVzKSA+IDIgKiBIWikgewotCQl1MzIgcjsKLQkJciA9IChzdGF0cy0+YmVfdHhfYnl0ZXMgLSBzdGF0cy0+YmVfdHhfYnl0ZXNfcHJldikgLwotCQkJKCh1MzIpIChqaWZmaWVzIC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpIC8gSFopOwotCQlyID0gKHIgLyAxMDAwMDAwKTsJCQkvKiBNIGJ5dGVzL3MgKi8KLQkJc3RhdHMtPmJlX3R4X3JhdGUgPSAociAqIDgpOwkvKiBNIGJpdHMvcyAqLwotCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IGppZmZpZXM7Ci0JCXN0YXRzLT5iZV90eF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3R4X2J5dGVzOwotCX0KIH0KIAogLyogRGV0ZXJtaW5lIG51bWJlciBvZiBXUkIgZW50cmllcyBuZWVkZWQgdG8geG1pdCBkYXRhIGluIGFuIHNrYiAqLwpAQCAtNTczLDI2ICs1OTUsMzggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJlX3J4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgcGt0c2l6ZSwKLQkJCXUxNiBudW1mcmFncykKK3N0YXRpYyB2b2lkIGJlX3J4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CisJdWxvbmcgbm93ID0gamlmZmllczsKIAl1MzIgcmF0ZTsKIAorCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPmJlX3J4X2ppZmZpZXMpKSB7CisJCXN0YXRzLT5iZV9yeF9qaWZmaWVzID0gbm93OworCQlyZXR1cm47CisJfQorCisJLyogVXBkYXRlIHRoZSByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KKwlpZiAoKG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSA8IDIgKiBIWikKKwkJcmV0dXJuOworCisJcmF0ZSA9IChzdGF0cy0+YmVfcnhfYnl0ZXMgLSBzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldikgLworCQkoKG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSAvIEhaKTsKKwlyYXRlID0gcmF0ZSAvIDEwMDAwMDA7CS8qIE1CL1NlYyAqLworCXN0YXRzLT5iZV9yeF9yYXRlID0gcmF0ZSAqIDg7IAkvKiBNZWdhIEJpdHMvU2VjICovCisJc3RhdHMtPmJlX3J4X2ppZmZpZXMgPSBub3c7CisJc3RhdHMtPmJlX3J4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfcnhfYnl0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3J4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJdTMyIHBrdHNpemUsIHUxNiBudW1mcmFncykKK3sKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpOworCiAJc3RhdHMtPmJlX3J4X2NvbXBsKys7CiAJc3RhdHMtPmJlX3J4X2ZyYWdzICs9IG51bWZyYWdzOwogCXN0YXRzLT5iZV9yeF9ieXRlcyArPSBwa3RzaXplOwotCi0JLyogVXBkYXRlIHRoZSByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KLQlpZiAoKGppZmZpZXMgLSBzdGF0cy0+YmVfcnhfamlmZmllcykgPCAyICogSFopCi0JCXJldHVybjsKLQotCXJhdGUgPSAoc3RhdHMtPmJlX3J4X2J5dGVzIC0gc3RhdHMtPmJlX3J4X2J5dGVzX3ByZXYpIC8KLQkJKCh1MzIpIChqaWZmaWVzIC0gc3RhdHMtPmJlX3J4X2ppZmZpZXMpIC8gSFopOwotCXJhdGUgPSAocmF0ZSAvIDEwMDAwMDApOwkvKiBNQi9TZWMgKi8KLQlzdGF0cy0+YmVfcnhfcmF0ZSA9IChyYXRlICogOCk7IAkvKiBNZWdhIEJpdHMvU2VjICovCi0Jc3RhdHMtPmJlX3J4X2ppZmZpZXMgPSBqaWZmaWVzOwotCXN0YXRzLT5iZV9yeF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3J4X2J5dGVzOwogfQogCiBzdGF0aWMgc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqCkBAIC03MDAsNyArNzM0LDcgQEAKIAkJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKIAl9CiAKLQliZV9yeF9yYXRlX3VwZGF0ZShhZGFwdGVyLCBwa3RzaXplLCBudW1fcmN2ZCk7CisJYmVfcnhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHBrdHNpemUsIG51bV9yY3ZkKTsKIAlyZXR1cm47CiB9CiAKQEAgLTc5OSw3ICs4MzMsNyBAQAogCQkJdmlkLCBOVUxMLCAwKTsKIAl9CiAKLQliZV9yeF9yYXRlX3VwZGF0ZShhZGFwdGVyLCBwa3Rfc2l6ZSwgbnVtX3JjdmQpOworCWJlX3J4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCBwa3Rfc2l6ZSwgbnVtX3JjdmQpOwogCXJldHVybjsKIH0KIApAQCAtODQxLDcgKzg3NSw2IEBACiAJdTY0IHBhZ2VfZG1hYWRkciA9IDAsIGZyYWdfZG1hYWRkcjsKIAl1MzIgcG9zdGVkLCBwYWdlX29mZnNldCA9IDA7CiAKLQogCXBhZ2VfaW5mbyA9ICZwYWdlX2luZm9fdGJsW3J4cS0+aGVhZF07CiAJZm9yIChwb3N0ZWQgPSAwOyBwb3N0ZWQgPCBNQVhfUlhfUE9TVCAmJiAhcGFnZV9pbmZvLT5wYWdlOyBwb3N0ZWQrKykgewogCQlpZiAoIXBhZ2VwKSB7CkBAIC0xMzA1LDYgKzEzMzgsOSBAQAogCS8qIFNldCBFUSBkZWxheSAqLwogCWJlX3J4X2VxZF91cGRhdGUoYWRhcHRlcik7CiAKKwliZV90eF9yYXRlX3VwZGF0ZShhZGFwdGVyKTsKKwliZV9yeF9yYXRlX3VwZGF0ZShhZGFwdGVyKTsKKwogCWlmIChhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQpIHsKIAkJYWRhcHRlci0+cnhfcG9zdF9zdGFydmVkID0gZmFsc2U7CiAJCWJlX3Bvc3RfcnhfZnJhZ3MoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZmluX21hYy5jIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwppbmRleCA3OGUzMWFhLi45YWZlODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZmluX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKQEAgLTQxNSwxMSArNDE1LDExIEBACiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfUk1JSSkKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmJmaW5fbWFjX2FkanVzdF9saW5rLCAwLAotCQkJUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgJmJmaW5fbWFjX2FkanVzdF9saW5rLAorCQkJMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOwogI2Vsc2UKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmJmaW5fbWFjX2FkanVzdF9saW5rLCAwLAotCQkJUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKICNlbmRpZgogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CkBAIC00NDcsNyArNDQ3LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKIAkgICAgICAgIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQsIG1kY19jbGs9JWRIeihtZGNfZGl2PSVkKSIKIAkgICAgICAgIkBzY2xrPSVkTUh6KVxuIiwKLQkgICAgICAgRFJWX05BTUUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxLAorCSAgICAgICBEUlZfTkFNRSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxLAogCSAgICAgICBNRENfQ0xLLCBtZGNfZGl2LCBzY2xrLzEwMDAwMDApOwogCiAJcmV0dXJuIDA7CkBAIC00ODgsNyArNDg4LDcgQEAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CiAJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKIAlzdHJjcHkoaW5mby0+ZndfdmVyc2lvbiwgIk4vQSIpOwotCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZkZXYtPmRldikpOwogfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJmaW5fbWFjX2V0aHRvb2xfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm1hYy5jIGIvZHJpdmVycy9uZXQvYm1hYy5jCmluZGV4IDhhNTQ2YTMuLjQ0ZDAxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JtYWMuYworKysgYi9kcml2ZXJzL25ldC9ibWFjLmMKQEAgLTEwNjIsNyArMTA2Miw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgYm1hY19taXNjX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwotCXN0cnVjdCBibWFjX2RhdGEgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gYm1yZWFkKGRldiwgU1RBVFVTKTsKIAlpZiAobWlzY2ludGNvdW50KysgPCAxMCkgewogCQlYWERFQlVHKCgiYm1hY19taXNjX2ludHJcbiIpKTsKQEAgLTEyNDAsNyArMTIzOSw3IEBACiB7CiAJc3RydWN0IGJtYWNfZGF0YSAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cmNweShpbmZvLT5kcml2ZXIsICJibWFjIik7Ci0Jc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBicC0+bWRldi0+b2ZkZXYuZGV2LmJ1c19pZCk7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSgmYnAtPm1kZXYtPm9mZGV2LmRldikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJtYWNfZXRodG9vbF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNmI2NTMwZi4uYWQ0NDZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtMTQ5Nyw2ICsxNDk3LDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9yZW1vdGVfcGh5KHN0cnVjdCBibngyICpicCwgdTggcG9ydCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgc3BlZWRfYXJnID0gMCwgcGF1c2VfYWR2OwogCkBAIC0xNTU0LDYgKzE1NTYsOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX3NlcmRlc19waHkoc3RydWN0IGJueDIgKmJwLCB1OCBwb3J0KQorX19yZWxlYXNlcygmYnAtPnBoeV9sb2NrKQorX19hY3F1aXJlcygmYnAtPnBoeV9sb2NrKQogewogCXUzMiBhZHYsIGJtY3I7CiAJdTMyIG5ld19hZHYgPSAwOwpAQCAtMTg2Niw2ICsxODcwLDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9jb3BwZXJfcGh5KHN0cnVjdCBibngyICpicCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgYm1jcjsKIAl1MzIgbmV3X2JtY3I7CkBAIC0xOTYzLDYgKzE5NjksOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX3BoeShzdHJ1Y3QgYm54MiAqYnAsIHU4IHBvcnQpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJaWYgKGJwLT5sb29wYmFjayA9PSBNQUNfTE9PUEJBQ0spCiAJCXJldHVybiAwOwpAQCAtMjE3Niw2ICsyMTg0LDggQEAKIAogc3RhdGljIGludAogYm54Ml9pbml0X3BoeShzdHJ1Y3QgYm54MiAqYnAsIGludCByZXNldF9waHkpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJdTMyIHZhbDsKIAlpbnQgcmMgPSAwOwpAQCAtMzAwNSw2ICszMDE1LDggQEAKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQl9CiAKKwkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGJuYXBpIC0gJmJwLT5ibngyX25hcGlbMF0pOworCiAjaWZkZWYgQkNNX1ZMQU4KIAkJaWYgKGh3X3ZsYW4pCiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBicC0+dmxncnAsIHZ0YWcpOwpAQCAtMzA2MSw3ICszMDczLDcgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzA3OCw3ICszMDkwLDcgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzExNCw5ICszMTI2LDkgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZibmFwaS0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZibmFwaS0+bmFwaSkpIHsKIAkJYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19pZHg7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMzIyNiw3ICszMjM4LDcgQEAKIAkJcm1iKCk7CiAJCWlmIChsaWtlbHkoIWJueDJfaGFzX2Zhc3Rfd29yayhibmFwaSkpKSB7CiAKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQsIGJuYXBpLT5pbnRfbnVtIHwKIAkJCSAgICAgICBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9JTkRFWF9WQUxJRCB8CiAJCQkgICAgICAgYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCk7CkBAIC0zMjU5LDcgKzMyNzEsNyBAQAogCiAJCXJtYigpOwogCQlpZiAobGlrZWx5KCFibngyX2hhc193b3JrKGJuYXBpKSkpIHsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCWlmIChsaWtlbHkoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSV9PUl9NU0lYKSkgewogCQkJCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQsCiAJCQkJICAgICAgIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOREVYX1ZBTElEIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC5oCmluZGV4IDNjZjJiOTIuLmEzMjliZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnguaApAQCAtMjUsNiArMjUsMTYgQEAKICNlbmRpZgogCiAKKyNkZWZpbmUgQk5YMlhfTVVMVElfUVVFVUUKKworI2RlZmluZSBCTlgyWF9ORVdfTkFQSQorCisKKyNpbmNsdWRlICJibngyeF9yZWcuaCIKKyNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCisjaW5jbHVkZSAiYm54MnhfaHNpLmgiCisjaW5jbHVkZSAiYm54MnhfbGluay5oIgorCiAvKiBlcnJvci9kZWJ1ZyBwcmludHMgKi8KIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyeCIKQEAgLTkyLDEyICsxMDIsMTAgQEAKIAogI2RlZmluZSBSRUdfUkQoYnAsIG9mZnNldCkJCXJlYWRsKFJFR19BRERSKGJwLCBvZmZzZXQpKQogI2RlZmluZSBSRUdfUkQ4KGJwLCBvZmZzZXQpCQlyZWFkYihSRUdfQUREUihicCwgb2Zmc2V0KSkKLSNkZWZpbmUgUkVHX1JENjQoYnAsIG9mZnNldCkJCXJlYWRxKFJFR19BRERSKGJwLCBvZmZzZXQpKQogCiAjZGVmaW5lIFJFR19XUihicCwgb2Zmc2V0LCB2YWwpCQl3cml0ZWwoKHUzMil2YWwsIFJFR19BRERSKGJwLCBvZmZzZXQpKQogI2RlZmluZSBSRUdfV1I4KGJwLCBvZmZzZXQsIHZhbCkJd3JpdGViKCh1OCl2YWwsIFJFR19BRERSKGJwLCBvZmZzZXQpKQogI2RlZmluZSBSRUdfV1IxNihicCwgb2Zmc2V0LCB2YWwpCXdyaXRldygodTE2KXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCi0jZGVmaW5lIFJFR19XUjMyKGJwLCBvZmZzZXQsIHZhbCkJUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCkKIAogI2RlZmluZSBSRUdfUkRfSU5EKGJwLCBvZmZzZXQpCQlibngyeF9yZWdfcmRfaW5kKGJwLCBvZmZzZXQpCiAjZGVmaW5lIFJFR19XUl9JTkQoYnAsIG9mZnNldCwgdmFsKQlibngyeF9yZWdfd3JfaW5kKGJwLCBvZmZzZXQsIHZhbCkKQEAgLTE1NCw4ICsxNjIsNiBAQAogI2RlZmluZSBTR0VfUEFHRV9TSElGVAkJCVBBR0VfU0hJRlQKICNkZWZpbmUgU0dFX1BBR0VfQUxJR04oYWRkcikJCVBBR0VfQUxJR04oKHR5cGVvZihQQUdFX1NJWkUpKWFkZHIpCiAKLSNkZWZpbmUgQkNNX1JYX0VUSF9QQVlMT0FEX0FMSUdOCTY0Ci0KIC8qIFNHRSByaW5nIHJlbGF0ZWQgbWFjcm9zICovCiAjZGVmaW5lIE5VTV9SWF9TR0VfUEFHRVMJCTIKICNkZWZpbmUgUlhfU0dFX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9yeF9zZ2UpKQpAQCAtMTg3LDYgKzE5Myw0MyBAQAogI2RlZmluZSBORVhUX1NHRV9NQVNLX0VMRU0oZWwpCQkoKChlbCkgKyAxKSAmIFJYX1NHRV9NQVNLX0xFTl9NQVNLKQogCiAKK3N0cnVjdCBibngyeF9ldGhfcV9zdGF0cyB7CisJdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKwl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIHZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvOworCisJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOworCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKKworCXUzMiBkcml2ZXJfeG9mZjsKKwl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OworCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOworCXUzMiBod19jc3VtX2VycjsKK307CisKKyNkZWZpbmUgQk5YMlhfTlVNX1FfU1RBVFMJCTExCisjZGVmaW5lIFFfU1RBVFNfT0ZGU0VUMzIoc3RhdF9uYW1lKSBcCisJCQkob2Zmc2V0b2Yoc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKKwogc3RydWN0IGJueDJ4X2Zhc3RwYXRoIHsKIAogCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOwpAQCAtMjI4LDIwICsyNzEsMTUgQEAKIAl1OAkJCWluZGV4OwkvKiBudW1iZXIgaW4gZnAgYXJyYXkgKi8KIAl1OAkJCWNsX2lkOwkvKiBldGggY2xpZW50IGlkICovCiAJdTgJCQlzYl9pZDsJLyogc3RhdHVzIGJsb2NrIG51bWJlciBpbiBIVyAqLwotI2RlZmluZSBGUF9JRFgoZnApCQkJKGZwLT5pbmRleCkKLSNkZWZpbmUgRlBfQ0xfSUQoZnApCQkJKGZwLT5jbF9pZCkKLSNkZWZpbmUgQlBfQ0xfSUQoYnApCQkJKGJwLT5mcFswXS5jbF9pZCkKLSNkZWZpbmUgRlBfU0JfSUQoZnApCQkJKGZwLT5zYl9pZCkKLSNkZWZpbmUgQ05JQ19TQl9JRAkJCTAKIAogCXUxNgkJCXR4X3BrdF9wcm9kOwogCXUxNgkJCXR4X3BrdF9jb25zOwogCXUxNgkJCXR4X2JkX3Byb2Q7CiAJdTE2CQkJdHhfYmRfY29uczsKLQl1MTYJCQkqdHhfY29uc19zYjsKKwlfX2xlMTYJCQkqdHhfY29uc19zYjsKIAotCXUxNgkJCWZwX2NfaWR4OwotCXUxNgkJCWZwX3VfaWR4OworCV9fbGUxNgkJCWZwX2NfaWR4OworCV9fbGUxNgkJCWZwX3VfaWR4OwogCiAJdTE2CQkJcnhfYmRfcHJvZDsKIAl1MTYJCQlyeF9iZF9jb25zOwpAQCAtMjUwLDggKzI4OCw4IEBACiAJdTE2CQkJcnhfc2dlX3Byb2Q7CiAJLyogVGhlIGxhc3QgbWF4aW1hbCBjb21wbGV0ZWQgU0dFICovCiAJdTE2CQkJbGFzdF9tYXhfc2dlOwotCXUxNgkJCSpyeF9jb25zX3NiOwotCXUxNgkJCSpyeF9iZF9jb25zX3NiOworCV9fbGUxNgkJCSpyeF9jb25zX3NiOworCV9fbGUxNgkJCSpyeF9iZF9jb25zX3NiOwogCiAJdW5zaWduZWQgbG9uZwkJdHhfcGt0LAogCQkJCXJ4X3BrdCwKQEAgLTI2Niw2ICszMDQsMTIgQEAKIAl1NjQJCQl0cGFfcXVldWVfdXNlZDsKICNlbmRpZgogCisJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF90Y2xpZW50OworCXN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfdWNsaWVudDsKKwlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3hjbGllbnQ7CisJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzIGV0aF9xX3N0YXRzOworCisJY2hhcgkJCW5hbWVbSUZOQU1TSVpdOwogCXN0cnVjdCBibngyeAkJKmJwOyAvKiBwYXJlbnQgKi8KIH07CiAKQEAgLTQwMSwxMCArNDQ1LDEzIEBACiAjZGVmaW5lIEJOWDJYX1JYX0NTVU1fT0soY3FlKSBcCiAJCQkoIShCTlgyWF9MNF9DU1VNX0VSUihjcWUpIHx8IEJOWDJYX0lQX0NTVU1fRVJSKGNxZSkpKQogCisjZGVmaW5lIEJOWDJYX1BSU19GTEFHX09WRVJFVEhfSVBWNChmbGFncykgXAorCQkJCSgoKGxlMTZfdG9fY3B1KGZsYWdzKSAmIFwKKwkJCQkgICBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0wpID4+IFwKKwkJCQkgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTF9TSElGVCkgXAorCQkJCSA9PSBQUlNfRkxBR19PVkVSRVRIX0lQVjQpCiAjZGVmaW5lIEJOWDJYX1JYX1NVTV9GSVgoY3FlKSBcCi0JCQkoKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmIFwKLQkJCSAgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MKSA9PSBcCi0JCQkgKDEgPDwgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MX1NISUZUKSkKKwlCTlgyWF9QUlNfRkxBR19PVkVSRVRIX0lQVjQoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpCiAKIAogI2RlZmluZSBGUF9VU0JfRlVOQ19PRkYJCQkoMiArIDIqSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTKQpAQCAtNDc4LDExICs1MjUsOCBAQAogCXUzMgkJCXNobWVtX2Jhc2U7CiAKIAl1MzIJCQlod19jb25maWc7Ci0JdTMyCQkJYm9hcmQ7CiAKIAl1MzIJCQliY192ZXI7Ci0KLQljaGFyCQkJKm5hbWU7CiB9OwogCiAKQEAgLTUyOCw2ICs1NzIsNyBAQAogCiAJLyogdXNlZCB0byBzeW5jaHJvbml6ZSBwaHkgYWNjZXNzZXMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCXBoeV9tdXRleDsKKwlpbnQJCQluZWVkX2h3X2xvY2s7CiAKIAl1MzIJCQlwb3J0X3N0eDsKIApAQCAtNTczLDYgKzYxOCwxMCBAQAogCiAJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOwogCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOworCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKIAogCXUzMiByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaTsKIAl1MzIgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG87CkBAIC02NTEsMTkgKzcwMCwyMCBAQAogCXUzMiB0eF9zdGF0X2JtYWNfdWZsX2hpOwogCXUzMiB0eF9zdGF0X2JtYWNfdWZsX2xvOwogCi0JdTMyIGJyYl9kcm9wX2hpOwotCXUzMiBicmJfZHJvcF9sbzsKLQl1MzIgYnJiX3RydW5jYXRlX2hpOwotCXUzMiBicmJfdHJ1bmNhdGVfbG87Ci0KLQl1MzIgamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQ7CisJdTMyIHBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaTsKKwl1MzIgcGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvOworCXUzMiBwYXVzZV9mcmFtZXNfc2VudF9oaTsKKwl1MzIgcGF1c2VfZnJhbWVzX3NlbnRfbG87CiAKIAl1MzIgZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2hpOwogCXUzMiBldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfbG87CiAJdTMyIGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGk7CiAJdTMyIGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfbG87CiAKLQl1MzIgbm9fYnVmZl9kaXNjYXJkOworCXUzMiBicmJfZHJvcF9oaTsKKwl1MzIgYnJiX2Ryb3BfbG87CisJdTMyIGJyYl90cnVuY2F0ZV9oaTsKKwl1MzIgYnJiX3RydW5jYXRlX2xvOwogCiAJdTMyIG1hY19maWx0ZXJfZGlzY2FyZDsKIAl1MzIgeHhvdmVyZmxvd19kaXNjYXJkOwpAQCAtNjc0LDE3ICs3MjQsMTYgQEAKIAl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OwogCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOwogCXUzMiBod19jc3VtX2VycjsKKworCXUzMiBuaWdfdGltZXJfbWF4OwogfTsKIAorI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQk0MQogI2RlZmluZSBTVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKIAkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKIAogCi0jaWZkZWYgQk5YMlhfTVVMVEkKICNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNgotI2Vsc2UKLSNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxCi0jZW5kaWYKIAogdW5pb24gY2R1X2NvbnRleHQgewogCXN0cnVjdCBldGhfY29udGV4dCBldGg7CkBAIC03MzksNiArNzg4LDkgQEAKIAogCWF0b21pY190CQlpbnRyX3NlbTsKIAlzdHJ1Y3QgbXNpeF9lbnRyeQltc2l4X3RhYmxlW01BWF9DT05URVhUKzFdOworI2RlZmluZSBJTlRfTU9ERV9JTlR4CQkJMQorI2RlZmluZSBJTlRfTU9ERV9NU0kJCQkyCisjZGVmaW5lIElOVF9NT0RFX01TSVgJCQkzCiAKIAlpbnQJCQl0eF9yaW5nX3NpemU7CiAKQEAgLTc0NywyMyArNzk5LDI2IEBACiAjZW5kaWYKIAogCXUzMgkJCXJ4X2NzdW07Ci0JdTMyCQkJcnhfb2Zmc2V0OwogCXUzMgkJCXJ4X2J1Zl9zaXplOwogI2RlZmluZSBFVEhfT1ZSRUhFQUQJCQkoRVRIX0hMRU4gKyA4KQkvKiA4IGZvciBDUkMgKyBWTEFOICovCiAjZGVmaW5lIEVUSF9NSU5fUEFDS0VUX1NJWkUJCTYwCiAjZGVmaW5lIEVUSF9NQVhfUEFDS0VUX1NJWkUJCTE1MDAKICNkZWZpbmUgRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRQk5NjAwCiAKKwkvKiBNYXggc3VwcG9ydGVkIGFsaWdubWVudCBpcyAyNTYgKDggc2hpZnQpICovCisjZGVmaW5lIEJOWDJYX1JYX0FMSUdOX1NISUZUCQkoKEwxX0NBQ0hFX1NISUZUIDwgOCkgPyBcCisJCQkJCSBMMV9DQUNIRV9TSElGVCA6IDgpCisjZGVmaW5lIEJOWDJYX1JYX0FMSUdOCQkJKDEgPDwgQk5YMlhfUlhfQUxJR05fU0hJRlQpCisKIAlzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrICpkZWZfc3RhdHVzX2JsazsKICNkZWZpbmUgREVGX1NCX0lECQkJMTYKLQl1MTYJCQlkZWZfY19pZHg7Ci0JdTE2CQkJZGVmX3VfaWR4OwotCXUxNgkJCWRlZl94X2lkeDsKLQl1MTYJCQlkZWZfdF9pZHg7Ci0JdTE2CQkJZGVmX2F0dF9pZHg7CisJX19sZTE2CQkJZGVmX2NfaWR4OworCV9fbGUxNgkJCWRlZl91X2lkeDsKKwlfX2xlMTYJCQlkZWZfeF9pZHg7CisJX19sZTE2CQkJZGVmX3RfaWR4OworCV9fbGUxNgkJCWRlZl9hdHRfaWR4OwogCXUzMgkJCWF0dG5fc3RhdGU7CiAJc3RydWN0IGF0dG5fcm91dGUJYXR0bl9ncm91cFtNQVhfRFlOQU1JQ19BVFROX0dSUFNdOwotCXUzMgkJCW5pZ19tYXNrOwogCiAJLyogc2xvdyBwYXRoIHJpbmcgKi8KIAlzdHJ1Y3QgZXRoX3NwZQkJKnNwcTsKQEAgLTc3MSw3ICs4MjYsNyBAQAogCXUxNgkJCXNwcV9wcm9kX2lkeDsKIAlzdHJ1Y3QgZXRoX3NwZQkJKnNwcV9wcm9kX2JkOwogCXN0cnVjdCBldGhfc3BlCQkqc3BxX2xhc3RfYmQ7Ci0JdTE2CQkJKmRzYl9zcF9wcm9kOworCV9fbGUxNgkJCSpkc2Jfc3BfcHJvZDsKIAl1MTYJCQlzcHFfbGVmdDsgLyogc2VyaWFsaXplIHNwcSAqLwogCS8qIHVzZWQgdG8gc3luY2hyb25pemUgc3BxIGFjY2Vzc2VzICovCiAJc3BpbmxvY2tfdAkJc3BxX2xvY2s7CkBAIC03ODksMTEgKzg0NCwxMSBAQAogCXUzMgkJCWZsYWdzOwogI2RlZmluZSBQQ0lYX0ZMQUcJCQkxCiAjZGVmaW5lIFBDSV8zMkJJVF9GTEFHCQkJMgotI2RlZmluZSBPTkVfVERNQV9GTEFHCQkJNAkvKiBubyBsb25nZXIgdXNlZCAqLworI2RlZmluZSBPTkVfUE9SVF9GTEFHCQkJNAogI2RlZmluZSBOT19XT0xfRkxBRwkJCTgKICNkZWZpbmUgVVNJTkdfREFDX0ZMQUcJCQkweDEwCiAjZGVmaW5lIFVTSU5HX01TSVhfRkxBRwkJCTB4MjAKLSNkZWZpbmUgQVNGX0VOQUJMRV9GTEFHCQkJMHg0MAorI2RlZmluZSBVU0lOR19NU0lfRkxBRwkJCTB4NDAKICNkZWZpbmUgVFBBX0VOQUJMRV9GTEFHCQkJMHg4MAogI2RlZmluZSBOT19NQ1BfRkxBRwkJCTB4MTAwCiAjZGVmaW5lIEJQX05PTUNQKGJwKQkJCShicC0+ZmxhZ3MgJiBOT19NQ1BfRkxBRykKQEAgLTgwOCwxMiArODYzLDEyIEBACiAKIAlpbnQJCQlwbV9jYXA7CiAJaW50CQkJcGNpZV9jYXA7CisJaW50CQkJbXJyczsKIAogCXN0cnVjdCBkZWxheWVkX3dvcmsJc3BfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVzZXRfdGFzazsKIAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwotCWludAkJCXRpbWVyX2ludGVydmFsOwogCWludAkJCWN1cnJlbnRfaW50ZXJ2YWw7CiAKIAl1MTYJCQlmd19zZXE7CkBAIC04MjYsNiArODgxLDkgQEAKIAlzdHJ1Y3QgYm54MnhfY29tbW9uCWNvbW1vbjsKIAlzdHJ1Y3QgYm54MnhfcG9ydAlwb3J0OwogCisJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IGNtbmc7CisJdTMyCQkJdm5fd2VpZ2h0X3N1bTsKKwogCXUzMgkJCW1mX2NvbmZpZzsKIAl1MTYJCQllMWhvdjsKIAl1OAkJCWUxaG1mOwpAQCAtODQ4LDcgKzkwNiw3IEBACiAJdTMyCQkJbGluX2NudDsKIAogCWludAkJCXN0YXRlOwotI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TRUQJCTB4MAorI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TRUQJCTAKICNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FECTB4MTAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X1BPUlQJMHgyMDAwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX09QRU4JCTB4MzAwMApAQCAtODU5LDggKzkxNyw5IEBACiAjZGVmaW5lIEJOWDJYX1NUQVRFX0RJQUcJCTB4ZTAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9FUlJPUgkJMHhmMDAwCiAKLQlpbnQJCQludW1fcXVldWVzOwotI2RlZmluZSBCUF9NQVhfUVVFVUVTKGJwKQkJKElTX0UxSE1GKGJwKSA/IDQgOiAxNikKKwlpbnQJCQltdWx0aV9tb2RlOworCWludAkJCW51bV9yeF9xdWV1ZXM7CisJaW50CQkJbnVtX3R4X3F1ZXVlczsKIAogCXUzMgkJCXJ4X21vZGU7CiAjZGVmaW5lIEJOWDJYX1JYX01PREVfTk9ORQkJMApAQCAtODk4LDggKzk1Nyw2IEBACiAJaW50CQkJZXhlY3V0ZXJfaWR4OwogCiAJdTE2CQkJc3RhdHNfY291bnRlcjsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3RjbGllbnQ7Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF94Y2xpZW50OwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMJZXRoX3N0YXRzOwogCiAJc3RydWN0IHpfc3RyZWFtX3MJKnN0cm07CkBAIC05MTEsMTcgKzk2OCwyNyBAQAogfTsKIAogCi0jZGVmaW5lIGZvcl9lYWNoX3F1ZXVlKGJwLCB2YXIpCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBCTlgyWF9NQVhfUVVFVUVTKGJwKQkoSVNfRTFITUYoYnApID8gKE1BWF9DT05URVhUIC8gRTFIVk5fTUFYKSA6IFwKKwkJCQkJCSBNQVhfQ09OVEVYVCkKKyNkZWZpbmUgQk5YMlhfTlVNX1FVRVVFUyhicCkJbWF4KGJwLT5udW1fcnhfcXVldWVzLCBicC0+bnVtX3R4X3F1ZXVlcykKKyNkZWZpbmUgaXNfbXVsdGkoYnApCQkoQk5YMlhfTlVNX1FVRVVFUyhicCkgPiAxKQogCisjZGVmaW5lIGZvcl9lYWNoX3J4X3F1ZXVlKGJwLCB2YXIpIFwKKwkJCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9yeF9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBmb3JfZWFjaF90eF9xdWV1ZShicCwgdmFyKSBcCisJCQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fdHhfcXVldWVzOyB2YXIrKykKKyNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCiAjZGVmaW5lIGZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIHZhcikgXAotCQkJCWZvciAodmFyID0gMTsgdmFyIDwgYnAtPm51bV9xdWV1ZXM7IHZhcisrKQotI2RlZmluZSBpc19tdWx0aShicCkJCShicC0+bnVtX3F1ZXVlcyA+IDEpCisJCQlmb3IgKHZhciA9IDE7IHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykKIAogCiB2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMik7CiB2b2lkIGJueDJ4X3dyaXRlX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdTMyIGRzdF9hZGRyLAogCQkgICAgICB1MzIgbGVuMzIpOworaW50IGJueDJ4X2dldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTggcG9ydCk7CiBpbnQgYm54Mnhfc2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCk7CitpbnQgYm54Mnhfc2V0X2dwaW9faW50KHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOwogCiBzdGF0aWMgaW5saW5lIHUzMiByZWdfcG9sbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgZXhwZWN0ZWQsIGludCBtcywKIAkJCSAgIGludCB3YWl0KQpAQCAtOTkyLDEzICsxMDU5LDEyIEBACiAjZGVmaW5lIFBDSUNGR19MSU5LX1NQRUVEX1NISUZUCQkxNgogCiAKLSNkZWZpbmUgQk5YMlhfTlVNX1NUQVRTCQkJNDIKLSNkZWZpbmUgQk5YMlhfTlVNX1RFU1RTCQkJOAorI2RlZmluZSBCTlgyWF9OVU1fVEVTVFMJCQk3CiAKLSNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLCQkwCi0jZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMQotI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVECTEKLSNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkyCisjZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMAorI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0sJCTEKKyNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkxCisjZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQJMgogI2RlZmluZSBCTlgyWF9MT09QQkFDS19GQUlMRUQJCShCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEIHwgXAogCQkJCQkgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRCkKIApAQCAtMTA2MSw5ICsxMTI3LDYgQEAKICNkZWZpbmUgQk5YMlhfTUNQX0FTU0VSVCBcCiAJR0VORVJBTF9BVFRFTl9PRkZTRVQoTUNQX0ZBVEFMX0FTU0VSVF9BVFRFTlRJT05fQklUKQogCi0jZGVmaW5lIEJOWDJYX0RPT1JRX0FTU0VSVCBcCi0JQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVAotCiAjZGVmaW5lIEJOWDJYX0dSQ19USU1FT1VUCUdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9USU1FT1VUX0dSQykKICNkZWZpbmUgQk5YMlhfR1JDX1JTVgkJKEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNSKSB8IFwKIAkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ1QpIHwgXApAQCAtMTEyMCwxMiArMTE4MywxMyBAQAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX1BBUklUWV9FUlJPUikKIAogCi0jZGVmaW5lIE1VTFRJX0ZMQUdTIFwKKyNkZWZpbmUgTVVMVElfRkxBR1MoYnApIFwKIAkJKFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZIHwgXAogCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X1RDUF9DQVBBQklMSVRZIHwgXAogCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFkgfCBcCiAJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgfCBcCi0JCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSkKKwkJIChicC0+bXVsdGlfbW9kZSA8PCBcCisJCSAgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFX1NISUZUKSkKIAogI2RlZmluZSBNVUxUSV9NQVNLCQkJMHg3ZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmggYi9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjNmIwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaApAQCAtMCwwICsxLDUyNiBAQAorLyogYm54MnhfZHVtcC5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisKKy8qIFRoaXMgc3RydWN0IGhvbGRzIGEgc2lnbmF0dXJlIHRvIGVuc3VyZSB0aGUgZHVtcCByZXR1cm5lZCBmcm9tIHRoZSBkcml2ZXIKKyAqIG1hdGNoIHRoZSBtZXRhIGRhdGEgZmlsZSBpbnNlcnRlZCB0byBncmNfZHVtcC50Y2wKKyAqIFRoZSBzaWduYXR1cmUgaXMgdGltZSBzdGFtcCwgZGlhZyB2ZXJzaW9uIGFuZCBncmNfZHVtcCB2ZXJzaW9uCisgKi8KKworc3RydWN0IGR1bXBfc2lnbiB7CisJdTMyIHRpbWVfc3RhbXA7CisJdTMyIGRpYWdfdmVyOworCXUzMiBncmNfZHVtcF92ZXI7Cit9OworCisjZGVmaW5lIFRTVE9STV9XQUlUUF9BRERSCTB4MWI4YTgwCisjZGVmaW5lIENTVE9STV9XQUlUUF9BRERSCTB4MjM4YTgwCisjZGVmaW5lIFhTVE9STV9XQUlUUF9BRERSCTB4MmI4YTgwCisjZGVmaW5lIFVTVE9STV9XQUlUUF9BRERSCTB4MzM4YTgwCisjZGVmaW5lIFRTVE9STV9DQU1fTU9ERQkJMHgxYjE0NDAKKworI2RlZmluZSBSSV9FMQkJCTB4MQorI2RlZmluZSBSSV9FMUgJCQkweDIKKyNkZWZpbmUgUklfT05MSU5FCQkweDEwMAorCisjZGVmaW5lIFJJX0UxX09GRkxJTkUJCShSSV9FMSkKKyNkZWZpbmUgUklfRTFfT05MSU5FCQkoUklfRTEgfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0UxSF9PRkZMSU5FCQkoUklfRTFIKQorI2RlZmluZSBSSV9FMUhfT05MSU5FCQkoUklfRTFIIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9BTExfT0ZGTElORQkJKFJJX0UxIHwgUklfRTFIKQorI2RlZmluZSBSSV9BTExfT05MSU5FCQkoUklfRTEgfCBSSV9FMUggfCBSSV9PTkxJTkUpCisKKyNkZWZpbmUgTUFYX1RJTUVSX1BFTkRJTkcJMjAwCisjZGVmaW5lIFRJTUVSX1NDQU5fRE9OVF9DQVJFCTB4RkYKKworCitzdHJ1Y3QgZHVtcF9oZHIgeworCXUzMgkJIGhkcl9zaXplOwkvKiBpbiBkd29yZHMsIGV4Y2x1ZGluZyB0aGlzIGZpZWxkICovCisJc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ247CisJdTMyCQkgeHN0b3JtX3dhaXRwOworCXUzMgkJIHRzdG9ybV93YWl0cDsKKwl1MzIJCSB1c3Rvcm1fd2FpdHA7CisJdTMyCQkgY3N0b3JtX3dhaXRwOworCXUxNgkJIGluZm87CisJdTgJCSBpZGxlX2NoazsKKwl1OAkJIHJlc2VydmVkOworfTsKKworc3RydWN0IHJlZ19hZGRyIHsKKwl1MzIgYWRkcjsKKwl1MzIgc2l6ZTsKKwl1MTYgaW5mbzsKK307CisKK3N0cnVjdCB3cmVnX2FkZHIgeworCXUzMiBhZGRyOworCXUzMiBzaXplOworCXUzMiByZWFkX3JlZ3NfY291bnQ7CisJY29uc3QgdTMyICpyZWFkX3JlZ3M7CisJdTE2IGluZm87Cit9OworCisKKyNkZWZpbmUgUkVHU19DT1VOVAkJNTU4CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIHJlZ19hZGRyc1tSRUdTX0NPVU5UXSA9IHsKKwl7IDB4MjAwMCwgMzQxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDAsIDEwMywgUklfQUxMX09OTElORX0sCisJeyAweDMwMDAsIDI4NywgUklfQUxMX09OTElORX0sIHsgMHgzODAwLCAzMzEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg4ODAwLCA2LCBSSV9FMV9PTkxJTkV9LCB7IDB4YTAwMCwgMjIzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTM4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhMzk4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTM5YywgNywgUklfRTFIX09OTElORX0sIHsgMHhhM2MwLCAzLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNkMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2Q4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNlMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2U4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNmMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2Y4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTQwMCwgNjksIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1MjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUyOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1MzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU2OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1OTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTVhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1YzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTVlMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGE1ZTgsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTVmMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGE1ZjgsIDEwLCBSSV9FMUhfT05MSU5FfSwgeyAweDEwMDAwLCAyMzYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDNiYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDNjYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwM2RjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAwLCA1NywgUklfQUxMX09OTElORX0sCisJeyAweDEwNGU4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNGY0LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDAsIDE0NiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc1MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwNzYwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzcwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3ODAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3OTAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDdhMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDdiMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwN2MwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwN2QwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3ZTAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4ODAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDkwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MDAwLCAyNiwgUklfRTFIX09OTElORX0sCisJeyAweDE2MDcwLCAxOCwgUklfRTFIX09OTElORX0sIHsgMHgxNjBjMCwgMjcsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNjE0MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxNjE2MCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDE2MTgwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MWMwLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYyMDQsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTgwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxODAwOCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgyMDAwMCwgMjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDA2MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHgyMDA4MCwgMTM4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAyYjQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyYzQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDQwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgyMDQwYywgOCwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDJjLCAxOCwgUklfRTFIX09OTElORX0sIHsgMHgyMDQ4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNTAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDQwMDAwLCA5OCwgUklfQUxMX09OTElORX0sIHsgMHg0MDE5NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQwMWE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwMWE4LCAxMSwgUklfRTFIX09OTElORX0sCisJeyAweDQwMjAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDQwNDAwLCA0MywgUklfQUxMX09OTElORX0sCisJeyAweDQwNGI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNGM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0Y2MsIDMsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NDA1MDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDUxMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHg0MDUyMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQwNTMwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNTQwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHg0MjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyMmJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyZDQsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NDI0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI0YzgsIDM4LCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTY4LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI4MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAwMDAsIDIwLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAwNTAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAwNzAsIDg4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAxZGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAxZWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDFmMCwgNCwgUklfRTFIX09OTElORX0sIHsgMHg1MDIwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDUwMjBjLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjI4LCA2LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4NTAyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MjAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1NDAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDU0MDA0LCAzMzI3LCBSSV9BTExfT0ZGTElORX0sIHsgMHg1ODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDU4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sIHsgMHg2MDAwMCwgNzEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDEyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MDEzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTNjLCAyNCwgUklfRTFIX09OTElORX0sIHsgMHg2MDIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYxMDA0LCA1MTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4NzAwMDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NzAwMjAsIDIxNDk2LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDBjLCA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDFjLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDM4LCA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDRjLCAxMDksIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUyMDAsIDMyLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MjgwLCAxMTEwNCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHhhMDAwMCwgMTYzODQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YjAwMDAsIDE2Mzg0LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YzEwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzEwMjgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMTAzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMTgwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweGMyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyOWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjJiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyNDAwLCA0OSwgUklfQUxMX09OTElORX0sIHsgMHhjMjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjU2OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHhjMjYwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MDAwLCAxNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDJiMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJjMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MmUwLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweGM0NDAwLCA1MSwgUklfQUxMX09OTElORX0sCisJeyAweGM0NGQwLCAzOCwgUklfQUxMX09OTElORX0sIHsgMHhjNDU3MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweGM0NjAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMDAwLCAxOSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMDRjLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweGQwMDZjLCA5MSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMWY0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAyMGMsIDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDIyOCwgMTgsIFJJX0UxSF9PTkxJTkV9LCB7IDB4ZDAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDMwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDQwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQ0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQ0MDA0LCAyNTU5LCBSSV9BTExfT0ZGTElORX0sCisJeyAweGQ4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQ4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweGUwMDAwLCAyMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDA1NCwgOCwgUklfQUxMX09OTElORX0sCisJeyAweGUwMDc0LCA4NSwgUklfQUxMX09OTElORX0sIHsgMHhlMDFkNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAyMGMsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMmMsIDE4LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4ZTAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAzMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMjAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUyMDA0LCAyMDQ3LCBSSV9BTExfT0ZGTElORX0sIHsgMHhmMDAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGYwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkV9LCB7IDB4MTAxMDAwLCAxMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTAzYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDEwNGMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDEwNTAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTAxMTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxODAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjAwMCwgMTgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwNTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDY0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAyMDgwLCAxNywgUklfQUxMX09OTElORX0sIHsgMHgxMDIwYzgsIDgsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMDI0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDAwLCAyNiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA3NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwODQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwOTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDk4LCA1LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTAzODAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAwMCwgNjMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQxMDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MTE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0MjAwLCAxNywgUklfQUxMX09OTElORX0sIHsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0NTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNDgwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQ5MDAsIDE5MiwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDAwLCA3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTEyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIxYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI0MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjhjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJhMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMwMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2FjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2RjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNmYywgNzY5LCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDgwMDAsIDMzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4MDkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwODBhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwODBhYywgNSwgUklfRTFIX09OTElORX0sIHsgMHgxMDgxMDAsIDUsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgxMjAsIDUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4MjAwLCA3NCwgUklfQUxMX09OTElORX0sCisJeyAweDEwODQwMCwgNzQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4ODAwLCAxNTIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDkwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMDAwLCAzNDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1NzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTg4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNTk4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDU5YywgMjMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMjA2MTQsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTIwNjFjLCAzMCwgUklfRTFIX09OTElORX0sCisJeyAweDEyMDgwYywgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwYTAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIyMDAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyODAwMCwgMiwgUklfRTFIX09OTElORX0sCisJeyAweDE0MDAwMCwgMTE0LCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDFkNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDFlNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDQwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQ4MDAwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTRjMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE1MDAwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE1NDAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNTgwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNWMwMDAsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxMDAwLCA3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxMDI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MTAzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2MTgwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQwMDAsIDYwLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MGZjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDEwYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDExMCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNjQyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI1MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDI1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyNzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjgwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0ODAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NTAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjYyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjY0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjY1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2ODAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDAwLCAyNzAsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDQ0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4NDU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODgwMCwgMTksIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjg5MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4YTAwLCAxMjgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNmEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTZhMDA0LCAxNTM1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDE2YzAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNmMwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MTZlMDAwLCAxNiwgUklfRTFIX09OTElORX0sIHsgMHgxNmUxMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNmUyMDAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTZlNDAwLCAxODMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNzAwMDAsIDkzLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDE4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDE5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzAyMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNzAyMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTc4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMDAwLCA2MSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEzYywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDE4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDE4MTAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxODEwMTAsIDEwMjAsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWEwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWExMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTgxMDAsIDE5ODQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFhYTAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDFhYTAwNCwgNjY1NSwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDFiMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYjI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDExMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MjAwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgyMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjAyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIyMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjI1ODAwLCAxNTM2LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMjcwMDQsIDEwMjMsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjI4MTAwLCA4NjQwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMzFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MjMyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIzMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIzODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjM4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI0MDAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDEzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyODAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyODIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJhMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJhODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmE4MTAwLCA5NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJhOTAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDJhOTAwNCwgNzY3OSwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDJiMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYjI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDExMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MzAwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgzMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzAyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzI1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMjgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyODEwMCwgNTM2LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgzMjg5NjQsIDgxMDMsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgzMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MzM4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzODI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzQwMDAwLCAyLCBSSV9BTExfT05MSU5FfQorfTsKKworCisjZGVmaW5lIElETEVSRUdTX0NPVU5UCQkyNzcKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgaWRsZV9hZGRyc1tJRExFUkVHU19DT1VOVF0gPSB7CisJeyAweDIxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjEyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIxMmMsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgxNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MWMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTM4YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE0MDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTQyYywgMTIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNjAwLCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweGE2MTgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhjMDljLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2IwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzZDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMDIxYywgMTEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyYTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDJiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDQwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDAxNTQsIDE0LCBSSV9BTExfT05MSU5FfSwgeyAweDQwMTk4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0YWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0YmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjI5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjJhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDE2MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg1MDFkMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMWUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAyMGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDA5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MDExYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzEwMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjJiMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyNTUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyOTQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDJhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJiNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0NTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0NTU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ1NjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxNmMsIDgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDFlOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMjBjLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAxNTQsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDIwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMjBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMTAzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwNTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwODAsIDE2LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzAwNCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA2OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwNzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDljLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTA0MDA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDAyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwM2MsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQwZmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MTBjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0NDAwLCA2NCwgUklfQUxMX09OTElORX0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTAxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTEzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTMxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2IwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgwOTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMWIwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwMzJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDM2YywgMywgUklfQUxMX09OTElORX0sCisJeyAweDEyMDQwOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjA0MTQsIDE1LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNDc4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDUyYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU2NCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMjA1N2MsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1OGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNjA4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTIwODA4LCAxLCBSSV9FMV9PTkxJTkV9LCB7IDB4MTIwODBjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDgyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDgyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4MzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4MzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg1MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODcwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODc4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4OTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4OTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhiMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4YzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhlOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4ZjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOTA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDA1YywgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDBkMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNDAwZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MTAyYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDAxNCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQwZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjYyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MmEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjU0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDA4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODAxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODAyOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwNTgsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwNzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MjM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MmQwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODJlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODMwMCwgNjcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDEwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4NDM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQ0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FfSwgeyAweDE2ZTIwMCwgMTI4LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTZlNDA0LCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTU4NCwgNzAsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNzAwYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMGFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDE3NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDE4NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAwZjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYWEwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MWI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYTkwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MmI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MzM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODBjMCwgMSwgUklfQUxMX09OTElORX0KK307CisKK3N0YXRpYyBjb25zdCB1MzIgcmVhZF9yZWdfZTFfMFtdID0geyAweDFiMTAwMCB9OworCisjZGVmaW5lIFdSRUdTX0NPVU5UX0UxCQkxCitzdGF0aWMgY29uc3Qgc3RydWN0IHdyZWdfYWRkciB3cmVnX2FkZHJzX2UxW1dSRUdTX0NPVU5UX0UxXSA9IHsKKwl7IDB4MWIwYzAwLCAxOTIsIDEsIHJlYWRfcmVnX2UxXzAsIFJJX0UxX09GRkxJTkUgfQorfTsKKworc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMWhfMFtdID0geyAweDFiMTA0MCwgMHgxYjEwMDAgfTsKKworI2RlZmluZSBXUkVHU19DT1VOVF9FMUgJCTEKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd3JlZ19hZGRyIHdyZWdfYWRkcnNfZTFoW1dSRUdTX0NPVU5UX0UxSF0gPSB7CisJeyAweDFiMGMwMCwgMjU2LCAyLCByZWFkX3JlZ19lMWhfMCwgUklfRTFIX09GRkxJTkUgfQorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ25fYWxsID0geyAweDQ5YWE5M2VlLCAweDQwODM1LCAweDIyIH07CisKKworI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxCTIKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc3RhdHVzX3JlZ3NfZTFbVElNRVJfUkVHU19DT1VOVF9FMV0gPQorCXsgMHgxNjQwMTQsIDB4MTY0MDE4IH07CitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3NjYW5fcmVnc19lMVtUSU1FUl9SRUdTX0NPVU5UX0UxXSA9CisJeyAweDE2NDBkMCwgMHgxNjQwZDQgfTsKKworI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxSAkyCitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPQorCXsgMHgxNjQwMTQsIDB4MTY0MDE4IH07CitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3NjYW5fcmVnc19lMWhbVElNRVJfUkVHU19DT1VOVF9FMUhdID0KKwl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmggYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKaW5kZXggMTkyZmE5OC4uZTJkZjIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2Z3X2RlZnMuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUwLDggKzUwLDEwIEBACiAjZGVmaW5lIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQogI2RlZmluZSBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMzU4ICsgKHBvcnQgKiAweDNlOCkgKyAoY2xpZW50X2lkICogMHgyOCkpIFwKLQk6ICgweDljOCArIChwb3J0ICogMHgyZjgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDMzNTAgKyAocG9ydCAqIDB4MTkwKSArIChjbGllbnRfaWQgKiAweDEwKSkgXAorCTogKDB4OWMwICsgKHBvcnQgKiAweDEzMCkgKyAoY2xpZW50X2lkICogMHgxMCkpKQorI2RlZmluZSBUU1RPUk1fQ09NTU9OX1NBRkNfV09SS0FST1VORF9FTkFCTEVfT0ZGU0VUIFwKKwkoSVNfRTFIX09GRlNFVCA/IDB4MWFkOCA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFRTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDFhICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAoZnVuY3Rpb24gKiBcCkBAIC04MSw0MyArODMsNTQgQEAKIAkoZnVuY3Rpb24gKiAweDM4KSkpCiAjZGVmaW5lIFRTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgc3RhdHNfY291bnRlcl9pZCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjAxMCArIChwb3J0ICogMHg1YjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCi0JMHg1MCkpIDogKDB4NDAwMCArIChwb3J0ICogMHgzZjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDM4KSkpCi0jZGVmaW5lIFRTVE9STV9SWF9QUk9EU19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMzUwICsgKHBvcnQgKiAweDNlOCkgKyAoY2xpZW50X2lkICogMHgyOCkpIFwKLQk6ICgweDljMCArIChwb3J0ICogMHgyZjgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSkKKwkweDUwKSkgOiAoMHg0MDgwICsgKHBvcnQgKiAweDViMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4NTApKSkKICNkZWZpbmUgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MmMwMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGI4OCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKLSNkZWZpbmUgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweDNiMzAgOiAweDFjMjApCisjZGVmaW5lIFRTVE9STV9UUEFfRVhJU1RfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHgzNjgwIDogMHgxYzIwKQogI2RlZmluZSBVU1RPUk1fQUdHX0RBVEFfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHhhMDQwIDogMHgyYzEwKQogI2RlZmluZSBVU1RPUk1fQUdHX0RBVEFfU0laRSAoSVNfRTFIX09GRlNFVCA/IDB4MjQ0MCA6IDB4MTIwMCkKICNkZWZpbmUgVVNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCBcCi0JKElTX0UxSF9PRkZTRVQgPyAweDgwMDAgOiAweDEwMDApCisJKElTX0UxSF9PRkZTRVQgPyAweDg5NjAgOiAweDEwMDApCiAjZGVmaW5lIFVTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODk4MCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMjk4ICsgKHBvcnQgKiAweDI1OCkgKyAoY2xpZW50SWQgKiAweDE4KSkgOiBcCi0JKDB4NTQ1MCArIChwb3J0ICogMHgxYzgpICsgKGNsaWVudElkICogMHgxOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxOCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCSgweDUzMzAgKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRJZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTkxYSArIChmdW5jdGlvbiAqIFwKLQkweDI4KSArIChpbmRleCAqIDB4NCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTUyMiArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTkyMiArIChmdW5jdGlvbiAqIFwKKwkweDQwKSArIChpbmRleCAqIDB4NCkpKQogI2RlZmluZSBVU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxOTAwICsgKGZ1bmN0aW9uICogMHgyOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwMCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgxOTAwICsgKGZ1bmN0aW9uICogMHg0MCkpKQogI2RlZmluZSBVU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwOCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4YTApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NTA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKKwkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDQwKSkpCisjZGVmaW5lIFVTVE9STV9FVEhfUklOR19QQVVTRV9EQVRBX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAyMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCTB4ZmZmZmZmZmYpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhNTAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkOTggKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFVTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCiAJKElTX0UxSF9PRkZTRVQgPyAweDI0NDggOiAweGZmZmZmZmZmKQogI2RlZmluZSBVU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NjQ0ICsgKHBvcnQgKiAweGQwKSkgOiAoMHgxOTU0ICsgKHBvcnQgKiAweGI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NzA0ICsgKHBvcnQgKiAweGYwKSkgOiAoMHgxOTg0ICsgKHBvcnQgKiAweGMwKSkpCiAjZGVmaW5lIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMjkwICsgKHBvcnQgKiAweDI1OCkgKyAoY2xpZW50SWQgKiAweDE4KSkgOiBcCi0JKDB4NTQ0OCArIChwb3J0ICogMHgxYzgpICsgKGNsaWVudElkICogMHgxOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCSgweDUzMjggKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRJZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX01FTV9XT1JLQVJPVU5EX0FERFJFU1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNDA4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg1NDA4ICsgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjQwOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NTMwOCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhZDQgKyAocG9ydCAqIDB4OCkpIDogMHhmZmZmZmZmZikKKyNkZWZpbmUgVVNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNDUwICsgKHBvcnQgKiAweDJkMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKKwkweDI4KSkgOiAoMHg0NzQwICsgKHBvcnQgKiAweDJkMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgVVNUT1JNX1JYX1BST0RTX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMDAgKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRfaWQgKiAweDMwKSkgXAorCTogKDB4NTMxOCArIChwb3J0ICogMHgyNjApICsgKGNsaWVudF9pZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDkwMWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKIAkoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKQEAgLTEzMiwxMiArMTQ1LDE1IEBACiAjZGVmaW5lIFVTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgY3B1X2lkKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHg5MDA4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpIDogXAogCSgweDE0MDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkpCisjZGVmaW5lIFVTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI5ZjAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkODAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFhTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAogCShJU19FMUhfT0ZGU0VUID8gMHg5MDAwIDogMHgxMDAwKQogI2RlZmluZSBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4OTAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjRhOCArIChwb3J0ICogMHg0MCkpIDogKDB4M2JhMCArIChwb3J0ICogMHg0MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MjRhOCArIChwb3J0ICogMHg1MCkpIDogKDB4M2JhMCArIChwb3J0ICogMHg1MCkpKQogI2RlZmluZSBYU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTAxYSArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKGZ1bmN0aW9uICogXApAQCAtMTQ5LDIzICsxNjUsMjMgQEAKIAkoSVNfRTFIX09GRlNFVCA/ICgweGEwMDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAogCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxNDA4ICsgKGZ1bmN0aW9uICogMHgyOCkpKQogI2RlZmluZSBYU1RPUk1fRTFIT1ZfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyYWI4ICsgKGZ1bmN0aW9uICogMHgyKSkgOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MmMxMCArIChmdW5jdGlvbiAqIDB4MikpIDogMHhmZmZmZmZmZikKICNkZWZpbmUgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjQxOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4M2I3MCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgWFNUT1JNX0ZBSVJORVNTX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjU2OCArIChmdW5jdGlvbiAqIDB4NzApKSA6ICgweDNjNjAgKyBcCi0JKGZ1bmN0aW9uICogMHg3MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MjU4OCArIChmdW5jdGlvbiAqIDB4OTApKSA6ICgweDNjODAgKyBcCisJKGZ1bmN0aW9uICogMHg5MCkpKQogI2RlZmluZSBYU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQgXAotCShJU19FMUhfT0ZGU0VUID8gMHgyYWM4IDogMHhmZmZmZmZmZikKKwkoSVNfRTFIX09GRlNFVCA/IDB4MmMyMCA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGExNDQgKyAocG9ydCAqIDB4MzApKSA6ICgweDE0NTQgKyAocG9ydCAqIDB4MTgpKSkKICNkZWZpbmUgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhjMDAwICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKIAkweDM4KSkgOiAoMHgzMzc4ICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MzgpKSkKICNkZWZpbmUgWFNUT1JNX1JBVEVfU0hBUElOR19QRVJfVk5fVkFSU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI1MjggKyAoZnVuY3Rpb24gKiAweDcwKSkgOiAoMHgzYzIwICsgXAotCShmdW5jdGlvbiAqIDB4NzApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI1NDggKyAoZnVuY3Rpb24gKiAweDkwKSkgOiAoMHgzYzQwICsgXAorCShmdW5jdGlvbiAqIDB4OTApKSkKICNkZWZpbmUgWFNUT1JNX1NQUV9QQUdFX0JBU0VfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyMDAwICsgKGZ1bmN0aW9uICogMHgxMCkpIDogKDB4MzMyOCArIFwKIAkoZnVuY3Rpb24gKiAweDEwKSkpCkBAIC0xNzgsNyArMTk0LDcgQEAKICNkZWZpbmUgQ09NTU9OX0FTTV9JTlZBTElEX0FTU0VSVF9PUENPREUgMHgwCiAKIC8qKgotKiBUaGlzIGZpbGUgZGVmaW5lcyBIU0kgY29uc3RhdG50cyBmb3IgdGhlIEVUSCBmbG93CisqIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGFudHMgZm9yIHRoZSBFVEggZmxvdwogKi8KICNpZmRlZiBfRVZFUkVTVF9NSUNST0NPREUKICNpbmNsdWRlICJtaWNyb2NvZGVfY29uc3RhbnRzLmgiCkBAIC0xOTYsMTggKzIxMiwxOCBAQAogI2RlZmluZSBJUFY2X0hBU0hfVFlQRSAzCiAjZGVmaW5lIFRDUF9JUFY2X0hBU0hfVFlQRSA0CiAKLS8qIEV0aGVybmV0IFJpbmcgcGFybWF0ZXJzICovCisKKy8qIEV0aGVybmV0IFJpbmcgcGFyYW1ldGVycyAqLwogI2RlZmluZSBYX0VUSF9MT0NBTF9SSU5HX1NJWkUgMTMKICNkZWZpbmUgRklSU1RfQkRfSU5fUEtUIDAKICNkZWZpbmUgUEFSU0VfQkRfSU5ERVggMQotI2RlZmluZSBOVU1fT0ZfRVRIX0JEU19JTl9QQUdFIFwKLQkoKFBBR0VfU0laRSkgLyAoU1RSVUNUX1NJWkUoZXRoX3R4X2JkKS84KSkKKyNkZWZpbmUgTlVNX09GX0VUSF9CRFNfSU5fUEFHRSAoKFBBR0VfU0laRSkvKFNUUlVDVF9TSVpFKGV0aF90eF9iZCkvOCkpCiAKIAogLyogUnggcmluZyBwYXJhbXMgKi8KLSNkZWZpbmUgVV9FVEhfTE9DQUxfQkRfUklOR19TSVpFICgxNikKLSNkZWZpbmUgVV9FVEhfTE9DQUxfU0dFX1JJTkdfU0laRSAoMTIpCi0jZGVmaW5lIFVfRVRIX1NHTF9TSVpFICg4KQorI2RlZmluZSBVX0VUSF9MT0NBTF9CRF9SSU5HX1NJWkUgMTYKKyNkZWZpbmUgVV9FVEhfTE9DQUxfU0dFX1JJTkdfU0laRSAxMgorI2RlZmluZSBVX0VUSF9TR0xfU0laRSA4CiAKIAogI2RlZmluZSBVX0VUSF9CRFNfUEVSX1BBR0VfTUFTSyBcCkBAIC0yMjksMTUgKzI0NSwxNSBAQAogI2RlZmluZSBVX0VUSF9VTkRFRklORURfUSAweEZGCiAKIC8qIHZhbHVlcyBvZiBjb21tYW5kIElEcyBpbiB0aGUgcmFtcm9kIG1lc3NhZ2UgKi8KLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCAoODApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCAoODUpCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NUQVRfUVVFUlkgKDkwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9VUERBVEUgKDEwMCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCAoMTA1KQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDICgxMTApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgKDExNSkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgKDEyMCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfRk9SV0FSRF9TRVRVUCAoMTI1KQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX1NFVFVQIDgwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCA4NQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZIDkwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1VQREFURSAxMDAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCAxMDUKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyAxMTAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCAxMTUKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgMTIwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0ZPUldBUkRfU0VUVVAgMTI1CiAKIAogLyogY29tbWFuZCB2YWx1ZXMgZm9yIHNldCBtYWMgY29tbWFuZCAqLwpAQCAtMjU0LDEyICsyNzAsMTYgQEAKICNkZWZpbmUgRVRIX01BWF9SWF9DTElFTlRTX0UxSCAyNQogCiAvKiBNYXhpbWFsIGFnZ3JlZ2F0aW9uIHF1ZXVlcyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTEgKDMyKQotI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUggKDY0KQorI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSAzMgorI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUggNjQKKworLyogRVRIIFJTUyBtb2RlcyAqLworI2RlZmluZSBFVEhfUlNTX01PREVfRElTQUJMRUQgMAorI2RlZmluZSBFVEhfUlNTX01PREVfUkVHVUxBUiAxCiAKIAogLyoqCi0qIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGF0bnRzIGNvbW1vbiB0byBhbGwgbWljcm9jb2RlIGZsb3dzCisqIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGFudHMgY29tbW9uIHRvIGFsbCBtaWNyb2NvZGUgZmxvd3MKICovCiAKIC8qIENvbm5lY3Rpb24gdHlwZXMgKi8KQEAgLTI3OCwyNSArMjk4LDIyIEBACiAjZGVmaW5lIEVUSF9TVEFURSAoRVRIX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQogI2RlZmluZSBUT0VfU1RBVEUgKFRPRV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKICNkZWZpbmUgUkRNQV9TVEFURSAoUkRNQV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKLSNkZWZpbmUgSVNDU0lfU1RBVEUgXAotCShJU0NTSV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKLSNkZWZpbmUgRkNPRV9TVEFURSAoRkNPRV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKIAogLyogbWljcm9jb2RlIGZpeGVkIHBhZ2UgcGFnZSBzaXplIDRLIChjaGFpbnMgYW5kIHJpbmcgc2VnbWVudHMpICovCi0jZGVmaW5lIE1DX1BBR0VfU0laRSAoNDA5NikKKyNkZWZpbmUgTUNfUEFHRV9TSVpFIDQwOTYKIAogCiAvKiBIb3N0IGNvYWxlc2NpbmcgY29uc3RhbnRzICovCiAKIC8qIGluZGV4IG51bWJlcnMgKi8KLSNkZWZpbmUgSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA0CisjZGVmaW5lIEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgOAogI2RlZmluZSBIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDgKICNkZWZpbmUgSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA0CiAjZGVmaW5lIEhDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgNAogI2RlZmluZSBIQ19VU1RPUk1fU0JfTlVNX0lORElDRVMgNAogI2RlZmluZSBIQ19DU1RPUk1fU0JfTlVNX0lORElDRVMgNAogCi0vKiBpbmRleCB2YWx1ZXMgLSB3aGljaCBjb3VudGVydG8gdXBkYXRlICovCisvKiBpbmRleCB2YWx1ZXMgLSB3aGljaCBjb3VudGVyIHRvIHVwZGF0ZSAqLwogCiAjZGVmaW5lIEhDX0lOREVYX1VfVE9FX1JYX0NRX0NPTlMgMAogI2RlZmluZSBIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TIDEKQEAgLTMzMCwxNiArMzQ3LDE2IEBACiAjZGVmaW5lIEFUVEVOVElPTl9JRCA0CiAKIC8qIG1heCBudW1iZXIgb2Ygc2xvdyBwYXRoIGNvbW1hbmRzIHBlciBwb3J0ICovCi0jZGVmaW5lIE1BWF9SQU1ST0RTX1BFUl9QT1JUICg4KQorI2RlZmluZSBNQVhfUkFNUk9EU19QRVJfUE9SVCA4CiAKIC8qIHZhbHVlcyBmb3IgUlggRVRIIENRRSB0eXBlIGZpZWxkICovCi0jZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfRkFTVFBBVEggKDApCi0jZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfUkFNUk9EICgxKQorI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX0ZBU1RQQVRIIDAKKyNkZWZpbmUgUlhfRVRIX0NRRV9UWVBFX0VUSF9SQU1ST0QgMQogCiAKIC8qKioqIERFRklORVMgRk9SIFRJTUVSUy9DTE9DS1MgUkVTT0xVVElPTlMgKioqKi8KLSNkZWZpbmUgRU1VTEFUSU9OX0ZSRVFVRU5DWV9GQUNUT1IgKDE2MDApCi0jZGVmaW5lIEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUiAoMTAwKQorI2RlZmluZSBFTVVMQVRJT05fRlJFUVVFTkNZX0ZBQ1RPUiAxNjAwCisjZGVmaW5lIEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUiAxMDAKIAogI2RlZmluZSBUSU1FUlNfVElDS19TSVpFX0NISVAgKDFlLTMpCiAjZGVmaW5lIFRJTUVSU19USUNLX1NJWkVfRU1VTCBcCkBAIC0zNTMsMTIgKzM3MCw5IEBACiAjZGVmaW5lIFRTRU1JX0NMSzFfUkVTVUxfRlBHQSBcCiAgKChUU0VNSV9DTEsxX1JFU1VMX0NISVApLyhGUEdBX0ZSRVFVRU5DWV9GQUNUT1IpKQogCi0jZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfQ0hJUCBcCi0gKFRJTUVSU19USUNLX1NJWkVfQ0hJUCkKLSNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9FTVVMIFwKLSAoVElNRVJTX1RJQ0tfU0laRV9FTVVMKQotI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0ZQR0EgXAotIChUSU1FUlNfVElDS19TSVpFX0ZQR0EpCisjZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfQ0hJUCAoVElNRVJTX1RJQ0tfU0laRV9DSElQKQorI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0VNVUwgKFRJTUVSU19USUNLX1NJWkVfRU1VTCkKKyNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9GUEdBIChUSU1FUlNfVElDS19TSVpFX0ZQR0EpCiAKICNkZWZpbmUgWFNFTUlfQ0xLMV9SRVNVTF9DSElQICgxZS0zKQogI2RlZmluZSBYU0VNSV9DTEsxX1JFU1VMX0VNVUwgXApAQCAtMzgzLDEyICszOTcsMTUgQEAKICNkZWZpbmUgWFNUT1JNX0lQX0lEX1JPTExfSEFMRiAweDgwMDAKICNkZWZpbmUgWFNUT1JNX0lQX0lEX1JPTExfQUxMIDAKIAotI2RlZmluZSBGV19MT0dfTElTVF9TSVpFICg1MCkKKyNkZWZpbmUgRldfTE9HX0xJU1RfU0laRSA1MAogCiAjZGVmaW5lIE5VTV9PRl9QUk9UT0NPTFMgNAotI2RlZmluZSBNQVhfQ09TX05VTUJFUiAxNgorI2RlZmluZSBOVU1fT0ZfU0FGQ19CSVRTIDE2CisjZGVmaW5lIE1BWF9DT1NfTlVNQkVSIDQKICNkZWZpbmUgTUFYX1RfU1RBVF9DT1VOVEVSX0lEIDE4CiAjZGVmaW5lIE1BWF9YX1NUQVRfQ09VTlRFUl9JRCAxOAorI2RlZmluZSBNQVhfVV9TVEFUX0NPVU5URVJfSUQgMTgKKwogCiAjZGVmaW5lIFVOS05PV05fQUREUkVTUyAwCiAjZGVmaW5lIFVOSUNBU1RfQUREUkVTUyAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCmluZGV4IGVmZDc2NDQuLjAzYzYyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfaHNpLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMTksMzUgKzExOSwxNSBAQAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX1VNUF9OQ19TSV9FWFRfUEhZX1RZUEVfQkNNNTIyMSAweDAwMDEwMDAwCiAKIAl1MzIgYm9hcmQ7CQkJCQkJLyogMHgxMjQgKi8KLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0sJCSAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9TSElGVAkJICAgIDAKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX05PTkUJCSAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMCAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDEgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAyRyAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwNEcgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDdHICAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDE1RyAgICAweDAwMDAwMDA2Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMEcgICAgMHgwMDAwMDAwNwotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDNHICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRyAgICAweDAwMDAwMDA5Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMUcgICAgMHgwMDAwMDAwYQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjNHICAgIDB4MDAwMDAwMGIKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDMzRyAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFUMTEwMSAgICAgMHgwMDAwMDAwZAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExRVQxMjAxICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMUExMTMzRyAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFFQTEyMzNHICAgMHgwMDAwMDAxMAotCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVkVSX01BU0sJCSAgICAweGZmZmYwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVkVSX1NISUZUCQkgICAgMTYKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfTUFTSwkgICAgMHhmMDAwMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01BSk9SX1ZFUl9TSElGVAkgICAgMjgKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfTUFTSwkgICAgMHgwZjAwMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9TSElGVAkgICAgMjQKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfTUFTSwkJICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfTUFTSwkJICAgIDB4MDBGRjAwMDAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfU0hJRlQJCSAgICAxNgogCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUFKT1JfVkVSX01BU0sJICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfU0hJRlQJICAgIDI0CisKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfTUFTSwkgICAgMHhGMDAwMDAwMAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9TSElGVAkgICAgMjgKKwogCXUzMiByZXNlcnZlZDsJCQkJCQkvKiAweDEyOCAqLwogCiB9OwpAQCAtMTk4LDM2ICsxNzgsMjEgQEAKIAl1MzIgcmRtYV9tYWNfbG93ZXI7CiAKIAl1MzIgc2VyZGVzX2NvbmZpZzsKLQkvKiBmb3IgZXh0ZXJuYWwgUEhZLCBvciBmb3JjZWQgbW9kZSBvciBkdXJpbmcgQU4gKi8KLSNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfTUFTSyAweGZmZmYwMDAwCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19UWF9EUlZfUFJFX0VNUEhBU0lTX1NISUZUICAxNgorI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfVFhfRFJWX1BSRV9FTVBIQVNJU19NQVNLCSAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfU0hJRlQJICAgICAgMAogCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX01BU0sgICAgMHgwMDAwZmZmZgotI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVCAgIDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfTUFTSwkgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUCSAgICAgIDE2CiAKLQl1MTYgc2VyZGVzX3R4X2RyaXZlcl9wcmVfZW1waGFzaXNbMTZdOwotCXUxNiBzZXJkZXNfcnhfZHJpdmVyX2VxdWFsaXplclsxNl07CiAKLQl1MzIgeGd4c19jb25maWdfbGFuZTA7Ci0JdTMyIHhneHNfY29uZmlnX2xhbmUxOwotCXUzMiB4Z3hzX2NvbmZpZ19sYW5lMjsKLQl1MzIgeGd4c19jb25maWdfbGFuZTM7Ci0JLyogZm9yIGV4dGVybmFsIFBIWSwgb3IgZm9yY2VkIG1vZGUgb3IgZHVyaW5nIEFOICovCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfVFhfRFJWX1BSRV9FTVBIQVNJU19NQVNLICAgMHhmZmZmMDAwMAotI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX1RYX0RSVl9QUkVfRU1QSEFTSVNfU0hJRlQgIDE2CisJdTMyIFJlc2VydmVkMFsxNl07CQkJCSAgICAvKiAweDE1OCAqLwogCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLCSAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVCAgICAgMAorCS8qICBmb3IgZXh0ZXJuYWwgUEhZLCBvciBmb3JjZWQgbW9kZSBvciBkdXJpbmcgQU4gKi8KKwl1MTYgeGd4c19jb25maWdfcnhbNF07CQkJCSAgICAvKiAweDE5OCAqLwogCi0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMFsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMVsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMlsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lM1sxNl07CisJdTE2IHhneHNfY29uZmlnX3R4WzRdOwkJCQkgICAgLyogMHgxQTAgKi8KIAotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTBbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTFbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTJbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTNbMTZdOworCXUzMiBSZXNlcnZlZDFbNjRdOwkJCQkgICAgLyogMHgxQTggKi8KIAogCXUzMiBsYW5lX2NvbmZpZzsKICNkZWZpbmUgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNLCQkgICAgMHgwMDAwZmZmZgpAQCAtMjY1LDcgKzIzMCw3IEBACiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMJICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNQkgICAgMHgwMDAwMDQwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2CSAgICAweDAwMDAwNTAwCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgyNzYJICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNgkgICAgMHgwMDAwMDYwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxCSAgICAweDAwMDAwNzAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEJICAgIDB4MDAwMDA4MDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRQkgICAgMHgwMDAwZmQwMApAQCAtMzE5LDYgKzI4NCwxMiBAQAogCiAJdTMyIGNvbmZpZzsJCQkJCQkvKiAweDQ1MCAqLwogI2RlZmluZSBTSEFSRURfRkVBVFVSRV9CTUNfRUNIT19NT0RFX0VOIAkgICAgMHgwMDAwMDAwMQorCisJLyogIFVzZSB0aGUgdmFsdWVzIGZyb20gb3B0aW9ucyA0NyBhbmQgNDggaW5zdGVhZCBvZiB0aGUgSFcgZGVmYXVsdAorCSAgdmFsdWVzICovCisjZGVmaW5lIFNIQVJFRF9GRUFUX0NGR19PVkVSUklERV9QUkVFTVBIQVNJU19DRkdfRElTQUJMRUQgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0hBUkVEX0ZFQVRfQ0ZHX09WRVJSSURFX1BSRUVNUEhBU0lTX0NGR19FTkFCTEVEICAgICAgMHgwMDAwMDAwMgorCiAjZGVmaW5lIFNIQVJFRF9GRUFUVVJFX01GX01PREVfRElTQUJMRUQgCSAgICAweDAwMDAwMTAwCiAKIH07CkBAIC0zNzIsNiArMzQzLDExIEBACiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9NQkFfRU5BQkxFRAkJICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgUE9SVF9GRUFUVVJFX01GV19FTkFCTEVECQkgICAgMHgwNDAwMDAwMAogCisJLyogIENoZWNrIHRoZSBvcHRpYyB2ZW5kb3IgdmlhIGkyYyBiZWZvcmUgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBieQorCSAgU1cgKi8KKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVEIAkgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9FTkFCTEVECQkgICAgICAweDA4MDAwMDAwCisKIAl1MzIgd29sX2NvbmZpZzsKIAkvKiBEZWZhdWx0IGlzIHVzZWQgd2hlbiBkcml2ZXIgc2V0cyB0byAiYXV0byIgbW9kZSAqLwogI2RlZmluZSBQT1JUX0ZFQVRVUkVfV09MX0RFRkFVTFRfTUFTSwkJICAgIDB4MDAwMDAwMDMKQEAgLTUxMiw3ICs0ODgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERldmljZSBJbmZvcm1hdGlvbgkJCQkJCQkgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZGV2X2luZm8gewkJCQkJCSAgICAvKiBzaXplICovCitzdHJ1Y3Qgc2htX2Rldl9pbmZvIHsJCQkJCQkgICAgLyogc2l6ZSAqLwogCiAJdTMyICAgIGJjX3JldjsgLyogOCBiaXRzIGVhY2g6IG1ham9yLCBtaW5vciwgYnVpbGQgKi8JICAgICAgIC8qIDQgKi8KIApAQCAtNjQxLDcgKzYxNywxMCBAQAogCiAJdTMyIHBvcnRfc3R4OwogCi0JdTMyIHJlc2VydmVkWzJdOworCXUzMiBzdGF0X25pZ190aW1lcjsKKworCS8qIE1DUCBmaXJtd2FyZSBkb2VzIG5vdCB1c2UgdGhpcyBmaWVsZCAqLworCXUzMiBleHRfcGh5X2Z3X3ZlcnNpb247CiAKIH07CiAKQEAgLTgyNywxMSArODA2LDcgQEAKIAogCXN0cnVjdCBzaGFyZWRfbWZfY2ZnCXNoYXJlZF9tZl9jb25maWc7CiAJc3RydWN0IHBvcnRfbWZfY2ZnCXBvcnRfbWZfY29uZmlnW1BPUlRfTUFYXTsKLSNpZiBkZWZpbmVkKGI3MTApCi0Jc3RydWN0IGZ1bmNfbWZfY2ZnCWZ1bmNfbWZfY29uZmlnW0UxX0ZVTkNfTUFYXTsKLSNlbHNlCiAJc3RydWN0IGZ1bmNfbWZfY2ZnCWZ1bmNfbWZfY29uZmlnW0UxSF9GVU5DX01BWF07Ci0jZW5kaWYKIAogfTsKIApAQCAtODYyLDcgKzgzNyw3IEBACiAjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfQUNUSVZFX01GV19OT05FCSAgICAweDAwMDAwMWMwCiAjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfQUNUSVZFX01GV19NQVNLCSAgICAweDAwMDAwMWMwCiAKLQlzdHJ1Y3QgZGV2X2luZm8gCWRldl9pbmZvOwkJIC8qIDB4OCAgICAgKDB4NDM4KSAqLworCXN0cnVjdCBzaG1fZGV2X2luZm8JZGV2X2luZm87CQkgLyogMHg4ICAgICAoMHg0MzgpICovCiAKIAl1OAkJCXJlc2VydmVkWzUyKlBPUlRfTUFYXTsKIApAQCAtMTIxMiw4ICsxMTg3LDkgQEAKIAogCiAjZGVmaW5lIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04JCQk0Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQk1Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQkxCisjZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQk4CisjZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQk1MworI2RlZmluZSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OIAkJMAogI2RlZmluZSBCQ01fNTcxMF9GV19DT01QSUxFX0ZMQUdTCQkJMQogCiAKQEAgLTEyMjEsMTggKzExOTcsMTIgQEAKICAqIGF0dGVudGlvbiBiaXRzCiAgKi8KIHN0cnVjdCBhdHRlbl9kZWZfc3RhdHVzX2Jsb2NrIHsKLQl1MzIgYXR0bl9iaXRzOwotCXUzMiBhdHRuX2JpdHNfYWNrOwotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBhdHRuX2JpdHNfaW5kZXg7Ci0JdTggcmVzZXJ2ZWQwOwotCXU4IHN0YXR1c19ibG9ja19pZDsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCV9fbGUzMiBhdHRuX2JpdHM7CisJX19sZTMyIGF0dG5fYml0c19hY2s7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwogCXU4IHJlc2VydmVkMDsKLQl1MTYgYXR0bl9iaXRzX2luZGV4OwotI2VuZGlmCi0JdTMyIHJlc2VydmVkMTsKKwlfX2xlMTYgYXR0bl9iaXRzX2luZGV4OworCV9fbGUzMiByZXNlcnZlZDE7CiB9OwogCiAKQEAgLTEzMDUsNyArMTI3NSw3IEBACiAgKiBQYXJzZXIgcGFyc2luZyBmbGFncyBmaWVsZAogICovCiBzdHJ1Y3QgcGFyc2luZ19mbGFncyB7Ci0JdTE2IGZsYWdzOworCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUEFSU0lOR19GTEFHU19FVEhFUk5FVF9BRERSRVNTX1RZUEUgKDB4MTw8MCkKICNkZWZpbmUgUEFSU0lOR19GTEFHU19FVEhFUk5FVF9BRERSRVNTX1RZUEVfU0hJRlQgMAogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX1ZMQU4gKDB4MTw8MSkKQEAgLTEzMzYsOCArMTMwNiw4IEBACiAKIAogc3RydWN0IHJlZ3BhaXIgewotCXUzMiBsbzsKLQl1MzIgaGk7CisJX19sZTMyIGxvOworCV9fbGUzMiBoaTsKIH07CiAKIApAQCAtMTQzNCw4ICsxNDA0LDEwIEBACiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQV9TSElGVCAyCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHhGPDw0KQotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyAoMHgxPDw0KQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTX1NISUZUIDQKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHg3PDw1KQorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDUKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7CiAJdTggY2xpZW50SWQ7CiAJdTggc2JfaW5kZXhfbnVtYmVyczsKQEAgLTE0NjAsMTQgKzE0MzIsMTggQEAKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDQpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgNAorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweDc8PDUpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNQogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTE2IGJkX2J1ZmZfc2l6ZTsKLQl1MTYgbWNfYWxpZ25tZW50X3NpemU7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOworCXU4IG1jX2FsaWdubWVudF9sb2dfc2l6ZTsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBtY19hbGlnbm1lbnRfc2l6ZTsKKwl1OCBtY19hbGlnbm1lbnRfbG9nX3NpemU7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOwogCXUxNiBiZF9idWZmX3NpemU7CiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKQEAgLTE0NzksMTMgKzE0NTUsNyBAQAogCXU4IF9fbG9jYWxfYmRfcHJvZDsKIAl1OCBfX2xvY2FsX3NnZV9wcm9kOwogI2VuZGlmCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IF9fYmRfY29uczsKLQl1MTYgX19zZ2VfY29uczsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBfX3NnZV9jb25zOwotCXUxNiBfX2JkX2NvbnM7Ci0jZW5kaWYKKwl1MzIgcmVzZXJ2ZWQ7CiAJdTMyIGJkX3BhZ2VfYmFzZV9sbzsKIAl1MzIgYmRfcGFnZV9iYXNlX2hpOwogCXUzMiBzZ2VfcGFnZV9iYXNlX2xvOwpAQCAtMTQ5NiwxNiArMTQ2NiwxNiBAQAogICogVGhlIGV0aCBSeCBCdWZmZXIgRGVzY3JpcHRvcgogICovCiBzdHJ1Y3QgZXRoX3J4X2JkIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKIH07CiAKIC8qCiAgKiBUaGUgZXRoIFJ4IFNHRSBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfcnhfc2dlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKIH07CiAKIC8qCkBAIC0xNjk3LDcgKzE2NjcsNyBAQAogfTsKIAogLyoKLSAqIFRoZSBldGggYWdncmVnYXRpdmUgY29udGV4dCBzZWN0aW9uIG9mIFRzdG9ybQorICogVGhlIGV0aCBleHRyYSBhZ2dyZWdhdGl2ZSBjb250ZXh0IHNlY3Rpb24gb2YgVHN0b3JtCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX2V4dHJhX2FnX2NvbnRleHRfc2VjdGlvbiB7CiAJdTMyIF9fYWdnX3ZhbDE7CkBAIC0xOTA4LDExICsxODc4LDExIEBACiAgKiBUaGUgZXRoIFR4IEJ1ZmZlciBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfdHhfYmQgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOwotCXUxNiBuYmQ7Ci0JdTE2IG5ieXRlczsKLQl1MTYgdmxhbjsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKKwlfX2xlMTYgbmJkOworCV9fbGUxNiBuYnl0ZXM7CisJX19sZTE2IHZsYW47CiAJc3RydWN0IGV0aF90eF9iZF9mbGFncyBiZF9mbGFnczsKIAl1OCBnZW5lcmFsX2RhdGE7CiAjZGVmaW5lIEVUSF9UWF9CRF9IRFJfTkJEUyAoMHgzRjw8MCkKQEAgLTE5NTUsMTEgKzE5MjUsMTEgQEAKICNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX0NXUl9GTEdfU0hJRlQgNwogCXU4IGlwX2hsZW47CiAJczggY3Nfb2Zmc2V0OwotCXUxNiB0b3RhbF9obGVuOwotCXUxNiBsc29fbXNzOwotCXUxNiB0Y3BfcHNldWRvX2NzdW07Ci0JdTE2IGlwX2lkOwotCXUzMiB0Y3Bfc2VuZF9zZXE7CisJX19sZTE2IHRvdGFsX2hsZW47CisJX19sZTE2IGxzb19tc3M7CisJX19sZTE2IHRjcF9wc2V1ZG9fY3N1bTsKKwlfX2xlMTYgaXBfaWQ7CisJX19sZTMyIHRjcF9zZW5kX3NlcTsKIH07CiAKIC8qCkBAIC0yMDc1LDQ0ICsyMDQ1LDQ0IEBACiAgKiB1c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiB4c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB4c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiB0c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCkBAIC0yMTMxLDIyICsyMTAxLDIyIEBACiAgKiB1c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB1c3Rvcm1fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCkBAIC0yMTYyLDkgKzIxMzIsOSBAQAogICogVGhlIGRhdGEgZm9yIFJTUyBzZXR1cCByYW1yb2QKICAqLwogc3RydWN0IGV0aF9jbGllbnRfc2V0dXBfcmFtcm9kX2RhdGEgewotCXUzMiBjbGllbnRfaWRfNWI7Ci0JdTggaXNfcmRtYV8xYjsKLQl1OCByZXNlcnZlZDA7CisJdTMyIGNsaWVudF9pZDsKKwl1OCBpc19yZG1hOworCXU4IGlzX2Zjb2U7CiAJdTE2IHJlc2VydmVkMTsKIH07CiAKQEAgLTIyMTIsMTIgKzIxODIsMTIgQEAKICNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfTDRfWFNVTV9OT19WQUxJREFUSU9OX0ZMR19TSElGVCA3CiAJdTggcGxhY2VtZW50X29mZnNldDsKIAl1OCBxdWV1ZV9pbmRleDsKLQl1MzIgcnNzX2hhc2hfcmVzdWx0OwotCXUxNiB2bGFuX3RhZzsKLQl1MTYgcGt0X2xlbjsKLQl1MTYgbGVuX29uX2JkOworCV9fbGUzMiByc3NfaGFzaF9yZXN1bHQ7CisJX19sZTE2IHZsYW5fdGFnOworCV9fbGUxNiBwa3RfbGVuOworCV9fbGUxNiBsZW5fb25fYmQ7CiAJc3RydWN0IHBhcnNpbmdfZmxhZ3MgcGFyc19mbGFnczsKLQl1MTYgc2dsWzhdOworCV9fbGUxNiBzZ2xbOF07CiB9OwogCiAKQEAgLTIyMjUsNyArMjE5NSw3IEBACiAgKiBUaGUgZGF0YSBmb3IgUlNTIHNldHVwIHJhbXJvZAogICovCiBzdHJ1Y3QgZXRoX2hhbHRfcmFtcm9kX2RhdGEgewotCXUzMiBjbGllbnRfaWRfNWI7CisJdTMyIGNsaWVudF9pZDsKIAl1MzIgcmVzZXJ2ZWQwOwogfTsKIApAQCAtMjIzNiwxMSArMjIwNiwxMSBAQAogc3RydWN0IGV0aF9xdWVyeV9yYW1yb2RfZGF0YSB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTggcmVzZXJ2ZWQwOwotCXU4IGNvbGxlY3RfcG9ydF8xYjsKKwl1OCBjb2xsZWN0X3BvcnQ7CiAJdTE2IGRydl9jb3VudGVyOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGRydl9jb3VudGVyOwotCXU4IGNvbGxlY3RfcG9ydF8xYjsKKwl1OCBjb2xsZWN0X3BvcnQ7CiAJdTggcmVzZXJ2ZWQwOwogI2VuZGlmCiAJdTMyIGN0cl9pZF92ZWN0b3I7CkBAIC0yMjUxLDggKzIyMjEsOCBAQAogICogUGxhY2UgaG9sZGVyIGZvciByYW1yb2RzIHByb3RvY29sIHNwZWNpZmljIGRhdGEKICAqLwogc3RydWN0IHJhbXJvZF9kYXRhIHsKLQl1MzIgZGF0YV9sbzsKLQl1MzIgZGF0YV9oaTsKKwlfX2xlMzIgZGF0YV9sbzsKKwlfX2xlMzIgZGF0YV9oaTsKIH07CiAKIC8qCkBAIC0yMjY0LDE2ICsyMjM0LDYgQEAKIAogCiAvKgotICogUnggTGFzdCBCRCBpbiBwYWdlIChpbiBFVEgpCi0gKi8KLXN0cnVjdCBldGhfcnhfYmRfbmV4dF9wYWdlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKLQl1OCByZXNlcnZlZFs4XTsKLX07Ci0KLQotLyoKICAqIEV0aCBSeCBDcWUgc3RydWN0dXJlLSBnZW5lcmFsIHN0cnVjdHVyZSBmb3IgcmFtcm9kcwogICovCiBzdHJ1Y3QgY29tbW9uX3JhbXJvZF9ldGhfcnhfY3FlIHsKQEAgLTIyODIsMjQgKzIyNDIsMjQgQEAKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1RZUEVfU0hJRlQgMAogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwICgweDdGPDwxKQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwX1NISUZUIDEKLQl1OCBjb25uX3R5cGVfM2I7Ci0JdTE2IHJlc2VydmVkMTsKLQl1MzIgY29ubl9hbmRfY21kX2RhdGE7CisJdTggY29ubl90eXBlOworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIGNvbm5fYW5kX2NtZF9kYXRhOwogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEICgweEZGRkZGRjw8MCkKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NJRF9TSElGVCAwCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9DTURfSUQgKDB4RkY8PDI0KQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ01EX0lEX1NISUZUIDI0CiAJc3RydWN0IHJhbXJvZF9kYXRhIHByb3RvY29sX2RhdGE7Ci0JdTMyIHJlc2VydmVkMls0XTsKKwlfX2xlMzIgcmVzZXJ2ZWQyWzRdOwogfTsKIAogLyoKICAqIFJ4IExhc3QgQ1FFIGluIHBhZ2UgKGluIEVUSCkKICAqLwogc3RydWN0IGV0aF9yeF9jcWVfbmV4dF9wYWdlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKLQl1MzIgcmVzZXJ2ZWRbNl07CisJX19sZTMyIGFkZHJfbG87CisJX19sZTMyIGFkZHJfaGk7CisJX19sZTMyIHJlc2VydmVkWzZdOwogfTsKIAogLyoKQEAgLTIzMTYsMTcgKzIyNzYsMTcgQEAKICAqIGNvbW1vbiBkYXRhIGZvciBhbGwgcHJvdG9jb2xzCiAgKi8KIHN0cnVjdCBzcGVfaGRyIHsKLQl1MzIgY29ubl9hbmRfY21kX2RhdGE7CisJX19sZTMyIGNvbm5fYW5kX2NtZF9kYXRhOwogI2RlZmluZSBTUEVfSERSX0NJRCAoMHhGRkZGRkY8PDApCiAjZGVmaW5lIFNQRV9IRFJfQ0lEX1NISUZUIDAKICNkZWZpbmUgU1BFX0hEUl9DTURfSUQgKDB4RkY8PDI0KQogI2RlZmluZSBTUEVfSERSX0NNRF9JRF9TSElGVCAyNAotCXUxNiB0eXBlOworCV9fbGUxNiB0eXBlOwogI2RlZmluZSBTUEVfSERSX0NPTk5fVFlQRSAoMHhGRjw8MCkKICNkZWZpbmUgU1BFX0hEUl9DT05OX1RZUEVfU0hJRlQgMAogI2RlZmluZSBTUEVfSERSX0NPTU1PTl9SQU1ST0QgKDB4RkY8PDgpCiAjZGVmaW5lIFNQRV9IRFJfQ09NTU9OX1JBTVJPRF9TSElGVCA4Ci0JdTE2IHJlc2VydmVkOworCV9fbGUxNiByZXNlcnZlZDsKIH07CiAKIC8qCkBAIC0yMzU1LDkgKzIzMTUsOSBAQAogICogZG9vcmJlbGwgZGF0YSBpbiBob3N0IG1lbW9yeQogICovCiBzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEgewotCXUzMiBwYWNrZXRzX3Byb2Q7Ci0JdTE2IGJkc19wcm9kOwotCXUxNiByZXNlcnZlZDsKKwlfX2xlMzIgcGFja2V0c19wcm9kOworCV9fbGUxNiBiZHNfcHJvZDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiB9OwogCiAKQEAgLTIzNzcsMTQgKzIzMzcsMTYgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFlfU0hJRlQgMgogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgKDB4MTw8MykKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZX1NISUZUIDMKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEUgKDB4MTw8NCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEVfU0hJRlQgNAotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDUKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDYpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA2Ci0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRkY8PDcpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERSAoMHg3PDw0KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREVfU0hJRlQgNAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NykKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDgpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA4CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU0gKDB4MTw8OSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTV9TSElGVCA5CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgzRjw8MTApCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMAogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGNvbmZpZ19mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkgKDB4MTw8MCkKQEAgLTIzOTUsMTQgKzIzNTcsMTYgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFlfU0hJRlQgMgogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgKDB4MTw8MykKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZX1NISUZUIDMKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEUgKDB4MTw8NCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEVfU0hJRlQgNAotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDUKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDYpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA2Ci0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRkY8PDcpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERSAoMHg3PDw0KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREVfU0hJRlQgNAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NykKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDgpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA4CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU0gKDB4MTw8OSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTV9TSElGVCA5CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgzRjw8MTApCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMAogCXU4IHJzc19yZXN1bHRfbWFzazsKIAl1OCBsZWFkaW5nX2NsaWVudF9pZDsKICNlbmRpZgpAQCAtMjQyMiw3ICsyMzg2LDcgQEAKICAqIE1BQyBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbiBjb21tYW5kIGhlYWRlcgogICovCiBzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25faGRyIHsKLQl1OCBsZW5ndGhfNmI7CisJdTggbGVuZ3RoOwogCXU4IG9mZnNldDsKIAl1MTYgY2xpZW50X2lkOwogCXUzMiByZXNlcnZlZDE7CkBAIC0yNDMyLDEwICsyMzk2LDEwIEBACiAgKiBNQUMgYWRkcmVzcyBpbiBsaXN0IGZvciByYW1yb2QKICAqLwogc3RydWN0IHRzdG9ybV9jYW1fZW50cnkgewotCXUxNiBsc2JfbWFjX2FkZHI7Ci0JdTE2IG1pZGRsZV9tYWNfYWRkcjsKLQl1MTYgbXNiX21hY19hZGRyOwotCXUxNiBmbGFnczsKKwlfX2xlMTYgbHNiX21hY19hZGRyOworCV9fbGUxNiBtaWRkbGVfbWFjX2FkZHI7CisJX19sZTE2IG1zYl9tYWNfYWRkcjsKKwlfX2xlMTYgZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9DQU1fRU5UUllfUE9SVF9JRCAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fQ0FNX0VOVFJZX1BPUlRfSURfU0hJRlQgMAogI2RlZmluZSBUU1RPUk1fQ0FNX0VOVFJZX1JTUlZWQUwwICgweDc8PDEpCkBAIC0yNDg0LDExICsyNDQ4LDExIEBACiAgKiBNQUMgYWRkcmVzcyBpbiBsaXN0IGZvciByYW1yb2QKICAqLwogc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2VudHJ5X2UxaCB7Ci0JdTE2IGxzYl9tYWNfYWRkcjsKLQl1MTYgbWlkZGxlX21hY19hZGRyOwotCXUxNiBtc2JfbWFjX2FkZHI7Ci0JdTE2IHZsYW5faWQ7Ci0JdTE2IGUxaG92X2lkOworCV9fbGUxNiBsc2JfbWFjX2FkZHI7CisJX19sZTE2IG1pZGRsZV9tYWNfYWRkcjsKKwlfX2xlMTYgbXNiX21hY19hZGRyOworCV9fbGUxNiB2bGFuX2lkOworCV9fbGUxNiBlMWhvdl9pZDsKIAl1OCBjbGllbnRfaWQ7CiAJdTggZmxhZ3M7CiAjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9QT1JUICgweDE8PDApCkBAIC0yNTQ0LDI0ICsyNTA4LDI4IEBACiAjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMSAoMHhGRkY8PDQpCiAjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMV9TSElGVCA0CiAJdTE2IGNvbmZpZ19mbGFnczsKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEUgKDB4MTw8MCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEVfU0hJRlQgMAotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDEKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwyKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDIKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweDFGRkY8PDMpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAzCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEUgKDB4MTw8MCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRV9TSElGVCAwCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFICgweDE8PDEpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFX1NISUZUIDEKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDIpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAyCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHhGRkY8PDQpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgY29uZmlnX2ZsYWdzOwotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRSAoMHgxPDwwKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRV9TSElGVCAwCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwxKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDIpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMgotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4MUZGRjw8MykKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDMKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRSAoMHgxPDwwKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFX1NISUZUIDAKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEUgKDB4MTw8MSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEVfU0hJRlQgMQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MikKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwzKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweEZGRjw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKIAl1MTYgZHJvcF9mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfSVBfQ1NfRVJSICgweDE8PDApCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX0lQX0NTX0VSUl9TSElGVCAwCkBAIC0yNTk0LDI4ICsyNTYyLDcgQEAKIAogCiAvKgotICogVGhyZWUgUlggcHJvZHVjZXJzIGZvciBFVEgKLSAqLwotc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgYmRfcHJvZDsKLQl1MTYgY3FlX3Byb2Q7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgY3FlX3Byb2Q7Ci0JdTE2IGJkX3Byb2Q7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTE2IHNnZV9wcm9kOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IHNnZV9wcm9kOwotCXUxNiByZXNlcnZlZDsKLSNlbmRpZgotfTsKLQotCi0vKgotICogY29tbW9uIGZsYWcgdG8gaW5kaWNhdGUgZXhpc3RlbmNlIG9mIFRQQS4KKyAqIGNvbW1vbiBmbGFnIHRvIGluZGljYXRlIGV4aXN0YW5jZSBvZiBUUEEuCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX3RwYV9leGlzdCB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCkBAIC0yNjMyLDIxICsyNTc5LDc5IEBACiAKIAogLyoKKyAqIHJ4IHJpbmdzIHBhdXNlIGRhdGEgZm9yIEUxaCBvbmx5CisgKi8KK3N0cnVjdCB1c3Rvcm1fZXRoX3J4X3BhdXNlX2RhdGFfZTFoIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgYmRfdGhyX2xvdzsKKwl1MTYgY3FlX3Rocl9sb3c7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Rocl9sb3c7CisJdTE2IGJkX3Rocl9sb3c7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgY29zOworCXUxNiBzZ2VfdGhyX2xvdzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfdGhyX2xvdzsKKwl1MTYgY29zOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGJkX3Rocl9oaWdoOworCXUxNiBjcWVfdGhyX2hpZ2g7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Rocl9oaWdoOworCXUxNiBiZF90aHJfaGlnaDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiByZXNlcnZlZDA7CisJdTE2IHNnZV90aHJfaGlnaDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfdGhyX2hpZ2g7CisJdTE2IHJlc2VydmVkMDsKKyNlbmRpZgorfTsKKworCisvKgorICogVGhyZWUgUlggcHJvZHVjZXJzIGZvciBFVEgKKyAqLworc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgYmRfcHJvZDsKKwl1MTYgY3FlX3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Byb2Q7CisJdTE2IGJkX3Byb2Q7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgcmVzZXJ2ZWQ7CisJdTE2IHNnZV9wcm9kOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHNnZV9wcm9kOworCXUxNiByZXNlcnZlZDsKKyNlbmRpZgorfTsKKworCisvKgogICogcGVyLXBvcnQgU0FGQyBkZW1vIHZhcmlhYmxlcwogICovCiBzdHJ1Y3QgY21uZ19mbGFnc19wZXJfcG9ydCB7CiAJdTggY29uX251bWJlcltOVU1fT0ZfUFJPVE9DT0xTXTsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1OCBmYWlybmVzc19lbmFibGU7Ci0JdTggcmF0ZV9zaGFwaW5nX2VuYWJsZTsKLQl1OCBjbW5nX3Byb3RvY29sX2VuYWJsZTsKLQl1OCBjbW5nX3ZuX2VuYWJsZTsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IGNtbmdfdm5fZW5hYmxlOwotCXU4IGNtbmdfcHJvdG9jb2xfZW5hYmxlOwotCXU4IHJhdGVfc2hhcGluZ19lbmFibGU7Ci0JdTggZmFpcm5lc3NfZW5hYmxlOwotI2VuZGlmCisJdTMyIGNtbmdfZW5hYmxlczsKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTiAoMHgxPDwwKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1ZOX1NISUZUIDAKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk4gKDB4MTw8MSkKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk5fU0hJRlQgMQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1BST1RPQ09MICgweDE8PDIpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfUFJPVE9DT0xfU0hJRlQgMgorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19QUk9UT0NPTCAoMHgxPDwzKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19QUk9UT0NPTF9TSElGVCAzCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfQ09TICgweDE8PDQpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfQ09TX1NISUZUIDQKKyNkZWZpbmUgX19DTU5HX0ZMQUdTX1BFUl9QT1JUX1JFU0VSVkVEMCAoMHg3RkZGRkZGPDw1KQorI2RlZmluZSBfX0NNTkdfRkxBR1NfUEVSX1BPUlRfUkVTRVJWRUQwX1NISUZUIDUKIH07CiAKIApAQCAtMjY3NCwxNSArMjY3OSwxNSBAQAogICovCiBzdHJ1Y3Qgc2FmY19zdHJ1Y3RfcGVyX3BvcnQgewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBfX3Jlc2VydmVkMDsKLQl1OCBjdXJfY29zX3R5cGVzOworCXUxNiBfX3Jlc2VydmVkMTsKKwl1OCBfX3Jlc2VydmVkMDsKIAl1OCBzYWZjX3RpbWVvdXRfdXNlYzsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXU4IHNhZmNfdGltZW91dF91c2VjOwotCXU4IGN1cl9jb3NfdHlwZXM7Ci0JdTE2IF9fcmVzZXJ2ZWQwOworCXU4IF9fcmVzZXJ2ZWQwOworCXUxNiBfX3Jlc2VydmVkMTsKICNlbmRpZgotCXU4IGNvc190b19wcm90b2NvbFtNQVhfQ09TX05VTUJFUl07CisJdTE2IGNvc190b19wYXVzZV9tYXNrW05VTV9PRl9TQUZDX0JJVFNdOwogfTsKIAogCkBAIC0yNzAyLDE2ICsyNzA3LDE2IEBACiAgKi8KIHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyB7CiAJc3RydWN0IHJlZ3BhaXIgdG90YWxfc2VudF9ieXRlczsKLQl1MzIgdG90YWxfc2VudF9wa3RzOwotCXUzMiB1bmljYXN0X3BrdHNfc2VudDsKKwlfX2xlMzIgdG90YWxfc2VudF9wa3RzOworCV9fbGUzMiB1bmljYXN0X3BrdHNfc2VudDsKIAlzdHJ1Y3QgcmVncGFpciB1bmljYXN0X2J5dGVzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgbXVsdGljYXN0X2J5dGVzX3NlbnQ7Ci0JdTMyIG11bHRpY2FzdF9wa3RzX3NlbnQ7Ci0JdTMyIGJyb2FkY2FzdF9wa3RzX3NlbnQ7CisJX19sZTMyIG11bHRpY2FzdF9wa3RzX3NlbnQ7CisJX19sZTMyIGJyb2FkY2FzdF9wa3RzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgYnJvYWRjYXN0X2J5dGVzX3NlbnQ7Ci0JdTE2IHN0YXRzX2NvdW50ZXI7Ci0JdTE2IHJlc2VydmVkMDsKLQl1MzIgcmVzZXJ2ZWQxOworCV9fbGUxNiBzdGF0c19jb3VudGVyOworCV9fbGUxNiByZXNlcnZlZDA7CisJX19sZTMyIHJlc2VydmVkMTsKIH07CiAKIApAQCAtMjcyNywxMCArMjczMiwxMCBAQAogICogUHJvdG9jb2wtY29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBUc3Rvcm0gKHBlciBwb3J0KQogICovCiBzdHJ1Y3QgdHN0b3JtX3Blcl9wb3J0X3N0YXRzIHsKLQl1MzIgbWFjX2ZpbHRlcl9kaXNjYXJkOwotCXUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7Ci0JdTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOwotCXUzMiBtYWNfZGlzY2FyZDsKKwlfX2xlMzIgbWFjX2ZpbHRlcl9kaXNjYXJkOworCV9fbGUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7CisJX19sZTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOworCV9fbGUzMiBtYWNfZGlzY2FyZDsKIH07CiAKIApAQCAtMjc0MywxNyArMjc0OCwxNyBAQAogCXN0cnVjdCByZWdwYWlyIHJjdl9icm9hZGNhc3RfYnl0ZXM7CiAJc3RydWN0IHJlZ3BhaXIgcmN2X211bHRpY2FzdF9ieXRlczsKIAlzdHJ1Y3QgcmVncGFpciByY3ZfZXJyb3JfYnl0ZXM7Ci0JdTMyIGNoZWNrc3VtX2Rpc2NhcmQ7Ci0JdTMyIHBhY2tldHNfdG9vX2JpZ19kaXNjYXJkOwotCXUzMiB0b3RhbF9yY3ZfcGt0czsKLQl1MzIgcmN2X3VuaWNhc3RfcGt0czsKLQl1MzIgcmN2X2Jyb2FkY2FzdF9wa3RzOwotCXUzMiByY3ZfbXVsdGljYXN0X3BrdHM7Ci0JdTMyIG5vX2J1ZmZfZGlzY2FyZDsKLQl1MzIgdHRsMF9kaXNjYXJkOwotCXUxNiBzdGF0c19jb3VudGVyOwotCXUxNiByZXNlcnZlZDA7Ci0JdTMyIHJlc2VydmVkMTsKKwlfX2xlMzIgY2hlY2tzdW1fZGlzY2FyZDsKKwlfX2xlMzIgcGFja2V0c190b29fYmlnX2Rpc2NhcmQ7CisJX19sZTMyIHRvdGFsX3Jjdl9wa3RzOworCV9fbGUzMiByY3ZfdW5pY2FzdF9wa3RzOworCV9fbGUzMiByY3ZfYnJvYWRjYXN0X3BrdHM7CisJX19sZTMyIHJjdl9tdWx0aWNhc3RfcGt0czsKKwlfX2xlMzIgbm9fYnVmZl9kaXNjYXJkOworCV9fbGUzMiB0dGwwX2Rpc2NhcmQ7CisJX19sZTE2IHN0YXRzX2NvdW50ZXI7CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMzIgcmVzZXJ2ZWQxOwogfTsKIAogLyoKQEAgLTI3NjUsMTEgKzI3NzAsMzMgQEAKIH07CiAKIC8qCisgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFVzdG9ybSAocGVyIGNsaWVudCkKKyAqLworc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzIHsKKwlzdHJ1Y3QgcmVncGFpciB1Y2FzdF9ub19idWZmX2J5dGVzOworCXN0cnVjdCByZWdwYWlyIG1jYXN0X25vX2J1ZmZfYnl0ZXM7CisJc3RydWN0IHJlZ3BhaXIgYmNhc3Rfbm9fYnVmZl9ieXRlczsKKwlfX2xlMzIgdWNhc3Rfbm9fYnVmZl9wa3RzOworCV9fbGUzMiBtY2FzdF9ub19idWZmX3BrdHM7CisJX19sZTMyIGJjYXN0X25vX2J1ZmZfcGt0czsKKwlfX2xlMTYgc3RhdHNfY291bnRlcjsKKwlfX2xlMTYgcmVzZXJ2ZWQwOworfTsKKworLyoKKyAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgVXN0b3JtCisgKi8KK3N0cnVjdCB1c3Rvcm1fY29tbW9uX3N0YXRzIHsKKyBzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgY2xpZW50X3N0YXRpc3RpY3NbTUFYX1VfU1RBVF9DT1VOVEVSX0lEXTsKK307CisKKy8qCiAgKiBFdGggc3RhdGlzdGljcyBxdWVyeSBzdHJ1Y3R1cmUgZm9yIHRoZSBldGhfc3RhdHNfcXVlcnkgcmFtcm9kCiAgKi8KIHN0cnVjdCBldGhfc3RhdHNfcXVlcnkgewogCXN0cnVjdCB4c3Rvcm1fY29tbW9uX3N0YXRzIHhzdG9ybV9jb21tb247CiAJc3RydWN0IHRzdG9ybV9jb21tb25fc3RhdHMgdHN0b3JtX2NvbW1vbjsKKwlzdHJ1Y3QgdXN0b3JtX2NvbW1vbl9zdGF0cyB1c3Rvcm1fY29tbW9uOwogfTsKIAogCkBAIC0yNzc3LDYgKzI4MDQsNyBAQAogICogcGVyLXZuaWMgZmFpcm5lc3MgdmFyaWFibGVzCiAgKi8KIHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92biB7CisJdTMyIGNvc19jcmVkaXRfZGVsdGFbTUFYX0NPU19OVU1CRVJdOwogCXUzMiBwcm90b2NvbF9jcmVkaXRfZGVsdGFbTlVNX09GX1BST1RPQ09MU107CiAJdTMyIHZuX2NyZWRpdF9kZWx0YTsKIAl1MzIgX19yZXNlcnZlZDA7CkBAIC0yNzg4LDEzICsyODE2LDE1IEBACiAgKi8KIHN0cnVjdCBmd192ZXJzaW9uIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcGF0Y2g7Ci0JdTggcHJpbWFyeTsKLQl1OCBjbGllbnQ7CisJdTggZW5naW5lZXJpbmc7CisJdTggcmV2aXNpb247CisJdTggbWlub3I7CisJdTggbWFqb3I7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1OCBjbGllbnQ7Ci0JdTggcHJpbWFyeTsKLQl1MTYgcGF0Y2g7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcmV2aXNpb247CisJdTggZW5naW5lZXJpbmc7CiAjZW5kaWYKIAl1MzIgZmxhZ3M7CiAjZGVmaW5lIEZXX1ZFUlNJT05fT1BUSU1JWkVEICgweDE8PDApCkBAIC0yODEyLDkgKzI4NDIsMTAgQEAKICAqIEZXIHZlcnNpb24gc3RvcmVkIGluIGZpcnN0IGxpbmUgb2YgcHJhbQogICovCiBzdHJ1Y3QgcHJhbV9md192ZXJzaW9uIHsKLQl1OCBjbGllbnQ7Ci0JdTggcHJpbWFyeTsKLQl1MTYgcGF0Y2g7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcmV2aXNpb247CisJdTggZW5naW5lZXJpbmc7CiAJdTggZmxhZ3M7CiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9PUFRJTUlaRUQgKDB4MTw8MCkKICNkZWZpbmUgUFJBTV9GV19WRVJTSU9OX09QVElNSVpFRF9TSElGVCAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0LmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKaW5kZXggM2IwYzI0OS4uMzliYTI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2luaXQuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyLDEyICsyMiwxNSBAQAogI2RlZmluZSBJTklUX0FTSUMJCQkweDQKICNkZWZpbmUgSU5JVF9IQVJEV0FSRQkJCTB4NwogCi0jZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxCQkoMHg1ODAwIC8gNCkKLSNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTFICQkoMHgxMDAwMCAvIDQpCi0jZGVmaW5lIFRTVE9STV9JTlRNRU1fQUREUgkJMHgxYTAwMDAKLSNkZWZpbmUgQ1NUT1JNX0lOVE1FTV9BRERSCQkweDIyMDAwMAotI2RlZmluZSBYU1RPUk1fSU5UTUVNX0FERFIJCTB4MmEwMDAwCi0jZGVmaW5lIFVTVE9STV9JTlRNRU1fQUREUgkJMHgzMjAwMDAKKyNkZWZpbmUgVFNUT1JNX0lOVE1FTV9BRERSCQlUU0VNX1JFR19GQVNUX01FTU9SWQorI2RlZmluZSBDU1RPUk1fSU5UTUVNX0FERFIJCUNTRU1fUkVHX0ZBU1RfTUVNT1JZCisjZGVmaW5lIFhTVE9STV9JTlRNRU1fQUREUgkJWFNFTV9SRUdfRkFTVF9NRU1PUlkKKyNkZWZpbmUgVVNUT1JNX0lOVE1FTV9BRERSCQlVU0VNX1JFR19GQVNUX01FTU9SWQorLyogUkFNMCBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxCQkweDU4MDAKKyNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTFICQkweDEwMDAwCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFKGJwKQkoKENISVBfSVNfRTFIKGJwKSA/IFNUT1JNX0lOVE1FTV9TSVpFX0UxSCA6IFwKKwkJCQkJCSAgICBTVE9STV9JTlRNRU1fU0laRV9FMSkgLyA0KQogCiAKIC8qIEluaXQgb3BlcmF0aW9uIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzICovCkBAIC0xNjcsMjEgKzE3MCwyNCBAQAogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ZpbGwoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGludCBmaWxsLCB1MzIgbGVuKQogewotCWlmICgobGVuICogNCkgPiBGV19CVUZfU0laRSkgewotCQlCTlgyWF9FUlIoIkxBUkdFIERNQUUgT1BFUkFUSU9OICEgYWRkciAweCV4ICBsZW4gMHgleFxuIiwKLQkJCSAgYWRkciwgbGVuKjQpOwotCQlyZXR1cm47Ci0JfQotCW1lbXNldChicC0+Z3VuemlwX2J1ZiwgZmlsbCwgbGVuICogNCk7CisJdTMyIGJ1Zl9sZW4gPSAoKChsZW4gKiA0KSA+IEZXX0JVRl9TSVpFKSA/IEZXX0JVRl9TSVpFIDogKGxlbiAqIDQpKTsKKwl1MzIgYnVmX2xlbjMyID0gYnVmX2xlbiAvIDQ7CisJaW50IGk7CiAKLQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyLCBsZW4pOworCW1lbXNldChicC0+Z3VuemlwX2J1ZiwgZmlsbCwgYnVmX2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IGJ1Zl9sZW4zMikgeworCQl1MzIgY3VyX2xlbiA9IG1pbihidWZfbGVuMzIsIGxlbiAtIGkpOworCisJCWJueDJ4X3dyaXRlX2JpZ19idWYoYnAsIGFkZHIgKyBpICogNCwgY3VyX2xlbik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3dyXzY0KHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgIHUzMiBsZW42NCkKIHsKLQl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUvNDsKLQl1MzIgbGVuID0gbGVuNjQqMjsKKwl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUgLyA0OworCXUzMiBsZW4gPSBsZW42NCAqIDI7CiAJdTY0IGRhdGE2NCA9IDA7CiAJaW50IGk7CiAKQEAgLTI3MCw2ICsyNzYsOSBAQAogCQlyYyA9IGJueDJ4X2d1bnppcChicCwgKHU4ICopZGF0YSwgbGVuKTsKIAkJaWYgKHJjKSB7CiAJCQlCTlgyWF9FUlIoImd1bnppcCBmYWlsZWQgISByYyAlZFxuIiwgcmMpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkJa2ZyZWUodGVtcCk7CisjZW5kaWYKIAkJCXJldHVybjsKIAkJfQogCQlsZW4gPSBicC0+Z3VuemlwX291dGxlbjsKQEAgLTQyMiw1NyArNDMxLDU3IEBACiAKIC8qIGRlcml2ZWQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCByZWFkIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgcmVhZF9hcmJfZGF0YVtOVU1fUkRfUV1bTUFYX1JEX09SRCArIDFdID0gewotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDI1fSwgezMyICwgNjQgLCAyNX0sIHs2NCAsIDY0ICwgNDF9IH0sCi0Je3s0ICwgOCAsIDR9LCAgIHs0ICwgOCAsIDR9LCAgICB7NCAsIDggLCA0fSwgICAgezQgLCA4ICwgNH0gfSwKLQl7ezQgLCAzICwgM30sICAgezQgLCAzICwgM30sICAgIHs0ICwgMyAsIDN9LCAgICB7NCAsIDMgLCAzfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezE2ICwgMyAsIDExfSwgIHsxNiAsIDMgLCAxMX0gfSwKLQl7ezggLCA2NCAsIDI1fSwgezE2ICwgNjQgLCAyNX0sIHszMiAsIDY0ICwgMjV9LCB7NjQgLCA2NCAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7NjQgLCAzICwgNDF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezY0ICwgMyAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgNDF9LCB7MzIgLCA2NCAsIDgxfSwgezY0ICwgNjQgLCAxMjB9IH0KKy8qIDEgKi8JeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgMjV9LCB7MzIsIDY0LCAyNX0sIHs2NCwgNjQsIDQxfSB9LAorCXsgezQsIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0sICB7NCwgIDgsICA0fSAgfSwKKwl7IHs0LCAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9LCAgezQsICAzLCAgM30gIH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0sIHsxNiwgMywgIDExfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisvKiAxMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKy8qIDIwICoveyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0sIHs2NCwgNjQsIDEyMH0gfQogfTsKIAogLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHdyaXRlIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2RhdGFbTlVNX1dSX1FdW01BWF9XUl9PUkQgKyAxXSA9IHsKLQl7ezQgLCA2ICwgM30sICAgezQgLCA2ICwgM30sICAgIHs0ICwgNiAsIDN9IH0sCi0Je3s0ICwgMiAsIDN9LCAgIHs0ICwgMiAsIDN9LCAgICB7NCAsIDIgLCAzfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezE2ICwgMiAsIDExfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDI1fSwgezMyICwgNjQgLCAyNX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHsxNiAsIDIgLCAxMX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHsxNiAsIDIgLCAxMX0gfSwKLQl7ezggLCA5ICwgNn0sICAgezE2ICwgOSAsIDExfSwgIHszMiAsIDkgLCAyMX0gfSwKLQl7ezggLCA0NyAsIDE5fSwgezE2ICwgNDcgLCAxOX0sIHszMiAsIDQ3ICwgMjF9IH0sCi0Je3s4ICwgOSAsIDZ9LCAgIHsxNiAsIDkgLCAxMX0sICB7MTYgLCA5ICwgMTF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgNDF9LCB7MzIgLCA2NCAsIDgxfSB9CisvKiAxICovCXsgezQsIDYsICAzfSwgIHs0LCAgNiwgIDN9LCAgezQsICA2LCAgM30gfSwKKwl7IHs0LCAyLCAgM30sICB7NCwgIDIsICAzfSwgIHs0LCAgMiwgIDN9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezE2LCAyLCAgMTF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKy8qIDEwICoveyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MzIsIDksICAyMX0gfSwKKwl7IHs4LCA0NywgMTl9LCB7MTYsIDQ3LCAxOX0sIHszMiwgNDcsIDIxfSB9LAorCXsgezgsIDksICA2fSwgIHsxNiwgOSwgIDExfSwgezE2LCA5LCAgMTF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0gfQogfTsKIAogLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciByZWFkIHF1ZXVlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9hZGRyW05VTV9SRF9RLTFdID0gewotCXtQWFAyX1JFR19SUV9CV19SRF9MMCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMCwKKy8qIDEgKi8Je1BYUDJfUkVHX1JRX0JXX1JEX0wwLCBQWFAyX1JFR19SUV9CV19SRF9BREQwLAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQwfSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMX0sCkBAIC00OTAsNyArNDk5LDcgQEAKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUI3fSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDgsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOH0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAorLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDksIFBYUDJfUkVHX1BTV1JRX0JXX0FERDksCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOX0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wxMCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTAsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LApAQCAtNTEwLDcgKzUxOSw3IEBACiAJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE3fSwKIAl7UFhQMl9SRUdfUlFfQldfUkRfTDE4LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOCwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTh9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMTksIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE5LAorLyogMjAgKi97UFhQMl9SRUdfUlFfQldfUkRfTDE5LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOSwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTl9LAogCXtQWFAyX1JFR19SUV9CV19SRF9MMjAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDIwLAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyMH0sCkBAIC01MzIsNyArNTQxLDcgQEAKIAogLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciB3cml0ZSBxdWV1ZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2FkZHJbTlVNX1dSX1EtMV0gPSB7Ci0Je1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAorLyogMSAqLwl7UFhQMl9SRUdfUFNXUlFfQldfTDEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMX0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wyLCBQWFAyX1JFR19QU1dSUV9CV19BREQyLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjJ9LApAQCAtNTUwLDcgKzU1OSw3IEBACiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LAogCXtQWFAyX1JFR19QU1dSUV9CV19MMTEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDExLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjExfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDI4LCBQWFAyX1JFR19QU1dSUV9CV19BREQyOCwKKy8qIDEwICove1BYUDJfUkVHX1BTV1JRX0JXX0wyOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMjgsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMjh9LAogCXtQWFAyX1JFR19SUV9CV19XUl9MMjksIFBYUDJfUkVHX1JRX0JXX1dSX0FERDI5LAogCQlQWFAyX1JFR19SUV9CV19XUl9VQk9VTkQyOX0sCkBAIC01NjgsNyArNTc3LDEyIEBACiAJCQkgICAgIGJwLT5wY2llX2NhcCArIFBDSV9FWFBfREVWQ1RMLCAmZGV2Y3RsKTsKIAlEUChORVRJRl9NU0dfSFcsICJyZWFkIDB4JXggZnJvbSBkZXZjdGxcbiIsIGRldmN0bCk7CiAJd19vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNSk7Ci0Jcl9vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7CisJaWYgKGJwLT5tcnJzID09IC0xKQorCQlyX29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEpID4+IDEyKTsKKwllbHNlIHsKKwkJRFAoTkVUSUZfTVNHX0hXLCAiZm9yY2UgcmVhZCBvcmRlciB0byAlZFxuIiwgYnAtPm1ycnMpOworCQlyX29yZGVyID0gYnAtPm1ycnM7CisJfQogCiAJaWYgKHJfb3JkZXIgPiBNQVhfUkRfT1JEKSB7CiAJCURQKE5FVElGX01TR19IVywgInJlYWQgb3JkZXIgb2YgJWQgIG9yZGVyIGFkanVzdGVkIHRvICVkXG4iLApAQCAtNjQzLDE3ICs2NTcsMTggQEAKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1VTRE1EUF9USCwgKDB4MTggPDwgd19vcmRlcikpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0hDX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9YU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9RTV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVE1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1NSQ19NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfREJHX01QUywgd19vcmRlcisxKTsKKwkJdmFsID0gKCh3X29yZGVyID09IDApID8gMiA6IDMpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0hDX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9YU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9RTV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVE1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1NSQ19NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfREJHX01QUywgdmFsKTsKIAkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9ETUFFX01QUywgMik7IC8qIERNQUUgaXMgc3BlY2lhbCAqLwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0NEVV9NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfQ0RVX01QUywgdmFsKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oCmluZGV4IDk3NTViZjYuLjFmMjJjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaApAQCAtMSw3ICsxLDIzIEBACiAjaWZuZGVmIF9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fCiAjZGVmaW5lIF9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fCiAKLS8qIFRoaXMgYXJyYXkgY29udGFpbnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY2hpcC4KKy8qIGJueDJ4X2luaXRfdmFsdWVzLmg6IEJyb2FkY29tIE5YMiAxMEcgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGV4Y2VwdCBhcyBub3RlZCBiZWxvdy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICoKKyAqCisgKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGluaXRpYWxpemUgdGhlIGNoaXAuCiAgKgogICogRm9yIGVhY2ggYmxvY2sgaW4gdGhlIGNoaXAgdGhlcmUgYXJlIHRocmVlIGluaXQgc3RhZ2VzOgogICogY29tbW9uIC0gSFcgdXNlZCBieSBib3RoIHBvcnRzLApAQCAtNDcsMTIgKzYzLDE2IEBACiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMSwgMHgxMDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMiwgMHgyMDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMywgMHgzMDEwMDAwMH0sCi0Je09QX1pSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9XUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80LCAweDQwMTAwMDAwfSwKKwl7T1BfWlJfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNSwgMHgzfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8wLCAweDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMSwgMHgxMjE0MDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMiwgMHgyMjE0MDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMywgMHgzMjE0MDAwMH0sCi0Je09QX1pSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9XUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80LCAweDQyMTQwMDAwfSwKKwl7T1BfWlJfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNSwgMHgzfSwKIAl7T1BfUkQsIFBSU19SRUdfTlVNX09GX1BBQ0tFVFMsIDB4MH0sCiAJe09QX1JELCBQUlNfUkVHX05VTV9PRl9DRkNfRkxVU0hfTUVTU0FHRVMsIDB4MH0sCiAJe09QX1JELCBQUlNfUkVHX05VTV9PRl9UUkFOU1BBUkVOVF9GTFVTSF9NRVNTQUdFUywgMHgwfSwKQEAgLTcxLDE1ICs5MSwxNiBAQAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzEsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzIsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzMsIDB4M2Z9LAotCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzQsIDB4MH0sCisJe09QX1dSX0UxLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNCwgMHgwfSwKKwl7T1BfV1JfRTFILCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNCwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNSwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNiwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNywgMHgzZn0sCi0jZGVmaW5lIFBSU19DT01NT05fRU5EICAgICAgICAgIDQ3Ci0jZGVmaW5lIFNSQ0hfQ09NTU9OX1NUQVJUICAgICAgIDQ3CisjZGVmaW5lIFBSU19DT01NT05fRU5EICAgICAgICAgIDUyCisjZGVmaW5lIFNSQ0hfQ09NTU9OX1NUQVJUICAgICAgIDUyCiAJe09QX1dSX0UxSCwgU1JDX1JFR19FMUhNRl9FTkFCTEUsIDB4MX0sCi0jZGVmaW5lIFNSQ0hfQ09NTU9OX0VORCAgICAgICAgIDQ4Ci0jZGVmaW5lIFRTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ4CisjZGVmaW5lIFNSQ0hfQ09NTU9OX0VORCAgICAgICAgIDUzCisjZGVmaW5lIFRTRE1fQ09NTU9OX1NUQVJUICAgICAgIDUzCiAJe09QX1dSX0UxLCBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NDExfSwKIAl7T1BfV1JfRTFILCBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4MjExfSwKIAl7T1BfV1JfRTEsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NDAwfSwKQEAgLTkyLDEwICsxMTMsMTUgQEAKIAl7T1BfV1IsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDEsIDB4ZmZmZn0sCiAJe09QX1dSLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgyLCAweGZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMywgMHhmZmZmfSwKLQl7T1BfWlIsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAsIDB4MjB9LAorCXtPUF9XUl9FMUgsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMSwgMHgwfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMiwgMHgzNH0sCiAJe09QX1dSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMsIDB4MzV9LAotCXtPUF9aUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDdjfSwKKwl7T1BfWlJfRTEsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHg3Y30sCisJe09QX1pSX0UxSCwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDFjfSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19BR0dfSU5UX1RfMCwgMHgxfSwKKwl7T1BfWlJfRTFILCBUU0RNX1JFR19BR0dfSU5UX1RfMSwgMHg1Zn0sCiAJe09QX1dSLCBUU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfRU5BQkxFX0lOMiwgMHgzZn0sCiAJe09QX1dSLCBUU0RNX1JFR19FTkFCTEVfT1VUMSwgMHg3ZmZmZmZmfSwKQEAgLTExOCw4ICsxNDQsOCBAQAogCXtPUF9XUl9BU0lDLCBUU0RNX1JFR19USU1FUl9USUNLLCAweDNlOH0sCiAJe09QX1dSX0VNVUwsIFRTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4MX0sCiAJe09QX1dSX0ZQR0EsIFRTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4YX0sCi0jZGVmaW5lIFRTRE1fQ09NTU9OX0VORCAgICAgICAgIDg2Ci0jZGVmaW5lIFRDTV9DT01NT05fU1RBUlQgICAgICAgIDg2CisjZGVmaW5lIFRTRE1fQ09NTU9OX0VORCAgICAgICAgIDk2CisjZGVmaW5lIFRDTV9DT01NT05fU1RBUlQgICAgICAgIDk2CiAJe09QX1dSLCBUQ01fUkVHX1hYX01BWF9MTF9TWiwgMHgyMH0sCiAJe09QX1dSLCBUQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBUQ01fUkVHX1RRTV9UQ01fSERSX1AsIDB4MjE1MDAyMH0sCkBAIC0xMjksMTAgKzE1NSwxNiBAQAogCXtPUF9XUiwgVENNX1JFR19FUlJfRVZOVF9JRCwgMHgzM30sCiAJe09QX1dSLCBUQ01fUkVHX0VYUFJfRVZOVF9JRCwgMHgzMH0sCiAJe09QX1dSLCBUQ01fUkVHX1NUT1BfRVZOVF9JRCwgMHgzMX0sCi0Je09QX1dSLCBUQ01fUkVHX1BSU19XRUlHSFQsIDB4NH0sCi0Je09QX1dSLCBUQ01fUkVHX1BCRl9XRUlHSFQsIDB4NX0sCisJe09QX1dSLCBUQ01fUkVHX1NUT1JNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFRDTV9SRUdfUFJTX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIFRDTV9SRUdfUEJGX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFRDTV9SRUdfVVNFTV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX0NTRU1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVENNX1JFR19DUF9XRUlHSFQsIDB4MH0sCi0Je09QX1dSLCBUQ01fUkVHX1RTRE1fV0VJR0hULCAweDR9LAorCXtPUF9XUiwgVENNX1JFR19UU0RNX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIFRDTV9SRUdfVFFNX1BfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVENNX1JFR19UUU1fU19XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX1RNX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFRDTV9SRUdfVENNX1RRTV9VU0VfUSwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfR1JfQVJCX1RZUEUsIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX0dSX0xEMF9QUiwgMHgxfSwKQEAgLTE0OSw3ICsxODEsOSBAQAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8yLCAweDh9LAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8zLCAweDh9LAotCXtPUF9aUiwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9aUl9FMSwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHgxfSwKKwl7T1BfWlJfRTFILCBUQ01fUkVHX05fU01fQ1RYX0xEXzUsIDB4M30sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9SRUcwX1NaLCAweDZ9LAogCXtPUF9XUl9FMSwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4ZH0sCiAJe09QX1dSX0UxLCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgyZH0sCkBAIC0xNzUsNzUgKzIwOSw3NSBAQAogCXtPUF9XUiwgVENNX1JFR19DRFVfU01fV1JfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfQ0RVX1NNX1JEX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9DRkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgVENNX0NPTU1PTl9FTkQgICAgICAgICAgMTQxCi0jZGVmaW5lIFRDTV9GVU5DMF9TVEFSVCAgICAgICAgIDE0MQorI2RlZmluZSBUQ01fQ09NTU9OX0VORCAgICAgICAgICAxNTkKKyNkZWZpbmUgVENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTU5CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4N30sCi0jZGVmaW5lIFRDTV9GVU5DMF9FTkQgICAgICAgICAgIDE0NQotI2RlZmluZSBUQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNDUKKyNkZWZpbmUgVENNX0ZVTkMwX0VORCAgICAgICAgICAgMTYzCisjZGVmaW5lIFRDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE2MwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Mjd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDI3fSwKLSNkZWZpbmUgVENNX0ZVTkMxX0VORCAgICAgICAgICAgMTQ5Ci0jZGVmaW5lIFRDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE0OQorI2RlZmluZSBUQ01fRlVOQzFfRU5EICAgICAgICAgICAxNjcKKyNkZWZpbmUgVENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTY3CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4MWR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8wLCAweDE3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgxN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MTd9LAotI2RlZmluZSBUQ01fRlVOQzJfRU5EICAgICAgICAgICAxNTMKLSNkZWZpbmUgVENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTUzCisjZGVmaW5lIFRDTV9GVU5DMl9FTkQgICAgICAgICAgIDE3MQorI2RlZmluZSBUQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNzEKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgzZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzEsIDB4Mzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8xLCAweDM3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgzN30sCi0jZGVmaW5lIFRDTV9GVU5DM19FTkQgICAgICAgICAgIDE1NwotI2RlZmluZSBUQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNTcKKyNkZWZpbmUgVENNX0ZVTkMzX0VORCAgICAgICAgICAgMTc1CisjZGVmaW5lIFRDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE3NQogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDRkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg0N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4NDd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDQ3fSwKLSNkZWZpbmUgVENNX0ZVTkM0X0VORCAgICAgICAgICAgMTYxCi0jZGVmaW5lIFRDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE2MQorI2RlZmluZSBUQ01fRlVOQzRfRU5EICAgICAgICAgICAxNzkKKyNkZWZpbmUgVENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTc5CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4NmR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8xLCAweDY3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHg2N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzEsIDB4Njd9LAotI2RlZmluZSBUQ01fRlVOQzVfRU5EICAgICAgICAgICAxNjUKLSNkZWZpbmUgVENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTY1CisjZGVmaW5lIFRDTV9GVU5DNV9FTkQgICAgICAgICAgIDE4MworI2RlZmluZSBUQ01fRlVOQzZfU1RBUlQgICAgICAgICAxODMKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHg1ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4NTd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8wLCAweDU3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg1N30sCi0jZGVmaW5lIFRDTV9GVU5DNl9FTkQgICAgICAgICAgIDE2OQotI2RlZmluZSBUQ01fRlVOQzdfU1RBUlQgICAgICAgICAxNjkKKyNkZWZpbmUgVENNX0ZVTkM2X0VORCAgICAgICAgICAgMTg3CisjZGVmaW5lIFRDTV9GVU5DN19TVEFSVCAgICAgICAgIDE4NwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDdkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg3N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Nzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDc3fSwKLSNkZWZpbmUgVENNX0ZVTkM3X0VORCAgICAgICAgICAgMTczCi0jZGVmaW5lIEJSQjFfQ09NTU9OX1NUQVJUICAgICAgIDE3MworI2RlZmluZSBUQ01fRlVOQzdfRU5EICAgICAgICAgICAxOTEKKyNkZWZpbmUgQlJCMV9DT01NT05fU1RBUlQgICAgICAgMTkxCiAJe09QX1NXLCBCUkIxX1JFR19MTF9SQU0sIDB4MjAwMDAyMH0sCiAJe09QX1dSLCBCUkIxX1JFR19TT0ZUX1JFU0VULCAweDF9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzQsIDB4MH0sCiAJe09QX1NXLCBCUkIxX1JFR19GUkVFX0xJU1RfUFJTX0NSRFQsIDB4MzAyMjB9LAogCXtPUF9XUiwgQlJCMV9SRUdfU09GVF9SRVNFVCwgMHgwfSwKLSNkZWZpbmUgQlJCMV9DT01NT05fRU5EICAgICAgICAgMTc4Ci0jZGVmaW5lIEJSQjFfUE9SVDBfU1RBUlQgICAgICAgIDE3OAorI2RlZmluZSBCUkIxX0NPTU1PTl9FTkQgICAgICAgICAxOTYKKyNkZWZpbmUgQlJCMV9QT1JUMF9TVEFSVCAgICAgICAgMTk2CiAJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsIDB4Yjh9LAogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCwgMHgxMTR9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX1BBVVNFX0NZQ0xFU18wLCAweDB9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzAsIDB4MH0sCi0jZGVmaW5lIEJSQjFfUE9SVDBfRU5EICAgICAgICAgIDE4MgotI2RlZmluZSBCUkIxX1BPUlQxX1NUQVJUICAgICAgICAxODIKKyNkZWZpbmUgQlJCMV9QT1JUMF9FTkQgICAgICAgICAgMjAwCisjZGVmaW5lIEJSQjFfUE9SVDFfU1RBUlQgICAgICAgIDIwMAogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8xLCAweGI4fSwKIAl7T1BfV1JfRTEsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzEsIDB4MTE0fSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMSwgMHgwfSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9GVUxMX0NZQ0xFU18xLCAweDB9LAotI2RlZmluZSBCUkIxX1BPUlQxX0VORCAgICAgICAgICAxODYKLSNkZWZpbmUgVFNFTV9DT01NT05fU1RBUlQgICAgICAgMTg2CisjZGVmaW5lIEJSQjFfUE9SVDFfRU5EICAgICAgICAgIDIwNAorI2RlZmluZSBUU0VNX0NPTU1PTl9TVEFSVCAgICAgICAyMDQKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTMwMywxNDMgKzMzNywxNjYgQEAKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAyMCwgMHhjOH0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWMxOCwgMHg0fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAwMCwgMHgyfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWMxMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWFkMCwgMHgwfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhZDgsIDB4NH0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODA4LCAweDJ9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjI4LCAweDZ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNjc4LCAweDZ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgxMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzY3MCwgMHgyfSwKIAl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDQwMjI0fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHg0fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKIAl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0Y2IwLCAweDgwMjI4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHg0fSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5MzAwMDB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDE4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDk0MDAwMH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjgsIDB4NH0sCiAJe09QX1dSXzY0X0UxLCBUU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2MCwgMHgxNDAyMzB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDI4LCAweDR9LAorCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSwgMHgzMjRmMDAwMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMzgsIDB4NH0sCi0Je09QX1pQX0UxLCBUU0VNX1JFR19QUkFNLCAweDMwYjEwMDAwfSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzMyNTBjOTR9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzM2M1MGMyZH0sCisJe09QX1pQX0UxLCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhlNGQxOTVlfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA1OCwgMHg0fSwKLQl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweGJjNjE5MWZ9LAorCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTFlMDAsIDB4NWM0MDAyMzJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDY4LCAweDR9LAotCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTE3ZjAsIDB4NWQwMjAyMzJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDc4LCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDA4LCAweDJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MTQwLCAweDIwMDIyNH0sCi0Je09QX1pQX0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDk2MDAwMH0sCi0Je09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjAsIDB4MTQwMjQ0fSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNLCAweDMwY2MwMDAwfSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzZGYwYzMzfSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhkY2UxOTJifSwKLQl7T1BfV1JfNjRfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMWM3MCwgMHg1YzcyMDI0Nn0sCi0jZGVmaW5lIFRTRU1fQ09NTU9OX0VORCAgICAgICAgIDI3NgotI2RlZmluZSBUU0VNX1BPUlQwX1NUQVJUICAgICAgICAyNzYKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjJjMCwgMHgyMDAyMjR9LAorCXtPUF9aUF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5YjAwMDB9LAorCXtPUF9XUl82NF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSArIDB4Mzk4LCAweGQwMjQ0fSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNLCAweDMyNWUwMDAwfSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM1OTYwYzk4fSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgxYWVhMTlmZX0sCisJe09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTQzZDAsIDB4NTc4NjAyNDZ9LAorI2RlZmluZSBUU0VNX0NPTU1PTl9FTkQgICAgICAgICAyOTcKKyNkZWZpbmUgVFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMjk3CiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjJjOCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MTZjfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweGZjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDE2Y30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIwMDAsIDB4Mjh9LAogCXtPUF9XUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNjAsIDB4MH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIxNDAsIDB4Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzJjMCwgMHgxMn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ1MCwgMHg2fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM1MCwgMHhmYX0sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM1MCwgMHg2NH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODEwOCwgMHgyfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwICsgMHg4LCAweDUwMjM0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTcwLCAweDEyfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5YzAsIDB4YmV9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDljMCwgMHg0Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwLCAweDJ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgyMCwgMHhlfSwKLQl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDIwMjM0fSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDIwMjM5fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTA4LCAweDJ9LAotI2RlZmluZSBUU0VNX1BPUlQwX0VORCAgICAgICAgICAyOTQKLSNkZWZpbmUgVFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMjk0CisjZGVmaW5lIFRTRU1fUE9SVDBfRU5EICAgICAgICAgIDMxNworI2RlZmluZSBUU0VNX1BPUlQxX1NUQVJUICAgICAgICAzMTcKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzQ4LCAweDIwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjViMCwgMHgxNmN9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQzZjAsIDB4ZmN9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQ1YjAsIDB4MTZjfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjBhMCwgMHgyOH0sCiAJe09QX1dSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2NCwgMHgwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjE3MCwgMHhjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDI4LCAweGF9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzA4LCAweDEyfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDY4LCAweDZ9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4LCAweGZhfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNGUwLCAweDY0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4LCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MTEwLCAweDJ9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzggKyAweDgsIDB4NTAyM2J9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1YjgsIDB4MTJ9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGNiOCwgMHhiZX0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YWYwLCAweDRjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDgsIDB4Mn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODU4LCAweGV9LAotCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjgsIDB4MjAyMzZ9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjgsIDB4MjAyNDB9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MTAsIDB4Mn0sCi0jZGVmaW5lIFRTRU1fUE9SVDFfRU5EICAgICAgICAgIDMxMgotI2RlZmluZSBUU0VNX0ZVTkMwX1NUQVJUICAgICAgICAzMTIKKyNkZWZpbmUgVFNFTV9QT1JUMV9FTkQgICAgICAgICAgMzM3CisjZGVmaW5lIFRTRU1fRlVOQzBfU1RBUlQgICAgICAgIDMzNwogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjYwLCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwICsgMHg4LCAweDUwMjQ4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxYzAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwODAsIDB4MTJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAotI2RlZmluZSBUU0VNX0ZVTkMwX0VORCAgICAgICAgICAzMTgKLSNkZWZpbmUgVFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMzE4CisjZGVmaW5lIFRTRU1fRlVOQzBfRU5EICAgICAgICAgIDM0NQorI2RlZmluZSBUU0VNX0ZVTkMxX1NUQVJUICAgICAgICAzNDUKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI2NCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCArIDB4OCwgMHg1MDI0ZH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMWUwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDEwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGM4LCAweDEyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwOCwgMHgyfSwKLSNkZWZpbmUgVFNFTV9GVU5DMV9FTkQgICAgICAgICAgMzI0Ci0jZGVmaW5lIFRTRU1fRlVOQzJfU1RBUlQgICAgICAgIDMyNAorI2RlZmluZSBUU0VNX0ZVTkMxX0VORCAgICAgICAgICAzNTMKKyNkZWZpbmUgVFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMzUzCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjgsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAgKyAweDgsIDB4NTAyNTJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIwMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAyMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTAsIDB4MjAyNDh9LAotI2RlZmluZSBUU0VNX0ZVTkMyX0VORCAgICAgICAgICAzMzAKLSNkZWZpbmUgVFNFTV9GVU5DM19TVEFSVCAgICAgICAgMzMwCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTAsIDB4MjAyNTd9LAorI2RlZmluZSBUU0VNX0ZVTkMyX0VORCAgICAgICAgICAzNjEKKyNkZWZpbmUgVFNFTV9GVU5DM19TVEFSVCAgICAgICAgMzYxCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNmMsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTggKyAweDgsIDB4NTAyNTl9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGE4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIyMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAzMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE1OCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTgsIDB4MjAyNGF9LAotI2RlZmluZSBUU0VNX0ZVTkMzX0VORCAgICAgICAgICAzMzYKLSNkZWZpbmUgVFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMzM2CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTgsIDB4MjAyNWV9LAorI2RlZmluZSBUU0VNX0ZVTkMzX0VORCAgICAgICAgICAzNjkKKyNkZWZpbmUgVFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMzY5CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzAsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAgKyAweDgsIDB4NTAyNjB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGUwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI0MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFhMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4MjAyNGN9LAotI2RlZmluZSBUU0VNX0ZVTkM0X0VORCAgICAgICAgICAzNDIKLSNkZWZpbmUgVFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMzQyCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4MjAyNjV9LAorI2RlZmluZSBUU0VNX0ZVTkM0X0VORCAgICAgICAgICAzNzcKKyNkZWZpbmUgVFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMzc3CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzQsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTggKyAweDgsIDB4NTAyNjd9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTE4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI2MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA1MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFlOCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjgsIDB4MjAyNGV9LAotI2RlZmluZSBUU0VNX0ZVTkM1X0VORCAgICAgICAgICAzNDgKLSNkZWZpbmUgVFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMzQ4CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjgsIDB4MjAyNmN9LAorI2RlZmluZSBUU0VNX0ZVTkM1X0VORCAgICAgICAgICAzODUKKyNkZWZpbmUgVFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMzg1CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzgsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAgKyAweDgsIDB4NTAyNmV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTUwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA2MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIzMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzAsIDB4MjAyNTB9LAotI2RlZmluZSBUU0VNX0ZVTkM2X0VORCAgICAgICAgICAzNTQKLSNkZWZpbmUgVFNFTV9GVU5DN19TVEFSVCAgICAgICAgMzU0CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzAsIDB4MjAyNzN9LAorI2RlZmluZSBUU0VNX0ZVTkM2X0VORCAgICAgICAgICAzOTMKKyNkZWZpbmUgVFNFTV9GVU5DN19TVEFSVCAgICAgICAgMzkzCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiN2MsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODggKyAweDgsIDB4NTAyNzV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTg4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzJhMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA3MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTI3OCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4MjAyNTJ9LAotI2RlZmluZSBUU0VNX0ZVTkM3X0VORCAgICAgICAgICAzNjAKLSNkZWZpbmUgTUlTQ19DT01NT05fU1RBUlQgICAgICAgMzYwCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4MjAyN2F9LAorI2RlZmluZSBUU0VNX0ZVTkM3X0VORCAgICAgICAgICA0MDEKKyNkZWZpbmUgTUlTQ19DT01NT05fU1RBUlQgICAgICAgNDAxCiAJe09QX1dSX0UxLCBNSVNDX1JFR19HUkNfVElNRU9VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzEsIDB4NzFkMjkxMX0sCiAJe09QX1dSLCBNSVNDX1JFR19QTExfU1RPUk1fQ1RSTF8yLCAweDB9LApAQCAtNDQ3LDM5ICs1MDQsMzkgQEAKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzQsIDB4MH0sCiAJe09QX1dSLCBNSVNDX1JFR19MQ1BMTF9DVFJMXzEsIDB4MjA5fSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX1NQSU8sIDB4ZmYwMDAwMDB9LAotI2RlZmluZSBNSVNDX0NPTU1PTl9FTkQgICAgICAgICAzNjcKLSNkZWZpbmUgTUlTQ19GVU5DMF9TVEFSVCAgICAgICAgMzY3CisjZGVmaW5lIE1JU0NfQ09NTU9OX0VORCAgICAgICAgIDQwOAorI2RlZmluZSBNSVNDX0ZVTkMwX1NUQVJUICAgICAgICA0MDgKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMwX0VORCAgICAgICAgICAzNjgKLSNkZWZpbmUgTUlTQ19GVU5DMV9TVEFSVCAgICAgICAgMzY4CisjZGVmaW5lIE1JU0NfRlVOQzBfRU5EICAgICAgICAgIDQwOQorI2RlZmluZSBNSVNDX0ZVTkMxX1NUQVJUICAgICAgICA0MDkKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMxX0VORCAgICAgICAgICAzNjkKLSNkZWZpbmUgTUlTQ19GVU5DMl9TVEFSVCAgICAgICAgMzY5CisjZGVmaW5lIE1JU0NfRlVOQzFfRU5EICAgICAgICAgIDQxMAorI2RlZmluZSBNSVNDX0ZVTkMyX1NUQVJUICAgICAgICA0MTAKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMyX0VORCAgICAgICAgICAzNzAKLSNkZWZpbmUgTUlTQ19GVU5DM19TVEFSVCAgICAgICAgMzcwCisjZGVmaW5lIE1JU0NfRlVOQzJfRU5EICAgICAgICAgIDQxMQorI2RlZmluZSBNSVNDX0ZVTkMzX1NUQVJUICAgICAgICA0MTEKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMzX0VORCAgICAgICAgICAzNzEKLSNkZWZpbmUgTUlTQ19GVU5DNF9TVEFSVCAgICAgICAgMzcxCisjZGVmaW5lIE1JU0NfRlVOQzNfRU5EICAgICAgICAgIDQxMgorI2RlZmluZSBNSVNDX0ZVTkM0X1NUQVJUICAgICAgICA0MTIKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM0X0VORCAgICAgICAgICAzNzIKLSNkZWZpbmUgTUlTQ19GVU5DNV9TVEFSVCAgICAgICAgMzcyCisjZGVmaW5lIE1JU0NfRlVOQzRfRU5EICAgICAgICAgIDQxMworI2RlZmluZSBNSVNDX0ZVTkM1X1NUQVJUICAgICAgICA0MTMKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM1X0VORCAgICAgICAgICAzNzMKLSNkZWZpbmUgTUlTQ19GVU5DNl9TVEFSVCAgICAgICAgMzczCisjZGVmaW5lIE1JU0NfRlVOQzVfRU5EICAgICAgICAgIDQxNAorI2RlZmluZSBNSVNDX0ZVTkM2X1NUQVJUICAgICAgICA0MTQKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM2X0VORCAgICAgICAgICAzNzQKLSNkZWZpbmUgTUlTQ19GVU5DN19TVEFSVCAgICAgICAgMzc0CisjZGVmaW5lIE1JU0NfRlVOQzZfRU5EICAgICAgICAgIDQxNQorI2RlZmluZSBNSVNDX0ZVTkM3X1NUQVJUICAgICAgICA0MTUKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM3X0VORCAgICAgICAgICAzNzUKLSNkZWZpbmUgTklHX0NPTU1PTl9TVEFSVCAgICAgICAgMzc1CisjZGVmaW5lIE1JU0NfRlVOQzdfRU5EICAgICAgICAgIDQxNgorI2RlZmluZSBOSUdfQ09NTU9OX1NUQVJUICAgICAgICA0MTYKIAl7T1BfV1IsIE5JR19SRUdfUEJGX0xCX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19QUlNfUkVRX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19FR1JFU1NfREVCVUdfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0JSQl9MQl9PVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1BSU19FT1BfT1VUX0VOLCAweDF9LAotI2RlZmluZSBOSUdfQ09NTU9OX0VORCAgICAgICAgICAzODAKLSNkZWZpbmUgTklHX1BPUlQwX1NUQVJUICAgICAgICAgMzgwCisjZGVmaW5lIE5JR19DT01NT05fRU5EICAgICAgICAgIDQyMQorI2RlZmluZSBOSUdfUE9SVDBfU1RBUlQgICAgICAgICA0MjEKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9DTV9IRUFERVIsIDB4MzAwMDAwfSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9FVkVOVF9JRCwgMHgyOH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDBfRVJST1JfTUFTSywgMHgwfSwKQEAgLTQ5Miw4ICs1NDksOCBAQAogCXtPUF9XUiwgTklHX1JFR19FR1JFU1NfUEJGMF9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfQlJCMF9PVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1hDTTBfT1VUX0VOLCAweDF9LAotI2RlZmluZSBOSUdfUE9SVDBfRU5EICAgICAgICAgICAzOTIKLSNkZWZpbmUgTklHX1BPUlQxX1NUQVJUICAgICAgICAgMzkyCisjZGVmaW5lIE5JR19QT1JUMF9FTkQgICAgICAgICAgIDQzMworI2RlZmluZSBOSUdfUE9SVDFfU1RBUlQgICAgICAgICA0MzMKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9DTV9IRUFERVIsIDB4MzAwMDAwfSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9FVkVOVF9JRCwgMHgyOH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDFfRVJST1JfTUFTSywgMHgwfSwKQEAgLTUwNiwxMSArNTYzLDExIEBACiAJe09QX1dSLCBOSUdfUkVHX0VHUkVTU19QQkYxX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19CUkIxX09VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfWENNMV9PVVRfRU4sIDB4MX0sCi0jZGVmaW5lIE5JR19QT1JUMV9FTkQgICAgICAgICAgIDQwNAotI2RlZmluZSBVUEJfQ09NTU9OX1NUQVJUICAgICAgICA0MDQKKyNkZWZpbmUgTklHX1BPUlQxX0VORCAgICAgICAgICAgNDQ1CisjZGVmaW5lIFVQQl9DT01NT05fU1RBUlQgICAgICAgIDQ0NQogCXtPUF9XUiwgR1JDQkFTRV9VUEIgKyBQQl9SRUdfQ09OVFJPTCwgMHgyMH0sCi0jZGVmaW5lIFVQQl9DT01NT05fRU5EICAgICAgICAgIDQwNQotI2RlZmluZSBDU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0MDUKKyNkZWZpbmUgVVBCX0NPTU1PTl9FTkQgICAgICAgICAgNDQ2CisjZGVmaW5lIENTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ0NgogCXtPUF9XUl9FMSwgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweGExMX0sCiAJe09QX1dSX0UxSCwgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDIxMX0sCiAJe09QX1dSX0UxLCBDU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwMH0sCkBAIC01NTAsOCArNjA3LDggQEAKIAl7T1BfV1JfQVNJQywgQ1NETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBDU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBDU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBDU0RNX0NPTU1PTl9FTkQgICAgICAgICA0NDQKLSNkZWZpbmUgVVNETV9DT01NT05fU1RBUlQgICAgICAgNDQ0CisjZGVmaW5lIENTRE1fQ09NTU9OX0VORCAgICAgICAgIDQ4NQorI2RlZmluZSBVU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0ODUKIAl7T1BfV1JfRTEsIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHhhMTF9LAogCXtPUF9XUl9FMUgsIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHg0MTF9LAogCXtPUF9XUl9FMSwgVVNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHhhMDB9LApAQCAtNTY4LDkgKzYyNSwxNCBAQAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xLCAweDV9LAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yLCAweDM0fSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMywgMHgzNX0sCi0Je09QX1pSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4NWN9LAorCXtPUF9aUl9FMSwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDVjfSwKKwl7T1BfV1JfRTFILCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4N30sCisJe09QX1pSX0UxSCwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF81LCAweDVifSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wLCAweDF9LAotCXtPUF9aUiwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAorCXtPUF9aUl9FMSwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAorCXtPUF9aUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xLCAweDN9LAorCXtPUF9XUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV80LCAweDF9LAorCXtPUF9aUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV81LCAweDFifSwKIAl7T1BfV1IsIFVTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZn0sCiAJe09QX1dSLCBVU0RNX1JFR19FTkFCTEVfSU4yLCAweDNmfSwKIAl7T1BfV1IsIFVTRE1fUkVHX0VOQUJMRV9PVVQxLCAweDdmZmZmZmZ9LApAQCAtNTk0LDE4ICs2NTYsMjEgQEAKIAl7T1BfV1JfQVNJQywgVVNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBVU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBVU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBVU0RNX0NPTU1PTl9FTkQgICAgICAgICA0ODYKLSNkZWZpbmUgQ0NNX0NPTU1PTl9TVEFSVCAgICAgICAgNDg2CisjZGVmaW5lIFVTRE1fQ09NTU9OX0VORCAgICAgICAgIDUzMgorI2RlZmluZSBDQ01fQ09NTU9OX1NUQVJUICAgICAgICA1MzIKIAl7T1BfV1IsIENDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIENDTV9SRUdfQ1FNX0NDTV9IRFJfUCwgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIENDTV9SRUdfQ1FNX0NDTV9IRFJfUywgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIENDTV9SRUdfRVJSX0NDTV9IRFIsIDB4ODEwMDAwMH0sCiAJe09QX1dSLCBDQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKKwl7T1BfV1IsIENDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19UU0VNX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIENDTV9SRUdfWFNFTV9XRUlHSFQsIDB4NH0sCi0Je09QX1dSLCBDQ01fUkVHX1VTRU1fV0VJR0hULCAweDR9LAorCXtPUF9XUiwgQ0NNX1JFR19YU0VNX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIENDTV9SRUdfVVNFTV9XRUlHSFQsIDB4NX0sCiAJe09QX1pSLCBDQ01fUkVHX1BCRl9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBDQ01fUkVHX0NRTV9QX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIENDTV9SRUdfQ1NETV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBDQ01fUkVHX0NRTV9QX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIENDTV9SRUdfQ1FNX1NfV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fQ1FNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DTlRfQVVYMV9RLCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DTlRfQVVYMl9RLCAweDJ9LApAQCAtNjIwLDggKzY4NSw4IEBACiAJe09QX1dSLCBDQ01fUkVHX1hYX0lOSVRfQ1JELCAweDN9LAogCXtPUF9XUiwgQ0NNX1JFR19YWF9NU0dfTlVNLCAweDE4fSwKIAl7T1BfWlIsIENDTV9SRUdfWFhfVEFCTEUsIDB4MTJ9LAotCXtPUF9TV19FMSwgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgyNDAyMzh9LAotCXtPUF9TV19FMUgsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjU0fSwKKwl7T1BfU1dfRTEsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjQyfSwKKwl7T1BfU1dfRTFILCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MDI3Y30sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzEsIDB4Mn0sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzIsIDB4OH0sCkBAIC02NTcsOCArNzIyLDggQEAKIAl7T1BfV1IsIENDTV9SRUdfQ0RVX1NNX1dSX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX0NEVV9TTV9SRF9JRkVOLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fQ0ZDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIENDTV9DT01NT05fRU5EICAgICAgICAgIDU0NwotI2RlZmluZSBDQ01fRlVOQzBfU1RBUlQgICAgICAgICA1NDcKKyNkZWZpbmUgQ0NNX0NPTU1PTl9FTkQgICAgICAgICAgNTk2CisjZGVmaW5lIENDTV9GVU5DMF9TVEFSVCAgICAgICAgIDU5NgogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4YX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDd9LApAQCAtNjY2LDggKzczMSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4Y30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4Yn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzAsIDB4N30sCi0jZGVmaW5lIENDTV9GVU5DMF9FTkQgICAgICAgICAgIDU1NAotI2RlZmluZSBDQ01fRlVOQzFfU1RBUlQgICAgICAgICA1NTQKKyNkZWZpbmUgQ0NNX0ZVTkMwX0VORCAgICAgICAgICAgNjAzCisjZGVmaW5lIENDTV9GVU5DMV9TVEFSVCAgICAgICAgIDYwMwogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgyOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDJhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mjd9LApAQCAtNjc1LDggKzc0MCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDJifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgyN30sCi0jZGVmaW5lIENDTV9GVU5DMV9FTkQgICAgICAgICAgIDU2MQotI2RlZmluZSBDQ01fRlVOQzJfU1RBUlQgICAgICAgICA1NjEKKyNkZWZpbmUgQ0NNX0ZVTkMxX0VORCAgICAgICAgICAgNjEwCisjZGVmaW5lIENDTV9GVU5DMl9TVEFSVCAgICAgICAgIDYxMAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHgxOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDFhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4MTd9LApAQCAtNjg0LDggKzc0OSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4MWN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDFifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgxN30sCi0jZGVmaW5lIENDTV9GVU5DMl9FTkQgICAgICAgICAgIDU2OAotI2RlZmluZSBDQ01fRlVOQzNfU1RBUlQgICAgICAgICA1NjgKKyNkZWZpbmUgQ0NNX0ZVTkMyX0VORCAgICAgICAgICAgNjE3CisjZGVmaW5lIENDTV9GVU5DM19TVEFSVCAgICAgICAgIDYxNwogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgzOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDNhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mzd9LApAQCAtNjkzLDggKzc1OCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4M2N9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDNifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgzN30sCi0jZGVmaW5lIENDTV9GVU5DM19FTkQgICAgICAgICAgIDU3NQotI2RlZmluZSBDQ01fRlVOQzRfU1RBUlQgICAgICAgICA1NzUKKyNkZWZpbmUgQ0NNX0ZVTkMzX0VORCAgICAgICAgICAgNjI0CisjZGVmaW5lIENDTV9GVU5DNF9TVEFSVCAgICAgICAgIDYyNAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg0OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDRhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4NDd9LApAQCAtNzAyLDggKzc2Nyw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4NGN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDRifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg0N30sCi0jZGVmaW5lIENDTV9GVU5DNF9FTkQgICAgICAgICAgIDU4MgotI2RlZmluZSBDQ01fRlVOQzVfU1RBUlQgICAgICAgICA1ODIKKyNkZWZpbmUgQ0NNX0ZVTkM0X0VORCAgICAgICAgICAgNjMxCisjZGVmaW5lIENDTV9GVU5DNV9TVEFSVCAgICAgICAgIDYzMQogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHg2OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDZhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Njd9LApAQCAtNzExLDggKzc3Niw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4NmN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDZifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg2N30sCi0jZGVmaW5lIENDTV9GVU5DNV9FTkQgICAgICAgICAgIDU4OQotI2RlZmluZSBDQ01fRlVOQzZfU1RBUlQgICAgICAgICA1ODkKKyNkZWZpbmUgQ0NNX0ZVTkM1X0VORCAgICAgICAgICAgNjM4CisjZGVmaW5lIENDTV9GVU5DNl9TVEFSVCAgICAgICAgIDYzOAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg1OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDVhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4NTd9LApAQCAtNzIwLDggKzc4NSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4NWN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDVifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg1N30sCi0jZGVmaW5lIENDTV9GVU5DNl9FTkQgICAgICAgICAgIDU5NgotI2RlZmluZSBDQ01fRlVOQzdfU1RBUlQgICAgICAgICA1OTYKKyNkZWZpbmUgQ0NNX0ZVTkM2X0VORCAgICAgICAgICAgNjQ1CisjZGVmaW5lIENDTV9GVU5DN19TVEFSVCAgICAgICAgIDY0NQogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHg3OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDdhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Nzd9LApAQCAtNzI5LDggKzc5NCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4N2N9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDdifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg3N30sCi0jZGVmaW5lIENDTV9GVU5DN19FTkQgICAgICAgICAgIDYwMwotI2RlZmluZSBVQ01fQ09NTU9OX1NUQVJUICAgICAgICA2MDMKKyNkZWZpbmUgQ0NNX0ZVTkM3X0VORCAgICAgICAgICAgNjUyCisjZGVmaW5lIFVDTV9DT01NT05fU1RBUlQgICAgICAgIDY1MgogCXtPUF9XUiwgVUNNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgVUNNX1JFR19VUU1fVUNNX0hEUl9QLCAweDIxNTAwMjB9LAogCXtPUF9XUiwgVUNNX1JFR19VUU1fVUNNX0hEUl9TLCAweDIxNTAwMjB9LApAQCAtNzM5LDEwICs4MDQsMTYgQEAKIAl7T1BfV1IsIFVDTV9SRUdfRVJSX0VWTlRfSUQsIDB4MzN9LAogCXtPUF9XUiwgVUNNX1JFR19FWFBSX0VWTlRfSUQsIDB4MzB9LAogCXtPUF9XUiwgVUNNX1JFR19TVE9QX0VWTlRfSUQsIDB4MzF9LAotCXtPUF9XUiwgVUNNX1JFR19UU0VNX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFVDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19UU0VNX1dFSUdIVCwgMHg0fSwKIAl7T1BfV1IsIFVDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4MH0sCisJe09QX1dSLCBVQ01fUkVHX1hTRU1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19ET1JRX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFVDTV9SRUdfQ1BfV0VJR0hULCAweDB9LAotCXtPUF9XUiwgVUNNX1JFR19VUU1fUF9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBVQ01fUkVHX1VTRE1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19VUU1fUF9XRUlHSFQsIDB4N30sCisJe09QX1dSLCBVQ01fUkVHX1VRTV9TX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFVDTV9SRUdfVE1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVUNNX1JFR19VQ01fVVFNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19JTlZfQ0ZMR19RLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19HUl9BUkJfVFlQRSwgMHgxfSwKQEAgLTc1NiwxNCArODI3LDE0IEBACiAJe09QX1dSLCBVQ01fUkVHX1hYX0lOSVRfQ1JELCAweGV9LAogCXtPUF9XUiwgVUNNX1JFR19YWF9NU0dfTlVNLCAweDFifSwKIAl7T1BfWlIsIFVDTV9SRUdfWFhfVEFCTEUsIDB4MTJ9LAotCXtPUF9TV19FMSwgVUNNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxYjAyNWN9LAotCXtPUF9TV19FMUgsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjc4fSwKKwl7T1BfU1dfRTEsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjY2fSwKKwl7T1BfU1dfRTFILCBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFiMDJhMH0sCiAJe09QX1dSLCBVQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4MTB9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8yLCAweGZ9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8zLCAweDEwfSwKIAl7T1BfWlJfRTEsIFVDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKLQl7T1BfV1JfRTFILCBVQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4ZH0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19OX1NNX0NUWF9MRF80LCAweGJ9LAogCXtPUF9aUl9FMUgsIFVDTV9SRUdfTl9TTV9DVFhfTERfNSwgMHgzfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX1JFRzBfU1osIDB4M30sCiAJe09QX1dSX0UxLCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhmfSwKQEAgLTc4Nyw1NiArODU4LDU2IEBACiAJe09QX1dSLCBVQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBVQ01fQ09NTU9OX0VORCAgICAgICAgICA2NTkKLSNkZWZpbmUgVUNNX0ZVTkMwX1NUQVJUICAgICAgICAgNjU5CisjZGVmaW5lIFVDTV9DT01NT05fRU5EICAgICAgICAgIDcxNAorI2RlZmluZSBVQ01fRlVOQzBfU1RBUlQgICAgICAgICA3MTQKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHhlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMwX0VORCAgICAgICAgICAgNjYzCi0jZGVmaW5lIFVDTV9GVU5DMV9TVEFSVCAgICAgICAgIDY2MworI2RlZmluZSBVQ01fRlVOQzBfRU5EICAgICAgICAgICA3MTgKKyNkZWZpbmUgVUNNX0ZVTkMxX1NUQVJUICAgICAgICAgNzE4CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4MmZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDJlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMxX0VORCAgICAgICAgICAgNjY3Ci0jZGVmaW5lIFVDTV9GVU5DMl9TVEFSVCAgICAgICAgIDY2NworI2RlZmluZSBVQ01fRlVOQzFfRU5EICAgICAgICAgICA3MjIKKyNkZWZpbmUgVUNNX0ZVTkMyX1NUQVJUICAgICAgICAgNzIyCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4MWZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDFlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMyX0VORCAgICAgICAgICAgNjcxCi0jZGVmaW5lIFVDTV9GVU5DM19TVEFSVCAgICAgICAgIDY3MQorI2RlZmluZSBVQ01fRlVOQzJfRU5EICAgICAgICAgICA3MjYKKyNkZWZpbmUgVUNNX0ZVTkMzX1NUQVJUICAgICAgICAgNzI2CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4M2Z9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDNlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMzX0VORCAgICAgICAgICAgNjc1Ci0jZGVmaW5lIFVDTV9GVU5DNF9TVEFSVCAgICAgICAgIDY3NQorI2RlZmluZSBVQ01fRlVOQzNfRU5EICAgICAgICAgICA3MzAKKyNkZWZpbmUgVUNNX0ZVTkM0X1NUQVJUICAgICAgICAgNzMwCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4NGZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDRlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM0X0VORCAgICAgICAgICAgNjc5Ci0jZGVmaW5lIFVDTV9GVU5DNV9TVEFSVCAgICAgICAgIDY3OQorI2RlZmluZSBVQ01fRlVOQzRfRU5EICAgICAgICAgICA3MzQKKyNkZWZpbmUgVUNNX0ZVTkM1X1NUQVJUICAgICAgICAgNzM0CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4NmZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDZlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM1X0VORCAgICAgICAgICAgNjgzCi0jZGVmaW5lIFVDTV9GVU5DNl9TVEFSVCAgICAgICAgIDY4MworI2RlZmluZSBVQ01fRlVOQzVfRU5EICAgICAgICAgICA3MzgKKyNkZWZpbmUgVUNNX0ZVTkM2X1NUQVJUICAgICAgICAgNzM4CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4NWZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDVlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM2X0VORCAgICAgICAgICAgNjg3Ci0jZGVmaW5lIFVDTV9GVU5DN19TVEFSVCAgICAgICAgIDY4NworI2RlZmluZSBVQ01fRlVOQzZfRU5EICAgICAgICAgICA3NDIKKyNkZWZpbmUgVUNNX0ZVTkM3X1NUQVJUICAgICAgICAgNzQyCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4N2Z9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDdlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM3X0VORCAgICAgICAgICAgNjkxCi0jZGVmaW5lIFVTRU1fQ09NTU9OX1NUQVJUICAgICAgIDY5MQorI2RlZmluZSBVQ01fRlVOQzdfRU5EICAgICAgICAgICA3NDYKKyNkZWZpbmUgVVNFTV9DT01NT05fU1RBUlQgICAgICAgNzQ2CiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzAsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzEsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZPQzAsIDB4MH0sCkBAIC04ODcsNjkgKzk1OCw3MiBAQAogCXtPUF9XUl9BU0lDLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4MWRjZDY1MDB9LAogCXtPUF9XUl9FTVVMLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4NGM0YjR9LAogCXtPUF9XUl9GUEdBLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4NGM0YjQwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDEwMn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHhjMn0sCiAJe09QX1dSX0VNVUxfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MH0sCiAJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAyMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDF9LAogCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MTAyfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2U4LCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDIwLCAweGM4fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2QwLCAweDV9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAwLCAweDJ9LAotCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZDAgKyAweDE0LCAweDEwMjc3fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzc2MCwgMHg0fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZTIwLCAweDQyfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzczOCwgMHg5fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjY4LCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4ICsgMHgyNCwgMHgxMDI5M30sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2OCArIDB4OCwgMHgyMDI3OH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODAsIDB4NDJ9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMTAsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDY0MCwgMHg0MH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg5ODAsIDB4Yzh9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZjAsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg5NjAsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdkOCwgMHg1fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIyOCwgMHg0fSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2Q4ICsgMHgxNCwgMHgxMDI4MX0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAsIDB4OX0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWM2MCwgMHgyMH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAgKyAweDI0LCAweDEwMmJifSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODMwLCAweDIwMjgyfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4NDAwfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODMwLCAweDIwMjdhfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgyfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCArIDB4OCwgMHgyMDI5NH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAgKyAweDgsIDB4MTAyYmN9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwICsgMHhjLCAweDN9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjY4LCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjY4ICsgMHg4LCAweDIwMjk2fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI2OCArIDB4OCwgMHgyMDJiZH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMTAsIDB4Mn0sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDc0YzAsIDB4MjAyOTh9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg3NGMwLCAweDIwMmJmfSwKIAl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyN2N9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyOWF9LAorCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDI4NH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJjMX0sCiAJe09QX1dSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMjhjfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmFhfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjMjAwMDB9LAotCXtPUF9aUF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjNDAwMDB9LAotCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMjljfSwKLQl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAyYmF9LAotCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSwgMHgzMTFjMDAwMH0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSwgMHgzMTA3MDAwMH0sCi0Je09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzNDUwYzQ3fSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzMGUwYzQyfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM4NTYxOTE5fSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzODliMTkwNn0sCi0Je09QX1dSXzY0X0UxLCBVU0VNX1JFR19QUkFNICsgMHgxN2ZlMCwgMHg1MDA0MDI5ZX0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MTMyMjcyZH0sCi0Je09QX1dSXzY0X0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgyNTAsIDB4NGZiNjAyYmN9LAotI2RlZmluZSBVU0VNX0NPTU1PTl9FTkQgICAgICAgICA3ODcKLSNkZWZpbmUgVVNFTV9QT1JUMF9TVEFSVCAgICAgICAgNzg3CisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMjk0fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmQxfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjMzAwMDB9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhkMjAwMDB9LAorCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMmE0fSwKKwl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDNhOCwgMHhiMDJlMX0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19QUkFNLCAweDMxNGMwMDAwfSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNLCAweDMxYjYwMDAwfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzVlZjBjNTN9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzY1MDBjNmV9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4MzYxMzE5Y2Z9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM3NTkxYTAyfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDcxMTI3NTR9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDI4NjEyN2Q5fSwKKwl7T1BfV1JfNjRfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDE4ZWUwLCAweDRlMjQwMmE2fSwKKwl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxZmY0MCwgMHg0MDE4MDJlM30sCisjZGVmaW5lIFVTRU1fQ09NTU9OX0VORCAgICAgICAgIDg0MgorI2RlZmluZSBVU0VNX1BPUlQwX1NUQVJUICAgICAgICA4NDIKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTAwMCwgMHhhMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHhhfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTUwMCwgMHgyOH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk1MCwgMHgyZX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk2NDAsIDB4MzR9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMDAsIDB4NH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHgxMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk1MDAsIDB4NDB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5ODAsIDB4MzB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NzAwLCAweDNjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0NzQwLCAweGI0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQ1MCwgMHhiNH0sCisJe09QX1dSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQ5MCwgMHgwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFkMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYjQwLCAweDR9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDgwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDIwLCAweDIwfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4OCwgMHg5Nn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQ0MCwgMHg3Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWI2MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMDAsIDB4MTJjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzE4LCAweDk4fSwKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIzOCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI3OCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMDAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRlMDgsIDB4Y30sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyMDAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzAwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQwMCwgMHgyMH0sCkBAIC05NjYsMjMgKzEwNDAsMjYgQEAKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWYwMCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiNzgsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZTA4LCAweGN9LAotI2RlZmluZSBVU0VNX1BPUlQwX0VORCAgICAgICAgICA4MTgKLSNkZWZpbmUgVVNFTV9QT1JUMV9TVEFSVCAgICAgICAgODE4CisjZGVmaW5lIFVTRU1fUE9SVDBfRU5EICAgICAgICAgIDg3NgorI2RlZmluZSBVU0VNX1BPUlQxX1NUQVJUICAgICAgICA4NzYKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNjgwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTI4MCwgMHhhMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkyOCwgMHhhfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTVhMCwgMHgyOH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWEwOCwgMHgyZX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk3MTAsIDB4MzR9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMTAsIDB4NH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk0MCwgMHgxMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk2MDAsIDB4NDB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhNDAsIDB4MzB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5N2YwLCAweDNjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YTEwLCAweGI0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjcyMCwgMHhiNH0sCisJe09QX1dSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQ5NCwgMHgwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFkOCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYjUwLCAweDR9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTAwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZGEwLCAweDIwfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzRlMCwgMHg5Nn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTYwOCwgMHg3Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWJlMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg0YjAsIDB4MTJjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NTc4LCAweDk4fSwKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIzYywgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGNjMCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxODAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRlMzgsIDB4Y30sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyODAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzgwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQ4MCwgMHgyMH0sCkBAIC05OTksNDAgKzEwNzYsNDggQEAKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWY4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZjYzAsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZTM4LCAweGN9LAotI2RlZmluZSBVU0VNX1BPUlQxX0VORCAgICAgICAgICA4NDkKLSNkZWZpbmUgVVNFTV9GVU5DMF9TVEFSVCAgICAgICAgODQ5CisjZGVmaW5lIFVTRU1fUE9SVDFfRU5EICAgICAgICAgIDkxMAorI2RlZmluZSBVU0VNX0ZVTkMwX1NUQVJUICAgICAgICA5MTAKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzMCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxMCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DMF9FTkQgICAgICAgICAgODUxCi0jZGVmaW5lIFVTRU1fRlVOQzFfU1RBUlQgICAgICAgIDg1MQorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDE4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMwX0VORCAgICAgICAgICA5MTMKKyNkZWZpbmUgVVNFTV9GVU5DMV9TVEFSVCAgICAgICAgOTEzCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzQsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMTAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzFfRU5EICAgICAgICAgIDg1MwotI2RlZmluZSBVU0VNX0ZVTkMyX1NUQVJUICAgICAgICA4NTMKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyOCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DMV9FTkQgICAgICAgICAgOTE2CisjZGVmaW5lIFVTRU1fRlVOQzJfU1RBUlQgICAgICAgIDkxNgorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTM4LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDIwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDMwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkMyX0VORCAgICAgICAgICA4NTUKLSNkZWZpbmUgVVNFTV9GVU5DM19TVEFSVCAgICAgICAgODU1CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzJfRU5EICAgICAgICAgIDkxOQorI2RlZmluZSBVU0VNX0ZVTkMzX1NUQVJUICAgICAgICA5MTkKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzYywgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DM19FTkQgICAgICAgICAgODU3Ci0jZGVmaW5lIFVTRU1fRlVOQzRfU1RBUlQgICAgICAgIDg1NworCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDQ4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMzX0VORCAgICAgICAgICA5MjIKKyNkZWZpbmUgVVNFTV9GVU5DNF9TVEFSVCAgICAgICAgOTIyCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNDAsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNDAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNTAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzRfRU5EICAgICAgICAgIDg1OQotI2RlZmluZSBVU0VNX0ZVTkM1X1NUQVJUICAgICAgICA4NTkKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA1OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DNF9FTkQgICAgICAgICAgOTI1CisjZGVmaW5lIFVTRU1fRlVOQzVfU1RBUlQgICAgICAgIDkyNQorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTQ0LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDUwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDYwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkM1X0VORCAgICAgICAgICA4NjEKLSNkZWZpbmUgVVNFTV9GVU5DNl9TVEFSVCAgICAgICAgODYxCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNjgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzVfRU5EICAgICAgICAgIDkyOAorI2RlZmluZSBVU0VNX0ZVTkM2X1NUQVJUICAgICAgICA5MjgKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE0OCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA2MCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA3MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DNl9FTkQgICAgICAgICAgODYzCi0jZGVmaW5lIFVTRU1fRlVOQzdfU1RBUlQgICAgICAgIDg2MworCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDc4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkM2X0VORCAgICAgICAgICA5MzEKKyNkZWZpbmUgVVNFTV9GVU5DN19TVEFSVCAgICAgICAgOTMxCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNGMsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwODAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzdfRU5EICAgICAgICAgIDg2NQotI2RlZmluZSBDU0VNX0NPTU1PTl9TVEFSVCAgICAgICA4NjUKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA4OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DN19FTkQgICAgICAgICAgOTM0CisjZGVmaW5lIENTRU1fQ09NTU9OX1NUQVJUICAgICAgIDkzNAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtMTA5MSwyOSArMTE3NiwzMCBAQAogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMWU4LCAweDB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1YzAsIDB4MjQwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHhjMH0sCi0Je09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmVjOCwgMHg4MDJhMH0sCisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmVjOCwgMHg4MDJhOH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNzAsIDB4ODB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjgwLCAweDR9LAotCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MjgwLCAweDI0MH0sCi0Je09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiODgsIDB4MjAwMmJlfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjcwMCwgMHgxMDB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5MDAwLCAweDQwMH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMDgsIDB4MjAwMmU1fSwKIAl7T1BfV1IsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxM2ZmZmZmfSwKLQl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyYTh9LAotCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyZGV9LAorCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJiMH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDMwNX0sCiAJe09QX1dSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmI4fSwKLQl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmVlfSwKLQl7T1BfWlBfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZTAwMDB9LAotCXtPUF9aUF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZjAwMDB9LAotCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmM4fSwKLQl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAyZmV9LAotCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSwgMHgzMjU4MDAwMH0sCi0Je09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSwgMHgzMWZhMDAwMH0sCi0Je09QX1pQX0UxLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE4MjcwYzk2fSwKLQl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE5MDQwYzdmfSwKLQl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX1BSQU0gKyAweGIyMTAsIDB4NjgyNDAyY2F9LAotCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweGI0MzAsIDB4NjdlMDAzMDB9LAotI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICA5NDQKLSNkZWZpbmUgQ1NFTV9QT1JUMF9TVEFSVCAgICAgICAgOTQ0CisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmMwfSwKKwl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMzE1fSwKKwl7T1BfWlBfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg3MTAwMDB9LAorCXtPUF9aUF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg3NDAwMDB9LAorCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmQwfSwKKwl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAzMjV9LAorCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSwgMHgzMjI5MDAwMH0sCisJe09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSwgMHgzMjI2MDAwMH0sCisJe09QX1pQX0UxLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDIzNjMwYzhifSwKKwl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDI0NmUwYzhhfSwKKwl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX1BSQU0gKyAweGM5MzAsIDB4NjU0MDAyZDJ9LAorCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweGNiYjAsIDB4NjRmMDAzMjd9LAorI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICAxMDE0CisjZGVmaW5lIENTRU1fUE9SVDBfU1RBUlQgICAgICAgIDEwMTQKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwMCwgMHhhMH0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHgxMH0sCkBAIC0xMTIzLDExICsxMjA5LDEwIEBACiAJe09QX1dSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExOCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHg2fSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzAwLCAweGV9LAotCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MDQwLCAweDMwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQwLCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MTAsIDB4MzB9LAotI2RlZmluZSBDU0VNX1BPUlQwX0VORCAgICAgICAgICA5NTYKLSNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgOTU2CisjZGVmaW5lIENTRU1fUE9SVDBfRU5EICAgICAgICAgIDEwMjUKKyNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgMTAyNQogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE2ODAsIDB4YTB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MjgwLCAweGEwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTQwLCAweDEwfSwKQEAgLTExMzcsNDYgKzEyMjIsNTMgQEAKIAl7T1BfV1JfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTFjLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDU4LCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzMzgsIDB4ZX0sCi0Je09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxMDAsIDB4MzB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNTgsIDB4Nn0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRkMCwgMHgzMH0sCi0jZGVmaW5lIENTRU1fUE9SVDFfRU5EICAgICAgICAgIDk2OAotI2RlZmluZSBDU0VNX0ZVTkMwX1NUQVJUICAgICAgICA5NjgKKyNkZWZpbmUgQ1NFTV9QT1JUMV9FTkQgICAgICAgICAgMTAzNgorI2RlZmluZSBDU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxMDM2CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzBfRU5EICAgICAgICAgIDk3MAotI2RlZmluZSBDU0VNX0ZVTkMxX1NUQVJUICAgICAgICA5NzAKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjA0MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzBfRU5EICAgICAgICAgIDEwMzkKKyNkZWZpbmUgQ1NFTV9GVU5DMV9TVEFSVCAgICAgICAgMTAzOQogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTRjLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzA4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkMxX0VORCAgICAgICAgICA5NzIKLSNkZWZpbmUgQ1NFTV9GVU5DMl9TVEFSVCAgICAgICAgOTcyCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxMDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkMxX0VORCAgICAgICAgICAxMDQyCisjZGVmaW5lIENTRU1fRlVOQzJfU1RBUlQgICAgICAgIDEwNDIKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1MCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMxMCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DMl9FTkQgICAgICAgICAgOTc0Ci0jZGVmaW5lIENTRU1fRlVOQzNfU1RBUlQgICAgICAgIDk3NAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MWMwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DMl9FTkQgICAgICAgICAgMTA0NQorI2RlZmluZSBDU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxMDQ1CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNTQsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMTgsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzNfRU5EICAgICAgICAgIDk3NgotI2RlZmluZSBDU0VNX0ZVTkM0X1NUQVJUICAgICAgICA5NzYKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjI4MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzNfRU5EICAgICAgICAgIDEwNDgKKyNkZWZpbmUgQ1NFTV9GVU5DNF9TVEFSVCAgICAgICAgMTA0OAogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTU4LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzIwLCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM0X0VORCAgICAgICAgICA5NzgKLSNkZWZpbmUgQ1NFTV9GVU5DNV9TVEFSVCAgICAgICAgOTc4CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYzNDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM0X0VORCAgICAgICAgICAxMDUxCisjZGVmaW5lIENTRU1fRlVOQzVfU1RBUlQgICAgICAgIDEwNTEKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1YywgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMyOCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DNV9FTkQgICAgICAgICAgOTgwCi0jZGVmaW5lIENTRU1fRlVOQzZfU1RBUlQgICAgICAgIDk4MAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2NDAwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DNV9FTkQgICAgICAgICAgMTA1NAorI2RlZmluZSBDU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxMDU0CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNjAsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMzAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzZfRU5EICAgICAgICAgIDk4MgotI2RlZmluZSBDU0VNX0ZVTkM3X1NUQVJUICAgICAgICA5ODIKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjRjMCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzZfRU5EICAgICAgICAgIDEwNTcKKyNkZWZpbmUgQ1NFTV9GVU5DN19TVEFSVCAgICAgICAgMTA1NwogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTY0LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzM4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM3X0VORCAgICAgICAgICA5ODQKLSNkZWZpbmUgWFBCX0NPTU1PTl9TVEFSVCAgICAgICAgOTg0CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDY1ODAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM3X0VORCAgICAgICAgICAxMDYwCisjZGVmaW5lIFhQQl9DT01NT05fU1RBUlQgICAgICAgIDEwNjAKIAl7T1BfV1IsIEdSQ0JBU0VfWFBCICsgUEJfUkVHX0NPTlRST0wsIDB4MjB9LAotI2RlZmluZSBYUEJfQ09NTU9OX0VORCAgICAgICAgICA5ODUKLSNkZWZpbmUgRFFfQ09NTU9OX1NUQVJUICAgICAgICAgOTg1CisjZGVmaW5lIFhQQl9DT01NT05fRU5EICAgICAgICAgIDEwNjEKKyNkZWZpbmUgRFFfQ09NTU9OX1NUQVJUICAgICAgICAgMTA2MQogCXtPUF9XUiwgRE9SUV9SRUdfTU9ERV9BQ1QsIDB4Mn0sCiAJe09QX1dSLCBET1JRX1JFR19OT1JNX0NJRF9PRlNULCAweDN9LAogCXtPUF9XUiwgRE9SUV9SRUdfT1VUU1RfUkVRLCAweDR9LApAQCAtMTE5NSw4ICsxMjg3LDggQEAKIAl7T1BfV1IsIERPUlFfUkVHX0RRX0ZJRk9fQUZVTExfVEgsIDB4NzZjfSwKIAl7T1BfV1IsIERPUlFfUkVHX1JFR04sIDB4N2MxMDA0fSwKIAl7T1BfV1IsIERPUlFfUkVHX0lGX0VOLCAweGZ9LAotI2RlZmluZSBEUV9DT01NT05fRU5EICAgICAgICAgICAxMDAzCi0jZGVmaW5lIFRJTUVSU19DT01NT05fU1RBUlQgICAgIDEwMDMKKyNkZWZpbmUgRFFfQ09NTU9OX0VORCAgICAgICAgICAgMTA3OQorI2RlZmluZSBUSU1FUlNfQ09NTU9OX1NUQVJUICAgICAxMDc5CiAJe09QX1pSLCBUTV9SRUdfQ0xJTl9QUklPUjBfQ0xJRU5ULCAweDJ9LAogCXtPUF9XUiwgVE1fUkVHX0xJTl9TRVRDTFJfRklGT19BTEZVTExfVEhSLCAweDFjfSwKIAl7T1BfV1IsIFRNX1JFR19DRkNfQUNfQ1JEQ05UX1ZBTCwgMHgxfSwKQEAgLTEyMTksMTQgKzEzMTEsMTggQEAKIAl7T1BfV1IsIFRNX1JFR19FTl9DTDBfSU5QVVQsIDB4MX0sCiAJe09QX1dSLCBUTV9SRUdfRU5fQ0wxX0lOUFVULCAweDF9LAogCXtPUF9XUiwgVE1fUkVHX0VOX0NMMl9JTlBVVCwgMHgxfSwKLSNkZWZpbmUgVElNRVJTX0NPTU1PTl9FTkQgICAgICAgMTAyNQotI2RlZmluZSBUSU1FUlNfUE9SVDBfU1RBUlQgICAgICAxMDI1CisjZGVmaW5lIFRJTUVSU19DT01NT05fRU5EICAgICAgIDExMDEKKyNkZWZpbmUgVElNRVJTX1BPUlQwX1NUQVJUICAgICAgMTEwMQorCXtPUF9XUiwgVE1fUkVHX0xJTjBfTE9HSUNfQUREUiwgMHgwfSwKKwl7T1BfV1IsIFRNX1JFR19MSU4wX1BIWV9BRERSX1ZBTElELCAweDB9LAogCXtPUF9aUiwgVE1fUkVHX0xJTjBfUEhZX0FERFIsIDB4Mn0sCi0jZGVmaW5lIFRJTUVSU19QT1JUMF9FTkQgICAgICAgIDEwMjYKLSNkZWZpbmUgVElNRVJTX1BPUlQxX1NUQVJUICAgICAgMTAyNgorI2RlZmluZSBUSU1FUlNfUE9SVDBfRU5EICAgICAgICAxMTA0CisjZGVmaW5lIFRJTUVSU19QT1JUMV9TVEFSVCAgICAgIDExMDQKKwl7T1BfV1IsIFRNX1JFR19MSU4xX0xPR0lDX0FERFIsIDB4MH0sCisJe09QX1dSLCBUTV9SRUdfTElOMV9QSFlfQUREUl9WQUxJRCwgMHgwfSwKIAl7T1BfWlIsIFRNX1JFR19MSU4xX1BIWV9BRERSLCAweDJ9LAotI2RlZmluZSBUSU1FUlNfUE9SVDFfRU5EICAgICAgICAxMDI3Ci0jZGVmaW5lIFhTRE1fQ09NTU9OX1NUQVJUICAgICAgIDEwMjcKKyNkZWZpbmUgVElNRVJTX1BPUlQxX0VORCAgICAgICAgMTEwNworI2RlZmluZSBYU0RNX0NPTU1PTl9TVEFSVCAgICAgICAxMTA3CiAJe09QX1dSX0UxLCBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NjE0fSwKIAl7T1BfV1JfRTFILCBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NDI0fSwKIAl7T1BfV1JfRTEsIFhTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NjAwfSwKQEAgLTEyNDksNyArMTM0NSw5IEBACiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzksIDB4Mjl9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMCwgMHgyYX0sCiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExLCAweDJifSwKLQl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIsIDB4NTR9LAorCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMiwgMHgyY30sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzLCAweDJkfSwKKwl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQsIDB4NTJ9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzAsIDB4MX0sCiAJe09QX1pSLCBYU0RNX1JFR19BR0dfSU5UX01PREVfMSwgMHgxZn0sCiAJe09QX1dSLCBYU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LApAQCAtMTI3NCw4ICsxMzcyLDggQEAKIAl7T1BfV1JfQVNJQywgWFNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBYU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBYU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBYU0RNX0NPTU1PTl9FTkQgICAgICAgICAxMDc0Ci0jZGVmaW5lIFFNX0NPTU1PTl9TVEFSVCAgICAgICAgIDEwNzQKKyNkZWZpbmUgWFNETV9DT01NT05fRU5EICAgICAgICAgMTE1NgorI2RlZmluZSBRTV9DT01NT05fU1RBUlQgICAgICAgICAxMTU2CiAJe09QX1dSLCBRTV9SRUdfQUNUQ1RSSU5JVFZBTF8wLCAweDZ9LAogCXtPUF9XUiwgUU1fUkVHX0FDVENUUklOSVRWQUxfMSwgMHg1fSwKIAl7T1BfV1IsIFFNX1JFR19BQ1RDVFJJTklUVkFMXzIsIDB4YX0sCkBAIC0xNTc2LDggKzE2NzQsOCBAQAogCXtPUF9XUl9FMUgsIFFNX1JFR19QUTJQQ0lGVU5DXzYsIDB4NX0sCiAJe09QX1dSX0UxSCwgUU1fUkVHX1BRMlBDSUZVTkNfNywgMHg3fSwKIAl7T1BfV1IsIFFNX1JFR19DTUlOVEVOLCAweGZmfSwKLSNkZWZpbmUgUU1fQ09NTU9OX0VORCAgICAgICAgICAgMTM3NAotI2RlZmluZSBQQkZfQ09NTU9OX1NUQVJUICAgICAgICAxMzc0CisjZGVmaW5lIFFNX0NPTU1PTl9FTkQgICAgICAgICAgIDE0NTYKKyNkZWZpbmUgUEJGX0NPTU1PTl9TVEFSVCAgICAgICAgMTQ1NgogCXtPUF9XUiwgUEJGX1JFR19JTklULCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1A0LCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfTEJfRU5BQkxFLCAweDF9LApAQCAtMTU4NSwyMCArMTY4MywyMCBAQAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1A0LCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19JTklULCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDQsIDB4MH0sCi0jZGVmaW5lIFBCRl9DT01NT05fRU5EICAgICAgICAgIDEzODEKLSNkZWZpbmUgUEJGX1BPUlQwX1NUQVJUICAgICAgICAgMTM4MQorI2RlZmluZSBQQkZfQ09NTU9OX0VORCAgICAgICAgICAxNDYzCisjZGVmaW5lIFBCRl9QT1JUMF9TVEFSVCAgICAgICAgIDE0NjMKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMCwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfTUFDX0lGMF9FTkFCTEUsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDAsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMCwgMHgwfSwKLSNkZWZpbmUgUEJGX1BPUlQwX0VORCAgICAgICAgICAgMTM4NQotI2RlZmluZSBQQkZfUE9SVDFfU1RBUlQgICAgICAgICAxMzg1CisjZGVmaW5lIFBCRl9QT1JUMF9FTkQgICAgICAgICAgIDE0NjcKKyNkZWZpbmUgUEJGX1BPUlQxX1NUQVJUICAgICAgICAgMTQ2NwogCXtPUF9XUiwgUEJGX1JFR19JTklUX1AxLCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfSUYxX0VOQUJMRSwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMSwgMHgwfSwKIAl7T1BfV1IsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1AxLCAweDB9LAotI2RlZmluZSBQQkZfUE9SVDFfRU5EICAgICAgICAgICAxMzg5Ci0jZGVmaW5lIFhDTV9DT01NT05fU1RBUlQgICAgICAgIDEzODkKKyNkZWZpbmUgUEJGX1BPUlQxX0VORCAgICAgICAgICAgMTQ3MQorI2RlZmluZSBYQ01fQ09NTU9OX1NUQVJUICAgICAgICAxNDcxCiAJe09QX1dSLCBYQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9YQ01fSERSX1AsIDB4MzE1MDAyMH0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9YQ01fSERSX1MsIDB4MzE1MDAyMH0sCkBAIC0xNjA3LDE1ICsxNzA1LDE4IEBACiAJe09QX1dSLCBYQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKIAl7T1BfV1IsIFhDTV9SRUdfRVhQUl9FVk5UX0lELCAweDMwfSwKIAl7T1BfV1IsIFhDTV9SRUdfU1RPUF9FVk5UX0lELCAweDMxfSwKLQl7T1BfV1IsIFhDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19UU0VNX1dFSUdIVCwgMHg1fSwKLQl7T1BfV1IsIFhDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBYQ01fUkVHX1VTRU1fV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19QQkZfV0VJR0hULCAweDd9LAotCXtPUF9XUiwgWENNX1JFR19OSUcxX1dFSUdIVCwgMHgxfSwKKwl7T1BfV1IsIFhDTV9SRUdfU1RPUk1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19UU0VNX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFhDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBYQ01fUkVHX1VTRU1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19ET1JRX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFhDTV9SRUdfUEJGX1dFSUdIVCwgMHgwfSwKKwl7T1BfV1IsIFhDTV9SRUdfTklHMF9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBYQ01fUkVHX0NQX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIFhDTV9SRUdfWFNETV9XRUlHSFQsIDB4NX0sCi0Je09QX1dSLCBYQ01fUkVHX1hRTV9QX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFhDTV9SRUdfWFNETV9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBYQ01fUkVHX1hRTV9QX1dFSUdIVCwgMHg0fSwKKwl7T1BfV1IsIFhDTV9SRUdfWFFNX1NfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgWENNX1JFR19UTV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9YUU1fVVNFX1EsIDB4MX0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9CWVBfQUNUX1VQRCwgMHg2fSwKIAl7T1BfV1IsIFhDTV9SRUdfVU5BX0dUX05YVF9RLCAweDB9LApAQCAtMTYzMywxNCArMTczNCwxNCBAQAogCXtPUF9XUl9FMSwgWENNX1JFR19YWF9NU0dfTlVNLCAweDFmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1hYX01TR19OVU0sIDB4MjB9LAogCXtPUF9aUiwgWENNX1JFR19YWF9UQUJMRSwgMHgxMn0sCi0Je09QX1NXX0UxLCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmMDJjY30sCi0Je09QX1NXX0UxSCwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAzMDJ9LAorCXtPUF9TV19FMSwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAyZDR9LAorCXtPUF9TV19FMUgsIFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWYwMzI5fSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMCwgMHhmfSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMSwgMHg3fSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMiwgMHhifSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMywgMHhlfSwKIAl7T1BfWlJfRTEsIFhDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKLQl7T1BfV1JfRTFILCBYQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4Y30sCisJe09QX1dSX0UxSCwgWENNX1JFR19OX1NNX0NUWF9MRF80LCAweGV9LAogCXtPUF9aUl9FMUgsIFhDTV9SRUdfTl9TTV9DVFhfTERfNSwgMHgzfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX1JFRzBfU1osIDB4NH0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9TVE9STTBfSUZFTiwgMHgxfSwKQEAgLTE2NjMsOCArMTc2NCw4IEBACiAJe09QX1dSLCBYQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgWENNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBYQ01fQ09NTU9OX0VORCAgICAgICAgICAxNDUzCi0jZGVmaW5lIFhDTV9QT1JUMF9TVEFSVCAgICAgICAgIDE0NTMKKyNkZWZpbmUgWENNX0NPTU1PTl9FTkQgICAgICAgICAgMTUzOAorI2RlZmluZSBYQ01fUE9SVDBfU1RBUlQgICAgICAgICAxNTM4CiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTY3Myw4ICsxNzc0LDggQEAKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDEwLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCi0jZGVmaW5lIFhDTV9QT1JUMF9FTkQgICAgICAgICAgIDE0NjEKLSNkZWZpbmUgWENNX1BPUlQxX1NUQVJUICAgICAgICAgMTQ2MQorI2RlZmluZSBYQ01fUE9SVDBfRU5EICAgICAgICAgICAxNTQ2CisjZGVmaW5lIFhDTV9QT1JUMV9TVEFSVCAgICAgICAgIDE1NDYKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNjgzLDggKzE3ODQsOCBAQAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfQ01EMTEsIDB4Mn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKLSNkZWZpbmUgWENNX1BPUlQxX0VORCAgICAgICAgICAgMTQ2OQotI2RlZmluZSBYQ01fRlVOQzBfU1RBUlQgICAgICAgICAxNDY5CisjZGVmaW5lIFhDTV9QT1JUMV9FTkQgICAgICAgICAgIDE1NTQKKyNkZWZpbmUgWENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTU1NAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE2OTQsOCArMTc5NSw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzBfRU5EICAgICAgICAgICAxNDc4Ci0jZGVmaW5lIFhDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE0NzgKKyNkZWZpbmUgWENNX0ZVTkMwX0VORCAgICAgICAgICAgMTU2MworI2RlZmluZSBYQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNTYzCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTcwNSw4ICsxODA2LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DMV9FTkQgICAgICAgICAgIDE0ODcKLSNkZWZpbmUgWENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTQ4NworI2RlZmluZSBYQ01fRlVOQzFfRU5EICAgICAgICAgICAxNTcyCisjZGVmaW5lIFhDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE1NzIKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCkBAIC0xNzE2LDggKzE4MTcsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkMyX0VORCAgICAgICAgICAgMTQ5NgotI2RlZmluZSBYQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNDk2CisjZGVmaW5lIFhDTV9GVU5DMl9FTkQgICAgICAgICAgIDE1ODEKKyNkZWZpbmUgWENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTU4MQogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKQEAgLTE3MjcsOCArMTgyOCw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzNfRU5EICAgICAgICAgICAxNTA1Ci0jZGVmaW5lIFhDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE1MDUKKyNkZWZpbmUgWENNX0ZVTkMzX0VORCAgICAgICAgICAgMTU5MAorI2RlZmluZSBYQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNTkwCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzAsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTczOCw4ICsxODM5LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DNF9FTkQgICAgICAgICAgIDE1MTQKLSNkZWZpbmUgWENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTUxNAorI2RlZmluZSBYQ01fRlVOQzRfRU5EICAgICAgICAgICAxNTk5CisjZGVmaW5lIFhDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE1OTkKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNzQ5LDggKzE4NTAsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkM1X0VORCAgICAgICAgICAgMTUyMwotI2RlZmluZSBYQ01fRlVOQzZfU1RBUlQgICAgICAgICAxNTIzCisjZGVmaW5lIFhDTV9GVU5DNV9FTkQgICAgICAgICAgIDE2MDgKKyNkZWZpbmUgWENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTYwOAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE3NjAsOCArMTg2MSw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzZfRU5EICAgICAgICAgICAxNTMyCi0jZGVmaW5lIFhDTV9GVU5DN19TVEFSVCAgICAgICAgIDE1MzIKKyNkZWZpbmUgWENNX0ZVTkM2X0VORCAgICAgICAgICAgMTYxNworI2RlZmluZSBYQ01fRlVOQzdfU1RBUlQgICAgICAgICAxNjE3CiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTc3MSw4ICsxODcyLDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DN19FTkQgICAgICAgICAgIDE1NDEKLSNkZWZpbmUgWFNFTV9DT01NT05fU1RBUlQgICAgICAgMTU0MQorI2RlZmluZSBYQ01fRlVOQzdfRU5EICAgICAgICAgICAxNjI2CisjZGVmaW5lIFhTRU1fQ09NTU9OX1NUQVJUICAgICAgIDE2MjYKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTE4MjcsMTAgKzE5MjgsMTIgQEAKIAl7T1BfV1JfQVNJQywgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDFkY2Q2NTAwfSwKIAl7T1BfV1JfRU1VTF9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgwfSwKIAl7T1BfV1JfRlBHQSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDRjNGI0MH0sCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2QwMCwgMHg0fSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDYwLCAweDR9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgxfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDYwICsgMHgxMCwgMHgyMDJmM30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YzgsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0OH0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YTgsIDB4NH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YzggKyAweDEwLCAweDIwMzQ4fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDIwLCAweGM4fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjA4MCwgMHg0OH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAwMCwgMHgyfSwKQEAgLTE4MzksNjggKzE5NDIsNzMgQEAKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTAwMCwgMHgyfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzY4LCAweDB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMWE4LCAweDg2fSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzcwLCAweDIwMmVifSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzcwLCAweDIwMmY1fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjAwMCwgMHgyMH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I5MCwgMHg0MDJlZH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I5MCwgMHg0MDJmN30sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzYzgsIDB4MH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2UyMCwgMHgyMDJmYn0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzZDAsIDB4MjAzNGF9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MTgsIDB4MX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzZDAsIDB4MjAzMjF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDk4LCAweDQwMzRjfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDk4LCAweDQwMzIzfSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmMyMCwgMHgwfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4LCAweDB9LAotCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWM4LCAweDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MjAsIDB4MjAyZjF9LAotCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWI4LCAweDB9LAorCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzEwLCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MjAsIDB4MjAyZmR9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzA4LCAweDIwMzUwfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWMwLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDEwLCAweDF9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMDAsIDB4NH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNDAsIDB4MTB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmNTAsIDB4MjAyZjN9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDEwMDMyN30sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWY0OCwgMHgyMDJmZn0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4MTAwMzUyfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIwMCwgMHg0fSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODNiMCwgMHgyMDMzN30sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg0MDgsIDB4MjAzNjJ9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJmNX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDMzOX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzAxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzY0fSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDMwNX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzQ5fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDMxMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzc0fSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgyMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDMwZH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzYwLCAweDgwMzUxfSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhhOTAwMDB9LAotCXtPUF9aUF9FMUgsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhhYzAwMDB9LAotCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMzE1fSwKLQl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAzNTl9LAotCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSwgMHgzNDRlMDAwMH0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSwgMHgzNDYyMDAwMH0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4ODQwZDE0fSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4MjQwZDE5fSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNlNzExYjM1fSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzZTk3MWIyMn0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgxZGQwMmFkMn0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MjE1NDJhYzh9LAotCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MWMwZDAsIDB4NDdlNjAzMTd9LAotCXtPUF9XUl82NF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDFjOGQwLCAweDQ2ZTYwMzVifSwKLSNkZWZpbmUgWFNFTV9DT01NT05fRU5EICAgICAgICAgMTY1MQotI2RlZmluZSBYU0VNX1BPUlQwX1NUQVJUICAgICAgICAxNjUxCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JhMCwgMHgxMH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNjAsIDB4ODAzMTl9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDM3Y30sCisJe09QX1pQX0UxLCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YjUwMDAwfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YmQwMDAwfSwKKwl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDMyMX0sCisJe09QX1dSXzY0X0UxSCwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzYTgsIDB4YjAzODR9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSwgMHgzMzY2MDAwMH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSwgMHgzNDA2MDAwMH0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4YjMwY2RhfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM3OTYwZDAyfSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNiYjExYjA3fSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzYmMzMWFlOH0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgyYTI2MjlmNH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MzgyNjI5ZDl9LAorCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MWQ2YzAsIDB4NDUyODAzMjN9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDIwMDAwLCAweDEyNDUzN2UzfSwKKwl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19QUkFNICsgMHgyMjIyMCwgMHgzYmJjMDM4Nn0sCisjZGVmaW5lIFhTRU1fQ09NTU9OX0VORCAgICAgICAgIDE3NDEKKyNkZWZpbmUgWFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMTc0MQorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiYTAsIDB4MTR9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjMDAwLCAweGZjfSwKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzIwLCAweDFjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRhOCwgMHgxMH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2M0MCwgMHgyNH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0YTgsIDB4MTR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MDAsIDB4YX0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1MjgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNTQ4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDUwLCAweDZ9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNjA4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjY2OCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM3OCwgMHhmY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2ZTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNzg4LCAweDI0fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjU4LCAweDB9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyN2M4LCAweDFjfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDEwLCAweDEwMDMxOX0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YTgsIDB4MjR9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkNzgsIDB4MjAzMjV9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMDAwLCAweDI4fSwKLQl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkODgsIDB4MTAwMzI3fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTE0MCwgMHhjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweDB9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWUwLCAweDIwMzg4fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA4LCAweDF9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDF9LAogCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjAsIDB4Mn0sCkBAIC0xOTEwLDMxICsyMDE4LDMzIEBACiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgwfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwOCwgMHgxfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweGV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWM4LCAweDIwMzVkfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjOCwgMHgyMDM4YX0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiOCwgMHgxfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIxMCwgMHg0Mn0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFjOCwgMHgyMDMyOX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFjOCwgMHgyMDMzN30sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZkMjAsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGIxMCwgMHg0Mn0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQyMCwgMHg0fSwKLSNkZWZpbmUgWFNFTV9QT1JUMF9FTkQgICAgICAgICAgMTY4MwotI2RlZmluZSBYU0VNX1BPUlQxX1NUQVJUICAgICAgICAxNjgzCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JlMCwgMHgxMH0sCisjZGVmaW5lIFhTRU1fUE9SVDBfRU5EICAgICAgICAgIDE3NzUKKyNkZWZpbmUgWFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMTc3NQorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiZjAsIDB4MTR9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjM2YwLCAweGZjfSwKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzkwLCAweDFjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRlOCwgMHgxMH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2NkMCwgMHgyNH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZjgsIDB4MTR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MjgsIDB4YX0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1OTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNWQ4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDY4LCAweDZ9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNjc4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjZmOCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzc2OCwgMHhmY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI3NTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODE4LCAweDI0fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjVjLCAweDB9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODM4LCAweDFjfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDUwLCAweDEwMDMyYn0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MzgsIDB4MjR9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkODAsIDB4MjAzMzl9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMGEwLCAweDI4fSwKLQl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA0LCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkYzgsIDB4MTAwMzNifSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTE3MCwgMHhjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA0LCAweDB9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWU4LCAweDIwMzhjfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTBjLCAweDF9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDA0LCAweDF9LAogCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjgsIDB4Mn0sCkBAIC0xOTQ0LDY4ICsyMDU0LDY4IEBACiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0NCwgMHgwfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwYywgMHgxfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDgwLCAweGV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWQwLCAweDIwMzVmfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFkMCwgMHgyMDM4ZX0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiYywgMHgxfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmMxOCwgMHg0Mn0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyMDMzYn0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyMDM0Yn0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZkMzAsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGMxOCwgMHg0Mn0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQzMCwgMHg0fSwKLSNkZWZpbmUgWFNFTV9QT1JUMV9FTkQgICAgICAgICAgMTcxNQotI2RlZmluZSBYU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxNzE1CisjZGVmaW5lIFhTRU1fUE9SVDFfRU5EICAgICAgICAgIDE4MDkKKyNkZWZpbmUgWFNFTV9GVU5DMF9TVEFSVCAgICAgICAgMTgwOQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2UwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGI4LCAweDEwMDM2MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5ZjAsIDB4MTAwMzkwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0OCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMF9FTkQgICAgICAgICAgMTcxOAotI2RlZmluZSBYU0VNX0ZVTkMxX1NUQVJUICAgICAgICAxNzE4CisjZGVmaW5lIFhTRU1fRlVOQzBfRU5EICAgICAgICAgIDE4MTIKKyNkZWZpbmUgWFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMTgxMgogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2U0LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGY4LCAweDEwMDM3MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzAsIDB4MTAwM2EwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMV9FTkQgICAgICAgICAgMTcyMQotI2RlZmluZSBYU0VNX0ZVTkMyX1NUQVJUICAgICAgICAxNzIxCisjZGVmaW5lIFhTRU1fRlVOQzFfRU5EICAgICAgICAgIDE4MTUKKyNkZWZpbmUgWFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMTgxNQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2U4LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTM4LCAweDEwMDM4MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNzAsIDB4MTAwM2IwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiOCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMl9FTkQgICAgICAgICAgMTcyNAotI2RlZmluZSBYU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxNzI0CisjZGVmaW5lIFhTRU1fRlVOQzJfRU5EICAgICAgICAgIDE4MTgKKyNkZWZpbmUgWFNFTV9GVU5DM19TVEFSVCAgICAgICAgMTgxOAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2VjLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTc4LCAweDEwMDM5MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhYjAsIDB4MTAwM2MwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBmMCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DM19FTkQgICAgICAgICAgMTcyNwotI2RlZmluZSBYU0VNX0ZVTkM0X1NUQVJUICAgICAgICAxNzI3CisjZGVmaW5lIFhTRU1fRlVOQzNfRU5EICAgICAgICAgIDE4MjEKKyNkZWZpbmUgWFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMTgyMQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2YwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWI4LCAweDEwMDNhMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhZjAsIDB4MTAwM2QwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTEyOCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNF9FTkQgICAgICAgICAgMTczMAotI2RlZmluZSBYU0VNX0ZVTkM1X1NUQVJUICAgICAgICAxNzMwCisjZGVmaW5lIFhTRU1fRlVOQzRfRU5EICAgICAgICAgIDE4MjQKKyNkZWZpbmUgWFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMTgyNAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2Y0LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWY4LCAweDEwMDNiMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiMzAsIDB4MTAwM2UwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE2MCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNV9FTkQgICAgICAgICAgMTczMwotI2RlZmluZSBYU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxNzMzCisjZGVmaW5lIFhTRU1fRlVOQzVfRU5EICAgICAgICAgIDE4MjcKKyNkZWZpbmUgWFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMTgyNwogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2Y4LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTM4LCAweDEwMDNjMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzAsIDB4MTAwM2YwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE5OCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNl9FTkQgICAgICAgICAgMTczNgotI2RlZmluZSBYU0VNX0ZVTkM3X1NUQVJUICAgICAgICAxNzM2CisjZGVmaW5lIFhTRU1fRlVOQzZfRU5EICAgICAgICAgIDE4MzAKKyNkZWZpbmUgWFNFTV9GVU5DN19TVEFSVCAgICAgICAgMTgzMAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2ZjLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTc4LCAweDEwMDNkMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiYjAsIDB4MTAwNDAwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFkMCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DN19FTkQgICAgICAgICAgMTczOQotI2RlZmluZSBDRFVfQ09NTU9OX1NUQVJUICAgICAgICAxNzM5CisjZGVmaW5lIFhTRU1fRlVOQzdfRU5EICAgICAgICAgIDE4MzMKKyNkZWZpbmUgQ0RVX0NPTU1PTl9TVEFSVCAgICAgICAgMTgzMwogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ09OVFJPTDAsIDB4MX0sCiAJe09QX1dSX0UxSCwgQ0RVX1JFR19NRl9NT0RFLCAweDF9LAogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ0hLX01BU0swLCAweDNkMDAwfSwKIAl7T1BfV1IsIENEVV9SRUdfQ0RVX0NIS19NQVNLMSwgMHgzZH0sCi0Je09QX1dCX0UxLCBDRFVfUkVHX0wxVFQsIDB4MjAwMDMzZH0sCi0Je09QX1dCX0UxSCwgQ0RVX1JFR19MMVRULCAweDIwMDAzZTF9LAotCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRULCAweDIwMDUzZH0sCi0Je09QX1dCX0UxSCwgQ0RVX1JFR19NQVRULCAweDI4MDVlMX0sCisJe09QX1dCX0UxLCBDRFVfUkVHX0wxVFQsIDB4MjAwMDM0ZH0sCisJe09QX1dCX0UxSCwgQ0RVX1JFR19MMVRULCAweDIwMDA0MTB9LAorCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRULCAweDIwMDU0ZH0sCisJe09QX1dCX0UxSCwgQ0RVX1JFR19NQVRULCAweDI4MDYxMH0sCiAJe09QX1pSX0UxLCBDRFVfUkVHX01BVFQgKyAweDgwLCAweDJ9LAotCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRUICsgMHg4OCwgMHg2MDU1ZH0sCisJe09QX1dCX0UxLCBDRFVfUkVHX01BVFQgKyAweDg4LCAweDYwNTZkfSwKIAl7T1BfWlIsIENEVV9SRUdfTUFUVCArIDB4YTAsIDB4MTh9LAotI2RlZmluZSBDRFVfQ09NTU9OX0VORCAgICAgICAgICAxNzUwCi0jZGVmaW5lIERNQUVfQ09NTU9OX1NUQVJUICAgICAgIDE3NTAKKyNkZWZpbmUgQ0RVX0NPTU1PTl9FTkQgICAgICAgICAgMTg0NAorI2RlZmluZSBETUFFX0NPTU1PTl9TVEFSVCAgICAgICAxODQ0CiAJe09QX1pSLCBETUFFX1JFR19DTURfTUVNLCAweGUwfSwKIAl7T1BfV1IsIERNQUVfUkVHX0NSQzE2Q19JTklULCAweDB9LAogCXtPUF9XUiwgRE1BRV9SRUdfQ1JDMTZUMTBfSU5JVCwgMHgxfSwKQEAgLTIwMTMsMjQgKzIxMjMsMjcgQEAKIAl7T1BfV1JfRTFILCBETUFFX1JFR19QWFBfUkVRX0lOSVRfQ1JELCAweDJ9LAogCXtPUF9XUiwgRE1BRV9SRUdfUENJX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBETUFFX1JFR19HUkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgRE1BRV9DT01NT05fRU5EICAgICAgICAgMTc1NwotI2RlZmluZSBQWFBfQ09NTU9OX1NUQVJUICAgICAgICAxNzU3Ci0Je09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNTYzfSwKLQl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNjA5fSwKLQl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MjAsIDB4NTA1Njh9LAotCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNjBlfSwKLQl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNTZkfSwKLSNkZWZpbmUgUFhQX0NPTU1PTl9FTkQgICAgICAgICAgMTc2MgotI2RlZmluZSBDRkNfQ09NTU9OX1NUQVJUICAgICAgICAxNzYyCisjZGVmaW5lIERNQUVfQ09NTU9OX0VORCAgICAgICAgIDE4NTEKKyNkZWZpbmUgUFhQX0NPTU1PTl9TVEFSVCAgICAgICAgMTg1MQorCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDU3M30sCisJe09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDYzOH0sCisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDIwLCAweDUwNTc4fSwKKwl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDYzZH0sCisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDU3ZH0sCisJe09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDIwLCAweDUwNjQyfSwKKyNkZWZpbmUgUFhQX0NPTU1PTl9FTkQgICAgICAgICAgMTg1NworI2RlZmluZSBDRkNfQ09NTU9OX1NUQVJUICAgICAgICAxODU3CiAJe09QX1pSX0UxSCwgQ0ZDX1JFR19MSU5LX0xJU1QsIDB4MTAwfSwKIAl7T1BfV1IsIENGQ19SRUdfQ09OVFJPTDAsIDB4MTB9LAogCXtPUF9XUiwgQ0ZDX1JFR19ESVNBQkxFX09OX0VSUk9SLCAweDNmZmZ9LAorCXtPUF9XUiwgQ0ZDX1JFR19JTlRFUkZBQ0VTLCAweDI4MDAwMH0sCiAJe09QX1dSLCBDRkNfUkVHX0xDUkVRX1dFSUdIVFMsIDB4ODQ5MjRhfSwKLSNkZWZpbmUgQ0ZDX0NPTU1PTl9FTkQgICAgICAgICAgMTc2NgotI2RlZmluZSBIQ19DT01NT05fU1RBUlQgICAgICAgICAxNzY2CisJe09QX1dSLCBDRkNfUkVHX0lOVEVSRkFDRVMsIDB4MH0sCisjZGVmaW5lIENGQ19DT01NT05fRU5EICAgICAgICAgIDE4NjMKKyNkZWZpbmUgSENfQ09NTU9OX1NUQVJUICAgICAgICAgMTg2MwogCXtPUF9aUl9FMSwgSENfUkVHX1VTVE9STV9BRERSX0ZPUl9DT0FMRVNDRSwgMHg0fSwKLSNkZWZpbmUgSENfQ09NTU9OX0VORCAgICAgICAgICAgMTc2NwotI2RlZmluZSBIQ19QT1JUMF9TVEFSVCAgICAgICAgICAxNzY3CisjZGVmaW5lIEhDX0NPTU1PTl9FTkQgICAgICAgICAgIDE4NjQKKyNkZWZpbmUgSENfUE9SVDBfU1RBUlQgICAgICAgICAgMTg2NAogCXtPUF9XUl9FMSwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9aUl9FMSwgSENfUkVHX1VDX1JBTV9BRERSXzAsIDB4Mn0sCiAJe09QX1dSX0UxLCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjA0OSw4ICsyMTYyLDggQEAKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfUE9SVDBfRU5EICAgICAgICAgICAgMTc4NQotI2RlZmluZSBIQ19QT1JUMV9TVEFSVCAgICAgICAgICAxNzg1CisjZGVmaW5lIEhDX1BPUlQwX0VORCAgICAgICAgICAgIDE4ODIKKyNkZWZpbmUgSENfUE9SVDFfU1RBUlQgICAgICAgICAgMTg4MgogCXtPUF9XUl9FMSwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9aUl9FMSwgSENfUkVHX1VDX1JBTV9BRERSXzEsIDB4Mn0sCiAJe09QX1dSX0UxLCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjA2OSw4ICsyMTgyLDggQEAKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfUE9SVDFfRU5EICAgICAgICAgICAgMTgwMwotI2RlZmluZSBIQ19GVU5DMF9TVEFSVCAgICAgICAgICAxODAzCisjZGVmaW5lIEhDX1BPUlQxX0VORCAgICAgICAgICAgIDE5MDAKKyNkZWZpbmUgSENfRlVOQzBfU1RBUlQgICAgICAgICAgMTkwMAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIwODYsOCArMjE5OSw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMwX0VORCAgICAgICAgICAgIDE4MTgKLSNkZWZpbmUgSENfRlVOQzFfU1RBUlQgICAgICAgICAgMTgxOAorI2RlZmluZSBIQ19GVU5DMF9FTkQgICAgICAgICAgICAxOTE1CisjZGVmaW5lIEhDX0ZVTkMxX1NUQVJUICAgICAgICAgIDE5MTUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDF9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMTAzLDggKzIyMTYsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DMV9FTkQgICAgICAgICAgICAxODMzCi0jZGVmaW5lIEhDX0ZVTkMyX1NUQVJUICAgICAgICAgIDE4MzMKKyNkZWZpbmUgSENfRlVOQzFfRU5EICAgICAgICAgICAgMTkzMAorI2RlZmluZSBIQ19GVU5DMl9TVEFSVCAgICAgICAgICAxOTMwCiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjEyMCw4ICsyMjMzLDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzJfRU5EICAgICAgICAgICAgMTg0OAotI2RlZmluZSBIQ19GVU5DM19TVEFSVCAgICAgICAgICAxODQ4CisjZGVmaW5lIEhDX0ZVTkMyX0VORCAgICAgICAgICAgIDE5NDUKKyNkZWZpbmUgSENfRlVOQzNfU1RBUlQgICAgICAgICAgMTk0NQogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDEsIDB4M30sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKQEAgLTIxMzcsOCArMjI1MCw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMzX0VORCAgICAgICAgICAgIDE4NjMKLSNkZWZpbmUgSENfRlVOQzRfU1RBUlQgICAgICAgICAgMTg2MworI2RlZmluZSBIQ19GVU5DM19FTkQgICAgICAgICAgICAxOTYwCisjZGVmaW5lIEhDX0ZVTkM0X1NUQVJUICAgICAgICAgIDE5NjAKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AwLCAweDR9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCkBAIC0yMTU0LDggKzIyNjcsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DNF9FTkQgICAgICAgICAgICAxODc4Ci0jZGVmaW5lIEhDX0ZVTkM1X1NUQVJUICAgICAgICAgIDE4NzgKKyNkZWZpbmUgSENfRlVOQzRfRU5EICAgICAgICAgICAgMTk3NQorI2RlZmluZSBIQ19GVU5DNV9TVEFSVCAgICAgICAgICAxOTc1CiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHg1fSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjE3MSw4ICsyMjg0LDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzVfRU5EICAgICAgICAgICAgMTg5MwotI2RlZmluZSBIQ19GVU5DNl9TVEFSVCAgICAgICAgICAxODkzCisjZGVmaW5lIEhDX0ZVTkM1X0VORCAgICAgICAgICAgIDE5OTAKKyNkZWZpbmUgSENfRlVOQzZfU1RBUlQgICAgICAgICAgMTk5MAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4Nn0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIxODgsOCArMjMwMSw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM2X0VORCAgICAgICAgICAgIDE5MDgKLSNkZWZpbmUgSENfRlVOQzdfU1RBUlQgICAgICAgICAgMTkwOAorI2RlZmluZSBIQ19GVU5DNl9FTkQgICAgICAgICAgICAyMDA1CisjZGVmaW5lIEhDX0ZVTkM3X1NUQVJUICAgICAgICAgIDIwMDUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDd9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMjA1LDEwICsyMzE4LDEwIEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM3X0VORCAgICAgICAgICAgIDE5MjMKLSNkZWZpbmUgUFhQMl9DT01NT05fU1RBUlQgICAgICAgMTkyMwotCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0NPTlRST0wwLCAweGUzODM0MH0sCisjZGVmaW5lIEhDX0ZVTkM3X0VORCAgICAgICAgICAgIDIwMjAKKyNkZWZpbmUgUFhQMl9DT01NT05fU1RBUlQgICAgICAgMjAyMAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1JRX0RSQU1fQUxJR04sIDB4MX0sCisJe09QX1dSLCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9DT05UUk9MMSwgMHgzYzEwfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19SUV9FTFRfRElTQUJMRSwgMHgxfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19XUl9SRVZfTU9ERSwgMHgwfSwKQEAgLTIyMjAsNyArMjMzMyw3IEBACiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNSwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNiwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNywgMHhmZmZmZmZmZn0sCi0Je09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmZmZmZmZmZn0sCisJe09QX1dSX0UxLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMiwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMywgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fNCwgMHhmZmZmZmZmZn0sCkBAIC0yMjQ3LDYgKzIzNjAsNyBAQAogCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzEsIDB4ZmZmZjMzNDB9LAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8wLCAweGYwMDA1MDAwfSwKIAl7T1BfV1JfRTEsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8wLCAweGYwMDAzMDAwfSwKKwl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmMDAwODAwMH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTYsIDB4OH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTksIDB4OH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTEwLCAweDh9LApAQCAtMjMyMyw5ICsyNDM3LDggQEAKIAl7T1BfV1IsIFBYUDJfUkVHX1BTV1JRX0JXX1dSLCAweDEwNjQ0MH0sCiAJe09QX1dSX0UxSCwgUFhQMl9SRUdfUlFfSUxUX01PREUsIDB4MX0sCiAJe09QX1dSLCBQWFAyX1JFR19SUV9SQkNfRE9ORSwgMHgxfSwKLQl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKLSNkZWZpbmUgUFhQMl9DT01NT05fRU5EICAgICAgICAgMjA0MAotI2RlZmluZSBNSVNDX0FFVV9DT01NT05fU1RBUlQgICAyMDQwCisjZGVmaW5lIFBYUDJfQ09NTU9OX0VORCAgICAgICAgIDIxMzcKKyNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX1NUQVJUICAgMjEzNwogCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wLCAweDE2fSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9OSUdfMCwgMHg1NTU0MDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfTklHXzAsIDB4NTU1NTU1NTV9LApAQCAtMjM0NSw4ICsyNDU4LDggQEAKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9QWFBfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfQ0xSX0xBVENIX1NJR05BTCwgMHhjMDB9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX01BU0ssIDB4M30sCi0jZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9FTkQgICAgIDIwNTkKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfU1RBUlQgICAgMjA1OQorI2RlZmluZSBNSVNDX0FFVV9DT01NT05fRU5EICAgICAyMTU2CisjZGVmaW5lIE1JU0NfQUVVX1BPUlQwX1NUQVJUICAgIDIxNTYKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCwgMHhiZjVjMDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wLCAweGZmNWMwMDAwfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMF9PVVRfMCwgMHhmZmY1MWZlZn0sCkBAIC0yMzc5LDggKzI0OTIsOCBAQAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18wLCAweDB9LAogCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18wLCAweDN9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAsIDB4N30sCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQwX0VORCAgICAgIDIwOTEKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfU1RBUlQgICAgMjA5MQorI2RlZmluZSBNSVNDX0FFVV9QT1JUMF9FTkQgICAgICAyMTg4CisjZGVmaW5lIE1JU0NfQUVVX1BPUlQxX1NUQVJUICAgIDIxODgKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCwgMHhiZjVjMDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wLCAweGZmNWMwMDAwfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMV9PVVRfMCwgMHhmZmY1MWZlZn0sCkBAIC0yNDEzLDcgKzI1MjYsNyBAQAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18xLCAweDB9LAogCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18xLCAweDN9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEsIDB4N30sCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQxX0VORCAgICAgIDIxMjMKKyNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfRU5EICAgICAgMjIyMAogCiB9OwogCkBAIC0yNTEyLDcyICsyNjI1LDY0IEBACiAJMHgwMDAwMDIwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsCi0JMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDBjMCwKLQkweDAwMDA2MTgwLCAweDAwMDA4MjQwLCAweDAwMDBhMzAwLCAweDAwMDBjM2MwLCAweDAwMDBlNDgwLCAweDAwMDEwNTQwLAotCTB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsIDB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsIDB4MDAwMWE5MDAsIDB4MDAwMWM5YzAsCi0JMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwgMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwgMHgwMDAyNmQ4MCwgMHgwMDAyOGU0MCwKLQkweDAwMDJhZjAwLCAweDAwMDJjZmMwLCAweDAwMDJmMDgwLCAweDAwMDMxMTQwLCAweDAwMDMzMjAwLCAweDAwMDM1MmMwLAotCTB4MDAwMzczODAsIDB4MDAwMzk0NDAsIDB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsIDB4MDAwM2Y2ODAsIDB4MDAwNDE3NDAsCi0JMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwgMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwgMHgwMDAwODAwMCwgMHgwMDAxMDM4MCwKLQkweDAwMDE4NzAwLCAweDAwMDIwYTgwLCAweDAwMDI4ZTAwLCAweDAwMDMxMTgwLCAweDAwMDM5NTAwLCAweDAwMDQxODgwLAotCTB4MDAwNDljMDAsIDB4MDAwNTFmODAsIDB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsIDB4MDAwNmFhMDAsIDB4MDAwNzJkODAsCi0JMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwgMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwgMHgwMDA5YmYwMCwgMHgwMDBhNDI4MCwKLQkweDAwMGFjNjAwLCAweDAwMGI0OTgwLCAweDAwMGJjZDAwLCAweDAwMGM1MDgwLCAweDAwMGNkNDAwLCAweDAwMGQ1NzgwLAotCTB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsCisJMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLAorCTB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsCisJMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwKKwkweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLAorCTB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsCisJMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwKKwkweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLAorCTB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsCisJMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwKKwkweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLAorCTB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsCisJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwKLQkweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLAotCTB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsCi0JMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwKLQkweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLAotCTB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsCi0JMHhjY2NjY2NjMSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwODAsCisJMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwgMHgwMDAwNTIwMCwgMHgwMDAwNjI4MCwgMHgwMDAwNzMwMCwgMHgwMDAwODM4MCwKKwkweDAwMDA5NDAwLCAweDAwMDBhNDgwLCAweDAwMDBiNTAwLCAweDAwMDBjNTgwLCAweDAwMDBkNjAwLCAweDAwMDBlNjgwLAorCTB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsIDB4MDAwMTE4MDAsIDB4MDAwMTI4ODAsIDB4MDAwMTM5MDAsIDB4MDAwMTQ5ODAsCisJMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwgMHgwMDAxN2IwMCwgMHgwMDAxOGI4MCwgMHgwMDAxOWMwMCwgMHgwMDAxYWM4MCwKKwkweDAwMDFiZDAwLCAweDAwMDFjZDgwLCAweDAwMDFkZTAwLCAweDAwMDFlZTgwLCAweDAwMDFmZjAwLCAweDEwMDAwMDAwLAorCTB4MDAwMDI4YWQsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAzNTA4MDQsIDB4Y2NjY2NjYzEsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHg3MDU4MTAzYywgMHgwMDAwMDAwMCwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKIAkweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwKLQkweDAwMDAzNTAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKKwkweDAwMDAzNTAwLCAweDAwMGUwMWI3LCAweDAxMTYwMGQ2LCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAogCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCiAJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMTAwMDAwLAotCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAotCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDcyMDFiYiwgMHgwMTIzMDBmMywgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywKKwkweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCiAJMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LAogCTB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsCi0JMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsCisJMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwKIAkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCkBAIC0yNTg1LDQxICsyNjkwLDQxIEBACiAJMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKIAkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAogCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwKIAkweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsCiAJMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjhhLAotCTB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLAorCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKIAkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsCi0JMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCiAJMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKLQkweDA0MGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAorCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOGEsIDB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKKwkweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAorCTB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAorCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDQwZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKKwkweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCiAJMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLApAQCAtMjY0MSwxNiArMjc0NiwyNiBAQAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCiAJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsIDB4MDAwNzAxMDAsIDB4MDAwMjgxNzAsCi0JMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwgMHgwMDAxMDM3MCwgMHgwMDA4MDAwMCwKLQkweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLCAweDAwMDEwMjAwLCAweDAwMDcwMjEwLAotCTB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsCi0JMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwgMHgwMDA4MDEwMCwgMHgwMDAyODE4MCwKLQkweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LCAweDAwMDgwMzgwLCAweDAwMDI4MDAwLAotCTB4MDAwYjgwMjgsIDB4MDAwMjAwZTAsIDB4MDAwMTAxMDAsIDB4MDAwMDgxMTAsIDB4MDAwMDAxMTgsIDB4Y2NjY2NjY2MsCi0JMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAKKwkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCisJMHhjZGNkY2RjZCwgMHgwMDEwMDAwMCwgMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwKKwkweDAwMDEwMjcwLCAweDAwMGYwMjgwLCAweDAwMDEwMzcwLCAweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLAorCTB4MDAwYjgxMjgsIDB4MDAwMjAxZTAsIDB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsCisJMHgwMDA4MDBmMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwKKwkweDAwMDgwMzM4LCAweDAwMTAwMDAwLCAweDAwMDgwMTAwLCAweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLAorCTB4MDAwMTgyODAsIDB4MDAwZTgyOTgsIDB4MDAwODAzODAsIDB4MDAwMjgwMDAsIDB4MDAwYjgwMjgsIDB4MDAwMjAwZTAsCisJMHgwMDAxMDEwMCwgMHgwMDAwODExMCwgMHgwMDAwMDExOCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKKwkweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAorCTB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgaW5pdF9kYXRhX2UxaFtdID0gewpAQCAtMjc1MSwxMTk3MyArMjg2NiwxMzQ1NyBAQAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LAotCTB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsCi0JMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKLQkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLAotCTB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsCi0JMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwKLQkweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLAotCTB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsCi0JMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwKLQkweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLAotCTB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsCi0JMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwKLQkweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLAotCTB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsCi0JMHgwMDAwMDAyOCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwKLQkweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLAotCTB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsCi0JMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwKLQkweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLAotCTB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsCi0JMHhjY2NjY2NjNSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwKLQkweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLAotCTB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsCi0JMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywKKwkweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAorCTB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsCisJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKKwkweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLCAweDAwMDBhMzAwLCAweDAwMDBjM2MwLAorCTB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsIDB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsCisJMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwgMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwKKwkweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLCAweDAwMDJmMDgwLCAweDAwMDMxMTQwLAorCTB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsIDB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsCisJMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwgMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwKKwkweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLCAweDAwMDI4ZTAwLCAweDAwMDMxMTgwLAorCTB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsIDB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsCisJMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwgMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwKKwkweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLCAweDAwMGJjZDAwLCAweDAwMGM1MDgwLAorCTB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsIDB4MDAwMDAwMjgsIDB4MDAxMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsCi0JMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsCi0JMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKLQkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAotCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsCi0JMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LAotCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwKLQkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLAotCTB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCi0JMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKLQkweDA1NmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAotCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCi0JMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZjhhLCAweDA0MmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDVjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFhZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAotCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1OGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsCi0JMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwKLQkweDAwMDEwMzcwLCAweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLAotCTB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsCi0JMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwKLQkweDAwMDgwMTAwLCAweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LAotCTB4MDAwODAzODAsIDB4MDAwZDAwMDAsIDB4MDAwMDAwZDAsIDB4MDAwMjgwZDAsIDB4MDAwYjgwZjgsIDB4MDAwMjAxYjAsCi0JMHgwMDAxMDFkMCwgMHgwMDBjODFlMCwgMHgwMDAwMDJhOCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4MDAwMDIwMDAKKwkweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwgMHgwMDAwMTAwMCwKKwkweDAwMDAyMDgwLCAweDAwMDAzMTAwLCAweDAwMDA0MTgwLCAweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLAorCTB4MDAwMDgzODAsIDB4MDAwMDk0MDAsIDB4MDAwMGE0ODAsIDB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsCisJMHgwMDAwZTY4MCwgMHgwMDAwZjcwMCwgMHgwMDAxMDc4MCwgMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwKKwkweDAwMDE0OTgwLCAweDAwMDE1YTAwLCAweDAwMDE2YTgwLCAweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLAorCTB4MDAwMWFjODAsIDB4MDAwMWJkMDAsIDB4MDAwMWNkODAsIDB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsCisJMHgxMDAwMDAwMCwgMHgwMDAwMjhhZCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSwgMHgwMDM1MDgwNCwgMHhjY2NjY2NjNSwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDcwNTgxMDNjLCAweDAwMDAwMDAwLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLAorCTB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsCisJMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywKKwkweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweDAwMGUwMjMyLCAweDAxMTYwMGQ2LAorCTB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA3MjAyMzYsIDB4MDEyMzAwZjMsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwZWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLAorCTB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDJmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywKKwkweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMWVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLAorCTB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDU2ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywKKwkweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmY4YSwgMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywKKwkweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmYzLCAweDMxNmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjYsIDB4MzBiZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMTQsIDB4ZjNjZjNjZjMsCisJMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNywgMHgzMWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYwLCAweDMwN2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweDAwMTAwMDAwLCAweDAwMDcwMTAwLAorCTB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwZjAyODAsIDB4MDAwMTAzNzAsCisJMHgwMDA4MDAwMCwgMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwgMHgwMDBiODEyOCwgMHgwMDAyMDFlMCwgMHgwMDAxMDIwMCwKKwkweDAwMDcwMjEwLCAweDAwMDIwMjgwLCAweDAwMGYwMDAwLCAweDAwMDgwMGYwLCAweDAwMDI4MTcwLCAweDAwMGI4MTk4LAorCTB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwYjgyODAsIDB4MDAwODAzMzgsIDB4MDAxMDAwMDAsIDB4MDAwODAxMDAsCisJMHgwMDAyODE4MCwgMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwgMHgwMDAxODI4MCwgMHgwMDBlODI5OCwgMHgwMDA4MDM4MCwKKwkweDAwMGIwMDAwLCAweDAwMDEwMGIwLCAweDAwMDI4MGMwLCAweDAwMDU4MGU4LCAweDAwMDIwMTQwLCAweDAwMDEwMTYwLAorCTB4MDAwZTAxNzAsIDB4MDAwMzgyNTAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCisJMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwKKwkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDA0MDAyMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDE5ZDliMzhhLCAweDIyNzE3NjE4LAotCTB4YTcwMTQzZjgsIDB4YTQzMDMzMzIsIDB4MTAyNjcxMDMsIDB4OTdlMjA0YWYsIDB4YWYwYzBjOGMsIDB4MmZkNzg5MTgsCi0JMHhjZjYwODYyMSwgMHgzODYwNjYxMCwgMHg0MjA2YzQwMiwgMHgyMjQ1MGMwYywgMHhhMDdhZjEwOCwgMHhmZTQwN2I5YSwKLQkweGI2OThhODQyLCAweDc2YzMwMzI4LCAweDNiZjc4MWQxLCAweDM0OTU3MDM1LCAweDI0YTQ1OGE2LCAweDQ1OGQ1ZDgyLAotCTB4YTBkNzE5MWUsIDB4NDQ5NGVmYzksIDB4ZDAxMmQ3ZTUsIDB4NDUzOGQwM2YsIDB4NTEzZjk1MDksIDB4NTQ3ZjQyMDEsCi0JMHgzNDJmYTY4NCwgMHhmOTUwNDlmOSwgMHhhNTdmNTAzOSwgMHg3NzM3NjEyOSwgMHgwMDFlNTQyZSwgMHg2MWFhOGE5MiwKLQkweDAwMDAwMzYwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgxOWQ5NDU4YSwgMHgxMTM4ZmMxOCwKKwkweDU5ODBhMWZjLCAweGQ4MTgxOTk4LCAweDg4MDM5ODgwLCAweDgxYjg4MDNkLCAweDkxYTE4MTkxLCAweGRhZmQ3ODkxLAorCTB4YmY3NjA4NjIsIDB4NmVjMzAzMzAsIDB4MDIxMWU2MjAsIDB4MTA4MjIzOWEsIDB4ZjM1NDAyOWYsIDB4MGY1ZmM4MDYsCisJMHg2NTEyYjMxNSwgMHgzYTI2Mzg2MCwgMHgwNmE3N2VmMCwgMHgyOThkMmFkZSwgMHhjMTEyNDUzNiwgMHgxZTQ1ODZkZSwKKwkweDkzNDc2ZjE5LCAweGNhODkyMmZmLCAweGZmNDA0MWRmLCAweDY1Mjk2MzQwLCAweDIyOWRiZTU0LCAweDA0YTY1ZTg0LAorCTB4ZTRkMWE1YTEsIDB4ZDdmMmExZWQsIDB4NTE5MmZlYTEsIDB4MGRlZTZlYzYsIDB4ZjgwMDNjYTgsIDB4NjA2NTQ5NWMsCisJMHgwMDYwNjU0OQogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX3ByYW1fZGF0YV9lMVtdID0gewogCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWYwYjUsIDB4NDk5OTljY2UsCi0JMHgyMDRlNGNjZSwgMHgzMDg0MDkwOSwgMHg0MzUxMTg3OSwgMHg3YzA2MWUxYywgMHgyMDEyNzZmNCwgMHgwNmJmMmFlNSwKLQkweDBlYTJhMTdjLCAweDJkZTQyMTA4LCAweGViZjhmZWE1LCAweDA5MjEzMmZkLCAweGY2MzZjNTQ0LCAweGRhMmY0NWEyLAotCTB4MDVhODU1ZTEsIDB4YTE4MGQwM2IsIDB4NGEwMGVlMDUsIDB4NzgzNmRhYTEsIDB4ZjVhYjE1YmQsIDB4NjJhMjk2OGUsCi0JMHg5NmFkMjI0OCwgMHhiZmNiMTdmZSwgMHgyNGZiZGFkNiwgMHgwMDY2NGU3MywgMHhiYmY3YmRjYiwgMHg5ZmE3ZWZkNywKLQkweGVjZTdkOWRkLCAweGViZGFmN2IzLCAweDdiNWFkN2I1LCAweDVkOGEzZGVkLCAweDE5ZDdlYTYyLCAweGEwZmY4NzNiLAotCTB4YzYzMWIzZWMsIDB4OWYyYzE5YWUsIDB4MjNhNTdjYzgsIDB4NmFkOGNiZDcsIDB4MzEyN2Q0M2IsIDB4MGY2MjNjMTYsCi0JMHg1YjE4OTI2ZCwgMHhiNTlmZGEzMiwgMHg3MWNhMGQzMCwgMHhiYzIwYmU2OSwgMHhlYmUxNjc2NywgMHhjNjU0YzYxMiwKLQkweDliNGFhZGZmLCAweGU4ZjJjOTk0LCAweGYwNzNiOWY5LCAweGYzMGY4MWRjLCAweDU4NTY0YjE5LCAweDYzMDI2NTMwLAotCTB4YWZjYzZjMmIsIDB4OGZiYTgzMGYsIDB4ZmM5YzBmYjEsIDB4N2ZmODczOWIsIDB4ZjYxYjI0YzEsIDB4YmY4NzQyMzMsCi0JMHhhZjNlZGZhMSwgMHg4MTRmNjgyZCwgMHhlZGNkYjM3ZSwgMHgxMjE1NDk0ZSwgMHhkNWRiMTk5MywgMHgxNDBiZDJjNCwKLQkweDljOWFiYWM2LCAweDQ5YjRmZTU0LCAweDYwMjgyZjRmLCAweDI2NTM0ZjZjLCAweDc5MzVmN2Q1LCAweDhkMzQ4Y2E5LAotCTB4OWEwN2U3YTUsIDB4YjM0ZjU0N2MsIDB4ZjdlM2Q3ZjUsIDB4MmI3YzhlMjMsIDB4Y2UwZDE1OTUsIDB4NjhhZTVhZGYsCi0JMHgwNjBiNzE4MiwgMHg2NGNjN2ZlYiwgMHhmOWUwMDU0MSwgMHhhZmVlYzJhMywgMHg1ZjlhZWY4MCwgMHg4NTEyOTg5ZiwKLQkweDgwMmM5OWYyLCAweGY3ZTg2NTM2LCAweDQ1ZmIyZWNmLCAweDhjZTFiNGZlLCAweDM4N2MzZDY1LCAweDY4NDRkYTdmLAotCTB4ZTEzOWIxMjcsIDB4ODc0NTljMjIsIDB4ZTI1YzZiMzQsIDB4NzdiMTlmNzEsIDB4Y2RjMDMyYTQsIDB4Njk5MTgwMmQsCi0JMHhiOWI1OGM5OSwgMHg0ZjJlNmZmYSwgMHg0NGY1Y2M2NSwgMHgwYjlhN2ZiNiwgMHg1ZDBjZGRlNiwgMHgyZWVjNjQ4YywKLQkweGRlMGMxMDU2LCAweGY4MWZmZDAwLCAweGU4MDUyNWI4LCAweDYxNDk3NmExLCAweDRiMjZjZDc4LCAweGQwMTJjZDE1LAotCTB4N2NjZWRkOGIsIDB4YTUzODcwOWIsIDB4ZDQxNDc5YTIsIDB4ZGU2MGVlZmIsIDB4ZTM4M2JkYzcsIDB4OTg4MGM1ZGMsCi0JMHg0NmNjZDhlOSwgMHgzMmE4NjRlNSwgMHhhNWRkODdlOCwgMHhlMmU1MzY4NiwgMHgxNWM1ZmQ4NywgMHgyZmI3MTJlMywKLQkweGQ1MTdmODM5LCAweGY2ZjFhNmViLCAweDA3OGQzMjhmLCAweDdmMTNiOWRmLCAweGNiZTA3NTk3LCAweGFlZjdkNzdkLAotCTB4Nzg4NDIzMzIsIDB4ZTExZjk4NTMsIDB4YzY1Nzc1M2IsIDB4ZGUyNWM3YmEsIDB4N2Q4ZjE2M2UsIDB4YzcwYWFiMmEsCi0JMHg4ZTE1NjdhMSwgMHg2NmRjZmMwYiwgMHgzNjdiNzRlNywgMHhiMThkNGExNywgMHgxNjY2MzgzNSwgMHg5YzYyYjU2MywKLQkweDAzZDk1YTI5LCAweDMwMDBiMjU4LCAweGI1OGNiNWU3LCAweGRkYTBiZDIwLCAweDNhYmY2ODk0LCAweGRmNGFlMDBmLAotCTB4ODUyYTRiMzMsIDB4MGFmMWZhN2EsIDB4ZjIxMTVlNjksIDB4MTBjZjQxYTEsIDB4YjEyNTlmZjUsIDB4OWVmODFkOGEsCi0JMHg3MGNhOTJjZCwgMHhlNzFmM2IxYywgMHg4YjUwZmU4NiwgMHhlODZlZTAwNywgMHhlYzllZGRjYSwgMHg2MTk0ZmRlNSwKLQkweDQ4NTUzZmJiLCAweDM4NThiNWYzLCAweDdhNGZkNGJkLCAweGRmMDM4YzE3LCAweDM4YzBmN2E3LCAweGE1NmIzZWYwLAotCTB4ZmU2OWJhYzQsIDB4ZTFhNjE0ZGUsIDB4MzJjNjdlNzgsIDB4NzBhNmE0NDAsIDB4YThkOTkwOTksIDB4Nzg2N2U0MjQsCi0JMHhmYzgxNjVhZSwgMHgzZjJlMzM2NCwgMHg4YmU2MzVhNywgMHg5ZjczN2UwMCwgMHhkMGQ0N2NkNCwgMHg3ODM1NzlhYiwKLQkweDY5Yzg1YTNmLCAweDI2NmFhMDc2LCAweDAxYjYzMGYzLCAweDUzMDU5M2QwLCAweDdjYThkZDFlLCAweGIzOTE4ZDEwLAotCTB4Y2RhMzczMzEsIDB4OTY2M2ZhMjgsIDB4OTk3YjlmOTksIDB4OWNmMjg2ZDcsIDB4Y2YzZjM0MWIsIDB4YmZkNzM3NmYsCi0JMHgyNzY5ZGNjZCwgMHhkYzNmODJhZSwgMHg4ZTRlN2RjYywgMHhjMGUzOGYzMywgMHgxMmNmMDBkNCwgMHg2ZmMwZWYyMSwKLQkweGFkYmYyYzZhLCAweDVhMTk2MjZkLCAweDkxMzk2MjQxLCAweDVkY2UxYzk2LCAweGI3Njg3YTg5LCAweGY3YzA3M2U0LAotCTB4OTA3YjYwMmYsIDB4NmVmODkwZWYsIDB4MDVkN2E4YmQsIDB4MGQ1ZDg1NTUsIDB4MWUyODIwMjUsIDB4OTU4YWZjN2YsCi0JMHgxZmJhNDA2ZSwgMHgxMDFiNjU2NywgMHhiZjRhMGRmZiwgMHgwZDdjMDNhYSwgMHhhNDNmYWE4ZCwgMHgxN2JmNmQwZCwKLQkweGQ3ZGIxMTE4LCAweDRlMDNiZTJiLCAweDk5YmZiZjE4LCAweGY4YzNkNmY5LCAweDE5N2FlYzRiLCAweGVjM2M5N2Q2LAotCTB4ZDc5OGJkMjUsIDB4N2U0NzJkMWUsIDB4ZWEwNWQzMWQsIDB4ZmJmMDc3MmEsIDB4Mjc2NzgwOGIsIDB4ZWNmMDAxYzIsCi0JMHg5N2Y0ZTNlNCwgMHhkZmVkZmVhMywgMHhiOWY1YjEyYiwgMHg3N2VmMGUzOCwgMHgxNjVjZWVjOSwgMHhlNzBjNGRjYywKLQkweGZjNGVjYzczLCAweGJjMGI0MGI0LCAweDI2N2VlNTgyLCAweDAyYzYyNzI5LCAweDgzY2MzZDlhLCAweGNhYTk2OGY0LAotCTB4NTQzOTRlZmIsIDB4ZTlmN2M2OWYsIDB4ZjljY2Y1ODMsIDB4MDAwMzMyMzMsIDB4NjYxOGQ2NTcsIDB4YjNhNTU3YTIsCi0JMHg3YWY1MDczMSwgMHgxY2I4NDU3NSwgMHgyNWMzZTJmOSwgMHgxMmMwYWNhZiwgMHgwMGFlOWNmMCwgMHgyYTM4OGZiZSwKLQkweGVhN2VjNzVlLCAweGEyMTYzNmU2LCAweGU4NzBlZGM4LCAweDdiMWFmZTM0LCAweDcyMzdkNjQ3LCAweDFmYTUwZjExLAotCTB4ZDA2ZmMwMmIsIDB4MTg2NTMwNmQsIDB4ZmY0NTk1ZjIsIDB4YzYwZmJmYzMsIDB4OTg5Y2JhOGEsIDB4MTcyYTE3ZWUsCi0JMHhlMjBhM2Y2MCwgMHhmNTlmY2I4ZCwgMHgwZjQyMDdmZCwgMHhmODI2MWU4MSwgMHg5NTdlY2JiYywgMHhiNjNjMzA1ZiwKLQkweGMxN2U3YWZlLCAweDA5NTAwMTQ0LCAweDEzZjBjYmMxLCAweDQ1NTJhMmM2LCAweDY2M2RiZDFjLCAweGE1NjFlOTc3LAotCTB4ZmYzYzMxMzgsIDB4NzQwNGYzZDksIDB4MDAxYTdjZDIsIDB4NzUyN2M4YjcsIDB4MWNiNDM1NmUsIDB4YTc3NTNkZjAsCi0JMHhlMDc1ZjIzZCwgMHg1Mjc1YmE5MywgMHhkYjc1MDFjOCwgMHhlZmJkMTczZSwgMHgxMWViY2I1ZCwgMHhlOWY1Y2FiNywKLQkweDBhODNhODQ2LCAweDdmNzQ3MDZjLCAweGIzZTQ3YWZiLCAweDhmNWIzMjlkLCAweGY1ODU4ZWRkLCAweDA5Y2NmNDE4LAotCTB4YzQ5YjNiMDEsIDB4MTc0YWU3ZDcsIDB4ZGJhZGQ2YWYsIDB4NWY3ZTFmN2YsIDB4MmU2MGU1ZDUsIDB4Zjc2ZWFmZTgsCi0JMHg4N2FmOWJhMiwgMHg3NmMzYTJmYSwgMHgzNmVhNGQ4NiwgMHhhMTIzYWIzNSwgMHhkN2M0MzhiZSwgMHgwZTMyYmVhNSwKLQkweDRjOTc3MDVmLCAweGE3OWY0YmViLCAweGEwNzZlMzNiLCAweDI3MjZjOWNmLCAweGQwZjE4MmYzLCAweGI4Y2VlZWUyLAotCTB4M2FhZGY4MGQsIDB4YmYxY2JkYjQsIDB4ZjkyYWRlYWIsIDB4Nzc1M2VkMTAsIDB4ODU5NDNhNmUsIDB4OTcyMWZhZjMsCi0JMHhjOTJkOWFmMywgMHgwZmUwNmJjYywgMHgyOWQxM2JmZSwgMHhlZjBlYmU0NywgMHgxOTNjYzA5NywgMHg3NTg4YmJmNCwKLQkweGFjM2VhMzk0LCAweGFkMTRmNGRiLCAweDRlYmUwNjMzLCAweGNlMzRlOTM2LCAweDEwZmUxYzgwLCAweGVhZWY4MWM2LAotCTB4Mzg3YzkyNWYsIDB4MGIxYjdhYzUsIDB4ZWVmNjNjYTAsIDB4YTBkOWNkNzYsIDB4ZDU5YWZjZTEsIDB4NmJjZTM3NDIsCi0JMHgxNmVkOGFhNSwgMHg3MmVkZTY4NSwgMHg3NWJlMTE3OSwgMHhhZmJjMzk2YSwgMHhhZDRlYmI1ZSwgMHg5YWRmOTE4YywKLQkweDcwY2RjMzJkLCAweDExMWZjOWFkLCAweDcxN2Q4ZjM4LCAweDZmMGJlYzEyLCAweDFhYmQ2MGUxLCAweDQ1ZWEwMWY1LAotCTB4YWVjNmE0MjUsIDB4YTk0OTZmNmIsIDB4MmQ5YWRmNDQsIDB4Zjg5YWYzMzIsIDB4ZjgzZGQzODgsIDB4ZWRkNjhjYWYsCi0JMHg1ZjM3NWVlMCwgMHgwNmRkMDViNywgMHhkYmEwYWFmNCwgMHg1MWQwNWQ2OSwgMHg2Nzg5MmZlOSwgMHhlOTFiN2M3ZiwKLQkweDIwNzRmMDAwLCAweDI1NWNhMDllLCAweGMwZGNmM2UwLCAweGRmZTgxNTRhLCAweDJlM2E2N2UzLCAweGNiZTIxN2JiLAotCTB4Yzc5YjNiMGUsIDB4Y2QzOWFjNjAsIDB4YWMwYWZkOWIsIDB4N2IyYTFkYTMsIDB4ZWY5OWVkMTAsIDB4ZDNmZDg2YjYsCi0JMHg5NjZkYmQ2MCwgMHg4MDI1YjMwMiwgMHhhYTA1YjY1YiwgMHhjZTE1YmFmOCwgMHg4NTdmNzVjNCwgMHg5NDZmNmY1OCwKLQkweDE1YWYzNGJjLCAweDgwOWZjMDU5LCAweDI1ZTk4ZWY3LCAweGMwNDk2NDFiLCAweGNhZjU4NjllLCAweDRiOWUzYzFmLAotCTB4ZmQ0M2RjZmQsIDB4ZmU0ZmQwYTgsIDB4Y2JkMWZiODUsIDB4ZDFmYTk4YTcsIDB4N2U4Y2FiY2IsIDB4NDkzZjUwMTYsCi0JMHg0NzRmZDcxNywgMHg3ODY2NzVmOSwgMHg3ZThkYWJjYSwgMHhjZjFmYThlYSwgMHhmZjRiY2RjNSwgMHg3ODY2MGRjNiwKLQkweGZkNGI1MWJlLCAweGIxZjM0ZWE0LCAweGJhZWI4NjgwLCAweGVkZDYwN2UwLCAweGI2YmRlMTk3LCAweGUzYzI3NTM1LAotCTB4Y2EyZjk2MmMsIDB4ZGNmMWM2MWUsIDB4N2NiMTI1MjAsIDB4YzkyNTMyOTEsIDB4ZmVhOTg3YzQsIDB4ZjQzYWE2NjEsCi0JMHgyY2JhZDNhNCwgMHhlM2RmOGZmNCwgMHg0NzU0YjkyNCwgMHg0YTE3YTRhYSwgMHg5ZTA5M2E0NywgMHhhNDZhNDY4NywKLQkweDJlYmExZTE3LCAweDg3YWUzOTcwLCAweDRiZGEzNjM4LCAweGFiODFhOTBmLCAweDBkN2MzOGY1LCAweDEzMmM0YTcwLAotCTB4MzIwZmIwNGIsIDB4Njk1ZmJlODcsIDB4MWIyODc4ZTcsIDB4N2RmMGI2NzUsIDB4ZDZjMWJlZjgsIDB4ZjUwYTk4NWYsCi0JMHgzZmU5NWIzNiwgMHg5NTllM2NlMiwgMHgyNDk2OWRiOCwgMHg5NzZjNDZiMywgMHhkZWY2ZTBlNCwgMHgwZDkyZGNjYSwKLQkweGI1M2MxOGMxLCAweDRiZmEwNjhmLCAweGRiYjZmZDgzLCAweDVmYzg5OTAzLCAweDBlYmY0YmNmLCAweDE4YWRiZjIyLAotCTB4ZmM3ZDkyYWQsIDB4MjJhZmYzNDIsIDB4MmI4ZmQwNDEsIDB4MjI2NjU3NDcsIDB4YzgyYTFkM2UsIDB4MmFmOGVjNzcsCi0JMHhlMzQ0NWY4YywgMHg3ZmYxYzA2ZiwgMHg0NzdjNjA5OCwgMHhmOGQzMTRkZSwgMHhkMzJhOWNjZSwgMHhjNjE1NGVmOCwKLQkweDI2ZGY3ZTA3LCAweDA3YzYyNWJkLCAweGQ4Yzc1ZGZjLCAweGExYmZjZDRiLCAweDU1MzkxZGYxLCAweGI0NGFmZTM0LAotCTB4NGZjNzYzNGYsIDB4MjdmZjE4MWEsIDB4NWJiYjhjMTIsIDB4OTBkMmViZTIsIDB4Njc1ZGU3ZjksIDB4YjU0ZTdmOWUsCi0JMHg5ZjJhZmU3OSwgMHhkZmU5NWVmZiwgMHgzNDQ5ZjhjNCwgMHhlZmNkN2RmZiwgMHg1NGU3ZjlmMSwgMHg3ODNiZjlmMywKLQkweDdiZTMwM2JmLCAweDEwN2ZmMDA2LCAweGQxMjQ3ZmU3LCAweDMwNmZmM2ZjLCAweGFkNGM3ZmNmLCAweDNlMGVmZTc5LAotCTB4MGZhNTJmZmUsIDB4OGQxYWY4YzUsIDB4MTNlNmFiZmYsIDB4NmE2M2ZlN2MsIDB4MTFkNTdjNjksIDB4YTkxZjIxZjAsCi0JMHhjOTFhOTJhMywgMHhlZDA2Y2Y5ZSwgMHg5NDc0ODIzNCwgMHhkY2IxY2E5ZiwgMHhmMjk3NmVlZSwgMHgyNTBmMGYwOCwKLQkweDNjZmJiZTcxLCAweDFiNGRmODA5LCAweDA0MmM3N2Q0LCAweGFjZmEwNTEyLCAweGNkN2NmMDVlLCAweDUwMzU1MmQ2LAotCTB4ZGU4M2RlMjQsIDB4NWQ0MDI4NWIsIDB4NWYxMzI1ZDAsIDB4ZDA4ZWQ1YjMsIDB4NmY2ZjAwNjUsIDB4ZmFjNDFjOTcsCi0JMHgwYjVmZDU4MiwgMHg3MWRlYjRjOSwgMHhiOWNjMDA3ZiwgMHhjM2ZmM2UwOCwgMHhjN2Q2ZTNkMywgMHgyZTVhY2JjZSwKLQkweDg4OWZiMGVjLCAweGMzODhlNDlhLCAweDYzNjMyYzEzLCAweDZiYmUwMTFiLCAweDY3ZjA5ZDI1LCAweDFlODA0ZmQ0LAotCTB4M2YzZmEwNjUsIDB4ZTU4YTNkMDAsIDB4MzgxZmMyODcsIDB4YTk5NjdhMGUsIDB4NGNkMzcyYjEsIDB4NmY3NzQxZGYsCi0JMHhlZWJjYzExNiwgMHg1MDlmZjAxMCwgMHgyYzRmYmUzOCwgMHhmZjg4NDI5NSwgMHg1MDdhOWZjZiwgMHhiMGI0ZmQ0NSwKLQkweDNlOTAxOTIzLCAweGEwODM0NzA4LCAweDQ3NmVmZjUzLCAweGY4NDRiZDY4LCAweGVlN2UyMmY0LCAweGVjNjQ1MTI0LAotCTB4NWZiZWMyNzcsIDB4ZTliODY2YjQsIDB4ZDQyY2I5YmIsIDB4MWZlZDA5OTYsIDB4YjQ2ZjM1NTgsIDB4NjdiZmYzMGUsCi0JMHg0YzgyNjM4ZSwgMHg5NDdmOWY3ZSwgMHg4ZDk4ZTQ4ZCwgMHgzMThmODFiMiwgMHhmYjI5ZjNhNywgMHgzOWRjYTgyOCwKLQkweGVmYjI2ZWM3LCAweGViOTgwYWVmLCAweGViOTk1NGY3LCAweGRkOTBmNmJkLCAweDYyYzZmNjg2LCAweDdlODNhZDg5LAotCTB4YmYzNDZkZWYsIDB4ZGJiMWM2MzcsIDB4OGM3YjA5ODYsIDB4MDY0Nzc3OGYsIDB4MmM1ZWY3ODcsIDB4OWQ2M2UwMjcsCi0JMHhjZTlmN2FlOCwgMHg2OWUwMzViZiwgMHgyMmNlYzQ3OCwgMHhkMzQ2NWViNCwgMHhjMTY3OGZkMSwgMHgwMmQ3YjI3NCwKLQkweDE1Yjc5ZjNhLCAweDRlZWNmYmRlLCAweDczYzAwNTdmLCAweGUxMzJjM2RmLCAweDc0N2YwYWQzLCAweDA2ZGZiMjVmLAotCTB4Y2Q3NDVjNzYsIDB4ZTc2OGVkMWYsIDB4ODU2M2U3NWEsIDB4ZDY2NWZlZmYsIDB4ZWEyYWU4ZjksIDB4ZWI0MTc5ZmIsCi0JMHg1NjI3Y2U3MywgMHgyYWU4NmE3ZSwgMHhhNjNjN2UxZCwgMHhlZmY4NWQ1ZCwgMHhlMThmMWY4NywgMHhiMzJkOWFhZiwKLQkweGExYzVmNTRjLCAweDE3ZWQ0Y2JiLCAweDdhNjc5OWFkLCAweGIxNjNiMGJmLCAweGVkMDNmZGU5LCAweGYzZWE5YTBmLAotCTB4ZGE5YjBmODIsIDB4ZDlhY2JmZGYsIDB4YzZkZWZlZjQsIDB4ZWZlZjRjYzcsIDB4NTRjYTdhYTksIDB4YWNmMDJiYmYsCi0JMHg3MzlkZmRhOSwgMHg0YmRlOTlkNiwgMHg4OThmMTZmYiwgMHg4YzBkNWU5MiwgMHhmMmJiNDJjOSwgMHg3ZTQzMDc2ZCwKLQkweDkwZGRmODM0LCAweDMyOWE4Zjg3LCAweGU0ZDkzY2E5LCAweGU1MTliMmE1LCAweGI2ZGZlNDE0LCAweGViMGQ5NzliLAotCTB4NjNkMThkZTcsIDB4ZWQwZmY2ZWMsIDB4NGYyODM5OGQsIDB4ZTJiN2JlNTYsIDB4ZjBkZmNhZDMsIDB4NzViYzU0NmYsCi0JMHhjMTZiMjhjOCwgMHhkNzNkNDc1ZiwgMHhlMzY3ZDYyNywgMHhmODY0OGY3OSwgMHgyZTQ5Y2IwNywgMHhiNzJlNTU2YiwKLQkweGNhYjIzYmI1LCAweDU1YWU1ZmQwLCAweDcxOGQ4NTIzLCAweDc5MDE4YWZjLCAweDBmMzQ0YjBlLCAweDNhNzQ1Njg2LAotCTB4ZDViODBkZDIsIDB4MTM3Y2Q3NDQsIDB4NjVmYjNkOWMsIDB4NjUxZWJmMWEsIDB4ZmZkZmY0MTcsIDB4YjJkZjE1NjUsCi0JMHgxYzg4M2VhMSwgMHgxYzc1YjljYywgMHhjODdmZTNjMiwgMHhhNTc0ZjA4NiwgMHhkM2RiZmFkMywgMHg3MWY4NjMzNCwKLQkweDQxNTdmMTA1LCAweDczNGQ0N2U1LCAweDE0ZDEzY2E4LCAweDUzNzhmMmEwLCAweDM0MWY5NTE1LCAweDZkMTk1MjM1LAotCTB4N2JlNTQ2NWEsIDB4ZGYyYTQxNGQsIDB4ZjJhNzZhNmQsIDB4NTQxZDRkYjcsIDB4NDM1YTZiMWUsIDB4NDI5YTZmZTUsCi0JMHhmOTM2ZjY1NCwgMHgyYmYwMWNhOSwgMHgyNjk5M2QwYywgMHhmZjYxNGFlYywgMHhmNTQxMGFjMywgMHgzMjJlNjJkMywKLQkweGYyNGRkZGZjLCAweDc5NDRjYmU4LCAweDVlN2RhZDNjLCAweGU5ZjM3Njg4LCAweDcyYzYwZTYzLCAweGNhY2JlMzEzLAotCTB4Y2FmMTA5MGYsIDB4NTQ1NzY0ZmMsIDB4NGMzOTQwODYsIDB4OTVkZWZhMWMsIDB4YjJlNGU5YzQsIDB4ZjQwYzE5YjEsCi0JMHhmZDk3NjNjNiwgMHg4OGJmMzdjMCwgMHg4NjFiMGFlYSwgMHhiMzdjODdkZiwgMHgwNWZhNzFkYywgMHg3NWU5MTVkZiwKLQkweDdmMzEzYTIxLCAweGEwNmNmMTdmLCAweGZlZTc4OWM3LCAweGVkZmIwNGJkLCAweGQ3MGE3NWMxLCAweGFkMzI4M2NiLAotCTB4YzFiMjJjOTcsIDB4YzE4YWY0ODcsIDB4ZmQzZmFkMWIsIDB4YmU1ZTg1M2IsIDB4YTU0ZWZlMDAsIDB4Y2VlYmY4MWIsCi0JMHhkOGJiN2Y0MSwgMHhhN2ZmNTNhNiwgMHg0MTRjMWQzYiwgMHgwZTQ5ZWUzYywgMHhmNGVhYTg2MSwgMHg1YzFlMGRlMSwKLQkweGRhNjQ5NmVmLCAweGYwNzFlM2Y0LCAweGUxNzU5NDYwLCAweDVkOGI1ZDVjLCAweGY1Y2NiYTI3LCAweDBjZDIxZGQzLAotCTB4YTZmMmJmMWUsIDB4ZDY3Yzg2ZGMsIDB4MGJjN2ViYTQsIDB4NTQ5OWZlOTAsIDB4YzkyY2ZkMWEsIDB4ZTRlM2Y1NTQsCi0JMHgzYWY4ODcxZiwgMHhmODk1MzViNSwgMHg2YTM2ZmMxNCwgMHg0NzBkMWZmNywgMHhlMTA2N2VhMiwgMHg4N2JmNjRlOCwKLQkweGM5MTdjOWVmLCAweDMzN2VmMmZmLCAweDcxNDRmZTUzLCAweGZlYzdiNjI2LCAweDBlZTdhZTM5LCAweGY5MWNlZmY4LAotCTB4OGRkNTBhZjcsIDB4NzJjMjFiN2UsIDB4M2UzNTcxZDAsIDB4MGYxYTZhZGYsIDB4M2UxYWYzYmUsIDB4ZjNiY2I5ZjEsCi0JMHg0ZWMyYWJmMSwgMHhiZGY5ZjhjNCwgMHg3MWY5MDYzOCwgMHhmN2FjZGQyZSwgMHg4NmY1NGQ1MywgMHhiNGRkMmNhZSwKLQkweDIwMWZlMDBlLCAweDUyNGFhY2Y3LCAweDA1NmE1ZjkwLCAweDVhMjlmNGY3LCAweDFkZjAwNGJiLCAweDJlODk3OWIxLAotCTB4NTc2ZjEyMGQsIDB4MDFhYThjZTcsIDB4Y2I0ZGYyMmYsIDB4YjE3YmQ3MWQsIDB4MmYxYTg3NjUsIDB4ZTliMjcxNmUsCi0JMHgxMjUxNTdiMCwgMHg5ZjIzNWZjMywgMHg4ZTIyYTg3ZSwgMHg4ZDFjM2Y5ZCwgMHgzNjhiZDQyNywgMHg2NzMzNGY2ZSwKLQkweDI0ZmU4M2QwLCAweDY2N2EwY2NiLCAweDZkMzQwOWJiLCAweDA3ZTQzZjAwLCAweDc1MzEzOGMxLCAweDIxYzU5ZmEzLAotCTB4NzViYzdmN2IsIDB4ZWRjNmM3YjIsIDB4MDViOGViNjQsIDB4Zjg1MTc0YjIsIDB4YjQ3YWRmYWIsIDB4YzU2ZGU3MWMsCi0JMHhhN2Q3N2Q2MywgMHgwYmU0ODA2YSwgMHg4ODMyNTdmZSwgMHg0N2JmMDM0NywgMHgzMjA1MTU2YywgMHhlNWJkNWZmNCwKLQkweDNmMjdiMjdkLCAweDFmMGIwN2IyLCAweDFhZGU4ZjM5LCAweDc5OTZiZjBhLCAweGRlNjYzOTIyLCAweGUzOGRkNjQxLAotCTB4NWE3MTE3Y2MsIDB4ZGYzYmVmZTAsIDB4ZTNmMTc1ODEsIDB4ZTMwY2VjZDcsIDB4YjQyY2VjZjAsIDB4ODMwMzgxOGEsCi0JMHgzZmE4MzY0YywgMHgzYmYzNmEyMCwgMHhmYjNlMjg2YiwgMHg0MWRiOGRiMSwgMHgwNzg1NTgwYiwgMHhkNjJhYzI5ZCwKLQkweGUwNzY4MjUxLCAweDgxOWI2NjI5LCAweGRlYzUzYTc4LCAweGExOGM0Y2YwLCAweDI1NTkwY2QzLCAweDZlZDAzY2ZhLAotCTB4N2VjMDQzYjYsIDB4YWQxN2Q1MzUsIDB4ZDkyYmQ3MzEsIDB4MzNkNDBjZWMsIDB4MmNlZGFiOTUsIDB4NGNmY2QxMjQsCi0JMHgzYWM4YTdlZiwgMHgzNTg4YmJmNSwgMHhiOWY1YzBhZSwgMHhkZmUzY2VjNSwgMHg4Y2E2NzVmMywgMHg1ZWVhZjgwMiwKLQkweGUzMDRiZTdlLCAweGRjYzhiN2UyLCAweDFiZTIzMDhmLCAweGY4NzE4NzhiLCAweDU0ZWJjM2FiLCAweDdkZmZiYzNmLAotCTB4YWUzYmM0ZTcsIDB4Njg3ZGY4NjcsIDB4YzEwZmFlMDUsIDB4OTM2ZjkyOWQsIDB4YmY3ZTI4NzcsIDB4Nzg1NmZjMmMsCi0JMHg0ODdiZjU4ZCwgMHg1MWMwNDU5YywgMHgxYjhhNDViNywgMHhmMDU3YmQzNywgMHgzZjhmYzFiNywgMHhlYzM2ZjMxMiwKLQkweDFlYjE5N2ZhLCAweGNhMzdmNzYzLCAweDMzMmFhZTIyLCAweDRhN2VlOTE5LCAweDI5NmQwNjc3LCAweGVmZTI5ZWY0LAotCTB4NWYwZTFkYzEsIDB4YWNlZmNjMGIsIDB4ZjIyOTYyYWQsIDB4YzUwZmQ4MTcsIDB4NTlkZGE2MmMsIDB4Zjc5ZTgwNWIsCi0JMHhkMjU3YWY0OCwgMHhhMTEyOTliZSwgMHg3YjU4MTA3ZCwgMHgzNTdkZDg5NCwgMHg4YzUzYzkzOSwgMHg4MzM3NjM3MSwKLQkweGY3MWYzNWY1LCAweDI0MTQ4MmQ1LCAweDlhYWVlMTU4LCAweDZlMzE4YWM5LCAweGZhMDBmYTBkLCAweDdlNTNkMjdiLAotCTB4NGJiYTgyNTgsIDB4OWZkODY0ZWIsIDB4OTcxY2QzMjMsIDB4ZjVjZDc5NzcsIDB4ZjcwM2ZjMDYsIDB4OGEzMmM2N2QsCi0JMHg1NThmMjUxZiwgMHgzMDhjNzgyYywgMHg5ZjZlMWZkNCwgMHhlNDJmYmUyNSwgMHgxZjEzZGUxMSwgMHhhMWM1ODg3YiwKLQkweGI5MTE2YTc0LCAweGU5NDYxOTE4LCAweGYyOTdmMDE5LCAweGYwZTM1ZmQwLCAweGRhMDA3YzUzLCAweGZiNzlkNTJmLAotCTB4NWYwNzExN2EsIDB4ODhkOTc2ZmEsIDB4OTc4OWU3NjEsIDB4MTU4MTljMzUsIDB4ZGQ0Yzc4NjgsIDB4NTE5ZmQzODgsCi0JMHgyNWUyNjg1OCwgMHhhYzJmNTVlOCwgMHhmNTdhMzFiNiwgMHgwN2UwNWI2NSwgMHhhM2Q0MGY0OCwgMHhlMzA0OWYwOCwKLQkweDA0Zjg2MjA0LCAweDU2M2Q1NzFjLCAweGY4NWEwZmNlLCAweDIzODY2ZmUxLCAweGZiZjQ5OThkLCAweGU1ZTA1YjExLAotCTB4Y2RmYzcwNzgsIDB4ZTkwZTY3ZmQsIDB4Njg3ZmUwZmYsIDB4ZmE0MzA1ZmYsIDB4ZmViYzc1ZmYsIDB4YjZkZTVlZWIsCi0JMHg1NGZjMDgyYiwgMHgzZGE3ZTNmZCwgMHg2M2VjY2NjMCwgMHgwN2MzMjNhNSwgMHhkNGRkYWY3NCwgMHhmY2I5NDFlNiwKLQkweDkwN2EwOTQ4LCAweDY0ODcxZmFlLCAweGYyYjNmN2RhLCAweGU0MzE1ZDgxLCAweDI1NDlhZmQzLCAweDQ3YzQzZmM0LAotCTB4ZTI3YzVmMjcsIDB4M2ViN2I0NjYsIDB4YzlkNzY0ZGYsIDB4ODhlMmRmYmYsIDB4ZWIyOTgwMzgsIDB4Zjk3MzE3M2IsCi0JMHg5Zjc4ZTJkOCwgMHg4YTdlNTdkNywgMHg2NWQwZDlmYywgMHg5YmQ1MTdkNiwgMHhkMmYwY2U5ZiwgMHhmZTE0MTVmYSwKLQkweDg3ZmM4NDZmLCAweDI4N2Y4ZGZhLCAweDgxYWM3YjQ3LCAweGIzZGU5M2Y1LCAweDlmZTM4NzdlLCAweGMyZjY0NjE5LAotCTB4ZTg2NTM1M2MsIDB4YWViZjYzN2IsIDB4YTFhNWUwNDEsIDB4NjU0Zjg5ZjMsIDB4ZjkyODk2MTIsIDB4NTVmNmQ2OGIsCi0JMHg1Y2Y4MGZjMiwgMHg5MzY3ZmIxNiwgMHgzM2U0NjRkOSwgMHhjNDJjMWYwMywgMHhlNWY5MDBmZCwgMHg4ZTMxOGJlNywKLQkweDM1ZjFiM2QzLCAweGNiMTQ1NDhmLCAweDlkZWY1YzlmLCAweGZkZjAzZjBlLCAweGNiMTM3YTlmLCAweGM1ZTgyZjUzLAotCTB4YjBkYjdiNTgsIDB4YzI1ZGJjZWYsIDB4Y2JjM2Q5N2YsIDB4ODNjNDdiNWEsIDB4NzVkYWZkNzEsIDB4MWUxMDVmNzYsCi0JMHhmMGRiNmVkNywgMHhhZTMwZTc4MywgMHg3N2MzYjZmMiwgMHhiMzVmZjQxOSwgMHg1Y2RmZDVlZCwgMHhlZDlhZjUwNywKLQkweDdjOTliNGY2LCAweDMxOTQ5YTFhLCAweGY4MDY5NzQ4LCAweDQxODRkOTZmLCAweGU0ZmY1NDNhLCAweDhlM2JkNTU1LAotCTB4ZDg3NDdmM2YsIDB4YjY2YTNkMjAsIDB4YjhkOTU3ZWYsIDB4MWE5OGY4YTEsIDB4YjU0NmFmZGUsIDB4YmYwOTc0MzgsCi0JMHg4NjdlOGU1ZiwgMHgyYTE3ZjJmYywgMHg3ZGUzZmRkMiwgMHgxYjkxMWIxMiwgMHg1ZWViOWYwNywgMHhmMTE5N2IyNSwKLQkweDc0MTQ3NDQ0LCAweGE1OWJhMDFhLCAweDA1ZDAwMzdkLCAweDI3NDFhYmY1LCAweDQyNjNmYmViLCAweDZmM2ZiMWRlLAotCTB4NGJmM2YxMTEsIDB4OTA3ZGM1M2YsIDB4Mzg3YzNhZGYsIDB4YmU5N2FhZmYsIDB4N2M3OWMxZTksIDB4YmU3MjM0YTgsCi0JMHhjMzJkYmU3ZSwgMHhkOTU2ZTMwZiwgMHg5NTNhMTk4MywgMHgwYmQ1NzlmYywgMHg1YjdlMjJkZiwgMHgxOTViZjQ3NCwKLQkweGZlNjBiZjE0LCAweDBhZDkxYjJjLCAweGRmOWMyY2MxLCAweGQzYjdiNWMyLCAweDgwNTkyYWZjLCAweDc5ZWFhZWY4LAotCTB4YWJkNzAyYjksIDB4NjMzNjE0Y2YsIDB4NzhiOTFjN2IsIDB4ODdjNWM4NDQsIDB4ODBmMWMxZWIsIDB4MGI4ODdkZjksCi0JMHhiYzBiZWUwNywgMHgwNmRlNTMyMSwgMHg3YzUyMGY2MywgMHg3ZWM2NWJlNCwgMHhmNTQyNWIwZSwgMHg0ZTljOWNjZiwKLQkweGVmYzMxNWIzLCAweDk2Mjc5NTg1LCAweGVjYWUzNzVmLCAweDFjOWNmYTQ2LCAweDcxODExZmVkLCAweDA0YTYwNmRmLAotCTB4NzNhNDNlMDUsIDB4NzQ3Y2FmZDAsIDB4MWY0ZTA4ZmEsIDB4YzQ0YTU1ZTYsIDB4YTdlZmEwNzcsIDB4ZGY2YzczZTIsCi0JMHg4YWJiZjc2ZCwgMHg3M2IxZGY0ZCwgMHgyZmUzODNiOSwgMHhkYzAzZTMxNSwgMHg3ZWNmNjg0OSwgMHgxZjdmMTE5OCwKLQkweGFjNjJiMzdmLCAweGM1NTc2MDM3LCAweDdjOGM1N2YwLCAweGY4ZGY3OTczLCAweDQzNmY5NzE4LCAweDY2YjM0M2RlLAotCTB4YmQzZmZiZTAsIDB4YmYwN2U1YzksIDB4ZTAwNTdiNDMsIDB4ZjdhMDhjOGEsIDB4NDg5MzZmZmIsIDB4MjQ1ODM4MWYsCi0JMHhiNDZmNWM5ZSwgMHhiZjM2YjkwYiwgMHhlMDA0ZjgzNywgMHgxZGRkNzA1NiwgMHg3ZmVjMTdlMCwgMHhlYzlmZTExOCwKLQkweGYwZDVjYWQ4LCAweDZjYmU4YzVkLCAweDQzM2NmMWMwLCAweDc2ZTQzM2ZiLCAweDg3ZmY5MDkxLCAweGIzZmNiMzE0LAotCTB4MTNlZTVjYjUsIDB4YzI0MTFiZmIsIDB4ZjQzZGFkNGYsIDB4NWU1MGU3ODMsIDB4MWY3MTNlNDEsIDB4YmQ5Yjc2YmEsCi0JMHhjOWZkZTcwMiwgMHhiOWJmODNkNiwgMHg5M2U0ZTQxYiwgMHg2NmE3MjFiMCwgMHhkMzk1NjlmZCwgMHhiMGQ3MWRhYSwKLQkweDA5ZmE3Mjc4LCAweDkzYzQxM2E2LCAweDU3MWU3ODUzLCAweGYxMjhiNTRlLCAweGZlOTU3ZmYxLCAweDgyZjdmMDM0LAotCTB4M2U4NjdmMDUsIDB4YWI0Nzg0NGMsIDB4ZjE1ZWJjM2UsIDB4ZmFhZDNlMTIsIDB4YzliZGZlMTAsIDB4OWZmMjg2NGEsCi0JMHhiZjA2NzdjMSwgMHg2ZWE4ZmY1NSwgMHgwMTlkZWEwYywgMHg2ZWY4MzRiZSwgMHhiZTBkMmY4MCwgMHgzNDJmMTIxYiwKLQkweDNlODg2ZmUxLCAweGYwMGNkOGMzLCAweDdmZWVjNTQ5LCAweDk5ZmNjNzJkLCAweDVmN2MzZGRhLCAweDg0M2JiZTE0LAotCTB4OWY5M2MwNzUsIDB4ODcxZDYxYmIsIDB4ZDZjNWE1NDYsIDB4ZDg3YTk2NDMsIDB4YTk2ZmRlZDIsIDB4MDdkYTU4NTcsCi0JMHg0YjQ2ZjUyYywgMHgwYmY3MTBmYiwgMHgzY2FhMGViYiwgMHg2YTYyMjU0ZiwgMHg4MmNlNWY2ZiwgMHhlZjUzOGM2ZSwKLQkweGQyMWUyOTk1LCAweGMwYWYzMDA3LCAweGI5YWRhNGJjLCAweDY4NjNjYzIxLCAweDUzMzhmMTczLCAweDAyYmFiYTdmLAotCTB4ZGU5ZjU3ZjUsIDB4YjA3YjQxZWYsIDB4NzNlM2M1ZGYsIDB4OWVmZDE1N2QsIDB4ZWMzYjE4ZDQsIDB4ZTkzMjNkZmQsCi0JMHhjZDg4NjhkZiwgMHg4MjJmZTc4OCwgMHg4YmY0NDE4NywgMHg3OWVmNDRiMiwgMHhhY2JhN2RkYywgMHhmOGMzMmNlNSwKLQkweGMzZWM4NzRhLCAweGU2ODJjZDkwLCAweGRmYjgzZDNiLCAweGZmMjdiN2RmLCAweDdjZjAzOTk2LCAweGI2OTkxMWUxLAotCTB4ZmVkMGZhZjMsIDB4ZmIzNDQxNGUsIDB4M2YxOGFjOTUsIDB4N2MxNjIzZWQsIDB4YTM4YzA2ZTYsIDB4ZGFmZWUxZWYsCi0JMHhiYjE2NTU4MiwgMHhiZTIyYWQ4MiwgMHhhYTk2ZDRhOCwgMHhiZmMxMTdhOCwgMHg4ZmJjYzBmYSwgMHg1YWJiZjljMCwKLQkweGQ2YjU1N2Y0LCAweGRlZjhkZWZjLCAweDM3YWJlM2YwLCAweDg0MDdkZjlhLCAweGY5MTY3ZmRmLCAweGYxZDJlZDFkLAotCTB4YmJmNzNjNmMsIDB4MDkzNzhmMTksIDB4MmU1ZDNhZmQsIDB4ZTAwZTY1YmEsIDB4Y2NiMGVmYmYsIDB4ZWY0ZTVmOTAsCi0JMHhhN2ZmMDk5MSwgMHg3MzdkZjJiNywgMHg4YjVmOWY4YSwgMHg3YTRmZGE3YywgMHgwZjUzYzBjZCwgMHg1ODlhODVjYSwKLQkweGZjZWNmNGVmLCAweGQwMjNjOTVkLCAweDNiZDc3NmE0LCAweDY1MDRmZmM1LCAweDBiYjdhZWNmLCAweDk3ZjU4NjdmLAotCTB4ODc3OWNhZGYsIDB4NzUzZjZkMGQsIDB4MmJmNjhiOWYsIDB4NjliOWY2ZmEsIDB4ZWY2ZmIxN2YsIDB4YzExZTczMmYsCi0JMHg4Zjg3NmVmYSwgMHhmZGY2ZmVmMiwgMHhhN2Y5MThiOSwgMHgwYWEzYjk2ZiwgMHg2OGRmNTZmNSwgMHhlY2I2NjdlZSwKLQkweDk0NzE3M2ZkLCAweGEyNTZjOWQ2LCAweGVlNzZlNWRiLCAweGYzZGU5ZWU3LCAweDY5NDllZmVmLCAweDcwYWNjMjU4LAotCTB4NGM5N2RmZmQsIDB4OWY4NmI3NzEsIDB4ZDY1ZTI4YmEsIDB4MjVjZmY3YjcsIDB4YTVmYmY2YjEsIDB4ZWM1ZWE3Y2UsCi0JMHhkOWI5ZjYyMywgMHg1ZjA4MWQ5YywgMHg2OTdmZGYyYSwgMHgxYmI1ZDlmOCwgMHhhMjBmMzE5YSwgMHgwMGZhYmY3MywKLQkweGNmZmE5ZmJjLCAweDNlYTMxNDVmLCAweGVkYzFkYmVjLCAweGY0N2I1ZTlhLCAweDliMjdkYzA1LCAweGI5NjJiNmQwLAotCTB4OGJkNWU4MWQsIDB4NjRmYjgxNDIsIDB4MGIyZjNmNmQsIDB4ZjJmMGYxNmEsIDB4MmYwMWM1MDUsIDB4OGY3ZjFmMTYsCi0JMHg5ZmZmNDhmOCwgMHhmNjg5MGY4MCwgMHhiOGY3NmJiZiwgMHhlNzA5NGU0MywgMHhkZWY3OTdmZCwgMHhjZmIwM2Q0MSwKLQkweGNjNjk3YzQxLCAweDMzNzA5M2Y3LCAweDlhMTcxZGQ5LCAweDZlNTdkNTc3LCAweDYyZTQ1MmRlLCAweGJmZjJiZGU2LAotCTB4ZWRiYmZmMzksIDB4MmFjZjgyNWUsIDB4N2NmOTQzMDcsIDB4ZGY1NDQzZWYsIDB4YmMxMWY2ZTYsIDB4OWJlZmM5MTcsCi0JMHhkZjc0NmFiZiwgMHg1Y2Y3NzQwMSwgMHhmZTg3ZGU3OCwgMHhjOGZkZDJjNywgMHgzYWVlODI3ZCwgMHhmYzM0OTllNiwKLQkweGRmMDQxN2YzLCAweDI3NzNkNTk3LCAweDNkZDM5YmZlLCAweGZiMGRmY2QxLCAweGFmOWI3MWZjLCAweDZjZTMwZjIzLAotCTB4M2FjM2ZkNjgsIDB4Yjc2N2I5YWQsIDB4ZjFlZmQ4NjMsIDB4YjQ3NWIzYjEsIDB4MmZiMTY1MTcsIDB4ODQ2Zjg1NjksCi0JMHgxOTFmZmRjYSwgMHg1ZTMxMjdmNywgMHgzYzg5OWEzNywgMHhkMTBmZWU2ZCwgMHhhZDBjMWQ5NiwgMHg4ZjY0OTU2OCwKLQkweDZlMGFkYTJhLCAweDZlYmUyYjI3LCAweGYxZTVlMDNmLCAweDI4ZmJlNzJiLCAweDM4NGQ4Nzg3LCAweGY2N2FjMDE2LAotCTB4NDM4YTNlMGQsIDB4NTZjMmZjNWIsIDB4YjAyNWY5ODksIDB4NmYyYjk1NTMsIDB4OGE3ZThjM2MsIDB4ZTIyZGFjN2QsCi0JMHg3ZGYyYTYyOCwgMHhmODhhNTcyYywgMHg0ZDU3NWRhMiwgMHg2NDU2OGJmZSwgMHhlNmJjYmJhZSwgMHhlN2Y0NDNiYSwKLQkweDY3N2UxYzY0LCAweDljNjEwYjI2LCAweDgwZTJiZTU5LCAweGYyNjVmOThlLCAweDUwNDk4NTc4LCAweDIwOGViMTc3LAotCTB4NGM4ZTA5ZmEsIDB4YzQ3ZmY3ZjMsIDB4Yjg5OGQzNjQsIDB4MTFlYmRhMmMsIDB4YmU3ZmQ3YjAsIDB4MDdjNTAzNzUsCi0JMHhmZWY4YmQ0ZSwgMHhjZDZmZDhjZCwgMHgwNGU2NjRjZiwgMHg3NTZlZjRiYywgMHg4ZGYyMDhiMywgMHhmZmQxNTIxMiwKLQkweGZkOTRlZWE4LCAweDUyM2M4ZjNjLCAweDNlY2M2YjcyLCAweGQ2Mjc2MWEwLCAweDcwNGRkOGZjLCAweDg0NzBlZjU1LAotCTB4ZDVmN2MyNjYsIDB4NGM1ZjdlYmIsIDB4N2VmMmY2ZWIsIDB4MmY4MzYzYjIsIDB4M2Q0ZjNjNGEsIDB4N2RjNjJkMTgsCi0JMHgwZTcxNmFiZSwgMHhmMWE3NGFjMCwgMHhmNzdmOGYyYSwgMHg4MzllNGVlYywgMHg4NWI0YmFmZSwgMHg4NzU2NDllNywKLQkweDYyM2JiNGVmLCAweGFhYzY0YmYyLCAweGYxMWRhMzc2LCAweDEyODdmMDUxLCAweDdjMjBhOWU1LCAweDg2NzlmOWIxLAotCTB4NDNmM2RhOWQsIDB4NjVkN2MzODksIDB4NjViZTYxMGYsIDB4YmRlZDk2ZjUsIDB4M2VhODc3MTgsIDB4ZDlhMWYwZTYsCi0JMHg1M2U1YjBkNywgMHhmZDRmNmI4YSwgMHg5NDRmMzZmMSwgMHhlNGQ5MmNmYywgMHhmN2YxMGU3NywgMHhkNzQ0YzhiNiwKLQkweGIyM2FjZWZhLCAweGY0NGVhMTViLCAweDhmYzcwZmFkLCAweDJmYzg1YzdiLCAweGRlZjFmOWE5LCAweDYxNDA0MTVkLAotCTB4N2IzNjRmY2QsIDB4YjI3MWFlMzAsIDB4ZmM4NzkzN2IsIDB4OGZlNzJkYmUsIDB4ZWZmMTBjYjcsIDB4ZDc5ZDhmYzIsCi0JMHg3Zjg5M2JiZiwgMHhiNzc0ZmQ4MCwgMHhiNzhmZjE2YSwgMHgxNWZiMjcwYywgMHhiNzg5MmJlMCwgMHg0ZGYwNjVkZiwKLQkweDVlY2ZiNmNkLCAweGNmNjNmOGMwLCAweDQwNWU0ZjhlLCAweGZhZmY2Yjc4LCAweGZlZDAxN2M3LCAweDNhNWNmYjY0LAotCTB4YmMzNDQzZWUsIDB4YmYxNGFmZjgsIDB4MmE1YmJlMzEsIDB4ODdmN2FlZTQsIDB4ZDVlZTI5OWIsIDB4ZjYzNTdlMGIsCi0JMHhjM2Y3YmJkNiwgMHg3YTNmZjQxYywgMHgwMzI1ZmZiNywgMHg3YmE1ZTRmZCwgMHhmOWMwOGZhNywgMHg3NTM5ZGQyZSwKLQkweGJmMjM4YjA0LCAweDFiN2M4OTQ2LCAweDliYjg4OGJhLCAweDNiMDc1ZTk1LCAweDdjOWQ5MjBmLCAweDdlOGRlODBhLAotCTB4MWViZjgwY2EsIDB4MGZmMWUzYWUsIDB4YjdkM2YwYWYsIDB4MGU2ZjhmYzYsIDB4NmYzYmNiZjEsIDB4OTM2YmU1YmQsCi0JMHg1MGZiYjRiMCwgMHgzZmQwNWMwZCwgMHg3OGU4MTM3ZiwgMHg2ZmQwNDVmNSwgMHg1ZmMyNjNlYiwgMHg1M2JmNGY4OSwKLQkweGU5ZDAwN2Y4LCAweDU3ZjBhYWJiLCAweGViM2VmZDA0LCAweGU3ZmRmODVjLCAweGYwZTc1ZGYwLCAweGU0NzlmZTg0LAotCTB4YzQ2NmYwMjIsIDB4ZmQ1N2VmNGYsIDB4MzcyOGFiY2YsIDB4ZjE0NDdlM2IsIDB4NGNkYmE0MTAsIDB4YjZlZjY4OTgsCi0JMHhlZTMwNzJjZiwgMHhmZmJkOTFmYywgMHhlZjU3OWUzZSwgMHhhZDFmZDFkMCwgMHhjOTE2ZmJkZSwgMHhhM2NlZWY0ZiwKLQkweDIyNjQ5ZjE0LCAweDA2Y2JkOThlLCAweDkzYjhmMWZlLCAweGQ4NmI4NWM4LCAweGJkN2VlNmU4LCAweGZkZmEzZmMwLAotCTB4MTczZDBmNWUsIDB4NjNlNzNkZmUsIDB4ZTQ0ZmVmYzMsIDB4ZjJhOWJmZWYsIDB4YWUyMzAyM2MsIDB4MWRmMWI3NWIsCi0JMHhkMjBmM2ZlMSwgMHg3NDgyOWE0YiwgMHg3MWJjZmY3YSwgMHgzYTBmMDM2OCwgMHg2YzcyNjFlMiwgMHg1YzdlMmFmYywKLQkweDI5Y2UyMDY1LCAweGFkYzQ2NWU4LCAweDUwNTNlMjA2LCAweDQ1NzhjNmNmLCAweGM1OGI3YTQ4LCAweGViYmQwN2QxLAotCTB4ZDdhYmRjNzgsIDB4MTk5ZmNlNmUsIDB4Njc4ZjBmYTQsIDB4YTcyYWRhZmQsIDB4NjM4YjhiYTEsIDB4MmZmZTA4NWQsCi0JMHhlYTg4OWY4YiwgMHgwYzczYzUzNSwgMHg4ZDljZjUzYywgMHhhYjRmYzdhZiwgMHgzN2ZhOWUzYywgMHg5MDJjODdlZiwKLQkweDlmMjFmYmFjLCAweDc1ZDYzZjIyLCAweGYzZjJhZmJlLCAweGNiYmNmYzA0LCAweGM4YjdiZWMwLCAweDUxNzllYmY3LAotCTB4OGFjODc4YTYsIDB4ZTNkMjQxZjAsIDB4ZWM2MTdkNTYsIDB4NTVlMTU5OTcsIDB4ZDU0ZjVjMWMsIDB4YTI3NWYxNzcsCi0JMHhhNDNiODc2NywgMHgwNzNkM2Y0MSwgMHhkNzNmMTM3NiwgMHg0NTVmN2Q2ZiwgMHg5NmQwZjMzZiwgMHg5ZWRjYTg5ZiwKLQkweGViODNmMmUyLCAweGZlMDYyODQ0LCAweDE3ZjY5NzllLCAweGNmMWQ3OGYzLCAweDMzOGViNjNmLCAweGQyZjFjMWNjLAotCTB4MzhmZTI3YjAsIDB4MzUzZjViMGQsIDB4MGMxMzUzOGQsIDB4ZjM3ZjNjYWIsIDB4NTQ5ZGUzZmMsIDB4N2Y2Mjc3ZmMsCi0JMHgwY2VkYmIyNywgMHg4NjRlZjNmMywgMHhmNmYxMTllNSwgMHhlYjEzM2Y2NywgMHgwMzVlNzFhNiwgMHhiM2NhNGJkNywKLQkweDMzY2ZjYTNlLCAweDg5MjM3YTRjLCAweDFlOTc5OGYyLCAweDllMGVmMTlkLCAweGUyMGE1YjhiLCAweDY3NjBmNjhjLAotCTB4Y2VkM2U3MzMsIDB4NDI4ZmYwN2YsIDB4YmQxZTc3N2EsIDB4NmE3NWM2NWIsIDB4YzYzN2UyMTcsIDB4YjM3OTJjMmUsCi0JMHhmNDFiYWE3MSwgMHgxNWJiYzk0MiwgMHhhZDVkOTA5MywgMHgzMWYyNjZmYSwgMHgxODdlMDk5YiwgMHgwM2FlMDQ2NywKLQkweDllMGZkMGFkLCAweDI3ZmNjMDJmLCAweDk0ZjY0Nzg0LCAweDY0Nzg0MGNmLCAweGUyYmJhNmRkLCAweGI1ZGE5NWU0LAotCTB4MzZmM2NhMGEsIDB4ZTZlYmI1ZmEsIDB4NzY3NjZlM2MsIDB4ZTlmYjE3YTIsIDB4MGJjOGMyYmQsIDB4M2M0MTQ4YWEsCi0JMHgzYjdkZDY3ZCwgMHgyOTE1OWQyZiwgMHg5OWQ2NzlmYSwgMHhlY2JlODQ4ZiwgMHhlZjAxZjI2OSwgMHg1ODE2NzNmMywKLQkweGJkZjkxMDZmLCAweGQyMGU3YjU1LCAweGIwYWFhMmI5LCAweGFmODBiY2M0LCAweGU0ODNhY2M1LCAweGFhNDc2NmU2LAotCTB4ZGIzMzViYzgsIDB4ZmU3YmQ1MGYsIDB4Nzc1N2RhODUsIDB4MmMzNWY2ZjIsIDB4M2NmMWVkNGMsIDB4MWYyNGM0NDYsCi0JMHgwNzc2MmQxMywgMHg5MTNlZWZlNywgMHhhNjdiNTFkNywgMHhmNjYyNDU4NCwgMHg3YzEzZWY3MSwgMHg5YmE0ZDNkYiwKLQkweGMyMmQ3YmY0LCAweGE5MzllMWE3LCAweDJlYTcxYTZlLCAweDhlMzRkYzNjLCAweGNjZWVhZWQxLCAweDkzMTIyYzc1LAotCTB4NzRhNzU0N2YsIDB4OWRkNWJmMTMsIDB4NjcxYTNiZjksIDB4MzI5YWJlNDAsIDB4ZmI4OTBmMDksIDB4N2I4MjY1MWYsCi0JMHgyNjI5ZmZiMCwgMHhiZmZiMDc3OCwgMHhlNmI1YzY4MSwgMHhlNmNlNjY3NywgMHg1YmFjYzI3MSwgMHhjZTM0MTk3OSwKLQkweDg1MjY1NGJkLCAweGI3NmYwMDVhLCAweDBlMjU4MTZiLCAweDVlZTk5ZjY4LCAweGMzMmFmYjlkLCAweDI4NTM1NmYzLAotCTB4ODc2MWZhM2YsIDB4OGNkZTUwYTQsIDB4NGE3NTlmMzgsIDB4NTgzNjgyZDcsIDB4ZDZkMzlmNmYsIDB4YTMwMzc1M2YsCi0JMHg3MDdmODEzYywgMHgyNzkzMTM1YywgMHgzZTc0MjJjMCwgMHhlNDM3NjhkMywgMHgyMDhmMjViZCwgMHgxNTAxM2YxYiwKLQkweGYyZjgwYjI4LCAweDY4YzExZTQ1LCAweGI0ZjNhNTE2LCAweDNjZmNkZDZiLCAweGNkMmQxOGUwLCAweDEwNmZkZjg2LAotCTB4ZGU3MWJlNzYsIDB4NDBmOWM4NmYsIDB4MGJjMGI5Y2IsIDB4OWI0YzA3OWQsIDB4MThlMGZhNWEsIDB4Mzk2ZjYzMWYsCi0JMHg3OThhOWQzZSwgMHg5Njc3NjllMiwgMHg4M2E1MWY2ZSwgMHhhNjUyYzFkZiwgMHhlOTczN2Q1MSwgMHg5N2E4MmNmOCwKLQkweGY1ZTE2ZmI1LCAweGNmOGU5NzVmLCAweGFiOTU3YTgxLCAweDI0NmJkNzkzLCAweGIzNWZhYmNhLCAweDYwYjRjMTcyLAotCTB4ZTVlODI1ZDEsIDB4MjUyMzAwZGIsIDB4MTFiY2JkMjYsIDB4ZTJhYTcxZTksIDB4N2ExNjNiZGQsIDB4NWZhMTRmMzEsCi0JMHgxNTY1ZjhlNSwgMHgxNGY0NmVkOCwgMHhlZDZjYjc4ZSwgMHhhNzg4ZWRkZCwgMHgzMzY4YjYzMSwgMHhlZmVmOTNlYSwKLQkweGVhMmE3M2ZkLCAweDA5ZDMyZjcxLCAweGQ1NmIzYTNmLCAweDY4ZjA3ZTkxLCAweGU0ZjNiOWNhLCAweGMyZjM1OWMzLAotCTB4YTVkOWZlMGMsIDB4MWMyMjc2MDUsIDB4ZDJjN2YzNmQsIDB4YWFlN2JjMzksIDB4MWZkMTM4MjYsIDB4NmNmMjIzNWMsCi0JMHgwZmM4MWQ5ZSwgMHg3ZWYxZTdlNCwgMHg3NWZiZTBlZSwgMHhlYjBmMjI5OSwgMHgyOWI5YTNmNCwgMHgwZmEzY2VjMywKLQkweDVkYmIzMjFhLCAweDdkNWMwYzRhLCAweGIzZWQzZjRhLCAweGZmN2Q5ZGY3LCAweGM0OWJjYzNlLCAweDc1OWM2YTdhLAotCTB4MzdmYmYwNjUsIDB4OTNjOTBhNWQsIDB4ZTk4MWZmMzksIDB4MGI1ZmM0NjksIDB4ZGUyMTdmMDQsIDB4Zjg3OTMxOWMsCi0JMHhjYWEwZTQ4YiwgMHg4ODc0YzNjZiwgMHg4ZTlhNmVmNSwgMHhiNTgyOTdmMywgMHhiZWFiYjlmMiwgMHg2ODE2OWUzYywKLQkweGNmOTBmNzgxLCAweGJjODg3MWRmLCAweDM0YmU3MTFiLCAweDdiZTMzY2U2LCAweDc5ZWI0Nzg4LCAweDhhOGU4ZGM2LAotCTB4NTU5NzdlMjgsIDB4ZTUwNzI2NzksIDB4YTI3Y2UwNmQsIDB4ZjQ4NTkxZDQsIDB4NjQ3NzllYjMsIDB4OWUyZGJmNGEsCi0JMHg5YzVlYjExZiwgMHhmNzA0NGM3NywgMHgzZTgxOWQ4ZiwgMHg5ZmVmM2YxYywgMHg4MzBlM2JiZCwgMHg0MGJkNWZkYywKLQkweGU3Y2E2MWY1LCAweGE1MjZjYmQ1LCAweDIxNWNmYzJiLCAweDgyMGQwNWQ5LCAweDVjNmQzMmFmLCAweDE4ODdiMDNmLAotCTB4MzlmNmQzZWQsIDB4ZWJmYTNmMjQsIDB4YzlkNGRmN2QsIDB4MzA1ZWM4MGUsIDB4YmVlNmZjOTMsIDB4ZTYzMGRjZTQsCi0JMHhjMjNkZjUxMywgMHhmZDgyOTdjZiwgMHg4ZjdjYTEyMCwgMHg3MTEyOTNkZSwgMHgzZjNlNDg3OSwgMHhlN2U3YzhiNywKLQkweDNjYzk3YjY2LCAweDZmMzlkZjZlLCAweGQzZmE5NDU3LCAweGM4NjA3ZjQ1LCAweDBmOWUwYzY3LCAweGZhZjk5M2VlLAotCTB4MjVlNGQ3ZGUsIDB4ZTBiMzQ2MzgsIDB4MmYxM2I0N2UsIDB4ZDM4ZjNjNzYsIDB4ZjAxN2ZlN2MsIDB4ZjA2MzNiYWYsCi0JMHg4MTFjNzQwZiwgMHg0MjY3MzRmNSwgMHhjNjcwOGUzYSwgMHgxY2Y1YTNhMSwgMHgyMDQ3MTFlYSwgMHg1ODdkZGIxYiwKLQkweDg2MDU2ODc5LCAweDRmZTdhYzVlLCAweDQyY2MxMjk5LCAweGRiZTk1OTNjLCAweDZiM2M3NGEwLCAweGVjNjYyOTg3LAotCTB4MTZlYzk0ZjksIDB4MmY1NzdlODMsIDB4YzMyYmE1ZjMsIDB4OGIxY2Y0NGQsIDB4ZTdiZDVlNzAsIDB4NmRjMjFiNTMsCi0JMHg1MjdiZjFkMCwgMHg4Mjc3YmI3YywgMHhkNjY3YWY5MywgMHg0NGU2MzJmMSwgMHhlZDM4ODE2ZCwgMHg1MDk1OTc4YiwKLQkweDQ5OWY4MDdmLCAweDhmNWNmYzE2LCAweDE0ZTI5YWYzLCAweGZjNTBjMmViLCAweDJmZWQ4ZjVjLCAweDhiZmUzZjAyLAotCTB4YzdlMThmYzEsIDB4YWUzOTA4ZDUsIDB4YTAyNzdkYzEsIDB4YjNiYzFmZjMsIDB4ZGM2MGYyMzMsIDB4M2UyMzU5NzIsCi0JMHhhNjQ5YmM1ZCwgMHg5ZmI0MmRiOCwgMHgyODMxOTU5OSwgMHg2ZGFmOGJmNywgMHg3ZTA3NmZkYywgMHg0NGJjZmM1OSwKLQkweDljNDBiNGZjLCAweDljNDRmZjJmLCAweGVmZTZiMTNmLCAweDkyMDljZTU1LCAweDFlNzBiZDllLCAweDQ2ZjQ4ODVmLAotCTB4ZjNmMzE2Y2QsIDB4N2ZjMjlkYmIsIDB4Y2ExY2IzNzQsIDB4NDdmNzE1Y2IsIDB4YWQ3ZjgyYzgsIDB4MDlhZDNmZjgsCi0JMHg2YTkwNWViOSwgMHhjN2E1Njc2YSwgMHgyOTliNDZlOCwgMHhlYTZiM2MwZiwgMHhkN2U0M2Y0MCwgMHg2ZmJjZGE2NywKLQkweDE3ZWRmYzUxLCAweDIwZjE4Njc2LCAweDI5MzY5MmJmLCAweDI0OThmODgyLCAweDRiN2VjMzRkLCAweGZkMTk3Yzg1LAotCTB4YjY2NjU5OGQsIDB4ZTY4MzcyZWIsIDB4ZWRmOTc5ZjMsIDB4OTc3OWYzZTYsIDB4YjUzNDhjNzUsIDB4OWU0ZDdjYmYsCi0JMHhhMTE1ZmRlOSwgMHhhZmVmNGQyYiwgMHg1NGMxMzJkYSwgMHhjZWJlMTcxZiwgMHhhZWVhZmVkNCwgMHg3YzdkNTMzMiwKLQkweGZiNTM0NmU0LCAweDliNjc4Nzg5LCAweGRmNzRkN2VhLCAweGY5M2Y2YTZkLCAweGZiZDM3Y2Q4LCAweGE2ZDVhMzZiLAotCTB4YjQ3ZmQ3ZjcsIDB4NWFmZjU0YzQsIDB4YjUzMWZmZmYsIDB4ZmFlNDJjOGYsIDB4NjY1MzQwZWIsIDB4N2M5OGYxZjYsCi0JMHhhYTBmMDNlMywgMHgzZjlmMWQzNiwgMHg4YmQzNjg1OCwgMHhmODY3OWY2MywgMHg5NjU4YzViZCwgMHg0ZTlmZDFmOCwKLQkweDNhYTc2N2E0LCAweGQ3NjNiMmIzLCAweDM3NjY1MmY3LCAweDRlYTk5ZmU5LCAweGYwNjQzZDczLCAweDBiZjAwZTRiLAotCTB4NDU5MzdmMTAsIDB4NmRiYzgwZWYsIDB4ZDUxOTM5NDEsIDB4OTgzYjQzNzgsIDB4ZTJlNDZjYTEsIDB4YTc5NDE0ODIsCi0JMHhjNWY5ZjFhNywgMHg5MjM2ZDljOSwgMHg5ZDA4ZmFiMywgMHgwZTczOGY4YiwgMHgxNzM1NmRmZSwgMHhmNzQ4MmVmOSwKLQkweDJlMTk4MGExLCAweGEzMzEwMGNhLCAweDk2MDZlNjBjLCAweDI5MDYwYjBhLCAweDI4Zjk5Y2Q5LCAweGVlYmFkMmVmLAotCTB4MTViZGViMWIsIDB4ZGM5YzA3MWYsIDB4NjE3ODcwMWUsIDB4ZGZkOTM3OWQsIDB4NjQ1ZmVlMjEsIDB4MzEyOTczMWUsCi0JMHhhOGY1OTBmOCwgMHgxZWYwZWVhOSwgMHhkNzdmZTJkNiwgMHhlYjJlN2E2ZCwgMHg2OTc1NGNjNywgMHhmZmNhNGNkMSwKLQkweDNkOTcwNDQ5LCAweDFiNGRmZTczLCAweGIzZDliZjQxLCAweGNmMWE1NDAyLCAweGUyZDhlNmRiLCAweDlkNDVmN2U2LAotCTB4OWRlNzk3MTcsIDB4ZjEwYmJlZDAsIDB4ZmIxOGE1ZmMsIDB4Mzk3NDhhMmUsIDB4MzNjNmY2OTUsIDB4M2Y1NmFmOTgsCi0JMHhlZmZjOWZiNywgMHgzZjU5ODcyYywgMHgyMzdkZDYwYywgMHg5Nzk2M2U3OCwgMHhmOWQ0Mjc5ZiwgMHhkYTliNmI5ZiwKLQkweGRmNzVjMjZmLCAweGI3YzJlNzk4LCAweDdlNjA2NzY3LCAweDdmMDI3NjQyLCAweGU3YzVjNzNjLCAweGQ1NTM0MmYxLAotCTB4OGNmMDBiNGQsIDB4MjU4OWRhMDksIDB4NzNiMmU3ODMsIDB4NjhlNTBkMjIsIDB4ZjkxMThkN2YsIDB4ZTJkOGNmZDQsCi0JMHg3NTlkM2RlNywgMHgwNDdiN2Y3MiwgMHgxM2I0NjgyYSwgMHhjYjNmN2UzNCwgMHgzZDc3Y2FhOSwgMHgyNDU1YjI5OCwKLQkweDdmMjJjZTA3LCAweGJiYmFiZmNlLCAweGY2NWY5Zjg0LCAweDdjM2NmMjY1LCAweGY0MzdlMDlkLCAweGYxNTY4ZTVjLAotCTB4MWNhZGVhMGMsIDB4YjliY2Q3MzAsIDB4MzExOWUxNDMsIDB4MmU0NjYyYjcsIDB4NjYxZDZmYmMsIDB4ZWY1NDY5ZjMsCi0JMHhmMDVjZTg5NywgMHg4NzBkOGNhMywgMHg5NTdmYWRmNiwgMHgwM2Q2YmUwOSwgMHg5MDVlNTJkNywgMHhkYTE4MDVhYSwKLQkweDk5M2NjNmUxLCAweGY2MzAzN2M4LCAweGJiNGIzZTExLCAweGQ2ZDRmYzhkLCAweDA1Y2UwNzJiLCAweGI1NWJmMjMxLAotCTB4ZjdlYzZlOGEsIDB4MDg1OGJjMzMsIDB4OTMyZDY5YzYsIDB4YjQ3M2VmNGMsIDB4MDEwZjA3OGUsIDB4Yzk5ZDk1MWMsCi0JMHhkNjU0OTcxNCwgMHg5NjdlNGNkYywgMHg2OWUxYzk5YSwgMHhkOTYyNDE3ZCwgMHhlM2MzYzExMiwgMHgwZjhlMWVlNiwKLQkweDQyZWE4M2MwLCAweDNmNzNmYjNhLCAweDg2OTMxOWI3LCAweDJhMjk3NWY3LCAweDlkMWNlYjlkLCAweDhkNzE5ZTIwLAotCTB4NWI3ZWJmMDEsIDB4OTcwOWQ5MDYsIDB4NTc5NWUxOWIsIDB4MjFlMGZkM2YsIDB4ODlkOTAzY2MsIDB4ZmRlMTE2MzcsCi0JMHgzZDA0Y2IyMiwgMHg0YjZkZjNjZCwgMHg1ZGNiN2Q5YiwgMHg0ZGU1YWVkMCwgMHhiODAwYzk5OSwgMHgzMGQ4Y2EzNywKLQkweDBhMWM4NzlhLCAweDQxYjdjMWM1LCAweDFhZmI4MDJmLCAweDUzNWU1Yjg0LCAweDE1Y2NmMzRlLCAweDc0MDQ1ZTc0LAotCTB4ZDMyNTc1YzYsIDB4ZTg4MzMxNTYsIDB4Mzg2MzYxOWUsIDB4MzdmYzJiNGYsIDB4N2ZkY2I4YjgsIDB4NzkwYmE1Y2QsCi0JMHhlMzY5YmNhZCwgMHg5MDE3MmM3MCwgMHg5YjVlODFiYywgMHhiYTk3ZmQ4NiwgMHhkMzExZGExMiwgMHhkYmY0NzE1YywKLQkweGE4ZmZlZTg1LCAweDA4N2RkMzlkLCAweDEzNmZkOTRiLCAweDYxNjM2ZDc2LCAweGZhMGNiZGFjLCAweGQ3ZWMxNmYwLAotCTB4OGYyOWNiYTgsIDB4MTdiZjYzMTYsIDB4MTQxYmJiYjIsIDB4ZWU2MTdiNWYsIDB4YjQzMmVkODUsIDB4MGNmZjkwYzcsCi0JMHgzOWU2MGM3YiwgMHhjZmJiYzcwZiwgMHgzMWViZDY2NSwgMHhlYjllN2M3YSwgMHg0YWM5ZWNlMiwgMHhkZGUxZjc2YywKLQkweDEyZjZiODkxLCAweDFiYjI3MWU4LCAweGZhZjhkNWQzLCAweDFlODJmYmVlLCAweDI4Y2FiYTBkLCAweDNlYzEzMDJmLAotCTB4NWM1ZDc3ZDEsIDB4NGZmM2FkYWUsIDB4Yzg1ZGRlYjQsIDB4NjExYmM4ZWYsIDB4MTRlYzA3ZWUsIDB4YTU1ODNmZjIsCi0JMHhhNzU2ZmI0YSwgMHg1OGY3NWQxZiwgMHg2OGZiZTYyMSwgMHg5YmM3OTQ3OSwgMHhjYjUxOWZhOCwgMHgwZjNmMjBkZSwKLQkweGUyMDRmOWYwLCAweGJiNWZjMGMxLCAweGM2OWU3Zjg1LCAweGM1ZDZmMWY3LCAweGNkYTdjMDVhLCAweGQ3MGVjZjg0LAotCTB4N2Y5ZmQ4NDUsIDB4ZjMyOGI5ZmIsIDB4ODE1ZTllNzksIDB4MGZmYmQwNzcsIDB4ZjViODNlOTIsIDB4YjM4YzEyYmQsCi0JMHgzOWZlZGZkNCwgMHg3OWJmZmRlOSwgMHhiOGU2Mzk5YywgMHg4MDJmMTE4MSwgMHg5YzcxNmE3MSwgMHgyYWZmNWJkZSwKLQkweDhhNTFiYWUyLCAweGJjZWNiNjQ3LCAweGFiMDdlZTljLCAweDQ5ZjQzMzJiLCAweDQ1Y2U5M2EzLCAweDdkMTFlNzY2LAotCTB4Zjg3MmVkNGUsIDB4YzM1M2NlMTEsIDB4ZDRlYzVjNzgsIDB4MzA4N2M5YWUsIDB4ZDM0OWYzMmUsIDB4NzNkOGJjZTEsCi0JMHgzYTVlYTc1OSwgMHhmZTg3NjI1YSwgMHg1YTM4ZWQ0ZSwgMHgwZjVlOTBhMiwgMHhmNzhjZGUxMSwgMHhhNWZlZTc3NSwKLQkweGUzNzdmZDA0LCAweGRmMDBjMWZjLCAweDRiYWZlMzM5LCAweGY5ZmMxNmJmLCAweGYxODBmMTY1LCAweDUyNWZkYTc4LAotCTB4Y2Y2OGIzZDgsIDB4ZDZhNWUwMGQsIDB4MmE3ZmY3OWMsIDB4YzQxMmJkZjksIDB4MTNmZmU2MDMsIDB4NDYzYzA0NWUsCi0JMHg4YmI1N2JiYywgMHhhNDVhOWZjNywgMHhjNmUzMTA2MCwgMHg1NGY3NTIyZCwgMHhmZjA2ZDM4YywgMHg0MDczYTMxNywKLQkweDkyNTZiNzk5LCAweGNjM2RmZTk5LCAweGQ2MWFiYzAzLCAweGI3ZGIwY2ExLCAweDNlNjY3ZGIxLCAweDc1MGI5YjFiLAotCTB4MTExZDJiYzcsIDB4MWRkNDlmN2MsIDB4ZWQ0MmJjYTYsIDB4NGIwNDc3NTgsIDB4OGZkZmI0NGYsIDB4NDdmYTg2ZGIsCi0JMHg2ZjJjN2VmYSwgMHg4NmZmMDJkNywgMHgwZmViMGZlMywgMHhmZGYyODE1ZSwgMHgzMzEzMDU4ZiwgMHg0Y2ExMjYzMSwKLQkweDYyZjYxZGY1LCAweDg1MmNlMjFlLCAweDdkM2E2ZGVlLCAweDIyNzVhNjU4LCAweDNkNzM5NjYzLCAweGE4Y2VmZjNmLAotCTB4NWVlZGNjZmUsIDB4OTM5MjM3NWEsIDB4ODFlOWYzOGMsIDB4MTU1NzVjNWMsIDB4ZjYxMWZhNTYsIDB4ZjgxNWQ1YmIsCi0JMHhjMzNmZjkwNCwgMHgwODc4NWRkNiwgMHhmYjFkNzNiZSwgMHg3OWU2MGU2ZCwgMHhlZGEyZjcxYiwgMHg4ZmQ4YWQyYSwKLQkweGJiZmRjNmZiLCAweDM2N2FlZjI1LCAweDljOWY2ZTM0LCAweDI4ZGZlNWM0LCAweGJlMzUyN2JmLCAweGM5NjFmOThkLAotCTB4NjNhN2RiOGYsIDB4YWU3YmViYmMsIDB4MDU0N2JhNDYsIDB4OTk5ZGY5ZmUsIDB4NzAyYjlmZDAsIDB4NzE4NTRiMGYsCi0JMHhjNjZkYTkyNCwgMHg4NzZlYTBkNywgMHg3YmYxZTNmNywgMHhkMDJiNWI1YiwgMHg2MDZhNTc2MSwgMHhiYmRlMGQ5NCwKLQkweDg3YWQ3M2E1LCAweDhkZmMzZGYxLCAweDQ5Yzk2NWY5LCAweDllZjE1YWU3LCAweGU3NDkzNTM4LCAweGI5MDJkMGYzLAotCTB4YmE4MTg3NDgsIDB4NGM3Nzc1MGUsIDB4MmJhOTY5ZGQsIDB4YWJjYzZlYmMsIDB4Mjg1ZmUwZWUsIDB4MGY3ZWIzZWYsCi0JMHhlZjA3ZDdiZiwgMHgzMzdkYzMzMywgMHhlNTBjYjdiYywgMHhlODQ5MzUzZiwgMHhiMTY5OGQwOSwgMHhkYWNlYTFlNywKLQkweDNjNDllOTAyLCAweGU1Yzg1OTNlLCAweDI2NWY4OGM0LCAweDk3ZTIyZjc4LCAweGUyOTFhYzg1LCAweDYwZjEyMzZiLAotCTB4NWJkYTNlNzUsIDB4YjBlNjU0ZGQsIDB4Zjg4ZDJhN2UsIDB4NTFmMzFlNWIsIDB4YTgyYWMwNTksIDB4YTgzYWNiMWMsCi0JMHhhOTg1OTJiYywgMHg1NGRkNjIyYywgMHgyYTdlYjMxNiwgMHhiMTk3NGM3ZCwgMHg1NDdjYzA5YywgMHg4ZjFhZDlhNiwKLQkweGY5N2Q0NzRlLCAweGNiZTkzYjBiLCAweDFlMGYyZGMyLCAweDA1MDhjOTE4LCAweDZhYTViYTI2LCAweDY5ODY3ZTVjLAotCTB4Mjg2NGExYTUsIDB4ODAzODhiNTcsIDB4MTZhOWFlNzEsIDB4MzU0NWU2NjksIDB4ZDA3ZDkwYTAsIDB4OTNlYTY0MjMsCi0JMHhlZTIwYjYzNSwgMHgyYWI5YjI5ZiwgMHhlNzE1YWYzZCwgMHgzZWRmNmI4MCwgMHgyN2U0NzY0MCwgMHhhYTc5ZjhmZSwKLQkweDRiOTQ5MzUzLCAweGViMzI4N2RjLCAweDFhYjU4NmM3LCAweDczZTQxYmUxLCAweDFlYmJlMjJhLCAweGNkYmE4MmUxLAotCTB4MWVlNzRkZDksIDB4ZGZjM2NiZWQsIDB4NzQ1ZjcxOTYsIDB4NDVmNjlkOWIsIDB4YTAyNjUwNmIsIDB4MGMyZWUzNWUsCi0JMHhhNzk4NGIzNSwgMHg5ZjZhNTE1YiwgMHhmMjRkN2M0NCwgMHhjZTFhOTM1MywgMHg5ZTBkYTA5OCwgMHg3OGZhYzQwNywKLQkweGViZGY5MDZkLCAweGMxY2E5ZWJiLCAweGY3OGZmNjdkLCAweGY5ZWI0ZGJmLCAweDM0YjljOWY1LCAweGEzY2ViYTlmLAotCTB4ZmI0ZGMwNmEsIDB4Y2RjYTJhNzYsIDB4ZjYwM2U5YzcsIDB4NmQ4ZGQ5MzcsIDB4OWUwYTVmMmUsIDB4MjVmZmU5M2IsCi0JMHhjMGNhOGZiZiwgMHg3ZTk1ZjdkZiwgMHhjN2JlZWM1NywgMHg3NDUwMjZlMSwgMHgzN2FmNjMyYSwgMHhhYmY5NTI2NSwKLQkweGJmOTUyZjI2LCAweDFmOTlkMjY4LCAweGY2MjNiOTFjLCAweGUxMTEzNmE4LCAweDExZDAyZjRkLCAweGYwZjQ0ZmRlLAotCTB4NjEyNjYzZWIsIDB4MTc5ZTdiMWUsIDB4NzY5MmQzZTcsIDB4ZDQ0NGQ1N2MsIDB4NzdkOTNlM2YsIDB4Nzc2MzhjMTksCi0JMHhmNzg0OWYyZiwgMHhjZTY0YjYyNywgMHg5NTk0N2NhNiwgMHgxZmU3MDRkYSwgMHhjNTE2OWUwMCwgMHg3MTg3NGNlNywKLQkweDY4NzZkMzVmLCAweGQzNzk0MTk3LCAweGI4OWQ5MzE3LCAweGQ2OTZiZmFlLCAweGRmNzE3OWE5LCAweDNhZWRmYzY0LAotCTB4N2Y0MTAzZWUsIDB4ZmVhNTZmYWIsIDB4MDliZmEyZWMsIDB4MThmZjZjNGUsIDB4ZjYwZGEzZjYsIDB4NmZkNDVmYjMsCi0JMHhjMzQ4ZWY3MiwgMHgxODlhODdmNywgMHg3YTUzN2RjMSwgMHhmN2Y2MWE2NywgMHhhZjg1YTJmMywgMHhkZjg0OTg0ZiwKLQkweGJiZGVlMmRiLCAweDM0OTlkMzc0LCAweDY3YmIwN2U2LCAweGU2MWM5OWU2LCAweDczN2FmNTg3LCAweDI4OTVlMzU5LAotCTB4OWE0ZGRmZmYsIDB4ZjkwNGU2ZDYsIDB4YWIxYjcyNTcsIDB4NGRhYzVmNTEsIDB4MDljZGI5YmEsIDB4MzY1M2VmYzYsCi0JMHhmNTRlOTNhMCwgMHgwMDE1ZGFlOSwgMHgxZmFlMzRjNywgMHhiYzM2ZjIwMCwgMHg2NTllZDA2ZiwgMHhmYzNhZjhhMywKLQkweDhlNWVlYmEzLCAweDhlYjhmZWEwLCAweDJkOTY5ZmJmLCAweGZkYTAxMGYyLCAweDlmOWZjN2NjLCAweGFkNTc3NjhlLAotCTB4ZTk2MmY5YzQsIDB4ZDNlZThjZWQsIDB4NTQ0ZjY0NDgsIDB4ZjNhMjQ5OWQsIDB4N2FmZDQ2NzksIDB4ZjMxMTA0YmEsCi0JMHg4ZmI0ODNkOCwgMHg0M2M2NzU1MiwgMHhiZTJlZmFlNywgMHgxY2U5YTczZiwgMHgzNGZlZDBlMCwgMHg5NWYwZWYxYSwKLQkweDI5ZjkzZjA2LCAweGJiNzRiMzZlLCAweGY5NzBjZmM4LCAweGVmYmI2MDQ3LCAweDgzZjk4ZGQ5LCAweDdjNDRlZGJkLAotCTB4MGE4M2Q0MGQsIDB4YWEyM2RiZTgsIDB4NmRmOWZmMzEsIDB4NmU3ZjQwZDMsIDB4YjNkZjA3NTYsIDB4NjU4Zjk4MjksCi0JMHhmNDdlNjdiYywgMHg4OTI0OGY4NywgMHg3ZTNhYjA3YSwgMHhmYjRiMjRmYiwgMHg0ZGZlYTMzYywgMHhlNzg1NmY2YSwKLQkweGJhYzFhZTdiLCAweDVmMmJkYTEzLCAweDA4ZWEwNjM4LCAweDRiMzY1M2RmLCAweGYxOGNjMzdmLCAweDZhZmVhMTFmLAotCTB4YmVkMTY1NzIsIDB4MTJiZjU1ZjUsIDB4YWFlMGVmNDMsIDB4NjY3YmQyZjMsIDB4YWQ2ZGQzZDIsIDB4OTAxMWZkZjAsCi0JMHg2ZWJmNWE3MywgMHhhMTdlYjQ2NywgMHhmNDYyZjlkYywgMHg2ZWIxNGNlMCwgMHhkMmI5OWQ1NSwgMHgzYTQxOGY0NCwKLQkweGZlZTg5YjE0LCAweGVjNjVjODIxLCAweGFkYTJlYjNlLCAweDIxNzNhNGRmLCAweGJjYmM5MzMzLCAweGU3ZTQxNjFmLAotCTB4OWJlNmQ2OWMsIDB4M2ZmZjU3ZjYsIDB4MWMyYjdmMWMsIDB4NGM3MDA0ZmUsIDB4NjM4NjJmZmIsIDB4NDFiYzY5YWMsCi0JMHhmMDRjOGEzOCwgMHg1MWMzZTdmZCwgMHhmMjhlMDA5NiwgMHg1NjFjMTRhZiwgMHhjNzI4YzU3YiwgMHhmNjQyYmRhMCwKLQkweGIwZjM4ZjJhLCAweGI3YjIzNmU1LCAweDE1MTU1MmZiLCAweDM2OTg5N2YzLCAweDUyMDRlYzg1LCAweDhlZWE1ZTE5LAotCTB4ZjE0NmYxZjYsIDB4OGY3Nzk5YWUsIDB4ZjNiNjFlNjMsIDB4OTk1ZGFjMmEsIDB4ZTgyYWZhODAsIDB4ZWQ3ZGMzY2MsCi0JMHhlMDdlZjE2ZiwgMHg3NDA1NjFmOSwgMHgyNzU0ZThkMCwgMHgxNzdiNDdlZCwgMHhmYzYwZDQ1NCwgMHhiMmE3M2JkZiwKLQkweGYxYmQ0YThlLCAweDMzZmZiYzE2LCAweDNjN2ZhMGE3LCAweGI0ZWI3N2RhLCAweDk4ZGIxN2I0LCAweDY5MDVlZjQ5LAotCTB4MjQxZTk3ZGQsIDB4MTNlZTc2YmIsIDB4MmM5NGRhZGIsIDB4Y2Y4ZDliZDQsIDB4MDUyYzFkYTIsIDB4Y2UxZGI1YjcsCi0JMHhlYjllZjc4YSwgMHg1ZjkyN2JhZCwgMHg1NDI5NzVhMiwgMHgzZjQ0YWVjNiwgMHg4NTBhZTQyOCwgMHhkYTNkMjAwZiwKLQkweDIzZDIxZjM0LCAweDdiNTA4OWY3LCAweGM3OTVkNDFlLCAweDgwNjZiZTZjLCAweDZkMGQ0OTU3LCAweDJiZjAwZjU5LAotCTB4OWFmYTE2NGYsIDB4ZjUwODdkZTEsIDB4NTI3ZmI2MWYsIDB4YWIzZGUxMDksIDB4ZDliYzlhMmIsIDB4OGI0OWJmNzgsCi0JMHhiN2Q2OGZiMCwgMHhkZjMxZDRjZSwgMHhiMzBhOWVkOCwgMHhiMGFlNTIwNCwgMHhmNjg1ZGUzNywgMHhkN2U0OWFmYSwKLQkweGUyZDc5Y2RiLCAweDFmNmJlMDdhLCAweDI2N2FmM2FlLCAweDhmMzliNWMwLCAweGM1NTMzOWU1LCAweDQzN2Y1ODdiLAotCTB4MWVhNDZjY2QsIDB4N2Y0YWY3NTMsIDB4NWZiY2Y5OTUsIDB4ODBkZmYzNmYsIDB4NmE5MmZjZWIsIDB4MTU3ZmJmYzYsCi0JMHg4NzliOTVlMywgMHhlZmUxNzgxOSwgMHg1Yzc1MzFiZCwgMHhjMWU2OTQ0ZiwgMHhmNzk4MzRmYSwgMHhiZWI5ZTc4NiwKLQkweDQ3ZmExNDdmLCAweDEzZTYxZjdiLCAweDFjNmUzYjI0LCAweDhjMzI0ZjlmLCAweDI3MTBmNzhkLCAweGY1YTNjZjhmLAotCTB4OGJlYjA0MzUsIDB4NTc4ZmRmMDcsIDB4YjE5NjNjZTgsIDB4NjcxY2UzYmYsIDB4NmMxZGZkYTMsIDB4ZGNlNGY1OGYsCi0JMHg3M2ZmZGEzYywgMHgwOGJlNjJjZSwgMHg2OTY2ZWRlNiwgMHhmMTUwYmY3YywgMHgzOGZjYzM0ZiwgMHhmOGJmMDBmNywKLQkweDhhYThkZTI5LCAweDkyNmQwZmZkLCAweGE5M2ZmZjc5LCAweDM5YjRiYmY1LCAweDdlNjQ1NDllLCAweGQ3MzAyY2VlLAotCTB4MWYzN2NjMWQsIDB4YjY2YTk2ODMsIDB4NTkyODc5ZjksIDB4YjM4N2VmYzQsIDB4ZTQ1N2U4OTEsIDB4NmMzNjgyZGIsCi0JMHg1MTBiMDU3NywgMHg5MDhiMTU3OSwgMHg0NThlM2Y1ZCwgMHg4NjM1N2VhOSwgMHgzOGYxZjMzZSwgMHg3MDBlOTc5NCwKLQkweDk5N2U2NDRkLCAweDY0MmI0N2M3LCAweDY4MTYzYmY0LCAweGJmNjhjZDgxLCAweGZlMTY0YzZmLCAweDZmZGU0OGNhLAotCTB4NzdjMTQ1NGIsIDB4YmUyOTdiYTYsIDB4YzVlNTE5YjEsIDB4NTU5ZWFmYTgsIDB4NDQ4ZGYxNGUsIDB4M2M2OWE1ZjIsCi0JMHhkZWUyMzg4ZSwgMHhmYmRlZjM4MiwgMHg4ZjhjZjUzOSwgMHgzY2U0NjM3OSwgMHhiYjc5ZTM1ZCwgMHhiYTMxYjcwZCwKLQkweDBmNjFhMjhmLCAweGY3OGNhM2Y3LCAweDdlZjMyNGFmLCAweDJmYzQxMjFiLCAweGMxNWZhZTQxLCAweDQ1OWY3Yzc5LAotCTB4NzRiOWVkY2IsIDB4ZDNkZmM5Y2YsIDB4ZGE4ZmIwM2QsIDB4MTc1NDgyMTgsIDB4NmRmYjliNzksIDB4NTEzYjdiMTYsCi0JMHg5MmNmZDkxZSwgMHg4MGYyZmU3OSwgMHgxOGZjMjM1ZiwgMHhjZTkwMzVmMiwgMHhlMDU5N2ZjMiwgMHhiZTZlZTgzMiwKLQkweGM3YjhjMWNmLCAweDRkYzg0ZmExLCAweGM0NGFhNTVmLCAweDA5ODM0MDY4LCAweDA1YjdlOWVhLCAweDRhODAxZWU4LAotCTB4MzVjYTlmMzEsIDB4MWZlODE5YTUsIDB4MTc3ZmQ4MmMsIDB4ZjU3MGI5YzEsIDB4MGUzMDM1MmMsIDB4MjNjZGM5Y2YsCi0JMHg1ZDc4MThiYywgMHhmZTBmZjE2MCwgMHhiY2YxMzFkOCwgMHg5ZWMzMzJmMSwgMHhjMzAzZmMzNiwgMHgwOWZhYjAxZiwKLQkweDcxYmZiZTg5LCAweDQzYTI3ZWVjLCAweGVkMjk2Njc5LCAweDdiMjM3ZWRiLCAweGMwZWIwZDk2LCAweDRmYmM3ZTZkLAotCTB4NzhhZjM4Y2EsIDB4OWZlZWNlYzQsIDB4NjQzOTQ0NWQsIDB4YjNmOWYwMzMsIDB4NTUwZjdlMmUsIDB4NzU0M2RjNDgsCi0JMHgwYzNmOWJkOCwgMHhmZjkxOWJiZiwgMHhiZTU4MTVjNSwgMHhhODZiMGNlNiwgMHg3YjNiNWZiNywgMHgxZmYyNjZmNCwKLQkweDc5ODZiMDk0LCAweGVlMTRhNzE3LCAweGM2NzUxOWZmLCAweGJmMTRjOGNlLCAweGM5YmY3ODE3LCAweDhmZGQwNmZkLAotCTB4ZWZlZTUzNzAsIDB4OWQ3OGJjZTgsIDB4NTczYTBkZmIsIDB4NGVkM2FhN2UsIDB4YjkzNzcyNzksIDB4ZjdiMTY5YzIsCi0JMHhiYjk0ZGM2NywgMHhmODdjZWQzNywgMHgyMzg3ZmMzMSwgMHg3OWMzZGUwMiwgMHg2ODA0ZTQ5ZiwgMHhlMTlmOTE1YywKLQkweDRiOWQyMGRmLCAweDM1YmRmYzRlLCAweDQ3MWFlMzNmLCAweDYxZjIzNzU5LCAweDVkZDdlMGI3LCAweDgzNDUyMDVhLAotCTB4MjE3NjZkYjIsIDB4YWNkYTRmYzksIDB4YmZkZTRlNDksIDB4OTQyNDdmMzksIDB4YzU3YzQ0Y2MsIDB4ZmYwNjQ3Y2MsCi0JMHg1OTA1ZWY1OSwgMHhlODczZjEyYSwgMHgzODZhZTA4OSwgMHhhZmFkMzM2MywgMHhhODg0Zjc4MywgMHg4YWY2YmViNCwKLQkweDI2Nzc0Mzc4LCAweDkwN2FmYTdiLCAweGQxYWM1OTk3LCAweGUyNmZmYjRlLCAweGM5MTY5NTdlLCAweDMxM2Q0NzZiLAotCTB4ZGZiOTZmY2IsIDB4NTU1MWU0NDcsIDB4MmRmMGY1ODgsIDB4NmEwNTFmOTEsIDB4ZTYzZjU1ZjEsIDB4N2QzZjMxNzUsCi0JMHg2M2VlMmRkNywgMHg4ZjYwMmM2MSwgMHhmZDAyM2Y5NywgMHhhZGRhZjQ5YSwgMHhkYmY1Y2MzMywgMHhlYjc1Y2MyYiwKLQkweDFlNDY4NjNkLCAweDdhNGQyYmNjLCAweDVkM2RlYzc2LCAweDg3ZTgxMmQzLCAweGE1ZGIzNTFiLCAweGNkMWEwZmM1LAotCTB4YWUyMzAzZjEsIDB4YzNmOTg3NTcsIDB4ZTNjMmNmYjQsIDB4N2M5ZGQzN2EsIDB4OGI4OGIyZmMsIDB4MzQxYTJmZjYsCi0JMHhiODg2MWQ3NSwgMHgzZGUxOWY1MSwgMHhhZTM1ZDNmNiwgMHg4NDVlMzA2ZiwgMHg1NzRkMDRmNywgMHg0MzZkZmI4YywKLQkweGVmOTM5ZjIyLCAweDY0NTdhNDdiLCAweDdkZmRmYjhhLCAweDU0YWY3NDk5LCAweDFjZTk5MjU3LCAweDM4NjcxMWFiLAotCTB4NDk0ZGUwNWQsIDB4M2I3ZjBmM2QsIDB4YWQ3MGQ4ZDYsIDB4NTRhZmE4MTgsIDB4MDdjODlkMWEsIDB4NWU3OWIzMmIsCi0JMHg4NzFmMjBkNSwgMHhjNzU0ZjE0YywgMHhmZGVlMzUxYSwgMHg4MGZkMDM3MiwgMHhlMjczYzE1ZSwgMHhkYjZmYjEyZSwKLQkweGQ4ZjVmOGFlLCAweDVlYzM4NDc4LCAweGRhN2YyM2ExLCAweDVlZGQ2NWRkLCAweGFiNTVlNWUwLCAweGFiYzcyY2VlLAotCTB4YmYzMDVhMGIsIDB4NDY5NGVjMTcsIDB4ODIyYmViZWQsIDB4ZWQzYjRmZTAsIDB4YWY3OGMzYmUsIDB4ZjM2ZGQzYWYsCi0JMHhhY2RjN2FlMiwgMHhhYjNmNjhkOSwgMHhlYjQ5ZDMyNSwgMHg1NmE5MGFlZiwgMHhlOGQyZjVjNywgMHg2ODU1MTlkNywKLQkweDNjYjVhNzNlLCAweGUwODk3ZmQyLCAweDY2OWZjMTUzLCAweGJlNjMxZmI0LCAweDZmM2ZlYThmLCAweDBkZGE4ZDNjLAotCTB4ZTBlYWZmYjksIDB4NzU2NzE0YjUsIDB4ZmY5NDZkNzksIDB4NzQ2ODE2YTQsIDB4NWZjMTlhOGYsIDB4NmI5YzdlZDYsCi0JMHgyNGZkYjg5NCwgMHhiYTQyN2ZjMiwgMHhkNzk0YTNkYiwgMHhkZmM1YWJkNiwgMHhiYjQ5N2U1ZiwgMHhiOWVlYmNjNCwKLQkweGVhNzc3ODk2LCAweGY4MjMwYTZmLCAweGUwZjUxNGJkLCAweDhmOTAyZWI5LCAweGFiOGMzNDk3LCAweGFiZmQzZThkLAotCTB4NDdjOTJmNTIsIDB4ZTFhZmNmMDYsIDB4MmRhMmRiNzIsIDB4NWZiY2YyNzcsIDB4ODk2OTNkZjMsIDB4NGJjMGQxZjgsCi0JMHg0NzI4M2MyMiwgMHg0ZmRjNTFmZSwgMHhmYWIxNjAxZiwgMHg1NjM1MjljNiwgMHg2OGUxYmVkMCwgMHgxMzhhNmQ4NSwKLQkweDVjZGM1MTRmLCAweDNlMjhiNzRmLCAweDZiZjk1ZmUyLCAweDA3NWM0ZTE1LCAweDljY2FkMzlhLCAweGE2ZGY5ZmI4LAotCTB4ZDE3MjUzNzgsIDB4MzMyMjNjM2UsIDB4ZWFiNTliOGMsIDB4Y2EzMWI5NjYsIDB4NGY3ZWYxYzcsIDB4ODg5OGUzODAsCi0JMHgyN2RmNWE4YiwgMHgzODBiYzgyNSwgMHhjN2Y1ZDYyNywgMHhlZGRiNWZmNywgMHgwMDlmMGYzZiwgMHg0OTFlNjhkZSwKLQkweDdhOGU4YTc5LCAweDc4NzNiNjQxLCAweGVkN2RjNTkzLCAweGM0NGRmYTg5LCAweGU3ZWM0ZjFmLCAweDhhYmJlMGY3LAotCTB4Y2E4ZTc0OWMsIDB4MzhhYjVlM2EsIDB4ZjAwYWQ3MmYsIDB4OWFkYjlkYTAsIDB4YmVlM2UzMGQsIDB4YzlkMTU3YjgsCi0JMHhjNDliMWU4ZSwgMHhhMTdjMzE5YywgMHhmN2EyNGVhNCwgMHgzYzM0YjVhNywgMHgxMzVhYzdiYiwgMHhhNzgxOWRmMCwKLQkweDFmNTUyZWQ3LCAweDk3ZmMyYzA3LCAweDk3OGE1YmZlLCAweDVmZGZmMGM3LCAweDZiZGZmMWUzLCAweDFjZTk3M2M4LAotCTB4MmQ3YmQ4ZmUsIDB4YmZiZTU0OTUsIDB4YzhkNzg1NjcsIDB4ZGI2Njc3YWYsIDB4YzA0YmVkNGMsIDB4YTM3MWUwYjcsCi0JMHgwMzJhMWNlZiwgMHg1MDMxMWNkNiwgMHhmMTg3MDYwNywgMHg3MWNmNTEzYSwgMHg3NGUyMmU3ZiwgMHg3MTRmYjYwZSwKLQkweDU1YmNhNzdmLCAweGMzOWQzYWExLCAweGViZmNlZjgzLCAweGY3NGY2YTM0LCAweGNlYTFkNGQ5LCAweGY2YWEzZjA3LAotCTB4YjBlOThkNGUsIDB4NGJkNTlmM2UsIDB4NmYwMGRkZDMsIDB4N2UwMWY3NDksIDB4OWQzM2E2MWUsIDB4Zjg4YjVlZmYsCi0JMHg4ZGVmMGFkZSwgMHgxYmY3NGUxZSwgMHgyOTk1M2EzZCwgMHhjMjNmZmNjNywgMHhlY2U4M2ZkZiwgMHgxYzYyZjI0ZSwKLQkweGZjNTg3M2I3LCAweGNjNzg4M2RmLCAweDc0MmZlNDZkLCAweDI4YzhmZDg4LCAweDRmYTQ0YmVkLCAweGZmNTFlYmU1LAotCTB4OGZmMjY0ZWUsIDB4OTlhN2UyODYsIDB4YjE2MTc3ZGYsIDB4YzFlZTA2MzcsIDB4Nzc2NDIyNTAsIDB4YzNiYjBhZDQsCi0JMHgyZTY0YmYxOCwgMHhmMjg3YWZmMywgMHhlZWQ2MjRkNSwgMHhjYTcwZmIwNCwgMHgxNWRmZjhjMCwgMHg0NzgwMmRmYiwKLQkweDlmOTZmYjgwLCAweDRmZmI0NTVkLCAweGMyYWY3ZjQ2LCAweDMzZWQ4NGIyLCAweDkyYzVhMjMyLCAweDEzZmMwOTdjLAotCTB4Y2VmYmE2NjYsIDB4NDJkMTljZWEsIDB4ZDk3YjFmZGMsIDB4Zjg4ZTk4MTYsIDB4Y2QxNjM4NmUsIDB4MWJlNzdhYzAsCi0JMHhiYzFlYzkyNywgMHg3MmVlMWUxMCwgMHg3YjlhN2Q3MywgMHg0NzlmNjE5NSwgMHhlYjM4ZDhkNCwgMHhlN2E1ZWRkMiwKLQkweDhiNTcwZjNkLCAweGZkMTg5MGYxLCAweDcyYjc4ODM2LCAweDdlOTBlYmMyLCAweGU4YWYzZmExLCAweGU5MmJlMzFmLAotCTB4M2FlOWYxMmQsIDB4MmM5MTlmNDgsIDB4ZjQ3Y2ZjMzgsIDB4ODljMTYxYzksIDB4MjJhMTJlOWMsIDB4ZTdkYzdmNGUsCi0JMHg1ZDkzNzk4MywgMHhmNTliNzQxZiwgMHg4YWZlZmZjOSwgMHgxMzBkMzdjYywgMHhkMjlmODBkMSwgMHhiZWYzYzRhMSwKLQkweGRlMmNlZjc4LCAweGUzYzRiYjhmLCAweDY5M2ZhZDM1LCAweDFkNDU3YjBhLCAweDQ5ODdjMzE2LCAweGZhODRlODJjLAotCTB4NGJlODhlMmQsIDB4NzUxOGZmNjgsIDB4MGUyZGZkZTMsIDB4Y2ZlYzY5ZTAsIDB4OTBjOGU1YzksIDB4ZjFiOWRhZGYsCi0JMHhlZGM3MzZlNSwgMHhjNzRkZjllMSwgMHhmN2RjMWUyMiwgMHgwM2UzOGU5OCwgMHhiZmMzM2JiZSwgMHgzYWM3N2JhNywKLQkweDNmODY2NGJiLCAweDZlNjIzMDlkLCAweDgzNjgwZTQwLCAweDBmZGExYTc0LCAweGZjODZhYmQ3LCAweDk1NzkzOTgzLAotCTB4ZWQzZmM4NWIsIDB4ZmVlMzJlZTMsIDB4OGM2N2ExYjUsIDB4NmI3MjVlZWYsIDB4OGI4ZmE2OTcsIDB4N2FmMzljODYsCi0JMHhlNDA4ZTUwOSwgMHhjYjJlMTBlYSwgMHhiZGY4Y2IzOSwgMHg1ZWUyYjU3NywgMHgwZjcxMWU5YiwgMHhkZmMyMDdlMiwKLQkweGFmZjczYTYwLCAweDNlYjA3YjhkLCAweGY3YzgxYzI4LCAweGQ2YWYzZjIzLCAweGRlMGVmZmU1LCAweGNhOGVjMzQzLAotCTB4MjdmYTZmOTQsIDB4ZmRjMjlmZGQsIDB4ZDRiZmIzNDMsIDB4MzFiOWVlMjMsIDB4NjZiNmE1ZmMsIDB4MzY3MzZmNzEsCi0JMHg0OTM2ZTdlNywgMHhmNjE2N2ZiYSwgMHhmNzRhMzYzYiwgMHhmMDY0NjcxOCwgMHhhNzM4ZDNmNSwgMHhmNGEzMzJjNywKLQkweDFmMDY1YTdiLCAweDdmYjNlMjI1LCAweDdhODBmMjExLCAweDhmOTcxODJmLCAweGUzMmZlMjU1LCAweGVlYjAwN2Y5LAotCTB4YjVlYzYzMDUsIDB4ZDAxNTFmZjksIDB4OTgwNzliYjksIDB4MGY5N2UyOGYsIDB4NjBiMzI3YjQsIDB4NWYzYjVlMGMsCi0JMHg3MzJmOWY4OCwgMHgyOWRiOGM0MiwgMHg0NTY2NzllZSwgMHg3YzgzNWU3YywgMHhiOWQxZTdjZSwgMHgwZmRjM2UzYywKLQkweGU4ZmU3MGE3LCAweDc3NzlmNzE0LCAweGM0NjRmZTJhLCAweGUxNzVhMjUzLCAweGY2NWU4MGM0LCAweDJiMWYyMzI3LAotCTB4OTliYzFjNWYsIDB4Yzc5YWY1YzYsIDB4ZmJmNDU3YmQsIDB4ZTJjYWJmYjMsIDB4OGYwMDA0ZjcsIDB4N2I2MDdmNDIsCi0JMHgxNzYyYzdhNywgMHhmMGZlYjI1ZCwgMHg0MTliZDY5YiwgMHhiZDIzNGZiYywgMHg0M2ZhZTk3MiwgMHg0OGZlODBiZiwKLQkweGYyYzJmYTIzLCAweGUyYmI0MWVlLCAweDU3YmYzMGM1LCAweGI2YzNjNWVkLCAweGQwZTNlYjE5LCAweGU1Yzg0MGFkLAotCTB4ZGQwYWU5OTUsIDB4ODQ1NTc2NDMsIDB4ZGE4OWZiYWYsIDB4ZjcxMzBjNjUsIDB4NWEzYzBiMGEsIDB4OGZjYjRiZTEsCi0JMHgwOGI3MWZjZiwgMHhmMTk2ZDQzYSwgMHg5ZWYxOTE3YiwgMHg5NDJmOWM3NiwgMHhhZmU4M2UzOSwgMHhkMjBiNGNhNywKLQkweGJjOGJiZmYzLCAweGRhZDE3MTg3LCAweGZlMmYwZTFkLCAweDBlY2Y1MjRlLCAweDg1ZWExNTU3LCAweGFhOGUxZDllLAotCTB4ZmE1MGRhZjUsIDB4OWJmNDJkZjksIDB4ZmY4Y2VjMmMsIDB4NjRiZmZhZTksIDB4MmZlMjdmYWUsIDB4NGJhMDFmNzEsCi0JMHhhZDFjN2JhNiwgMHg3NmU5M2RmZCwgMHhmYTAzNzdkMywgMHhlNWRkODEzYiwgMHgyZDMzZmExMCwgMHg5ZWM1ZDM5OSwKLQkweGFiNGRkN2M3LCAweGYwMjNkZDVjLCAweDY3YzA4Zjc2LCAweDFlNTdiODlhLCAweGFlMjcyMWQ2LCAweDM5YmI0NjQzLAotCTB4MDA5NGZkZTIsIDB4ZWYzZjdiOGIsIDB4ZmE1NzA4NjMsIDB4ZWNmMDNhZTAsIDB4ZmJmNjMyYjIsIDB4N2QzYmY4ZTEsCi0JMHg3NDJiOGE0MSwgMHg4MzkyMzZmZSwgMHhmMjk0ZjZmZCwgMHhmYmY1ODEzOCwgMHg4YzY3YzE2MiwgMHhjOWU4ZWQ5OSwKLQkweGZkMTJiY2QzLCAweGQyNTg2MTFlLCAweDgwN2VkZjcxLCAweDRmN2U2MWRlLCAweGIyNzcwYWYwLCAweGM1YTJjZmIwLAotCTB4ZjczZjkyZjcsIDB4NDhhM2Y1MjQsIDB4MGYxYzUwYWYsIDB4MGRiZjM2NmMsIDB4MGE3ZTg4ZjMsIDB4OWU0YzViNzYsCi0JMHhiZDE2YmRlNiwgMHhiZTY3ODU2MywgMHgxM2I3Y2Y5YiwgMHhhM2Y2MzdmNSwgMHhkZGUzOGI0NSwgMHg1YmFjNjBmZiwKLQkweDg2ZDNiY2M2LCAweDQ5ZTBlNTliLCAweDI2YzcxZjBmLCAweDI1OTc0YmM2LCAweDZlYmEwZjFhLCAweGViZTMwYzc3LAotCTB4ZTYwYmNmMzEsIDB4NDc5ZTEyN2EsIDB4YzgwYjM5ZTgsIDB4ZmFlZTAwZTMsIDB4ZmM2ZmM1ZmIsIDB4NTljZTc4ODgsCi0JMHgxM2QyYjAzZCwgMHg1ZGEwMDc2MywgMHhiMDk1ZWI0ZSwgMHhjNjU1M2JjMywgMHg1ZDg0NGJmNywgMHg4Mjc0ZmE4OCwKLQkweDkwNzcwYjE2LCAweDZkOTc0OTA2LCAweGYxMmI1ZjVjLCAweDQzY2MzNWY1LCAweDliODk3ZWZjLCAweDJmYjQxOWZhLAotCTB4NGZiMTFkYjgsIDB4Mzg5ZDZiY2MsIDB4OGRhYWZhM2YsIDB4MjFiZDkyYjUsIDB4ZTljODY0ZjAsIDB4NmU5YzhiNGUsCi0JMHhlYzM1N2NmNSwgMHg3N2UyNzViNCwgMHhmMTdlOTEyZCwgMHg2MTRhZTFmNCwgMHhmMzFjOTVhZiwgMHg5NWJjYzc4ZiwKLQkweDFmMzQyYWNiLCAweGRkMjVhMWZhLCAweDllNjAwZmIzLCAweGZjMWVlMTRlLCAweDM5NDE5YTYxLCAweDhjZmMxNDJlLAotCTB4YzE4ZGNkZmQsIDB4NmUzY2VmZGYsIDB4ZTZmN2RkOTMsIDB4ODU3ZjA0NTcsIDB4N2NjMGQ4YzcsIDB4ZWJkMThkZWYsCi0JMHg3YWUxZWVmZiwgMHgyZGZjMWQyYiwgMHg1ZmQzODM5NCwgMHg3ODVlYmQxMSwgMHg5ZTAwZTJhYywgMHhiYTA1YWFjMywKLQkweGY4MzBjYWEzLCAweDZmM2MzM2EzLCAweGUxZWQwYmI5LCAweGY2ODdjYzYzLCAweDllNzg2Zjc0LCAweDQ3ZjAxYzZkLAotCTB4M2Y2ZTFhZWYsIDB4ZDVmOWU4MGUsIDB4OTdhMDVmMWMsIDB4MmY5N2E4YzMsIDB4MmU0ZmU2M2IsIDB4YzI5NmJhODIsCi0JMHg3MzY1ZWVmNSwgMHgyOTY3YmYxOSwgMHg1ZmExMGVlYywgMHhmNDg5ZTg2ZCwgMHhlMmE3ZmFkYiwgMHg3MjdkNmYzZSwKLQkweGU2MmJiMzYzLCAweDJlZmI0MGY5LCAweGE4M2I5ZjY4LCAweGRmNTE2YTZmLCAweGYzZGIxMzc4LCAweDc5OTI1MzIzLAotCTB4YzcxZTdiM2UsIDB4ZTY2NGY0Y2IsIDB4YWYzYzAxNzQsIDB4ZGM2NTA2ZTYsIDB4YjJmNTdjYzcsIDB4YWY3ODA5ZGMsCi0JMHg0MGE0YTFmYSwgMHg3ZWY4MTJkMSwgMHgwZTNlMGNmMiwgMHgyZTg0NzJlYiwgMHg0Nzg3OGRjYiwgMHg0NDMzYWZhZSwKLQkweGU0NDMyOGRjLCAweGYxMjQ2NzZmLCAweGU3MGE0NTcyLCAweDk3OWQyNGY3LCAweDFmOWNlOWY3LCAweGUzZjEzYzMyLAotCTB4YmI0NGNiNGMsIDB4M2JkNzFiM2UsIDB4YjdjNjk3OGYsIDB4OTE0YmFlNGIsIDB4OGIzY2VkMmUsIDB4ZGZjNmIyNGYsCi0JMHgxNzQ5NGJhZiwgMHgwNmRiNmFmNywgMHgzZmMxYjVmNSwgMHhjNjc3YzQyNywgMHhmYzYyNjVmOCwgMHg4OTk4Njc0NSwKLQkweDhkMjkxNjdmLCAweGNlOGIzN2M0LCAweDg2MzdjNDI4LCAweDNmZTIyNDVjLCAweDFhZWVmZjYzLCAweDE0YzZlMDQ3LAotCTB4OWZhM2Y3OWMsIDB4MjA5YzYzMTUsIDB4ZGYwZjY1NzcsIDB4ZGZkZmMyMzcsIDB4N2NiMTM2YjksIDB4NDE4MWViMTgsCi0JMHg5ZGYzZDA2ZiwgMHgzZDAwY2YxOCwgMHhhZDBhNjkzZiwgMHhmYzhiY2Y0MywgMHgzMWE3MmU1MywgMHhmMDhmZmE3NiwKLQkweGJiM2IxZGY3LCAweDhlNmJjY2FmLCAweDdhYzBlYmExLCAweDhjZmVlM2U5LCAweDg1MTk1ZDc1LCAweDg5ZTljMDQ5LAotCTB4NzI5OGQ1ZTcsIDB4Y2FlZGZhYTksIDB4ZjE3ODc2MDQsIDB4NWUxZGE5N2YsIDB4ZTQ4MTNkZDIsIDB4NTc4MTAxZjYsCi0JMHhjNDY2YmUyMywgMHg3ODk3ZjBiMSwgMHg4YWIzYmRiOSwgMHgxYTc5MzFmMCwgMHhmZmMwNmY5NywgMHgyMmZmODE1NiwKLQkweDFhN2ZmZjhlLCAweDY0M2RmZmMwLCAweDc5NzA3NDI3LCAweDRiZDY4OGM5LCAweGY0NWYyNGY5LCAweDQ1M2JmMTlkLAotCTB4YTBkZjI3YjksIDB4MjkzZGNlN2MsIDB4YTlkZjdmZGMsIDB4YmU0MDlmZmIsIDB4YmJmMjI1NWMsIDB4YTg4OGNmMjcsCi0JMHg0MDdiNThkZSwgMHgyYWQxN2VmYywgMHgxYWY5YzBmYiwgMHg1OTFiYzdjYSwgMHgwZWNkZmJjYiwgMHgxODk0OTdlZiwKLQkweDg1OTZkMWY5LCAweGY5ODAyY2M3LCAweGY5ZjE1NzY3LCAweDliYjE0ZGFjLCAweDU4NzVhN2Q2LCAweDQ4NWYyZTg3LAotCTB4YmIyZGZhZTEsIDB4NjAxNTIyMmEsIDB4NGEzNzZiN2YsIDB4MTIzN2Y0MGEsIDB4ZjgwOTg3N2YsIDB4MGIyMzY0NjYsCi0JMHhkMGZlZmVjNSwgMHg0ZjFmMWY0OCwgMHgwN2E0ODVmMywgMHhkM2U3MDY4YSwgMHhhNDU1OWI2ZSwgMHhjZjY5NWU4MywKLQkweGEwYjVmNjQ4LCAweDM2MDZhNGM4LCAweGJlZDc5ZjIzLCAweGYyZmNhMTFiLCAweDJiNzZlZmM5LCAweDllNWZjN2U4LAotCTB4Y2Y4MmRmZWEsIDB4NjU3OGY5OGQsIDB4YmVmZDI0N2QsIDB4Y2UxY2JiZjksIDB4MzJmNzYxMGUsIDB4NzFlMWNkMTYsCi0JMHhmZTA0MjdmZiwgMHg4ODdiMGJkNywgMHgyM2RmYTYxZCwgMHg5NGZkYjhkMiwgMHhlOWFjN2NiMSwgMHhmZjBjZTc3NywKLQkweGZhNzNmZDA3LCAweGI1OTk2OTNkLCAweDcwYTc4YTMzLCAweGJjYjE5NmZkLCAweDgzNGJlYzkwLCAweDU3ZTdhNjFmLAotCTB4ZDNlN2M0NmMsIDB4MDEzMTVjNDcsIDB4NWZjODk3ZWYsIDB4NzdmMDUxMTUsIDB4ZDZiYTdmYTUsIDB4OTRmZWY3MTYsCi0JMHhjMDFmNDI0MywgMHhjZWM3ZjYzYywgMHg2YjcyNDJlMywgMHg5ZDI3YjNiNCwgMHg2NzkzNmY5ZiwgMHgwZGRiYjdjNCwKLQkweDNlN2QyYzNlLCAweDBmYmE2ZWVkLCAweGI4NjU1NWIxLCAweGZmZTA2NGVmLCAweDM3OGFkNGYyLCAweGUxOTE5ZTExLAotCTB4NDZlMTEyNzUsIDB4NDljNDY3OGMsIDB4Y2ZjYTM5ZjAsIDB4OWNmOWFhMDcsIDB4NWNmOTQyNWUsIDB4ODJjYzYzYjYsCi0JMHg1NTZjZjk1OCwgMHgyY2ViM2U4OSwgMHhlODZlMTNiZiwgMHhhZTE0ZGU4YiwgMHhhZDQ4ZWZjNywgMHg3MWYyMDNmOCwKLQkweDE0NTNkNzdkLCAweDkxYmM1OWI3LCAweDQyNGMxZWZmLCAweGZlMjQ1Y2ZjLCAweDc4Y2RkZTYwLCAweGY4MGQ1ZGNmLAotCTB4YTNlZjc4MTcsIDB4ZWVjODk2MTQsIDB4ZjdjMzlkYWQsIDB4NzJiNzZhZGYsIDB4MmFhZDY1N2UsIDB4MWI1NzAzZGQsCi0JMHg3ZjQxMWVkZSwgMHg3ZWEzZDQ2MiwgMHhkNWE3NmUxZiwgMHgyZDJlZGQ2YywgMHhhOGViYzE4YywgMHgyN2U1MTBkYSwKLQkweGU0MzZlZTVjLCAweDJiMTllYjg5LCAweGQ4ZGM2M2RmLCAweGM4NzZmYzA1LCAweDllZWFlZGM1LCAweGZmMDdlZTUyLAotCTB4N2FjOTA4M2YsIDB4MDA4MDAwNmIsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkNWZmMDAsCi0JMHhkNTk0N2M3OSwgMHg2Nzc5ZjBiOSwgMHhjYzkzMzI0ZiwgMHgyMTMzZGY2NCwgMHg2MTI2MjIwMSwgMHgwMTE2MTIxMiwKLQkweGEwMDg0OTMzLCAweDI0NTg0ZTA4LCAweDgxZWMzNmM4LCAweDhiZjYyOGFjLCAweDBjMTk3ZTk1LCAweDZmNjJlNDUyLAotCTB4YjkwNTU2YWMsIDB4ZGE1NDQwNzYsIDB4MWEwODA5NjIsIDB4ODhiMGU4MzQsIDB4MTQ4ZDZhZDAsIDB4NDNiMDViMDUsCi0JMHg5MjEwODhhNSwgMHg2ZjE2YjYyOSwgMHg3OWU3YmQ2OSwgMHg3OTk5MzljZSwgMHhmOGIwY2NkZiwgMHhhYmJmN2VkMSwKLQkweDljY2UxYzdmLCAweGYzY2Y2Y2Y3LCAweDI3M2Y2NzljLCAweDJkNjc1YTVkLCAweDJiYTQyMjI5LCAweGNhZTZjMjI5LAotCTB4OWRiZGU0MjQsIDB4OTE0ODhlZTMsIDB4ZTk3Njk4ODQsIDB4NTVhZTUwM2QsIDB4ZDAzNDQ5NmQsIDB4NzQ4M2I1ZjYsCi0JMHg0ZWRhMTZiNiwgMHg2MjkwOWI4OCwgMHg4ZTM1YTI0MiwgMHgxMmNmZDBkZCwgMHg5MmFkYjI2YiwgMHg0OWVhYjEwOCwKLQkweGM4NDhkOWExLCAweGVlYzRmMWIwLCAweGYwYjdlNWE2LCAweGFmYWQwOTVmLCAweDQyNWNmNWE0LCAweGMxZDMzNGVlLAotCTB4MjkzZmEwZTIsIDB4YzkwODk4NzQsIDB4OWM3MDliMzYsIDB4YzMyMTE1NzgsIDB4YWMzOTA5MGIsIDB4MzQ0MzJlMjUsCi0JMHg4YmUwYmIyMSwgMHg4OWFjODQxMSwgMHhlMzk5YzQ3MiwgMHhiMTBmMWU2MCwgMHhmMTk2ZmVkMSwgMHg0MjU4ZjdmNCwKLQkweDViODkxYTZhLCAweDZjZDVmM2EyLCAweGY0MjNhZGRhLCAweDc2ODQ3Mjc3LCAweDY1MjQyMjRhLCAweGQ2ZjM4NGJiLAotCTB4MmQyY2RmNmMsIDB4NWU2N2JmYTAsIDB4MDc1ZmI1ZDgsIDB4YTE5MzU3ZGYsIDB4N2FiM2Y0NjEsIDB4ZDAzYjhkODksCi0JMHg3MTgwY2Y2MiwgMHhmNjFjN2I0OSwgMHg5NjU0ZWIxMywgMHhiZDcwYjg4NCwgMHhlOWI3YzZjMywgMHgwZTM4YjlhYywKLQkweGJmZjRhM2VlLCAweDA3OWY0YWI2LCAweDU2NjZjZmVjLCAweDliMzU3N2UzLCAweGE2NGZlZWI2LCAweDYyNmE5MWYzLAotCTB4ZWZjNTZmZWUsIDB4ZTZjNWRmZjYsIDB4ZmY4OWU4ZDcsIDB4Njc1ODY0ZmIsIDB4YTJlNzViMmUsIDB4YzRiYWZmNWMsCi0JMHgyYWFhZDdmZSwgMHhkZmI0Y2Q3MywgMHg1YjA4ZjhkYSwgMHhiMzhiNmQwYiwgMHg3YWMxODczOCwgMHgwZjNhYTc4ZCwKLQkweDYxOTE4ODUxLCAweGE3M2EzY2E3LCAweDc3ZmViZmQxLCAweGQxODQ4NDc1LCAweDU4YzM4NzdlLCAweDE1YjM1MmZmLAotCTB4NDc1NjNhZTEsIDB4Y2ViYmY4NWMsIDB4ZTNhNTYzOTUsIDB4OGUxN2VlMWQsIDB4NDliOWJkZTMsIDB4YTRlMDFlMzUsCi0JMHgyNzczMjcwZCwgMHgzNzkzZjlkMywgMHhiNDU0OTU2ZCwgMHhlNjQxMWIxZSwgMHgyM2Q2MDIzYSwgMHg1Y2M3YmJkNiwKLQkweDA2MmU2MTU2LCAweDFjMjI3NDM4LCAweDcwNjkzNmVhLCAweDQ3M2ExNWZkLCAweGZmNWNmMmY2LCAweDJhY2M1Mzc3LAotCTB4ZjRjMGY3OWMsIDB4ZmE1ZTc0Y2YsIDB4N2M2ZmQzZmIsIDB4NmJhOWY4ODQsIDB4YjA2ZGVjOTUsIDB4NzQ4ZmQ2ZGUsCi0JMHhhYzAwZjJkMywgMHg3ODkzNTMzZiwgMHhmNjEwMjY0MiwgMHgzZTdiMzNkZiwgMHhlZmU5NTlkMiwgMHhmYzMzNzYxMywKLQkweGE5ZGVlZGQ1LCAweGFlY2I0MDU5LCAweDFhNGJhMzUyLCAweDMwM2M3ODBjLCAweGFlYWNlODA3LCAweDI0YzI0ZjRkLAotCTB4MDY3MzlmYzAsIDB4YTc0OTQzYzAsIDB4Nzg4NDFlMDIsIDB4NDJiZTgxZDMsIDB4ZTgwMjMzZTEsIDB4M2FhYTA4YTgsCi0JMHg2N2E0N2Y3NywgMHhmYTY0ZTY2NywgMHhkZDM0NmI3ZCwgMHg4ZWU4MTFiZiwgMHhkOTE4ODNlZCwgMHhiZWMxMGZlZiwKLQkweGM3ZTkwMmUyLCAweGFmZTYwY2I5LCAweDgwMWRiNzA4LCAweDI4NTE1MTczLCAweGFjMDg1YWQ5LCAweDIzZWUxOGYzLAotCTB4MzFjMTljYjYsIDB4Nzk5NTNkNzAsIDB4MGFiM2Q2YzEsIDB4NjE4Yjg5ZTcsIDB4Mzc4ZDEyZjMsIDB4ZTcxM2U2MWQsCi0JMHhkNjRkNGUyYiwgMHhmZjdmNDI5MiwgMHhmYTU3OGUyNiwgMHg0ZWZkODdiYiwgMHhmY2YyMzlmYSwgMHg2ZGUyNTZlYiwKLQkweDc1YzI1OWFiLCAweDU1YTdhMTA3LCAweDUzZGFjZjgwLCAweGE3YTMwZjFlLCAweDkzZDAwZDRlLCAweDhmYTBiZjU4LAotCTB4YzY2OTM2NTcsIDB4NTZlMzllMDcsIDB4NmJjNzBlYjMsIDB4MWQ3MDZiMzUsIDB4YTI3ZTAwY2YsIDB4ZTc2NWE5NjgsCi0JMHgwNjU1OTlmMiwgMHgxOThmZjIzNywgMHhmOTQ4OGY2MywgMHhlYmY3MmYxNCwgMHhhYmJlNTAzYywgMHhlZDBiNWY5YSwKLQkweGY5YjMyNmVmLCAweDBmNTRhYWQ3LCAweGEzZWQ3ZDQwLCAweGY4ODJkMjQ2LCAweGYwMDkzZmI0LCAweDEyM2QzMDNjLAotCTB4YTU1YjUyZjEsIDB4MzhlOWViNzMsIDB4YjEyNmJmNGYsIDB4MjZlOGNiYmEsIDB4Y2ViNTlmZjQsIDB4MWZhMTBiYTksCi0JMHhiZGIzMGQ4OSwgMHgxZTczNzgwNCwgMHhmNTMzNGRkMiwgMHgzZDJiMjdhNSwgMHhmYmZhNTZmNiwgMHhjZTc2MzY4NCwKLQkweGRiNmExZTA0LCAweGRkMDE1ZDE4LCAweDVjMzliYzIzLCAweGNiNzRmMGZkLCAweGM3YzA4ZGNlLCAweGEzMzMyODlhLAotCTB4MDAyNzRhMDcsIDB4NjE2ZDlhZWYsIDB4MzYwNmIzZTYsIDB4ZTgwNGI3ZDcsIDB4MzdhYjIyZDIsIDB4Y2Y5OTI3YjQsCi0JMHgzNWViZjhlNiwgMHg4M2EwMGZmMCwgMHg4NjQ4YzRlZCwgMHg3NWYwNzVkMiwgMHhlZTcyYTFiZSwgMHgxOWQ0M2MwMiwKLQkweDE0YjU4N2JjLCAweGZhNGY0M2I1LCAweGEyODc1Y2YwLCAweDVmYTY5YWRiLCAweDg0M2IzODBkLCAweDQ3ODk2NTkwLAotCTB4NTVlNzE0YjAsIDB4NDdlZDhmZGIsIDB4YzcwZWZmN2MsIDB4ZDI1MGNiZmIsIDB4YmE3MzBmZjEsIDB4YzM2YTI5YTksCi0JMHhiNjczNThmMywgMHg3MWIxY2YxMSwgMHhjNjY3ZTMzYywgMHg0ZDdlNzI1MywgMHhiZjdjMTNjOCwgMHg4YTljNzFlYiwKLQkweDZhYjFiNjg4LCAweDlmOGFmNzBhLCAweDEyMTZlNjRhLCAweDkxMmU1ZjlhLCAweDhlOGRhMzg4LCAweDgzYTZjNWY3LAotCTB4YmUwMGYzOTEsIDB4ZTM1NWJmNTcsIDB4N2VkOGMzN2UsIDB4ZDBmZTcwNGYsIDB4MWMwMjhkYjUsIDB4NDc1MWJkZTksCi0JMHg0NmY3ZWM4MiwgMHhlMzllMjNjNywgMHg4NmJkZTAxMiwgMHg3YjZiYmVjMywgMHg1MTNmODhmOSwgMHg4YjZkNzE3YSwKLQkweGJkZmYwMWIyLCAweGMzY2E3ZGI4LCAweGVlZWJhMjdmLCAweDUzNjI1YWRhLCAweDM4YjRkOTAzLCAweDcxN2M3ZTkwLAotCTB4OTQyZGI2NjEsIDB4NjRkNTYyN2UsIDB4YmVmMTQ0YmMsIDB4ZTQ2MGVkYWEsIDB4Y2JlZmRhNDgsIDB4ZDQyZTBjNWYsCi0JMHg3Y2RkN2VkMywgMHg1MzVlMTc5ZCwgMHgxZTVjMDEzNywgMHg5ZGM3NjU3ZCwgMHg5NmUzNWVkMCwgMHg3NzhmODA2MiwKLQkweDNmZTlmYjZkLCAweDZmNTdjZjgxLCAweDkzMDgwMDZkLCAweGEzYmM1Zjk2LCAweDU0ZWZkMmYzLCAweGY3ZWNjZGVlLAotCTB4Zjg2NjUxNmQsIDB4OWYxN2NiZWUsIDB4ZGRlMDEzYmMsIDB4ZWQ4MmQ2ZDIsIDB4OGNkYzVlMTcsIDB4ZWNhZjAzZjUsCi0JMHhlOWJmZmI3OCwgMHg0ODhlYjU3NywgMHhlMTc3N2MxYiwgMHg5Nzg4ZmRiNSwgMHgwZWM2YTc1YSwgMHhkNzQ1MGRmYiwKLQkweGNmZGNlY2NmLCAweDg0OWI2NGY4LCAweDMxNTQ4ZGU3LCAweDVhZTgyNWZlLCAweGFmOTdlZmQwLCAweDI4MTExZGNjLAotCTB4OGVkNTZhMWYsIDB4NGZiZTA5NTQsIDB4OTI1ZWRiZDAsIDB4OWNhMDVlNTAsIDB4Njg4YzM3NzgsIDB4ZGZmZWU4YzIsCi0JMHg5NjgxYTVhMywgMHhmYmU1ZWExNSwgMHgyY2U3ODBiNSwgMHhkOTA4Y2ZjNiwgMHhhN2I1ZTQyYywgMHg2ZjdlZmU4NCwKLQkweDc1ZTZjNDQ5LCAweDNlYWVlZTcwLCAweDI2ZTc4ZDk4LCAweDFkMWRkMTgyLCAweDMxYzdjMGM3LCAweDQzNDQzOGMwLAotCTB4MGZiZWIwZWMsIDB4YjJkYjZmZDMsIDB4YTU0N2NlOGUsIDB4OTI0ZWZiMzQsIDB4NDc3NzljNzAsIDB4Y2UwNWJlZGYsCi0JMHg4YzJmNThiZCwgMHhkYTBmMzkzNywgMHg5ZTQxNTMyYiwgMHhmMmQ3ZGY4OCwgMHg2NzBkYWU3NSwgMHhlNzIyZWRmMiwKLQkweGM2NjUzNTM3LCAweDdjNWU1MGI1LCAweGYwMGFhYzM1LCAweDBlZjNhZjUzLCAweDcyZmMwMGIwLCAweDViNDcxZDE5LAotCTB4NmRhZWJmMTgsIDB4MzdhZGFlNWIsIDB4ZTcxYzdmNjIsIDB4YTBhN2NhMTMsIDB4ZTllN2EzY2MsIDB4ZjQ5ZjNkMWMsCi0JMHgwZWRmYWRhYiwgMHhjOTdlZjk4MSwgMHgxOTM4NjRmOCwgMHgzZTk4ZmIwZSwgMHhmMDA0OGNlYiwgMHhkNDZkYzg4YiwKLQkweDdmNWMyMGQ2LCAweDk2MjlkYWMxLCAweGFlODdkYjAyLCAweDQ5NDdlNzYwLCAweDIzMTZiOWI3LCAweGI3M2IxYjg3LAotCTB4NTMyYmJiYzksIDB4ZjRiN2M4YWQsIDB4ZmEwMWZlYjYsIDB4YjNiNTcyNTMsIDB4YmY3ZjQ0YzUsIDB4YTZkMzg1N2IsCi0JMHhlNmY3NzRhNiwgMHg1MzYzNjNmOSwgMHgxYzk1ZmQ2OCwgMHhhYmQyMDg2OSwgMHhkOGYyNjI1YSwgMHhlYTc5YzQ2NSwKLQkweGU3YzhjYTlhLCAweDJkMjNiZDc0LCAweDliYzc1Y2VjLCAweDQyOGVlNjg5LCAweDM0MmE5ZTNmLCAweGY4NDQ2MzQ0LAotCTB4ZDVhZjkwZmIsIDB4N2FmMmU1YWQsIDB4MzEyNzViMmIsIDB4OThhN2QyZjgsIDB4OGVmMTlmYjAsIDB4NjgzYWZmNjgsCi0JMHhlYjExYTMzZiwgMHhmMmZiZjRiZSwgMHhhYWJhM2U0MCwgMHg3NTVhM2U1MCwgMHg4MjBiZGViOCwgMHhmZTU3MTE3ZiwKLQkweDdmM2YzY2VjLCAweDEzOWI3YWEwLCAweDQ3NWUzNWU4LCAweDhmZTMyMzRiLCAweGZiZmM3NDk1LCAweDk2OTVhNTJjLAotCTB4MWYxOTdmMzgsIDB4NzA5NWRhY2UsIDB4NzRlZDBmNWEsIDB4NzYyZGQ3OWMsIDB4OGI2YzhlZmMsIDB4NTBhZmM5OTEsCi0JMHhlMzllYjA3YywgMHhiYmM5MTlmZiwgMHhiNWNjZTgxOCwgMHg3NDBjY2MzNywgMHg3N2E3N2Y1ZCwgMHg1YzFmMjA0MCwKLQkweGIwN2M2MTZiLCAweGY3NGRkMzliLCAweGVmMmY0NjVlLCAweGQ4MmU1NGFhLCAweDZlNWJiYmRmLCAweGE4NzQwY2RmLAotCTB4ZmYwM2M3OTQsIDB4ODY5NTc2MmIsIDB4MmVkYzliOGUsIDB4YzkyZjAxOTksIDB4ZjBjYjI2OWIsIDB4NTViYWY1NDcsCi0JMHhlNWQ2NTdhMCwgMHg1ZjgxNDM0OCwgMHg3ZmNiZWQ0OCwgMHhkN2FkMWI3NSwgMHhiZDQxYmM1MywgMHg5ZjNmMzc3ZSwKLQkweGVmODU0ZjU0LCAweDE3MmJkYmViLCAweGIxMjk3Y2MyLCAweDEyZDRkOTc3LCAweDUzNjM0N2VhLCAweDk2YmViZDY4LAotCTB4N2ZmOWMzMTQsIDB4MzdiZWNkMjYsIDB4OTEyMWY3MDUsIDB4NGYyMGFjOTcsIDB4ZjIwZDVlYTksIDB4ZjUwZjJlMzQsCi0JMHg1NmU3N2FmMSwgMHg4ZTQ5YmZkNCwgMHg4NWJkY2I4ZSwgMHgyN2Q3YWZhOCwgMHhmOWMxYjRjZSwgMHhmNjI3YzNlYSwKLQkweGFmN2Q0MmFlLCAweDBiNmUxYWRlLCAweDY4NGZkZmEzLCAweGZhNjAxZTk3LCAweGY1YjA5MThlLCAweDRmYTg3NjQ4LAotCTB4YzM3NDhmNzAsIDB4ZjgwOTJlN2EsIDB4MzlkYjUyODgsIDB4ZGVlZmU2MDcsIDB4ZGEyZTI3YTMsIDB4NzFkZWRlZmUsCi0JMHhiZDA1Y2YyOCwgMHhhM2Q3NWU5OCwgMHg5OGQ2OGY1YywgMHgyZmNiZDAyNSwgMHhlN2M5ZGIzNiwgMHg2NTk4MjU1NCwKLQkweDA1YmMyMmIxLCAweDY3YjY2YjNjLCAweDVjOWNlMGFhLCAweDlmZjBlZGUyLCAweDQzY2I5ZTM1LCAweDQyZGQ2OWZhLAotCTB4MmQ2N2QyMGYsIDB4ZjU2M2RiZDcsIDB4MDMwNzgyZjYsIDB4MjhmNDI3ZjAsIDB4ODJmYzFkMjUsIDB4YTZmMjdmZDMsCi0JMHg2MjFjMTI0MywgMHhhZWVlN2UyNSwgMHhiYTA2OWUyNiwgMHhhOTM3YmJiZSwgMHhhOGY5MjUzYywgMHg3YzhmZGQ1ZiwKLQkweDZjOGU5NTdmLCAweGI3OGVmYTkxLCAweDhhOGJmMzgzLCAweGYwMDE0NzE4LCAweDQ2ZTk4YWM5LCAweGFhN2YyMDViLAotCTB4YzJhYmI3MDgsIDB4NDIzY2Y0MDIsIDB4ZmEyYTQ1MWMsIDB4MTM3OGY5ZGQsIDB4ZDg3NWZmYzIsIDB4YWNiZDEwNzcsCi0JMHg2Mzk2N2ZiNywgMHgyMmJiYzAyYiwgMHhhN2VkMGMyMSwgMHhmOTVkNWE3YiwgMHg1ZDZkMWZhNCwgMHhlNzA1NWUxNSwKLQkweDIzNjNmMjkyLCAweGVkMzM0ZGYyLCAweGRmOGJiZjRmLCAweGU0NDVmMjMyLCAweGQ3MDVhNGIzLCAweDY2NjJkOWI1LAotCTB4OGEzOGM0ZTMsIDB4NjRiNTgxMWEsIDB4MzkzMDU2MzksIDB4ZGIwNWIyNjYsIDB4M2Y3YzdkY2YsIDB4MjljZmE2MDcsCi0JMHg0YzlkMDE1MCwgMHhmNGY0ZGEzNSwgMHg5MmRmYTdiYiwgMHhiOGRkMjNlNiwgMHhmMzg0YzBhOCwgMHhlYzcxNWNlMiwKLQkweGQ4YWY2NjJlLCAweDUzODhlZTgwLCAweDdkNTZmYTgzLCAweDljMWRjM2EzLCAweGQ3MWQxOGFlLCAweGY0MGJmZDUzLAotCTB4ODg1NzRhNzAsIDB4MjY3NmZhYjcsIDB4ZGRiODIyN2YsIDB4NTAyMjdjMDcsIDB4NGFlNzE1ZGYsIDB4ZDdlMDViOWMsCi0JMHhkZTgyMzc0MCwgMHhkMWJkYjljNCwgMHhjZmNkZDlmMywgMHg3ZmRkMzc0NywgMHhkZTlhN2QyMCwgMHg2ZWI5NzQ2NCwKLQkweGRhMTRiNTk1LCAweDczMTA1NWQ3LCAweGI0YWFiZGEwLCAweGY4NzBhYzgzLCAweDYyZmFkZDY4LCAweDExYzYxYjg0LAotCTB4ZTJjZTJlN2MsIDB4YThmYzBiMzgsIDB4MzVkMWNiN2UsIDB4MmY5Y2I2NDgsIDB4ZjhmOWJmZDUsIDB4NjdlOTZiODAsCi0JMHhjZjFiMGQwNiwgMHgwNzcwOGVlMCwgMHg4MjgxOGZkMiwgMHhhNTg4NTRkYiwgMHg0NDczZjgwYiwgMHgxMmRmNWM5MywKLQkweGRjYjkzZmU1LCAweDY1ZmFjZWY4LCAweDdjMDFhNGFlLCAweGE4ZjJmZDA5LCAweDBiNGZmOWNhLCAweDQ1MjkyZmQ3LAotCTB4YTYyNmY0OTAsIDB4YWYwM2M2NWYsIDB4MjViMDdlMDcsIDB4MjRmYzBkYzIsIDB4NzczODllM2UsIDB4OTdjZjU5MDUsCi0JMHhiYzA5OWNmYywgMHgzZTIzM2IwYSwgMHgxYzlmN2Q5MiwgMHg1MzI0ZjRjZCwgMHg4YjJlZmIzNCwgMHgwYmY2MDE5NywKLQkweGNhYWIwNzllLCAweDQzYTg4Njc5LCAweDhmZDEwMWNiLCAweGM1ZGIwYmFlLCAweDFmZWQ3YTdhLCAweGZjNmY1YjAzLAotCTB4YWNiNjAzYTMsIDB4ZmZhN2MwMGIsIDB4MDg1NmRkNWMsIDB4ZWY1YWNlNzgsIDB4ZmEzN2NjZDEsIDB4NDhmMjExZTcsCi0JMHg3ZWIwM2Y0OSwgMHg5ZmIwNWI5MCwgMHhkZmQwZGNjYSwgMHg3NmU3ZWViNSwgMHhjYjllODI5YywgMHg2MzNhZjlmOCwKLQkweGYyZGRmODIxLCAweDY4ZWFlNzE4LCAweDQ1MTU5ZjVhLCAweGZmMTQzMWVjLCAweDIzZDFkZWIzLCAweGRmMWM5MTNkLAotCTB4NmI0M2IwMDAsIDB4OGZhNWM0MzQsIDB4ZGQ2YWJjMDYsIDB4ZmUzYzAwZGUsIDB4ZmI0MGYwMGQsIDB4MmUwYzk4ZjUsCi0JMHgyZDA3M2QzNSwgMHg2OGUyY2UzMSwgMHg4Y2FiOWUzYSwgMHhjN2EwM2NkOCwgMHgwYmYyOWY3ZSwgMHg1M2M0OTczOCwKLQkweDgxYTRmYzBjLCAweDhlMDEyMzc4LCAweDIzOWM5ODJmLCAweDc1N2FiYmUwLCAweGE5ZDQzYTY3LCAweGYzMGY5MzFkLAotCTB4ZWNjMTFiM2MsIDB4YjU1MWRmMjcsIDB4Yzc4NTIwN2IsIDB4NDdmNzgzNjUsIDB4MmU3YWU5MjMsIDB4YjliMmM4YWYsCi0JMHhkZmE3MzhlOCwgMHhkZjllZmRmYywgMHhlZDJmYWZkMywgMHgxOWNkMjJmOSwgMHgwZGViNTdjMCwgMHhjNjI2ODMyYSwKLQkweDQ4OTZlZjVmLCAweGJlMTA1YjU1LCAweGM5OWEyMzNiLCAweDA5ZGJjY2QzLCAweDY4YjgwNGU5LCAweGFlYjdhODdjLAotCTB4ODAyN2IzMDgsIDB4YmVjNTY3ZGYsIDB4ZTk2Yjg0ZDIsIDB4Y2E1NzBkZjMsIDB4OWU2MDNiODgsIDB4ZmExZmRhMDYsCi0JMHg0YjE5NWMzNSwgMHg4YzgyNDNkYywgMHhmOTAzYzc0YiwgMHg5OTI1NzBkMCwgMHgzY2Q4NjJiOCwgMHgzMTU0MzdjMCwKLQkweGZiZjhjZTRjLCAweGVkMTcxM2E3LCAweGFhNDU1YTdmLCAweGU3ZmJhZDgzLCAweGJiNWYwY2QxLCAweGFjMWYxOTA5LAotCTB4ZDdkZjA3N2QsIDB4ZmNlYzdlZWUsIDB4NmU0ODM2ZmEsIDB4YWYxNjBmYjAsIDB4MTRkNDc5MzAsIDB4Y2ZlOThiYTQsCi0JMHgzNjJkMmZhMCwgMHg0OGFhM2NiYiwgMHg4Zjk0M2ZlMCwgMHg0ZTM0NDYwZCwgMHg2NDdiNTAzNSwgMHhmNDY3OTcxZSwKLQkweGEwMjhjZDNiLCAweGNmMTk5NzU3LCAweGMzOWY5M2ExLCAweDdkZWZlZDc5LCAweGM1ODlmZTAzLCAweDQ1MTg2MjFhLAotCTB4YjA2Zjk5YzcsIDB4YmZhMTRlMWQsIDB4MjYzOGM5ZmYsIDB4YzJjNGM0MTIsIDB4ODNjNGE2ODcsIDB4ZDU5ODRiMWMsCi0JMHhiZDIyNzNhOCwgMHg3ZTgzMzE4ZCwgMHhlYTUxOTEyYSwgMHhhNWFlMjM2ZiwgMHg4ZjUwNjkwZiwgMHg3NGEyN2E0NSwKLQkweGFjNzE4YmEwLCAweDNhMDBiYTA0LCAweGY1OTgzYTA0LCAweGUyNmJlMzIwLCAweDVlN2U1Y2ZiLCAweDU5Zjg3NDk1LAotCTB4OGVjZjdjMDgsIDB4ZjE4MWNiMjksIDB4MzU4ZTUxMmMsIDB4NWUwZmRmNDgsIDB4NmViZmYxOTIsIDB4ZjNmMmZiYzksCi0JMHg0ZGNiYTc0MCwgMHhkZjQ4OTdiNiwgMHg3MGUxM2ZmZSwgMHhkNGU4MjllZiwgMHgyZTVhMmM5MSwgMHhlYTNhNDdmZiwKLQkweDlkZWYxZGEzLCAweDY3NWQzZTA0LCAweGEwZDQ3YTMwLCAweDc2ZDZlYzU3LCAweDI4M2VjNTc5LCAweGQ5NDUwNjBlLAotCTB4ZjA3M2MyOWYsIDB4NzM5NjUxYzMsIDB4MDI0ODI2OTQsIDB4ZTNkNzFkZmQsIDB4MDNiZjAwZGMsIDB4MDM2M2RiOWQsCi0JMHgxNTFhZGNlOSwgMHhlYmEyNzQwZCwgMHgxMGMzOGJjNSwgMHg0OTBiYzdlZiwgMHhkMWYxYzkzNSwgMHgzMWYxMTQ3MSwKLQkweDAxZDc2MGRmLCAweDFkZDgxN2RjLCAweDUxNTliZWI4LCAweDBjYjM2MjllLCAweDZmZWFiOWZlLCAweGY4NzFiZjZmLAotCTB4ZjllN2U3YWYsIDB4NjFkMjhlYjQsIDB4ODNiMDczOTAsIDB4YzMxNTQzYzMsIDB4NjRlOWM2ZjgsIDB4ZDNhN2FmNDYsCi0JMHgyODJlZjU0OSwgMHhmNjkyZDEwNywgMHhkNzhmZGQzYiwgMHgwMDdkNzkwYiwgMHhkNTllMmVmZiwgMHg3OTdlNzAwZiwKLQkweGE3N2Q5ZjNhLCAweDNlMzNlNzljLCAweDdiMThlY2NmLCAweGY2OGJjMDA3LCAweDRmMDBlOGYzLCAweDQxYjk4NzZmLAotCTB4ZWFmY2E2NGYsIDB4OGYxM2E3MDAsIDB4MTU1ZjkwMjUsIDB4MWYwMDA2ZjksIDB4ZjhhNjI5ZWMsIDB4NTc1OWZiYTIsCi0JMHgwMTNmNGJlYSwgMHhkZTlmNjRmYywgMHg3ZDdhYzViYywgMHhkN2MyN2RiYywgMHg5N2U1OWRmNSwgMHhhMWFmY2E4ZCwKLQkweDQ5ZjVmOTMyLCAweDg4NWY5MzM0LCAweDFkMTJiYTI3LCAweDExYjJhYmQzLCAweGVhMTc0ODNmLCAweDViY2ZjNzFiLAotCTB4ZjRlZTBjNjEsIDB4NTFhMzc4OWMsIDB4MWNmMjc5NGUsIDB4YWZmZDdjMDEsIDB4OGY4MjZlMWMsIDB4ZTM5NzBlOWMsCi0JMHhmN2Y3YzVkMSwgMHhlYjQ3M2YyNSwgMHhkZTRjY2RhMywgMHgzMGU5N2NkOSwgMHhlMGU4ZTljZSwgMHhjN2VkNWY3OCwKLQkweDIzOWUzNzQ3LCAweDBjNGU2ZmJkLCAweGE4ZmJiN2E1LCAweDQ0MmJhMGJlLCAweGY1ODdhYzdjLCAweDczNGJiMWY0LAotCTB4NzM4NTdmM2QsIDB4ODk4MGYwZGMsIDB4MjJiYmRjODAsIDB4YTFmMjJiZTYsIDB4OTdjYTkzN2YsIDB4NGU4ZjA2NzQsCi0JMHg4N2FmZDQxZCwgMHgyN2QxZjAxZiwgMHhkNDk1MWE1MSwgMHhkNWEwMjI3NCwgMHg3MWM1NjIxYywgMHg5ZTMzMjhjOCwKLQkweDNlNWViMGIzLCAweGYzODk4OWEyLCAweGVmMzk0N2MzLCAweGM4YWY4ZTI5LCAweDBlNzM0OTE4LCAweDM2MjM2YWYwLAotCTB4YTNlNzM3ZTgsIDB4MjliMzRjYWYsIDB4MWIzMjVjOWQsIDB4Y2YyYTJhNWMsIDB4ZDE5Y2FhYWUsIDB4NzllZmUwMzEsCi0JMHhiYmVhMjhmOCwgMHgwMTllNzRhNywgMHhlZDIwYzZhZCwgMHhjZjBiY2YzYSwgMHhiOWY2ZmU0YSwgMHg3NGJiNTMzZiwKLQkweGVlZWYxY2Y0LCAweDc0YzlmYWVjLCAweGE3Njc3ZmJhLCAweGQ4ZTcwNmRhLCAweDFmYWZmMmI5LCAweGE1YmQwMzBjLAotCTB4NGZlYjZiNTMsIDB4ZDdhZWFlNTAsIDB4OTkxYTNlYzAsIDB4MjU0YTc2N2UsIDB4ZWZjNWZmODcsIDB4YzE4N2VkYzksCi0JMHg1NDBmMGMzMSwgMHgxMzNhNDA5ZiwgMHg1ODU0ZTBmYywgMHhlYmExM2U2NCwgMHhmZDNjNDI1OSwgMHg1MWU3ZWU4MSwKLQkweGVmNGExN2MzLCAweDEwZjcyNWYyLCAweDE4MTYyN2NhLCAweDdkZmQyMmE3LCAweGU4NWRjMGYxLCAweDljNDg1ZTZmLAotCTB4YjllNjJmYzgsIDB4ZTQwYzdmYjQsIDB4Y2FkNjBiYTMsIDB4ZTU1YThiZWIsIDB4YzljZjI1ZjUsIDB4ZGZmZWJkZWIsCi0JMHg0ZWZmYjk3MiwgMHg5ODYzNTM5NCwgMHgwYmE4YmE1YywgMHg4NjNlM2VkZSwgMHg5Nzc3ZTNkMSwgMHhlZTUwODNjNywKLQkweGY5Yzc5NWY2LCAweGUzOTVhNzI4LCAweGFlZTVjM2RlLCAweDFlNDJjYjkwLCAweDg0MzE1YzM3LCAweGUzODhjNzE4LAotCTB4N2MxYzVjNWMsIDB4ZjVmMWY3ZmQsIDB4YTMzMTVjMzcsIDB4M2ZkYmVmN2MsIDB4ZDUzYWU1MTYsIDB4ODEzYmYwYzQsCi0JMHg4OTJiODZjZiwgMHgwYmE4YmJmOCwgMHgyZmRmZDA3ZCwgMHg4Y2EzYzcxNSwgMHhjMjJlN2NkZiwgMHhkZjg1ZmU3ZiwKLQkweDE5ZWZkMDU3LCAweGQwOTIxODg5LCAweGZiOTI3YjVlLCAweGUwZjljYzZiLCAweGYyMDMzYTg3LCAweDM5ZDllMjlkLAotCTB4YTVlZGJjOGUsIDB4NDhmNzljNGIsIDB4M2Y0ZDAwZDIsIDB4ZjcyYjdkM2YsIDB4ODJlMGU5NDEsIDB4ZDU5ZjgwMzcsCi0JMHg3MTYyOThjNiwgMHgzMDY0YzFkZSwgMHg3M2U4MmJjYywgMHg1MTE1YzNjZSwgMHhiMGZmZGYyMCwgMHg1MDIxM2NiMiwKLQkweDZiZjVlYWZmLCAweDQ0N2Q5OGU4LCAweGFmMjY1MTg4LCAweGNkOWU0Mjg4LCAweDJiZjJhNzZiLCAweDAxODhmNTFmLAotCTB4ZWY5Zjk3NDAsIDB4YjlmNDgxOWIsIDB4ODFlMmQ4OTAsIDB4ZTlmNjdiNmUsIDB4ZjdmZmQxZDMsIDB4NTg5OGU1MWQsCi0JMHgzY2Q3MTRjZiwgMHhhOTJmZDMyZCwgMHg2NWU3YTA5MCwgMHg0YTdmOWYzMiwgMHg1NDY3ZDMwNywgMHhmNTE2YmIwNiwKLQkweDlhYjEzYjE1LCAweDY0YTRkMWUzLCAweDEzMGE5NmYyLCAweDE2OGZhZDBkLCAweDVhMWUyMDc1LCAweDIzMzdjNTFmLAotCTB4ZmViYTdmNDEsIDB4ZjMyNGJjZDEsIDB4OWU3MDg5OWQsIDB4MWFhZjMwZjQsIDB4MTEzYjkwZDgsIDB4MzYxMTk2Y2EsCi0JMHg5MjI1OTQyYiwgMHhjMWQ2YzM0MywgMHgzNDk2M2NmMCwgMHgyYWY3YzJhNiwgMHhmNGNkNTc4MywgMHg3ODgyYmEyNSwKLQkweDYzZTYyZmU4LCAweGFmYWYxMzc1LCAweGNlNzk3YTllLCAweDY4ZGRmODIyLCAweGUzYWY3M2MyLCAweGYwNTU3OGViLAotCTB4YzAzMTAzMmYsIDB4Y2Y0NmY1YmUsIDB4ZTI0ZjE4OTcsIDB4OGFjY2FiYTUsIDB4MWZhYmE4NzYsIDB4OWMzZmJiNDEsCi0JMHhkNzk4MTFiNCwgMHg4MmU0YmM2OCwgMHg1OTg5OWFjZCwgMHhmOTk4N2E4MiwgMHgwMjExZTdiMiwgMHg1MmU4Y2Q3YywKLQkweGI2YmU0NjBkLCAweGY0OWFmOTEzLCAweDdiZTA2MmZlLCAweDAzZTY4Zjk0LCAweGFlZDkwZDFmLCAweDJlZmVhMGYxLAotCTB4NWYzNDUyZjgsIDB4NGJlNzBiNWYsIDB4MjFjMTg0NDksIDB4YmU3MWQ4ODYsIDB4MjMxNjliMWYsIDB4YWUzMzhhNWYsCi0JMHg4NmZmYTA5MCwgMHg5N2M4ZjFjOCwgMHhiNGYwMDFlMiwgMHg0NmJjNjYzZCwgMHgxY2UyNjdjNiwgMHg5NTQyN2FmMiwKLQkweDk0ZTQ5ZWJjLCAweDE0ZTQwZGQ3LCAweGUzYzkwM2NhLCAweDA2MzZmYzQ4LCAweGYwMWM5MWVkLCAweGQ4Y2I2ODNiLAotCTB4Y2UxZTk5ZjksIDB4ZWIwZGQ1ZDYsIDB4MTEzOWZiYTMsIDB4OTM3ZmZhYTMsIDB4YmI3MjQ1ZmIsIDB4NDc1YTNlYjUsCi0JMHg0ZjE1MGZkMCwgMHhhOGMxZTYyZCwgMHg2MTg4OWMwNywgMHgyZTY3YzA3YSwgMHg5MGZiNTc2OCwgMHhmZWUwOWVmZiwKLQkweDFkZTNhOTgzLCAweGRmOGExYTE1LCAweDA3Yzk3MmZiLCAweDhmOWU1YTc2LCAweGVmODY5ZTczLCAweGFjNjkxYzY3LAotCTB4YWFmNWE1YWIsIDB4ODc5ZTQ5ZjcsIDB4ZTYyNTA1OTYsIDB4OWYxNGVkOWEsIDB4NmM5YjY2NmIsIDB4MWFmYWQyOGYsCi0JMHg1NzZkMjMxMywgMHgyMmY1MWU5YywgMHhiNjk4ZjIwMiwgMHhhMjI1NTY2ZiwgMHhmYzAxYTNmZiwgMHg2YmZmNzRhZCwKLQkweDNhMDA2ZjQwLCAweDVlZDA0ZmU4LCAweDFhYzg3YWE2LCAweDc5YjdlZDAzLCAweGNlYmNkOTlkLCAweGRmMmE3ZTBhLAotCTB4ZmEwN2YwNTgsIDB4MTZmMzExMTYsIDB4NWMzY2U0MTIsIDB4ZTI4Y2U3YTUsIDB4NTNhODQ1ZjUsIDB4YmU5YzRhM2MsCi0JMHhlMTViZWZjNCwgMHgyZjU2MmNmNywgMHgxZTc2MGExOSwgMHg4M2FiMmZmYiwgMHhjZmYwMjgzMiwgMHhmZGRjZThlNCwKLQkweGE1MWQzZDYxLCAweGNmNWEzOGRhLCAweDdmNDM2MzFhLCAweDYxN2NlMTMxLCAweDlmODc5ODk4LCAweDczZmU5MWJiLAotCTB4YmMwNWVkODAsIDB4NjRmMWRkOWUsIDB4OTc4YzNjNDUsIDB4Y2E3ZTUwNGIsIDB4ZDYyYzBkY2UsIDB4Y2ExODdmNGMsCi0JMHg3M2MwZWRjYywgMHhmZmYxMDc3YiwgMHhmYjk1ZTMwNywgMHg4ZGJjNDdjNywgMHhjZWVmNmRlMSwgMHg2MWQ4ZjE2NiwKLQkweDM4N2VjZjFhLCAweDU5NzkyM2Q3LCAweDg3NzRjYmMwLCAweGE1MTFmZTU0LCAweGVkODM0MmQ3LCAweDgwMmIxZWUwLAotCTB4N2Q4NmExZDQsIDB4ZGUzZjM1MGYsIDB4NzA4ZmYzMDIsIDB4N2MwMzE0N2MsIDB4ZjI4MTk0NmMsIDB4MGNiNjVhMDMsCi0JMHg1OWNjZDliNywgMHhmODE1NmZiOCwgMHg0MmI1YmE5NywgMHg0MGEzZDkxZSwgMHg5MmFkNGRhZSwgMHg3ZDAwZmY1YywKLQkweGUxMWE4YzYwLCAweGU1MzE5N2YzLCAweDc3OTRkNzUxLCAweDNhYjIyYTRkLCAweGQ2YWNjZTUwLCAweGYzZjdmY2M5LAotCTB4NjVmZjk5NjMsIDB4ZWNkOGVjNWMsIDB4MmMwNzk0NTgsIDB4OTYyODM3ZGUsIDB4ZGJhMDA5ZjIsIDB4N2MwMzkyMWMsCi0JMHhlNzFjZTAyMiwgMHhhNTVkNzdjMywgMHhjZTc1MGViZiwgMHg5Y2ZjZWRlNSwgMHhkMTBmYjM0ZiwgMHhjZmNiM2VhMiwKLQkweDhlYWJlMGJiLCAweDY2OWU3NjcwLCAweDc0MDY5MjEwLCAweDIyMzQ5NTMyLCAweGJhNTYzZGZmLCAweDdkZmJjZjE0LAotCTB4NzgwNWE1YzQsIDB4ZTBjNjVhN2QsIDB4NjUzZGQ2MmMsIDB4OThhZjVjYmMsIDB4YTdkNzkwZTYsIDB4MGVmNTI5NTcsCi0JMHg3ZmJjN2IzYSwgMHg3OTRlMTlkZSwgMHgzZmExNjRmYiwgMHg4ZmViOTc4ZSwgMHg1NWNmZmViMywgMHg4NGI1Y2EwYiwKLQkweGNkYmVlYjk3LCAweDU0ZjgzZjAwLCAweDAzZjgxYzZkLCAweGZhMzMyNDNiLCAweDhjMjQzYmMxLCAweDE5NTQzNGZiLAotCTB4NmM2ZmUwZGMsIDB4NWJmMTY3NjgsIDB4ZWZkMDVhYjIsIDB4N2U4MGM3YmMsIDB4MzFkYTU2NTMsIDB4YmVkZjU3MWUsCi0JMHg4MDE0NWE1MywgMHhiNzVhOTRhZiwgMHgyMDdjZmMwNCwgMHhjODI3NTE4NSwgMHg5Yzc3YWUyZiwgMHg4M2Y3YmFkMCwKLQkweDUyYzRmY2JmLCAweDllNzRlMjRhLCAweGUxZGYzYzgzLCAweDE0M2JlNDEwLCAweDM0Y2VlOWZhLCAweDI4ZmZmOTg3LAotCTB4M2M3ZmEzMTUsIDB4MDM2MTFjZDUsIDB4YWFhZDc5YmQsIDB4NmI4NWZkMTAsIDB4YmYzMjRkMjMsIDB4ZjY1NWJhZWUsCi0JMHhmODRlZjgwYSwgMHhjYWZlNDUwOSwgMHg2YzY5M2Q3NCwgMHg0M2E3ZmU2MywgMHhjYzhkOGNjOCwgMHg3NmU2ZTQzZiwKLQkweGQzMmM3NjcyLCAweDZhZmI2OGNiLCAweGNlMjk0ZmY0LCAweDQxMGM1YzZkLCAweDMzMzcxMWI5LCAweDU1ODBmZDA3LAotCTB4ZTA0NTA1MWQsIDB4MDdmMmE1ODcsIDB4YjFkOWQzZmQsIDB4ZTU1ZmVjNTYsIDB4ZDVmZjQwMmMsIDB4MTgxOWM2ZGQsCi0JMHhkOGU4NjgxNywgMHhmNDY4NTlhYywgMHg4MmMzY2ZkMywgMHgwNDQ4MjJlZSwgMHg1ZmFmNWRkMCwgMHhmZDFlOTc2OCwKLQkweDhlNTU1NzQyLCAweGQ1N2QwMDFmLCAweDQ0ZjkzY2VhLCAweDdiZjg5NzRlLCAweDg0YjJmOTI4LCAweGU2NWI1ZGUzLAotCTB4YzI4OGIxOTgsIDB4OWQwM2U3YTUsIDB4YWEzYmVjMGQsIDB4NWViZTIwNDAsIDB4ZmU0MTZiZGIsIDB4OTA0Yzk5YTcsCi0JMHgyNTJlYWZjZiwgMHgzNjdiMjdjOCwgMHgxN2M4YmYzMywgMHg2ODdiZWE5NiwgMHhiNTJkNTkwYiwgMHg4ZWVlMWYyMiwKLQkweDVmZjA4YjFlLCAweDdhODQzYzY2LCAweDRhMjZmNTQ4LCAweDdlN2MwMTRmLCAweGJkNzk1NmQ5LCAweGIyZmIzMDg2LAotCTB4YmExZjdiNzYsIDB4ZjgyNDdlNDQsIDB4Nzk2ZWZkNTUsIDB4ZTRjZDkyM2YsIDB4YjljMzhkYjcsIDB4NDJkMWYzODAsCi0JMHgwNTRhNmQ4NywgMHg5NmNhYmQyYywgMHg2MjQ0ZWNjNSwgMHhmYzVlM2UwNywgMHgwYmZiOGViZSwgMHg4NWNmOTk2NywKLQkweDU5N2I4YjAxLCAweGQ0MWU5NmJhLCAweDY2YWYzYTYzLCAweGNkZjE5OGU3LCAweDkyOGYzZTYyLCAweGZkNzMxNzlmLAotCTB4OWQwZDRlZTcsIDB4Y2ZhZmQwYTcsIDB4M2Y1NjEzMTQsIDB4Mjc1MGVhYTQsIDB4MmRlYmZjYWEsIDB4MWU4NGZkZTIsCi0JMHhjMGE5ZjgyNSwgMHg0MjcwZTk1NywgMHgzYjNhNTM4NiwgMHg4ZmRkZjAyMCwgMHhkMzdjMDNmNCwgMHgyNWNlOTFmMSwKLQkweGM2ODk1NGM4LCAweGVmNjA1ZGYxLCAweDUxZjNlNDhjLCAweDVkMDE3MDdhLCAweDM3MDY1NGI5LCAweGE5MWFlZmQwLAotCTB4MDE4OGU1MTEsIDB4YWU1YTY1ZjQsIDB4NTdjODljOTMsIDB4YTk3NmE4ZGYsIDB4NDgyM2RlMDEsIDB4MzI3Yjk0ZTMsCi0JMHg0Njc2YmY4MSwgMHg5ZDI4OWMwMCwgMHg5ZmE0MGUxYywgMHhkZjQ5ZTIxNiwgMHgwOGU4YzkyOSwgMHhiZjJjYmJkYiwKLQkweDgyNDc0YTBlLCAweDY1M2U3YmVmLCAweGJhMDRjMGZhLCAweDAyYTcxODYzLCAweDNjYjQwOTAyLCAweDNhNDEyZDI0LAotCTB4NWE3YzY3MTksIDB4YWQ3ZmZkMDMsIDB4NzhkM2Y2NjIsIDB4ZmFjMGQ2ZTIsIDB4ZmM3MmNjMmEsIDB4ZDc5NDRiOGYsCi0JMHhhMWY2YjJlZiwgMHhkYmZmOGMwZiwgMHhlNDI3M2MzOSwgMHg4MmVkZGJjOCwgMHhkZjM5MTE2ZiwgMHg5OTU3MjRjYSwKLQkweGUxZjhmYjdkLCAweDhlYWVjMDg3LCAweDEwMzkyMjY4LCAweDlkMWFhM2RmLCAweGY4OTA3ZmFkLCAweDJkZWM0ZjQ5LAotCTB4YzRmN2MzZjcsIDB4ZjdjM2YxMDYsIDB4YWZiZWI5NjgsIDB4YzNmYWFmYTAsIDB4MjdhY2U2MTcsIDB4ZTcxNDNhN2UsCi0JMHhhOGQyMGVlMSwgMHg5MzcwYTQ0ZSwgMHg4ZWYxNjFkZSwgMHgyOGZlODAzYiwgMHg5MDM3MGMzZCwgMHg0ODZmZDA1YywKLQkweDg5NzNmMzExLCAweDZkZTgyMWYzLCAweGM1NDVhZjI4LCAweDIwY2FmYTcxLCAweGEzNWY0MDE5LCAweGJmZDBjM2RiLAotCTB4MTlkMDA3NzksIDB4M2UwMmRiYTUsIDB4NDJkZjkwYWUsIDB4ZGUxOTZmMmYsIDB4YTUzMmFlODcsIDB4NzhlMzk0MmMsCi0JMHgxZjFjODRkZSwgMHg3ZjllZDkyMiwgMHg3MmY0MTMyNCwgMHgwMWU1ZWExNywgMHg4NzEzMTQ3NCwgMHgxMWQyODhmYywKLQkweDcyM2VjZjllLCAweGEwYWVkZTUyLCAweGUzZWY4MTMzLCAweDI1MmNkZjVjLCAweDUzNWY0ODhkLCAweDNkMmM1NjU1LAotCTB4MmY0ZWNjOTUsIDB4NDBkNTRlMzcsIDB4MzMyNmY3ZmYsIDB4NzQwMzFiM2EsIDB4Y2JkZjA1OTgsIDB4MjBkY2E0ZTksCi0JMHg5MGU5MmJhZiwgMHg5YzBhYThjZSwgMHhhMTk3NDk1NywgMHhlODAzMmNlOCwgMHg5OGM3Yzg0YywgMHhhOGQ5ZDNlYiwKLQkweDY3NGU1YmI4LCAweDgyNmVlMmEzLCAweGRhZGYwNGNlLCAweDM3MmU2NjE5LCAweDk2YWVkYzgyLCAweGY5MGMwZTUwLAotCTB4ZWEwNWJiMjAsIDB4NTEzMmViMDMsIDB4YjE2OWRjY2YsIDB4NDZmNmM0MWQsIDB4NjlkNDVlZDYsIDB4NDJkZTQzNTcsCi0JMHg5ZWRlMGFkNiwgMHg3YTg3MjhlOSwgMHhhNzZkMTM0MywgMHg2NzFmMTc0MywgMHgyYmQ5MGQ3OSwgMHhhM2MxN2I1OSwKLQkweGUwNGQwNzhkLCAweGZlYjE3MmM3LCAweDQ2Yjk3ZTZmLCAweGRkZGI0OTFkLCAweGQyZmY3ODZiLCAweDM3YTg3MmQ2LAotCTB4YmZmZDY1YWMsIDB4NjBjODc4ODAsIDB4Yjc3Mjg3YzgsIDB4YWRiN2VmYzAsIDB4YjMzMWI0Y2YsIDB4MjViN2U5OTQsCi0JMHhhNTNiYmY3YywgMHg1ZmIxMDc1ZCwgMHhlNGI3ZWIyYiwgMHhhMDljMjFiMCwgMHhkNmY0Y2NmZCwgMHg0YjNlZjkzYiwKLQkweGM2N2RiMTM2LCAweDc4Zjc3ZTdlLCAweDQ1OGJhNTJiLCAweDVmZWExNzNlLCAweDQzYjU1NGU3LCAweGIwODVhZjkxLAotCTB4ZDZhNTRiM2YsIDB4NTFjNzI4NTQsIDB4ZGRhNTBiYjYsIDB4ZWVhYjViNjAsIDB4NWI2MWUyYzcsIDB4NzE0ZDE0ZTgsCi0JMHhlMjIxN2ZjYywgMHhhZWFmMTA0OCwgMHg5YTY3ZDAwYywgMHgyNDVkOThlMiwgMHgyNjhmOGJiZSwgMHg4ZDkxMWZhOCwKLQkweDQ0MzdiNDI2LCAweDJjZjNjYjljLCAweDg1MGVjMDkxLCAweDUwYmY0MjNkLCAweDU5NzFhZjcxLCAweDhjMmZhODhkLAotCTB4MmVmMTEwY2IsIDB4OWQzZTY2YWYsIDB4YWZkYmUwYjcsIDB4YWZmMzA2YzYsIDB4M2QzMWM3MzQsIDB4YmY4ZjNjZTUsCi0JMHhkZGFiZGY4YiwgMHgxM2JmMmUyYywgMHhlMDE5MjQ4OCwgMHg3MDU3Zjg3YSwgMHgzYzQyNzc1ZSwgMHgxNzI3MDk4YiwKLQkweDY1NzgwZTE5LCAweDcyN2UyN2Y1LCAweDZhNWFkZDYwLCAweDM1NTEyZmJjLCAweGNjMjA1YzZhLCAweDIzY2MyNWQyLAotCTB4M2M0OWQ0OWEsIDB4ZDc3ZDkxNTEsIDB4M2M0MzRlM2YsIDB4ODQwNzk2M2EsIDB4YTJkYzVmZWIsIDB4YzIyMDNjYzMsCi0JMHhjMTM0ZDlmOSwgMHhjN2Y1NDY5ZSwgMHhlMzk1M2RmMywgMHg0ZmUwYTM2OSwgMHhlMDEwYzg0MywgMHhkZTM4ZDM0ZiwKLQkweDNkNTAzM2VlLCAweGFiNzJlNTE4LCAweDVlMzdjMTU2LCAweDIxYjFiZTQwLCAweDZmMmRmZWE0LCAweDZhOTVmMDU3LAotCTB4YWU2MmVmM2UsIDB4M2UyNTJmNzcsIDB4NDljZTRiZDQsIDB4NmZjZjJjNmUsIDB4OGQ3NzdhNjAsIDB4MzVlYTM4ZjEsCi0JMHg5ZTk5MWIzZCwgMHhhOGJjNGI1OSwgMHhjYjc1MmNmNywgMHgzNmNkNDJmOSwgMHg0ZGFlYmQ3OSwgMHg5NzY4NmY1ZSwKLQkweDVjZjI3YmQ3LCAweDg2Y2Y0ZjM4LCAweDRmZTBhMWJhLCAweDAzZWU3ZWFiLCAweDBiNTZkZmY0LCAweGYzOTZlMmZlLAotCTB4MzI1NjQyMTcsIDB4MjBlY2YyZmUsIDB4ZWQyOGU3ZjQsIDB4ZWVmNzZhNzAsIDB4YTFmOGMzOGIsIDB4ZTgyZDY2NzksCi0JMHg1ODIyNzMwNSwgMHg5OGRhODJiZSwgMHg2NGMwN2M4NywgMHgxNDM4M2I0MCwgMHgzOWRhNTAxZiwgMHg4MzIwZWY0MiwKLQkweDJhMGY5ZjgyLCAweGNmMDAwYzY5LCAweGM2Nzc3ODAwLCAweDkyMWVkYjVkLCAweDIxZjAyYmI3LCAweDM5ZmI5MWVjLAotCTB4N2M1MGE2M2UsIDB4OTNiZjNjYzMsIDB4MWNmNzY4ZWMsIDB4MzFmMGNhNWIsIDB4ZTkwMmI4Y2QsIDB4MGM2NWQzZTEsCi0JMHhiYTJlYzIxZiwgMHhhZWM4M2I3OSwgMHg5MDc2MmVmZSwgMHhjZTJlNWZkMiwgMHhiMDlhNzc1NSwgMHg4NzY4YWQ0ZiwKLQkweDI5ODAwMDM2LCAweGYzN2JhZTlmLCAweDlmYTAwYmM0LCAweDM1OGVlZjhhLCAweGMwNGQzODkzLCAweDJhNTYzYzc5LAotCTB4OWU0ZThmZjcsIDB4ZTQyODdhNzAsIDB4MmIwZjZlM2IsIDB4OTNlMDBiZmIsIDB4ZmZhMWM0NzQsIDB4ZDg0MTJlYjAsCi0JMHhlOWZjNmM0NSwgMHhmMmVhZmYzYywgMHhlOGE4Y2NjYSwgMHg4OWJkZDk2YiwgMHgwMDlhNjE5ZCwgMHhjNjhmNmNmZiwKLQkweDRlNzYwOTE3LCAweGU3MDk1NWNmLCAweDQ4MjViYTg1LCAweGZmZGZjOTFjLCAweDg3YzQxODc4LCAweGY5ZGZjZWZiLAotCTB4M2YwM2RmYmQsIDB4ZTMwMjIxN2IsIDB4MzI1Nzk3N2YsIDB4YTZmMmVmN2IsIDB4N2MwNzk4ODEsIDB4MDU0OWM3OTEsCi0JMHhkZTFjOTYxYywgMHhjZTE3YjZmNiwgMHgxYzMxZDM1YiwgMHg3ZjcyNDZhZiwgMHgxZGI2ODdiZCwgMHhlMjYzM2JkNSwKLQkweDNjYWEwZTQxLCAweDJjNTc0NjNhLCAweDFkZjYyMTllLCAweDQyZTk2ZmRhLCAweGMwM2JhNmZlLCAweDBhNGZhY2U0LAotCTB4ZmE0ZWJjYzcsIDB4YjhjMDgwZmIsIDB4ZTMwMjUyNGUsIDB4N2UwZTQyYzMsIDB4MmQ2YWZkY2MsIDB4MTdkOGE1YmQsCi0JMHhjNGI0MmJmMywgMHgzZDYwYjNkOCwgMHhjMWJhYzMxZiwgMHgxNjkxZjQzZiwgMHhiYmY4MzVmOSwgMHhhNTQ4Y2UyMSwKLQkweGVlODk0OTJlLCAweGEzODgxZWJiLCAweDM4ODFiZDZmLCAweGM5OWUyZGJhLCAweGY2OTRhNTgzLCAweDYyY2QzZjMwLAotCTB4Y2VmOTgwMmYsIDB4NzllMWI4ZjMsIDB4MWYzYTc3MWUsIDB4MjM1MGUyYzksIDB4NWYxZjE5ZTMsIDB4ZTQ0ZGZiY2EsCi0JMHhmMTEwZjllNSwgMHhkOWRkZjE2ZSwgMHgzNTYxODM2NiwgMHg5YjFmZWI1ZCwgMHgzNjc1NjE4OSwgMHhmNTY3ZjEyNSwKLQkweDMzOWY5ODhkLCAweDY3YWJlZDhiLCAweDM5ZjMwNWFmLCAweGY4YWFiZjQ1LCAweDhlYjBhNWQyLCAweDE4YzcxNjIxLAotCTB4OWViNjE3MjgsIDB4YTlmYTA1ZDEsIDB4YTgzZjYwN2IsIDB4ZjU3ZGIwNGYsIDB4Y2M1MmIxODQsIDB4Yjk1ZjE1NTcsCi0JMHgzY2UwMWUzNCwgMHhlYzc4OGJjMywgMHg3NTEwOGZhZCwgMHgzM2RmOGUwNywgMHhjMjRmZjE5YSwgMHhmYzc1MTBmZCwKLQkweDViOGE4NWZjLCAweGE1NWUyZjVkLCAweGU2Y2VmYjhjLCAweGVmYjg4OWUzLCAweDk5MTQzNjJjLCAweDczYmVlM2NkLAotCTB4MGE0ZDY0MGMsIDB4OTFkYjlmNmQsIDB4NDhkNWVjYzAsIDB4ZGM1OTAwZDcsIDB4NTM3MTE1ZDcsIDB4ODc0MTc3NzEsCi0JMHhiOGZlNjkzZCwgMHg4ODliYzZlOSwgMHhmZTIwZmU5YiwgMHg3ZjRkYzc5NiwgMHg2ZTI0MWYxMCwgMHhiZmE3OGNhYSwKLQkweGI2NDE3YTBlLCAweDk4MGYwZjFmLCAweGQ0MmFkYzE5LCAweGNmZTBlNWI1LCAweDYwOTBiY2JjLCAweGU5MDE3MzFlLAotCTB4ZDAyOGVjZjcsIDB4ODk2ODhlYjMsIDB4MTM3YzhhZGIsIDB4ZTFlYmUzZjUsIDB4MjJhMWNlMmQsIDB4MzlkZjk5NTYsCi0JMHhkNjAzNTg5YywgMHg5NjhjZTQ5ZiwgMHgwZWUzNTFkNSwgMHhhOTRjMGZjOCwgMHg0ZmY1OTY0ZSwgMHhmYjI3ZWM2YiwKLQkweDkwNjlhMzNlLCAweDU1ZDMzZGFjLCAweGFkNjdhYjI4LCAweDdkZjY0M2JkLCAweDU5MzJkNmZmLCAweDc3NzNlMDdkLAotCTB4Y2RiZmJlY2IsIDB4YmY1NjU5M2QsIDB4N2U0MGZmMGMsIDB4NzY3ZTQ2YTYsIDB4NjVmYmI2ZmIsIDB4MWQxYzk3ZmQsCi0JMHhkZGNhN2U4MiwgMHg5NzEyZmU1YywgMHgyODc3MzNiZCwgMHhmYWMwYTM3MywgMHhjYmU2ZGFmMywgMHhjOTFlMjNjNiwKLQkweDQ1ZjZkMTIzLCAweDIzMTc0ZjFjLCAweDg1ODkzZGQ5LCAweDNmOWZjYzlkLCAweDZjOTk3ZGI4LCAweDJkNzUxYWZjLAotCTB4NDcxOTRmZTIsIDB4YzNiZTI0MmMsIDB4OTZlYTNmOTgsIDB4MzdkMjFlNmMsIDB4N2RiNGI4YWUsIDB4OWViYmY2MzMsCi0JMHhmYWZjMjI3ZSwgMHhiMTRkZTIwNywgMHgyNGM5MTc0OCwgMHg5MmIzZDE5OSwgMHg3MGJkOGMxZSwgMHgwNTE5N2I4MCwKLQkweGEzYjNjMDY0LCAweDIwZjQ2NDhhLCAweDFiODUxYmMzLCAweDZmMmVhOWZhLCAweGQxZGU2MTM3LCAweDcwMGJhMzkyLAotCTB4Mzk0NGZhM2QsIDB4ZTU1OTg0M2QsIDB4MjM5MTEwZjQsIDB4NGQ5MzA3YTcsIDB4ZTFhOGZmOGUsIDB4ZTEyYmZjNzIsCi0JMHhlOWNiYjE2ZCwgMHhmZmU5Nzg4MSwgMHhjYzc3ODBkNywgMHhmY2JkMzk3OCwgMHgxZGRjZTBhYiwgMHgxYzgxZTNjZiwKLQkweGQ5MGU0M2JlLCAweDM3MDg4YzViLCAweGVjMjQzZjk2LCAweGEzYjczZDdiLCAweGNmZGNhYzQ5LCAweDdmYTdmNDI1LAotCTB4MTU3OGYzYzYsIDB4ZDVmODQ3MWYsIDB4YjQyZTQ4ZDcsIDB4NjZlMzdiY2IsIDB4OWVlOTNkYzMsIDB4MWJjZmIwNGMsCi0JMHgzOGYzZjMwOSwgMHg0MWM1MDk1NCwgMHg3YmY4ODRmZCwgMHg4MGExM2YyOCwgMHg2N2FlNTRlYiwgMHhmYTNiMTBkNiwKLQkweGZjNDExN2E1LCAweDJiNjc5NjliLCAweDY3N2ZhMjk3LCAweDFkNjlmMTg5LCAweDk5MzhiZmY0LCAweGM0ZDU2M2U5LAotCTB4N2FmZGZjOGQsIDB4ZGMyNTZmZjEsIDB4MDEyNTJmNDAsIDB4MWMyNTU0N2UsIDB4NjNjOTBlYTUsIDB4ZTVjMzNlMDIsCi0JMHgxMGU5MzI0MCwgMHhmMmM5YzA3MiwgMHgxMmZlZTVmOCwgMHgwMGIyZjEwMiwgMHg1ZWY0MjUzZSwgMHg5ZjgwYmUzMSwKLQkweDdjNjI1ZmUwLCAweGUwNTlmODNkLCAweDE5ZjgyODFjLCAweDQ1ZTM5MWM5LCAweDYzODE1ZmU5LCAweDE4MWExODYwLAotCTB4YzA5MmIxMmYsIDB4YWZkMjhhZjgsIDB4NTBhN2Y3ZTIsIDB4YTdjZTkyYmIsIDB4MjE2Y2M4Y2UsIDB4Y2M0MzZmMTQsCi0JMHgxNWQ3ZjQ3NiwgMHhmMDk5Y2U5MywgMHhhMGE3ZjBiYiwgMHhkMjM2ZTE3ZiwgMHgyOTA4NWZlYiwgMHg4ZjEzYWU5ZiwKLQkweGJjOTJlMjlkLCAweDhkZjY2N2NmLCAweDJlYjg4YWMzLCAweGJmZTdjMzA1LCAweDQ5NDc5ZGE3LCAweGU0ZjdjNDU2LAotCTB4MDFjNjA3MzcsIDB4MmZmNWY1MWQsIDB4NDViZTRlZGEsIDB4N2NhYjUxYzcsIDB4M2Y3ZTgxMzEsIDB4NGY3ZjVmZTEsCi0JMHhlZTdlZTJmMiwgMHg0OGM3ZjYyMywgMHg0ZjUxOWU4MCwgMHhjY2NlYzZkYSwgMHg5NTJlZmYwNCwgMHgzMjUwOTE4YiwKLQkweDU3NjkxNDNmLCAweGY0MWFkOWVhLCAweDRlZThhYWZmLCAweDQ4NmJkZTgwLCAweGQzMzI5YzQwLCAweDc1NzU4ZWRmLAotCTB4ZTY4ZGZhZGYsIDB4YzEzYWZjYmIsIDB4MmNiZDlkY2MsIDB4ZmU3MDkzNWYsIDB4ZDBjM2VjMjcsIDB4N2Q3Yzk4ZjYsCi0JMHgzMzBiOGMwYiwgMHg4MmZiZmEyNSwgMHhjMGRjNzVjMCwgMHgwMzdlNDUzYSwgMHg3ODg0ZTNkYywgMHg5ZjJhMjZjNiwKLQkweGIwNGJjZjUxLCAweDE3NTE1ZWEyLCAweDNiMTNlYTdlLCAweDk5ZDQ1NjdjLCAweDM2ZDdhODFlLCAweDAzMDFhOGU4LAotCTB4N2FlYmY4ZjYsIDB4OTM2Yzk3MTYsIDB4NGMzZmNiZWIsIDB4YTEyZWY5NjAsIDB4YThmM2MwZTEsIDB4ZjVjYzc2MTQsCi0JMHg0NzkxMWRmNCwgMHgxNmUwMTEzNSwgMHg5NDRiM2ViMCwgMHg5ZjgwM2ZlMywgMHg5ZWY0OWRhNCwgMHhmZWZlNTQ5MywKLQkweGNjMmVlYTE1LCAweGFlZGNiYzEzLCAweGY1NGVmYmM2LCAweDFmYzg1ZGEzLCAweGYxYWFmN2VhLCAweGU4Nzc3NTA4LAotCTB4NzU2ZjNlZjEsIDB4OTNkNDQxZmIsIDB4MDMyOTlhYmEsIDB4ODVjOTdhYTIsIDB4ZTZiMzNhNjYsIDB4ZWM1N2YwMWEsCi0JMHgyMDdkOTQzNywgMHg0YzVlOGRmMiwgMHg5ZjMzZmNlMCwgMHgyYmU2MDdlNCwgMHg4YWY4M2U1MSwgMHhkYWY2MGY4YywKLQkweDRhNzliZGFkLCAweDkzZTMwNGFmLCAweDI4ZGNlYTE1LCAweDliZGFlN2I4LCAweGE1ZjFhMjg3LCAweDhmYzAwZTRmLAotCTB4NzIwZjFmNzIsIDB4MWEzN2U0M2IsIDB4NWQwMjViNDcsIDB4ZDRjZTk5ZDcsIDB4MGFiYzYwNjcsIDB4NjRlMWM3NzUsCi0JMHhjOTBhY2Y4MCwgMHgxMmI0NzEwNiwgMHhhODdmYmIzZCwgMHgzNWI3MmY1NywgMHgwMzc1ZDgwNiwgMHgyMDNiNTIxZiwKLQkweGM1N2E3OTVlLCAweGJmNzBkMTgzLCAweDUwM2I4YzU5LCAweDM5M2RlMTUyLCAweGY2N2Q3NjQyLCAweDlmODgyMmZkLAotCTB4YTNhZGIyY2QsIDB4NjY3YWQ5YjUsIDB4MmY3ZTY2NTcsIDB4Y2Y0NTkzYzIsIDB4NzYzYTNiZDcsIDB4YWZkYjRiM2YsCi0JMHg3ZGZlZjMxMSwgMHhlM2ZhMzUxNiwgMHgwYzY0ZDU2MiwgMHhhZjU4ODVkMCwgMHg3ZTI4NTdiOCwgMHg3MGNlZmI4NywKLQkweDVlZmM0ZDdmLCAweGYyMWJlMmQyLCAweDA3MWYyZDAwLCAweGFmZjYyY2ZhLCAweDM3ZGNhNGFmLCAweDg3ZThkMWE0LAotCTB4NmU5YzdkN2IsIDB4ZGQ0NWU4MGQsIDB4NDQzZjI2MDYsIDB4NmIzMTE1OWUsIDB4MzBhZDdjZjAsIDB4YWE3NWYzYjAsCi0JMHgzZDliYjBiZiwgMHhlYWJmYjAyNiwgMHg5ODUxZWNjMywgMHg5YTkxZjVlNywgMHgxN2Y5NWQ4MCwgMHg4MmNhM2RiMywKLQkweGRlYTJiM2ZiLCAweGZhY2NjMmI5LCAweGRlN2NmMzc1LCAweGExOTY5ZjE1LCAweDEyZDcxNjVkLCAweDdjZThjZjNjLAotCTB4NmE5ZmIzMDIsIDB4Nzk2NGE4YWYsIDB4MGYxYWI1NDYsIDB4NWVkNTBiZTYsIDB4OTEzZTYxZDEsIDB4MTQ4ZmZkZjgsCi0JMHhmZTAxYWUwZSwgMHhkOWYzZmNmYSwgMHgwYjVkNjE2MywgMHg3YzBkNmQ4OCwgMHgwNDZkNjBiZiwgMHgyMWU4MDU3MSwKLQkweDg5NThhZjIyLCAweDdjNzFlZmZmLCAweDQ0MzQ1YmQ3LCAweGU3ZWYxODMzLCAweGRkZjVhZTNhLCAweDA3NTRmZjViLAotCTB4OWQxMmVmYmQsIDB4NWM3MWNlYzgsIDB4YTVlYmNiMzksIDB4ZTFjNjA1NzYsIDB4MjU4NWRmOTQsIDB4NmNmYzhhNGEsCi0JMHhlY2FmZGUyZiwgMHg1YmRiMDdjZCwgMHg2MWFlNDA5YSwgMHhiMTVmZDdlNywgMHhlYmIzZjJjYiwgMHg1N2U4N2Y2OSwKLQkweDIyOGM2NTdmLCAweDRiOGY5YjNmLCAweGZkMWFiM2M3LCAweGUwYTE2MDc5LCAweDY2MDRiZGZmLCAweDllNDNkNGRmLAotCTB4ZGZjMDkwZDcsIDB4ZTdmOGZkMTksIDB4NWI3OWU1ODksIDB4N2YzODQ4ZGUsIDB4ZTM1NzZmM2YsIDB4MWY5ZmUzZmQsCi0JMHgxMmRmOGQ1MSwgMHgxMmMzZGQ2NCwgMHhjNTA2ZGMxOSwgMHhkYzVjZjA2OSwgMHhjZGY2MjFlZSwgMHhkZjE3ZTY0MSwKLQkweGUyMDVmYjg5LCAweDdkNzI5YzdlLCAweDczYmNjYmJiLCAweGM2YzNmZDYwLCAweDcyYWVmZjMwLCAweGVjODk0MTljLAotCTB4ZGRlZWIxM2IsIDB4ZjUxZjBjZDEsIDB4NjA3YzUzNmYsIDB4OWZjYjA4ZmUsIDB4NWRlZDFkZGQsIDB4MmNjMGZjOGMsCi0JMHg4ZTdjZjNjNywgMHg3Yjc3ZGRlNywgMHhjYmJlZjFkMywgMHgwZTdlY2M1ZCwgMHhjZDU3MGY0NSwgMHg0ZjgwMDdjZSwKLQkweDQyMzc0ZWQ0LCAweGFhMTkxOTJlLCAweDAxY2M5NDY5LCAweGY0N2FlYmU3LCAweDRhYmI4N2UwLCAweDcwYmVkNzg2LAotCTB4YzU3ZTIxZDcsIDB4ZmZkZjQyYjgsIDB4YzYzNTM5ZjIsIDB4YzYzY2JmZjEsIDB4MWJiMTJkY2YsIDB4Zjc3YzgwYTUsCi0JMHhlYmYzMDkyZiwgMHhhMTJhZDk3ZiwgMHg0OWRmM2Y5ZSwgMHgyZmU1MTM0OCwgMHhhMGQ2YjZmMywgMHhhNWY4Yjg1ZSwKLQkweDAzNjI5ODIxLCAweDdjYTRhZmJmLCAweDIxMjI1ZTY0LCAweGZlNzJkMjc3LCAweDc3NWM3OTZhLCAweDdlM2VmYWUxLAotCTB4N2YyODEyMzksIDB4OTQ0NjkxMTcsIDB4OTY5ZjhiMTcsIDB4ZWIyNmFiZjcsIDB4ODM3YTBjZmYsIDB4M2U4Y2RlMzIsCi0JMHhjZjE3NmE0ZiwgMHhmNzdhZTQ0ZSwgMHhmODE0MzI1MCwgMHg3ZDJmMDNmZCwgMHg4NmI0OGJhNSwgMHg5NGYzZmZhNiwKLQkweDgwNmI2NjlmLCAweGVjYjAxYWFmLCAweGI5NjMzNjZhLCAweDI4YmVkMTNjLCAweDM5YTVjMjkxLCAweDA4OWQ1OWQxLAotCTB4MTg4ZjhjZmUsIDB4NWVkNzJlM2MsIDB4MmUwMGYyNjYsIDB4N2UwMDhlNGYsIDB4ZDMzY2ExMmQsIDB4ZDhmMTY0Y2YsCi0JMHg3MjNkYzIxZiwgMHg5ZWJkMGYwYSwgMHhkNDc1NzVjOSwgMHg3MDkzYzljYSwgMHhmZjg0NmU5NSwgMHg4ZTc5YWYzMCwKLQkweDJkOGRlNTA1LCAweGY2M2RlODExLCAweDYzYzZlMzE3LCAweDIyMmZkNzVlLCAweDc1YmYwMGVjLCAweGMxOTdlZWE1LAotCTB4NTU2ZWIwOGYsIDB4MGQ3MWZhMzgsIDB4Y2UwZjE2N2EsIDB4ODJhYTVlZGEsIDB4ZWRiNzAzZmIsIDB4MWY4M2Y2OTYsCi0JMHg1NTYzYTFhMywgMHgzN2VmZGMwZSwgMHg4ZjMxYzM1YSwgMHg1ZTYzYWEyMCwgMHg2YzYzOTMyNiwgMHhjNzE2ZDg5ZSwKLQkweDJjNjdjMDRlLCAweGViYTM2YmRjLCAweDRlZTk5NzVhLCAweGU5OWE3YzY0LCAweGY2MWNmNTM5LCAweDNmZjU5MjNkLAotCTB4ZWJiMzllZTEsIDB4MjFlZjFhYTgsIDB4YmNiMGQ2NWUsIDB4ZTE4NDQxZmEsIDB4YzEyYmU0NTUsIDB4NWNmYTgxZGMsCi0JMHgyNDFiODUxNywgMHg5MzllZjVkNSwgMHg4ZGEzYzkzNiwgMHgzMDFjNzdjNCwgMHhhOGZiNTBjZSwgMHhjODI2N2UyNywKLQkweDMwNjk5ZjliLCAweGFlYmJkMzRlLCAweDIwY2E5Mjc3LCAweGNjZTQyMzFlLCAweGZjY2NjOTRjLCAweDlkNWY1YzQyLAotCTB4MmM3ZmM0NDEsIDB4ZTljNTUzOWUsIDB4NTNkNzA2NjEsIDB4ZjgzMDQ2NjcsIDB4NzRiNjI3Y2UsIDB4ODFiZjc3ZTgsCi0JMHhkMWU4YWE0NCwgMHg1NmRlNTk5OSwgMHhkMWFiZmI4YywgMHgxMTZmNDA1YSwgMHg3YWQwODk3MSwgMHg0ZTdmNzA0MiwKLQkweDc2MjZjYmZkLCAweDBkZjI1MjFmLCAweDY4MmU0MTgwLCAweDc5ZDZiOTA5LCAweDQzZjljM2RiLCAweDk3ZTYwMGZkLAotCTB4MGVjNGQ5MjUsIDB4YjdmYWIwNzEsIDB4Zjg4NjZlMDcsIDB4YzU5YzNlODcsIDB4MzIxZjI5NTksIDB4ZWYyNzdiYzAsCi0JMHhmYmE2M2M4MiwgMHgxODU2ZmE1ZSwgMHhkYzQyYmY3YiwgMHgwYmRiMzY4NywgMHhjMzYxN2VlMCwgMHhjYzQyZDRlNCwKLQkweGMzZTkzODVmLCAweGI1YmEwODc3LCAweGFmM2M3NGRlLCAweDU0NDhiZjk0LCAweDM4OTg3ZTA2LCAweGE1MGQxZWVmLAotCTB4YWE2NGZhZjMsIDB4M2ZmYWQxNmYsIDB4YmQ1ODFiMTIsIDB4OGFiMTc3OWYsIDB4M2QyNDA3ZDYsIDB4YmM4M2VhY2UsCi0JMHg0YjZlYTBlNywgMHgwZDFlZmE3YSwgMHhmNDJiNjNkYywgMHhmYWQzNTYyZSwgMHhhYzJkYTQ4NCwgMHgzMjRiMDYwZSwKLQkweGNmZDI2Zjg1LCAweGYxZDE3MWVlLCAweDNlYjg1ODJmLCAweDNkZTJmMzYzLCAweDA3MzdmYWQwLCAweDg0ZmQwMmFhLAotCTB4N2YxODkyNjMsIDB4YmVjNjEwYmEsIDB4ZTY0OTkwYmIsIDB4ZTc3ODA2NGUsIDB4ODczZWZmMDQsIDB4NWNmNDJmN2YsCi0JMHg5ZmQxNWZiMSwgMHhmN2VmMDYyNCwgMHg0YjdiOTcxOSwgMHg5MmQwM2RmOSwgMHg4YzM2YjIwOCwgMHg5MTVjOTVjNSwKLQkweDNhODcwZjE0LCAweGVjNWM2MjA2LCAweGNiMzQ2MjQwLCAweGYxN2IzNWRmLCAweDhlMzExMDlkLCAweDRmMThhNzgwLAotCTB4ZTQwY2JiY2MsIDB4YzlmMzExYjAsIDB4ZTJmOTY0YWEsIDB4NzlkMjdlNWMsIDB4ZDkzY2UzNTYsIDB4NzI3Zjc2NzYsCi0JMHhlMDAxNmE3MiwgMHhjMzRkZTI4ZiwgMHhiYzAxYTZmMSwgMHgzMGQ3N2I4OSwgMHhmOTFmMjVhZSwgMHg0M2YwMTBmZCwKLQkweGJmNGFiYTFmLCAweDViYWZmNGNmLCAweDM4NTcyNzQ5LCAweDYxNmQyYzlkLCAweDI1OWY0MGYxLCAweDI0YTllOTBiLAotCTB4NTEzYmJmODIsIDB4MDRjN2RmMjQsIDB4NDkzMWJmMGUsIDB4NWVjZmI2MTYsIDB4Mzg0ODI0YmMsIDB4NjM4NzBiNGYsCi0JMHhlNGMwNzdhYSwgMHg3N2RmOWJiYywgMHhjZjViMTI3OCwgMHgwMDc3ZGVhZCwgMHg3ZWYwZWNiZSwgMHhkYmY2YTFjNCwKLQkweDMwZmRiMGI2LCAweDQ3M2QwMTdjLCAweGE0Zjc1ZWEzLCAweGFiMGJiYzZjLCAweGQzODdmZDE0LCAweDhkZmIwOTAzLAotCTB4M2ZmZWMyY2UsIDB4MTAwZGVmZTQsIDB4NWZiN2E1YjIsIDB4M2ZkMzNlNjYsIDB4ZjcxNTJmNDEsIDB4NGVlYjg5ZTQsCi0JMHhlZDE3ZTgxMiwgMHhjNmRmMGZiZCwgMHhmN2ZhYWRlZSwgMHhkZjExNGY3OSwgMHhkM2VmOTlhNywgMHg5NmU5ZjZjYywKLQkweGVlMzkyYmQxLCAweGVhNmE5ZjRiLCAweGYwYmRjNzRiLCAweGI3MmYxZGVmLCAweDNiMjc4ZjkwLCAweDgzYzZjMWU3LAotCTB4MmYwYTFkNzMsIDB4MzE2ZTkzYTMsIDB4MmE3NThhM2QsIDB4NjcwYmQ5ZTAsIDB4M2MwNGZhYzUsIDB4YmY2MzdjZTEsCi0JMHg4YTVkMzk1YywgMHg5ZDQyZGE3NSwgMHgzOGVmY2NlZiwgMHg1N2ViMjk1ZiwgMHhiZmNiMzBmNywgMHg1ZDM5NTYyNSwKLQkweDU0Y2VlZGQ3LCAweGY0NWJkYzQxLCAweGVlM2UwYTNiLCAweGNiNWZiZjM4LCAweDk4ZTNjNDk5LCAweDQ0MzUyNGE5LAotCTB4YTRjMmRjZGUsIDB4MzBmZWEwYjgsIDB4ZTc2OTVkZmMsIDB4M2U1ODU4ZjUsIDB4ZWZkZWQyYjIsIDB4YzI3NWIzODksCi0JMHgyNWQ3MzQzZCwgMHhhNDdhN2Y3NiwgMHg3MTAxM2ZjMiwgMHg3ZjQ2NWQ5MiwgMHg5MTdjYmYzZiwgMHhmODcxNzdkNywKLQkweGY4YWZmNWY1LCAweDkxNjc3ZWYwLCAweGFiMzVlY2JlLCAweDliZmY5MDhkLCAweGViZjIwZWY0LCAweDA3YjJhOGEyLAotCTB4ZjU3ZDY5MzMsIDB4ZGZjOGZkODYsIDB4YmVjYTUyOGIsIDB4N2NmY2E0Y2EsIDB4YWMwMzg2Y2QsIDB4YWZiMmY2ZmQsCi0JMHhlOTNkNDFmYSwgMHhkODk3YWIyMCwgMHg0ZjdlMDM1ZiwgMHhjNjdiYzFjOCwgMHg4OGY1ZjkyNCwgMHg3MTU5MjYxZiwKLQkweDBhYjk3NTVlLCAweGQ1ZWFkZmRmLCAweGEzZDFkZTVmLCAweDFhZTAyMmZlLCAweGFiZDIyY2FhLCAweDlmYzU4MzFhLAotCTB4ODFlOTdiNWEsIDB4YzM4NjA5YzUsIDB4YTc5MGFkM2YsIDB4YWY3OGVkYzQsIDB4ZjdjNzY2NDYsIDB4YWZmYmIyNDQsCi0JMHg4NmZlZmIzZCwgMHg0ZjllMTlmNywgMHhmMDA0ZmU3MiwgMHgzNWQxMTBkMCwgMHgxZmQ2OTMyNywgMHhlMzBjZjg4ZCwKLQkweGVhOWQ5MjUwLCAweGIwYzdlMDIxLCAweGJhMmNjOTlhLCAweDlkNmJhOTVlLCAweGIyMjVmNDAzLCAweDIwZDA2NmNjLAotCTB4MDc1ZmI5NWMsIDB4ZjBhMmY0ZGUsIDB4OWZlZGViN2IsIDB4YTZjMjkyM2QsIDB4NDYzYWMwNzEsIDB4ZjBkMDNlNzAsCi0JMHg0MzVmMzdmNiwgMHg4MmUxYjJkYywgMHhlMWVhMDZkMSwgMHgwZjBkOGU4OCwgMHhhMjM1YmU4MiwgMHgzMGRmZDdlMywKLQkweDVmZWVjYzM5LCAweDAwOGY3NTg4LCAweDdkZmQxZGJmLCAweGQ3MWViYjc4LCAweGI2ZTNhMjNmLCAweGM4ZmRmMDQ1LAotCTB4MDE2NDc2ZGYsIDB4ZTUzZThjOWQsIDB4ZDBiNjAxNjksIDB4MTQ4ZGVmYjMsIDB4MmZjZGZkZjksIDB4MTg2Zjk5YWUsCi0JMHhlMDI0OGUzMiwgMHg1NGFhMjdmMSwgMHhkZTNjMjE0NSwgMHg4YWI4ZjA2MCwgMHg3MWRkNTFmOSwgMHhkMTc4ZDZjNywKLQkweGRmYmYyN2I5LCAweDhjNzZmNTQyLCAweGUxMjY1ZTgzLCAweDhiZDNmMDM2LCAweDdmNGFjNTdiLCAweGJhNGFjOWUwLAotCTB4NjhmYmZhM2YsIDB4ODA0MTVkMWYsIDB4ODU3MjVjZGUsIDB4N2EwMWZmZGEsIDB4YzhiMTI5NzgsIDB4MjQ4NmU1ZWEsCi0JMHhlNjE1ZjdkOSwgMHhiOGZiNTk0YywgMHhlZDY0ZGJjNCwgMHg2NDBiNTk3NywgMHgyMzM5MDlmNSwgMHhiNDRmZGY2NCwKLQkweGY3ZWFjYTk1LCAweGY2NGJiZjBlLCAweDUyYmRhNTdkLCAweGI0ZjAyZjU2LCAweDcyMWZiZWM5LCAweDdlZGU1ZGE0LAotCTB4MGYwMWE4OWMsIDB4MDc2ZDI3ODUsIDB4NmIzZTJjYTEsIDB4ZDBlMmI3NDcsIDB4YTEwNzhkZjMsIDB4MDYxN2YxMWMsCi0JMHhmNDNmYTUwZSwgMHgwNzZkMmI4ZSwgMHgwZmUxNzdlMSwgMHgxMTU3ZGU1NSwgMHg2YWU5ZDFmZSwgMHhkYzE3NWJhMywKLQkweGExYTg5YTBmLCAweDhiYzkyNWU1LCAweDYyYWQ0NGZjLCAweDMwNWU1NWY3LCAweDZmMDFiYjM5LCAweDA5NGFiZWUyLAotCTB4MTIyOTQzZjgsIDB4NjI1ZWU2MmEsIDB4MzE2N2IyZjcsIDB4NDA0OWQ4N2YsIDB4MTlhN2YwMGMsIDB4OWRlM2Y0MjYsCi0JMHhmYWJlMzZkNCwgMHg0ZWM3MTY3YiwgMHhkYTM3YmUwMywgMHg3N2RiMjU1NywgMHg2Y2E3MTVjOSwgMHhhOTY0YTVkZiwKLQkweDY1Y2I0ZjAyLCAweGMzZjMwYWY1LCAweDI1YzdlZmIyLCAweGRmYjU5MmFlLCAweDgxNWM3ZDY1LCAweGY1NjUyN2E3LAotCTB4MGEwZGI2ODksIDB4ZTA1NjZkM2MsIDB4NzZiMjY3ZTksIDB4ZGMxZGRmNDEsIDB4ZjgzNmY1M2YsIDB4Y2EzOTY4OTUsCi0JMHg3ODBlNTlkYiwgMHgwZmJjZjNiOCwgMHhiM2JjMzFmMSwgMHg3NGYwMWNiNSwgMHhjNDM2YzljNywgMHg1MWM3OTE1NywKLQkweGU4NzJlYzBlLCAweDUwODNjNjkxLCAweDA1ZmRhODdhLCAweDI3MzQwZWZkLCAweGQ5YTg3OTYyLCAweGMzYTlmZThhLAotCTB4MWU1ODM5Y2QsIDB4ZWZlMWI2NjksIDB4OGUxZTZhYmYsIDB4NzZjZGZiZTUsIDB4M2NkMzdmMmMsIDB4NjZjZWNiMWUsCi0JMHhjZDZkOTYwNywgMHhhZWZkZjg2ZCwgMHhkZmU2NzZlNiwgMHhkN2JkZTk4YSwgMHg4MDdlMDY5ZiwgMHgxZWI3OTU2ZSwKLQkweDI3NjQzZWVlLCAweDdlMDQ0ZWM3LCAweGVkZWUxZGQ5LCAweGFlYTNmYTg2LCAweDJmYzA4OWU4LCAweGExMTMwMDA3LAotCTB4Y2JjZjljNzgsIDB4M2RmNjI5YjEsIDB4MGRiZjk0YzksIDB4OTE3NTY2NDksIDB4YjJhNmQwNTcsIDB4NWUxZTgwMTcsCi0JMHgwOWUzMzFiMiwgMHg4ZjIxMWE0ZCwgMHg5YTI0NzJhZCwgMHhhMDZlYWMyZCwgMHhlNjM2NDQ3NSwgMHg2MTNjNjU1YiwKLQkweDU1ZTQyNTRmLCAweDYwNzcyNTEwLCAweDdiZDQyMjdkLCAweDkwZmI1OGMyLCAweDQxMTMxOThkLCAweGYxY2VmZjBmLAotCTB4YmM5ZjdiNjAsIDB4MjBlNDkyYzAsIDB4Y2Y1N2UwZjEsIDB4YmZlMDRkNWIsIDB4YTA3NTc2MzksIDB4OGM3MWUwMDksCi0JMHhhNGVjYjFmYiwgMHg5NjhmM2I0MCwgMHgyZDAyOWFhNSwgMHgwYTkzZDljOCwgMHgzZDk0NDRiZCwgMHhjOWYxZDJhYSwKLQkweGRiNmZiMDcxLCAweGJlNDNjYzM0LCAweDdlODA0YjViLCAweGRlY2M0YjI3LCAweDRmZjVkZjE1LCAweDEzMTdmOWUxLAotCTB4MWQ0ZjY4ZjUsIDB4NjExN2Q5NTcsIDB4N2JlNDkzZGUsIDB4NjRiY2UwMDEsIDB4N2I4NDEwZTMsIDB4MGU5N2M5OGYsCi0JMHhiMWI0NWJmMCwgMHg3Y2UzZDU5MCwgMHg4MGI2NDgyZiwgMHg2N2MxOTZiYSwgMHg4OTgyYzZmYSwgMHgwYTViZGNhZSwKLQkweGUwYzEwNTlmLCAweDY2NmM5ZDUzLCAweDllYzdiNmZhLCAweGE4ODA3YTA2LCAweGQ3YjRhZjFmLCAweDVlM2U3OWMxLAotCTB4YTJmYmM3NmEsIDB4NzY3YTFjYzcsIDB4YmMyNjFkN2UsIDB4ZjYzNDQwZTcsIDB4ZmUwMTY5ZTIsIDB4NWFjOWIzOWMsCi0JMHgyZTE1MzdlYywgMHhmMzVmODE5ZSwgMHg3MzllMzU3ZSwgMHgyOTU1M2MyNSwgMHgzYTQ3MGY0YywgMHg0NjczM2IwMSwKLQkweGM3MDVkYTA0LCAweGI3ZGVlYzU1LCAweDE0Y2NmYmYyLCAweDBjNWQxZjY2LCAweGViNzdlZTBmLCAweGE2Y2JkYmM3LAotCTB4ODdiYWJkZDQsIDB4MjJiM2Q3OGUsIDB4NzFlZTg3MGMsIDB4YWM3ZDQ0MGMsIDB4N2JjMjUxYTcsIDB4MWJlNzNkYjUsCi0JMHhiZDc2YjEyZiwgMHhlMzA0ODM4ZCwgMHg1ZmUxMzM5MiwgMHg4ZWQ1ZmRiNCwgMHgzMWZhZmYwNywgMHgxNWIzZmVmZCwKLQkweDIxOTQzNjExLCAweGJmMDg0MWU2LCAweGIzYzdmOWZiLCAweDNmYTgwYzYzLCAweDU2OWM5ZWNkLCAweDI2NzE3MjA2LAotCTB4MzFjZDczOGYsIDB4ZGMzMWUyNjksIDB4ZTBlOGIxYTUsIDB4YzY4NWJhMDksIDB4ODIxNDM1ODIsIDB4YTU2YzcxNjQsCi0JMHhhOWNjOWUwZSwgMHgwNmJlNWQ0ZSwgMHg0ZmQ5NjVjYSwgMHhmMGFkYTJlYSwgMHgzNWNlZDc3ZSwgMHhkMWQ2YzZhMCwKLQkweGZjOGM1YzIzLCAweDMzNDFmYmNmLCAweDI2ZGNkNzVkLCAweDczZDk5NWI1LCAweDZiZGFhZTVjLCAweDQzM2YyYTZlLAotCTB4OWU3MWVmZDAsIDB4ODA4MTQzMmYsIDB4ODcxNjZhZjYsIDB4YzU5N2U4YjcsIDB4MzI1Yjc0ZTksIDB4OTFlNDEzOGYsCi0JMHhhN2RmNzYzYywgMHgxZGIwMGUzNywgMHhmNjZiYTRlOCwgMHhjNDQyMDMwNywgMHg1Y2VkZTQwOSwgMHhjNzQ0ZmM3ZiwKLQkweGJiYmU1NWU2LCAweDRlY2RlNjIwLCAweDcxZmU3YTYxLCAweGQwNGNhNTFkLCAweDcyNjdlZjI3LCAweGFiZWFiZjIwLAotCTB4ZmVlOThiNDcsIDB4MmFjYzNiZjMsIDB4YWRjZmMzOGMsIDB4Yjg3ODAzZGIsIDB4YThmMWNlZGMsIDB4OWU3MGVkMjUsCi0JMHg3ZGU2YjhhNiwgMHg4YTRhYjk4NiwgMHg5M2Q3OWE3YiwgMHg3MzRlYjY5NywgMHgyY2JjYTA3OSwgMHgwM2NhM2FmMiwKLQkweDVmNzBlNWU1LCAweDQ1YzgzOTZiLCAweDdjNDUxZjIxLCAweGNkNWNkM2QwLCAweGYyMjM3MmY5LCAweDRkY2Q0M2QzLAotCTB4ZWNkYzNmNTgsIDB4ZjM0OGYyYzIsIDB4NWI5N2NlNWEsIDB4ZTZmZGZkYjEsIDB4NzY1ZjM4ZTcsIDB4MGRiY2JlNzMsCi0JMHhhZTY4ZWY3ZiwgMHg2NmVkZjJjMiwgMHgyODk2OTYyNywgMHg3ZTAxNmZjNywgMHhjYzRlMGQ1MywgMHg4Mzc3N2JlZiwKLQkweGViN2M0MDllLCAweGYzMWU4NzcyLCAweDc4ODllODBlLCAweGM4NThmOWUxLCAweGJkZTNkMWE3LCAweDhkNWU2NTNiLAotCTB4ZDJmN2NmOTIsIDB4MjVmN2RmNDMsIDB4ZjRmMzAwZmUsIDB4YmU4MGMzZTYsIDB4OWU5YTExOTgsIDB4MDlhYjExOGUsCi0JMHg5MmRmZDJmOCwgMHhiZTgyMjY5YiwgMHgzNTZhY2M3ZCwgMHg2NTdkM2U4MSwgMHhhNWYyMTM2MywgMHg0OWFiNzY2MywKLQkweDI0ZGZlYjRiLCAweDlkZGFjYzNmLCAweGQ2OWU5MzU2LCAweGMzZTM3YmZmLCAweDM1NjVkZGFjLCAweGRmZmFkMTg1LAotCTB4ZWFjZmJmOTMsIDB4YzQ4MmMyNmUsIDB4ZTdjOGNkMjksIDB4MDg3NDg5NGIsIDB4MjFiOTQ3Y2UsIDB4MTcxNTBjNzMsCi0JMHgxZTk3NWU1NCwgMHgyZTMxNzM4MiwgMHgzODE4ZGU3MSwgMHg1NmM5NzUxNywgMHhhY2JiOGZhNCwgMHg3ZDQxMGVhYiwKLQkweDBkNjZjZTQyLCAweDFiYjZjNTVjLCAweGJmNDM1NjBiLCAweDBkNGFkOGIyLCAweGJhOTMxYmY0LCAweDFiZjQzNTdjLAotCTB4MjZhNGZkOWIsIDB4ZGNmOGRmYjAsIDB4N2VhMWFiOWQsIDB4MDZiMzZkOGYsIDB4Y2UzYWQzZjQsIDB4YTIzOGM0YzcsCi0JMHg5ZjA1ZGEyZSwgMHg4MzVlNzkxNiwgMHgwZjI4MWMzYiwgMHgyODFkZGJmMiwgMHhjYTVjMDQwZiwgMHgwNjNlNTZhNiwKLQkweDc2ODZjNzdlLCAweDNhYzEyY2M5LCAweGMxYmQ0YWE2LCAweGFiOTFjODZmLCAweDI5MWFmNzg3LCAweGZlN2E4ZWJmLAotCTB4YmEyYWQzMDksIDB4ZGZhODA2Y2YsIDB4NTYyN2Y1ODEsIDB4OWRmZTVhZGQsIDB4OTdkNzEyOTIsIDB4ZTdlMDlmN2YsCi0JMHhlNDNkZTQxZCwgMHhiMWQwOWY2NSwgMHgwMDFlMzJmNywgMHg3ZGUzMTRiOCwgMHgyYmJlMTMzNCwgMHhkMDI2OWM0OSwKLQkweDNjYjg5YWIzLCAweDZkMjUwOTVmLCAweDNiZWJjZWRmLCAweGQ5NTc5Yzg1LCAweGRmZDBhN2ZiLCAweDdkYjg1MzczLAotCTB4ZDgzZjk3ZDksIDB4ZmNmNDFkNjAsIDB4ODQzOWVlMmIsIDB4YTFmY2U3NjgsIDB4N2IyY2M1MzAsIDB4YjA4ZWExNWYsCi0JMHhjYmQ3NTU3YiwgMHgzMWU2NTMxYiwgMHg5NjI5ZjMyYiwgMHhmNmMzYjY5MSwgMHgxNDc5YmVjYywgMHhjN2JkODRiNSwKLQkweGFlNGZjY2EyLCAweGFkNWVlYzI3LCAweGQ3Yjk0ZjMyLCAweGZjNjcwYWFlLCAweDBkNzgwYWI0LCAweDI5ODllM2E1LAotCTB4NjU2NGY5MjEsIDB4ZTEzNWYxNGEsIDB4OTEwZjZmMjAsIDB4YjA5NGJkOTcsIDB4ZjkzZWVjM2MsIDB4NWIxZjNjMzUsCi0JMHg4Y2UyMmZiOSwgMHhmMjVkZWY2MywgMHhmZWU1NmNmYywgMHhkZGY0NWQwNCwgMHhiZjgzMmI1ZiwgMHhlYTlmYzE4NiwKLQkweDdkNjAwYjc3LCAweDA0NGQ3MzE1LCAweGZjODE1NmZjLCAweGYwNmJlM2U3LCAweGJiM2YyNTFmLCAweGZhNzI3YzU1LAotCTB4OWY3NjNhZGMsIDB4NmIxZjJmYmYsIDB4YzdjMjA5NGEsIDB4YjI5NzVlNDQsIDB4ZGMyYTdhMTQsIDB4M2VmYzgzMWIsCi0JMHhlYzA2MGY3OCwgMHg5YzEyM2JmYywgMHgzZDk3NDAyZCwgMHg1NWFmYmU2NSwgMHhiMmM2ODc2MCwgMHgyZGJiOTNmNywKLQkweGJiZjAzNWNlLCAweDAzZjk2M2E0LCAweGJjZjZhZjIyLCAweGQwNGJmNWNhLCAweGY5NGE5ZWRiLCAweDZlYmJmMjE1LAotCTB4OGNmNDE2MTAsIDB4ZTA3NWEzYWMsIDB4OGUyYzQzNjcsIDB4ZTQ4ZmQwZjUsIDB4ZWY4MTc1NzgsIDB4MWZjYTg3MzAsCi0JMHhlMWNiOWE3ZCwgMHhlNTkxMjViZSwgMHhmZTZjZjY1NSwgMHgwZmRlODZlNiwgMHgwYThmMDUwYSwgMHhkYzJmMjhmNSwKLQkweDNjM2NiODVmLCAweDk3NjdlNTAyLCAweGZlZjAzYzQ0LCAweDNjNjk1NzZiLCAweDY5NWQyZGVhLCAweGI3OTQwZDNhLAotCTB4NGFlZTJlZGEsIDB4MmJlMzgwMWIsIDB4YTRhZWUzZWQsIDB4ZWYzNjA2ZTEsIDB4ZmU1MGYxZDgsIDB4MTE1Y2U5MjYsCi0JMHg3OTBmYmRjOCwgMHhjZWJiNjEzZSwgMHhlMDM3ZTQzNSwgMHg4NjExMWUxZiwgMHgyNTdiZmE3MSwgMHg0MWMwMTE2ZiwKLQkweDFkNzc1NzY5LCAweGNkNjY1NTlkLCAweGQzNWY2YmVmLCAweGZkODE4ZGZkLCAweDNkNTE5ZWQ1LCAweGFjZGRiZjA2LAotCTB4ZjRkYjVkYmQsIDB4ZWQzYzgxMzUsIDB4MDk1NzRkOTEsIDB4YmNkZjhmZTQsIDB4OWQxOWRkZmQsIDB4YzJiZDA1NmYsCi0JMHgzMjI0MDJkOSwgMHgxM2VhOGJhYywgMHhmY2JkN2ViNCwgMHhiNTEyNGJhNCwgMHhlYzAzMzNkMywgMHg2NmJmZTFmMiwKLQkweDU0YmM0YTc5LCAweGRlN2RlN2RhLCAweDkyZTY1YjRiLCAweDdhOTVjM2U3LCAweDQ0ZGYzMThhLCAweGZiYzQ4ZGVkLAotCTB4OWVmNjJhYWEsIDB4N2E1N2M4ODIsIDB4ZDRmM2RiOGYsIDB4ODI5YjNmNWUsIDB4NzRjZWI4N2UsIDB4ZmRmZWJkOTksCi0JMHg4MjNjZTc0ZiwgMHhmMzBjMjA3YywgMHhmZjZkNWUzMywgMHhmYWQ2MGUzYywgMHg5ZmI4Y2U4NywgMHhkM2Y1NjViYywKLQkweDZiZjk4Mzc3LCAweDVmNjc5ODEyLCAweDU2NTk3NGRiLCAweGVkN2VlMmVmLCAweDJmYmIyZDU2LCAweDM1NGZmYjU0LAotCTB4YzcyYTI1Y2EsIDB4Yzg5ZTIyZDYsIDB4MDEwM2RkMDEsIDB4ZmRiNDk1ZjIsIDB4ODNkZTE3YjksIDB4MDRhYmJmMjksCi0JMHgxZDdjYTE4MCwgMHhmYjRlYzkzOSwgMHg4ODdiNzI1NSwgMHg5ZDU4Nzc5MCwgMHg5NWM0OGZkYiwgMHhlMjcxZWFjMiwKLQkweDdhYjMxZmZiLCAweGE5ZmVmODlhLCAweDRmM2E3NjQ5LCAweGU3Njg5MjY1LCAweDc1ZTM2ZmZkLCAweDMzZDU4Nzk3LAotCTB4NjQ3ZmY3YzUsIDB4YmI1ODliZGYsIDB4NDk4ZWQzN2UsIDB4M2YwNWNlNzAsIDB4ZGZjYWE1MzcsIDB4ZGRmY2EyMDEsCi0JMHhjZDdjNWE5MiwgMHgzYjc5MWE3YywgMHhkZGUyZmZlNywgMHhkZmVmOGE5ZiwgMHg5YzAxZjExNSwgMHg3MzA5MzZkMywKLQkweDZhNTc2YWU3LCAweDMxN2Y1ZmQxLCAweGYwM2YyZGJhLCAweDc3OTE1MDdkLCAweDYxMzcyOGUzLCAweGViZGQ1NDFlLAotCTB4MGI4MGI3MDMsIDB4MWUzYTZkNTMsIDB4NDRjYTdhMGYsIDB4YTE1NGZmOWUsIDB4ZTU5YzYyMzYsIDB4YzdjNjdhZjIsCi0JMHg4Yjc5ZTk0MywgMHhlMTk0ZGU5YiwgMHg3ZjNiNGZhYiwgMHg5MTAzMTc4ZiwgMHg0ZjRiYmU3NCwgMHg5MGY3YjAyNCwKLQkweGVlMzEzYmIzLCAweGU5OTUzODNmLCAweDIyYmVmMGYxLCAweGY5MTVlN2RjLCAweGM0NTliMTVjLCAweGVjNzFmNjBlLAotCTB4NWRlYzYxMWIsIDB4Yzg5ZGIzYzgsIDB4YzFiZjE3NWYsIDB4MWI3NWQ3ZmMsIDB4OWIzY2EyMGUsIDB4ZmZhMmI2YWYsCi0JMHg2NzNmNWM2OCwgMHg0N2M0MmE3MSwgMHgzMDAzOWQ0YywgMHgzNmY0ZGRlZSwgMHg2NzNmYzM5ZSwgMHhjYjljNzk5OCwKLQkweGNmMDgxYjk3LCAweDVmZTE3ZGQxLCAweDk3ZjgxZDdhLCAweGJmZTEzYmZlLCAweDE4MGRlYTliLCAweDg2MTNkYWU3LAotCTB4YzY4MjZjZjYsIDB4MWM0MWIzYWIsIDB4NTc3YjI0ZjMsIDB4ZGI4NzIxNzIsIDB4ZTIzZmNlZDAsIDB4Nzg4N2ZmN2QsCi0JMHhjNTlkYWEzZCwgMHg5NTllNDQ2OSwgMHg1NGExZjc5OCwgMHg4ZjAzODMxMywgMHg3ZTRkZDQ4NywgMHg0M2M0MTQ3ZiwKLQkweDIyNGFmZTA0LCAweGI3ZjgxYjQ4LCAweDFjNmMxZTI5LCAweDgzYzAzNjBmLCAweDJlM2ZiNzgwLCAweDA2NjVmYjQyLAotCTB4YmQ5NTZiOGUsIDB4MWVlMDJiNWYsIDB4ZTkyYjFjZWEsIDB4MTk1YmFjNDMsIDB4M2M2NjU4MjcsIDB4NWRmODBjNTQsCi0JMHg4MTc5OTM3NiwgMHhiZTM4ZDI5NywgMHhmYmNjNWUzNSwgMHg0MTA2NzNmYiwgMHhiOGYwMjhiOSwgMHg1ZGRlMmZiMiwKLQkweGM0ZDc3MWE5LCAweDVmZmRiY2JiLCAweGRjMjU3NzhjLCAweDhmMmQ2NTk0LCAweDdmN2YyOTdiLCAweDJmZjU1NTIxLAotCTB4MzZmZmUzODUsIDB4YzZlY2VhN2YsIDB4YjlmNmIyZmQsIDB4Yzg2ZjQ3NGQsIDB4YTBmYzJhZGYsIDB4YWJiZjJlZmYsCi0JMHg3YTRlYjdmMCwgMHhlMjBhODk2ZCwgMHg3YzdiNGEzMiwgMHg2YmUzYmE1YSwgMHhkZjdiYmZhMCwgMHgwOWVlNDdmYywKLQkweDAwZjU3YzU4LCAweDkwNzkzZmNjLCAweDUxYWJlNWVmLCAweDExZWNmYjdmLCAweDM1NWY0ZjRhLCAweGE5ZDQzZjMyLAotCTB4YWQ2YTVmZmQsIDB4NjNlOTdkNzksIDB4YjExNTE1ZjYsIDB4ZWNkNWQwMDcsIDB4MjBiNDhmYTYsIDB4Y2Q1MzY2YWYsCi0JMHhlYTNjNTgyMiwgMHgzMDllOWNlZiwgMHg4MWYyODQ3ZiwgMHhjNmQxMDMyYSwgMHg1NTVmZjNkMiwgMHhhZTczZGVjNSwKLQkweDM0NGJjMDgyLCAweDZkMjcxZTk2LCAweDFlMjFhNDlmLCAweGQyYjVhZjc4LCAweDMxZThmMWE4LCAweGI3YmYyNDFlLAotCTB4YjllZmU3YWEsIDB4NzY1MmMzNTIsIDB4NTc2ZDU1N2YsIDB4YjRkMzdlNjMsIDB4NzQ4ZTJjZTEsIDB4ZWYwZGIxYmYsCi0JMHhmMjM4Y2UyNSwgMHg2ODQ3YTVlOCwgMHgyYWVkNTkzYiwgMHhlMmI3Nzk2NiwgMHg1NGVmZDE5ZSwgMHhmYTFmMTMzNywKLQkweDdlNjEyYTdiLCAweDFkYzc4OTU0LCAweGVlMzE2Yjk3LCAweDYxZjdlY2E4LCAweDRkNjNmMzJhLCAweGJmMmM0YjUyLAotCTB4NGZjYjJmNjAsIDB4ZWU5MWU3MTMsIDB4OTBiZTg4ZWYsIDB4YmJjM2MxZTUsIDB4NWE4ZDk1YTYsIDB4ZDA3Y2MwY2YsCi0JMHhmZWEzZjYzZiwgMHg1NTdjMzBkMSwgMHg2MWFmZTAzZSwgMHg5ZjQ2NzQ4YywgMHgxYjAzZDdlZiwgMHhmZDgyZmU5YSwKLQkweDU5NThmYzk1LCAweGU5ZGZhOGRlLCAweDQ4MjNlNmIzLCAweDNjNWY0MjJmLCAweGJhYzFlY2Q1LCAweGFiMzUwZmQyLAotCTB4NmUzMDNmZTQsIDB4ZWUyZmUyMzMsIDB4NWU0NzI4MTYsIDB4NjYxODlmYjUsIDB4OTVmNmVlZmQsIDB4OWQ4NGFiYjAsCi0JMHgwNGRiYjRhNSwgMHhiNWVmMTBiZiwgMHhjM2ZjMTQwZCwgMHg3NzdiMTFmMCwgMHhiY2NhYzM1MSwgMHgxNWZmMzkzNCwKLQkweGQ5ZjI5NTdjLCAweDdmOGMzNDgyLCAweDAwNmZmOWNhLCAweDdmZjZjNjFmLCAweGQzZjYxZjE3LCAweGZjMGRhMzdkLAotCTB4ZWNhOTU1MzUsIDB4ZGQyNTczN2QsIDB4ZjkzMjI2ZDcsIDB4NzU3N2E0YTksIDB4MTlmNTFhYjksIDB4M2EwYmJkMjUsCi0JMHgxOWJlY2ZiZiwgMHgyMGIzNzVmZCwgMHgzMWQ3NGY1NiwgMHhmYmMyNDFhYiwgMHhmZjVmMjc1MiwgMHhiYTA2NDNlMSwKLQkweGE3YjZhZTg0LCAweGU4ZjdiMmI0LCAweGZiZWU5MjZlLCAweGU5YjM4MWNhLCAweDk2NzdkZjMwLCAweDljMzNhNDAzLAotCTB4Zjg2NjViZGQsIDB4NDdkNjk0NTgsIDB4YmI0ZDJlOGUsIDB4Yjc5NTFjYjYsIDB4MTdmMThiZmYsIDB4YmU3M2ZmNjQsCi0JMHhjYTI0MWM5YiwgMHhkNDczMDU3YiwgMHhkMzlmMzYyYSwgMHgyMTNlZjJjOCwgMHhjZGM3YWNlZiwgMHg2NzU1NzllZSwKLQkweGQzN2JlMmI2LCAweDEyMmZiODY0LCAweDdkZDJjOGY4LCAweGM1OGViMjZhLCAweDAxNDkzNDM3LCAweDExNzUwOGVmLAotCTB4ZTkyMzI3Y2YsIDB4YjE0NjRiZWYsIDB4Zjk5NDM4NzcsIDB4NGYzY2Y1OTgsIDB4Mzc3MTk5NzMsIDB4YmU1MjEzZGUsCi0JMHgzZGYyMjQwNywgMHhjYTc4ZjllYiwgMHg3ZjQ0ODE3NywgMHhmOTU4MmY3MSwgMHgzNGM2ZDAyZSwgMHg5MGFkN2Y3ZSwKLQkweGY4MzhiMjE0LCAweDM3NTNmOWI1LCAweGZmMDBjOWM4LCAweDY2ZDVmNzcwLCAweGE0YjY3M2I0LCAweGFlNDdmMWZkLAotCTB4NmYzYzdlNTEsIDB4M2U3ZWUzNGIsIDB4YmY2YzVkM2YsIDB4ZmY2YzVkMGUsIDB4NmExNzQ5ZmYsIDB4ZWY3YzU2ZDMsCi0JMHhlMmU5NjZlMywgMHgzZjdkYWIxMSwgMHg4ZjljNWJhYywgMHg5NmZjNzNkZSwgMHg3OGIxY2YxZSwgMHhmOTY3YjgwZiwKLQkweDQ3MWVmOGFiLCAweGUzMDQzN2NmLCAweGMzZjNkNzQwLCAweDZiYjE3NDk0LCAweGJhY2ZhMzNkLCAweGFmMTQ0YzViLAotCTB4ZDBiOTRmMjMsIDB4YjhlMjMwM2YsIDB4MGRiZmVmMTMsIDB4OTkwZWRmN2IsIDB4OTBlMGE0YzYsIDB4MTZlYjBkNDMsCi0JMHgxYmQwODI3YSwgMHhkZjgwZmNmYywgMHgxZDc5ZTE1MywgMHg2ZTM3Y2EzNywgMHhhZmYxYmUzNiwgMHhmYjg4NmI4YSwKLQkweDRmNWFkZDMyLCAweGRiOTAwOWYxLCAweGJlODJjMzdiLCAweDhkMjU3ZDk3LCAweGVmNTBlZGM5LCAweDljYTI1YTZlLAotCTB4NTM0ZjAwNTcsIDB4ZWYxNWRmMzgsIDB4ZDlhODU2NmYsIDB4M2I5N2I5M2IsIDB4NTg5ZmU4ZDUsIDB4ZmVkZjgzZjEsCi0JMHhkZjZiNzlmMiwgMHg1OGZhOTVmMSwgMHg1MDcyZjk4MywgMHgwZDk0NDZmYiwgMHg1ZjJmOTYyYSwgMHhiY2M1NmU1OCwKLQkweGMwN2JiMDJjLCAweDE3ZmMyMTVmLCAweDU4NDdlZmNhLCAweGQxZDNjMmNiLCAweDY5ZDUxZWRlLCAweGM3M2NmNTg3LAotCTB4NWYwYTEzZDYsIDB4MTIzZTRkMGQsIDB4YTg3Y2VlZjgsIDB4MTVmNjFiZjksIDB4OWMwN2U3OWIsIDB4YmRlOTA5OGYsCi0JMHg5Y2Y5OTY3NiwgMHgxYmVmOGZjMSwgMHg2ZGZmOGJhNSwgMHgzNTI0ZmZmYSwgMHhmZTU0NDk3MSwgMHhhNjZlNDllNiwKLQkweDU3YTYxMjRmLCAweDU4OWQyMmNlLCAweDJjM2UyMWNlLCAweDRmZTU4NDlkLCAweDJjMzYyN2NmLCAweGFlZjYxMjE3LAotCTB4NjcwY2ExZjksIDB4OGRlODNhNDksIDB4MGZiZTFmNWEsIDB4YmZmNWU5N2IsIDB4NGNmYmUyZTcsIDB4ODU2YzhlNzcsCi0JMHhlNTViYTg5YywgMHg1NWVhNTZiNywgMHg4ZmJlMDUzZCwgMHhkOGZmMDNhNywgMHgyYjc0ZjdmMywgMHg3YjFiZmZjYSwKLQkweDk0NTA3YWE3LCAweDEwN2E0YTdkLCAweDRhNmZmNmJmLCAweGM0YmVlY2Q1LCAweDVlNTEwN2M5LCAweDFmNTk5YTU0LAotCTB4ZmRmOTg2MzIsIDB4ZTI2NDI2MjcsIDB4Y2RmM2YxZjksIDB4NmY4MmNkODQsIDB4ZWYyYWZjNDIsIDB4ZGZjNThhOGMsCi0JMHg3N2Y4NGE5NywgMHgyYWJkZGE3OSwgMHg4Yjc5NjIzYywgMHhhODZhZGQzMiwgMHg3OWVkNjZlZiwgMHg0NGI3MTY3NSwKLQkweGMyMjM3OWViLCAweDhiNzJmYjU4LCAweDY3ZGRmMjFiLCAweGNiOWUyZjEzLCAweGFlZWQ5MGI5LCAweGJkMTNiZmY2LAotCTB4N2JmOWQ4ODAsIDB4MTI3ZWJlMDYsIDB4YzNhOGJmZWQsIDB4ODliNmYyYzAsIDB4OWJmNjFiMzcsIDB4MTA0OTc2MGYsCi0JMHhlOTk3ZjczYiwgMHhlZTBmYmNlYywgMHhlMGZkZjhjNywgMHhlMTVmYjkzMiwgMHgyNjdlZGUyMSwgMHhlMDEzYWNhMywKLQkweGZiNzRiYmYxLCAweDBkN2NlMGY3LCAweGY3NWNlZThlLCAweDUzZjgxMTU0LCAweGMyZmMwNDU0LCAweDE4Nzg4YzVmLAotCTB4NWZhMjI4ZTMsIDB4MTFlY2I1OTgsIDB4YzQ4NzZlZjgsIDB4ZmI1ZDhiZjIsIDB4ZDJkZGUyZjQsIDB4ZmM3ZjQwZjgsCi0JMHg1NWYyOGNhMSwgMHg3NGRhZGRmMCwgMHhjMTQyOWZjNiwgMHg5NDJlZmUxNSwgMHgyNjFkODgyMywgMHg4MzA2ZDVmMiwKLQkweDQyN2U4ODZlLCAweGVkMDZlZjgyLCAweDQzN2Q1ODkwLCAweDU3N2JkOGZhLCAweGU5NzdkMTFiLCAweGNjMzNmZDAyLAotCTB4ZWMzMWZjZWEsIDB4MTA4ZWIwNjMsIDB4YmZmZmFjMjMsIDB4ZDIxOWJkZjgsIDB4ZWY3MTBlOTgsIDB4NTVlODJmMjUsCi0JMHg0YTdjNWZhMCwgMHgyN2RjMzFjNSwgMHg2M2I1M2RmOCwgMHhlZDRkM2NhMSwgMHg0MGZmMjg1MSwgMHhjZjI4NTFlZCwKLQkweGNhMTQ3YjUwLCAweDBhM2RhOWNmLCAweDM2MmJhMmU1LCAweDE0OTcxYzc4LCAweGNlN2ZkODY3LCAweGJiZjgzY2U4LAotCTB4MzNhNjJmMWIsIDB4YzMyNjc5YjksIDB4Yzc1YjI5ZDksIDB4NjNhZTFkM2UsIDB4YzdmM2E1ODcsIDB4ZWM3NWQxNGYsCi0JMHg4MmFkOTNkOCwgMHhlMGExMmNmYiwgMHg2ZmVmYjNkMSwgMHhmODIwY2VlOSwgMHg5M2RmY2RlYywgMHg2Y2NiZTc4MiwKLQkweGVmZTdmM2U0LCAweGNmZGNhMGQ2LCAweDJlNDZmNzZmLCAweDNkYWVmODBlLCAweGM4Nzg4NzVkLCAweDEyMzY3M2RiLAotCTB4ZjczNmVmYzYsIDB4ZDEyZWQ1YzIsIDB4YjE1MjRlYWQsIDB4MzMwYmZiN2EsIDB4MGI5ZDVkZWYsIDB4MDI3N2IwZmIsCi0JMHhlZWY5ZThmZSwgMHhmZGJmMzI4MCwgMHhmYjg2M2ZiNywgMHg4YzdjNzQxYiwgMHhiZTQ4ZjZjNywgMHg1MzJmNDA2NywKLQkweDZmYjk0M2VlLCAweGZmYmEyZmIxLCAweGM3N2ZkMDc1LCAweDEzYjA3ZTllLCAweDNiMDg2ZmNhLCAweGZiZDhmYjJmLAotCTB4YmJmNzdkYjgsIDB4YWY3YmQ3MGEsIDB4ZjcwNDU3ZGUsIDB4NTZmZGVlMTIsIDB4ZjQxZjM0MWQsIDB4YzIyOTQ2NGMsCi0JMHg5OWQwNTZiYiwgMHhiYTcxYjc4OCwgMHhhZWZhZjgxMiwgMHgxZTM5NWFlNywgMHgwMDE3ZWYxMSwgMHgzYzgyYjUwZiwKLQkweGZhMDkxYWJhLCAweDViOGYyNTYwLCAweGZlY2VlZmI2LCAweDFjYjllZjEwLCAweDNiZjgxMzUxLCAweGU1YTM4MzgxLAotCTB4YzE5ZDRlZTcsIDB4ZjMyODlkY2UsIDB4ODAxY2U5ZjYsIDB4Y2VmYjFkYWYsIDB4OWNmYmMzNjUsIDB4ZjBkOTNmMTQsCi0JMHg0YWJmNWI3NywgMHgxN2YzMmZlZiwgMHg2NmY4OGRlNiwgMHhmZDBmZDAyMywgMHhlMDJlZmYxZSwgMHgwMmI5YjIwYywKLQkweDBkMzNmM2UyLCAweDJkODVkZmZiLCAweGE5OWYzNmNkLCAweGRjZmNmODgwLCAweDk0MzBlOTQ0LCAweDYzOTlhY2YzLAotCTB4ZjIyZjJlMjEsIDB4OTRlNDE3OWEsIDB4NzRhMzg2MWUsIDB4ZjUxMmFkOGYsIDB4MmU2MDUyYjgsIDB4ZGNhMTcyMDEsCi0JMHhlNzFmYzExMCwgMHg0NjI4NzIxNSwgMHg5ODk3MWY1NiwgMHgyZWZlZmIyMiwgMHg3ZGFjOTY2YiwgMHhiMmVkY2U0MiwKLQkweDI2ZmJkZWY2LCAweGRmZmUyMWI2LCAweDdjM2MwMWZiLCAweDQ2NWUyMGZkLCAweDhlZmVjMWY3LCAweDdkZWM0YmQ5LAotCTB4YzczZGJjZGQsIDB4ZDY5ZGJlZWYsIDB4MGQzY2JkMjcsIDB4YzFkYjYzZGYsIDB4MmFlZDI3ZGIsIDB4ZDYyM2JmYzcsCi0JMHhhM2E5ZTE0MywgMHhlMWY5ZDQ4YSwgMHgxNGYzM2Y4ZiwgMHgxM2IwYTYwYywgMHg3OGJkZjc2YSwgMHhiZTY3ZGUxOCwKLQkweDFkNzA5ZGFlLCAweGZiZDQyMGZiLCAweGQyYmZhMmExLCAweGYyZmNhMDNlLCAweDA3MmZjMGM3LCAweDBjZDUzZWJmLAotCTB4MjMxZGExZjEsIDB4NzkwNjQ5YmUsIDB4ZWZjMTk5OTQsIDB4MjFiYjcxODcsIDB4OWVmNGRkMTQsIDB4NjFmYWM5MGYsCi0JMHgyNTI4ZmRlMCwgMHgyOGYyMTBkZCwgMHg0ZTU2NDNhNywgMHgwMWVlYzYzYSwgMHhmYjNmMmNkZCwgMHhiNDMzZjAxMywKLQkweGYwMjQ1ZGMzLCAweGZkMmEwOGVmLCAweGI2NzU4MzY1LCAweGZmMDQxZjBmLCAweGI4NmEwN2NlLCAweDNmN2JkMTA5LAotCTB4NWJmYzMxNmIsIDB4YjI3N2E3ZWQsIDB4NDk2M2YzNzAsIDB4MGJiYmY4YjEsIDB4ZWU3YWUwZjQsIDB4YzE5NTliM2YsCi0JMHg3NmE0YWNlMiwgMHg0NTQ5NjNmZiwgMHhlMmIyNzZmZSwgMHhiMjdiZWM4YywgMHhhYjIzNWE1MiwgMHhkNzk0Y2VhZiwKLQkweDA5YWU5N2Q3LCAweDBmNGExZmVjLCAweDNjZGNmYzViLCAweGVlMGYzMzlkLCAweGZmNDE0OWYxLCAweDdhZWY2MjZlLAotCTB4ZDg1ZjM5NjIsIDB4ZWNmOTA0YjcsIDB4ZjE0YmZkYjksIDB4YmYyYWI5ZWYsIDB4ODFlM2E3YWYsIDB4MDg3MTZmZGYsCi0JMHhkM2Y4MmFmOSwgMHhjZjdiMzUwYywgMHg0Y2JlZDk1NywgMHhiNWJiNjdjYywgMHg2MTRhN2RmMywgMHg2ZjVjNzk4ZiwKLQkweDY5ZmJiOTMwLCAweDkzMjc1Mzk0LCAweDdmNGMxOWViLCAweGM5ZTFiNGJkLCAweDcxMGQ3YzFmLCAweDllY2NiZGE0LAotCTB4NzI2MTY0YmEsIDB4MTdmNzdmMjMsIDB4Y2M3YmY4MmEsIDB4N2QxOWMzODMsIDB4MmFiZDliZTUsIDB4NTNkMzI3YjgsCi0JMHhiYzgyZTExZCwgMHgyNmE1ODZlZCwgMHhkYzFiYjdjYywgMHhhMTg5ZjdjZiwgMHhmYzFmOTA4MCwgMHgxYTdmZDBmNCwKLQkweDBlZmU3ZDI4LCAweGM4MDViZjJlLCAweGI5ZDAxZWUxLCAweDhjZjFmZDY4LCAweDQ5ODcyODQzLCAweGI4NmZjYjJlLAotCTB4OWM3Y2ZiNTUsIDB4YmZhODY0ZWEsIDB4MzE3ZTMxOTQsIDB4Y2I4ZmU4MDcsIDB4NTVjZjQyMmIsIDB4NTdhNDYzYzMsCi0JMHgwMjFmMDE3ZSwgMHhjMGZkNDBiOCwgMHhmMGZiZGY0ZiwgMHgxZTMzZjA2OSwgMHhmYzAyZmM2NSwgMHgwZjUxMzMwNywKLQkweDdlZTUxYmIwLCAweDFlZjYzNjg1LCAweDBiYmQ5NTk4LCAweDQyNDJmMjIyLCAweDg3NjU4ZmYxLCAweDU3NjA3NTVhLAotCTB4ZjFmZTZhZGUsIDB4YzRmOWY1ZjIsIDB4OGYxNDA5YjEsIDB4M2U1OTdiMGQsIDB4ZmU4ZWU1ZjcsIDB4NmY4MDI0NTEsCi0JMHhmMGQ3ZTEyOCwgMHhiN2NmMGE5YywgMHhhODc3NzdhOCwgMHg1MDc5YzNjNywgMHg3MDE2NGJkZSwgMHhiMjAxZTYyNiwKLQkweDE4MWU3OGY3LCAweDIwYzliN2ZkLCAweGE3ZDgxZjk3LCAweDUwZjQ0MTYxLCAweDExNTVhY2YzLCAweDgzM2NjMDZiLAotCTB4OGU1MWU5ZjcsIDB4OThmN2Y1ODksIDB4ZjdkOTFmMzksIDB4NWNkMmU4ZDcsIDB4MjIwYWFlNTYsIDB4YTAxZWE5NGYsCi0JMHhhMDNkMDU4ZCwgMHhmNWJiNDI1MiwgMHg2NTA5N2RlMywgMHgyNThmZmYwMCwgMHhlMjE2YjFlMiwgMHgzYTJmOTgxMCwKLQkweGJmMDcwZDg1LCAweDg5OWRmMTFiLCAweGUwNGQxY2M0LCAweDZlYzI3YWZiLCAweDVhNmZiNjlkLCAweDNmNTdkMDdmLAotCTB4NjNmZjNkZDksIDB4NjlmMjE5OGEsIDB4ODc5ZTE2NDYsIDB4MWY4ZWYwZTksIDB4MTZjN2VmODUsIDB4NDNmODFhNDcsCi0JMHhlYjc4ZjEyNiwgMHgxNzVmMTZjNywgMHg4ZjFmZDVlOCwgMHg2ZmMwOTA4ZSwgMHgwZDVmYzc0OSwgMHg3ZDdkOGJlMywKLQkweDM1YTQ3NWFjLCAweGVkMTdmYTA2LCAweGZiZDNiZTgzLCAweDQyYmRhMjVkLCAweDAyNzRiMmJkLCAweDExNjc4YmM0LAotCTB4NWVmY2Q3N2MsIDB4YzlhM2QzMzUsIDB4MGIzY2VjM2IsIDB4NzUyMGRhYmUsIDB4YzczYmUzNDYsIDB4MzJiYjkzMTksCi0JMHhhNjg0ZmY2OCwgMHhhYjNkYTExZiwgMHg1MWJhMjdjYywgMHg2ZWQ3YmEzZCwgMHg3N2IxMjZkZSwgMHg0ZThjNmMzMiwKLQkweGZjNWQ0N2ViLCAweDdmM2E3NGM5LCAweDQxZWZiNTNkLCAweGRmNmJhYmFmLCAweDI4YTZlZjhmLCAweDdiNWVmOWVkLAotCTB4YmMyZmU5NGEsIDB4N2ZlODNmOGUsIDB4Y2E2ZmIxMDAsIDB4MDA4MDAwNWIsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg1OGFkZmYwMCwgMHhlNTU0NzAwYiwgMHhkZWY3M2UxNSwgMHg2NmNkOTI3ZCwgMHg0MjFiMjJmMywKLQkweDI2MGRkZGUyLCAweDliNzA5NjAxLCAweGY1MWU0MzU3LCAweDhjYTQxMDlhLCAweDYzODgzNzZkLCAweGZhZGVhNTZhLAotCTB4NTkwOTIwNDAsIDB4ZDZhMjc1MDksIDB4MDA3MWE2ZTEsIDB4M2I2MzRlYTksIDB4YjMzMDg4YTMsIDB4MjMzMWUxZDIsCi0JMHgzMDU0ZDM1MywgMHgzMmQ3NDBhMywgMHg1ZGE5NjI1NSwgMHg2NmQ0MmQ4YiwgMHg4OGQ0NmI5OCwgMHhmMWE2YzkzNSwKLQkweGExOTg2NjU1LCAweDVlZjdmY2U3LCAweGQ2MDg2Zjc2LCAweGU2Y2NkZDNhLCAweGU3M2VmZmVjLCAweDljZmY4ZjNiLAotCTB4YWEzNmMwMWYsIDB4NWNmYjAxOTUsIDB4OGJkZmYwMTYsIDB4ZWQyYmYxZjYsIDB4OGNhMmMwMjAsIDB4MDZhYzQzYjAsCi0JMHgyN2M4ZjJkOCwgMHhmYjBkYmQ3ZiwgMHg5OTBkZWRkNCwgMHg0N2YxOGI2MywgMHg0NzVmOGUzZSwgMHg1YzgwNTRiMywKLQkweDAwMGVhNTgwLCAweGQ0YzAxNTRmLCAweGJlZThiNGZlLCAweGYwOTdmNTAwLCAweGQ5YjAwMzUwLCAweDgwNDUzZjg3LAotCTB4OWM5NDRlOGYsIDB4OGZmMWM2ZWQsIDB4ODcwM2IwZGUsIDB4OWYxYjI3NWQsIDB4ZGIxMDdjOWUsIDB4ZjlhN2Y2NWIsCi0JMHgwNTllMzQ5YywgMHhlZjhkM2U2YSwgMHgzOGFhOGQyYiwgMHg2YTdlM2VlMSwgMHgyNzA3M2JhNCwgMHhmYjRiYTYwZSwKLQkweGJkYzNmYzcxLCAweGM2MWZjZmE1LCAweGFmZTc4NmY2LCAweGFlY2Q4ODk3LCAweGQ5ODgzYzVkLCAweDBkODg1ZmQ4LAotCTB4M2U2ZGZmZWEsIDB4ZmQ3ZTA3NWIsIDB4ZmQyZTc1ZGMsIDB4OTJlMGUxNWMsIDB4ZjhkMDM3OWYsIDB4Y2U4OTZjYzEsCi0JMHhjYjM5YTU2OSwgMHg3NWVjMmUwMCwgMHhmMDBlNTBjYiwgMHg3ZGNhYzQxOSwgMHg3MzFmMDBjNSwgMHgxYjhmMThlYSwKLQkweGNmODdmM2I3LCAweGIzYzAzYzczLCAweGU0OTRhNTBlLCAweDM3ZmJiOGRlLCAweDc5NDdhYjdmLCAweGU3N2UwZjlhLAotCTB4ZGZjODY1ZTksIDB4NDBiOTMzODYsIDB4NWNmMmMwZmIsIDB4Nzg3ZTAxODYsIDB4MWE3MjhiOTgsIDB4OTcwOGI1ZTcsCi0JMHg2MDA4NWFiYywgMHgwNjcxNThmYSwgMHhiNGY4OTI4NCwgMHhkZWZiNzIxZiwgMHhlMmI4MTk3NywgMHhkMzIwNzNiNywKLQkweGNhMWFlZWQyLCAweDk2NWZiZGY3LCAweDhlODNiNzZjLCAweGQ5YzNkYzMxLCAweDdkMGVmZjY4LCAweDY1Nzk4NjA4LAotCTB4MDlkNWYxMDksIDB4MDgwODAzOWEsIDB4OTc4NDcyOTgsIDB4OWMwODU0MDAsIDB4MTNmZjg0MGMsIDB4NjVmZjg2NGUsCi0JMHhhNDkwZGNmYSwgMHhmOGNmMjIyZCwgMHgxOTQxZTBlOCwgMHg2Y2ZjZTBmMCwgMHg3MDJiZjk3MCwgMHg5N2UzYTJiOSwKLQkweGRmNzRhMjc4LCAweGFkNjZjNDRlLCAweGNkNTAwNTk4LCAweGJkNTkyZGY2LCAweDhiN2ZjOTI0LCAweDE1ZTliMjMwLAotCTB4OTc3YTdmZGMsIDB4ZWY2MjcyNTMsIDB4MGNlZTFiYjgsIDB4YTczZWFlODcsIDB4ZWI2NGNjNTUsIDB4MDUzZWI5ZDcsCi0JMHg3ZmIyNzY1YiwgMHhhZGJmY2Y1MywgMHg1MWM4MTBlZCwgMHgyN2QxNWY1YywgMHhiNDhmZGU1NiwgMHhhZmNiZDBkYiwKLQkweDBjMzVlMWZjLCAweDhmMjc4MWY3LCAweGVlNzg2NjllLCAweDNhMWRlMDc5LCAweGU5ODc5NGY3LCAweGI4ZWI0ZTBmLAotCTB4MjM2ODM4MjcsIDB4ZDZmZGNjMzksIDB4NTZjMGE2YjksIDB4YzczZWZjNDksIDB4YzdmYjM1ZjgsIDB4YWU1YjM5OWUsCi0JMHg0NzYzZmVlMCwgMHhkYTAzOTcxNiwgMHg3YzQyNWRmMywgMHg2N2M0NTllYywgMHhmZTdlM2QzMiwgMHhhNzgzYTQ2MSwKLQkweGYxNTczMmZlLCAweDQ3NmZjZDVjLCAweGNmZGIzNGNmLCAweDFjNzM4ZjZjLCAweGU0ODNiNzkzLCAweDgyOWJmZWMwLAotCTB4OWUyMjhkZTEsIDB4MDk5MDM2MDMsIDB4NGI5ZGQxYmYsIDB4NDIyZDdlMTgsIDB4OWZmNDgzMjgsIDB4ZGZjYWM4ZjgsCi0JMHhmZGNkM2U0YywgMHhmZGNjZmU0ZCwgMHhhNDNkNzljZCwgMHhjMjYxYzQyZiwgMHhjMmNmMmYxMSwgMHhhMjQ1MzlmZSwKLQkweDZmMDlhZTQ1LCAweDQzZDMzY2JjLCAweDNmZDYzZWZkLCAweDE0ZWQ4NTkxLCAweDlmYTM2YjdiLCAweDE3MzZkZmE4LAotCTB4YmY5MDczZDgsIDB4ZWE0ZTM2YjYsIDB4NDJhZmQ2MDMsIDB4MDUzMWEzMTYsIDB4MmZmYzNiYzcsIDB4ZDg0MWI4MWIsCi0JMHhhYjc2NzY4NSwgMHg5MzkwNjc2MSwgMHg1YTNmMjM2ZCwgMHhkZjVkYmEwMywgMHg4YmM3ZmI1YSwgMHg3NmUwMTc5YywKLQkweGZhMDNiMDE4LCAweGY3YmUzOWNiLCAweGUzYTQyZWM3LCAweDEzYjRiZjAzLCAweGJlMTBlODdlLCAweDRlNWZiNDMxLAotCTB4YmNiZjg3N2QsIDB4NGRiOTZhZjgsIDB4YTU4ZDgwNGEsIDB4NWY4MzFiYzYsIDB4MjJjYTA5YjUsIDB4Y2Y4NGNmYjgsCi0JMHgwMTRiZjJhMywgMHgxYjM5MTE5ZSwgMHg4NTA4NTc5YiwgMHhhNWM3MGYzNCwgMHgzYTgxZGExOCwgMHg5MGZhOTRlOCwKLQkweDc4N2M0YjlmLCAweGUxZGZlMTJmLCAweDFmOTM5NTg4LCAweGYxMmVlYjk4LCAweGU3MWZlYjBhLCAweDdkMjNhZjRlLAotCTB4MWU1NjJkODMsIDB4NjQ3ZDQ3NGUsIDB4NDBjYjgwM2EsIDB4NjVjNTJiOWEsIDB4MGNmZDQzYzQsIDB4MjMwMTVjNTgsCi0JMHg5NTE4ZjFmZSwgMHgxZDg0OWNlOCwgMHg4ZjkxMDZkYSwgMHhmZDM3ZWE0NiwgMHhhYWE0ZWQxMywgMHg3YTBjOGY5OSwKLQkweGZjOTNmMzkyLCAweDAxOTVkYjViLCAweGIyYWFjZmRkLCAweDJjYzBjOGY5LCAweGMzMjdmMWZlLCAweDQwNjBmYjBmLAotCTB4ZDYxN2ZkZDAsIDB4N2FlNzEwYjgsIDB4NTkwMDY3MDMsIDB4NjRkZjdmMjAsIDB4M2NiOTM3YjQsIDB4NTRlMzAxMzEsCi0JMHgwNTUyZWJjMiwgMHgxOGZlYmZlNCwgMHhmNWRiMDFlYSwgMHg0NGFiZDhiNiwgMHgwN2ExZWJkMSwgMHgzMTA3NTlmNSwKLQkweDZiMjFiZjdkLCAweDhmNzBlNmZjLCAweGZjMWM3MDNiLCAweGE5MWM1OThiLCAweDhkYmJkNDMzLCAweGQxZTkwMDhiLAotCTB4ZWU4Y2ZkMDUsIDB4ZDEwMmUyZTQsIDB4YTMxNGMxNmYsIDB4NDQ2Y2Y4MzIsIDB4OTc0Njc2MTEsIDB4MTVkMTk4NDMsCi0JMHgyNTc0NjExMCwgMHgwYWJhMzNmNCwgMHgxOWJkMTgwNiwgMHhhMmMyOGNlMiwgMHhmOGIwMWY1OCwgMHg1OGRmMTNmZiwKLQkweGRmNmY5MjFhLCAweDVhNDY1ZmM3LCAweDY2NDQxYjc1LCAweGMzMjk4N2YzLCAweDA3OGRhZmNlLCAweGFmOWFmNTQ2LAotCTB4NTAwYWM3OGYsIDB4NmJhZjhjZmMsIDB4OGNiZjMyZTEsIDB4OGI4OWI5ZDksIDB4ZDcxMWVjOTMsIDB4MjdlYTIxYjksCi0JMHhkYjFhMDhkYSwgMHg1YzMyMDZlNywgMHgxMDQ2ZTdkYywgMHgwNjZlZDQ2ZCwgMHhiZTViYjU5OSwgMHg5YWI1MWUyMiwKLQkweGIzNDI1MzYyLCAweGJiM2NkMmUwLCAweDcwMzQ1YzlkLCAweGFiMmMyNWU5LCAweDE4NWFmYTkzLCAweGQ0ZGI1OTEwLAotCTB4MTQ5ZjIwMWIsIDB4MjdkNmFmZmYsIDB4NTU5ZjExMTQsIDB4ODg5ZjRkNjksIDB4MDNiMjIyMTgsIDB4YzYxYjYxYmQsCi0JMHhhNmNhYWFkNywgMHgyZjZjNjJlZSwgMHhiN2E5M2MwOCwgMHhlZDJhOWJlYiwgMHhmYmQzOWUxMiwgMHg4YzcyZjA4YiwKLQkweGVlMGMyZWFiLCAweDI4NDVjNDZlLCAweGE5MTZhMDE2LCAweDAzOTZmNmUyLCAweGI4NTM5NWZhLCAweDU0ZmYyMjVmLAotCTB4MTBmMTAwZGMsIDB4NDBiOWUzNzMsIDB4YzI1NmQwZmUsIDB4M2UyZGJmZWUsIDB4M2FlZjNmNWQsIDB4ZGEwMGY0OTQsCi0JMHhlNjJiYTc3NywgMHgyZGU3MTExNSwgMHg3NDc5MmRiZCwgMHhlODc3NmUwZiwgMHgyYjliYmVmYiwgMHg2NTA1N2UyZSwKLQkweGFlMzllMjcyLCAweDM4M2NhNDhhLCAweGFkYjFiYWFlLCAweDRmNzc2MjcxLCAweDU3ZWU3OTIwLCAweDUwMjBhZjM4LAotCTB4OWFmM2VkN2QsIDB4ZmM0ODhhZmMsIDB4NDgwNGFiODAsIDB4M2RjNjA1Y2YsIDB4MmY1ODM4M2QsIDB4ZWY5ZDNjNDksCi0JMHhlOTZiZTc2MywgMHgzODNkZGQyNSwgMHhiYzNmYTRmNCwgMHhhNDRiZjY5MCwgMHg5MGI1ZjZlYiwgMHhkMjRkY2ZmMCwKLQkweDk0YjkwMTM1LCAweDI3ZjY2N2M2LCAweDFhMzhiZjdhLCAweDFmMTM3ZGMzLCAweGFlYjhjMWUwLCAweGQzOTRhMDMxLAotCTB4NTZiYzVkYjksIDB4Zjg3YTg5NTQsIDB4MDc3OWRhNjksIDB4NGZiNGRmZTksIDB4MDc3Mjk1MGUsIDB4NDMyN2RiY2EsCi0JMHhiZWVjYzFkNCwgMHhhZjI1NzdjMSwgMHg3N2RhNGUyYSwgMHgwZmRjNWVlMiwgMHg4NzBhYTg3MSwgMHg1YzM4ZWQ5YiwKLQkweDQ5MzkxNmQzLCAweDZmZTk1NmI0LCAweGE3M2ExMWM2LCAweDEyZTlmODllLCAweGJlOTFkNmE2LCAweDM4Y2YzMzI3LAotCTB4MzdmZTYwM2UsIDB4MjMzM2I3NWYsIDB4MzEzZjFkMmUsIDB4ZGU4MTcwZmMsIDB4N2Y4YTQzMGMsIDB4ZjhiODlkNzUsCi0JMHgxZTMwM2ZmOSwgMHgyNDdiNGQ3NiwgMHhlYzdmNWU5YSwgMHgyNmYwNmU5OSwgMHgzYWIzMGFmZCwgMHhmZDMwZGM0YiwKLQkweDE5Yzg2ZWFjLCAweDg1YmNkODEzLCAweGM2ZmNkMmY3LCAweDE0YzUyMzMzLCAweGQxMTg2ZjZmLCAweDQyZGMzMGZhLAotCTB4MDJkOWY4ZTIsIDB4N2I4ZGRlZGQsIDB4ZmI4MmZlNDEsIDB4OGI0MmY3M2EsIDB4YjhjNzRhODAsIDB4MTA4OGY5YmYsCi0JMHg5YjVjYTI3NSwgMHhkYTMwNGYyOSwgMHg3NDNmYjYyYSwgMHhkMDY0OWRhMSwgMHg4ZjkzZDk3YywgMHhlNDM3YWQ3MiwKLQkweDgzZmUxY2VhLCAweDZkM2E4MzAzLCAweDFiYmM5MmEzLCAweGVmZDdmZTBjLCAweGNhNjZmYmI5LCAweGVkNDQzNmZiLAotCTB4ZGY4ZWY4YzksIDB4MzZlODkxZjYsIDB4OTBmZGJiZTIsIDB4MjEyMjlmYjUsIDB4YWM2NWRmYzksIDB4YWJiY2EwZWYsCi0JMHhlYjM3ZjI5OCwgMHhmYzc4MmViYywgMHhiYTk3MTQ1ZiwgMHg5YmZkYWM4NiwgMHg0YzM5ZTkwMiwgMHgwNjNkYzYwZiwKLQkweDlmNzhiZTQ2LCAweGEzZTQ4NzMxLCAweDcxZjM3OWJjLCAweGIyODlkNDQ3LCAweDJkZGJkZTZkLCAweGU4NWRhOGY5LAotCTB4ZGQxYzU4OTEsIDB4NWJiMzI4ZjMsIDB4YzllYzNlNzMsIDB4ZmE2MjM2NjYsIDB4YzAxZDg2ZTcsIDB4YzcxMzYwZjIsCi0JMHgzMjljMDdhNSwgMHg4MWU5NjNlOSwgMHg2MmRmOTYzYywgMHgwYWYyY2U1ZSwgMHhjZWNjMTM4YywgMHgxYzI2MjI5NywKLQkweDk5MGJkZGRhLCAweGNmMWU0MTUzLCAweDk5NzhlMTc5LCAweGNiZjM3OTQ0LCAweDZmNzg2NTViLCAweDMzM2Y5MjQxLAotCTB4MGUxMTZmNmYsIDB4M2VkMDNiMzcsIDB4MWYwMWVmYTYsIDB4NTAzNTdkZTUsIDB4YWUwMzc0ZjYsIDB4ODc2NTNlYWIsCi0JMHg4MzRmOGUyOCwgMHgwYmU5OGZhZSwgMHhlYmJmY2IzYywgMHg2NGZkMmI4NiwgMHgyMzFjYzIwNywgMHg0ZjMxZjg2ZSwKLQkweDJkYzNjMTRmLCAweDI1MzEwMWNlLCAweDc1ZjEzNWNmLCAweDJiNGI3YTFhLCAweGE3OGNiMmNiLCAweGViMmNmMzRiLAotCTB4ZDY4MzZhMzMsIDB4MGYxY2FhZjUsIDB4ZDY5YzUwZDUsIDB4OGJjYTY3ZDcsIDB4YzM0MWYzMmMsIDB4MzA2ZjFjM2YsCi0JMHg1ZGVlZGJlMCwgMHhiN2VjOGE3MSwgMHg2NmZlYjNkMSwgMHg2NTdiMjljMiwgMHg1M2JlNjU4NSwgMHhmZjEwMjYzOCwKLQkweDJjZGE5ZjBkLCAweDg0MjZmYzdhLCAweGNlNTFkMzliLCAweDBmMzFiN2RhLCAweGM2ZWE3M2MxLCAweDRkNmVlM2FkLAotCTB4N2VlNzVhMDUsIDB4YTAxZjI1M2IsIDB4N2I2YjQ0ZmQsIDB4Zjk4N2I0YzAsIDB4MWVkNTNmMzAsIDB4YWU3Yjc4OTIsCi0JMHg1MGY2NDllMCwgMHg3ODJjMGIwMywgMHgwYWViYzRjZiwgMHhmMzA3MWVmZSwgMHg2ZWUxYmE4NywgMHhkODZlNWZjNiwKLQkweDliNWU3YjhhLCAweGM1N2NmNzE1LCAweDdhYzE3MzhhLCAweDExODVjZTJiLCAweGY1ZDdjZTJiLCAweGE4MGQ3MTU4LAotCTB4Nzc4YWRjNTYsIDB4NWZlNjU5ZDQsIDB4Njk2NGRmZGYsIDB4NjU1YWVlOTcsIDB4YmEzMGJmOTksIDB4N2M1ZWQyZGEsCi0JMHhmY2NiNzZlOCwgMHg1OTc3MDMyNSwgMHg2ZDBlOTdjNiwgMHhmNjliOGNiNCwgMHhkZmZmNTMzNSwgMHg2MTllNmQ4OCwKLQkweDVmZjAzYzVmLCAweDUzY2FmZmEyLCAweDk5Y2U1OTBmLCAweDg4ODA3N2E5LCAweDZiZDZmODQwLCAweDU3MDNiYjAwLAotCTB4ZWRmYWJkZWIsIDB4NTc4YWYwN2UsIDB4MGYwMjlkZWIsIDB4ZjUzMzlkZTUsIDB4YTdmYTQ1M2YsIDB4ZmZlODZmMzgsCi0JMHhjNjI5ZDIzMywgMHgxN2JkMzdiOSwgMHhmZDM3MjcxZSwgMHhjZjFlOWE2ZSwgMHhiODg2ODQ1YSwgMHhiMDZkN2E0YywKLQkweGNmZWI3YWIzLCAweDNhNzM3NjYyLCAweDFlZTMwM2M1LCAweDE4ZjcxYjBiLCAweGVjYzFkZmFjLCAweGRiZDNlYzIxLAotCTB4NDkzYTVjNTIsIDB4NWNlMmFjNzEsIDB4YWFmODk5YjgsIDB4NTEyNzIyZDIsIDB4ZDBiOWE4NGMsIDB4ZjM0MTljZGYsCi0JMHgzODdkMTA2NSwgMHhmYWYwMzM5ZiwgMHgzNjA3MmQ1ZSwgMHg3YjYxM2Y4YiwgMHg1YmNmMTI2ZSwgMHgwMzIxNWVkNCwKLQkweDhhNWZkNzI3LCAweDRiMzBiMWY2LCAweGJmOWUwZWM1LCAweDZhZTcxOGRhLCAweDU1YTI3YmY1LCAweDA1MmQ4Mzc2LAotCTB4ZjM1YWM2OTcsIDB4ZmUzMTA4ZmUsIDB4MzE2ZmZjNGMsIDB4ZTdjYzA4ZWEsIDB4M2NmOTQxYzEsIDB4MDVmNjhhZWYsCi0JMHhhNDVmY2I2NiwgMHhhZmNiMDI1ZCwgMHhiZDZmOTYxNCwgMHhhMjc2MjljZSwgMHgyMmYxNWM2YiwgMHg5ZTRhZWI4YSwKLQkweGI4ODgyZjMyLCAweGM4OTJmMjRkLCAweGViNGUzM2YyLCAweDI0MTJhMTIzLCAweDZhNTY1ZDE4LCAweDc1NGNhYjY2LAotCTB4MzBhMzk2MTgsIDB4ZDE5ZjI5MGYsIDB4ZmIxODdhYWEsIDB4MmY0NmFkM2UsIDB4MTI1M2U5N2IsIDB4MTg4MzhhNTQsCi0JMHhkZjM5NDcxNywgMHhmYjVjNGFiNiwgMHg0NWM3ZGQ2NiwgMHhjYTJkNmY3NCwgMHhmZjUwMTc5MCwgMHgzYzhlZjc5NSwKLQkweGFiZTMwYjk0LCAweDQxMmE4YmM2LCAweGIxYzQzZWEwLCAweGRhNjNlMWZhLCAweGRmOGE1OTY0LCAweDdiYjNiMGVlLAotCTB4NmE3YThjMGEsIDB4NTk5MzgxYWQsIDB4OWM2MWRkNGYsIDB4YWM1YjhhM2IsIDB4NzZiZGY4YzcsIDB4NDc4Njc1ZTgsCi0JMHhkNTljN2ZiYiwgMHg5MjZmNjg5ZiwgMHg3YmJmZjcwZiwgMHhlYTgyYTdiZSwgMHgyNTJiOTA0OSwgMHhlYjM3MGViZCwKLQkweDdmZTEwMmFiLCAweDdhY2Q0N2I5LCAweGRiZjM1YWY0LCAweDc1MmMxN2ZkLCAweGVmZDYxYzJlLCAweGFmZWY2Yjk3LAotCTB4Y2E0ZDdiMzIsIDB4ZmEzZmVmYWQsIDB4NzdiYjFhNTgsIDB4NmMyYjFmNDYsIDB4N2ZkYzlhMjIsIDB4MzZiZmVkOTIsCi0JMHgzZWM1OTZmMiwgMHhiYmY5ZWNlZSwgMHhhNDdlZWVjNSwgMHhkNzE5NmJiZSwgMHgwNWVjYTY3MiwgMHgzNDc2YmYyOCwKLQkweDEwMGZjNTdmLCAweGNlMjM4OWJmLCAweDUxMzNhYTFhLCAweGE2MGZkZjVmLCAweDEzZGFjMWQ0LCAweGJjZTljYmE1LAotCTB4M2ZlNzJlZmYsIDB4NWIyM2JlMTksIDB4OTA1YjYwZTMsIDB4ZDZmY2YzOTQsIDB4NmRhZGFjNzMsIDB4Mjk5ZDE4ZDUsCi0JMHg5YTk3NTlhNywgMHgyODdiZjFkNCwgMHhhNjdlYTFiMywgMHg2Y2QyMzliOCwgMHg0MTIzMmNlZiwgMHhiOTFmNmYzZCwKLQkweGRkMTM2ZTcxLCAweDBlODUyM2JmLCAweGY0NGI0ZTliLCAweDRiYWQ3ZTc2LCAweDQ5NThhZjZmLCAweGVjZjc2MTM0LAotCTB4ODQ3NGJhYTAsIDB4N2I0Mzk5MDMsIDB4ZjlmNzlkMTgsIDB4NTE2ZTA3MDEsIDB4NDAzY2E3OTcsIDB4YTY5YTI2NzIsCi0JMHgyOTc3YTczZSwgMHgyODhhZDFjOCwgMHgyYTY2NGM5ZSwgMHg4NzNmNTIwZiwgMHgxNjdlNWZjOSwgMHhmMjg0YjNlMywKLQkweGZhYmMwYmZmLCAweDcwMThjMDZiLCAweGFkNmRkZjYwLCAweDdhNGZkNzk0LCAweDY0N2ZiYjc1LCAweDJhYWQyZGRmLAotCTB4MTk5OTUyZTIsIDB4NDBlYjRhZGUsIDB4OTE3YmQ4ZDYsIDB4OGVmOWFmYzksIDB4ZDUyZjc1NDIsIDB4NGViNzA5MjEsCi0JMHgyNjM5MDdiNywgMHg3NDE5OGVmZiwgMHgyOGQ0ZDUzNywgMHgxZDA2NGJkZiwgMHgzODRhZmJlNSwgMHg0ZWRkODdmMiwKLQkweDdlNjAxZmQ4LCAweDMxNWU1MzIwLCAweGZiYTljYzdkLCAweDhiYzAwZDgxLCAweDcxMWRlZmUzLCAweDNjZjY0NzNlLAotCTB4YmNhNjc5MTcsIDB4OTYzM2IzMDUsIDB4Y2VmYzU3ZmYsIDB4NjEzOGEzMTksIDB4MTRlNGJmYmUsIDB4ZTEwYjNmOGIsCi0JMHhlYzk3OWNmYSwgMHg0YzlmY2VhYywgMHhiZmM4NmIxNywgMHhiMmFmYmQzYiwgMHhhMGE2ZWJiYywgMHg0MGU0YzAzMiwKLQkweDhjN2UyODQ5LCAweGRiZWU3NTFlLCAweDJhNGRmY2M5LCAweDdmZmU5ZDVhLCAweDEwM2I2NzdkLCAweGE2OGM3NTY0LAotCTB4M2JjNjkxZTcsIDB4OGI3NzI5OWIsIDB4N2I5MzM4ZjAsIDB4NDgxMzk3N2EsIDB4ZTM3Yjg5Y2UsIDB4YmJkODg1NGYsCi0JMHg3YzQ0NTQ5MiwgMHhkZjNhZjI4ZSwgMHg3Y2E2YmYyNiwgMHg3ZGM5MWNhNiwgMHhjZDZlZGNiZSwgMHg3YmU0YTJmNywKLQkweGYyMTJmNmQ2LCAweDdmNTFjNDAzLCAweDNiYjgxM2M3LCAweGZlYjJjZjU3LCAweDlhYWJlOTBjLCAweGEwOWRhN2JkLAotCTB4YTIzMWI2MzgsIDB4ZjUyNWE3YmYsIDB4M2JjMGZmZGUsIDB4MGY2MWI3YTQsIDB4NWFkNzYzOGIsIDB4Y2VjZTUzM2YsCi0JMHgwZjBjYzMxMywgMHgyNDg3ZjM5NCwgMHhhNzljOGE1ZiwgMHg3ZWVmMjk4MywgMHgzZWNmYzcxMywgMHhiZWJmMTIxNSwKLQkweDM4YzI4OTdjLCAweDNjNGNkZjdiLCAweGM0NDhiMTc3LCAweDVlYzc5ZGY1LCAweGQyNzY0NzNmLCAweDMzZmZkNDY5LAotCTB4NzM5ZGE5ZGYsIDB4OWFjYzdlYjAsIDB4NmYxYTdkZWQsIDB4Yzk3Yzk0ODUsIDB4NmY5ZmFlNjksIDB4MDRjN2FlYjMsCi0JMHg4ODZjZmM5OSwgMHgwYWYyOTFmYywgMHg1ZTI5MjdiYywgMHg4YmU0Zjc5YiwgMHg2OWMxOWQ0NiwgMHg0ZDc4YjFhZiwKLQkweDZlZmQ5MWU3LCAweDVmNzY1NGUzLCAweDdkMDVlZjk5LCAweDU0NDdkZTFjLCAweDJjZGQyYjk3LCAweDc5ZDcwYjhlLAotCTB4MTdjZmIyMjQsIDB4NzRlMzA2ZDEsIDB4MzRlNGQ4ZmYsIDB4YTMzYzJlZjYsIDB4NTRlNzlkOGUsIDB4ZDkzYjI1M2UsCi0JMHgxZTUzNTZmMiwgMHg2ZjgzYjlkNSwgMHgyN2VhMzJhYywgMHgzNmE5MWVmZCwgMHhjZTlhYjJlYywgMHgxOTQzZmUyNywKLQkweDMyYTkzZWVjLCAweDQ1NzFhYmY4LCAweDBjYmFkZTU4LCAweDE3N2Y0MTU0LCAweDFlMTlkZTMwLCAweDc3NTJjZDdiLAotCTB4YTJiZjA3ZmQsIDB4MTdmMDg0NmIsIDB4MDAwMDE3ZjAKKwkweDQyNGU0Y2NlLCAweDRjMjJmMjEyLCAweDIxYTA4ODEyLCAweDhhODBhZjBjLCAweDIyMDEyNzdmLCAweDI4MjAzOWY1LAorCTB4NDIwMWQ0NTgsIDB4ZDQ4Mzc5MDgsIDB4Y2RlZGFmNGIsIDB4MTExMDI0ODQsIDB4MDU0N2Y0MzUsIDB4NTA4ODc2OGIsCisJMHgzNDBkYTJkMSwgMHgwZWMxNjBkMiwgMHg2ZDdiMTQyMCwgMHhjMGZhZjA2ZiwgMHg0ODBiZjVlYSwgMHhiMTJmMzE0MSwKKwkweGNiYzU3ZTIwLCAweGU3ZGFkNmJmLCAweDI2NGNlNjY0LCAweGFmZGJkODgwLCAweGI0ZmRmZmZmLCAweGVjZTdkOWI4LAorCTB4ZWJkYWY3YjMsIDB4N2I1YWQ3YjUsIDB4NzU5MjNkZWQsIDB4YzdiZjkzMDIsIDB4MDNmYzQ1ZDgsIDB4OGM0ZDRmZTUsCisJMHhmMmMxMDliMSwgMHg4MGY2NjY2NywgMHhjOWIxODcyNywgMHg0NzNhZmViZCwgMHg2ZDU1NjMzYywgMHg5ZGEyM2IxOSwKKwkweDk5ZWMyNThjLCAweDUwMjgxNDIxLCAweDJjMjNkNWZlLCAweGJmZGY4MjUwLCAweGYwOTdjMzY1LCAweDQyMTliNmZmLAorCTB4ZDA5NzdjM2UsIDB4YzNlNjExZTksIDB4MDJkNWU0ZmIsIDB4OTMzYTg3NmIsIDB4ZWEwYzMxOWMsIDB4NGIxOWI5OGMsCisJMHgxMjZiMmM2NCwgMHg0YjIyM2ZhMywgMHhlMGZmODI4ZCwgMHg4ZjM5MjU3MywgMHgyN2ZjMzRiMSwgMHg2MTQ2NzU3NCwKKwkweGM2NzhjMGFlLCAweDVjNTMxZTMyLCAweDM4YTlkMGQ0LCAweDg0M2Y3ODE1LCAweGJjZDJjNjdmLCAweDA3MzFiNzI1LAorCTB4YmMwM2NmNjMsIDB4YmNmMDcxYzksIDB4NjFkZTNhNWEsIDB4YzIyZWVmZTUsIDB4M2FmM2ExZGYsIDB4YWU1OGNkNmEsCisJMHgzMjc3M2UzMCwgMHg0MTY1ODlhNywgMHhmM2UzM2ViZiwgMHgzZDYzNDZhYywgMHg0ZmUzZDk5YiwgMHhlYzNmYzM0NiwKKwkweDhjNTE3ZWNjLCAweGIxMTM4ZjMwLCAweGNiM2MwMThjLCAweDYzMmYwZTU0LCAweDU0NjdiMmJkLCAweDZhOWIxZjEwLAorCTB4MmMzMmEyNTgsIDB4ODUyZjBmNTgsIDB4NTYzMzg3NjUsIDB4ZWQ5NzVlMDMsIDB4ZjgxNjVjMTYsIDB4MmY2YzM5ZmUsCisJMHhiZWQ3ZTYzMSwgMHgxNWVhZDY2YiwgMHhhMzYyNTkzZSwgMHhiNTA0MDRhMSwgMHg2N2VmZjRlNCwgMHgxMWJmY2IxMSwKKwkweDJiMzBmZWYxLCAweGVhNGFiMmEwLCAweGFmODA1NTk1LCAweGZiNzY1YWFhLCAweDY3ZWRmZTk1LCAweDU0ZTg4OTMzLAorCTB4NWJmNmI5MjksIDB4NWFkZWZjNjEsIDB4ZjE4NjZhZTYsIDB4MDJkNTk5OTcsIDB4OTFmYjJmYWMsIDB4N2E4M2U1ZDMsCisJMHgyMTQ3NjM2NiwgMHgzNmQwZmE4MywgMHhjMTE5ODk4MSwgMHg5ZTAwYWZlZiwgMHgwMDdmOTFkYiwgMHhhNTJiMmExZSwKKwkweDc0MDY0MmRlLCAweGIwMmJkZGVjLCAweDg3MWMwY2U2LCAweDc3NmNiYmY3LCAweDBjNjVmMzA2LCAweDY2NThlNzBjLAorCTB4MzJlNzM4MjYsIDB4NzQ4OTNhNDEsIDB4ZDIwNzMwNzEsIDB4ZjMyNGJjYzEsIDB4Y2VhODQyODksIDB4YjBmM2RjNTQsCisJMHg5ZGUyOWY3ZiwgMHhlN2Y0ZWQ4NywgMHgzOGU2MGI0OSwgMHhmMjU3MDBiZCwgMHg1N2EwNjY1MCwgMHg5ZDNhYjViMSwKKwkweGVhNTYzMjY1LCAweGJlNDQyOTY5LCAweDhkZWNiNTM4LCAweDllMDI1ODU1LCAweGY3YzAyNDEzLCAweDA4YTc4YjdjLAorCTB4NTc5OGE5ZmIsIDB4YTc4MGNkOWQsIDB4OGQxODU5ZTYsIDB4ZmYyZGI0M2YsIDB4MGNmODA5MzMsIDB4YzRjNWYzYmEsCisJMHg3NjMxM2YyMSwgMHhmMDRmODQzYywgMHg1YTExZjFjZiwgMHhkZTk4MWM1ZCwgMHhiMDhiMmI5NywgMHgwNWYxMDkxZiwKKwkweDFmMDExNzcyLCAweDI2YTA0MjNmLCAweDU0NGQyOGUwLCAweDI5ZmM1NzNhLCAweGQwYTBkODZiLCAweGMzNTk1YmZhLAorCTB4ZTUwMDY5YzYsIDB4M2YwY2JjMTEsIDB4MDg0M2FjNjEsIDB4MWNiZDRiZTUsIDB4YjBmZjNiYmEsIDB4M2MzMDNiOTQsCisJMHgwNGYzZDNmZiwgMHhhYjdlMTI3NCwgMHgxZmM4YjcwMCwgMHhiZmQ5NzYxNSwgMHhjYTYxZjgxMiwgMHhmN2MwZTZhYiwKKwkweDM2MmEzZjgwLCAweGQ0MGI3ZTBiLCAweGU4ZGJhZjRkLCAweDVlMjZmNzdkLCAweDM3NjVkODBmLCAweDE2ZDc0ZmYyLAorCTB4YmRmMDBiYTgsIDB4MWJmMWZkYTUsIDB4MTU1ZWJmOTEsIDB4M2I3NjMzNTksIDB4ZmE4NGNhMjIsIDB4M2IwNmE0ZTUsCisJMHhjMDc1MGYxYiwgMHg1NzhkYjE0NywgMHhiYmVmMzYyYiwgMHg2OTJmYmYxZiwgMHhmNDFiMzBiMywgMHhmMTdiYjE1NywKKwkweDdkNDIzNzFkLCAweGMzMzM2MWYxLCAweDZiNWIxNTI2LCAweDJmYTgxNGU1LCAweDU4MmQwYmYxLCAweGYwZTAyOWVmLAorCTB4ZmU4OTc2ZjksIDB4YzdiZWQwYWQsIDB4MWIzODllZDEsIDB4YzZiYTczZTgsIDB4NjMzMjljY2EsIDB4YzRmNmY2NzUsCisJMHhhNTY3YzA1OSwgMHhmODg1MWRmZSwgMHhjMTc2ZTk1ZCwgMHhmMjlmNjg4NSwgMHhjOTQzZDZlYSwgMHhiOTE3YWYzOCwKKwkweDhiNmQ5NzdjLCAweDdmMWQ0ZTY2LCAweGFiNjRmN2YwLCAweGJjMWVmODE4LCAweDY0ZjMwNjVmLCAweGQ2NjJlZmQwLAorCTB4YjA3YTg4NTQsIDB4ZDkzYWViNjIsIDB4ZWJlMjBmNjksIDB4ZTM0YThkNzQsIDB4OGJkZmM5ZjQsIDB4NTc3YzBlMzAsCisJMHhjMmUwOGFmOSwgMHg5ODlhNTYyOSwgMHg3YmIwZTUxNywgMHhmM2NlNmRiNywgMHg1NmFmY2UwYSwgMHhiY2UzYjZjZSwKKwkweDZlZDhjYjU2LCAweDJlZmU3ZmIxLCAweGZlYTVjZDU0LCAweGJjMjE3MmNkLCAweDU5YjRkZDJmLCAweGRiOTEwZTJlLAorCTB4OGM4MzZkYjIsIDB4MWFjODZkNzAsIDB4ZDcyMDhkZWMsIDB4ZDc4MDc4NDEsIDB4NTJmNTgzYjIsIDB4MGZhODAzZDQsCisJMHgyMzNjYmYyNSwgMHg4NTJhY2Y4NCwgMHhiMmNiZTI1OCwgMHgxYTczMjI2ZCwgMHhkZGQzODhmOCwgMHgxM2ZjMmVmNywKKwkweDZiZGJlNWYwLCAweDc0ZWFiYzI3LCAweDFhYTdkM2ViLCAweDFhYThjZWRkLCAweGJjZGVhNTFkLCAweGY4ZjgxMTE5LAorCTB4YzAwM2E0NzEsIDB4ODI3ODg0ZDMsIDB4OWYwNmFkNzIsIDB4OTdjYjMyNjMsIDB4OWI4NzdmYTAsIDB4M2NiYjAyYTksCisJMHhkOTk5MzY1ZiwgMHhmNTYzMDY3YywgMHhkMmRkMDdiMCwgMHhkOTk3NTBmNSwgMHhmNTgyZTY1MiwgMHg3YmIxZmE1MCwKKwkweDA0OTNkNDJhLCAweDlmMzg2N2VmLCAweGMyNWJjMTdhLCAweDI0OTZhYmQ3LCAweDk1NzllMDBmLCAweGZjZTBlNmMwLAorCTB4MzBkMDIxOGYsIDB4YzBjOTU1YWYsIDB4YTZmNzgwOWYsIDB4OGJjZjc5NjksIDB4M2M3YjA2ODIsIDB4YjE3ZjhiZDYsCisJMHgzOWZhODMyNiwgMHhhMTk4ZmQ0MywgMHhmN2NiYWM5ZiwgMHgzMjRlMTZhMywgMHg5NjE2YTNmNCwgMHg4ZGZjZmRlOCwKKwkweDU5NWRiMWZhLCAweDM3ODU0ZDNmLCAweDJjMjllMTE4LCAweDA0OTFmYmQ1LCAweGJmNmY1NzY4LCAweDM3YTk3OWIyLAorCTB4NzNjMjM2NGYsIDB4MTNmNTM5NzMsIDB4YmNjNWQ1M2IsIDB4MWFlN2FlMGEsIDB4Yjc3NmIwM2YsIDB4ZWQ5NWVmMDgsCisJMHhiMGQ3NjNiMSwgMHg1MDI4YmU1MCwgMHgwZWRiODAwNSwgMHgxN2NhMTI1MiwgMHgwY2EyOTMzMSwgMHg4ZWViMTg3YywKKwkweDI3YTFkNDMzLCAweDQxNzVlNGY1LCAweDk1ODgxM2ZkLCAweDQ1Mzk3YzY5LCAweDlmOTBiZDI2LCAweDQzZmFhNTYyLAorCTB4ODVlOTBhMjksIDB4NWVmMDZlODcsIDB4OGUyMGViODMsIDB4MmVhMTkyY2QsIDB4MTFhYjQ3N2IsIDB4MTRlMDFhZjgsCisJMHg2MDk2MTI1OCwgMHg3ZmY1MjQxNywgMHhmMWNjZGFiZiwgMHgyMTdhOTA1MCwgMHg1ZjdjMThmYiwgMHg4ZWNkZWE2NSwKKwkweGE2MzVmYTg1LCAweDZmMTE2YmZjLCAweGU1ZWI4MTJlLCAweDYzNTU5MTI4LCAweDIzMGIyOGJiLCAweDIzM2FiNGZkLAorCTB4MDg1Zjc5ZWYsIDB4MDA4NzFhOWUsIDB4YmY2MDg1ZmQsIDB4MTI2ZjY2OGQsIDB4ZGFmOGQ3ZjIsIDB4YzAxMjdjNjcsCisJMHhjYzA4NmFiNywgMHgxMmJhMDUyNywgMHg2MGY4MDk5ZSwgMHhhNDNkNWEzZCwgMHg2OWYxMDkzOCwgMHg0M2JlNDE5MSwKKwkweGZjNjE5N2M3LCAweDA2ZmYxYTFjLCAweGM3MWJhM2M0LCAweGJlM2ZlODRmLCAweDYxOTI3MzI1LCAweDg5N2E2YjdjLAorCTB4MGNhYjdjNjEsIDB4NGZiZjAzZTMsIDB4YzZkNjZkYWQsIDB4YzBkZGZjMDcsIDB4OTlhMTM0ZDgsIDB4OTdhNGI3YzYsCisJMHg2NWFiZjhkMCwgMHgzZjE4NjI1NiwgMHg1YmZjNmZhYSwgMHg4MTllZmU3MCwgMHg4Mzc5OWZlNiwgMHhhNWU5ZmU3MSwKKwkweDdjY2JmOWM2LCAweDVmNmFiM2ZlLCAweGEyOGZjNmQyLCAweDVlMTZjZmY5LCAweDJmNGZmM2UyLCAweGYwYjdmM2U1LAorCTB4NzdjNmZiN2UsIDB4NWVmZmUxZjQsIDB4ODA3N2JmOWMsIDB4OTM1OTJkZjEsIDB4NWExZmYzOGQsIDB4ODViZjljNmUsCisJMHhiYjU0NWY4ZiwgMHhhMTVmMWI1MywgMHgzYjA5MTdmMSwgMHg5Njg3ZmNmOSwgMHhjNWIyZjhkMywgMHg5MjNlNDJlYiwKKwkweGZkYWFhMzUzLCAweDgxYTQ0ZjY4LCAweDFkMjYwYzQwLCAweDA0NzJhNmU1LCAweDFmYTAwNTE4LCAweDA0OTkwYTg2LAorCTB4OWM1MTQzYzcsIDB4MDE0NWNlZWYsIDB4N2Q0MTI5YmYsIDB4NTEyMGZjYzcsIDB4MzUyYWNmYTAsIDB4OWVkYjJmOWUsCisJMHhhNTllYTMyZiwgMHgzNzY4ODlmNywgMHg2ZDQ1M2ZmMSwgMHg2YzM3YWQyMiwgMHgxYzNmYzViZCwgMHgxMzZlZWRlMCwKKwkweDVhMmY1ODdkLCAweGE0NWY5MzdmLCAweGU1ZGI4ZWY1LCAweGYwMDVjNjYwLCAweDFjOWU1ZmY5LCAweGFmM2ExY2Q1LAorCTB4OTM1MTcyZjAsIDB4NDE4NzY0ZjksIDB4YmUzYzM4OGUsIDB4MWFhMjM2MDIsIDB4MjY0NzZiZTAsIDB4OWZhYzEwOTgsCisJMHhjNjBhM2QwNCwgMHg3YTBlM2IyZiwgMHg2NjUzY2IxNCwgMHgwMDljOGY2ZSwgMHg1MGU0Y2IzZCwgMHhmNmU1YTliOSwKKwkweDkzYmQ4Zjg4LCAweDViYmFmMzAzLCAweGM0YTRmZjgzLCAweGI5NzI3ZGYxLCAweDlmZmM0N2UwLCAweDQ2NTRiNzViLAorCTB4MDlhOGI0ZmQsIDB4NzkxMGU5OGMsIDB4ZDRlOGQyYWYsIDB4NmZlMmRiYmIsIDB4NGU5ZjA4MTYsIDB4MjQzZGNmYzQsCisJMHg5N2ZkOGM4YSwgMHhkZTJmZDc2NiwgMHhkZGYwYzgzMCwgMHg0ODZmZTYzYywgMHhkNzBiZjY4MiwgMHhjMmEyMWZjZSwKKwkweGM3MzA3ZmZjLCAweDUzZWQxNjMyLCAweDEzNTQ4NDkwLCAweDM1NGIzMWM5LCAweGE3MzE2ZjgxLCAweDE1Mzk5ZDc1LAorCTB4MzFjY2Y3MmEsIDB4YjlmYWVjMWIsIDB4MDdmZDYzNWUsIDB4Yjc3YWM2MjUsIDB4YTEzNjZmZDksIDB4NjA0NGIxYmQsCisJMHhmYmRmYTE5YiwgMHhmNWVmOGRhYSwgMHg3MTA5MzY3MSwgMHg3OGRhYWU5YywgMHg3ODcyMjc3NywgMHgyYzcyYzNlZiwKKwkweGFlODk1NjNlLCAweDViZmNhYmY3LCAweDg3YWE5ZTFkLCAweGViNDAyY2NkLCAweDQzMDI0NzY1LCAweGM4MTJmYTNhLAorCTB4N2NhYWYzNWUsIDB4ZGVmMGUxZGUsIDB4M2RiYWI2NmYsIDB4M2ZmZGNmMDAsIDB4ZTE5ZjA5MTIsIDB4MWViYzc3ZjAsCisJMHgxZDgxMzZlZCwgMHg0YmUxYjFkNywgMHhlMWI3ZGEzMywgMHhmZjg3MDlmMywgMHhmM2UxMTU4MSwgMHhmN2Q0NjU1MSwKKwkweGNmZTE3ZGYzLCAweGYzODQ5ZjM5LCAweGZlNWI1NTUzLCAweGVkMjExM2EwLCAweDNmYmU1YTJhLCAweDdmMDg0NGU4LAorCTB4NjE5YjZkOTUsIDB4Y2ZmMTJmYTgsIDB4YmM1ZmI0MzUsIDB4ZmRlMWJlNjEsIDB4ODYyNWE2YTIsIDB4OTcxYjBiZjcsCisJMHg3ZGYzZWExYSwgMHg3ZmI0MzIzZiwgMHhlMWFkNDU2MCwgMHg4ZmQ1N2RmZCwgMHhhMGZmZGUxOCwgMHgzZWExOWQ2NCwKKwkweGQwZDFiYmQ3LCAweDliMzk5ZWZlLCAweGFmNGRlZjBkLCAweGU1MTNiYzhmLCAweDkxNWRlZWE4LCAweDU2NzFiYWUxLAorCTB4ZGEzOGY5MzksIDB4YzkxNTY3ODMsIDB4YjRmOGY0ODUsIDB4ZTBlNDg5MjYsIDB4Y2E5MzhkNzQsIDB4NTY3MWI2ZWUsCisJMHhjNTgzZDcyZiwgMHg1ZTljNGMwYywgMHg3MWFmOWNlMSwgMHg0NjY1ZWEzMiwgMHhjMmFmZjNmYSwgMHhlYTBmOWYwNSwKKwkweDg0OWMxMzdmLCAweGNjODM3MTNmLCAweDAyYzJjMDAyLCAweGUzZTNlYjhiLCAweDdkZTQzMTVlLCAweDZmZGU2NWM3LAorCTB4ZDcxZjQxMDAsIDB4MTFkOGJkZmYsIDB4ZjM1NTc5ZjksIDB4MDQ2YWExZmMsIDB4YjcyODIxZmYsIDB4YjlkNzE1MmMsCisJMHgwZjdkNmQxZSwgMHgzMDJlNWY3ZiwgMHhjNjczZTg0ZiwgMHhkNzljOTI1NiwgMHhiOTRjZWI2OSwgMHhmOTQxZjVjYywKKwkweGY0MDJlNGNlLCAweDQwZTVjYmJmLCAweGM2YTVmNTc2LCAweGEyYTQwMTZiLCAweDNjZWI0NDllLCAweGE0MDFmOTAxLAorCTB4NTkyZmMwYzAsIDB4ZGNlZWY5MDYsIDB4OTU1YzEyMjcsIDB4YWY0MDEzYTgsIDB4YzE5ZTYzYWUsIDB4ODEzM2Q0MjYsCisJMHg4ZDc3ZTkwMywgMHg0OWRjMzg0MiwgMHhhMDRiNmY1NCwgMHg2NmIzYmQ3NSwgMHgxMjEzYTBmYSwgMHhlNTQzYzdkMiwKKwkweGE4NzMzNWE3LCAweGE1ZTM1OTNjLCAweDA5NGQ0NGYyLCAweGFhNmJjNzk1LCAweDU5YThlY2E5LCAweDM1YzdlNTQxLAorCTB4YWEzZjJhM2UsIDB4Y2ZmMmE0NjksIDB4MWU1NDRkMzUsIDB4ZTU0MGQ5YWQsIDB4MmE3ZTM1N2IsIDB4NTRkYzZiYmIsCisJMHhiYTJiZjlmNiwgMHhlY2Q3OGRmZSwgMHg4MGFmY2Q1NSwgMHg2N2VhODc5NSwgMHg0M2Q0YjliNCwgMHg3MzkyNzZkYiwKKwkweGY5Y2ExMjU3LCAweDM2NWNlNTE5LCAweDhlNjdlM2RhLCAweDMxOTk2MzgyLCAweGY5YzJiZTMwLCAweGJhM2E2MDZkLAorCTB4ZjYyOTVlYzksIDB4ZjVjN2ZkMDMsIDB4ZTI4YjZmN2YsIDB4ZDg5OWIyNzQsIDB4ZDlhNjcwNzQsIDB4ZTE3ZmMzMjMsCisJMHg3NTQzOTA1YSwgMHgxNjA2NTkwOSwgMHg3YjBjZDcyNCwgMHhlZDYxN2U4NCwgMHg4ZTVkN2E0MywgMHg5YmRkY2M0ZSwKKwkweDcxZTgxMzNiLCAweGU1YmY5OWYyLCAweGRhNzViZjYxLCAweDQwNzUxN2ZhLCAweDA1OTg3NWE0LCAweGJkMjE3NzllLAorCTB4ZWI0NmYwNDIsIDB4OWFhYmVmNWEsIDB4ZmUwY2JmYmUsIDB4ZDdmMGZhYmEsIDB4ZmJmZThlOWUsIDB4ZmVhNTQxNDEsCisJMHg5ODVhYjRjZiwgMHgxM2RjNzg4NCwgMHg2N2U2MDdlZCwgMHhlZjNmMGU2NywgMHg5NjVjNzk0MCwgMHg0NDRmNTI2NCwKKwkweDU2NWU4M2MwLCAweDRhYTg2NGI0LCAweDY2ZDNmYWU4LCAweDEyNjk5ZmFjLCAweDdhZDBiN2E2LCAweDM1OTk4Y2VjLAorCTB4NTU0YWY5MGEsIDB4ZmE0MzBjNGYsIDB4ZjdhOTUxMjcsIDB4NTY0OTJjYjMsIDB4OWViYzgwNGYsIDB4YzMxNTk2ZGUsCisJMHg1ZjNmNmZkNywgMHgxMmM3YjcwNywgMHg0ODVmODJiZiwgMHhmMGRlZmZlZCwgMHgwZThmZDQwYywgMHhlY2FkNjMwZiwKKwkweDAzZWEyYjEzLCAweGVkZjU5Nzc4LCAweGZkMjY3MmZkLCAweDZjNTdlMjk1LCAweGRhMWNmOThmLCAweDdiZjgxNjBiLAorCTB4MTIwN2UyOTEsIDB4YWI3ZWY1ZDUsIDB4NjU5ZjQ0NWEsIDB4NmVkZjNlMzQsIDB4NzNiZTBmMTgsIDB4YzVmNzNlZWEsCisJMHhhZGYxNGJjYywgMHhjNDg2NGVjNCwgMHhmMTY5ZDYxMSwgMHgzNjZkYjJjNiwgMHhjNGFlYjhkNSwgMHg2ZDU1ZWExYSwKKwkweDlkNjFhYWM5LCAweGZjODA3ZmMxLCAweDQyNDE2YWIzLCAweGI4ZDcyOWJlLCAweDFhNTI0N2E4LCAweGRjYWY4MDA1LAorCTB4YWI3ZWE0ZTQsIDB4YzJhZWRlMDQsIDB4ZTE3YjIxZGEsIDB4YTcyYjU3NTEsIDB4OWRmMDQwZGIsIDB4OTRlYzM5YWUsCisJMHhhYzRiZGU0MCwgMHg3YzAyMDFlMCwgMHhhNzIzMmQyNSwgMHg2YWViOWVhMiwgMHg3YjQ0NGJhZCwgMHhmMzNjNGNiMCwKKwkweGY3YzIyNzkwLCAweDhkMDI0ZDNiLCAweGVlNmZjNGI3LCAweDFhYTNhZTM1LCAweDU3ZTgzMDdmLCAweDE2N2U0ZTdmLAorCTB4ZDQ4NjRlNTMsIDB4Y2VkYzRkM2IsIDB4ODBmN2VmMGUsIDB4ZjBlNWVmZDYsIDB4NDhmZGI5NTMsIDB4ZmVjZThkZTEsCisJMHhmYjZjYWE3OCwgMHgxYzkyZjY0MiwgMHg4MmYyZmZjMSwgMHg1N2YxZDI3OCwgMHg0MDFjZjI2ZSwgMHhlZGJhNWE3ZCwKKwkweDlmYTNkOTE4LCAweDBmZDk3ZDlhLCAweGY1M2Y0MjVmLCAweDQ0OTI5ZjlmLCAweDVlN2Q1MjcxLCAweDYxMjkzMDNlLAorCTB4N2M1YTA1OWMsIDB4OWVmN2Y4MTcsIDB4ZmQzZDYxMGYsIDB4NmNjZGRmZWMsIDB4MmVjN2MwMGQsIDB4NmY3ODJiNDAsCisJMHgxMzMzNWZkNiwgMHhhMTdkNDEzMywgMHg1YWQwNWI1NiwgMHhjZmRkNzE0NiwgMHgyYThlZGM0YywgMHhkMTA3MWU2MiwKKwkweGExZTUzNTgxLCAweDRjYzVkOTFkLCAweDVkNGYxMWQzLCAweGI4Yzc2ZGVjLCAweDMyOWMzYTEwLCAweDE2NjdhNGM5LAorCTB4MThlZDFhMzYsIDB4ZjUwZDdmYjAsIDB4ZjU4YzFiYzUsIDB4MTEzMzM2NjIsIDB4N2FmMTQ5ZjUsIDB4MzQwYmYzMzMsCisJMHhmN2ZiYzMzZiwgMHg3ZmUxMmE0ZCwgMHg4NTVlYWIzMSwgMHhmOWE0YWFlYiwgMHgyNjU0MGIyMywgMHgxNTdjMDJhNSwKKwkweDZmMzY3OWJmLCAweDRjNWZjNjNlLCAweGUzZDEwZmRjLCAweDM4ZTI0YjIzLCAweDdlZjFhNWZjLCAweDNmZWYwZGQ5LAorCTB4Zjc3NzFkNjksIDB4OGIwNjQ4OGQsIDB4ODljNjE1N2YsIDB4NmQ3MzBjNTgsIDB4ZmJmMWZkNjUsIDB4ODcwZmUxNmQsCisJMHhmYmFmNWY1NywgMHgzODM0NjljNSwgMHhkYjgyNmRjNCwgMHgyZjdmODExZiwgMHhlYmE2N2M2OCwgMHhkNTQ0NWJlYiwKKwkweDhkZGMxN2UwLCAweDIxYmYxMGY1LCAweGIyZTJkNDQ2LCAweGVlOTExMzIyLCAweDY3ZDVhYTVkLCAweDE0ZjdhMThhLAorCTB4YjRlZGY3YjcsIDB4ZGU4MGVhYjgsIDB4MDY3OTM3M2YsIDB4NGVjODEzODksIDB4ZWQyMTY1YzgsIDB4ZDJmMjZlN2UsCisJMHhhZGUxNGVmMywgMHg5OTViYjQ2MiwgMHgzYjQ1YzgxNCwgMHhlMjE4ZDYxNCwgMHgwN2UzNTk1MywgMHg4YjkxY2EzMSwKKwkweDgzM2I2NmYxLCAweDZmZTgxNDc1LCAweDlmYTBmODQxLCAweGRiOTJmNjU1LCAweGJiYzYyZTU4LCAweGJmYTFkZTQxLAorCTB4ODc4NTFjYzcsIDB4OTRkYmE4MDUsIDB4NTlmZDg2NTYsIDB4N2NmMThjOTIsIDB4YWY1OGQzOWIsIDB4MWQyMDdmYzIsCisJMHgzZjhhMzA0NiwgMHhjMjkwOGY0NSwgMHhhODYwMThmMCwgMHhlMzJlZWQwZiwgMHg4NGU4NTFmMywgMHgyMDFmZGQ5MSwKKwkweDhiMTA3NjNlLCAweDAyNTU2OTQzLCAweDI2Y2Y4YzIyLCAweGZlN2Q5ZDQ5LCAweDdiZmEyNjU2LCAweDJmOGE3ZTFjLAorCTB4MmFlNWZiNDAsIDB4YzVhOTVmNmYsIDB4NTA3Zjk3Y2YsIDB4MTJlZTM4MzAsIDB4M2NlYWE4ZmEsIDB4MjE0MTkwNjgsCisJMHg3ZmJlM2Q3NSwgMHg3MWZlNjI1ZSwgMHgzYTZmNDFkZiwgMHhkMTBkNTU2MSwgMHhkZTRkNzM5YiwgMHhkNDBmNDg2OSwKKwkweDAwOWYwODkzLCAweDc2MGQ3OGUzLCAweDJhMWE5YTYwLCAweGY4YzIwYmU3LCAweDg4ZTFhYWUzLCAweDVkZmQwNjY3LAorCTB4MmRkZWYyNmUsIDB4ZTM4N2Y0MjYsIDB4ZWE0ZmZiYWEsIDB4NDg4MmZmZDcsIDB4ZmVlYWJjZjMsIDB4YmZlYmY1ODcsCisJMHgxNWZmNTIzMiwgMHg5Nzc5NzliZiwgMHhmNGE5ZjgwZiwgMHg4MDNhNGY1NywgMHg1MjY3ZDk5OSwgMHhlODBiYTI1MywKKwkweGMxYjViZTVlLCAweGE5Zjk3MjgxLCAweDVkMjA3M2U0LCAweGQzOGJmMzNmLCAweDE2ZTdjOTIzLCAweGI3NGY5NzUxLAorCTB4ZmYxMWU0MjIsIDB4N2U5ZDFmMTAsIDB4ZDAzYmQxZTksIDB4ZDViNzNhYWUsIDB4NjA3YzUyYWMsIDB4MDE2MDI1OWIsCisJMHg1ZDZjYWNhNiwgMHg5YjYzZTVjMiwgMHhhZmFmMThlNSwgMHhiM2Y5MDJmZSwgMHgyZmE4Y2RhYSwgMHgzMjc4NWY0YSwKKwkweDQwY2RlMzExLCAweDBlN2ZjZDQ5LCAweGI5NTA3ZjkwLCAweDY4ODUyZmU1LCAweDVlYjE1NTc3LCAweGRmZTE3YmQyLAorCTB4ZTNlN2Y4ZTEsIDB4MmY5ODFlYzgsIDB4YWY3ZmY0YzcsIDB4Njk1NWYzZWYsIDB4N2Q2YWE5NzgsIDB4ODQ5MTBiZjQsCisJMHhjZGZjODNhNSwgMHg5YTI1ZjZmMCwgMHg2OGE0ZmZiZCwgMHhkZjM4YTc4ZiwgMHhmOTExMzY0NCwgMHhmMzA3Yzc0YywKKwkweGVlYmY3YjczLCAweDhmNzNhN2M1LCAweDViOWQzYzAxLCAweGU0MjFkZGZlLCAweGQ3MjdmMjg0LCAweDE2NWE2NzdiLAorCTB4ZTczNWZjZmUsIDB4MGRkNGYyYzAsIDB4YWVkNDMxN2EsIDB4Njc2N2Q3ZDYsIDB4ZWNhN2U2OWIsIDB4MzliOTY1ZTEsCisJMHhiMDNmNDBlMCwgMHhlNWQ5YjM3YywgMHhmY2JlYmE0MywgMHhjMTllMmZmYywgMHgxNjA3Y2NiOCwgMHhiZmU4NzBkNywKKwkweGVmODNlNWVjLCAweGIyZjUwMGRkLCAweGRiZjhlNjFkLCAweDIxMTQzNGY4LCAweDJhOTc0ODMxLCAweDZjNjJiYmY4LAorCTB4YmZhNTBlOTAsIDB4NDczYjI4M2UsIDB4OGUzZmU3ZjEsIDB4NmNhM2QyMGIsIDB4OGQ5OTNlYzcsIDB4Mjk4ZjhmZWEsCisJMHgwZWU0ZmIyZCwgMHg1YTVkMDIyNSwgMHgzZmEyMTU4ZSwgMHg1N2UyZjc1MSwgMHhjZmFmZWEzMiwgMHhlMGQ4MTc1ZSwKKwkweGRjZjgwODhjLCAweDYyZWM5MDdjLCAweDUxZDExM2M0LCAweGRkMWY1M2EzLCAweDAxNTdkYWMyLCAweGVhYmY1MDVkLAorCTB4ZmY3ZjBhNzQsIDB4YzdmZTlhMmYsIDB4YzQzOTljZmUsIDB4ODZiY2FmY2YsIDB4YjY3ZjI4ZmIsIDB4MjVmZTcwYjgsCisJMHhjMGU4M2NhZiwgMHhhYTkyOWM3OSwgMHhkYjNmNWYzOSwgMHg3MTg2ZTg5MCwgMHg0NGJlY2M0YiwgMHhiY2ZlNGE5NSwKKwkweDEyMWZiOWU0LCAweGYyM2UyZGJmLCAweDdmOGE0NGMzLCAweDg5YjI3NzMwLCAweDMyNWYwNTZjLCAweGE2ZDE2ZmNlLAorCTB4NjJiZjM0ZDksIDB4MmJiZTI1ZTYsIDB4ZTBmNDU2NzksIDB4ODk1OWUwZmUsIDB4NDExMWRmNGQsIDB4YWUyNDUyMmUsCisJMHg1YjM1NGY4ZiwgMHhhNzY1NGQ3MCwgMHg3ZGMwZTE3MCwgMHhmZjQ1Yjc4NSwgMHgyZGZmOGE1NiwgMHgwZmNhZjhhNSwKKwkweGI2MjBmZGY1LCAweGFkNjdlYThjLCAweDg4NWY0ZTljLCAweGFjMWFiZWZhLCAweGJhZmNhMTNjLCAweGQyM2I3NTY1LAorCTB4ZjcxMGY0ZTcsIDB4NTcxYjhjNjAsIDB4ZTFhN2M5MzEsIDB4ZmQwOGI4NDMsIDB4MGRhNjQ3OGEsIDB4NGU2MWY0ZTYsCisJMHgwZWZiNGYyOSwgMHg3YzE0ZmRmNCwgMHhjZGRiZWQ4ZSwgMHhlMWFlNWI2ZSwgMHgyMzMxNzYzYiwgMHg2ZDcyZmUzOCwKKwkweDBhM2I4MDdjLCAweDg5NTNkNWVkLCAweDk4NDVmZjYwLCAweGFmYTRhMTVmLCAweDg1NTc2MDM3LCAweDdjODg1N2YwLAorCTB4ZjJkZjc5NzMsIDB4NWQ2Zjk3MDgsIDB4YTYzM2ZkZGUsIDB4YmViZmZiZTMsIDB4YmYwN2U1YzMsIDB4ZTAwNTdiNDMsCisJMHhmN2E2MGMwYSwgMHhhNDA5NjZmYiwgMHgxMDJjMmMwZiwgMHg5OGI3YWU0OSwgMHhiZTM2YjkzNSwgMHhlMDA0ZjlkNywKKwkweGVkZGQ3MDk2LCAweDNmZWMxN2UzLCAweDc2NGZmMDhlLCAweGY4N2FmMTZjLCAweDU2NWY0NDJlLCAweGZlOGU3OGUxLAorCTB4YmI3MmU5ZmQsIDB4MDRmZjkzNTgsIDB4NmNmZjI4YzksIDB4ODFmYjk3MTMsIDB4OGYxZjA5ZmQsIDB4YmZmZDk4NGIsCisJMHgxNWU1MDY3OCwgMHhhZmY3MTNlNCwgMHg3YjM2NWZjYiwgMHg2ZjlmZGU3MCwgMHhiZGRlZjAzZiwgMHhiNzlmYTcyMCwKKwkweGQ0NmE3MmU4LCAweDVhNzJlMTlmLCAweDhiMDI3M2IyLCAweDYzOWZhNzI0LCAweDM5MjQ0MjFhLCAweGU1MTFlNzg1LAorCTB4M2UyMGU5NTQsIDB4NGZlOTQ3ZmUsIDB4ODUzNzdmMWQsIDB4ODdkNzRmZTEsIDB4NWMzMWUxMDMsIDB4NzQ1OWZlMWYsCisJMHhmMDg3ZDQ0NiwgMHhkNzk2MWRlNywgMHhiZTc0ZmY5ZiwgMHhmNGFkZjlkMywgMHgyOTQzMTU5NywgMHhhNWYzYTYzZSwKKwkweDdjN2Q3N2NlLCAweGJmNWRmM2E5LCAweDdmMDFhMzc4LCAweDE4MmRlZmUxLCAweDNjYjgwMTgzLCAweDQ3MTRjZGJiLAorCTB4ZjdjM2RmMjgsIDB4NDNiYmUxN2YsIDB4NGYwOWUzYTksIDB4NThjNjVhNmUsIDB4ZjhkNGExZDMsIDB4YWMzZmJhZDAsCisJMHhkZWQ2MTJkZSwgMHg4NGY3NTYxZCwgMHhkNTg2ZjdiNSwgMHhjYmVkMGRhYiwgMHgzY2M4MGVkYiwgMHg2ODYwMjVhZiwKKwkweDg2NzhhZTI3LCAweDEyMjgzMjdkLCAweDVmYjlmYWJmLCAweGVjODVmYWRhLCAweDdhNTBiZTQzLCAweDRhZjM3YmU5LAorCTB4M2M2M2IzZTYsIDB4ZjE0OGFmN2MsIDB4ZjFjMDFlOTEsIDB4NjdhNzE4MmEsIDB4ZjMxZjg2N2IsIDB4M2M2YzFhMjQsCisJMHhmNmEzZDRlZSwgMHg2YzVlZDAzYSwgMHhkZWY1ZTU4OCwgMHhlYTE1NzkwNCwgMHhhZjc5ZmQzZCwgMHg3YWY1Yzc4ZCwKKwkweGQ4OGViZDNjLCAweGQ4ZWRmYjEwLCAweDc2ZjQ5MTFlLCAweDhmNGQ5Zjg3LCAweDhhYzI2N2U0LCAweGMxZDQ3MjQyLAorCTB4ZTNjZjdhMDYsIDB4MjU0NGQzZmQsIDB4NWZjNjA1N2QsIDB4ODYxNzQ0OWEsIDB4ZWY2YThhNzQsIDB4NDE5ZTYwNzEsCisJMHgzYmFjOWVjZiwgMHg0NWYzYzBlNywgMHg4ZGI0OGE2ZiwgMHg3Yjc2ODNkOCwgMHgyZGM3OTIwYywgMHg3N2Y4ODcyNSwKKwkweDUzZGYzMjlmLCAweGJmN2UzMTkzLCAweDQ1NzlmYjg3LCAweDExZWNjMzZiLCAweGE5Zjg5NmI2LCAweGEzMmU1OTU4LAorCTB4ZWNiZjA1M2UsIDB4ODJmZjcxYjgsIDB4ZDZhOTQ1Y2IsIDB4ZTMyNmM5NWYsIDB4ZGM3YmZkN2IsIDB4YmRmYjQ1YzEsCisJMHhiZGYxOGI3NCwgMHgzNDA3OGI1NywgMHg4NjMyNzJlYiwgMHg3MWZjZDE4ZCwgMHhmNGQyOGYxZSwgMHhlNzMxMzRmMiwKKwkweDhmNDAzOWNlLCAweGMzMjJjMzllLCAweDdiMzNmYmZkLCAweDk5YzdhMjQ0LCAweDllYmY3Y2VkLCAweDIzZDdmNmUyLAorCTB4M2U5MmY3N2YsIDB4ODlkNGYxZDQsIDB4YWMwZjI0ZjIsIDB4ZmQ1ZjNhYWYsIDB4OTE4N2JjYWYsIDB4OTg3ZDc2NmYsCisJMHgzYjI4MzNmYiwgMHhmZDkwN2Q3NywgMHhlNmZmYWM1YiwgMHg1OTBmZjRmZCwgMHg1ZTUzZjZmZiwgMHg0OTNlZDFiNywKKwkweGUyNzZlYmNmLCAweDdmYmQ5ZWY3LCAweGViMTg3ZjRjLCAweDlmMTQyZGJiLCAweGFiZmQ3OWVlLCAweDllOWZlNDVjLAorCTB4ZDQxMjk2OTUsIDB4ODA0MzNkNzcsIDB4ZWMxZjY4ZmUsIDB4ODNiNzJhZmQsIDB4YTI3YWQ3ZDYsIDB4OTkyNTFmZGIsCisJMHhmZTdiNDdkYiwgMHg4ZjEwYjFmNiwgMHhlZDBhY2MyNSwgMHg0OWEzZDc4NiwgMHhiMzVlYWE5ZSwgMHg2N2FkM2M1MSwKKwkweGExNzk1N2VmLCAweDlkNzdmZjc2LCAweDdmYjZhNTRmLCAweDczNjc2M2Q5LCAweGIxN2MyMjc2LCAweGVhYTdkZjdjLAorCTB4NWYzZmQ3YjcsIDB4YWQxN2Y5OGIsIDB4ZjA4NWU0ZmIsIDB4YmVlZmNhN2UsIDB4ZGEzZDQ1YzksIDB4NDNkYjkzYjMsCisJMHhlNzhlZTZkZCwgMHg2OGVlN2Y3MCwgMHg2Njk1ZGNmZCwgMHgwYTM3NzNjMCwgMHg5YmFjMGE1NSwgMHhhMDE0Y2YwZCwKKwkweGNiYzdmNGRjLCAweGJjMjcxNDM3LCAweGZjZjQ3YzUyLCAweGMxMGY4MzVmLCAweGRkOWRmNWNkLCAweGRlNzAxNTZmLAorCTB4MjFmYzdmNWYsIDB4MmRkNzg1ZWEsIDB4N2NmYTk3YzQsIDB4MjVhOTZmM2YsIDB4ZjM3MmU1N2IsIDB4OWM3OTk4NzYsCisJMHg3OTlkZmZlNCwgMHg5OTJiODEwYiwgMHgzZmYzMjhmNywgMHgyZDdmYmQzNywgMHhlMTJlODkzOSwgMHhjZjlmZDA3MiwKKwkweGY1NDQzZWY3LCAweDgyMmVlZDk3LCAweGZkZjkwYWY3LCAweGY5ZjI3ZmY2LCAweGVmYmE2YjdmLCAweDJlM2JiYTA0LAorCTB4N2ZmMmVmM2YsIDB4NGMwZjc5ZjIsIDB4ZDdlZjM3ZjcsIDB4N2U2MmFlZTgsIDB4YmVlZmQ1NGIsIDB4YWRiZWY4MjEsCisJMHg0ZmZiNWI5ZSwgMHhjZDAzZWYyZSwgMHhkN2ViYjc1ZiwgMHg5OTRkNWM5OCwgMHhhZjQzOWYxOCwgMHhjNTY5ZDYwMSwKKwkweGMzMTFiMzNlLCAweGNjNDY2Yjg1LCAweDE0Y2VkMTU0LCAweGY1MmJmNmMzLCAweGZiOTlhZjcyLCAweDViZWUyMjRkLAorCTB4MDg2ZjljNjIsIDB4Y2QzMWYzOGYsIDB4M2QyZGEyOGYsIDB4OGE1MjVhMTgsIDB4OTQ5NThlYzksIDB4OTZiZWRjNTUsCisJMHhjMDZlZWQ1YywgMHgxNzZiOWFjYiwgMHg4ODc3MjhiOCwgMHhjNWVhM2Q4ZCwgMHgxNzY0ZGE3YSwgMHhmY2MzYWZjNSwKKwkweGI5ODE3YWM5LCAweGE1NmZiMDA1LCAweDhjMzk2ZjZiLCAweDg0Nzk4ZGZlLCAweGE1Yzk2MDI5LCAweGFiOTYxOGYyLAorCTB4NTlhNGI4YjUsIDB4OGY3ZTBkOTUsIDB4ZGJhYzYzOTIsIDB4NDViYWM2OWMsIDB4MzhjYWNmZWIsIDB4ZTYyNGQ2ZmMsCisJMHgzOGI0ZjhjNywgMHg3OThhYmY3MiwgMHg4OTE4ZTI2ZCwgMHhiMWI3NTAwOSwgMHgxN2ZhMWYyNiwgMHhmN2UzMjQ5NiwKKwkweDFlYzAzMTFiLCAweDVhYmRjZjEyLCAweGUxZjZmNjNjLCAweDFiYmI2YzcxLCAweDQ0ZDIzOGYxLCAweDJlNGE2YjcxLAorCTB4ZmNiOGJjMjUsIDB4OGQ5ZTc4NmIsIDB4NTVkNzg4ZDUsIDB4MDk0Zjg4ZWQsIDB4N2Y2ZTVmZmQsIDB4MzRjY2RmOTEsCisJMHhiYWQyNTk3ZiwgMHhkYzk4NDY5MCwgMHhjZDNiNjMzNiwgMHg5ZDJjYmU0ZiwgMHhjYmQyNWQzOCwgMHgzMzJkM2EzNSwKKwkweDQzYTc0NWQwLCAweGU4MThmYTA0LCAweGRiZjllM2EyLCAweDJlOWMyN2QyLCAweDZmZGZmOGUxLCAweDA3ZmUxMjc2LAorCTB4OTc0ZTk3YTIsIDB4NTBjZGM1MzQsIDB4YmY5YWNkNWUsIDB4NDlmZDE1MzAsIDB4MTg3OWE3YWMsIDB4ZmU2YjMzZWQsCisJMHg2NmVmMTQ4MiwgMHhlYTkzYTQzZSwgMHhmNDJmNDg2MiwgMHhiN2UwMDJkYiwgMHhmM2ZiN2VmZCwgMHg3YWVhMjcxNCwKKwkweDA4MWRkOGU5LCAweDQ1NmZkOTRmLCAweDc1ZmMwNTY2LCAweDAwYjNiNzZmLCAweDY1ZjkyZjdlLCAweDViNGI0M2Y0LAorCTB4MzNmYjhhNDUsIDB4NTc3NzkwMjksIDB4NmVhZmJlYzgsIDB4Y2FmZDk3ZjcsIDB4ZGQyOWYzNGUsIDB4MDZkZmYxNjksCisJMHhmYWVlOTdkZiwgMHhiMGVjOTcyNCwgMHhkN2U0YmQ5NSwgMHgzODEyNWVmOCwgMHhiOTFkN2RkZCwgMHgyYTViYWZiOCwKKwkweDljMjNmZjcxLCAweDllNjU2MjVmLCAweDNiYjlkMDI3LCAweDZkYzYwZTdhLCAweGRmM2M2ZDg0LCAweDFlZTViNGI2LAorCTB4N2Y5MGM1YjMsIDB4OTFkYmQ2NjYsIDB4MjhiZGYwNWUsIDB4YzIxM2JlNTAsIDB4YTllNzlhMTcsIDB4MmY5ZDFkZmIsCisJMHgzNmJlMWMwYSwgMHg3NmYzMWZiMywgMHhlOGVkYjc0YiwgMHhlOTUzZjhjNiwgMHhjMzBiOGI1MSwgMHhiZWRiNTVkMiwKKwkweDI5OGRmZGEwLCAweGQxZDk3YWJmLCAweDY4YjZmZTQxLCAweGYzZjQzZjg4LCAweGM0ODliN2ZiLCAweDE1YWQ5NTFmLAorCTB4OWQ0MDg3ZTQsIDB4MjViMmEyZjgsIDB4NzJlYmZjNzIsIDB4YWZkOTY5ZmUsIDB4MDFmMmVlZjYsIDB4ZmQ3ZWNiMGEsCisJMHg1YmUzMDM4MiwgMHgzYWI3ZGJhNywgMHg3NmRmZmZjOCwgMHgzZjViYjhlOSwgMHg5MWU1YmYzZiwgMHhhN2Y5ZmE0YiwKKwkweGJmZTAxZmYxLCAweGM1ODcyMGRjLCAweDIyMGRiNjQ5LCAweGNiZTAwNDdmLCAweGFkZWY5NDhiLCAweGNiZDk1YmYzLAorCTB4MzhjMzlmNjcsIDB4Y2ZjZWU3NzQsIDB4Y2I3ODQzOWYsIDB4ZTdjYmZiZmYsIDB4YWY2MDlmZDAsIDB4ODhhZGQ0ZGIsCisJMHhhNWRlOTc5NywgMHhkZGZlOWUzOCwgMHg5ZGM3OTkyYywgMHg4MTdjNWZiYiwgMHgxZmRkOWZlMiwgMHg3ZjAxZGY4MCwKKwkweDRhOWVmN2JhLCAweDdiYjI3ZjQ3LCAweDE4ODlkN2M3LCAweDc3YmU1OTJmLCAweGVmOWM2MGRhLCAweDBjYTc1N2YyLAorCTB4ODhmNDExNjYsIDB4ZmFkZjIyNWUsIDB4MWFmZTIwYWYsIDB4YWQwM2FmNGUsIDB4ZTllZmM4MDcsIDB4ZGZhMzdhMDIsCisJMHg2OWI3MTdkOSwgMHgzMDcxZTBhOSwgMHhkOWFmMTZhNywgMHhkZGNlMzkxZSwgMHg3YWQzM2UyZiwgMHg4ZDM3OWRkNywKKwkweDcyZWNkMmM3LCAweGQzODgyYmIyLCAweDFjNzQwM2JjLCAweGRiZjQwNTdkLCAweDdmZTY4OGZlLCAweDE3NWZhNjQ2LAorCTB4YjRlODAzZmUsIDB4Njc3ZThjMmMsIDB4ZmNmZDE3NWIsIDB4M2FkNzdjMTksIDB4NGQzOGMwNjgsIDB4YTZmMDBhZTAsCisJMHgyN2JmZDFjNywgMHhhMzIyN2ZiYiwgMHgyNWZjZWQ3YywgMHg2ZTkwYzVjNSwgMHhiYjQ0YzFiNywgMHg4ZTliM2U1ZiwKKwkweDlhOWYwZmZiLCAweGU3ZTdlZjdiLCAweGM2MmEyYzMyLCAweGJlZjc0YTFiLCAweGZkZDNmMjRmLCAweDUzOGExMWVhLAorCTB4ZGQ5ZTJkMzMsIDB4ZjBmZWZhY2QsIDB4NTM5NmEzZjgsIDB4Y2VjNWI1NTksIDB4ZmUxYTNiZTMsIDB4NzRlM2ZlMzEsCisJMHhjZTJkNzNkMCwgMHg4ZjU4ZjljMywgMHhmNzE0MGNmZiwgMHhkZTc5OTU2OSwgMHhhZmRmMWU4OCwgMHgxNmExZjJkOCwKKwkweDRiZDIwOTRmLCAweDNhNzQ4NDk4LCAweDA4ZmRjOTc2LCAweGUyMmEwZjFkLCAweDFjNjg2MjYxLCAweGFkN2M3MjMzLAorCTB4ZDFhZGRlMmYsIDB4ZjE4N2U5MGIsIDB4MjUzOGJlY2IsIDB4NmUzMGQzZDQsIDB4NjdkZTE3ZTUsIDB4Zjc0MWY0MTEsCisJMHhlY2ZmMWU2NiwgMHhhM2NlNDczNiwgMHhiZjlhZTNkMiwgMHhmZjUzOTcwYSwgMHgyZjMzYzU5NSwgMHhjNWI3ZmYwNywKKwkweDUyNzY1ZjhmLCAweGVhNzhlMWJmLCAweDhmNTkxMGJjLCAweDc1ZjMyZGJmLCAweGM1ZjdhYWZmLCAweGJlNDMwNWNhLAorCTB4N2JjOWI5NDEsIDB4YTJiMWY5MDQsIDB4Y2ZjYzk4ZjUsIDB4NTJmM2YwYTUsIDB4YjUzYjdjZmEsIDB4OTdjZWQxYmMsCisJMHhhZDc3OGE0NCwgMHg3YTQwMzk2YSwgMHhlODVmNWMzYywgMHhmMGUxYTZmYiwgMHhhZGUwZDA5ZSwgMHg0NGViZTM2YywKKwkweDVmYmI0ZWU3LCAweGY3M2E3ZTgxLCAweGFlN2UyNmVmLCAweGUyOGM3ZWRjLCAweGZkYjY4NzZkLCAweDU5MDhlZTVhLAorCTB4ZjA5ZDcxNTcsIDB4ZjlkZmMwODcsIDB4MWU1Y2JlY2EsIDB4ZWM3OWU1YjcsIDB4ZDE5Y2UzZTEsIDB4OWVkNTYxZjQsCisJMHg2ZDU0ZTNjOCwgMHg0ZTMwYzJmZiwgMHhlNjQ1YWY5OSwgMHhjN2E1ZmRlYiwgMHhlZmI5MmQzYiwgMHhiNzRlZmVjMSwKKwkweDc5ZTYxOTliLCAweGE3MTE2ZTllLCAweGY1MTczYTQ3LCAweGVhNmViNmFlLCAweGJkNzA3ZWU3LCAweDIzZmQ3Y2E0LAorCTB4ZjhjYzVjZmMsIDB4MWYyOGEzYjcsIDB4ZTk5MWY5N2UsIDB4NjNjNGM2MWYsIDB4ZmU4Nzg0MDksIDB4OWYzOTZiNWEsCisJMHg5ZGM0ZmViNiwgMHgzZDZlZjQ4YSwgMHhlYjg4YWY3MiwgMHg2ZmM0MmVkNCwgMHhmNzlmOWQ4OCwgMHgzYjE0ZjU0ZSwKKwkweDhmYmM4NWU4LCAweDVkOTFlMzNjLCAweGM0Y2RmNWMzLCAweGZjMDMyNmEzLCAweDVjNjBjZTMwLCAweDFmYTFlYTA3LAorCTB4Zjk4MmE3M2MsIDB4ZTg4ZjA4NmUsIDB4ZjA4ZTljMjgsIDB4YjU0OWFhODgsIDB4NjFlN2ZkMDksIDB4NWU3NDNjNTYsCisJMHhhY2Q3ZWY0MCwgMHhiMDAzY2YxYSwgMHhkODljZTMwYiwgMHgxZTRjZDI0ZiwgMHg4YmJlNGM0NywgMHgzY2ZkM2U5NywKKwkweGJmOTQ3MTRlLCAweGEwNTllNjBlLCAweGYwMmNkMzc4LCAweDdkN2Q5MjdkLCAweGU3ODY0MWM2LCAweGRlNTEyNmJmLAorCTB4NzhjNTk2NzYsIDB4NTU0YmFjNmUsIDB4ZGZkMDI2N2MsIDB4NTk2Y2U0Y2YsIDB4Zjk0OWQ5MzcsIDB4NDI1OGQ3MDcsCisJMHgyMDU4MGZmMywgMHg2ZjUxZjkxNywgMHg1ODdkZWZkNywgMHg3ZTFhNDI3ZSwgMHgxYTg4ZmQwMiwgMHg3ZTVhNTk3YywKKwkweDIxZDYxMGMyLCAweGM5YmQ3ZGEwLCAweDBlMjdjZmNlLCAweGY4NGRlMjU1LCAweGJkOWFmM2ZkLCAweGVjM2Y5ZmE5LAorCTB4ZWMzMTVlNzcsIDB4Y2VlNWUyOWMsIDB4Yzk0ZmM2MjcsIDB4MDVkNDNhNWYsIDB4Y2Y3YWI0ZmMsIDB4OGY1ZmNjMTQsCisJMHg0NzdmMjdiZiwgMHgxMjc5OGFhYSwgMHhlNzgyOWU3ZiwgMHhjODVmZTI1NywgMHhmNTBjOTMxZiwgMHg5YzFmYWIxMywKKwkweGM4ZmZmNTRhLCAweGY1MGU5MzFmLCAweDhkZmYxYTZmLCAweGNhMDRjYmQ3LCAweDNkNTgyZDU3LCAweGViZjIyYTdhLAorCTB4MmNmOWNiNTUsIDB4Y2U1MTg4YzAsIDB4NzViYzQwZWYsIDB4N2JiYTNlNzksIDB4MWZmMzEzOTEsIDB4NWY4ZTY1N2EsCisJMHg0Mzc2YzFlNiwgMHhhNWJjNzEyNiwgMHg0MGVkMWYyOSwgMHg3NTM1MGQzYywgMHhmZTdmMjJkNCwgMHhiMTU3ZWY3YywKKwkweDRjOWMxN2E4LCAweGFjYThmYzI1LCAweGMxZmE0NTVlLCAweDJmMTc0OWEzLCAweDllMTc0NzkxLCAweDkzZWJhNjRmLAorCTB4MDFmNzhhY2QsIDB4Zjk5MWUzODQsIDB4ZTA1Y2U4MjMsIDB4YWQzMzI1MzMsIDB4OThjZjVmM2MsIDB4NzhkNGMwYzcsCisJMHg0NjkxNjdhMiwgMHgxYWQzODQ0ZiwgMHg1OGJmOGY5MiwgMHg1Y2ZjYzlmNCwgMHhhZmE2OTM0YywgMHg5ZTM4YWFhNiwKKwkweDJmMTcyYmUwLCAweGUxZWRmNzVlLCAweDRiZTc1MDdhLCAweGM4Njk1Y2VkLCAweDEwODdjNjc5LCAweDdkZTI5ZjVlLAorCTB4ZmZkMDkyYzgsIDB4MTYxZGUzM2MsIDB4OWY3YzBhY2YsIDB4MWQzZTdjNWMsIDB4OWYzZjViZjksIDB4OTFjZTdlMTgsCisJMHg0OGE2YmQ0OSwgMHg3NmIzNWZmNiwgMHg3ODIwNzFjZSwgMHgyYWVmNTYzZCwgMHg3N2YzMzcxYywgMHg0MTg3OWRjZSwKKwkweGM5MTc0NmJlLCAweDFjY2Q0YzJlLCAweDgyN2M2MmJkLCAweDUyMTVjZmM0LCAweDQ2OTU0MzllLCAweDk3MTMyNGJmLAorCTB4YTMxMGY2NDMsIDB4OGIxZWQ2N2QsIDB4YjliZjQ2ZTAsIDB4ZjQ5NTQxZTcsIDB4NmRkMTVhNzcsIDB4NDRmNTU3ZTQsCisJMHgzZTYwYjQ2NywgMHhmY2MzY2Y1MCwgMHg0YzY2Mjk1YywgMHhkOTBkMWNhMywgMHhiZjQwMTMxMywgMHg1Y2UwZTQwZiwKKwkweDMzOWMxYzk4LCAweDcxYzY3M2FlLCAweGRiM2EyZTdiLCAweDU1M2ZhODNhLCAweGIwMGMwZmViLCAweGUwYjllMGM0LAorCTB4ZTVlYjkxMWUsIDB4YzEyNzFhOWUsIDB4ZjZmOTg0MzEsIDB4YTU3ZWZhZTEsIDB4MThiNTZkZTMsIDB4ZGUwMmZkY2YsCisJMHhlOGJjNDA1ZiwgMHhjMGU1ZmY3OCwgMHhhMzQ1N2JmNCwgMHhlODkxMmJkZiwgMHg3NGZlN2UxNywgMHg2YmZiYzViZSwKKwkweGY4YWE3ZjZjLCAweDE1NzQyYWQwLCAweDg2OWRjZmMzLCAweDZhNGFiNWQzLCAweDc4YWU4OGRhLCAweDY4MmY5ZWUyLAorCTB4MzZlOWQxOWQsIDB4NDEyYjg1N2EsIDB4ZTNhMDY0MWEsIDB4ZThlZmQ4ZWIsIDB4MTA5ODVmM2QsIDB4NGY3ZTlkNWUsCisJMHhmZGVmOTAwZiwgMHhjZjVmMGIwNywgMHg5YzRiYzdjMiwgMHg4ZGUyOTFkMywgMHgxMDYwZmViNCwgMHhjZjU4MjEyZSwKKwkweGY4ZDFlNmI1LCAweGRlM2M0ZDgzLCAweDEwYmRiZmQzLCAweDdmZDAzZTcxLCAweDMwZjJhNWU2LCAweDJmZGU1NTczLAorCTB4NTBmZGZmZTAsIDB4ZjExMGZmYmUsIDB4ZmUyMjIyM2YsIDB4MDNiYzQ2M2YsIDB4ZjZjNjNmZmUsIDB4NGZmZjgwNTcsCisJMHhkZDdmODUyZSwgMHhmNGQzMmZhZSwgMHgyYmVlMTk0MiwgMHhjNWZjZmYwMSwgMHgxMzMxMzMzOSwgMHgxNTE0MmRjNiwKKwkweDViMjVmZmUyLCAweGQyMWY2ZDQ1LCAweDYyNzI1YjdkLCAweGI5MmM4ZjUwLCAweDE5OWY3YWJlLCAweGIzYzk3MGY4LAorCTB4OTE2OWYxMDIsIDB4NzNmZDVlNzYsIDB4Nzg0YjVjZWQsIDB4MWNmMTVmNWUsIDB4Y2JjOWU5MWYsIDB4NDlmOWY3ZTcsCisJMHgzMzZkOTUwZiwgMHhlNDEwYmYzZSwgMHhjN2NhNzRkYiwgMHg5M2YzZjFmNSwgMHhlMTE3MjZhMiwgMHg2OGEzM2ZmOCwKKwkweGQ2MjhhMmZhLCAweDBlOWMyZWQwLCAweDg2NGRhYTQzLCAweDI5ZTRmMDNjLCAweDlmOTBmZDdkLCAweGJlNzI2NDk3LAorCTB4M2ZiNWYxNGYsIDB4MDdjNjE5OTgsIDB4ZjhmYzUyZGMsIDB4YmM2M2UyMDAsIDB4Y2RmYjE1MzAsIDB4ZWY1NmU0ZDcsCisJMHhlMzBhZTg2ZiwgMHgzM2UxOWYzYSwgMHg2YWNiZmI5ZSwgMHgxYmZiOWUzNCwgMHg2ODYyOTRkZSwgMHg0Yzg2Y2Q3ZiwKKwkweGZlOTFmYmMzLCAweGFmZWYwZDZiLCAweDUwZDYzNmRiLCAweDgzNzJkNTFmLCAweGI2ZThmZGExLCAweDRjN2Q0MzAyLAorCTB4ZmI0MzE2ZTAsIDB4MWE2Nzg3NzEsIDB4ZWZkYTEzZWEsIDB4Nzg5ZmI0MzUsIDB4ZmRlMTgxNzQsIDB4ODZhNTFkZjUsCisJMHhiYTdlMzdmNywgMHhhOWJmNTBjYywgMHhlZDBkNWZmNywgMHg1ZWI4OGIwMywgMHg5NDkzNWZkYywgMHg3NDBhZTc4NiwKKwkweDJhNWZlY2JjLCAweGJlN2M1NDliLCAweGU2YTRkYjM0LCAweDc0NGYzZTg2LCAweGNjYjE3MzNiLCAweDM1N2ZhMzczLAorCTB4YjE0Y2JjOTAsIDB4YWU4NWE3MjYsIDB4NmNjY2Y5Y2YsIDB4YWM1MzZiZDAsIDB4NTU4MTdhYzYsIDB4ZTA3NDk3ZTMsCisJMHhjZGZlMjAxNywgMHhhNTVjYTM1NiwgMHgwMjZiY2Y1NiwgMHgyY2E1OWJiMywgMHhkMmY5NDYxOSwgMHg1OGI3NWYyMCwKKwkweGM1YmI3ZWI5LCAweGVkZmE2NTdhLCAweGFhN2Y2YzRlLCAweGVjZTc0MDMyLCAweDQ0NGJlNWMzLCAweGQyYTJjYWY5LAorCTB4Y2NhOWZiNDcsIDB4MWI5NmY5NDUsIDB4NGQzZTQ2NmQsIDB4Y2NhZjQwMWEsIDB4YzNjZjFhYjMsIDB4OWI2MWVhOGIsCisJMHhmZDEzOTA2NCwgMHhkMGE4ZjlmOSwgMHhkYmUyYzJlNywgMHhhMDY3NmYyOCwgMHgwNWE0ZTU3ZSwgMHg3ZDAxNmViNywKKwkweGE5N2IyNzI5LCAweDlhYWY5ZmQ0LCAweDk3OTg4YTYzLCAweDNiZjU5MGY3LCAweGZhMWI0OWZhLCAweDIxMGY0ZmQ5LAorCTB4ZGU5MmJiN2UsIDB4Y2NmMzBhN2UsIDB4OTJmNWU3MmEsIDB4MzE2Yzk0YmYsIDB4Nzc1ODI1ZTIsIDB4NTQ3OWU2MGQsCisJMHg1MDhlN2U0ZSwgMHg1NGRjZmZlNSwgMHhhZTJiNzhkMywgMHgxNzNjZmFmNywgMHgxMTMzMzA3ZCwgMHgwNmQyMDNmMywKKwkweGQ1NWU5ZmYwLCAweDRkNWNmMWU2LCAweGMzNDVhZGM5LCAweDE0ZDUzZmIwLCAweDdhNDViZjdhLCAweGZkMTBhYWEwLAorCTB4MWU1YWExOTgsIDB4YzhhNjUzZjQsIDB4ZDUzZjRhZjksIDB4MGE4YzE5ZmEsIDB4NTUwM2VkMTQsIDB4YWJhMGZiMjEsCisJMHgwNDg3MjNmOCwgMHg5Mzc3ZjhmMywgMHgxN2M4YTdmNywgMHhlN2I3NDYwYiwgMHg2ZWNiNzNmMSwgMHhhYmIyNGNkNywKKwkweGQ3NWY4MjU0LCAweGU3OGFlOTQzLCAweGU5MmJkNDI5LCAweDY2NzMxMjQ5LCAweGYwNjc4N2Y0LCAweDA2NjM2ZjNjLAorCTB4MzM4ZmFmYmMsIDB4ZjdhYTE0YjksIDB4ZTU5ZTM4MGEsIDB4ODIwZDhjYzcsIDB4NWJmZmVhZjEsIDB4ZjdlYWY4MjQsCisJMHgzY2Y5NGY1ZiwgMHhlMjlhYTUxNiwgMHg5OTNjZmFhNywgMHhjN2FmZGZiNiwgMHhjZDI2Y2Y4YiwgMHhkNjNjNDE4YSwKKwkweDZlNzdkYjVmLCAweGFjZmQ2MTg3LCAweDdlYzc2ZGUyLCAweGQzMzdhZWNmLCAweDgyMDVmNWI4LCAweDZmM2ViZGUxLAorCTB4NzQxZGMzNjksIDB4ZTE1ZDJiMWUsIDB4Nzk4NjJlZjMsIDB4MzQ5NmRjMjMsIDB4NzNmZDU3MGUsIDB4YjgyMzRiMDIsCisJMHg0M2QyZjdmZSwgMHg4YWVjYmZlOCwgMHgwZGJjNjE3NiwgMHhlODg5YjFmMCwgMHg2NzM4Y2VlZCwgMHhmMzBmMjdkMiwKKwkweDM0YTQxOGFhLCAweDI1ZmIyMWFmLCAweDk2ZmExZmIyLCAweDRjZGJhZjk1LCAweGY2ODg5NTlkLCAweDQ2MzVmMjU0LAorCTB4NjZmNWM1YjgsIDB4YzUxNzA3ZjIsIDB4ZTBhZjk0MmEsIDB4ZDFhMTU5YWYsIDB4NTVlZjM4ZDUsIDB4OWNlZjMzNDksCisJMHhiZGQ0ZjAwYiwgMHhmZDRjMzIyMywgMHgyZDM0NzY3MSwgMHgxNWRmMDQzZCwgMHhmY2JiNDZiNywgMHhlZjc4ZmVjZSwKKwkweDAxMzg3MjcyLCAweDZlMTBiN2VlLCAweGNkMjE0MzcxLCAweGRjMjFkYTliLCAweDMzZDgxNzNmLCAweGRlNzdjODE5LAorCTB4MTRmZjQ0ZTksIDB4OTc3ZGMzMTMsIDB4ZDNmZmY4NzAsIDB4ZWZjNGUzY2EsIDB4ODc5YTU1NTgsIDB4ZWI3YzU0OWMsCisJMHgxNjU4NDE5NiwgMHhiNTFkZGM5MSwgMHg3ZmNlYjgwZSwgMHhmY2ViZTU2OCwgMHhlYjA4ZDY4NywgMHhmZGVlZTVmYywKKwkweDdlZDM5ZjI4LCAweDZkZDE0YjA4LCAweGVhZGFlY2QyLCAweDE5N2I1MGVjLCAweGVjNDlkNmY0LCAweDMxOGJhZjU3LAorCTB4N2VjNWNlM2YsIDB4M2NjYmI2MDcsIDB4OTcxOWQ5NGQsIDB4MWVkMGNiYjcsIDB4ZWRkM2ZlNDMsIDB4OGQ1YWJmYjEsCisJMHg5ZTg4NjQ3NiwgMHhiM2QzNGFmZCwgMHg5ZWExNWQ1ZiwgMHg0ZWVkODBiZCwgMHg2ODg4MWJkZCwgMHg5MWM4MjRjNywKKwkweDFiMzhkY2Y1LCAweDJhOTU3ZmM3LCAweDFiZTNjYTMzLCAweDZkOWY5ZTIwLCAweDBlMWY2YzhiLCAweGNlNWQwZWI0LAorCTB4ZDY4Y2M4Y2YsIDB4ZWZkNzU0ZjksIDB4YzU2MGRmZGMsIDB4OWMyZmVkMzIsIDB4MjQ3ZmUwZDksIDB4ZTMyOWY3MWIsCisJMHhlZGRlNTE4NywgMHhhZWE0ZmQ0MCwgMHhmMTBkODNmOCwgMHg4ODZkZTNhYiwgMHhjMDRmODhjZCwgMHhmOWM2ZDNhMywKKwkweDY0OGI2OWM0LCAweDFlMDM5NjBmLCAweDBlM2MwNjRkLCAweGQ5MDNmNmM3LCAweGRmYWQ1NzgzLCAweDZlZTc4YzRiLAorCTB4ODM3YzM1YmEsIDB4YmM3MTk3OWUsIDB4Y2UzZWJiYWUsIDB4ZTU0NWI4YzMsIDB4ZTdhNDczZWMsIDB4Mzk5YzdhYWYsCisJMHhmNzQ0NzVjNiwgMHgwMTFjNjFiZiwgMHhkNzdkZGZlNywgMHhiNzcxNmI3ZiwgMHhkNTE3OGEwZSwgMHgwYzRkN2FiZCwKKwkweDBhMmFhN2M2LCAweDk1ODZmNGZhLCAweGE0OTk4NWRiLCAweDU5NzZiYjA3LCAweDU3NjcwOGRjLCAweGVjZTdjZjFjLAorCTB4MTBmMTM1ZGEsIDB4YWYzZTM5YzYsIDB4ODUyOTljMzksIDB4YWY1ZDJkZDgsIDB4NDMzM2M5MWMsIDB4OGYzYjVkN2YsCisJMHgyMDk0NDllNCwgMHhkMTdlMjdlNywgMHhmYzVjNTdkZiwgMHgxMjhmM2NjZiwgMHhjN2QwMjczYywgMHgwZWJlNTY2ZiwKKwkweGY4ZjFiN2FkLCAweGM3OThkM2M5LCAweGY3YjE5YTM2LCAweGZhZjk2M2EzLCAweDFjN2E2ODkxLCAweGUzYmY0NzlmLAorCTB4N2Y3ZWExZjMsIDB4YzdlNTcwNTQsIDB4ZGQyNjJiMDAsIDB4YWI2NjRjNTUsIDB4MDBhNjhkZTUsIDB4NmUwYThmOTYsCisJMHhiZTU1ZTMxMSwgMHg0ZDNjZmM5MSwgMHg5MTFiMTY1MiwgMHg0NzI4ZmQwMSwgMHg4ZTA4MDNkYiwgMHg4ZGQ3YTNhMywKKwkweGE3ZWEyOWRiLCAweDBiMmMzZWVhLCAweGM0MDJlZjE0LCAweDJiYWY1YzdiLCAweDM3ZmM3ZDA5LCAweGExYjM4ZDg3LAorCTB4ZTE0ZDIxNWYsIDB4N2U3N2I3N2EsIDB4MjllZjFmOTQsIDB4OGZiOTM0NGEsIDB4Njc2N2FhODAsIDB4YzU4YzJmMGUsCisJMHhlNjhiN2ZmNywgMHhkMjU4ZjJmMiwgMHg4ZTVjMjY4OSwgMHgzOGEwMzk3MCwgMHg1YTY2OWJkNCwgMHg3MTBkOTZkZiwKKwkweGVmODIyZjI3LCAweGU3ODg0ZDk3LCAweDk4MDVlOTdlLCAweDk2MzljODdkLCAweDA5NjdlM2M3LCAweDAwYjkwNzE0LAorCTB4MTRlNzgxNzgsIDB4YjUzZTAyZmEsIDB4MzMxN2NjNGIsIDB4ODliMGY0MTYsIDB4MGJmMDU1YjksIDB4ZWU0MjkzZWMsCisJMHg2OGZmYzFkOSwgMHg0ZDYwZmM3NiwgMHg0ZDM4ZjZmZiwgMHg0NWUwMzMzZSwgMHhkNWRiMTk3NiwgMHg1YzBjZWUwOSwKKwkweGZjODE3NzRmLCAweGI0ZmEwMzBkLCAweDdjYTk1OGQ1LCAweDE4NGQ0NmFkLCAweGE3YjhmMjA2LCAweGFmZWE4OTI2LAorCTB4MGNhOTM4ZDcsIDB4ZTdhMDhjZDQsIDB4NTQ1YzZiZmIsIDB4YTdiNTM2OGYsIDB4NTUyYzdhZDMsIDB4ZmU4NzliYWYsCisJMHgwYjEyZmRmNSwgMHhiYzIzYjdiZCwgMHg4ZTU2N2JjNCwgMHg5N2Y5Yzg4NywgMHgwMDkzZTYyZSwgMHgzZDM1MmZhZSwKKwkweDM4ZDZmYjUyLCAweGM2YTdhZmUyLCAweGZkMzFkNDAwLCAweDhhZDlmZmJmLCAweDA1NGQ2NDNmLCAweGEzZmE5ODNkLAorCTB4NDE1MzU5YzMsIDB4NzgxMjlmOGUsIDB4MTgxZTAyZmUsIDB4NTUyZTc0OGUsIDB4YjczMjlmMmYsIDB4ZjBhOWEyYzQsCisJMHg0ZGYzMWI2YiwgMHhjOGJjYzI0ZCwgMHg4ZTE1M2ZkZSwgMHhlOGY2Y2M2MSwgMHgxZDRlYTY5ZiwgMHhmZGM3ZjMwOSwKKwkweGY2YzYxNGZlLCAweGM3YWJkZWRhLCAweGZiYTlkODczLCAweDgxOGJhYjNmLCAweGZjNmRjOGY5LCAweDgyODk5ZjNlLAorCTB4N2Q0MDU2YTcsIDB4MGJmMzliMzMsIDB4OThiNTNjOTMsIDB4Mzc3M2Q5Y2YsIDB4YmVmZWUyNzMsIDB4MWI1ZWNlM2UsCisJMHhkYjc2MTNiNywgMHg1MTM5OWRiOCwgMHhlNmMxZmNlMCwgMHg0MTFlNWFjYSwgMHhiYWU4NmU2ZiwgMHhlZjNlZGUxMSwKKwkweDhmNzRkN2MwLCAweDJmYjc4YzBmLCAweDJmNWUzMGQ1LCAweGZhMDcxMWM1LCAweGQ3ZmY3NTJlLCAweGU5NWM4ZWI0LAorCTB4NDkxZjNkNzcsIDB4YzQ4NDdjZmMsIDB4ZTZiYTJiZjMsIDB4ZmRhNjZlMjYsIDB4YmExZjY4NzgsIDB4NDcyM2RhOGYsCisJMHhkMmRlZDdiNiwgMHhlZDA2ODFkNiwgMHg2NTlmYjdiZSwgMHhhNjgzNzJmMCwgMHhmNWM2MjQ1NywgMHgwNWQxNmJmZiwKKwkweDYxYjk0N2JmLCAweDVmZGEzOGRlLCAweDA5ZTJkM2FhLCAweGU1N2EzYTkzLCAweDJmN2U3NmY5LCAweDEzZDQzZTVjLAorCTB4M2MwNDc4NGUsIDB4ZDFhNWQ3MGYsIDB4MWU2MDU1MzMsIDB4NjA0OGZmY2MsIDB4MjgwMjg0MzMsIDB4ZGJjZjM2ZGQsCisJMHhjMmQyNGZkOCwgMHhkMTk3YmU0ZCwgMHg3MTY1ZDg1ZSwgMHhlM2EzZDlhMiwgMHhkOTAzZWVhYiwgMHg2MTIxZmE4YSwKKwkweDhmZGEzMWNmLCAweDY0M2ExM2FhLCAweDhmOTdmN2E0LCAweGNiNzE0ZDdjLCAweDMyNzU3MzNhLCAweDFiMTc2ZGQ1LAorCTB4YmRiNGZlYjAsIDB4OTlkNjIzN2EsIDB4NmZhOWViZWYsIDB4ZDYwYzNmMDAsIDB4MTNlM2UxY2UsIDB4OTBiYjYzZDQsCisJMHgzYjU4MjllOCwgMHg3ZTA2ZWY1NywgMHhmNWU2NjVkOCwgMHg0YjM5MWYyZiwgMHg1Y2NiYjFmYywgMHhlMThkOWYzZCwKKwkweGVmOTg3YWY1LCAweGFhNmY1OGFlLCAweDUyOTA1NDA5LCAweGUxZmQ2NWZiLCAweGI3YWViMDliLCAweDc3ZGE5MmZmLAorCTB4M2Y2ZTU0ZGIsIDB4YTQwY2RlMmEsIDB4ODU1ZDVmN2YsIDB4MmVhNDNkYmEsIDB4ZjJiMzNhZjEsIDB4YzU1ZjlmNTIsCisJMHg3ZjI5YWY4MSwgMHhlNzBmNzJiOCwgMHhjZTFiYzQ0NywgMHhjM2NkZWYxMywgMHg3YThjZTk3NSwgMHhhNGViNTFkNCwKKwkweGQ3MzY3M2I4LCAweDlmMDMwMWQ3LCAweGI3NTNlN2U5LCAweDJhMmNiYzk4LCAweDA4NWVjZjQ0LCAweGNlNDJmZjViLAorCTB4ODRhOGIxZDksIDB4MzhiNGZlOTAsIDB4YmIwMzNhNzYsIDB4NmYxODJiMzQsIDB4MmEyZTY0Y2QsIDB4OTUwZjMxODcsCisJMHhlZTk2ZGJkOSwgMHhiYjJkYjQ0NywgMHg3YTg5ZDVhZiwgMHhmYWQ3M2UyYiwgMHg2OGU4OTc4MCwgMHhkMDllMWZmNCwKKwkweGU4ZmFlMmY0LCAweDAxYTMxYmZjLCAweDc3ODJmNTllLCAweGYxN2E4ODhkLCAweGU3NGFiMzY1LCAweGIyMjQzYTJmLAorCTB4MzViNTNiMzcsIDB4NTMzMGFkOGMsIDB4ZjczYjVjYmQsIDB4NWRlOTVlNmQsIDB4ZWVmNTEyMzMsIDB4MTlhYjkzMjIsCisJMHg0ZjBjYjNkNywgMHgyZmJlMTliZSwgMHhhYWUxOWRkYiwgMHhlN2JjYzE2NSwgMHhjNDk2ZDhiMiwgMHhlZjMwNGFiMSwKKwkweGFhM2ZhZjU5LCAweGI1NDZkOWYxLCAweGQyZjc4NmM5LCAweDk1NDNmYmU4LCAweDcxZDJlYjZkLCAweDdkYjNmYjdmLAorCTB4YmQzYzkwMWYsIDB4N2M0MTk1MWYsIDB4NDQ3YWQxNWMsIDB4YmY2OWRhZjYsIDB4MjlmM2M2NGMsIDB4ZDZmYWQ5OWYsCisJMHhiZWY3NWEzZiwgMHgwYjc0MTk2YywgMHhlYjJmZjVlYSwgMHg3OWI4NzQ0ZCwgMHgwNmY0M2QyMCwgMHgzODM3M2ZlOCwKKwkweGFjNmE4N2M4LCAweDVkYzJmZTU0LCAweGRlOWEyZDdkLCAweGQzMjk1MTA1LCAweGJmYjQ2MDZjLCAweDkxNTZlOTkwLAorCTB4YjlhZGU2OGYsIDB4N2MwYWMxYTYsIDB4OGVhYzgyZjQsIDB4MTc5YjNlNDQsIDB4NWI3YzRiOTUsIDB4YmU3MjJiMTYsCisJMHhkZDA3Yjk2NCwgMHgwZGNmYjY5MiwgMHg2NTM1ZDRmNSwgMHgzYzUzYmVkMywgMHg2ZjY4YzhiZSwgMHg4ODUyNmQ1NCwKKwkweGM4MGVjMDBmLCAweGRjYTgzZTQ3LCAweDdlZTFmMjYwLCAweDRlZGFjOWEyLCAweDQ1ZTc3ZGU3LCAweDM2OGZjZDMxLAorCTB4YWY1YzRmOWUsIDB4NmNkZjNiZTksIDB4ZGNiZGRmMWUsIDB4ZjM5MmM1MzksIDB4NTExZTc0NTEsIDB4ZTUxZmJmYWYsCisJMHg5MTI4YmUyNCwgMHg1NWZmYjQ3YywgMHhlNzQxZGU3MiwgMHgzOGZiYmYxOCwgMHhjODc5YzM1NiwgMHgwNDI4ZTNmZSwKKwkweDc5NGUzZTg3LCAweDU3ZDIxYzcwLCAweDI3ZWMxZmU1LCAweDZiOGRmODNmLCAweDRkZDY3Yjc1LCAweDNiZTVhYzcxLAorCTB4OWIwNWZjYjQsIDB4ZjNmNjMwN2IsIDB4MTgyN2E2YjQsIDB4Nzc4MGIxZmEsIDB4ZWVhZmEzMjksIDB4MWNjZjQwOTMsCisJMHhmOTMzZDNlYywgMHg5MGQzNTMwZCwgMHg2Y2Y3YzFiZSwgMHhiOTBmNDE5MiwgMHhjMWQzYTAyNSwgMHhmYmVlYWQyOCwKKwkweDUxZjZlNDdlLCAweGY1MzNlZDYxLCAweGE5ODZjY2ZhLCAweGYzYzNmYjkzLCAweGI3NTgyZGI0LCAweDFiZTk3YjQyLAorCTB4ZTExZDVmNGIsIDB4YTFmNTczYTMsIDB4ZTNlOWM1ZmQsIDB4ZTlmZDRiZGYsIDB4YjUxYTk3ZmMsIDB4ZjgwZmEwZjAsCisJMHgyN2FjNjBlZiwgMHg3YTdjZjMxZiwgMHhjYTI3MzM2NywgMHg4ZDQ5NjZlMSwgMHgyMWQwODU3MiwgMHgzN2FmOGEzNSwKKwkweDM1YWZlNzI1LCAweGY3ODgzZmUwLCAweDRmZmQwMzVjLCAweGZiMGQzOGQ1LCAweDk2OGI4YjhhLCAweDU0OTg3OWQxLAorCTB4YzdjYzVlOWQsIDB4Y2E2ZDc3Y2YsIDB4ZmUyN2VjMzIsIDB4MTZhZTM4N2YsIDB4NzAwMGY3MGUsIDB4YzMwN2ZkNGMsCisJMHg1ZTMwYzIzMSwgMHgwMzFjOGUxMCwgMHg4NzBiNTc3YywgMHg3YTZiM2IxOCwgMHg4ZjZiZGEwNiwgMHgyODBmMjg5OCwKKwkweDY2YjNlNGQxLCAweDZmZjY1ZGEyLCAweDBjYTc4YTI2LCAweDg4MGYzYzY3LCAweGZiMGRlMzI5LCAweDJjN2I5OWI0LAorCTB4OWVmZTMxZjMsIDB4ZDJjM2IxMjksIDB4YjcyNzk0NTgsIDB4YTlkNzE2YjMsIDB4NWY2NDQ4OWYsIDB4MzlhYjczYzEsCisJMHg3MjZlODcwZSwgMHgyMDRmZmRlMywgMHg2NjVmZDQ5NSwgMHgxZjgyYjdiOSwgMHg4MmZiZTZmMiwgMHg3MGQzM2VmYSwKKwkweGJkZTNlNTk1LCAweGU3YTM5YmEwLCAweGZiOGQxOGRmLCAweGFhMWU3MzY2LCAweGU3OTgzY2MyLCAweDM1MmZmMTk1LAorCTB4OTJiYzgzMzAsIDB4MmMyMGQyMWQsIDB4YWJlMzNiMjUsIDB4NzAxYjg3YTgsIDB4MTQ3MDc2YmYsIDB4ZjYwNDViYjcsCisJMHhlNGUxYzM3MCwgMHhiY2I5ZWY0OCwgMHhmMGYzNWI5ZSwgMHgzNDFiOGMzNCwgMHg4YjVlNzRhZiwgMHhjZGIzNTNmZSwKKwkweGYzMWZiMmRmLCAweGU4NTMxZTc2LCAweDQ3YWNkNmRlLCAweDUwOTk4ZGZkLCAweDY4OTlkNzE3LCAweGZkNjMxNGJkLAorCTB4ZGY3MTlhZGIsIDB4MTc2Y2M5ZmQsIDB4NjhjZDExZGEsIDB4NDdmYjYwYmYsIDB4NTY2YmYyMTQsIDB4ZjBkMzM4ZDUsCisJMHg2ZDNhOTI3ZSwgMHg3NmIyZDgxZCwgMHhjMTc5OGFiMiwgMHg4NzE0OGFmNSwgMHg3MzJhZGRlYiwgMHg3NzNjNWNmNSwKKwkweDhkZDFlZTMxLCAweDUxZWJkNjBkLCAweDA3MWFiOThmLCAweDk0OWViY2E5LCAweDMzOWFlYjhjLCAweDdiNDYzYWQzLAorCTB4YWU2OGM4MGYsIDB4YjFhOGE2NzUsIDB4NmZmMGZhYzEsIDB4M2QyMGZhYzAsIDB4OWRjMWIxYjMsIDB4MmIyZWZkODYsCisJMHg4ODNiZmFkNSwgMHhlMjE3OGE3MSwgMHhlZjY4YmMzNCwgMHhkMmY0ZmIzMywgMHhjYmNjMDZjNiwgMHhmNTgzNmIxMiwKKwkweGFkZGYzMGE5LCAweDM1M2Q3MmNmLCAweGZiNDdmYTE4LCAweGMzZTNlNjBiLCAweDg3N2IwNTdiLCAweGNhNGU3NDRiLAorCTB4NjAzYjYzMDYsIDB4OTk5MWI2N2UsIDB4MGNkN2RmYjQsIDB4MmJlZjExN2EsIDB4ZGZjOTFkZWUsIDB4ZjIzNGZiZWIsCisJMHhkM2VkMTM3MCwgMHg2ZjVjN2I2MCwgMHhiZGJjYzk2YywgMHg1N2RmODMzYywgMHg4YTE1ZGIyMCwgMHgzMDdhYzAzNywKKwkweDE0OWVmMzE1LCAweGYzNzFmZmE2LCAweDhmYjZhNGI4LCAweDAxZjc4NTExLCAweDc1YTNmMDg0LCAweGY3M2EzMmVkLAorCTB4ZGM2NjFkNjksIDB4OGNkMzk3OWYsIDB4MTY3OTg5NzUsIDB4YWEyN2JmYTAsIDB4NDYzN2U3YzYsIDB4ODM0MWY5NmIsCisJMHg2ZGRhMGE1OCwgMHgxMzNlNGRjMywgMHhmY2M5MWJiNiwgMHgwMmM3NWU1NCwgMHg2MjhkOGY2NCwgMHg4ZDFmNTQxZCwKKwkweDFlMTY2MzVlLCAweDQxZDI3MjViLCAweDJkY2M3MWFiLCAweDQ3YWEzOGYyLCAweDcxMzEzYjQ0LCAweGYyNDcxZWFlLAorCTB4NzRiZTQxNGUsIDB4NjE3NjZiNDcsIDB4N2UzZmVmMGEsIDB4ZjdjYTJjYzYsIDB4Y2RlZjY5ZjUsIDB4MzEzZDg2MzMsCisJMHg3ZWI1ZTYwZCwgMHg1MGNlZGRjNiwgMHgyZjVmNGVmYiwgMHg0OGFkZmI3NSwgMHg2OGNiZjk4MywgMHhhMGJkYTIyMSwKKwkweDM2NDU3NWRiLCAweGU1OTg0ZjVlLCAweGM2MTQ3YTdlLCAweDI2Y2RkYjExLCAweDU4YWQ5ZmJjLCAweDZmMTY2MzhiLAorCTB4YmI0NDRmYzgsIDB4NWNkZjY4YWMsIDB4NDRkNzg3YjIsIDB4ZDE2Y2JiNzMsIDB4NzdiMjE5ZmEsIDB4OWFmNzllMTQsCisJMHhmZTdmNzY0ZiwgMHgxODMxMDliYSwgMHhiOWIwNmZhNywgMHhmZTQ3YWU2MiwgMHhkZmJmMjNmZCwgMHhiMWVkNGFmNSwKKwkweDBhNmJjNGU2LCAweGMxOWIxZTUwLCAweDhmZmJjNmFmLCAweGNhZGQ5YTBlLCAweDc1OGJlNDE4LCAweDZjY2VjOGMzLAorCTB4YzdkNmYyOGUsIDB4ZmZjZGJmNDIsIDB4NDFkNTc0ZWEsIDB4ZjczNjY3ZmQsIDB4NGUzODIzZjgsIDB4OGY3ZjE0NDMsCisJMHg2ZjIxMjZmNywgMHgzZmY3ZWRmNiwgMHgxZThjNWMyZiwgMHhmZGYwZmM3OCwgMHg5MWIxODNmZSwgMHg0M2JkZjFlZiwKKwkweGZlZDA1ZmMzLCAweGQ5ZGQ5MGYwLCAweGRjYzRmNjYwLCAweGNiYmRmMDg3LCAweGVhZDY3OWU3LCAweDExMmY1MTg5LAorCTB4ODZiNGZiNjcsIDB4ZDY3NjAzZTcsIDB4ZTY0MDU4YjgsIDB4YmQ2MmQxZjcsIDB4ZGQzZjY4YTQsIDB4MjJkMjVjYWYsCisJMHgwOTdjZGM1MCwgMHgzYTNkMjI2YiwgMHhlZWQ1ODk0YywgMHhjNWU2MzFhNywgMHg0ZGJkMTY5NiwgMHg3OTViNGJlZCwKKwkweDQyZDYzMmZiLCAweGUxN2E3NWVkLCAweDgzMDFiNWJkLCAweGYwY2UzYTFkLCAweGRjZDExZGZkLCAweDc4YWNkZDZmLAorCTB4ZmZmYjQzMWYsIDB4YzRkOTE5OTEsIDB4MTE2N2MwNGYsIDB4MDdlMjJkZjMsIDB4MzFiOTc3ZDgsIDB4MzcxZmFmOWEsCisJMHhmNmM4ZGI2MiwgMHhiODYzZjEyOCwgMHhlMDVjYjg3ZCwgMHhjMjA3YjNlNywgMHg5Mzc5ZDU1MywgMHhkZTBhM2Q2MSwKKwkweDdhZDMyMTlmLCAweDQ5ZjlhZGQ0LCAweGViN2M5Mzg3LCAweDdmZjk4NDZmLCAweDI0NGFmNTlmLCAweDIzYmRkYWE3LAorCTB4NDI1ZjgyNzUsIDB4MzNiZWZhZjksIDB4MmQxYmRlZWMsIDB4YTZiYTY4MGYsIDB4Y2I0M2ZlMjUsIDB4NmIzZWY5ZWYsCisJMHhmZDBkYzM3OSwgMHhmNDAyY2VkYywgMHg5ZWVkNjFkZCwgMHg0OGE0MTQxMiwgMHhhZmQwMTk3OSwgMHgzYWRjMWY0MSwKKwkweGRkYmY1OGMyLCAweDM5ZGZhYzY1LCAweDdkM2RmMjI5LCAweGI0ZDQ2YjZiLCAweGQ2YWE3YmQwLCAweGYzOGU3MDBlLAorCTB4NTc1ZThkMmQsIDB4MGIxMmRmN2YsIDB4MGI3YmViY2YsIDB4Zjk4MTVlZTksIDB4YzE3ZmI0OTQsIDB4MWIxNGZhZjMsCisJMHhkOTFlYTBmMywgMHhmYjQ2Y2ZiZiwgMHhiYzhhNTUyMSwgMHg1NTE2NDMxOSwgMHhiZGUyZWZlMCwgMHg5ZjlkOGFmMCwKKwkweDE3ZmY0MDM3LCAweDk5OGEwNWUzLCAweDk3ZGUwZmI3LCAweDEyNTFmN2M0LCAweDNjNWE0OTNjLCAweDYzMzQ5NWMzLAorCTB4MWI4N2I3ZDQsIDB4MGJjYTJhZmQsIDB4ZGM0NmQ4OTYsIDB4MjdlNjBkNzcsIDB4ZThlZGVmMWEsIDB4MGYzOGZlOGEsCisJMHhjZjk4NjNmZCwgMHhlODRmOGM2YywgMHgzZTdkNWE3MSwgMHgyYzdmMjhmZiwgMHgzOWNmYmI1YSwgMHgzNDZiNmU5YywKKwkweGEzMGJhOGY5LCAweDM5ZDIzZDczLCAweGI5NzNkZjA3LCAweDg3YmI1MmY5LCAweDQzYzEyOWZmLCAweDI2ODk2ODc5LAorCTB4YjNhYzE3MWUsIDB4OWM1MjhlYjksIDB4ZWEwZmYzNDQsIDB4ZjMwNmI4YjQsIDB4NTZlZjVkN2QsIDB4MTA5NWVjYzIsCisJMHhlZDdkMjJmZiwgMHgzOWY1ZjVkNywgMHgzOGYzNzdlNCwgMHgxNTZhMmQ4OCwgMHgzNjBkYzNhZSwgMHhmYWE2NmViZCwKKwkweDAwYTZlNmQzLCAweDVhYWZmZGY5LCAweDgzMWYxODljLCAweDY3MThkZGVmLCAweDQxMWRjZGYzLCAweDA2NWQ1ZDdlLAorCTB4MGU3YmMxNGIsIDB4YjRjYmIwZGUsIDB4NmFiZGQ2ZmUsIDB4ZDhmNWM2NjksIDB4ZGI3NmYzNmQsIDB4YmE0OWYyNDIsCisJMHhmOWQxZWZlYywgMHhmOWZkMDhhNiwgMHhmOTBkZmQwYywgMHhmOGMxZmQ3NiwgMHhmZDc3ODhhZCwgMHhhN2Y2MWJmZCwKKwkweGNlZmYyMjAyLCAweDY5MWJmOTQ5LCAweGExN2IxZmVkLCAweDQyY2JiODllLCAweGY3ZmQ0ZjcxLCAweGU3Y2ZjYTBmLAorCTB4N2E4Y2ZkZDEsIDB4NGUxNDEzN2YsIDB4ZDUxYWNlODcsIDB4OGU1ZDhmOTAsIDB4ZTUwNzM3N2EsIDB4NjdmNDlkYTAsCisJMHg4MzIwY2I0NSwgMHg2OWY1ZDRkZSwgMHg2ODFiZjljNSwgMHg1NzQ4MmNiZiwgMHhiNTIxMmUyZCwgMHgzOGFhNWU5MywKKwkweGJjNjhiZmZmLCAweDM0OWU5MDNiLCAweGY3ZTkxMjRlLCAweDM1NDljNzgxLCAweDM4ZTBlM2U4LCAweGY3NzAwYzkzLAorCTB4YzEzMjY3MWYsIDB4ZGFjMzhmYTEsIDB4OWZlNzBjYTIsIDB4YWUzY2NjZWIsIDB4MzM5ODY2NzIsIDB4MWU4MjM2MjYsCisJMHg4MzcxNGJkMSwgMHg2MGZmNzBjOSwgMHg2MmIyZTQ5ZCwgMHg0ZWNhNzVmZiwgMHgyODdmMzQzNSwgMHhlZjAwNWY3YywKKwkweGYwMjE2NGM1LCAweDg2N2FjMWQ1LCAweGYzMGI3MmMxLCAweDNkNDA1ZTUyLCAweDA3MjIxM2Y2LCAweDYyYTVkOWEyLAorCTB4ZjhjMjYyYmYsIDB4YzYyZWY5ZTksIDB4YmRiOTQ1ZmUsIDB4MzM3MjdkMTAsIDB4OGJkODJkZjIsIDB4N2UzYjU4M2YsCisJMHg0OWVjMGY5NSwgMHg0NzY5ZWNjOSwgMHg5Mzc2NGFiYSwgMHg2YjY4ZjMxMywgMHg0NWM1MTMxNSwgMHg2NGFjOTJlYiwKKwkweGNhMTJhZGZmLCAweGJkNzM5NDU1LCAweDIyNDNhOTVmLCAweDhmN2RmNDM4LCAweDlmMjllNjgxLCAweGMzM2NkMDc3LAorCTB4OWZmYjNiZWYsIDB4NzZhMTRmMWIsIDB4M2I1N2VlZmQsIDB4MGY5M2Q3MzAsIDB4OTM1NDViZmQsIDB4NGU1ZDQ1MGIsCisJMHgyMTI3ZDg1MywgMHg0N2VmMGZmNCwgMHhlYzQ1MjBkYSwgMHg4ZTlkYmMyNywgMHg2Y2U5MDFmZiwgMHgzZDIwNzBlZSwKKwkweDg4YTVlM2JhLCAweDk1MWIxMDc5LCAweDMxMDc5OGVmLCAweDI3MWY0YzJmLCAweGUwMGVjZDFjLCAweDIzODc0MmY3LAorCTB4ZTVmNDgzMjMsIDB4YTVmNTA1NDYsIDB4ZGM5ZmNjZmQsIDB4YjRjYmQyNGUsIDB4N2ZhZmFkZWYsIDB4NTZhOTg0ZTYsCisJMHhiYzZjNGY5ZSwgMHhmZTIwNmY1NywgMHg3ZDYyZjFkMywgMHhmM2M2NDFmMywgMHg3Zjk0YmQ1MywgMHg0ODNjMzk3MiwKKwkweGZiNDNjYjgyLCAweGUyMjk3NjAwLCAweDQyNTgzNmJlLCAweDQ5MzhmYzg2LCAweDM1NGZlNjMxLCAweDYzZTIxZTQ4LAorCTB4NTZkNTRkZjMsIDB4NWI0OTI3ZGEsIDB4OTI3ZGM1NjksIDB4MDYzMzkyZDUsIDB4MzdkZWQ4ZmQsIDB4Zjk4M2ZlYzEsCisJMHhiZTc5M2EzNSwgMHg2YmZmNzg2YSwgMHhiNDY2MWVmMCwgMHhjNDUzMTU3MywgMHgwNmEzNzlmYiwgMHgzNGJhYWZiMCwKKwkweDc3ZDlhY2ZhLCAweGY1MDFmZTY5LCAweDM3NzVjMWUxLCAweDcxNTI0ZTJhLCAweDM5OWIzNWRkLCAweDRiYWQwM2JjLAorCTB4ZTEwM2JmN2EsIDB4ZmM3ZGQxZWIsIDB4MzkyYzFiZjcsIDB4ZmZhZTNmNTYsIDB4NGEzNWUzZTEsIDB4YmMzZTRmMWUsCisJMHg3MDc4MDQ2ZiwgMHhjZDMxYWNkZiwgMHg1NDZkZjg0ZCwgMHhkNWZkMTUyNSwgMHhjYzUxMTFlOCwgMHg2NTZmZWExYSwKKwkweDY3ZjdhMmNjLCAweGNjZjFlM2UyLCAweDhmOGM2YjIyLCAweGUzYTM5NzljLCAweDFkZjJiNzY5LCAweDE4NmYxZGVkLAorCTB4OGY3ZjBlNWYsIDB4N2MyMWU4ZTIsIDB4ZTg0Y2E5ZDksIDB4OTFiYjk3Y2YsIDB4ZmMzODEzMTcsIDB4NWFhNmY3YTEsCisJMHhiYzQ1ODYzMywgMHg3ZjFmYjI3ZiwgMHhkZTRkZjE4NiwgMHhmN2U3NDY2NCwgMHgxOWI5NDMwNiwgMHhlZWQ1NmVmYSwKKwkweGI1YzBhYTQzLCAweGYyZjRmYzBiLCAweGMyYTYxNDdiLCAweGU0NzdlNmZhLCAweGM5Mzk0MDVmLCAweGNmY2ZkZjZiLAorCTB4ZjAyNmI0ZDEsIDB4ZWZiNTFlN2IsIDB4NjI1ZGM3YzMsIDB4MTJjOGZlZTcsIDB4Y2M2NTRhYmIsIDB4ZjEyZmY3NTEsCisJMHhkYjVhMzdmNywgMHg1ZTc4OWNhMywgMHhiMjJlMzViMSwgMHhkNzYzOTMxZiwgMHhiNDlhNjhmMywgMHhiNDFkMDg3MywKKwkweGNmYjdhMTRmLCAweGNkZGNjNzliLCAweDFiM2RjNTBhLCAweDI1N2ZlMGFkLCAweGE5ZmZiNWY0LCAweDgyMDIzZmI2LAorCTB4ZjlkY2UzMGIsIDB4Zjk5YWViZGIsIDB4N2YzZTUxZjksIDB4ZmI2MmFiOGMsIDB4NWM4ZWM0YzQsIDB4NzQwZWZjNDEsCisJMHhmNzBjYzZkYiwgMHgzYjU4NTVkYiwgMHhlN2NlNTFiMiwgMHg3Njk5YmM5YSwgMHg2OGVhYTcxOCwgMHg1YmQ2MjI0NywKKwkweDRlOWQzZWRmLCAweGI3MWQ2ZjdlLCAweDQ3Nzc3YjM3LCAweDNmYTBkYzUzLCAweDc5Zjk2YTdkLCAweGNjMjlmM2YyLAorCTB4ZGQzZmE4MzcsIDB4YWQwMGE1Y2EsIDB4ZDNlN2U1YWIsIDB4Y2QxYzZmOTksIDB4MGI4ZDY3ZGIsIDB4YzJkM2JmYmUsCisJMHhjOGIxYTRkOCwgMHg4ODRmMWMwMCwgMHgzMGY0NDg5ZiwgMHg3YTA2NGRkYiwgMHg2NzVlM2M4MCwgMHg3ODgxZThkNywKKwkweDc2YjdhM2VhLCAweDc2YTc0YmVmLCAweGNkNzFlMGJmLCAweGY3MmE2MTVmLCAweGE1ZmJmNWQ3LCAweGU1Zjc2NzhlLAorCTB4NWI3ZGQwNWIsIDB4MTNmNzM2ZTUsIDB4M2IwYjRmNzgsIDB4ZTZiZTUyMjIsIDB4ZmVmYzI5YzIsIDB4NzcxNjg1YzQsCisJMHgwYjU3ZGEwYywgMHg2YTE0NTNmZiwgMHhmMzkzN2Y2OSwgMHg3ZjBkMjJmZCwgMHhmNzQ1Y2M5ZCwgMHhkYWQ2ZjgwZSwKKwkweDk4NGViZWY4LCAweDU0ZjE5NjdmLCAweGMyM2ZiOGZlLCAweDQ0ZGE4YmY3LCAweDMwNWYxYmNhLCAweGJmNjFmMTQ1LAorCTB4YmYwNWVkNzksIDB4ZTJmOWZkYzQsIDB4NzczYTY4YzYsIDB4YWU3YmYwYmUsIDB4MmRkNzY4OTMsIDB4YzRlNmMyN2MsCisJMHhmZTU5N2JkZiwgMHgzMjdlNjY0MSwgMHhjOWZjYmJmNCwgMHhkZjA3ZDUwYywgMHgyNGYwYWY0NSwgMHgyN2EwNWQ1OSwKKwkweDg4NTNkYjFmLCAweDMwODM0NTdlLCAweDA2MzBiZTdmLCAweDBlYzdjYWZjLCAweDk4YjhjMmFjLCAweGNmOTRjZGY0LAorCTB4ZjQ3ZjUwNmQsIDB4NjE1Njc3YjEsIDB4MThiN2U5YmMsIDB4ZjYzYjI2ZTcsIDB4NjNiNDQyZGQsIDB4ZjRkMDQyNWYsCisJMHhjMWMwM2ZmZCwgMHg1YTRkODc0YiwgMHhhOWFhYzRmZCwgMHg0ZGFmZjJhMCwgMHgyYTI5MzU2OCwgMHg1NjI3NjVmYSwKKwkweGM0ZDkzOWUxLCAweDEzMThmNzM4LCAweGZkOGVmNzhjLCAweDZmZWM0MmIzLCAweGNlYTMxM2MxLCAweGU3Zjc4MDZkLAorCTB4YmVjODE3ZWQsIDB4ZGY2OTNhMDAsIDB4MDE0ZjM3MGIsIDB4YjI3OGJiYmIsIDB4NTgyZDk3NWUsIDB4ODY2NjhmOGYsCisJMHgzMzM5YmUzOCwgMHhkOWRhM2UzOCwgMHg4YjdjN2FhZCwgMHg3MThjZGQ0NSwgMHhkNTA1ZTNmNywgMHgzZmU4MjQ1MywKKwkweGNlYWVhMWMzLCAweGM0ZDhjOTE5LCAweDFiYWFmOWY1LCAweGM0NzZjZmM2LCAweDk4ZjE4Y2RkLCAweDgzN2RiZWQ2LAorCTB4MWYxOGQ1ZjgsIDB4MDNkZTY1NmIsIDB4ZDM3Zjc4NjYsIDB4YjY2ZTQzZTMsIDB4MDdlMzYyMDIsIDB4MzBhOGM2NzksCisJMHgyOWQ2NDFmZiwgMHhmNGRmYTdhYiwgMHg0NDYzZTQxZCwgMHgwZDU5ZjNiZiwgMHg5MzkyMDRmNiwgMHhmNGQyODg0MywKKwkweGMyZGVmYzE1LCAweGUzNGVmOTNlLCAweDFmNTdkYjdjLCAweGMzY2ZjMWQxLCAweDVlMjRmNWU4LCAweDU5MTk1ZDZmLAorCTB4YzMxMmRjNWYsIDB4MmEzNWJhZjksIDB4NGQ2NmZiZjIsIDB4MDNiZTAwM2YsIDB4OGI2ZDdmMTQsIDB4MDhjZjBmZjYsCisJMHgxZjkwMGZlYSwgMHhhNzkyMjRlYiwgMHg4MDdmNWM3NSwgMHg5M2I0Y2QxYywgMHhlZmVjNDZkYywgMHhhYjZiY2FkYiwKKwkweGFiNzlhZjc2LCAweGY4YzY4ZWU0LCAweDMwYzdhZTgyLCAweGNjZTM4NjgyLCAweGZhMGQzYmI1LCAweDAxN2RhZjM5LAorCTB4MzE1MWQ3ZTksIDB4YzljNzg3MmEsIDB4YzUzMDkzZjEsIDB4YjU5ODQ3YTgsIDB4ZGY3NDNiM2QsIDB4M2NkYTc3ZmUsCisJMHhlM2QzYWUzMywgMHg3NDM5MDEzZiwgMHg4ZWY5NjlkZiwgMHg5ZjllNGJmYywgMHg3ZjM4YzcyZCwgMHg5YzFkYmQ4OCwKKwkweDY3OGE1NGM3LCAweGZhMTdlYmY0LCAweGJiZmQ2YTczLCAweDVmMDRhZTcyLCAweDE1ZjA2NWVhLCAweGRjYmFmODRmLAorCTB4MTlmZDgzM2MsIDB4ZmJmZDJmZTMsIDB4YzE3ZGI1OTMsIDB4MjIzYWUzMjYsIDB4YTRmMzg2NDcsIDB4N2Y4MDI3Y2UsCisJMHgyY2ZlODg1MywgMHg5ZWE5ZjRkNiwgMHg2YmJkZDEwNywgMHgwNjRmZTUyNCwgMHgzMWU3ZTVjNywgMHhjNGJmYmU4MSwKKwkweDgxZjI1ZGRmLCAweDk2M2Q0NTNlLCAweGM1NmZiOTI3LCAweDcxZWQ3OWY2LCAweGMwZWZkYTJhLCAweGJmMWFmNTZmLAorCTB4M2E2ZmM4NDksIDB4YWFlMzViOWQsIDB4ZWJiZTY5ZjMsIDB4ZmE0YmIyMDQsIDB4M2FkYTQxZDksIDB4ZDAyNGQ3OWEsCisJMHg5ZTBkOTllZiwgMHg4N2U3MTVlNywgMHg3YmViYTdjMCwgMHhlYjU1YmZlOCwgMHhlN2U3M2M3ZiwgMHhmOWY4ZmI2NywKKwkweGNkMWY5NDNlLCAweDBlYWU2NzlmLCAweDFjM2Q1ZmJhLCAweDczMjg4NWZlLCAweGQ1ZWIyMTA5LCAweGViOGEzNmFiLAorCTB4NWFiYjc4ZWIsIDB4ODVlZGQ3ZmUsIDB4MjVkNzAxZjIsIDB4ZjgzNzdkMDcsIDB4ODRlMWMwNjgsIDB4MWU1MThiNzYsCisJMHg3Y2I1NWY1MCwgMHhiNjY0Zjc0MiwgMHg3ZjBjODliNiwgMHg4ZGU3MDBiMiwgMHhkNzRmMjM3YSwgMHg4Nzk1YmU5MywKKwkweDViYjIyNDBhLCAweDQ5ZDk3YTgyLCAweDM3YWU4YmY2LCAweGIwNmI1NjAzLCAweDJiYjViOWZkLCAweGFmNTFlYjBiLAorCTB4YzdlY2Y3NmEsIDB4YzdjNWEwOGIsIDB4NzM0OGUxMDYsIDB4OTI3N2JiNzAsIDB4ZGRmYzQ1OTcsIDB4NWRiYjFjYjgsCisJMHg4ZjM0MjNkNywgMHhlODBhMmI4ZCwgMHg2ZDJhODU1ZSwgMHhlMWQ0OWQzZCwgMHgzNDUzNzhhMywgMHgxMDQyNzFlMiwKKwkweDdkN2FmYTFmLCAweDE1ZTNhNWE3LCAweDgxOTdiY2VkLCAweGQ4M2FmNTFmLCAweGFjYTY5NTI1LCAweDdlZjhmZjYwLAorCTB4ZTdkZjA4NjYsIDB4ODQxZjM4MzksIDB4ZWFiYmU3ZDMsIDB4MGY4M2MwMjcsIDB4MGQ0M2YwZjEsIDB4Yzc1MDA5ZWYsCisJMHgwNDk4MmQ3YiwgMHhmZGU2MTdlYiwgMHg2YjVjNTBjYywgMHg1NmUwNDIzMiwgMHgxMDRlM2ViOCwgMHg1ZDhmNWM0ZCwKKwkweDA3ZTIyZTQ2LCAweDU4ZjdlZDMxLCAweDQxY2YyNGVjLCAweGU1YmI3MDdjLCAweGU3MTY4NzAxLCAweDNmMjllZWQ1LAorCTB4YTEzOTAyNjgsIDB4Y2YzZTM2N2QsIDB4ZDRjOTVkZWUsIDB4ZGRhZDZjZWYsIDB4NmYyZjRiZGYsIDB4NzQ5NmYyZDYsCisJMHhiNWUyYjE3YiwgMHhmODQ2Y2RkNCwgMHgxY2JiN2Y3OSwgMHg0Nzc5MmYxYywgMHg4ZWQwNjNkZCwgMHg1YzUxZWUxOSwKKwkweGI1ZTQxZmU4LCAweGY5OGZkY2NmLCAweGYwN2JkOTI0LCAweDdjODIwNDA3LCAweGU1YzJkZDllLCAweGMzNGJiODE0LAorCTB4NDNkYjliY2IsIDB4ZDg3NGFkZmIsIDB4YmJmYjM5NzUsIDB4MjhmYjIzY2MsIDB4Y2JhNDU3ZTcsIDB4NWE3MjIxN2QsCisJMHhiZTM4NTBlMywgMHhjNDE2N2U2MCwgMHhhM2Q0NjRhNywgMHg4M2Y3Zjk3YSwgMHhjZjFmYjNjMywgMHgzZTAzOTUyNSwKKwkweDc4ZWI2ZDUwLCAweGJmOTk2ZDZiLCAweDdjNzI4NmQyLCAweDhlNTBiOTk0LCAweDliZTY1YmJiLCAweDMxNWQyMTQ2LAorCTB4YTIxOWNjMTEsIDB4NzlmM2Q2MWYsIDB4ZjAyODc2ZTgsIDB4ZTVmMjBiNjUsIDB4MWExMGM3M2EsIDB4Nzc1MWY4NmYsCisJMHgxZmJjMGU3NCwgMHhjNjEzNzY4ZSwgMHg3ZWVjNWI3ZCwgMHgwZWZjMjNmNCwgMHhlMjA3MmVlZiwgMHgxNGVmNTY3MywKKwkweDhjYWQ0ZmRjLCAweDg1YjVhZWFlLCAweGRmNmJlZjNjLCAweDhmODllZDA2LCAweDFmZWUyMmJkLCAweGY4YzAzZjk1LAorCTB4N2NkYWYxYmQsIDB4MDJjZmE5YTAsIDB4MjBjODU1ZTMsIDB4MGY1NDU5YTcsIDB4NjU1YWRlMjAsIDB4M2VmN2JlZGUsCisJMHg1NjExYTVmYSwgMHhmOTdiZjIyOSwgMHg5NWJlZmQ2MCwgMHg1MzZkZjNmOCwgMHhmZDE3ZDIxYywgMHhjYjkzYjQyNCwKKwkweGVlMWE0ZjQ1LCAweDE2YzFiMjdiLCAweGUwMDNhZTE3LCAweDFmYmYxMDc3LCAweDA2YzkzMWI0LCAweDRhMWVmZmZkLAorCTB4YzRkM2QzZDQsIDB4NmI4ZTc0YTUsIDB4ZmI0MDk2NWEsIDB4OGY3ZmJhNDQsIDB4YTRmZDBiN2EsIDB4NGQxN2JmM2IsCisJMHgzYzJlYzhmYywgMHhkM2UzMGMzOCwgMHg0ZTljZDEwOSwgMHhlYjU1OGZkMCwgMHgxYjFkNmFjNywgMHg0OGZmYmY5NCwKKwkweDhlZmU0OTFmLCAweDE0MWRiZWJlLCAweGUwZTdlYTA0LCAweGQ3MzVkNzRkLCAweGQ4NDFmODg1LCAweDgzZmZlYTFmLAorCTB4YTViNDhjYzIsIDB4MWY5YWZmYzgsIDB4N2M2MWY2NDcsIDB4N2I0NWRkNzAsIDB4Y2UyMWFjNjUsIDB4ZWJlMGQzZTYsCisJMHgwYTNlNDc0OCwgMHgzZWQxNDdiNSwgMHg3ZDY3YjNlZCwgMHgwY2RmNTdmMywgMHhmNGUyNzY3YSwgMHg3MTVlMDA5NiwKKwkweDZlOGFjYjVmLCAweDZmZTgxN2ZlLCAweDM2YjNkODFhLCAweDhkM2VjM2MwLCAweGY4NjYwZTJmLCAweDNkNGZkYzQ0LAorCTB4ZmJhMDVjMzgsIDB4Nzk0NTBmZGMsIDB4ZTA5NWFhNzMsIDB4NWM1YTg5MzgsIDB4MzNjYjUxMjAsIDB4ZTVlMjhjNGYsCisJMHgxZWI4NjIwZiwgMHhhZjg2M2NmYywgMHhiY2E4MzdkNywgMHgxYzg4ZTg5ZSwgMHhiZGFkOTg0NywgMHhlYjg5YTlmZiwKKwkweDkxZjkzNWY3LCAweDY4NGZkMWYzLCAweGVkYWFmNWZhLCAweGZjMjExY2RlLCAweDhlMTNlZWJlLCAweGRkN2RkYTA5LAorCTB4ZTNjNzZmOTQsIDB4ZmUzNDBiZmQsIDB4ZTg4NzNiMDYsIDB4ZjhhYmI0MTQsIDB4ODc2ZTlkN2UsIDB4NGQ5ZjZkOWUsCisJMHhmNzgyMTNmNSwgMHgyYzA0N2JiZCwgMHg5ZjkwNGYzZCwgMHhmMTQ4YWVmNCwgMHg2ZjU4ZTJhMSwgMHg1NWE1ZTYyMiwKKwkweGNiOGU0NTQ0LCAweGY0ZjBkMjBjLCAweDM4YTMwZDU5LCAweGNmZGMyOWVmLCAweGI3YmZlNmNiLCAweDFiMjVmNTg1LAorCTB4MWQ3YmE0OWUsIDB4ZTI5Zjk5NGEsIDB4MWExYjQ1YmQsIDB4YzhhZWJmNjgsIDB4ODBhNzMwMmYsIDB4Yzc4Nzk5ZmUsCisJMHg5NDNhMzU4MSwgMHg3MTBkMTE2ZSwgMHhiNTUyYzVlNywgMHhlNDEzOWIxYywgMHhhZTFkZmM1YiwgMHg5YjI1ZjdkMCwKKwkweDU3ZWExOWM2LCAweDE4MTY5NzZmLCAweDdhODIzYmYyLCAweGJmZWM5MGE3LCAweDNlNzU3ZWYwLCAweDhmNGZiNzBmLAorCTB4ZjEwZDM4ZDcsIDB4ODYxYjA1ZWUsIDB4NzhjZGYyMTcsIDB4NzMyMTdlZGUsIDB4MzYxNzdjZDEsIDB4MTFlZjE5NjYsCisJMHhiMmI4NGM2ZSwgMHgxZWMxODI3YiwgMHg1Mzg0NDVmNSwgMHgzZmE4ZmQyNiwgMHhmN2Y4MGUzZiwgMHgxN2Y3YzQ4NSwKKwkweGUwOGMzYTdjLCAweDdiYzM4YmY4LCAweDhlMDE4YzVkLCAweGM0MzNlNjY4LCAweGRmZjMyNmNmLCAweGY4ZjFiNDI5LAorCTB4ZWY4ZmYwMjMsIDB4N2U0MDc2NTIsIDB4MDdmNTc3Y2MsIDB4MWZjMDFkYWUsIDB4ZmE4N2ZkYzgsIDB4Yjk5Mzc5MDMsCisJMHgwMjRkNjVmZSwgMHg5YzRjZTBlNSwgMHg2NmNmYjQ2YSwgMHg2ZTc1ZjBjNywgMHhjMWI0NGM3NiwgMHg2NzlhMmIzZSwKKwkweDZiNTczNzZjLCAweDc3NmI1NzM3LCAweGE4NGEzOGI5LCAweGExNjQyNjVkLCAweGU5ZmRlMzNlLCAweDcxOTUxZmJmLAorCTB4ZmZjYTZkZmEsIDB4ZWRjMzEwZGMsIDB4NmVhYTlmZDcsIDB4YmJmNDBjNmYsIDB4ZDA3NzNiNTYsIDB4ZWZkYWRlNmYsCisJMHhmNzM1YWQ0YSwgMHg1ZTUyODVlNSwgMHgxZTZmZTZlMCwgMHgwOWRmYzNhYywgMHhmNjAxZGRlOSwgMHhmY2MxZTgzZiwKKwkweDdiYTBkZjY3LCAweDZlZWZmNGJhLCAweGI0MzJkMTVmLCAweGE5NTRmMDA4LCAweDhiYjk3M2M5LCAweDE1ZGNhZmNmLAorCTB4M2Y0MTg3OTAsIDB4YWUxY2U1MjksIDB4ODI3ZDk2YjQsIDB4NWE1ZGYyMTQsIDB4MjJiNzZmMDksIDB4MmZmMDZjYzYsCisJMHhmZmQ1YTI3ZiwgMHg2NTQ5YzYzNSwgMHgxODQwNDk1YSwgMHgzNjUyZWQwNiwgMHhlYzI0MTE2ZCwgMHgwYjU3N2YwZiwKKwkweDY2YTk0OWUwLCAweDkzZGZkMGZlLCAweGVkY2YxOTRhLCAweDZmYzdkYjlhLCAweDA0ZTYxNjE2LCAweDlhNjhkMGYxLAorCTB4NWM2MmEzOTEsIDB4ODVkYTMxMzUsIDB4YWE0N2NjZWIsIDB4NTBmMTBlYjcsIDB4Y2U4MDUxZmUsIDB4YThmYzRjNDksCisJMHhiZGJiNDI1ZCwgMHgyM2Q3NzU1YiwgMHg3MDc4ZWI3ZiwgMHhhZTBhNmE4YSwgMHg3MTFmZDFhMywgMHhmY2ZhOWIzOCwKKwkweDMwYmViZTYyLCAweDQ3NjZhOGY2LCAweGU5NzZlYjM3LCAweDQyZWRjNjYxLCAweDU3MTJhNzVhLCAweDNlZmMzMDhlLAorCTB4YjY5YzYyNjEsIDB4ZWYzMjI0NGUsIDB4MzdkYTg1NGUsIDB4YTMyN2EyMzIsIDB4Y2NhZTI0ZjksIDB4MmM3NmU2NmUsCisJMHgyY2I0ZjdhNywgMHgzZTdjMTZjZiwgMHhiMWM4ZjA2ZCwgMHhkNjQ3ZGY3OCwgMHhiZjg0ODBkYSwgMHgyNmRhZmUzYiwKKwkweDUxZmJjNDUzLCAweGMzZmMzNTlhLCAweGY5YzU5ZTNjLCAweDljYjhmM2U5LCAweDk5ZGJkMDVlLCAweGU4NGY4ODA3LAorCTB4M2QzZDEwZjIsIDB4ZDhjMWRmYjIsIDB4ZmYzZWY0ZTMsIDB4ZTk3YmY4ZDksIDB4OTk3YWNhZmUsIDB4Yzc0ZTRmN2UsCisJMHg2OWVhYjc3ZiwgMHhiNGE2YmM0MSwgMHgzNzA4MTY2YywgMHhkYzdhNzhkYSwgMHg1Y2EzOWYwZSwgMHhlNzhkOTcxZSwKKwkweGZiOTQwNzNhLCAweDE2ODczYjE1LCAweGJkN2RjYTg1LCAweDFjZDlmNDRjLCAweGRiYWZlNzk2LCAweGUxODg3ZmY3LAorCTB4NTg5MGVhZWIsIDB4NGJjNDNlY2YsIDB4OGEzYWRiNjUsIDB4YzJkOTJjZWYsIDB4NDA2N2Y3N2YsIDB4ZmUyMTVjZmMsCisJMHgwN2VlMTI4NCwgMHhmYmUxY2Y5NCwgMHg0YWNmZjk1ZSwgMHg3YWIyZmY0NCwgMHhlNWFjZmJmZSwgMHhiOGYwNzdkYiwKKwkweDBiOTk4ZmNlLCAweGNiNzk0M2Y1LCAweDA3MjhhMTBlLCAweDg3NzMwNzdmLCAweDlmMDQyOGIwLCAweGNhN2VlNWE5LAorCTB4YWVjNmJmODMsIDB4NWJkNzFmY2IsIDB4NzE4ZWZjZTEsIDB4MGU1M2I0NjIsIDB4ZTg3ZWI4ZDksIDB4Yjg3YzU3Y2MsCisJMHhmNjY5ZGMxZiwgMHhjZWJiNjM5NiwgMHhlNjE3NjhlNCwgMHhmZmY4ZTk3NywgMHhlOTliOGVmZCwgMHhhNzdkYjVkYywKKwkweGEzNjU4MDI1LCAweDhhYzkzOWE5LCAweGNhZDcwZWZiLCAweDZlYWJlNDJlLCAweGU5MTI3YmQ1LCAweDVhNzkyNzEzLAorCTB4NzhkOGZiZjEsIDB4YmUxNmFiYmIsIDB4NThkODVhNzUsIDB4M2M3MmI5NTUsIDB4OGZlMzBjNGMsIDB4NzJlNjNmODksCisJMHhmNDNhYTQ5MywgMHgyNGIxODZiYywgMHhlYjlkYWEzNywgMHg2N2Q3MTMyZCwgMHgxZTdjY2M4NywgMHhmNzg3MTkzYiwKKwkweGIzZWUzMTA3LCAweGUzODc4NzI0LCAweGYyOTRkYzY4LCAweGNhMWY5ZDAwLCAweDcwZDNiZDM4LCAweDVmYzgzMGNlLAorCTB4MWI3ZGJmZWUsIDB4MmMzZmZmN2UsIDB4MDAyODRiYTEsIDB4MDAwMDI4NGIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCisJMHg3ZGQ1ZmYwMCwgMHhjNTU0N2M3YiwgMHhiZGRjZjhmNSwgMHgwZGQ5MGFmYiwgMHhkYzNiZjc5YiwgMHgyNDI4MGMxMCwKKwkweDAxMDQ5ZTZjLCAweDg3ODQyNGQ5LCAweDI4MDI2ZTIwLCAweDQ3Nzk2YmM4LCAweGQyMDI2YzkyLCAweDZkZmFkMGZlLAorCTB4ZTUzMTgzMTYsIDB4MTZkNDZiNmIsIDB4ODgyZWE5NDUsIDB4ODM1YWI2OTYsIDB4YjgwZDA2YTIsIDB4NDdkNjIyMjgsCisJMHgyZDhhYTUyMywgMHgyMjIwYTVkYSwgMHhmYjFiNjQ4NCwgMHg2ZmNiNTZjMCwgMHhlYzk5OTljZSwgMHgwZjBkOWJkZSwKKwkweDdjZjlmYjZiLCAweGRjYzk4ZmUxLCAweGU2NzM5Zjc5LCAweDljZTczMzljLCAweGI1MzMxZDk5LCAweDIyOGNhOGNkLAorCTB4Mzg5YWE2YTQsIDB4ZmQyZDM0YmMsIDB4ODRlOTBlZTksIDB4ZjAwYjkwODUsIDB4ODMyMTIyNmYsIDB4ZjEyMTMyNmMsCisJMHhiZDNjYTQ4NCwgMHg1ODJjNTI0ZCwgMHgxYzVhN2ZiZSwgMHgwNTI2MjdkNiwgMHhhZWQ4NGJiZSwgMHhhMGFmOTY4NiwKKwkweDg0MjI1YmE5LCAweGEwZTQyNThjLCAweDMxY2M3ODgxLCAweDJhZThiNDg0LCAweGZkNjhkOTQ3LCAweDdiNDg4NDk2LAorCTB4NjYzYjJkMTMsIDB4NjhkYjQ1NzMsIDB4OWQ2Mzk2N2YsIDB4ZWFiNGFjMDcsIDB4YTMzZTYzOTgsIDB4ZGE0YmY2OGIsCisJMHg0MjY0YzdlOSwgMHgxMjEyMzBkZSwgMHg4YzFkZGI0MSwgMHg2ZGQzZWQ2MCwgMHg0MjIyOTA3NCwgMHgwNzg5MWIyNiwKKwkweDIzM2QxYmJmLCAweGMxZGZkYTE0LCAweGJmYjA4M2ExLCAweGE2ZWFiNzk3LCAweGMzN2I2OTdhLCAweDE5ZDhiMjIwLAorCTB4OWI3NGVmMzIsIDB4NmNhNWRiMGUsIDB4ZThlOTIxZGQsIDB4NWE0OGI4ZjcsIDB4NTEzZjMyMWUsIDB4NTk1YjAxZWYsCisJMHhjYzY3Y2MyNiwgMHg0Mzg0NGVkNCwgMHhhZTNkNTZkZCwgMHgxY2U4YzJhNywgMHhiMDU0NjZiNiwgMHg4ZmU4NjhkZSwKKwkweGU2ZWQ3YmQ2LCAweGZhN2U4YzRmLCAweGJkMmZjN2ZkLCAweGJmNTAyNDZmLCAweGMxYjQ3MjU1LCAweDM3ZGY1YmZjLAorCTB4YTlhMWM5Y2UsIDB4NDkzMmU3ZTcsIDB4NjEzYTY0MjAsIDB4ZjBiZjM2ZmYsIDB4ZGZhMTUxYmUsIDB4NzBhNmVmYTcsCisJMHg3NmVhZjVhMiwgMHhhMzJmZDJlZiwgMHhjNWE5NTc2OSwgMHgyNDI2OGQyMywgMHg4YjZiY2NmMywgMHhkZWZkMjE0OCwKKwkweDc0MTEyMjY2LCAweDU3MzZkZDZlLCAweGZiY2U4ZDkxLCAweDBlNTM1ZGNkLCAweDU4ODQ1MTQ5LCAweDIwZjkzMzlmLAorCTB4YzQyMWYwMTUsIDB4MDZiNGUxOWYsIDB4M2E1MjI1ZTcsIDB4NzIyZmNlMzAsIDB4MTBiM2ZkMmEsIDB4NTVlZjQ2YjIsCisJMHg5NWRkZjA5OSwgMHhiN2ViNDU1OSwgMHhjY2Y4MzBjNiwgMHg0MmUwY2MxZiwgMHgxNTdiZWMyYywgMHgwYjgwOTc1ZiwKKwkweDhjMGE3ZjFkLCAweGRjZTU5MTVmLCAweDI0NTRmZDAxLCAweDMyOWJkODQ2LCAweGFmZjk5ZTYxLCAweGViZGMyOTk5LAorCTB4ODIzZDkyZWMsIDB4NjcyYjhkNTYsIDB4NTc5ZDBjZjAsIDB4NzliODRlNjUsIDB4ZTJmMWMwNmQsIDB4NDRmOGQ5NjMsCisJMHg3MTgwY2ZlZiwgMHhlZmIyZjEwOSwgMHhmOTIxNjkzMiwgMHgzODczZjZjMSwgMHgxZjc3ZTliZSwgMHgzYTg2NGVmYiwKKwkweGQ3ZjM4MjczLCAweDRkODM2ZmUyLCAweGU4NjFmYWMyLCAweGEzYWMxMTZjLCAweGM3Y2Y5OGY2LCAweDBmNTNhY2U4LAorCTB4ZTY3OTk2NzQsIDB4ZDA0M2UyMzAsIDB4ZWFiNmNmY2QsIDB4ZDVmZDE1MzEsIDB4NWZkODhjZDksIDB4NzA4ZjRkOWQsCisJMHgxYTc4MGNkOSwgMHgyYzAzNTM0YywgMHhjYzFiYTY5YSwgMHhjNzg1MGY1ZSwgMHgxZjI2ZjM5YiwgMHg3ZTI5NzI5MiwKKwkweDIwZmEzMTZlLCAweGI0Yjc0MzdkLCAweDQ4ZGZjYTE2LCAweGU4YjdlMzYxLCAweGRmMjE2Yjc0LCAweDM0ODU5NzcyLAorCTB4NmUxZDVlMjEsIDB4Mzc2YmNmOTgsIDB4NmE3ZTIxNDcsIDB4MjZiZDFhZTcsIDB4OWY4ZmNmZGEsIDB4NjNkZTU4OTcsCisJMHg2N2ZhMTJmMSwgMHg3MmY2NmJhZCwgMHgyMmUyNDc2OCwgMHhmZTAyNGZlYywgMHg3MzhjMDc1YywgMHg0YWU5ZmRhYywKKwkweDUxYmY2ZTc5LCAweGI3YTdkZmExLCAweGYwMjdmZGIxLCAweGU4YzZkYjUwLCAweDAxMDdlYzRiLCAweGJkM2MyMGQ3LAorCTB4ZjAyNGZkYWEsIDB4OGRiMDdmMzEsIDB4MTdhNTA1ZDEsIDB4Y2VjZDc3ODAsIDB4MzM0OWRiMDgsIDB4MDEwMmViMWIsCisJMHhlNTU2OGNmYSwgMHg2ZDkzZGJlYiwgMHhmMzA0NDcyNywgMHhkMDA3ZjAzNSwgMHg4MTYyMGVjMSwgMHg3OWYyZDY3OSwKKwkweGVlYjlkM2NlLCAweDY3NTVmZDgzLCAweDUwMzQxZmY2LCAweDBkMWYxNmQ0LCAweDg4MWY3ZWUwLCAweGZmZDY2YjdlLAorCTB4MDE2NGZiM2EsIDB4MGU5M2FiMjEsIDB4YWRmNjJhNjEsIDB4N2Y3YWE4NjEsIDB4NmY3OGU1NmYsIDB4N2JiNjk0ODIsCisJMHg0ZDRkZDM4MiwgMHhjYmVlMWI2MSwgMHhiODBkOTM5YSwgMHgxOTUzMmQ5ZiwgMHgyMzFjYjM1ZiwgMHgxMzNjNTA4ZSwKKwkweGRlYmU0M2YyLCAweDQ1N2RiMTdiLCAweDk5NjRkYjY0LCAweDcxZTJiZGMyLCAweGZhNDRkNmM5LCAweGFiYTQ0ZmNmLAorCTB4YTM2Y2UyMjQsIDB4ZjViNjdkZmQsIDB4MDAyNWE4ZjUsIDB4YzgyZWFmZGYsIDB4MzdhZTk4YTQsIDB4Mzc3N2FkODIsCisJMHgzYjVkM2JlNywgMHhkZTkxYzAyOSwgMHhjYzI0OGMxYiwgMHgzZmI3MmY3YSwgMHgwMTIyM2JlMiwgMHhlYzM4NmIzYywKKwkweDFmMmU5ZWJiLCAweDE3YTUyOWZiLCAweGY2YzFjZWNmLCAweGNmOTJlOGFiLCAweGY2ZWIzZDNlLCAweGJiYmNlOTRmLAorCTB4Y2JiNDRjNzYsIDB4NGU0ZDM2NDAsIDB4N2M0MDlmYTQsIDB4YTUzYjdkODQsIDB4NGM5OTM4OWYsIDB4MzdkZTI4OTUsCisJMHgzNTFlYmRiNCwgMHhmY2ZiYjY4ZSwgMHg4MWYzYTM5NywgMHhmN2NkYmY2ZiwgMHhlNWU3OTlmZCwgMHhiYjk3MDBmNSwKKwkweDc1ZWNmNjdlLCAweDk1ZTM1ZTUwLCAweGNlMzA0ZDYyLCAweDk1ZmZjN2NlLCAweGRlYTlmYjQyLCAweDI2MTAwZjUxLAorCTB4ZDU3Y2JmNGQsIDB4NzRmNWE3ZTgsIDB4ZmJlYzZkZGUsIDB4YTgzNmMxY2UsIDB4ZjcxM2Y5ZjcsIDB4NmVmMDA3NWYsCisJMHhmMmMyNmI2YSwgMHhjMzZjNGYzMywgMHg3YjNmNmJmYywgMHg2ODNmZGY3NiwgMHg5NDY3NWFiZCwgMHg3OTlkZWExZCwKKwkweGE1ZTIzZjdlLCAweGMwNzdhNWQ2LCAweGViYTIwNzdhLCAweDMzZjZiYmNkLCAweGUxMjZkOTdlLCAweDE5NzMyMzdlLAorCTB4MmQ3NDEzMWYsIDB4OWZmM2Y3ZTgsIDB4MmExYjFlMmQsIDB4MTZmN2M0MzcsIDB4ODMzYjk3MjMsIDB4Y2IzOTFjOTgsCisJMHg5OTRkNmZmNywgMHhiM2QyMDVhNSwgMHg4NWNjNDRjZiwgMHhmZThkYmFmNSwgMHhjZjk4NjhlYywgMHgxZjE3NDYyOCwKKwkweGI2ZDQ3ODcxLCAweDJkYjgzMWFkLCAweGY5ZmIxZWQ4LCAweDQ4N2JlZTgwLCAweDllN2QyODczLCAweDZiNGVmNGEyLAorCTB4MDA1MGI4ZWQsIDB4ZWIwYWZkZTMsIDB4MTEyNTdhZDMsIDB4MmYzN2JlMTQsIDB4N2NjMTJlMzgsIDB4MTgzNTQ3MjIsCisJMHhiZjllNzA2YSwgMHhkNTc0ZTU2NCwgMHhlYmM1ZTVhMSwgMHhlOTZhM2QxOCwgMHgwNTliMGJlMCwgMHg5MDdkOGJlYiwKKwkweDRkMzJiYmIyLCAweGIyNjAzZTQxLCAweGQ2Y2UzZTMzLCAweDZhZWQ1Mjk3LCAweGQ3ZWZkMmIyLCAweDY1ZDk3M2FmLAorCTB4NGY5N2M3OGEsIDB4NGE5YzllMWYsIDB4MjExYjNmZjMsIDB4NjVmZTIwMTUsIDB4OGYzOWM5ODksIDB4NWJhOWM3MDUsCisJMHhkMDRlNDY1ZiwgMHhkOWEyZWFmOSwgMHgxMWIwNDk3ZSwgMHgwN2M4YjVmZCwgMHhkN2JhMzFiNiwgMHhmMjA1YmQxMywKKwkweDg5ZjIwMGZhLCAweDA3MmUxNmJhLCAweDEyNzliMDc3LCAweDk2NjMyMDczLCAweGFlNTlkYjE1LCAweDgzY2UwOThkLAorCTB4MzA1OGIzYjYsIDB4MjliOGM4MWYsIDB4Njc4ZWU0MDcsIDB4YzUxZGNhMmUsIDB4MjMzZGYzODgsIDB4ZTRmMTAxZjgsCisJMHhlZTA5Y2MyZSwgMHg3MTFkMDRiNywgMHg4YzEzZmUwMSwgMHg3ZTMwYjUzNCwgMHg0ZmZiNDk1MywgMHg4YTRkMmU4ZiwKKwkweDA5YTYwYTJlLCAweDE2Yjk1ODgzLCAweGYyZjBiNzRlLCAweDkyM2I0NTFmLCAweDNiNWUwMWEyLCAweDYwZjI1NTYzLAorCTB4ZGFmMmJlMjAsIDB4NmU0Y2RkY2QsIDB4ZTkxYzcyYmYsIDB4MDg3NDBkZDAsIDB4YWE0ZWJiZTMsIDB4NjQ3MmY2ZTQsCisJMHhmNzBlOTRhZSwgMHg1YzNhNDcxYywgMHhhYmY4Y2VkZSwgMHhiOGQ0YmRiYiwgMHgyNTliYTY4YywgMHhlZmU2MTczMiwKKwkweDc0MDRmNGU2LCAweDliZjlhNzY0LCAweDdkNzFhM2EyLCAweGQ5ZmNlYmVlLCAweDM5YmFhN2MwLCAweDYxZWY3NWRkLAorCTB4NGU4NmY2ZjQsIDB4YmNmODAxZTcsIDB4MzZlNDdkYjEsIDB4Zjk1YTA3OTAsIDB4MTEzYjU1MjgsIDB4NmY4YTZlZGYsCisJMHhkNjdhMDQ5MywgMHg2N2EwYzNiYSwgMHgzYjEzNTVkNSwgMHg2ZWY3NTdlYywgMHgwODFhMWZiZSwgMHg3Yjc3MDdlZSwKKwkweDJmZTg3MmU1LCAweDVkOWE2ZTM1LCAweDk5MmY1MDk2LCAweGVlZjM0YTljLCAweGZiMDQ1MjVhLCAweGQ5NmI2NTJkLAorCTB4ZDIwYmEwMWUsIDB4MjBhYjkxMmUsIDB4MGRkY2VkNWYsIDB4YWI4ZmFmZWQsIDB4MjA5OWNiYjMsIDB4OTkyN2I2ZjcsCisJMHg0N2ViZmQ2OSwgMHhjZGZiNjMxNCwgMHhmNDI5NGFlOSwgMHhiNjIwYTllNywgMHg3MDZmMjEyNywgMHg5Y2RiM2NhMSwKKwkweGYyMGVkMjNjLCAweDg4ZGFlZGNlLCAweDA2NTExNzdhLCAweGI4OWNhMWQ5LCAweGJlYTE2YmY0LCAweDZjODBiM2RiLAorCTB4ZTNlY2MyOTIsIDB4Y2IwMzkyM2QsIDB4MDhkZTkxYmQsIDB4M2I3YTdlZGEsIDB4ZWRkYzdmZDMsIDB4MTM5ZjFmNmMsCisJMHhhMWE5MTFmMCwgMHhkNzhjMTE3MywgMHg3ODg5ODJmZCwgMHhiZDlkMjBhNCwgMHg5MzBhNjdiOSwgMHg1MDlhMmZiMywKKwkweDc0NmQ5ZWNlLCAweDM0NTQxMzkwLCAweDEwNTY4YzhmLCAweDM1OGUwMmFmLCAweGEwM2E5OWFkLCAweDk5NjY0MjViLAorCTB4ZjhjYjFlNjAsIDB4NGMwZDVhM2MsIDB4Mzk3MzQ0NmUsIDB4OWIyZjc1OTAsIDB4MWZiZTcyYzcsIDB4NzhlYjQ3OTYsCisJMHhhZmZiZTQ2YSwgMHg5YjA1Yzk5NSwgMHhlMGU0MTcyNywgMHg5MjFlM2UzOSwgMHg3Mzk3MDI0NSwgMHhlNWJhZTg3NCwKKwkweGI1MjdkYzNlLCAweGUyZmViMzRmLCAweGRiYmM4ZTRjLCAweGU4NTVlODQyLCAweDZjN2E1YTQ3LCAweDZjYTZlM2UyLAorCTB4MzMwMTIwM2QsIDB4YTU1YWQ5NDksIDB4NTdkN2U3ZGEsIDB4NWQzZDVmMTMsIDB4NzU1YmY1ZTcsIDB4YThiOTg5YmUsCisJMHhmYzgyZGQzNywgMHg2YzkxODM3YywgMHg3N2Y3ZmE5NywgMHg1YmUzMzQ0ZiwgMHgzY2NlYjExNSwgMHhjZGQ3ZTQwOSwKKwkweGZhM2ZkNDE2LCAweDg3MjBlOWY2LCAweGI4ZjQwMjJlLCAweDg0ZGVjOTdjLCAweGVhMTY3MGFiLCAweDA5ZDNiZDY4LAorCTB4ZWRlMDNiNTYsIDB4NWE4ZTFjNDcsIDB4YmRhZmFiN2QsIDB4ZDE5YzBmNDYsIDB4NDMyNWM5ZWEsIDB4NDE4NmU5NjksCisJMHg1NDllMDE3MywgMHhhMTk4Yjc1ZiwgMHhhN2I2OGQ5ZCwgMHg4ZmI2MTJmNSwgMHhmMjEzNjI3YiwgMHhmN2VjMjZhYiwKKwkweGViMWI2OGY2LCAweGQ4NTlkNjI3LCAweGNiMmUyYzAwLCAweDI3Yzk4ZWI5LCAweDdhZGMzZGFiLCAweDllODVhM2QyLAorCTB4MDc0ZjI4YmQsIDB4ODJkYjMzZjQsIDB4YWZjN2UxZmIsIDB4YmQxOTRiNDgsIDB4MDEyODQxNTEsIDB4NDFmZGIyM2QsCisJMHg1Mjc4ZmVlOCwgMHgzZDQ0N2E0MSwgMHhmNGUwZGRjYSwgMHhiNjQ3YTc4NiwgMHhhZjU0ZGM1ZiwgMHhkMjliM2QwMiwKKwkweDI3YTY1YWUzLCAweDRmZGIwODViLCAweGE3MjMyZThjLCAweDdjMDA3OTMyLCAweDE1OWY1NDJiLCAweGVmYmI1NGZiLAorCTB4ZWRmNmZkMDUsIDB4ZWZkY2NiZmIsIDB4MWZiNjA2ZGQsIDB4ODAxYzI5YmIsIDB4ZmNlOGZiZGUsIDB4OWJlNzQ2NjUsCisJMHg0OGZkZDAzNiwgMHhmZGQxMzdjYiwgMHhmZmMyMTRkOCwgMHg5ODFmZTdiNSwgMHgwNDA3OWMyNywgMHg3MzY2M2RiZiwKKwkweDc0NWYwMDc2LCAweDE5YWI3ZjZmLCAweDQ3ZjM5NmM5LCAweGM4M2ZjYmY3LCAweDY1ZGU5OGJlLCAweDVmYjRjYTg2LAorCTB4YTFhZmRkMzMsIDB4ZTBhNjYzZjQsIDB4ZWE2M2U2YjYsIDB4YjkxMTM5MDEsIDB4ODk0N2FkNWUsIDB4MjY2ODgzZjQsCisJMHhkZWIxYmViZiwgMHhhM2QyNDIzOCwgMHg1NWYxYzNkZSwgMHgwMDdkNzNhYiwgMHg0NmY0MWU3YywgMHg2MzI0MTE0YSwKKwkweDEzMWJkMzNkLCAweGRlMDBlNjQwLCAweDQxN2E0N2I2LCAweDIwNDg0ZTNmLCAweGNjYzJlN2FlLCAweDY3ZGYzZjY3LAorCTB4ZmNlMjlmMDIsIDB4ZWFjNTEwOTAsIDB4ZmY3ZGYyZjcsIDB4NGZmN2FmMjksIDB4NGI5Yzg2OWUsIDB4M2EyODNmNzAsCisJMHgwZjIyNzFkNywgMHgzYjQ0OGYyYywgMHgxNzJjMmYzYSwgMHhkNzNiZTlmMywgMHgxMzdjZDk5OCwgMHhiZWRlY2FlZSwKKwkweGMxOGYwNDI5LCAweDNlNzU3NTdkLCAweDVlZWIzN2UwLCAweDI1YTk3ZTlmLCAweDhiOTA4ZTM4LCAweGY5ODFiYTVhLAorCTB4ZjU4MWZjODMsIDB4YjgxYThlNTQsIDB4N2U3ZWViNWUsIDB4NzFkMGQzM2UsIDB4N2I1ZmRmMDQsIDB4YjQ4MmI4YTgsCisJMHgyYmZiZTBkNSwgMHg1NjM1YzdlZSwgMHgyNTIyZmEwMiwgMHg5ZDJjNDcwNywgMHhlMWJlZmQ1NywgMHgwODhkMWY2YywKKwkweGVhZmI0MzY0LCAweDMxNGRkNzU4LCAweDkzMzFkZmI0LCAweGRmYTBmZWY4LCAweGEwOWNlMGFiLCAweDBjNTMxZTI3LAorCTB4ZjVlMGRkZTAsIDB4ZDNmOWUwODcsIDB4OGY3ZmQ2MTgsIDB4ZTk5MWVjZDUsIDB4ZDYyM2I4ZmUsIDB4M2RlZDBkMTUsCisJMHgwM2VlYzQ2NSwgMHhlNTA3NzMzOSwgMHg4OTZmYjAyNywgMHg0ZGY4MDhhZiwgMHgwMTQ3ZjEzZCwgMHg1ZDU4Yzc5YywKKwkweGJmNDAzMWYxLCAweGM5MzY2NzcyLCAweGYyNTdmY2EyLCAweDYzZjdjMmU3LCAweDg0Yjk1MTExLCAweGZiNzFmM2Y2LAorCTB4ODU3OTlmNmYsIDB4Y2FmODVhYjYsIDB4MDNkZjg1YjksIDB4MjIzMTdhZmEsIDB4MThlMmU4MDMsIDB4NTEzYjk3ZDUsCisJMHg4MzA2NTZkZiwgMHg5NDRiZGRiZSwgMHhmYzMwYjZjMSwgMHhjYzBiYTQ1NywgMHgyMGJlYjMzYSwgMHg1NTY2M2Y5OCwKKwkweDdhNDQyZjlmLCAweDZmYzMwYzRkLCAweGUyMTRmOWZkLCAweDA5ZmU4NTg5LCAweDYyN2JiZjllLCAweDFmNWRmNjE0LAorCTB4NTZlYTgyMzAsIDB4Nzg4MzNlN2YsIDB4ZWIxZjdmNjgsIDB4OTg1Yjc1NDgsIDB4MzBjNTM3NzEsIDB4Yzg0ZGRiN2EsCisJMHhmN2U1NzBkNCwgMHgwZjc2NzFmMSwgMHhiMDMwZmI2NSwgMHg3ZjAyZjI0ZCwgMHhlMWJmNWVhYywgMHgwN2U1MzJjZiwKKwkweDNlYWNlYmQ1LCAweGU4MzE2OTRjLCAweDhmMzZkNTZmLCAweGM3ZjM0NzRmLCAweGQxMWY4YzBjLCAweGM1Y2RiMzdmLAorCTB4ZWI0N2I5NDEsIDB4MGUwM2M3ZTksIDB4NGIyMGY0M2MsIDB4MmU1MmUwZjksIDB4YmMzNTk2YjcsIDB4MTNkODI1ZjksCisJMHgzY2M0ZjVhYSwgMHhkY2IzZjY5ZSwgMHg0YTk4M2NlYywgMHgyY2IzM2U4YiwgMHhiZmI2MDI4ZiwgMHgyNWI3M2JmMiwKKwkweDVjNGE1YzgwLCAweDMyZWNjYWQwLCAweGY0MGQ5MjY0LCAweDQzMzFjOTVlLCAweDMxNzkxMGJlLCAweGZhOGY0YjNkLAorCTB4ZTI5ZmUyMzEsIDB4ZTcxODhiZWIsIDB4ODJmN2MwNGMsIDB4ODBmNTA0YzEsIDB4N2E0NWI3MDUsIDB4ZDA3YzIxM2QsCisJMHhhNWExZTFjYywgMHg3ZWI4NGY5YiwgMHg3NjdmZWRhNSwgMHhmZTgxMTk2YywgMHg3MzljYTIzYSwgMHhkYzE2M2U4MSwKKwkweGNmYzU0ZTc2LCAweDUzZmYyNWJhLCAweGFkNWQwMjhmLCAweDY0OWZkYWIxLCAweDQzMzg2NWRkLCAweDYyM2JmZWU4LAorCTB4YzQzYWYzYmMsIDB4Njc1ZTRmNTMsIDB4YTA0Y2ZhZjYsIDB4ODdjNjQwZGYsIDB4MzBlYWNmNjAsIDB4OTQwYTNjZDksCisJMHhhMmNmMTExYiwgMHgyOTFhOWZkZCwgMHhlNjBlY2JlMywgMHgzNjFlOWU5NywgMHgxOTZiZTgxOSwgMHhkZTAzMzdiMSwKKwkweDEyNDRiNTk3LCAweDAzM2YwODRmLCAweGMzZTgxODA1LCAweDNmNjA5ZTdkLCAweDNjZGUzYjRiLCAweGFkZGNmYzBhLAorCTB4MmM5ZDIzZjcsIDB4OGYxMDViMzUsIDB4OWM3YWYzZWUsIDB4NzQzMTY5MDcsIDB4OGE3YjQ1ZjksIDB4OGU1MTIzZmIsCisJMHg5ZTdkNjBkYiwgMHg5ZjQ3YzY3YiwgMHgyNjNmNDkxYSwgMHg3ZWI4ZWZkMiwgMHhmZGYwZWRkNywgMHhlMjI4YzhhMSwKKwkweDRiNzhmYTAwLCAweGYzYTcwZWY2LCAweDgzMmIzNWVmLCAweGVhYmMyODYzLCAweDQ2MGU5NDhkLCAweDczNGUzNzYzLAorCTB4ZDI0M2ZlODgsIDB4NzdmYzZhYWMsIDB4Y2MyNWY1YmMsIDB4NjVkOWI5NjcsIDB4YzJiZTM5MDQsIDB4MzJhN2NmNDEsCisJMHg2NDU3YzllMCwgMHhlZjhhMTUxYiwgMHg5MTg1ZjJmMSwgMHg0NWVmOGY5NywgMHg2YzdmYmY3YywgMHg2NjFmZjRhNCwKKwkweGUxYzdkZDFmLCAweGE1ZWEyM2RmLCAweDcxZjI3ZGIwLCAweDBlN2VhOTA2LCAweDRhNjg2YmQyLCAweDk0M2M3ZGRiLAorCTB4M2U3OWYzZTcsIDB4NjA0YmQ3OWIsIDB4OWY3YzFkZjksIDB4ZWFjYjljN2MsIDB4YzVmMWM3NjksIDB4M2IzNmZlMzAsCisJMHhlMDE1YjFkNiwgMHg4Y2Y5ZGI0NSwgMHgyMmZiMTc0MCwgMHgxNmI3YThiYywgMHhmYzA3N2U1MiwgMHhlYTNhNmQ2ZCwKKwkweGVkYWY5NGFkLCAweGM0ZDk3YWMwLCAweDRjZjU4ZDE3LCAweDAzNDg1NzI4LCAweGNmYjA3YmU1LCAweGNmODQxNDhiLAorCTB4Mjc0YTUyYTYsIDB4ZDdiMDNjYjQsIDB4MDRhZWRiNjQsIDB4YTlmMDJhZjEsIDB4OGM3YjYzYzUsIDB4YzNjOWVmZjQsCisJMHhkNDNlOTI1MSwgMHg2MWU1NDI4ZSwgMHhhM2IzMGM3YiwgMHhkMjdmNjExOCwgMHg5ZTk5MTg5OSwgMHg4NWYxMGMzNiwKKwkweDNlNWYyMjc0LCAweDYwOGM2ZWJlLCAweGY0ZmJhMDc4LCAweDdiZDQxOGI1LCAweGZiYTEzOTdkLCAweDk3YzcwNGU1LAorCTB4MGYxZjY3ZTAsIDB4OGFiNWUzNTIsIDB4NWU2ZGUxZTMsIDB4OGQ4YzUxNmYsIDB4MDA3YjRmYzksIDB4MzFjN2RkZjcsCisJMHgxNjVjN2VhYywgMHgwZjQyNDM5MywgMHhjYjg3MDNmZiwgMHhjODU0OWE0ZCwgMHhkNTUzMzE5NSwgMHgxYzRkYzVmYSwKKwkweDQ0YzUzNzlmLCAweDA4N2ViYzA5LCAweDg4ZjIxNWYzLCAweDM0NWYxN2YyLCAweDVlMGIwZmRkLCAweDIxN2YyMTM1LAorCTB4YjBkOTAzMWIsIDB4NjNiZDY4ZmYsIDB4MmMwYTZlNTgsIDB4ZTQ3MmE1OGEsIDB4MThkZmFhMjYsIDB4MjJkZGIxZjMsCisJMHgzY2VmZGY2OCwgMHg4NWQwNGEzZiwgMHgzZTljODA5NSwgMHgxODUzZDYyNSwgMHhlNTRmN2U0MCwgMHgyOTZiYWUxZCwKKwkweGJhNDM3Y2ExLCAweGQwMzdmZTM0LCAweGQ2OTRjOTNhLCAweGQ4NTYwYzg3LCAweDAzYTY0ZWY5LCAweDIwOGZlZDAyLAorCTB4ZTE0N2Y0MGEsIDB4Yjg1MGU3ZmUsIDB4YzYzYmM3NmIsIDB4MzE5ZmUwZTksIDB4OTZmMTFlOTIsIDB4OWY3MGYyNDcsCisJMHg3NTg1ZmZiZCwgMHg5Y2YyZWQyMSwgMHg1MWQxZWNjZCwgMHhjZWI4ZmZiZSwgMHhlOWZhMDE3NSwgMHhkNDJkZmRiYSwKKwkweDdkMTk4ZmNiLCAweDMwOTZhZGQ5LCAweDYzZGY0NmU1LCAweGYyYzE0OTBmLCAweDNkOTczZmM1LCAweDc2MmZjYTQ2LAorCTB4ZTRmZDc2NzcsIDB4YTVlZWJhNjYsIDB4ODYxZGIyOWQsIDB4NWZlNzdhNWMsIDB4N2EwMzFkZGYsIDB4MGVjMWE3NzUsCisJMHhkZjJhNDZlNywgMHhiY2MzZDVlZiwgMHg3OTFlOTgxYiwgMHg4M2E2YTc0YywgMHg5ZjU1ZGZiMywgMHgxOTYyZDI3MywKKwkweDgzZGVhOGJlLCAweDNiZTA5Y2ZhLCAweDRhZGY3ZTQyLCAweDVjODE1NzdjLCAweDQ2MWM0NjVmLCAweDY2YjRmZjQ4LAorCTB4ZTE0MjBjZDUsIDB4MGViMmMyYjcsIDB4NmJlN2QxZjksIDB4YmMxZWExYTcsIDB4N2NiMDc4OTIsIDB4NGZlMThiNTksCisJMHg0NTYxZjJhMSwgMHhlYWJmM2FhYiwgMHg1NmZlNzU2MSwgMHg2N2RmM2FhZiwgMHgyZjBmMmU3ZiwgMHgzMmM3YTdkZiwKKwkweGQ5NGIzZTNhLCAweGIwM2ZlMDNlLCAweDNkMDVlNGMxLCAweDk4YWY1YjQ4LCAweDNjYTRjYmQ3LCAweDI0ZjgxM2IxLAorCTB4NDc2MGZiOTUsIDB4NDhlMTE3NTgsIDB4NmViZWJlMDQsIDB4YzVlMjY5NmYsIDB4ZTdmNTdjZWMsIDB4MTBkZTIxYWYsCisJMHgzN2E4MjM3ZCwgMHg2YzZmMTJlNCwgMHg2M2NiN2VmZiwgMHhmNDIzODQxNSwgMHhlMDcxZjBhYiwgMHgyY2I2NzFiYywKKwkweGM2MjYzYWZjLCAweDEwNjUzZDBhLCAweDhiYmUyN2Y2LCAweDQ1ZTM4MjdlLCAweGNmZWEzY2UxLCAweDhmOTgwNzliLAorCTB4NWQ5ZmRiMDUsIDB4MWI5YzdlMTksIDB4YTliMWM2ZmEsIDB4N2RiMDY0ZTQsIDB4ZmM2YjkzMWMsIDB4YTNlODJkMWMsCisJMHg3ZTEyN2NmZSwgMHgwN2ExNzkxNywgMHgzMWE1ZGIwNywgMHhkOWE0OGFmZCwgMHhmOTA2NDU0ZSwgMHg4YjYzYjA5NCwKKwkweDIyNDI3MGZkLCAweDNiYjQ2NGU2LCAweGViY2ZjZmRkLCAweDVmYjA1Y2Y2LCAweDA4M2QwMDlmLCAweDY1MTRlM2Y2LAorCTB4NzE0ZTlmOWYsIDB4NjZjNmY3ZDksIDB4ZjcwNjg3ZWIsIDB4OTQxZDc2OGIsIDB4NDNmOGNlYWUsIDB4NThiMmVlZjgsCisJMHg2YjhlMWM2YiwgMHg1NzE4NzYyNywgMHhkYmEyZmJkMCwgMHhlOGJiMDYyYiwgMHg2Nzc4ZmY3YywgMHg1NDZiYTI3OSwKKwkweDMwZjUzZjI4LCAweGU4NTE4OWJmLCAweDljOTUxNjVmLCAweGJjMzkxYTI1LCAweGQ0MmRmZGFjLCAweDk1YmVhOGJiLAorCTB4ZDNlNzRjMGQsIDB4YmQyM2I3YmQsIDB4MDRjZTI0YWYsIDB4YmQ5ZWYzYTAsIDB4ZmY1YzMzYzMsIDB4ZjMxNWZjODYsCisJMHg2MjU5ZTU5OSwgMHg5YmE3OTgyMCwgMHgyYWJmZWU5OCwgMHgxZDU5OWYzZSwgMHg5OWQzZWY0YywgMHhjNzFjMDYxZCwKKwkweDAyNWIxNDQxLCAweDdjZDlhNTFlLCAweGQzZDRmMzI5LCAweGY5YmU4NGZjLCAweDkwOGU5MTgzLCAweDEyZmU3Y2YxLAorCTB4OWRmMGE3YjQsIDB4ZDRiMjUzYzAsIDB4MzZmMzA0OTUsIDB4YmM3NGI4YzEsIDB4ODI0ZGUyMDgsIDB4NWRhYzY5YjQsCisJMHhlNGEyNzQ4MSwgMHgzMDc5YjNkNCwgMHgwZDI2NGYzYywgMHg2NzVmNTA2OSwgMHg5ZDZjY2JmNiwgMHhkMDA5MDY3NCwKKwkweDk4NWUwZmJlLCAweGM2ZmNmMmI3LCAweDU2OGJiZGQ5LCAweDE1OGI3N2MwLCAweGNmOTE4OGY5LCAweGU1MmM0NzYzLAorCTB4MmZlNDY2ODcsIDB4YzliNzU4NjYsIDB4ZmQxY2ZiZTIsIDB4OTRmNTNjNjQsIDB4M2Q4ZmI4MjksIDB4M2JkYTA5NDMsCisJMHgwMjM2OTEwNiwgMHhlNzJjNWFlMywgMHgxYjU4YjAzYywgMHg4ZjkwNDliMSwgMHhlMGZhZjViMCwgMHg2NmNlNzBmYywKKwkweDIzNDZlOGYxLCAweDBiMTlkYzlmLCAweDY3N2E1MjdjLCAweGYyODVlMDI1LCAweDE5ZmY2NjY1LCAweGMzZWY1Y2E4LAorCTB4NzNlMGI3NzMsIDB4NGQ3ZTdjMzEsIDB4MTMyNWNmOWMsIDB4ZTI1ODg3MDYsIDB4YjAxZWYxYzAsIDB4NDA0MTljYWUsCisJMHg0OWQ2NTk4NCwgMHhkNDRiN2VkMCwgMHgyNWVmZjQ1NCwgMHg3OTY5ZTAwMCwgMHg4YWJkNTRlYywgMHhkNTNiYzU2ZiwKKwkweGVhYjljNGY5LCAweDlkNGJiMjdjLCAweDNmOTNkMzM3LCAweGNmOTI4YmU4LCAweDE2MjE3NDk5LCAweGMwMjM1OWNmLAorCTB4ZmNlMDYyZGUsIDB4ZWJjZjk5YTIsIDB4M2Q3NGE0MDgsIDB4ZmQzZTcxZWYsIDB4YmIxM2Y1OGQsIDB4OGVlZWJjZmEsCisJMHhlM2I0MTIzMSwgMHhkMGNkOTgyNSwgMHhkZTU3ZDUzZiwgMHhjYWZhNjU4YiwgMHg5NzI4MWUyNywgMHhmM2NmYzgwMywKKwkweGMwZjliNjI2LCAweDgzN2NkM2FlLCAweDdlOGJiZjY0LCAweDFiMmFiNjZmLCAweDNkNTQ5NGY0LCAweGM3NjYyNGQzLAorCTB4ZjU0YWRiZDEsIDB4ODY1YjdjYjQsIDB4ZTY4OWJlY2QsIDB4MWQ3ZWMxZWIsIDB4ZDViN2YzMGIsIDB4NDlmNjhkM2MsCisJMHgwMjQ3YWIxMywgMHhkYzhmZTBjZCwgMHg4MzY2YzliNiwgMHg4MWU1NzE3YSwgMHg4YmQwNDZjOSwgMHg3NmRiMTA1NywKKwkweGJmYmU4NjEyLCAweGNlODZmYmEyLCAweDUzYzgwOWY3LCAweDVlOWM0OGJjLCAweGYzMjkwZjIyLCAweDdjYmMwZDcxLAorCTB4YzU5ZGZjMDcsIDB4ZTE4YjEzZjIsIDB4NjVmZWNhNWMsIDB4M2E3NWU0NzUsIDB4OTBlMGVlYzAsIDB4NzdkNjJlNTEsCisJMHhhMTZlYmRlNCwgMHhjZWNkNjVlMywgMHhiM2JjM2I0MywgMHgwOTczZjk5YywgMHgzNDYzZjdkZiwgMHg5MDVjNmFmYiwKKwkweDhmM2NiMWNlLCAweDcwNzU4N2U3LCAweDg5OWM2ZWJiLCAweDc0NmQ2YmY5LCAweDM2NjY2Mjg4LCAweDhjNzFmYWMwLAorCTB4ZmM0NGVkZmUsIDB4NWFmMmZiNjMsIDB4ZmQwN2ZjMTIsIDB4NDdmYjA3OTUsIDB4NTgyOTM0M2UsIDB4NzQ2N2RjMWMsCisJMHhiZGIzN2NhOCwgMHgxYmQ2OTZhOSwgMHg4N2VkZjdhMywgMHhhNzhlM2M3ZCwgMHhhMzdkM2M3OSwgMHhiZjk0MDZmNCwKKwkweDYyOGIzYTlkLCAweDZkN2RiMWQ0LCAweDg2MTMwMmNlLCAweDE0YjgwNjUzLCAweDA0ZDA3ZWRiLCAweDdjOTA0Y2ZkLAorCTB4YmQ0YzY2OTgsIDB4NWZhNjA5YmYsIDB4ZDE0N2VkYzUsIDB4MDZlZjQ2NDksIDB4MTJhNjhlYmEsIDB4NzdiNDY3OGEsCisJMHhkODIwZjlmYywgMHg0OTA3ZTVhNSwgMHg4OGU5ZTAwMSwgMHgwNzM5Yzg0MSwgMHg3YTE1ZDM5ZSwgMHgzYTFhZmIxYywKKwkweGZkNDA2Yzk4LCAweDJhOTMyZmZjLCAweGQ1MDEzYmYwLCAweGQyYmJjZThjLCAweGJlMjExNmM2LCAweDc1NWYyYzBmLAorCTB4ZTM2YTNmMjgsIDB4YjMzN2U0NjQsIDB4NmFiZjMyYTYsIDB4NTdiMzVjZmQsIDB4MTBjZTQwOTIsIDB4YmJkMjc3ZTYsCisJMHhiMTBhNmYzMiwgMHhjNDNmMDg5NywgMHg3NzMyMDZmYiwgMHg0NGYzOTg1NywgMHg0ZmQzMWM2ZCwgMHgzYjMwNjZhYiwKKwkweGEzNDZmZDZmLCAweDFkNTM3ZmNhLCAweDMzNWVlY2M3LCAweDhjOGYyNmUzLCAweGZjYzQ3OTQzLCAweDVjNzE3OWE3LAorCTB4NDY0MTFiNmYsIDB4ZTEwYTlmMDAsIDB4YWY1MDQ1MjMsIDB4ODFlZGY0YWIsIDB4OWNiYThjZjgsIDB4OGUzOTk5ZjMsCisJMHhmZGVhMDMwMiwgMHhiZTA4ZGY5YywgMHhmNmM0MWNlZSwgMHhkMjQyM2NmMywgMHg5MzY3YWU4MSwgMHg4N2ZmZTQwNiwKKwkweDdlNDU2ZjRiLCAweDE4ZjExMzczLCAweDk1MWY2ZjAwLCAweDMxMDI3OGIxLCAweGQ1NTM1OWVmLCAweGE3MWNkMjdhLAorCTB4NWNmMzdmM2EsIDB4ZjBjNTFlYWQsIDB4ZTc5ZGM2MjEsIDB4MDk1Nzk3NTIsIDB4NWFhYTc4M2QsIDB4ZmZmMDVlMGYsCisJMHhiOTQ2OGFiZSwgMHhkZDU0Zjg5YSwgMHhlN2UwMjE4NSwgMHhjMDAwZjY2MCwgMHhlODczZjMwYiwgMHgxYmRjNmU5MSwKKwkweGJlYmMzZjk5LCAweDM4OGRlZjNkLCAweDEyNzc2N2Q4LCAweDQ5NzZjZmJlLCAweGIyZmZkMWNiLCAweDgyMTE1YTRiLAorCTB4YWY1YWQ0ZmYsIDB4Yjg2NDcyMDQsIDB4OTg3ZGQ4NTUsIDB4NzkzNGU0ZGUsIDB4YzNkZjgzZjcsIDB4OTExMjgzNTksCisJMHg0OWUzY2ViYywgMHg0OTNjNDAwZSwgMHhhZGJlOTA3ZSwgMHg1NzE2NTY2NSwgMHgzMGI1MWM0MSwgMHhhNDViMzQ5ZiwKKwkweDE2ZmVmNDFkLCAweDY1ZGEzZTVkLCAweDJhYWNhMjViLCAweDBkYTZmYTNiLCAweDEzZDQwNTRhLCAweDQ0YzU1OGY2LAorCTB4NmU5YzZkZjIsIDB4ZDc3NzlkYzIsIDB4YmFmZTMxYzUsIDB4NzE3NjYyNTksIDB4OWUzMzNjY2YsIDB4OWNiM2UzMmIsCisJMHhiYzQxM2YyYSwgMHg5ZDgyOGU0YywgMHgyMjljNjQ3MCwgMHg2M2ZkYTNlYSwgMHg1Yzk1YzFiMywgMHg0NGFmNTM0MCwKKwkweGQyMTcxMTk3LCAweGQxMWIyNjVlLCAweDRmZTFhOGFlLCAweGI0NzZiMWYxLCAweGNlMGZjN2ViLCAweDljZmQzYjQxLAorCTB4MmZiNDNjOGUsIDB4ZmQ4NDRiMTIsIDB4ZmZkODI5MmEsIDB4ZjRkYmQ5OWMsIDB4ZGY1M2E3MTAsIDB4ZGNiZjRkYjEsCisJMHg3YmJiYTQxMiwgMHg4ZDVjYjhlMiwgMHhhZjQwOTEyNCwgMHhlN2JhNzY3ZCwgMHg3YmE3Njg0YywgMHg1ZmZjZTc1YywKKwkweGEzNWFjYmEwLCAweDIxNzFlZDBmLCAweDA3ZGY4YWY0LCAweDM4YWI4YjkyLCAweDljY2ExOGJkLCAweGY5ZDA1NmYzLAorCTB4YjQ2YmJjZjUsIDB4MWQxOWY5YzMsIDB4ZTdmZmI0NmQsIDB4OWRhMzQ0ZjcsIDB4NTA0NTVmNTEsIDB4NjUyYzZkM2UsCisJMHhlYzA3YTQ3YywgMHg5ZjFkNzQ1ZiwgMHhmOWUzNTc0NSwgMHg4YWQ0YTM2MCwgMHg2NjNiYTNmMiwgMHg2YWYxZDIzMiwKKwkweDA3M2MwMWNiLCAweDc0YTU2ZjU3LCAweDU2OWYyMjE4LCAweDZiZTc1MGVmLCAweGRmOWUyNzQ4LCAweDQ3ZWU5ZjZiLAorCTB4MDUxN2M4Y2YsIDB4NTZlZjc2MWYsIDB4ZDRjMzIzYjcsIDB4Y2I4ZjM3N2MsIDB4N2RhNzdjOGIsIDB4N2Q0YzA1NTYsCisJMHg5ZDhiM2RhZSwgMHg4NjQxZTljMywgMHgxZGU4YTNhZSwgMHgyZWVmYjcyMywgMHgwMDhhOWRiMCwgMHg3NDk0ZmI1NiwKKwkweGM3YWRmZDMxLCAweGZiNjY1YTdhLCAweDIyODNjOTlmLCAweDZlNTY4ZTNlLCAweGVkYmQ3MTE1LCAweGUwYmZjYTNhLAorCTB4YjBmNDJhZmMsIDB4MDdmMmMyMjIsIDB4OTI3MjFkNzQsIDB4NDJkZjM4MmUsIDB4N2ZlODRlZGUsIDB4N2MwODRlNDIsCisJMHg1MjEwOTY5NSwgMHhhNzQzZjc0MiwgMHhjOTQzNGZlMCwgMHhlZDM3YzA1MCwgMHgwNDg5ZjcxZiwgMHhkODMxNDM5MSwKKwkweDdkY2UwN2JmLCAweDk0NzhmOGUzLCAweGI3MjAzYzFlLCAweDE3YjMzYTNkLCAweDZhNTlhYmU4LCAweDA2NjkzOTQwLAorCTB4OWJhNjlmM2QsIDB4ODNjYTE3MjQsIDB4MzIzZGFhOTcsIDB4NjkyYzdiYzAsIDB4ZDY4MzM1OTgsIDB4OGNlZTZmMWIsCisJMHgzYTUxMzgwNCwgMHgzZjRhMTIzOSwgMHhiMTk3YzQ0ZCwgMHgxMWQxNTI0YiwgMHhiZjQ1Nzc5NiwgMHg4NDhlOTYxZCwKKwkweGM0N2RmMzNjLCAweDc0ZTk5OGY0LCAweDA1NGZkMGM1LCAweDdhNjg3ZTM4LCAweGM4ZTc2MjQwLCAweGViMWY5NjI5LAorCTB4YmFkYmZkYTEsIDB4NTMyNzQ4NjksIDB4ZjMwZjU3ODksIDB4ZjFhOWIwYWIsIDB4OWQ0OTI1M2YsIDB4YTNmNGE2OWYsCisJMHg3MGMzOGMwZiwgMHgxZjRlNzg3MCwgMHgwODc3MmVhMSwgMHhmY2Q0NDc3ZSwgMHg4NTdjOTMyZSwgMHhjMWY5MTg3YSwKKwkweDVkODBlZmMxLCAweDE5M2Q3MjIxLCAweGQ1MGRmYTAxLCAweDZhMWY3MTQ0LCAweGI4ZWJlMGU5LCAweGYyNmZkZDZmLAorCTB4YmYxODVjNzUsIDB4MTNiNzBmNDksIDB4MmJmYzRiNWYsIDB4ZDNmYTk2OWYsIDB4ZWIxYmY3NTksIDB4N2ExMGE0ZTUsCisJMHg2NWUyZmIxNCwgMHg5MDdmOGIwMywgMHhhOWZlNjU1ZSwgMHhlNTE5MzMxMiwgMHg2NDJhZmEwMywgMHgzZmIxNDU3NiwKKwkweDhjZmEwNWFlLCAweDMxNWRkMjA5LCAweGNmMTE5ZWZmLCAweDE5MDg2Y2U5LCAweGExMzY3NDAyLCAweDUzMjdjMjNkLAorCTB4ZmVmMWU0YmMsIDB4Y2JiYTA1YWUsIDB4ZTIyM2VhMGYsIDB4ZDI1NGQxNWMsIDB4YTUzMmJlOGYsIDB4NzA1ZmQ0MmMsCisJMHhhNDdkMDlkZiwgMHhkMjZiNmE0MCwgMHhiOTFmMDI2NywgMHgxYmU2MDlhNywgMHhlMzQzNGY0MiwgMHg1MTJmODA4YiwKKwkweGRhN2RjMjdhLCAweGNiYWFjZTRmLCAweGYwMjZmNDM1LCAweDUyZTVmNDJlLCAweDM2NzQ4MGQyLCAweGVhNjBhNzViLAorCTB4ZjI4NTVjYWIsIDB4NWIzMmRjYjUsIDB4YWNkZmVkMGYsIDB4MDkzNmY0NjIsIDB4ZWEwYjMxZTgsIDB4ZGNhNWU5YWIsCisJMHhlOTZiY2VhYywgMHgwYmE4OGU5MSwgMHg5ZjRiNTcxZCwgMHgxMGRiZDEwMywgMHg1ZjIxMzdhMCwgMHg2ZjRkMmY2MywKKwkweDc1YmZlM2QzLCAweDdmMWU5YjdhLCAweGQyZDM3YTExLCAweGJiNWZlMDk5LCAweGEwZTU2YzIyLCAweDRiNTdkNzNmLAorCTB4ZGUwYTBmMjgsIDB4ZjkwNGQ2MWQsIDB4YTg5OTc1ZTEsIDB4YjY4YWVmNGYsIDB4ZGY1ZDdlYTMsIDB4M2IwYmNhYzAsCisJMHhiZGM0MzIxZCwgMHhlNWUzYWQ2NCwgMHhjODcyY2U5OSwgMHhlNWE3YWZkNywgMHgyM2EyZWJiNCwgMHhkODY2MmUyYywKKwkweGVmM2NhYzlkLCAweGFkZDc4NmFlLCAweDU4Nzg2N2EwLCAweDZmM2Y5N2ZiLCAweGI5NjhhMzk2LCAweDJmYjc5OWI3LAorCTB4N2M4NzJkNmQsIDB4ZmY2YjBiN2QsIDB4NDZhOWY4MTksIDB4Yjc5YTdjNDMsIDB4N2Q1ZmJlMDksIDB4MWQ5ZGE2NmYsCisJMHgzZWZlOTlhYiwgMHg5Nzc3YWY5MSwgMHhkOGViZGNmNCwgMHg1YmI1OTVhZSwgMHg4ODNjZDA3NSwgMHhlOTlmZjllMCwKKwkweDc1ZjFkN2U1LCAweGQ2Y2FkYzRlLCAweGZhZTI3NzE5LCAweDhiYTUwYWE5LCAweGVhMGYwMTE1LCAweGI1NzRhNzZmLAorCTB4MDZkZmM4YzUsIDB4NGE5NzNmMzgsIDB4NGU5MDY5YWQsIDB4NTIxN2VjYTEsIDB4MjJkZWQ5ODcsIDB4Y2M3ZTY1MGYsCisJMHg3Yjg4NzRlZCwgMHg0NWZkOTllMiwgMHhjZTIwZmZmOCwgMHg5ZjQ0MzJhMCwgMHhkOTllMjdiOCwgMHg4NGJkNDU2MywKKwkweGEwMDE4YTE4LCAweGE4YWM0Nzg3LCAweGE0ZmYwYjVmLCAweDgxMjIyMWVmLCAweDcyMzU4N2JjLCAweGJmYWMyNDNkLAorCTB4MDM1NjRhNzIsIDB4ODY1MzExZWEsIDB4NWZhNTNmMDgsIDB4OWI4ZTk0YmYsIDB4Yzk4YmUxNzcsIDB4M2Y0M2VjZTEsCisJMHhlNjllZTNlMiwgMHg3YTdkMTM3MSwgMHgwNzUzMzdiMiwgMHg4ODBiYjE3NCwgMHhmNDgwMDUyNCwgMHg3ZjQxYWZkZSwKKwkweDQ4N2UwNWRiLCAweGE0M2NhNDI2LCAweGYyY2FmMDA0LCAweGJkN2ZlMzViLCAweDg1M2M2NWE5LCAweGVmNDFhZWFmLAorCTB4MjE5NmExMDEsIDB4Y2NjOWRjNjEsIDB4MWMxYmUyNGUsIDB4NTNmZTdmZDUsIDB4YzQ2N2M0ZjQsIDB4ZmYzNjI2MzgsCisJMHgxZTU0NGQ5NSwgMHg3ZTMxZDEyMywgMHg4ZmUzODczNiwgMHhlOTBhYmY4YywgMHhkM2M3MzY3NywgMHgyYTdmMDVjZiwKKwkweDlmYzAwNTIwLCAweGRkYmM3MGU2LCAweDM0N2FhNjY0LCAweDgzNTZjM2YyLCAweDEzM2M2Zjg2LCAweGNiNmE3MjBmLAorCTB4YmFiYmZhODAsIDB4YWE1N2MzNWMsIDB4YjkyYmI4ZjksIDB4MDkyYjdlZGUsIDB4NGE3MjdlYTAsIDB4N2E3YTYyZjIsCisJMHg2YmRiZDMwYiwgMHhiZjUwNDcyYywgMHhlOTg0NzllOSwgMHg4ZmM0YjVlZCwgMHhiZWQ2OGZmYSwgMHg5ZDUzYjM1OSwKKwkweGU3NTM2YmFmLCAweGY5ZDVkYmViLCAweDhlMGYxYzllLCAweGFlYTViM2QzLCAweGQ1OGFlYzE4LCAweDc2OGJiZjBmLAorCTB4NWZjMTZhZWMsIDB4NDJmZTZhYmMsIDB4NWZjNjcxMTUsIDB4ZWQwNmJhMWUsIDB4NmY5OGRmNTEsIDB4NmY0ZjRkM2MsCisJMHhkMGI4YWFjNSwgMHhmYTljMDJkZiwgMHhiMjJmMzVlYywgMHg2MTM3MTRmOCwgMHhlYjFlODI3NiwgMHg0ZTcwZjk4OCwKKwkweGE0NzkxYTI1LCAweDljNzkyN2U1LCAweDg2ZmIwODlmLCAweDg0NzkyZmUwLCAweDhlN2EyM2M5LCAweDgyNDFkNzdkLAorCTB4ZDdhYjVjN2MsIDB4YmQ3M2M0ZjUsIDB4ODRkMzlmOTcsIDB4ZmEwNzkzZmUsIDB4MzVkM2QwMGYsIDB4NDE2NDQ4MGQsCisJMHhkYjdmNjQzOSwgMHg5ZmM4ODcyNCwgMHhjMDY2ODU3OSwgMHhlZTk5YmU3MywgMHg2Yzk3ODA2NywgMHg1NDU5NzFjOSwKKwkweGNhMDVmMGY0LCAweDdiY2Y4MTk5LCAweGJkMGQ3MmVhLCAweDJkZDZmMzg4LCAweDgxNjY1ZTljLCAweGZmOGU4NTI3LAorCTB4ZTc4MWM5N2IsIDB4MzJiN2MzYmEsIDB4NTk2Mzk5N2EsIDB4ZDFmYWY0ODcsIDB4ZTIyZjQ2NmEsIDB4ZTdlNTc3ZGMsCisJMHg0ZGZjODczYywgMHg3NDdkNzljZSwgMHg1ZWY1NDExMiwgMHgxNzQ5MWU5YSwgMHg4ZmU2N2NlNywgMHgxZDE4OTdhZiwKKwkweGY4N2Q1NWQ0LCAweDgyY2ZlODE4LCAweDI0NmUxYzJmLCAweDNlMTBmYWYxLCAweDY0Y2QzNGQxLCAweDkzNGEzYjA2LAorCTB4YWE4MzlkODEsIDB4YmM1YzdmYTYsIDB4MzhjZjg0MzQsIDB4MTMxMzRhMjIsIDB4ODhlZTU5NDAsIDB4NWQ2Y2ZiNDcsCisJMHg2NjljN2FhNCwgMHg3ZmJiZjNhOSwgMHg0ZmQyZjM4MCwgMHhkNDRlZDEyMywgMHg5NTQxMzBmYiwgMHg3MGViNzdhNCwKKwkweDZiM2VkYjhjLCAweDMxNTI3ZTYwLCAweDc3MDc1NTlmLCAweDdlYzNmM2VlLCAweDA4ZWJmZjVjLCAweDM1OWY5NTNkLAorCTB4NWFjNWY3OTIsIDB4ZTRjNGI2NWEsIDB4NmE3MTg2Y2EsIDB4YjMyMzNlNzQsIDB4NWZhMjc2NjMsIDB4YjAzYjhjNTcsCisJMHhmMjgzZDY1ZCwgMHg5MzFhZjhkNSwgMHgxMDY5MDFjMywgMHhlZmQyZTFjNiwgMHhiNWZlYTFkOSwgMHg0ZjhjODlkMSwKKwkweDJhZWIxMWRmLCAweGNhMGY4ODQ4LCAweGE0M2Y2MTRiLCAweGM2YTQ5NjUyLCAweGMxMjZmZDA0LCAweDM3NjYwNmY4LAorCTB4NWM3MTBiZjksIDB4NjM2MWJlMzIsIDB4YjY5ZTdkODgsIDB4NTY4ZjFiMGYsIDB4ZjVmOGMwOTYsIDB4NjFjZTI5ZjcsCisJMHgxZGEzMDdkZSwgMHhkMzlmMzBlNSwgMHg5YTdiOGZkYywgMHg0NzRlZmRmYiwgMHhjY2UwM2YzMSwgMHg3NTJjZmFiZSwKKwkweGY3MzRmNGYxLCAweDUxOGU5ZTEzLCAweGJkNDQ4N2ZiLCAweDhlY2MwOWE1LCAweDZjZDFiMjcyLCAweGJmMDdhOGRlLAorCTB4MWM2ZjMxM2EsIDB4MjFlYzQ5NDYsIDB4OTNjNjAzNTMsIDB4ZWE3ODYwMmMsIDB4NmRiZDEzZDksIDB4YTVmZjg4NTMsCisJMHhmYmY0YTEyZSwgMHhkODdmOWYzMCwgMHhiYTQzMzc5YywgMHgzMWI4ZjViYywgMHgyM2RmMGVkNCwgMHgwZjc3ZjNiMSwKKwkweDA4OWU5N2E3LCAweGViNzE4YTk2LCAweDBmYmYyYTEyLCAweGU3OTllYzc4LCAweGU1ZjYzYzQ3LCAweDEzYmM4YWM3LAorCTB4YzA5OWVmZmIsIDB4ZmU1ZjZiZjgsIDB4Yjg0ZjJjM2IsIDB4ZjVkODQzZGQsIDB4NjlmN2YyMDcsIDB4ZDA1NDdiZmQsCisJMHgwNDQwNzNiMCwgMHhmZDZiY2ZiMywgMHgzZjA1MGJmMywgMHgwNWY5ZmVlMywgMHhlYzJkMWY5YywgMHg0NTgyN2U2MCwKKwkweDRhOWNkMjY2LCAweDI0NzcxN2NiLCAweDk0NmU3M2IyLCAweDlmZTU1YjI3LCAweDUxNWU0NGY3LCAweGNiYTA4NjNjLAorCTB4M2VjZWY0OWUsIDB4MjEyM2Y2N2YsIDB4ZWUzYWVjZmUsIDB4ZWIxM2FjY2YsIDB4ZGY1ZWFkZGIsIDB4YmFkZjA5MDMsCisJMHg4NDgxZmIzZiwgMHg2ZDZjZmUzMCwgMHhhMDhiYzNkYywgMHhlMjBiMGM0NywgMHhjMThkYWQ2MSwgMHgyZGFlNDJhZCwKKwkweGVmNmY3YjA3LCAweGU4NzE4MjcyLCAweGQ2NWFkZjZiLCAweGI1ZTBmNjA0LCAweDJhMGIwMDNmLCAweGE3ZDQzMWYyLAorCTB4MDc5YzM4ZWIsIDB4NTNiYzU3NWEsIDB4OWQ5NTE0NDcsIDB4NDI1MTEwN2QsIDB4OGFlYzlmZTYsIDB4NDM1MWU1NTEsCisJMHg0ZDAzODkwZiwgMHhiNTUxNGVhZCwgMHhhYTE4NmY0ZiwgMHhmZDY0M2ZhYSwgMHg0Y2YyYWEzNSwgMHg5ZjJhYmU0ZiwKKwkweGFhYWQ3MmQ1LCAweDY1YWQ1NWZlLCAweDg3ZjBmY2FhLCAweGNmZDU1N2FmLCAweGEzMDc0MzIzLCAweDBjOTBlY2ZkLAorCTB4YjU3MjIxYjYsIDB4M2U1NTRhYjcsIDB4YWEyZGU3NzIsIDB4ODY5MTlmZjYsIDB4YmQ2OWUzY2QsIDB4NzlmZTQyZGQsCisJMHg4YWEzOWQxYywgMHgzOWNlNzE4MywgMHhlZDU1NGI2ZCwgMHg2MmI2YTQ5YiwgMHg5ZjQ2ZjAxZiwgMHhiZDY4OTNlNCwKKwkweGNiNWYxYzE1LCAweDYyZmY5OTNiLCAweDU1NmFmYjc0LCAweGQ4YTM2N2ZmLCAweDVmYWQxODNkLCAweGEzMmU3Njk2LAorCTB4OTEyZWQ2MWUsIDB4N2VmZWE0NDcsIDB4ZmI4ZWVhZGEsIDB4YThlZTIxOWIsIDB4ZjI5NmJmYmYsIDB4MzU2ZWRhNGQsCisJMHhmZTgwYmYzZCwgMHg4ZTZmZDVhNiwgMHg1ZDNmNzAyNiwgMHg3NDYxNDkwYSwgMHgwYjBiYTVhZCwgMHg1YmJkN2ZlYSwKKwkweGU2MjdiNDY1LCAweGM2ODdlYzkxLCAweGM0MGNiYzIzLCAweDVmYzdmNGFiLCAweGFlNzY2MTJmLCAweDc2YWRhN2RlLAorCTB4ZjU1OWZmODgsIDB4NDdhNDMyZDYsIDB4MmU5YTkyNTMsIDB4NWQzNTE0MjIsIDB4ZDM1MDhlNDQsIDB4YTZhZWQ1ODUsCisJMHg2YTI1YzE4MywgMHgzZGMyZDAzYSwgMHgwYmE2YTFkYSwgMHg0M2ZmYTdlMiwgMHgyYWUwMmRlMCwgMHg1NTNiMWVlMCwKKwkweDc4NWEzNzRkLCAweGRhMDA5M2U3LCAweGM5NWVkZGQ5LCAweGZjNjEyM2VlLCAweDcwZGJlZGUyLCAweDFmZDI5NzVkLAorCTB4Zjg2YTg5ZjUsIDB4MzQ3MDFjMTYsIDB4MmM2ZTEwNTksIDB4NjFlODRjYmUsIDB4NjhmZmFlMjYsIDB4YWY0MjEzZmQsCisJMHg3YWU0NGI4OSwgMHhmODQ3ZWYxNSwgMHgwZjI1OWExNywgMHhmZTdkNTFlYSwgMHg4NjVmMTJjMiwgMHhhN2Y0MTMyZiwKKwkweDQ0ZWNjMjA2LCAweGYwYzRhNGNlLCAweDNlZmM0Njc2LCAweGMwNTE5ZDkwLCAweDI2MjBmNjc1LCAweDAzODg2YjJmLAorCTB4ODgyYmUxZWQsIDB4YzlkZGY5MGIsIDB4M2VkMTViY2EsIDB4NjNmMmNhYjQsIDB4YWQ5ZWJiZjQsIDB4MzU1MjdhNjIsCisJMHhiZjlmMjJmMSwgMHhhYTAyYjhlMiwgMHhmYjEwOTI4NywgMHg1MjhlMTZhYiwgMHgwMmIzZTQ4NywgMHgyMGYyZTFiZiwKKwkweDc5MDg3NDg1LCAweDEzNzhjMmUwLCAweDYyZTY4NjRhLCAweGFkNDcxZjk1LCAweDMwZGY4MmU3LCAweGJkMDk3Zjg0LAorCTB4ZTAyNzhjNTcsIDB4MTg5YWY4MjksIDB4ZTQxYTQ0Y2YsIDB4MWExN2Q4MjQsIDB4Njg0NjQ3M2UsIDB4M2I2YTQ4ZmQsCisJMHhlMGYzYjA4ZCwgMHgyMmZlMjE2MCwgMHg0NDI2NWRhZCwgMHhlOTkxNmUwZiwgMHhjYzkwZjIzOCwgMHg1N2YxNDIyNiwKKwkweGRkYTA3MzYwLCAweGNlNzQ4OGFmLCAweGU2MjVlZjg3LCAweGMyYmQyNmI2LCAweDkzNTcxM2VkLCAweDgwYzRmYjNlLAorCTB4ZmUxMmVhZjIsIDB4YzkxZTU5ZTgsIDB4N2Y2NjY4ZmYsIDB4NmJmMGI0M2YsIDB4Zjg5ZmU1ZDMsIDB4NWUzYzZkMDMsCisJMHg1NWVmMTA1MiwgMHgwNzhmMGYyZiwgMHhhNzZmZWE3YSwgMHg4NTdkMWZiNCwgMHgwMmViMjNmNiwgMHhjM2Y2YTFiMSwKKwkweDkyMDZmYmJlLCAweDEzNzNkNzFmLCAweDQyNGRkYzcxLCAweDY5MzcxMGY0LCAweDEzM2YzYzliLCAweDRlNTRjNGVjLAorCTB4ZWNjYTQxNDYsIDB4YWI1ZGE0NTgsIDB4OGVkMWViMDcsIDB4MDEyYmEzYWMsIDB4MjEyMWFmYmEsIDB4NjBjY2RhN2UsCisJMHhmZWU1ZTYzOSwgMHg3NDM3MTE3OSwgMHg0MmUyN2QyOSwgMHgzZmM3OGRhMiwgMHhjMjI3NzhiMCwgMHg1ZjM4YTBmOSwKKwkweDEzOWU3NDBlLCAweGNmNzAxNDcxLCAweDIyMjFmYzE2LCAweDkxMzlhODRlLCAweDQ5NzM4MzlmLCAweGY3NGZmNDJlLAorCTB4YjQ0NGE2ZGIsIDB4MjlmZGQwMWYsIDB4YmVjN2VlODUsIDB4ZWYyYzIyYjgsIDB4ZWIzNTFmYjcsIDB4YjIxNDcxMTcsCisJMHg0MmVkMTBiNSwgMHg3YmQ3NDJjYiwgMHg3YTEwZjAxOSwgMHgzZWE4NmZjYiwgMHgxMjM0Zjc4MCwgMHgwZGQ3YTYxNSwKKwkweDAzODFmNjNhLCAweDU1M2IwYjhhLCAweDQ2ZjU5ZTcxLCAweDdiMDE4MDdhLCAweDhlM2M4YmMxLCAweGFmYWQ0ZGFmLAorCTB4ZTNjODliM2YsIDB4ZTczOWY4OTMsIDB4MTgxYWYwNTIsIDB4NGVlZTNjMWYsIDB4ZjUzMmUzZTAsIDB4Mjc3NzExMzAsCisJMHg3ZjQyZjhlMCwgMHhjMTUxZWZiOCwgMHhkOGJjZWZiNSwgMHhlMTNkZjcwNywgMHg3MmUwMmVlMCwgMHgyOWYzYThhZSwKKwkweDNkNmM5N2MwLCAweGVlZjAwMDkyLCAweDgzZWU3Mjg4LCAweGZkNDdlOWZhLCAweDcwNWQyNGE3LCAweDE3NzIxNTVlLAorCTB4YjZmNmNiYzYsIDB4Y2YzZjc4Y2IsIDB4NWJjNTgxM2QsIDB4YzhjOGY3YjksIDB4NGMzYmJhMWEsIDB4NmVhZDM3ZTgsCisJMHhjMmY1MWQ3ZiwgMHg2OGNhNDZhZSwgMHhhNjc2MWVhOSwgMHhiZmE5MGU5MSwgMHgwMzQwYmQ4OCwgMHg0N2NlODFlZiwKKwkweDY4MWYzZDYyLCAweDc1ZTIyZmQ2LCAweDdmN2YzYWU4LCAweDNlZmMzODA5LCAweGU0MmExYzFjLCAweDllZTE4MzUxLAorCTB4OTE5YzVmNTcsIDB4MTU1MTkwM2UsIDB4NzVkYTFmNDIsIDB4YjBmNGU2NmMsIDB4MDEzY2VmNTYsIDB4NGNlZjFkZmQsCisJMHg1NWZkMGNkYiwgMHg1MzA3MWRjOCwgMHgyNGViM2UwMCwgMHhkMTM1N2ZiYywgMHgyNmNiZWVjNCwgMHgyNTc0ZmJmMywKKwkweGRjM2IwNmZlLCAweGIzNGE0ZTM3LCAweGUxYTlmZGUwLCAweGUwOWQ5MWRmLCAweGRkNzhmZTE3LCAweDRmNzAzMTZkLAorCTB4NWMzZmY0NGMsIDB4NGVmZGUxZDIsIDB4ZTRmYjllNDIsIDB4NTdmMDQyOGUsIDB4YTI2ZmIwMmUsIDB4MTYyNjg1YjksCisJMHhkZGY5OTE5NywgMHhlNTE2NWY0OCwgMHg4OTFhYWYyMywgMHg2MWEzZjYxOSwgMHg2YmRlMDM2OCwgMHg2OGNiNDQwOSwKKwkweGM5OTM4Y2I3LCAweDMxM2JhMDI0LCAweDU2MWY3MTZmLCAweGZhZmI4NzdjLCAweDdjNTJlZjcwLCAweDI4MTRkODlmLAorCTB4MGVkMzRiNTgsIDB4ZGQ2MjBmNGUsIDB4MDUwM2NiMTMsIDB4ZmMyMDk2MGQsIDB4MTZhNjVjNDUsIDB4M2MzODViM2UsCisJMHg2NmM2ZjFkYywgMHhjZGJiMTdkMCwgMHg1MmM5ZmNlMiwgMHg5ZjIzZDM2MiwgMHhmYjY2Njc1OSwgMHhlMjU1ZDhlNiwKKwkweGMyYjNlZGZjLCAweGUxMWRkNGI5LCAweGY2MDYzYzE4LCAweDc5MzJmYmRmLCAweGIxN2YyNjkyLCAweGUzNDcwNjM5LAorCTB4YzdkNDE1ZmEsIDB4YmI1OGQ5ZDcsIDB4YmYwNzFlNmUsIDB4NDRiMmEzZWUsIDB4NmY4ZTVmODgsIDB4YTY2ZjFmMGEsCisJMHg1YzczYjEyNCwgMHg4YmVmZjcyZCwgMHgxZjdhYjVlZiwgMHg0MmQ1OGRjNiwgMHhmMDQxNzZiYywgMHg2YmM2OTVmYiwKKwkweDAxZmM3ODhiLCAweDI3YWQxMGUxLCAweGVmNzhkMWZhLCAweDdhYjE3OWRjLCAweDBlNGJmY2FmLCAweDNlYmViZTdiLAorCTB4MGZlMjI3NDksIDB4Y2Y0ZGVmZDEsIDB4MGJlMzYxNWIsIDB4ZjlkODkzNGIsIDB4ZTgwNzE4MmEsIDB4N2RjMzdiYzcsCisJMHg0YTdiODVmMSwgMHhjZTQ1YzkxMywgMHgwZWYzZWVmYiwgMHg4ODlmZGM1NSwgMHg5ZjlmNzczNywgMHhmZDdlNzE4NCwKKwkweDI5ZmRhNWZhLCAweGUxNWM2MDk2LCAweDkyZGZmMDQwLCAweDg2ZTVlNmM4LCAweGQwODJiZjc4LCAweGRlZmIwYWVmLAorCTB4OGYxYzRlMzcsIDB4YzE0N2YzZGYsIDB4YmI0NWZkM2UsIDB4N2ZlYWY3OGMsIDB4NzUzNzQ4NzEsIDB4ZDc3OTk4N2IsCisJMHg1ZGI4MzEyNywgMHg3ZGM3YWYxMywgMHgxYzQ3ZDIzMywgMHgyZjhjYzJkYiwgMHgzNWZiODllYSwgMHg3NmFhOWVlMiwKKwkweGZjY2JiYjdlLCAweDEwZmU2MDhiLCAweGJjNmUxYzQ3LCAweGM0OGU5Y2E1LCAweDMwYzc3N2JjLCAweDk5ZjdiODdjLAorCTB4ZWQwNTllZjAsIDB4NzdiZGUzMTcsIDB4ZTI1N2Y4YzcsIDB4ZjFhOWIwYmUsIDB4ZDdiNzNiN2MsIDB4OWZkZWJlZWMsCisJMHhhNmJjZjc4MSwgMHg0MGMzM2IzMSwgMHg3MjhkZTBmNCwgMHhkOGY1MDRmZCwgMHg0YTY1Njk5YiwgMHgwNmZhYzUzZiwKKwkweGZmYjIxNmM5LCAweDQxMGY0NTJlLCAweDc4NTRlYmI4LCAweDIzNzcwZmVkLCAweGZiZjQ1N2UyLCAweDRmYmU2MWY5LAorCTB4ZTcwMmMzODksIDB4YmU1YzI1YjcsIDB4ODM1MWQ5MmQsIDB4MWYzOGFmZmEsIDB4OGNiMGZlN2QsIDB4MTM5ZjE3ZjEsCisJMHhiY2Y5MjdlNiwgMHhjZmYzYzI1NSwgMHhlYjIxMTc1MiwgMHhmOTVhMWYyOSwgMHg4ODMzNDE2NCwgMHg4NDQ5MjViOSwKKwkweGJlYzMxNzVjLCAweDQ2ZTkwOWRmLCAweGY5N2M5ZmI1LCAweDg3ZWNmZGJkLCAweGFlYWU1NDI0LCAweDU3MjgwZDIwLAorCTB4ZGQ1OGZlNTYsIDB4ZmJkYzlhYWUsIDB4YjQ5ZmQwNjcsIDB4ZGNlMWZiZmUsIDB4YjFkNjI3MmUsIDB4NDc5ZTg5MzksCisJMHgyNjI5ZWY0MCwgMHhkNjFmMjBjNSwgMHgzMTg1ZjkzZSwgMHgxZjc4MTk0YSwgMHg3NzdjYTY5YywgMHhhZmY4MWU5OCwKKwkweDQ2YWVkMzE5LCAweDQ4YmZhNjFiLCAweDQ0OTYzYzcyLCAweGM5MjdiN2YxLCAweDllZDIwZGI1LCAweGJkZmY1OWY3LAorCTB4N2U0Y2JkYjUsIDB4Yjk0MzhkNmMsIDB4MmVmZDY0ZDUsIDB4MDg3OTc1ZjIsIDB4YzBmN2ViZTMsIDB4MWUxNDA5M2IsCisJMHg5N2QzMTMyNiwgMHg3MjBkNzQxMiwgMHg1ZTJkZWExNCwgMHhmMWUzODdhNCwgMHg2MjY2YWE2YiwgMHg3NDA0OWVkZSwKKwkweDI5Y2JmNzFmLCAweGVmY2UzMTUzLCAweDgwMGU5MTk3LCAweDQ3NTJhNmY3LCAweDM2MjVkODFlLCAweDk5N2JiMjU1LAorCTB4YjNmMzEzNjYsIDB4ZjYzMTdmN2IsIDB4MGM4MzcwMzUsIDB4MGNiZmJiNmIsIDB4OGViNmMxY2UsIDB4ZjdiMDNlZmQsCisJMHg3Y2ZlZThiNCwgMHg1YTU3ZTIxMCwgMHg4YmYxNjNhZSwgMHhmZWZmM2EwOSwgMHhlMmYxOTBkNCwgMHhlMDQ5YmQyMywKKwkweDY5MWY4Zjg3LCAweDM4OGYzOGM0LCAweDIxYWYzNGI5LCAweGNkY2E1ZTI0LCAweDllZGJkMTcxLCAweDFlYzI3Njg1LAorCTB4YjYxYmIwODMsIDB4YThiZGUwNDUsIDB4ODE4M2ExZGEsIDB4MTg0MzVjOGYsIDB4MWJkYzQ1OWUsIDB4ZGY1NDIxY2MsCisJMHg4NDcwYTJlZCwgMHhiZjkxNGJhMCwgMHgxOWYyNGRhNiwgMHgxMmZkZjBhMiwgMHhkZWQ0ZTNmNCwgMHgwZjk4NGJlNSwKKwkweDdhZTdlYTcyLCAweGY5ODk4M2Y0LCAweDVjOWFiZGM1LCAweDIxMmVmZTA2LCAweDM2NGJlNjlmLCAweGZhZTM0NzY2LAorCTB4ZmUyMjNjZmMsIDB4NWNkOTdmMzEsIDB4YjhmMzI3NGUsIDB4OTIzZjNmMWUsIDB4YjEyOTdiYzEsIDB4NWJiYjQwNjcsCisJMHg0NzRhMjRjYywgMHhmMmZjZDRiNywgMHg2NzVjMjJiNiwgMHhmNDFhMjE4ZCwgMHgxOWY3ZTEwNSwgMHg2ZjA4Y2Y1OCwKKwkweDY1M2Y3MmZmLCAweGE1OGRmNzY1LCAweDcyNzQzNjQwLCAweDYyZTdjMjg2LCAweGY5YzAzMGZiLCAweGRkOWIzYmIyLAorCTB4ODhjMzIzYmIsIDB4ZWU4Y2ZjMDMsIDB4ODFiN2MzN2QsIDB4ODgzNGMyN2QsIDB4N2YyOWFmZjksIDB4YTNlNDk3MzIsCisJMHg3Mzg2NmQ1ZSwgMHg0NGFmYWRkNCwgMHgyZjIyZjhmMCwgMHhjOGVjNGZiZiwgMHhmYTljZjg4MywgMHg4YzdjYjRhYSwKKwkweGMwMWEzOTEzLCAweDBkYmEzNzc3LCAweGM3ZGMwY2ZlLCAweDU0NDhlZjk0LCAweGYyZGEwZTM2LCAweGI4N2ExOWZkLAorCTB4ZjU0Mjk5YWYsIDB4ZDkyZjlhMzUsIDB4MGZjYjJmNzIsIDB4ZDFkNGFmZjUsIDB4NGYyZDkyZmMsIDB4ZmRkM2QwY2QsCisJMHg3ZmM2YmVlMSwgMHg1YjM1ZjIwYSwgMHhiZTdjYjE3NiwgMHhmMzRjYTU3ZiwgMHg2NTVlNWJjZCwgMHg0OTYwZTFmNSwKKwkweDJkYzFlYzA5LCAweDY4Nzg2NzA3LCAweGI5YTI2N2ZmLCAweGYxZmJiN2JjLCAweGU1ZmJiNTllLCAweDNiNTBiYWUxLAorCTB4ZTMzMjYzNmIsIDB4OWRiODY3NWIsIDB4NTkyNjRjZjgsIDB4MWVmMDA1NWMsIDB4YjJmZWJlMTEsIDB4NWEwZjFkNjQsCisJMHhhYzU0YzU2OSwgMHg0OTI3YjQ1NywgMHhmMzI1ZGJlMSwgMHhmN2U1NmU3MSwgMHg5MjQ2MjdhMywgMHhiN2U2MDg5NiwKKwkweDNjNTE0NGYzLCAweDhlMThlODFjLCAweDkzYWZjNzdlLCAweDZlOWU5ODYyLCAweDM4ZmJlM2YzLCAweDRmMDExZmEyLAorCTB4NzcxODlmZDEsIDB4ZTA2N2M4MzUsIDB4YWM3ODlhY2IsIDB4M2Y4NjY0ZWMsIDB4MWM0NmNlM2EsIDB4ZGQ4Mzk4NjcsCisJMHhjYjRhYWUyYiwgMHhiYzUxZmMwMywgMHhmNGRlMzllOSwgMHg4ZGJiZmNlYywgMHgxYmY2OGZjZCwgMHhhMDcyOGI5ZCwKKwkweDA3ZjhlYzAwLCAweDMzZjVhMmJlLCAweGQyZDZmMzgzLCAweDkzMzI0MTQ5LCAweDMxMzZiNzJmLCAweDNhMjA2YjdmLAorCTB4NjI2OWU5MGIsIDB4YTU2NzdmMjQsIDB4NjY4ZWJkNTAsIDB4ZTRjNjg3MGUsIDB4NDY2ZjdlNjgsIDB4YzI1MTJiYzAsCisJMHgxYzM4OWE3MSwgMHhjZjc4ZmNkMywgMHg1ZGQ3NGFmMiwgMHg3NzVhMWZmMSwgMHhmMDFjYmUwOCwgMHhmNjgxY2E1ZSwKKwkweGY1YjNiN2FiLCAweGNkN2JmMGM0LCAweGQ0MTg4Y2ZlLCAweGY1NTdlZWY3LCAweGE2ODM2Njc3LCAweGI4YzEwOTdkLAorCTB4MTY0Yzc3MzYsIDB4ODIyN2JmYjYsIDB4ZDkzYmYxOTgsIDB4MzMyZWQ3ZGUsIDB4YTBhZGU5OTcsIDB4MmM3NzhhY2YsCisJMHgxMjNhZTc4OCwgMHg3YmVjNDdlYSwgMHhjNThkYTJhZiwgMHgzOWQ3MDY2NywgMHhkM2FmOTBhMywgMHg2MzY5ZDdjNiwKKwkweGU4YWFmNGViLCAweDY0MDkxYzk1LCAweGE3ZjZiNmNjLCAweGY3ZjgzZWUzLCAweDlmMmEzN2Y1LCAweGU3ZGFhN2Y3LAorCTB4N2Q4M2ZhZTEsIDB4ZDY1ZTEwM2QsIDB4ZDZmOTNhNzMsIDB4YTllNjIyZjAsIDB4OWMxZjY3ODEsIDB4ZjAxM2YzMzUsCisJMHhlZDhkZmQ4NCwgMHg1MmU5YTk0NiwgMHg1OTI2YjNjYywgMHhmYjM1OTM5YywgMHg4ZTFiZjMzYiwgMHhkNWRhY2E1NywKKwkweGI5ZTJjZWRkLCAweGViYTZhMjg5LCAweDNhOTlkZGJhLCAweGVkMTAyYjg4LCAweDEwMjdjMTZhLCAweDNkZmZiNDFmLAorCTB4ODllZGNjOWEsIDB4ODA2ZDI0NjksIDB4OTNjN2M0ZjgsIDB4MGRkYWMyOGIsIDB4OWNmNmJiZjEsIDB4ZTJjZDEzZDgsCisJMHg4YWY2YjVkNSwgMHgyNzdiNzg5ZSwgMHg5Y2Y0YWZkYywgMHg4YzBhZWY2MywgMHhjMDZmZDhkMywgMHgyNTljZjRjZiwKKwkweDVmMjgyZWQ4LCAweDljNzNmOWQ0LCAweDNmYjdmNjNmLCAweDdlNjAzMjA1LCAweGU3YjJhNjg1LCAweDQ3ZDUzYjE1LAorCTB4N2U0MzFjYjYsIDB4ZWNiODM4NWQsIDB4N2Y5YTRjYjYsIDB4Yzg4ZmY5MzUsIDB4Y2I1MzBiY2YsIDB4ZmNhNGM4YmUsCisJMHg5ZmIyN2Y3YywgMHg3ZDk2NDdlNSwgMHg1YmYyMTQzMSwgMHg0NGZlYWNmYywgMHhlZmMwZjNjNywgMHg2MzNmYzc4OSwKKwkweGFmNTA3MjUyLCAweDQxNTkyZDc4LCAweDNhZTVjOWI4LCAweDAyNjQ3NDAyLCAweGM3YWU4NjI1LCAweGUzMDlhYWY0LAorCTB4MDc1YzA0ZjYsIDB4YmE0ZDBiNGEsIDB4NmZmNzcwODYsIDB4MDdhM2VlZGYsIDB4ODEyOTU3ZTYsIDB4ZjNiMDE1M2YsCisJMHg1ZjgwM2I3MSwgMHhmNDAzYjJhZiwgMHhkZjdiYjE0NCwgMHg4ZWZmN2IzZCwgMHg0ODNlNWRmNywgMHgxZTAyNzU3NiwKKwkweDE2YmIyM2VhLCAweDVkZmNkMjY1LCAweDFmYTA5ZjkxLCAweDNkZDA3MjRmLCAweGM1MTVmNjAxLCAweGY5ZDAxNjQ2LAorCTB4OWM5YjVkNGEsIDB4ZDU5MTNmYTAsIDB4ZTExZWIzNzYsIDB4NzQ1ZWVkY2EsIDB4ZmMyODE3OGQsIDB4ZjNmN2Q5NWUsCisJMHg2MWIyYTVlZiwgMHhiMThmMzA5YywgMHhlZmQ0MGY5YywgMHhlMDZmZjJmYiwgMHg2MzNmYWRmNywgMHg3YWY5ODNiMSwKKwkweGRiOTZjNzZjLCAweGRiMWFmZjQwLCAweDRjOTdmNmYxLCAweDM5ZmJiMzBlLCAweGMxNjNkZTYyLCAweDk3YmY0OWFlLAorCTB4ZmU3MDliYjQsIDB4NWVhZTNiNjMsIDB4ZmRjN2Y1MDEsIDB4ZTgwYjIzYjYsIDB4NWYzMWMyNjQsIDB4OWU4NWIwMTMsCisJMHhhYWE1MmZiZCwgMHhjZjkwZTVlZSwgMHgzOWQ3MWEyZSwgMHhjMDRkZGZhMCwgMHg1NGFhNTNlMywgMHhmNDc4NDYwZCwKKwkweDg1N2M3ODMyLCAweGYxZGQ2N2YxLCAweDY4ZmQ5Yjg3LCAweDdmZGY1NGZjLCAweGZhM2FmYWEyLCAweDIwYzk3YjkxLAorCTB4YzQzM2Y4M2IsIDB4YmRhZDdhN2QsIDB4NWQyNTY4ZjQsIDB4MjEzZWZkMWYsIDB4YTIxMDY3NDAsIDB4NmYzYzRmNGYsCisJMHg5ODI0OGNhNiwgMHhhYWQxMjUyZiwgMHg1OTM5Yjk3YywgMHg5NmMyYmY1NSwgMHg5MjlmMmFhOSwgMHg3Y2FhYjU3NCwKKwkweGNhYTc5MjlhLCAweDU2MzExZjRmLCAweDdiMDZmZjU1LCAweDYzN2YyYWE5LCAweGZkNTUzNGM5LCAweDJhYTU0NzRhLAorCTB4NTM2YmU3OWYsIDB4ZDQzODJmZDUsIDB4NDIzZjJlYWUsIDB4ZmU0M2MwNjQsIDB4OTBlYmZiNTEsIDB4YTA3NDlkMTYsCisJMHg3NGY4YjVkOSwgMHg4ZTkwZWJjMywgMHg4NzAzMGJmZCwgMHhlZDdjNWVkNiwgMHhlMWQ3YjZmOSwgMHg2YjE3YjBiYiwKKwkweGZiMDkzM2VmLCAweGM1YjJjZGYxLCAweDI3NmYwYzZiLCAweDA1NjdkMjRlLCAweDc1OTAxZmRmLCAweDE4ZDMzZWVjLAorCTB4OTRlYWViYWIsIDB4YTY3ZGUwYTIsIDB4YTYyZjYwODksIDB4N2M1OGE4NDgsIDB4MDBlMzQ3ZWUsIDB4M2Q5ODBiNGYsCisJMHgwNjIwMjhlZCwgMHg2OGFkYmVlMywgMHg2ODZhM2M4NywgMHgyYzBmZTY3OCwgMHhmODFkMjAwZSwgMHg1Y2MwODRkZSwKKwkweDllMjdiYWQ1LCAweDVkZDZhOTc3LCAweGUwZDU2ZTRhLCAweDVmMmE4ZDY5LCAweDU1NWRiYjYxLCAweDA2ZDI0YTdmLAorCTB4ZTUzNGY5NTUsIDB4ZGQzYzFhMDcsIDB4NjBkZmNhYWYsIDB4ZDNjMWEyZGYsIDB4N2U5ZTBkMzYsIDB4ZjQxNzJhYWUsCisJMHg1YWVkYzFkZCwgMHg0NTFlYzBmYiwgMHhjZWZlZjFkMywgMHg3NWMzYzA3MiwgMHg4Zjg4MDNhNywgMHg3MmQ2Y2U5MiwKKwkweDQ3YjVkM2MwLCAweDg1NWYxMGRiLCAweGIwMzk2NzNlLCAweDBkNDNlMmNiLCAweGEzZWE0M2FmLCAweGY3NjgzMWU3LAorCTB4YTYxMjYzNWEsIDB4YjQxNTFhMDcsIDB4MWM2YzFkNmIsIDB4NDZhMWU5ODEsIDB4NzVmZjdlM2IsIDB4ZWZhNjA5NjMsCisJMHg3ZDMwM2EzNCwgMHhhNjJhNzFhZiwgMHg0YzRlOGQ5ZCwgMHhiMGRiMWFkYiwgMHhlZDhkNzNmZSwgMHhkYjE2MmVjYywKKwkweDNhNDVkZWY3LCAweDc1YmEwN2Q4LCAweDgyNzgzNzdlLCAweDc3OTIzZjE3LCAweGVlY2JmMDAzLCAweGM4NmVmZTQxLAorCTB4MzdlYzQ1ZGYsIDB4MjVmOWEyNGMsIDB4YmVlODQ0YzAsIDB4Mzc0ZjI5ZmMsIDB4ODAwMjNhYTQsIDB4Y2ExYzM3NTcsCisJMHgxOGYxODI4YSwgMHgxZTQ3M2E2ZCwgMHhhNDc3ZTFlOCwgMHgzZWExZjg0YywgMHgzN2JiOTA5ZCwgMHhkMTZjOTMzOCwKKwkweDc5YTY2ZjJjLCAweGIzYzYzNjQ0LCAweDgzYTFmODRkLCAweDIwMzNkNzEyLCAweDMzYTlkMDRhLCAweGY3YzgwNmUxLAorCTB4Nzc3MmIwNDQsIDB4NDAxYjg0Y2EsIDB4ZmVjNmZmMGYsIDB4ZmYzZjQ3NzMsIDB4NjEyOTFkZjksIDB4OWNjZmU3ZmMsCisJMHhkNzYwYWM1NiwgMHg3MGQ1ZmMzOSwgMHgzMGUzYzAyYiwgMHg0ODM5NmZiNywgMHg0ZDA5NjE5ZSwgMHgwNjc5ZjU0YiwKKwkweDA3NDdiMzkwLCAweDgwZjBiN2I4LCAweGUwMDliNGFlLCAweGNmYjNhNmQwLCAweGViZWY3OGMxLCAweGI3ZTgwNDBkLAorCTB4NWZlNzYyNGEsIDB4Y2E5NWNmNTEsIDB4MGRjZjQxZTQsIDB4MWQ0ZjNjMjYsIDB4NjA1NjM5ZDEsIDB4NzgxNDk5NWMsCisJMHgzZGJjZTAwYywgMHhkZWUxMTJhNSwgMHgwMDY0MGQ2MywgMHg0ZTI5YmNmYywgMHgzYzBmOGY5NiwgMHhmMjQzZDkyNiwKKwkweDA3OWYwNjA2LCAweGI2ZmM2ZTUyLCAweDM4NThmM2UxLCAweDYyOTEzY2Y4LCAweGNmYjZmYTYzLCAweDgwN2EwZTkxLAorCTB4NzRhOTFmYzgsIDB4M2U3ZWMxZDQsIDB4MGFiOGVhNTIsIDB4NGQzOGNmZWYsIDB4YWQzYWZmNmMsIDB4M2VkMGFiZGUsCisJMHgxMzlhMjhlNCwgMHg5MjE5ZTc2MiwgMHhkMWY3NjA2YSwgMHhkODIyNjJlMSwgMHg3MTkxNmYzYiwgMHgzOWUxNmI5ZiwKKwkweDdiZTk5NTIxLCAweGNlNzAyNzQ4LCAweGU3ODkxNzljLCAweGY2M2EyMzgyLCAweGZlYjY4MTllLCAweGIzZDcwZTAyLAorCTB4ZTNkYmMyODMsIDB4YmQzMmE2MTYsIDB4ZGQ1NjZjYTIsIDB4ZmVkMDJmMzMsIDB4NjA0NWQ2N2EsIDB4ZTFjZTNkZDcsCisJMHgzNGY1OGZhOCwgMHgzNDJhZTg1MCwgMHg4ZTcwZGQzZCwgMHgxY2VjOWI5NSwgMHg5ZGJmZTgyNCwgMHhmMmQxN2YwZiwKKwkweGZiNmUzYTY3LCAweGZkNjhlZmViLCAweGRhNDVkNjRmLCAweGFlZDg4NjUxLCAweGMyZGRmODQxLCAweDM1OGMyZjJiLAorCTB4YjBiNGZlYTMsIDB4ZTQwY2JkMmEsIDB4MDdlZTdjZTIsIDB4MjdkNTY0NWMsIDB4MWY1MDNiYTAsIDB4MTcyNzg0NmQsCisJMHg5YWYyNWI5NywgMHhjYWM5MDQyOSwgMHgzYzIzNGFiOCwgMHhiNjlkNTUyNSwgMHhkNWQyMTlhNiwgMHhjMjM3ZWVjMywKKwkweGEzYjUyOTEzLCAweDFhODMzNTc2LCAweDcwYjc0NzViLCAweGZmM2ZmMjExLCAweDVlNzQ4ZGJiLCAweDBhY2JkNzhiLAorCTB4ZmI4OWNmM2IsIDB4MTQ1NzM1YWUsIDB4ZjdlODIyY2YsIDB4YTIzYjhmMDgsIDB4ZWFmM2MwNDAsIDB4ZDE2ZjBlMjIsCisJMHhkNzg3MTE2ZSwgMHgzZmFlMTQ4OSwgMHgwYjljOTBlNiwgMHg2N2Q2M2Y2YSwgMHgwYjVkZWY0MCwgMHhjMDFlY2RkZiwKKwkweGU3MmVhMGNmLCAweDQ2MDdlM2ZhLCAweGZkZjZhZTM2LCAweGUyZWUzMTEyLCAweDNhZmU3NjU0LCAweDA5OTRhNDYyLAorCTB4NGMyZGU0ZmEsIDB4ZmRjZWU0MGUsIDB4YmEyMmFlZTIsIDB4OWIwZWRjZmUsIDB4MTYxNWUzMGUsIDB4NzgwMGJkZDcsCisJMHg3OGU3NmRlOCwgMHhkODc2OTAzNCwgMHg0YjNjYjM0ZiwgMHgyMjFkZjkzZSwgMHg4Zjc1NGUyNiwgMHhkMmYyNTJmNywKKwkweDBmMmI2OWRlLCAweDdlODU5Nzk1LCAweGJjYTg3OTY3LCAweDk2YjQwOTJjLCAweGYyMTQ1YzgzLCAweDdkNGZmODUxLAorCTB4MmY5Y2Q1OGQsIDB4M2QzZjIwMzcsIDB4ZjMxZWI4ZDAsIDB4OTgzZDFiMDcsIDB4ZTE2YzZhMWUsIDB4Y2IxNWI5N2MsCisJMHg5ODdjNjlkZiwgMHhlNzJmNjVmMywgMHg3YmYxM2JjYiwgMHg0YzVjZTM0NywgMHg1OGJhMzVmNywgMHg5NTE5Y2EzZSwKKwkweGVjYzRmYjBhLCAweDM3YzRmOGMyLCAweGY4MDg5OGI2LCAweDRjM2I3YWU3LCAweDc3NDE5ZjE4LCAweGM2OGY2M2M0LAorCTB4MDk5MWZjNDEsIDB4ZTM2YTcxZWYsIDB4YmU3Y2I0OTAsIDB4Zjc3NjFlOGYsIDB4MDUyNTM3N2IsIDB4MWY4YmU5YzYsCisJMHhjODcxN2QwMiwgMHg5ODc0ZjRjMCwgMHg0YmUwNTYyOCwgMHhlNGZlOGZmOSwgMHgwZmFmZDAwNiwgMHhmNDE1OGEyYiwKKwkweGNkZDQ4MmU5LCAweGFjNTBlZjJjLCAweDdjMmY5YTA2LCAweDhhNWRlNzk0LCAweDIyYWMwNGQ1LCAweDViZTQyMWY1LAorCTB4MzU4YTNkODcsIDB4MWY4YmU2ODIsIDB4N2I5NTg4N2QsIDB4YzdmMzNhMDksIDB4MDZmNWJhM2QsIDB4MjI1OWYwMGYsCisJMHg1MWZkODAxZCwgMHg0NDljY2U2ZSwgMHhkNzk1MDVjNSwgMHg1ZjYwMDdhNSwgMHgzMjVhNDk0YywgMHhjZWM1ZjYwOSwKKwkweDYzZTkwNTE0LCAweDAwZTFiMjlhLCAweGQ4OGZhN2U0LCAweGZhYWI4N2E2LCAweDQ2ZGU0YjBlLCAweDU3MTY1NzY4LAorCTB4OTM3Njg3YTksIDB4ODQ2Y2Q2ZDIsIDB4ZGQ4NzkzNzYsIDB4Mzc2ZDBmYWYsIDB4OGRhZWQ0NzUsIDB4ZGY2MTlmOTAsCisJMHg3NGZkMDdhNiwgMHhmOGIxZjAyNywgMHgyZjIyM2Y2MCwgMHgxNjlmMDVjYSwgMHgzYmEzNzI3MSwgMHg3MjBmMjg5YywKKwkweDBmMjg5ZGRiLCAweDY2Y2E1YzA0LCAweGY2MGRkZTU3LCAweGM5NzZmYWNmLCAweDY2M2NjMTI2LCAweDBhNDE3ZDRiLAorCTB4ODZlODkzMTAsIDB4YmYyOTQ5ZjcsIDB4OTdmNTNlYmUsIDB4NWRiNDBkZDYsIDB4YzVhZmU0M2QsIDB4N2MzNzBmZmMsCisJMHhhNmZiZmNiYiwgMHhmYmZjMzBkNCwgMHg0MWRmYmU0MywgMHhmYmRjNDNkZSwgMHgwZWY2NDY4NywgMHgyZTFjMzNjYywKKwkweGFjNGIxZGY1LCAweDcxMmE4ZWY4LCAweDdhY2Y0MTU5LCAweDk3ZjNjYjllLCAweDlmZTVhNTIwLCAweDdmOGJiNGYxLAorCTB4NzBlNzQwN2YsIDB4NTJhYjM4YzEsIDB4M2ZiMjFmYjksIDB4NjU0OWE4N2YsIDB4OGY3MzVmZmIsIDB4Y2U3MjgwNjQsCisJMHg2ZDUyZWExZiwgMHhlYTNjZjdhYSwgMHg3NmJmYmIwOCwgMHg2ZDNiMzhhOSwgMHhlZTM2Yjg5YywgMHgzYjY5MzU2NCwKKwkweDFmZWNjOGU4LCAweGY3MGI1MjZmLCAweGM3ZmFiMmRjLCAweDZhNzg4YjdmLCAweGRmNzgxYzZkLCAweGUzMTA2YWI5LAorCTB4ZDc4MTczYTcsIDB4NDk2ZWJhNTAsIDB4ZGU0ZjkwMWQsIDB4ZGMzODA5N2IsIDB4ZmQwZTBlMWIsIDB4OWM1ODQzZDYsCisJMHgyNDM4YmY3YiwgMHg1ZGFlZWYxZSwgMHhiM2M1NzExNywgMHhmYzc5OGQ3NywgMHg4MjdkNzZiYiwgMHhhZmFmZmEyZSwKKwkweGNmNWZjMTk1LCAweGJiZjU0ZmUwLCAweDE1N2U2MGM3LCAweGVjMDRhZDhiLCAweGU3ZmNhMTU2LCAweDNmZTExNzc3LAorCTB4NmRmNjdlNWEsIDB4MTc5YmM5ZjEsIDB4NjViYmUxZDcsIDB4ZjNkOGY4NjEsIDB4Yjg5OGY4ZTEsIDB4ODU0ZGFmY2YsCisJMHhmM2Y3MGE5ZSwgMHhkZTEyMWUyMCwgMHg3ZTczODIzOSwgMHgxZjZiYTI2NSwgMHgxNjUzZDNmNCwgMHhjZTBlOWJmOCwKKwkweGRkZWM3MWExLCAweGFlZDE4M2YwLCAweDMyNWRmMGZkLCAweDExMDZiOGIyLCAweGU3NWE3Yzk3LCAweDZkZTgxNWY5LAorCTB4MTlmYTNkZWYsIDB4MTA2ZWIzZjIsIDB4YmM4Zjc0MTYsIDB4OTdhMGYzNDEsIDB4N2NlNmMzZmQsIDB4NDY0N2UwMTMsCisJMHhlZmExOGRmOCwgMHg3ZjE0MGY4ZiwgMHhmZjJlMWJmYiwgMHhkZjZjYTdmYSwgMHg5ZWQ0Mzg4OSwgMHhhMDY2NWY2ZCwKKwkweGZiMTJlZWZkLCAweDU0NzgyMDYyLCAweDcwZmRlM2M4LCAweDI0YjdhNDNmLCAweDk3NjdlNTEyLCAweGRlZjA3YzQ0LAorCTB4MDI2OTU3NzEsIDB4ZTk1ZDJkZWEsIDB4ZGZhNDNkNDYsIDB4MmJiOGI5ZjYsIDB4ZDdmYjFiM2QsIDB4OTJiYjhmOWUsCisJMHhkYzZjY2M0YiwgMHg3ZDIxNTNjOSwgMHgyMTU0ZjkyZiwgMHhmMGRmYmRjOCwgMHhhMzc2Y2JmOCwgMHhiMDNkZTBhNywKKwkweDQwOGQ4ZjBmLCAweDkyOGRmZWZmLCAweGEwZTAxMGJmLCAweGJkNzc1NzNkLCAweGM5NGNhMGI1LCAweGE2YmU3ZmVkLAorCTB4ZWIwNDliZWIsIDB4YmJhZTNkYWIsIDB4ZTk1ZGJlMWIsIDB4ZmQ3NmJiNzksIDB4YjljNDA4ZGYsIDB4MTVmZjViOGYsCisJMHhhZWVmZjc4MSwgMHgxOWRkZmNmYywgMHg1ZTgwYWI5MywgMHgxMjAyNmFlMSwgMHhmNTQ1ZDMxOSwgMHg1NGJmOWEwOSwKKwkweDg5MzlkNmZjLCAweDQzMzNkMzllLCAweDZmMjVlNWNlLCAweDllMmUzOGIzLCAweGZkZTdjZjZhLCAweGVkNWMwOWRlLAorCTB4OTYwZGM3NTEsIDB4NWUzMDhhZmEsIDB4ZTE0N2Y2NDUsIDB4N2IxZDYwYmQsIDB4NzNjNDQzNmYsIDB4ZjNjZmM5YmQsCisJMHgyNDNlYmNmNCwgMHg5ZDcwZWQwZCwgMHhmYWYzYWExOSwgMHhmYTJkMWYxZCwgMHgwODgxZjIxZSwgMHhhNjc4ZWY4YywKKwkweGNjM2M0NGZkLCAweGYxOWQ4ZmY1LCAweDA5NDU3OTNmLCAweGVkYmQ3N2QyLCAweDlkZjQyNDZmLCAweGJkZjVkYWMwLAorCTB4ODZkNzdjYWEsIDB4NzA1NmZiZTAsIDB4NWZmNmFiMWYsIDB4MmEyNWNhMzIsIDB4NGYxMDVhYzcsIDB4ZGFlMzM1ZTQsCisJMHhkYTRhZjkxMCwgMHhlZjA3ZGNmZSwgMHg1NWRmOTRkMSwgMHhiZTUwYzAwMiwgMHhkMDc0Y2YzNiwgMHgzY2ZjOTU3NiwKKwkweDhkZTQ0ODQ0LCAweDkyYWVkYTBlLCAweDY3ODkxZjlmLCAweGU3OGYyYjI1LCAweGIwOWYzZGY1LCAweGZmMjhiYTdjLAorCTB4N2ZhYzRjZTMsIDB4MWM2ZmU4OTUsIDB4NzkxNjRmMmIsIDB4MjJkNWRmZGUsIDB4OTYyMzc4OWYsIDB4MjVmNjhhNjcsCisJMHhjNjIzOWYyYywgMHhhZGVkNjRhZiwgMHhhZGU0ZmVhYywgMHg3YTA5OWNmZiwgMHgzM2Y3ZTA4ZCwgMHhlMDljYjhkMiwKKwkweGZlNTE1MmVmLCAweGJhMmI0Y2VmLCAweGJhOGViYzY4LCAweGYxMDdjYjljLCAweDFkYzU1NTBlLCAweDg1ZGYyMmQzLAorCTB4NjEyNmRjN2QsIDB4OWRlZDYxZWMsIDB4OWZlN2I0MDYsIDB4MGRjYjY5OGQsIDB4ZTIyZjJmYmQsIDB4NTZlNTljN2EsCisJMHg3YmFhZjM4YywgMHg5OTc2Zjg3MSwgMHgxZTgxM2JjNywgMHhlOWZiOWNiMywgMHhmYTBiNjQyYiwgMHg2NWVmN2E2MSwKKwkweDNkMjA3ZTdjLCAweDk3ZmFlNTcwLCAweDU3ZWNmODU1LCAweDQ2ZDNkZmNlLCAweGVmMWQyNTQ3LCAweGYxMTMwZmRjLAorCTB4ZDYxOTAyN2UsIDB4ZWUwMmYxODksIDB4MjdjNDQ5MzQsIDB4MTE2YWJkZTAsIDB4NDU5NzE3NTcsIDB4OGU3ZTcwMWMsCisJMHhiZDgyMjk3YiwgMHgxM2IyN2FhNywgMHg5N2NhZWZmOSwgMHg2ZWJiN2Q5OCwgMHhlZjI4ZWJjYiwgMHhkYTBhY2E5NiwKKwkweGVhMWViZTk3LCAweGU5ZjAwNzVhLCAweDJmNzdiMmI2LCAweDg3ZGZhZTU3LCAweGM1MzFmNGZiLCAweDgxNjBmZGM2LAorCTB4YmNmMGExNTEsIDB4M2RmYzNmYjMsIDB4ODUxN2YxNjksIDB4M2ZmY2JhYmYsIDB4NWRhZDdmMGMsIDB4NWZkN2RjNWQsCisJMHg3ZmYxODU3ZCwgMHgwN2U2NTZkZCwgMHhmZDNjNzNiNiwgMHg3MzE0YTc0OSwgMHhmMDAyM2Q3OCwgMHgzM2EyYjczYSwKKwkweDIwODY1YTNiLCAweDc3OGM0ZWVlLCAweDI5ZGY5MGFiLCAweDZmNTZmMzgyLCAweGRlMDA5NTgzLCAweGRjY2VhNWJiLAorCTB4NWZlMGMzMGYsIDB4OWYzOGFlN2IsIDB4Njk3MTU0NDEsIDB4ZjdjM2ZiM2IsIDB4ZjdkMDRiZTksIDB4ZmE0ZGZmZDMsCisJMHg4ZGZiZDQ0ZSwgMHgxZjFiZjA3NiwgMHgxNWU1ZWY2NSwgMHgxOGM5ZmU3NywgMHg0ZWY0MWYxYSwgMHgwZjA3M2IxYSwKKwkweDMxN2U2NzZlLCAweDJjMTcxNzExLCAweDcxM2MzMmI3LCAweGQ1NWQ1M2ZmLCAweGZmYzFlMzNiLCAweGM0YzNmNjI0LAorCTB4ZmUwNmQyNDgsIDB4NzZkNzRhMDQsIDB4YTA3NmQ3NGUsIDB4NDFiZjQxNmIsIDB4MTc2ZDE0M2YsIDB4ZmE0MWJlMDYsCisJMHg5MTJlMmMyNSwgMHhmZGI3ZTljMywgMHgyNWUxZmFlMSwgMHg3ZmUxZmFlMCwgMHhhOWJiYWUxMywgMHhkYmZlOGMzZSwKKwkweDRlZDAyMjE3LCAweDNmZjM4NWEzLCAweGJjMDU1YzM4LCAweDBlMmZkMzIzLCAweGZmZjRjOGU3LCAweGQzMjM5YzBjLAorCTB4NDM5ZDk1MTUsIDB4ZjkyMDdiYzAsIDB4OTg4ZmM1YTQsIDB4NWE3ZDk4NzcsIDB4ZTlmNjRkZjQsIDB4NGY5YzE5MjMsCisJMHg4ZjE4ZmRlOSwgMHg0YzdiYzVhYiwgMHgyN2JjM2Y3YSwgMHhlZjFjNWZhNCwgMHgzMGZmZjJlYSwgMHhkMzcwYjVkZSwKKwkweDlmZGNiNWE2LCAweDk4NWVmZGFiLCAweGZiYmYyMDNlLCAweDdmZjhlMDU2LCAweGIwYjA0ZmNkLCAweDdjYWFiZjYxLAorCTB4NTRiN2ZhZjEsIDB4ZWYzYzRiZTUsIDB4NDE1Zjk2NWYsIDB4NWJmZmZiZDgsIDB4NTdlMTA1ZmUsIDB4MmFmY2Y5OTgsCisJMHhiNTFmZjgxZCwgMHhjNDM3NDFmMiwgMHhjN2EwMjNmOSwgMHg3YWZlNWYxYiwgMHhmOTMwODdkNCwgMHhiNzhjNmNlYSwKKwkweGU1YWY4ZGJhLCAweGZmN2ZmMThiLCAweGJlOTQ3YmU0LCAweGY2NjA2OGJlLCAweDNmZmI2M2Q2LCAweGZkMzkyODM3LAorCTB4NzllMTY1ZTksIDB4ZDA4NDcxMWQsIDB4ZWZmNWMyZDksIDB4NWFjZjQwMWIsIDB4NTRmYmQ4NDgsIDB4YTYwZmZhZGEsCisJMHhjNjMwN2IzMywgMHgzMGJlNTE0OSwgMHg3MTBjNGNkNywgMHg5ZGNjMWY5NCwgMHhjZjRiZWVjYiwgMHgwYzYzMDcwNSwKKwkweDJkMTczZWE2LCAweDNlMjdhOTlmLCAweGQyYmI4Zjc4LCAweGQwOTlmN2EyLCAweGZmYmVhOWVmLCAweDc1ZWZlMjZlLAorCTB4ZDU1OGI4OTMsIDB4MjFkOTc4M2QsIDB4OWNkZjljNjMsIDB4YmQyZmU2MTIsIDB4Zjc4NmQyYzUsIDB4YmExZGU3ODcsCisJMHg2MGY3ZGNlYiwgMHgxNGY0NmYyZiwgMHg3MTc3YjhiMSwgMHhiYWY3ZjBmZiwgMHgzZTgzZjEyYiwgMHg5YzJhN2EwOCwKKwkweDVmZWUyNGZiLCAweGZmNDA2MzVmLCAweDJhZGRiNmJhLCAweGNhNjY5ZmJlLCAweGQ5YTM4YjEyLCAweGM1MzNlMmMzLAorCTB4M2JlYmE0ZmUsIDB4Zjc2N2NhNjQsIDB4NDhmN2UwNjAsIDB4YmUwYzFiMmEsIDB4NjdhMGI5ZTEsIDB4YmIzZDQ3ZWYsCisJMHgyZTQzNjRiZSwgMHg5MjdlYWZlMCwgMHgxYjk0ZGM3NCwgMHhhZmQ0ZWYzYywgMHhkN2I2MGJmZiwgMHg3YTZkNjdmMiwKKwkweDRmZDVmNmI5LCAweGJkMjEwZjFhLCAweGIxZDE3Mzg4LCAweGI1ZTYxZjQ2LCAweDEzMDVkNmY2LCAweDkzZmQxN2ZmLAorCTB4NmRlMmZmNjMsIDB4NTdkYzc0ODIsIDB4ZDBjNzBmOGUsIDB4M2IxYmZiNzUsIDB4ODI3YjJkZmYsIDB4YmIwODIzYjAsCisJMHgyMTRlZDY4MiwgMHhiZjc4ODhmOCwgMHhlMzZlOTdkMiwgMHhhMjk2YjJlZiwgMHg1OWU4ODNkZiwgMHhjMWVkZjgyYSwKKwkweGQ3ZjlmY2ZlLCAweDI3ZDcxN2U5LCAweDYxZmZlNWQ1LCAweGY0Yjk3Y2ZlLCAweGU0YzQ5YjVmLCAweDhmZWU5NmFhLAorCTB4ZWQwY2ZkNTYsIDB4YjViZTgyY2YsIDB4NjIwMGJmZjQsIDB4MGJmOGU4NTIsIDB4MjdiYzI1ZWEsIDB4YWI1NTc3M2UsCisJMHhjZGY0OWM2MSwgMHhlNWI1N2RlOSwgMHg5YjgzMDY2NCwgMHhiMTVjMmU0NiwgMHgzYzc4NTAzYywgMHgwYmU3OGM4NywKKwkweDBlYzZiYzkzLCAweDg3ODEwZjc2LCAweGVmZDVkM2FmLCAweDQ4YmM1MzAzLCAweGFiOTcxNzE5LCAweGZhZmZmMmVhLAorCTB4YTJlNGUwMzksIDB4ODkxNzI2NmYsIDB4Y2I0ODlmNGEsIDB4ZTU2ZWI3ZTgsIDB4ZmU1NmViMTIsIDB4YjkwZWViOWIsCisJMHhkNjQ4YjRhNywgMHg0MGUzZWYwNSwgMHg4MWM0MzVmYywgMHhmZGQ5NzhmNiwgMHg1NmNjZWFkNCwgMHg1MjAzZGRmYywKKwkweDdlMDI4ODEyLCAweDk5NWVlYjc3LCAweGRlOGU5ZWZkLCAweDc5MGU0ZmExLCAweGY4OGJhZDNmLCAweDVjN2EwMDNlLAorCTB4M2JiZDllMzUsIDB4NzY5YjhkYTQsIDB4ZDVlYTc4ZjMsIDB4YmY3OGRkOTYsIDB4OWEwZWZiNTEsIDB4ZjM3NmNiODgsCisJMHhhMWVmYjRmZSwgMHg5ZGUyZjY4OSwgMHg2ODdiZWQwMywgMHgxYzc4MzI1MywgMHg2N2M5M2U3NiwgMHhlNzE3Mjk3MSwKKwkweGNmMjBkZGEzLCAweGRkMzVmYzQzLCAweDVkYTIzNTVmLCAweDRhYzdjNmUxLCAweDA1YTRmM2VlLCAweGEzMjczMmYxLAorCTB4OTc5OWRmMWYsIDB4YTNiZTcxNzEsIDB4ZDMyZmZmMmUsIDB4ODFkZDZjYWYsIDB4OTRhZWQ4ZjcsIDB4M2E2NDQ3N2UsCisJMHg4MjdmNDBkYywgMHg5YmYxZjcyZiwgMHg2ZmM4NGM1NywgMHgzZGYzM2JjNCwgMHhmN2MxOWU2YiwgMHgyNGJlN2E4NywKKwkweGQ0YmQ5N2U4LCAweGJiMTNlMzNiLCAweDA5YzQzNWQ4LCAweDU2NGRiZDI3LCAweGM3NzFkNzhhLCAweDFiYWY2ODNjLAorCTB4Zjc4NWM0N2IsIDB4ZTNiY2M3NzYsIDB4OTI3Zjg4ODAsIDB4YzMyOWMwNzcsIDB4MjMzZTg1YmMsIDB4ZmYyMDliZjQsCisJMHg3OGQ5ZjdlMiwgMHhmMmU1ZDU5YywgMHgzN2Y1MmJiOSwgMHg4Y2ZjYTdmZSwgMHhiNzVkNWVlMiwgMHhiZjA0NTdjMSwKKwkweDEzZDllMGU3LCAweGExMDNiZjgxLCAweDE5OTNmZjlkLCAweDkzYmU4YmJhLCAweDdhZTUxMWRjLCAweDhiMzRmMDEyLAorCTB4NWVmMTA5Y2IsIDB4ZGVjYzg1NzIsIDB4OTRlZGVmNDksIDB4ZWViODVlZDEsIDB4YWJmYjdlN2YsIDB4ZGI0Yjk1NDcsCisJMHhiZDZkZWExNSwgMHgyMjY1Y2Y2MSwgMHg3YmIxZDdhZCwgMHgwYWU1ZjkyZCwgMHg3OWMyNDljNiwgMHhjMjg3ZWMwZCwKKwkweDdmYWRhODllLCAweDI5N2IyOTRhLCAweGUzNWJlZDAzLCAweGRlZGEzZGYxLCAweDA2N2NkOTg3LCAweGZhZmQ1N2MyLAorCTB4NjAzZjhlMDAsIDB4N2ViZjFmMzksIDB4ZjQyZDkxNmYsIDB4MTlmMzk1OWQsIDB4ZGI0M2U3N2QsIDB4ZGYxMDczMjksCisJMHhmZjE3NGI5NywgMHgzMzJkY2VkNywgMHhhODkxZTI2NSwgMHhiYzkxY2Q3YywgMHg0YzI1ZWY0YywgMHgzYTQwNWRmZiwKKwkweDAyNDQ1ZDMxLCAweGJiMDhiYTk4LCAweGQ4OTRiMGNmLCAweDljNGU1ZDMxLCAweDVjNTVhZTk4LCAweDM3MTgxOTVkLAorCTB4ZjhjMDQ4MTQsIDB4MzlmZjE3ZDMsIDB4ZGNlNmU4MGEsIDB4MjE1YWUzNzUsIDB4ZjJkYmYxNDYsIDB4YmVmNTY5MjMsCisJMHhiZDg1M2M5ZSwgMHgzZmMyZjQ5NywgMHhkOWY0MDc3ZiwgMHhjYjg2M2ZmMywgMHhhMjQ3MWJlMiwgMHgxODQ4NjQxYywKKwkweGE1N2JkMzNmLCAweDU0ZDdiYjMyLCAweDE3ZGM1ZGYyLCAweDMyNWRmZGUyLCAweDk2ZTFmOTg5LCAweGZlZTI2NjI3LAorCTB4YzRjZGYyMDksIDB4ODI2ZjgyNmQsIDB4YjhlNzM5M2YsIDB4ZGNjM2M1OGUsIDB4YzY3YmUxMmEsIDB4NmUxZDdlZWQsCisJMHg5OTE1OWNiMSwgMHhiOWRkZjg1ZSwgMHgzY2FjZGRmNiwgMHgyYmRhMmVhNywgMHhkOGNlN2NkMSwgMHgyNmJlNTYwOCwKKwkweDRmZjcwYmRhLCAweGVlM2YxMjE2LCAweGZiNzBjNWNiLCAweDRiZmI4NjQ0LCAweGRmOGEyZjhjLCAweDgyMjdhMDBiLAorCTB4YmY2ZDEyYTEsIDB4ZWVjY2MzYTIsIDB4MzBmZjEwNTEsIDB4NzBiOWZmZTAsIDB4NGYxNzBhN2UsIDB4ZjFmMTg0MzMsCisJMHhiZjE5NDNkMSwgMHhiNmE2NWQxZiwgMHhlNWU1MGM4NywgMHhkZjY1MjlmNywgMHgwY2I0NzgwNywgMHg4MTBkNjQ3MSwKKwkweDliOWQzMWZhLCAweDNiMDQyYzFlLCAweDlmODA4ZTkwLCAweGI3YjFiM2U2LCAweGI0NTM1ZmEzLCAweDFiMjk1MTdiLAorCTB4OTU5ZmY1MDEsIDB4NjdiZmJjNTgsIDB4NGM2ZmJmMmYsIDB4ZmVhMTA5MDIsIDB4Nzk0YWI1YjEsIDB4MWEyYmQ0MmUsCisJMHg0MGQzZjhjMiwgMHg1MWRmODU3MCwgMHgyZjM5ODY3NCwgMHhkMWQxZjg4YSwgMHhiYjQzNjY3MCwgMHhkMjc3YzEzYywKKwkweDdlNTg5NTllLCAweDZmNWJlM2YyLCAweDVmNDE2OGRjLCAweGUzZjQwNzgyLCAweDQ0ZDcxNTE3LCAweDkxYjQ2ZjE4LAorCTB4ZmZjYzBiMTAsIDB4MWI3ZWZjYTcsIDB4YmIwMGM4NjksIDB4NGNjN2FhZTgsIDB4M2UyZmQwM2EsIDB4ZWUxOGUyYTIsCisJMHg5ZTgxZmNmNywgMHg5OGZkMjFiNywgMHhmZDIxOWI5ZSwgMHg0MzM3M2QyMywgMHg5YjllOWM3YSwgMHhjZjQxM2QyMSwKKwkweDM4YWU5MGNkLCAweGNjYzc4NzZmLCAweDhlMjE4OWM5LCAweGYwYmZkMGI5LCAweDViZTc2OWY3LCAweGQ3ZjE4NDM5LAorCTB4MWFmN2YxYmUsIDB4MTRmYmZjNzEsIDB4MGZiN2MyMTcsIDB4ZmUwODdiZGYsIDB4ZDFiM2VkZGUsIDB4OGI5ODk0ODEsCisJMHhkZWNmNWJkMCwgMHg3NDlmYTNiZiwgMHhmZjA4YjgyMCwgMHgwYTdjYjZhMywgMHg2ZWVlNmJjNywgMHhkY2ZmY2EzZCwKKwkweGNhZDQ3Zjc2LCAweDg3MmI3YTkwLCAweGNlN2RiMTE4LCAweGEwYTMyNzBiLCAweDFmNWI2ZWZmLCAweDVkMTIxZDdjLAorCTB4Y2IxZDRjZjIsIDB4YjlmYzdjYWYsIDB4ODI4ZTM3MWIsIDB4MGZiZTNiZjksIDB4ZjlmNzQxNzQsIDB4ZGI3MzQ4NmEsCisJMHhmYzAwZmI3ZiwgMHgxZmVkMmE1ZSwgMHhhNDdhMjRlMywgMHgyZjNjNjZjMCwgMHg4NWExZDY2OCwgMHhiM2Q3NTg4MywKKwkweGEwOWI5ZGQxLCAweDBjMmZiM2ZkLCAweGJlNTA5NTg1LCAweDAxYmVkODQzLCAweGFkYzI5MjNhLCAweGU3YWUwMzc3LAorCTB4MTBhMDUzNDYsIDB4NzhkZDBiZWUsIDB4YTcxYjBlNDEsIDB4OGE1MjlmN2QsIDB4N2EwNjRlNzAsIDB4Y2FkZGZlNDMsCisJMHgwMjVmNDY1MywgMHg3Zjc0ZGY2ZiwgMHhlMjIzZmI2YiwgMHhhNWUwMTVmZCwgMHhhZmE1YzgwYSwgMHhhYzJmNDBhMiwKKwkweGVkMDRmMWU0LCAweDA2ZmQ4N2JiLCAweDI0MzllOWQ2LCAweGRhYmRmODEzLCAweGZkZWEzMWQxLCAweDQ5ZTM4YmI3LAorCTB4OGQ3YjM5YTQsIDB4YjNkN2MwNGUsIDB4ODMwZDRmN2IsIDB4N2UyOTg5ZjcsIDB4YzU3YmMxODYsIDB4NDU1Yzg2ZGIsCisJMHgzMWVmN2Y0MiwgMHg4Zjk3ZWM2NywgMHhmNTg3MTgzYywgMHhlNzY5ZjdmMSwgMHgxMDE1NmQ5MSwgMHhiY2RmMzMzNywKKwkweGQyNTgwZGZmLCAweDBhZjFkYjQyLCAweDljNTk5Yjg4LCAweDc0ODQxZDI0LCAweDE5Mzk5Mjg5LCAweDdkYzQ2NWUyLAorCTB4NGEyMzY1ODMsIDB4OWE5NmMyMGYsIDB4N2Q0NGFmNjEsIDB4NGM5ODE0YWUsIDB4MzcyODdjODgsIDB4ZDg0N2YyNDcsCisJMHg1NThhM2M4NSwgMHhhNTI0YTdlNSwgMHg1MzRmZWFhYSwgMHhkM2U1NTRiMiwgMHg5NTU0OGM0NywgMHhkODY3NzE4YiwKKwkweDQ2ZjU1NDBiLCAweGMyODYwNGM3LCAweDgzYWU4ZTc5LCAweGE0ZmYwM2JkLCAweDM5ODZmMThjLCAweDdlYjkxYzJmLAorCTB4N2NjZmNkMjQsIDB4NDNiZTBlNmEsIDB4OWYyZjJjZjksIDB4MTdiOTVjZjksIDB4ZTE0M2QxZjAsIDB4ZDUwYWE0NjksCisJMHg2YzFmOTJlOSwgMHhkMzNhMTA3ZSwgMHhmNzZhMTc5YywgMHhhMWQwNzEzZSwgMHhlMTc5YzY1YywgMHg4MTg0ZTcxMiwKKwkweGVkMTY0ZmRlLCAweGNhMDRlN2I1LCAweGJlMDAxZjM3LCAweGQ5YzVmYTM5LCAweDNlZGJmMDM2LCAweDE0Y2JmNjNiLAorCTB4Y2RmZDQ3ODgsIDB4MGNhZWZlMTAsIDB4NDQwYzNmM2YsIDB4NDNmYjdkMzcsIDB4YmNkZDE4NTIsIDB4YzMyNzkzMjUsCisJMHhmMjQ0MGRkMCwgMHhlOTY0M2EzMiwgMHg3ZWVjYzNjYywgMHhiNWYyOTVkZSwgMHhhMWFmODE0ZiwgMHg0MjQzYzBiZCwKKwkweDZiNTc3ZjdmLCAweGI0NmQxYmRmLCAweGIwMzZlNmZmLCAweGMzMmJiZDQ3LCAweDdiYmVhNTBkLCAweDZmZTEyYjkzLAorCTB4NjRlZjQ4MzksIDB4OTNiYmI2ZjksIDB4MDdiYmYwZTMsIDB4YjczNzYxZjQsIDB4Yjg1MjBkZjcsIDB4ZmZiYjU1M2UsCisJMHg2MGMyZTRlZSwgMHg1Yzc3NTkzOSwgMHgyOWRjOWY1NSwgMHgxYmYyYWIzNSwgMHg3YmY5ZDUzMywgMHhkYjQzOWI0YiwKKwkweGFkOGZhNDBmLCAweGQxODk3ODdjLCAweDZlZjcwMzk1LCAweDM3YmZiMGE1LCAweGZmZjNlNjJjLCAweGQ1ODAwOTAxLAorCTB4MDA4MDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4MTliNWZmMDAsIDB4NjU1NDU0MGIsCisJMHhjZWY3YmJmYSwgMHg3ODYwMTkwYiwgMHg3NzQyMTAyOCwgMHg4NDBhNDQ5OCwgMHhiMDI4NTc4OSwgMHhkNzFlYTA4ZCwKKwkweDhmNGMxYWRhLCAweGU1OTM1NjU0LCAweGUwNGQ3OTAzLCAweGUzZDhmNGI2LCAweGI2OGZhZDE4LCAweDY5NWI2ZDA3LAorCTB4OTY1NjM1NmIsIDB4YjEzOWU0ZTcsIDB4MzYyNTQ2NDQsIDB4ZWI0OTViYWUsIDB4NjZhMjU0ZDYsIDB4NDJkODk5ZTQsCisJMHg3YTI2NzA0YywgMHhmNzVhOWQ2ZCwgMHg1ZWZmZmVmYiwgMHg1YjYwMmU2NywgMHhlNzRlZDY5ZCwgMHhmZmZmZWY5ZiwKKwkweDI3ZWY3ZmZiLCAweDcwY2ExNDkwLCAweGY2MDgwMGNlLCAweDk5NzBjY2FjLCAweGQ2ZjcwNjAxLCAweDgwMThlNDFhLAorCTB4ZTJlZmY0ZDMsIDB4ZjliOGRhZjAsIDB4Y2YwMzgzN2EsIDB4M2EzODAwNTcsIDB4MDFjZmUzY2MsIDB4MDMxNDAxZDYsCisJMHg3YjgxMjk1YywgMHg1OTE0ZjNhMiwgMHhmZjYwZTc2MCwgMHgyZmJkZjE2NSwgMHgwMDQ5MDgwMSwgMHhkZThkMTc5ZSwKKwkweGUzODQ1NmVkLCAweDZlNjcwNjVjLCAweGYwOGQ5ZWY4LCAweGQ5MTgwNjRlLCAweGJmZWZmZjcyLCAweDI1ZjVjMjJhLAorCTB4OGMwZWUzYjAsIDB4YmQwZDQzYzQsIDB4NWM3NWQ3OWIsIDB4OWZjZDcxMTQsIDB4NzdkMWQ3MDQsIDB4OTg4MDk2NzksCisJMHg1NTcwNmI4MCwgMHgwMGUyMDdiNCwgMHgzYzYzNmE5YSwgMHg2NzllM2U2MiwgMHgyZTk5MGU4NiwgMHhhNmYxYzgwNCwKKwkweDAxNTI5YmI1LCAweGMwMjI4YThlLCAweDc4MDc0NDM5LCAweGUzZWYxNGEwLCAweDI0NWYwNDFiLCAweGE0ZWYzOWE3LAorCTB4NjdjOGI5ZGYsIDB4ZTdjNzJmY2MsIDB4MzViMDMyNDUsIDB4ZTk5NDMyYmYsIDB4N2VkNzdiYzYsIDB4YmYxY2U3ODcsCisJMHhjZTkxYTIwMywgMHg4ZjRhODAzZiwgMHgyZTVjNGMwMywgMHgxOWJkYmIwNCwgMHgzZjIzM2ZmZSwgMHgxODEyYmQ0ZCwKKwkweGYwNjE5ZjkwLCAweDYwNWFiYTFkLCAweDI1YTljY2Q3LCAweGE3ZTkyYjAwLCAweDA2MWRmYjRjLCAweDE5NmZkODkwLAorCTB4YjI5NTdmNzAsIDB4ZTU3Y2IyYmYsIDB4ZjA4YjEwYTUsIDB4MjA0MGZkNTYsIDB4YTcwZmJkOWIsIDB4N2ZkNWZmZjEsCisJMHhmMTk4Mzc2ZiwgMHhkYTUzZjU3YywgMHg1MzBmNDI3ZCwgMHhmYmU1MmY5MCwgMHg3N2IzZjAzYSwgMHgzZGUyNzdlYiwKKwkweDIzNWVmODUzLCAweDg0OTlmZGRjLCAweDY5NzYzNmVmLCAweGM3MjQ1ZmJmLCAweGUwZTYwZDI0LCAweDM4MjgwMjhmLAorCTB4OTE2ZGIxMmQsIDB4ZjEzNjZiZGUsIDB4ZGY0YWU2ZjcsIDB4ZWEwOTdiYmQsIDB4YzkyNWU5YjEsIDB4ZDFhZGM0NmUsCisJMHgwMGUyZDNkZCwgMHhhODM5ODNmOSwgMHhmMmYxZDRlNCwgMHg3YThjZGE2YiwgMHhhN2MzMGMyYSwgMHhiZGYzNGI3NiwKKwkweGNhMTc1Zjc0LCAweDVlMzE5ZWE4LCAweGUyYzk2MGNlLCAweDVmMWMyY2Y4LCAweDBiZDdjNTczLCAweGY3MzVmMTAxLAorCTB4N2VkMGQwZTgsIDB4MTE0NmNmMDAsIDB4Y2YzYzA4ZTQsIDB4ZjJhZTMxZWQsIDB4MDdmNGMzOWEsIDB4ZmNjNzljMmQsCisJMHg2NjEzMmY5ZSwgMHgxZDc1ZjJlNywgMHgxY2VkMDFkMSwgMHg5OGJmNzAyZiwgMHgwOTNlODAyMSwgMHg2MGI1NDFmMSwKKwkweDVmNGI4ZWRmLCAweGM5MjU3MjRmLCAweDlmMDA0ZmJmLCAweDU4OWVjMDVjLCAweDVjZmQ0MjY0LCAweDdkYTM5ZmMxLAorCTB4OGZlMDI0MzMsIDB4ZTExZDZjOTQsIDB4ZmRjOGE4NTksIDB4N2M3ZmQyOGEsIDB4OGI3N2UwMjMsIDB4NDM0ZjE2N2IsCisJMHhkNzUwZTAwYSwgMHgwY2Q0M2ViMiwgMHgwYzZkOTA2YywgMHhlOGYwMTJkZiwgMHhmMTdkMmY0OSwgMHhhNDE2ZjRjZSwKKwkweDYwNDkzMmYzLCAweDFmMTdkZmY2LCAweDdmMTAxNjFhLCAweGQwYjQ0NTVmLCAweGVmZjdiMDI2LCAweGJlNTVmN2E0LAorCTB4NzRjZWY0ZmEsIDB4OGU2YmUzMzcsIDB4MjZmNTEwNjUsIDB4NGU5MDJlMzgsIDB4NDc5NzhmNDcsIDB4MTgzYWFlNTgsCisJMHg3MTJiZjU1NCwgMHg5YzdmMjE3NywgMHhmYjNlZGQyYiwgMHhkMWRiZjQxMiwgMHgyMjMxNjBhNSwgMHg2ODRiOTdiZCwKKwkweGFiYzMwODM4LCAweDQ5YWI4ZmRjLCAweGFlNTEzM2Q2LCAweGU4ODEzZjgyLCAweDZlMTc5NjZjLCAweGU0YmJmMTkxLAorCTB4OTc0MTdiZDYsIDB4MWQzNzIxMTgsIDB4MmY1NTMzZjcsIDB4ZDNjNzFjYWEsIDB4ZjcyZGUyYTEsIDB4ZDFiZjkwM2IsCisJMHg5ZmIzMDIxZCwgMHhlY2NjYmI0NiwgMHhlNGZjYjFiMywgMHg3ZjEwNGI4MywgMHgwYmIyNWZhMywgMHhlZWIyY2Y0OCwKKwkweDdlNDg0N2JkLCAweDQwM2I2YjFkLCAweGU3NDAxZTc3LCAweDJlYjY2ZWRhLCAweDUyN2Q5OTMzLCAweGQ5OGJlMzFlLAorCTB4NDE0Njg4YWQsIDB4NjA1NmFkN2MsIDB4N2MzNWE3YzYsIDB4MGM3YmU2MWUsIDB4N2MzZjUxYmMsIDB4MzgwNGNlMDYsCisJMHg5ZTdjZWIxOCwgMHhmYmYzNWJmOCwgMHgxMDk2ZmJjZiwgMHhlM2NhMWJiNSwgMHhhZDkwMWY5OSwgMHgzZmE2MWI5ZCwKKwkweDQ2NjAwMGRmLCAweGEzZGI0M2ZhLCAweDNjMzA0ZmJkLCAweDYxMjVhZjY4LCAweDI3YjEzZDdiLCAweDllMGI3MGViLAorCTB4Y2Y1Mzc4OWYsIDB4YzU1Zjc1Y2MsIDB4NDE2ZWE3YzMsIDB4NjhmNmNkNzgsIDB4MDkxM2U3MjYsIDB4ZjNhNTQ5ZTAsCisJMHgzZDdiYTYyNywgMHgxOGE1NjE3OCwgMHhiOTIxNmZlYSwgMHhiN2Q4YzY3NywgMHg0N2YxZjllMywgMHgxM2JiM2ZhNywKKwkweGE3NjdkYWUxLCAweGYyNGM4OWQ5LCAweDdkZTUxOTFmLCAweGRhMDExZDNjLCAweDdkOTUzZTdmLCAweGVmMWMyOTA3LAorCTB4YTUyZmM1MGEsIDB4NTdkYzY2NjcsIDB4MjRjZmU3NGUsIDB4YWE4ZjA5ZGEsIDB4YTM0N2ExYmYsIDB4ZmFmMjgwMWMsCisJMHgxNjc5N2MxMiwgMHg4MjkzYmQzNCwgMHg4N2M0NTA2NywgMHhjNzlkYzRlYiwgMHhkYmNiYjQwNCwgMHhjNDgzYWUwYywKKwkweGZlNDdlYWY3LCAweGY5MGNhODdhLCAweDM3ZTY3YWE5LCAweGZhNDRjZjBmLCAweDBjOWJkZjZhLCAweGFmNTg0ZWY0LAorCTB4NmM0MGUyZTMsIDB4ZGZmYzk3MjAsIDB4OTE1ZmZkYzYsIDB4Mjg4ZWRkNGYsIDB4NzExMWM3Y2IsIDB4NWUyM2ExYTYsCisJMHhhNzc1MzcwMywgMHg4ODhlM2U1YSwgMHg2NWMwNzUzNywgMHg4ZTgyZjUwYywgMHhmYzU3YTlmOCwgMHgxZDc0NWVhYSwKKwkweDIwMWFiYTI1LCAweDg0MjJlM2MwLCAweDA1NTc2NDBjLCAweDc4YTBlMDkyLCAweGM4YzdiYTEwLCAweGNlZDYzZmU0LAorCTB4ZDE5MTY1NDYsIDB4OGI4MjJmNTEsIDB4MjI0MTc5ZTIsIDB4NmZjODUyOTgsIDB4YzE3ZTVjNWQsIDB4NzEzZmE2N2IsCisJMHg5MjY2Y2ExNywgMHhmYmY1NDEzNSwgMHgyMjMzODVhYywgMHhmMWJmYjNlZCwgMHhjZGNmYjIxNSwgMHhjMzlmNjY0NiwKKwkweDhkMmYzYzUxLCAweDM5MWZmM2M1LCAweGMyYmY3ZDllLCAweDg3ZjMwNWY0LCAweGY1YTRmOTMzLCAweDE3Mzg1YWRmLAorCTB4MGFlZjE0MWMsIDB4OWJjMmU0ZGEsIDB4ZjQ1MTZkNzAsIDB4MjljNTJjNzIsIDB4MWRlZTQ5NTgsIDB4YzAzYWVmZjcsCisJMHhlNmY1YjllNCwgMHhiZjc3ODRhMywgMHgwZTBmZTk5OSwgMHgwNTA3Yjk3MCwgMHhmN2Q1Mjc5ZSwgMHhhMDQyOTg1NiwKKwkweGI3N2EyNDJiLCAweGZkZDU3YTMxLCAweGYzODcyZGMxLCAweGUwZmVmODVjLCAweDgwNzkzOTBiLCAweGYyNGNiY2Y2LAorCTB4ZTUwNWZlMGYsIDB4N2ZjNjJhNzMsIDB4M2I1YzM2ZWMsIDB4ODUzYmJmZjcsIDB4N2E1OGUwZjIsIDB4ZDk0NzViZWIsCisJMHgyYzNjMmE3YiwgMHg0ZjU0MzhmMCwgMHhmN2ZlZTA3YywgMHhhMjY0Y2U5OSwgMHg4YjA4YzMxMywgMHhjZDc3MDMwZiwKKwkweDJiOWJmMjYwLCAweGZlOTFjNmU1LCAweGY0YjQyNzgzLCAweDdkNTNhNThkLCAweDdkNGZhNTVmLCAweGNkMzdiZDVmLAorCTB4OGUzOTMyMmEsIDB4OTQ3OWZjMTgsIDB4OTBjYzVmZjcsIDB4YzQ4ZDdjMzUsIDB4Y2RlMmYzZmEsIDB4NzVlMTZmYjQsCisJMHgxMWMyMDI0NCwgMHgzZjQzNTZmNiwgMHgyNjM1YmY1MSwgMHg1ZjQ4ZGI4YywgMHg2ZjYwOGQ0ZCwgMHhhMWVmYjYwMywKKwkweGNmYWI4OWI4LCAweDI5ZjVlNzg1LCAweDAzNzIyYjJmLCAweDc4ZWQwOWE3LCAweDkwNjc2MmIxLCAweDZlZWNjODk0LAorCTB4NWViYjcwMTEsIDB4YWJlZGM0YWMsIDB4ZTgwZjQzYTAsIDB4NzVjNDQ3MmYsIDB4ZmRhMDM1YmYsIDB4YTAzYzc3MGQsCisJMHg1ZGM2NDU3NywgMHg3NGYxNTFjZiwgMHhiYjhmNGZjZSwgMHhhNmM4NGE5ZSwgMHgzMTYyM2RmOCwgMHg5ZTY2YmFiMywKKwkweDdiYjFkMDU1LCAweGY3NGU5MGU5LCAweDQzZWVkY2YwLCAweDFhNzRmMDNiLCAweGNmNDg2ZGVkLCAweDgxNzNhMmUzLAorCTB4NmY1M2U1MTUsIDB4MWY5MWU1ZjAsIDB4MmUzZGRmYTgsIDB4YjBmZWQ4YmEsIDB4ZTkwNTYwNzAsIDB4M2NiZTc0MWIsCisJMHgxYmM0ZWY1NiwgMHgyMzNhYzA0MCwgMHg3N2VlZDkzOCwgMHgyNWY2NWQ1MCwgMHhkNDEyYjhiMCwgMHhlMjI3NGQ0MywKKwkweGRkMTJhYTJkLCAweDNjNzBlNjlkLCAweDUxNjdlMzU0LCAweDVjYTNlZTBlLCAweGY1NWY2ODJiLCAweGEyOWJiNDU3LAorCTB4MzBmZGVkN2MsIDB4YjhmODVhM2YsIDB4NTE1ZGZiOTUsIDB4OThlZWU4YTIsIDB4NTc2ZTVmYzAsIDB4MWQwNmRjZjQsCisJMHg5ZTY3ZjcxMiwgMHhiOTE0Y2I0NywgMHg0NTIyZGQ2MywgMHg0YThkMmRkNiwgMHg5YWM2MGY5YywgMHg1M2YyMTIzYywKKwkweDgyZjUxYmI2LCAweGI3Y2U5OTcwLCAweDAyOGM1Njk3LCAweDlkZmE4YWQwLCAweDVlZmUzZTA1LCAweDUzOWUzNmI3LAorCTB4ZjJjYTU5MGUsIDB4Y2JjYjBlNzIsIDB4YWY3NTE0YjMsIDB4N2E0MGRjMTcsIDB4YzJmZTUxMzUsIDB4MmZjMTJlZjUsCisJMHgwODJiZmFkMSwgMHgxNjAxZDViMSwgMHgwNmE4YWQxZCwgMHgyNzAxY2ViNiwgMHg5YjgxZTc1YiwgMHg5ZGExZjNhZCwKKwkweDgzYTAwYmFkLCAweDlmODI5N2FkLCAweGFmODE3MGFkLCAweGI4M2U1ODBkLCAweGY5ODgzMmRkLCAweDUyYmQ3ZTE4LAorCTB4YjQ1Y2JjYTQsIDB4ZmM3YWUyNjQsIDB4Njc1ZTQ1NzEsIDB4Zjk0NjA3OTcsIDB4OGYyZjlmOTIsIDB4NjE0YWUwNzksCisJMHgyZTRkOWQ3NCwgMHhkZDk5YjM1MywgMHg5MjMxNzJhYiwgMHg1MTc3ZTI3ZCwgMHhiNWExNGRlMCwgMHg5ZGVjMDIwMiwKKwkweGYxOTBjOThiLCAweGViMjBkOTlkLCAweDA3MDJhZTA4LCAweDQ4ZmVlNzgzLCAweDVjMDY5NDc5LCAweDA0ZWU1NzNhLAorCTB4ZDg5YWE5NzIsIDB4NzYyODc2NGUsIDB4NWQzNjRjNTIsIDB4ODdkN2Q2MWMsIDB4NTQxNzFlNTYsIDB4NDlkMjAxYmQsCisJMHgzZWJjNjBmOSwgMHgyY2U4ODMyMSwgMHg1Y2ZjYWU4YSwgMHhkYWYxOTBjNiwgMHgzYTlkZjdiNiwgMHg4NTQ1YTM4YywKKwkweDg0MzYyZDk1LCAweGU1M2Y1OTBmLCAweGYzZTU1OTcwLCAweGQ5MWYwODk5LCAweDliYTlkMjc2LCAweDU5NWU3NjQ5LAorCTB4MTU2M2I3YTgsIDB4MzlkODZlYmEsIDB4MTg0ZGNmMDcsIDB4NGU1MGEzZmMsIDB4NTI4MjRkOTIsIDB4YjE1MTVkNWMsCisJMHg2NzdlODA3OSwgMHg3NGViYWM5NCwgMHhkYmM2NTdlOCwgMHg1NzE5YzU4MCwgMHhkNTlmODAxNCwgMHhlNDY1NjhiMywKKwkweDdlYmMzNTI3LCAweDdhZTE2MzVkLCAweGJkNzA2YmRiLCAweDYwZGE3ZTRhLCAweGM4Y2FjNWYyLCAweDczNzU5YWQzLAorCTB4NmU1ZjI5OTMsIDB4M2ZmN2YwMzAsIDB4YmNlNzJjOWEsIDB4MjIzMjcyODIsIDB4OTg0MTUzM2UsIDB4NDRmNzNjNGYsCisJMHhlNDEwMWMyMSwgMHgxODZiNTY5NiwgMHhmN2MwOGZmZiwgMHg3N2MyMWZjZiwgMHg1ZGViOGE2YiwgMHg1OTRkY2YxNiwKKwkweDUzNGZmYTQwLCAweDY3Njc3OWYyLCAweDI0NWQ4YTU5LCAweDNmODYxNmZjLCAweGQyZDU5MzEwLCAweDUyMDc0NzhhLAorCTB4N2JkMjFmOWMsIDB4Nzc2ZTE4YzEsIDB4NWViOTVhMWYsIDB4MzI5YWI2Y2UsIDB4Mjc1ODFmMWQsIDB4ZmJhZTBmZDgsCisJMHhlMjhmOTc3YSwgMHgwODQ4MjdkMCwgMHhkNTk5ZjNiZSwgMHgzNDc0NDAzNSwgMHg0MjhjODE4OSwgMHhkMTFkZDdkNCwKKwkweDI3NjQwY2M3LCAweGE4MGIxZGFhLCAweDdmYzhhNWJjLCAweDA2YmMwMzliLCAweDk2ZTUxZmU2LCAweDJkOThmNTMzLAorCTB4ZTVjMTA3ZWMsIDB4YTVjYTFlZjgsIDB4ZDJhY2U5YzgsIDB4OGQ0OTcxZTMsIDB4YTVhZDFmN2IsIDB4M2MyYWY2YWUsCisJMHhhMjQxM2MyMSwgMHhhZDBhNDlhNywgMHgxNTM4YmIyMCwgMHgxM2UxOWVmZiwgMHhiOTUzYTdlNiwgMHhhYmYxMmEzZCwKKwkweDZkZWY0ZjY3LCAweDQyNzQxYzY5LCAweGVkMzYxZjg0LCAweDBmYWJlNmY5LCAweGEzNGRkZjUwLCAweDBmNWQzYjY2LAorCTB4MTY5NmRmZmIsIDB4MWFiMDBiZWEsIDB4ZDUxN2M0ZDQsIDB4MWI3NTY3MmYsIDB4OTU1ZmQ0N2QsIDB4Mzk3ZjNlZWQsCisJMHhhZjc4YWJkZCwgMHhmYTcxNDZkZiwgMHgxYjQwZmVlMiwgMHg5ZWMxY2I5NSwgMHgyZmRjNjljMywgMHg2YmZlM2FkNCwKKwkweDkzZTRlN2UxLCAweDc1MDUxMmI5LCAweDkwNWVjYmFjLCAweGFiZTQ0NmJjLCAweDA1MGJlYTk5LCAweGRjN2MyMGY2LAorCTB4NDcxMzc2ODQsIDB4YTliZjc5ZjcsIDB4YmQwZDk1ZjYsIDB4MmZhODE5YWYsIDB4YzQzYzY3YzEsIDB4ZmY0MmFkNmYsCisJMHg1YzM3YWRhYSwgMHhhZDYyZjU0YSwgMHhkNjJmZGI1NywgMHgxM2Q3N2JmNSwgMHhiNDNiNzVkZCwgMHhkOWJmNmFmYiwKKwkweDRmNWY3Y2E0LCAweGVhOGQ5YWY1LCAweDI2YmRlZDNlLCAweGE4ZjMzN2VhLCAweDY3ZWVkM2ZlLCAweGE2ZmQyYTY2LAorCTB4YTk0MGZmOTIsIDB4NzcyYTU3MzMsIDB4ZWIzMzNmODgsIDB4MjM1ZTBjZmYsIDB4NjhmY2Q2ZjIsIDB4NzA0MmRkOGIsCisJMHhlMmNlZDliYSwgMHg2NjA2ZmQ2ZCwgMHhkODdkZWFjNywgMHg0NDZjYzg5YSwgMHg4ZGRhZGJmNSwgMHg1NTY3ZWFjMCwKKwkweDFiNGZmOThlLCAweGZjOGZhNDFkLCAweDVkNTk5M2E3LCAweGFiM2NmNThjLCAweGYwOWUzMDQ3LCAweDIyNjUxZWZlLAorCTB4MTczZGRkYTAsIDB4MTExNGNhMWYsIDB4ZDkzZDczY2YsIDB4NWZiN2FhNzYsIDB4N2Y4MGViNWUsIDB4NGZhNjE3OWQsCisJMHg0YWU3ZjdhZCwgMHhkNDBjYWIzYiwgMHg3ZDg4ZGQ0NywgMHhmNzM1NmUxNCwgMHg0MjY2ZDkzZSwgMHhkMDEzNzliOCwKKwkweDNiMmQyNDBkLCAweGUyYTZlYThlLCAweGU5NzgxMmZkLCAweDUwM2VmMDFkLCAweDFhOTc2YjhlLCAweGJlYjA1MjRmLAorCTB4OTQ0NzkwOGYsIDB4MDllNDA5M2MsIDB4YTJhMzc5ZmEsIDB4MDRlY2U4YjcsIDB4ZmQ4Yzc5Y2QsIDB4NzFmN2NkMWMsCisJMHhlZmRhOTlhNSwgMHg2ZTdmMGUzZCwgMHhmZTczYzUwOSwgMHgwMmUzYmM3ZCwgMHhjMTM2ZmRjZCwgMHhjZDkxZjc2ZCwKKwkweGJjM2ZmMDA0LCAweGIxODhhZTU3LCAweGNkODJiZmMyLCAweDE3ZTcxMjFkLCAweDg4NmZlZTY4LCAweGVjOWZiNzlkLAorCTB4ZGQwYmZjYmIsIDB4NGI3MDNiMTgsIDB4MDE2NTc3NjQsIDB4MmY1MDQ3ODAsIDB4ZTdiNTg2YjMsIDB4MjFkYjA3YzUsCisJMHgxZDQ3ZjExNiwgMHg1Nzk5OGRkNCwgMHgxNmVhODA3OCwgMHg1ZmRkYWNhMywgMHg1NGM1ZGFhZSwgMHg0Mzk5YWE5OCwKKwkweGI3M2I5MTljLCAweDkxMjFkMWZiLCAweDljMDk0NWQ5LCAweDExNzk3MGY3LCAweDVlMGY1OWM5LCAweDQ2ZGNiYzc5LAorCTB4NjZmYmE1NjksIDB4NTk4YmYzMDMsIDB4OGE3NjJkYmQsIDB4NWE5ZDkzNDcsIDB4NjhkNzI3ZjksIDB4ZDJlYTlmZTUsCisJMHg5NTZkM2JjYSwgMHg2ZWU5ZGU1NiwgMHg2ZGNmYmNhZCwgMHhlYWQ3Y2FkNSwgMHhiNmNmY2FkMSwgMHhmZWU2OTY3MSwKKwkweDBkNGFmNmI0LCAweDAyZjM3ZDNjLCAweGJkZjNmZGNkLCAweGNlNzAzNTBiLCAweGY3MzRhYjhlLCAweGQzMmM3NDY3LAorCTB4YWY3N2U3OWMsIDB4NzZhYjljZDYsIDB4MmUwZWQ2MzYsIDB4YjE4ZjM1ZjQsIDB4MDhjNDExMzMsIDB4NTY3YWFiZmQsCisJMHhmZjcwYTBlZCwgMHhmZjNjMWFhZCwgMHgxZjZmZmQ2ZiwgMHhjOGE3ZmZhMywgMHhiZGRlMzFkNywgMHgzNzc0M2IxNSwKKwkweGQxNjVlYmI5LCAweDk5OWRhZTNjLCAweDU5ZWI5NDI3LCAweDljYjZmNmJmLCAweDc3NDMxNTU4LCAweDU0ZTZmYzk1LAorCTB4ZmY5NDFiZjIsIDB4MGUxNmMzOTEsIDB4N2RmNmZkZGIsIDB4OGUwYWNmMTQsIDB4YWU4OGFiMzgsIDB4MWY3YjgwYTIsCisJMHhhMTkyZjM4NSwgMHhiYTM4YWFmNiwgMHgzMmQ5MDBlZiwgMHhlODljOGY4NSwgMHgwMmE1ZTVmZSwgMHg4NTdlMzRlOCwKKwkweDNjYjA5NGYwLCAweDkzYWNmMGFmLCAweGQ5NzJmMGUyLCAweDE2MzZkZTc3LCAweDRiZTljOTZlLCAweGExMjBmM2MyLAorCTB4NmE4NWU3OTQsIDB4MjJlODE0NDcsIDB4ZWNhMTUyZTQsIDB4MjllOTI1MDMsIDB4ZjNhYmY5NjEsIDB4YzAwN2VjMjMsCisJMHg2ODgwZmQ0MCwgMHgyNzU5YjZmMiwgMHg5YmVjNzdhYSwgMHhiOThmNTYyNSwgMHg4NmY2N2Q1OCwgMHhhNTczNjJlMCwKKwkweDA2N2YyNjQ1LCAweDI1ZGZmN2M1LCAweGM0Y2VkZWJiLCAweGI0NGE3NmI4LCAweDEzOWVhY2NiLCAweDU0YzQ2ZDAyLAorCTB4YTRhMzE4OTAsIDB4NzZhZmE5ZTUsIDB4ZWQ4NzFmNTAsIDB4ZmYyYmNkMmMsIDB4YjU2ZDQ3NzQsIDB4NmY5MTk3MjcsCisJMHhiNmYwOTQwOSwgMHg2N2Y1ZmU5OSwgMHhhMjY0OGViYSwgMHhjYjA0MDdmYywgMHhmNmZjNDJmYSwgMHgzMzI3NTlhZCwKKwkweDI1MTk3ZjI4LCAweGNkMDE0NDk0LCAweGU5NDcxYzRmLCAweDI0ZGNjY2ZjLCAweDc4YzNmOTE5LCAweDBmNjUxMDFiLAorCTB4YWI3M2MyODksIDB4OTM5MGZhYzAsIDB4MDhjY2Q4ZjQsIDB4NjdhOGRkZmYsIDB4YmU5NDBiNzksIDB4NWU0NTFhZWMsCisJMHg1NGI2NWY2YSwgMHg0ZjgwM2ZjMSwgMHg3ZTc4YzJhYywgMHg0YzFiZjc0ZCwgMHhjMzI5NzUyZSwgMHg2ZGNhMWNjYSwKKwkweDM3ZmJlMGI3LCAweDUwMTczNTRjLCAweDQyOGUwYTVmLCAweGQ1ZTdlZjNiLCAweGZhNGQyZDNlLCAweGVkNTU3OTI5LAorCTB4YmY3NmNmNmIsIDB4ZDM0ODY1MmUsIDB4YzRjZWMzMmYsIDB4NjM5MWU3MDksIDB4YmU2MTVlZTcsIDB4OWIwM2ZiZjksCisJMHgxYTFlNTlhMiwgMHhlNmNlOTRkOCwgMHg0ZmY3ZTE4YiwgMHg3MWFmZjdiMSwgMHg5M2IxYTNiZiwgMHhkN2RmNWFlYiwKKwkweDllZjVkZmQ4LCAweDgxZTczNDhmLCAweDBkM2U5MGE0LCAweDRhZWMwZmY5LCAweGNhMzU3NzlkLCAweDYzMDVlNDZmLAorCTB4YThhYmY1MDksIDB4NzE1YjM4YjcsIDB4M2RjMGZkZjgsIDB4YmUxMGU3ZDMsIDB4YTdlN2NkZmYsIDB4NmJmZGJlNGMsCisJMHhhNmVlNmNmZCwgMHhlZDZjNzlmMiwgMHhkNjA3MDYxMSwgMHg5NjNhZDgwNiwgMHg1NWJmYjU0ZiwgMHgyMGRmYzM1NywKKwkweDkwZTVlYTliLCAweGQxM2VjOTMwLCAweDFiMzFlNmJjLCAweDY3ZmE4M2VmLCAweDdjYTRhOTRmLCAweGQwNmU5ZmRjLAorCTB4YzM4YjM1ZjEsIDB4MGUyNmE1YTksIDB4NmI0ZjliY2YsIDB4NDhkZTZmNTAsIDB4MDBiZjZkZmQsIDB4NjFlZDAxMGUsCisJMHhlYzdjZTBhOSwgMHgzYWJiZTQ3YSwgMHhhMzZiOTVkOSwgMHgyODc1NzI3YSwgMHhkMGZlODc0ZiwgMHg1NmI4MWY5NCwKKwkweDFlYmU3ZDQwLCAweGZlMjdjYWVmLCAweDUzMDYyYzA1LCAweDU5OWQxODEzLCAweDg5MGMzN2Q0LCAweDYzMDEzYzllLAorCTB4NzY0ZjRkYzEsIDB4M2ZmZDUzNTcsIDB4OGE3M2M5MzQsIDB4YWRhZDc2MzIsIDB4ODNmYTlhYWIsIDB4OGZmNzAzMjEsCisJMHg4NDdjOWU1YiwgMHgxNmI3YzNmOSwgMHhlNzdhNGNkNywgMHgzMWYyNDExMywgMHhmMDQ5N2U3YiwgMHgxNmY2Njc2ZSwKKwkweGY4OGMyYzMwLCAweGFmM2E4MmJiLCAweGZhOWI3ZWExLCAweDVmMTQ2MDliLCAweGRmZjhkYjY3LCAweGFjYzcyYTVmLAorCTB4YWUzYzZkNGIsIDB4MzE2YjQyZGQsIDB4MmNlZWU1ZTksIDB4ZThjYTdiZmEsIDB4NWY5MDIzNjYsIDB4NDg4NzNlMjAsCisJMHg1Y2Y4N2FmOCwgMHg0MGYyMGE3NiwgMHg2ZjU2MGQ3NSwgMHg3ODI4NWZhYywgMHhmOGEzZThkNSwgMHgxNjc1Y2VhMSwKKwkweGJkZWNhY2RiLCAweGQ3OWYxYjI0LCAweGY0NjdkZDI0LCAweGVlZmNiMWI2LCAweDNhNDZhOGNmLCAweGVmNThmNWRiLAorCTB4MTA3MGRmNTAsIDB4ODQ2ZDFjZDgsIDB4N2ExMTYxZTYsIDB4ZmRlMzZjNTksIDB4YzAwOGRjMTcsIDB4ZDFiNzkzY2YsCisJMHhjMGVmNDM3OSwgMHhkZjI3OGEzMSwgMHgyNGFlYmE2NywgMHg3Mjg4MGMzOSwgMHg4NjkzYzUwOSwgMHhkZWFjYmRkOCwKKwkweGVjYzliNjZiLCAweGYxOTdhNDNiLCAweDRlZTE3MThmLCAweDM4MmZjZmQyLCAweGZhNDU1YzBmLCAweDc4MDUzMDZkLAorCTB4MDNjY2FhZGQsIDB4OTFiNzI2Y2YsIDB4NzI4N2ZlZTUsIDB4OWVjYmZjZDksIDB4ZjRhOWY0NDEsIDB4YjZjZGZkMjIsCisJMHg0YTlkYjk4OCwgMHgxZjlkZjg3ZiwgMHhhZTc1MGJmNiwgMHg1YjgzYzJhNSwgMHg5ZjkxNjQzNiwgMHhiY2Y4NWVhMSwKKwkweDViYWUxMjUxLCAweDBmZjdjMTM4LCAweDk2M2VmYTJhLCAweGZlMTBmNGUyLCAweGY3M2U2ZWQ1LCAweGZiNGRkYjBiLAorCTB4Y2Y0OTQ3Y2QsIDB4MjcxNjY2YmQsIDB4NThmZGY2Y2YsIDB4ZjRmNjFiM2UsIDB4OWYyMDc5MzIsIDB4MTE3ZjEyZDcsCisJMHhjOTFiZGU3YywgMHhlMWNmNDhlNywgMHg5ZmU1NzI4NywgMHg5ZDMwNWZjZiwgMHhiODI5MWRmZiwgMHgxOTBjOWJlZCwKKwkweGZkZDg2ZmJmLCAweGJiYjIxMWM2LCAweGRmMWU3NTA2LCAweDE4MzM5ZGE1LCAweDlhZmY2MTI3LCAweDFkMWNkMTMwLAorCTB4NWQ0NDRmYjMsIDB4OWZiZjU0NjYsIDB4OGY3ZWQzYWEsIDB4YTljZDM5MDUsIDB4YTlkZmM5YmIsIDB4YmZmMDcxN2UsCisJMHhiOGY5YTk4YiwgMHg4NDZiZTk0YiwgMHgxZjJjZWJjMCwgMHg4N2YyM2UxMCwgMHhlNTg3ODJmNSwgMHhkMThlNzU0NSwKKwkweDIzZGU2MDI2LCAweDU4NWFiYWRkLCAweDM1Y2U5MDllLCAweGJiOWVjOWRiLCAweGU0ZmQwNmQwLCAweDM0NDczYTA3LAorCTB4ZTk4ZjVmOWIsIDB4YjgzNWJmYTMsIDB4ZDZmYzkxNzYsIDB4NGM5OTUzYmMsIDB4OWJlNzc2N2QsIDB4OGQ3ZTk0MGIsCisJMHhjNTYyYTllNywgMHgzZjA5OGIyZSwgMHhjNzFiOWZkMSwgMHhhMTQ4YjVlYywgMHhmNTg0YzRhZiwgMHg3Yzg1MjY1MCwKKwkweDE1ZTdjNDhmLCAweGQzNjNmY2NhLCAweGVmM2U5YWViLCAweDY4NTkzMmJmLCAweDAwMWUwMDUzLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYWI2NzhhLCAweDMyZWE3ODMwLAotCTB4MzFlOWM4MzAsIDB4NDNkMjRjMzAsIDB4YjcxMmQzODgsIDB4OWZhNjUxNzMsIDB4ODE4MTg1OWQsIDB4ODFiOTg4MTMsCi0JMHg1Zjg4MTc5OCwgMHhiYzMwMzIzMSwgMHhmZjVlMjQ2NiwgMHgzYjA0NjE0NywgMHhlMTgxODA0YiwgMHgwYjZmOTAxMywKLQkweDMyMDg5ZmE0LCAweGIyMDc1YzMwLCAweDAzNzEwMzNmLCAweDg4MDczZjkwLCAweDM1YjEwMDU3LCAweDQ4MGZiZjkwLAotCTB4YTNlMjA0ZGYsIDB4MTg0NWZjNDAsIDB4MDk1ZmY5YmYsIDB4NDIxNTZmYzgsIDB4ZTM0NDNmZTUsIDB4YWZjNDE1OWYsCi0JMHhmOTgwODI1ZiwgMHhiMWU0MDQ3MiwgMHhlNDIyNjllMSwgMHgwYTZkYzdjNywgMHhkZTA0MGVmNCwgMHg2N2NhODZhNiwKLQkweGUwNjA2NTUzLCAweGFhYzU4YTA3LCAweDkxZGJmODQzLCAweDYyODFmM2U0LCAweGY2MTBhYWVjLCAweDg2MDYzOTZiLAotCTB4MWRiOTQwNWYsIDB4N2RjZGQ4NmEsIDB4MGRmZjk0MDMsIDB4OWE4NmFiOTQsIDB4ZjFiOTAwMDMsIDB4MDM2ODUwNTQsCi0JMHgwMDAwMDM2OAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTkxNWM1OGEsIDB4MTlkNDQ0MTgsCisJMHgxODM0NGMxOCwgMHgyMDY4NTYxOCwgMHhiNTg5NjljNCwgMHg5ZmQzMjliOCwgMHg5MGMwYzJjOSwgMHg0MGI5YzQwZCwKKwkweDdjYzQwZjljLCAweGZjMGMwYzRjLCAweDE3ZWJjNDRjLCAweGY1YjA0NTE0LCAweDg0MTgxOTA0LCAweDAyNmZmYzgwLAorCTB4ODVkNzBjMGMsIDB4OGJiZTE4MTgsIDB4MDMwODMwMzAsIDB4ZjE0MDJlZjksIDB4MDFjZTIwMDQsIDB4NThhMDZmNjIsCisJMHgwNDVlOTAwYiwgMHgyYzQwZGRjNCwgMHg3Y2RmOGEyMiwgMHg2YmYyMDI1MSwgMHgzN2Y5NTE4NSwgMHg4NDdiZjhkMSwKKwkweDEwNTdlYmYwLCAweDQ3YWYyZmMxLCAweDE2MWIxZTQwLCAweDNlM2YyMmQxLCAweDNiZDAyOTIyLCAweDAxNWY1ODEwLAorCTB4YzcyNjVmOTUsIDB4MGYyN2QwYzAsIDB4YjhhODdmOGMsIDB4NGJmYzkyMDEsIDB4MGU1Y2JiMjAsIDB4NjA5NmY2YzIsCisJMHhmMjA2Mjg2MCwgMHg5YmIwMTUwZCwgMHgyZjk0MDNlYiwgMHg4NTdkY2EwMSwgMHhjYzAwMDNjYSwgMHg2ODhjYmFjYywKKwkweDAwNjg4Y2JhCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1fcHJhbV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHg0NTU0NzgwOSwgMHhiZWRkNzBiNiwgMHhlOWQzYmI3ZCwKLQkweDg0ODQ5ZDI1LCAweDE2NzRiMDkwLCAweDI2YzQzNTEwLCAweDYzMGEwODQwLCAweDk0NGMyMTI3LCAweDYxNTE1MWE4LAotCTB4ODQwOGVjNDQsIDB4Zjk3MDdkOTAsIDB4MzdkN2Q0NzAsIDB4ZGY5NTAxMmMsIDB4M2UzMGViODksIDB4MGUwYzFhNzQsCi0JMHgxMDM2YTBjMywgMHhjNmMwNmEzMCwgMHg2ODBlODMwMCwgMHg4Y2MwODM3OCwgMHgzNjQ1ODRjYiwgMHg1YzcxMDkyMSwKLQkweDdmOWU2NDY2LCAweGJiNzU1MzlkLCAweDQ4ZTliZGVmLCAweDliZGZmYzc0LCAweDNmNmZlZjM3LCAweDU1NmVhMmJmLAotCTB4NWIzYWFhOWQsIDB4YWE3NTNhOWQsIDB4NDIwNDk0NjIsIDB4MWJlNDI2YWUsIDB4NzFmNGQxZjgsIDB4MTA5MjEwOTEsCi0JMHg2OWYyYmI0ZSwgMHhiOTEwOTYzYSwgMHg5NmJmY2EyNywgMHhmZjZlMGQ1NiwgMHg0MDE5MDRmYSwgMHg1YmU2YjljOCwKLQkweDQyNTRlNjVjLCAweGMxNTEzZDNjLCAweDM5Zjk2OWFiLCAweDRjZGY5ZTdmLCAweGJjYjYwYmNiLCAweDdjZDIzMGVmLAotCTB4MDhkMTE2ZjUsIDB4MTZlZDg2ZTUsIDB4NGFiOWRmNmMsIDB4ZDZiZTQzZjAsIDB4NTVkOGZlZGMsIDB4NDViZGRmMzQsCi0JMHg2ODI4NmIyNCwgMHgyMDY2Y2ViMiwgMHg4ODljODQzOSwgMHhiNDY3ZWMyMiwgMHgyMTIyNDgxYiwgMHhhZDk2MTY2NSwKLQkweDE2NjNiZDVlLCAweDYyZGU1N2Y0LCAweGZlZGExNjI2LCAweDgxZThiMzQ0LCAweDgyYjU4MmZjLCAweGFhZmVkMDlmLAotCTB4NGE2NjViNWYsIDB4ZjllNmYwYTYsIDB4NDVjNTgwODUsIDB4MzcxZjZiZjMsIDB4MmM4NGVjYjksIDB4YTM4MWZlZGEsCi0JMHgxOWM4NDZjMywgMHg5OTcxMTQ1ZiwgMHg4MWU1MWU3MCwgMHhmYzJhNDI0YywgMHhkMzI0YTcxYiwgMHgwNDFiMTVmNiwKLQkweGFmYzI4MWI3LCAweDEzYmU3NTU4LCAweDJjZDE1N2M2LCAweGJjMjkxNzBkLCAweGUyNTY3NWNhLCAweGZlZmFjOTFhLAotCTB4NmQ3ZjQwODYsIDB4MmRiZmIwYzcsIDB4NTdmNDA2NTIsIDB4MTM2ZWUxN2UsIDB4OTI5ZTYxMTEsIDB4ZDM1NWRhMDcsCi0JMHg5NWJjYzA3MSwgMHgxYWY4Y2Y3ZSwgMHgxODQ0NmI4OSwgMHhhMWJmZDU5ZiwgMHgzNTdhZDFmZCwgMHg5ODZlMGIyZiwKLQkweDc4ODE4ZDYyLCAweGFmOWQxYzYxLCAweDYwYmZhNjU5LCAweDliZDVmOTgzLCAweGYzZDVkODQ2LCAweGYzMGFkZDI4LAotCTB4MzZhZmYwYTgsIDB4ZjhjMWIxNGQsIDB4MzJjYTliNTYsIDB4ZDcyYWYwYzMsIDB4NTE1YzQ5M2QsIDB4NGNhZGYxYWEsCi0JMHg5NTU1ZTgxZiwgMHgzZTMzZDNlYiwgMHgwNTRmMTlhMiwgMHgwNmMwNTkyNSwgMHg2ZTliZjY3OCwgMHg3ZWZlMTUxYywKLQkweDdhNDU4ODU4LCAweDM1MTNhZTU3LCAweGYxZTUyOWYwLCAweGZkM2VmY2JiLCAweGJjODNjNTI3LCAweDliNWZlZWNkLAotCTB4MDJkYmE2MWEsIDB4MmJiN2ZkMjcsIDB4YTcxZWI3NGMsIDB4MWNlZWM3NDIsIDB4N2QyNTdjMzUsIDB4Yzc0MWU4MGMsCi0JMHg2MjczZThkMywgMHgwOTJmODRmYSwgMHgyZTdjYTdkMywgMHhiZTMzZDNhNCwgMHhmNGFlOTg5MSwgMHhiM2ZiZjFiOSwKLQkweDU3NGM1Y2JlLCAweDNlOTgzY2Y5LCAweGQ0YzIyYmVmLCAweDdhYzEyYmVmLCAweDMxZDM3YzZiLCAweGYxNzlmMjZkLAotCTB4NzJiZThiZmIsIDB4ZWFmOWQ3NGMsIDB4ZGY3YWZiZjAsIDB4ZjgzNzRjNDIsIDB4YjJmZWZjNjQsIDB4MDFhNjM5NmYsCi0JMHhiZTRkYTc0ZSwgMHhmYjM2OTg5NSwgMHhhYjZmNThmYywgMHgyZGE2MWQ2ZiwgMHg1ZjdlMDBiZSwgMHg5OGU3ZjFjMSwKLQkweDc0OGNmMjQ4LCAweDcxMGYwZWZlLCAweGI4OTM3MjUyLCAweDQ0OWU0ZjYyLCAweDJjMjU3MWYzLCAweGNlNTMzODlmLAotCTB4YTI3Y2QxMzMsIDB4M2UyOWU2OTcsIDB4Nzk4MmFiOTIsIDB4YWU0ZjlhNjYsIDB4MWY0M2U1NjMsIDB4MzQ1MWY5MjQsCi0JMHhlNTY2NTQzZiwgMHhmOTNjMmI2OSwgMHg2YjRmOWExNiwgMHg1NjIzZTU2NCwgMHgzNGQxZjljOSwgMHhjYWNmYzIzZiwKLQkweGNjMTBkYjJmLCAweDY1ZmNkMmI3LCAweGQ1OWU1NjAxLCAweDM0NmMwYTRhLCAweGY5NjQxNTlmLCAweDAyOWViZGVjLAotCTB4Yjc2N2NkM2IsIDB4ODdjZTdjYjMsIDB4ZTY4MzgxNzIsIDB4N2I1ODNhNzMsIDB4MTIwM2RlM2QsIDB4NmQyODRkOTksCi0JMHgzYzhiOTU5ZSwgMHg2ZjM0NDFjNiwgMHgzNzEzNzcyMiwgMHhhMzdjOGJjNSwgMHhlMjgxMzhjNywgMHhmOTYxNzI0MSwKLQkweDU4MjdmOTc2LCAweGMyZTRjOWJlLCAweDM2Nzk3NmYyLCAweDFlNGIzNzk2LCAweDU3MmEzZjJjLCAweGM5YjM3OTYxLAotCTB4OTE3ZmU1ODMsIDB4NTZmY2M1ZWYsIDB4YTZlNThiYzksIDB4ZmFjMzdmZmEsIDB4MmM1ZTRkNWIsIDB4ODY1ZmFhNGYsCi0JMHhjNjQ5MTZmOSwgMHgxYmVhY2JmMiwgMHg0OThiN2ViMSwgMHg5NjI3ZjJjNiwgMHg5OTMzZDJmYywgMHhlZjA0ZmI5NiwKLQkweDhiNjdjMDUzLCAweDQ5Mzk2ZjA1LCAweDI0MDlmZTA3LCAweDY5ZmU1MDk1LCAweGUwNzRjODEwLCAweGM5ODEwN2Q3LAotCTB4MjBmY2QxYzYsIDB4NjA1ZGNhMTMsIDB4MjAwYmNlNTcsIDB4MDAxYmY4YWYsIDB4MWYxN2IyZjksIDB4Y2YzODQ1NDksCi0JMHhjMjg5MWMyMSwgMHhjNzBlMmYxMSwgMHgwMzU3M2JiZCwgMHg1Y2JiYmRjNywgMHhkNDIyZjM4MSwgMHgxZmU5NmM1YiwKLQkweDJiZWVjMDljLCAweDVkZDllM2I1LCAweDA1NzljMGExLCAweDM3ZmJkOGUxLCAweDI2ZWZmNzJmLCAweGJiZjNjNzZhLAotCTB4MGI0ZTA1MmEsIDB4ZGZlZDg5YzIsIDB4ZDNlZDM2NzgsIDB4YmVkMzY3ZTIsIDB4MjA3NjdlMTAsIDB4MzdmYTEyN2UsCi0JMHhiNTc3ZWM5ZSwgMHgzNzdlYzlmOCwgMHg3MDc3OWY4NCwgMHgwN2ZhODMzYywgMHg1YWJiZDM2NywgMHgzNzdhNmNmYywKLQkweGUwM2Y5Zjg0LCAweDZmZjQ4Njc4LCAweDY5ZWZkOTVlLCAweDVlZmQ5M2YxLCAweDIyMWYzZjA4LCAweGMxZmVkNDljLAotCTB4OGI1ZjdlNjksIDB4NDNmN2U2OWYsIDB4ZTEwNGY5ZjgsIDB4YmNkZmVmMGMsIDB4ZTJkNDFlYzYsIDB4MTBjMWVjNjcsCi0JMHgzZjExM2E3ZSwgMHg0ZTBmZjY5NywgMHg3ZTJkNDFmMywgMHhmMDg2MGY5YSwgMHg2NzhlMjVmMywgMHgzNWU2ZmY1NCwKLQkweDNmMTY5MGY2LCAweGYwODUwZjYzLCAweDMzODAwNDQzLCAweGQ5ZTM3ZmJhLCAweDNmMTY5MWZhLCAweGUxMGEzZjViLAotCTB4YzY3MDgyYzcsIDB4MzkzYzZmZjUsIDB4OTNmMTZiMWYsIDB4M2YwODcxZjMsIDB4NDI2NzA4NzEsIDB4ZmQ2Y2UwZmYsCi0JMHhhZDlmOGI1OCwgMHg5M2YwODcxZiwgMHhmNTI2NzA4MiwgMHg3ZjM5NWU2ZiwgMHhlNzI3ZTJkNiwgMHg2NGZjMjFjZiwKLQkweDNlM2M5YzIwLCAweGQ4ZTE0MjFlLCAweGYyZDM4NmZiLCAweDJkM2YxNjg5LCAweDMzZjA4NDlmLCAweGYyMTRlMTBhLAotCTB4NGUwNDVjZjEsIDB4N2UyZDA5ZWUsIDB4ZjA4NDRmNzIsIDB4YWU3MDgzOTMsIDB4OTY5YzFmZTksIDB4YjRmYzVhMTMsCi0JMHhlN2UxMDg5YywgMHg1ZDczODQ2YSwgMHg3Yjk1ZTZmZiwgMHhkYzlmOGI1MiwgMHhhMzNmMGM5MywgMHhjMWI0OTZmNywKLQkweDQwZDc0MzdhLCAweDRjOWI0OGI3LCAweDA4ZjFlZTM4LCAweDY0ZThiZWI0LCAweDI2ZTlkMTc5LCAweDhhODg4NzYwLAotCTB4M2RkYTQxN2QsIDB4ZGI2ZmFkMjIsIDB4MDhmZDliMTAsIDB4ZjkxOWRiNTEsIDB4ZWM3OGMwMzcsIDB4ZGI1MmZhZDQsCi0JMHhkMWI5MzExOSwgMHhkNjJiYmIxYSwgMHhjN2M5YTcxMywgMHhlYTZiMjUxNywgMHg2OWE0OTQyNywgMHhiZjRlMDdjYSwKLQkweGM4M2U1MzRjLCAweGE3YzlhZDliLCAweGE5YTk1Zjk0LCAweDVmMmVhNDNmLCAweGYwYjYxZjkzLCAweDU0ZmQ0ZDVhLAotCTB4M2U0ZDI2ZjksIDB4MzQ0ZmY5N2QsIDB4ZGUzNzg3ZjUsIDB4NjRiZjI5YTUsIDB4ZmNhNjg1NjUsIDB4NGQwMmZmNTIsCi0JMHgzZjc1ZjJmZSwgMHgxNTFmZDRkMywgMHhiZjI5YTQ1OCwgMHg0ZDExZTVhMiwgMHgxM2UwZThmOSwgMHgzZDk4ZmM5YSwKLQkweDhmZWE2YWNmLCAweDI5YTM1ZjZiLCAweGJkNzg3ZjFmLCAweGM3NDI3Y2E2LCAweDUyOWU0ZDI2LCAweDcyZTI3OWMyLAotCTB4Y2Y4MTE3OWUsIDB4MDdlYmIzMDksIDB4MGI5ZWQwOTksIDB4Mzc5ODRkZGEsIDB4NGVkMGRiMjUsIDB4NWNjYmRhMGYsCi0JMHg0ZDFkMjljNywgMHgwMDZiYWYwNiwgMHg4NDg2ODE0ZCwgMHhjOTc5ZGJhZSwgMHg1MDc0OTdlNSwgMHhhNTc3ZGYzYSwKLQkweGZkMjcxMmY3LCAweDdiYzk5ZjdlLCAweGZkODIzMzg1LCAweDkwMmZlOTQ5LCAweDA2NWQ0ODI0LCAweGNiZTVmNTQ4LAotCTB4Zjk3ZmM2MjQsIDB4MWM0NjE3MjksIDB4MGQ2YmVkYTEsIDB4Njk2MjIzZGQsIDB4Zjc5MGNiYmUsIDB4ZjFmOTQwOTQsCi0JMHg3YzgwYzE1OSwgMHgzYTkyMmQxOSwgMHgyNjZkMTdhOCwgMHg0YjJmZjc2OCwgMHg1NjQxNzljZCwgMHgyMWYyZTdmMSwKLQkweDMwODRlZTU0LCAweDM3OTJlNWRjLCAweGU3OGFlYzA5LCAweGMxOTNkZmViLCAweDQyMTg2OGNlLCAweGM4NGM5NWU3LAotCTB4ODJmNzg0YWYsIDB4M2Y2ZDA2NzIsIDB4NGJjOTJjYTQsIDB4ZDQ0ZDk5ZTEsIDB4NmZmNzU3MGUsIDB4NjI2N2ZkYTIsCi0JMHhmZmQwNGRmZiwgMHgzN2ZhM2VmYSwgMHhmYTZhZTVhNywgMHhhZTVhMWE4ZiwgMHg0NGNhM2ZlOSwgMHgzYjUyNzdmYiwKLQkweGVmMTBmZWIzLCAweDRhZTkxMjlmLCAweDBlMTE1ZTQyLCAweGExZTZmZjYxLCAweDMyZmZkOGU1LCAweGE4OGZkZDEzLAotCTB4ZjUwZThmZmIsIDB4ZjFmMjBjZGYsIDB4MTA5ZmY0M2EsIDB4NTc2OWZlNjEsIDB4YjQzZmU3NmEsIDB4MTM3ZjNiNDIsCi0JMHhmYWY2ZmY5YiwgMHhhM2ZlZjMzZiwgMHgwYTZmZmU3MSwgMHgxZmYzNjY3ZiwgMHg2ZmU2YzE1YSwgMHhmZDQzNzA2NiwKLQkweGRmZjg0MjNiLCAweGE3N2ZmMzA5LCAweDRmYTdmOWFmLCAweDU4N2ZjZWQ0LCAweDY2ZmU3Njk1LCAweGY1YmJmZmQ2LAotCTB4MzZmZjc5MjcsIDB4ZTEzZGZmZWMsIDB4YjBmZjliMjQsIDB4NjRkZmVjMmEsIDB4N2Y4MWJhZjYsIDB4NzVkMTI5NGMsCi0JMHgxOTNmZGE3ZSwgMHg0MGQxMTU0YywgMHgwZmRhMTc2MCwgMHgyOGUzMjNhNCwgMHhiMGYyMTMxMywgMHhiOGUzODY5MCwKLQkweGRiZjE5YTJmLCAweGRmOTRkMTE3LCAweDg4YzhiZjUwLCAweDlhYTdlMjFmLCAweDZhNDNlZThjLCAweDZlNTQyY2I4LAotCTB4MWU4MTMzYzgsIDB4MWZiYTcyYzIsIDB4M2E4N2NiOTksIDB4ZmU0NDQ1YTcsIDB4ZmQ5OTRmMjYsIDB4M2I3OGU5YzMsCi0JMHhmMjE5NDQ1YiwgMHhlNDlhOWU3MywgMHg2YjU3N2QwNywgMHg0MDk2NzcyNiwgMHhjMjA5MjMzYiwgMHgxZTllNGZmNywKLQkweDJmM2Q0NmI1LCAweDUxYjczYTdkLCAweDkxYTFkMTNhLCAweDM5MWUzNjJmLCAweGEzYWM4YzlmLCAweDI2MDQyYmUzLAotCTB4OWZjZTE3MTgsIDB4NDIxZGZiYTAsIDB4ZTk0NzExZjcsIDB4OTNkMjAyN2UsIDB4N2U4ZmVkMTIsIDB4NDNmNzRlM2YsCi0JMHg5Yjk2YTRjNCwgMHg2NDQ3NmM3YSwgMHg3NDE5ZmJjZiwgMHhlNTEyYjdmYywgMHhkZTc5YzFlNywgMHhlMTQ1MjI4MSwKLQkweDRmZmUxOTE5LCAweGQwMzU3ZGQwLCAweDk1YTM2ZTYzLCAweDFlM2MzZjIyLCAweDZmOWMxZjNhLCAweDVmZTBhOTc3LAotCTB4ZDJiYzcwMjMsIDB4ZjZmMWI3ZjYsIDB4ZTE0N2M2MDQsIDB4MzZiMjcyY2YsIDB4MGY3MjUxMWYsIDB4Yjc5ZjI4YTIsCi0JMHg2NzAzNWUzMiwgMHg0ZDJmZjEwNiwgMHg1ZjZmZWRhMiwgMHhiNDIyNDNiMSwgMHg3NGExNDFjZSwgMHg5N2UwMDJjOCwKLQkweGM0MTIyNDA3LCAweDAyNDc2NDdkLCAweDQwY2NlNGM5LCAweDBjOWQ3YmUxLCAweGE1ZDM2ZGZlLCAweDM4MmExZGUzLAotCTB4NGYyOGE0YjMsIDB4YWNjZjFkMDksIDB4ZWYxYzQ1ZmIsIDB4YmNiNmFmMGMsIDB4NjNkNWJiNjMsIDB4Y2FlOWEyYzgsCi0JMHg0OTQyMjRjZiwgMHhiNmI5N2I3ZSwgMHg2ZDNhOGVmYywgMHhkYTg1Y2VmZSwgMHgwOThmOWQzYywgMHg1OTUyYjVkNiwKLQkweDg3NGU5ZGZmLCAweGQwYWVmM2NlLCAweDY5YzRlOWJjLCAweDliMmYzNjdlLCAweDM1OTI1Y2JkLCAweDY4NmQ4NDc0LAotCTB4MDM0ZjJmMGUsIDB4MTNjNDEzYjQsIDB4NWRlZjRmYjYsIDB4MjY4MWYyOWYsIDB4MGVhNTZmM2YsIDB4ZmY4YmU3MWUsCi0JMHhkZGZmZmY0ZiwgMHhjOTZkYWZmNCwgMHgxYWFlM2Y4YiwgMHg5YWUwNzU1NywgMHg3YWFhZTNmOCwgMHhkNDZlZWI5NSwKLQkweDY3ZmJlN2U0LCAweDViY2ZlYTY4LCAweDlmMjlhYTU5LCAweDUzNWYzOGRiLCAweDRmZjk3YjNlLCAweGY5NTJmOTM1LAotCTB4M2JmZDRkN2UsIDB4Y2E2YmQ2MTcsIDB4NTg3YmE4ZWYsIDB4Zjk3YjdlNTMsIDB4MGNmYzlhZTMsIDB4ZjUzNTJmZWYsCi0JMHg1YWJlOWI2ZiwgMHg5ZjZjMmU1MywgMHhkNzAzYWMzZiwgMHg0MWIwZWY0ZCwgMHhhM2ZjMGZlMCwgMHgyOTlmMDA5OSwKLQkweGZiZjBhY2ZjLCAweGE2MTI1ZjI5LCAweDRjMmU3YzY3LCAweDUzMGY0MWViLCAweDhkNzg2ZWZkLCAweDRhNmJiNWE1LAotCTB4NTczZTgxODcsIDB4NTRhNGZmZjgsIDB4YTVmNDE0MzcsIDB4ZmFmNTlmOWUsIDB4ZjRhN2NmNTcsIDB4Y2VjOTEyOTcsCi0JMHg4MTJhZDI1MCwgMHhkNjNhYzA5NCwgMHhlNTVlZWRjNSwgMHhjZWJlMzlmYiwgMHhkMzA4YjIxMSwgMHhjYjkzMTMyYSwKLQkweGYyODM0ZGFhLCAweGMxZjIwMzg5LCAweGJlYjY3NTExLCAweDgwODA5MmUxLCAweGNkZTAyMGYzLCAweGE1YmEwMDRjLAotCTB4NGQ0YmI1ZDAsIDB4MzhjZDc0ZDcsIDB4YjExMGVlY2YsIDB4Yzk5MDFhZmYsIDB4OTRkY2IwMDksIDB4ZmY0MDMyNmMsCi0JMHgzN2ExYjZjMSwgMHg3OGYxODI4ZiwgMHgyNWJlNjMzNiwgMHhiM2FkZWQwMSwgMHhlM2Y4YTJiZSwgMHgwOTVmYzA0NiwKLQkweGQzN2NhN2E2LCAweGYzZTEzZDMxLCAweDU3ZGM3YTYyLCAweDVmNTFlOThlLCAweGJlMWRhNjFkLCAweGVjN2U5ODg1LAotCTB4ZDBmZDMxOTMsIDB4M2ZkMzFjYjcsIDB4M2QzMTFhZjksIDB4ZTk4OTViZWMsIDB4ZDMxZjlmNDEsIDB4NTMwNzlmNGUsCi0JMHg1NWZmNGY4NSwgMHhmMGNhM2FlOCwgMHg3M2Q3NGVkZiwgMHgzMjhlYmE2YSwgMHgzODc4ZDkzOCwgMHhmMTg1MWY1ZCwKLQkweDkzOWJiMDQ2LCAweGE3MTkxOGMxLCAweDU2M2M0N2IyLCAweGUwMmVhYmY0LCAweDg5NmE3MGZlLCAweGVmMmIzZjMxLAotCTB4ZDcwNTMxN2IsIDB4N2Y4Yjc2OGUsIDB4OWVlMWU4MjQsIDB4MDExYjdmOTEsIDB4YzM5ZWU0N2UsIDB4ZWQ0ODAxNzQsCi0JMHhmYTdhN2U3YiwgMHhlMjA3ODlmNSwgMHhjY2JkZmI0MSwgMHgzMTg3MTc0ZiwgMHhkMTJkY2JiZCwgMHgwMzE2YWYwYywKLQkweGQ0ZDkyMjI5LCAweGEyZmUxYjVlLCAweGNjNGNhZWZiLCAweGI0MWM0OTFiLCAweGI0NmZiYmY3LCAweDZkNGI4MDQ3LAotCTB4YzVlZmMwNDEsIDB4ZmVkOGJhZjAsIDB4M2JjMDE2NDUsIDB4MzlkN2VjZjEsIDB4YTQzMjhlOTAsIDB4NGRiOGJiMzEsCi0JMHgwNDk0YmI0NCwgMHg3ZTAzNzA1ZiwgMHhlY2Q2N2E0MywgMHg2ZDNmMDI0ZSwgMHgxMzkzNzBmNywgMHhiOGE3YmRkNywKLQkweDlmYzE1YTlmLCAweGZlMGFmMmNjLCAweGFmZTEwZTFlLCAweDk3ZjEwOTMxLCAweDE0YmZjNWYxLCAweDNiYTc4OGZlLAotCTB4NjE1MWE2ZWIsIDB4YmUxMzlkZmMsIDB4MzljYTdmMWQsIDB4MWJiZmJlODksIDB4ZTI3N2UzNDQsIDB4MDU0NGFlY2IsCi0JMHgwOTQzZWRhZiwgMHhlMDJkZTdlZCwgMHhhN2JmMGE3ZiwgMHhjMDE4OTJmOSwgMHhkOTNlYzg3MywgMHg4N2Y3ZjY2MiwKLQkweDRlODBlNzRlLCAweDZhYmMzMGI2LCAweDNkOWViYzFkLCAweGVlYzAzODJmLCAweDcwNjQ5MDVmLCAweDY3ODA4ZjFlLAotCTB4YTQwZWFkMjUsIDB4M2I2YTZkM2EsIDB4ZWY5YjQ1YTksIDB4MDI4YTE0NjksIDB4NjJiOGNmNjgsIDB4ZmQwMjhkYTYsCi0JMHhjZjFlNzRlYiwgMHg4NDk5M2QwMCwgMHg0MTY3MDJhOSwgMHgzYzc5Yzk5MiwgMHhlNGMzZTkxZSwgMHhjYTJjNDM3YSwKLQkweDE0NWYxOWZkLCAweGM3YTFmYmQ2LCAweGYwOWMxN2QxLCAweDMxYzk5YTM4LCAweGY5NTAxZWRhLCAweGY1ZGY3YTRkLAotCTB4ZTM1M2U0ZmIsIDB4MzdlMDRjNWYsIDB4MTdkMmFkMjMsIDB4ZDE0NGJmNjAsIDB4MDM4MWJmZmYsIDB4YmNjNDYyMzIsCi0JMHgyMDM2YjcwMiwgMHhlMDJiZTZjYSwgMHg3ZjRkMDZmYiwgMHgzOTRiOWRiNCwgMHhlZDI2ZmJjMywgMHg0OGMxZTRkYiwKLQkweDRhZmMyODRlLCAweGYwNDY4YTk3LCAweGJlMDM4ZDQ5LCAweGY2YjUzOGI1LCAweDVmMjZhYzUxLCAweGE5YzgzMmRiLAotCTB4MWZlMDk3YjEsIDB4NzI5MjhmNTQsIDB4NTc3YzA4YzEsIDB4Y2JhNmQ5YzUsIDB4ZDAyZTViNjgsIDB4NTM4MjU1ZjEsCi0JMHg2MDU1ZjgwYSwgMHgzYWEzYWFmNSwgMHhmMDE3NWU0YywgMHhhZjViZTJjYiwgMHg0NmNkNDE3MiwgMHg3YzdlYWY5YywKLQkweDFhMzc3ZTk0LCAweGJmOGY3ZDhkLCAweGFmYjllYzUyLCAweDZjN2M4MjI0LCAweGNhYmI3YWUxLCAweDI0MGFmY2MwLAotCTB4ZjljMDc2NGEsIDB4MWQ5MjQ5MTcsIDB4Njg3MWQ5MzcsIDB4ZDA3ZTEwYjYsIDB4NTFmYjQ3MGYsIDB4ZjMzODE1ZTUsCi0JMHhkNmI3NTJmZCwgMHhjZjkxOTU3ZSwgMHhiZjk4MWFjZiwgMHg2ZWVmZGY0MCwgMHhlMmUxMzdlOCwgMHhiMGQ5YWJmOCwKLQkweDViY2MwYTdmLCAweDk2OWFjNzhmLCAweGNhMmYyNmYzLCAweDI3MmZmZDE1LCAweGJmMDU0NzhjLCAweDZlYzk2Mjk1LAotCTB4NThhZmMyOTEsIDB4ZDVmNzA0NzcsIDB4YzQ3OTI0YTcsIDB4MTdhMmRmMDMsIDB4OTZkZjhmN2IsIDB4OWFhYWMyNzQsCi0JMHhhMWRhNGNiNywgMHg3OTcyYmI5ZiwgMHhkYjc1YzQ0NywgMHg5ZjVmNTQwNywgMHgxZTQ0YmRmZSwgMHhhMDVjYmEwMSwKLQkweGEwZTM1NGI1LCAweGU0MzEwNTE2LCAweGJiZjVlZDg0LCAweDYxOGIyYjlhLCAweGZiMGQzZWZkLCAweGU3MmZhYTE1LAotCTB4MzgwNzEyOTAsIDB4NjM0OWNiMWQsIDB4ZTdlN2Q4MGUsIDB4ZjAwOGExODgsIDB4ODdmYzhlNzQsIDB4NGU4YThjNjMsCi0JMHhlMjEzNDQ2NywgMHg0N2VmZGE4OSwgMHhmNmEzZTNkNSwgMHhlZDRmMjZiYiwgMHg4Y2JlNGQ3NywgMHhlNzA4OTRkYywKLQkweDQ5NGY2NWQ5LCAweGZjZTAyZmM0LCAweDEyN2ZlNTM0LCAweDc5Zjc0ODlkLCAweGVjMDFhZWE0LCAweDViMTJjNTlkLAotCTB4MTI3MmVmZDcsIDB4NWYxZDBhNjMsIDB4ZTVjZmFiZjUsIDB4NzlmY2QyOTQsIDB4Y2EyM2Q5OTEsIDB4MzhmY2VjNzksCi0JMHhjMDhhZmUzNiwgMHg5Njg3OTM2YSwgMHg3MzFlNmIxZiwgMHhkYTA0NTVlYiwgMHhmZDYwMWJmYiwgMHhlZTA4Yjc5MSwKLQkweGY4ZGVhZWI1LCAweGQ3ZTNhZWZkLCAweDg3YjE1NzhmLCAweGYzMGI5ZDdhLCAweDEzYWY1NDcxLCAweDc2NDhmZTNjLAotCTB4ODUzM2U3MTEsIDB4NGU4YzYzMWYsIDB4NDUyMzdmOGQsIDB4OTc0NGJmOTcsIDB4N2ZjYmEzMWYsIDB4NDAxZjc5NmYsCi0JMHgyOTVlZjIzNCwgMHhlMzhjNTM3YSwgMHhmZWMzN2M5OCwgMHgyMzc2MzA0ZSwgMHhmODZmN2YzZiwgMHg1ZmUwYmQ0OSwKLQkweDFmYzI4M2YyLCAweGQxMzM5M2FjLCAweDg1MDdlNjNiLCAweGZjNmJkMTlmLCAweDVmODI0NzU3LCAweDViNGJlYWZkLAotCTB4MmE5ZmFhNjUsIDB4NDFkYTc5NWUsIDB4NmQzYTdlYTgsIDB4NTM3NDRjNmMsIDB4NWRhZDU3ZmEsIDB4MzgzZTAwZWEsCi0JMHhjMDFkOTQ2NSwgMHg2MmZkYTdjZiwgMHhiZTgyM2Y5MSwgMHhmMGE4ZDdiYiwgMHg4MDI2Yzc4MywgMHg0OWZlMGRmZiwKLQkweGZmNTk5ZmUxLCAweGFlYjBmNWU4LCAweDcyNTZiMTdmLCAweDlkNmQ1ZmEyLCAweGYyYTY2ODM5LCAweGJmM2NkMzVhLAotCTB4ZmU2MTY0OTgsIDB4M2IyZmNiMDgsIDB4NDViZTQyMmYsIDB4YmYxNTlmY2IsIDB4ODVkMTNhN2UsIDB4MzE0ZTUyZmEsCi0JMHg4ODM4ZmZhMCwgMHhkMzRkN2ZmNiwgMHhkZDYwNTMyNywgMHgyOGRkMjVhZiwgMHhkMDc2ZmE2NywgMHhiODcxNTdmZiwKLQkweDYyOWE5NTNlLCAweDQ2ZTM5NzdhLCAweGIzZGExMTNlLCAweGEzZjM2ZDVmLCAweGZjMDc0NWU3LCAweDA2ZmQwM2FiLAotCTB4ZGNlNWZhZmEsIDB4ZGEzMzJmOGUsIDB4MWFmZWEwMDcsIDB4ZmU4M2M2NGYsIDB4ZmM0MWYwNTIsIDB4NWYxNzhlY2MsCi0JMHhmYzBiMmU3ZCwgMHg3ZTliNjdhNywgMHg3ODU0MTBlZiwgMHgyN2FjZTQ1MiwgMHhhZjU3ZmIzMCwgMHg5N2Q2ZmFiYiwKLQkweGQ1MGU1NDlkLCAweDRmNjJhM2Y2LCAweGZlZjg1YWI4LCAweDU1YTU5NWEzLCAweDE1NzFkMDUyLCAweGFiNTU5M2Q1LAotCTB4M2Y0Y2I3MjUsIDB4YzJmNGJkNTcsIDB4M2Y4MmNmOGIsIDB4Zjc2NjhmZjMsIDB4ZjJiZjBhNzAsIDB4YWYwNzVkYTUsCi0JMHg4ZGNhZjlhNCwgMHgzNjYyODBkMiwgMHgxODkwOWIwZCwgMHhmZDJkNGJhNiwgMHg5ODc2NjE3ZiwgMHg3NzliMTUwZSwKLQkweGQ4YTM1Yzk5LCAweGMyZTMwN2Y3LCAweGI4ZGNhOGY0LCAweGY1NDY0NGMzLCAweDYwNDE0N2M2LCAweDE2YzNhOTg3LAotCTB4MjM4MTJlODEsIDB4MTJmZWMwNTMsIDB4MDliYmZkNWYsIDB4YmI3YTdlZTgsIDB4NDZhNjA2NDAsIDB4NWRlYWU3YzAsCi0JMHg5ZTAxOWY2OCwgMHg0ZTljOGU5MCwgMHhlYWU5YmEyMSwgMHg4MGJhNTJkNywgMHhhNGU4NTczZSwgMHhmYWUyMmYyZiwKLQkweDMyYjllMDA0LCAweDdlNWY5ZjkxLCAweGZlODRlMjFkLCAweGZjYzM3NjY0LCAweGRiYmU1ZmNiLCAweDY5MzhmMzAxLAotCTB4ZmQ3YzYzYWMsIDB4MGY0NGQyZGMsIDB4OTI1Y2I3ZWQsIDB4YjI5ODlkMTMsIDB4ZGZjZmU1ZWYsIDB4NmYzNmZjOGIsCi0JMHhjYzg5YmRmZiwgMHg2NDE5ZTU4ZiwgMHgxZTQ5YjVjMCwgMHhiYjliZjMwNCwgMHg1ZjljMTZlYSwgMHhkZjIyZjExOSwKLQkweDk2MjczZjk1LCAweGRjZmM3ZTgwLCAweDQ2MzY4YTQ4LCAweDhkNGY4YjkwLCAweGI5MzgwZWNjLCAweDc0YjgxYTg2LAotCTB4YjJlOTI3N2UsIDB4ZmYzMzcxODMsIDB4MTRmYzYyMjEsIDB4M2Y0NTNmMjEsIDB4MmU3Y2JkZDksIDB4ZmNjMzgyZDQsCi0JMHg0ZThjNTFlNywgMHg1YzBkMTk2ZiwgMHhhZjE1YThhZSwgMHg2NWE2ZDdlNiwgMHgzMzlmNDBlZCwgMHhlMTAzM2M0MywKLQkweDE4OTZhNWJjLCAweGUxMGY4ZTY1LCAweGRjNTcwYTFiLCAweGQxOTAzODVmLCAweDM5OGNiODg3LCAweGMzYjUxZGJjLAotCTB4ZDQzYmUwMGEsIDB4OTYzYzk3NmYsIDB4ZjIzYjRkMmMsIDB4ZmZiODZhNGQsIDB4NzRmZjc4N2IsIDB4M2Y2MGQxZGMsCi0JMHhiYzhjNGM5ZCwgMHgyOTI4MTgwZiwgMHg3MWQ3NGY3MiwgMHhlNGE5N2YxNSwgMHhkMzdiYzk5YiwgMHgxNWJlNGNjMywKLQkweDU4ZGZmNzc5LCAweDM5N2ZlNTA0LCAweGRhMDdlNGMwLCAweGM3NDhmYWMxLCAweGU1ODgxYzE1LCAweGE4MDlhNjNiLAotCTB4MTgyNGNjMGYsIDB4MjQ5YmFlNDksIDB4NzJkYWQ3MmUsIDB4YjhlODRmODUsIDB4OGE4YzQyOGQsIDB4MWM3ZTAwNWYsCi0JMHhhNmVkMWZlMiwgMHgzYjY4YTdiMiwgMHg4NWFjYmU5NSwgMHhlMWJkMWNmZSwgMHg4ZjNiNzIyOSwgMHg5MDA5ZmZjYiwKLQkweGYyYzNjYmZmLCAweGI5MzE1NjRmLCAweDk1YmVkYmVmLCAweDkyNTUzZjExLCAweDQxNjdjNWZmLCAweGNhN2NhOTVlLAotCTB4YTk1NzkwMmUsIDB4ZTlmZGU2MDQsIDB4M2Y4M2I2ODYsIDB4NjlmMjcyYTEsIDB4YWQ1MzkxNDAsIDB4NjljYmQ0ZmUsCi0JMHgwOTdiYTZmOSwgMHg0ZTVlYTdmMCwgMHg0NzVjMWQzZiwgMHhmZDI5Y2EyMiwgMHgwNzRlNTExZSwgMHhlYTk3ZmM3NywKLQkweDBlN2YwNTRmLCAweDE1M2ZhYjQ5LCAweDFlMTdkODdkLCAweGI3ZjBmYWY1LCAweDUzZTIxNzQ2LCAweGVmZTkwZmFmLAotCTB4Y2RlOWM5MDAsIDB4MjlkZjBhN2YsIDB4ZGJmMTU2ZmMsIDB4NzdhMDYxZWEsIDB4ZjBhOTdjNDIsIDB4MTUyZjg4NWQsCi0JMHg1N2NmZDNiZSwgMHhmOTdkM2Y4YiwgMHhkMTk5ZjA2MSwgMHhmNmJjOTU3MSwgMHg0YTE0OTRmZSwgMHhjMTU2YWFjZiwKLQkweGJiNjE3NjZkLCAweDc4YTc5MGRkLCAweGJmYjMzMGYyLCAweDAwY2E3NzcxLCAweGNiYWZkZTc1LCAweDNkZjU3NDA3LAotCTB4YWU4OTdjYmEsIDB4YWY5NzU3YmUsIDB4YjNmN2Q1ZDMsIDB4OWI0YjQ4N2QsIDB4MDQxZjIwODksIDB4NDVhNWY1MzUsCi0JMHhmYzczODY0NCwgMHhlZTIyNmRlZSwgMHg5OGU4YmJiYiwgMHhhZWZiNjgxYiwgMHg5OTdlYTkwZCwgMHgxNmE1ODNlYSwKLQkweDRlZWZiZmI2LCAweGZlODAzNTMwLCAweDNiNzY3MmVhLCAweDYxNmYyMGUyLCAweDkyYWViNWZlLCAweGNhYWM0NzZlLAotCTB4MmFkMjNjM2UsIDB4ZjBlZGZlYTIsIDB4ZmI0OGEyOTMsIDB4MjJkMTZhMTMsIDB4NWY0ODNhOWUsIDB4YTNiY2VjZTUsCi0JMHg1ZDBkYjQ1MCwgMHg0Njk3N2UwOCwgMHg4MWFlMGRkMSwgMHgzOWI3ZjUzOSwgMHhhYmExYmNlMCwgMHhlOTg2ZmQzNSwKLQkweGI3ZGNmYmY0LCAweGU4NWYwYzQ1LCAweGMxNjQ3NjhhLCAweDMxZWM4OGI4LCAweDBiZWQ1MjBlLCAweDk5ZjkxMTRlLAotCTB4YjMzZTc0ODksIDB4NjBmZWQ5NWIsIDB4NWQ5ZDBhY2UsIDB4NWYyMDU2NDEsIDB4MzFlZWQ5OTQsIDB4ZjZhNDVlODEsCi0JMHg5ZmFkNTFmYywgMHgwNTc3ZjE5ZSwgMHg0YWJlNTc4NywgMHg1N2I0YWU1YiwgMHg0ZDE1OGRmNiwgMHhkZjJmNzJkYSwKLQkweDVjNDk1NjY3LCAweGEzMjY4YzVmLCAweDMwOGYzZWQ5LCAweGFmZDcwOTNmLCAweDBkZTY2Mjg1LCAweGJiZmUyOWQzLAotCTB4ZjgwNDg4ZjYsIDB4NDQ1NWE3YTUsIDB4MTA2Y2Y3ZmMsIDB4MjI2ZmUwZmMsIDB4NGRjYTAyNzIsIDB4YmQ0NmU5MGQsCi0JMHgyY2U5ZTBhNiwgMHg2ZmE5ODVjOCwgMHhjYjc2NzNiZCwgMHhkMDBmMzk0NywgMHgzZjViNTUyYSwgMHg5YTc3ZmFjOCwKLQkweGM3ZmFkZDllLCAweGZlNDA2ZjExLCAweDNmNDM0M2Q1LCAweDE3ZWJiZDIwLCAweDc5ZTBiNzZjLCAweDNiNzZkNzZlLAotCTB4NmQ3NmFmYzYsIDB4MDFmNDM3ZGIsIDB4NzY2NmJmYzgsIDB4YjZiYjM4YzMsIDB4ZmMwNTk5N2YsIDB4NWNjOGI1ZDMsCi0JMHg2YmFiN2EwZSwgMHgyY2Q3ZGIwOCwgMHg1NjY1ZjZkZSwgMHg0YjkzYWUwNywgMHg5MGJmNmU5MCwgMHhhN2FhYmVkOCwKLQkweDg1OGZlYmY1LCAweDU5ZDI5MDAxLCAweGRkYmZmYWMxLCAweGRhOWRmZThhLCAweGE3MTgyZGQ3LCAweGNiZWRiNWRiLAotCTB4ODdlZGFmMWMsIDB4M2YwZDRmOWIsIDB4OTNiMmVmYmYsIDB4N2M2MDliZTksIDB4YmE3Y2VjYjEsIDB4MmYwOThkZjYsCi0JMHhhYmZlZDNkNCwgMHg2Njk4Nzc5YiwgMHgzNzgyZjJkMywgMHhmYTA1OWVmZiwgMHhiMzEzNmJiMCwgMHg4ZWE1M2E2YiwKLQkweDdhN2NlMWU3LCAweDhiZWRkMmNkLCAweDRlZTc4YTI0LCAweDQyNjQ4YTEwLCAweDRkZjBkNDdlLCAweDA5MTk5Y2JlLAotCTB4N2Y0NzdmMmYsIDB4ZjFmMTdmNTMsIDB4N2MxOGZmZGEsIDB4NTNlZjE4MDgsIDB4NDdmNzZhZDUsIDB4YmZlZjMwMDksCi0JMHhlODAxZmM3ZSwgMHhlNDY2ZWQ4MSwgMHg5ZmJlNjU0YiwgMHhlZWQxZWEwNiwgMHgwZmJjZDhiOCwgMHhmZGM3YmNjMywKLQkweDA4NWJjZDJiLCAweDVmZGU2N2Y2LCAweGZiZDM5M2ZlLCAweGUzODVjOTIxLCAweDZmNDFjYmQzLCAweDFmNzZkZjNlLAotCTB4YmJiMjVmZTYsIDB4ZTRmZGJjNzEsIDB4N2ZhNjgxZjcsIDB4YTI2ZmJhMzEsIDB4N2M1Yzc3NzQsIDB4ZTRmZjM5ZGUsCi0JMHhlZTliZWVmMywgMHg3NGUyY2Y2ZiwgMHg4YzdkZTI3NywgMHhlMzhlZmYzNywgMHhlZTdhYWVmYiwgMHhmM2ExZmZkNiwKLQkweGIzNzNlYzU3LCAweDhmM2RhNGExLCAweDY5M2E2ZjhlLCAweDMxNjE4M2I0LCAweDJmNjdhMTIzLCAweDg3OTljNDg0LAotCTB4OGMwMDY1ZmMsIDB4OGFlN2UyNTcsIDB4MzMyZGYxZmEsIDB4MDQ4ZmZkYjEsIDB4NWZiNGM2ZTcsIDB4ZjdjMDhiNzIsCi0JMHg3NDNmNmM3NSwgMHhhZTFmYjczZCwgMHhmNjg2NWMxZiwgMHg2NjFlZjVlOCwgMHg0OTYzMTNhZiwgMHg4ODU4ZGU0OSwKLQkweDQ2ZTM5YWZmLCAweDNlYzkyNzNmLCAweDJkZmM4NWVjLCAweGJiNWU3ODkzLCAweDIwNTc3YzJmLCAweGUzZGE4MTFlLAotCTB4ZGEyZDBmZDcsIDB4MGRlOWY2MDMsIDB4MzM0MThkODMsIDB4ZmE0MDhmNGIsIDB4Y2Y3ZjgzYmUsIDB4NjY1ZmVlZDUsCi0JMHhkYmY5YjU3OCwgMHhiN2YzNmJhNiwgMHg4MmI3Nzg3MCwgMHhiZmZiNDU3MSwgMHg4M2YwNDRiNSwgMHhmMjFhNTM1ZiwKLQkweDM5ZjgwMjU0LCAweDExMTJiOWE1LCAweGE5MTM4ODA0LCAweDg0ZmIwYTViLCAweGVkYjQ0YTViLCAweDc2N2VjMzY3LAotCTB4ZjM4ZjE4NWMsIDB4ZTE1M2JjYTMsIDB4YTQ2YTIxZmMsIDB4NjFiOGY4ODAsIDB4MjRmYTg4ODUsIDB4Zjg0MDUzMmEsCi0JMHhjNjEyYjkyNSwgMHgyODYyN2UxMywgMHgxNzNjMDFjOSwgMHhmMzVmMTk4ZiwgMHgwZGNlMDYzMywgMHhmMWNmOWRmMywKLQkweGQwZWE0NjU1LCAweGJlMTcyMWRlLCAweDBlNjI2NmY5LCAweGRhMDk3M2Y4LCAweDg0M2RmMzRiLCAweGY1ZWQ0NzVjLAotCTB4MzA0Mjg5YjIsIDB4M2NlNWNhOWEsIDB4YjI2MzkxMjMsIDB4OTAyOWNmYzEsIDB4YTczZjFhYTMsIDB4MWZiZjBmMzYsCi0JMHg1Y2UxODYyNSwgMHhmYzVmN2VhYywgMHg3ZmE3NDNmOCwgMHgzNDdmZmNhNiwgMHg5MGNkZGE4MywgMHhmMzNiYjllMiwKLQkweGFhZmIyOWQ3LCAweDFlMTk1YjNiLCAweDdmMDRhYjZiLCAweDUwNTVmMjFhLCAweDdjNTM5ZjUyLCAweDg1ZmU2MjZkLAotCTB4MDYzODNmM2YsIDB4ZTdlZjJhZTUsIDB4N2VkODYyYTMsIDB4Y2NlZDAzMmYsIDB4ZjY2NzZlNWEsIDB4ZjAxOGFlYzgsCi0JMHhhNmI0ZjQ2ZiwgMHgwMmIxZjNmMywgMHgzZjAyMzc4NywgMHhhZGZiZTdlZiwgMHgzZWY5YzAzZiwgMHgwYjI2YmI0ZCwKLQkweGZkZDgyMjhkLCAweDc4ZmQxYmE0LCAweDU5MGI2NGYyLCAweGVlMGUyMTFiLCAweGE3ZTI5MzAzLCAweDFmZmRjM2E4LAotCTB4YTAxY2M0ZmMsIDB4YTNjZGZiMjMsIDB4NTRlMjYzNGQsIDB4ZGQ3MTViNzQsIDB4NmY1NjYzNjksIDB4YThlZmMwM2EsCi0JMHgxZmU4M2NlYSwgMHhlZmVjMmZjNSwgMHgyZGZiYWYwMCwgMHgyMjRhNTMxZCwgMHg5NzFjZjdjYywgMHhmZWI3ZTJkZiwKLQkweDZlYjVmNzhhLCAweDAwOTU0ZDZhLCAweDE2NGQzNzJmLCAweDlmYTZlNzM1LCAweDc1YmVmODk4LCAweGUzMDMxOTBjLAotCTB4MWFlYjdlMmEsIDB4Y2JhMDA0YzcsIDB4ZjcwZGQxMWUsIDB4Y2Y1YjZhYjMsIDB4Y2UxMWJjOWIsIDB4MDRmOGY0OGYsCi0JMHg5N2RmZThmOCwgMHhjZjgwNjVkYywgMHg0MmM3ZmY2MywgMHg4ZmI1OWY2MCwgMHg0MjY0ZTc5ZiwgMHg2ZTI2NzRiYywKLQkweDRmZTAzZGU1LCAweDc1ZTM4MmZhLCAweDc0ODlkOWFhLCAweDRmMzhiOWJlLCAweDY2ZmRhMDRhLCAweGMzNDczYjM2LAotCTB4YWYzMjU2OTEsIDB4YWQxNjE1M2YsIDB4YzExYzEwNzEsIDB4OTJmNTI5ZGEsIDB4MjNiZDU4YWIsIDB4YTQ0ZDY3MjYsCi0JMHgxMjhhMmZmOSwgMHhmYjg1NzlmOCwgMHg5ZmUxNWNiZSwgMHgzZjc5NmU4ZiwgMHg2MWYzMDdiNywgMHhlZWNjOTkzZCwKLQkweDZiZTZmNWQ1LCAweDUzZDFmMjgyLCAweGRmNDFmODI0LCAweGYzMDlmZWMzLCAweGUwM2VlY2M1LCAweDk3MmIwMzNlLAotCTB4NTk3YTYyNmYsIDB4OWUzZDdiZTEsIDB4Y2YwY2NkZDMsIDB4M2MwNWZmNGEsIDB4ZjBjY2QyM2YsIDB4YzE1OWUwYTMsCi0JMHg0YWJjN2VhZiwgMHhhZWFmYWE3ZCwgMHg2ZTIxZmI1NiwgMHgzMmZkMTk2OCwgMHhhZDM1ODdhYywgMHg0MTQwZDM4MiwKLQkweDRjM2IxOGQ1LCAweDJkYjU4NzIwLCAweDY3ZTA0YjhmLCAweDcwNjJlMTlmLCAweGE1OTA3YWU5LCAweDZhOWRkNzNlLAotCTB4NmRlYmU3NjYsIDB4MDJjZDU3ZDksIDB4MDU2Y2Y5M2UsIDB4N2I2ODRiYjUsIDB4MGVmMzljY2YsIDB4MTlmNzc3NTgsCi0JMHhiZGMxZWZkYywgMHg5MTVkZjk0OSwgMHg3ZDE2ZmRhYywgMHg3OWNmODFmNSwgMHgxYWEzNjRlZCwgMHhmMzhlMmE2ZSwKLQkweDA5M2NhYWU2LCAweDU3YjcyNmRjLCAweGFhMDY5MGVkLCAweDM5YWE2OWY4LCAweGVmOTVjYjBlLCAweDZjYWU1NWM5LAotCTB4YzNmYjRlZjgsIDB4OTk4ZmM4NzEsIDB4Njc4N2M0MDksIDB4M2VmMWRhMDYsIDB4YjE3NWVkZGEsIDB4MDNjYjBmOGMsCi0JMHg0Zjk4NGMzYiwgMHg3ZjRhZmFjNSwgMHg3OTdhM2Y0YSwgMHg4ZGFjNTY5YSwgMHhkMDVkOTlmYiwgMHg1MmYwMTgzMSwKLQkweGUzZGUwZTZjLCAweDlkYTdjMDhlLCAweGJiZTQwZTljLCAweGNhMWUxM2FlLCAweDhiZmY1OWI3LCAweDk0N2I4OWQ2LAotCTB4MmE0M2EyNzUsIDB4NmM4OWM1NTEsIDB4YTczZDMzMzUsIDB4NDYwNjI3NWEsIDB4ZDQxNjI3NWEsIDB4MWQwMjA2YmIsCi0JMHgxZjRiNmMxNiwgMHhlMGIyNDIwOCwgMHg0OGM0YzJlZCwgMHgzZWZiYzRlYiwgMHg4ODc4NWU3NiwgMHg5YWVjZGZkZiwKLQkweDJiODlkNzQ2LCAweDM0YzRlYjU0LCAweGJlODlmMjBiLCAweGM0YWNkZjlkLCAweDlkNjQ1ZDYxLCAweDVmZjZlODUwLAotCTB4ODdkZTZmYWMsIDB4N2M4MjIyNzUsIDB4ZDc2YjM2NmYsIDB4NGI1YjViODksIDB4NzViODlkNzEsIDB4NTdiOWE4OWEsCi0JMHhiMTdjZGViMSwgMHg3MTJmMjI3NSwgMHhiNzI1ZTYwNiwgMHhiY2ZmMDIzNSwgMHg0M2UxZWRjZiwgMHhmYTBlYmUzYywKLQkweDM0ZTJmNTgxLCAweGRlODRmZmU4LCAweDdhNWY0NmViLCAweGVhZmViMWZkLCAweDNjMjZmZmY1LCAweGMxN2Q3YTJiLAotCTB4NzgxZWVjMmQsIDB4YzgyNDNlNmYsIDB4NTA2NjBiY2YsIDB4M2YwMDJlYmQsIDB4ZTBiZWJkMzIsIDB4ZDMxN2VlMGUsCi0JMHhkMDEyZDllOSwgMHg3YWQ1NjNiMywgMHhmMWFmYjU5NiwgMHhiNmExNzViMiwgMHgzMzE3ZjUyNSwgMHgxYTRmZjk2OSwKLQkweGFkMTQ3NzI1LCAweGRlYjA5M2ZmLCAweGRkZWI1MWNkLCAweDEzNzdhMGQzLCAweDcyZGRlODIyLCAweDZiM2Y3N2E2LAotCTB4NTNmNjgzMWQsIDB4ODhmYmYzNWYsIDB4Y2ZhYTViZWIsIDB4ZjgxMWRjMzIsIDB4YWI0Y2ZhNjMsIDB4YjFjZTllZTYsCi0JMHhkY2NiYmZkMSwgMHg0ZmIyZjIwYywgMHg0ZmJiNzNjNCwgMHg3N2IwMWRiOCwgMHg4MmM2ZWZmNCwgMHgxNDRhN2E5ZiwKLQkweGE3MWM0ZjFiLCAweDVjOGZhNzY3LCAweDgxZWE5OTNiLCAweDllY2MzOTgyLCAweDIyMjBkZWFlLCAweDk5OWE2YWZlLAotCTB4NDQ2NGQ3ZmMsIDB4M2YzNDVkZmIsIDB4MjZhZmZiMjUsIDB4NjM2ZTU3YzgsIDB4MDY3NDZmZTcsIDB4ZmEyYTc5YzUsCi0JMHg2OGViZWU1NywgMHhlNTcwM2YwMCwgMHgwZmNmMDE2YSwgMHhmMDE5Y2UyMSwgMHhiM2UzOGYzOSwgMHhmYjg5NWRjYywKLQkweDgwZmM3ZDE1LCAweGU2YWQxN2UyLCAweGFlYjdlNmY1LCAweDNlYTlmZjQ2LCAweGUzM2FhMGFlLCAweGFmYjBkM2RhLAotCTB4M2EzMzM2MjgsIDB4ZmMxNjZmMTQsIDB4MWNlMTUzYWIsIDB4ZmRjZjU3NWIsIDB4NTQxYjllMzAsIDB4YzdkZmI0MDcsCi0JMHgxNWNlZjlmMCwgMHg2MTliOTk4MywgMHhlODllZjU1ZiwgMHg4ZGNlYjQ4ZSwgMHhmY2E1ZTNkMSwgMHg3ZWNiYzQxZiwKLQkweGZmYjE5NzhhLCAweDE3ZDJmMWVmLCAweDhmN2RhODFlLCAweDNlM2Q2NGZlLCAweGJkNzE0NWM2LCAweDgyYzY0ZDkyLAotCTB4ZjA2MjdlMWMsIDB4ZGY5MTVlYTAsIDB4NjQyZTMxMTEsIDB4MzVjM2UzY2UsIDB4YTIwYmZlZjcsIDB4NjdkYWJlOTgsCi0JMHhkYzQwMzZmMCwgMHhlMmMzNWNhZSwgMHhkYWFkZTY0NywgMHhlNjkxMmJiOCwgMHg2OGM4MDY2NywgMHg1YmNmNDc3MCwKLQkweDQzODc1ZGE5LCAweDBiYjM3ZWViLCAweDc1OTlmNWQ3LCAweDEzODgwNTFiLCAweGZkZWZjYjljLCAweGM3MWZmYjk0LAotCTB4NThlZTEyZjcsIDB4NWE3OWQ3NDgsIDB4ZDliNjc2N2YsIDB4ZmI5ZmU3MGIsIDB4MzdhOGRkMmQsIDB4MTA1ZGJlMTUsCi0JMHgzYTk3ZWNjNSwgMHhjOTYzOGUzZSwgMHg3ZDcxOTNkZCwgMHgyODljMTE2YSwgMHg1YjBiNDE4ZiwgMHhlMDlkMjhhZiwKLQkweDA5YjY4NzFkLCAweDc0ZTE0ZTVmLCAweDE2ODg3ZTYxLCAweDRhNWFjNzQ2LCAweDI5ZTc5MDM3LCAweDhlYmYzY2FkLAotCTB4MmJiNzgxZDksIDB4NzdlMDgwZjksIDB4Nzc1N2EwMDksIDB4MDg1ZGVjNDgsIDB4OWMwYmM0ODEsIDB4MTFmNWFhMDgsCi0JMHgxMmYyZDVjZSwgMHg3NmRlNzQ1NSwgMHg1YWZmZjE4NCwgMHhmYzFmOGRjMSwgMHg0M2VmYmZmNCwgMHg5ZWY5M2VlNywKLQkweGU1ZmQzMWQ5LCAweDBiNGYwNTc3LCAweDZmZGU3NDc0LCAweDgzMWUyZjY5LCAweDFiODIzM2U3LCAweDhkNjhjN2RmLAotCTB4ZTM4NTczYzUsIDB4MDc5ZGVjOGQsIDB4Y2JkM2I3OTksIDB4NWMzYmVjMDUsIDB4OGRjYWJmMmEsIDB4MWY4ODcwMzAsCi0JMHg5YzYwYjIyZCwgMHhjNjliZjYxZSwgMHhiZGVkMzJlYywgMHhkNzEzNTk0MCwgMHg0ZWUzNWRmMywgMHhkYTNiNDk2YSwKLQkweDMxNzhlMTYzLCAweDgwMjYzN2VmLCAweGI1MTgyNDU3LCAweGM4ZGQ1YzcxLCAweGZjMDAzZmU3LCAweDAyZGZjZGQ3LAotCTB4MzEzOTI0OWYsIDB4YTc2ZWY0NmUsIDB4ZWVjOWRkZjIsIDB4ZGI3Y2YwNmYsIDB4MzM0MzljOTAsIDB4NWIzZjdlMjksCi0JMHhkZDc5ZTIyZSwgMHhjMWQ3MDY2ZCwgMHgxZTZmYTA4OSwgMHhjYmM4MDg5MSwgMHgwZjI1N2I2NywgMHhiOGFjMDc1YiwKLQkweDNiZWU5NGVlLCAweDRhNWVmNzg2LCAweDI5MTFlYzU5LCAweDJmYWQ4ODdkLCAweGZlNzhmOGM3LCAweDBmNmRkNzQ0LAotCTB4NjA0ODQ0ZjgsIDB4NGRmYmM0MWMsIDB4NzQyOGVmNzMsIDB4ZWM2NGRmODEsIDB4MmU3MGE1ZmUsIDB4ZjM4MTczNzYsCi0JMHhlN2EwNDFlMCwgMHg5M2JkZWNjMywgMHg3MDBiY2JhMywgMHg0ZmY3NzY5ZiwgMHhjM2I3OTQwNSwgMHhmZWQwNmU5NCwKLQkweDA3YTk2OTk2LCAweGVmN2VkMjBmLCAweGU3ODA5ZTU4LCAweDA5M2QzMzVjLCAweGQ3YjljMmI3LCAweGRiYTJiZGNjLAotCTB4YmVjZGViNDUsIDB4NzM4MzZlYzEsIDB4NDUyM2E5YWYsIDB4ZTdlMTU1ZTIsIDB4N2U4ZWQyMGUsIDB4M2Y3NTk5OWEsCi0JMHg1ZGM2MDViZCwgMHgzMTQzZDc0ZSwgMHg4NWZkZDIxNSwgMHg0YWJmMjEwMywgMHhiMmI1ZjZjMCwgMHhiMjkwMzRkNywKLQkweGYzY2FmYjRlLCAweGZmYjRiMWE2LCAweGQwMGY1YTMyLCAweGQ1OGFiYjVlLCAweGRjMTI2ZGFiLCAweGQ2NWI3YTEwLAotCTB4Y2JlYTM4ZmEsIDB4MWYwMTI2YjIsIDB4ZjZhNzY4OTYsIDB4ZWI4MzE0NmYsIDB4ZGI3MGEyOGYsIDB4MzRmNmQxNTcsCi0JMHgwM2RhMGYzZiwgMHg1YmQ4YTZkYywgMHg5NmFiM2NlMSwgMHhlN2RiMTM4ZSwgMHg2NDc5ZTNkNiwgMHg4YjQ3NmQxOSwKLQkweDRmZDM3YjQ5LCAweDU1ZmNkZTExLCAweDQ0N2I4MTAyLCAweDhmYTliOWU1LCAweGJkYmMwMmU1LCAweDBmY2ExYjkyLAotCTB4YzYyNWY4ZWQsIDB4ZmRhMmNjOGQsIDB4NjdmMGEyMGQsIDB4ZTg4NTFkOGIsIDB4NzA0MDdiNTcsIDB4ODMyMzNiZTIsCi0JMHg1ZDdlOTAzMywgMHg3MDY4NjEzMCwgMHg2NGZkMGQzYywgMHg0MmU5ZDcxOCwgMHg3MWQ1MTgzNCwgMHgxNjE2YzkwOCwKLQkweGIwYjY1Y2RmLCAweGQ1ZTYwMWJlLCAweDFhYTQyNzIxLCAweDliY2VhZjkwLCAweDRlM2YxZDYwLCAweGY2YTVlZGYxLAotCTB4OGIxMzMxZWIsIDB4OGY5MzY4NmYsIDB4N2E1NDNhOTksIDB4MWQyNWJjNzQsIDB4OTY5Y2Q4ZjUsIDB4OWYyZjNjM2MsCi0JMHhiY2YwNGE0YiwgMHhlY2NmNWJkYywgMHgyZDRiMjM5MSwgMHgzMGVjMDE3ZSwgMHhiZTE0MzljOSwgMHhlMzM1MmRiNywKLQkweGQ4OTdjZWY3LCAweGE0MzlkM2ZhLCAweDI3YTFmZDAzLCAweGVlMDQ0OTU3LCAweDk1NWUyZDM5LCAweGYxZDAwY2ZlLAotCTB4ZjkwOTA2ZTQsIDB4NDI0ZTdjNGQsIDB4MjVlZjM2M2QsIDB4NWI2YjI3ZTYsIDB4YmM5ZWUwYzUsIDB4Y2ZkZWM0YzcsCi0JMHg5ZjlhNzI4MSwgMHhmZjY1MWJmNywgMHg2NTYzZDVhYiwgMHg1M2Q0MGFhZSwgMHgyYmQ0YmQ3YSwgMHg3YWE5ZWZlZSwKLQkweDJmNmNiMDEzLCAweDE0Y2Y3NTdkLCAweDc0MTU1N2Q0LCAweGViNDYwMWRkLCAweDM3MDZhZmE1LCAweGFmNTJiZmEwLAotCTB4NGQ4OTZhYWYsIDB4MTBkOTUzZDEsIDB4M2Q1YTUyMzcsIDB4ZTA0YWQ2NjQsIDB4YzA1ODNiZTMsIDB4YjVmMDdiNzYsCi0JMHg3NTg2OWZjZiwgMHhlMDRlY2FiNywgMHhmOWQxOGQ0YiwgMHg4MmY4YzA4YywgMHg2Y2NjYmM4MCwgMHhjODM5ZjhkZCwKLQkweDBiNGNmOTQxLCAweDAyNzNiYmJlLCAweGIzNzIwMGU4LCAweDU5YzU5ZTIyLCAweGRmMTE0YmY5LCAweGJjZTUxYzRhLAotCTB4NTczZTVhOTUsIDB4Nzg2N2I1Y2UsIDB4YWY1MWUyNDUsIDB4ZTI1NmU1NWYsIDB4ZjQzYmQ1NTEsIDB4ZGE1N2U1MTAsCi0JMHg4MjJkOWRjZiwgMHhmZTQwMjJkZiwgMHhjNzdiZWVjOCwgMHhlMzg5ZGU2MiwgMHg4M2VkYzg1YSwgMHhlN2U0NzYxNSwKLQkweDVmOWZmNzQzLCAweGViM2FmYzBhLCAweGJkODA4MTQxLCAweDAzNmY2NDRlLCAweDJiMzU4N2FjLCAweDY1ZjgxNzA1LAotCTB4ZGFjODNkZTcsIDB4NjFlZGEzY2YsIDB4Yzk3ZTg3ZGMsIDB4YjdmMjhhZjgsIDB4NjZiZmY4MGIsIDB4YjFiYmUzZDUsCi0JMHgwMmUwOTM3ZSwgMHg5NzU2ODdmOCwgMHgyZTUxM2RhMiwgMHg5YmNiMDQ4YiwgMHg4MWZlZTA4ZSwgMHg1ZjE4NTNhZSwKLQkweDg5OGIyNmQ0LCAweDRiMzVmZmMwLCAweDk1MzA0ZWNjLCAweGY4NTIzZTE0LCAweDE3YmYwOGYyLCAweDU5ZGNhMjRkLAotCTB4OWY3NmQzMzcsIDB4ZGU4NDkwMDAsIDB4MTc0ZTI4ZmMsIDB4ZjAyOWViNDIsIDB4ZjhjY2FkNDksIDB4OTI0YmM4ZWMsCi0JMHhlMmU2ZDgxYiwgMHhjM2VlYzk3YywgMHhhYmViZTQ5ZSwgMHg1MzJkZGNmOCwgMHhkNzNjYzEwNiwgMHhiNjg2MzhiMiwKLQkweGIwMjYwNTU1LCAweDA1ZmE0ZTIzLCAweGNkZWY4ZjNjLCAweGI2YTZjNDk3LCAweDdjYmUxNGEzLCAweGZhZmE2MDRlLAotCTB4YmRhODcxNjIsIDB4YTVmMzhlZjgsIDB4YTk5NDdmYzIsIDB4YjU1OTVmNzEsIDB4MGY3MDIyNTcsIDB4NWU4ZmNmNTcsCi0JMHhjNDJiNzAyOSwgMHg0Y2JlOTQwYiwgMHg1YmM3NDNlNywgMHhkYTNmNzBkMCwgMHg2OTFlMGFlYiwgMHg2NWYyMTEzZSwKLQkweGExZWYxNjQ2LCAweDkxYjU0M2M4LCAweGU3N2QwNWM1LCAweDM3ZmFlOWYxLCAweDc5NjFlYzViLCAweDRhZGM1OTEwLAotCTB4YmJmYmY2OTAsIDB4OWM2MDJmMGQsIDB4NDdmNWI5ZGMsIDB4ZTZmYjQ3YWUsIDB4ODAwN2NhMGQsIDB4MTI3NjBkZmYsCi0JMHgxZjg3ZmRjNCwgMHhiMzQ1NTBmNSwgMHg0MjM4YzFlOCwgMHg2NmU3MzA2MywgMHg4OTVkYmVkNSwgMHhjNTdjYTg5NywKLQkweGQ4YWVmODhlLCAweGQzMTdmNjY0LCAweDhmNWIxNWY2LCAweGY1ZjllMTY1LCAweGU3OGM2ZWEyLCAweDY4MGJkNzkwLAotCTB4MjNiOTEzMWYsIDB4NTQ2ZmVlMGIsIDB4ODZkYzU5MTgsIDB4NjQ1ODJlZGUsIDB4YjNhYTdlNjEsIDB4ODNhNzU5YWYsCi0JMHg2M2FjMjZkZCwgMHgwNDU1NjllZiwgMHgyYWNjOTM2ZSwgMHgxNmZkZWViZiwgMHhlNzg3YTk0OSwgMHgzM2E1MzIyOSwKLQkweGYxODY5M2RjLCAweDUyNzFkZmE5LCAweGZlY2UzNWUyLCAweDQ1NWZmMTg2LCAweDVjZjY4NDhiLCAweDlkOGRiYWM1LAotCTB4NzE1NzdmMTAsIDB4ZGNmYjhjZDgsIDB4MzFlNzc1ZGEsIDB4OTVlMGI4OWUsIDB4YWUxZGYwOTcsIDB4MTM1MTE2ZGEsCi0JMHhlZTJiZDU3ZiwgMHhlNzg4OWQ2OSwgMHhkNWNkMzUxYiwgMHhmMzQxYmYxOCwgMHgxMzUxY2U3OCwgMHg3N2ZmMWM4OCwKLQkweGNhOWNmOGIxLCAweDk1NmRiNjU3LCAweDM3MmIwYTI5LCAweGVmODFkYWZmLCAweDc1YWZiNTcyLCAweDc1OTNiZGUwLAotCTB4ZDg3NzFlZGYsIDB4ZjAyOWNlMmIsIDB4MzljNmI3ZjAsIDB4NTA3ZjgxOWQsIDB4NDVhZGZhYzYsIDB4ZDY0NGU3MWIsCi0JMHhjNzQ2YmQzMSwgMHg5ZWU5MTM5NywgMHg3YWRlYzg0MSwgMHgyMWU3ZjNlOSwgMHhhNmVjZjcwZSwgMHhmMTg3OWY0ZiwKLQkweDY3ZTdmZDU2LCAweDA2MWM0M2NmLCAweDgyNzE2ZWQ5LCAweGZlYmI1MjNkLCAweDU0NjM4YzdkLCAweDMwYjJlZGRhLAotCTB4MzdmM2FmZmIsIDB4Y2ZmOGM2YmYsIDB4ZGQ5YTNmY2UsIDB4ZGI3M2FkMDAsIDB4NmY2MGExYzksIDB4NmJmYzZlNzQsCi0JMHhkZTc1YzQyMiwgMHhmZDEwYWRiMywgMHgyOTZjZjczOSwgMHhmODIyNDgxOCwgMHhmODE0OTQwYiwgMHhmODhmZGZkNiwKLQkweGRhYmQzZDUzLCAweDVlMzBkYjlhLCAweDM3YTUxY2U0LCAweGRjNTA4N2U4LCAweGM1OWFhMDVhLCAweGJjNzhiYTAxLAotCTB4NzFjODg2ZGEsIDB4ZDNlMmJkYmUsIDB4NjFiZTZmOWEsIDB4NjZjNWU4MTIsIDB4MzQ1YzE3NjYsIDB4YTUwMGVkNGUsCi0JMHhhMGZkMTVlMywgMHhiOTg3ODZkZiwgMHhiZjRjODkzZSwgMHg0YTBmZjA3MywgMHhmYTNhNjNhNywgMHhmNzNjZGU3ZCwKLQkweDU5NDJjZjU3LCAweDcxOWY3YzczLCAweGUwN2VjMTZhLCAweDBlMjM4OTRkLCAweDE2OWQzYzU4LCAweGJmNGQ5YjkwLAotCTB4YTA0MGI4YzUsIDB4ZjQwYmIxNWIsIDB4YzE0M2U3ZjMsIDB4ZWE0YTdjMmYsIDB4Zjc0M2ZmNDYsIDB4NWJkZTMzMzYsCi0JMHgwODc2ZDhhYiwgMHhjYjczYTdlNSwgMHgyNWQzOGM3ZSwgMHg5M2I3OWUzYywgMHhmZTJjN2U4NCwgMHg2YTdhZmI5MiwKLQkweGJlMmNlYzliLCAweGUyMWZlMzhkLCAweGZjMGU1Y2RmLCAweDE4ZGNlM2NlLCAweDZmZjEyYjFmLCAweDBkYmRjNTdkLAotCTB4ZWZlMzRlOGYsIDB4YmNmOGIwMmEsIDB4NzgwZmE2ZWEsIDB4NWU5ODU5MWMsIDB4ZTlkMDJlNDIsIDB4MTNjNmI3YzgsCi0JMHgwMjcwNzgyYSwgMHhlM2FiYzYxZSwgMHgxN2M3MjMzOCwgMHgzOTdkZTI4NiwgMHhhMDdlODBiZCwgMHg5YTcxNDNhNywKLQkweGUyMTgzZjM0LCAweDIxYzJmY2Y2LCAweDc0MWY0MTEyLCAweDlmZjE2NmFlLCAweDFlZjY5MjlkLCAweDJjM2U5ODY4LAotCTB4YWQxNWQzYWUsIDB4ZmY3ZjUzOTMsIDB4MzYyZjM5ZTIsIDB4OWY4YWVmZmUsIDB4MjY5NzY4ZDgsIDB4ZDNjMTUxYWUsCi0JMHhmNTkxMGJkOSwgMHhmMGI0NDE3OCwgMHg5YTkzZGQ4ZiwgMHgwNWVmZTgyMywgMHhjMDI3NDdlNCwgMHgxMzExZjk3OSwKLQkweDdjNWU3YmMxLCAweDM3ZGNhNGZmLCAweGIzYjRmZWUyLCAweDBiOGM0NWViLCAweGExYjQwODZjLCAweDhiZWJkNzFlLAotCTB4YTI0ZTdlMWEsIDB4ZDEyZGVmMWYsIDB4YjRkNTRmNGMsIDB4ZWNlMjc1YjAsIDB4NDZkZmJiMjYsIDB4ZWI3ZDljZTEsCi0JMHg5YWU3ZTQzNSwgMHgzMjRjNDcwZCwgMHhkZDdiYjc4NSwgMHgyYjhiMTM2NiwgMHhlYjAzZjI2MCwgMHhmZTM1NWY4NCwKLQkweGM4ZWYyZmIzLCAweGRmY2RiZDQyLCAweDMzZjdkMjE1LCAweGRiNTNmNzliLCAweGRhOWZiOTFhLCAweGZkMzVlNzBkLAotCTB4OTMwMWNhNTQsIDB4ZmVmMTc2ZDMsIDB4YjczZDE4Y2UsIDB4ZWQzM2JjMDEsIDB4MTMzYTVlY2MsIDB4ZGQyMjhiMTAsCi0JMHgyZDEyOTk4YiwgMHgyMzczZmRmMSwgMHhmNWQzNzNmMywgMHhiMjU3ZGYxMiwgMHg0NDk0ZjdiMywgMHg1ZmRhMzQ0NywKLQkweDBmNzNkOGY3LCAweGQ0ODAwY2M3LCAweDhiMTI3MTg0LCAweGM1NWM3OWViLCAweGEwMjRlZTQzLCAweGI1ZmI2MmY3LAotCTB4MTRiYmM2MDQsIDB4YzdkYWFiZjAsIDB4MDEyZjRlNGIsIDB4MmE0YTRkYmIsIDB4NjczZWFiMTksIDB4MWE2ZmM2NTEsCi0JMHgxNTdlMjA2MCwgMHgxN2IxZWZmZCwgMHgyN2ZkODQwZCwgMHg2MTgzY2EzMSwgMHg3ZGE3ZDcxYywgMHhhZmY1ODQ2OSwKLQkweGY3ZmNjN2RkLCAweDBjYjFjMmU0LCAweDc0NmVkZWY4LCAweDcwYTc4YWVlLCAweDZlMGIyN2RiLCAweGU2ZjZiZDcwLAotCTB4ZTQzZjA2N2IsIDB4ZGY2OGYwNGYsIDB4N2E1ODg0ODUsIDB4ZGI4ZjVmOTgsIDB4ZGRhMGY2ODAsIDB4MmFkMjc0MTAsCi0JMHg0ZjY5NmVjNCwgMHg4YmFjMGRjMiwgMHgxODg5OGNiOCwgMHhlODcxOGYwMiwgMHhhNmEyZjg4ZiwgMHgwNzNhYmRjMSwKLQkweGQ0MjllNmExLCAweGVmMzUxYjczLCAweDFhZTRjNDI0LCAweDkwMjZlZjc1LCAweGJkNzQxOTAzLCAweDU1N2U3MWIxLAotCTB4ZjY3NjcyZmMsIDB4MDNiNzBhNmYsIDB4Y2Q4ODYzZGYsIDB4YmVjMGY1MjQsIDB4YjQ1ZWVjMmIsIDB4ZWZlNDllMWIsCi0JMHg0OGRmZDA1OCwgMHgyMzg4Njc4OCwgMHgzYmY1NmVkMSwgMHhjZDVmYjQyZSwgMHg1ZmI0MTBmYiwgMHhhM2Q2M2U0ZCwKLQkweDE5MTdjN2NkLCAweDVmNWE0NzhmLCAweGE2MzhmOWUyLCAweDQzYzQzNjg4LCAweGQ5NDFhMTZjLCAweDRmMGYxNWFmLAotCTB4MzYzYjhmMGMsIDB4NTA4M2I4ODEsIDB4ZTMwZDlkN2UsIDB4Yzk3OGE5YzAsIDB4NmNkODc5ZWEsIDB4ZjFkMzcxZGEsCi0JMHg0YzQ0ZjQ2OSwgMHg2MDZjODc2NiwgMHg3NzdjZDRlMywgMHhmMzgwOTcxMiwgMHhkM2JmNjhmNywgMHhkYmYyNmFmMSwKLQkweGFhM2M3OWEzLCAweGRmNDExODkxLCAweDA5ZGFhMmQ5LCAweDA2OGY3ZmM3LCAweDdiOGM0YmRmLCAweDdkMDIyNDg3LAotCTB4Y2I1N2RmMDgsIDB4YzQxMWVlMDQsIDB4ZmVkMDc5ZjAsIDB4ZTA5ZGY1MzUsIDB4NmJmZDYwMWQsIDB4NGVjMTkwZTEsCi0JMHgyYmJmN2RmNSwgMHhjY2I3ZmFmOCwgMHhlODFlZjI1YSwgMHg3NTYxOWM5YiwgMHgzMTNiYzgxOCwgMHhiZGUyNjQ4OSwKLQkweGE4MDFkNmQ1LCAweGU2MTZkMjlmLCAweDJmMzQ2MzkzLCAweGNhYmUzMjM0LCAweDZlNTA0MTU4LCAweDljNTliYTMyLAotCTB4OGQxMjU5MGEsIDB4OGEzOWE4ZjYsIDB4Yjg2Yzk2YzgsIDB4Mjk2NDQ0YzcsIDB4ZjNmMTdhMWIsIDB4MjJkNzI1ZjMsCi0JMHg1YzY1MDUwMywgMHhiNjhkNzk0ZSwgMHgzN2NlZWQ2YiwgMHgwODQ0YTVjYywgMHhiZjg1MTE0MCwgMHgzMWYzZGEzNywKLQkweGEzNzBkZmY0LCAweDFhMzBjOTM3LCAweDc0YjdkZTNlLCAweGRhOTQ2MGU3LCAweDY4MjNjMTRiLCAweGI1ZGRlZTEwLAotCTB4ZTkwYjA4NjcsIDB4MDg5YWY3ODEsIDB4ZjAxNzc3YjksIDB4NGYyODYzNzgsIDB4YmFjZjcwODIsIDB4Zjc5NDNhMzEsCi0JMHhkZjdkNTE0NCwgMHg2N2YyYzY5OCwgMHhiYTVkZWZhMywgMHgzZmJiYzI5YywgMHgzNDZjZTRhNiwgMHg3OWNhMjc4YywKLQkweDA1Nzc5ZTE5LCAweDE3ZmU3MGUzLCAweDcxOTQ1ZjViLCAweDk4ZWE2YzhlLCAweGY5OTYzZDEyLCAweGNmMWRlMTRkLAotCTB4M2RkMGY2ZTEsIDB4ZDc4NzVjNmEsIDB4MTA3Yzk0ZGEsIDB4Y2QyNTExZjcsIDB4NTVhZjUxZmIsIDB4Yjk2M2Y2MDcsCi0JMHgxZDM0ZjIwMSwgMHgyNTMxZGYxNiwgMHhlYjEwOTYyNSwgMHg5MzBiNGJhMywgMHhmZDc4ODUyZSwgMHg5ZDAzMjRkMiwKLQkweDk3NDc4MGU3LCAweDYwZmI4MmVlLCAweGEyM2MzYzYxLCAweGIwZDE4M2MxLCAweDQ5OWVkNzdjLCAweGRmMmMzYzZhLAotCTB4N2Y0ODc2MDUsIDB4YmFjMDMwZjEsIDB4ODlmMmU5N2MsIDB4ZTUzNzlmZmQsIDB4YzQyYjc4OGIsIDB4ZjAxOWU0M2IsCi0JMHg4N2YxYTVkZCwgMHhhMTVmZTg2ZCwgMHg0N2FlMGIzZiwgMHgzZWVhY2UxYywgMHhmYjJhYmZlZSwgMHhjNTI3MGExMSwKLQkweDVmY2MyZTNhLCAweGFmODUzYjRhLCAweDc0OWJlMmZhLCAweGJkOGNiY2UyLCAweDlmZTVhN2FmLCAweDAzMjdhYjYyLAotCTB4N2FiNzBkZTAsIDB4ZTFjNmQ5ZjYsIDB4ZjYzZWYxZmMsIDB4M2RkN2FmNTQsIDB4YWY5ODRjNzksIDB4MDYzYmNkODksCi0JMHhiMzJlZjdlZSwgMHhhYWNhMzVkZSwgMHhjZDRlY2JmMiwgMHhkMWE2MjA1YiwgMHgyYzgxNjZmMSwgMHg5M2U3ODQyNCwKLQkweDhjYjY1MGIwLCAweGYwNGNmM2EwLCAweDdhY2UzMDE4LCAweDA2M2JkNTk5LCAweGVmNGM3MWZhLCAweDg0OTVkMjBlLAotCTB4MzFkZTAwOWEsIDB4MGI5NjE4ODIsIDB4NmQ4NmJmYTUsIDB4NTBkZWJmNmMsIDB4NjIyZmYwNmEsIDB4YzAwMmJkZTcsCi0JMHg4NzQ3ZjMwYiwgMHgxOWJhM2Y4ZSwgMHg0MTFjYjQ3ZiwgMHgzZDY5YThmZSwgMHhhNWEzZjhjMiwgMHgwYmY4MWYzZSwKLQkweDlmNjBjZGNlLCAweDQ3YmE0OGRmLCAweDc5YWZkZDAzLCAweDQ4ZDBhOWI0LCAweGI1OTg3ZmY5LCAweGYyODUyMWJiLAotCTB4MTRkNjQ0ODUsIDB4Nzg4YTVmMTYsIDB4YWY4YzMxZmQsIDB4ZjhmODdkMTcsIDB4NDVmNTc5OTQsIDB4NjkzZGM2ZGYsCi0JMHg3ZWMyNjY4ZiwgMHhjZjAxYWY3MiwgMHg4NWJjMTRiYiwgMHg4YjJiMDdlYywgMHhmNzY0MWMyMywgMHg2YTdlODM0ZSwKLQkweGMzNzYzYjczLCAweGY5ZWQzN2Y0LCAweDcwZGI4YzBmLCAweDA3NjliZGVjLCAweGEzNGM3N2I0LCAweGZiODU3MjE0LAotCTB4MDhiYmRjNmQsIDB4YTQ2ZGNiZGYsIDB4MzE5MDAwZjMsIDB4NzU4NjViYTQsIDB4MzA3YzZmYmQsIDB4MDNlMTA5ZjksCi0JMHhjMDRjOWVlYywgMHg5Nzk0MTFjNywgMHgxMDllZmNmNSwgMHhmZmJjM2I5NSwgMHhkZWNhY2MzYSwgMHg2NTY3OTg2NSwKLQkweGFjMDdlN2ZiLCAweDFkOTk0ZjIyLCAweGM3YjdiMDk2LCAweGRhYWRmYjA0LCAweDlmYWMwNjI1LCAweDdhYTY2OTAwLAotCTB4ZGViMDRiZmUsIDB4MjZhMzU2MDMsIDB4YTdhMTRlNWUsIDB4OTM1NDRmYzIsIDB4ODc3ZGUxNWEsIDB4M2RlZjU4OGMsCi0JMHhiMzg5ZmU1YSwgMHgyOWUwYTlhNiwgMHgxMWYzMWVlZCwgMHg0YTBjOWNmNywgMHhkZDc3OWQ4NywgMHhlNTJhZWIwZCwKLQkweGVkMzUxYjlmLCAweGMwMTY0OTQ2LCAweGY4MWY1MjliLCAweDY4N2QxMjMzLCAweGFlOGM0NWJiLCAweDE3YjA1NjcxLAotCTB4MjA1Y2VlMzYsIDB4N2Y0MmY5YzIsIDB4ZWYwMzlhZTksIDB4MzlmYWQxYzcsIDB4ODliNzUyNTYsIDB4YTE4OWNmYjYsCi0JMHg3OWUzZTQyOSwgMHhhN2NmMjA3ZSwgMHg0M2ZkMzRiMCwgMHhkZmEwNDFiNywgMHhlYmJmNzM1NywgMHgxNzFlNTZiMywKLQkweDA2NWU3NDYwLCAweGNiM2M1M2VmLCAweDI5MzEzYWYxLCAweDQ1MDVkNzFhLCAweDgwNjZjMTZlLCAweDNmMjM2YjczLAotCTB4NGVlYjRlYmYsIDB4MTRkZDAwMzMsIDB4MWI3NjM2MzksIDB4NjhiYTc2ODIsIDB4MDY1ZDE5YTUsIDB4Yzc3ODYzODgsCi0JMHhlYzZkZTc0NywgMHg3YjVjZWY1YiwgMHhhN2JmYmIyOSwgMHhhNzMyZmVmZiwgMHhhZmI2ZjdmMywgMHhhZjc1ZWFiZiwKLQkweDRiYTA2NWY3LCAweDYzYzc1NDc1LCAweGNkN2NkMTM3LCAweGY5ZTE5ZmE1LCAweGNkNmIyMmUwLCAweDNiNzNlYTU1LAotCTB4ZmYxZmFhN2QsIDB4M2E0ZTE3M2IsIDB4ZmNlYzNlYzAsIDB4YzkxNDVjY2EsIDB4MzJiMGVlY2UsIDB4NmY4Zjc3ZmIsCi0JMHhlYzUzYjYzYSwgMHhlODE1MjQyZSwgMHg0MTNkZjU2NCwgMHg1NzY4YTYzMywgMHgxZTU1MDhmZCwgMHhjNjM2NTFkMCwKLQkweDY1NmFmYWMxLCAweDc1YWJhNGZlLCAweDE0N2YwM2Y3LCAweDQyYmQ3ZTY0LCAweGY0MTIzOGQyLCAweDVmZDU4ZTY0LAotCTB4ZTVjMzhiOGMsIDB4NDgxNzE4ZTksIDB4NTFmNjYyYmUsIDB4Y2UwZmZkMTQsIDB4NzlmOTBhOTcsIDB4NzNiMGU3OTgsCi0JMHgzOTdmMmMyNywgMHhlMzkzOGQzMSwgMHgyYTRjN2VhMCwgMHhkYTIzY2ZjMiwgMHhlMjcyYjlmNywgMHg1ZGU4MjM2NSwKLQkweGYwOGE5ZTkyLCAweGU1NzRhMjBhLCAweGQxZGEwOTAzLCAweDMwY2I5MmU0LCAweGE4OTBhYjllLCAweGJlM2EzMWVjLAotCTB4NmZjNjc0OWMsIDB4YmE5NjQ3NTMsIDB4OWZlZmYzMjcsIDB4NmNmYWYzMDEsIDB4ZDYxMzE5YzQsIDB4NjZiOGQ3ZjMsCi0JMHhlYzZiMjdiOCwgMHhlODM3NDY5NCwgMHg1ZGZmZGZlZCwgMHgzYzUyMzNiYywgMHhlMzFiNzhjNSwgMHgxMmJlM2RjNywKLQkweGViMzM5YzM3LCAweDEyZWY5YWYxLCAweGJkNWRkODk2LCAweDlmYzdhYmYxLCAweDNlMGFkZjFlLCAweGZiY2I3OGY1LAotCTB4Y2UzOTNkZDAsIDB4N2EzZjFiZDUsIDB4NTA3NDI4N2MsIDB4YzdjN2FjZjAsIDB4OGE2ZmYwM2IsIDB4Y2QzMjc3YWYsCi0JMHgzYmRhY2VmOCwgMHg3N2RmODY0NiwgMHhkZWM4YjlhOCwgMHhmZGEwZjQ2ZCwgMHg0M2M3Yzg1YSwgMHg0ZmI0NTdlZCwKLQkweDZlZWMxMjBiLCAweGUyOWUxZWM2LCAweDc4ZjBjNGMyLCAweGUzZDU3OGY1LCAweGUzYmY4NzMxLCAweDdjNDQ2MjQyLAotCTB4ZTAzNzc0NDcsIDB4MDE2MWYyOGIsIDB4N2VkMDRjMWMsIDB4NzA5OWI2MGIsIDB4NTc4MjQ4ZmYsIDB4MDZmYzc1MTMsCi0JMHg0N2JlMDYxZCwgMHgxNzk3MzU3NywgMHhkNjM5MmYwNSwgMHgwMGIxOWRiYSwgMHhlNzhhOWNjZiwgMHhhNTdmNTdkNywKLQkweDViMGI2N2I1LCAweDdmMDY5Y2E3LCAweDc3OGM0ZTQwLCAweDg5NDFmODA5LCAweDVmMzg0YTk4LCAweDE1ZjJkNTFkLAotCTB4ZDUzNTk3MWYsIDB4YThlYWY5Y2YsIDB4OTE5OGFmOGUsIDB4MGJjYWNmMTMsIDB4NzRmMmJhOWQsIDB4ODU1MDdlODIsCi0JMHg1NmYzZjRlZiwgMHhmODE1ZWJmOCwgMHg5ZTM3YTEzMCwgMHhiMmNhZmUxNCwgMHg5OTNiZmI3MSwgMHgzODdiMDYwYywKLQkweDMxYjFiNWViLCAweDZiNDk5ZmEwLCAweGMzYmY0NDVjLCAweDIxMjVjM2Y4LCAweDkxNGY5YzM4LCAweDBkZTIwNTBmLAotCTB4ZmZhNjc3N2QsIDB4OWRhYTdhMDMsIDB4M2YyYTgyYWUsIDB4NWJkMTBjYzAsIDB4YTdhMDhiNjAsIDB4YzQ5OTNlMTQsCi0JMHhjODg5MzVlOSwgMHgzNDdmYzAzYiwgMHgxMmZmMTg4OSwgMHg1NTUzZjdiMiwgMHg5OWU2NTdmMywgMHg5ZTYwNTI0MiwKLQkweDRjNWQ1OGFmLCAweDg2NzlmM2JmLCAweDQ3Y2Q0ZGU2LCAweGRlNDRmYmEwLCAweDFiMjhjNGZmLCAweGRkMjBiN2RlLAotCTB4ZmMyMWIzYzYsIDB4MzJiYmUxYTcsIDB4M2MyZTI5YjIsIDB4MjdkNzg5MGUsIDB4YjMwOGViNDMsIDB4N2JlMjY2ZDcsCi0JMHhlNDJmMTRiNiwgMHgxYzc4NmIxYiwgMHhjNDYwOWI1ZSwgMHgzOGY4NTY3NywgMHg5MjhiYWRjZSwgMHg3OWVkNGUyMSwKLQkweGVjMDczYmQxLCAweGRlYzJiM2I4LCAweDMxOWY5YzJjLCAweDM3ZDYwMjM4LCAweDJkNjdmOTdkLCAweDljYTA2YjNiLAotCTB4N2FjMzJiZDYsIDB4MjI5NWZjN2MsIDB4NmY3NDJmZjMsIDB4YTRkN2ZiMzMsIDB4NTI4NzZkZjYsIDB4NDA3NWM2NzEsCi0JMHg3MDg5OWY5MSwgMHg5MDBhZjE1ZiwgMHg4YzBhNjBiNywgMHhjYTU4NmFmYiwgMHg3Y2ZkYmE2OCwgMHhmMmZiZWUzOSwKLQkweGQwOGRiMjVhLCAweDI5OWVhZWNmLCAweDRmOWY5NzE4LCAweDVmYjA0NjNjLCAweGU3YWY3Y2Y1LCAweGViM2YzZDZmLAotCTB4OGZlYzM3ZjksIDB4ZmIwYTFlZTgsIDB4MmZjYWVmOTAsIDB4ZTIxNjlkOGEsIDB4NmY5NGMzOWIsIDB4YzI5YmViNTQsCi0JMHgxZTdmOTQyZiwgMHg4ZDc1YmMwNSwgMHgzMDE5ZTRmZCwgMHhmZDhkZjdhYiwgMHgzN2Q2MTEyYywgMHhkYjBmMGVjNSwKLQkweGEwYzc5ZTFiLCAweGI4ZjY1ZjVlLCAweGJiZmY4NzYyLCAweGYwMzRmYmNkLCAweGNmNzQ5MWEzLCAweDIzNjlmNjgyLAotCTB4ZWZiODA2NWQsIDB4ZjNjZGI2ZmUsIDB4ZWM1NzdjMGMsIDB4MmJlZDhiOTMsIDB4ZTFiYTRlYzgsIDB4OGIzMzdjYTUsCi0JMHgyMDYwMjFkMywgMHhiY2FiZGVmOCwgMHg3NTNkNDA0MCwgMHhhMDk2ZTkwNywgMHgyNGVhM2JiZiwgMHg5Njc1ZmVjZCwKLQkweDA3ZTNmYmE1LCAweGZlYjAzY2UwLCAweGYyMDc4YzEyLCAweDg4OWE5NDQyLCAweDcxNWM1OWVkLCAweDMxZWZiZjAzLAotCTB4ZTAwNDdiYjIsIDB4ZGE4NWNlZjUsIDB4NjRkOGY4ZjYsIDB4Y2Q1ZGY4NGUsIDB4YWZiNjA1OGYsIDB4NDhlOTY1OWYsCi0JMHhhNWI0N2I4MCwgMHhiZWJlYjZiMiwgMHg3YTFlNjU3ZiwgMHhiNTc2ZmFiOCwgMHg3ODIxOWRmYywgMHhiMmFkZDhiNywKLQkweDMxYjU1ZTBiLCAweGRlMzQyNjNiLCAweDAzYmJmODc3LCAweGYwMDZkZjE0LCAweGVhNWViNGQ3LCAweGZmMDIyNDdmLAotCTB4MmEzN2E5MmEsIDB4YWYxOGQzMmUsIDB4OTliNjJmYjIsIDB4ZmY3YTQ3YTcsIDB4YzE0N2U5NDMsIDB4YWVkMjRjZjcsCi0JMHg5MTZmZjNlMCwgMHhlODlhMmZkZSwgMHhjMzdkZmI2NSwgMHg3OWNkNDE1MywgMHg3NDY2OTJiYiwgMHgyZWJiNDY0ZiwKLQkweDFkYTAyMDIzLCAweDMzYzgxNTVkLCAweGYzZDhkNmNjLCAweGNiZGJiZjZjLCAweDI5Nzc4NzllLCAweDBlZjM3ZWEwLAotCTB4ZWEwN2NmNjYsIDB4ZDU1MDVmNzEsIDB4YWIzN2Y2Y2MsIDB4OTkzOThjZTEsIDB4ZWQxMzI0MGYsIDB4MTViZWQwZmMsCi0JMHhlMWFhYTBlMiwgMHgxZTU2M2Y5ZCwgMHhlOWU2YWI4NCwgMHhkN2ZlYWM4ZCwgMHg4N2E2ODViNiwgMHhlOWRmNjAzMywKLQkweDM0ZGM5MjRkLCAweDg2YTFlMmJmLCAweDZhM2ZiYTI4LCAweDQyMTYyNTQ4LCAweDVkN2Y0N2Y3LCAweDE1OTRkMGYxLAotCTB4ZTJjYTU0YjksIDB4YzU4OTAyM2MsIDB4NDI2ZDgzN2MsIDB4NWZjOWY3ZmYsIDB4MDFiMDc4YWYsIDB4N2Y3NGM5ZjYsCi0JMHhlZDUzNjNkNSwgMHg4ZjkyZmI1YiwgMHhlMjE3MzZlMywgMHhlYWZkYWZiMSwgMHg1ZjI1MzFmZCwgMHgwNzdlNTRkYiwKLQkweGEyN2JmZDNkLCAweDdmYzAzMTVjLCAweGY0N2RmMzBmLCAweGMyZWYwYmI1LCAweDkyZTU4MWZkLCAweGRlMjE0MzBiLAotCTB4YmJhNzIyNmIsIDB4YTlmZGNlZDksIDB4M2FjZjc2NTYsIDB4ZWQ5YWY0NWYsIDB4NWQ2ZmRmMjAsIDB4ZTI3ZTAxMTgsCi0JMHhjMzFlNDY3NywgMHg3ZjJiNTk3ZCwgMHhhZmFmNzE2ZiwgMHg4NTIzZWQxYywgMHg2Njc2NzE4ZSwgMHg2OTdiNWZkNywKLQkweDE1ZjYwMzliLCAweDAzZmI4ZGQ3LCAweDY3M2YwZmRlLCAweDlkOTllZjY0LCAweGVjNjkzNWNkLCAweDg1NmM4N2Q4LAotCTB4NDk1ZjAwNzEsIDB4ZDA0NGRhMjksIDB4ZWVjNzEzY2IsIDB4N2NlYjBjM2MsIDB4NTg0M2ViNWYsIDB4ZDAwNDdiZmYsCi0JMHhmZWMyZTRmZiwgMHg2OWRmM2M0NCwgMHhiZjAwZTVkZSwgMHhkZjdlNTljZCwgMHg1YjczNWNmYywgMHhhZDM0NWRlMiwKLQkweDA3MDdmOGRlLCAweGY5ZDJhN2VjLCAweGRiMTljZWZjLCAweGFhOWI3ZGYxLCAweGNiYmUyMjJkLCAweGJjNGRmYjQwLAotCTB4Y2RjN2ZjMWQsIDB4NjExZTczYjMsIDB4ZDdhOTQ0ZGQsIDB4ZDVkZmMyM2YsIDB4NDliZmVjNTAsIDB4YWY5ZmIyNTEsCi0JMHgxMmRmOGE4NywgMHhiYWI4ZTFkZiwgMHgxYzU4ZjQ1OSwgMHg3M2MwZWRiZCwgMHgyYzllZDI3YiwgMHhjOTEwN2EwNiwKLQkweDFhM2UxYzNkLCAweDBiYjQ0ZWM5LCAweGZkMGRmOWY5LCAweDdlZjc4NGVkLCAweDliY2NmM2I3LCAweDdjZGQ5ZmNkLAotCTB4NzM5MTMyMTUsIDB4ZDgwMmU1YzksIDB4Y2MwMWRlNDcsIDB4YjBmNGM3MzksIDB4ZmQ1ZGJmNjIsIDB4YTkzZmQ2OTUsCi0JMHg1YmYzMWZiNywgMHgyMTQ5MmY0NywgMHhkZWY2MGY4OCwgMHgxZmM5Yjc3YiwgMHhlYzJlY2VjOSwgMHg5ZWQxMTI5ZSwKLQkweGM0NzFlNDI0LCAweGY0OTZmNjU3LCAweDRjZmVmMGE5LCAweDI3MDZkYmY2LCAweGNlYzgzYmY0LCAweGY5YjZiMWY4LAotCTB4YTUxZjdjMzMsIDB4ODU2ZjA0ODYsIDB4ZDE2NjlhZjIsIDB4YTZkZjI0MTksIDB4MWVmYzk3OWYsIDB4NTc1NDVlZmUsCi0JMHhiZTAyZTRhYiwgMHgxNWRkNmFlZCwgMHgxNmY5MDU5NSwgMHhiNTVkZmQxMSwgMHgwZTVlMjZmYiwgMHgyYWQ5ZDY3YywKLQkweGI1MjEzYmUxLCAweDgwNzEzZWRiLCAweGY3ZDY1MDFlLCAweDdlZjY1NmNlLCAweDMxZWI1NzQ4LCAweGVkYzBhZWZjLAotCTB4MWNiZjg5NmMsIDB4MDY4ZDlkZDYsIDB4YjlkY2JmYjYsIDB4ZDA1NjZmZmIsIDB4ZTg1ZTZmMGIsIDB4YWQ3ZGM3ODksCi0JMHhiNmY3M2ViMiwgMHgwNTJmMTE3ZiwgMHhiZmU0MzE3NiwgMHg0NGJmZGI1NSwgMHhlMjAwNzg5YywgMHgyNDYzMGE5ZiwKLQkweDNiNjEwYTIyLCAweGZjZmFkN2I1LCAweDI3NjI1OTIxLCAweDdjZTlkN2JkLCAweDA4YzVmNzU4LCAweDM3YzczNWViLAotCTB4ZmMwOGNmZWQsIDB4ZWZiZjVmYWUsIDB4NmE3YjczYjUsIDB4Zjc4NmM5MDgsIDB4YzQyZTVhZjUsIDB4Y2RiZGUyNTcsCi0JMHgxMTczYWI1NiwgMHg1ZDk4NWZmYSwgMHhjY2YzYjVkMiwgMHhmYmUxNTMxMywgMHhkYmRkOTE1ZSwgMHhkZjIyMjBiZiwKLQkweDcyYmRiNWJmLCAweDhkNGQ4NzU4LCAweGQ3YTQwNmY3LCAweDc3Y2U4MzE3LCAweDdmZWI0MWJlLCAweGY5OWEyYmIxLAotCTB4Y2JlZThkYTMsIDB4YzIwNmY3ZDUsIDB4NWYxY2ZkZjUsIDB4YWU3NjY0YzEsIDB4YmJjMzI3MjUsIDB4ZWVkYmRmMzgsCi0JMHgyZWY1ZWVlYywgMHhiNDc2MTNkNSwgMHg4MGE3YmIzYiwgMHhlYWIxMWRmYSwgMHhjNWY0MDk4OCwgMHg1M2M5N2IyMCwKLQkweGFjMDQwZjRjLCAweGU0OTkxNzgwLCAweDZmZGExMGE3LCAweDA3YzkzNDc5LCAweDI3YWVlYWZlLCAweGRiYTM4ODRlLAotCTB4MDA2MGM3YjIsIDB4OWI1ZDhjYmEsIDB4ZWIyZWYxOGEsIDB4ZmNkZmI5ZjksIDB4NTUyOWEzNDAsIDB4ZjNlNjVmYTUsCi0JMHg5MjUzYTM3MywgMHhmNTRlMzQzYywgMHhmNGMxZDkzZCwgMHgxNTVkYTljMCwgMHhmOTNkNDJiZiwgMHgxZTE5MzM0NywKLQkweDFiZmM1ZDYxLCAweDRkOWI2N2Q3LCAweDUwMGRkNGYyLCAweGY3MDFhOGVmLCAweGJmNzczYjFiLCAweDY5ZGUxYmJlLAotCTB4MzVkODdmOWIsIDB4MDM5OWQ2MWEsIDB4NWViNDBmMjAsIDB4MGRmNWRlY2IsIDB4ZjJkYjJmMTAsIDB4NmFlZjQxMjEsCi0JMHg2OGE5NTM0ZSwgMHg0MWJlZmRhMCwgMHg3NjBmY2M1YywgMHhlMGZiODBjMCwgMHg3ODkwZmY5MCwgMHhmYjllNjFlMiwKLQkweGY5YmY2Y2VkLCAweGU2ODMxZWM2LCAweGZlMGRlOTljLCAweDc2NWJlODNlLCAweDMzYjdjMTg5LCAweDNkYTZkNDNmLAotCTB4YjdhMGYxZjksIDB4NmZiZGQ5MDcsIDB4OGY2YjFlMDAsIDB4NWMzODM0NzcsIDB4NjI5OWJmNjEsIDB4YjAzODRkMjcsCi0JMHhmYTI4ZWE2OSwgMHgwZDY3MDljZiwgMHhlYmI3MjA0ZSwgMHhlNjExMWFjMCwgMHg0ODQ1M2FlYiwgMHhkOTdhNDBhYywKLQkweDJlZGUxNDRkLCAweGNlMzdiYzM1LCAweDFjNzQ3ODMyLCAweDJhOWM4MTZmLCAweGVmMmJhN2Y4LCAweGZmMzQ5OWEzLAotCTB4MGUzMWJiNDYsIDB4ZmMxNGE0ZTIsIDB4ZmE1MGYzMmIsIDB4Njc4ODA1NzcsIDB4Yzk0NTBkYjUsIDB4ZmM1YmU5YjMsCi0JMHhlNjljNGFiNywgMHhkZTUxMjcxOCwgMHg5Y2JlNDcyNywgMHhjZmJjZjc2YSwgMHgzYjQ2NDFmOCwgMHg2OGFlZDRmNiwKLQkweGYzMzY0N2I0LCAweDk1MjQ4Yzc1LCAweDI5ZmMwMzBlLCAweGE3ODJmYTc0LCAweGVhZmE3OGNhLCAweDA3NWYzY2ZmLAotCTB4ZjJiYmY0OTQsIDB4MjVjOTdhZjUsIDB4NzdmMGRmMjMsIDB4MzA3MjVjZmEsIDB4YjFlMjFkMmEsIDB4ZWZmMWQyNWEsCi0JMHg1NWUyYThhMSwgMHhhOTNlMDNjZiwgMHg4N2Y4ZDYwMiwgMHgwNjBjM2E1YSwgMHhiMzU1NGZiOCwgMHg2N2M1ODg0ZCwKLQkweGQ3NjlmYTQyLCAweDE4Y2NmODg2LCAweDM5NmJmZTQwLCAweDJiOGU1MDRjLCAweGY5OTRmZGQ2LCAweGUxYmVhOGVmLAotCTB4NzllMTU3ZWYsIDB4M2YwZmM4MzQsIDB4ZDAyNDFlOTcsIDB4ZWFlYjQyNzQsIDB4ZGY4ODI5YzUsIDB4MmFlNDAzYTAsCi0JMHgzNzJhMjc4YywgMHg5YTM1ZDY5MCwgMHhkZmU3NWY4MCwgMHhmYzc5ZDJjMywgMHg0YWZlNzc3YywgMHhkOTY3Y2EyZiwKLQkweDY3YTcxNjJhLCAweDM4ZTJhNDc1LCAweDI1N2U3MWNlLCAweDg4NjRlODg2LCAweDFiYjA2OGUzLCAweDRmYzlmMTM0LAotCTB4ZGQzZGJlNzAsIDB4ZjQxYjY0ZmMsIDB4ZDYyYmY5NGIsIDB4NmNhZmNiNDEsIDB4MTgxOWZjNzksIDB4YTdhZmMyYWUsCi0JMHg1Mzg0MjQ5YiwgMHhmZjNkYWQxZSwgMHg3ODMwNzQ0ZSwgMHg3ZTMwMGU1YiwgMHhlNTI0ZDA5ZiwgMHgxMzQ5ZmJjMywKLQkweDdmMDRlMjY0LCAweDZiNGQxYmYwLCAweDZmZGZkMDQ1LCAweDMyYTczZjAwLCAweGZkNzU4NzM5LCAweGFjNDdhZWQ0LAotCTB4ZWVmNTgzM2YsIDB4ZGY4MDgxODgsIDB4OTQ4OWIzNzksIDB4YzVjOTU0NmYsIDB4NmFhZmQ1Y2UsIDB4NWQ2MmI3ZTQsCi0JMHg2ZmY0NTRmZCwgMHhhMDA5YzQ3NywgMHg1NWI5MTVlNywgMHhlNGQ5YmVmMCwgMHhmZmU1MDZiZSwgMHg0ZmZjOWQ3YSwKLQkweDQxOGJlZDY2LCAweDI3YmQ2ODU4LCAweDU5M2ZmY2I5LCAweDdlOWZlNTQ0LCAweDE1OGE2ZDhhLCAweDUzNjZjZTAwLAotCTB4MjZiNGY3ZTQsIDB4ZmYxZmJlMzksIDB4ZjFlYWY0ODUsIDB4OTI3NTdhNWUsIDB4MWRlN2VkODMsIDB4OWFmZmI0ZTksCi0JMHgzZjcwN2FlYiwgMHhlNzFmMWExZiwgMHgyYjI3Mjc5YiwgMHgwMDJhOTM3YywgMHgwNTI5MWJmZSwgMHgxNDVmMDAzMywKLQkweDY4Y2ZjMGFmLCAweGNkYmU4MmI3LCAweDgyNzdjMzRiLCAweDIyZTNmMzdhLCAweDIzNGRkY2U1LCAweGE2YmQ2MWI3LAotCTB4MDZmN2FmYzgsIDB4ZTRjZTRmMTgsIDB4NWY2MGM1YmEsIDB4YzhjYjE3YzcsIDB4ZWYwNWE3YTcsIDB4YWViYTM4YjAsCi0JMHg4ZTc5MDY5ZCwgMHgzOTQ2MTdhMCwgMHg0MmY5MWU5OCwgMHgxMWRlNmFmMiwgMHg5MjBlM2RlZiwgMHg0ZTVkN2MwYywKLQkweDJmMzA2YTc3LCAweDAyNzA0YWIyLCAweGQ3NzI5NDdkLCAweGUwOWZiZTJhLCAweDRhZWY5NGYwLCAweGZkZTM3YmZlLAotCTB4YmRmY2JkMmYsIDB4Yjg3MThlNTUsIDB4NjQyMDk5OWUsIDB4YWQ5Zjg0NzMsIDB4NDdjODQ0NjcsIDB4NmI4NjIwYjksCi0JMHhlNmRlNDE5MywgMHgyN2VjNzVkMywgMHhiNGVjNzVhYSwgMHhhYWZjODhkNCwgMHhjZTNlZTFlMCwgMHhiMmM0NWZlZiwKLQkweGZjZTcwZjc5LCAweDNmNmMwZDMxLCAweDE3M2YzN2M0LCAweDgxNDY4YzEzLCAweDMwMjhiNWM5LCAweGZlMDExNzc5LAotCTB4NWU1NzVkZTksIDB4NWQ3ZjdjODMsIDB4ZGNhZmJlNjQsIDB4MzNmOTFhYjAsIDB4Zjc4OWM4YjYsIDB4YmEzNDllNDEsCi0JMHg5MTk5YjEyZCwgMHhkMzFmYjFmNCwgMHg4MTdmNmI5ZCwgMHg2M2UwMmJmYiwgMHhlNGJlZmI5MCwgMHg4MGU0MWNhMCwKLQkweDNmN2ZlMDQ0LCAweGZkMTU3ZmU1LCAweDdjYTAzZTE0LCAweGE1NDM4NGYxLCAweGExN2NmNDI3LCAweDc4MjlkZjljLAotCTB4ZmYzYmFjZDksIDB4ZjVjMWM4ZmIsIDB4N2Q1ZDRmM2MsIDB4ZjMyOGExYzQsIDB4M2U3NGRlZjksIDB4YmZjZThiZGIsCi0JMHhjYjBlNzQ2MSwgMHhkMTViZDAxNywgMHg5YzgxOGYxMywgMHhjZTViZWI4ZCwgMHhhYzRlMzE2YywgMHg2Y2QxZjBkNywKLQkweGU0NjhmYjhjLCAweGRlMDE0MGU3LCAweGU3ZGQ2ODVmLCAweDM5ZDdkOWZjLCAweGY3YWIzMmNlLCAweGUwZmUzNTc1LAotCTB4MTk5NWQxYmMsIDB4NmU0MjhmZTYsIDB4NmI1ODJlZDcsIDB4OGRmNDczYzYsIDB4YmNiM2M5ODQsIDB4YmVhZmRhMzMsCi0JMHg1MjM0ZTlhNywgMHhmYWEyOTQwMywgMHgwOWU3ZDAxZCwgMHgyMTA3MGFiOCwgMHgyMjY4NWFlZiwgMHhmODNmNzQxOSwKLQkweDRlZTk2YTQ1LCAweDcxZjlhNzg4LCAweDhhM2M1Y2JiLCAweDQ5YTM2M2NlLCAweGVlMWQ3NjllLCAweDAwZDdkYzBiLAotCTB4MGQ4YTZiZmMsIDB4ODhhZjg4NGUsIDB4ZjAwNTM4ZjUsIDB4MDA0YmEwNDMsIDB4ZWIyZjcwZTQsIDB4ZmJiYTRjNjcsCi0JMHhiYWFmZGM3MiwgMHgxZjQwNjNkYywgMHg1MmY0ZTAxYywgMHhhMWUwYWJlOCwgMHgyZmFlZjVhZiwgMHg5ODYyZGFiYSwKLQkweDcyZjAyNDVjLCAweDk5NzkxZWJkLCAweDRmMDM0ZGNiLCAweDY0NDdhZTJmLCAweDQxYzllNDExLCAweDE4NDQ4YmJjLAotCTB4MDdhNjQ0ZmYsIDB4MjI2NDdhNDMsIDB4Y2ZiZTczYzEsIDB4ZjNlNDdhNzUsIDB4N2M4ZjVlMWYsIDB4YjkyM2QxYWUsCi0JMHgwOGY1MTExZCwgMHhmZjk0NDVmZCwgMHg2OGI5YTY4NCwgMHg5MWMzOTJjZiwgMHg4NjI5NTllZCwgMHhiMDA5YzdhZCwKLQkweDA5N2FkMjhlLCAweGExZmJmYjMyLCAweDUyZGYzODA3LCAweGM0MzhjNDhlLCAweGM2MzMyNmM2LCAweGM4N2EyYjVkLAotCTB4YzNlNDhkMzEsIDB4YzA3NTNiZGYsIDB4YTZiNTBiYmEsIDB4ODI0ZjBmNzksIDB4OTMyNGQ3ZjMsIDB4NGY4M2NlMGIsCi0JMHhmNzQ4ZGQ0YiwgMHhkY2MzNzRkMywgMHgyMjUxZmM4OCwgMHhlODIzYmQwMCwgMHgwYjdlMDIyMywgMHg5OTgzNGZmOSwKLQkweDQ1NmM1ZGRmLCAweDQ4NTA1OTM5LCAweGI5ZGQxZDcwLCAweDU1ZjIzYzc2LCAweDAwOWE3MTc5LCAweDJlYjE1YjdjLAotCTB4YjhmMjgwNTYsIDB4ZTgwMzRlYzksIDB4ZTMxZTY1MmIsIDB4YzY0ODFhMTcsIDB4OTQ4Mzk0MTgsIDB4OGMxYzk1MTgsCi0JMHhjMDQ0ZWI5NywgMHg2Zjc4YjBkNywgMHhjODRiMTQ5MiwgMHhmZjRmMzE2NSwgMHhiOWI3ZWQ1OCwgMHg3ZWQ1ZTY4NCwKLQkweGY2NWY5YTFiLCAweDk3MzZmYzVkLCAweDY1YzlmY2ZkLCAweDczYzliN2UwLCAweDhjYzY0Njc4LCAweDY1Y2RmZjQzLAotCTB4YWMwY2U2OTAsIDB4NmY0YTg5MTMsIDB4ZmI4ZWNjNWQsIDB4Y2I1MmZjYmUsIDB4NDBlNDQzZmQsIDB4YWNlYzdmMmYsCi0JMHhjN2Y0MmU3NSwgMHhkNDdjMDI0ZSwgMHgwNjc4OWYyNCwgMHgxNTNiZTFjMCwgMHgzNjZlZWQxMSwgMHgyZjVjMDE4ZSwKLQkweGQyMDkwZjkwLCAweDlkNDk0MDYzLCAweDQ1MTJmZTA4LCAweDg3MDM1Y2VmLCAweDFlZDQyOGFlLCAweDE0MzNjZTAxLAotCTB4ODViZDAzNzksIDB4Y2UzYzZlZTcsIDB4NzY1NWZjMDEsIDB4OTFmYmQ3ZjQsIDB4OTMxZjIwOGYsIDB4MmI0N2Q2MWQsCi0JMHhkZjExMGQ4YSwgMHhjNjMzYmUxMSwgMHg2N2VhODNmNiwgMHhkNmY1ZmFkMiwgMHhmOGYwZTU5ZiwgMHhlOWU1MTE1ZiwKLQkweDNkOTUxOGNlLCAweGQxZjE2NGY0LCAweGMxMGU3NjQ0LCAweDliYmJlNWRlLCAweDQ1YWJmMWY3LCAweDE5MmVmN2VlLAotCTB4NjE1ZjdlMTAsIDB4NDMyNGQ5YjQsIDB4MTBmMTI5M2MsIDB4NGYxNTUzOTcsIDB4NDEwYWI0MmMsIDB4ZmVhN2M0M2IsCi0JMHg3NDZlNzYwZCwgMHgwMzM3ZmRiZiwgMHhiN2ZhYmZhNiwgMHhiMDU0YTI5MiwgMHg2ZTBjNWJlNywgMHg3YzQxMTk2YSwKLQkweDdiODNjYTA1LCAweDI2N2JjMTE4LCAweDYxNmVmZTAxLCAweDIzY2Q5YjVlLCAweDg4NDNiZjgxLCAweDNkYTBmN2UyLAotCTB4ZGM4ZGYzZGEsIDB4NjgxYmExZWUsIDB4MzM1NmUyZjksIDB4YWViZGNkZmUsIDB4MWVlZmU1M2MsIDB4YjIxZWYxYjgsCi0JMHg3ZGFjZGY4MiwgMHhiOGM0OGU0ZiwgMHgxYmEzNjM0ZCwgMHg4NThkNmNlNCwgMHg1MTYzNWZjMSwgMHg2MDYyYmJlYSwKLQkweDFjZWJlZWJkLCAweDY0YzJlMjdkLCAweGZlMjlmN2Y0LCAweDQxZGQ4OWM1LCAweGQ2OTJmMDExLCAweGUwYjAzMmVkLAotCTB4YjE4ZmQ2MzUsIDB4OTU3Y2UwOWIsIDB4YzcwMGY1ZjMsIDB4OWIzZGU2ZmIsIDB4NzNjNzU4NDQsIDB4ODYyZTM3MjYsCi0JMHg3NjRiY2VmZCwgMHhmM2MwMGFlZiwgMHg3NmI1MTM5NSwgMHgwZWExNThkZSwgMHhiOTI0NmVmZiwgMHg0OTNlZTA4NiwKLQkweDBlZjg4ZjkxLCAweDlhNGMwM2IyLCAweDFlMWRjM2Q4LCAweDllNTczZDUwLCAweGZkODBlY2YyLCAweDExMDk0YzY0LAotCTB4YWUyYTllMDAsIDB4NWYyMDE3ZTcsIDB4Yjg0NzgwNjQsIDB4YmRmYzAwNmUsIDB4MDhiN2ZlNGUsIDB4N2JjZDljMzksCi0JMHhmNzkwMDVmMiwgMHgwNTkzZWQwMSwgMHhmZTZmNjY1NywgMHhlZWZiMDk1ZSwgMHgwNGZlMmNiMSwgMHgwN2VjYWFlOCwKLQkweGIyZjZmZDg3LCAweDUzNGZlMGM5LCAweDYxOGQ2ZmVhLCAweGFmMmFmYzdhLCAweGM0NWMwMGI3LCAweDQyMmYzZTc0LAotCTB4ZmJhNjEzYmYsIDB4YTkyOWUwZGIsIDB4OWI3MmU1ZjEsIDB4Y2Y5YWE1YzksIDB4NTJmMDgyN2MsIDB4Yzc5YzY0M2EsCi0JMHgzY2RlYzNhMCwgMHg2MmQ5Zjc0OCwgMHg0ZjJiZGZiMSwgMHg2NTZlMzEwNSwgMHg3MGMxMWQ2MCwgMHgwN2VkMjE5ZSwKLQkweDUyMWE3ZWQwLCAweDFkMDAyZWQ3LCAweDBiNzllZjM3LCAweDdkYjgzYmM3LCAweDVjYjk0YjI3LCAweDgwZjZlMjZkLAotCTB4MzY3ZGFlMzIsIDB4ZTNlZTVlYjYsIDB4ZTcwZGQxZTcsIDB4N2FmOTdhZDgsIDB4OTJlMzE3OGMsIDB4ZTQzNDc5OTQsCi0JMHgyOGVhOTM3OSwgMHg2ZjEwOTVmYywgMHg3OGVmYjYzMywgMHg0MjYzYjc5YiwgMHgwMTZmMzZmMSwgMHg3N2E3NmFiZCwKLQkweGQzZGUwNmVjLCAweGY3MTIwZGZiLCAweDI0N2E0NTFlLCAweGYxZGI2NDJlLCAweDA4MTc3Yjk1LCAweGNlNTYyN2EwLAotCTB4NTAzN2VjOGMsIDB4ZWU0YWM1ZjQsIDB4YjVjNTU1NzcsIDB4NWFhMzE3YmMsIDB4YzY5NmE3MmYsIDB4ZmE1NGQzNTksCi0JMHg0Y2Y3Njk0OCwgMHgzMzY1YWUzOCwgMHg1Mzc5NmI4ZiwgMHg1MmQ0NmVkMywgMHgwY2QzZjAwYiwgMHg4YzEwZTc5YiwKLQkweDNmN2JmOTViLCAweGQxZGZmOWViLCAweDBhYjFmNjUxLCAweDBjOWQ1MmJlLCAweGRjYzdhZjVmLCAweDhkY2UwZmI4LAotCTB4Y2E0ZTRmMDAsIDB4OTEyZGViYzcsIDB4OWMxM2MzZTMsIDB4MzA2ZjZlMDYsIDB4OGNlZDIxN2UsIDB4NmExZTYwNWYsCi0JMHhiNzAyZWJiYiwgMHg3OGYyYWUzYiwgMHg0ZjhjOGMwYiwgMHhjOTNlNDUzZSwgMHhkZjAxYjdmNSwgMHhkYjkyMmY4ZSwKLQkweDEwODdmZjgwLCAweDhjNDUyN2NlLCAweDFlZmNmNDRmLCAweDdjZTM4Y2VkLCAweGVmMDA0ZGQyLCAweGIxYmRlMTYzLAotCTB4M2ZmMWZhMDgsIDB4MDY3Y2Q4NjMsIDB4ZmYyM2U3YjQsIDB4MGFmODc5NTAsIDB4M2E5NDliZDcsIDB4NDkyM2MyNTEsCi0JMHhjMzhjNTRlNywgMHg3ZTk5NTU4NCwgMHg2OWViOTMxZiwgMHg3YTczN2UwMywgMHhkMzllNTA0YSwgMHgwNzY2NGVhZCwKLQkweGEwZmUzMmE1LCAweDQyNjcwNWVkLCAweDJmZmU5ZTU4LCAweDRmODQyY2U3LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4YjNkYWU4YjksIDB4NjQ5MzI2NjcsIDB4NmYyNjRjOTIsCi0JMHg4MDg0OWFmMiwgMHgzYzg3MDEwOCwgMHg0ZTNkMjg3OCwgMHgwZjc4NjAxZSwgMHgwMjQ4MzUwOCwgMHg0ODA0MmJjMywKLQkweGQyZDA0MTMyLCAweDIwMTk2ZjFlLCAweDgzNTQ4MDg2LCAweGE5NmExZWE1LCAweDVhZjExZTBlLCAweGQ1MjgzNjhhLAotCTB4ZjA5ZDgzNjAsIDB4NDFkMDU4MmEsIDB4Mzk2YjQyZDEsIDB4MGE4YTIzNDEsIDB4ZjQxZWEwMDksIDB4ZmZmZGUzZDAsCi0JMHhjY2NkYWQ3ZiwgMHgyMjg4OTlkZSwgMHhiOWVlZmJmNiwgMHg2MmVjZmQzNywgMHhkYWY2YmRlZCwgMHg4ZmRmZmFmZiwKLQkweGZiMGNkN2I1LCAweDMzZDZjNjBmLCAweDJhMWQ3NmM2LCAweDhjYjk2Yzk2LCAweDc5NGJmYmM1LCAweGM1YTM5OGNiLAotCTB4OGNmM2Q4Y2MsIDB4ZmY0MGI1OTUsIDB4OWRiYmZjMmIsIDB4NzQ2M2NmYjEsIDB4MTYzMDI1OGMsIDB4MmIxODkxNmIsCi0JMHhhNDZmYWM2NCwgMHg1OThkZmE4NSwgMHgxODdhZTRhZSwgMHgxNWQyMzZiZiwgMHg3OWMwNDk2ZCwgMHgyNjA5MGU3NCwKLQkweGVjYzI3ZTE5LCAweGY4NzQzMDY1LCAweDk5OTk3YWYyLCAweGM0YmY1ZTcxLCAweGQ1YWNjNjY0LCAweGJjMjMyMjk2LAotCTB4MmVjNmI1MzcsIDB4N2VmZTYwYjksIDB4MGI3OGNlOTEsIDB4MGIxNzAzY2QsIDB4NzlkMjJkYTAsIDB4MmQ3M2MwZDcsCi0JMHg2NmEzOGVkMSwgMHg2NzkyY2Y3OCwgMHgyNjlkMmRjMiwgMHhjMTVmN2Y0NiwgMHhiMTJkYjU3ZiwgMHgzNWJiYmVhYSwKLQkweDIwMzlkMmM1LCAweGZmODI1ZmQwLCAweDBlZmY4MTQ4LCAweGM2MWIxMzMxLCAweGM1YmYwZDU4LCAweDJjYWVjODk2LAotCTB4NmI1N2NjMGIsIDB4MGU2ODc4ZWEsIDB4ZjM3ZWViZjQsIDB4OTJjMTkxYjksIDB4ODA1ZWI4NmMsIDB4Nzk0M2Y5ZTMsCi0JMHg4MWNkNzM5MSwgMHhkNjJhZGVmNSwgMHg1NWMzOWI3OSwgMHhjZmYxODdhMiwgMHhjNjZlYjk0NiwgMHhmMDhlNDdlNywKLQkweGExZTE5M2VlLCAweDdkOWU2NWUxLCAweGE0MGI2ODdhLCAweGIwNTE3ZGZhLCAweGQ5OTYzNjVlLCAweGFlM2Y0MWI3LAotCTB4NDM0N2I1ODMsIDB4ODc0NGY2MzcsIDB4NDdmYTFhMjMsIDB4YTc4NGIxY2QsIDB4YjQ3NDNmNWIsIDB4NjJmYWMyZTcsCi0JMHhlN2MyNGM5YywgMHgzOGY5NWYwMSwgMHhlNTc3OGIxZiwgMHhkZTIzMDczYiwgMHhlMDBjY2I5NiwgMHg2MWU5MDE3OCwKLQkweDhlM2QzNmJlLCAweGRmMDQ3NTlhLCAweDUzODczMzUxLCAweDQ4ODRjM2ExLCAweDVkMGIyOGM3LCAweDRmNWVmNDY3LAotCTB4ZDc4MDFiMzEsIDB4OTVkMDRjMzcsIDB4NTc5ZTgzNzksIDB4NGNjNWE3NWEsIDB4Y2YxYmFlZTMsIDB4MzA3ZDMwOWYsCi0JMHg3ZmRiNTk5ZSwgMHhlODEzZjhiZCwgMHgzMmRmZjFiYiwgMHhmMDI5ZGRlMSwgMHhkNjE3ZGQxZSwgMHhlZjA5ZjNmZCwKLQkweDk1ZTBiYTI2LCAweDYxZjc1MzNhLCAweGRiNTFmMDA5LCAweDU4NjRkYjI2LCAweDk2NjRhMGMyLCAweGQ4YzcxOWRiLAotCTB4MGVhZGZiOWEsIDB4NWEyNzgzZTQsIDB4OGMxODdiMjQsIDB4YjM2NjBlNjcsIDB4MjU2NDMyMjQsIDB4ZGZmOWQ2MjIsCi0JMHhiNzYxMGNjNywgMHhhYzE3MGI0MCwgMHg2MjkzY2UzMCwgMHhkZTQzNmVmNCwgMHg0MzMzN2ZkOSwgMHgwMmIxZGMzOCwKLQkweGMzZTgwNjhlLCAweDA1MTY1ZDczLCAweDBkZjUwNzMwLCAweDQ1OWZlYWVjLCAweGY4NjFmMTgyLCAweDZhNGI5ODJmLAotCTB4ODA5NzZmNjksIDB4MzA0NjZiNzAsIDB4ZGVlMDAxOTcsIDB4M2YxMzI2ZDcsIDB4ZTExOGQxM2UsIDB4N2ZmOTgzMGQsCi0JMHhlMWUyZTNiYiwgMHhiOWNmZDA5OSwgMHg4MmNiODc1ZiwgMHgzMzk2MDliZiwgMHg0M2E4Zjg5MSwgMHgzOTVhMGFmYSwKLQkweDBmNDAzNGRhLCAweDg0NzJlZGY3LCAweDJkZjE4NjVkLCAweDU4NDNkMTExLCAweGZiNDU2MzBjLCAweDlhZDlmOTg4LAotCTB4YmMwZjMwN2UsIDB4MDQ3YjRkNjcsIDB4M2Y0ZDZmYWQsIDB4ZTIyYzhmOTAsIDB4ZmY5MTdiODMsIDB4NTkxOTQ3ZjcsCi0JMHgwNGJmNWMwYSwgMHg4NmUzODM3MiwgMHg0NjM3OGViMywgMHg3NGU4MDU2NSwgMHg1OWQzZjVhOSwgMHhlZWZkNjE3YiwKLQkweGQ3NmYzZTQ4LCAweDkxZmQyYmRlLCAweGUzZmI5NTdmLCAweDk3YjVjYzU2LCAweDJjNTYzM2U2LCAweGYzOGE3ZWJiLAotCTB4MWQ1ZmQ3MjksIDB4ZTIzNDVlZjAsIDB4ODIzNGIxOWIsIDB4MDcyN2U4OTcsIDB4Mzc4YWJiZTAsIDB4MWNhZmM3MGIsCi0JMHg3NDc1YTdhNSwgMHhhZTNiMDhiMSwgMHg2MGU4YzViYiwgMHgyOWNmMjc0OCwgMHg1ZTBhZGZjZSwgMHg3NDZmMDRlYiwKLQkweDcwOWUxNWI1LCAweDM4OWVmYWMxLCAweGU3Yzc2NjkxLCAweDg1MmY1YWJiLCAweGIzN2RlMGViLCAweDIzMGY1YzYzLAotCTB4ZWVmNGU1ZGQsIDB4ZTIyZTY3NjgsIDB4MWRjZGQyZjMsIDB4ZTc1ZWI4YjksIDB4ZDJlZjg0NDYsIDB4YWVhY2Y3OTEsCi0JMHhkZjVhZWJkYywgMHg3ZDY0ZGY2MywgMHg0OWI5YmQ2ZSwgMHgzZmM5ZTk4YSwgMHhkYTkwM2U1YSwgMHg4NjkwYmZkYSwKLQkweGQ0MzA5YzkwLCAweGU2MGM5ZTViLCAweDZlZWIwMzVkLCAweDQ5YjQzYzFjLCAweDYzNGY0MjQ2LCAweGM2NGY5NDM2LAotCTB4MDY2NzJjMmEsIDB4MzEzZGU4MDUsIDB4MTJkZGI5YzYsIDB4MTg4ZTVmMjQsIDB4MmY1YzBlZTcsIDB4OGYzNTI3YmUsCi0JMHhkZTFjZjlkNiwgMHg1ZTc0NzIxZiwgMHg1ZDc3NDFiZSwgMHhmNDI5N2NlYiwgMHhhZjQ0N2QzYSwgMHg1YTllYjE1YSwKLQkweDAzMjdkOTkzLCAweGUxOTc2Y2ZjLCAweDNlNDUwZTkzLCAweDBiYzI3YmIzLCAweGYwOGJkOGY0LCAweDI3ZWQ4YTc5LAotCTB4YmZjZjQ4NWMsIDB4MTA2YmVkOWEsIDB4YzViZjdhMWYsIDB4ZWZmMDQ1MTksIDB4MTFiMWY3YzcsIDB4YmQ3MTkyNzMsCi0JMHhmZjFkMjM2YiwgMHhmNmZlODY2NSwgMHg4M2YzOGM1NSwgMHgxMjdmNjExNCwgMHhiZjczYjcxNiwgMHhlNGY1MDIzNSwKLQkweDlmZDcxOGM0LCAweGJhODFiZTcxLCAweGQwOWNiMzhiLCAweDc1M2JmMDJmLCAweDc4MWRiOTczLCAweDkyZmJhYzRkLAotCTB4OTdhOGUwOWUsIDB4NThlYmZlNzEsIDB4YWY0MjVmZmYsIDB4ZmUxZDA3YmYsIDB4MDUwNzRjMTYsIDB4N2QwNGEzM2YsCi0JMHg1MDdlMjE0NywgMHgzZmViNzcyMSwgMHhmMDA1MzBlOSwgMHg0ZjUyODEyMywgMHg4ZjljZjZiNSwgMHg4NDBjOGViMSwKLQkweDA3Zjc3ZGI3LCAweGJlNjAzYmZkLCAweDk4M2U1N2JhLCAweGY3NWJmMjg1LCAweGI3MTExODcyLCAweDYzOWJlNWY0LAotCTB4MTdjZjhmOTAsIDB4NzMxNmYyYjEsIDB4YzlmYTdkNGYsIDB4M2ViYjdhY2EsIDB4NGI0ZWIxODcsIDB4MWFkNWU5MzYsCi0JMHhiZWIyMzdlNiwgMHhkYTk3NGZhOCwgMHgxNGZhNDFmNSwgMHg0N2ZiYTYyMCwgMHgzODA5ZmUwYywgMHg5OTQyOTFmZiwKLQkweGJiYmUwMmFkLCAweGM0OWUxZjY0LCAweGE1NjllODQyLCAweGIzMjU2ZDdkLCAweDdmZDgwN2NmLCAweGYwMGU3YThlLAotCTB4NDE3NzY0M2YsIDB4Y2RhNWUxMGMsIDB4M2I1OGZhNGEsIDB4NmFjYWM4ZmUsIDB4ZWY0ZTY5N2IsIDB4MWExOTFkZjMsCi0JMHhiYjQ1ZWU1ZSwgMHhiMDY3MzEyMSwgMHhlNTg4NDk3ZCwgMHhiNDU3MjU3NiwgMHgwODFkMjhhMCwgMHhhMzE3YjllNywKLQkweDc0YjgxZWJjLCAweDY4YWRlZjJlLCAweGI3M2E3ODA2LCAweDBmN2NjZGViLCAweGU2MzljYmYwLCAweDk0MDdmNjVmLAotCTB4NmNjZDRmOWYsIDB4YTFjNzZhMWIsIDB4OGFhZmU1NmYsIDB4MGZkYmM4MGEsIDB4ZmZiNWYwNDYsIDB4ZDFhM2E1ZTAsCi0JMHg2MTNmMTgzNiwgMHg0Zjc4YmVlNywgMHhjMDdlZmUxMCwgMHhlNTVlOWZmNCwgMHgyZjdjMmNkZiwgMHg3ZDMwZmMyMywKLQkweDA3YTQ3ZjQ3LCAweDQ0ZDljM2ZiLCAweDc2MTNiNDFiLCAweDdjZTc4ODFmLCAweDNhNDNhODkwLCAweGViN2ExNzJmLAotCTB4NjQ2OTc4NzcsIDB4MmIwOWJlNjAsIDB4OTQ4Zjg4ZWEsIDB4MTM2NWVkN2UsIDB4ZjUwNWM2ZjMsIDB4OWEyMzdlZjUsCi0JMHg2NmNiZGFiZSwgMHg1ZjcxODVlNiwgMHg0OWUyYTI1OCwgMHg3ZDYxZjQ3ZiwgMHg1MzdjN2Y1MCwgMHgyYmFmNjliYywKLQkweGY0MzIzYjc4LCAweGVmZGEwNjZjLCAweGY5YTFlMWYzLCAweDc3MTg4NDY0LCAweDA5MzIzZWM5LCAweDQ2MDlhM2ZkLAotCTB4YzQyNThlNWYsIDB4MzRiY2M2MzgsIDB4NTdhZWJiNGUsIDB4YTVlY2JhNTcsIDB4MWJlMWRlZmEsIDB4OTZhZTY0NmYsCi0JMHhmNDM0N2MxMCwgMHg5OWMzN2JlYSwgMHhkOTdhZTQwNywgMHhhMWQ5MDM1NiwgMHgzMmZlNTdhMywgMHhmN2U4MWYyZCwKLQkweDY1ODMxNmMxLCAweGZhYjNlMDM1LCAweDdlZDJmYmQ3LCAweDg3YWJmNzBlLCAweGU4MjQ1OTg2LCAweGU1ZjM2MDdmLAotCTB4ZmMyZjFmMjAsIDB4NzVjNGVjYjUsIDB4NTk2NWIwN2YsIDB4M2Y2ODNjZTIsIDB4MDFhYzdlMDYsIDB4MzU2ZTE2MzgsCi0JMHhhZGVhZjVkMCwgMHhiM2Y1ZDJmNywgMHhmZTE3NGY4MiwgMHhlYTEwNjEzYSwgMHhkN2ZiYTNmOSwgMHhhYjNhZTIyNywKLQkweDg3ZjZiMWZmLCAweDFhNzYyZmE4LCAweDQyODY4MzJkLCAweGIyNDNiMzViLCAweGM1YzkwNjk3LCAweDU1YzJhN2UyLAotCTB4NTYzYTlkZmQsIDB4ZDY1MGViOGQsIDB4ZDVkNzI0Y2QsIDB4YTc4MDM2ZmIsIDB4ZGRmNzU2MmEsIDB4NmFmZDk3ZmMsCi0JMHg5NWZjMDVmZiwgMHhmMjA0ZDhhYSwgMHgwOWRkMjY1NywgMHhiYzJiYWVlYiwgMHhiZWUyN2U0NCwgMHhjNzY0MTE4MywKLQkweGM5OTY2OGZmLCAweGZkMGRmMDFmLCAweDAyZGYzZmNmLCAweGU4N2Y5MmZkLCAweDA4NDNlNGVkLCAweGY0MmQxZjNlLAotCTB4YTRjOTYzMzIsIDB4YmM0Y2FhODcsIDB4NGY1YmIyNWYsIDB4OTQ0OTQ0ZmUsIDB4ZjE4NmY4NGMsIDB4ZmY3MGQxZTYsCi0JMHgxZjc4YzQ1ZiwgMHgzN2U0MGRlOCwgMHgzNGRhOGYyNiwgMHg4ZThkYzYxMiwgMHgxM2Y0MzAzMSwgMHg3OGI3YzVmZiwKLQkweDdlZmQwMzAyLCAweGJiZmQ2NWZiLCAweDI5ZWI0MTFkLCAweGQwMDNjZDY2LCAweDA2NjIyOTExLCAweDFlODc3NWNkLAotCTB4ZDQ5ODk3YWYsIDB4OGNlNzQ3ZDcsIDB4NmU3NjhiM2IsIDB4NWQ3ZDQ1YjQsIDB4NTg4NjliOTEsIDB4MDE0MWZmZTAsCi0JMHhmMDc3ZGZmZSwgMHhjM2M2NDdhMywgMHhjODhlYWFmYSwgMHg4NmJiMGZkYywgMHhlMTBkNzk3ZSwgMHg1ZjlkMjNkNywKLQkweGNmMDFkOGFkLCAweDM5NTgxNTFkLCAweDg2ODNlNTdhLCAweDExYWJlNDE0LCAweGZkMGQ1YjEyLCAweDk1ODRhZTBmLAotCTB4MGI4NzkyODUsIDB4YmNhMzZmZTgsIDB4ODBlZmEwMzMsIDB4ZGEyNzdkMDAsIDB4YTNlZDVkMTcsIDB4YjExZTRjMzgsCi0JMHhlMTFmNmFmNCwgMHhlZTdhZTZmZiwgMHgxMWQxZTVlYiwgMHg2YmY3YTQ2YiwgMHg2ZTU2YTBmNSwgMHgzODNkMmZiZSwKLQkweDBjODFlODYxLCAweDRmYjUxNDRmLCAweDRlYzlmYjYzLCAweDdhYjQ1ZmFlLCAweDE0ZjdhYjUxLCAweGQ2ZjBiNGI4LAotCTB4ZjRhOWQ2NWUsIDB4MWI1OGQwZGQsIDB4M2RlODBiOGQsIDB4MWJiZGU5MjMsIDB4OGQxZDVmMTgsIDB4ODE1ZjExMGQsCi0JMHg3OTdjMjY1ZCwgMHhhZTI5ZTk4NiwgMHgwZGUxYmYwMywgMHhiNjZiOTcxYywgMHg0ODAxMTVjNSwgMHg0OGVjOTYwZCwKLQkweGNjMzNlN2Q0LCAweGVlNTBiN2FlLCAweGIwM2I3ZjMyLCAweDFlYmQ4MTk0LCAweDg3NTlhM2I0LCAweGUyNGJhMzdhLAotCTB4MTA2ZWRhZjQsIDB4MDM3M2Y2MmQsIDB4NjIzYmNmZjEsIDB4YmNiMWVkZmQsIDB4YzUwZmYxMGYsIDB4OGEyYmQ5OGQsCi0JMHhmZWIwN2JkOSwgMHg4NGYzMTMzMCwgMHhmN2JkOTFlNywgMHhmMzAyZjIxOCwgMHhhMmUzMWNiZiwgMHg4YzQ1OGQ3MSwKLQkweGRjYjE5ZGM3LCAweDYwMWVjYmVmLCAweDdlNjA1OWQzLCAweDg3NTkyMDM2LCAweDcwMjY1YWY0LCAweDI1YTU3NmIxLAotCTB4N2JmODEzYjcsIDB4NmE2NGNhZGQsIDB4ZTdjNDVmZDEsIDB4NjgyMzdiM2MsIDB4Y2U0YmVmNWQsIDB4NmI3NzI4MjEsCi0JMHg3YTVhN2MwNSwgMHhmZTE1NWI2NCwgMHhmNjBmZjY3NiwgMHg4NzE0MTY4NywgMHg1NmQxZDNkNiwgMHhlOGE3YWQzZCwKLQkweGU4MTkxOWQxLCAweDdlZGZiYzZmLCAweGNmZWEwNjc3LCAweDNmNWUwMWY3LCAweDNkYmQzZmRhLCAweDg0ZmNlYmU2LAotCTB4M2UzYzg1ODcsIDB4OGM0NGVjMjgsIDB4MjY3ZjIzODgsIDB4YzdkODA0ZTQsIDB4YjVmZDEzYjEsIDB4YmZiYTRlOTUsCi0JMHhiNTM5NjU2ZSwgMHhhMGFlNTcxYiwgMHg1OWIxZGRmYiwgMHg5MWU4ZmVmNCwgMHg4MWIzZmJjZiwgMHg2NDFiOWQ3ZSwKLQkweDhjMGIwM2IyLCAweGYwYjFmZWNlLCAweDhlOTM0ZWRlLCAweGVhZjdkMWUyLCAweGNjYmI2NWNkLCAweDVjNTE5ZDc4LAotCTB4ZjFkMWUwYjMsIDB4MTQyZTUwZGIsIDB4ZjU2M2JhMzgsIDB4ZDZkZWVlYjQsIDB4M2ViZDZkOTksIDB4M2FjYjVkZmQsCi0JMHg1ZDFlZDFhMiwgMHgwMDc3YzdlNSwgMHg3ZTAxODkzYiwgMHgzMmJiMjE5YywgMHhjNzE4MDlhZCwgMHgzOGUyMjQ3NCwKLQkweGJmZWZlNGI3LCAweGVlODA4MjgzLCAweDk1NmZmNDBjLCAweGVjY2FmZmY3LCAweDYyMTZiNmM4LCAweGExMDZjMzljLAotCTB4NzA0NGI0NWMsIDB4NzM4NWEzN2IsIDB4ZDlmMzk1YTAsIDB4YzEzNjk1ZGEsIDB4ZmRhODAzMDcsIDB4ZWY2MWY4NTgsCi0JMHhhMTBhOWRhMywgMHhjZjExNmU1NywgMHg2ZTNiMzYxZCwgMHg2NjMwZjdjMSwgMHhkNjkzN2YyNiwgMHhkYTNiZmE4MSwKLQkweDQyNzA4NzkxLCAweGY3ODA1MGJjLCAweGNiZDUyNTg3LCAweGRiZjkwOTA2LCAweGY4MGRmNWMyLCAweDc3MWZkY2E1LAotCTB4MmM3MWM0OGUsIDB4MDQ0ZDIxZGUsIDB4ZjkxMzBjN2EsIDB4MDVmMmRlOWIsIDB4YjRkZTM4NWEsIDB4ZTZkMGY5NzIsCi0JMHhjOTU2OTQxMSwgMHhmOTVhOTQyMywgMHg2YjE2ZmU3YSwgMHg2Yzc3ZTU1MSwgMHgyYTExY2MyZCwgMHhjYWQ1YjA3ZiwKLQkweGMzYjI2NmY1LCAweDdhZGE0NzIxLCAweGQ3MDJiYjk3LCAweGYzMTkxZWJiLCAweGRlY2NlNTI0LCAweDUxYTQ5YTBmLAotCTB4M2Y5OGVkMmQsIDB4YWVmNTI5NDksIDB4NjM0YWZjYzIsIDB4M2QwZTU2YWMsIDB4Yzk1Nzk4ZTEsIDB4M2QxMmU5NzYsCi0JMHhlZmQxMmUzMCwgMHgxYzAyMzIyYSwgMHhlOTEyNjI1YiwgMHg3ZWFjNDk3ZCwgMHhjMGFiZDIxNSwgMHgxNzQ1YTNhNSwKLQkweDRhZjA4ZmVjLCAweDQzMDc5MDRhLCAweDA0N2U4NWYyLCAweDc5NDcwZDA5LCAweDlhZTUxZjFiLCAweDVmOWRmODQzLAotCTB4YzM2OGM2YmYsIDB4NDY0NzkzZmMsIDB4MDI1NjcyZmQsIDB4MzhmZTAxM2UsIDB4YTQyMjIwN2IsIDB4MjI4Zjc3M2YsCi0JMHgxZjcxNTJiNywgMHg0ZjA1ZTkzNCwgMHgwNTBmMDgxOSwgMHgxNjYyZmQ0ZiwgMHhkNGYwNWJjMiwgMHgyODI5N2ExZCwKLQkweDZhYzg3ZjRlLCAweDNkOWRmYzIwLCAweGUyOTMzOGIwLCAweGFjNjE5M2U2LCAweDc5Y2Y1NjVmLCAweDU0NWYwNTFiLAotCTB4NjBiZjdjMDksIDB4YWI3N2NkMGMsIDB4NWJhZmZiYzUsIDB4N2Y4Mjc3NGYsIDB4ZDNkMmE4OTMsIDB4ODEwOWFkYWIsCi0JMHhlZDVkNGM3YywgMHhiM2QzZDI0NSwgMHhmYzNlZGNhYywgMHhiMDcyZGY0YSwgMHg1N2YzZTAwZiwgMHhmMTFkOTlmMywKLQkweGFkOTlmOGJlLCAweGMxN2JhNzk0LCAweDA3NzYzMmQ4LCAweGM3NGVhN2FlLCAweGZmYjAwZjMwLCAweGZiMDdjYmUwLAotCTB4ZGYzODdmYTAsIDB4ODNmZDE0MzYsIDB4ZDkxZmNmYWIsIDB4N2ZkNzg4ZGUsIDB4MjI4NmNkNTUsIDB4MWJiYzUzZmUsCi0JMHg3YzA3Y2MyNSwgMHhmODRjZGUxZSwgMHgxODViN2NmYSwgMHg1YTRiMDU1YiwgMHhlYzY1YWM3NCwgMHhiOWJmYTA0ZiwKLQkweGFmNTBjNzQ2LCAweDZmMGRkNzY4LCAweGIxOTJlODMyLCAweDIzNzQxOWY1LCAweGZmNTFmZDM4LCAweGM2MDc3NDI5LAotCTB4MTQzZDIyMzIsIDB4NTBmZTIxYmEsIDB4ZjZkZmVkOWYsIDB4YzBhZmMxMTIsIDB4NDZjNjI1YjUsIDB4Y2NmYzViZjgsCi0JMHgyN2M4YjFjZSwgMHgxMmFjNmE3ZCwgMHhiODE0NjdlNiwgMHhiODlkYWJiZSwgMHhmN2YzZjY4MSwgMHgzZjY2NmZkNiwKLQkweDY5ZmE0NjVmLCAweDZlZDZhN2VkLCAweGY2M2IzMGNlLCAweDg2YmJmZTkwLCAweGY4MjMxY2ZkLCAweDBmNDIzN2YwLAotCTB4NDFlZDk4ZGIsIDB4MjNiMjUzY2MsIDB4NjhmN2NhM2EsIDB4ZjgyYTUyZTksIDB4N2EyZjI4MzEsIDB4NzkxZDdhYzQsCi0JMHgyYjU2NjFkMSwgMHgxNzliNTdiZCwgMHg3YWU0NmVkZCwgMHg2NmNhZDliNCwgMHg4N2U1MDk0ZiwgMHg5Yjc1NzgwOSwKLQkweDE3Njg4ZGJhLCAweDkwYTRkYmUzLCAweDk5YThlOTdhLCAweDliZDAyNWViLCAweDlmNzI0MWZmLCAweDg2YWY1YTFhLAotCTB4YzQxOWVmYzAsIDB4N2MzYmNkZGIsIDB4NWU1NDcxN2IsIDB4YmEyNDRlNmMsIDB4MGZjZjgwNWQsIDB4NzgxNGY4NTQsCi0JMHhlMGFhZjA1NCwgMHg4OGE2MzFiMywgMHhmMGJiNjVmOCwgMHg3MGM0YjczMywgMHg5OTcwMjk3YywgMHg4ZTcxOTRlMywKLQkweDdhNWYzODBiLCAweDBiZmFmYTJmLCAweGZmODA2NzgxLCAweGJmMWZjMjMyLCAweGVhZjJhOTljLCAweGJlM2QzZTRhLAotCTB4MGIxOTIzZGUsIDB4Y2EzMDJjZDAsIDB4YjljNjY1YmYsIDB4NWM2MDE5NTYsIDB4N2Y2NjQ4ZjcsIDB4MTUzMWZhMTIsCi0JMHg3N2Q0MjI5NiwgMHgzYjdiNmFkNiwgMHhjZjFiZGRlNiwgMHhlMzY2YmNmMSwgMHg0ZDVkZTY1MiwgMHg3ZmZlMzBmMywKLQkweGEzY2E2Y2FlLCAweGU2OWRkZTIyLCAweDU5NDE3NjllLCAweDUzMmJkODFmLCAweDE1YzEyMTVjLCAweGY2MzVmNzExLAotCTB4NDVjYTA2ZWEsIDB4OTMzN2RjNzIsIDB4MTBiOGY0OGIsIDB4NzMxYjdiNzQsIDB4YzcyMTA5ODAsIDB4NDM3OWM1ZjcsCi0JMHhhZjA3MzlkMCwgMHhiN2NlOGI1ZiwgMHhlNWU1Nzg4OSwgMHhjZDQ3Mjk5OCwgMHgwY2I1NmZjMiwgMHg0YjVkZDAwOSwKLQkweGRmOTFiZWNmLCAweGM0Zjc4ZjUxLCAweDA5NzE2ZGNiLCAweDYxYjJmMTNkLCAweDFlODA2ZTgyLCAweGVjMjJjOWQ3LAotCTB4YTRjZWVjYTEsIDB4ZGYzZGVmYjgsIDB4NDQyZTI5M2YsIDB4NTRmZTFmYmUsIDB4YWIxM2Y0ZmUsIDB4ODRkZmFmZWQsCi0JMHg1MzI2YmU3MCwgMHg0ZmM0ZjQ5YywgMHgyNzk4OGMzYiwgMHgwYWQyZjI1NiwgMHg4MTJmZWViYywgMHg3NzNmNDBhMywKLQkweDU2YTNhOTdkLCAweDI2ZDc1ZWI5LCAweDU1ZGM2M2U1LCAweGY5MGFlZmI0LCAweDVmZWQ1ZGM3LCAweGE1ZGM3ZjkyLAotCTB4Zjc5NThmZjEsIDB4ODllYzAzZGUsIDB4MzY1YTMxZjIsIDB4ZGM1ZmZmMTMsIDB4OTk3OGUzYzIsIDB4MTQ2ZGZlZDksCi0JMHg2NDNlZTFjMCwgMHhmMTFiNWU2MCwgMHhiNDBmZjkyZiwgMHhjNDVmZTg1ZSwgMHg2MzNmYzcxNiwgMHhlMTZmNzhhNCwKLQkweGY5ODYxN2UxLCAweDA4Y2M1MmUwLCAweGUxMDViMzFkLCAweGMxMTFkNjJiLCAweDhhZjg0MTZjLCAweGZhYWFiMzJiLAotCTB4YWEzZWNlMDksIDB4ZDllNTQ5ZjEsIDB4YWUyOWZiYWEsIDB4YTlmYmFhODEsIDB4N2VhYTc5ZDUsIDB4YWFhZGZkN2EsCi0JMHhiNzYwOTlmMSwgMHg5ZTU5ZmI4MiwgMHg3ZGYxYWE3MSwgMHhmYWFhYTY5YiwgMHg1NmVmOWFmZCwgMHg4NzFlNjc4ZCwKLQkweDM5ZDYwNzNmLCAweGE2ZjNhYzVmLCAweGUzNTU3M2NkLCAweDYxZjI0Zjk5LCAweDIwODE2NDdkLCAweGM3ZGJjN2YzLAotCTB4YzhmYWMyMWMsIDB4Yjg4ZjkxN2MsIDB4MzU1OGJiZDksIDB4NzU2NjgyZGYsIDB4MDhmMDgxNWUsIDB4OTU2YWFiNzgsCi0JMHhiNzg4NjNkOCwgMHhkNWZiZWFjZCwgMHg1MzFiMWI2ZCwgMHg1NWU0NWRhMSwgMHg3NThjNWY1ZiwgMHg1M2Y5MDkwZiwKLQkweDNhZjdmZDdkLCAweGUzZjQzMmU3LCAweGNlYTcxOTdmLCAweGJlOTM1ZGQzLCAweDQ1YWU5YjllLCAweGM3MGZiYjVmLAotCTB4N2YyMjg4ZWYsIDB4NzllMWUxNjcsIDB4Yzk2MTQ3MjQsIDB4ZGI4NmZhNmEsIDB4N2YxNmJlMjIsIDB4OWFhYzAzOTEsCi0JMHhhZmJmZjBmYiwgMHg1ZDk0NWZjMSwgMHhmYzVhMGZjZCwgMHhjMWY3NTllOSwgMHhjZWFiODA1NCwgMHhhYzdkZDkyYiwKLQkweGI1MTZmZTI3LCAweGI1MzgyNTZlLCAweGVkZTJkM2Y4LCAweGJjZWE3MThmLCAweGQ3NDhkYWNlLCAweDk3MWJkNDVlLAotCTB4MGNjYjk3NWEsIDB4YmM2NWYzZjMsIDB4ZjVhOTc4ZmUsIDB4NmM0NzIxZDMsIDB4N2VmOTc5NDEsIDB4NWZlNWU2YmQsCi0JMHg5NzkxMGI4ZCwgMHhjYjdhYzJlZiwgMHhkNDFiZWMyZCwgMHg4MTdkZjY1YiwgMHg4YjAzMDg3OCwgMHhiMjdhMDA2MywKLQkweGQ1ZDM3NjExLCAweDIwNzg0YWZhLCAweDViZDVhZjBmLCAweGZiN2EwYjRhLCAweGNmYTQ3MTZmLCAweDM1YTk3NTAzLAotCTB4OThiMGY0ZjAsIDB4YWYwODlkYjcsIDB4ZWYxOGI3NTIsIDB4YjdiYzExNzIsIDB4ZTEyMzIwMjAsIDB4YTc1ZjMzM2YsCi0JMHhlMWUwMGYzMiwgMHg3YzY3OWMzZCwgMHhlMzEyMzU5MSwgMHhlZmZiOWRhNywgMHhiNTgwNzhhMSwgMHgwNzNkNzNjNSwKLQkweDFmMWUwZjI0LCAweGZlOTI5N2U0LCAweGE2N2ZjMTZjLCAweDQ4ZmMzZDkwLCAweDcwNGZjM2Q4LCAweDMyMWVjNTNlLAotCTB4NTdiZjk1OWYsIDB4ZTZkZWMzZDgsIDB4YmQxNmVhNTEsIDB4OTk1ZWQyYjUsIDB4NThkZDJmZWEsIDB4Y2ZhMTA5N2YsCi0JMHhkMWRmZjE4ZCwgMHgyM2QyN2NhZSwgMHgwZjhjNjlmZiwgMHhiZGVlMGY4ZSwgMHgzYWY1MTA3NCwgMHgxZTNjM2RlMCwKLQkweDA1MTUxOWQ2LCAweGQ4MGE1MmY2LCAweDhjOGI3ZmNiLCAweDNlZWI3OTI2LCAweDgyNmY3YjJjLCAweGI2NGQxNzBiLAotCTB4YTA2ZTZiMTgsIDB4Nzc4NWEyYmUsIDB4YWI5YWM5OTQsIDB4NmRlM2QyMGYsIDB4MzY1ZWRhOTIsIDB4MjNmZjcxZTYsCi0JMHgxZGZiOWUzMSwgMHgyZmRjY2M5MywgMHhlOWQ2MmMxZCwgMHhlZWViZjhkNiwgMHg4Mjk3MWUyNiwgMHgwNWI3NTQzNCwKLQkweGUzODM4MWY5LCAweDNiZmM2OGEzLCAweDcxODM0NTExLCAweDVjNDU1YjNkLCAweGQxMjU5OGRmLCAweDg5MjUxYWZiLAotCTB4MzEyZGZhZWMsIDB4OWRmZjc0YzUsIDB4NmM1Y2EyYjgsIDB4MGVmNzg5ZmIsIDB4ZGEwODlmNDYsIDB4OGYwZTZjZTYsCi0JMHg1MDEzZWM0ZCwgMHhjNzEwZmZlNiwgMHg0YzViNjIxNywgMHg4Yjc4ZTBlZCwgMHgwNjU4ZWZjOCwgMHg0NDhmYmQyMiwKLQkweGEzNWU2ODM4LCAweDI5ZmNhYjJjLCAweGU3OGJjZGE1LCAweDk5YTc0NDdlLCAweDJhOTM3ZTI5LCAweGU4NDYzYzdmLAotCTB4ODcxN2NjMzEsIDB4MjYzOTMwOTEsIDB4ZTQwYzRlOGMsIDB4ZWEzYzk5OGIsIDB4ZTQ1ZTMxYjgsIDB4ZGM3YTI1ODksCi0JMHg1ZGJjNzQ4MSwgMHhiY2I3YjFkMCwgMHg2NTgwNjNiMSwgMHg0NDM5YmMzZiwgMHgxYzk3ZDhkZSwgMHgxZjZjNmYzMiwKLQkweDc4NjM3OTQzLCAweGQyZWI4ZjUyLCAweDBlOTE4ZmU2LCAweDNjODBkNjkxLCAweGFhYmY4YzRjLCAweGRmNTBkMjZmLAotCTB4M2M3NTY2MzQsIDB4ZTNmOTFlMzIsIDB4MTI3ZjZjYTgsIDB4MTNjNzdmNDEsIDB4YjZlMDA0MzksIDB4N2M3Njc1ZDksCi0JMHhiNjE2ZTQ2NCwgMHgwYmZhMWMzYSwgMHgyZmNhMzYzZCwgMHg4YWZlMjAxOSwgMHhlZmM4MGJjYSwgMHg0ZTJjZjg5MiwKLQkweGQzM2UxM2ZmLCAweGZjM2ZiODEwLCAweGU2M2I2NzFkLCAweDYzNGZmYjkzLCAweGNkZmY1NDU2LCAweDFhMjRiOWFjLAotCTB4MmMyZDg4ZmQsIDB4MjU1MmJjNjQsIDB4ZDE3YzY2ZjgsIDB4M2NlNTE5NWUsIDB4MjVmODFiYTEsIDB4ZTJhYTNkMDQsCi0JMHhiZGJmOGE3NSwgMHhiYzM2ZTkwMCwgMHhmNTA5NzVkYiwgMHg0ODA3YTI4OSwgMHhiNDVjNjE5NSwgMHhiMjdlNDc1ZiwKLQkweGU4OTZmOWY2LCAweDA3YzQyNTkyLCAweDkyNzlkMGRlLCAweGUzODczMzRlLCAweDI5NzM4NDQyLCAweDU3NzgzZmNlLAotCTB4Y2RmNTExODcsIDB4Y2U2ZjQ1NDIsIDB4ZDAzZDMxZDcsIDB4YmY0MTRlZjcsIDB4YmFmMGI3M2IsIDB4ZDVmMmJiMzQsCi0JMHg1ZmUyYjI1NywgMHhhMTlmOWEzMSwgMHgyZDM4NTgzZSwgMHg4Nzc5OGJjYSwgMHgxZTU5NmQ4NSwgMHg1MTI5Y2I4MiwKLQkweDc2ZGRjNTVlLCAweDg1ZmQ4OWNjLCAweDhjMTYwNTA1LCAweDY1N2YxZDczLCAweGU0MDE5OWQyLCAweDc3YWUzMTlhLAotCTB4YTI4Y2VjZjQsIDB4YzY3ZWM4MDcsIDB4YWE2MjlkNTMsIDB4YjM0ZWFiZTAsIDB4ZmQwNGUwOGQsIDB4ZTgxMjIxYmMsCi0JMHhhYWNiNzBiMCwgMHhlMTJmYjhiZCwgMHg1NDY3N2ZhZCwgMHg3NzIxMzg4ZiwgMHhhNmM5YzMwZiwgMHhlNDU2NzIwMywKLQkweDE1NjdhYjYxLCAweGFmMzBmODc5LCAweGYzMTM0Yzc3LCAweGY3ODRiZTc4LCAweDlkZWYwMjlhLCAweGQ2OTg3NmRlLAotCTB4M2NjMGMyNzMsIDB4YWU5N2UwMjYsIDB4ZDBkOTc3M2QsIDB4MzA0YzZkNGYsIDB4NDU3Zjg5ZDksIDB4ZWM5NGViOWQsCi0JMHg4NzhjODA3YSwgMHg0MTBlYmJiZSwgMHg2OTE2ZDE5YiwgMHg1OGViMGY1OSwgMHhhZmRjNjQ2MywgMHgxMWQ4NDVkNSwKLQkweDFkY2QxM2ZmLCAweGY4OTdlMjdhLCAweGYxZTIzZDZlLCAweGY0Njc0MTBkLCAweDRmY2ZjOWVkLCAweDM5Mjc0NDYwLAotCTB4OTZlOWM3NTUsIDB4NDRmYmUzNjksIDB4YmZmOWQ0NzIsIDB4YzFkZDA0OTcsIDB4ZWJjMzRjNmIsIDB4NThkZjIzMTMsCi0JMHg3Y2NlMDM2ZSwgMHhjNzBmZDM3NiwgMHhkZWEyNDdlOSwgMHgxNjc5NjM3YiwgMHhkZDM2NWJmNCwgMHhmYzhmNGUzNSwKLQkweGE3YzZmYTlkLCAweGNmZWEyMDU5LCAweGY3ZTcyYTZmLCAweDY5ZjFiZDA3LCAweDZkNzdmNDM2LCAweGRmZWZjMTlhLAotCTB4NWVjZmJjNDYsIDB4MzhmNzc0ZGMsIDB4NzRiZmViY2MsIDB4ZjlmMDJmNTUsIDB4MTI0MjIwOTcsIDB4YzM5NWJmYWUsCi0JMHhlMmExZjU3NCwgMHg5MmJjNWYwYiwgMHg3YzA2NjY1ZiwgMHg0ZmVkYjM4ZiwgMHgzYWNlZDAyNywgMHhjM2I3ZmE5NSwKLQkweDIzN2ZhYWEwLCAweGRmODA5OGM3LCAweDYyYmUwYmM2LCAweDA3NjRkMWYxLCAweDhkZmEwOWM2LCAweDNmNjhmYmQ3LAotCTB4MjNlNGNlOGMsIDB4MWFjNGRlZmMsIDB4ODAzN2M4MmMsIDB4ZTU1ZjRkYWQsIDB4YzA3ZjdjZjcsIDB4NGJmOWE5YWUsCi0JMHgwMmI2MzA3MiwgMHgyY2Q5MmRlOCwgMHg1NjZiMjdjNCwgMHhkYTM4NTczMCwgMHg1ZGRkNDBmZCwgMHhjY2VlZWJjNywKLQkweGUwNTdlZjg5LCAweDAzZGZkZTUxLCAweGRlYWQyMDJlLCAweDE2ZDcwYzFhLCAweGFiODE0NzlhLCAweDA3OTg2ODZiLAotCTB4OWZiMTQ5ZTUsIDB4NTI1ZDVjMGEsIDB4ZjQ5OGUzZjcsIDB4MGYyZmQ5ZmUsIDB4NzViYTQwNGUsIDB4NDg2Nzc1NDUsCi0JMHg3MDkwZGZkMCwgMHg5NWQ4ZTg5MCwgMHg2NGI4ZmRkMCwgMHgzODFiZWEwZiwgMHg1YTZjY2YxZCwgMHhlZjAzY2UzNiwKLQkweGNlM2IyOGQ5LCAweDE5ODZkY2EwLCAweDI2OTJiZWY5LCAweDNkZTA1MzhjLCAweDNjYjgyNjBmLCAweGJlMDNjZjU4LAotCTB4ZWY5MGZiYjMsIDB4ODdhNDhkZDIsIDB4NzlkNDBiNGEsIDB4NjdjMTZlODksIDB4ZGViODEzY2IsIDB4NWNkNjFkMWYsCi0JMHhkMmY4MGM3ZiwgMHhhYjYyNGJiZCwgMHhjYWZiYmM2MCwgMHg4OWRhMjMyNSwgMHg4ZGE3NmQ4OSwgMHg3NmViNjgwZSwKLQkweGJlYTIzNjlkLCAweGNjM2VjM2FhLCAweDE4YzViNzUzLCAweDEyNzk2ZjUyLCAweGQ0M2Y2MTY0LCAweGY0ODFmMDdlLAotCTB4ZTNjNDBmZmUsIDB4MTJmOTg1YmUsIDB4ZDllZWUyNTUsIDB4ZmIxYTNiMWQsIDB4NTVjMWNjZjcsIDB4YThmNzc2MzIsCi0JMHg1ZDkxYTM5ZCwgMHgwZmVkOWQyYSwgMHg3NTliM2I2MCwgMHg5YTE2NDAxYywgMHg3ZTU1OTJlMSwgMHg0OGVhY2NlOSwKLQkweDU5NWI1Zjk1LCAweGNmZWFhNzFmLCAweDgwZWEwNjZlLCAweDkxNWVjZjVjLCAweDE4MWY4ZWFhLCAweGNmMDBhYmM0LAotCTB4NDNmODE2MGMsIDB4ZTgyZTU2ZmQsIDB4ODM3OTIzMzgsIDB4Y2NhZGY3MWYsIDB4MWQzYzE5NzAsIDB4NmM0ZGYzNDEsCi0JMHgyMmI3YTU1YiwgMHg5ZDkyZjVkYywgMHhkOTg3YWZkNCwgMHg3Yzk5YjlmMCwgMHgzZGVhZDA4NSwgMHhkMWIwZjVjMSwKLQkweDUxODkzY2FkLCAweDdmMjI2ZTU3LCAweDgwZmIwMmJmLCAweGQ5MWE4YWQ3LCAweDBmMTA5MzZiLCAweDZlZWZiYTQ2LAotCTB4NWJiZWU4OTUsIDB4NGI1Nzc3ZGMsIDB4ZWM5NjFkNGEsIDB4ZTMwMTZjZWUsIDB4NDZjNzNkY2MsIDB4ZTExMGI2ZDMsCi0JMHhjZWYwMmJkZiwgMHg0YjNiMmYyZSwgMHg3YWZjMjhmYywgMHgzNmU1NWQ2NSwgMHg3ZDcwYjNiMCwgMHgwNmRiZmE2ZCwKLQkweDhmZjY3NzljLCAweDQ1OTcxNjI0LCAweDUwZWNlYWViLCAweGFmZGQ1MWUxLCAweDE5Zjc1N2FjLCAweDllNjAzMGViLAotCTB4ZjUwYWY2N2EsIDB4YzIwOWUxZjUsIDB4ODM2MjBlOWUsIDB4MjU0NjllNTAsIDB4MmY5MjdhNDgsIDB4ZmQyNGZmZDEsCi0JMHgwMDdjZDdlZCwgMHhmM2IyZTNkZiwgMHg4M2UwMDRmNiwgMHhlYThmYTMxYSwgMHgyZWNiOGY1MCwgMHhlMWY3MmJlYSwKLQkweGI5MjMxZDdhLCAweGU0ODA3ZjAzLCAweDVjZjkyMjU4LCAweDhhNTg3MDYzLCAweDk1YWU4ZmQwLCAweGIyNjc2Zjg4LAotCTB4MmIyMTdmMjAsIDB4NzJmYTllMzAsIDB4MDkzZGZlY2YsIDB4MTM1YTVmZGMsIDB4ZjU0ZTVjZWUsIDB4NjU5MjNkYjAsCi0JMHhkNTJhNWMxYiwgMHgwN2U4ZjQzYiwgMHhlNzQyOTFhZSwgMHg3MDI1OTY0MywgMHg0MThkNzg3OSwgMHhmNTcwMGVmNCwKLQkweGJiNDUyNjQ3LCAweGQ3OGM2NzdlLCAweGZmZWRlZjAzLCAweGY0MWUzOWM3LCAweDAzZTdmYmVmLCAweGVlNTBkODFmLAotCTB4MmYxOWJkYjksIDB4ZjAyNGNkZWMsIDB4ZWJmZmQxMmYsIDB4OTM5NGI3MmYsIDB4NjhjNWJmN2UsIDB4ZWMyZWZkMjEsCi0JMHgxYzJmYTI5MCwgMHhhMWRiNTFiZiwgMHgyODg3NjlmMSwgMHg3OWI0OThmZSwgMHg4YmQ0MDVjMywgMHg3OTFkN2QzOSwKLQkweDA3YmUwMTFiLCAweDFmZmJmOWMzLCAweDcxNzkyZGRjLCAweGVlNWQ0ZTFmLCAweDQ5OWZkMjQxLCAweGRlZjgxZWMwLAotCTB4NDdhMTY0YmEsIDB4YWNmYmQ1NWIsIDB4MjFhZjUwOTIsIDB4YTVjODRjYzMsIDB4MTQ5OGE2ZjcsIDB4MWU5MDc3NmUsCi0JMHhiYWM1N2M5NCwgMHg0OTdlODBhZiwgMHg2OWE5YmRlMiwgMHhlMjU3YzIzNiwgMHhkNzA5MTZlMiwgMHhhYjNjY2U5ZCwKLQkweDQ1Y2Y4ZWQwLCAweGI0MGMyYzIxLCAweDk3Y2ZlZGQ3LCAweGJlN2Y1YTRhLCAweGU0ZjlmYzliLCAweDdiYzUyMzBlLAotCTB4OWRmOGRiYWMsIDB4ZTczZDczZjIsIDB4ZmNkNDMyZmYsIDB4NTNhYTdjYjAsIDB4MmJmMmUyMDcsIDB4YjlhNzk4ZDEsCi0JMHhhZmRmNGY2NywgMHg5YjI0ZGZkZCwgMHhjMWI3NzFkNCwgMHhjN2JiOGVhMiwgMHg5ZmViNTAwZiwgMHhkZWI1NzY4OSwKLQkweGFmYTIzYzk5LCAweGM3MTRmZWVhLCAweDNiZmRkNTIwLCAweGZkNTVmMmNiLCAweDU0ZGJjZWU5LCAweDJmMmFlZmUzLAotCTB4OTJjM2Y1NTEsIDB4MDBmMjY5YzcsIDB4ZTQ0YWJjZWEsIDB4MjU1ZTc1MDAsIDB4YTNjZWFlY2EsIDB4N2RmZTFkODQsCi0JMHgzMTc4MDRiOSwgMHgyZTFkM2M5YSwgMHhjODEzNDNjMCwgMHhjMDZiMDhjNiwgMHgzNjhhMGM4ZSwgMHgyMjM2NzE1MSwKLQkweDZkOGNkYzNmLCAweDFmMzBkMGQzLCAweDFmNTM0OWYyLCAweDFkODc4NzFlLCAweDA3ZDkzN2JlLCAweDc2NjI5OGYzLAotCTB4ZjEwNGIwOTgsIDB4MWM1YmM5NWIsIDB4OWEwMDczMDcsIDB4ZjAzYTllYTgsIDB4MzliZmI1N2UsIDB4MTdkYjg1MzIsCi0JMHhiODI1ZjVhNSwgMHgzNjg0NGY1ZSwgMHgyYTViMTlmNywgMHgxNGZkNjdmNywgMHgxODIyOTg5ZiwgMHgzNDVlOGJmNywKLQkweGM0YTQ1ZjkxLCAweGU5M2NjYWM5LCAweDUwMDc0NTY5LCAweGVmZGVlNDdmLCAweDZiMDliYWEwLCAweDI3Y2MxNjY1LAotCTB4NzkxNDY5M2UsIDB4YmVmOTE3ZDQsIDB4MGVkNmRjZGIsIDB4YmU0ODIzOWQsIDB4ZmFlNDRjZWYsIDB4ZTJjZTE3ZTAsCi0JMHg1ZDdmMzhiMSwgMHg5NDU5NTgxYiwgMHgxYWVmY2RhNywgMHhkNzU5M2ViMSwgMHhmNjhkMWVkNiwgMHg1ZGYzODg2YywKLQkweDAyZWJlNjIzLCAweGQzOWQ4NWQ3LCAweDVkNjA0Nzc3LCAweDcyMmQ3N2U1LCAweDcyY2FmZGM4LCAweDFmZWJjZjIyLAotCTB4ZjJiZDdhMTQsIDB4NTQ3YzQwZGUsIDB4YWZhMDJjMzQsIDB4ZjVmMjc3MmIsIDB4OTIzNzRlNTUsIDB4NDZjMmMxM2UsCi0JMHg3YTBkYmQyOCwgMHgyYWRlNjdiYSwgMHhmMjhjMWVkOCwgMHgwM2JhODAzZSwgMHhkYzZhYjdmNCwgMHgyZTNjNjllYywKLQkweDhkYmQwMGFhLCAweDVjZmEwYzcyLCAweDkxYWQzZjdkLCAweDczZTgwYmY0LCAweDAxMGJmNWQ1LCAweDE1ZmI5ZTdkLAotCTB4MTljMjc3M2MsIDB4ZThmNjVmN2EsIDB4M2YzNzVlMTQsIDB4ZmMyMTJhZTEsIDB4ODhmMDAyZmYsIDB4N2EyZmYyN2UsCi0JMHhmM2UzOGRlMCwgMHgxNjdhZjg1YSwgMHgzNzQ0MWY2OSwgMHgyOTI5YjhlZCwgMHhiNjdjN2ZkYywgMHg0MzNkN2QxNywKLQkweGM5NDlmNWQwLCAweGQ0Y2E4NzlmLCAweGJlMjA4Y2VkLCAweDhkNzI2OTlkLCAweDdhNDdjY2VmLCAweGY1ODhkZTdjLAotCTB4NGJkZmNhODksIDB4ZGZlY2VkMGMsIDB4N2VkMzBmZGEsIDB4MDNjZWUzM2QsIDB4ZDI4ZmI4ODksIDB4OTEyMDcyZGQsCi0JMHgxOGQ1ZGYwMSwgMHg4ZmQwYWI2YywgMHhhM2IwYmUwNywgMHhlYWQ3NTNkZiwgMHg1YjZiZjgyMywgMHg3YWYxZGJmMiwKLQkweDQ3NjRhYjZkLCAweDc1ZGVlYzU1LCAweDkzYWQwYzYxLCAweGJkNjIzNDc1LCAweGUwNWVjOWVmLCAweDc2ZTQ0Y2NhLAotCTB4OGRhMjYwNjQsIDB4OTg1YzA3ZTcsIDB4YzNlN2MxMTMsIDB4ZjkwOTVlYmMsIDB4YzIxMmY0MDAsIDB4Y2Q2MjViYjUsCi0JMHg5ZDcyN2ZkMCwgMHhiNzlkNjQyOSwgMHhmZjdiZTA1MiwgMHg1N2M1MjMzYSwgMHhhZTNjZjAzNSwgMHg0MWZhNjBlMywKLQkweDY4ZjkwOWEzLCAweGMyNGJhYzI3LCAweDFlOWIxYzc1LCAweDM3MmZmMzg5LCAweDE0MmZmNDMwLCAweGZiYTVjZWY4LAotCTB4NGZmYWUxNGYsIDB4MDcwMDg3Y2UsIDB4MmY5OWFmYWUsIDB4MmU0ZmJlMTMsIDB4MDVjODc5MTcsIDB4NThjZmVhMDYsCi0JMHhkZDdlMjQ2NCwgMHg0NmJkZmYzNywgMHhhYzlkZWZjYywgMHg0YmRjZmJlMSwgMHhmOTQ2N2MxNiwgMHgyNDhiMTliZSwKLQkweDhhOTkzZjY1LCAweGQ1N2UxNTlmLCAweDdmOTZhN2YyLCAweGY1NjlmMDdiLCAweDk4ZTlmMWY1LCAweDNhN2NhYmM0LAotCTB4ZDAzY2VkMDQsIDB4ZjIxMjc0N2QsIDB4Y2UyMThmY2YsIDB4YjJiOWY5NDYsIDB4ZjAwNDkwY2YsIDB4ZWM1YTM3NjYsCi0JMHhiMDZiYWZiOCwgMHgxMTIwN2RlYywgMHg3ZTNlYzRmNSwgMHg1NmNkNjg3ZiwgMHhkYjFiZWI4OSwgMHhhOTg3MjhkZCwKLQkweDFlYjY0NjRkLCAweGFlNDRjYmZkLCAweGJkMjA2Njk3LCAweGRkNjk3MTBhLCAweDdiYzUyNDUyLCAweDRiZDQ2Y2ZlLAotCTB4MGVmN2NhNTksIDB4MTNiZTU2MDYsIDB4YWU3YTcxZjMsIDB4OTRiZjA2NmYsIDB4MTA3ZDc1YmMsIDB4MzkxMjlhZGYsCi0JMHg3MDdhMmFiZiwgMHg3NmI5OTE5MCwgMHhhNWJmZGU1MiwgMHhlNzk4MTRjZiwgMHhkYmFmMDM1OSwgMHhmYWY5ODg2NCwKLQkweDMzMWVlZGY1LCAweDA4OWZkYTA1LCAweGUwMjc5OTdlLCAweDBhZjdmYTUwLCAweGNkNGY2N2ZlLCAweDM0NGVmYzIwLAotCTB4NWI4ZmJjNzEsIDB4NzVjMGFiZTEsIDB4OGI1ZDE5MzQsIDB4ODRmZWUxMTIsIDB4ZDA2YmI3OGMsIDB4YmY2NTM1Y2UsCi0JMHg0MmY5NGI5YSwgMHhhNzNiMjM2NiwgMHg0NmZiZTdjNCwgMHgxOTY1YjA3ZSwgMHhlNmZjMzdhYywgMHhmODYzYTIwOCwKLQkweGU0MTY4ZDllLCAweDA1N2VmMGUzLCAweDdjMTBhZTQ5LCAweGNiZWViNGE3LCAweDM5MDJlNjM2LCAweDRkOWNiYmFhLAotCTB4YjI5ZmQyYWQsIDB4ZjY5MWFjZjcsIDB4MTg1ZGI3MjEsIDB4Mzk3MjcyNDMsIDB4Y2YyYmFlOTksIDB4ZjkxMTRhMmQsCi0JMHg1M2RmYjEyYSwgMHg5ZTgyNWZjOSwgMHgwYmM4OGZkNiwgMHhjMGYwNTM4YywgMHgyMTVlMTc3MCwgMHhkMTE0ZjNjMiwKLQkweDM2NTJkOTZiLCAweDM3ZDFhNzk0LCAweGQ2NjdmYWQyLCAweGMwZTY5MzFjLCAweDFjMTk3NzNjLCAweGQ2MTY3MzA2LAotCTB4NzdjN2NhY2YsIDB4NTM3ZWUwZTYsIDB4NzFmZDVjYzYsIDB4Yjk4OTlkOWYsIDB4Y2ZkZmI4OGMsIDB4Y2FmZjdkNDIsCi0JMHhiMWJmZWE2NCwgMHg2M2VkNDZkMiwgMHhkMGNmZTcyNiwgMHg1ZmRmNGNkZSwgMHg0ZGY2OGZkZiwgMHgyY2VhM2ZhNiwKLQkweDFkNzRmNzg2LCAweGI2YmUwODMxLCAweDNhOTRiZTEwLCAweDk5MzZhNWQwLCAweGE1ZmVlMDk5LCAweDM1ZDUxMjVkLAotCTB4NWQ2N2Y4MTUsIDB4NzE1Y2MzZWUsIDB4ZGYxNWZkOGMsIDB4NWRhOWVmMDcsIDB4M2JlOTI2ZjEsIDB4MzE4NWY1N2IsCi0JMHhhZDBkMTcxOCwgMHg3ZDg4ZGQzOSwgMHhjNmNmOGFmNywgMHgwYTcxM2ZhMCwgMHhmNWY5MDdlYywgMHg0YjI3ZGZlMCwKLQkweDE5OGU0N2E4LCAweGM1NWQ3ZjcxLCAweGYzY2QyYjY1LCAweDBjN2JhZWFjLCAweDE1ZTc5N2NhLCAweGE3NGRlYTg5LAotCTB4OTMxODJmNWEsIDB4MDg2MjdkYjgsIDB4OWY1ODE2Y2EsIDB4MTg5NWQ3MDMsIDB4Yjc3MWY4NGIsIDB4ZmE3MWQ1MGQsCi0JMHg0YWI4ZjBlNiwgMHhjMGZiNDNmMCwgMHgxZTkxYTMyZiwgMHhkN2I2MTVhNiwgMHgwZmU3YzM2ZiwgMHg3N2U1MGNjOSwKLQkweGI0Nzc3MTdkLCAweDNkZmU4NDI1LCAweGZlYjJmMzAxLCAweDZhZDgxZDdjLCAweDNkMWI5N2VmLCAweDVjZjBlY2ZkLAotCTB4ZmVmNDJlYjksIDB4OWYwNTU3YTgsIDB4M2UyOWE2MDIsIDB4MTEyOTNmYzAsIDB4NTVmZjk5ZTUsIDB4YWM2MjkyYzIsCi0JMHgyMmY4ZjcxNCwgMHhkYjJiOGU0MCwgMHhiMWVhY2U0YSwgMHhiYmQ4OTdhZCwgMHhiZDhjNzhlYSwgMHhmN2I3ZTQxYiwKLQkweGI0ZGY4N2M2LCAweGY0ZjljM2FkLCAweGUyMDFmNjQxLCAweDA3ZTQxNjQ2LCAweDU0YzhkYzYxLCAweGJjZjBmN2VmLAotCTB4OTI0ZTdhNTIsIDB4YWYzYWM0MmIsIDB4MWY0NzQxY2EsIDB4ZDU3YTAzNjYsIDB4ZjNiYTAxMzUsIDB4NTIwN2RmOTEsCi0JMHg1YWY3N2U3YiwgMHgyOThmY2ExYiwgMHhiNDUxZmJhMiwgMHg4ZWJmYWMxMywgMHg4ZjVhOGNlMiwgMHg5M2Q5ZmZkYSwKLQkweDRmNzhlNWNjLCAweDc3ZWI5NzMyLCAweDEyZjFkNTEzLCAweGEzZWY0NWM0LCAweDE0NWM0MzFjLCAweGEwZGY4NThkLAotCTB4OWQ3YjQ5NzgsIDB4Y2ExMzI1ZTIsIDB4MTA3N2JjMTUsIDB4MTBmOWU3ZDAsIDB4MmU0ZTFmNzAsIDB4M2RmOTA4ZmUsCi0JMHg5ZjEzMzU4MywgMHhlNDczZTAzMywgMHgzZjNhZWQyZiwgMHg5MTUzZjYxMywgMHhkNzI4MTllYiwgMHg1Y2FkYmZjOCwKLQkweDFlZjNiNWFlLCAweDBjZmEyZTRmLCAweGZiODc1OWUxLCAweDhkZTg0MmI1LCAweDZiM2FjNTU3LCAweDk3YzIzMzM3LAotCTB4ZjA5NWIzN2IsIDB4NzY2ZDhlNzQsIDB4OWU1ZjAzMTYsIDB4ZmViMDM4MDMsIDB4NDY3NGU1ZGYsIDB4YzY3ZDYyYzYsCi0JMHg5YWI0OGNlNSwgMHg2ZWEwN2EwMywgMHhiNzNkMDQ3MywgMHhkYzZhNjcyZSwgMHgyNDQ3ZTgxYywgMHhkZjNmYmU3MSwKLQkweDNjNDI2MjVhLCAweGU1Y2NkYWNmLCAweDI5ZGY3OTRmLCAweDk0Mzg4Y2RmLCAweGI3NDM0MmE3LCAweGQzZjcwZWQxLAotCTB4YTM0NzRlZGEsIDB4ZmJiODU3ZGYsIDB4YzM5NDM4Y2UsIDB4NDdmY2UwZGUsIDB4ZWQ3NzVmMTIsIDB4ZTNjNjdiOGEsCi0JMHg4N2Y4NWRmNywgMHhmZWE1NGNmOSwgMHgzM2VkNWVlNiwgMHgwNTc4ZGQ1MiwgMHg3ZjZkZmUyMywgMHgyODc1NmZmMSwKLQkweDIyZGJlN2M3LCAweGNmMzc2ODJkLCAweGEwZjQ4OWVkLCAweDI1N2FlZmZlLCAweDI4OTNhYmNjLCAweDgwYzRmMGVlLAotCTB4ZTg2NzNiNWUsIDB4ZTVmZTQ0OTgsIDB4ZmU4MmQ5NmUsIDB4OGY5NWZiOWQsIDB4NzQ3OTQ1MWYsIDB4OWU4NjE4YmYsCi0JMHhiNmQyNWIxZSwgMHhiZGRhMDJmNiwgMHg2N2IxYjY5YSwgMHg5ZjY4NDNmNSwgMHgxZTU1M2ZmOSwgMHg0N2RjNTc2YSwKLQkweGZmZDI5MTdlLCAweDg5YzlhNTc4LCAweDllYmNmNDdhLCAweGFkMjU4OWViLCAweGJiYmY5MDJmLCAweDIxYTVjYWU0LAotCTB4YjczZWY3NTgsIDB4YTE4NmJmZTcsIDB4ZjFmZjczNWUsIDB4NjdkNDMwZDIsIDB4MWE1YzNmZWUsIDB4MmZkZGY3ODYsCi0JMHhmMjg3ZDY0NSwgMHhjOGE1NTY1NywgMHg1ZWM1N2Y0NCwgMHhhYmQ3MWQ2NiwgMHgwYjFmNDNmMiwgMHg2ODZhYzhmZSwKLQkweDliZmRjMzJlLCAweGQ5YTZjNzg1LCAweGRjYWI3ZjMxLCAweGEzYTdlYzJmLCAweDZmODVmYWZkLCAweDA4MmRjNjk1LAotCTB4YWZjMWFlN2EsIDB4MDVlYmMzMmYsIDB4ZTcyMzRhYzcsIDB4NDc2NWYxMDcsIDB4MmZjOTQxYjIsIDB4MDc1ZTU3NWUsCi0JMHgwNTg3ZWFlZiwgMHgzYWZjNzFlNSwgMHg1YjhjMzg0NywgMHg3ZGYzZDdlNywgMHgxNzkyZDViNCwgMHg1ZmYwMGJlMywKLQkweGRmOTFjZmI0LCAweGNlMjhiNWQ0LCAweDA0ZmM5ZWJiLCAweDA1YzFmOGU3LCAweDVmNjdlZmQ4LCAweDYyYjU0MzZmLAotCTB4ZTQxMzkwM2EsIDB4ZWJmMGNkMjcsIDB4NDdjMDYxN2MsIDB4M2U2MTZkZTUsIDB4ZmFmZGVmZjIsIDB4ZmUxN2Q0ZDMsCi0JMHgxZjBiYWNkMywgMHgyMTQ5NjU0NCwgMHhkZTAzMzNmMiwgMHg1YzdhOGQxOCwgMHhiZjgxYTc5YiwgMHhmMTViODQyOCwKLQkweDVkZWEyYWI3LCAweDM2YmYwOGU5LCAweGZjYmIzMzdmLCAweDY5MGZjYTBlLCAweDdlNTkzN2YzLCAweDAxNjI2ZWJkLAotCTB4NGQ3OWU3ZDYsIDB4OTM3ZjlkNzQsIDB4ZjE0NWU1MDksIDB4YmI3ZTkxNDMsIDB4NjdmZmM4NDIsIDB4OGE3ZTljNDksCi0JMHg3NWY4MzU1YywgMHg3ZjA2OTc0NCwgMHhkYTA3MjliMSwgMHgyZWZlZTJmMywgMHgxZGY4YTczMCwgMHg5ZGRiNDM0NywKLQkweGQwOGYzMGRiLCAweDQ4YWVlNTcwLCAweDFjMzU1ZGFjLCAweDNiZjBjYTlmLCAweGIxNGIyZThlLCAweDc3M2UxZmE5LAotCTB4ZjRkMzBlZTUsIDB4NjhiZjAwZGMsIDB4ODkyN2I3ZGYsIDB4OWY4MGNiZWIsIDB4M2RlZWRhMTAsIDB4OWZmOWU0MjcsCi0JMHgyN2I2ZmY2NSwgMHhmZmNmY2Q1ZCwgMHgyMGZmNmQ1ZiwgMHg5NDk5ZGYwZSwgMHg0Y2Y4NzE0MCwgMHg3MWUxMjc5ZSwKLQkweDI4NmVkNmI4LCAweGY3OTk1OGZhLCAweDllZTc0MTVkLCAweGY5MmNmOGZhLCAweDkzMmYxMDM3LCAweGM5Mzc3ZTNlLAotCTB4ZGFkMmUzNDYsIDB4MWM1MWM0YTYsIDB4OWM1YTdjN2QsIDB4ZmU3M2RjY2QsIDB4Y2ViYjdhYmUsIDB4N2U3M2RiOWEsCi0JMHg3YjczOGZjNSwgMHgxODRjMDcxYywgMHgzZWY4MzhlNywgMHg4OTM0ZjczMSwgMHg3ZTJhZDVmNiwgMHg5MTI5ZGI5ZiwKLQkweDMwYWVlZTNmLCAweDAyOWM3MTc4LCAweGNmMWE3Zjk3LCAweDE4Nzc0ZWFiLCAweGMwNTJlMWJjLCAweGM3ZmM1NDNmLAotCTB4MTJlZGY3YWIsIDB4NDlmYzU3ZGQsIDB4M2JmNDZmYzUsIDB4NWE3NzFlNzksIDB4OThmZmJmMDEsIDB4MDkzMjc1YzksCi0JMHg3MGJlNDFlYiwgMHg5MjM4NWViYSwgMHg3OWNjNjc1ZiwgMHg3N2ZhMTUyMCwgMHgyNDYyNTBmZCwgMHg1NDlmYzJmZiwKLQkweDZmZWI1NGY4LCAweGZiZWI2YzVlLCAweGI3ZTRmYmI1LCAweGU0NTRmZTA4LCAweDFmMjM0MzJjLCAweDEwOGFmZDhhLAotCTB4ZmI0M2FhNzgsIDB4ZmJmNjg3MWQsIDB4YWU1Zjk1MGIsIDB4ZjdlYzE3OWQsIDB4OGU3YTI0YjksIDB4NmYwNWYzZDEsCi0JMHhlMmExOWRlOSwgMHhmZTYyOTVmMywgMHhhMGZkMjA3ZiwgMHgyZmVmZjM0ZCwgMHg5OWQzNzg0MiwgMHhmNmI5ZjY5ZiwKLQkweDg1YmI1NzY2LCAweGZkZGJkMzdmLCAweGNmMjg2Zjg4LCAweGY4OWQ4NDAzLCAweDRlNzNjOTY3LCAweDc5MGNmZmYyLAotCTB4ZjYxN2VhYmUsIDB4ZTFkZDlkZjIsIDB4YzljMWEyZTQsIDB4ZGViOTdmNDgsIDB4ZjdmMjg0NWYsIDB4ZmFjODQzNjcsCi0JMHg3ZjgxMTVmNCwgMHg3YzU1NzM4OCwgMHhhOGRkMjA3YywgMHg1ZGM4YjhjMywgMHg0ZDAzZjNjZCwgMHgyOWQ3YjZiMSwKLQkweGQzMmMzOTdlLCAweDEwMjVlYmZlLCAweGI2ZmZhMjA3LCAweGRhODViMmY4LCAweGExOTNmNDFhLCAweDMxY2NmOTlkLAotCTB4OTk5N2VhMDMsIDB4OWJmODZhZDUsIDB4Y2Y4Yjc3MzAsIDB4YTJmMmNkMmYsIDB4NGFjOTVjZGYsIDB4ZDk1NGFmMjksCi0JMHhmZGMxNmIxNiwgMHgyZDA5NGRjYywgMHgzY2FlNTEwNywgMHhiNmRiNjRkYiwgMHgwNmViZjFlMCwgMHg5ZTI2ZjE4YSwKLQkweGE1OGVhYjZmLCAweGUzNGM5M2ZkLCAweDZiZDY1NDA3LCAweDVmYjU3ZGZkLCAweDEzYzg5YjcwLCAweGZjMWZlNmY1LAotCTB4ZWI5YzNkYTEsIDB4YzkzMjQzOTUsIDB4OTdlNjFkNzksIDB4ZDhjYzYxNmUsIDB4N2I4MmY1YzYsIDB4NGRlNTM4NDUsCi0JMHhiODQzNWUzMCwgMHg3OTIxNWMzZSwgMHhhZDc3MDA0ZCwgMHhkZWExZjcxOCwgMHhhYTI3Zjk0ZiwgMHhiMzkwYzFhNywKLQkweDUxMTMxYjZkLCAweDVkNDM5OTJlLCAweGVhN2RhYTNmLCAweGRhOWJkMjJkLCAweDk3NzU5MjNhLCAweGFkNWQwYmE4LAotCTB4YjA5MzBkMWIsIDB4NjRmMTBiNWYsIDB4MzY5N2ZhMTIsIDB4M2ZjNDY0ZGIsIDB4NDdkYWE3YzAsIDB4MTcwNWY4YTYsCi0JMHhmMTQ3YmQwZiwgMHhiY2RkY2NlNywgMHg3ZWEzZDNmZSwgMHhkNzhlMzRkNCwgMHgwZDNlYzQ4ZiwgMHg3NjcyMWU2ZCwKLQkweGE5MDNjMWU2LCAweDhkZDc2YmI2LCAweDE5OGY1YWVhLCAweGUxZThhZTMwLCAweDhlZmM2ODdmLCAweGYzYWIyNjlmLAotCTB4OWU3YTk5OGMsIDB4OTM2Y2NkYzcsIDB4Y2E5Zjk4MmMsIDB4YmUxYzc4MTQsIDB4ZWFmYzgyMmUsIDB4MWY5ZjdmMzEsCi0JMHhhMTQwZmE4NywgMHgxYzI5ZjlkMywgMHg3ZTRmZTdhZiwgMHgwNDViNDQ1YSwgMHg4NGI3YWVmZSwgMHg3MGZlYmFjMywKLQkweGE5OWJmOTcyLCAweGQ5MzM2ZmJjLCAweDkxZTViOWYwLCAweGRmZjQzZGY0LCAweGJjNDQ4OWVmLCAweGRjNWEwMWZlLAotCTB4MDlkMmY5OTcsIDB4YTQ3Y2M4N2QsIDB4MWZlNWMyOTQsIDB4OTNjZmUxZWMsIDB4MmZkZTFlZDEsIDB4YjA3YWQyZjIsCi0JMHg3YzgxNTE4NywgMHg5YjM5ZjY4ZSwgMHhjMjA5YWU3OCwgMHhlZTYzY2ExNCwgMHhhNmZkZjVlNiwgMHhlYTM4ZDcxNCwKLQkweDZkOWIzMmZmLCAweDQxZDBmZjIzLCAweDgwMTdlNzc5LCAweDM0NWYzMWFmLCAweGY1OGIxNjA4LCAweDU4MjJlN2U3LAotCTB4OWE4YmQ2MDMsIDB4OTJhZjVjMTIsIDB4Njc1MmZkMWMsIDB4ZTc4MjM5NDMsIDB4ZDllNGNlYTksIDB4ODhmYjIzNjksCi0JMHhjZTdhYzMyOCwgMHgyNjQ5YjAxMCwgMHhmN2MwZDdkYSwgMHg3NDE0MGM0NywgMHgxNjM4ODE0YywgMHhjZDAwNDllYiwKLQkweDBmMzdhYzM0LCAweDIxOWQ3NTEyLCAweGYzOGY0YzExLCAweGFkNzA2ODNmLCAweDQ4ZWIxOWJmLCAweDJhZmI3YWVkLAotCTB4ZGM3YjAyMTIsIDB4ZjU5ZWE4OTQsIDB4ZWJjMWM5MjUsIDB4NDk5ZDRhZTIsIDB4NTZmNzhmYTksIDB4M2RmMDkyNjcsCi0JMHhhZjBlMWY3YywgMHg3MjdkODkyYiwgMHhmZDg5M2Q0YSwgMHhhZTQ1NDlkMCwgMHgxOWVhMjMzNSwgMHg2OTQ5YWRjNiwKLQkweDBiZWRiYmVjLCAweGY5ZTc1OWViLCAweGRhYjljNjNiLCAweGMwNDdjZjNhLCAweGExM2YzY2UzLCAweDFmYWUyYmFlLAotCTB4ZTlmMTNjZjAsIDB4MGUyN2FkYjcsIDB4YjgzNzY2NDgsIDB4YTNmMWM1ZmUsIDB4ZjYyMGJiODUsIDB4NWJjNTIyNjIsCi0JMHg2OGNmZjhmZiwgMHg5NzZkYjNiMiwgMHg3NTc2MWVjOCwgMHhlNTNmMzE4NywgMHg5ZTc4M2IxZCwgMHhlZjdmOGRiZCwKLQkweDViNzEwNWQzLCAweGJkOWQ5MDQyLCAweDdiNWJmODQzLCAweGZmODg0YWRiLCAweDIzNGJmOTc3LCAweGIwYmQ3YzcxLAotCTB4NGY4ZWViZTMsIDB4ZDNiZjEzYmIsIDB4YjRmNWY4ZjIsIDB4MWUzMTg3MmYsIDB4ZWJmMmVkODcsIDB4Yjk2ZmQxMGIsCi0JMHgyMmY5NzQ4MSwgMHhjZGZkNDQyOSwgMHg5M2VkYzExNCwgMHg0YjllOGU1NiwgMHhlN2E0ZjllNiwgMHg5NDdmMzk5MiwKLQkweDk3ZjFlNDljLCAweGEzYWYzOTdiLCAweDcwNWU4NDU4LCAweDBmNDkxOTk3LCAweDk0NGY0YzFlLCAweDUyNzlmYzk0LAotCTB4ZWVjYjNhYTgsIDB4OTUxYmIyNmUsIDB4M2ZkYTI0OGIsIDB4OTY3NWRkN2IsIDB4Yjc2MTc2ZDYsIDB4YjJlOWY5MzQsCi0JMHg3YjM3YTQzMSwgMHhkNTA3NWJjYiwgMHgzM2Y3NTVjZCwgMHhlMTNlYzQ1MiwgMHhkZDdmM2NjMSwgMHhmNWExNmM5YywKLQkweDE2ODdlYjVhLCAweGFjYTY0YmExLCAweGUxZDIwNmZmLCAweDViZjdjYTY4LCAweGYzZWFlZDY3LCAweDI3YmZjZWZkLAotCTB4ZGM5Yzg0MjEsIDB4ZmIzZmY5YzAsIDB4NDM5N2U3OWUsIDB4MzgxYmE3ZTksIDB4ZWZjNGRmN2YsIDB4ZjkzZmZmMTcsCi0JMHhmNzlmZTc5ZSwgMHg2NDY3ZTMzZCwgMHhmZmY0M2QyOCwgMHg2ZDAwM2VlYSwgMHgyZmJiNWY5ZCwgMHgwZmVmNWI0MCwKLQkweDgzYzBiYzNiLCAweDFiNGFkNmY3LCAweDlhZDA3ZGJhLCAweDk3MmM1ZmEyLCAweDYzZWI1NTQwLCAweDFkYTEzMjlmLAotCTB4ZDc5MjMwOWQsIDB4OWE5NWQ2YzEsIDB4YzBhNTViYmMsIDB4NWYwNTAwZmUsIDB4MWM3OTUzYTcsIDB4ZTBiZGM5NjEsCi0JMHg2NzNjMDM4OSwgMHg3MWE1ZmMzOCwgMHhjOTFiMjc5OCwgMHgwYWVlMGUyOCwgMHhhNjMwZjVlNywgMHhhMTRjYTRiNywKLQkweDk0OTZmNmZkLCAweDliMzdhMGE5LCAweGU5NWVmOTdhLCAweDZmNWYzMTQxLCAweGFkM2QyNDc2LCAweDIxNGE3MGU4LAotCTB4OTQzYzhlZmYsIDB4ZWEyNTk2YmYsIDB4YmU1Njk2NTIsIDB4NmRlOTk2ZGYsIDB4YmRlOTUzMjksIDB4ODdmNDE0YjYsCi0JMHhlYmYzZjY2MiwgMHhkOGU2M2VkMSwgMHhiMmQ5NzA0YSwgMHg2ODNjNTJhNiwgMHgxZWY4NDJjYiwgMHhlYjVlZjUxMSwKLQkweDk4NTlmZWI4LCAweDVmODJiNjhmLCAweDhkYzBmNTg4LCAweDc4YTQxNzU4LCAweDk0ZTM0MmQ2LCAweGMzZWNjZGY3LAotCTB4YzBjNDdkZTEsIDB4N2FkZmFjMjQsIDB4OTlmYmU2NmUsIDB4NTU0MmYzNTgsIDB4YzE4OGVmM2QsIDB4YTI0NzM5ZDcsCi0JMHhlYTI3NWU3YSwgMHg1ZjNhYTNlYiwgMHg4MjU5OTNlZSwgMHhiOWJmMDE4OSwgMHg2NzU0MmNiYiwgMHhmZmU0NmQ3YywKLQkweDViYmZjMDFlLCAweDY1YmRmNWUyLCAweDFmNjQzZTE2LCAweGM3MDBjZGM2LCAweGM0ZjkzZGIyLCAweDhlZjczM2JmLAotCTB4YzYwNTRiZmMsIDB4MWNmYzM5MWQsIDB4YTU3MTFlOTAsIDB4MTA5YzE3YzgsIDB4NWYyNTBlZjksIDB4ZGViNWQ0YTAsCi0JMHg1MzkyNzkxMSwgMHhiNjgxN2Y5OCwgMHhkMDIxZjMwMywgMHgzNzc0N2Q0YSwgMHhhMTQ5M2VkYSwgMHgxMjIzYzdlYywKLQkweDhlNzkwZmNmLCAweGJlNTBmY2YyLCAweDc4MzdkZWQxLCAweGMwYjQ2NGRmLCAweGFmMWYxY2ViLCAweDllZjkyODViLAotCTB4ZjkzZDYyZWQsIDB4NjE3ZDk2M2YsIDB4MzdlNjk3ZTAsIDB4OWRhMjM2MGUsIDB4OGY0YzZmY2YsIDB4YzM4ODc2YzAsCi0JMHhlZjEyYzNhYiwgMHg3NTNiZjk4YywgMHhmMTQyZmQwYSwgMHhlZTFmNzI1MSwgMHhkNDNiYWM4ZiwgMHgxN2JkNzU0ZCwKLQkweDk5ZmU3NTM0LCAweGZmNzQ4YzdkLCAweDk5YzdlMGI4LCAweDk3ZjUxODdkLCAweDQxYWZkM2Y1LCAweDk0NjYzMWY3LAotCTB4NGY1NTBlNDUsIDB4MThiODg0YWEsIDB4YzRkMzljZTEsIDB4NWRmMDU2ZTEsIDB4ZTA5NWIzZTksIDB4ZTgxZjRlN2IsCi0JMHhhZjM2YzQ2ZSwgMHhmMjg0YWIzYSwgMHgxYTE3MzVlZCwgMHg1ZjczN2ZkMSwgMHg3NmYwNzRiOSwgMHg2ZDE5OTdjYSwKLQkweGVhY2M0ZjE4LCAweDJlZGRlNzUwLCAweDk2ZmRmMmE1LCAweDdiZmM0ODJmLCAweDNkNThjZjRjLCAweDYzZjljN2M1LAotCTB4ZDYzZmM0ZjUsIDB4NWY4YTcwY2EsIDB4OWIyNjA2YWQsIDB4ZmI4NTNmYjEsIDB4ZjE2NTc5NDUsIDB4ZDM2N2Q4MjUsCi0JMHhjYzFmYzk2MiwgMHg1ZDhiNjQzYiwgMHg4M2M4MWI5MCwgMHg0ZjJlYzc1OSwgMHhhYjVkM2M0MCwgMHhkM2U0YWFiZSwKLQkweDQ2MzkzMzFlLCAweDZkYmYzZDIyLCAweGM4ZjZiNTdkLCAweGFhNTdkYTcxLCAweDhiYzE0YmFjLCAweGFkZWQyNzUyLAotCTB4NzNlY2FhYmUsIDB4YWE3ZDk3NzAsIDB4ZDZlMTk3ZGEsIDB4ZmNjMThmNzcsIDB4ZDM5ZWZlNjMsIDB4ZDJjZmIxNDYsCi0JMHhhODE1OWM5MiwgMHhiZWVmZTZiZiwgMHhhNTU3NzU0MCwgMHhiZmFlZWFjZSwgMHgzYzM1N2U0MCwgMHhlNDkwZTc0NywKLQkweDQwNTNmOTAzLCAweGM5NWFlZTRmLCAweDAyMmZhZmViLCAweGMyYjZkODNjLCAweGQ3MDAxZGZhLCAweDZjN2ViMGNiLAotCTB4NzhmZDYwZGIsIDB4MDM5NTk1ZmQsIDB4YjRhZGY1YTgsIDB4ZTU3N2JiNTMsIDB4NmRkZDZhMDgsIDB4ZWI1ZWE4MTcsCi0JMHg3ZjYzZDNlYSwgMHgxZWYzZDUyNCwgMHhmYWYzOWQ5NywgMHg1MjQ3ZjdhOCwgMHg5M2VmNWI1ZiwgMHhjNmJlNzgyMywKLQkweGRmNDBjODdkLCAweDk4OGZiODJiLCAweGI1MTc3ZjQ4LCAweGY4YzRjOWNkLCAweGFlNjNmM2UwLCAweDBlYmI4NDRjLAotCTB4N2M0MTZkZWIsIDB4MGY2MWRlNzEsIDB4Y2UzMTczYzcsIDB4NThlMWVkM2IsIDB4M2Y2ZmNiNjcsIDB4MmZmZGM0NmIsCi0JMHgxMWJmN2E3NSwgMHg3MTAwNjFmMywgMHg3NDRkNmUyYSwgMHhmN2MwYmFlZiwgMHg4NTE1YjZmNywgMHg1OWFmN2UyMywKLQkweGZmZmQ2YjE3LCAweDUzNmZiMTc1LCAweDIwMmFmYjE3LCAweGYyNDdhNDlmLCAweDU2YzczYTljLCAweGMyMzkwZjZjLAotCTB4ODllOTA0MTcsIDB4NGY1ZTRlNzUsIDB4NGQ5Mzk3NTksIDB4OTljOWI4NzIsIDB4NjgzZjNiMWQsIDB4OWUzMjg2YmUsCi0JMHhjZDhlYjBiZiwgMHgzZWJlMGYwOSwgMHhmMzQwY2QzNSwgMHhhMDljZjE1YiwgMHgxNTZmZWYxMCwgMHhlYTA2ZWNmYSwKLQkweDIxM2VkNmVkLCAweDQ3ZjNiNmZjLCAweDQ4ZGRmNDRkLCAweDk5ODVlZWZiLCAweGVhNWZjNDFkLCAweGIyYmFkYzdjLAotCTB4ZmRmODk5ZjksIDB4MTg0NGU3YmQsIDB4NzVmM2M3ZWIsIDB4ZDMxYzdjYWEsIDB4Y2I3YWUzZDQsIDB4ZDMyY2NkY2IsCi0JMHhjZTI5YzIzOSwgMHhiYjQwY2VlYSwgMHgzMTliY2RhZCwgMHhiNzA2Nzc3ZCwgMHg3ZTU0OGVlYiwgMHg5NTI3ODM1ZSwKLQkweGVhM2Q2MDhkLCAweGRlNjU3ZjcyLCAweGZjNjA3MmI3LCAweGQ5MWQzMjhjLCAweDk3M2VhNTBiLCAweDJiNjdhNjU3LAotCTB4NTZmMzNmODEsIDB4OTc1NGJjMTgsIDB4YTY5ZmQzMmIsIDB4NmM2ZTIyZmIsIDB4MjJhNWU0YjAsIDB4NjIzYTlmOWYsCi0JMHg1N2RhODRiNCwgMHhhYTdiMmY2ZCwgMHhiNzllMWIyOSwgMHg1Yzc2NDhkNywgMHg3N2VhYjVkNiwgMHhhM2VkYWQ5NSwKLQkweDE2ZmQ2OTUzLCAweGYxMjRlNTE5LCAweDUzZWZhMzIwLCAweGY4ZjNkNjdiLCAweGQ2M2NlZjdlLCAweGUzMGE1NGRjLAotCTB4ODJjZThlNTgsIDB4Njc5YjUxZjYsIDB4YmY0MzNlNDMsIDB4ZWY4NzliNDQsIDB4NGJiYmY2MTIsIDB4NDhjMWNmZDgsCi0JMHg4ZjljMDRkYiwgMHg3M2NhNGJmYiwgMHg0ZDI5ZmU1YSwgMHhhZjM2YmU5NSwgMHhmZGNhOTA1ZiwgMHhiY2IyODZhYSwKLQkweGRmNDgzOTc1LCAweGY2ODYzYTA5LCAweGQ4YWNhMWE0LCAweDlmMzQxMzk0LCAweGUzNGY1NTJlLCAweDYwZmFjMTFlLAotCTB4OTA3ZDcwN2MsIDB4NzViNTAxZDcsIDB4ZTVjZjQ1NDEsIDB4MDYzMTdmYjcsIDB4ZjQwOWJkZjEsIDB4NzczMWRhMzUsCi0JMHhlNDFmYWYzMiwgMHgwODc0NTJiZiwgMHg0ZTAwNDZmNSwgMHhjOTRkYmViZSwgMHg4ZWI3YmY1NywgMHgwYzVkN2M2NSwKLQkweGY2NzljYmY3LCAweGNiOWY5NDQ4LCAweGRlZTlmMDliLCAweDEzOWZjNDQ4LCAweGI1ZWExZWVjLCAweGNjNmIzOTIzLAotCTB4ZTgyNjhmYTgsIDB4MWRmYmYxMGIsIDB4NWFiYTUzYjcsIDB4ZDI3YWMyNjcsIDB4OGY1N2FmOWQsIDB4ZjIwOWVmYzMsCi0JMHg4NjNkMGZhNywgMHg2MTVlOWY3OCwgMHg3NzgwZmRhMCwgMHgwNjNlNWViZSwgMHgyZmY2MmJhZiwgMHhkNWQ2ZmE3ZiwKLQkweDgwN2Y3ODExLCAweGUxYjcwZjY0LCAweGJjNjJiMmZkLCAweDBmODc3ZTNmLCAweDIyNmNlOTMzLCAweGRjZmEwNzQyLAotCTB4OGY1M2E0N2YsIDB4Yzk5OGYzNzIsIDB4ZjAwYTlkOTUsIDB4NzUxMTRmZTYsIDB4YTc2ZTBhYTYsIDB4MzE0ZGI3YTcsCi0JMHhhYTRmZWUzMCwgMHhmNGJlZTZlYywgMHg3NDFmMjljZiwgMHhlYTlmMmRhOSwgMHhlZmI4NzE0NywgMHhhZjYwMzcyMSwKLQkweDFkODBmN2YyLCAweGIxZDgwYThiLCAweDRhYmY2YWVmLCAweGNmODQyZDUzLCAweDIxOGVjMDViLCAweGJjMjlkNjNjLAotCTB4YmZhNWFmM2UsIDB4MzdiZmQwNGUsIDB4MWU5YmQ0YmIsIDB4ZTc4M2ZiNDYsIDB4NGE3Y2EwYTgsIDB4YjhlZDNkYzksCi0JMHhjMzNlZjMwZCwgMHhmMDk3NWZkMSwgMHhmOTVlOTU5MCwgMHg2ZmQwYTk2ZiwgMHg3M2Y4YmRiMSwgMHg3YWY4MGFmNywKLQkweGZhZDUzN2RkLCAweDJkMzNhOWNmLCAweDUyMWZmZDRkLCAweDk3ZjExMjY3LCAweGUyNTI2ZjUyLCAweDllMDRkN2I1LAotCTB4YTE3NWY2OTUsIDB4NzdmM2JlMzcsIDB4NDM1YzY4MGMsIDB4MGQ2MGM3N2UsIDB4YWNjMzFkZmQsIDB4NDQ4NzNhMTYsCi0JMHg4MGUxOGVmOSwgMHg4Y2VkMTU5MSwgMHhlMmIzZmRjNywgMHg5M2FmMjZiYiwgMHg4ZjAzYTRmYywgMHgzN2YxYjVmZCwKLQkweDkzNWRmOGYxLCAweDgwNjcyNzg0LCAweDc2NDYzYzNkLCAweGFlOGYzOTVlLCAweDllNjNlZGFlLCAweGZiZTE2ZDZmLAotCTB4NDM1YjZiYzAsIDB4OTkxMmViOWYsIDB4Mjk3YmVkYzYsIDB4MzNlYTg3YWMsIDB4OThlZDdmNjIsIDB4ZTQ0ZWEyNWQsCi0JMHg1OTZkN2EzMCwgMHg0ZmJjYjc5OCwgMHg3NGI3OWMxZiwgMHhjYTA5ZmNkYiwgMHhjNTJmNWRiZSwgMHg2NjNjZWE3YiwKLQkweDNhY2I3OTZmLCAweDZhZmMzYmU1LCAweGQxZGY4ZWM5LCAweGQzMWU3NzVjLCAweDdlZTFmN2MxLCAweDRiZTYzY2RiLAotCTB4Y2UzYWVhYTksIDB4YWQwYjE0ODEsIDB4ZDEyNWRjYmYsIDB4OWQyNjRjYjksIDB4ZTdmNjg2YjMsIDB4NDI1OTIyYmYsCi0JMHg5YTNlZWJlZCwgMHhiYzc1ZTVjYSwgMHg2ZDNjODNhOCwgMHhmNGYxZmNlNCwgMHg4YmVkMTJhZCwgMHg5MGVkZWZjNywKLQkweGMyYmY0ZmVlLCAweDNhNzliN2JmLCAweGEzNmY3ZjhmLCAweGVmOTQzZGQ0LCAweGQ0MGU2ZTY4LCAweDNiM2JlODNkLAotCTB4ZTUxYmZiZTUsIDB4ZmJlNTFhN2IsIDB4MjM5YjI5Y2QsIDB4MDdlMjNjZTgsIDB4ZGNjOTJkMGQsIDB4NWYxMGY1ZWYsCi0JMHhmNjFlMmJmZSwgMHgzMGQwZjU4MCwgMHg1ZTRhMWY1NiwgMHhmZDE2YTc3NywgMHhiYjhkMmE2YiwgMHg0NzZmNzFlMSwKLQkweDI5ZmYwODZhLCAweDc4NDhlMzA5LCAweDVlZDQ5OWNmLCAweGE5YjM4NWUzLCAweGZhODE3OGVhLCAweDQ2ZTE3OGRhLAotCTB4NGJlZTNkZDUsIDB4ZGQ3YTM3NjUsIDB4OGRmOTQyMDMsIDB4MmRmZTcwMzcsIDB4OWJmY2YzZGYsIDB4NGQ2ZGQxNDMsCi0JMHgxNWYzZTg3OCwgMHgxZDQ0ZDMyYiwgMHgzODBlNzM1ZCwgMHgyNDVkZjFlYiwgMHg5MjRkZWJiNywgMHg1MWI3MmZlZCwKLQkweGY1NDBkZDNkLCAweDM2YWY0NTc0LCAweDczZjlmMTQ1LCAweDdiNGE3Y2M1LCAweGIzZDcxYTQ3LCAweGY5ZDA4NjRkLAotCTB4ZGM2MmE5YjIsIDB4MjgzMWQ5NDYsIDB4Y2Y0MWRhMGQsIDB4ODM5N2YzYTgsIDB4Y2JmOWQ0NWIsIDB4ZTdkNTVhNWIsCi0JMHhhOWY1MGM4NSwgMHgzZmM5MDNjZiwgMHhhNjFmM2VhNCwgMHgxZjNlYWZkMCwgMHhmNTA5Zjg2NiwgMHgzYjIzMzBmOSwKLQkweGRjYzNlN2Q0LCAweDdjZmFhMWY2LCAweGFiNzQxZjk4LCAweDVmYjc5N2YzLCAweDVlZjlhYTllLCAweDc3Y2ZjYmQzLAotCTB4N2UwZGNlMDIsIDB4NGYzNGM0YWUsIDB4NGU4ZDJlNzMsIDB4ODQ0ZDJlNzMsIDB4Y2QxYTVjZTYsIDB4ZGU2MjI4MzksCi0JMHhjZDFmNGYyYywgMHhmNWVhMzRmOSwgMHg5NzFlYjE1OSwgMHhiOGY1ZmQ3YiwgMHg0NGQ4ZmE2NywgMHgzODZmYWUzZCwKLQkweDU5NDhmNzNlLCAweDZkZmEzODRlLCAweGZmZDM3N2NhLCAweDk3Y2NmODIxLCAweGY0OGI5YWU2LCAweDViMWVhZDcxLAotCTB4YjFkNTdjODcsIDB4ZjMwMzJjMmEsIDB4MjlkNWFlMmUsIDB4ODNmMDNjNzIsIDB4YmU4OTIxZWIsIDB4OWQ1ZTJmOWIsCi0JMHhlNjdiZmI0MiwgMHgzZjI1MGMzNSwgMHhjODM5OGYyOSwgMHg2MzhjYWE0ZiwgMHg1ODczY2YyMSwgMHhkNmY1YzY5ZiwKLQkweDMzMDM3YWRjLCAweDZjY2JlMGM2LCAweGQwYTgxZDQ2LCAweDViMTI0ZDczLCAweDc5OGRlZGNmLCAweDM1NjFmMDIyLAotCTB4YmI1ODdjZTMsIDB4ZDUzNDU4ZWUsIDB4NTlkZDg1YmQsIDB4YWFjMTUxYzQsIDB4YjlkMjE3ZWIsIDB4NWQ3M2RhMGQsCi0JMHgzMThiNTg2YSwgMHhiYzU5ZTYwNSwgMHg0MWU0OWRhMSwgMHg2MjhiY2U3YiwgMHg5ZTYyZGM4NywgMHg3ZGY1MTZkYSwKLQkweDgxNzBkYjM3LCAweDFkNjc4OWNlLCAweGVlMzNiNDQ2LCAweDg2ZmRmNTU2LCAweGIzMmY1MTM0LCAweDhkY2EzYjMzLAotCTB4MTMyOGJlZWIsIDB4MDJjNTk3ZmEsIDB4NDgzNjczMmYsIDB4Y2UwZmFjMTYsIDB4Yjg0ZjY4NmIsIDB4MGVmM2ZhMGIsCi0JMHgyOTZmMTRjOSwgMHhjZTNkNjE3OCwgMHg3M2E1YzllMSwgMHhlYTFlMmZkMiwgMHg0NWYzZmU0NywgMHhjNzA5MmQ5YiwKLQkweGJjNzlhMmI5LCAweGMzNWRlOTIwLCAweDljNjU3YWYxLCAweDVmOWUzODZiLCAweDBhMzI3ZGQ2LCAweGE3NjFmMWJmLAotCTB4NWZjOGViMmYsIDB4MDg2ODFmMDAsIDB4MzYxNjZkZjksIDB4M2JjZjM4MjQsIDB4YzQ0OTYwYzcsIDB4ZGQ4NzhiM2MsCi0JMHhhNjcxNGM5MywgMHg3NTk1N2I4OCwgMHhjNzEwNGRiYiwgMHhlMjFmNjM0NiwgMHhlOTNlYmU1NCwgMHg0NmU4ODkyYiwKLQkweGZjMWJhZDI2LCAweGY4MGY3YzIyLCAweDlhYzcxNDNmLCAweGZhMTU2OTk4LCAweGNkNmQ2NzNmLCAweDNhZmFlODg5LAotCTB4NWY5MDMwMWYsIDB4MmM0Nzc3MzEsIDB4MWI3MzE1ZjksIDB4ZmU3ODhjNGEsIDB4YjE1ZGRjYzEsIDB4Nzk5NjdmYjQsCi0JMHhhZTMxYzcxYywgMHhiYTc4ZTg1NSwgMHgzMjYwZmYyMSwgMHgyNWI3M2JjYywgMHhlOWFiMmVjYiwgMHgxNzEzOGFhNywKLQkweGU4NTY5ZDM3LCAweGJhMGQ3OWQ2LCAweDFiYTI4Njc1LCAweGZkNzU0YmQwLCAweDE3ZTEzNGU1LCAweGZiYjE3YTA4LAotCTB4YmRmYmU4ZTMsIDB4ZmEwN2E1OGEsIDB4NjJlZmJlNjEsIDB4MGVmZDM4N2QsIDB4YzAzOGNmNDUsIDB4NWE2NGY1YzMsCi0JMHgyOWRlMmFiYywgMHg4ZTM1NzNlYiwgMHgyZmJhNzNhMywgMHhiYTI0Mjg2ZCwgMHhmNjU1ZTk2OSwgMHhlMzg2ZjNkZiwKLQkweGFmZWM1NWY3LCAweDhkZmQwYzUxLCAweGY2NmNiZWNhLCAweDViM2ViODU0LCAweGI5NTVmMmUyLCAweGZhMTk2YzY2LAotCTB4N2QwYTZmMzksIDB4OGI4OGJhZjgsIDB4MDQ1YzYxOGUsIDB4MTg5YmZjN2UsIDB4MmRmZjQxMTcsIDB4MDVmZDE3MTEsCi0JMHg0ZjY4MjJlMywgMHg2ZDA0NWM2MiwgMHg0ZmZmMzhhNywgMHgwMDYwMzM5MSwgMHg0MjkzZDdlMiwgMHhkNTVlNGViZSwKLQkweDMxOTNjYmYzLCAweGRmZjY1NjlmLCAweDgwZWExNjZmLCAweGI1M2MxMmU3LCAweDMzYTc0NjkzLCAweGY2YTFkOTM2LAotCTB4YTlhN2NiYTcsIDB4ODMwZWU5ZmQsIDB4ZWQzMjRjNjUsIDB4ODFmNWUyNmIsIDB4NTRkYmNlYjksIDB4NjZkZTk5ZTMsCi0JMHgxYjA3M2NjNCwgMHg0ZWI4MWY5MCwgMHhjNDY2YzdmNiwgMHgwOThjYzczYywgMHgzZmYxYWE3MSwgMHhmNTU1NGE2YywKLQkweDBjNWZhMDJmLCAweGViMjk0ZGYwLCAweDc3N2ViYWFiLCAweDdmNTUyMGM1LCAweDQyNDA2NWNlLCAweDk1YWY3MjNlLAotCTB4ZTIyY2U3OWYsIDB4Mjc5NGNhMjQsIDB4OWYwZGVhMDYsIDB4ZmE0ZjBmZDYsIDB4ZTlmYmMwMTEsIDB4ZDdkZDAzMTEsCi0JMHhlYmExNDNkMiwgMHhjYTNhY2RmYywgMHgwY2RiY2VkZiwgMHgzYjc5ODM2YiwgMHg1YzkxZTc5YiwgMHg4YTIyN2M3ZCwKLQkweGRjNjk4N2NlLCAweDA4ZGFmZjkxLCAweDYxZGU5ZmU4LCAweGE3NjRmZGEwLCAweGMyMWVlMjFiLCAweGVmNGZhYWYzLAotCTB4ZWZjNjg4NDgsIDB4MzI4ZDVjZjIsIDB4YjU5ZTkxZjMsIDB4ZTY1NTllOTAsIDB4NDU1ODY5MmQsIDB4YzczMDdmYmYsCi0JMHhmOTQ3NjYxYiwgMHhmM2RmYjM5ZiwgMHhmZGM3ZDJiOCwgMHgwNjQ1YjQwMSwgMHhlY2I4ZTNlNSwgMHgzZjQ0NDlmNSwKLQkweDdiNzdlMTA3LCAweDNmYzVlNTM4LCAweDA1OGYzMDM0LCAweDFkNzljYmZjLCAweDI1MGZhZTFjLCAweGIzZmQ4MGQ2LAotCTB4ZmZmNGVmZTEsIDB4NmU3MWMwMTEsIDB4MGU5NTczNjIsIDB4NDhmOTI4ZmQsIDB4ZTdjYmU5MDIsIDB4NWI3Yzg2NjUsCi0JMHhlNzQwZDRiMSwgMHg0YjdhMmYwOSwgMHgyNjdkOGFkZSwgMHg3YTcyYTVlNSwgMHgxZDNiZjRjYiwgMHhjZDE4N2I2YywKLQkweDQzODFiYWNmLCAweGRmZjJkYzYwLCAweDVlYjkzZDg0LCAweGZmYThiOWU0LCAweGY1ZGVjMWZiLCAweDhmOTEzZjgyLAotCTB4OGU2NThjM2UsIDB4ZTc5NjAyNTgsIDB4OTYzYTNlMWIsIDB4MDA5ZTc1NDAsIDB4NzA0M2JkM2UsIDB4M2JkNGJmZGQsCi0JMHhiZDgzYTVmYiwgMHgzYmNhYThmYSwgMHhmZGRhZjQ4NCwgMHg1YTU3MjQwOSwgMHhiOTFhNzdiYywgMHgxY2EwZjJkZSwKLQkweDE5N2QwMTQ4LCAweDlkZmUzMzkwLCAweDNkODMzY2Q1LCAweGFhZmE0ZWQxLCAweDU1ZjUwNTIwLCAweGU1MDMwNmU3LAotCTB4MTFkZTk5MTUsIDB4Y2Y3MGViY2QsIDB4ZWYyYjFmMTMsIDB4YzZkYmQ0ZTksIDB4NGQ5ZDdjMjAsIDB4ZTExZGY0NTksCi0JMHhkOTMyMGRkYywgMHgzZTNmZTQzYiwgMHhlYmUzY2JkZSwgMHhlMzBiYjI4ZCwgMHhlNDkzNGY3NSwgMHhjYjVkNzhjMiwKLQkweDBlOTZjYjM3LCAweDk4MTVkZmE3LCAweGQ5MTkzODg1LCAweDRmOWMwZjUzLCAweGE1MDc3NWUxLCAweDNmMGY3OGJmLAotCTB4NzQxNTlmZDcsIDB4MGUwZGE3ZTgsIDB4N2YwMzQ3NWUsIDB4NWY5ZjMyNWYsIDB4MjZiYzc3MzksIDB4ZjBhNzRmZmIsCi0JMHg4NzhiYTY2OCwgMHhmN2UwYzZmYSwgMHhjYjhmNjczOCwgMHhiMzY3NjdjNCwgMHgwMzI1ODc5YiwgMHhlZGQxM2YzZCwKLQkweGU4MjNmNjFkLCAweDczZDEzYzdmLCAweDcwZmQ4ZjQ2LCAweGViYzQ1NGQ3LCAweDBjODZkZDEyLCAweGFiYmExZWZjLAotCTB4NmU4N2JkZWQsIDB4N2EzZWU3ODMsIDB4MzEyNzYwZDYsIDB4ZmE0MDkxNWYsIDB4NDVmNmYxNjMsIDB4N2RmNzVmOTksCi0JMHgzZWYwNTgxMCwgMHg0OGU4Y2YzYywgMHg0YjlmMDA5MSwgMHgzMDYzMmQ2YywgMHgzOTgwYjA3ZiwgMHhmOGUyMWQ4NSwKLQkweDc5ZTBlZGIxLCAweDllMjZjYjBjLCAweDMwYWY3OGQ3LCAweDY3ZWUzZDZhLCAweDViYzlhNzliLCAweDEzYmUyN2JjLAotCTB4YTkyZTkwNWMsIDB4YTJlZDg0ZmMsIDB4ZjljNzRmM2YsIDB4ZjNjNzNkOWIsIDB4ZDJhN2YwNTksIDB4ZmJmMTZlZmYsCi0JMHg1N2RlOGExZSwgMHg2YjBkNzVmNCwgMHg3ZmE5ZjNhNiwgMHhmMDRkOWU5NCwgMHgzNGJjOTIyYywgMHg5YTRmMGVhZSwKLQkweDY1NTUxNTA2LCAweGNkNmFmMWUxLCAweDhhNWU2MTMzLCAweGU5NjA2ZDQ3LCAweGRkODBmYzgyLCAweDZlN2EzNmU5LAotCTB4NDdkOWYxYjEsIDB4MzIxNzZkOTEsIDB4NjY5ZjVmM2YsIDB4NmYwNjQ3ZGMsIDB4YTdhYjNmOTUsIDB4NmNiMmE5YmQsCi0JMHhmY2QyYjA2ZCwgMHg1N2VlM2IwNiwgMHhiNGU0Mjg1YywgMHhmYWYyNTliNiwgMHg2ZWM4M2FmOCwgMHgyY2YzMTAyZSwKLQkweDZiNTM3NjEwLCAweDIzZDg3YTlmLCAweGEwNWExZDhkLCAweDU5YWNiM2IxLCAweDVlMDE1NzZkLCAweDgxNWI5NzNhLAotCTB4MzNhNzBiNTcsIDB4YjBmMDhhMzIsIDB4Y2Y5Zjk5YjgsIDB4MWVmMmU1NTEsIDB4NGI3MDQ0OWMsIDB4MGY2NGEwNzYsCi0JMHg2NzMyMTY3OCwgMHhlM2FlMmM2OSwgMHg2YjhmMWUxOSwgMHhhYmFlZDNlMSwgMHg5ZDYyYmMwNywgMHhlY2FiYjg1YSwKLQkweDAxNzI3YzE3LCAweGRhMGEzZGZmLCAweDg3NTlhOWRmLCAweGJmYWQwZjQyLCAweGNhYTVkMGE2LCAweGQ1NWJmMWMzLAotCTB4ZGYzZDExMjYsIDB4MzIwN2VhYmYsIDB4ZjBhYTA3ZGEsIDB4ZmY4MTZiMGIsIDB4NGU3NzllYTksIDB4NzBiNjdkNDIsCi0JMHhhY2RmZTgxMywgMHhmYzI4ZmYwMCwgMHg0NGI1OThiNCwgMHgzMWQ0YmYyMywgMHhkNDk2MjM1ZiwgMHg3ZTVhZmFjZiwKLQkweGNmMGIzMjM4LCAweGU3NDYzYTY1LCAweDdkNTg1NTQ3LCAweDgwYjE3NGZkLCAweDFmZGZjZjQyLCAweDgwNDFmYjJhLAotCTB4YmU3OGI1YWYsIDB4MTdhZjVkMTYsIDB4MTFkNDRjNmYsIDB4ZDNjMDM5ZTgsIDB4ZmE2NGE3ODIsIDB4OWM2ODI3YWUsCi0JMHgyNDNkN2Y4OCwgMHg4ZjFlZDU0ZiwgMHhkNWNiZWIxMSwgMHhkYzNlN2U3YSwgMHhlYjc0ZTBiNSwgMHg1ZDI5ZWZmOSwKLQkweGZjNWVkZTEzLCAweGY3MGFlZmE0LCAweGY5YmRlOTA3LCAweDQyNjJmZDU5LCAweDlkNjUyOWU5LCAweDcyYmQwOGVmLAotCTB4YjdhZWZiNGQsIDB4YmVjOGM1ZGYsIDB4OGY5ODQ4MjcsIDB4NTc1ZjRkZTksIDB4MDBiZWJiMDksIDB4NjdiNDNjZWQsCi0JMHhlNzQwYmYzNiwgMHhlOWJmYmUyZSwgMHhkNTVmM2EwNSwgMHhkYTAyZWNmOCwgMHhmMzY2NzA5NywgMHhmN2YwODdiYywKLQkweDk4ZWNjZTIzLCAweGUxN2Q3NjQ3LCAweDc3NWQ4YTYzLCAweDg1ZmQ4MzE5LCAweDllNzNjZDkyLCAweGFmYzg1ZmY4LAotCTB4ZGQ1Mzg0Y2YsIDB4NGJiZjZhYjgsIDB4NDdhMDM5YzQsIDB4MzM2ZDljNjEsIDB4MTM2YzliZDcsIDB4ZDEwYmEzZDcsCi0JMHhmZDkyZTVmZSwgMHhkZGM3MDliYiwgMHgwOWJhZTU1NywgMHgzYWU4M2VmOSwgMHhlNmZiYzVkOSwgMHgwN2I3N2ViOSwKLQkweGI3ZWZiZGU2LCAweDJkMGY3NjkxLCAweDc5ZTNlMmQ5LCAweGVkMGY4YjY3LCAweDdmM2RlZDVmLCAweDBiYmY0NTM5LAotCTB4ZWI3OTFmMjUsIDB4ODdiZDhhYzcsIDB4NTc3YWVkZWUsIDB4OTdjYTA2NDIsIDB4ZjJiNWYzYjAsIDB4ZmEwYjBjZDYsCi0JMHhmYzJlYzIwNSwgMHgxNzNkZjFiMywgMHgxNGZlNGRmMSwgMHg0ZGJiZjdjNywgMHg2ZGVmY2YxYywgMHhkYzZmNzhlMCwKLQkweGQzZTI5N2QxLCAweDkyZmE5Yjc3LCAweDhlZWVmNTFmLCAweGY5ZWY4NDdlLCAweGU0ZGYwMWViLCAweDdlZDRkYjQ3LAotCTB4MWJlMDEzNTQsIDB4MzdjNDA0ZTMsIDB4YmY3NzM1YzAsIDB4Y2VkYmUwNGQsIDB4ZjFjNGRkZjEsIDB4NzZmMDM2Y2MsCi0JMHg3YWJjMGY3ZSwgMHhmYmY0ZmNlOCwgMHg4ZWNjM2RmZSwgMHhlMTg3YzE3ZSwgMHgzZTk3ZjIzZSwgMHg5OWQzMjlkYywKLQkweGE1OWY4YTY3LCAweGIxOWYzOWY4LCAweDFmZDFjN2U2LCAweGE4YmRmMDUzLCAweGVhMDg3ZmJmLCAweDdmOGQ4YTk3LAotCTB4MmZiYzQ2OGEsIDB4MjM5M2M5ZGEsIDB4MWNjZGYwM2QsIDB4MDc2ZmU4NDksIDB4MmZkNTdmZGUsIDB4MDg0OGNiMmEsCi0JMHgyMWJlOGJmMiwgMHg5Mzk4ZWE1ZCwgMHhlMWQ3MjNmNiwgMHg4MjQzNjQ3OSwgMHhiZjJiM2RmNiwgMHhlN2RkYTY1YiwKLQkweGM4ZjllMzZjLCAweDk5Mzc2NjMwLCAweGVkMzQ5ZTEwLCAweDE4YjlhZmVmLCAweGJjZmU3YmVlLCAweGY3NTk4NWRmLAotCTB4YWI3NzFjOTAsIDB4MTI2MzRmN2UsIDB4OWNmMDE5ZjMsIDB4ZDEyMmQ2MDIsIDB4ZTVkYTk2N2UsIDB4MTg4YmEzNGIsCi0JMHg0ZjVhM2Y5ZSwgMHhlMGNkYWM3MCwgMHhiYzJiYmQ3NiwgMHhiMmZjODMzYiwgMHhlZjFjNjEzZCwgMHhmM2FhZjE5ZCwKLQkweDZmZGQyNzg5LCAweGI0NTdmOThmLCAweGY5Zjg0N2ZiLCAweDc2M2M5M2M0LCAweDFhNGU2N2NhLCAweDJhYjkzNDMxLAotCTB4MmUwYmFlODgsIDB4YWI4OTczZjMsIDB4ZjJlNjAzMmUsIDB4YzZmZGY3ZjEsIDB4MDU4N2JlZDIsIDB4Y2VhODUzY2QsCi0JMHg0OTZkMDU1ZiwgMHhiZTVlZjhmMCwgMHhjMTliNWJiZiwgMHhiODUzOWJlMywgMHg5NzNjM2NhNiwgMHg5ZDdlZmM0OSwKLQkweGVhOGQxNzM4LCAweDUzOWI4MGI0LCAweDM3M2E0ZWUxLCAweGM5ODI1NGVmLCAweDhiYmFjZmNlLCAweGVmZmRmM2ExLAotCTB4YTY3MDdhMTYsIDB4MTNlZDIwZjksIDB4Y2MzYzc5ODcsIDB4YmZkNmU3OGEsIDB4YWIwMTQwNjksIDB4OGIzYzc1MzAsCi0JMHhlNGVjZjAyMSwgMHhlOTM1ZWVmNywgMHg4MzdmNmI3MCwgMHg3NzczZTQ0NSwgMHgxM2Q3MTU3ZCwgMHhkNTFkMDA5ZSwKLQkweDIzYjliOWU3LCAweDlhM2ZlNzQyLCAweDg3MjU1ZTA1LCAweDYxMGNlYTgzLCAweGJjMDQ3NzMwLCAweDM2MTllN2ZmLAotCTB4NmZlYzVkN2UsIDB4OWU4MDViNjcsIDB4ODVjZjNkNTEsIDB4MGYzM2FlNTMsIDB4YTZiNjBmM2YsIDB4MmI3ZGZlMTgsCi0JMHg3YTg0OGNlMywgMHhmYWE5ZDY0MywgMHg3ZjdlNDYzNSwgMHhjOWM0YzY3YiwgMHhmNjMxNDY5YiwgMHhmN2FjMDMwNiwKLQkweGYxOTRiZjQ1LCAweDhjNGU3ZjM4LCAweDRkNzVmNzE3LCAweGFjYTM3M2M2LCAweGFmODllYWQ4LCAweDQ3OTllYWE2LAotCTB4MzMyNmRiYzcsIDB4NzljNDNiZDYsIDB4ZmUwNDkzNTEsIDB4YmU2MDhmYTYsIDB4ZGY3ZGUwMTgsIDB4ODliOWY1NjEsCi0JMHhiZTc0Zjk3NywgMHg5M2FmMDA5YiwgMHgyMWJhNWNmMSwgMHhjZDljZmU3OCwgMHgzOGY3ODE2MCwgMHg4YzNjYTRjYiwKLQkweDdmNTY2YTRmLCAweDY0Zjc3ODMzLCAweDk0ZGU0Zjk0LCAweDhlOWQ3ZDA2LCAweDllNjNmOWMzLCAweGY5ODk5ODhmLAotCTB4MmNjM2MwNzksIDB4ZTcyZmRiM2QsIDB4NWUyMzdhNzEsIDB4ZWQxYjU2ZGMsIDB4MmE1ZWU4ZjMsIDB4MjUxNDdlZDEsCi0JMHg3YmQwYWYyZiwgMHg0ZjJmMjA2OCwgMHhlMDI5OWM3NCwgMHhhMjlhNzk4MywgMHg2ODYzNzlmMSwgMHg1MGNlMWQ3YSwKLQkweDhhMTZlOGUyLCAweGY5MDg5N2FmLCAweGU1YzhhMjVjLCAweDllNWNiNTBlLCAweDdlODIzYTQ1LCAweGM4ODkzZGM2LAotCTB4MGI0NTMzNTcsIDB4NmJmOWE0ZWIsIDB4NzM5NDdiYzQsIDB4ZjA2NGNmZDMsIDB4MGM5OWU5N2MsIDB4ZmUzODdmNWUsCi0JMHhjY2M3ZGYyZCwgMHg0NTQ2OWNmYywgMHhmOGMzNmIzZSwgMHgyN2ZiY2FmYywgMHhjMzMzYjY4YiwgMHhmMDJiZjM0YSwKLQkweDFmZjFmMzY4LCAweDdlNDM1OTZjLCAweGNjYjdmNTUyLCAweDFiZTkwN2M3LCAweGM2NDk3YmFhLCAweDdhODhmOWVlLAotCTB4NDljMjVmZTksIDB4NWIxYTY2ZWUsIDB4N2I5YmQ1ZmEsIDB4MWRjZTUzOGUsIDB4MDM3ZTYwYWMsIDB4NTUzMDBmYWYsCi0JMHg2Y2I0NzQxZCwgMHgyYjJjNzNhNiwgMHg5YWZiZmUyNCwgMHgxZTUxNDU1ZCwgMHg2YmU2MGM1ZCwgMHg4YWRhNDQwYywKLQkweGU5NzNmMzFmLCAweGZiZTcwOWRlLCAweGVlNjMyYjNiLCAweDYwN2U4NDliLCAweDRmNTFiNDQ1LCAweDdmMzFlY2U3LAotCTB4NDA1NjU2NTQsIDB4YzkxNjM2ZWYsIDB4MDQyMTRlNzQsIDB4NmViMTkzODIsIDB4N2ZlYjA2YjYsIDB4MjNiMGZmYmMsCi0JMHhhMjRiYjI4ZCwgMHg1MWQ3YjNmZiwgMHgwMmJiNGQxZiwgMHg0M2ZlYTdmNCwgMHgwZjEwMWQ5MywgMHhmNzEwMWQ3NSwKLQkweDdjZjRjM2Q5LCAweDhmODIwM2Q3LCAweGZkZTczZjNkLCAweDM3ZjcyODVmLCAweGU1M2FmZWYzLCAweGZmZGUxNmZlLAotCTB4ZThiZjMyOTksIDB4NWZkY2Q0NmYsIDB4NGJmZmI5YTUsIDB4NjI3YzRmZGUsIDB4ZmEwZjY0Y2IsIDB4YTU5Y2M1YWYsCi0JMHhlODk1NmUyYiwgMHgwNWNhMzU3NywgMHhmNmFjNTU5ZiwgMHg3NDJiN2UxMSwgMHhjYzViNzk3YiwgMHg2YjgyYmE3YywKLQkweDc0Y2UyYjhmLCAweDIxMWZhMzk2LCAweGExNDY3NTQ3LCAweGU1OTA5ZTlkLCAweDc1YmI0NzI4LCAweDJiMmJiYTZiLAotCTB4NTNjNWRhMTMsIDB4ZDYxMThmMjQsIDB4Yzk3YjhlY2QsIDB4NDVlYTRjNmUsIDB4YmUwYjk3MWYsIDB4ZjlmMWIyMmQsCi0JMHgzY2MzN2MxNCwgMHhiZjBiMzMwMywgMHg4NDdlM2NmZCwgMHg0ZjM1NDEyYiwgMHhmM2MwZjVmZSwgMHg3OThmNWI2YiwKLQkweDNjY2Y1ZDQ2LCAweGJhZjUyY2JhLCAweDg5ZTgzZjE0LCAweDM4NWRjNzZjLCAweDJlMWVkNjlmLCAweDA2M2RhOWY5LAotCTB4MzVlYzUwZjMsIDB4ZWFlMWZkZjEsIDB4OTg3YzhjOTYsIDB4YmI3M2M5N2YsIDB4ZWZkMGFhMzMsIDB4MWQ0MGZlMTIsCi0JMHgzYzdjYzNkYSwgMHhjM2RiODJlNywgMHhmMjRmZGI4ZiwgMHhkYWJiNzA3ZCwgMHhiZjMwNjM4ZCwgMHgzZGIwNmQwZiwKLQkweGNlMDVlOWFjLCAweGQ4OWQ0YzhhLCAweGQ3OTFiMDQ3LCAweGFiM2I5ZWM1LCAweGQxMmU3YTQ3LCAweDBjNzk5Y2I1LAotCTB4NTJhZGZiZWQsIDB4MTEyN2RmZTgsIDB4ZTVlYTlkY2YsIDB4NjZlNjhlNzcsIDB4OTBkNDNkNzIsIDB4ZWI4Mzk4ZTMsCi0JMHgzNDY0YzkyYywgMHhlODRkNjRiZSwgMHg5YjdmOWE3MywgMHg4NTcyZWRjOSwgMHg4NmYzN2JiMCwgMHg4MDZjOTk0NSwKLQkweGFlZTNjMmU3LCAweGFhYmZiODM1LCAweDFlNTY0YjZhLCAweGE1Njc4NWU2LCAweGZjYzkyZjE3LCAweDM3NmFiY2RhLAotCTB4ZjFiNmFiY2YsIDB4ZDU4NTZhYmMsIDB4Mzc5NDFjYmYsIDB4ZWRiMzNhN2IsIDB4NjMzYTUzNjEsIDB4OTE0ZGZmZTMsCi0JMHg3ODU5MTAzMywgMHhlOTRjMmNiNiwgMHg3NGI5MzliZiwgMHg2MTdiY2YxNCwgMHg0NzEzZGQ3ZiwgMHgzOWI5NDYxZSwKLQkweGZlNjBmMDg0LCAweDA4ZTBmODdjLCAweDU5MWQwYmQ0LCAweGU4MGIzYTkxLCAweDczNjk1OThiLCAweGFjZmU0NjllLAotCTB4ZGEwM2ZlMWMsIDB4MTYxNDUzMmYsIDB4Y2YwZTdmZDUsIDB4Y2M1ZjEzY2YsIDB4NDJhZTczNGEsIDB4ZTYzYzcxMzgsCi0JMHg1ZjQ2NWM0MywgMHgwZWIwNWRjMiwgMHhlZDMyYWJkNywgMHg4OTBkNzU1MywgMHg0ZWZjODU3NCwgMHhlOWUxZTA1OSwKLQkweGViZTEwYjRjLCAweGZkMTk5MDEwLCAweGU1MGUwNTE0LCAweDJmZTdlMGZkLCAweDlkN2NjM2Y3LCAweGUyODY1M2FiLAotCTB4YjRiZTRlNzcsIDB4ODU5OTZkYTIsIDB4ZDJmYmY3ODEsIDB4YmYwNDhmNWMsIDB4ZmFjNzUzYmYsIDB4NGRmMWE4NjMsCi0JMHhjMDU4NzhlMSwgMHgwNmU5MGRiMSwgMHhjYzk0NzNhZCwgMHhkZWYxNDExYywgMHg1NTQ4ZDJkNCwgMHgzODg0ZGE3ZiwKLQkweGQ3Y2UwOGU2LCAweGY1NTU0YjRlLCAweGFhZmEyYmNiLCAweDdmM2RkZmM2LCAweGM0ZmVlYTkwLCAweDdkNDE3ZjMwLAotCTB4YmJkYmJmOTAsIDB4ZTdlMWU0OWYsIDB4NDU0NTQ1OGYsIDB4YmZiY2JlZTAsIDB4MzZmNjdkYjcsIDB4ZDc3NDVlZmUsCi0JMHg3ZDFkYjI1MywgMHhiNjdiNDVkYSwgMHgwMzQ3OGRiZCwgMHhiMzlmYzQ1ZiwgMHg4ZGE0M2NhMCwgMHgxZDFmNjZmMiwKLQkweGQ3M2YxOTkyLCAweGFlMGZhMWMyLCAweGZlNjM5ZDBmLCAweDEwNzdmMTQ3LCAweDI5MDdhYjdhLCAweGNiMTJlZWYxLAotCTB4ODAxZGZhN2UsIDB4M2EwZjVkMWIsIDB4NDFlYTI5OTgsIDB4ZWQwZjJjNzksIDB4YjdmYWM1ZTEsIDB4Njc1NzZmMjgsCi0JMHhiNzNiZWJlNiwgMHg4YjRmOWY5YiwgMHgwNTdmNTNlNywgMHgzZTA3N2VmYywgMHg2NWUxZmU4OCwgMHg0YmI1ZTUwZiwKLQkweGZkNTM0ZjVhLCAweGViOTMyYWFjLCAweGE1YjRiYWU5LCAweGRkOGJmNDdhLCAweDE4MWRhMmQwLCAweDA2MmFmYTAzLAotCTB4Y2VkZmM1ZjgsIDB4N2RjMmVmMDYsIDB4ZGM1MTU5NmMsIDB4OTUzY2JmNWYsIDB4MmJlNDM4YjEsIDB4OTQzOWU3OWUsCi0JMHg1M2JmNGIxOCwgMHg4Y2E5YTRiYywgMHg4ZTVkZDdhZSwgMHg5NzVmZjlhMCwgMHhjZDRmYjRmZCwgMHg3NTQ0OTJmMywKLQkweDk1YTk4OTg4LCAweGM2YmY3MWFiLCAweGVlNGYwOGExLCAweGM0ZWY3ODMyLCAweDg2NTFkZGRmLCAweGM1ZGJhYjc4LAotCTB4OTQ0YzkxZjcsIDB4MGE1ODI4ZGYsIDB4MTk3MzRkNmQsIDB4NjY1MTNmM2QsIDB4MTdmMDI0ODcsIDB4ZmI3MDk3YzYsCi0JMHhiZTZkMTEzYiwgMHg0NmUwZjcxNSwgMHgyYmJiNDdhZCwgMHg3ZmZkN2QxYiwgMHgxOGM2N2E4NSwgMHhlNjI2N2E0NSwKLQkweDdlZjRkZGYyLCAweDNkMTM2NWY3LCAweDg4ZjQyNWRmLCAweDM1YzM4M2ExLCAweGFlOTNiMmZhLCAweDU5ZjBmYzJiLAotCTB4NzdlYWI2NjYsIDB4NGYwOTBjN2YsIDB4OTFmN2YxZTksIDB4YzY4YzFkMGQsIDB4OTAzY2JiOGYsIDB4YWZiZDY1NWEsCi0JMHhmYTc3ZjgwZSwgMHhjMjQzNWI1ZCwgMHhmYTVmYjRhNywgMHg0MmM5NzhkNSwgMHgwZjQ2ODg2ZSwgMHgxZTFmYWE1ZiwKLQkweGE5ZTg0MmMzLCAweGYxMTFlZmFiLCAweDVmZWExODQ4LCAweDcyY2NiZjY4LCAweDMwMTJkYTQ0LCAweDYzZDBlOTllLAotCTB4NGQ5OTg4NWQsIDB4ZmZlNDRmYjQsIDB4MDUzOGNkMDAsIDB4MDA4MDAwNzYsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg3ZGM1ZmYwMCwgMHhkNTU0NzgwYiwgMHgzOTllZjBiNSwgMHg2NjQ5MWU2NywgMHg5OTIxMjcyNiwKLQkweDRjZTIxMDI0LCAweGUwMTAyNDVlLCAweDBmMDgwNDI0LCAweDg2MDI0MGNiLCAweDA4NDAxM2E3LCAweGJjODBlODM0LAotCTB4MmIxMDEwMjUsIDB4MDMzN2U5NWUsIDB4NjBkMjIwNDksIDB4NDU0MDUyODMsIDB4NjhiMDUwM2IsIDB4YWFmOGZmNmQsCi0JMHgwMTMxZjVhOSwgMHhlOTRhMGZlNCwgMHg3YWI3YmQ2MCwgMHg1MjAzNmI2ZiwgMHhlMDhkNDUwNCwgMHhiMTZkY2ZlZCwKLQkweGJkYWQ2YmZlLCAweDMyNjczMjRmLCAweGZkZWRlZDQxLCAweGJlM2VmOWZmLCAweDNlZjY3NTlkLCAweDdhZjZiMWZiLAotCTB4YjMwZmI1ZWYsIDB4Y2I1ZDhhY2EsIDB4MGFmYjE4OGIsIDB4OTMxODEzN2YsIDB4YmIzMDJlOGUsIDB4ZGE2NjMyODYsCi0JMHhiMWVjYzY3ZCwgMHhiMjgxNjYzMSwgMHg5NmJlYTIzYywgMHgwNDZiNGYzMSwgMHgyZTQ5OTVhYywgMHgxOTIzNjMyMywKLQkweDM5NTBiNmZjLCAweGZiYzFkYjBiLCAweDYzMWY3N2NjLCAweDU3NmVjNjRlLCAweDRhNmRmZjE4LCAweGIxODMyYzY1LAotCTB4ZWQwNGRmYmYsIDB4MGZkZTdiNTMsIDB4ODUyZWEwMWIsIDB4OTY4YmMwYjEsIDB4YmJmODYxZTAsIDB4YzcyZmI2NWYsCi0JMHg4OWUxZjUwNSwgMHhlYzM5ZmFhYywgMHg1NTY3MGU0NywgMHhjZGRmYTFkOSwgMHhkYTE1YjI5ZCwgMHgzOTU1OWIzMSwKLQkweDlmZjgwNmVjLCAweDZmODJmZjM0LCAweDhiYTc3ZjM5LCAweDEyYjdmZmNmLCAweGZkZmQ4NGRiLCAweGIwODRjMjc2LAotCTB4N2VkNWU2MDcsIDB4OTIxMTg4ZmYsIDB4MzFkZmE3YWIsIDB4NjNiNTMzMmUsIDB4NTY3NWQ3NGEsIDB4ZDdiYWQ4Y2EsCi0JMHg2MDNiNWMxMiwgMHhjMWZiMzM3ZCwgMHg1ZWJiODAzMywgMHhiYTBmMDRiNSwgMHhhNDMzMzllOSwgMHg2ODM5Njk2MCwKLQkweDhlNzVmYTgwLCAweDhjMmY3Y2FlLCAweDVjN2FmZTVmLCAweDdlODMwZDg4LCAweDE5OTM4ZjVmLCAweGFlNTJmMzhjLAotCTB4YTVlMjBjNmYsIDB4MTU0MWY1ZmMsIDB4ZjI0YzA3MDYsIDB4YTBjYzhiMTUsIDB4M2M5YmE0ZGQsIDB4NWY3OWYxNjMsCi0JMHhhZjVlOGRmMywgMHhmOWM2MDI1NiwgMHgxOGE3Y2VmYywgMHhhZGJiYmRmMSwgMHg1NTI5YjVmYywgMHgyMjYyNDA4NiwKLQkweGM5NTRkNzc0LCAweDE2YzYwOGQ4LCAweDliMGQ5YjVmLCAweDZiOTJkOGMyLCAweDVhZmIwNGYxLCAweDc1YWJmM2Y4LAotCTB4ZGY3MDUzNjksIDB4NDk4NjZlYWUsIDB4NmM5NjNhYzMsIDB4MDE3ZDBjMzYsIDB4NzY1Y2M1ZDYsIDB4MzBmMDBmMzUsCi0JMHhhZGEyYzA3MywgMHg1MzM5ZTYwYywgMHg2NzdhZDIzMiwgMHhkNjBhNDkwZSwgMHg3MWRiZDM0MywgMHg3M2UwYzdiZiwKLQkweDY2NDg2MWQ2LCAweDNkYjk3YTZjLCAweGQ2ZjE4NDYwLCAweGRmYTg1MzVjLCAweDFhMmU2YmRhLCAweDY0YjVlZDZmLAotCTB4YjM1ZGQ3ODIsIDB4ZGFlNGI5NTIsIDB4Yjk2ZTdhNjAsIDB4ODAxZTY0NjYsIDB4MWMwMzVlOTcsIDB4ZGIyNzNjMDAsCi0JMHgzZmQ3MGFiNywgMHg0YTk2ZmViMywgMHgzNWI3Y2YxYywgMHg4YjY3ZDRhMywgMHg4MmIzMTdhNCwgMHg5MmY0MDU3NCwKLQkweGIzZDZkY2JlLCAweDA1ZjZmYWZlLCAweDJmZTg1NTMwLCAweGIyZjQ0YmM1LCAweDg4ZjJjYTE0LCAweDBlODI2NWZhLAotCTB4NTZiNmYxYTIsIDB4YTUzN2ZmZWMsIDB4NWY0MTFhOTcsIDB4M2NhMTZjNGIsIDB4NTRjMWUwMjMsIDB4ODU2ZWE3MTcsCi0JMHg3MTQ5NWNmOSwgMHg2Y2JjNDE0ZCwgMHg2ZmUzODA3OCwgMHg2ZTViYzk4MywgMHg3ODZlZjk4NywgMHhjZWMyYTBjNCwKLQkweGQ5NDczYmIwLCAweDMyZjAwY2FkLCAweGIzM2FkZGVhLCAweDE3NmU4MjJmLCAweDVjYzYxYjVjLCAweGQ3MzlmZWIwLAotCTB4N2RiY2E5NzIsIDB4YWUzMzZmYTAsIDB4NzliNWYxN2YsIDB4YThjMzRmMDIsIDB4MjM2NGQ2NjQsIDB4NDZkOGM1MWIsCi0JMHg0ZTE3NTdkYywgMHhiM2VmOTkyOCwgMHg3NTE3ZGY5OCwgMHg4NWVlZDNhMywgMHg2NTM4YmZmMSwgMHhiODhiZmFhMiwKLQkweDU1MzAyNTJmLCAweDljMDllMDRmLCAweDUxNjgyOTk3LCAweDJlYmNjMDBmLCAweDgxNDA1ODlhLCAweDlmNzNiOGFkLAotCTB4ZGYwMDA1OTEsIDB4NDFmNGExNGIsIDB4YjA3YjVkMDksIDB4MjkxZGU1OWQsIDB4OTJlZDhlZDgsIDB4MDRhOTI3OTgsCi0JMHgyZGViMDlmMSwgMHgwNTdjNjNlMCwgMHhjMjE5MmVmZiwgMHhmZDQyZjdmOSwgMHg5NjViMzMyNywgMHg4MWUwNzMxYiwKLQkweDg2NTUyYTc0LCAweDljZjI3ZTc1LCAweGJlNzgyNGM0LCAweDRlMWJmZDZhLCAweDk1YWIxZTU4LCAweDUwMjk2NDBlLAotCTB4Y2MxMGQxYmYsIDB4M2Q4YzQ5MzcsIDB4ZTJmNmZiMjIsIDB4ZDg1YTNlYmEsIDB4ZDA2NTZmZmEsIDB4ZjNjYjdjZWUsCi0JMHgwZDU3ZGMwZSwgMHgyODcyYWRhZiwgMHgwNTY5ZmIwZiwgMHhlZTYwMDY3YywgMHg2NTUyY2RhZCwgMHgyNmMzNDZkMCwKLQkweGExZWQwZDU0LCAweGEzOWU4ZDZmLCAweGI1ZjU3Y2U5LCAweGFiYTdhMjZjLCAweDJmYTE5Njc1LCAweGRkMDMxZDIwLAotCTB4NDE1YWYzZTIsIDB4ZmQyMTc3ZWYsIDB4YWNlYTY5NDMsIDB4ZTljOGY0MTQsIDB4NWFlYmEzNWYsIDB4NWFhZGNiOTksCi0JMHgwMDMwNjI1YiwgMHhiZmY5OWJmMywgMHhmNTAwZmU4MCwgMHhmMmE4NWY2YiwgMHgyYmJhNDQ0ZSwgMHg1MDc5YTgzMCwKLQkweDMyZmMxMWFjLCAweGUwZjgzYTUzLCAweGNmODNlNDU4LCAweDc4N2FkNDUyLCAweDU3OWFmOTNlLCAweGMxZjNkNzNjLAotCTB4YzY3NGZlNGIsIDB4YmM0YjE5ZjIsIDB4ZDVjNjkwYjYsIDB4ZTgyMmRmZTgsIDB4ZGZmNDg0ZGQsIDB4MmQ4M2RlOGYsCi0JMHhkOWZmZmUwNSwgMHg3N2ZmOWVkZiwgMHhkYjkwZjNmOCwgMHg2YmUyMTZmNywgMHg3ZmNhMWM5YSwgMHgzYjRiMDUyYywKLQkweDk0ZTRkMWQxLCAweGU3ZTkxOTJhLCAweGIzY2ZjYjliLCAweGQ1OWU3ZTQyLCAweDdkYjVjZmM5LCAweGI3ZjBjZmM4LAotCTB4MDRkNzg3ZTQsIDB4ZDg1YTU0M2YsIDB4MmUyMmRlMWQsIDB4N2JkYjY3ZGYsIDB4M2Q5N2ViZmEsIDB4ZWEwYjljZTksCi0JMHg3ODE5NzQzZiwgMHhmMzQzZmY3ZiwgMHhjYTViZjBmZSwgMHg4NmZkN2ZmZCwgMHg0MmFmZmY3MiwgMHg3OWNiNDdlZSwKLQkweDljYTFmZDA2LCAweGMyZDVlY2ZmLCAweGY3ODFlYTIwLCAweGQ0MDVlODE5LCAweGI4MjRhZjdiLCAweDQwM2QwYjBlLAotCTB4MzEzZTIyN2EsIDB4ZDAzZDIzNzgsIDB4NWZlNzdiOTAsIDB4N2YwM2QwZmIsIDB4YTNmZGJjNDMsIDB4M2ZhMzQwN2EsCi0JMHhmZTM0NWY4ZCwgMHg5YTIxZjhkMCwgMHg5ODdlMzQ3ZiwgMHhmMTM1MDNmZSwgMHg0MDFmZGM1ZSwgMHgxZmU0NjFjYywKLQkweGFlMGNmMDM5LCAweDUwOTVkNmEzLCAweGYxYTk3YzhjLCAweDBjMTdkYWQxLCAweGY0YmQ2N2M0LCAweDFlOWJlMDgzLAotCTB4MGJlYmQxM2UsIDB4M2UzNDFmOGQsIDB4NTZhNmY4ZDEsIDB4MjhiMmMzZjAsIDB4YjUyNjM4N2UsIDB4ZGUxNjNjM2UsCi0JMHgxNWY2ZWVkYiwgMHhmODdiNTNiOSwgMHhkMTczY2Q2MywgMHg3YTRmYTE3YSwgMHhjYjRmNDg2MiwgMHhkMjE4ZWE1MiwKLQkweDkxOTQyZDUzLCAweDgzZTk2NGY0LCAweGRmZGQ4YTllLCAweDEyNmU5ZThlLCAweDllOGViZmVkLCAweDZhNjZkYzJhLAotCTB4NGY0ODNmZjcsIDB4MzE5MWVlMTUsIDB4ZmJiMjY5ZTksIDB4NWM1NzY4OWYsIDB4YTk3ZGZiYWQsIDB4YjU3M2U2MGIsCi0JMHhiYmFjZTQxNCwgMHhiZmE2ZGU4NywgMHg5MGRkYjhjNSwgMHg3ZTkxNTc2MywgMHgzYWY5ZTIzYSwgMHg4MzAzY2MzYiwKLQkweDJiZWVkOGY1LCAweGQ0Nzg4NzU2LCAweDY3ZGI1MmU4LCAweDg2NTgwZWNkLCAweGI2ZTUwMDc0LCAweDljMmFlZjZjLAotCTB4YTA3YzQ3NmYsIDB4OTMzN2ZkNjgsIDB4OTZjZmI0NzcsIDB4NTNkOWIwOTQsIDB4ZDYxZGZiODQsIDB4ZWNiZWZmZTksCi0JMHg3MmRmYjVjNSwgMHhkZmRjNmI5ZiwgMHhkZGY4NmU0YywgMHhkMTdiNzRmZiwgMHgyNzJkOGVlZiwgMHg3ZDlkZmYwMiwKLQkweDdmMGU1OTlkLCAweDk0ZjA0N2Y2LCAweGY2MWUzM2Q3LCAweDY2MDI4N2U3LCAweGNiZjIyZjYxLCAweGZlYWQzMmJjLAotCTB4MTkxZTJkMzcsIDB4M2RmYzAzZTUsIDB4MzBmMDQ2OTYsIDB4YzM4MWUxMmIsIDB4MGFlMWQzODEsIDB4ODdmNGU3OTgsCi0JMHg1ODAzZWJiYiwgMHhhMjdjNzkzZiwgMHgwYzc5OGZlOCwgMHg4ZmZkYTdhYywgMHg2ZTE1YmMwZiwgMHhjMmRlZmQyNiwKLQkweDk0ZWJlZmYxLCAweGUwMjM0M2JkLCAweDExZWQ4MDUyLCAweGJjMTQ1OTcwLCAweGM4NzdiNzlmLCAweDdlYTE0YzlkLAotCTB4YTBhZjljODIsIDB4YzIwOTQzN2YsIDB4N2U4MjdmNWEsIDB4NTVmOGU3OTksIDB4YzUyY2YzYzAsIDB4M2VjMDc2YzAsCi0JMHhmMDM5NGJhZCwgMHg2Yjk0NTVjNiwgMHg3MDY2MDY2ZCwgMHhmZDgxZTA0NSwgMHgwNGM5ZWJkZSwgMHgyMGM1NzhiYSwKLQkweDdiMDhmZmUwLCAweGY4NWIxOTcyLCAweGI4NGY4NzAyLCAweGM4MTJkNGZmLCAweGJlMDJmZDE1LCAweDliNzQwOGQ3LAotCTB4MDkxZTBkNWEsIDB4NjY1MzViZmEsIDB4N2JiYjY2MDgsIDB4NWI4NGZiZTMsIDB4N2NkYWFiZDMsIDB4ZGZlYTU1NDAsCi0JMHg2Zjk0ZTY2NywgMHg2ZDFhM2VmNywgMHhiZDM2N2VmNCwgMHg4YjdjYjIxZiwgMHg2NzhmZTdmMSwgMHg3YjBjNjA5ZSwKLQkweDFmODIwZmY4LCAweDYzMTM0YTJhLCAweDRiNzc5ZmQ2LCAweDAxZDdmZjFjLCAweDQ3ODdjNmQ2LCAweGMxZmQ2MDczLAotCTB4NTk3NWZjMTgsIDB4MWEzNjE3ZjQsIDB4ZDZmZjNlMDUsIDB4MzYxNjc0ODIsIDB4NmJmZWY4NmIsIDB4MzI3YmUyMGIsCi0JMHg4Mjc0ZGQ2MywgMHgxM2UzMDM3NCwgMHg3ZmRjN2ZmYywgMHg3Y2M5MzZmNSwgMHg3YzI4OWViOSwgMHg2ZmJkNjhkZCwKLQkweDIwNTdjMGM2LCAweDM3MmNiZjZhLCAweDZlZTlmN2MwLCAweGJlZjNkMGI5LCAweGU4N2VmZjRiLCAweDRlZjVmYjQ2LAotCTB4ZGQwNWYxYWYsIDB4ZDhlOGQ0YWUsIDB4NDRmN2EzYTMsIDB4OTlmNDRiZDksIDB4MDI1MDYyOTgsIDB4YmQ2YjhmNDAsCi0JMHgyZmU4Y2Q3MSwgMHhhOWE3ZjBmNCwgMHg4ZTE0ZjEwYSwgMHg4N2E5ZTNkMywgMHgxNTU1Y2NmZiwgMHg0NDhmYjIzNiwKLQkweGU0MmVlYjdiLCAweGJiYjFhZjVmLCAweDZlYzdlNzNkLCAweDAyOWU2NmJhLCAweGQyOWEyYmMwLCAweDQxZDI3ZWY4LAotCTB4OGQ4MGFlY2IsIDB4MDllYTgyZTgsIDB4Nzc5ODhkY2UsIDB4NDZiNjNmMzQsIDB4ZjhhM2UzYzEsIDB4YzkxZmYwNTcsCi0JMHg4MDA3ZDQwZiwgMHg2Zjk0M2NhNywgMHhhZWNkNjcyOSwgMHhiMzUxM2EwOCwgMHgzMTNlOWUzOSwgMHhhNzk0NmFiMCwKLQkweDhlZGM0OWUxLCAweGQyZjM2NzBjLCAweGZhYTA2ZDliLCAweDFmYmU2Y2IyLCAweGUzODY1MTFlLCAweGE3YTBmMDIzLAotCTB4MmJmYTEwOWYsIDB4M2MyNmViMTEsIDB4ZDZkMTQ4MmQsIDB4MDMzNTUwNWQsIDB4ZTY0ZTE1ZDYsIDB4NzNiMmQzZjUsCi0JMHg3YjMyMDU3NywgMHg2NmZlZThlMCwgMHgwNTU0MTc2NCwgMHhjZmZiMjI4YSwgMHg1ZDc4ODMzZiwgMHhjZGU2ZjAyMCwKLQkweGViMDY3NDFlLCAweDRiNTA3OTM1LCAweDExZjQ0Mjg0LCAweDhiNTA3OTQwLCAweDRkZTg2MWY0LCAweGJkZDllOTFmLAotCTB4ZjUxMDMzZTgsIDB4ODM3NGM3YmUsIDB4YmY3YWIzZjcsIDB4OWY3YTg5ZWYsIDB4Y2RiZTUyOTksIDB4NjZkZjYyZmIsCi0JMHg2NTZiZWQ0NCwgMHg0NDU2YmVkNCwgMHgxYzFhMzVjMSwgMHg0ZDVmYzlkNCwgMHhkYjY5MmYyZSwgMHg3OTg0ZThkNSwKLQkweGU0MDQ3NWRjLCAweGU3YTQ4YjJjLCAweDc3Y2Y0NDUxLCAweDhlZmQxYTI5LCAweGJiN2E4MzNlLCAweDA4Y2I5ZTg3LAotCTB4ZjYyYWRkOWUsIDB4MTc2NjMwMmQsIDB4OTQyYTlmZWEsIDB4ZTA3YjYzYzMsIDB4MDg4NzI4MzksIDB4MTllNTViMWUsCi0JMHhjNmFmYTkxZSwgMHgzZGI5NDJlZCwgMHgzZjZiNDliZiwgMHg2YzJmZGE5ZSwgMHg5OWJiZmFkMCwgMHg2NDdkYjVlYSwKLQkweGQxNTRlZjgxLCAweGMzYjkwYWJlLCAweDYwY2UxMzAyLCAweGY4NTdlYWZkLCAweDNkMDdmNWZiLCAweDBmYzg2ZTY3LAotCTB4ZDk3ODUxMmQsIDB4YTIwNzA1MWYsIDB4MWFmZWVmZGEsIDB4ZjUxMGQ2ZmQsIDB4ZmFhOGU2ZmUsIDB4NWY3ODI4ZTYsCi0JMHg3ZmE0ZGMxNCwgMHgwMzUyZjE3ZiwgMHhhMDYyZTFmMSwgMHg2ODg4ZGMwNywgMHg4ZmE2OGNiZSwgMHhlZGJiYjM4NywKLQkweDZlN2Q2ZTljLCAweGE3N2Q5MWIwLCAweGY1ZTlhYmUzLCAweGUwZmM3ZTFjLCAweGEyYTZhYWNjLCAweGQ2ZmIzODA4LAotCTB4ZGZmNzAwYWEsIDB4MjY5NzQ4MGQsIDB4NzMyMDdmYzYsIDB4ODNkMDEyMDMsIDB4ZjliOTBmYTksIDB4YjJlOGJlODMsCi0JMHhmM2RmNWEyMCwgMHg5ZmUxM2ZmYSwgMHgzMzJmNjgxOSwgMHg0YzcyNWQ5ZCwgMHg5MmVkYzNkMiwgMHg2NzQ1ZWYzNiwKLQkweDQzZTExNjM2LCAweDQyYTlhZTBkLCAweDVlZmE3YTdmLCAweDlmYzBiYWZkLCAweGFhYzJmMDE1LCAweGJiMDhjYzhhLAotCTB4Y2FhMGIwMjgsIDB4YWQ0ZWIxMTMsIDB4YmYyZjk0ZmQsIDB4ZTdiYzcwOTIsIDB4MWQ1NDE3YjMsIDB4NDk5YWZhODIsCi0JMHg5ODNhYmNhMSwgMHgyZjMyNGQ2NywgMHhhODRhNWY0MSwgMHhmODg5ZDdhZiwgMHgyNTU3OTRjZCwgMHg5YWNiZWEyZiwKLQkweDg2ZGU1MGY4LCAweGIyNzU4OGEyLCAweDY3NWM3Y2Q2LCAweGVkMTJmZGZiLCAweGY2MWVhMDRmLCAweDk4YjRmMDA3LAotCTB4OGYwYTIzODEsIDB4MzMxZTY0ZWUsIDB4YzRmYTgxY2IsIDB4YzI0ZjRkYzQsIDB4OTdlZWM3N2IsIDB4N2U5ZWExMzYsCi0JMHgyNzNmNTM3ZiwgMHgzOWM5NDNmYSwgMHg5NjNjZWVkYywgMHgxOTczOTM3OCwgMHg3NzA5ZWRjMCwgMHhkZjZkYmM5MCwKLQkweGEzY2E5OTNlLCAweDk3NWI2NzkyLCAweGQ5ZGJkOGMyLCAweDg1NmNhYWFiLCAweDc4NDg5ZjU4LCAweDY5NzA3ZDNhLAotCTB4ZWZhMDE2ZDUsIDB4N2EyZWQ5MzMsIDB4MzhhYzk3ZGYsIDB4ZGVkZWQwZGIsIDB4NWQ4NzYyNjEsIDB4ZTI5NTJmMzgsCi0JMHg1YTc3OGI0OCwgMHg3Y2UwNzc4YSwgMHhhMjcxMGNiNiwgMHg0N2U0YjlmZCwgMHhhMDMyNTM1NSwgMHg5MzQ2OTJkZCwKLQkweGE3NTQ3NjhhLCAweGY5YzJjOTUxLCAweDM2NGM3NmY5LCAweDA2ZDJmZDYzLCAweGExNmUwNjUxLCAweGZmYmZmNWYyLAotCTB4ZWQwMWRlYTQsIDB4YTgzNzFlYmIsIDB4Y2RmZGExMDcsIDB4MzViZWI0NWYsIDB4NGQxNWUwMGMsIDB4ZDE2ZTJhMzksCi0JMHgyODA3ZTA2YiwgMHg3ZGI5Y2UzMCwgMHhkMDEyODI4MywgMHg3NTcxMDdlNSwgMHhmNmYxNjYyNywgMHhiOGFmZGIwYywKLQkweGFiM2QzYWVlLCAweGNhNGJkYjE0LCAweDAxN2Y2ODU2LCAweDdjZmRhMzllLCAweGEwZTkwMWUxLCAweGIwZTVlNzAxLAotCTB4NDk2MDFiYzcsIDB4MTQ2NGJlMTcsIDB4NjhkMGI5Y2YsIDB4ZWU3YzYyMDksIDB4ZmI3N2NkOWMsIDB4OWY2NzFjM2UsCi0JMHg3NjdkMmQwOSwgMHgxODcyZTBjMSwgMHgxZDlmMGYwMCwgMHgzZDJhYjdiYywgMHhjNDViOWYwMywgMHhiNDliZGVmZSwKLQkweGQ4YjBmMDE4LCAweGE0M2Y0ZGQ4LCAweDcxMjc5NjRmLCAweDdiZWNiM2Y4LCAweDNhYzMwZWFiLCAweDg4MzIzYzJlLAotCTB4NzIyYjU3ZTIsIDB4ODBkOTVkM2MsIDB4Y2Y1Y2MyYWYsIDB4MTA3ZTU4ZTcsIDB4ZWJkNmY1YzcsIDB4NDBlZTk3N2YsCi0JMHg5N2Q3ZmUzYiwgMHhiZTkxMzg5NywgMHhkNmY0MjZmZSwgMHgzODk2ZDc2YiwgMHg1NWQ4NDQ5NywgMHg4OTkxM2ZjYiwKLQkweGJiMzc1ZTBlLCAweDVmN2NlMjM2LCAweDQwNjgxZjhmLCAweGEwZTgxYjNmLCAweDk3YzljNjFmLCAweGU4MDViZjBhLAotCTB4MzFmM2QzNzksIDB4Y2Q3ZmFiZWMsIDB4ZGFiZjY4OTYsIDB4ZGUzYTkwN2YsIDB4NmRlYmEzYTUsIDB4ZGZjOGE3YTQsCi0JMHg5M2Y2ZDgwMCwgMHhhMDAyYmJhZCwgMHgzNjViY2ZkYiwgMHg4ZTUwMGZiMSwgMHg3MTQ3ZWU2ZCwgMHhjODRjYTVkYiwKLQkweDgyZTI2NzgxLCAweGY0YjE1N2U4LCAweGY4YzhmY2Q2LCAweDhhMWYzNzRkLCAweGQ4MGM3ZmY2LCAweDg0N2ZhZjA5LAotCTB4ZmRmN2U4ZjYsIDB4NzYxZmYwMzEsIDB4N2VkZGViNjYsIDB4NDAxZWMzODUsIDB4YmI0M2UyZTMsIDB4NzhmZGM2NWQsCi0JMHhiODVmZjY1ZiwgMHhmZTViZGUwZiwgMHhjMGY0ODliOCwgMHgzNzUzYzdmMiwgMHg0MGI4ZTE3NywgMHg4YjU3MTgzNywKLQkweDFjODJkNzVlLCAweGY0NjM4ZjEzLCAweDg3ODE5N2M1LCAweGZlNzQyYWFiLCAweGJmMjRjM2NhLCAweGZjY2JlMmZiLAotCTB4NzU1NDNjOWYsIDB4NWYzN2Q2YzgsIDB4N2NiODUwYWUsIDB4YzliOGYyOWEsIDB4NjJiNGZjOGIsIDB4YTA2NjVkYTQsCi0JMHhmZTNkMjY0ZiwgMHhjZmM0NjFjNiwgMHgyNTcxZjU4YSwgMHg4YWY4OTgxNiwgMHg1ZmI0MmRjNywgMHg0MDdiNzY5ZCwKLQkweGMzOWY3YTgxLCAweDU5NDEyNzJlLCAweGQ2ZTVjMzlhLCAweGVkMTcxY2JjLCAweDY0YzRiOTczLCAweDBkOTUwOTZiLAotCTB4ODJiZDZmMTgsIDB4MmY4MDBkZTEsIDB4Y2Y3ODdhNmQsIDB4MjNlNzE4NjgsIDB4MWEzNzljMTYsIDB4YzNjNTc3ZjAsCi0JMHgwYmNhZjRlOSwgMHg5OTFkYzUxMiwgMHg4MjY3OTFlYywgMHhiOGM5NWNiYywgMHhmOTNkYTg5YywgMHhmYzIyNzliYywKLQkweGM1NmViMmI5LCAweDU3MDdmNDBjLCAweDNhZTc0ZDA1LCAweGYxOGUwZjg1LCAweGY5YWM3NWQ4LCAweGVhMTg2OTczLAotCTB4YTI3M2ZkNTcsIDB4ZjNkNjI3MDQsIDB4NDlkNjFhZGYsIDB4MzViNmEzNzIsIDB4ZGFlYmZiZjYsIDB4ZTQ2N2NmZjQsCi0JMHgwYzJlNTNkOCwgMHgyZTQzMTg2MSwgMHgyYmIxMGMwMSwgMHgwNjdjYTY3NSwgMHgwMzYxNWM0YiwgMHg5NmY1ODJmZSwKLQkweGJjZDAzN2VmLCAweDgyOTI2YzU3LCAweDc5Nzc5ODE2LCAweDNlMmYxZTNmLCAweDM3ZmQ4N2VmLCAweDBhMDNiYWQzLAotCTB4NzM3NjJiYzAsIDB4MTk4MmIzYmQsIDB4ZjNmODU2ODIsIDB4MjllYmZkOTYsIDB4Yzg0Yzc5N2UsIDB4ZTYwNmM1OTksCi0JMHgyMGZlZmE0NSwgMHgzZjQyY2Q0ZSwgMHg3MWUzZjk3ZiwgMHg0ZjE1ZGY4NCwgMHg0N2I3ZmFhYywgMHgyZGNlYmRlMCwKLQkweGZkMjI1MzMzLCAweDE3NDgyNWVhLCAweDlhY2NiZjFjLCAweDg3Y2ZkM2RjLCAweDg1OWZiZTViLCAweDYzZmU1ZmY0LAotCTB4M2Q2MThmZjAsIDB4MmZkODkyMmIsIDB4YmY3MWI4MTYsIDB4YjY1Y2IyMzIsIDB4YjYyYjc2OWUsIDB4ZGJjZjlmZGUsCi0JMHg3ZTBkN2Y4MSwgMHgyNDA3ZTJmNCwgMHhkMTdiMDc1YSwgMHg3ODEwN2E0MiwgMHhkYmM0ODk1ZCwgMHg2NjkzODZkMiwKLQkweDViZmYxMTczLCAweGRhZmIwYTcxLCAweDM5YmM3Mjg1LCAweGU3ZmJjMTJjLCAweDExYjI1ZWEwLCAweDExOWQwMmZlLAotCTB4YjAzYmYyNzEsIDB4MjM5MjBjYWYsIDB4OGQ1ZjVjM2UsIDB4NmNjNzcwZDEsIDB4OGNjYmE3ZWEsIDB4ODczM2JkN2MsCi0JMHg0NDFiNDNjNywgMHhiZDRiMzhiOSwgMHgwZmNmZTI5ZCwgMHg2ZWFkZDQ1YSwgMHg0YTM0OGZkZSwgMHhiYmZjMDNjYywKLQkweDM5Nzg2MzVhLCAweDJmZDk4MWM2LCAweDU5NTcxNDJkLCAweDg5ZTcxMGQ3LCAweGUyM2Y5MDczLCAweDVkZmEwZTc5LAotCTB4OWNkOTMzMjcsIDB4ZmE3MmZkOGMsIDB4NzJlMmUzNWIsIDB4MmJiZjllMDMsIDB4M2I1YWYzYzMsIDB4NDliNThiOTcsCi0JMHg5N2FlNmY4MCwgMHhmZmU4NDYzZCwgMHg4NzJiZmMzMywgMHhhYzMxOTdmNywgMHhmMWVlZmRlNywgMHg4NWY1M2QwZCwKLQkweGZkNWYxMGMzLCAweDNjZTM1NWU2LCAweGRmMTEyZTdlLCAweDJjMWUzMjAyLCAweGU3ZWVmYjQzLCAweGFiZjQwOGQyLAotCTB4NmM3MDNmMTcsIDB4YmJkOWNhMGEsIDB4ZjA1NjJkOWUsIDB4ZjhiZmM1ZDUsIDB4YmI4OWU5MWQsIDB4YTI3NzNlYzQsCi0JMHgwMzdhOGY5ZCwgMHg3Y2ExNjdlMCwgMHg0NWNiODczMiwgMHg0MmUzYzQ5ZiwgMHg2ODdjMGE0ZiwgMHhkN2Q1YWRmYiwKLQkweGYxZTI2MDNlLCAweDI4ZTc5MDc5LCAweGZjYjc2YTQwLCAweGI1YWRmYTllLCAweDY3Mjg5ZDg3LCAweDhkMzQ1ZjZiLAotCTB4OTRmYzc5NDIsIDB4MmQ5MmZmOTgsIDB4MGJiZmM3MDMsIDB4OTRjNGIzZjQsIDB4NWE1ZWEwYTgsIDB4NDY2OTk4MTMsCi0JMHg4MThiNGQ3OCwgMHg1MmY3OWVlMCwgMHgzZjFlOTBiMywgMHg4MWM5Nzg2ZSwgMHg1YzQxZjI3NCwgMHg0ZmY1MGYyOCwKLQkweGY1MzhmYWQ3LCAweGUxNDAyZTIwLCAweDFiOGZiOTcxLCAweGZjNjIwZWYyLCAweGI2MTJhOTY2LCAweGU5N2VhMDFiLAotCTB4OTQ2NDljYzYsIDB4MjEyYmVmZDMsIDB4ZGZiZmQ2MzMsIDB4ZWMyMjM2ZWEsIDB4MDhmMTk0NTEsIDB4MDRlMWU0N2IsCi0JMHhhYjIyMGM3ZiwgMHhjYTBmZDA1NSwgMHhiZTA2YjU5OSwgMHgzOTllNmI5ZiwgMHhmMTg2Y2U2NiwgMHhmZGMzOTM3ZSwKLQkweGZlN2U0ZjliLCAweGYzOGM3Y2JiLCAweGYzODU2NmQ0LCAweDdlYzA3ZjUxLCAweDNjNDAwZmU3LCAweGZkMjA2ZDNmLAotCTB4YzkxOWY2YmIsIDB4NjdhYzM3MTMsIDB4N2VlMmQ3YmYsIDB4MTZhZDdmMDMsIDB4ODVmNmJjZmIsIDB4YmE0NWVlOTcsCi0JMHg1ZGZiOGI1ZiwgMHg4MDVlOWJkMiwgMHhmM2QzOGY2ZSwgMHg2MTRjMGVlNywgMHg0OGUzZmRmYywgMHgwMmJlOWExNywKLQkweDhjOTRjMWI4LCAweDlmMGUzYTcxLCAweDAyZmNlMWNlLCAweGYzZjgyYmNmLCAweDRiYzkxMTQwLCAweDY3NjgyMzkwLAotCTB4NWY3YmQzNDYsIDB4ZDhiMWZiZmIsIDB4MmM1YjI1YmYsIDB4MTYzZjU3MjQsIDB4YzBmOWRiZmIsIDB4YmZkYzBlOGIsCi0JMHhlYzdlN2U0ZiwgMHhkNGEzOWUwNCwgMHhkOGRhMDczZSwgMHgwNWVlODMxNSwgMHhmYWUxZDYzZSwgMHhiMjdmMzQxZCwKLQkweDdhZTFkNjIzLCAweGVmZWIzZDFkLCAweDZmYzE3M2E2LCAweDlmNWYxOGViLCAweGIyNzVkZWI2LCAweDJmNTZiZjU4LAotCTB4ZDYyY2JmZGUsIDB4N2MwOTg2YjksIDB4ZjM4ODMwYmQsIDB4ZTQyN2UwOTcsIDB4YjRjN2I0NTcsIDB4Zjk5MmY5ZjUsCi0JMHgyNjdkMWFmYiwgMHhmZmI5NzJlNywgMHg5OWZmMjEzNywgMHhmYzQwZWFkMiwgMHg5Y2EyZmVlMCwgMHg5OGYxZmEwMSwKLQkweDAxYjkwOTQ3LCAweDE2NzkzZTRkLCAweDVmYjExZmU2LCAweDczYjNmY2RhLCAweGFlNDAzY2Y5LCAweDdiOTI5Mjc5LAotCTB4YzhkM2IxZjYsIDB4YjczYWM2NTYsIDB4NzhlNWM4NGMsIDB4OTY5OGRiM2MsIDB4ZmJmODA2ZDUsIDB4ODkyYmZjMTgsCi0JMHgyMzk1N2E3MSwgMHg0NmU4ZDNjNiwgMHg2N2ZjYWYxYiwgMHhkZDcwZDM1NSwgMHhmYjA4N2ZkMCwgMHgzZjdkYzZkNywKLQkweDNmNjMyMDkwLCAweDFmY2UzM2VmLCAweGJlMzVmY2RhLCAweDM0NWZhZjJjLCAweGVkODFkOGFkLCAweDE0ZTdiMTNlLAotCTB4ZGQzOWJhZTEsIDB4NTQyYWU3NjYsIDB4ODAyZWQwN2EsIDB4MDY2ZDNkZjcsIDB4MTU5ZjRmOGEsIDB4YzZkOWZjZmUsCi0JMHg4YTRiMWM5NywgMHgyNWRkZTg3YSwgMHhkOTNmOGRlNiwgMHgxYTllN2JkOSwgMHgzM2QwNDVmZCwgMHhmYjdjYjNjZCwKLQkweDZiMDg2OWZjLCAweDRiYTY4ZGYzLCAweDdkMWE2ZjBkLCAweDY0YTljZGIyLCAweGU5ZDM0NGFmLCAweDY2YjNjY2JhLAotCTB4YjlmYTJmMWMsIDB4ODA3Y2I3NjYsIDB4ZmZlNDE1ZjEsIDB4ZjJlM2M2NTQsIDB4NmU3OGVjMGQsIDB4OWY4NjNlODQsCi0JMHhkMWVhOGQ4ZCwgMHhkNzljOWEwZiwgMHgxNGJhZjNmNCwgMHgyZmMyMjVjZiwgMHg0MzcwM2EwYiwgMHg1MzY2ZTczNiwKLQkweGM3Mjk3N2JmLCAweGZkZTAzOWI3LCAweDc0YzNlNzMxLCAweDg3ZDlhYmZlLCAweDkyMTE3ZjM3LCAweGY0OGUzMTEyLAotCTB4NTIyNGJiODIsIDB4N2NiOWFkY2YsIDB4OTZiNmU4OWMsIDB4YmZhMWI3ODUsIDB4ZGY4MWY4YjMsIDB4ZjQ4ZDFjY2QsCi0JMHhjZTg5OTRmOSwgMHg0ZTM3MTY1YiwgMHhiZGRkYTMzNiwgMHhhMzlkZjBlYSwgMHgzNWNmZGY3MCwgMHhhOTc2M2Q3MSwKLQkweDY4OTNlNDYxLCAweDdhNmI5ZjM3LCAweDExNjc3OWQ4LCAweDY1M2U1N2JlLCAweGJjNWYzYzJjLCAweGY1ZjY5OGFiLAotCTB4NGNmMGI4ODMsIDB4OTFlZWJiODQsIDB4NmY3ODQxZDgsIDB4OWI5MWUxZGMsIDB4Y2UzYzAyMTcsIDB4YWUxMjUzN2UsCi0JMHg1MjQzZmRlZiwgMHgzYTA4ZDhjNSwgMHhjZDk0Y2E1OCwgMHg5MzRlZDEwYiwgMHg4YmU0MTUxMywgMHhhYjNjODVmNywKLQkweDVhN2RmMTM3LCAweDUxN2ZlODJlLCAweDQ1ZjNlNzJlLCAweGViY2I3ZjYyLCAweDdjZjFmM2ViLCAweGM4MDBlYmJjLAotCTB4OGQ2M2MwNTEsIDB4YzIxYWQ1ZDksIDB4MjM0ZDVmNzEsIDB4ZDgxZDdmYmIsIDB4NzRjOWU5MDgsIDB4ZDI3NjRkNGUsCi0JMHg2NmIzMzM0YSwgMHg2YjczZDA5NCwgMHg2OTNmM2MwNiwgMHhlYjgzZGYwYSwgMHhiZDhmNzkzOSwgMHg1OGUyMGI3OCwKLQkweDA5NmEzZWJhLCAweDVmODk2ZmI3LCAweGYxYTVhZWMwLCAweDMxNjhlZGJiLCAweDJlODI2NThmLCAweGRlZDNmYmEzLAotCTB4MWViYjQwZWYsIDB4ZmY5ODllZTUsIDB4ZTZhNzg2YTUsIDB4NzRiYWJlYTEsIDB4ZDcxOTJmMjQsIDB4NzFhYmUxZmYsCi0JMHg3Y2RmNjg0ZCwgMHg0YzcyZTI2OCwgMHhhZWVjMWZlYiwgMHgxMWY2OTFmMywgMHgxODNhNWJkOCwgMHgwYzFkMmFlYywKLQkweDZmNWU3NWY0LCAweGJjMjU2ZDhmLCAweGI3YWI5YmRjLCAweGFkM2EzNGFiLCAweDE4OTc5ZjU5LCAweGNiZDAxNzk5LAotCTB4MGE0M2ZlZmUsIDB4OWNmN2ZmOWQsIDB4NjQ0ZThjYmYsIDB4Nzc0MmU0MzEsIDB4ODgwZmQ1ZGMsIDB4M2M2YzY3Y2EsCi0JMHhjZjE4ZmFkYSwgMHhmOWYyZjg0ZCwgMHgyZGRmZGEzMCwgMHhlYjAyYzUxNiwgMHg4ZTc0OGYzYywgMHg0YTJmNGJlNywKLQkweDcyYjdlZWRjLCAweGUyZmYzZmJhLCAweDc3ZmEyMDg4LCAweGUxYzBmZmNiLCAweDIwODZhZGU1LCAweGRmMWVkZDFlLAotCTB4ZjZjMjVkYjUsIDB4NGJlZWMwY2IsIDB4YjNkODQ0MzMsIDB4MDNjZDc3YmIsIDB4NTQ1NzY3ZjIsIDB4NjgwY2I2ZGYsCi0JMHhjZjA4ZTU3ZiwgMHg1YjZhODA3NywgMHgyMjdiMWQ5NCwgMHgxZGI3ZDVjMywgMHg1ZmI2Y2ZmYiwgMHg2MWMwYjhiNSwKLQkweDUzMmFkZjBkLCAweDllMWFkZjExLCAweDc1ZTY3ZjM1LCAweDkyYjI4N2EwLCAweGVhN2RiYzFlLCAweGViZjY0OTVmLAotCTB4Y2E4ZmJmNjUsIDB4MWY2NzBjY2YsIDB4NmM3NDg3MWMsIDB4NWY5MTU0NGYsIDB4YjBmNmRkN2UsIDB4ZmJmNzAwMzQsCi0JMHhlOGViZTI4NSwgMHgyNWI1OGU5NywgMHg5ZmI3YzgyYSwgMHhiOWQxMzdmYSwgMHgxZDdmNjVlNiwgMHg2YjdlZGE5NSwKLQkweDVmOWJiMTcxLCAweDNlZjdhNzY4LCAweGNhZjExYjZkLCAweDM1ZWY3ODM4LCAweGQ3OTBhMjViLCAweDM1ZjczMWM5LAotCTB4ZWVlM2JmM2EsIDB4ZjBkM2EzZjUsIDB4OGZhZWI2YjksIDB4YWJmYmUzZWUsIDB4MjNhM2ZiY2QsIDB4NWQ3MDNhNzcsCi0JMHg3YmY1OGZlZCwgMHg2YmVlMGM2NSwgMHhmNjgyYTI0MiwgMHhkZjkxMGFkOSwgMHg5NzFmNjE3MSwgMHg4OWFkMTcwZiwKLQkweGZkODBjZTRmLCAweDhlN2ZiOGJkLCAweDVjOWM4MTkzLCAweDFlNzczZWQ2LCAweGFhZmU1ZjNlLCAweDVjZmI0MTQxLAotCTB4ODFjYWI1N2QsIDB4Y2IzZjhkZjEsIDB4NGIwNTBlOWQsIDB4ZjM4NDJmNzgsIDB4Y2ExMjgzOTEsIDB4NmM5NWIxYTMsCi0JMHgxYjFmYjYwZSwgMHhmYTBiOTk5MiwgMHhkMzgzMzMxOSwgMHg3MmNiOThjOSwgMHgzZTc4MGYxMCwgMHhiNzE0ZTc4NiwKLQkweDcxNGYxZWI4LCAweGMzZjVmODBiLCAweGJmNjU4ZGZjLCAweDBkMGVmMWUyLCAweDM1ZGY5YWVmLCAweDA0ZGJhYzRlLAotCTB4MmU3NDQ3ZWMsIDB4ZjE5Nzk3OWUsIDB4N2ZlZTFmZTcsIDB4NzdmNjE2N2UsIDB4YzE0OTkwZTksIDB4Yzg3YTdmNzksCi0JMHgwNmFmZmQ0NCwgMHhlMzA4Yzk3ZiwgMHhmZGMyM2M1ZCwgMHhkY2UzODQxMCwgMHhkZmRjYzdjOCwgMHhmZGNhZGQ1OCwKLQkweDI2ZjVkYThkLCAweDM3YjEzOThmLCAweGI0NDc5NjNkLCAweDllMGViZjQzLCAweDU1ZGM3MGI5LCAweDNhMzRkZTgyLAotCTB4ZWJlMWVkNWQsIDB4MGQ3YTBkNWIsIDB4Yjc0ZDFiZDcsIDB4MWI3NWFjNDksIDB4ZThlYmU5ZTIsIDB4ZWRkMjliZjcsCi0JMHgxMzVlOTBkZiwgMHhlODdjYjc1OCwgMHhlOGJlZDdhNiwgMHhmOTEzZTA0NCwgMHhhMzU1ZTkxZCwgMHhmOGZiZDU4NywKLQkweDZiNzI3YTM5LCAweDNiYTQ0NGYxLCAweDc5MzQzZThkLCAweDBhYzQ5ODEyLCAweDliZDY2ZjUwLCAweGRkZTYwMTU5LAotCTB4MmFmMThjMDQsIDB4OWIyYTgxY2EsIDB4N2Y3Mjg0Y2IsIDB4MDU2NzRhNGUsIDB4MWU0OTY1YTIsIDB4Yjk1MmE3OTcsCi0JMHhmZDQ0NjNkMSwgMHg3OTIxNmY1MywgMHg1MjZmMmQxMSwgMHhkZmZjYjhmMiwgMHhlZDA3NDQ4MywgMHgyYTE0ZjI4YiwKLQkweGZjOGVhYzRkLCAweDg1ODRhZDA3LCAweDVjZmQ0NDBjLCAweDlmZmM5MDk1LCAweDUzNzI2ODJlLCAweDY1YjM4M2RlLAotCTB4YjhkNTdmOTgsIDB4NTQ3MjdiZTQsIDB4ZWRlNTA2YzYsIDB4ZTQ4OGYwZTYsIDB4OTdhODI2OTEsIDB4NWQ5YTFmZWIsCi0JMHg5ZTQ1NzAwMSwgMHg0NDVlNjA2NywgMHhhNzBlOTdiZiwgMHhjMGY1YzQwZCwgMHg4YzFlNTc3MywgMHg5N2M1M2RiYiwKLQkweGIzM2FlNTgzLCAweDY3ZjdlNDhkLCAweDliNjFhZTg2LCAweGNmZWQzZGRjLCAweGZmN2Y2YWJjLCAweGI4MWVhZWQ3LAotCTB4ZDRiMmM0ZDMsIDB4Y2QxOTg0MjIsIDB4Y2FlZjJiNWIsIDB4ZTNlNjBjZjMsIDB4NjEyZjlmZTgsIDB4ZTJmMjkxYWMsCi0JMHg1ZGZiZmYwMiwgMHhlN2UwNDNiNCwgMHhkZWZlYzJiNSwgMHg4OTY5ZTgyYSwgMHhmZGMyMTZkNSwgMHhjYmE2NGQ2NCwKLQkweGE4MDU3NmRkLCAweGNhMjZhNjdlLCAweDA0YjMwNzQ4LCAweDg3MmFkYzFkLCAweDQyZmRmMWRhLCAweGIwNWNhMGQ2LAotCTB4ZmZiM2U5OTIsIDB4M2EzNzdlYWIsIDB4MDVkOTk1YTcsIDB4ODdhMDNmYWQsIDB4M2ViMDRjY2YsIDB4OTAwMzY3YTAsCi0JMHgxOTYwMjZkNywgMHgwNmIxMjAwMywgMHg5NWUxOTdlNCwgMHhkODVmZmRmZiwgMHg3NTgwN2Q2ZiwgMHg2YjllMTFjNiwKLQkweDA2N2I5NDE0LCAweDA1N2UzM2U2LCAweDYzODI2ZDY1LCAweDNjMzNjNjE4LCAweDM2NDNkOTJmLCAweDNmMGRjN2Q4LAotCTB4NWZiYTIwNGYsIDB4NTIxN2VjMjUsIDB4YTY1Zjk4YzYsIDB4NzRiMGY1ZjAsIDB4OGY3ZmRlN2UsIDB4ZmQwZmI3YTAsCi0JMHg1ODE3MzcyYywgMHhmNDc2MTNmYiwgMHhiMWU2MTk1MywgMHgxYjM3Y2UyYSwgMHg3OGM2YmRmMSwgMHgwYjgzNmIyYSwKLQkweDgxZGViNGY5LCAweGJmMjdjNTc2LCAweDA5MTQ1NDkwLCAweGM4ZGQ4NDZiLCAweDdlMGFhNTBlLCAweGEwMTM0Mjk3LAotCTB4Nzg1ZGMzYmUsIDB4OGQ0YmY1MTAsIDB4NmVjYjk3YTAsIDB4NjA2ZjdlNDYsIDB4ZmFmMjg1OGIsIDB4NTk2M2Y1ZDgsCi0JMHg5OTVjMDNmNywgMHhmZThhOGI3ZCwgMHhiNzY3ZTVlNCwgMHg3ZDgzMmVlNywgMHgwZWQ4YzBiMiwgMHhlODU0ZTc1OCwKLQkweDZhYTYwY2IzLCAweDczYTI1ODAyLCAweDAzZjUyMGRlLCAweDNjMDcwMWY1LCAweDM4N2VlNmRmLCAweGYzMTlkMzhiLAotCTB4ZmRiNDdhZTIsIDB4NmJkZWYwZDEsIDB4YjQ2ODYwM2YsIDB4NjY1NjhkMmYsIDB4OTBiMWZmNDIsIDB4ZmY5MDU3ZWQsCi0JMHg4Yzk5N2RiNCwgMHhmZmYwM2RjZSwgMHg5Yzc5MTc4NiwgMHg3NTgxODM2MywgMHhmOWFmMThjMywgMHg4ZDc4MGFkMCwKLQkweDRmNmE1ZjIxLCAweDI2NzY0MWJlLCAweDI3NDA1YmIwLCAweDE5ZGZmNjU3LCAweDFkOTVmZjViLCAweGZmZDc2MzMwLAotCTB4OThkODNkNmMsIDB4MzE1ZmY0MjcsIDB4MDM3YjI2MmIsIDB4YWRmZDA2OTcsIDB4NGIyNjZkMTAsIDB4ZDcxOTJlMzUsCi0JMHg5MTU1NmE5MywgMHg5ZTNjMzYxZSwgMHgxZDg2N2E0MywgMHhhMGY0NGRkOSwgMHhmYmZiNjNiNSwgMHg3MzZjOWQxMSwKLQkweDU1ZmY4NDRiLCAweGNjNGNiMDZkLCAweDRmZWI2OWQzLCAweGRhMzM4Yjc5LCAweDVjNzRhOTkyLCAweDk3ZTdhNzRiLAotCTB4OTRhYjdjOWUsIDB4M2ZiZTFiY2IsIDB4MzY5YTdmMzMsIDB4N2U4M2YyODksIDB4NmQ0YTg4M2EsIDB4YmQwNDFiMWUsCi0JMHhlMmJlNzg2OSwgMHhjOTNlNzgxNSwgMHhiYjA2ZDVmNSwgMHgzOTdkZmM5OSwgMHg3OTQ4OTg1MCwgMHgwYjEyMWQ4YywKLQkweGU0ZjczYzAyLCAweDU3ZTIxMzFjLCAweDZkNzRlNzhhLCAweDU3MzIzNzQ5LCAweGM0NTliYzBjLCAweGUyYjljNDdlLAotCTB4ZGVkMjJiOTksIDB4NjhjMjc4MGYsIDB4ZjUxN2NmZDcsIDB4NTFjOTA1MDksIDB4ZTZkZjdjZjUsIDB4YjdjZmU1ODksCi0JMHhmMzgxOWNhZCwgMHg3NWZkYWJiNiwgMHg0Yzc3NmNlMywgMHg5MmJhMjBlOSwgMHg1ZjM4Y2IyZSwgMHhlYjAzMDRjYiwKLQkweDM1MmJlNzg3LCAweDNiOTg3ZGZhLCAweGM2OWIwZjU3LCAweGQ1ZjI0ZTdmLCAweGJmN2EzZTM0LCAweDRkZmQwOTk5LAotCTB4ZmNmZjQ3OGIsIDB4MTdhMTNjYjUsIDB4ZTQ2MTU5MGEsIDB4OWZjMmY2M2UsIDB4MGQ3YzRhY2QsIDB4NzhlZjc5ZGEsCi0JMHg5ODc1ZTc4MCwgMHhlZGM1ZDA1OCwgMHhhZmM3YjQzNSwgMHhiNzQ0MmM3OCwgMHhkZTA0ZTNkYiwgMHgyMWU5YTUwYywKLQkweGE2NTg5ZjY4LCAweDQ3OTI1ZmM3LCAweDk1N2VhZjhmLCAweDdhYTRmYzdhLCAweGFiNDg3OGY1LCAweDY3ZDVkNmNlLAotCTB4ZWFlYjA2ZjgsIDB4ZDEyY2FjMDcsIDB4YzZlYjAzYzEsIDB4YjRkZmRhZWEsIDB4NzYwZTkyNjksIDB4ZGFlOWE2MDcsCi0JMHhkNmNkMzRlNywgMHgwYjJkNzljMSwgMHhlZDA3ZWQ3NSwgMHgyZmFiYTI1YiwgMHhkNWQ2YWUwYywgMHg0MWIyMzkwZiwKLQkweGZkNmQwZjA3LCAweGUxZmI1ZDE3LCAweGY1NzU1YjZkLCAweGJhMWRhMWM1LCAweDBmMWQxMWZhLCAweGUxOTFlMGU5LAotCTB4NDdlZDc1NDcsIDB4NTc1MDdiYmYsIDB4NjlmM2E2M2YsIDB4OGJiOGZkNWQsIDB4OWJlMGU5Y2YsIDB4YjVkNjVlYmIsCi0JMHhhOGVkNzA5ZiwgMHhkZWM4OWUwZSwgMHhiNzJmYjVkMiwgMHg0ZjA3NGVmZSwgMHhkNzQzZmU1NiwgMHgwZmY0OTZmZSwKLQkweDVkNTNmNTc0LCAweGE3ZWFlYjFmLCAweGMxZDU1YzE3LCAweDA5N2Q5ODc3LCAweGVhOTdjOGY5LCAweGNkZWY3NGRmLAotCTB4OGUxZmFlNjIsIDB4OWY5ZTNhMDcsIDB4MDA0MzU0NjIsIDB4ZmM4NWYzZGIsIDB4OGM5Nzc0MTAsIDB4ZGFlZDEzZmEsCi0JMHg3NDg1OTY1YywgMHgxZjFhNTkzYSwgMHgzMzZiYmEyMiwgMHg0NDU3ZThhOCwgMHg2M2Y5MjdlYiwgMHg2NWUzMDdhZiwKLQkweDhhODMyNWVjLCAweGIwNDRhYzcxLCAweGYxODhlNGViLCAweDcwNTYzYzkyLCAweDdlZTA3YjAwLCAweDRlMGU4YTk1LAotCTB4ZGFlYmE2ZjUsIDB4NzRiYjU1YTcsIDB4MDJiZTE5ZjUsIDB4OTU4MGZkNWQsIDB4NTgxZTBlYWEsIDB4N2Y2YmE2NTcsCi0JMHgwZThmMjZkMywgMHg3NTJhMDc3NiwgMHhiYzlhNzNlZCwgMHhhNWFmMzgzYSwgMHhkMDdlZDc1YSwgMHhiZWFlOWYzZSwKLQkweDU3NTJiODMwLCAweDlkNDhlNDNmLCAweGJhZGExZTBlLCAweDc4N2VkNzQ5LCAweDVmNTc0MDViLCAweGQ1ZDI2YTFjLAotCTB4ZDE2OGU4OGYsIDB4ZmJjMzIzYzEsIDB4YmY0N2VkNzQsIDB4OGZkNWQ0MWIsIDB4YWJhMjNjZTksIDB4NTViMTc3MWYsCi0JMHhkNWRjZGYwNywgMHhlMTNmNmJhNiwgMHg0ZjA3NDg1YSwgMHhlZDc1Mjc2NCwgMHg3NDY3YWRjYiwgMHgzZGU1NjRmMCwKLQkweGQyNWJmYjVkLCAweGE3ZWFlYWNmLCAweGVhZTkyZWJhLCAweDdhNjQ3YjM1LCAweGU3ZmFlN2MxLCAweGE5OTkzZWMyLAotCTB4ZmRlZTk3ZmUsIDB4NDMwZjI0YzAsIDB4NjczYzA4ZmEsIDB4YTA1ZGViNTAsIDB4YjliM2YyZmYsIDB4MmQxMzA3M2UsCi0JMHhjNjdiNDI0ZSwgMHhjOTQ1Zjk0YiwgMHg3MjA3YTA5OCwgMHgyMDYwMzEyYiwgMHg1Yjk1NDJiYSwgMHgxNDllZjE0MywKLQkweDUyYTQ1M2QyLCAweDAzNDc5ODVjLCAweGRlODFkZTdhLCAweGY2OGRkYjkzLCAweDlkOGY0MjZkLCAweDg4ZDVmOTk1LAotCTB4N2Q2NzZlNmYsIDB4MzAzODdkMWYsIDB4OTQ0ZGI2NWQsIDB4MGRlNTYzYWEsIDB4Yzc5ZjNmN2UsIDB4ZmJlNTBlMzksCi0JMHhhMmE3ZTQzNiwgMHgxNGVjZjExZiwgMHhiMTU3YjNiNCwgMHhlNzljMzZjMCwgMHhiMTI4YTk2NCwgMHg3MWE4ZTMxMywKLQkweDU2ODUzOGZhLCAweDY0NWViNTRlLCAweDc3ZGQ4NDcyLCAweGIzMjVhZTMyLCAweGZjZmUwNmU0LCAweDI2NjVlYjU0LAotCTB4NTdlODg4OGYsIDB4YjAwYzJmYzQsIDB4ZmQxMTBkZmUsIDB4ODA3ZTA4M2YsIDB4OGI3ZjNlMGMsIDB4NmMwYWY4MWYsCi0JMHgwYWZjODdhNCwgMHhlOWZkYmJjMSwgMHhiYmYxZWYwNCwgMHgyZmU3ZGNhOCwgMHhiZjUxZjJhMCwgMHhmZGZiZjU0YSwKLQkweGUxM2YwNDY1LCAweGY0MWMxMGY3LCAweGQwNzk1MjU3LCAweDg3ZTdhNWVmLCAweDNmMDRkNWZjLCAweDk2MzE3ZTA5LAotCTB4YzY0ZmMwNDcsIDB4NzdmMDY5ZjIsIDB4ZjAxOWZlYjEsIDB4ODVmZTExN2YsIDB4YWI2NTQwM2YsIDB4M2Y5ZTg5YmYsCi0JMHhmODIxNmZlNywgMHg4MjNlZmYwNSwgMHg1MjBmZTk3ZiwgMHg0MjNmZTZkOSwgMHg1NmZlY2JlNSwgMHhkZmM1N2ZhYSwKLQkweGZlNmJmMDQ2LCAweDdmMjFjMTEwLCAweGZkNDdjMTA3LCAweGZiOGY4MjYxLCAweDg0ZjgyNWRmLCAweDBlY2E5M2JmLAotCTB4ZGYyYTQ1ZmYsIDB4ZmQ1MTc3ZjQsIDB4ODIzNWZmMjksIDB4NmY1M2Y2N2IsIDB4ZjNlMzQ2ZmYsIDB4NjU1NzExMjMsCi0JMHgyMTVjNGVjMiwgMHg3MGE1ODdlOCwgMHgyNzM5NzBmYiwgMHhkMDQyYjYwNSwgMHhhODEyNjlhZCwgMHhmYTNmYjQ1NywKLQkweDNjYzQxZmU3LCAweDU3NDg5MWQ2LCAweGE3NTc0NDA1LCAweDFlZmQ4ZGJlLCAweDI1Njk3ZmVkLCAweDliZjcxOWQwLAotCTB4M2M3ODFiZDcsIDB4MjJlZmQzNDYsIDB4ZWZkMzQwNWYsIDB4N2Y3MGY3MzUsIDB4YmJkODExNzUsIDB4NDNmZmZmMTgsCi0JMHhhZjNmYjcxYywgMHhkMDBhOTlkNCwgMHhjNDMxYWI4ZSwgMHg1ZDJmNjhhYiwgMHhkOTMzZmJhOSwgMHhhZmNmMGM0NywKLQkweDc4ZWU0NTgxLCAweDQ3NjA3MmM1LCAweDAzNTZkZjg0LCAweGZkZTExYmVmLCAweDE4YjQ1OTk5LCAweDRjM2FjMzU2LAotCTB4MzMyYTJlNzQsIDB4MzU3YzA0OGYsIDB4MzdlZmEwNzYsIDB4MGY1NjFmYTgsIDB4N2ZjODA2MzQsIDB4ZDFmMzA1YjYsCi0JMHhhMDdkYmI2ZiwgMHg3ZWY0OGMyZiwgMHgwOWQ5NmVhNSwgMHhkMmEyOGZjMiwgMHg0YjRjZTBiOSwgMHhjNjNlNzUyOCwKLQkweDE0NGE0ZTQ5LCAweDFmMGJlYmRmLCAweDc4NWU0NGViLCAweDVkYWZmNTlmLCAweGJjM2I0NGNhLCAweDBmOTJlZmYyLAotCTB4YzliNGU3ZjcsIDB4ODM3MThkNWUsIDB4MWZiOWYyMGYsIDB4NTFiZTQxZmEsIDB4ZTgxZTVlNTcsIDB4ZmNmMzg3M2IsCi0JMHg3NmVlYmQ4YiwgMHgyZmYwYTAyMywgMHhlNGZmNTlkZiwgMHhiZjFlZWVkZCwgMHgzZDc0NTZmOSwgMHg2MmFlNWVjMSwKLQkweDI5ZTUxMzJlLCAweDZlMWJjZjMyLCAweGU2MzZlYWU4LCAweDBiM2U3ODIzLCAweGE2N2I3OTUwLCAweGQ3NWM2M2VmLAotCTB4ZDgyNDE2MDIsIDB4MTU5MmQ2MzcsIDB4ZjNkMTVkNmIsIDB4MDM5MDhiZmEsIDB4ZWEzN2M5N2YsIDB4YmU1OWZlY2EsCi0JMHhmMmYzZTRmZiwgMHg4ZjRlYmNkMCwgMHhkNzFmMjViOSwgMHg2MTZiY2RhNSwgMHgzZmU2OGI5NiwgMHg4MTNkNzU4YiwKLQkweGFiY2JmYmYzLCAweGU0MzA1ZjlmLCAweGZmOGZhNmY0LCAweDYxYjBiYTAxLCAweDMxZGEwNTk4LCAweGM3YThkZjNjLAotCTB4YWZhODFjYzQsIDB4Zjk0MGNmYmYsIDB4ZDQ1ZDFhZDksIDB4ZGYxMDQwNjAsIDB4YmNhMDZjZGIsIDB4MDEzYTFlZmQsCi0JMHgyYmJmNDBmYSwgMHhmMWVlOGJhNSwgMHgwZjI0OWQwMSwgMHgyMzE5M2E0MiwgMHg0ZjYwY2MwNSwgMHhmMzA2MzY5ZSwKLQkweGJjNWU3NDBkLCAweDg0NzE4Y2NjLCAweDFmNDAyOTE1LCAweGMxZDM3ZGQ5LCAweDQwOWY3MTVhLCAweDk1ZjQwZTdiLAotCTB4ZmE3ZGZkODksIDB4ODgwNWQxYWIsIDB4OGRhZjc1YWYsIDB4ZWFiZTIxNzEsIDB4ZTgwZmIwOGQsIDB4YTkyOWJlMjcsCi0JMHg4Yjg1MWYzYywgMHg1MGRjNjk3ZSwgMHg1OTMyNTc4YSwgMHgzNGNlMzE1NSwgMHhkZTViMTJkMywgMHhlOWM0MWY4ZSwKLQkweGE5YmE3NGU3LCAweGU5ZmQ0ODMyLCAweDA3NGE1NWNmLCAweDFkMmI3ZGYxLCAweGMzNzNmN2M0LCAweDQ4ZDcwZmZhLAotCTB4NDdkM2VmMzAsIDB4OTQ3ZGQxMmYsIDB4ZjRkZmYzNWUsIDB4YzQ2ZTYxNjYsIDB4OWRiNWQ3YmMsIDB4MjE4OWUyOWQsCi0JMHhmZThiZTdiZiwgMHhjYzkxYmEzNCwgMHg1YjAxZGY3NiwgMHhlOWJhYmNlNCwgMHhmYmFlMWM3OCwgMHhjNzQwNDkyZiwKLQkweDE3Yzc0NDM5LCAweDk2NzBmY2YwLCAweDFmMzg5NWM1LCAweDA5NDA0ZWNhLCAweDFmYmVlOWRhLCAweDJkZmZlNDJiLAotCTB4NGI5NTJhNjEsIDB4MTVjYTk3OTksIDB4Yjc0OGVkYjAsIDB4MzMyZWMwZGUsIDB4NmIzNTdiZTIsIDB4Y2I2YmU3YTUsCi0JMHgxZDIyNzRlZSwgMHhjOGZhMzcyZiwgMHg5OTgzNWUyZiwgMHhjYjllNzhiNywgMHgwMWQyMmFiYSwgMHg2ZDM1Yjc2ZiwKLQkweGQwMWQyMzc5LCAweGQ3NjVhNzM3LCAweGNlY2Y4YzY0LCAweDAzN2UyZTBlLCAweDg2NDNhYWNiLCAweDBhODc5ODBiLAotCTB4ZTcwYjMxN2MsIDB4NmJhODY5ZDUsIDB4MmZlMzBmZWMsIDB4ZTM2MjY2N2MsIDB4NGIzZTc4MDAsIDB4ZGVjMWZiZTIsCi0JMHhjOWExZmJlMiwgMHgwMzc1ZTg4ZCwgMHg5NDFiY2MxZiwgMHhkMGYyZWI4YSwgMHhhNTQ3MjRiYSwgMHhiNjZhMGY4ZSwKLQkweGE1MjE4ZjMyLCAweDliYmUxZjI3LCAweGZhZWVjYTJmLCAweDVmOTQwMGQzLCAweDA3YzUxNzcyLCAweDQ5NjZiZGQ2LAotCTB4Y2Q1ZTdkYzYsIDB4ZjA2MDNkYjgsIDB4Y2QwZmYxNjgsIDB4ZTc0NDYwMGUsIDB4MTU3OGIxNzcsIDB4ZTgyNDdkZGIsCi0JMHg4YzgxYTNmYSwgMHgwMzIzZmFlOCwgMHgzZDI1ODQzOCwgMHhmMmNiMjlmNiwgMHhmNGU0OTdhNSwgMHhjNjc1ZWJlOCwKLQkweDllMjE4NjY3LCAweGUyZDc5ZjQwLCAweGQwN2Y1NzdjLCAweDhkZDhhZGJhLCAweDg1OTgzZjcyLCAweDY5ZTk4OWY2LAotCTB4ZDZlZjVhOGIsIDB4NTVmNjE1ZTksIDB4ZWI1YzRmNDIsIDB4M2I4ZjEzNDEsIDB4NTBjYmNmNDUsIDB4ZDBiZmUyNzYsCi0JMHg1OTk4YjExZSwgMHg4MDM5Y2YwMCwgMHhlNDI4ZDlhZiwgMHhlMjY2ZmVlNywgMHgyZDQ0N2FhYiwgMHg3OTI2YzdjNiwKLQkweDU1N2NmYzVkLCAweDMxNjlmZmRmLCAweGI5MmY4ZWRmLCAweGY1ODAxYzNmLCAweGY3YTQ5YzYwLCAweDU5NGY1YzM4LAotCTB4MjFjNjdiZTIsIDB4MzQ2NGUxYjksIDB4OWM0MWNlY2UsIDB4OThmMWI1N2YsIDB4ZWQxMzMzYWQsIDB4N2RlM2ZiZjcsCi0JMHhkNWZkYzAzZiwgMHgzZjlhM2RlMiwgMHgzMGZlZTFkOSwgMHg4ZDk5ZWU5NywgMHhmNzQzNTRiZCwgMHhlODU4YzYzNywKLQkweDIyYWRkZjdlLCAweDE5NmI3NjBlLCAweGFhZGQ4MzhmLCAweDQ3YzZiZGM1LCAweGUyYTJiZGM1LCAweGVjN2M2YzJmLAotCTB4OTcyNjk4MzgsIDB4ZWZjOTUzMTksIDB4ZDA3ZjY0MmQsIDB4MTdmMTRmZDYsIDB4ZDJmNjBlNGQsIDB4MzA5MGIwYWIsCi0JMHgxNDVkYTVjNSwgMHhjYjhlZThhZiwgMHgxZTc5OWIxNCwgMHhhZDMwNmI4ZCwgMHhlNGU0MmNjNywgMHg0Zjk3MmY0ZSwKLQkweGQ1NjlmYmRhLCAweGZjZThjMmUwLCAweGQ1Y2IyYjA4LCAweDBlOGExMWY5LCAweGFlOTc1ODFlLCAweDI2ZDM3ZjZiLAotCTB4MWRkZWFlOTcsIDB4ZTdkNWQwMjgsIDB4MzgzYWE5MzQsIDB4ZDc0Y2E1YWYsIDB4OGYzZWQwN2UsIDB4NTYwYzJlMGUsCi0JMHgzOTBmZGFlYSwgMHg0M2MxZDVlMiwgMHhlZDc1YWI1YiwgMHg3NGY5Yjc4NywgMHg5NWExYzVmNSwgMHgxZDExZmFiYSwKLQkweDY0NzgzYTc1LCAweGZkYWU5Mzc4LCAweGJhMDM3N2U4LCAweDRkOWQzMWZhLCAweDE3NzFmYWJhLCAweGNkZjA3NDViLAotCTB4ZWQ3NGZiNWQsIDB4ZWEwYjVjMjcsIDB4YTdiMjI3ZWEsIDB4ZDZlNWY1NzQsIDB4NjRmMDc1NjcsIDB4ZjZiYTU3ZTUsCi0JMHg3NGZkMGI4ZiwgMHhlZWJiN2E0YiwgMHg0OWQ3NTRmOSwgMHgwYmQzN2JkZCwgMHhjN2UwZThjZSwgMHgwZjkxOWY3MSwKLQkweDBmODk5ODE2LCAweGU5ZWZhYTY2LCAweDEwZjI2N2RlLCAweGUzOWI5MzhhLCAweDFkZmRiM2Y4LCAweDNjYTMxNDZmLAotCTB4MTcwYzZmZGMsIDB4NmUzZTlmMjMsIDB4Zjk2Mzc0ZWMsIDB4YjViNWMxODQsIDB4Y2U0OWQwMWYsIDB4ZDYxNDg5ZjgsCi0JMHhiYzU4YWJjZSwgMHgzMzQxY2IxNSwgMHg1ZDUzMThiNiwgMHgwZjczMWZiMCwgMHgzOTNkNDU2YywgMHhlOGRkYTZhNCwKLQkweGQyZTg3ODA0LCAweDg4OWQ1YmIzLCAweDI5MDYzNWY3LCAweGQxYmRmMTBkLCAweDg4ZTU4ZjVkLCAweDc0YTUxM2NkLAotCTB4YjBkOTFmYTgsIDB4ZThlNTFlYjgsIDB4OGIzM2U2ZTgsIDB4MDA3NDk2ZDEsIDB4ZmUzMTg3Y2YsIDB4M2U4ODdiMjUsCi0JMHg2OTE4NjYzNywgMHhjNjQ3MWJkZSwgMHhjZWRjZGU1MywgMHg5ZDE5MzZiMSwgMHg5YzNiOWQ5NiwgMHhkYzBmMTgwZCwKLQkweDA5YTRhM2I5LCAweGJmNjA2ZGNiLCAweDM1OGNjZDA3LCAweGU1OGVmZDgxLCAweDgzZGZiMDBlLCAweDNjNmM4YmUwLAotCTB4ZTQyNGU3ZjMsIDB4NTNhNmU1NDcsIDB4YmYyZTc4ZTksIDB4YWE0N2QyN2QsIDB4NGExNWM1NTEsIDB4YmY0MzhmNzMsCi0JMHgyMmYxYTljZCwgMHgzYjlhNTE1ZiwgMHg0ZWZiNzQxMSwgMHhkZjgwNDllNCwgMHgxNzMwOTIzZiwgMHhlMWEzNzBmMywKLQkweGFkNzg4NzE3LCAweDcyZjdjODA1LCAweGJhZWQxYjhiLCAweGFjMDZmZDVlLCAweGZlMDE3ZWZhLCAweDkyN2FmZDY2LAotCTB4MWU3ODVmYjEsIDB4YWQyMTZmMzMsIDB4ZjdlMWViODAsIDB4ZGU1YThjMGIsIDB4NzE1YmU1M2EsIDB4YjA0YTFjNTMsCi0JMHg5ZTQxMTIzZiwgMHhmMGU5OGYzNSwgMHhjYWJjMDBhZCwgMHhlZTgxOWQ0YSwgMHgyNmZiOGIwOSwgMHhmOGE2YWExOCwKLQkweDI2YWZmNWVlLCAweDJlOWMwM2M0LCAweGU0NTFkYmRlLCAweGZlODAyYmNiLCAweDljYTA2MDZjLCAweGY0OTdhMDhiLAotCTB4ZDA0NzAwYTUsIDB4ZWZjMDVlYzcsIDB4Zjk5ZWRjYjksIDB4MDYzMGVlOTgsIDB4YTYwYjkwNjQsIDB4MTU1NTc4OWYsCi0JMHg1MTZjNzljNiwgMHg3Yjk3MzkzYywgMHgyMjNiN2FjZCwgMHhkYzhkZTQ0ZiwgMHhmNzE0NjA1NywgMHg2OGE4ZTY1ZiwKLQkweGMwNTdkY2ZmLCAweGZlMjNkY2Y1LCAweGU3Y2ZmMzhiLCAweGYzNWRmZjYyLCAweDMyOWUwM2NmLCAweDBmOTg4Njk2LAotCTB4ZjU0ZDk5ZTQsIDB4NjExYTk4YWEsIDB4YjE3NTY3YWEsIDB4ZjE5YmM4ZmMsIDB4NmZiYzA2MTIsIDB4ZWU5Mjc2M2EsCi0JMHg3MDJhYWZhZiwgMHhkNDMyNWUxMSwgMHhmZjc3NWExNiwgMHg2NDZmZDBhNSwgMHgzM2FlNGQ5YywgMHhkYTQwM2U2MCwKLQkweGNlMDMzYWU2LCAweGFhZjE0ZDJmLCAweGFjYzc4ZTc4LCAweGJjZmRkZDRlLCAweDk5N2Y0ZGI0LCAweGE3ZTQxZTdmLAotCTB4YjE1NWVmYzksIDB4NDZiYTY5OWQsIDB4MjIyYjIxOGYsIDB4OTI1YWFhZmIsIDB4NDdjYzYyYzgsIDB4ZmM5ZDZkMmIsCi0JMHg3YWFmYThmYywgMHg3NTliYzk0NywgMHg2MjVhMzc5NCwgMHhkMTExZTE3MywgMHhlYWI2YzVlMywgMHg3YmY2MzEwMywKLQkweDY2ZWZkODk1LCAweDliN2M3ZTg3LCAweGU0MjAzZTc2LCAweDcxODU1NWY0LCAweGY3ZjgyMTNkLCAweDZiMGUyNGVlLAotCTB4NWM1ZGRjZmQsIDB4ZjljMzc2OTIsIDB4Y2U3NDYzZWUsIDB4MzBjZGMxYTksIDB4ZjlhOWUyMGUsIDB4ZDcxNWJiN2EsCi0JMHgwYjc5OGNkZiwgMHhlOTE4MmZhNCwgMHg1NDdlMjc4OSwgMHhhMTg3NjA3MCwgMHhhMmY2M2VmNywgMHhjNGZjYTA0NywKLQkweGNlOGZhNDEyLCAweDgzZjAzZDYwLCAweGEyYWNkOGJkLCAweGRlZmI2NDVkLCAweGRlZWEwMzcyLCAweDg5NDc1Njc0LAotCTB4MTU5MWI2MzcsIDB4MWJiMGYyMWQsIDB4NGY1YWFmY2MsIDB4M2QzZTY5ODcsIDB4OTdkOTMyOWQsIDB4NjJmYWY5NDEsCi0JMHgxYzNkMzUxZiwgMHhhZmE2NmZiZCwgMHhjODcyZDI3MiwgMHhkOTc5ZTJlZSwgMHg2N2ZlNGUxYiwgMHhlZjAyMmY5YywKLQkweDU1N2MxMjNmLCAweGU0MjQ1YWM2LCAweDk1YWNiMTkzLCAweDRjMmNmMWNhLCAweDE3NTg3N2U1LCAweGM4YTYxZTk1LAotCTB4MmE2MjRlNTgsIDB4NGJjYzE1OTUsIDB4NDc1NjE0ZTUsIDB4YTE2YjI1NjUsIDB4YTU2YjFhNzIsIDB4NTMwYjA2NzIsCi0JMHg5NTBhZmUwOSwgMHg1ZjkwYTY1ZSwgMHgzNmY0MWIzNSwgMHg5Nzk5NzM5NiwgMHg4ZWFjNzljYSwgMHgxZDIyOWZjYSwKLQkweDU5YWIzZTAzLCAweDU5MGJjMTBiLCAweGMwNmQ5NTJiLCAweGZhYTU3ODdmLCAweDU4NmY5MDY1LCAweDBkZjIwMmJlLAotCTB4ZTlmY2Q3Y2IsIDB4MmVmYzg2NTQsIDB4YmY0N2NhZTYsIDB4ZTNjYTgwYmYsIDB4MTNjYTk1N2UsIDB4M2IyYTMyZmUsCi0JMHhmNzZhMWVmYywgMHhjYTkyYmZhNiwgMHg5NTJmN2U1MywgMHg1NGQ1ZmRhNywgMHg2YTNlZmQ4NiwgMHgyNTdmYjZmNywKLQkweGViZjhlZjk1LCAweGZmMzdmY2E4LCAweGY1ZGYyYTI2LCAweDc3ZmNhODA3LCAweDc5OTUxMzdmLCAweDM5NzY0NjY2LAotCTB4Y2YxNTA4MmIsIDB4N2U2N2ZjMDYsIDB4NjBiOGY2NjAsIDB4M2MwYWFmMWYsIDB4NTMxOGYzMWUsIDB4ZmY3MDUzMGIsCi0JMHg0ZGYxODY2NCwgMHgyMjMxYzU1YiwgMHg0OGNiOWIwYSwgMHg1YzlhZGRmNywgMHgyODlkZDk0NywgMHgzYjczNGYwNywKLQkweDI3NjY5ZWNkLCAweDcyZDZkMDNiLCAweDYxM2U2MTljLCAweDRhNTNhMTliLCAweDc5M2NiZDgwLCAweGQ2Yjk4ZWU0LAotCTB4YWY5M2QwNDIsIDB4MTUwNDg2YjAsIDB4YWRiYmE1ZTEsIDB4MzA5ZTA3YTAsIDB4MDI3ZWViODUsIDB4OTYwYmM3ZjUsCi0JMHhjZTgyYjVjYywgMHhmYjdmNmIxYSwgMHg0YzM5YTdlMywgMHhiMzhlNjNmNSwgMHhkZmUwMDU3YSwgMHgxYmIxNTkxZSwKLQkweDNjZTEzMGFmLCAweDU3YmVkZTUwLCAweGU2MmU3YWIwLCAweGYyMTU1ZmViLCAweDAwYzM3YzAyLCAweGI3YWQyZGU1LAotCTB4YjE2ZjMxMDUsIDB4MzE2OGU1YjgsIDB4NzUzMWI2MmEsIDB4MzdkNDEyYjYsIDB4MWUyOGVkMTEsIDB4ZThiYjU3ZDAsCi0JMHhjN2JkZWQ3YSwgMHhlMjEyOWQ2YSwgMHg2NGNmZjlhMSwgMHg5Y2NjYjM3ZSwgMHg5ZGM2MzE1MCwgMHg3ZTM1ZmIyMiwKLQkweDc0OTlmMWIzLCAweGRiMjNmMTgzLCAweGRmZDA2ZTE5LCAweDlmY2YyMjhlLCAweGZmZmNjZjUwLCAweGZhNjhmM2E2LAotCTB4ZWM3NTdkMzYsIDB4MDYyZWZhNTksIDB4N2U0MzhhZWIsIDB4ZTVjNDk4M2UsIDB4YTVkODE3NGQsIDB4MGIzNGRmZTgsCi0JMHgzNjRiNzliOCwgMHhiNTA3YTlkOSwgMHhjYmVmYjM3YywgMHg1ZTMwN2Y1NCwgMHhmMDgxZDJiZCwgMHgzNzhhNWM5NiwKLQkweGUyNzkyNzM0LCAweDYzN2RiMTBiLCAweGNjOWRjOTM2LCAweDYzNzk0NjA0LCAweDhhMTNkNTNiLCAweGUzZWY4MjJiLAotCTB4YjJmY2I5MGIsIDB4NzI4NWZjZGQsIDB4ZWZlNWNhMjcsIDB4YWU4ZjBjY2IsIDB4M2JmZWZhNmYsIDB4ZGUwMGI3MWQsCi0JMHgwNTQ2OGQ1YywgMHhlNmYxMmRmNywgMHg3ZTUxMmE3NywgMHhhM2NiMzcwNCwgMHgxOGUzMjEyNCwgMHgxMjc5MmZkNSwKLQkweGFhOWRhNmZkLCAweGY2MWYzZTM5LCAweDBlYTIwMGY1LCAweDFiMjZhY2VkLCAweGZkOTk1OWQ5LCAweGMzNzdjNTQyLAotCTB4Y2YzMjhkNzgsIDB4NmY5NjhhZmYsIDB4OWNiOTBiYjMsIDB4YzM0YmRhMzcsIDB4YzBiNzZlNzQsIDB4NDQ3OGMyZWEsCi0JMHhkOWIwZjI1ZiwgMHhmM2MyY2FlZiwgMHg2ZmJjNjc2NCwgMHgyODdlMDMzMSwgMHg0YTY3NmE3YywgMHhhNzczMjgyMywKLQkweGEzMTNkYjgzLCAweGY2NDgzYTlmLCAweDI3YzhiMzQ0LCAweGQyMzE0YzZkLCAweDI1NmM0OWY3LCAweDQ0NTIwM2NlLAotCTB4Yzg3MzM2YmYsIDB4MzZmOGU3ODUsIDB4YjE2M2UwYTMsIDB4MzIwN2U2OWUsIDB4ZjdiNzVmMjksIDB4ZWZiYTVkM2MsCi0JMHg5ODU1ZDkxNSwgMHg2ZTFjODQ0NywgMHhlZTgxNzExNiwgMHgzZmY0NDZmMSwgMHhjZGM0NDUyMCwgMHg0YTkwOTY2YywKLQkweDRiZmE2OWUzLCAweDNmYzc2ZjFiLCAweDkxNGVkZTM2LCAweDY3OGRhOTI3LCAweDlmNWZhNTFmLCAweGY1YTYxY2RkLAotCTB4YTFmZDg1ZDksIDB4ZDcxM2I3OGQsIDB4ZTMwZjIzMTcsIDB4ZjVjM2M3NmIsIDB4NWEzNzhlNDUsIDB4MjViYjNlYmYsCi0JMHg0YmIzZWI0YywgMHgxZWU5NWVkYywgMHhmMWVjNDc2ZiwgMHg0ZjY3MWFmYSwgMHg1NjljZmU1NCwgMHg3MmU0MmZjZSwKLQkweDc2MzJjYzE1LCAweGQzM2ZmNjBlLCAweDA5ZjllOWMyLCAweGQ5YzVkMzEzLCAweDdlN2EwOTM3LCAweGE2OTc4OGIyLAotCTB4OTkyZTVjMDksIDB4Y2ZiYTY2OWMsIDB4NzE3OWQxMzMsIDB4NmRiNWQyMTcsIDB4OWRjZTkxYjcsIDB4YzgyNzI5NmMsCi0JMHg0ZWQzOTI3ZSwgMHg0MGZjODkzMSwgMHg5ZmNmOGFkNiwgMHgwMmY3ZjAzMCwgMHg3OTk4ZTZhOSwgMHhlMWZjN2IyYiwKLQkweDcxMTFiOWY5LCAweGNlYjUzNGUzLCAweDEzNGZmOTgwLCAweGUzMGMxZDlkLCAweDMzMTRiNmVjLCAweDYyOTZkZmFkLAotCTB4ZmNhMWM2MGQsIDB4Y2Q4MDk5NTUsIDB4ZGI4MDA0YzEsIDB4MGIxYjdjOGIsIDB4OTU0ZTNkNjEsIDB4YzUzMzhiZjMsCi0JMHg5MmYzMDA3YywgMHhkZmExYWFkMiwgMHg4NGZmN2QwOCwgMHg3NzI2NjNhMCwgMHhlZTIyYWJiYSwgMHhjNDViM2NkNywKLQkweGFmOGQ0OWVkLCAweDcyMzdlN2EzLCAweDQxZmY1ZjMwLCAweDRmMzFlN2YwLCAweDhmMGM2YmE3LCAweGRjM2U5YzkzLAotCTB4NTk4N2ZjOWYsIDB4ZDA3YmM2MGYsIDB4YzBmZDNlOGYsIDB4Nzc4MjBhZTAsIDB4ZjVmM2E1OGMsIDB4NGVjNzg3ZDMsCi0JMHhkNjYyN2Y0MSwgMHg4MjQ2Njk4ZSwgMHhlMzAzYWMwZCwgMHgyYzc2YjMxZiwgMHhjY2YzZTIzNCwgMHhkZmZiNDYxYywKLQkweGYyNGNkNjc1LCAweGQ1OGVkNjc1LCAweDRjYmZmZGEyLCAweGM2NjVmNmMxLCAweDZlMzBjZmMwLCAweDkxZWY3NjUwLAotCTB4OGM4YjhjMDQsIDB4MDAzNzNmYjUsIDB4Y2VjNmQzY2IsIDB4YTA3ZGY4OGQsIDB4MWJmNjE1NWIsIDB4NWJiY2Q3MzQsCi0JMHhiMjI4ZWQ5MiwgMHgzNmM4MWVhYiwgMHg0NGY1OWZhMSwgMHg5OWJmM2YyMSwgMHg5ZTI2M2NjMywgMHhiZjI1ZTE4NywKLQkweGYwOTFmYzdlLCAweGZiYjJiYzMxLCAweDcyYWVkNjlkLCAweGI0ZjZjNjNjLCAweDljYjFjNzI5LCAweGRhZjE1MjE0LAotCTB4ZjBlOGFiMzIsIDB4NGE3MmM3MWUsIDB4Y2QwMmFlYjgsIDB4NWI3N2NhZDksIDB4MzE1OTYzOGUsIDB4ZTIwNGY3ZGMsCi0JMHg0NmY3ZjBmNywgMHhjNjE0ZmM5NSwgMHg2ZTZmYmFjOSwgMHhkOTNiZGEzYywgMHgwZjI3NDM1YiwgMHg0NGQ2NWM1MCwKLQkweDk0ZjZjMmY3LCAweDE4MjQ5Yjc5LCAweDZiY2I4ZjZmLCAweDI3YjQzZDQ1LCAweGYyNDhkYjI1LCAweDI1NmVhOTM1LAotCTB4M2M2MDczYWQsIDB4NTFlZTc1YzMsIDB4NDVjOTcxN2MsIDB4YmVjOTc3MjQsIDB4MTFlYzEzN2YsIDB4ZTdlZWZmZGMsCi0JMHgzM2Y5ZmNmMSwgMHgxNTFhZmU4MiwgMHhmODg5MzVhZiwgMHgwMjdjYTE0MCwgMHg5YWNiYjA5YiwgMHgxNTFkMjc5OSwKLQkweDA0Zjc2Y2ExLCAweGM3YjcyZTMxLCAweGMwNzhlNWMzLCAweDZjNTJmZGM2LCAweDU4ZWMwZGJlLCAweGVjNjk5MmJhLAotCTB4OTU1OTRmZDksIDB4NjBjNzc5ZjUsIDB4YjJiZjYwZGUsIDB4MTBiMjg3NjgsIDB4YTZiYzVmZWQsIDB4MGZlODMwOGEsCi0JMHhjNjFkNWRmZSwgMHhlNmRkYTFmNSwgMHgzNmJlMzhhNCwgMHhmYTE0Yjk3ZiwgMHg5YzMzYTA4YiwgMHhjZjViNmNmZiwKLQkweDY3YjhkYTdiLCAweDIzN2U3YWM0LCAweDFmMWVmNGU0LCAweGVmOWI0ZmVmLCAweDQ2MzcyOGRiLCAweDQ2NWRiY2QyLAotCTB4ZTYyNDhmOWMsIDB4NDYzMGViMDMsIDB4MWRhMjI3Y2MsIDB4ZGU3YmFmYWQsIDB4ZjdlNzRkNGMsIDB4ZGY4YzNkNGQsCi0JMHgzOTJlNjU0MywgMHg4YjBlZmQ2MiwgMHgxZTkxMmFkNywgMHhiZjQ4MmEzNCwgMHhmOTQ4ZDU3NiwgMHgyZmRiNzZmYywKLQkweDdhM2YwZjI5LCAweDc5MGExNzFkLCAweDcyODdlYWJjLCAweDM2NWZhMTg4LCAweGU0MzBmNTRkLCAweDFlMmExZmNiLAotCTB4MDE2NGFiYjIsIDB4MGVkYzI5Y2IsIDB4NjI0ZmM3OTMsIDB4Y2FmNTg4YTYsIDB4ZGRhODkzMjksIDB4ZjE4ZjY4MzQsCi0JMHgwOTY1NjljNSwgMHg3NGViZDIyYSwgMHg3MGEwZGFkNiwgMHgyZTc4ZTAzZiwgMHgzMThmMmZjYywgMHgyY2I3NWU1ZCwKLQkweDlmYWFjN2UwLCAweGYwYmI3MmFiLCAweDdiNGI1OTJhLCAweGY3NDVkYTAxLCAweDlkYmNhNzJjLCAweDNhZDMwZDg2LAotCTB4MDVlOWJlNzAsIDB4YTE5M2RiZWIsIDB4ZGYzOWZiZGUsIDB4ZTNjYzU2NzcsIDB4Y2I3NjAzNzIsIDB4OGNkZmJjYmEsCi0JMHg5ZTQ3MDA5NSwgMHgzMGY0ZmI1ZiwgMHhiZGFlODNkMCwgMHg0MzM2NTc0NiwgMHg4NDc2ODJhNSwgMHhhZWZhZTEzMSwKLQkweGVjYmY5ODNjLCAweDJjMWJmYWUwLCAweDQ2MzczNjVjLCAweDVkMTdiYTNjLCAweGZiNmJmYzA5LCAweDRiOWMxZjYzLAotCTB4MWM2ZDk0ZjgsIDB4YjU0YmFjZWYsIDB4ODlmN2M2ZGUsIDB4ODRmZThkZTgsIDB4NmQ4MWVhZjEsIDB4YmViZDFmMzEsCi0JMHg3ZGUyMGE0MiwgMHg3Yjc3N2I0YSwgMHgxYWZiOGE5NiwgMHg5NmQ5NGZiZCwgMHhiODc5NWRhZSwgMHhjYTQ2NzVmZSwKLQkweDJiYzY4ZjBmLCAweGI5YjcxMWQ4LCAweGE0ZDZjZTkxLCAweGE3M2MzZDUwLCAweGU4Y2M2ZjdjLCAweDhhNDdlZWU5LAotCTB4ZTNmN2ViMDUsIDB4Y2EzZmRhZWIsIDB4YmU3OGJiODIsIDB4N2E3OWZlYTksIDB4MDU5YmM5NGEsIDB4NTAwNzE0YTUsCi0JMHhlYmViMzZmOSwgMHhmN2VhMzZmMywgMHgyODNhNjMxNSwgMHgxNjU0ZDNjNywgMHhmZGJmYjkwYywgMHgzOTRiNGU3ZSwKLQkweGJkNmNjMTU4LCAweGJiYTM1NWY3LCAweGU1YjE3ZWNjLCAweGNlNDIxYmZjLCAweGQzMjgyNjY3LCAweGE3Y2U1MDBhLAotCTB4ZjNmZWM5MWEsIDB4MjM1MzFhYTYsIDB4ODMyOWRlZmQsIDB4ZjA5Y2ZlYjksIDB4MzdlNDhkOTIsIDB4Zjc0YWMwZmIsCi0JMHgzODUwZDRkNiwgMHg0OWM0ZWQwMSwgMHgzZWM5MTg1ZiwgMHhkMWQ0ZTM3ZiwgMHgzOTQxYTc4NywgMHg5YjRiMzdmOSwKLQkweDBjZTRkZGIwLCAweDg2ZWQwZTc4LCAweGM0N2Q3NGJlLCAweDg0Yjc2NDlkLCAweDVmNWY5MTBiLCAweGVkOTNhMTY2LAotCTB4NGMzYjFmYTgsIDB4MmRhN2JkZjQsIDB4MjY1MzZjOWYsIDB4NGNhYmZlZTEsIDB4NmQyOWRjYzUsIDB4ZGM2MjE1ZGMsCi0JMHg1ZTAyOWI1ZiwgMHg5OTZlYTc5MiwgMHg1MWU3ZTQxZCwgMHhmNmQyYmZkNywgMHgyODY1Yzc4OSwgMHhmMDM2NTc3ZiwKLQkweGJhZDU3YmI1LCAweDk5OTdkMjNhLCAweGYxNDJjYzQ1LCAweGQyMmFmMGVlLCAweDE5ZTMxYmM3LCAweGE1NmNjYmYyLAotCTB4Y2YwOGJiZjUsIDB4NDY2NGVjYmUsIDB4ZWFiNjZmZTgsIDB4ZjNjNjJkMzIsIDB4Y2U2NzYxMTksIDB4NDRkMzU0NTEsCi0JMHgzZjk1NTUyYywgMHg3M2U3ZjJiNywgMHg5ZjNkMGYxNSwgMHg3M2Y4N2FhYiwgMHg2ZmVmZjcxYiwgMHgzZjYxMDI1MywKLQkweDJkOWI3N2Y0LCAweGRkZmQ4NWQ5LCAweGZkNzk3YWE2LCAweDlmZDUwYjM1LCAweDE3MmZmZjAyLCAweDE3MWFjMTU4LAotCTB4YjdhZTUwNTAsIDB4ZjNmMjM0NWMsIDB4ZDEzYzVmMmYsIDB4YTRhZGEzN2IsIDB4MmJmMzg1YzMsIDB4MzZmZGQyMzUsCi0JMHgzZWU4OTNiMCwgMHg0YmM1NGVmMiwgMHgzMmY3OTFmNywgMHhmODIyMDY1ZiwgMHg2NGQ5ZDJlNSwgMHg2MjljYmY0NywKLQkweDJmNGI3YmE0LCAweGJmMGM4YzdiLCAweDkxYTgxNDAzLCAweDQxNDIzZGY5LCAweDY3NTcyZjQ3LCAweDM2NTRmOWQyLAotCTB4ZWJmNzEzMjIsIDB4NDNiMjU2YmIsIDB4MGZhMGYxMWEsIDB4ZTdmNzU3ZGIsIDB4ZjZlNjQyZmEsIDB4Mjk1MWJlYzMsCi0JMHg2MTYxZGVkNCwgMHgwNzQ4OTVjOSwgMHgzYmNhNjU4NywgMHgxZTc4ZTFmZiwgMHg2NTBmOTQzZiwgMHg3MzVlZDEwNywKLQkweDVkZjllOGQ2LCAweGU5YzQ5ZDJlLCAweGYyMGE2NTQxLCAweDI1NTUwY2MxLCAweGNkZGZhZmJhLCAweGY4OGJhMzU0LAotCTB4N2Q4N2RlOWUsIDB4MmNlZTc1YTUsIDB4MWZhMmJiN2QsIDB4NTU1NDZiYzIsIDB4OTNhMThjZTIsIDB4NmZhNWY1MTcsCi0JMHg4Y2Y4M2M3MywgMHhiM2JlNDc5NCwgMHg5YmVmYmM1NCwgMHhkN2M3MDg3NCwgMHhlMGIwN2NmOCwgMHhmNGFlNGQ0ZiwKLQkweGY1MmE0Mzk2LCAweGE0OWE0ZjYzLCAweDMwNjgwMGVlLCAweGJmZmM4MDBjLCAweDUxY2YwY2NmLCAweDc0Y2IyNDJlLAotCTB4YTk3MDZhZGYsIDB4ZjU4NjUyMWMsIDB4ZTg4NjdkZjAsIDB4NGZlMGIwNzcsIDB4Y2Y5ZTg4ZjksIDB4ZTFlOTBlZjIsCi0JMHhlZWZmMDQ0NywgMHgxZmI5MjE2MywgMHhlOGMyZGJmNiwgMHg4YjQwNmE1YywgMHgzZTc4MWRiZSwgMHhkMTYzOTQwNiwKLQkweDIyYWJmYzdjLCAweGQ0OGYxNjgzLCAweDllMTdhMWUxLCAweGQ5ZDdiMTdkLCAweDVjNDBhZWIzLCAweGM4Y2JhZDNlLAotCTB4NWRlNDI1ZDcsIDB4M2QyYjZkYWUsIDB4ZDU2NDU1Y2YsIDB4MmQ2MmYzODUsIDB4MDdmYWUzNmYsIDB4NDBjMTkyMWMsCi0JMHgzNTJhZmQ4NSwgMHg3ODAxY2VjZSwgMHg3MTI2NDA0NiwgMHg0OTg1OTMzNywgMHhiYWRkN2M1ZSwgMHgyYjVjNDUxYiwKLQkweGViZDE5ZDdhLCAweDQ0YjA2NWJiLCAweGYxY2NjYmViLCAweGNhNmVjOTc5LCAweDMyNmVjOTkwLCAweDE4YzIwMDZkLAotCTB4YmRiMGQ3OGUsIDB4YTM3MTZlM2IsIDB4ZDRmYjNiM2QsIDB4ZTY0MzkwNjAsIDB4MTgyYjU2N2IsIDB4ZTQyMzNlMGYsCi0JMHg4OTJiZTk5MiwgMHg1NmZkZDdkMywgMHhkYTUzNTdhMiwgMHhmYmM4ODI4YywgMHg0Zjg2OTcyYSwgMHhmMzE4MzMzYSwKLQkweDdhYmFiZmJkLCAweDRmOGYxMDcyLCAweGU1YTNmZTExLCAweDdmNDU1ZmRjLCAweGY5ZjUzYTYzLCAweGM2MmVlMzg2LAotCTB4ZTljN2U1NDcsIDB4NWMyNzBkZjMsIDB4MWY5NTFmZWIsIDB4MWY5NTEzOTcsIDB4M2Y1NzQ0MzcsIDB4OTUxMTE5NTksCi0JMHgyYTJlMzcxZiwgMHgwNzVjYWUzZiwgMHhhZTk4MmY0ZiwgMHg5ZDUzM2Y2YiwgMHgyZDZmODNhMywgMHg3ZGFlYWVmYiwKLQkweDVkNGVlNzk1LCAweGJiY2E5Y2ZkLCAweDc5YjdmNTc0LCAweGYzYzFkNmVmLCAweGI1ZDdlZmFiLCAweGQ3YWJlMDVmLAotCTB4ZTU3NzdmZDUsIDB4MjBmNTc0MGYsIDB4OGJjNjYyMmYsIDB4Zjc0YTNjMzEsIDB4NjEzZGQzODYsIDB4MzAxNmEwZmEsCi0JMHgzZDg2MzdiYywgMHg1NzcyMjkyMCwgMHhmNDcxZmVhNCwgMHgxZTRjNWZlMSwgMHg3MWUzZjdjMiwgMHgzYjA5M2ZjZCwKLQkweGM0NTkxYzc4LCAweDgzOGI1OTVmLCAweDdjNWFiMWUyLCAweDlhNzYzNDM2LCAweGI3MjJmZDE1LCAweGJkNDM0ZDQ1LAotCTB4ZjVjYjdlY2UsIDB4NzQzODBiMDYsIDB4ZGY4OWNiNzEsIDB4MWI3NmE0YWIsIDB4ZmNlOWIyOTIsIDB4YjNiMDUxZTMsCi0JMHhlZjMwZjk3ZCwgMHhlOTI3Y2YyMCwgMHgxYzZiMDAxZiwgMHg1MDBkZGJlMywgMHhkN2ZlYmI0MiwgMHgyMjM3Y2NjYywKLQkweDllMmMxZTYyLCAweDNjYjU4NWM3LCAweGU2NGYzMTA3LCAweDhiZjNlMDQ5LCAweDYxZjdjZmUzLCAweGZkMWYzMTNjLAotCTB4MGY5NTJiMzgsIDB4NDE3M2I1M2EsIDB4ZjZiZjYxOTUsIDB4ZjI4MDczMzIsIDB4ZWQ4MzRiMTEsIDB4MDM2Zjk4NjYsCi0JMHhjNTE0NDdjOCwgMHhjNzRlNWUxMiwgMHhiZDRkYjgzOCwgMHg3YWFhM2RlMSwgMHhiM2RkM2E3ZiwgMHgwNTBkMmRiMSwKLQkweDNhYTVkMDRjLCAweDNkMWZkMWU0LCAweDdjZGJlZjAyLCAweGUzMTRlMjhjLCAweDExZmZlYzg3LCAweDQzM2NlMWM2LAotCTB4YmIzZjM0NWMsIDB4ZjdiY2YxY2MsIDB4NzRiOTdmZjYsIDB4OTI2NWU1MTgsIDB4NDVmNWVlOTMsIDB4YjFkZGE3ZDcsCi0JMHg2ZTM3ZjNmOSwgMHhkMTc3YmY1MCwgMHg3NjViZGVmNywgMHhkZjZmZjdhMywgMHhhMjMxYjY3NCwgMHhjYmY5YWZiZSwKLQkweDEzY2NmZWI2LCAweDY2NTkwNzQxLCAweGFkNTVmZGZkLCAweGZhZTEwZWY0LCAweDMzNThkZDdkLCAweDQ5MjcyZmM1LAotCTB4NjA0Mzk5YmUsIDB4ZmVjNmNmYmMsIDB4ZTFkYjdiZjUsIDB4YmUyYjRmYmQsIDB4M2JmZDFkYjgsIDB4ZTdjNWVlNzgsCi0JMHhmYWYwOGVkMCwgMHgyYzk1ZTY2OSwgMHgwNDM5OWU3YywgMHhiM2Q0N2ZlYywgMHhiZTY2MmM3MSwgMHhhZGQwNWY5YywKLQkweDQ1ZDM1NjljLCAweDk5YWE3OWZlLCAweDZiNGU0M2UyLCAweGIwZjNmY2U3LCAweGYxNTE2ZGVmLCAweGNiZjQ2NjgyLAotCTB4NDQ3YmFmMDEsIDB4OGY4YjQ0N2MsIDB4NTlmYTJkZGYsIDB4ZTk0OTRhMjEsIDB4NjYwZTczYTQsIDB4NTI3ZGQwMGQsCi0JMHhjNWVjNWVjZCwgMHg4NjMyOGUwZiwgMHg5MzZjYTM3ZSwgMHhjNWNhNDQyZiwgMHhjNTMzNTRmNiwgMHg0Y2M1MjQwNywKLQkweDMyOTJlNzc5LCAweDI4MjNiZThhLCAweGU3OGZhMzgxLCAweDk4NWI3NjM3LCAweGQ0ZjY4Y2ZjLCAweDkwMGYxNDUxLAotCTB4Y2UyODYzNDIsIDB4YTg4NWIzNjAsIDB4MmZiNmJmM2YsIDB4NzdkZmRlYWEsIDB4YmNkM2NmNWEsIDB4NzU5ZmVlZmEsCi0JMHhjNzcwNGYzZiwgMHgxZTZhMjcxOCwgMHg0N2Q2MWUzOCwgMHhjY2MwNzM4ZiwgMHhkY2I5ZGZiOCwgMHhmMWJlMzMxYSwKLQkweDBkODk5MGUyLCAweDVmOTE1MjQzLCAweDgyZGQ3NzNiLCAweGQ4YmJmYWZjLCAweDMxMmI1OTcyLCAweDgxMTgzZThmLAotCTB4NjQ4Njg3OWYsIDB4ZmU2MDVkMTMsIDB4NWM2MjMwN2MsIDB4ODQ4Zjk3Y2MsIDB4ZGVlODAyODEsIDB4NmFhMGMxMDQsCi0JMHg3MTQyNWEwNiwgMHhhMTNjNzA4MywgMHg2YWNkOWEwNywgMHhhMDg3ZDkzYSwgMHhmNzFmNzBmZSwgMHgwYTdlN2UwOSwKLQkweDUxZmM4ZDY4LCAweDAzZWY4N2UxLCAweDUxZjJjNjNlLCAweGRhNzY0MmJmLCAweDg0M2ZlMDdlLCAweGE4YmJmMDlmLAotCTB4YTgwYmZhMGMsIDB4YTk1N2U4M2MsIDB4OGNiZjkwZmUsIDB4MWVmZDI3ZTAsIDB4MmJmODhmODIsIDB4ZWZkYTdjYTksCi0JMHhmOGNmZTdhNSwgMHg4NWZlMDlhYiwgMHhhYjY1NDdkZiwgMHg3ZjNkMjU3ZiwgMHhmMDQ3NWZjZSwgMHgwNDRkZmUwYiwKLQkweDQyZWQxMmZmLCAweDlhMjdjZjE5LCAweGRmZDk3Y2E4LCAweGY4YWZmNTQyLCAweDlhZmMxMWY3LCAweGM4NjU0ODNmLAotCTB4MWY5ZTg0N2YsIDB4N2MxMmI3ZjUsIDB4ZjA0NmRmZGMsIDB4ZTA4ODdmMDksIDB4OTUwNzdmMGUsIDB4ZjRjM2ZhNmYsCi0JMHg1ZGZmOTRmYywgMHgyNzU4YWZkZSwgMHhmYzY3MjI3OCwgMHg0NWI0OTc4MCwgMHg3OWRhMTc0NiwgMHhjYzk2OGI2OSwKLQkweDZmNzgwMGFlLCAweDZkZjc0Y2I1LCAweDRiZTQwYjlkLCAweDFlMmU4MDA3LCAweGY3ZjI2NTU1LCAweDUyMzRhZWY2LAotCTB4MmJiMzQ3ZGMsIDB4NDg2Y2Q2ZjcsIDB4YjlmYWE3MmEsIDB4MTU5MmRmNTQsIDB4YmVkOTc2NGYsIDB4NzdiYTY2YTUsCi0JMHhlZGM1NWI2ZCwgMHg0NmNjYjY1OSwgMHgzMmM1NmRlZCwgMHg3MmJhM2ZkNSwgMHhjZDhkZDkyZSwgMHhhZTMwMDUzOCwKLQkweDA3ODE4YzMyLCAweDI1YmI2MzI2LCAweGZiZGY5MjQ2LCAweGVmYmFlMmEyLCAweDZmNzlmZDg5LCAweDQ1ZWZjYzg4LAotCTB4MjI1Mzg5MWQsIDB4NWI2YjIxY2YsIDB4YmFmMDc0OTMsIDB4N2NlNTBjYjYsIDB4MjVkY2RkMDQsIDB4OTg5YjYxYzYsCi0JMHhjNDlkZjkxYywgMHgzM2JkZjY0ZiwgMHg3OWQ2MDJhZiwgMHgwZjdiZTQ5NywgMHhmYmE3YzhlNSwgMHgzNDAzY2RjZiwKLQkweGNiYjVhMzMxLCAweGM4ZTRmYzhjLCAweGJlYTdhZDg5LCAweDRiM2ZlNGQ0LCAweGRiZjg4OTNmLCAweGJmODRjYWFiLAotCTB4NjljNmVhYmQsIDB4MmM1ZmU4YjksIDB4MTM3YmU5OTIsIDB4Y2ZlNDhiNjksIDB4YmZlOTlmZDEsIDB4OTk3YmE2NDAsCi0JMHhjNTMyNTViNiwgMHhhMzIyZDkwMywgMHg1YTQ2YzdjMCwgMHg3MzA1ZmY3NywgMHhlOWI5NWVhOSwgMHg5ZGQxYzUxNCwKLQkweDI3ODc4ZWFiLCAweGY4MDJkZGEzLCAweDM4N2RhM2NhLCAweDRmZGY4NDk0LCAweGQ3NzExMGNhLCAweDk0ZjEyOTdkLAotCTB4OWYzZDE2MzcsIDB4ZjhiYmZmMmYsIDB4MTlmODBjZDksIDB4NWYzZjEzMTUsIDB4YTNjZmMyYzYsIDB4N2Y3NWZlZTIsCi0JMHg2ODg1N2RmMSwgMHgzMWRmNjkzYywgMHhjZjdjNTQ3ZCwgMHhjNzkxYjAzYiwgMHhhNWRiYTNlZiwgMHhlNjJhYjg4OCwKLQkweDRmZjdkMTc0LCAweDFmOTI2NTZhLCAweDgxZjA1OWZiLCAweGM1OWQ4MDdjLCAweDdkZTNkZDMyLCAweGIzZWFkMjY0LAotCTB4NzMzZTYwMDcsIDB4MTE0YTdjOGEsIDB4Yzg1NTAzOWUsIDB4MjZjNjUxNDcsIDB4NmZmZWYyNTcsIDB4ODkzZjIzNWEsCi0JMHhiYWY0MDU3NCwgMHhiNzY4NDllYSwgMHg5OWZhNjE3ZCwgMHgwNWZiMjg3YywgMHg3ZjE4ZWQ1YywgMHg5ZmRlOGZiNSwKLQkweDhkZjMxM2UxLCAweGM1YjIxN2E1LCAweDQ0N2JmNjNjLCAweDgxZTYxNGZjLCAweGFhZGIzYjcxLCAweGY5Yzc4NWRkLAotCTB4NTA0NTU5YjgsIDB4NjU3YWNjZWYsIDB4NzdmZDVlMmEsIDB4OTgzMmVkY2QsIDB4MmM1ZmVjYTAsIDB4MmNmMWM3YWYsCi0JMHg4OTNmNGRkZiwgMHgzYzA2YTVlMywgMHgzOGM1NzhkYSwgMHg1M2M1MzdkZSwgMHg2OTE1N2RkNiwgMHhmNzVkZWViMSwKLQkweDRlYmYwZjI1LCAweDEyMjg4ZTBlLCAweGIwMDY3NGY3LCAweDFmMDcyODAxLCAweDljNTI3NTMxLCAweGNiODY3MDNhLAotCTB4ZDMyNmE2NDEsIDB4NzFlOGI4N2QsIDB4OThmYmNhZmEsIDB4NjE5M2YwMjgsIDB4ZDEwZGU3ZTEsIDB4ZjZlYjRkZWYsCi0JMHhlZTU0MDI1YiwgMHhhMmFmZjRmNywgMHhiMmM5YTgzYywgMHgyMzNkMGVmOCwgMHhjNGMzN2I3ZiwgMHgwZGNiNjU3OCwKLQkweDQyMWU2M2NlLCAweDM2ODQwYmY5LCAweDdlODk4OGJlLCAweDdlZjJhNzMyLCAweDliOWZiYzhjLCAweDI3ODI3YWQ5LAotCTB4MGRjMDk0ZGEsIDB4OGI3NjAxY2UsIDB4NTE1NzUwN2UsIDB4OTVjMmM0NWUsIDB4M2RlMTFhYmIsIDB4Y2EyNjViZmIsCi0JMHhiZTRiYjM1NSwgMHg3ZTc3MjQ1ZCwgMHhlNDdmOTEyYiwgMHgzYWFjYjYzNCwgMHg2MmRmZDExNiwgMHgxY2VkMWViMSwKLQkweDhhMzVmMzAyLCAweDg4ZjM5ZWU0LCAweDkxZjAxYWY0LCAweGJkYWRmMDIyLCAweGQxYzQ1MGI3LCAweDZmN2ViYjFmLAotCTB4MTQ0NWU1MTIsIDB4ZmI0MzhjNmYsIDB4MTJiMzJmNmYsIDB4MjE0Y2Q4MWQsIDB4N2YwMjM4YTUsIDB4MGVmZjAzMzYsCi0JMHhlYmZjZjQ0ZSwgMHgxZTVhY2M4YiwgMHgyOGUyNmQ4MCwgMHhmYzY0NDczYywgMHg1MWNhMzBiZSwgMHgzZWFiZjc5OCwKLQkweGQxZGVmZjA3LCAweDBmYTY3N2EyLCAweDE3ZmM3ODA3LCAweDM4M2Y5ZDMyLCAweDdiZjNjNTk3LCAweDUyMzY3ZmQwLAotCTB4MjI2YmNmN2UsIDB4YjU5ZGY4NWUsIDB4MmMzZjc0MTUsIDB4NGZmNDRiMWQsIDB4NzgwNTRmZDEsIDB4ODZhNjY2ZmMsCi0JMHg4ZDlmN2RmMCwgMHhhZjliYzFmYywgMHhlZDIyZTdjOSwgMHhlYzE1MjQxMiwgMHg0NjQ1ZGM2ZiwgMHg1ZDcxZTVmMSwKLQkweGQ4M2VlZWIyLCAweGY2ZmE4Yjk4LCAweGZhMTJmZmIwLCAweGZhOWRlOWI1LCAweGZlNDI2OTc2LCAweGU4ZGE0NzNiLAotCTB4MWY3NjlkMWUsIDB4ZGVlNWY5Y2YsIDB4MTNkMjcyYzIsIDB4MWZmZjI0ZjEsIDB4ZTdlMjY1NTMsIDB4MDc2ZDRhYzcsCi0JMHgyYjc2ZGRiMCwgMHhhMjdlODRiYiwgMHg0MTU1ODE3ZCwgMHg4Y2VlZDAzOSwgMHgxYjZhYjkyNywgMHhmM2Y2NGYxMSwKLQkweGQ2YTNjY2Y2LCAweDY1OWZjMDRlLCAweGRhMGEzYmU0LCAweGJlMmQwMzJiLCAweDdlYmIxODAzLCAweGJjYzY2OGI0LAotCTB4YzcyNDMxZjQsIDB4NWMwM2JlN2IsIDB4MmYwNzdhMDYsIDB4NzMzYzEwMzcsIDB4YmRhNjkyMGYsIDB4ZTlkZjQ4ZDgsCi0JMHg2MzM0NWZkYSwgMHhiNjhjODA0ZiwgMHg1Yjk3OWExNiwgMHg3Y2YzMDY1MiwgMHgzNTc4NmVjMCwgMHg5Yzc2MGRkYSwKLQkweDYzYjQxOGZiLCAweGQwZTAxZWEwLCAweDk0MDFkZjcwLCAweDc1MjllOTQ3LCAweGNkNTc0OGVkLCAweDI5MmJhM2I2LAotCTB4NDI5YTVkMGUsIDB4YWJlNGQ1NzIsIDB4Njg5Y2ExMGIsIDB4OTFhYzRiNTYsIDB4YzlmMWFkZmMsIDB4MWFmYmU1YjcsCi0JMHgzYWZlZjcxMSwgMHg3ZWJhZmZmZSwgMHg0ZGYzZTJmYiwgMHhmYWVmOWM4NSwgMHg3ZTY4MDM4YSwgMHg5YTdmNzQ3ZSwKLQkweDYwYzZmZjVmLCAweDkwYTM3ZWZlLCAweGU2YjM4MWU3LCAweDcwYmY3Mjk4LCAweDY1Mjc5NzI4LCAweDU2NjFlZjIyLAotCTB4YWY3ZDI1NGEsIDB4NTNhMDU2N2QsIDB4YTFkM2ZjYTYsIDB4OWJkODBmZGMsIDB4ODY3Y2E3NmEsIDB4YzIxNjZlYmQsCi0JMHgwMTYwNzlmOCwgMHgyYmE0MGZkNywgMHgyOWIyOWU4OCwgMHgwODZjZDU0ZSwgMHgzYzFjODEyYiwgMHg3MGI5MGQwZiwKLQkweDk3ZTA5YzVmLCAweGQxN2JmZmUxLCAweGE0MThkMGJjLCAweDdkMDVkOGVmLCAweDM5M2RmODcxLCAweDE3ZTc0N2U4LAotCTB4YzU3YjRhZDgsIDB4ZDc3ZWM5YWIsIDB4MWY3OGQwZTIsIDB4NDM5YmJmMWYsIDB4YTA5ODIwYWUsIDB4N2QyMzZhZjYsCi0JMHhiZGZhMjYxZiwgMHhmMGY0YmI5YiwgMHg3ODdhNmI4NCwgMHhlNzdmZDMyMiwgMHg4N2FhZGNhNSwgMHhmODdhMmIyNywKLQkweDZlNDcyMTUzLCAweDlmM2ZkNzQ5LCAweGZkYzNkMmVhLCAweDMzOGMxYzE3LCAweDE0MTVmYmYyLCAweDgyOGVkMmFmLAotCTB4YzYwZWY3ZTEsIDB4MjAwODA2YzUsIDB4ZmNhMTZhNDcsIDB4NmI5ZDAxYTAsIDB4M2YzNDFlNDgsIDB4YmZmODgzMzgsCi0JMHg3YzdkMWFmZiwgMHg2ZGQ1OWQzOCwgMHg5YzYwMzY0OSwgMHg1OWRjZmY1YSwgMHhlZmQ2ODY3NCwgMHgwNzNmZDFhYywKLQkweGZjNjBlODNjLCAweDdkZDIwOWVjLCAweDNjOWY3MGM1LCAweDM4N2ZlNjE0LCAweGU2NTdlNzlmLCAweDc4NjlkZTQ4LAotCTB4NWEwMjYzZTQsIDB4ZmRmOTE1YmIsIDB4ZGI4ZmJlNzYsIDB4ZmUwYjVmNjQsIDB4NGFkYjE2YmYsIDB4YTBhZjI4NTMsCi0JMHhiNWY3YzJjYywgMHhmNzdjNThhYiwgMHhkZjg1MjVhNiwgMHhiY2IzNWVkYiwgMHhhNjdmMGRjOSwgMHhmYmE2Y2M4ZCwKLQkweGZlZGQ2ZGQ4LCAweDJiZTQ4ZmI1LCAweGUyOTFiZTNiLCAweDY0NmI3YmZmLCAweDg2NzZhZWZhLCAweDg1ZWI0MDM1LAotCTB4YzVkMTVjNzUsIDB4NWNiYTM0YTksIDB4NjA0OWNmYzAsIDB4NTg3YWJhM2QsIDB4M2QzZDE1Y2YsIDB4YTg3NDQ0M2MsCi0JMHgzMWY5MGJhZCwgMHhlNDVlYjExMCwgMHhmYjQ0NDBjMywgMHg3MmZiODZmNywgMHg4ZmM4ZGQ3MSwgMHg3MmUzY2Y5MSwKLQkweDBmNzQ0ZDNiLCAweDJmYTdhYzU5LCAweDQyZTRkNGJlLCAweGQ2OGYzODk5LCAweDEwYmVkMmYyLCAweDY5Nzk2YTYzLAotCTB4Njk1ZTQ1MWIsIDB4ODc4ZjQzOWIsIDB4NTEyN2FhMmYsIDB4ZjA4YmUxMWMsIDB4MGM1Zjc4OWMsIDB4MGZiZTQ1M2UsCi0JMHhjN2JlNzNlNCwgMHg4N2JjM2I3MiwgMHhmYWU3YmQ3YywgMHgxZTM4YTllMiwgMHhjNDQwODFjYSwgMHgwODRlMWJmNywKLQkweGVkODdmYzNhLCAweGJiMjg5NmNhLCAweDNmYmZlY2ZiLCAweGFlYzhjZjU5LCAweGViMGExY2FjLCAweDhlNzgxZGFjLAotCTB4ZGYxNzRmZGYsIDB4ZjQyMTNhYjcsIDB4ZTljMDk0YmUsIDB4ZWJiY2FmYTYsIDB4NTZiYzllZmEsIDB4OGE1YmFlMmIsCi0JMHgxMmJiZTNjYSwgMHgwMjBkYWY4NSwgMHg1N2ZiZGE1ZiwgMHhkM2MyNmM5NCwgMHg2YjcyOGU5NSwgMHg0MjYyNzg1ZiwKLQkweDFmMjEzMjNlLCAweGIzMmE3YmYxLCAweDRjNmVjZmNhLCAweDNhNWIxOTU1LCAweGY4NzliOWY0LCAweDc3NTk4ODdkLAotCTB4MDJjZDJkOWQsIDB4ZDdkMGYzNzgsIDB4YjNkM2ZjMzgsIDB4YTY4MDBjMmYsIDB4MmRmY2ZkMWYsIDB4ZjY3YzNmMGUsCi0JMHhmOTE1NGM4YiwgMHhlMWU3M2ZmMiwgMHhlMjFjMjNmNywgMHhhZjliNDVkYywgMHhhMWZhZGUzNiwgMHhiNzU4ZGVkYywKLQkweDIzOGYxY2U5LCAweGJmM2E1ZWM4LCAweGM5N2E3N2FjLCAweGE1MmNmZmNmLCAweDA3ZTc4MWNiLCAweDljYmI1MmViLAotCTB4ZDcyMDZlNGIsIDB4NDBiYTZkZDcsIDB4ZTk4NjBjNzEsIDB4NWYzMGEzNTEsIDB4OWYxMjkxODgsIDB4NTdjN2U1YWQsCi0JMHgxZGUzZjNlYSwgMHhkN2M0ZDU4ZSwgMHg1MDUwMTYxNiwgMHgzZDU5YzVkZSwgMHg3ZDdlN2U3NCwgMHg3M2U2OGJhOCwKLQkweGY5YWI1MzFiLCAweDBmMmJiOWY5LCAweDVkZDY2N2Y3LCAweDVmZjY5ODg2LCAweDhmOTE1MGUzLCAweDY4ZGY0MmNhLAotCTB4ZjJmMjI2NWMsIDB4NzY4OTk0ZTcsIDB4NzExN2Y4Y2EsIDB4OWU4Y2RiOWMsIDB4ZmZmYmQ0NDYsIDB4MmE1MTY2M2EsCi0JMHhiZjJkMDk4YSwgMHgzZGNmNDg2OSwgMHhlNmRmNDNiNywgMHgwZmFjZTRmZSwgMHgyNDU3NWMwYywgMHg1M2YxNzhmMiwKLQkweGNmMzQ1ZGMzLCAweGVhMDAzOGM4LCAweGU1ZjZiZTg1LCAweDNkNTNkMDg4LCAweDM4YTFlMmZiLCAweDg3YjI3ZDY3LAotCTB4ZTVkMjhiZWYsIDB4OTJmYjgyZDgsIDB4NWFkY2U1ZDQsIDB4N2JmYWY3ZDQsIDB4M2UxNDRmZWQsIDB4Y2QzMjg3NWEsCi0JMHg3ZTkwOTY3ZSwgMHhkYTdmMGViZiwgMHg2MDc5NjhmZSwgMHgxZTU3MDZmNSwgMHg4NzE3MmJkOSwgMHg2MDlmZTJlOCwKLQkweGY2YmNiYmU4LCAweDcxOGRmNGQ4LCAweGE3MzYwZDRhLCAweDY0OGUyOTdiLCAweDMwMGI1MTRhLCAweGVmZmViODRmLAotCTB4ZTliY2NjNTIsIDB4Yjc0ZTgyNzMsIDB4YmVlOWUyMzgsIDB4NGNjM2JkNzUsIDB4MWRkYWJkZjcsIDB4NjFkYTE4M2IsCi0JMHhjMjM2ZGI1NiwgMHg4OWEzODU0YiwgMHg4MzVjOWU2MSwgMHhiN2QyYjU5YiwgMHg4MmYyYTIwZiwgMHg3OTBiZWMxYiwKLQkweDY1OWYyYTdkLCAweDhlNGQ1NGMzLCAweGM2ZDY3ZTcxLCAweGRjOTRhYWJiLCAweDc3MmEyZTMwLCAweGEzYWZmZmYyLAotCTB4ZjI0NzdhYWYsIDB4ZWMxZjllMzQsIDB4YjA3ZTUzMzAsIDB4OGJhZTY4OTQsIDB4MjZkYzFmOTUsIDB4NWM3NjhkZWMsCi0JMHg4M2FlMGE1NywgMHhmNWI0YzljNywgMHhhZjNjNWQ1OCwgMHg5YzYzOWYxMSwgMHhkMWYyZWNjYywgMHhhZGEyZTNmZiwKLQkweDg3ZWM0ZGJiLCAweGFhZTJkZWQ2LCAweDI1ZWYyODYzLCAweGY5NDJlYWIzLCAweGZmNzNjNTJhLCAweDQxNDdmNTFkLAotCTB4YzZkNDljODQsIDB4ODlhODdlN2YsIDB4YWUxYjBiZGYsIDB4MmIzNWZjZjAsIDB4N2ViMzE3ZDcsIDB4N2YxOTg4NmIsCi0JMHhmMzU0M2FiZiwgMHhiZjE5YmViNywgMHhkYjMyZjQ2OSwgMHgzNDYxZjNjOCwgMHgzMzZiOWViZSwgMHg5ODFlZDA3YiwKLQkweDdjYTc0YjZiLCAweDgwNDBiOTlkLCAweGRhMjM5MzE3LCAweGJmM2U2NzdmLCAweGU5YWIyOWJmLCAweDFiYmY0NzQ4LAotCTB4ZGZjNWUxMzcsIDB4NGMzNmY4MDEsIDB4ZjZmNGYxMTcsIDB4NmJkZDEzNTQsIDB4M2NjMGRiN2EsIDB4ZTc0NjUyZTgsCi0JMHg0OWJkN2EyMywgMHhiNzlhNzE5MywgMHg4MGRiMzhjZSwgMHgzMWQ4Nzg2YywgMHhjYmU1MDRiZSwgMHgxMzcyOGVlMSwKLQkweDNiMDA2N2RlLCAweGNhMTg2ZTIxLCAweDQ2ZWVhNTk5LCAweGJmMzBlZmJjLCAweDdmYmU5OGE2LCAweGQ3N2ZjNWEyLAotCTB4NDkzMDNkMDksIDB4ZGRiMDM5ZjIsIDB4OWEzZjYzNjcsIDB4ZGU2YzQxNTUsIDB4N2ZkZjQ1OTUsIDB4ODhkZmYxMTQsCi0JMHhiYjQ0ZmQ3NiwgMHhhY2EyNmVkMywgMHhjMDNlZmEyZSwgMHg0NWU4ZTUxNSwgMHg4M2Y2OGI5ZiwgMHhmMWEyMWFmMiwKLQkweGY5MTJmYjg5LCAweDcyNjk4YmZmLCAweDhiM2JmNTAyLCAweGUxMjNiM2IyLCAweDk0OWQ4OWVkLCAweGE5ZTlhZjZmLAotCTB4Y2RmMjNlYTYsIDB4ZjIxMzBkYjYsIDB4NzE0ZmUzNTEsIDB4N2NjNzEwOWUsIDB4NjQ5M2M0NTYsIDB4ZjM3YjcyZjAsCi0JMHgzZjRmZDNjOCwgMHgzN2IxZWNlZCwgMHhhNDNkMDg3NywgMHhkMDUwOTNmNSwgMHgyMjA5OTU0YSwgMHg3OGEwYzRlZiwKLQkweDI1NjRmZTg4LCAweDc1ODAxZTkwLCAweGZiMTk3ZDM2LCAweDYxZGNmODllLCAweDcxNmQ4ZTVjLCAweGY2Yzc0YjZmLAotCTB4M2E2YWI5MTUsIDB4NzlkMTRiZmEsIDB4NTFlZWY1ZGUsIDB4ZjU3ZmM4ZTksIDB4YWFmZDM1NTMsIDB4YWZmOTIzNWEsCi0JMHg3YmZmOWRkZCwgMHg3NWI0MmYzYywgMHhiOWU0NTg5OCwgMHhjNjY5NzQ3YywgMHhlNDFiYjU3MywgMHhmZGM1OWJlZCwKLQkweGM3NDc2ZGM4LCAweGJjYmUzMTU4LCAweGM2MTI1NmNkLCAweGI2NmRkOWYzLCAweGJiNzIxMjk0LCAweDQ3OGYzYzZjLAotCTB4ZjFiMzZmNmIsIDB4Y2E5YjNhYmMsIDB4MWIzNmQ1ZTMsIDB4ZjJkMzdiY2YsIDB4MjdkZGRhNmYsIDB4YmI1YTBmMDgsCi0JMHhmZWY4YzNlMSwgMHhmZjdlNTRkOSwgMHg1MjBkNWUyMSwgMHgxYmQ5MzhiYiwgMHhiOGFjYmNjMCwgMHg2NmY2NDYxNCwKLQkweGM3N2Y5NTljLCAweGM4YzBhMTJmLCAweGY5ZmMzMWFjLCAweGVhMjY2MTgyLCAweDQ5NjY1YjY3LCAweDliNTRlYzk4LAotCTB4ZDg3NjQyZWMsIDB4NGU5MjVlOTYsIDB4MGRmMTEyNzIsIDB4YmJkYmQ2ZTMsIDB4MTlmNzQ1ZjEsIDB4NmI3YzA4NTYsCi0JMHhmM2I3ZDRmZCwgMHhhOWJlZGU3NSwgMHgwOGM1NmU3MiwgMHg4YmJkMTNiNCwgMHhkOWI3NGU5MCwgMHhiZjMxNTg5NiwKLQkweGRlOTdiMjU0LCAweGMzZjViZmIwLCAweGNhN2NiYTBjLCAweDc5OTRmZTllLCAweGQ4MTViZmEyLCAweDUxMmY2NDlmLAotCTB4OGIxMzNmYjAsIDB4ZmEwY2ZmZmQsIDB4YmJmZWJjYzUsIDB4ODE5ODE1ZTcsIDB4NjBlM2RmNDYsIDB4OWU0ZmJiNGMsCi0JMHg2OGNmNGIxZSwgMHg0MzljNTVhNSwgMHgwZmY3YmY0NCwgMHhmYWNkOTVkYiwgMHg5M2Q4MjU3OCwgMHg3NTgzMGQwZiwKLQkweDNiOWU2NmQ1LCAweDcwOWU5MTMxLCAweDVlMzFiMjdiLCAweGQ4NDkxNzdjLCAweGRiYzJiMjg1LCAweDNkZjkxYTM3LAotCTB4NjM3YmVkNGQsIDB4MjcyODlkOWEsIDB4NzNkMGYxZTksIDB4YzNlZjhhN2YsIDB4MzFjNzg1NTUsIDB4YzUxOGRhYWUsCi0JMHhmOWY5YTI1NywgMHhiYTYzYTllYSwgMHg2N2E4MTA3YiwgMHhjNmRlYzIzZCwgMHg4ZjQ4ZWQxMiwgMHgzODk1Y2YxOSwKLQkweDhlZmM2YjVmLCAweDNmMjhiYTc3LCAweGY3N2Y5YWFhLCAweDI5MThhNmM0LCAweGY0MDBjMjVmLCAweGRkYWQ3NDRiLAotCTB4OGE0YWY5ZGYsIDB4MTE1ZDdmNjksIDB4YWI0ODZhZmIsIDB4NmRiZjg5NTEsIDB4YTMyYzQyYTEsIDB4ZjNiZjdiZjksCi0JMHhmM2YyMjE1NCwgMHhmYWRkNjlmZSwgMHg2ZDc1YzE1NiwgMHhmN2U1Y2E0OCwgMHg1NjRlNGYxNywgMHg1ZmMzZDk2MiwKLQkweDcxYzI1Zjc3LCAweGE0ZGRjNzZlLCAweGNmNWM5ZDY3LCAweDNmYmViZmZlLCAweGFmMzRlOGQxLCAweDY2ZGViZDQ0LAotCTB4OTdmN2ZiZDAsIDB4NTBmZGRjODUsIDB4OWFmZDhmZjAsIDB4ZGJiY2Y3NGMsIDB4MjJlZjdjOGIsIDB4ZGU4Yzk4YmQsCi0JMHhmYjA3ZDQ2YSwgMHhiZjkzNjZlYiwgMHg1MDFlMDMyNCwgMHgzMGRmZWVlZiwgMHhjMGFmMmEyZCwgMHgwOGIwZmVmNywKLQkweDMyNmIyZTdlLCAweDFhYTY3N2QzLCAweGJmMjA4ZmMwLCAweGEzMWY2YTJlLCAweGI3ZWRhN2YxLCAweGY5YWJkYjA2LAotCTB4YmZiNjlhMzksIDB4MjE2Y2QzMTMsIDB4NzY0YmI3OTEsIDB4Yjk2NTMzODcsIDB4YjM5OGU1MDEsIDB4ZDlmMDY3ZGEsCi0JMHhlYzk4N2RiMSwgMHhmZGRhYmU4ZCwgMHhhZDNiYzg0YywgMHhiN2ZiMGRiZCwgMHgzYzRhZmNlMSwgMHg4YzRjN2JmYywKLQkweDZiMjRhZWYyLCAweGVjN2ZmZmVjLCAweDgxMGYwYTMwLCAweGNiYWMyYjFmLCAweDgyYWE3NDcxLCAweGVlYzI0YWZkLAotCTB4ZThmOTE0NmQsIDB4ZDVhOTRhZjUsIDB4OTRiZWYxMTMsIDB4MTQ5ZDZhNTQsIDB4N2RmNTJmNDEsIDB4ODc0YTg3YzQsCi0JMHg5NDJiZGI3NywgMHhmY2U1YTdlNywgMHg2MGFmNjg0YiwgMHhiZTRkOWY1ZSwgMHgyMDQ3MWRkYywgMHg2NzVlMjBmZiwKLQkweDQ3ZTM2YTJmLCAweDljZjdiYjlmLCAweGJlM2E3M2IzLCAweGJkOTI5NGFhLCAweGJiMDE4ZjI4LCAweDQzMDdlYzAwLAotCTB4NDg5YmQyZDIsIDB4M2Y3YzlhM2YsIDB4NzQzYzAzNGUsIDB4ZmNhMTY3YmQsIDB4M2YwNWY3ZGIsIDB4ZWM3ZTBhNzYsCi0JMHhkODA1NmU0YiwgMHhiN2RjYmE1MSwgMHg0YmM3MWQ5NSwgMHgyNTI3NDAxZSwgMHhmNTI3NDg4OSwgMHgzOWRkNDY5OSwKLQkweDhiMTY1NjhjLCAweDVmYjBjNjc1LCAweGZjOGY4N2YyLCAweDkwY2JmNjQ2LCAweDE3ZWMzMWUxLCAweGNmMjI0ZmI0LAotCTB4ZjEyZWQxY2YsIDB4YjQ0NWM4NDQsIDB4ZWMzMTNjNGIsIDB4ZjBhMzY2OTcsIDB4ZTc3OWM0ZGYsIDB4YWRhYjkzNjksCi0JMHhmYTcwZjAxMywgMHhjZWZhNDRlNiwgMHhkYmI0NjljZCwgMHhmYjNlYzA0YSwgMHhkYzVjZDllOSwgMHhlZTg2NTk5NCwKLQkweDNiMDg1M2VmLCAweDc2MGMxMTkxLCAweDVlNzA3N2RhLCAweDFhYmJjYzU1LCAweDFjZDZmZmZmLCAweDg4M2YxYmM5LAotCTB4ZmZkMTk3ZTcsIDB4ZmI3NWYyYWIsIDB4NDBiODA3MTksIDB4ZmJjNzZjYmMsIDB4MWY3NDQ1NzAsIDB4ZjlkNjMyYWUsCi0JMHhlOWJhZjdkYSwgMHg4ODk3NDUwNCwgMHg2MDFlMTFjMywgMHg1YmUyMjIxNywgMHg1MTc2ZTJiZCwgMHhhMzBjM2E3MSwKLQkweGU2ZmRlNzc0LCAweGZkYmY2ZWY0LCAweGRhZTI4MWJhLCAweDg4MmM3ZDNiLCAweGI1YmZiOWRmLCAweDdiNTcxZjRjLAotCTB4ZWQ5OWU0NDMsIDB4Y2Y4OGNhNWMsIDB4ODZiNDE2NzYsIDB4NTM0OTVmZDAsIDB4YWJjOWM1MTksIDB4NzNmNmZhM2MsCi0JMHhlM2JmYTMyYSwgMHhkZGJmOGZhYywgMHhjZjQ1MzVlNiwgMHhkNmViYmU5NywgMHhjMDZmYWM1ZiwgMHg5NzE0ZDVlZSwKLQkweDhiOGYxNWViLCAweGZhZDFjMzhhLCAweGYyOTQzZjUwLCAweDQ2YWRiYzc4LCAweDZmNjU1ZjlmLCAweDdkZGY0MTllLAotCTB4MTJhZWFjNjYsIDB4MzRjY2U3ZDcsIDB4ZGE4ZjhjMzIsIDB4Y2ZmM2EzYWIsIDB4MWVjZjAyMDIsIDB4OWUxYTVhMTIsCi0JMHhkODc4ZWZiNSwgMHg3YmZjOGQ4YSwgMHg1NDA5ODFhNCwgMHhlMWMxZTVhZiwgMHgzYTI3MDVmNywgMHg1YjY1ZDY3YiwKLQkweDJjNTNlNjJmLCAweGQ4ODFhY2UyLCAweGYxODlkYWViLCAweDJlNTdjYzQ2LCAweDgzYzQ4MzBhLCAweDMwMmU3MGZlLAotCTB4YTMwZDQ2NGUsIDB4YmFjMjk5ZWYsIDB4ODcwNWU3NzUsIDB4ZDAzNTZmNzcsIDB4MDNlMTQ3ZmYsIDB4M2MyNmVkNzEsCi0JMHg5ODEzY2ZlOCwgMHg1YWZiNDBjZiwgMHg4MDdmM2ZhMywgMHg2OGUwZWE3NSwgMHhlY2ViZmViYiwgMHhiM2JiYzNmOSwKLQkweDU4ZmY3ZTYzLCAweDUwMzhiNTJiLCAweDc2MTBmOGFmLCAweDM4M2E0ODAwLCAweDZjYTc3YzVjLCAweGY2OGExYjI4LAotCTB4MjM3OGFkOGQsIDB4NGM5NWMzZWQsIDB4MGFjYWY3OWUsIDB4YTFiYjlmNjIsIDB4MGRkZjhmOWQsIDB4MzI3YzhhOWEsCi0JMHhhNjc5ZmQxMiwgMHhmMzAyY2VmYiwgMHg2ZjlmOTRjOCwgMHgzNTczZTMyOCwgMHhhNjcyZjNmNCwgMHhkN2M0NjIyYiwKLQkweGIxMzA3ODk2LCAweGJjZmZmMDRhLCAweDFmYTBmNzhhLCAweDhjMDBiMTY3LCAweGRmMTA2M2RmLCAweGJkYzQ5NjlmLAotCTB4MjYwNjJkYTQsIDB4ZDUxNGNjMjMsIDB4YjVlNGYzY2EsIDB4ZTkwNDNjZWYsIDB4OGQ3ZDBmM2IsIDB4OGIwNzdkYTMsCi0JMHhkYTdiZjgwNSwgMHgzN2RmZDEzOCwgMHg3NGZiZDFiYSwgMHg3ZTg5NGQxZiwgMHgzYWUyODJiZiwgMHhlMTdkZjhkYSwKLQkweDE3ZWZhZmJkLCAweDlkZmNiMWZkLCAweDk1M2UzYzkxLCAweGMzNWE3NDQ5LCAweGViYTcxZmI0LCAweDJiNzRkZGM1LAotCTB4NTNiODNjOTMsIDB4MGYwZjRlYWIsIDB4NzczZTdlNDUsIDB4Zjc0YTgyNGYsIDB4MDQ3NWI1NmYsIDB4OGViNDRiYTYsCi0JMHhmNzVmZDk2ZiwgMHg1OTVkZDIzYywgMHg1ODgxZGVmYywgMHhkYmVmZTg5NywgMHgxMTdlOGJhZSwgMHg5MzAxYWNmMiwKLQkweDFhOGU4MTZmLCAweGNmOTFlZjgxLCAweDJlOTMyOTZjLCAweGExMGU3NGM5LCAweGJmOGJjZmJmLCAweDM1ZmQxMTczLAotCTB4Zjk0OTNkMWMsIDB4YmRjNDdiM2IsIDB4YTc1YzZkNzAsIDB4OGEwNDMzZWEsIDB4M2MxMDdlZjAsIDB4ZDA4ZjExOGYsCi0JMHhkZjhjYTVjYSwgMHhmNWU2ZDI4ZiwgMHgzNTA0MDE3ZiwgMHg3ZmUwNWY2YSwgMHgwMDAwN2ZlMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4NDUxNDc4MGIsIDB4NzRmNTcwYjYsIDB4OTkyNGNjZjcsCisJMHhmMjEyNGM5OSwgMHgwMDQ5M2RlMCwgMHgyMTBlMDMxMSwgMHg5OTcwYzA0NCwgMHg0NmEyYzAyNCwgMHgxNDFhMDIwZCwKKwkweDg0OTIwMjc1LCAweDdlODg5NzkwLCAweDMzZmVhZWVjLCAweGE4YTA4OTAxLCAweDE3YWNiOWYxLCAweDM3NjE0MWRkLAorCTB4MGMwNmU4YjIsIDB4NjBlMDM1MTgsIDB4YmEyZWIzMDAsIDB4ZTdjMDQ1YzEsIDB4MzZiYzgwMjYsIDB4YjlmMDQzMjQsCisJMHg5ZDZmNWVjYiwgMHhkZDMzZDU1MywgMHhjN2M0MDk5ZCwgMHhmZmVmN2ZkZSwgMHhhNTVmOWY4ZiwgMHg3MWViYWFiYSwKKwkweGU5ZDRlN2RlLCAweDI3OGYzMjQyLCAweGRmMjEwYTY0LCAweDlmOTY4ZmMxLCAweGY4OTA4NDhiLCAweDIwNmY1OTUwLAorCTB4ODg0MTkyMmUsIDB4NmRmNDY2ZDcsIDB4ODhjZmE2NGMsIDB4NjhlNjdhMjMsIDB4ZDExZDk4NWEsIDB4ZWY0MzU4MzcsCisJMHg5ZWQ1Y2JlOSwgMHgxODY5MzRhNCwgMHgxYzc5MGYyMSwgMHgyM2UyMTI1OCwgMHg1YWI1NGU4NCwgMHgxNmY1MDUyMCwKKwkweGUwOTMzYmE4LCAweDIxM2UzYTdkLCAweDBmZjhlOGZkLCAweDMwZjhlMjQ2LCAweDFhMTg5OTJkLCAweGUwMzExMDY3LAorCTB4ZjlhZDUzN2IsIDB4NDIxZWIwODksIDB4YzNlNjQ3NmEsIDB4MjEzYjE2ZmMsIDB4OWY5ZjdiZmQsIDB4YTdlYjg4OGUsCisJMHhmN2MxMGRlZiwgMHhiNTllZmEyNCwgMHg2NTI5ZWZlZiwgMHgxM2ZkMGU1NywgMHhmNjZkZGZmNiwgMHhmMTA4MTQ2ZCwKKwkweDcxYzdmY2VmLCAweDg2OTllZjU4LCAweDVkMTMwZTM5LCAweGQ5Yjc3NjZmLCAweGJlZWEwNTNmLCAweGI2ODk5ZjZjLAorCTB4YzBmYjZlZTcsIDB4ZTVmZWQxMjYsIDB4ZGEwOTQ0ZGIsIDB4ZjAyMzNiMGQsIDB4ODI3NWNlZmQsIDB4YTY5NWVhMGYsCisJMHhhNGFlNDdkNiwgMHg5MTM2YzBmNSwgMHhmOGQzMGYzYywgMHg0MDkyMDYyZCwgMHg2MTMzNzFjOCwgMHhlYjE1ODczZiwKKwkweDVhYWMxMTQ1LCAweDZkZDc3ZWJlLCAweGEzNDk1ZjMwLCAweGY3ZDA0NDg5LCAweDJlODgzNzhmLCAweDI4ZDkyZmE4LAorCTB4YWY5ZDA4ZjgsIDB4OGMwN2I1ZmMsIDB4YzU3OGU4MDMsIDB4YzIzZWExM2UsIDB4MWYxYmViNDEsIDB4M2VlODNhMzMsCisJMHhkOGZjZWY5NywgMHg3Y2UxNDZkNiwgMHgwZTI2NjNkYSwgMHhhNGEzZWUyMywgMHg1MjkwOGQzZSwgMHgwM2U5OTZkZiwKKwkweDliYTVmYmU4LCAweGJlODAyNzA1LCAweDRlZDlkZDc0LCAweDgzNjk1ZjU4LCAweGUzYTQ1YzNjLCAweDIyOGJhZTJkLAorCTB4ZWU2YzkxOGUsIDB4ZDdjYzA4ZWYsIDB4ZGJlNzE0N2MsIDB4Zjk4MzBmMjYsIDB4NjVkZmNlNGEsIDB4NmVlNTI0MDQsCisJMHhjYTJlOTE5MywgMHhkZjYwM2FlOSwgMHgzZGE3YmNjYSwgMHgwNTNlNzE2YiwgMHhkMjJmZTU5ZSwgMHg4YWJmNjhmOSwKKwkweDZjMjcwNTk3LCAweGRjNDBjMmIxLCAweGQ3Y2U4ZWIwLCAweGIwNWUwYTIyLCAweDhkYWFmZWMwLCAweDdkZWFhYzIzLAorCTB4N2Q4NzZlMTQsIDB4MWJkNmZhOTQsIDB4N2Q2MDViYTcsIDB4Njk0NThkZWIsIDB4ZDcxNmYxYTEsIDB4N2Q3NmE3ZmQsCisJMHhkZDEzNTM2YiwgMHhmM2UzYmQ2OSwgMHg3NDgyODdiNCwgMHg0YTVlYTg0NCwgMHg0ZmU5MGI4OCwgMHg4ZTgxMTlmMiwKKwkweDg1ZTdlNzk1LCAweGUyZjdjNDE4LCAweGNjMzg5MTNhLCAweDNhMTVmMWExLCAweGU5YzA3ZWYwLCAweGYxOTU4Nzc0LAorCTB4MTJkYmM3MDEsIDB4ODQyY2UwM2IsIDB4YzczYjZlYjcsIDB4NTRjODE0YTMsIDB4OGY5NGFmOGYsIDB4N2FlODNlMDAsCisJMHgyYzc2M2Q2YSwgMHg2MTI0ZjcxZiwgMHg4MWM3YTRmOSwgMHgzM2RhN2I3MCwgMHgxZWI1Y2IxMiwgMHhjNjdmM2UyNywKKwkweDc1Y2IwMTMzLCAweGNmOTYxNzFlLCAweGU5NjA2Njc5LCAweGJmNjNlNGYzLCAweDU4MDUzZGU3LCAweGYxYjhmMDZlLAorCTB4MjUzZDZmZjksIDB4YWE3OWQ2NTgsIDB4Y2YyNmY5ZjAsIDB4N2IzNzJjMzIsIDB4NjVmY2Y4YmMsIDB4ZWIyYzJhY2YsCisJMHg2ZTU4YjUzZCwgMHhiMmQxN2MwNSwgMHg3ZWMzZTNjMSwgMHg1ODc1M2RkYiwgMHhmMWVhN2EzNiwgMHg0NjllZWJmOSwKKwkweDM4NzBkNzJjLCAweGI2NDhiMmRhLCAweDczNjBlMTQ0LCAweDNiNDUzYjExLCAweDY1NzNjZDg5LCAweDliMWViNGNiLAorCTB4ZjMwOWVhY2YsIDB4NWE0NmQ5YmMsIDB4M2FkMzcwNGYsIDB4MzI4MGNiODUsIDB4ZDY4OWI2N2YsIDB4ZjZiMTU0MDcsCisJMHgxYzkyZjcyMSwgMHhmMTBmYWQzMywgMHgzNTk0ZjZiMiwgMHg1YTA4OWNhZSwgMHhlZDY1YTk0ZiwgMHg3Mzc5ZDYyMywKKwkweDg0N2Q2OTIyLCAweGRhOGZiNThmLCAweGEyODljZmVjLCAweGFjZjU1MWY1LCAweGM5MTM0YzdkLCAweDE4ZmFkMGI1LAorCTB4ZWZhN2FiM2YsIDB4Njk1YWU1NzMsIDB4ZDU5NWJkM2QsIDB4ZTZmMTNmMzMsIDB4YjMzZDY4ZGEsIDB4YTkzZmJkOGQsCisJMHgyYzNhMjdjMywgMHg1NWIwZjEzZCwgMHgxNDIwMmM3NiwgMHhiOWRlNGQ1NywgMHg5YmNhODkyZSwgMHg1ZGM3NDZhZCwKKwkweDdiYzg0OWM0LCAweDg5MmVmOWRlLCAweGQ5MDY4N2NhLCAweGRlNmRlZDg1LCAweDc0NmVhY2M1LCAweDc3Yjc3YjYxLAorCTB4MmVkZmY2MjksIDB4YWE1ZGIxYmIsIDB4YjdkYjBmYmUsIDB4OWVkOGRkMWIsIDB4ZWQ4MzVkNTAsIDB4ZGIxN2IyOGQsCisJMHg4YTNmNTY0NywgMHgyZjQ2OGRlZCwgMHg1ZWFhNGZiNiwgMHg2NWQ3ZjU4YiwgMHg1NWU3YjYxZiwgMHhhZmZlYzdhZiwKKwkweGZlZDg3ZDFiLCAweDVjOWJmZGY4LCAweDA1ZmQ2OTUzLCAweGU0MWRiZGMxLCAweDVkYzEwYWRlLCAweDllODE1MjQyLAorCTB4ZWU0MDkzZWEsIDB4ZjlmOTcwZDUsIDB4NmQxZDEwMWMsIDB4NDQ2ZmU5YWYsIDB4NmVmYWRjM2UsIDB4YmZjMDBiZTYsCisJMHhmNTA3ZWJmOCwgMHg5ODNlZGZhMiwgMHg4OWJjZTM4YywgMHgxYzc0YzhlMywgMHhhNGUzZTJmMSwgMHgzMzQxMzdiZiwKKwkweDI1N2JmYTRlLCAweDM4MmQzOGNhLCAweGM2ZGY0NDRlLCAweDI0ZGVmYWQ5LCAweDJiZGU3YWVkLCAweDBmZDljNjU1LAorCTB4ZGFjMmI0ZmMsIDB4ZmZhNTdkYjcsIDB4OWViYjRiMzksIDB4ZTMyOTk3M2YsIDB4ODllYjg0N2MsIDB4MWE3YWRiZTksCisJMHhhN2MyZDAzZSwgMHg3YzIwODNlMSwgMHhmMTM4ZTI4ZSwgMHhjNjRmNWI3ZCwgMHgzMjdjMmQ0MSwgMHhkM2UxMDYwZSwKKwkweGVmZjRlMzgxLCAweDA3MGQzOGRiLCAweDM4NjlmMGI1LCAweDk3Y2Y4NDE4LCAweDdkYzE5ZjA4LCAweDIxYzY1N2RiLAorCTB4MGUzMjdjMmQsIDB4NWZmM2UxMDUsIDB4YmVlNDllYjgsIDB4NTNmZGIzOGQsIDB4N2ZiNjdjMmQsIDB4NDk4Zjg0MWEsCisJMHhlZjBjZjU4MCwgMHgzZjMyYmVkYiwgMHhmMzI3YzJkMywgMHhlYzdjMjBiMywgMHg3ZGE1Y2UzOCwgMHg2N2ZiNjcxYiwKKwkweGZmNmNmODVhLCAweGZlOWYwODJjLCAweGJlZThjZTM4LCAweGFmZjMyYmVkLCAweGZlNjRmODVhLCAweDE0OWYwODM1LAorCTB4YjYzM2UwMDEsIDB4ZmM2OWViNmYsIDB4YzY5ZjBiNWMsIDB4YjlmMDgzY2YsIDB4ZGYxOWM3MGMsIDB4Mzg0Y2Y1YjcsCisJMHg4NGNmODVhZSwgMHg2NGY4NDFlMywgMHhmNjI2YmVlMCwgMHhlM2M2OWM2ZCwgMHgxZTM0Zjg1YSwgMHgzMjY3YzIwZiwKKwkweDZmYjkzMzhlLCAweDQyNzA5YWZiLCAweDI3MDk5ZjBiLCAweDhlOTlmMDgyLCAweGViYmI2NGUzLCAweGM3NDY1MTk4LAorCTB4Y2UzZWY2YjEsIDB4ZjBiNDY3ZWIsIDB4MTA0Y2ZkNzksIDB4MzhlM2Q3M2UsIDB4YTkzOGU4ZDMsIDB4NTI2NzFmMTcsCisJMHg5MzNlMTZhNywgMHgyOWYwODMzYSwgMHhlYWFlNzFjMCwgMHg3N2FmMzhkYiwgMHg3YWYzZTE2YSwgMHg4NTNlMTA2NywKKwkweDdkYjVjZTM4LCAweDJlYTRkN2RiLCAweDc1MjY3YzJkLCAweDNiOGNmODMxLCAweGEzNmI5NTUwLCAweDNhMTc1NGVkLAorCTB4OTVjYWZhNDUsIDB4NDA5NzJlMWQsIDB4ZDU5ZGEyZWIsIDB4ODA5M2JiNDUsIDB4ZjYyYTIyNWQsIDB4ODk3NTY5MDYsCisJMHhlNmNiN2RmNCwgMHg4OTA3ZjQ5OCwgMHhiOWM4ZWVkYSwgMHg0YWM3ZTgxMywgMHhkZGI1MzFhZCwgMHg1MjIxM2QxMSwKKwkweGI4YzRlNzYzLCAweGI4ZjUzNTYyLCAweGZkMzQwMzE5LCAweDM0NTNmM2UzLCAweGEzMDU4OWVkLCAweGRkZmRlZDM0LAorCTB4YzBmYTlhZTksIDB4ZmU5YTQ5OTIsIDB4MzQ3MmFiODMsIDB4YWVjYmExZjUsIDB4ZjY0ZmY0ZDYsIDB4YTdhOWEwZGUsCisJMHhkMzU5YmFhZSwgMHg3Y2VkNzg3ZiwgMHg2YjI1ZmI0ZCwgMHg5N2VkMzU0YiwgMHhlYTY4OTZmYSwgMHg0MmZkZDU5NywKKwkweGZkNzQ3ZmQzLCAweGU1ZmI0ZDcyLCAweGRhNmEwZjhkLCAweGQ3MWZmYWM3LCAweDNjYjVjN2Q0LCAweGJlM2ZlOWEzLAorCTB4ZmI0ZDc5ZjUsIDB4NjkzNzg3MTUsIDB4NmRiNjI3ZGEsIDB4M2NhZmQ0ZDUsIDB4Y2VjZWJhZjksIDB4NWY4ZmQ4YjMsCisJMHhkMDIyZWJjNiwgMHg3Zjc2NjEzZCwgMHhmOGY3ZTY3ZiwgMHgxYmFjNDZhZCwgMHg4ZWQwNTgwNywgMHg3MjJkNjVkZiwKKwkweDM1ZjhhMzFjLCAweGQxYzBiNWJlLCAweDcwMTdlMjhmLCAweGY2NDU3ZTBhLCAweGRhNGI5MjgwLCAweDI2N2JmM2U4LAorCTB4ZDNiMTJmYjksIDB4ZGQxOGY3ZTcsIDB4ZDhjM2RiOTcsIDB4MDQxZTk0YTcsIDB4YzNhNTA0OTIsIDB4ZmRiZWE1MDAsCisJMHg2M2QxOTkwMSwgMHgyM2YzYzBjZSwgMHg5NWZiZTlkYSwgMHgxODg4YzA4NiwgMHhiMzEyY2Y1YSwgMHg3NzdlODExYiwKKwkweDhhMmZjYzBhLCAweGY0MTU0OTE0LCAweGY0MTEzNDhiLCAweGNlNDgxZTBiLCAweGEyYWJjMTdjLCAweDI5ODM1NWQ3LAorCTB4NzFhMTBhMWYsIDB4MjRlZWM5NTcsIDB4YWFkZTMzYjAsIDB4MWQ4MmY3NmUsIDB4ZWU5ODMzNTIsIDB4Y2QyMTAwNmIsCisJMHg0YmRmYmI0MiwgMHgwNjA3YjRmZCwgMHhlOWI5MjUxNywgMHhiNTIzMjY3OCwgMHgxYmYzZDVkMywgMHgzODY5ZmNlOSwKKwkweGViZDAwYjdmLCAweDdjN2YzMDdiLCAweDI5NGRmOWNmLCAweDliZjMzNDEzLCAweGU2Njg5NDg3LCAweGZjZTkxYjM3LAorCTB4YWZkZTQyNzYsIDB4YTdlN2M1M2UsIDB4Yzg0NDk4NDgsIDB4Mzg1Mzg0NWYsIDB4MDk0ODY5YmYsIDB4OTE4MGZmY2UsCisJMHhmOWVhMmJmYSwgMHgxZmYzODMyMywgMHhkNjdmZmQ4NiwgMHgyNjUzZmVkYiwgMHhhNDNmZjc2OSwgMHgyMzdmYmI1NCwKKwkweGVhOTFmZmRiLCAweDQ4ZmU3Y2IzLCAweGUxNTFmZmRjLCAweDkwZmZkYjJjLCAweDEzN2ZiNjUyLCAweGJmMzgzNzFiLAorCTB4OTNmZjA4MmQsIDB4MmY2NzdmMzAsIDB4YjM1MjliZjMsIDB4NWExZmZiYjQsIDB4ODliZmRkYTYsIDB4ZmQ1ZGRmY2QsCisJMHg4MmRmOWYyZCwgMHhiZTEzOWZmMywgMHg1YTFmZmI2NSwgMHg0ZDFiZjM4NiwgMHg4ZmQwMjc2ZSwgMHg5NTY0NjA3MSwKKwkweDFkNGZjZThmLCAweDA0NDkwNzYxLCAweDQwZjNhMTcyLCAweGZkMTYzMjM5LCAweDE0ODQ5N2U0LCAweDkxM2RjNzVjLAorCTB4OGFiZWRlOGMsIDB4ZjI4NmY0YTQsIDB4NThmY2NiYzYsIDB4OTk2Yzk1MWYsIDB4YjRlMmVmZDQsIDB4YjY3Mzc4YmUsCisJMHhiNjEyZTQxMSwgMHgyMTY1N2Y1MywgMHg4ZDFkZWE1ZiwgMHg3OTM3ZDIyMiwgMHg0ZTFiZTRkMiwgMHgyOGQ5ZGJkNywKKwkweGM3N2VhMTdhLCAweDIwN2Q5MzkzLCAweGU0NGQyYWZmLCAweDRmNzg3Y2Y2LCAweGZlNzg3ZTIyLCAweDlmYTM1M2Y5LAorCTB4NWY0YmVmNTcsIDB4OGY5NWFjMmUsIDB4MmRmOGE5YjcsIDB4OTBlNTQ3ZTgsIDB4OTgxNjU1OTEsIDB4MWZhOWFlZDcsCisJMHhhMTEwN2VhMSwgMHhkNDI3YzVmZSwgMHgyNDk0MjBjZiwgMHhiZTZjY2E4ZiwgMHgwNGJmYThjZiwgMHgyZmVhMzZmNSwKKwkweGQ1MjEzYjQxLCAweDc1ZTI1ZmI4LCAweGFlOGMzMDdkLCAweDNmMjg5ZjNmLCAweDI2ZjNlZTE3LCAweDllM2EyOTY0LAorCTB4YzhmN2Y4YzQsIDB4ZjgwN2MxMWEsIDB4MTQ1OTdkYjgsIDB4M2Q2ODdlMDUsIDB4NGQzOGRlODUsIDB4ZmIwZmVlOWQsCisJMHg3YzEyYWUwNywgMHg4NjM4MGJjZiwgMHg5MzMzZTAxYiwgMHhiZDYwNDc4ZiwgMHg2NzYwNWViNCwgMHhlOGEyMWNlZiwKKwkweGIwNTE0ZmVmLCAweDhhNDBkNTYwLCAweGIzMzhkMDhiLCAweGE0NGU0Yjg4LCAweDVhNTljZmVmLCAweGEyZTg0MzI4LAorCTB4MmYwNjEwNTUsIDB4MjA1OWZhMDEsIDB4ZTAxMTk3NTMsIDB4NjkyNzhkZTcsIDB4N2FlODM4OWMsIDB4ZjFiM2I2NmYsCisJMHg2M2U0YmE2NywgMHgxNGY1YWE2ZCwgMHgzZTU3NjZjOCwgMHhhMTQxNGY1ZCwgMHgzNTlmZWI4OCwgMHhkMWZlZGI0MywKKwkweDYxOTcyOGNlLCAweDNkNTcyZDBjLCAweGM5Y2NmMzgxLCAweDU0ZGZiNmQ3LCAweDc1Y2ZhZGEwLCAweGVmNTRlYjZiLAorCTB4NmVmN2EwYzksIDB4YTczZmQxMjksIDB4OWNmYmExNjAsIDB4NWQyYjg0MTcsIDB4YWRlNzVkMjgsIDB4NTZiNzBlMWMsCisJMHg1ZTBkNWVjOSwgMHhkYTU1NmRjMSwgMHgyNmUwYTAyMSwgMHg1ZjdjMmZiOCwgMHhmNmZmZDllYywgMHhhMTdhZGE2NSwKKwkweGIwNWY1YjU3LCAweGE3M2UzNzRhLCAweGZmMWNlMzliLCAweDY4M2U4MDQ3LCAweDgzZTgwMjc5LCAweGE3MThmM2MyLAorCTB4ZDU1YzkwOGYsIDB4YzE4ZGM3ZDIsIDB4NTBmYTMwNmQsIDB4NjI1YzcxZjYsIDB4OGViZTM4MjgsIDB4ZGFjMmM3ZDEsCisJMHg1MGY0ZjBhOCwgMHg5NzA3YTQxOCwgMHg3YTE0YmU5YSwgMHhjM2QzOGRiOCwgMHg4YTFlOWNhNywgMHg2YWU5NmFkNywKKwkweDRjYWRmMTJlLCAweGIyZGZlZmEyLCAweGU5ZTIxNzY2LCAweGU4Yzg1MGEwLCAweDNkMGE5N2UxLCAweGMxZTg2OWI0LAorCTB4OGY0MWU5Y2QsIDB4M2QzOGRiYmYsIDB4NDY3M2Y2ZGMsIDB4YjY3YzdhMGYsIDB4NWI2ODdhNzEsIDB4MjkyNjRlN2IsCisJMHhmMTRhZjEzZCwgMHgzYzUzYTlhMCwgMHgzNzZlZjBlOCwgMHg3YzUwM2QwMiwgMHhmOTg3YTU4NCwgMHg4ZGQzN2RjMSwKKwkweGRlMDJmYWQzLCAweDljNWYwM2Q2LCAweDA1M2RiMDFlLCAweDRlMTA0ZWMwLCAweGNmNmE3ZWY4LCAweDY4NGU1NGZlLAorCTB4YzM2YmM1ZWEsIDB4MzFiMmJmZTMsIDB4NmE5OGVlM2IsIDB4NTdmNWU1NWQsIDB4ZjU1MzFkYzUsIDB4NTMzNzVjNWIsCisJMHg5YmU0NWY1MywgMHhiYzVmZTlhYiwgMHhiZWQzNTBiNiwgMHhhNjkxNzZiMCwgMHgzYmFhYzE3ZCwgMHhlZjQyZjUzNSwKKwkweDZmZmQzNWNmLCAweDY5YWQ1NjVmLCAweGI1NmFiNWJmLCAweDkyOTZmZGE2LCAweGI5ZjUzNGM3LCAweGZhNmI1ZmVlLAorCTB4NWViMDU0ZGYsIDB4ZmYyNzNlZDMsIDB4YWNmYjRkNDUsIDB4ZjUzNDViMTksIDB4MzRkN2FlOTksIDB4MmYzYjBkZmQsCisJMHgzMWU4MWViZCwgMHhjMDQ4YTBlYiwgMHg3MWU2MzhmZSwgMHhmNzFmZGQyMCwgMHhhNGYyYzQ4YywgMHg3MTdjODljNywKKwkweGNiMDEzM2RhLCAweDRmY2Q4ZDdkLCAweDdjYmI0OTVjLCAweDI2ODgyODE5LCAweDkxMTY3ZjRjLCAweDJjZjY0MjE4LAorCTB4Y2FhZjU3NzcsIDB4NTA0ZTdkMDIsIDB4Nzk3MWZlZWYsIDB4MTA3N2I1NTEsIDB4MDcwNjUzOTUsIDB4YWQ2ZjM5YzIsCisJMHgxMWM3Zjg5MSwgMHhlMjUyODAyMiwgMHg1MGM0MDdmMywgMHg2ZDFiNTY3YiwgMHgzZGJkZWI4ZiwgMHhiNjE0YWQ2ZiwKKwkweDBhNGRhYjNkLCAweGUzZTU2ZTNiLCAweDYxZWQ0Mzg1LCAweDdlMjEzM2UyLCAweDNlYzEwMzI2LCAweGI5ZjZlMmVhLAorCTB4MjA0Y2JkYmUsIDB4ODRlN2VhZjksIDB4OGZmZTQ3MmMsIDB4NWNmZDMwMzEsIDB4YTI3MjY0NjYsIDB4MWNmZjZiNmMsCisJMHg3ZmJhODM2MiwgMHhlNjg1ZDU0NCwgMHg5NWNjYTdhYiwgMHhhYTkxZjQwOCwgMHhiNWUyZTNlMSwgMHgzY2U0Njk5NywKKwkweDNjNmRlODgxLCAweGNkMzhkOWQwLCAweDU3NzVjNWYzLCAweGQ4ZWJkZTZhLCAweDJiYmFlMjI1LCAweDdkNTA4NjQwLAorCTB4MDdlNDhjM2QsIDB4ZmQ5N2EwMGMsIDB4OGQ2NjQzY2QsIDB4Y2ViYTc1ODYsIDB4MzU1ZTQwMWEsIDB4ZDhmZGEzYzYsCisJMHg3NzExOTllMSwgMHhlNjNjMDI0YywgMHg1M2QyNzk2MywgMHg4ZjcxZTU4MCwgMHg5ZTYzY2IxYiwgMHg3ODhmMmMxMiwKKwkweGYzNmNiMGFhLCAweDMzZjJjMzJjLCAweDRmY2IxNzhmLCAweGZjYjBhYjNjLCAweGU1OGI1M2M4LCAweDJjNWFjZjYxLAorCTB4NTg3YzdhMGYsIDB4NjFkNGYwMWUsIDB4MWVhN2JlZjksIDB4MjM0ZjU2Y2IsIDB4MTcxZTlkOTYsIDB4MjliZjBhOTYsCisJMHhkZGQzZDBmMCwgMHg0ZmE3YWU0OSwgMHg4MDVkZmQwMywgMHgwN2M0ZTJjZSwgMHgwYTBkNTdhYSwgMHg4YWUyNTlkMSwKKwkweDU5YmRhYjg3LCAweGQ2ZjM3MWExLCAweDI0OWQzODlhLCAweDA4NjFlODY4LCAweDgxZTM2NGY4LCAweDVlOWM0YzVlLAorCTB4YWRlN2I3YzIsIDB4OWVkODJmOTUsIDB4MWQ4NzI2ZDUsIDB4N2ZmOWYyYmYsIDB4ZjljZGJkMGQsIDB4YTIxNmY0OTEsCisJMHg3YTNhODFhNywgMHgzZDE4YmQ0YSwgMHg4N2M3MTI0ZCwgMHhjMThlNjllOCwgMHhhNzFmZjRjZSwgMHgxZjYwODdhNywKKwkweDYyOGZmYzYxLCAweGFiYzZlYTMwLCAweDE0NTczYWVjLCAweDczZjM2NzhiLCAweGIyZDE2YTA3LCAweDdiOWYzNjc4LAorCTB4MTVhZTFkMDUsIDB4NDhkZjNmZWQsIDB4YzhmNzczYzAsIDB4Nzg4MDhmYmYsIDB4YWE2MWY3N2QsIDB4ZGY3YjkzMjgsCisJMHg3YTVlOWU5ZiwgMHhmZDBiYmI4NywgMHg1NTFmMjJhMCwgMHhiNjdhZTNhMiwgMHhiODMyNDQ0NywgMHgwY2M4MTg0NiwKKwkweGVhYzg0ZTkyLCAweGNlNzViZmUxLCAweDQ0YmFjMzRmLCAweDlmN2RlMTYyLCAweGYzOTg2NjczLCAweDRmNjcwMjI4LAorCTB4ZWI4NzE3ODksIDB4NjM1N2ViMGEsIDB4Y2ZlM2JjNjAsIDB4Y2ExMzIzZmMsIDB4ZTYxNDg2MzksIDB4Njg4YjM0ZGYsCisJMHgwYmZmMTNkZiwgMHg1MDZmODA0ZSwgMHg0OTljOTkxZiwgMHgwYzBmMDcxMCwgMHgzZWQxZGEzNywgMHhmMGI0NTlmMCwKKwkweDY2N2FkMmYzLCAweDI5YWI3ZTA4LCAweGRmNTE1YThjLCAweGZjMjEyNmQ3LCAweGEyMzU3ZDg2LCAweDc3ZTAxZjdmLAorCTB4MzE3ZjM5MzEsIDB4MGRmN2NlNzgsIDB4ZjNjMDk3ZjgsIDB4NjJmMWYyNjIsIDB4MWNiODkxNzIsIDB4ZmRkMjM3MmYsCisJMHg5ZDFjZWQ3NywgMHhlNDAzYTBmZSwgMHhhZGUxODVlMCwgMHhkN2U5NWY5YywgMHg3ZDI4YmNmMywgMHg0YWVlM2EyZiwKKwkweDc1YjhlODUwLCAweDg4ZjNhMTA4LCAweGVmYzcxZGEyLCAweGM5ODRiODZlLCAweGRiZWVjNTJmLCAweDA1ZjVmMjY2LAorCTB4YjU5MjY3YWYsIDB4ZjljNTNkZTMsIDB4YmJhZjE5NGYsIDB4ZjgxYjA1ZTUsIDB4MGM5MjRiNWIsIDB4ZjA2MTYzZjYsCisJMHhmNWU1OTRhMCwgMHhkYThiNzZjOSwgMHhkNmQ0NmNmZSwgMHgxOTg1NmJiYiwgMHgzYTI3NjhmNSwgMHgwNjhmNjdhMiwKKwkweDFmYjc2MTNkLCAweDNiNzIwNjFiLCAweDljNjU0YjA5LCAweGZiNDY0OTI1LCAweDRlZjcyYTMxLCAweDMzNDZhNWQ3LAorCTB4ZTRjN2NmM2YsIDB4OTQxOGU2YzEsIDB4NjYzZGE3MTcsIDB4YWY1M2ZmZWMsIDB4OTQ3MWI3YTcsIDB4NDBkMjEwZjUsCisJMHgxZTQxOWE4ZSwgMHhkZWQ0YjZkMywgMHhjZjRhZjdmYiwgMHgzYzQ2MTdkMiwgMHhiZjkyNmRmNywgMHg0Y2QwZmIwMiwKKwkweGZjMGVmZmZmLCAweDVkNjEyMjBkLCAweDVlYjJiNzE5LCAweDg3MmU5YWY0LCAweGYzMzU5YmU3LCAweGNhMWNmN2QxLAorCTB4Mjk3N2ViMTksIDB4ODkxYmUyMTcsIDB4OTZlODU3MWMsIDB4NWM2MzhiZWEsIDB4OGJhZTJjOWYsIDB4Y2ZlZDZiYjAsCisJMHhiMmJkNGQxOCwgMHg2MzVkYmZiMSwgMHg1NDFmYzI4ZiwgMHg0MTJhOTJmZSwgMHhlMzI5ZmEwMiwgMHg1OTI1ZDNlNCwKKwkweDdkNzQwOTU2LCAweDEwOTA0MjZmLCAweGZkNjA1NmU4LCAweDQ2NmRjZGNhLCAweDk1Y2UwM2I3LCAweDViN2FkZTE5LAorCTB4NGNkZmM1MWYsIDB4ODk3YzkyODksIDB4NjFjZjE2YjksIDB4OWQyZmVhNGIsIDB4NGNlNjdhMGEsIDB4ODgwNDhhYzMsCisJMHhiYjE2MmMxYiwgMHhmMzBmYzllZiwgMHg3OTMxMmNiZSwgMHgwNzI3YzhiZiwgMHhhNzNkZjZiNCwgMHg1NWM3NDIwZiwKKwkweDk0NWM2MzllLCAweGVhYWI4ZTU4LCAweDhmMTYwNjFkLCAweDAwOWI4ZmQxLCAweDFjNWZjNmUzLCAweGY3OWIxNTNlLAorCTB4NDEzYjA3NGYsIDB4YzY4YWE3MGYsIDB4Y2EzNzQ2YjMsIDB4NjY1ZmZhNDUsIDB4ZmMwYTRlMDgsIDB4MTNmMzE0ZGUsCisJMHg2OTdlM2EyNCwgMHgyZGM2M2I1ZCwgMHgxMWRlY2E0ZSwgMHhiYzgwYmNiZiwgMHg0YjNmYjllYywgMHhkNTI4ZjFkMiwKKwkweDE1YTRiY2JlLCAweDgxM2Y5OWU2LCAweDM3MWM0NDRmLCAweGY4ZTU0YzdkLCAweDA0YzkzZmE5LCAweDRmMzkxMGU0LAorCTB4NDg2MjY1N2IsIDB4MDYzYmZiODYsIDB4ZjkwY2M4NjIsIDB4MTYxYmYzM2IsIDB4NGZiYzAxZTcsIDB4ZTU0N2JmODEsCisJMHhkZjI0MWRlNiwgMHhiNTIwNzg4NiwgMHg5Y2RmZTA5OSwgMHgwMDE5ODYyMSwgMHg3ZGU0MzNhNywgMHgxZTE1MzhkYiwKKwkweDg3MjMyNTcyLCAweDk0ODI5NTMzLCAweGYxYzE0YzFlLCAweGVmYzFmZGRkLCAweGI0ZDQxNTMyLCAweGI5ZTA2MzhhLAorCTB4YzIzZmY4YTQsIDB4NzI0NzE4NzcsIDB4NTBiNzk4MGIsIDB4ODk3YjllYzAsIDB4OTdlODFhYjksIDB4M2YxYTUxZmEsCisJMHg5YTUxZmE4ZCwgMHgzNGEzZjUzYSwgMHg0MzcyMjJmNSwgMHgxNDI1ZTQwMiwgMHg5ZjEzMjkzZCwgMHhiNGQyNzA4MCwKKwkweDg4ZWM5MjhmLCAweDU1NTI2MmM3LCAweGFmZDFmNjAzLCAweGJlNmRmYzc5LCAweGU5MDM0ODlkLCAweDdkNWZjYjNlLAorCTB4ZWU5MGIzMzYsIDB4YzU4OTZhZTcsIDB4ZjU3Mzk0ZmQsIDB4MGUwY2IxNDUsIDB4YTMzZTI1YTUsIDB4N2Y3M2QyY2IsCisJMHhkZGM2MWI0NywgMHg4YzNmMjU0OCwgMHg2ZmNmY2VjNywgMHgwNTFlNjIzNiwgMHhkYzk5NGFiNCwgMHg3ZGU5NDlmNCwKKwkweGEyMGQ4OWZmLCAweGZkMDZjMjJiLCAweGJkNjU3M2U4LCAweGZmN2ZkZmM5LCAweGYyMTJmZGZhLCAweGI0YTNlZTM4LAorCTB4ZmEwMTI2NmUsIDB4YzAyNzkxZWIsIDB4MDlkNzIzZjcsIDB4N2UxODVmMmUsIDB4YWY3NGU0MmEsIDB4MDEzYmE3ZTgsCisJMHhmMTQzZTM3ZSwgMHhmNTc0ZmJhYywgMHg0YWJlMWNkNSwgMHhmYjVkMjlmZCwgMHhmZDJmOTYwZiwgMHhiY2JlNDY4OCwKKwkweDkzZWZiYTI5LCAweDAyNzkzM2M2LCAweDAwYTQxN2YwLCAweDFlMGZkN2YyLCAweGY4YzdhOTNmLCAweDdmMWY4MWFiLAorCTB4NjkwN2YxYjIsIDB4ZmY4ZTllZjksIDB4ZmViYTRmZDQsIDB4YmZkNjNkNjEsIDB4Y2JmYWRjM2UsIDB4YmI2OTdkNWYsCisJMHhkMjk3ZWE5NywgMHgyMzY1M2MzZiwgMHg0OTRlZGY5NCwgMHg4YTRlMDliNSwgMHgyYjhkYjJmNywgMHgzYjkwMmU2ZCwKKwkweDdjMDZkNzkyLCAweGNlMjdjYTcxLCAweDg3MGY0NzA4LCAweDA2YTU3Y2I4LCAweDc4ODA0NTg4LCAweGM3NDlmYzJiLAorCTB4YTFlOWJkM2YsIDB4Zjg5ZWMwZWIsIDB4Yzc2Y2EzNmEsIDB4Yzk5ZDZhMzgsIDB4NWNmNGEyNmYsIDB4OGYyOGIwZDEsCisJMHgzYjdhYzE4YywgMHgxNjcwM2ZhYiwgMHg1MWIyYmZlOCwgMHhkM2E2YTIzZSwgMHg5NTNkZGZkMiwgMHg5NDM1NzkwMCwKKwkweDkyMWEwNjUyLCAweDdmYTNmNGEwLCAweGYzZTFiMTUyLCAweDU0NmY2MGU5LCAweGFiZjIwMDkyLCAweGZmOTgzZGZlLAorCTB4ODdkNDU4OWIsIDB4OWVlOGM2ODUsIDB4NDk5ODE4ZWQsIDB4YWZkOWY3ODAsIDB4YjNhMWUxYjIsIDB4NmFmZTBkYTIsCisJMHhiZTkwMzhjMywgMHgzN2Y3MDk3ZiwgMHgzZjZiMjQ1YSwgMHg4MmI5MjczYywgMHg1NGYyMDE1YywgMHgzMWYxMDc4MSwKKwkweDhiYzU2MzdmLCAweDRlZDMxYWJmLCAweGUxYjFkM2Q3LCAweDA1NDEzNjRmLCAweGVhNGZjNTI3LCAweDliZjA1ZmFlLAorCTB4Y2JiZDFkZDcsIDB4ODdjYTRlZWYsIDB4ZDE1NmJiNmEsIDB4ZWU0NjhlNGYsIDB4YjJiMTM1MjcsIDB4YWVkYmY2NGMsCisJMHg2Y2E0ZjJhNCwgMHhkMmY0ZWNiZCwgMHhiZDJmNjVjNywgMHgyMDY3ZGJmMCwgMHhjOWExZmQ3ZSwgMHhiZjhlOWMzOSwKKwkweDA3M2RhNWY4LCAweGUyZmFkMTI3LCAweDNjYmY3MjJkLCAweDkwOGIwZGI2LCAweDI1NGJjMjEwLCAweDdhNTk3ZmZkLAorCTB4YWZhNTBmMDgsIDB4NDYzYTMxZWMsIDB4YzZmN2U3YjMsIDB4NzhiMWYwODYsIDB4MTkyMzJlY2IsIDB4YjkxZTEzZGQsCisJMHg2ZDhjYmJmNSwgMHhhOTc4MzA5NiwgMHg3NjBlOWY2ZiwgMHhiZjE3OGFkZiwgMHgzYmJjODIzNiwgMHg4OTIwNTNiNSwKKwkweGI5ZTA2MWM5LCAweDg1ZGEwZjdlLCAweDIzYzQyNzAwLCAweDZmMTA1M2M3LCAweDE0OTVmZWJhLCAweDE0NWZhMDJmLAorCTB4MzdkYmU5M2MsIDB4ZTMwMjc5NzEsIDB4OWU5MGQyMzksIDB4Y2U5ZDdlNWYsIDB4Yzk5MWYyNWYsIDB4NzkyZmZiMDksCisJMHhlYzFiMmVmOSwgMHhjNTU0ODRlMywgMHg5NWQ5ZmFlOCwgMHg0YWRmMjAwOSwgMHgxZDgyNmY2NCwgMHhlNGJjZjY0YiwKKwkweGRlOTFiYmI5LCAweDlkZGZmNzhhLCAweGFlOTJlMmMwLCAweDk1ZDQwNmZlLCAweGJmYjBmZWRlLCAweGUwZTZlYjg1LAorCTB4MWI4ODhhZmUsIDB4NTllNGFlZTksIDB4Y2I0N2RmMzEsIDB4NjMzMjI1MmYsIDB4YjhiZTE4NGIsIDB4ZjI3MjY2NTYsCisJMHgyMzU0ZjNjNCwgMHg1MDlkZmRkMCwgMHgyMmZiYzBmNCwgMHg2Mjc3MDNkNywgMHhiZTZlZjNkYywgMHg2MjMxNmExNywKKwkweGMzMzM0YmZkLCAweGMwZDkzMGQzLCAweDJiZDMyY2U1LCAweGYwZGQ3YTQxLCAweGQzOGJlYTAwLCAweDcwODk1ZDgzLAorCTB4ZDIxOTU2YmUsIDB4YzQzN2E4MGYsIDB4MTkxMmQzZmQsIDB4YzE5ZTk4N2UsIDB4Yzk5ZWE4ZjcsIDB4YmZkMGU3ODUsCisJMHg4YzQ1NzY1NSwgMHg3YTg3YmNkMSwgMHgyOTdmOTk0NSwgMHgzYmFlOWY5ZiwgMHgxM2I1ZWMxMiwgMHg4ZmZkZTEwOSwKKwkweGRmMGFjYjlmLCAweDQ1NDJiYjUzLCAweDY2ZmUyYTVmLCAweDM1NjFiZWZjLCAweGRmODU2ZmUzLCAweDQwNjczMzdkLAorCTB4MTgwNzE3ZmIsIDB4YTA3YmMwZmYsIDB4ZmNiYWU5NjcsIDB4NmJiZWQ4ODksIDB4YzBmMjgwYjYsIDB4ZjhlMWZjNDQsCisJMHhmOWNjODM3YSwgMHhkMGFlZGI1YSwgMHgyNGI3NWQwOSwgMHgwNWU4YWI0NCwgMHhmODQ1OGZjNiwgMHg3YTJmNWVhMywKKwkweDkyYTdiZTkyLCAweDlmMzA5NTk3LCAweDBhNzhlN2FkLCAweGZlNzMxNmRmLCAweGY5NmIyMTlmLCAweGVmOGJhYzlmLAorCTB4OTk2NTNlNTMsIDB4MzNlZGZiZWMsIDB4M2Y5NGFmYzAsIDB4NTdlMDBlYmQsIDB4ZmRmNjFmMzksIDB4MDdjZGNkYjcsCisJMHhmYTdjYTY2ZiwgMHg0Zjg1N2FiNywgMHhjZjUzZjJiNSwgMHhlZjViMjVhNywgMHg3YTlmNDAyNiwgMHhhMGRiZmQzZSwKKwkweDRmOTYxMjJhLCAweDdjYjBmM2U5LCAweDdmZWRhODNhLCAweGYwMmE3ZTU0LCAweDQ1ZjgwMmFiLCAweGM4YTdlMDg1LAorCTB4YThlMGRlYzMsIDB4ZDk1Njg3OTcsIDB4ZDIxZTU2MTEsIDB4ZDk5MjAxZGYsIDB4YmExNGZlOTMsIDB4ZjRhZGU4NTMsCisJMHg0MTQzZTVmNywgMHg1MmU5MDRlZSwgMHg1ZDIwYmJhMSwgMHhkZmE3NzQyYSwgMHhmYTdlMTZhZiwgMHhjMTMyNDlmNiwKKwkweDI2YmZlNTc1LCAweGQ2NWNmZmEzLCAweGU5NDJmMmM0LCAweDY2MDc3YjdiLCAweGE4NWM5YzIwLCAweGRlZWQ0OGM2LAorCTB4NzVkNGZkODEsIDB4YWY1ZWFlOWYsIDB4ZDVkMmVmZWIsIDB4ZGRmZDc1ZjMsIDB4YTY5NTdhYmEsIDB4YjM2MzU5N2YsCisJMHhmZGZlMjA5MSwgMHhiMmUyN2U5YSwgMHhiOGQxYzg2NywgMHg2M2VhZjQ3MCwgMHg1OWMzNTk3ZSwgMHhjMmU4MTdhMywKKwkweGU1ZjdjMDEyLCAweDc5MGJjNGU1LCAweDIyMWQ4MTg2LCAweDI4YmEwNWM2LCAweDdlMjA2YjhjLCAweGU3ZDkzOWIxLAorCTB4NjU2MzcyYTUsIDB4NzQzZjhiMDQsIDB4NThiNjAzZDksIDB4NjE4Y2FlNWEsIDB4YjFiYzQwZjUsIDB4ZjI5ZWU0MDYsCisJMHhlMmMxMTAzYywgMHgwMWY5NWQ4YSwgMHg5ZmNhOGM1YiwgMHg1MTEyNmY2YSwgMHhjOGY5Yjc2ZSwgMHgxNjdlNzA4YywKKwkweDQ3YzgyOGQ1LCAweDc2YjdhNDZkLCAweDRkMzVlZTc2LCAweDA2NTkwY2I0LCAweGQxNWFhNTcxLCAweDFkZjgzNjA5LAorCTB4ZTBkOTM3ZDUsIDB4MjlhYmE5ZGMsIDB4ZmEwMmZhZjUsIDB4NDUxZmUxN2MsIDB4OGFlOTdiNGMsIDB4NzU4MThkYjQsCisJMHhlYTRiYWYxMSwgMHg0ZTZmZjJhZiwgMHg1OWQzZWYxMiwgMHg5YTBiN2Y3NCwgMHhjNzczOWY5OCwgMHg0MjNkOWQxYSwKKwkweDE1M2QyMGQ2LCAweDQxMWE5NjU5LCAweGUyN2Y1MjllLCAweDg2YmNmNjg4LCAweDFmMjk0NWYxLCAweGI2OWQ2NGFmLAorCTB4ZDI5Zjc5NWQsIDB4YTVmM2ZhMDEsIDB4NmVlZGI0MWIsIDB4YTA3ZjBmZWUsIDB4MzI1OGM5ZjAsIDB4MmNhM2ZiOTYsCisJMHhmMmU1YzMwZSwgMHhmYWVkMzEzNCwgMHhhZThmOGEwMiwgMHg2ODk4OTExNiwgMHg0NDQ5YmJiZCwgMHgxNjZmNzQ3YywKKwkweDIzNGYxMDdjLCAweGI3ZTQ3OGRlLCAweDc5NDAxMjBhLCAweDAzYTljMGE4LCAweGJiZDhjOWY4LCAweGY2ZDhlYWJjLAorCTB4ODEyZmU2NjksIDB4M2M3ZmI2NmUsIDB4ZDk2OTNmZTYsIDB4MTFjM2ZkYjEsIDB4ZDVmZDQwNmYsIDB4MjYzZTQzNDMsCisJMHhlZWU3ZmIzZCwgMHhmZjczYzA4YywgMHhhNDU2OWRhZSwgMHhlZjFkYWVmNywgMHhkNDI1ZjkwZSwgMHg2MTM5MzM1ZiwKKwkweGJmM2I1ZDlkLCAweGQzZjQwMzFlLCAweDAyNTRkY2I1LCAweDMwNmJhZWYyLCAweGQ4YWVjNzhiLCAweDM2OThmNWYxLAorCTB4MzNmN2FmZDQsIDB4ZmU2NDYxZmQsIDB4M2ZkMzc3NjEsIDB4NDFmYTEzM2UsIDB4NzYwNTc3NDksIDB4ZTQyOGNlYzMsCisJMHgyM2Q3Y2FhNywgMHg2YmJiZGYzMCwgMHg2ZTk5ZDdjNywgMHg5ZmI3NGZjYiwgMHhkMWU3OWUwYSwgMHg1YjA1MjU2NSwKKwkweDJjMzE3ZDYxLCAweDhkZjJhMThmLCAweGQzNTQyZjg5LCAweDc2MWJjYmY5LCAweGY2ZDAxNzE5LCAweDM5ZmYzN2RjLAorCTB4ZDc2OGU0MDYsIDB4NzUwZjY2NTYsIDB4NDFjZjZkY2EsIDB4ZjE5NDQzMWUsIDB4ZTI5OTcyZGMsIDB4OGE5ODEzYWIsCisJMHgzM2JmY2QzYSwgMHhkZjAyZTQ2NiwgMHgzZmNiODRmNCwgMHg1N2Q2M2UzMSwgMHhhZmZjYTQ3OCwgMHg2MmUwODc4MSwKKwkweDMzZWFjZWYyLCAweDZmZWZiMDBiLCAweGUzMThmYjNmLCAweDRiYTQyNjlhLCAweGFiN2ZiZjY1LCAweGU1N2I0NmFmLAorCTB4ZmVjZWZiNjIsIDB4ODJkZjZlN2YsIDB4NzZmYjJmYmYsIDB4ZmJlZjliZmYsIDB4N2FiYmQ3MzgsIDB4ZTc0OWU4M2UsCisJMHhmYWMxZWUzYiwgMHhhZTI3NTY0YiwgMHhlZWY0OGZiNywgMHhmZmM3ZmQ4NSwgMHg3YmZmZWVmYiwgMHhjNTJiN2RlMywKKwkweGZiZTJlZGJiLCAweDVhZmZjZGZlLCAweDM2ZjFmZmJjLCAweDdlM2I3NzhlLCAweDNmZTZmM2Q3LCAweDU3ZGY3ZDcxLAorCTB4NmZmOWJkY2UsIDB4ZjZkZWY3OGUsIDB4YWRmNWQ4YWYsIDB4MDY3YjJhODYsIDB4YTkwMTVmNWQsIDB4MzE2MTgyYjUsCisJMHg5MmRiYmUzNywgMHhkNzZjODBlMSwgMHg4ZjMwZmQ3MywgMHhjMzRiY2UwZSwgMHgyMzAxNGRmOCwgMHg5MDRkMGJmMywKKwkweGZiN2UwNzQ3LCAweDBiODk0MTFjLCAweDFkNzUxZmEyLCAweDFiYWUxZmI3LCAweGM4NzY4MjU0LCAweDk5ODdhZTc1LAorCTB4YjU1NTIwZGQsIDB4YWRmZWQzNjYsIDB4OTg5YzBiMzksIDB4MGZkMjQ5NzMsIDB4N2IzZWExYmIsIDB4ZmQ2YmFmMzIsCisJMHhlMjA0ZjdjOSwgMHg3ZjFkYTgxMiwgMHgyZDM1Y2U1ZCwgMHhlZjVlZDc2MCwgMHhhNWVlZDExMiwgMHgxZmJiZGEyNSwKKwkweDllY2U5OTBjLCAweDNkZmFkMDRmLCAweGZhZGFkZDczLCAweGZhZGEwNTRkLCAweDhkZGUzZTFjLCAweGM2ZmZhZDg0LAorCTB4NzEwN2MxN2MsIDB4MTNmNjUzNTUsIDB4MzU2NzEwZjEsIDB4OTA4OTk0MmQsIDB4NTU0MmY5MGMsIDB4OThiZmMxMmIsCisJMHg3ZjdkYWY5MywgMHhlM2MxZjgxZiwgMHg1MzFjM2M3ZiwgMHg5NzFjMGE0ZCwgMHhiNjQ4NWMyMCwgMHhmYTQ4ZGNlOCwKKwkweGVlYmU0NzAwLCAweDdkNjNkOWQ2LCAweDI0NGNjZjkwLCAweDhkZTM4MzI3LCAweDgzOGM0ZWU1LCAweGU2NWI3ZjczLAorCTB4NTU5NmNiZWYsIDB4YjJjZmMwYWQsIDB4ZmM1NmNmY2UsIDB4NGRlMGRlZTUsIDB4ZTM4ZGZmYjgsIDB4MmZlMDg0YTQsCisJMHhiZmY0NDRiYiwgMHhhZGZmOWQ2NSwgMHhlMmZiZTVlMCwgMHg4ZmUzYzE0MywgMHgzYTk3Y2JjNSwgMHhiOGIyMGNiYywKKwkweGNjYWJmMDA4LCAweDE2YTk4NWZkLCAweGNhMGZhYjI3LCAweGM4ZGU3ODI3LCAweDlmYTkwNWZkLCAweDQyZDM3ODhiLAorCTB4Y2M4YmRmNzksIDB4NWYzODZjZTYsIDB4MzAxNDhmMzMsIDB4MWFmZDcxZGUsIDB4Mzk4M2Y1MTEsIDB4ZTU3NWMwNGQsCisJMHg4ZjMxOTA0ZiwgMHg3ZTQzNzNmOCwgMHg2ZjNiZTAyNiwgMHhiZjE1MTVkYywgMHgwMjcwY2I2MCwgMHhiODcxMTczYywKKwkweGI0MmE5MTE3LCAweGVmZjljOTVmLCAweDg0Y2FjYmJlLCAweGY2ODIwNjczLCAweDIxMTcyMmVmLCAweGFkYmY1MmQ3LAorCTB4NDdmMDRiMjgsIDB4NGIxNTc4NTIsIDB4MGU5ZDFiYzQsIDB4MWM4MTZmNzEsIDB4YjViZGM0ZDEsIDB4NDdmZGY4NzUsCisJMHg4YjljNjg0MiwgMHhiZTRkZWZmNSwgMHg1ZmU1ZDRmYywgMHgzMjNiM2NhOSwgMHgxZTQxZmE4YywgMHg1ODQ5YmI5ZSwKKwkweGFmZjE1NmRjLCAweDcwNjI2ZjZmLCAweDdjMTMyY2FjLCAweDdlNzc0ODI5LCAweGVlNzU1ZjM5LCAweDgzZTcxY2Y4LAorCTB4MGUzYmRlYmYsIDB4YTNmNjY0ZTUsIDB4ZWZkMWEzYTMsIDB4NmZkMDM5NzcsIDB4NDM3ZWU0YTgsIDB4MGQxMWQ3YjcsCisJMHhhNmVlYWU3MSwgMHg5YjNlN2U1NCwgMHg1NWNiNTM2YiwgMHhmZGNmZGNhNSwgMHg3ZTQwYmZlZSwgMHhhNmJiMmQyMSwKKwkweGY4MjJiNTBhLCAweGYxODAyNDcxLCAweDA4ZDRlZjVjLCAweGZlNGMzMWIyLCAweDE5MzFmZmViLCAweDYxNTRmZDM4LAorCTB4NjI3ZTAwMWMsIDB4ZmQ5MWUwMjYsIDB4ZDFhYmU5OGEsIDB4YWRiYzJhYjEsIDB4MzQ5NGY2YjksIDB4ZTAxZTI3YTYsCisJMHgwZTc1NDQ3NywgMHgwYmUxNjNmOSwgMHg3NWMwM2U3ZSwgMHhmNGRiNDQ3ZiwgMHhhZGZiMzBmYywgMHg1NjM4YjEzNSwKKwkweGUyZGY1YmRlLCAweDM0Mzc5Yzc3LCAweDk3MDBjYjI1LCAweDlhOGFhNjFiLCAweDI2NTVmYjczLCAweDIzOGQ5N2VlLAorCTB4Nzk1ZDYwZTMsIDB4OWI2NTVkNmYsIDB4MTE2OTc4MDgsIDB4NjZkZGYwOWQsIDB4YTM1OWQzNjUsIDB4YjA3OWNjM2IsCisJMHgzZTMwOWUxZSwgMHhjYThmZDVjNCwgMHhlNzgwMjJjZSwgMHgwODIzODdkMSwgMHhmMmVmZDFmOCwgMHhmODM0YzY3MywKKwkweDQzMGQyMjZlLCAweDJiODgyZTNhLCAweGI1YzM5YWZlLCAweDcyYzc2NGQzLCAweDFjYjY1ZTU2LCAweDZiNGRlNzRmLAorCTB4YTM4NThmYjAsIDB4N2ZiYzAxZDQsIDB4ZTMyMTE4MjcsIDB4YmQ4Nzg5MjEsIDB4NTAxYmY0YTcsIDB4MWJiNWZhYzYsCisJMHhmNmUxMTVlZCwgMHhlZDgyM2MzZiwgMHhlZjM4OThiZiwgMHhmYmZjMjA5OSwgMHg1MWZiMmRlMSwgMHhlYzA3M2ZhYiwKKwkweGFlM2NhOTgzLCAweDA5YWU4M2QyLCAweDBjZjc0N2YyLCAweDFiZmEwN2MxLCAweGU3YWM2MWZjLCAweGRmODRlZmIxLAorCTB4YmViM2JlNTUsIDB4ODU1OWU5ODEsIDB4ZGU3MGY1ZWUsIDB4Y2NhY2UxY2IsIDB4ZTJjNGRjN2YsIDB4ZmNlMjdmYWYsCisJMHg4MTU5YzBhNSwgMHg0YWJkN2VhZiwgMHhhNmFmMmE3ZiwgMHhkNzUxZTNhOCwgMHgxOTdkOGUzNywgMHgyNjhhOWJlYywKKwkweDQzYTA2ZWMxLCAweDQ2NmQ0ODU1LCAweGM2Y2FjM2UwLCAweDZmMzg2NGM3LCAweGUzNjBlYjk5LCAweDhjN2YyOTEyLAorCTB4ZDNhMDlmM2EsIDB4OWEzYmYyYzQsIDB4MGRiY2FmZDMsIDB4MWFkY2U0ZTgsIDB4ZTI0MmU4MTMsIDB4MGRhY2UzYmEsCisJMHgwNmJiZjBlNCwgMHg3YmUxOWZlNywgMHgyMjdiZWY2YSwgMHg3OTAxNzhkOSwgMHhjZWE3YjFmNSwgMHg4ZjUyNTUzNSwKKwkweDljZWI4YzliLCAweDQzMmQ5NjU1LCAweGIyOTZlY2Y4LCAweDhhYTI3MjVkLCAweGIxNGQzYTllLCAweDFmM2NhZWQ4LAorCTB4ODc0OGU2NTAsIDB4NWMzZTc0ZTcsIDB4MTMxMWY3ODcsIDB4ZDI0MmVmODEsIDB4ZmJmMTViZWEsIDB4NjJhYTViZDQsCisJMHhkNDk2MWQxOCwgMHgzZDYyMzJlZiwgMHhmMzJiZmIxOSwgMHhmOWU4ZjMyOSwgMHgzNjllNzY2OSwgMHg2ZTQxNzhlZiwKKwkweDRiODAyMGRiLCAweGQ0YmZjOTllLCAweDFmNGU4NjE5LCAweDhlZTcyYjMzLCAweGI4NGY1M2RmLCAweGY5OGVkZDI4LAorCTB4MmM0ZjQ4ZmYsIDB4MWI0NGY0NTUsIDB4ZWYyYmI5ZTYsIDB4M2UzMzM1Y2YsIDB4YzQ4OWU5NTcsIDB4NDk2MjdhNzAsCisJMHhmMDExMjNiNSwgMHg2YTQ3NjRiMCwgMHg5MmM5MzAyMiwgMHgwODRiNGUzZiwgMHhmMDNlMjdhNywgMHg0M2UzNzNiMCwKKwkweGFlZWViYmZjLCAweDVjNGY1NGQ5LCAweGIzMTNkMmFlLCAweGY0NGU5MDIzLCAweDk1OWFlNWVmLCAweGU4OGI4ZDczLAorCTB4ZmY2ZjA1MDksIDB4MDNlNmYyYzMsIDB4Zjg2MTEzZDAsIDB4NTZiMzQ2ZmIsIDB4NTRkOGRjNGYsIDB4YzZlMjdhODgsCisJMHhmYmU2YTJkOSwgMHgxN2NkNmJhYSwgMHgwOWQ5MTNkMywgMHgzYjJlYjE3MywgMHhjZmQwYzJhMywgMHgzOWJmZGMwNywKKwkweDYxZmJmM2M0LCAweDZiMTdkMDFlLCAweDliODQ3NmNjLCAweDI2ZjQ2ZjVlLCAweDU1ZjZjN2Q3LCAweDgyNWZmZmFlLAorCTB4OTdkNzIyYjMsIDB4NDNmNzYxY2MsIDB4ODI0M2E0ZjQsIDB4MmU2NGJjZjQsIDB4ZDAwMmViOTUsIDB4NGJlYjkzMjMsCisJMHg0ZTcxZTU2ZSwgMHgwN2NkOWM5ZCwgMHg5NmExOWIzOSwgMHgwYWZkZWNiMywgMHg5NTBiZDMzNywgMHg5YWJmYzk4ZCwKKwkweGFlNmZkYjQ3LCAweGRhNjY5ZDk1LCAweGRjOTBlNmZmLCAweGRkY2I1NGNkLCAweGUxMDk2NjM1LCAweDk2ZWU0M2RjLAorCTB4YWU3YmI5MzAsIDB4NGZkYTFjNjksIDB4NTNlZmVkYmQsIDB4M2NhOTZmMmUsIDB4NDMwY2U2MWIsIDB4YTJmMzA1MWYsCisJMHgxZGRmZGYzNCwgMHhkYTc2ZmIxZCwgMHhlZjJmYzAyYiwgMHhmYjdlNzg4YSwgMHhmNjAzYjczOSwgMHgwMzNiN2Q4ZCwKKwkweDdjNTNlOWVjLCAweGZjYjhkYjNkLCAweDVjZjhmNGViLCAweGM4MWNhOTUzLCAweGQzZDk4M2JkLCAweDg0NDU5YmU1LAorCTB4ZTMwMzQ1NWYsIDB4OTE2MThhZmYsIDB4NGZhZDA3M2UsIDB4Y2YxNmZmNGYsIDB4NjBlZjE3NjEsIDB4MDc3NGIwZTcsCisJMHhmYzJhZDk3OSwgMHhhZGI3N2UyZiwgMHgxNjA1Y2UwNiwgMHgxY2YwMTdhZiwgMHgwMDVmYmUxOSwgMHg3ODczMTY3OCwKKwkweGUzMTczOTE2LCAweGRhZjE0YTM5LCAweGU1M2ZlN2YwLCAweGE2YTJkZmJjLCAweDVmMGYxOGY1LCAweDJiZjZkM2U0LAorCTB4MjlmNTc2MWYsIDB4NGNmMjQ3ZjAsIDB4YWY3OTBmMGMsIDB4YzlmNWJlMDgsIDB4ZWJhMGNmOTAsIDB4ZTc4ZDVjZTcsCisJMHhkYWY1ZTU0NywgMHg3ZWY5MDdlNywgMHhiNGZlOGExNywgMHhlNGZiZTg1NywgMHhkM2JmY2NjZiwgMHgxZWEwZmJjMywKKwkweDEyM2YyNTJlLCAweDVjMjlmYjJlLCAweDcwZjVmZTMyLCAweGQ0MGUwZGU5LCAweDAxZjNjN2JlLCAweDJiMGUzYzNkLAorCTB4NjQ5ZDI1NzIsIDB4NmU3ZTFmMDAsIDB4ZjE1Y2ExNzAsIDB4NDJlMTQzYmUsIDB4YjFlM2JiZTcsIDB4NDBmYjlhZTEsCisJMHhiY2I4NzM4ZSwgMHhmNGQ3NzA2YiwgMHgwMjE1N2U4NywgMHhiNzVlMmJmNiwgMHhhZDAyNGY2NSwgMHg2MzI3YWJjZiwKKwkweDc4YTE3OGUxLCAweDA3MGY1NmFkLCAweDAzODM3ZWY1LCAweGFhYmNmYWY1LCAweGM3ZTQwMjJkLCAweGZiZGZlNDJlLAorCTB4YzMxZWY4OTUsIDB4NWQ2ZTU0N2IsIDB4ZWQzY2Y1NDYsIDB4ZTRkZDIwYmYsIDB4ZmRmMDczODYsIDB4OWI5NDAxMTEsCisJMHg0N2M2ZGQwYSwgMHg4ZTI1ZmIzMCwgMHgwM2EzYTFjYiwgMHgzZjUxNTMwMiwgMHhlNDc2MGEzNSwgMHhkMzA0N2Y0NywKKwkweDcwNGYxNDU3LCAweGM0ZjM0YmJmLCAweGJjNzNhN2FmLCAweDIzNTJiOGIwLCAweGM1MjU2M2MzLCAweGY0ZjNmMDFiLAorCTB4NjNhZjVlMjYsIDB4NGEyZGUwNzYsIDB4MzlmMDVlYmQsIDB4YmJhYjkwMDQsIDB4OGM1Zjc2NjQsIDB4OGUwNGUyNDAsCisJMHg4NDdlOTUwNCwgMHgwNGVjZDVmMywgMHhiNDc3OWUxNSwgMHgyOGRmZmEzMywgMHg4ZjgxZjEzOCwgMHhmMDQzZjdmZSwKKwkweDMzZGQyYmRjLCAweGY0YWZhNjNiLCAweDNlMjljMGFlLCAweGZkZTc4YjQyLCAweGUzNzlhZDExLCAweDliZjljMWZhLAorCTB4NzM3YmM0ZTAsIDB4OWNmMDYyOWEsIDB4YmIyZDU4ZTgsIDB4YmY5NTI1ZmYsIDB4ZjAwYmU3YTcsIDB4ZDFmN2Q0M2IsCisJMHg0Mzg1ODRjYywgMHgwODhjZjM3ZSwgMHg3OWM1MGZjYywgMHhhNjVkOTg1MywgMHg3YmZhNGY5NiwgMHhmZTZmYmU4MCwKKwkweDQ1NjkyNTUxLCAweGM3OTQyYzdiLCAweDA0ZGU3ZWU4LCAweDM0MTBjZGUzLCAweDA5MTA0ZWY5LCAweDA5ZmYzYTAzLAorCTB4N2NkNWJmYzYsIDB4OTI0OWYxODEsIDB4ZWY5NmYzMWQsIDB4ZWRjZjJiYjIsIDB4NWUyY2JiZWMsIDB4Nzk5YzFlNmYsCisJMHhlZjg1MWU2OCwgMHgxM2EyNTViOSwgMHgwYzliYTg1YywgMHgyMDU5ODM4ZSwgMHgwOTk0MWU2ZiwgMHg3ZGI5Y2JmMCwKKwkweDgxZTk4YmIyLCAweDg1M2JkNDI4LCAweGVmYzUxZWVmLCAweDBlNTkwYWQ5LCAweDhmYmMyOTFhLCAweDdjYTM5N2U5LAorCTB4YmQ1MTFmM2QsIDB4MGE1ODgyZWQsIDB4ZjcwZjFmYTksIDB4ZWU3NmNjZTAsIDB4Nzg4MGU2OWEsIDB4OTVmZWM2NGIsCisJMHgyYjM5Y2U3MCwgMHgyMGYwN2VkNywgMHhiYjM1NzNlMCwgMHhhYWM4ZTkwNywgMHhlZWQzZjQ1YywgMHg3ZTQwNTNiYSwKKwkweDA2ZjE0YzNiLCAweDlkOTljZmVmLCAweDlkMjBmMDdjLCAweGYxNTVkNmY3LCAweGNmMzk2ZTc4LCAweDljMjM3ZjE1LAorCTB4MjdkYmNlNjMsIDB4ZGZiNDFkM2EsIDB4MTZhZGViODIsIDB4NjZiY2M3MzgsIDB4MmFkYzQ4YTQsIDB4NWE0YWRjZjgsCisJMHhhZjMzYmUzMSwgMHhiMDM5Y2VlYSwgMHgwZmFhMTJlZSwgMHhmNzI4NjRjNSwgMHhmYTg0NGI0ZiwgMHhhZmRmMDEzYSwKKwkweGYwOGRiYWY0LCAweGRhZWI2NmJkLCAweDNhMGNjNmIzLCAweDA3ZWQxMTdmLCAweGM3NWNhZjYwLCAweDEwNmU1NWZhLAorCTB4NWRmYTkwOWMsIDB4Y2ExOGY0ZDQsIDB4MDIwZGEyY2IsIDB4NGFkMzM0NWUsIDB4MWIzMzVmZWQsIDB4ZTNhNjY3ZDcsCisJMHhlZmEzYWViNiwgMHhiYzMxN2FkMywgMHg4ODZlZTMwZiwgMHgyN2NlMTFiOSwgMHhmMTNhZTkyYiwgMHg3OGQ1MDlmZCwKKwkweGRmNDQ1ZDJlLCAweDc1YTRjZGEzLCAweGRlMzg5ZGMzLCAweDgxMDI3NWEyLCAweDI2NGIwM2VmLCAweDAxMzIzZjI0LAorCTB4M2IyN2RiYzYsIDB4YWVkMGZkYTEsIDB4ZGQ2MTFiNWYsIDB4ZmFmOWQxYjcsIDB4ODgxN2YxZDMsIDB4M2ZhMGQzNmQsCisJMHhjNzYwYTVmOSwgMHg0NmVhODdmYiwgMHgwYmFkZGM2MCwgMHg1NDJmMGMzNiwgMHhlNjNhYzcwZCwgMHgwYzEwM2IxMywKKwkweDY1MWYzYTkyLCAweDRlZmIwNDQ3LCAweDc1NTk2OGI4LCAweGNkYWJlYzBkLCAweDQwNmM5ZjFiLCAweDA0NmIzYWJhLAorCTB4YzI4YzdlM2QsIDB4M2M4NzRkZGIsIDB4MmU3OTY0NmEsIDB4YzZhM2RlY2QsIDB4ZmQxYzk1MzYsIDB4ZGYxNTIyMjgsCisJMHgxYjMxYTNiZiwgMHg5MjE2MjZmMywgMHg3MDliY2M3YywgMHhhNDdiMzM1NywgMHgwZjg0NjU3ZCwgMHhiMmVkNmFlMiwKKwkweDZmM2MwODdkLCAweGU3YzI2OTVlLCAweGZkMzEyZjlkLCAweDBkYjgzOWQzLCAweGQ2MjdkYmUzLCAweDVmYmUwNGM5LAorCTB4ZjUyZWIxNWMsIDB4ODllM2MwNjksIDB4OWJkMjMyY2QsIDB4MWJjYjJjZjgsIDB4YzU4OTdlMjgsIDB4YjFkNzlhYzksCisJMHgzNTJjNGY3MSwgMHhhMGI1N2JiMiwgMHg1ZjhiZDY5ZCwgMHhiNDBhZjI1NCwgMHg1MWM4YWM3MiwgMHgyZjRhNzI4YSwKKwkweDZiNzJmNDk3LCAweDQ2ZDU5M2QxLCAweGYyMWVkOTIwLCAweDk0NzRlOTZhLCAweGVmNTRhNTU3LCAweDkwZjVhMTAwLAorCTB4MzA2YTgzNTcsIDB4NTc5N2FhNmUsIDB4YzhhMmM0OTUsIDB4NWY4ODc0YTksIDB4YmUwZjk2MTYsIDB4ZjFkMDJkNmQsCisJMHg4MTgzZWNhZCwgMHg1ZjZiZmY1NiwgMHhiNzdhMDUzZSwgMHg0OWUwNGFjYywgMHg1YTdmNjQ4NSwgMHg4MDQxNzQ2MCwKKwkweDZkMzVlNjVmLCAweGEwZjgxMmY5LCAweGRlMDQ1ZTY0LCAweGYwMWM3NWM3LCAweDI2YjM3YzAwLCAweDhiYWZjZjBlLAorCTB4NmYwODg1N2MsIDB4NzhiNzJmMjUsIDB4OTVjZTk2YWQsIDB4Yjc1Y2UzZjgsIDB4ZmQ2YTVjNDgsIDB4NWM0NTEyNTUsCisJMHhlZTg3N2VhYSwgMHhlNzRhZjRhMywgMHhmMDUxYmRiOSwgMHg3NDNjYTg4MSwgMHhiYmRlZmI1ZiwgMHhjNzZlYjAzMywKKwkweGY2ZTMyZDc1LCAweGQyMmIxYWMxLCAweDlmOWZhMWYzLCAweDdhZjQwOTVkLCAweDAxMDJiZGRiLCAweGRkNzg5ZDdiLAorCTB4MmIwZmEwMzUsIDB4ODgwZTBhZDYsIDB4Y2JkZjE3MGYsIDB4ZWZhNjJmZGUsIDB4ZmQwZmJhYzMsIDB4YTUxNWQxOWEsCisJMHg3ZmQwMDc2ZiwgMHhmNmM3YmFjNSwgMHg4MjBkZmY2MiwgMHhiNDNmYzYwMywgMHg4OWVkMTBiZSwgMHhiMDQ4YWYxMiwKKwkweGZhM2I0MzdkLCAweDYxNGY1NDBmLCAweDU3YjM1OTllLCAweGFmZmEwMDRjLCAweDA3NjRkZmI4LCAweDIzYTE0OTUzLAorCTB4ZjlkYjJlODUsIDB4ZWNjNDA4N2QsIDB4YmU4YjMzMWMsIDB4MTUxNjBhYjcsIDB4YzUxZTkzZGYsIDB4NGZhODIxMDIsCisJMHhiZDJhNGU4MSwgMHg1ZmRhY2U4YywgMHgzNjQwOWQ5MiwgMHhmNjRiYTcxNywgMHhhZTA5ZmMxZCwgMHhlNzY3YzU1ZiwKKwkweDc0ZWY4NzRjLCAweDA0N2VhOThhLCAweDk3NWU2ZDNhLCAweGUyM2IwNDZiLCAweGZjYzA0Zjg0LCAweDQ5NzQ5ZThhLAorCTB4NGEzYjZhMmMsIDB4MDU2N2NiYTEsIDB4ZDA3YmFmMjYsIDB4N2IwZThlYTMsIDB4NGJhNzFkZDAsIDB4NTEyOGZlODUsCisJMHhiNjU5NWZhMywgMHhmZGYwMjY0ZiwgMHhkZDFlOWViZCwgMHg5MDhkZmQ3MiwgMHgzMmY4NTFmZiwgMHg2ZjVkMGZkZCwKKwkweGQxY2ZjZDZlLCAweDQ4ZTA1NzVlLCAweDJmNTAwOWViLCAweDhmZGU1ODkyLCAweDEyZTUwZmMyLCAweGRlZmIwZmNiLAorCTB4YmZjZGQzZWIsIDB4ODdlNzgyMjksIDB4MmM4ODNmMDEsIDB4ZTc0ZmM5N2YsIDB4MGJmMzdiN2QsIDB4NjY3OTJmOTgsCisJMHg2ODc1ZmI1MywgMHhlOTQxYmNkZiwgMHhkOWJmZTAwMCwgMHg3ZmU4ZmM0YSwgMHg5NTBlNTBmOCwgMHg2Zjk4ODgzNiwKKwkweGU2N2YyNDRkLCAweGFlZGY5NTJjLCAweGZlMmNiZmU0LCAweDVkZTExNTgzLCAweGNiZTRkNWJhLCAweDZlOTdlZmEzLAorCTB4ZjMwNjNhM2YsIDB4MzAwNzk2MTEsIDB4NDliYmM3YmYsIDB4ZGUxZmU3NjAsIDB4ZmRmMDMxYjYsIDB4ZjJjNGE5NTAsCisJMHhjMTc2ZjQ3MCwgMHhlNzE2NDhmMCwgMHhhYTJkNzhlYSwgMHhhMTM2ZWMwMCwgMHg1N2IzZGQ4ZSwgMHg2YzkzN2Y1YSwKKwkweDA3NzVjNTUyLCAweDJmMzhjYTQ1LCAweDYzZTc4N2VkLCAweGI4Njc4YTVlLCAweGE3ZDYwMTFmLCAweGM5NGRkZmJlLAorCTB4OTE3OGU5YmYsIDB4YTM2OTVmZDEsIDB4Njk1Y2Y2OGMsIDB4Yzg0ZTk2ZGQsIDB4NmMzZDJjYzMsIDB4YjJiNzNmNDIsCisJMHhmYzExYWNlZSwgMHhiYzNmZGNkOCwgMHg1NWYzZjc4NCwgMHgzYzlhOGEzNiwgMHg2ZmY5MWViYywgMHgwNGRmYTI3NSwKKwkweGU1MGQ1YmY5LCAweGViNDM3ZTc4LCAweDBmYWY1OGVkLCAweGIxN2EwNzlmLCAweDdmYzVhZDNjLCAweDRiZGRiMWQ4LAorCTB4OTVmOGI4NDEsIDB4YmVmMGQ5ZGYsIDB4MzY4ZGQ2YmUsIDB4ZWVhOWVlZmMsIDB4M2RhN2Y5YzIsIDB4NTdlYWRkZjIsCisJMHhlZGRmMzA1ZiwgMHgwOTQxZmMzNCwgMHg1ZDQ4YmFlYiwgMHg5MzFkNjBiZSwgMHg5OTdkNzQ2YiwgMHhjNGUyNjFmOSwKKwkweGE1ZWI3YjQxLCAweDdjODM5ZjJmLCAweDdmYWQ4ZWVjLCAweDViZDYwZTdiLCAweDllZTc1ZmY2LCAweGIyMWFiYzgzLAorCTB4ZjYwZWMyMzMsIDB4MGZhNmU1NDgsIDB4Nzk1NTlmMzAsIDB4ZDk5MjI0YWYsIDB4ZmUyZjlkN2YsIDB4M2I4MGYzMGUsCisJMHg2MTM5MzQzZiwgMHgyNzFkY2ViNCwgMHhkMWJkODA4NiwgMHgwNGRiZTViOSwgMHhiYTVkZWZjOCwgMHg3M2M2MWE2MywKKwkweDRkY2I2ZTk2LCAweDA1ZTI2MTI0LCAweGViNzQwOTRhLCAweGIyMWU0M2ViLCAweDBkY2Q1ZjFlLCAweDczZmY5OGNkLAorCTB4ZTQxYmUyODYsIDB4YjE3ZjMwNDMsIDB4ODNlNTljYmUsIDB4ZTJkZTc4M2EsIDB4ZGVmOWYwZTYsIDB4MWIxNGYyM2QsCisJMHgxOTNmNWQ2NiwgMHhiMzAzNjJlNCwgMHhhZjlhMmUwYiwgMHhmMWUyODA3OCwgMHg2ZmUwM2VmMiwgMHg0ZjJlNmFmMywKKwkweDBjZWZlM2MyLCAweDU0ZjE0MWZjLCAweDU3Y2RhOTEzLCAweGUxNjFiMmZjLCAweGI2ODE5ZTZmLCAweGYzNWViODg2LAorCTB4ODA3ZGZkMTUsIDB4M2U0ZjkyOWIsIDB4NThmNWQyMmIsIDB4ZDZjZGYwMjQsIDB4Mjg3ZTYzZGYsIDB4MDFjZjJkZTAsCisJMHgyMWNiZjlmMiwgMHgyOTNlMTcxMCwgMHgxMGZlMzAwNywgMHhlZmMyNjFkOCwgMHgxYzc3NGIyYywgMHhkY2U5ZmU0MiwKKwkweGI1ZjMxZmI2LCAweGVlZWJjZjA5LCAweGNiMWZjMTI0LCAweDllYjFlNWMzLCAweDk2NTYwZGNhLCAweDBmZTFjOGU3LAorCTB4MWIwZTkwNzksIDB4OGVmOWU3M2UsIDB4M2M5NThlOGMsIDB4MWZmMmRlYzgsIDB4Zjg1MzIyNWIsIDB4NGYyYzJhN2QsCisJMHhjN2MzN2NiMywgMHg4NDMwYWYzYywgMHhlMDAyNjEyZiwgMHg3OTgyZmRhOSwgMHhlYzFjMGFhNSwgMHhkNDJiODcwMCwKKwkweGYzZTFiY2Y5LCAweGRmNzk4MzRjLCAweDNmODA1ZjFjLCAweDdjYzFkMzkwLCAweDA0MWY1YTVkLCAweGUxM2U5YmY5LAorCTB4MGYyMzA5MTAsIDB4M2NiM2Q3M2EsIDB4ZmMzOTRlZTAsIDB4N2U0YWNjZjcsIDB4NGY5ZWIzNmYsIDB4ZWJjYjdkN2QsCisJMHhiZmZhZDhiZCwgMHgyMjFhN2MyZiwgMHgxZWFlMzgxZCwgMHhjM2U3MWQ0ZSwgMHg5Y2UzZjFjYiwgMHhmN2YwN2ZlZiwKKwkweGZlODI2NTIxLCAweDgxY2Y5M2ZiLCAweGRhMWJjYjFlLCAweDg5OWY3ODhkLCAweGZkZjEzZmUyLCAweDVhNzhmMDc2LAorCTB4ZjMxMTI2YzcsIDB4OWJlYTZiM2UsIDB4ZTVlYjhlNTEsIDB4MjczZjA1NDUsIDB4MWJmN2FmZDEsIDB4NDY4YWRlYmUsCisJMHhiNjNhMjdhNiwgMHgzYTE2N2Q1YSwgMHhhZjViYzc0ZSwgMHg2YzU3M2QyMSwgMHhkM2JjYzc2ZSwgMHgxOGFmNzViZCwKKwkweGNiZTc1NGRiLCAweGFhN2MyN2EwLCAweGJjYmM3N2Y1LCAweDZkY2EwYzZiLCAweDdlOThiZjdlLCAweDliMTQ2MzFlLAorCTB4ZmMyOWIyYTcsIDB4Y2Y5Yjk1M2MsIDB4ZWM1OWU2NmEsIDB4MmRkYTM3YWQsIDB4YjRlZjlmMTcsIDB4YzYwOWJhZTQsCisJMHhlY2NhZGQzYiwgMHhlMmY1ZDNhNSwgMHhmOTk4NWYwYywgMHg0OWJkNzE0ZiwgMHgwZjNiMmQ0OCwgMHhlZjEyZmFhNSwKKwkweDdiYjJiMzU5LCAweDI0NWI0NGQ1LCAweGFkNGI1ZmRhLCAweGY3NDcwZTEzLCAweDc5ODhkMjgzLCAweDc5YWEyYjJmLAorCTB4Y2U3ZGNjOWUsIDB4MGFmN2MwMjQsIDB4ZDYwNGQ1ZWIsIDB4YWJlMDEyYmIsIDB4YmI2NWUzZjIsIDB4MjZkZDgwOWIsCisJMHhhODY3ZTUyNywgMHhmNTk0NTljZiwgMHg4ODE5ZmIxYiwgMHhhNWZmODU0ZiwgMHhlMDg5MTlkNiwgMHgzYmM5MTI3ZiwKKwkweDVkNzFkNjA4LCAweGU4MTJkN2NhLCAweDhiMGY1NmJmLCAweDQ3ZjM5M2RmLCAweDU2ZjNjMTg3LCAweDhlMjdiZWM5LAorCTB4NTUzYWRiOGUsIDB4YjVlODQyNzAsIDB4MzRmYmRkMjcsIDB4MmU5OTg2NzEsIDB4ZjhiMTdkZWQsIDB4NWZkZDFjMGQsCisJMHhmNjgwZDNiNywgMHhiN2UwZDVhMCwgMHgxYWM0MmVkMywgMHgwZTg0OWFkMSwgMHhhNDM4ODNhYywgMHgwMjE0ZmMwNCwKKwkweGY0MWUyMWYzLCAweGZkYzE2Nzk4LCAweGNkNDIzNmM4LCAweDk0ZTdlODUzLCAweDQ0OWZmNzM0LCAweGY3NzQ5MDRmLAorCTB4YzMwMzkwYTEsIDB4Mzg1YWJkMjgsIDB4Mzk3MTJhYmQsIDB4OGU5YmZiMmIsIDB4YWNmNzg2ZGIsIDB4NmE5MWE0YzQsCisJMHg1NjM1ZGYyMCwgMHg0ZjBkZGEzNywgMHhlODY5ZmJmMCwgMHg0MWU0MjQ2ZiwgMHhhNzQ4OTJjNCwgMHgzYTI2ZmVmYSwKKwkweDM4ZmJlNmFmLCAweDFlYTZhZjNhLCAweGUzZDZkMmUzLCAweGMyYzc0ODY2LCAweGJlMzg5N2U5LCAweDA1YTJlOThlLAorCTB4Y2QzMzEwZTEsIDB4Nzk2YmY4YTAsIDB4ZWI0MjEzYzMsIDB4NGUyNzg5OGUsIDB4NmI1ZmI0M2YsIDB4MjgwMWVmYzEsCisJMHhmYmQ1Nzk3YiwgMHhlYmI0NThiMCwgMHhjOGQzZWJhNiwgMHgzNmI0ZTg4OSwgMHg1M2FkODFhZiwgMHgxYzRlZGNmMywKKwkweGE1ZGZlZTAyLCAweGFiZDc0ZTdkLCAweDcxNDYxN2E5LCAweDA5MTEyNzc5LCAweGRjYzU5ZGU0LCAweGJiZmMzODRhLAorCTB4NWZiZWYwMzUsIDB4MDEzODM3ZGEsIDB4NWZiODQzZjAsIDB4Y2Y5MDI1ZWQsIDB4NDFmN2NkMTIsIDB4YjdmNGQ3ZTcsCisJMHhjZDgwNzQ0MywgMHgwYzg3MWRhZiwgMHg0M2JmYWJiMiwgMHhiZmViOWNiZCwgMHgyNWZjOTY1MSwgMHgzMjllOTQ1MSwKKwkweDYyNjE1Njg3LCAweDQ5MTI1Njc2LCAweDliYTVlZmMzLCAweDRhN2NhMWZhLCAweDc5ODM5NjU5LCAweGEzMmQ0MjI3LAorCTB4MDg2YjYxYWIsIDB4MDBiMGNkZjIsIDB4M2ZiYTliY2YsIDB4OTM1MWVkMTIsIDB4ZDIyMzc4OTksIDB4ZTIzNjdiZTEsCisJMHgxNjYxZDM5NSwgMHg3MDQzY2YxZiwgMHhhMWQwMzcyYywgMHhkNjk0NTVhNCwgMHg4MTRkN2JlOCwgMHg4YTQyYzMxYywKKwkweGEyNjg3YTg0LCAweGI5NDY1N2UzLCAweDlmMjhhM2FhLCAweDI3NzRjY2Q2LCAweGY2YzJjNjE5LCAweDNiYjk1ZWRlLAorCTB4NTJmNmI5MGIsIDB4YWExYTA4ODgsIDB4MTk2OWVlZjcsIDB4ZWYwNDIyOGMsIDB4YmRkZTIwZjEsIDB4NmJjNjgwN2IsCisJMHhlYzE1M2E5NSwgMHg2ZDdmOWRmMCwgMHgzMmVlYjA2NCwgMHg5YjVmNzk1MywgMHgzZThmZWFjMiwgMHhkYzI1NzdiNCwKKwkweGNmNmU5MzM3LCAweDQ5ZjYxNDdmLCAweDc4NTFmNmNjLCAweGQ1OGZlNWRlLCAweDliZGRmM2RjLCAweDM5ZDY1MTdlLAorCTB4MTczZjgzNzIsIDB4M2FiZTA1ZWUsIDB4MWRmNWVlYzAsIDB4Nzc3ZTBkNmUsIDB4YTM3ODdhOGYsIDB4ZDFmYmE5NDUsCisJMHhkODZmYzg4ZiwgMHhiY2FkNzI4ZiwgMHgxYmI2M2Y3ZSwgMHhhMWNiNGVhMCwgMHg4MWRjZmU3MSwgMHg0NzJmOWY3NCwKKwkweDc0OTY5YTFkLCAweGExYWYxZDI5LCAweGQ5M2UwOTMwLCAweGQwZWEzNTdmLCAweDMwZWVmODFlLCAweDU3OGY4NzA0LAorCTB4ODIxNDFlZWUsIDB4YzNmY2I0ODMsIDB4ZDU5MzJkM2QsIDB4MGY3MGY4NzAsIDB4ODU3ZDIxZDgsIDB4N2QwZmFiYzMsCisJMHhlYmU4NzA4OCwgMHg2YzVkMjliZSwgMHg5MzVjYmMwNywgMHhkNmZiYzA2ZCwgMHhjMTZjMzhhZSwgMHg0NWZkMGFmOCwKKwkweGUzZTIzZWEwLCAweGJiZTVlZmFjLCAweGExMWZjNTZjLCAweGQzNTRlY2UzLCAweDQyOWVmMjk3LCAweDRkZDFiZDU3LAorCTB4NjI4ZmIxMmEsIDB4ZTk2YTZjZjcsIDB4ZjVjYTJiYTcsIDB4MjVhYmFjMzYsIDB4MzU4Zjc1Y2EsIDB4Zjc4ZmY3MWUsCisJMHg3NmUzNWMwMCwgMHgwYjhlYTczYiwgMHhiOGIxMzVkMSwgMHhlZWZkYzFjNywgMHg1YmYzMmNhMywgMHhmMmYyNTRhMywKKwkweDYyMjVlYzlhLCAweDgxYzljNDBhLCAweGZiNDNlMjE3LCAweDhkZTY1Zjg5LCAweDE5Zjc0MTE4LCAweGRlNjAzMmVmLAorCTB4ZmI4YjI4ZmMsIDB4MmI2M2NjMjAsIDB4NzcyMWY4MDgsIDB4MWVlMjBhZWMsIDB4YmUyMTg4MjcsIDB4ZDlhYmU2NTAsCisJMHg5YWY1ZmNjMSwgMHgzOTZmODM0MiwgMHg2MDE1ZWYzYiwgMHhiNDdkMTBiYywgMHhjMDIzZThlOSwgMHgxZGIxYTNlOCwKKwkweGE5YTJhM2U5LCAweDYzNDdkMTlkLCAweDA2NjQ0ZTc1LCAweDNmMDMzNzNiLCAweGM2MDQ5NmJmLCAweGEyM2JkZTAyLAorCTB4NTEyNjlhYmUsIDB4MTUxYTFmZmEsIDB4OTFiYTAxYTgsIDB4ZTVhNmU3YmQsIDB4M2Q3MDhhNWQsIDB4N2MzZjE2MWQsCisJMHg3YWJlY2E3ZCwgMHg0YjZkNmZjMywgMHhlMDY5NDNjYSwgMHhlMDMzZWU0ZiwgMHgzNzAyOTc3OSwgMHg4NThjNWZhNSwKKwkweDU4YjZjNWU1LCAweGZjMDM1ZmRkLCAweGVkYjQyNzJhLCAweDZkNmZlZDg1LCAweDM2ZjMxZjc5LCAweGQ4NmVmYjZjLAorCTB4NjZkYmVmMDUsIDB4NDIzOTBjNTMsIDB4NWJlZWQ2ZjMsIDB4ZDc2N2Y3OGUsIDB4ZDg3ZGQ4MDYsIDB4MDVlMDI0ZDEsCisJMHgzYzNiZGViZCwgMHhlMTA0ZmYxOCwgMHgxYTRmNzYwMSwgMHhmOTFkYTNjMCwgMHg1ZWZmMTM2NSwgMHg3MDUxYWIyYywKKwkweDFhMWY5ZTgxLCAweDg5MGRlZWM1LCAweGViZjNiMGI0LCAweGQ3MTExNjIxLCAweGNlYzJjNDM5LCAweGJkZjdlMjU5LAorCTB4OTViZjgyMjUsIDB4ZmIwMWJmNzUsIDB4YTY5OTQzYzcsIDB4YmNmZGZmZGUsIDB4YWY4OWE0YmYsIDB4ZTg1NGY4MmIsCisJMHgyOGQyNGE4OSwgMHg0Y2U0N2ZiOCwgMHhhMmQxM2I4YywgMHhhOGQ4OWZhMSwgMHhjYTc4ZDUxNCwgMHg4ODc4OGY3YiwKKwkweDQ3YWEwZWYzLCAweGZmM2RkOGFmLCAweDk0YWJkMDJlLCAweGZjMDBiZTdlLCAweDk2OGRmYjA0LCAweDRhNmUwMDIzLAorCTB4NzBjZmEwN2YsIDB4MGRlZmExZjgsIDB4MWU2MGY5ODcsIDB4ZWNiNjE3YjAsIDB4M2RlMjIyNWUsIDB4NmJjNDdkMWEsCisJMHg0OTFiZGMyNiwgMHg5MTQ2NjdmYiwgMHhmZGY0YWRhYSwgMHg0MjVhNjhjYywgMHgxM2Q3OGUzZCwgMHgyYjIwN2Q3OSwKKwkweDFhNzEzZjUzLCAweDNkN2NmYTA0LCAweGI2NGViYjhmLCAweGM5MzFmY2YwLCAweGQxODZlYTNlLCAweDVjNzY2NzUwLAorCTB4ZWEyNDUyNTYsIDB4ZTE2Zjg1MDUsIDB4YjczODA4MGUsIDB4NzVmOWY4OTYsIDB4MDBjNTIwNGEsIDB4NThmODUzNzgsCisJMHg1NmZjMTgwYSwgMHgyNDUyYjRhYSwgMHgxOGYyMDE4NywgMHg3ZGQwZjFkZSwgMHg5ZGNiYmQ0YiwgMHhkZjY1MmZhYiwKKwkweGNmOWZlYTcxLCAweGMxZjllYmU0LCAweDNkMTdmNWY2LCAweDA5OWVlZmJlLCAweGI3MzcyZGYwLCAweGFkMDM3MjNkLAorCTB4MGU3YTVjNTcsIDB4NDc5NzA3Y2YsIDB4YTE3OTVjNTUsIDB4ZWJmNDJmN2IsIDB4ZGJmY2U3N2YsIDB4NGQ4NzQwNTEsCisJMHg3ZWMyOThkZiwgMHhlMWMzNTUwZiwgMHhjMDI5ZTJkNiwgMHhiZGY5MzJmNywgMHhjOTUxMjQyZSwgMHhiMWU1NTYzMywKKwkweGNiYjcxYjQyLCAweGY4Mjk5NTEwLCAweGZmYWNlZDFjLCAweGY4MDgxMTQwLCAweGYwYjE0YWY0LCAweDllMzI1NDdlLAorCTB4ZTVkMTRlMWYsIDB4OWY4N2ZlYWQsIDB4YzEzMmY5YzUsIDB4NzEyNTAwMzAsIDB4Y2YzNjI4YzksIDB4MzI0ZWNjMzcsCisJMHg5Y2UwZmZkMywgMHgxNzNmMWE2OSwgMHhhZjcyNDc3YiwgMHhkZWYxZDJiMCwgMHgzNTdjZWMyMSwgMHgxOWFhYWUzMywKKwkweGM2YzRjNGVhLCAweGZiZGEyNmNmLCAweDZiMTMzMjBhLCAweGI4YzJjNmE3LCAweGRmMThjOWQxLCAweGRhZWIzNWNhLAorCTB4YzgxMmJkNTMsIDB4OGM5YTkyNjksIDB4ODhkMzg5NzksIDB4N2E2MzNlY2EsIDB4MDhlZWVkMDMsIDB4ZTM5MDJlYmEsCisJMHg3NDJjOGNkNywgMHhlN2VkZTU0ZSwgMHg0ZDQzZmZlOCwgMHgyYTk5ZjZlNCwgMHhjNzJhZTM3ZiwgMHg4ZDU0ZTc1YywKKwkweGY3OGI1MmZkLCAweDlmZTlmZDAxLCAweGYyZTFlZGUyLCAweGZjZTMzZTJjLCAweDc3YzllMmRmLCAweDFlYjNmOWMyLAorCTB4ZTEwZTM5OWUsIDB4MjdhM2FiN2UsIDB4ZDQ3MGY1ZGMsIDB4YWI4MTVkYzMsIDB4OWZkOThlMWUsIDB4ODZjNmE3MzgsCisJMHgyZTFlOTM4MSwgMHg0OGVkNDhkMywgMHhkYzBhNjNkMCwgMHhjNzc5NzBmNSwgMHg5ZGUyZThjYywgMHhhYmRlMTMzNCwKKwkweGUwYzQ4ZWY4LCAweDIzMzUwZWY4LCAweDliYTQxZWExLCAweDAxZWYxMTY4LCAweGY1ZTI4Y2NlLCAweGJhYjA0NzM3LAorCTB4NjRhOGVmODIsIDB4YWUxZWI3YzQsIDB4YzY2NjM4N2EsIDB4NThlM2Y3ZjEsIDB4MmYwMGJkZmYsIDB4ZTIwMmU1MDksCisJMHhjYzliYTE0NywgMHgzMWRkYWFkNCwgMHhlYzUwN2EyYSwgMHgyZTFjNjllYiwgMHhmYjQ2YmVkNCwgMHg4YWRlMzczOSwKKwkweGFmYjAyNjcxLCAweGUwODQyNWE3LCAweGQ2Y2U1Yjk2LCAweGYyZGMzYjk1LCAweGY0YTlmODNjLCAweDcyYmZiYzc1LAorCTB4ZmYzZmUxMGEsIDB4Y2EyZjNjMTQsIDB4Y2UwNTU1ZTQsIDB4ZGFkMWJlNTMsIDB4YTY5YWQzYzksIDB4YzMzODgyOWYsCisJMHg3ZWZiOTM1MCwgMHgxMDgwY2ZhMCwgMHgxNDc1ZTc4MywgMHg3MDc0NDdlZSwgMHhkNzY3YmVkNywgMHhmODcwZjVkNiwKKwkweGIxMzFmYzAzLCAweDNhMTRiYzI3LCAweGUzYzJjMGZiLCAweDIwYzgwMzRlLCAweGJjYzc5N2IwLCAweGYyMGQxMTk2LAorCTB4ODZjNTM0OWIsIDB4NzE1YzRiOGQsIDB4MGUzODNmMzgsIDB4NjNhNDU3YTcsIDB4Y2Y4M2I4ODEsIDB4NDIzZmE5ZWQsCisJMHg1YWEzZWQ4ZSwgMHgzNmM3MjU1MiwgMHg5NmQzZWU4YiwgMHg0YzcyOWVmOCwgMHg4ZTY0ZDNjMSwgMHhiYmM0Yzk4NywKKwkweDkzNGJlMjBiLCAweGQwNDVmNDg5LCAweGVkMGU0ODFmLCAweGU3ZDk1YmJmLCAweGY2MTAzMjQwLCAweGMxYzU4Mzc5LAorCTB4NjdkZjNmZTQsIDB4YmNkNGRmNzAsIDB4ZjhiM2Y5ODQsIDB4MGI2NjU5ZmMsIDB4MDI0MzVmN2UsIDB4Y2UxMDQ3NTIsCisJMHg5MWRmNzgyOSwgMHg1YTFiMThkNywgMHg0ZmJmOTI4NywgMHg2NjExNTQ4NiwgMHg3YmMzY2RjZiwgMHhjODVjMjlhZSwKKwkweDc1YTE1MTc3LCAweDg0ODJhYzk4LCAweDc1ZjBmZGY3LCAweDdiMzNhOTljLCAweDViYWQ4ZjIxLCAweDlkODE0Nzc0LAorCTB4MWJlYzIxZDcsIDB4ZmM5M2ZiODMsIDB4ZTlmZjQwMjMsIDB4ZWUzNWNmZGIsIDB4ZGE3NjgwYWUsIDB4ZjFmYjA4YWYsCisJMHg1OTE2MmZmNSwgMHhjM2IwMjFmYywgMHhiOTNlN2JlNCwgMHhiMjk1M2I3NywgMHg4NTA5ZWEzNSwgMHhmYmUwYjM3ZSwKKwkweGRlODFjYmQ0LCAweGRkNjEwM2ZkLCAweGQxZDU0MDUzLCAweGY2NTllNzcyLCAweDYzNzY0MzFkLCAweGVjZjMwNGJhLAorCTB4ZmY3OTY2ZTksIDB4ODEyNWM0MzksIDB4ZGZhN2FiN2QsIDB4YTFhNzRiZWYsIDB4MDg2MDQ1NzgsIDB4NWQ4YTI5ZjgsCisJMHgxZWVhZDUzNiwgMHg1N2NmYTU2OSwgMHg5YjY2ZWZmMywgMHgwNTE4OGVjZSwgMHhmNGMxZjk3OCwgMHg0ZjRiNDA3NCwKKwkweGJhNTExZDBhLCAweGVjZjAwZjFhLCAweDY5ZmNmOGNhLCAweGNkZGZjNzMwLCAweDdhMDA5NzM4LCAweDQzZGZiMTUxLAorCTB4MDI2YjhhNzYsIDB4M2IzN2E3YWMsIDB4M2RkNTg5N2UsIDB4M2IwMTdhYzUsIDB4MmU2N2IxNWUsIDB4ZGQ5MDg3ZTYsCisJMHg3NGE2NDFkNCwgMHhjYmM3MWI3NCwgMHhjY2FiNzMzYywgMHg2MDBmY2RlZSwgMHg0OGVhZmRmZSwgMHg0NzNiNWVlNSwKKwkweGI3OTFkODI0LCAweDU0ZDk0ZWFkLCAweGQ1ODZlNzA3LCAweDZiN2VmZTJjLCAweDgzZjFhYzk1LCAweDg2ZGQ5MGRkLAorCTB4NjZmYmIzZWYsIDB4NmRhNjVmNmYsIDB4ZmU2MDRjZmYsIDB4ZmI1N2ExN2UsIDB4MzQxMjU4OWMsIDB4OWNmNmVkZjcsCisJMHhjMDM1ZTBkNywgMHgzMTIzYzNiYywgMHhhZjNmNDEzZiwgMHg3OWZhN2Y3ZSwgMHhlNmFkZjNmNSwgMHg2MzZhZDU3ZSwKKwkweGNhYTc0OGVkLCAweDY1NjA1OTJlLCAweGFhZjc1MGY2LCAweGNhZTBlYmM3LCAweGU3ZTBkZWJhLCAweDkzNDgwZjM2LAorCTB4YjVhYmY3NTQsIDB4MDgyYzhlYWQsIDB4MzI4YzZmNzcsIDB4NzllZjAyOWUsIDB4MDBlMmNmYzQsIDB4YzNkZmYyNTUsCisJMHhlNTliODNkZCwgMHhkZTgxZjE2NiwgMHg5ODE2MWRlNiwgMHhlMWEwNzY4YSwgMHhmNjA4YmY0OSwgMHg0MTAwYjBmYywKKwkweGUwMmIzYmZiLCAweGY4ZDAyYzMyLCAweGVlNGZjYzAxLCAweGJkYzAwN2UxLCAweGQ2NWViNDI2LCAweDAxZjk4YmIwLAorCTB4NGZlOGQ1ZjUsIDB4MDI3ZjUxOTQsIDB4Mzg3YWNjZjQsIDB4MTdjMDFlOWIsIDB4NDFmZTg2OTQsIDB4ZmM4NWRmZDAsCisJMHhjZmI4MmNhOSwgMHgxMmMzZmI5MiwgMHg1YWQ0OTdhNSwgMHhmNWEzN2ZkNiwgMHgwOTZhZTM1ZCwgMHg5Mjc3NTVmYywKKwkweGUzNjMyOTRjLCAweDk4ZDdlZmMzLCAweDkzNTU1ZmE5LCAweGY1MDgyMjRjLCAweGY4Nzg1ZWFiLCAweGMwNmJlOWZkLAorCTB4MDk3NThlNWYsIDB4YWQyODdmNzAsIDB4ZjdmYTU4ZDcsIDB4ZjhkZWJmZGQsIDB4YjgxYWZlZjAsIDB4NjVmYTk0NmYsCisJMHg3ZjJhYWNlYiwgMHg3OGZlMzdiNywgMHgwYjkxOGMwNCwgMHgzZGJhNDdmMCwgMHhhMWYwMjM3ZiwgMHg4YTY4YWYxMiwKKwkweDExMWY3Y2UwLCAweDgwNjhiYmE0LCAweDU3Mjc0Mjk3LCAweDdlOGY5YjJmLCAweGU3MjVjNDQ1LCAweDU4OWU0MDg3LAorCTB4MTZmZmM3MTYsIDB4NDZjMzhmMmIsIDB4MTI5ZmY3YjEsIDB4YmY5MDViZGQsIDB4MDIzZjNhZGYsIDB4OGNlZmNiZTIsCisJMHg1Y2ZlOGEzYywgMHhlN2M1OTU5MywgMHhkMDRhNzlmNywgMHhiOWYwNTI3ZSwgMHgzZjcwMmFjYiwgMHhmODEwM2ZjOSwKKwkweGNkZjFkYWVkLCAweDY0OTdlMDcxLCAweDQzZGUwMmM5LCAweDllZmIyNGRhLCAweDc5MDBjZjRjLCAweDgyYmVkYjM0LAorCTB4YTI2YjI5NmUsIDB4NmIxM2JmMTEsIDB4YmMwZmYwOGEsIDB4MzVhNzY1NWIsIDB4OWI0Y2ZiZjEsIDB4YTgxZGVlY2UsCisJMHg2NjFlNjNjZSwgMHg0NTY1ZGRjZCwgMHgzMDhiZjNmYSwgMHhlZWM2NTY3ZSwgMHg3YmVmYTBjMywgMHhmZDIxMmZkMywKKwkweDdmNDAxMmUxLCAweDEzZmJmMzkwLCAweDYxYThmY2YwLCAweDQyZTIwZDhmLCAweDgyN2VmYzFkLCAweDA5Y2QwZDMzLAorCTB4YmU1OTY5ZjMsIDB4ZjAzNjJmZTUsIDB4NzBlN2RlZDcsIDB4ZTJiNTIzMzgsIDB4ZGI2NTRhM2QsIDB4ODNmZmJjNDQsCisJMHgwYjcwOWJjZSwgMHgxNjFiYTdjNCwgMHhmN2VmYjI2NCwgMHg4YTY3NzdkOCwgMHg2N2ZmNGNmZSwgMHgxNjdjYzBmMywKKwkweGM4ZWZjNDM0LCAweGIyNzI3YjE0LCAweGY1ODNlYmQ5LCAweDE4OGI1NTM1LCAweGJiYWM5ZTJmLCAweGJmMGE2YzM3LAorCTB4NWY2ZjRjMzcsIDB4NzEyYWI0OWUsIDB4ODdjYzA0ZTksIDB4ZjM2NzZhNWEsIDB4NTk0ZmM2ZjQsIDB4OWYxMmM0ZGYsCisJMHgyNGIyZGY4YSwgMHhjZmViMDhiZiwgMHhjMDgxMjZmYSwgMHg1YTY3OTcxNSwgMHgwM2M4OWU1MiwgMHhjZWM4OWUzZiwKKwkweDQ0YWMzMGUxLCAweGNhZmRhMzc2LCAweDZmZTg5ZmNmLCAweGJlNDNkYzM3LCAweDZjZGU1NzkzLCAweDRhZWIzNzM4LAorCTB4ZmRmYjY2MjQsIDB4Nzc2MDA5OTcsIDB4ZTBiMWZiYjksIDB4OGEwN2QzMjIsIDB4MWJlNTM3N2QsIDB4NmY1NTdjNmQsCisJMHg4ZDM0ZTZlNywgMHg0MTIwN2ZiZCwgMHhhNzdmYjM3OCwgMHg1NWVlYzAyMiwgMHgwNmZmNjFlYiwgMHg3YmI1ODdhNiwKKwkweGUxMGM3OTA5LCAweGY1MmRiZTkwLCAweDI5NDdiODFhLCAweDNiMDY4ZmZkLCAweDdjMDJkYmNjLCAweDNjZjgwZjExLAorCTB4NTRmY2Y3ODcsIDB4ZDA4ZGZmMTAsIDB4ZGEyMGQxNWUsIDB4OTI3ZWIwZmQsIDB4OTVmMDE5NzEsIDB4NzAyODM3NjIsCisJMHg2Y2RmM2M2OSwgMHg5MWQ3NDMxZSwgMHg1ZjYwZDY3NSwgMHgzMzc4ODc0ZSwgMHhjZmZhMDVmMCwgMHgyZmJjZmVlMywKKwkweDUzNTdmNDBlLCAweDgyNzNjMjQwLCAweGEzYmJiM2FjLCAweDYwZTRhODE2LCAweDNlMDM3OWQzLCAweDViZmNmMzdmLAorCTB4ZDg4MWU3ZGEsIDB4MmRiZGUwY2IsIDB4ZWYxN2U2MDYsIDB4MjhmN2ZiZGUsIDB4OWU2ZjRiOTAsIDB4ODJmMWM2ZWYsCisJMHhiYjRmNDM3NiwgMHg2YjkxZTExOCwgMHg2NzcxODMxNSwgMHhjNDRjNWRiNSwgMHhiNzkwMDNhYywgMHhhYTlhMmQzNSwKKwkweGJiNzdhMTMxLCAweDcyMTNmYjM3LCAweGI0ZjQ5NWJmLCAweDFlYzA3MjFmLCAweDExZDhjMzExLCAweDNlNzRjZTFjLAorCTB4NmY0OGY4MDksIDB4ZTM2ZTVjNTcsIDB4MjRjMWU2ZjEsIDB4NmNhM2VlMWQsIDB4MThiNzFmM2MsIDB4OGE2ZTFmYmYsCisJMHg3ZDQ3MmZiMiwgMHhhZWE1ZWNjYywgMHhiZjFmYTdkZCwgMHgxM2VmOWUwNiwgMHhlNzExZmRkOSwgMHhiN2E3ZTQ0NSwKKwkweGRhMWUyZTc2LCAweDJhNWJlMmE2LCAweDVmNGYxMTM5LCAweGY5ZGIzZmY1LCAweGQ1ZmZlZDA2LCAweDQ3MTY0ODllLAorCTB4YTk5NzljOTcsIDB4ZjUwODc3YmYsIDB4Zjk3ODcxZjcsIDB4MzhmM2IwMDcsIDB4ZDdiODAwZWYsIDB4MmZkYjA3ZTksCisJMHhmYWZjM2QxZCwgMHhjM2RhMWIzYywgMHgxZWEwZTk4MSwgMHgzNzZiYWM0NiwgMHhhYzViZmUwMiwgMHg5MGQ5ZDdmOSwKKwkweDAwYTNlYWRmLCAweDMzOTI1ZTJlLCAweGYzODA0YzkwLCAweDc0MDM5MjdhLCAweDc2MjZhODE1LCAweGI1YjYyN2YwLAorCTB4OTc4MDBjMTgsIDB4OThjOThkOGMsIDB4OWY4OWIzYTcsIDB4YWZhYTJlNTcsIDB4ZThhYjI2MzUsIDB4ZWYzZjExNjIsCisJMHg4NzdiMjkzYSwgMHgxZjllYWFjNCwgMHg3MmY5MzFiMCwgMHg2ZmU5NGY3MiwgMHg0M2UzNGYzMCwgMHhjNjFlMTkxMywKKwkweDMxYjA2Y2RlLCAweGQxOGFmYjdkLCAweGU4NjZjZDdiLCAweGRmODBjNDc3LCAweGZiZGVlZDBkLCAweGNmYjg1ZWZhLAorCTB4Yzc2MWQxNzgsIDB4M2RmZjg4NTgsIDB4YmY2MDczNjIsIDB4NmE5YjdkYzYsIDB4ZjFiN2NmMjAsIDB4NTQ1MmQwMTMsCisJMHgxNDI4NmNhZiwgMHgzN2RlNzQwZCwgMHhlZmM1ODM4OCwgMHgxZmQwMTgwZSwgMHg4OTNkYzYwZiwgMHhmOWY2MGUyYiwKKwkweDFiY2Y1ZjEwLCAweGY5Y2QwNjJkLCAweGRlZmMxYmQ4LCAweDMyNmQ3YmRkLCAweDg5YjEyZmI2LCAweDJkYWRjNzg4LAorCTB4MzdhMDcxMzksIDB4YmJlZWFjNWEsIDB4OGUyZmEwNmQsIDB4MTJjMGQ1YjUsIDB4NjI5Zjc4OTQsIDB4YjAzYzRkYWYsCisJMHhmNGQxOWFmNSwgMHgwNjFkODljZiwgMHg3MWRiYTAzYiwgMHhmNjExNzllMCwgMHg0ODQ5MzhlYiwgMHhkODdhNDA4YywKKwkweDhmM2M3NDZmLCAweDNhMzdiYzdhLCAweDFkNzQ3OGQ4LCAweDJhYmYwMTZmLCAweGZmOWFhN2YwLCAweDdmNWEzNGExLAorCTB4ODU4YTU1YTMsIDB4ZmUwNTJlZmMsIDB4Zjk5NDNlY2EsIDB4YjVjNGY1MWQsIDB4ZTRhYzgyZGUsIDB4Yjg4MTdhZGEsCisJMHgzYTVmOTJiMywgMHg3Zjk0NGVjZSwgMHhkMmU5MDEyZiwgMHg2YTNkNzM2OCwgMHhkYTBlZjY2MywgMHgzMGY3MjdkNywKKwkweGFlMTVlOGJiLCAweGUxNTI0OTQ3LCAweDgyOWY4MDUwLCAweDhiMWI3YWE3LCAweGU5ZWIyYTMzLCAweGRiZGZmZTZkLAorCTB4Y2E1NDllOTgsIDB4OWJkNzRiZWYsIDB4ZTkxNzg3NjQsIDB4MGZjYjFiNjYsIDB4ZTZmZDc4NzcsIDB4NmIyM2M4NTQsCisJMHhjZjdmYzU0YywgMHhmYjY3OTU0OSwgMHg5M2U3YTQ3YiwgMHgxYjA1N2JkYSwgMHhmODA2MGNkYiwgMHg4NzYyYWMwZSwKKwkweDZkZTY4MzEwLCAweDIwZWJlZDFmLCAweDQ4ZjU0OTlkLCAweDA5ODc4ZDdmLCAweGRkNjk3MWYyLCAweDQ4ZWUyYzlkLAorCTB4N2ZiZjBkZTUsIDB4ODFkMWNmMGQsIDB4N2E3OWY4N2YsIDB4MTM5NjgxN2YsIDB4MThhZmQ2OWIsIDB4ZGJmNWYwODgsCisJMHg3MDQyYWY4MCwgMHg2NTAzN2NhMiwgMHhlODExYWQ1NSwgMHg1NjUyZDE3NSwgMHhlOTczZjMxNiwgMHhjOGRkNmI0NSwKKwkweDU4ZWI0NTlmLCAweDViMWVlMTdlLCAweDBjZTdhZTMyLCAweDg4NjI1N2E3LCAweDI3ZjkwMDFjLCAweDY1N2YwZTJlLAorCTB4NmU5Yzc5ZGQsIDB4ZDEzYzM1NGYsIDB4ZmE1MmYzMGMsIDB4NzNlMDEzZmEsIDB4NGY2M2UzNTIsIDB4N2ExNTcyYzMsCisJMHhjNjQxYjUzZCwgMHhiNTIyNGE3MSwgMHg3Y2FkZjZlNywgMHgxODA3NmRiYywgMHgyMGRjNGZiZCwgMHg1ZmZkYzBlNywKKwkweDBlYzRiZDEzLCAweDM2MzdlYzcxLCAweDdlNDExNDZjLCAweDljZjQwMWJmLCAweGY0MWNmOGNjLCAweDBmM2RjOWVkLAorCTB4ZjQwMmZkNDYsIDB4NDA4MWJiNWMsIDB4MjMxNWZjYmMsIDB4ZTJhMmQ5MjksIDB4NWZlYmRkOGIsIDB4Njk2ZmYwZDUsCisJMHgxODM1ZjU1ZCwgMHgxNThiNmY5NywgMHg3YzJiY2U0MCwgMHgxNWZkYzBhYiwgMHhlNDJhZjNhMywgMHhmYzc0ZWJmZiwKKwkweDJmYmQ5NTNmLCAweGRmYjAzYjQ3LCAweDlmZmY5YzEzLCAweDlmZjk0MTk4LCAweDEwZDk4YTNlLCAweGFmMzhjMDIzLAorCTB4MDdkZmMzMTgsIDB4YTQwZmY1ZjcsIDB4NmQ1Y2EwYmYsIDB4YmY1NzIxZWIsIDB4Y2RiNTcyNjYsIDB4YWZlNzRhOTYsCisJMHhlMzFiYjZiOCwgMHg3MWY1YzEwYywgMHhhYTYyNzliYSwgMHgwMmM5Mzc0MiwgMHg2Mjk2YmZjMCwgMHg4YmMwMTg3MCwKKwkweDk5ZTgxNWMyLCAweGRmYjdjZGRhLCAweGQ5NWM4NjkwLCAweDBmMzllMTIyLCAweGY5ZTI0NzNmLCAweDAyNzdjYTFmLAorCTB4ZTQ4NmJmMGEsIDB4NmViN2MyOTksIDB4ZDVkODM0NzMsIDB4ODA1NmFiNTMsIDB4ZTc5NzFmNWQsIDB4MjUzY2ZhNDUsCisJMHg1MmM2ODdiOCwgMHhmODBhNzY3ZCwgMHgzODNjOGMzOCwgMHg1N2M3ZTVjMSwgMHhmNzYyZmJiMiwgMHg3YTAwMGZlZSwKKwkweDIyMWVhMTJlLCAweDEzYWM4N2VjLCAweGE1MTc4MGVjLCAweGRkOGViMWRkLCAweDVhM2MzYWMzLCAweDJiYmY5Y2QwLAorCTB4ZWYwYzFmZjUsIDB4NDFmYjhmNDAsIDB4N2M2MzQ3ODcsIDB4M2M4NDYwM2EsIDB4YTYzZTExZDUsIDB4ODM5MDg4YzcsCisJMHg1NzBjNDBmYywgMHg1YjNlMDAwZiwgMHhjZGQ3ZjU0NCwgMHg0YTc1ZmQyYSwgMHg1NTNhNDVhZSwgMHgzNDc5NzBlMCwKKwkweGM1NWY1ZjkzLCAweDk1ZmY3ZGIwLCAweGUyMTU4NWQzLCAweDJmNzNhYTg1LCAweDAyNDg5MGVhLCAweDYwNTE2N2UzLAorCTB4ZjhjMjJlN2MsIDB4YmE0Y2Y2YTcsIDB4ZGFmZGU5MGEsIDB4MDc2ZWY0ZjAsIDB4ZmUxNjJhZmYsIDB4NDhmNWE3M2QsCisJMHhlYzMzMzE5ZiwgMHgxM2NiMWRmOCwgMHg0NjIyMzM5MiwgMHhiMGY5MWY2MywgMHg1N2YxYmRkYywgMHhmZDAxZDdlOCwKKwkweDQ2ZjdiZjAyLCAweGZmNDAyNWZmLCAweGZiZGQwYzI0LCAweGYwYWJkZDI4LCAweGE1MDFkMGE3LCAweDU1YTI2YjhiLAorCTB4MTc0ZjQxZjIsIDB4MDJhMzc5Y2EsIDB4ZTc3NDU3OTcsIDB4MzM0NzRmOTUsIDB4OTc4MGIwNzksIDB4NjZmMjVlOGUsCisJMHg2MGZjZmQ5NCwgMHg4MWVjOWYzYywgMHhjZjBjZjllNywgMHg3YzAyYmUyMSwgMHg2N2UxZjIyYiwgMHgzZGFmZTExNywKKwkweGFmNmM3NmQxLCAweGU2MDE3NGY5LCAweDczZjJkNGE5LCAweDlmM2U3YWFiLCAweGQxYTVlZWIyLCAweDRiN2NlNjgyLAorCTB4Y2EzNGVlN2YsIDB4NWEyYmJlZTIsIDB4NDhlYTNlNzcsIDB4MzRjN2QxMGIsIDB4ZDkyZWNmNmUsIDB4ZmY3M2MyNjgsCisJMHg3ODAyZDAyZCwgMHhiZGZlY2RkYiwgMHhiYjNkZTU2YywgMHgwYTRmMGQ0NCwgMHg0Y2QxMTVlYSwgMHhlMWY0MmI4ZSwKKwkweGMzMjQ2NjU4LCAweDU1ZjJmZmE4LCAweGM4NmVlMTcyLCAweGFiNTlmOWZmLCAweGRkMzQ2ZjM3LCAweDc3YTMxNmM3LAorCTB4MDdlOGI1ZjYsIDB4ZjE4MmFmMzgsIDB4ZDgzM2NhYWYsIDB4YzYyNDFmMjEsIDB4ZGUyMDE3NjUsIDB4N2MwYTI0ODEsCisJMHgzM2NkOGZiOCwgMHgxOTc5ZDUyZSwgMHhlNzBlYzlmYSwgMHgwZjA3OTAzOCwgMHhmODI5N2M3MywgMHg5YmQwZTA1NSwKKwkweGFmMGRlYjllLCAweGUyN2MzODdiLCAweDhlNWViYjc5LCAweDllZmU3MzE0LCAweDVjNWRmYmMyLCAweGUwNDU3ODhlLAorCTB4MmY3MTFiMjcsIDB4NTlmZDYxMTcsIDB4ZTUwNWZlNGMsIDB4NzNjMTE2NDgsIDB4NzI3NTk3YzksIDB4NWU5ZmU1ZTQsCisJMHg5MWFjYmM4ZSwgMHhjMmRhMTMyMywgMHgwYmZhMTFjYSwgMHgxYmYxZmZjYiwgMHg0YjFkYTIxNiwgMHg2M2I3ODcwZSwKKwkweDNkMzM0Njc3LCAweDkzZmEwZjFjLCAweGIyZjc4YmY2LCAweDM5ODdkZWYzLCAweGM0OGE1MmRkLCAweDBkZGFjOWJjLAorCTB4NTcxM2NjMjYsIDB4MzY2ZDkwZTQsIDB4YWY3ZjgxYzksIDB4MTZmYTA2ZDksIDB4MWY3NmNkN2EsIDB4YzVlNzBjOWUsCisJMHg5YzA3NDY0OSwgMHgwMzkyOWY1ZiwgMHhkNDUzZjc4OCwgMHhmYTQ1YWYwMSwgMHhjN2ZiYzdjOCwgMHgwMjIzYzhjMywKKwkweDQ3ZWYxMmYxLCAweDljZWZkMDgzLCAweDlmMjEzNjI2LCAweDUwNDY5OTJjLCAweDc4ZGVlZTdmLCAweDQ5NTVkMjA1LAorCTB4NzQwMDhhNWUsIDB4MjMxNzVhNWIsIDB4NTRlYzdiNDAsIDB4OTRlNDAxYmIsIDB4OTYyYjhmYjIsIDB4NzFiMGM4MTksCisJMHhkNDA3MDdjOCwgMHg2ZjBhZTQ3MiwgMHhjZGJiZmUxNSwgMHg0OWRjZTM0MywgMHg0NzIxMGM3MiwgMHgzM2ZiM2QxZiwKKwkweDhkYThiYzc1LCAweDIyZjFkNWQ2LCAweGZiZTA3ZjVhLCAweDQ2OGU4YmM0LCAweDc4ODAxZTA3LCAweGFlNmMzZmQxLAorCTB4OTQ3Nzk4NzYsIDB4ZWEyOGZmMjUsIDB4OTEyYWM0YjcsIDB4YzVkNmU0YTgsIDB4NGExZmI3ZWMsIDB4MmUzYzk1MmYsCisJMHgzNGE5NWE0NSwgMHg4MWM0ZDA0ZSwgMHg2MDczYWI2ZiwgMHg1ODJiZjgxYywgMHhlMzgwYzU0ZiwgMHg3ODcwYzM0ZiwKKwkweDdiNTg0NmFmLCAweDFmYTNhZDliLCAweDEzZTQwYjk3LCAweDk3ZThmODgyLCAweGZjNDIyNTVmLCAweDA2M2I5MTQ1LAorCTB4MmZlMmFjN2IsIDB4YTE5NzkwMGIsIDB4MDM3ZmRiZjAsIDB4ZDdiNTdkMWMsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsCisJMHgwMDAwMDAwMCwgMHg3ZGNkZmYwMCwgMHhkNTk0NzgwOSwgMHhlNzdkZjBkNSwgMHgyNGNiMmQ5ZCwgMHg3NjQyYzk5MywKKwkweDAzYmJlYzI2LCAweDRlYjFhYjA5LCAweDA0OTA2MDA4LCAweDhkNDQxMDA3LCAweGIwOTAwOTM4LCAweGQyOTEwMzY0LAorCTB4MjA4MTk2ZDYsIDB4MmIxODhhMDYsIDB4MGViMTU0YjUsIDB4NDU1MWZhMTQsIDB4ZGIxYWI2MWIsIDB4MWE0MDEzYTAsCisJMHhhZDU2MzQxNCwgMHg2MWE1YWZkOCwgMHg4MDg5MWQ5MSwgMHhlNThhZDNmZCwgMHg3YmRjZTczYiwgMHgyNjRlZjMzMywKKwkweGU3OWY2YTAyLCAweGNkY2YwZjBmLCAweGNmN2JkZTVkLCAweDc3M2RmYjNkLCAweDc5NjMyZDQ5LCAweDliMTkyMjNiLAorCTB4ZWQ1MGIzOTAsIDB4Y2NjOWE5MDYsIDB4ODMxYjE2M2MsIDB4NDM2MzJmMWYsIDB4MDg3YTNlNzksIDB4NmI5ODU5ZTYsCisJMHhmMjZiNjMyMCwgMHgwMWRlNzk3NSwgMHg5ZmM3NWQ4YywgMHhhMjY5ZmQzYiwgMHg2NzhlM2UxNSwgMHgzMGQ2ZmU2YywKKwkweGI1MzM0OWViLCAweDdmZTFkNzY3LCAweDI2OGM1ZDc5LCAweDY0OWY1OTVmLCAweDlmYzdkOTNkLCAweDI0YmY4ZjlmLAorCTB4NGMzM2ZmYzEsIDB4MmIxODEyY2YsIDB4ZTFhN2UyNjMsIDB4NzBmZmRmY2IsIDB4ZGZjN2I0MTgsIDB4NTRkZWM2NTUsCisJMHg4MDU2ODlkZCwgMHgxMmRjZGNhNywgMHhkOGNlZGRkNSwgMHgxM2M3ZjkzMywgMHg1MmQ0OTFkYywgMHgyMjNkZGY4NywKKwkweGI5NzE3OGM2LCAweDcxZGViZGUzLCAweDU1ZGU3OThjLCAweDBmYzgxNmQ5LCAweDRhM2QxOTM2LCAweDY0ZTJmYzM0LAorCTB4ZTg4MjZiNzYsIDB4MDY5NDdlMGYsIDB4MDQxOTY3YzUsIDB4NTU0MzdmZjksIDB4ZmU5NzYzMmMsIDB4YzVmNGEzYWQsCisJMHgzMmYyYjg5ZiwgMHg3YThhZmJlMCwgMHhiNDM5NjM5ZCwgMHgxODUwNjhhYiwgMHhkMWNjNjJjYiwgMHgxOWNkNzk5NSwKKwkweDQ3ODVkNThjLCAweDVmZDA2MjBkLCAweGE3NDhiZWNlLCAweDI5MmZjYTAxLCAweDgzMjlhZjY2LCAweDg3MDgwMGQxLAorCTB4YTIzZmMyNDEsIDB4ZDQxYjdkMzUsIDB4ZDg5ODM3NTcsIDB4Y2E1ZWM4NmEsIDB4ZTExOWFjNjEsIDB4ZDlhMjNiZDUsCisJMHgwNzdlM2YwMCwgMHgwZmE2N2UxZCwgMHg2YmNhMDBjYywgMHg2MzBiMmUxZCwgMHhmZjc4YzI5YiwgMHg3YjY0YzI5YiwKKwkweGI0ODMzNDdiLCAweGVjZDE5MmRiLCAweGQ3YTdjMDA0LCAweGY0MGQxNjMzLCAweDY5ODNjNDgxLCAweDAzNmU5MmY2LAorCTB4MWYzMDk5ZjQsIDB4ODAxOGYzM2QsIDB4M2VhZGQ5NGUsIDB4YWRkMmYxMTUsIDB4OTE2M2FlZDUsIDB4YWRmNDcxZmUsCisJMHg0ZGRiZTY4YywgMHg2MDM5ZDc2ZiwgMHhmNzgxM2FmYywgMHg1NDNiNGQ5ZCwgMHhkODczZTAzZCwgMHgxNTZhZGE5OCwKKwkweGY3MjhkMmQyLCAweGE4ZjNjNDU4LCAweDJjNmFhYWVjLCAweGE4ZjdjZDhmLCAweGE1OWY2ODZlLCAweDAwYjNlZDU0LAorCTB4ZTY3OGQ4NWUsIDB4Y2NlNTAyZDgsIDB4ODQ4ZjgzMDcsIDB4MThkNjE2ZmEsIDB4MjM5OGQ5MDUsIDB4MjgyOGNlMmQsCisJMHhkOWM2NzUxZiwgMHgxZGU2MDAzOCwgMHhmNjBhNjJlZCwgMHgxYTMyZDhjNywgMHhjYmE0NWZiZiwgMHgzOGIyZmQ4NSwKKwkweGZkMDA1MmE3LCAweDIzMDdmYjBjLCAweDc2N2VjOGJjLCAweGVjNTY4ZDM2LCAweGYzNWM2ZjAwLCAweGMwMWVjNTE4LAorCTB4ZTI0ZDMwNWYsIDB4ZmVjY2Y1YWIsIDB4NzNkN2VjNTMsIDB4YmE0MGU3NDgsIDB4NzM5OGViZGEsIDB4ZmFlZmI0MjMsCisJMHgyYzMxYmY3MiwgMHhkMmJlZGZjYSwgMHhiNzc4ZDBhYSwgMHg0NmI5ZGRiYiwgMHhkODc5ZjM0NiwgMHg5YzhmZGYwYSwKKwkweDAwNjdkZGVlLCAweGYxY2Y4Njc4LCAweDAzZGEzM2VjLCAweDUxOTczM2U2LCAweDFlMmQyOTdmLCAweDExZDI0NzlhLAorCTB4OGJhNjBlNzcsIDB4Y2ZkNDMxMmQsIDB4YzZiZTMzYTgsIDB4NGJhZWQwMDEsIDB4Y2EwN2NjMTUsIDB4NTQzZjlhZDMsCisJMHg1NTY5YWYxMCwgMHg3MWQyMGFjZCwgMHg4MjVlZDM2NywgMHgzZjc5YjUzNywgMHhlYTExODE0ZiwgMHg3MjAxZGQyMCwKKwkweDhmMzAxNzU1LCAweGNkMWQxNmM1LCAweGExNDViMTYzLCAweDk5YzVlNTc0LCAweDdmYTgyZTg5LCAweDZjNWVlYWM0LAorCTB4Yzc5ZmVhMTksIDB4NjI3NzFjY2EsIDB4YmViZmY0MTUsIDB4N2NmYjViYTksIDB4YjdiYzAyN2IsIDB4Mjc4ODY3YzEsCisJMHhhYjcyZGZkOSwgMHhiMjY5ZmE5MSwgMHhmMzg0N2ZiOCwgMHg3MmRlOWNhYiwgMHg0NzZmNzkwMCwgMHg0OGEzOWZkMywKKwkweDg4ZTIxYTJlLCAweDhlODcwOWJlLCAweDk2MTIzZDEzLCAweDc4YTBjZTAwLCAweDBhODVhMWZkLCAweDg1ZjVhYTgzLAorCTB4MjNhNTMzNDAsIDB4ZGRiODI3OWUsIDB4ODg5OTMxOGUsIDB4Zjg5ZjgwNmYsIDB4MDkzMTFhYzcsIDB4OGM2MmYyZjgsCisJMHg5MWM3MDZiYiwgMHhkOTE0MjdlZCwgMHhiNDVmNTAyMiwgMHhjZjc3YzVlNywgMHg1OThlNjUyZSwgMHhmYmNmMDAzZCwKKwkweDZlYjI3NzhiLCAweDEyZjc3NzQ4LCAweGJiN2I3YmE0LCAweDIxODc4ZjgxLCAweGIzOGIzMTNmLCAweGE0YmJmYjE2LAorCTB4Y2UzOGU5YjAsIDB4Zjk0Mjk4NGIsIDB4OTc5ZTA2NGIsIDB4OTVhYmZhZjgsIDB4ZWIxMWViZTMsIDB4Nzg5NmM1YTQsCisJMHhmMDJiMjc4ZSwgMHhiYzYxNGJmMSwgMHg3YTFlYjA1ZCwgMHhiM2JmY2FkNywgMHhjZDYxN2UwYiwgMHgxZTcwNWY5YywKKwkweGJiNjRiZmE4LCAweGRiZGZhMmRkLCAweDNkNWNlZTlkLCAweDA4Y2Q5M2U3LCAweGRlMTFjOGU3LCAweGMzYjdjODdkLAorCTB4OTBmYjNjZjMsIDB4ZTA5OGQzZmYsIDB4MjdjZTNjOTMsIDB4Y2ZiZWZjYzEsIDB4NDY3ZWEzNmEsIDB4ODg2NTY5OWQsCisJMHhiOTg1MmNmNywgMHhkMzJlZTkwMiwgMHhhMWFlMTBkNywgMHg4OWEzZGZjOCwgMHhiNjFlNDA3ZiwgMHg1MmMzNzhlMywKKwkweDgwMDM1NGFhLCAweDEzYWNjNzEyLCAweGRlYzY3NzU4LCAweDVkYTlkYWI2LCAweDNlZTcwOGU2LCAweGQzYWIzN2U0LAorCTB4MjA3Y2YyNDUsIDB4MmJlNTRhYzIsIDB4YzA3ZjM4MzMsIDB4ZmM0MDdmZjcsIDB4MmVkM2NiMDUsIDB4N2UwMWEzOTQsCisJMHg3ZTQzOGEzOSwgMHg4ZmM4ZWM4YywgMHhiY2YwMTNiZiwgMHg2M2E1ZTQyZCwgMHg2MTNmZWVmZiwgMHgzYWNkNzFmZiwKKwkweDBjOWQwMmE3LCAweDY1ZTkxMjNmLCAweGEyZjg3NGQwLCAweDhmZTExNTJhLCAweDAwZmZjMDYzLCAweDM1OGU2ZGEwLAorCTB4YTUyY2U1MDcsIDB4NWQyMGExY2MsIDB4ODc1YzIyOWIsIDB4MjMwZmQ0YWQsIDB4NDczMmI5YmQsIDB4ZWY4NmFkZTcsCisJMHg4OTNiNDZlNiwgMHgzZWQ4ZGY3ZSwgMHgzNjY2NjdlYywgMHhjMDFmNmZjYywgMHhlMTE1ZmMxZSwgMHhiNmIwN2IwMywKKwkweDZmZjRmNTA4LCAweDNkNDQ2OWZmLCAweGQ3ZjI5NzZhLCAweDM4YTIyNDM0LCAweDQ4YWUzZjgwLCAweGY3YTdlMGJkLAorCTB4NDEwYmQyNzEsIDB4NzNkNjBlZjQsIDB4ZWJmNmY0YzEsIDB4MDM5ZWFkMDUsIDB4ZjRlMDVkN2MsIDB4OWYyMjY3NzAsCisJMHg1MjJmMzVjNSwgMHhlYWQwN2ViOSwgMHhkMWU4Y2ViNSwgMHgzYTA4M2Y0MSwgMHg3ZTcwOGE1YywgMHgwYzVjZjg4MSwKKwkweDdhZTM4ODMyLCAweDU4M2ViMzQ2LCAweDBlMWQ5OWRlLCAweDc2YTQ4OThiLCAweDFjM2I0NWZmLCAweGQxZGYxMzE2LAorCTB4YWRjY2ViMGUsIDB4NDdjMDE1MDcsIDB4NTc2YTgzNzksIDB4OGZkNTBhNjEsIDB4ZmY0ODljZDksIDB4ODcxNGViMTcsCisJMHg0MWE0ZTUwOSwgMHg3MTc4N2UyNSwgMHg0YmQ5Mzg2NSwgMHhiYjY3ZWYwOSwgMHhkYmIxMDdhMywgMHhjZmYyMTUyMCwKKwkweDhlYzlkZGRjLCAweGYxODhjNjU2LCAweGYxODc5MGVkLCAweGQ2Nzk1OTJmLCAweGM1Mjc3NTY4LCAweDE3OTNlODA0LAorCTB4NDMwOGJlMWIsIDB4NjQ0ZmY3M2MsIDB4NjJjNjRlMDMsIDB4MGVkNmE3MGIsIDB4ZjAyOTA4ODMsIDB4NTM3ZjA5YmQsCisJMHg2YjgzYWYxMCwgMHg2OWFjMTQ1NCwgMHg5NTI2OWRlZSwgMHhmYjFkZDZlOCwgMHhmZTVhY2UxYiwgMHhiZDcwMGQ5YywKKwkweGNlYjQ2ZGJjLCAweGY1MzdjODFkLCAweDA1ZWM2NzU3LCAweGI4MjMyYmY4LCAweGY3YjRiZTVkLCAweDMzZTQyZjVhLAorCTB4OTJmNzdmNTksIDB4M2Y3YmQyNjIsIDB4MTMxOTJiMDcsIDB4ZWVkZjFmYTAsIDB4NjFlYjgyNzMsIDB4ZDUzZDY4NTYsCisJMHgyYTc2ODcxZiwgMHg4NTAwMjNkNywgMHg3YTNlZTY1MSwgMHg3MGQ0MjdmNCwgMHgyN2Y1YWE4NywgMHg3YmFhMzk4OCwKKwkweDdmMTA3ZTAyLCAweGJmODRlMThkLCAweDc3MjA5ZWVhLCAweDQ4ZTcwNDE5LCAweGM1YmY3ZmVjLCAweGZjYTA5MmM4LAorCTB4YjYyM2M4MGEsIDB4MDM3ZjcwOTMsIDB4ZTIwNzQ3NzgsIDB4YWE2ZjBmZDEsIDB4ZTA4NDU0ZjUsIDB4NWYwZmQ1MGIsCisJMHgwZTkwNWQzYiwgMHhkMTZhYmZkMCwgMHhiMTJlM2NkMywgMHhiM2QyMDc3MCwgMHg0ODY0ZThjZSwgMHhlMTUxY2Y3ZiwKKwkweDU1YmEwODFmLCAweGQ0YmI5ZTA4LCAweDFiODhmNDMwLCAweDkxZTJmN2U2LCAweDdmN2UwNzU0LCAweDk4NGFmZWE5LAorCTB4NDZmZDEyMmUsIDB4OTc5YzE0ZjcsIDB4ODUxYWQ2OWEsIDB4YzM1ZjcwZjYsIDB4MDMyZGJlOTUsIDB4YzU0ZGJmNDgsCisJMHg0ZTg3MmJmMiwgMHhiZTAzZGNkOCwgMHg4NDY2ZmNkMSwgMHg3ZTc2ODdhNiwgMHg5YWM4ZmE5NSwgMHg2MTUwZmY0MCwKKwkweDdjYzE3ZTdjLCAweGZlMzQzNGE0LCAweGYyNDQxOTRiLCAweDdhMWY1MGM3LCAweDFhYjc5OWQyLCAweGEwNzJiZGU2LAorCTB4OTk3YmE3ZTAsIDB4OTgzZWU1MWQsIDB4YWJhYjQ2ZGUsIDB4NmU0MDI2MjIsIDB4YWFlZDE1ZmYsIDB4OWM3MGI4NDIsCisJMHhjZjM0MjE5NCwgMHg3NDFmOTg4NSwgMHg0MWE2NjY3OCwgMHhjMzFiZjM4NywgMHg3ZjRhNmVkMCwgMHhiMGVmZmQwZiwKKwkweDRlZmY3ZTIxLCAweGZlN2RhZmNlLCAweDNhMGRhZjNkLCAweDNmYmU2OGM0LCAweGY4MDA3MWM2LCAweGFmODAzYWU1LAorCTB4ZWFjMThjMTIsIDB4ZmI3OWMwOGMsIDB4NjJlNTFlODgsIDB4NDhlNmU1N2UsIDB4NjFmMzBhOWYsIDB4NWExNzBjYmIsCisJMHhkNmU4MWVhNCwgMHg0ZmEwN2UxMSwgMHgxOWU3YzIwZCwgMHg0NmUyMzhlZCwgMHhkMjM1ZmVmYSwgMHhkMWY4OGQ1MSwKKwkweDVmZDE1YjM3LCAweGM2YWNmOTg1LCAweDI4YTIzNjdhLCAweDJmZGZlNzExLCAweGY1MDViOWQyLCAweDE4Y2I0YmZjLAorCTB4NTdhNWYzZjEsIDB4NGMxMzc3OTgsIDB4MWQ3ZWZiNzYsIDB4ZDY0NmNiZjEsIDB4OWZiZWY4OGYsIDB4NTcwY2YyZWUsCisJMHgzYWYzYzkyNCwgMHhiOWFiM2I4NCwgMHhiNzdhODc1NiwgMHg0M2FlZDdhNywgMHhiOWI3ZGE3ZCwgMHgzZTIzYTc0ZSwKKwkweDg2MjJmZjcwLCAweDU3OTllNGZjLCAweGZmNWYwMGY0LCAweDM3ZWE1NTZkLCAweDY4NmYwN2U0LCAweGFmNDBlZjdlLAorCTB4OTJmNDgxY2QsIDB4N2MxNmNiNzgsIDB4NDM3ODhkOTAsIDB4YmZhYWQwODMsIDB4ZTNmNjYyZDAsIDB4NTJjM2U4MGQsCisJMHg2M2ZiMWQ2YywgMHhmMTFkMjVhYywgMHhlOWZhZjhkNCwgMHg1ZmQwMmQ1ZSwgMHg2N2E3MWJjNSwgMHhmZTJhNWUyMCwKKwkweDE4MjYyMjYwLCAweGQxYmU4N2YzLCAweGU1OWZlZmM4LCAweDJlNjdmNjg0LCAweGU4NzJhZDJjLCAweDI1N2E5ZmMxLAorCTB4ODVkOTFiYTYsIDB4NDQ2Y2Q2MzIsIDB4NmViY2ExM2YsIDB4YTAxZjQzODEsIDB4NzZmZmE1Y2YsIDB4OGY5Y2QwYzgsCisJMHhhYTFhMWZmZCwgMHhlNzgwNjViMiwgMHg1ZGUxOGUyYiwgMHhkMTNiMDg1OCwgMHhiZmExMmZlZSwgMHg0NzJmYjAwNiwKKwkweGFmY2YxMWQ4LCAweGZmNzM0NTY3LCAweDIwZjY0NmQxLCAweGE1YTFmZGI4LCAweDdhNjMxYzczLCAweGExZGZkZTc0LAorCTB4YmRkMzYxYzEsIDB4OTA3ZTdkZjAsIDB4ODYzNDc0MWYsIDB4MThiNmI1ZGIsIDB4MjE0MTg3NmUsIDB4OGJjZTExM2IsCisJMHgzZDc4YjdiZiwgMHhjODcxNzQ1MCwgMHhmZDBjNTE0NywgMHg2NDFmNWRjYywgMHgyZThmODA3YSwgMHhmZTQ3ZTZiMiwKKwkweDM1NzY3Mjg4LCAweGY5NzFkNjkyLCAweDVjY2EzZjgzLCAweGU1Y2JmMTY2LCAweGRjZjgyMzFkLCAweDcwZWQ3OGVmLAorCTB4ZTdkYTFkOTQsIDB4ZTcxN2RmNmYsIDB4MWRkZmMwMDksIDB4OWRiNTdmNGMsIDB4NWM3MDMzYWYsIDB4N2QzM2UzNDYsCisJMHgwN2E0MmY0YiwgMHgwNGQ5ZTNmYiwgMHhhZmY5YTQzYiwgMHhmOWM3MTViZiwgMHg3NDg3NDEyMCwgMHhkYmY0MjQ1ZSwKKwkweGMwMjhiMGVmLCAweDUyNWZjZWRmLCAweGYzMjQ3YzQxLCAweGU2NjY2ZGU1LCAweGViYzgwZDhkLCAweDA0Yjg4ZDliLAorCTB4NjQ4YjZmMmUsIDB4MzdiNzY4NWUsIDB4N2E0NzEyYzYsIDB4YTMyNTk5MjYsIDB4NWYxNGU5OWUsIDB4ZTBjZjg5MzcsCisJMHg0M2NmODk3MiwgMHhhM2E2Y2Y4MywgMHgyNzU5ZjE1ZiwgMHgxYjZmNzBmZSwgMHhmN2NlZDc2ZiwgMHhkNzRmYzE0YiwKKwkweDdjZWZmM2ZiLCAweDBhZWMzZWE1LCAweDhkODQ1ZGYxLCAweDYzOGFlOWQzLCAweGY3ZjQxNzY0LCAweDFlYmU4ZGYyLAorCTB4ZTRlZDEwZDYsIDB4NGYxODMyZmEsIDB4OGQyYjVmNmYsIDB4ZGY3ZjdlYzAsIDB4MDUwYmNhNjYsIDB4ZmJhNmRlOTcsCisJMHgyMWNhN2U3NiwgMHgxZmMwMmE4MCwgMHg1M2JhYTZkYywgMHg5YzFmYzI2ZCwgMHhiZThhZjkwYywgMHhiYWQxYzY1NywKKwkweGQwOGJmMjVhLCAweDRmMzA3NzdiLCAweDMwNmZjYTIzLCAweGY3N2E0ODdmLCAweGZhZGQwMWIwLCAweDI5NjY3MmEzLAorCTB4MzE4YmI3NDgsIDB4NDIzN2NlNzYsIDB4MDQ3Y2E0MWUsIDB4OWQzODMxZTMsIDB4NTBlZTY0NjAsIDB4NjJhZjgwZWIsCisJMHg5OGMzNWUyNCwgMHgyM2UxZjQwNywgMHhkZjY0MGQxYiwgMHhmOGZiNWYwZiwgMHhmN2UwNGNkZSwgMHhkNjBjMWJkMywKKwkweDljZTQzMGU1LCAweDNlYTVmNjE3LCAweDA2NzNmNTAzLCAweGU0MGFhYzliLCAweDNkN2RkYjRmLCAweDVmNGJlZTUwLAorCTB4MGZjODVkNTAsIDB4OTIzYzM3YTcsIDB4ZjNkMjEzMzAsIDB4MDA2NWJmMjAsIDB4MDM0NmU5NDcsIDB4ZjhkOWNmOTUsCisJMHgxNTlmOTUyOCwgMHg0MmZhNWQ3MiwgMHg5N2Q0N2Y3YywgMHg0ZWFmZjc4NywgMHhmOWNlM2E0MCwgMHg0ODY5ODllYSwKKwkweDZiNDZlZDk3LCAweDk2OTBjMWZmLCAweDYzMWM1MzZkLCAweDZmM2RmMDAyLCAweGJmMjY5ODczLCAweGUwZTZjNzVkLAorCTB4OTk1ZDI0M2MsIDB4NDdhZjZlZTIsIDB4YTZkNTNmMTMsIDB4MWY3MTc2ZmIsIDB4MDRkZmQ2OWYsIDB4YTBhYTcyZmYsCisJMHgzMDI5YzRlMywgMHg1N2ExOGFlZiwgMHg3N2RmYWZjOCwgMHhjOWVjOWMyMCwgMHhmOTJhOTE5YiwgMHhmZmMxYmU4ZiwKKwkweDIwZGI5ZGVmLCAweGRlOTVmYjlmLCAweGEwOWRiZTQxLCAweDY3NDE1OGYzLCAweGI3YTQ1Y2IwLCAweDlmM2NjYzRiLAorCTB4ZmM5ZWJhZmIsIDB4NGE4YjVjY2YsIDB4OTFmNjg2ZjgsIDB4N2JmZWExNjMsIDB4ZjQwZmJkYTIsIDB4NTMyMWNhMmMsCisJMHg4NDhkZDdiMywgMHgwZGEzNjM3NiwgMHhmN2QwZWQwYywgMHgxOWYyZjM3YywgMHhkYjNiYzlkOCwgMHgwMjViYzdmNCwKKwkweGQ1OWEzM2U2LCAweDM4N2Y0MWY2LCAweGNhODIxOTg3LCAweGNmMmM3YTlkLCAweGM3Y2I2YjM1LCAweDJjZmJiOGY2LAorCTB4YWQ2MzBmZmEsIDB4NzdjOTcyZGEsIDB4ZmFiNGQ4OGYsIDB4NzM4MWRmNjIsIDB4ZjMwMDliM2YsIDB4OTJhNDM5MmIsCisJMHg3ZDIzN2NmZiwgMHhhZmMyMmVmYywgMHg1ZGJmM2E0NywgMHgzYmJlMGRiOCwgMHhmODcyYjAyYywgMHg0OTE1ZTlkYSwKKwkweDE0MjM1N2M4LCAweGQzYWNmMTg2LCAweGUzY2I0MmQ3LCAweDY2NWVhNDFmLCAweDdlM2VkZjQwLCAweGU2MzgxNmZhLAorCTB4ZGM1MWU3YjYsIDB4YTBiMTE5ZWYsIDB4ZGZmMDhmM2QsIDB4N2FmYjFlYmMsIDB4OGQ5Yjc1M2QsIDB4ZWQ4MjMzYzcsCisJMHhmY2RjYjA0NiwgMHhmZTQ2ZWNiNywgMHgzZGQyYjdlMCwgMHg4MzdmNGExNiwgMHg1Y2VkODVlOSwgMHg4OWViMDZlZiwKKwkweGUxMjEzYjYwLCAweGJjYjc4NjBhLCAweDBmYjFhNzRkLCAweDE5MWVhMTVmLCAweDhjMjc2ODFhLCAweGMzYmUyNzY0LAorCTB4NmQ4MzcwZjUsIDB4MzBmNWM3NjgsIDB4MmY4NDMxZjgsIDB4YWQzZDMwY2YsIDB4NmFkZmMxYzMsIDB4MjIwMzc2YzQsCisJMHgwMDM5YjFlZCwgMHhiNzZiMGFkMiwgMHgxNjdmYjIwOCwgMHg0MDViN2VmNywgMHhiNmZmYWExYywgMHg4ZGVhMWQ1YSwKKwkweDQxOGNmOGY2LCAweGViOTFhNzFiLCAweDlkODQ3N2Q1LCAweDFjZmExM2E4LCAweGNlYjRhYmQ2LCAweDRlZWUxOGRmLAorCTB4YzliOGUzZDQsIDB4OGM5NmM3NDYsIDB4NDhmOWY4OGUsIDB4Y2ZjY2VmYjQsIDB4YmVhYzdlOTUsIDB4OGZiMWZiODYsCisJMHgzODlhNWQ1OCwgMHhhODkzZWIxOSwgMHg1ZmEyZmI4OSwgMHhkOWVkZjI4ZSwgMHhmY2YzNGUxYiwgMHg0MjBkNzE1NCwKKwkweGU3MzNkNDM5LCAweGY0MDE2ZGRmLCAweGY4NzAzNmE5LCAweDhmODllMTgzLCAweDMxOTI3NmU1LCAweGIyMDdmOTE3LAorCTB4ZDBlOGY2N2MsIDB4ZDU4OTVjN2EsIDB4Njc5Y2ZiNTMsIDB4ZmY0NzRmZWYsIDB4MDdjNmQzZWQsIDB4N2ViZjUxZDIsCisJMHhlZGU3MTQxYSwgMHgxNjllMWU0YywgMHhiMGE0ZmFmMiwgMHgyZTIyMzEyMywgMHgxMWNhMTRmMCwgMHg5ZGRhNDFlNCwKKwkweDU1ZmJlMWRiLCAweDU3MjQ1ZDRiLCAweDlkM2E1ZDNmLCAweDJlOTY2N2QyLCAweGI2MTNmYWExLCAweDlhZGYxYTBjLAorCTB4Nzc1NzY3ZjMsIDB4MzVjOWQzYzAsIDB4ZDk4OWQ5MmEsIDB4MThhZjU3NDYsIDB4NTlhNGVlZjgsIDB4MTM4NWYxNDcsCisJMHhiYjc5OTE1NSwgMHhkMTljYjEyMiwgMHhiM2Y2NzI3YSwgMHgwMjc4YjYxMywgMHg2YzI3N2VlMiwgMHg2NzQzYTI3YSwKKwkweGZkOGY4Y2YzLCAweDljYmRmYTY2LCAweGJkYTE0NGI1LCAweDIzZDdlNzZhLCAweDJkYjVlYzFkLCAweGFjN2ZlMzE2LAorCTB4NTVkYjAxMjUsIDB4YjZiZGNkMmEsIDB4YjdjNzFkMjksIDB4MmM3YzY3MzIsIDB4ZjU5MTk3ZjIsIDB4MGJhOWI5NDcsCisJMHhiODI4ZjZlNywgMHhlNzJjNGE1ZCwgMHgxZmExYmZjMywgMHg4YTdlZmQwYiwgMHg5ZTg0MmI3NiwgMHgyZjNhMGJiMSwKKwkweGIxZWQzOGI0LCAweGM5MjJlZmE0LCAweDgxYjgyNzVmLCAweDcyOGNiZTVmLCAweDYwYjg0Nzc2LCAweGQzMTNkNjVkLAorCTB4N2M3ODVkNjEsIDB4MmFjNWIxNmUsIDB4ZjBhOWMzZjgsIDB4NWZhYjhlNzUsIDB4NWJmODg4NmMsIDB4NjA5ZWYxNjcsCisJMHg3ODExZGUzOCwgMHhjOTAzOGUwZCwgMHg4NjgxYzY1NCwgMHhiY2Y5ZjJjNiwgMHhlMjZhYjM2ZCwgMHgwZWZmMTg0MiwKKwkweDc5ZjlmZjE1LCAweDFiYTNkNzJjLCAweDJhM2M1YmMzLCAweDdjMDNjM2NhLCAweGRiMjVkZTNkLCAweDJiN2M2MGEzLAorCTB4MDczNmJmMjUsIDB4YzU3NzVmZTMsIDB4MmRhNWI4ZjIsIDB4ZWI4ODlkY2YsIDB4YTM0NGU0ZjYsIDB4MzczNmUzMDMsCisJMHhlYTAzOGYyYiwgMHhjMDVmN2M5YywgMHhkNjM4MjNhZCwgMHg3YWMyN2IzNywgMHhjZDA5NWMwMSwgMHhhNDIzMWNlZSwKKwkweDBkMzE3MTUzLCAweGFhYzJlZGY4LCAweGEwZGQyMTk2LCAweDZiMjMyMTFkLCAweDkxNTdiODdmLCAweDkyNjg2YzhiLAorCTB4NDAyOGY0MjksIDB4Njc3Mjg2MWEsIDB4NDU0ZjcyOGMsIDB4NTU5YjBjYmEsIDB4ZmE3MThkNTUsIDB4ZmZiZTMyOTQsCisJMHg3NzcxNTY3MCwgMHg5YzlmMDFiNSwgMHhhNDNjMmI3ZCwgMHhlODIyNWMzZiwgMHhjOWQxOTRjZiwgMHgzNmIzZmE2OCwKKwkweGFjYWUwODFiLCAweDgxOWYzZmNkLCAweGY5YjU5ZjdjLCAweGEwMTJiZDJlLCAweDFhYzc5Njg3LCAweGRmNjdmZTY4LAorCTB4ZTI5NWQ3OWEsIDB4NTg5ODlmMTYsIDB4ZWE3YTEwY2YsIDB4MWU1ZjgyODcsIDB4NjlkODc0MTAsIDB4OGI3ZmNkMGMsCisJMHhhYzZmYmI0NSwgMHg1NTQwNWJjZiwgMHhlMmY5ZjU2OSwgMHg1YjM4ODBkOCwgMHhkMjY1Zjk0NSwgMHhlZDYzOTNlNywKKwkweGZhZjNjZTM0LCAweDgwYzkwM2JhLCAweDMxNjdlN2NmLCAweGU2OGEwNzg3LCAweGYxNDhkZDZkLCAweGJhYzY5ZGQ3LAorCTB4ZTRlZmI4ZjEsIDB4YTQzMWQwYTksIDB4N2YwM2ZlZmIsIDB4N2U4YzkwMzgsIDB4NjBmYjJjZTQsIDB4YmZkYTIzZjQsCisJMHg0YWQyZjQzZiwgMHgwZTdlN2YyYywgMHg0ZmY4OGMxYiwgMHg2MGFkM2VmMiwgMHg2MTlmZTYzYywgMHg3ZmFmODRiNSwKKwkweDY1YjEzMTZlLCAweGJmN2RiNzE4LCAweDIxMGZmYzZlLCAweGM3NGNiZWJmLCAweGNmMDRiZjUwLCAweGU4MzI0NjFiLAorCTB4MTlmNTMxMTIsIDB4ZmQzODIzNzQsIDB4YmE0YTBmNTEsIDB4OTExOTAzMDMsIDB4ODg2ZTkyMWUsIDB4ZWU5MGVkYmYsCisJMHhjMTFhZjJkZiwgMHgyYTlhZTEyZiwgMHhiNmYzZGVlMiwgMHg3YzhmMWY2ZSwgMHg1MzY2NWM5MiwgMHhlMTIwNGUzMCwKKwkweDc5M2Q5MWJhLCAweGQ5ZGJmNjMxLCAweDBlZDBlZjkzLCAweDIyMWIxMmJmLCAweDBlYzIxZDJlLCAweDYxMGQ4OGVmLAorCTB4MmZlZDgzODcsIDB4NjM3NzM4YjMsIDB4ZTFkOTFiYmIsIDB4MzZmZjgyZTEsIDB4N2ZlZDA2YzYsIDB4MDg1OTdlZTAsCisJMHhlZDhkMGRiYSwgMHgxZmRmMGYxMCwgMHhlM2ZmNjIxYiwgMHhkZWYwZjE0NiwgMHg0M2ZmNzJiMSwgMHhjOTdmMGYxYiwKKwkweGFkNmZmNWM4LCAweDI5M2MzZDhkLCAweDEzNzRiYzg0LCAweGI1ZDZlYmUzLCAweGM2N2VkMTFhLCAweGY1MjEyODM1LAorCTB4NTE4YjYyZDksIDB4MWM3ZTFmZWUsIDB4MTI1ZmIwMWIsIDB4ZTA0MzhmYWMsIDB4ZWZiNjI4ZjcsIDB4MTdiN2NkYmIsCisJMHhlOTg5MGQ1YiwgMHg1YmVlODExMSwgMHhkZWIwZWJiZiwgMHgyOWNlMzEwZCwgMHgyMmZiM2Y4MSwgMHhmNmE2ZmI0NiwKKwkweDBhZmE0NjJhLCAweDE0MWU1ZWYyLCAweDM3MTQyOWY0LCAweDkzNGYzOGIwLCAweGJlYzFiYWRkLCAweDFjZDY5ZGQ1LAorCTB4M2VlNDgzZjIsIDB4ZDZhYjU0ZDUsIDB4OTM4YjhjNGYsIDB4MjM5ZjljZWQsIDB4ZDg5ZDY5OWMsIDB4M2MwOTdmODksCisJMHg3MGRiZmNjMSwgMHg0YzQ1YjhkYywgMHhmNzIzMWZiMywgMHgzY2FhZTI2MSwgMHhjZDBiMzE4YSwgMHg2YWY4YTMxMSwKKwkweDMyZjc1OGQ3LCAweDFkNmJiNDAzLCAweDIwOWIxY2M5LCAweGNkNjg1ZDFmLCAweDliNmE3ZDQxLCAweGZkYzQ2OGUzLAorCTB4NzkxNzk1OWEsIDB4MDJlNTdlM2MsIDB4ZmQ0ZTVkZTYsIDB4NzczMmY5ZjAsIDB4MTdjYTJmMzcsIDB4MmUzMDJkZDIsCisJMHhlMWM3MTExMCwgMHg3MmUzODg4OCwgMHgxY2QyNzYwNiwgMHg4ZjBhZTFjNywgMHg5MjkzYjAwYiwgMHgzZTc1YmExZSwKKwkweDFhZGFlODk1LCAweGQwMDU0ZWRhLCAweDc3ZGY0NmQ1LCAweDUwZWZkNzQyLCAweDM3NzFlZDJlLCAweDhjZjcxZmU3LAorCTB4MTliZTA1YmIsIDB4N2M3Mzc3MTgsIDB4NGI0YzE0ZjMsIDB4OGYwNGRmZWMsIDB4MGZmMzg5OTcsIDB4MmNmODBmMWUsCisJMHhmODI2ZWUyYiwgMHhlZTJkZWFlYywgMHg1MDg4MWU4ZiwgMHhhNWRjNWRiZSwgMHhjNDI3NWUyMywgMHg2Yjc3ZDA4NSwKKwkweDQ4N2Q3NWYyLCAweDQ3NzBiMzVmLCAweDIzM2FiYjI4LCAweDdkYmZmMjJlLCAweGEwODY2NDVlLCAweDE3OWQyZGY3LAorCTB4MmQyN2YxNzksIDB4ZGNiM2E0NDYsIDB4MDZmMDkwZjcsIDB4ZTU5MTEzOWYsIDB4MjY0YTBkMTUsIDB4ZjY3MzNmYWUsCisJMHhjMDc1YTM1ZCwgMHhkMzdmYzZhNSwgMHg3OWUzYTAzYSwgMHg0MmVlM2UwZiwgMHg2NzgwMDNlNCwgMHhjZWEwM2FhYywKKwkweDc5NzdmMjA3LCAweGVhNTY5MTliLCAweDIyZmZiMzJhLCAweDRkZjZlMzFiLCAweDUzYjVlNjA2LCAweGVmYjYzMzdiLAorCTB4N2VmYjc4YzcsIDB4NjMzNjU2ZGIsIDB4ZDMxZmFhZGMsIDB4NTQ3YWM0N2IsIDB4YThmZGNlYjksIDB4N2VlMzk0NjgsCisJMHg4ZDViMmE0ZCwgMHhiZWJjYWRmOSwgMHg2MTk3OTk4YSwgMHg4NDdhM2E1YywgMHhmMDAzZDk4ZSwgMHg2NzBjZTMxOSwKKwkweGM2N2MwMGY2LCAweDc5MzRkOWU2LCAweDJmOWU0ZWI5LCAweDI1Nzc4ZGM2LCAweDMyZWZiZTZiLCAweDdkYTY5YmJkLAorCTB4YTY5ZmJiOTIsIDB4MTBjZTY1M2UsIDB4NmFhZDNlNGQsIDB4NTc3ZGE2OTQsIDB4Zjk4MWNmYjAsIDB4OWFkZGNmMGMsCisJMHgyNjZiZGRmNiwgMHg2YjNkZjI2YiwgMHgzZmI0ZDAxZiwgMHhjZDllYWFjZCwgMHg5YzdhNzljNiwgMHhjZTAwM2RjZCwKKwkweGRlY2UwMjU5LCAweGRmMzU4YmViLCAweDBkZDVkN2Y1LCAweGY5MjBhMWYzLCAweGZmZWUxZjE0LCAweDMyNmMxNmNkLAorCTB4ZmE3M2M0NGIsIDB4ZmE2OWU3N2EsIDB4NWU2YWZmM2QsIDB4OWRmODAyOTMsIDB4MTkzODZiNWQsIDB4N2MyMTlmMTgsCisJMHhlYTRiN2UwMCwgMHg4YzFjZjYxNSwgMHg1YjVlYmE1YiwgMHhlOWUxYTczZiwgMHhjZTkwMjk5NSwgMHhlN2NiNmFmNSwKKwkweDgyOWNiZWUxLCAweGRmMmRhZGZjLCAweDgyM2Q3M2FkLCAweDcxZWQ5ZGViLCAweGUyMjhjZTIyLCAweDdmMDNhYzNkLAorCTB4OTdiOGQyNDQsIDB4OTc3OGYwMzcsIDB4YzQxZGU5ZWEsIDB4YjEzYTVhMWYsIDB4NzYyZmM5NmYsIDB4NDRhNjJmYzEsCisJMHhkOTg0YmYyZCwgMHg3YTUyZmNiNSwgMHgxZjMwZTc3MCwgMHg4OGZmODhlYiwgMHhlNDdjNDEzZSwgMHg3ODAxN2Y4MSwKKwkweGY4OTVmODk3LCAweDdjYjQzOGI3LCAweDlkZTE1ZGY1LCAweGRiOTFhZjMxLCAweDNmZjk2ZDBkLCAweGI1ZjFiNGUyLAorCTB4ZTNlZTkxN2UsIDB4ZDRhZWI3YTgsIDB4YmY3MTUyMmYsIDB4N2RmMWU1OGQsIDB4NTdmNTJiZmIsIDB4NmJiMjFkMDcsCisJMHhkYjNhZDdmNiwgMHgxNzE3M2E0ZiwgMHhmYjE3NTcxOCwgMHgzZjcwOTc0OSwgMHgxMzc2MzZmMSwgMHhmZWZiODlmYiwKKwkweGQ5MDBmODg1LCAweDFmODAxYjc3LCAweGI5ODcwOGQ4LCAweGNjMzBmZjdkLCAweGFjMTQ3ZmJmLCAweDc2MGE2NTM3LAorCTB4YjIzOGNiZTMsIDB4ZDc3ZGZlMjcsIDB4NTg3YWY4NmEsIDB4MDg1YzVmZjQsIDB4OTM4N2RjYWYsIDB4ZjllNDcyZTcsCisJMHhlN2M5MTYyMSwgMHgzYzAxZmIyOSwgMHhmMTQzZjFhOCwgMHgwMjJkOWZmYywgMHhmN2RiYWRkNywgMHg5NmY1YTQyZiwKKwkweGM0YzQzZjNjLCAweDdlMTBiZmI5LCAweDNhZWZlOTNmLCAweGZjODkzNWZjLCAweDZlNzhmMDgxLCAweDZkMzEyM2NmLAorCTB4ZjljNDA3ZjcsIDB4M2JjZjY5MmUsIDB4YjdlZTQ3ZWIsIDB4N2IyYTk2NzUsIDB4NmMzZmRhNTUsIDB4OWIxZGMyNTUsCisJMHg1ZTkzZDg0MiwgMHhmZDcyZGZmMSwgMHgxYzQzYTY3NSwgMHhlMDdjNTdiYSwgMHgyYmQxZWJmYSwgMHgwMGFlZDAwNywKKwkweGI5NjJmYmRlLCAweDVhZjYwMmM1LCAweDVmZWJkYmYxLCAweGJmMTE0NDQ0LCAweGJkNTQxZWI2LCAweGIyZTBhMWJkLAorCTB4MDM2ZDFlZDksIDB4Njk4NDM2M2MsIDB4YWI0Yzg4ZWQsIDB4ZjQwM2M5Y2MsIDB4M2RhZjU4YjEsIDB4MTFmNzI3ZTcsCisJMHg2MzY3ZGI4MywgMHgyN2ZkODBmYiwgMHg4ZmUzNGVmOCwgMHhmZGMyMWNhYywgMHg2ZTc4ZWNiNSwgMHhlNDg4YmZkZiwKKwkweDkxMTRjMWZlLCAweDE3NWEwY2FmLCAweGJmNzBkNjU1LCAweGU5ZjgyMzZjLCAweDRjZmQwMTBkLCAweGZiNTBiNzg5LAorCTB4NTMzOTExYTUsIDB4YzA4ZTI5ZTIsIDB4MzMyYmJiZDcsIDB4NTYyN2YyMTQsIDB4MjFmOTBhMmEsIDB4NTM0N2EyNjcsCisJMHg5Y2I4YjVmZCwgMHg2MjNmYzRjOSwgMHhiYmU4Mjk5YywgMHg2ZWRhZmZjMSwgMHgzOGJiMWUxYywgMHgzN2ZiMjM4ZiwKKwkweGU2ZjZmM2M3LCAweDRlOTRkMWY4LCAweGI4OGFiNzg5LCAweGYyMWZiNWIzLCAweDkzODQ2NTQ3LCAweGExYWEzNWZhLAorCTB4YzdhNmE1ZjcsIDB4YjVhZDc5ZjMsIDB4NmEyN2U5MzAsIDB4ODRlM2ZlZTIsIDB4YmYzOGM0ZGUsIDB4ZjlhM2ZiODksCisJMHg3MWZjMTM2MywgMHg3ZjY2YTY3ZSwgMHhmMTEzOGM2OCwgMHg3NzNlODU3ZCwgMHg1M2JhOWVhMiwgMHg3OGIzYmRkMCwKKwkweDc1OGZiM2JmLCAweDc1Mjc2ZTNmLCAweDEyZmJmNzhjLCAweDFkZmJjNjQzLCAweDBmZGUyOGUzLCAweDVlNzFlYTVmLAorCTB4YTQ3ZjcxYzEsIDB4MmZjZDg0NDMsIDB4YjdjNDhmM2YsIDB4ZDQ1NDgzZGIsIDB4Nzc0NmY1NGYsIDB4NWFiYmFlMzUsCisJMHgwZWZmODM3NywgMHgyZGJjN2RjNSwgMHhmMDMwMWZiNCwgMHhhZTA3Nzc1MCwgMHhiMDY2NTZhZiwgMHhiN2U0MTZiZCwKKwkweDdmYTE4YzY1LCAweDViYTJkZjVmLCAweDZiZjUwNjFlLCAweGY1OGFjYzNjLCAweDc1ZjAzNzIzLCAweGJiN2FlOTViLAorCTB4ODA2OWE3MDMsIDB4ODg2NWIwNzUsIDB4OGJhYzFmNWYsIDB4ZDdiYzIxOGYsIDB4YzQ2ZTRjYjcsIDB4ZjczNTgxZmQsCisJMHhhMTlhMWIzMiwgMHgxYjliNTY1YSwgMHgwNmQwZmU4NSwgMHhmOGRkNzIxNiwgMHgwOWIzOTA5NCwgMHhkNDU1N2IzOSwKKwkweGRmZThmMTE3LCAweDUzZDNhMDg3LCAweDBmYTA0ZTgyLCAweDg3OWQyMmQ2LCAweGYwYWZiYWI3LCAweDRmYWUzOGZkLAorCTB4ZmFlMjI1NDgsIDB4MWJjZWJmNzQsIDB4MzczZjNkNmEsIDB4ZjIxZDc3M2EsIDB4ZTg2ZjQwYzEsIDB4MGI1YWMzZjUsCisJMHgxMTc1YjdlNywgMHhkZGE4ZTdhZSwgMHhiNWVlN2UyZSwgMHg1OWRmZWE1NCwgMHhiYTA3YTYzYSwgMHg5ZDc0MTE0ZiwKKwkweGRmOWY4MWIyLCAweDVmYWVkNzYwLCAweGM4OWZhNTU3LCAweDdhODY3ZmE4LCAweDhiNWVmNGE1LCAweGE1NDNlMzE3LAorCTB4ODIxZTE5MGQsIDB4N2EzOGE1Y2IsIDB4Nzg2OGJlYTIsIDB4ZDJmOTg1ZGYsIDB4YzYyYjJjYWMsIDB4NjU3ZjljMjMsCisJMHhlNDNlYTljYSwgMHhiZmFlMzI2MiwgMHhkNDk0ZWNmNCwgMHhlM2M3NjQyNywgMHhiMjY5ZGY2OCwgMHgxNmI1YjdlMCwKKwkweDBkNDczZjNiLCAweGZjMDA4ZTI4LCAweGI2NTg2ZTk3LCAweDdjZWZjZjE3LCAweGZiNDY2YmY0LCAweGQ2ZDQ0NzRiLAorCTB4NTRkOWQ4NjEsIDB4MjE5MmNlNDAsIDB4MjE1OWVhOTgsIDB4ZmVmODJiYzUsIDB4MWZhMmJkZDUsIDB4NWM2MWJmY2YsCisJMHhhOWRjN2ZiMywgMHgzZTY5MDcwZCwgMHg2M2NjMGM0NywgMHhiNGJhM2UwNiwgMHhmYTNiM2VlNywgMHhjZGUzMmJkYiwKKwkweGZiOTNjNzE0LCAweGY3NTU0N2IyLCAweGY0ODQ2NGUzLCAweGRhMDgxNWFkLCAweDU2MTEwZGZkLCAweDQzZmM3ZjhjLAorCTB4ODI0NjVkZjAsIDB4YzdkMjFmN2IsIDB4MDU3YzdjYmQsIDB4NjU5NmMxZGEsIDB4YTNjNDc0YTYsIDB4MWE5Mjc5N2IsCisJMHhkN2JhNzAwNywgMHhkMWVmMzQyYSwgMHg3ODhjOTNjYiwgMHg4YWU2NjE3ZSwgMHg0ZjUwZTNjMSwgMHg5NWNlNjEwZCwKKwkweDI4NzlkZjE4LCAweGQzOTQ4NTk2LCAweDlkN2NmMWYzLCAweDYwNjU1YzU4LCAweDg0OWE2OGM2LCAweDE3MmZlMzExLAorCTB4YmY4YTE0NmIsIDB4MDE1YmZlZTAsIDB4OTg4ZTY3ZDAsIDB4ZjdhYWY5NWYsIDB4ZWMzZjg4YTMsIDB4MWUxODZmZjAsCisJMHg3MzNmZTVjYiwgMHgxZTQ5NGFhYSwgMHhlNDZiY2VjMSwgMHgxOWQ1OGNhNywgMHg3OTlmYTA5MywgMHhkYjM5NjA2YiwKKwkweGYxZmRlYzhkLCAweGMwNDNmZTBlLCAweDNhZjJlZjc5LCAweDViMjU3ZDZkLCAweDdmOWQzOWYzLCAweDViZWZlMDYxLAorCTB4ZWI2ODJlZDAsIDB4ZThmMjk1M2YsIDB4YWJhNDBlNjAsIDB4OGNjNWIxN2IsIDB4MGI0Njg0ZTcsIDB4NTFhZDE0YmMsCisJMHg2NjVmYThhYywgMHhiZjhjNjhhZSwgMHg5YjMzZjIwZiwgMHhiNGYyMDc1NCwgMHhlOGViMGJjNCwgMHg4ZjM5ZDNlZiwKKwkweDY5M2Q0ZGNiLCAweDZlZDk3MDNkLCAweGRjZWQ4MmVmLCAweDJiZmY1YzUxLCAweDJjNzBmNzdhLCAweDNkZDYyODdmLAorCTB4YWRmMWQ3MWMsIDB4OWUxODU4OWYsIDB4MDZkNjM5OWIsIDB4MWVjNjE4ZmUsIDB4YzUxMDZjY2QsIDB4ZDA2Y2FjMWYsCisJMHg1YTNiMDBhNCwgMHg2MDI2YjA2NCwgMHgxNmMzZGZiYywgMHhiN2JlMzIyNiwgMHg3NzljMGU2NSwgMHhmOTBkNzlhNSwKKwkweDA3ZTg5NTgxLCAweDFmOTFmOWYyLCAweDY3MmM1MGY4LCAweDE1ZDdkNmQ1LCAweGVhYzM5ZjNhLCAweDlhMDdlNDBkLAorCTB4ZDY3ODFmODUsIDB4YWUwMDliNWUsIDB4NmUzZDczMTcsIDB4ZGUyZDM5MjAsIDB4Njg3ZTQzMTYsIDB4MjM1YzhhZjEsCisJMHhhZWYxNmZmMiwgMHhlMDQzZDIxOCwgMHg2M2Q4N2UwNywgMHhjNzhlOWY5OCwgMHg0ODFlNjQ1NiwgMHhlYjhiN2U4NCwKKwkweDk2YWExYzMyLCAweGI4ZmY1YTdlLCAweDViYTQ5OGU2LCAweDRiNGZiZjQ3LCAweGU4YTE5M2I3LCAweDk0ZDJmNDA2LAorCTB4ZmYwODI0YTcsIDB4M2Q4YmQwNGUsIDB4NDc3ZTRiMTYsIDB4N2FiNzgyZTEsIDB4Y2I5ZTAxOWEsIDB4ZWU3NDYxNTUsCisJMHg4M2ZmMzNhOCwgMHhiZWQxYzZhNSwgMHhlNjE3NWM5ZSwgMHhkZmFmYjcyNSwgMHhjYWZjZGY2OCwgMHhiNzQ0YTE5YSwKKwkweGZkZTU3YTYwLCAweGI0NzBlNjY3LCAweDE2YWZlYzI3LCAweGExZWM3YTg2LCAweGM5ZTFlY2VlLCAweGMyYjBmZTUwLAorCTB4ZWFhMWViZTUsIDB4YTcyODc5ZjEsIDB4NmY1YzA5NTksIDB4NjYxNGI3YmUsIDB4ZmRlYzY0NjgsIDB4ZWNlNjY2YTUsCisJMHg0YjA3ZDhjNSwgMHg2OGZmOTRhZCwgMHgzZmU1MjI2OSwgMHhmNGE3NmE1ZSwgMHgyODdkYTU5MywgMHg2OGUyMjkzZCwKKwkweDAxODBjZTUyLCAweDI1NDc1Zjg4LCAweDk1MWFmOTcwLCAweDZjZGVlMjIwLCAweDhjYWEyMjUxLCAweDMwN2NmZmJjLAorCTB4YTFjNTY3NTQsIDB4NGQ4YzI3ZDIsIDB4MjcxZWVjNjMsIDB4ZGZjMDIzMjAsIDB4MDQ2ZjdlOTksIDB4ZGYzZGI5MTIsCisJMHg0YjhlYjA2MiwgMHg5NTcxZmY0NCwgMHhkOGJlZmE0MiwgMHgzZGE2YmI3NSwgMHgzYzQ2MjVmOCwgMHg2NGZhY2RmZiwKKwkweDljZTljYmZhLCAweDE5MzhkZDk4LCAweGZjZmVmMGY4LCAweDY5ZmI0ZDU4LCAweGZjOWEyOTM1LCAweGNkM2IwNGU0LAorCTB4Nzc1ZTUyN2IsIDB4ODUwM2Y5NGQsIDB4YTJmOTM1ZmQsIDB4OWUwMjQwMzYsIDB4ZjhkYjMwMmYsIDB4YjdkOGFhZmUsCisJMHhkN2M2Y2M2NywgMHhmNmRlNTZlYiwgMHgyZWYwZDU2YSwgMHhhZjc4MDdkZiwgMHg3ZDUwMzIxZSwgMHg1ZDI0M2QzMCwKKwkweDMxZDdhZDY3LCAweDczMzY4MDM3LCAweGZhMGRjYzNkLCAweDkzM2I1OTNkLCAweDExZmNlYWU0LCAweDk1ZmRkOTBiLAorCTB4MWRkZjMyZGIsIDB4ZGI2M2Y5MDEsIDB4N2ViZmI0MGMsIDB4NWFlYzQ1NmMsIDB4YjYzZTNmZGMsIDB4NDE4YTNlMmQsCisJMHgzMmE5NWVlYSwgMHg3YWMxZmExZiwgMHhlODA1OTFhYiwgMHhjYjE1ZGNiNywgMHg5MTU2ZmNlOCwgMHhmOTQwZTRkNywKKwkweGY5ZWZkYTJmLCAweGQxZGJjYzk1LCAweDUxMjA0NDFmLCAweGJkNTQzZTNlLCAweGU3ZTg4NTNlLCAweDE0YmVmYzI0LAorCTB4ZjkwMmRkZTYsIDB4ZjFhZmEwMzMsIDB4MTZjY2Y4YzgsIDB4ODUxOWQ3MGUsIDB4ZDlmY2MwYWQsIDB4ZmFmNWJmYjAsCisJMHhiMTcxYzAzZSwgMHg4NzQ0YjZhMCwgMHg1MGY1MDFlYiwgMHgxZGNiZTkzYywgMHgyZGJlNDMyYSwgMHhmZGEwNjA1YywKKwkweGE5MWZiOWJiLCAweDk0Y2YzMTFiLCAweGRlOWMyOTIxLCAweDY0NDc5ZDJhLCAweDdmYTg5OTJmLCAweDAyMWMwYWQ2LAorCTB4ZDZmZDE2ZWQsIDB4NzdkNjg5YjQsIDB4MGY3N2U0NGMsIDB4ZmMxNmFlZjQsIDB4MjY3NDdjODksIDB4MDg2MzM5ODYsCisJMHgzZGUwODU1OCwgMHg0NmZjN2VmNywgMHhkM2UzZjdhYywgMHhmZGU3MDgzYiwgMHgzMmI1ZGVhNSwgMHg1Y2ViZjgwMSwKKwkweGU5MTA3Nzg5LCAweDQ5ZTJjN2I1LCAweDdlZjE4MmFlLCAweDk2ZjVjOGQyLCAweGYxNDBlNTA3LCAweDljYmY0YmViLAorCTB4OWQzZTI3MmQsIDB4MzgyNDcwNjksIDB4MjU2NTVmNDgsIDB4YjkzYWJlYTEsIDB4OThlNzQwYzYsIDB4MzUxOWRlOTksCisJMHgzYjNmZDY4OSwgMHgzOGU1OGY4OCwgMHg3MWY2ZjUyNywgMHg5YWM5ZGYwOCwgMHg5NmZiODYwYywgMHhmMjU0NmJjNSwKKwkweDc4ZmY5MDA3LCAweGZmZTcyZjdiLCAweDFiMzc1NWE3LCAweDI4ZDZmZDBlLCAweDIzYTVkNjZlLCAweDYwYjIzY2RmLAorCTB4OWE2MzlkMzgsIDB4YzE0MWQ2MjEsIDB4OTAzM2UwN2EsIDB4N2YyZjc3NTUsIDB4N2UxZWRlN2UsIDB4YjU2NTg2Y2UsCisJMHgxODFkZWZlOCwgMHg3YzE1OGYzOCwgMHhiZmRlNDRiYywgMHhkNjUwMDczYywgMHhkMTQ3NGZlZCwgMHhkNGRjYmVlNSwKKwkweGYwZWQxYTNkLCAweGUyNTUwZmQ5LCAweDZhZGRiM2IzLCAweDNkMDIyNTg3LCAweDBlZjZlODJmLCAweGNmZTQzZWZiLAorCTB4ZTk0ZTc4MTcsIDB4Yjg1NGZmMjEsIDB4YWUwMjY3N2IsIDB4ZDI2Yjc0NTcsIDB4M2U3ODZlOTUsIDB4ZGJkYWM0ZjYsCisJMHhhZjczYmJlMSwgMHhlNjI0MWMxOCwgMHg3ZjQ5ZTI0YiwgMHg2ZTY5N2JjYywgMHg4ZWYzYzBkNywgMHgyZjk3ZjUxZCwKKwkweDM4YmZlZjk5LCAweGU3YzAxNDkzLCAweDM4ZGQ3YjdjLCAweDc3NWMwMGViLCAweGUyMWQ4NGJiLCAweGU2ZTNiMWY4LAorCTB4YmFjNWUwMmEsIDB4YzM0M2MxNGUsIDB4Y2I1MGM0ZWMsIDB4M2Q3NzNjNmEsIDB4MzAyNGM0MTMsIDB4ZWM0Mjc4NGUsCisJMHg3YTEwMWY4ZiwgMHgxMTA5ZmE0NSwgMHhhNjdlNzg1ZCwgMHg3YjM3ZjM4ZSwgMHgwZGJmMjE1NSwgMHhiZmZhMzQ3ZSwKKwkweDk0NGY5YzUyLCAweGViZWE1ZjdhLCAweGZiNGI1NjMyLCAweGY4MTI0N2MxLCAweDhhYjljNjM5LCAweGUwNTVkYTk3LAorCTB4YThhODJlY2UsIDB4NDIwZjJiMTIsIDB4NzkzNTZkOTcsIDB4OTdkNDE5YmQsIDB4NDgwZmQwMzUsIDB4ZmJlNzYyZWUsCisJMHg5ZTU3YzY0MywgMHg2NTJkYjY0NSwgMHg0MTdlN2NjZCwgMHhiYzE5Y2VlZCwgMHgxZDE5Y2QyNSwgMHg3NTg5NGRlZCwKKwkweGY1MWIwYWUzLCAweGZjNjA3MDZmLCAweDY5Yzg1NGE0LCAweGY1ZTJhZDc5LCAweGRkOTA3OWYxLCAweGQ5OGFmMTk0LAorCTB4ZGIwNjZlYzIsIDB4MjhmNjBlYTcsIDB4MGVjZDBlYzgsIDB4NTZhY2IzYjIsIDB4ZGUwMTU3NmIsIDB4YzI0NzFjNDgsCisJMHgyYmE3MGMxYiwgMHg5ODc4NDJjMiwgMHhiZGExNzAwNywgMHgwZjdiNzEyZCwgMHgxNWI4MjQ0YywgMHgwM2IyNTAwNywKKwkweDM1Y2NhNTNjLCAweDAxZTcwNjI2LCAweDQ3N2IzZWY1LCAweGQ1ZTc4MmY4LCAweGNmMzE1ZTAxLCAweDFjNGJiODYwLAorCTB4ZmY3MGZiOWYsIDB4NTE4N2NmMTgsIDB4MWU2ODI5YmMsIDB4ZmVjMTFlOTIsIDB4ODk0YmE0OWEsIDB4YTRiN2UzODcsCisJMHg3ZTdhMjE0MSwgMHgzMjA3ZWVkYSwgMHg3ZTQ5MWI4YSwgMHg5ZDUwMDU4MSwgMHg0NGQ3N2JmNiwgMHhlYmE1NjdkNCwKKwkweGY4NjZmZjQwLCAweGQzZjI0N2Y5LCAweDg1MTc1NjNjLCAweDdjYzE1MmZjLCAweGJlNTA5MzJiLCAweDQ2ZDM3NTdjLAorCTB4ZTFiZWRmYTIsIDB4NDljYTIzN2QsIDB4NTNkN2NkYTEsIDB4NWMyODgzMTcsIDB4YjRiY2QzZmIsIDB4MTA0NGY1ODAsCisJMHhkNzQ0NmY5ZSwgMHg5YzM3OGE2ZiwgMHhiZGM2NWU5NSwgMHgzN2IzNGYwMCwgMHg0MWIwY2VhYiwgMHgxY2UyNzY5YSwKKwkweDYwZTQ4NzkxLCAweGM0NjNjNzhlLCAweGIxMWNjNmY4LCAweDljMTFiZmVlLCAweDZlN2U3YTk1LCAweDc2ZjA4NmZjLAorCTB4NWI3ZDI3ZTIsIDB4NjhiYWYzYjgsIDB4OWZiZjYyZmQsIDB4OTQzYTMzZDUsIDB4YWZmNzZhOWUsIDB4ZGZmYWVjODIsCisJMHgyMTdlM2MwYywgMHhiZDU1ZjFmNSwgMHg1MDI1ZTI5MywgMHgyYWFlZmMyZSwgMHgwNzliOGYyYiwgMHgyY2I0ZjFlOSwKKwkweGMyMjVlM2QyLCAweDRlNzFjYmFlLCAweGYxNDlkZmFkLCAweGY3NjhkOWI3LCAweDVkM2ZjYTAzLCAweGZlZTI5M2I3LAorCTB4NDc2NjU3YzYsIDB4NmE3ZGZmYTEsIDB4NzhiNWNjZmQsIDB4YjZkNGViYmUsIDB4NGJlNzY0OTksIDB4ZGU3NjkzOWYsCisJMHgxZmY0MGM2ZCwgMHhiZDE3ZDc3MiwgMHhkZmU0NjNmOCwgMHg5ZjE0NjFhZCwgMHgxNmVmZDkyZiwgMHhhYmQwMWVlYiwKKwkweDllYmVjZWQwLCAweDhlYjY1MWViLCAweGI0NTJkNWViLCAweDFlYzgwMzg3LCAweDhiNzZjNmY2LCAweDUxYmRkYzRiLAorCTB4YzljYTAyMGUsIDB4ZTk5ZTJlNGUsIDB4ZTgxZWRkZmUsIDB4MTFjYmYxNzcsIDB4YzJhMTBmMGUsIDB4ZGY5MWQzZWEsCisJMHgzZGExZjU2ZSwgMHhmMWY4NWYyYywgMHgwZWU3M2M1MSwgMHgxZmEzZmZmNiwgMHhkOTBmZmI0OCwgMHg5MmY3N2E4ZCwKKwkweGMyNmYyODJlLCAweDFiYWI5N2VlLCAweDI3ZThhZGQzLCAweDVmZjEzYjA4LCAweDM0MzliZmMwLCAweGZlMTA4N2ZlLAorCTB4MDFmZjExOGIsIDB4NmJjNzIwZmIsIDB4MDY2NzllMzgsIDB4MWFjNGZmZTEsIDB4ZGI5NTk3NGUsIDB4ZmFlMTQ3YmEsCisJMHg3NzRkNzhmMSwgMHg2ZjhlYjNmMiwgMHg5ZmY4NDllYiwgMHhjZmYwMWFiNSwgMHgzZjVhNWZlMywgMHg4ZmYwMDZhYiwKKwkweDNmYzQwOGViLCAweGRmYmM1YmMwLCAweGUwZWZmMDJlLCAweDc4ZTFhZmY4LCAweDNhNzg2YjY3LCAweDNkOWUwM2FiLAorCTB4ZjE2MThlNzQsIDB4ZjQwZTRkYWYsIDB4Zjk4NGNlMWIsIDB4YjMzYTlmYzgsIDB4MDFkNTY1NWQsIDB4ODNmNDk4N2UsCisJMHhiZmI1NjBiZSwgMHhlMjRkN2Y0MiwgMHhlNmFmNmU3ZiwgMHgwYTdmYTg0MSwgMHgxNDUzZmU5ZiwgMHg3NmVlNjFkMiwKKwkweDgwZWZhNDFlLCAweDgyZWNlNjdmLCAweGZjN2ZiOGZlLCAweDk1ZTliZjc2LCAweDdlMDFmMTJlLCAweGE5ZDI0ZGQzLAorCTB4ZDkxOGI5ODIsIDB4MWQzZjg2YzUsIDB4ZTI4Mzc1YzEsIDB4Nzg2ZDRmODQsIDB4ZDdkYzQ2OGYsIDB4ZDdkZWQ3YTgsCisJMHg4NTE5MzNjMCwgMHgzODJmOGMzNiwgMHgyNzg0NjZjYywgMHg4YTFlZjgzNSwgMHhmOTFjNjE5YiwgMHg5ZjNmM2Q5ZiwKKwkweGJjZTQ5MGIxLCAweDZkYmU3MzU1LCAweGJhMTlmMzIyLCAweGE3NThmZmEwLCAweGYyYzZmZGQwLCAweDM5NTEzOTQ1LAorCTB4NTVkNGUzMGMsIDB4MmVlOWM3MDQsIDB4NzhmY2U2OGEsIDB4ZmYyM2FhYjksIDB4ZmRjOGNjYjEsIDB4ZjkzZmI5NDgsCisJMHhkZTBmZjBhZSwgMHgyNWQ3YzJlZCwgMHhkMmIxNzVlZiwgMHgxOGMyOTc3NywgMHgxNjRiODFkOSwgMHgyM2VmMTdhMywKKwkweDExMmE3YWMwLCAweDMxZWNmN2M3LCAweDIyOGVkZDExLCAweGQ1N2Y4MDRjLCAweDYwMzZlMjI4LCAweDFmNGY5MTAyLAorCTB4MWY0ZjljNjQsIDB4MzhhMjZjOGMsIDB4NWU1NGFjMzksIDB4ZDBmOGJiNDAsIDB4ZmM4MzkzMTIsIDB4OGE2OGI4ZGEsCisJMHhmNDIwM2VkNywgMHgyYjkxODNkZCwgMHgxZTFmNjg1ZCwgMHgzMTNhMzQ4YSwgMHg3ODNkN2U4NSwgMHgxYTMwY2U4OCwKKwkweDBkZjE4Nzg2LCAweGFmYmE0NmM5LCAweDc5NmU2ODUzLCAweDBmYmU5NzA1LCAweGQ0Nzg5ZTI3LCAweDA2ZGVhMDBjLAorCTB4NTVjNjM3ZWUsIDB4ZDc1ZGQ3ZTAsIDB4YzVkMjNiNjMsIDB4OWM2ZDFmNGYsIDB4NzQzYzMyYTcsIDB4ZTA1NWEzZGMsCisJMHgyOTNhNzE0YiwgMHhiZTgyNjM5ZSwgMHgyYjhlMDFjMywgMHhkY2IxMmY2OCwgMHg5ZGYxZTU2ZSwgMHg4YjI3NDAwZCwKKwkweGU1YzFiZTlmLCAweDAzZjdjM2NjLCAweGUzNWNmMGNhLCAweDY0MTljNjI4LCAweDkzNWZlMTA0LCAweGZhZjIzMzJmLAorCTB4MjZhZmM0ZjAsIDB4ZWM2NmNiYWMsIDB4MTAzZWNjY2YsIDB4M2E4NjU2ZTksIDB4NDVmN2Q3MDQsIDB4OTc4YzVlZDEsCisJMHgyNWYxODNkZiwgMHhlMjdhYTYxYiwgMHhlNjdhYzk5NywgMHgyNmI0ZjFkMSwgMHg4OWNjY2YxMiwgMHg4MTQ0ZDM3OCwKKwkweDk4MjNhOWNmLCAweGVlZjAxYTJmLCAweDc3OGRhODNiLCAweGY5ZDNlN2RkLCAweGVmN2UwMzdhLCAweDkxMWFmYmQxLAorCTB4YmI2Njc1M2YsIDB4YjhlMzBhYzEsIDB4YjgyMTk0ZjIsIDB4N2U1YjI5MmUsIDB4MjVhNmYwNzMsIDB4YTVkN2YzOWEsCisJMHhjZmM3NWU0MiwgMHg4MGZlYjU4NSwgMHgwNDFlMjFjNywgMHhjZGJjNDU2MSwgMHhlYWZkYjNkMCwgMHg4ODA3Y2UxMCwKKwkweGRkOWI0YTk3LCAweDI4MTZlZDQzLCAweDcxOTUwZjE0LCAweGMxZmY0OTM2LCAweDFkMjA3ZGQwLCAweDQxZjAxNDFmLAorCTB4Zjg1MTM1M2YsIDB4YmQzNDMxYmQsIDB4ZjVjYTI2ZmEsIDB4YWJhZDFkNzMsIDB4OWJiOTBiZTcsIDB4OWI2ZGU1MmYsCisJMHgyN2M2ZGU1NiwgMHg4MmJkYTlkYSwgMHhlZGUwMzA3ZSwgMHgyNjc2OTE0MSwgMHhmZjQ0ZTMxNywgMHg1Y2I5MTJlMywKKwkweDc4ZTJkZDY0LCAweDlkMzViMjJjLCAweDc5MDhiN2NlLCAweGZlZjEzNzI5LCAweDg4ZjdmOGU1LCAweDhkYTI0Yzc0LAorCTB4MDBmMDk1ZmEsIDB4N2VjNzFlYmYsIDB4OTAwMWEwNzQsIDB4NTZkNjRmNWYsIDB4ODczNDdmOTMsIDB4MzNiNWM0MDUsCisJMHg1ZjI0ZWRmYywgMHhlYmI3Y2M3NywgMHg0Yzc1ZGQxMSwgMHgxMGIzYWQ4ZCwgMHhjMmY3Y2FmNSwgMHgxZjQ3YTgxYywKKwkweGFjZjVkNjM0LCAweDRlZDhlYzhhLCAweGIyMTRkYmVlLCAweDNkMjMwMzY2LCAweGMyNjFlMjI5LCAweDIzNTU4Y2ZlLAorCTB4YTE0MDdjZTksIDB4NWUwZmVmYzIsIDB4NzQ3OGIxY2EsIDB4MzFhNzE4ZDEsIDB4NjMwYjY5MTAsIDB4ZjEzZjNhMTQsCisJMHhmMjdmYjEzNywgMHg4OWUyZjQ1MCwgMHg1MTg1ZDcyOCwgMHgzM2E2M2Q0NiwgMHhmYmY1MmI1OCwgMHhlOGI3NmI3NywKKwkweDMzZGUxOGZiLCAweDBlNzYzMTU2LCAweDc3Yzg4ZjAzLCAweGE4ZDViOGMyLCAweDhkN2U3ODc3LCAweDRhYTI5YjMzLAorCTB4MjFjNzdmMjIsIDB4ZGVlMWUwMjcsIDB4Y2E3ZjQwNmIsIDB4MDlkZjJmN2YsIDB4NGI3YTVmZmQsIDB4ZTkzYmIzZDQsCisJMHgwYjhmNGJmYiwgMHhmMmU0ZjYzZSwgMHg3ZDY1Y2ZmYywgMHg5MmFmY2YxZSwgMHhmZjNjZjlmNSwgMHhlNDVmZWNhNCwKKwkweDVmYWEwZTlmLCAweDRiZmY1NDE2LCAweDNlYmM1ZjllLCAweDdlODNkZjNmLCAweGQyY2U2OGViLCAweGQyMTRhMzg1LAorCTB4YmU4NDdiNTMsIDB4MjNlZTVjMjgsIDB4ZjZlYTE2ZmMsIDB4ZjMzNDc0ZjIsIDB4ZGM2ZWIyZTksIDB4NmJhMjUzNmUsCisJMHhkNTFmZGEwZiwgMHhmNjgyZDI3MiwgMHgyNzY0ZDVmNywgMHg3MDRmOWZlNSwgMHg3NWM0NGIyZiwgMHg2M2M1MjRkNCwKKwkweGExZmI3ZDQ0LCAweGM0YzFlYzk3LCAweGVkMWZjZTRlLCAweGY4ZTNjMmU5LCAweGJmYTA5MjliLCAweDA1ZmI3ZWExLAorCTB4OGM0ZWFjZmQsIDB4MWM3ZWY1YmYsIDB4ODBhZTFjNDksIDB4MjZmOTllN2UsIDB4MjNhN2ZjZjAsIDB4NDliZTFiM2MsCisJMHhiNTkyYjMzZiwgMHg0ODdmNDhmZCwgMHg4NmJlNzU0OSwgMHhlMzI3NjNmMywgMHhlNjQ1ZTczNCwgMHg4ZDExYzRmZiwKKwkweGU3ODYyN2YxLCAweGYzZjUwMDQ1LCAweDY3YTVkNzk3LCAweDVmZjNmZjQyLCAweDA0YmQzZDdkLCAweGU3NjEyNWZkLAorCTB4Y2M3NGRhMmIsIDB4ZGIzNGY3ODksIDB4MWJlN2E1MTgsIDB4N2RlMjMxM2YsIDB4OGQ1ZDhhYjMsIDB4YWVkMDcxYzYsCisJMHgwMGRjZDIxMiwgMHg5YzA0Y2FiOCwgMHg5M2Y0ZTc2MCwgMHg4MzczZWMwMywgMHgzZDhjMWJkMCwgMHg1ZjM3ZjdjZCwKKwkweDdhNDdhYjNkLCAweDlkZDVkN2NlLCAweGY2ZWQwZTdhLCAweDNlZTQyNTI4LCAweGRkZjE2NmNkLCAweDE3Y2U0ZWQxLAorCTB4ZTg3YTE1ZWYsIDB4MTFiMzlhNmEsIDB4OGM2YmY5ZTcsIDB4YjczZTQwMjEsIDB4NjBmYjkzYmEsIDB4ODU1ZjFjNDksCisJMHgxY2NkZWVjMiwgMHgwMWRiMzE2NiwgMHhlNDNmNDNjZiwgMHgxYjI1NTRmYiwgMHgzYzYwODYzMiwgMHhkMTg0Y2RmOCwKKwkweDZkN2UyNGVmLCAweGM3OTViNTNjLCAweDNjNzgxYjUzLCAweGJjZDZkMGI1LCAweDMzMzc5NDA4LCAweDMxYWQ5NTI2LAorCTB4ODRkOGMxZGYsIDB4MDMzOTQ4NWYsIDB4ZjM2Zjg1OTEsIDB4OWQ1ZjMyNGMsIDB4Yzc5YjI2M2YsIDB4NzY3ZjMwYmIsCisJMHg1MDZiNjNmZCwgMHhiOWMyOWE2ZSwgMHhmMGQwZmIxZiwgMHgxN2E4ZTE4MSwgMHg3NDIyMzI1YSwgMHgzN2U3OTA1NiwKKwkweDQ5OGM4YmUzLCAweDhlZmNiMTQzLCAweDYzOWU1ODcxLCAweDIyMmFmNGIyLCAweDhiZTIzMmZjLCAweGM3NWRlMzM3LAorCTB4M2RiMDVmOTAsIDB4NDZkYzQxYzYsIDB4MzA3ZGZjNWYsIDB4MmFkYmY3MGYsIDB4MGY3NWE3OWQsIDB4ZGE4NzcwOGEsCisJMHhjMDg3ZmE3NywgMHg0YWM5MzFhYiwgMHgxOTkwMTM2OSwgMHg4NzA5MTdmZCwgMHhmOWZjMWYxYywgMHhkZmQwY2Q0NSwKKwkweDgzNDllNWM5LCAweDlmNzFkYjU3LCAweDM0OTBjNzI1LCAweDQ2N2UzZmQ0LCAweGUwNzJmYjgyLCAweGFjNzUyN2Y4LAorCTB4NmUyOTJlMTcsIDB4MDI0YjhlMTYsIDB4NWRlZTAzMGUsIDB4ZDk1ZGJlMDMsIDB4YWMwNjczMmEsIDB4ODk4ZjI2ZjMsCisJMHhjZGVmZTRkMCwgMHhjMGNlNjU4ZiwgMHgyOWJkZWQzOCwgMHhjMmY0ZmM5YSwgMHgwZmY2OWFlZSwgMHhhOWFmZWFjYywKKwkweDY3MzUzMDJmLCAweGIxZjgwNTU1LCAweDFlNDlmYjlkLCAweDYyZDJhNzgyLCAweGVlN2Y0NzA5LCAweGZjNWYwZGVmLAorCTB4ZmZmNDQxZTUsIDB4ZjQwZWFiMzYsIDB4ZDllZWU3NTUsIDB4YTFkYjk3ZjIsIDB4NGUzYzY1ZDUsIDB4M2I0N2YxNDUsCisJMHhjOWNlY2JjNSwgMHhhNzdhMjhmMywgMHhlODVmNzAzZSwgMHhmM2E2NmIyMiwgMHgwM2VkOWQzZSwgMHg3Y2VlNzVjOSwKKwkweDc3M2E3ZWViLCAweDAzZWY1ZGY2LCAweGViMTI0YWY1LCAweDA4NmMyMWRkLCAweDU1Y2JjM2RhLCAweGFlYmM1MTFmLAorCTB4ZWZjZjkyMjIsIDB4OGNjN2ViZTIsIDB4ZmI4YTBmYjgsIDB4ZGY4MWQ3OGEsIDB4ZDEwZmMyZWYsIDB4NTBmMzZjM2YsCisJMHhmZWI3M2IzYywgMHgxZDliZWQxOCwgMHhiYTdhZTQ0OCwgMHgxZTgxNzUyMiwgMHg0MjU1MWRlZiwgMHgxYzY4NzY4YSwKKwkweGUwNjhhYmU4LCAweDM2NDZlNjk3LCAweGJiZWUxNzcwLCAweDFmYjg1ODY2LCAweGIxOTkzNmRlLCAweDFlMmJlNDU4LAorCTB4ODg0YTY5ZGYsIDB4ZjNkNzdiYTEsIDB4YmNhOGYyNmIsIDB4ZmE5YzJkYTIsIDB4MWU2ZDRmN2YsIDB4NWYwOWU3NDcsCisJMHhhMWZmNjg1MywgMHhlNWExZTUyMCwgMHgyOWI4N2U3OCwgMHgxMWUwMzNkYywgMHg3N2UwYjcxOCwgMHhkZTIxZTU3NywKKwkweGYzZjE3NjJhLCAweDlmZWEwNWI1LCAweDVhNDAxNmIzLCAweGRmNDc5YjU2LCAweDQ5YWNhODE3LCAweDQyNjE3ZjAxLAorCTB4MDViZmI3MmUsIDB4YWYyMWYzNjgsIDB4NDZhY2IzMGUsIDB4N2QxYWFiYmIsIDB4M2Q0NzllYmQsIDB4OWU5MGI0NjMsCisJMHg4MDdiNmU4OSwgMHgzMzZjYWZjNiwgMHgyNGY3ZjdkMywgMHhkMGQ3N2Y3MSwgMHhkYjFhZTFjMiwgMHhjOTcyYTJlNiwKKwkweGJhOTM1MzBmLCAweDg2MGZkNjY5LCAweDdjN2FjZGY4LCAweGMyZDBjMzk3LCAweDZkZGRmZGE4LCAweGYzOTUyOGZkLAorCTB4YWZjZmJiN2QsIDB4MjFhZTNlZTksIDB4MTRiOGVhZmUsIDB4NzFkYmY3OTgsIDB4OTBkYzk1OGEsIDB4YTU3YzNkMjAsCisJMHgwYjM0Nzg2YSwgMHhjN2RhYTdhMSwgMHhmNGU3ZTM2OSwgMHhkY2ZjNmQ0YywgMHg3MzhhNjE1ZSwgMHgzMWMwMTI3ZSwKKwkweDNkMTZiMWYxLCAweDQ4YjEwN2VlLCAweDM1ZjExNWIzLCAweDdiNjBjNDcxLCAweGE5N2M4MDQ5LCAweDIyMzdlZjdiLAorCTB4ZGVlYjBjN2QsIDB4MzY5ZGEyMzcsIDB4NTAxYjlhNDEsIDB4MzNjZTJlNWYsIDB4MDVlOWViMDQsIDB4MmY0ZjUyNDksCisJMHgxZGRhNTRhMywgMHhmOTA2NzU3NiwgMHg4MmFjMzNhOSwgMHhjY2ZjODUwMSwgMHg3ZTU0ZmExMCwgMHgxYTZiNGNkZiwKKwkweDFlNmVlM2EwLCAweGM1MzQ3ZmM3LCAweDQ1ZjUwMmJkLCAweGJlOWIwZTczLCAweDczNjZmNDgzLCAweDdjYzNlZTNhLAorCTB4OWQwM2YwNTcsIDB4ODlmOTBhY2QsIDB4NzUxZTc0MmQsIDB4MGViYjA4ZTIsIDB4MDRhYmZmZTMsIDB4NmY4ZTUyNWMsCisJMHhhMmM1OGYzNCwgMHg1YjJhN2JmZCwgMHg3N2JlZmQ4MiwgMHg0ZWNkOWRlNywgMHg0N2YxYWZlOCwgMHgwZjY4OTk5OSwKKwkweDI1Y2ZiOGU0LCAweGNjMjk3YmYxLCAweGQ3MGQ3YWRhLCAweDQ0NmY5NTgzLCAweDBiZGU1MWQ4LCAweGZiODYzMTcwLAorCTB4YjQ0YzdiOWQsIDB4ZGE3MjgxNGUsIDB4YzM3Y2E4Y2YsIDB4ODllZjA5YjQsIDB4N2FjMTQ2NTQsIDB4N2RjZmM2MTUsCisJMHg3Yzg3Y2MzMywgMHg5ODY2ZjhkYywgMHhlZjQ2ZWQxZSwgMHg0ODczZjc3NCwgMHg3YjM3ZGNjZiwgMHhhMWY1YzE4ZiwKKwkweDY3YTRjMWIzLCAweDlmMzhmN2U0LCAweDA5ZGIzZDI3LCAweDViZDIzN2JjLCAweGU1MjY3Y2MxLCAweGU1YzM1ZGQzLAorCTB4NjlmMDQ4YTUsIDB4YjczZjkwYjEsIDB4NTUyYmEzOTAsIDB4YWYwZTQ4NWQsIDB4ZTM0MDA2M2MsIDB4Y2E2M2U5M2UsCisJMHgyN2U4NWRjMCwgMHg3ZWY0MmRkOCwgMHgwMmNiOTQ5MywgMHg3OTQxMGY1YywgMHgzYTE4ZmY0MSwgMHg4ZGZkMmJmZiwKKwkweDZiMmMzOTYwLCAweGU1YmY1MmIzLCAweGVmMjE3NjZkLCAweGI5NGJjYTM2LCAweDYzNzIxNjJiLCAweDJjYzY3ZTEyLAorCTB4NTNiYmU3YzEsIDB4NWUyMGVmZGMsIDB4ZWU0MWFhMGEsIDB4M2YxZjY4YTMsIDB4Y2ZjOWU1MGIsIDB4ZjIyYjQ2MzcsCisJMHg2MjRkZjAxNywgMHg1NGZjODA0OSwgMHhkMGNmZGUzNywgMHhiOWM1MzEzZiwgMHg0MTY2NmY4OCwgMHhjYzlmZTgxYSwKKwkweGFjNGZmNzZlLCAweGZlMDAxMmUzLCAweDc0MzIyYjg5LCAweDlkYTlkZjc4LCAweGU2ZjlkYjdmLCAweDhmN2ZmOGU2LAorCTB4NDhlMjk3OTAsIDB4NjdmNDRmNWYsIDB4MGU2MTU1MGQsIDB4Mzk3ZTg3M2MsIDB4MmNmN2VmOGUsIDB4YjhmMWM1NWMsCisJMHg0NWNhZTBkMCwgMHgyZmUxNjJmZiwgMHhhMTk3OGExNSwgMHg2OTdhODFkZiwgMHg2MzJhOTFkOCwgMHhmZWU1MWM2MCwKKwkweDBlY2M0MWI2LCAweGQ2ZDI5ODc4LCAweDEzMzdkMjgzLCAweDBmMTE0N2RjLCAweDA0ZDM2ZDQ1LCAweGEzN2QwNmJlLAorCTB4NGVhMWM1ZmQsIDB4NzgzMjQ3MWUsIDB4MTk4ZDhlNGQsIDB4YWI3MjQ3MTgsIDB4NjkzM2U3NDgsIDB4ZTA0Y2ZhY2MsCisJMHgxZDdhZGU3ZSwgMHhiZWU0YzNjNSwgMHg5OTJiOGNhMywgMHg4MDdjYmNmMCwgMHg1ZjQyZmQxZCwgMHgzN2VmNGU5YiwKKwkweDcyOTljNzA0LCAweGIwYmZkZGI4LCAweGJmNzY0MGQ5LCAweGMzY2ZmMWFjLCAweDJlN2Y1MDc0LCAweGVkMDVkOWMzLAorCTB4Nzc3YTk3YzksIDB4YmNmNWYyMWIsIDB4MGQ1N2RlYzksIDB4ZTRmZjlmOTAsIDB4NzY5MWE4Y2UsIDB4ZjRlYjNlM2YsCisJMHg0NzY4OWViZSwgMHgxODhmMDBlYiwgMHhhMzViYWFlZiwgMHhiZmI5NzllNiwgMHhjOWY3YzExMywgMHg3ZTRiN2YzOCwKKwkweDc5ZjNlNjBlLCAweDlmODhkZDZkLCAweGM4OTk1NGFlLCAweGJlMDE1ZDBlLCAweDQ4NzYwMTY1LCAweGU3YTkxZGRhLAorCTB4N2M5MWZkYTUsIDB4ZmFlN2FlNWQsIDB4ZGEzMjNjYWIsIDB4YjQwOGM5ZWIsIDB4Mzk1YzkzM2IsIDB4Zjg3ZDc3YzgsCisJMHhkZGJmMWE3OSwgMHgxNDc2YjRkOSwgMHgzOGE1YzFjYSwgMHhlZDI4YjczYSwgMHhiYzFjYjA0NiwgMHhkMzFjMTRiNiwKKwkweDhlZWQxZDVlLCAweGNmNTJlYmQ0LCAweGZhMzViYjRiLCAweGZlNzcyZmU1LCAweDhhNTVjZDE1LCAweGUwMzI0MDdiLAorCTB4YjczZDZlZWIsIDB4MmRlYjc3NWYsIDB4ZTM2MzNmYzQsIDB4NmY5MWU5MjYsIDB4MWU4ZjVlNmUsIDB4OThmNDdhMTMsCisJMHg3NDU2OGY0NiwgMHgyNzA2MDc2MiwgMHg3NDFjOWFkZiwgMHg0Y2YzZWQxNSwgMHgzZDQ0N2ZkYywgMHhhM2RmZDgxZiwKKwkweGUwYzdhMzI5LCAweDczMjdjNjNjLCAweGMxNWRmYjNiLCAweDFmZmU5OWRkLCAweGZhNmI3YzlmLCAweDg4YjI1ODdmLAorCTB4ZmY0MGRkZjcsIDB4ZmQ3MzI2MTcsIDB4OTllZmFjMWYsIDB4NzNhN2JmOTUsIDB4MmY1ZjRmNjksIDB4MGNhMzgzZGEsCisJMHhjMWRhMDNlYywgMHgxNmZiMDg4NiwgMHg1ZWM4MGY2MSwgMHhiZjdiNDc4NCwgMHg0ZDVjMWVjZSwgMHg3ODg4NTk5YiwKKwkweDFlMGY2MTBhLCAweGY2MTZmZTRhLCAweDk0YTFmMjQwLCAweDUyMjcyOTFiLCAweDQ4ZTU4MjJlLCAweDlmODRjNWNhLAorCTB4ZTkxMTNhYzIsIDB4NTdiZjFlZjQsIDB4NmNmN2FlNTAsIDB4N2I0NmZkYTMsIDB4Y2Y5NDYwYzQsIDB4OTc2ZTNmNzYsCisJMHhjMWQ2ZjI0MiwgMHhmMWY5MDg0ZSwgMHg2ZWQ2OGJjYiwgMHhmMjkwYjk0OCwgMHg1Y2E3ZTUyMiwgMHgyMGVjYzVjOCwKKwkweGQ2YTdkOGI5LCAweGY3MGEzMzNkLCAweDZiZGQ5MmNiLCAweDcyZmRlMzkzLCAweGQ4MjNiNjUyLCAweDU3Y2E3NDNlLAorCTB4YjM2NDU5MTgsIDB4ZjIxOGFhZTMsIDB4ODFhNDM5NTUsIDB4NDRlYTY1N2MsIDB4YmU0OTllMWUsIDB4ZDk2OGJmMzUsCisJMHg2ZmQzZjI0ZCwgMHhmNGZjZmJmZSwgMHhlOWY4NGU5YiwgMHgzZjBkYmU3ZiwgMHgzZjYzZjQ3NSwgMHgzYzAzYjJjZSwKKwkweGRmNDBiMjU3LCAweDZkZjlmODY2LCAweGZiOGMzYmMyLCAweDdhZjlkZDBmLCAweDA0OTdkNjAwLCAweDhkMzE5Mzc3LAorCTB4YWUxMzNlZTIsIDB4MmY4YTJhYjMsIDB4NzQ5NGJlMGEsIDB4NmNjMGZlOTYsIDB4OTMzODc3MTEsIDB4ZTEwNzdhZTIsCisJMHg4MmMwZjVjNSwgMHg0NDdiZDM5YiwgMHhiMzVjNTM2NywgMHhiMzI3ZDcxMSwgMHgwM2Y0MGQyMSwgMHg5YjdmZjMzYSwKKwkweGJkZWY1MTZmLCAweDNlNzQ5MzcxLCAweGZiOWRmYzk2LCAweDQzOTJjNzhkLCAweGIxYzc4ZGZiLCAweGI1ZDI5YmZjLAorCTB4Zjg4OTk3MjAsIDB4MzAwYjhmZGUsIDB4MjllMTM4ZGUsIDB4MGFjYjY3OTEsIDB4NDZkMzhmMTAsIDB4M2M5ZmZhYzgsCisJMHhmYTgxZWNlOSwgMHgzOGI4Yzk4MSwgMHg1M2RlMzljNSwgMHhmNGIzZGU0NSwgMHgzZjY4MThmMCwgMHg4ZmU2MTllMSwKKwkweGQ4ZmQ0MzliLCAweGI4ZjZlOGVjLCAweGVkZmNjMjg4LCAweDNiMWZlNzk1LCAweDUxZTg4NmJjLCAweGRkY2NlNWNiLAorCTB4M2ZmYmU3YTIsIDB4NzkwNTlmMjIsIDB4NDQ3ZTQwNGIsIDB4NmYwMzdlNTAsIDB4NjE2ZmE1MWYsIDB4OTA0NWU3ODEsCisJMHg5YzIxOTQ5ZiwgMHhmZjAwYWVjZSwgMHg3ZmRmODYwMSwgMHg1NTg1ZWQwNSwgMHhhOGQ3MTg2MSwgMHhkNmY4ZGI4YywKKwkweGY1NmJkNDE1LCAweGI1NDVlZDBhLCAweDE0ZDU4MWUzLCAweGZiYzU1MzM4LCAweDczNWY5NGI5LCAweGMyM2UwOWQ4LAorCTB4YmU3OGJiMDMsIDB4OTNlZDRhNGYsIDB4MzdlOGJkMWUsIDB4YTFiZGRjZTAsIDB4YjlkMjcxNGUsIDB4Yjc4YTExODMsCisJMHg3YzQ3NDY1YiwgMHhkYWQxNDlmNywgMHg2YmQxZmMyNywgMHgxZTc4NjdiZiwgMHg2ZmJlNTZlZiwgMHg4ZGQ2Y2ZiZiwKKwkweDZlOTlmN2JlLCAweGIyZmJmYzYxLCAweGZlN2Y5ZjQzLCAweGVmZTcwYTVlLCAweDIxZDE1OTMxLCAweGE4YTVjN2ViLAorCTB4MzcxMTFmYmMsIDB4NjhhMWYxYTAsIDB4N2JlODVkNGEsIDB4YjhjNTEzYjAsIDB4NDI1ZmI4Y2QsIDB4MjRmNmRjZjgsCisJMHgyOGQ5YjdlMiwgMHg5M2YyZmRmMSwgMHgxOTYzNzdjOCwgMHg2MGNmYzRkMywgMHg5ZmRmY2E3YywgMHg4ZDQxNzJmMiwKKwkweDE5ZDc0ZjllLCAweDliYWZhZjg0LCAweGE5MTQ4MGVmLCAweGYyZjhmZGJmLCAweGY0Y2JkMTA0LCAweDg0NzZmODM1LAorCTB4ZmI1ZGI3YzAsIDB4ZThlYmVmYmQsIDB4ZjdjM2FjMzUsIDB4NDhlNzZmODIsIDB4Zjg2YTc2M2UsIDB4MjJlZjVhM2QsCisJMHg1MzhlOGNmZSwgMHg1NzQ3ZThhYywgMHhlMGQ2YzJiOCwgMHg5ZjJmYzE3YSwgMHg2Y2JlMjdiZiwgMHgxZDAzZmI5NiwKKwkweDAyYjVlZmU0LCAweDg5MGFiZjk0LCAweDRmZWJjZjQ3LCAweDc0YmFmY2EyLCAweDNjYjllZGVkLCAweDczMzVmM2I2LAorCTB4NTJiYzAxZjYsIDB4N2ZiZTBmYzgsIDB4MjdmYWY5ZTQsIDB4N2MwOTJlMzEsIDB4ZDc5NGY1NDEsIDB4MmMxZGMwMDcsCisJMHhmOTQxNzU4ZiwgMHgxNWY5MjBlYywgMHgwM2ZhNDdmMiwgMHhhOWUwMDFlZCwgMHhiOGI3ZWEyNywgMHgwMDdiNDY2MywKKwkweGQwNGNmYzlmLCAweDI3YjhhMmU5LCAweGZiOWEzY2RhLCAweDc4ZGRjZDkzLCAweGZiODUyM2JhLCAweDdjMDljZjhmLAorCTB4OWJlZDEyNmUsIDB4OTBmMDAzYzMsIDB4MWYxZmUxYWEsIDB4ZTYwMjViYWUsIDB4M2ZiYTc4NGQsIDB4OTNmYmNlNGUsCisJMHg2M2QwN2M4MiwgMHhiZjVlMzZjZCwgMHgyN2EzZTUyZCwgMHg3Y2ZlZDkzZCwgMHhhNmFmN2Y3MCwgMHg3ODgwNTI3YywKKwkweGYxZmZmN2YxLCAweGVlMjNmNDYxLCAweDkxZGI3ODE3LCAweDI3YjBlNDcyLCAweGMxMzlkMDUyLCAweGYwMjE0ZWZmLAorCTB4NTE2M2JkMDcsIDB4NzRhMWZjOGUsIDB4NzYxZjhmZTQsIDB4ZDA0ZjRmZTQsIDB4Nzc0ZWY0ZjcsIDB4M2E3YmRmNjcsCisJMHhmYTBjZWY3ZSwgMHhlYTNkZTE5ZSwgMHhkMDVlZmY5YiwgMHhhZTg4M2YyZCwgMHgxZDc0NDE3OSwgMHg5NDJmOTQxMywKKwkweGZmNDZhZjc5LCAweDVjNWNiZDRhLCAweDA5ZTNmNGZmLCAweDU0ZGYxODcxLCAweDlmYmYzOGU4LCAweGJkOTM0ZjlmLAorCTB4ZmM5NTZmOTksIDB4ZjIzMGU2N2IsIDB4Y2Y5ZjlmYWIsIDB4ZDcyNzllMTIsIDB4Y2U3OWJhMDksIDB4Nzg3YTg5M2QsCisJMHg1MWUxZWExMiwgMHhkNDE0ZmNmZSwgMHg1ZjNmOTQ0MywgMHg3ZTYxZmI4MCwgMHhlYTgxNzU3YiwgMHhlZDkxYWJlZiwKKwkweDdhZmQ5MjJmLCAweGVmZWM4NTYwLCAweDNhNGJjYTMzLCAweGIyMjVjZjMyLCAweGJkMGJmNzc3LCAweGE0YWQzY2MzLAorCTB4ZjAzNWU3ZjcsIDB4ZmU3ZDNmZWYsIDB4MmI1ZmMzZjMsIDB4Nzg0MWI1MGYsIDB4Zjc5NDEwZDksIDB4Nzc1ZmI1MDQsCisJMHgyMmI2ZmIwMywgMHg4MmM3ZmJlOCwgMHhlNTA0ZDdlYSwgMHg2YmU1MDdkNywgMHhjZDE3ZGZiNCwgMHg4YjBlNDg1MiwKKwkweGM5ZmRmMDQ2LCAweGU2MGNiOTYwLCAweGRhNTIyZjhmLCAweGY2ZWQ2M2UzLCAweGZmMjQ4OTVjLCAweDEzNTcyMzRlLAorCTB4ZmFmZTc5YWEsIDB4YTgyOWZmZjMsIDB4YTdjODBjODksIDB4YjIxZTg5YjAsIDB4YzA1YTMwZWYsIDB4YjlkMDQxZmQsCisJMHhjMWY4MTUxZSwgMHhiY2RlODlkMCwgMHhlY2RlOTlkOCwgMHg3OWVmNmMxMywgMHhkN2YwM2ZmZCwgMHhkMjJmZGEyNCwKKwkweDU0ZmIyNWY4LCAweDk1NTFiZTZkLCAweGJiYmQ0NzcwLCAweDVmNjAzMjI4LCAweGUyMjY1OTk1LCAweGZkZjNiYWJhLAorCTB4NjM4OTg4OWIsIDB4MjJmYzAzNTIsIDB4Njc0NGY4NGYsIDB4ZmI2NTNjYzAsIDB4NTc1ZDVmNzEsIDB4ZDRmOGJjNzEsCisJMHg3MTliODlmMCwgMHhkOGI0Njg3ZiwgMHgxNGYxYjRkNywgMHhmNjhhYTVlYywgMHg2ZmM0NTJiYSwgMHg1ZDM5ZTFjNiwKKwkweGViZWUxNzZjLCAweDBmZDAzMGI5LCAweDcwYmQ3NTYyLCAweDUyM2Y4ZDllLCAweGQ1NTBiYmY5LCAweDUzYzAxZjQwLAorCTB4NzlkM2IzMTEsIDB4ZWE3ODk5ZDMsIDB4NDdkNDNiYmUsIDB4MGRmOTJmNDcsIDB4NDdlZmI3N2MsIDB4ZDNiNDEyZWEsCisJMHhkMmM0OTc0NywgMHhhOTQ1YTYzOSwgMHgxN2RjZWZkYywgMHgzNjYxMzVkZCwgMHgxZTIzMWJlNCwgMHhmOGRiN2QyNiwKKwkweGY3NGE1OGM0LCAweGFkOTVjZWFhLCAweDM1M2FlODU2LCAweDVmNjQ2Mjc5LCAweDNjMjY4ZmFjLCAweDRmYzQzNjM5LAorCTB4OWRmYzA2NWMsIDB4MzgyNzZhOTksIDB4NDI2YjM2ZGMsIDB4YWJkYmZhM2QsIDB4MDg1ZmI0MGQsIDB4ZmM0NTdlMmQsCisJMHgzMDY5YTRmMywgMHg5NjhiYjdhZSwgMHhiMGZkYTdmNSwgMHgxYTRmOWZlMiwgMHg4YWIwZjc4NywgMHgzZWQwMzcxZiwKKwkweDRhY2U4YjQ5LCAweGVhZjcyMjcxLCAweDZhMmU3NGIxLCAweDdhOTEwYWQ2LCAweGNkZjRhMmVlLCAweDFhYmFmY2ZmLAorCTB4YmViNTY5ZWYsIDB4MGVmYmQwYTAsIDB4N2JhZDVjNzcsIDB4OWI5ZTEwNjcsIDB4Zjc0ZWU5YWMsIDB4NzU4MGRlMmUsCisJMHgzZWZiOWUwMCwgMHgxN2I3YmViZSwgMHgwODlmMjFjZiwgMHhhNDczYTJhYiwgMHg4YmVlOWVkMCwgMHhiZmIzNWU5NSwKKwkweGRiMGIzMTNiLCAweGQwZTVkNmFiLCAweGEzOTQxNGZlLCAweDk1NmE3Y2ZmLCAweDQxZWYwOWJhLCAweGMyNTk0NTE1LAorCTB4YTlmNmZjZjEsIDB4NzVjNTE4YWYsIDB4YTI2ZTNkNGUsIDB4NDc4ZTIyNzcsIDB4OGZhYzY3YmEsIDB4ZThiOGZiYTMsCisJMHg4YTUzYjNlOSwgMHgzYzAxNGEzZCwgMHg2N2QwZGE0YywgMHg5NjEyNjI2MiwgMHhmYjdkMDQ5YiwgMHgxZTAxMTU0NCwKKwkweGZjZWQ3NDhhLCAweDI0YTRmNjQzLCAweGE1MjdlNzg2LCAweDA1Yjg5OWY2LCAweDk3ZWE3MWU2LCAweGQ4N2NlOWJkLAorCTB4ZTRlNzU0YzEsIDB4MmZkN2MwNTQsIDB4NTI1MzljZDIsIDB4NmU1ZTExZTMsIDB4MGZmY2RlYjcsIDB4ZTNmYzhmZGYsCisJMHhlNDA0ZTI4NSwgMHgzOTUyODdhZiwgMHg1NmQxYmY1ZiwgMHhiZWY4MTA5YywgMHgzZDQ1Yzk3NywgMHg0NjliYzFmMSwKKwkweDI3N2EyMmZiLCAweGMxNGQzYzMwLCAweDQxZjAzNjc1LCAweDY3Y2RjNjJjLCAweGYwMGI3NTg5LCAweDIxOWQ5MmYzLAorCTB4YTllMWFiZmMsIDB4ZjFhYmQxMmEsIDB4NDhkOWYxYTcsIDB4MGY1ZjNmNWYsIDB4MTlmNTE3N2YsIDB4NWYyMDM3YWQsCisJMHgyZDczMjFiMSwgMHhhNjkzYjlkYSwgMHgwZjQ0ZWMyNSwgMHg5MWZlN2VkNiwgMHgzYzIzMGJlZCwgMHg3OTg1YjYxOSwKKwkweDdlMzAzMmMzLCAweGZjODcxY2VhLCAweDdhZWIxMmNkLCAweGM4MDRiNjRkLCAweDc3ZmY2OGExLCAweGZiZTczZjBmLAorCTB4ZWI4ZjY4NzcsIDB4ZmU3YmJmYmUsIDB4OWZiODEyZDcsIDB4NDY5N2RiMjEsIDB4NWNlODNjNTksIDB4ZjQ1OGI2OWMsCisJMHhmYWEzOGY0OCwgMHgzY2YwYTdhNSwgMHgwNjBiYzk1YSwgMHgyZjI1MDNiMiwgMHg4YWQ2M2ZjNCwgMHgwNmY4MDdmYSwKKwkweGYzYzE2YmUzLCAweDgxYWE2M2ZhLCAweDkzM2EzMWM3LCAweGFkMThjZjRiLCAweDEzMzFiMjVjLCAweGM5OWRiZTcxLAorCTB4ZGM4NmNkNjUsIDB4M2IyMzliODksIDB4MmI1MmNiOTcsIDB4NWVlMzRmZDcsIDB4OTY1MWVmZTAsIDB4NzFlOGI1MGUsCisJMHgwYmY0NzM3ZiwgMHg3YmExNmQ2ZiwgMHg4NmMyMGI3NCwgMHhkMjg5YmRlMCwgMHhhZjQ0NGMxNywgMHg2M2M1OGIxNiwKKwkweDEzZWYwZGJkLCAweDkwMzFmNDU4LCAweGVkY2E5YjNlLCAweDlmOTBiZDY5LCAweGNkZTk5NTVjLCAweDdiYTUyODQzLAorCTB4ZjBkZjcyMTIsIDB4OWU2NzkyZWMsIDB4ZTc5N2UzYzUsIDB4NzBkYTc3OTgsIDB4Mjc2NWRmYzAsIDB4YmJjYmQzZTcsCisJMHgwNjNmOGE1NCwgMHgxZjk2MjNlZiwgMHg2MWNjNjlkYywgMHg3ODhmYjEzNywgMHgzMmMzZmQ4MywgMHhkZmRlMjJkNiwKKwkweGYwN2RmZDBkLCAweGE5YWJlMWZlLCAweDA2ODdmYmMxLCAweDJhNWU0ZmJhLCAweDM3NzMwZmY2LCAweGU5NzcwNDI4LAorCTB4M2ZjZjdlMTIsIDB4OGRjNzk2MzcsIDB4ZmEwNTJlNGYsIDB4MWVkZTY5MWIsIDB4MGYzYzEwZWIsIDB4Mjk0ZWVkY2QsCisJMHhmODY2YmM1MywgMHgwYjBkYWVmNSwgMHgxM2Q5OGUyOCwgMHg2ZTcxODRmMSwgMHg4OWUyNmVmMSwgMHhhZTNhNDczMCwKKwkweDA4NWU0YmYzLCAweGZlOTZmYzIzLCAweDdlNWZlZTZhLCAweGZhZjc4NTk5LCAweGQ3MDJlMjBhLCAweDJmOTFmYmQ1LAorCTB4ZGUxOTdlMzgsIDB4OWNmZDk0MWYsIDB4N2E2M2Y2NWUsIDB4NDVmNzMxYTcsIDB4N2NjMzFmNTgsIDB4YWJkODYzNGEsCisJMHhiZDIwNjdmNywgMHg5ZjcxZDI5MiwgMHg1ZDJiYjY1MywgMHhiYzVlYTNmZSwgMHg2MWFmYWMxZCwgMHg0YWI0NWQxZCwKKwkweGVjYzdlZmU1LCAweDA0MWQ5MTM2LCAweDAxNjQ0ZjU5LCAweGFkNjcyY2Y3LCAweDcyMzQ2ODM4LCAweDg3MTJjNjNiLAorCTB4ZWVkYWZmMDksIDB4MWM3NjlmYmYsIDB4NmVlYWYxZWEsIDB4MjY4N2I4YTUsIDB4NTFlZjI3ZjEsIDB4ZmJmOGU5MTUsCisJMHg4NTNhODU3NCwgMHgyNjgxNTdlZSwgMHg5NzQ5N2JhMywgMHg3YjVmYjk1MywgMHg2NzlmOTUzYSwgMHhkMDc3NGEyOCwKKwkweGI1ZjI5Y2ZkLCAweDBjZjJjNzI2LCAweDdkZmI0ZmRlLCAweDk1ZGY1ODRmLCAweDY4NGI5YWViLCAweDI2ZjdmMzNmLAorCTB4YWU1NGFiOGEsIDB4NDU4NjczMDgsIDB4M2IxN2YzZjEsIDB4NmFmOWQwMDYsIDB4NTFmMDExYmQsIDB4ZTJmYWU3NjYsCisJMHhhNTZmOThiMiwgMHg3NDVkZDI3ZCwgMHg4ZWNmNDE5ZiwgMHhkY2JlYTFlOCwgMHg3OTYzZjVjMiwgMHg5MjNkZTAwYywKKwkweDE4NmU4YTMzLCAweGU4Yzc2N2JlLCAweDliZjYyNGRjLCAweDdjNjAyODM0LCAweDNmNDM5NDQ1LCAweGJmN2YyOGY2LAorCTB4ODM1NjNhNGQsIDB4ZGY2YzFiNzEsIDB4MzFlMjEwNzcsIDB4ODQ3NGRhNzYsIDB4ZTQ5NTE1ZWYsIDB4NzZiNDkwMTksCisJMHhhZjdkZmEwNCwgMHhkZWI4OTlhOCwgMHg2ZmI1NWEyZSwgMHhmOWRmZWExYywgMHg4ZGUzMDdkYiwgMHhlYWY0NTYwOSwKKwkweGU2M2Y2NDA3LCAweDg4YjdmYTBiLCAweDkwYzU2NzczLCAweDIyYjY3N2M3LCAweGI5M2NiOGQyLCAweDhhMmYxZTU1LAorCTB4ZWYzNDUzNDgsIDB4ZjJmYWM5MTAsIDB4YmYxZTA2NTUsIDB4OGE4ZjNkMDcsIDB4YzdkOTdjYTUsIDB4YTViOTZmZDQsCisJMHg2ZmY1MDEzOSwgMHgzMGMzNmVmOSwgMHg2OTUxZDNkNCwgMHg5NzhiMmU1YywgMHgwMTFmNjVhNSwgMHg0NDM2MmFiZSwKKwkweDY1ODNiYmQzLCAweGU2MjMwMjllLCAweGNhMTU2YWNiLCAweDRmOGJiZmZiLCAweGJmM2QzZTQ3LCAweGU0MjhiNWUyLAorCTB4YmU2MTEzOWYsIDB4NWE5NzY4OWUsIDB4ZTgzOTg0MTcsIDB4Yzc5NWExZGUsIDB4ZThhZmNlZWIsIDB4NjY5NWY3NDksCisJMHhmODJkOWI1OSwgMHg0NWFjYzE5ZSwgMHhiZmE4NmRkZCwgMHg0NjdkNWE4ZiwgMHg5NzVhM2ZhYywgMHhkM2JjYzNhMSwKKwkweGJjYzZjZDZhLCAweGU1MWI3ZjUzLCAweDJkZjM4YmNmLCAweGE1N2M4M2Y0LCAweDZkOTczYTcwLCAweGJmYzQ2N2RiLAorCTB4Y2M0NDMyNGYsIDB4MWYyYmUyZjcsIDB4NGZmOGMyZjQsIDB4MmY3MzdhNzksIDB4MDdjMDJiYjQsIDB4Y2YxMDUyYmQsCisJMHg5NzY0MjkyZiwgMHhmM2YxYjYyYiwgMHgyYTBmOTJlZSwgMHhlZTQwMGY5MCwgMHhhODNlMDllNiwgMHhmN2RhZjVkOCwKKwkweDkwMmExZTUxLCAweGYyM2E0M2ZlLCAweDdlZjNmMDExLCAweDcxYjFkZjJhLCAweGVmZGZlMzFjLCAweDc2OTEzZTQ3LAorCTB4MGMyYmYyMGMsIDB4ZjFkZjhjMzYsIDB4YTcxYTY2N2MsIDB4ZTE4Zjk0M2YsIDB4ZmMwMTllZTUsIDB4MzlmYjVkMWMsCisJMHg3NDFjOGQwNCwgMHgxYTU3NWY0NiwgMHhjYmM1ODdiNywgMHg1ZDZmYTQ0YywgMHg1YTFlNWM2OSwgMHg0MjhlZWQ1NiwKKwkweDY1N2M1ZGZhLCAweDY3ZGMwMWRmLCAweDU2MDFkZjI5LCAweDFlNDIxZWRhLCAweDcxMmEzZTA0LCAweDNmMDQ1MWZlLAorCTB4Mzg5NTE3ZjksIDB4ZmNmZjI4ZGYsIDB4Yzg1ZWY5ZGIsIDB4ZjNlMzI1NjEsIDB4ZDRhZGYzOTMsIDB4N2FjYmY5OGIsCisJMHhjMTI0ZmRmMSwgMHhlMDRjNjUyZiwgMHgyZTZmNTc2YiwgMHg1MGNlNDI3NywgMHgwZWJkZTk4ZSwgMHg0ZGI3M2YzMSwKKwkweGY3ZTUwZWZiLCAweDIyZGNmY2M1LCAweDI4YmFkNjY1LCAweDE3ZDIwZmM0LCAweDEwM2UwZmY1LCAweDA0ZmE5NDY5LAorCTB4YmVkYzVjOWEsIDB4NGJmMWNlOTEsIDB4NTdmODQ5N2EsIDB4ZGY0MDM4MDksIDB4N2U2YzYzMzksIDB4ZjI3NGI2M2EsCisJMHhlMDk1NjQ0ZSwgMHg3NzhmNjM5YiwgMHhmYzA3YWY0OSwgMHhjZjRhZGY5ZCwgMHhlYWJmMTE2YywgMHg3YzkzYzYwMywKKwkweDdkY2JjNzIzLCAweDM4ZGRkMjc5LCAweDg3ZGZlODZmLCAweDhmNzFjYmZkLCAweGQ4ZjQyMjdhLCAweGU1YzY1MWNmLAorCTB4ZTUyZmMyNDMsIDB4YTFmYWI3MzIsIDB4NjE0NzA3YmIsIDB4ZWU5NjhiYmIsIDB4OWNkZTcwMDMsIDB4YWNkMmFiOGUsCisJMHhmZDEzYmRmNCwgMHg1OWRlZjgwNSwgMHhmYWRjNTBhZiwgMHgxZmU3NTg5OCwgMHhhOGI1ZmM3YiwgMHg3ZTdlMDFlMiwKKwkweDI3N2M0MjdmLCAweDMwN2YwY2Y5LCAweDZkZTEyNjNlLCAweDcwMzhmMWIyLCAweDBmNTJkYzMwLCAweDlmNzNiODQ5LAorCTB4MmM2ZWVmYjgsIDB4YmVlM2YwOTcsIDB4NGE5ZjIwNTEsIDB4OTU3ZTRhM2MsIDB4Zjk4MmY1ZjcsIDB4ZGE0ZTc4OTYsCisJMHhmZTczYjU0ZiwgMHg0NjNkNGNhZSwgMHg5NDNhNzdlNywgMHhmYzI3ZjcwNywgMHg1Y2UyMTNhMiwgMHhlMzNjNmI3OSwKKwkweDg5MTVmZjcxLCAweDhhZjczNWZiLCAweGI0MGM4YjE4LCAweGMwOGVkMjNmLCAweDgwN2QxYWNmLCAweGE3YmY2OWZkLAorCTB4OGIzY2U3MTYsIDB4ZDY5MGJiNzQsIDB4YzczZmZhOGQsIDB4ZDAzOThjZWEsIDB4ZTY5OWQ5NmYsIDB4OWRjZWY4NzEsCisJMHhiOGVmNDNmNCwgMHgzMWEzNTNlYSwgMHg5ZjhiYjU1ZSwgMHg1MmZjOTM3NywgMHhjOTNmNjE3NiwgMHhmZmI4Yjk0MSwKKwkweDgzZWFiNDU0LCAweGVmYzhlMTgyLCAweGJlZDAzNWJmLCAweDYzZTNkMTRlLCAweGNmZGZlODhkLCAweDE4NzMzMmRkLAorCTB4NDFlZjAxYTIsIDB4YmIzZjVlYTAsIDB4YmYyNjY4NzksIDB4OTg0ZDYwNTksIDB4MzYyMWY3ODYsIDB4MDFlZDMzM2YsCisJMHhhZjU1OWYyOCwgMHhkODBkYmJkMiwgMHhkMTZmY2EwZiwgMHg1ZjE0OTlhMywgMHg1MmQ2MTEzZCwgMHhmOGZkMGEzMCwKKwkweGY0NTZhODFmLCAweDMyZGY2ZmUzLCAweDdmNmMzMWY0LCAweDBjNmJhNWJiLCAweDM5YjFiNjNkLCAweDdkNGVmMjk2LAorCTB4ZTkwN2Q5MzQsIDB4ODA3M2NhZjcsIDB4YzdkZWUyZDUsIDB4M2ZkZTg0NWYsIDB4ZTIyYTllZGMsIDB4MmY3NTVmZmMsCisJMHhkZDZmOGZkYywgMHhhY2VmNDYxOCwgMHg3NWVkMWExNCwgMHg0ZjZmMWMzZSwgMHg1NDY3NWExNywgMHgyM2VhZjExYSwKKwkweGJmMjU1YmRkLCAweDk5OTE4ZTZjLCAweGI5NTA4NjkzLCAweDBmY2EwOTM5LCAweDQ1MWY5YTFhLCAweDUxZjA3MjNiLAorCTB4M2Y3YzYwY2IsIDB4ODZkN2E5OTIsIDB4OWE3ZjczMTUsIDB4NmFjNjNiZWYsIDB4NzA5MTJkZGYsIDB4MGZjNjI0N2MsCisJMHhkZjdlNGZlZSwgMHgxYjA4ZWI4NCwgMHhlZmE0NGZkZCwgMHhlZGY4YWVjZiwgMHg2NzgzYjQzNCwgMHhlMWI0ZjZiNywKKwkweDA5ZWY0ZmJjLCAweGE3MDNmYmEzLCAweGNmNzdkYTBkLCAweDU3ZGVmNTZlLCAweDc5Mjk3ZGYwLCAweDlhNzRmNTZmLAorCTB4ZmM5MzhmZDYsIDB4Mzc3YmMzN2UsIDB4ODM5ZWQzN2YsIDB4YTViOWQxYmMsIDB4ZGQxOTRiMGIsIDB4OGQzOTdlZmIsCisJMHgyMjYzZjdkMSwgMHhlNzg5ZGFiZSwgMHg0ZDZhNGIwOCwgMHg3MzA3YmM1NiwgMHhmNzFlZjkxMiwgMHhmY2FiNzZiMywKKwkweGNiOTlhNWZlLCAweDk5ZGRjOWMxLCAweGU0YjdiZjc0LCAweDUyNWYzYzZmLCAweDNlZjE3OGE3LCAweDlmYTdmZWYyLAorCTB4YjMwYWYzYTAsIDB4YWJjNGNmYzEsIDB4ZjNmZWVkMDksIDB4YTFhN2E3YmEsIDB4Yjg3NjVjMzgsIDB4ZmU3ZGUyNTcsCisJMHhmOWY5NWJjYiwgMHgzMmVmMGU4YSwgMHgyMDc5ZGMxYywgMHhkZmI5ZGVjOSwgMHhjYmZiNWRmYywgMHg5ZjExMGUzMiwKKwkweDJmY2ZiZGFlLCAweDRmZDcyY2YxLCAweDhjM2YwMjZmLCAweGRiYzdlMjE4LCAweDkwZTc0YjY3LCAweGE5NjE3Y2JmLAorCTB4Y2E0YmQyOWIsIDB4MjNiN2I1YjEsIDB4ZTlhMjViMWYsIDB4ZWIxZmMwYmUsIDB4YmRmMTUxOWYsIDB4ODM1ZGYyYTgsCisJMHg3ODNhZTFhZiwgMHhiZDM0NjQ1NCwgMHhkMmQ5ZjI5MywgMHg3YThmYjQyNSwgMHhhNTE1Njk2MSwgMHgwZTMyZGU5MiwKKwkweDQ2YWVjNzc3LCAweGZhYjNlZWZhLCAweDlmYmMwNmNjLCAweGI0NjQ0NmZiLCAweDkwYjYwM2IwLCAweGRlZWNlZDc0LAorCTB4YjlkNzljYjEsIDB4NGFmYTcwMWYsIDB4OWQ2ZGNmYjgsIDB4NmFmMzg1MTksIDB4NjFiNjNlN2MsIDB4MjIzNWQyMjQsCisJMHg1ZjdlOGFkYSwgMHg3MjQ3MzhhOSwgMHhhYmY3M2Q2YSwgMHg3ZmEzOThjZiwgMHgzZGY0MGY5MywgMHgwMjRhNjFiMywKKwkweGJiMzczN2JlLCAweDU4NjlkZWYxLCAweGIxNDdiMjVlLCAweGIxYzA3YWUyLCAweGFlMTQ1MjY3LCAweGI3ZDUzZWRiLAorCTB4YThmZGUxNDQsIDB4N2JjYmQ3NGYsIDB4M2JmYTVlNTUsIDB4ZDhmMmEzNTQsIDB4Y2EzZjZjMTQsIDB4MGNmNjY3YTcsCisJMHg3YzhkNzViZSwgMHg5ZTgyZjIzMiwgMHg4NzllYmZlZSwgMHg1YzkzOGE3MiwgMHgwOTM4YTcwYiwgMHhiOWUyYzRmYywKKwkweGYzYWZkOTkxLCAweDNhZmI0YWY4LCAweDZlZjNhYzU3LCAweDM0N2VmMzE3LCAweDMxZjcyNmRkLCAweDA0NzczY2E4LAorCTB4NjFiZDNmMmYsIDB4ZWZlYzQ0ZTcsIDB4MTU4MzY2ZWMsIDB4YjM2Y2ZlZTEsIDB4MDc5ZmZhODEsIDB4YzAxZDMzZWIsCisJMHg1ZjJiNjY3YiwgMHhkNzFlNjBmNywgMHhmMmI3NjdjYiwgMHgzYWJjY2RmNSwgMHg1ZjI5YmViZSwgMHhmYmYyNzA2MCwKKwkweGNjN2U1YWEyLCAweGVmNDc2ODBkLCAweDVlZjI3NGZiLCAweDlmMjczY2M4LCAweDk3YjAzY2RmLCAweGJlNjBkZjM4LAorCTB4NzQ3NTYxOGQsIDB4OWU5YmVjOGYsIDB4ZGJlNjBkMTcsIDB4ODU1ZjkyZjksIDB4ZDdlNzY4N2UsIDB4ZTA0NGY4Y2UsCisJMHhmOTFkZTUxMywgMHhiY2MzZjI1NSwgMHhkZWRmN2NmNSwgMHgwNzM4Mzc1NiwgMHg0N2YyNGVmOSwgMHhkNTU5M2JmMCwKKwkweDU3ZGZjNjQ2LCAweDdiZDM4NWQ0LCAweGVkMjI5M2I4LCAweDUzMGZiNDA2LCAweDIwYzY1YWUyLCAweGU3NGUzZTVhLAorCTB4YWI5YTgwN2UsIDB4MzdiZGUyNzMsIDB4ZjkwYTZkNTYsIDB4NzQ4YWNlY2UsIDB4NzQ0NTU3ZWUsIDB4ZGVlZmM0NjUsCisJMHhjZjNmMmI3NCwgMHhjOTdmZWUyOSwgMHg4NjkyMjYxNCwgMHg4NDUyN2I3NiwgMHgzNDNiMGJlZCwgMHhhZWZkM2E3OSwKKwkweGNmYzBmNDdiLCAweDNkYjc2ZTkzLCAweGQ4YzFkZGRhLCAweGVlMGJkMzJmLCAweDI2N2NjM2QxLCAweDc3NzZkYTY1LAorCTB4YmZmM2ZjODMsIDB4YjdmM2MwOWEsIDB4MjAxYTg2ZDksIDB4Nzg5OTRjYmYsIDB4ZDdjODE4Y2YsIDB4NGE5ZjNiYTcsCisJMHhlY2U3MTgwZiwgMHgzODY5MmU5NiwgMHgxOWZmMjgzZiwgMHhiYmM1ZDc5NiwgMHhhNTY5OGU3ZiwgMHg0OTc2MGZiOCwKKwkweDI0YjQxZDY5LCAweGZkZmVkZmMzLCAweDdmYTM5NjNkLCAweDJkZjNmYmI0LCAweDE4ZWU5NjA2LCAweDdmMDk3OTgwLAorCTB4ZGQyNWI0ZTgsIDB4ZjhmNGFiZjksIDB4OGNjNWU1OGUsIDB4ZjVlNzRlM2QsIDB4MGUxZWZjM2MsIDB4MDljY2I4ZmMsCisJMHhmMzhhNGY3OCwgMHg5N2JjYjE1YiwgMHgyZjc0MTM1MywgMHg5ZmVmYzFjNywgMHhmMjUyZmJjOSwgMHhmZjVmNTQzZSwKKwkweGI3MGRiMjdkLCAweDkyZWM5ZjcyLCAweDJhMWRmZjgxLCAweDBmYmRhOWM1LCAweDg5ZmMzNGE2LCAweGY2YTlmOWRlLAorCTB4YTIzMDk2YjAsIDB4NGQ5ZWY2ODMsIDB4Nzc1M2JlMzksIDB4YTIwYmRkMWIsIDB4NmY0Yzg3ZmIsIDB4NTczMzdkMjcsCisJMHhhYzY4M2JmYSwgMHgyOWRmZjk4NywgMHhmY2ZjODk2MCwgMHgxZjgyYTNjMSwgMHgzZDY1MmY0ZiwgMHg5ZmU4ODA3YSwKKwkweGNhMzliNzdmLCAweDk4NWM3MDBlLCAweGZhODVlYmU4LCAweGZkZGMzMjIwLCAweGU5ZDdjNDI3LCAweDBiYTlkNTBkLAorCTB4YWExZWYwZTMsIDB4ZWQwZjkxYzksIDB4N2RmOTc4Y2YsIDB4YjdlMTMyY2UsIDB4NDJmMWNkYjIsIDB4M2JiZWE4MmYsCisJMHg0NjUzNWRhMSwgMHg4NzY4NGRkZiwgMHg3NTdjMTdkZSwgMHhmZTk3YzMyMSwgMHgxOTJiZDQyMywgMHhlZDA0OWQ3YywKKwkweGRlNWQzY2U4LCAweGIxZTJiYmYyLCAweDRmZWQ4NWRkLCAweDcwMGQ5OGY0LCAweGJjMDYwMDliLCAweGZhMWUzNWE3LAorCTB4ZjdhMzYxMWMsIDB4ZmI0YTk4YWEsIDB4N2VmZTVlY2YsIDB4YTI3OTllOTIsIDB4ZDVlZWY4NmMsIDB4M2VlMmU5MzMsCisJMHg5NDEzZGQxMSwgMHhlZmY4OTI3NCwgMHgxYTE4MTc0MCwgMHg5OTlkNTlmZCwgMHhiZWVlMTAxOSwgMHhmZGZkMDM2YywKKwkweGY5MWY0OTJmLCAweGRkYzJlMmNlLCAweDc3NDJmZTNjLCAweGUzMWU0NTI0LCAweGUyY2RhNzQ4LCAweGIwNzU5ZmVmLAorCTB4YmY5MTZmOGIsIDB4ZDFlOTYyMGEsIDB4MzMwZDlmZTgsIDB4MTFjOWRiNDMsIDB4ZjVkODhkMWIsIDB4ZmYyZjZkNzcsCisJMHg5MmZjMmU5ZCwgMHhlMDcwNmNjMSwgMHhhMmE1OTIzYiwgMHhkMGI1NThjZCwgMHgyZDViZWY4ZSwgMHg3YmQzMzc4YywKKwkweGU4NWYwYjI1LCAweDk2YzFmYzRlLCAweGI2MDU5MGZjLCAweDg5NjIxYjYzLCAweGE4NjY1NjVmLCAweGY1YjlmZjg0LAorCTB4MmExZGRlOGMsIDB4ZjNhNjRmYTgsIDB4MzZmNWY5OTQsIDB4MTJkYWEzNGEsIDB4NmZlY2ZjYTksIDB4N2FlMmM5ZGUsCisJMHhlMGE3ZDM4OSwgMHhhNjhjYmE3ZiwgMHhkM2ZmNGI3MywgMHhkOWQ2NTI5YiwgMHg2NjkxYTc3YiwgMHhmMGJiY2ZiYSwKKwkweDBiNmJiNzIwLCAweGM3YmZjYWE3LCAweGJiYWZlZmMyLCAweGM4YWUzODA0LCAweGI5MGI4YTFhLCAweGU3NTNkYzNhLAorCTB4ZjBiYTU3ZWYsIDB4ZTc3ZTAwYmUsIDB4Njc3ZDUwMzQsIDB4ZmM0YTU3ZWYsIDB4ODJkZDA0OWEsIDB4N2E5Y2IzZGYsCisJMHhkZTkxMzMzMCwgMHg1OWVmMTQ3ZiwgMHg5YWVkMTc0ZSwgMHhjZWIzYmRjNSwgMHg0ZmJjYjVkZSwgMHg2YTIyN2JiNCwKKwkweGRkZjIxMzVjLCAweGM4Njk2Nzc0LCAweDllZjUyZDc3LCAweGNmZmEwNzMwLCAweDdhNDhkNDg2LCAweDM3M2VlMTQ3LAorCTB4ZjU5YTk3ZjgsIDB4ZjExZThiNGMsIDB4YmY5YjJkMzAsIDB4YmE3NTM5NzMsIDB4ZmQ5MGRlYjYsIDB4NDM3M2U5MzksCisJMHg5Mjc3ODc3NiwgMHg0ZDhmYTgwYywgMHhlY2ZiNmQyZSwgMHhmNTBlYzJhZSwgMHhmNmJmN2Q2NSwgMHgyMzU0ZDE1ZCwKKwkweGJlM2Q0ZmQ5LCAweDY5ZjkwYjNiLCAweGY0NTE1ZGUyLCAweGJmZmZkMTBmLCAweGZmMTBiNGVjLCAweGI4M2JjNDliLAorCTB4MTEyYjJjY2QsIDB4YmVhZGMyZjUsIDB4ZGJmZmZiMjcsIDB4ZWZjMWIxZmIsIDB4MDNiZjA2YzQsIDB4NDJlYjdmZGIsCisJMHhkZDYwN2U0ZCwgMHg2ZmVkMzUwZiwgMHhhOWFlNWZhYiwgMHhhZDViZWMxZiwgMHhmYTZjY2ZhOSwgMHhiNDNmMjY5OSwKKwkweGZiNGQzOWY5LCAweDY5MzY0N2UxLCAweGJjYjY0N2VhLCAweGZkYmZhOWE0LCAweGZlNGQwZWNjLCAweDY4M2ZkNjhlLAorCTB4YjZkOWRmZGEsIDB4NjFjZjkzNTcsIDB4ZTdkYTY4ZWYsIDB4ZTRkMDNmOWEsIDB4NTdmZjVhYzcsIDB4YzRhZWZlZDMsCisJMHhmMWZhOWExMywgMHhmYTlhZjNmNiwgMHg2OGFlN2QwOSwgMHgyZjhlMDVmMiwgMHgzNzNmZWQzNSwgMHg0NTc3NTdiYSwKKwkweDBjZWEyMmJmLCAweDQzM2FhZGYxLCAweGY5NDRmODYxLCAweDY2MjlhNmU1LCAweGJhNmIwN2Q0LCAweGY4MjQ3ZDBhLAorCTB4ZDNiMGI5NmYsIDB4N2JhMzA3YWMsIDB4NmNkNTYzYWMsIDB4M2Q1ZmYxMWYsIDB4YzFhMGJiZmYsIDB4ZGU3ZjRmNzYsCisJMHgxZmY4YzRlNSwgMHg2YmRmOGQ3YiwgMHg1MjdmMDY4YiwgMHg4YzdlMzAxZiwgMHhmZjAyY2NkMywgMHg5ZTZjNWRlZSwKKwkweDc3OGY5MzU1LCAweDc3ZGE2YTI1LCAweGQ0ZDc2ZTk5LCAweDY4ZmJiOTI3LCAweDM4ZTY1M2VhLCAweGFhYjRmOTM0LAorCTB4NWRmNjlhMTEsIDB4ZjkzNTM4OTcsIDB4YTY5ZTRmMGMsIDB4OTcxYWY3N2QsIDB4NzZiM2RmMjYsIDB4ZWY3ZGE2YmEsCisJMHg3ZDRkNmVmNSwgMHg0ZDFjZWY1ZiwgMHg1NWFkZmY3ZCwgMHhiYWMwZmM5YSwgMHhiN2Y2OWEyNSwgMHhmNTM0N2JkNSwKKwkweDlhMzU3ZDgzLCAweDVhYTZjY2ZhLCAweGYzNjg3ZTRkLCAweGUxZmI0ZDdhLCAweGZhOWFiYzQ3LCAweDM1NWIyZDkxLAorCTB4YTk5ZmI3ZjUsIDB4NjhlZmU0ZDMsIDB4YmZiNGQ3YWQsIDB4YzlhN2NkYjMsIDB4OWE4M2IwZTcsIDB4ZjdlNmI5ZjYsCisJMHhkNmIxZjkzNSwgMHhlZmVkMzQ0ZiwgMHhhOWE2M2M0YSwgMHhhYjNmNmYxZiwgMHhjZTdlOTdhOSwgMHg2YjlmM2U4NCwKKwkweDUzZGY4NWNiLCAweGU2OTdmOGUwLCAweDZlZjdmNmZiLCAweDFmNzQyODc3LCAweDZlZDc1Y2VhLCAweDk2YzU3ZGYyLAorCTB4MjRmZDE1MzAsIDB4NmM5OWM1MTcsIDB4ZjUxMTEwNzgsIDB4YjcyN2RlMTUsIDB4ODUzOWYzZjEsIDB4MjM4YWFmMTQsCisJMHg5NDRjODg3ZiwgMHg4MTBiY2YxZCwgMHhhYjg1MTBkZiwgMHhmNDBjOGNiNiwgMHhmZWZjMjNhYiwgMHhjY2Y1ZWE1YiwKKwkweGRhZGZmNzliLCAweGQ1ZGNmZjg0LCAweGYyODhiZWVlLCAweGZiNmVhZjMxLCAweDk4OWY3YTM4LCAweDFjMjI1Njc5LAorCTB4NzdiZmZkZjIsIDB4OTU2ZGRlODMsIDB4MTlmMzc4ZTksIDB4MTdmMDBmYTYsIDB4YTZkNTg2MGYsIDB4Mzg5YWY5MGUsCisJMHgwNWYzNzhjMSwgMHhiNmMxZWY4NiwgMHgyMmUyMmJmNywgMHgxN2JkYzdmOCwgMHgxNmJmZjQwNiwgMHhmN2Y4MTdkNiwKKwkweDlhOTc2YjIzLCAweGZmYzc2ZmU5LCAweGYyOTVhOTZjLCAweDUyMjY5NmViLCAweDNhMDBmZmZlLCAweDAwNDdiZjI5LAorCTB4MDAwMDQ3YmYsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDU1NDc4MGIsIDB4ZWVkZDcwOTYsCisJMHg5ZDI0OGZkYiwgMHg3Nzc1NzlkMCwgMHg0OTNjZGM5ZSwgMHhmMDlkMDg0OCwgMHgzYTNlMDBkOCwgMHhjMDQwNjAyMSwKKwkweDQ5MDQzNWU2LCAweDQxYThjMWE0LCAweGY4ODFiYTQzLCAweGJiNzU3NDRmLCAweGIyMDIxMDMxLCAweDEwZDE5MWIzLAorCTB4MDE4NmMxOTUsIDB4MDk5ZDE5NjQsIDB4MDlkMWEzMmUsIDB4ZTA5YWYwOWEsIDB4MWM2MDRjM2EsIDB4MzcxOWQ5YzUsCisJMHg4ZWUyYTNhMCwgMHhjZmUzMWUxMCwgMHg3ZmMzOGZlZSwgMHg5MzdiYTljZSwgMHgzODBlOWRiZSwgMHhmN2ZmM2FmZSwKKwkweGI0ZmJmYTNmLCAweGFiNzU1NTM4LCAweDczOWQ1NTRlLCAweDJhYWEzY2VhLCAweDg5ODk1ZWFkLCAweGRlNmQ2MzIyLAorCTB4ZjM5ZjRhMWMsIDB4Yzk5ODk5ZGEsIDB4MzE2ZjM2ZDgsIDB4MGViZGRiYzEsIDB4NzJkZWZkODIsIDB4OWQ3YTc3NGEsCisJMHg1YmNiYmY5NCwgMHhhZjFlZjA0MSwgMHhkZWJkZDI4YiwgMHg3OWY3NGExYSwgMHg5MmZlNTQzZCwgMHg5ZmUwODFiNywKKwkweGI2OTQ3ZDdhLCAweGZmMjk5YjdiLCAweGMxMGI2ZjE1LCAweDA0NmRiYzA3LCAweDUzZjVlYWJmLCAweDRiZGRlMWRhLAorCTB4NzZkZTFiZTksIDB4NzZmNGVmMmEsIDB4YjdhNmZjMTAsIDB4NmYyZWUwOGIsIDB4YmM4N2MxMGYsIDB4ZjExZjA0YmQsCisJMHg5OGY4MjY5ZSwgMHgxZWQyOGZiNywgMHhiZTk0NjdlZiwgMHhmMmE3ZWRlZCwgMHgwOTU3YmM3NywgMHhkYmJmOGViZSwKKwkweGNkMmFmYzE5LCAweDI2MzFlNDlmLCAweDdhZTY5NzMwLCAweGM5Y2NjMjFlLCAweDAwZjYzMjI2LCAweGZmODI0YmZlLAorCTB4Y2M4ODQ2ZTIsIDB4OGNmZGQ4YzIsIDB4YjBkNzNlZmYsIDB4OTQxMzc2OWEsIDB4M2ZmMmZlNzcsIDB4NzRjNjAyODUsCisJMHgxZjhkOGNhNSwgMHhmNjYyNjkwZiwgMHhjNjM0YzZjZSwgMHhlNjc1YjAyNiwgMHhkMzE4NzI0ZiwgMHg2M2Q3NTc0MCwKKwkweDRlMDlmYjA3LCAweGQ2MTkxMzE5LCAweDJkNzVkZmMzLCAweDU4YzdkZmZlLCAweDk0YmZmYzNjLCAweDgzNGM3OGU1LAorCTB4MTQwOTUzNjksIDB4NTViZWZiNDIsIDB4MWE3NzdmODIsIDB4M2UyMGQ3NTUsIDB4YmYxYzhkYWIsIDB4OTUxMzVhNjksCisJMHhmODJjM2U1NywgMHg1NTYzMDIwZCwgMHg4YmU5ZjMyMiwgMHg1ODdkZmIxOCwgMHhjMTFiMDE1NCwgMHgyZThmMjVkOCwKKwkweDIxNzJjNDQ3LCAweDA0ODMwZWRjLCAweDQ0M2E4ZmY4LCAweDJjNWQ3ZTBlLCAweDlkYTViMThlLCAweGQyOWIxZDg2LAorCTB4ODRhYWYxMDYsIDB4ZmRmMDM1ZWYsIDB4MGMxYTU2MmIsIDB4M2EzZDY0YWIsIDB4MWRmMjAzYzQsIDB4OWVjNjE4ZGEsCisJMHg0YmE2YjhiNywgMHg4YTYwZmY5MCwgMHhmNjg3YTdjNiwgMHhlZDlmYzk5OSwgMHgyZGVjNjQ4YywgMHhlNjA2NmI4YiwKKwkweDc3ZGNmMjVmLCAweGMwN2YxYjBjLCAweDdlYzZjZjZjLCAweGUyYmExYjY2LCAweGZkZmY0MTE3LCAweDlkZjZiNWM3LAorCTB4ZTFmM2YwZDIsIDB4NmM2NzI5NmUsIDB4ZGZjYTBkZGMsIDB4MDJlYzk3M2MsIDB4YTJmZmNhM2MsIDB4OWZmY2UxNzUsCisJMHhmODU2NDVkMCwgMHg0OTJmMDFmMywgMHgxYTRhNzhlMCwgMHhlYWRiM2E1NSwgMHg3Y2Y4ODI1YSwgMHg0N2I5ZTkxOSwKKwkweGU1Zjg1MzAzLCAweGFjZjZhYjZkLCAweGFlNTUyMTgxLCAweDgyZTExYWNhLCAweDI1ODJlZWVmLCAweGNkOGMxOTYzLAorCTB4NDE4ZTkyNjUsIDB4MzhlNjdjZjksIDB4MmQ0ZDA2OWEsIDB4MTc4MjJlNjQsIDB4NmZhNTFmMzEsIDB4YjFhYWJiYzUsCisJMHg0ZmNjYzU5ZCwgMHgyMWIyNmJiMCwgMHg4MmI4ZDQzNSwgMHg3OGNiNzJmMSwgMHg5NDdjNjViOSwgMHhhYmFiNzFmNCwKKwkweDIwZTVlMzhlLCAweGJhNGM0ZWJjLCAweGE1YzcxYjIzLCAweDU1OTZmNWUwLCAweDU4NzM3YWEyLCAweGVmYzQ3NmZmLAorCTB4M2YxNzgzY2IsIDB4ZDI4NjMyMTEsIDB4MTc0MDc3YzcsIDB4ZWIxZTY4MjYsIDB4NzNhYzNkMzEsIDB4ZjdkMThlYTMsCisJMHg3ZTA4OGY4ZCwgMHgyZTg1NmJhNCwgMHhiNzkxOTkyYSwgMHgwYmU0MThmYiwgMHhmNDAyNzQ4MSwgMHhkMmZjODQ1MSwKKwkweDkyMzczYTlmLCAweDA5NDllNGU4LCAweDkyNzA3YzFhLCAweDBiMWZhN2Q2LCAweGIzZjhkNGUzLCAweDg3ZDEyZDA1LAorCTB4MWVmYzAwNWUsIDB4NDhmYTAzODgsIDB4ZWEwZTllMWYsIDB4ZTAwZDIxOWEsIDB4NjdhZmEwMWYsIDB4YWZmM2JkYjAsCisJMHhjZTBlNWRmZiwgMHg0OWNkZmI5NywgMHhhMzU3Y2UxMiwgMHhlODAxZDYwNiwgMHhkNmI2ZjdkOCwgMHg5OTkyNWJiZSwKKwkweDk0ZWQ2MDE0LCAweDZiYTQ3ZTMxLCAweDczZWRkYTI2LCAweGIxN2FlMGM3LCAweGRmYTg0ZWE1LCAweGZiMGQ2NWFkLAorCTB4ZmJmNjg3ZjMsIDB4YjQxN2FlMmEsIDB4MmJhNmMyN2YsIDB4OWNiYjUzZjcsIDB4OWZmMjk1Y2YsIDB4NjNjNWZhZTIsCisJMHg1ZWFkZWJjYSwgMHgxNmFkNjlmNSwgMHhlODcxM2ZmMCwgMHgxMzFhNWU5YywgMHg2ZjBkMWM2MiwgMHhlMDA2NjZlNywKKwkweDMzMzhlZWVmLCAweGU0NDI2MWRkLCAweDQ1ZTdmMmZhLCAweDk0OWZlNjBlLCAweDFmYTE0NGU5LCAweGI1ZDIzZWFkLAorCTB4MTc4ODE0YzMsIDB4ZjllODE3ZWYsIDB4ZDEzNzQ0ZTcsIDB4NDQxOWNmNDAsIDB4ZTBmODlmY2YsIDB4NjkwNjM5ZDMsCisJMHhmYjQ4MjJjNCwgMHgyMGJhNmE2MCwgMHhkNjYwYmQ3NSwgMHg2NzJjZGQyMywgMHg5OWFiNGE3NiwgMHg2MDA3ZDI5MywKKwkweDlkN2U5MWY5LCAweDM4ZjRhN2JlLCAweDc2YjIwZmVmLCAweGJlMmJhZmNhLCAweDdjZjQ4MmQ3LCAweDhhOTVjNmJmLAorCTB4YTVlYjJkNzAsIDB4MmZlYjM3N2MsIDB4MmRmY2MxYjMsIDB4ZDQ3YjVlNmMsIDB4NmZjZjU4MDYsIDB4MDI1YTZhNzksCisJMHhmZjNjZWZjYywgMHhjZTk4YTNiMiwgMHhlMjdjMjVkZCwgMHg3YTNmODg5MywgMHhjMTNlYWYxMCwgMHhmYTExM2ViMywKKwkweDkyYTVmYmJmLCAweDNmOTA0OWY1LCAweDg1ZDdjYjQ3LCAweDE3NWYyYmZkLCAweDhmMDQ3ZTQ1LCAweDk3YTFmODFiLAorCTB4ZTM0MWNiOGYsIDB4YWI5NTQ2ZDIsIDB4MDlmMmExZjgsIDB4OWRhMDEwZTYsIDB4ZmYwNjgzZmUsIDB4ZmUwMGI0Y2UsCisJMHhkZmU4N2UyOCwgMHg4OThlNTA5MywgMHg3YWUwZjdmZCwgMHhjNDM0ZGZiYiwgMHgwODNmN2FlMCwgMHgyOWM3MWJlMiwKKwkweDgwNmIxODM4LCAweDJhZDY5MGZlLCAweDg4MmE4ODYzLCAweGUxNjIxZmRlLCAweGI5ZjdhYzc2LCAweGE3OWZkZjRjLAorCTB4Y2ZlZmEyMzAsIDB4NDA2MGU2MDUsIDB4YTY3NDE3YmYsIDB4NWFlNTAxNjYsIDB4MDQ1NmNiYWEsIDB4YmU2MGFjZjgsCisJMHg2ZWU1MDYyNiwgMHgzODA1NGJjZCwgMHhkNzI1MjM0ZiwgMHgxZmQ3NDRhNywgMHhhNjE1MzdiNSwgMHhhN2Y3ZmNhMSwKKwkweGY3ZmYyODBhLCAweDY5OGRlYzE5LCAweDVkODRmZGFhLCAweGUzMjE0MDhmLCAweDNmOWYzODYxLCAweDBlYzc3NmMwLAorCTB4M2UyODRiYzUsIDB4MTQ0MjlmZjYsIDB4ZjMzZDA2NjMsIDB4YmY4ODhiMTksIDB4ZWJlNDQ0ZDksIDB4NTdmMTNkNDQsCisJMHgwNjZkNGUyMywgMHgzYzk0ZTNmNiwgMHg5ZmVkYTFhNiwgMHhmOWVkZjE5MCwgMHhlZjc0NGI0YSwgMHgxNmVjZjE4MywKKwkweGY3YzNmNTQyLCAweDYwZjg0MzJiLCAweDJjM2YyNDNmLCAweGE3ZDFmYThjLCAweGZhNTYzZTcxLCAweDY0YmVhNjYzLAorCTB4NmE3NWQwMjcsIDB4ODY5NzRiODQsIDB4YzcxNmMxODIsIDB4Y2I5OThiZTUsIDB4NGZiNDllOTcsIDB4ZTY3ZDcxMzMsCisJMHhjOGE4ZGU0YywgMHhkZDhmNmE2NSwgMHgwOWQxZTVjNiwgMHhmODQzZTQ5ZCwgMHgxZDlhNDk0NCwgMHg5YzgwZDcyNCwKKwkweDk3ZjhhYmJkLCAweGJiOGYxMWE3LCAweDJkMmVhNjhjLCAweGRkMTZlY2E0LCAweDdkOTRmYTlmLCAweGZmNzA3ZDMwLAorCTB4N2ZkOTRiYmQsIDB4ZWZmYmUxNmYsIDB4ZWZiNTk5MWMsIDB4ZjFiYWJiMTIsIDB4M2FlY2M2N2IsIDB4ZmQ5NzJmYzQsCisJMHg2ZDhmOTk1ZSwgMHhmMjJhZGZiOCwgMHgwYjdlYzg3MSwgMHhmOWM1ZWIwMywgMHg4MzJiMjUxMywgMHhjN2MwYjU3NCwKKwkweGRjMjUzYWJmLCAweDM2YzQ3YzhmLCAweGY0ZjhkMmU3LCAweGZlMGNmY2IyLCAweDU4YzE1YWRlLCAweDEzYzY1MWE2LAorCTB4MTk3MDRiZmUsIDB4MjBjZTY2NTksIDB4NTY2MzU0OWMsIDB4OWIxZTI5YzEsIDB4MDZjOGZlYWEsIDB4ZTY5ZTU1NDksCisJMHg2Nzk1NTFjYiwgMHg3MDU1ZGIzNCwgMHhhYWIxNGI1NiwgMHg4NzM2YThmZSwgMHg5N2Y1Y2UwYSwgMHhlZGU3ZWFhYiwKKwkweDMxZTBhYTc1LCAweGZhYWExNWVkLCAweGFhNWMzYjYzLCAweDFhYWVjMmYyLCAweDFlYjhmOTU1LCAweGQwOWUwYThmLAorCTB4ZmZhYWEwZGIsIDB4YWE3ZGE3NzcsIDB4Y2Q3ZDQ5ZjIsIDB4OWYyOWYyYWEsIDB4NWJlMGE4YjUsIDB4ZjU1NGRiZmIsCisJMHg1N2VhYmY2ZiwgMHg3ZmIwOTc5NSwgMHgzNTRmOTU1NiwgMHhkM2MxNTdlZSwgMHhlYWFiYWZjYywgMHgxNmZiODBiZiwKKwkweGI2MWRjZmYwLCAweDBjZmU1NTZlLCAweGJiZWFiOGU5LCAweGFhNGU3MzNiLCAweDc1ZTQxN2UwLCAweDI3MGUyZGY2LAorCTB4ZTcyZDY4YmUsIDB4ZmI2Y2QxZmIsIDB4NTg3NmFhMDcsIDB4ZmViZTY4ZTcsIDB4N2I2ZjNjNjEsIDB4NTEwYjFmY2YsCisJMHhmNGQ3NmU0ZSwgMHg0YWRkMjFhNywgMHhmMjIyNzM1YSwgMHhkY2YxNjY3MSwgMHgyYzY2NDA0MywgMHgxNGFhYjFkYiwKKwkweGY5NGU1YmM1LCAweDFkMzA4NzUzLCAweDhhNWZkY2VkLCAweDcxNWY5MjZjLCAweDA1YTYxMGYyLCAweGQwYTU4YmFlLAorCTB4NDRkN2IzMWMsIDB4YzhiNGM2MWYsIDB4OGFkNTM4NTMsIDB4M2RjYzM0YTgsIDB4ZGY0NGU5OGMsIDB4NTcyOGE5YWEsCisJMHgzZjVjNzg1ZiwgMHgyYTI4ZjkxYSwgMHgwNzRmYTE0NiwgMHg4MjdkNjdkMSwgMHg3ZWI5Zjg4NiwgMHhmMjhmYzliMSwKKwkweDI0YzUzMmM3LCAweDk2MTM5MDMyLCAweGIxZDY1YTFmLCAweDlhOGI0YzAyLCAweDFhZjY2ZDMxLCAweGZhMGY1Zjk5LAorCTB4YmE1MTk3ODAsIDB4ZmU2NjZiYzksIDB4YWY2NzIwNmMsIDB4OTNmYWUwOGQsIDB4NDNhNzk1ZjcsIDB4NDRhYjIzM2IsCisJMHhlNjk5YWEzMywgMHg0ODI1OGY1MSwgMHhlNWY1YmVkMCwgMHg3NjVkOWM5NiwgMHhiMGVkZDZjNiwgMHg0MmU1ZDdjZiwKKwkweGM1OWUxOWZmLCAweDRlMDFhMjNiLCAweDMwMDU4ZTYzLCAweDIzOTgxNjdmLCAweDI1YjE5OTM2LCAweGZhNzZkZjNiLAorCTB4OTdjMjg3ZjIsIDB4MjQ0ZDlkMzMsIDB4NWNmNmM0MTcsIDB4NzY5NGZmZDQsIDB4NmU3ZTk2MzcsIDB4ZGYyMTk4ZDcsCisJMHgxMWU3NGJmNywgMHhmMWFkZjc5OCwgMHhjMjFkZjRlMSwgMHhhNzVmOTkyNSwgMHhiNjBiNDc1ZCwgMHhmNjllZjkwYiwKKwkweDRjZmM3YzEwLCAweDk3N2ZkZjFhLCAweDBhN2Q3M2E0LCAweDY2ZWI4NDg3LCAweGFjYzZjYmU1LCAweDgwOGNhN2EwLAorCTB4YTkzYWRjYjksIDB4ZjBlYTBjZTEsIDB4YTAyN2Q5YTIsIDB4ZTBkNzYyN2MsIDB4ODkyYjkwN2IsIDB4ZTA4MzI5NTgsCisJMHg0ZTAxYzNkYiwgMHg2YzYyNTg0MCwgMHhjN2ViOTY3ZiwgMHhjNWQ1YWZkOCwgMHhmYTAwZDlkOCwgMHhjMzUxYTg0OSwKKwkweGNmOWU2MTViLCAweGEzZTIwZTY2LCAweDg5ZjFhYTViLCAweDhmZGQwNjMwLCAweGY0M2I3NjlkLCAweGM2MGFhZGIzLAorCTB4M2Q1NmYwMGIsIDB4N2E5NDM3ZDcsIDB4ZjY4YzM0YTMsIDB4ZjhkMzJmZjcsIDB4Y2RhZWNlN2UsIDB4ZjQ5ZWEzYjcsCisJMHhlNzllM2NhNSwgMHgzZThiZmRiYywgMHhlYjdiNDRjZSwgMHgzNTg5YTUyYSwgMHhmMjA1YzExZSwgMHhiNGU5NWFjZCwKKwkweGFlOWVhMGZiLCAweDg0MjNlNjExLCAweDM0OGJmMmRlLCAweDFkZDdiZTkxLCAweGEwOTA0NDdlLCAweDEyNjlhN2RlLAorCTB4N2U5NTg5YzEsIDB4MGQ1Mjc3MWEsIDB4YmY4MDFiYjQsIDB4NjYwOWY0NGQsIDB4ZTYzZGI3YzgsIDB4OWIzZjEwMTMsCisJMHhmMDY3NjlkOSwgMHg4ODVhMzMxZCwgMHgzY2M4ZDdmZSwgMHhjYmY4NmI2MSwgMHgwZjQxOGZhMiwgMHg3NjlkNzlkMywKKwkweDEzYmJhN2FjLCAweDI3MWYzM2U4LCAweGI4NjY2M2Q0LCAweDQ3ZTNjOTRlLCAweGEzZWIxMGIwLCAweDBkM2U4NmE0LAorCTB4OWY0MGRjNzMsIDB4ZDQ3ZDRhOGYsIDB4ZGRjNWZiNDMsIDB4ZTgwYjI5MjYsIDB4YTZjNTg1ZmIsIDB4ZGEyMTFkOGEsCisJMHg5ZjllNTRmYiwgMHhmZWVhMzEwZCwgMHgxZjNlNWEyZCwgMHg2Y2JlZGM4YSwgMHhmMGE4ZWJlNiwgMHhhNjY4OWFmMSwKKwkweDUyNmJlMzkyLCAweDg0NmY1YmM2LCAweGM4Y2RiNWFmLCAweDZlZjgwMTVjLCAweGQwY2M3ZTg1LCAweDU1YWJlMWJlLAorCTB4ZTgzZjFjNjYsIDB4NGZlYTRlZDAsIDB4Yzc2NGYyZTQsIDB4NmVjODcyOGYsIDB4MjFjNzVlMGEsIDB4M2Y5NDA4ZjQsCisJMHhhM2U5MDhhMiwgMHg3YzA4ZGZjZiwgMHhkYmQyYTg2OCwgMHhmZWIyNmY1MSwgMHg3YjgwOTM0MywgMHgxMTZiMjI3MywKKwkweDUzNThiZTUwLCAweGRjNDQ3YWNhLCAweGFlNTc0NGQ3LCAweDc5M2U4NDMzLCAweGQ2NTRiYTMzLCAweDgzOWZkOTRmLAorCTB4M2Q3NzRiZDcsIDB4OWMxMmZkZTMsIDB4MzFkNTdmZWYsIDB4MWY1NmM3ZDQsIDB4MDU3MThmOGYsIDB4M2E0YzUzZDAsCisJMHhkNjYyY2JhNywgMHg5OGZlNDVhMiwgMHhiZDI5ZGFjYywgMHg3YTUyZjU4NSwgMHhkNGE3ZWIxYiwgMHhhNjIyY2NjMSwKKwkweDY5NGVjY2E1LCAweDNhNTI3MzE5LCAweDJkMjg3OTlkLCAweGNlOTQyZDY3LCAweGNlOTRlZDY0LCAweDgyOTRiZDYyLAorCTB4OTNhOTQzM2QsIDB4OWFlZWM5OTksIDB4YTYzN2ZiMDcsIDB4ZDI5Mzk4MGIsIDB4YTUwZjMxZWYsIDB4N2U5Y2U5OTksCisJMHhjMTBiNTgyYiwgMHg0YTc2YjM3NywgMHgyNGVmODAzYiwgMHg4YzAxZmEzZCwgMHg5YzgyNzY5NCwgMHg5MDRkZjRjMywKKwkweDc5NzY5ODczLCAweGEzNjUyNjI1LCAweGQyODcyMDFmLCAweGE1M2I1ZTIzLCAweDk0YzViY2M3LCAweDU0MWQ3OGY2LAorCTB4Mzk2ZjZkZWYsIDB4OWQ3OGVmYTUsIDB4NTZmMDllOTQsIDB4NzVlYmRhNTAsIDB4ZGU1M2JkNTEsIDB4ZjVkZjRhMWEsCisJMHhjZjdkMjg3YSwgMHg2OWU5NDBkYiwgMHhkZmQyOGZhZiwgMHgxZDI5OWI3OSwgMHhjNjdlMDdhNSwgMHgyYmU5Y2RmOSwKKwkweGY1M2U3ZDQ0LCAweDAyNDNiZDIzLCAweGU1OTFlY2Y5LCAweGU2ODc2MWQyLCAweGI4ZjFkYzk5LCAweDQwNjYxYTZlLAorCTB4MjM1YjI4M2EsIDB4NzM1OWZkMjAsIDB4YTQzZjBlMzQsIDB4MGI1NjcyOWIsIDB4ZTFiYTQyZjcsIDB4MGNkZmQ3MDQsCisJMHgwZmQyNDhkNiwgMHg4MmY1NmRhZCwgMHgwODc2ZWQwNCwgMHg1ODA4ZGE3ZCwgMHhhOWU5ZTljYiwgMHg5ZjIwOGQ3MywKKwkweGJhZDkzYTRiLCAweDE5YzIzYjA4LCAweGVlODExOTRmLCAweGZkM2NlODc2LCAweDY0YmNhMDNiLCAweDA4ZDczNGE3LAorCTB4YzhlNGQ2N2IsIDB4OGZiMWZmNTMsIDB4ZTkzZTU0YzMsIDB4MDMzNDZiMDgsIDB4ZmIzZDJiM2MsIDB4ZTM4MTM4YTksCisJMHg3YmVmYzI4MSwgMHhhZWU2NzMzYiwgMHgyNTNjNDRjZCwgMHgzNGM1ZjNjMiwgMHhiZjUxMmMzMCwgMHhmYTQ0YzQ3ZSwKKwkweGQ5ZGI2MTc1LCAweDkzYzAwZDQyLCAweDY4NDU0YzFhLCAweGViZDQwNjE3LCAweGFlMWZiYTQyLCAweGYyYjk3MDVlLAorCTB4OTY1NWI2ZGQsIDB4MGQ4NzljNDYsIDB4MGU1YTgwOWYsIDB4N2QxOWE5NTksIDB4ZDVmM2FiODUsIDB4NWViZTZhZWQsCisJMHg4MzdiNGNmZiwgMHgwOWViMDNmZSwgMHg3ZjZmNjgzNywgMHg3ZDMyYTM5NiwgMHgzYTdlZmZjMiwgMHhkZDZmYTYwZiwKKwkweDZiZjY4ZmY1LCAweDhlNjQwZmM4LCAweDU3NzRmZGMxLCAweGZkMzM5NzM0LCAweDA0ZWU5ZmEwLCAweGM4YzU3N2JjLAorCTB4MWE0Y2M2ZjAsIDB4NWM0M2NhMTcsIDB4ZDI5YjBkYjcsIDB4Nzc4MDNlZmQsIDB4MWY1NzM5ODUsIDB4ZDQ3ZmYyYzcsCisJMHhkMTQyNzdkOCwgMHhhNmQ3NzBhZSwgMHhjOTMzODI1YywgMHhjNjIxYjEzZiwgMHg4ZjkzMTM5MywgMHg5N2RmM2NmYSwKKwkweDBkMWY5MzVhLCAweGJmZjgwMjkzLCAweGFmY2I5ZDM5LCAweGU5NWNiN2FkLCAweDQ0NzY4MWRkLCAweGMxNjU4NmIzLAorCTB4OTc5YjNiNzcsIDB4NzY4MWNjNmYsIDB4ZjQxOWJjN2UsIDB4ZGM0NzgwMDcsIDB4MGIzMWJkNWEsIDB4NmEzN2QzY2EsCisJMHgxOTY1NmEyNiwgMHg3OGZjNzg4NywgMHg0ZDllZjU3MywgMHg4ZjI1NWZhOCwgMHg3Njg2Yzk4ZSwgMHg5OTc5NjQzMywKKwkweGI4NTdkYjFhLCAweDU1YmNlODA2LCAweDk1YTdiNmFmLCAweDdlNjQ5ZmY0LCAweGNlNjY4NmE5LCAweDk1NGQ2YzgyLAorCTB4M2ExZGY0ZWQsIDB4ZGZiODExNTYsIDB4ZWZjNjRjZmQsIDB4ZDUzYzU5NTcsIDB4NTdmZGNlZGQsIDB4ZmVlMTkxODYsCisJMHgyNWZjNjAyNywgMHhjM2JmYjkyMywgMHhmZTQ4Y2ViMiwgMHg3ZmYyNGIwZSwgMHhjYTAzYmM5ZCwgMHg3NjM0ZGIyZCwKKwkweDZiNDRlOTU0LCAweGVhMWQ1YWVkLCAweDNiNTk4YmZiLCAweDgxMGVlM2YyLCAweGUxNGJlZjdmLCAweDBhMjgyMTdhLAorCTB4ZWMwMzczZTksIDB4ZDNkZWFkZjIsIDB4ZmMwMzMyOGIsIDB4OWYwYWI2ODQsIDB4Yzk3YmY2ODAsIDB4MGZhMTVhYzgsCisJMHgwN2U0OWZmNywgMHgyZGZiYjQwNSwgMHgxNWMxMmUxNSwgMHg4NzgxZjY4OSwgMHhiOTY1Y2ZjYSwgMHhmODBlOTI3ZSwKKwkweGZiZTEyYWQ5LCAweGI5OTJmZDQwLCAweGExNWQ3MDEyLCAweGQyNzY4YWRmLCAweDYwNTE1OGYzLCAweGY4YjNhNzdmLAorCTB4M2IwN2FjM2MsIDB4NzVkNWY0OTksIDB4NzgyYmMyN2EsIDB4OTc2NTRlYmUsIDB4OTVmNmMwMWUsIDB4ZmYyZTBjNzUsCisJMHhhYmI3MDY3ZSwgMHg1ZDAxM2Q3NywgMHhlMjRjMWYyMCwgMHhkZDg5ZjM3NiwgMHhjZTNmYTQ4OSwgMHhhMDc3MGQ2OSwKKwkweGE5ZTI3NGZkLCAweDZmMDQ2NWQxLCAweDNkNDBlYzk5LCAweGM5ZWVjNGYyLCAweGIzOWQzMWQzLCAweDNiZDUyNjY1LAorCTB4YjQxZWIwMjEsIDB4Yjk2Y2U3ODcsIDB4ZDRmY2M0NWIsIDB4ZGIwYmMwMGMsIDB4N2EyN2EzM2IsIDB4NDFlNWIzOWMsCisJMHhjYjQ3ZmJmOSwgMHhlMzU4YmNiMCwgMHg5MWRhMDlmYiwgMHgyMmZiOGRjNSwgMHgxYzllNGVkMCwgMHhhNjEyNGFmOSwKKwkweGY1N2QzNDI3LCAweDVkZmZkMGRkLCAweGRjMmJmNjY2LCAweGUzMWI5ZDllLCAweGZlMWNiMWZlLCAweDc0YTlmNzMxLAorCTB4YmZkN2VhMWQsIDB4ZjVhNzRmNGIsIDB4YzQxY2NmOWMsIDB4ZWM4MzUwMDcsIDB4ZjZmNjViYmEsIDB4OGE0ZDA2MWUsCisJMHgzZmRlZDZkZCwgMHhlNjVjY2MxNSwgMHhjMTFmMzBlOCwgMHg1ZWNiYjRiNCwgMHhkNjU3ZDM4NiwgMHhlOTgyM2NlMywKKwkweDE5NGY1ZWY0LCAweGE3ZTUyZmFhLCAweGJhNjA4ZTViLCAweDNiZjVkNzI0LCAweGZmMTc5ZjljLCAweGJjYWY3YmUxLAorCTB4YzdjOGYwMDgsIDB4MDdhOGNkZWIsIDB4MzdkMTNlNjUsIDB4ZWJmOTI3NjMsIDB4MjFmOTBjNzQsIDB4NDVhNzkyNmIsCisJMHg3NDZjMDQ4YiwgMHg3ODdjYTBjNiwgMHg4MzUxNjlmNiwgMHhhZDIxYjlmYiwgMHhjMzYxMGMyNSwgMHhiNDFhZTk3ZCwKKwkweGI3NDU3NzBiLCAweGIzYjhkMGQ0LCAweGUzY2UxOWMyLCAweDIxMGZiMGRiLCAweDNiNDU2NDVkLCAweDgwOWY5MDYzLAorCTB4M2UxZDY5MmYsIDB4MTBkM2U5OTMsIDB4NjM0NzMxZWQsIDB4MWZjZjE4N2UsIDB4ZTFjZTE3YTgsIDB4NWFmNTAzZjMsCisJMHgyN2VhMDRjMiwgMHgxM2ZiMjA0NiwgMHhiZmRjMDZkNCwgMHhkZGZlZjI2ZCwgMHgzODA5M2NjNiwgMHhjZjQ4ZDYxZiwKKwkweDY0ZWJmNDBlLCAweDY3ZmU3MDk1LCAweGIwMmU5YzkxLCAweGZhNDRkMzdhLCAweDk2Y2Q5Yzg0LCAweGI4OWRjZjE2LAorCTB4ZTg5NzU2MGUsIDB4M2JhNDBiZWIsIDB4ZjQwNzA2ZDgsIDB4MTk4Mjc0OTEsIDB4MDU1YmQ3ZGEsIDB4MjE5YzgzMGUsCisJMHg3ZTg3ZjBiYywgMHg0MmM5OGIwYywgMHhiZjgyOGQ3YSwgMHgwYmRhMDJiNSwgMHgxYzcwMzNkMCwgMHhkZjgzNGNmMywKKwkweDliMTc3NDI5LCAweDQyMzVjN2MxLCAweDY1YWNiZmE2LCAweGRmMDUzZGJjLCAweDlmMmUwY2I4LCAweDgzNDk2ZjAxLAorCTB4N2M2NTY4ZjgsIDB4MDA5YTFjNjAsIDB4ZDFlYTAyN2MsIDB4NjZmMDA2ZjgsIDB4MDVkMjFiNzYsIDB4YTc4MTdhNDgsCisJMHhjNzAzMTI0YywgMHg4NDcxYWQ1ZiwgMHg3YTY0NWRhMSwgMHg0ZmU4ZmJmNSwgMHgwMjM5NDI4OSwgMHhmNzUzZmU3OCwKKwkweDY5ZjIyMzI0LCAweDMyNzIzOGYwLCAweDQ2ZGYwOGQyLCAweDZmNTE4N2QwLCAweGZjZTJlOTlmLCAweDExZTk1OGRiLAorCTB4MTg0MjNlYzgsIDB4M2EyYzlmYzcsIDB4MzU2ODFmZDAsIDB4MDE3NDE2YWQsIDB4ZjMyNmI1ZTMsIDB4YTU2NjdhN2QsCisJMHhjYWU1MWJhNywgMHgzYjA4ZTJjYywgMHhhYzlkZjdkMiwgMHhmMzk5OWQ3ZCwgMHhjMDRjOTFmNywgMHhmODFiMTQ2ZiwKKwkweDQxYzRkODk5LCAweDRmNDdmMGJkLCAweDk3MTI3YmJmLCAweDk3YjU5OTM0LCAweGY5ZmVlMmU0LCAweDcwYjNmZGY4LAorCTB4M2EzZWI2ZmQsIDB4NGZmMTA3YjMsIDB4M2JhYTc5Y2MsIDB4NWU3NDFhMDYsIDB4MTk3ZGQ3OTQsIDB4NmNhNGViZjcsCisJMHgxYzBlM2YxMywgMHhlMDA3OTI0NywgMHg4ZDQ0YmY0MCwgMHg0MWU4MWNiYSwgMHg2NTc0MmIwNSwgMHg3MWEyMWExMywKKwkweGU0NDRkMWJmLCAweDdhODE5Y2NmLCAweGU0ODY5NDRhLCAweDYxMjljODNiLCAweDMzZmQ0ODQxLCAweGY5ZTRhZTg4LAorCTB4YWVlN2Q2NTcsIDB4Mzc1YTRjOGMsIDB4MDNhZjg5YWIsIDB4MTcxYmI3ZWIsIDB4NTU4M2NhNDYsIDB4NmRmYTA5ZDYsCisJMHgwMTFmMzYwNCwgMHhhNjU4ZGY3NCwgMHhkNzY4MGJmNSwgMHhhYzI4ZmQ2MiwgMHg5MTlkZTJjZiwgMHg4NzY5ZDc0MywKKwkweDAzMzk5YTRlLCAweDFhYzNmNGU1LCAweDc0MzY2ZWYzLCAweDdlZGM4MTVlLCAweGMzZWQ3YTRiLCAweGY5MGU1NDcxLAorCTB4N2RmYzkxYTIsIDB4NDM2YWY4MDEsIDB4YjhmNWVhYzEsIDB4YWM2ZGZkNTksIDB4YjQ4Y2VlNmIsIDB4Yzk4OWY5YTEsCisJMHgzZWUyNjYwYiwgMHg2OGNiNTg5YiwgMHg0N2NiODNmZCwgMHg1NzVlYTYzZCwgMHhhM2M3MzdiMiwgMHhiYmY5ODhmZiwKKwkweGNlN2FjMWJlLCAweDg2NTVkZTRjLCAweGJhZjA3Y2ZhLCAweDFhOTc3NDJhLCAweDEwNWY3YTFiLCAweGE2NWYzOTMzLAorCTB4OTU0ZmQ4NDYsIDB4OTIyMTVlOTMsIDB4MTE0Y2UwOWUsIDB4YTJlZDAzZTMsIDB4MWY3YzE5MGQsIDB4MTMzNWZkYmEsCisJMHgyM2VjNDNlZCwgMHg1Y2I3MWZhMywgMHg5M2VmNTc3YiwgMHhhNTBlYjBiOSwgMHhhZTY4MzQ1NywgMHgxY2VmYTNiMCwKKwkweDQ4NGNlMWZhLCAweGRkZWFmZGE3LCAweGY1MGFmZmQ1LCAweDFhNjU3ZGE2LCAweGIwNmZmOTg3LCAweDEwZTgxOWJlLAorCTB4OWQ4MGY1ZjEsIDB4MmZkYWYwMDEsIDB4YTNhMGI0ZjYsIDB4ZDk5MmIxYTQsIDB4ZmE1NWRmNzEsIDB4ZjNmNzIzZDksCisJMHg0OWRmOWQwYiwgMHg2NDU3MzVmMiwgMHg4MjBlNDkzYiwgMHgyZjQwMWU2NSwgMHg3ZTg5NjkwMCwgMHg1NjczMTk3OCwKKwkweDY4ZGQ5MGI2LCAweDU5MDdjY2NkLCAweGY2YmQ2ZThkLCAweGZlNWZiNDI1LCAweGVmZDBjZjQ5LCAweGQyNDJhZjM4LAorCTB4ZTdmOGMwOTUsIDB4NjViYTRhNTUsIDB4NTkxN2M3ZTgsIDB4ZjMxMWVhMzksIDB4M2Y5NGVjMmIsIDB4ZjNjZWQyYmYsCisJMHg0MTdmM2M4ZCwgMHgxN2YyODM4NSwgMHhiZTc4M2E1NCwgMHgzZTYxZjIwOSwgMHg3YmY4NTYxNiwgMHg0MmVlZDBiZCwKKwkweDQxYTQ4YzUzLCAweDkzYTU3ODNmLCAweDUwMzU1Zjk3LCAweDBmNjAzYmY5LCAweDg3YzkwMjY0LCAweGRlNDlmOTg3LAorCTB4ZTFhNjdjYjcsIDB4Yjg0ZjEyZjEsIDB4MGQ1YzAwNWYsIDB4MTIzZDQ1OTEsIDB4MWE3ZGRmY2UsIDB4ODYyNDE2N2IsCisJMHgwMTk5OTExNCwgMHhlOWMyYjY3ZSwgMHhmM2Y5NDJkNywgMHgxMzgwOWZjYywgMHg2YWY1NDZmOSwgMHhiZmU0MzY2NywKKwkweDcxOWEyYzkxLCAweGMwMzg2ZjdjLCAweGFiZjljNjZlLCAweGU5ZGU2OTE1LCAweDM1MWJmMDA3LCAweGQ4Y2YxNGM5LAorCTB4N2RhZGZiMjEsIDB4NjdlNDhjMmIsIDB4ZmM4NzVkMDUsIDB4YTI0NTZjYWMsIDB4ZjJmMGM3YWMsIDB4N2VjZGNiNmQsCisJMHgwZTQwYzdkNCwgMHhkZmY2M2FkMiwgMHgwMDFlOTIyNywgMHgxY2VkZjBmMiwgMHhjYTVlOGJkNCwgMHg0ODQ5ODdiNCwKKwkweGIzN2U2YWI3LCAweGExMmYyZjU0LCAweDE5OTkyYWY2LCAweDk1NTlmMmVkLCAweDk3YzZiZGJjLCAweGVhMGQ3ZTM0LAorCTB4MzM3OWE2NTUsIDB4ZjcxYTBlOTEsIDB4YWZkYTNiMzIsIDB4MmE5ZjU2Y2YsIDB4OWI3ODQ1OGIsIDB4ODdlNWNlZGQsCisJMHg1NjM0MmU1YSwgMHhlMTJlMzk2ZiwgMHg3MzFhM2M3OCwgMHg3ZWU3ZDUxNiwgMHhlOTRmNDZhZCwgMHhjODMwYWQyZSwKKwkweGQyZGViNGNmLCAweDJhMThmY2EwLCAweGQ4M2RlYzZmLCAweGE5NTU0MjRlLCAweGIzZDQxMzdkLCAweDhmZDEzOGMwLAorCTB4ZjNjZjRkYmQsIDB4MTQ4OGY3N2QsIDB4OGI1NGIwNjcsIDB4NDE4MmU2NWQsIDB4YTc5MTRlZmUsIDB4MTg3YzgyZDAsCisJMHhjNTQ1ZjI0NSwgMHg1MjVmYTM1ZiwgMHhmOTkyM2ZjMywgMHhjNDVkZjgxNCwgMHgzMTc2Zjk3MSwgMHg1ZDk1YzkzYiwKKwkweDI3MjA3YWVhLCAweDUyYWYyODM1LCAweDY3ZjlkNGRhLCAweDJmYzUwNGIyLCAweGUwODc5YWE1LCAweGI4N2FiNjc5LAorCTB4ZTcxZTBiZGMsIDB4YzJiYWI4ZTAsIDB4MzRiOGQxNDYsIDB4ZDcyODVjN2MsIDB4NzRkNzNmMjAsIDB4MmI3M2YyODgsCisJMHhhMTI0YmI0NSwgMHg4NTNmNmJiYywgMHg5MmY1MWZlMywgMHg5ZTAwYmFjOCwgMHgxMzM0NWQ1NSwgMHg2NmQ2NjllOSwKKwkweDY2NDNiOTBkLCAweDBiOTI1ZWIzLCAweGUyYjcxYjM3LCAweDY3MWUwOGRmLCAweDY0MzZmOGYwLCAweDFjZGY2OTY4LAorCTB4MWJkNzA3ZDAsIDB4N2Q2YzFmNDksIDB4YjhjMWE0YzQsIDB4ZTE1YmU4MjIsIDB4OTczODU3ZTgsIDB4MDk5ZTFhNTUsCisJMHg1MzIyMzBmMywgMHg2YmFmZDdkNiwgMHgzNDY5M2NiOSwgMHhhY2VhOWQxMSwgMHhmYTA0ZTU4ZiwgMHhhNWQxODQxZiwKKwkweGVlYmViMDIzLCAweDcyYmNlYzdhLCAweDY4ZTkxYjhhLCAweGFjNzJjMWRjLCAweDkzNjM5NjU4LCAweDJhN2M2MGZhLAorCTB4OTMzODczZmYsIDB4ZDZmN2U2MDIsIDB4N2MxNTE4ZmUsIDB4NTU0NGQ1ZmIsIDB4MmUxMDEyZmQsIDB4OGQ1M2U1ODEsCisJMHg2OWYyYWE3OSwgMHhmODJhNzFlNiwgMHg1NTE0ZGIwZSwgMHg1NGQyMTlmZCwgMHhjZTY3N2MxNSwgMHhiM2ZhYWE5ZCwKKwkweGYwNTVmM2VkLCAweDU0NGJjNTVkLCAweGVlM2FlN2Y1LCAweDJmY2Y5NTU1LCAweGJlNTU0ODdmLCAweDA1NDZiOWQwLAorCTB4N2JmOGFhMmYsIDB4YWVjNWZkNTUsIDB4OTJmOTU1NDYsIDB4ZTU1NTI3OWEsIDB4OTI5M2Y2YzEsIDB4M2Y3MjY2OTYsCisJMHhlNzliNTZjZiwgMHg4YmU0ODNhNCwgMHgwZTQ2NzA0YiwgMHgxNGE5NjdhZCwgMHgzZGQ3MDNmYiwgMHg1M2ViODIyYSwKKwkweGU1MWFmNWMxLCAweGUwNDE3OGY1LCAweDQ4ZmViMWZkLCAweGUyOWRmMjBkLCAweDkxZWQ2MzdmLCAweGQ3NWNmZjJhLAorCTB4M2VjNmM5ZTQsIDB4ZWM3MmZhMTMsIDB4YjJkZDIzZWYsIDB4YzUxZmRjMTMsIDB4YzUzYmZjZmMsIDB4MDRmZGQ1N2YsCisJMHg1NmY2ODNkNCwgMHg3MTViYTY0NywgMHhhYmJmNDNiZiwgMHhmOWZkMGY0YiwgMHhiN2JmZTQzNSwgMHhiNDBiZDczNiwKKwkweGU3YWU2ZTBmLCAweDdhYWI5NTdlLCAweGMwMGQ4YWU2LCAweDdlZjM4NTgzLCAweDgyOGU3OGU1LCAweDcwNDQ3MzI3LAorCTB4Y2YxODYwZmYsIDB4OTVmYjI2ZGYsIDB4NTJiZjQzOWUsIDB4YjAzZjYzMzYsIDB4MTc3ODdlMjgsIDB4YWM1MDliYjUsCisJMHg0NjdmYTFmNywgMHg3YTA4ZjZhOCwgMHg2NjJlNWI5NCwgMHgwNzI4NDgzNiwgMHg5N2ZmNTM5NywgMHg1ODIzZWMyYiwKKwkweGQyNTY3OTg4LCAweDM5OGRhZjU2LCAweGJkNWI3ZGEwLCAweGM2MWVhZDZmLCAweDY5Mzk5NzU2LCAweGJjZDBiM2NiLAorCTB4MWZjOGMzY2QsIDB4OTRlNjY4ZjMsIDB4ZTc4MTZiMmQsIDB4YTI1MzIxZmYsIDB4ZjkxMDQ5NzUsIDB4Zjc1ZjNmM2MsCisJMHhkMDNkYjljNiwgMHhhNTk1NmI1ZiwgMHg3MDZhZTUwOCwgMHhmM2JiOTI3OSwgMHg5NDFiYjFlMiwgMHhkNWYyYmYzZiwKKwkweGQxYmZlZTBmLCAweDY3MWQ3NWY3LCAweDg3Y2EwMjlhLCAweDI0NTY4YmY1LCAweDFkMDA0NzMyLCAweDdlZDA4NjQ4LAorCTB4NzRjODFmZjksIDB4MjdhYzllZTUsIDB4NWEzM2Q2M2YsIDB4Y2ZjODkzZDcsIDB4ZDdmZjI2MTcsIDB4ZGRmMGJkYzQsCisJMHgzZGNhZTk3OSwgMHhmZTQzYTdhOCwgMHhlYTFmMzAwZiwgMHhjZjllYmNkMSwgMHgyOWU3NDRiYywgMHhiZjQwZjM1MiwKKwkweDJjM2JmZDQ3LCAweDk0MWVkZDM0LCAweDk1YWQxN2RiLCAweDVhMDdlOGZkLCAweGQwOTdhOTFkLCAweDdlMzI0ZmNlLAorCTB4MGVlYTdlNDYsIDB4ODNhYmI3MWQsIDB4MDdlN2Y3ZWQsIDB4YjI3NmVkZWMsIDB4ZWRjYmY3YmYsIDB4YWQ1Mzk2ZWMsCisJMHg4Y2NmN2Y5OSwgMHhlNDVhMjYzZSwgMHhmOTg4NDBmOCwgMHgwOWI1NDZkMCwgMHhhYjEyYWYyOCwgMHhmOTAyNGZjNSwKKwkweDRmNTIzYmEyLCAweDQ5OGIwNDdlLCAweDZhOTgzYmY2LCAweGM1MDE3ZTU0LCAweDc5MWRkMDZmLCAweDZmNzQ4MGJmLAorCTB4N2U0MTVhZTksIDB4NjAxN2Y0N2EsIDB4NzVlNTA3N2IsIDB4MjQxN2Y2MDksIDB4ZThiNGZmMTksIDB4YjUxYmQ4ZTMsCisJMHgyM2YyMDZjZiwgMHgwNGZkMTA4NCwgMHgyN2Y4YTFlMSwgMHhhM2YxZmI4MiwgMHhjY2ZiODEzZSwgMHgyN2QyNzBjYSwKKwkweDM5N2RjNzgyLCAweDY2NTBlNGIzLCAweGZmNDhmMjNjLCAweDdlNTAzYmM5LCAweDdlZDFkMjlmLCAweDg0YmQxYzM4LAorCTB4MWZjY2UxNDksIDB4MjY2ZjdlZDAsIDB4NzIyM2VmYjcsIDB4OTFmOTU0NjIsIDB4MGZlNjQ0ZjYsIDB4NjRiMzVmZjQsCisJMHgzMjExMjdmMywgMHg0OGNjNWIwYywgMHg1MWM2ZGY3ZCwgMHhiY2RiZGZkOCwgMHhiYjNhMTNiZiwgMHhkODQxZjQ4ZCwKKwkweDdiZmVkMGY2LCAweGVlZTdlNjRmLCAweGFiNjk0NjVjLCAweDAxYjc5NzZjLCAweDljZmE2MzFmLCAweGQ5ZmE0Y2Q3LAorCTB4ODQzZmUwMzYsIDB4NGEyNTdiYjcsIDB4NGExY2RlZmQsIDB4NTRlZDdhNzcsIDB4NGM1YmNiYmUsIDB4ODNhZjFlZjAsCisJMHg3MmRlYmRlMCwgMHg5ZDc5Zjc0YSwgMHhiNzkyZmY5NCwgMHg3YTlmZTA4MiwgMHg3YmI2OTQ1ZCwgMHgxNWZmMjg2YiwKKwkweDAzZTA4N2FmLCAweDVmODIwNmRlLCAweDQ0NTA3ZDQ1LCAweGE1MzM3NTNmLCAweGE4NWI3ODZmLCAweDQ2ZGJkM2JjLAorCTB4M2Y1ZTliZjAsIDB4YmRkZTVkYTUsIDB4ZGJjODdmOTQsIDB4NmYxMWYwNGUsIDB4YmNjN2MxMDcsIDB4NzhmNzA0NWQsCisJMHhkYjdkMjg3YiwgMHhlZmY5NGJkYiwgMHhkYzEzNGY3OCwgMHhiMTkzOGYyYiwgMHhmYTJmNWVlNiwgMHg4NGEyNWMyYiwKKwkweGFlYjNkZGZhLCAweGQ3ZWEzMzZhLCAweDMzMWE2NWI2LCAweDk3MzZmMzhhLCAweDM5ZmEwNTY2LCAweDc4ZjI1NWI2LAorCTB4ODY5NTZkOWYsIDB4ODdhMDQwZmMsIDB4YjM5ZjUxZmEsIDB4ZjhmYTdiMmQsIDB4NDA1ZjJhMzQsIDB4NDliMTViZTUsCisJMHhhYmFjNGEzMCwgMHg1NmNhZmViOCwgMHgxNTllYTllYSwgMHg3N2MxMDIwZiwgMHhmZDJiNmFkYiwgMHhiMjViODA1YSwKKwkweGJhZGNhOWMzLCAweGVkYmIyNDRhLCAweDNhMjc4ZDc5LCAweDI0NWRlYjliLCAweGFlM2FhZGJmLCAweDEwNzQyODNmLAorCTB4MjJlOWZiMjEsIDB4OTc0YTQ0YjIsIDB4YTNmYzczNjUsIDB4MjNlZjQyMzIsIDB4ZmM0YTU5MTksIDB4YzcwN2I5YTQsCisJMHhmMTgyYWI2NywgMHhmNTU1YmUyMSwgMHg1YTVmOGM0NiwgMHg0OWYxODNlZiwgMHgzYWFlM2ZhNCwgMHhjMzI0NzgwNCwKKwkweGMwN2YxMTc4LCAweDZjYzJmYzg3LCAweGFkOTdkNzE5LCAweGFmMDhlYjU1LCAweDk0ZjM2NWU0LCAweGRhMzQ2Nzc4LAorCTB4ZmE5ZTZkZTksIDB4YTU2Zjg0YjksIDB4MzZjZDdlNDgsIDB4ZmJlOGExZDcsIDB4ZTdjYTRlNTAsIDB4ZTFmMWFjN2MsCisJMHg1MGZlN2Y0ZSwgMHhmMDgyMzI3YywgMHhkZGI4YzZkZiwgMHhkMmZhMGM5MCwgMHgwMGUzMTBmZSwgMHhjN2E5NDc4YiwKKwkweDE5OGY3OGZkLCAweDI2ZjFmYTQzLCAweGIyNjI3YWNiLCAweDNkOGZmOWMwLCAweDZkZmYxMjJjLCAweGMxZjdhMDY3LAorCTB4N2U4MWNmNzcsIDB4NTAzOTQzZTcsIDB4ZmExNTZmYmEsIDB4NzJjZDFlYWIsIDB4M2MwMmNjNGQsIDB4M2Y4ZDI0N2UsCisJMHg1MzFjMDIyNCwgMHhhZjRmZGJjZSwgMHgxZWEwZjcxNywgMHhhZTdkZWIwZCwgMHgzZTM3ZjIwOSwgMHhiNjg5ZDliOCwKKwkweDY5NjZlYzcxLCAweGRiNWJiMjJkLCAweGQwMTM1N2IyLCAweGE4MmM5NWZmLCAweGNiNDk0N2Q3LCAweDNiYjYzYzY1LAorCTB4ZDVjZjdiNzgsIDB4YjY0ZmU0OGIsIDB4NzY5MDNhYWUsIDB4ODY1YmY3ODQsIDB4ZmE4ZTI2ZmQsIDB4NjFiYTE4N2QsCisJMHgxYTQ4MTYzMiwgMHg1NWM5MTkxNCwgMHgyZmVjNDVlMiwgMHhlNWNkYTFlYywgMHg2NmZjNWZkOCwgMHgyMTVmZDI4NywKKwkweGU3NzVmN2Y2LCAweDY1ZTNlNDY5LCAweGJjMDg1NzU2LCAweDM3Mjc5Mzg2LCAweGIzOGIyMzkzLCAweDhlNDhlMzIyLAorCTB4OTQyNGIxMjQsIDB4YjhlYmNmMjMsIDB4ZTQ5ZGYyZGMsIDB4ODYxZDI0ZmEsIDB4MWZiNDM0OTksIDB4YzRhZTdlMjUsCisJMHhlOGUzODNkMywgMHgyNDNkMzIzNSwgMHg2MWM3NDIxOSwgMHhmZGU4MGQ1NywgMHhkZGI3YWEzZSwgMHhlNzQ5YzliMSwKKwkweDBiM2UzMDRiLCAweDZjNzVhYjQ1LCAweGVhZjNhZTA1LCAweGRhZjM3MDkyLCAweGE0YTBmNDEwLCAweDAxOGU1MDViLAorCTB4NDY4YmRmZGYsIDB4YjliM2I1MjMsIDB4ZTFhM2I3OWMsIDB4NTZjYWRjZWQsIDB4MzI2MjVjMTEsIDB4NmJjODQyZmIsCisJMHg2ZTVhN2QyNSwgMHg0ZTJjODFlNywgMHhiZTBmNDliNywgMHhhZTE4ZjFiNCwgMHgzYTNhZGJlZiwgMHhjNjljZjQxMywKKwkweDA0ZWQxMWJmLCAweGM5MmQwOWRmLCAweGZiNmQ0NGQ3LCAweDc4MDEzZDhlLCAweDc5ZTNjYjM1LCAweGI1Y2ZlZjRlLAorCTB4N2I0MGZmMjMsIDB4OTE1NzI4ZjksIDB4N2ZjOWYyNWYsIDB4Y2MwNTY2YzEsIDB4NWFkZGYyYmIsIDB4YTNmZDhmZDksCisJMHgyOWEyMWI2YiwgMHgyZWI1NWNiZSwgMHgzNmEzZjUwYywgMHhiMDdhMjQ2NiwgMHg4NWQxM2NlYSwgMHg0NTYwZjQwMSwKKwkweDFmNDEwY2JhLCAweDRhZjRiMmZiLCAweDMyNTRkNTNjLCAweDdjMzJlMzExLCAweDcyOGE5ZTVmLCAweDU4M2VmMDA5LAorCTB4ZTFmYjQ1MWQsIDB4ZGVlZjY1ZDQsIDB4NWJlMDE2MzksIDB4ZDQ3Njg4YWUsIDB4ZTVhYjllY2IsIDB4ZmQyNzEzZTcsCisJMHgyNmU3NDM1MSwgMHhkYjljN2NkZSwgMHhiN2ZkYjc3ZCwgMHg3YmY0MWViMiwgMHhiM2U5YzgyNywgMHg3YTQxZTc2OCwKKwkweDc3YjMzMzRiLCAweDUyZGNiYWMxLCAweGNkZmYyMjZkLCAweGIzYzU1N2FkLCAweGI5MWE3NjgxLCAweDdkYTNjN2E0LAorCTB4NTMzNWZkYzEsIDB4ODAzY2ExZmEsIDB4YTY3ZDI2ZmUsIDB4YWEzMzBmYWUsIDB4YTEyMzNkNDUsIDB4YWI2ZjlkNGYsCisJMHgxYTY2NzAzYSwgMHhjYjU2ZDNmNCwgMHhmNmJiNmUzZiwgMHg3ZDg0NzFmZSwgMHg5M2YyMWFmNSwgMHhmNDI5ZjUwMCwKKwkweDRkZmU0MDkzLCAweGU3ODA5N2QxLCAweDE5MWEzNzE2LCAweDMyZWI3M2M5LCAweDQxZTUxOWEzLCAweGU0OWMyNWI3LAorCTB4MTM2MmRiNWYsIDB4MzIxYmExZTksIDB4OWVhMTg3NTcsIDB4OGZhYWE4NmMsIDB4ZGVhNDc0YzYsIDB4YTc3ZDAzYjcsCisJMHg3ZGZmYmJkZCwgMHhlNDgxMmQ5ZSwgMHg4MTdmM2YyZCwgMHhmYTBjNTk4NCwgMHhhZTdhYmRjMCwgMHhiNmZhZjhlNCwKKwkweDc5NDRjYjRjLCAweGMzZjJhMWE5LCAweDhiN2RmZmJiLCAweGFjMDc3ZDBmLCAweDM0OTBmMDg1LCAweDdlMGY5MTJjLAorCTB4ZTI5YmJlMDAsIDB4MmZkZjAyZDQsIDB4NDQ0ZTY3NDAsIDB4YWJhZTc0ZjgsIDB4NDI0M2U1MDcsIDB4OGIxYmFmOWMsCisJMHg1NmNlOWFiNiwgMHhjYWUyZjlkMiwgMHg1ZDMzZTIzOCwgMHgzMWU5ODdiNSwgMHgxOGM4YjJiZiwgMHg5ZjBhZTdjOCwKKwkweGZmZmNiNWZjLCAweGJiZTcxY2I0LCAweDU5YjgxYzk5LCAweGY3ZTMzN2JiLCAweGJlNzNhNTlmLCAweDM2OWVjZTE5LAorCTB4MTU0ZjIzMGMsIDB4OWFjZjE4ZmIsIDB4NGI2YzhhNjMsIDB4N2Q1OWVhZmIsIDB4ZjZlYWZkNDgsIDB4YzU2N2NlNmMsCisJMHg2NDNlN2U3YSwgMHg3MmY0YzU0ZSwgMHhmYWY4YzM4YSwgMHg5NmM3M2M0NCwgMHhhOWY5Y2Q5MywgMHg3MTQ5MTJjZCwKKwkweGQ2NzRiNmUyLCAweGRmMDM3MTg1LCAweGY3ZjcwZDcyLCAweGRhZmZmMWM0LCAweDNmYzlkMzJhLCAweGEyNzgyYWQ0LAorCTB4M2U3ODE5N2QsIDB4ZWI4Njk1YzIsIDB4MTQ3MzA2ZDcsIDB4YTZiN2ZkMDksIDB4ZmNjZWI5NzIsIDB4YWJjNjMzMWUsCisJMHg0MDlhOWRhMSwgMHhmM2RlYzFmYywgMHg5MTk4ZTlhOSwgMHgwYmZlNGMzZSwgMHhhNDllZjEyZCwgMHhhM2I3ZjAwZiwKKwkweDE3ZmQxYzVmLCAweGRhZGRkZmMxLCAweGJmNmY4NmFmLCAweDk4NGI4NmFhLCAweDM1NGYwNTRlLCAweDY2NjllMWFhLAorCTB4ZTZjOTZjMzUsIDB4MzYxZGZhN2EsIDB4NDkwY2ZlNzUsIDB4MWNhNzI3MGQsIDB4NzNmMGQzMDksIDB4N2YwMWE2ZWQsCisJMHhiYmYwNDRiMywgMHhhMDdlMDE5OSwgMHgwMTc2OWEwZCwgMHhhZmE1MjVlNywgMHhhZGIyZmM5NiwgMHg5M2RmZGNhOSwKKwkweDczZjZhZjVjLCAweGI1OTZiMjI0LCAweDZkZjkwMjMxLCAweGZjYjZmOTU0LCAweDczZmEwMjU1LCAweDdjZWFkNTZjLAorCTB4OGMxNTA3OTgsIDB4YmZmNDhhY2IsIDB4OWY5NWQ3MjQsIDB4MDJlOTcxOGQsIDB4NGIzYWVlN2UsIDB4YzVjZGU5ZWIsCisJMHgyMzhiNjg3NSwgMHhjZjkzNGEzZSwgMHgxZmRkMGQwNSwgMHg5NWI4ZDBiNywgMHg3YzBmOTA3NiwgMHhmYTQ1ZTMwMSwKKwkweGU2MmY4NDBmLCAweGM3NjcyNmJhLCAweDA1ZjAzZTczLCAweDdkZjk5N2VlLCAweGE1MDNlNDNhLCAweDQxZjhlMWJmLAorCTB4Mzk2MmM3ZTEsIDB4YWI5Y2EyNmUsIDB4YTViNzIyYjksIDB4OTdhOWFiOWMsIDB4MDQ3NWM3Y2YsIDB4OTJiOWM3OWQsCisJMHg4MWU3NDY1YywgMHgwOWFlZjRhZSwgMHhjODc3YzUwZiwgMHhjZTZjYmU2NywgMHg5NDZlOTg3NywgMHhkZjIwZDdjZiwKKwkweGVmOWNmNGY5LCAweGQ1ZjBkZjMwLCAweGZkMjg2NzJhLCAweGFmYmNiY2YwLCAweGNjMzdiNDNjLCAweGY4YzA3MWZjLAorCTB4YWI0N2I2NTYsIDB4ODI0Nzc3NjAsIDB4ZDNiY2YwMzksIDB4NzQwZmY4NDMsIDB4M2EzMzM3YmEsIDB4MGYyYjVhNDcsCisJMHhiZjMzOGJlNywgMHhlOTA4ZDNkYiwgMHgwYjk3NWE1YiwgMHhkNjY1NjdkNywgMHgzMzhmM2Q1OSwgMHhmZTUxZWJmNSwKKwkweGRmZjc5NzllLCAweDM4ZGQ4MjBkLCAweGRiOTRjMDVhLCAweGJiNjY4ZGE1LCAweGNjYmRmZDExLCAweDU3ZjJhMTlmLAorCTB4ZDU4NzdlMjgsIDB4MzFhY2QyMmIsIDB4MDE4OGZmODAsIDB4NGNkMzgyM2YsIDB4MzNlMzRkZTcsIDB4MzUxMThmYzksCisJMHgyYjM3NzFkNSwgMHhjY2Y3M2MwNCwgMHhhMjA0NmY5OCwgMHg1NTRlODVkYywgMHg2NThmYzc5MCwgMHg5N2QwZmQ5NywKKwkweDAzNWUzODNjLCAweGNlMDJhYmZhLCAweDBmNDQxOTIzLCAweDM1NzNiOTIzLCAweGU3MDE0OTk1LCAweGZmNjU1YmNhLAorCTB4OWIxZjAwYzUsIDB4N2Y2MDk3OTYsIDB4Nzg5NmNjM2YsIDB4ZDY3OTg2M2MsIDB4ZGE5ZmZmNzIsIDB4NmFiODY2NWYsCisJMHhkODMzYjU1MywgMHhkZmFhYjI3ZSwgMHg3MjJmZDk1NiwgMHhmZWQ1ZjZmMywgMHhmNGQ1YzMzNywgMHgwZWNmZGE2MSwKKwkweGIyMWNkZjZhLCAweGQ1NzZjMWZkLCAweDExYWZiYzdlLCAweDNlNDM2ZjFmLCAweGI1ZmZjZTE4LCAweDFiYTc5NjVmLAorCTB4ZjQ1ZTllNmMsIDB4ZDgxOGU5N2YsIDB4MDYwNzE0OTUsIDB4NmE4ODk4ZmEsIDB4YzM2OWZmMjMsIDB4NWQ1Mzc5ZjksCisJMHhhNjBmZGFiMiwgMHgxZjkyN2U2MywgMHg5MGQ2NDdjZiwgMHgzZTYwNDhmYywgMHg5ODU5ZGY4YSwgMHg0N2Q3ZjI4NywKKwkweGJiZjFlNzRkLCAweDEzNzFiOTYwLCAweDg3OThjMTc5LCAweGZkMDBkZWExLCAweDNmNTdmMmE5LCAweDQ2ZDNmN2MyLAorCTB4M2M0MmVlYzEsIDB4ZmZmM2M3ODMsIDB4ODlhYmRkOGEsIDB4ZmE0YmRmMWMsIDB4NjRiODRhNzMsIDB4ZGJkZTgxYjgsCisJMHhlMzI1NzVlYSwgMHgzZGMyMWJmNywgMHhmZWViMTgzNSwgMHg3NjJlYmIzYywgMHgxYjNkZTgzZCwgMHg3YzA4YzYzMCwKKwkweDcxYmIzNTc2LCAweGZiODRjZmJlLCAweGY1OGZhNzI0LCAweDI3YTIxYTcxLCAweDFkOTZkZGNiLCAweGIyN2EwMGRhLAorCTB4YTg2OTVkZTgsIDB4ZjIzNDVhZjcsIDB4YTFmYzJmMzksIDB4NjViZDZjYmYsIDB4ZmQxMGE2ZTcsIDB4MDI5YmZhMmIsCisJMHg4ZjAwMmI1YiwgMHg5NTZkYmEwMCwgMHhmZTgxZTZmNSwgMHhkMGVlMjQ5NiwgMHgzMTYzYjQwNiwgMHgzZmE5MGFiOCwKKwkweGQyYTM1Y2U1LCAweGViMzdkMzVmLCAweGY3ZWNhYjZmLCAweGRlYjNmYTUyLCAweDU1OWYxZWEzLCAweDU5ZjFhMWVmLAorCTB4ZTk0N2ZkZTUsIDB4MmY4ZTJiNmYsIDB4YjRkZDVmMDQsIDB4MWU4ZWQ5M2YsIDB4N2FhOTZmZTgsIDB4ODc4MzU2N2MsCisJMHg3MmQ1NjdjNiwgMHg3ZjQwZTFmZiwgMHhiZmFjZGY0ZCwgMHg5MzFlZjkzNiwgMHhlMWQzZTY0ZCwgMHgwZTM3ZmRjZSwKKwkweDFhNzZhYjljLCAweDI5YjRhZTUxLCAweDdmNzk0MGZlLCAweGJmYjQxNGJiLCAweDM3Zjc5NmFkLCAweDcxNGJmYmU1LAorCTB4YmRkZmU0ZTksIDB4MThkZjMzZDQsIDB4ZmRjMzVmNmEsIDB4MjQ3YWM5OGMsIDB4MjY0OGY1OTMsIDB4Y2YwODkxZWIsCisJMHgzZWE2N2E5OSwgMHhmMGIwZTgxZSwgMHgyMmY5YjZjNSwgMHgxZTczZTNlYywgMHgxNTNlMzMzYSwgMHhmNjJmMTllMCwKKwkweDVmNjExN2NmLCAweDk5ZTJmMzlhLCAweGM5ZjA0OTAzLCAweGNjYmUyZmNiLCAweGU2Nzg3ZmNiLCAweDliOTQzMjRhLAorCTB4MmZjZGVmN2MsIDB4OTYyYTM4MDMsIDB4ZGUwYWM3ZWYsIDB4OGRiN2JmNGEsIDB4YmJhMzdhZTIsIDB4YmZlZTczZTEsCisJMHhmYjhhZjkwNCwgMHg4N2FhNjM1NiwgMHg0MmYxN2ZhMSwgMHgzMmQ0N2Y3MiwgMHhlOTRlZWZhOCwgMHgzMTBmMmNiNywKKwkweDZlZWE0YTJmLCAweDQ2N2U0ZjM4LCAweGZmMjg3OTE0LCAweDQwYmZlMWU2LCAweGVlNTNjZmI0LCAweGVmYWI5NDY3LAorCTB4NmQ0NTQ0NjcsIDB4OGMyZmZkMjIsIDB4ZWYyOGNkZjksIDB4YmEwZThjMjIsIDB4MjhkNmY4NGYsIDB4NjQyYzFmYmUsCisJMHgzNzZlMGFmNiwgMHgzOWYyNTk0OCwgMHgzMWNmYmEwZCwgMHhkNzZlNThiZiwgMHhiMWNmY2I3YywgMHhiMWM2YTE3YywKKwkweGRmZDllZDFlLCAweDQ3OGFhYTRlLCAweDE3Mzk1OGY1LCAweDdmNzgzNzk3LCAweDFiZjVkNzcyLCAweGJlMGUxZjljLAorCTB4MjNlNzM5M2YsIDB4MjNjMmViODEsIDB4M2JhNWJmYjgsIDB4YjlmN2UyNTcsIDB4YTg4NmZjMDIsIDB4OWYzNzBlZjcsCisJMHg3ZGI4YTNiNSwgMHgwZTlmMzgzZiwgMHgwZTMxOWYzZSwgMHhmZWU2OWYzZSwgMHhmZWIwYjVhOCwgMHhjYjdlZThlZSwKKwkweDVkOWZjNDEzLCAweGM4NmJlNzIxLCAweDVmY2QwNmJjLCAweGQ4YTYyOGZkLCAweGI3YTQ1YTc5LCAweDMyYjdjZDliLAorCTB4YzFmOWNhYWYsIDB4YTJjYTQxNDYsIDB4Nzk0ZmVhZmQsIDB4MzE4M2ZkMmEsIDB4OGUyYTE0YmIsIDB4YjgxOWY0ODMsCisJMHg0ZTZkZWFiZiwgMHg1ZDE5ZmU4NiwgMHhjZjA3M2Q5YywgMHg0NWZlMzc5NSwgMHhkZTVjZjIxYiwgMHhkNjNlNzk2ZSwKKwkweGI5ZDM4NTQ2LCAweDNkMjhjNmNlLCAweDUxZGRkYmQ5LCAweDk3ZmExOTMzLCAweDlhNzRkMzQ1LCAweDcyYThiMjk3LAorCTB4OGRhOTZmM2EsIDB4OGY2OGVkNjUsIDB4ZDcyMzlmMDYsIDB4Y2U5YmI4OGUsIDB4NjhhZDY5MDEsIDB4NzAzYTQwNDEsCisJMHhhNDYxZDkyZSwgMHhlOGI5ODlmOCwgMHhjNWM4ZTc4NiwgMHg4ZjIzOWQ5YiwgMHg5MWNmYzk5OSwgMHg3NDI1ZTk0NywKKwkweGVhNDViNDU5LCAweDdmMjM5ZTQzLCAweGY3ZGYxNDZjLCAweDcxM2M3MWJiLCAweDI3OGMzZjg4LCAweGEyMWM3MDZkLAorCTB4MzFkMWM3OTksIDB4ZjVmMjAyM2YsIDB4N2YyMzE3NjYsIDB4YzdkZTNjYmEsIDB4ZWE1MDc1ZTQsIDB4ODYxZWNjMWIsCisJMHhiN2FiNDBmMiwgMHg2OGE3YTg0YiwgMHg2MTNlZjljMywgMHg0ZTU4NjliMCwgMHhmN2M4YmYwOCwgMHhmYmU4ZTk0NywKKwkweDM0Y2Q3MjRmLCAweGQ3MjMxYWFmLCAweDVhZmNlN2NiLCAweDdhNGZlOTA4LCAweDRmZTI5NDc1LCAweGMzNjc0ZDBhLAorCTB4MGQzY2M5ZDEsIDB4ZjBhNzQ3M2YsIDB4OWU5MzAyZTEsIDB4MzAyZGY3Y2UsIDB4MGZkMTRhZDksIDB4ZWYwODAwYjIsCisJMHhmYTgwOThiMywgMHhmN2UyMmRiNywgMHgwZGJiNDU4MSwgMHg1MzM3ZTdlOSwgMHg2ZmY5ZmY2ZSwgMHhiOWY5YmExOCwKKwkweDQzMzUzZTdjLCAweDRlZTNmNzQ3LCAweDhmNjFjYzA5LCAweGQ1N2U3YTE5LCAweDg2OWU4Y2U5LCAweDY2YmI5YTZlLAorCTB4ZWM4NzU5OWQsIDB4ZWZmMmUyZjcsIDB4ODY3YjYxMTUsIDB4MTY3NTUzZTMsIDB4Nzc5ZmVjODksIDB4YTg1Y2ExNDYsCisJMHgwZjFmNWI0ZSwgMHg0MmNhYTJmMCwgMHg5NGRmZGQxZCwgMHgwOGVlNDRlMywgMHhkMTlmYzcyZSwgMHhhMjhlNGViYSwKKwkweDUxZTdkMTc4LCAweDYyNDc0OGE1LCAweGEzZTIyYTdmLCAweGVhMDI4OWM0LCAweDllMmEzN2JkLCAweGQ3ZTFjZGVhLAorCTB4MThkZWEwYzUsIDB4N2Y2N2QzOTQsIDB4MWViNDYyZWYsIDB4MTI3YTUwYjYsIDB4MzAyYzRmZGEsIDB4MDdjYjIzNmUsCisJMHhmMzAyYTNiNCwgMHgwMTYyN2VkMSwgMHgyZjJjMjdlYiwgMHg5MDg1ZjZiNiwgMHg2MDlhNGExNywgMHgwZDUyOTJkYiwKKwkweGQwOTA5ZTdjLCAweGZmOTJhOTQyLCAweGVlNWI0M2FjLCAweDU3YWViMTBmLCAweGM2ZmQ3NWU1LCAweDYwMWI0Yzc2LAorCTB4OGVkMDcxM2IsIDB4MmFlNWZiMDEsIDB4ZDUxN2RiY2UsIDB4NjFlMzJjYTcsIDB4MTc2NTc1NDgsIDB4ZTliMThlYzksCisJMHg4ODkzM2UxNSwgMHgxZTYxMDZiZiwgMHg0NWZiMDRhZiwgMHhkNWIwZGU3NSwgMHhmYmExNGJlYiwgMHg2ZDM4ZjJmZSwKKwkweGEzNDZkNjJiLCAweDFjNTUwMzFkLCAweGJjZGI5ZjQ4LCAweDk5NjUyOTZkLCAweGNlYzhlMzgzLCAweDhkMTNlOTkxLAorCTB4MTdhODg5YjYsIDB4NWM3MjVmZjMsIDB4OTdmNDBjY2IsIDB4NzQzNDliMjQsIDB4NTMyNjAxM2UsIDB4NmU2MTJmNzUsCisJMHgzOGI0ZjQ1OSwgMHhjY2RkNDUzNCwgMHgyZWQwOTI2ZSwgMHgzZjNkMjVlZiwgMHhmODk2YmFlMSwgMHg2MmYwZTEyMCwKKwkweGE0YWI3MTg2LCAweGVmMDE3NmI4LCAweDIzZjQwZDAzLCAweDk3YWU2ZmRmLCAweDVjNTdiOWUzLCAweDA0OGUzNDY1LAorCTB4Y2VmZWMwZWIsIDB4ZjM4ZDBlYzgsIDB4NzQ3OTQ1Y2QsIDB4NTE4ZTY5ZTUsIDB4ZTVkNThmYzIsIDB4ZGNmYzcxYzksCisJMHhlMWQ1ZmRjMiwgMHgzYWU4MDk3ZSwgMHg0MDU3YjZhOSwgMHgzODBjMDEzOCwgMHg1YzI3YzVmNCwgMHg0MjZiNGM2ZiwKKwkweDA0NWFmMjc5LCAweDZkYjU4YmY5LCAweGYyMDdjYzk5LCAweDQ1NzQ1NTI3LCAweGZiM2NlMGU1LCAweGM5YTZmZmE1LAorCTB4ZGYwYjA3OTAsIDB4OWMyMDdjYWQsIDB4YTEzNmIzZjQsIDB4MjVkOTA2NjUsIDB4Mjg1ODY5ZjcsIDB4MWM5OGNmM2YsCisJMHhjODI4YzdlZSwgMHg2MDlmZmNlMSwgMHgxZWE5NGQ2YiwgMHg0NGQzZTk4NywgMHhjZjk3NWYzNywgMHgxZGIzOTA2NywKKwkweDlmMTFkOWY0LCAweDFjNThmYTJkLCAweDc1OWE3YmQ0LCAweDliNzNlOWExLCAweDdlYzBlZmRjLCAweDE4NWZjZjIxLAorCTB4N2Y5MTE5NzMsIDB4M2I5MzgyYjUsIDB4ZGJlZWY3MzksIDB4Y2U4MmNmYjcsIDB4NTVlNzQ2MTMsIDB4OGQ3YWM5MzYsCisJMHg0ZTQ0NGVkMiwgMHhkODQ2MTUzYiwgMHg0NWNmMGMxZCwgMHhkZjA3NjYwYSwgMHg5YjNlY2MwNywgMHhmOWFiZDYwZiwKKwkweDdiNDg2ZDJiLCAweDc5MWNjMWViLCAweGIyNmI0OTFmLCAweDRjYjJmZDYxLCAweDk0ZmQwZGJiLCAweDFhNTVmN2MxLAorCTB4NzBkYTI2ZDMsIDB4MGM2NzFhN2QsIDB4NzAzMWE5ZDAsIDB4Y2I0ZWU4NWYsIDB4NTNjZjFmN2UsIDB4MmM3NDdhOTksCisJMHg3MDU5MWNmMCwgMHgyMTczYzdhYSwgMHg5NzI4MzdiMSwgMHgxZDM3OTdjZiwgMHg5YjQyZTdlMiwgMHg3OGJkNDU0YywKKwkweDE0YzlhMTBlLCAweGZlYzc0NDU3LCAweGE5OWNmYzRjLCAweDNhNjRkZjUyLCAweDY0ZGVmMjQ2LCAweDEzNTZmMWU3LAorCTB4YTIwMjBmZWUsIDB4M2JhMWU3YzcsIDB4ODNjZDE4ZWQsIDB4MGU1YTZmNTIsIDB4N2IyNmFiOTcsIDB4NWJmYmMzMTcsCisJMHhkNTNmNzZlMSwgMHgzZTlkMTMwYiwgMHgxNjFmZTAwZCwgMHg0ZmZlZThjNywgMHg1NWYzOTE5OCwgMHgzMThmYWMwNCwKKwkweDdlOTVlZjgwLCAweGQxZDFjYjZmLCAweDE3MjUzNWJjLCAweDdlMTA5NmY1LCAweDY3MDRkZTIyLCAweDFiMjJiNjRkLAorCTB4ZGYzOGRiZWQsIDB4YjQ2MzZmZDAsIDB4YWY5Y2RmNDIsIDB4NWJlNzk3MWYsIDB4M2U1MWE3NjksIDB4NDM0ZjdhZmYsCisJMHg1OGIyZmNjZSwgMHhkNzM5MTNmNCwgMHhhNmJiNjBlNCwgMHg4M2I0NDZlNSwgMHg2ZmUzOTFiNCwgMHg2MTg2ZGVkOCwKKwkweDI4NWU2YmRiLCAweGYyMzhmN2I3LCAweGM4YjIzNjg1LCAweDUwZTllZDhjLCAweGMzYTA4NDVlLCAweGZlNzZlNDY3LAorCTB4MzBlZGUzNTcsIDB4OTdkZjc0YjMsIDB4OWYzMDVhNjAsIDB4YTNkZTk0MmQsIDB4YTM4YzQ2YTQsIDB4ZGRmYTFiOGYsCisJMHhlYmJmOTYzNywgMHg5MDI0N2VkNCwgMHhmYzcxN2JiZiwgMHgxZWNmOTMyYiwgMHhlZTFjYTEyYiwgMHhkYjJlZGEzZiwKKwkweDYxOWQ4YTI3LCAweDJlZGVkYjkxLCAweDNlZTg3YmYwLCAweGVmNGVkYzIxLCAweDg3NzZjODM2LCAweDBmM2Q0YzI1LAorCTB4Zjk0MWY3ODMsIDB4ZTBhZTVjM2EsIDB4YzcyZWU2ZTcsIDB4MDQ2YjhhMzEsIDB4NzdlNWYzZjMsIDB4YjQwZThhM2UsCisJMHg3M2VmNTA0ZiwgMHgwNGJiNzM2NCwgMHgxYzRiYjQ1MywgMHg2MTBkOWZiMiwgMHg5ZGEwMWJmNCwgMHg4MGZkZjBhMiwKKwkweGZhNDJiNzVmLCAweDNmMDA1YmE3LCAweDBkNmZjODAzLCAweDdiMjQyYmI0LCAweGM5MGRiZTg4LCAweGU3Yzg2OTdkLAorCTB4MDUzYmYyYTksIDB4NWNkN2Y2NDMsIDB4NDc4NWE3MmUsIDB4ZmU0MzRiM2YsIDB4NGZlYjhiMmUsIDB4Zjk4MmVmYzAsCisJMHhhZTQ3ODVmYywgMHg1ZTc4ZTAyNiwgMHhjZTcwMzE5OCwgMHhhYjQzZTI4NiwgMHg3YmYzYTcxNywgMHgxY2ZmYzdkOSwKKwkweGZlZDEwYWVkLCAweDQ1N2ZlZWNkLCAweDg2YjRkZDlkLCAweDVjZTVjMGY0LCAweGRmNWJmYzBmLCAweDhjYmVkYjA3LAorCTB4ODIxZDlkZWIsIDB4Y2RhNGVmZGEsIDB4NWZlNzdhZTUsIDB4N2FjYzdkZTQsIDB4MmRmN2E0NTUsIDB4MmViOTY1Y2UsCisJMHgwYWI2MWYyMCwgMHg3ZjI4ZTVlNiwgMHhlN2UxMWY1MywgMHg1ZTNmNTZlNiwgMHgyMTAzZDlmZiwgMHhlZDE4NDFmOCwKKwkweDgwNGU3M2ZhLCAweGFjZGM1YzNkLCAweGEzNWEzZjI3LCAweDhkYzQ3ZDI5LCAweGFmYzMxY2UyLCAweDcxY2I4N2IzLAorCTB4MWU0YjdkNzksIDB4MjRmM2YyMzUsIDB4NWIxN2FlMmUsIDB4MzlkM2Y3NWMsIDB4MjNmM2UwOTUsIDB4MjQzYmQ1YzMsCisJMHhiZWE1M2RjYiwgMHg3OTQ3ZGIwMSwgMHhmZTQ3OWE2MiwgMHgyMzY4NGI4MCwgMHg5NjRkYmZhMCwgMHg3Njc4YzE3YiwKKwkweGYzYzg2NGUyLCAweDEyYjkwNDYzLCAweDE4NDU2ODc1LCAweGVkOTNhYmI2LCAweDNmOGFlZGIxLCAweGU4YzhhMmEzLAorCTB4Yjc1ZWY4MDgsIDB4MWE1OGM4YjgsIDB4OGM4ZDJmNDAsIDB4NmUwZGRmOWYsIDB4MDFkY2NlZmYsIDB4YWZhNTVhN2QsCisJMHg0NTlmNzBlOCwgMHhmODljNTBkZiwgMHg0MzM5MDFhNywgMHhjYWI4NjU4YSwgMHgwZmZhNTE4ZSwgMHg3MDE2M2YzZSwKKwkweGYzOGMyYzVlLCAweDVhNjdiNzI5LCAweGU4MThkY2YxLCAweDk2MmI2YmI3LCAweDZkZjljNDhmLCAweDU4MmY1ZDE1LAorCTB4M2ZmYTFlNjEsIDB4ZTczOWQwMzAsIDB4ZWNiZTY1MGYsIDB4Yjg3MmY5OTMsIDB4NDNiMWYzZjUsIDB4ZjYzMThjYTAsCisJMHg5NzgyM2IwNCwgMHhjNjRlODBkNiwgMHg2OGZlNDA4ZiwgMHhmYjk0ZDRjYywgMHg1Y2IzOGM0MywgMHhmZDA4NjcxZSwKKwkweGFmZGNkNmZhLCAweGU2OTc1ZmE3LCAweDUxYWZkMDg2LCAweGM1MDQ3NjdmLCAweGQ0NjEwMjFmLCAweGY0MjExZDliLAorCTB4ZWM4MjEzZWIsIDB4ZWRjZjkwMGYsIDB4MWQ0OWQwOWMsIDB4MjcwZjMwN2QsIDB4NmY2MTFkNmUsIDB4OTE5ZWU4OTQsCisJMHhmNjA0NWVjMywgMHgzMjY3OGJjMywgMHgyMzlmNmY1MSwgMHgyM2M3YmMwYywgMHg2MDhjMzFkYiwgMHgyMjE2MjNiMCwKKwkweDY3OTk3MzVlLCAweGM1MDIwM2RmLCAweDQ4ZWU1YTUxLCAweDVjMDRlZWEzLCAweGE3YWQ5YjhmLCAweDM3MTFmYjI0LAorCTB4ZGM2MTNhYzIsIDB4YjJkYWY1YTEsIDB4MGNlMmExMTksIDB4Mjc0MDM4ZmYsIDB4ZWYwMmJhMjgsIDB4MDQyYWMwMDcsCisJMHhjNDg2OTVjNCwgMHg2M2UyODJjYiwgMHgzODE5NGUxOCwgMHg1YTFkYWJmZiwgMHg3NTYyYWVmZiwgMHgzNWUzNmFmYywKKwkweGFjMzBiZmVlLCAweDA0MjdmZTYwLCAweDJlYWExZjNjLCAweDBiYWU1ZjlmLCAweGUyYTljZjhlLCAweGJhOWQwYjVhLAorCTB4ODg3YzdjNjAsIDB4NmY4Y2IyNmYsIDB4MjkwN2I2Y2EsIDB4NDUyZDNlMGUsIDB4NjRhY2ZkZTQsIDB4YzcwN2NmNjQsCisJMHhiZDg1MGNiZCwgMHhjM2VhMmQwZSwgMHhmN2Y0OGMxNSwgMHg5ZTM2M2Y2MCwgMHg1ZWZmMjUxNywgMHgwOWNmNjMwNSwKKwkweDdkNWFkZTc0LCAweDU5ZTllNGRmLCAweDFjZmJmOGU3LCAweDhmZDhlNTJkLCAweDUwYzM1MzJkLCAweGFmYmUwZTNmLAorCTB4ZjA5YmM0YTAsIDB4N2RlMDRjOTgsIDB4MjJkZGU1NjksIDB4ZTEwZDYyY2IsIDB4NTNiNzdjYzcsIDB4ODc5N2UyYjksCisJMHg0YjEyYTZmYSwgMHg1NWVlYjljMCwgMHhkZDNlYTA2YywgMHgxZTg1ZjJhMywgMHg1OWQ2ZDZmNywgMHgxYzRmZWYxNCwKKwkweDgyZWMyOWVmLCAweGEzM2IyNGEyLCAweDY2YWE0ODc5LCAweDNjYzAwNzY0LCAweDg2ZmFlMmE4LCAweGNlMzQ1ZDk0LAorCTB4YzU4YzM1NGIsIDB4YWFhMDM4ZjIsIDB4NzA3NjAxM2MsIDB4YmYxODRmYTQsIDB4ZTMwZmNlMmEsIDB4NzZjMWMxNTQsCisJMHg0ZGVjY2RlNywgMHgwZGU2NGE0MywgMHhmY2NkZjllNSwgMHg1ZTM5MDY4ZCwgMHg2NDZlNDZmOCwgMHg2MzNiZTkxYywKKwkweDc3ZDQxOGQ4LCAweGE2OWY4YjJjLCAweGViMDRiOGY1LCAweDM0NTk3ZTgxLCAweDAzYzU0Mjg0LCAweDY4ZmI0MzM3LAorCTB4NWY5MGJhMDcsIDB4YzRkZmQxZTIsIDB4MzBjYWVmNTQsIDB4YzlmNzQ4ODcsIDB4YjM4ZTYyODQsIDB4ZjFlNGViMTAsCisJMHhmYzQ2N2NlMSwgMHg5NTA3MDg2ZCwgMHg5ODU5ZjgwYiwgMHhiY2UwNzA2YywgMHhjMzAwMGMxYiwgMHgzMzNkMDU5MCwKKwkweDU2YmU0MDI2LCAweDE1YWYzN2Y2LCAweDMzMzA4ODk4LCAweDRmZGM4ZGRiLCAweGUzNmJiY2E4LCAweDg2NmQ3N2E3LAorCTB4ZmY3NDA3ZWIsIDB4Y2ZlYzMwYmUsIDB4ZmE1M2JmYzcsIDB4ZGI4ZWYyMTksIDB4ZmIyN2JlMGQsIDB4N2RmYzFjY2QsCisJMHg5NTFkZjkxOSwgMHhmZjliODdmZSwgMHhmYjZkZGVlMSwgMHgyNzc3ZDRjMywgMHgzMjY3YmY3MCwgMHgyMGU1NmJkMSwKKwkweDRjYmMxMmJkLCAweDFlZmM0N2E2LCAweDRhYmRjMmU1LCAweDBjNzdhZGIxLCAweGZiM2MzN2RlLCAweGZkMWQ4NDcwLAorCTB4ZjBlMzAzZTAsIDB4ZWZlNWE5ZGQsIDB4ZWQ3NWZkZDEsIDB4OTM2MWUwMGQsIDB4OGMwZmJlNDgsIDB4YWZlZjZlNGIsCisJMHgwMmZkMTcxZCwgMHhiYzA2ZGFlNCwgMHg0ZmU3ODQzNCwgMHgyNzlkMTkyYSwgMHhjZjRhYjhiMCwgMHgwMDBlNzQ4OSwKKwkweDEzOTJhMGM2LCAweDQwMTNlZjAxLCAweGYxMGUxYjdiLCAweGYxNWJhZjczLCAweGIwNzEwYjlkLCAweGQwMmJkNDVmLAorCTB4NDI1NWIwNmUsIDB4NDgzYjA4N2UsIDB4YmYxOWFiNDksIDB4ZDVlMGFjMWYsIDB4MWEzZDA3YTgsIDB4ZjVjMzUyZTksCisJMHgzZWE2ZDllOCwgMHhlOTM1Y2YxMSwgMHhlNDQ1ZmFlMiwgMHgyZTY4ZTcxZiwgMHgzN2U4MDdjNywgMHgwYmY5ZDE5ZSwKKwkweGNlN2M5MjZkLCAweGRmYzRhNDcxLCAweGZiZTRjYjRkLCAweDg0Y2ZkMjliLCAweGZlNTkxYWQxLCAweDQ3ZmJkMmY3LAorCTB4ZDU0ZTIzYjMsIDB4ZjJjNjc2NGIsIDB4NDQyZmM1ZjYsIDB4MTFlY2ZjZmYsIDB4MDBkM2VhYTcsIDB4ZTE2N2Q4MmUsCisJMHgyYmE5ZDI3MCwgMHhlY2M2NjY2OSwgMHhkMTBiYWNmYiwgMHhlZjNiM2Y5ZiwgMHg4MDc0OTVkNCwgMHg3OGQ5ZjY4YiwKKwkweDQ2NDYxNGY5LCAweDA5N2RmOGNlLCAweDMxOWZkMTBiLCAweGQ1NTliNDYxLCAweGQ3Mzg1YmZlLCAweGQ1M2NkZmYxLAorCTB4Y2YyMTM0MWEsIDB4NWEzNmRmNjMsIDB4ZThjOTRmMzksIDB4ZjNiM2FkM2UsIDB4MmUzMWE3OTcsIDB4NDdmNjU0ZTksCisJMHhkZjQ4MmU4NywgMHhkZTBiMjI4MSwgMHg3MTdmOTMyMywgMHg5ZDBmMTQ1MSwgMHg5ZGQ5ZDMyOSwgMHgxNDUyZWVmOCwKKwkweDY4YmIyZGZhLCAweGZhMGQ0NzdlLCAweDZiZmU5ZmU5LCAweDQzODJmNGZjLCAweGNjY2E5Nzc5LCAweDFiZmY4MTJhLAorCTB4MmMyYjk4MWIsIDB4OTllZTgwMjMsIDB4OWY5ZDczNDMsIDB4ODFiOGE2MDMsIDB4ZmZkMjhmODIsIDB4Njk2MGJjMTAsCisJMHhiYzQwOThjNSwgMHgwYTNiNTFiNiwgMHgwZDBhMTc1ZSwgMHhjNzA1ODdhNCwgMHhmZDA4MmU4NywgMHg1NDljZjFkYiwKKwkweDJmZDZjZmM0LCAweDEwYmE3NWMyLCAweDAwMmE5ZmQ5LCAweDllYjc5ZTFjLCAweDdjNDJlZGQ2LCAweDFlYzE3NmZmLAorCTB4M2FmOGViMDAsIDB4YTIyYmVmNTYsIDB4ZDZhM2ZjNzUsIDB4MDI3YTNkNTEsIDB4ZGZjNWRiYmUsIDB4ZTM5NjY4NmYsCisJMHhiYmM2NGY1MCwgMHgwMTlmNjg3YywgMHgzMmI5ZDFkZCwgMHhmYzllOGE1ZiwgMHgwNWUzNjU0OCwgMHhiMDNmYTA0NywKKwkweGNiZjczNDZlLCAweDY5ZDM5MjVjLCAweDQ5Y2YxNjg2LCAweDAxZjc0YmEwLCAweGZhODVhZDgxLCAweGY1OTc2YmVlLAorCTB4ZWVjYzlmYTgsIDB4M2Q0N2EzM2MsIDB4MTljMGVlYmEsIDB4YWQ0YmRlM2QsIDB4YTlkYTE4NDMsIDB4ODQ3N2E2ZGIsCisJMHgzMmZlZmZkMiwgMHg5N2YyYWI1YSwgMHhkMWQ3NzYyOSwgMHhlOGY1ZWM5NCwgMHgxNmFiYWI3NywgMHhlYWRlMWVlOCwKKwkweDZlMWZiOWQ3LCAweDI1MWMzMmY1LCAweGIyZGY3NzYzLCAweDU1YjhmYzlmLCAweDk4ZjVlZWNlLCAweDQ3N2Q2NTJlLAorCTB4YzU4OGRkZjEsIDB4ZGNlYWFkMmUsIDB4MDg5YTkyYzAsIDB4Y2FiZTNjNTUsIDB4OTc4MmFiMTMsIDB4YzBlYWMwYjYsCisJMHgyMWI0YmIzZSwgMHhjMzFkZjU0OSwgMHhlZjgyY2Y1ZCwgMHhkMGZlMGUyOCwgMHhkNzkwYWZmZSwgMHg3MzZkYjE3MSwKKwkweDE2YmJmYTJmLCAweGNjN2FkNGJiLCAweDYyYjVjZWVjLCAweDExZWRlMjBjLCAweGZlY2UxYWVjLCAweDg0Yjc3ZTEyLAorCTB4MDBkMjEwOGYsIDB4N2RlNjBhYmQsIDB4YTNkNzA3NWEsIDB4NjQ4YzJhZWEsIDB4MGMyMjU0OWYsIDB4YWI1OTVhZjMsCisJMHg3MzkzZTNmNSwgMHg1NGY0NTM0NywgMHhhODEwZWVlZSwgMHhiYjk3MmRkYywgMHg1NzZlMDQ2YiwgMHhhOTc1ZjJjYiwKKwkweDgzOTJlMzhjLCAweDc1ZDFhNzI3LCAweDM3YTM5ZjUyLCAweGE1ZGYwMDMzLCAweDg4ZTdlNTE1LCAweDQzN2Q2NTFlLAorCTB4YzQ4NTU3MTksIDB4MjkwZDhkZjUsIDB4ZGRiMGU5ZWYsIDB4NTgxN2RmYTUsIDB4NGI4ZDFhNmMsIDB4YTkyZDQ3YTUsCisJMHgxZTU1YzM1MSwgMHhkNTllOTA1ZCwgMHhiZGY5NDNhNywgMHhmZjlkNDFiNCwgMHhiZWYyZDFmMywgMHg5MGYyYzc5ZSwKKwkweDJkMThkZTlmLCAweDA3MTg5Zjg4LCAweGJjYTUzZmUxLCAweDgxZWYwMjc3LCAweDBmM2FkMjVkLCAweGVhZDY3ZDIyLAorCTB4ZGY3MDBhYmIsIDB4MTE3NWE0YmIsIDB4N2U0Mzk0YWMsIDB4YjhhZmRmMWQsIDB4Y2UwMWEyYmUsIDB4NzUxYmVmYzMsCisJMHhhN2RlMzMwZSwgMHg4ODE0YWRmNSwgMHgwMGIwOTc2ZSwgMHhiMDZkMjdiZCwgMHhhMWRhYzEzZSwgMHg3NzIyYmY3MCwKKwkweGU0ZjU5Y2MzLCAweDk4MjgzZDBmLCAweDEzMjg2ZjUxLCAweDgzZGUyMjFkLCAweDhmYzYxYzZmLCAweDgzZTY1MTdlLAorCTB4MWYyZmFjMTMsIDB4MjI0NmNhZjEsIDB4OWVjYTc1ODUsIDB4OTlmNjgyM2YsIDB4Zjk5NmI3ZWMsIDB4M2Q5NDhlMzAsCisJMHhjNGJmMjA0ZSwgMHg0MzcxODA5ZCwgMHhjOTIyYTYxMSwgMHgzN2IwMzk5MSwgMHhhZDlhNDE4NCwgMHhmOTIwYWY2ZCwKKwkweGU2NmY1NjNlLCAweDU4ZGE2MmVmLCAweGZjNzBiY2EwLCAweGJlNzAxMzMzLCAweDBiYjI3NTEwLCAweGZkZTg3YjkzLAorCTB4OWI2ZDM5YmQsIDB4Y2M1Y2EyMmYsIDB4M2QxNDcwY2MsIDB4MTkzZGY4MDUsIDB4ZjI3ZmZiYzYsIDB4MTZiZmMxNzUsCisJMHgzZmNiYTlkYSwgMHgwYWQzZjI0NiwgMHhkNmZkODFlNCwgMHhkYTM5NjRkOSwgMHg1YWNmZjZhMSwgMHhjMTIxYWU1MSwKKwkweDdlYTdjYWNjLCAweDMyZjg5NDEzLCAweGMzZWQxNWQwLCAweDlmYTRhNTVkLCAweDlmN2VlNTU4LCAweGRkYjg5NDJkLAorCTB4MmU3Y2EwZmMsIDB4ZTJkNmY5OGQsIDB4ZDFiZWZhZjksIDB4ZjQ5NWYyOGMsIDB4Y2FhYmZiMWIsIDB4NWUyODMxMDQsCisJMHhlNjFhMzc1MCwgMHg0ZmFkYTU3OSwgMHg1YmU5ZGU3NSwgMHhlOTAxYmY2YywgMHgxODdkYjgyYywgMHgzOTVlMmFiZSwKKwkweDhhMmQ3YjRkLCAweGNjMWQ3N2VlLCAweGZlZThkZWIwLCAweDNlYThkNjk0LCAweDg3MzNhNGI3LCAweDUzYmJkZDA3LAorCTB4ZjZkOTlmY2IsIDB4Nzc3YmEwYTQsIDB4ZWVmNzQxMTksIDB4ZGRlZTgyZjIsIDB4MmRmOWVmYTksIDB4YmEwOTRlNzQsCisJMHhlN2JlYTc3NywgMHg1NGNkYjA2NywgMHhlNjkzMGZkNSwgMHg5Yzg4ZTBhOSwgMHgyM2Y1NTViYiwgMHhlN2Q1Y2JlZCwKKwkweGJjZmY4ZWFlLCAweDc3Yzc0ODQyLCAweDJlN2Q3ZDA2LCAweGUwNjY4Nzk4LCAweGMxOThlMjhkLCAweDBhMmYyNDdkLAorCTB4M2UxYTQzMmEsIDB4Njk4NGNjMmUsIDB4MGJhMWExNzMsIDB4OTEzOWE0ZTksIDB4ZTM4NmU3ZGIsIDB4YTBiYWRiMGYsCisJMHg5Nzg4ZTMxZCwgMHhmYzZmZTg4YywgMHg0NTJmZTA4OSwgMHg5ZjI4YzRmYiwgMHgxOGZkMTk1MywgMHhhZjMzZWQ1MywKKwkweDUyYmU3MDE1LCAweDVjZjJkYmQyLCAweDdkNjFmM2IzLCAweDQ5NGFmN2YyLCAweGRlZTAxZGZjLCAweDQ2M2ViOGQxLAorCTB4ZjkwMzZjN2MsIDB4YWY3ZTU1ZTYsIDB4NDc2Y2FjNzgsIDB4NWYzY2VkMjgsIDB4MGYzNTMyNTgsIDB4Y2M3ZmNmYmUsCisJMHhlY2UyODMzMSwgMHhmMDdlZmMxZCwgMHhhNzhmM2Q0ZSwgMHhlN2U1NWVmOCwgMHhmYTNiZjM1YiwgMHhmZTAwOGUzNCwKKwkweGY1Yzc5OTNlLCAweGE1OWM2NzkwLCAweGViYTkxZjE0LCAweGY5MTY1ZDg0LCAweDFlYWNlZGE5LCAweDc1ZDQ2NWVmLAorCTB4N2VlMTQ3NzYsIDB4YWIzY2UwNTYsIDB4NjBjOWJmNDcsIDB4ODljZmJjYmUsIDB4YWY2OGUxZmQsIDB4NzQzZGFjZmYsCisJMHg5ZTZkNmQzYywgMHg5OGUzZjg5ZSwgMHgxZWFiZDcyYywgMHg5MWJiNzJkNiwgMHhiOWUxNjYzOSwgMHg1NzVlNDU3MSwKKwkweGFiZTNlN2VkLCAweGU3ZTdhODVhLCAweDFkMWEzMTYwLCAweDljODM2ZTQyLCAweGMzOTZhYjNlLCAweDcwN2VmNTBlLAorCTB4Y2EzZDdmOGIsIDB4YWFkZjkwMGUsIDB4NGMxNzRiN2EsIDB4MTJiN2JiMjcsIDB4MzFmMjM2ZTQsIDB4Nzk3NTczYzgsCisJMHgxN2M5MTM3MiwgMHg3Y2FhZTc5MCwgMHgzYzgwZGU3NywgMHhkZjBlYmZjZiwgMHg0MjZhNzY5ZCwgMHg4MTcwZjM4ZSwKKwkweGRhNzhmMzQ4LCAweGZmZTY5NTM1LCAweGY0NDc5ODE5LCAweDY0MzMzZGE3LCAweGRlN2NmOGRlLCAweGM2NWViZTZjLAorCTB4Yjc1ODBmYjUsIDB4MmViZjdhZTAsIDB4ZjJmNmViZTAsIDB4N2RmYWYyMzAsIDB4MGE3NzVkNzksIDB4NGMyODQ1YmQsCisJMHhhMjcwY2VkZCwgMHg2MzQ2MjVkYiwgMHgzODdiOWUwOSwgMHgxMzY1ZjI5NiwgMHg3ZWFhZTFjNiwgMHhmZDNkZDAyZSwKKwkweDZlM2VlYjdmLCAweGJmNWZmZDQxLCAweGZkMDVhOGZmLCAweGEzZjZlZTYxLCAweDU5NGRiMDE2LCAweDhiNWE0ZWFkLAorCTB4ODVkMDNjN2EsIDB4YmE5ZWY1MWQsIDB4N2ZjMjJlOGUsIDB4NmViOGZiNjUsIDB4MjFkOTVmY2MsIDB4ZWUzZGZiZDAsCisJMHhkM2E3MTcwMywgMHgxMzVmNTkzOCwgMHgwZTc3MGJjNiwgMHhmMjhmZDc4MywgMHgzN2JlZmViOCwgMHgzMDdlZTI0ZiwKKwkweGZiODlmNDE3LCAweGRmODMwMWZkLCAweDgwMWQyMDJmLCAweDVlYmM0MjVjLCAweDM1ZTVmMDE3LCAweGIxYTM3M2I2LAorCTB4ZjUxZTk0MjIsIDB4MWY3Y2YyNmYsIDB4ZTg2N2E4ZDksIDB4ZWY4NWFmYWYsIDB4NTJjNzFjNzEsIDB4NDg4ZGU5OGUsCisJMHhiMjA1ZmI0NywgMHgyN2VkZGRiNSwgMHhmYjYwNDYxNywgMHhmYTg2M2FmNSwgMHgxN2RmODI4NSwgMHhlMjFmYmQyOSwKKwkweGQ2YTgzZmY4LCAweDM1ODBhN2ExLCAweGJlNjk2YjU2LCAweDUyZDdhODNmLCAweDc0ZmJkYTNiLCAweGMxNWUyZjA0LAorCTB4YWUxYzU1Y2YsIDB4MDkyOWE4ZmUsIDB4NTZhMGZkZGEsIDB4NTMwYzdiYTAsIDB4MzFmM2ZiZWYsIDB4ZTBhZjE3ODQsCisJMHgzZDMwNWFmYSwgMHg0YzFhZjQyYiwgMHgzYmY0YzE5ZiwgMHhiZTZiNGU4NCwgMHhjOTFlOWQxOSwgMHhlNGQ1ZWY5MywKKwkweGU3ZGMwMmIxLCAweDU5YTdkZDYxLCAweGUxMWU3ZTkxLCAweGFlMmJlM2Y3LCAweDdmYTFkNjFkLCAweDZjYzliZDMzLAorCTB4MzFlMDAyN2YsIDB4MGI3YWZmNWEsIDB4YmNjMzg5Y2EsIDB4ODc3NmIwYmMsIDB4NzQ4ZGU1YzAsIDB4NTI2MWYyMzcsCisJMHhiZGExOWViMywgMHg5NzFlN2VmYiwgMHg3YWUzZWY0YiwgMHhmYWQwZTNjNSwgMHgzMWFmOGMwNSwgMHhlNTFkMzdiMSwKKwkweDRmMWM5YTUyLCAweDJhYzc0NTdhLCAweDkwNWM1M2Y2LCAweGFmMzE5YmNiLCAweDk2ZWY1NGQ5LCAweGJkNzFlNTM3LAorCTB4NDA4MzkxNDMsIDB4ZTRmZGFlZTYsIDB4YzQ0ZjZkOTcsIDB4Y2IyZjE0N2IsIDB4ZTU1MzQxZTcsIDB4ZmEzMmIyZjYsCisJMHhmNDg1Y2ZhNywgMHg2NzJmNGNhYSwgMHhmODE0M2M2NCwgMHg2Y2ZmNGNiMiwgMHgxZjY4Y2ZkYiwgMHg1OWM3MmQ5ZiwKKwkweGQxNzQzNjY2LCAweDgzM2NjYzc5LCAweDg3OTQ1M2ViLCAweGFiZGY1MmIzLCAweDM5YWU3ZGM1LCAweDNhN2NlZGZkLAorCTB4MjUzNzhkNjcsIDB4YzlmYmUyMjYsIDB4ZDI3ODc3ZmMsIDB4NjBkNmRiYTcsIDB4OWMzNzJmZGMsIDB4ZTBlYzMxZDYsCisJMHgzODFlNzQ1MywgMHgzNWJjNmIyYywgMHg0OTQzOWM1NCwgMHg3YTI1NTdkZCwgMHg2YWVlYjA4ZiwgMHgzYzBhYTUzYSwKKwkweDdkMzlkMGY3LCAweDE3MDFkOTFmLCAweDVjOWYxM2E3LCAweDJkZGVhOWI1LCAweDdiYzY1NGZjLCAweDVkM2VmMjhjLAorCTB4ODBmM2Y3MjcsIDB4OGI4YjE2OWMsIDB4ZjMyOWViMDYsIDB4MWM2NTllODAsIDB4MmVkNjU4NmYsIDB4YWIzNWFmNWEsCisJMHg3NWE5MjE1OCwgMHhjZWZlMjllYywgMHgwMTQ5ZWQ2NiwgMHhhNDU4YmRkZiwgMHgzMDRjZTg3MywgMHg2MDhkZWZkZiwKKwkweGZjOGIxZjI1LCAweDM2NTcyNDFkLCAweDc0OGM0ZGM2LCAweGQ3ODRmYjJmLCAweGQ3YWY3MDRjLCAweGFmMjlmMDQ2LAorCTB4NjFhZGU5NDQsIDB4Njg3Yzg4Y2UsIDB4NGYxMWUxNjcsIDB4ZTFkYmNlMTYsIDB4ZGUyNzU2OTQsIDB4OGVmMGJjNTcsCisJMHgzMzZiYTY0ZSwgMHhkMzJlMmZiZiwgMHgyZDRlZTVkYSwgMHhlYjljNjIzMywgMHhjMmUzZTgwMCwgMHg1Y2Y3ZmUyMCwKKwkweGRkZmJhNDRkLCAweGEwZmVjM2JmLCAweGJmMGQ5NTlmLCAweGFmNjc3OTIxLCAweGVkMWQzOGI5LCAweDMzZGFjMmEyLAorCTB4MWJiYjA4NGQsIDB4ZjUxZDNjZmUsIDB4ZmY2MTBmODksIDB4ZjQxZWJkMjAsIDB4NzI4MDliN2IsIDB4ZDNiZDI0ZTQsCisJMHg4NjM1Nzk1ZCwgMHhkMzU5NzlkYSwgMHhjYmY5MWQzZiwgMHhmNzQwYTZmNywgMHhiOGVjM2U2ZiwgMHhmZGYyYjdhOCwKKwkweDc4NzNkYzg5LCAweGYyZmQxYzJmLCAweGI5YTNmMmIzLCAweGQ0MmNlOTFjLCAweDI0M2FmYWQwLCAweGRkZWIzYmQ1LAorCTB4MGEyYmZmYTMsIDB4MjBkOGMzZDcsIDB4N2UwYTdhZmQsIDB4Yzg2NWEzZGYsIDB4ZmI0YTliYmYsIDB4ZTQyMWNjYTMsCisJMHhkZmY0NjllZiwgMHhiMDcxZjM2NSwgMHgxNWU1YTFlYywgMHg5ZTE2NWY3YSwgMHhlOTkwYWM5MywgMHgzY2JjYjgzOCwKKwkweGExM2ZjMDdmLCAweGViZWZjYTczLCAweGExZmUwMTA4LCAweDNmZGZjNjJhLCAweDJiYTdiYjA1LCAweGFhYjhmODFjLAorCTB4NjdmOTJhNzMsIDB4MGRjMjNjYWEsIDB4ZDFjMzMzZmQsIDB4ZWI0ZGQ3ZTEsIDB4MjhjZmY3MTgsIDB4ODE4ZGRhMzAsCisJMHgxYmI0NGQ3ZSwgMHgxZjdmYWE5OSwgMHgyNTJiMDc3ZiwgMHg3NGY3ODZmMywgMHgxNDg5N2RkYywgMHg2NjZiYWZjZiwKKwkweDc5NWFlZjE0LCAweGU3YTUzNDc1LCAweDIxMjBkZjVmLCAweGZiYzMxOGZmLCAweDZiN2VlOTViLCAweDhjZWM4NmI2LAorCTB4ZmViNTNlOTUsIDB4Y2I4MGE1MzMsIDB4N2MwNTI5ODUsIDB4NjBmOTVjZGUsIDB4MDFiMGU1MmYsIDB4YTJlYzA5N2IsCisJMHg1ZGI5ZjM3YiwgMHhhOTg4NzUxNCwgMHg3Y2UwYTVlYywgMHhmMjhjOTdiMiwgMHgxMzEwMWQzZCwgMHhlMDQyNTdhZSwKKwkweDY5NDE0NzdkLCAweGNhOTc3ZTBkLCAweGQ5Y2U4ODVhLCAweDcyZmVmYzNiLCAweGU0ZDczOGYwLCAweGY4NTUzZTczLAorCTB4MzVmMjMxN2EsIDB4ZTcwNzZmZDIsIDB4ZTc3NmUwZWIsIDB4NDFhYzk0MTUsIDB4NGMzOGRhM2UsIDB4ZTY1Y2FiN2MsCisJMHg4YzZkOTVmYiwgMHgxNmRkY2JlNiwgMHgwNWY0ZjM0MywgMHgwMjk2NzM2YiwgMHg3ODAxN2U1ZCwgMHgwYmQyM2RlMCwKKwkweDM0NDQ2NzRlLCAweGU1YzE3ZjdjLCAweDNkZjNjMDhjLCAweDZiYTgxYzhhLCAweDM2ZWZhNzBiLCAweGM1OGJjZTY2LAorCTB4NDhjZGEzNzMsIDB4ZjlkZWQwZjcsIDB4OWM0NmE5OGUsIDB4MzhkYTdiZTcsIDB4N2RmZDI5ZmYsIDB4MTYzOGI1ZDgsCisJMHhhZTgyNjlmOSwgMHhmMjg3NmY1ZiwgMHg1MTMzY2VlNCwgMHg3ODRkZjdhOCwgMHhmMjJjN2U3ZCwgMHhmZTc4NzBlMSwKKwkweGNmMTkxOGZkLCAweDFlMTJjNDg2LCAweDcwYmQ4Nzk3LCAweDAwNGY2Y2EyLCAweGJhMjdlZTdlLCAweDg3ZmE5ZGU4LAorCTB4NmZkMTE4MWEsIDB4NTZmZmFiZjcsIDB4YmU3YzdjODcsIDB4ZmI4Y2MyMzMsIDB4MjMwNzE3ZTYsIDB4MGJjYWJkZTgsCisJMHgzZGU4MWE2ZiwgMHg3ZGY5NWE5YSwgMHg3ZDc0MmZkNSwgMHg3Y2JmNDg3MywgMHgyMmY3NGI1ZCwgMHg0N2ZlNmZkZCwKKwkweGZiYTNmMjJiLCAweDNiOWQwMzU1LCAweGMzNzNhODdjLCAweDZhZjdkYzQ1LCAweGMzOWM2NzNiLCAweDVmNmI1Njc3LAorCTB4YzNmMmRiZmEsIDB4ZDI1NDg2Y2EsIDB4M2ZmODE0OGIsIDB4YmUyNzQ2YmMsIDB4ZTQ1ZTdiZjMsIDB4OGVhMWUyNzIsCisJMHhmNzdkMjE3ZiwgMHgwYjk3NmJhMSwgMHgxN2NhN2NmMCwgMHg0NGM3ZmYwNywgMHhiN2VlNmI5NCwgMHg3OTQ0NGYyZSwKKwkweGU1YzVmZWU2LCAweDdlZWU1ODg5LCAweDRhMTNjMjJkLCAweGMwNWViOTVmLCAweDdlY2EzZWZkLCAweGE4YWVmNjk5LAorCTB4OTBhZDBmZjIsIDB4NWQ2ZDIzZTksIDB4M2QwN2JkMGIsIDB4N2IwMmU0ZTEsIDB4MTMwZmJiZTAsIDB4YWM0ZTM0YjIsCisJMHg2NWI3ZTEzZiwgMHg3YzA1ZjdiMSwgMHhhNDU3YWViNywgMHg5M2Y4ZTMzOCwgMHgwMWQ1MTE2NSwgMHg4MTRmNzk3NCwKKwkweDdlMmZmMTRlLCAweDkzMGViZjIzLCAweGYwMTljN2RmLCAweDc3ZjJmNGUzLCAweDhhZjYzNjdmLCAweDFhYTM3ZGZjLAorCTB4ODNhMWVlODEsIDB4NWVlNDMyZmUsIDB4OGFmZmFkMWEsIDB4ODhkZjdhNTgsIDB4YzczYmNlODksIDB4OGIzODQ3OGMsCisJMHgzZTYyMDVkZSwgMHgwMGNjZDFlMywgMHhhZjcxNjkzZCwgMHg3NDAwY2JhNiwgMHhlODY5ZDE1NCwgMHg1N2JlZmQyMiwKKwkweGFjYjA0MzNjLCAweGYxNzNkZDNmLCAweDIxMzRjOGQzLCAweGU3MjY3Zjg0LCAweGUzOTQzNGQ0LCAweGY4MWE3ZWMxLAorCTB4OGFkZTIyNDUsIDB4NzFlOTU1YmUsIDB4YzFmZTIwYTUsIDB4MTVhNTliZmUsIDB4Mjg3ZjkwNzcsIDB4ZDY5MzdmZDgsCisJMHg4ZjY2NmEyYiwgMHhlOWRmZjdjNywgMHhmNzhjMmYzYSwgMHg4YmYyMjM2OSwgMHhmYWUyODdhMiwgMHhmZmMxMDgxZCwKKwkweDM5NzBjNjZiLCAweGJhZDVmMGE2LCAweDVkZmYxZTVlLCAweGNjNmE1YmQ3LCAweGU2NTZiNDg0LCAweDlkYjAwM2FiLAorCTB4NzVmZGEwZmEsIDB4YTM3N2YzOWQsIDB4YjVkZDYxMWYsIDB4NjA2MzExNDUsIDB4M2JiZGQ2YmUsIDB4ZmM4MTNkOGYsCisJMHg2NjM1MmU2ZiwgMHhlZWQ3NzdlMSwgMHgxZmNjMmUzMCwgMHhmZWUwOTdhNCwgMHhmMmUxOGNhNiwgMHgxODRmNDA3MiwKKwkweDk3Y2JkZjY2LCAweGVkNWJmYWYxLCAweGU0NjMzOTdmLCAweDg3ZmY2Y2YzLCAweDg3NjA3ZmVmLCAweGVkYzMxZDhmLAorCTB4NGZkYzI1ZjAsIDB4ZTBmMGVkYzIsIDB4Yzc5MTQzN2QsIDB4NzkyZWJiNGEsIDB4NjNjYTg3OWQsIDB4YzA0ODc3ZmUsCisJMHhlYzc5MjY1ZSwgMHhiZDUxMjMxYSwgMHhiMWI5Y2VlNCwgMHhiYmJmNDc2NCwgMHgwZDMyNTYyMCwgMHhiNDQzM2Y2ZCwKKwkweDg3ZjI2MjZiLCAweDcxZThhZmI2LCAweGE4ZTM5ZjZlLCAweDg3MWNlZDExLCAweDE3NDlmYjk2LCAweDk5YmVmNDA4LAorCTB4OWRiOWY3YTIsIDB4ZWVlM2U5MDIsIDB4ZWIxZjlkNGEsIDB4MmVmNTc4MjksIDB4ODVkNTdlZTAsIDB4NGMzZjlkMGUsCisJMHgxNTBmZDQxOCwgMHhkY2EwNzFmZCwgMHhhMmI5NTAyZSwgMHg2MzdhMmE0ZiwgMHg3MWZiOTNhZiwgMHhlNWU3OGMxNywKKwkweDE2Yjk4NmI3LCAweGQ4N2Q3Y2UxLCAweDEzZjk0NjE1LCAweGM2N2NmMTI2LCAweDAwOTM0NzljLCAweDgxM2RmNDVlLAorCTB4ZmFjYmZmMTEsIDB4YzFhNzQyYTQsIDB4Y2VhNWU2ZmEsIDB4ZDdiZTFiOGMsIDB4NGZhNjRkYjMsIDB4ODM1MmNmODUsCisJMHhiZmQ5NDNmOCwgMHhkZDM5ZjM5YSwgMHgxZGZlZTFkNywgMHg3ZmY3ZmI4YiwgMHhlMGYyZjRhYSwgMHg3ZWZmNjE3NiwKKwkweDQ2NmZmMTA4LCAweDFmYmUxMjFkLCAweDE5ZDE1YmZmLCAweDRhZmYzZWNhLCAweDVlZmUwYmQ2LCAweDIzZGViZjU5LAorCTB4NzJhZjg4MjUsIDB4N2RiODc2NGUsIDB4NmZkNjRlYjUsIDB4Y2U2ZjJiODYsIDB4YmNmYzdhZmYsIDB4ZGZkZjFlNDcsCisJMHg4ZTc3OWY4YSwgMHg5ZjQzYmZmOSwgMHhmNTBiZDAxZCwgMHg0Nzc5YzdhMSwgMHhjNjRmYzk0MSwgMHg2Yjg2YmNjMCwKKwkweDczOWU3NDNkLCAweDFlY2RmN2I4LCAweGIwNTVmNTk1LCAweDdjNzQ1NTczLCAweDQxYWY0NTM0LCAweGMzNWRjOGJiLAorCTB4ZDFjZDAzZmQsIDB4N2VjOWFmZDIsIDB4ZjdhNWFlMzksIDB4ZWY5MjFlNTcsIDB4ZDU3ODNlNzMsIDB4ZWEyZDY5NGMsCisJMHhkOTJlOTBjOSwgMHhkOWRlOTI3YiwgMHhjNmEzNTI1ZCwgMHhiNzdkMTliZiwgMHgzNGFhZmRmOCwgMHhiMTU3ZWI4YSwKKwkweDU1MmJmMjMyLCAweGYxOWI0Njc1LCAweDdjNzM3ZmJjLCAweDJiZTQzMWZiLCAweGI0YWQ2ZWRmLCAweGM2ZmViMDNiLAorCTB4MjM3ZDcyZDEsIDB4NDRkNWI3ZjcsIDB4NjE4ZmRmZDMsIDB4OTU0MDdhNDEsIDB4NTdkZjU4MjcsIDB4NjQ1MzA1ZWIsCisJMHhmYTcwZDEzZiwgMHhjM2JhMmZjMSwgMHhkMWU5NWNiOCwgMHgzOWQ3OWYxMiwgMHhkMDU1ZGZmOSwgMHhlMGI5NzI3NywKKwkweGJmMjMwODZlLCAweDg4NmJkYTA5LCAweDgyMGQ2N2Q3LCAweDVmM2RkZjFmLCAweDRjZmJkNzI5LCAweDEzZmYyNWVjLAorCTB4Y2FhMGQzYzUsIDB4MmNhN2NlYjksIDB4ZDRkZmIyMGUsIDB4YmI5NWEzZjEsIDB4MzM3MjRiN2UsIDB4NzMxNDhlMzgsCisJMHgwZDBiOGU0MCwgMHhkMjI2OGRjNCwgMHg2MDk1OTA3OSwgMHhiYzlmZTI0ZiwgMHg1ZGQyNGI3MiwgMHgxZjgwZmYzOCwKKwkweDcxZGM5M2YzLCAweDk3MzBmY2E4LCAweGZiMjIzZTdhLCAweDNjZWJjOTczLCAweDdlMjQzM2ZlLCAweGM3OTMzY2Q0LAorCTB4OTVkZGYwOGYsIDB4YTVjODdlMTAsIDB4YzUxZDhmMjMsIDB4YjM3NGEzYmYsIDB4Yzc1ZDUxYjgsIDB4MzI0N2JhNDksCisJMHhkMjA4ZmY0NCwgMHg1MThkYWUzYiwgMHg4YTQ3MTlmYiwgMHhiMjNiOGZkYywgMHg3ZmEzMzA1MywgMHg4ZjNjYTQ2YSwKKwkweDljMzFiNzdmLCAweDdmZTllYWY0LCAweDc5NDU4ZWE4LCAweGY5ZDNhY2EwLCAweGNmNWU3Y2I5LCAweDA0YTU3MDdmLAorCTB4MDdmODliYmYsIDB4ZTMwNjFjZDEsIDB4ZjUwN2M1ZmEsIDB4YjBlMjQ5YmYsIDB4YmJmMDk0NjQsIDB4NjNiNDA4ZmEsCisJMHg3NTYxZmZjZSwgMHgyZmViY2UwNCwgMHgyZmJmYzUyMCwgMHgzMTY5ZGFmMSwgMHgyYmQyM2ZhNCwgMHgwZmQ4MmRjYiwKKwkweGJmYzgwYmEzLCAweDQ1YTVmYjJjLCAweDA3MjMwZmQ4LCAweGRmYzEzOWZkLCAweDZiYmY5NzZkLCAweGZjODUzMzA2LAorCTB4ZjhmM2FmOTgsIDB4NmI4MjczN2UsIDB4YTZjZmMxMjYsIDB4YTYxZWZlMzMsIDB4ZmZjZWZjODMsIDB4ZmU4ZDc0MDIsCisJMHgyYzE4M2NhMiwgMHgxYTdmOWZjNiwgMHhiYzYxZDZjZSwgMHhmNWRlMzlhOCwgMHhiM2QxZjEzNiwgMHgwOGY5MDkxYSwKKwkweDkzMzhhN2JlLCAweGZiNDRiZjZmLCAweGM2MTk0ZTIzLCAweGZjZjQwYTczLCAweDBjZWE0NjVkLCAweGJjYjQ2YmQ2LAorCTB4Yzc2MDA5OGUsIDB4YjAwOTNjNjIsIDB4ZTZmMTgwNTksIDB4NTNhZTM5M2MsIDB4NmM0NGNlMTAsIDB4NmI5ZDQ5ZmYsCisJMHhmOTk3YmUxMywgMHg1ZjY4Yjc2NCwgMHg4ZjYwNGM0YiwgMHg4M2JmNzdjNSwgMHg4MzgyNGJlMywgMHgzODk1YzVjNywKKwkweDFmMWYxMjkzLCAweDYwMjRjZTJlLCAweGVlOWMwNTNmLCAweDg3MTViOWY4LCAweDI1NzM3MTgwLCAweGU3YmVjNDllLAorCTB4NjM1NzIwYTQsIDB4ZjdjZTg3YjEsIDB4NDhjODUzM2YsIDB4NzE4YjdmYWUsIDB4MjFmOTI1OWUsIDB4YzgzNTQ4ZTIsCisJMHhkNWNmMjQ2MywgMHgzOTRkYzU3MSwgMHhmZTlkMTBhZiwgMHgzZGM0ZjFiNSwgMHgxY2I3ZDg2MywgMHgxM2YzZTJmZiwKKwkweGU4ZjhmNzhjLCAweGI3YjIxNjRiLCAweDUxZWZmYWJlLCAweDVlNzZjZmI0LCAweDQyZjBmZGE2LCAweDhmYmU0MWJmLAorCTB4ZWNmZGM3ZDAsIDB4MmZmMjNhOWQsIDB4MmRiYjAwNWMsIDB4M2Q5ZjYwM2UsIDB4M2RkYmNmOWEsIDB4ZTg5NTM5ZDQsCisJMHg1OTZmNDBmZiwgMHgyZjNmZDYwNCwgMHg3NzdjNmZlNywgMHg0OGQ5ZmNjMSwgMHhiZDIyYmQ5NywgMHhlM2U3OGIwNywKKwkweGQwM2IwZWQwLCAweGJkNDA0ZTJiLCAweDk3NWM1YmU1LCAweGIxMDk4ZmVmLCAweGQwZjBjNjJlLCAweGNiZTQ0Y2VmLAorCTB4YzA1Zjk0N2MsIDB4MDdlYTYzZTksIDB4ZDc3MmZlZGMsIDB4NTk4YTM4ZjMsIDB4NzJlZTBiOTYsIDB4NjNjMWM5M2QsCisJMHhmMTQxMTYyOSwgMHhjNTQzNWI5ZiwgMHhhN2VmNWU1OSwgMHg4NTZhYTM3ZCwgMHhiZTFjZjc0MCwgMHhhM2E1OWM3MSwKKwkweDgyYjdkZTViLCAweGQzZTVkM2ZjLCAweGU3MGU2ZTQ5LCAweDliODgwZWI3LCAweDE1YjdjYWFiLCAweDIzODc5YzBjLAorCTB4ODE1NDc1ZmYsIDB4ZTMxZGM2OTksIDB4YjNjMTJjMjksIDB4YmZmOGNhODcsIDB4NzNiODc1YzUsIDB4ZmIzYTA4NmMsCisJMHg2OTVmZGIxNiwgMHg5ZmRiNmVmZiwgMHhiNmRkZjc5MiwgMHg2ZTNiZTZiZiwgMHg3N2RlNmQ3ZiwgMHhmMWRlZTcxYiwKKwkweGY1N2ZlMzFkLCAweGNjZmY2ZTNiLCAweGFmM2YzYzc3LCAweDczZmZmZmU1LCAweDcwNzAwMzAwLCAweDVjZjgzZjljLAorCTB4ZGZiYzcwNDAsIDB4MWYzZWZjNzAsIDB4MzYxMDZkOTYsIDB4NmE0MTc3ZjcsIDB4NDJiNTdhOGMsIDB4NDYyZDUxMDAsCisJMHgwODc3YTJlZiwgMHg3MWUyNGQ2NiwgMHg0NjY1OGRiMCwgMHhmMDYxMGVmZiwgMHg1ZjMyODA3YywgMHgxZGI5MGI0YiwKKwkweGU4YmZjZTYxLCAweDRlNzk4NThiLCAweGM1OTZmNDc1LCAweDEyNmM5ZmEyLCAweDgyZmQ4NzdmLCAweDEzMmFjZWZjLAorCTB4MThjZWY0Y2QsIDB4ZmJjMDRjZDQsIDB4YTE2MWNkZjEsIDB4NzI2MWFhZTMsIDB4MjNlZGMzN2IsIDB4ZGM5NjE3Y2YsCisJMHhmZTllMzYzMSwgMHhmYmM4NDM2YywgMHhmZWM4MmYxZCwgMHgyMzA3NzM0NywgMHhhNTEzMjRiZiwgMHhhZmQ0Nzk4NCwKKwkweGQwZmE4MDk0LCAweDNmM2MyMzg4LCAweDc2Mzk4YmFhLCAweGRhNTI1ZTEwLCAweGE1MDdiMjNjLCAweDhiNmZjNDM0LAorCTB4OTk4ZGVmMWMsIDB4ZmU4NjlkOTksIDB4MGJkMDE4ZTgsIDB4MTRmODFlMzEsIDB4OGUyOTA1YzYsIDB4NGE3YWE2NjUsCisJMHhlNThjMWY3ZiwgMHgzMWQxNmRmZCwgMHhlNTViZWU4MSwgMHhhYzRjZjNmMiwgMHg5ZTJhYTBmOSwgMHhlYmFlOGVmNywKKwkweGM1MDI2NWUzLCAweGZlMjM5NmYzLCAweGU1NzRkMmJmLCAweDg5OTM0Y2VmLCAweGZmMzdlNjE4LCAweDhjZTI5OTgwLAorCTB4NDhiZDI2MjcsIDB4ODk1Njc3N2YsIDB4ZjMzMWFkZWYsIDB4NmVkMTg3MmEsIDB4MWNkNjNjMDYsIDB4YmJmNDQ3MWMsCisJMHhmN2E0ZDBlNCwgMHg3NzMzZTlmMSwgMHg3NTBmNjhhNiwgMHgxN2YxNTE0ZiwgMHgxZGZkOTY5YywgMHg4OTQwYmY4YSwKKwkweGY2NWVmZDZiLCAweGZlODg3YzkzLCAweDIyMWZiYTE3LCAweGFiMWRlYTUxLCAweDI3ZjdiNmY5LCAweGZjMTBkOGVmLAorCTB4ZmVlMDQ1YmYsIDB4YjhhZmRmMjEsIDB4ZGU5YzY4N2YsIDB4NmU3ODExOWUsIDB4YWYzY2IzNzIsIDB4ZGM3OGJhY2IsCisJMHhlY2Y3ZjE0MiwgMHhlZTMzYzc5MywgMHgwMTk3NmQxMSwgMHg0ZDcxZDJmNiwgMHhjZmI4ZjQ2MywgMHgwOTRhNmI4ZiwKKwkweGUxYzBiNGM3LCAweGYwN2RlMGQ3LCAweDM1ZmJkNWM1LCAweGEyODVmYWNhLCAweGIyYjFkNmEzLCAweDlmYTdhMzFmLAorCTB4MTJmZjdhZTIsIDB4NjBmZmU3MTQsIDB4MzBiZjNmMmMsIDB4ZjFlMzkwYWYsIDB4MDgyNGQ4MDEsIDB4MWIxMmM5YWYsCisJMHg3MTFjN2Q1MSwgMHgyYTFiNTk4YiwgMHg3NjA1NTQ5ZSwgMHhhY2I5ZTIzMSwgMHhjY2FkZTM5OSwgMHgzNDk3NTU3NywKKwkweDczMzlmYjE1LCAweGQzMDliZmI0LCAweGE5YjQ5YWEyLCAweGJkYWY2ZmU0LCAweDliZmE4NGQ4LCAweDYzZTVkYWZiLAorCTB4NGNiZjkzYjcsIDB4NzEzZGExMmYsIDB4ZWZkYTlmNGYsIDB4YTVhMzBhYjYsIDB4ZmQyNzg0ZjEsIDB4MGNkZjVhOWQsCisJMHg3MWUzZWM5MSwgMHg5ZmEyNDQzMywgMHhiMjMwYWE5OCwgMHg0Yzc0NjM1ZiwgMHgyZTc4NDI2YiwgMHhjYThhOGJkNywKKwkweGNjMjJhNmUzLCAweDNlOTM0NDE2LCAweDQ1MjNkNDU4LCAweGU4M2Y5N2RmLCAweDUxOTk4YjA3LCAweDc0ZjM4ZjFmLAorCTB4ZTJhYWY4YjMsIDB4Y2MzNWJiNGYsIDB4ZTdhZTFhZjEsIDB4NWQ1ZjFiNWYsIDB4NzRiYmNlZjksIDB4OTcxOTU0YWUsCisJMHg5YzRhMmYzMiwgMHhhYWY4Yjg3NCwgMHg1ZGMxY2U3MiwgMHgyZTc1NDU3ZSwgMHg0ZmY2MmRjMywgMHhiOGUzZmY0NywKKwkweGYyZjQ2NzgzLCAweGZlMzM0YjM5LCAweGZlMjU2MTFkLCAweDhiZjVlZTNhLCAweGUyNTU3NzE0LCAweDQ1Y2Y2ZWFjLAorCTB4M2JlMWFiZDIsIDB4MGUzZjdlM2QsIDB4MDYyMTNmOTYsIDB4ZjFlMjE3ZGYsIDB4OWVmMTU3ZDcsIDB4ZmZlZjFlOTQsCisJMHhkNGJlZTk5OSwgMHhjNWZkZjIxYiwgMHhlNjNmMTg0ZSwgMHhhMWNkZTliZiwgMHhhNzZiY2JiNCwgMHg5OGI3OTBmNCwKKwkweDQ1ZTc3NzUyLCAweDM4N2VkNzhhLCAweDUzZWYxZDU2LCAweGI0OTc3OWUyLCAweGQ1NjMzM2NlLCAweDBlMDkyM2U3LAorCTB4YzM2OWY3OGUsIDB4ZGRjNmJmYjksIDB4OTdiZmEzYTMsIDB4NDhjNzdlZTEsIDB4NzNhNGJiZjIsIDB4ZmFlYmRkMTksCisJMHgyNDZiYTRmMiwgMHhmMTg3NWRlMiwgMHgzOGJhMDBiNiwgMHhlMTg3YjBlZiwgMHg5ZGU3NjEzYiwgMHhiMzhjMzBmNiwKKwkweGE3M2VlYjhkLCAweDc1MmZmM2M3LCAweGZkMWVhZjYyLCAweDEyNzE4MDYxLCAweDFmNzQ0ZDFlLCAweGY3Y2ZjOGI4LAorCTB4ZGZkMDk2NzYsIDB4NWM2OWJhZTMsIDB4MTM2ZmUzYWMsIDB4ZTU5ZmZiMTcsIDB4MDAyMTAxNDEsIDB4MDAwMDIxMDEsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgxN2I1ZmYwMCwgMHg2NzUzNGM1ZCwgMHhiN2I3N2NmNCwgMHgwYmRmOTZlNSwKKwkweDcyMjIzZjJhLCAweGEyOTg2MmMxLCAweGE3NDBjMmRjLCAweGFjNzQxNjMxLCAweDRhOGE1YzEzLCAweDY2YjUwMTAyLAorCTB4MmQwOTkyMmUsIDB4Y2JjMmNjZDksIDB4MDE4OTNhZDIsIDB4YjhiMmMzZGQsIDB4MjZhOWYzNjQsIDB4ODdiNmU4ODMsCisJMHg2ZWFkOTNmYSwgMHg4NDBiMGI1NSwgMHhjM2UyMmUyNSwgMHg1MmM5NzE5YywgMHhiYTMzMzMwZCwgMHhkOGRjNjI4MSwKKwkweGRmMzlkODVjLCAweGQ4YmRiNWJkLCAweGE0ZGEyY2JkLCAweGRmM2YzZDM5LCAweGZmZjlkZjM5LCAweDA3MzAwMDBhLAorCTB4Yjk1NmU3ZGEsIDB4Zjg0Y2U3MDYsIDB4ZmZjNmNmYTUsIDB4NGZhNDNkMGYsIDB4YmRkZGUzOGMsIDB4MTcyNmViNGIsCisJMHgzZWJiZjFjNCwgMHgwMzY5MzVjOSwgMHhjZTljNWRmOCwgMHhmNjAwMmI5NCwgMHgxYzVhY2U4NywgMHhhY2NmMWYwNCwKKwkweGVkZmMyMTc2LCAweDRhYjVkZmMyLCAweGQyZjc4MDNhLCAweGVlMjAyZDRjLCAweDk2YTY2NmZkLCAweGQyYWZkZWY4LAorCTB4NGZlOTAyN2EsIDB4OGVkNzdiZGIsIDB4NzAwNDVlOTcsIDB4MTA2YjQxOTYsIDB4YzEyZTU1ZjksIDB4YjhlMDgyNzEsCisJMHg0NTQ2ZmFjMywgMHgyNWMwNmU1YywgMHg4MGZjZTkzOCwgMHhlODliMzRhZCwgMHhkOWE1NWNjNywgMHhmNWY0MTM3YiwKKwkweDAwNjc0NTM5LCAweGRhYWYzOWU5LCAweDA5ZjQ4OWFjLCAweDA2YTAxOWJiLCAweGMxNWMwY2U5LCAweDU1NmJmNjI0LAorCTB4N2ZkZmRiODEsIDB4NGE0ZjJhZDIsIDB4ZGJmMTFjN2EsIDB4ZTAzNmNjMWQsIDB4M2M4MTUwZGUsIDB4ZjdjNzFlNTksCisJMHhmYzAyOGZkMywgMHhkNDIyNjY2ZSwgMHhiOWU5NzQwMiwgMHhkNzcyNjRiOCwgMHgzYmFmYThhYSwgMHg1MjgxNmEzZiwKKwkweDVjNWI0Y2EyLCAweGRmNWUzMGFiLCAweDEyYWNmZDRiLCAweGJlZmNmODYwLCAweDE3MDU2OGUyLCAweGEwMTcyMDk1LAorCTB4ZTAzNzNmNGQsIDB4YjE5YzViZGMsIDB4M2Q3ZmMwMTAsIDB4NDY5OGNhMDUsIDB4NGFkZjkxMTMsIDB4MmE4ZTE0M2YsCisJMHhhNzY5ZGEyMiwgMHhiNmU1Nzg1ZiwgMHg0YzI3ZjdmYywgMHhjZGJhMTFhYiwgMHhiZGMyNjhmZSwgMHhjMzgyOWRkYSwKKwkweDJlZWRjOTlhLCAweDc5MjBjZTZkLCAweDIxMmZjZTMxLCAweGI3NGJkM2E1LCAweDUxY2MyMmFkLCAweGY0MTNlNDI4LAorCTB4MDI1YWMyMTcsIDB4MzZhZGE4ZDIsIDB4MDQwNmVmNmUsIDB4N2NhMWIwN2UsIDB4YTQ4ODUzOWIsIDB4NzBkNjlkYTAsCisJMHg2ZjUwMDQ0YSwgMHhkZjA0NTM5NSwgMHhjZDdiMDg4YiwgMHg3YzQ2MTI4MSwgMHgyYmU3MjZmMSwgMHhiZjExMzY2ZiwKKwkweDA0MmFhZTRmLCAweGNiZTdlM2Y0LCAweDA5NDE3OTE2LCAweDM0NjRkZmJmLCAweGYzYWE4ZTIxLCAweDNjNTJmZWQzLAorCTB4OTUzMTc2YWYsIDB4MzRlZjZhZGMsIDB4NDE5M2YxZjIsIDB4ZTNkNmVlN2UsIDB4ZmMzNDMzYjIsIDB4NWZmNzIxNzIsCisJMHhjYjllMDEzNiwgMHg4ZTM4MDMxZCwgMHgxOGY2Nzc3NiwgMHg3NTZlZWRjZiwgMHgzZjc0NjFkZSwgMHgzMzdmYTBmOCwKKwkweDkwNGQ4MWNhLCAweDZiZGU4OTA3LCAweDNiM2FhMzk0LCAweDAwMWZmMThkLCAweDQzZDYyNjcwLCAweDBkNDFkNTM3LAorCTB4ZTdlMWM2NDEsIDB4NDVkNTEzZTgsIDB4NTgyYTA2MTUsIDB4YmYzNzNmMTEsIDB4Zjk3NDQ2N2UsIDB4ZjA2MmZhZjksCisJMHg1MTE3ZjEwYywgMHhkODBkNTY3ZCwgMHgwMjRkYmYyOCwgMHhmNWUxMDE5NCwgMHg5ZjQxMmQ5MiwgMHg5ZWI5MTU1ZiwKKwkweGZjMDE2NTBmLCAweGRlMTdkNzI4LCAweDdlMzBjODNlLCAweDkxNWY4ZjdkLCAweDRhNmU1MDVhLCAweGQyY2E5N2FlLAorCTB4MzJmN2I4ZTMsIDB4NDAxNjUzZDYsIDB4MDM2Y2YwZjUsIDB4OTg1OGZiYzUsIDB4Nzk0ZDE1ODEsIDB4MjhiZWYxZjMsCisJMHg2ZWIxN2Q1NywgMHhiYzRlYWQ5YywgMHgzMWRmZTZhNywgMHgzYTQ0ZjljYywgMHgwZDlhODFkNSwgMHg2MTIwNWY5YSwKKwkweDU4MTdmY2JjLCAweDU1ZWQxMDYwLCAweDQ5MWMzZDM1LCAweGIyYjlmOGEzLCAweGVjODUzMmQ1LCAweDIzYTUwZWQ4LAorCTB4NmIxMjZkZWUsIDB4M2MyZWUxMTgsIDB4MTYwZWY4NDAsIDB4ZjZlN2YwOTAsIDB4MDA1YjlkMmIsIDB4ZDhiNzU0ZWQsCisJMHg1YmRjNTJhZiwgMHgxNWFhY2MzYSwgMHg0MGRhZGU4OCwgMHg1MDU5NmJmNCwgMHhmZjEyMjkzNywgMHhjNGE5N2JjNCwKKwkweDU1YWE2NzJmLCAweDllYjNiZTIxLCAweDQ0NWY4ZGY4LCAweGFkZTdhYTQ0LCAweDc4NjVhNTE0LCAweDhkMjhjYmI3LAorCTB4ZWFjMWIzN2QsIDB4NTUxZjUwMGUsIDB4ZjQxMWEzMzcsIDB4MzU4NzQ3NmYsIDB4ODRiNWZlNDAsIDB4Y2U5MGNkOWIsCisJMHhiZWEwNDFlYiwgMHhlZGNmNWI3YiwgMHgzMjhmNDViNywgMHgwOTlmNDhhMywgMHg1ZjkxNjc1NywgMHgxNmQzY2MwYiwKKwkweGVhMzU2MTE1LCAweDc4NDFjODJlLCAweGIwMDViZWUxLCAweGI0ZTJiYzFmLCAweDczYjk0NjQ1LCAweDA1YWM0YzNlLAorCTB4YzQ5ZjRiZTAsIDB4ODMyN2M4NjEsIDB4ZDdjMDM5NjMsIDB4YzMwZTdjYmUsIDB4MmZkMzg1M2UsIDB4OGMzOWNhZmEsCisJMHg0NzBlNTRmOCwgMHhhODM1NmI3YywgMHg5NTllM2NjYSwgMHhkZDAyZmJlMSwgMHg3MDU5YTcyNywgMHg3ZTZmOWIyNSwKKwkweGY5NjIzZWJkLCAweDI5ZWYwYmFhLCAweGJhM2U3YmE2LCAweDkzOTYyZWVhLCAweDVhMjBjN2M4LCAweDZhZDYxNDJjLAorCTB4NjczMGM5ZmQsIDB4MDZjM2U3NWUsIDB4ZTg4MWUzYjIsIDB4NjBhNzNhNjEsIDB4NDYwZDYxYmUsIDB4ZWYzMDg0MjEsCisJMHhhYTZmZWJiZiwgMHhkOTZmOWI1MiwgMHhmMTkzYjgwMiwgMHgwNGZhZjQ2NywgMHgzY2QwMjI4NywgMHhmYWQyNGI3YSwKKwkweDVmYzU3ODdmLCAweDQ4NTI5ZTNjLCAweGYzMWViMmI5LCAweDQxMzcxOWU2LCAweGQ0OGZkMjBhLCAweGJlN2Y3MzZiLAorCTB4NGYxOGViOWUsIDB4YzBkZGI4YzAsIDB4Y2Y5YzEyNzgsIDB4Y2JmOGI1NmYsIDB4NzRhZDFmMjgsIDB4YTdlNzI0OGYsCisJMHgwYWM0ZmFmNCwgMHhiNDMyYmIzMCwgMHg0ZmJjMzI5YywgMHg2MDBlNmM0NywgMHg4ZjMwYjIyMCwgMHg0OTE2MjExZCwKKwkweDE5ZGYzZWM1LCAweDI0NDc3NGRlLCAweDk2ZTBjM2Q4LCAweGQ3M2M3ZTcxLCAweDQ2ZTZkODdkLCAweGI2ZjM4OWE1LAorCTB4ZjkyNjhkMzMsIDB4ZDU0YTVjMTMsIDB4MzQ1OTJjZTIsIDB4ZjZkNTZmZDgsIDB4OGI1ZDkzNWEsIDB4YjU2ZTBjNzMsCisJMHg5NDcxNzU2YiwgMHhmYmViMDU5YSwgMHgzODE2NzllOCwgMHhhOWU3ZmQ4OCwgMHg3MzRlYmIxOCwgMHhkMDAxY2YyYywKKwkweDkzYzdjMzhiLCAweGQxMzExZTlmLCAweGVmOTkwZjNjLCAweGQ4ZTM5OTNkLCAweDBjOGE3OTFmLCAweDM3OTQzOTFkLAorCTB4NDFmNjI2MGMsIDB4MjQwNzdlODEsIDB4NjM5NDZkYzAsIDB4NmU2MTFjOTEsIDB4MTkyZGNhMjUsIDB4OWY3ZDI1OWYsCisJMHgyZjZlMTVkOCwgMHgwMTkwNTc3NywgMHhmZTA0NTBiYSwgMHg0NjVmMzQ4MywgMHgxYTc3NTAyZCwgMHg2MzlkNzdlZCwKKwkweDNiZmE5MDcwLCAweGY3MDUwMmUwLCAweDFiZjFlOGZkLCAweGRkMjE0Zjg3LCAweGI0Yzk4ZTczLCAweDU3ODNiYThlLAorCTB4MTZlZjllZjksIDB4NzhmZjc4MjcsIDB4YmMyZDc3YzIsIDB4MzUzNzgzMWUsIDB4MDIzOTg4N2EsIDB4NDAzYWYyNDksCisJMHg2ZWVkMWRmYiwgMHg2ZTY4N2Y0NiwgMHgwNTMwMWY3NCwgMHhjMzZlZDA1MiwgMHhiZGFmYWQzOSwgMHg0MTQwNGIwZSwKKwkweDFkZThhYzdjLCAweGU3OWRmMDkxLCAweDFjZDFlNDE5LCAweGE1MTYyNjUzLCAweDE5ODBmZjExLCAweGFmZGMyNTAyLAorCTB4ZmQ4NGJhYTYsIDB4ZmM4NTVmODQsIDB4ZDhjZmVkOGUsIDB4ZjRjMGYxZmUsIDB4NmJkNTIxNTgsIDB4MGEyMzUzMjcsCisJMHg4Y2I3M2ZkZiwgMHg5MjJmMDVmYiwgMHhlZDJmZGYxYiwgMHhjZDMzNjFhMSwgMHgwNjQzZGMxYiwgMHg4NjhlZGRiOSwKKwkweDcxM2YzNDNiLCAweDRiZTkxOGNmLCAweGY5ZTdkZjBlLCAweDUzYWYyODgwLCAweDdlMDYyZmRjLCAweGUxNjMzZDhkLAorCTB4NTgwOTJjNmQsIDB4Mzg3MzE1MDksIDB4Y2E1NTM2Y2YsIDB4NmVhZGRmM2MsIDB4MWYxOGRjYzYsIDB4OTE3NTcwNDksCisJMHhjOTkxNzA5ZiwgMHhjN2U3NmYzNCwgMHhmNWFlZDFhYiwgMHg0MTlmYTM0MSwgMHhjODc3ZTYyZiwgMHhkMGM3ZDVhMiwKKwkweGEzZjAxNjNhLCAweDk0YTIyMzdjLCAweDdiOGJhMWY3LCAweDFjZmQwY2ZjLCAweDQwYWE2MmFhLCAweDhjMjEyMGYxLAorCTB4M2UzZDE2YzcsIDB4NmUxZjgwMmYsIDB4NzBhOWZjNGIsIDB4ZTAxYWFlNmMsIDB4MmI2MWFjMzUsIDB4NWVhMzUzZDYsCisJMHg2ZTAxMDAwZiwgMHhkNGUzZjlhNywgMHg4ZTIzYmQwOCwgMHgyYWY5ODM5YSwgMHhmOWY4OTc3ZiwgMHhlMDU1Njc3ZCwKKwkweGU4MTRkNGZjLCAweDZiYWZkNjQ5LCAweDZhYjM3NWVjLCAweGYzM2RjOTBkLCAweDdiMmVkM2Y3LCAweDQ3ZDNmNzkyLAorCTB4M2IyMjc2ZjgsIDB4MjQ0Y2VkN2IsIDB4MmJiZTMwYmYsIDB4MTVlZmJmYTksIDB4NDExY2NiNWQsIDB4YjVjOTgxZjQsCisJMHg1OTc1Y2U4ZiwgMHhiZWE5YWIyMiwgMHgxY2RjOTgxZiwgMHhlZTkxZjE4ZiwgMHg4YjgyZmRhMSwgMHg5MWY1MTZlZiwKKwkweDg3Y2Y4YzAwLCAweGNjNjdlNTIzLCAweGEyNzY5Nzk0LCAweDEyNWJlZWM3LCAweGU5YjhlMzk3LCAweDBhYTFmYzY5LAorCTB4YTFlZmRhY2YsIDB4ZmRhNzlhY2EsIDB4MTdmYTg2N2UsIDB4N2Y1N2NmYWIsIDB4MWRiY2IyNmUsIDB4YTQ5N2Y5YTIsCisJMHhlN2QyN2U3ZSwgMHg5OTEyYzAxZiwgMHgzODkzY2JmNywgMHg2NDg3YjY4MywgMHhhYTNjNzVlMCwgMHhhNjdlZjVlZiwKKwkweGM4N2I0OGZjLCAweDA2MTk5ZGZmLCAweGVkNWNmODk1LCAweDdmZjRkMGNmLCAweGMxOGJlYmE2LCAweDliZjYxZDUxLAorCTB4ZjZmOWI5MzUsIDB4ZmMzOWY0MjcsIDB4OGE3MWM5OGIsIDB4YTRmMmJkZWUsIDB4ZGY4MjRhMDAsIDB4YTBhOTgyYWIsCisJMHgxOTVkZjgyNCwgMHhmNmUwMzFjYSwgMHg3YzgzNjJjOCwgMHg4MWE5NzhmNSwgMHhjMmIxMzM1ZiwgMHhiZDczNWZjMCwKKwkweDE0YmY4MGNhLCAweDVmOTA2NzVkLCAweDAxYmQ2YmZmLCAweGM1YmQzMGRmLCAweGNmZjFiZjIwLCAweGQ2M2MwNjZkLAorCTB4Yjk1ODc1YmYsIDB4NDkzNmU3ODksIDB4MGFlNDFiYWYsIDB4MTU3ZThkM2IsIDB4MmFmZDE4ZjUsIDB4MTVmYTM1ZWUsCisJMHgzN2UyNWJkMywgMHhkZmFjYjdmYSwgMHhmNjRlNWZlOCwgMHhkZTg1NWM4MywgMHg5MWZjZmZhMSwgMHgyMDYwZmI0OSwKKwkweDM0ZjNjMzNjLCAweDEzMDI5ZDM1LCAweGE4YzQ0NzM0LCAweDY2YzIxZmI2LCAweGYwYTYxN2JlLCAweDg0YTJlMmZmLAorCTB4ZDdhNzJjM2MsIDB4MDkxOWRhM2YsIDB4YjlkMmIzMmYsIDB4MmIzNjlkMGYsIDB4NTEyZWRiYmQsIDB4ZmUzZTYwMGQsCisJMHgyZTc2ZDcwNSwgMHgwMDBlZTAxNywgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjc2VtX2ludF90YWJsZV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlNzMzZmYwMCwgMHg1MWY4NjA2MiwgMHgzOWZiYzEwZiwgMHg3MTZlMTgxOSwKLQkweDAxNDNmODIyLCAweGQ5NDMzMTE3LCAweDEwMTdmYTQwLCAweDYwNjQ2M2JmLCAweGJjNDhjZjc4LCAweDA0MGUzNTdlLAotCTB4MDMzYjJmN2IsIDB4M2UyMDBhYzMsIDB4ZmVmMDNlYzAsIDB4Yzk1YzQ4MWEsIDB4NGViYjNmNGQsIDB4NjIyZWQxZDAsCi0JMHgwNjdlMmVmMCwgMHgwYzAyM2Q4NiwgMHgxMDgyNTkwYywgMHg1NDQxN2ZmZSwgMHgwOGZjZGRmOSwgMHg2NTE4OThiNiwKLQkweGY1MDEyOTc2LCAweDkzMzIwMDAzLCAweDAzODAwOWQzLCAweDAwMDAwMzgwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlM2UzZmYwMCwgMHg1MWY4NjA2NiwgMHhiOGQzYzEwZiwgMHg3MjM2MTgxOCwKKwkweDAxNDNmODIxLCAweDY4NDMzM2I3LCAweDA2MDYxNjNlLCAweGM3N2UyMDAxLCAweDllZjBjMGM4LCAweDM4MzMwNDkxLAorCTB4MjA3ZWVjMTAsIDB4Mjc4ODBhYmIsIDB4N2RjZjUwNzEsIDB4ZTUyZjExNDMsIDB4NWY1ZDlmYTEsIDB4MTUzZDc2YTAsCisJMHg4MzdmNzgxOCwgMHgwMzEwODNiMCwgMHgwMzMwOWI4MywgMHg4NDA4YjQ4MywgMHg1NTA0NWZiZiwgMHhjMTA4NTFkZSwKKwkweDk5NDEyZTdlLCAweGZhODE5ZjVkLCAweGJiZWI4ZDAxLCAweDAwMDM4MDMxLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNzZW1fcHJhbV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGQ1ZmYwMCwgMHhjNTU0N2MwYiwgMHhiZGRjZjhkNSwgMHhlZWNkZGQ4ZiwKLQkweDIxMDc5YjI2LCAweDA4NmUzYzIxLCAweDRiYzYwYTIyLCAweDliYWRlMTAyLCAweDg4YjQ2MjA0LCAweDdkNjA4YTg5LAotCTB4ODQyMDE4MmQsIDB4OTZkMjIyNDcsIDB4ZWRmN2VkN2UsIDB4NWFiMTEwNjIsIDB4NjhkYjE1MWIsIDB4MzQxMDVkYjEsCi0JMHgwNjBiMjhkYSwgMHgyZGYwOTgwYywgMHhhYTU2OTRhMCwgMHhkMWY1OGRmMSwgMHg5MGNiYzhhMCwgMHhmODdlODc4NCwKLQkweGNlN2ZlYjY5LCAweDdiYmJiOTk5LCAweDdjNDg2ZWVmLCAweGZlZmRmYmY0LCAweDczMGVjZmU5LCAweDMzOTlkZWU3LAotCTB4OWNlNzM1ZTcsIDB4YzkyYjMzMzksIDB4MjEwY2IxMDIsIDB4YmJmODFiZTQsIDB4MjJhZDkwOWMsIDB4YTQ2YzY0MjEsCi0JMHhlNWEyMmFlYywgMHg3OWZjNDIxOCwgMHg4MTI2YzA4ZSwgMHhhZmFlZDA5MCwgMHg0MjM0OTA4ZSwgMHg1NGNkMzY0ZSwKLQkweGVjODRkOWFkLCAweDJlODQ3M2NlLCAweDAzMjdlZGE3LCAweDZkMmIwMTg1LCAweDc2ZjZkZTJmLCAweDRiZWI0NGEyLAotCTB4YjQxMjg5YjYsIDB4ZjFkOTc2NWIsIDB4NDI3NWNlZmIsIDB4ZDZkNWVhMDAsIDB4ZDEyNjA3YjYsIDB4OTEzNmY3N2EsCi0JMHg5MzVkYTA2YywgMHhkMjQyZDM5MCwgMHgyMzYyMzkwOSwgMHg2MTc1NGZlYywgMHg1NTlkYmU3ZCwgMHg3ZGRmYWM5NywKLQkweGQ5NTc4YzJiLCAweGZhNzYyNTZjLCAweGQxMjY5MWZkLCAweDliNjVmNTAzLCAweGUzYTEwMDg0LCAweDhmNzFkOTJkLAotCTB4YjdmNjgwMzIsIDB4ZWQwNDIwMjAsIDB4N2E2ZmFkMmEsIDB4ODQ1ZDUxNTAsIDB4ZmRlYmI1ZGMsIDB4MjEyNzc2YzQsCi0JMHhhMjM2N2MyNywgMHhjYThmMzgyYSwgMHhhYTQyMjhlMCwgMHgwNjRhNWIwMiwgMHgxYWFiZWZkMCwgMHhmYjQyY2QwNSwKLQkweGFhNzc1YWFmLCAweDZhYWJlMDEzLCAweDY5MTAyZjkyLCAweDFjMWE4YjdmLCAweGM2YzExZDQ0LCAweDc4YzA4NmZlLAotCTB4YmM3MDNiN2IsIDB4MTgzMGYyNmQsIDB4M2JlYmYyYWYsIDB4M2NjMjIyMTUsIDB4Yjc3YzBmNjUsIDB4ZjMwMWMyODQsCi0JMHhlMTNkYzdkNiwgMHg3NGYxYzdhYiwgMHg5YTc5MmU3YywgMHg1YmRmNDc4ZSwgMHhjMWEwOWNmYSwgMHg4ODVhOTcxNCwKLQkweGRjZThlMDE3LCAweDg0ZmQ5ZjYxLCAweDUyYjdlNjEzLCAweDllOGFlZTE5LCAweDMwZWQ5Y2M3LCAweDdhYzBhYThmLAotCTB4ZjAwOWM0YTUsIDB4OGZlNjU3YWQsIDB4YThiN2Y0OGEsIDB4Zjg0NmY3ZTEsIDB4N2JmYTczZWEsIDB4ZTVjZGRhYTMsCi0JMHhlOTQ1MWYwOSwgMHg4YWJkNDhmMCwgMHhmNjkwNGYxMCwgMHg1MjgwYTQ0YiwgMHhmOWU0NDk3ZSwgMHhkMjMyNDIwNywKLQkweDQ4ODM1MTdiLCAweDdmYTQ1YjU0LCAweGZhNDI3OTRhLCAweDliN2ZmZmQxLCAweGMxZTI5M2ZlLCAweDZjMGFlYWRmLAotCTB4NmRkMDhlY2EsIDB4MTY2ODFiOTksIDB4Mzc2OWRiYTEsIDB4NWRkNGEzYTcsIDB4NWViZmRkMTAsIDB4YTBmNDAwM2UsCi0JMHhkY2Y5ZDRmMCwgMHhjYmU0M2U1OCwgMHg0ZmFkNzJjMCwgMHhkNmZkYmM0NSwgMHg3YWNiMDIzNywgMHgxZmNmODY5ZiwKLQkweDcyYzc4ZGYzLCAweGU1ODNjZjlkLCAweDU4YTU3YzFmLCAweGY4NjU3YzA2LCAweDZjZGYwNmRlLCAweGJjZmEzNzJjLAotCTB4NWY0OWZjZjgsIDB4YmUwZDk2MjUsIDB4OGNmZTdjMWEsIDB4OGQ5NjA1NmYsIDB4N2YzZTNmM2UsIDB4Y2IwNmI3Y2UsCi0JMHhjYjBlYWZhMCwgMHg1YTJmNDBhZCwgMHhmODAyZjkzNiwgMHgwMzVmNzZkZSwgMHgyMGJlY2Q5NiwgMHg2YmU5ZGYzZSwKLQkweDhlN2VmMmM2LCAweGE0YzljNGM3LCAweDQ4NzhhMjUwLCAweDI1MzcxMGY0LCAweGVlOTk0OTNiLCAweDNkNjk5NDI5LAotCTB4ZDNkNThjYTUsIDB4MmExN2Y2NmYsIDB4YTVlZTllYjQsIDB4MDE5NzhhNzUsIDB4NTY4NTQzOGIsIDB4YzM1MDFmNWEsCi0JMHg5MmZmMDdkYSwgMHg3ZDY4ZDkxNCwgMHgwZmI1OWZiMCwgMHg2NDUzZGZiZCwgMHg3NWExZjVhNywgMHgzYWY4N2RhYywKLQkweGFkMDI1MTdmLCAweGY2YjAwZjBmLCAweDQ1NDMxYjhiLCAweDM4YmY1YTBlLCAweDViNzNkYWM4LCAweGQ2OTNiMTQ4LAotCTB4OWVhYzQzNzMsIDB4ZWM1M2MwNzcsIDB4MzZiY2Y1YTIsIDB4YzBmODJmNTYsIDB4ZWI0ODljNWYsIDB4ZmJlY2VkMDUsCi0JMHg1MTAxMWQ4OSwgMHg2MWQyYzY3NSwgMHg0ZWRlYWNhYiwgMHhmOWQ2YWQyOCwgMHgxMzQ4ZjRhZiwgMHhlZjUxNWQ2OCwKLQkweDhmYzUxYTI0LCAweDk0OGY1YWZmLCAweDdiMjFmMTQ5LCAweGJmZTQzZGIwLCAweDE0OWJkYjA5LCAweGUxYmZiNjBmLAotCTB4NzZmYWMwYWYsIDB4ODdlZDhiZDksIDB4NWQ1ODRiZmQsIDB4MTdmYjYyZjEsIDB4YmQ2MjlmZmUsIDB4YmI2M2Y2NTksCi0JMHhkNThmYTU2ZCwgMHgwZmI2M2YxNSwgMHhmYjA2Yjk1OCwgMHhiMDA3MjlkZiwgMHgwN2NhZDQ3ZCwgMHgxMmE3N2RiMSwKLQkweDU2ODdmNmMwLCAweDRhOTllNjNkLCAweGY3ODJiNWViLCAweGI0OGZjMGI3LCAweGMwMzkyNGFjLCAweDMyOGNjMTRmLAotCTB4MDVhYjRmY2EsIDB4ZjdmODFiMzIsIDB4MjhlOTgwYmYsIDB4NTRjZWFlNWYsIDB4ZmViNzBlNTAsIDB4OTAwOWUwYWQsCi0JMHg4MzRiZmM1ZiwgMHg3ZjI3ZmNmYSwgMHhmZmRmOGQ5NSwgMHg2OTkxZmIxMSwgMHhmZGVmNjIzZiwgMHhkZTNhYmRlNCwKLQkweGFiZGU0ZmQwLCAweDBkM2Y3YTk1LCAweGJkYWQ1ZWYwLCAweDdkNmNmZDZmLCAweDllMTFhMjc1LCAweDdlZjRhYjU3LAotCTB4YWUzYzIwYjYsIDB4ZWYyYmNkYmUsIDB4Nzg0NmM5YjUsIDB4ZjdhYzViNWUsIDB4NDllMTEzYjMsIDB4NGQzYzFiZWUsCi0JMHhkM2YxMWI2ZiwgMHgzZjE4NzZmNCwgMHg3ZTllMTE3YiwgMHhjYzY3ODM3ZCwgMHg4Y2ZjNDYzYiwgMHg5ZjhjMjc3OSwKLQkweDY2NGZkODAzLCAweDdhNjlmYWRmLCAweGE2OWY4OGM3LCAweDc5ZjhjMjc3LCAweGE4MzVlNzFiLCAweGYzMWFmMzZmLAotCTB4NjMzZjExYWUsIDB4ZTdlMzBkZGUsIDB4YmIyNzg0MjMsIDB4ZmY2Y2ZkNmYsIDB4ZWQ5Zjg4ZDAsIDB4NzNmMTg2MWYsCi0JMHhhMGI5ZmIxNCwgMHhmODJhZjM2ZiwgMHg4MjlmODhjOCwgMHhlOWY4YzI4ZiwgMHhlYTJlN2VjNiwgMHgzZmRiM2Y1YiwKLQkweGZiNjdlMjMyLCAweDdjZmM2MTQ3LCAweGQyNWNmZDg5LCAweGZjMTU3OWI3LCAweDgyOWY4OGMzLCAweDYzZjE4NDdmLAotCTB4ZDE5ZmEwMTEsIDB4ZjlhNzgzN2QsIDB4OWE3ZTIzNTMsIDB4YzdlMzBkM2YsIDB4ZWQ4Y2ZkODEsIDB4OGZlMzNjMWIsCi0JMHhmZTMzZjExOCwgMHg2OTNmMTg0OCwgMHg0MjdkZDAwMiwgMHgzZTY5ZmFkZiwgMHhmMzRmYzQ2MiwgMHgwNjdlMzA5MSwKLQkweGZhNTMzZjYxLCAweDQ3ZjFhZjM2LCAweDdmMTlmODhkLCAweGUxOWY4YzM0LCAweDJhNDJhZjM4LCAweGExMGYwMGY3LAotCTB4ZWU3YWI4ZmQsIDB4MjM0OWU3NjcsIDB4MGM5ZTc2N2UsIDB4ZWM1MmU3ZTMsIDB4MjdlZDFhNjcsIDB4MjY3ZWY3YTcsCi0JMHgzM2YxMWE3NiwgMHg5ZjhjMzNiMSwgMHg5NWNmZDhmMSwgMHg2NzY3ZWI3ZCwgMHgzYjNmMTFhNywgMHgyOWY4YzMzYiwKLQkweGRkNWNmYzQ0LCAweGVjNGQ3OWI3LCAweDYyNjdlMjMyLCAweGZlNGZjMzE3LCAweDg5YzUzNTViLCAweDg1YWU5ZGI0LAotCTB4OTkzZjQ4OWEsIDB4MDhmMWUxZDQsIDB4NTliYTJlYjQsIDB4MDQ2Yjc0NWQsIDB4Yjc1MTEyZWMsIDB4NDc5YjQ4MzcsCi0JMHgxYjNiZGZhNCwgMHg0NTdlZjM5MywgMHhhMjhlZWRhMiwgMHg4Yjk3OTg3MiwgMHg3NmQxNjM1YSwgMHgwNGY4ZDI0NywKLQkweGVjOTM5ZDgzLCAweDUzZDQzMTQ5LCAweGRlMTgwNzRiLCAweGQ0MzY1N2VmLCAweGY2N2ZkZWQwLCAweDRjZjY4NmM1LAotCTB4OWVhMTllNmYsIDB4ZjBkMTM5NTUsIDB4MjI5YWEwZmUsIDB4OGFjODdkNDMsIDB4NjdlZjBjYWIsIDB4ZDQzNWFmZmIsCi0JMHhkOGZjZDY3MywgMHg3NTA1ZmVmMCwgMHgxN2VkMGQ3MywgMHhkYTE5NTdkNiwgMHgzMzJjMGEyZiwgMHhmYzM2NDdkNCwKLQkweDRiZmRlMTg3LCAweGRhMTk3NzgyLCAweDk1ZmU2ZDJmLCAweGU4NzQ3ZGExLCAweDdmM2Q0MzIxLCAweGY3ODY2M2ZmLAotCTB4MzA2ZGI2YzcsIDB4ZjgzYjhmYjQsIDB4NDI3ZGExOGMsIDB4N2Q0MzU2ZmIsIDB4MjY5ZGIxZDIsIDB4M2VlOWNmM2IsCi0JMHg0NWQ3OTIzMiwgMHhlY2MyN2JlMCwgMHhlZDA1NGNmZSwgMHhjMTRiOTBiZCwgMHg4OWMwMzJiYSwgMHhkNzZlZmM3NiwKLQkweGE1MzBmNTdjLCAweDc2ZTdiMmFmLCAweDE3ZDI4ZDM1LCAweGJhZTg0YTY4LCAweGYyYTAzODVlLCAweGZjZmE3NmMyLAotCTB4MTdiZDEzYTcsIDB4OWZmM2U5YmEsIDB4ZGQ0YmRlMmEsIDB4Y2E1M2VjNzEsIDB4ODBjOTAyMGYsIDB4Njk0MGI1NTIsCi0JMHg2NjQ3YmY2ZSwgMHhmNTk0NThmYywgMHhmNDQzZjBmNSwgMHhmNzRiNmFmYiwgMHhiNzVhNjRmMCwgMHhjMGY1ODU4OCwKLQkweDJjMTA3ZmJmLCAweDIyMDlhN2M4LCAweDEyZjc4MWE5LCAweDgyZmQwNGFjLCAweDllMGJiMjdiLCAweGViZjE0N2YwLAotCTB4MGU1NDQxOWEsIDB4NmJiZjQ4ODUsIDB4ZDgwNjZmNjQsIDB4YmU1NjFiMTksIDB4NjQzYjA3ZWUsIDB4YWYzYTIwZjUsCi0JMHgyMTNjODQwMSwgMHgwZmYyMWViYywgMHg5YTBmZGZhMywgMHhmZGE1ZTE5ZiwgMHhhNzZhMTU1OSwgMHhkMGFmOGY0NywKLQkweGY4ZTE0N2YxLCAweDczZmUzMDBkLCAweDFkNmY4YzNkLCAweGJlMzBkZTNhLCAweDYxYTU3MDZkLCAweGM3NDI5YjdjLAotCTB4NjA3YjUzNzcsIDB4N2M3YzdiZTUsIDB4ODQ4OTg0NGEsIDB4ODdiYzJmM2MsIDB4NTcwNzViZTMsIDB4MjhmN2Y4ZTIsCi0JMHgxZTg5NWZkNCwgMHg3ZTNjMjEzZiwgMHgyZWNiYzgzMywgMHg5YzZjN2YxOCwgMHg2ODlkMGZmOSwgMHgyYWUwZmY5YywKLQkweDM2MTVmY2UzLCAweDBmMmIzZGZmLCAweDcwMTNmMWYxLCAweDQzODU3YmZlLCAweGFiODNmZTZjLCAweGFjYWRmY2Q4LAotCTB4ODlmOGYwZGYsIDB4ODdlZmZjNjEsIDB4ZDNkYWJmZjksIDB4MWIyNjczZmMsIDB4YjE2NDNmZTcsIDB4MzY1NmZlNzEsCi0JMHg4ZjJiMWJmZSwgMHgzODlkZjFmMywgMHg3MWMyOWJmZSwgMHg4YjIxZmYzNiwgMHhlYWM1N2M3MSwgMHg5NDdmODBkNSwKLQkweDAwOWE4NGFjLCAweGE0MGM5ZjFkLCAweGIwM2ZhOThhLCAweGNhMDcxZDBiLCAweGE5OTQyOTExLCAweDMwYjVmOTA5LAotCTB4NjlmOGUxMTQsIDB4MmZiN2UzMDIsIDB4YTFiZjI4MTIsIDB4NzNlM2YxYmUsIDB4YWQ5YWEwMTIsIDB4OWM1ZGZhODAsCi0JMHgxNjM1MTdkNywgMHhiMDk3YTAyYSwgMHhmMzJiZmE5ZCwgMHhjZDE1YTgzOCwgMHg1OTM3ZjIyMiwgMHg0MDVjMGQ2YiwKLQkweDE2NmNlZGUxLCAweDU4YWY1MGZkLCAweGZhMDAyNTNiLCAweDZlNGFkYWFmLCAweDI0ZWY4MzJiLCAweDlmZTc4MjEyLAotCTB4ODZjOTcyM2UsIDB4Y2I5OTc5ZTgsIDB4OTFmMjc1NzksIDB4MGI3OTI4ZjYsIDB4NjQ0NTUxZmIsIDB4NmY4NTBkNDQsCi0JMHhkOGMxMzAxYSwgMHhlYTYzZmQ0OCwgMHg1ZmVhMTEwNywgMHgwY2ZkNDA3YywgMHgxM2YyNTk0MiwgMHgxMWY3OGQ5OSwKLQkweGRlYTA5N2Y1LCAweDY4MjVmZDRlLCAweDdlMjU2NDI3LCAweDJiN2JiYjQ3LCAweGM2NWZjMjgzLCAweDYyNThmZmUxLAotCTB4Y2RmMWZhZjIsIDB4ZTU0ZmMwNDIsIDB4OGY5ZjhiZjMsIDB4YjZmNTNmNDYsIDB4ZjQ4YTBlMTUsIDB4ZmM3MzFjMDgsCi0JMHg5ZDNhODZhOSwgMHhkNGU4MWY5NywgMHhkODFhYzNiZCwgMHg1NTdlMjAyMCwgMHg4YTM5NTdjMCwgMHhhZmI3MjEyNiwKLQkweDhlYjhhMmM5LCAweDI1MmVmZmJjLCAweGZkNDUyNjdiLCAweGY3MjNjNDBkLCAweGIyZGZlZmE3LCAweGE2ZTQxODVjLAotCTB4NThmNGNlZTMsIDB4ZTEzYWQ4ZjMsIDB4NWNhMGIyYzksIDB4NzhjYjJjOTMsIDB4MWE2ZGFlNDIsIDB4NDgxZWQzMmQsCi0JMHhiOGZlNDdiOSwgMHhlYmRjNmEzZCwgMHg5OWY1OGQ0YSwgMHhhNzdhYzY2NSwgMHgxNDJkOTFlYywgMHg4MTcyY2VhZSwKLQkweGNlZmRhN2FjLCAweGQ3NmM2ZDlhLCAweDUyNWE3MWM3LCAweDc4Zjk5ZDE4LCAweGJlMGNlOTY1LCAweGMxZTY1MDU5LAotCTB4NzlkMjM3NjMsIDB4YWI3ZDliYjYsIDB4YmI3ZDUzYzMsIDB4YTA1ODVkNGMsIDB4MDExZmJmYTcsIDB4ZjBkM2ZhYmEsCi0JMHhkOWJiMWZiZCwgMHhjZWYwY2RiYywgMHgzMjllNmQ5NiwgMHg3M2Q5Y2YzYSwgMHhiN2YwMDBjNCwgMHhlZmJmZmUxOSwKLQkweGI5MmM3ODcyLCAweGIwZjM1Y2I0LCAweGYzYjEyYzRjLCAweGEzN2ZjMzMxLCAweGEwOWYzY2Q3LCAweDRkZjBlYjBjLAotCTB4OGNlN2U2OTUsIDB4ZmE3MDhlNmYsIDB4NDFmYzBjN2YsIDB4MWZjMGEzY2IsIDB4OWNjM2ZlMTQsIDB4OTU3YTIyM2YsCi0JMHhkNWI1NDdmMSwgMHhhMWY4MDMzYiwgMHgyMDkxNTFmYiwgMHhkY2JmMzk1ZCwgMHg1ZTY1ZjljMCwgMHgwODJmOTE5ZCwKLQkweGM3NDBjYWYxLCAweGJjODViMzA1LCAweGMxZjE0NTVmLCAweDBiMDdjZTJjLCAweDczN2M4ZGVhLCAweDk5Y2JmMTBiLAotCTB4ZTM3MmU4NzEsIDB4Njc3N2Y1ZGEsIDB4ZmJmM2IxYTgsIDB4NGRjZGYzOTAsIDB4ZmM0NmVmZjcsIDB4ZDE5M2NlYzQsCi0JMHhhNzRlNTZlOSwgMHhlZDhjNmE1YiwgMHhkZWJhNzAzNywgMHhiYjNhZTljMiwgMHhhOTk3YzFmZSwgMHg1NjNmMjBmYSwKLQkweDdiYzgzMjAzLCAweDdhNzQyZmY1LCAweGU5ZTgxYmI2LCAweGMzMzRmNGU1LCAweGU3YTcyYjc5LCAweGY0NjczZmFkLAotCTB4Y2VkYmMzMzQsIDB4N2Y1ZWQ5ZTksIDB4NjM0MzI2NDYsIDB4NzdjMzM1ZTEsIDB4Zjk5ODhhZGIsIDB4MzljZjQwMjgsCi0JMHhhY2Y0ZjhmZSwgMHgzZDRjMmU2ZSwgMHg0OTdjZjUxYywgMHhjM2Q0Y2FmMCwgMHhhOGI2NzI1MSwgMHg1ZjUwZGNhMSwKLQkweGYwZDFiODE4LCAweDM5ZmE4MmZlLCAweDc1NzlmNjg2LCAweGI3ZWQwZDBiLCAweDUwYzNiOWFmLCAweGI5ZmZlMzlmLAotCTB4NTZkYmZkZTEsIDB4ZGZiNDM0YWMsIDB4YTFhZjczNTIsIDB4MDdjYWE2ZmQsIDB4YmQxYmY1MGQsIDB4OWZkZTFhOGYsCi0JMHhhMWJkN2IzNSwgMHhkM2Q5NjY3ZCwgMHg0YWViZjY4NiwgMHhlNWVhMThiNywgMHhmNzg2MWQ5ZSwgMHg4NzBiNWQ4NSwKLQkweGVhYmFlM2I0LCAweDg4N2Y2M2ZkLCAweDQ1NjdiZTI3LCAweDNiZWIzNTNlLCAweGY2MWUyZjVkLCAweDg4ZmNmOGE5LAotCTB4Yzc5NjA0NmYsIDB4M2YzZTFhN2MsIDB4ZTU4ZjFiZTEsIDB4NzRkZmQwNGEsIDB4NjBlY2IwNWQsIDB4NzM0M2Y1NjUsCi0JMHhlMmEzYjg4NiwgMHhkYWM4OWYxZSwgMHhiZGIzZDA2MCwgMHg3ZGZkNDNlOSwgMHg3ZmEzZGViMywgMHgxNGVjZjE1OSwKLQkweDkwMmM1Y2JkLCAweGJiMDc1ODMyLCAweDNmYWQxZGI4LCAweDQ5ZDdjNTNmLCAweGI5NDJlZTQyLCAweGI5MzBhYzVjLAotCTB4YjMzNWJjNWQsIDB4M2Q0MjI0ODgsIDB4NGUyNmJjMzQsIDB4Y2YyYzI2N2MsIDB4MzNlNzAxNDEsIDB4MDBjNzJlYWYsCi0JMHg5MWZhODJlNywgMHhlMDM2ZjgyNiwgMHhmOTAzMGIzOCwgMHgxYThiZTc4NiwgMHhlYmJlMTkyNiwgMHg3YzIyMmRkOCwKLQkweDI3YzY0MTRiLCAweGI2NTY3MmMwLCAweDg1ZjAwMmM3LCAweGVlYmUwZWY2LCAweGIzZDc4MDEyLCAweDRiZWIwMmQ3LAotCTB4ZTdiNDNmNzMsIDB4YTlhNTdjM2EsIDB4NzNjMDI1ODcsIDB4N2NjNzk2MTksIDB4ZTIzY2IxYjMsIDB4ZDg3OTYyZjMsCi0JMHhjN2U1ODk1NywgMHhkYjJjMWFiZSwgMHhmY2IwMmI3ZCwgMHhmMmM3ZTdjOCwgMHgyYzFhZGYwMywgMHhjM2FiZWVmZiwKLQkweDFlYWZhMGYyLCAweDAxN2M3N2NiLCAweDM1ZjJkZjJjLCAweDJmODZmOTYwLCAweGFmOWI2NTg4LCAweDlmNGVjYjE5LAotCTB4NWU1ZDRiMDcsIDB4NDg2NWY4YTIsIDB4ZThiZjE0NjYsIDB4OGZkNzRmZmEsIDB4OWNiZjM4YzcsIDB4Yzc4OTdlMDAsCi0JMHg3YzhjMWIxNywgMHg0MWFlNTQ3MSwgMHg0M2ViMzBiZSwgMHhmYWNjMWQzMywgMHhjM2YyYmJlZiwgMHhkYmIzMGI1OCwKLQkweDQ0M2YyZmJlLCAweGEyNjU5ZGU4LCAweGY0NmY0ZTc3LCAweGJkMTQ2MjI2LCAweDBjZGM1YWM3LCAweGZiZWY0ZTFlLAotCTB4ZjYzOGRlMDAsIDB4YjhiMDI1ZmEsIDB4ODNiMjhiZjcsIDB4ZmYxNjBlM2MsIDB4NmE3YTcxZTUsIDB4MmZmOGIyMDEsCi0JMHhiZTk2YmIxZiwgMHg1MmY2ODZkYiwgMHhlM2U4MDQ2MCwgMHg3N2ZlMjNkMywgMHg0ZmI3YzQzOCwgMHg2NzUyYjQxZiwKLQkweDk5ZjllN2FhLCAweDFlMjNkN2U5LCAweDg2ZmQwNzg4LCAweDI4YmEwMWY5LCAweGRiYjZjN2U0LCAweGVkNWUxODEzLAotCTB4ZTg0YTUyMTYsIDB4MDVlZjcxN2EsIDB4NDc3MzZhNGYsIDB4MjkyMjVkNjEsIDB4MmI0MDdkZjAsIDB4OTdlOWM1NzcsCi0JMHhkZjgwYTBkYSwgMHhlYjVhZjBkZSwgMHhmYTE3MjJmYSwgMHg1N2Q4ZjIzYiwgMHhiNThlNTAwNSwgMHg2MTM0M2IzMCwKLQkweDMwZjY4OGFmLCAweDAxYTEzZDA5LCAweGRlZmFjMzdlLCAweGRjNDA2NWFhLCAweGM1MDJmYmI4LCAweGMwNzFlYjhkLAotCTB4OWY5ZmM0NjksIDB4ZjgyMjBiZDYsIDB4YThlMjk3YmIsIDB4YmFiM2Q3MGQsIDB4YjBkZmM0MGMsIDB4ZjY2Nzg2MmYsCi0JMHhlOWJkN2YwMSwgMHgzOWYwZGVjOSwgMHhkZmUwMzAzNywgMHhmNGRlY2Y4MiwgMHg4YjdhNmY1NywgMHg5YWU3ZDQ3OCwKLQkweDc2YmJmY2U5LCAweDJiZjc5MjVkLCAweDUwZDRmNDE1LCAweDgwZjRmZmU2LCAweGM3YmY3ZDZmLCAweGYwMjU0ZjBjLAotCTB4ZjNiZWQ4ZjEsIDB4Y2ViYTU3NzEsIDB4MDk4MzZkYzcsIDB4OTA2ZGU3MWQsIDB4ZTlmZmRhMTcsIDB4ODA5MzBiYTYsCi0JMHhiNDFmYjQyZSwgMHg3MWI3YmJiYiwgMHhiYTE3YjlmYiwgMHhmNjM2Y2M5ZSwgMHgyZmU1Y2Q1NywgMHg0MjkyNWZkYywKLQkweGI4ZTk0Yjg0LCAweDQ5MjE0NTJlLCAweGJkMTYxZDc0LCAweDFiZjQ0NDJiLCAweGY4M2Y3NmI0LCAweDVhMWNiYmUzLAotCTB4ZDhmZTBhYWQsIDB4MmE0MzU3ODksIDB4ZGJmNDY4ZjQsIDB4MjI3ZmVmNGYsIDB4NjU5YmZjMTEsIDB4ZTFmNzE2MTksCi0JMHhjYmQ0NzQzOCwgMHhiNzZjYzEyNSwgMHg2ODBmZGEzMywgMHhkNzRmZDYzNiwgMHhmNDQxYTUwOSwgMHhlYmE0ZDQ5MywKLQkweGMwNzU4MTJmLCAweDBjM2MzZWVkLCAweDk2MDY3MmY0LCAweDMyY2IzZjdhLCAweDU0ZTFmNzE0LCAweDIzZDMzZmE0LAotCTB4NjdhOGM5OGQsIDB4Zjg2Y2Y4NGUsIDB4NDcwZDBmZGUsIDB4ZTA0NGZkNGYsIDB4ZDA5ZjIyNjgsIDB4ZGYxNDgxZWYsCi0JMHg3ZWZjZjRlNCwgMHg5ZDIwNzI4ZiwgMHg0ODVlMjA1NSwgMHhjMDJmZTQ1YSwgMHhmZmQzYjM3ZiwgMHhmZDBhMTliZSwKLQkweGZiZDc1ODRhLCAweDdlOGEwZWFkLCAweGJjZjBhNWViLCAweGZkMWUzMGQxLCAweDMyZjdkNTRlLCAweGU1OWViYmUxLAotCTB4NzQ0NzIyNGQsIDB4ZGI3NGE3N2UsIDB4MTc1YmY3YzIsIDB4NDZkZGQ4MzUsIDB4NTBkOTMwYmIsIDB4NzRjZTZlYWYsCi0JMHhmODQ0ZWMxYiwgMHg5NWMyMTgwNywgMHhiNzdjMDQ4MiwgMHg5NzVkYjM5OCwgMHg3YzAzNWNlNCwgMHhlMzA0M2Y3NCwKLQkweGY2MDVkZjgwLCAweGJiNWIxMmRlLCAweDRjNTE1NWUyLCAweGU3MmY4MGRhLCAweDVlZjlkNzhlLCAweGQ1M2VmNTlkLAotCTB4OTE1ZmM3NGYsIDB4ZjkxN2M4MDksIDB4MTA1NTQyOWEsIDB4YTBhZThmZTksIDB4YjdlYjQyYzQsIDB4YTZkY2RhZjMsCi0JMHhiZDYxZDM0NSwgMHhmNjYxNmUzYSwgMHg0YjI5MDU3OCwgMHg5MmIzN2YwNCwgMHg3YzQwMTVkNCwgMHg5NGIxMjRmMiwKLQkweDI0OWU1YzgyLCAweDQ3ZTYyNDZmLCAweGEyZmJlMWM5LCAweGJlZGNmMDgyLCAweDUzMTc2OGM2LCAweDVmNTBkOTdmLAotCTB4Y2ZhYzZmNTAsIDB4YzNhNmQ3MjcsIDB4YjVmY2YyYmUsIDB4YTAwODA5MzIsIDB4YWZlZDhjMmYsIDB4MTY4ZTRjODgsCi0JMHhiMGQ1OWE5MCwgMHhkOTk1YWZiZSwgMHg0ZGQ3MzYzYSwgMHhkZjBhMmNhNCwgMHgyZjFlMTc5MiwgMHgxZmViNDM5OCwKLQkweGQzMWVjYzhiLCAweGE2MTc0NWY3LCAweDgyYWJmODMwLCAweDZkMGYxNWViLCAweGZmMjlhNGZmLCAweGU4NzlhYTA2LAotCTB4YjBkNTgxZjcsIDB4MDliN2Y5NWUsIDB4OTYzNTI2ZGEsIDB4N2UxNmRmN2UsIDB4ZmFmYWJjMzMsIDB4Y2IzZmIzMWYsCi0JMHgyMGQyNThlMSwgMHhlYzcxMDI3OCwgMHgwZWJlNmU4MCwgMHg0ZDJlN2FlYiwgMHgwOGUyMWI3MiwgMHhlMmEzZDQyYSwKLQkweDlmOTlkZjBjLCAweDlmODE4OGQyLCAweDM2YmQxN2VlLCAweDFmZTMxZmE5LCAweGE5MDRhN2YwLCAweDlmN2VmMTViLAotCTB4ZmE2MjMzZmUsIDB4ZmVjNjkzNGYsIDB4YTQwZmZkODAsIDB4ZmExODE3ZmQsIDB4Zjg1MDdmNTcsIDB4M2ZjMGM1ODcsCi0JMHg0YmZmNWUyYSwgMHhiYjc2Nzg1ZSwgMHhhYTkzZWE5ZiwgMHgxMjI0OGZjZCwgMHg5NzFlM2ViYSwgMHg0YTM1ZDJlYSwKLQkweGVlOWJjNWRmLCAweDFmM2EwNDRlLCAweGMwODlmYzkzLCAweDYyMDNjN2FmLCAweDdhY2UyMDY5LCAweGU5ZDI1NzM1LAotCTB4MTAwYTcxZWQsIDB4ZDI3ZjgyYzcsIDB4NzMzYzRmZmUsIDB4NWZmN2ZhMWYsIDB4MThkZDkyNmMsIDB4ODZiMDZhOWYsCi0JMHg5NzFlNTRhYywgMHg0ZTljMmQzNiwgMHg4ODdlYjE3MiwgMHgyNTM5ZWZkNSwgMHhjOGQ5YmQ0MiwgMHgzZDRmNTU3ZiwKLQkweDBhZjkwZTkyLCAweGJjNzg1Mzk0LCAweGVjZjY4NDI2LCAweDk2OWY4ZGQyLCAweGJhNDRiYWUwLCAweGRmY2M4ZTUxLAotCTB4NTJlN2Y4YzEsIDB4NTFjZGZmNTAsIDB4MjlkYjYyOTIsIDB4NTc3N2U4OWMsIDB4Mzc1NGJjNzMsIDB4NGM0YTc3ZGQsCi0JMHhhM2I1N2Y4NCwgMHhiZjdlNmMzZiwgMHhkN2E1ZGI5MiwgMHgyM2I0YWU0OSwgMHhlMzI3MDRkNCwgMHg4N2QwMzhjOCwKLQkweDgwNDgzZTNhLCAweDBiZTJhNWQ5LCAweDFjNDJlNzhmLCAweDJiZTM2M2IyLCAweDllMTQ0Mjg5LCAweDFkM2EzOTc0LAotCTB4M2I4ZmZkYmMsIDB4NmRmNTllZDUsIDB4NjhiMzk1MjcsIDB4YWY1ZjQ3ZmIsIDB4NGY2ZTY2ZDQsIDB4YjE3MmIwYjcsCi0JMHg0NDljNGExYywgMHhmNWUyZTBmNSwgMHg4ZmE3ZTZiMiwgMHhjNGZiM2YxNywgMHg1YzQxOGY5MywgMHg3NmFiM2RmMCwKLQkweGQxN2ZlZDAxLCAweDMzYmYyZmIzLCAweDZkMTdkNjkxLCAweGIzYTZkMzkxLCAweGY0ODUzODY5LCAweGU5YWE1ZDA4LAotCTB4MjJmMjJiN2YsIDB4ZmU3YWE4NzQsIDB4ODRiZDQ1NjUsIDB4NGE2NWZmM2QsIDB4YjY4YjFlODQsIDB4MjVjODU2ZWMsCi0JMHgwZTI4ZjhiMSwgMHg5ZGRhNTZlZSwgMHgzYzEyZTg3MSwgMHg4MWY2MDI1NCwgMHgxNTNmYzJmOCwgMHg1ZGYxZmJhMCwKLQkweDFkOWZlOTAyLCAweDVmZWI5ZjA3LCAweGYwMWZmNWM2LCAweDc0ZTQ3NDg0LCAweGY0Y2RkMzBhLCAweDBiYTUzNTdlLAotCTB4NGU5ZDZiZTgsIDB4NWNiMWY2ZTYsIDB4ZWE3ZjQwYmYsIDB4ZTdlN2U0MjgsIDB4NTRmYzUyNzYsIDB4YzFhYWRkZmUsCi0JMHhiYjlmMmJmYywgMHg3MWU2MTEzMywgMHg3YzYxYWE1NCwgMHhlOWRkZjhmZCwgMHhhNTZlM2ExZSwgMHg2Mzc3NGZlYywKLQkweGZlNTc5ZWM5LCAweDZmYzgyN2UxLCAweDQ5ZmY1ZTBiLCAweDg4NjdjNjNhLCAweDZiODJkMzI3LCAweGU2MTMzZjhmLAotCTB4NGNkZDZmMzcsIDB4ZTI3Y2RmOWMsIDB4N2NhYmJlNDUsIDB4ZmQwMzJjNWMsIDB4NGE0NGI5ZjcsIDB4OGI5MWM0YjcsCi0JMHhlM2IzMTI4MywgMHgwNmEwNmU4ZSwgMHg1MWRmOWQxOCwgMHg3ZTYwYWNiYSwgMHhlNjIyMWJjYSwgMHgwNzcyMTEyOSwKLQkweDA5ZmZmOTAxLCAweDEwYjUwYjlmLCAweDhkYjlmZWIwLCAweGE0YjM2OWQxLCAweGNhZDQ2MWZiLCAweDhkZDdlNjhjLAotCTB4N2QwMWI0ZjcsIDB4ZjRmMjBjNGUsIDB4NmE4YjdkODcsIDB4M2UzOWY5MjIsIDB4YmY2ODZmODQsIDB4ZmFkM2ViZTIsCi0JMHg1NTUwZmEzMywgMHhhM2JmYzA1YiwgMHgzYzMxN2NlYiwgMHg2NGRiZjc4NywgMHhmMGQ3M2Q4ZiwgMHgzYjI2ZjkxZCwKLQkweDNlNzJmZTMyLCAweDAxM2I4NTNlLCAweGU5YTNlN2Q2LCAweDQ5NTRlZGYxLCAweGRhZjg3NDE2LCAweDQ1N2YxNDQ4LAotCTB4Zjc5MzM3YzksIDB4ZjkzMmY3OGQsIDB4NTAzZGU1ZDYsIDB4NjdlZDBhNWUsIDB4MDNmMjYyZGYsIDB4NDdmYWMxZGYsCi0JMHhjN2Y1MGFlMSwgMHgwYmQ3ZGRmNiwgMHgyNGFjMGZhOCwgMHgzN2FlNGYxNCwgMHg4ZGFlNWNjYSwgMHg1MDlmM2FlZCwKLQkweDI5MjEyNWI4LCAweGZmYTA1ZjhhLCAweGVlM2ZjNDE0LCAweDRiNWZjYzU3LCAweDk3ZDI4YmJmLCAweDYyNWUzMGQ1LAotCTB4ZGNiYTdmNmMsIDB4ZmZmMmUwMmUsIDB4YzhmZmM4MjYsIDB4NzU5M2ZjODgsIDB4YjY3YmVlNGMsIDB4MTdhOGZjOWYsCi0JMHgyNzgxY2IxNywgMHhhNTc5MDMxZiwgMHg0MTU3ZTlmMiwgMHg5ODMyZTU1ZSwgMHg3YjhkNjdmNywgMHg5NTMxZjlkZiwKLQkweGJhODJjZjkzLCAweGE3ZjUxYTljLCAweGI3MmI0ZTU5LCAweGU0ZjEyNThlLCAweDQ2YTczM2Y0LCAweDdkMjljYWUyLAotCTB4OWQ0ZTU3MWUsIDB4ZmZjN2M4ZWQsIDB4Yzc1M2ZhNTcsIDB4ZmMyNjU3ZGYsIDB4MjdiMGZhZTksIDB4NjFmNTlhM2MsCi0JMHgzZTIyYTRiZCwgMHhmZTkwZmFjZCwgMHg2MjBhNDViZCwgMHgzYmU3NGZmOSwgMHhmZWFhZGY5ZCwgMHhlODA4NjRiNCwKLQkweGVhNWYzMDlkLCAweDRiZTYxNzdjLCAweGUyNjJlZjlkLCAweDk5ZmMwNmExLCAweDE4ODY1ZmRiLCAweDgxNmI4NTEwLAotCTB4ZjAzMmZlYWQsIDB4ODA5YTZjMjMsIDB4ODc2MTdlNzIsIDB4NmNlZWYzMDUsIDB4YmZmNDA0NjMsIDB4NTg0YmQ0NDYsCi0JMHgxZWUyZGQ3ZiwgMHg4Y2U4NzYwYiwgMHhmNjdjMmY0OSwgMHhlZGVkZjI3MywgMHhiZTVhZWZmZiwgMHgzMDdiNjNlMCwKLQkweDg2MWNhMDNiLCAweDc0ZDE0YmUwLCAweGUwYzJkNzFjLCAweDAyNDAzZWFjLCAweDc4MWY1MTQzLCAweDdmMjhiMmM0LAotCTB4Zjc5NzBlNzksIDB4OWFkODNlMTcsIDB4ZWMyYzc4MGYsIDB4OGVkNDk1MWEsIDB4ZmEzMDcyN2EsIDB4NmY1Y2Q1OTMsCi0JMHg0OWFiZjY5YywgMHhiNzRmNGZhMCwgMHg3OGJmYTBlNCwgMHg4YWU4YmY3YSwgMHgzNGY3ZmY5NywgMHgyMDlmZWZhNywKLQkweGFlY2I0NjNlLCAweGE0NGVhNDhkLCAweGJhNDVkNmZjLCAweDZmZjA2ZWQxLCAweDcxNGQ5MWI0LCAweGNiYTZhZmY2LAotCTB4NWY3ZTJmNGMsIDB4MDFmZDAwN2MsIDB4ZGJkYjRmMWYsIDB4ZDhlMmNhNGIsIDB4ZjlmMmI3YjEsIDB4MjVmM2Q4Y2UsCi0JMHhiNzE3OGZhZSwgMHhiZDgwYjdhYywgMHg4YjQ2ZjE3NCwgMHg0MWJmZWZjMSwgMHg0NzlkN2NlNiwgMHg2N2FmODBmMiwKLQkweGM2YmJiMWVjLCAweDhiZjcxZTAwLCAweDU2NDllNDFhLCAweGJjNTI5Y2I3LCAweGYzNDJmYzcxLCAweGIwN2ZhMWZjLAotCTB4ZGQ5M2VlYjcsIDB4Y2EyZjRmYzgsIDB4MGYwMWRiYzEsIDB4MTFiNDllMmYsIDB4YTFkYjJmZDgsIDB4MDc4YTJkZDQsCi0JMHg4MzBhOWRlNywgMHg0NjYxYzc3MywgMHgyZjBhMWY5NywgMHg1MGNlNWQ4NSwgMHgzNjczYzQxMSwgMHg1OGRiZTQxMiwKLQkweGYzZTQxMzNhLCAweGIwMjQwZGQzLCAweDJkZTgxYjMyLCAweGMxMjM3YWIyLCAweGNhMGE1N2JjLCAweDc3YzMyN2FmLAotCTB4YTM1ZWQzNWYsIDB4ZTZjMmYzZTQsIDB4ZTgxMjdmMmQsIDB4MDQ1YjRiN2IsIDB4MmZiNjg1YjcsIDB4ZTAxNWRhOTUsCi0JMHg2NGU2ZWE5NywgMHg2OGQ4ZjQxMSwgMHg3NGZmY2Y1NSwgMHgxNDdkNzI1ZiwgMHg0YjI3ZGRmZiwgMHgxM2JkOTc4OCwKLQkweGYwMDliYzVmLCAweDIxNDNhNjcyLCAweDc5ZWZjZmIwLCAweDY4ZjMxYmE5LCAweDIzZTRiNGNmLCAweGFmMzRmNWJmLAotCTB4YjJlNDdkZTcsIDB4NDNmNDEyYTksIDB4M2E2NjVmMTAsIDB4MzA0YzZhOGUsIDB4N2IxNTI3ZDQsIDB4MzM1YzAwMDcsCi0JMHhiNWNiZWRhYywgMHgyYmI3NzgzOCwgMHhhMWZkZWVjYywgMHhiMmI3YjNlNCwgMHg5NmZiZjJjZiwgMHhiMTVlYmYyZSwKLQkweGZlZWY4YTJjLCAweGZkYmYyYjFlLCAweGIyZWZjOWUzLCAweDk4N2Y2YTk1LCAweDljZDZiMmY3LCAweDY1Y2Y4MGZlLAotCTB4YzVmYjkxN2YsIDB4N2Q2N2FiZTMsIDB4Y2NkYzJmY2MsIDB4OWFiYjY1ZjMsIDB4MWE1ZWZjYTgsIDB4NTQ0ZGJmMjUsCi0JMHgwMWM0ZTM3ZSwgMHhlNTgxZmE1ZiwgMHhkZjkwNTlmNywgMHgyYmJkZjAzOCwgMHhmMmU4ZmEzMywgMHgwODcyZGI5YiwKLQkweGM5YjczN2U1LCAweDc5MzNjODYyLCAweDdkNzZlNjU1LCAweGY0MmJmMjhmLCAweGVhMGQzZWJiLCAweGEzODhlNmIyLAotCTB4MTAwZjAxYWYsIDB4ZTNjY2RjYzcsIDB4YzgwZTMwZmMsIDB4NzFiOGE0YjEsIDB4NjM5NTdkOWUsIDB4OGU1OWJmZGYsCi0JMHg5ODIzNmQ5NywgMHg2ZjRiMTMxNywgMHg3NmNiYzcyNiwgMHg4MDE2Mzk1MCwgMHg5NzhlNGNlZSwgMHhjZTM5NTJiNSwKLQkweDExZGY5NThlLCAweGJlY2JmMjMxLCAweGRmNjIxYTVmLCAweGZmNjczNzU3LCAweDVlM2E2NmVlLCAweDZjZDY0NzllLAotCTB4ODhiY2ZkZjQsIDB4OTY4ZDhmM2MsIDB4NzA5MTQ5NjcsIDB4YmNmMjMxYmUsIDB4YmNmMjZmYmYsIDB4OTUzM2NiOGQsCi0JMHgxYzVhYTFkMywgMHhjNjJkNmFiYSwgMHgyNzE3YWNmYywgMHgxZTdjNmQxYywgMHgyMjZmZjJmOCwgMHg1YmFmNDlmYSwKLQkweGVhZmI1ZDk4LCAweDgwNjNhMzg0LCAweDc4NzBhNjJmLCAweDc0M2E3MDg2LCAweDdmZDhmY2ZhLCAweGQzNDdjNGM5LAotCTB4NWY4YTRlNDEsIDB4ZTQyZGZiYWEsIDB4MjhkOTJmMzUsIDB4NGI4N2QwMTMsIDB4MWZhMTBlOWIsIDB4ZThhYjhlNmEsCi0JMHhiZTM5OTU3NiwgMHg3MzExZWJhMiwgMHg4MzUxNjU5YywgMHhjN2M3OWViMSwgMHgxMWRiMTcyZiwgMHhhODlhZjI1ZSwKLQkweDc3YzM4YTZkLCAweGI5YzEzZDc5LCAweGU3MWRlZWJmLCAweGJkOWMwODk4LCAweDc5ZjQ3ZGM1LCAweDNlOTcwNmY0LAotCTB4OTcwYTMxYWYsIDB4MWYyNGQxOTcsIDB4OGYxNDg5ZTIsIDB4YmZmZTJmMjgsIDB4MmE4NzE4OGEsIDB4OTBjMGJjMmIsCi0JMHhlYjkxM2ZlZiwgMHhjMmJhZmNjOSwgMHg5NDRiMDg2MiwgMHhmODBlM2U0MywgMHhlYzc3ZjU1MSwgMHhiMWIyN2Q4MywKLQkweDMwM2NkNTA3LCAweGI0NGQyN2E3LCAweDdhOWZjMTdhLCAweGYyOGRkZWRhLCAweDA5NjVkM2FjLCAweGJjMGRjYmE3LAotCTB4ZDQwNzE3OWYsIDB4NTViZjAxMTQsIDB4NTg2ZTBiMzcsIDB4NWY0M2FhNzcsIDB4YmQ4NmI5ZTIsIDB4MDI1MTdlOGYsCi0JMHg1NWIwYjQ3YywgMHgwZjkxNWI3MCwgMHhlN2UwMjk0ZiwgMHgxN2Y1ZDA5NSwgMHhlNWJmMjlmOCwgMHgwYmJkZGExNCwKLQkweGY4NDUwYjViLCAweDAxMGVlMTdlLCAweGMzN2JkMjEzLCAweGI2ZTk1ZjRmLCAweDU5ZTNkMzg4LCAweDcwMDlkZjgwLAotCTB4OGQ3NWIzNzYsIDB4NTdiN2E3YzMsIDB4ZmMwMzdlNGIsIDB4NWI5ZDhmYzUsIDB4NTZlMGM1OWQsIDB4ZGUwNDZhYWQsCi0JMHhlNzc4NjFiMSwgMHgzZWFmMzg4OCwgMHhiZGUzYWJjMiwgMHg5ODk3NzgzNywgMHhlNGRhZjhlOCwgMHgyMjBmMTgzMywKLQkweGYyN2RjOTJkLCAweDVjNmRiZTZiLCAweGExYjQ5YWFhLCAweGE3YzdhNjdmLCAweGYzYmQxN2VlLCAweDk1MWI4ODY0LAotCTB4OGUzMTkyMGEsIDB4ZWRmMThkZGIsIDB4OGZmZmEwMWYsIDB4ZjgzZmQ3Y2UsIDB4NmViYTIxMTcsIDB4MDlmMWI5ZmQsCi0JMHg2N2M5ZjdjNCwgMHhiYTAwY2QwZSwgMHgyNDUxN2EyYywgMHhjZTk3NGEzNiwgMHhlMTA5MTc0NiwgMHgwMTQwNDgzZSwKLQkweDg5MzU1NDNhLCAweDQ4Zjc4YzFlLCAweDVjZWI4MmExLCAweDY1YThmOGQxLCAweDQyZWNkOGY4LCAweGQ1YjU1ODNkLAotCTB4YmY0ZTk4MWEsIDB4NDlmZWRhYWYsIDB4OWQzM2Q4MmUsIDB4Y2JlZjc1NzcsIDB4MTlmZmJmMDIsIDB4Zjg5OGU1MDEsCi0JMHgxZjYxNzNkYiwgMHhmYjYyNGFhOCwgMHg2ZWZjNjYzYiwgMHhkOGZhZDg1NCwgMHgxYjMxYzNiMSwgMHg2MDY4NDFlNCwKLQkweDgyYWE4YmU3LCAweDk0NmI2NGIzLCAweDQ1N2JmYzNkLCAweDdiZTk3MWM2LCAweDdmZTZkNzk4LCAweDMwYmNjMDVhLAotCTB4NWNmYTJmODAsIDB4ZDM2ZjllOGIsIDB4NGJmMzM0ZjEsIDB4MDBlNTlhYWEsIDB4NmFhYTUzOWMsIDB4NzEwOWQyZDgsCi0JMHg1NjgzYWE5MiwgMHgxYmFhZDc1YywgMHhiNzVjNjE0ZSwgMHhhOGIzZjM3OCwgMHg0NTliYWI3ZiwgMHhlMzFjOWY4MywKLQkweDIxODgzNjlmLCAweDRkNTdmODJiLCAweDRlY2UzMDRiLCAweDFlYjA4N2ViLCAweGU5YTcxZjhjLCAweGI0NWE4ZmNkLAotCTB4MWZiYjc1YjksIDB4YTdmOWU0ZTQsIDB4NTI5Y2YxMTIsIDB4ZjQ0NGE2ZGIsIDB4MWZjZTFiNTMsIDB4NDdmMThhMWYsCi0JMHhkNzllZjc4MywgMHhmOWMxM2QxZiwgMHgzMThhNmZlMywgMHg1MjFhNDc5ZSwgMHhmMGE1NGZkMSwgMHhiMWM1OTQxNSwKLQkweGZmN2NjM2Q3LCAweDgwN2ZlN2VjLCAweGQ2Yzc2OTc4LCAweGYwMDBmZWNmLCAweDk5ZDdmZTJlLCAweGUyODJmYzNmLAotCTB4YmJiMmVjOTEsIDB4M2Y1NWZmNDEsIDB4OWJjNjM2ZjMsIDB4NzI4ZWVmZjQsIDB4ZjRmOWQ1YmQsIDB4ZWJhNzE4NTMsCi0JMHg0MWFhY2Y3YywgMHg0N2FkOWQ2ZiwgMHhhYWJjNDMwNywgMHhlOTk3Y2I3MywgMHg2ZjJjOWY2MCwgMHhkNmY2ODY5ZCwKLQkweGZkYzU2ZGYyLCAweDQwZmIxYzQ5LCAweDAzNmY4MTJmLCAweDlhMTM4ODdkLCAweDY5YjdiNWU5LCAweGYzODA2MGVmLAotCTB4NmMzN2E1MjQsIDB4MGJlMzg2MDksIDB4NWUyYzI1YzEsIDB4NDJiOGYyYTMsIDB4NmM3OGZjNjMsIDB4ZTlhMTFjNGMsCi0JMHg4Y2E2NmJiYSwgMHg1NGQ2NTI4MSwgMHhjMjc4ODdkMiwgMHg5NzhlOTQ1YiwgMHg4ZDdlODFmNiwgMHg4OWVmNmZjYywKLQkweDFmZTEyNzdlLCAweGQ1YjI0ZTk0LCAweDliY2ZiZjQ4LCAweDMxZjFmZGU2LCAweGVkNGE2YjY4LCAweGVhMTA5ZTMxLAotCTB4NzhmNGRlMDMsIDB4Yzc4YTFiZWYsIDB4ZGFmOTA1NmQsIDB4ZGY4YzI3ZmEsIDB4ZDNhNmRkMDAsIDB4ZmIzZTc2ODksCi0JMHg5Mzg4NjBmOSwgMHg2ZmJiOTMxZiwgMHg1NmQ1N2RjNSwgMHg1Nzk3ZWUyYiwgMHhmMjhiYmViNSwgMHg3NWVkYjlkMywKLQkweDhmMDkzN2I0LCAweGYwOTI3NmJiLCAweGYxOTM4YjFmLCAweDhkZWFkM2RjLCAweGUwODcxNjJlLCAweDg1Mzg4N2Y4LAotCTB4NzljZjg4OWEsIDB4YjFmMTgyM2MsIDB4MjllOGE3MWUsIDB4NzU4NTcxM2UsIDB4NjUyM2NmMjgsIDB4MWIyNTk0NzEsCi0JMHgyOTg4NTdkZiwgMHg4ZjhjMjNlZSwgMHhkMTNkZjNhYywgMHgxYjgzYzc0OSwgMHgzYTJlMzBmMCwgMHgwZTNmMTZkZSwKLQkweDcyY2I4ZTE0LCAweDIwZmQwMTdhLCAweGE3OGUxNmNlLCAweDg4NDBmYWQxLCAweDc3ODQwNGFmLCAweGQwN2QxYzQ5LAotCTB4ZTljNTllYjksIDB4ZmU2MzY1M2EsIDB4MmMzZTg0NDksIDB4YTI2NDU2ZmUsIDB4ZGVjZjNlYjMsIDB4ZTBkZWE3ZDYsCi0JMHhjOWY4YjZmZiwgMHg2Yzc5YzU4NywgMHhiZTNhOWUyYywgMHhlN2M3YWY4ZSwgMHhiN2VmODU1OSwgMHg5ODIxNWE1ZiwKLQkweDgwMmE2ZmY3LCAweDFkMzQ5NzFmLCAweDUxM2YyMDUyLCAweGY5ZjRjNzVmLCAweGJjM2I3MDc2LCAweGYzMTExOWUzLAotCTB4ZjcwNzU3NmIsIDB4ZWIzNzFlYTIsIDB4ZGU3MGE1OGIsIDB4M2ZiYzBlMjEsIDB4NmQyZWYwZTMsIDB4Yzc0NGViNjYsCi0JMHg0OWMwNTc1NiwgMHhiM2Q4ZTlmYiwgMHg2OTc5ZjkwMywgMHg0ZmM1MjFlMywgMHhmMGQ3ZGJmYiwgMHg0NmZjYzJiYywKLQkweDRlYjAzZjI2LCAweGVmZTBhMjA0LCAweDJlNzc2ZTc4LCAweGJiMzIyZjhiLCAweGRkY2UzY2RmLCAweGQzYTc5ZTU2LAotCTB4ZWE5YzdmMTIsIDB4NzE4NjUzYzYsIDB4MGE4M2Y5MTYsIDB4ZmYzZTk3Y2IsIDB4Y2YyNDI3NzgsIDB4NDRlZmU4MmMsCi0JMHg1ZjIwNGM5YiwgMHgyYzUwNDRmMiwgMHg1OTNmYjc4ZCwgMHhkYzc5OTU2OSwgMHg3NDk1OGViYSwgMHgyNWYzYzRiZCwKLQkweDQ0OWU3NjJlLCAweGRlMzA1MTRjLCAweGZlMzVkY2IxLCAweDk0MWE1MjYwLCAweDUwN2UwYThhLCAweDVmYjY0YWVkLAotCTB4NWE5ZmZiNWIsIDB4MzZiYmQwMDYsIDB4Yzc4YzA2ZjksIDB4ZWJmMDk5ZDYsIDB4YzIxNzczNGUsIDB4ZDRmNzEzMzksCi0JMHhhZWMwMzFiMiwgMHhlYzkzN2Q2NiwgMHg1ZmUwMThiMSwgMHhhZmVkMmFlZSwgMHhkMTU3Mzg1MiwgMHgyNzVjZTA3ZSwKLQkweGVmM2MzNDkxLCAweDk0OTYyNjIyLCAweGI3NDQ3Y2MyLCAweDEzOGY2ZGM1LCAweDY1OWQ5MzA3LCAweDE3ODUxYmM0LAotCTB4OWYzYzZkZDksIDB4NTdjZWJlNDIsIDB4OWY3ZDFmYTEsIDB4NmRhZGIxNzUsIDB4M2RiYTM2MWYsIDB4YzQ5NWYwMDIsCi0JMHhhZjBiZDVmNywgMHhiYmJjZTM3NywgMHg1ODBkMDUxYSwgMHhkNTYzYWE5YywgMHgwNWYyY2U5ZCwgMHhkYWU4ZGQ2MCwKLQkweDJlNGI5NDlhLCAweDg3ODkwZmM1LCAweGZlMGUyN2FlLCAweGJkZGM2ODVjLCAweGFhZDFmNDFiLCAweGE2NDllMjQ0LAotCTB4YWFiMTQ2NzIsIDB4NGU3MDM5OGEsIDB4Yzg0ZGI0NjcsIDB4ZjUzZDNlMDEsIDB4NWZiNDhiZWEsIDB4NjA0ODhiN2IsCi0JMHhhOWNiYmY4YiwgMHg5Mjc5MGJlNywgMHhlNDFjY2U0MSwgMHgwMTBiY2M3ZSwgMHgzNTI2ZmU1NiwgMHg1ZjM5YTcwMiwKLQkweGU5MmJjMDg0LCAweGQzYmM3MzkxLCAweDM5YzYyNzQ0LCAweGQxMTNhZjRlLCAweGM1YzkxNTlmLCAweGZjY2M5YmJmLAotCTB4ZjgwMDEyNzMsIDB4ODhiMjdhZjksIDB4NGExYTc5YzMsIDB4YzE0MmJmNzgsIDB4N2YwNWRhM2MsIDB4NDQyMGJlNzksCi0JMHhmMWEyMWQxOCwgMHhmNDZhNWE5NSwgMHg4OWVkZWIxNywgMHg0MzZmYjBiOSwgMHhjODM2OWVmYywgMHhmZGUwYWU0YiwKLQkweDllMzMyYmY1LCAweGU3ZTJhMWYzLCAweGNmNTJmYjA3LCAweDdlNmNmZmQzLCAweDdmZDA3ZWM5LCAweGE4ZjlkZTE1LAotCTB4MzZjZmZiZDcsIDB4ZGIzMjAzOWUsIDB4ZTQyZjA4ZWYsIDB4N2JiOTUwMGQsIDB4ZTdiNTg4NGMsIDB4NWMxZTViMmIsCi0JMHhiMWUwZjkwZCwgMHgwNDY0ZjNmYiwgMHg5MTU0MWJlNCwgMHhhMWYyMGQwNCwgMHgwNzdkZjZjZCwgMHhmMWM4NGRlOCwKLQkweGUwMjcxMjcxLCAweGQ5N2Q2N2IxLCAweDg3ZGI3ZTBiLCAweDk4ZjI2ZWZmLCAweDBiNTdlMmYzLCAweDJlOGRmYmMxLAotCTB4ZjA1OGRmZGMsIDB4M2Y1MWRiOTcsIDB4Zjg4YzMzNTksIDB4ZmM0NmFiYjUsIDB4ZjE5ODQ2M2EsIDB4NGJiM2M0NjgsCi0JMHhiMjhkZTIzMywgMHg3ODdjZTA3OSwgMHgzYzZmMWE0ZSwgMHhiM2M2NjU1ZiwgMHgwZTFkYTg0NCwgMHhkMDQwNGFmNiwKLQkweGY5MzFmZTgwLCAweDExZWJjZDBmLCAweGE2ZmNkZWVlLCAweDhmNWYxYjM0LCAweDVmZTk1ZTM4LCAweGE5OWQyZDk5LAotCTB4NTMzYjgwNmMsIDB4OTg1Y2ExMGEsIDB4MTljYjI4ZTUsIDB4ODNkZmUwMTIsIDB4ZjEyYjAyZDIsIDB4N2U4NWNkMmIsCi0JMHg4ZjlmMDY0OSwgMHg3M2JlYzE1MCwgMHgwMDg5MWM4MCwgMHgwNDcyODZhZiwgMHhjZjQwMjgyNywgMHg2ZTA3YzgzYiwKLQkweDdjODVhN2EwLCAweGQ5MTliZTQyLCAweDJjZWYzZDMzLCAweDVjZDBlOTdmLCAweGUwM2FkNWZhLCAweGFlNTE0YmRmLAotCTB4MTRhOTM5ZDgsIDB4MDZjZGE4MTIsIDB4YjBkY2Q1MzksIDB4MzY3ZDA3NmUsIDB4ZjM4MjQyYjUsIDB4MThhZDQ0ZTYsCi0JMHhkZGNjZTcwNiwgMHhjNzkwM2U1OCwgMHg0NTFhZWZkZSwgMHgxODJjNWYzMCwgMHhmYTBlOWIzYSwgMHgyOTFlN2FhOSwKLQkweDgwZjdmZDAzLCAweGZjMDMzZGQyLCAweGNjZWRmYmRiLCAweGFlYzhiOTRmLCAweGE1ZmYzZWEwLCAweDljYWZkZjVkLAotCTB4YTljYjk3ZmEsIDB4YzhiNTc2M2MsIDB4ZWJjMzljMmEsIDB4YmI2NGQ5NmEsIDB4MjJjZGVhMDAsIDB4NGVhZWY3OWUsCi0JMHhjNjA4YmJhZSwgMHgxOTkxNmNlZiwgMHhjMGI2MTU1YywgMHhiN2M3ZTAwNSwgMHg3NDFlYjhjYSwgMHhmM2M2NGM1NiwKLQkweGFkYmI2MTJjLCAweDc2MTNlZDg1LCAweDc4OTI3Y2I1LCAweGVmM2U5NDdiLCAweDIyZjg3ZTZjLCAweDZhM2MzMzg4LAotCTB4NzkzZmJmODksIDB4OWRmMmNkYmQsIDB4ZmFmMGQ0ZmMsIDB4M2Y5MzE0ZGIsIDB4ZTU4ZGJkNzEsIDB4OTQzMDNjNGYsCi0JMHhmOTY5NjNjZSwgMHgzMzBlYmU2OSwgMHhlOWM0OTg3OSwgMHhhYmZjZDJmYywgMHg1YWRiZmU3MCwgMHhlNzRmM2ZhOCwKLQkweGZjZGUyMjUxLCAweDNjZTg0YmEzLCAweDMxMmRiYzI3LCAweGQzM2M0YWZkLCAweGEzYjNhNGU3LCAweDBlZmVmMDNjLAotCTB4M2UwMDY1YTIsIDB4MDIyMTRjMjYsIDB4Zjc4NGYzYzgsIDB4OGZlYmVlMDgsIDB4N2U4Zjk5YTksIDB4OTQ4OThiZDUsCi0JMHg0YzVmMjljZiwgMHgwYjdjYTE2ZCwgMHg4OWMzYWU3YSwgMHgzNmQ4ZmJmNiwgMHhjOTk3YzBjOSwgMHhjMTdiYmQ1MywKLQkweDkwNzcxY2NmLCAweDc3MWRiZWEwLCAweDllM2VkOGQwLCAweGE3MWM0NDA0LCAweGQyN2NmOGRkLCAweGM2YmQ2MzMxLAotCTB4MTIzM2Y3YzYsIDB4ZjdmMDNhNDksIDB4ODQ0NWFmZGEsIDB4Njg5YmFiYWIsIDB4YmI3ZWQxNzcsIDB4ZmRlMDA2MmEsCi0JMHhlMTY3NWQwMiwgMHhiZjJkMTQ5NCwgMHhhZGUzNGIxNiwgMHg4YzZkMmJmMywgMHgwODU1MWUyZiwgMHhjZThmMmZhZSwKLQkweGMxM2VlMjc3LCAweDk4NTVmOTllLCAweGNmYzVmZDI3LCAweDlkZTI0M2JkLCAweDRiZDI4YmJiLCAweGRkZmY2YzQ5LAotCTB4YTc4MTQ0OTMsIDB4NjA0YWJkN2MsIDB4OGNjYmFlZjgsIDB4NGJkMjk3ZGUsIDB4YmU3NThmOWQsIDB4NzMzOWY5ZDYsCi0JMHg1ZTM3ODI3ZSwgMHhjZWMzOGFkZSwgMHhmOWEyOWRlYywgMHhmYzA1MDQyMywgMHgwMTAyNWRiMiwgMHhlNWRlNzZiYywKLQkweDliNWZlNDM1LCAweDJiYjkzZjRiLCAweDZlYTllMDBiLCAweGI2NzY4MzNlLCAweDFlN2UyNWFkLCAweDIyNWIwNmQ0LAotCTB4ZjJlZWZiZjMsIDB4OGQ3Yzg0YWYsIDB4MDRhMTUyOWYsIDB4YmY3M2Q4ZmQsIDB4NWFhZmQxNmIsIDB4ODg1MzQxMDMsCi0JMHhlNmVhZDllYiwgMHg3OWE3YjllMCwgMHhlMjAxYjIzNiwgMHhlNjVkNTJiMCwgMHhmYmUwMmViNSwgMHg1MzU3MmJlMiwKLQkweGIzMmIxZjc4LCAweDk1MWY5ZDIwLCAweGJmZGY4NDM1LCAweDJmOGMxMDg0LCAweDA3N2U0YzQ4LCAweGEzZWIyMGNlLAotCTB4ZGEzNTdmY2YsIDB4YjQ2ZDliMGEsIDB4MWI5YjY2ZGYsIDB4NmFmNTRmZmIsIDB4ZmRhZmMwMDIsIDB4YzExMjdmZjMsCi0JMHg2NzNhZTk5ZSwgMHhlMDBlM2E0NSwgMHhkZGZlOGZmZSwgMHhhZjY2MzY5YiwgMHg2Y2Y3NjJkZCwgMHg5NTI3ZmUwNSwKLQkweDlhMWYyODY5LCAweDQ4YWQ1MTM3LCAweDE0YTA3Mzg1LCAweDRmZTI3MWVmLCAweGUyOWE1ZGJhLCAweGMyOGRiYWE1LAotCTB4ZTBiNGUyOTMsIDB4NzhmMTEwYmUsIDB4OTc5ZWI3NTQsIDB4NTE3YmY4NDAsIDB4MDI0MjQwZjIsIDB4NWQwNWJjODEsCi0JMHg0MjJkMGE5ZiwgMHg3ZmY5NDVjOCwgMHgwMjE5Y2Q4YywgMHg5MmE1MjMzZiwgMHg2MDgyOWJjZSwgMHg1ZmQ2MzYyNywKLQkweDNlMTFkNDliLCAweDkwNzk4NmM3LCAweDIwMGIyZjk0LCAweGRlNjA5ZGY5LCAweDQxNWEyNDAzLCAweGQ1OWViYWZmLAotCTB4NjRhYWYzZjUsIDB4ZDU2NmZhODIsIDB4OTZhMDUyODMsIDB4NmE0ZWIzZjYsIDB4MjRmYzQzYjcsIDB4YzExNmEzZGIsCi0JMHhhNDhhNzM1NiwgMHg0MWJhZjllMiwgMHgxZDFlNGM5NSwgMHg4NzI3OGYzOSwgMHhlYzJhMTVlZCwgMHhkZTI1ZmZhMywKLQkweGVmOGUyZjE2LCAweDhiNzU3Y2U2LCAweGUwM2VmYmRkLCAweGY3N2Y3NzNiLCAweDM0NmIzMDFlLCAweDdiNGYxYjNiLAotCTB4NzlmNjg2ZDksIDB4M2I3MDZmNTgsIDB4YmJhZjg0YWMsIDB4ZmI2NTNlMTMsIDB4Mzk3NDI0YzYsIDB4NzFlODYzZTYsCi0JMHhhMGRlYjM3YSwgMHgwOGE2ZjA3MiwgMHg0NGE5ZjU3MiwgMHg4Nzk0M2NmMCwgMHg0ZjQwYWZmZSwgMHgxZmQyODhjOSwKLQkweDY4MmM5ZDdjLCAweGI2OGJkOWFlLCAweDJmNmEzODliLCAweDU3YTRlM2YwLCAweDhjNzNlY2YwLCAweGMwNzcxOTFlLAotCTB4N2VmMDBiNWIsIDB4ZTY2MWZkNTcsIDB4MmEyMWQxODcsIDB4YTMzZTljOGYsIDB4ZWMxNzM4NTQsIDB4ZmRhMWQ3MGUsCi0JMHg5MzdkMjY1ZiwgMHgzZmE2M2U1NiwgMHhjZjljYjVkYSwgMHhlNWQ1ZjhjYywgMHg3OWVmMmNkYSwgMHg1NmJkYjQyYiwKLQkweDQ4ODAzNWVjLCAweDg0NDM4ZjMwLCAweDBlNmExYzA4LCAweDIyMDNhM2U4LCAweDg1NWRmN2Q4LCAweDVjMjg1Zjk0LAotCTB4MjhlZTQxMWIsIDB4MGQ5ZjI2YmYsIDB4YjM3YzA5NWMsIDB4M2IwYWU1YjYsIDB4NWU3N2M3YzgsIDB4ZWJmNDQyM2YsCi0JMHg3ZmUzYjhhOCwgMHg3NjgxZGU4OCwgMHgwODk4M2Y5NiwgMHhmYmJhNTg3OCwgMHg0MjNmNWYyYywgMHg1ZDMwZTc0OCwKLQkweGM3NDQ3Y2E5LCAweDM3YmU3NDQzLCAweDE3MmViOWYzLCAweDM5NDA3MGI1LCAweDAwOWI5ZDg3LCAweDEwNDI4OGZhLAotCTB4ZWIyNTZiMDksIDB4ZThhNzYwZGMsIDB4ZDg2ZDc1ZjYsIDB4N2NjNjRkOWUsIDB4MzY2ZWU1ZWYsIDB4ZGJhY2FkNWUsCi0JMHhlNjBkOWFlNSwgMHhkNDU1ZGNiYiwgMHgyZWZiN2NmZiwgMHhmZmE4ZTdkNSwgMHg1ZDJmOTUxMiwgMHg3ZmEzNzUyZCwKLQkweDIxNGU3ZDU2LCAweDgxZWZkNDgxLCAweDdhM2ExNmFmLCAweDQ1NWYwMWJhLCAweGY4YjE3ZWY2LCAweGQ0NzIwODFhLAotCTB4ZjljYmZmZWYsIDB4Y2Y5ZTZjZGMsIDB4M2U2NDZhM2QsIDB4YzVmNzg4OTMsIDB4MGExN2FhNzYsIDB4NjRjZmFjZWUsCi0JMHhjYWRlNDE3YywgMHg3ZTBiZTY4OCwgMHhmOTI3YjFkZSwgMHgxYmU1NGYxZSwgMHg3OTE4YzdkYywgMHg4NGYxYzkzNiwKLQkweDk2YzcyYTE2LCAweGU0ZDYzOTU4LCAweDQ4MjdiYzMyLCAweGJlYTA3NTZiLCAweDU5ZjVjYjMzLCAweDA3NmFhZjNlLAotCTB4YTI0ZGZiYzMsIDB4OWYzMDY3ZjcsIDB4NjBmNzRiNmEsIDB4OTU1Y2JiZTAsIDB4YzBhNzRlYTQsIDB4ZTg4YjM2ZTYsCi0JMHg1NGI2OTAwNywgMHhiYjEyM2FjMywgMHhkYzU5ZmJiZSwgMHg3YTA3YWY4YSwgMHhhNjY4NTI5YywgMHhiM2U3NGQ3YywKLQkweDBiYmRlZWM5LCAweGNkZDZhNWU0LCAweDU4Mzg0YWZjLCAweGEzNzA3NjA0LCAweDNjMzc3YmNkLCAweDEyZDg1MDc3LAotCTB4ODhjNzVjZTAsIDB4ODM4YjM2NTAsIDB4ZDQ3MjBjODQsIDB4NGMzOGRjOTMsIDB4NDkwYzExNzIsIDB4ZTlmOTNlYjgsCi0JMHhkMDgxNzRmYSwgMHhmNmM1M2MzMywgMHhkNTJmMDY2NCwgMHgwYzdmNjAxNiwgMHhiMDZjMjAyYywgMHhmOWYzMDRhNSwKLQkweGYzYjJlNjA2LCAweGQ4ZjMwM2Y4LCAweGQ4NGY1OWZkLCAweDkxYjliYWQ5LCAweGQ5N2EwN2FmLCAweDA3NWIyYjY4LAotCTB4ZTIyNTkzNzgsIDB4Nzc3ZGU2YjcsIDB4ODg1NDAxYjgsIDB4N2JiMjZlMGIsIDB4NmNmZTgzMWUsIDB4NDc5YzFlYTUsCi0JMHgwMjY4OWI5NiwgMHgyOTJjYTNlNSwgMHg1M2ZlYzAyOCwgMHg2MDU1NjJjYSwgMHhkNmMyNDBmMSwgMHg3ZjY5MjgxMywKLQkweDQyZDVkMzU5LCAweDIwYjI4ZjU4LCAweDA3ZGUwMDk3LCAweDljOGUyNjNiLCAweGVmZTVkYWI0LCAweDhlNmFjNzE3LAotCTB4Yjk1YmEzYjEsIDB4ZTg1M2VjMWMsIDB4YjNhNzUzN2MsIDB4M2M3MGU0M2MsIDB4ZjgwZjgyODYsIDB4ODBkZDc0ZWQsCi0JMHg5Y2ZjZWQ5MywgMHg5M2Y4MzVlNSwgMHg3ZWNkOWUxOSwgMHhlNjBjMTAxNSwgMHhkZGZhZjEyNSwgMHgyOWVjOTEwYSwKLQkweDJkZjhmN2U4LCAweDg2YzU5ZGYwLCAweDY4ODM4ZjdlLCAweDA3OGJkMDQxLCAweGNlNWNlY2VkLCAweDAzNWI0MTZhLAotCTB4ZGQ0OGRmZjUsIDB4NDBiN2I4MzYsIDB4MjYwN2ViZTcsIDB4ZjQ0OWFiNWYsIDB4YTcyOWM0OTUsIDB4YTUxN2MxNzMsCi0JMHhmMDI2ZmU3YywgMHhkM2U0ZTc1YiwgMHgwY2UxNTdjMywgMHg3ZTMzMDdiYSwgMHhiYzg2ODhmMywgMHhjZDZlOWQ0NywKLQkweDc2NmU4MWIyLCAweGViNDQ3Mzg4LCAweDdlODI5NzYxLCAweGEwOTBhNzdiLCAweGI5ZDM5ZjgxLCAweDBhNzA2MDUwLAotCTB4MmExNzllMzYsIDB4NWMyZmUzMTksIDB4ZmRmYWU5Y2YsIDB4ZTliY2Q4MmIsIDB4OGZmMWYzMDcsIDB4NmM1NjdiYzYsCi0JMHhkMWUwMGQ5YSwgMHgxYjlmMGZlMSwgMHgzMWViOWQzMiwgMHhjOGM5ZmI5ZiwgMHgzMjYzYzcwOSwgMHg0Y2FiNGYzMSwKLQkweGM4NTJiYjgxLCAweGRhMDcxNmU5LCAweDRjODlkNTU1LCAweGQwZmNjZGFlLCAweDc5YzI5NDFmLCAweDdjNTBjYmNlLAotCTB4ZWRmNDA5N2QsIDB4ODMyNGQ3MmYsIDB4Y2I3ZmVkMWUsIDB4YWZhMDQ0ZTEsIDB4ODI1ZDBmMTksIDB4ZDgzZWY0N2YsCi0JMHgxYzliZmFiNywgMHgyZjViN2Y3NywgMHg5NDA2MzIzMywgMHg5MTk5OWQ4MywgMHhmZWE1ODE5OSwgMHhjNTI5ZGViYywKLQkweDI2YTVlZjhkLCAweDZiYjhjZjdjLCAweDQ2ZGJlNTgwLCAweDAyNmE2YmYxLCAweGY3YTRlZmVkLCAweDI4M2M3NzhkLAotCTB4ZjcxOGRkZWUsIDB4Zjg2MDRmYWUsIDB4M2M3NDU3YWUsIDB4NjcyMDQ5YWEsIDB4YzQ5NmJhOTEsIDB4YjMyNzc5Y2UsCi0JMHg4Y2RjMWM3YiwgMHhiNjdkNmI5ZSwgMHg3ZThhNDk3MiwgMHg0Njc2ODNjZiwgMHhmMmI5ZTIzZiwgMHg2YjAyNTA0NiwKLQkweGY5MDliMjY1LCAweGY0NjVjNTlhLCAweGU4YWE1YzdjLCAweDE5OTJmZDE4LCAweDhkZjViZjVjLCAweGZmN2Q4NzJlLAotCTB4OWM2NDg0ZGMsIDB4ZDNiNWQ5ZWYsIDB4NzI3NGJjNzAsIDB4YzUzODdkOTcsIDB4OGIzMmZjZWIsIDB4OTM5YWYxMDYsCi0JMHgwODllZmY3MywgMHg2NmU2ZmY0NywgMHgzYzEwMTViNSwgMHgxYWIzNWE2MiwgMHgxNmZmYWVmYywgMHg5NDA5YjliZCwKLQkweDU0ZjU2OTRlLCAweDNlMzJhNTExLCAweDc0YTNiOTAwLCAweDEzZjcxMmI5LCAweGU2ZTI1OGU3LCAweDYwNGQ4ZGRmLAotCTB4NzZhN2Y1N2UsIDB4OTE5YjhlMzcsIDB4MjJiY2I4MzEsIDB4MTAzZWJhM2YsIDB4MjNmM2E0ZTksIDB4OGFjY2MzOTUsCi0JMHg2MTczOTEzMSwgMHgyNGE2M2Y5NCwgMHgyZWE3OTFjNCwgMHg3ZWMzMzQ5OSwgMHhkMzBmYWU4MCwgMHg3ZDc1ZmUzOCwKLQkweDFhNDNjYmFjLCAweGVmZWMxOWM4LCAweGE4ZmQ1MTk1LCAweDdmMjg3M2QzLCAweDkwZTMxZDM1LCAweGZjYjQyN2Y4LAotCTB4ZjNiMDRiZjksIDB4YTExNGE3MTMsIDB4YmZmMmEzYmUsIDB4MDQ2NWU1MDYsIDB4ZDA3NmRmZDMsIDB4YzdmMTUxYTcsCi0JMHgwNzc3ZDZhZSwgMHg4N2RlYmVjMSwgMHgwNWM2NzlmZiwgMHg5MGZmM2JmYiwgMHgzZmEwNWRiYSwgMHg0ZGYyZmQ4ZiwKLQkweDdjMTFlNDE3LCAweDg3MTY0YmY4LCAweDFmZTRkNWI4LCAweDllOTgxMzc5LCAweGNkOTQyNjBmLCAweGU2ZGQ3OTgyLAotCTB4Mzc4MTY3ZmIsIDB4MGFjOTJmOGEsIDB4OTBiMTVmYjYsIDB4ZjNjNmJiMmUsIDB4YmNmM2M2ODMsIDB4ZjNlNjgyNGIsCi0JMHg3N2VjN2ViYiwgMHg4ZTNmMTQ4OSwgMHhjM2E3MDhmZSwgMHg0YWY1YzZjMiwgMHg3YmUzMGE5NiwgMHg4ZjNkMDIxNywKLQkweDU4ZWZmZjcxLCAweDQzNjdiYjEzLCAweGUzNmU2Nzg3LCAweGEyN2MwNTY4LCAweGY5NThiNDdmLCAweGNjOWI3NmJlLAotCTB4NzRjZjA1ZDYsIDB4NzJmMmE3ZDgsIDB4ZGNlMTk5YmMsIDB4ZmQ4MWNiYjcsIDB4NDQ0NDdiY2QsIDB4MWQwZTY0YmYsCi0JMHhhZmQ1MDU2YiwgMHg2Nzk2MTZkZSwgMHhiY2M3OWU2YiwgMHgzODEyZDUwZiwgMHg1ZWVmM2YyZiwgMHg3ODVkZmQwMSwKLQkweDlkNzQ5N2ZmLCAweDA3YjhhZWYyLCAweGYzY2NiM2Y3LCAweDYwM2ZkZjM0LCAweGZiYTRiNzNlLCAweGZkMzgwYjQ5LAotCTB4ZTUxNzg4MmIsIDB4YTIwZjI2MmYsIDB4OWIzYmVkODUsIDB4ZjdhNzdhZTMsIDB4ZmU2MDM4ZTcsIDB4M2Y3MDI1ZjcsCi0JMHg4MzhjODBhMywgMHhmYmFkODc3YywgMHgyZjlkMjY4NywgMHg5ZjgzYWFjZiwgMHhmM2MxM2VkNywgMHgwOGY5OGYzMywKLQkweDU0MTJiMzk2LCAweGU1YmEyZTc2LCAweGFiZTAxMmY1LCAweGYwNWJjZGE1LCAweGFiNmY5NmJlLCAweDFjYjQ5NjZmLAotCTB4ODkzMWZjNGYsIDB4MWY2YTFkZTgsIDB4MjFmZTA3YWUsIDB4Mzc2MGMxNWUsIDB4NDY3ZjVkMmUsIDB4YzMyYzdlNjEsCi0JMHhmOWZjY2RjMywgMHhkYzVmMzBjZCwgMHg3MmY3NjUyNywgMHgzZTU4YmNkYywgMHhjYjlmN2QxYiwgMHg3Y2M2MDlkMywKLQkweGY5ZjA4ZWViLCAweDI1OGYzNjczLCAweDlmNDgxZjdjLCAweDY3OWY5OTlmLCAweDVlNzhiMDI1LCAweGQ1ZjJjNmM1LAotCTB4NmI5NGU4MDMsIDB4ZTYwZThmNWIsIDB4ZGYzMDBhZTcsIDB4MzMxN2U3NWEsIDB4NjUyMDJjM2YsIDB4MTQ0Mjk5MjUsCi0JMHg4ZDdlNWJkZCwgMHhhOWY0ZWE3MCwgMHhlN2MzOWJhOCwgMHhmYmUwY2ZlMywgMHhlNzEwMTk2ZiwgMHhjYzBmOGRlOSwKLQkweGRiOTRlZWY0LCAweDlhN2M4MzA3LCAweGMzZDlkZGU5LCAweDA5YWRmMGY5LCAweDUwYWZkZDZjLCAweGZmYTAyNTNkLAotCTB4ZDViMjkxZTYsIDB4ZTNiYjI4ZWUsIDB4ZWZiNzU0OTgsIDB4MWIzNzIwMTcsIDB4YWQ0NmRmMTksIDB4N2IzOGNjYTcsCi0JMHg3OWY1YzY0NSwgMHgwZmVkNGI5OSwgMHgxZDIxMGNmNywgMHhiZGZlYzAyNiwgMHhlOWVmMGZkNSwgMHg3OWYxMWNlMywKLQkweGUwMTI2MWI0LCAweDEzY2IxNGI5LCAweGQ4NmQzMmJlLCAweGZjZmI0OGIwLCAweDQyMjRjZjQ3LCAweDA0NmJiNTNjLAotCTB4YTc0Yjc4YzEsIDB4YzdlZjA4Y2IsIDB4ZjNjMjIyMDksIDB4NjJjM2E3MzEsIDB4ZWY1ZmVkYTksIDB4ZDhkOWNlODMsCi0JMHg0NzA5Nzk4NiwgMHg5YWYxZTZiZSwgMHhmMWE1YWRhZiwgMHhiZTRmZjllNiwgMHg5ZjdlMTFmZSwgMHg2ZTVjYWRjYSwKLQkweDM2ZTFmZjc0LCAweDViNWJiNzRlLCAweGRjZjNiZWQ4LCAweDBmNDhlNTc1LCAweDA3MjBmZGYzLCAweDE2NDk3NzA0LAotCTB4MWMxYmNhZWQsIDB4Y2RmZDAwYWQsIDB4NWRhNzk5ZjQsIDB4NmJmNDFjNzEsIDB4ZmRjODlkMGMsIDB4OThiZDJmOWMsCi0JMHgyZjUxNTM0ZiwgMHg0Y2MyN2M2MiwgMHg5Yjg3MGFiZiwgMHgzNWFiY2RlNSwgMHhlYTJkNmZlOCwgMHhlNTVkY2Y0MSwKLQkweGFmYWU3YTYwLCAweDYzY2YzMWYzLCAweDdhODA5MzRlLCAweDgyZmYwY2NmLCAweDBmNTcyYjhkLCAweDM2N2YzMDIwLAotCTB4ODQ3OWQ4YmYsIDB4ZTE5ZWEyMDYsIDB4NTVlN2Q0ZjMsIDB4NDczYzM0NDEsIDB4ZDM4ZmIzMWEsIDB4Y2U4OTM5N2UsCi0JMHg3MmQ4NWNhYiwgMHgyZWMxZTYzYiwgMHgyYzI3ZjNhNSwgMHgxYmYxODNkZSwgMHg1ZTFkN2UxZCwgMHhjNDRhM2NmMywKLQkweGYxMDZkOTBlLCAweDA2ODIxNWQ2LCAweGRlZjYzNmZhLCAweDVlZTE4ZjE2LCAweGJiMGQzOWE4LCAweDhlZmQwMjA3LAotCTB4MjFhYmVkNDgsIDB4MmZjNDdiZmUsIDB4ZjVkNmZmYTAsIDB4YjQ0NWMxMDEsIDB4ZmI4MDhkNmIsIDB4YWZkMjNkNWUsCi0JMHhmNGVkZTU4NSwgMHgwNTFhYzc0YywgMHg1OGFhMzllZSwgMHhlM2E1YzQyNywgMHg2ZDQyZmE4MiwgMHg1OWRlOTQ1OCwKLQkweDFiNTJiODE4LCAweDg4Mzc4MDY2LCAweDFhOGIxYzc5LCAweGE3Y2YwZGNhLCAweGI4ZmE4YzM4LCAweDM1MjM3OTM3LAotCTB4NzRkMmYzZjEsIDB4NGRlNWQyZjksIDB4ODcwYWJmOTcsIDB4NTJmZmUyY2EsIDB4MzY1NjVmNjAsIDB4ZDEwN2U5ZTgsCi0JMHhmNjdhYTBjZiwgMHhjMzhiMDc2YSwgMHg3ZDIzNzAzYywgMHg2N2EzZTk2NSwgMHg3OWZjNzEwYywgMHhlNjdkMTllMywKLQkweDc5ZjFkMzg5LCAweGM1MDNlYjRmLCAweGNlZGY0MTgzLCAweGVkZjUxODcyLCAweDNlOGY5ZGY3LCAweGY0MmU1ZDBmLAotCTB4YzJlNTk5ZjksIDB4ZmUzZDdmOGMsIDB4MTk4M2E2NjUsIDB4ZDgxNzAwZmYsIDB4MWQ1YTA3ZmIsIDB4OTAwNGJiODEsCi0JMHhiZmE3MDY3NywgMHg3NjcwOGVkNSwgMHg3MDY5MTQ2NiwgMHg3YzAwZTU5ZSwgMHhkMmRjZjU0MCwgMHhmZDYzMWZjYywKLQkweGI5NmNiMTI2LCAweGVlMzRmZDAzLCAweGYzZjE2OTA3LCAweDBmZjZjMjZkLCAweGZlYzQ2M2I3LCAweDFlMzAxMTk2LAotCTB4YzgzNDEzMTEsIDB4MmNiMzE3MGIsIDB4YmNlOTViMzUsIDB4MWNiNDIxYzQsIDB4OWFjMWU5MDUsIDB4ZWI5ZmU3MDgsCi0JMHhlMTEzMmY4YSwgMHg3ZTVhODZkZSwgMHhjMmQ2YmEzZSwgMHhmZGU5NmRjZSwgMHg3NWIwNzFhZCwgMHgzOTc3MmY0OSwKLQkweDY4M2I1NmNhLCAweDZiNWYyN2ZmLCAweDc4YjA3MDJiLCAweDM4MTlmYTJmLCAweDkzZWUxMTRmLCAweGQ4MzE3ZWE0LAotCTB4Y2MxMzJmYjMsIDB4MjM0YmNkNGYsIDB4MGViZTgxN2IsIDB4ZjIwZjE5ZTIsIDB4ODUyMzhjZmQsIDB4ZmI2NTVmOWYsCi0JMHgwYjJmZjQ2YywgMHg3OTZhY2Q0YSwgMHhmOTA4ZDU1ZSwgMHhhNjA3N2RmZCwgMHg1YTcwM2RjMSwgMHg2Y2NlZTU5MiwKLQkweGYxYzI3ZjVhLCAweDU5NjdhYjNhLCAweGE5YmI2NGNlLCAweDgzNzhlZGZmLCAweGNlNWE0N2Q1LCAweGE3ZjVhNTBjLAotCTB4M2FiMjZmMWMsIDB4MDU1MTA4NmMsIDB4YWRlM2I0ZjMsIDB4MzA1MWZlNjksIDB4M2ZkZjliOGUsIDB4ZjIwOTE5ZTAsCi0JMHg1Zjk4NTkyMCwgMHgzMDUxZWQyYiwgMHhhM2VmYWNmZSwgMHgyYzA2YTJhZiwgMHgwMGNmYWZmOCwgMHhiYTlmODJmZiwKLQkweDBlNGZlOGIyLCAweDc5MTVlZjg4LCAweGJmMWZkODU0LCAweGZkYjY4MjFmLCAweGUzYTk3YmJlLCAweGYwNTg3NDU1LAotCTB4MDEyODBhNWUsIDB4M2UzODViZmYsIDB4MjY5MGJhNzUsIDB4MjNjODQ4Y2YsIDB4NDhjZjQxMjQsIDB4ZTVkODc3ZDgsCi0JMHhkZDAxMzZmMCwgMHg1ZGI0MGZmMywgMHhmNGQ0NzIwNiwgMHhmMDBiZGZjNiwgMHhhYzIxY2NmZSwgMHgyOGNhN2M5ZiwKLQkweGM5ZTZkZjcwLCAweDhmYWQwNjE3LCAweGU1ZGJiZmRlLCAweGY0MDFkYzI4LCAweDNiNDA2NGExLCAweGU0ZGQ1MDQxLAotCTB4ZDQxNzZhNjYsIDB4Yzk1ZTNmNTIsIDB4NjhjNDdmMDEsIDB4N2U3MTM3ODcsIDB4NmNhMTJkN2IsIDB4YzBkOWYyMzcsCi0JMHg4ZTFmZDMxMCwgMHg4ZmQwYmRiMiwgMHgyZGE0NTcyZSwgMHhhNzdjNGZhNSwgMHg0MTEwYWVlNCwgMHgzNTY0YTYzZiwKLQkweDcyMGI5YzFmLCAweDljZWNkZmY4LCAweDYwZjFlMGFjLCAweGYwZTZkYmZlLCAweDNmNmMyMGZkLCAweGU5ZmIwMWRkLAotCTB4OTIzNWFmYTAsIDB4NzFlNzRmZTEsIDB4MjM4ZjE2MDUsIDB4ZmU1MTA1NjksIDB4ZmQwNzlmMDUsIDB4MzdkYzJhN2UsCi0JMHhmNmMxY2UzMiwgMHg0NGJjZTk1YiwgMHgxMzQ2MWY1OCwgMHg4ODdjY2IxNSwgMHg2YTAwZTQxMywgMHg0OWRmNThiZCwKLQkweDQxN2YwNzgyLCAweGNlYzg3ZmZiLCAweDAzNWI3NGZjLCAweDJjNWRjNDMxLCAweDVmN2ViNjRlLCAweDdkZDk5MmU4LAotCTB4NWFmMDcyMmQsIDB4YTcwOWUzZDAsIDB4NzhmNDFiODgsIDB4ODQ4YWUzZDcsIDB4ZmI5MjE4ZjksIDB4YjA5ZmI4NDcsCi0JMHhkZTAwNDJjZiwgMHgxYjgwZTRhNywgMHgxN2RkZDllMiwgMHgxMjA2ZWE0OSwgMHhkMzhiYWZlOSwgMHgyMWY3ZWY1YiwKLQkweGUyMDhiZDQ1LCAweGNjNWNhMzFkLCAweDkwYWE3OGJlLCAweGY3NjhmZTYwLCAweGZiMDAyNTcxLCAweGI2NTkyOTRjLAotCTB4ZmFiZjY4OWEsIDB4ZWY3YjA3MmIsIDB4Y2ZhMmE0ZDYsIDB4ZDZjMTFlODEsIDB4OGZlMzAyMDQsIDB4NDQwZDQ1ZGIsCi0JMHgzNTNmODc0YSwgMHgxZjgxZDllNiwgMHgyODhlMDMzNiwgMHhlZWFjNTIxZSwgMHg5NGJmYTAzYiwgMHg2Y2RlMTQzMywKLQkweGZjNDFlZTdjLCAweDI0ZThlYTRhLCAweDU3ODlkZjhhLCAweGJmYjg1NTM5LCAweGYwN2IyOWUxLCAweDdiOWZjYzJhLAotCTB4MjRmNzgyZDYsIDB4NzJiNDU2NmQsIDB4YWQzZTZmYTgsIDB4ZjM1ZTIxYmEsIDB4MDEzMDc2NTQsIDB4MDVhY2YzZTcsCi0JMHhhMTM5YjNlNywgMHgxNDY1ZTJmYiwgMHg2MDhkNWZlZSwgMHgyMGU0YmY3ZSwgMHhlNDA1MmQ5MiwgMHg4M2JkNDhhOCwKLQkweDMyNzA0ZjNlLCAweGMyY2FiODdkLCAweDkzOGE2OGU0LCAweDAyNDNjZmM5LCAweGRlMGYzZjFkLCAweGQxZjk0NDJiLAotCTB4YmFiYTFiZjMsIDB4N2U4ODc5ZDksIDB4YzA4OWI3ZDcsIDB4YmFlNTA5YzcsIDB4YzExMjFlM2YsIDB4NDY1YzllOGYsCi0JMHhlYzljZmQ3MCwgMHgzYTJhMDM5NCwgMHgxY2U3MWU5ZiwgMHgwOGNiZmY0YSwgMHhmYjJlMWY1YiwgMHg1ZmM2MzE2MCwKLQkweDgyZGUwNTI5LCAweGViZDgwYmRmLCAweGYwNTJmN2U0LCAweDM5Y2I5ODdkLCAweGVkMjE0YzlmLCAweDUzZTdhYzIyLAotCTB4NDQyZDExY2UsIDB4OWNmY2JiYzcsIDB4OWYzZDc3MTQsIDB4NTI3ZGZiYzYsIDB4N2QxMjUyMjAsIDB4MmFhY2YwYWYsCi0JMHgxMjE1ZGYwMSwgMHhhZDNiN2FlMywgMHhjNDM4ZTRiZSwgMHhhNjZkOGI3YiwgMHgyMzVlYjBlNywgMHhmNDA5MWUzYywKLQkweGIxYjczNGQ3LCAweGFmOTNhNDdkLCAweGUwYzk4MzRmLCAweDNkMWFiY2U4LCAweDFjNGQzZTZlLCAweDBiZGEyOGY1LAotCTB4NzgwNjhhYTUsIDB4YmNmNGUyZDksIDB4N2U0NGZiMGIsIDB4MmY5ZTI2ZWEsIDB4OGZhNGYzM2UsIDB4Mzg4ZDNmZTUsCi0JMHg3MmYxODA5NywgMHhlMDRlOWZjYSwgMHhlYmViOGI4YiwgMHhlZjNhNzZmYywgMHhmZWIxODc4YiwgMHhhZjQxMGY4MSwKLQkweDVhNzhmODVjLCAweGY3ZjllODJhLCAweDRiZDFiZWI5LCAweGJmODBlZjlkLCAweGJmOGM0OWRjLCAweGU0NDY5N2RjLAotCTB4YzQ5MjE0YjMsIDB4MGRlNDQ2YzYsIDB4ZDlmYTBlZjgsIDB4OGE2ZTA3MjksIDB4YTkyZjdlN2IsIDB4MGZkOWQ0YTgsCi0JMHg0ZWQwNDFlNiwgMHgzNmQzMmZiZSwgMHgxZjRjZTQxYiwgMHhlMzI3MDFlNywgMHg3YWI5NzM2YiwgMHgxMGRkYjJlNSwKLQkweGNlN2ZmNzA3LCAweDAzYTk4YmQ2LCAweDVhMWU2MWNlLCAweDYyNDg4ZmQ4LCAweGQ2YWQ1NjdjLCAweGYyMDMzNzVkLAotCTB4YzYzMjljNjIsIDB4ZjlmOWQzYmIsIDB4Yzk3ZTY4YWIsIDB4OWQxN2UyOGMsIDB4Y2M5ZDNhZWYsIDB4YTdmOWQ2OGYsCi0JMHg5ODliYzc3OCwgMHgzOWZjNWZkZiwgMHgxMjZjZWUyMSwgMHhmZTc1MDdiNiwgMHhmOGNmY2NiOSwgMHg2Y2ZkYjJmMCwKLQkweDdmOGRlODlkLCAweGE5ZWVkZDNjLCAweGY4NjMxZWEwLCAweDliZTMzZjY2LCAweGY4MWZjYTIyLCAweGYwM2QxMGZiLAotCTB4OTY2Zjk5OGYsIDB4NWYzN2NhZjUsIDB4OTY3ZTAyMjcsIDB4Nzc5ZjE2YjcsIDB4NjdkOWE1OWYsIDB4OTczMzkzY2MsCi0JMHhmM2YxMWMxMywgMHg2MjRkOWYyOCwgMHhhOTQzYjFmYywgMHhlODJlNTFmYiwgMHgxYTJkYWI4YiwgMHgxNWNhMDNlOCwKLQkweDNlNTJkNzU5LCAweGRmYTA5MWRmLCAweDAzOTM1YTdiLCAweGQzMTIyZGY1LCAweGFjNWE1YjNmLCAweDM4YjY3ZmE4LAotCTB4Njc4YzVlYmQsIDB4NjhmM2IwNjUsIDB4NDNiNmYyNDQsIDB4YzAzNmI0MWUsIDB4ZjNkZjQ2YTYsIDB4OGQ5M2E1N2MsCi0JMHgxMzQzOTQxMywgMHhmNDFkODI4ZSwgMHhmMWZmNDYxNywgMHg4ZGMxZTc1NywgMHg4MmIzMjQzMCwgMHgzMWNjNjFkMSwKLQkweDBkOThiZDY1LCAweDhmODUzYmU5LCAweDAwYmQ3ZjAwLCAweDU3N2U4MzNhLCAweDczYzE1ODdkLCAweDJiMGY0YmZlLAotCTB4ZDg1ZjE3YTgsIDB4YzQwOTdhZjUsIDB4Y2I3Y2Y0OGQsIDB4MmY1ZjNiNzEsIDB4ZWYwNTFhMjksIDB4OWM3YjNlMzMsCi0JMHg4ZWJkNjNlYiwgMHgyN2EwZTdhOSwgMHg0ZWE2Zjc0ZCwgMHg5OTdmNGMyMCwgMHgwMzJkM2RlZiwgMHhiNDhkYzlmZSwKLQkweDlkMDNlZjliLCAweGQ2MWU0NTQ1LCAweGI1ZGI2YjlkLCAweGNjMTZhMDY5LCAweDBhY2U4MWY3LCAweGZmZjY4NTVkLAotCTB4Njk5ZTgzY2MsIDB4N2RjZTM1MmUsIDB4NmUxZjljYTAsIDB4YzFkYjZkMjAsIDB4NGZkZjM1MjUsIDB4NmRlN2Q3NDksCi0JMHhhZjkzZmYzMCwgMHgyZjg4MTQ4NCwgMHg5MTlhOTUwNiwgMHg5YWVlYmVlYywgMHhiYTNmZDAxYywgMHhjNTFmZTFkYywKLQkweDExYzNmMDViLCAweGJmNjhmYjg2LCAweDVmYmVmM2U0LCAweDA4YmRkODkzLCAweGJmZWUwYWVkLCAweGVmYjA5YWZjLAotCTB4N2FkZDdjODIsIDB4ZGRlMmM5ZDMsIDB4YmI5ZmNiNzksIDB4N2U2MWY0MDksIDB4YjlmNzA3YTUsIDB4OWY5ODkzNGEsCi0JMHhiMjEyMWJmYywgMHgzNGJkMDBlNSwgMHg0MWM4ZTMwOSwgMHgyYTNlMmQ1OSwgMHg1MjIzZGU0NCwgMHgwZjM4MDhkOSwKLQkweDQyNWZiM2I1LCAweGI5YWY4YzNlLCAweGMxMzhlZmJjLCAweGY3YmE5MGFlLCAweDI2ZTM3N2MzLCAweGRlODNlNWU2LAotCTB4OTU1ZThlNzYsIDB4MGU5OGViMGEsIDB4NzRhYjg1MzcsIDB4ODcwMjMzOTMsIDB4YmU1ZWQ3MGUsIDB4MzlhZTY4Y2UsCi0JMHhlMWZjYzBlZiwgMHhjZDQzZDAzYiwgMHhlMGQ4OGU4NywgMHg4MjBmOWQ3YiwgMHhmZDE4YTdhZCwgMHhlODAxZjhhMywKLQkweGUxMDdlMTFmLCAweDc4ZWJhODM2LCAweDg3ZTcwN2Y4LCAweGZjNmRmZjJmLCAweGYxNTlmZDQwLCAweGZlMDBmYzNjLAotCTB4ZTJmN2UyNjAsIDB4ZTY4OWZmODcsIDB4ZmRhZjZhMDcsIDB4YWY2NTE5ZDMsIDB4YTc5NjE1MDUsIDB4M2U3NWQ3YTUsCi0JMHhjNDI4ZTQ1OCwgMHg2MDg1MzRmNywgMHg2NWQ5MDViZSwgMHhlMmRmYmY2NywgMHhmMDM4YzY0ZCwgMHg0NjM2NmVmMywKLQkweDA2NDc4N2Q3LCAweDc2ZTIyZjgzLCAweGUzNzkzMGE1LCAweDBlOGY1ZGY3LCAweDhlNTc2ODA5LCAweDY2ZTEwYWE2LAotCTB4YTIwNmUzYjQsIDB4YmUzOGQ0M2UsIDB4ODA0MTExYzgsIDB4MTczMGFjN2IsIDB4Y2JlYzBiMzcsIDB4YzVjODJhNTAsCi0JMHgxMGY0ZWI2OCwgMHhjNzU2ZmZmMCwgMHgxZjYwNTk2NSwgMHhlNzI2MzllNiwgMHgxZjZkN2YwMCwgMHg1ODE1ZmNiMSwKLQkweGE4MGZiNmIyLCAweDFhYTM3ZTdjLCAweGJkNzQ5ZmIxLCAweGFiNzc5N2I3LCAweGM1YzQzZjhmLCAweDBmNzJlMWY4LAotCTB4N2EwMTRmM2IsIDB4NWQwZTFhM2IsIDB4MDA1OTAzZmYsIDB4Y2IzNDIxMGUsIDB4ZjUwMzhkZjIsIDB4ZTgzYjRiNzUsCi0JMHhlMjgzODA3MywgMHg5YTQwYjc3NSwgMHhiNDI4M2VjMCwgMHhjMThhZDI3OCwgMHg5MjE3ZWJjZSwgMHhkNmFlY2UwMCwKLQkweGJjNDMwNzJmLCAweDlmY2I3YTY4LCAweGQzYmMwMjBmLCAweGNkMjY3ZGY1LCAweGI2NjRjZmI4LCAweDQ3N2I3NWEzLAotCTB4N2I3NDJiZjcsIDB4ZDA4OGEyNDgsIDB4Yjc2ODI2ZWQsIDB4Yjg2ZWU3ZjAsIDB4YWZkNjFiMWYsIDB4NzFjZjBkOTAsCi0JMHhiZDVhNzQzZSwgMHg1N2U1YzNjOCwgMHhjZTk4ZjNhMiwgMHg2OTBkNzFlNywgMHhkN2M4Yjg0MywgMHg5OTMzN2NkZiwKLQkweGM3MDY2N2QyLCAweDI0ZmRmNGM3LCAweGVkMGI5MDk0LCAweGYxNGQ1Yzg0LCAweGZjNDRiNTcwLCAweGFiOWM3NDQ5LAotCTB4MWM3YzgxMzUsIDB4OGNkNzI3YzUsIDB4ZWZlMWQ2MzcsIDB4M2Y0OGY0YjIsIDB4NWU2ZmJkYmQsIDB4ZTI5OTI2MWYsCi0JMHhkY2I3ZGZmMSwgMHhhYmU3NjNlZiwgMHhlNzYzZWFmZiwgMHgxNTBlMjc2NywgMHhhODJjMTJmZCwgMHhiOWQ5MzNlMywKLQkweGMzYzMzNzU5LCAweDdhZmUyNTdlLCAweGM5OGI4OGY1LCAweDdiNGI0NGYxLCAweGRjMWI5YzJlLCAweDVjMmJmM2JkLAotCTB4ZmNlY2Y3MWYsIDB4MTNiMDFkZWEsIDB4MDg5NzFjMjcsIDB4M2M0ZTAxZTQsIDB4ZjcwOTI2M2UsIDB4ZTA2N2M3M2QsCi0JMHg2ZmRlOWQzZSwgMHgwZTRkYTdmNSwgMHhmZjIzOWVjMiwgMHhlZjgyZjdlOCwgMHgxNDc4ZjBhMywgMHhlNTg2Y2Y4MCwKLQkweDNkMGYxZDhiLCAweDNkOWRmZDBjLCAweDNjZTg5MTJjLCAweDNiYzUxMmYzLCAweDI1NjllMjBjLCAweDdkZjg3ZWZjLAotCTB4ZjQ5N2IzMDIsIDB4NWVmYzdkZjYsIDB4NTk3MmZmZTYsIDB4OWI2YjdlZjgsIDB4NjI1ZWZkYzQsIDB4ZDVmM2EyOGQsCi0JMHhlNTI0ZjM1NCwgMHhmNTdhZTg0NSwgMHg1MmUzZDJiMSwgMHhlMDdkMmM2ZSwgMHgwZjlkNjNlZiwgMHhkYzY3OTNjZiwKLQkweDU3OWZhOTViLCAweDIzZjhlM2FlLCAweGYzYzNkZjdiLCAweGRkMzQ1NzAwLCAweDdlN2Q4MTIxLCAweDNjNDg4NjQ1LAotCTB4YTk1ZWUzNTEsIDB4MmEzZTBmNTIsIDB4OGI4ZjcxZWUsIDB4NzZlYWU1ZTcsIDB4MWZhN2RlY2EsIDB4ZjcwNjkxOWUsCi0JMHg3YTk4ODg1OSwgMHhlNWIyZGQ1NSwgMHhiN2E4NWM5NSwgMHg3MWNmNzE4OSwgMHg0NTdiZjE5YiwgMHhmMDEyMWRjYiwKLQkweDI2MmUxN2ZmLCAweDNmOGRiZDFmLCAweDI3Y2E2MmYxLCAweDA5ZGQwMjk3LCAweDA0MGFmM2IzLCAweDdkMzMyMzk0LAotCTB4N2RmY2VjZjcsIDB4OWVhOGZiNmEsIDB4ZmQxM2RkZjEsIDB4YjE3ODc0Y2QsIDB4MmZmNzA4YTMsIDB4OTk4N2EzN2EsCi0JMHg3OWQxNzc2ZiwgMHg0MmZjZTlmYSwgMHg2YTdlOWU3NCwgMHhiOWYxZWQ4ZiwgMHgyZjkyZmViMSwgMHhiZjNhZWIwMywKLQkweDkxM2ViNzU2LCAweGNlOWNmNjBhLCAweDE5NTJkM2E3LCAweGYxZDg0Y2RmLCAweDQ2NzEyYTcwLCAweGRiYzY2NWU4LAotCTB4NjZmZDM5NWYsIDB4MGNlNjZkMTEsIDB4ODI2ZGNmZmEsIDB4ZTE3ZDQyZTYsIDB4Y2Y5MDZkMjcsIDB4OWM2MWM2NTIsCi0JMHhkYTA5NTZmNSwgMHhjZmU3ODQxZiwgMHg1OWIxZDc5YiwgMHhkN2JjMjhlMiwgMHhkOTdiZDdiYSwgMHhhMGNhMTU4NywKLQkweDE1ZWJjZDZlLCAweDdjMGUxN2RjLCAweDRhYTc1ZTZkLCAweDcwNDlkNDBmLCAweGI0ODk1OGFkLCAweDZlMzFlOTljLAotCTB4OTk3MGViYTcsIDB4MjkzNmZjZTksIDB4MDRmNDc5YzMsIDB4Y2MwZjk5YTcsIDB4YjlmNmVhZjAsIDB4YzUzOTRmN2UsCi0JMHhkYTE0YjRjNywgMHgyMTZhYjVkZiwgMHgxZDY2MmZjZSwgMHg2OWU5NzhlNiwgMHg1ZTY5ZWRmZCwgMHg3ZmZjNGQ0NywKLQkweGQ3ZDRkOGU2LCAweGM5M2RiZDAwLCAweGU2NmU5OTliLCAweDk0N2Y1ZDc2LCAweDU4NzkwMGMwLCAweGY5MWVjMWZhLAotCTB4ZjQ4ZTk1YzIsIDB4MTBhNzM5MmQsIDB4MGYxYmVjMGYsIDB4YTI0ZjkzYjQsIDB4N2QzMjIxZDYsIDB4OWRkYmYyMDgsCi0JMHgyN2FjZjY2ZSwgMHhjZTdhNWI3ZSwgMHgxMWE5YmM0MiwgMHgxZjliOTNiZSwgMHhlZGRmMDA3NCwgMHhiMDFjZWE5MCwKLQkweDU5YzUzM2FmLCAweGYxNDQ5YjVlLCAweGEyZDNmNTM1LCAweDc0YmNmMWViLCAweGM4NDA4NWJiLCAweGE5Y2I1YTZjLAotCTB4YTg0NzEwYmQsIDB4OWYzMDQ4M2UsIDB4Nzc2NWE4YmEsIDB4NGJlOWYwMzEsIDB4NTFmYTFiNTIsIDB4NzkwOTY3NWQsCi0JMHg2Y2NlY2EzMCwgMHg4MDc1YTk2ZSwgMHhjNjljZDYxZCwgMHg0YmVkMDNjZSwgMHhjZGJjODYyNiwgMHhiZjE5MTI0NywKLQkweDNkM2UxZjM2LCAweGZkYTcxM2MzLCAweDhlYmY2ZjAwLCAweDcxNzJkMjc4LCAweGZjNjE3NjVkLCAweDA1OGQ2NGEzLAotCTB4ZDA1NTNmZTcsIDB4YmIwMzRlNWUsIDB4MGY3NjQ2ZTUsIDB4YjhlYjU3NjMsIDB4YmMyOGQzOTcsIDB4YTMyNGI3OWQsCi0JMHg3Y2Q2OTk5ZSwgMHg0YTZlMWRjZiwgMHhmMzNmZTA4OCwgMHgxY2Y3NzlmMSwgMHhkZjQwZGI0MSwgMHhhYzM1NTEyYiwKLQkweGUzNjQ1NDk3LCAweDdmYjhmOGJlLCAweDFkMzc1ZWE1LCAweGQxOTRhZmRhLCAweDJlMjY5OWJmLCAweDc1MWUyMDk2LAotCTB4MDNjODQzMzIsIDB4ZDBhNzcxN2YsIDB4YTc3ZTEyYmUsIDB4YzZjZTVmY2QsIDB4MmE3ZjZlMjEsIDB4NGM2ZjlmZjgsCi0JMHhiZjhkMWQ0ZiwgMHhmNWVhYTI2ZCwgMHg2YmY3ZjAwYiwgMHg1YjRmYzk4OCwgMHg2ZWNjZWRiZSwgMHgzZTVmNmQyYiwKLQkweGM3N2NjMDUzLCAweGUyMmNlZTY5LCAweDkyOWZlMjhmLCAweGY5OWU5NDM1LCAweGZhNWIyZjk0LCAweDVmNWYwMTE3LAotCTB4NjczYzZhNTcsIDB4NDFjY2IzMzUsIDB4NjNmMWQxMDIsIDB4YzJjMzJkYzEsIDB4YjVlNzhmYjMsIDB4N2VmYzBiNzYsCi0JMHg1N2U3MmU1OSwgMHgzNTlmN2U3MSwgMHg1ZGYwZDUzYiwgMHg2Njc2NjEzOSwgMHhkZDkxMzZmNSwgMHg3ZWM4NTI1NywKLQkweGFmOTc1MTI3LCAweGJjMzk3MTFmLCAweDM3YzdmYjhhLCAweDcwMGNiMzdhLCAweDBkMjg4NzRjLCAweDY5MzMzNGZkLAotCTB4ZDc1ZGRhMjgsIDB4ZTVjNzZkOWMsIDB4ZTBmYzVjYjksIDB4NzhlODliYWQsIDB4ZjI2MTFhM2YsIDB4YWJjNWM1NmIsCi0JMHhkODMyMmY5MCwgMHhjODRjY2E3ZSwgMHg2ZjQxMTIyZSwgMHg2NmJiZGYxYSwgMHg0NzFlYjFiYywgMHgyN2FiY2Y4ZSwKLQkweGIzMzA3ZDc0LCAweDliZmRjNDU1LCAweGNmMTQ4NTk5LCAweGQzYjE4OTAyLCAweDE4YmVhZGJmLCAweDg2NWVkMTY3LAotCTB4ZTdiNWQwNzgsIDB4MDRiYmY4M2MsIDB4ODNlMmZhMzEsIDB4MmZhNGVmZDIsIDB4MzgzMmEwNWUsIDB4ZDJmNWNhOWUsCi0JMHgwZmRmZWU0NCwgMHg2ZjQwODMyMiwgMHgxZjFiMTM0YywgMHhhMmVhM2UwNiwgMHgwZTM1YTZlYiwgMHg4ZWViZTkxZiwKLQkweDUwOTdlZmVlLCAweDIxYmUwNjM5LCAweDhmMTg2OTFkLCAweDAzMmU3NjlkLCAweDdmNzQ0OWYzLCAweGE4NDdhYzNmLAotCTB4YjFjNWEyNWQsIDB4Y2M0YmVlOTcsIDB4MTMwN2RjMzEsIDB4NzY1MTJiZDYsIDB4ZmRmMDVjODksIDB4ZDQ2OTkyZWQsCi0JMHgwMGYyNTUxZSwgMHg5ZmM0ODFiZSwgMHhlMzBjZmE4ZiwgMHg3MDkwMjU5MiwgMHg4Y2MxZjEwMiwgMHhhOWU3MTg1MywKLQkweDhhZmZhODk2LCAweDRjMTNmM2ViLCAweDA5N2ZkMWNmLCAweDMwZjkxMTI5LCAweDljN2EyYmRiLCAweGRiYTQ5YWQ5LAotCTB4MDkzZTQ2NTMsIDB4OTdhZjFiYzcsIDB4ZjNhM2VlMzEsIDB4MTNlMDA5NDksIDB4MTE3YWZmZTQsIDB4ZjFiZDNhZTMsCi0JMHg2ZjdlM2U4ZCwgMHhmYWEyMTJmYywgMHgwZjM4NDkyOCwgMHhmYmY5NzBiZiwgMHhiY2YyZmNiNiwgMHhjOGMzMjdjZSwKLQkweDg5ZjBiZWIwLCAweGJmM2ExZmNlLCAweGE2MDlkOGM0LCAweGViNGY1MDc4LCAweGU5ODk0YmNkLCAweGQ2OWVkZjg4LAotCTB4Yzg0Nzk3OWIsIDB4YjM3YmQ3YTgsIDB4MzEyNjc2NmIsIDB4NzQ0YWVlM2QsIDB4NWQ1NzdmNjMsIDB4NzYwOWQzMzQsCi0JMHgxMWViOTU4ZCwgMHhjNzBhZGQ3ZCwgMHg5ZjE5ZWFiNSwgMHg1NzNlZGNiYywgMHg2YWEzZmQ4MiwgMHgxMWQ5MWZkMCwKLQkweDYwZjFlODNhLCAweGFlOTcyZjlkLCAweDljZmYxODIxLCAweDY3NTZmNWNlLCAweDU2MDc4YjJiLCAweDcwMDMxNTRmLAotCTB4ZTViOGEyODQsIDB4OWQ1OTg3YzEsIDB4ZDNhMmNiZGQsIDB4MjdjZTZhZjcsIDB4MDk2ZWQyODUsIDB4MWFmMzc3N2UsCi0JMHhiZTIwZDA0ZCwgMHhjNGYxZTFlNCwgMHg4MDk0ZTcxOSwgMHhhZmFiMWQ5YSwgMHhjNzVmYmE3NCwgMHgwYmJmMDdiZiwKLQkweDIzYzZiZmRlLCAweDFjNGJhODA0LCAweDNiYWVjZmEzLCAweDE4OGFlY2M3LCAweGNmYmMyYTdiLCAweDg5MWU2MmFiLAotCTB4ZWI0ZTVmOTksIDB4ODY0MjFmNzQsIDB4MGFlZDNiZmMsIDB4NzZmY2U5MjEsIDB4NmY3ZGZlODUsIDB4MWUwNjRlNzQsCi0JMHg2NWVlN2EwNiwgMHgxZDgwYWVmNywgMHhlMmJlNzQwZiwgMHgzYWZkODQ5YywgMHhjY2YxOGM5MywgMHhiZjc5MWRiMywKLQkweGJmOTNkZjQxLCAweGNkYWZiZTZmLCAweGM2ZGU5ZjNjLCAweDE3Zjc0NmZmLCAweDhmYTBmZmI4LCAweGNlYzQ5NTdiLAotCTB4MjdkNzliYzcsIDB4ZDc1ZTljN2QsIDB4OTliZGZlMjMsIDB4ZTI5M2MzN2UsIDB4M2ViYTdkZGIsIDB4ZDczZmMxOGUsCi0JMHhhZmQxM2RkNywgMHhlYmFkN2QzNywgMHhiZWI3N2ZjNSwgMHhkN2Q3ZmJkNiwgMHhiMzVjN2QxMywgMHg4ZmM5ZWYxZSwKLQkweGVhZjJmNWQ0LCAweGRmOGMxNmY1LCAweGZhZmVlMTRjLCAweDllMmYxZTE0LCAweDZjZTJjNDk5LCAweGVlZGViOGIzLAotCTB4MDE2NmRjZmEsIDB4YjMyODJlYmIsIDB4NmVmZjMwZmQsIDB4MzZhMWM2MjcsIDB4ZDBmNjYyZWYsIDB4NzI0ZTNjOWIsCi0JMHg5YzYyMjBiNywgMHgxNmIxZWVlNCwgMHgxN2Q0ZGJkNCwgMHg0Yjc5ODdjYSwgMHg4MDhjODQ0NSwgMHgyYzAxZGNmZCwKLQkweDg1MjhkZjRlLCAweDZiZWY1MGNhLCAweDZmNzM4MTEyLCAweGVmZGZlYWFmLCAweGZkMDRkZmYxLCAweDcwZjFmZGRmLAotCTB4YTNjNjJkNGIsIDB4YzdlMDZkNDMsIDB4NzA5M2NiOGYsIDB4YWFkOTJjNWYsIDB4YjNiYWZjNjIsIDB4MDNmNzhhZDUsCi0JMHhkOWY4ZWQ3NSwgMHhmOWZhMTk2ZSwgMHg1YWUwNjg5YywgMHgwZDZhZDRiZSwgMHgxZTgxNGJlZiwgMHgxMDFlMjY5OSwKLQkweGFiYTMzZjIxLCAweDU5ZmRlMDliLCAweDhhODc2NzkzLCAweDQyOWIzZmMxLCAweDBlMjE2YWRhLCAweGY5NjE1MTMwLAotCTB4M2QzYzY2ZTgsIDB4Y2MzMWY3Y2EsIDB4N2RlMTE0ZmIsIDB4OWY2NjU2ODksIDB4NzY0NGJiMTUsIDB4ZmI0ZjU4MGYsCi0JMHhlNjBhY2QxMiwgMHgyZmI2Zjc1NywgMHhhMDk2Nzg1MSwgMHgyZmIzMTY5ZCwgMHhkMmY0Y2NkMSwgMHg5ODk3ZGRiNywKLQkweGRmODdiODA4LCAweDlmZjlkMzY3LCAweGMzZDIyN2ViLCAweDg1NjZjNGZlLCAweGJmNzU2N2VkLCAweGJmYjAxMzJlLAotCTB4YjhiNGIxYzksIDB4ZjZkZWEzNzEsIDB4NGFlYzc2MjksIDB4MWQzZGMwZjAsIDB4NGRlZmY5OWIsIDB4YzAzNWQ4ZWMsCi0JMHhmY2Y2ZTZhMywgMHg3NzdiNmU3ZSwgMHhjZGE0YTgxMSwgMHg5ODRhZDc4ZCwgMHhiOWUzYzZmNywgMHgxOWEwYjhlMSwKLQkweDY2ZmYxY2FmLCAweGM4MTU2ZTdjLCAweDA3YzQwNzJhLCAweGUwYTliNDViLCAweGJmYjhmNTE3LCAweDcxYzFlZGQzLAotCTB4NWQ0NzhhZmEsIDB4NDkxZjM2NGUsIDB4NmY5ZjAwZjAsIDB4MDNjMDMyM2UsIDB4ZmMwMDNmZTMsIDB4YWI1OTcxMGEsCi0JMHg5M2YwMTVmYiwgMHg5ZDNlMWM3NywgMHg4YWJjZmI4MCwgMHhhNGJmMDU0NywgMHhiMWE2ZDkzYiwgMHhlZjhjODk3MywKLQkweDAzYzM5OTgzLCAweDlhYmQwZmIwLCAweDg0ZTZmOWYzLCAweDRjOGViZmVlLCAweDYxYWZkZThiLCAweDM5ZmEzM2ZiLAotCTB4NjA4NTVhZmYsIDB4YzJkZjg4M2UsIDB4NzhjYzQxZjIsIDB4ZWI2NmU0MWIsIDB4ZWJjNGU2YjUsIDB4YTY5Yzg5YzMsCi0JMHgzNWYyZjE4YSwgMHg3Zjk2NjJiNSwgMHg4MDdlN2U2MCwgMHhmMDM5NzdmMywgMHg3MTQ3ZWQwMSwgMHg4OTU2YjgzMywKLQkweGFlZmY4NDY1LCAweGNlZjU4MTI4LCAweGJmZTVhZjVjLCAweGM2N2I0Mzg3LCAweDFjZDU2NWRmLCAweGVkMmEzMzk2LAotCTB4NjdkMjc4ZTMsIDB4NDBlZmMwNTcsIDB4M2I5NmY5NmIsIDB4MmY3MGRjNzMsIDB4ZjJjYTUwODMsIDB4YjJmOTJjM2MsCi0JMHhjNDkzYzg0NiwgMHhkNjk1M2E1MiwgMHgwZWNiOTIyYiwgMHhiODgzZjUyNiwgMHhlNDBkNzNiMSwgMHg0NzllNDMzMywKLQkweDJmNDQ1YTVlLCAweDBhZDc0N2RjLCAweDJlMjQ1ZTViLCAweGJmMTJiMGViLCAweDNkNzBlYzFkLCAweDc5ZTc5ZmNmLAotCTB4ZmJlYmI1MmMsIDB4M2VlY2VkZDEsIDB4ODZmZThhZWEsIDB4ODUwZTRlNzMsIDB4YmZiZjQ3N2UsIDB4OWEzZGVhZGUsCi0JMHhhMTRjZjk4NCwgMHg3ZGQyOTU0NCwgMHg3ODY5OGVmOSwgMHg3NmUyOTA3ZiwgMHgzZTQ3N2NlMywgMHhmODAzMjkzZiwKLQkweGQ5ZjVjMjgxLCAweGZmNWMzMWZmLCAweGM4MmUwZjFiLCAweDNhNzE4MTZmLCAweDA2MmM4ZWI2LCAweDA4NzIzMWZkLAotCTB4ZDA4YjU5OWMsIDB4N2M0MWFhODcsIDB4YmMxMjBmNmUsIDB4MDFmZmYxMmYsIDB4NTEyODA5YzIsIDB4MDAwMDgwMDAsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YmI1ZmYwMCwgMHhkNTU0NzQwZCwgMHg3OWJmZmY5ZCwgMHhiZTRjZGVmMywKLQkweDIxMjY0Y2RmLCAweDAxMmYwODQyLCAweDFjNDI0MjQyLCAweDYxZjA4MDYyLCAweGM0NDQzZTFkLCAweDYwMmEwMzIwLAotCTB4NDNlMTk2ZWIsIDB4OWExYWY5MDksIDB4N2FiNzZlYmEsIDB4MjkwNDkzMGUsIDB4YjY5M2RiMDIsIDB4YjY1NGU1NmUsCi0JMHgyOGJiNTYwZSwgMHg4MjYwOWQ4OSwgMHgwNGVjMjY4MSwgMHg2ZWI1MDMxNCwgMHg1YjYwNDA0MCwgMHg2YTQ0NTQ3NywKLQkweGJiOGQzMjQzLCAweGIyOWVlYzU0LCAweGY3YmRmZmZmLCAweDYwYzMzMzI1LCAweDM5MmRkOWU5LCAweGRkZjczNzM5LAotCTB4N2ZmZGVlZmIsIDB4Zjc1ZmZlZmMsIDB4NTk1YzAwM2UsIDB4YzlhMDAzOTIsIDB4ZTdiNzNhYTYsIDB4MDAxYWE4MDIsCi0JMHg2ZGJjZGM2NCwgMHhhMDU1NjA1MiwgMHgzMjRlNDAxOCwgMHg2MzI0MGE2ZCwgMHhkNGRhNjY5YiwgMHg2NjhhNmQ4NiwKLQkweDlhYTllMzYyLCAweDcwODA1YWNlLCAweDZjMTRiMmNlLCAweGYyY2U3MGI0LCAweGM2ZWZiYzI5LCAweGMzNGI5NjU2LAotCTB4ZmRlYzMyYzEsIDB4NDVmMzhhNWQsIDB4ZTFkOTBhOWMsIDB4ZmVjNDllMGYsIDB4MzkxNDhmZmIsIDB4NDJmZjYzYjcsCi0JMHhhNDA5NmE2MiwgMHhlN2YyYWMwMSwgMHgzZmIwODUzNSwgMHgxYjFmZTJkNSwgMHg2OWNlYmE0NCwgMHgxYTZkMmM5ZSwKLQkweGZlMmRkN2MwLCAweDdiZTMyMDg5LCAweDY4NTI5YmM5LCAweGYwMDVjOTdkLCAweGJhYjYzYjFkLCAweDIyOTQ4ZjA2LAotCTB4ZDVkMDJlN2QsIDB4NjBhMzAwZjEsIDB4MDhhOTc2YjcsIDB4ZWI4MmE5MDAsIDB4MDVmNmYxZTksIDB4NTgwNzRjMmIsCi0JMHg4ZWZmMTMzOSwgMHhmMTkyMTdkOCwgMHg1M2QyMjY3OSwgMHg3NDFiOWZjZSwgMHhiNDA1ZmVlMCwgMHgzMGNmNDFiZiwKLQkweDVkYWQ5MDFkLCAweGVmZjYwMjRhLCAweDk2ZWZmNjNhLCAweDhmYjgxODUxLCAweGRmOTMxM2Y3LCAweGJmOGI2MTIyLAotCTB4YTJmZDdmZDQsIDB4YmZjM2VmYzksIDB4ZGI5ZjY4MDcsIDB4NzkyYmI2NjksIDB4YzQzNjc0Y2QsIDB4ZWJmOTk5ZjYsCi0JMHhlYjExOTk0NiwgMHgzZTdjMWZjMywgMHg2NTA5MmY4ZCwgMHg5MDE1ZDU5ZCwgMHhmMzNlZmQ4YSwgMHhkOGFiMjE0NywKLQkweGY0Njc3ZjA3LCAweGUzMjdlNjdhLCAweDQ1Y2UzMzdiLCAweDgxNzVjNzNmLCAweGQ2MmQ5ZmU4LCAweDBjYmYwNzJkLAotCTB4YTE5OThmMjgsIDB4NjFiMzc5ZTgsIDB4NWM2NDFmZTcsIDB4ZThlNWY2NzcsIDB4MTRiNDBiZTcsIDB4MzQ2N2UzMDcsCi0JMHhmOGNlYmU4YywgMHhiZDcwYWE0MywgMHg2ZjVmMmI3YSwgMHgzNGJjOWRlOCwgMHhjZDliZmQ0MCwgMHhiYjk0NTMyOCwKLQkweDhlNTBjYmFhLCAweDc3ZmE3NWVkLCAweDY2ZmI0MDE3LCAweDcwMGY5NzljLCAweGI1OTViMzYwLCAweGViNmI0ZTUzLAotCTB4Y2RjZWZlODgsIDB4ZTAxNTIwMDgsIDB4ZDYyY2U2ZDAsIDB4OThjNjlhYWEsIDB4NTYxYTcyOWMsIDB4M2VjNDQ5NDMsCi0JMHg5MGM3ZGYxYSwgMHgyZTM5ZDBlMywgMHg4MmExYTljNywgMHg1ZjYwZTZlNywgMHhhZmMwNTVlOSwgMHg0YjM5ZjA4ZiwKLQkweGI4MDg2OWM4LCAweDk1MzQ4NzljLCAweGYxZmE3OWM5LCAweGM0MTFkZDlmLCAweDEzMmM5NjQ3LCAweDI1ZmMxMWU4LAotCTB4MTdhMDg5ZTgsIDB4MGE5M2Y0OGMsIDB4ZDk3ZDUxZWMsIDB4ZDVjZjhmZDAsIDB4ZGZlYjg1OTcsIDB4NzE0ZmQ2MjEsCi0JMHgwNzVhOGU4ZSwgMHhhMTEzZjhmYywgMHg4NWY2NDNiZiwgMHg3MWYyMTJiZCwgMHgwNTY1NzI0NywgMHg5ZTU2OTNmMSwKLQkweGQ5NmViNTE3LCAweDQyN2FiMTNiLCAweGQzY2JlMWMxLCAweDIwOWZjODkwLCAweGM2OWZhNjllLCAweDMzZjk4OGYxLAotCTB4MDA5MjNlMWMsIDB4ZmEyNmZmOTQsIDB4NGNiMzQwMzksIDB4NjJlYjM0NzYsIDB4NmYyN2YzZjQsIDB4Yzk5YmI3YTYsCi0JMHg5YjllNGExMywgMHhlNWViZjhlMywgMHhjYjQ1NzM2OSwgMHhiNDUxN2QzMywgMHhkMWRjMzMzYywgMHgyYWI1MWNmMiwKLQkweDc5Yjc2ZTVhLCAweGE2MzJlNWEyLCAweGY4ZDQ3MjcyLCAweDUxYTU0ZGQ4LCAweDk5ZGY3MWZkLCAweGQ3M2YzNTE1LAotCTB4M2ZhYTJmMzcsIDB4YThlMmRiN2UsIDB4OTc5YjEzZjksIDB4ZWQyN2Y1NDcsIDB4ZmNkNDdhZmEsIDB4YThkYWZmNDIsCi0JMHg1NWJkYTJmMSwgMHgyOWZmYTRiNywgMHg3OWE4ZmE4MSwgMHg1N2QzNWUyNCwgMHhjZWY2ZmZlOCwgMHhmM2VkNDZlZiwKLQkweDJmZmZkNmI3LCAweDljN2ZmNDYzLCAweGQyMzRkOTdjLCAweGY0NDdmYTE3LCAweGYyNGE4MzhiLCAweGQ5OWYwOTM2LAotCTB4OTNmMjU2OTAsIDB4YWZiN2FlYjYsIDB4YmU5NzY4NDksIDB4ZTg4ZmJhNzksIDB4NjcwNjJkZjAsIDB4MmIzZDhlMTMsCi0JMHg2YmYyMjViYiwgMHgyNmQ0NTA2MywgMHg0YzViMWJmNCwgMHhmZWZlNDk1MCwgMHg2YWQzMjZmYiwgMHg5ZDg4ZjI3NywKLQkweGI2MjRkNzFmLCAweDk4MmFmM2ZlLCAweGYzZDFlYzEzLCAweGNjOGYxNzk2LCAweDE0ZDNkYTMzLCAweGY4OGRhNjFmLAotCTB4ZjQ1YmFmZDksIDB4M2RmMjEwYTYsIDB4MTQ3ZWU2NTUsIDB4ZjI2OWViZmQsIDB4YTdhNDE3YWYsIDB4OGE5OTcyMTQsCi0JMHg4YTc4YTdjMywgMHhlZDU5YmM1OSwgMHgwZTA2ZDZjNiwgMHhiNGRiMWVhOSwgMHg1ZmFlYmYxMSwgMHg1MDVjZTU0NywKLQkweDk4ZmYyZmZkLCAweDNiMjEzZmU4LCAweGRmZmE0NjVmLCAweDg2ZGM4MTI1LCAweDg5YmI1NmJmLCAweGMzNjFmM2VjLAotCTB4OWE3YWU5NmYsIDB4MjFhZTgyMmQsIDB4MDQ4ZmE1ZTQsIDB4ZDBkM2Q2NmMsIDB4ZmFkMGMzZTcsIDB4OWRhZmNjZjEsCi0JMHg0ODA1YTZmZiwgMHhjZTU1ZTdmZiwgMHhiMmZmMzE4ZiwgMHgwOTlmNmJmMCwgMHhmZTRmZDZiZiwgMHhiYzY0N2YyYywKLQkweDUyOGZjZjcyLCAweDdjZTc1Yzc0LCAweDQ0MGEyYzAxLCAweGU0MmMyOWM4LCAweDU4ZDA2NjA0LCAweDc1Y2Q5OWJjLAotCTB4ODc2YWExNzYsIDB4YmZhZTE4ZjIsIDB4NDRkODdkZjIsIDB4MTNmY2FjZmIsIDB4ZWY3YzhhNmMsIDB4ZGVjMjlhY2YsCi0JMHhiMzI2YjNmYiwgMHg1OTM2MDU3NiwgMHgxODE1ZTcyOCwgMHhhY2E1NmNjYiwgMHg1ZGIwOTQxZiwgMHhlNDBhMGJkYSwKLQkweGU0ZjMyYzAxLCAweGY3OTQyNDJhLCAweDAzYTY3OWMwLCAweGEyOTJiNGI3LCAweGMxMDdiZGYxLCAweDNmZmY5MGFkLAotCTB4MTRkYWNkZmIsIDB4Y2ViYzM3OWEsIDB4NGZkZDRmZGIsIDB4OGE4MTVkMzgsIDB4N2RmZjYxYjYsIDB4NDRjOTRmOWIsCi0JMHg1M2JlMTA3ZiwgMHhmNzExZjE2MiwgMHhmNzczZDJiMSwgMHhhNjllNjMyMywgMHgzYzE2NzMzOCwgMHhiZWEwY2U1NywKLQkweGFkOTM4Mzk2LCAweDYwMGJhYzY3LCAweDE3MzNmMjhmLCAweGUzYTYwODU0LCAweDE2MGJiZTNhLCAweDQ3NDhjYmZmLAotCTB4NDU2MWIyM2QsIDB4OGY3N2Q0ZmQsIDB4YjA2NDdlNjIsIDB4M2ZhZDhmZWEsIDB4YzdhYjc5YzYsIDB4OWM1MmM2ODQsCi0JMHhhN2Y1NTBiZSwgMHhjM2YzZDI3YywgMHgyMGFmZDBiYiwgMHgzZDEyNGI2ZiwgMHgxMThjYjYxOSwgMHhmZjVmOWMzOSwKLQkweDYzOGQwYTc5LCAweDg2N2E2NWJjLCAweGNiZTcxNjdkLCAweGQ4ZmI3ZTRjLCAweDcxYmNjNjdiLCAweDZkYTNiOWI2LAotCTB4NWM3MmU3MjQsIDB4Zjg4ZGU2NjQsIDB4YjAwYTVhMzMsIDB4YTk1NDlmOTQsIDB4MTc3ZTlmZmUsIDB4MGExMzg0ZTksCi0JMHhjYmMwY2Y1YiwgMHhmYTk3ODE0NiwgMHgyNDU0N2Q1YywgMHg4NjUzZWE1ZSwgMHhmMDhhMzJmMSwgMHhjY2IyZmY1MiwKLQkweDNiYmVhNmVjLCAweDk3MjgwZmMxLCAweGRlNzcwMjMzLCAweGZiNWVkNzdkLCAweDllMWQ0ZWFlLCAweGI4OGM3Y2VmLAotCTB4OWYyNzExZDEsIDB4OGM3NDZlMjAsIDB4NmUyMjlmN2IsIDB4ZDkwZGZmYTgsIDB4ZmRlODk1M2QsIDB4YTljN2U3NzgsCi0JMHhjMWY3NWExZSwgMHg1MDdiYTM1YiwgMHgwNmZkOWYwYSwgMHhjNzM4ZjdjOSwgMHg5ZDBjMTBmYiwgMHhiZGJhN2U2NSwKLQkweDFkMjFmNzUwLCAweDNiNWMwZmYzLCAweDVkNWNmOTRiLCAweDYwYjc0NWJiLCAweDc0MmQ4YWZmLCAweDdmOWE3OWVjLAotCTB4NWY5YTAyNTAsIDB4NGU2MDRjMTcsIDB4ZjI1ZGFlYWIsIDB4NTU3OGUwMjcsIDB4MzFkNmRiNjcsIDB4NTk2YWFmZDgsCi0JMHhjMzYxNDY1NiwgMHhiYmMxMGE5YiwgMHhlNGJmN2M2OCwgMHg0YmYxYzQ2ZiwgMHgxNzI1ODM5YiwgMHg4N2JhZTAyNywKLQkweDc1YTI1ZGFlLCAweDc1ZjEwZTA3LCAweGU2MGU2ZjJmLCAweGIwMzAwZTUzLCAweGI0MDdjZDdmLCAweDA1YmI0ZDVlLAotCTB4YjFiZjI4MTIsIDB4YjQzMWQ1MDUsIDB4YTAxNDliNWYsIDB4M2YwMzJhZmQsIDB4Y2FmZDY5NTAsIDB4YTA0ZDk2OTcsCi0JMHg2ZjdhYTZmNCwgMHgxMTA5YzRjZiwgMHhjMGUwNmI3ZSwgMHgzOTQ3NTU0OSwgMHg2MGZmYjY1NSwgMHhjNjU3OThhMSwKLQkweGUxOWY5N2MzLCAweGEzN2ZlMGQ3LCAweDFjZGYyN2JmLCAweDZmZjEzZmU5LCAweGYwOTNkOTFmLCAweGYyMTZiZmJmLAotCTB4YmUzNWQ1NWYsIDB4N2U4OWM0ODksIDB4ODk3OWUzYTUsIDB4ODRkNTk1ZjksIDB4NWI4NzBiYTcsIDB4ZGE0YmZiN2YsCi0JMHg0ZWJmZTBlZiwgMHhkOTQwZGMyNCwgMHhkYzFiYzlhZCwgMHhlYjE3MTYzZSwgMHhmOTcwM2VjNCwgMHg0MjlkZDUzZCwKLQkweDQ1MmU1M2YyLCAweGZmM2U3M2ZiLCAweDQzNWRjZDkwLCAweDJhOTg2MWZiLCAweGM0ODQ0NGQ4LCAweGQwZGI4N2U0LAotCTB4OTNlNDgwMWUsIDB4NDNlY2M4OWIsIDB4NmJhYjBlNGUsIDB4ZDFlZjllOTAsIDB4YWNjN2E0MDQsIDB4ZDhiNWQ1ODUsCi0JMHhmMzE3NjZkZiwgMHg5N2ZlYWNmMiwgMHhhZmE0NmY3MywgMHhmMjY2NjZjMywgMHgyNzgxZTZiMSwgMHhlZDE4NmZkMiwKLQkweDNhNDcxYTdlLCAweGE2N2RlNjhlLCAweDRlYmM3MDg2LCAweDZlMTJhY2JmLCAweDUzYmY4MmViLCAweGRiZGZhNDc1LAotCTB4NTc0MmUxZjksIDB4MzYwMmY3OWMsIDB4OTMxNGFmZWUsIDB4ZDk0ZjcyYmIsIDB4NGJkNDdkODgsIDB4ZjA4OTIxOGQsCi0JMHhjZTkyNzA3ZSwgMHgyZjliNThmMiwgMHg0OGViZThjNCwgMHhmOThmODlkMCwgMHgzZDM3N2UwNywgMHhlZmRlYjExNCwKLQkweDI2MTMxZjExLCAweDdlZWJmNDhjLCAweDQyODk2MWYxLCAweGMzZmQ3YjcyLCAweGM4Y2E3MzEyLCAweGU0Y2M4MWYzLAotCTB4M2E1YzdmNGEsIDB4M2E3OGJjNzgsIDB4ZjY5OTdkZDUsIDB4ZDE2MDNkYWQsIDB4MTNiZTE5MWIsIDB4NzdjMjQxOWMsCi0JMHgzZDEzOTI1NywgMHg2ZDViZTEzNSwgMHhmN2M0OGIyYywgMHhiYWVlOGNjMywgMHg0ODg5ZDkyZSwgMHg2NWNlYmE4NywKLQkweDNmMzYwNjllLCAweDkwNmE0OWM1LCAweDA4ZmFlNzNiLCAweDY2ZTZiMjY3LCAweGMxZmY4NDc4LCAweGE1NDcxMGZkLAotCTB4YTNmYTM3ZjQsIDB4Y2ZjZjM2OTUsIDB4ZTRlNjdmNDksIDB4YmM0OGM0ZTAsIDB4Mzk0Mjk5ZDUsIDB4Y2ZlOTEyOGQsCi0JMHhjMjM3M2NkMywgMHg5ZjY0ZTRmZSwgMHg3OTIwZThkZSwgMHg3ZDY1M2JhNiwgMHg4OThhN2Y0NCwgMHgwZjQwNjVlYiwKLQkweDhlMjlkYWE1LCAweDUwZjVjNjZkLCAweGRmYzEwMzFlLCAweGI3ZmM5MmE1LCAweDkyYjNhZTc2LCAweGE2Yzc3ZmRkLAotCTB4NTU1OTNkMzEsIDB4ZmY2MWFlOWYsIDB4YmU0N2Q0ZGIsIDB4NGFlZWE5YjcsIDB4OTk2ZGFiYjIsIDB4MGQ3NjQwODksCi0JMHhlZjg2NzZkOSwgMHgwMWQ3ODRiZiwgMHhiZDU0NTdiMiwgMHhiOGEwMWUwMiwgMHgzNmYwMjAzYSwgMHhmZjk4MTYzMCwKLQkweDcwOGZkY2E1LCAweDM3YmU1MzI2LCAweGEzYzhjYzllLCAweDY3NmYzY2QxLCAweDA4YzVjOTRmLCAweGFlMGUwNzdlLAotCTB4NGE3ZDEyNzQsIDB4MzIxZjdmMjIsIDB4Zjc2MzVlMzksIDB4YzM4MTRmZmQsIDB4OWI2YjRkYTcsIDB4ZTFjNDQ2ZTcsCi0JMHgxNWJmNzlkOCwgMHgwMGU0MzQ3OCwgMHhhYjE2NWY2NiwgMHg4Y2YxMzEwNywgMHhkYjNhZGY4NywgMHgxZmU0MzNiYywKLQkweDBiYmJiNjlmLCAweDg5OWIwZmM4LCAweGFlYTNjMjMwLCAweGU3MDNhNWM2LCAweGNkZTkwN2ZmLCAweGM4NWM3Zjk4LAotCTB4MWEzYzU1NTUsIDB4MjE0ZGY1YzksIDB4MzM3NTQ1NTcsIDB4ZWI2MWEzMzksIDB4ZmNjM2M3NjQsIDB4ZWQ3MWE5ZTUsCi0JMHhkZmMxMGJlYywgMHhiZDY4ZGNiNiwgMHgyYWJiY2VjNywgMHhiZTRjNTNmOCwgMHhlNzQ0YjVhYywgMHhjZGQ5OTk2MSwKLQkweGZhNjYxZWEwLCAweDA2MGRlNjM3LCAweDc3ZmQ3MWFmLCAweDhiYmY3ZTdkLCAweDA1NzczY2VjLCAweGFmNjdlN2MzLAotCTB4MTFjYTk2MTQsIDB4Y2RiMzhlZWIsIDB4ZmZlMjJmZmIsIDB4OGEwZjAzMTMsIDB4MGVlODhiMmYsIDB4ZGViMWYwYzUsCi0JMHhmODkyZmVlNiwgMHhjODNiZjIzNiwgMHg0ZTEyZGM3NiwgMHg0ZTA3ZDQ0MCwgMHgzZWIwZWYxMSwgMHhhYmUzMzAyOCwKLQkweDI0ZTg5MDgzLCAweGYyMjZkZWZmLCAweDE5YjgzMzYwLCAweGE5YzA5MjRlLCAweDA1ZDc3YWIzLCAweGZjOGQ5YWJmLAotCTB4NjA5OGY1MzUsIDB4OWI1Mzc2M2IsIDB4ODEzOWNhMjQsIDB4OWNjZDYwOGQsIDB4MjI4YzliMmEsIDB4NTJjNTY1YzIsCi0JMHgwYzhjODhhZiwgMHhmNmVkNTNjNywgMHhiZDIwYjc3YiwgMHhmMzI3YzEwNywgMHhmZWJhMzliYSwgMHg5MmU0OTcwNSwKLQkweDM3ZGVlYjIyLCAweGJkZDdlMmFiLCAweDY0NGQzZGJiLCAweGVlYTk3ZmQ3LCAweGFkMzQxOTlkLCAweGZhZmVkMzUxLAotCTB4MWQ4Mjc3ZmEsIDB4MTgyMmU4ZjMsIDB4ZGIyN2EzY2UsIDB4YTA1NDQ2NzUsIDB4MTAyZmUzODAsIDB4N2IzM2Y0NGMsCi0JMHhmMDlmNTRjNCwgMHgxYTdlNGZkYiwgMHg5MjJiZjllNSwgMHhhNTUzY2UyOSwgMHgwZGFiMDI4MSwgMHg3OGVlYzRhMCwKLQkweGRhMzY1YjY2LCAweDNmY2UwNGQ3LCAweGVmZTg5YmY1LCAweDBjNjc5ZTVlLCAweDRlNmZkM2Q3LCAweGZhMjc3OTY2LAotCTB4OTNkNTk5MjEsIDB4NDYyNWEwOWEsIDB4MWY5ODY1NmYsIDB4ZDg4ZDNhNDEsIDB4ZTBmMWVhYTMsIDB4Yzk1MzJmYjEsCi0JMHhmNWRhYjZlZiwgMHg4NGJkMjc3ZiwgMHhmOTQwY2I4ZiwgMHhhNDM5ODI1YiwgMHhkNWQ4ZTJkYSwgMHgzMTYzY2EwMSwKLQkweGNlZGM3OTBmLCAweDlkYWM2YmNmLCAweGZiOGZjYjkyLCAweDUwMTc3NTViLCAweGI0ZDA0ZjdjLCAweDdkODQ3MmE5LAotCTB4MzYyNWQ4MTUsIDB4ODVkOGY2YWYsIDB4YzdmMzE1MWMsIDB4NTI3N2E2MmIsIDB4OWFmZDcxOGIsIDB4NzRhOWZkOGUsCi0JMHhmZTdkNTNhYywgMHhlZDRhNzRkNCwgMHgwYTllY2Q4YiwgMHg0Y2ZiY2UzYiwgMHhhNTZmOTNkYSwgMHhiZjliNzBiYywKLQkweDA4MTNlNDg0LCAweGJjNTFhNWU2LCAweDlmMDY2MjlkLCAweDdhNDZmNGI5LCAweDU5NGFiYmJjLCAweGNiYjc1NTkxLAotCTB4NWQyOWRhY2UsIDB4YmNhMDZjNzcsIDB4ZmNlNDFiZDQsIDB4MGUwYTFlZDIsIDB4ZWIwMjc2MTUsIDB4ZDkzNjc0MGYsCi0JMHhiZmVmM2Q2OSwgMHhmZjI2OGY3NSwgMHg1NjAzMmZiNCwgMHhmNTc4ZmY5MSwgMHg3ZGZjYzk4YiwgMHhmZTY5OTgzMywKLQkweGUwNGRiYjFhLCAweGYzYTI2ZmRjLCAweGRjZTI3ZGE3LCAweDEzMGJlMDZhLCAweDNmZWM2NzliLCAweGFjYWU3M2E1LAotCTB4ODM4YTBlMjEsIDB4MGZjODQ3Y2QsIDB4NTg1OTc0MjQsIDB4MTJmMDk1MWUsIDB4NjE3NDc5NzAsIDB4MzhlNzQ3N2UsCi0JMHg4YTAxZWY4NywgMHg3MDM2ODM0MywgMHg5YWRlMzg0YSwgMHg0Zjc5NjYxOCwgMHhiZmEyZGJiOCwgMHg5YWRjOTEyOCwKLQkweDU1YmNlYzgxLCAweDIxNGFmNWU1LCAweGYyN2Y3MjAyLCAweGJmNjM3M2M4LCAweGU4ZTdhZTg0LCAweGUxNzA4OThjLAotCTB4NjA5N2I4YTIsIDB4OTMzYjg2NmUsIDB4YzI5ZGU1MjMsIDB4NzNiNDZlZTgsIDB4MDYyNmI1M2MsIDB4OTc5NGM5NGQsCi0JMHg5MTc4MDQ0ZiwgMHgyNzQyMzVkMSwgMHgzYTBkN2RiMCwgMHg2ZjdmOTkwYiwgMHg5ZTk3YzM1NSwgMHgzNGJhMzA3NCwKLQkweDcwMjE0MWMyLCAweDkyNmJhMTNhLCAweDQxMmRmZTRlLCAweDEyM2UzMTczLCAweDkzZTlkZDM0LCAweDViY2JhNDZlLAotCTB4ZGExNzg5ODIsIDB4NjExYmY3Y2QsIDB4YWVjOThlZDgsIDB4N2QyMzg5YmQsIDB4NmI0MmRhMmIsIDB4ZjgzNWM3MWUsCi0JMHgyMGIzM2UxNiwgMHgwZTRmYTIzYiwgMHhmZGU0N2NhNiwgMHgzZWY3ZWNlNywgMHg5ZDliMjViMywgMHg1NDY0ZjkxNywKLQkweDI5YjYxMjc1LCAweDY3NTNlMjc2LCAweDc0ZDdhMjdjLCAweDM5NzI5NDY1LCAweDQ5NGU1MTM4LCAweDNjM2UzZTU2LAotCTB4NGM5ZTcxMWYsIDB4Y2YzZTY0ZmQsIDB4MTY5MmQxNjksIDB4MDE3YjMyZTcsIDB4MmYyMzE3YjIsIDB4NWUwYTVjN2IsCi0JMHhiNWVkMGJiYSwgMHhiNGVlMDdmZiwgMHhkZmFiZTQ2MiwgMHgxNjg5ZTQ3NCwgMHgzNWZiZjc5YywgMHhmNjIwZmM4MSwKLQkweDE3OWVhOTRmLCAweGZjNmY5ZjA5LCAweDI5OGVlZDY2LCAweDE1NWI2ZmU0LCAweDlkZjkwNTY3LCAweDJjODdlZjkwLAotCTB4ZDE1NTdkZmYsIDB4MWRkODQ3YjcsIDB4MDkzMzg3NjQsIDB4NzhmYmIxYmYsIDB4OTBmZTM3Y2YsIDB4ODNjMWRiZjIsCi0JMHhjOWQ1NmU5MiwgMHg4ODczODZlZiwgMHg0ZmFlYmFlZSwgMHhkZWU3ZjI1NSwgMHg3Y2IyMWY4MywgMHhlN2JhNmU3NiwKLQkweGFmZWEzYjM1LCAweDNlNjFiM2JjLCAweDM0MjY3NWM5LCAweDJlYmY5MTM3LCAweDIwNDE3OTEyLCAweGExOTNmYjhiLAotCTB4MzYyZmY5ZDMsIDB4YjRlMWU4NDQsIDB4N2IwODM3YjAsIDB4ZWE3YzUxYzYsIDB4OTg3YWY2MTIsIDB4M2I2YzRlZWEsCi0JMHg0ZjFlMWU3YSwgMHhiYTg4NzdlYiwgMHgwMWFmNzhkOCwgMHhiOTIxOGM4ZSwgMHhhYzliYzIzNywgMHg3ZTM3OGUxZCwKLQkweDU5YzIyMmYzLCAweDZhZWI1OWQxLCAweDc3ZmNjNDU3LCAweDdhYmYzY2VkLCAweGJkZjNjZWQ3LCAweDM3OWVlOWY1LAotCTB4M2RkNTNlNDksIDB4YzRhOWE5MWYsIDB4MGU0MGM1ZTcsIDB4YWMwMTkzZDUsIDB4N2UzOGI1OGYsIDB4NjM3ZWQ4NjQsCi0JMHgwZTZiYzllYywgMHg3YmRmMzRhYiwgMHg0MTVmOTgxOSwgMHg0MzQ5NmY3ZCwgMHhkYjNiZWRmZCwgMHgzZTBkNzkzOSwKLQkweGE0OWQ0MGVmLCAweDllNzA5ZTUxLCAweDhhMWQ4N2Q3LCAweDZmY2QwYzdiLCAweDg0YjU3MzM4LCAweDIyMDFkOGZjLAotCTB4ZGFiOWU5MDIsIDB4ZTQ4ZTNkNWQsIDB4OTc5ZmY4ODYsIDB4MDZkNjc2NDgsIDB4NzYxOWFmY2MsIDB4OGE3NjRjNWEsCi0JMHhmZTEzMTdlZiwgMHhjODVmYThjYiwgMHhkYWFiNzJmYywgMHg2NWQ5OThiNywgMHgyZWM4MDk4NywgMHgxZWNjZmYxMSwKLQkweGM1MWFmZjEwLCAweGVkMGQ2MmUzLCAweDg5M2ZiZDgxLCAweDlmNmI3OWQ5LCAweDU4ZjJjNWM5LCAweDU5MTNlYmY0LAotCTB4ZDQwM2RlN2YsIDB4YTA1YmVkNmYsIDB4MjEzNzNiMzEsIDB4NWVjOTRiOWUsIDB4M2FkODQ3ODMsIDB4YTQ4OTgwMDEsCi0JMHg5MWRjMDkzYSwgMHhmNjA1MDNlNywgMHhjMzM3YTY1NCwgMHhmNjE3NGU1ZiwgMHhkM2QwMjgxYiwgMHg5MjQ3Yzg5YywKLQkweDQ3ZDk0NzJjLCAweDdkZTQ5YzQ0LCAweDNmNWQ0NzExLCAweDllNjdjN2ZhLCAweGZiNGY4MzlkLCAweDQ0ZDA5YzQ0LAotCTB4ZmRjNzNjN2MsIDB4YWM0NWI3ZmUsIDB4ZDY2YjdmYWEsIDB4YzdjYTE2ZDIsIDB4ZjFiMzJkN2YsIDB4MjI3Y2UyYzMsCi0JMHg0NDcyNzAyOCwgMHhkYzUwNGY5YywgMHg2ZjNmNTFkMCwgMHg2OWQ3NzM4YSwgMHgxZmExNzdkOCwgMHgzNGRhZWU5ZCwKLQkweGYyYWE3MjlmLCAweGE5NDdjZDQ1LCAweGNjMGVlNTlkLCAweGNlNzE1NGE3LCAweDBhYTNiZWFhLCAweGMyMjJmMzM3LAotCTB4N2I5MWZiNWYsIDB4ZjdlNGNjOGIsIDB4YWVmYWYzY2UsIDB4MDdmMGNiZmQsIDB4OWUxY2EyYWYsIDB4OGZmMjhjMzgsCi0JMHgxZDkwYTcxMywgMHhhZmNjM2Y4NiwgMHg4ZGQ2NDBjNiwgMHhlMTkyODNlMywgMHg0YmRlNzY0NywgMHg5NzY4MWM3OCwKLQkweDQ4NDhmYTQ3LCAweGZhOWIwMjFkLCAweDlmZGJlOTE5LCAweDlmZGY2MWYxLCAweDQ3NGFjYWVlLCAweDc4NzExZTc5LAotCTB4OWU1MWQyYjIsIDB4Y2NiZjI3ODMsIDB4MzhlY2IzMjQsIDB4OWJhYjExZmQsIDB4MTE1NzU1ZGIsIDB4MGYzZGE3ZTEsCi0JMHgzODM4Y2Q0YiwgMHg3M2YzYTczNSwgMHhmNDRiMzI5NCwgMHhjZWQxOGFmOSwgMHgzMDcxZTc0ZSwgMHgyNDNiMDdkZiwKLQkweDlhY2IxNzU2LCAweDc2ZTZlYTlmLCAweGZlNjJhNWQ5LCAweDJiN2MxOTczLCAweDExYmY5MzY2LCAweDgyOGY4MWU3LAotCTB4MWZjMmU3ZjgsIDB4YTI2M2NmZDQsIDB4MmJlNTI4ZmIsIDB4N2IxZWI3MTgsIDB4YWYzOTg5NTYsIDB4M2MyMjY0ZGIsCi0JMHhlMDkyZTg2ZCwgMHhlNTdiYzgyNywgMHgxNzcxZDhlZSwgMHhjNDZhNWJjYiwgMHhmNzNiMWIzYSwgMHhmYTgzMWIxYywKLQkweDdhMjk3YWFjLCAweDJiZTUwZDVlLCAweGMwM2M5Y2VjLCAweDE2OWFjZmVhLCAweDQ5OWYzYTI1LCAweDc4Y2I3OTE3LAotCTB4MGI3OTRmMTgsIDB4MDdmOTg5ZTIsIDB4MTZiZDBjYzUsIDB4ODc0NWVmYzQsIDB4NmI0YzkwYTcsIDB4MDljYjg5OWYsCi0JMHhjYmIzMmFmZCwgMHhiNGJmOTE0MiwgMHgyOGZlZTNjZSwgMHhjY2ZjMDU3YywgMHg4ZTA2ZjY2ZSwgMHhiM2RkMjJhNiwKLQkweGI0OWQ3MjVhLCAweDFmMzMyY2M3LCAweGNiOTlkNTlmLCAweGZkOTgwY2UyLCAweDQ0NTQzMmYyLCAweDkwYjNjYmI5LAotCTB4ZDczZWQzZTUsIDB4NDc5NDJjZTksIDB4YTA5M2YwYTUsIDB4OGRhZWYzZjEsIDB4OTE0YWFmODIsIDB4NDdmNDZkY2YsCi0JMHhmYzEzM2RkMywgMHg4NmNmYjQ0ZCwgMHhhODMzOTJiZCwgMHgxMjgwZjlkMywgMHg4YWYzYWYzNywgMHg5ZDc2NmE3NSwKLQkweDdiYzc0NjNjLCAweDc5ZTg4MWI1LCAweDZmMWYyMTVlLCAweGZkZjNmNDY3LCAweGQ1ODEzNmMwLCAweDM0N2NlMmU5LAotCTB4ZjlkODcyMDcsIDB4ZDVhZGVmNzgsIDB4Nzg1N2JmNTMsIDB4YWM0YTcxN2UsIDB4MTY2ZjhjNjMsIDB4ZjI0M2E5YjgsCi0JMHg3ZTM1YmY0OCwgMHhhOWI4NGZkOSwgMHgzY2E5N2M5NCwgMHgzNWU0ODViZiwgMHgwMzNhZjc0OCwgMHhhMGZlM2EyZiwKLQkweGY5MGJkNjNjLCAweDYxNzgxM2FjLCAweGI1ZmJlMTdjLCAweGRkM2YyNWJiLCAweDE5ZGZhZDJiLCAweDgxYTNmZjRkLAotCTB4MGYwOTBiMzUsIDB4NmNhYWI4YjEsIDB4NWI3ZTU4NTEsIDB4Y2E1NDliMDUsIDB4NTU3MTYzNmYsIDB4NjY5NzhjMzUsCi0JMHgyYzU4ZTI5NSwgMHhkMjNjZWE5ZSwgMHg3OWU2ZTg0ZCwgMHhlZTk1ZmZmOSwgMHhjZWM4MjU2YSwgMHg1OWZmYWE3ZCwKLQkweGZlODhmYTcyLCAweDc0YTk2ZmY2LCAweDdkYTM3OGZlLCAweDE5NTZmZDcwLCAweGZkN2MxMTM4LCAweDZmM2NmY2I1LAotCTB4NGMzMjdmZTAsIDB4OTQ1ZGZhNjYsIDB4NTA3NThiN2UsIDB4YTZkZDNlNzQsIDB4MzIxOGZiNzIsIDB4MDM2MmYzZjMsCi0JMHgyZmVmYjEzZiwgMHgzZGY4ZjkxNCwgMHg1N2I1ODBiYiwgMHhhNTRmM2YzYSwgMHhiZWMxZGZmMywgMHhhZDYwNTRhMSwKLQkweDNmYzUxMTY5LCAweGYwODg0ZmVhLCAweDc5ZDJmYjNiLCAweGViMzViODlkLCAweGJlNTNlZmUzLCAweGUyOWI0ZjdlLAotCTB4NmEwZTRjYzQsIDB4OGE2ZTJhYzYsIDB4ZGY2MzM1ZDMsIDB4MTExMDljY2EsIDB4NzlkMmRhNTcsIDB4ZGI0Zjc5ZmQsCi0JMHg3NDA5OGRhMywgMHhlNDhhZjBjZSwgMHhlYzFiZjMyNCwgMHhkNDIzZmJmYSwgMHhjZTQ4YjVmNywgMHhiMWZlZjg4OSwKLQkweDY3NzdhMWJlLCAweDkyYjIzZTkzLCAweGRlN2FkM2E2LCAweDVhOGJiYmVlLCAweGM1ZWM3ZmIxLCAweDc1OTE5YzNiLAotCTB4ZTczYjMxZTUsIDB4MGFiMTllZWYsIDB4YTNmZDliOGIsIDB4NDE1NjdlOTMsIDB4M2RhZTgwZTcsIDB4MGZmYjhlY2MsCi0JMHg5ZDkyYWViZCwgMHg5MDRhYjYwZiwgMHhjYjFkMWI4NSwgMHg4ZjlhZmEzYSwgMHgyNzAzOWNlYSwgMHhlN2M2NGE1NSwKLQkweDQzNTQ5ZmI3LCAweDVjMGY5MTVmLCAweGM4MmI3MmMxLCAweDU1OWI0OWNlLCAweDFkZGM2YmFhLCAweGNhMjFhODlmLAotCTB4OTBmYTVlOGYsIDB4NzU1NTNmOWQsIDB4NTQ4ZmNjNGEsIDB4M2FmZDk2ZWQsIDB4ZmJiNDc5ZmUsIDB4NTQ3MDk1MGQsCi0JMHhhOGMxMjJkNywgMHg4NTcxYzhkYywgMHhhM2JmOTM4ZCwgMHhkYzJkYTdmZSwgMHg1Y2Y4MWE3ZiwgMHhlMDY4ZjAyYiwKLQkweDVhZWJjMGQzLCAweDZkZDY2N2UxLCAweDYzZTNjNjhiLCAweDFhM2FkYWUwLCAweDY1YjQ3ZmRmLCAweGNkNzk0YThkLAotCTB4ZmRmMWNkYTMsIDB4MzZhZmUxOGMsIDB4ZmU4OGZkNTAsIDB4ZThhZWMzN2YsIDB4NzE4NzFiNzksIDB4Mzg3ZTYzZTgsCi0JMHgxYmY1OWZkNiwgMHg0Mjg0MmMzOCwgMHg3MDUwZTFjMiwgMHhlMjMzMzhlZCwgMHhhYWM5ZWFmZSwgMHg1ZWU3MTA3MSwKLQkweGI3MTExZGU0LCAweDMzNzliODhkLCAweDdlNzQwZWI5LCAweGYzYmM1MmFlLCAweDZlYWMyYjY2LCAweGI3ZmY2NmYwLAotCTB4YWI5Mzg5MWEsIDB4YmIwYjI3MDIsIDB4NTNmNGMwZmUsIDB4ODBiM2Q1ZDEsIDB4OWUwMjViZjYsIDB4OTJlZjkyMWEsCi0JMHhmMjhkMjRhZSwgMHhiNzEwOGFlMCwgMHgxNjVkYzVkYiwgMHhmYTIyNWZiZiwgMHgyZGNlMmM0YywgMHhkMjE2YzA4MSwKLQkweDBiNjFlMGZmLCAweDI0M2M3NzNmLCAweDg0MDg3Y2IxLCAweGU0MjBkYjFmLCAweDc3Yzg0MWJkLCAweDYzNTlkNjAzLAotCTB4ZTYyZjI5NGEsIDB4ODJjNmY0NzUsIDB4YTUyOGM3M2QsIDB4NmJjZjEzYWYsIDB4MjU0ZDFmOGUsIDB4ZWUwNjJmMzksCi0JMHhiODA3MTY2NywgMHg2NWY0MzE5ZiwgMHhlMzFiODljNCwgMHhhNDliZjg2MSwgMHgwYjJlZWFlZiwgMHhmNzA4ZjdkMCwKLQkweDVmNzMzZjA5LCAweGU5MTlmYTBiLCAweGJjMWZiYjQ2LCAweGM1ZTE4OTJkLCAweDhkZTljMWQ3LCAweGVkNzU4YjhkLAotCTB4MGU0ZGYzZDEsIDB4ODkwZTVmOWUsIDB4MTFjZjM2YmMsIDB4MzA4YWFmYWQsIDB4N2FlMzE1MjQsIDB4ZTlkOTc1OGIsCi0JMHg5OWY1NmY2NywgMHgxMmRlZmY2OSwgMHhmNWQzZGQ4OSwgMHgzY2QzZTNlYSwgMHg5YzM4ZjQ3MSwgMHhkZDdjOGI1NywKLQkweGYzYTUyZmU4LCAweGQwMWY5YzJkLCAweGViMjM5MzlhLCAweDllMGU5ZGYxLCAweDk0Y2Q1NzdmLCAweDg4ZmYyNDdkLAotCTB4Njk2OTY1ZmEsIDB4NjVmYWRjNmUsIDB4YmZlNzAzYTYsIDB4ZTc2ZWJkOWQsIDB4YzVmYWM4ZDQsIDB4NzA5ZjI3YjUsCi0JMHgxZmFjYmRmOCwgMHg3ZjkyOTQ1NSwgMHg2NGZlZTE2OCwgMHg0ZGQ3MWNhMCwgMHg1ODFjN2NhMywgMHhiMTZkZWI3ZSwKLQkweGYwY2VhOWY4LCAweGVmMjg4ZTIyLCAweDQyNzA4N2JhLCAweGRkMjVkOWY2LCAweGZjYzEzODRkLCAweGNkMTI2ZWZmLAotCTB4NDM3YWJhMzIsIDB4NjI3NTk3ZmUsIDB4OTdlNWM2M2MsIDB4YzMwM2Y4MmQsIDB4OWMwOWYxZGQsIDB4YThkYjk0NmYsCi0JMHg1MTgwZjU3OCwgMHhjMTdkZDQwNywgMHg3OWUzNGRmMywgMHhlYWM0Mzk5ZCwgMHg4OTJlYmE4MSwgMHhjOGZkYjZlMSwKLQkweGE0NWM5Y2I1LCAweDhmZmJiMDc3LCAweGZkYjA2YjM5LCAweGEzOGYwNzA3LCAweDFmMDJmM2VkLCAweDU3MjA3N2QxLAotCTB4ZjM3MWFkNWIsIDB4MmRiZjYxY2EsIDB4NTI3NjYxNmQsIDB4NTkzMjg0YTcsIDB4ZjMxMDcxZGUsIDB4M2Y1ODE5YmIsCi0JMHhkNThjZmE5YywgMHgxMjQ3ZWQwZiwgMHhmNmI5ZDM1NiwgMHgzOGNmNWFjMCwgMHhkNGY0MmJlZCwgMHgzZjJjOGQwMCwKLQkweGFjMmQ4NDZkLCAweDMyMjVmY2E1LCAweGYxYTBkYjlmLCAweDEzMWU0YWVmLCAweDRmZmE4ZWYxLCAweGMzMWZhZTIxLAotCTB4OGQyYjVmYjksIDB4NWI3YzE3ZTcsIDB4ZmEzNzRiNjcsIDB4ZDRhZmMzMDMsIDB4MTc1N2JjMGEsIDB4Mjk0YWQ5ZWYsCi0JMHg1MzllNmM1NywgMHgzMzA4ZWMyYiwgMHg2MmRmMTY3OCwgMHgwZTlkOWJmMywgMHg5YzA4YmY5MSwgMHg2NDRhOWMzNiwKLQkweDcxZTBlYWY5LCAweDVkMzNhMzU5LCAweDQ3NGZlYjk0LCAweDc5ODZmZTUzLCAweDczOWM1ZTdhLCAweDJlMDRjZmNjLAotCTB4NjVmZGM1ZmIsIDB4ZTRjY2I5NDMsIDB4NWJjOTlhNjYsIDB4Zjk0MjFmMjMsIDB4OWUwY2JjMzEsIDB4YmU1M2Y2NGMsCi0JMHg4ZGY4NzQ1ZiwgMHhmNTdmZDIzYywgMHg2OTE3OWM1ZSwgMHgwZjNmYTg3NywgMHhjZmM3YWVmYiwgMHg0ODFiNWM3MCwKLQkweGM2MzI3NzYyLCAweDZmYzNiZWY4LCAweDM1OWMyNjRjLCAweDlmMzJmYTljLCAweGJlNWFlNWViLCAweDdkMzliOGVhLAotCTB4YmM0OTJiNDYsIDB4YmM0OTM1OGUsIDB4ODczMGVkOGUsIDB4ZjI3ZWE5NTIsIDB4ZmVkZDk0MWUsIDB4N2ExYTdkMDgsCi0JMHg0NzYxMTdmZSwgMHhmYWY1ZTY2MCwgMHhmYWNlODcxZSwgMHgxNzFjNWQwZCwgMHhlMmRlNmVhNiwgMHg3OWY4MmJmZSwKLQkweGJmZjZjMjhkLCAweGUyMWU3YzYxLCAweDFhZTIyYmU1LCAweDdiYTg1ZDEwLCAweGI4NjYxMmFmLCAweDMxMzQ5ZWYzLAotCTB4ODcyN2JjN2EsIDB4YmJlMzIzMzIsIDB4NDUxZGQ2OGYsIDB4MDZhMWFmN2UsIDB4MDI0OTFmOTgsIDB4YzdlOGIzZjIsCi0JMHhkZWY3NTQ3YywgMHhlNTgxMmU3NywgMHg3NmYyYzc0YiwgMHg5NWJmMzA1NCwgMHhhZGY5MDMyNywgMHg0ZDU1NGUyNywKLQkweGY5MGY4YzhhLCAweDI3ZTc5OTBlLCAweGNhMmM4NzI0LCAweGZiZTU5ZTU2LCAweGMyMzQzOTBiLCAweDczZWY1MTcyLAotCTB4Y2U5MmJmMWMsIDB4NTI3NTgwZTUsIDB4NmM3MWQ5MzcsIDB4ZjlhYjc0OWQsIDB4MDViNzQzNmUsIDB4N2JkODFjZTgsCi0JMHgxM2JlYzJjMSwgMHg4MWJkZGFiOSwgMHg4NWYwZTFkNSwgMHgxOWY5MTI2NywgMHhhNzZlNzhmMCwgMHgxYmMzODlmNiwKLQkweGFiZjNkMTI2LCAweGNlZGUzNzg3LCAweGM2YTUyZmNlLCAweDIzZTVmOGE4LCAweDJmMjhiMmZhLCAweGUzYTk5MzNhLAotCTB4OTlmNzZkNzgsIDB4YzJhZDYwNGMsIDB4NjQ3ZWE3ZTgsIDB4YzFkNzdhZmMsIDB4NGY2MGQ3ZTMsIDB4OTBhNzNiMDIsCi0JMHgwMGUzOGYyMCwgMHg1YmFkNDQyNiwgMHhjYjE2ZmVkMywgMHg2NTNhNmEyMywgMHg4YzFlMjQ1NywgMHhmMDcwM2VmNywKLQkweGMyMjNlYWZjLCAweDkwMTNmMTAxLCAweDZkY2Y0YzVjLCAweDdjZTlhZGJjLCAweGFkNTNkMTlkLCAweDFiMWU5ODA0LAotCTB4ZGUzZTE0NWEsIDB4MmZjYzViY2EsIDB4YjAzZTFkMTksIDB4MzZmZTg4ZmIsIDB4ZjdlNmJmM2EsIDB4MDJiY2VjMWEsCi0JMHgxOGZiMzI2NywgMHg2ZmY0MjgyYSwgMHhlOGFmZmVjNywgMHhjODc1Y2ExMSwgMHhkY2ZlMDI2ZiwgMHg5YjgzZWVjMiwKLQkweDExYTdjNzdhLCAweDVmN2E4N2VlLCAweDE3OGJjNDc3LCAweDA4M2RkMGVmLCAweDk3MjI3YTkyLCAweGUzYjExN2Q3LAotCTB4MzlmODMyN2IsIDB4ZGNmMzg5YzIsIDB4ZWI5ODlkOGYsIDB4OWZjZjE0OTksIDB4YWYxZTYwZjksIDB4ZWYyMTI1YjcsCi0JMHhiYzUxNjU3NiwgMHgzMjE3YjRmYiwgMHhkZWNmMzlmOCwgMHhlMjA5ZGY2YywgMHg4MTJkYmZhNywgMHhkYmY1YTdkZCwKLQkweGZjZThiOWY4LCAweGU5Y2RjN2ZkLCAweGE1ZGI3NzE0LCAweGFhM2YxNDY5LCAweDQwNWZkZTBiLCAweDJmZDhmOGY3LAotCTB4NzgyYjdlNjMsIDB4ZDYxYmRkOTAsIDB4NzQyZGI0YjYsIDB4MmVhM2ExYzUsIDB4YzVmMWZiODMsIDB4YzhmYmZjNmEsCi0JMHg3YmY4YzVkYiwgMHhmNTEwY2NlMCwgMHhlZTEzMGVkMSwgMHhhMjg1NWVmNywgMHg4Njc5Njc2ZCwgMHhmNDM2ZjkyYiwKLQkweGZmMGJmN2JmLCAweDg1MTJjMGZiLCAweDgxZWYyNWU1LCAweDA3N2JmMGFlLCAweDU0YjAzZjdlLCAweDg1ZmJkMWY4LAotCTB4MWU1YTVlNWYsIDB4ZWQ5NzI3ZWQsIDB4N2VlOWE3ODYsIDB4YmUyYjk5NjAsIDB4YWM0ODdlMWYsIDB4NmM1YzFjYmYsCi0JMHg0NTE2MDdkZCwgMHhlNDQ4N2JjZiwgMHhhM2I5MGY3NywgMHgxMGNhNGY5ZiwgMHhmMjFmMzdmZSwgMHgzMDA2ZmZjOSwKLQkweGViYmU5MDFlLCAweDVjNTgxMzBiLCAweGM0Y2E2ZmJkLCAweGIxYzE3OWI4LCAweGZkZWVjMGNkLCAweGJmZmRjNTdiLAotCTB4YzI4NmY3YTEsIDB4M2FiYzU5ZjcsIDB4MzVmZTczZDEsIDB4MDlkYmYzMWIsIDB4NWVlNzE3OTAsIDB4MTk1ZTI0NmIsCi0JMHhkNzIwZmVmNiwgMHhhODJmYjhiNywgMHg4NjhkMzhkNSwgMHhlNTYwYWZkZSwgMHg2NTJlNzkxMywgMHg5MGIxN2RlOCwKLQkweDA0ZGVmNTdmLCAweGFmOWVmMjJkLCAweGVhOGI2MDM2LCAweGQzNmYzYjdiLCAweGY5Zjg0NjJlLCAweGY0NmY4MTZhLAotCTB4NzNjOGU2ZmQsIDB4NjdiMjlkOGEsIDB4MGJkZDA2NzEsIDB4M2U1OWZiNTgsIDB4YjhiMDFjOGQsIDB4MDhlNTdjODUsCi0JMHgxMTJjNzJiZSwgMHg2ZGNhZThmMSwgMHg3N2UyZTI2YiwgMHg4ZmJiM2Y4NCwgMHg2YjA3N2RmYiwgMHhjYzJkMGE3YiwKLQkweDkyMDM2YWVlLCAweDZhYTNlZTlmLCAweGFjOWViYzgzLCAweGM5ZWJjMDVkLCAweDU3OWU3NmZjLCAweGYyNTA3OGFlLAotCTB4YmVlNjI0YmIsIDB4MDY3ZDEzNGUsIDB4Nzk1YTk2N2UsIDB4MzI3MDM2ZmMsIDB4MWY4MTJmMmMsIDB4N2U3OGE3MWEsCi0JMHhiMWU3ODhiZiwgMHg3ZDA0OWEzOCwgMHg3NzljZTkwYiwgMHhkMjcyNGJhNSwgMHg3OGIxNzFmNywgMHhlYTZhYmU1YSwKLQkweDZmOWVlNDViLCAweDliYzQxZjg2LCAweDE2MzI3ZTQyLCAweGYwY2YzZjQ3LCAweDFhNjMyYjdjLCAweDRjNTcwYmFiLAotCTB4MTQ0Zjc1YzEsIDB4Yjg0MzlhN2UsIDB4ZGQ4OWJiYTksIDB4ZGI3YTE0ZWMsIDB4NDEzYmVjOWIsIDB4YmY2NmJlZjEsCi0JMHg1ZmRmMDdiOCwgMHg3OTIyMTlkOCwgMHhmN2NiMDJmNCwgMHg1YjdkNmRmYSwgMHhjYzFlNzllYiwgMHg4MzZiYzFlZSwKLQkweGRlZmE0ZTA5LCAweGM5MmJiNmI1LCAweGY2ZmQ0MDk5LCAweDU0YzljNDg2LCAweGNlYzk3NjFmLCAweGI0NTdlYzI0LAotCTB4ZjI0MDVjOWYsIDB4ZGZlMzI4YWMsIDB4NjFhOWQ0NjUsIDB4YjRhZTZmOTYsIDB4NWU5MmI2NzksIDB4YTI3YjM4OTcsCi0JMHgzYTBkYmZlZSwgMHg1OGYzODY2ZiwgMHgwOTAyZjZiZiwgMHhlNzZmZTMyNywgMHhlMGM4NWU2ZiwgMHhmOGZlYWVmMSwKLQkweDcxOTM5OWU3LCAweGNmMzZlOWFiLCAweGYwN2JhMjZlLCAweGJhNTU1N2FkLCAweDdlNGVmMzI2LCAweDRlYmE2MTYzLAotCTB4NmYzNjc0ZjMsIDB4MTZjZjRiNDksIDB4ZTgzNTdlM2EsIDB4ZWUzNDNiMGYsIDB4MzY3ZjE1NWYsIDB4NmY4YjIzY2IsCi0JMHg4NjkwN2JlZCwgMHg1MDk3NmY4MywgMHg3M2QwM2NkZSwgMHhjMDhkNDRiYywgMHhmYTNkN2Y3NywgMHg2YmZhMzhlNywKLQkweDViYjA5MzAwLCAweDY5MjU2YjMzLCAweGI4NmZjOGI5LCAweDhmYmI3YjFkLCAweDQxYjlkMjY2LCAweDMxNmZkOTNmLAotCTB4Mjk1MjY3YjUsIDB4YmRiNmQ2MmUsIDB4ZjI5MTNhOTcsIDB4MWFkZTBlOGMsIDB4OTJlOTVkZWIsIDB4ODczMDNjZDksCi0JMHg4OTRhMWZmMiwgMHg0NjY5ZWZhNCwgMHg1ZjAwOTVkZiwgMHhmZjk0MjAwNywgMHhmMWM4OTRjMCwgMHhmYjZmZmZhNiwKLQkweGFlMzg0MTNmLCAweGVjYTI4NmI1LCAweDU2MTM5MGRmLCAweDQ3NTYzZWVkLCAweDdiYjBiNjFlLCAweDg5MjdiYTc1LAotCTB4OTJlYTllZmMsIDB4MmMwY2Y1YzAsIDB4Njc0ZWM4NmUsIDB4NzhmMGJkZDIsIDB4ZjBjY2M1NGEsIDB4MTBjZGY1MDgsCi0JMHg5ZWU5ZGIzNCwgMHhlZmYzMjgzNiwgMHhmZjk5YjJjYywgMHg5ZmY2MmU5ZSwgMHhkMGY2MGU2MSwgMHhjNTMzOTZmNywKLQkweGU4MmNlMmJkLCAweDA2YmVmMzYzLCAweDQwYmFkNjYxLCAweDBmM2I1MzMzLCAweGI3MmRhYzljLCAweDMyYTNlZjA2LAotCTB4OTAxMDM4YWYsIDB4NGNjMWZmNDksIDB4OTU5MmVkYjMsIDB4ZjEwMDdmN2QsIDB4MzcyMjNkZjQsIDB4ZTQzMjVjMzMsCi0JMHgxM2ZkZDMyMSwgMHg5NjJmNWVmZiwgMHg4ZjAyZWI5ZiwgMHhlZmRjNWMzMywgMHhkZjQxMmE1MCwgMHg4MDQzOTY1OSwKLQkweDA5ZGY3N2RkLCAweDFkZWY3MTIxLCAweDU4ZDk4ZjlmLCAweGQ3N2RkMWE3LCAweDg5M2I2ODlkLCAweDM2N2UxZTRjLAotCTB4MjNmMTBlN2YsIDB4NzQyN2UzYzcsIDB4MmMzMzUzMWYsIDB4MjkzZTg4ZDAsIDB4OWViYTY5OTgsIDB4MGM3Y2ViNzQsCi0JMHgzNzViMDI2NiwgMHhlMDc4NWQ3NSwgMHhmYjkxYjJjOSwgMHhkYmQ3Njc0MiwgMHg1MGJiZThlNywgMHhkZjYyZTVjOSwKLQkweGM5YWQzYThkLCAweDA0OTc1NjQxLCAweDdlYzNmZGNkLCAweDM5MjAwZjJjLCAweDY2NjI2ZDczLCAweGY3NzdjOGM2LAotCTB4M2RmNjAxZTAsIDB4Zjc3N2VjNDUsIDB4Y2NlNWVlYzQsIDB4OGNiNGVmOTEsIDB4ZmFmNzNmZWYsIDB4YzQyNmViOTcsCi0JMHhkNTg3MmFjNywgMHg0YTNlMjMyOSwgMHhkMDc3MzlhZCwgMHhjZDM5ZTBmOSwgMHg4ZDM5OTg5MywgMHg5OTZkMDNiZSwKLQkweGZiMzExNmM4LCAweDUzYmNiMWE3LCAweDVjMDkyYWUwLCAweGU0YmZjNGU1LCAweDA3ZmJiZTMyLCAweDM4OWYxNzg2LAotCTB4ODI2NWY2YmYsIDB4OTI1MmFlOWYsIDB4OTE1ODdjMzAsIDB4NDM4ODFkYWUsIDB4NWZhMTlkYWIsIDB4ZTE1OWVmYTcsCi0JMHhlNTNhZjlhOSwgMHg1NjZkNWJiNywgMHgxNjZmZTUyNywgMHg4NDY5MzdhMiwgMHhmZjJiMjZkZSwgMHg3ZWY4YzFlZSwKLQkweDRkOGU1NjJiLCAweDY2M2U4MzI4LCAweGNiMmI0ZTdmLCAweDYyOGZkNzhiLCAweDZiOGYzNGY3LCAweGIyN2ZiZjljLAotCTB4ZmQxMGE2NzgsIDB4MWJjY2E3OGYsIDB4ZDE2ZWY5NDUsIDB4YjE2NGU2MmYsIDB4MzBlNTFiZmMsIDB4ZTk4MzkwYzcsCi0JMHg4MGU3ZmZjNiwgMHgzYzkxOTc3YywgMHg4MTdmZmY2MywgMHg4MDJhMmZjMSwgMHg3MjEzNDY4MSwgMHg0OGQ3ZjgzNCwKLQkweDVjNmYxNDNmLCAweGJmNDMxZmE4LCAweGQ5NzIyMzc5LCAweDU3ZjljODkxLCAweGYxOGY0YmU4LCAweGVjOWQ1ZGVjLAotCTB4ODM2Zjk2MzQsIDB4Y2YwNWZmYmYsIDB4MTA3ODUwNzMsIDB4MDAxMDc4NTAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3YzBiLCAweDczM2VmN2I1LCAweDk5OTMzMzFlLAorCTB4NDIwZjI2NGMsIDB4MDg0ZjAwNDIsIDB4MjE4NDJhMjAsIDB4Mzg4ODA4NDAsIDB4OGQwNjkwMDksIDB4ODgwODA4OWEsCisJMHg0MjAxMDBjYSwgMHhhOTExMzI0OCwgMHg2NzZkNWU5NywgMHg2YWQxMTQyMiwgMHhhMzZkMmQxYiwgMHg0MTAxZGE5NywKKwkweDE4MGQ0NWEzLCAweDFkMDM0MGU4LCAweDVhYmM0MTRjLCAweDViNGEwYThkLCAweDNjMzE0MWI1LCAweGU4Nzg0OTBhLAorCTB4ZWY1YmQ2YzUsIDB4MzNlZjZiNWUsIDB4NDI2NjczOTksIDB4ZmRkZmI2YTIsIDB4N2YxN2RmYmUsIDB4ZWNmYjM2ZmUsCisJMHg3YjVlZjY3MywgMHg3YjVhZmZhZCwgMHgyMzFmYjVlZCwgMHhkMzEzYzY1OSwgMHgwNTdjODQxNSwgMHg3MjEzZDc3ZiwKKwkweGY0ODQyNDQ4LCAweDBiM2I0ZWViLCAweDEwOGUzYTY4LCAweGIwMzk4ZTdmLCAweGI0MjQyMDU1LCAweDI0ZWRlZmVmLAorCTB4NGRiMzkwODUsIDB4MjY3MzU1YjMsIDB4OThjN2ZiMjEsIDB4ZjJkM2Q3NDMsIDB4ODBmYzgxYjMsIDB4ZGQ0Zjk2OTksCisJMHhkMTIxYzQ3OSwgMHg1MTRlZDU3YywgMHgzZWQzNzI4MiwgMHhiMWRmN2UyYiwgMHhkZTQwMDg1MSwgMHhmMWZkNmU2YiwKKwkweGI1ZGYzNGI1LCAweDY5OWIyNDUzLCAweDM3NjQyNGQ1LCAweGRhNDI1NDkxLCAweGE5ZmQ4NDJkLCAweDZhNWY5OGYxLAorCTB4NGRhYWQ5NjUsIDB4ZjY4MmVmZmIsIDB4NjI2NjgzY2EsIDB4MzdiN2RmYTUsIDB4YWZjODZlODksIDB4MDgwNDJhZGMsCisJMHhmNzZhYWY2ZCwgMHg1YTAwY2E4MywgMHhkMDgwYjJkZiwgMHg3ZTY5NTU2OCwgMHgxYThhNjNlYiwgMHhmYjAzYzg0ZiwKKwkweGIzNjhlY2ZlLCAweDY3ZGE3MjEzLCAweGZkODJhYTIxLCAweDQ5MWM2ZjI4LCAweDdiNjA0NTQ4LCAweDdkZmEwMGUxLAorCTB4NjVjMTM2YzUsIDB4NmM1N2Y1YTIsIDB4ZjQwMWQ3M2MsIDB4YzNjOTM0NTUsIDB4OGFkZjVhNDQsIDB4NDc1MTFiMDYsCisJMHgyMmJmYjZiMCwgMHgwN2NiNWVkMCwgMHg3OTRlZGVkOCwgMHhmZTU3YjQyOCwgMHgxMTBhM2RlNSwgMHgxYmIyOWZhMSwKKwkweDc0YTJhYmJlLCAweDc2YjViZjQwLCAweGIxZWFmYjRmLCAweDU1OWY4ZDNkLCAweGU4ZjZkMWNmLCAweDBhMmZkNTdiLAorCTB4YjU2MmU4MmUsIDB4OGU4MDc4ODksIDB4YjlkNmRkOGUsIDB4N2ZhMWRiNGYsIDB4ZjhmMGNhYjUsIDB4ZGMyYzdlYzgsCisJMHgwOGE4ZmQwNSwgMHhlZDBhNTI2YywgMHg2NTI2ZGY0MCwgMHhmYWVlYzhlOSwgMHg4N2ZjMzQ1NiwgMHhhY2ZhYmU5ZSwKKwkweDcyODg5ZWZlLCAweDQ3ZGE3YTYzLCAweDNiYmMzYTU5LCAweGJiODg0MTVmLCAweGE0NGJkNjkxLCAweGFhM2E1MjgwLAorCTB4NDIwN2Y5ZmIsIDB4YTFlMzIxMjIsIDB4OTZhODkxN2UsIDB4ZTRhOWZhZWUsIDB4MjNmZTA3MTEsIDB4MGY5NDlmZjQsCisJMHg4MWYxYmRmZSwgMHg3MmRkOTlhZCwgMHg5OTA0ZTk1YiwgMHhiY2VkY2I3NSwgMHhlYTUxY2I5MywgMHg1ZmFjOGRjYSwKKwkweGYyMGM3ZjRiLCAweGY5ZDRmNGEwLCAweGVlM2U5ODljLCAweDgzNzRjMzRiLCAweGZkYmU0NTRmLCAweGQzMDIzN2RjLAorCTB4OWYwYjlmN2EsIDB4YzNjYmU5M2YsIDB4OGRjZmEzNzQsIDB4MjJiZTUzZTksIDB4MTJiZTAzNGMsIDB4NmZiMzZmN2MsCisJMHg3YzViYTYyZSwgMHg4Y2ZlN2MxZSwgMHgwNmQzMWNhZiwgMHg3ZjNlMGQ1ZiwgMHhkMzFhYjdkZSwgMHgzZTNmM2U2ZCwKKwkweDFlYjdkMTdmLCAweDFkNWY0NmQzLCAweDVlNDAzYmE2LCAweDA1ZjI2ZDM0LCAweGJlNWRiZGYwLCAweGJlODM0YzA2LAorCTB4YzdiZTdjNDYsIDB4MTFmNGM0MTcsIDB4NjRjNzQ3Y2UsIDB4M2U1MTJmOTIsIDB4NDljNGRjMzgsIDB4OGE5MjRlYzUsCisJMHhjZDMyZjlkZCwgMHg3Y2IwOTUyNywgMHg3Y2ZlMWRlYSwgMHgzZDUzZTY4NSwgMHgzMmY5NGYzNCwgMHg2Zjk0MzJhMCwKKwkweDM1MDFmOWE2LCAweGZkZjA3Y2FjLCAweGYzNDJjMGE0LCAweDdjYWNmZDgzLCAweDAyZWUyM2M4LCAweGE5MGZjZDJiLAorCTB4MzdjM2U1NjMsIDB4NjhlMjBiZmEsIDB4OTU4MDc4N2UsIDB4NTQyZGJkNWYsIDB4YWJmOWEzNjAsIDB4NzY3OTU5MWIsCisJMHhhNzZhOTkzMywgMHhjYjEwZWNmOSwgMHg5ZWUxYmNlNywgMHgzOWYzNGYxYSwgMHhmYjlmMmNhZCwgMHg4M2FhN2Y4MSwKKwkweGQ4ZGI3M2U2LCAweDA0Y2U5M2Y3LCAweDJkMWVkNTQ0LCAweGJhYjIxZDg3LCAweDZkNTk1MDk4LCAweDRiNzBjZmY0LAorCTB4NTE1ZTY5MTMsIDB4Y2EyZTIxZWYsIDB4NmVhZGZmMWYsIDB4NDNmMjlkMjksIDB4Yzg3OTYzNzYsIDB4OWJjYjFmM2YsCisJMHhiZjk2MzcxNCwgMHhmY2MzMmZlMywgMHhlNTgzZDkyZSwgMHgyYzU1ZmRjNywgMHhmY2IwNzhhZiwgMHg5OGJkZmY3MywKKwkweDJjN2VjYTBmLCAweDU4ZmFkNGI3LCAweGY5NjNmMTVlLCAweDU4ZjVkYTgwLCAweDgwMzkxZWZmLCAweDFmNmIyM2U1LAorCTB4NGEzZGYyYzMsIDB4NWYxZmNiMDAsIDB4MWE3YmE0ZmIsIDB4M2MxMWFmY2QsIDB4ZDIzYzA3M2YsIDB4MDE2NDljYjQsCisJMHg0YWQzMWE5ZSwgMHgwOWQ2OWUyOCwgMHhmN2UwMmU2NCwgMHg4YTNhMDAwNywgMHgwYWU5NzVjYiwgMHgzZjhlZTFlYSwKKwkweGZhMGQzZWU0LCAweDkwMjk3ZjhiLCAweGMzY2NmYTVmLCAweGFmZmRmODk5LCAweGQ2OTkxZWIwLCAweDRmNWVmNjIzLAorCTB4YmE3OTliY2UsIDB4MmNkZTcyN2EsIDB4ODA2OWVhZDcsIDB4ZmI1OGQ2ZjcsIDB4Mzc4ZWNmNTYsIDB4NzllOWU5MjcsCisJMHg2N2FiNDJiMywgMHhkZjEzZDIzYiwgMHhiY2U1N2ViNywgMHhjZjRmNTkzNSwgMHgzZDVhOTU1YiwgMHhjNDllOTA3YiwKKwkweDc0ZDNkMWJlLCAweGE2OWZjZjQ0LCAweGI0ZmU2MTIzLCAweGZhZmQzZDIwLCAweGY3YjhjZjQ2LCAweGY3MTlmY2Y0LAorCTB4NmYzZjk4NWUsIDB4N2RlOTNkNjAsIDB4M2RlOWE3YWIsIDB4ZGU5YTdmM2QsIDB4MDhlN2YzMGIsIDB4ZGY1MDZiZjYsCisJMHg3ZGVlMzVmYSwgMHhiZGM2N2YzZCwgMHg0N2NmZTYxZiwgMHhkZjY2NGY0OCwgMHhhMWY1ZDllYSwgMHgzZWJiM2Y5ZSwKKwkweDA0ZTdmMzBjLCAweDZmYWMzM2Q2LCAweDQ4ZmRjYWZkLCAweDhmZGM5ZmNmLCAweGMyZTlmY2MyLCAweDViZWFhZTdhLAorCTB4ZDIzZWJiM2QsIDB4NDdkNzY3ZjMsIDB4ODE3Y2ZlNjEsIDB4NWJlYThjZjUsIDB4YTJmZjcyYmYsIDB4NWZlZTRmZTcsCisJMHgwOTMxZmNjMiwgMHhiZTk4Y2Y1MCwgMHg1NGZjMTNkMSwgMHhhN2UwOWZjZiwgMHhiMGQ4ZmU2MSwgMHhhMzdkZjE5ZSwKKwkweGNmNWRhZjI3LCAweDMwZjZiYzlmLCAweDkwMDQ1MjdmLCAweGQ1YmVjNGZiLCAweGYzZDc2YzEzLCAweGU2MWVkODI3LAorCTB4ZTdhYzIwY2YsIDB4MmJmNWJlYmEsIDB4M2Y5ZTg0ZWYsIDB4ZmNjMjI3NzksIDB4Y2FmZDhlMTksIDB4ZjQwZjdhYTcsCisJMHg3YzRmNWExMCwgMHgzOWVjZjVjZiwgMHg5ZWNmZTdhYiwgMHg4Y2ZlNjFiMywgMHhkM2E2N2FjNiwgMHhhZjdhYjI3YSwKKwkweDllODc1MjY3LCAweGMyM2E5MzNmLCAweDdhYzNjOWZjLCAweDllYWRmNDY2LCAweGZlN2ExZDNkLCAweGYzMDhlOWVjLAorCTB4NzNmOTFmMjcsIDB4MzVmYWRmNTMsIDB4OWZjZjUzYTksIDB4M2Y4YzlkNDksIDB4NGNkNzBmNjMsIDB4M2E3MmQwNzUsCisJMHhmYTQ0YmExNiwgMHhkYzY3YjVjOSwgMHg0NWU2ODE2ZSwgMHg0ZThiY2IyNywgMHg0NGJmMDExNywgMHhkMjBkZmNkNCwKKwkweGY3ZTkxNmVhLCAweDM5ODk2ZGY2LCAweGJmNDg5MzBmLCAweGZhMTRhMGEzLCAweGIxYmQ0ZjE1LCAweDIxMjNiZjQ4LAorCTB4ZTdlNzRlMmYsIDB4NzQ5M2JhMjQsIDB4MDFhMmU0ZjksIDB4OTVmYmY3YmEsIDB4Zjc5NWQxMGMsIDB4YWViNTdiOWYsCisJMHhhMzkzZGQzYywgMHg0Zjk0NjdjYiwgMHhhODNmYmRkMiwgMHhiZjk3NDBhNiwgMHhiYTBkZjU2MiwgMHhiN2ZkMzNmNywKKwkweGViNTlmMmVhLCAweDNmYmRkNzZmLCAweGFlOTE2ZWFjLCAweDBhZmFjYWZjLCAweDgxNTVmOTVkLCAweDM1ZmNiYTk1LAorCTB4N2JhZWZmMGQsIDB4MDNlMzU0N2YsIDB4YzFkMWYyYmEsIDB4NjNlNTc1ODcsIDB4ZjJlYjhmNDIsIDB4YTkzZDBmNjMsCisJMHhlYjdjN2Y3YiwgMHg4NGY5NWQ2NiwgMHhjYWViY2ZhMywgMHhkMGVkYjYyNywgMHhiOTNkYWZlNSwgMHhkOWU3ZTBjNywKKwkweGYwZDdlZDlkLCAweDI3YjgwOGJjLCAweDU3NGZlZmNjLCAweGM1MGJkZmQwLCAweDA2NTc5ODJiLCAweGRmOGZkMWQ4LAorCTB4M2Q1NGJmMWYsIDB4YmNhYmU1NGUsIDB4YTE0ZDU4YjIsIDB4MTI5OTA1ZjIsIDB4MGZlN2FlM2EsIDB4OGRiMmJmMjgsCisJMHg5Mjc3YmYzZSwgMHg3ZDI3NGFlNywgMHgxOWUyYWY3ZSwgMHg5ZmUxOGNlZCwgMHgyNDA4M2M1MiwgMHgwNGQ1NTIwZCwKKwkweDQxZmNiMWE5LCAweDIwYjFlMTk5LCAweGM3ZTFjYmUzLCAweDUzNWVmN2U4LCAweDlhNDRmMGQ3LCAweGQ3ZTYyZmVmLAorCTB4MTI5ZTVlMDMsIDB4MzhkMzg4NGMsIDB4N2JjMGQ0OTEsIDB4ZjM4MjY2NzEsIDB4NzMzMzA3ODIsIDB4ZTA0N2Y2OWYsCisJMHhhYTIwZmQ3NSwgMHhiZDc3NDI4NywgMHgxYTRmNjVlYiwgMHg2YjliMTlmOCwgMHgxZjgzZjZkZiwgMHhlZDEwNmViMiwKKwkweDllNDIwMGQ3LCAweGY5MGVkZTE2LCAweDA3ZWZkMjg3LCAweGQwZjM0ZDJkLCAweGY1MGFjY2ZhLCAweDU3ZGIyM2QzLAorCTB4YjEyM2ZiNjgsIDB4ZmY2ODA2ZmQsIDB4MzdkYTFlYzUsIDB4YjVkM2M5MGYsIDB4YWU1YzE5NmYsIDB4ZDBhMmRmNmIsCisJMHgxZmQ0OWRmNiwgMHg2ZjIzZmRhOCwgMHgxMjYxMGE5ZiwgMHg3ZjBiMmYyMSwgMHg4M2NkZjZjNCwgMHgwN2ZkYjFjYiwKKwkweDg5NWYzYTE1LCAweGRjMmUzZjZjLCAweDc3ZjQxMDdlLCAweDNlM2ZiNDFmLCAweDRjODdmZjQ2LCAweDcwN2ZmN2QyLAorCTB4MGFmZmJlODUsIDB4YjUyYmZmZWIsIDB4NzFmYjc4YzcsIDB4ZTExNmZmZDgsIDB4ZTBmZmViMTgsIDB4MzM3ZmQ2MGEsCisJMHhiZWRjMzdhYiwgMHg0M2ZmY2MyMywgMHg3YjM3ZmZkMCwgMHg2NGQ2N2ZlYSwgMHhhOGFmZmY3ZCwgMHhjY2RmZjdkNCwKKwkweGY2YTc3ZmRhLCAweDhlZGY2ZjE0LCAweDljMmJiZmVkLCAweGEyYmZmZDYyLCAweGNjNTdkYjEyLCAweDQ3ZTAxNzFlLAorCTB4MDlhYjg4YzksIDB4NDBjOWY2ZDAsIDB4MDNmYTk4NmEsIDB4OTAzYjY4NWMsIDB4YTBhMjQ4OGUsIDB4NjE1MWU0MjYsCisJMHg2ZjcxZDIwOCwgMHhlN2RiYzMxYywgMHg2ODZmMTQ3MSwgMHg5Y2Y4ZmM2ZiwgMHhjYjY1YTgwNCwgMHg4ZTJlZjNhNSwKKwkweGYyZGIxNWY1LCAweDU4NGJiMDE1LCAweDRiMmJlNzRlLCAweDQxNjVhOTM4LCAweDM2NGRmMTExLCAweDI4YzMwMzk4LAorCTB4ZDE0MTFkYmQsIDB4MGRiMmY5MGYsIDB4ZmVjMDA1ZDcsIDB4NDE2NGNkNzksIDB4OTEyNzdjMDksIDB4ZjRmZjNjMTAsCisJMHg0NzM2YTM2NywgMHgyZTk4Y2JmNiwgMHhkYmRiOTNhOSwgMHgzYzJkZjQyMiwgMHgyMzIwMmE4ZiwgMHhkMzdkMjg2YSwKKwkweGJiZTMwNDAxLCAweDc5ZDMxZmYzLCAweDhiZjNhMTEwLCAweDgzM2NlODBmLCAweDIyN2U0ODUwLCAweGEyM2VmNmIzLAorCTB4YjdjODI1ZjMsIDB4OTQxMmY5ZDEsIDB4ZGY4YjUyMTMsIDB4YTcwZWVhZDEsIDB4Mzg0YmZhNTEsIDB4NGM0YjFmZmQsCisJMHg0M2JlM2Y1ZiwgMHg3ZWE5ZjgwOCwgMHgzMWJkZmU3ZSwgMHhiMDVkNGYzOCwgMHhkZTk5NDZkYSwgMHg3ZjQyYzc0ZCwKKwkweGZiNGYyZWIyLCAweDc1MzkwN2U1LCAweDM2MDczNmVkLCAweDE1NWZjODBiLCAweGFhOGE1NWY4LCAweGY1ZTJjODQ5LAorCTB4ZGRkNzk0MTksIDB4YzU0ZmJmZWYsIDB4N2Y1OTRlOWUsIDB4ZmRjYjcxMWIsIDB4YWU3N2ZiZTksIDB4NjkzOTA2MTIsCisJMHhlNmRkYjNiYiwgMHhiODRlMzYxYywgMHhkN2E4NGMzMywgMHg0Nzk0YzMyNCwgMHg2MzRkYWRjOCwgMHgyOTAzNWE2NCwKKwkweGI3MWZjYjc1LCAweGIzM2JiNDQ1LCAweDVkOWY5ZjQ4LCAweGM4NzdjZmEyLCAweGU5NDRkOTZlLCAweGM4MTUyOGVhLAorCTB4OWNlZjVhMjYsIDB4YWQ3MmZhYjksIDB4ODkyOWJiMWQsIDB4NTdiNzk5YzksIDB4OWJlOGNhOTIsIDB4M2MwZTY5MDMsCisJMHhlNzljYTI3NiwgMHgxYWI3ZDkzYSwgMHgzMmM1ZGUzZCwgMHgzYzgyYzI5ZCwgMHhjODA4ZmRmZCwgMHhlZjgyOWZkNSwKKwkweGZkNjRlZWRkLCAweDU3M2JkMjM2LCAweDY4NGJiOGI2LCAweDE0MmVlNzNmLCAweDIzNmY4MDAzLCAweDY3ZGE3ZmZkLAorCTB4NjliMjliNzMsIDB4MzJhN2ZlYmEsIDB4YzdmNzQ1MzEsIDB4OGYzY2ZmNDgsIDB4MzI4ZDNmYjEsIDB4Y2JmM2MzOGMsCisJMHg2ZTE5Y2Y4ZCwgMHgzZmZjYjlkYSwgMHhmNGQwN2MwNiwgMHhkMjgzZTAwNCwgMHhhM2UzOWM3ZiwgMHg3YzMyYWVkYiwKKwkweDliOWVjZDc4LCAweDRmNWQwZjAxLCAweGNhZTUwNDg4LCAweGM3MWI3MmYxLCAweDNkM2E5MmNiLCAweGM4ZjEwODJlLAorCTB4NzM2NWM3MjAsIDB4MjM4NzljODUsIDB4ZTM4NzMwNzAsIDB4MWViZDU5NjAsIDB4YmYxMjc3MzcsIDB4MmU0MzFlOWMsCisJMHhmYTZjMzZmMywgMHhkZDFhOWE2MSwgMHg2ZTM5MGZiZiwgMHgxZmIyM2ZlNiwgMHg0ZmRkMTNmOSwgMHhiOGJiYTcyNiwKKwkweGQxYWNlZTljLCAweGU1YzZkZjk3LCAweGViOTcyNzdhLCAweDBlYzdmYWRjLCAweDZlNDFmMzUwLCAweGU4MzIwMzU3LAorCTB4NGQzZWY3YmIsIDB4NzkzYTZkOWUsIDB4OGQzY2I4N2EsIDB4ZTVjNWRlNzQsIDB4OThmN2Q3NzksIDB4YjZmNDhkM2MsCisJMHhkNWI2Nzk3MSwgMHg5MGM5OTA1ZiwgMHhmNDhkN2E2OCwgMHhkNTFkNTgyZCwgMHhiOWU0MDUxZiwgMHg5ZTViMWZkMCwKKwkweGYyN2U2MGRlLCAweDU1ZTc4OGYxLCAweDhmOTIzMzhkLCAweDhhZDllODQ3LCAweDdlNWQ1Mjg2LCAweGVlOWU2MDc5LAorCTB4MGJmNTY1ZmQsIDB4ZWE0YmU1NzUsIDB4MTdjYWViOTYsIDB4OTc1YmJmYWYsIDB4OWVmZmU4NWYsIDB4YWIwNWZkZWUsCisJMHg3N2U1NzU2YiwgMHgyYmE0M2NkNiwgMHg5OGZlNWY5ZiwgMHhmM2NmM2YyZSwgMHgzOWZkZWU4NCwgMHhjYWU5Mzc3MywKKwkweGE3M2M5NzY3LCAweGI0NTk5ZjJiLCAweDc1MmY5NzVkLCAweDZmYmRkNmVmLCAweDJkZDU3N2RhLCAweDhlMzdjZjgwLAorCTB4ODlmYzA0ODgsIDB4MzAyNzVjY2YsIDB4NGI5OWY4MmUsIDB4YzczYmMxNzYsIDB4YmFlMjJhN2QsIDB4ZDMwMjM3ZGQsCisJMHhlMjE3M2U5MywgMHgwZjJmYjRmZSwgMHg4YjYwOGVkMywgMHgzYTA5YzYxZCwgMHg4OTI1MmUyZSwgMHg2ZTliY2NkNCwKKwkweDEwM2Y1ZGFlLCAweGUzODI2OWM2LCAweGFjZDMxNmU5LCAweDQyNjRmZjVhLCAweDkxNTI2ZDdlLCAweDBhZjVjNWRmLAorCTB4NDQyNThkMDksIDB4ZDM4NmMxODAsIDB4OTQ0NjI1ZDEsIDB4NWU1MmY1YjcsIDB4NzI3ZjBkNGYsIDB4NWI3MTc5NzQsCisJMHhjN2RlZTdlYywgMHg4Y2UxNWUxNywgMHhkNmU5NzcxMSwgMHg3ZTAxOTI1MywgMHhiYmY3Mjc0ZiwgMHgwMjk1ZTU4ZCwKKwkweDRlN2M4OTI5LCAweGQ3YTgwM2M4LCAweDViYjhmOGU3LCAweGFmZmQzMGE5LCAweDQwNWU5MWRjLCAweDBkMGY5MDFjLAorCTB4N2I1Y2I5YWYsIDB4ZmRlNDE0OGQsIDB4M2E1OTI3MDEsIDB4N2Y1NjVlM2QsIDB4MTNiZWNlOGQsIDB4MDNmNmNhODgsCisJMHgzZGQ1OGRiYywgMHhhZDcwZDE1ZiwgMHhmYjMzYmJlZSwgMHgxYWJiYTQ0NSwgMHgxODQ0YzU2YywgMHgzNzVlNGIxNiwKKwkweGI1MGUxZDgxLCAweDBhMzk5ZTBjLCAweDYxYmY3NGU4LCAweGQ4MmE3MTgyLCAweDMzYzJmZDBmLCAweGUzZTRhMmJlLAorCTB4MDRhZmM4MTIsIDB4YjliZTkzZDMsIDB4M2NmYmI2OTgsIDB4OTVmNzFlOTgsIDB4YWZiMWZhNjMsIDB4ZGYzNmQzMDYsCisJMHhmMjNmNGM2YSwgMHhjMGZkMzFmOSwgMHgzZmQzMWViNywgMHgzZDMwZWFmOSwgMHhmNGM3YWJlYSwgMHhkMzAwNWYzZCwKKwkweDRjMDZiZWMzLCAweDYyMzVmMWRmLCAweDYyMGJlYWRhLCAweDYzNzNlMWRhLCAweDZmNWRlOWFhLCAweGM3YzkzYmI4LAorCTB4YmY4MGQzZTEsIDB4NzhlYjM4MTgsIDB4ZmFlZDU1NjAsIDB4M2IzOGRkYzksIDB4ZDZhZmJhNmYsIDB4Y2Y5YmIwM2YsCisJMHg4ZTY2ZjVjNSwgMHgxZTFkNTQ4NywgMHgzMzYwODBiZSwgMHhmMjk3YWNlMiwgMHhiMGUzOTk3YSwgMHg5NzYzZWZhNywKKwkweDZiZmYzNzdiLCAweGM0ZGUzNmYwLCAweDhhNmZjY2ZjLCAweDY1M2M2ZWI3LCAweGQ1OTRmMDE4LCAweDg5ZmE5ZTFiLAorCTB4MzRmMWJiZTMsIDB4N2U2NGU0ZGUsIDB4OGZkM2M3MGYsIDB4ZTYzMTFmYTAsIDB4ODRlMDA1MTUsIDB4ZDdmMDhiZjQsCisJMHhhNzE2MzZkYywgMHhkNDA5ZWJlNiwgMHg2YTcxNjU1MywgMHhmYTFhZjZkZSwgMHg3NWZhMmI2ZSwgMHg2ZTMwMTE4MSwKKwkweGI3ZjExZjljLCAweDNmODcxMGUxLCAweDI3NGNkNDdmLCAweGNmZjczZDdkLCAweGY5OWU5Mzg4LCAweGNkZjljNmVlLAorCTB4YmMxZDAwZDIsIDB4NWI5NzQ2YzYsIDB4YWQ1ZjE4ZTMsIDB4ZTg0NDUyMjYsIDB4YjBkMGY2YjgsIDB4NDY4YjVjNjcsCisJMHg0OTIyNWU2MiwgMHg1NWMwN2RmMCwgMHg1ZWEzMWYxYSwgMHg3ZjAzMmJlYSwgMHg5YWViZTM3YiwgMHhhMWIzY2ZmOCwKKwkweGZmMjdmNmJlLCAweDc4ZTkwYjllLCAweGUzOTdmMzEzLCAweGRiZjQ0NDVhLCAweDE3NjllODQ5LCAweDJlM2MzN2YwLAorCTB4MTA2OTVkOTksIDB4YTYxYWVlZGYsIDB4MDg2ZmQxMzgsIDB4ZjNmY2Y1ZDgsIDB4Mzc2ZTdjZDMsIDB4M2NhMjFlZmYsCisJMHhiNzcxYzU2YSwgMHgzN2Y5MGQyZSwgMHhlOWUxZjNmNCwgMHg2ZjVmZTA3ZCwgMHg3ZTM3YmRmNiwgMHhmODBjMGEyZSwKKwkweDM3YjNmMDk3LCAweDVkOWJkOGZiLCAweGM1ZjU2ZTI0LCAweGU3N2ZlZDIwLCAweDBmMzk1MWJlLCAweDg3MDc2MGFiLAorCTB4MGY1YTc5YjAsIDB4YTVkNmQ2ZmMsIDB4ZmY3Y2Y0OGMsIDB4MzNiOGUyNmIsIDB4ZWI3MWMzNTUsIDB4ZjlkYjQyNjAsCisJMHhmOWNiZWI4OCwgMHg0MDEzMmJhNiwgMHg5YzFlYjQyZSwgMHhlNGVkNzQxZiwgMHg3MjJmN2U3ZSwgMHhhZmE5OWIzZCwKKwkweDJmYWM2YmNmLCAweDY4YzIyMTQxLCAweGEyYmM2ZWRhLCAweDZhNDIwNDkwLCAweDIyYTNjZjQ0LCAweDZkNWM2ZmNlLAorCTB4ZWMxYjg4N2UsIDB4YThkNmI5YjMsIDB4ZmQzYzZmMzAsIDB4MWE4NTQ4NjYsIDB4ZjM4NWYxZjUsIDB4YzA3NjllODcsCisJMHg5YTY1NmMzYywgMHg4NjNjNzljOSwgMHhhYWI0YjUxYywgMHg4ZjY5ZDMzMSwgMHhmNTA0YWY5YywgMHg0Mjc1ZjNmOSwKKwkweGU3Y2UyMzUxLCAweGEzNTk4NGQ0LCAweDNhNzE5YzYwLCAweGJiMDUwZjhmLCAweDU2YTk4NjlmLCAweGM1MzRjYWNmLAorCTB4ZGRkYTljNzksIDB4MDk1OTBkZDMsIDB4NjAxN2ZlNmMsIDB4MjI1YjY0ZjYsIDB4M2VkMzliZGEsIDB4Y2ZmZmJlMGIsCisJMHg3YWE3YTdhNiwgMHg2OTA4N2EzNCwgMHhjMDU4OWYyMiwgMHhhY2IyZDM5ZSwgMHg1MWVmZGY5ZSwgMHgwYThiYTQxZiwKKwkweGIzNDkzN2M0LCAweDM3Y2MzOWZjLCAweGFmZmZmNGFkLCAweDEyYmQ0MDg2LCAweGJkN2FiNWU2LCAweDNjZGZhMjhkLAorCTB4ZDM2ZjllMWEsIDB4NTNiZjQ3YjUsIDB4Zjg1N2I1YjUsIDB4OTNiZDY3YWUsIDB4N2I4NmJiNDgsIDB4Zjk1N2JmMmEsCisJMHgwNjhhZjBmYSwgMHhjN2VmNTNhYiwgMHhkZWYyZWEyNiwgMHhlNzUzYmE2MCwgMHhjMDNmYzJkNywgMHgyNDExYWY3MSwKKwkweDg3MjU1ZmMwLCAweDVmNjRhNzVmLCAweDBjZGE3ODBmLCAweGJmOTg0M2MxLCAweDJhYmRlYzA4LCAweDUxZTI5YjRiLAorCTB4MDE1YTVkNTEsIDB4MzRmMjhiOWYsIDB4ZmU3M2FiZmMsIDB4YTlkNGVkNGMsIDB4N2EwMjY1ZDcsIDB4NTRhNGJlNDYsCisJMHgyMGE5ZjJlNSwgMHg0YzQ0Y2RlMiwgMHhiZjk4YmYzNCwgMHg0NTY5YThiZCwgMHhhNzViOGMzMSwgMHg1MGZlNmM0YywKKwkweDMwMWM0YTQ2LCAweDc1MjcyZTNmLCAweDNkNGYxMGI5LCAweGEwNDU0YzRiLCAweDNiYzk2NzlmLCAweGZhMTFiMThlLAorCTB4YjA1NDRlNzgsIDB4ZjVlYmM1ZDIsIDB4ZGY5ZDNjN2UsIDB4ZWFjYmYyZWIsIDB4ZTRhNWY5ZjUsIDB4MDc1ODU0ZDYsCisJMHgyNjQxYmE1ZiwgMHg4NmVjMDEwMSwgMHhlODk4ZmNiZSwgMHg5MTk3N2FjNCwgMHg2ZTMwNzU5YSwgMHhiYmM3OWNmZiwKKwkweDk0ODkzOTE2LCAweGZhYWJlOTQxLCAweDE3NzMyZmNkLCAweDg5MmUzYTUyLCAweGQ2ZDVmYzZjLCAweDMxMjc5NzcxLAorCTB4MDU2NjJiZmEsIDB4ZmY3ZDM3MTQsIDB4YjdiMWE2OTMsIDB4YmY0NDBiNTEsIDB4NzU4M2FjMGYsIDB4NzEyOTdmNmQsCisJMHhmMmQxMjU2ZCwgMHgxYmY0YmFmYiwgMHg4MWZjZDVlOSwgMHg0ZTY0ZjVhOCwgMHhlMDgzNGE0NywgMHg2M2IwYzQwZSwKKwkweDNkMzAyNDhhLCAweDZhZWVmNmUzLCAweDgzOGJhOWM5LCAweDIyM2U0MmU0LCAweGYxOGRmMjBlLCAweDc4NzQ0Mjk0LAorCTB4MDY3YTJjZGEsIDB4N2UxOWUzNGIsIDB4ZDQ4MjBmMDAsIDB4NGRiZTc4YTUsIDB4ZjU1MTY5ZmQsIDB4ZmJmNTJkNWYsCisJMHg5MDNmZDYyNywgMHhhYmFiOWZkNiwgMHg0YTlmZjczZiwgMHhmYTI4ZDBmZiwgMHg1ZmQ1NjIwYiwgMHg3NjE3OWJmNSwKKwkweGE5M2RhOWY5LCAweDBlNjdlOTc4LCAweDUzYzljNzQyLCAweDhiYWE1ZDUyLCAweGViNzJiNWNhLCAweDlhNmUxZDBmLAorCTB4MGVmYzk0OWUsIDB4ODBhOWViYzAsIDB4ZGU0YjE0NTgsIDB4NzZmMmMzYWIsIDB4YmI4ODA1ZGIsIDB4ZmQ2OTNmYzEsCisJMHgxMWZmOWZhNywgMHhkZjNlMjNjNiwgMHg5ZTMxM2IyYSwgMHg5OTBlNjBkNiwgMHgzNzU2M2VhOSwgMHhkOTI2MmYyZCwKKwkweGYyYzYzZjk4LCAweDIxMTM5ZTBmLCAweGFmZTNkNDFmLCAweGE1OWZkOWUyLCAweDhhMGFmZWMyLCAweDBhNWYxZTE0LAorCTB4YmQ1YjNmYTEsIDB4MWM0MmQzZTUsIDB4ZWExNzQ4OWYsIDB4NjgzYmYxOTEsIDB4ZGExMjUyZmYsIDB4NDI0YTg1YmYsCisJMHgxM2E1Mzk3NCwgMHhjZTVlMDRlMywgMHg4ZmQzNmYxNywgMHhmODBlODljZSwgMHhkZmNlMWI1NywgMHg3Mzk3ZWY4ZCwKKwkweDE0Yjk3NGZmLCAweGEzNmVkMjlmLCAweDI2NDA5ZWZmLCAweGY4ZDQzZDgwLCAweDNmY2MwMjQxLCAweDJmZGNmMzVkLAorCTB4N2E1MThmYjIsIDB4ZGQ3OTZjY2UsIDB4NDlmMDQ0MjEsIDB4OGRmM2EzZDMsIDB4NDdiNTdmOGIsIDB4NzZkZWQ5ZWQsCisJMHhmNDhiM2Q1MCwgMHg0YWYxYjQ4MywgMHhiYWJmNzIwZCwgMHg3Mjk1YTU5OSwgMHhkNTJkNzFjOCwgMHhiMjRkY2FmYiwKKwkweDU3MWY0ZmNiLCAweDMzZjRmMGJlLCAweGYzMWM0MjRmLCAweDMwZDc2NjhmLCAweDE3OGFmZjVhLCAweDg5MzdiYzBlLAorCTB4OTc2YzU3ZTYsIDB4Mzc1OThhNTMsIDB4Yjc2YTQyZWMsIDB4ZmZmNGJjNWMsIDB4NzJkZDM5ZDUsIDB4ODBmOTc4YTgsCisJMHhjZjYyOGVhMiwgMHg5NmVhNGZlZiwgMHhmYmVkOGFjNywgMHg5YTJhMzIxNSwgMHhmNzFiNTMxZiwgMHgxOGY2NmQyYiwKKwkweDU2M2M2OTcyLCAweDlhYzI3ZTA4LCAweDgxNGJmZWU3LCAweDdkYTllMmY4LCAweDE5OWZlOTAyLCAweDBlOWI5ZjgzLAorCTB4N2MwMDFmYTAsIDB4Mzk3MjM5NDIsIDB4Nzg2NmU1ODUsIDB4MDJlNTRiZGYsIDB4OTM5MzVhZjYsIDB4NmU0NmZjYjEsCisJMHg3NTNlYTA0ZiwgMHhjNWY5ZTIyNCwgMHhmMmZkYjQzZCwgMHhkMDVkOTkzZiwgMHhlZjE3ZjJmZiwgMHg0ZTNmNDA3MSwKKwkweGQ3MGMzNTQ4LCAweDJhNjFmY2JmLCAweGQ5NzJhZmQ4LCAweDk0YzRlYTlmLCAweGVhN2YyZjNkLCAweDY1Yjc4OGJiLAorCTB4MTUzNzdmNmYsIDB4OWRjNDQ5ZTMsIDB4YzdiMWMyNmUsIDB4NWJmZDBlOWYsIDB4ZjYzNjcxYjIsIDB4MjBmMTI5NmYsCisJMHgyOTdmY2FlZSwgMHhmYTY4MDQ5NiwgMHhiNjhhNDQ5OSwgMHgwZThiZDBjNywgMHgzNjI3MTdhZSwgMHhmNjhjNDc1MywKKwkweDFmY2MwNGVmLCAweDIzYmY1ZWMxLCAweDQyMmFiZWUyLCAweGZmYTAyNmVlLCAweGExN2RlNWRmLCAweDNmZTYwMjFlLAorCTB4MWQzOTMwYjMsIDB4YWY1YzRjOTAsIDB4ODkxOWI3YTgsIDB4YjYwZjJkZDcsIDB4MGY0ZTdjODIsIDB4NzU4N2Y3NzIsCisJMHhmYzkxMmYxNiwgMHg1N2MyMWY5YywgMHhlZGYxNWViNCwgMHg3Yzk5ZmRlOSwgMHhmMmU1MmE4OCwgMHgzZjM4ZThlZiwKKwkweGZiYzM5ZTE1LCAweDlhZGJiMmFkLCAweDdjOGVmYmFkLCAweGZlZGRkOTk1LCAweGE1M2VkZTJhLCAweGU3YzYwZTNiLAorCTB4ZmRiMWE5MTMsIDB4YTZiMjAxZDUsIDB4OGU5Yzc0ZjcsIDB4N2U4NDU3YzAsIDB4ZjJkZjdkMzMsIDB4NGQ2ZmQzMTAsCisJMHg0NWE1MDNkZiwgMHgzMGYxN2U1MCwgMHgwZWY4MWZkMywgMHg1NzRhM2ZjNiwgMHhlZjk2M2ZhOCwgMHgzZGEwMjU5ZiwKKwkweDU4ZTZmM2EwLCAweGU2NDViZDdhLCAweGQ3MmZhZDdhLCAweDk2ZTk0MjcwLCAweGJjMDg4NDg0LCAweGM4NDlmZDQwLAorCTB4NTk1ZjVjN2YsIDB4MTc3ZTgxYmEsIDB4ZDBiZDJmNjEsIDB4M2ViYTIzOWUsIDB4NzE5NzZmNGQsIDB4ZmEwNTNmZmQsCisJMHhmZWI3NGQ3ZiwgMHhlZjRjOGQ5MywgMHhmYzlmZjY3YiwgMHgwNzIzNmUyYywgMHhmNDEyNzk5ZSwgMHg1ZmE3ZWE5NSwKKwkweDRiOTU3ZDA1LCAweGRkN2ZkZmEwLCAweGVkZGVmMmQ2LCAweGRhZmY0ZjU0LCAweGRlYTllOWE4LCAweGI0ZjUxYTdlLAorCTB4MTI3OGM3N2MsIDB4NmFmZjRmNGIsIDB4N2E5ODkxNzcsIDB4ZDRjNzlmNGEsIDB4ZTIxYjdiNTMsIDB4ZmQ5NGZmZjgsCisJMHgyODk3ZjhkNCwgMHhkOWE3ZjllYiwgMHg2OGY4OWVjMywgMHg0YTJmODdiNCwgMHg2OGQzZjIyYSwgMHg2MWRmZTkwZiwKKwkweDNmOGQxYjkyLCAweGRlMWE3NzBkLCAweDc1NWQ3ZTJhLCAweDMwOWRkODA1LCAweDg1ZGMzNTJlLCAweDJlZTFhOTcxLAorCTB4ZTNhYjdlMmEsIDB4Y2ZmY2IxOWYsIDB4NzRhMjZiMTAsIDB4NGZkNGI3Y2QsIDB4YTU4NDc5ODEsIDB4MmJiY2UwOGIsCisJMHhlYjg4OTY3ZiwgMHgwNDhiOTZhNiwgMHhjODgwYmVmNSwgMHg3ZGYwNmZiOCwgMHhmMDc4Y2Q1MywgMHhmZGZjYTc0MywKKwkweDUyZjdiM2I2LCAweGJmMTNlNzdhLCAweGViZTVkNmNjLCAweGJmZWJmNDY0LCAweGM5YWJlYWZjLCAweDczYjczZmI0LAorCTB4ZWNhN2NlZmUsIDB4NjNjYTg5YmUsIDB4ZTI4NDI0YWUsIDB4MjRmMzlkMjgsIDB4ODI0ODRmZTIsIDB4M2U0MGFjZjgsCisJMHg3ZTYzYTA4ZSwgMHg3ZjBmM2ViOSwgMHhlYmJiNTI1MywgMHhhZmZkZWRlOSwgMHhhNmY5MGYzYiwgMHhiNjNlZGJlOSwKKwkweGE0MmVmNTc2LCAweDI5NzliMTQzLCAweDIwYTU0ZjEyLCAweGVmM2ZjYTU3LCAweDA0MzAyMTM4LCAweDU0OWI1MmVkLAorCTB4N2FhZjMxMTIsIDB4Yjc5ZGRiOWMsIDB4MGYxY2NkYTcsIDB4OWNmZTRiZmUsIDB4ZTcwYzA5NTEsIDB4ZWI3ZTcxODMsCisJMHhiY2ViZjZlNSwgMHhiYjAwNGQ1ZiwgMHgwYjM5YmU3ZSwgMHgwZmU3YWZlNywgMHhiNThmOGUyZCwgMHhlMzg1YjI2ZiwKKwkweDU3NWYwMGVjLCAweDc1MGJiNGU5LCAweDI3N2RjNTIyLCAweGM1ZmY0MmU5LCAweGFkOTJiNzZmLCAweGJlZmRkNjMxLAorCTB4ZTRmODliMmYsIDB4ZmU4ZGNiODMsIDB4NzM2ZTU0ODksIDB4ZDFlNzBlMzksIDB4MjI3MjEzNGYsIDB4YTZlYjM2ZTQsCisJMHg1YTIzOTI1MywgMHg3MWY3ZjAwZSwgMHhkYmViM2NjNCwgMHgwZDcwMTdmMiwgMHhiNmIxNmRmYywgMHg4OGM0OTYxNSwKKwkweGYzODRmZGQ3LCAweDVmMmJjYTZmLCAweDY5ZDVmZWUwLCAweGYwMTJmOWNkLCAweGQ0NWQ5YTcxLCAweGQ0MWUzOWM1LAorCTB4MTkyNDc1ZjQsIDB4Nzk0ZDc0MDksIDB4ZTNhM2Y5NjUsIDB4ODdiZDhlMjksIDB4NTdlYzE3NDQsIDB4NTM5ZjM2ZjUsCisJMHhiYmU2MzEzYywgMHhmZDQyN2U0NiwgMHg5MDFlNDdlMCwgMHgyM2FmYzg5ZCwgMHhlMDEyYzk3MiwgMHg1NmQ5OTFlYiwKKwkweGVmOTZlYjAyLCAweDU4YWFhZTJhLCAweGIzMzc0ZTc0LCAweDUyM2NjODc4LCAweGUxMzhkOWYyLCAweGU2ZmUzZWZmLAorCTB4MTUwZjg5Y2YsIDB4Yjc5YzdlNTAsIDB4ZDFjMGZkYjMsIDB4N2Y3YTYzZjgsIDB4NmEwNDI5ZGUsIDB4YzhhMWMwMDUsCisJMHgwMDQyMjlmMiwgMHhjNDg1NjRlMiwgMHgwMTY0ZThmMywgMHg0OGZhZmRmNSwgMHgyYzFmOTVmYiwgMHhkNWY2MDE3ZCwKKwkweDRlMGIzNzU0LCAweDk2YWYyZDEzLCAweGIxYzAxNGRhLCAweDAyNWRiODM3LCAweDk1NDZmY2ZmLCAweDIwZGUzMWI4LAorCTB4MTU5YThjZDUsIDB4MjAzYWQ3MTEsIDB4OTZhZmM4NGIsIDB4Mjc3ZWRkYmYsIDB4MmNjMmY3ZjAsIDB4ZGNiYTAxMzMsCisJMHg2MDM5Y2YyMywgMHgzY2QwYmZkYywgMHhhN2EwZjUxNiwgMHg0N2MxZmQ3ZSwgMHhhMDkzNGNhNiwgMHgzMGY4ODIxZSwKKwkweGM1MzBhMWUyLCAweDllY2ZjYmE2LCAweGE4YmEwNjRhLCAweGRiOThhNmRjLCAweDkwYzU3MWVlLCAweGUxODUzMmRmLAorCTB4Y2RmNmNmYWMsIDB4N2Q5OWZmZjIsIDB4MWJlZDRjOWIsIDB4NjkxY2I1YzMsIDB4NTEyYjQ2ZGYsIDB4MmM3ZmFkZjYsCisJMHg1NmIyYjZmYiwgMHg1OGI4MGZlZCwgMHgzZmFiMzdiOSwgMHg2YmU1NzVjOCwgMHhiMmM1ZmE0YiwgMHhkOGZhYWY2ZiwKKwkweGJlMzVmZGZjLCAweDIwNzNiYjBmLCAweDIzYTM2ZmI1LCAweDZhNDBkYmVjLCAweDZkYzQ2MmRmLCAweGZmY2QxNWQzLAorCTB4NTliZWM1ZWMsIDB4ZWZmNDc3ZmUsIDB4MzE2ZmIwNTUsIDB4ZDE1MjNiZmEsIDB4ZTZhMmI3ZGIsIDB4NDU2ZmI0NWEsCisJMHg3ZWRkNDUwMywgMHhjZjg1MmNhOCwgMHg2ZmI0N2FlNywgMHgxYjM2N2YwYiwgMHgxNmNiYjJmMywgMHg1N2MwM2YwMywKKwkweDcxYWY2ZmIwLCAweDgwZWQwNzNiLCAweDM4YTQ1YjlkLCAweGRhYmVmZGIxLCAweGRhYmVkMmI5LCAweDNlMjVmZmI5LAorCTB4ZTU2ZTc2NmIsIDB4MjM5ZTc2MjAsIDB4Y2VjYzg3MWEsIDB4NzY2NGNjYWQsIDB4NjY1ZWU1NmUsIDB4NjMwZTU2ZTcsCisJMHhkZjY4Y2U3NiwgMHgxYmVjYTIwYSwgMHgwNDdhYmVmYiwgMHg4YmU3MWVmZCwgMHg4M2I4YmY5OSwgMHg5NWNmMTc5NiwKKwkweDdlZmExNjVkLCAweDVmOWRhYWIxLCAweDY5MWYxOWE4LCAweDEyMjkxNmVmLCAweGRlY2EzOWYyLCAweDM5ZTFjZWI5LAorCTB4ZGRlY2RlOTAsIDB4ODZlZjYwNWIsIDB4MGExYjFkYTIsIDB4YzdjNDY0N2EsIDB4YmE2ZDQzMGQsIDB4YmU0NzcyZmQsCisJMHg0YmY1ZmY2OCwgMHgxMDdmMmZhMCwgMHhiZWZkOWU3MSwgMHhmNjhiY2Q4OSwgMHgxNjNlZDE3ZCwgMHhhNzM3NmVmNCwKKwkweGM5ODU1MWU3LCAweDQ3ZTdjM2IzLCAweDI0NzUzYTdiLCAweDQzYWFmN2QzLCAweDU0NGUzODcxLCAweGJmYWMwOTM3LAorCTB4MTUwMTBiZjcsIDB4NWRiZjgxYzYsIDB4OWRmMmY5YzIsIDB4Nzk3Y2Q5N2IsIDB4ODNmMTk5OGUsIDB4Y2VjODliZmMsCisJMHgyYzE2NTA1ZCwgMHhkY2MzYzA4YywgMHhkNzE4MTU0YiwgMHgwYjExMmI5YywgMHgwZTBiYWZmOCwgMHhmYzBhNzBkZCwKKwkweGQ2OTcwNWQ2LCAweDAwYmJiZmEzLCAweDg5YmVjMzllLCAweDMyZWI2ZGVkLCAweDJlNzdiYjY4LCAweGExZGU3MDE3LAorCTB4MTc5OGVmZWQsIDB4M2Y3YTk3YjYsIDB4ZWM3MzdlNzYsIDB4Mzg1MzFhN2QsIDB4MTNlZTUzM2QsIDB4YTcyZmIwMDIsCisJMHgyZjEwN2RiNywgMHgyMzliZmQ3MiwgMHhjOGJmMjFiNiwgMHhmOGNjNjI1YiwgMHg5ODVlZjZhNCwgMHg5N2M2MmU0ZiwKKwkweDZmY2M1NWFhLCAweGYyODlmMzBlLCAweGY5YTIxNTRkLCAweGJjNWQyNTQ0LCAweDJmOWJiNTMwLCAweGZkYTRlZTc3LAorCTB4YmZiOWU5NGQsIDB4ZjdhMmRmMWEsIDB4M2U3MWI4ZTEsIDB4ZDdiZjgwYjMsIDB4M2UzNDFmMTMsIDB4ZjM5ZmY1NDcsCisJMHhiOGE5ZmE5ZCwgMHg4ZmM4Yzc5ZiwgMHg1Y2NlY2Q0NiwgMHg1ZTgxNDY0MywgMHgzY2YyNmZiZSwgMHhmNDcwMWUzYSwKKwkweDk0MmY5NDlmLCAweDBkZTZkYmNlLCAweGQ5ZTc5ZGQzLCAweDkzNzJmOWM1LCAweDU0YjRkOGU3LCAweDZhNDhmODE1LAorCTB4OTdiNzY3MDAsIDB4NGE5MDNmNmYsIDB4M2I4Yjc3ZmIsIDB4ZTY0MjA3MzMsIDB4NzhhNmZmYjMsIDB4NjJkMGZlMjAsCisJMHhhODNiNDJlZCwgMHhjY2NkMzBlMSwgMHg4ZTU3Zjg3MCwgMHg5YzAzMjNjMywgMHgwOWJjNzBkMywgMHhhZmQ0NGUwYSwKKwkweGYxY2VjMTkwLCAweGNhNWU2NDdkLCAweDZmNWZkMDY3LCAweDE0NGY4ZjkwLCAweDg1OWZhMDlmLCAweDcyMDU3OGRhLAorCTB4YTliY2ZmYTEsIDB4NWJjNWM5OTksIDB4NmU1Y2EwMjMsIDB4ODEwNzVkMjYsIDB4ODIyOWQ1ZWYsIDB4MmFhYjQ0MmIsCisJMHgyMWZmNmUwYywgMHhkNTdhYjdlYywgMHg5ZTgzOWY0YSwgMHhjZGFlMGI5NywgMHhmNGY2MWQ4YywgMHg5NjM4OThkNCwKKwkweDM3MThlMTYyLCAweDliOGM0NjA5LCAweDI0YmRlMDBiLCAweGM2NjhiN2Q4LCAweDFlZmNlZmY2LCAweDNmNDY0N2IzLAorCTB4ZjViOThhNjUsIDB4ZTUzM2QwMDgsIDB4MDliMjY0ZGYsIDB4N2ZlODA2MWUsIDB4ZmEzMDM4MTEsIDB4ZjA3YTUxMzEsCisJMHhhNGZkZjczNSwgMHgyYWZkZmI3MiwgMHhmYzBlYzFjOCwgMHgxZmMwNTJlZSwgMHhmOGQ4ODZmMiwgMHgyNTdiOTVhMywKKwkweDRkZjIxYTc1LCAweDhlOTA0MzkzLCAweDFjOThlMzJmLCAweGM4ZGZhOTYwLCAweDNjYjQ1YmU3LCAweDZmZGUxZmUwLAorCTB4N2VmODY0MTYsIDB4MzI0Zjk1MDYsIDB4ZmE2YTlhMmQsIDB4Nzc4NmEwZTIsIDB4MmZjZDFhYjMsIDB4NDdhNDI3ODgsCisJMHg2ZmIwMGRkOCwgMHhkNTk2ZWI5MSwgMHg0ZjkxYjdjMSwgMHhlZWEyYWMzNywgMHgyN2NkMWE5OSwgMHgwNzYwM2U0ZCwKKwkweDI4YWZjNzJmLCAweDhmZWUwOWZkLCAweDliZWE3ZmI5LCAweDU5OWE0ZmVhLCAweGFjZmIzZmFmLCAweDg2OGZhZjVkLAorCTB4MDE1ZWRhMzgsIDB4NGU2OTBhZWQsIDB4ZjIwZmM1ZDQsIDB4ZDY1ZTZjY2MsIDB4Y2UyMGY1NjIsIDB4NWQ5MzVlYmIsCisJMHhmYjY4ZDU5YiwgMHgwYjk3MTU3MywgMHhjZjIyNTdjYywgMHgwZTg1NGRlZiwgMHhkM2IxYmFjMSwgMHhmYWQxM2U0YSwKKwkweDJjZTE4NDNkLCAweGQ1NzgzYzcyLCAweGY1Zjk0MWVhLCAweDVlMDRmZjU0LCAweDk4ZmU0ZjdmLCAweGI0MGVmZjk2LAorCTB4NTUxNmZiMDcsIDB4ZjFjNjdiN2QsIDB4ZjUyNzhiNDgsIDB4NjY2OWFmZDYsIDB4NjliZTNmNjYsIDB4YmU3NmI0YmYsCisJMHg5NzgzYmFlZSwgMHg0ZGZjNjJiNCwgMHgyY2Q4N2Y1YiwgMHhjMzJlN2U3YSwgMHhkMDQ4YjhmYywgMHhjYTUwNzNhZCwKKwkweDlmZjJmZDcxLCAweGU1NThmZjUwLCAweGZjNDNmNTMyLCAweGZjZjk0NDI4LCAweDMxYTdiNmVhLCAweGY5ZjY3ZDVlLAorCTB4ZmU4MzM3NjMsIDB4NDhhZGY4YWMsIDB4M2E5ZjU0MmMsIDB4MTA5M2M1YjYsIDB4ODBhMjA3ZGIsIDB4MjRkMTUwOWYsCisJMHg5MTE2N2FlMiwgMHgyMzMzYjk0MiwgMHhkNjQyMGNmYywgMHgxNGJjN2UzMCwgMHg2MmE3NzY4ZiwgMHg0YzUwMzk4NywKKwkweGY1ZDhhZmJmLCAweGRkYzQzNjQ5LCAweGY2NjAxZTNhLCAweGM3M2NmZmNmLCAweDFiMmRiZmEzLCAweDI0MmJmYmQ2LAorCTB4OTQ2ZjhlYjYsIDB4OWYxY2JkY2YsIDB4ZTZkYjc2NjcsIDB4MWExNmZkODIsIDB4OGFkNzc5ZDgsIDB4MzliMjM5YzYsCisJMHg2NTUwY2UyMiwgMHg3YjVjNTk5NiwgMHg1OWY3MGRiNywgMHg3MDEzOWZmYiwgMHgxN2QwMzI5ZiwgMHhkYjUyY2U3OSwKKwkweDM5ZTY3OWZmLCAweDgyMmI5NzY2LCAweGNkY2UwMDcyLCAweGVmNmMzNDU2LCAweGM1NzgzODgwLCAweGFmZmEzMzUxLAorCTB4MGE3Mzg2ZGUsIDB4NWY1M2E3ZjgsIDB4MjNmZDAxN2EsIDB4YzVkNDUwNmYsIDB4OGZlMmEzNDEsIDB4MGNjODYyMGQsCisJMHgyYWE2YjNmMSwgMHg3ZjM0MDNiNCwgMHhiMThkZjMwYywgMHhjNWJkZjBlMywgMHhiNGJjNTZjOSwgMHhiMjlmOTc3NywKKwkweGNmY2JjNTcwLCAweDZjZGNmMDNhLCAweGM2MDc1NmViLCAweDFmMmUxYjIxLCAweDM3OGE4ZmZmLCAweGQ5NzQzZTM2LAorCTB4OGU2OWUzNzgsIDB4ZjU5OTVmOGYsIDB4MjFhNDM1ZWIsIDB4OTQ5MGUzMTksIDB4MTg5MmRjYmUsIDB4ZWUzMDhiNzEsCisJMHgyOWVjZjg1ZiwgMHhiMzNiMGY1OCwgMHgwMTRmYWZlMywgMHhiOGZmOTViZCwgMHhlMDdkZDRmMCwgMHgzYWIzZWQ4ZiwKKwkweDNlZjZiYzYxLCAweDEzZDcwNDdmLCAweDczNzZlZmI0LCAweGVlNzhlZjNkLCAweGU5ODc1YzU5LCAweDA1ZDlhM2Y4LAorCTB4M2RlYzc1YjUsIDB4MjNkNjE4MzEsIDB4OTE3ZmI2M2EsIDB4NTVkYjcxMGEsIDB4M2NlM2E3N2IsIDB4YTljZWQ1NmQsCisJMHg3OThjNDlmZCwgMHg2ZTAyOTY4MCwgMHgwNzU4N2QwMywgMHhhNWFiY2EzMiwgMHhkMDMwNjVhOSwgMHgxYmNhOTY3OSwKKwkweGZjNzBiNjVjLCAweGM1OGFiMWI4LCAweDM3MWU1NWUzLCAweGJkN2IxNmRlLCAweGRjNGUyYTJkLCAweGViOTZmMzM0LAorCTB4OTI2ZWZjNjAsIDB4NDNlOTJhNWQsIDB4OTUzMGY4YmMsIDB4YzgzZWU4ZTMsIDB4OWE0M2RiNmYsIDB4YmYyOThmYmQsCisJMHgyYTBmZjBiMywgMHhmMjBkZjdhNywgMHhjOTY5YWNmYiwgMHhiMjg0OWVhZiwgMHhlMzFlZTRhNiwgMHhmMDNlYTFjNSwKKwkweGRiY2Y1YjRkLCAweDZjN2Y3NjYyLCAweGYxZDliZDA2LCAweDgzY2Y4YzZiLCAweDgzNWNlOGRjLCAweGQ5ZjBiYzc0LAorCTB4OWNiMzg4NjAsIDB4YzJlZWJiOTQsIDB4Y2Q3YjMzZmQsIDB4NjJhYTJmYjgsIDB4M2ZhOGZiZWYsIDB4YzZkZjNiMWQsCisJMHhkN2MyMzJmNSwgMHhmODQ4M2FkNSwgMHhmMDgzYWQ4ZiwgMHg0Yjc3OWMzOSwgMHg3MzMzOGIzYywgMHg1YTFjNDNmZSwKKwkweDFlNzNlMDc1LCAweGQ2Mzg2NjZmLCAweGM1M2RkMGUyLCAweDZjMmRkMzlmLCAweGNlYjY5MTNmLCAweGNmZTViNTU4LAorCTB4ZjVjNDMxMGEsIDB4ZDM5MDNjODUsIDB4OGJhZWNiYjEsIDB4MDI3MDdjNmEsIDB4YWU0NDI2MWYsIDB4ZjM4ZWM0YTcsCisJMHhiOGRkZDc4NywgMHhlMDdlNDBiYywgMHg0YmQ3ODU3ZiwgMHhjNDIwN2U2OCwgMHhmYmMyMDNjZiwgMHhlODNkODYyNCwKKwkweDYxZDZjNGQ4LCAweGZiZDhlNDNhLCAweDk1ZjViNTBmLCAweDRmNDE4YjE0LCAweDU3NWI3ZDAzLCAweGFmZmU4ZGU5LAorCTB4MjYxOTFmY2IsIDB4ZjlhM2UzOWIsIDB4ZDhjYmU2NzQsIDB4NDU4MjdjNzYsIDB4NjFmYjc2ZjgsIDB4ZjVhODg1MmEsCisJMHhjZmFjMGI3ZiwgMHg2MDUzMWQzNywgMHg2MzhkYTFmZSwgMHhmMGNmN2Y1YSwgMHhlNzk5ZjI3OSwgMHhiMWVmM2M0NSwKKwkweGVkMDViMWFlLCAweDU0NWVkMWI4LCAweDM0MWYxNjEzLCAweGQzODMzYmQyLCAweGUzNjQxZDViLCAweGYxMWQ5OWM0LAorCTB4ZTdhZDNiMDEsIDB4MTFiYjJiY2MsIDB4OGVkYmQ1Y2YsIDB4ZGY1YTdlMjksIDB4OTU5Nzg2YzEsIDB4NTJmZDg4YjYsCisJMHgyMjA0NGUzMCwgMHhlMmYzM2ZlOCwgMHg3ZWI2NmNmZSwgMHhjNmU1ZTZjNCwgMHg3NmYwZTY3NiwgMHhkYmIxY2RiYywKKwkweGE3M2I2ZWYxLCAweGJmODU2NzZiLCAweDc3ZTc2MTUxLCAweDY5ZGVkZjJlLCAweGVhMDczZGM5LCAweDEzMmFkZDNiLAorCTB4YmE3ZmJmZDgsIDB4YzQwYTJjNTEsIDB4NDU5MjdmNjgsIDB4NGNmMmUyZDYsIDB4ODk3OGU4NmYsIDB4ZDllMzFkZTcsCisJMHg0OTMxNDZmOSwgMHg1NTdhZmY0MSwgMHg4NGQxZGU3YywgMHgxNTE1NDgxNCwgMHg2YTZiMTRlMiwgMHgzNWQyZmVkOSwKKwkweDgxYTU3N2RmLCAweGRlMjRkN2JjLCAweDc1NmRlYjg2LCAweDUzM2FmZTA2LCAweGJmMTBmOTljLCAweDE5MmI0ZTcwLAorCTB4ZGEzNTcwMDcsIDB4NDliNzQ0OWIsIDB4ZjhhYWZmNDcsIDB4MWU3MGZlYTIsIDB4YzdmNzJkN2YsIDB4ZjNjMmU0ODgsCisJMHhiMGEzYTI5NywgMHgzYTIzZmEwOCwgMHg4YzZiNGU0ZCwgMHg1ZWQ5MDVmNSwgMHg3YzExM2M0MiwgMHhmM2ZhOWQ5MSwKKwkweGIxY2JlNDkyLCAweGVkYTNkNDJhLCAweGI0YjRhOWEzLCAweGE3NDJjNDFlLCAweDRiMGFiNzFiLCAweGZjZGRlYzc5LAorCTB4NzdlYzRlNTksIDB4NGYzZTM2ZTcsIDB4OTlkNTEzNzAsIDB4YzE4M2Y2Y2EsIDB4MjNiOWQxYjgsIDB4YzY4YzliMjEsCisJMHhlMjliODkwZiwgMHgwYjlmYzZkMSwgMHgwN2VmZjZkYiwgMHg0MWQ2YjQ3YiwgMHhjZjU0ODlkYywgMHgzMTU1NTcyOCwKKwkweDhlOGRjZTBiLCAweDgwNTkwOGIxLCAweGZlNmY3M2QzLCAweDZkNmJkNjk2LCAweGQwZmU3MTE2LCAweDg1ZjZkNzY5LAorCTB4Y2Y0MTEzYmEsIDB4ZGMxMWU0NmMsIDB4ZmU1MDA3ZmYsIDB4NGU5YmI5MmEsIDB4MDI0MGJlZTMsIDB4ZGY3NmE0YWYsCisJMHhiNDVkMzEyYiwgMHhmY2U3YmNlMywgMHgxMDA3MTY0NiwgMHg5OGJmZDVjOSwgMHgyNDcwZTJjYywgMHhmMWYzZjQwMCwKKwkweGYzYTcwNTY0LCAweDdlZjBhNDNjLCAweDNhZTc4Mjk5LCAweDcyZjZiZDk2LCAweDM5MzA4ODZlLCAweGI5MmJmMjQ0LAorCTB4YjRiZTdmNDgsIDB4ODZjOGVhZGUsIDB4NzdlMjc5NzUsIDB4OTkzOWMyYjcsIDB4YmY1ZjVlMzIsIDB4NTNiOWZkMTIsCisJMHhkMDdlN2VhYSwgMHg0ZjVjMjVkMywgMHhmMGI0YmFmZiwgMHgzMmJmZDgxMCwgMHhlYmI0NTJjZiwgMHhjZmVhZTdmZCwKKwkweDU5ZjcxYWE1LCAweDJmYjBiZDIxLCAweDkzZGRlYThjLCAweGFiYmVmNDQyLCAweGQ2YzdlNmYyLCAweDdhMzk3Y2MxLAorCTB4MDExOTE1ZmYsIDB4NDgyYWM5ZmIsIDB4ZTdjZTBiOWMsIDB4OTdkMDY4YWMsIDB4NzliYjAzZWYsIDB4ZDg5M2IwMTUsCisJMHhlYmVmMTcyZiwgMHhjMzZkYmY5NSwgMHhkYzc5MzE3ZiwgMHgwYWViZjk2NSwgMHhlMmRiZmJjMSwgMHhlY2IyYWUzMSwKKwkweDlmNjhjNWI1LCAweGZlN2E2OWNjLCAweDdmM2Q1NTVhLCAweDdjOGMyMzZkLCAweGRlMzlmM2Q0LCAweDM2OWJlN2E1LAorCTB4Y2Y4OWVjZmYsIDB4ZjNmYTc5MDksIDB4NGIzZTQ2YmUsIDB4MDIxYmM3ODQsIDB4YjUxMTBlMmMsIDB4MDliODJkYmYsCisJMHhkOWYyMzZlOSwgMHgwYjc2ZDdjOCwgMHg3Y2UyZjc1ZiwgMHg5NjI1N2ZhNSwgMHg4MWIyNjY1NCwgMHg4NDI5NzRlZSwKKwkweGEzZDQ2MTdhLCAweDgwNDg3YjBjLCAweDA5NGEwZjdmLCAweGFlNTdlMmQ0LCAweDY5ZWZiNDc4LCAweDE5NDIzZmJjLAorCTB4N2EwNmNlZmIsIDB4MmViZDAyMjQsIDB4ZDEzODIzZDQsIDB4NDZkZTc2MDcsIDB4NWJiNjcwM2UsIDB4OTA5ZjU4NDEsCisJMHg1OWU5YWVhZiwgMHhmZTk0Zjc5ZSwgMHhmYTIyZDhmZSwgMHhlZmMwNDZkNSwgMHg3NjJiZDQ2OCwgMHgwNDg5Mzc2ZSwKKwkweDllODI2NGQ2LCAweDZlMzA5Y2JhLCAweDZhMmNmYTM3LCAweDlmZjcwNDk5LCAweDI4NmNiNTEwLCAweGM0ZTI3YmRjLAorCTB4MWY3Y2M3ZjQsIDB4ODI0OGU3NGEsIDB4NDMxYjgyZmIsIDB4M2VjMTUzMTcsIDB4ZWJhNzM4ZmQsIDB4ZGU3YmIwNjYsCisJMHhlYzA0YTQyNSwgMHg2YzcxY2RlMCwgMHhhNzk4YjI5ZSwgMHhkYzJhYjc3ZiwgMHhlZDdiNGVhZSwgMHg1OWJlZjg3YSwKKwkweDc4NWNlMTU2LCAweGNiNTZmMzY3LCAweDQ1MDdjODMwLCAweDliYzQ3ZmJjLCAweGI0MTU3NzU4LCAweDMzMmNkMWRmLAorCTB4ODEyY2NhYmEsIDB4ZDhiZjEwNjEsIDB4MWRiYjYzMmIsIDB4N2NmMTkzNjUsIDB4NmI2ZmQ4NjUsIDB4M2E0MGZiNjYsCisJMHgyYzcxM2Y5YiwgMHgxZGU3YjA4ZSwgMHgwNTVlOWZjMSwgMHg0YzI3YWNmMSwgMHgwYzlmZjdiMSwgMHhmZGY4OWFiNywKKwkweGZjNzBkZjM1LCAweDdmZGE4YzZkLCAweGY2Y2FkYzM3LCAweDA4NzhmZGM3LCAweGU5NzU0N2VkLCAweDMzMGUzZTc5LAorCTB4Y2I5NmI4N2QsIDB4NmY0YmY3ZjksIDB4NmNlZmZlYzAsIDB4NDcxODU0MTYsIDB4NmUzYmM1MGEsIDB4MzlmYjQ1MWMsCisJMHhlM2M0ODhmMSwgMHgzOTJlMmMzMCwgMHg5YmJmYmY4ZSwgMHgxZjgwZDJiOCwgMHgwMjIzYWYxMywgMHgzZmM0ZjNlOCwKKwkweDM1YjdkYzEyLCAweGNlMjk2NmFlLCAweGEwZWI3ZWFiLCAweDc1ODZjZjM4LCAweGIwNWI4YTUyLCAweGU4ZWM2NzczLAorCTB4OTU2ZjhmYmYsIDB4OWM0Y2I4NzQsIDB4Nzk4MTY5ZTYsIDB4MDRhMzg0ZTYsIDB4YTM4NGVkZWQsIDB4MTIzY2YyZmEsCisJMHgzNjlkYjExMCwgMHg0ZjZiZjNmZCwgMHg1NjA1ZjNlYSwgMHg0OTA3NmY4ZSwgMHhmODZmN2MwNSwgMHgzYWJhNDQ1MiwKKwkweDAxZWI4OGJiLCAweGQ5Njc2ZjVhLCAweGE2ZWZiYzAwLCAweGRhOWMyMmYzLCAweDYyOTdlOWE1LCAweDdlNzFhYzUxLAorCTB4ZjI4MWUwMjYsIDB4ZTA4NTA5ZWIsIDB4NTJjNGYyZjgsIDB4NWZlZmM2M2IsIDB4MDU3MTVhNTksIDB4N2Y5ZmViOGMsCisJMHhhYzQ1NzNjZiwgMHg3NjExZTA3MywgMHhhZmVkODEyOSwgMHhlMjUwMjc3MiwgMHgwYWQ3YWUyOSwgMHhlOTc1ZGY4YywKKwkweGViZjYzMTI1LCAweDcwZDYzODZiLCAweDdkMzllMWFkLCAweGQ2Mjc5YzY5LCAweGFkMGZjNGJlLCAweDU4MjkwZmNjLAorCTB4NjA1MDQyM2EsIDB4MjA0ZmI2NWUsIDB4MDc4ZWQ3YzAsIDB4MzczZDk3M2MsIDB4NjQwZjI3ZTMsIDB4ZTBkZTNkMDAsCisJMHgyZGIzZjQwNSwgMHg5NjNiODJjZCwgMHhlYWNhYjE5ZiwgMHgwN2JlZjM2MCwgMHgxZmIwYjVmYywgMHg5NGFhNWVlZiwKKwkweGFlN2IxZjYwLCAweGFiY2UwMzc3LCAweDJiYTA4NzZlLCAweDViYTk2NzdjLCAweDk3NzBlNzg4LCAweDg4NjZjODU4LAorCTB4ZTk3NTRiNjcsIDB4ZWUwM2M2YjcsIDB4NDc1OGNlYTcsIDB4YzRiMjdkZTksIDB4NDI3ZTcyODQsIDB4ZmVmZDIxNzYsCisJMHhiZTMwNDIyYSwgMHgwM2I1ZTNjMCwgMHgyMjliMjY2ZiwgMHhjMGZmMjNjZiwgMHg5NWIwZmY5YSwgMHhkNWIwZmJkNiwKKwkweGY2NDk3Mjg5LCAweGRmYTAwNGI4LCAweGU1ZmZkZmY1LCAweGJjZWViZDAwLCAweDBlMzk0NjY0LCAweGVkMWZmM2UwLAorCTB4NGY5Y2FkYmIsIDB4NmJkY2UzYTMsIDB4M2NhNGZmMDEsIDB4ZTVjM2Y1MDUsIDB4Yzk2NWE4NzEsIDB4ZTUwMTJmNzAsCisJMHg1NDc1OGM3YiwgMHhmMjRkMmZjZCwgMHhlOTQ2ZGI1MCwgMHhmMDliYjI0OSwgMHg3NmUyMmU3ZSwgMHhkZjZkNGVhYiwKKwkweDQ1ZWZlMTE5LCAweDA5MDkwM2U4LCAweDY5YTVmNjA0LCAweDE2Njg1NGY2LCAweGZmMTRmMTQyLCAweDEwZjYyY2UzLAorCTB4Y2E5MjMzY2MsIDB4MDkyOWJmNjksIDB4ZjU2MTYyNTYsIDB4YzI2NzRhYjUsIDB4OWY3MWFhZTcsIDB4MmU2NWM1M2IsCisJMHhiODIyNmUxYywgMHhkMjM2MGRhZiwgMHg5ZDlhZmQ0MiwgMHhkYWYzZWNkNSwgMHg2NmY2ODI0NCwgMHg2MDUyNjNlZCwKKwkweGEzNjdhZDBkLCAweGY4ODU2NmQ0LCAweDJkNWJhNjQ5LCAweDQ5NDRhZDgwLCAweGJkZTc4YTkyLCAweDdkMzM5NTA3LAorCTB4MzJmZDY1YjQsIDB4NTBhZmVjMzEsIDB4MGZmMzFmNjUsIDB4ZjVhYzQxNzEsIDB4ZmNjMzhmYmEsIDB4ZmMwMGJjZjIsCisJMHhmNWQ0M2VjYSwgMHgyZTM1YjgwYSwgMHg3NWNmNmIyYiwgMHg3OWZlODJjMCwgMHgzZjcwNmVkOCwgMHhiYjhmOTBhYywKKwkweGIxMzUzZjEzLCAweGViYTEwMmZkLCAweGI2OWRiZjcxLCAweDFiYjQ2NjhlLCAweDE1ZGUwZjU0LCAweDk1M2VhZjQxLAorCTB4NzVjZjllMDgsIDB4YjU3MmZmZDMsIDB4ZjYxMTc3MmQsIDB4Yjk5MzhmODMsIDB4ZjQxNjlhYzEsIDB4MmQ5MWM0ZGQsCisJMHg1ZjZiYzc4MCwgMHhhMjM4YmJjNywgMHgzNzg0YzhlYywgMHhkZTgwNmIzYywgMHg4YzNmNmE2ZiwgMHhhMjEzMTg3OCwKKwkweDMzZTVjOGZhLCAweDJhN2I4NTUyLCAweDk0M2NlMTljLCAweGZjZjk1YWI3LCAweDk0OWJkYjhlLCAweGQxZmQ3MWQyLAorCTB4MzMzOGU1YWYsIDB4NmJkMzU3ZjIsIDB4YWNlN2JlYTMsIDB4YjE5OGI1NzYsIDB4YzEzMjAwZDYsIDB4YmExMTBlZDgsCisJMHhjMGIzNTBlOSwgMHg4MjIxYmQxZSwgMHg0Zjk5ZGY3ZiwgMHhiYWU5NDJmMSwgMHhmYzBlZjQxNywgMHgxOTgxOGJmMywKKwkweGNkMGQ5YjgwLCAweDdlODJiMWRmLCAweGEzZjFlMzdjLCAweGIxMWQ3ZTk5LCAweGEyMjdmYWJmLCAweGY2Y2FjM2E3LAorCTB4MGY4MDNiODcsIDB4ZjIyZmZiZDUsIDB4NzI4NDIzZjEsIDB4ZWE5NWNiMGUsIDB4NDQzYzY0NDcsIDB4ZTcxMWJkYzMsCisJMHg4MWFjNWU5YSwgMHhmMGIyMzMwYiwgMHhmOTAxMWM3YywgMHgwYTIzNDI4OCwgMHgzYTM2NGNkNiwgMHg3ZjlhYWY4MSwKKwkweGNmZWMyNmJkLCAweDllYjllMjI2LCAweGRlZDY0ZTU1LCAweGNiZjM1OTFhLCAweGVmZTgxNjVkLCAweGZlODJmOGFhLAorCTB4ZjUxNzViOTcsIDB4OTdmM2EyNWUsIDB4NWUzMGYzODgsIDB4NjdlNzBiYTksIDB4MDkwYTRiZGUsIDB4N2UwYjdmMjQsCisJMHhiOWViNjkwNSwgMHhjNGE1N2UzYSwgMHgwNzU3ZTBjNSwgMHhmZmY4ZDFlOCwgMHg2ZDkzZmIyNywgMHg2YTgzY2ZlYywKKwkweDI1YWU3Zjc3LCAweDUxYjZkZjllLCAweDRmN2I5MGJiLCAweDA1YzMzYTdkLCAweDg5MTY5YzM5LCAweGQ5NWViZTBiLAorCTB4NTFlNzdlOTMsIDB4MmRkNzA2ZmQsIDB4N2EwZDlmNGEsIDB4ZWE5OWIxM2MsIDB4OGY1YTI5YjEsIDB4ZGUwOTcyNWQsCisJMHg2YmRhZTc1YiwgMHhkNDY3N2I0MywgMHg1ZmJjOGJlYiwgMHg3YmUzMWI1ZSwgMHgxMTk5ZTg4ZCwgMHg1MzcxZjMwNywKKwkweDVkYzA2MGQ3LCAweDhiOTI0YWI2LCAweDQxZDliMTI5LCAweGI2YWZhZDkxLCAweDkxYzZlYjI2LCAweDhmZGRmMWU4LAorCTB4MmZmMzUyNzYsIDB4ZjhkMmJmMzUsIDB4ZTRhZmQ4NWUsIDB4Y2YxNjg2ZTMsIDB4ZmYxNDgyMTQsIDB4YzdmN2RmYjQsCisJMHg1ZjAxZTY3OSwgMHhmY2Q5MzhkNywgMHg4MjlhMGUxMywgMHhhYjAzZmNiZiwgMHhjZmEwMGVlNywgMHgwNzEwZmI0NiwKKwkweDQyMjMxYWViLCAweDEyNWUyYzk5LCAweDRmNWJlOWQyLCAweGU4MzM2NWZhLCAweGMyNDg2MzRmLCAweGM3NGZjYzcxLAorCTB4Y2Y0MjYxYjEsIDB4NGI4YmY0ZjQsIDB4YWI1MmY0NjQsIDB4YzBjYTdlMDIsIDB4YWIxYWMyNWMsIDB4N2JhZmI4MjYsCisJMHg0N2JiMzY2MCwgMHhiYjBlNjA2NiwgMHhlM2RmZjFmNywgMHg3ZGNjN2FkOCwgMHhkMGRjNmM3MSwgMHg0YjU4MWZkMiwKKwkweGM5N2U4MWVlLCAweDczOWJmMTEyLCAweDQwZGQzOWJlLCAweGVmMGZjNDJhLCAweDBkZGY3MzhmLCAweGI5MTRiMGZjLAorCTB4NGUxOTFmYjEsIDB4ZGUyODEyZTIsIDB4MDE0NmE0MzIsIDB4NTUyNDM3ZjYsIDB4MWI4YjAyYWEsIDB4NDBlZTM2MTIsCisJMHgyOGNiZWI0YSwgMHhkYzYxZjM1NiwgMHgxNmI2YTBjYSwgMHhjZDE5MjBlMiwgMHg2Y2Y1Y2ZiMSwgMHg1ZGJmOTM4OCwKKwkweGVhMjlhYmJjLCAweDM4ODZjYTNjLCAweDU0MWY2ZmU2LCAweDhiOTM3ZjY4LCAweDcwOTQ3OWQ5LCAweDBmOTI4NmRjLAorCTB4YmY4OGVkZmMsIDB4ZjFkYjNiMGQsIDB4ZjUwZjViMTksIDB4MWIzZTMyMjcsIDB4MzAyMDVmZTcsIDB4ZjNjNDk3ZTgsCisJMHg2NDg4NTQzZiwgMHg5MWY5YzI0ZCwgMHg5OWRmMDRkZiwgMHhiMjNmMzgyYywgMHhkODIzNTcxMSwgMHg1OGUyOTdjZiwKKwkweGUwOWQ3NTVjLCAweDlmZjkwZjVhLCAweGI4MTY1ZDQ4LCAweGZmYzM0NzZmLCAweGVhZGYyNzhmLCAweDhlMmJlODkyLAorCTB4YzM2N2NlZWIsIDB4YzNlYTk1OWMsIDB4OGVhZjIwZjMsIDB4YWY4N2U3YzksIDB4MGQ3NDFlYzUsIDB4OGI3Mzc4NjYsCisJMHg5YWVmZmRiYSwgMHg0ZWIyODJkYywgMHg4Nzg4NTY2ZSwgMHg3OGViZGE0NCwgMHgxZGY3ZTcwNSwgMHhlNjBiOWM0MiwKKwkweDA1Y2IxZDQzLCAweGUxNjBhNzQ2LCAweDdkMjQwM2U3LCAweDQzZGI4NjljLCAweDI3NzgxYzZkLCAweGI3ZTkxMzJlLAorCTB4YmMxOGZmMTEsIDB4YjJlMmNjMWYsIDB4ZmQxYTNkMDAsIDB4ODZhNDczZTEsIDB4NzNjNjllNzMsIDB4ZTE1OTY5YTAsCisJMHhlZTNhNGRiOCwgMHhlMDUxMmQ5MywgMHhiZTcyMmY4ZSwgMHg5N2ZlODZkOSwgMHhkZmY0YzFkNywgMHg2MGZlODc4OCwKKwkweDZlNzMyZTNjLCAweDE1YWJmMjkyLCAweGFlNWZkYmU0LCAweGRiN2IwNDQ5LCAweDBlZTNjZWZmLCAweDBmOTFhZjkwLAorCTB4Y2M3ZjgyOWQsIDB4ZmFkZjU4NDEsIDB4OWY3MzFjODMsIDB4YTVhNjk2ODgsIDB4N2YwNTI4MGQsIDB4MGQzZDJkMzQsCisJMHhiZDc5ZWQ1MywgMHgwNzE5OGE1ZCwgMHhlZWY1Y2QzYywgMHg5ZWI1ZTMxYiwgMHhjM2YzMGM1OCwgMHhiMzlmZDBkMywKKwkweDczZGU3NzllLCAweDYxNzdiYWEzLCAweDhlM2ViYzdjLCAweGQxNWViYmYxLCAweDgwMjZhOGY4LCAweDVkZTc3NTllLAorCTB4OTI3ZWVjMDksIDB4OTBmZjc2NDQsIDB4ODM3M2M5OTMsIDB4NDkyYTUyY2YsIDB4ZDFiOWVmOTEsIDB4ZGM0N2U5MWYsCisJMHgxMTgxZTYzMywgMHhhZDkzMjBkOCwgMHhiZjE2NmI4OCwgMHg1MDY1Y2VkMSwgMHg5N2U0Yzc0MywgMHhiOWZhZThjOCwKKwkweGVjMjk0YzZmLCAweGNjNmQ5MTlmLCAweDMwZGM1ZDJlLCAweDI1NGJkYjFkLCAweDUzODc1ODBmLCAweDMxMmQyZWJlLAorCTB4NzNhZTIwYjksIDB4MWM5ZmQxNzYsIDB4NTE3YzE0NzAsIDB4ZTAyZTZiNDYsIDB4OTFlODg4ZmQsIDB4ZDQzMWUzNmQsCisJMHg2NWI3ZjM4ZCwgMHg4ODQwOTU3MywgMHg5ZWE1MmE0MiwgMHg5NzI2MjQxYSwgMHhiOGVlYjgxOSwgMHhmZjczMTRkMCwKKwkweGU2YzZkZGIzLCAweDRlNzFjZGRmLCAweDA2ZDJkMzRjLCAweDhkOGQ5Njk3LCAweDM5NDQwZmNjLCAweDdhYTQ3ODY5LAorCTB4YWUzNjVlOTgsIDB4YzUzMDljZmIsIDB4NmZiNDBhNDcsIDB4OTk0ZWE3ZDQsIDB4NDBkZDYxMDQsIDB4OWMyOTg3YjMsCisJMHhkNjNkOWFmZiwgMHhmNDA1MjFmNCwgMHg0YjAxZDYwYywgMHhlNGQ0N2RhOCwgMHg5YWJmODQzOSwgMHhmYzRhZjE4YSwKKwkweGZkNWY5YTEzLCAweDhlMDNlNjAyLCAweGRlZDAwYWViLCAweDhmNWZmZDUxLCAweGQ5ODIzMmZhLCAweGQzZDgyYjZmLAorCTB4ZTc2NTM4ODgsIDB4YzEwN2Y3ZGUsIDB4ZGY4N2RmZmEsIDB4ZWIwZjEwYmYsIDB4YmE5MTdmNDAsIDB4OWU3ZWMxZTIsCisJMHg3OGRkZmZiYywgMHhlMWY0MzczOCwgMHg3MTVlMmNmZCwgMHgzNTFlNjE5NywgMHhmYWVjYzZjMSwgMHg2YzkyYjZhMywKKwkweGRmMDJkN2U4LCAweDIyN2FlNzdmLCAweGIzNTY0OTcwLCAweDAxZTU4ZDc1LCAweDVjOWU3MGQxLCAweDU1NGYyZjdmLAorCTB4OWVlMWIyNjMsIDB4NWJkNjNmMWUsIDB4MzJlN2VmYzUsIDB4Y2I5MmExY2EsIDB4NGRiNmY5NjEsIDB4ZWQwYTg2NGEsCisJMHg3ZWI2ZGM3YiwgMHhhMDhmNmU3MCwgMHgxNGQ5M2NiZCwgMHg4ZDExZjM4ZiwgMHhjNmRiNDU5ZSwgMHhmYTc3MzAyOCwKKwkweGFmOTliMzRiLCAweDZjY2FiNzdmLCAweGMzMTc3MDVjLCAweGYzODc5NjdhLCAweGMxZTc0OGNkLCAweDZmYWMzNjdkLAorCTB4ZmVkOGNmYzksIDB4YWRiNDg1OTQsIDB4N2FiZWQ0ZDUsIDB4MGI3OWQ5OWEsIDB4N2M5NjNmNjMsIDB4YTdmNjE2YTgsCisJMHg5MGYyNWJjMiwgMHg3ODYyZjM4MCwgMHg0ZTNhN2VmZiwgMHg4ODNmNTY3OSwgMHg3ZWM2NWVlYiwgMHgzMWNkZWYxYSwKKwkweGU2ZDU1ZjllLCAweGZjYjhjYjUzLCAweGY1MDc4OGNiLCAweDZiNWNlYTJmLCAweDM2OWY1YjMzLCAweDFmY2VmZmM2LAorCTB4ZmY2MWIyY2EsIDB4OTFmZTNjNmQsIDB4NzljMDI2NGIsIDB4ODY4NzFkZTgsIDB4M2VlZTVjMjQsIDB4MWVmYzMzZTUsCisJMHgxYTU3YjgyNiwgMHg4MjNlOTNkMiwgMHg2NTRkYjY2OSwgMHhiZjM0NjRmNywgMHhhYWUwMmY3ZCwgMHhlZjFkYjgzYSwKKwkweGY2YmFmYjE5LCAweDk0ZjlhYWE2LCAweDZiMzBmNjAzLCAweDkxZmE4Nzc2LCAweGE0M2YwMWFiLCAweDk3ZjlkMDRjLAorCTB4MjgyZTliZDUsIDB4ZjhjYmJlNmMsIDB4N2U3ZjA3NzAsIDB4MWIzN2Y0MDcsIDB4M2ZhYjU5ZjYsIDB4N2NlNTRjOWEsCisJMHgzMTdjYTU0NywgMHhiZjMyMWVmMiwgMHhhNmVlN2Y0ZCwgMHhmYWQ1ZmRhZiwgMHgyYjViZjVhOSwgMHhkMWZiZTJhZiwKKwkweGY4NjlkZjhjLCAweDJjNzhlNmNmLCAweDZlYmE1MmRiLCAweDlhZDE2NTAwLCAweGYzMDYyN2JkLCAweDRlNzg2OGYzLAorCTB4MTE5N2MzNDcsIDB4NDk0OGNiM2YsIDB4ODExMGJhNjEsIDB4YjE0N2U2OTMsIDB4Y2IzYzlhNWYsIDB4ZmVmMjE2ZWEsCisJMHhiYWY4ZDNmYiwgMHg4ZmM0MWE1ZSwgMHgxMThkYzM3YSwgMHhkYjcyMWQxZiwgMHgyMzY3ZDA2MCwgMHhiODdhM2EzZSwKKwkweDM2MjdlNDVmLCAweGE5OTQyN2U2LCAweDY3ODg0MmVlLCAweDlkNzYzNzUxLCAweDM5NGZjMjMzLCAweGJjMWRkNTI5LAorCTB4MGI2Y2Y0MGYsIDB4ZjhjNDc5YzMsIDB4ZDdiOTljY2IsIDB4NTdjZjFjNjUsIDB4ZTFmZGFiYzYsIDB4ZGI5NDNkM2UsCisJMHg2MDE3ZDg0NCwgMHg1YTdiYzNmNiwgMHhiNzNlZWQzYiwgMHg3YzA0YTg2YiwgMHhiNGY0YzIyZiwgMHg3NDM1YzRhZiwKKwkweGQyZjk3NzY4LCAweGMwMzgyZTI3LCAweDQxMWNlZThmLCAweDExZDM4ZTMwLCAweDc3ZjdhN2FmLCAweGY5ZTkxMTM2LAorCTB4YTU0Mzk3MWQsIDB4M2Y4ZmZhZDQsIDB4ZDJkYThkODMsIDB4ZGExZGZiOGEsIDB4YTA3MWU0YmYsIDB4YjE0NWNkMmYsCisJMHhmZTI3ZjlmYSwgMHg4NmY3ZTExZCwgMHg0Y2Y1YzVkZCwgMHhlMDJjOTc5YiwgMHg5OWFiYmI3MiwgMHhkYTJmNjdhZCwKKwkweDMwZjI4YTU4LCAweDQzN2FkN2VlLCAweGQwNjYxNjcwLCAweDYzOGQzY2FhLCAweDUxYmY5MDE0LCAweGRmNWM0YjNlLAorCTB4NTE2MDdkYzEsIDB4ZjA4ZjIyNzIsIDB4ZGMxZTAxN2QsIDB4MmY1NjUzYTcsIDB4MjhjM2RjNjIsIDB4OTNiYjdjYmYsCisJMHg2YjU3YTM5ZCwgMHg0MmI3MWU3MCwgMHg3OTBlYmQ4YSwgMHhiNWY0ZGRhNSwgMHhjN2VjNjNmYSwgMHhlZDAxMjZjMiwKKwkweDY1ZmU5MWE0LCAweDBkZDc2YTViLCAweGQ2N2ZkMDIwLCAweDg0N2VlOGJmLCAweGUyNWRhMjA2LCAweDU1ZmFkNGZkLAorCTB4ZmY3ODVjNDYsIDB4NTBmYWQ0NDAsIDB4NzIyNGY1ZGIsIDB4ZTZmMmY1M2YsIDB4YmYyZmI4YzUsIDB4YjA5ZmY2OWEsCisJMHg4NWM2MTIzOCwgMHg3YTM1ZmEzNCwgMHgxNDI4ZmQ4ZCwgMHg4ODE2YzhjZiwgMHg1YzE2YWVlMywgMHhlZmEzOWY2MCwKKwkweGVlZWI3MzI3LCAweGIwZDg1YzNmLCAweGFmYzgyMDdmLCAweDY2ZmI2MjVkLCAweGNlMDJmZGRiLCAweDIwM2YzYjBiLAorCTB4YmQ2MDdkNmMsIDB4M2Q2OWViODAsIDB4ZWQ5OWFmY2EsIDB4OGU1OWVhMDcsIDB4ZTdkYzBhMzUsIDB4ODg1MWI2NTcsCisJMHhmNTY1YzcyOSwgMHgxMWExYWVmOSwgMHg2MDc5NmE3NiwgMHg4ZWE4NmI4NiwgMHgxZmRjNDZkZSwgMHg1NGExYTJiMiwKKwkweDlkODA3Y2Y3LCAweGZkYjg5M2M3LCAweDQ4ZGY0ZGVlLCAweDM4Y2M2MjRkLCAweDlhNWZhNjkzLCAweDk3ZmE2OWJlLAorCTB4M2NkOTU3NmYsIDB4Y2MxYzBhNDcsIDB4ZmViYjA0YzgsIDB4YTg0YmNlMTgsIDB4Y2VkYWJlNWQsIDB4ZDFlNjA3ZDcsCisJMHhiODlmYWE1NywgMHg1ODFmNWJhMCwgMHhiM2U0Yzc5MiwgMHhlN2M2MmM0NCwgMHhjYTU3ZDkzZCwgMHgxZTdkOWQwNywKKwkweDdmZWZkNzY3LCAweGQxZmRiNmY4LCAweDg1ZTlhMWZhLCAweDVlYTMzZmQ2LCAweGM1YWZmOTE4LCAweDMwNzI4Y2Q1LAorCTB4ODJlODFmZjIsIDB4N2IxYmMxZjksIDB4MDQwNzgxNmQsIDB4YTc0Njc3ZDAsIDB4ZTkxNWFmN2YsIDB4NzAyYjQ4ZWMsCisJMHgzZmM4MzljMSwgMHhjZTk0MDdjMCwgMHgzMWRiZjRlYSwgMHg5NDk2MjM1ZiwgMHhjNzVlNzFkYSwgMHhmYWUzNGRlNywKKwkweGUxYzgzZjE2LCAweGFiNGVkNjdlLCAweDQ3M2IyYzdiLCAweGI4MGM5MjU0LCAweDM2ZGI1Mjk4LCAweGY4YTRlMmQzLAorCTB4MjE3NDY0N2MsIDB4ZTUzYTJiZGMsIDB4MTA5OWI2YjEsIDB4YzhmMjVlZmEsIDB4NWZiODQyOTgsIDB4YjZkNmNhN2UsCisJMHhlYTJlMmQ3NywgMHgyZDhlZDVkNywgMHg1N2U1ZmI4NCwgMHhmNjgwZGQ4MCwgMHgxMGRiOTYwNywgMHg4OWU1M2Q1NywKKwkweDk1NzlmMmU3LCAweDVjY2UzZmJkLCAweGNiZGQ5ZjMyLCAweDI5MmJjYWNjLCAweDNjNzQyZDhmLCAweGZjM2MzY2FiLAorCTB4OTU5ZmEwZjcsIDB4MTA0NWM1YWQsIDB4ODg4NGE5YjcsIDB4YWFjZjFkMzcsIDB4MmQ5MDhlZGMsIDB4OTNlNzhkOWIsCisJMHg2Y2RiN2JlOCwgMHhmMDc2NTU5ZSwgMHhjNWFkMmVlYiwgMHhiMGYyYWRmMSwgMHgwZTQ0ZmE4NCwgMHg0NGE4YjhiMSwKKwkweGRmYTU2YWZiLCAweDdlYTM4ZGFkLCAweGRhZWZlNTJmLCAweGU2MGI4YjI0LCAweDFmYjlmNGFmLCAweDkzNmJiNWU2LAorCTB4ZjExYWFhZGMsIDB4N2MxZjkzNWMsIDB4MzVhYzc0MDcsIDB4ZmRmYjc1YjEsIDB4Njg0ZjBkYWYsIDB4YmY3OGNjYmIsCisJMHhjMzI2NDdkZiwgMHg2N2M1YTQzYywgMHg5ZTU4ZDRjMSwgMHg3Y2YxMzhhZiwgMHhjNTg5YmU0NCwgMHhiZmU1OGMzNSwKKwkweDUxMmNlY2QyLCAweGQ1MTcwMDMzLCAweGFmMTYxNDg3LCAweDRmZTA3ZmE2LCAweDE3YTYxMTU2LCAweGViOWQ4NGQ1LAorCTB4ZjA0YzNhYWEsIDB4YTFmNTRiMWMsIDB4MDJjNzNjNDIsIDB4ZDYzZmZjZmIsIDB4NzM1ZmYwZTEsIDB4NTcxYmE1OGUsCisJMHg5MjA1NGY4YywgMHhjMDhhNTkzMCwgMHg1NWJiMzRmNSwgMHg5YmZiMTc5NywgMHg4ODdmNDA0NiwgMHg3MzgyZTcxOCwKKwkweGE5ODY2MjE4LCAweGJmZWQwNzY2LCAweDI5NGQwNTc4LCAweDRiYTcyNDNmLCAweGVhNWFmYjg0LCAweGUxMTE0ZWE2LAorCTB4MzIzNWE5YmUsIDB4NjI2MjNmZGYsIDB4ZjZiNWNjZTcsIDB4YjQ3ZjM4OWEsIDB4NjRiZGI0ZjQsIDB4ZWNmZGM4MDcsCisJMHgzNmI5YWQ1YiwgMHhmMzgxN2ViNiwgMHg2YmJmYWQ2MSwgMHg2MDExMzcwNCwgMHhlMDgwNzVkZSwgMHgxNDljODBmOSwKKwkweGIzZmMwMmQyLCAweGUwMWU3NzExLCAweDEyN2IzZGVkLCAweDM3NWIzN2U3LCAweDkwMTk3ZmE2LCAweDk3YTZjY2JhLAorCTB4NTdmNzhhNTUsIDB4ZmE4NDU5MWYsIDB4ZGQzMDRhZTAsIDB4NmZmMzQ5OTMsIDB4N2NiMTk3ZDksIDB4MjY0MmU5ODYsCisJMHhmNmRiZjA4NSwgMHhjNmJmOTY3MiwgMHhjZDA4NjE3NCwgMHhjZTVmNmJiZiwgMHg0OWMwYjBmMiwgMHhmNjIzYjYwNywKKwkweDQ4ZmY0MjhhLCAweDdkZTM4NzY4LCAweGMwMWFmYjliLCAweGYxNjI2NGI3LCAweDA1MTVlOTE3LCAweDdkYjQ1M2Q3LAorCTB4NDRlOTZiMjEsIDB4MWVmOGYwMGIsIDB4YTc4ODRkZDgsIDB4ZGFmYzE2ZDQsIDB4MDJlYWYxMDYsIDB4M2RmYjBhYjcsCisJMHg4MzdiZjMzNiwgMHhmMWFhNjliZSwgMHg3MDk5YjQ1NSwgMHhmMDI5MDNmZSwgMHg0ZmNlNDNmZiwgMHhjOWE0MmU0ZCwKKwkweDhiZWMwZDdkLCAweDZiZWU4ZDI1LCAweGI0ZWQxZDYwLCAweGY2MDZkM2RkLCAweGFkMWJlYzY2LCAweDM3N2VjMDUzLAorCTB4NWNhN2YzYmQsIDB4MGFmYzlmYmMsIDB4MzdkOGNmNTYsIDB4ZjY5MDljZTgsIDB4MDY2ZmVjZTcsIDB4OGY1YzhhNmQsCisJMHhmZmNmNmQzZSwgMHg2MmEzYmUxNCwgMHg1MDU0ZmY0MCwgMHhhYTBlZTQ5ZCwgMHg0NGRjNmI4NywgMHhiZTYwYjI1NSwKKwkweDM2MmY5ZmFjLCAweGI2OWY2NjExLCAweDgyY2U0YWQ5LCAweDEwYzBjOTVjLCAweGY2NDU1YjhlLCAweDZiYzg0ZTkyLAorCTB4MjZiNDljZjYsIDB4OWI1ZjY5ZjUsIDB4ODQ1YWJkOTIsIDB4MjMyOTM5NzEsIDB4ZDgxMTc0NzgsIDB4N2JiMWRmZmYsCisJMHgxYmI3MDQzZCwgMHgxNGJlNzNmNywgMHhlZDhjZDdiZSwgMHhmZWMxYjEwZiwgMHgxNzdmZDAxMCwgMHhmMmE3ZjM0OSwKKwkweDJmOGIxN2Y4LCAweDg4ZGM5NDkzLCAweDA3ZWYzMDc5LCAweGVjMWE3ZWZkLCAweDYzNjA5ZjM3LCAweGJmNjgwN2ZiLAorCTB4NjNhYmIwNDQsIDB4NThlOThhODgsIDB4ODE2NTY3ODgsIDB4ZGY5ODNkMjgsIDB4ZGU4ZjFhNDMsIDB4ZGM3ZmViNDcsCisJMHg5NjQ5ZTJjYSwgMHgwZjhiYTIwNiwgMHgzOGIzYzc2NiwgMHg4YjA3NGNjYiwgMHg4ZGM5YzYwZiwgMHgxMGZmODJiNywKKwkweGMxMzg4ZTc3LCAweGE1ZmNlODdmLCAweDIyZmVlMTIyLCAweGFlMjM3OWM5LCAweDExMzQxZDhmLCAweDM5NTlmN2EwLAorCTB4OTlmNTg0ZTAsIDB4NzUyNGFiYWUsIDB4YWZhZWU5MzMsIDB4YWI1YmNiOTMsIDB4YmQ0NTcxZjcsIDB4NzM3MmUyMGEsCisJMHg3ZDNmY2MxZCwgMHg3ZWUwOWYzNiwgMHg0YTUzYWVlOCwgMHg5MzRkZDYwMCwgMHg5MTM1MmMzMiwgMHhmOTJiOWZmMSwKKwkweDBiMzkwZjc3LCAweGZlMjFlMzMyLCAweDQwOGUzN2JjLCAweGM1ZjYxM2ZiLCAweGJmMGU0MDk5LCAweDA1NjM5NmRlLAorCTB4M2MwNGJjM2MsIDB4MzI0ODdjYTIsIDB4ZmE4NmVmM2IsIDB4N2E1MDJlOTIsIDB4ZGIzOWYxMzMsIDB4NjNhOTJmMjcsCisJMHgyNzdmMjgxMiwgMHhlMTU3NjBkZCwgMHhhZDY3YTliZSwgMHg3ZWUwMzc4ZCwgMHg3ODRjMTdkMCwgMHg4YTRiZWViZiwKKwkweDJmZjIxNGFiLCAweDYwOWQ1NzlkLCAweDZjY2Q5ZjdmLCAweGJjZmVjMzhjLCAweGJjZmVjMjYwLCAweGY1NzVkNzE0LAorCTB4YzNmNzRhNGEsIDB4NGE3YzU4MjMsIDB4ZWMwOTExYjIsIDB4NTAyYTY0YjIsIDB4NzNjZmE2ZWYsIDB4NDkzY2Q5ZTMsCisJMHhlM2NiZDNiMywgMHgyZTNjZmU5OSwgMHgyMDBmM2MxMCwgMHg3ZjUxZjI5OSwgMHg5ZDNhZmRiNCwgMHhlYmY3MDQ1ZCwKKwkweDJhZDU5YmY0LCAweDRhZTM4ZTAyLCAweDQ4NTFiOGI1LCAweGU0Y2Y3ODg0LCAweGRiN2U4MjEyLCAweGU3OGNiYjY0LAorCTB4MzA3ZjYwNzIsIDB4YzI5YjFiOWMsIDB4MGY5NGVmZWQsIDB4ODEzZDcxMmEsIDB4ZGMzMGUwNGEsIDB4ZTc2MmQ5N2YsCisJMHg3NWYxNjhmNywgMHg0ZTM5ZWJjNSwgMHgyMjZkMjNhZSwgMHg1ZGQ3OTFmOCwgMHgwNzg4MmUyMiwgMHg4YTQ5N2Y1ZCwKKwkweGU3NGU0N2U5LCAweDEwMjMzZWY1LCAweDk3YmU4MTI5LCAweDAwOTU1MTdmLCAweGVmNDRmOTc3LCAweDJmYWY0ZGU3LAorCTB4ZTBlMzA1M2MsIDB4MzllMThiNTQsIDB4OGY0ODg5ZjgsIDB4NGZmN2NmMWIsIDB4NGZlZTFhNzcsIDB4ZDZmM2U3OGUsCisJMHhlNDcwNjRjMSwgMHgxZDZkMzEzZSwgMHhmMjM4YmE2OCwgMHg4YjUzZjQwOSwgMHg2NWYwMTcxNCwgMHgzZWZkZGRiYiwKKwkweDViZmE3YmFjLCAweDM4Yjk3MjY1LCAweGI2M2UzM2UyLCAweGE1YzQ2ZjlmLCAweGExZmY1YzM4LCAweDJlMDNiNGY4LAorCTB4ZjNhZmFlYWUsIDB4YWZiZjY5NWIsIDB4MDdlYWNhMWUsIDB4Yjk1ZDgyMWMsIDB4YzkyOTk3ZjIsIDB4ZjFjZGU3NjAsCisJMHhhOTY4ZGVjYywgMHg5N2MwM2I4NiwgMHhjYmUxODEzMywgMHgzZjViYmEzOSwgMHhlMjY3YzU1NywgMHgwMWJlOWE3YiwKKwkweDNkOWVhMGVlLCAweGFjN2U2MDcyLCAweGQ3OGE2NTc1LCAweGVkZDc4MDU1LCAweGIzZjM4Mjc2LCAweGU2NWJhNTFmLAorCTB4ZWQ2OTllODIsIDB4Zjg2Nzg5ZWMsIDB4NmFlYmE2MzcsIDB4NzU4N2VlNTcsIDB4NmM2N2ZmMWQsIDB4ZTAzNjk4YmMsCisJMHhkZTM5MTI5MiwgMHgzODY0ZTg3ZiwgMHgzMzc1YWFmMywgMHhmM2ZkYTY2ZiwgMHhiZjVjNjVkYSwgMHg4YmU3ZTU0OSwKKwkweDFlOTJmMTIyLCAweDc3MGQxNzgxLCAweGVmMTY3NjFkLCAweDc1MzNmMGQxLCAweDNjMjJiYmY3LCAweDIxMTlmYTlmLAorCTB4OWUxMjRjY2UsIDB4OTlmODY4ODcsIDB4OWMzODY3ZTIsIDB4MTM4ZDg4NzIsIDB4ZGRjN2UxYmQsIDB4ZTYwNjljZTUsCisJMHg4NzM3MGEzMSwgMHgyODBhNmUxOCwgMHhiN2Y3ZjAzZSwgMHgxMThmYzA3YSwgMHg4YWY1NGYzNywgMHgzY2YxMmY5YiwKKwkweDUzYmRhYWZjLCAweDE4NmViYjJmLCAweDdkZjdlOWY0LCAweGI2ODlkMzFhLCAweDhmODJmYmQ4LCAweDU2ZWY3ZTcyLAorCTB4MDZjYzZlZWEsIDB4ODk5MzcxN2IsIDB4NDg5MzdmOWQsIDB4ZTcxNGFkYzYsIDB4N2JiNGUzYmIsIDB4MjBiMjZiZTUsCisJMHhmNjYyNWRiZiwgMHgxOWIzN2I2NywgMHhiYjc2Y2ZlZCwgMHhkNzcxODNjNywgMHhjYjllMGIzNCwgMHgwZGE3OTIyNiwKKwkweDA2YmJmNWY2LCAweGRmYzhkNDU4LCAweGM3MmVmOGQxLCAweDlhMWNhMzYxLCAweGVmZmMwMjc4LCAweGYzZmM5OGQ3LAorCTB4MWI4MWNhNmUsIDB4MTk3YTQ4ZWMsIDB4OTNiOGMzOTMsIDB4ZTIxMTI2Y2EsIDB4ZmRmYzhlNDIsIDB4ZTA0ZmFmODAsCisJMHhjM2MwMmQ0ZSwgMHgyNWVmMDU3MSwgMHhhMGFlM2VhYSwgMHhiZWNkZmM1ZCwgMHhiZTIxMGJiNywgMHg5ZTFmZWRhOSwKKwkweGMyZWRlN2IwLCAweDNlZjA5MTgyLCAweGRjNmJkOWMzLCAweDNjNzk2YWFlLCAweGQyNzYwMTRhLCAweGM0ZmQyZjcwLAorCTB4ZmQyNjc5ZjAsIDB4ODAyNWYyYmQsIDB4NzJlZWVjOWYsIDB4NzNlYjdkZTMsIDB4MWQxNzg0ZTAsIDB4NzM2ZDZlNzcsCisJMHg2MGIzMDc0ZCwgMHg0ZTdkNmZiYywgMHg5YjFmOWQ4OCwgMHgxZDNkZDQ3ZCwgMHg3ZGQ0NjU0YywgMHhiNzBmMWNlYiwKKwkweDcxNWRkNjkxLCAweGRmZmRmNDYyLCAweDE2M2U3Yzc0LCAweGQ3ZmJmMTBmLCAweGMxYzQwYTQzLCAweDZiOWE5NTFiLAorCTB4MjZhMjdjZDgsIDB4YTY4ZmVjMGIsIDB4Zjk0N2Y4NzcsIDB4MDhlMWY4ZDYsIDB4YzNmZjdkZGQsIDB4ODhmM2Y4ZjgsCisJMHgzOGY3NjI0YiwgMHg0ZWI4MjliNSwgMHhkZjYxMjhmOCwgMHhlYjcxZjIzNSwgMHgzOWY3YWUyYiwgMHgwZjljNWVhYiwKKwkweGI5NmM3MGY2LCAweDU3NmRkNzFiLCAweGZlN2M0NTM5LCAweDY0YjIxMjEzLCAweDEyNWNiYzgxLCAweGNhMzQ3N2FlLAorCTB4NDIxM2Q0ZWEsIDB4MmE0NDdiZjcsIDB4ZTVhNzYxMTksIDB4OGRjNWZhN2IsIDB4NzBlZmY2ODUsIDB4ZjAwZTRjNzgsCisJMHg0M2FlYTQyYiwgMHg0OTg0ZGRmMCwgMHg2ZWMxNjMzOSwgMHg0ZGFjYzdkYiwgMHhhMzRjNzE4NiwgMHhiNDU1ZDI5YiwKKwkweDg3NGRkZWQ1LCAweGM3Mjc1NzQ2LCAweDg1OGUxZGM5LCAweGY2NzhjNzI2LCAweGUwYTFkODFkLCAweDdjMGI3NmIxLAorCTB4NzFhMGUxYWYsIDB4ZmYyNjM5ZWYsIDB4ZmM4MDNjMDgsIDB4MmMyMGYxYmIsIDB4MDdjNmJjODAsIDB4ZmNiNTRmMWIsCisJMHhhMTBmMWYzZiwgMHgxZTlmMjA4MSwgMHgwODcxMDBmMSwgMHg0M2MyYjdjNywgMHhjMzU1ZjAxNiwgMHhhZWQ3ZjUwMywKKwkweGZlNjhmZTAyLCAweGY2YzJhMzVhLCAweDBkNzk2YTFkLCAweDdjZjY0NTA3LCAweDEwYTVjZjdjLCAweGY2NDQzZmRjLAorCTB4NmQzOWQ5NTksIDB4NTdhZTIyNGYsIDB4NmQ2NGVjYmMsIDB4M2VkODdlNzQsIDB4NjQ5OGJhOTgsIDB4ZWJmOTgzYjIsCisJMHg4Yzg5ZWZkYSwgMHg1N2U4MDkwOSwgMHhlMTA2YTE4ZSwgMHgwNmUzZjQwZSwgMHg3MTc0M2RhMiwgMHg0MTc2OTE3ZSwKKwkweDcxMzc3YjgwLCAweGY4MDY3OTZmLCAweGQwNjRhMTk3LCAweGUyZTYzMThiLCAweDg3N2ZlMDEwLCAweGY4MDY0YTZkLAorCTB4YzliNjM5ODcsIDB4NWRhZjgwNTksIDB4MGViZDU2MjMsIDB4MDFhZWQ2NDMsIDB4NTE2ZjJmZTUsIDB4Y2QyN2ZkYmIsCisJMHg2YWYwYjVlZSwgMHg3NDZmZjZiNSwgMHhiZDc0ZmIzMCwgMHgwMjBmOWQ5YiwgMHg4NzQ5MWRiYiwgMHgyYzQxZmY2NiwKKwkweDlhMTA4NzQwLCAweDg2Y2FmYTYzLCAweDBkYjliYWY2LCAweDQxZDAzOWVjLCAweDIwNWZiYWY5LCAweGU0MWZlMDRkLAorCTB4NTMyOWRjOWIsIDB4MTdlYmNmYzEsIDB4Y2VjZTgwOTIsIDB4ODYwYzVmYmQsIDB4ZjM3MTY1MzgsIDB4ZGU4MTQ3YWIsCisJMHhkNDNkNmQ2MiwgMHgzNTBmNWZhNSwgMHhiZjlhZDFmYSwgMHgzNDJiY2RhMywgMHhjZjliNDg3ZiwgMHhlNTA0ZGY4MiwKKwkweGQzYjlmY2Q5LCAweDI2YWRkNmNjLCAweDZlNzgyYzg3LCAweGVhZjNmMWY5LCAweGJmYWU2ZTU1LCAweDMxNDdlZDEyLAorCTB4YTQyZGM3ZWYsIDB4ZWVkMmU5MTUsIDB4ZjM5OWI5MWQsIDB4OWQxMGY4YTMsIDB4Mzk0MzY2ODcsIDB4M2U1MTM3MjEsCisJMHgxZGVmYzRkYywgMHhiZmE1YzliOSwgMHhiYzk2ZTE1NywgMHg2ODhlZjdkOCwgMHhiZWY2ZjRmNSwgMHhkNmI4N2M3MSwKKwkweDZkZjQ2ZWIwLCAweDc2M2U0M2QzLCAweGZhN2ZjOGNmLCAweGQyNzczY2Q4LCAweGMxMmZkMTEwLCAweGNlOTc5YTgwLAorCTB4MzI3MDY5ZWUsIDB4NjI1MjFjM2UsIDB4YjlmYjU3OGYsIDB4YjUzMjRlZmUsIDB4ZTViOWMzNjUsIDB4OGVmZTdiZmQsCisJMHg3YjJiZTNlMywgMHhmODFlZmVmZSwgMHg0OTRmMTM4OSwgMHg0ZWI1ZjYwNCwgMHgwMTJlMzUzYSwgMHhkMmYzZTdkNywKKwkweGFiNTkzZDcwLCAweDkzNjlmYmQ3LCAweDg4ZTdiMDhkLCAweDU3NzdlZDFmLCAweGRjN2E1MjBlLCAweGMxNjdkMDBhLAorCTB4MWU2N2I3ZjQsIDB4NzdkNDI5ZmYsIDB4MjI0NGI4ZjEsIDB4MmExNDRkY2YsIDB4YzcxMGExOWUsIDB4YmZiZmU0MmQsCisJMHhmZTYwNTA3MywgMHg5MDdlNTY5MiwgMHhmM2M1ZWVmZiwgMHgyMWIwYjcxYywgMHhjNDhmYmI0MiwgMHg5YmU3MjExYywKKwkweDlhMTkzZGY4LCAweDU5M2E2ZjVjLCAweDhlY2E0YTc0LCAweGZkZmMwZjk2LCAweDVhMGJlMjMzLCAweGYzOTlhMTVjLAorCTB4MTFmY2I0OGYsIDB4YTc3Y2I3Y2YsIDB4ZmMwOTZlZTksIDB4ODlhNGVmZjMsIDB4ZWVkMTFkYzQsIDB4ZTBjZTk1MGMsCisJMHgyZjFjZTIyMywgMHg0YTdlMGMzYiwgMHhiZDNmNzNjYiwgMHhkZTJiOGU5OSwgMHg0YWRjNDQzNywgMHhmZWRlNmRlOCwKKwkweDViZTQzNjdhLCAweDhmZjc5OGM1LCAweDlkZmJmOTE4LCAweGZlZjFiYmU2LCAweDJhMDkyMTkxLCAweGZiNWJkM2QyLAorCTB4MzhhNmFlOTMsIDB4Mjc3MjBkMTksIDB4NjVjYmNmY2MsIDB4ZTUxODc3ZjcsIDB4ZmY5ZWNhZmIsIDB4ZDkxYjZlNDgsCisJMHg5MjdiYmYzMywgMHhiZjBlNTFiZiwgMHhlYjgwNTMzZCwgMHhjM2M5YmQ0ZSwgMHhiNDdkZGI4OCwgMHhiZmRhN2U5ZiwKKwkweDlmYTdlZDEwLCAweGY4YWY2M2ZhLCAweGJkZmY5ODljLCAweDFhZjMwZDJmLCAweDlmN2JiZDVlLCAweDRlN2YwNjRlLAorCTB4NjRmNGU5YzMsIDB4YmI4OTliODYsIDB4ZWM0YzlhN2YsIDB4ZjIzMmYyZGQsIDB4ZjMwNzczZWQsIDB4ZDcxMGU2NmIsCisJMHgzZmU5OWJlYywgMHg3OGFlMGE3NywgMHhkMjdlMTdiNCwgMHg0YWIzZmIwYSwgMHgwZTczOGQzOCwgMHg0MWZmYTIxNywKKwkweGUzMTA3OWY4LCAweDFjNDczNjM4LCAweDdiZGVlNzg5LCAweGExOWJkZGZkLCAweDViOTgzMmY5LCAweGJmMDU3OGUzLAorCTB4MzZiODAyYzcsIDB4NmY0NTUzOGUsIDB4YjJlMDQ5ZDQsIDB4OThhYjRhMTUsIDB4YmE3ZWUzMWQsIDB4Y2U1MTk3NDYsCisJMHhmNjA5NDg0NywgMHg4ZDNhMjdhMywgMHhhYmQyMzAzOCwgMHhlZmRhZTdmOSwgMHg0YzdlNTBjMCwgMHhkZGY1YTI0ZiwKKwkweGZmNjNlNmFhLCAweGNlNjFjNmEyLCAweGRmYzY5ZTk3LCAweDljOTVmYTllLCAweDFjZGVlM2MwLCAweDRlNGUxN2ZmLAorCTB4ZGJkODBiN2IsIDB4ZTUxOWJlOTMsIDB4ZWNkNzJjNjYsIDB4OTAzNDIxNDcsIDB4ZmMxZmE5ODMsIDB4YTkwOTIxOTEsCisJMHg5Nzg1MGZhOCwgMHhlM2E2ZTIxNCwgMHgzZmE4MTkwYywgMHhhZjhhNGVmZiwgMHhlM2RkYmM0MCwgMHhjMjdhY2Y2NCwKKwkweDEzMjVmNTViLCAweGUzNzcyNGYxLCAweDY2M2UwZTRlLCAweDk2ZWRkYzAzLCAweDFmMTA2Y2VhLCAweGJhNWVjZWJkLAorCTB4ZGE2ZjU0MDYsIDB4ZjBiMzA1YTcsIDB4MTMzNjg3OWUsIDB4ZjRkOTkwODEsIDB4MTAyZDczZTYsIDB4MjUxZWYwNDcsCisJMHhhMGEwM2U3OCwgMHhjMDU0ZmY3OSwgMHg1NmE1ZWZlOSwgMHg1ZTc1NDc5YywgMHgwOGIxZTQyNCwgMHhiY2Q4MzMzZiwKKwkweDU4N2UwNmM2LCAweDZmOWQ4NTMwLCAweDc0NDg5ODNiLCAweDI3Zjc5MGZiLCAweDhmMDZiYzMwLCAweDFkZDliZjlmLAorCTB4MmYxMmZjYTMsIDB4MjlkYzQ5OWYsIDB4YzcyZTM4ZDksIDB4NzBhM2ZjNjMsIDB4M2ZmYjA5YmQsIDB4NDgxZDcwNGQsCisJMHg5ZTY1YmYwMSwgMHhjZTg1ZjM4MCwgMHhhNDBlMTNiZCwgMHhlZTNiN2E1MCwgMHgzMzNiNDQ0YywgMHhkZGUwZjgzZCwKKwkweGM2ODgyYTRlLCAweGNmOGIxZWZmLCAweDc4MGExNmJiLCAweGVhYTE0MGNmLCAweDU5NjE3Y2MyLCAweDk4ZGZlZTI2LAorCTB4OTllNDhmZjAsIDB4NDMzZTUwYzUsIDB4NzRjZGY5YzYsIDB4Nzg4MjUyYjEsIDB4MjEzNGQ5ZDQsIDB4N2I4YmU2MDcsCisJMHhmODVhYjY4NCwgMHgyOTdmNWMxZCwgMHhmZDM4ODc2YiwgMHg3Y2ZmMzBjOSwgMHgwYzc5MzhhNywgMHhhYTljNzZmZSwKKwkweGVmZTE4N2U1LCAweDNjYzMxMjAzLCAweDBiY2VkNTZkLCAweDdjYjRjZGZiLCAweGY3MDE2Y2Q1LCAweDY2Nzc0ZWVmLAorCTB4N2UwNDdmMTAsIDB4Nzk1M2Q3MGEsIDB4NmNiOGE1OGUsIDB4YjgwMDVmZWUsIDB4M2ZhNDU5OWUsIDB4YzRiYjM4MzcsCisJMHhlYjkxMDI0NiwgMHhlZjEzODIxNiwgMHhmN2M4M2IyMSwgMHhmYzA5Nzc2OSwgMHhlN2FlN2M1ZSwgMHhjZmJjNzAzNywKKwkweGZiYWM5Yjk5LCAweDNmMzA5NGFlLCAweDY0NTNiYmQzLCAweGIzZTQ3MWY3LCAweGY0ZDZhMWRmLCAweDg3YWU0NmViLAorCTB4ZjFmOWYwMzcsIDB4OGU4NjRmM2MsIDB4ZDI4ODYyOGUsIDB4NWIzZjQwODgsIDB4NjJlNWJlNDcsIDB4YTVjZjBlMWIsCisJMHhlNzg3MDdlMiwgMHgxYzZlZjZkMywgMHg4YWQ3OTg2MSwgMHgxNzExNmI5NSwgMHg2ZjFkNmM2OSwgMHgxMzgyZWMzNiwKKwkweGRmZWE2ZWMxLCAweDlmNGYyNWJiLCAweDk3YzdhMThmLCAweDNkOWExM2I1LCAweGM0NTdiZDk4LCAweGY5ZDljMzc1LAorCTB4ODkwMmNmOTQsIDB4YWViZmQzZjIsIDB4NzI2MDk4YmQsIDB4ZDA3ODgwMWQsIDB4NzhkYzk3YWQsIDB4YmQ5NDRlOGYsCisJMHgxYmU4YTBmOCwgMHg1MGRmOGJkOSwgMHg3YWEzY2MxZCwgMHgxZjAyNjRmZCwgMHg0MTkxMDczNywgMHg4YmE2Mzc2MCwKKwkweDM4MGE3ZWRiLCAweGE2ZTNhNGVhLCAweGI0OGUwNjM5LCAweGVmOWI0NzcxLCAweDA2M2Q1MjE3LCAweDZjMzM5MGRjLAorCTB4YTVmYTY1OWQsIDB4YTRlZmRjMzQsIDB4NzZjM2Y3Y2QsIDB4YWUyNWZhODQsIDB4NmZkMmZlMTgsIDB4Zjc3NGIyMTIsCisJMHg0YWVkODQ3YSwgMHhlNzIyNWY4NCwgMHg2NGJmN2I3ZSwgMHg5NTQ3ZjUzYSwgMHgyMDZmYTAxYywgMHg3YjQ1OGZmMSwKKwkweDQyYzk3MTg2LCAweGYxMDUxOGQ4LCAweDE4NzNiNGMxLCAweDc0NGFmMWU3LCAweGYzZTM4YWZlLCAweGIwMmY4OGQzLAorCTB4Yjc1MjQyN2YsIDB4MTVmZDE4N2UsIDB4ZDYzY2NlMmQsIDB4N2E1M2Y5YTksIDB4OGRlMzg0OWMsIDB4YTU3ZGQ4YjMsCisJMHg4MTBhNGUxYSwgMHhiM2ZmYTA5ZiwgMHhmNGViOGM0NCwgMHhmZGFkMWI4NiwgMHhhMjEyZjBkZSwgMHg1NjRjMDhmNiwKKwkweGZhZTE3ODhmLCAweGYyZjE3NWY3LCAweDE5N2M2ZDE3LCAweDA1ZjY4NjRhLCAweDM0M2UxYTI3LCAweDliYzcxOGJjLAorCTB4ODNjNDM0ZmYsIDB4YmE2ZjFhN2EsIDB4MGU2ZjE5N2EsIDB4YWVkMTkwOGMsIDB4N2NkN2U2ZjcsIDB4ZWFmM2U0ZWEsCisJMHgzN2E2MjcwNCwgMHg3ZjFiMzU1YywgMHhkODJjNjg5NywgMHhmOTM3ZjAxMSwgMHg2YjhlMTViOCwgMHgxYzljMzNkNSwKKwkweGMxMjQ1YjY4LCAweGVjMTc5MWZhLCAweDFjYjc2NjQ3LCAweGZmZjA3OGI0LCAweDgxYzRjNjAwLCAweDAwODAwMGQ1LAorCTB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2NiZGZmMDAsIDB4ZDU1NDdjMGIsIDB4NjdiN2VmYjksCisJMHgzMzI0NzllZiwgMHg0OTkyNjY0OSwgMHgxZDg0M2MzMiwgMHgwOTIxMjEwOCwgMHgxMWJjMjEwZSwgMHgxMTA4NDkzNywKKwkweDg4YTgwY2EyLCAweDFmMDFkNjhmLCAweDRkMDkyMDYwLCAweDZmNTNkNWFkLCAweDUyODEyMTMzLCAweGJkNTgzZDZjLAorCTB4ZjRmNDdiZDYsIDB4NDFlZDU4MzcsIDB4MDEwODc1MGQsIDB4MjY3MDI3ODMsIDB4ZDBmMDk4YTAsIDB4N2FjMGY4MjAsCisJMHg0NTI5NjhkYSwgMHg1YTE4OTIxYiwgMHhmNWNmNmEwZiwgMHhmNmI3ZGY3YywgMHg4MzI2NjY0ZSwgMHg3M2RlZjdhNSwKKwkweGQ2MmU5Zjg3LCAweGY1YWY2YjVlLCAweDVmZjllZmFkLCAweDRhOWI1YWRmLCAweDUwMGE5ZmMwLCAweDk4MjAxNWIzLAorCTB4ZTFmOTUwMDYsIDB4MDY0ODRhODYsIDB4MDEyMDNiZTgsIDB4OTZkNDAzMTQsIDB4ZmUxYjQxYzksIDB4YjFmZGI0YjUsCisJMHgwY2RkNDVjNywgMHg1MWRmODk1NiwgMHhmNWMwMjY2MSwgMHg5NTBiN2UyMCwgMHgwNmU2YzUwZSwgMHhiYzk1ZTY1OCwKKwkweGQ2ODAxNjcyLCAweGUxYmZkZTJlLCAweDYyYTgyNTkyLCAweGY5YWY3YWZkLCAweGU4OWIxZWUzLCAweDVmZmYzNWZiLAorCTB4YjgwMGM4MDMsIDB4MTk3ZjdmNTEsIDB4MmZmYjBmZmQsIDB4MTg2MGE0ZDMsIDB4M2IzNjVkNWYsIDB4OTc4ZGZmYmEsCisJMHhhNjkxM2ZjYSwgMHg2MmQ3MmMwMiwgMHgzZTRmYzM5ZSwgMHgyMmYyYTc5MywgMHhhYzI0YmVjYywgMHg4ZmI3NDQ1NywKKwkweGNmYjkyNjczLCAweGUzMmZmMWQ5LCAweDMyZDdmYzYxLCAweDY1ZjNjNWMwLCAweGFmZjc1MTZmLCAweGM4ZWQ3N2U5LAorCTB4NTIzZDQ4ZjIsIDB4YWNlODAxNjYsIDB4ZGIxOTcxYjcsIDB4N2YwMTZlNWUsIDB4NGQyNTgxYzgsIDB4MDA2NWM0NTAsCisJMHg5ZDBhMDE1MiwgMHg1ODE5OThiOCwgMHgwZDAxNjRiZiwgMHgxMzYzMDhmOSwgMHgzYWI5ZjdlMCwgMHhkZjg2MTMxZCwKKwkweDA3ZTM4ODNmLCAweDhlMzBkYzcwLCAweDM4MDFjODFmLCAweGZhZTRlZjU0LCAweGFlMWVmNTZiLCAweDJmODI5MzVmLAorCTB4ODc3ZmUzYTQsIDB4YjhhOGIwYmYsIDB4ZGZlZGM1OWUsIDB4ZGYzOGZjNTEsIDB4OGYwYTRiZTIsIDB4OTNkNjliM2IsCisJMHg3MTgzMGI0ZiwgMHhmNzNmOWViNCwgMHgwZGUzZmQxNiwgMHhiNmJmZGMzMCwgMHhiZjhiMzNmZCwgMHhmOWViZjJmMCwKKwkweGE3ZTdmMzViLCAweGNkM2YzY2E4LCAweGNmMGMxNWFiLCAweDE4MDE0NGJiLCAweDlhNWNlYjgzLCAweDYzNWZjZDFiLAorCTB4YzZmOTU4OWUsIDB4ZmViOTZmY2EsIDB4NTZmY2FjN2UsIDB4OTBjN2FjYzQsIDB4MzJhMmY0MGYsIDB4ZmZjMzhhOGQsCisJMHhhNmQwMjY0YiwgMHg0MzdlNWU1ZiwgMHhiM2Y4YjFmMiwgMHhkYjIzMDViZCwgMHg3MmM5N2UwMSwgMHg5NzRmMWUxYSwKKwkweGJlMmI3NDE3LCAweDE5OTc0MTQyLCAweGI3NTJiYWY1LCAweDQwZWZkNDBiLCAweGIyYjljYTBhLCAweDQ4ODljMjEzLAorCTB4MmJlN2Y1ZDgsIDB4ZjRhODUxM2UsIDB4OTQ3MWYwNGEsIDB4NmM3YzAzM2UsIDB4MWUxZTViYzgsIDB4ZTQyNWQxN2YsCisJMHhiY2YwZGE2YiwgMHg3NzY0MTQ4YiwgMHgwYjFmM2QxMSwgMHhhOGViMzg4MSwgMHhlYTE0NzFhMSwgMHg2YzM5NjAxZiwKKwkweDE1NWE2MWQ5LCAweDYzNWM3NWMyLCAweDU0N2QzYjgxLCAweGUwMzI4YTI2LCAweDkzN2RiODk0LCAweGY2ZTNjNGQzLAorCTB4ODI2NmM1ZmYsIDB4M2U1ZTAxYWIsIDB4NDgwMjU5OTgsIDB4M2NlYWQ3OWYsIDB4NDIwMTEzMDYsIDB4YmZmN2UwNjYsCisJMHhkZmI5NTI0ZSwgMHgyNDA4MjRlNiwgMHg3NGEwZmNlMCwgMHg5NDVlYzhkYiwgMHhiNDVjODAxMiwgMHgyNWI0NjUzYiwKKwkweDM2NDM4OGQ4LCAweGQ5MWY2MTJiLCAweDgxNTdiZjYxLCAweDJmZGJiNDA2LCAweDA1MGVmNzhkLCAweGM5MTQwNzZlLAorCTB4NGM3MzhmZTYsIDB4N2VmNDU5OGQsIDB4ZjYxZTdiYjgsIDB4YThhNDU1OWIsIDB4Y2I4YmIwZGIsIDB4ZGE4NzdlYWEsCisJMHg5ZDU4MGVmYiwgMHhmZWZmNWVmNCwgMHg2OTk4NzdlZiwgMHgxNzgwYmY5YywgMHgwZWQ3ODQyOSwgMHhlN2RhODE1OCwKKwkweGYyNDFjYzNiLCAweGUzZTQ4YjFmLCAweGZkZWIwOWIyLCAweGVjNTYwMDAzLCAweGI4NTU3ZjNmLCAweGQ3NmU1MDE0LAorCTB4MTNhMzc3NDAsIDB4YzcyNGI5Y2IsIDB4OGQ3YmYyMzgsIDB4ZmVjZTliZDYsIDB4ZTUwYTMxYzMsIDB4ZDM5NzQwYjQsCisJMHg5NTZmZGQwMiwgMHg4ZmQ5OTAxZSwgMHg0MWM5MjY5NCwgMHg1M2Y2MWFjOCwgMHg1YTMyZWFkNywgMHgzYTI1NmM4MCwKKwkweDdhZTFiNDE2LCAweDRiZGFmZGIxLCAweGI0YmY1YzRhLCAweGUxNzcxZjQ4LCAweDkzMjE0MTlmLCAweDdhZDEwODVjLAorCTB4Zjg0ZGE4YmIsIDB4MTRkMDEyYTMsIDB4NmQ0YjI5YzAsIDB4OTdlNGVkMzEsIDB4Y2U0NTllOTAsIDB4Yzk3M2U3ZTgsCisJMHhlZjVlYTI3NywgMHhmODRiZjE4ZSwgMHhmN2JjZDEzMywgMHg4YmJjYzUzYiwgMHhmNzI2YmZlNCwgMHhiNjVmZmFlMCwKKwkweDQzY2RlZjY4LCAweDlhNGUwNzdhLCAweDBlN2M1OWUxLCAweDY3MzJiMWU3LCAweGQwZGE1ZjI0LCAweDk3Mzk4M2FlLAorCTB4MDdmZDhiYjcsIDB4ZTkxNTM1MTMsIDB4YzdmNDk5NzksIDB4OWFkMWY1NDEsIDB4ZmRmMmY1M2EsIDB4OTQwY2Y2YTcsCisJMHhiOTc4Nzc2MCwgMHgxMzAyODU3OSwgMHg3YjRmMWQ1OCwgMHgzZGY5ODYzMiwgMHhmZjNhYWY4MiwgMHgyMmQ5Zjk2MywKKwkweGY5MWQ5MzQxLCAweDViZGRiMGJjLCAweDA0NjVhZTQ2LCAweDhmOTEzYjFmLCAweDgwYzk1ZWY4LCAweDI5NWNmM2M2LAorCTB4NzhmYjBkMWYsIDB4NDZhMjVjZjksIDB4YjlmMmZlZmEsIDB4ZmZjZDFhZDEsIDB4ZmE2YmU5MmEsIDB4M2ZlZmZlYjAsCisJMHhmZTQ4OTgzYiwgMHgyYWE4ZjkxMywgMHgyZTAzMTdhOCwgMHhkNjU5Zjc5YiwgMHhhMWY3YTE1ZiwgMHg2ZGMxMzk1MSwKKwkweGY1ZDE2ZjU4LCAweDgxYzRlNWZjLCAweGVmYzRmOWEzLCAweDY3ZGU0ZGViLCAweGUzNjUxYTY5LCAweGU0ODUxNWM0LAorCTB4OWM5NmI3MzcsIDB4MGQyNDc3YzUsIDB4N2VkMTA3YTQsIDB4NzcwOWQ1MjQsIDB4ZmI0MDE5NjAsIDB4YTQwYjdkMjEsCisJMHgxOTkzZWIwMiwgMHgzNmYzNDA0MiwgMHg5NTM0ZjA2YSwgMHgyOWFiZTYwYiwgMHgxYzQxZWZjNCwgMHhlMzQxZGJiMywKKwkweGU3YTQyOWE5LCAweDMzOGJkN2YwLCAweGY5MjM4NTdkLCAweDBhOGY1MmRlLCAweGQ2YjRmMzg1LCAweDFiMjUzNGRiLAorCTB4OTNiZDVmNjAsIDB4MWVmNTZkZWIsIDB4NTdhZDVmMmUsIDB4MmM3NGRjYjksIDB4OGUyMGMxZjksIDB4MzQ1OWFiNTMsCisJMHg3ZGY4NmQyNSwgMHg4ZmIwYWE1NywgMHg4ODY3ZTgwNSwgMHgwNTIwMDVhZSwgMHgwYjczYTgwMywgMHg1ZWY1ZDYxZSwKKwkweDI0OWI4MjkxLCAweDI3YWUxMzkyLCAweDk3Mjg5ZjgyLCAweDA4ZGM5ZWMxLCAweDRkMjkzNmZlLCAweDM1YjI2NjkzLAorCTB4ZjI4YmJjYjAsIDB4MDYzZWZjNGQsIDB4NTlmM2UwZmYsIDB4ZGNhM2ZiMjMsIDB4NGJhYWVhYTMsIDB4YmFlNjdlNjIsCisJMHg5NjE3MjRiNCwgMHg1MmY4NzQzZiwgMHg2ZTkxNmNhOCwgMHhiODAxN2MzOSwgMHg1YmY1MTJlZSwgMHhmZTM4MGJlNSwKKwkweDc4NDJmMGY0LCAweDc0YzNlMzEwLCAweDE1ZjEwYzE0LCAweGZkMTNiNzdmLCAweDQwMmMzYTMzLCAweGNhODBjMWYyLAorCTB4ZDNhNDU5NzYsIDB4NDkyZTdkYTMsIDB4MzIzZTcwZTcsIDB4ZTBjN2FmOWQsIDB4MzBjYWQ2N2IsIDB4ZTgzZWQxZTksCisJMHgxN2JlMjM0OSwgMHhiNDc2N2NkYiwgMHhjODQzYTQyOCwgMHhmNjZlOTM1NSwgMHg5Y2RlMzg0OCwgMHgyNjU3OGI3NCwKKwkweGE2ZmEyNmQyLCAweDc1ZmU0NDZmLCAweGQ4ODRlM2E0LCAweDYzMjNhM2JmLCAweGE2ZjY4YWFjLCAweDRmYmM2ZjI5LAorCTB4MWNkOWFkNzYsIDB4Y2MyYjgxNjEsIDB4NzExMTNkYmQsIDB4NzE5ZTEzM2MsIDB4OWYyMmJjNTIsIDB4YmRmMjM1ZjYsCisJMHgwMWM5NzdmMywgMHg3Mzg4NmJmNiwgMHg5ZTc1OGZjOCwgMHg3MTg2ZjY0YSwgMHhkOTJlNmI5ZSwgMHg3ZmQyNTZiYywKKwkweGY1ZWQxMTdhLCAweDU0ZjI2MjYwLCAweDVkZDBjZmYyLCAweGQ2YjhlYmM2LCAweDZmOTFkNjI2LCAweGQ4YmIxN2Y2LAorCTB4OWYwZjg1OWYsIDB4NmRmZWY3YzAsIDB4ZTlmYzgwMTAsIDB4Y2ExZmRkMzUsIDB4OWE5NGY0ODAsIDB4OTA3YjMyZjIsCisJMHhlNGQyYzNjZSwgMHhmYzlmMmExNCwgMHg5NzAxNzI1ZCwgMHg4OTdiOTJhNywgMHg3NjRkMDczZiwgMHhhNzdkZTY5NSwKKwkweDQ2Y2UyZDVlLCAweDcyZGVkMTdkLCAweGQ2MWQwMDk4LCAweDBhMWNiNzgyLCAweGExZWEyNzk1LCAweGU1ZjUxYjM4LAorCTB4OTcxYjdhYWQsIDB4NWM5ZGViMjcsIDB4NzBmN2FhOWUsIDB4NDlkYjE4NzksIDB4NzZjNzVlOWYsIDB4YjAzN2I3ZDIsCisJMHhkODVkZWE5ZCwgMHgxYzMxZTU0ZSwgMHhkYmEyY2E5NywgMHg5NmJjNzg5MywgMHhiNDJjOTJkYiwgMHhkMGM5ODM4ZSwKKwkweGZhNGZjYzZjLCAweGI3MGM0ZTE0LCAweDNmZTAxNzgyLCAweGFiNmFmYjFlLCAweDk3OGMyYWVkLCAweDM0YTE3ZjU2LAorCTB4YjNmNGY5MGQsIDB4YWMxNDJhYWYsIDB4ZWUzYzViMWYsIDB4YmI2MGJmYTEsIDB4MWZhNjY3ZjksIDB4OWJkZTkwZGIsCisJMHg4ZjVhMzk0ZSwgMHhhYTllZGQ2MywgMHhmYTQxZDhmYywgMHg5ZDExMmM3OSwgMHhiOWI1OTkyMywgMHhhNjNhNDM0YiwKKwkweGNkMWM2ZjkzLCAweDM2NjBkNzZjLCAweDdhZjRkM2Q2LCAweGQ5NWQ3Y2MwLCAweGE1OTU4MDdjLCAweDQyZTBmOTNkLAorCTB4YWY1OTcxMjUsIDB4NTc3ZjIxYjMsIDB4YTNkZmZkZGEsIDB4YWJiMDI1YmEsIDB4YWEyYWVjYTIsIDB4N2IyNDg4NjMsCisJMHhiNjQxY2M5NywgMHg3YjkyYjFmNywgMHg5NWJiYzYwNSwgMHgxMjdmZmYwZSwgMHhkMTdiMGRiZiwgMHg5MWE0M2ZhNCwKKwkweDQ5YTk5ODdmLCAweGJjYjM3MmUwLCAweGUxYTQ5MzgzLCAweDk1YmY0NmU3LCAweDQ5ZmY0NThlLCAweDI1ZGViYWZhLAorCTB4OThjZDdkYjMsIDB4Yzc0MTY5MmYsIDB4ZmEzNWZiNDgsIDB4OTZhYjM4Y2QsIDB4OWU2NmZjOTEsIDB4NzJhMjZmMmYsCisJMHhlYjhiODU1OSwgMHg5YWIzNTViZSwgMHgxY2NiZmVjOCwgMHg5NGJmN2I5NywgMHg2NWQwN2ZkZiwgMHg1MTJkYmQ2NiwKKwkweDM4OWM1ZmIwLCAweDhlOWJmNDY4LCAweDdiYjg0NjRhLCAweGY4MzEyYmEwLCAweDY5ZjVlOTJjLCAweGQ2MTI2MzdmLAorCTB4OGFiMjc5MTcsIDB4MDMzN2RkNjQsIDB4YjYzYjVkZDcsIDB4ZWJlNTdiNTEsIDB4ZGU1NzZjYWQsIDB4ZjJlMTJmMjQsCisJMHg2OTkwYTg5OSwgMHgyMWQwYmVkOCwgMHgyYTY0YzM3OSwgMHg0YTZhM2ZmMywgMHhlNGE3NzZhMywgMHhkNDJkYjYyNSwKKwkweGE2Mjg5ZGE2LCAweGJiZDk2Y2Y2LCAweGQ1YTdlYTkwLCAweGE3NTEwYTMyLCAweDJlZjM4NTk0LCAweGI5YzViZjYwLAorCTB4YmUxYjVlMjksIDB4ZDBmYzJhNzcsIDB4ODVkZmQyNDUsIDB4MDRkZTQ5YjksIDB4ZjA0YWYzZjIsIDB4N2JhYTFhZTksCisJMHg5NTA2ZGVhZCwgMHg2OTU4ZjFkNiwgMHg0YWEzOGQzMiwgMHg1YmQ2MTM1ZSwgMHgxZmZkMjg2ZSwgMHgyZjg5NDc0NCwKKwkweGRhODkyNDA1LCAweGQ3ZTEwYTVkLCAweGMzZjc3ZjI3LCAweDZiZjYyNzMyLCAweGQ5MDEyNzE5LCAweGRlNzBhOWNmLAorCTB4ODVmZTg4OWYsIDB4MDI2YTg5OWQsIDB4YjM4YjY5ZjksIDB4YjE2YmRlOGMsIDB4NWM0ZGNlNDgsIDB4ZmY1Mjk1ZjcsCisJMHg3ZDU5OGU0MCwgMHg3ZTNkYzcxZSwgMHg0MWUzOWQ5YiwgMHg4YzA1NWJlNSwgMHgzNmRmOGU4MywgMHhlNTQyZTM4NiwKKwkweGE4NGJmMzViLCAweDc4MTI2ZTNjLCAweGNhYWRmMmJkLCAweDQxMzc2ZTBhLCAweGU1NGE5Yzk4LCAweGY3ZTJkZmVkLAorCTB4YjBmZTk3YjYsIDB4MWZlMzhkY2MsIDB4ZGY2MmVmMWIsIDB4NTYyYTcyODIsIDB4ZjYyNGZjMjIsIDB4YmZkZTg5MDcsCisJMHg3N2ZiOWFiZCwgMHg5ZDBmOTk0OCwgMHgwYjE3ZmVjNSwgMHgzOGFjOGE1MiwgMHgyMTNiYjk3ZiwgMHg1OGM1N2ZhYSwKKwkweDQ5N2Q1NDU3LCAweDI1NjJhOGY2LCAweDE2NTY0ZmMyLCAweDZmZDU0NTY0LCAweGIzOGE5NjI4LCAweGU2ZmJmYTIzLAorCTB4NTdkNTQ0MjcsIDB4YjM4YWI5OTQsIDB4NTRkZmZhMjMsIDB4YmVhYTJhMzksIDB4YThhY2E2ZjIsIDB4MWNkMzQyZmEsCisJMHg2MWVhM2ZlMSwgMHhmM2IwOTk3ZSwgMHgyMGQ5NjVmOSwgMHhhOWZjODk4YywgMHgwMzdkZjQ1MywgMHgzYjI2ZWZkYiwKKwkweGE5ZjgxMmVmLCAweDA5Zjg4NWM4LCAweDU1ZDY1MmU1LCAweGQ4Yjk3MWNjLCAweDAwYWZmYmFlLCAweDkyNjY3Yjc0LAorCTB4MmViZjE3ZmYsIDB4ODNkZThmMWMsIDB4NDk5OWZlMjAsIDB4MTZmYzQ4NzgsIDB4MjAxZTIzNzYsIDB4ZGM2MGE0N2MsCisJMHhjY2E3YTA4ZSwgMHgyYmM3MWQxMSwgMHhmZjI3Y2Q0MCwgMHg4NGI5ZDE1YiwgMHg2N2I5NTRmMSwgMHgzMTlhMTk3OSwKKwkweGJkZmEzMWYyLCAweDgxNjFmOTBhLCAweDJlZTg2MjQzLCAweGE1YzczMmVhLCAweGY0NmM2MmI3LCAweGFiYWUwNmZiLAorCTB4MzE2YmU5ZDAsIDB4MDk1MjliZjksIDB4NmViNDA1OGIsIDB4N2FjNjM1YzIsIDB4YjcyZTNhMGMsIDB4OGVmOTBhOWUsCisJMHhkZmZmMTQzMiwgMHhmZDJjNTc1YywgMHg3Zjc5MWIwMCwgMHhhMGQ3NGIxMSwgMHg4ODgxYzc0YiwgMHg3NjA3MThhNywKKwkweGM0M2UzMmE2LCAweDNlMWUzYjlmLCAweDI1NGY3MDMwLCAweGE0NTczN2ZhLCAweGVlNDg3MzdmLCAweGY3OTc4NWU1LAorCTB4OTdiOGM2NmYsIDB4YjhjNjdiYzMsIDB4MmNkMGZiYzYsIDB4ZmJjNmZjZjMsIDB4Mjk1NWNmNDMsIDB4ZDg5ZGYzZmUsCisJMHg3M2NlMjkzZiwgMHhmOWZmMTRiNywgMHgxN2ZkZDE3MywgMHgwM2EzNmEyOCwgMHg0ODI4ZjhlZCwgMHhmYmYxMDBkZSwKKwkweDI0MTBhYWI4LCAweDM1YWQzZDJiLCAweDQzZThiOTUxLCAweDc0Nzg0MmJmLCAweDEzNDBkOWYxLCAweDgzN2FmMzk1LAorCTB4ZmViOGFkYzcsIDB4OTU2NTcyZWIsIDB4MWUwNjBkZjIsIDB4OGNkNzVkOGEsIDB4M2E0ZmIxNTQsIDB4YWJiNTQ5N2EsCisJMHg1MDEyZGVkOCwgMHg2OGJmYjRlZCwgMHhkM2I1NTg3OSwgMHg4MzQ1YWEzZSwgMHg2YTJmZGEwYSwgMHg2OTFiNGQxMywKKwkweDYzZTVhMWJmLCAweDU0OWNmNTg5LCAweDUyZjNlN2UxLCAweGNhMzE4ZTA1LCAweDVlN2Y2NTY3LCAweGI2ZDU5NjJhLAorCTB4OGIwOTQ3OWUsIDB4NjAzMTdjZDQsIDB4OTQ3MDMwMjEsIDB4NDhjMTVlNzAsIDB4MDk1NDc3OWMsIDB4YTNiZTY4M2EsCisJMHhiZTFkMDcwZiwgMHhhNTdlM2YwOCwgMHgyOTE0NmYzOCwgMHhhN2U5M2E1YiwgMHg5MWZhNDVhNCwgMHgxNjgyNWI1MiwKKwkweDM5MTYzN2U5LCAweGFmZjU1MTVkLCAweGM3ZDhhYTljLCAweGJkNDU0NjdiLCAweDE1OWE5ZDc3LCAweDZiZjEwZmQ1LAorCTB4NDZhMGUxMmUsIDB4ZTQyYWU0MGIsIDB4NWU4OTRkNDcsIDB4N2NiMTc3YzIsIDB4ZmQ3ZDE3ZmMsIDB4ZTA5Mzg3NWUsCisJMHhhYWRkOTgxMywgMHg5NzEzOGZlYywgMHg3ZjgyYTViYywgMHhhNDU3Y2ZiMSwgMHg2ZmVhN2Q4YSwgMHg2ZTU4M2Q2OCwKKwkweDM1ZjQxNTRmLCAweGUyMDEzZWM5LCAweDNlOTMzNzEwLCAweDRmNzFkNmM0LCAweGMzYzY4YWJhLCAweDc3YTQzZDkxLAorCTB4MjJlOWJiNWUsIDB4NGVmODZmNDIsIDB4MjlkN2Q1ZWEsIDB4ZTlkZWNmYTgsIDB4YzQ0ZWVmYTYsIDB4OGJhOTIzZmEsCisJMHg2OTllN2Q0NCwgMHhmZmFjMDRjZiwgMHhkNDVjYjUzNCwgMHgzNzRkMzZhZiwgMHgwNTdlMDE3YiwgMHhjMzJiYWY4YiwKKwkweGU3ZGJiYTdhLCAweGZiNzljNTRmLCAweDEyYWQ4ZWNkLCAweDI0YzUxOWUyLCAweDc4N2I5MTQxLCAweDA1ODhmYmZmLAorCTB4MTYwYTI5ZTMsIDB4MjE3MzRjOTUsIDB4ZDhhYjc2YWQsIDB4YTAyNGQ3MmYsIDB4MjVmZWEzZmYsIDB4YWFmYzRhOWEsCisJMHhkY2U0MzA0OSwgMHgxZDcxNDE5MywgMHg5MTM0Y2VlZSwgMHg2ZmY2MzBiZiwgMHg4N2JlMGI3NiwgMHhmY2Q4ZTdlZiwKKwkweGMyNWY0MmI1LCAweGE1ZmEyYWM5LCAweGNhMmZmN2ZiLCAweDllZDhiZDI0LCAweGU3ZjVlNGVhLCAweDIxZTc5OWVmLAorCTB4N2Q3NDg1N2YsIDB4N2ZmZGZhOTcsIDB4M2M1MzZiYTQsIDB4NjJjYzlhYmEsIDB4ZmM5NmRlOWUsIDB4ZjliYjhhNTIsCisJMHhkMjFjNTFlMywgMHhiYjcwYmNiMCwgMHg0MjEzY2ZjZiwgMHhjYjhjMmJhOCwgMHhmNTg0OGYzNSwgMHg0YmM1OTc0NiwKKwkweDkwZmI3ZDM4LCAweDZjYWNhZjdjLCAweGIyMTNmM2Q0LCAweDljOGRlODVkLCAweDFiYjhkYTYyLCAweGZhZWI5ZmNiLAorCTB4M2JjZDE0ZjIsIDB4MTgxOWU2ODMsIDB4MDFmNTFjYjcsIDB4NTZlMzAzOWMsIDB4ZTkzYThhMTQsIDB4MGQxNzJjODMsCisJMHhmODFlZGUxMCwgMHhmNzk3OTI1NiwgMHg3ZTA3NjNjNywgMHhiZmFjMDNmYiwgMHg5N2JlNDc3NywgMHg4OTA3ZjQ3MCwKKwkweDgyYWIzZjgyLCAweGIwN2IxYTEzLCAweGJjMWFjZDNlLCAweDNlNzQ4YzJhLCAweDk2N2ZlNjk0LCAweDZiMzZlMGY0LAorCTB4OWJlYjEyNzAsIDB4OGQxMjYzNjMsIDB4ZmJjMDY5MmYsIDB4ODc3ZjYzMTAsIDB4MzJkNTM4ZmIsIDB4MWZlZTI0NzEsCisJMHg4OGQ4MmYzOSwgMHgxMWNjYjdjZiwgMHg0NWU2MzY3YywgMHhlZTI4ZGE5ZSwgMHgzYzViMzdiYywgMHhmOWMwZTgzNywKKwkweDA2ZmY4ODViLCAweGMwNzQ0MzNkLCAweDAzYzcyNzU4LCAweDQ1YTQ3OTEwLCAweDYxZTQ0M2IyLCAweGJjZTI2MGZmLAorCTB4MWYxOTJkNDksIDB4MzU5Y2Y3ZDYsIDB4Y2ZhZWJlZjEsIDB4ZTY4MDU3ZDgsIDB4OWI5MzNkNTgsIDB4MjczOTllNzgsCisJMHg2YzRjYzkzNiwgMHhkNGNjZmYwMCwgMHhiNmFmNDg1OSwgMHhmYTdkZTdhZCwgMHg3ZGU4ZWU4YywgMHg3ZjRlYWNmYSwKKwkweDliZGYwM2E5LCAweDdjZmM3ZWY1LCAweGRjN2QzY2M4LCAweDI5OTQxMGQ5LCAweDg5ZTljZjVlLCAweGRmNGYzN2VlLAorCTB4MWYzYmNmYTcsIDB4NTRjZGZjZmQsIDB4ODY4ZGJlM2QsIDB4OGU3OTkxZDEsIDB4MzNmZjdkM2EsIDB4MGE0MjdjNzgsCisJMHgzYWY5MjllOSwgMHg1MTZlZjkxOSwgMHgzYTlkOTg2NSwgMHhlYjVhMzdlYywgMHhmOTBlNWZiMSwgMHg4NTk3MWI0NywKKwkweDExNzc5ZGE3LCAweGE4ZjU2ZGZkLCAweDkzZjIxNmQwLCAweDdiMGQyZTFlLCAweDc3MGQzYzJhLCAweDc5ODhkNGMyLAorCTB4ZjgzN2JkNzQsIDB4ZTBiZWY4MzgsIDB4ZGM5ZWI0ZTMsIDB4YmFjN2NmOWYsIDB4NDEwY2QzYjksIDB4NzM5ZDc4NzUsCisJMHg4MjBkM2U3NSwgMHhkM2EwZjNlMCwgMHhkOTllN2NjMiwgMHg2MWU5Y2JmNSwgMHg5OGY1NjQ3YywgMHg1ZjU4OGQ0MCwKKwkweDZhMDg5YTgyLCAweGU3YjUzZjg0LCAweDY1ZDU0NmE2LCAweGNlM2EzZTQzLCAweDlmOGZhZTk4LCAweDM1MWQxZGU0LAorCTB4MGMzNzgxOGUsIDB4NWE5YWJkZjksIDB4NjQzODQ5ZGUsIDB4ZTMxZDYzYmEsIDB4MTNkOTk0OGUsIDB4M2UyZGM2YTIsCisJMHg2NDI3MmIxZSwgMHgyNDc2ZTExYywgMHhkNzA4OWZmMiwgMHg3MGEyNTY5ZiwgMHg4MDc3MmNjNiwgMHgzZmIzMDAzOCwKKwkweGM5NzA2MjU0LCAweDY4ZWM5OTc2LCAweGU3ZThkOWVlLCAweGM4Y2JiNGU2LCAweDg0ZmM3MmVkLCAweGVmOWYzZmE5LAorCTB4ZTlmOWZiZmUsIDB4OTlmOWEyZDIsIDB4Y2ZjZDExNTYsIDB4M2YzNDVmNzQsIDB4ZjM0NTU3MzMsIDB4OWEzZjk0NmQsCisJMHg0ZGQ2NjMyZiwgMHg2YWJmNmE4OSwgMHg3ZDU0NTE2MywgMHhhMzczODNmYywgMHgwMDYxNjdmYSwgMHhkYzRmYWM4YywKKwkweGZmYWEyNGJhLCAweGEyMmJlZGE0LCAweGJhOWY5M2VhLCAweDVlN2ZhYTJkLCAweDdiNTQ0ZDcwLCAweDJiYWFjZWZlLAorCTB4YTg2MTdmOTIsIDB4YjExZmFhMmUsIDB4ZjIwZGY0ZDcsIDB4MWZlZGJhYmYsIDB4ZWZmOWU2YTIsIDB4MzRhMmZmOTYsCisJMHhjYmFmMmYzZCwgMHg0MzhlOTk3ZiwgMHhjN2ZhMWE1YywgMHg0NTM4ZTFhMiwgMHg5M2YyMTVlOSwgMHhiZTM3ZjZhZSwKKwkweGEwNGJmY2EwLCAweDUzYmNlNTQ0LCAweDFiNzgwOTYwLCAweGQ5MDllZGIxLCAweDFiNWY5MTI3LCAweGExMzZhYzgzLAorCTB4YzEzMjY4ZGYsIDB4OGZmN2YyM2EsIDB4ODc5YzRjOWEsIDB4MmFiY2VjMzQsIDB4YWE4YmUwNGQsIDB4OWZmN2UxMzQsCisJMHhmOGE2OWI0NiwgMHhlY2NmZjA2NiwgMHg3ODQ0OWVkZSwgMHhhMDk5MzY0MywgMHhlMjlhZTI5YiwgMHhjNjcxYmY2NSwKKwkweDcxNmJlMTAxLCAweDcwMzQ3OTNlLCAweDc5MzRhYjVlLCAweGE4OTliMmY2LCAweDMyOWJmMjg3LCAweGQxZTUxZmVmLAorCTB4N2Q3MTUwN2UsIDB4M2YxZmM3OGQsIDB4OGI5ZmY5NDEsIDB4ZmE0YTliMGUsIDB4MDNmYWE3MmEsIDB4N2Q3MGI3MTQsCisJMHgyNDYxZTdhMSwgMHgzZWFmNzk1ZSwgMHg0OWY2ODkzYywgMHg2Nzk1N2Q0NiwgMHhiZmVhNjZlMywgMHg5Mzg1OGVlYSwKKwkweGY0M2FmZjY4LCAweDQ5OGU4ZWZjLCAweDg4NzIxMTY1LCAweDM4OGFkZjVjLCAweDY5N2JlOGY4LCAweGM0NjczZjIyLAorCTB4NmFhY2RiODcsIDB4NmJjYTBmNjMsIDB4M2ZmYzJjOWEsIDB4YTVlZjg1YzYsIDB4OTAzZmZhZTEsIDB4OWMwYjM2MWUsCisJMHhiYWQzMzAxNSwgMHhkZTcyNGUzMSwgMHhiYTgwODVkZiwgMHhlMTk0Y2IwZSwgMHg4ZDdlYTQ3OCwgMHg4NGMxZjU0YSwKKwkweDI2ZjlkYzY4LCAweDA4ZmI0NDExLCAweGZmYzcyYTViLCAweGJiN2YwZDViLCAweDM2Zjk4ZjJlLCAweDNmZWU4OGU4LAorCTB4YzE0NGY3NzgsIDB4ZDcyMzZmY2YsIDB4MmM2N2RmOTAsIDB4ZGQwNjFkNjIsIDB4ZmMzZjc1ZTcsIDB4N2I4N2VlYTksCisJMHhlNDQ2ZmZjOSwgMHg3OGVkZDc5YiwgMHhmNWYwODkzYywgMHhhNzgxNWM5OSwgMHhlOGNmZTc4ZCwgMHg0ZDI2N2Q3MiwKKwkweDNiZjVlOWUwLCAweDc5OTE5YzEzLCAweDJiOTBlYWM3LCAweDM2ZGI1ZWFhLCAweDQyMzY3OWNhLCAweGViMWJkNzBmLAorCTB4YWQwYTRiZjAsIDB4M2Y2ZTgzNjMsIDB4YzkzZDlkZDUsIDB4ZjFlMzAxYjcsIDB4ZGM3MGQzYTcsIDB4YmYxNzFkOWEsCisJMHgzN2RlOGZiZCwgMHgzODg4NjQwZCwgMHg2ZWY5ZTAxYSwgMHhkNzE4MGY3OSwgMHg0NDE1ZjJkZiwgMHhkMjk3ZDJlMSwKKwkweDI1ZTU3ZTQ0LCAweDk1Y2IwYmEyLCAweGRmNTEzODU4LCAweDc3NmM2MjU2LCAweGZjYzZmOTUxLCAweDdjM2JiMjcyLAorCTB4YmViMDk2MWUsIDB4ODRjYzEzYWMsIDB4YjNmYjk2ZDMsIDB4NTNmNGM0Y2MsIDB4MmY2NzdkZTAsIDB4OWE1ZjZkMmUsCisJMHgwNGRjZjNjYSwgMHhjNWM1MzMzZSwgMHg5ZDVkYmY3NywgMHhjNjg2ZmQ0NCwgMHg0MzE5YzYzMywgMHgyYmQ0NTliOSwKKwkweDQxOWNjMDU3LCAweDI0NmI5YWY5LCAweDlmMzgwZGM2LCAweGVlZmI5ZThkLCAweGUyOTliMzE4LCAweGJiZGYzMWFmLAorCTB4MGVmMGJmZTAsIDB4ZjAwYWM1ZWEsIDB4ZjhjNmI4ZjIsIDB4N2U1MWE5MDAsIDB4OTBjYjAzZjgsIDB4YmYyNGVkMWMsCisJMHg5ODUzMmViYSwgMHg2Nzc1MzlmMiwgMHhkMWZlN2NhYywgMHhlYmYwMzBkZiwgMHhkZmNlOTAwNywgMHg1N2IxN2Q1NSwKKwkweGJiN2ZiYTQyLCAweGZiNTdlMDdhLCAweDRmYWRmOWYwLCAweGI1YzVkZmExLCAweDg3ZmRkYjY2LCAweGMzY2UyMmQzLAorCTB4OTE3ZGRjY2UsIDB4YzhmMTBjZWQsIDB4MzM5MjRmZjMsIDB4MjVlYWM5N2EsIDB4ZWFhMGY4ZmIsIDB4YmM0ODljYTUsCisJMHg2MTZkMjI3ZiwgMHhiMzA3YmQyNywgMHg0NzllZTJkMywgMHhhYjJiZWVjNCwgMHg2ZWQ5M2Y0OCwgMHg4Njk5YzY1NSwKKwkweGViYTdkZTVlLCAweDkzMGJkZDY1LCAweGQyNWQ3OWY5LCAweGZkNDQ3YWQwLCAweDU3ZjM5OTc5LCAweGJjYWMwNzc1LAorCTB4ZDc0NzdmYmYsIDB4YmYxN2FhODcsIDB4OWY5OTE5OTgsIDB4NTRiZDQxNmIsIDB4NzI3NGE4NzMsIDB4MmE5Y2U3NDksCisJMHhmMWNmNjZmMiwgMHg2ZmQ0YTljMSwgMHgyMWVmZWNhMywgMHhlOTc4MzkzZCwgMHhlZmFhNjRlMywgMHg1ZTRiZjM3OSwKKwkweDY1NzRkYzBmLCAweGYzMjNmN2Y0LCAweDliNWNmOTIyLCAweGY5MmVmMDM0LCAweDU2N2RlYTkzLCAweGE1NTBmMjk1LAorCTB4ZGQ4ZWYyZmIsIDB4NGU5YWY1OGUsIDB4OWViODNiZjQsIDB4MjM5ZWFlMGIsIDB4NmE3ZWQzNGYsIDB4OTc5NDA0YmYsCisJMHhiMDI3MDlhYSwgMHg5NTY5YWY3MywgMHhhYWM3OTQ4MiwgMHg2NWJkZGI2YSwgMHg5YWFiZDYwYywgMHhiYTkzMTc5NywKKwkweDNmMGIyNmQ2LCAweDA1MjJkMzU2LCAweGE3ZjAzYzY5LCAweDc0OGE3ZjMxLCAweDM1N2QyOGRiLCAweGIwMGIxZmVmLAorCTB4MThhOGVmYmQsIDB4Nzg3ZDVjZmYsIDB4NGZmNDU5ZWEsIDB4OWQ5ZjJkN2QsIDB4YjQzNjNhMjMsIDB4NzYzZjM5NTksCisJMHgxOTZjMjkyZSwgMHhkODVlZjM4MywgMHhlYTAyODUyZCwgMHhiOWY2ZGRiMCwgMHg1ZDZhM2VjNCwgMHhjZDBiMzFlOCwKKwkweGU1YjllZWJiLCAweGZiMGYwNGQ5LCAweDkwYjQ5ZGY2LCAweGZhZDc1YzdmLCAweGJjZmViOTU4LCAweDIwZmI4NDU4LAorCTB4OWRmYWM1ZGIsIDB4ZjMyMjkzMWQsIDB4ZmMyMWY3NDksIDB4ODFmOGM4ODMsIDB4ZjcwODA1ZjQsIDB4MDllMzkwODIsCisJMHhkYWFiM2U1ZCwgMHhiYjEyMzYyNywgMHg3ZGVkYWZkMCwgMHhlNmJmNjI1YSwgMHgzYmRmOTM3NCwgMHhmZmRmZWJiOCwKKwkweGZmZGRlNjk1LCAweGZmOTg5MzJmLCAweDdmYzY1N2M1LCAweDRmMTgwNWYwLCAweGMwZjNlOGQ0LCAweGRhMTY1M2Y5LAorCTB4OWFiNGQ2MWYsIDB4MTczYmM1Y2YsIDB4NzdkYmJlZmEsIDB4ZjBjNjdiOTUsIDB4NTcxNjM2ZmUsIDB4Mzg4MGIxNmYsCisJMHhjMTAwOTliNywgMHgzODFlMjllNywgMHg5MWFiMmMwNiwgMHgwNzUxMWY5ZSwgMHgwZTcxNDdhNCwgMHhkZDYwZDY1OCwKKwkweDcxNDY3NjQ2LCAweGM2MDhlM2MyLCAweGI5ZDcxN2RiLCAweGY3MGY5ZTE1LCAweDlkZTMxYjA4LCAweGVkZWFkNjU3LAorCTB4ODU4ZjZhYTUsIDB4OWUzNTcwZjIsIDB4NzVlOTBiNWUsIDB4NzExM2Y4NGQsIDB4NTFmNmRmNWUsIDB4YmY2NzE2YjksCisJMHg3ZTE2ZWQ1YywgMHhjMzAzZDBkMywgMHhhN2QyZWJkZSwgMHg4Nzk4NWRiMCwgMHhjNmM4NjBlMiwgMHg2NmI4NWY3NiwKKwkweGRkNTNlMjgwLCAweGRhMGVkNDdlLCAweDAzZmNiODE3LCAweDZmNjA3NzQ0LCAweDJiZWI0YTgyLCAweGNjYzlmN2RkLAorCTB4ZmU3OTg4OWUsIDB4NTE4N2RiYTQsIDB4YTNmOTc5YWYsIDB4ZTdlMjY2YTksIDB4MmFhNjhmOWUsIDB4ZmJjZmMzNDksCisJMHhlMmViMWMzMiwgMHhkZGFhNTVlNSwgMHg0ZTZmNGUyMiwgMHhiNjhmOWRmNiwgMHgxODZmMDQ4MywgMHhiNzY5YWRlNywKKwkweGRhMDdmOWYzLCAweGUyOGU5NmMxLCAweDc1YjgzYjQ4LCAweGYzZDIwZWRkLCAweDE2OGJkOTc2LCAweGNiNmQzNTAxLAorCTB4M2ZkYzBkZmQsIDB4OTFlMjRiYzksIDB4NDgwNjE2ZGIsIDB4OGZhNzY1MGYsIDB4OGFmZTEzZjUsIDB4Y2ZkNGNkZjMsCisJMHhhZTUyMjY3ZCwgMHhlOTFiN2ZkYiwgMHg0ZjA4ZTI5MSwgMHhkNDZiY2M4YSwgMHhkMTdlN2E5OCwgMHhiNzVjOTEyMSwKKwkweGFmOWEyNjZiLCAweGM5NmZkODA4LCAweGVmMGY1ZjBlLCAweDU0MzM4YTlmLCAweDllMWVjN2RhLCAweGE3YzQwZTUxLAorCTB4Mzg5MDFlOWYsIDB4ZjU0ZTZiNWYsIDB4ZjkyMmNkNmYsIDB4YmZiOTk1MWUsIDB4MDEwYmYwZTUsIDB4OWJlZTk3M2EsCisJMHg5ZjQ0YzUwNiwgMHg0ZTlmZGViMSwgMHhlMzhjODMwYiwgMHgyZjA0MmU2YywgMHhmZjc5YmI0ZCwgMHhkZmQyMWUyZCwKKwkweDYxMWZhNjlmLCAweDg2Zjc2MTdjLCAweDIzNGFmYzgwLCAweGU3Y2EwNmUyLCAweDYxNDIwYmQ4LCAweGQ3MjEyNzFhLAorCTB4M2NlMzJjNTcsIDB4ZjMyNzZlNzksIDB4N2JmNTYyY2IsIDB4NGQ5NDFmMjksIDB4NGQ4NzVjNzUsIDB4ZmEyM2FkZjEsCisJMHhiMTQ0ZWU2YywgMHg2NTdiMWU5ZiwgMHhiMjNlYmE3OSwgMHgxYmNlODU3ZiwgMHhlOTJmOWNmZCwgMHhlZDNkMGIzMywKKwkweDVmMTgwYWJiLCAweDM5OWQxZGYzLCAweGJlMDlhNGQ0LCAweDZiMmU3NmMxLCAweDQ2YTYzYWRiLCAweGYwNDRkYmM2LAorCTB4ZGY3OWU4ZGIsIDB4NDRiYzViZmUsIDB4ZDc1MTM5YmYsIDB4YjY0NDhjZjcsIDB4ZmZmOWQ4OGIsIDB4ZTQ5OWY0OTksCisJMHgzNWIzNWE2ZSwgMHg3YzRjZjg4YiwgMHg3YmY2NDc1MywgMHhmMDY3ZWY1YSwgMHgyZTdmMTQwMywgMHhhYTkyMmJkOSwKKwkweDhkMGZjYmM1LCAweDRlM2M5Nzc3LCAweGVhOWNkZDcyLCAweGYwMTU3NWNiLCAweGMzMDBhY2YxLCAweDc2YjhjNDllLAorCTB4NTdmZmZkODcsIDB4ZTkxZmZmNjQsIDB4ZjhhMmRjZmMsIDB4NGRkZmM0NmQsIDB4ZjE2Y2RkN2EsIDB4N2ZiNjRlYTksCisJMHgwZmYzNGE5ZiwgMHhmYzc0NmZhZCwgMHhmNmU5YjVmNSwgMHhmZjgyNjViYSwgMHg0ZmI3ZDcxYiwgMHgxNTM5OWY1ZiwKKwkweDRiYzY4ZGY1LCAweDRlNjdlZTA2LCAweGZmNDgwNjBlLCAweDc4YTA5MjlhLCAweGVjM2UzZTEzLCAweGRkOTBmNzJhLAorCTB4YzVmNDM5NmQsIDB4YTZmN2IyMzgsIDB4MjgwN2FmMjQsIDB4ZDY2MDc1YWYsIDB4MmRmYmIyMmEsIDB4ZmQ2MzZmYTMsCisJMHhiYzg1ZjRmZiwgMHg5ZTYyMzkyMiwgMHhhZDI1NjkxMywgMHg2OTdlYmZlNCwgMHhjZmUyY2JhYywgMHg0MmZjNzVhNSwKKwkweDVkNjMyM2Q3LCAweGFiZGY2ZWU5LCAweDExYmM4OGVlLCAweDkxNWY3NThjLCAweDlmYmU4MGZlLCAweDE3ZjFlYWYzLAorCTB4ZmY5YzczZjcsIDB4MmY0NDg3ZWIsIDB4ZDZlZTI3OWQsIDB4M2UwMmI3NzEsIDB4NzgzYjFiZDYsIDB4MWE1NWM2NTUsCisJMHgxZjdiYTMxYywgMHhkODI2MWQ4ZCwgMHhlNGE2Y2I0NiwgMHg1ZDM5YzQ1NCwgMHgzNjMyNmNiMiwgMHhiNzBkOWE3ZCwKKwkweDRjNmM3NGU2LCAweGViYmE2ZmVkLCAweGJkMjEzNDk2LCAweDBiMjAyMWZiLCAweGFmOWQxNjdjLCAweGE0ZDI0ZDAwLAorCTB4NmJjNTNjYzgsIDB4MTRmM2YxNTUsIDB4YzkxYmY4Y2YsIDB4OWU1NmZmMmUsIDB4YjRkODRlNjIsIDB4ZjdmMjkyZGEsCisJMHhiYWNlMmJlNywgMHg5ZjNkZjdhMywgMHgyYTI2NTViYSwgMHgzMWY0MmI5NCwgMHg4YTBjNGUxNCwgMHhhNzRjMTdiYywKKwkweGYxMzM1MzdkLCAweDA2N2JmZjEyLCAweDJkZjZjYWQ3LCAweDVjZGFlNWY1LCAweGZiZWU0ZjY4LCAweDhiMWQ2ZGI3LAorCTB4ZDYyZDk3NzYsIDB4ZmE0NmY1NGYsIDB4M2RjMGE3N2IsIDB4ZDc4ZmY5NDMsIDB4NDZlZTMwYTYsIDB4ZmVmMzI3M2YsCisJMHgxMmQzYTlkZiwgMHhjNDYyYjcyMywgMHg4OGY3YzA2YiwgMHgyN2YyYTM1MiwgMHgyNjVmMjNlMSwgMHg0YWVkN2U5MywKKwkweGI5MjJkZjU1LCAweDdjYzk3NDBjLCAweGU5NDEyNDRmLCAweGQ4ZTJiOGIxLCAweDAzYzIzZWQ5LCAweGQzOGJmN2U4LAorCTB4ZDZjNDNlYzUsIDB4NmQxN2NlMjYsIDB4MzE3ZWM2YWEsIDB4MjY5Y2U5YzEsIDB4NzljNWQ4NDcsIDB4NTc5ZmM4YjcsCisJMHg5YzYwZjkxZiwgMHgwNWRjMzEwNSwgMHgwMmU0ZjFkMywgMHhkZWMzN2YxYywgMHhjMzRhNjQ5NiwgMHhmNmYzM2ZhZCwKKwkweDUzOTJiYTRjLCAweGU5MWRmOGEyLCAweGE1NGZmZWI4LCAweGMyMzYzOTFkLCAweDUzODM1YmE5LCAweGYwYTEzZjg5LAorCTB4OTNmMjE0ODQsIDB4OTQwNDBhODUsIDB4ZjFmMTM4YTIsIDB4MTRkZTIyYTksIDB4ODdjNTNjZDcsIDB4M2VkODUwZmYsCisJMHhlNWUxMmQ3ZCwgMHgyZjU4YjBkYSwgMHhhNmM2NjFjZCwgMHg3YWUwMzZiYywgMHgyYTYzNWI1ZiwgMHg2ZmZiNTc4ZCwKKwkweGJmOTM0NjA3LCAweGUwNWQyOTdhLCAweDRkMmYxNzlhLCAweGEwMmJlZjExLCAweDc0YWNmZjUwLCAweDQxZTdhZTk3LAorCTB4NWYwYmU1MTMsIDB4N2Q4Y2YzZDIsIDB4Y2ZkYzRjOTcsIDB4NmRiMGJmOTgsIDB4M2Q0NGVjYTEsIDB4M2Y2ZjA4MjgsCisJMHg3NmNkNzljNCwgMHg0ZGYyNGFhYiwgMHgzZjA0MGU3OCwgMHg3NzE4MTNkYSwgMHgwYzVjMWVkNiwgMHg1ZGZhZTcxNCwKKwkweDdkYjA5NWUwLCAweDZmYzBlMjU3LCAweDBlMDYxZjQ5LCAweDc3M2E1NTU4LCAweDg3NmU3MDRkLCAweDk3N2YxYzU0LAorCTB4MGYyYjRmN2UsIDB4MzFjNWIyMTUsIDB4MmY5OGRjZmMsIDB4OTRlN2ZkYTEsIDB4ZTBiZDI0MTMsIDB4NjUwNGRmZjMsCisJMHg4OGUzNWMzYiwgMHhkMzEyNzdlNCwgMHhkNWViYTI1ZCwgMHg4OWIwYzRhZSwgMHgyNjA2NDVjZSwgMHhlOTg3NWVlMSwKKwkweDc4MTNhNjFhLCAweDNjY2U4MzVlLCAweDJjYmJmYmY2LCAweGUwN2VlNzAzLCAweGE0OWNiYTY2LCAweGU4MjA3OTA3LAorCTB4MmFjOWY2ODQsIDB4YTcwNGQxZjksIDB4NzA0OGViYzYsIDB4MzQ4MGRlYWEsIDB4YTlkYWFlOTIsIDB4NmVkMGZjMDgsCisJMHgzNWU3MjUxZSwgMHg2YmFlZDg3NywgMHgzNmViODcxMywgMHgxMzVkODViNCwgMHhmZjhmM2Y0MCwgMHg4ZjNhMzZkNSwKKwkweDgzOTNhYTFmLCAweGZlZmMzZDk5LCAweDZjMmZlOTJkLCAweGY5Y2IxYTZiLCAweGEyOGM4MGJkLCAweDk0OTk2M2I2LAorCTB4Nzk1NGViNGEsIDB4YjU0NWU4N2QsIDB4MDdjMTIyZjQsIDB4Yjc2N2FmYmEsIDB4ZmVhMWY2ODksIDB4YWEwZWU3YTgsCisJMHhhZjNmNDQzYiwgMHg5MjVmNjlkNSwgMHg4NzQyZjZjNSwgMHhmMDc4NDNkNywgMHhlZTdjMjk3ZSwgMHhkZWQ3YjQ1YSwKKwkweDA1Mjk3Y2M3LCAweGQzNWVhZWI4LCAweGIxOWEwN2ExLCAweDg3NTY5ZmRmLCAweGU5M2VlODcyLCAweDFhZmY1NjczLAorCTB4M2U1N2NmZDIsIDB4MjE0OGYzNWMsIDB4NjY1ZGRiZjksIDB4OWRmOTI1NmYsIDB4MThjZmMwOWUsIDB4NTY2OGJmODcsCisJMHgxZGQ4NDViNywgMHhlMGM4MWQ4YywgMHhmMzMxODBmYiwgMHhmNGQ5OWVkNCwgMHhmZGQ3YzIzMywgMHhjZTk1MjVmYiwKKwkweDAzY2RmYmJkLCAweDlhZWU4OGUzLCAweGU4NWEzZmY2LCAweGZlZWQ2NGJlLCAweDRiNGYxODhmLCAweDlhMWFmZTE5LAorCTB4MDM1Yjc2NmYsIDB4MDM5YjZiZGYsIDB4MWI1ZWY5ZGIsIDB4OWZiZTQzZmEsIDB4N2YwOGYyMTgsIDB4ZTczYTc4MzIsCisJMHgzOTA4ODZkOSwgMHhlYzJlOTEzYywgMHhlM2ZjMDYwZCwgMHhlYmI1NWUyOSwgMHhmNjkwN2FmNiwgMHhlZGVlNThkZCwKKwkweDhkMjI3NWI4LCAweDA3Y2Y1N2JmLCAweGMwMzVlZjE4LCAweGY3YzQzMWExLCAweDk3MWFmMDRkLCAweGEwZmVmM2M2LAorCTB4OTY3YTQxNTIsIDB4NGVlZGFlZmYsIDB4YTNmZmEyMmQsIDB4M2RiZjAyZTksIDB4NjY3MDJlOWEsIDB4ODliZjg2NzYsCisJMHhmMWRmNWRlOCwgMHhkNjk5MjViMSwgMHg4ZTM0MzY3OSwgMHg0NTIxYjlmNiwgMHhmMWM2NzE0ZCwgMHgxYmY2NDMyMywKKwkweGNhYjU0ZjYzLCAweGQ3ZmE4NTgwLCAweDJiZjYwNzllLCAweDE0YTZlZjI4LCAweGVmNGJkZjk0LCAweDhkNTk0ZGI2LAorCTB4NGNhMmY3Y2YsIDB4ZTJhZTI4NTIsIDB4ZWZlMjk0ZmUsIDB4MGM2ZmIzNWUsIDB4ZTc3ODZmZjUsIDB4YzdlNGE5ZjMsCisJMHhlNzRmNDgxZSwgMHg2MDdlN2ZmNSwgMHgxYmUyNzhmZCwgMHgyMjQ5N2ZlYSwgMHg2MDZlZDlkOSwgMHg2OWQ4NjZiZiwKKwkweGJlMjlkOTAxLCAweDVmZmE0MDVmLCAweGY2M2NmNTRjLCAweGRkMmNiYmNiLCAweGY3MmVkODRiLCAweDEyZWM4MDlhLAorCTB4MDFlZDlmZjUsIDB4Zjg0OWRmZjUsIDB4ZjY4OWMwYWUsIDB4NjY0ZmVmYzAsIDB4NmRkNWRmM2IsIDB4YTMyNzE4ZDIsCisJMHhmNWM0OWY1ZiwgMHhiZWE5MWI5MiwgMHhjOWNjYmJhYiwgMHgwNWY3NGU3NiwgMHhjMzVlYzg4YSwgMHgxMDljNzg4NywKKwkweDlkMTIyNGMwLCAweGZjYThiZTA0LCAweGU5OTkzYjg4LCAweGU3ZTVmYzM2LCAweDg2ZTNkMDZlLCAweDc1YzVlMjlhLAorCTB4Y2EzOTY1ZDgsIDB4YTRlMjIyM2UsIDB4ZjQ3MTFiYTgsIDB4OWVkYjMzYzksIDB4ZWU4MTdiNDAsIDB4MGZkYzI4ZDQsCisJMHhmZmJmMGJlZiwgMHhkNTU2M2Q1ZCwgMHg1OTc3M2ViZCwgMHhlZWIzYWUzMywgMHgwN2VkY2M4NCwgMHg1ODVlN2RmNSwKKwkweDdhNDM5M2Q3LCAweDg2ZTI4NjdlLCAweGVmZGM1ZDNhLCAweGIwMzNlN2E1LCAweDY3NWRmNzRlLCAweDA5NGIxYjZhLAorCTB4ZDhhZWNkNjMsIDB4YjljYTk4N2UsIDB4NDEyOTUwYmUsIDB4YmFhYmY5YzgsIDB4OTk4NTliMGYsIDB4YjVmZTkzZTcsCisJMHg5ZjJlYmExZSwgMHg5ZmY1Y2RlZSwgMHg5MjAyNDJiMSwgMHhjMGU1ZmFkOCwgMHhiNWM0NWY2ZiwgMHhmOTEwNzAzZCwKKwkweGUxNGUyNzFmLCAweDEwZmY1ODcyLCAweGNmMDE4ZDZmLCAweGM5N2VmNmM4LCAweDRiYmQyM2YwLCAweDVhZmIxZjQ4LAorCTB4MTIzYWUxZTUsIDB4NGQ4YTgzNTIsIDB4M2ZkMjc3ZjUsIDB4YmFjMDE2ZGQsIDB4OWY3YjQzM2YsIDB4OTljN2UyNTQsCisJMHgzZjQ5ZjdmZSwgMHg5OTdlNGZmYiwgMHhmN2I5NjY0MSwgMHhiN2M3ZDhiNCwgMHhkMjdjYjQ1YSwgMHhiODA5ZDY5ZiwKKwkweGE3YTM4ZGI1LCAweDNjOGJhNWFmLCAweGUyMTViMTRmLCAweGE1N2U0YjllLCAweDAwOWNjMWM3LCAweGZlZjEyMjNjLAorCTB4NTEwNjc2NWMsIDB4NjU1YTE3ZWUsIDB4ZTdmODgyY2QsIDB4Y2U1NjA0M2MsIDB4ZTdhMzdmMjMsIDB4ZmQwMWVmNmYsCisJMHg5NDFmZTFhNywgMHhmNTdhYmRjZiwgMHgxODJiYzIxZSwgMHg2MjdkZWViNywgMHg4OWJmYjljNCwgMHhiYjZkNjlmNCwKKwkweDZiODRmZjA0LCAweGZjNGNmNzVmLCAweDVlNDYwOTdiLCAweDFkYjZiZWViLCAweDNjYTBjNjQ3LCAweGVlOGI5ZWFiLAorCTB4OWVlODYxYjcsIDB4YmRmNzg4N2IsIDB4ZWZhMzlhMWIsIDB4YWU5NTdjMWIsIDB4MzA4OTk2ZTMsIDB4ZWEwYjcwOTEsCisJMHhiMzA3ZmIxMywgMHhkNDU2OWQwMiwgMHhmZDMyNTdkZiwgMHg3ZTVlMTA5ZiwgMHg4NGY4MjRjOSwgMHhmMmVkOTU3ZSwKKwkweDY3MWViNzEzLCAweDFhM2Y4NDRhLCAweDhmN2MwMGI4LCAweGU4Njc2ZjI4LCAweDk5ZDdkZDMwLCAweGE1ZTU5Y2RiLAorCTB4YTIyYWU2MzksIDB4MTY1YjZlN2QsIDB4ODI1MDE5YzcsIDB4OTgzN2RkMzIsIDB4MTljYmY5YWQsIDB4ZDNiNDA3NWYsCisJMHg5ZDY0MmY3NCwgMHg4OWMxMjdlZSwgMHhhM2JmMjg3ZiwgMHg4ZTlkNmJhZiwgMHg0NjBiZWVlNywgMHg4MjA3M2RkMywKKwkweGRhY2YzNDhkLCAweGQxZmVlMjlkLCAweGJmZjE5ZGZhLCAweGM3ZDVhODEzLCAweGM5ZDRmMGQ5LCAweGFjMGU5NDIzLAorCTB4YWJmNzQ1MGUsIDB4ZGI1M2Y5ZDUsIDB4MDViY2ZkMTYsIDB4OWYxODEyNzgsIDB4ZmNjZjdkMTEsIDB4ZmM0M2VmNGEsCisJMHhjNWYwMmNjOSwgMHg0NjM4ZmFkYiwgMHhjMjE5YjVmYiwgMHg3OTIwZDY3ZiwgMHg0MTBkZGYyNCwgMHhiMzdhNDgzOSwKKwkweDBiMjQwYTRlLCAweGQ1OGUwYjdjLCAweDg2NWRmNzQ4LCAweDY1ZjdlOGJlLCAweDczZjlkNmVmLCAweGJjMmZhZTk3LAorCTB4ZmFiZjdjMmUsIDB4ZTc0ODI5MTksIDB4MjRmZjc3ODAsIDB4NDI3YmZlOWEsIDB4MWY0OWNiYWIsIDB4NWQ2YWY1NjIsCisJMHg2ZGYxOTliMywgMHgxMGI0NmMxNSwgMHhhYmQ1OGRiZSwgMHhkOTdkMjFhYSwgMHgxNjM4YTE2ZSwgMHg3ZTM1NGZhYiwKKwkweDBiNzQzMmU5LCAweDRiN2ZmZTVjLCAweDk4NzM3YWY3LCAweGZmZWI0Y2YzLCAweDNjYTVlNGE3LCAweGRmYWRiZGQ0LAorCTB4NzQ1ZTUwYjEsIDB4ZjkwODdkYTQsIDB4YTI3YTE5NTYsIDB4NWRlZmViYWYsIDB4N2M4NmVkY2YsIDB4OTYxNGMwYTcsCisJMHgxNWRhNDU2ZiwgMHhmMWEyODNlZSwgMHg1MGNiNmVmNCwgMHg3Y2YzOTI5ZSwgMHgzODEzOWQ4MywgMHg1MWU4NmUzZiwKKwkweDNhZTUzOGVjLCAweDE0ZmM1ZjJlLCAweGFkYTE3OTcwLCAweGEyZjg0ZWQ0LCAweDJiYzliOGZmLCAweDRjN2Y5Y2E5LAorCTB4NGMzZTQ0MmUsIDB4ZTEwMzIwM2YsIDB4ODlmNmZlOGQsIDB4ZmU5MDA3OGYsIDB4MzdjNTEzYTIsIDB4ZmE3Y2JlNTIsCisJMHhkODNmOGMwOSwgMHhmOGIzYTdiZSwgMHgxMTVmZTQ1NywgMHg3ZDkxYTRlMSwgMHg0ZWNhZWMyZiwgMHhjNzgzYmRmYiwKKwkweDdmZGRmOGUxLCAweDRhZjFlOGJjLCAweGNiYzdjM2YyLCAweDA5NWM2OThhLCAweDc4N2VlOWRiLCAweDFhODcxZTkxLAorCTB4N2JkOTE3OGUsIDB4ZmRkMWUyMjIsIDB4YmVkZjIyMTksIDB4NDdmYmYzYzUsIDB4NzhiMDVmNjksIDB4Zjk0YmQ5YjcsCisJMHhmZjY2YzU4ZSwgMHhhZmE0MDRhNiwgMHhkYmM5MDVlOCwgMHhlOTFkYjM4MCwgMHg4ZDI0ZjQzZSwgMHg1MmE0ZjY4YiwKKwkweGVlZjE2NmJlLCAweGY2YTIxZGVmLCAweGQzMTI1ZGRhLCAweDI4YmVkZmRmLCAweGM3YzUxNzdmLCAweGI4YTVlY2EwLAorCTB4NTc3ZWRmZDcsIDB4NzM4NGJkYzEsIDB4NzA1M2RjMGUsIDB4NDc3Y2M0NTcsIDB4NTk1Zjg1NTIsIDB4ZTM5OTk1N2MsCisJMHhmYjY4ZWY3MSwgMHhjZjI5MmIyZiwgMHhmZjYwZWRhOSwgMHgxZWVhZmJkMCwgMHhiMDU3N2YwYiwgMHhhZTBmMDI0YiwKKwkweGYwZTc4OGYzLCAweGJkMGY4OWFmLCAweDA4NWE0ZWZiLCAweDllYjY5N2U0LCAweGYxYzRmNGI0LCAweDAxNzk0NmNmLAorCTB4Y2U2MTcxYjcsIDB4ZjBiNzZlYmYsIDB4N2ZiZGNhM2QsIDB4NmI3YWQwYjAsIDB4ZjM4OGZiOWUsIDB4MTI2ZDU1NjksCisJMHg2N2FhYTdmYiwgMHg3OTRhYTBlNCwgMHg1OGFmMDM5ZSwgMHg5YTZiM2Y0OCwgMHg4YWNjYzgyNSwgMHgzYjczMzc2YywKKwkweGZmYWE1MWY5LCAweDY1Zjg1OWIxLCAweGU4ZDdlZjQzLCAweGJkZTg2ZTdhLCAweDc0NmIwNzYxLCAweGQ2ZDc3NWZmLAorCTB4MTdiZjNkNjgsIDB4ZjFhMzJkYjQsIDB4NTc5YTdiZmQsIDB4N2JhMDNkZjMsIDB4NWZmN2M3YjYsIDB4NGI1YzFmODYsCisJMHgyYjhjNTJmYiwgMHhlZThhOWY2YiwgMHg3ZTkwZGY3NywgMHhjN2JmZDgwNywgMHgzMjU3YzlmYSwgMHgzY2Q4ZjNmNCwKKwkweDFlZmQyM2M4LCAweGFmMTlhZjBjLCAweDdlN2QzZGEwLCAweGM0M2M2YWIyLCAweGQ3MWUzYmM5LCAweDhmMTE4MGYxLAorCTB4OGUyNmMzMDcsIDB4ZmFmZGIxNjcsIDB4Mjg1YTJlZGEsIDB4ZmU3NmQ2OGUsIDB4Nzk2YmYxOTksIDB4ODcyYzY3ZmIsCisJMHhiZTBlZjZjYSwgMHhmODNkN2FhZiwgMHhhZjFmMTAzNywgMHgwOTNiYjc2ZiwgMHgwOGY2NTc0NywgMHg2ZWQyNWZiYiwKKwkweDZhMjUwNjBkLCAweDdjOTEzNTBmLCAweGVmOGEwZmZiLCAweDRhYWYwMjNiLCAweGY3NDBhMzhjLCAweDdlNzU2YjdmLAorCTB4YjdmOWQ1YWUsIDB4NjM2N2Y3MTYsIDB4YmU4YWRlZTgsIDB4NzcyZmJlZmYsIDB4ZTJiYTExYzcsIDB4ZGYzZmEzNTEsCisJMHg5OTM4NzVkMCwgMHg4NDA0YjhmOCwgMHgxMjEyNWE3ZiwgMHg4NzkwYzlmZSwgMHhjNjQ2NWYxMSwgMHg5MzZmODFkMSwKKwkweDViYjdkNzNjLCAweDUyZjhiZWY5LCAweDZkMmQzZmRkLCAweGM1OTNkZjE2LCAweDUxZmU4YmZhLCAweGRkZmY5MTc2LAorCTB4OGQ4ZGU4MmIsIDB4ZDFhZDM1YTcsIDB4ZDIzMmJiZmQsIDB4ZWEwZmRmZDksIDB4YzMxM2Y4NzgsIDB4YThmMmU4ZGYsCisJMHhlNTNiMDAxYywgMHhiMmE4OTdlNywgMHg3NTZmYzgzNywgMHhlNzdmMzQyYiwgMHg2M2NmODk1NCwgMHgyOTg5ZDUzYiwKKwkweDE5NGJlZWYxLCAweGNlM2E5YmU1LCAweDI4Y2JlYTM3LCAweDQzZmQ4NjRmLCAweGM4OGVlZGNlLCAweDk5OGRmYzdkLAorCTB4Y2Q1NGFmMDIsIDB4Y2YyNDAzOTEsIDB4YjJjZjdkODgsIDB4ZmJiOGFjYTIsIDB4YmE0NGM4MWUsIDB4ZDc3YjE4ZGYsCisJMHhlZTQ1YTY0ZiwgMHgzOTFkYjQ3YiwgMHhmMjNmNjdhNCwgMHhmNzQ5NWUzYywgMHg4NTliNmE4YywgMHg4ZDliZTg3ZiwKKwkweDhlMTBhNmUzLCAweGI1YzVjNjA3LCAweGVkMjBkNmNkLCAweDRmNTE2YTRmLCAweGQyMzA3YmY4LCAweDc2YmZiMjBmLAorCTB4MDdlOTExNjksIDB4OTkxYzFiZWUsIDB4M2E3MmNmNDgsIDB4MmZmNWM0YWEsIDB4OGUzOGMzNmYsIDB4ZmIyZjJmYzMsCisJMHgyYmFhZjU4YywgMHhmOTFiYWM1YiwgMHgxZjZmMTk5NiwgMHg2YTFmZWM2MSwgMHg2YTljMDkyZSwgMHg3YTUxYWYzYywKKwkweGQzNTExZjc4LCAweGI3NDllZTJlLCAweDVjNjJmYTFlLCAweDdmZGJkMjE2LCAweGFkYzYzZmUwLCAweGE2NDE3MmM2LAorCTB4MjVhZGJmODgsIDB4YmVlOThmYTEsIDB4NmNiYmU3Y2YsIDB4OTBlOGYxNzEsIDB4ZDg5YTk3YmYsIDB4M2RjYzZhMGUsCisJMHhmNjU3OGMxOSwgMHg4NTljMmUyMywgMHg0ZmVkZjM3ZSwgMHg3YWQxZGY3OSwgMHhjYTRlZTEyOCwgMHhmMWFkZjVjNywKKwkweDgzN2U3NzhmLCAweDEzNjAxYTljLCAweGQwNGRkYWUzLCAweDllZTEyNWM0LCAweGQ2YjgxYzQ4LCAweGRkMGZlZTI5LAorCTB4YWE0OWM3YWIsIDB4N2Q3YThjM2YsIDB4NTA1ZGY2MmYsIDB4MDNlZWNmMTQsIDB4MjM0OWU2NWIsIDB4MWJmMGRkZWQsCisJMHhhZmJlYmFkNSwgMHg4NWIxZDgyZiwgMHhmMTYzZTA4ZSwgMHg0NzZlYjU1MSwgMHgyZTM5ZmM4OCwgMHgxYmEyZTJjNiwKKwkweGI0ZjVhMzMzLCAweGM2NDRlZGUxLCAweGIyNWRmZGI5LCAweGM4YzQ3MjkzLCAweDI2OGM1ZmQ3LCAweDdlZjg4N2RjLAorCTB4ZWIzYzljNDIsIDB4ZjY1ZWJhYTcsIDB4MGRiZWU3ZWEsIDB4OWJlNjY1YjMsIDB4MGQyODhlNjksIDB4NjNmYzg1MWMsCisJMHhlOTNmZTk3ZCwgMHhjYjFjNTIwOCwgMHgwNGNhZjgzZiwgMHg5ZGZhZmY5MiwgMHgyNDQ1ZTdkMSwgMHhkZmRmM2YzZiwKKwkweGFhZmNiMjBhLCAweDQzM2U3NjQzLCAweDNhNWZkYTMyLCAweGQyMTRjYWY4LCAweGJmYjc4NmIzLCAweGY5NzIxMWNjLAorCTB4YmVlMmM3MjIsIDB4Mjk0NjdkM2MsIDB4NmJmZjYyNDksIDB4NzdmZWM0OTIsIDB4NGM5M2QyYWYsIDB4ZmRkYWFlZmIsCisJMHhmZWYyMmZiMiwgMHhiYmU3MjFiYywgMHg0NTAxZmQ3NSwgMHg2NWQ3ZjNlYywgMHg2ODZmNWNhYSwgMHgzYTYxN2ExNywKKwkweDdmOWM0YTIwLCAweDk4ZjNjOGE1LCAweGVkMTFmZTc5LCAweGRmMmZhODI1LCAweGU4ODBiNzEwLCAweDlhZDdkOTQyLAorCTB4NmFlZjU4MDcsIDB4OWU5ODlhNGYsIDB4MTk4MzkzZGEsIDB4MDVlZjExZDksIDB4ZjI0Y2RjNjgsIDB4ODAxYjBkN2IsCisJMHhjODFkODhmZCwgMHhlZmE1MmViZiwgMHhmNGJlYjEwZiwgMHg1OWM2MDRmZCwgMHg1MjNjMjY0NywgMHg2NGFkY2UyOSwKKwkweGMwZjViZjIwLCAweDIzOTM1NWRiLCAweDNkMDVmZmZkLCAweGMxZjEwM2VlLCAweDA5ZTcyODQzLCAweDg3Y2ViZjMxLAorCTB4Y2Y0MmIwNGQsIDB4YWUzZDA4MTMsIDB4ZWUyYzcxZDIsIDB4OGVjODlhYWYsIDB4NTc1N2Y3NjMsIDB4MGUxYjkzOGEsCisJMHhjN2YyODE1OCwgMHhmOTU4MWZiNSwgMHgwN2U3ZDAzZSwgMHgxZGZlZjJkNiwgMHg5MzI3ZjkyZSwgMHhmZmJmMDE5ZiwKKwkweDM4MWYyYTZhLCAweDNkMzI3NmI4LCAweDdkZTBmY2ZmLCAweDUzZGU3MzU3LCAweGFmOTUxNGRhLCAweDFlN2QxMDA4LAorCTB4Nzk3ZjUxYzIsIDB4OTdjMjc2ZjcsIDB4OTBlMzBhNWQsIDB4ZWZkM2FlYTIsIDB4OWVlYWY5ZDIsIDB4OWI3ZjMzNTYsCisJMHhjNjc3YmQ1OSwgMHhjMjI0ODFlMywgMHhlOTRiNDU0ZiwgMHg5ZDNkOWRiYiwgMHhlMjFmZWIwYSwgMHhkOTQ3MDMyYSwKKwkweDI4OWQ0NzE5LCAweGUzODUxYzY2LCAweDE2NWM4MmY4LCAweDcxYTRhYjFmLCAweDUzMTQ5NDRmLCAweGM5ZGIwOTM3LAorCTB4MWMyNzRkOWYsIDB4NTVjNjE4ZTUsIDB4OWNmZjNkMDYsIDB4ZGZkOWY4MjksIDB4MTNmOWMwOTEsIDB4M2QwODI2MDksCisJMHhiYTI4ZWM4MywgMHhjZWJlYjQzNywgMHg5YjQzNjQzOCwgMHg4NmJkZjUxYywgMHg0Y2VlZGVmMSwgMHhkN2IwYWU3MSwKKwkweGE0OTBiM2QwLCAweDE2ZWQxZWIxLCAweDNkYjY4NmU1LCAweGY1OGViNDE5LCAweDQ5ZWIxMGU2LCAweGI0NTliMzQzLAorCTB4ZDAyNTEyZWYsIDB4ZmUwY2NkZjksIDB4ZmM0MDM4ZDgsIDB4NTA4ZjQ2MzksIDB4YzEyYzRiMmUsIDB4NzdkYjg0YjEsCisJMHhlYTA3OWQwZiwgMHhlMjgyMzlmNywgMHhlNzYzNWQ1ZSwgMHg2ODZlZmU0NCwgMHgzYjhmNzNiMCwgMHg0ZTM5ZmM1ZSwKKwkweGRhNDgzM2U3LCAweGNmYjEyY2QxLCAweGYzYWY2ZDg5LCAweGQxYzY3Yzg4LCAweDFlMmZjMjMzLCAweDFjOWZlODVkLAorCTB4YTAwNjNmY2YsIDB4MjVmYmVjNDQsIDB4ZTZhZDdlNWQsIDB4ODZlNzc4OGEsIDB4ZGYyMjNkMWIsIDB4ZTA2YzczYjQsCisJMHhlZjcxZTkyOCwgMHgzNzNlMDRlZSwgMHhmYzg5NzVlYywgMHg5NzRiNjk2YywgMHhhYzlmZGY0MiwgMHg1MDY2OTU2ZiwKKwkweGZiOWY1YTNjLCAweDgyOWY3ZjFlLCAweDgzZjY2MmY1LCAweDZlN2NmZGUxLCAweGJiYmNkZDVhLCAweGM3NDM4YjVjLAorCTB4MWYxMTFlYjUsIDB4MDFkZmU4OTcsIDB4YmQ1N2QwOGYsIDB4ZDM3ODE0ZmQsIDB4MjNkYTdkZjUsIDB4YWE3MzVlNzQsCisJMHhkZjE0ZWNkMiwgMHg0YWVmODk5OSwgMHhmOWZkZDA2ZiwgMHgxOTliZDc4ZCwgMHhkNTAyOWQzNywgMHhjNDNmY2UyYywKKwkweGRkMzJjNTM5LCAweGZiYTBkZjJmLCAweDNiZGYxMWY5LCAweGU5OWIwMzNmLCAweDdiZjYyMjljLCAweGRmYWZjMzY3LAorCTB4MDJiZjhmYWMsIDB4ZjYzNzFlMzQsIDB4NzU5YmY1YmIsIDB4MmZiMzc4M2MsIDB4NGNhNWY5ZmEsIDB4NDBlNjA3MWQsCisJMHgxMGYzZjkwZSwgMHgxZmJlMTdjNiwgMHg3MWMwOTc5MSwgMHhhNGUxNjk3YSwgMHhiZTgzMzhiOCwgMHhlZmY1NTcwMywKKwkweGU0MzRhOWMwLCAweDFlZjc5MGRlLCAweDFkYTNiZmM3LCAweGRmY2Q3ZTY3LCAweDgwNDk5YzEzLCAweGM1Y2U3MTA5LAorCTB4ZTE5ZmUzODYsIDB4ZjIxMjZlM2YsIDB4YWEyZGNmZDYsIDB4NDM0NjgyOWQsIDB4MDc3MDE3ZWUsIDB4MzMxZjk5MTYsCisJMHhlNzQ2M2VlNCwgMHgzZGYxZmZmZiwgMHgyMjUwNWNhMCwgMHhjYWNmMjVmMywgMHgzYTFlMzFmZSwgMHgzMmY1YjA5ZiwKKwkweDcwMTVjNmZlLCAweDhkNzVjNDFjLCAweGNlMzVkN2QzLCAweDJlZGYxMTFhLCAweDU3MWQ1YThjLCAweDk3ZDc4NzdmLAorCTB4YzQ3MTEwMWEsIDB4OWU0NzY1Y2QsIDB4NzU2MjcxOTUsIDB4ZmJlZmUyNDgsIDB4NWY2MmMzYWEsIDB4ZjYyNjVkNWIsCisJMHgwMmFkMzliNSwgMHg0OWJjYWVhNywgMHhiYjEyNmEwYSwgMHg5ZjQ0ZDNjMywgMHg2Y2NiM2ZhMSwgMHg3YTE4MGYwMiwKKwkweDVkMmZjNDMyLCAweGYwOWRhODdmLCAweDNlM2EwZGMxLCAweGM5YTNkNTg4LCAweGY5NGU1ZGQwLCAweGM5MzQ1YmU2LAorCTB4NDcyYWY3NGIsIDB4NmFiZjNmN2MsIDB4ZWVlNGViZGEsIDB4YTgzZmE3MmYsIDB4MjJlZmZjNmYsIDB4ZjdkMWVhYzQsCisJMHgwZjEyZmUzZCwgMHgwN2JhZDNlNSwgMHhiOGUyMTY1NywgMHgzOGZlZjM0NywgMHhlNmE2ZjQ4ZSwgMHgyZGYzNzYzMiwKKwkweDNiMTM4ODhmLCAweDdjYTM4MTFkLCAweDNmNDVhNGRmLCAweDZiYzk2ZmVmLCAweDc0N2UyMWViLCAweDVlYzdlMzAyLAorCTB4M2E5NmY3NTcsIDB4YmNmOWFiODEsIDB4YzA5YzNhYmYsIDB4Yjc1NjQzZGYsIDB4YjBiYmY5ZGIsIDB4YzQ4NmQ2ZWEsCisJMHhkYjdmZTQyOSwgMHhlYjFkYWY2NSwgMHhjYjI3YWQ5NSwgMHhjNTk1OWY4OCwgMHhhZDRhM2VlMiwgMHhiMzhiZGM1ZCwKKwkweDEwYjdmZGI5LCAweDNiN2JkNzdkLCAweDJkZjljZmEyLCAweGZiYThiZjNkLCAweGY1OGYzZDA2LCAweGEzMDkxYjZiLAorCTB4ZjlmN2ZmYTUsIDB4NWYzYThkOWIsIDB4NjYyZWJhZWEsIDB4ZmVhOWMxNGMsIDB4MjZhZmU2OTAsIDB4ZmQ3ZmVjN2QsCisJMHhkNzFkMGI0NSwgMHhhNTc5NGVkNSwgMHg2ZDg4YWU5YywgMHhlZmRjYThmNCwgMHgyNjhlZTZmYSwgMHhmNDFhZjM0YSwKKwkweGY5M2E2NDc3LCAweDcwNzM1MWY5LCAweDgyZDJlMzJjLCAweGQzMGZiYjJiLCAweGE5OGRmZmIwLCAweDNhZmFhNzE0LAorCTB4MjI1YWE2YmEsIDB4MGViN2JiZjQsIDB4ZjkxYzczZmQsIDB4Yjc0OTgwMzUsIDB4NDk0Yjg1NWIsIDB4MjVlM2ExNWEsCisJMHgwN2I1Yzc2MSwgMHgzZTUwNjcwZSwgMHhiN2VjOTdhMiwgMHg5Mjc3Y2E4MCwgMHhkZWFjYjFiMywgMHgxMjc5MmE3ZCwKKwkweGEyYmQ5NmUxLCAweGVkMTljMjFjLCAweGE1MDNmNzMyLCAweGE0ZTZlNzI3LCAweDMzMzZmYTQ4LCAweDYyNDIxNzdkLAorCTB4OWM5ZTgwMWMsIDB4ZGIyMzBiMWIsIDB4ZGI1ZmZmMWIsIDB4MjdhNGQzZmYsIDB4Mjg5ZWI2ZDUsIDB4ODRmODM3ZmIsCisJMHgzZWZlN2NiYiwgMHhjYWQwNzAzNywgMHhiY2U4MDhmNywgMHhjNzIxMTVjNiwgMHgzNDdmNzQ1NywgMHg2NDRiMzcwYiwKKwkweDdjZTg3M2E3LCAweDNiNDEyMjdhLCAweGJhYTBlZTA1LCAweDk1MjU2MTAyLCAweGIyYzM4YmNlLCAweDk2Mzc3ZmI4LAorCTB4N2Q0Y2Y3ZmQsIDB4Yjg0YTU5ZmUsIDB4Y2VlOWVlODMsIDB4ZTczN2NmZDEsIDB4NWJmNzM3NDIsIDB4NmE1YzAzMDAsCisJMHg4YmVmZTRlMCwgMHhlNWNiYzA0YiwgMHgyOTc4NWI2YywgMHg1MDgyZjFjMSwgMHgwOTlmYmY4OCwgMHg3M2FlMjg2NywKKwkweGU2M2JmZDM2LCAweGU2MWVmMjM4LCAweDBjZTcwMjliLCAweDBlNzRjODdlLCAweGM1MWJlZTI2LCAweGQ3NWJhN2FlLAorCTB4ZjA5YTU5YzcsIDB4ZTgxZDA0M2IsIDB4MDg2Y2VlN2UsIDB4MzVmYmI5ZjEsIDB4YmY5ZmEzZDAsIDB4M2NjNzVmYzcsCisJMHhiOWQxZjdkYywgMHgzYjY4MzVkYiwgMHgyMDhmY2M4OSwgMHhlYjRmOWZmNywgMHhhN2FkZTM5MSwgMHgxOThiMjk2NywKKwkweDlmNDQ5Y2NhLCAweDdkMzBjZTE0LCAweDc1ZjJiZjZkLCAweDRkNmRkM2Y0LCAweDM1ZGY1N2NhLCAweGUyODNmN2QwLAorCTB4NmY0YjczZTEsIDB4ZDNlZjFiZmIsIDB4ZDM0OTYyN2QsIDB4OTdiMWJlZjgsIDB4N2RhNmM3YmUsIDB4MWRlOTU4NGUsCisJMHgwMDEzNjNmMiwgMHhlNmIzZGRmZSwgMHhjNjZmNjQzNywgMHgwN2UwMWFmNywgMHhmYjExZTdiZSwgMHhmNzJkMDZiZCwKKwkweDNkZjBjNjdjLCAweGVkZmVlMzM1LCAweDk1MGFlMGNlLCAweDcyYWM2ZmVlLCAweGFkZGZmOGRiLCAweDliOGRiMjI5LAorCTB4ODdjYTc5NGUsIDB4MjFiZmZjZDIsIDB4NmE0MGZhYmQsIDB4Mjg4M2M0OWUsIDB4NjM4YzE5YzEsIDB4ODNiMmJkNzUsCisJMHgyZmQ2OWIzNiwgMHgyMmY3YzY2OSwgMHhmNDMyZmFjMCwgMHgwMDY0MDFlZiwgMHhiNzYzYjc3ZiwgMHgxZTY5ZWY4YSwKKwkweGE1YjQzZDQxLCAweDc0YWJmNmIyLCAweDJlMWUxYTBmLCAweDZmMmYwOTU1LCAweGY0YmNkOTcxLCAweGU4OTVhZTVkLAorCTB4ZGJkMzBmYjUsIDB4MmZmNzEzNjgsIDB4YjE2YmZiOGMsIDB4MTliNDZjN2MsIDB4OGRhZjRhNzksIDB4NzdjYzc2NzEsCisJMHhmY2RhNzczZSwgMHhiZmU4OWJmZiwgMHg5MzI0YTkzZiwgMHhjYmZlNjA3MCwgMHgzZjdjM2RmMywgMHg3NzU4YzEyOSwKKwkweGMzZWI4ZDg5LCAweDM3MTkxYWY3LCAweDZhN2RkMTM2LCAweDFkMzFhYmE0LCAweGUxZTIxZWY4LCAweGJhMTQ5Y2E0LAorCTB4MjVkOGQ1MWYsIDB4YTYzNzUzZWUsIDB4OWI3ZmQ4MDcsIDB4ZjNmYjEyZmQsIDB4NGVkMmNlYzYsIDB4MGU4MzA3OGEsCisJMHg2ZWFiZGYwYiwgMHhhYTM0Zjk3NCwgMHg0NDIxZDIwNywgMHgzZWY4OWZmZSwgMHg2OWJiZTBkZiwgMHhmZDIxZWY5OCwKKwkweGVkOTE1MDVlLCAweGRlNTE1N2Q3LCAweDRhMWI5YTdmLCAweDYxNjliZGU5LCAweGMwZjExMjZkLCAweGU1MDYxZWY4LAorCTB4NGU5NTE5ZTAsIDB4N2JlZmEzY2YsIDB4ZmJlNGUyODEsIDB4NTAxYzg2MTcsIDB4OWQ5OTU4MzEsIDB4YjkwZDdjYmEsCisJMHhmOGVmOGQzOCwgMHgzYmVhMjUzNSwgMHg4ZjVlNDM3ZSwgMHg5OGI5MGEyNCwgMHg0NGNjMjZlOSwgMHg3MWE1NTc3ZSwKKwkweGYwNjFlNTYzLCAweDhmMDBiZmZkLCAweDMwYjFhZTQwLCAweDAwMzBiMWFlCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHhzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDk0ZjNmZjAwLCAweDUxZjg2MDY2LCAweDI1N2JjMDhmLCAweDc5OWMxODE5LAotCTB4ODk2OGM1NTAsIDB4MTgxOTM5MGIsIDB4MGJmMTAzMGUsIDB4ZGEwMDU2MjAsIDB4YzBjNWNhZWIsIDB4ZmRjNDA2ZTAsCi0JMHg4ODAxM2M0MCwgMHgzZWIxMDBiZiwgMHgwMTgzMDMzNywgMHhkOTAyYTcxMCwgMHg3MzZlNjg1MiwgMHgxN2JhMDI2NCwKLQkweGQ4ODE1ZDg4LCAweDMyYmY4ODFkLCAweDYzN2MzMDMwLCAweDc2N2VkZTIwLCAweDYyM2RhMDIxLCAweDIwMzlmZTA4LAotCTB4ZmQwNGIyZmIsIDB4ZjBkODNmZmMsIDB4ZGFmYTY1NWQsIDB4YzBjMmE4MTcsIDB4MmE4M2EzMTAsIDB4OGZjNjhiMTYsCi0JMHg0NjZmYzFkMywgMHgwMjdjOWEzYywgMHg4ZjExM2YxYSwgMHg1NDczNzE3ZSwgMHgyYTAxOWQ3ZSwgMHg4MTg4YzkzZiwKLQkweDlhOTIwZjYxLCAweDZlZmMwMzdhLCAweDgxYWZjNzQxLCAweDMxMDBkZjdhLCAweDc0NzY5YTAwLCAweDAwMDM2ODVkLAotCTB4MDAwMDAwMDAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDI0M2JmZjAwLCAweGEzZjBjMGMzLCAweDRhZWY4MTFlLCAweGYxMzAzMDMxLAorCTB4MTJkMThhYTIsIDB4NjA2NGUzZWYsIDB4NjA2MmUwMTAsIDB4ZmJlMjA1MzAsIDB4MzMwYzBjM2MsIDB4MjA0Y2Y0ODAsCisJMHg2MDY2ZTUxNiwgMHgxYWUyMDMxMCwgMHhjNDBkZGUyMCwgMHgxOWY4ODA3YiwgMHgxMDM5ZmM1MCwgMHgxYmUyMDBlZiwKKwkweGJlZmQxMDNjLCAweGZlMGMwYzRjLCAweGM0MDgxYzQwLCAweDk1ZmM0MGMxLCAweDFiZTE4MTgxLCAweDczZjZmMTAzLAorCTB4NGMzMDMzMGEsIDB4MmZmMDQ3MTUsIDB4MjQ5ZmQ5MDMsIDB4YzFmZmU3ZTksIDB4ZTkwYzQzODYsIDB4YTA3MWRmNmIsCisJMHgxMGFjZjM3ZCwgMHg3YjIwNDY3YywgMHg5YWFhMTViZSwgMHhjZGY4NTYwNSwgMHhiZjI2ODg1OCwgMHgxOGJmOGQwOCwKKwkweDAzNzJmZThmLCAweDRkNWFmZTU0LCAweDgxYjViMzM0LCAweGNkNDkwOWU5LCAweDZlZmM0ZDNhLCAweDQwYWFjNzQxLAorCTB4MzEwMWE5ZmYsIDB4NWZmMWFkMDAsIDB4MDAwMzY4Y2EsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweDQ1NTQ3ODA5LCAweGJlZGQ3MGI2LCAweDRlOWRlZjRiLAotCTB4NjI1ODU5MDgsIDB4ODE1MTEwMDcsIDB4MDVlNDJjZTksIDB4NjJkOWIxYzQsIDB4OTcwNjIxZjQsIDB4NjY4NTQ2MTEsCi0JMHg0NDc0OWVjYiwgMHhmOWQxYzFjNiwgMHgxNTM2MTBkMywgMHhjNzEzMzA5ZCwgMHg2MGVjNDRlMCwgMHg4MWEwZDA1MCwKLQkweDYwMjQxMDA5LCAweDNjYzBlYTAzLCAweDY0ZmZlMzFkLCAweGI4MzA2NmRjLCAweGM1YTRjNmIwLCAweGZjYjhkZjBkLAotCTB4NGRkNTRlNzUsIDB4MTFkMzdiZGYsIDB4N2ZlZjk5OWMsIDB4Y2EzZmJmZjMsIDB4ZmI1YmE5NTcsIDB4NTM5Y2VhZDksCi0JMHgyYzkyMmFhNywgMHg0MjIyZTkxMCwgMHhhYjlmODNiZSwgMHg0MDliZjkwOCwgMHg0ZDE3MTkwOCwgMHg2OWU1YTkwOSwKLQkweDI0ZTA1Mjk1LCAweGJmYTJlMDI0LCAweGUxNTIxMzY2LCAweGQzY2I0MjU0LCAweDQzYjI5OTA5LCAweDQ4OTU1ZjBlLAotCTB4Yzg0MjhkZjMsIDB4N2RhNmYzNGMsIDB4NmVlZjJjNTYsIDB4NTNiMGY5NjAsIDB4ZmU1YTExZjEsIDB4ZDNjZDEzNzEsCi0JMHg4ZWU2MDMzZSwgMHhlNWEwYWU4NywgMHhkOTIyMWQ5MSwgMHhiMjhlZGQwOCwgMHgyMTEyNDg5OSwgMHhmZDg0MmRjNywKLQkweDBlN2NkMzY0LCAweDk2NTY4NTIxLCAweDNmZGM2OGFkLCAweGI3MTdkYTA3LCAweGY2OTU4OTk5LCAweDY4YmJiMTU3LAotCTB4NWYzNDE1YzYsIDB4NTAyNjQ4NzQsIDB4MzJkMzYyYTUsIDB4OTdjZDEwNjUsIDB4YzgxNjg0ODQsIDB4ZjM2NjRjZjcsCi0JMHg0MzE0ZWUwYiwgMHgxZWZkNjg5YiwgMHhjZGQyNDc1NywgMHg1NzRlNDIwZSwgMHgyMTQ3ODg1YiwgMHg5MWQ5YzZhNCwKLQkweDQyNjhkMzc0LCAweGYyZGI0MzRhLCAweGIzNjk1ZGEwLCAweDU4MTEzNWUwLCAweDUzOTdhNmM3LCAweDA0NWI1ZDYxLAotCTB4NDg0M2Q5YWYsIDB4ZjEzYjY2ZDksIDB4Zjg3MzYyOGMsIDB4ZGUzYmZlOGUsIDB4YTJhZjg2MmEsIDB4M2FlOThiZTUsCi0JMHg4OGI3ZWQwOSwgMHgxMTExZTZkNCwgMHg3OGE3NWZjNiwgMHg5ZGY4NTE5YywgMHgzOGUzNzZhZSwgMHgwYjYyYmU2YSwKLQkweGFiYjY4NzFkLCAweGMyZjA1NjdjLCAweGM0NGQyYjEyLCAweGVmYzc0MmRmLCAweGY1OWQ2ZGRlLCAweGI3ZDYwMzg0LAotCTB4ODRlOTE5NGMsIDB4YTA1NmFkNzUsIDB4ZGU2ODUxNWUsIDB4ZTYwN2FiNGUsIDB4ZDFlNGE4ZDcsIDB4NDY4NmQyZjIsCi0JMHhiNDc0NzBhNSwgMHgwM2NkYjJiZiwgMHgxZmFhZjNmNCwgMHg5NGQ3ZWM5ZSwgMHhkNWQzZDMxYiwgMHg0NjQ2Nzg4NCwKLQkweGY4ODRhNWYzLCAweDQ0YmY2ODVhLCAweGM3MzMyOTBhLCAweDQwN2ZiZjQ0LCAweDA4MTkwOWUyLCAweDYzYzQ4YmZkLAotCTB4MjE0ZmY2ODksIDB4NDc4M2RmODksIDB4NWUxNGFmZTgsIDB4ODQ0ZWJkYzEsIDB4YzViNzhhYWIsIDB4MjdiYmZhNmUsCi0JMHg2ZWIzYjc4YSwgMHg5MjI5NDc4ZSwgMHg0ZDVmZWRhMywgMHhkMDNjMDIxZiwgMHg5YzAyZDRmOSwgMHhjZjk2YmE2OCwKLQkweDRjOTEzNWNmLCAweDJlZmY2ODkyLCAweGU5MDM3MTFmLCAweDM1MWViN2Y1LCAweDNjYzk5NWFkLCAweDE4NWFjNzQyLAotCTB4YzY5M2UzMWMsIDB4ZWU0MmJjZDMsIDB4N2U0MjVlMjAsIDB4MzdjNzIyYmQsIDB4MjQxZmU2OTUsIDB4NmYzMDM5ZmUsCi0JMHgwNjJmZTRkMSwgMHg5MmQyMTEzYywgMHg0YWJiZjQwMiwgMHhmZDYwYjMyMCwgMHhkMzQ5ODEzZiwgMHg5NGE5NTVmMiwKLQkweDZiZGMyOTNlLCAweDIxM2NlNWE3LCAweDg5ZWU3YzBhLCAweGYyN2MyZjkwLCAweGE3ZWM3NGZlLCAweDY4NTFmYjA4LAotCTB4ZGZjZmMzM2YsIDB4NTcyZjNiOGYsIDB4YWYzYjhmZDcsIDB4MGFhN2VkNTgsIDB4NTg1ZGIxZmIsIDB4MTM3OWI1M2YsCi0JMHgyYmM5ZjNmNCwgMHgxYmI5ZmI1NSwgMHhkODVkNzFmYiwgMHg0ZjU3ZGNiYSwgMHhlYWU3Y2ZkNCwgMHg3ZTI3ZWM3MiwKLQkweDY5Zjg5N2FhLCAweDA3YTU1MTdkLCAweDY5MTNlMWQyLCAweDNlMzlhM2I5LCAweGE1YTI3ZWYzLCAweDgxMmJjOThiLAotCTB4NGI5NDlkZmYsIDB4OTcxMTc0YjQsIDB4NjFkMWQzNmIsIDB4OTc0MTJmYmMsIDB4OGZiOTNkYTcsIDB4MzBmM2NlNWYsCi0JMHg3YzgyY2I4OCwgMHg1MDUyMGNhOSwgMHg2NDFhNGMyZSwgMHgzNWRjZjljMSwgMHhlMTcyODFjOCwgMHg0YmZlMDlhZSwKLQkweDMwMWU3NGRjLCAweDc5YTU0OTM2LCAweDc3MjNmZmM1LCAweGYzYTZiYTBjLCAweGE0MGE0ODE0LCAweGM2YTQxMzFlLAotCTB4ODMzMmQ1ZjIsIDB4NWZjMWU0YzMsIDB4ZGI0NjNjOGYsIDB4OTE5MTRjMDcsIDB4NGViZjM0ZjEsIDB4YWMzOGY0OTgsCi0JMHgyMTMxMTM2MywgMHhhOTIyNmM3YywgMHgzMzM2N2E4MiwgMHgzYWI0Zjk0MSwgMHhhMDg5ZTczZCwgMHg4NjZiNGUwNiwKLQkweGQxMGJmYzUyLCAweGZlYzhkNzdlLCAweDJkYWZhMDE0LCAweGQwMjBlNmU0LCAweDk0YTFhYWRiLCAweGYyMTEwN2M5LAotCTB4NzBhNmYwNzQsIDB4ODdlZGEyNTAsIDB4M2MwMGE2MTYsIDB4NmZlNTBhY2QsIDB4MWQwYWY4ZWQsIDB4ZmY4ZTM0N2YsCi0JMHgwM2JmOGMxYywgMHg3N2Q3MWZjNiwgMHg1Y2IwZjM3YywgMHhiNDk2ZjhkZCwgMHgxNmY4ZGQ2MiwgMHhlOTRmOGU4NSwKLQkweDlkYjkzNzdkLCAweDM3ZTE0ZjhmLCAweDgzZTc5MDgxLCAweGU2ZjhlMWI3LCAweDdmMWM2MmI0LCAweDc1OGE0MmI1LAotCTB4Yzc3YWRiZTMsIDB4ZmRkNjAxN2YsIDB4MWZlYjdmNTIsIDB4ZmViZjQxMzYsIDB4ZmFmZDUyYjQsIDB4YzNmZWI2MTUsCi0JMHhkZjFmMTE2NCwgMHg2M2ZmZWI4NiwgMHg3ZjViMjE3MCwgMHhiZjViMjk1YSwgMHgzYmRiZjU5OSwgMHhmZTE3YWJiZSwKLQkweDhmYmFjMWFmLCAweGUxZmViN2Y0LCAweGJmZWJmNTEzLCAweDdlYmY1Y2E4LCAweDZkZmYxYjMzLCAweDc3YzdjMTUyLAotCTB4MDRlZmY4ZTAsIDB4MmZmYWQ5Y2IsIDB4MTVmMWM3MmEsIDB4NzQwYmRmYjMsIDB4NTViNjBjYTQsIDB4NjRmOGU4ODUsCi0JMHg2NDg4NjUwOCwgMHg0YzNlNTE5NCwgMHg0MjEwMjU0NywgMHg2MTkxZDdkYiwgMHg2Y2JiODcwOCwgMHhiMGJlZWU4YywKLQkweDQ0NzM3YTUxLCAweDUxMDkxZGU1LCAweGFjZjJhMjhlLCAweDU5N2NkMzkyLCAweGU0MDUyNGYzLCAweGI5NTM5NjJjLAotCTB4NzU0Zjg4YjcsIDB4NzQ4ODliNjEsIDB4YTFjY2VhNGQsIDB4YmI3Y2U5OGIsIDB4ZTQyMGM0ZGIsIDB4MTk1ZGQ2MTcsCi0JMHgyM2JmNzExMiwgMHg5ZGEwMGI3MywgMHhmZGYwYzI0NCwgMHg2Y2M3ODdhMywgMHg5OGNiYWVkNCwgMHg4Zjk1YWEyZSwKLQkweDg4ZjhlYTc3LCAweDk5MzgyN2NkLCAweGYzYTJhYThjLCAweDMwNDQwNjliLCAweDRlM2Y5YTJlLCAweGYyYTEyOGU1LAotCTB4NDcyYTdkZjMsIDB4ZDMyMTNkMjEsIDB4MGZmN2U4ZjEsIDB4OGEyNTljYTksIDB4YjE5NjZmOTYsIDB4ZGU0ODNjN2QsCi0JMHg3MjA0OTUxOCwgMHg5NzFjZmQ4MiwgMHgyZjhmYmMxOCwgMHhmZjAwNDIxMSwgMHhhMWRkZDYyZiwgMHg1NDVhN2M4MCwKLQkweDhmNDBhNzZiLCAweGYxYzAyM2NlLCAweDBlNmRkOTE0LCAweDllMTAxNDZkLCAweDJkY2Y4MDFlLCAweGZjODQ4YWM4LAotCTB4OTUzNWEyOTUsIDB4N2VhOGI2ODIsIDB4NmRkZGFlODAsIDB4ODUzMmI0MjQsIDB4NzZiMDVmZDYsIDB4NWQzNzUwZGUsCi0JMHhjY2IzYWRmZiwgMHgxZmVjMjI5OSwgMHg4NGQ4MzdjNCwgMHg5YjA2NGM3YywgMHhkNTk5MDk3MiwgMHg0YzFlNGViYSwKLQkweDkyY2NiNzMzLCAweGI0ZDRlZmRmLCAweGU3ZDdlZDlmLCAweGU3ZDYyZDZmLCAweDZjOTBlNWJiLCAweDQ0YTM3ZDAyLAotCTB4ZGZiNDhkMjAsIDB4ZTVmNGFiZGIsIDB4NDJmMTM4ZWEsIDB4MWYyYmMzMDIsIDB4NmM0OTI3ZWYsIDB4OWE0M2I3YmUsCi0JMHg4OGRkOWYwOSwgMHhkNjZlMzlkNywgMHhlMDRmOWQ1NiwgMHg3MTg0OTkxZSwgMHg0ODFjZWNiZiwgMHhiMTAzZmYxMCwKLQkweGQ2Y2RkZjllLCAweDFjZWY5YzZkLCAweGEwMmJlMmQ5LCAweGI3NzM5OWYzLCAweGNlMzRmMDg4LCAweGRkOWY3M2JmLAotCTB4ZDM0YjFhNjcsIDB4MjA2NTRmZmEsIDB4OGM3YWUzNDEsIDB4ZDRiYjlmZjMsIDB4ZWEzNzFlYjgsIDB4YzY4MmYzNjEsCi0JMHg4YzRlOGNlZiwgMHg5YjY4MTRmNCwgMHg0ZDQzZTAzNCwgMHg2Yjk2OGFiZCwgMHhhMWE4N2MwNiwgMHgzM2NkYjJhZiwKLQkweGQwOTJmOTc1LCAweGEyZmQ1ZDZjLCAweGYyYmE3OWZhLCAweGJhMjViNTQ1LCAweGVlNmIwNWYyLCAweDA1ZTdlNWQwLAotCTB4OWZkNWQ2ZWYsIDB4YWU5OTc0YmIsIDB4ZmJhYWY2ZmMsIDB4MTZiN2U1NzQsIDB4NjdlNWQzYWYsIDB4ZWFlYmQ3ZmIsCi0JMHg1MWFiMzJkZiwgMHgyYmVjMmU1NywgMHhlNTEzYThiOSwgMHg1NGEyZmZhYSwgMHgzNmRmMmJkMCwgMHg5NTQ3YTAxMywKLQkweDM4N2U1NWRlLCAweGU5ODI5ZDU5LCAweGE2MGY2YWU5LCAweDI5NGY4MGNiLCAweGIzNzY5YmZmLCAweGRlNzFiMDM0LAotCTB4MmFlZmMwNDUsIDB4NTVjODRlOWMsIDB4NDY0ZmMwNjksIDB4ZDNjMjM3YmEsIDB4NjdmNGRmNDgsIDB4NDg3ZGFjNzAsCi0JMHg1MjA1Y2I0ZCwgMHg4N2FlNzIwMCwgMHhmN2VhY2ZlZiwgMHgxMjBlNWM3MywgMHg3MmQzMWNiMiwgMHhmOTZkZjE4NSwKLQkweGM0YzlkNGY2LCAweGM4ZjBmOTA1LCAweGZkZmY0NzJhLCAweGQ3MDExNjkyLCAweDFlOGI0MDQxLCAweGQ0YTM3ODA4LAotCTB4NzBlYmMzYWEsIDB4ZjZiYjNjZGQsIDB4MjU3ZTM4OGIsIDB4MDA3OGVlZjAsIDB4MDEzMmMxNTUsIDB4MzA3YzIxZjgsCi0JMHgzMDMxYzZlZCwgMHhjYzcyZGYxZiwgMHhmZGM0MGRiNywgMHg3ZjNhYWJiNywgMHhjMDEyODdjMCwgMHg5M2QzMDBhZiwKLQkweDNkMzBiM2Q1LCAweGY0YzdlZDVlLCAweDRjNjJlYWMzLCAweGMyYWVhZmRmLCAweDI5N2FiM2I0LCAweDgzYWI0N2E2LAotCTB4N2FhNWZlOTgsIDB4NTRlZmE2MGQsIDB4NTZmYTYyZDcsIDB4N2ZhNjNkNzUsIDB4ZGE2MTBlYWUsIDB4NTRjM2VkNWQsCi0JMHgzOTVlZGJhNSwgMHg0YWY1Yzg5OSwgMHgxZGQzZmZhZSwgMHhmOTY3ZjMwMiwgMHg3YmZhNDQ1YSwgMHgzN2EzZjIwNywKLQkweGFjZjFmODA1LCAweGEwOTE4YmUzLCAweGNiN2Q5ZjM3LCAweGVmMmY0MDRjLCAweDdhNDY1ZTBmLCAweGM0YWUxN2U4LAotCTB4NjE0NTdhODcsIDB4YWM4NzBhODgsIDB4MWI1NmU1YmUsIDB4NDRkNTkzYzMsIDB4MWI5NTA5ZjIsIDB4YTRmYzVkZjcsCi0JMHhjYzY4ZmU3NywgMHhkYTAxMjQ0YiwgMHg5ZDMzYmM4NywgMHg0MTFkZmEzMSwgMHhjM2U3NWYxMCwgMHhjNjQ1ZjExMywKLQkweDcxZjE0MGRlLCAweGU1YmZkMWZjLCAweGY4ZTdiZjQwLCAweDI4M2I2NTNlLCAweGMyNDk3ZWUyLCAweDVmMDE3ODRmLAotCTB4ZmVlMWI4MWEsIDB4ZTVjMWQ5MTMsIDB4ZjdlMDc5ZjIsIDB4N2UxNTQwZjEsIDB4YTY4NDY5MWQsIDB4ZDIzNzA0MTMsCi0JMHgzMzU2ZDlkZiwgMHhlZDhlMDA5MSwgMHhmZGExMTBmNiwgMHg4NGY0M2Q5YywgMHhjNWJiZjYwYiwgMHg4N2Y3MjYyOSwKLQkweGE2YTBlMDMxLCAweDZlZTkyZDE1LCAweDY4OWY3Njg3LCAweGQ2Y2ZlN2QzLCAweDI4MmRmOTBhLCAweDM3NzEzZDM3LAotCTB4NzJiYTAxOGQsIDB4MDExYzNmYmIsIDB4NTRjMTRmZjgsIDB4OGE3MTY3ZWQsIDB4MDA3MGZlZTIsIDB4NDVmMThmYzIsCi0JMHgyOWQyM2M3MywgMHhkZWIwZGJiNSwgMHhmZDFlN2IzZiwgMHg0NzlkMTNmNSwgMHhiNjgwZjkyYiwgMHhmODY0NWI0NywKLQkweDNlOTFlZGY5LCAweDUzM2U5NmY4LCAweGVkNGYwMDBhLCAweDlmYjAxN2YyLCAweGVmYmZlOGRiLCAweDEyYmY0MTg2LAotCTB4MDM3ZWQ1ZTYsIDB4ZmNkMDYyMmQsIDB4YWNkZWY4MjMsIDB4ZjNiNjhmMWIsIDB4YjQzMTM2YTgsIDB4MjU1ZTlmZWIsCi0JMHgyN2E1NWM3MiwgMHgwYmZlZGEyYSwgMHhjZTNiNDAzYSwgMHhmZGNiZDZlYSwgMHhkMDNlNWQ3OCwgMHhlZGQ2ZWE5NiwKLQkweGU1MGJmMDAzLCAweDQ4MmM1MjdiLCAweDljZTUyZjQwLCAweGM3MjQ3YTdhLCAweGVmY2U4MTFhLCAweGY0NjFlMDg4LAotCTB4MTU3YWIwMjYsIDB4ZWZjNTRlOTYsIDB4MDBlYzMyNDEsIDB4YWU3ZTYwM2QsIDB4NWI5ZTZmNGEsIDB4Zjk3MmE1ZGUsCi0JMHhlNGM4N2ZkNCwgMHg5YWZmMjg3ZSwgMHhkYTI3MmFjZSwgMHhjNGMwOTUxZiwgMHg3ODBiZjM0NCwgMHhkOTZiN2U2ZSwKLQkweGE3Nzc5MDc0LCAweDVlMWY2YzRjLCAweDYwNWMwYTQ4LCAweGRhOTMxNDk0LCAweDNlNDNkMDFjLCAweGEwN2NhNjI2LAotCTB4ZmZjOThmZmIsIDB4ZWM2OTY1NzYsIDB4MDUyNjExODEsIDB4OGQ2MGIzZTcsIDB4ZmFhNDFmN2UsIDB4NTQ1ZjJlOTMsCi0JMHg5MjE3Y2ZhZiwgMHhjZTgwOTIxYiwgMHgxMjY0ZWIwYiwgMHhmNTFmODAxMiwgMHhjNjI2ODllNSwgMHg2YWE0NDUwZiwKLQkweDJiMGZlYzE1LCAweGRmMzEzZGI4LCAweDc0YzFhNDRkLCAweDFlYmIxNTdlLCAweGU3NDc5OWNiLCAweGM5ODliOTcxLAotCTB4MmViZWQ1NmYsIDB4MmZmMzYwNDksIDB4N2M1NDY5NmQsIDB4ZDY4M2ZjYjQsIDB4NDE1YzlmYWMsIDB4MTU2ODdkYTAsCi0JMHgzYjgyMTlmOCwgMHg0ZjI2ZWYwNCwgMHhkMGZkZmM1ZiwgMHhhYmU3MWJmOSwgMHhlYzdkMWZlZSwgMHg4YThmM2U3YywKLQkweDE0MmY4MmNkLCAweDZmMTkxZjYzLCAweDEzZmVmODEyLCAweDAzNWUzODQ0LCAweDk5ZThkNmViLCAweGE4Mzg3MzM3LAotCTB4ZjI4Njc5ZjksIDB4ZWZmZTQzMGEsIDB4YTI0NGI3YTYsIDB4ODIyM2I3YTMsIDB4NDBkMzY2ZmYsIDB4NWZhMDVmNDYsCi0JMHhmMTQ0NTIwOSwgMHhhN2ZkMjNmZiwgMHg5ZTdmZTlmNCwgMHhiMTNmZGM2OSwgMHhmZmI0MjFmZiwgMHgxNWZmNWQxYywKLQkweDQ3ZmVkNGZmLCAweGRkZmY5OWY0LCAweGQ4YWZmYWIxLCAweDkwNjc3NWI1LCAweGU3ZDI5YmNhLCAweGJhMTE3NjFlLAotCTB4NmE5MjljZmYsIDB4ZmYxNGJjOTMsIDB4YmE1NjliZTUsIDB4NGE0ZTBlODAsIDB4ZjNkMDE3NDEsIDB4MWY5ODkwYTksCi0JMHgzZjU3NjE4YSwgMHgzZTBmNGJkNywgMHgwZjc2MDA4NywgMHgzZmZiNGFmYywgMHgzMzAzZjRmZCwgMHg2MmY5N2Y2MCwKLQkweDdiNDZlYzkzLCAweDZjMzliMzY2LCAweGQ5NWFmY2E2LCAweDhjOWQzMjVhLCAweDk2MzFmY2M1LCAweDA4ODlmZDVmLAotCTB4N2QzZDM2ZjksIDB4NzBmNTNlOTYsIDB4MjhjN2Y4MTIsIDB4M2Y3ZDcwYTUsIDB4NjU1MmZhOGMsIDB4YjA3OTQ3ZDMsCi0JMHgwNDQ4MDRmZiwgMHgwZWQ4Y2NmOSwgMHg4MDk3M2ZjNiwgMHgxMjllNzFmMiwgMHhjZTljYjdkNywgMHgwMGYwZjUxMywKLQkweGY1YTA0Yjg3LCAweGYwNDQ0ZjgxLCAweGU2NGU5MjRkLCAweDJmZDQzNGE3LCAweGM4NGY3YWU2LCAweDRlM2M0Y2U0LAotCTB4NmZmMjNjNTUsIDB4NWU0MGRmZTQsIDB4MjEyMGYwYWEsIDB4YmI4OGY3YTYsIDB4NzYwYjFiMWUsIDB4N2ZkMzU3NmIsCi0JMHg5YzBkMDRiOCwgMHhkYjNiM2U1NCwgMHhlN2YxZTBiMiwgMHhlM2NiZmQzZCwgMHg0NTg3NmU2ZSwgMHg5ZGIwODVkYiwKLQkweDZiZWI4ZGE3LCAweDk3MmQyY2VkLCAweDYzZjAyZWMzLCAweGRlY2EzNzk2LCAweGJlNWNmZDIwLCAweDFmMjc4OWY1LAotCTB4NmRmMjNiMDUsIDB4ZGE2MmY3YjMsIDB4OTdkNmQ5N2YsIDB4ZTY4MTNjZmUsIDB4ODljOWI2Y2IsIDB4MWMzMmQ5ZDMsCi0JMHgyZjE0NTI0MiwgMHg2OTZmZmEwMSwgMHhhNTBmMTQ2NiwgMHhmMTQ5N2ZiZiwgMHhlZmRmNjE4YywgMHhhM2UyODg0ZCwKLQkweDg1N2VkYjZjLCAweDhmMGJlOThjLCAweDk1ZmIyZDI5LCAweGJjMGM0NzRlLCAweDAzY2IxY2I0LCAweGY1ZGM0YWJkLAotCTB4M2Y3ODAyOGQsIDB4YzkyMDRmYjUsIDB4ZDllMDMxZTksIDB4MDdlYTEyZjgsIDB4MjNjNDI3MDAsIDB4ZGUyZjUzYzcsCi0JMHgxNDAzZjUwYywgMHg1NWNmMjAyZiwgMHg5N2NiMTkzYywgMHhmZDAzNzk3MywgMHgzZDIzNDY3OSwgMHhmODNjZmIzZiwKLQkweDdiMzFkZjdkLCAweGNmYzVmZDYxLCAweDc1ODJlOWRlLCAweDE4YWE5MDljLCAweDMyYjYzZjVkLCAweDJkYzc0N2M5LAotCTB4NmU0OTgzOTYsIDB4ZTJmN2Q5NGMsIDB4N2E0MzNmMGQsIDB4NjdmZDdhMmIsIDB4ZjM1ZWNjNDksIDB4NmY3MDlhYTUsCi0JMHhmYWMyYTYwYSwgMHg4Y2RjMzUxNiwgMHg3ZTI0MmJlYiwgMHhjN2UyYmJhNCwgMHg4ZjkwMDJjNCwgMHg3ZjI0NGI5ZiwKLQkweGI4YmUwYzViLCAweDcxN2M2NDU4LCAweGI0NTUyMzYyLCAweGQwNGVmYWU4LCAweGEwZmQwNzZkLCAweDZkMGM1YmZmLAotCTB4MWRjNTdmNDIsIDB4NjdmZmY4MDQsIDB4MmM5YWZmYWEsIDB4MTZlN2ZjYzYsIDB4NGRhZmE3ODYsIDB4YjU0ZjllYWEsCi0JMHgzNmJkMmQzYywgMHhmYzAwZWVhZCwgMHg0YmVhMWU5YywgMHg4MDU3M2YwNiwgMHgwZjBlNDE0OCwgMHhhZmRhM2JlMSwKLQkweDY0YjRmYWY4LCAweDkxZTIxZjg2LCAweGFhM2I3ODcyLCAweGVmODE0YzA3LCAweGY2NDNiZjUwLCAweGRhZWFjNzU5LAotCTB4YTNkMmVmOTEsIDB4ZTNlMTJmZTMsIDB4NjBkYjc5ZDMsIDB4NDQ5MTNlZmYsIDB4YWM2MjViOGEsIDB4ZjJhOGE2NmYsCi0JMHgzNWM3ZGQzZCwgMHg2ZmUxYTVmNCwgMHhmNzRkZWZjNiwgMHhmOTU2ZmUzMSwgMHgxZjMzMzQzZCwgMHg4MzdiM2ZjYSwKLQkweDgzYjQwZmYxLCAweDJiY2U5MWZkLCAweGZiZTU4YzljLCAweDFlNTAxMjZmLCAweDE2Mzg0OTk4LCAweDljYzkzNzVmLAotCTB4MmFlNWY1YWYsIDB4NGI3OWQwOWQsIDB4NWU4NjljNDIsIDB4ODQwNGZmYTAsIDB4MGFiN2ZhM2YsIDB4OGQzYjY4ZWIsCi0JMHg3OGMwMGNiYywgMHhhOWZkYmVhZSwgMHhmOWM0NWI3YywgMHhmOWVhMjNkZiwgMHhiZTMwMzQ5ZiwgMHgwYWJmNWZlZiwKLQkweDJlNTczZWUyLCAweDE0N2M5ZTg3LCAweDY3ZjI5NWY4LCAweDJhZmMwM2QwLCAweGNmYmFjMDE3LCAweGYzZmMxZjM0LAotCTB4OWM5ZjI5NGYsIDB4NTRmOTUxNjksIDB4N2M4ZDNmMmYsIDB4NWM3ZGJjNWEsIDB4YjMzZDNlNGMsIDB4OWYzNjIzMzYsCi0JMHhmOTMxZWZkMiwgMHhkM2UzMmQ3NCwgMHg1M2YyNWJmZiwgMHhjMDNlNWY4NSwgMHhmYzI4ZjJlZiwgMHgxZmQ4Nzk1NCwKLQkweGYwZjI4ZDFjLCAweGUxMDc5MzIzLCAweGY0ODc5NDY5LCAweGQzOTIwZGU3LCAweGJhNTRmZTk3LCAweGY0YWRlOTUzLAotCTB4NDA4YjhhOTksIDB4YTVkMmY0ZWUsIDB4NzRiZDc3NGEsIDB4MWY1ZGQyYTksIDB4N2UwZTg4ZmYsIDB4YTAwNGYyYzYsCi0JMHgwNTI3NGEwNSwgMHgwZGU0OGZiYiwgMHg2ZjJjZjhhNiwgMHhiNDQwZTc2NywgMHhhNzkwY2JkZCwgMHgzNmUxZjI3MCwKLQkweDFlNWY2YTQ2LCAweDg3Y2RhODljLCAweDQzMTZmOTBjLCAweDVmMjE5ZjdkLCAweDM3ZWZhODYwLCAweGY1MGNhYmU0LAotCTB4ZDAzZmNjNDMsIDB4NDgyMTUwNzYsIDB4N2Q1ZDYxMDcsIDB4M2EwOTM5NzksIDB4NTdiNzJmYzEsIDB4ODdhZmZiNDQsCi0JMHg2ZDE1NzljZSwgMHgxZTljZDNkZiwgMHhiMDc5NTIwYSwgMHhlYWVjY2FkMiwgMHgxNTY1NDBjOCwgMHg3NzFlYWZjOCwKLQkweDc5MDA5NWM0LCAweDdiNmJkMzJiLCAweDc4YWUyMjBhLCAweGFjNzg3ZThkLCAweGRiZjk0NDVkLCAweDVhZjkyMjE5LAotCTB4MWY5NDQ1N2YsIDB4OWQ3ZjEwNmEsIDB4ZTY3MmJmYTQsIDB4M2EyNjljNjcsIDB4M2Q4Mjk2ZDIsIDB4YzE3YTJiNTksCi0JMHhlY2I4NWQ0NCwgMHgzY2I4MTcxNiwgMHg1Zjg3ZGE3YSwgMHg1ZjdlOGIzZiwgMHhlM2M0NTg3NCwgMHg2YjliMWU4YiwKLQkweDA0OGJjYzJjLCAweGM2YWE1MjdkLCAweDgyNDkzODJlLCAweDdlMDg5ZGJmLCAweDFmNjY3NmMzLCAweGQwNmI1YzJjLAotCTB4YTQ1YWM4MmIsIDB4MTJjNzQyOGIsIDB4ZDUyMmU0MDUsIDB4ZmJkN2RmZTcsIDB4OTc3ZDE5NGQsIDB4MWI4YWZlZjIsCi0JMHg3YjZhZTVmNCwgMHgzYjAyMzkzOCwgMHg1ZjQ5YjRhZCwgMHhjZTc2ZTdlZSwgMHg2N2JkMmE5MywgMHgxNzk0MGM5MCwKLQkweDdkODBjMDYwLCAweDM0ZWJlNWNkLCAweGIzZjVmNDcxLCAweDBlN2JmYzI4LCAweGU1ZTgwNDg5LCAweGYwODhiYjZjLAotCTB4Y2VjY2RiM2YsIDB4MjA3MDQ5MDksIDB4ODkyNTRkZjIsIDB4ZTE1MzVjYTAsIDB4YTE3YzA1ZDQsIDB4YmE3NzJmZjQsCi0JMHhlNzM1ZmM3NiwgMHg3Y2E1NWExZSwgMHg3ZjYzYmJlNywgMHg5ZGFlZDM0NywgMHgwM2RjOGY2ZiwgMHhhNjZmNWRmOSwKLQkweGQ2ZmE0YmJkLCAweDhhY2ZiMjlmLCAweDdkOWVkOWZlLCAweGU5NGYzYzRlLCAweGRhNmFmYmQ5LCAweDZkZGY5MDNkLAotCTB4N2IzY2MyZjYsIDB4MTYzOTdkZjYsIDB4Yjk2N2E3ZTgsIDB4NTZlNDE4YjksIDB4N2Y4YTUwY2YsIDB4ZmRlY2Q2OWEsCi0JMHhlZTI3NmM3MiwgMHg2ZjEwMmI5MywgMHhkMzBhOGJhZiwgMHg3NmZmZGE3MywgMHg5NDg0NDg1NCwgMHhmZmY2MGFhZSwKLQkweDMzZjQ3NjdkLCAweGEyYjc5ZTA0LCAweGVmNjdhMDdmLCAweGM3N2UzOTk3LCAweDk1M2Q2ZjNmLCAweGM3YTRkY2ZjLAotCTB4ODc2ZDY2NDksIDB4N2YzM2M1ZjksIDB4ZjhjZjYwNzMsIDB4YjljMTk2MjcsIDB4NjU3ZWViNmYsIDB4ZjI5ZjJkMDEsCi0JMHg0MTYzMzdjMiwgMHg2NzZjZjYxZSwgMHhkY2I3NGQ3YSwgMHgwNWNlMDFiOSwgMHhlZWYzNTJmZSwgMHhiOWMyOTkzMiwKLQkweDEwNjI5ODFiLCAweDg2MmJiOTk1LCAweDYyM2EwZTRjLCAweGY0MWJlNWMxLCAweDNjMjg1YzdiLCAweDA2N2ZmZDNlLAotCTB4Zjc5ZTAyMWUsIDB4NDMzYmI3OTUsIDB4ZmRkNjAxMTYsIDB4NDE3N2QxZDUsIDB4MjMzM2VjMGUsIDB4M2RlYmFhNWQsCi0JMHhmNTBjYjJkMywgMHgzYmFkZjM4ZSwgMHhmNWY2NjI0MSwgMHgwYjc1OWNmZiwgMHg3NzU5MGJlMSwgMHg4ZGFmZjQ4NiwKLQkweDA3YTI1ZGVmLCAweDgzZTQ2MmYxLCAweGY3YmU3NGJlLCAweDc1NmZjYzJlLCAweDE3YmU3MTdhLCAweGZmMzNlZjQ4LAotCTB4ODNmZmQ3YzUsIDB4ZTI5ZGJlZjEsIDB4NzVmZTc1ZGQsIDB4YWY4YmZkNTcsIDB4MWZiYzdmYmIsIDB4ZWVmMWMzOWUsCi0JMHhjMGY1NzM4NiwgMHhmY2UwZGYwYiwgMHhhYjljYTg3ZSwgMHhmN2U3MTdmZCwgMHhlYWFmZDZmZSwgMHg3OTMwN2ZlNywKLQkweGY1YTBjOGRlLCAweDAzYWQ0OWYzLCAweDJhNmI4YjE0LCAweGEwY2UxYzBlLCAweDcyMTg3ZmE1LCAweDNiZTYxZTMwLAotCTB4MThjMzlmOTksIDB4MTI1ZmI3ZTcsIDB4YzE2NGZkYjAsIDB4ODkxZDc2ODQsIDB4Yzc1ZGI4MTcsIDB4NWNjMWExZWMsCi0JMHhhNGJjMTg3ZiwgMHhjMTkwZjUxMCwgMHg3YTY0MWU0MywgMHg4M2E5ZTQ4MywgMHhhNDNmYmU3MywgMHhjYzYyZjAyZCwKLQkweGNiN2NjOTAyLCAweDk1Zjc3OTBmLCAweDBiYjdhZjNjLCAweDFmMTAyNzdmLCAweDRlMGU0MTFjLCAweGEwNDNmN2ZiLAotCTB4MjIxOTBlOWYsIDB4NTM0YWZlYTIsIDB4NzQ1ZjViZDQsIDB4ZTVlZmIzZTUsIDB4Yjk3ZWNlOGEsIDB4NjdiN2EzYzYsCi0JMHg3NmY1MTJmMiwgMHhkZmRlNTRjZiwgMHgzZmU2YzIzNCwgMHg0Mjg0MjFjZCwgMHg4NzkzMGUxNCwgMHhmYzExMjZmZSwKLQkweDk2MmY5MzljLCAweDc5ZjM0MDg5LCAweGVjMDJiZmM0LCAweDdkMGVhOTg0LCAweDE5YzE4ZjdmLCAweDU4MGZjNjhjLAotCTB4MTZiYjY5NjQsIDB4YWYxNmRmZmMsIDB4ZDI1ZGZkODAsIDB4NjI3OTQyNjUsIDB4MGU5MDE2YzksIDB4OTg0YmQ1NDYsCi0JMHgxZWU0ZGQ3ZiwgMHg3MTllNzAwNywgMHg3NzMzYWVjNSwgMHhmYTk3ZjAxMywgMHg1MjhmMTYxNCwgMHg1ZmRlZmNjMCwKLQkweDQ0ZGRmNzdmLCAweGYwZTJlMzg4LCAweGFlZmZhMjJiLCAweDAzNmVmZjAzLCAweDdhZThkYjA5LCAweDE4MjQ0OTE3LAotCTB4NGVmZTAwOTcsIDB4ZjNhZmJjODEsIDB4ZjBmM2VhNzcsIDB4NjhhNGUzZjMsIDB4ZGZhYmU3M2YsIDB4YjNmZTFkMWYsCi0JMHhlZTk0NWRkMywgMHhkYmIwYTdkZiwgMHgxYzA4ZTkwZCwgMHg1M2RhZDI1ZSwgMHhlMGNlZDZmZiwgMHg4NDg1NzgxNSwKLQkweDZlZjNiMTg2LCAweDJlNzM0MGIxLCAweGVjY2NhOTc0LCAweGQ5N2Y1ZGVlLCAweGNjZjYwNTllLCAweDcxZDE5ZWE0LAotCTB4YTA0NzFmOGMsIDB4ZmFlMDE5N2UsIDB4ODllMjU5ZTUsIDB4MWY4MDNhZjMsIDB4NzllMWM3ODcsIDB4MTlkMTIxZDcsCi0JMHgwYjZiZGUyYiwgMHg4MTllYjNiNywgMHhmNjlhNTA3MywgMHgxMTVhOTEzNCwgMHg0MTEyN2RmNCwgMHhjOWIwNWRmZiwKLQkweDg4YzUzNjQyLCAweDRkOTQ0ODNiLCAweGUzOWM1Y2ZjLCAweDM5ODhmZThkLCAweGUzNjc4N2UwLCAweGUzNGRhMjJmLAotCTB4OWFlYjc4YjQsIDB4ZGIxYTRhN2UsIDB4ZjNmMDBmMTcsIDB4ZTIxY2U2YmUsIDB4ZDgyZjg1MWYsIDB4MmRkZjAwNzUsCi0JMHg4MmJjY2VkNiwgMHg5MjNiN2MxOCwgMHg4MWM2NmZjMywgMHhiZTllZDBhZiwgMHgwNGQxYmRhYywgMHg5MzU5N2U3YywKLQkweDk2OWU3NzQ5LCAweDNkZmQ3MzI2LCAweGJjYzI2NDkzLCAweDNhYjAxYzY2LCAweDg3MmYwMWIzLCAweGQ5YzQyZjQ0LAotCTB4NTEzZmRhMDUsIDB4ODNjZTMxZmMsIDB4ZmU4NGYwOGMsIDB4OWI3YThmYzEsIDB4ZWQ3ODQ2ZWMsIDB4MDAxNjViOTEsCi0JMHg2YzdjZjc1YywgMHhlZDY3NjAyMSwgMHg2MmNiNmE1NiwgMHgwYTRmZjNjZCwgMHhkMjIyZTc5YiwgMHhmNGQ4ZTc3MiwKLQkweDRlZjgzZDdmLCAweDI3ODQ3MWVhLCAweDQ0ZDJiZDgzLCAweGQyZmJhZjkwLCAweDNlM2E0MTFmLCAweDQwODQ5OWJiLAotCTB4MDM3ZDgzMWUsIDB4MzM2Y2UxNzIsIDB4ODI4MGZkYzEsIDB4ZDNiMDQxZTQsIDB4YTU1ZmJmMjgsIDB4NjkyZmRmYjUsCi0JMHhlYzBjZjZkYiwgMHg4MmVkOTUyMywgMHg5NWNiNWMxYiwgMHhmZTAyYTc1MiwgMHhiYzViNDBiOSwgMHhjMzNiNzIwOCwKLQkweGJhMjFjNmEzLCAweGUxYTRkY2M3LCAweDA5NjRkYjhiLCAweGMyNzA3YmUxLCAweGRjNjE1YjllLCAweDAyMTRiYjRmLAotCTB4YzVlZjlhZmIsIDB4ZmVlNDBiODgsIDB4Yzg1OWVkYTcsIDB4ZWJhZGZkMDcsIDB4ZGFlNGQ1ZjcsIDB4YzNmNDEyYTksCi0JMHgxZTkxOWFlNCwgMHg3NGRiMzc0NiwgMHhmZjQ0MmJmOSwgMHgxOWFmZTAyMCwgMHhkZTI1Y2VlNiwgMHg5NmZiZjgxOCwKLQkweGNiMDVkOWQzLCAweDY3ZmZkMGI3LCAweDU1MGRlZGYyLCAweDAyYzVmOWJlLCAweDJjYmQxZjBkLCAweDIzNTU3ZGIzLAotCTB4Yzk2MzkyZGYsIDB4Mjc4MmM1YjcsIDB4NzhiZWUwMTksIDB4YzA2NGYwZWYsIDB4ZjJjM2UyZWIsIDB4NmRmMjU4YzAsCi0JMHhkZjNiMzU2YiwgMHg4ZmM3OGU3YSwgMHhmOTUyYjRmNiwgMHg3YzhkMjNmNiwgMHgyZGYyYTU2YiwgMHg4YjdmZjljNiwKLQkweGNmNWZmYWFjLCAweGZmNDJkZjIzLCAweDE1YjdmYzNkLCAweGY1OGM1YmU0LCAweDUzZjBlNDFlLCAweGY2ZDhkYmU1LAotCTB4YzZkZjI4NjMsIDB4NzE3NDlhYjYsIDB4ZGNjYmNmOTYsIDB4N2NhZmQ5OWYsIDB4MDRkZTA2MTMsIDB4ZDkyMWQ0ZmEsCi0JMHgzZjQxOGY2YiwgMHhmNmZlYjk1YiwgMHg4MTlmOGYxYywgMHg3ZGNlNDA3MSwgMHhkY2U1MDNmNSwgMHhlNzJhMTczYiwKLQkweGFjZTA5YmZlLCAweDNiYzViOWNhLCAweGY2OWZjNjA4LCAweGU3MjY0M2E1LCAweDcyYTZlZjE2LCAweDY0N2EwMDRlLAotCTB4NWVmMTZlNzIsIDB4MDYzOGZjYzIsIDB4OGZhYTM2ZjksIDB4YmY1ODIzN2MsIDB4MDdkYWNjMzIsIDB4YjkxZmQyZGEsCi0JMHhlOTk3ZjY4ZCwgMHg1YTE2YmQ5MywgMHhlZjJhMzMzZiwgMHhkZGU1NjljNiwgMHhiYmM5ZmQ1NywgMHhlZjI2MTc0MywKLQkweDQ3Nzk3MDc2LCAweDkwMzBkOGU1LCAweGYwZmE0NmFmLCAweDc0ZTNlYmI2LCAweGQxM2Y4Y2Y3LCAweDk3ZTA3YmZjLAotCTB4NjczYzQ1NTcsIDB4Y2VjNGRkN2EsIDB4ZmUzNGZlMDUsIDB4NTdkMDM2NDQsIDB4MzNlNmMyODEsIDB4ZDdmNDYxNDIsCi0JMHhmZWM0MWQ1ZCwgMHhkNmM4YmNhNywgMHhmMTYwZTE1NywgMHg0Y2FkOTViYiwgMHgxNjZjYWMzZiwgMHg2YmZhMWU0MiwKLQkweGYwYWY4NGRlLCAweGFmNjRhOGJjLCAweDdlNjk5MjQwLCAweDI3ZDU5OWE2LCAweDI0ZTdhOTRmLCAweDg2ODY3YTY0LAotCTB4OTZlNjE2MWUsIDB4YTE3NzdmYTEsIDB4YmZlMDJjNDQsIDB4OWRlNDczMmQsIDB4MmNiNjNkMDIsIDB4Y2I3YmY5OTcsCi0JMHhjMzkyZjdmOCwgMHhkZmMwYWI5ZCwgMHhjMDVlYjI1OSwgMHhlZTM1MzI3MywgMHhlY2JmOGQ1MCwgMHhiZWRlNWU3MywKLQkweGM2ODFmZDBjLCAweDNjMTlmMzczLCAweDMzYzY2NjRlLCAweGM2MzFhODQyLCAweDY2ZDk3ZmI5LCAweGE3MWE3ZTdkLAotCTB4Mjc2Mjk5ZTcsIDB4MjZiYzhiYzIsIDB4ZTBjNTM3N2EsIDB4MmY1ZWI1MWYsIDB4Mzg3MTBlOWMsIDB4OWZiODg5MzUsCi0JMHhjMjg5YzJmNiwgMHgxN2RlOTNjZCwgMHhkM2QzMTQ0ZSwgMHg3MGEyOTIzMywgMHhhZTk1NzkyOSwgMHhmNWZmYmIzNywKLQkweGFlMzM3MGFhLCAweDk2NzdmNTViLCAweDgzZmE3ZWYxLCAweDNlZTcwYTgzLCAweDI3NzBlN2ViLCAweGQyNzI4NDI0LAotCTB4OTVhYjhmMDgsIDB4MTY2ODNmNWUsIDB4YmE1MGE3YzQsIDB4ZmMxMzM5NDEsIDB4MGQ3MTg4YTMsIDB4ZDYyZTkzMDUsCi0JMHg4ZWI4NDNkZCwgMHhlZDU2NGZkMywgMHg4YzcwMjlhNCwgMHg3ZGUyMTMzZCwgMHhmZWFkZGNlMSwgMHg2ZTIxOTc4ZSwKLQkweDllNWJkYzZmLCAweGFmNGVkODRjLCAweGMzZjY2MDk4LCAweDZiMTZkYmY5LCAweDRhYTBlNTA0LCAweDg3NDA4ZDg3LAotCTB4ZjBmN2FlMTQsIDB4YWEwY2Y2N2UsIDB4NjE3NjhjOWEsIDB4M2QwNmUwOWIsIDB4MjJiNjEwMjQsIDB4YWUxNDAzNWMsCi0JMHgyMDI0MmY3MCwgMHgyODA2ZmMzMSwgMHgxZGZmMDIzZCwgMHg4MzA1ZmY1YywgMHgwM2MxNWVlMywgMHg3NTNjODBmZSwKLQkweGQwYmMwMmJmLCAweDBjZWQ1OWZhLCAweDgwOTA4MTJmLCAweDExMjZjOTc4LCAweGQ2NTdiYmY0LCAweGMwMzBkZTBiLAotCTB4ZTExMWFkYWYsIDB4ZmE2N2NhYTcsIDB4NDllMmQwZTMsIDB4MmM1MmJmNDMsIDB4OWE0YWM1ZmEsIDB4ZDc4Y2IyZmQsCi0JMHhmZGFlNjE5YiwgMHg4Y2YzZDAzMywgMHg4OGQyNjRhNywgMHg3ZGZmYTZlMCwgMHgyNzlmM2QxZiwgMHhhNzg4YzNmZSwKLQkweGI2YmMzOWM3LCAweDAwMWQzYzAyLCAweGJiZDMwOGI3LCAweDNkZTE1ZmMyLCAweDIwM2NiNTE1LCAweDljZjA3NTA1LAotCTB4ZWZiOWU4ZjIsIDB4MTUzOGQ3ODUsIDB4MjBjNzQwNWUsIDB4ODllN2RhZGYsIDB4MTM2YzJmOTAsIDB4YmVmNDgwYzgsCi0JMHgzMDczODVlYiwgMHhlYzk3YmYyZCwgMHg3ZmZhYzYzZCwgMHgxODkyZjA0YywgMHhiYTYwYmVlYiwgMHg4YjllODdlZSwKLQkweDdmODJkZDI5LCAweDM2YmEzZmJkLCAweGUxNTFhOWMyLCAweGU3YTcyNmZiLCAweGFmMjM1OTNmLCAweGVmM2QwMTY0LAotCTB4NDljZjkwMTUsIDB4M2NlZWJjN2IsIDB4ZjRjMmJmNmIsIDB4NGE1NjJkODgsIDB4OTFkZDc0ZjcsIDB4YTM3N2IyYzMsCi0JMHhkODNjYWZhNywgMHhmNjBiZTFjZSwgMHhkMDFlZjY4MywgMHg4ODEwYjBhNSwgMHhjMTZjZGMwZiwgMHhjNzljMmYzOCwKLQkweDZhOWZhNjMwLCAweDJiNTZmM2U1LCAweDc2NTM3ODE5LCAweDc5ODdmZGZmLCAweDQ3ZTlmZGZmLCAweDhjMGM3ZTZhLAotCTB4NmRjZDcxMDcsIDB4ZDE1MWJjNzQsIDB4ODNmYjhjZjEsIDB4NmY5ZmY3NmEsIDB4Mzk3MmFmNWQsIDB4NGJhZWY3ZjcsCi0JMHhjNjg3ZTcxZCwgMHgwNzQ4MDRjMSwgMHg4NzhkNTVlMiwgMHhjN2Y4MjIzOSwgMHhlNWNmYTBjOCwgMHhhZTNlOTIwYiwKLQkweGQ2ZTVjMjJjLCAweDFmZmZkYzNmLCAweDkyN2ZhZmJmLCAweDRlN2JjNmUyLCAweGVmZDViYTc3LCAweDAyY2ZhNDZlLAotCTB4NDFlN2UxMzcsIDB4N2Q4NGRmMTMsIDB4M2IxZjUzZmYsIDB4OTEzNmNhZjcsIDB4ZmY2MTEzMjMsIDB4YTAxMzJjOTgsCi0JMHg5MTVmNGZhYiwgMHhlOWY5NmZkMSwgMHg3OTY3MTY1NCwgMHgyNTA3YWJmZCwgMHhjZjVjZGQ3MCwgMHhmNWM4YTE2MiwKLQkweGIzYjQwNGUzLCAweGM3YWU4NzVlLCAweDIxNmUxZTgzLCAweGJmMDg5MWJlLCAweDk1NGZiODJjLCAweGM1M2I1NGQxLAotCTB4NzMzYWY5NDMsIDB4NTIwNmE4NzMsIDB4ZTI0ODk0ZWYsIDB4OTM2ZjAwOWYsIDB4ZWI3ODAyNDQsIDB4ZTI5ODBkZjAsCi0JMHgzZjNiZjlhMCwgMHgzMmUwMTkyMiwgMHhiNjAxZmFhMywgMHgwNjQ0M2NjZiwgMHhiZTA5YmQ0MiwgMHg4Y2M2Njg4MSwKLQkweDhkZWNmZDZmLCAweGM2M2NlOTFiLCAweDNkN2EyMmJmLCAweDgzY2NkZWI0LCAweGZhYTEwNzBlLCAweDEzMDZhOGY0LAotCTB4MzVlMDZiZjEsIDB4YzA2YTg0ODEsIDB4NDNmZTM0NmYsIDB4ZWYzMDhkZGYsIDB4NDBlZmFhNjIsIDB4N2I3MTdlZmMsCi0JMHhmMjBiOGQ2MywgMHgwZmI2MDIwZCwgMHgyZTc5ZmQwNCwgMHhmNWFkOWViYSwgMHgwZTVkZTQ5ZiwgMHg4M2Q2ODE3MiwKLQkweGFjMGQwMjZlLCAweGYwNDlhMDVlLCAweDYxNmE0ODQyLCAweGU1MDUzYWZiLCAweDE3ODA5MzQ2LCAweDA0ODZiNmJkLAotCTB4ODZmZDYxNjIsIDB4YWRkZmI0MmMsIDB4MzY3ZGI0MGQsIDB4M2RiNDVmZWMsIDB4YzlmNGRiZjQsIDB4ZGM4MjM3MWIsCi0JMHhmNmM0ZjNhMSwgMHhiNjNjZWNjZCwgMHgwMGYzYjY5MCwgMHg4MWRkMzRiZiwgMHgwODM0OTVmZCwgMHgxNDE5ZWUwNCwKLQkweGE5N2RiMzM3LCAweDBiZDkxNWY4LCAweGQ3ZmJhZGU1LCAweDlkM2I3ZWUzLCAweDBlOWE5NzhlLCAweDJhNzg1MGZiLAotCTB4MTJjOGQ3ZGUsIDB4NmQ4Zjc4ZGMsIDB4NWZjNDUwZmEsIDB4MjNmODYxMGYsIDB4MWM5ODQzODksIDB4ZGI5ZTc4MTMsCi0JMHhmN2RlYWEzZCwgMHhlNDMwZjMyYiwgMHgzMmVmNDI4MywgMHhlN2VkMDA2NSwgMHhkMzAzYjk0ZiwgMHg5ZjU3NDg0ZCwKLQkweDdkYTdhMDI4LCAweGE3ZWRlMTQ4LCAweGM3OWQ3ZWYwLCAweGZkY2MxYzI5LCAweGVjZDRlOTQwLCAweGUxZTZjZDhiLAotCTB4ZGI2MTdlZDgsIDB4NWE3ZjhjMjQsIDB4ZmNmMDBhNDQsIDB4YTY3OGM2N2UsIDB4YTU3NmJlNmYsIDB4YmFmZTA0MzUsCi0JMHgxMGM4ZTRkNywgMHg0YWYwN2VmOCwgMHhkZWVmN2UzMywgMHhmNzcwZTRjYSwgMHhjZmY0NGVkMCwgMHgwOTkwNjg5ZSwKLQkweDY5YTgyZmRjLCAweDljNWU1MTEwLCAweGJjZjE5NjY4LCAweDQ2NGM3YzVhLCAweDk1YjQ1ZGI5LCAweDFiMDcxZmU5LAotCTB4NDAyN2JmNTgsIDB4MzkzZjAzNmYsIDB4ZDE3Y2QzOTQsIDB4ZmJkYjgxMTYsIDB4ZjZhYjRlNGMsIDB4OWQ5YmExNjcsCi0JMHhiNzcyYWJiYiwgMHhjZmJiYWY4MiwgMHg0Y2I3NTQzZSwgMHhjYTM1OTIwMSwgMHg4ZjJlMGFkYiwgMHgwMmE0YTk0YiwKLQkweGRkY2EzMzQyLCAweDc1NzczODBhLCAweGUzMWE1ZjAxLCAweDNiNTExYzgzLCAweGZjMjBlODA2LCAweGU1NzVkMjE1LAotCTB4M2IwMTMyMmIsIDB4MmJhMGY4NDYsIDB4NmE3ZGU2MGYsIDB4ZWU3ZTgwYWYsIDB4MGY4MmVkZjEsIDB4ZGY4YmJkY2UsCi0JMHhmZjUwODczMiwgMHhmYjliY2QwZSwgMHhkZTVmZDgwYiwgMHg1NTA4MTMzNiwgMHhhMDc4MGUzZCwgMHgxY2Q3MmE3MiwKLQkweGU4NmZjYmY5LCAweDViYWY1M2Y3LCAweGQyODQxMjIwLCAweGJiODQzY2NkLCAweGJkOTlkZjFhLCAweDY0NzFjNTg5LAotCTB4MDQ5NzVlYmYsIDB4ZDRjOTJjZjcsIDB4OGEwNzI4MDEsIDB4ZDdlMjQ1ZWEsIDB4ODI1Mzg5YzgsIDB4YjI5ZmM2ZWYsCi0JMHg4ZGFkYzFmZCwgMHg2YTU2Y2NlMywgMHgzZDdmNjEwYiwgMHhkMWYyNjY2YSwgMHhkODg2NDliMywgMHhjY2QyYjIwOCwKLQkweDBmYjUzNGU0LCAweDY0YjJmZTMwLCAweDQ1MjRiYWY3LCAweDdiMjUwNzQzLCAweGY0ODkyNWQ3LCAweDA3MWUyYWZiLAotCTB4MmJmYjAzNTEsIDB4YjBhMjU3NmQsIDB4MDlmNjRhNzEsIDB4MzhjZDQ2ZWUsIDB4YmY2YTNmNmEsIDB4NmVkNjZlY2EsCi0JMHhmNjk2NWVmOCwgMHhjYzA5N2ZkNywgMHhiOWY5ZDcwZiwgMHhkOGMyZjIwMiwgMHhmYmYxOWY0ZiwgMHgzZmY3MjdlOSwKLQkweDc0MDlkNWNmLCAweDg5YWZiOTVlLCAweGZiOWNhNDE4LCAweGRhZTFmNGMxLCAweDU1MzUwMDczLCAweGRlNzIxNWUzLAotCTB4MDY5ZjExMzAsIDB4YjE3ZmI5N2UsIDB4ZGYwNjlmMTEsIDB4ZGYyOGUzYWQsIDB4ZDc1ZGZjNTMsIDB4MDJhYzg0MjYsCi0JMHgxNTI5OGZlNCwgMHgwMzc3OThkOSwgMHhmZjcyNTc5ZiwgMHg3NjU0ZTU3MywgMHhmMTlhZDNiZSwgMHhmYmUwMGFmYSwKLQkweGQyMDJkOWU5LCAweDk1ZmEwOTAzLCAweGFmYTg4OTAxLCAweGI4Y2UyMDc5LCAweDJmYjU5YjI4LCAweDFmODFlZGEyLAotCTB4ZmUzM2Q3NWIsIDB4MDNjMjcyYTQsIDB4NjFiMmE0NzIsIDB4NmZkNjFlNWQsIDB4N2ZkMDNjMTIsIDB4ZDQzY2UzNmIsCi0JMHg0NTczOGE0NywgMHhjNzRkZTU4MiwgMHg2ZTJhM2Y1MCwgMHg3YzA4OTYzYiwgMHgwZWI2Zjk0YywgMHg4OWNhODFmNCwKLQkweDcxYzgzNzY2LCAweGZlNTUxZjk1LCAweDA1Yzc4ZDdlLCAweDBjN2I4YjEzLCAweDAwNjdlM2M0LCAweGNiZWMwZGYzLAotCTB4NGMyYmUyZDcsIDB4MTk5YTA3YWUsIDB4MTk3MjA2M2YsIDB4NTViNmJlYmYsIDB4MDg1ZTE1ODYsIDB4OWYzZjIzN2YsCi0JMHg1NWY4Y2NkOCwgMHgzY2U2ZWM3YywgMHhiNDVjYTdiOCwgMHgxY2E3YzU4OSwgMHg4MGEyOTg2YywgMHgyNDIyN2QzZSwKLQkweDk3ZDM3ZWUwLCAweDZhZGU5OWJmLCAweDgxMWFlZmU0LCAweDU0M2Y3YmVkLCAweDViZjk1NGJmLCAweDczZmE2M2U1LAotCTB4NGU1NzhjMWQsIDB4YjVlZTE0ZjksIDB4ODY3YWY5MTksIDB4M2JlN2YyZGMsIDB4N2ZhZjdjZTksIDB4Y2U4N2FlOTYsCi0JMHhlZjhmY2E3NywgMHhlNDZhNzU3NiwgMHg0MTI3Y2QyNCwgMHg3MTYyNTBiZSwgMHhhOTVjYWEzYywgMHhkN2JjNTg5MCwKLQkweDYxOWY5ZTBmLCAweDdhY2QxYmZjLCAweDczNGFjOGZmLCAweDZlNmI4YjNjLCAweGNmZWU5MTkyLCAweGY4N2Q5ZmM3LAotCTB4ZjNmOTAyZWMsIDB4N2NlYWY5NDIsIDB4MmY4ZWE5ZmMsIDB4YjNmN2Q1ZWUsIDB4YjE5YmQzOTIsIDB4ZDcwYTZlYmYsCi0JMHgxZmViODUzMCwgMHhiOGMwOWY5YSwgMHgzZTlmOGZiMSwgMHg1M2YwMDMzNiwgMHgzOWQyODdiNiwgMHg5M2IzNTdkMCwKLQkweDQ5Y2U0MTg0LCAweDRhYWZkYzIxLCAweGM2MWY0NTViLCAweDljZTE0YWJmLCAweDNlNWE5ZDFiLCAweDY1M2U3MTY2LAotCTB4OWU5MTM5Y2YsIDB4NDM5YmI3NGEsIDB4ZDJmYjY5ZDMsIDB4YzU4YzFmOWQsIDB4MTFlNThiYjgsIDB4M2UwYTQzOGMsCi0JMHg2MGU1ZjVjZCwgMHg4M2UwNThlNywgMHgxYmM1ODk1MiwgMHgwMGMyZTUxOSwgMHhlODY3M2IwYiwgMHgwNTlmNmRkYSwKLQkweGIzMzYxM2ViLCAweDJkYTVmZDdiLCAweGNkNjZjOGI3LCAweDIyY2Q4NGI5LCAweDFjZjBmNWFiLCAweDE4ZTk0ODMwLAotCTB4ZmNjMjU1ZWUsIDB4ZDVjOWY3YjQsIDB4MmRhZWEzMzgsIDB4YjY5NDRlNGMsIDB4OTYwNzY4YzksIDB4MGRkNmRlNmUsCi0JMHg2ZmE1YTM3MSwgMHgxNWRmZDE5OSwgMHhjNjA5ZmNkOCwgMHg2ZTc5NGZjMSwgMHgwMjUzZmEyYiwgMHhmY2VlYTI2ZCwKLQkweGRlYmM0ZmFjLCAweDg2NmMzMTY2LCAweDBhZDZiMzc4LCAweGY5YTNlZjNjLCAweDg5NmY5ODYzLCAweGJlN2FiNzFkLAotCTB4ZTdiMmIyYjgsIDB4NTIwY2VlZjYsIDB4ZmVmZDk2MTAsIDB4OTdjODE3MjksIDB4NWM5YjFkZDMsIDB4ZjliN2I3MTgsCi0JMHhmYjY1ZTNmYiwgMHhkY2I1ZTdjNCwgMHg3OWYxYmRmNywgMHhjYTE3ZTFhNywgMHg4NjJkMTMzOCwgMHgwM2NkYzZmOCwKLQkweGYzYTQ4ZjUwLCAweDcxODgyOWNiLCAweDk3YWJkMWNlLCAweDAzN2NmZDZmLCAweDZkNzc4ZmM0LCAweGU2MDFiMzNmLAotCTB4YTdlZGZlNWIsIDB4ODg3ZTIwMWIsIDB4N2VlMmIzZWMsIDB4MDhmYTc4MTcsIDB4ZWRhYWRmYzYsIDB4N2VlMTYyN2UsCi0JMHg2MTRmMmQ4ZiwgMHhkYmY3NzJkYywgMHhkNmY0MmY2NiwgMHgxYTQ0ZjdiZCwgMHg2Zjc1OGZjNCwgMHhmYzA5MmFmYiwKLQkweDRlZjY0Yjk2LCAweDkyZWViZjQzLCAweDQ5OTI1MzFkLCAweDRkNDJmZDhjLCAweDE3NDM2ZTgxLCAweGM0NmQzNzEwLAotCTB4ODNkNmMxZDcsIDB4MzFmNGU3MTgsIDB4YmZjODM3YzUsIDB4OTZjYjc4ZGUsIDB4ZWFiZjE2MGEsIDB4Y2Q5NjcxZTEsCi0JMHhmYmQzZTNiMSwgMHhkZWI2NTVjNCwgMHgyMDk1ZmQ3OCwgMHhmZTk5NWJmNywgMHhjYWY4ZGU3OCwgMHg3ZjFlMjgzNywKLQkweDZiZjgwMTc0LCAweGIxMDJmZDU2LCAweGZjMzFmN2YxLCAweDc2ZTIxZTMyLCAweGJjZmJmOGY1LCAweDhmZTNkMTc1LAotCTB4ODBlYjU5NDIsIDB4YzMyYmUzN2UsIDB4MzUzNzAwMTcsIDB4YzU5MjdkZmUsIDB4YmUwMTZkNTcsIDB4YzYwY2ZlZDksCi0JMHhhNmRlMDJiMywgMHhmOWZmNjA3YiwgMHgwZGVlMGQzYywgMHg3MzIzOTQ5YywgMHg1ZWQ5M2VmMCwgMHgwOWUyMWJiMywKLQkweDg5YmVmNzRiLCAweGUzYmRkM2ZjLCAweDEzNDNmNDc1LCAweDRkZGU4NzFlLCAweGRjNTg3ZjdhLCAweGQ5ZDdjMGIwLAotCTB4OTk3MTY0ZTQsIDB4YjcxMGZlMWMsIDB4NzdlMTcxZTksIDB4ZThjOTlmMWUsIDB4ZWNkYjhkNTgsIDB4YTc3MzVlMmYsCi0JMHg2YWQ5ZTk4NSwgMHhkMzQ1N2U1YywgMHgzMWZlM2NiYiwgMHgxNzIxMmY4YSwgMHg3YmVjNzRmMCwgMHg3MGE4MTFlZiwKLQkweDFjMzk3MzcwLCAweDFkOGUzZjhkLCAweGE3MWJkYjE3LCAweGY4MDVmMWNlLCAweDM3YTg3ZDgzLCAweDg3ZTY5OGJlLAotCTB4ZThkZmEyNjQsIDB4MWU0MzEyNGQsIDB4YjhiMjM3NzQsIDB4N2Y1OTZlZTUsIDB4MWY4YTMzZGYsIDB4Y2RiYzhmMTYsCi0JMHgwYmExYTdjOCwgMHhkZjNlNDM4YiwgMHg3YzI4N2ZmYywgMHgzM2YyODIzNiwgMHhiYTljMmZiMCwgMHhjNzJkOGViZSwKLQkweGZmN2NlMGRmLCAweDU5NjdkZjc3LCAweGIzZWYxODI4LCAweDYzZDAyN2ZjLCAweDA1MzFlYjQ1LCAweDNiNWVlMGVjLAotCTB4OGJiN2FmOWIsIDB4OWViYmQ1ZmIsIDB4NzU5ZTMxMTYsIDB4OTQ0MWNiNTUsIDB4NTE3OTQ2ZTMsIDB4YzQ1OGVmMDksCi0JMHgwYjcxZWY5OCwgMHhkOGRiYzNkNywgMHhkZGI1ZDEzZSwgMHg3ZWQwNzIxOSwgMHg0NmVjMGViYSwgMHgzZTZjYWU3YSwKLQkweGUwOWM0MGE2LCAweGFmN2Y5YmNiLCAweGM2MjlmM2IwLCAweDg0NGZiMDNmLCAweDdhZWZmMzM0LCAweDE2NThmZjc2LAotCTB4ZjhmY2NkNmYsIDB4ZTMzZTcxYzYsIDB4NjNkYTA0ZTMsIDB4ZmU2ODEzOGYsIDB4NTk0ZTM3NDQsIDB4M2I3MTQ1YjAsCi0JMHg2OWRlM2ZjZSwgMHhmNDBiNzdjOSwgMHhlOTgzYmE3NywgMHhjNDViYTc4MywgMHhiOWY3NThmYywgMHg2NmZiZTRkZSwKLQkweDc0M2Q3YmVmLCAweDQxNzdjNGJmLCAweDEwMWRlYzljLCAweGZkNDM2NWQxLCAweGY3MzM4OTcyLCAweDQ4NDRiOGFkLAotCTB4YTllZjhjMTUsIDB4ODFlM2M2NTksIDB4MDE0ZGU5N2UsIDB4YWYzOGQ3N2MsIDB4OTVkZjMwMjUsIDB4OWY4ZDVmMDAsCi0JMHgwOWZiNzY0NywgMHg0YTcyYTVlOCwgMHgxNWY4MzY0MSwgMHg0OTQ2ZjI4YywgMHgwNjkwOTEzNCwgMHhmOTljNGJmZiwKLQkweGVmM2MxZWM5LCAweDdjMDEwZjA4LCAweDIxMzhjZDFlLCAweDE5ZWZiZjQzLCAweDQ5ZWY1NGZjLCAweDlkMzI1NTY0LAotCTB4YzE0MTdiZGYsIDB4NGJmNjhjYmIsIDB4Njg2MGZlYmUsIDB4ZmY2ZmIzODEsIDB4YWY3ZmRlNmEsIDB4NTUyYmYzYTgsCi0JMHhjMTQ3MjM5YSwgMHg1ODJmMjEyZSwgMHhkYzQxYmUzMSwgMHgxN2Y3YzU2NywgMHhiOGFjMWIwMiwgMHhiZTNiODNkZSwKLQkweGViZjUxMjdjLCAweDlkODRjZGM3LCAweDg1ZWI1MGZiLCAweDliOTE1ZmQyLCAweGM3NjI3MWY1LCAweDA2ZmUxYjk3LAotCTB4YTYzNDMzZmEsIDB4YTA2ZDE3ZTMsIDB4Njg2ZWMxZjUsIDB4ZDM5ZGEzYjYsIDB4MmM2ZTNkYjMsIDB4NWU4YTQ1ZjgsCi0JMHhjODA2NjdiOCwgMHhhMzNiMjJiMywgMHg5MmU3YTJjNywgMHhiZmI0MzU0MywgMHhmZTU5MDNlMywgMHg3OGExZDZmOCwKLQkweGJiNmNiZmRmLCAweDBmMGNlMzEzLCAweDA5NTVkOGVlLCAweDczZjc1MmZiLCAweDUyZmIwMjc2LCAweGNmNWMwYmY3LAotCTB4MWZiZjg2N2YsIDB4YjQ3YjJmNTQsIDB4NDQyNWM2ZjEsIDB4NzFlZjY4ZjIsIDB4OTU5ZTQxOTQsIDB4ZmMxMDdkZTMsCi0JMHgwNDdjZTFjOSwgMHgzOGI2YWFmZSwgMHhmNTQxZmZiYywgMHgxZjNmNWQ1ZiwgMHhiY2JiOTFjYiwgMHg0MWMxYzc0OCwKLQkweDc4NGJkZWVjLCAweDYzMDNjODEwLCAweDRhZmNiNTNkLCAweDhmN2UzMGViLCAweDQ0NzNiNjk4LCAweDQ4OTQwN2ViLAotCTB4MGVkN2NiMjEsIDB4MDNhNGYyNjIsIDB4NjU2YjVmZWIsIDB4Zjc5NmFmZmMsIDB4Y2ZkNTk3ZWQsIDB4ZDVkMzBlYjcsCi0JMHhmMjU3ZGI1MywgMHhmNDhjNDFmNywgMHhlMDU1YjM3YiwgMHgyZTZmYzFmZSwgMHg0NWZlZjU4OSwgMHhmN2UzZjk4YywKLQkweDY4MjQwOTlmLCAweDliNjUzZDAyLCAweDgyMjVkZjE1LCAweGRmMTBmMzdiLCAweGU3NjE1M2JlLCAweDMwYWVlNTVhLAotCTB4ODdiMjNmYmUsIDB4NWI3MmUzY2IsIDB4MTk0M2RmMTgsIDB4ZjUwMWU3YzQsIDB4OWQyYzRmMjEsIDB4NTZiYmUyY2YsCi0JMHhkZTA0YWNiYiwgMHhjMTc4YTljNywgMHg1NzdjMDNlOSwgMHhmOGYyZmNlYywgMHg4ZTIxYjJlZiwgMHhkNDcxOGVjZCwKLQkweDFjZmMyZjE1LCAweDFjYzJhMGU5LCAweDEwZmMwMzllLCAweDFiMjY2NmQ5LCAweDFkYjdjZjgxLCAweGVkN2UwMzRlLAotCTB4MDk2OWMzOTIsIDB4NTc1ZTczZGYsIDB4YmMzNjYyZDEsIDB4NzFkNmMwMWYsIDB4MGFmZWJhYmEsIDB4ZGVhY2U3YjgsCi0JMHg0N2VkMmNhNywgMHg2NTZiM2NjZSwgMHg1ODVmZTg3ZSwgMHg3OGFkNGI3ZCwgMHg2NzdmYWRhZSwgMHhhY2Y1NzRlNywKLQkweGFmNTdiODJjLCAweGM0YjUyZmQ2LCAweGFkNmI4Yjk2LCAweDRmNzYzZmYyLCAweDVlZTdkMWQ4LCAweDQwZWI1YWUyLAotCTB4OTIzYTYzZDAsIDB4NDk1M2VmYzAsIDB4ZTc5MDZlZjUsIDB4ODdkMzliYTUsIDB4ODBlMDlmODAsIDB4ZWU3N2JkNTUsCi0JMHhlOGZkODM4OSwgMHg3YjQxZWM4MCwgMHgzZWVkNTIxYSwgMHg5YmRhYjI3MywgMHhmZjAwOGQyNSwgMHg4OTJjYThjZCwKLQkweGYxYTdhM2FlLCAweDA0NDFjMjkzLCAweGIzYWQwZWUyLCAweDBkYmRjOTYyLCAweGEzYzIzYjU2LCAweGM1ZjY2MmQ0LAotCTB4MGNmOGQ3YmEsIDB4YzEwN2Q3YTcsIDB4YzZjNzFmZTgsIDB4Yzc1MGZlMDMsIDB4NTA4NzIwM2QsIDB4NzliNzBmMGUsCi0JMHgyZWQ0M2Y1OCwgMHg5YjY1ZWY4MiwgMHhkZWU5Njc2NywgMHhiMTZhOTBjNSwgMHg4NDUzZTUxZSwgMHg1M2E5MDk2NywKLQkweDViZjIzNWIyLCAweDY5NjRhZjFkLCAweDA1OTQ5Njc2LCAweGVhZmZhNWRmLCAweDhhMzE1N2E1LCAweDQ0NGMxMjY3LAotCTB4MzBlMjUwYmQsIDB4YmFhOTc1MjYsIDB4NWM5MjA0ZmIsIDB4MjlmODAxNjAsIDB4ODkyZGMwYTQsIDB4YzhiNTJhNDAsCi0JMHg4MmQyMzZlZiwgMHg1YmFhODNhOSwgMHgyYWE4ZmRlYywgMHg2NGYyNzIwMiwgMHgwNDE3YmJlZiwgMHhlZWJjMjhkMywKLQkweDFjMWZiOTQ2LCAweGU5YzVjODRhLCAweDEzZGZmZjcwLCAweGFmYzBkNmU3LCAweGY5YzJlYWNkLCAweGMyMmFhNTk4LAotCTB4Mzc3NGM1ZTQsIDB4ZDA0MjIzZTgsIDB4ZjRhM2JlNGYsIDB4OWY5ZDUzNTQsIDB4N2Y0OGY0MDUsIDB4MGNmZjcwN2MsCi0JMHgzZjNhMGY0ZCwgMHhhZmU1ZmI5NywgMHg3NGEyMGY0MCwgMHhmYjU5ZGVjYSwgMHg1MGQ1MDkzMSwgMHgyOGY4NDMxMCwKLQkweDEzMjc1NWZhLCAweDlhZDgzZWY2LCAweGRlZDY4OGI3LCAweDZmZTcyYmY4LCAweDcyOGZkYzEyLCAweDNmYTI0MWNjLAotCTB4YjEwNzlhMTEsIDB4MjZiNmYyMGEsIDB4Mzg1Y2RiZWUsIDB4NDliODc0NDcsIDB4YmI0MmY0MTgsIDB4MzRlZDg0ODMsCi0JMHg0ZTk2OGM3NSwgMHg5NWRmZjk2YiwgMHgzYTFhZjM0ZCwgMHg5N2Q0NGY3NSwgMHhjYTgyZjkxYiwgMHgyZGI4YzMzNSwKLQkweGVmZGEzZjA4LCAweDNmN2U4NjY3LCAweGQ5ZmJmNDMzLCAweGMyYWJmNWY3LCAweGU4ZDk2MDI5LCAweDU2MDlmNzg1LAotCTB4Yjg3MDE3NTYsIDB4MWMyY2YxYjEsIDB4YTMzZTE0NmUsIDB4NjIzMzdkZTAsIDB4NzlmOTc5YjIsIDB4YzZkNWMyMzgsCi0JMHhmYTg2NjM2NywgMHg2YzgzYWYxNCwgMHgwN2E3MDhlOSwgMHgyMDQ1ZjZlMiwgMHhkNjI0OTY2ZSwgMHg1NzdiYjAxMywKLQkweGE2OWY2YzA4LCAweDRkMGUwNTNmLCAweDIwYjZlMjNiLCAweGM3YzdkZTFmLCAweGY0NjM2NDE5LCAweGVmNWJkZWFlLAotCTB4ZTc4YWRmNWIsIDB4NWJlYTdkMWEsIDB4OGI2ZmFiZmIsIDB4ZGZkOWRmNWQsIDB4ZTczMWVjN2MsIDB4NGNlNTQzZjMsCi0JMHhmZTZmMGJlNSwgMHg3YjYxY2UwOSwgMHg4MjliOGRlNSwgMHg2ZjI3NDczMiwgMHg5YzI4ZDkwNiwgMHg3ZjhmZTIyYSwKLQkweDk4NWY4OWRiLCAweGEyMTk2OGRlLCAweGU4MGQ5ZmM3LCAweDZkOGZkMjk1LCAweDExYmJmZTg0LCAweGNiZDFmZGVmLAotCTB4OWEwZWJlM2MsIDB4NzVkMmE0NzcsIDB4M2Y4Zjk0ZmQsIDB4NjM5ZDg5YjUsIDB4Zjk4NGI2ZGYsIDB4ZTdiOWE4ZGQsCi0JMHhmMmI3ZmE4MywgMHgxNGI1M2ZmYSwgMHgxOGUwZmZhMSwgMHhiNmU5MTc3ZiwgMHhkZTE3YTY3YSwgMHhlNzg4YWY3NiwKLQkweGZkZGU3ZGNkLCAweGZmMjg1ZjgxLCAweDA4NTRiZWRjLCAweGJkNjNkMzg1LCAweGUwOWE0NDYzLCAweDNlNWNkNDdlLAotCTB4MjA1ZGYxYmUsIDB4YWRlNGYxM2YsIDB4MGJiZDYzMTEsIDB4YmQ0Y2U4YzQsIDB4NmY3YzY1NTcsIDB4ZTAyOTIxNjAsCi0JMHhiZmU5M2RlZiwgMHg5MWJhYjI2ZiwgMHhkNjFlNDEwZSwgMHg0YmVlOGU4ZSwgMHg4ZTk0NzVjMSwgMHg3NGE0OWY0MSwKLQkweDcwZWNlNzBjLCAweDNjZTMwNjNkLCAweGYzOGIwYTVjLCAweGU3OGExOGU4LCAweDNiM2NhYTYzLCAweGUxYzRmMWViLAotCTB4ZDM0ZGVhZmUsIDB4NzhiODE3YmQsIDB4NWUzOTI3YmMsIDB4NzNhNWFmMjMsIDB4MmI3YmRkMzYsIDB4MDUzN2IyMzUsCi0JMHhlZTdjOTVlNCwgMHhhNmExZTIzMiwgMHgxZThkNDJhZiwgMHhlYTljYTY4ZiwgMHgxMGNjYzhhMSwgMHgyNzcyODRhNiwKLQkweDljODEwYTQ1LCAweGE0MDVkYzkzLCAweDk5NThmNDA4LCAweDVmNWFhN2QxLCAweDU3YWNiYzQ5LCAweGZlOGQ3YzZmLAotCTB4ODc4ODAxYmIsIDB4M2JlMmU1ZDIsIDB4ZDcyOGM5M2MsIDB4ZTAwYjA1ZWQsIDB4ZjVjYWU4OTMsIDB4ZTk3ZDFkZmEsCi0JMHhhZDk1YjgyMSwgMHg5ZGQ2MDZiYiwgMHgzNTNkNzdkZSwgMHhmYThiZDc4YSwgMHhmN2RlODRmMywgMHgzZjMwMmM2OSwKLQkweGQzNzllY2QxLCAweDBmZmJmMzAzLCAweGE1MWY4MDk5LCAweDI3YmM3YzJmLCAweDY3N2UxNDQzLCAweGRlMzE4MzQzLAotCTB4M2U5YjhjNDMsIDB4ZGY1N2M2MTIsIDB4OWQ1MzVjNDUsIDB4MmJhZGU3ODIsIDB4MmI4OTdiZjgsIDB4ZmU2MTQ3YWEsCi0JMHhlNTllZmU3ZSwgMHhhNjBmNmFhYSwgMHhkZTJjZmMyYSwgMHhjZmM3N2M1YSwgMHg2ZmY1ODIzMiwgMHgyNGZjNzM3MSwKLQkweGZjN2MzODlhLCAweDUyNTkyZmE4LCAweGQwMWNmMGFhLCAweGMzMGFhZWVhLCAweDA4NjQ1OWZiLCAweGRhNjAyN2RkLAotCTB4OWY4NDVhZWUsIDB4ODdlODI2ZTIsIDB4NmYzMWY1YTQsIDB4ZTU0ZDNjODYsIDB4MGY4OGQxZmEsIDB4OGE0NTVkYzksCi0JMHhkZGJlNzk2OCwgMHhjZGMwMjBmZiwgMHg3YmE0MTllYSwgMHgzMjljZDAxZiwgMHgwM2RmN2JlYywgMHhmNWE3YTVlYywKLQkweDcyMjYyZTRjLCAweDI3YzIzMjdhLCAweDY1ZWY2MTUxLCAweDlmZDQ3NGFhLCAweGUzYzM1NTVlLCAweGY2YWUxZjc0LAotCTB4ZGZjMzVhNjIsIDB4Nzc4MWFhODEsIDB4M2Q0ODE0N2YsIDB4ZWRjODFmOTgsIDB4NDcwYTFhYzQsIDB4ZGYwOGZlZjgsCi0JMHg3M2FhNmIzNywgMHg5NzJjZmNiMSwgMHhhYWE2ODk1NywgMHgyNWMwMzJmZCwgMHg2NmZmMzA4MSwgMHhjOTBjOTA2MiwKLQkweDE0MDQyYzIxLCAweGM0ODI1MjdlLCAweDljZjU3OTAzLCAweGU2YzY5ZGQwLCAweDc0NDFlOWNkLCAweGRjNzc4NjRiLAotCTB4NWUwMDhmM2MsIDB4MjZjYjBlZWEsIDB4NGI4YjkzZjAsIDB4NjgxZjI1YWYsIDB4ZTU5YzU5ZTgsIDB4OTliZjA3OGIsCi0JMHhiMDBiZjBlOCwgMHg3ODAwM2RmZiwgMHg0NzU5ZjNhNSwgMHg5NmVmODVlNywgMHhjOTU4N2E3MiwgMHhkMzlhYmVmMSwKLQkweDFmNDA3ZGMzLCAweGQzOTA3ZDM0LCAweGZhZThhZmM1LCAweDY1ZTM1ZjIxLCAweGU2ZDYwMWY3LCAweGM0Yjc3OGIzLAotCTB4Yzc3ZjEzMGMsIDB4ZjFiNDRjMmMsIDB4MTZkZWYxNjQsIDB4MjI3NWQwYTIsIDB4YzUzMDdhOGYsIDB4NWJjOGVhNzcsCi0JMHhmYjE3YTQ2NiwgMHhhMTEzZTI2OCwgMHg0M2JiYWRmYywgMHg4MmM5MWRlYywgMHhlMzM3ZDg1NCwgMHgyNzIzNzdkNSwKLQkweGUzNjdlMjdhLCAweGM0YjBkNTQ1LCAweDk5MTM3M2RmLCAweGYzMTFkMWRkLCAweGVmMWFjNjdkLCAweGVmZDgwYjAxLAotCTB4ZWVjN2NkZmQsIDB4YTRhZmE1ZjUsIDB4ZDllYmQ5ZTMsIDB4ZmUwMWM1YmQsIDB4Njg4YmQ5ODIsIDB4ZjU0ZjUxZGUsCi0JMHg4Y2U1MDI2ZiwgMHhkZTc0MWQyZSwgMHhjNjdkMWE0NSwgMHhiZmZkOGZkZSwgMHg1MWNkN2VkNCwgMHg3YmU3YzUxYiwKLQkweGU0NTE0MWIwLCAweGI4N2ViYWZmLCAweDYxNGJlMDE1LCAweGM3M2YwMWVkLCAweDJhNDE3MmMzLCAweGYxYzNmZmYwLAotCTB4ODczNWZkYjEsIDB4ODNkMjMyNmQsIDB4MWQzMmZiMmIsIDB4M2VjOWQ3M2QsIDB4OTg5ZWU3NmMsIDB4M2FmYmEzYTksCi0JMHhhNjEyNzcyZSwgMHg1NzdkZDA0ZSwgMHg2ZGVmY2NlNSwgMHhiMTJlZWY0YywgMHhiY2MyY2ZmYiwgMHhjNWQxY2U5MiwKLQkweGJjNGE3ZTUxLCAweGE5ZGNiNjIxLCAweGRjMjA5NTkxLCAweGMzMTlhZmRmLCAweGE2NzA1Y2U0LCAweDNlYWJmNGMyLAotCTB4YTdjOTg0NzIsIDB4NmYzMmU0YjMsIDB4NjQ1ZjQzNTAsIDB4ZjAzZDQxMTQsIDB4ZWU4YTk5OGIsIDB4YzAzNWMxZGQsCi0JMHg3ZTVlOTQxZiwgMHgwNTdlZTljZCwgMHhjNTRkMDFmMCwgMHg0ZGQyMGExMSwgMHhkYTEzNzRjMiwgMHg1ZjM4YWJhOSwKLQkweDY4ZjljZmRkLCAweDg3YTNlNzJkLCAweGMyNDY3ZjgwLCAweGRmOGNhZTNiLCAweDA1MWRlMjI0LCAweDhiOGQ0OGZiLAotCTB4YzAyNThmYmQsIDB4OGQ0OWI0ZmYsIDB4ZTg1Y2ZlNmQsIDB4YjMyZGU2YWYsIDB4MzUwZmU3MDAsIDB4MTE3NTJmOTIsCi0JMHg5NzdlMjllNCwgMHhlZjhmMzA3YiwgMHhlZGViMDZlYSwgMHhiYmYxNTg5ZSwgMHg5MjkzZWQ0YiwgMHhjOTVlMTRlYywKLQkweGRmYmY4Njc2LCAweGZlMjE2N2Q0LCAweDMxNmY2ZTJjLCAweGQ4NzI0YmFjLCAweDE5YWZhZWQwLCAweDY1OGUyOTY5LAotCTB4YmRlY2Q4MWYsIDB4NTNiNzRlZjAsIDB4OWZjODBmNzgsIDB4ODE3ZjZiZDAsIDB4NjY2ZWExN2IsIDB4MzdmZGMyMGUsCi0JMHgwNjM5OWY3MCwgMHgzM2IxOGNmZCwgMHgwNDg2NDA3OSwgMHhmZjBkMDhjOSwgMHhkY2Y3ZjFkNywgMHg0NjQ4Mjc4OCwKLQkweGYyYzBlNDY5LCAweGY4MDhmMzhiLCAweDdmZjJmYTc3LCAweDEzNmZmMjNmLCAweDAyMzU3ZjkzLCAweDc4MGM1N2RmLAotCTB4NTUzMWY3NTUsIDB4ZDc4MDQ5ZmUsIDB4YjllNzdkMDEsIDB4ZGQ1Y2EyZjIsIDB4Y2I5OTdiM2QsIDB4M2NiZDYzNmYsCi0JMHg0ZjlkOWRiYiwgMHgyZmM0NmYxMSwgMHg3MGE3MmRmNCwgMHhjZTZiYjNjYSwgMHgwOWM0OTQ5NSwgMHg1ZDk1ZWZiZCwKLQkweDQ2MWQ2MzE1LCAweGY2MTI3N2I5LCAweDkyMjU5MDNmLCAweDU5MDVkZjFmLCAweDE5MWU3OGE4LCAweDhmZTRmMjBmLAotCTB4M2ZhNWZlMmMsIDB4YWYxZDQwZmQsIDB4ZWUzMTVjZTgsIDB4NzJlNzg1ZjMsIDB4YWUyOTlmNzEsIDB4MjBmZTQ1Y2YsCi0JMHhkOGQ3OGRlMCwgMHg3ZTFhMjc0OSwgMHg5ZGJjMDJlNiwgMHhhM2U3ZTdhOCwgMHhlMjA4NzIwZCwgMHhiYzZmZjY1MiwKLQkweDE0ZDlhMWU3LCAweDg4MzcwYjllLCAweGQ3ZmVmZWVjLCAweDZhMjc3ZGRmLCAweGI2NDgxYmUyLCAweGY1M2FmNTA3LAotCTB4YTExM2I0M2QsIDB4NzNkYTVkM2IsIDB4NThkZmMyZWMsIDB4ZjYyZmEwN2QsIDB4MzYxNGNmYjcsIDB4NmJkZmI2YzQsCi0JMHg1M2QwNTdlMCwgMHgxZTgwMWYyOSwgMHg0ODgxZjU0YSwgMHg1Zjg1ZjQxOCwgMHgwOGJkZjE1YiwgMHg2OGRjMWYzNSwKLQkweDU0MGVmOThmLCAweDE5NWE3ZGJlLCAweGRkYmU2N2QwLCAweGM0YTQyNzc3LCAweGZhZmU4MDkxLCAweDhlYTFlNmZlLAotCTB4YTY3YzFjN2IsIDB4MjhmNjRlNzAsIDB4NzBhNWIzOGYsIDB4OWZmM2E5OWYsIDB4ZTNiMjczYjEsIDB4MmM0MjFmZGMsCi0JMHg3OGRiOTRmZCwgMHg3MjlmYTdiOSwgMHgyMTY3OGIxNywgMHhlYWU1ZDhlZSwgMHgzYjcxNGU3YywgMHg3YjQ2ZTE3MCwKLQkweGZkOGM3OTY4LCAweGVmYmYyMTdjLCAweDQ3OWY5MGI3LCAweGQ1M2ZmOGE4LCAweGJhMzEzN2FiLCAweDNmMmZmYjUxLAotCTB4ZGZlMThhMzcsIDB4NTNjMjY3NDAsIDB4M2VhZTkwNjMsIDB4N2ZhMzI0M2QsIDB4NGFlYTc4NGQsIDB4ZjJhNTJmN2MsCi0JMHg5N2ViMDU5YywgMHg0MTVmZGU4YiwgMHg0ZDc5MTYxYywgMHhmM2JiYmE0NCwgMHg4NzNjMzhmMCwgMHhjM2JjMzJlYSwKLQkweGI3ZjM4N2I4LCAweDJiOWUxNjlhLCAweDg1OTllOWQ1LCAweGVjMGEwNWExLCAweDJhZTc4NWNiLCAweGRlMjExZTkxLAotCTB4MTM5N2VlMTEsIDB4OTM0YmY2ZjIsIDB4MTM1NzRlMjQsIDB4Njk5MWZkYTAsIDB4YTJiZDY5Y2IsIDB4NjRiZjQ2NGUsCi0JMHhmZDEyYjA2MiwgMHhlZjc2OGQ4NCwgMHhkYWU0MzFmZCwgMHhlNzQ3YmIxZSwgMHgyY2VhMjgzNywgMHgyMzg5ZmVjNywKLQkweGU3MzUxMjQ4LCAweDdiZjkwYmY1LCAweGQ4ZTc0NWUxLCAweDFkYzQ4NDdiLCAweGNmNDAyOTI0LCAweGU5NDRkZTVjLAotCTB4NmM2ZWZmNTIsIDB4Y2JlMTg5OTcsIDB4Zjg1N2RlYjgsIDB4NWRlOTVmM2EsIDB4ZDY3ZTg0ZWYsIDB4NWViNjYzZmIsCi0JMHg3NTE3Y2ZiZSwgMHhmNWQ2MWFlNiwgMHhkNmIxZjFiYiwgMHg0NGNmNWQxNSwgMHhkZmNlNWY2YywgMHgzMTM3MmRmOSwKLQkweDlmZTVhYmJjLCAweGY0ZDVmMWYzLCAweGI4MmNmNTc4LCAweGY4NGE0MzYxLCAweGExODU5MDNiLCAweGZmNzgxNTNiLAotCTB4M2UyMWIwYTgsIDB4YjNhY2QwNDEsIDB4NWQ1NmZlYTgsIDB4ZmQ2MTQ5NWMsIDB4YWFmZjdjM2MsIDB4MzI5ZTYxYTgsCi0JMHg3YTQ3MjM1ZiwgMHhlY2ZjMTRmMSwgMHhhMjIzNDlhNSwgMHg4MWZjZmE3OCwgMHgxZGNiNjk5ZSwgMHgxYzE0YWZiMCwKLQkweGZlM2IzZTAzLCAweGU3OWNjNTY0LCAweGYwY2JmNDA5LCAweDhlMDk1Mjc2LCAweDcyYjk0MmFkLCAweDNkZDYyYmE3LAotCTB4Nzg4ZGNmOTQsIDB4MWI3OGU3YWIsIDB4MzVhMzI0MTEsIDB4OTdjNTQ2NzIsIDB4NGRmMWZkYjEsIDB4ZjljMTc3NjUsCi0JMHhlY2Y1ZjFmNCwgMHhlNWZlOGY3NSwgMHgxYTdjNmM0YywgMHgzMDc2ZThlMSwgMHg3MWU5YTlmOCwgMHgyZmZiMmZiYSwKLQkweGViOTc4ZTA4LCAweDg1ZmE5YmUyLCAweDBhYmZjNzIzLCAweGQ1M2JmNTI3LCAweDFjMGVhY2FiLCAweGEzN2JiMDk3LAotCTB4MDQxN2I5ZjUsIDB4OGNmOGU4YmYsIDB4YmUyYTRlM2UsIDB4N2U0MWViOTEsIDB4N2MwOTM5NTEsIDB4MDdjOWVhN2EsCi0JMHhlNWRiNmFjNiwgMHg4NDBkMjdkYiwgMHg4NWVkNDg3MSwgMHg2ZmRkOGY5ZCwgMHhmZDQxYTdmNywgMHgyMWVmNjRlMCwKLQkweGQxNWJjYTBmLCAweDVkZDc0MzViLCAweDc3NjhmNzEyLCAweGRmYWI1NzE4LCAweDkzNTY1NmJmLCAweDRhNWZjMTJiLAotCTB4YzEyYjg3ZWQsIDB4MDViNTQzNmYsIDB4ZTZhOGEzZDQsIDB4ODQ3ZDA1ZTAsIDB4N2FjNWYxNTYsIDB4ODM5MjZhMTcsCi0JMHg1NjU2YjNmOSwgMHg5NWJmYTE1NywgMHgwZGM0ODI1OCwgMHhmOGMyM2Q3ZSwgMHg0MmNjOWM5MiwgMHhkMGU0OTdmZiwKLQkweGVjOGEwMWViLCAweDRkYmY4Mzc3LCAweDY1OTFmN2UxLCAweDNkMjZiZmM5LCAweGM0ZDllYzFiLCAweGJlMDZhMDhjLAotCTB4YmM1ODM5NTcsIDB4YzU5NGRhYzQsIDB4Yjc0Mzg4NDEsIDB4Mzg3MTlmODAsIDB4ZWFjZTM3ZmEsIDB4YTUxN2ZiZWMsCi0JMHhkZDI4MDM4NSwgMHhkYTdkY2ZhOSwgMHhlNWNiZTg0NiwgMHhmZTgyMTZjNCwgMHhiYmY0ZDFiNCwgMHg3NDg5MWU3NiwKLQkweDRjN2RiYWRlLCAweGUyYzkxNzBmLCAweDg5MGY3M2MyLCAweDg3MTViZjcwLCAweDcyODJmZDA3LCAweGMzOTczNTc4LAotCTB4ZGMyZWVkY2IsIDB4NjQ1ZDU2N2YsIDB4OGVhMGZiNDIsIDB4MGI3ZWMzZmIsIDB4OGI4NDMwN2UsIDB4ODQzMjc2ODQsCi0JMHgyNTdkNDBkZCwgMHhiMGViODgyZSwgMHhkMDQ0N2FjMiwgMHg3Nzk4YzNkYiwgMHgyMjMyOGJjMiwgMHg0MDI1YjEzZSwKLQkweDA0Nzg5ZTNlLCAweGUxMjAwZmM4LCAweGY2ODdhMDU1LCAweDBiYmNlYTRjLCAweGZkNThhN2JlLCAweDVmYmYwMWIzLAotCTB4MTUxYzc2YTQsIDB4ZTA1YTBmYzAsIDB4NWNlMDA0YmYsIDB4M2MzMzA2MmYsIDB4NjJlM2ZlYjQsIDB4YTVlYTAzMjQsCi0JMHgxMmI3YTJkMSwgMHhjNDExN2E1OCwgMHhlNzM1ZmI0MSwgMHhjZTFkZWMyYiwgMHg5YmVjNWU2OCwgMHg2NGE5NjhiZiwKLQkweGZhZjg2ZjM4LCAweDJmZjk2ZDEyLCAweDA3NjJiZWFjLCAweGY2NTZmYmVjLCAweDA3ZTI0ZDdlLCAweDlhYjljYTAyLAotCTB4MDE3NzNmNWUsIDB4NzFhOWRiZGUsIDB4ZDIzZDdmMzAsIDB4MjFkNWQwMDUsIDB4OTU5ZjRmYjYsIDB4ZTgwOTcxM2MsCi0JMHhmNTk1MWIzZiwgMHg1ZTFlNmVhMiwgMHg3NmUyNWU1ZCwgMHg1M2E1MTM0ZCwgMHhmNGFiOGJmMCwgMHg5OWYyNDIzMSwKLQkweGFlMmU4ZTgwLCAweDc4YjVkZmE1LCAweGMxNWZhMThjLCAweDM5ZmEyMzM4LCAweDQ3ZTc1MDRmLCAweDE1N2E0NWM3LAotCTB4ZmRiMGU1Y2YsIDB4N2IwZjQwZDYsIDB4YTBmZjM2MDQsIDB4MGZlY2NlZDUsIDB4YWYwMTE0MTIsIDB4OTNjMjU1YjMsCi0JMHgzYzdjYjA1NiwgMHhkZGYwN2Y1MSwgMHgzZjU1YjdjZiwgMHhmMmMxNTkzNywgMHhjYzBiOTY2ZSwgMHhjNjZhZTc2NywKLQkweDVmNmVjY2Y5LCAweGU1ZmUwMWRkLCAweDBiYTllZGQ5LCAweGI2NjU5Y2UwLCAweDIwOGZmMmU1LCAweDBlNDcyM2RkLAotCTB4ZmM0ZTQxZDgsIDB4ZjlhM2JkOGMsIDB4Y2EyZjIzZDMsIDB4YmM3NzhhMjAsIDB4NDNlZjExYjEsIDB4NzFmOWNlM2YsCi0JMHg4MGM4ODkwZSwgMHgyYjcxM2Y3ZiwgMHhjMjFlNGZjYywgMHg1ZTI3Y2RmNSwgMHhjMTkxNmY5ZSwgMHgxYzJkYmQ3ZSwKLQkweDlhM2FmOWJhLCAweGQwYzVmZGJiLCAweGNkNWE2MDc1LCAweDA5NzkxNDM5LCAweDcxNmZlNmQwLCAweDVhMmZhMWU3LAotCTB4N2RlNmQ3NmQsIDB4YmI1OWU1OTksIDB4ZGZmODFjMjgsIDB4YjgyYzkwYzEsIDB4MmRiYWU4YWUsIDB4OWQ3NTA3MDgsCi0JMHhhM2UyMjZiNCwgMHhmZGZjNGUxNywgMHhiZDJlMTUyMCwgMHg3YWRmYjZlYiwgMHhmYjBiZjgyZCwgMHgyZGIzNmY5MywKLQkweDcxNjIzZTYzLCAweDQ2NWU2Y2I5LCAweDQ1MDY3ZDM4LCAweGMzOTE1ZWYwLCAweGYyZTgwN2I3LCAweDFkYWY4NzYxLAotCTB4MTJkY2E0ZjgsIDB4MjE4NjkzNDksIDB4NWYyMTg0ZGYsIDB4NGEyZmZhMjksIDB4NzhmODcwYTIsIDB4ODE5MmZmYTgsCi0JMHgwMThlOGYwMCwgMHhiZTY3YTQxNywgMHhkNWZjZTljYSwgMHg4M2Y3ZGVmNCwgMHhiZTk5ZDExMywgMHg2NmMxZjk4NiwKLQkweGI1NWI3YTcwLCAweDliOGM0ZGUzLCAweDdiMzBmOGZjLCAweGY0NDJhOTBmLCAweGZhMGY3ZjVjLCAweDRiMTI0NGJmLAotCTB4NTdkMzU1ZWYsIDB4MmRlNjFmYjksIDB4OWQxZjdhODcsIDB4YzQ4NjczYWQsIDB4ZDVhMzNkZTAsIDB4NjY3YWY3OGUsCi0JMHhmZDNhOGI2NCwgMHhjMGI2NDY3YiwgMHhjNjNhZDdlMywgMHg0YmQzYTRkZSwgMHhlZWJhNzA1NywgMHgxMWM0MGZkYiwKLQkweGIwNTlmYjE4LCAweDU1ZGEzMjc0LCAweDI0ZjcxNTNiLCAweDBkYzFmZjkwLCAweDRjMTZjZThjLCAweDY3MTA4OWY1LAotCTB4ODA4ZDYxM2MsIDB4MWZmMTg4ZmUsIDB4ODc5MDEyNzYsIDB4MDllMmVhMGIsIDB4YjgyZjgzOWMsIDB4YmMxNjcxN2IsCi0JMHhlMWQ5NTA5NywgMHgzOTA0ZWI2OSwgMHhlMGJjMTIxOSwgMHhlZjE2NGI0NywgMHg5ZDI1ZjhjOCwgMHhkODA3YzNkNywKLQkweDNiZjkwYzNlLCAweDlmMGU5ZTYwLCAweDJiZjFhMWM3LCAweDE5NTVjOTc3LCAweGRiZWJhMDZlLCAweDBiOTAzZTFkLAotCTB4YmRmMjZlZjMsIDB4OTIyZDc4MGQsIDB4NzZiNWZiYzIsIDB4M2NkYmJjYzgsIDB4ZjMxZjQwYjksIDB4NGMzZWFjNWEsCi0JMHg1MWIyNDQyZCwgMHgyMjRmMzZiOSwgMHgxNTkzNDgxNiwgMHhkZjIxNTkyMiwgMHhlY2U3ZDRmZSwgMHgzYmFkODZiMCwKLQkweGVjMmM0NmQ5LCAweDgwYWZlMWZiLCAweGFjZGYyZTRlLCAweGE2M2RkNmU4LCAweDUxZmY5ZjQ1LCAweDExOWYzZTliLAotCTB4MGViM2U3ZDYsIDB4ODBiN2YzZTksIDB4ODdkMWEzMWEsIDB4ZTc2NWVjMGUsIDB4ZDg2NzY1ZGMsIDB4MDVlN2MxM2QsCi0JMHg3ZmMwODNkOCwgMHgzN2I5NDY2YSwgMHgwNzNkYWNhNSwgMHgzY2NmNGRjZSwgMHhmOTQxMzRlYiwgMHhmZDk4NmY5ZSwKLQkweGM1NjJkOTE2LCAweGJmZjZjYmY3LCAweDQ0YjYyMzYzLCAweGJhZDRjNzc4LCAweGQ4Y2ZjYTExLCAweGZmYzA3MjVhLAotCTB4ZmM2M2ViNDQsIDB4NDczNWRkMDMsIDB4ZjNiMWZkODIsIDB4MGNjZWQ1MzIsIDB4Y2VjNDljNjEsIDB4N2I5YzU5NmYsCi0JMHgwNDM5OGI2NCwgMHg3NjY3YjFlNywgMHhkMDJjZjUzZiwgMHg4MzJkOTlkZCwgMHg1ZTc5ZWY1MSwgMHhkZmEwOWEwOCwKLQkweGFmMGM3ZGUwLCAweDlkMmU2YzEzLCAweGFjZGIyOWZjLCAweDM4NDZlYmI3LCAweDczZDUzZTk5LCAweGYxMGI5OTRhLAotCTB4ZWJkNDk3NGYsIDB4NDg2OTdkZDcsIDB4NjRlZDFmOWYsIDB4ZDEzZTY3ZjIsIDB4NzM4NzRmN2MsIDB4MTRhYWNmNjYsCi0JMHg0ODI3OGJhMCwgMHg1OTgzZmJjYywgMHg5ZjdmMjY0ZSwgMHhlZDUxNWE3ZSwgMHgzM2JmOTE2YywgMHhkMTQ5M2M0NiwKLQkweGEyN2I0ZjdiLCAweDA2NGIzZmU3LCAweGMwMDAxYzQzLCAweDdiZjQ1ODYyLCAweGI1NWM2MTk5LCAweDdjYjk2ZmZmLAotCTB4ZmE3ZWU0NGYsIDB4YzIyMmFiYzgsIDB4YjE3NTc0ZTcsIDB4NTdiODljZWUsIDB4YTZmNmFkM2YsIDB4MzNlY2Q1NGMsCi0JMHg5M2ZiZjU4NSwgMHhiODVlYTFlNiwgMHhkNmJlNjkzZiwgMHgzMDcyZGIyZSwgMHg3Mzg4NTZlOSwgMHhkZmUxMmNkOSwKLQkweGZkOWYyYTRmLCAweDEyMTM0M2U0LCAweDAyZDhiYmUxLCAweDFmNzI4NWYzLCAweDJmMmQxZmQ4LCAweGQ1MWVhMGI5LAotCTB4NzFiNTMzM2YsIDB4ZTNmNTQ1MjMsIDB4ZjY2YWE2NTIsIDB4OTc0YTFmZDcsIDB4YmI0YWVmYmQsIDB4ZTU3NjdjMTksCi0JMHgxZDc4ZGMxNiwgMHg4MzU5NzdjNSwgMHg2NTZhODVlOCwgMHhmYmZmMzcyZCwgMHg4MzdiODAxOCwgMHhjYjVjZjc4YywKLQkweGJlZjhjOWI3LCAweDBhZjFhMDc5LCAweDM1OTQxM2Y0LCAweGVmODc5ZWJmLCAweGU3OWZhZGU4LCAweDQ4ZTU3OTg1LAotCTB4NDRjYzQwYTQsIDB4OTA0ZGMwZDcsIDB4ODFkZjZjOWUsIDB4ZmQ5NWQ1ZWYsIDB4M2M5MTRlYjUsIDB4N2QzZDVmMzAsCi0JMHgzZjQzN2E1MCwgMHg3MjgwZDUxNywgMHhmMDFlMDA2ZSwgMHg1NGY4YzMyZCwgMHhhZTExYmJmNSwgMHg3YjdkMjEyNSwKLQkweDE3ZmViZTIzLCAweDMzZmEzN2E3LCAweDYzNzc4YjRhLCAweDgzZDMwMWJkLCAweGNhNDg3N2Y4LCAweGEzYjk1Mjk3LAotCTB4M2ZjYTJmYjEsIDB4MzhmOGM1YWMsIDB4NTQyODM4ZTMsIDB4YjBkMGU3MzUsIDB4MWY5MDc5N2YsIDB4MjcxZjdjYWQsCi0JMHhjNzg3MjU4MiwgMHg3OTY3MGU4ZiwgMHhlODBmMzc3YywgMHgxOTdmZDYwYiwgMHhmYjgxZWE5OSwgMHg3YzkwMzc4ZCwKLQkweGMyMTc5ZjQ4LCAweGUzMjI4OTBmLCAweDZjM2JmNDZiLCAweDc3NWYyM2I1LCAweGZjOWYzYmI5LCAweGYzNDNkMDFkLAotCTB4MThjNzNjMTgsIDB4NzY3YmVmYzQsIDB4ZGVmOGMyNzksIDB4MGZmN2ZhYTAsIDB4NWYyY2RjYmEsIDB4ZjhjNTZlZGEsCi0JMHgyYjFmMzM4YSwgMHg0MTk2Y2YyOCwgMHg3ZmQ0MTc1YywgMHhkMTMyNmFkNiwgMHhiNmNjZTY3ZCwgMHg0ZTIxOTMwMSwKLQkweGJkODVhYmIwLCAweDY1YmE3YjJmLCAweDdiZTU2NGMwLCAweGZmMjM0N2Y2LCAweDMxZDZmYmFhLCAweDZmZWU5NWY4LAotCTB4MWI3ZDM4NGYsIDB4MTVkZjAwOWMsIDB4NzkzMjhlMmMsIDB4NTU0NjU1NDAsIDB4ZWRhOTNjMGMsIDB4MGNhYTk1MTIsCi0JMHhiNzIyMWZiMCwgMHg5OTFiYmMzYiwgMHg3MjBlOTNiZSwgMHgwNTNmYWNmZiwgMHhkYzc5ZjllZCwgMHhhZTM3YjE3ZiwKLQkweGQ3ZTgxOWUwLCAweGU4ZmFlYjQ5LCAweGUyNDM4NGJmLCAweDBmYWZhMDQ2LCAweGVlNWRlZjQ0LCAweGI1ZjNkMWUxLAotCTB4YmM3ZWQ5ODUsIDB4MzA1NjRhNGYsIDB4NDQ4MTY2M2IsIDB4NGZkNTEyYzIsIDB4MWZiYzgwMTcsIDB4ODM5NDc5OGIsCi0JMHg4YzA0MWEwYiwgMHg1NmI4NWEyYiwgMHhlZjc4MWViZiwgMHgwMzc3ZmI1NCwgMHg1ZTJmZTE4YSwgMHg5MTM4ODcwZCwKLQkweDFiOGI0YzE2LCAweGIwMjVlNWY0LCAweGZlMzBiODdmLCAweDRiY2ZjZjAzLCAweDcwZTVmNDliLCAweGJkZjQxMDkzLAotCTB4Y2NlZmU2ZjIsIDB4MzlmNmUwYjEsIDB4N2JlN2Q3NTEsIDB4MWY5M2E5YzksIDB4OGY4ZmNhMzIsIDB4NWY1YzAyYzQsCi0JMHg5MDliNTgxOSwgMHg3MDJhZmRmMiwgMHg0MmNhNmU3NywgMHhhNTllZTIwYSwgMHg2NjE2NTIxMywgMHgwNDE4M2JlMSwKLQkweDE2NDVhN2Y2LCAweGIyNjU3NDEyLCAweDgwMDNiYzNjLCAweGM5ZmM4M2FjLCAweGY1ODI1YmRlLCAweDk0ODdlZjY5LAotCTB4YTFlMTI1NGQsIDB4NjEzYWU4YWUsIDB4ZjI3MmRhN2QsIDB4NTk2M2MzMDYsIDB4ZTMxZTEwYmIsIDB4ODIzN2RlOGEsCi0JMHg5NWViNmE3NSwgMHgzNzk3ZjVmMywgMHg4MzdlNzU5YiwgMHg4NGYzODgwYSwgMHhlZmQ2OTUzOCwgMHg3OTdlYmFjYywKLQkweDM3ZGQxY2ZjLCAweGU3ZTI5NTg5LCAweDFiYjk1ZWUxLCAweGZjNTYzNGJhLCAweGE3MGU1MWY5LCAweDRjMmU2Zjg3LAotCTB4MTVmY2JlMDUsIDB4Mzg4MzgxZTgsIDB4M2RhOTczMjAsIDB4MDI3MWMyMGEsIDB4OGU4NWI4MDMsIDB4Y2RlYWNiNjMsCi0JMHg3MmNlNzk2MywgMHhmOWQ0ZmY5NiwgMHgxMGZkNWU1NSwgMHg3ZWM5Mzc2YSwgMHgyMDU4NTczYywgMHhmNzBjYmMxNiwKLQkweGZkYmE2NjlhLCAweDE3ZmMwMjVmLCAweDEyNjk3Yzk4LCAweDI0NmZhN2YyLCAweDY1MmU0N2M2LCAweGIzMjQ3ZmViLAotCTB4MThhYWQyZWEsIDB4Yzc4YWE5ZjYsIDB4NzgyZDBhZGYsIDB4Y2RkYzE3YmUsIDB4NzY2NzNkZjYsIDB4M2JmYWQ2NDQsCi0JMHhlZTRjNWRlMywgMHhjNGU4MWRjNCwgMHgwZWM4ZmU3OCwgMHhhZTExZWYwMSwgMHgzZGUxOGUxNywgMHg3OGQ3ZjViYiwKLQkweDI5Y2ZkODA4LCAweDE3MjA2ZjE0LCAweDA1NjQwYmQ3LCAweGRkOTU2M2JjLCAweDk3OGVmMzNhLCAweDM2ZDk3ZjAwLAotCTB4NWEyYTc3ZDQsIDB4MGUxNTg5MjcsIDB4NzdkMzNmNWMsIDB4NzA4ZDU1ZWMsIDB4NzczYzk4Y2UsIDB4MzNkMDI2NTQsCi0JMHgxYmRjZjc1ZCwgMHg4M2NiYmJlMCwgMHgxODNhYTVlMywgMHgwZjJjYTQxZCwgMHgwZDFlMmZhNiwgMHhmMWRjMTdlMywKLQkweDE4ZGJmMDEyLCAweDRkM2ZkZTFiLCAweDI2NzJiMGE2LCAweGY0MDZiYTYwLCAweGIxOTIxNDk3LCAweGNhNzdlNDFmLAotCTB4ZjgyNjRmNzQsIDB4YjE3NjFmNWEsIDB4YzQ5YTA2NzEsIDB4Y2Y0MTMzYjksIDB4ODRmOTY0Y2EsIDB4NDZkZjA1N2IsCi0JMHhiODc1YWUyNCwgMHhjOTMzNjRmZSwgMHg3N2MyZjk4NywgMHg2MDJkMTNkMCwgMHg4ODc5NjNjZiwgMHg1NTRhNzllMSwKLQkweDNjOWY4YzA2LCAweDRhODlhNTljLCAweDVlODJlMzE4LCAweGNlZGVmMTUxLCAweGI4OTY3M2UyLCAweDI1ZTNjYTA5LAotCTB4NGU0YTRkNWYsIDB4ZTk1ZmVkYTAsIDB4OTUyZDg2YTIsIDB4NTEwY2FmNTMsIDB4MDNiMGUxZjUsIDB4NjIzMjEwZjQsCi0JMHhmNWNmYWIxNCwgMHgyYzE5MjVlMSwgMHg0ZDMxM2RlZSwgMHhiZDU4NTdkNSwgMHg5NzE3ZDkxZSwgMHg3NWYzZjIwNSwKLQkweGU2N2YxN2E2LCAweDljNDFjNWYwLCAweGVjNGExNWRhLCAweDFjNDlkYmI4LCAweDM2NzM4MTRmLCAweGZmZjhkMjEyLAotCTB4YzBiZWIzMDMsIDB4NzM4MTFjN2IsIDB4ZWNkMjEyMmUsIDB4OWIyZWYwMDcsIDB4YmNiMzdlMzYsIDB4MTdiZTAwZjgsCi0JMHgzMDNhNDE1YywgMHg0NWEyYjgwZSwgMHg4NTdhNmYxZiwgMHgyYWI4ZjYyZCwgMHg5OWNlMDc5ZCwgMHg0MmVkMTA0OCwKLQkweGMwMjcxZjBhLCAweGNlMGFiMjI3LCAweDA1N2I4MjcxLCAweGNlMDZhZmY0LCAweDE5YTgyNDI5LCAweDQxMmU3MDNmLAotCTB4Njc5ZGVmOWYsIDB4YWQxM2Y2MTIsIDB4ZGFmNWY0NDcsIDB4MjQ3YWM0YmUsIDB4ZTMwNWQzYjcsIDB4NzEzYmJiNzQsCi0JMHg5MzljMDhiZiwgMHhhZmJhOWRiMCwgMHg0MTRjODRmNCwgMHhkZDZmZWE5OSwgMHhjM2RlNTYxZSwgMHhlYjU1YTNkZiwKLQkweGNmNzVmZGFiLCAweDk3N2RmODUyLCAweDU1ZGJmNjA4LCAweDg1MTEwNTRkLCAweDlmZWRhM2NiLCAweGJjYjM5ZmEwLAotCTB4NDVjMjNmN2QsIDB4N2MyODg3YTUsIDB4ODFhODI0ZWMsIDB4NDc0ZDUyNGYsIDB4ZmI3OTQ0ZDgsIDB4NTg0ZDBmZTcsCi0JMHg0YTUyZmEzZCwgMHgxZjM4MDc1YSwgMHhmNmFlMjcwNywgMHhhMmU1YTQ0ZCwgMHhmNmQ3Yzc0OSwgMHg0NzNlNWVlYywKLQkweDQ5YjBmMmYxLCAweDJiYzhmZWU0LCAweGE4OWQ0ZjU3LCAweGJkZmFmM2M5LCAweGJlM2Y4M2VkLCAweDQ3YjNjYTFhLAotCTB4MWVjYmY2YjMsIDB4Y2IwZmVhYmEsIDB4YTI1Y2E4YTUsIDB4NzAyYjQ4ZWIsIDB4NDMxNmYyNmEsIDB4NjNmMzQxZGUsCi0JMHhhMWI3NzkzNCwgMHg5ZTUwZDEzYywgMHg2MTBmYzg2MiwgMHhlMTljYmJmNSwgMHhjODRiZDEzNCwgMHg1Y2E2ODdkYSwKLQkweDAzZGZjMTJkLCAweDgxY2YwZDRhLCAweGM1NmJmYjliLCAweGVmZTFhYmJjLCAweGIzNjQ1NjJiLCAweGQ5NTgxN2JmLAotCTB4Mzg1OTc4MmUsIDB4NjU1ZjgzMTMsIDB4YTc2Y2Y5ZWYsIDB4YzAzNDYwYjIsIDB4OTA2NWUzYTEsIDB4ODI2ZGU1MDMsCi0JMHg0NzcwZjQxYiwgMHhlNjMwYjZjYiwgMHhkMzQ3OWRhMSwgMHg3YmRkODVhZSwgMHg4NjM5NmYyYSwgMHg3ZmVkZmFlZCwKLQkweGY4ZjkwOTk0LCAweDYzZWY1MWZlLCAweDE1YzVmM2JkLCAweDc4ZmFlOTkxLCAweDE5ZTJmZWYzLCAweDI2ZmUwODhmLAotCTB4M2JlOGI4ZDcsIDB4ZGVkYjVkYmQsIDB4MzdiZGZlOGMsIDB4NTNiYTQ3MmEsIDB4OGU1MTA3N2QsIDB4MDY3ZmVlMWEsCi0JMHgyODhlM2U2MCwgMHhiYzcwYTg5ZiwgMHg3YzU5ZDQ3ZiwgMHgzMWRkZjBiNywgMHhkYjYwNDdlZCwgMHg2NGY5MmZiNywKLQkweDdmOTFlODE5LCAweDBlMzEzOGFkLCAweGZiNzgyYWY0LCAweGRmOGRmNjEwLCAweDYxNGJhMTBhLCAweGY4OTQ3YTFmLAotCTB4NmY3MTg1MmYsIDB4M2Y3OGI4YWYsIDB4NTQ3ZDkxM2MsIDB4ZGUwYzdjZWUsIDB4ODdjZmZkYjUsIDB4N2YwZDVlZTYsCi0JMHhiM2E4ZWVlZiwgMHhhOWZjMjg3MywgMHg1MmFlMjM5ZSwgMHg4MWQxYzdjNCwgMHg0MjkyZjg5ZCwgMHhjYjE5NWM2NiwKLQkweDZhMWNlZDBmLCAweDVkYjdmOWEyLCAweGUyZmU1OWViLCAweDJmMjBjN2NlLCAweGVkNjMyZGM0LCAweDE1MGU3NGM3LAotCTB4MmMzMjYwZGQsIDB4NzI2ZGZjNDcsIDB4M2ZmN2U2YzcsIDB4Y2VhMzM5NzIsIDB4YmVlMWVlZWYsIDB4YTQyZTAwOTcsCi0JMHg3MDM3ZWQ5YywgMHhlNTQyZDBiZCwgMHhkM2QyOWNlOSwgMHg3ODUxMzc1YiwgMHgxZDg1ZjljYywgMHhhZWE2ZGNlNSwKLQkweGZhNjVhZjFiLCAweGUyMDBiMDcwLCAweGJjMzk5MjhkLCAweGI5NDQzZjcxLCAweDkwZGVhMTJlLCAweDQyNjA3YjBhLAotCTB4YjRjZTlmMTQsIDB4MTdlZTBmMGUsIDB4MDM2ZDU1OTcsIDB4Y2U3OTIwN2QsIDB4MWEyZmRjNjgsIDB4YjhhY2JlOWMsCi0JMHg0Mzc0ZDE3MSwgMHhlMmIzNGIyMiwgMHg4YmFlNGNkYywgMHg5NjFmYmMyNiwgMHhmNTEzOGY3YywgMHg3N2YxNWZhNSwKLQkweDIxZGYyOWFlLCAweDVlMzgzODdkLCAweGJiMzE3M2RlLCAweGYzMTczZGVjLCAweDRlNzQxYzJiLCAweDExZGU3ZWMzLAotCTB4MjIyZGViN2MsIDB4MDU2ODI0YTQsIDB4NTBkODk2YmMsIDB4OTFiNWI5MGYsIDB4ZDcyYTE1Y2EsIDB4ZWJiY2Y4ZWIsCi0JMHhmZThhNWRkNiwgMHg1ZmMxNWI4MiwgMHhmYmJlMWEzYiwgMHg0NzQ2MTM1MiwgMHgwY2JhZmNmNSwgMHhlZDQ0Nzc5YSwKLQkweGJlOTliYWIwLCAweGRhN2JlZDU0LCAweDVjYWM4ZDc1LCAweGU5NzU1Yjk1LCAweDVmYmFiZGFjLCAweDcxYjBkNzI1LAotCTB4ZTk3NTdmOTIsIDB4NWQ4NzU4NDYsIDB4OGJmNWU3NjIsIDB4YjhkYzhkNjYsIDB4MWJmZmY3MGMsIDB4MWZjMGUyYjIsCi0JMHg4MmE1ZjNlMiwgMHhjOTYxZmNkZCwgMHg5ZmU4MTMzMCwgMHg4NjFhN2UyYSwgMHhkMTcyYmVmYiwgMHg3M2YyOWZmMiwKLQkweGJkNGYxNTE2LCAweDViMWM2NWY2LCAweGVhOTEwMmY3LCAweDNmYmQ3NDBmLCAweGZkNzFmYjcyLCAweGNiMTg5ZjU0LAotCTB4M2U5OWIzMGUsIDB4NGNkNzQ1OTEsIDB4NTIyNWYwMzQsIDB4ZmVmODM4ZTcsIDB4Njk0ZTA4M2YsIDB4MTQ3ZmVlYjAsCi0JMHhiYzc3N2Y0ZSwgMHhmNzNlZjRmNCwgMHhiZTYxMzI1ZSwgMHhlODRmNGIxNSwgMHhiODcwYmRlZiwgMHhjYjA4NTZmZiwKLQkweGY3OWFkOWM5LCAweGIwNzdlODQ4LCAweGZhNzZiZjMzLCAweGNlNjljN2M3LCAweDUzZGNlN2U3LCAweGJhYTc3YTgxLAotCTB4NzdjZmZiMWUsIDB4NjRkZmMzZTUsIDB4NTFhN2YyMzQsIDB4OGVmYTNjMmYsIDB4M2ZmODJkNjUsIDB4MjgyZDJhOGUsCi0JMHg0YjVlOGY4ZiwgMHg1MWM1ZmVmMCwgMHhhYTk0MWVmZSwgMHhhMmZjZTZkNywgMHhkM2IwMTVlYywgMHg0ODg5YzUzNiwKLQkweGJlMDlmNzFmLCAweDdkYzc4MDU0LCAweGZlZTAxZTk0LCAweGEyOGYxYWI2LCAweGYxNzVjN2VlLCAweDQwODVmNWExLAotCTB4YzY4ZjM3MGYsIDB4ODgxZWVmNzMsIDB4NGI3YTg0OGMsIDB4MmViOGRmOTksIDB4ZjBlZDEzYmUsIDB4MzcxZWYxYmEsCi0JMHgwN2QwMDk5ZCwgMHg1YjMyMzFlMiwgMHg1ZDRmZmY0MSwgMHhiYWIzYTMwNiwgMHgzZWYwY2I5MiwgMHgyMDk3YTUwNSwKLQkweGU4Y2Q5ZmI2LCAweDQxMjY2ZWFlLCAweDc2NmVhMWJiLCAweDk1OWJkMjBhLCAweDlmMzBhYzg0LCAweGE5MjdlOGZlLAotCTB4MTBhM2M1ODYsIDB4N2I1NjM3YzksIDB4NjM4YzFkNmUsIDB4NzY3YjExN2UsIDB4NDEzNzhlZTcsIDB4NDU2YjVkOGYsCi0JMHg4OTUwMTYzZCwgMHhjOWI1MWRlNywgMHgwNzRhNWYzOCwgMHhhYTU3NDhjNSwgMHhkNDliZjY3ZCwgMHgwZjY4ZmRkMCwKLQkweDVmZWVkMTdhLCAweGMzY2RmNGVkLCAweGVlZDJmZmY5LCAweDU4MzdmOTgxLCAweDI2NGIxYWM5LCAweDA1NjQzNTk4LAotCTB4MWYzZTQ5Y2EsIDB4YzYwOGZiNTIsIDB4N2FlNWNjMmYsIDB4NjdjNTdiZTEsIDB4ZmM3ZmEwOWQsIDB4ZmY1MDRlM2MsCi0JMHhlYzBmYTUyZSwgMHg5NTg0ZjlmMCwgMHg3ZWQ3YmZjZiwgMHhmOWE5ZWMwYywgMHg2Mjc3YjJmNywgMHgzZTY5OWFjOSwKLQkweDlkMDVmOWZkLCAweGI5ZjgxMjZiLCAweGM0N2Q0ZmY5LCAweDg3ZTM3NDA5LCAweGZmZTgyZTc2LCAweGZmNzA5Y2JmLAotCTB4YmIyZjdmYzYsIDB4YjQ4MjRhY2YsIDB4ZmI2OGE4ZmQsIDB4YzFkZjgxZmIsIDB4ZjliMjJlNWYsIDB4MjdiYjZhOTMsCi0JMHhmN2EwZmJkNiwgMHg0NGJmNzFjNywgMHhlZDNlMjNlZCwgMHhjNjM4ZWE3OCwgMHhmOGJkYTk3ZSwgMHhjMjhiYzAwMCwKLQkweDhjZjcwYzNkLCAweDdmNjRiZjIyLCAweGRmMzhjMDk3LCAweGEwZjIyNTQ0LCAweGE5Y2Y5Njk1LCAweGVmZTFlMzE2LAotCTB4M2E5N2ZiODgsIDB4N2NlYWJkNzEsIDB4YWU0NzI2ZTcsIDB4YTE4NDdmNDQsIDB4Y2FmNmUzZmYsIDB4YWI2N2YwMWMsCi0JMHg1N2I5MGZmNiwgMHg1YzIxZWY2MywgMHg4NDVlNjg5NCwgMHhiNDExZjg3YiwgMHhlNzdjZmFhMywgMHhlZWQxYjFmNiwKLQkweGIzNWJlNDI0LCAweGRjNmY1ZWI2LCAweGNjMzA0N2JlLCAweDQ3OTVkMzlmLCAweDdlNmYwMDkwLCAweDI4YWYxZTdlLAotCTB4NWVmODM5OTEsIDB4MmFkZTYxOTQsIDB4YmE3Mzc3M2MsIDB4MDhjMmU5NTMsIDB4YzBmZGRkZWYsIDB4MWNlOTUxM2IsCi0JMHg5N2ZhZmQwYSwgMHhjNjRlMTE5YSwgMHhmNGZkZDVmZSwgMHgxZmU1MmIxMSwgMHg4MmY1Nzc0YSwgMHg3ZjVhZjQ4MCwKLQkweGM3ZjcxZGI3LCAweDQ5ZTQ2YjFlLCAweGVmYjhkN2JjLCAweDc3NzdjNDZhLCAweDQxMDNjZDg5LCAweGI1NTI4ZjVhLAotCTB4ZjYzM2NmMWQsIDB4OWU4Y2YzYjEsIDB4ODEyMzlkOTEsIDB4OWFlOWJhOWYsIDB4ZGQzZjE0N2QsIDB4NDE4ZDhhYWYsCi0JMHhkNTA0OWQ0MSwgMHgzNzE1NWU4ZiwgMHhlZjc3ZmQwMiwgMHhiM2Y1ODZiZSwgMHg4OWRlY2VjYywgMHhiZGMzMDgwNiwKLQkweGFhZGZlMGM0LCAweDgxZjM5ZmMxLCAweDAwMmZiZDg5LCAweDZiNDU4ZjdmLCAweGQxYmRjMzc3LCAweGJjYThjY2UyLAotCTB4MTgwMjgxZTgsIDB4NTczZDRkYmYsIDB4MzhlMDk3ZjIsIDB4M2RmMGRhYjcsIDB4ZTA5MzRhODEsIDB4YjJhYmJkMDMsCi0JMHg2N2JjMzJmNCwgMHhkMWRmZjg0MCwgMHhhNTY4ZTU1MSwgMHg5OWEzZGE4OSwgMHgzNGFmYmU1MSwgMHgzMTcyM2ZiZCwKLQkweDQ5MTI5M2YzLCAweGY1YTM0N2UzLCAweGIwM2IwNDVlLCAweDAzYjZiMmRjLCAweDQ5YmI1MWVmLCAweDY4NDNlZmY0LAotCTB4NmI5NWE1ZmMsIDB4ZjMwMzdjY2YsIDB4ZjgzNTZjYWYsIDB4ODNmZTBjMTEsIDB4YTUzZDJkNTIsIDB4ZjUwNGU5NDcsCi0JMHg1MzFmOTA3ZSwgMHg3NzViZGUwOSwgMHhiZjNkYmNmMiwgMHgwMThlZmQwMywgMHhmMDMwY2U3ZSwgMHhkNmQ3N2IwMCwKLQkweGMwNDJkZDk5LCAweGM5MzgxYWFmLCAweGVkMDk5NmY0LCAweDBlYzEwNzhkLCAweDE4ZWZjZjhmLCAweDcwMGRjYjBhLAotCTB4OWVmMTlmM2YsIDB4NzVmNmY4YzksIDB4YWE5NWQ4MjIsIDB4NmJiMWEzYmUsIDB4OGM2MWJkMmYsIDB4NGRmNzY1MzYsCi0JMHhmMTg2NGVjMSwgMHhmMDEzZTEzYSwgMHhjOWY2YzQ4ZCwgMHhmNzQ4MDNmZiwgMHg4MDAwMjNhZCwgMHgwMDAwODAwMCwKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDk5OTJiY2NlLAotCTB4OTI2NGNjZTQsIDB4MDkyN2RlNGMsIDB4MjcwMTAwODQsIDB4ZDQ1MDA0MjEsIDB4ZTZhMmJjMjEsIDB4YTJkMTAxZGEsCi0JMHgzYzI0MzhiNSwgMHhhMDk5MjExMiwgMHhmN2FkOGI5NSwgMHgyNDg0NDAzMiwgMHgxMTFhMDgwNCwgMHhhMjg0ZTAyOCwKLQkweDE3ZWRhZjYyLCAweDA0YzA2MjJjLCAweDE2YzQ1NDA3LCAweDZiNWVjNWZiLCAweDQ2ZjdmNmQ1LCAweDQ4NWNhMDA4LAotCTB4NmM1Y2IwNDYsIDB4YWQ3YmZjYjUsIDB4NjczMjRmYmQsIDB4ZGU5NTI4OTIsIDB4MWU5ZjdjZGUsIDB4ZWNmYmQ5ZjYsCi0JMHhhZjZiNWFjNywgMHhhNWIzZGVmNywgMHg5MGQ3NGIzMiwgMHg0NGI0NDg0OSwgMHhjODQ4NTQ4OCwgMHhiYjExYTZjMiwKLQkweGZlODQwOTU3LCAweDViNjY3M2I5LCAweDg2MmE3OTA5LCAweDgzYzllMDNjLCAweDMzYzhhYmIyLCAweDcyNTk5MDg2LAotCTB4OWUzYzhjNzEsIDB4YjE3MjIzOTAsIDB4Zjc4NzhlNTksIDB4ZGExZTkxODEsIDB4MDhlM2Y4OGUsIDB4NTVjODQ0OTksCi0JMHhlMDc1YmJmOCwgMHgyNDIwMzY5MywgMHg2MjVkYmZiZSwgMHg4ZDdlNGQ3NiwgMHgwZTc2ZTg2NSwgMHg4M2E3ZmQwMywKLQkweGQ4YjZkMDkwLCAweDhmOTg2ZWMwLCAweGQxNzk2MDI0LCAweDBkMmRmNDZmLCAweDYxM2EzZjM4LCAweDc2ODdkZjNhLAotCTB4ZmU2MDA2NjYsIDB4NDBjOWE0MTUsIDB4NGE1OTA5YjIsIDB4ZDIyMjA2MDIsIDB4OGZlMjI2NzYsIDB4ZGE0ZmEwMjksCi0JMHgxNzNlOTYyYywgMHgyNTEyMzU2ZiwgMHg1NWRmZTA5NywgMHg0MDY1NWZmYSwgMHg2Y2NkMjY1YiwgMHhlMGE1NGI1ZSwKLQkweDkwODYyMTExLCAweGZiMTNhNDI1LCAweGRiNTdiMjU5LCAweDEyMzRlOTZlLCAweDJhZmFkMmI0LCAweGMzNDYwOTEzLAotCTB4NWY1YjU1YjMsIDB4MGYzODQyNGQsIDB4YTM1NWRiNWYsIDB4NDRkMjdmYTYsIDB4MzZkYjg1MDgsIDB4M2I2NjIxMzMsCi0JMHhmOTlkYzljYywgMHhlODdmOWQzOCwgMHhiNzZiYmQ2ZCwgMHg2ODY5Yzg0MiwgMHg4NzBmZDQ5MiwgMHgzOGUyZDg4ZSwKLQkweGE4OTQ3MzgwLCAweDU2ODY3NWMzLCAweGQzNzYwNzQ1LCAweDQ4ZWI3Njc1LCAweGI3MGEzZWM1LCAweGMwZjIzNjRkLAotCTB4NTllY2ZhNmMsIDB4MGQ4NzM4YTksIDB4OWQ4YzcwNDMsIDB4M2MyMDY2M2QsIDB4MmI5OTBlMWIsIDB4NmU3ZjE0MDIsCi0JMHg1NTcwODc1OSwgMHhkNTg5NWZkZiwgMHg0MGNiYjk2MywgMHg3ZDY5NWEyYSwgMHg1ZmRhNmFkMSwgMHhmNTdkN2Y1ZSwKLQkweDdjMmYxNjNkLCAweDcwMTY1MzM3LCAweGJiZTc4MGRlLCAweDBkNjRjZjAwLCAweDNkZWQwNzdlLCAweDcxYThmYzc0LAotCTB4Nzc3ZWE5ZWMsIDB4Y2RmYjVmNjcsIDB4ZmUxNGRmMGMsIDB4OTUyZGZmMzAsIDB4Mjc4MDJkNTEsIDB4MDQ5M2I5MjIsCi0JMHgwNDc1OTQwNywgMHg2M2NmMmVlOSwgMHgwZmVmZDJmMCwgMHhmZDdlNzQwNSwgMHg1ODQ5ZjQwZCwgMHgzMWFkN2Y3YiwKLQkweDk3YjYyY2YwLCAweGU1YTBhZGU3LCAweGI5ZTY5ZjQzLCAweDQ4OWMyODFhLCAweGQwM2U3YmFlLCAweDUxNzNkMmMxLAotCTB4ZjFjMWQwMGEsIDB4ZmY1ZjNmNzMsIDB4ZjE3ZjVhNWIsIDB4YTQ2MjgzNTMsIDB4MzY4MDBiZjUsIDB4MDkwZjFlMjgsCi0JMHhlNzY4NGFkZSwgMHgzYzhhMzdiZiwgMHgzNTJkZGY0YiwgMHhiYjhjMzcxMCwgMHg4MDg4YzBmNCwgMHg4MDdiZjY5ZiwKLQkweGIwZmViMTk2LCAweDFhNTljNzE1LCAweDkwYjZkZGUzLCAweGE1ZjRiM2Y2LCAweDQwYTUxNzc4LCAweGYwM2VhYWYyLAotCTB4ZGY1MDczYzIsIDB4NGIzZDc2NjEsIDB4YzUxYTVkZmIsIDB4YTFlOTcxZTgsIDB4YmU3ZWZjMTQsIDB4ZjAxNGJiZDksCi0JMHhmYzBjNmM5MywgMHg3YmU5MmZjNywgMHhmNWQxOWFmMiwgMHgyNDVjN2QyYywgMHhmZjMwNDVjMSwgMHgwMTY2YWQ4YiwKLQkweDc1ODQ5ZGRhLCAweGFkMjdkMmM1LCAweGVkNWQ2MDEzLCAweGJmYjYzYzc0LCAweGVmZDIxNjkyLCAweGIyMjdkNTRlLAotCTB4OWQzODcxNzUsIDB4ZTkxYTMwZGEsIDB4OGQ5ZThiNzksIDB4NjAyODNmZTcsIDB4Y2Y3YTkzZmIsIDB4M2U1YTI0OGMsCi0JMHg2YmJlNzJmOSwgMHhmNWVhYWQxNSwgMHg0YTA2ODIxOCwgMHg0YjRkYmU3ZiwgMHg4NGIxOTA0ZSwgMHg1ZDk0ZWI5NCwKLQkweDM4NzIyNzAwLCAweGUyYWJlNzFhLCAweDcxNzFiN2MzLCAweDFlZmJkNDI5LCAweDEyNGVlYzdjLCAweGY0ZmVmNDMzLAotCTB4MzEwOTE5YjUsIDB4MGY2YmQzZjUsIDB4ZmQwM2E1MDksIDB4NmFjOGFmNmYsIDB4N2I3MWQyMGQsIDB4NDRiYTQ3ZGEsCi0JMHhlNDUyNzVhYywgMHg1OTkwZmE1MywgMHg4MzNkNmVkYiwgMHg4ZjQzYTg2YiwgMHhmYjVhZjRmYiwgMHhiNDRhZjU4NywKLQkweDViZmMxZjFmLCAweGYwZGQyNzg0LCAweGJjMDE3ZWVhLCAweGMxYzU5Nzg3LCAweDc0N2YxNGNhLCAweDg5NDNiZWJkLAotCTB4N2FjOGFmMDgsIDB4MGJiYmQ1YjMsIDB4MTNmNTUzZjgsIDB4MGFmMWYzZmYsIDB4ZjkwODZmODQsIDB4Yzc4YTY5MTksCi0JMHgxZGU3NDY3ZCwgMHhiYmVmZDEzNCwgMHg1ZjcxNTliNywgMHhiNGE2M2M2NSwgMHhmNzdlMDE3NSwgMHhiNjlkNzBkYiwKLQkweDBhZDE2ZTY5LCAweDU4OTkxZGU1LCAweDMxNDU3MWJlLCAweDg2YzcxNTM5LCAweGFmOTQwOTI1LCAweGE0ZmZhNDRjLAotCTB4NDkxMjJlZmQsIDB4ZGYwMGE5YWQsIDB4ZWRhMzZjZTcsIDB4ODY5Y2JjY2YsIDB4MjQ2NDVjZjgsIDB4Y2ZiYTI2NzUsCi0JMHhlYmMzMjM0OSwgMHhhN2NhMTY5OSwgMHg4ZGNhN2MyOCwgMHhjOTY3Yzg1ZCwgMHhlODA0MDg3ZiwgMHg4NWFiYjY4NSwKLQkweDIwZTk0Yjc2LCAweGUxMDMwNTQ5LCAweDAzNGI3YzA2LCAweDM5NTg0MGI3LCAweGI1YWJjZThiLCAweGZmNzQyNDQ1LAotCTB4ZmFhN2NhMTAsIDB4Y2ZkNTlmZDYsIDB4NjkzZjgwYzcsIDB4MzM3ZjI3YmUsIDB4NTdlOGUxNmEsIDB4NjNlZTJkZjksCi0JMHg1OWM0YThiYSwgMHg1MWY5ZmE2MywgMHgxOGU3YWM0NywgMHgxMmMzZjNlMywgMHg0NDY3N2UwMSwgMHhmMjk5NzJlZiwKLQkweDhmYzRjNWI3LCAweDA0OTJiMWZjLCAweDQ3OGVhOWYxLCAweGJiZTMyZGY5LCAweGUxNzdjNjI2LCAweGZjMGQ3NTE5LAotCTB4OGFkMjQxZjcsIDB4MzgwYWIzN2MsIDB4Zjc3YzYwZDIsIDB4Yzc3N2NhMzEsIDB4MDk3N2NkMGUsIDB4YjgwN2M5YTksCi0JMHhiOGI3ZWVmYSwgMHhmODAzY2UwMCwgMHgyYWVmZTcyZiwgMHg4YzBkMTMxZSwgMHg1OGY4ZGYwZiwgMHhmZDc5MjQ0MCwKLQkweGVhZGQ3ODcwLCAweGNmYTBlNzNlLCAweDA2ZTI0MmU4LCAweGMwZmJlN2ZlLCAweDgwNmU1MjY0LCAweDUxNjQ4N2IyLAotCTB4NGViMGVjZjgsIDB4YWQwMjdlZjksIDB4MGRjNDQ5ZjcsIDB4OTNiYTMzN2MsIDB4ZmJlODViYjgsIDB4ODdlMjY2OWQsCi0JMHgyODI2YTZmZSwgMHhjMGQzOGZkOCwgMHg3OTJmNDJlOCwgMHgyZmFkM2U0OCwgMHhlYTBjZWUyYSwgMHgxM2M0OWY2MCwKLQkweGI1YmRmODE5LCAweGQzYmZmNTkzLCAweDgwMmJiZjRhLCAweGFlZmMwNGVmLCAweGE5MTM3YmVmLCAweGJlZmIwYThkLAotCTB4ZTkxOTkwZjgsIDB4NmI0MWYyZTgsIDB4ZDBmMjg4YzAsIDB4ZmRhMzYxOWIsIDB4NDhkMWZjMjUsIDB4ODczZGJkNjAsCi0JMHg3YmU3YzhhYywgMHgyYjZlNjRmNCwgMHg0OTEwZWY2ZCwgMHg3M2UyMmI0ZCwgMHhkODI3ZjYyZCwgMHgyN2U5ZjEzMiwKLQkweDY4MDQyOWM1LCAweDA1M2RiODU3LCAweGFiMjEzMmI2LCAweDY1NTc1ZjkxLCAweGYyODNkZTc2LCAweDgxNTE5Zjc2LAotCTB4ZDZkOTdjN2QsIDB4NzRjYTFjYjUsIDB4ZTVhN2UyM2MsIDB4ZGIwNTY1MmYsIDB4Y2Q0ZmY2ZjksIDB4ZWY3ZDA5ZmYsCi0JMHgwYzVjNThmMywgMHhhMDdjZGViYSwgMHhhM2Y4YTMxNywgMHg2ZjE0NGM3YiwgMHg0MmM3YzQzMywgMHg1Njc5ZDI4ZiwKLQkweGUwNjQ1OWE1LCAweGZlMzJkM2M3LCAweGI0YmRmZWY0LCAweDNkN2VkOWZjLCAweDlmZGUwMjMxLCAweDY0OTczYTlkLAotCTB4MmEyN2NkMGQsIDB4NWQ5M2ZhMDMsIDB4NjRiYWY0NjEsIDB4ZDU1Y2I2YWYsIDB4ZGFmYjJkYWEsIDB4OWI1NGU1YjQsCi0JMHgxYTI2NzFkNSwgMHgyYWViYTZmNywgMHhiMWEzMjdhNSwgMHgzYTE2ZDNlNiwgMHg0NmFiZTM1ZiwgMHg5NjdmOWJlNCwKLQkweGUwMzY5OWJkLCAweDMxZDBiYTBiLCAweGUzMzFhMzgwLCAweGUwMmY1OGZjLCAweDAxNzNmZGI5LCAweDFiNGE0NjllLAotCTB4YmUwYzc5OWQsIDB4OWIyZWFmYjAsIDB4NzljODY3ZTcsIDB4ZmU5N2NmNDMsIDB4NDcwODc0OTksIDB4OTNjMTg5YjcsCi0JMHg5YjFmMDdmMSwgMHhlZTU3ZGQxMiwgMHhmNWQwOGVjZiwgMHgyNTFkOWEyZiwgMHhlZTM3YzZhZiwgMHhhMDQ1ZjFkMiwKLQkweDg5MWNlMGFmLCAweDlmNmRlYjZmLCAweDVkYjE2MzA5LCAweDU5ODlmMjI1LCAweDU3OWQxZGI0LCAweGI3YzY1NmM1LAotCTB4MThjZTkyOTcsIDB4NTRkNTBmZDgsIDB4MTQ1MTMxYWYsIDB4Nzg2MzZjM2UsIDB4MmExYjUyNTgsIDB4MzY3ZmQyMGEsCi0JMHhjMjQ2NGJkYiwgMHgyNWFmYTUzYywgMHgxZDdmZTAwZiwgMHg4N2E2MWJmNCwgMHhiMWQzNjZkZCwgMHg3MmNkN2JmNiwKLQkweDM2OGUwNmI3LCAweDk2ZDdkOTRkLCAweGVkODc3NzI0LCAweGZmN2MyNTk3LCAweDYwOTA0NTEzLCAweDdhZjk0YjNkLAotCTB4NmY3ODJmN2UsIDB4OTk1NWY4MDMsIDB4ZTg1MzBjYmEsIDB4ZmQ3ZWI3ZjgsIDB4YzVlZmNhMDUsIDB4NzVjNmNhMmIsCi0JMHhkYmQ3MGI4ZiwgMHgxNzU3Yzg4YywgMHhmN2M1ZWEzZiwgMHgzOTliNmZhZiwgMHhjZGI3ZDcxZiwgMHhjZmRjMDBhYywKLQkweDllOTAxNGVjLCAweDAyNWFhNzE3LCAweDViY2ZmYTI2LCAweDViOWY0YzZkLCAweDg0MTNiZjRjLCAweDg0OGM3MDgxLAotCTB4MzMxZGQ5ZGIsIDB4Njc0NzQwOWQsIDB4ZGZjZjFiMDksIDB4NTllNGU0Y2EsIDB4OWIyYmMyOTksIDB4Y2VmZTgxYjUsCi0JMHhlYmJlMzFiNiwgMHgzM2YzM2FkYiwgMHg3NzhiNGZlMCwgMHg2NzkwMmU4YSwgMHgxYWVhYzNhNCwgMHg3ZDNjYTA0ZSwKLQkweGY0MGI0MmU0LCAweDBhNmUyOTc3LCAweDZiYmNkZjZkLCAweDdiZTIyY2JhLCAweGZkODAxM2QxLCAweDZmM2JiOTIzLAotCTB4NWRhNWVmYTUsIDB4NzhkZjUwMTMsIDB4Y2Q5MWE3NjMsIDB4MGU3YTY2ZDMsIDB4ZDdlYjcxZDYsIDB4OTJjN2VhMjIsCi0JMHgyZjQxNzg4ZSwgMHg0N2I4MzY2YiwgMHg3NjU1N2VjMiwgMHhmMDAzM2IzYywgMHhiMjU2NzY3MiwgMHg0MmZmZGIwZSwKLQkweGMzYzAzMjIwLCAweGRlMDEyMmI2LCAweDBmMjQxNjJmLCAweGFkOGFjZmVjLCAweDcyZTFhNTk1LCAweDExMTM2Y2Q5LAotCTB4MWUzMjUzNWYsIDB4ZTBiMmU4NGIsIDB4ZTQwN2JhN2UsIDB4YmE0ZWQ1NTQsIDB4ZDlmYzYwN2YsIDB4YWY3ZmJkMWYsCi0JMHgzZDNmN2MyMywgMHg2MTc0NDQ1YywgMHhiZmM3NzY3MiwgMHg1ZmMxM2QyMCwgMHgzNGY4MDhiMCwgMHhlZWY1YzU4MywKLQkweGJhYjQ2MzJiLCAweDgwNzI2YTJmLCAweDVkNWUyZTVmLCAweGEyMGYyMzkzLCAweDhiZWRmN2JmLCAweDhlMWY3NDFkLAotCTB4NGQ4MzY0MjYsIDB4YjA3NTU3MjAsIDB4ZmQxYWVkMzEsIDB4ZGZiZDI4NzYsIDB4MDM3M2FiOTIsIDB4ZTIyZTRkZGMsCi0JMHgxMzNlOTY3ZSwgMHhhMGJmNTQ4ZCwgMHhhMDI1ZjA3YywgMHgxYTc4Nzg4ZiwgMHg5N2QyM2UxMCwgMHg4NzdkZWQwZiwKLQkweGNkOTI2YmFlLCAweGM3YTA1M2ZiLCAweDA3Y2VlMjBjLCAweGI5MjEyYmJjLCAweDAwNWJhYTk4LCAweGM4MGZkNDYyLAotCTB4YjdkMzIzMGUsIDB4NmRlZmE2MjQsIDB4ODFjZjI3ODksIDB4ZmI4ZWEwYmUsIDB4MWUyZmU4NGIsIDB4MWIxZWMyZjksCi0JMHhjM2U3YjdlZCwgMHg1YzAxOGVhZiwgMHg4ZmNmZDNhYiwgMHhiYmVjZjkwNSwgMHhhMTQxODVmMiwgMHgwYmI0YjVlYiwKLQkweDJlMmRhZmM4LCAweGYxN2EwMTBmLCAweDBiMjJjZmI1LCAweGFjZjlmYWYyLCAweDQwZTRjNWNmLCAweDZhZmViYWU0LAotCTB4Y2ZiNjdhNjMsIDB4NGU3ZWMyMTEsIDB4NmRmZWQ5ZGIsIDB4ZGNmYTMxYjYsIDB4MDAyYTIyYmUsIDB4MjNiYjc1ZmMsCi0JMHhmZjQ5ODY2MCwgMHg3Yzk0ZmJiZCwgMHhjNTM4YTU0NSwgMHhlMTg5YTU3MywgMHg1N2U3YjRkOSwgMHgzYmU4MTE2ZSwKLQkweGExYzNjODIwLCAweGQxZmRiMGFjLCAweDIwMmYzMTViLCAweGRiM2U3MWQyLCAweGYyYzdlZDkzLCAweDkxMmUyOWZlLAotCTB4ZmNmNjU5ZDYsIDB4ZTAwYjJlYWMsIDB4NDE3N2E2ZDQsIDB4MmJhYjhiN2IsIDB4ZDlmN2Q2MDYsIDB4YjAzMTUzOWUsCi0JMHgyMjNkOGFiZSwgMHhmMDIyYmJhZSwgMHhiY2MyYzI3OSwgMHhiYWYwYmU3ZSwgMHhjMDBkZmRlMCwgMHg0YjA0Mzg4YiwKLQkweDZjZjg3ZjM4LCAweDA1ODRhNWNmLCAweDk4Mzk1NDE2LCAweDFjMWMyYzdjLCAweDI5ZTQ0NzJlLCAweDViYjc4MDlkLAotCTB4Mzk3ODYxNmYsIDB4MDA2MzBiZjcsIDB4MzMzOWRlZjgsIDB4ZmM2MTVmOTUsIDB4Yzk5NTljZjYsIDB4MjYzNjkzYjMsCi0JMHg0ZDY5MDkxZiwgMHg1N2QzNzkwNywgMHgwNzU3M2ZiZSwgMHg2NjQ4ZmZlMywgMHg1YTE4NzdlYiwgMHhmZTNmNjFkMywKLQkweGU3ZWRhMGI3LCAweDA5MWQzYWMxLCAweDU5NWVkZTUwLCAweGY5NDM0MTQ3LCAweDVlMTdiOWQxLCAweGZmN2UwNzQ5LAotCTB4YTRhZmIzZDksIDB4MmZjZDg1OTcsIDB4NzlmNTNiZjIsIDB4OWFlZGM2ZGUsIDB4MjZkZGE3YTYsIDB4NTExOTVlM2EsCi0JMHhjMmE2MGJjNywgMHhlMzJlNjU3OCwgMHg0ODVmYzAyNywgMHhkZjc3NzRkZCwgMHhjZjYyYzliZSwgMHhhYjY0ZjZmMCwKLQkweGFmNjBmOTFiLCAweDFkMDBhOGNiLCAweDU2ZjVkZmFhLCAweDgwNGRiOTQ0LCAweGZlNDI2MjE3LCAweDA2MmVkNjU3LAotCTB4ZGI5ZmQwOGQsIDB4ZmEwMWNjM2QsIDB4NDQ3ZGZhYjYsIDB4NDYzOGFlZmYsIDB4ODA5YjQyNGYsIDB4NWU3NDY5NzYsCi0JMHg3N2YxZjkwOCwgMHgyZDRlZjdlNiwgMHg3ZjllMjkzZSwgMHgzMmFlNzgwMSwgMHgxMGE1OGU4NSwgMHhjMDAzMGZhNCwKLQkweDkxNmQ1MGNkLCAweGFjMjUzZTQwLCAweDdhMTVmNDYxLCAweGJmZmE4NzQ0LCAweDAxNjlkOTIxLCAweDRlNmI3NjdlLAotCTB4NmU4ZWFkNTQsIDB4Y2M1NDQ3NDQsIDB4YTdmNTQyNTgsIDB4NmM1Y2U0YjQsIDB4NzQ2NjJmZWYsIDB4ODEyMDRmZWYsCi0JMHg1OTBjMDIzNSwgMHg5NmJmMjAyMywgMHgzYTljNWU5OSwgMHhiNDBkYzg5MSwgMHhkMzNiM2RmOCwgMHhiNWM0OWM1NywKLQkweGJjNDZjYzU1LCAweDUwN2ZlMDBiLCAweDA1Y2FhMWUxLCAweDhmZTAxZmEwLCAweGQyMTMwNGU3LCAweGEwMmVkMDhmLAotCTB4NWFlYTI4OWUsIDB4NDNiZjQxZTcsIDB4NWQ5ZTUzZDEsIDB4M2QxOTUzYjUsIDB4NDlmZjk1ZjUsIDB4ZTc2NDU0ZjQsCi0JMHg5ZTgwM2JmNCwgMHg5M2QyMGFiYywgMHgzZDM4MzRkMywgMHhiYmY5MDIyOSwgMHgwN2JmMTNkYSwgMHgwZTQ0YWNlYywKLQkweGVmOWM0ZGFmLCAweDMxMzExZTg0LCAweDE5MDUwYWJmLCAweGY3OTRiN2FjLCAweDA0YjI2YTU3LCAweDJlMWY5MDQ1LAotCTB4MzBhZWY5ZmQsIDB4ZDUwNzYyN2IsIDB4NDk0ZWMxNmYsIDB4M2U5ZTdkMDIsIDB4NTdjY2Q2NTMsIDB4YjNhNDZmMTAsCi0JMHhlOGRhZWMwYiwgMHg4Zjk0MjYwOSwgMHg5OTlkNzVlYiwgMHg4ZTI0YWZhMCwgMHg3NDA3ZDlhYSwgMHhhZjJmMzg5MSwKLQkweDY3ZGEwZDYwLCAweDA3OTAzNmE5LCAweGJmZDE1YjIwLCAweGQzZDhhMmIwLCAweDJmYTYxNzFkLCAweDJmYTgwODc0LAotCTB4YzZlYTNmNTQsIDB4OTlkYjUzZjcsIDB4NjYxYmUwN2UsIDB4ZDdkNzdkNDAsIDB4Y2YwMWY4MjYsIDB4MDA0MzFlZDUsCi0JMHg4MTdhYTBmNCwgMHgxYmZjMDFmOSwgMHhlZmQ4MGFjYywgMHgxNTY1MzZjZCwgMHhiZmYzNGZkMCwgMHg1ZDNmMmUyOSwKLQkweGY5ODA2ZjQ3LCAweGQ3NDk3YTEzLCAweGJkMDA5ZmFlLCAweDNlZDA1ODU1LCAweGI2MDViNjZmLCAweDc3NzY4MjJkLAotCTB4MDNiYjYxZTcsIDB4ZjhkOTEzN2YsIDB4ZGY4ZTA5YzMsIDB4N2E4YWRmOWMsIDB4MGE2ZGYzN2EsIDB4ZmM3MDAzZjMsCi0JMHgyNzcyY2YzNSwgMHhhODFmNDBkOSwgMHhlNmU3ZWVkMywgMHg5ZDkyNzcxNiwgMHg1MmI1ZWZiZSwgMHhjYWYxZDBjMCwKLQkweDg3ODhjZDFhLCAweDk5YzE5MTY0LCAweGZjOTg5YWM0LCAweDRjMTdjODE5LCAweDg5ODRmNzAwLCAweDRmNGQzMTFjLAotCTB4YjdkM2JlYTMsIDB4ODBhNzI5Y2YsIDB4NmZhZjMyNzIsIDB4ZDBlM2E0Y2UsIDB4M2NmMzU4NzksIDB4OWY3OWEwOTksCi0JMHgzYzdlNWE2YSwgMHgwMjRmZDI4YSwgMHhjNDZlODdmOCwgMHhlYmQwN2UyNiwgMHg1NjRjNjFhMywgMHg0ZjcwYzM3NiwKLQkweDkyNDRlOGU5LCAweDg2Y2VmNmExLCAweGNhYzM5MzY5LCAweGY3ZmY3ZGJjLCAweDY5ZjZlZmZmLCAweGZiNzcyOGE5LAotCTB4NTRkYTYxZWEsIDB4Yjc2NWFiMWUsIDB4OWQ2YmNlOTksIDB4YTI1ZWJmYjUsIDB4NGRhOWFlZmEsIDB4ZDdmYmRmNjAsCi0JMHg4YTlkM2VkZiwgMHgxZDQxNWVlOCwgMHgzNzdhY2VmZiwgMHg0NGNjYTlmOCwgMHhmY2Y4NWUzMywgMHhmNWZlODhhNCwKLQkweGEyOGI3ZmI0LCAweDAyNTY1ZmI2LCAweGEwNTUzZGZkLCAweDczYWVkZjk2LCAweGQyNmRmOWQzLCAweDkwNDNmYjZiLAotCTB4YTBhMWVmZjIsIDB4NGY4YmU3OGUsIDB4ZGM5YzY4NmEsIDB4M2Q1MDE3YWYsIDB4ZGYxZjYwMjEsIDB4ZmJhYzFmYWYsCi0JMHgwNmU5YjRhOCwgMHg3Y2I0NTYzYSwgMHg1NzcyMDBjOSwgMHg4NzNlZjM5NSwgMHhlNDQ3ZmE4MCwgMHhlZjg5N2Q3ZSwKLQkweDU3Y2NlZmQ3LCAweGJhM2Q1MTg3LCAweGJmNDdhMzQ4LCAweGRhYmU0NzY0LCAweDI0YjYwMzM1LCAweDZmOTAzZmI1LAotCTB4MTBmMzFlZmIsIDB4M2VhOGU3ZDAsIDB4ZmE4ZWMwNzIsIDB4NDczM2Y5YzgsIDB4ZWNjZjdkNjgsIDB4NTE0YjFjYmYsCi0JMHg3OWIyZGRhMCwgMHhhZWZhZjdhMCwgMHhiZWI3NDg0OCwgMHhhMDQwNjJiZCwgMHhmYmUyNmI3NCwgMHhjMGYxY2E4NSwKLQkweDllOWZhMTcwLCAweDlkMzk5NDFlLCAweDA3NDRmY2RhLCAweDhjMjFkZjc0LCAweGQ1N2QyM2Y3LCAweDcxNGRkZmE0LAotCTB4M2VlNzEyOTksIDB4YjdlZjhmNjIsIDB4ZmRkNzIzMWIsIDB4MGZkOTlkOTEsIDB4NmRlMmRjYmUsIDB4MWVmZmQwMzksCi0JMHhkMDllODA4MSwgMHg2MTMyN2I5MCwgMHg5ZjRkZGEwMSwgMHhmYjBjMmMyNCwgMHgyOWVkYjJhZSwgMHg1ZWU1Njc4NCwKLQkweGZjNzBhMGZkLCAweDFjMjIyZWM4LCAweGVjYmUwZmFiLCAweDJlNzFiZTA2LCAweGE4NGYyMDIwLCAweDM3ZjUwMjkwLAotCTB4ODU0NTcyZDIsIDB4NTI0MTM0MGUsIDB4MmY3Zjk4MTgsIDB4MzVjYzhmYWMsIDB4N2Q3NGUxOTAsIDB4NDA5YmQwNDEsCi0JMHg5NzdiZGE4ZiwgMHgzNzU4NDZmZiwgMHhhZmEwNGZmZCwgMHhhMTE2N2JiNiwgMHhkNzNlZGQzYywgMHgzMDk5MjE2NCwKLQkweDA4NjViMmNmLCAweDBkY2EzOTA3LCAweDJkYzg2ODcwLCAweGFhNzE4MjRlLCAweDQ1OTBjZDY3LCAweDFjN2FhN2E4LAotCTB4N2EzZjU3ZDQsIDB4ZDMwYzQwNWYsIDB4ZjRkYTFiMDMsIDB4MTRlN2EwMjUsIDB4NTdlZTdkNTEsIDB4ZjY2OWRlNzQsCi0JMHg3NDVjNGJkYiwgMHhmYjg4YTcxZiwgMHhlNWE2MWZmMiwgMHhmMWYwNDMyZCwgMHg2ZTRjMWM0NywgMHhmZjFlMGFkNCwKLQkweDVmZDEwYWY3LCAweDZmZmRjMjQ3LCAweDZmNGM2ZDE5LCAweDY4Mzc2OGJjLCAweGVkMTdhZmZjLCAweGQ5Mzc3ZTEyLAotCTB4YzgxNTM5ZGYsIDB4MTVkNGIwZTcsIDB4OGZiNGZhMGQsIDB4ZmIwNzNmYjgsIDB4Y2EyYzc4OTksIDB4YzYyNzg4YjMsCi0JMHgxNTJiMWM4ZiwgMHgxYzk5MmJmNCwgMHg4MDZmZWI1ZCwgMHhkYTEyYzlmYSwgMHg3YWVhNDQyZiwgMHhhOWVkYzYxMiwKLQkweDA4MWFiODc3LCAweDdlNTAwN2RmLCAweDllZWQwZjM0LCAweGFiZGU3MWY5LCAweDVjNDU0NzQwLCAweDM4MzllZDRmLAotCTB4YWYyY2JmMzMsIDB4N2ZhYWVmNWYsIDB4MGQ1ODFhZDYsIDB4M2NhYWQ0ZmMsIDB4ZjRmYzAyNTEsIDB4MjRmOTA5NGIsCi0JMHhhNzNhODUzMSwgMHhmZjJhN2VkMiwgMHgxYjdlYzc2YSwgMHg3MTUxYmRhMiwgMHhlNmY1ZmU3NCwgMHg4MWQwM2Q0MCwKLQkweDc2YzQ0NWJmLCAweDIwYTZkOThlLCAweDczZDlmM2Y0LCAweDJmZDAxNmQ2LCAweDAyMjY4ZWY1LCAweDE1Y2Q0Yzc0LAotCTB4MWM5ODg3ZjQsIDB4ZjJkMGEyMWUsIDB4NDk3Y2ZmNTQsIDB4YTExMTc5MDAsIDB4YmYwNTRjY2YsIDB4MGUyYmRhMTEsCi0JMHhmMzE2MmJmNCwgMHg1MjljMzFmZCwgMHg2ZTEzMTljMSwgMHg3MWFiZGE4NSwgMHhmMWNkZmFmZCwgMHhmMDQ4ZTZhZiwKLQkweDc0N2JkNTUyLCAweDlkZTdlNjI2LCAweGMwOGEzNzM2LCAweGU4NmQ2NGY4LCAweGNhZmMwZTk4LCAweDdhMDI0ZThlLAotCTB4ODBhYjU1NzAsIDB4YmVlNTU0ZTMsIDB4NjViYjAwNjQsIDB4ZGZkYjJiNDksIDB4NTA2NzZlM2UsIDB4NWU4M2E1ZjgsCi0JMHhjZDE3MWQ5MSwgMHg0NjVhY2JmNSwgMHg1OGYzYTRlZiwgMHg0NWY5YzAwYSwgMHg2ODQyNGY4NiwgMHhiZGI4NmIzYiwKLQkweGQ1ZDk4YWIyLCAweGY3MDMzZmJjLCAweGJmNzE1Nzg3LCAweDU4ODQ5NTExLCAweGQ1NGUzNjNmLCAweDY3ZjM1NjMzLAotCTB4NzFmMjdiMTMsIDB4NmU5ZDA4YjcsIDB4MmY5OWUwMTEsIDB4ZWFiNmZjNjgsIDB4ZTMxYzdhNzMsIDB4NDM0N2IxM2IsCi0JMHg4NmZmNjAzMywgMHhmZjgxN2QyOCwgMHg2YjMwOWI2OCwgMHg3ZDc0OWJkOSwgMHg3MjhmYzZkYiwgMHhhNGU2MGE4MSwKLQkweGMwMTYyNGU0LCAweDE0OGE0YTdiLCAweDlmNmQ4NWVlLCAweDIxYmEwMGNmLCAweDZiZjcwNDI1LCAweGIxMTRkYjc1LAotCTB4NDAwZGM3OGEsIDB4YWU4YzQ4NWYsIDB4YzRmYTgxNjksIDB4M2U1MTcyMDcsIDB4ZmMxZjFmODMsIDB4Yjg3MDc3ZmYsCi0JMHhmZjk4NTkyNiwgMHg5ZmRhYjljZSwgMHg4YzFlNTBmOSwgMHgyNmY2NTllZiwgMHgwYTI2M2Y4YywgMHgxNDg5MTVlMywKLQkweDNlM2I1NjM3LCAweGU1N2ZjMGViLCAweDQwNDdmOTI0LCAweDk1NGIzYWZlLCAweDFhOGY5ODAyLCAweDg5ZDc4YTM3LAotCTB4NDNjYWNjMGYsIDB4YmI2NThlM2UsIDB4YTZlZjcwNGIsIDB4NmNlM2JiY2YsIDB4ZGY2YTJlYjgsIDB4ZTE3Y2MwOTUsCi0JMHgwZGRiODA3ZCwgMHg0ZTI3NDc2MCwgMHg3MTg3YzlhZCwgMHhjZjA0NGUyMSwgMHg4NGEwYTQ5ZSwgMHhjZjJhNjhmZSwKLQkweDZkM2EwNTlmLCAweGFmMDBjYTMzLCAweDNlYjdiNmQyLCAweDZhNWI3OTAwLCAweGU4MjJhZDIyLCAweDRiN2ExMTNmLAotCTB4ZjM1ZGNjNTYsIDB4MmY3YjZlODAsIDB4MzhmNWQ5OWMsIDB4MDNlZWViY2MsIDB4NDdlMjJmMmUsIDB4N2FkYzhmYWIsCi0JMHhjZmNiZDMwYiwgMHg4MGFkMWIzZCwgMHhmMzliYjkxZSwgMHhiMjNmYWE2ZCwgMHg5ODJmYzEzOCwgMHg0N2E5MTkxZCwKLQkweGI1YTcxMjNlLCAweGZmY2FmYTRiLCAweGNkOTIzZDcwLCAweGY3ZTc0ZmNmLCAweGY3N2YxODZjLCAweGI3YWZiYjcxLAotCTB4YzgwYzYyZTIsIDB4ZjQ3ZDU1YWYsIDB4NTE3ZmU1NDYsIDB4YjY1MjllYmYsIDB4ZDgxM2ZhMjcsIDB4NDU3NjdkNjcsCi0JMHhiNTIyM2U4NCwgMHg4NDA1MzhiMCwgMHhkYWVmOTBkOSwgMHhlMmZlM2MwYywgMHhmZjA3Y2U3NiwgMHhmOTA3MmQ4NywKLQkweGEyZTdmMWNmLCAweDE3Mzc0MGZkLCAweDk3YThjZDViLCAweDEwNDMzNjQ5LCAweGIyZmI1NWU2LCAweDgwMTNhMDMxLAotCTB4NzU3ODcyMGYsIDB4ODE4YWI4ZjAsIDB4MzllYzZiYzcsIDB4MDcxNDI4MGEsIDB4ZmJlNDFlMGMsIDB4MmNmNDk3ZmUsCi0JMHg3ODEzMTJhZSwgMHg1ZTVhMzllMSwgMHhjNzg5Mzg3YSwgMHhlZmY2MDg1ZCwgMHhmMDhkMTgzZiwgMHhjNGE1MWE1ZSwKLQkweDdmNGJmZjQyLCAweDllMjA0NzFkLCAweDAzYzc0YmQyLCAweDdiMzdjZjNjLCAweDRkNzgwYTdmLCAweGM5ZmViMjM2LAotCTB4YzU4NTQ2NmIsIDB4MzYzOTgyNzksIDB4MDA5Njg3MGEsIDB4ZTU0ZWZmZDMsIDB4YmEwNjgyZWEsIDB4MTdkMDE2ZWUsCi0JMHgzNTQ2ZGZhMCwgMHhkOWQ2YzJmZSwgMHhjNTg1MjFiYiwgMHgwMTE5NDAwZiwgMHhmYjllYWNiYiwgMHhjYWI4ZDVlOSwKLQkweDJiODdlNjYxLCAweDUzOTNmMWU3LCAweDAzM2QxN2IzLCAweGExNWFiNGExLCAweGI0ZWMwNGE2LCAweGQwNTMwZGNiLAotCTB4ODlmY2JkNmYsIDB4YWYyY2Y4NTksIDB4MTdkYmZhZDMsIDB4YWY3YzFhOTEsIDB4M2Y1NTI3YzYsIDB4MTk3MTE5NzcsCi0JMHhlZmRjZmU5OCwgMHg3ZDUxZDQzZiwgMHg4YTkzYTk0NiwgMHgxMjY2N2U0MSwgMHgwM2M4MzU3OSwgMHgzN2IxNGZjNSwKLQkweGU5NmIzZTgxLCAweDgxNzg5NDEzLCAweDkzYjY5OTQyLCAweDgwNTExZGVhLCAweDNhYjU3NWVmLCAweDVhZmU1Yjk0LAotCTB4YTlkYTFiOWQsIDB4MWM1NmYyZjQsIDB4NTdmZDIzZjMsIDB4NTA5N2YzMWMsIDB4MWM2MDA3NTAsIDB4ZTdhYjU5ZjUsCi0JMHhkZmRlN2VmZSwgMHhjMjBiYTIyYSwgMHhlN2IwMjc1MywgMHgxOTJhNTkzYSwgMHhmZGFiN2U0YywgMHg0YzZiZWFkNSwKLQkweDRlNmY0MDUzLCAweGZiM2ZhMWQzLCAweDE3M2RjMWIyLCAweDFjZjZjNWZkLCAweGI1YWQ1M2M0LCAweGQ1ODRhZWE2LAotCTB4NmNiYTVlZTMsIDB4ZmViMDc5MGUsIDB4OTYyOTg5NjYsIDB4M2YwM2IxNDQsIDB4ZmE2Mzg4ZWQsIDB4MTZkYzI0NDUsCi0JMHg5MWNiNjkzNiwgMHg4MGNhOTA3MSwgMHhiYzRlNWNiNiwgMHg1OWIyOTIyMywgMHg3ZGZjMjBkYywgMHg5NzY3ZTcwNywKLQkweGJjMzkzMjFiLCAweGJiZTAwNjVkLCAweGE1NTdmYWVhLCAweGQyZTliODMyLCAweGFkMmIzM2Q4LCAweDQxZDAyZTc4LAotCTB4MzI4NWY4MTYsIDB4YWFmY2M5ZTEsIDB4ZmYzODI1NzQsIDB4MDIxZDliYWMsIDB4N2NjNDQ3ZDIsIDB4OWU4YzZkNmIsCi0JMHgwZmNjZjVmYywgMHgzZmNlZjdmOSwgMHhlMzY3ZGU3MiwgMHg3NjNlZjgxMiwgMHg1NmJlMjEzYiwgMHg1ZTMwMWIyZSwKLQkweDEyZmVhZDdhLCAweGRmNmI0MzkzLCAweGYxZmY5NWY2LCAweGU3YjMyZGY2LCAweDJmYzY0NWViLCAweGE5N2M4Yzg4LAotCTB4Mzk2YjY2NGMsIDB4MGI5ZWI4MjUsIDB4ZDUwYjdiYzIsIDB4ZjUxZDYwMWIsIDB4OTFmMDAxNjIsIDB4NzA1OTc3YTksCi0JMHgyOTg3ZDUxZCwgMHg1NWY1YTExZiwgMHg4M2E1NzU4ZiwgMHhlZTJlYWY1YywgMHg4MGJjODFjYSwgMHg2Y2MyZjg0OCwKLQkweGQxOWY5NTI1LCAweDZhMGU2NTc2LCAweDUwZGU4MDhmLCAweDBkODc4ZGE3LCAweGQzYmEwMzhjLCAweGVlYzFlMzFjLAotCTB4MmRlZmI1MzksIDB4Y2NmYjVmOTAsIDB4YmZlOGJmMjgsIDB4ZmY2MTE4OGUsIDB4YmU0NGNjMWYsIDB4M2JjNTg5ZjYsCi0JMHhiZTNlZTIxYywgMHhlN2FlZTBhOCwgMHg2MThmNDEzMywgMHhiYjU1NTQ3YSwgMHhjNGY0MDViMSwgMHhmOGIwZGFiMiwKLQkweDUxYWZmYzFhLCAweDc1MjM2ZjFiLCAweDkzYmJmNDc2LCAweDhhZmJlZDY2LCAweDBkZGYxMTFkLCAweDIxMzViZjg4LAotCTB4YmMxOGI2NWUsIDB4NTNiZjYxMjMsIDB4ZjFmMTg0MzksIDB4MDIzYTk1MGIsIDB4NWQxNzJkZjgsIDB4NWQ0ODQwOGIsCi0JMHhmM2Y1NmIzMCwgMHhhZjg2NTYwYiwgMHhmZTU1MGU2OSwgMHhjZjAwNzJiOCwgMHg3ODAxZTU3ZCwgMHg5ZTAwZTU3NiwKLQkweDFiYzQ3NWNiLCAweGUwMTU0ZmRlLCAweDI5NzdlMjk5LCAweDk3ODVmM2M3LCAweDllMDBlNDI3LCAweDkwOWJlZmNmLAotCTB4YTJkZTc4MDMsIDB4YmVjMzcyNmYsIDB4NGI3YjI1OTksIDB4ZDNkZDhlMDAsIDB4NDE1ZmE4M2QsIDB4ZDFmNjEzYmMsCi0JMHg3ZGUzZDJiNSwgMHhmNDY0ZjM3ZCwgMHhmMzkwZGY3OCwgMHg1YmY4YzdmYywgMHg4YjhmOTI4NiwgMHg5NWExZTZmYSwKLQkweDkyODMwZThmLCAweGNjYTBmYzBhLCAweDM5NDZmYzY0LCAweGZhODM3ZjA5LCAweGY0NDY0Y2YzLCAweGVhZmUxYzdmLAotCTB4MWJjYzQ2ZDIsIDB4M2Y1MTE3NjgsIDB4MmMzYmZiNTEsIDB4M2Y0MWIzNzksIDB4ZDM4MWZjM2EsIDB4ZWU4NjE3ZTUsCi0JMHg4YWZjMGFkZiwgMHhlMGZjZmZjNSwgMHgwMmVkNTE2NywgMHhlNDhjYmY1NSwgMHhmYmU2M2ZjNywgMHhmZGMzYjM3YSwKLQkweGQ4M2JmZDk5LCAweGI4ZmZhYWE3LCAweDA1MzFiNzgyLCAweDc3YmQzMTJlLCAweGZlNjJlMDhmLCAweDI3ZjQ1NmUzLAotCTB4OTdjYzc3NTcsIDB4NjlmYzVmYzEsIDB4YWI4ZmY5ODAsIDB4ZmY0N2NlNWYsIDB4ZjVlMDY1NzEsIDB4ZGZjODBhNjAsCi0JMHg3YjA2NDE3NiwgMHgyN2NmNzJhNCwgMHhmZDJjOGIzMSwgMHg3M2I1MmY3NiwgMHg4ODZlODA5YiwgMHhmYTQ3MWI0OSwKLQkweGE2MmE3MDM0LCAweDNlZjM4MmRjLCAweDc2OGVmMzBkLCAweGY3NDAwYzg0LCAweDIzZmVkNGQ1LCAweDUyZDU0OTc0LAotCTB4NWJmNDE4ZTgsIDB4MTdhODIwZWQsIDB4ZWQ2OWI2MTQsIDB4YjgwNTRhNDEsIDB4MDMxZWVkZWUsIDB4ZWRlZGRkZjIsCi0JMHg3NWY4MDA0MiwgMHg5OTliYzE4MiwgMHhhNDhkNzIwYSwgMHhlNDA3MThjYSwgMHhjMzk3NmNmYiwgMHhlOGYzMDFkZCwKLQkweDAzYmI2YjhmLCAweGEzM2NiMDhlLCAweDQ4YjE2ZGFlLCAweGUyN2E1ZGJmLCAweDZkOWY4MTk2LCAweDI2N2U3MmIzLAotCTB4ZjNmYjdmMjEsIDB4MjFhMDViMGUsIDB4NzNmODZmNGMsIDB4OTUwOWU5ODAsIDB4NDQ5MWJlNmEsIDB4ZDdjNTEyODIsCi0JMHgwZmVlMzlhMiwgMHhlZmMwZGYwMSwgMHgzZWZjMTE4MywgMHhhM2M2YWNiYywgMHgzY2ZjNDA5NywgMHhkZTFkZWUyMiwKLQkweDFmOGUyZmFlLCAweGY0ZDZmNzE2LCAweDk1ZjI2YTQzLCAweDViZGM2ZDQyLCAweDc2NjdlZjViLCAweDJiMGZkZDMzLAotCTB4NTdlOWZhMGEsIDB4YmY0YTgzYzUsIDB4ZWQxZmRjZDUsIDB4MTZiOTM4YWIsIDB4MjZkN2Q3ZTgsIDB4MmY1ZjYwYzgsCi0JMHg1ZGZhMzE3NSwgMHhlMzJmZWQ0YSwgMHg5ZGZiODFkOCwgMHgwZGZhNTJiNCwgMHhlZDQzNzdlMywgMHhlNDIyOGZmZiwKLQkweDdiZmY0N2QxLCAweDNiNTA2OGYyLCAweGY4ZGY3NGZkLCAweGViYWJkZjZjLCAweDdkZjdmZDU3LCAweGQ4MTc2Y2ViLAotCTB4NTc1ODhjYmUsIDB4ZTkxYWRkYTQsIDB4Y2VlZDU3NzcsIDB4NWY4N2U1NmIsIDB4YWZjM2YwNDUsIDB4YTFmODhmZmUsCi0JMHg3ZTI4N2UyOSwgMHhmYzZiOGRhOCwgMHg3ZmYwZmNkZCwgMHg0Y2YxYmUzOSwgMHgzYTMxZDNjNywgMHgzMzJhMmFjYSwKLQkweGQ3YTY0ZWZkLCAweGUyZjEzNWI5LCAweGNkYzVhMjE5LCAweGNiMjJhNmUyLCAweGJiOGM4ODk3LCAweGRjNzgzMzJiLAotCTB4ZDdlN2VkOWQsIDB4NWYxMTE2NWYsIDB4NWMzZTNjNTUsIDB4NDE3NTYxZDUsIDB4NjJjYjBhZDMsIDB4YzY0NmNmOGMsCi0JMHhmYjI0MWY0ZiwgMHgyMjhhMDA2NiwgMHg2MTRiYThlMywgMHg3YjdmNjcxZiwgMHg5ZTNmMzUzYywgMHg1Y2U5NDdjNSwKLQkweGExNGYyMTMyLCAweGRmY2I1OGE4LCAweDhhNWNiNzVmLCAweGJiZTE4NmYzLCAweDAyMWE4ZjM4LCAweDQ5YjVkMDgzLAotCTB4ZDg3YjEzZjIsIDB4OTllMzViZmIsIDB4Y2YzYWZkM2UsIDB4NDgxYTcxZTcsIDB4NmNhMWU0MWQsIDB4YzFiYjQ2YjIsCi0JMHg1OGVhNzE4ZSwgMHg5YzRhNTFiZSwgMHg3OGZjNGE2NywgMHg5ZTFjZWZlMCwgMHg3NDRmYmYwNywgMHhlOGNmMmUxNCwKLQkweGY4OWY5MTViLCAweGUwMmUyY2FiLCAweDQ3MWZhYTdmLCAweGY3MDc3ZmVkLCAweDlkMmI1ZTgzLCAweGRkYWYxYmRmLAotCTB4N2ZlNTdkZjcsIDB4NTcyZmJlZDIsIDB4ZTM3YmZiYzcsIDB4NmMyOTViNzYsIDB4MjA4MWZiMzQsIDB4Mzg4MDllZmQsCi0JMHhiYTQwZTY1MywgMHhhMTlmYWExZCwgMHhiYzc5NzdlOCwgMHhlZTNjNTk2NywgMHhjYzU4ZjczYiwgMHhmZTQ2YmQ5ZiwKLQkweDNhMTg1ZDEyLCAweGIyMjJmZTA1LCAweDdmODBhOGRmLCAweDI4MjVmYzEzLCAweGI4OTMxYjE3LCAweDAyMmFlZWJkLAotCTB4MmViZTQzMzgsIDB4MGM3ZDZiZTQsIDB4YjQzNDljZmYsIDB4YjdkOGQ4ZmUsIDB4ZDhmZTk5ZmYsIDB4ZTkwN2ZlNTcsCi0JMHg5ZWM4Mzc4ZiwgMHhlZWNlYjA4ZCwgMHg5MDFjZWUyOSwgMHg3NGFjZWI2ZiwgMHhiZTE3NjBmZSwgMHg3NjhjZjJjMCwKLQkweGVlN2QxOTk4LCAweDkyNWQxODEwLCAweGU0ZDc3MTE1LCAweGFmMTNkOTc3LCAweDg2N2I5ZmU1LCAweDJlZmZmNzljLAotCTB4YTdmZDZjZmYsIDB4YzRiZmNmZjEsIDB4ZTg3NTFmODAsIDB4MmYyY2ZjN2UsIDB4Y2RkM2I4YjcsIDB4Nzc2NDY5ZTMsCi0JMHgwN2RiN2Y5OCwgMHhmYmY0NjZmOSwgMHhlYWJlN2MyMywgMHgyZTVjOWRmYiwgMHg0N2RjMTI1YSwgMHhmZjljMWY4MSwKLQkweGIxMjI2NGQwLCAweDY0MjllNTU0LCAweDYzZGFiMTdjLCAweDc1NDJmOGMxLCAweGE5N2JjYjJiLCAweGZmMjA4YzdlLAotCTB4NjlmZjA2YWUsIDB4NjcxNWY4MWUsIDB4MjZmN2QwMTEsIDB4MDAyN2JjZDksIDB4YjIzZWViY2YsIDB4ZjA1OGM1ZjgsCi0JMHhhMDI2Y2ZiYiwgMHhjODdjZjVkZiwgMHhiZDk2N2ZjYSwgMHg3YmVmNTA5ZCwgMHgxOWUzMGJhYywgMHg2MWNmYjNjZCwKLQkweGQ1ZDE1NWRlLCAweDBhNGI2YjRiLCAweDQ3ZThiZTcxLCAweDRkNDkxODcwLCAweDFhZmU5ZTM4LCAweGQ1OTZmMmNmLAotCTB4NzgzZTk1ZTcsIDB4N2ZhZmQxYmIsIDB4MTFlNTgyYmUsIDB4MTk2ZTFjZmIsIDB4NWZhYTExZmMsIDB4NDRlOTVhM2MsCi0JMHg3ZWY1NTMzZiwgMHg4OTE1YjRhNiwgMHgyN2U0M2Q2YywgMHhkNTRmNDhhOSwgMHg4M2U0YTdmYiwgMHg5YWI0OTRmZiwKLQkweDJkY2Y0MWYzLCAweGVkMDVhM2ZhLCAweDI2OGZmM2JkLCAweGZjYzQ5ZTYzLCAweDk4NTllZjM4LCAweDcwMzBiNWFmLAotCTB4MTlhNWU4MWIsIDB4NzdkMDFjNzQsIDB4MmRiYmVmY2YsIDB4ZjJhZGU2MWYsIDB4M2ZlMDJkYmYsIDB4NThiN2VkYTcsCi0JMHg2MjcxN2ViNSwgMHg5NWRkZjk2MiwgMHhmZWE4YTdjZiwgMHhiN2Y0MTBmMywgMHg2MjQzZWY4NSwgMHgzNTlhMmE2OSwKLQkweGY3NTdiZWM4LCAweGMzYThhMjdiLCAweDYwN2YxM2ZlLCAweGNhYjkzOGMyLCAweDg5ZThiNjBmLCAweGNmZGQ5NGQ3LAotCTB4Y2YxMGZlNDcsIDB4M2MxY2ZiZGUsIDB4MTY3ZGIxNWYsIDB4NjVlMTRmY2IsIDB4ZjBhYTdmMGIsIDB4ZmU5OGVjZGMsCi0JMHgxZmM3OTgwNywgMHhjYmViYTVlMiwgMHg0YjA1OTMwYiwgMHg3NWViM2M3OCwgMHg3ODg3ZmJjMSwgMHg4MDMyY2YxNiwKLQkweDhhMzE0ZTdkLCAweDJiZTg5NjdlLCAweDkyY2U3ZjRjLCAweDU2NDc0ODBkLCAweDNlMzBkZmJhLCAweGY0MDhlOTQzLAotCTB4Y2VhMWM5ZjgsIDB4OWQ3NGIxYTksIDB4OTM4MzlhYzMsIDB4YWY4N2JlMDEsIDB4ZDI0ZjEwZTgsIDB4OWYxODEzYWMsCi0JMHg3OGQ4MTU4OSwgMHhmNTVkOGRkOSwgMHgyMmZmYzAyMywgMHhhMDMzNzdiZiwgMHg4YjkyNjk1MiwgMHhjOTM3ZDQyMSwKLQkweDQwNGU0OWU2LCAweDJlNGQ3YTdmLCAweDdiZmM1NzhjLCAweGVjOTNjYjNkLCAweDQyYmY0Njg4LCAweGNjNTJmYTczLAotCTB4YzhmOWVjOTMsIDB4NDg5Y2ZlODgsIDB4ZmQzZWEwZjksIDB4NDVlNjM1NjQsIDB4MjdmZGI1NjYsIDB4ZmJhYzA5YzYsCi0JMHhkNGRjMGQwNSwgMHgwYjA0ZjhlNywgMHgzYmY5NWY4YiwgMHhjZDZlNjA2NywgMHg1N2YyMDc2NCwgMHgxODhmZTNhOSwKLQkweDI1ZWE5NjlmLCAweDU2YTQzY2UwLCAweDgxOTlkNmVmLCAweGU4MjJhZDdmLCAweDJjZGUxY2U3LCAweDE5NWYwMGViLAotCTB4ZjdhNjJmM2MsIDB4N2FjNzVmZjAsIDB4ZTM1MTRlZDEsIDB4ZDc5NjAxMDIsIDB4MGI1YWVmYTQsIDB4YWFiNDk3ZjYsCi0JMHhlMDNmMTZlYiwgMHg1NzRkYmY2MywgMHg4NWZkMDc5ZCwgMHhkMmNmZDFhYSwgMHhjZjgwNGQxMSwgMHhhZjY1YjQ2NywKLQkweDMzOTY4OWJlLCAweDgzOGM2NGVhLCAweDkyNWExZWY1LCAweGJhNTU3ZTgxLCAweGFjODNlMWNlLCAweGU1ODEzZDMzLAotCTB4MTgxMzM5MjEsIDB4ZDExZDQ4YmQsIDB4ZDI2NzkwM2EsIDB4ZDE4MmUyNjYsIDB4MzJkZDZiMzMsIDB4Y2I4Nzc5ZjgsCi0JMHgyNWI5ZDIxMiwgMHg3MDAyNWJjMSwgMHg4MDdjZTY4ZCwgMHhiOGMyODhhYywgMHg3ZTYyNTVhMiwgMHg4ZjhhZWIxMSwKLQkweDQ0ZTcwMTdlLCAweDAzZjNmMTc2LCAweDllOGYwZjQ3LCAweDdhYmRmZThkLCAweDVmYjgwMDQ5LCAweGM5YmNiMWI2LAotCTB4NzNkYTA5MzksIDB4M2VmMGZkMDcsIDB4NTlhN2Y5OGEsIDB4ZTRjOWZmMWQsIDB4ZmEwYjFkMTcsIDB4M2U4Y2Y0OTcsCi0JMHgwYjQ3N2FhNCwgMHg1ODc3MTFmOCwgMHg3YjZmOThiZCwgMHhjNDUwNmQ3MywgMHhmZGRjOTkzOCwgMHg2NjEyODk2NCwKLQkweGYyNjU2Y2NmLCAweGIzMmY3YWE0LCAweDk3ZWQyM2JmLCAweDU1MjM5MzZmLCAweGQyMzk1YTA5LCAweGU5MjdmZTU3LAotCTB4YWUxMjJiMjcsIDB4NWEyMTJlZDMsIDB4NGY1MjJlN2IsIDB4MDZkZmI0ODksIDB4ZmQxMWRiZTgsIDB4YThhZmE1MGQsCi0JMHhmZGM1Mjc3OSwgMHhkOWJkMzBlMywgMHg3ZTQzZWFhYSwgMHhiMTRlNWU0ZCwgMHg0YzRiOGQ4NSwgMHhkYjI3ZmVkYSwKLQkweGNjOGY5NjY1LCAweGQ2MTI3NGYzLCAweDkwMjRhYjI4LCAweGQwNDZmZjU3LCAweDBiZTZhNzJmLCAweDVlNTk4YmY5LAotCTB4Zjk0NzVmOGYsIDB4OTdjNDI2NWYsIDB4Mjg0ZjMwOWEsIDB4MDEwNTA0ODUsIDB4MDQ1ZDY2ZmQsIDB4N2M4NDRiYmUsCi0JMHhlM2RkZmEyMSwgMHhlZjM4NTkwOSwgMHgyNzU1YzQ5ZCwgMHgwNDU0N2YyMiwgMHhmMjE5Yjc5OCwgMHgzNTJmMzA0YywKLQkweDhjMTE2ZGIwLCAweGM3MDViNzczLCAweGM5OWU0MzMxLCAweDcwMTU0ODM4LCAweDNhN2UwMzZmLCAweDExYzU4MmI1LAotCTB4MDVkY2E5OTIsIDB4YzYxZTRkZmEsIDB4OTczY2QwZTgsIDB4ZjlhODliZTUsIDB4ODdmZTZhMjQsIDB4MGU2Mjg3MGEsCi0JMHg4YjExZTRkZiwgMHhkNWVmODEzMiwgMHg0MDE3ZGUwYiwgMHgxODE3YTljZiwgMHg5ODFiZmM3YywgMHg0NmQ5YTExZiwKLQkweDZlNWE2OGY1LCAweGY5ODUxY2FlLCAweGY1ODRiZDdlLCAweDIxZDBhZmVmLCAweDgwZjlhYTVkLCAweDc2MTVjM2NkLAotCTB4MjI2ZmU1M2UsIDB4ZjljZGVmZWEsIDB4NDA2NGJmMmMsIDB4NWMwNDRhMWUsIDB4NmU5NDNjZDUsIDB4ZjYwM2I3YWIsCi0JMHhlNGM4YjI2ZCwgMHhhMjM3OWFhOCwgMHhmZTE4NDlkMiwgMHhkZTNhNjZmYywgMHhiZmE2MGVmNiwgMHg3MDE4NTcxNywKLQkweGI3OTViZDFkLCAweGI3YjFmZmEzLCAweGNlNDA0NzUyLCAweDE5MWJiNzE3LCAweGI3OGM0NWRkLCAweDA0ODFhZTdkLAotCTB4NjAyOTVmYTEsIDB4OGU3OWZjYzYsIDB4NWZkMzZmZmYsIDB4YzE3MzVlMjksIDB4NjU3NDdiYmYsIDB4MGE2ZWI4YzksCi0JMHg3YTU2MzdlMywgMHgxNjZiZDlmMCwgMHhkN2M4NDU1YSwgMHgwMWU2ODczMSwgMHhmODljZGE0NywgMHg0OWE0M2JhMywKLQkweDRhMTM1NzkwLCAweGVjYzkyODE3LCAweDU0YTBmZTcwLCAweDM3YTA3MmEyLCAweDk0MzFmNDNlLCAweDljN2M0YzVmLAotCTB4NzY4Nzg3OTUsIDB4ZDFmZGI0MDksIDB4ZDhhNTFkYTcsIDB4OTkzMTY4MWUsIDB4OTgyNTNmOTAsIDB4ZWI5NmZkNGIsCi0JMHg0MDY0NmY5MCwgMHhjMGE3YzZiZSwgMHhkNzQ4YWE4NywgMHgwYmY0NGVkYSwgMHhjODU2Zjk3MSwgMHg2Njk5MjFmOCwKLQkweDk0YmYzMDBjLCAweDc3YjFmZTgyLCAweGVlNTEzMjkzLCAweGY2YjM3MjViLCAweGFhN2Q0Mjc3LCAweGI0NjlmZDExLAotCTB4ZGRmZGU5MWUsIDB4YmQ1ODUzZTEsIDB4NTI0ZWYwYzIsIDB4ODM2ZjJjYWQsIDB4OWY4MWY5NzQsIDB4MDUzOTliYmQsCi0JMHhiMDU1ZDJmZCwgMHhmNGZlYTgxZiwgMHgwNTdiYzVhNiwgMHhlODQxN2FmMCwgMHhlMGZiMGU1YywgMHg5YWZmZTlkZCwKLQkweGUxN2RmNDA3LCAweDAxODY0ZmMwLCAweGEwNjk5OWJmLCAweGZjMjBmOTdhLCAweGUzMjc3MWU1LCAweDRiN2FiZDJmLAotCTB4NzlmYjQwOWQsIDB4MTIxNWUyZGMsIDB4ZTg4M2Y5NjksIDB4OTUyMDMzNzksIDB4MTRkYzZlN2MsIDB4MjAwZDFjMDMsCi0JMHhlMDQ0MTdmZSwgMHg3ZjFjZjE3NywgMHg1ZjRjMzliNiwgMHgwOGYzNGRiNCwgMHhjNmI5Zjc5MCwgMHhlZjExZTZjYywKLQkweGJmYThkYzk1LCAweDc3MDhlNzc4LCAweDExYWZmNWQzLCAweDk0NDMzZWI4LCAweDE0M2JiNDU4LCAweDhlZWMxNjI1LAotCTB4YzIxZTJiYTUsIDB4ZWY5MTZmYmMsIDB4OWJhZDQ5ZTcsIDB4N2Y5N2QwNDUsIDB4NGRmOGYyYjcsIDB4ZTVhMWIwZDIsCi0JMHhmNjExNWRmMCwgMHgxMjU0ZmE4NSwgMHg4YjY2M2FkOSwgMHg4ZmEwMThjYSwgMHg2ZmUzNDJiNSwgMHgzZGUwOTM0YSwKLQkweDMxZTliM2EzLCAweDVmMjEwYTJiLCAweDRkNzQ2NjdhLCAweDIyY2RjNjIxLCAweGY3ZDJjN2RmLCAweDIzNjU2MTc5LAotCTB4MTRkNGI3NmIsIDB4M2QyODk3NGEsIDB4NjFkZWNkM2IsIDB4ZjNjYjk3MDAsIDB4ZmIwZTU5M2YsIDB4YmJmMjc5NzcsCi0JMHhjMmJlNDMxZiwgMHhkNmUyN2FiYiwgMHhlMjRkM2VjMywgMHgxZjJhNDM3MSwgMHgzMmM3YmYwMSwgMHgyODZlMmM2YywKLQkweDAzMWE5ZDZmLCAweGVmODY2Y2U1LCAweGUzMDA0OGRiLCAweGQ4NzNhNWQ0LCAweDQ4M2JjMTM5LCAweDZkMTc2ZDY3LAotCTB4NTdhOWQzMzcsIDB4ZWNlOGMyYmEsIDB4YmU1YjQ1MzYsIDB4MmU1YjU3MjMsIDB4ZmYxMTc5ZTUsIDB4YmZiZWQyZTIsCi0JMHhjMDI0ODQ5MywgMHg3ZTI2ZjdmZiwgMHhmZGZjMjIzZCwgMHgxYmVlY2Q4ZiwgMHgwYWFmZmU2MSwgMHgzZmQyOGYyYywKLQkweDg3YThjODg5LCAweGU4M2YwNDNhLCAweDQ5NWZhMzA1LCAweDU5MjZlN2U2LCAweGI5Y2ZkZmJlLCAweDQ0Y2FmMzFkLAotCTB4N2IwOWY1ODIsIDB4MGYyMWJiNGQsIDB4OGIwN2Y1NWYsIDB4OTNiNDdlYmMsIDB4YzhlYzMyOTgsIDB4ODRhZTUwOGYsCi0JMHhlODM3OWUwNCwgMHgzOTA5MThjMCwgMHg3ZTY2NGNiMCwgMHg0MGQ2ZGE1MSwgMHg1ZjMwMzlmYiwgMHg1ODI0Yjg0MSwKLQkweGEwMTZlNDc0LCAweGQyMTM0MmViLCAweDI5OGE1MTc1LCAweDI4ZTBlODBhLCAweDNmMWYyM2E3LCAweDU1ZDJhMzg3LAotCTB4OTAzYzQ0OTEsIDB4OWU4NzQwYmYsIDB4ZjU3N2NmMDMsIDB4ZmZmMDExZjIsIDB4NzgyMzNmZmEsIDB4Mjk5MDhhNGUsCi0JMHhmMjMxZTYxMiwgMHg4NTU5MDhiMSwgMHhiZDM5YTdlNSwgMHhlZGY5NTUxZSwgMHg2ZmM4NDliZiwgMHg3MDFhYjRkZiwKLQkweDE2YmY4OTVmLCAweDQzOWY4MDViLCAweDVmZDY5OTFiLCAweGYzODUxYzZjLCAweGRkMDNmNzUzLCAweDA5MWNjM2JkLAotCTB4ZmRlNjcyZTgsIDB4NDQ5ODNhNGEsIDB4MmFjYWNjYWUsIDB4MzhmODYyYmQsIDB4NDEwZmU0MDEsIDB4NzM4ZDUyM2QsCi0JMHhiZWZhOTlhNSwgMHg0OTc3YzM3MywgMHg3NGJiOWZiYywgMHg4YTRjZGUyYywgMHhkYzlkMWM3OCwgMHgzZjdjYzQ2NSwKLQkweGJmYjQyZjVlLCAweGY3ZTAyNWY1LCAweGRjNGNjNGYxLCAweGI3ODg3Yjc0LCAweDM0NDZlODBiLCAweDRiYTAxNGI4LAotCTB4ZGFlNWNlOTUsIDB4OWQyOWJmNDMsIDB4NzljOWViMDQsIDB4YmI3M2Q3MDQsIDB4ZTRmNTg2NTUsIDB4NmI5YzMyNTIsCi0JMHhhZTNiYTdjNywgMHhmNDYxZmEwMCwgMHhlZmIxNDYyZSwgMHhmYjc5MmFlZiwgMHgzZThjMjkyNiwgMHhlYzU1ZjdlOCwKLQkweGY3ZWQ2OGZiLCAweDNkYmRmYTRlLCAweGZhMThmYmVjLCAweGVmYzBkZTdkLCAweDcyMjIwOTA5LCAweGJmZjNlNzZlLAotCTB4ZWU4OWU3OWQsIDB4YmE4MjlhYjEsIDB4OTE3ZmQwYjEsIDB4MTNiZjQ1ZDIsIDB4YzNmN2Q4MTMsIDB4ZTA3YmU4NjIsCi0JMHg3Y2RhYjlmYiwgMHg2NWQxMzIwYywgMHg4OGRlM2NjMiwgMHhjMjk5OGJmYywgMHhkNzQwNDk2MywgMHhkYWFhOTliNywKLQkweDZmZmY2OGJiLCAweGQ0Y2NmYzcxLCAweGYzODBiZjc5LCAweGNiY2Q2ZjY2LCAweDU3ZmMwMzc5LCAweGJmYmEyNjI1LAotCTB4MDU1ZjYwYjIsIDB4N2FkMjAyZDcsIDB4YjE5Zjc4YTcsIDB4ZGRmZWUzNjUsIDB4MmQ1ZmY0MDEsIDB4NjlkODQ3N2EsCi0JMHg2OWJlODJmOSwgMHhkYzRjYjJkOCwgMHhlMzEzM2IxNywgMHhjNTVmY2UwNywgMHhhMDBlYmFiZiwgMHgzZWE3YTAwMywKLQkweGI3OTg4ODNhLCAweDY3NzIyZjhhLCAweGVkYWMyNjJiLCAweDNjMDg3YWE0LCAweDkwODRiZDU1LCAweGFjOWY5NjFhLAotCTB4OGJhZmY1YTQsIDB4NTMwY2NiMTIsIDB4MGJkMDMwY2QsIDB4ZTNmNGFhZGUsIDB4N2I2OTlkYmUsIDB4OWU5N2YzMTIsCi0JMHgwNGJlZjI0ZiwgMHhjMzdiOWRmMywgMHgzNDEyZTllNywgMHgwMTFmY2U3NiwgMHhkZjNhMjA3ZSwgMHhjZTVmZmQ1ZiwKLQkweDA2YmZkNTU3LCAweDY2N2VlN2U0LCAweDBlZTdlNGQwLCAweDcxZDQ3ZmI1LCAweDg5NTdhMDdkLCAweDgyZGJjNzkwLAotCTB4MzliZWI2ZjksIDB4YWI5YzE3MTYsIDB4NjhiZTQxZjAsIDB4NTA3OWM2MjEsIDB4MzAyNDNhYWYsIDB4OTgyZmQ1N2QsCi0JMHhhZDc0MWViOCwgMHhlOTg0YmM3OSwgMHhmYTdkNTU0YiwgMHhiZDBmMjY5MiwgMHhiYmNkOWYzOSwgMHhmYTgyOTk3OSwKLQkweDZiMDJhYmQ2LCAweDk4NGY5ZmVmLCAweGQ3OGIzNjNlLCAweDVlYjE5NDJmLCAweDZlNmY1N2NkLCAweGU2YjVmZTYxLAotCTB4ZDAyODQ3OTcsIDB4NTBhM2Q1MmYsIDB4YWU1ODkzMWUsIDB4ZmUzMjY1YTcsIDB4OTE0OTNjZGEsIDB4NDRkYzBjZmQsCi0JMHhhZmNmZTg0OCwgMHhmYTY3YTJkZSwgMHhhYjlkNzZkZiwgMHgwYzQxZjMwOCwgMHhmMTYyM2Y1NCwgMHg4NjlmYzY1YiwKLQkweGZkMjNmMWIzLCAweGFhMjc1ZjcwLCAweGMzZjMwMDc2LCAweDQxZmY5NWY1LCAweGIyNTliODdlLCAweDdmNjkzODk3LAotCTB4ZTlkY2YzMGIsIDB4MTc5ODJjZmEsIDB4ZmE1MWM3ZjMsIDB4MjA0OWQxZGMsIDB4MTg2NmFjNGQsIDB4OTFiN2NkZTgsCi0JMHhkOTc0Zjc5YSwgMHg2ODA2OWY0OCwgMHhhNTM0NzczZiwgMHg3ZDBkNmNjZiwgMHg4Y2YxOWQxYSwgMHgyMmJjYzIxZiwKLQkweDFkMjQ0MWY5LCAweDY1NzhjNTY2LCAweGQ2ZDlhN2U4LCAweGQwNmFjN2ZhLCAweDJlOGRkYjM3LCAweGYyY2E3Zjk2LAotCTB4NDBmOTIyZTksIDB4NDgxNjdjZDgsIDB4NTEwZTNlNmMsIDB4MDczOGY5YzQsIDB4ZWNiNWNmOWIsIDB4NGNmYTcwOTMsCi0JMHgwYzNmNmMyNCwgMHgyNTEyNWZiNSwgMHhmNDE2YjdlMiwgMHg5YjFmOTdlZiwgMHhiZDYwMjNiZCwgMHgyZDY2ZmI3ZCwKLQkweGNjMDYyZmIzLCAweDdkMjBiNDViLCAweDhiMmY3M2RkLCAweDk5YTJmODM3LCAweDQzYjg4MzVjLCAweDE2N2YxZDEyLAotCTB4N2E5ZWZmMWYsIDB4ZmNmNzg3NDYsIDB4NGI3NDgwZDAsIDB4Zjk4NDFmYTcsIDB4YjNmNWU2Y2YsIDB4ZGYzMGFiZGEsCi0JMHhmZDM0ZjY2OCwgMHhmZjBkMmVjOSwgMHhlN2JjMjM3NSwgMHgxYzczNzZmMiwgMHgwMmQ4N2FmOSwgMHg3MWI1NGE3MywKLQkweGIzZjdiOTg1LCAweGE0ZGRjNmI4LCAweGJkZjMwZjQ2LCAweDlmYjY4ZTY3LCAweDczZjFhNGI5LCAweDdiOWE5ZmM4LAotCTB4NTRmZGY2YmYsIDB4YzliOWRmNjcsIDB4Nzg4ZjEwMTEsIDB4YmRlMWRiODMsIDB4N2VjMGJmNzQsIDB4ZjE3ZTMzN2EsCi0JMHg3ZTk0NjU4ZSwgMHhhZjM0ZmM0NywgMHhkMzAzZmMwMCwgMHg2Y2Y3MmExMywgMHhiN2U3ZTVhNiwgMHg5YmYyYzI4ZiwKLQkweGQxZjgzZjA5LCAweDJiYmY1MGJiLCAweDIwZDNjYjA3LCAweDA4ZWMwYzE5LCAweDZmMjA4ZmQ4LCAweDNkYmRlZThhLAotCTB4ODZmYjhlOTMsIDB4OGNiYmY3OTksIDB4YTMzYmRiZTUsIDB4NjhiM2NkYmMsIDB4MmNkOGU3M2IsIDB4YzY5YzFiY2MsCi0JMHg0MmVmNGRmOSwgMHgwZGM3N2Y1NiwgMHhmYTFhOTY1NiwgMHhiOTdlODI4MCwgMHg3OWExNTE2OSwgMHhmMjI3ZmY0MCwKLQkweDc5MDA1MGZmLCAweDc4YjJkM2FjLCAweDUxZDVlMGI5LCAweGY4NDM3ZTUwLCAweDRkZDgxZTdjLCAweDA5MTY1NTNkLAotCTB4Y2M5ZDVmZTAsIDB4NzNhMzk5ZmMsIDB4MGE0OGUwODUsIDB4ZGU3NjY5OTcsIDB4NTc1YjE1N2YsIDB4YzkwYmMxNjksCi0JMHgxNWE2M2ZiMCwgMHhiYjQ2N2ViMywgMHg0MzY3ZDRhNiwgMHgyYzQ1ZGQzYiwgMHg2MjliMjRmNywgMHhmYmFhMWY4MCwKLQkweGZiOTM5OTZjLCAweGU0OWViODA3LCAweDE1ZmVmYmUxLCAweDcxYjUyN2Y3LCAweDQ5OGY1ZmI0LCAweDNkMTJjMTcwLAotCTB4ZmI0MTNmMTMsIDB4MzlkODU4OTQsIDB4NTMzYjhmMmMsIDB4NTRlODdmMDIsIDB4ZGM3M2NiMzcsIDB4MDJhYzhhYmEsCi0JMHhjZGViNjQ3ZCwgMHhhZDBkNjk2ZSwgMHg3YTIyNmE5ZiwgMHhjZTk0NmI5MCwgMHg5YjdhMDExZiwgMHhmNGYzZTEzYiwKLQkweDhiMmUyMDE4LCAweDNhNTVjZTk2LCAweGY3ZDJhNTlhLCAweGQzMWQyZDM0LCAweGU3MTNmOWZkLCAweGNmZTc2ZmY4LAotCTB4ZjczNjNhMWEsIDB4N2E1MGYxZDMsIDB4MWQ1NzlkMzksIDB4YjQ5YmJmZWUsIDB4OWM2ZmFhZjIsIDB4MzkxODdkODgsCi0JMHgwMWZjNTBlZSwgMHg2N2Y5YzJmZSwgMHg3MTVhZmNmZiwgMHhiNjQyYTViZiwgMHhjN2VjMzY1OCwgMHg2ZTNmNzUyNiwKLQkweDc0MThmODAzLCAweDI0ZmU3ODlkLCAweGMyOGQ3MDQzLCAweGU4NDM5YjAzLCAweGQyZmNlYTE1LCAweDMwNTkyN2MwLAotCTB4MjdmMDVlNzAsIDB4ZmIxZDdhYTksIDB4OWIxZDgwNzMsIDB4NzdlOWViY2EsIDB4OWZlZjYyNmUsIDB4MDVmZjFkMTcsCi0JMHhkOTZiN2ZlNCwgMHgzNTBhNzY3YywgMHhiZDcwOWY4YywgMHhhYjdmYjU1YSwgMHg2OWI2ZjVkNSwgMHhjNTE0NWJkNywKLQkweGMxM2I3YmNlLCAweGU5M2U4MTRmLCAweGYzN2Q1MWZjLCAweGE4M2MwNmJlLCAweDM5NzFmMWViLCAweGIxZTRjNzNkLAotCTB4ZWVkYWU4MWEsIDB4ZmQyMzk1YjYsIDB4NWZmODlmN2MsIDB4YTBlODdkMDYsIDB4ZTYxODdiYzUsIDB4ZWZlNzU0NzksCi0JMHgyMTYzZmIwMCwgMHg5MjVjNjM3MSwgMHhjZTZiYzdkMiwgMHg5ZDQyZmQzMCwgMHhhYTljMjQ2ZiwgMHg5MTlmZTA4NywKLQkweDRmODQ4OWViLCAweDUxM2FkZTNmLCAweDc3Y2Y1MzlmLCAweDFhZjdhZGY1LCAweDIxZWFhOWQ3LCAweDNmZDY4MzBlLAotCTB4MWNmZWU3NjQsIDB4MDBkZmY3M2IsIDB4MmUzYzgxNDUsIDB4ZDAyZTUxMjUsIDB4MDRiYWE3ZWIsIDB4ODk0YTI3ZDQsCi0JMHg2OTcwZjkwOSwgMHg3NmRmOTMwOSwgMHg1NDM3ZDMwYiwgMHhmZWQ0M2YzOSwgMHg4MjE2ZjViOCwgMHgyOTc0YTlmYywKLQkweGQ4YzllN2UxLCAweDMwZTkyMmJhLCAweDgyM2Q3NDkxLCAweGQ5NDk5ZTc2LCAweDM5ZjYwMGI2LCAweGZmNGEyNWU4LAotCTB4Y2MyZDRiZmMsIDB4YTljNTdiY2YsIDB4ZjFhZWY1Y2EsIDB4Y2FmYmQ3MjAsIDB4ZDc3YWU0MDMsIDB4ZjMzN2UwNzgsCi0JMHhhM2ZjNmQ0NCwgMHgyZmYzMGFmNCwgMHg3YzEwYWZkYSwgMHgxOTNlYmE5NiwgMHg1ZWRkNzIwZiwgMHhmODFlMzVkMiwKLQkweGVlYjFhZGQ2LCAweDFmOWYwMTJmLCAweDM2MWY5OGViLCAweDI0ZmE4ZTEyLCAweGJjNWZlYTlkLCAweGRjOGNmYTI2LAotCTB4ZTk1YzZhM2YsIDB4OTRkNzhiNGQsIDB4MWZkZmJlMzQsIDB4MmNlODQxNzEsIDB4MzhhZTQ2ODIsIDB4Y2RlZmY3OTksCi0JMHhmNGE2M2EwNCwgMHhmMjg5NzI4OCwgMHhjMTU3YWJjNywgMHg4MzdmODM5OCwgMHg1MzJjNzIxYywgMHgwOTJkOWJmOSwKLQkweDJlMDhkYmY4LCAweDhmOGMzZGM3LCAweGRiNzU4YjljLCAweDBkMWM1ODkzLCAweDg3MTBmMmUxLCAweDU3MmU3NGNiLAotCTB4ZDExMGVlMmYsIDB4OWRjZDNmOWYsIDB4ZGNiODM0ZmIsIDB4MjRmNWM3N2QsIDB4OGRkN2ZiODAsIDB4NWYwOTcxNzIsCi0JMHhhNTNhNDVkNywgMHhkMTdmYjQyMCwgMHhlMmM2N2E4YSwgMHgxZTMxY2JiNywgMHg4ZWFiNjIzMSwgMHg3MjcyNjEyOCwKLQkweDczNGEyMDY0LCAweGJkZThjNDdmLCAweDRjNzk0ZDc2LCAweGZkYTZiMjZiLCAweDlhNTk2ZDBkLCAweDI4ZTBmY2ZhLAotCTB4ZTNiOGZkNGQsIDB4ZjhmMjlhMDUsIDB4ZWQzNTFiY2UsIDB4YWM1MDdjMjcsIDB4YmFlYTRmMjksIDB4YTZmZWQzNWQsCi0JMHhjYTZiNjc0ZiwgMHhhYzEyMzAxNCwgMHgwMjgzYjlmYiwgMHg3ZGQ3NGVkOSwgMHhjZDNlZTg3MywgMHg3ZGJkZmZmNywKLQkweDBiODg3MWM2LCAweDMzZjZlMjllLCAweDczM2JiYmYxLCAweGE4MTYxYzI5LCAweDRjYTU3Yzc0LCAweDA4NTA1ZmRiLAotCTB4MDdjMDQ1MGEsIDB4NDY4MmRmZDgsIDB4ODUzY2Q3OTYsIDB4ZGZiYzJlNDIsIDB4N2Q1YTRkODUsIDB4NmQ1NmYxNjIsCi0JMHhmMzdkYTJiOSwgMHgwMzk1ZTA1YSwgMHg4YTZhMjFmMywgMHg2NDZjODhlMSwgMHg3OTM0YzQzZSwgMHg3NWU4MGViZSwKLQkweDJmZDUxMjc2LCAweDkxYzYzMDQwLCAweDFhYzdjODM4LCAweDFiN2ZkZjZhLCAweGIwYzg3M2ZlLCAweDZiM2ZjMzZmLAotCTB4N2E4MGQ1YmYsIDB4N2ZiN2UyZmQsIDB4YWZhNDE0NTUsIDB4ZmUyZDRlOGMsIDB4ZmYxNjhhY2QsIDB4ZmM1YWI5ZDEsCi0JMHhmYzVhNWQ1YiwgMHhlMmQ0NGVjNywgMHhlMmQ2ZTZkZiwgMHg4YjQ0YWUzZiwgMHgxNjhmNzhmZiwgMHhiNTczODlmZiwKLQkweDZhZjI0ZmY4LCAweGExNTI5ZmYxLCAweDhkNWE3ZmM1LCAweDJiMTlkZjE2LCAweGY0Y2NmOGI0LCAweGZmYmRhODNmLAotCTB4MmFmZjAyMjQsIDB4N2JhZWNjZmYsIDB4MTQ5ZWUyMjgsIDB4ZDE4NWQxMWQsIDB4MGI0NzRhODEsIDB4ZTc5ODE1M2MsCi0JMHhjN2U5YmMzMiwgMHhlOTIyNzE5YSwgMHgzYThkZGE4MSwgMHhkYThiODdiYywgMHg2Yjg1ZGI3MSwgMHhiZGNhMGZhNywKLQkweDQ5MWE1ZmQwLCAweGYxMjQ0ZjFmLCAweGIxM2IxODNjLCAweGVlZjk0NTVmLCAweDQwZjgxMjdlLCAweGYyYTE1ZWE0LAotCTB4MWUzOTcwYWQsIDB4YzUwZWZmNmUsIDB4MjdjODA2Y2YsIDB4MjkwZjBmNmUsIDB4MzYxZWMwOWYsIDB4NDNjM2RiZjcsCi0JMHg5MDg3ZTlkMSwgMHg1M2ZhODM4ZCwgMHhlZThiZmEyMywgMHgyZTNjZDk5NSwgMHhlMDQ5YWJjMSwgMHhmMjI1ZmQ1ZiwKLQkweDA0ZTkwZmJiLCAweDdlZjlkMjI3LCAweGUzYTFlYjA4LCAweDFhMzUxODdmLCAweDIwM2YxOGZkLCAweDdmY2ZkNDQxLAotCTB4NzQ4NzE5MDgsIDB4NzEyMDA3YjAsIDB4MTNlNzNlOTksIDB4NWNlNTlmMDUsIDB4N2VlNDJmNWUsIDB4ZGJkOWE3MGUsCi0JMHgxNmE5NzAwNiwgMHgzMDA5MTliZCwgMHg5ZTI3NmE2ZSwgMHhlMjI3MjIxZiwgMHg4NTVlZTlhZSwgMHg5NzZmZTA5MywKLQkweDdmMDZlOTA4LCAweDk4ZjY3ZDNiLCAweDUxOWM3ZDE5LCAweDI4OWI4N2Y5LCAweDk2NzgzMDhlLCAweDUxNzIxNTRkLAotCTB4MzBhMzE1N2YsIDB4ZmJlY2E4MGYsIDB4YjJhNWNhMDIsIDB4Y2VjZjYxZmYsIDB4NDcwN2E2MjQsIDB4NTBhY2Q3M2UsCi0JMHhmNWM0ZDllMSwgMHhmYzBmYTYwMCwgMHhlM2MyOTI3NywgMHg0MTZiYzQzMywgMHhlMDY0YjliOCwgMHhlNjNmYjRmYiwKLQkweGYzMTlmZWZmLCAweDQ5MjVkMTkzLCAweGVjNzhlYzU3LCAweGY4MGNmMTBhLCAweGEyNDFmMzg2LCAweDhjNzNjZDg5LAotCTB4ZTg1NzRjNDQsIDB4OGJjNGQxZmIsIDB4NDljN2RmZmEsIDB4N2FlZTM4NTksIDB4ZDYzMmIyODksIDB4YjdlODI4ZWYsCi0JMHhlZmEzYzYwYiwgMHgwNDVjNWJhNywgMHhkM2EyYmRmYywgMHhhYmZmZDA0NSwgMHhjMzJiMDk5NiwgMHhmNTViYWMxZiwKLQkweDdhNzJhNWViLCAweGNjMjU2M2Q4LCAweGU3ZTExNTdmLCAweDI3MjkxMTRiLCAweDNkMTU3Yzg1LCAweDk0ZWQwZjNiLAotCTB4ZjBiYjMyYjYsIDB4MThjZWFiOTgsIDB4NzkyYTJlYjYsIDB4ZWQ3ZTcwNmQsIDB4YzgxY2Y0ZGIsIDB4OTYxMzNkMmYsCi0JMHg1ZWUxNGUwZiwgMHgzZjFjOTgzMywgMHhhOGUyY2M5ZSwgMHg2ZTlhNTY2YiwgMHgwZjQ5Nzg4NiwgMHhiZTNkMDc4ZiwKLQkweGY4MGNkYzkyLCAweGU2MTcyNTE0LCAweDQxN2RjMTgxLCAweDBkZWZiMGI2LCAweGI2MWY1YTBlLCAweDQ5OGIyNGRmLAotCTB4M2M1YmQ2NTMsIDB4ZGFjNjU5NzgsIDB4MTc0ODM1OTUsIDB4ZDFhZjdlN2EsIDB4NjQ4N2Q0YmEsIDB4MjE3Zjk4NmYsCi0JMHg0YzRmOGY5YSwgMHgxMDI3MjI3ZSwgMHhiZmQyZjJhZSwgMHg1ODEyYTc0ZiwgMHg2NzRiMjhhZiwgMHg5ZmVhZjYzNCwKLQkweGRjMDE0NmFlLCAweGE5M2QzOGFhLCAweGU5M2EzNWYzLCAweGRlZWQ2MTM4LCAweDI1NTdmNGUxLCAweGZlNjAxYTc3LAotCTB4NzQxYzUwZWYsIDB4ZWE0MTNjNDIsIDB4NTZiZGUwNzQsIDB4ZmZiOGU5NzUsIDB4MzdmMGU0ZWYsIDB4OTA4MjE3ZWUsCi0JMHhlMDk0NmZmNywgMHhkMmY0MjY4YywgMHhkMjhlM2NkOSwgMHhmNDc3ZGFlOSwgMHg2YjI1ZTIwNCwgMHg3ZTQ0Y2ZjNywKLQkweGI4ZDdiMDY2LCAweDFlNGYwNWE4LCAweGVjYTE2NzdlLCAweGVhOWUwNDFkLCAweDJlOTRlOGQzLCAweDYxYTNmMzg3LAotCTB4OWUwZWRjYzksIDB4M2UwMDI2NDAsIDB4Y2EwZjk5MDYsIDB4ZjY2NTg3YTcsIDB4NTllM2MzY2QsIDB4M2ZjM2MxYmUsCi0JMHg0YzdmOTgyNCwgMHhhMmJmZDA1NiwgMHgxM2M0Zjg3ZSwgMHgxYjFiZjIxNywgMHhjNmNiZTEwOSwgMHg1MDAzNzQ5NSwKLQkweGE1NjFiNzFiLCAweGE4NzM3ODg5LCAweGE4MzUyMjFjLCAweDM3MTAyNTFmLCAweGZlNjM1MWQyLCAweGZkMzk1NzA5LAotCTB4ZWJmMDUyY2UsIDB4Mzc4N2IwNWMsIDB4MGQ1M2ZmOGMsIDB4MWY0NWFkOTQsIDB4NjFiOTQwNTUsIDB4OTBhZDhiZTQsCi0JMHhiOTgxNjQyYiwgMHgyM2JmMzAzOCwgMHhhMmI2NjcwMCwgMHhlZjdjZmQ0NiwgMHhlZjA3Njg2YSwgMHg0MjVmM2UyMSwKLQkweGFjZjlkM2RmLCAweDgyMWVkMzFmLCAweDBmNjNkMWY2LCAweDUxZjUwYTdkLCAweDliMjlhMDk2LCAweDNmNzUxNzdlLAotCTB4NDViMDQ5NzEsIDB4YjI1Mzg1NWMsIDB4NDg1NmQzZTksIDB4OGUyOGExN2IsIDB4NGY0N2RmZTYsIDB4YzY0NmZkNjQsCi0JMHhiYjJkMTIwMywgMHg5MzIxN2RkOSwgMHhiMTY3OGYwOSwgMHgxZmFhZWM3MywgMHhiYmIyZGUzZSwgMHhjNmY4MThhOSwKLQkweDUzZmQ2ZDMwLCAweDk2NzExZTFjLCAweDQxNjc4ZTk3LCAweGU3NjEyYTdkLCAweDkzZmQ3OTU3LCAweDc5NjZkZWJjLAotCTB4ZTU5OGIzYTksIDB4ZGZiZTY4MWMsIDB4YjU4ZmZiY2MsIDB4NTBiZjE4ZTgsIDB4YjFiNzhmMDgsIDB4ZGViYzRkZmEsCi0JMHgwOTNiZDZhYywgMHhmYWIxYTc4ZiwgMHhiNDZmNWU3YSwgMHhiYTEyZmNiMCwgMHhhZmRmMzVhZCwgMHhkYzI3ZTNlMywKLQkweDMwZGUyM2FmLCAweDg5Y2M3NGZhLCAweGZhMzBkZTIyLCAweDM1ZGE5N2IwLCAweDlkODViZDY1LCAweDI1YTc5NTIzLAotCTB4ZmI1M2JlNmIsIDB4MWI4ZjljN2QsIDB4ZjM0YjM5MzMsIDB4MjhkODY5OWQsIDB4MzRjZWZiNmQsIDB4NzEwZjIzOTQsCi0JMHgwYjUyMWIzOCwgMHhmOWVhZjUzNCwgMHhiM2E3MjI2YywgMHgyNzZiMzI3NiwgMHhmNGQ0NmUzOSwgMHg2MjUxNTE3YiwKLQkweDk5OWZmZjYxLCAweGNiYWRkMmE0LCAweDkwZmI3NDA0LCAweGUyMTEyYjM1LCAweGI5OTU4MWI0LCAweDFmMDE0NGEwLAotCTB4M2Y5OTRmZTEsIDB4NjY3NDc4OWQsIDB4Y2IwNTRhY2QsIDB4YjhiZmRjOTksIDB4MmM0NGU1NjYsIDB4MGI3NGE2ZWYsCi0JMHg3NGFjY2ZmNSwgMHgyZDI3Nzk2MSwgMHg1M2Y5ZjQyYiwgMHg1ODk1MGZkYSwgMHgwN2VkMWI2NCwgMHg3ZWQzNGZjYSwKLQkweGVkMTRmOWUwLCAweGQyNGY5ZTA3LCAweDMzN2VhMGYxLCAweDliY2EwZWZkLCAweGRlNTA3ZjY4LCAweGU1OGRkMmIwLAotCTB4YjA0YjJiZjUsIDB4ODNkMmJmNWMsIDB4ZTcyYjc1ZTUsIDB4OTVmMWYzZTIsIDB4NTlhZTdjNWUsIDB4YmJmNTgxNTksCi0JMHgzYmViODU5MywgMHgyMjQ4NWY3ZiwgMHg5M2JiYjllMywgMHhkZGU3ZjdjNywgMHgxNmRjZjFhYiwgMHhkNDc2ZTBjMywKLQkweDMyZmZjZTAxLCAweDg5ODhlNzg4LCAweGE1YzYzZmQxLCAweDhmNWIxYWQyLCAweGU3MTliZDgwLCAweDZhNDhmODYxLAotCTB4NWI3YWMxYWMsIDB4ZmQ0NzFiMDksIDB4MjRmYzM4OGUsIDB4MzMxZDg4YjUsIDB4NTk1MGZjNjQsIDB4MjMwZGY5OGQsCi0JMHg3MzE3Y2IwOSwgMHhjNDUyODlmYSwgMHg5ZmMyNWZjZiwgMHhiY2ZmNDIxNCwgMHhhYmU1YWI5NCwgMHg3MWY5MTE5OSwKLQkweDk5MjNiM2VhLCAweGIwZTI3OWQ5LCAweGM3MmMzNzFhLCAweDg0MTNkMTM0LCAweGNiOGI1ZTdjLCAweDMzYjFlNzhiLAotCTB4YTljZWQwYWUsIDB4ZTU3YjFjYmQsIDB4NWY4MGEyMTYsIDB4YmZhYjU0YmYsIDB4NjgxNWE3ZGEsIDB4NGFmMTQ0ZjQsCi0JMHhhNTMzYjYzNSwgMHg2NzY5YTdkZSwgMHhkYTY5OTQ3MCwgMHg1Y2M5MmQ5NSwgMHhhNDc4MDRlYiwgMHgxYjE4NzViMCwKLQkweGJkMTAxMTU3LCAweGUzMzc5YjBiLCAweDk5OTM2N2I4LCAweGViZDc0YmJkLCAweDNlZmJmZjQ3LCAweGViOTdhZDgxLAotCTB4N2NjYmNmNGQsIDB4ZTQ0NmE2YmQsIDB4YWM2YzIzYWIsIDB4ZDdlYjEzOTgsIDB4ZmYzYzNmMDEsIDB4YWZkYzU4YWIsCi0JMHg0M2EzM2RjZiwgMHgxMjQ4ZGZmZiwgMHg0NmJlMDFkMCwgMHhmNTBjZjE1MywgMHg5NjE3NDg2MywgMHg0YWVlMDA2ZiwKLQkweDExNDRmOWNiLCAweDg0OGUzY2ExLCAweDdhYTRiZWQwLCAweGIzMjU3ZmQzLCAweDY2MzNkMGI4LCAweDc5YTUwYjg4LAotCTB4MjNmOTY3OWYsIDB4MzkyYjk0NDEsIDB4YWEzOTFmMWMsIDB4OGE1NWI4ZmUsIDB4NGU5ZGE3ZjQsIDB4N2I1NmZiNDYsCi0JMHg1YjhkNDQ5ZSwgMHgyNTE2YjJhZSwgMHgzM2QxM2U4MiwgMHhiNDRmN2U0NCwgMHgxNjliYmVmMywgMHgyNzQ2Mzg1MCwKLQkweGZhYTdjNWNkLCAweDFiYTJiZDdlLCAweDU1ZTU3Y2Y0LCAweDRjZWZhZjBlLCAweDc3YzYwMWU3LCAweDZhZmNlOGMyLAotCTB4MGJiZmE1MzIsIDB4MGM4M2JmNzksIDB4MmMzZDUyMTksIDB4MWFmMGY2ODQsIDB4OTQxZmNhYmQsIDB4ZmQwZmUwNTgsCi0JMHhlNjJjNTc2NSwgMHgyMTI3YjQ3MywgMHhjMTk5NDQ3YywgMHhkZTk1YjllNywgMHg3ZmE5MjQ5YiwgMHhmOTk3ZTI5ZCwKLQkweGU0OWJlNDMyLCAweGJkYjY3Y2YwLCAweDM0ZGQ5NzJiLCAweGM3NWZlYTRkLCAweDVmYjYxNGU4LCAweGYyMmI0OTczLAotCTB4Y2U4NzVjZmIsIDB4YTczNWVjYzUsIDB4MGYzM2JlYzYsIDB4NzljMzcyNmIsIDB4NzExNDcxNWYsIDB4NDhjNDJlNDEsCi0JMHg1ZWU3ODRkMiwgMHhjODg5YmZjNSwgMHhiN2EzYzQ3ZiwgMHgxN2VhODUxMSwgMHg0MDgwNzI1MSwgMHgyZmRhODczZSwKLQkweDhmZTI3NmUxLCAweGMyZmNiZjM4LCAweDJkZTcwZDMyLCAweDk0ZjdhYmE2LCAweGY5YWY1MWI5LCAweDkwYzk3NjQyLAotCTB4YjM0NWYyY2YsIDB4NGYxMjNmMWUsIDB4NjU3M2ViNmEsIDB4NGE1ZTA3ZDcsIDB4NDdmNjhiOTcsIDB4NTE3YTYwYmIsCi0JMHg1Zjc4NGRiOSwgMHgyMDRiYjg5YiwgMHg4M2NlMDJhOSwgMHg5OWQ5YTdlNSwgMHg1YWRmYWE3ZSwgMHhlMGUzZmM0NCwKLQkweDJlMzdhZWQwLCAweGE1ZGFlMDA1LCAweGMyYTlkMDFjLCAweDhhYWJiNjllLCAweDNmMDZlYzMzLCAweDBiODAwOGQ0LAotCTB4MmU1ODczYzAsIDB4NWYyMTcxYzIsIDB4YWI5NWRlZWYsIDB4MTRlZTRlMTAsIDB4NjkzNWU3ODYsIDB4N2NmOWRjMmEsCi0JMHhmNzBkZGI4OCwgMHg1NjZhMmRiYiwgMHgzYWVkNWJlZCwgMHg3ZjE1ZTdkNywgMHgzYjZiZWEwZiwgMHg4YmQzY2M0NSwKLQkweDk4ODVlNzg0LCAweDI4NjI2M2Y3LCAweDMzNDZjYmEyLCAweGE3OWQwY2ZmLCAweGMxMjllNjFiLCAweGJlMDBlM2JjLAotCTB4NThiM2Q3MDQsIDB4NWNlMDA0MzYsIDB4NWFkMDhmNjYsIDB4MzFhOTcxODIsIDB4OTcxZTEyM2EsIDB4NTMzMzlmNTIsCi0JMHgyNzdhZmYxOCwgMHhiNDY3YzY1OSwgMHgwYjRkZGU3MywgMHhlZjk3ODVjNiwgMHhjMzFlYmE0NywgMHgxMjJjNGZkNywKLQkweGJiNzA5M2NiLCAweDVhYmY3MDk1LCAweGYwNjc2YTgzLCAweDNlMjhlYTNjLCAweGEwZmJiZWRmLCAweDJmM2NiMTQ2LAotCTB4MGFkY2U5MGIsIDB4ZDk0MzE3NzksIDB4NjE0YzNmMTEsIDB4M2I3ZWYyZjEsIDB4ZTgwNmEyODIsIDB4ZjMwOWJjNjcsCi0JMHg3Y2Q0MWExYiwgMHgwNTVkZTUxNCwgMHgxM2U5NmJmMywgMHg5YzRjNTFmMiwgMHhkOTU5ZDc0ZSwgMHhmYWVhMDQzZCwKLQkweGJlMzBhNjU2LCAweGEzZTM5MmI5LCAweDIyZWNjNGQ3LCAweDI3ZTRkYjg4LCAweDZmOWY5ZDg0LCAweDU4ZmI0NzJmLAotCTB4YjZmNGYzOGQsIDB4ZDU1MmZjYjMsIDB4NDljOTUwZmYsIDB4MDYwZGY3YTAsIDB4MjIxZGRlODcsIDB4ZGIyYTc3YzYsCi0JMHgwZWY3NjBlZiwgMHhmNzg5M2M3NiwgMHgxNGJlZDIzNSwgMHhkZTcyODdhMCwgMHg2YjRlYmNiZSwgMHhlM2Q4MmYwZiwKLQkweDBjYTUxYjU5LCAweGMxMTdiYmI0LCAweDAzZDlhYjdkLCAweDNiNDhlZGVkLCAweGFlMTRiMWZiLCAweDNlNDhiYWJmLAotCTB4MzU0ZTcxYzQsIDB4YTI4YjFmNjYsIDB4MTI2NDM1ZjMsIDB4MjI5N2JmM2MsIDB4NmVmNzg0YmUsIDB4MDliM2VkNTMsCi0JMHg3OTI0M2JlZSwgMHg0ODhmYmVlYywgMHg2YTkyYmZiYywgMHgxNWVmMzg0MCwgMHg1YTViOGYwOCwgMHg4ZWY3ZmU5MCwKLQkweGVmN2ZmYjY3LCAweDBlNzc4YjkxLCAweDkzZGNmZGE3LCAweDdlYTZlMGMxLCAweGNiMDY0Zjc3LCAweDA2MDdkZDMzLAotCTB4NGFkZjdkMTUsIDB4Zjk2MGM5NDgsIDB4ZGMzOGJiM2MsIDB4OWI5ZjMzYmYsIDB4NTU3M2U1YWMsIDB4YTJjNzVkNmQsCi0JMHgzYjc3ZTQxNSwgMHg4ZjdiZGU4MSwgMHgwZjI2MjVmZCwgMHhlZjA4NDdmNywgMHg4MzNmN2YyZCwgMHgwZGU2MDdjZCwKLQkweDc0ZmJmNDc5LCAweGE3MGJjZjlmLCAweDEyMjk3ZDgzLCAweGZhZWViNzlmLCAweGRhNjk4Y2Y0LCAweDdiYzg1ZDc5LAotCTB4MzY3NmUxMmYsIDB4NTc5ODU2YWYsIDB4NDI2NGYwNGYsIDB4M2FiNDdlNzgsIDB4ODNjNTdkYWYsIDB4ZmQ3Y2VmOWYsCi0JMHg5MTMzZTc3YSwgMHg1MDY4YTdjZSwgMHgyNmZkMWQzOCwgMHgwYzMzZWQzOCwgMHhmODBmOWYzZSwgMHgwZGUzZmU3YywKLQkweGMwYzBlZjc2LCAweGQzZDRlYmZhLCAweGVmYzA0NDc2LCAweDgwN2JjZWM1LCAweDdlZjlkMzVkLCAweDg0N2EwMjkwLAotCTB4NjMwMTNiYjMsIDB4YWQ3ZTFjNGMsIDB4MGIzZTljODUsIDB4YTE3MWRmMzksIDB4MWY3YzQ0NGQsIDB4YTRiY2MwNGQsCi0JMHhmYmQ1ODk1NiwgMHhhYjAyOGJlYywgMHg4ZWJhZmQyOCwgMHg3OTAwYzgyYywgMHg4OGQwZmQ2MCwgMHg4NmY4YzVmNywKLQkweDRiOGIzN2M4LCAweDk3ZDhlYjY1LCAweDg3MGEwYzJjLCAweGU0N2Y1ZTE4LCAweGI3ZjYxOTQ0LCAweDAxMjMwM2ZlLAotCTB4ZjVjYjUwN2UsIDB4YWI3MmY1ZjQsIDB4NTUwMWVlMDksIDB4MDJlNTA4ZTEsIDB4NDIxOWY0ZmEsIDB4MmU1MDVjOGIsCi0JMHg1OGE0YzJmYywgMHhjNzRmMTkwNiwgMHhiMTE0ZGJjNiwgMHhkNGYxZDQ2ZiwgMHg5NzM1MjlhNywgMHgzNzg1ZGRmOSwKLQkweGRlYTNjODQ0LCAweGJjM2RmOTM0LCAweGExNTM2N2FmLCAweDNiZjczYzg0LCAweDRiNTliZmMzLCAweGVmODIxNzJmLAotCTB4ZThjOWRjMjUsIDB4N2EwYTk0YzUsIDB4ZTYzYTcwOTQsIDB4MTNlY2I0N2IsIDB4MDNjZGJmNDIsIDB4YjhiYzE5ZjgsCi0JMHg0NjQ3ZGY3ZSwgMHg4NDBjMjJkMiwgMHgyZjRlMjVkMywgMHhmNWQ0ZmFlYSwgMHhkZWI2ZjNhYiwgMHhkNmYzMDBiYywKLQkweGYxMzAxZjAxLCAweDdhOWQ1NDk4LCAweGQ1ZjIxZTJmLCAweDYwZjcyZTU4LCAweDI2MjcyODVkLCAweDdkMGYyYzRiLAotCTB4ZGQ3ODg0YmMsIDB4M2M0NmYxMzQsIDB4Yzc4ZmIwMjcsIDB4MGM5MzQzOWIsIDB4N2U0M2RlODMsIDB4ZmQ3ZjFmMGIsCi0JMHgwNGVjZmY5NSwgMHhhZWRmZDVmYiwgMHg0NGQ5ZjNjNywgMHg0NWRlNzJlYSwgMHg4ZWY3YzhlOSwgMHg1MmJkZjc4NCwKLQkweGZiODEyYTdhLCAweGI4OWM4ZTY3LCAweGRkN2EwMzE4LCAweDg0N2FhOTRkLCAweDBmYzA0ZGYzLCAweDExNWMzZTQxLAotCTB4ZmY3ZjMwNGIsIDB4MThiMjE3YzQsIDB4NTM5M2ZmNDYsIDB4NzQ5N2FlNDUsIDB4ZmU1ZTQyNzYsIDB4OTc5NjAyYzYsCi0JMHg4MDdhZTE2YywgMHgwNTc3NDRlNSwgMHhmMTMyZGZjYywgMHg0YzIxNDZjNywgMHgxYWE1ZTZjZSwgMHg4NjhkYmJmMSwKLQkweGY2OGI4MjUwLCAweDQ5MTBlYmU3LCAweDJlODFmNTEwLCAweGVmYWI0N2JjLCAweGUwY2M5MWRjLCAweDA1NDg1ZDUwLAotCTB4NDdkYzFlNGMsIDB4OWFkN2VlY2EsIDB4M2UzMGFhOWMsIDB4ODA3ZGU3NGIsIDB4ZjkxYThmYmUsIDB4ZjUwZTVjODUsCi0JMHhhY2JjNzQ4NSwgMHgzMmFkZWZmZSwgMHg3OGQ0NjdjMywgMHhhNmM1OWY3NiwgMHhlMTkzYmZjOSwgMHg4MTU4YWVmZSwKLQkweGFmYjQzZGUwLCAweDc5MzVlYWE0LCAweGU4NjQ5ZmZhLCAweDlkOWRiZjc4LCAweDY1ZjliZmEwLCAweDViMDlmMzA5LAotCTB4NDA5OTBmODMsIDB4YzVmNzU3YWYsIDB4ODZkZDU0ZDMsIDB4ZmRmOGViNzYsIDB4ZTYyNmViYWEsIDB4ODA1Y2UwMDYsCi0JMHg0YTdmYzc0YSwgMHg2MTUyN2FmNSwgMHhiYzVmNzQ3ZCwgMHhhNzU3N2E4NCwgMHg0N2MyMmE2NywgMHhjOTdjODdjZSwKLQkweGVmMTNhNDMxLCAweDA2ODUyMTBkLCAweGFlNGJlNDE5LCAweDZmZDlhNzRlLCAweGVhNmYxYzJkLCAweGE4YTVlYTkzLAotCTB4NjljMjNjZWYsIDB4NjJmNzk1NTksIDB4MzllMDg5OGIsIDB4NjJiMzJiYTMsIDB4ZDMxNTJmNDEsIDB4MjVjZjNkNTQsCi0JMHg2Y2ZmMWMwMywgMHhlMWZhODM5OSwgMHg4ZDJkMzdkOSwgMHhmNTdjZjFlMSwgMHhiM2RhOWE3OSwgMHg3OTdmNDM0MSwKLQkweDAzMzNjYmExLCAweGRlMjIyZmRhLCAweDJlOGZhMGI1LCAweGU3MzUxNjZhLCAweDdkZjJjZmFlLCAweDE0NGFmMGJlLAotCTB4ZjVlOTg2MDksIDB4ODdkZTI3MGIsIDB4NWUxNjQ3ZTcsIDB4YWE0MTIxODksIDB4ZTdlNTlkMjcsIDB4M2NmMmNlN2QsCi0JMHg2NTRmN2Y5ZiwgMHhhZjgxYjJmMiwgMHg3NWVhNGI2NywgMHgwOGFlZmJlYSwgMHgwZmYzYjk3ZSwgMHg3ZTMxOTVjZiwKLQkweGY3MDBlZmY5LCAweDAwY2JhMTJhLCAweDhkZTM2ZTdjLCAweGZlM2NjMTdmLCAweDBmNGVkNGQzLCAweDNhZDM3Y2U2LAotCTB4NmMzMDQ4ZTMsIDB4NTc3NmJlOWMsIDB4N2U5ZWI4NGMsIDB4ZmYzODI4YmMsIDB4MTA1YWY1ZmUsIDB4ZmRhOWE3MGUsCi0JMHg0YzcwY2RmZiwgMHhiZmIxYzBkMSwgMHgxYzBkMmNmZiwgMHg4MzlmZjYwNywgMHg5OTVlOWZlMywgMHg4ZmZkMmRmYiwKLQkweDQ1N2ZhMjFlLCAweDdlZmVmZjMzLCAweDNkYjhlMTg3LCAweDhmOWVjYjQ3LCAweDY4ZTVmYmE2LCAweDU3ZjZmNTcwLAotCTB4YjBlZDVmMjEsIDB4MjcyZmVmMTEsIDB4NzhjNWFkNmQsIDB4MDQxN2U4OWUsIDB4M2YyZDk5Y2YsIDB4OTBjN2U1ZmMsCi0JMHhiNzdjYjY4NywgMHhmNDYzMDVjMSwgMHg1Y2YzNDNlYSwgMHg2MTg3Yzg4MywgMHg3ZGMzZjY0NCwgMHg2ZjczZWEzZSwKLQkweDI3YWUzNjZhLCAweDBhNDliZGYyLCAweDY2NmY5MGM4LCAweDU1ZTQ5NWNhLCAweDlkNjVlODBhLCAweDFmYjhkNTgxLAotCTB4NTQ5ZmM4NGMsIDB4NmZkYWI4M2YsIDB4OWVhODhhNmQsIDB4YWQ3ZGM1NjcsIDB4MTBkMGRiZGUsIDB4N2MwMGVkZWQsCi0JMHhlNmE1MTY3ZiwgMHg4MjM3ZjkxZCwgMHg2N2YyYWQxZiwgMHg4NWVlY2NhMiwgMHhhMjFkYTFiMywgMHhlMjI1YjFmYSwKLQkweDkxYTNiZjQ1LCAweGU1ZTQwODc4LCAweGRmNzg2NWU3LCAweDUzZmVmZTAwLCAweGFmYzAwNmNhLCAweGUzZDk4ZTJkLAotCTB4YjcyM2ZmNDUsIDB4M2I5ODM2ZjcsIDB4N2UzMGFlOWQsIDB4ZTk1NGZiZjcsIDB4ZDZmY2U0ZmEsIDB4ZmUzMzM5MDgsCi0JMHg0YzgyZTdmZCwgMHhlNjFlZmNjZSwgMHhmZTc2MjU1MSwgMHhmMjEzMmNiMiwgMHhiZGY4YmIwOCwgMHhlMzAxOGEzZCwKLQkweGYwYzc4NTA1LCAweGQ1MzJhZmJlLCAweDhjOGJhZjVlLCAweDQwZDlhNzVmLCAweGVlZmQ1NWZmLCAweDA0NGY5MDMxLAotCTB4OTY0NmMyM2EsIDB4Y2QxZTVkYmYsIDB4ODliZmU1Y2EsIDB4OTA3NTczYzMsIDB4ZjAwNzlmYzIsIDB4ZWM1ZDE1NmUsCi0JMHhlMTE5Mzc5ZSwgMHhhMWFmOTE3YSwgMHgxZDMxYjRkNywgMHhlMWNiZDllMCwgMHg3NWZkYjE3YSwgMHg2MmVlNTdiYywKLQkweDdmYzQ3MGRkLCAweGMxM2Y2YmY5LCAweDI1ZjZhMTdiLCAweDBlYTc3Y2YzLCAweDcyOWZjYTJiLCAweGVlMDhhYmEzLAotCTB4Y2M5N2RiMmQsIDB4Mjk1NmNjZjQsIDB4YTYxMDUzMTgsIDB4MmQ0YmFlNzcsIDB4YmU3YWJlNDYsIDB4ZjQwZWI4NmUsCi0JMHg3ZmFlMTU3MiwgMHhhMzYwZmNlNiwgMHg0MjkzZWZlYSwgMHgyZWJiZjA0NSwgMHhiZjgzMGJlNywgMHhkZmI3Zjk0NSwKLQkweGEyNjdiZjhjLCAweDExNjVmMDNiLCAweGQxYjc2ZmRlLCAweDE3ODJmNzg4LCAweDY1YjkxODFmLCAweGNhYWZhZDJlLAotCTB4YTU5ZTYxZDEsIDB4ZTcxOTgwZWUsIDB4ZGQ4MWExNzMsIDB4ODJkZjAzYWYsIDB4OTAzYWFlOWMsIDB4NTJjM2JmODIsCi0JMHgzY2MyMWQxZSwgMHg1NzI4YWFhOSwgMHhjYTQxYzQwZSwgMHhmNzg0ZGMwZiwgMHgzMGRhOWY3YSwgMHhlNWY4MWQzMiwKLQkweDFkMjU3OGM5LCAweDQwZGQzNWVmLCAweDdkZDc0ZTgxLCAweDdiMDQ2M2IyLCAweGNmMDEzZjVmLCAweDQ2Mzc1OWFkLAotCTB4NWZmMzA3N2IsIDB4ZjIyNDcyYTgsIDB4Yzk3ZDllZmUsIDB4MDA2ZDNkZjksIDB4ZDcyNjkxOWYsIDB4MmQzZTVhNmUsCi0JMHhlYjljNThiOCwgMHg4MmI2Njg3OCwgMHg5ZTE3MTY3MSwgMHg5Y2I3MmJkZiwgMHhkYmVmMWFmYiwgMHg3ZWU0ZmU2YSwKLQkweDQ4MWRlZjgyLCAweDE2MWRhYWI3LCAweDk3Mzk1ZTM5LCAweGExMGNmYjMzLCAweDM4N2JmMDc5LCAweGRjMzg2YmU1LAotCTB4YWI5ZjJjMGQsIDB4ODM5Zjk3NWMsIDB4OGRmNzBlNjUsIDB4ZTY1Y2Y3MTEsIDB4YWI3ODMxYTUsIDB4MjQyNzUzY2YsCi0JMHhjYThjMmZiYywgMHg2N2M4NzRmZiwgMHg4OGQ4NzUzZSwgMHhlMzZhNzY3NCwgMHhhYWFmM2M2OCwgMHg2MTRlNTc4ZSwKLQkweDc5N2RkMzIyLCAweDA1OGNhZWQyLCAweDYzNGI4ZWJjLCAweDBkN2NhYWZjLCAweGY3ZDUyZmIzLCAweDI1Y2RiYWU1LAotCTB4ODc1MGU3ODAsIDB4YmQyYmY5ODgsIDB4ZTIwNjI4NzIsIDB4YjUzYjZhMWMsIDB4NzY5ZWI3ZGMsIDB4NjVkNzdmMTEsCi0JMHhjNDExZjI1ZiwgMHgwMjI3YTUzNywgMHhjZDdiYTRmNCwgMHhmN2Q1ZjI4YSwgMHhlMDM3NzE5YSwgMHhmMTIxN2NmMywKLQkweGZlNWM4MzQ3LCAweGNlNGVmZDgwLCAweGVhMjMwZWQxLCAweDMyMWZiZGJkLCAweGZkYzA3NGJiLCAweDNhNTA5NjQ5LAotCTB4N2JlODFmZGMsIDB4NThmOTA1MmQsIDB4MTc2ODVhNmYsIDB4ZWNjZDkzZDMsIDB4YmQ3N2I1NWUsIDB4MmMzYzc4MTMsCi0JMHg5NjQ3ZGY4OSwgMHhlNWQ5ZmEwNCwgMHhmNDEwNzMwZSwgMHhmOGM0ZmEzMywgMHg3MWVjOWY4NiwgMHhkMWMzZmJlMiwKLQkweGY0MzZmYzA0LCAweDUzODU0MDE5LCAweGRmYzRlZmQ4LCAweGZjNGQyMDk1LCAweDdlZmM0ZWZiLCAweDA0NzdiYTc5LAotCTB4ZDllNWU1ZjAsIDB4N2MwYjdmYjQsIDB4MmVlZDhkZGYsIDB4ODA2Zjc5NjcsIDB4ZTY0YmZkMzIsIDB4YmY2MzI1ZTMsCi0JMHg3YzBjZGU2OSwgMHg2NGUxN2MyZiwgMHhjNGQwYTdiZiwgMHhkZWIxM2JlYiwgMHhjMDRlZjQ2NywgMHg0YWQxZmM3NSwKLQkweGU3NTkwNjVhLCAweDU1YmJkZWY1LCAweDc4ODcxNjljLCAweGUxNGRlNzU0LCAweDI0NWVmYThjLCAweDk4ZDI2YTVjLAotCTB4MjNjMmE0N2UsIDB4ZjBmYjJlOTIsIDB4MDNmMzJkZjksIDB4OTdjMDA5YmYsIDB4MzYzYzMzYjQsIDB4M2UzMDM0OGMsCi0JMHhmNTFhM2Y1MiwgMHhhNTFiNTI1YSwgMHhkNTVhMTNjOSwgMHhmNzYxY2VjMSwgMHg5ZTIyYjA2YywgMHhhN2VlZjU3YiwKLQkweGRlODUxZTQxLCAweGFmNzYxM2Q1LCAweGMwMDhkNTE1LCAweGYwNzEzMGJmLCAweGU3OGU3MmZkLCAweGIzZDY1NzA5LAotCTB4MmY3M2EyN2MsIDB4NmY5ZjRkOWMsIDB4Njc4YWYzODEsIDB4NTUxNWU3MzUsIDB4MjRlZDFmM2YsIDB4MTYyOGZjMDYsCi0JMHg5NjUzMTI5NywgMHgxMTZjZjRjNywgMHgzNzdlYzdlNywgMHhjMTVlYTM2NywgMHg2ZmYyMDdkZiwgMHg4NDdlODkxOCwKLQkweDAwZTUwNjUzLCAweGMzNTE4ZWZlLCAweDU1ZDAxZDE4LCAweDFlZjE4YmJkLCAweDlmNWIxMzdmLCAweDdhOGU1ZjdhLAotCTB4N2MyNDRkZWYsIDB4ZDliMmQzNWEsIDB4ZWYxMDkxZWYsIDB4ZjI4NzcwMDMsIDB4ZjAyNGEyNDksIDB4ZmZkZTFhNjAsCi0JMHhhMmZmMDE1NSwgMHhhNjE4YWZhMCwgMHgzZjkxOWI3MywgMHgxODVjYTBkNCwgMHhlMTk2Y2Y3OCwgMHhlODNmN2U1YiwKLQkweDNmYmNiNmZmLCAweGViM2FlMDlkLCAweDkwMThmZTVkLCAweGNjY2E5ZmFiLCAweDUzZDhhM2RlLCAweDZjOGJhZTUwLAotCTB4NjlhNzc4OWQsIDB4NGY2YmM4MTIsIDB4ZDYzYzVhNWIsIDB4NTRmYzNmMjMsIDB4OWYyYWY1NjAsIDB4YTA3ZWIwMWIsCi0JMHhkYTA3ZTgxNywgMHhhNzhlYmVkMSwgMHgzMjE5YmYzMSwgMHg4Y2E3YjgwOSwgMHg4ZjkwMGRmOCwgMHg5ZjI3Y2FhNiwKLQkweDNjZTBlOTIwLCAweDg5NGRiNzZkLCAweGFlZWM3YTAxLCAweGJkODNiNmNmLCAweDEyNTM2NjVjLCAweGMyZThjMjBhLAotCTB4NzNjMTA2ZjcsIDB4MzdkYzBhYTQsIDB4NWY3ZTAxM2MsIDB4ZmMxNjNkYzIsIDB4NWFlY2ZiNzUsIDB4N2NlNDQxN2YsCi0JMHgzNWQyOWE1ZSwgMHg3N2ZlYmMyZiwgMHhlZGZmNGM2OSwgMHg4YTI4ZmJlMiwgMHhkZjkwNjNjMywgMHgyZmJjNDI3OSwKLQkweDc3YWY3OGU2LCAweGZiNDE2Zjc5LCAweGUyZGRhMjMxLCAweDFlOWNiMWFkLCAweGJkMzdkZTIyLCAweGY3OThhZmZhLAotCTB4NGY3YjQzYjEsIDB4NzhmOGNmZGMsIDB4ZjgzNzFlOWYsIDB4MTllMDFiODUsIDB4MTViYWY5ODUsIDB4YWI5ZjE5OWIsCi0JMHhlNzM0YmI3OCwgMHhmM2M2NTY1MSwgMHgxZTVhNTNkNSwgMHg1OGUzZGZjNywgMHgwZTdhN2JiMCwgMHhmMTBiN2M2MSwKLQkweDgyZTNkMmEwLCAweGU4MGU3Nzc0LCAweGEyNmRhMTcxLCAweDYyYTJmYjBjLCAweGE5ZjM4OGFiLCAweGRiNGM5YTk3LAotCTB4NWIzM2ZiZTgsIDB4NTVkZmE4ZjUsIDB4NDk5Y2Y5ZjAsIDB4ZGUyMGM2ZjUsIDB4MjgxOTIyMjQsIDB4ZGU0OGNmZGMsCi0JMHhiNzVmZDQxOCwgMHg4OTFkZGZmMSwgMHhmNzZkMDc1OCwgMHgwODMwNTQ5ZSwgMHhjZjBjNGM3YywgMHg0MWVjOWYwOCwKLQkweDFkNWRlMGU4LCAweGZjMDE2OWUyLCAweGEzY2MxOTdlLCAweGU0YmY0MDQ1LCAweDAzZWYzNDk5LCAweDc2YTZlZTUwLAotCTB4ZGJmZmRlM2IsIDB4NTlmNzg5NTQsIDB4OGNmYmMyNDQsIDB4YjlmNDhiYzksIDB4ODU0N2FmOTgsIDB4MmEzOGU0NjcsCi0JMHg5ZTAxN2IzYywgMHhkZjFkMmZhMCwgMHhmN2NmNzI4ZSwgMHg0YjE0MDg5NCwgMHg0MjVmYjQ4ZSwgMHhjNzRhN2E3YiwKLQkweDgyNmY4ZmY0LCAweGRlYTk5YmY3LCAweGNkOWM4MGEyLCAweDQwMGZlZGZhLCAweGY4ODlkNWNlLCAweDFkNjUyNjdiLAotCTB4NDIyNDA5ZDksIDB4NThkZDgzNWUsIDB4MTg5Y2NlZjYsIDB4YWM5Yzk4NWQsIDB4N2UzMTE2NmYsIDB4NzY2YzNmNTIsCi0JMHg3ZjZjNDJjYywgMHhhZmEwNGVmMSwgMHhhMTJiOGE5MywgMHhlOGRkYWMyMCwgMHg4MTc4YmVmNCwgMHg5YmU1NWYwNiwKLQkweGUzMDMxYWZmLCAweDcxZWEzNDU0LCAweDdhNWUyYTVkLCAweGZmOTA5Y2U5LCAweGJmYTM0NTM2LCAweDg0MzUzN2E4LAotCTB4ZWE3OGFhZmQsIDB4ODNjMDZmYTMsIDB4ZGRiNDRmNGEsIDB4MWYzMmU5NWQsIDB4YThmYzhmYzcsIDB4ZTQ1YmQzM2IsCi0JMHgxNjRlODQxYSwgMHg4NWM3NDkzZCwgMHhmMTVhYjZmZSwgMHgxZDZiYzJmZSwgMHgxZjQ3ODU1NywgMHhjNmJlZjliZSwKLQkweDU3NzFlMDMyLCAweDc1YmZmYTI2LCAweDRjOTg0YWVmLCAweDY2NjliMjdkLCAweDcyZTNlYzNhLCAweGRmYzAyZjJhLAotCTB4M2U4NDJlNTAsIDB4M2IyNDdiYzYsIDB4NmIwZjc4OGMsIDB4MGYyNWU2ZjksIDB4MWZlNTc4YzAsIDB4ZGY1MDc1MWEsCi0JMHg1OGU2Nzg3ZCwgMHg1ZTA0NTc5YywgMHgwN2QyOWMyOSwgMHhjY2RlZjdhMywgMHgwYzJiYmE1MCwgMHhjMDlmNTQ3ZSwKLQkweDI3YWVhZGZkLCAweDBmMzhkZTZjLCAweDdkZTE0ZjZhLCAweDE0OTliZDI0LCAweDYwN2M2MTlmLCAweGJiZDMzYTc2LAotCTB4ODBkOTdiNjgsIDB4YzNlZWNkZjQsIDB4MWNhZjViZTksIDB4NjIzOTVlYjEsIDB4YTQxMWVmYmQsIDB4ZTJmMmUyNmYsCi0JMHg2NDdjMTY3YSwgMHgwNWZiYzFkNCwgMHgwMzkxZGM0ZiwgMHg4NmVlYjVmZSwgMHg2ZWFlYjhhOSwgMHhlYzJjN2JiYiwKLQkweGRhNzRlZWFmLCAweDcyZmMyMGZmLCAweDlkNzQxM2MxLCAweGNlYjBkZjc5LCAweDZiZTIzMzI2LCAweDQzZGE3NWM4LAotCTB4YWMzN2M4YmIsIDB4NTBlOWM3ZDMsIDB4NDk2OWU3NWQsIDB4MmJkZmMxODksIDB4ZjAxMjI4M2IsIDB4M2NkMmY4OTcsCi0JMHg2NTYyNmYxYiwgMHg5ZjI4OWRmYywgMHg2ZjgzZDE5ZSwgMHgzMWU2MzQ3MywgMHhmYmIzYjRmNiwgMHg0MDNlNTVjOSwKLQkweDdhNDZiYmM3LCAweDc0M2QyMWQwLCAweDI2NWIyYjE3LCAweDEwNmQ3ZDAyLCAweGVkOGJjODY1LCAweDViZjcxODZlLAotCTB4ZWVhZjFkZjgsIDB4N2EwY2EyOGQsIDB4ODMzMTc3NDIsIDB4MjgwN2U1MWYsIDB4M2RkM2JiYjcsIDB4YjBmOTYyNzcsCi0JMHhlYThmN2YxZSwgMHhkZjVmZDM1NCwgMHgxZGUxNzNjNywgMHhmYWUwODU3YSwgMHg0MmU3MWIzYywgMHhmODE3Y2U5OSwKLQkweDNkY2I4NTFhLCAweGUzZDU1ZjRjLCAweDllZWJlYmZhLCAweGZmN2E4M2FhLCAweGZjZjAxYmQ2LCAweGFjZjk0MGMzLAotCTB4YTM0NTczODUsIDB4NDQ4N2Q5YTgsIDB4ZGYzYzcwNTIsIDB4YWY3ODI5MTMsIDB4Y2E2NzBhODMsIDB4MWVjMDczNjEsCi0JMHhlNTAxZTE1MiwgMHhlMWZhNjMzOSwgMHhhMGU3ZTNlMiwgMHhmNzYwMmY0MSwgMHgwNjdlNzEyMCwgMHg3MjYyYzlmMCwKLQkweDAwODFjZTAyLCAweDI4ZjM4MzFmLCAweDQ4YWJjOTQzLCAweDQ3YTkxM2ZlLCAweGFmOGZiY2ZkLCAweDY1NzFmOTY4LAotCTB4M2UxOGVmYzQsIDB4MTI1ZTUxMTgsIDB4NDY5NjM3YzEsIDB4ZDQ0NTU3ZDQsIDB4ZTc3Y2Y5NTMsIDB4ZTRlN2ZlNjAsCi0JMHgyYjVmMmQwYywgMHhmZDU0NzBlMywgMHgwNDFiYmRhMCwgMHgyNGNiNDNiNCwgMHhjZmY2MDBjNSwgMHg3Yzk4NTM0YiwKLQkweGU5ODg5NzJlLCAweGVjOTdkYzE2LCAweDQ0OTk0YjdjLCAweGYwMDU4ZDZhLCAweGI3MDg2NWRlLCAweGI1N2Y2ODkzLAotCTB4NDcyZDNiNDYsIDB4ZGI0NDNlMzEsIDB4Y2FjMjE4OTUsIDB4ZTc1NWJmMmEsIDB4ODc4NzAxZjMsIDB4N2VjZWZjZmEsCi0JMHhlMzIxZDI4MSwgMHg4ZmE0MWYxNSwgMHgyOGFmMTgxZiwgMHg3NTdlYjMxMCwgMHg4M2FiZWMwMiwgMHhiZTk1ZGEyMiwKLQkweDIxZmM5OWI3LCAweGYyZGE1ZDVmLCAweDk3ZWUwM2EyLCAweDMwYmNjNmNkLCAweDcwOTFmZDc1LCAweDE0YmI2ZGVjLAotCTB4ZDdlYmJmMDMsIDB4ZTc4MGRjNzMsIDB4ZTNkYWNiOTMsIDB4YjJmZWQxOGEsIDB4N2I4NTA2ODcsIDB4ZGE5ZjVmMGYsCi0JMHgxNWQ0OGY1ZiwgMHg2ZjVjMmIzMywgMHhlMTMxNWQyNiwgMHhkNjVhYTNiZiwgMHhkODI1Njk3NiwgMHg3ZTdlMTRiMywKLQkweDlmOGY4YzMxLCAweDA2MmY4OGVhLCAweGQ3ZmNiMmJiLCAweDdlNzBjNWM5LCAweGRhYTE5NmQ2LCAweDFhY2ZjYWZkLAotCTB4MzQxY2RmNjEsIDB4ZTdhMjNmYTIsIDB4ZjgzYWI5ZWQsIDB4MGFlZGU3YmUsIDB4Zjc4ZTVjZmUsIDB4M2U5Y2Y1YjgsCi0JMHhjN2UzMGU5NSwgMHhmZWU3YjRlOCwgMHg1YjZmZGMwZCwgMHhkNzY0ZmJhZSwgMHgwZmZmYzBjZCwgMHgwOWFlNjYyNSwKLQkweGViOTczN2YzLCAweDdlMWVkMDBhLCAweDA3OWExZjUxLCAweDdlN2FhNmYzLCAweGFhNTdlNDFkLCAweDE0MzJkOGZkLAotCTB4ZjA3MWFmOTYsIDB4MGZlMDJlZWMsIDB4MTVhNjM2YTcsIDB4MzllOTViMDAsIDB4ZGZlZDAyMzgsIDB4ZTVjNzBmOWUsCi0JMHgyNDdmNjhjOCwgMHhiYzJmODBiOSwgMHgzMzk2NTdhOCwgMHhkYWVhYzU3YiwgMHgxZmRmZDk5ZCwgMHhjNjcxMDM4YywKLQkweDhhMTM4MzllLCAweGYzZDA1ZmMwLCAweDJkMmY5YjIxLCAweGI2ODBmZmEzLCAweGE1MWU0M2YzLCAweDRlOGM2ZmRhLAotCTB4ZGQ3OTA0ZDksIDB4YjQ3YWQ3ZTQsIDB4M2FmYTFlMjMsIDB4YjllZTExM2IsIDB4MWUwYzMxODgsIDB4NDFiYjAxOWYsCi0JMHgxYWJjZDc5YiwgMHhhYmRlYWRlNywgMHgyYzU3NjkxZCwgMHg0Zjk2MWUyMCwgMHhhOTdmNjExYiwgMHhkYTQ3NzNmNywKLQkweDY5YTQxNTg5LCAweGQwMzA5NzZkLCAweGI4OGFhNDVlLCAweGZiMDA5ZmM5LCAweDQ1NmJmZDVhLCAweGVmNjRiZjc5LAotCTB4YmVmNmEzNTUsIDB4OWZkZjNmNjIsIDB4NjVjN2U0MjYsIDB4YTAzNjNmNzQsIDB4ZmNjMDI5YmYsIDB4YTBlMjc1N2IsCi0JMHg2NWVmZDc3MSwgMHg5ZTNhZTI2NCwgMHhiY2RiZmU4ZSwgMHg5ZWJjMzBhZSwgMHg0OWM5MTFkNCwgMHg0MGQyN2FlMSwKLQkweGMxODJjZTRjLCAweGU5Y2JjNmVjLCAweGI0MGQ5ZjYwLCAweDFmYTJjZjE3LCAweGJlZmMzY2EzLCAweDZlZDAzMjMwLAotCTB4YzAxYzU5M2MsIDB4MGQ5M2JkYmMsIDB4YzA5ZWZlMjIsIDB4OTE4ZGRhZjUsIDB4OTdiZmFiZGYsIDB4MmMyMGM5ZTAsCi0JMHg2NzcyMTkxZiwgMHgzNzY0ZGZlZCwgMHhjMmFiZTc2YiwgMHhjNzdmY2NkMywgMHhlMmZkYjIyMiwgMHhjYTM3MTYwYywKLQkweDZlMjQ1YWZkLCAweDdhMWRmN2Q4LCAweGRkMTNiZjNjLCAweDFmOTZjNWYyLCAweGViYjY3ZDAwLCAweGUzMDU0Y2U1LAotCTB4MGI3YmY4MmIsIDB4Zjk4OGEwZTQsIDB4YTdlZGJkN2YsIDB4MzkwNDFlNjIsIDB4MWUxYzcwNzMsIDB4ZDc5M2ViMjMsCi0JMHg5MzhjNDUwNywgMHg0YTVkYjRmNCwgMHhlZDBhNzg4MCwgMHhiZWM2ZTMwNywgMHg0MDVjYTc4ZSwgMHhlM2NkNDNiZiwKLQkweGZhZjEwY2QxLCAweDA4ZWVmOWZjLCAweDFmOGYyOGJmLCAweGM5OWNiNGY3LCAweGY5NGVmZTAxLCAweGIwMTlhM2UwLAotCTB4ZTJiZTczM2YsIDB4MTU3NTZjZjcsIDB4ZjlkMWZkMDEsIDB4MWJkZWZlYTEsIDB4YTVmYThjYjgsIDB4ZjQxYzVkYTksCi0JMHgxOWY1YWFmZSwgMHhjZmUzZWI4NiwgMHg4YmYyMDMyNSwgMHhmN2M0NjdkNiwgMHgwOTVhYjNjZiwgMHg3ZWNlNDAxOSwKLQkweGI0YzUxZTViLCAweGMzNTcwYjgzLCAweDRkYmQzM2ZkLCAweGI3N2YwYjgyLCAweGI5NDQ1ZGI5LCAweDNhM2RhMGI1LAotCTB4NGNiYzUwYTAsIDB4NzJjMTYxMWIsIDB4ZWU3NjRlZjksIDB4ZjkzODg2NjMsIDB4MmU2ZmYwN2QsIDB4N2ZhMjIwZGUsCi0JMHhmMmNiNDhmMywgMHg2Nzk4ZjVmNywgMHhlNTgzMjdhMSwgMHg1ZGU3ZjQ2MSwgMHhjNjE0N2MzYywgMHhkYzE0ZmM1OSwKLQkweGM0ZmY0MzEyLCAweDZmZDAwZGZiLCAweDgxMDJkM2U1LCAweGNjODg0YTlmLCAweDc3OTgxOGJmLCAweDE0NGYzNWQxLAotCTB4YzA1ZGU2MDcsIDB4NjkwN2U1ZjksIDB4NDY2ZDE1YmYsIDB4M2MwZmFmZjQsIDB4MWJjODQwZWYsIDB4MjFmN2ZkMDksCi0JMHhiYzZmMGVlNSwgMHg5ZjZkMjhlZiwgMHhmOTYwNjJkYiwgMHgzZTM1NjY3ZiwgMHgwZWY2ODVkNSwgMHhkMGYzYjIwOSwKLQkweGE3NGYwNzNkLCAweDg3N2QxZTAzLCAweGIxZmQwN2ZlLCAweGQyMGZlZDQzLCAweDBlM2NmMmNlLCAweDU3ZGZiMDY2LAotCTB4ZDJmYWZkY2MsIDB4ZGE0MTllOWQsIDB4OGIzY2YyMzcsIDB4MzI3ZjdhYmQsIDB4NWI0N2IxZTgsIDB4ZTgzZjIzMmUsCi0JMHg2Y2ZjYzgzZCwgMHhmYzRmZjY0MywgMHgwYWVmZTY2NiwgMHg1NzBmZDE5YSwgMHgwZWRmMmFkOCwgMHg4M2VhODRmYiwKLQkweGVlZGY1ZWIwLCAweGQzNzdiM2I1LCAweGJkNTVmOWIyLCAweDZmOTVhYTAyLCAweDBiZjcwNWI4LCAweGRmZjA4ZmVjLAotCTB4YzlmNzUyMDMsIDB4NTNhNzFlNWUsIDB4NzkxYTQ3ZjMsIDB4M2Y5YThkYmUsIDB4NDQ5M2U2YTIsIDB4MjdjZDQzY2UsCi0JMHg3YzYxNGM2OSwgMHhmM2MzMmYyMywgMHg5NDViZDAwMSwgMHhlNzdlY2ZjZSwgMHg2OGNmMjIzMywgMHhjOGExYmNhOCwKLQkweDcxOTEwNzczLCAweDhhZTI0MTgyLCAweDQ2YzBhZjJjLCAweGM2YTA2ZTMwLCAweGJlNTQwZDE3LCAweDMxZDY0N2MzLAotCTB4ZDA2NTM3YjMsIDB4MjI3YmZkN2EsIDB4YzU0MzRmZGEsIDB4MWM3NWQ1MWIsIDB4Nzk4NjUxMzksIDB4OGIyZjU1NTYsCi0JMHhiMGJmYWZlOCwgMHhiY2UzY2Y1ZiwgMHhlOTQzOGMyMSwgMHhjODYxN2M0ZiwgMHg3ZWNlN2U0NCwgMHhjYjQ3Yzk1ZiwKLQkweDU5MzdkZWYwLCAweGQyOGVmY2QyLCAweGU3MWUxYzU3LCAweGQ5ZjA3MjMzLCAweDk3OGZiOTIzLCAweGU0N2I3ZWQyLAotCTB4ZjVlODAzMzIsIDB4NGEwYjEzZmEsIDB4OWRlOGRlNDAsIDB4ZDc5ODA2NjUsIDB4YTZjNTEzOTEsIDB4NGQ5YmMwNGMsCi0JMHhiNmIzN2RjMiwgMHg1M2I3MWQ1ZCwgMHgzZmZmZmU4NiwgMHgxZjAxMmE4MCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkYjVmZjAwLCAweDU1OTQ1YzBiLCAweGU3NzlmOGRhLCAweDM4MGMyYjlkLCAweGE1MTE3MjgwLAotCTB4MzgwYTBlZTEsIDB4ZGI5NTkwMmEsIDB4OTc4NDI2OGUsIDB4NGQzMmQ0NWEsIDB4ZTU0NTA3NTcsIDB4ZGI2OTgwMzIsCi0JMHhjYmJhZWVlNywgMHg1YWNkNGQ3OCwgMHhiNWFjYThkZCwgMHhiY2MwYzFiZSwgMHgxYTE2M2I2MCwgMHgyNWEzYjYxNCwKLQkweGI2OGI5NTk5LCAweDNmOWI1Yjk5LCAweDAyODZmMzI4LCAweGZmYjlmNTYyLCAweGNmZmViZjZkLCAweDNhZjM5Y2YzLAotCTB4N2U5ODhlZjMsIDB4YmY2N2RmYmIsIDB4ZGU3Mzg3N2UsIDB4NzNjZTdkNzMsIDB4OTMzOWNmM2YsIDB4MTk2ZTM5YTYsCi0JMHg5ZWIxOWZkMywgMHhjYWRiMmQxYywgMHhjODdiM2IxOCwgMHg2MzBkODFiYywgMHhmN2ZjMDdlYywgMHhhY2YyYzY1MywKLQkweDE4MDM2MzEyLCAweDMxOWFiYWZiLCAweDNlNTdkZWFmLCAweDdjODFmYjNmLCAweDAyZDhjMTk2LCAweDMxNjM1OGU2LAotCTB4MzMyMzVhNDMsIDB4YmZkMTkxYWYsIDB4MWQxZmIwMWYsIDB4ZjI4MWVlOWIsIDB4OTg4MzU3ZjksIDB4NWRhZmMyMzcsCi0JMHhiNjNkMTRmNCwgMHg5NDM1N2Y5YiwgMHgzZDQyNDc3OSwgMHgzNjc3YWYxMywgMHg0ZjI4NTIwNCwgMHgxODcyZjFjMCwKLQkweDlkZTkxMmNiLCAweDZlZGYyZDIyLCAweGViZjY5Y2IyLCAweGE2MTNjMmJmLCAweGM1MzU1N2NhLCAweGY5YTc0ZTU4LAotCTB4NDdmOGU1ZjIsIDB4NjM2ZmZjMGMsIDB4OThjOTE2NDYsIDB4OTc2MjdmOTMsIDB4ZGI3NGZjNWUsIDB4OTEzZjQ4NWMsCi0JMHg1ODU2MDkxYywgMHg5ZWQ0ODU1NywgMHhiMTBjMGY3ZiwgMHhlZjU3YmEyNiwgMHgyZDNhZTMzMCwgMHg2M2YyOWJjYywKLQkweDVlNjA4Y2ViLCAweGQ1YWU3MWJmLCAweGY1YTQ2YWJiLCAweDI1NjZlMGY4LCAweDZiZDZmOWI4LCAweDVkN2MzODI2LAotCTB4MzgxMzdkMWQsIDB4ZThlMGFhYzYsIDB4MDU0MTNmZWIsIDB4NGZmYmViYzcsIDB4YWViZmYxYTEsIDB4ZmY0OWJiNGUsCi0JMHhiZmQwNmY0MywgMHg1ZjdmMzU1NSwgMHhlZTM0NDliZiwgMHgwYjBkMGNhYSwgMHhhNGY0ODZjZCwgMHg1ZTAwY2RjMSwKLQkweGNiMjM1NTAwLCAweDFkODBjYzY1LCAweDc5NTY1NGMxLCAweDY2YWQxOWM3LCAweDc1MjU3YjVmLCAweDZjYjE3MWIxLAotCTB4OTQ2ZjdjMTQsIDB4ZmRmMGRjMGIsIDB4MjVhZTY1OTIsIDB4OTg1ZDUyMTksIDB4YTFkYmIxODYsIDB4NzA1ZWNlYmQsCi0JMHgwODZiZjQxNywgMHg0MTcwOGYwYiwgMHg4OWFjMTMzZiwgMHhjMmVmYWViNCwgMHgyODMwMTUxNiwgMHgwOGYwNmVmZiwKLQkweDgzOGYxNWQ5LCAweGZjYzQyYTJjLCAweGYyYzU0MWFhLCAweGUzN2YxYzdhLCAweGI1ZjcwYzczLCAweDBmYzdjOGNhLAotCTB4ZmMzMzJmZDksIDB4YmEzMGVlY2UsIDB4Nzc3ZWExOTMsIDB4Nzk5NmM3Y2IsIDB4MDZkZmNlMzAsIDB4M2VlMGU2MzksCi0JMHhjOTA5ZjMyYiwgMHgzZWUxOTc3OSwgMHg2ZGM3MjZiMywgMHgzZDhjMjE4NSwgMHgwZGFjNjE2ZSwgMHg1MGY2ZGFmMywKLQkweDcyNWVhZjVjLCAweDQwNWRlN2ZjLCAweDA2YWZlYzBmLCAweDc3YzkwZjU2LCAweDI1YWE0NzI2LCAweGNhYmVkN2MzLAotCTB4MDFmOWE3YWEsIDB4NjhiMmM0MzUsIDB4YTUwZDVmNWMsIDB4MDg1NzRkNTUsIDB4ODkxNmQ2Y2UsIDB4YWY3Y2E1ZDYsCi0JMHg3NzA0M2Q2MiwgMHg4ODUxZTU4NiwgMHg3ZDJiNWE5MywgMHgxNmE0NzI2ZiwgMHg3MWU2ZmE2NiwgMHhjY2Y3ZmZhZCwKLQkweDlmZDAwZDJlLCAweDQzM2ZmZjYxLCAweGRhZGQ5ZTExLCAweDkwNmRmYjllLCAweDYwZTQ1YTdhLCAweDExYWVmODdmLAotCTB4ZjA3NjM5NzQsIDB4NTBlZDU5MzcsIDB4ZmFlZDg5NWUsIDB4ZGJkOGY2MzEsIDB4ZjMwY2E5ZTUsIDB4OWMyYzllODYsCi0JMHhmZmI3YzFmNywgMHhlOTBlZDU5MSwgMHg2ZmNiZmI3NywgMHg1MGVkZjJjMywgMHg2ZWY5MGFkZiwgMHhjZGE1NGY3ZCwKLQkweDY2MjRiZmFmLCAweGY5NDY2OTcxLCAweDBmYjE2YWQyLCAweGY3ZGJlNTgxLCAweGYzODgxY2FmLCAweGRjYzFkMDY4LAotCTB4YTU5YzYxYzMsIDB4NDc0ZjIzNjUsIDB4OWZkODNhMjAsIDB4YjViODQ3OGUsIDB4ZWMzZDU4ZTgsIDB4NTRkMzU3NDcsCi0JMHhlNTRhZjkxOSwgMHg0MzA1OGMyNywgMHhmNjE5YmIzZSwgMHg4M2Q5ZjIwNywgMHhmYjAzNWI5OSwgMHg5M2ZmYjk1MywKLQkweDk1NWZiOGU5LCAweDA2OGI3YTM5LCAweGJjMzQxMjk2LCAweGJlMDJiZGNkLCAweDJkMThlNTA3LCAweDJjNTNlMjEyLAotCTB4ZWNjZjVmMWYsIDB4ZmI2MjI1OGMsIDB4YjdkYzA4YmMsIDB4MmEzMTA2MzcsIDB4NDFmOTk3ZmYsIDB4NmJkYmM3MWQsCi0JMHhiYzdiYzBmYywgMHhhYmM2MDFiMiwgMHg0N2VmZGI5MCwgMHhhMTdjMDAzZSwgMHhmMmE1ZjExZSwgMHg2NjhlNmZhMywKLQkweDRmNDZiMTU4LCAweDc4Y2ZlZTI0LCAweGQwZjgxNzFjLCAweDM2OWZhMmM3LCAweGFjMGVlMTZiLCAweGZiZTBmZGQ3LAotCTB4MmRlOGIwNmIsIDB4ZjVjMGUxYzksIDB4YjY4YzYyYjgsIDB4NjhjZmM0N2EsIDB4YmYxNGMyNzcsIDB4YWFjZDdkN2QsCi0JMHg0ZmYwZjZhMSwgMHgyMjFkYmM0MiwgMHhhMDdiYmFlNiwgMHgyMjU4NzE2NywgMHg0NzBlZTVmZSwgMHgzMGQyYTg3YywKLQkweDM2NDNmMjA3LCAweDA3N2E4MDA5LCAweGU2NjE2NWUyLCAweGU5ZWJjYzk0LCAweGQ0MTViMThhLCAweDdiNTZkYmRmLAotCTB4NTdjNzM1YjMsIDB4MzM2OTkzZmYsIDB4ZDA3ZDFkMzMsIDB4YzEyYTYyMjEsIDB4MDQ3OWVmNTMsIDB4NjE1M2Q5ZTcsCi0JMHg3ZDg1NmRiNiwgMHg4MjdlMGJmOCwgMHgzMzRmMmY3NiwgMHg1ODUwZTU3OCwgMHg1NmJjY2U4ZiwgMHgxOTNhM2MwMiwKLQkweDAwNzViYjNjLCAweGQ5YjU3ZmFjLCAweDczYWUxZWYxLCAweGQ3ZTM0M2ZhLCAweDE4M2E1ZTYwLCAweDc4OGM1ZDYxLAotCTB4OGI5ZWQ0NTksIDB4NzI2ZDEyZmIsIDB4M2JlMzgwN2MsIDB4MjJkYjhlOGQsIDB4MDY5Nzg5NjEsIDB4YzFmYjUyM2IsCi0JMHgwOGMyYjM1NiwgMHg5ODU2NmYwZSwgMHhmY2U3ZDg1OSwgMHg3OTdjN2NmOSwgMHg1NGI4NDFhNiwgMHgzNmY0YjgwOCwKLQkweDdjNDNmNjI2LCAweDVmYWQ3YWVkLCAweDc0Zjk4MzE2LCAweGNhMDk1ODY5LCAweGRmMzEyZTg3LCAweDk4OGYyMDczLAotCTB4NzEyZTlmMWYsIDB4NDExN2QzMWYsIDB4NjNiYWQyZmQsIDB4ZWI3ZWI5ZmEsIDB4ZWVjYzYwYWYsIDB4ZmM3ZWI4YzksCi0JMHgzMDFmYjg4YiwgMHhmZmQ3ODVmZSwgMHhhMWFmZGRmOCwgMHhmNzZmY2VhYiwgMHhjMDA0YjBhNSwgMHhhZDIyZTkxMywKLQkweGM3MWRiYmViLCAweDlkZjU4YjY2LCAweGQ2M2ZmNWM1LCAweDg3YTcxM2RiLCAweDA3M2QzOTc1LCAweDg4N2Y5Y2Y0LAotCTB4NTI3YjY5ZjUsIDB4NWQ3ZDZjN2UsIDB4YzI3Y2I2OWEsIDB4YTU5MjdkOGIsIDB4YWVkN2RlM2UsIDB4N2U1OGYxYTIsCi0JMHg0OTdiZTAyYywgMHg5OTA4ZDg1ZCwgMHhlMjBhNTllMywgMHgwNjFiYTk1OSwgMHhhNTViYzNmMSwgMHg4YjNlMDUxZiwKLQkweDVkZWJiZjA1LCAweDE0MTNlMDJhLCAweDVhZjI4NTlhLCAweGZlMzI4ZjgxLCAweGNjZjgwMGE5LCAweGUxZTRmNmQ2LAotCTB4MGIyZjY2M2MsIDB4ZWE3ZTcwZDMsIDB4YmU1MWZjMjYsIDB4MWVhYTU5Y2YsIDB4MzBlMjI1NzcsIDB4MWJmNWNmY2MsCi0JMHg2NmYzNGRjOSwgMHgyYjg2ZmYzYywgMHhmMjFlYmRjYywgMHhiZjk1Y2QwNiwgMHgyMWJkNDU0YywgMHhiZDQzNjM1MywKLQkweGYwMTA0YjYxLCAweGZkOGMxMTgwLCAweDhiY2ZlYzU5LCAweGUxOGMxZmMwLCAweGNiMTZiZTU0LCAweGZiNzg4M2EzLAotCTB4ZWUzNTY3ZTgsIDB4NzBiZWQwOTUsIDB4ZTFlMTMzNmMsIDB4OWI2Njk1Y2IsIDB4MzExNTYzMGMsIDB4ODUzMGFjNjAsCi0JMHg0N2FlY2M3OSwgMHhlNjNkN2ZiOCwgMHg2MWRiZmIxZiwgMHgxZGUyODM5ZCwgMHhmZWIwZjE1MSwgMHhiODlhMTEzOSwKLQkweDFjM2NkMGJmLCAweDljMDMyNzQzLCAweGM3MGU2OGQ4LCAweGMyMDdiODQwLCAweGU4YjMwYTdmLCAweDM2YzY1ZmIwLAotCTB4YTdlZTkwNjgsIDB4ZTY1MmY4NTgsIDB4YTc4ZTljNGIsIDB4YzcwZWJiMzIsIDB4YTgzOTkwN2IsIDB4YmQyZWYxZGUsCi0JMHgxYzFkMDE5ZCwgMHgzMDYwZjQwNywgMHg4Yjk4ODdlZiwgMHgzNzMwNjdjYSwgMHg5Nzk5MzNhNSwgMHhiNTljZmZlYSwKLQkweDAzYTE1ZTUzLCAweGZkMzlmZmMwLCAweDhkOWZmZTM5LCAweGIyNmYwOTkyLCAweGM3YmUwMWUyLCAweDJmMDZiMzgyLAotCTB4N2U0Yzc1ODUsIDB4NjE5OTM1MmUsIDB4MDgwMzM1OWYsIDB4Zjc5YjM3M2UsIDB4YjFjMzg5NjQsIDB4MWRiOGVhY2QsCi0JMHhmMDViZGZkNywgMHhkMDM1NGJlZCwgMHgyNWU4YzY4ZiwgMHgyN2M2YmJmYywgMHg3ODEwMGRjNiwgMHhhMjdjZTNmOCwKLQkweDA5ZTM5N2FkLCAweDA2Mzk4MzkwLCAweGQ4YWY3MGUwLCAweGU1ZWQ3YmQyLCAweDhjYmQ3MDkzLCAweGZlOWU0ODU5LAotCTB4OWU1ZmQwNGMsIDB4YjNmZDY2NmMsIDB4NmRkOTdjNzEsIDB4YTVkOGI5YzAsIDB4YmU0MjQ2OGYsIDB4ZDZjYzhjNjAsCi0JMHg1YmRlM2NjMywgMHhiZWRlNDhjZSwgMHgxMzc2NWMzNywgMHg4NjlmMjBhZSwgMHg3ZThiZjdmNiwgMHhiYTk5OGQyNywKLQkweGNiZDQxZmFhLCAweGRiM2RiZWZmLCAweDIwYzE2OTBiLCAweDdlZWQ5N2RkLCAweDdmYmUzNWY4LCAweDQ4MzBhYWVkLAotCTB4Y2JhOTI0MjcsIDB4MmQzNmIyMjcsIDB4MDY1Mjc1YzIsIDB4ZjNmMWZiOTQsIDB4ZjVkNWIzZmIsIDB4ZTE5OGUwMGUsCi0JMHgyMzI4ZGI5OCwgMHgwZjhjY2RmZCwgMHgxODI2N2ZlOSwgMHg5MGQ4NDNiMiwgMHhiZDFmNjQxZiwgMHg5ZGU5ZWIyOCwKLQkweDBkZGY0NTc0LCAweGVmMTBkOGYzLCAweGIyZmI4Yjk4LCAweDY3YWZiZWY4LCAweDJkMzNiZDIzLCAweGNhMjQ2OGZiLAotCTB4NWQ3Y2EzYTksIDB4MDBkZDAyNWYsIDB4ZDVkM2IyMDYsIDB4N2U4MGQxMjAsIDB4ODgzZTgwY2UsIDB4YjdhMDczZjksCi0JMHhkYWExN2E2MSwgMHhkMDQ1ZTk0YSwgMHg1NzdiZjBiMywgMHg5ZWYyOGRiNSwgMHhlYzcyYzJmOCwgMHhjYmRhZWU3NywKLQkweDRlMDY0NzVhLCAweDZkZjA4NTJiLCAweDM2YjdjMDg5LCAweDhjMTM1NzhkLCAweGIyNTViNGY0LCAweDYyNWM3Y2ExLAotCTB4MGMxYjFiNmEsIDB4MWY1MjViZjAsIDB4NjcxZDgzNmYsIDB4NTY5ZTRkNjUsIDB4YjdiMTdlOWMsIDB4NzViNzFmMzAsCi0JMHhhZDQ1ZTFjMSwgMHgwNTVjNTY5OCwgMHg2Y2JkMDc4YywgMHgxZmY4NWNhZSwgMHg3ZjVkMDc4OCwgMHg3ZGRhNzJmOSwKLQkweDdhYjY3ZTUwLCAweGJlN2Y4ZDE0LCAweDc3ZTM0ZWRhLCAweGZhNTAxNzU2LCAweDM3ZTNiYzdlLCAweDRiN2IwZjM4LAotCTB4MTU4NDZiNDcsIDB4ZTEzMmU1NzcsIDB4MWQwZDdkY2IsIDB4ZTdjODU4ZGEsIDB4ZDIzYjI1ZDksIDB4ZTY3NmRkZTEsCi0JMHg2ZDNkMDM3NiwgMHhiNWI5NzFkNiwgMHhkMjE2ZTQxOSwgMHgyOWNjOThlNSwgMHg1MGNhM2UyZiwgMHhjNzFlMzhhZSwKLQkweDUwOWMxZWYxLCAweGRjZmQ4NzlhLCAweDhiNDhhYTNmLCAweDllZmExZWY1LCAweDFmNzg4OGIxLCAweDhmMGNkZGRlLAotCTB4YmY1ZjAwNTksIDB4Nzg0NGI2ZjQsIDB4ZmQ2MzQ5NzgsIDB4YWU1OWVhMTksIDB4MGJlOTMyMjMsIDB4MmE5ODVhYmQsCi0JMHg3MjdiZGZmNCwgMHg3YjA1ZGI4OCwgMHg2MjZmNzhiYiwgMHhjNWI3ZjIxNCwgMHhiODU0NmIzYSwgMHgwY2ViNWYxZiwKLQkweGJiOWQ2YmUwLCAweDk3ZjY4ZjZmLCAweDllZTE5ZDc3LCAweGJlNDMzZWVmLCAweDRiZTcwNWY0LCAweDVlNjczM2IwLAotCTB4OGU2NWJlNDAsIDB4NzZmZWUxYjYsIDB4ZjQwNGJiMDksIDB4Y2Y5NDYwYzksIDB4NDc0MTdhOTUsIDB4ZGYzMDU3YzAsCi0JMHgxNGU2YzQxOSwgMHhkNWY3M2U0MiwgMHgxNzQ4YjFkOCwgMHg3Y2FhMWUzOCwgMHg3OTQ5ZGYwYSwgMHg1Zjg0YjlmNSwKLQkweDZkZTM3ZDViLCAweGVjZmZjY2Y3LCAweDcyNWZjODA1LCAweDkwM2E1YzZiLCAweGE3OTg5NzUzLCAweDU3NWM0ZGViLAotCTB4ZmE4NmQ5OWQsIDB4MGRhNDlhNjMsIDB4ZWE3ODRhNWEsIDB4OTM0YzNhMjYsIDB4YzBhNWRhYWMsIDB4ZmFiYzc2NTcsCi0JMHgzMDNmYzBlMiwgMHgxYjE4MWJkNCwgMHhkYWRmZGYwNSwgMHhlNzdjNGMxNCwgMHhkNGVkOWQyZCwgMHgyMmZmNmM1MiwKLQkweDUzY2FmZjZmLCAweDA5YjJmY2JmLCAweDQ2MmIyN2QzLCAweDNlZjExMmZjLCAweDVhZTA5YzNlLCAweDIxZDJmYmZjLAotCTB4NjM0MzY3ODgsIDB4YmZhMDFiNjEsIDB4NWU0ODZmNWQsIDB4OTk2MzE2NTMsIDB4YzQ1NjA3MzUsIDB4NmQ4NjdjYzAsCi0JMHg4NDBjZDBlOSwgMHhiNDlkNzg3NCwgMHgyMWExZDMxMiwgMHhmODY1ODcwNSwgMHg5NWJjNWVmZSwgMHgyMWIyMzFlNiwKLQkweDcyNDU4ZTVlLCAweGVjZmVlODE5LCAweGE4N2ZhNGE3LCAweDlhOGM5MmY1LCAweDMyMDc2M2NiLCAweDQ0MzI3ZTlmLAotCTB4N2RjMDVjZjIsIDB4NjI3MjE5NTksIDB4YjYzZmM5MDQsIDB4ZGJkOWZhOTEsIDB4OTllM2Y1MzIsIDB4N2NkMDBlYjQsCi0JMHg3YTQ1ZGU3MCwgMHhiNzBiYzkxYiwgMHhlY2YxMTZhYiwgMHg0NmNkMjM5MiwgMHhlYmExN2FmYSwgMHg0YmRmZGM3OSwKLQkweGNhMWI0ODhlLCAweDU3MWE3ZDhmLCAweGZmNTg5ZGU4LCAweGY5ZDY5Njk0LCAweDUwYjFkZDQ2LCAweDM1ZmJlNDFkLAotCTB4YmUwOTk4ZWEsIDB4MjFlZjBjNTcsIDB4ZDgzMTU5YjksIDB4YzFkYzcwY2EsIDB4ODA1YmRkMmYsIDB4ZGM2Y2E5ZjAsCi0JMHgzOGZkNGI1YiwgMHhlYTA5MzY4ZCwgMHhkMmJkZWM5NSwgMHg4ZDk0NzI4YSwgMHhjNDY0YjY2NywgMHg3ZjllNDZhZiwKLQkweDg2ZGQ5YzYyLCAweGY2YTRiNTcyLCAweDJiNmY5ZTViLCAweDU4MjE3Y2E0LCAweDNmYWM1YTEzLCAweGNmNjllYjhmLAotCTB4ZGFjNTM5MDksIDB4MTE3Zjg4YjMsIDB4ZmI3ZDVhY2EsIDB4YzY3YzA0ZjUsIDB4NWRlMzliZWYsIDB4M2VjYzhiMzEsCi0JMHhlOTcyMDZmOSwgMHg4YzU5ZDIwMiwgMHgxYjZmYjc5ZSwgMHhlMDhlMzMzYiwgMHg0OTcyOGI3MiwgMHgzZDM5ZTdlOSwKLQkweDRlNTA5OTczLCAweGFjZmNiOWVhLCAweGY4ODE3ZTA3LCAweDE3ZmZmZDAxLCAweGQxYzhhZmY2LCAweDZjY2E1OTU4LAotCTB4M2VjNzc1ODQsIDB4YjRhZGIwNjcsIDB4ZDMzOGZhZGUsIDB4MzkyMWFkZmIsIDB4NTU3NWU4YWEsIDB4ODk1ODVmNDIsCi0JMHgzNmZkYTA1NSwgMHg4MDRlNDNiMywgMHhiOTBiZTY3MSwgMHgwY2Q2YjRjYiwgMHgzMTllNDNkNCwgMHhhNDA5YjVkYiwKLQkweGEzZGU4MWQ3LCAweDRjNjY3OTIxLCAweDA2NThiZDQwLCAweDRmZDEyZjNkLCAweGRmODczM2NmLCAweDM2NmIzYzkyLAotCTB4ZmRiMTQzZGIsIDB4MmZlZmQ2YWQsIDB4MzE1N2Y5ZTYsIDB4NDQ0YjQyNGYsIDB4MzFjODU3NDgsIDB4ZjIzZGUwM2IsCi0JMHhhMTI3NzY0ZSwgMHhlYjAzNTdhYSwgMHhlNzkwNzAxYiwgMHg2ZGZhMTIxMywgMHg3YWJhMDU1YSwgMHhmYTk1ODI1MiwKLQkweDdjMTFmODAxLCAweGNhMTllNzYxLCAweDI0M2NhNTA5LCAweGI4NDFlMzliLCAweDQ3ZmE0OGMzLCAweGUxYTJjNDU0LAotCTB4OWFmMGZjOGIsIDB4MTEyM2JkNjksIDB4NWJmZmViMGUsIDB4YmZhODRhZjYsIDB4MWJiMzNmZmQsIDB4YmU3MDI1ZjEsCi0JMHgzZmRjMDk0NSwgMHhiOTg5MGJmMSwgMHg5NzU3ODgzNCwgMHg0NWFmNTRmNSwgMHg4ZmViYmVkNywgMHgzNGE1YWVkMCwKLQkweGVkNzY4NmMzLCAweGQ4MjFlNDNlLCAweGY0OWVhODRmLCAweGU2MTA5NmE5LCAweDk5Njk3YTQyLCAweDdkNDZlOTFjLAotCTB4YTdiNDJkZWMsIDB4ODg2NjFlOTAsIDB4N2M0NjI2ZjYsIDB4NDBjNjY1YmEsIDB4MGQwMzg3ZTIsIDB4ZjM1YzE4MDAsCi0JMHhhZjZmMDM0YSwgMHgyNjQxZjQ1YiwgMHg5NjNjYmZmNiwgMHhjOTRhYzdlNCwgMHhmNDgxMzZiZCwgMHhjYmU0OTkzNSwKLQkweDZhOGZjMTQ5LCAweDY1MzNiY2MyLCAweDljYjlhZjI4LCAweDkzOWM3MGMyLCAweDYxNTY5NzYwLCAweGEyMjA5MmJkLAotCTB4N2IzMDlhYmIsIDB4N2RkN2YyMGMsIDB4ZGYxMzJkZmYsIDB4NzkwZTE5YWIsIDB4ZjIyNWYxMzMsIDB4YjY0Y2Q0YzcsCi0JMHhmZTQxODRjNywgMHgzNTFmYjE2MSwgMHg2N2ZhZWViNSwgMHg2OWM5YmZiMSwgMHgzMjgxYWViNCwgMHhlMmY1NDQ1YiwKLQkweGU5OWYzZjc5LCAweGZkYzczYjc4LCAweGRiZDQ1YWMxLCAweDIwYzUwMjQxLCAweDRlMjg1ZWZjLCAweDJhMDdjODY2LAotCTB4NDRjZWM2MTMsIDB4ZjdlYzUyYmMsIDB4MjhkZjgyZTksIDB4NjMwMzYzZmQsIDB4ZmM2M2VhMmUsIDB4ZjVmOThjZGYsCi0JMHgwN2FiYTQyNiwgMHgyMDFkNGM0YiwgMHg5MmM5ZDgzOSwgMHhiZjY4MjExNSwgMHhiZDkwZTgzZSwgMHgxZTViZDQwNiwKLQkweGQzNWZiM2M4LCAweDdmYjAxMjBiLCAweGIzYzI0Y2ZiLCAweGYyN2VjNTYyLCAweGJkYjg0M2NlLCAweGViNjQ2M2RkLAotCTB4N2Q4NDdmNDksIDB4ZGYxZWJjY2QsIDB4MjI2MzNjMmEsIDB4NTJjN2VkZmMsIDB4ZjM5N2E3MDMsIDB4ZDc0ODJmMzgsCi0JMHg3MTRhM2IwNywgMHhlMzRkNTVkZSwgMHhjYWVkZmMyMywgMHg4NzU3ZjMxOSwgMHhmMThiZGQxMiwgMHgyM2RiNTYyZSwKLQkweDVlYTEyNzRlLCAweDMyYTk0MDUwLCAweGMxNGUzMjllLCAweGVhNWRhMzE0LCAweDgxOGRmNjhmLCAweDQyMzlhYWY0LAotCTB4NzgzMmFkMGYsIDB4NGRmZDIxYTcsIDB4YTMxZTM5MzcsIDB4NjQyZWNhNzEsIDB4N2ZkOGJlYTEsIDB4OWMzZjVhNGEsCi0JMHgzMmZiZjc3ZiwgMHgyNTNkM2M0MywgMHgzMjE0ZjVmNiwgMHg0NWE3YzQ2YywgMHg0YzJmODQyMSwgMHg4ZWJmMWRlNCwKLQkweGY0MWNmZDIwLCAweGM3MzdjMjFhLCAweGRlNTI4NmVmLCAweGNjYzdiN2ExLCAweDFjNWNmYzQ3LCAweGNhNzFmODRjLAotCTB4NzI5ZmJmYzIsIDB4Y2Q3ZTExODYsIDB4ODdmOTVkZmEsIDB4YWE3YmUwMGMsIDB4Nzg3ODRmNTAsIDB4M2YyNjQ1YWEsCi0JMHhjYTk2ZGZjZiwgMHhiOWMwM2Q1ZSwgMHg2N2Q1Y2E2YiwgMHhkNzVkYTA1MywgMHgzNzcyYWZiMiwgMHhlMmJlZGE0MywKLQkweDNmOTQzOGYzLCAweDRjNTQ1NmIzLCAweGNhYjM3NmMyLCAweGZjOGZkZDk2LCAweDNkNzQ0NmY5LCAweDQ0MTA2OWNiLAotCTB4MzViNmUxY2MsIDB4ZDcxMWJlYzEsIDB4ZDVjYTdmZDksIDB4MDNjYmU0N2MsIDB4Y2ZjZjlkY2IsIDB4MDk4M2YyODcsCi0JMHhjZjg4Njc4ZSwgMHgxMTJiZGJlOCwgMHg3ZDZmOTUxZSwgMHg3M2ZhODcxMSwgMHg3YjJiZjM3NywgMHg2ZGZkMjE1YSwKLQkweGZhNzllMzg4LCAweGY4ZGVlMmJlLCAweGIwOTlkOGQ1LCAweGIwYjUyYWJmLCAweGI3M2Y4MDVmLCAweGM0NWUzYTI3LAotCTB4YmNlMzU1ZWYsIDB4YTJlZWQ4MjksIDB4ZTExZjJkYWUsIDB4OWFkZDk2YzYsIDB4YTVhMTdkZGUsIDB4NzY4NDlmN2UsCi0JMHgyNTRiNTA2MCwgMHgwYjNiYjJhNSwgMHg3OTI5ZDFlNywgMHg4NDQ0YTU0MywgMHhiMDBiZTgyMywgMHg2ZjE2OGJlZSwKLQkweGI5ZTIxODY4LCAweGI3Y2JjM2QwLCAweDUzNDdkN2FiLCAweDA3N2UxNDhiLCAweDkxZWU1NzY4LCAweGIzZDIyNmVkLAotCTB4NmY5YzdhZGQsIDB4Mjg3MmZkNjAsIDB4NThiNzdhYTcsIDB4YmMzY2M2NWUsIDB4YTllOWFjM2MsIDB4N2I3ZWY4YmIsCi0JMHgxNzlmYjBiZCwgMHhjNTZmMjQ3NiwgMHhmN2I0YmVmZCwgMHgzYjdmMTQ5NSwgMHg3ZWJkMzAzOCwgMHgxN2ZkN2NiZSwKLQkweDhlMDBiZjExLCAweDg3NDRhMTE3LCAweDUwNjBkNWY4LCAweDNiNWQ3ZmQ5LCAweGQ1Zjg1NDYyLCAweGJkZDUyM2I1LAotCTB4NzYyZjhmZGUsIDB4NmNjMWJlMDksIDB4ODhjOWRjOWUsIDB4MmU0Zjc2ZjcsIDB4OWYwYTU1ZWEsIDB4MTY0ZjQ2NjAsCi0JMHg5ZTY5NmZkOSwgMHgxNDU3YjQyYywgMHgzZDBhYzMzZSwgMHhmNmVlNTQyOSwgMHg3ZGZkNjBhNCwgMHg3ZDlhY2Y2OCwKLQkweDhhZWQ5NmUzLCAweGZkY2Y1ZGFkLCAweDM2NGQyZThlLCAweGM1NmU4N2U2LCAweGNkZWZkMmJjLCAweDU5YmE5N2Q2LAotCTB4YmJhN2NhYWYsIDB4MDlkM2Y5ZDUsIDB4NzNiNjlmZGMsIDB4ODNiMTVlYTcsIDB4MzA0NzYxNjUsIDB4NTY4ZmIyYWIsCi0JMHg1YzExYWZhZSwgMHhlMDU3YWFmZSwgMHgyZTZjNjhmMiwgMHhhZmUwMGRmYSwgMHhlNzM3OWEwNCwgMHhkZGI5M2JlMywKLQkweDIzYjg2ZmJjLCAweDYyYTlmOTE2LCAweDgzMGJlZjlmLCAweDUxY2EwNjdjLCAweGFmMjU2ZjNlLCAweGRlNzAyMWMwLAotCTB4MjBiYWZlMmIsIDB4OTY3YmZkMTYsIDB4NGU1MDhkNDQsIDB4M2Y4ODUxNmMsIDB4MmY5YzRkMmIsIDB4YmU4MWQ0YWQsCi0JMHg0OTc2ODE5YSwgMHg1YWQzYzhjOSwgMHhkMTZjNTdiNCwgMHgxYzFmNWFjNSwgMHg2ZTFlNmMxNiwgMHhiODVkM2E0NCwKLQkweDFmZDFiODY1LCAweDFmNmU1NjFmLCAweGYzMGFkODc5LCAweDZiNWRiOGJjLCAweGQ0YWYyOWMzLCAweDdkNDI5ZmJhLAotCTB4ZDk3NmU1NmMsIDB4ZGRmNDYyZTMsIDB4MTdmYTg3NjgsIDB4NjI4ZjA3Y2QsIDB4Yjg1YjA1YmQsIDB4YmY2OTQyOWYsCi0JMHg3NDRlNzM3MCwgMHg4NzNjZGZiMSwgMHgzM2MzNTc2ZSwgMHgwZmNlYTNkMywgMHgwN2U3NTI2YiwgMHhmMzkxYWVhMiwKLQkweGRjMzc2ZjNmLCAweDNjOGZjZWFiLCAweGZkOWZjZWFjLCAweDEwZDNhM2NiLCAweGQ3NjQ0YWVkLCAweDg3ZWEzMjUzLAotCTB4NDYxZmU3OWYsIDB4ZGY2ZTcxYjksIDB4ZGZlNGExMWIsIDB4MTViOGEyZjksIDB4OWI4NWRlZjUsIDB4N2Q4NjcwZDUsCi0JMHg3MDFmNTA5MywgMHgyZTQ4OTM2ZCwgMHhlOTAzYmE5NiwgMHg2NWJhNmZhMywgMHhkN2UyYjk2YywgMHg5M2M3ZjM0YiwKLQkweGQ1NmFlNjMyLCAweGJmNWY1ZmM2LCAweGQ5YTY3OTkzLCAweDc0YjQ4ZmQxLCAweDIzZDNjOGYxLCAweGUxZGVmZDdkLAotCTB4N2I0N2E0ZDksIDB4MWJkYzcwMjcsIDB4ZGIzMzI5ZDEsIDB4MTY1ZjY4YWQsIDB4ZWVkZmUyOGQsIDB4N2Q5NjNhNWMsCi0JMHg2ZDg4MjIwNSwgMHhmODhmOTYzOCwgMHg0NDg0ZjQ1NywgMHhmNWU4YjZmMiwgMHgyZjkxNzdkNCwgMHgzMTk5ZWM3NywKLQkweDA1NjlkMjgxLCAweGNmYzUwZjA0LCAweGYyNDViMGIyLCAweDMyZGU0MDg2LCAweGZjZWRlMzhhLCAweGMxOWI5MmNkLAotCTB4MzJhZWU3YmMsIDB4YzU0MWZjYTgsIDB4NThmM2Q0MWIsIDB4YmVmZWEzNTAsIDB4ZGZjMGU5YjAsIDB4YzRiZmU4MjUsCi0JMHhlNTFlOTJmOCwgMHg0MzE2Yzk1NiwgMHhmZGNiMWY4MCwgMHg2NWUxZWEwZSwgMHhkOWQ5MThlNywgMHgxODNmNzU2NSwKLQkweGNkNzNmMmZhLCAweGJhZTFkNjU3LCAweGI4ZmFlMTliLCAweDA3ZDNlNzhhLCAweGY4MDY2MzRmLCAweDg1N2VmZWY4LAotCTB4ZmVhMTEyMzMsIDB4MzJiNTM1OWQsIDB4Mzk4MmFkYzIsIDB4OTIyNGIzMWUsIDB4ODYwZGU5OWQsIDB4N2QwMDJjNzksCi0JMHg5MDY5ZjUwOSwgMHgyYmFlYjRiNywgMHgwZGI5ZmI5YiwgMHg0Y2NlNTRmMSwgMHhiNTg1N2U1MCwgMHhiZTFjYTJlNSwKLQkweGUzNjIxOGQyLCAweDVjYjZiMGZlLCAweDQyMTdlNDBiLCAweGMyNTZlMTFlLCAweDljN2MxMjM2LCAweDhlNjU3ZmM4LAotCTB4ZjliZjc2MmYsIDB4ZTdmOTNlZTIsIDB4OGZhZTQ2ZDksIDB4MDNkZWI1M2IsIDB4ZDY3Mjg3MDgsIDB4ZmY3MGVkNGUsCi0JMHg2MTM5ZWJmYywgMHg1MWMzMjc1ZCwgMHhjZjY4MDhkZiwgMHhhZjBmZTQ2YywgMHhkZjY5ZWIzMiwgMHgzMDdlOWFhYSwKLQkweGVjNTc3ZmY4LCAweDUxMmVjNTAwLCAweDU5ZmY2ZGZjLCAweGUyMTA3MGY2LCAweGZlYzk2YWY1LCAweGQ0YzY1MWJjLAotCTB4ZjExNWE3YmQsIDB4NzI0Y2Q0YjgsIDB4Y2U1YWUxZmUsIDB4ZDlkMDZiY2YsIDB4NmNkN2ZkMDIsIDB4ZjM3ZDI3NGEsCi0JMHg4MjllYzk2MSwgMHg0YzliNjVlYiwgMHgxZTgxMDc2NCwgMHhkYjNhYmYxOCwgMHgzZTgxZDdhNywgMHg5ZmExMzJlOCwKLQkweGJkYzgzNGI4LCAweGU3MGZiZjE1LCAweDhjY2Q3OWY2LCAweGRlMTdkMjE0LCAweGU0NWUzYzkyLCAweDM4NjdhZWMzLAotCTB4ZTY0Y2Q0YmQsIDB4NjRmMzUzZjgsIDB4MGNmZjdkMGMsIDB4ZmE4MzFhYTcsIDB4NmE0YmQ3MjIsIDB4M2Q3MmE1MzYsCi0JMHg2MGYzZTY1NiwgMHhmZTIxMGJiZiwgMHhlNjJmMTM1OCwgMHhmMzRhYzAzNSwgMHhjOWY1ZjQ1MiwgMHg4OTczYzcxNiwKLQkweDVlMmNlYjdlLCAweGY0MjQ3YTAxLCAweDk5NWJmYzVmLCAweDk1ODI5ZmExLCAweDNjOTJkYzQ0LCAweGFhNzIxN2FmLAotCTB4OGRjOTkzNjcsIDB4NTJkM2VlZmUsIDB4M2Y5ZTJiNjEsIDB4MTNkZmIzNWMsIDB4MWRjZmRmMzksIDB4ZWEyNmRmNmIsCi0JMHg1OGJjNWY5MSwgMHg0ZmZkNzkzMywgMHgzNTY3YmM3MSwgMHg3ZWYxOTVkNiwgMHg1M2RiYjdmMCwgMHhiZDNmY2Y1MCwKLQkweGY3MDIzNGM5LCAweGNlNzBkNGU5LCAweDcyYzc3M2I3LCAweDI1ZDgwMWJmLCAweGVlOTBhZGY2LCAweGZjYThkNDQ5LAotCTB4YjkxMjdiYWIsIDB4ZDEzZmIwOWQsIDB4M2NlOWU5NGEsIDB4YzkwYzQ3ZWUsIDB4MGNmZjI0MmUsIDB4ZjFmMTE1ZWMsCi0JMHgxN2VjNzVjMCwgMHg4NWY1OGFlZCwgMHhjN2QyN2U0NywgMHhiMGY4MTQ3YywgMHg0ZTdmN2M3MSwgMHg1YzkxMjIzZiwKLQkweDU4YTRmNTg0LCAweDdiZmI5ZjIwLCAweDRlNzVmOTEzLCAweGVjYTJmOTBiLCAweDBlNTFlMDBiLCAweGJmYzE1YmM5LAotCTB4NDlmYzQ1OWUsIDB4MjdmMDE0YzQsIDB4NTFmYzJmYmIsIDB4NjBjM2M3ZTMsIDB4N2YxMDk4ZWYsIDB4MWY2ODNmMDAsCi0JMHgzMjdhZmMxNSwgMHhmMDExZjY5MywgMHhlN2ExZjA4NywgMHhmMDBkZDM0OSwgMHgyODVmNmQ0NywgMHhlNWE5YWRlYiwKLQkweDVkYTA0N2Y2LCAweDMyNzBmODAxLCAweGEwYmNlZmQxLCAweDA0MjdhYzI2LCAweDNjMTRiN2NmLCAweDhlNzc1YTYwLAotCTB4MjA1YTM5ZmYsIDB4ZTZjOWU0MWUsIDB4NGJlZmU0MzQsIDB4ZWExYjIwYTQsIDB4N2Y4NDRiZGQsIDB4NDY3Y2M5N2IsCi0JMHg4YjY1OGRmMywgMHg2OGQ3YTQyNCwgMHgwZWM4OTVlNiwgMHhlYzI2NmQ2NiwgMHgwMDNkMjdlZiwgMHhmYzNhM2Y3MywKLQkweGYzMjM1NWU5LCAweDU4NjM3Yjk3LCAweDhmN2YyYTk4LCAweDNmNTU0NjMxLCAweGZhYWYxMmNmLCAweGJhNzQ2ZjdlLAotCTB4ZWI3OGZiZWEsIDB4NjI3ZTU1NzAsIDB4ZmFhYTFkZGEsIDB4YThjNmQ5ZjcsIDB4MzUxYjNmZjIsIDB4YjI3ZjU1NWUsCi0JMHg2ZjJhYjI3ZCwgMHhjZTJkMTY2NywgMHg2MGJhYTViZiwgMHg2ZjFmZGEyNCwgMHg1ZTkyMTc1NywgMHhkMTk3MDgxMCwKLQkweDViYWY4Mzg2LCAweGVhNDYyMDZkLCAweDAwYjQ1M2I0LCAweDBlZmRkMWJmLCAweDdjODc4OTJlLCAweDE0ZDMzYWZmLAotCTB4ZThjN2UwMmQsIDB4ZTI1NzgzZDgsIDB4ZDVhMjYwMmQsIDB4NDNlZmYxMDUsIDB4ODA0OTVlMGYsIDB4MzA1ZDc0N2MsCi0JMHhjOGM1ZGZjZiwgMHg2NzU4MWYxZSwgMHg5MzMyZTI5ZSwgMHgwOTM2MzBiZiwgMHhlYWVkM2NlMCwgMHhmNjY4NDNhMiwKLQkweGNhN2NiMjdkLCAweDc1YTQ3OGZjLCAweDNmZjMzMjY3LCAweDc1NjZkOGI3LCAweGU1M2Q2MTg0LCAweDU0N2Y1MmJiLAotCTB4ZWZiNTIxNTIsIDB4ZmNmOWNjYmUsIDB4MzkzZmI4MjcsIDB4NzYwYTdhZmYsIDB4YjE4ZmM5MTcsIDB4YWM2YzM0MWMsCi0JMHg1YmU3NGNkMSwgMHg3OGJiYThjYywgMHg3YzBjYWZjZCwgMHg4NjMzYjI1MywgMHg2YTk2YjlmZSwgMHhjMjJkNjdkOCwKLQkweGI3YTk0OGNiLCAweGMxZTk0MmRhLCAweGRmNGE2OGVhLCAweDYyYjJiNmFkLCAweDc1NmI2NzgwLCAweGFiODdhNTFhLAotCTB4YTQ3ZTU0NmQsIDB4MWZhNTE0N2EsIDB4M2QyOWRiNTYsIDB4Njk0MDVkNWEsIDB4YTUyMTc1NWIsIDB4YjM0ZjI4MTIsCi0JMHhiMzZjNmY5MCwgMHgzYzIxZDVhZCwgMHgzM2IwZGE1YywgMHhkOWZlM2UzMCwgMHhlMWYyZGYxNywgMHg1MTlkOTZhZCwKLQkweGZmMmExNWY2LCAweDRkY2Y2NGNhLCAweGIyMGQ3NWEyLCAweDk0NWI5ZjkwLCAweGE5ZmZkYTFmLCAweGU4ZDFmOTE1LAotCTB4ZjVlMTIzNmMsIDB4ZDU5YjczNjgsIDB4NDhmM2NkOTgsIDB4OTk5Nzc1NjcsIDB4ZWJjYTEzNTcsIDB4ZjVlYmZkNjksCi0JMHhmZTQ3MGNmNywgMHhhNjY5ZGEzMCwgMHg1MGJkNDk3YSwgMHhiZGViMGIyZiwgMHhmMmM1YTMxNywgMHhjYTFiN2E0NSwKLQkweDNmMDRlN2NiLCAweDkwMWNkMTBlLCAweDVlOTA5YzcxLCAweGM4MzQzNjdlLCAweDE0NGVmOWMwLCAweDVkZjg1ZmE4LAotCTB4ZjVkNWEzZjEsIDB4ODcwNmYxZjIsIDB4OWRmM2EyMmYsIDB4YzRjZGIzYzEsIDB4MTViOTE0N2YsIDB4YzE4ZGUxMWIsCi0JMHhkMTJlYzVmOSwgMHhlNjg4Nzk1MywgMHgyZWZkMTViOCwgMHgwOWRlZDU1ZCwgMHg4NGUzYWY4OCwgMHg2N2E3MWY5YywKLQkweGE2MGYzODY5LCAweDk0ZjkyMjA5LCAweDFhZGY3ZjI3LCAweGNkYzVmOTBiLCAweDM5OGM3MGQyLCAweGRjMjg2NzE4LAotCTB4OTZhMWY2NDIsIDB4NmZlYjMxZDMsIDB4YjZiOGZhZTIsIDB4YTgxNWY0YWQsIDB4ZDYzMjNjNzcsIDB4MTVhMTFlYjYsCi0JMHg4MTI1OGZiZCwgMHg1NTU3OTU5ZSwgMHhmMjcyODE5MCwgMHhmNDQ4ZGIzOCwgMHgzMWQ0M2YzZCwgMHg2YTZkZjEwZiwKLQkweDQ2YmRkMDA2LCAweDEzZjQwOTIwLCAweGZjNGMxMDVkLCAweDZhN2Y3YmIzLCAweDUzY2RlYTBlLCAweDBjYmRkNjBjLAotCTB4MjkyY2EyZTgsIDB4NGE3ZWYwODcsIDB4NjQ4ZTZiM2YsIDB4NDQ1ZGZjYzEsIDB4YWNhMjUzMjcsIDB4OWUxYjI1N2IsCi0JMHgxOTRjZTQ5ZSwgMHg3MWJmYzc3NywgMHhkMjQ5M2QyZSwgMHg3Y2E5YzdmYSwgMHhjMzFlMzkyMiwgMHg1YzE0NTVmOSwKLQkweGY1ZjlmM2QyLCAweGViZjg5ZTkwLCAweGIzZjEyYjI0LCAweGM5MTkwNzAxLCAweDIxZjE5ZWRmLCAweDdmZDE1ZmM0LAotCTB4NjFmOTE4YjUsIDB4ZWIwNzM1ODYsIDB4NDI3YWU5YzUsIDB4ZmJhMGVlMzEsIDB4NWRjNTJkN2IsIDB4MDdkMGNkNDAsCi0JMHgyZjFlZmNmYywgMHg4Yzc4ZjBiNSwgMHg5YTFiYmM0MCwgMHg1NTRkZTVjYywgMHhhYTAzOGYxMiwgMHgyOTFhMzY4YywKLQkweGNmOWNiOTZkLCAweDMwYTI0ZTI4LCAweGQwMzZlZDA5LCAweDU3OTRmYjFlLCAweGRjYjk5MzgzLCAweGU3YTM1ZjhiLAotCTB4NDk2NDNhZmUsIDB4MTA3YjY1MzAsIDB4OGMyZWYyNTMsIDB4MmM3ZGE5MDcsIDB4ZWNlZTUxNDgsIDB4YzdhNjRlMDAsCi0JMHhlODdmOTQ3NiwgMHg1NDkyZTNmNywgMHhkZjU4ZWRmNSwgMHgxMWQ5OWRmNywgMHg5ZGZiNGE5YywgMHhiZjdlOTM3NSwKLQkweDQzYzYyYjRhLCAweGRjYzA1OTdjLCAweDdlNDA4NGI4LCAweGI4NzI0NWZlLCAweGZiNDExZTcyLCAweDEzN2Y2MmZjLAotCTB4MzI0OTkzZDksIDB4NzFlMDM3ZTAsIDB4ZmM4N2IwNmMsIDB4OGUyNjc1N2YsIDB4OWUxYTQ5ZWYsIDB4NzdmODY5ZDYsCi0JMHg5M2U4MTA3ZCwgMHg3OTBjMWY5MCwgMHgzZWZhNzczYywgMHgxZTQ5ZTFkOSwgMHgwNTk5ZWQ0MCwgMHhhODdiY2JkYiwKLQkweGQwZjMwYzdkLCAweDI4ZjdjYTc4LCAweDlkNDM1ZWY0LCAweDMwNGYyMDQxLCAweGZhNmIyZDFkLCAweGU0OThkYjg0LAotCTB4N2QyMTFmMzEsIDB4ZjkxZjAxNzcsIDB4Nzc1ZjhmZGEsIDB4ZjUyZTg3MDUsIDB4NmM0YWE3ZGYsIDB4Mzc2ZmY2NmYsCi0JMHhlZDI5ZGE5NiwgMHhkODZhOTYyYiwgMHhmZmM0MTFkNywgMHg5MjJhNWYwOCwgMHhiNzM3NzYzNCwgMHg1MDk1ZGYzNywKLQkweDdhNmQ2MDRmLCAweGJiNGE2Yjk0LCAweGJlZWZjMDEzLCAweDA1ZmY3ODA2LCAweDI3YTYxZmY4LCAweGY4ZTFlZjgxLAotCTB4YzNkZjAxOWYsIDB4ZjdjMDZmZjQsIDB4ZjAxNGZjYjAsIDB4ODFkYjRjM2QsIDB4OTdmOTYxZWYsIDB4OWQzMGY3YzAsCi0JMHgxYjI0MzMzNiwgMHg2OWFhYTRlOSwgMHg4NTVhZmIwYywgMHhmZjg3M2FmNywgMHgzMTg5ZGRmOSwgMHhkOWNiZTM3ZCwKLQkweDllZDc2ZTI0LCAweGZiZmJlZjg4LCAweDdjNzEyNzdmLCAweGRmMzc3MTNhLCAweGQ3OTA2ZWI3LCAweGZlMDE5ZmE4LAotCTB4ZGY4NGIyYWQsIDB4ODc3NzZlNTgsIDB4ZWY5ZTczZjAsIDB4ZDc3ZWI4ZDIsIDB4NWZmM2MzMWQsIDB4M2ZhOGU5MjYsCi0JMHhjNjZkODZiYiwgMHhlOWE1ZGZmNiwgMHhlNjQ5ZWYyOSwgMHhmODViYTM3MiwgMHhhOGZmMDEyZiwgMHhjMzFlNjU3ZiwKLQkweDdhYWE0YTg2LCAweDgxNGQyNGVlLCAweGRlZjk4ZmJiLCAweDIzYzdjYzlkLCAweDFjM2Q0NGZjLCAweDBmZGUzMWYxLAotCTB4ODRhZDJiM2YsIDB4ZjE3ODgxOWYsIDB4MjQ5YmEwODUsIDB4NThiYmM3MDMsIDB4MjdjOGYxZTQsIDB4YmU3NDRjYTMsCi0JMHhlM2I1ZjMwYSwgMHhjNDlkNzQ3OSwgMHhmYzNhZjFmMSwgMHhlNzdiNzBkNCwgMHg3ZTg0ZmMzYSwgMHhlNzgwNGUwOCwKLQkweDA5M2ZhNDEyLCAweDM1MjUxZmMwLCAweDQ1Yjc3OTg4LCAweGUwODJmYzg2LCAweGEwYjNhMmRjLCAweDMyMjdlZmZmLAotCTB4NmJkYjE2MDAsIDB4ODRjZThmN2EsIDB4MTBjOGQ4ZjIsIDB4ZTQxZDllMmIsIDB4ZDQ1ZTZlM2QsIDB4ZWJiOGZmMTcsCi0JMHgzNWZmNWRkZiwgMHhmZmFmNTQ3YSwgMHg3MzhiNzViYSwgMHgzNzVkNWI5MywgMHg5N2U0MTNmMSwgMHhmMDdkM2Y4OCwKLQkweDFmYzgyMTg3LCAweDMzZjg3YzcyLCAweDg0OWVkOTI2LCAweDI2NGI3NGZkLCAweGJiODFmYTJkLCAweDAyMmYxYzRkLAotCTB4MWE1ZGZiZDcsIDB4M2YwNTVmYzcsIDB4MThmYzQwYmUsIDB4YmFjM2ZkODAsIDB4YjllYjdkMTIsIDB4ODBhMGZmMzYsCi0JMHgxNDY0MmRmNSwgMHg4ZmI4MTEwZiwgMHg1YmYxNWYwYSwgMHgzOWM5MWRkNywgMHgyNjAxYjgzZSwgMHgwNDFlZmM5MiwKLQkweDcxZmQxYmYyLCAweGM3MGI2NDllLCAweDY3NjcwMWYzLCAweDgxZjk0MjZmLCAweGZmZWEwMjcyLCAweGZhZmRjMzQxLAotCTB4NTZiZWRmMGEsIDB4MjY3M2M5MmUsIDB4MzlmOGE4NjcsIDB4NjdiMDdiNDMsIDB4Y2JlODgxYmYsIDB4YWYyNTYxYWIsCi0JMHg0MzgyNWRhMSwgMHg4ZjU5ZDlmOSwgMHhmNmY1ZjMyNSwgMHhhMGQ2NGY0ZSwgMHg5ZGY1ZDRkZSwgMHgyN2YxNDVkOSwKLQkweGExNGU3YjAzLCAweDU5YjVkNjdkLCAweDZkM2RiOGM3LCAweDNjODEyNDlmLCAweDA1N2U4ZjliLCAweDhkYzVmYTJiLAotCTB4YTE3YjZlNzQsIDB4ZDQzZDk5MWEsIDB4ODUzZTVjZjMsIDB4ZjNkNTYxNzYsIDB4ZTgwMjMzMzIsIDB4OWRiZmU3ZTQsCi0JMHg2MGIyZjg4NiwgMHg3YTgyY2ViZiwgMHg0ZmNkY2FjNywgMHgzYjdjNDYxZiwgMHg1MTU5MjhkMywgMHhjMjM1NzdkZSwKLQkweDQ1N2VhMWIyLCAweDA0ZGI4ODRkLCAweDhmMjFmM2Y1LCAweGY1OWExN2Y1LCAweDhmMWYyYjZlLCAweDE4YTc0Y2Y0LAotCTB4NjU1MzZiZWYsIDB4ZWZhNWZhMDIsIDB4NzA0NzVlNzksIDB4Yzc4M2IwNWUsIDB4NzliM2JjMzEsIDB4OWY2MzlkMDksCi0JMHgwYTJjNGI3MSwgMHhjYmNiZTVkYSwgMHg5ZmQwNjM1YSwgMHgzMzY0YTJmOCwgMHgzOWE3M2I0MCwgMHhlZmRhM2NmZiwKLQkweGNkOTgzYjY1LCAweDNkOGFmZThiLCAweGIyYmU3NDIxLCAweDdmMWQ0NmEwLCAweGE0ZGVlMjUwLCAweDY0YTI3ZDQ3LAotCTB4YWNiY2JhOGIsIDB4OWQ4NzlkNGUsIDB4NmNlYjdlMjEsIDB4M2MzM2M3NTAsIDB4MTVlMjJjOTIsIDB4ZjI3MGQ5ZDIsCi0JMHg5Mzg0ZDYzMywgMHhkM2YwYTAxZSwgMHhmNjMxZDkxYiwgMHgzMjRmOWNjNSwgMHhmYTI0NGRmNiwgMHhkZmZkZTU0OSwKLQkweGU2Njk3ZGM2LCAweGRmMjJjOWY5LCAweGRmNGJmOTAxLCAweGUwNTE3ZGYyLCAweGJmOWNhOTUyLCAweDRmNmNiMGM3LAotCTB4OTlkZmM2MzYsIDB4NTVjNzY4MmMsIDB4Y2ExNTdmMzYsIDB4YTgyY2VlMzAsIDB4Y2ZhMjdlZmQsIDB4NTM4YTY1MzcsCi0JMHhiYjI0ZDc1YSwgMHgyZDE1YmUxMCwgMHgzZTMxOTdhNiwgMHgzMWVmNzJhZiwgMHhlMTA0MzViZCwgMHgwMWU5MDhmZSwKLQkweDFhZDczMmY3LCAweDFhYmNiZmI0LCAweDNjMjM2YjBkLCAweDE1ZmYyMzZhLCAweDIwMmNmN2IzLCAweGM5YjM3MGJmLAotCTB4NmYzZGU3NDIsIDB4MTMzYWRhN2UsIDB4NjYyNTdiZjMsIDB4ZGMxYzdkYzIsIDB4ZTBiMjc4NGUsIDB4NzVjZTk5NzksCi0JMHhiOTNlNmExOSwgMHg3MTkxM2MzZSwgMHgzZDlmNzE1ZiwgMHgxNmJmNjhmZCwgMHgzZWUzYmVlMiwgMHgzZWUzYmVjMywKLQkweGQ4OWZiOGNiLCAweGU2ZWY0NDNlLCAweGNjZWRjMjc4LCAweGZlZjlkYjMzLCAweDJmOWVmYjJhLCAweGRmOTNkMDZmLAotCTB4ZjNlZjk2YjgsIDB4M2ZkN2NmM2QsIDB4YTA3ODQ0MWIsIDB4NjgwZjAyNjMsIDB4ZTE2Y2NmZGYsIDB4YmZkZmFlZmIsCi0JMHhmMTEwM2Y1YSwgMHgwZjAwMzZiNywgMHhmMGQ3MGQ5YSwgMHgxZDc3ZTcwMCwgMHg3ZmVjMDQxZSwgMHgwN2NiZjBhOSwKLQkweGZlZTA0MWUyLCAweDQ0ZjgyYmRmLCAweDEwZmEzYzllLCAweGZlMmNkOWM2LCAweGYxNTcxZjA1LCAweGVmMGVjZDczLAotCTB4YWEwNDc4YWMsIDB4MTFmZjFhOWMsIDB4MzkyY2RkOWEsIDB4MDQ5NjM1ZmEsIDB4YjQyMWJkNzIsIDB4YzBmOTA5YjAsCi0JMHg4NmJiMDlmMSwgMHhmYzA5OWM1MywgMHg5YzUyNDYzMywgMHhkZGVmYzExYiwgMHgwNTNkZmQ1ZiwgMHg3ZTNiYmZlOSwKLQkweGUyMzc5NmYyLCAweDcwM2FmZjY5LCAweGMxNjFkZDFkLCAweDk2ZWU3ZTVjLCAweDFiOTUxMmRjLCAweDUzODAwNmJjLAotCTB4YTQ1MWYwMWUsIDB4ODFiNmY2NDMsIDB4MDdiYTkxY2UsIDB4MzFlOGY0M2MsIDB4NjkzZjc3YzgsIDB4NDhmNmUxYjYsCi0JMHg5NTFmNmU3NiwgMHgxMjc3YmNiNywgMHgzMWFjODZmZCwgMHg5ZmIyYWVjZiwgMHg4ZTUzN2Q4NCwgMHg2ZjdlMTVmNiwKLQkweGVmY2FmYjAwLCAweDdjYjI0ZTNjLCAweDRmM2VlZDQ0LCAweGNhZjVhMDRlLCAweGIyNjZkYjFhLCAweDk1OThlYTgzLAotCTB4ZTNhZjYzY2UsIDB4YmRmODhjZjcsIDB4YTFiYTA3ZTIsIDB4ZjdjMDE2M2UsIDB4ZWI5ZWZjN2QsIDB4MjgzNWNjNjEsCi0JMHhiMTRiZTkwYywgMHhiNDdlMTRiMywgMHgwZjRiZjg1MCwgMHgxYjQ0NzYzZCwgMHgwM2FjZWI4MSwgMHhiNWJlZTNiOCwKLQkweDhmZWExZjAwLCAweGRiOWQzZDdlLCAweDhkZDFmOTJhLCAweGYxMTY3ZmE4LCAweGNlNzhlMDBhLCAweDQ2OWY2OGI1LAotCTB4ZDMzMmZjNDYsIDB4MGYwMjlkN2MsIDB4NjA1ZjExMmIsIDB4MDdkOTY1OWQsIDB4Nzc1ZjUxNDIsIDB4NmNlMWZlMGEsCi0JMHg0OTdmMjEwZSwgMHg4Zjk4ZGIxOSwgMHhlMzA2NTVmOCwgMHg5YmMwZmI3OSwgMHg0ODdiZWRiMiwgMHhkZTE5YmZjZiwKLQkweDY1NWJmYTI4LCAweDNmZGViYWEzLCAweDI1MGM5ZjkwLCAweDAzZjk5MjdlLCAweGZjNjlkZmUwLCAweDM3YzdjNzNiLAotCTB4N2U4Y2U0ZjIsIDB4Y2JkYzA3MTgsIDB4NmU5MGZkYWMsIDB4NTJkNzI0NmYsIDB4ZmIyOTAzMzcsIDB4MzZlZTliZjUsCi0JMHhjZmNhYWQzMiwgMHgzM2U1NTE2ZiwgMHhmYWFhZDEzZCwgMHhhYWFjOWFjMywgMHg2OWJkYzNlZiwgMHgwZjIzZWZhYSwKLQkweDljZjk1NGRiLCAweGZhYWE1MWI2LCAweGFiYjQ5ZmI3LCAweDE3YjQ3N2YyLCAweDc1ZGZlYWE4LCAweGVmOTU1MGFlLAotCTB4ZmNmNTgwY2QsIDB4YmRkNzM5YzgsIDB4ZmVhYTkyZDEsIDB4ZDU0OWFiNzgsIDB4MDQyYTY4M2YsIDB4NjE2OTg5OWYsCi0JMHgzMzVlZjJhYSwgMHhmYThkZDM4NywgMHhlZWE2Y2ZiZCwgMHg3ZjZmYjE1NywgMHhmZmRkNGEzNiwgMHhkZmJhYmI2NCwKLQkweDZkODdkZDViLCAweGEwYjUyNzIwLCAweGI5MDc2ZjZmLCAweGQwNGVlOTg5LCAweDZmYTBiNWNiLCAweDhlNWU4MDM3LAotCTB4MmY0MTU3ZjksIDB4N2EwM2Q0YzcsIDB4MDZiZjk2MzksIDB4MWJlNjM5N2EsIDB4ZmNjNzJmNDEsIDB4MzAyM2IwM2UsCi0JMHg0MDVkNTRkZiwgMHg4NWQ1OWJlOSwgMHg3ODMzN2U1NCwgMHgwZjcxOGFiNSwgMHg4ODhmNzE4YiwgMHhjNGRiMTk3MSwKLQkweGUwNGRmZWU1LCAweDdmNjhhMWYyLCAweGMzNmZiNDU0LCAweDNjM2U0OWY2LCAweGQ2NDgyOGFjLCAweDFkM2EwNTVjLAotCTB4OGY1ZTdlMTMsIDB4YzVmNjVhZTcsIDB4ZDc2OGY5ZWQsIDB4YjMyZmJjZjcsIDB4Y2MyNzQwYWQsIDB4ZGQ1YzNlZTEsCi0JMHgwNDUyZTUxZiwgMHhlYzJmYWYzZiwgMHgwZWZkMDBmOSwgMHgyZDEzN2I5NSwgMHhhZWIwNmU3OCwgMHhmOGEzZTNlOSwKLQkweGI2NTFhYmJkLCAweDZjMWRkZDIyLCAweGZiMTQyYWZhLCAweDE0MTU3OGI5LCAweDllNDI5MWJjLCAweDc3ZjlkZTQxLAotCTB4ZjBmNWY5NDYsIDB4YzdkNWUzMWQsIDB4OTY0NTAxZWYsIDB4ZTQ4Nzk0ZTQsIDB4MjUyNGM1ZDQsIDB4MGU3YmE2ZWYsCi0JMHhmNDdiMGQ4NSwgMHhiNmZlNzRlZCwgMHhlZmJmYmU4NywgMHg2ZmJmYTlkMSwgMHhiNzdkNTVhZiwgMHhmNzNjN2Q2MCwKLQkweGNlYzliYWQ1LCAweGY0YTRkMGJlLCAweGNlZmFhNWU3LCAweGZhOGVjOTI0LCAweGVmZWQ4NWYxLCAweGI3MzhjMWFjLAotCTB4MTE0NTNkOGEsIDB4ZGU1NjdlNzgsIDB4ZGU3MjJjNzAsIDB4ZDJmZmMwOGYsIDB4YzgxOTVkYmUsIDB4YTE5YTJiZDcsCi0JMHhiZmFmYjMzZiwgMHhjODlkNjY4YSwgMHg5MzNiZjlmMywgMHgyMzg3ZTRmNiwgMHgxODkwNmVkZiwgMHg2YzhiOTI4YSwKLQkweDk1MGRjNTIzLCAweDkxM2JkNTM3LCAweGNkYTc5NTJmLCAweDRlMzllMWQ0LCAweGY2MTY0N2I3LCAweDczYzM4ZjNmLAotCTB4YzdkNzE4NWEsIDB4ZTc0MjU3M2MsIDB4ZjI3ZmJmNDEsIDB4ZTMxZmJhMWMsIDB4ZGU1YmJhNjksIDB4YmI3MWM1MDksCi0JMHhkZjg2OWVmMSwgMHhjMjkxM2VmZSwgMHg1MjI3ZGFmNSwgMHg4Yjg3YmRmOCwgMHg2Mjg0ZWY4ZCwgMHhjZjNhYzVmYywKLQkweDVhZWUxYzNiLCAweGEwZmZhZDJmLCAweDRhNDM3N2M4LCAweDY5OTI2ZWYwLCAweDM1NTdhNWZkLCAweDdmNGEwZmI0LAotCTB4ZDRjOGE2Y2YsIDB4ZTRhNmY4Y2YsIDB4NzFkNzVjMTAsIDB4OGRjZjFmMGYsIDB4Y2UzMDA1YzEsIDB4NjJhMmE0ZjgsCi0JMHhlODkxZmY5YywgMHhlOTMyMzkxOSwgMHhkYzZmZGM3NSwgMHgzZDYyNjQzZCwgMHg4ZTc4MTNlYSwgMHhmNWRkOTdkZSwKLQkweDU1YjdlODlhLCAweDlmYmRmN2M0LCAweGYyMmI3YWY0LCAweDExMDUyM2RiLCAweDg4MDY0OWMzLCAweGI4NTMzYjdhLAotCTB4NzdhZjkxOWQsIDB4Mzg5Y2ExMjQsIDB4MWY5MmI2NmUsIDB4NjI0MTQ1NzksIDB4NDFlZmVlMDgsIDB4ZTBiY2IxNGMsCi0JMHg5N2NiZjI2NSwgMHg4ZWYxZjIzNSwgMHgxMTQyZGE1YiwgMHg4ZTM3OGVlZiwgMHg1MTZmNTE5NCwgMHg3MWMzYWJmYSwKLQkweDZmYWNmOGZkLCAweDRmYjQ1Y2RmLCAweDMzNWFlZTI1LCAweDNmZGJlM2Y2LCAweGIxNGVlZTVlLCAweGVlMjNiYjUwLAotCTB4M2Y1MGQzNjMsIDB4NGMxNjllM2EsIDB4OWVhYjQ1ZmEsIDB4Mzc5NzdiOWYsIDB4NzhmNmZkNzAsIDB4ZWNhZDZjNGIsCi0JMHgxNmUxNWU3NywgMHhhNjlkZDFmYiwgMHg2YWVkN2RhMSwgMHgzMzdhODlkMiwgMHg5ZWFhOTllYiwgMHg5ZDU3ZWY4ZSwKLQkweDc3MTYzZTdhLCAweDU3YTg1M2M3LCAweGU5OTQ1ZjNiLCAweGI3NTM4ZWVlLCAweDdmZDcxMjI4LCAweDdlN2E4Yjc2LAotCTB4NGVjZTAyMjUsIDB4ZDIzMjM3OWQsIDB4Y2Q5ZDVmMGYsIDB4NGNjNmU4ZDcsIDB4ZDBhY2RlNzgsIDB4NTNmNjk1ODksCi0JMHg2OWUzYzdkOSwgMHgxZTNiMmY1YywgMHgzOTBiZWZjZCwgMHg1ZTEzZDRmNywgMHg1YjdkZTRmYiwgMHhiMTFkZWEzYywKLQkweDRlZTNjMWZmLCAweDJhZDc2NjZmLCAweDVkOWY4MGZhLCAweGQzYWVkMGM0LCAweDY4ZTYyNDE1LCAweDNmNzI3YzEyLAotCTB4NzlmZWM1MmIsIDB4OTdiNDAwY2EsIDB4MDQwZWM5MGEsIDB4M2YyMTBmNjQsIDB4ZmRjM2VhMDgsIDB4ZWRmZWZmOTAsCi0JMHhiN2I3MWM1OSwgMHhkNDQwZjQxMSwgMHgxMzRkOGM4MywgMHhhZjRhZmVmMCwgMHhlNjA0MDgwZCwgMHhlNzQ1YmJkYiwKLQkweDE5OGJmNjE2LCAweDQyMDVkMmY1LCAweDc1NmIzZDJmLCAweGJlNzhjYWU0LCAweGViNDM1Y2I4LCAweDgxZGQ4MjcyLAotCTB4ODI1ZDhhNzEsIDB4MTNkYTVkZGYsIDB4MDdkMjMzZmYsIDB4YjQxNmNiMGUsIDB4NzBmMWVlNjcsIDB4YzBkOWQ2M2QsCi0JMHg0ZjRhZDJmNSwgMHhhMzQ2ZWZmYywgMHhiM2EwZGRkZSwgMHg1MzVhMDU1OSwgMHgyZmQwYWM1YywgMHhmNWJkMDhjZSwKLQkweDNkMWVmMmNjLCAweDI1ZmIyN2Q5LCAweDVmZjQzNGY2LCAweGNlODliNGQyLCAweDdlODQyYmFiLCAweDkwMzcyMTUxLAotCTB4YjM3MGIwOWUsIDB4YmQwMDJmNWEsIDB4ZGYyZjk1NDUsIDB4MDgzN2E4MWUsIDB4NWQ0NzkwN2YsIDB4NzI3N2Q4YWUsCi0JMHgyMWZkMzVlYSwgMHhkMDExZWQxZCwgMHgwZTkwYTM0YiwgMHhkY2FkNTNhMiwgMHg5M2VjMjY2ZiwgMHgyOGI2OTkyNSwKLQkweDVhNzVmN2E0LCAweDRmYzUwNGViLCAweGRhYWFmMDgwLCAweGNlMjk3YWZmLCAweGIyMGNlZGRiLCAweGY0YjBiZDkxLAotCTB4Zjc2YjgyNGQsIDB4ZTkwZWRjMzcsIDB4OGYwNDY2OGUsIDB4ZGJlMWM2NmUsIDB4YmJmMWM0ZGQsIDB4OGRiOTI3NGEsCi0JMHg5NWQwMWVkOCwgMHhlZTRhMzNmYSwgMHhiYTg3YThlNSwgMHgyZjg5NDM3YSwgMHhmNDgwNTYzMSwgMHhiNzA2NzhiMCwKLQkweDBiZThlZDM3LCAweDg1MGJmNDg1LCAweDI5ZjkxNDBlLCAweDViYmZiYTcxLCAweGY5ODcyZWRiLCAweDU0ZTQ4N2YxLAotCTB4MTM4ZTc3YWUsIDB4NDI0YjNiNzEsIDB4MDZiZjI0NmMsIDB4OWQ5ZWI5MWEsIDB4OGUxOWUyNTcsIDB4ZWMxMDMwZjgsCi0JMHg5ZjlmODM2OCwgMHgyZGQ5YTA3YSwgMHg1MmJhYmQ2MSwgMHhlNDU3MTdlZSwgMHg0NWFkNjRmMywgMHg3ZTJiZmQ4NywKLQkweDRjZmNlNTIyLCAweGI3ODk1ZmU5LCAweDE2ZmY2OWJmLCAweGViZWNkZmU4LCAweDBmZGRlMDFmLCAweGRiMjU3ZGUxLAotCTB4NmUzOWYyNDYsIDB4NmQyZjcyYjIsIDB4YjJhM2QxMTEsIDB4NmY4MDhiOWUsIDB4MWY0NTFmZTgsIDB4NzM5YmVlMGEsCi0JMHg3ZTdjODFjYiwgMHhmNzQ2ZGRmZSwgMHhmOTQzZjJjYywgMHg1YzQ1ZjIzYywgMHg0ZjEwN2U3MywgMHhiZjcyYTRjNywKLQkweDBlNTRjYWNjLCAweDJhOTE2NmI3LCAweDU0OWJlYjdjLCAweGM4NTRkOGZiLCAweGYyM2FhN2I3LCAweDQyZGNhOTUzLAotCTB4ZGFlNGI5ZjgsIDB4YTg4YzgwN2QsIDB4ZWVmODNlZjYsIDB4YmRmODhmZTIsIDB4MGY0MDJiYmIsIDB4YmU3ZTdmYzgsCi0JMHhhOTI2YjI0OCwgMHhlNzhlMjJmNCwgMHhlMzA4YmM1NSwgMHg0NjhjNGUxZiwgMHg2ZGVjYjgzOCwgMHhjZTc4OTE2OSwKLQkweGNlNmJlOWNlLCAweGM5MzU5MzUyLCAweGVjMmU0ZmRmLCAweGM0ZGIwYzJmLCAweGQxNTI5YzczLCAweDRhNTJjNGJlLAotCTB4NGIxYzE1ZjcsIDB4ZDdlOGFkMjMsIDB4NDg3YTQyYWYsIDB4MDdmZTM5YjgsIDB4ZGJmYzNkZTIsIDB4Yzk1NmY4ODIsCi0JMHhkZTdlMzYwYywgMHhhNmRkZjgxZSwgMHg0MTdiM2Q0NSwgMHgwOWM0NWQwMCwgMHg0ODc1YWQzYywgMHhmYjU5OGU3NCwKLQkweGI5ZmI5NmJkLCAweGQ3ZTQ0OTY2LCAweDc5MGExMDdhLCAweDU3YThiN2JjLCAweGEzZTI4NjMyLCAweDlkMmM4NDFlLAotCTB4MTdmNGQ1MDMsIDB4ZTlmZGFmZTcsIDB4YjEwMWVhN2MsIDB4ZGM0NTA3ZmUsIDB4Mjc5ZDIxYzAsIDB4ODczMGZkMWUsCi0JMHhjZGY5ZjgyYSwgMHg3M2ExZTYwYywgMHg4ZGFjNTllMiwgMHg5NWMxMTNkMiwgMHhiOWQ0YmQ3YiwgMHhkMWRhMzA2YiwKLQkweGU0MGMzYTlmLCAweGI1NWRhOWZmLCAweDZiZjkwNDM1LCAweGMxNjU1YjE2LCAweDkzMjAyMzczLCAweGJjOGMzZmVkLAotCTB4NzgxMTllYjEsIDB4YmRjNGE0YmUsIDB4OWVkY2ZiMmEsIDB4ZjExYWI4NWEsIDB4NTFlYzFjZTAsIDB4ZGJlYjg4ZjQsCi0JMHg5N2IyN2Y5NywgMHgxZjNhNjllMiwgMHg0M2RhN2Q3ZCwgMHgxZTliZWQwYywgMHg1YjI4Nzc4YSwgMHhlZTlhM2MzNCwKLQkweDViNThiODU1LCAweDdmNmZhZTVhLCAweGY2NTRmZDk1LCAweGFhYWNjYTBmLCAweDBjYjU4NTdkLCAweDY3NGNmODAyLAotCTB4ZTk1ZWI5M2QsIDB4YzBhOWZiZTYsIDB4MzNkNzRlMzksIDB4ZjIwOTQxMTUsIDB4ZTA1MGY4OGIsIDB4YWY3MDJiM2UsCi0JMHgzZGM0OGI2NCwgMHg2NzQ3NDVhMCwgMHg1Nzg3ZmQ0MCwgMHg0ZmE4YWM2OSwgMHgzN2VmYjc1ZSwgMHg4OWFmMWZkOSwKLQkweDQ4ODZmMjdmLCAweDY4ZGVhNzY0LCAweGZhN2Q5NGJmLCAweDc0MmZiOGI5LCAweDNiYjc4YzMyLCAweGZjOTk3M2Y5LAotCTB4ZmJkYmZmN2QsIDB4NjNhYTRkZjUsIDB4M2JjOTJhN2YsIDB4MWI3NDlmNGIsIDB4YTIzN2E3NDgsIDB4MDM0YjM5Y2IsCi0JMHg0ZTgwMzdlOCwgMHgwZGE1ZDFhZiwgMHgzZmRiZjNmZSwgMHhhMjUwZDJjNywgMHg5ZDdmNjU0NywgMHg1MTdmYjA1NiwKLQkweGQ4ODRiNWZlLCAweGZkZmFlY2RjLCAweGU3MTYzYjQ0LCAweGIxMjhkNjUzLCAweGExNWJhNDE3LCAweDdiYjI3NmQ3LAotCTB4NzAwYmY3MDMsIDB4ZTBmMjhlYzUsIDB4NTUzYTAwZjMsIDB4N2M0NmYxZjYsIDB4Mjc3YmUxNGIsIDB4YmI5ZTVjZjQsCi0JMHhmY2U5OTMxZSwgMHg3YmM5MGJmMCwgMHgyYzdjODJjOCwgMHhkN2RkMzhmZCwgMHhiMTdmZWE1MiwgMHgyM2YwNmRiYywKLQkweDYzMTdjZmQwLCAweGNmNDI3YTc4LCAweGJjOTRmOWUzLCAweGU1ZmI4ODNkLCAweGI4MzE4OGJlLCAweDQ4NWZmZDcwLAotCTB4OWU1MTYzZTksIDB4YzdmZDIxN2YsIDB4YTUxZjNjZmQsIDB4NDY3ZTYyYjcsIDB4ZTQwYjU4ZDQsIDB4M2YxNGU4NGYsCi0JMHg4N2MxMGFkZSwgMHgzYzdmZGNkZCwgMHg1NDcxZjZlMywgMHgzMmVmNjI0ZiwgMHgyZmY1YmY3ZiwgMHhjZjViZjIyNSwKLQkweGYzOGU5NjAxLCAweDVjZmIxZjhiLCAweDlmOTQwMjQxLCAweDcwZTI1NWZhLCAweGFjNWI1ZjNhLCAweDYyZTUwZmVlLAotCTB4YjhmZmY5M2MsIDB4ZDVmNzc2ZGQsIDB4ODY1MTVkMWUsIDB4ZjI2YjljNmYsIDB4NWU2NWRjNmMsIDB4ZjY0YzljNWUsCi0JMHhhZDgwODk0MSwgMHhkYjlkM2MzZCwgMHhjZjdlNmVhOSwgMHhiZDM3OTE1MCwgMHhmYjM3NWY4NywgMHgwYmNmMjdmYiwKLQkweDdjYjVlZTdmLCAweGZlNzE5M2ZhLCAweGI2YzBlYWYyLCAweDlmYjA1MjI3LCAweDBiMmJiZDEyLCAweGFiOWYxYmVmLAotCTB4Y2ExYzQzZmQsIDB4OGY2ZDkyZjUsIDB4Yjk5ZTkwYTcsIDB4ZGEwYTVkNmQsIDB4OWY1YjI1MGIsIDB4M2U1M2IxNDgsCi0JMHg4YWY2NDFkOCwgMHg3M2JiYWY5NiwgMHhhZjJmMWRmNywgMHhlYjZiZDNmNywgMHgzZjllYjlkMywgMHgwZjIwNzhjYiwKLQkweDQzMDljZGY1LCAweDNmNDZhZDJmLCAweDI0YWZmMjc4LCAweGQ2ZjQ0YzhiLCAweGUwZTUxYWI2LCAweGVmOGUzNGVjLAotCTB4N2M0OGM2YWMsIDB4YTJmZGUxOTksIDB4YmVmZWQ4ZmUsIDB4NDdjN2U0M2EsIDB4MTVkMmJlZDIsIDB4MzRlY2JkNDMsCi0JMHgzNjYzYzEyZCwgMHg4Mjg4NmY3MywgMHg2NGFkNmNlZiwgMHhmNWZlNjdhOSwgMHg2MTM5ZDMwNywgMHgxZjQ5MmFkMSwKLQkweDViZTUxZmRkLCAweGUzYjQ3MGQ4LCAweDY4YzJkM2IyLCAweDBlZDc3MzFlLCAweGQ5ZjJjNTZmLCAweDA0Zjk3OGNiLAotCTB4MzhmMWJiODMsIDB4OWU5Y2YzZjYsIDB4ODA0MDY3ZTIsIDB4OWJjN2Y4MjUsIDB4M2I3MWE3NjcsIDB4ODkwNmNlNmEsCi0JMHg5YzY1NmJmNCwgMHg2YjIzNjdlNCwgMHg5ZDk5ZDdmZCwgMHgzOWYzZTQyNiwgMHhlNTIxZjEzNywgMHg2NWE0ZGIxZSwKLQkweDg2OGRkZWM3LCAweDFkNmEwZjdlLCAweGY3YzFhNjc3LCAweDQ5OWNjZmEzLCAweDJlMzMzZTQyLCAweGRhMDY3Y2ZjLAotCTB4Yzc3YWM5MTksIDB4ZWViOGE1MGIsIDB4Y2I4YTA2YWQsIDB4OTU4YWNlY2EsIDB4ODhmZWEwYTMsIDB4OGQzY2M3NDcsCi0JMHg0NTY1OWNlOSwgMHgzZmEyOTQyZiwgMHgzODcxYjM3NSwgMHhmM2U1NmYwZiwgMHgzNTU5MmM1YiwgMHg1M2JlM2Y2OCwKLQkweDg0NWNkMGZiLCAweDhjNjdiOWRiLCAweGFlMmYxZmE0LCAweDNmNjI4ZDRkLCAweDAyYmZlZjYyLCAweDYxNGQ2ZmZiLAotCTB4ZmJkODA3NmMsIDB4N2IwMmVlOTgsIDB4ZWQ0YmVmMWYsIDB4ZmNhNjhlYWUsIDB4OTRhZGFiMWYsIDB4YmYxY2U5YjIsCi0JMHgxZjM4NWIxNiwgMHgyMzdmNTFiOSwgMHgwMmI3OGVjMSwgMHgwYjVlYzkxZiwgMHg3OGZlODFmZCwgMHgxMDdmNmY0NiwKLQkweGE0M2M5OWQ3LCAweGIxM2FlYjYyLCAweDNmNjg2NGFlLCAweDBmN2YxNWRjLCAweGRkN2IyMWMyLCAweDVhYThhZDIzLAotCTB4ZTdlMzQ5OGUsIDB4NWYxYzFmN2EsIDB4ZjFmYTQ3MWIsIDB4NGE5NzhlYjIsIDB4YjQ4NmZiZTEsIDB4ZGVkOGQ5YzIsCi0JMHhkOTMyZTViOCwgMHgzZjM0ZWZlZiwgMHg1ZGUxMWIzZSwgMHhkN2MwZDViMiwgMHhlZTdkZDYyNywgMHgxN2E4OTQ5OSwKLQkweGZiZDc3ZmEwLCAweGFiYTdiMjNhLCAweGI0YmM3NGI2LCAweDFiNzlkMjBlLCAweGUzZmJkMTFlLCAweDc3YWVhZGZiLAotCTB4Y2RjZjk4OTYsIDB4NzA0NmVhZTgsIDB4ZDVkMzlmZjgsIDB4M2Y0NDcxMTMsIDB4MzJhZTgxNWIsIDB4YWFiYTc1ZmUsCi0JMHhlMDljYjY1YSwgMHhlMTVhNWFmNywgMHg5ZmM4MzRlYSwgMHg5MGUyYjlkMywgMHhmZmE1Y2U5ZSwgMHhiNWRjZjA4NCwKLQkweDJiZjgyMjVmLCAweGJmNjk1NWZjLCAweDliZGI4ZDMyLCAweDA2Y2YxYWU1LCAweDdmMDRlZmQyLCAweDNhMmMxNmZkLAotCTB4ZTY4MWVmODQsIDB4ZGZhODI5YjMsIDB4ZTMzNGRiN2UsIDB4YWZiZGQ3NDcsIDB4ZDIzM2JmOWEsIDB4N2ZmNWYwMDQsCi0JMHg3MzQ5NDJjNywgMHgxYjQ0OGVmNSwgMHhjNDU3MmZhYywgMHhkZjdlMDdkZCwgMHhjZTUxYTY5ZCwgMHhlMDVlNDhmMSwKLQkweGFlMmZjOTNmLCAweGQ2MjYwMmEyLCAweDkyZTUxYzJmLCAweDdiNDIwZGU0LCAweGYzZGVlOWFhLCAweDM3OTQ1MGRhLAotCTB4YWQ1MmZiMTIsIDB4ZmQyZmIyMWYsIDB4ZTY4ZGVkZTQsIDB4MTJiNGIzN2IsIDB4ZjhmYWQxZmIsIDB4MzUyN2VkZWUsCi0JMHhlZTQzZjdhYSwgMHhiZDUyMGY2OCwgMHg4ZWNkNzFjNywgMHg5ZDNkMzI4MCwgMHgyYWQ0YzRhMywgMHhiZjE4ZjZmMSwKLQkweDRlOWNkNWQzLCAweGM1ZTdmZGYxLCAweDdkYWVhMjdkLCAweDNmNzEyZjYwLCAweGRlZmQ5MzA5LCAweGRjZGYzODM1LAotCTB4MzY3Yzg1OTksIDB4NmY5NWJkNzAsIDB4Mzg3ZTEyNzYsIDB4NGNiZjFlOWIsIDB4ZjhkMzY0ZjYsIDB4OWJhY2RhZjMsCi0JMHhiNmMwZmZhZiwgMHhlMjY3N2E0ZSwgMHgxNzNkYWViYywgMHg3ZDJlYTJlZCwgMHg0M2VlMTY3YiwgMHg5ZjljNWJlNSwKLQkweGEwZTE0ZmZmLCAweGQ1YWU5Nzk0LCAweDY0OWRiZjczLCAweDRmMmVmYjIxLCAweDc5ZjY0OGJlLCAweDlmNmU2MWQ3LAotCTB4NGNiZjM2NTcsIDB4ODViN2I0ZmMsIDB4MzRhYTQ3ZmIsIDB4ZTg1MWY5NmQsIDB4ZDFkNDU4NGYsIDB4MzdhY2ZjOGEsCi0JMHg5NTRiZGI5YSwgMHhlOGZmOWVlMiwgMHhiNTA3MjE0NCwgMHhmZjc4NzEzZCwgMHg5ZjM4OTJlMCwgMHg3YzM0ZWM1NSwKLQkweGI1ZTkwMDM3LCAweDUyNzFlMzRhLCAweDMwNTY1MGRjLCAweDBiOGY3M2MzLCAweDNlNTBjZjQ4LCAweDFhZmM2OTdiLAotCTB4ZWU3M2YzYzQsIDB4M2Y5MDIzMDEsIDB4OGZmNTkwN2UsIDB4ZmRhN2YyNGEsIDB4OTMyMmQ4MjksIDB4ZTJhYjI5N2UsCi0JMHhjM2FkYWY5YSwgMHgxNGMwZjMyZCwgMHhjMWFiZThhNiwgMHgyYWRlZjhhYSwgMHg2NDY3ZjViZCwgMHhlN2UxMWVlZiwKLQkweDM4NDM1NTVlLCAweDM5MzdiMTNkLCAweDNhYWM1NTNkLCAweGViZjY4ZmEwLCAweDllODJhZmVmLCAweGMyNmYzZDE0LAotCTB4NzQ0MWZlOWYsIDB4ZmI2NGNmZjksIDB4YTMzZjIxN2YsIDB4NWZkODZmZmIsIDB4MjRiNzNmNzQsIDB4YmViOTdhODksCi0JMHg4YjczM2U3MywgMHg2NDBiYWZiMCwgMHgyNGQ1NWVmYSwgMHg2MmVmM2MzMywgMHgxZTc0MjFkMSwgMHg1MjM2YzA1ZiwKLQkweGU2MDRlMDljLCAweGIxN2E0ZDE5LCAweDdjMjlmZGI2LCAweDlmZTI2NTg3LCAweDM3MTg5MWU0LCAweDlkMmU3YTA1LAotCTB4MzkwN2U3MWIsIDB4ZThhZTMwOTIsIDB4NzAxMjQ2ODQsIDB4ZjY0ZjY0ZjUsIDB4ZTkzOTY3OTMsIDB4OTY4ZDRlNWMsCi0JMHgzZDYzOTIyNSwgMHhhN2E0YzEzMSwgMHgzMTVlOWY4YywgMHhmYTdmNWZjYiwgMHg0ZmVkYzQ4NywgMHgyNmY0ODdlOCwKLQkweGY3ZTFlZWU2LCAweDU5M2RiYzQwLCAweDRjNjRlZmZlLCAweDIyZjA1M2ZiLCAweDkzY2M4YjkyLCAweDljNmZjZDNkLAotCTB4YTcxZTc0ZmMsIDB4OWRjZjA1NzEsIDB4ODk1NDlmODEsIDB4ZjkzY2NkZjMsIDB4MGVkMTY3ZmIsIDB4OWY5ZmJjNWEsCi0JMHhjNGQwOWRlYiwgMHhjOTcxNGE3ZiwgMHhjMjU4YWY3OCwgMHgxZWZjYmJmYiwgMHhiYjMwNzMzNywgMHg3MzI3ZTkxZCwKLQkweGE5NWZkZDAwLCAweDhjMzEyZGRhLCAweDM2NmNhYjJmLCAweDRkN2Y0NTZjLCAweDEyM2RhZWE1LCAweGQzNWQ3OWYxLAotCTB4ZTdjNDdhMjcsIDB4Y2NlZjNjMmEsIDB4Yjk3ZmY3ZTQsIDB4Zjc0MmRhZmYsIDB4OGMyY2FiYjksIDB4NTM0NTU3ZTQsCi0JMHg0N2U4YTdlYSwgMHhhNWNjMzhhYiwgMHgxOGY2ODU2OCwgMHhiN2M4ZTlkOSwgMHhjNmYyYmM3MSwgMHgzYjk3NjQzZCwKLQkweDcyZWM5Nzk5LCAweDZmMWE4MzY3LCAweGY2ZmJhMzdhLCAweDViYTdlN2EzLCAweDhjNjJlZjU1LCAweDYzZTljY2RmLAotCTB4OWFjM2M2MWEsIDB4NDNmOTM5YTksIDB4ZDU0NzQ3YzcsIDB4YzliYmRmZmEsIDB4YjVmMGU3NGYsIDB4NTFhYjlkY2IsCi0JMHg5MDRlZTk4ZiwgMHg0YThlZjg2YywgMHgxNTZiOTA3NywgMHgxNGFlNDdlYSwgMHhiZjc0ZDdhZSwgMHgwMTdiMmJiZCwKLQkweGY2NzcxN2YxLCAweDA3N2M0Y2Q0LCAweGUzYjFlYjg2LCAweGNhZDI2ZWQ3LCAweGRmMTlmMzdlLCAweGRkN2ZmZGMyLAotCTB4MWY2NGFjNDEsIDB4MTA2M2JiZWQsIDB4MjlmZGM3ZWUsIDB4MzllOTA1ODUsIDB4ZDFjYzdlZjQsIDB4MjM0ZmQwYmIsCi0JMHhhZTA0ZTllZSwgMHg5ZjBhNjhlMywgMHhkZmY0MTFjZiwgMHgzZGU2Zjg2NCwgMHhmMzk2MzYzMSwgMHgzYzI2ZTYzMywKLQkweDYyZjcxNTZhLCAweGE1MTZmODk0LCAweDU3ODExNmZkLCAweDg5MTdlY2Q3LCAweGM0NmU5ZGZiLCAweDA0YmNmMDVmLAotCTB4YmNmMTMyZTMsIDB4MjI5ZGQzMDQsIDB4NGJjZjEzN2UsIDB4ODhhYWZmMzAsIDB4MTJmM2M0ZGYsIDB4MTJmM2M3MmMsCi0JMHhmODhhMzdjYywgMHhjMTJmM2M0ZCwgMHg2MDk3OWUzYywgMHhkZjg4YTZmYSwgMHhhNTUzODIzYywgMHgxYWU2YjNiOCwKLQkweGE0NTY4YmM0LCAweGZjYmU4MWI1LCAweGZjODBmMDg5LCAweDEzZmQ3NTQwLCAweDNmM2E5MmUxLCAweDhiZmFhMjUwLAotCTB4NWM2YjliZDIsIDB4YjRhN2U4MTksIDB4ZmRjNTc5MDgsIDB4MWQ4M2ViOTQsIDB4MmFmODQwYmYsIDB4MTVjZjBlZjcsCi0JMHhlOTBmYmQzYywgMHg4Y2Y4NWM2OCwgMHhiZDVmNDg1OSwgMHhmOTBjMGRmZCwgMHhjNzc0YWVkMCwgMHhmODc3YWMzMiwKLQkweDliNDkzZGYwLCAweGU4OWEzZjg4LCAweGMzYzRmOGZjLCAweDA1Zjc1NTQzLCAweDVjOGRhNGM3LCAweDMxZjkwZDk1LAotCTB4NmJkYzQ5NjYsIDB4NTBhYzM4ZGUsIDB4NWNmMGZiYjEsIDB4NWIyOGE1YmMsIDB4MDU4MmY5Y2IsIDB4ZDkzY2U0ZjUsCi0JMHgyY2UzOGM1OSwgMHg0NDhkMzE4ZSwgMHhkNTNjM2JmZSwgMHgxZmJhNzhmMSwgMHhiODFmY2ViZiwgMHhhMWY1MDkzMCwKLQkweDUzZjU5ZDU2LCAweDNlYmE5N2Y0LCAweDliYjQzMWQyLCAweDUyOWFiZjE0LCAweGU2M2E5MGNmLCAweDNlMzc2YzE5LAotCTB4MDhkNTcxMmQsIDB4MGM4ODFmZWMsIDB4Y2Y1ZDljZjksIDB4NzY3ZTcwMWEsIDB4ZGZjNGIwNGQsIDB4OTE2YWIwOGQsCi0JMHhmNjIzM2MwZiwgMHhlYjk1YWM3YiwgMHg1NWJkNWVjNSwgMHg3Njc2OGUxYiwgMHg3OGZlOThkMCwgMHhmNjJhZGE3ZSwKLQkweGRmZDhiMGY3LCAweGYxN2Y2MjIzLCAweDk2OWM2OWJjLCAweDhhNjEzNzlmLCAweDJhOTg0ZGU3LCAweGQyYzc1YTcxLAotCTB4Mjc0YTVmMGEsIDB4MjFjNGY2ZjgsIDB4ZGRiZjE1N2MsIDB4MWEzZWU1MDQsIDB4OWVhMWM0ZjMsIDB4ZDdjMDk5ZjAsCi0JMHg5MTlmMDQwNywgMHg3OWViMGFkMiwgMHgyZmRkMGYzYiwgMHhiNGZlMTcyYywgMHhhMGJlNzE0ZSwgMHhlNzY5NTNhYywKLQkweDlkYzdjZjZiLCAweDY3ZjM4YzMyLCAweDEzZGM0ZmQ2LCAweDE4NWNjNDFiLCAweDhkZTUzYWY3LCAweDc1MDdmMjE4LAotCTB4Y2UzZGY5YjksIDB4YzhkYjQwMjksIDB4ZmMxYmQ4YmYsIDB4NzM0NTlkZmMsIDB4N2FmMjk5M2EsIDB4Mjk1YmQ1MTQsCi0JMHhlMTE1OWFmYywgMHgwNzE4Mjk2ZCwgMHg0OWU4MjVkZiwgMHg3NmY3MmJjOSwgMHhkZTQwNDYyYiwgMHhhZmFiOGJlYywKLQkweDgyOTZkMjk4LCAweDkyNWRmNTcxLCAweDU0Nzg4MzQ5LCAweDNmN2Y5NWIxLCAweDIyYWRlODJlLCAweGJjYTdmNDQxLAotCTB4YzRmNDYwODcsIDB4ZWY3NDNlZTEsIDB4ZWYwZTIzN2YsIDB4N2IzN2FkODksIDB4ZWY3ZTcwMTcsIDB4OThmMmY3ZTUsCi0JMHg4NGUzMDUzNywgMHgyOWNmMjUzYSwgMHhkZmFkODc4YywgMHg4YzQxZjkzOSwgMHg3OWQ0ZWQ4NywgMHg4ZWZjYzI1ZSwKLQkweGM0MWY1MzlkLCAweDY5NGVkODc4LCAweGZmOGIyOWNmLCAweDM4OWUwMWY3LCAweGRmYWQ5NzhjLCAweGY3ZTQ0NTM5LAotCTB4ZjM2NjE0YmMsIDB4M2I1ZWViY2IsIDB4MmJmNWRmODUsIDB4ZjE4ODNlYTYsIDB4ZWUwZDEzYjMsIDB4MmY4OGQ1YzMsCi0JMHg2NTc4ZTQ3ZiwgMHgwY2Y3YmRkYSwgMHg5OWJjYTdjMiwgMHg3NzYzZWJlYiwgMHgxYWY4YmRlZiwgMHgyMWJkZTNjYSwKLQkweDU1ZmY2ZTc0LCAweDdiYzEzYzdhLCAweDFiMmJmMzY1LCAweGY2YmFjZjEwLCAweGQ2MGU4OGU4LCAweGQyZjI3YzM3LAotCTB4ODE5ZWE5YWYsIDB4Njg5YjJiOWUsIDB4NmJhMzY0ZjAsIDB4OTc5ZGQ1ZTQsIDB4Mjc3MWMwMWYsIDB4YzFiZTdiMDYsCi0JMHhjYzg2OWZmYywgMHg4YzRjNzlhNiwgMHhlZWZjNzRlMCwgMHgzMTA3YTI5MCwgMHhlZjZiYmQ5ZSwgMHhlZTkwYzdlZSwKLQkweGZjNjNmNjI2LCAweDEzMmVmNWRlLCAweGViZDk0ZmVkLCAweGFlZDBlM2U5LCAweDliNjkwYWVmLCAweGVlNTdmZDhkLAotCTB4ZmRmM2YwMzQsIDB4YmRlOGEzZDcsIDB4ZWU3NDllODgsIDB4YjIxZDJlNmYsIDB4YWJlNTBlMzEsIDB4ZGIxZGNkZTYsCi0JMHhjNjdlOGQ3ZSwgMHg2ZjNhMjY5ZCwgMHhmYWU3MGFhOSwgMHg5YjVjOTk1ZCwgMHhkZmVkMDhmYiwgMHg4MGZlZGJjYiwKLQkweGEyNjFkZWYzLCAweGY0NTJjZmYzLCAweDc0YmU0MGFkLCAweDE3YmYzMjViLCAweDY2YWZjZmZlLCAweGM5ZTQzZWUzLAotCTB4Y2E3ZWU4NWIsIDB4MGQyNjc1MzcsIDB4ZGViOGUxYzIsIDB4ODNlZjBmZGUsIDB4YzhlYjhlYjgsIDB4ZjkxNTJjY2UsCi0JMHg3YzExMTNkMiwgMHhmOWVkYzEzZSwgMHgzN2ZkN2ZiNCwgMHgyZDdjYTFjNiwgMHhmZGU1Zjg4YiwgMHhmMjg5ZWYzOCwKLQkweGNlZDA5N2M2LCAweGY3ZjBhZjYxLCAweDAwZWZjZWNkLCAweGYzYmI0MWI4LCAweDBlOGEzYWY1LCAweDQyMTFkYWVkLAotCTB4YTUzYmI2ZjcsIDB4ZGRmMWIzOGQsIDB4YWYzZDU3MGMsIDB4NDhkYTY5ZDcsIDB4YTdkNTc0ZjAsIDB4NzZiZGY3ZjIsCi0JMHhiMGMzYTc0MCwgMHhmOTU1MjZkZSwgMHhiMjU3ZmFmOSwgMHhiMGJkMGVkMCwgMHhhM2Q5MjI3MywgMHhmNDJiOWUwYSwKLQkweDc4MTc1NjUyLCAweGFmZGY4YzJmLCAweDMzN2YxMzJjLCAweGZkOTk4YjhiLCAweGY2MTc0YWZjLCAweDAyZjVkZjNkLAotCTB4ZDBiZmI1ZjMsIDB4YzhmYmEzYTAsIDB4MGFiNjA2YTUsIDB4N2ExNTcxZTMsIDB4YjdiZDhiMjgsIDB4YTY1N2Q3MDAsCi0JMHg3ZDQxNGRhOSwgMHhmYjY0NzRhNSwgMHhmMzhiYTQ2YywgMHg4NjhjNjYyNiwgMHgzOTA4MWY3YSwgMHg3Y2I4ZDY1NSwKLQkweDM3YmRlYTMyLCAweDQzMWRjZjlhLCAweDU2ZmExZjM4LCAweDRkYjdlMWQwLCAweDc5ZmZiNzI2LCAweGI3ZmE2MDVmLAotCTB4NTBmZDY2NmEsIDB4N2NmZmNiZWIsIDB4ZGM5ZWZhOTEsIDB4MTM4ZjdhMDcsIDB4NzBjYWIzZWQsIDB4NDE0ZTNmY2UsCi0JMHg1ZmUwMDZmZCwgMHhmY2UxMGZiNywgMHg3NTUyY2U2MiwgMHgzYzIxOGNmZCwgMHhkZjUyYjEwZSwgMHg0ZWYyODI5ZSwKLQkweDg4N2QzZmU5LCAweGRhODNlYjg1LCAweDJhMjc3YTc2LCAweDU5NDRkZGIwLCAweGZjNWQ5YmYwLCAweGEzNTk2OWRlLAotCTB4MWRmNzQxZDQsIDB4M2U5MWE0MTAsIDB4NWQxOTk2NzgsIDB4ZTlkMzhjNmUsIDB4NzNhMjFmNmIsIDB4YmRlMDNlYzUsCi0JMHgzNGYxMjE4MiwgMHg4OTgzNTk1ZSwgMHgwNzk3MmRlZSwgMHg3ZWEyODdiNSwgMHgwZjY5MGNlNCwgMHhlYmE3YmQ0NSwKLQkweDhiZGU5OTRkLCAweGFmZWJlZGM0LCAweDFiZTA5ZmY0LCAweDk2MTdmMTRmLCAweDUzNzY3NDdhLCAweDcyYzFlMzVmLAotCTB4ODg1ZTJlZDAsIDB4M2UyODAzN2YsIDB4ZWI0MDkyMWIsIDB4ZTYwYTY5MmUsIDB4ZWQyZGE0ZjcsIDB4ZjAzODZmNzQsCi0JMHhkM2FlMjExZSwgMHg1ZDhmNDdlMiwgMHhmYTQ3MmY0ZCwgMHg4N2IzZTdkYiwgMHg1N2ZmMGJjNCwgMHhmNzRkZDEwNywKLQkweDQzOGNiZjNmLCAweGIwZDMyODNjLCAweDc4NWU3ODU1LCAweDE1ZjdlMjQxLCAweDE1Zjc0ZjIwLCAweGM3NzM4ODJlLAotCTB4NDFjY2VmYjIsIDB4YmUxNzNmODgsIDB4NzcxZDEyNzUsIDB4ZTdjNGVkNDksIDB4ODhhYWJiY2MsIDB4ZGFlOTc0M2YsCi0JMHg0MzQ5Y2Y4OSwgMHhhZTdjNDE3ZiwgMHgzNjdkYWMyYiwgMHhkMGYzMmRmMiwgMHg0YzdiZmMzNSwgMHg0ZmJjNmNmYiwKLQkweGM4ODg2MTczLCAweGY3MjQ2NjBmLCAweDQwZGFlZTA3LCAweGNjYTI2NGZjLCAweGNiZDgxOGUzLCAweDBiZjcwYjNhLAotCTB4MTQyZjc4NzEsIDB4ZWQ2YzYyNzAsIDB4M2JiMjZhODksIDB4OGZkNDU2NzQsIDB4NDI0YTg3NjIsIDB4ZDZmYmQ3ZmYsCi0JMHhhOWU4ZmIyZiwgMHgzNzc3NTk4YiwgMHhmMDk2N2QyMiwgMHg5ZjQwNjI3NywgMHhmNTBkNzg2YSwgMHhmNDkxMTliZSwKLQkweGRjMjA0ZGNlLCAweGZlYmU3Mzk0LCAweDgwNWY3ZmUxLCAweDcxMGE2NGZiLCAweGU3ODIxY2FjLCAweDY0ZWQxOWQ1LAotCTB4OTNiNjAwNTcsIDB4YjZmOTVlZmUsIDB4NmVjYmVjODEsIDB4ZTQzNmNmNWQsIDB4Yzc2NjFkNWYsIDB4YTljZjU4ZTMsCi0JMHgyZDkzNWI2ZiwgMHhmNmZhN2RlMSwgMHg5YmRmM2M1NiwgMHg3YmUzZGNhMCwgMHg1NzViZTM4NSwgMHg5ZWZjY2JjNiwKLQkweDdjMjczODgyLCAweGJlMDNlYzRlLCAweGY4OGI1ODgxLCAweDdlN2RmMTIxLCAweDBmZjVlOWE3LCAweGI1NzRkZjkxLAotCTB4MGU5ZjEyMjUsIDB4NGRmM2E3YTQsIDB4MGE3YmQzNGYsIDB4YmJhZTQxMjcsIDB4OTNmZmVjZmMsIDB4NzlkMGFmNDUsCi0JMHhjMzhjNzRmYywgMHgzZjdmNWYzMCwgMHhhOWZiZjdiNSwgMHgwZGIyMDc2NCwgMHg4Zjg4ZTU3ZSwgMHgyMDdjZWEzNSwKLQkweGJkMmYxMDVjLCAweDExNzAzYTJhLCAweDViYTc4ZmRjLCAweDYzYTNiYmY4LCAweDgyMWRlOGRiLCAweDkwMjlmOTZiLAotCTB4MDdmMmZkOTcsIDB4ZjUwMWYyMDMsIDB4ZWEzYjVlZjEsIDB4MmY1MWM3MGYsIDB4ZjYwZTM4NDAsIDB4N2RiYjIwOWUsCi0JMHg1ZDkzOGYzNywgMHhmMjhkNzIwOSwgMHg5Y2U5ODM3YiwgMHhlNDFiYjM1OCwgMHhiNzJlN2Y1NiwgMHg4Nzk0NWU1MCwKLQkweGFhYmY5MWI2LCAweGNlODFhZjZiLCAweDlmMzQ1NjM3LCAweDAzZjVjMzhkLCAweGE2NWY5MjNlLCAweDQ4OGRmOWJjLAotCTB4MTJiZmU3YjQsIDB4YzdjODAzNzYsIDB4ZDk0YjhhNDgsIDB4ZjY4OTFjZGIsIDB4ZDRlZTUyODcsIDB4N2M0NDUyNzgsCi0JMHgwZmYyMTY3YywgMHhmNjQyYmNhNSwgMHg1NTNkZDBhNiwgMHgzOWRlOGRhOSwgMHg0ZGU3MGFmOCwgMHg2MzJmMjFmNSwKLQkweDljM2FkMTllLCAweGQ2N2JhNzEyLCAweDBhNmJkZmNjLCAweDgyMTNiN2RjLCAweGEwN2YwMTlmLCAweGJjNTcyNzc3LAotCTB4MGEwNWZkYzksIDB4N2MxNTI4M2YsIDB4Njc5NjIwZTUsIDB4MjhiN2ZhNzAsIDB4ZGU3ODQzZTcsIDB4MDdkZjc0ODMsCi0JMHhlMTQwNzg5ZiwgMHhmOTExNmM3YiwgMHhiMTBmOGU3MywgMHhmNjhhYjg3MiwgMHgzN2Y3MmZkNCwgMHhiN2I4YjhmMSwKLQkweDMyMTJiMzNhLCAweGRhZjU5ZGIwLCAweGZjNmI4ZjdkLCAweDVmYzdkMTI4LCAweDEzNDQwZjkwLCAweDhiYTE1ODFmLAotCTB4YmQ5NTc1ODQsIDB4M2FiYmQxMjQsIDB4ZTc5NmIzYTUsIDB4NTBiNjc1NDMsIDB4ZTdiZDA4ZmIsIDB4YWU3MTgyNTksCi0JMHgxNWU3ZWJlNiwgMHg0MzE1NDc4OCwgMHgzNGNhOWMzOCwgMHhkYjJlZWVkYywgMHhjZjM5ZDEyNiwgMHgzZjNmMWQwNSwKLQkweDcxNDM3ZTAzLCAweDJkYzcwYmY0LCAweDliZmE0N2NmLCAweGVmNDJiZmRmLCAweGFjZGYxZjZmLCAweDViZWVlYmZmLAotCTB4MWY5ZTVhMmYsIDB4OTc5ZDA3ZDUsIDB4M2FkNGRkMmQsIDB4NWZkZjVkODAsIDB4M2YzNmEzYTksIDB4Yjk3ZDdhZDIsCi0JMHgyNjBiZWYzMiwgMHg3NTYzOWU2NSwgMHgzMWUxZmMwMywgMHhiZTNlNzk3ZCwgMHhmOGQwYjhmYiwgMHhhZjgzYzJhZiwKLQkweGMxYjM0MmZiLCAweGUwMTc3MjhiLCAweDc3YjVlNzRiLCAweGYyYTQ1ZDVmLCAweGJmYWNkZWFiLCAweDczYTZlNjUyLAotCTB4M2ZjZDFiOGYsIDB4ZGU0YTc1MzAsIDB4MGFkNzE0MTMsIDB4NzQ0ZjU1ZjQsIDB4MzdlMzc0MDYsIDB4MDI0MzYzZGUsCi0JMHg0NTI1MTFmYywgMHgxNTdiZDFiNywgMHhmY2RiYTI4ZSwgMHgyOTgxMTFmZCwgMHgxYTgxY2EzMCwgMHg1MTcwZDk4YSwKLQkweGRiMzg3NDBhLCAweDk0M2MwN2Q2LCAweGI5NDM4OWZhLCAweDgxMzFmNTVmLCAweDk2MjcwM2M3LCAweDIzMWFmZjNmLAotCTB4ZTg2ZDhlM2YsIDB4YzdkZjFiODAsIDB4ZmZmMDQzYjgsIDB4NzE4ZmJlNWIsIDB4YjdhZjMwNGYsIDB4NTc0MTY0ZGYsCi0JMHhiZmZlZjc0YiwgMHg3YmI4M2Y5MywgMHgzZjNhNzliNSwgMHgxOGIzMzA2NywgMHg5ZDFhZGVmOCwgMHhlZmRmZDViOSwKLQkweGI3Yjg4OWZiLCAweGU5OTZmNzgwLCAweGVlOWE3OWZlLCAweDE5NDlmZGM3LCAweDQ5ZmNkNzIxLCAweDA0NjQ2ZmE0LAotCTB4NTc0YWY5ZDMsIDB4NmY5MjE1ZDMsIDB4MTYzOTJkZGQsIDB4NmFlOTA3M2MsIDB4ZGU5MTliNzMsIDB4NWZmOWZlYWEsCi0JMHhiYjg3Mjg5MSwgMHhiOGE2YmU1YSwgMHhjZmVmYWViMCwgMHgzYWQ4YmM1MiwgMHhiMDc3YjcxMSwgMHhiNTViYzQ0OSwKLQkweGJjYjA0MzU5LCAweDdjYWJlMGJiLCAweGE0NWViN2FjLCAweGY3MDI3ZjNlLCAweGUyYTkyYmE3LCAweDlmN2JmMDJmLAotCTB4MWNkMGQ2NjcsIDB4ZGQ2YjNmN2MsIDB4M2UzMGQ5NTMsIDB4NDVjYzZlMzMsIDB4NzM3NjAwN2UsIDB4OWYwZGNhMzgsCi0JMHhmNTFhYzExZiwgMHhlODhiZjE2MywgMHg3MmQyNDg0NywgMHhlOGE2MDIzZiwgMHhlMjRhNDg0NywgMHhhM2NjMDQ3ZSwKLQkweGY0NTMwMTFmLCAweGZhMzk2MDIzLCAweDdlOGYzMDExLCAweDFmYTNjYzA0LCAweDQ3ZThmMzAxLCAweDA4ZmQxNGMwLAotCTB4Yjg4ZGZlNTgsIDB4OGMwZGQxMmYsIDB4Y2QzOWZiOGIsIDB4NjA5N2Y3YzQsIDB4NmZjMDMwZmMsIDB4NzhiZjc4ODksCi0JMHg3NzdmM2Q0OSwgMHhhMDRiZWYwNywgMHg3ZTJlYmJmYywgMHhjZmM0NTFhNiwgMHhmOWQxMzY3OCwgMHhkOTVlZDU1ZiwKLQkweGY3ODQ1Yjg2LCAweDE4Mjk1YzJhLCAweDA4NzNkMzQ3LCAweDdiNTUzZmZkLCAweDJiNzJkYjI0LCAweDc5YTc0Zjk2LAotCTB4ZjljOTZiYWMsIDB4ZDc5NjE2NzQsIDB4NWVmODZjZWIsIDB4ZGYxM2UwMTYsIDB4ZTI4OTVhY2YsIDB4ZWE1YWNhOTgsCi0JMHgyZTM1NWZjOSwgMHhjZGM1M2Y2YSwgMHgwYzQ4MzU1NywgMHgwY2QzYWNmZCwgMHg5MGFlNGVkYywgMHg5ZDA0NzRhMSwKLQkweDVkMWU5Mjk3LCAweGZiMjM2ODYxLCAweDY0YmI3Y2E1LCAweDVjOWZiZmY1LCAweGYxMzJlYTM1LCAweDc4ZGNlNTA5LAotCTB4MmFjNGZmMDEsIDB4YjE2YjI2M2MsIDB4NzlkYWNlNGEsIDB4NjlmZTEzZmMsIDB4OTEzN2M1ZjUsIDB4MTdhN2UyMWUsCi0JMHg2NGYzYzAyZCwgMHhhN2JmOTcyYywgMHg2MDE1MWI3YiwgMHgzNzQ4NDZlMCwgMHg2YjJhN2Y4ZiwgMHhlMzA2YjNkOSwKLQkweDBlMzU2ZWE2LCAweGUyYTFlNWVhLCAweGJmMzg3OGZjLCAweDRjZjA1MThmLCAweDMwYmRlZWYxLCAweDAzNDZlZjVlLAotCTB4ZDJiYjI5ZTksIDB4YmYxMTNiMWQsIDB4ZTRlY2U5MGUsIDB4ZGZiNDM5NmYsIDB4ZTlkNjc2NDQsIDB4N2YyYWE5NGQsCi0JMHg4ODNjOWU0YiwgMHg3NThiMWRmYywgMHhlMWVmYzkxMiwgMHhiNjBmMGVhOSwgMHgxZTYwYTdiYiwgMHg4OWVlNTlmOSwKLQkweDU2M2EyMTBlLCAweDVhOTBkMGYwLCAweDgxZjIxYWY4LCAweGYyNTY5OWM1LCAweGQ4MTllNTZmLCAweDExM2ZhODJmLAotCTB4NTNlY2E1NTcsIDB4ZGU4OTRhZGUsIDB4MzY2MjJlNGQsIDB4YzczMDVmYmEsIDB4NTM4OWRmY2UsIDB4YzM5Yjc1ZGUsCi0JMHg4MjgzOWM3OCwgMHg0OTM3OGI1NywgMHgzNjRlZGRmYywgMHg1YjNjZTA4OCwgMHhjYjRlNzNjMCwgMHhjNzRlZjQ3YiwKLQkweDU3Nzg4MzNjLCAweGJmY2ZjMzRlLCAweDc4ZjNkNzYzLCAweGMyZjhmOTg2LCAweDgxNzdiZTExLCAweDdjOTMyN2Q4LAotCTB4Y2ExZGJiN2QsIDB4ZTI4M2MxMWQsIDB4OGQ2ZjdlYjgsIDB4OGU4YmZlYzIsIDB4MzczZTI4ZTgsIDB4MTRiZWVhMmYsCi0JMHg3MWY5YzkwNywgMHg3OTIwYzcxNCwgMHgwYzNmY2E2NywgMHhhOWZlMzFmZCwgMHhhNDM4NjM4ZSwgMHhlYjg0MWMyYiwKLQkweDI1M2M0NTZlLCAweGQyODM4ZWZmLCAweDk0MjVkNTIzLCAweDI1MWM3ZTJhLCAweGZmN2JiMDZlLCAweGZjNzA3YjFiLAotCTB4NmVmZTJhYmMsIDB4YzVlZjBkZWMsIDB4M2Y3ZGY1MDUsIDB4ZjAyN2I5NGMsIDB4MGUyOWM2MTksIDB4MWYxZmY1YzAsCi0JMHhjNGRiZWY4OSwgMHhlMWI2Njc3ZSwgMHhmNmEyZjNmYSwgMHg0NGFhYmRkMywgMHg5MzNmZmZkMSwgMHhmZWUwY2YwYiwKLQkweDBiOTk0M2Q4LCAweGNjMzllMWRiLCAweDNlNjc4MDQ2LCAweDNmNDI0MDJlLCAweGY3OGVjN2I5LCAweDRiZjY3YTUzLAotCTB4YmU1ZjhhMTYsIDB4NWE2ZTZmOGUsIDB4NTUyMWYxOGQsIDB4NmJiZDEyNDksIDB4MzFiNDFmOWQsIDB4Y2ZmYTEyMmYsCi0JMHgyMWI3ODg0ZiwgMHhlMjZhYWVkZiwgMHg0ODJlZDY3ZSwgMHhlNWRmYmVmOSwgMHgxOGFhZjdhNiwgMHg4MjZhM2Y3ZiwKLQkweDUzZmJiN2Q4LCAweDNhMWY3ZjFjLCAweDUxM2U1N2MwLCAweGNiNzc1NWQwLCAweDdiYjcxZTE1LCAweDFkNmMzZjczLAotCTB4ZjhjNzNmYmQsIDB4MGZmNDFmN2IsIDB4ZTg3MTM1ZTYsIDB4MmFjN2YyNjAsIDB4MTBkYmQzNzgsIDB4MjZmMTE1YjUsCi0JMHg5YmI3ODMyNCwgMHgwZTk4ZWIzNSwgMHhjZDI5MDZmNSwgMHhmYzgwY2M2MSwgMHhhYmNiZTJlYywgMHg3ZDlkNjkyMywKLQkweGY4OTRjNWZiLCAweDk4YmY0MGY2LCAweGJmZmQ3ZjNmLCAweGIwZmY2Yjg4LCAweDQ3YTUxMTdhLCAweGRhNTI5N2FiLAotCTB4ZWZhMmVkNTYsIDB4Y2I2ZTE3MjAsIDB4NmE3ZjM1YjgsIDB4ZmUxZjQ2NGEsIDB4ZjZiNDY2NTQsIDB4ZjQwYWI5MjMsCi0JMHgwMWQ2ZmRjZCwgMHg2YmEwNTNmZSwgMHhkZjVkMWY4ZCwgMHg3NzM2MTJkMywgMHgzNTFkZWEyZCwgMHgxMjhmN2E3YSwKLQkweDk4OTc4Y2UzLCAweDMyZDgwZjg5LCAweDJhYTNmNGZhLCAweGRmOTMzMzcwLCAweDQ2OTk5N2I1LCAweGE2YzdmYzIwLAotCTB4ZjAzNTZhMjUsIDB4NDkwY2NlZmQsIDB4NzQ4NjVlNzUsIDB4M2E0M2ViODIsIDB4NDRlOTE0YzEsIDB4N2NlZmU3ZWIsCi0JMHg5YzI0MGY1MSwgMHgxNzAwZjVjZCwgMHhkYTI2MDFlOSwgMHg4MWNiMzVkNywgMHhlZWY4NDg3ZiwgMHgzZmM1NDU4ZiwKLQkweDBmZjAwNjJlLCAweGE2MWU1ODMwLCAweDA2MmQ1NWZiLCAweDg5NDY4NzdhLCAweGM5MGIxY2I3LCAweGYwN2QxMWQ1LAotCTB4MjdlNzBmMTMsIDB4M2IzYzgzODMsIDB4NjU3ZmJlZTgsIDB4MWVmM2M1MTAsIDB4M2FmYzcxZDIsIDB4YzljNzhlYjQsCi0JMHhmZTQyYjMxNSwgMHg3Y2Y1ZDBkZSwgMHhjY2NiZWU4NSwgMHhmNTM5ZTg4YiwgMHhlZjNmYTgwNywgMHgzM2U5MzMwOSwKLQkweGU0MTY2MjZiLCAweDI1N2MzYmZlLCAweGUwMTA2NTA3LCAweDRiMmM2YjlkLCAweDliZTBiOGMzLCAweDAzYmJjYWE1LAotCTB4ZDAyMWRlZDcsIDB4MjcxY2Y3OGIsIDB4YWE2YTc3ZjAsIDB4NTk1M2ZlODQsIDB4NTRmYTIxNmMsIDB4NmE1NjYxZWUsCi0JMHhiMDZiMWQzZCwgMHgxZTEwZmY1ZSwgMHhmNDY1YTFlZiwgMHhjZDcxYzhjZSwgMHhhOWVlZmU0MCwgMHgxM2UzYjNhMCwKLQkweDFiOWZjOTEyLCAweGM1ZTNkMmI5LCAweDkzZWU3YjdlLCAweDcxZGE3ZGU4LCAweDgzMWRmY2MxLCAweGYzYTE0ZDNjLAotCTB4YWVmZWY4MTUsIDB4N2Q0N2RmODYsIDB4OTAyOWRmMTEsIDB4NWZiOTVmNzEsIDB4OTNlZjc3YzQsIDB4MDViMTY5ZWIsCi0JMHg3ZmI5NWIyMSwgMHhiM2ZiYmY5OCwgMHgwMGZlMTI1MiwgMHhiNzRiNmVmMSwgMHgxZmRkZTAzYiwgMHgzNzRhZWVmMSwKLQkweDA4ZjU5YzJiLCAweGNhZTk4MWYyLCAweDI3ZDY4ZmZiLCAweGE2YTA3Y2YxLCAweGY3Nzg4ODc0LCAweGNmN2ZlMzg3LAotCTB4ZjkwZGEzNjQsIDB4M2U3MGNkNTksIDB4MDRkMjlhZmYsIDB4YWM5NDhmZWUsIDB4Yjk4ZTUxY2IsIDB4MWM2OGMzN2UsCi0JMHg4MzNmYmJkZiwgMHgxZmIyYmJlOSwgMHhhNzJlM2JjYSwgMHg0M2JmMWM0MywgMHg5ZWY4MTFiZSwgMHhlMTUyYjNjYiwKLQkweDRmZDhmOThjLCAweDI3YWY5ZjI2LCAweDQzZTNmMzk5LCAweGI5M2M4NjMzLCAweGM4MzhlMTBkLCAweGY4N2E4MzlhLAotCTB4Yjk2MTUxZGMsIDB4YWM0N2UwMTIsIDB4ODAwY2I5OTYsIDB4YTY5YmU4N2YsIDB4NjlkNjZlNzcsIDB4YmM2MDJiZGQsCi0JMHgyZjcxNWE0MSwgMHgzZGY4MmI1ZiwgMHg4MjM0MTk3NCwgMHg5MGY1ZGJlYSwgMHgyMTdhN2EyZiwgMHg4YWJjYTNiMywKLQkweDZjNWVmNDY1LCAweDg3OWY5MTkyLCAweDI5ODYzYjQzLCAweDk0NjQ2OWJhLCAweDg1ZmI4YzgzLCAweGZlZjFmYThhLAotCTB4N2I5OGEyOGIsIDB4ZDlmZDQ0ODUsIDB4NjczYzRhMzUsIDB4MDIwZWZlMmUsIDB4YjYxNzNmMjMsIDB4ZWQ0MTFkMGYsCi0JMHhkZWRlMWE1ZCwgMHhiNmY0ODVhZSwgMHg1MWRlZmU0NCwgMHg5ZDAzNmFjZiwgMHgzZTNkMTY4MywgMHhhNGUzZTQ5OCwKLQkweGVkZmJlYWIxLCAweDM4ZjA2N2RmLCAweDk4NWQyNTA1LCAweGY5ZDE1NTY5LCAweDc0ZTk1NWRjLCAweGQ1NzczODllLAotCTB4NDNkNDBhOGMsIDB4NzRjMTBkMWMsIDB4ODFmM2FmMWYsIDB4OWRmMGJiOTcsIDB4YmRkOTcyZjEsIDB4NmJiNDEzZTAsCi0JMHgyMTZmMWQzMiwgMHg1OTIwYjk1ZiwgMHgwYTg1ZWY2NywgMHg0NzdjMWY3MywgMHgwZTMxNzE4ZiwgMHg2ZjRiZTRjZiwKLQkweGVkNzBkY2EyLCAweGJhZWY4YTM5LCAweDRjODBmZmRkLCAweGZjNjdlZmVkLCAweDhhYjY2NDdkLCAweDlmNzkwM2JmLAotCTB4MWEzNmIyZWIsIDB4YjQ2ZmJmZmEsIDB4MGVmMjdlNDQsIDB4ZjUwZTI1OTMsIDB4NWZiMTIyYmEsIDB4MTRmZjgyYWQsCi0JMHg4MjljMTlhZCwgMHg3ODdkZjU3NiwgMHg5Yzg3ZGVjZSwgMHgzZDc5MzI5MSwgMHhmNzZkZmJlNSwgMHg2MzVkOTUzMCwKLQkweDk5MGRkZjEwLCAweDI1YjdiZDdjLCAweDZiYzVlZmYyLCAweGExODkxZDBkLCAweGE5YmNlYTk4LCAweDhkODZkYTkwLAotCTB4NjVmMTE4ZmQsIDB4ZGZjYjAyNTIsIDB4MjVmYzcwOGMsIDB4OTg3NjMzZjcsIDB4OTdjZTk3OTgsIDB4YWUwOTMzZWIsCi0JMHhmMWQzZDYwZSwgMHg2ZWEzYWUzOCwgMHg2M2EzYWQyOCwgMHhkZThlMjU4YywgMHg4YWVmMTBiZiwgMHhmZTcwYjdjZSwKLQkweDhmODYzMWQ0LCAweDFlZDJjYTczLCAweGU5YzE5ZTEyLCAweDlkMTdkZjA3LCAweGViZjRiNjI3LCAweGJhOWYyYmE1LAotCTB4NWJjZGVhMWQsIDB4OTI3YmE0NjYsIDB4NGE5OTlmZjMsIDB4MWFiY2NhNzYsIDB4YjI0N2VlOTksIDB4NDVmN2VhMGQsCi0JMHhlMjc0OWU0MSwgMHgwYmRmMDJmYywgMHgxNDE3N2MwZCwgMHhhMGYxMWNmNywgMHg3ODQ0ODM3OCwgMHg5YjRhZGI3NCwKLQkweDdiZGZjZjFlLCAweDAwOWU4MTM2LCAweGRlY2Q4YmRmLCAweDhhMGJkNDI0LCAweDBhZGIyNjZkLCAweDQzNzc4ZmE5LAotCTB4ZTViODA3YmYsIDB4OGNjYmJiZTIsIDB4NTkyMTI2ZmMsIDB4NmUzOGFiOGUsIDB4N2EyMmM2ZDEsIDB4YzMzODMzYTcsCi0JMHhkYmIwZmU0MSwgMHhmZDQ0MWVjMCwgMHg0ZTRjOGVlNywgMHhiYzAwOTMzZiwgMHhiNjgzY2VmNCwgMHg5ZmVkMDYzZCwKLQkweGFmMWMxOTNkLCAweDUyNWI4NTI2LCAweDI2OTc4NGNjLCAweDNiYmJmNzg2LCAweDljMTQ5Njc0LCAweDkzNmFjNzVmLAotCTB4NDk5ZWY1MDYsIDB4MDI3ZTM4MmIsIDB4MjNiNTE4ZGQsIDB4MDU5ZmJlMzAsIDB4MTExZWZkMjEsIDB4ZDcyZDY3ZWQsCi0JMHg3ZTQyZDYxNiwgMHg5MGVkODgxMCwgMHhlMTliYzQ3MCwgMHgwZThmOWY4NCwgMHhmMTE5ZmM3MywgMHhkODZmZGNlZiwKLQkweGYzOWZlNDI4LCAweGYzZTI2YzM2LCAweGI0Y2ZmYjEyLCAweDllZjBlMzZkLCAweGY4ZmFiOWU1LCAweGEwNTcxODExLAotCTB4YzNhM2MzZTAsIDB4ZmQzMjVhYzYsIDB4ODkwMWUwZjEsIDB4NzNkNjFmZjYsIDB4NmQ4ZGU1MTgsIDB4Y2NjOGRjZDgsCi0JMHgwMDdlNTQwMSwgMHg1OGQyNjNmMSwgMHhlNDIxYzUyZiwgMHhlNzg2NGVjOSwgMHg4Y2QxYmRmOCwgMHgxOTdiZTllMiwKLQkweGI1ZGVkN2E3LCAweDBhNmZlMjVhLCAweDAxZjg1MDlmLCAweGVmMWQ4M2UwLCAweGFkZmIyYWM3LCAweDJiZmY4NWYwLAotCTB4NDNlMDA0M2QsIDB4MWJlMTQ1N2MsIDB4ZjA1MTdmMGEsIDB4ODEzM2UxNGIsIDB4YzAxYjM1NzgsIDB4NmEwOGY3N2MsCi0JMHhlMTRjZmM0ZiwgMHhjZDBlYjg2MywgMHg1MTdmMWYwOCwgMHg3NmI3NTlmNiwgMHhhZGZjODY4YywgMHhlNGYzOWY2MiwKLQkweDQwZGZiYjhiLCAweDQ5OTg5NDM4LCAweDE3MDZiOTZmLCAweDEyZTA5MWIzLCAweGY4NGQ2N2E3LCAweDQ3Y2FlYTNlLAotCTB4NDAyY2Y3MGEsIDB4NDE2ZGZjN2MsIDB4MzMxZmVhM2MsIDB4MThmN2Q0NGIsIDB4N2Q0OGJlN2YsIDB4NTJjZTcxN2YsCi0JMHg1OWM1ZmRmNSwgMHg4NDNlM2Y0YiwgMHg1MDg2YTc3ZSwgMHhiZmRjMDRjNywgMHhmMzNkYmY1MywgMHhmZTUwYTdlMiwKLQkweDkwYmRiZjlmLCAweDhiZWNlZGNjLCAweGI4ZTFjZmY1LCAweDNjYzQ4MmNiLCAweDk2YmNmOWRhLCAweGRjYmU0OWU5LAotCTB4ZmMzMGY0MjYsIDB4OTczMmZiODcsIDB4OGEyZDNhNzEsIDB4ZjI4YTNiMGYsIDB4MjljMjJlNmYsIDB4NjExZmRmMGIsCi0JMHg4OWJmY2YwNCwgMHhmNjI1MzlmZCwgMHhmNzM1NjhhNywgMHgyNGI4NzQzYiwgMHg1ZGNjNDNmMiwgMHhhZDc0ZTgyNSwKLQkweDk3ZjI1ZWZhLCAweDM4M2RhYzMxLCAweGY5N2Y3N2QxLCAweGM0YTRkZmNiLCAweGY3MmI1ZDIxLCAweGY5NmIxZDk1LAotCTB4ZTk2OTY2N2QsIDB4MWM1ZmQyNjEsIDB4YWU1MGZiY2EsIDB4OTZhMWY3ODAsIDB4Y2Y3YmYyYjYsIDB4YzRmYmVhZWQsCi0JMHgzZDc2ZDljMSwgMHhiNzE4MjlmOSwgMHgxZGE2ZTZhMywgMHgxYjM1ZjFlNCwgMHhiMjhhMGIyNSwgMHhiYzVlNTE2MiwKLQkweDU3ZGQ1MjU2LCAweGRmOTMyNDdiLCAweGQwY2M2YjE3LCAweGZhMGJiZjcyLCAweDFmMzg5NDljLCAweDdjMDRiZTNmLAotCTB4MTVjZmVlODMsIDB4NWZhZTFjNmYsIDB4ZTc0N2M3ZTAsIDB4Njk3OWYyOGEsIDB4ZjI5NTRhMWEsIDB4NTcxZTBjYzYsCi0JMHgwMzQ0OGMxYSwgMHg0YjRmYWVmZCwgMHg3ZTI3Y2ZkMCwgMHhhOGJmMjU2NywgMHhkYTZlN2Y1MiwgMHgzN2U4MzU4OCwKLQkweDdmMDFiYjk4LCAweGZlZDdjNzlkLCAweDZhNWE5OTM3LCAweDI2ZjQyOGRmLCAweGZjZjgwZGU3LCAweGZjMmEzOGI1LAotCTB4Mzc5YTBlZjMsIDB4YWY2NWQzZDksIDB4ZGYxNTdhZWUsIDB4ZGNmYjJmYmQsIDB4NmNhNjcyNDAsIDB4Y2Y1ZjM4OTgsCi0JMHhhNTRlZTc3MCwgMHg5ZjdlNjNmMywgMHhmN2VjNTJhYSwgMHg4NDVmNWRiOCwgMHhkNTUwOWRhMiwgMHg4NjcxZGZjOCwKLQkweGNhZDMwM2I0LCAweGVmNjQyNTY1LCAweDFlODBkYTU3LCAweGY3OGZhZmMyLCAweGNmZDVmNzdlLCAweGQ5NWZiOTQzLAotCTB4OWY0MWFiMTUsIDB4YTU5ZGY4ODgsIDB4YzhhZmM2Y2EsIDB4ZGVmY2EwZWYsIDB4MmFiYjYwNTIsIDB4NmU1MGZiZTksCi0JMHhmZjk4NWFiZiwgMHhlZGU0MTFlZiwgMHg1NDlkMTFkNywgMHhiOTdiNzMzNSwgMHhmMjE1ZWY2YSwgMHg1ZmVkNTc5YiwKLQkweDYzZThlOTFkLCAweDEzZGZkN2ZkLCAweGU4ZTJhYmIxLCAweGNiODZkOGFiLCAweDA2ZmUwZjc0LCAweDRjOWVlYWYxLAotCTB4ZWRjM2VlZjEsIDB4NTM4YTc2ZWMsIDB4MmI4YTMyZDcsIDB4MmViYmY2YmEsIDB4OGQxZmU0ZWUsIDB4YWNkYWFjOGYsCi0JMHg1ZWEwNzhhMSwgMHg5ZTFmYjVhZCwgMHhmYjhiNzVjNywgMHhiZWY1ODE1MSwgMHhkNzc2ZTRjZCwgMHg3YzIzYTAyNSwKLQkweDQxYmJhMzc3LCAweGVlOWRmM2E2LCAweGFiYmZlZTA2LCAweDE1YmE3ODZjLCAweDgyNTZhNWVmLCAweDVlYzMwY2UxLAotCTB4ZDk1NDNmYmIsIDB4N2ZhMzMzMjgsIDB4MWZjNjFhZGMsIDB4OWU3OGRjNDUsIDB4ZTg0MmJiZTUsIDB4OGY1Mjk4MWQsCi0JMHhmOTg3YWY2NCwgMHgzNGJkODJmNCwgMHhjNzNlNmZjMCwgMHgxYjk1NWUwNSwgMHgyZmI0YjkzYywgMHgwMzg3ZmU2MiwKLQkweDk2ZDI5ZGY0LCAweDJiOWVlOWE3LCAweGZkMjJlYmQ0LCAweDhjYzE4ZmU0LCAweDFjZjU5MzlmLCAweDZlNzY3OWM1LAotCTB4NWFlNzQ5MTksIDB4OTUzZDllYTUsIDB4MDg2Yzc3ZTQsIDB4MGI5NTc4YTYsIDB4ZTliZGY1M2EsIDB4NTNiYzYyNTMsCi0JMHhhZmVlM2M5OSwgMHhiMTI0ZTMxMywgMHhlOTMyYWJmZCwgMHhhNDRmMzhhNywgMHgzYTkyMGJjNywgMHg2OGI0ZTM4ZSwKLQkweDZkYzA1YTc3LCAweGE1NGJhMDlkLCAweDIzYTdhOTdlLCAweDlmZWEwOTM0LCAweGQyOThmYTZkLCAweGQ0YmY1MTJlLAotCTB4NzI4NTk2ZGMsIDB4MzA2MzZjZjMsIDB4ZGIzZDYzZGQsIDB4YjdmYzg3ZjgsIDB4OWU0YmJjNjAsIDB4M2YyNWZkMzEsCi0JMHg3NGIyOTJmYSwgMHg4OGI2M2Y3YywgMHgwOGVlYjhmYiwgMHg0M2M0Y2Y3MSwgMHg4ODZjZTllYiwgMHhhY2JlZDA5NSwKLQkweDlkNWVmMTEwLCAweDZhODdhZjhkLCAweGZmNWQ3ZTg4LCAweDRkNWRlZmRlLCAweGIxNWRlZWJmLCAweGZlYTA0NmVmLAotCTB4YmQ1NzZjNjIsIDB4ZDViZmY2MmIsIDB4ZmYyOGE1N2YsIDB4ZTMxNDJhNDQsIDB4YjljNWU4ZjQsIDB4MTAxZGZmMzAsCi0JMHhlMTNiYTA4YiwgMHhjYzNkOWQ4ZiwgMHg3ZmRlMTBmYSwgMHhkZmYwMWY2NSwgMHhmZmJkMDMwZCwgMHg2NjhmYjQzOSwKLQkweGVjODIzOWZmLCAweDBmZmRmYzRmLCAweDIxZjM3ZmNjLCAweDNkOWIyZjNmLCAweGU4OTVmMDUyLCAweGQ3ZjQxY2Y2LAotCTB4ZmQ3M2M0NzcsIDB4MjgxNmI5YzEsIDB4MGU1YTQwMTEsIDB4ZjgwMmU1ZjgsIDB4ZTYxYWRkMzksIDB4MmNkMGZjODAsCi0JMHgwMjc1M2Y2ZSwgMHhlMTg3ZWJmZSwgMHhlNThlM2NjOCwgMHhmODc3ZDgxNCwgMHgzNWViOGM5ZSwgMHg0Y2VjOGU3ZSwKLQkweGJkZTBhNmYwLCAweDRmMTE0ZWJlLCAweGE2ZjcwY2UwLCAweDE3YmY0MDQ0LCAweGE3Mzg5ZTA1LCAweGRmZmM1Mzc4LAotCTB4ZjU2ZTc0YTksIDB4NDVjZDNjNTIsIDB4ZGY4NzNmMTEsIDB4MWNlNzlmZDEsIDB4YzQ3NWViYzEsIDB4ZGVlOGJhNWIsCi0JMHg4NjEwZGVjNiwgMHg4ZGU2YWFmYSwgMHg4YWMzYzIxMCwgMHgwZDViNGM1NywgMHhhOGQyNzY3ZSwgMHg1ZjBmYWUyYywKLQkweGFkNzdmM2Q0LCAweDdjZjhkYjVkLCAweDUyMzc0MzRhLCAweDdlMDUxNzNmLCAweGE0NmQwNjk3LCAweGY3MTI5ZGY5LAotCTB4M2NmNTRiODMsIDB4ZjQ2M2ExZGYsIDB4MGVjZjdjOWUsIDB4ODVjZjZlZmUsIDB4Mzg3ZGI2OTgsIDB4ZTkxZDg1Y2UsCi0JMHgxMWRhNjcxNCwgMHg0NGQwNWVlZiwgMHg0OTdjNzlkZiwgMHgxNzgzNGVkOSwgMHg0NzdlNzVlNywgMHgyYTAzZGQwOCwKLQkweDNhNjZlZGY4LCAweDMzYWRlYzVmLCAweGNlZmZjODQ4LCAweGNmNzQ2MDBmLCAweDAwZmQ3Y2UxLCAweDI1ZTdkNzkyLAotCTB4Y2YzN2Y5MmIsIDB4ZmQ0MTFmYmYsIDB4YTUyZjU1OTUsIDB4YzA2NTJjZmIsIDB4ODRlZjUwMjYsIDB4YjVmNTAwYjQsCi0JMHhjN2NmZjVmMywgMHg3ZTQyZmQyMSwgMHg2YzFkZTYyZCwgMHgyMTVmZWNlMywgMHgyNjBmNmU5ZCwgMHhjZWMyZjMzYiwKLQkweDlmZmJhNDdmLCAweGUwNjkyOGY3LCAweDlmYjI4OWI5LCAweDU5ZTlmN2NhLCAweDJlOTg2ZWRjLCAweGNiMmIzNGUwLAotCTB4ODMyZGNmYzIsIDB4ZDAyNmNmM2QsIDB4MDM3ZDM4ZmEsIDB4MDAyZWM5OWMsIDB4NzE3N2EyN2EsIDB4MjM5YTc5NGUsCi0JMHhlY2E3ZTgyNSwgMHhjYTNiMTA4ZCwgMHgzNzlkMGVmNywgMHg4NzA0MGZlNSwgMHgzMGJiZjE2MCwgMHhmM2MyZWM4YywKLQkweDJlYzgyMmRiLCAweGZhOWEyZDA3LCAweDkzMmRiZjM5LCAweDM4OTU0M2UyLCAweGFiYTg0OTkzLCAweDEyNjYzZWQxLAotCTB4MmRlNGYzN2MsIDB4NzA2ZWY0NTksIDB4ZTFjNTMwNWQsIDB4YmI3ZTNkOTQsIDB4NjQ0ZWUyODYsIDB4YmQ5Nzc3YWUsCi0JMHhjODkyNmYzYSwgMHhhNjljZjFkYiwgMHg1NmJmNTdlYywgMHg0OWZlNDVlMCwgMHgyOWQ0OGUyNSwgMHhlM2M1NjhmOCwKLQkweGI4YzNmNTc3LCAweDk5NjdmNjViLCAweDY4YWVlM2UyLCAweDIwNjM5Yzc5LCAweDA5NjQ3NjVjLCAweDQ1ZWZiYTNlLAotCTB4ZTAyNzViYTIsIDB4NTAyZWZlMzksIDB4MmYwMzg4YjksIDB4MmNmZGM5ZGYsIDB4N2FlZTZiZTUsIDB4NTFlM2Y4OGUsCi0JMHhkZjM4YzMxZCwgMHg0M2E3OWU4YiwgMHhiNGZlZTFmZCwgMHhkZWQ3YzdlOCwgMHhhMWNiZjU0NiwgMHg0MWZmNmYzZSwKLQkweDliNjdjZDI4LCAweDAzOTJlMjhlLCAweGRiOTZlYmY3LCAweGE1ZmY5NGVmLCAweGQwMWU2NWY2LCAweDA3MzhmYTAzLAotCTB4MWVkYWMyYmUsIDB4NDBmOTFjZmIsIDB4YTJlNmM5ODMsIDB4ZDdiNzFlNTIsIDB4ZTAyY2YzYTksIDB4YzQ0YzE5ZjcsCi0JMHhjNGMzM2ExZiwgMHhmMzU2ODllZiwgMHgzNWYyODFmOCwgMHg3MTQ3N2YxMywgMHhkMmE3YzcwYSwgMHhlZTg1YTYxZCwKLQkweDM2ZTljZmJlLCAweDExNWNmZTBiLCAweDc0ODdlYjYxLCAweDQxZmIwMTU4LCAweGJmMWYwOWY3LCAweGIzNzVlZThiLAotCTB4N2RhOGViM2YsIDB4MTMxZTdhZTAsIDB4ZTFkMWFlZWQsIDB4ZGNmZjFlNmUsIDB4NGJlZjkwMzksIDB4MjRhOWFiZTcsCi0JMHgzOGMyM2E3NywgMHhjOTdjYzM1ZSwgMHhlMzBjZWQ0ZSwgMHg2MDQ4MDUyOSwgMHhlMzg1OGRkYywgMHgwZjE4ZTc0MywKLQkweGQyOWRkZmQ5LCAweDc0M2I0YTFlLCAweDUyZDk1ZGJjLCAweDVlMTc3YmYxLCAweDQ0ZTIzNzFlLCAweDc3YzQ0ZDljLAotCTB4YTFiNDM2NzcsIDB4MzhmYzgxYmUsIDB4NWVhNTA0NzcsIDB4ZWZmNWY4NDMsIDB4OTMxZTAzODYsIDB4YzU5M2Q3N2QsCi0JMHg3ZjEyOWJlNSwgMHg5M2Q2ZWY0MywgMHg0N2EzZDM1ZiwgMHg3YTEwZWE3ZSwgMHhmYWUxYjM5ZiwgMHg3YmEwMzNkZiwKLQkweGM1MTIwZGVmLCAweGU5NTlmZjFkLCAweDk0ZmZjNDQ3LCAweGNhY2YwZTczLCAweGUzOWQxMjVkLCAweGE0N2FhZjk3LAotCTB4N2NiZWYxMTQsIDB4NDg5OWE2ZDEsIDB4Y2EzYWNhMGYsIDB4ZWQwMGFjYjUsIDB4YTY0OTBlYWYsIDB4M2Y1ZDgwZjksCi0JMHhmNWM2NGE2NywgMHhmZGYwMjllMywgMHg1MTNmZDA0YywgMHg4MDY3MjI4ZSwgMHg1OTY1NGVkNiwgMHg2ZDk1M2QxNSwKLQkweGFiOWNmZTg0LCAweDRlMzQwZGE0LCAweGYyNzc2MmJjLCAweGMyNzAyOWY1LCAweDYzOGMxZjczLCAweDM3MDFmYzU0LAotCTB4Y2YzMmJmNWEsIDB4NTdhN2NkMWIsIDB4Nzg4ZWExZjAsIDB4ZTM0NmVmZWIsIDB4MTMyNDdmN2UsIDB4ZmRmMmI5M2YsCi0JMHgzZmUxN2VjOCwgMHgyZmQxYjdhMiwgMHhlMWZkMmE1OSwgMHgxMWQ0MTI3ZCwgMHhjODgzOWZhMSwgMHgwNDZlMzBjZiwKLQkweDNjYzBiYjZmLCAweDgwODdlODUzLCAweGQ1YTZlMzdjLCAweDFhNDNmM2E5LCAweDQ2OGNmOWQ0LCAweDQ1YWIzZTc1LAotCTB4YWJiZGI3OWQsIDB4ZTMxNTlmY2UsIDB4M2I0MjcwMmEsIDB4NmMzZGVmMTgsIDB4ZDAxZmY3MTcsIDB4NGJmYmM2MGUsCi0JMHgxZTYzMDc2OCwgMHhkMTRjNjBlZCwgMHhiNDcyYzYwZSwgMHg3NjhmMzE4MywgMHgwZWQxZTYzMCwgMHgxZGI5ZWFiNiwKLQkweGMxZGEyOThjLCAweDhjMzU5ZTU4LCAweGNiNTljOWMzLCAweDBmYjA5MGZkLCAweDlmOGYzYTc2LCAweDAyNmVmY2ExLAotCTB4OGZhODg1ZDgsIDB4YmQyMjBlOTYsIDB4YThiZTdkMGUsIDB4ZWRmZmY0MzcsIDB4NDc4ODA1ZDUsIDB4ZDQ0NzEwYTYsCi0JMHhjMzhjMWNiMCwgMHg4MzEzNWI2YSwgMHg5M2UyMDNmNSwgMHg2NjRjMjM5YywgMHhhZmI0MzdmNCwgMHhkNTA2YmIzZSwKLQkweDYzYjMwZTkwLCAweGUyNTdkNjEwLCAweGJlOTYyYTk2LCAweGQ2ZWZiZjQzLCAweGU3ZmFkY2JlLCAweDIyN2RmMjlmLAotCTB4ZmJmMjg3YmYsIDB4YmVmODY1NDMsIDB4MmU3ZTRjYmIsIDB4MzkxZGZmMjMsIDB4ZjdhZmIxOWIsIDB4OGNlMzAzYTMsCi0JMHgyMmY4OTVmZSwgMHgzNjhlOGFiYiwgMHg1M2ZlNWMxMiwgMHg3YzgzMTNkNywgMHg0NjFkYWJmZSwgMHgyYmY1Njc3YSwKLQkweDRkOTMxZjcxLCAweGU3N2VhOGI3LCAweGRlNzlkYWYxLCAweGNiOWQxMjkzLCAweDljMmMzZGRjLCAweDA2MWVmN2RhLAotCTB4NzkwZmJiZmQsIDB4ZDBmM2E0YWEsIDB4OWY3N2VmNTksIDB4NDkwNmRlNzgsIDB4YTZkY2UzODMsIDB4Mjc2NDcwZTcsCi0JMHgxYzZmMTE2NCwgMHg0ZWE3N2ZjYSwgMHhmNTE1MzFjYywgMHhhN2Y5YmY3MywgMHhmODU0ODNiYiwgMHg3ODdiNzQzMywKLQkweDBjMzVlZmMwLCAweGQ2MWZkNTU0LCAweDdiZjAxMDk0LCAweGJmZDQ0MzBkLCAweGYyYzBmMDIzLCAweDRmNjc2ODAzLAotCTB4NTU1MjMwZGQsIDB4NmJkMjBhZWYsIDB4MjhkNWNhMzYsIDB4ODVjNTk3ZTIsIDB4MjdjNDA1NzcsIDB4NGY3ZWFhODYsCi0JMHhhN2FlODk2ZiwgMHhiZmE4NzFlMywgMHhjOTBjNmY2NCwgMHhiNzk4NjI4MywgMHhmMzg4YTQ3ZCwgMHg0OWM3YTU4MSwKLQkweGI3YzQzNWFlLCAweDNkZmEyNTZiLCAweGRlNDI3OWIyLCAweGY5NmFhNWIwLCAweGU3ZTVhMjViLCAweDM2NDZmODdhLAotCTB4YmRjZTgzZWEsIDB4ODRmZWY0NTEsIDB4MTYyNThmODIsIDB4ODExYjBmNjYsIDB4NTk2ZGJjZjEsIDB4ZGUxZmI0NWUsCi0JMHhmMTE3Mzk3ZiwgMHg4ZGFlNDJhYSwgMHg3ODFiZGZjMywgMHhjMzZmNzI1NCwgMHhjMjE3YTc4YiwgMHgwMWRlNDRmNywKLQkweDM4ZDYzZmRmLCAweDJmMGYxMTJhLCAweDNhMzljZTFlLCAweGIxN2NlMDBhLCAweDRiN2JhNjQxLCAweGU0NmYzYTcxLAotCTB4ZmYwZmIzMDgsIDB4MjA5Njc0ZTIsIDB4OGRkYWZmZGMsIDB4ZjQxYmZkZmMsIDB4M2VlMWM5NWIsIDB4MThkZGE4ZmMsCi0JMHhmNjY0OTQxMSwgMHg4N2MxNWJhZCwgMHg0MWRlZjRkYiwgMHhhZjVkNzA0YiwgMHgwMmFmNDg5OSwgMHhkM2U0OWEzZCwKLQkweGU5MzJjMzk1LCAweDI0NjMyNTZmLCAweDYyYjllOTE3LCAweDRiN2RjYTlkLCAweDg1YTczZDY1LCAweDc4ZDJjODNkLAotCTB4ZWY4YThmYmYsIDB4NjQwZmQzMTcsIDB4Y2UxZDYxNTksIDB4MTkzOGE2ZWEsIDB4NjFhNmI4ZjksIDB4NjNhNDBjNWIsCi0JMHhjMzc1OGU4YywgMHhhOGVmZTAwNiwgMHhlZjhhN2YyNSwgMHgyMjdkOTQ5NywgMHhmOGVmOGMzMywgMHhkMDllZTZiYSwKLQkweGRjY2Y1MDNiLCAweDgyNGRiM2FkLCAweDVmMWJlM2ZjLCAweDY1OTVmYmE2LCAweGVkMWViNzVhLCAweGI1MWQ5MmQyLAotCTB4NWVlNjhmNzQsIDB4ODJkMjZlZjEsIDB4OWY2NDQ1ZWQsIDB4Yzg4YjY0MmYsIDB4YzRhNzNjY2UsIDB4OTQ3ODBiOWQsCi0JMHg1OGI2OTU4YywgMHg4MjNkZGU2MCwgMHg3Nzg4OTQ2ZiwgMHhmMWY3OTQyYiwgMHhlZmU3NmNhZSwgMHhiODUwM2YzZSwKLQkweGY1ZTc3ZTg3LCAweDkwMmY1MTY1LCAweDljM2Y3YTVlLCAweGZkMDAzNzlhLCAweGY2YzkxZTRkLCAweDFmNGNmNzYzLAotCTB4YzAzZmEwYzQsIDB4YWQ1N2E5ODcsIDB4NzU3MDNlOTQsIDB4OWZiOWQ5MDgsIDB4YTE4NGFmZTAsIDB4YjAwOGM4YmMsCi0JMHhmMWU0M2Y3NywgMHhiYmY4YmQxOSwgMHhlZjc4ZjE0OCwgMHgyYTdmZGJkMiwgMHgzYWRiYzNlZSwgMHhjMDBhODdkYSwKLQkweDc4MjM1MTlmLCAweDkwOWRjMzNjLCAweGRmNTY4ZTE2LCAweDE3MWFhOWY3LCAweGU5ZjdjMmFjLCAweGEwOGU4ZmNjLAotCTB4N2MxODY5YmYsIDB4NjA3Zjk3ZWUsIDB4ZmVhYWEyNTIsIDB4MGQwYzBmNDMsIDB4YmUxMTg3YTAsIDB4NzQyZTc0ZWYsCi0JMHhiNDRlMmFhNywgMHg0YWNiOTk2MiwgMHhlNGYxZjRmNywgMHhkMjFjYmZjZSwgMHgxMzY3ODQ2NSwgMHhkODJiZWQ1NCwKLQkweDc4YmQ1ZjE0LCAweDQ1YmEzYmZlLCAweDdhNmQ3Zjg0LCAweDM0NGE5N2I0LCAweGJhN2Q2ZTNjLCAweGI3OTQ0M2EzLAotCTB4NDQyYzM5NTMsIDB4MjViNzk3NDUsIDB4NzJlNTNlZGEsIDB4ODNlM2M3NTEsIDB4M2E3YjFmODUsIDB4OTdkODlkZmUsCi0JMHgxNjhkODQ1YywgMHhjOWVmZTJlMywgMHhhMWMxZmZhMSwgMHg1NGRhM2JkNiwgMHgzZmMyMjI3MSwgMHhmZGM2OTE1NCwKLQkweDM2YWUxNTQzLCAweDAxZGY5ZTNkLCAweDAwYjFiNWZjLCAweGZjOGRjYTkyLCAweDZmYTgwODVkLCAweGY5ZTcwZDhjLAotCTB4N2ZhZTIzNjUsIDB4YzNmYjBmMmYsIDB4MGYyYWM4NzcsIDB4MmY0ODQ1Y2IsIDB4ZjEyYmRmODEsIDB4MGY5YzAyN2QsCi0JMHhlOTQyNzNmYSwgMHhiZmRlNzE5ZCwgMHhjZmMxNTdlOCwgMHhjMDk0MzhjMCwgMHhiNWYxYjI3ZSwgMHhkZjdhMWM5ZiwKLQkweDlhYTNkZThmLCAweDg5ZWZjODVhLCAweGY5OTMzZDNiLCAweDNjMDBmYmJkLCAweDE1ZmRmODUzLCAweGZkMTJjZjdjLAotCTB4NDNiZTFmZGIsIDB4NWRiYmQ2NzgsIDB4MDBiNzYzNjcsIDB4ZjczYjRhOGYsIDB4ZGZlMjA2NzcsIDB4YmUwZjU4MDIsCi0JMHg1MWEwYjg2ZiwgMHg1ZTI1YjliMiwgMHhmZmYyZTEwZiwgMHhmNDgyZGMwMSwgMHgwMDgwMDAzNiwgMHgwMDAwMDAwMCwKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDViY2RmZjAwLCAweDY1OTU1ODBkLCAweGYzYmU3ZTlhLCAweDcwMGUwMWM3LAotCTB4MDQyN2U1NDAsIDB4MDk0YTg4MGYsIDB4NDQxMDFkZjYsIDB4MTgyOTNiNTMsIDB4NTRkYTE1OTUsIDB4MDIxZjQ0YTIsCi0JMHg5YTI4MjRmZSwgMHgyZWRiNTJlZCwgMHg0YzczNTBjNywgMHg0YTk3Njg2NywgMHg1N2EzYWIxYiwgMHhiNWFjY2QzOSwKLQkweDhjY2U5YTk4LCAweDdlOTI3YmJiLCAweGE3NzJiMjY4LCAweGE5YWVhZTY5LCAweDY2YjY2M2I1LCAweDNiNDQ4ZGFlLAotCTB4YjViNGQ0NWQsIDB4ZGZiZWZkY2YsIDB4MjNiZWY5YzcsIDB4YjVjY2VkNGMsIDB4ZDcxNzVjM2YsIDB4ZmZmNzllNzMsCi0JMHhlN2RlZmU3ZCwgMHhiYmY3OWU3ZCwgMHhjODkxMzJhMywgMHgxYmVmZTI0ZCwgMHhmZmU1NmZmZSwgMHhkNWEyMTJlYywKLQkweDQ0MWY5ZDA3LCAweGFiZTVhMzBhLCAweGFlMGRlY2ZiLCAweDYwZmQ2NWNiLCAweGNiZjVjNWRhLCAweGMzMmE2M2YxLAotCTB4OWMyODRhMjMsIDB4ZDcwNzcwYzcsIDB4NGQ1ZGM2OWIsIDB4MjdiNTNlZGIsIDB4OTdmMWNhMDMsIDB4MzQ2M2ZjNjksCi0JMHgyODRhODNjMywgMHgxZTNjNWNhNCwgMHhjYThkOTA1NSwgMHgwYzYxZDY4OSwgMHhmMWMwZDExZiwgMHgzZjY4NWQzYiwKLQkweGFmMjE0YmIwLCAweGEwOWQ5YTIyLCAweGQ0MWViOTc0LCAweDYyYmJkZWI3LCAweGM4NjE0ZDNlLCAweGY1ZTZjYzYzLAotCTB4MTE3NDFjMmQsIDB4MWI4ZDEyOTUsIDB4ZTZlNWMyN2YsIDB4MTQ4N2ZkN2UsIDB4YmJmNzBmNzUsIDB4Y2EyMWQwNjUsCi0JMHgxMGU0MWQ1YiwgMHg2YTIxYWNmYiwgMHhmOWJkZjg2NywgMHg5ZGMxZDExNywgMHhlZmViMjY5ZCwgMHg2MGYzNzg2NSwKLQkweGJiMTdlOGJhLCAweGU4N2EyMWNlLCAweDZlODhiOWY0LCAweDc2NDVjMjc0LCAweDc5OGRmZWQzLCAweGEyMmZmMWY1LAotCTB4NzFmZjRjNTMsIDB4MWFmNmU5ZTMsIDB4MGEyNzUxMGYsIDB4N2YwY2I4YjIsIDB4OGZiOTAyNTcsIDB4ODY2ODhjYTgsCi0JMHhjY2ZhMzQ5YSwgMHhiMmVmYzI2NCwgMHhmMjFlNzg2ZiwgMHhhM2QzYTBmMCwgMHg1MTIxNjJlZCwgMHg4ZjBjNjg5MCwKLQkweGM3YWQyMmViLCAweGQyNTkzYzAzLCAweGI4ZTkyYmQ5LCAweDQ4Y2JlOWNlLCAweDk5ZGZlMjJkLCAweDNiZmE1NmM5LAotCTB4MzcyODI5N2MsIDB4NjFkODY5YzYsIDB4YTNkMzFmMjMsIDB4M2QzNjNlY2EsIDB4OGM2OGUzYzIsIDB4YzhiNDNlODMsCi0JMHgzNDVmMDM2YiwgMHgxYmNkYmM3ZCwgMHg0YzQ2ZTdjNywgMHhjZTRkYjRmZCwgMHhiOWY2ZTI3NCwgMHhkODA5NDYxYiwKLQkweDU3NGRlZjEwLCAweDgzNjFiZWI5LCAweGYwYzQyNmJkLCAweGE0NjdlZjgzLCAweDdkMWNiMDU3LCAweDdhMzljOWIwLAotCTB4YzFmMTBmM2UsIDB4YTk3MzUzZGQsIDB4ODA5NTc4MTgsIDB4NWI4YzFmYTcsIDB4YmM1Y2YyMTQsIDB4MjZkNTA2YWYsCi0JMHgzN2ZhZDFlOCwgMHhmOWRhZTRlZiwgMHhlM2I2MjdlNywgMHhmZTc4OGJjOSwgMHg5Mjg3NGQ5NiwgMHg1NTljNzgyYiwKLQkweGY3MmFkZTliLCAweDZkZGQxM2U2LCAweGRlNTRkYWQzLCAweGY3NjUzOWZmLCAweGU1ZTgyZjVlLCAweDg2YTUzZGRkLAotCTB4NTIwMTVkYzcsIDB4ZDhlZTVmMzAsIDB4ZGM0MTk1NTQsIDB4ZGVlYmU1YWUsIDB4NzllM2JkYzcsIDB4ZTk5YzFiYmQsCi0JMHg4ZjlmOTYzNiwgMHgzYjI3NmQ3ZiwgMHgyNzU5Y2ZjYiwgMHhlMjRjYmQwNSwgMHg3ZTUyZjFiMywgMHgxODk1M2VjZiwKLQkweDNmNzk2NGVhLCAweDllMjA1MGFiLCAweDVmZGE1N2NiLCAweDViNzE4Mjk4LCAweDc1ODg4ZTNhLCAweGJkMWRiMmFjLAotCTB4YjVmZmYzMDUsIDB4YzMyZGU3OWIsIDB4OTliZGExYmMsIDB4NGUwZDU3OTgsIDB4ODZkYWJjYzQsIDB4ZDE1YTI5MDksCi0JMHhiMzVhZmNjOCwgMHg3NWQwNDRhMywgMHg5OWY3MDc2ZiwgMHhhODgxNzQ0OCwgMHhiYTdiN2MxYSwgMHg5ZmYwMmRjMywKLQkweDU5YTEzMDc2LCAweDY0NzVmN2Q0LCAweDBlZDlmYzBhLCAweDFkM2Q4MDlmLCAweGJiYmNhMjg1LCAweGRkZjkyYmM4LAotCTB4Yzc1ZmVmZDksIDB4NTBlNzA0ZjMsIDB4N2MwNzliNjEsIDB4NzgzYTE0ZjMsIDB4MDkyYTc3ZmQsIDB4YTgwMjljNmEsCi0JMHhmN2MxNzg2NiwgMHhmZjA0YjMyNywgMHg1ZDg4NzkwYywgMHhhMjdlYWNjZiwgMHg1ZTdjOTMyNiwgMHgyNmE2ZTgzOSwKLQkweDQ1NWVmYzkzLCAweGFlN2MxNmE5LCAweGJlZDJjYjNiLCAweGE5Njc5YmNhLCAweDUyZjMzYWJmLCAweDNlMzVmZDRiLAotCTB4YWViZjA1YmYsIDB4ZmRhNWJhNzAsIDB4MTY1NWVhZjUsIDB4NmI4YWM2ZmMsIDB4MDQxN2VkMmMsIDB4OWJmMDU4MTYsCi0JMHhlZDJkNmJhYSwgMHhiMDY5YWU2ZiwgMHg2OGJhZGZkNCwgMHg1NmJlYTVhNSwgMHg5N2MxNmI1YiwgMHhkMmRiYjhhYywKLQkweDBkYjZiNmZlLCAweDc5MDBmYTk2LCAweDcyNzJjNDFkLCAweDYzZTNmOTk0LCAweGYzMTNmZmJhLCAweGQ3Y2VmMDA1LAotCTB4N2NjYzc4MjcsIDB4ZDZkNzM5OWQsIDB4ZGM4YzMzZDYsIDB4MzJkYzg2MWUsIDB4MDdmNWRlN2YsIDB4ZTQ3YzgzOWUsCi0JMHgzMjFjYTRkOCwgMHg1M2NiMTAwYywgMHhmNTEzZWFhZiwgMHgzMDU2MTRkOSwgMHgyY2JkOWIwZiwgMHhiYjZjNGRjOCwKLQkweDg5OTlmYWQ4LCAweDMxZjMzZWM3LCAweDdmZmQ3MzBmLCAweGY2YzFjOGIxLCAweDYzYjRlNjYwLCAweGJmMTllM2E1LAotCTB4OTE2ZmJmYzksIDB4Y2NjOGVkODMsIDB4MDY3ZDhlMmIsIDB4MTlmZjBkZmMsIDB4NWRjNGRmODksIDB4ZjZmZWYwNjcsCi0JMHhmMjBhMmMzNywgMHg5OTVlNjczYSwgMHgzZDY1NGRiZiwgMHhlYTlkMzdhNCwgMHg3Y2IyMzQ1MywgMHgwZTRkZGY2MiwKLQkweDMwYzA2ZmI5LCAweDMxZTAyM2NiLCAweDE3YzA0Nzk2LCAweDBhOWIxZTU5LCAweDc5NjY1ZTg4LCAweDUwZWJlYzA0LAotCTB4M2IyZmY5NDUsIDB4ZGUzYzA0MmEsIDB4OGRmMDEwMTEsIDB4NGYwMTZhOGUsIDB4ZjgwOGQ0NzQsIDB4MDI0NThlYWIsCi0JMHgxMzQzYmFmZSwgMHhiMWQzN2VmZCwgMHgzYTc3YzA0MiwgMHg2ZmY5NDRkYSwgMHg3YzA1ZGEzYiwgMHhjYTI4MjNhZiwKLQkweGExMTU1N2RmLCAweDgyMDJiY2ZmLCAweDAzMzljMmRkLCAweGY2ZWQ1ZGY5LCAweDJlN2NlZDg0LCAweGY5ZTcxMWQwLAotCTB4ZmFjYWJiMjEsIDB4ZWVkODA0YWQsIDB4ZGYxNGRkMzMsIDB4ZDg2M2FhNjgsIDB4NDQ5MTQ2ZDksIDB4OTFjNDY1ZTgsCi0JMHg4YmY5ODY3YSwgMHgzN2VkYzM5ZiwgMHg3NDFkNDc2YSwgMHgxYjhmMThjNiwgMHgzODFmMTNkZiwgMHgzNDQyYmIwNywKLQkweDMxMjY3YmQ2LCAweDFmYzA3ZTVhLCAweDAzZTUwNGY4LCAweDI1MzlmNTA1LCAweDNlYmQ5ZmNjLCAweGY5ZjA1M2VkLAotCTB4NGRjNjkyZTYsIDB4YWUzNzZjMjksIDB4MDljZGFhZmMsIDB4NDZkYjc5MzksIDB4OGY5Mzg2MmIsIDB4YjIzZTVkNWUsCi0JMHg2MzhjMTQxZCwgMHgyOWI4MTc3ZSwgMHhmMDI2OTI5OCwgMHgwZTYxOGI4MCwgMHg4OGVlYzM5NywgMHgwMTc3ZGUzZiwKLQkweDgxZTQzZTYwLCAweGI5NjNlNTA4LCAweGI2NzBjZGRlLCAweGYxMGE3OTNiLCAweGU1YzM5NGY5LCAweDE0MmYyMTc2LAotCTB4YzI3YWM4NzAsIDB4YjQxZTVjNzgsIDB4YTllNzQ1YTUsIDB4ZGY2MTI0MWEsIDB4ODQ3MTZkNjYsIDB4MWM5MjFmNjAsCi0JMHhjODk1YjYxNCwgMHg3MjI1YzlmNiwgMHhkY2IzZTA1ZSwgMHhlNTg1N2UzZCwgMHg0NzhiNTY2NCwgMHgzMjdlZjIwZCwKLQkweDIyNTVkZWI4LCAweDBjZWMwN2RhLCAweGY3M2RmYzlmLCAweDUxNGMyMjliLCAweGQ0NDRhMTMwLCAweGJkNzJmNThiLAotCTB4YTBkNTQ3NTgsIDB4Y2ZmNDAxNDYsIDB4ZWY0ZTM1MjQsIDB4NDFmNTk2ZWYsIDB4NmJjNTlmZjQsIDB4MzBjMTVmODAsCi0JMHg5Yzc5ZjE4NCwgMHg3Njg5ZDYwMCwgMHgxODVkYjI4OSwgMHhjZTdjMTRlMywgMHhmNDliMjRmMywgMHg5NjQyZmVjNSwKLQkweGRmNjVmYjgzLCAweDlmNjE1MmU5LCAweGU0NGVkMjczLCAweDNmMzFlZWMxLCAweGZlYjlmOWM2LCAweGRiZDlkNGE2LAotCTB4OWE5ZmNjMjMsIDB4MjZiZmVmMzgsIDB4ZjM0YTVmMzIsIDB4ZmY5NDAyYjQsIDB4YzEzZjE5NGEsIDB4NGMxN2U2MGYsCi0JMHhjNDkzNTMxOSwgMHhlN2M2YzRmNiwgMHgzOWY2MzBlNCwgMHgzZjA2MmY5NiwgMHhmNDFiYmEwYywgMHg0OGRiZTU4ZCwKLQkweDRmODkxYWZjLCAweDFhYTlmY2IxLCAweGY0MWJkMjhjLCAweDUxMmY5OTFhLCAweGZmOTUwNWZlLCAweDc1NGNiZTdiLAotCTB4N2FjNmVjZjQsIDB4MmFkYzVhZTIsIDB4N2M2ZGYzZDYsIDB4ZTY5ZmJkYmEsIDB4ODY5MzcwYTUsIDB4ODBjYmRmNDEsCi0JMHg1ZWI0ZjI2NywgMHg1ZDIzNTFlOCwgMHg5YTBiY2YzNSwgMHhlMGM1ZWQ3OSwgMHgwYmJiNmM0ZiwgMHgwM2UzYjQyMywKLQkweDc3OWM1NmY3LCAweDZkMjczZTdkLCAweDhiNWZmOWU1LCAweGEwYTczYTY3LCAweDMzZjFlMDNjLCAweGY2ZWFlNjFmLAotCTB4ODRkYThmYTIsIDB4MjkzNzY3M2QsIDB4ZWE1NGZlMDgsIDB4YjQ1YjlhYWMsIDB4OTU5N2Y4NWMsIDB4MzZiZmFiMWUsCi0JMHg4ZDlhYWJlZiwgMHhlOGRlNzc5OCwgMHhjZDk1ZmYxOCwgMHg2YmQxY2UzMiwgMHhhNmFmNzFmNSwgMHhmNTZlMzEyZSwKLQkweDZiYmI2YjU4LCAweGRhZjBiZjc1LCAweDVkZjk2YjAyLCAweGNiYWZkZDdlLCAweDkxZDgzY2EzLCAweGJhZTU1MjRhLAotCTB4Y2JmMDliNjgsIDB4ZGM3MmJkMmEsIDB4ZTNhZjlkNmMsIDB4MDk5YTc2N2QsIDB4ODBlNjkxYmUsIDB4NzdmMTdhZjEsCi0JMHg3YmQ2MDBhZSwgMHg3ZTA1MDUzNSwgMHhiYzA0ODUwZCwgMHg5YzYyYzI4ZSwgMHgwMWQwZDllYiwgMHgwOWM4OTFiZiwKLQkweDlmZGRjNWJjLCAweDVlOTE2MmViLCAweDg3ZGVkNzZkLCAweDhlNDlmM2RmLCAweGViODUyOTM2LCAweGZiYjVlMzMzLAotCTB4ODliZDE3YTEsIDB4ZTFhZGQ0MzcsIDB4Y2U5NmU2ZjksIDB4NjNiZjQwMmQsIDB4MmZlMTNlOTUsIDB4MTc4ZjczMWMsCi0JMHhkZmU0MGJmZSwgMHg4ZmQ1MTY5OSwgMHgxN2ZlZDk1NywgMHhmOTdhZGFmMCwgMHg4OTdjMDA3YywgMHgxNjAyODdjZiwKLQkweDdjZjg1N2Y2LCAweGUxNmQ3ZTAwLCAweDc5YmY0MjA2LCAweGE2MWM4NTNlLCAweGFmZmQxYjdkLCAweDQ3MjFjZWYzLAotCTB4ZjdmNmM4ZTksIDB4MWIzZjI5YmEsIDB4YmM5Y2IxYWIsIDB4OTJhOTNhOTYsIDB4NTVhNzAxOTIsIDB4YTVhZmJmNjIsCi0JMHg4YzI0ZDg2NiwgMHg3YzU4MDk3MywgMHhmZjM4NjBiOCwgMHhlOGJmOTBjYSwgMHgzMWM4ZjM3YywgMHgxYjNhNjQ2YSwKLQkweGE3YTU4ZDc0LCAweDgxM2ZlNzQxLCAweDQ3MGRjZmFlLCAweGM0OTU1ZWQ3LCAweDNlZTAzNjM5LCAweDMxM2Q5YWIwLAotCTB4ZjY5NDRkNmEsIDB4ODkzODcwMjAsIDB4ZDc3ZTU5MzIsIDB4YTA4N2IyMWQsIDB4ODk2MzFmOGYsIDB4ZDI1ZjE4NTksCi0JMHhiZmE1MGE4OSwgMHhlZjVmNWViZSwgMHgxNjM0MWQ0NywgMHg1M2E3YTZmNCwgMHhiYTVkZjk0NCwgMHhjZmI3MzZjYywKLQkweGQ2NWNmYjEwLCAweDdkZmEyMTVlLCAweDg4YmRhNzE5LCAweDA5MmY5Yzc1LCAweDgyMGY2NDRmLCAweDk5ZDVkYTNlLAotCTB4ZjllNzgzM2MsIDB4MGFiYjU5ZTQsIDB4ZWVjNWJiZmYsIDB4ZDc0MmE2ZGIsIDB4NGZhYmIzNWYsIDB4NTVmNGI4ZjEsCi0JMHhlODQyZWU2ZiwgMHg4NmEzOTNkMywgMHhiOGI0NjdiZCwgMHg3YjhkMWQyNSwgMHgzNTc5NTdjNiwgMHhjOGVmMzhiZCwKLQkweGY1Mjk5YTViLCAweDg1ZTgxNDkwLCAweDhkOGYzZTcxLCAweGYyYzJiYjYzLCAweGUxMjVjYmJiLCAweDc5NzVlNzQ4LAotCTB4MTJhN2RiMDIsIDB4NDlkODVlZDEsIDB4NGZkYzdmODMsIDB4NGUzY2Q5ZTAsIDB4MGZjOGVjMzksIDB4N2UzZjg0MTMsCi0JMHg5ZWYwMjUyZSwgMHg5MjU2ZjMxZiwgMHhiZjY1OWZjNSwgMHg4MWFkZDg1NywgMHhiMzhlOTJkMSwgMHgzMzIzZTI2OSwKLQkweDczZWNhZjE5LCAweDA3ZWI4ODUyLCAweDFiNWRhNTJhLCAweGRkODViOGYwLCAweGQxYjU3YWFjLCAweGE5ZGNmYjAxLAotCTB4NGNiODhiZGIsIDB4ZjQ5OGY3YmUsIDB4NDA5N2RlM2YsIDB4MjZmYzkzM2UsIDB4ZjA1OWE2MTYsIDB4NGIxMmY1MjQsCi0JMHg3YzhhOTRmYiwgMHhlMDZhN2Q0YiwgMHhhOGZkNGIzMiwgMHgzZTBiMTJlYSwgMHhhNTg2NjZhNiwgMHgzOWEyYzY3ZCwKLQkweGJiNGIzYzE2LCAweDdiM2VkMmQ2LCAweDZlMGI0MmM1LCAweDU5NmNhMWQ4LCAweDhiNmQzOTQ0LCAweGI1YzdmZDJkLAotCTB4Y2ZiNGI1MmYsIDB4YTk2MWRlMGIsIDB4NDRlMDYwYTcsIDB4ZDZhZmY3MjEsIDB4YjJkZjhmZmIsIDB4ZTRjZjVhY2UsCi0JMHgyZjQzOTViNSwgMHg5MjhmZGZlNCwgMHhlNjE0ZmJhYiwgMHhkOTY3YjU1ZiwgMHg4NGU1ZTg3YywgMHhlYmFjN2JhZSwKLQkweGM3NjU3ZmIxLCAweGEyOWQ5MDM5LCAweGZmYTYyOGQwLCAweGRkYWIzZWQ1LCAweGUyYjRjYWFiLCAweDhiZmY1ZTk1LAotCTB4YWY1Y2RkNjAsIDB4OWZiMmVlZDUsIDB4YjI5ZTQwYTcsIDB4ZjI5NjFjZGIsIDB4ZGRiYTI1YjEsIDB4YzQ1MzQyOWMsCi0JMHhmOGRiZjg3ZCwgMHhlMTY2NWRhZiwgMHgyZWJkMmM3ZiwgMHhmZTAzODc5NiwgMHhiNDliYjczMCwgMHg5NzA3MmFjMywKLQkweDMwNzJhYzg2LCAweDFjYWI2OWY5LCAweGU1NThmNzE0LCAweDU2MjNmMmUwLCAweGFkODdmMDM5LCAweDY3ZGE1MDcyLAotCTB4MTNiMjgzOTUsIDB4ZjY5ODM5NTYsIDB4MGMwZTU1OGUsIDB4ZDdlNThjZjksIDB4M2U1NTg4ZjQsIDB4ZTUzNDUzNDgsCi0JMHg4YWViZjA4ZiwgMHg4OWY5NTZiMywgMHhiZjUxMGZlNSwgMHg4ZjNjZGZlMCwgMHhmZGU2OGY0MiwgMHgxODVhZmNmOSwKLQkweGZlMjFhZmMzLCAweDc3ZTFiZDMwLCAweDRlNGYwZWNlLCAweDY3ZDU1ZTAxLCAweGY3Y2YxMGE3LCAweGFiY2ZiZTk4LAotCTB4ZjI3OWI3MjcsIDB4NzRlZTllZDksIDB4ZDAyNTc1NjgsIDB4M2FhZTVkNzMsIDB4MGQ1Y2E0YjMsIDB4ODc4ODFkZjQsCi0JMHgxOThmYWZkZCwgMHg1YTU5YzdmZiwgMHgxYTJmZGEwMywgMHgwYmFlNTlmNSwgMHg0ZGFmZDFmMiwgMHgzOWU5N2RjMiwKLQkweDFkZGQ4NDk1LCAweGU3YzcyMDk3LCAweDQ3NThiMjdiLCAweGE4N2IxZWYwLCAweGQyNzFkNzkzLCAweDNlYzBhNWQ2LAotCTB4MmI2YjI3MzcsIDB4YTJmNmZmZDEsIDB4MDc3MDg1MzYsIDB4ZmU4MmEwYTMsIDB4OTcxY2ZmZjUsIDB4MWM3ZWJjMGIsCi0JMHgxNTFlN2I4OSwgMHgyNDE2Y2E0NSwgMHg3ZDYyZWQ0NSwgMHg3YWYzOTczNiwgMHhmN2U4OTZkNiwgMHhiOWViOTUxNCwKLQkweDE5MTJmYWRmLCAweGJkNTI0OGI3LCAweDI5MGYxMTJlLCAweDIwZTIwMGEyLCAweGFkYzhiZDdjLCAweDhlM2QwNjJmLAotCTB4M2QwMjRmYzcsIDB4OWIyYTZkYmEsIDB4N2QzODhhMzgsIDB4ZjA2N2Q4MjksIDB4YTUzZDNiNTUsIDB4ZmUxMTNmNDgsCi0JMHg3ZmVlOGU1ZSwgMHg0ZWZmNTM2NSwgMHgwZWQyNzNhYywgMHg5N2FiOWNiMiwgMHgzMGU0ZGM4NiwgMHhkM2YyN2RkMSwKLQkweGRjNWUwYjVlLCAweDdmNjk2OTkzLCAweGE1OWYxMWY5LCAweGI0MmUxZmRlLCAweGE5ZjY5N2Q0LCAweDQ0ZWNiYzE2LAotCTB4YjRmZGE1ODUsIDB4N2MxNjAyNzcsIDB4ZDJkYWE0N2EsIDB4MzViMzhhZmUsIDB4MjI5YzdjMTYsIDB4NWY3ZmFmZWYsCi0JMHhlM2U5MmY5MiwgMHg3ZGU0NDU2MywgMHhiYTlmZGZkNiwgMHhmNzg4YWI3YiwgMHhlMWFkN2JjOSwgMHgyM2Q3NTM0ZiwKLQkweDRjZTIzNzAxLCAweGRlYzcxY2JhLCAweDQwNGM1Yzg3LCAweGZlYzVjZmYwLCAweGIxODNjZTJmLCAweDZiNDdlOTZlLAotCTB4Mjk0ZmJhZjcsIDB4ZGQzZjUxYzksIDB4ZmYwZGIzZjAsIDB4MDE1NTgyOTUsIDB4ZmRjM2I5ZjMsIDB4ZmJhMmY5ZTQsCi0JMHg2ZDdmODZmMywgMHg4YmQzY2RmOCwgMHg3MjFjZTI3ZCwgMHgyNmNhYmM2ZSwgMHhjOTExYzFlNCwgMHhjN2Q3OWM4MiwKLQkweGZkZjdiMGQxLCAweGJkZTQ0YmU3LCAweGM2ZmQ3NjIxLCAweDlmZTc2MmJhLCAweGVkOTVlYzVlLCAweDcyOWY3MWY1LAotCTB4YzMzNWVkZDMsIDB4NWNiYTMzZjksIDB4NzM1ZjFjMmQsIDB4YjhmOWYyMTQsIDB4Nzk2NzdkNTMsIDB4OWU3ZjdmZGUsCi0JMHhiM2NmYTRjZSwgMHgyZTVjZGU4NCwgMHhiMzY3NWZkNywgMHgzMWEzZjg4OSwgMHg1MmE5OTFjZiwgMHg3ZjM4MGQ1ZSwKLQkweDdlM2JmYjBlLCAweGUzN2RlZWEyLCAweDFmZDg3ODc2LCAweDIxZGRiYzc5LCAweDlmYzcwOGUyLCAweDJjMWI1MTViLAotCTB4MDE0NDNmODAsIDB4ZWY4ZTMzOGMsIDB4N2MwZmUwMDMsIDB4YWUxZmRjMGEsIDB4ZmQxNzZhOTksIDB4YmQ0ODk3Y2YsCi0JMHgxMjY1ZGE4YiwgMHgyNDgwNzk3NiwgMHg1ZGRhMDdmZiwgMHgwYzMxN2VlMiwgMHgxODFjODViZiwgMHhjYzdjNDFmYiwKLQkweDYyZTMyMDUxLCAweDM5OGI4ODgwLCAweDA2MmUzMjFjLCAweDQwMzE3MTFjLCAweGZlNTBjNWM0LCAweGYwMmE4NzVjLAotCTB4MDIxNTFkODMsIDB4MjAyM2JlN2YsIDB4ZDUxZDIzZjAsIDB4YTNiY2ZlMDIsIDB4NzIxYjk0NDYsIDB4ZTMyZjRiMTMsCi0JMHgxZmYwNjYzZSwgMHhhMzczODg2YSwgMHhlNzFlNDYyMCwgMHhlNWY5MjdkZiwgMHhkOWFjZWI1YiwgMHg2ZjljNWJjMywKLQkweDI0YTU2YWEzLCAweGE2ZGJjZjRhLCAweDJkYzg3OTRhLCAweDNiNDA3NDk1LCAweGVkNDhmZmU4LCAweDI5NDVlY2FhLAotCTB4OTAwZWE3ODgsIDB4NDdmYmM1MmYsIDB4NTNmZjg2ZTIsIDB4NmVlODMwZjQsIDB4ZmFhMzU3ZGMsIDB4MjQ2MWY1MjYsCi0JMHhiZmVlMzRiZCwgMHhkMGFjZmJhNiwgMHg4YzdkNThiYiwgMHhiYTU4ZGJkNSwgMHhiZGViM2Y4YiwgMHg4ZDdiZGU1OSwKLQkweGE3YWU4NWY4LCAweGJkMGM1ZjA2LCAweDE2YTQ1Mjc2LCAweDYwNTQyNWY2LCAweGVmN2QwNmFiLCAweGQxZWFiMjRmLAotCTB4YmU5MmE1ZjUsIDB4ODYyM2QwMDMsIDB4NzRkZTdjYTcsIDB4NzY4N2NlMWIsIDB4NTYwN2YwYWYsIDB4OTBjY2I2ZTgsCi0JMHhlYzg3ZTZkMywgMHhmM2UyN2NlMiwgMHhlZDM3ZTNkNiwgMHg3ZGI3NzliNywgMHg2ZWVmOWVhOCwgMHhlMjE1YmZiYywKLQkweDIwMWQ5ZDVjLCAweGRhNWYxZjcxLCAweDczNzY4NGE1LCAweGY1YTA4NmJmLCAweDI1MjExNDdjLCAweGZhZTQ2ZmFlLAotCTB4ZTM1ZmI4MTcsIDB4MzNmM2Q4OTYsIDB4ZjIyMWQ2MjAsIDB4ZTZiNWJjMmMsIDB4NzJmZDZiMmUsIDB4MzNjOTFlZmQsCi0JMHg2MzI3NjBiYSwgMHg5NjU3MGFmMywgMHg0YWEwZTdlYSwgMHg1ZjcyMzdlYSwgMHhkZDEwNWVlMiwgMHhhMTU3MmU5NywKLQkweDg3MzgyOWYxLCAweGNiYjRhZjcwLCAweGNlMzg0NmI4LCAweDIxZjNhZjc0LCAweDhhMmEzZmNlLCAweDBhMTMzZDMzLAotCTB4NzQ2ZTRlNzEsIDB4MTc3YzEzYTgsIDB4Y2Y0MWExY2IsIDB4OWU4MzNjYTEsIDB4ZWFlNzE4NGYsIDB4ZTIzZjc1M2YsCi0JMHg4YmM3Y2Y4YiwgMHg3ZmNmMDU3YiwgMHhiZTc2ZTgyMywgMHhmZjQwYWVjZiwgMHg3YTA4ZjI4NywgMHgzYjQxZjNmYiwKLQkweGU3M2U5OWQ5LCAweGJhMDljNjBmLCAweDdlM2I2MjdlLCAweDk0Y2ZiZTRiLCAweDVmMjhiODc3LCAweGIwMTVjOTQxLAotCTB4YThjNmZiMWYsIDB4NjVkNjYxYzEsIDB4ZmIyMjJkNDAsIDB4ZTFiZjU4OGYsIDB4OTllZTMyNTAsIDB4ZmNjOGNmMmQsCi0JMHhiZDMzY2I0NCwgMHg3YjI2MDVlOSwgMHgxMGVhNWNkOCwgMHhhNmRiYmJmYiwgMHhmZjIyOTRiNSwgMHg4YjlkZGY2MCwKLQkweDVmMWRkZTdiLCAweGNlMDBhNjg2LCAweGIxMmRlM2Q3LCAweDc3YjIxOWZiLCAweDQ3MjExNTMzLCAweDYxM2ZiYzAzLAotCTB4YjExNWFhZWYsIDB4MDQ5N2I2M2YsIDB4OTg5YjdiM2QsIDB4MDJjZTNjOWIsIDB4MzQwNjhmMGEsIDB4OTZkYTAwZjIsCi0JMHgyMzA3YzEwYSwgMHhhZTEwZDAwZiwgMHhiOWI4ZmIxMCwgMHg4MTMzYjk3MywgMHhkZTc2NDQ5YiwgMHg4YmUwOTU1YiwKLQkweDM5MjIwN2U2LCAweGM3ZmUwOGI0LCAweDliODI3OTQ4LCAweGRlMzE1NTA2LCAweDg4NjcwNmY3LCAweGNkMjgxZTcxLAotCTB4YzZkMGZlOTMsIDB4MWZlMTZiZWQsIDB4MzkzNGY2NWUsIDB4NTM4ODg3NDEsIDB4YTc0YjEzOGUsIDB4ZjNjYTk0M2YsCi0JMHgxZDNjMTMyMCwgMHhiYWRmZGQxMywgMHhlN2IwOGEwZCwgMHhjMDJiYTBlYiwgMHg5ZWMyMmJiNywgMHg1ZDY3ZjgxYiwKLQkweGYxMjU1ZTNhLCAweDNjNDkzNzNiLCAweDUxNmNmNGUyLCAweDExN2VlNDUyLCAweDAxM2VjMDJmLCAweDZiZGMxZmIxLAotCTB4MDVmMWU5ZjcsIDB4ZmIxMDAzZWMsIDB4MThlYzM5NDAsIDB4ZTAzMWQ4NzAsIDB4NjFjMDYzYjAsIDB4Yzc2MTAwYzcsCi0JMHg2YTk0YmU1MCwgMHg0M2U3MTE3MiwgMHhhY2QyYTMzZSwgMHhhYTZlODMyNywgMHhjODI1ZjkzNCwgMHhlNDcxOTg2NywKLQkweDkxZWRjYzMzLCAweDIzZDczMGNmLCAweDQ3YWU2MTlmLCAweDIzOGNjMzNlLCAweDhmNmU2MTlmLCAweDQ3MTk4NjdjLAotCTB4MWVkY2MzM2UsIDB4OGUzMzBjZjksIDB4M2RiOTg2N2MsIDB4N2FlNjE5ZjIsIDB4ZjVjYzMzZTQsIDB4NzE5ODY3YzgsCi0JMHhlZGNjMzNlNCwgMHhkNzMwY2Y5MSwgMHg1OGFlZGVkZiwgMHhiM2I3MWRmMiwgMHgzNWRjODZmOSwgMHhmMjEzNDhlZSwKLQkweGE2YWYzNjMxLCAweDdlZmU3MjBmLCAweDM5NzdkN2UyLCAweGEzZTdjMWYzLCAweGViYjcyMTJiLCAweGM5NTQxMzVhLAotCTB4Yzk2YWFlZTcsIDB4M2U0OTFiNzcsIDB4M2UwYWQ3ZjcsIDB4Nzg5MmViZGYsIDB4MWRlMTlhOTUsIDB4MWU0MjJmYzYsCi0JMHhlNjQwYjJhMSwgMHg0NzkxMDAxMSwgMHgwMTFlNDQwMCwgMHg0YTg0NzkxMCwgMHgwMDIzY2M4NywgMHg3MjgwOGYyMiwKLQkweDkxMDAxMWU0LCAweDFlNDQwMDQ3LCAweDA0NzkxMDAxLCAweDAwMTFlNDQwLCAweDNmNDA0NzkxLCAweDkxMDAxMWU0LAotCTB4ZjIzOTQwNDcsIDB4MjNjODgwMDgsIDB4YWYyNGZjYTAsIDB4NjMwNGY5MDMsIDB4MGJhM2YwNWQsIDB4OTYzY2Y3MmMsCi0JMHhjZjNkY2I0MywgMHg0N2UxYzE2YiwgMHg4ZmMzZGI5YiwgMHg4ZmMzZDczNiwgMHg4ZmMzZDczNiwgMHhhM2YwZTMzNiwKLQkweDQ3ZTFlZGNkLCAweGE5NTc3MTliLCAweGZjMTdlODRmLCAweGY4M2Y3MzY5LCAweGI4YmM2NmQzLCAweDYyMTJmODJiLAotCTB4ZmFlZmQ3NDQsIDB4OTE4MDhiZGQsIDB4YzU3MWU1MjQsIDB4NDFlYzY3Y2IsIDB4NGY3YzhjNWEsIDB4NGRjOTVlMjQsCi0JMHg1NDVjZjk1NSwgMHgxOTJiOGI1YywgMHg4NDRiMDZkNywgMHg3ZWExNGZkZSwgMHhmMjJkZjgxYiwgMHgyZDM3Y2NiNywKLQkweGNkZTQyMTRjLCAweDE0YzhiZjhiLCAweDUxM2U0NmY1LCAweGZkZGYzMWZjLCAweGU3Zjg0OTA3LCAweDVkNzI0NWRkLAotCTB4YmM5NTdmNDYsIDB4N2RhMzQwNzYsIDB4NWRiZTFmMTQsIDB4M2I0NmZjZWMsIDB4ZWI0ZDJmNjEsIDB4MWY5YjBiZTAsCi0JMHhiZGZmN2NmOSwgMHgyY2FkOTI5ZSwgMHg4YTZkN2I0ZiwgMHhiMmY3NGZmMCwgMHgxODcwYjU5ZiwgMHhmNzRiMzRiYiwKLQkweGY2ZGFmNjliLCAweDdlZTA0YjFmLCAweGJhOGEwZGZkLCAweGU4OWU4Nzg3LCAweDA5NjczZWEwLCAweDAyNTZkNGU4LAotCTB4ZDRjMjYyM2YsIDB4ZDQ3ZjNkNTQsIDB4NzE2MTYzMzYsIDB4M2M0NmRkNzQsIDB4MDA0NGVkOGYsIDB4ZmQ5OWU3NzksCi0JMHg3OWUyNmFlNCwgMHhiOTA3ZmQ2NiwgMHhiOWNmZTE5YSwgMHg3ZTgxMWZhNCwgMHgwZTRkY2ZiOCwgMHgyNjNkODEyYSwKLQkweGFhN2NiZWY5LCAweGUwYjRmZjNjLCAweDVjNGQxOWRhLCAweGRiNWY3OTNlLCAweDc3Zjg2NjhjLCAweDhmZGZiMjA5LAotCTB4NzQxNjQ4OWYsIDB4YjJhMzYxYmMsIDB4OTlmYmNlYzcsIDB4YmIwMjhmYjksIDB4YmU4NTVkYjksIDB4YmNmYmM5ZWUsCi0JMHhhZjMxMjZhZSwgMHhjZTZjZDVkNywgMHg3NWNhZWZiZiwgMHhhNDVmNzBmOSwgMHg4OGE2NjU0OCwgMHgzYzg0MmJjNSwKLQkweGRlMzc0MTlkLCAweDFmZDg4YmRmLCAweGM0M2VmODliLCAweDFkM2Q1NzY1LCAweDI0ZDBmZGVmLCAweGE5M2RhZDFmLAotCTB4OTFjZDdjMTYsIDB4MjY4N2VmMmMsIDB4MWY4NTViMzksIDB4ZWVjNDE3MmMsIDB4MTZhZGNlMjEsIDB4ZjVhYmU1OWQsCi0JMHg5YTk1YjdmMiwgMHg5ZTc4NGJjZiwgMHgwYmJmNzc1NiwgMHgzNTM1OWJmNCwgMHg2YzM0NmFiNSwgMHgyNzUyNTFmZiwKLQkweDM2YTZlZTQwLCAweGViYzMxYTZjLCAweGQ1MDE0MmQyLCAweGRhYmQwM2VlLCAweDkzZjgxMjVlLCAweGUyMTcwMjM1LAotCTB4MjdkNjJlNTMsIDB4NDE0OWMzY2UsIDB4YTRjODljMjUsIDB4ZGJiODIxYjgsIDB4ZWJmMTlhMzYsIDB4ZTk5YzFiODMsCi0JMHg1NDhmYmY2OCwgMHhmODkzMDNiOCwgMHg3NDQ5NzY3ZiwgMHhjMjc0NDU1ZiwgMHg1ZTQwYWYxNiwgMHg0OTk0NzdhOCwKLQkweDdjNzJkOGZlLCAweDU3ZTJmMjBmLCAweDU4ZjkwNDlkLCAweDYxM2FmMGUwLCAweDhkZmQ2MjZmLCAweGVjMGY3N2Q4LAotCTB4ZWMyYWRjN2YsIDB4MjFkMzlmNTQsIDB4M2ZkZDNhZmMsIDB4YjVjYWYwNmEsIDB4MjlkMWI2N2UsIDB4NDM4NjhmZmMsCi0JMHgzZWEwN2ZlYywgMHhkZTMwZGZjNiwgMHhhMWRmYjA0MywgMHgxZjhlNzE4NiwgMHg3MjBkNGViYywgMHhiN2RhY2I1NSwKLQkweDczODNiYmM1LCAweGE5YmRhMTc5LCAweGYyZTdkNzJjLCAweDAxNTJkZmY3LCAweDBhZWQ5MGJmLCAweDBkZmIyOWVjLAotCTB4Yjk2NTRlNzcsIDB4NTJmNGQ4NmIsIDB4OTE1ZGVlMzIsIDB4NmZlMTAxZTAsIDB4YTFmMWI2N2MsIDB4OTA1ZjE5NjQsCi0JMHg5ZDI2ODlmOSwgMHhhNmZjNDY0ZSwgMHg5MzQ3ZTc1OSwgMHgwM2U1ZWVmZSwgMHhhOTZjNWJiNiwgMHhmMTg2ZWU3MSwKLQkweDJiZDc4MTVlLCAweDNmNTg4YWZjLCAweDliZmJjODkxLCAweDgyYmY1Yzk5LCAweGIxOTViM2Y3LCAweDM2MWFkYmU1LAotCTB4ZmVjNWQyNjcsIDB4YWU2ZmUxYTIsIDB4Yjk1ZGU3ZDIsIDB4YjdkZTI5ZDEsIDB4Mzg5MGEwYWMsIDB4YWM4NjU2MGYsCi0JMHhmZWU5NTdlZCwgMHhhZGE3YWFlNywgMHhjYTk4M2ZlNSwgMHhhMWYyMjc3ZSwgMHhkZmE5ZGY4NiwgMHhkYmQ0ZWU5MywKLQkweDdiZGViYzM0LCAweGRhN2JmMGIzLCAweDUwNzVjODljLCAweDA3ZTkwNmRkLCAweDRkMGE3ZWQxLCAweGI1Y2Y4MDUwLAotCTB4Nzc1ZTMzYzUsIDB4YzMyYWEwMjgsIDB4YmE5YmNkYzgsIDB4OTMxZjM0M2YsIDB4MGMxNzNkMzIsIDB4YjIzYjA4MjYsCi0JMHg4MTEyZjA3MCwgMHgyOTk4MzJkZiwgMHg4NTgzYWRlMCwgMHgxOWIxMWNiMiwgMHg0YWE0NzNlNiwgMHhlM2M3ZGQwOSwKLQkweDQxZmJhNWJmLCAweDI2NWUwZjM3LCAweDE5ODIwN2VhLCAweDU4MDc4ZTQyLCAweDE0YzUzMThlLCAweDE2NWQzZWRkLAotCTB4ZDYxMTdhNTAsIDB4MzZkNGVmOWUsIDB4ZjlmYWUxOGQsIDB4OTVmODQ5YmIsIDB4ZTI1ZmMzZDcsIDB4OWZmMDQ1OGEsCi0JMHg3OTA3YTE0YSwgMHg2ZjlmMTg1NSwgMHgwZjIxMzQ2ZiwgMHg5NzU2YjA3YSwgMHgxMjAzZDY3YiwgMHhlYzIwMjM3NiwKLQkweDEwODJlNTU5LCAweGQyMmM5M2RlLCAweDZmYzBkYmY2LCAweGUwYjVmZTQzLCAweGViZjAwNzI5LCAweDU3Y2I4YTgzLAotCTB4ZTIxNWVlMjQsIDB4NzdjODZjZmUsIDB4MjdkNDFlYWMsIDB4OGYyNmYxZWEsIDB4YzUwZDI3OGMsIDB4NWU1OGIwOWIsCi0JMHhjNWI1MDUxYSwgMHg0N2FmYWUwMSwgMHg5ZDEyZjA2YywgMHhhNGFhNGNiMSwgMHg3N2RmNTkyMiwgMHg5MWJjNWI1MCwKLQkweDM1M2ZiZGNmLCAweGIzNjc1MTFlLCAweGIzZjU3ZTA5LCAweDhhMDdiNzlmLCAweDMyYWEyNzRhLCAweDk0ZGIyN2EwLAotCTB4ZThiZWFkOTIsIDB4OWYyODllN2EsIDB4YmE2NjUwMzMsIDB4ZjVkNTJmMjcsIDB4MDMyZWY1OGEsIDB4ZGY3NThlZjcsCi0JMHhjMzQxOTA5ZiwgMHg2YzA2MDVmOCwgMHhiZjQzM2E2NCwgMHg3NzIyNTNlYSwgMHhmZWVhNGMyOSwgMHg2NGE4MTRhOSwKLQkweGJlOTJkNmQ2LCAweDc5ZmUyNDRmLCAweDNjNzU4YjlkLCAweGRmZjZkMGY3LCAweGZhMDhmMTZlLCAweGQ0ZmNmYzA4LAotCTB4NDU4MzhiMzUsIDB4YWMxZDg2N2YsIDB4NzdkMDFjNTMsIDB4YWRiZTBlYzMsIDB4YjdhMGU3NjgsIDB4M2NjOGVlYWQsCi0JMHhhOGIxMzVmMCwgMHhjNWJlMDVkZiwgMHg2ZGI2ZTdkMiwgMHgzMTI3ZGIzZCwgMHgyNGNiNzIxZCwgMHg1ZDVjZWFmZiwKLQkweDgwYjhmMTRlLCAweGQzZGM0ZTQyLCAweGI5ZTQ4YjFhLCAweGVlNWYwZTQyLCAweGYxMWY5MTEyLCAweGIxOWZiODg5LAotCTB4NmZlMDBmZWYsIDB4ZjQ5NzQzMGYsIDB4YzM2ZmU5MzIsIDB4YTRiOWY2M2YsIDB4ZmYwODBjN2YsIDB4ZTA0ZmVmMTgsCi0JMHg3Zjg3MDMxZiwgMHgxOGZmMDgwYywgMHg4MThmZjBlNSwgMHgwZTA2M2ZjMywgMHhmYzM4MThmZiwgMHhjN2Y4NDA2MywKLQkweDE2ZDg3ZjI4LCAweGYzM2Y3NTM4LCAweDY4NWI1MWYzLCAweGQzOTY2MWZmLCAweGVlNmI0N2M3LCAweDUxZWY5ZTMyLAotCTB4MjM4ZjkyZWEsIDB4NjNmYjEzNDgsIDB4NjI3NjExYjksIDB4N2NiMTNlYzgsIDB4NzJhM2NiYjksIDB4ZjRmZGI0YjQsCi0JMHg1NDdlNWIyMSwgMHg3Y2I2OWE5ZSwgMHhkYzI5ZjNiYSwgMHg4NDFmZDk4MywgMHg5NDViNmIzZSwgMHg5MTk0ZGM3MCwKLQkweDNiODllY2U1LCAweDNjYmU4NDEyLCAweGQ4NGI4ZjcxLCAweDg5ZDczYWRkLCAweDUxNzlkYzk3LCAweGZlZGJiZTdhLAotCTB4Mjc2OTRlYjcsIDB4M2M3YzEzYzMsIDB4NzhiNmUyZWUsIDB4ODlmZjc2MTUsIDB4YWMxYzlhZjIsIDB4MTU0OGIxMzcsCi0JMHhkOWMwMTk3YywgMHhiMjU2Zjg4ZSwgMHhhNWYyODc5NiwgMHg0Y2U1ZTI3NCwgMHg1N2ZmNTc2ZSwgMHg3ZWEyZTdhZiwKLQkweDE3M2NkMWNkLCAweDExYzM2ZmVjLCAweDFmNGNlNmZmLCAweDIxMTM2YmZhLCAweGFmMWUwZGFmLCAweGVhYzVmZTBiLAotCTB4YmNlMmE5OGQsIDB4NzE5MGNmYWQsIDB4OTE0MDk2NWMsIDB4MzFmODMzMDcsIDB4ZGZjNjRjYmIsIDB4ODBlZjc5ZmEsCi0JMHgxMjdiZjQxNywgMHhjMGI5YzgxMywgMHgyZGYyNGVkMiwgMHhiODhjZGY1NiwgMHgyYjVjNmM2MiwgMHg3Mjc5NWYxYSwKLQkweDIyZTIzZTRiLCAweGY0ZWQ0OWEzLCAweGM0MmY0YzVkLCAweGQxMjU1YzNkLCAweGZjNmM0YWI4LCAweDVkNWY0ODYzLAotCTB4MTllNzg5NjQsIDB4N2U5OTRkNzAsIDB4YTllZmQ3NGYsIDB4ZDRmNzQzY2QsIDB4ZjAxOTc5YTIsIDB4YmM1NDFmZTcsCi0JMHg3OTM3M2Y4OCwgMHg2NzRlYjc3YywgMHg4OWNmYTliYywgMHgzZjM0ODgxNywgMHg2MmNhZTdjZCwgMHg4YWZiZmZiYywKLQkweGJkZjgwZjc3LCAweDU2ZWMyZmRlLCAweGViYzI3ODFkLCAweDIxNTFkYTY5LCAweGM0MjliNmY0LCAweGZhYzhkNDcwLAotCTB4ZGVjMWU0YmQsIDB4NWY2MTlmOWMsIDB4ZWIwYjgwZTEsIDB4NWMwNmYyNmMsIDB4YTc3ZjI2NjksIDB4OTgwOTRiYjEsCi0JMHhmODE5ZmRkZiwgMHg4ZTMyNjVlZCwgMHgwN2Q3Yzc1OCwgMHhmNWI2ZWZkMCwgMHg4OGE1YWU3OSwgMHg4M2RiYjI1YiwKLQkweDc0NmI2ZWY3LCAweDcxZmEzMTM5LCAweDYyNWVmMTNiLCAweDBjYmQzZTdlLCAweDdkZTdlYWI5LCAweGJlNjE2ZWMxLAotCTB4NGJmOGQzMTIsIDB4N2U2OWJlMzEsIDB4YjVmYzJmNmUsIDB4NjI0OTY1OTUsIDB4ZWYyZjA2YmMsIDB4MmJkMDBmM2IsCi0JMHgxMDc0YzlkNiwgMHhjZWRmZWE3NCwgMHgzY2M0ZjllMywgMHhlMThkZWU4MiwgMHg3YWM1NTM5MCwgMHhmMTgzNGVmMCwKLQkweDEzOTBkZWM1LCAweGU4ZGQyY2YzLCAweDZkN2VmMTE3LCAweGRiNDc5YzliLCAweDg2MmFlYTkyLCAweGJhZjBlNzNmLAotCTB4MWU3ZWNjNzIsIDB4YjJlNDFkY2IsIDB4ZDFmYTk3MGUsIDB4MGZjMmJkNjIsIDB4YTUzYTYyNmUsIDB4NjM0Y2ZmYzEsCi0JMHgzMTczZDdiZiwgMHhmNWY0MWFiZCwgMHg1YWE1NzUzNywgMHgwN2FlYzZmZCwgMHhhZDRmZTA5ZCwgMHhmMmM0YWU3ZSwKLQkweDhlNWQzMWUxLCAweGNhYmM2ZTk3LCAweDA4ZWZlODQ1LCAweDUzM2VmMGI4LCAweDZmZmRlOWQzLCAweDIyYjdlMzZiLAotCTB4ZmRkYjUyM2YsIDB4ZjE4ZjMzODgsIDB4NGZkMjY1ZWQsIDB4NDY3NDBjN2QsIDB4M2MzZjM4M2MsIDB4ZmE1M2VmMDEsCi0JMHhmNzhiYzZkNywgMHgyZWRlYjViNiwgMHg3YTIxZGZiMSwgMHg4MWY0YzQzZiwgMHgxMWFkZTI1ZiwgMHgwOTM5NjZmNCwKLQkweDUzNWFmZGUyLCAweGQxYmY5NWI3LCAweDcxODkyNGY1LCAweDg0MWJiYTliLCAweDY4NzMyZGZlLCAweDFkNzlhZjJlLAotCTB4YTA5ODVlM2IsIDB4NTk2YTVkMzAsIDB4M2Y5YzE1ZWYsIDB4ZjIxNzJkNWUsIDB4NWJhMWU2NzMsIDB4NzkzZWM1NzMsCi0JMHg5MjczYTA5ZCwgMHhkODg3OWJlYSwgMHg5MDhkY2IwNCwgMHhlYTdlNDM2YiwgMHgxYjNlYTU0YiwgMHg5MzJjMWRmMywKLQkweDY1ODM5Y2YxLCAweGJmZTljN2MzLCAweGI2OWI0ZjRkLCAweDcxMDA1MDM1LCAweDE1NTI0Y2JjLCAweGQ0ZjVkYmU1LAotCTB4NWY0MzRmZDAsIDB4NjUzOGY1NmIsIDB4YTQwNWI2ZTMsIDB4OWYwZGVjOTksIDB4MGRjZjZkZGYsIDB4ZGQwMTlmNDMsCi0JMHhmOWQ2MmM5ZSwgMHg5MTdjZjRjOSwgMHhmN2JhZjE0YywgMHhlNWQ2N2U3NCwgMHhlMzFlZjU1YiwgMHg3NTU3ZGM2MSwKLQkweDEzOWJhZmJkLCAweDI4YjZiMDllLCAweGI3OThkZWRhLCAweDgzZjY0ZDJlLCAweDVlY2U0M2ZjLCAweGY2ODJlOWQ1LAotCTB4ZGQ3YjQ0ZWIsIDB4YTM3NmU5OWUsIDB4ZWM2ZWM4NzEsIDB4YmIwZTk0ZGIsIDB4NzkxMTVmYjEsIDB4YTVkYjc1YWIsCi0JMHg5OWVlYjc1ZiwgMHhmYWRmMTEyNCwgMHhkZjg3NzVmNywgMHg5ZGRiODViOCwgMHgzZDc3Nzg3YiwgMHhhYmFjNmJmNiwKLQkweDQ0ZWQyYzI5LCAweGIwNTNmYjMzLCAweDczZjRjYjFiLCAweDdiNThiM2JmLCAweGM3YTRjY2E3LCAweGNjZjc3ZjRkLAotCTB4ZTJjNWU4NDQsIDB4ZGY5OWZmMWUsIDB4MTg3N2Q4OTIsIDB4NjdiZGU2ZjYsIDB4MGNmNmYxN2UsIDB4MzU3Y2Y0NWYsCi0JMHhjYjc0YjFmNiwgMHgzYzFiMzhiZiwgMHg3ZGM5YmE2NiwgMHgyYTVjMmQ2ZSwgMHg1ZjgxMzlkZSwgMHg2ZTM1N2ZiOCwKLQkweDgxZGU0NDU0LCAweGZmYzI1ZGRhLCAweDJiMWRmODM0LCAweGJmYWMwZDA3LCAweDFjYTg5ZThkLCAweGM5MWZmYzE4LAotCTB4ZTUwZDcyNmYsIDB4MGRmZjI0ZTcsIDB4NjA3MjFiN2UsIDB4MTNlMGRiZjAsIDB4ZjkzNTljZTEsIDB4ZmZiYWM2ZmQsCi0JMHhiMTdiYWZhMCwgMHhlYjVmYmYyZSwgMHg0NTc4Yjc3YSwgMHhkMDk5NmI5ZSwgMHgyMzU3M2NmNywgMHhhZmFmNWVlNCwKLQkweDBmOTZiMjZkLCAweDY0M2JjOWYxLCAweDJmNDMzN2RmLCAweDlmMjQ3YTA2LCAweDY1MzliNjA2LCAweDQ1ZGY3MjFjLAotCTB4YjljNWNhN2MsIDB4Yjk2M2FjNmYsIDB4ZDY2YzZmMWUsIDB4NzRjYjg2ZTMsIDB4OTRmOTk4M2YsIDB4NmE2NjVlNTQsCi0JMHg1M2U0ODRmNywgMHhmZmFmYjNlMywgMHg2MjdkY2ZlYiwgMHg2ZDhlZDI3ZiwgMHhlMmZlMTM4ZiwgMHg4MmZkOWVkMiwKLQkweDFlNWJiNTVmLCAweGJiNzFlNjc0LCAweDc3MTk3MjljLCAweDZkZjNiMjFjLCAweGU3ZTIyZjdlLCAweDc2ZWNiNzhiLAotCTB4Y2E3M2ZmNDIsIDB4ZTU2MmRkMjUsIDB4MDc3ZjRlYmQsIDB4ZTcxNWQwNmIsIDB4ZjczYTYyOGYsIDB4N2JiMGY2OGMsCi0JMHhmNTllNzlmYiwgMHhmMTkzZTM2YiwgMHg2Nzk4YzZhZSwgMHhlMzk0Yjk1ZSwgMHgzNGQ0YjZjNiwgMHhkNmQ4ZDdjYywKLQkweGFiZGMwM2YwLCAweGFiMWZiYjBjLCAweGE1ZTNhNzc3LCAweGYxZTUyYzNlLCAweGFmYTc5N2EwLCAweDE1ZDc3MzUyLAotCTB4MzMyZjljNWQsIDB4Yzk3MmFjZTAsIDB4NzkzMTFmYjcsIDB4M2IyNThlZjEsIDB4ZTIyN2U3YjEsIDB4MDQ5YWM0MWQsCi0JMHg4MmU1ZjkxNSwgMHhmMzA4NDg4MiwgMHg2ZWIxOGU0MiwgMHhiYzQ1ZGIxNywgMHg4OTY4Mjk4NywgMHgxNDc1OGE3YywKLQkweDAyZmY3YzkwLCAweGYzMjY5NDk4LCAweGVmOGNlOTFmLCAweDMwNTc2NWUxLCAweGQ4NGJiN2NjLCAweDIxMDdkM2E4LAotCTB4ZThkM2Q0MzQsIDB4MWZmNjE5NDgsIDB4ZjI0NmI3NmIsIDB4MzRmOTBjMmIsIDB4NTNiNTg5YzYsIDB4Yzk2ZmVkMjMsCi0JMHhlOWRmZGM3NywgMHg1MjVlM2QzYywgMHg3OWJhZTZhOCwgMHg0ZTFmZmFkZSwgMHhmYTNmMTE1MiwgMHgxMmJhN2RiNiwKLQkweDY4NjliZTY0LCAweDE1YWMyY2JmLCAweGI3ZWNjMzY5LCAweDQ2ODNkZTQwLCAweDU1Nzc2ZmRlLCAweGJkZmIzMGZhLAotCTB4ZWJhYzBmMjgsIDB4N2JkNmYxODksIDB4MjVkMjNmMjgsIDB4MTVhNzIzZjMsIDB4ZGZiOGI3M2UsIDB4ZTJmMWI1ZTksCi0JMHgyZmIxOTliZCwgMHg1ZGZmM2UyMywgMHg5NDc3ZTdkZiwgMHg4YjcxZTlhNywgMHhjOWZjMTI0OCwgMHhmZjVkMDRiYSwKLQkweGY5NDcxMmMzLCAweDcxYjk1MzAyLCAweDQ2ZjQ5ZmRlLCAweGY2NGNkMjkyLCAweGZkMzZjM2Y5LCAweDc2YzhhNDNjLAotCTB4MWY2ZjgzMTEsIDB4OWM3Mzg4NGYsIDB4NjQ5ZDNhZWMsIDB4Y2E3YzgyMmIsIDB4ZDZmZDE5ZjUsIDB4ZWQ5M2Q1M2IsCi0JMHhlMjliNzNiMCwgMHhmNjZlZmJjNCwgMHg4ZTIzMzY5YiwgMHgxNTRjMWNkNCwgMHhkYWRiOTlmMSwgMHhlMGVjY2Y0YiwKLQkweDk4ZGI2ZTcxLCAweDVlYmYwYWFkLCAweGU5OTdmM2Y3LCAweDdkNzEyZmY2LCAweDY4NjllNmMzLCAweDBiY2YyM2JmLAotCTB4NTNkOWJlM2YsIDB4MmRmYzQyZTMsIDB4MmI4MTdiYjEsIDB4ZjJiZGY4NWYsIDB4YWJlNDYwMWUsIDB4MDM1NDJiZDYsCi0JMHhmYjBlNWJmZCwgMHhiZGIyYmQwOCwgMHg2NmYzODA1MCwgMHhmZmU5MGVmOSwgMHgxNmQxYjdjZiwgMHg3NWM3M2JlNCwKLQkweDgyY2JjY2Q2LCAweGE4YTlkODdkLCAweDE3NjkyN2YwLCAweDdlZTM1MWRiLCAweDY5MjNiNmM2LCAweDcyY2VjZDRhLAotCTB4OTYyYmViZDAsIDB4MzJmZjFlM2IsIDB4ZWM3NmIxOWMsIDB4N2I4MDI3YTcsIDB4ODE3ZmIxMjcsIDB4YTAzZDYwZmQsCi0JMHhiNGI5NTY0YiwgMHg0ZmJiMjc4ZiwgMHhhMjhhZjkyNSwgMHhiZjUzZmNmNCwgMHhjMmU0MzE3ZiwgMHgyMzM1OWJjOCwKLQkweGYyMGEzM2VlLCAweGY5MGU5NzUxLCAweDYzZjNkMjY4LCAweDBhZTdiYjliLCAweDRkZjc3OWJjLCAweDRlOTczYmUyLAotCTB4NjQ3YmU2MzQsIDB4MGY1NTgzZDMsIDB4NzMzZTU5MDcsIDB4YjUzNDdhNzUsIDB4N2UwMWJkY2UsIDB4NzEzZDhhZDEsCi0JMHhlMzVlZTJhOSwgMHhmZDlhZTYwYywgMHhmN2RkYTZkMCwgMHhjZTVlZWY4YiwgMHhkZjE3OGVlZSwgMHgxNzdhNTRiZCwKLQkweDNlZjJhNjU0LCAweGY1NGFlZDk3LCAweGMyZTc0ZGRiLCAweGRkZmViYTJiLCAweGYyZDczYWQxLCAweDhmMzM0YWZkLAotCTB4N2ZmMWU1ZTksIDB4ZGUyODkzZGYsIDB4YTVkZjE5MmYsIDB4OGVkNmU1NWMsIDB4ZmJlMzRlYzEsIDB4ZjkzZWU5OTQsCi0JMHg2ODk2NGE1ZCwgMHgzZTM2MWJlZiwgMHgxZDMzYzA2ZiwgMHhkMzA3M2JmMiwgMHhkNDM3MzY3NywgMHhkNjk2ZmY3MiwKLQkweDY3MThjOTAzLCAweDk1NmY0M2Q1LCAweGQ3MTA4NTMzLCAweDFhN2MwMzdhLCAweDg3NjZjZWZhLCAweGY5YTZjZWZjLAotCTB4NzdiZmUxYTEsIDB4M2U0MzVjODEsIDB4NGIyMTFjNTcsIDB4NTBiNmYxN2UsIDB4YjU0M2YwOGEsIDB4ZWY5MGI5MzAsCi0JMHhmYzI0YmNkNiwgMHg2YTc2YjNkYywgMHhmODZlYjljNywgMHg0NDc5NDYyNSwgMHg5NGQ5YzNhNywgMHg3ZmYwNWNhZSwKLQkweDcyNDdkZWU1LCAweDljN2M2ZTcxLCAweGJkYmFmMTI0LCAweDc2MTJmZWI3LCAweDRlMzI3YjQ4LCAweDEyMGVkZmZhLAotCTB4NTA2MzZkZmUsIDB4ZjdjNmNiZmEsIDB4MWJhYTQ0NTMsIDB4ZTU3M2YwZjcsIDB4OTViYzYyODksIDB4YzYzODc3ZmEsCi0JMHgxMGJmZDhiYSwgMHhhODNiMWZlNSwgMHhmN2MwZWIxYSwgMHg3N2U3OTAzNSwgMHhmMDY2ZTExZCwgMHg0N2Y2NWRmMywKLQkweDQ1NzhlZjkxLCAweGJiNzdiZjk3LCAweDdiYzRmM2VjLCAweGY4MDQ1NjIyLCAweDFkNzZlZjE1LCAweGQxMWU0MjQ4LAotCTB4ZWNhYWMzZjAsIDB4ZjBlYzA1ZWYsIDB4N2UyOTBlOTcsIDB4NDU4OWMzOWMsIDB4ODYzZGM0MjcsIDB4NmFjOTc4ZjQsCi0JMHg3NWI3OTRhZiwgMHhjYmNlNzMzZiwgMHgyYWZjMmQxZSwgMHgwOGUyZDI1MSwgMHhkN2UzODZiYiwgMHgzNGRmYmExZCwKLQkweDJmZGMxZjg0LCAweGZiMmQ2NWVlLCAweGQyZDA1ZmE0LCAweDA1Zjg0YTczLCAweDdjNjE5Zjg2LCAweGRmNmFiNzQ3LAotCTB4MTgyN2UxMjksIDB4OTQxZjU2ZmQsIDB4MjgzZDY5NzQsIDB4NmQwYTFiY2IsIDB4YTAyNWJjNDYsIDB4YWNiZWUwMTQsCi0JMHhkOTcyN2MwOCwgMHgzODM2NGJmZCwgMHgyNWU2ZjhjYywgMHhiZDAwMGExYiwgMHg1ZmE0M2M3YSwgMHgwYjViZTVmOCwKLQkweDMzZWUyNTdmLCAweDcxZjUxYmFkLCAweGU2OWE3NzE5LCAweDQ2MzY5OTRiLCAweGU1YzVjNzdlLCAweGVmZTgzZGUzLAotCTB4NWFkZmRjYjMsIDB4NTBmYmNhMGYsIDB4OGI2MTM1YjgsIDB4ZGFiYjE3NzgsIDB4NmNlYzAwZTMsIDB4N2NmMzg4ZjUsCi0JMHgxMGFkOWI1NywgMHg0YTAzYzllZiwgMHg4ZWU3ZjA4MiwgMHhjNmI5ZWZlYSwgMHgzYzRkZmFhYywgMHhkNDU5MDRlMiwKLQkweDEzY2I2YmRmLCAweGE3ZjJiOGVmLCAweDE0MTkzY2YxLCAweDhjYmFlZjE0LCAweGZjMmU2N2VmLCAweDE4YTU0N2UzLAotCTB4ZTQ1Yzc2N2YsIDB4OTc4MDIyMDAsIDB4MDk2YzdiNGUsIDB4NTNiMzI1ZjIsIDB4ZjhhMGE1MjIsIDB4OTUxZjg3YTUsCi0JMHgwMGU0NDY3OCwgMHg2MGRlNTBlMiwgMHhlOWNhOTJmNywgMHg2OTVjNDY3ZiwgMHhhZjg5NjJiZSwgMHg2NTY4YWRiZiwKLQkweGUwZWI0MTIwLCAweDZiOGM5Nzc5LCAweGZlN2M4YmY0LCAweDhlNTI2OThjLCAweDdiZTMxY2M2LCAweDVmNTFlZTI0LAotCTB4MzAzZGM0NzgsIDB4Zjg5YjU0NjMsIDB4MjI4YThiYWUsIDB4MTQ3NzY4YTUsIDB4ODIzZTU4N2QsIDB4ZjA4NDI2NWYsCi0JMHhjOTNjOGMzZSwgMHg5ODNjY2YzMiwgMHhhOGVmMTIxZiwgMHgzMGRmMzJkYywgMHhmMDJlOWZkMCwgMHhiNDMxY2UzMCwKLQkweGRhMmRkNGZmLCAweDVkZDFjYWM3LCAweGEwZmRlNGQzLCAweDYzZTY0ZTI2LCAweDM5OWM1NDZmLCAweDliOTMwMGZmLAotCTB4ZmEwYjVkYTcsIDB4OGJkYmU0ZDUsIDB4ZGVmMWUzZmQsIDB4YmYwM2JlNGUsIDB4MGQ2ZGU3YTAsIDB4YmU4ZTc5N2YsCi0JMHg5ZWZkMWNhZiwgMHhkMzI0YmFlNywgMHgwMjUzZmQwMywgMHhlNWRkZjEwMSwgMHgxYWM3NDU3ZCwgMHhmZDAzZmYzMSwKLQkweGQwZmU0MjZlLCAweGE3MzhjNzc4LCAweGFiZGU0MTNmLCAweGU3MTZhOTJlLCAweDUwNzNlMmFiLCAweDU2M2ZiNzFkLAotCTB4MWRlMzBiNjQsIDB4MTZlNDAzZmYsIDB4Yzc3MjY1NzksIDB4NzhiNmQ5ZjgsIDB4Mzk1YjFlZjEsIDB4MzgxN2NhZmEsCi0JMHg5ZmVkYjI2NywgMHhmZWYwYTZmNiwgMHg1MTUyZmZiMywgMHgwN2ViODM2MSwgMHgyNmY2M2NjZSwgMHgzZGMxYmFjMywKLQkweDdkOGZiMWZiLCAweGY2MjM1YWM5LCAweGZhYTA3MjcxLCAweDdlMjRjNjk0LCAweDU2ZTNkYmMwLCAweGU2NDVmOWU1LAotCTB4ZmJiZDFmZjUsIDB4NWIzNGU0OGIsIDB4ZmExNzVkNzQsIDB4Nzg3MzNjY2YsIDB4YzQ1YmEwMmEsIDB4YjUxY2U3YTUsCi0JMHhjYzU2MzhjYiwgMHhmYTY0MmU3YSwgMHg2ZTcwYmJjNCwgMHhjMTdlZTgyNywgMHg1ZWUxMGI2MywgMHhlZjY4ZTczOCwKLQkweDFjZGY1ODNiLCAweDdkYzY3N2JjLCAweDZmM2NlZGMxLCAweDk3YzhlNzNlLCAweDFhZjc4YTkzLCAweDY0ZGY5ZDMwLAotCTB4MWFjMGVkNDcsIDB4ZWY0YTNjZmQsIDB4MDU3OWJkZjQsIDB4ZWQ1N2M5Y2UsIDB4NzMwMzc4ODQsIDB4OTYzZmYwNTIsCi0JMHgxZmMxNmY3ZiwgMHg2OTljZTNjMSwgMHgyYTM2ZGVmMiwgMHg0ZDM4MjZiZiwgMHgwNzI4NjNlOCwgMHgzZWQzMzhmYSwKLQkweGQwYjUzYmZjLCAweDYzOGY0NTM0LCAweGZjMWE3ZTQ5LCAweGYwNjNmODMyLCAweGRkMzNhMGMzLCAweDE0YTVlMjcwLAotCTB4ZjhiN2QwNDUsIDB4M2ZhZTkyODcsIDB4ZTJmZDc0MTAsIDB4NGI1NjI2ZjgsIDB4ZDcwZmU0YmEsIDB4N2ZmZWZhMGEsCi0JMHhmYmM4ZWJhMywgMHgwZDg1ZGY5MywgMHhkZTFlZWZlZCwgMHg3ZjY1OWU1ZiwgMHhkYTVmZmQzZiwgMHhlZmY3ZDA5ZiwKLQkweGQ2MTNiZmJjLCAweDg2NzdhNWZkLCAweDRlNDEyN2UzLCAweDdmMDliMjFlLCAweDI4YmRmNjJhLCAweDk3YjA5MjE1LAotCTB4MTEwNGY2ZjUsIDB4ZTQxMmQ1MzcsIDB4Mjc2YzA2ZjcsIDB4MzQ5ZDgyNWYsIDB4ZWFiOGUzZWMsIDB4OGFmYzMxNDgsCi0JMHg2MzhmNDQ5MywgMHg4ZjViMTE1ZCwgMHg1YTc4ZmYyOCwgMHhiMTkzOTBiZSwgMHg3YzRiMjI3NCwgMHg5NDg4ZTEzNywKLQkweDU0ZWQ2ZmMxLCAweDc2ZGQzYjAyLCAweDg3MzNjOGMwLCAweDdhNTY1ZjYxLCAweDQyZWRkZTQ0LCAweGYyNzQxNmM4LAotCTB4YTFhOWRkZjgsIDB4ZGU3OGNiOWQsIDB4NDQ4YjliZWUsIDB4ZDEwMmU1MWUsIDB4MWYzODIzOTQsIDB4N2YwODI0NTcsCi0JMHg4NDk1M2JiNCwgMHg5ZGFlZWFkZCwgMHhlNzk2ZmMyOCwgMHhjMmU3YjZiZiwgMHg0ZGFmZWQ1ZiwgMHg2ZWRiZjkxMCwKLQkweGZjM2I2NDdmLCAweDNlMDllZWNmLCAweDdmNGRjODM1LCAweGY4NDRkMGExLCAweDZlMDVjMWFiLCAweDAyZjc0ZjMxLAotCTB4YjdiYjA3NjksIDB4ODNmN2M4ZTcsIDB4ZjIwOWZhMTQsIDB4NDhhZThmNDgsIDB4ZWVjMTc5MTAsIDB4YzQyYzgxZGQsCi0JMHhkMjRjM2VjZiwgMHgyZTFmNDM0ZSwgMHhiODczY2JiMSwgMHgxOWNiOGYzYiwgMHhkNGQ0YWMzZSwgMHg2MmJjNjMzNiwKLQkweDZkNDhlZWI5LCAweDc5N2JiM2MyLCAweDM2MDJmODk0LCAweGIyN2U1Yzk5LCAweDZiZTQ0OTNkLCAweGUyMzE3ZDBkLAotCTB4YTc4MmUzZDUsIDB4YzY0ZTgyNzYsIDB4ZWJlZmI2NzcsIDB4NWRkMDY1ZjIsIDB4MGVlZmM4MDksIDB4NzIxYmZhMGQsCi0JMHhiYmE3NWEzNiwgMHhiNzk0YWY3MiwgMHhhYmM3ZjdhMSwgMHgxZTNmYmM0OSwgMHg3N2MwNGJjYiwgMHhhYTcxZjU2YSwKLQkweDMyYmU3NDBmLCAweGViMTJmYjQ1LCAweDdjY2I1Y2VlLCAweDkyZmQ2M2IxLCAweDFkZjEyN2ZlLCAweDk1ZmUzMGUxLAotCTB4ZDM4ZjQyYjMsIDB4ZDQ1ZmRmZTgsIDB4ZjUyM2I0OTMsIDB4ZWQxNmY3YzYsIDB4MjgyZGVmZDYsIDB4NzkxNTM2MzIsCi0JMHhkYzQ3MjEzYiwgMHg5YWJlZjdmZiwgMHg4ZGQ4MGFiOCwgMHhjMTI1ZGY4MiwgMHg0ZmZmMWM2ZSwgMHg4MGVmYjBmYiwKLQkweGJjZjIxNWJjLCAweDI5NmJjNGYwLCAweGZkZmViZGEyLCAweDFmNWZlMTg5LCAweDgzOTQ3ZmY3LCAweGRkZTRlMjczLAotCTB4ZmMwNThjYWYsIDB4YWQyNmE5MmEsIDB4NzBmNWQ3ODIsIDB4NzBmM2U3ZWQsIDB4MTU5ZmJkNzQsIDB4YmNjZGRmMTEsCi0JMHg4ZTY1ZmI1ZiwgMHhmYmRmYjc4OCwgMHhlZmY3OTA4YSwgMHgwMmZmY2ViYSwgMHhiMzhiN2E1ZiwgMHgwMDAwNDBkMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU5NDc4MDksIDB4ZTc3ZGYwZDUsIDB4OTkyNjY2NWQsCisJMHg2YzgxYmM5OSwgMHg0NGQ4NGVhYywgMHg0MjQyNzQwYiwgMHg2MWRiMTAxYSwgMHg4MzExNjg4YiwgMHg5ODE3MDU0YiwKKwkweDI2NGY2NDA4LCAweGRhYzdmNTIwLCAweDAwNDBjZmVmLCAweDhiNDM1MTUxLCAweDAzYjQ1YTM1LCAweDM0MWIwNTA0LAorCTB4MDI0MTgwZDgsIDB4MmQ4MmUwMGUsIDB4NWQ2YWQ4ZDUsIDB4YzhhMGQyZGEsIDB4MWI4MDkzMWEsIDB4Y2VmYzVkZmUsCisJMHhjOWJlZjczOSwgMHg4MjI2NGVmYiwgMHhmNWZmZmZiNSwgMHhmOGY4ZmVmYiwgMHhmNzdiZWU1YywgMHhjZTczZGRiMywKKwkweGUyOGVmNzNkLCAweDhiOTRjNzE4LCAweGZmMTJmYjE4LCAweGRkOThjN2JlLCAweGQ3MWIxOGM2LCAweDIzNTYzMjlkLAorCTB4Y2YyZDRhZDIsIDB4MDNkMDU4Y2QsIDB4YWM2MmNjZmYsIDB4OTc4NWFkZGMsIDB4NjUzNjMzYTcsIDB4NWVmOTFhODcsCisJMHg0ODM3ZTQxMiwgMHg2ZGU0M2I2MSwgMHhkZTU0OWQ3YiwgMHgyM2U3OWViZSwgMHhhMGNmY2Q2ZSwgMHhjODNhYTNmYywKKwkweGRlZGVkMDRiLCAweDUwNjVjMGYyLCAweDY2NDNiOWRlLCAweDkxZGJiMTFiLCAweGMyOTYzNjcxLCAweGUzMDczMWQ4LAorCTB4Y2Y5MDU5N2YsIDB4YzljMGFjNjYsIDB4ZjYxYmU1YjMsIDB4NDVmNmM1Y2QsIDB4ODRlNjc2NGQsIDB4MTU3N2NhZmUsCisJMHhmMjBjYmNjZSwgMHg4NjU1MDc4NSwgMHgyZjM3Y2E1NSwgMHhiZTQzZmFkMywgMHg2MDM1MmMzOCwgMHg5ZjMyNjNiZSwKKwkweDFjYTc2ODVmLCAweDNiZjUwY2RlLCAweDM3MjkyZDNjLCAweDU1M2IxOGI4LCAweDhkNWU2MGU1LCAweDRiNzc2YWIxLAorCTB4MThhM2Y1Y2EsIDB4Y2Y2ZjA5MmIsIDB4ZjUyNTc2YzUsIDB4M2E5NzBmOTIsIDB4OTdlNmM3NjUsIDB4YjZiYWUxZmIsCisJMHg5N2JiM2U0YSwgMHhmMTJkZDJiMSwgMHhjZjkyM2JjYywgMHhmZmY4NGJlMSwgMHhmOTFjYTM1OCwgMHg4NjJmOTQxZSwKKwkweGI3ZTgzMjc1LCAweDMyZTRkNTkwLCAweGFiNWZjNzE5LCAweGYwZGRkZDc5LCAweGQzYTU1NTNiLCAweDdjYmU0NjM4LAorCTB4ZWQwMzhjMmIsIDB4N2M5NjllMmEsIDB4MWIwYWM0YjgsIDB4ZjhjMDM0MGIsIDB4YjM5Y2JiZWQsIDB4N2Q3MGI5MzcsCisJMHg2ZTExYjRjYiwgMHgxYWRkZDc1YywgMHhlNzBjMmJkNiwgMHg3MTdhNzRlZiwgMHg1Y2I0MWI3ZSwgMHhiZjU5MmYyOCwKKwkweGQ1MTgyYjQxLCAweDk2ZTk1ZmRkLCAweGQ1NzlkNmJlLCAweDk4MGQ0ZDBlLCAweDUzZDNhM2NhLCAweDQ3Nzk4YzU1LAorCTB4MTg0YmU3NzQsIDB4YmY0MDM3ZjMsIDB4YjM2YjA5NGMsIDB4ZmY3Zjc3NDYsIDB4OTYzMjI1ODAsIDB4Y2NjYmZkOGMsCisJMHgxZmVlZThlYiwgMHg0M2RmNDkyMCwgMHgwMTNmYzE2ZiwgMHg2ZTNkYTE1ZSwgMHhiNzgxYWI4MiwgMHhkYmZjM2FjNSwKKwkweGIzYjc4ZGRiLCAweGQyYTNjMGJhLCAweGRmZWU2ZDk5LCAweDNjNDAxZjQ4LCAweDEwNmE3Y2MwLCAweDExYWU5MDRlLAorCTB4NjQ0Y2YzZjMsIDB4ZGZlODE0OTMsIDB4YzRiYTY3ZTMsIDB4OTE4ZjVmN2EsIDB4OWYyY2E4ZDYsIDB4NDIwYjU4YzEsCisJMHg3OGNhZmRhMywgMHgxMTZjNmJjOCwgMHg5M2Y2MzFmMywgMHhhOWZlZDkxNSwgMHgwNTlmYmY5MCwgMHg1N2JjZTJlNiwKKwkweGM0MjI4MTQ4LCAweDY5MGQ2MzEzLCAweDI0YWJiZjQ4LCAweGZmZDcxYjM2LCAweDk0MzQ5YzAzLCAweGY0MDdlYWFmLAorCTB4OTlhZjcwMDksIDB4OTY0OWJkOTYsIDB4MzA5M2RjYzQsIDB4YmRjNGYwNWYsIDB4MjE0ZmQ0ZTksIDB4M2Y0MmEzZjUsCisJMHg4ZmRmY2Y0MywgMHhlOTYzOWI5ZSwgMHgzMjJkY2Y0NywgMHg3ZWE0YTlmYSwgMHg0ZmQ2MTc5YywgMHhlYjA0ZWU0ZCwKKwkweDhjNGI3MjdjLCAweDdlYTRlZTdlLCAweDJlYjYxN2RjLCAweGQ2ODk4YWZkLCAweDQ2NTE1Y2Y5LCAweGY1NGUyNGZkLAorCTB4OTdkNDAwYjEsIDB4MmQ2MDdhMGQsIDB4NWRjYTE5N2UsIDB4ZWY2Mzg5ZjUsIDB4OThiYTY2NjUsIDB4ZGZmOTEyYmMsCisJMHhhNjYyNWMwZCwgMHgzODljODQ4YiwgMHhmYTI2MWQwYiwgMHhkMGYyNThmYiwgMHg1YmVjN2U5MywgMHg0NDgzMGYyMiwKKwkweDVmMWEzNTEyLCAweDVjOTFhZmViLCAweDQxZGZkNDk4LCAweGJiZmEzYmY5LCAweDMxZGMyZTQ4LCAweDBlYjE3MDIxLAorCTB4NTliMWMwZjMsIDB4ODE2YmM4M2YsIDB4ZTgzMWViNmYsIDB4YjEyOWU2MWEsIDB4MzZiZDRjMzQsIDB4ZWZjYmEzNGMsCisJMHgyNjFjMzk1NiwgMHg4OGRiZjgwZiwgMHg2ODNlZDAyMywgMHgwODkxMWNlYiwgMHhhNGQyZjVmOSwgMHgzNjVjMjA1ZiwKKwkweDI3YzExYjMzLCAweDU4OTU2NjRlLCAweDQ4Y2VjZTJmLCAweDllOWRkZDNlLCAweDgyNjQyOWJkLCAweDgwNDFlYWQzLAorCTB4ZGZiYmE5N2YsIDB4MGQyMDZhZDUsIDB4YmIyYjZiZTksIDB4YjZmNDg0MjEsIDB4YTdhYzEwNmEsIDB4ODU0ZjYzM2YsCisJMHgxNDg0OGZhZSwgMHgyMGE4M2Y2OCwgMHhkNzY5ZTEwZCwgMHhlM2NkYmY4MCwgMHgyOGZlMzA2YiwgMHgxYzE5ZmYxYSwKKwkweDNmOGUwNzc3LCAweGY2ZjhlN2FlLCAweGYxOTYzOTIxLCAweDJjOGI4MzFkLCAweDE4MzQzYmUzLCAweDE3N2RlODFmLAorCTB4MGY4YzU1YmIsIDB4ZDhjMDliZjAsIDB4Njg1YmExZjMsIDB4MjJlMGZiN2MsIDB4OGQ2ZWZmMWEsIDB4OGZjNjU5MTUsCisJMHgwNWZmMWFlYiwgMHhkZWE1ZjcxYywgMHg4MjY0M2ZkNiwgMHg0YjgzZmQ3NSwgMHhmOGQ3ZWJhYywgMHgwYjY1NWZmYSwKKwkweGI0NzFmOGM1LCAweDE2ODc1ZmZlLCAweDJlMGZmNWYwLCAweGYzYjdlYmUxLCAweGY3YzZiYjdlLCAweDc1ZmZjMTc0LAorCTB4ZGVhZGY3MWMsIDB4YTI3NDNmZDYsIDB4OTUxN2ZkNzUsIDB4ZTc2ZmQ3NTksIDB4Y2FjYmJmZTMsIDB4MWEyZWY4YzUsCisJMHgxOTUwYmRmZiwgMHg2NTQ1ZmY1ZiwgMHgwZjY2YmUzNCwgMHhiNDhlOTBmOCwgMHg2MTk1NzEwMSwgMHgwNDBkOWYxOCwKKwkweDE5MjU0ODg2LCAweDY0NzRhN2U1LCAweGZkYTBjNjFmLCAweGUwODQzNjNhLCAweGE3MWM0NzcwLCAweDgwZTJjZmJiLAorCTB4ZjJkZDVjZGUsIDB4YTM4MTg1OGUsIDB4MDg1NTllNDAsIDB4OWZhZDJmOWEsIDB4YTU5Y2ExYTQsIDB4MGI3YjkwNzIsCisJMHgzNDE3NTRjNSwgMHhiMGRmYjRjOSwgMHg3MGYwZjY3NSwgMHg5MzdiNmY5OCwgMHg4MmZjYzIxYywgMHg2NTg3OTc3NSwKKwkweGJjZDhlZmRhLCAweGIwYTc2YzNjLCAweGYwZmY3ZTA4LCAweGNkMWJkMWExLCAweDE3NGU4YWViLCAweDVhYzdhOGQ2LAorCTB4ZTdjNDdjMmQsIDB4NDZjYzlhMTMsIDB4YTZmY2MyNTYsIDB4ZWI4YzExMjEsIDB4MzkwMzFmY2UsIDB4YmU3ZTQwY2EsCisJMHhkMzE0NzIwZiwgMHgwNzhjMmFlMywgMHg5YzgyOGZkZiwgMHg2Zjk5OWE2NSwgMHgzYzdkZjE5NiwgMHg5OTFjZGVjNCwKKwkweGZmODI3MjgyLCAweGJjMzg1MzFkLCAweGMyOTEyZDhmLCAweGQ2Y2ZmZjA4LCAweDNlNTBkMjJlLCAweDA3ODlhYzJkLAorCTB4MjNjZjc3YTAsIDB4YjlkNGYwMjgsIDB4MjhkZTFlY2IsIDB4MDhiZDNjMTEsIDB4MTU4OTFiOWYsIDB4YTAzM2ZiMTksCisJMHhiNjgwMWZiNSwgMHhhNWFmYjZiMCwgMHhiYzJjMmRkZCwgMHhjZmVhMGQzMiwgMHg0ODNmOTM1ZiwgMHgzY2RmZjU4NywKKwkweGM2NTYzZWRiLCAweDA3Zjk4M2ZkLCAweGQ5OGY4OGQ4LCAweDYzMGU1YjAwLCAweGFhZDcxYmIzLCAweGUzNzMyMDAzLAorCTB4NTZmZGY1NmMsIDB4MDEzOWZiNTMsIDB4MjJlNmZlNmIsIDB4MGQ1ZGJlNmIsIDB4MzdkNDM2YWIsIDB4MDFiNjI1OGEsCisJMHhkMmI1YmRmYSwgMHg5MzhjNmU1YSwgMHg3OGUxZjUyOCwgMHgyMGZkZTMxNSwgMHg1NmY3Y2Y4NSwgMHg2N2UyYzc0YywKKwkweDU3M2FmMDlkLCAweGY5OGQ2ZGU3LCAweDU5NTJlZjA0LCAweGQ2Y2JmNjg0LCAweDRmZjg0NjY0LCAweDlkMDE3YWE2LAorCTB4YmU3YTNiYWYsIDB4M2Y4NzU1NzMsIDB4ZjczM2U2MGYsIDB4MTllMDk5NGUsIDB4YmRkNmZmM2QsIDB4MThkYjdlZjEsCisJMHg1NjNmNmI0OCwgMHhkN2EzMDQ5MSwgMHg3OWZmM2QxMywgMHhhM2Q3YTM0YiwgMHgxZjk2MWU5MywgMHhlOWNlZmU4YSwKKwkweDgyOWU5YTI0LCAweDFlZmE5MzRkLCAweDZmMmJkNTM1LCAweDUxZWZiMmI4LCAweDZlOTU3ZDEzLCAweDE3Yzk2NTk5LAorCTB4ZWE1OGU3ODcsIDB4NWJlNmQ2MTcsIDB4MTRkNjE3Y2EsIDB4YWZlN2NhNWIsIDB4ZTdjOTY0NWUsIDB4ZDRiNGVlODcsCisJMHg5OTc0Yjc5ZiwgMHhjYWQ2ZmNhNSwgMHgzN2U1MmM3YiwgMHhlNGI1YWQxNywgMHhiMTFlMDRlNywgMHhmNjcxYmZkNCwKKwkweDZkYjk0YjA2LCAweDIwZDcyNWVmLCAweDI1YmY1NTFmLCAweDNlMzdkYzMzLCAweDAwN2IxZDc1LCAweDVkNGZjMWY1LAorCTB4NzFmMTBmOGEsIDB4Zjg4ZDJhYTIsIDB4OTc5NTU0ZTAsIDB4NGNhNmY2ZDIsIDB4YzFjYjgwNDcsIDB4MTY3MTU0MDIsCisJMHhhZDA4NmIyZSwgMHg5OTcyODg5ZSwgMHg1ZTJjZmM5MSwgMHgxYTE0MzNiNiwgMHhlNGFkZGEwOCwgMHhiNWM5ZjgyNSwKKwkweDA5MDA4YjFhLCAweDE3NGZhYzRiLCAweGE2Y2E3NzFkLCAweDk0ZjNkNmYyLCAweDY3YTMwMmQ3LCAweDViOTcyY2Y2LAorCTB4NmUwZjdmNjMsIDB4ZTUwOGJmY2MsIDB4MDBmMjZmNGUsIDB4M2VlMDA2ZmUsIDB4ZjdmNjIxZDcsIDB4ODkzMmYyZTgsCisJMHgzM2JmOTllNSwgMHhmY2Y4OWNiNiwgMHg2NWIzOTA5YywgMHg2NTA3OTcxYSwgMHhjYzliZjZjZiwgMHg4YzhmOTgzYywKKwkweGYxYWFmY2E4LCAweDI4YTgwMDFhLCAweDRmM2I1MTI3LCAweDJlMDA3YTQ2LCAweDUwY2JkMGIwLCAweGVkYjc3ZjBiLAorCTB4MTU1ZTY5OTMsIDB4YTNjNjEzMjgsIDB4MjM1YmM5YzgsIDB4MWM4OTljYTEsIDB4NjhkZDdjMTgsIDB4N2VmZjg3OWMsCisJMHgyOWFlZjkwOSwgMHhiNmY1ZjY5OSwgMHg4ZjdkZTlhYSwgMHgzYzlmODgyYSwgMHhjZDU0NGY0YSwgMHg1NTU4ZjRhNiwKKwkweDU1YTNkMjgwLCAweDVmYmU5NDQ1LCAweDZiNjk0OTU1LCAweDBmNGE1MmQ1LCAweGZkMjg4NTU3LCAweDRhNmFkNTUzLAorCTB4YTFhYWFiZGYsIDB4NWFhYTlkZjQsIDB4MTU1MGZmNGEsIDB4Y2FiZGI0YTYsIDB4MGZjMWE5NGYsIDB4NDkzN2YyNWQsCisJMHhhZWMyYWJlOCwgMHhmMjg3OWQ4MCwgMHg1NjVhYzU2NywgMHhlMjE2ZGQ0MCwgMHhmMjFhNWY3MywgMHg2N2Q3NTlmOSwKKwkweDNmMWY1MDIzLCAweGExOWQ4ZWZiLCAweGJjMWJkZmJlLCAweDc3YWRlOWEyLCAweDVmNDlmYTNjLCAweGZlMDMwODI5LAorCTB4M2I5NjdiMzMsIDB4OWM5ZTM4ZTMsIDB4ODE5ZDM2MzYsIDB4Zjg2N2JhM2MsIDB4NDZkYmJlMTMsIDB4OTI0MTVlNTEsCisJMHgzN2M5MGQ4MSwgMHhkZmEzMWRjYiwgMHg3NWYwOGM2MSwgMHg3ZjMxM2MzZSwgMHgwMTZiOThlNywgMHhmZDFlYzcxZiwKKwkweDdiZjYzNjZiLCAweDcxN2ZlYzRlLCAweDg3ZGE2NDA3LCAweDBmOTM2NDU5LCAweDFiODI2NWYxLCAweDNiOWQ2YmVkLAorCTB4MGYzZmJjODQsIDB4ODJlYTNlZmMsIDB4MDY2MGNiNWYsIDB4Mjc0OTA0ZTksIDB4NjhkYjNiZmEsIDB4YjFjMjBhNjcsCisJMHhjNDBjM2UzOSwgMHhkYzFlY2VjZiwgMHg1YzdlNDFlNCwgMHg4ZmQzNjY5YywgMHg5MTgzODBjNiwgMHhlYmE0Mzc5NiwKKwkweGQzZmVmMzJlLCAweGFkOWZjZDY0LCAweDkwMzdhNjkxLCAweDVjMjZmNjNjLCAweDRhZTkxYTNmLCAweDQzMGU4ZmQ3LAorCTB4NmE1MWE3ZmMsIDB4NGQzOGIzZjQsIDB4YmYwMjhmZDMsIDB4MzQzMmRhOWUsIDB4NjFkZmVmODEsIDB4MjdkNjBmYmUsCisJMHg1ZDgyYmQxMiwgMHhkNWZmZjU0OCwgMHgxZmFkZTlmMywgMHgzNThjM2U2MywgMHgyODFjMGZiMiwgMHhlODZjYTAwZiwKKwkweDFlOWRlZGY5LCAweGQxM2U1Nzc4LCAweGNkNWYxMGYyLCAweDJmYTg2N2VhLCAweDVmZmZjMWM0LCAweDE1N2VjMTBlLAorCTB4MDZmZDFiY2EsIDB4ZmQ5MGU0MWIsIDB4ZGViZGY4ZGIsIDB4ZjNiNDFlMzIsIDB4YjYzNzM2MWEsIDB4MTU2ZTlkZWIsCisJMHgyYmEwY2M3NiwgMHgxYTFhNTc5MCwgMHgzYTI3NjRjYiwgMHg5MmJlZWI3NSwgMHg5YjA3Yzk2OCwgMHg3ZDk2ZTlmYSwKKwkweGZjMDFmZjA2LCAweDQxNTI4MjBmLCAweDU0MTMyOWJhLCAweDU2YjhhMWQ0LCAweDIzYmYzMDRiLCAweDJmMDEzZjI4LAorCTB4MmJkNzg5NDEsIDB4MDE2YWI0NzcsIDB4MGI2MzkxMmYsIDB4ZTViNzE5ZWEsIDB4YmRlNzc0MTgsIDB4ZWYyMDhmZjEsCisJMHg2NTQ2ZmU0ZiwgMHhkZmY5NjJmNywgMHhhZTUwNTY2MCwgMHhmNzIwYzUxYSwgMHgyZjlmOTA2YywgMHg5NjM1Yjc3MiwKKwkweDc3Yjk0MGNlLCAweGY5ZjdjNmQyLCAweDgzY2YyYzA1LCAweGFiMTE0ZjQ2LCAweGU3M2Q0NmM5LCAweDhlOWI2NjIzLAorCTB4ZmIxMWZmZjQsIDB4NjRkMzI3OWQsIDB4MWE2Y2Y4NmYsIDB4NmFmZTczYWQsIDB4ZmEwYjNlZWIsIDB4NTg1ZjI1OTksCisJMHhiMDE3Y2Q2YiwgMHhkZTkwNTM2YiwgMHgyY2E5ZDYwYiwgMHg1YTVmMjEyYywgMHg5ZDM2YmRjYiwgMHg5NTY0MmRmYSwKKwkweDQxZGVjOGFiLCAweGJkYzYwNTdiLCAweDAwY2E2NzRkLCAweDczZjk1Zjk4LCAweDQzZTc2NThmLCAweGFlMzYzYmZlLAorCTB4N2JmNjFiYTcsIDB4ZmYzZTFmNzEsIDB4ZTZiMGE0OTIsIDB4MWEwZmYyODcsIDB4MTk3MDdmMzMsIDB4NTVlMWY2YzMsCisJMHg2ZTQyYTcyOCwgMHg3YWNjZGJlNiwgMHhjZWViZWZlMiwgMHhjNmJlN2EzZiwgMHg4ZmMzZDI3ZSwgMHg2ZjIxZTYyMCwKKwkweDE4ZTFmYzkxLCAweDliMzRkYTc2LCAweDEwYWRmNDI0LCAweGJhZTAzN2E1LCAweGJlNmI3YTRkLCAweDJmOTE4MzgwLAorCTB4MTlkZmNhOGYsIDB4ZTlhN2ZmOTUsIDB4ZTg1OTg5MmQsIDB4YzgxNDg4ZWQsIDB4ZmE3MzI1YjcsIDB4NTI0MTdkNDIsCisJMHgzN2MwYjUzYSwgMHg0N2FkM2ZlOSwgMHhkMmZmZTVmZiwgMHhmZjQyMDdmZSwgMHhlZmZlOTZkOSwgMHgzZmY2OTdmYywKKwkweDU3ZmNjN2FjLCAweGZjYmZlYWM2LCAweDQzM2I2ZGI5LCAweDllNGE2ZjIwLCAweDYwYzNjODc5LCAweGQ0YTkzYTFmLAorCTB4ZWYwMGY4YTQsIDB4N2E1NzliNjUsIDB4Mjg0ZTBlOTAsIDB4ZjNkMjBmMjEsIDB4M2QzY2IwYzksIDB4NDZlYzNkMTYsCisJMHhhMjNmMjA3YSwgMHg1ZGExMjVkZiwgMHhmZTg0ZmY4NSwgMHhkZjc1M2Q0ZiwgMHgzZTY3ZGM0YywgMHg2NGVhYWNkYiwKKwkweDQ3YjE2ZDJmLCAweDE1YWZjMGVjLCAweGQ4MzNjNThkLCAweGUxMWZjYTE4LCAweGM4Y2ZiYmY5LCAweGQyYjI2Zjk4LAorCTB4MGY5M2M5NjcsIDB4MGRmZmEwYTUsIDB4MTNkODQ1MjgsIDB4MmE5N2QyMTEsIDB4YzVjYzNlZWEsIDB4M2FjODI4N2QsCisJMHhkYmEyY2Y4OSwgMHhmYWU3ZjhlMSwgMHhkN2NjN2M5MCwgMHhjMzk2N2ExMiwgMHgwZmNmNDkzYywgMHgxYjA0YjgwYSwKKwkweGEzMjMzYmVmLCAweDcyYjU5M2VmLCAweGZkNTQ2ODNmLCAweGQ0ZmZhMTIyLCAweGM3NDlkY2RiLCAweGRmNjI3NGMwLAorCTB4Nzk0MWRmNjEsIDB4ODU4M2MwNjksIDB4YmQ1M2ZlYjksIDB4NDczMWUxZjUsIDB4NzU2ZDNlNjAsIDB4MjY0OGYxYmYsCisJMHg3NjdjMTkzOCwgMHgyZmZlNjFiNiwgMHgyZWY2Zjc5ZSwgMHg5ZDg1ZGI4ZiwgMHg0YzJlZGRkNywgMHg0MjRkYmNlZCwKKwkweDY5ZTY2YjZmLCAweGEwZjExYTk5LCAweDQxYjY1YzVlLCAweDczZTA4NWY1LCAweDRmNGRiNmQ5LCAweGVhNzY4YTNjLAorCTB4NzBkZjc2YmIsIDB4ZGI3NGJmZTgsIDB4MDA5ODdmNGIsIDB4NmFlZGQyZjksIDB4MGNiZTBjZDIsIDB4OGRkMjk0OTcsCisJMHhiZmZjMjA5NywgMHgxZTM3NmM3NCwgMHg5MmY1N2U0YSwgMHhiZmNkMWRlNiwgMHgzNzRmYjhmZiwgMHhlZmI3NGEzZSwKKwkweDllZThkOGQzLCAweGIwZDI5OGYwLCAweGM1NzU2YjRmLCAweDkxYzM0YmMwLCAweGFhYWZkNDVjLCAweGExYWU3ZWI3LAorCTB4YWY3Mjc5M2QsIDB4NjNkMzUyYzQsIDB4NGJjMzczYzAsIDB4OWMyMDI3YTQsIDB4NGYwMjhmMDgsIDB4YWE4Yjc4NWQsCisJMHhhMGJjMDQxZiwgMHgxNGYwMzczYywgMHg5MDgwZmU1ZCwgMHg3NzlmZDgzZiwgMHhkM2YzZDExNCwgMHhmOTVmYTNjZiwKKwkweGQ3MGZiYjNkLCAweGVkZjRmNDVmLCAweDcxYzc1YzFlLCAweGY1ZDM5MmE1LCAweGZjNTMyYjYzLCAweDFhOTE2ZTMwLAorCTB4ZTUyOWQxNGEsIDB4ZmYxZThiZGYsIDB4ZTE1YmQxMjEsIDB4ZTE0YzNmMWIsIDB4OWZiZmEwZjYsIDB4NTBhNmY2OGQsCisJMHhjMmRmNWMzZiwgMHhmYWQwMzdmNSwgMHhlODgwNTgwYSwgMHgzOTMxZThhZSwgMHhhN2U5MGMyZiwgMHgzZGJlOWIwYSwKKwkweGM4NjQ1ZjA2LCAweDZmOGUyZjljLCAweGQ2MGI4NTA0LCAweDEyZWQxYzc3LCAweDRlZmViM2Y0LCAweDdmMjY2ZjBlLAorCTB4ZmM4NjIyYzgsIDB4M2ZjMzQzZmYsIDB4ZmU1MzE2Y2UsIDB4OTNjNzA3NTMsIDB4YmUwOWI2NDMsIDB4NGNjZjZkMDIsCisJMHhiNzc3NzVhZiwgMHgwZDRlN2UyMCwgMHgxZmEyYTdmMiwgMHg5MDk0YzgyZCwgMHgyNWY0ODc4MCwgMHgzMWJmMmJmNCwKKwkweDg3ZTM5NTJkLCAweGQxNmM5NTc5LCAweDI5ODBmNDBlLCAweGI3ZWIxZGY4LCAweDE4ZTc3ZWE4LCAweDY1ZjYzYjRiLAorCTB4NGJmOGY3N2EsIDB4ZWYzMGY4YzQsIDB4OGZiZmRjMzgsIDB4ODZhMmIwYTcsIDB4NTViYmViMTgsIDB4ZjYxZWY4MzYsCisJMHg5OTdkMTM3MSwgMHg3YmYzOWJmOCwgMHhiZjljM2RkZCwgMHhjZjBmN2UwZCwgMHg5ZmU1OGU5YSwgMHgwN2Y5YzliYywKKwkweDA4ZmVlMWRiLCAweDUyYTQ4YWYzLCAweDI1ZWJiZWY5LCAweDE2NzYwNzkyLCAweDc1ZDdjNTg5LCAweDZiNmJlMGFhLAorCTB4MzAyNzQxYjksIDB4MzA0YTQ1NmYsIDB4ZGZmNjBiZDEsIDB4ZmU0ZmUwODcsIDB4ZDA3NTgyYjMsIDB4ODMyZjI0Y2UsCisJMHg2N2E3OWUzOCwgMHgxNmRmMDY3ZiwgMHgyNTFmZmUwYSwgMHhhZDlmZjk1YiwgMHhiYmRmN2NlNywgMHg3ZGEyMTU3ZSwKKwkweDNmMGQ0Y2FlLCAweDJiZjIyOGYxLCAweDhiYzg2N2YwLCAweGUxZTZhYWZjLCAweDFmZDc0ZmJhLCAweGMwNGRjM2Y4LAorCTB4MGMxYmE3YTcsIDB4Y2ZjYWI1M2UsIDB4N2EyZDNlNjgsIDB4ZjQ4NGIzNzYsIDB4YTdhN2NkMTksIDB4ODkxYjQwOGIsCisJMHgzZGYwYTdjNSwgMHhiNTE2OWYyNiwgMHg5Zjk1M2ZmZSwgMHg4ZmFlZmMwNiwgMHgwZjIxOWY4MiwgMHhiNDYzODM3YiwKKwkweGYzNjMzYzNjLCAweGU1YTMzYzEyLCAweGM5YmRmYzIxLCAweDlmZDI3YmIyLCAweGJkMDY3NzQxLCAweGZjYjJmYzk1LAorCTB4MTgxN2YyMjIsIDB4NWRkMDY5NzQsIDB4NzQxYTVkMTcsIDB4NjJmZmMzZDcsIDB4Zjk3NDVmODEsIDB4YTAwNWE0NjAsCisJMHgyYTVkYmM5MywgMHhjZDY1NTVkOSwgMHhkYTBjM2NmYywgMHg4YjIwM2NiZCwgMHg2ZGE3ZTRlMCwgMHgzY2JjZDU4YywKKwkweDBmOWNjOTIwLCAweGEyMWJlNTQ3LCAweGYyYTNmYmVhLCAweDAzZjU1MTc5LCAweDRiNGFmOTUxLCAweDAzYTZiMmZkLAorCTB4NDdmYzIzMWEsIDB4NGJlY2Y1MmMsIDB4YzQxZjY1MWYsIDB4ZmQ4Yzg3YjAsIDB4NDY3OGQ4MjYsIDB4MGM1ZDIxMGIsCisJMHhkZTUwZDRlYywgMHgwNTQxY2JhOSwgMHgxZWUwZmY0NSwgMHgwZWM1ZWM5OSwgMHgxODJhZjE4MCwgMHgzZDNlYTNhNywKKwkweGIxYjkwMjFjLCAweGYwZWRjOWQyLCAweGQzZDNiZDBlLCAweDg5OTVkMjA3LCAweGFjOTlkZjNjLCAweDY3Yjk0MmFkLAorCTB4NzI3NGVmN2MsIDB4NWU0NzQ3M2YsIDB4ZTRkMTI3YTcsIDB4MmNkMjM4YTcsIDB4MGQ2ZWRjOTMsIDB4ZmNiMWU5YjMsCisJMHgxMGEzYjAyMCwgMHg2ZjU5NWJkZSwgMHgzOWZmZGNlNSwgMHg1ZTBkNzY0ZCwgMHg4ZDY4ZjY4YSwgMHg3NzEzNDNlYywKKwkweDNkMWJiMmMxLCAweDY4ZTkyYWU4LCAweDZjY2Q3YTFlLCAweDU1ZjBiZWY4LCAweDNhNTU4ZTk5LCAweDcwNjMzY2UyLAorCTB4NTdlNDJjNWUsIDB4ODllYzk5ZmEsIDB4YjNmNDJjMTMsIDB4NmNjZmU4ODksIDB4ODJjNTc2ZTYsIDB4MDhmYTUxMzUsCisJMHg1NGY0NDM1YiwgMHhhMWEyNWFlMCwgMHhlMDNiMDUzYywgMHg5NzNmYWI3ZCwgMHhlODg5NDVmMywgMHhiNWJkNjhhZiwKKwkweDI3OGY2OGRjLCAweDk1ZGY2ODVhLCAweDAzY2I1OWQ0LCAweDY1ZGEzZWMyLCAweGNiMDY0OWYwLCAweDg2ODMzOTIwLAorCTB4NDJlN2RhMGYsIDB4NDc5MzRmMmUsIDB4ZjAxYjMzNWQsIDB4NjY1MDcxZDEsIDB4YjY3OTllNzgsIDB4OWM3YzI2NTksCisJMHg5N2U3ZTdhZCwgMHhmYzRjOTQyYywgMHg0OTNhYzE1NiwgMHg2YTcwMWExZSwgMHg3YWQyN2U0MywgMHgzYjZkNTc5NywKKwkweDE3N2Q5Y2ZlLCAweDNmY2VjZGQyLCAweGE0MzlmOThlLCAweDFkZGYzYjZkLCAweGNmZjMxYmIxLCAweDhmZjgzZGJkLAorCTB4MjlmZDY3YWMsIDB4MzdlNDlkN2IsIDB4MjZlYmQ4ZWUsIDB4ZjNkOGVmN2EsIDB4NjE3N2MxZGIsIDB4ZmM5ZDk3N2UsCisJMHgzZjdiMWQ3NSwgMHhkN2Y0ODMxZiwgMHg4NDVlZGNiMSwgMHgxMDYzYWVmMiwgMHhmN2FhODdiNywgMHg5NWE2M2U3YywKKwkweDg0MTVkN2Y2LCAweGM2YjJhM2I3LCAweGJmZTZhM2Y1LCAweDMwOTI5NjFlLCAweGRlYTE1NTg1LCAweGY4OWUzN2IwLAorCTB4OTNiY2Y4MjksIDB4N2IxZDBiZmMsIDB4YjgwZWNmM2UsIDB4YTllYjc1ZmUsIDB4MWQzOWU3MTAsIDB4NTlmYjM2NmUsCisJMHhmNzIyNWY5YywgMHg4Zjc3MDc4MywgMHhjZjBjYjRkZiwgMHg2OWY3MWJhMywgMHhjYTdjYTFmMywgMHg4MzFmN2YwYiwKKwkweDU5ZTNiNDcyLCAweGFiYjUwZmFlLCAweDc5ZTM4ZmFkLCAweGUxZmM4NzQ1LCAweGRjZTAxNTMyLCAweDlmZDU0YzhlLAorCTB4MTE5NGZiYjEsIDB4NjJhMzQzOTMsIDB4ZTRlZmU1YzEsIDB4Nzg1MGI5MzcsIDB4NGZiNzBhNjgsIDB4MjFlMWZkZmYsCisJMHg3M2JjYjlmOSwgMHhhZTEyMWQ4NywgMHg3ZmMzOGJmYiwgMHhkN2IwYjk0NCwgMHhhYzY5NzQ0ZSwgMHgzMmMzNzRmNywKKwkweGI3Y2U1N2QyLCAweDdmY2FlMWVlLCAweGQwYjgzYTE3LCAweDBiOTE0Yjc1LCAweDdmZDRmNzU5LCAweDVhZmY3YzczLAorCTB4YTJmY2QyZjYsIDB4OWQyN2EwZjksIDB4ZjI4M2I5ZWYsIDB4OWEzZWRjZGIsIDB4ZmJkMjA1ZWYsIDB4Nzg2OWZmODIsCisJMHhlZWYwMTY3ZiwgMHhhYmJhZmYzOSwgMHhkZGQ3Y2RmZiwgMHg5ZDVmZGUzYiwgMHhlM2FlZjAyYiwgMHg4NWYwN2Y3OSwKKwkweGJlZmNkM2JmLCAweGY0ZGI5Y2FlLCAweDBkZWU5NGRmLCAweDliMTVmZWJkLCAweGE4MGNjZGY3LCAweGI4ZDU5ZDNmLAorCTB4YjJiOGIxNTAsIDB4MTlhYmZmN2MsIDB4YzBjYWZhNTAsIDB4ZGYzODg5MDMsIDB4MzdlNzUxYzksIDB4YzJhNmZhNDYsCisJMHg5MmM5YTZlZCwgMHg5NjQxZWM4ZCwgMHg5MDdiMDkyOCwgMHg4NDAzNTFkYiwgMHg0OTYwMzBmZSwgMHgwMzIxZTkwMSwKKwkweGY1Y2ZkZTA2LCAweDBlYmJjNTA2LCAweDE5NWYxZmNmLCAweGIxNDdkZjNjLCAweDNiZWM2YzE0LCAweDk3ZWJjYzAxLAorCTB4OWVkNWJjOGIsIDB4ZmNjNGI5ZmMsIDB4NjAzYTM0NzgsIDB4YTIwZmY3ZjAsIDB4YTA3MDNiNWUsIDB4YTQyZjdhNGMsCisJMHhlOGJlZWZhNCwgMHg5N2JmY2U5OSwgMHhlN2JiMTY2OSwgMHgwZWQ1YWY0YSwgMHhkYWIyNGRjYSwgMHg3ZjQ1NTM0YiwKKwkweGZmOWYxOGQzLCAweDBlMTQ5NzM0LCAweDBmMjYxYzAzLCAweGZhMTI2OWZhLCAweDU3MGYyNzQ3LCAweDVjZjkwNDk5LAorCTB4ZjY4MTU4MTYsIDB4YjU5NzU0YzUsIDB4YzMzYzA2YmYsIDB4ZTFjZGY3MTksIDB4MzgwZDU3NjgsIDB4ODc5NzU5MGUsCisJMHg5MzI0MWM3MCwgMHg3MGJjZjQ5ZiwgMHhkYzEzNzljNCwgMHgyZjE4YzIzMiwgMHg4NzFmMTRjMywgMHgxZjcyOWY2MywKKwkweGJkODU5ZGY5LCAweDkwNGQ0NzRkLCAweDVhYWI1YzU3LCAweGI0MTU5ZjkwLCAweGM4MWMzOTk3LCAweGU1ZWMzNmNlLAorCTB4ODRjZGUwZGUsIDB4MjE4OGFkZmQsIDB4MDMyYmY4MGQsIDB4ZGFkM2JmNjUsIDB4MDZkZmQ5MWYsIDB4M2UyZWJlNWUsCisJMHg1MzdlM2MwYywgMHg4NTFiYmNiYywgMHg0NWFlODE5NywgMHg3NGViZjIwYSwgMHg2MmZhMTdiNCwgMHgxZjllMGNmZCwKKwkweGRjZTg1MjE4LCAweDU3MGJkODRkLCAweGE0MjkxNzc4LCAweDUwY2MwY2Y3LCAweDhlODU1ZjEwLCAweDFjZjBhYmE2LAorCTB4Njg5M2UxYzQsIDB4ZDliNzE3MWUsIDB4NjQ3MDdmNjgsIDB4OTFmNzA0NDksIDB4ZGZlNTBhYjUsIDB4MTBlM2U5YjAsCisJMHg3YjJmMzNkZiwgMHgwYzlkZjRlZSwgMHg4ZDdlZTZmZCwgMHhmMWU1M2RjNywgMHg3ZGJmOGZmMywgMHg4YzQ0ZTVmOSwKKwkweDJjNzgxNDE3LCAweDQ2YWZmZjg0LCAweDE2N2FmZjNmLCAweDJkMzgwMzg5LCAweGExMjg1ODU0LCAweDI1YmRmYTBmLAorCTB4ZWZjNWJlZjYsIDB4ZGZlM2NkNmQsIDB4ZmJiYTUzNzcsIDB4ZGVmZDVmMzksIDB4M2FiZmNhZTQsIDB4ZDhlNDBlN2QsCisJMHg1ZGYzMDBmYiwgMHhlMWEzMGU5OCwgMHhmZDVkYjMxNSwgMHhhZjBlNjY5ZCwgMHgxZTE2MjFlMCwgMHhlNDJhZTNjMiwKKwkweGUxMzlkMzNjLCAweDlmZmU4MjFkLCAweDk5YjNkM2ZiLCAweGVhNGVkNzY4LCAweGU1YzA5NTE4LCAweDE3YjIzMGViLAorCTB4Mzg1ZWMyODIsIDB4M2UwOWJjY2IsIDB4YTFkN2NhMTcsIDB4NzlmZTc0MDksIDB4OGFjNzc2NTAsIDB4ZWMyYWRjMmIsCisJMHg3YzYyNWZlZCwgMHg3NTFkYTQwOSwgMHhmYjQ2NDZhYywgMHgxZjkyNzU4ZCwgMHg2MGU3NTQzNywgMHhiN2M0NjM5YiwKKwkweDlmODZhYmU0LCAweGZlMGRlMDRhLCAweDhmM2M2Y2U0LCAweDg0MmZlM2UxLCAweGJjNjYwOWE2LCAweGE5MzhjZGI1LAorCTB4MDc4OWU5OGMsIDB4NzRkZjdiZmMsIDB4ZTE0ZGY1MWUsIDB4YzIzZGY2OGIsIDB4MzViM2FiNzcsIDB4ZmM4NjJmMzcsCisJMHg2ZmMwNWRiOCwgMHhjODJmZmVlNiwgMHhmMzY5NzlmZiwgMHhlZmQyMWIwNiwgMHhjYjM2NzVhNSwgMHgyYWE5NmFmOSwKKwkweDZjYjFiMWVjLCAweGU2NmJjZTJjLCAweDBiM2JhNzdlLCAweGY2NTA3MmYxLCAweGIwNjczYzYxLCAweDg4MTY4Y2Y5LAorCTB4MGQxODJlNzEsIDB4ZmQxZmVjNGYsIDB4OWQ1NTViZTksIDB4ZGFiNzZiZjgsIDB4YmFlMTFmMzAsIDB4NDMwNzIzZmIsCisJMHg1Njk3N2EzYiwgMHg5ZTZiMWE1MywgMHg5ZTdjZWMwMywgMHhlZGMzNTkwYiwgMHhmZGZmZDI2MywgMHhjM2E5M2JlMCwKKwkweGY2OGM5OTE1LCAweDdlMTMxZDY3LCAweDYzZmE2ODhmLCAweGI3NjdjNzQ0LCAweGFmZWUzMGIwLCAweDVjYTJhZjY4LAorCTB4NjhjZjViMzgsIDB4ZGM5MDA3N2YsIDB4ZjAzNzc2OGYsIDB4N2VjY2Y3ZmIsIDB4YjY5YjhiOWMsIDB4ODJmNTEyZmYsCisJMHhjNzQ5NjY4YSwgMHhhNTBhODYyMywgMHg2ZDNmNDM1NSwgMHhjNjUxMjliMCwgMHg2YmMzMzg3ZCwgMHhhM2VhYmJjNCwKKwkweGM1ZjEzN2FmLCAweGY4MjE1NTU2LCAweGZiYjA5ODFlLCAweGUzZjcxYzY2LCAweDllYTE4ZDM2LCAweGQzYjE3ZmUyLAorCTB4YzdmOGZiODMsIDB4MDdjNDk5Y2QsIDB4NTdlYmFkYmQsIDB4YTlhYWVjNTUsIDB4OTcyYTM3NDgsIDB4MzBmNGQxODcsCisJMHg5MmNlM2VhYSwgMHhmNDBlNGNiZiwgMHg2OTlhZmU0NywgMHg4YmUyNWQ2ZiwgMHg2YmVmYmY4MSwgMHhiYzE3Mzg5MiwKKwkweGZlMTZmOTQwLCAweGJkYmU0Y2ZmLCAweDgwYjdjODY5LCAweGEzZTI2NzljLCAweGY5MGY1YWJlLCAweGJlNGIxYTk2LAorCTB4YTliYzk2MmQsIDB4N2JjNWY3MDgsIDB4NWUyMmE2ODYsIDB4MjZhYWJmMTcsIDB4ZGI2ZjkyYzcsIDB4ZTczOWY4YWEsCisJMHhiOTRlMjIzMywgMHhkYmU0MTFhMywgMHhhZGYyNGRiNywgMHg4YzViZTQxMSwgMHg1ZmJmOTA3OCwgMHhmZjBiN2NhOCwKKwkweDM2ZGZmMGQ3LCAweGQ2MzE2Zjk0LCAweGY5NTY2YmFiLCAweDA4ZjlhNjM2LCAweDhkMzFiN2M5LCAweGFmM2M0YjM2LAorCTB4N2M5ZjNiNWQsIDB4NDdhZjkyOTMsIDB4ZWFhMGY4ZmQsIDB4M2Y0MThmOGIsIDB4ZmUzZTg0ZGIsIDB4YzQ0Yjg4OGMsCisJMHhlNWNlNTA3MSwgMHg3ZjhkM2E2YSwgMHhlMmVlNzJhMSwgMHhmZjczOTUwYiwgMHhlNDM2NzA0NSwgMHg4YzFkZTJkYywKKwkweGQyN2I5Y2UyLCAweDhiNzM5NzIxLCAweDkzOWM4MTc3LCAweDljYjkxZTkwLCAweDcxODdiYzViLCAweDdjOTQ1Y2JmLAorCTB4YmU0M2Q5MWIsIDB4MTE1ZmFhMzEsIDB4NGQ4M2VkZTEsIDB4MDJkZjBmZTksIDB4YWJmNThkZmQsIDB4MWZkNDA3M2UsCisJMHhjNmVmMmRkYiwgMHhhZTVkZTU5OSwgMHg3YWRjMTBhNiwgMHgxNzgzYmJjOCwgMHgwODc2ZWYyNiwgMHg2YzcyMDc3OSwKKwkweDY4ZDdjYTA4LCAweDViMzVmMGZhLCAweDhmNzdjMWUzLCAweDJiZmY1ZTNmLCAweGNhZGY5N2U0LCAweDg2ZjhkZTc0LAorCTB4YmQwZjlmOGQsIDB4MTY3OGZlMzYsIDB4NjI2M2Q3ZDIsIDB4ZGM4NDhiM2UsIDB4NTEwYWFmNmIsIDB4ZTQ1ZTUzZmYsCisJMHhmMTc3MmJlYiwgMHg0NjhhZjEzOCwgMHhkNDU2MWZhZSwgMHhmYzJmNjE0YiwgMHgxN2MyNzczMywgMHg3OGJmY2UxYSwKKwkweDIxNTJjNDhmLCAweGViY2VjYjNmLCAweGYzOGQyN2IzLCAweGMzMjMzNjMyLCAweDcyMGIwZjQ0LCAweGJmY2ZjOTRhLAorCTB4ZjQwZTYxNDAsIDB4NzJiYTk3ZTMsIDB4NWJmZWEyNGYsIDB4ZmVmZGMzOWEsIDB4ZjE3YmUyYTUsIDB4ZDBhYmFkYWIsCisJMHg4OGZjNWRmZiwgMHg0NmE1ZTc0NCwgMHhlNzExYWI3YywgMHhhMjZlMjNkYiwgMHg3N2Y5MTk3OSwgMHg2NjI3ZTNhMywKKwkweDk5YTliODhhLCAweDFiYzI5NGJmLCAweDk0N2ZjNDYyLCAweDdmZTZiMTZlLCAweDk2NmZmODIyLCAweDYyZjA0YWRjLAorCTB4ZTMzMWNiYWYsIDB4NWQ3YThjMzgsIDB4ZTAyODNhNzAsIDB4N2VkMzI3NTQsIDB4ODAyNzA1ZGEsIDB4MjdiZDM3OWIsCisJMHgzM2QzMDA5YywgMHhlMWJhNTIzMiwgMHg1ODViZmM1MiwgMHhlYmVmNTY2ZiwgMHhiZDE2ZTAzNSwgMHg1ZDdmYzM2ZSwKKwkweDBkZTlmYTJhLCAweDdiOWMwNjBlLCAweDFkYzA1ZmFjLCAweDkzOTIwMmVjLCAweGE3NThmMGQxLCAweDMzYjVmOTc1LAorCTB4ZTgwOTRlMzEsIDB4ZTg0Y2U0ODYsIDB4MTgxNzAwZDcsIDB4NzBkMjZmMmYsIDB4NDc5NzdkY2IsIDB4ZDY2NGZkMDUsCisJMHhlMTgyOWE0YywgMHhhZTMwYjMwYywgMHg2YTBiY2ExYywgMHgwZmRjYmQxNywgMHgxZGVlMzFlMCwgMHg0ZWRjNThlZiwKKwkweDBmNjA5YjJmLCAweDU2ZWMzOWUwLCAweDQxYzkyNzY3LCAweDM1ZGIwZTgzLCAweDE0MWMwN2FlLCAweGJmZGRkZGYwLAorCTB4ZjlkOTMyNzIsIDB4N2E4ZTkyNGQsIDB4MjRlMjMwNDgsIDB4YWUwMTA2YjgsIDB4YTgyOGZmNzgsIDB4ODEwNmZjNzAsCisJMHgwZWZmOTExZSwgMHg4NzE5ZjIzYywgMHg4YmM5MWVlMywgMHg2MzVjOWRmZSwgMHg0MGJjNDJiZiwgMHg4ZTY2Y2NmZCwKKwkweDIyNTg2MDk3LCAweDRlYjE2NGJjLCAweGE4YTk3ZjNhLCAweDg0MTE3Yzk1LCAweDgyMDZkMzVmLCAweGUxOWYyMTlmLAorCTB4OTNjNjY1Y2YsIDB4NTg5NTdlODksIDB4NGM5NTRiZjQsIDB4YThhOTY1ZmIsIDB4ZjM1ZWQzMzcsIDB4OTllN2E0MDcsCisJMHgwMzZjYWE0ZiwgMHhmYmZlMWI4MSwgMHg0ZjNlN2EyYSwgMHg5ZTM0NTAxYywgMHhiNmJjMDRkYSwgMHgwODVkM2MyMSwKKwkweDc3YWU0ZWI3LCAweGZiYTBiZTQ1LCAweDUwNzk0NjUwLCAweDM5ZTA1OTA5LCAweDVmNzNkMWU1LCAweDA2NzFhZjA5LAorCTB4NTE4ZTkwYmMsIDB4Y2JlNzM1YmUsIDB4OTI2ODJmOTgsIDB4OWVmNGRmNTgsIDB4NTBmM2M1ZWIsIDB4ZWYxN2JmMzMsCisJMHg3ZmZiYzIzOSwgMHgxOGIxZjI0YywgMHhiYTYwYmVlYiwgMHg4YjllODVlZSwgMHhiY2YxNmU4MCwgMHg4ZWJhMzdhNCwKKwkweGQyM2I1Mzg2LCAweGU5YmFiN2YzLCAweGU3NjczNWY5LCAweGU3YTQ0Y2ExLCAweDQzZjcxMjNkLCAweGNlNWEyNzM0LAorCTB4MWU3NjNkMzUsIDB4MDlkNWI1ZjcsIDB4ZWVlYjBmNzQsIDB4NmRmNTU1N2MsIDB4Y2I5MGM2ZjQsIDB4N2VkMWVlODIsCisJMHhiYjM3ZGYzMCwgMHhmMTgyMTcwNCwgMHgxNDFjNWJhMiwgMHgxOGYzNDdlZiwgMHhiMzUzZjVjMiwgMHg2NGU2ZGU3YywKKwkweGY1NjdkN2M5LCAweDJlZGJiZmRlLCAweDM3Mjc4Y2M1LCAweDNmMjMyM2Y0LCAweGY4YzNjNzFhLCAweDZmMTgyNmY5LAorCTB4ZDE3OGY3NjQsIDB4MmZlMTgzZmIsIDB4ZmFiYWRmMzgsIDB4YmFkOWJmZGIsIDB4NmViZTcxOGMsIDB4YjU5MDU0M2MsCisJMHhiODhkNWUxMCwgMHhlMDUyMjNhOCwgMHg3M2VhMmE0NywgMHhmYzRiMjVkMywgMHhjODVjY2MxNSwgMHg3ZmRjNmZhZCwKKwkweDdiZGM5NmFhLCAweGE3NGQyY2ZmLCAweGViYjc3NGZiLCAweGU4OWQ3N2M2LCAweGUyNjc0ZjMzLCAweGRiZTI2ZjdjLAorCTB4ZWM3ZmVmYjgsIDB4NTk5OGU3ZTcsIDB4NDRkNmY2MzYsIDB4YWIyNjNmZGMsIDB4ZTNlYWU5MGMsIDB4YTFmOTJhNDMsCisJMHhlM2NhOWUzZiwgMHhlZGY5YWY2ZSwgMHgzZTVkMDUwMSwgMHgzODk4ZjBkNywgMHg4OTM4Y2Q3NiwgMHhiMDM3YWNlYywKKwkweDg3YThmMWViLCAweDA0N2Y5ODNiLCAweGVmMTMyZmMxLCAweGQ1ZDQ2NWVkLCAweDVmMDJmMTRjLCAweGFlMTJkZDhmLAorCTB4YTUzN2Q0YzYsIDB4YzQzNWU5MzMsIDB4MjE5OTI0ZGIsIDB4N2RmYzVhZGUsIDB4N2YyMGI4YTcsIDB4MDMyYzg3ZmIsCisJMHgxZmEwYTA1ZCwgMHgwN2IxZmI1MCwgMHg5YmQ2MzI1OSwgMHgzMzI2NGZlMCwgMHgyN2UzN2M2NiwgMHhmMzA3NWU2ZiwKKwkweGY2NDg3ZjE4LCAweGFjZGVhMTc5LCAweDAzMTcyZTAzLCAweDdhZTQ3YTdkLCAweGUwOTgwYjFiLCAweGFiODU4MTM1LAorCTB4ZmUzNGRmZDEsIDB4OWMzYWZmYTgsIDB4M2JlODExNzcsIDB4YThhNDRmNzgsIDB4MDdiNTQzNzksIDB4NmEyNWViZjMsCisJMHg3MjA1MGMxZiwgMHg2ZDllYjAzZCwgMHhiZjcyNjdiNSwgMHhlYTAxNzI4NSwgMHhmNWMxMzc2MSwgMHg0ZWIwNWViYywKKwkweDcyODg2MWYyLCAweDhhNWFmMzQxLCAweDkzYTgyYTJmLCAweGI2ZTE0MmU4LCAweGJjMWNjNGIwLCAweGZhMDNiMGRmLAorCTB4ZGExZWI2ZGQsIDB4MDVmZWUxNjcsIDB4YmFkZmIxZWQsIDB4ODc1ZTZmMzMsIDB4NDllNjA3NzIsIDB4YjlmOWViZWQsCisJMHhmM2I0MDE3YywgMHgyZGQ0YmYyMiwgMHhkNzhhZmVhMiwgMHhiM2VmMGM0YiwgMHg3ZGYzZDUxNCwgMHhlYTkwZThhOSwKKwkweDdkYzZmMmMzLCAweDNiN2VkMDhmLCAweDk3ZWJjNjAzLCAweDY0NTBmYjhlLCAweGNhMGJkZDJhLCAweDJmYmE3NDk0LAorCTB4Zjg0YzFhMTksIDB4N2YxYzYwZWIsIDB4ZjIyMGZhNmMsIDB4YWJiYzUyMGIsIDB4OThhMGMwOTcsIDB4NjRmZTYzZTMsCisJMHhiM2YyNDIxZiwgMHhlYjRjYjdjMCwgMHg5NmJjZmQwYiwgMHgyMzZlOWM5MywgMHhlNzQzM2FiYSwgMHhkZTAxNDdlZCwKKwkweDFiZjc4MDAxLCAweDQwZTU1ZTIyLCAweGFiNWEwN2NlLCAweGMyZmM1ZjY5LCAweDliOWY5NDNlLCAweDM4YTI0ZDM0LAorCTB4OGYyYzg1OGUsIDB4OGU2NjM4ZTIsIDB4ZWJlNmZhZTcsIDB4ZThjMzNiOTcsIDB4ZWQ1ZDdiZTcsIDB4MGZkZjg4MWMsCisJMHhlZmE3NmU1YywgMHgxY2I4ZGJlZCwgMHg0YWQ0MWY2ZSwgMHhlYmUzZjZmZSwgMHg1OGY3ODY1NSwgMHgyNGNiZDdhYSwKKwkweGFiZDc4ZTJmLCAweDdlNTYzZjc0LCAweDE0MzFjNzhjLCAweGM3ZmFlMzZlLCAweGRmYmNmNTgxLCAweGUxYjdhOGUzLAorCTB4NDM5NjA3YjksIDB4MTFhYjcwYmUsIDB4YjRlNWMwZTcsIDB4ZTgxNjdmNjEsIDB4OTBjMmZlM2MsIDB4ZGQ2MmU1YmIsCisJMHg3NWExZjYzZCwgMHhkOTI0MzRjYiwgMHgyZTViNzk2OCwgMHg4YjA5NzFlNCwgMHgyZDFjYmQ5MCwgMHgxY2YxY2I3NywKKwkweDE5N2M4M2RkLCAweGVhZTYyNzFkLCAweDBlOTA2M2I2LCAweDVkMTA1ZjIyLCAweDE5NTIxYzU3LCAweDA3ZDIzMWRhLAorCTB4OTcxNGI5NmQsIDB4NzNhMjQ3YjYsIDB4OTJjZGYxOGIsIDB4OGExYWUzMWYsIDB4NDk4N2IxZGUsIDB4Y2ZlNzBlZmYsCisJMHgyZmVlMTFmYiwgMHg4NjE5ZGFlZiwgMHgzYzQzMWYyYywgMHhiMWNhOWM4MCwgMHhhN2U5ZmU3NywgMHgxYmU0ZmRmMCwKKwkweDAyMDg4YzBlLCAweGI4MjdjOWJhLCAweDU5YmU3MTFiLCAweDRmM2M3OTliLCAweDUyZWIxYmQ2LCAweDliMmYzZWYwLAorCTB4NDBlNDk3ZGEsIDB4MDJjY2FkNjEsIDB4NTI3MTM5MjYsIDB4MTM3NzVmZjIsIDB4ZDQ3NDFmZGYsIDB4NjY3YzBjNzcsCisJMHhiODA1MzU2OSwgMHhjMWNiN2ViZiwgMHg2NmVmNTVmNywgMHhkODY0NjMxNSwgMHgwNDNkODRlZiwgMHhmNTFmODFmNiwKKwkweDZiNWRlMjliLCAweDFkMTMzNDUzLCAweDliNTllZjE0LCAweDU1ZjdjMzIyLCAweDFhYTYxZTIyLCAweDU3Njg1N2Y3LAorCTB4OGE3MWYxYWMsIDB4MDZmYTRhZjcsIDB4M2Y0NjM4ZDMsIDB4MmVkYWJmNDYsIDB4MWVlODZlZGUsIDB4N2ZkNmY2OWUsCisJMHhkNjhmY2UzMSwgMHhmMjg2YTlmOSwgMHgxZTlmYmEyMiwgMHg0ZmQyZjdlMywgMHhhZGNmZWZjZSwgMHgzOTVlNjA5MywKKwkweGFjMTRjYmFmLCAweDhjYzFmMzllLCAweDFkNzNlNmExLCAweGNhZmMzNTIzLCAweDk4ZGE2ZmQ5LCAweDljYmYwNGRmLAorCTB4YmYzMWM1M2YsIDB4ZTM4ZGRmMDksIDB4N2YwMWVmODAsIDB4NjE0OTM3NTcsIDB4MjNmOTg0YTcsIDB4ZTUxNjc5NWEsCisJMHgwYWYzZTQ3NSwgMHg5OGFlN2ZlMSwgMHgxYWViY2ZjYSwgMHg4MTU4ZGUzMywgMHg0YjIzM2Y3YywgMHhhMTYwN2EyMiwKKwkweDg5MzdkNjgwLCAweGZhMmYzNWY0LCAweDc4YjMwYmZkLCAweDhmNjg0MmZiLCAweDA4ZjhkOGZjLCAweDEzOTA0ZmU3LAorCTB4MTUyMzk0NWUsIDB4NTJlNmQ3ZWIsIDB4OGJjOTNhZmQsIDB4Yzg2ZTM3ZmQsIDB4MjhhNDdkMjcsIDB4NWU1NDY2NDcsCisJMHhhM2Y0ODQ3NywgMHg0OTIzYTZhMiwgMHhiN2MwYzdjOCwgMHhhODFmNTBlYiwgMHg1MWQ3Njg5OCwgMHg2OGZjMWI4ZSwKKwkweGUyZWJmN2YwLCAweGU4NzMyYjNlLCAweGM2N2VmMWEzLCAweDhiZTY0NmZmLCAweDIxZjJkN2MxLCAweGY1ODNkNzJlLAorCTB4Mzk4MzFmOWMsIDB4ZGY1ZjVmOWMsIDB4MmYwYWUyYTYsIDB4OWY4OWJmODQsIDB4ZmNlMTZmOGYsIDB4NDM3NjNmMmEsCisJMHgyZjg3ZGUyZSwgMHhjM2VmY2NkYywgMHg0NTNmNTgxZiwgMHg3OGZhN2Q0MywgMHhhNmZkYTI1OCwgMHhiZDczN2YyNywKKwkweGFiYmY5YTM1LCAweDdkZWZiZTI1LCAweGUwZDJmZDVkLCAweGUxOGY4MzZmLCAweGFmMWM2YWVmLCAweGVmMTRmODBjLAorCTB4ZjVmMzQ2NGYsIDB4MGZlMWI1NGMsIDB4YWY3Y2MzYjcsIDB4MDNkNjFhNzksIDB4ZGRmMjlkZjMsIDB4MjZhZDNkM2IsCisJMHgxNGY5MDkzOSwgMHgzYzI4MTdjYywgMHgyYjkwY2I5ZSwgMHhmYjhmMGFlNSwgMHg4YmYzZGFmYiwgMHhiNzZjM2YxYSwKKwkweDY3N2U0N2ZhLCAweGViZjFlNDRmLCAweGZkZDEyYTc1LCAweDA3YjNmOGY5LCAweDdmMjA1ZDlmLCAweDlkNWYyODVlLAorCTB4ZjE4ZDNmOGYsIDB4N2VkNjNkZTUsIDB4MmRlODI3N2UsIDB4ODA3NmJmYmEsIDB4ZmFlMDA0NmIsIDB4OGEyNmZkNGEsCisJMHhhOWU4ZmRmMywgMHgzZjExMzMyMywgMHhjZTgxYmJhNSwgMHhkZGVhYmU5MSwgMHg0ZTcyODIyYywgMHg1NTdlZDMwOSwKKwkweDNkZDMyOGQyLCAweGIyNDRhNjAxLCAweGY5OWI3M2FmLCAweDk1NmRjNzk4LCAweDdhMjZlMzNlLCAweDFlZDY3OTJhLAorCTB4NGJlZDAxOWUsIDB4ODYzMDdlNzYsIDB4Nzc5NjY4ZTIsIDB4ZTg1YTVjNTIsIDB4ODcyZmExMjksIDB4MWYyMGM3NWEsCisJMHg3ZTNjMjg5NCwgMHgwNDJlNWEyYywgMHhkNzBmZGMxYywgMHgzNjdlMmJiNiwgMHhjMmRhNGZhZSwgMHg2OTI4OGZkZiwKKwkweDliYjU1MWI4LCAweDc0NmUyNWNlLCAweDNhM2Q0NmE4LCAweDFkMDEwZGQ3LCAweDljNWRmZGUzLCAweDAyZGRmOTlmLAorCTB4NmRhYzZlMjMsIDB4MjUxMzk3MmIsIDB4ODFkOTJhNGQsIDB4YjdiNjViMjUsIDB4Yzk3MGZjNjMsIDB4NzdmMjc2M2IsCisJMHhhMTljYjcwNSwgMHg5ZTUzMTBmYiwgMHg5NGZlNDZkOSwgMHgzOTZjOTM2MCwgMHhiNzExZWI3ZiwgMHhkODhlNDViOSwKKwkweGIxYjBlZTMxLCAweDIxMWRjZTljLCAweDBkZjI4NDdmLCAweGNmOTdlM2IxLCAweGZhNTg1ZjE3LCAweDIxOWQ5ZWNjLAorCTB4YWZlOTYxMDAsIDB4N2NhMGY0OWUsIDB4ZDliMmQ1MzksIDB4N2U4NzcwODMsIDB4YmE2ZTMyYmYsIDB4YzM2NjljNDcsCisJMHhhNzE5NWYzZCwgMHgwMWZmMGE3OSwgMHg0MzhmNzM4YywgMHg5YzQ2MzVkOCwgMHhhNGJlOTZlYiwgMHhiMmZjYzI0NywKKwkweDczOWM2MmYzLCAweGRiZTVlOTc0LCAweGVmMWM3ZDNlLCAweDdiM2RiNDExLCAweDZmOWM3MWZhLCAweDdlM2UzZmQ5LAorCTB4ZDhjMWUzMWMsIDB4NzdlZDI3NWUsIDB4YTJkZWE3YzEsIDB4ZGRhMzZjMzgsIDB4YjVkZmIxMjYsIDB4ZTI5MjdkNmYsCisJMHhiNWRmZGJkNywgMHhmNmI3YjBmYiwgMHg2MzA3YzczZCwgMHhmNmZiNjAzYywgMHg2ZmQwNTIyZiwgMHgzNGNmNjRiOSwKKwkweGQ5MmVlYmYyLCAweGM1OTUyNTMxLCAweDE0OGMyZmQ4LCAweDAxN2MzNmU5LCAweGY4ZDFmM2YxLCAweDgwNzhkMDNhLAorCTB4MDIzZWQ2ZTIsIDB4ZWJmY2EzN2MsIDB4Mjg2ZGJiOGEsIDB4NWVjYzcxZTcsIDB4MWY1YjZmMTEsIDB4OGY0MjllZmIsCisJMHhlYmM2ZGFmOCwgMHhlNTFjYjlhZSwgMHgxZmQ3MjM3ZSwgMHhmYjY3MWJjZiwgMHhkYmYxZTAyNiwgMHg3YWJmODAxNywKKwkweDFiMTAyZmMzLCAweDNmZTExZjdmLCAweGEyZmI0ZjAwLCAweGUzNjlmN2YwLCAweDhhM2M1ZmMyLCAweDdiN2Q4ZDY1LAorCTB4NWM4ZGIzOGQsIDB4N2I4Y2RjMDAsIDB4ZmMzODBmMTAsIDB4ODhjOTFjODcsIDB4NWM1MjVmZTcsIDB4ODY2ZGUyMzMsCisJMHg0ZjlmZjcxNywgMHg5MWZkZTMwNywgMHg1Y2U3NmExMywgMHhjN2I4NWZiYSwgMHg2OGJjNjNhZSwgMHg4OWI3OWVjOSwKKwkweGJjNzdkYTdmLCAweDI2Njg3ZTQxLCAweGIzYjQyM2VlLCAweDNmMWUzZmFlLCAweGQ2NzU4OTJlLCAweGFlN2M3OWI5LAorCTB4ZWZjNjNmODAsIDB4NWRmNDNkN2EsIDB4M2E3MmU5YzQsIDB4N2I3N2UyMzYsIDB4OWQ5NWRiOGIsIDB4ZWUzNmNmNWMsCisJMHhmZGQ3OTQ2NywgMHg3NmMzYzQ1MSwgMHg0MWNhNGJlMywgMHhjYWY5MWQzYywgMHgwZTAzNjg3OCwgMHhkZGMzOTBiYSwKKwkweGUzYjFlODcxLCAweDJiZWViYmEzLCAweGZlMjE3YzA4LCAweDhhZWExZjcwLCAweGMwZmM4NzMzLCAweDdhMzdlNGIxLAorCTB4MDc5MGM1OWIsIDB4ZmM3ODFiZWQsIDB4ZmIxYWJiN2EsIDB4OTcxMWIwNWUsIDB4M2U2ODhmZmUsIDB4M2M1ODVmMGQsCisJMHhmZmU2ZjlmYSwgMHg4MWQzZTE3NSwgMHg0ZjcyNGZjYSwgMHgyZGZkYjUzOCwgMHg3NzRmMWNiNiwgMHg5ZWVjZGY0YSwKKwkweDdkMTQ5OTYxLCAweDFjZWJjYTZmLCAweDQ3M2I3MTg3LCAweGJiODNiNDM0LCAweGRlYjE2Y2VjLCAweDZmNTdlMTM2LAorCTB4NzhhNjRhN2IsIDB4MDcwZDU1ZTUsIDB4Y2I0NzhlNDgsIDB4MmY3YzBhOGIsIDB4MzM3Y2M2MjUsIDB4OWEyYjdjYzUsCisJMHhmNmQxM2VmOCwgMHg4MmVjM2JhYywgMHhlZmY2ZGE3ZSwgMHhhOGFlN2EyMiwgMHhkMmYxNDIzZiwgMHg5NWY5NmYyZiwKKwkweDhiOGE2YWQ2LCAweDZjMjI3ZGMwLCAweGQzZGI3ZjlhLCAweGRjOTBjNmZiLCAweDQ0YjJlZjE2LCAweDhjNDkzMzhmLAorCTB4M2Q4ZTZjMTMsIDB4OGNmZWIwNGUsIDB4NTBkMjljNjUsIDB4Y2ViYmE2ODMsIDB4YzUyOWRlM2YsIDB4NzdmNjIzN2YsCisJMHg4M2ViODVhYSwgMHhlOWU0MWFhNywgMHgwZmUzMThlMSwgMHg3N2Q2YWE3MywgMHhhNGJmNjBhMSwgMHhmY2RjNjdmNywKKwkweDEzZDkxOWJkLCAweDEyZTVmYTQ3LCAweDA5M2JjZTc3LCAweDE0NmE5ODQ5LCAweDRjYmQ1NWFmLCAweDg3ZmQ3N2M0LAorCTB4NWRmMTBkMmYsIDB4ZTE4YWJlZWQsIDB4N2MyMjU3N2MsIDB4NTUxZTdlNGQsIDB4NGJkNDMwMGYsIDB4MmNiY2I0ZDUsCisJMHhjYjQ0MmJmNCwgMHhjNmM5MmQxYiwgMHgyZmZjMjZjMiwgMHhmNTRmNGY3MSwgMHg2NDQ3NzlkMiwgMHg3MGYzZTIyMCwKKwkweGZiMTU3MWM2LCAweDlmOTQ0YmZkLCAweDViMGEyZmVhLCAweGZiZjMwYTk1LCAweDJkZjI0ODRiLCAweGRmZDk3ZTgzLAorCTB4ZTc5NDE4M2UsIDB4OTc3ZmQ5ZWUsIDB4ZDk2M2YxMWUsIDB4YjBhYTU3ZTIsIDB4YmI0NjFlNzcsIDB4YTRlMGJkODQsCisJMHhhZjc5MDZmOCwgMHgwOGY5ZGU5MywgMHhmNWE0ZWUzZSwgMHhmOWYxZDgxZSwgMHhmZjVmYTQxMywgMHhiOWY4Y2VjMiwKKwkweDIwMmY1ODBmLCAweGRlNzUwYWFmLCAweDlmMWRmMWM3LCAweGQ0NTdmZTNmLCAweDhjMzFiMTlmLCAweGQ0MzhmODVmLAorCTB4M2VhMWJiNDcsIDB4OGU5Y2VjOWUsIDB4YTBjNjEzNjcsIDB4ODVmMGE0NWYsIDB4M2NhMjY2YmIsIDB4ZjRlNzhjMmIsCisJMHg2YTRjZjg1OCwgMHgzYmZhMWFiOCwgMHhjN2YzY2M5NiwgMHg3N2EyMGRiNiwgMHg3NTlmNGEyNSwgMHg4MWU4ZGM1MywKKwkweGUwNTVjZjFkLCAweDRjZmVkNGJlLCAweGE5N2RjMzNjLCAweGU3YTEwNWZkLCAweDUzYmM1MmZmLCAweGNkN2FhYjU1LAorCTB4NGNjNWUzZjEsIDB4ZjNlZjlhZjEsIDB4MTJkZTYyOTQsIDB4MmZjOGM0YWYsIDB4ZmU4NDdjNDEsIDB4YmEwNGE2YWEsCisJMHhhZmZhMDQwNywgMHhkNDhmOWZhNSwgMHg0NDdjM2JjZSwgMHhmY2ZlYTFjNywgMHgzZmE0NTNmZSwgMHg3YWU4ODNjYSwKKwkweGNlYmRmOTQ2LCAweDM5NWVlMjIxLCAweGQ3NzU3M2I0LCAweDA1OWQ2YTBmLCAweDlmZDM1ZjNjLCAweGFhMTY5M2NiLAorCTB4Zjg1M2IwZmYsIDB4Y2Y3OTQ1OGYsIDB4ODdmZDc5N2UsIDB4ZWVlZWZjODQsIDB4MTBhZmI3ODcsIDB4ZDM0NGQwZWYsCisJMHg2ZmQxNDZlZiwgMHg1ZmJmOTZlOSwgMHg5NTlkZWIxYywgMHhlZmE3ZjMxOCwgMHhjODU4OTQzZiwgMHg3NmNhN2E4NiwKKwkweDg1N2ZiZDI3LCAweDdkZTAyOGVmLCAweDNmMWE5ZDg1LCAweDQ0ZjMyYWQ3LCAweGRkOWI5ZGU4LCAweGM1OTcxZTQyLAorCTB4OWRkZGU4NDUsIDB4NTgxZTYyZmUsIDB4ZDFjY2YzMWYsIDB4OWZiZDM0ZmEsIDB4NjE5MzljZjYsIDB4MGJmOTU5NWMsCisJMHhiYmUyM2Y2ZSwgMHhjN2U3ZTc3YywgMHg3MTg1OWU3ZSwgMHgxNzE0ZjE4OSwgMHhmZmMyZmU1ZiwgMHhiNzI4M2EyMiwKKwkweDNmMjJlNjQ3LCAweGIzYjc2ZTc0LCAweGRiZTdjODhkLCAweGZjOGMxZDVmLCAweDA2NDZhNmRhLCAweGYzOGFmOWY3LAorCTB4YmIwNmYyYmEsIDB4NThiZmZlZjUsIDB4ZGFhYWE5YzcsIDB4YmJiZWYwY2IsIDB4YTRiNmFmNzEsIDB4NTdmMzM5MTcsCisJMHg1ZmEzZDcyNywgMHg3MjVmZmE3MSwgMHhkZjViYmYxMiwgMHgzNTU1M2E3MywgMHg1OWRmMTMzYiwgMHgzODk3ZWEzMCwKKwkweDc3YzVjYjYyLCAweDEzN2M1ZTUxLCAweDcxZWFlZTM5LCAweDljNWRmNTNmLCAweDI1YWM0N2NmLCAweDE1M2VmZDA1LAorCTB4M2NhMzc3YTAsIDB4M2U5MmQ5MmYsIDB4ZmIwNGZkMTAsIDB4MDQzYmM2OWQsIDB4OGZkYzA0ZGUsIDB4YjI1ZWFiZjYsCisJMHhlZjM1MzFhNywgMHg3Y2FhMjczMywgMHhmNDMwY2E5OSwgMHg1NGNjOGNkZiwgMHgxYjFkMWQ2MCwgMHg2N2Y0MTRjZSwKKwkweDljZWE0NzE4LCAweDlkZWU0YjFkLCAweDNhZDNjNjc2LCAweDk4ZjYxYzRhLCAweDA5Y2Y5ZGY3LCAweDhkMGY3YWJhLAorCTB4MWUzZTY0ZmUsIDB4ZWUzMTg3ZjIsIDB4NzI0YzM1N2UsIDB4MmYzODhlZjgsIDB4YmIwMTJiZDUsIDB4NmU5N2JmMDgsCisJMHg3OTY5OTM5OSwgMHhhMWE5NDU3ZiwgMHgwNGE3YzA3YSwgMHg0ZWI2NjJjZiwgMHg2ZmM5MzJjYiwgMHhhNWUyYmM2MywKKwkweDI2NGE5OTU5LCAweDRmZmU1NzdlLCAweGRkY2FiZDE3LCAweDI0YTE2Njc4LCAweDAxMTUwYmQyLCAweDlmYWViNjYzLAorCTB4YTI4ODdlZTUsIDB4N2UxMDM5ZTYsIDB4MTVkM2NiMWEsIDB4ODZhNTQ5MTksIDB4MzU4ZTNkZjgsIDB4NzUwMmVhNTAsCisJMHg1NjUzYmY4YiwgMHg5ZTRlNTBjOSwgMHhlOGY2ZTcxMCwgMHgxYmI0YzJlZiwgMHhkYzkyNzc1ZSwgMHg2YzYyMGQwZiwKKwkweDA3YmUzYTc4LCAweDRkZDA0ZGUxLCAweDEwZjE1M2YwLCAweDU3NjNlNjFlLCAweDE3OTcxOTJhLCAweDkzYjQ3NDMzLAorCTB4N2Q4MDUwYTUsIDB4NWQ1NGY0MDksIDB4ZTkxMzNkMzUsIDB4MThmY2ZlMTEsIDB4MDdhNjQ5MDcsIDB4YmZhM2NmY2MsCisJMHg0MWVhMDVmYywgMHgzZGZjYTc0MCwgMHg3MGIyZWZiZiwgMHhjMzE4ODAzNSwgMHgzYWFmYzk4MSwgMHhlODc3ZjE5OSwKKwkweGNjYzNiZjU2LCAweDcxYTVjNmY2LCAweDY4ZTc3ODkyLCAweDE3MzFjOTFmLCAweDg0ZWJmZWViLCAweDk0NTU4YTNjLAorCTB4ZmYwOWQ1YjcsIDB4NDQ3M2MxYzgsIDB4YTgyMmNlOTcsIDB4NThiYmM2MTcsIDB4ZDc1MjFlMjQsIDB4OTk5NGU1MjgsCisJMHg5MDU5M2RmZiwgMHgzZWE5ZDEzNywgMHhjZDFlNWFkMSwgMHhhMmQ3MjAxNywgMHhmODIwNmRjNiwgMHg0NDlmYmY0MSwKKwkweDU0NDlmYmY1LCAweDU1N2M5ZmJmLCAweDgyOWMwNmJmLCAweDdjM2U4ZDhlLCAweDU1NjU2MmE3LCAweDFmMWI4MDllLAorCTB4MDZlMDIxY2YsIDB4ZWY4OTE5ZjAsIDB4OWM1YjMxZTgsIDB4MTM4NzljNGYsIDB4NmNjNGUzNWMsIDB4ZjAxZjU4ZWMsCisJMHg0ZTk3MWU1YSwgMHg2MTJmYjk3OCwgMHg0MWM2Mjc2ZiwgMHg4NjVhYTRiMywgMHg4OTBhZWY3NiwgMHg5N2YwZDNlZiwKKwkweDYzYjUzMmU3LCAweGYwZjg4M2JhLCAweGI5NGUzMTFlLCAweGMzMGFmMzgwLCAweGJlYTNkNTNmLCAweDFlYWZmNDkzLAorCTB4ZDViZDlkZjUsIDB4ZGY1ZDhiOGYsIDB4ZTI3Y2RiZGQsIDB4YjEyN2NmNjMsIDB4ZTI2YmZlOTcsIDB4NzVmZmY2NjMsCisJMHgwYmM1NTJlNSwgMHhlNzg2YmY2ZiwgMHg0OWYyNWRiNiwgMHhmNTViZDAwNywgMHhkNDM4ZjJjYywgMHhmZDhmMTMzMywKKwkweDcwYmU5NWEzLCAweGQwMzFkMzNkLCAweGE0MzhlZjhhLCAweGI4YjdhMDZmLCAweGQxZWZkNjYxLCAweDdkMWJkMjc0LAorCTB4NDA3NThiZTUsIDB4ZTAwZmQ1ZGUsIDB4N2YxODkzNzAsIDB4ZjczZjFkNmEsIDB4ZjcwOTY1YmUsIDB4ZTg3OTgxZDMsCisJMHg4YjM3ZmFjNywgMHgwYTM5MzdmYSwgMHhjNDcwZGZjOSwgMHhiYWJmZGZjNiwgMHg5MWViOTZhNSwgMHhhNjU4ZmNiNywKKwkweGVmMWVlOWYzLCAweDgwM2ZlMTUxLCAweDJhNWQ2ZWRmLCAweGIxZTkyMzg1LCAweDc1NjJkN2RlLCAweDllNmUzZjc4LAorCTB4YmRmYTNmMTgsIDB4ZTZmMzAwYWEsIDB4YmQ2Mzk2YWUsIDB4ZDJlOWM1NTcsIDB4ZmQxNzU3YjgsIDB4OTYwMmM1NGUsCisJMHhiMzIxZGUyNywgMHhkNGViM2Y3ZSwgMHhjZDY3ZTRiYiwgMHgyYzdkZWVhOCwgMHgxZWU4MTZiNCwgMHg3YmEwNGZmNSwKKwkweGViYzc5NzNjLCAweGUyMTcxNDYyLCAweDQ4NWM3OGQxLCAweDRmM2EyMGNiLCAweGQ5ZGZlNDMzLCAweGRjMDRkZTkxLAorCTB4MzA3Zjk5YWYsIDB4ZWZmM2FlZmYsIDB4YTZmNGFmOGIsIDB4MmExZGVmOWEsIDB4ZWYyY2UyZTcsIDB4YmVhYjU0ZjUsCisJMHhlYTZmOTQzNCwgMHhjMTVmZDAzOSwgMHgwZGNlZDY1NCwgMHgzOTUzNWU2MSwgMHhmY2M0YWRlOCwgMHg3MjQ5YmUxOCwKKwkweGEzMDk0ZDJhLCAweDNjZjQ1NDVjLCAweGFmN2E4ODU2LCAweGE4YzNlZjc4LCAweGQ1NWQyNWFmLCAweDBlYmU2N2E1LAorCTB4NGI4ZTZmZmYsIDB4YmM1Y2JlMjYsIDB4YjZmNzRiZDYsIDB4ZGJjZjhiM2YsIDB4N2IyNGY0ODksIDB4NTcwMTdjNzIsCisJMHhlZDA4N2E0ZiwgMHhjNmFlZWJlMCwgMHg1Y2Y3YTc3NSwgMHhmM2U2YjU0ZiwgMHgxNTdkYmU5MSwgMHg2ZmZjODA4MCwKKwkweDRmY2UwNzNlLCAweGY2ZGY3YmI2LCAweGEzN2VmY2UyLCAweGY0YmJmNDMyLCAweDQ0ZWY4Zjg0LCAweDg2Y2ZjYTE4LAorCTB4ODg3YzUwMDcsIDB4MDQ2MzMwOWMsIDB4YmM0NmJmOGUsIDB4NmFiYWJhNmYsIDB4YWEyYmE1MjQsIDB4YmM3OTQ4OTgsCisJMHhhZjJhOGFkYywgMHhlYTQ0NzM0OCwgMHhhYTc0ZTkxNywgMHgxYTU1NmY3NywgMHhmOTU1NTdlNSwgMHhlYmUwMzUyOCwKKwkweGZiZDBkNWYwLCAweDdjNjE4ZTkzLCAweGYwMmU4NzdjLCAweGYwMTM2NDk3LCAweGU1ZmU5MDBiLCAweDczYTRhYjQ4LAorCTB4MTk1ZWE3NDUsIDB4ZDhkZjc3YzEsIDB4NzA3N2Q4NDAsIDB4YzEwZDdhNTksIDB4ZjkxOWQzNTcsIDB4ZTUzZWExMzUsCisJMHg1NDg3OThlZCwgMHhmODQxOWRhZCwgMHg1NjRhZjQ1MiwgMHhjNTZmZTUwOCwgMHg1YzIyOGUwNywgMHgyZDRiZGU5ZCwKKwkweGQzZGE1YWVmLCAweDdmYmQ0NmM2LCAweDgzNmYwNTFhLCAweGI4NzFiNmRlLCAweDdhNzEyZmRmLCAweGZkZmI4NjhiLAorCTB4ZTMxNzhiNmEsIDB4YjJiZmVlMjIsIDB4ODIyOTVkZWIsIDB4MWM0Mzk4M2IsIDB4ZTdlNmJmZWUsIDB4ZGVlMTNkYjQsCisJMHgwOWJlN2IzMiwgMHhlOWVjZWVlZSwgMHgwNGZiZjcwNCwgMHg3MDE2ZWY5YywgMHhhODc4MTZhZCwgMHg0NmFjZjAxNiwKKwkweGE0N2U1M2I4LCAweDNhNDRmYmM4LCAweGM0N2JkMjlkLCAweDExMmJiN2ZiLCAweDA4Y2E5MDFmLCAweDdkODc4MDc3LAorCTB4MzBjOTg4NTQsIDB4ZjE3OWJhMWUsIDB4NzQxMmVlY2YsIDB4MWZjOGRiYWIsIDB4ZmNmMmJiMmEsIDB4MTI3Yjc3MDgsCisJMHgwNWMzYmI4NywgMHgwNmJhMjA3OCwgMHgzY2IxN2JiOCwgMHg1ZDU0ZjA0NCwgMHg5ZjUwY2UxYywgMHgxNWU0NDFlMywKKwkweDdlMjY3Yjg0LCAweGI4MDBmOGU3LCAweDg3MWY4ZGY3LCAweDA1ODI3MGYyLCAweGU0ZDI1YWNlLCAweDIzZmI4MzBiLAorCTB4MTI0YjdmN2MsIDB4YmYwZDFlN2MsIDB4YWZiZjhkMjQsIDB4NmY3N2YwNmIsIDB4ODhiNTcxZmEsIDB4ZWYxNmFlYjcsCisJMHg1MTFjMjIyNywgMHhlMDA4NzlhZiwgMHg0ZjBlMzRjMywgMHhjOGE0N2RmZSwgMHgxNjRkMjhmYiwgMHhlMDM1N2ZmNiwKKwkweDE2MWZjYjAxLCAweDE5YzIxMGZhLCAweDczYzUxZmQzLCAweDU2YzkzY2ZiLCAweDM4NDU0ZmI5LCAweGYyZWZlMWY1LAorCTB4MWIxMGE0YjAsIDB4Njg3OGNkOTgsIDB4ODVhNWZlMmYsIDB4YzZmMzE3OTgsIDB4NGFkN2FmZjksIDB4NDRhZWIyM2YsCisJMHg3ZGU5MDNiZCwgMHhkZDZkZTkxOCwgMHhjZjBkYWFhYiwgMHg1N2E1ZTQzZiwgMHhjYjY3ZWU1OSwgMHg1ZTg5ZmRiMywKKwkweDQyNDA3ZjgyLCAweGMxM2VlNmJkLCAweDVlOTE2Yjg3LCAweDFlZGM3ZTY4LCAweGUwZTgyOTVlLCAweGVlZmVmMTZlLAorCTB4ZWU3ZTgyM2QsIDB4YTBmY2ZjMTcsIDB4N2UzZTM3NDEsIDB4NzRjZDY0M2YsIDB4OTQ5OGM3MWUsIDB4MjBlZjEzNjEsCisJMHg0ZTM5OTg0NiwgMHhjMGQ3ZDEzMCwgMHhkOTE3OTgzNCwgMHhlOTRhNWUzNiwgMHg4ZWY2NGI5ZCwgMHg3ZTM2Zjg5ZCwKKwkweDdkMjNmMzE0LCAweDY3NzNiZTI1LCAweDliNDNiZjk4LCAweGExZjUwZmQ3LCAweGQ5ZGRlMzQ0LCAweDM5YzRkZTg5LAorCTB4YTIzZDMxNzQsIDB4NjUyMGY3ODgsIDB4YzRiNjRmNmUsIDB4ZGFiNWRmN2MsIDB4N2U4MWRmYjcsIDB4MTNlNmRlOTksCisJMHhhZmE3ZjNlZiwgMHg2YmUyZjE4NCwgMHhmNTQ3NjRkZCwgMHg1OWNkZTQwZCwgMHgyZDU3NzkwOCwgMHhjYjBjNTVkOCwKKwkweGMxNzA3Y2I5LCAweGY0NGQwYmJjLCAweDVmOGJkZjExLCAweDU5NWQ3NTQ3LCAweGY2NGFmNDgwLCAweGE5M2ZhNDM4LAorCTB4Zjg0NGVhMWQsIDB4ZThiZGFjMDIsIDB4Y2Q0ODdhYmYsIDB4YzFmYjg3ZWIsIDB4ZmRiMTg5NDMsIDB4YjllMmIzNzAsCisJMHg3NTkzYzRiZiwgMHhiMDlmYzVhOSwgMHgzYjUzZjU0ZSwgMHhkZTU1YTI3ZCwgMHg0M2ZiMTNhYywgMHhmZTU2YTk5ZiwKKwkweGNiODNmNjMwLCAweGM1OWY3ZjQ0LCAweDBmMTQ3ZTA3LCAweDZlNzI5Njc0LCAweGE0Y2ZjOTJhLCAweDBmZWY2MzZiLAorCTB4YzIxNmFhZDUsIDB4NDdhYTM5ZjcsIDB4ZTUwZWJlNzMsIDB4ZWU2ZjVjNmIsIDB4OWQxODc3MjEsIDB4OGMwZDljODMsCisJMHgyZmZlODhkOCwgMHgzMzk2YmU4MywgMHg4YzQyZTcyZSwgMHhiYWM2OTNlYiwgMHgzZWY0ODY3ZSwgMHg5ZDAxZjcwMiwKKwkweDAxZjcxZWU4LCAweDM0YzNjYmNjLCAweDViOTQ5YmEyLCAweDU4N2ZlNDZjLCAweDVlZWNmODI1LCAweDA0NmI1ZmMxLAorCTB4N2M4MDNkNWYsIDB4ODFkZjAyMzUsIDB4MTNmYTUxZjYsIDB4OTBlYjRmYzEsIDB4MTJkZDIwZmYsIDB4NzhmNWNlOWYsCisJMHg2MTk3YmVmMSwgMHg4Yzc3MmNjNywgMHhhYjFjZjdhNSwgMHgwZmRhMzY1ZCwgMHg2MWVkNzc5NCwgMHhmYjA1ZGExNywKKwkweGY3ZThlYmM2LCAweDdhNTlkZDkxLCAweDU5ZTU4ZGMwLCAweDQzYzAzZjBlLCAweDkxZDJjYzRhLCAweDJmNzMzZTVlLAorCTB4ZTJhYmU4YjgsIDB4ZjRmZDAxNWIsIDB4NzJhMmIwYWUsIDB4OTQ5ZWE0N2YsIDB4NDUxZmRlYzcsIDB4OWVmNDUzYTcsCisJMHhjYjVmYWE4MCwgMHg3MGZkM2ZkMCwgMHhlMTEzYTU1MiwgMHg4ZjNjNzBmYywgMHhjZmNkYWFkMywgMHgzZTAzYjgyNiwKKwkweGUyOWJjNWI2LCAweDVmNjc1MmE1LCAweDFmMWVmNWQ1LCAweDJmNzBmZjc2LCAweDEyZWMxMmVmLCAweDBjMGQ4MmYyLAorCTB4ZjkyNjYxYjEsIDB4N2JkZTJiNTAsIDB4MWIxMGRlNjQsIDB4Y2IxMzkyNjksIDB4ZjQzMmU3ODcsIDB4MGY5NGY1ZWIsCisJMHhjZGNiYzhiZCwgMHg5MGFlNWU1YywgMHg0MzRiY2I2MiwgMHg2NWU0Mzc3ZiwgMHhkMjMxNWNiNCwgMHhiNzRkMTc5NSwKKwkweDVkNTRhN2RjLCAweDY2ZjI0NjNlLCAweGMxZmY2YzY0LCAweGZjZWRlM2VmLCAweGYzZTY2YTFkLCAweDJjZjdhN2U1LAorCTB4ZGVmZDc4MDcsIDB4ODNkNDJmMGMsIDB4ZjdjNTdmMGMsIDB4NWEyN2FjNjIsIDB4Y2FiODllM2UsIDB4ZjQwMzU3ZDgsCisJMHhjZDAyZDAzZSwgMHhhZmY4ZjBmYiwgMHhmYmFkNTdkYywgMHhkNWI5ZTE0MSwgMHg5YzE0MGZhNCwgMHhhOGI0YTFjYiwKKwkweDExZjEzYTc2LCAweDkzMThkM2MzLCAweGZkN2M3YzlkLCAweGRmODgzZDBmLCAweDdjZTJiNWUzLCAweGM2MWFiZDdjLAorCTB4MWI3ZGE0YjgsIDB4MGU2MDdhZWYsIDB4ZTNjMTc1YzAsIDB4ZTM4ZjlkMzIsIDB4MTRkOTBkM2QsIDB4YmNiMmMyZGYsCisJMHhlZjFiYTdhNCwgMHhkZjBmMWUyMywgMHgzMWM3MzFlZSwgMHhlOWQ0ZmMxNCwgMHgzN2JmZmQ0NywgMHgxZjU4MmM3YSwKKwkweDhkNTM3ZmRiLCAweDgzYmI0NGZmLCAweDVkYTI0NmY5LCAweDY3NWRmYTAxLCAweDlmYmZmNTA0LCAweDE4ZGRlOTM4LAorCTB4MThkYTFmMjMsIDB4OGZjNzMzZWYsIDB4ZjE1YmU5MTgsIDB4ZGMyMWNlZDMsIDB4MzNmNzhhZGYsIDB4YWI5ZGQyMTcsCisJMHhmNGQ3OWQwZiwgMHhkYzdjMTdjZSwgMHhjNzMzZTg2MywgMHg0NTQ3ZDI3MywgMHg3ZGMwMzU5YywgMHhjYTdmYzU5NiwKKwkweDA5OGY0OWNmLCAweGY0NzMxODdmLCAweGNhMjcxZTUyLCAweDdiOTRiZGJkLCAweGQzMTMzYzc4LCAweGQzZmY5NzYzLAorCTB4M2Q1MWE0N2UsIDB4YjgyMWI0ZWMsIDB4ZDNkYWYyZmUsIDB4MmZhNWRlYWIsIDB4NjI4MGYzZDYsIDB4NjBiZGM3MTEsCisJMHg3OTc4N2M2MywgMHgyMDU5YmUwYywgMHgxMDJmMDdlZSwgMHg3ZDA2NWRlNywgMHhkMGRmN2YxNSwgMHg0NjVkMzliMywKKwkweGQ0ZjRhZGQzLCAweDFmYTc0NDI1LCAweDVmYzk1NDFmLCAweDg3ZjQwMTViLCAweGQ0ZjQ5ODdhLCAweDY5OGY3YTc4LAorCTB4M2Q5NzEzZDksIDB4ZjljMDBiNzgsIDB4OTUzMjQzOTMsIDB4MTA3MzlkOTcsIDB4ODdmZmI2NWQsIDB4M2JmY2UyOGYsCisJMHhlZmQyYWI3ZiwgMHg3MDcyN2MyNiwgMHhiN2ViYzUxYSwgMHhiYjllZjc4YiwgMHhlZGM1Y2VmOCwgMHg1YzVjMWJkYSwKKwkweGJiOWMxNGFlLCAweDhiYmJlODk3LCAweDM1ZjNjMmFlLCAweDczODJkYmU0LCAweDU2NWU5MDBmLCAweDRlYmRlZjgwLAorCTB4Nzg4Zjc1YzAsIDB4ZTgyMjkyNzksIDB4MWZiNjAyNzcsIDB4ZWExY2JiOTIsIDB4M2U3MmI2MTUsIDB4MTU0MzEzNjEsCisJMHgxMGRlOGZlNCwgMHgwNjM3YmJlZiwgMHhmMmUwZGYzZiwgMHgwYjQ1ZTI1YSwgMHhmZjUwZDc1YiwgMHgyNGMzZjQwYywKKwkweDAyYzg1YzUzLCAweDg1MDdmYmYxLCAweGU1ODRiODc4LCAweDIxYTU4ODdhLCAweGQ2ZjkwOGRmLCAweDc3ZDZmZjRkLAorCTB4ZDY5ZGRiYjAsIDB4YzJlOTFhNzUsIDB4YjA0ZTc1YWUsIDB4ZWJkZDYxZDgsIDB4NzNlNzJlZmMsIDB4YjYxNDZmYTEsCisJMHg3NTc5ZjBlNiwgMHhlM2U3ZTdhZCwgMHg3YmE3YWQ2MywgMHg3ZGE5MTMxZCwgMHhmMWVjNjI3YiwgMHgxZmUzMTdlZiwKKwkweDliYzIyYWFiLCAweGJjNDRhYzViLCAweGJlMTA1YmI3LCAweGQ1ZjdjMzVkLCAweGY2MjdkNjBhLCAweDJhZWI0YzkxLAorCTB4YzRiNTJkYWMsIDB4ZTZkNDE1MmIsIDB4ODU3YWZiZDMsIDB4ZGJiNWYzZWIsIDB4MTc1M2ZiNGMsIDB4OTdmZTQyNWUsCisJMHhjNmViMGQyNywgMHgyZTZiZmRjYiwgMHhhZWE4YmMyMywgMHg3ZTkxM2JiYywgMHg3YzU1M2Q4ZiwgMHhlYzVlN2JjNywKKwkweDg0ZTllMzk3LCAweDQ5NTMxYTE2LCAweDRmNzZlYWYyLCAweGY3NGRmYmFjLCAweDU2YTllMzQ3LCAweDgwZWMwOWUwLAorCTB4MGM5ZTEzMmMsIDB4M2ZiNzQ0ZmMsIDB4OGVmY2I5YjYsIDB4ZTIxY2YwZjcsIDB4NTA5YWZlMTEsIDB4MGEyYmYyZWYsCisJMHhlMWIxZTk3ZiwgMHhkN2EwYTRmNywgMHgwNDBmYTA2MywgMHhkZjdlMDgyZSwgMHhmNWNiYzRiMiwgMHg2ZjgxM2YwYSwKKwkweDc3YzYzZTAzLCAweDA4YzJlN2QwLCAweDM3OTEyN2I3LCAweDRlM2ZiMTkzLCAweDViODNlNzBmLCAweDFlODJmOGY3LAorCTB4Y2Y1ZWM1MjYsIDB4NTllYjVkNmIsIDB4YzdhMDQyY2EsIDB4M2ViOGQ0OWMsIDB4ZWU3YWZiZDEsIDB4MDVjNzIxNjIsCisJMHg0ZjhiYTdhYywgMHhmYTdjMmRmMywgMHgzODViOWFkYSwgMHg5ZmZjMGE5ZiwgMHhkMTBmN2ZkYywgMHhiYzcwYjFmNSwKKwkweDdhNTRlMzBmLCAweDQ4NmJjZjViLCAweGQwNjJlMzA3LCAweDFiMTBiMGMxLCAweDhmN2ZmZDk1LCAweGZlNjg0ZTBlLAorCTB4M2VlMDhmMTEsIDB4ZWUxNWZiMDIsIDB4ZGU0ZmM1ZDMsIDB4YmYzY2M2M2YsIDB4ZmQyN2UyYjcsIDB4OWFhNWY2OWUsCisJMHgwZWE3M2IwYiwgMHhmNDFkZjY0ZCwgMHhmYjI3N2VkMiwgMHg0MzQ5NjFhYSwgMHg2MzNmODE1ZCwgMHhhM2NmMTJmYiwKKwkweDZlOWZhMTlmLCAweGM2Y2ZlMjQ1LCAweDU3OGJkMmM0LCAweGM3MmUwNTU2LCAweGFhZWE4YmYzLCAweDhmZDFjYmEyLAorCTB4OTczZDBhYWEsIDB4Y2U5YjllYTEsIDB4ZDYyMzE3N2YsIDB4Y2RjYzdkN2IsIDB4YWFiMmJiZjEsIDB4OTgzZmNlOTIsCisJMHg5NGY0YzQyMywgMHhkODAwNzdlZSwgMHg0N2YyNGM4OSwgMHg3ZWFiMmUyYiwgMHgxZDAxYTlhNiwgMHg3ODlhZGZmZCwKKwkweDAyNTU0MGE3LCAweGQwYjNkM2FiLCAweDExOTQ5NDVmLCAweDFmZWZjMTMyLCAweGIyZWU3ZTJlLCAweDhlYmY2ZDI2LAorCTB4ZTg3NjFhZTcsIDB4OGU2MGZkMWYsIDB4OGI1OWNhODEsIDB4NjU0NWVjZmYsIDB4OTNjMDVmNDEsIDB4MWM3MzFjZjEsCisJMHgxMjRiZjA2YiwgMHg0NmNmMTNmOSwgMHg1YWNmMTNmOSwgMHhmMzA0OTFlNiwgMHg1YjNiMGFmZSwgMHgxY2U4Nzg3MSwKKwkweDhmYzI2MTUyLCAweDVmMDFlMDJjLCAweDViYmIxZjY4LCAweDFlNWNlYmU3LCAweDYwN2QyMWVmLCAweGIyMzY0NWQ1LAorCTB4ZmYwOWQ2ZWIsIDB4MmZkMGNmZjQsIDB4ZTg1MTcwNGQsIDB4ZTBjMzAxYmMsIDB4YzA5NmJlYjAsIDB4NzNjNGUxZDcsCisJMHhhZGVkMTkwYywgMHhmOGRkZTUwOCwgMHg0ZjRjOTc2MiwgMHg0Zjk4NGExZiwgMHhmMzA5NWU2NCwgMHgxNTY0NTk3ZCwKKwkweDkzMWQwZmRhLCAweDNmMjBlZjVhLCAweGU2OTAzM2EwLCAweGQ2N2ViYzA2LCAweDg0YjBlNWFmLCAweDgxNzkxMmU3LAorCTB4YjVjZTExOGIsIDB4MGJjMzI4NzIsIDB4NzcyMTdmZjUsIDB4YzFiZDYwNjYsIDB4MWY0ZWY0NTAsIDB4Zjc4NDVlOWUsCisJMHhmM2E2MDIxMiwgMHg4ZWI0MjFjZSwgMHgzM2RjYmNlZSwgMHgyNTUyZDE3ZiwgMHg2ZmVmZmNlYSwgMHg1ZmNiOWIxNywKKwkweGM2MmZmYTcxLCAweGY5M2I1NDc5LCAweDFmNDk2MGZiLCAweDU3YmU3NDQ4LCAweDk0ZWU3NWRkLCAweDY0ZjJmYjQ3LAorCTB4ZDEyM2M3MzcsIDB4NDFkNWQyMDUsIDB4NTU5ZDM3YWUsIDB4Yzg3ZDA5YmMsIDB4ZjMzMjNkOWYsIDB4N2MzY2NiNDUsCisJMHhlYzIyYmM5NiwgMHg1M2EwM2FkMSwgMHhlODMyYTczYywgMHhiN2UyOTg2MywgMHhhZjBkMWQyMSwgMHgzYzY2ZWY4MSwKKwkweGZiNzdkMGM2LCAweGYwNzllOGI4LCAweDMxYjlmYTk4LCAweGU4OTcxODNmLCAweGNiOTczZTU1LCAweDdhMjhlM2Y3LAorCTB4ZjlmMTJkZDgsIDB4ZGNlZDhhODcsIDB4MTkyMTY0NmUsIDB4MjBjNzNhZjEsIDB4Y2YwNTY1M2MsIDB4OGZlMzMyMjcsCisJMHg4ZDc3YjVlYywgMHg4MmI2Mjc3MywgMHgwYjllNzVlNywgMHhiOWNmYzZkZSwgMHhhNzMzZTdhMywgMHgzYzE2ZWVmOSwKKwkweGRjZDM5OWVmLCAweDdiOWUzZTZmLCAweGY4YmEyOWNlLCAweGFiNzc0YzQzLCAweDUxZTNmYjlkLCAweDIyNTBmYzVlLAorCTB4YjdhNmY2N2QsIDB4MjFlMzU0NWUsIDB4NDZlNmYxZGQsIDB4YWU2MDlmN2EsIDB4NzNiZmVmOWIsIDB4Zjg4YWE3NTksCisJMHhlMzVkMzAwZiwgMHg1YTYxNTZlNywgMHgyN2NjNmRkZiwgMHhmYTJhMGRmMiwgMHg4NDg5NmUxZCwgMHg3MjFhYjg2ZiwKKwkweGJlMThiZWI3LCAweGI5YmRkNTFhLCAweDQyNWYzYjA3LCAweGY0MWEwNWI0LCAweDMyMWIzYTVjLCAweDVlZjkzNWRhLAorCTB4YWVkZTc5ZTYsIDB4ZjE0ZTBlMGIsIDB4ODM4YTQ3ZmIsIDB4NmViZGQ1ZDYsIDB4NThjMWMxMDcsIDB4N2MyNGQ0MjcsCisJMHhiYzQ5YzE3NCwgMHhhNWMwNjZjZiwgMHgzN2YxZGQ2YiwgMHhmOGZlODU1ZiwgMHgxY2RjZTRkZSwgMHg3OTBmZThjNywKKwkweDU3OWYzYzljLCAweGMxM2U5YzM0LCAweDBiOTM5MDIyLCAweGI5MWZmZWRkLCAweGI3N2FmY2ExLCAweGNiNGMyZWZmLAorCTB4OTU4MzlkMWMsIDB4NTUzN2M0MjEsIDB4MDM5MGFmOTgsIDB4MWMwMGE1MTcsIDB4YjgxNDFhM2UsIDB4ZDFlMTE5MzgsCisJMHhmNDgyZjdkMiwgMHgyZTRlYzNmZSwgMHgxYmE3MGUwZiwgMHgxYmFiNmQ3YSwgMHhjOGJkOWJlOSwgMHhmN2UzNWFmNSwKKwkweDM4ZWQ1NjMyLCAweDAwOGRmZjdlLCAweGU1NWU4ZjlmLCAweGNiOTVjZGVmLCAweDIyZWU2YmRlLCAweDYyY2NiMmZmLAorCTB4N2E0NjIxZDksIDB4MWUwZGY4NTgsIDB4N2JjNGRiNzYsIDB4ZjM5ZDdjZDEsIDB4NzllZjBlMTQsIDB4Y2Y3NGYxOGQsCisJMHhkOTUyZGU2ZSwgMHhiY2ZkYmVmMiwgMHg5NTdlM2NhNSwgMHhhZTYzMmQyOSwgMHgyYjA5ZDhiNywgMHhlY2Y3NWQwNCwKKwkweGQxMWFmZDA3LCAweDNhNWZjY2ZkLCAweGQ5MmRkZTk5LCAweGM4OTNlOWE5LCAweGE3MzhmMWNmLCAweGZkNTNmOWIzLAorCTB4NGZmZGM2MzIsIDB4MWY5MTJkNTgsIDB4NmY1MWZjNjksIDB4ZTdlNDJiNTMsIDB4Yzg3ZDEzODcsIDB4NWNlZmYzYWUsCisJMHg5N2VmODk5YywgMHgzZjcwYjQ1NCwgMHgyOGJjYWE2NywgMHg3ZDIwM2ZlMywgMHhlZmRmM2Y2OCwgMHhlMTA4YmYzMSwKKwkweDVkN2JmMmU0LCAweDM2OWFmM2E2LCAweDQ3NDMzMmI1LCAweGU1ZDViZTdhLCAweDdmOTA3OTQ3LCAweGM0NWRmZmJkLAorCTB4MzBlN2UxYTcsIDB4NDBlN2RkZjYsIDB4Y2UzOGMwMGYsIDB4MzliYzViZmMsIDB4MGRmOTFmNDgsIDB4MGVhNTNmNGUsCisJMHg1YzgxYzRhNiwgMHgwMzk4NTdjYiwgMHgyOThkNTRkMywgMHg5OGUzNGM0ZSwgMHhlNWVjZDMwMywgMHg5ZGFhN2Y0MiwKKwkweDI3ODNmYTQ1LCAweGY3YzM0ZjI3LCAweDlmOWJmM2M0LCAweDE3ZGIxNGZjLCAweDkyN2Q5MTJhLCAweDliZjI5ZTg5LAorCTB4ZWU4MmZkNWYsIDB4MjhmM2Y5YzMsIDB4NWI1YmY3NGUsIDB4MzlkZDhiMzQsIDB4ZmY5YWMxYmEsIDB4OWYzNTkzNzYsCisJMHgzM2U2YjExMSwgMHgwM2YzNWEwZiwgMHg3ZDI2NmQ3MCwgMHgxZTFlZmY3MywgMHg5YTdhNTI5ZiwgMHgxZTdkZWZkZiwKKwkweDNjMjJhMDYwLCAweDNlNDlkOWI2LCAweGNlNmQyOTRlLCAweGQzODc3OGM2LCAweDU4NmRiYjRmLCAweGRjZWZmYmJlLAorCTB4ZWFkY2VlZWUsIDB4ZjcyNTc3YTQsIDB4ZTJjNzE3YmQsIDB4NmExZGYwOTIsIDB4M2YyYzQ2ZTcsIDB4OGQ5MGQ3MWQsCisJMHg0ZmE4NDVmZSwgMHhiYmIwNGI3MSwgMHg3MWJiNDA4ZSwgMHhiZDA2YTVlNywgMHg2OWJlMjk4NiwgMHhmZGY4M2ZlNywKKwkweGY2YWRjZTk0LCAweDljNTFjNjMwLCAweGQzZTRmNWRlLCAweGI3YTc5ZjQ4LCAweGVjN2QyMDBlLCAweGMzNjQyOTc5LAorCTB4NzBmNzQzN2UsIDB4ZjM4ODRmZmMsIDB4ZTk1NGU0NTgsIDB4N2UzZGFiMTYsIDB4MWQwMWU4NDIsIDB4ZTg3OWI1MjcsCisJMHhkNmI4YmExNywgMHhjMjRiZWViYSwgMHhhOGE3N2NkNiwgMHg3ZDMzMWI3ZiwgMHgxMGY4Yzc0ZiwgMHhkYzM0YWFlZiwKKwkweDdlYzUzNzY3LCAweGMxNzNmZGJmLCAweGE1M2Q0ZjE3LCAweDhiMmI3NDE5LCAweDM3OTkxZWY3LCAweGUyYmVmYmE1LAorCTB4ZGI3M2VlZWUsIDB4OGU4MDAzMjUsIDB4NDMxNjExNGEsIDB4NDY5N2JmYmEsIDB4MGY4NWRiOGQsIDB4Mzg5MjdmZDEsCisJMHhhZGZjZWIyZiwgMHg1NTM5ZjA0YywgMHhlZjg5NjQ1NSwgMHhhYWZiZDJlOCwgMHg0ZDUzNjk3YywgMHhlZDQxNTFmYiwKKwkweGQyN2M5NGJlLCAweGRjYTVmNzU3LCAweGNhNjdkYTY2LCAweGI5NDgxZWI2LCAweGRiNmJmYTE5LCAweGViZWZkMGEyLAorCTB4ZTI3OWNkOTUsIDB4Zjg0OTA5ODEsIDB4ZjljMDZlNWQsIDB4ZTdmYTM5NjIsIDB4ZjI1ZTFhZGEsIDB4OGJkMDNkNjAsCisJMHhiZGUzOWFjNywgMHhhNWM3NmIwYSwgMHhlOWYxMzU0ZCwgMHg4MzRiYTVkNywgMHgwZTc0Y2E5ZiwgMHg1YTcyZTc5ZiwKKwkweDQ2MWVmMTcyLCAweDFkZmYyZDY5LCAweDFiODZkMmJlLCAweGUxMWFiYmFlLCAweDRmZGY5ZWJlLCAweDllNTg1NmNmLAorCTB4YjY1M2ZjMGMsIDB4OGZlZjg2ZmQsIDB4YzdjMWVmODYsIDB4M2U3MGY5YzYsIDB4MmQyNGY4ZDksIDB4M2ZhZGJiZGUsCisJMHhlZTc2Zjc0MywgMHg0NGZmNzFiNSwgMHg3YjQ2NWMzNCwgMHhmZGVmN2UzOCwgMHhlNTA4YWI4MSwgMHhhMmY3ZjQxMiwKKwkweDNmYjUyYzZkLCAweGU0N2QwMzY4LCAweDZiZDBlNGM0LCAweGQzOTU0MzM3LCAweDU3MGZlMWFjLCAweDk1OTY1YzUzLAorCTB4MjUzZTgwOWUsIDB4MzczYWI3ZDQsIDB4ZjQ4ZGJlNGIsIDB4YjVmNjc5NzUsIDB4OTdmYjVhYTgsIDB4OTQzYTNjNTEsCisJMHg4YTM3YjRjNywgMHhhMjdlZDZjMywgMHg0N2E1N2NmMSwgMHg2OGY3N2UzMiwgMHhhMjVlOTlhNCwgMHgxMTlkZjVlYiwKKwkweDJhYjdkZmEyLCAweGNkNzIwYTViLCAweDFkOTdlZmE0LCAweGQ4NzhhMWFkLCAweDE5Yzg3MWU4LCAweGMxM2I4YTY4LAorCTB4N2M0YmQxZmQsIDB4MDI3YTE0ZWMsIDB4MjJkOTFjOTMsIDB4Y2YyODdjNWUsIDB4NDhhN2JiZDMsIDB4YTUxMDQwOTcsCisJMHg1ZWE5YjI5NywgMHg2Y2I1ZWI4NCwgMHg0YmNmYTYzYSwgMHg5OTY0MDc5MSwgMHgzM2YyMDNjYiwgMHg3OTI3OGI2ZCwKKwkweDNlYjdhNmQwLCAweGEzYTQ3M2YxLCAweDFlNzRkMWZhLCAweGVmZGM1ZmQ2LCAweGU4NDZmMzZlLCAweDc3ZTM1OGJkLAorCTB4OWU3NGRhNzEsIDB4NTI3NjY5MmYsIDB4OGZlOWQ1M2MsIDB4Y2I5NzkyMzQsIDB4ZWIxMzhlMzAsIDB4ZDliNGVkM2YsCisJMHhiZDNiNWY0MCwgMHg4YzY0ZWZiZCwgMHhlMDZiNmUwYiwgMHg2YTlmOGFlZiwgMHhmYjU5M2JlOCwgMHg5YTM3ZmQ4YSwKKwkweGYxN2Q4ZGVmLCAweGRmMTNmZTA4LCAweDhiZjhmNTRmLCAweGFjZGZiODNkLCAweGE5ZDM3MWUwLCAweDJhMzMyYjdkLAorCTB4NjhjOWUwNjMsIDB4NjY1NWE0OTcsIDB4NzlkMmJkYTAsIDB4OTFiN2NiYWIsIDB4MGFlOTUzZWIsIDB4YzhkM2RkZjksCisJMHhmYzJmOTJhZiwgMHg3OWU5Zjc0OSwgMHhiZWEwNzg3NywgMHhlMWZhZWExYiwgMHhlNTA3M2VmZiwgMHhmYzc3ZTg4ZCwKKwkweGExZGRmNjQwLCAweDFmM2VlZDBmLCAweGEwMTU5MDVmLCAweDAzZjRlM2ZiLCAweDdjZmUzMDM2LCAweGEwMTQ0NTg1LAorCTB4YWZiOGY5YjcsIDB4YzkzY2ExOGMsIDB4MjVlYmY5Y2YsIDB4YjA1YzIzOGEsIDB4N2MxZWJhYzYsIDB4MWZiY2RhZTcsCisJMHgyOTJmZTExNiwgMHhiMGI4YzUwZSwgMHhkNjhiNGEwNiwgMHg3MThiY2I1YiwgMHhiYzUwZjBmZiwgMHg5NGNiYzUxNywKKwkweDE5Y2I1OWQ0LCAweGFkMWY5MDhiLCAweDdiNGJmZWFjLCAweGNhN2RiODJjLCAweDZiZjlmNThjLCAweGEzYjkxNjNjLAorCTB4NTBmOWRjOTIsIDB4OTVmNWEzY2UsIDB4ZDIwMDM3YTIsIDB4MWNmZWM0OWIsIDB4NmQyNzMzYmMsIDB4NGIxZGE0MDEsCisJMHhjODJkYTQyNywgMHg3Y2VlN2JjNCwgMHg4ZWQzMjMxZiwgMHg4ZmJmOThmOCwgMHg0NTk1M2E1NywgMHg3MTc3ZjEwNiwKKwkweGE1OGZlZTE4LCAweDM0NjQ1MmNkLCAweGU0MmMxZGU2LCAweGUzYmZjYjE5LCAweDZlYjgyMGZiLCAweDYzMzEzZGYzLAorCTB4ZjM1ZWI4ZGQsIDB4YzcyNmY2NzcsIDB4MTBjZjcxYWIsIDB4MmYyZTZiZDcsIDB4YWIyODcwMTMsIDB4M2FmYzViYjcsCisJMHg5MGE1ZWExMywgMHg3Zjc4ZGJmYiwgMHg1NWRhOTVhOSwgMHhiNzY5N2UzNCwgMHg1ZmY2MmJmNCwgMHgxMzk5YjdkOCwKKwkweDY4YTEzNWYwLCAweDc5OGI4YzgzLCAweDg3OGU0YmE4LCAweDBmNzU4OTJmLCAweGRmODBiMGU1LCAweGY0MTQzNzQzLAorCTB4MTA3ZDdlNDMsIDB4MDJmZWNmZjUsIDB4OWYyNDM5YzAsIDB4NDU4MDlmODQsIDB4NWM1ZTMwMWMsIDB4Y2E5ZTU3NjYsCisJMHhmY2YzOTdiMywgMHg4YWUwNGYzZSwgMHhhZjYwODFkYSwgMHg4NzNhMDFhOSwgMHhiZGU3MmY5YSwgMHg0NzFiZjc4YywKKwkweDQyNWUwNjI2LCAweGY5YjdjY2JjLCAweGI3YzQyYjA3LCAweDE3ZTQxMWZlLCAweGYwZTFjYTVkLCAweDRiY2FkOGYwLAorCTB4YzVkOTYzMmEsIDB4OTMzZmJmMDIsIDB4M2U1Y2U4MWEsIDB4YTNlZjhiYjQsIDB4ZDU0ZWFjZWUsIDB4OGJmZWY3ZWMsCisJMHhmYjA5NDc5MCwgMHg0ZjVlZTk1YiwgMHhlZTg5MGVlNywgMHgxZDIyM2YxMywgMHg4ZmI2ZmJhMSwgMHg2ODY1ZTk1YywKKwkweDllMDFhN2M3LCAweDIyM2VlZTUwLCAweDVlZjgxNWIxLCAweGFjZTM1NjVlLCAweDllMjEyZjQ1LCAweDc4N2NlMmIzLAorCTB4MzhkZTVmZGUsIDB4ZDE3NzJlNDksIDB4MTViZWI5ZmEsIDB4Y2YwMWI5NWYsIDB4OGRlNzUyODMsIDB4MGU3NDhiMWMsCisJMHgyZDc3OWVlYiwgMHhlM2QwZmY3YywgMHhiOWZhZjFhNSwgMHg5NmQzZGUzOCwgMHg4ZjE3ZDI4NywgMHgxNmYzZjFjMiwKKwkweDM4N2M4NGJkLCAweGExZWU4ZTNhLCAweGRjYWMwMmE3LCAweDhkNWQyODdkLCAweGNiMWE1NDdhLCAweDYwZmE4N2Q4LAorCTB4NThlZjBjZGEsIDB4ZTQzZmI5ZjQsIDB4ZGIyNGUzZTEsIDB4NTBiMzc5ZTQsIDB4ZjNjYjFiY2YsIDB4ZjkyYzdlN2QsCisJMHhhZTExMTIzNywgMHhlZDUyNzFhNSwgMHgxN2NlM2E2YywgMHhlODVlYTNiZiwgMHhjYjgyM2Y0MCwgMHg5NTI5ZWY4NCwKKwkweGVhN2UzODE5LCAweDY5MjY5ZTUwLCAweDNjMGY4YTExLCAweDk5YmRlMDY0LCAweGQxMmRlOWM3LCAweDI1ZTljOTE5LAorCTB4NDU0YTRjNWYsIDB4MWI1MGVlM2IsIDB4YmYyMGQ0MTgsIDB4ZWMzNDBkMGUsIDB4ZjQ4Yjg4Y2MsIDB4NzkyMzYxZjAsCisJMHgyZGY3NjE3ZCwgMHg1ZmY3ZTBjOSwgMHhmYTFiMDY5MiwgMHhhMWQ3YWYwZiwgMHg1MTMyMTNmYSwgMHhmNWMxYmVhZSwKKwkweDdlNWM0ZmYxLCAweGE2NWY1N2YyLCAweDRmYmY4ZWM1LCAweDBhNzhlMDQ4LCAweDYxNjM4YjllLCAweDM4MzhmZjkzLAorCTB4MTNkMjMzZmIsIDB4MmMzY2U3ODMsIDB4ZjAyN2RhNmMsIDB4MWM3MzRkYmQsIDB4N2VkMTU5NzcsIDB4NzI4NDFkZmEsCisJMHgwMWY3NDJkNiwgMHg3MWFjMWJjYSwgMHhjNWM1OTdlNywgMHhmM2EwZDcxZSwgMHgwYjFiMzllMCwgMHgxZTMyMjVmNSwKKwkweDIxZDdmNjg4LCAweGMyZDU3M2E5LCAweDRiMTdiYTI0LCAweDczYzEzYmU3LCAweGM2OTkwYjFhLCAweDYzZWI5ZTBmLAorCTB4MzNjZDc3Y2QsIDB4YWVlOWZhODUsIDB4OWFmNWFjYzcsIDB4MmM3YWE3M2UsIDB4ZTM4M2Q1YTcsIDB4YjRhZGViYjQsCisJMHgyOWNmMDQ4ZiwgMHg2ZmQ4Y2VkNCwgMHg5MGI2YzIzYSwgMHhlZWRjZmMwYSwgMHhlMjFkZTVlNSwgMHg2ZmE4Y2YzYywKKwkweDViM2VkN2Y0LCAweGY4ZGVmNzEzLCAweDU1NmRlOGJiLCAweDJlMDA3ODIwLCAweDIxOWYzNjhmLCAweGYzNTk3NDdmLAorCTB4NDE4YjgyM2UsIDB4ODlmMGRkMGYsIDB4N2MxMzIxNjcsIDB4MjI1YmFhNTIsIDB4NjllZGUwMzYsIDB4N2JiODZlMGYsCisJMHhjOTkwZDgxNCwgMHg4NzFmMDVmYiwgMHg5ZmVkZGQzNiwgMHhiYmY4ZTUwOCwgMHg4ZWJlMjYwZiwgMHg3M2UyZWFjZiwKKwkweGQ5MGYzMzEyLCAweDQyMTcyZTY0LCAweDlkNGY3Nzc1LCAweGZhOGJjYTY4LCAweDliNDNlZDVkLCAweDM0MGE5OGFmLAorCTB4Yjc4YTM1OTUsIDB4MjdjMWU2YmYsIDB4NGU0ZTU5NWUsIDB4ZGYxMTFhOGIsIDB4Y2YzODM5ZGYsIDB4YTIzYmNhNmQsCisJMHg4ZmM4MmVmMiwgMHhhOGY1ZTUzNiwgMHhmMmE4YTRmMiwgMHg0MGZjYThiNCwgMHgxZGNkYmY1ZSwgMHg0MGZiMmMxOSwKKwkweGQ0ZjgzZmRlLCAweDllZmJmODE1LCAweDczMjJmZDZkLCAweDM1OGYwNWYxLCAweGYwMmJiNmYyLCAweGIzY2I3Y2Y3LAorCTB4NTZkM2VmZjgsIDB4YzkzZTRiMzQsIDB4YmEyYjNmMjQsIDB4YjU1YmYzY2UsIDB4MGUxMGEzZjksIDB4MWNhMzJmMmQsCisJMHg3NDkyNmIyOCwgMHgwZDVkZWJkNCwgMHhjNzk0MjNkYiwgMHhiYjUzNWU3NiwgMHg5NjNmNmUwNiwgMHg3NmExMWMzNSwKKwkweGQyM2ZmNmJkLCAweGVmN2M3YzQ2LCAweGRlYTlmN2M4LCAweGQ4OWZjZWY5LCAweDViZWZlYjBjLCAweDc1MWU3NmY1LAorCTB4NGUyYzBhNDQsIDB4N2Y3ZWVlNDgsIDB4ZGJmYjZkYmQsIDB4MGEyZmJmZGQsIDB4ZjlmYmRiZGYsIDB4OGQxYzkwMGYsCisJMHhjNDFlMDdiYSwgMHhmOWJhYjhmOSwgMHhiZGUzODBjNCwgMHg3YmQyY2YyMywgMHhkZDFjN2ZiNCwgMHgwM2FhMTZmYywKKwkweDJjY2U0YmYxLCAweDlmZGRhMDUzLCAweDQzOGY4ZmNiLCAweGI0ZGYwYjdkLCAweDY3ZTM3ZGM1LCAweGRjMTJmODUyLAorCTB4ODE2NTFlOGYsIDB4NWJkYzcwNGIsIDB4YzNlZjg3Y2IsIDB4YWMzODRjOWYsIDB4ZWY4NjNlYjYsIDB4ZjA3ODZmOTUsCisJMHg5ODE0MmJlNSwgMHhlYjc3NjFkZiwgMHhiNzA5ZmMyMCwgMHhmMDZmMDk0ZCwgMHg3ZjJiNzI3YywgMHgxZGZmNDU1MSwKKwkweGEwZjBlN2UxLCAweGM4MzY0MWQ2LCAweGE2YzA5OTNmLCAweGViNzg3ZTUzLCAweDNkN2Y5ODYzLCAweDNmYWYwNGUxLAorCTB4YWM5MDc1YmEsIDB4ZjI3MjA5YTMsIDB4ZGY5MGE5OGEsIDB4ZjdlNmM3YWMsIDB4MzdhZTA0ZGEsIDB4MzY5YmYzMWIsCisJMHg4NDUzZmZkYywgMHhmYmUzMmIwYiwgMHg3NjMzNWUwZCwgMHg1YjlkM2M4MCwgMHg2NmRiNmE3MiwgMHgxZmRjYzc4MCwKKwkweGRiOWM5M2M1LCAweDU1ZGQ3NmRjLCAweDUwODcwNDc5LCAweGE2MTFjNjFlLCAweDdlZDM3ODBhLCAweDIxNWQ3MjQ4LAorCTB4ZWUxZmEyN2QsIDB4ZjFiYTdkODEsIDB4ZTJkYzFlZTksIDB4ZDJlMmZkYTUsIDB4MzdhOGVkY2EsIDB4NDUxZGNlYTQsCisJMHhjN2ExNDVmYiwgMHhkZGM5ZTkyZiwgMHg1MjE5Mzg2OSwgMHgzYWU5MmZhOCwgMHg4ZGIyZWI5NywgMHhlZjUyMjNlMiwKKwkweGY1MWU5MzcyLCAweDAzM2RmOGEwLCAweDBmYTIzYmUwLCAweDM2Y2JjMDk3LCAweDA5NmQ5ZWIxLCAweDgwZjZiZmRjLAorCTB4ZjNmNTFhNjcsIDB4YzQ3ZmU0OWUsIDB4NDJjYTYzMjEsIDB4YzVhN2YyNGUsIDB4ZjM3MmJlOTEsIDB4MjAyYjkwMDYsCisJMHg3OTg5ZDdkNywgMHgwOTdiNWJhZiwgMHg0NjZlMjlmOSwgMHhmYzI4ZjEzZiwgMHg2N2Q3ZWZlZSwgMHhiZmZlYjc1NCwKKwkweGFlZjIwMzJlLCAweGRkNmViYjZlLCAweGYzM2Y3ZjJjLCAweDBkYmFmNmI5LCAweDViOTBkY2JjLCAweDdiNzlkMmViLAorCTB4YWQ0YWJmNjMsIDB4M2VhNGUzZTYsIDB4NWM0NmM5NzgsIDB4MjhjMmJjNDcsIDB4ZWNlMTdiN2UsIDB4ZDE5NzFiMTEsCisJMHhhZDJkN2ZmZSwgMHhmZGZkZjk5ZiwgMHg1YTNmMGVkMCwgMHg3YTg2YzQzYywgMHhjMjlmODFhOSwgMHgxMjU3ZmVlMSwKKwkweDg5MzczZDYwLCAweGYwMzVlZmRmLCAweGI3NGY4YzY0LCAweDkwN2Y1MWUyLCAweDNiNDA3ZjQxLCAweGViNDAzMTM1LAorCTB4MGM2MjdkMDcsIDB4ZmFlMDZlMGYsIDB4MzMxNmQyMDQsIDB4YWQyOTk3YzEsIDB4ZmZmYmYwZTMsIDB4ZmRiNTM4MjAsCisJMHg0ZmY0ZTAyYiwgMHhjOTQ3Nzc5ZiwgMHgwYzM3OTAyMSwgMHg3YTVmMmZmYiwgMHhlZGZmNzJkYywgMHgyM2QxMDEzZiwKKwkweDgwMDA3MDJhLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLAorCTB4NzMzZWYwYjUsIDB4OTk5MmJjY2UsIDB4OTI0YzI2NjQsIDB4ODRlM2M4NDksIDB4NzExMDA4NDAsIDB4ZjA0NDQzMTIsCisJMHg1MTg4ODQzMSwgMHhkNDUwM2I2OSwgMHgyMDcxN2FkOCwgMHg5OTI2MDIzYywgMHg0YjYyZDVhOCwgMHg3OTEyMGNmZiwKKwkweDIyMzQxODA5LCAweDAyODFjMTUwLCAweDA2ZjU1YmM1LCAweDcwMWE4YzQ1LCAweGFmN2E4YTQ0LCAweGI3YWQ4ZWY2LAorCTB4ZmY3ZjZjNTcsIDB4NGE4Zjg4MDgsIDB4ZDJmNWEyMzIsIDB4NWFkN2ZkOTcsIDB4Y2U2NGVmN2IsIDB4YjZiNGE5MjQsCisJMHhkYzNlZjliZCwgMHhkOWNmYjNlZSwgMHhkN2I1ZWQ3YiwgMHhmNmI1YWY2YiwgMHg0Y2Y1YTYxZSwgMHhkOGMwNWMwYSwKKwkweGNlNmEyNTY2LCAweDdjMmM2NGFlLCAweDYxZWRmMTQ4LCAweDY3Y2YwN2YwLCAweGY3ZmIxOTNiLCAweDk1ZDVhMGI0LAorCTB4ZjE5ZmQ4YzksIDB4ZTZjNjBhZWYsIDB4MjcyOWJmN2UsIDB4OGRlZDA2NTgsIDB4NjFjYjE4MjMsIDB4Y2ZiYmY1MmMsCisJMHhkNTAwZGVkNCwgMHg3YTNmNGJiOSwgMHgzZjdjMGY3YywgMHg4Y2E5N2JmNywgMHg0M2VmMDNlOSwgMHhmN2MxOGM4ZiwKKwkweDViNmRiY2VmLCAweGQyODQyZWNmLCAweDc5MzUxOWQyLCAweGY5ODZiY2EwLCAweGVmN2JjMDU2LCAweDI3NDM1ODk4LAorCTB4YmUwZWY3ZjQsIDB4NTU2MzA5N2EsIDB4MzVlNWJiZGYsIDB4ZGJiMTkxMzYsIDB4OTM2MzJhNWQsIDB4ZjhhYjViMTgsCisJMHgyNThhOTg3MywgMHhiYmUwZGIwYiwgMHg2NDRiMmNmMCwgMHg3ZDYzMTE0ZiwgMHgwY2Q4NTMxMSwgMHgyM2I4NzVmZCwKKwkweGI4YzExNzViLCAweGY5OTVkNzFkLCAweDFmNWZkMGMyLCAweGVmODY3ZTYzLCAweGY3YTU0YjJkLCAweDRjM2RkYzNhLAorCTB4NzQ0YmY2YzMsIDB4MGVjMjQwMTcsIDB4MTlmYWExN2UsIDB4NWEzN2UzZDQsIDB4NzgxNGJiMjIsIDB4NzZjMmNlNWUsCisJMHgzZTMyNWY2YywgMHhmM2ZhODYxMiwgMHg3ZjdkMGUzMCwgMHgwZjY0NGE2MywgMHg4ZjgyY2ZiNiwgMHhhMzcxZGVhMCwKKwkweGZlODYxMjM3LCAweDQ3NjIyY2VjLCAweGZhNzYzYTc4LCAweDhjMWMzMjczLCAweDA1YWNhYWU1LCAweDgyMjhlZmUxLAorCTB4MmI1OTk0M2EsIDB4MDcwMWNkZDksIDB4NzEzZmNmZTIsIDB4MGYwMDczOTYsIDB4Njg5OTc3NWYsIDB4M2Q5NWE5M2UsCisJMHhmNDM3ZmY0ZiwgMHg3ZGRiZDZjNywgMHhlMWIwYTA2MywgMHhjZjZmNThhYiwgMHgzYjk5NzgyNiwgMHg2NmY4ODU1OCwKKwkweGI4MDNmYzFhLCAweDg5YzgxZmVhLCAweGNjZTdjM2FjLCAweGIxZWI4NTU3LCAweDQ3OWZlOWRhLCAweDU1MjBmZmYwLAorCTB4YjYxZmY4NDcsIDB4MGFiNjM1YjMsIDB4NjZkNjE1MjgsIDB4MGJmYzAwY2IsIDB4NDNmYjU4NzgsIDB4Mzc2MzBjMDAsCisJMHg5NzgwMDBlMywgMHhkNjcwZDdmZiwgMHgyYmYzYzNhOSwgMHgwN2FkMGE1ZCwgMHg1NTZkZjlmYywgMHhiYzY3Y2Q4YywKKwkweGQ0ZjJmZTdkLCAweDU4ODk5NTc3LCAweDFhNmI1MWFhLCAweGE1NzM1YjNjLCAweGVmNDZjN2JmLCAweGUyOGYzZmIxLAorCTB4MGJmYTBkYTUsIDB4MjViN2YxMzIsIDB4MDliYTQ0ZWUsIDB4ZDg2OTc3ZTIsIDB4YmE5ZGVmZmYsIDB4ZmRmMGViMDMsCisJMHhmODc2NWM0NCwgMHhmYmUwNzRiZSwgMHhmOWEzMTczYSwgMHhmYzM5NTVjZiwgMHg0NzU1MzVhYywgMHhjOGZjNGFmYywKKwkweGQ3YzI0ZWIyLCAweDcxM2Y5MGZlLCAweDcyNGUzOTNjLCAweGZjYmFmN2JmLCAweDAwYmUyMjM3LCAweDBmNzRkMWVmLAorCTB4NzVhNTQ1ZTIsIDB4NjNkNzg2NGQsIDB4NDNiMDZmODksIDB4ZDU1NmRjZmIsIDB4MzNlMDM3N2QsIDB4ZjM0OWNjYjgsCisJMHg5Y2RlZjA5NSwgMHgxNThjYmYxZCwgMHg3NGZmZWUwZiwgMHg4Njk1NzM2YSwgMHhlOWM2NWZmMywgMHgwMmI3MmQ5ZCwKKwkweDYyZjExMmUyLCAweDVkMDNhODE5LCAweDYzZjE2NDJjLCAweGU3ODg2NTI2LCAweDg0NDVmNDVhLCAweGMyNDc1MTdmLAorCTB4MmZkZmY0ZjcsIDB4NDllZjg5YWMsIDB4OTJiYTYxN2UsIDB4MmJhMGJmMDQsIDB4ZGQ3MGQxNWQsIDB4Mzc1ZjBhODIsCisJMHgzNzNlMjU4YiwgMHg2ZTE4MzY1MCwgMHg4MmQ1Y2Y4OSwgMHgyNDVkMjRlZSwgMHhlMjM1N2JlMywgMHg3YzYwZDI3YiwKKwkweGY5M2QyYzdiLCAweDk5NzA2ZmQ4LCAweGRjOTRmMDk1LCAweGZhMTE2MzNmLCAweGYwM2IyMWVlLCAweDE2ZGRkMDBmLAorCTB4ZGQ3YTIxNDUsIDB4NjQ2YTU3NzIsIDB4M2RhN2YyMjUsIDB4MTlmMTE3YmUsIDB4YWQxNTdjM2EsIDB4MTQ5MmVmNzcsCisJMHhkYjJiYzE5ZCwgMHg5NDQxMzAyYywgMHg5YzlkODczMywgMHg0YTdhNGI4ZiwgMHg2MTdhOWY5MCwgMHg5ZjU4N2VjZSwKKwkweDlkZDVkN2RlLCAweGMxMDI0NTYxLCAweGVhZWJmMzU4LCAweGRlZmZhNDJlLCAweGZkZTZhZjY3LCAweDE5ZDU0OGFjLAorCTB4NjE4ODQzZDQsIDB4ZmUxNDM3MTgsIDB4YmMwMzJiNDMsIDB4MmNjNTM0OWUsIDB4ZTAxNzVlMzQsIDB4ZmYwOWMyNTcsCisJMHg0MzVmZTE3YSwgMHhlOGJjODBjNSwgMHhiZjFjMDZjMywgMHg5ODA3Y2I4YiwgMHhlNzFhMTJlMSwgMHgxZDZjMjlkYiwKKwkweDUyNmNkYjhjLCAweDZmNjgyNmZjLCAweGIyM2UzYTVlLCAweDQzNjFjMzkyLCAweDIwMTQ2YTNlLCAweDliNTg5YjM1LAorCTB4ZjdjMDMxNTIsIDB4MjUxM2E2Y2QsIDB4MzZmMTk1YjcsIDB4ODViYmRlMGQsIDB4Zjc4MTc1ZjEsIDB4NWYwMDJhOGUsCisJMHg0YzdkNmRhMywgMHhmYTQ1YmE0NSwgMHhkOGE1ZjY4NywgMHhmZjgwMzQ1ZSwgMHhmOWJmZjVlNiwgMHg3Y2RmYzIxMywKKwkweDhkMTc0OGMwLCAweGIxZTcxOThmLCAweDhhOWU5MTM0LCAweGI1MjRlODA2LCAweGQ1ODllMzkyLCAweDgwMThjOGIwLAorCTB4YTllYTI5ZDcsIDB4OGE4OGIxYjUsIDB4Y2Q1NjVhNzgsIDB4NjZlOTAyNGUsIDB4ODE5OWU5MWUsIDB4ZWNhY2UzZjQsCisJMHgwY2ExZjM2NCwgMHgxMWZjYzA3ZCwgMHhmNzRhN2I4MCwgMHhjMjQ2OTdjZSwgMHg1OGRhZWVmYiwgMHhiNDM3NGUzZSwKKwkweDRlOGJiNmVjLCAweGJlYjAzNDVkLCAweGJhNGJjZTEyLCAweDQxY2NhOTM3LCAweDAwNzdkMWUzLCAweDgzYmY3ZjhhLAorCTB4ZmIzNzFiZGUsIDB4NmVmMmM0ODIsIDB4YTRkMzJlZmEsIDB4ZTBmNmJkMTIsIDB4Y2QxYmU0MjMsIDB4MzhjMGEzOWYsCisJMHgzMjhjOTc5YiwgMHg4MmE2N2FlMSwgMHhiY2I5NDM3YywgMHhhZWVjN2RiMCwgMHg3ZjY3ODQxNSwgMHgwN2I3Y2EwOSwKKwkweDA5Y2U4MGQzLCAweDk0MmFiZTlmLCAweGVhZWVhNTJmLCAweGJmYTBiYjVmLCAweGZmZDVkY2E3LCAweDEzOGUyNThkLAorCTB4NDdmNGUyNzAsIDB4YTY0OGJlOTAsIDB4MjNiZDY0ZTcsIDB4NmUyZWNiZGYsIDB4MGM3MTZmMjksIDB4MTdmMDFlZmYsCisJMHgzNWJlMmRlMSwgMHg0ZDBmY2I5ZCwgMHhmZmEyZmFhMSwgMHg0NzVjZWYzMCwgMHgzNzQ0NjlmMCwgMHgyMjJmNmRiNywKKwkweGRhYzBkYzc5LCAweDU5MWFkZTg5LCAweGJiZjQ4MmM0LCAweDY5YzJjNmM4LCAweGUwOGIxNzQwLCAweDE3Mjg3NGI1LAorCTB4M2QzMmIxNmYsIDB4NDQ5NmZkNjEsIDB4MjE0NmY1OGMsIDB4MzE2MTZlMGYsIDB4N2Q5NmZlZmEsIDB4MmMzNWVkNDksCisJMHgyNmY2ODRlYSwgMHg2MmE2OGIxYiwgMHg2ZjZjNjlkOSwgMHhlZjQxNzE2NiwgMHgzZTI2YjY3ZiwgMHhiZTdjMWQ2NywKKwkweDc3NzU4YjM3LCAweDIwZDQ0NGQ3LCAweDFkYWI3YmNjLCAweGJlMDY1Nzc0LCAweDMzZWI0ZWQwLCAweDVhNGVmOTY1LAorCTB4N2YwYWY0Y2YsIDB4NGZhODNkZDEsIDB4NzZmYjM1NWUsIDB4MjdiZWRkMDEsIDB4ZTdlMjRiZDYsIDB4YmJmNTU3NWUsCisJMHhkNTE0Zjc4OCwgMHhkZjhmZjM0NCwgMHg5Y2ZjMjU2MywgMHhlYjhkYmQwMiwgMHhkZDliOWY3ZiwgMHhkZWNhMWIzYywKKwkweDdhM2JkZDU2LCAweDU1YzlhMjM0LCAweDE4MzlkYjMwLCAweGIzOWVlYmNmLCAweGI4ZGQyMDM3LCAweGI3YzIyNmRkLAorCTB4NjVjYzdlN2MsIDB4ZGRkNTdhYTYsIDB4NTIyYmZmMDIsIDB4MDg4YWJiMjMsIDB4OWU5MTEzZGQsIDB4N2Q0OTQ2YWEsCisJMHg4MmNlMjZjYSwgMHg1NjY2YmJmYSwgMHhlNmY1MDlkNywgMHhlYzQxMWRlYiwgMHgwN2VkMDdhZiwgMHhiOWI4MTdhOCwKKwkweDViNzAyOGRlLCAweDJlYjI3ZTY4LCAweDA2ZTkyYmU3LCAweDUyZmVhMWM2LCAweDg0YTVlMjJlLCAweGM4NWI4YzYzLAorCTB4N2Y4OWI2NDEsIDB4ZTZlZmY0MjcsIDB4NDkzYjI5MjUsIDB4YWZkM2Y2ZmYsIDB4OTZmZDExODksIDB4ZDc4ODJjMDUsCisJMHg3OTVjODRlNywgMHgzNjk1Y2E0ZSwgMHg5YTJiOTcyYiwgMHhhODMyZWU2YiwgMHg5OTQxZjczZiwgMHg5NWUwMWQ2ZiwKKwkweDgzZGU4Mjk1LCAweDRhM2YxYmVmLCAweDVlOWU5MWQxLCAweGVmNWZlOGY5LCAweDlmYjQxOWZkLCAweDViYTJjMGZkLAorCTB4ZDIwMTdkYTEsIDB4NzNkYmFjMTgsIDB4NjA0Nzk3MGEsIDB4OGZkNDMwN2YsIDB4MzhmNmMwOGQsIDB4YjFjMWUzNmUsCisJMHhiNDFjN2Y2NCwgMHhjODQ2ZmIwOCwgMHhlMGI0YzZjZiwgMHg0ZmQwODVkNiwgMHgzZTk5OTNlMywgMHhiY2Y2NjRhMCwKKwkweDVlZThmMjM5LCAweGY3NjQzZjZjLCAweDFiN2U4MWVkLCAweDFiNWUzODUzLCAweGRmNDkxYjlmLCAweDRlMGY2MTNmLAorCTB4NzMzY2MzNzcsIDB4M2M5ZjkxYWQsIDB4MDVlMzcyODEsIDB4Njc3YmQ5MmIsIDB4YzIxMTc0NTksIDB4YWVkM2I2N2YsCisJMHg3MDI3N2JlMCwgMHg0MjUwZTk1ZSwgMHhlYWYzODI5YiwgMHgwNDNkOTI3NiwgMHgxMGIzOWE3YywgMHgzNmI5M2JiZSwKKwkweGUwNGJjZjliLCAweDA5ODZlNGU5LCAweGNkOWIxN2M0LCAweGIzZjBiYzdjLCAweGMyN2ZiZDBhLCAweDAzOTE5ODFjLAorCTB4OTc0ZjEzZjUsIDB4NTM0MDU2ZmIsIDB4YjUxMmMwNWYsIDB4ZWU4NzNkMDAsIDB4YmQ1ZTc2ZTMsIDB4Nzg4MWRmNDksCisJMHgwOTUzODc2MiwgMHhhMTFlYjk1ZSwgMHg2MjY3OGI4ZCwgMHhmMmU5Njg3YiwgMHgxYzdjYTNhZiwgMHhkZTUxY2Y4ZSwKKwkweGQ5YjkwNGIzLCAweGM4MDVlMmNiLCAweDQ2MWFkYjRmLCAweDlmNTE0Njc1LCAweDkxZjM4Zjc0LCAweDU4NWU2NTVhLAorCTB4MTcxYmEwN2MsIDB4OTk5NGY3N2YsIDB4Yzg3ZTM1ZTMsIDB4YmU3Y2Y0NGMsIDB4YjU3Y2UzZmQsIDB4NzA3ZmFlMmEsCisJMHg2NWM4MTA5YywgMHhlNDhmZjkyNiwgMHgxZDVkNDI3MiwgMHhmZWM4Y2VhYSwgMHgyZDk3M2QwYywgMHhmYjYzM2FlYywKKwkweDFkZTBjZWViLCAweGU2YmZhMDZlLCAweDlkZTdmZmZiLCAweDM4ZGY4NDY1LCAweDllZDY0NWM5LCAweGNhNzk3YzQ5LAorCTB4NzQ4YjlmZWMsIDB4NWE4OWFlZWIsIDB4ZjNlODI3ZTYsIDB4ZWFhZjgyMGQsIDB4NjNmZWMyYWQsIDB4MWYyMjRiNTEsCisJMHg2YWFhZjZjYSwgMHg3MmNiZGQyMywgMHg2NzdmYTBiZCwgMHhjMWY3Y2I4YywgMHgxZmMxMjZlZCwgMHgxZWEyYjRkZiwKKwkweDY2NDFjMjliLCAweDFjNDdhODg1LCAweGZkNGViZmQ4LCAweDZhMjBmOTRmLCAweGUxN2E4N2E5LCAweDkxNjVhOGYyLAorCTB4MDA0ZjkxMjgsIDB4Y2MxYjUxZGYsIDB4Mjc1NmQ0ZmIsIDB4MDM0MDZmZTcsIDB4MzI2OGIzZjYsIDB4NDhiOTdkMjMsCisJMHgwMmI1ZmIwNSwgMHgzZDVkZWI5ZiwgMHg5ZmE3MmViMCwgMHhmYWZhNzM3NiwgMHhmMDA1NjAyMywgMHhmNzg5OGYzZCwKKwkweDgyZWY2MGFjLCAweDRkYTY3YjFjLCAweDYwN2VlMjg5LCAweDJlZWIxNmRlLCAweGI1ZjIxMTdiLCAweDdhZTI3NTVmLAorCTB4OGU0ODU3NmUsIDB4NTY5YjZiY2QsIDB4NGJlYTE1YjIsIDB4ZWI0MDVjMGYsIDB4ZDM5OTM2OWYsIDB4OWI4OGQyZTUsCisJMHgyMTE0ZTJmNCwgMHgxMWFkZWIxZiwgMHgzZmRmZDkwYiwgMHgwMWYyMTg1MSwgMHg3NDc2NGZmNCwgMHg1Mzk0N2MyMywKKwkweDI4MGYxODMxLCAweDEwZjQwZGQ3LCAweDVkODNhODQ5LCAweGNiOTNhNTM0LCAweDljZjIwNjU1LCAweDUyNGJkODI1LAorCTB4NjcxY2EzZGUsIDB4OTE5ZmY2NDksIDB4MWY1MmMyM2UsIDB4ZjRjN2I5NzEsIDB4NTI3Yjk0NmMsIDB4MGFlYmRmMmUsCisJMHhhZTQ5Yjk3NCwgMHhmNWM2Y2U4ZCwgMHg3MmU0ZjU4NSwgMHg3ODQyYmY3MywgMHhhNDJkNjI2ZCwgMHhlODFlYTQ0ZiwKKwkweDkxZTg1NzFmLCAweGViOTg2YWQzLCAweDJhMjZlYjJiLCAweGQxMTc3NzVmLCAweDI3NTk0Yjc4LCAweDU3YTkxM2U5LAorCTB4ZDc4M2EzODYsIDB4N2UwZTg0YmYsIDB4ZWQwMDc0ODYsIDB4ZThiMDFmOGQsIDB4ZTM1ZTMwNjUsIDB4OWE2ZDE2NzIsCisJMHg0NGU3NGJjOCwgMHg0ZjVjOGZkMiwgMHhjNDllYjhkYSwgMHhmNDNjZTUzMiwgMHg0YzdlYjI2NSwgMHg3YWM5ODdkNiwKKwkweGY1YzJkYjMwLCAweDY5Njc1YzlkLCAweGU3NGY2NGNmLCAweGU1OTRjMDc2LCAweGZjYzE5NTExLCAweDNmZjlhNjM2LAorCTB4NjAzNDljY2UsIDB4YjJkZTg0ZDcsIDB4YjEwYmY0ZDksIDB4ZTBhMzYwMWUsIDB4ZDM2OWM1YmQsIDB4ZjY4NmNhNmUsCisJMHhjOGZjYzY5MCwgMHg5NzgwYTk1NywgMHhiYjdjZjA5ZCwgMHhiMzZiN2JiMCwgMHgyZDdiZGQzOSwgMHg1YWNkN2U5YywKKwkweDcwM2I5NTgwLCAweGNmYjQ2MjVkLCAweDE3MzI2NzhkLCAweGU3YzRhM2QyLCAweDU3N2MyNzc2LCAweGZkNzFkZjgxLAorCTB4OGRiZGZmZDQsIDB4N2MyNGE1YjUsIDB4OWQ5Y2ZkNWYsIDB4Y2ZlN2VhZTQsIDB4YjI1NjIzM2EsIDB4NmU4NTgyNDcsCisJMHg1N2ViMmZlOCwgMHg3YjUzYjI1NiwgMHgzZTkyNzM5ZiwgMHhkMGZhMTVlZCwgMHhkMTI4ZjY4MywgMHg1ZmFlMmFjYiwKKwkweDIxMjc1ZDcxLCAweDY0OGY1NTM1LCAweDM1Y2FmYjQ4LCAweDRhMDQ1MTIzLCAweGNkYzlhY2ZiLCAweGY2YzFhY2VkLAorCTB4OGEyZjY4OTAsIDB4Y2FlOWNmNWQsIDB4Y2ZjY2ZiNGEsIDB4NjI3NzNkZGQsIDB4Njg2MWUwMWQsIDB4NTg4ZmZmOWYsCisJMHhlOTgxZDBlNywgMHhlNzg3ZGZlNSwgMHhjN2MzODBhMSwgMHg0NzJjMWZiMSwgMHhkZmFhYjU3YSwgMHhmNDA2ZGViOSwKKwkweDFlNWQ0MzM1LCAweGQxZTYwYmJmLCAweGExNzBlZjk0LCAweGZjMjlhYjllLCAweDg0NmYyZmY1LCAweGNjMDc4N2ZhLAorCTB4YmNlYjhhY2MsIDB4MWIxZDdhNjcsIDB4NWRmY2JjMzUsIDB4ZTg5ZjMxMTIsIDB4NWI5N2UwNDksIDB4NGRlYjE5ZjYsCisJMHhhODdhYzY5ZCwgMHhjODJmNThjYiwgMHg0ZjRlN2E3MCwgMHhmYmUxZDkyMCwgMHhkNWI1ZDAzMywgMHg0ZWMxZjJkYSwKKwkweGJjZmFkNzgwLCAweGE3ZDFmNDk1LCAweDA2NzE2MGVlLCAweGZjNTM1YmNhLCAweDVhZDllMjE4LCAweGY0NDRmMWY4LAorCTB4M2ZiYTg0NmYsIDB4MDJiNGIwNTEsIDB4MzhjYWM0ZWQsIDB4M2ZhZjkxZmUsIDB4NzQyYmNmYjcsIDB4MDFiNzgxMGQsCisJMHg4OTliMzFmYywgMHgzYWQ2MGNmMCwgMHg4NWNlNDkyZiwgMHgyYzc4OWYwNCwgMHg4NDVmMGZmZSwgMHg5ZDlhMmZmOSwKKwkweDllOWJiYWUyLCAweGFhNGU2N2Y4LCAweDYwOTI3YjQyLCAweDU3MmRhMTY0LCAweDJkZmI4ODdmLCAweGFlMDk2Zjc4LAorCTB4ZjA1OWU5ZmYsIDB4YjBkNWMwMWUsIDB4NDZjM2ViODUsIDB4YmU0MzRiMTYsIDB4ZDNiYjA2NmQsIDB4NDc3YzRiMDYsCisJMHg1Yjg3NWYwNiwgMHg1MTU1ZTJkYSwgMHg4YzhlZGZmOCwgMHhhNzA4NzFkYSwgMHg4MDJkMjdmNiwgMHhmYjFhYjFmNCwKKwkweGFmOTNiMDRkLCAweGUwN2FlMGNkLCAweGQ3NzY3ZDk2LCAweGRkMWUwMzI5LCAweDJiYTg3YTg2LCAweDkxMmE3NWM3LAorCTB4NjFmYzg0ZmYsIDB4Yjg5NjhhNzksIDB4MDk1NzdhMWYsIDB4NmJmODhiNWUsIDB4YTY1OGY1YjIsIDB4ZmM1N2Y4YzEsCisJMHhmNzkyMzNlOSwgMHhhN2NkOTc4YiwgMHg1ZDgwYzQ3ZCwgMHhiNGY5MjU2ZCwgMHgzZDIwYWVmOCwgMHhkZjJiNjk3ZiwKKwkweDZhZGU5ZTE3LCAweGE3ZWYxMWQ3LCAweGUzZmRmM2I3LCAweGM0NDczY2UyLCAweDg1N2JmZjA2LCAweDhiZGJkYjliLAorCTB4MTk0NTNiZTEsIDB4YmM2NGM3OGMsIDB4NTVmMGZmYmQsIDB4ZjdhM2E0NWUsIDB4ZGMyZjFmMTksIDB4Zjc4ZmVkYzksCisJMHg2MmFmODA1ZCwgMHhmN2Y2MGVmZSwgMHhlZmQ4MTc3ZSwgMHhhYWY5ZTIwYSwgMHgyZTJlNTEwZiwgMHhkMGZhYWVkZSwKKwkweDljODc2MDRlLCAweGJjNTk4ZmU0LCAweDBiNzFjYWZkLCAweGE3ZGZkODFkLCAweDVmYTFhNjIzLCAweGU4OTVjNzY4LAorCTB4MDJmN2MyODksIDB4ODlkN2VlMTEsIDB4YjVjZjAxNWQsIDB4MWQ5MzE3MWQsIDB4OTViYjc0NzcsIDB4ZWRiNmU5YzMsCisJMHhmMTVjNzljNSwgMHg0YWY4OTUyNywgMHhkYTIwYjEzMywgMHhmZjE2MWRjNywgMHhmZDY3ZTQzOCwgMHg3MDMzM2RlMSwKKwkweDk1OWZkZTVkLCAweDFmZjdhMjZiLCAweGYxMGI5ODU3LCAweDg1OTY1ZWUxLCAweDVhMmIxN2NmLCAweDYxYjdmOTAwLAorCTB4ODk5OTkyY2IsIDB4ODY2YTRlZjYsIDB4YWQzNWViNGEsIDB4OGY1Njc5NzAsIDB4N2FlOWY4ODMsIDB4ZGI0ZGEzZDQsCisJMHhmYzcwN2Y4MSwgMHhmMmZmNmZkOSwgMHgzZjIyNGY0NiwgMHg0Y2M1NWVkZCwgMHhjM2NiZjYwOSwgMHhjMjdhMjM1ZiwKKwkweDZiZTAyOGJmLCAweDU3ZDdjMGIxLCAweGFhNmIyYmU1LCAweDEyOTY4YmU0LCAweGVmOGJhMzk0LCAweDBkNzEyOTZlLAorCTB4ZjNmNDU3NjEsIDB4MGY5Y2MzYzUsIDB4Yjg1MGNiZWYsIDB4YzMyZjIwZmYsIDB4NmUxOGNmYjAsIDB4MzUyOGU2NWYsCisJMHhmOWIxNWU5MSwgMHg5NDBmN2Y5OCwgMHhjNjJkYjBkOSwgMHgwYzgxZjdmZCwgMHg2NDBmZGE4ZCwgMHhmYjVmN2I3MCwKKwkweDVlZmI2ZGRkLCAweGNkNGQ3OTg3LCAweDgwY2Y2ZTA4LCAweDk3ZjMyMTdhLCAweDcxZWJiYWUzLCAweGIxOTgzNTU3LAorCTB4YmJiMjYyODgsIDB4NmU1NmMzZDgsIDB4OGVkYzZhYzcsIDB4ZjZjOTljZGUsIDB4OGZkODRiYWUsIDB4OTk3ZjYyNzcsCisJMHg2MmY2MTcyNCwgMHhmZmM3YmQzZiwgMHhkYWYxMGM3OCwgMHg0NGYxZjA1YywgMHhlNzQyMGZiNCwgMHgxZmEwYjMzZSwKKwkweDkwYWRkMWNkLCAweDAyZjg3NzNjLCAweGQ0MjVlOTBjLCAweDI4MmQ4YjNkLCAweDIxYzM5MDFiLCAweGM5MTNkNzFmLAorCTB4MDY1M2ZhZjMsIDB4M2M4NGVmZGYsIDB4ZmRlN2VhNzEsIDB4M2I3ZjljMTEsIDB4YjczZTljZGMsIDB4M2YyMTRiMmQsCisJMHhjNDRmMzZlNCwgMHhiNWZmNDA4ZSwgMHhhNWVkMmE3YywgMHg2N2VmYzIyNSwgMHg1Zjk0ZmRkYiwgMHgyODhlZmE0NSwKKwkweGQ3NTgzMWFlLCAweDM1ZjQ3ZjM5LCAweDMwYTg4ZGNjLCAweDhiYmI4N2NlLCAweDc3ZDlkZmM5LCAweDg1NGY5YTYwLAorCTB4MWZlZWM3MzYsIDB4Nzg4NTE5YWQsIDB4ZjBmYjMyZWEsIDB4MjdhZjg3N2QsIDB4ZTFmN2U3MGQsIDB4Mzg2OTkzZWUsCisJMHgyYWRkODZiZiwgMHhmMjIxYmJjZCwgMHhiMmMyZDY0OSwgMHgzM2YwYjkwMSwgMHhjYTNhZjgyNSwgMHgxYzUyZTYwMSwKKwkweDBmOTRiZTM4LCAweDM0ZmVlZTFmLCAweGZiODM4MTZiLCAweDU2N2Y0ODBiLCAweGE3OTc4ZDBlLCAweDhlN2VkM2RjLAorCTB4Mzk3MTVmZGYsIDB4MWU4Zjk3NWYsIDB4ZWU1MDQ2YjcsIDB4ZmQwNzY0N2QsIDB4M2Y2ZjIwOTYsIDB4Nzc3ZDcyNzIsCisJMHhlZmVlNDMyYSwgMHhkZjUwMGIzYSwgMHgyYTZmZDdmNCwgMHhmODljYTEzNSwgMHhkZmNmOGI4ZSwgMHg0MDJjZTk2MywKKwkweDYyOGRmYzdlLCAweDFhZTk2N2VjLCAweDZjODA4YjEzLCAweDUwMDZiMjVmLCAweGEzZThmMjAzLCAweDQwMjk5ZjQ3LAorCTB4OWVlMWZmNzksIDB4MjdlNjBhNjcsIDB4OWRmYzk3YzAsIDB4NzhlNTdiMmMsIDB4ZmQyNjZmYzIsIDB4MzQ0YjFlYTgsCisJMHhlZjliYzcwZiwgMHhlNTdmNzJiMywgMHhmOTU0N2UzMCwgMHhmZGMyZGIzZSwgMHhhYjNlN2RhMSwgMHhiZjI4NzQ4ZSwKKwkweGYxNDg2YmViLCAweGM3ZGI3ZGEzLCAweGU2ZmYyNDZjLCAweGFjYmYwYjc3LCAweDgzZGEzZmRmLCAweDdkZjkxOGZiLAorCTB4MWUxNWZmNTIsIDB4OTc0YTRmNGUsIDB4ZDQ4M2ZlNDIsIDB4ZTNjOTM4YjIsIDB4N2JkZTU5YmYsIDB4ZTQxMzNkNjAsCisJMHhiZmYzYWMzZCwgMHhkOTM0NWYyMSwgMHgzMjQ2YzdlMiwgMHhlMjBiMGZhMiwgMHhkMGVjZDJjZCwgMHhhZDY1M2Y1MCwKKwkweGJmMTVmNGU0LCAweDJhZmI0NGMzLCAweDgxZDdhZTRiLCAweDkyOGFlY2YyLCAweDMwMTMzNjk0LCAweDZkMjUyN2EyLAorCTB4ZjIwMWM2MjIsIDB4ZmRlOTRiNzMsIDB4ZmJhNzM1NzAsIDB4N2YyMzE2NzAsIDB4NTE2YjBlNWIsIDB4YjhiYjVlNDgsCisJMHgzMjZmM2VkZiwgMHhlYTgzYWQ3MywgMHg5ZWRjMTFhYywgMHgxNmRmMzJmMSwgMHg1ZGQ2OThiNSwgMHhjNDkwZmY0MSwKKwkweDQ4MGJkNDg3LCAweDNmMWYyODNmLCAweDNmNDQ2YzUyLCAweDc2NDJiNzRhLCAweDljZWE2YWE3LCAweDQ3MGVmZDhiLAorCTB4Yzg0NzEzNGYsIDB4YTdhNzNmZmQsIDB4ODkzZmZhZmUsIDB4MTg4ZjI2OWUsIDB4M2E4MjllOGUsIDB4MzZkNzkzZDEsCisJMHgzZjA5M2QzNCwgMHhjZmJmNzlmMSwgMHhiZmRjMDFjMiwgMHhkZDdjMGI2NiwgMHhmYzRlZTQyNywgMHg5YmY0OWIwZSwKKwkweDk5ZGYzODJiLCAweDM2OTliZmEyLCAweGZkNDU1NDQ3LCAweDljN2YzM2UxLCAweDE4N2RmZmU4LCAweDI3ZGM1ZmVjLAorCTB4MGVmZGEwZTUsIDB4ZjM5NWM4ZTUsIDB4MTYzNzVhNzQsIDB4NDE3ZjQxZWIsIDB4ZDIzNmM1ZWEsIDB4NjI5YWY3OGYsCisJMHg2NGFmNjg0NSwgMHg4ZmQ5NmY4ZiwgMHhiNzNkOTE3NCwgMHhlZDI1NjJhYywgMHhhOGRjZjJmZiwgMHg5MmI3NTAwZiwKKwkweDc1NTk3NDFmLCAweDA0ODhkNGUwLCAweGRmMTBlMTdiLCAweGU1ZGYzNGNmLCAweGJiZDNlN2E3LCAweDFhMTA3ZGI5LAorCTB4Mzg3YjIxNmQsIDB4NzE4NGE1ZDQsIDB4OTYwMzliOWQsIDB4NmI0MWRhMDgsIDB4MDk1ZmVlMTUsIDB4M2NlYmIwNmYsCisJMHhhMGFmYTNlZSwgMHg3NDBmY2ZiOCwgMHg0ODhhMTcxZSwgMHg4ZWNmNmZmZiwgMHgzNWJkMjNlZiwgMHg5MWVmYzgzOCwKKwkweGY4M2EzZjFjLCAweDFmYzdjYTg1LCAweDhlZmM2OGMzLCAweGVhYWYxZTcyLCAweGZlZTc1YWI4LCAweDFkN2ViMTE1LAorCTB4NmUzOWZjYjMsIDB4MThkNjA3YjQsIDB4ODVjNjU5ZjksIDB4MTg4MDljZmEsIDB4N2FmZTZmMTgsIDB4YWU0M2FkM2IsCisJMHhkMmNjZjFjYSwgMHgwY2ZmNWM2ZCwgMHg2N2U0MGI5NiwgMHgxNjJjOWFjZSwgMHhmYTZmYzQ0NiwgMHgwNTI0MWNmOSwKKwkweGJiNDU3M2Q2LCAweGNiMzkzNzhjLCAweDc5Njg0NTAyLCAweGI3ZTliYmJmLCAweGJkMDBhNGFmLCAweDhlOWZhMTY2LAorCTB4NjhjMmNhNmYsIDB4OTg3ZjkzZjcsIDB4ZmM3ZGM5ZDcsIDB4YzkwMDA5YTAsIDB4NWNmZmQ2YzUsIDB4NDI2OTczNTcsCisJMHhmMDNmYmM1ZCwgMHg2YjZiZGNmZCwgMHhmNmVmNDhmMiwgMHhhMGQ4MjNiNywgMHg2ZmRkNjU4ZiwgMHgzNTFlMzFkNywKKwkweGJkODFhZWQwLCAweGY4NTJlYjZiLCAweGI1Yzc2MWY3LCAweDNjMDY4ZTU3LCAweGZmZmM3MjI4LCAweDdmNDdlYjVjLAorCTB4YzYxOTlkYTEsIDB4NGI0Zjg0NGIsIDB4ZmQwY2RmZWEsIDB4N2VmOTc0M2IsIDB4Nzg0YWY2YmMsIDB4NTkwYWMxZTEsCisJMHgxZmFkNjZiZiwgMHg2Y2NmYmJlMCwgMHgyYTUwOGZlYywgMHgxYzhhYzdiZSwgMHg2ZGFjZDZlZiwgMHgwZGU3ZDZlYiwKKwkweDI3NjAwNWQ4LCAweDM5OTExYWVjLCAweDdlYWMxZjYwLCAweDg1ZmI2NjdiLCAweGViYWE1NjMwLCAweDVkZWEwYjUzLAorCTB4MWU0M2U3YTksIDB4NjQ4ZmVjODUsIDB4ZTQyMDNkN2UsIDB4NTcyY2RmYzMsIDB4ZjQ3NjQxZjUsIDB4NTcyNDExODEsCisJMHg0YjIwNjY3YiwgMHhlNDgzZmVjMiwgMHg4MDc5Njg3NiwgMHhmNjA3M2RhMSwgMHhkYmMyMTc0OCwgMHhkM2UzZmM3YiwKKwkweGVmN2I0MjJmLCAweDFiMWZkZmVjLCAweGI3N2JlM2E5LCAweDM3YmI0NWNlLCAweGJhMjM0ZTc0LCAweDIzNTNlZDBkLAorCTB4NGRhZGQwMGEsIDB4NzFlODBiZjAsIDB4N2E0ODBiOGEsIDB4NzQxMmVhNWEsIDB4OGMzMzBlZWEsIDB4NTIxYzc0NzMsCisJMHhiZTg5ODUyNiwgMHg4M2FlMGE1YSwgMHhmOGY3Y2NiNSwgMHhlNDM4NDI1ZiwgMHhkZTc5MzJiZSwgMHhmN2MxMWViZiwKKwkweGVhZDJhMTBmLCAweGZmZDgyNWFkLCAweDlkYTE4NTZlLCAweDQ0ZjRhZWIwLCAweDM3ZGEwMmQ2LCAweDMwYjU5YmJkLAorCTB4NWQyNWJiZTEsIDB4OTczZTEyMGYsIDB4ODkwZjMzZWMsIDB4ZTA4ZjVmYzcsIDB4NjdlNmRlNzEsIDB4ZGNhM2Y2OWYsCisJMHg5MGEyMjhmOCwgMHgyMmQwNjg0YywgMHhiZDQwYTc2YiwgMHg5Njg0YzFhMSwgMHhjYzhjYWIyMCwgMHgxY2UyOTFiYiwKKwkweDA2MzYxNjc1LCAweGVkMDQ3N2U2LCAweGRmNjM4NDI2LCAweDcwNTNjMzM3LCAweDgxNGZmMGRlLCAweDhiMDJkYjQ3LAorCTB4YWI2ZTlmNDgsIDB4NGUyODM5YjMsIDB4NTZmZjNhNTQsIDB4YzUyYjgzYzIsIDB4NTc1ODc4OGYsIDB4ZTM4MzlkNWEsCisJMHhlMTlhY2YzNCwgMHhkODA4ZjhhMiwgMHg3Y2RlZDg3MSwgMHgyZmM4YjdkNywgMHhkNzVhZTEyNCwgMHgzYjQ1YWU2NSwKKwkweGI5ZWMwYWE3LCAweGZjZWUwMGE3LCAweDdkNmE2YjhjLCAweGQ1MjNjN2MwLCAweDNiYjdlNWZkLCAweGI0M2U1ZTMwLAorCTB4MjY2ZWZmMWMsIDB4MjUzNjhiYTcsIDB4MjU0NmZlMTAsIDB4YTI1OTQxZjksIDB4OGJiMGIzNWYsIDB4OGQ5ZjhkZGIsCisJMHgyYmUyMThiMCwgMHhmNmUwOGQ5ZiwgMHhkOGUxYTVlYywgMHhjMzlmMjQ3NCwgMHhkYTJhNGY1YSwgMHhmZmU2MjFkMywKKwkweDJjY2ZmNzA0LCAweGQwZjdkMGUwLCAweGU0Nzk3MTNhLCAweDNmYzlkNTY5LCAweGRjZjRmMzY2LCAweDVmYjYyMTdiLAorCTB4ODVmZWQxYWEsIDB4ZTAwZjNkNjksIDB4M2Q2YmJkYjgsIDB4ZjA0Yzc1YmUsIDB4MmFlZmQ2MDEsIDB4YmQ0ZjdkYTMsCisJMHgzMjc4YTgyNywgMHg3ZDcwYmNmOSwgMHhhYWJkOWY3YiwgMHhkMjg4ZmQxYywgMHhhOGZiNWFlZSwgMHg1YWU2ZjQ5ZCwKKwkweDJkN2Y3ZWE3LCAweDY5ZGZkM2NhLCAweDE2YzAxZjNjLCAweDdlODc0ZDhmLCAweDgzM2VmZTk2LCAweDhmNmI1ZGM2LAorCTB4MGZmNWM1YWMsIDB4YmRhOTU0ZWYsIDB4NjA3NDExZDgsIDB4YjliZTRiYmYsIDB4MmJkMjIyNjUsIDB4NTA0YTQ0NzMsCisJMHhlZDNkOWE4ZiwgMHhiNjE4ZTkwYywgMHhiMTJmZTQyYiwgMHhlMzBjMDI3OSwgMHhmM2MzZDNjNCwgMHg0NWY1MDUzNCwKKwkweDFkMzMzZDkyLCAweDVmYjQ1NWZkLCAweGI2YmY5MGYxLCAweDE4YzdmMDVhLCAweDM2ZDM4MmEwLCAweDNmYjY4NTYyLAorCTB4NmZiMDE4OGYsIDB4MWNlM2Y5NWUsIDB4YmI0YTFmMGQsIDB4ZmVlMzY0YzcsIDB4MTRiYTlhZjMsIDB4NWIyZGY2ODYsCisJMHg0MjY2M2YxNSwgMHhjNjI3YmQ3ZiwgMHhlYTZlMGVkMCwgMHhhNjljNjg1NCwgMHhiODJkMjdkMiwgMHg5M2E1Yjk2ZiwKKwkweGVjNDg3N2YzLCAweDA1N2YwMDMzLCAweGYxOGM1NzY4LCAweGEwN2IwYWE0LCAweDU4MzlmYjhkLCAweGM0NDhkOGVjLAorCTB4M2Q3YzYzZjMsIDB4MTJmNzgzMTksIDB4YWQ4Y2FiZmMsIDB4ZjQ0MGYyZTAsIDB4ODY3MTExNjcsIDB4MDI1N2UxMjYsCisJMHgzZWVkNDg0ZCwgMHhlZjViYjQ4ZiwgMHhmM2I3ZmQxNiwgMHg1OWJiOGM1MiwgMHhjNDU1Zjk4OSwgMHhmMDYyYjk2YiwKKwkweDJhZjJjYjg3LCAweDkxZmE3ZGYxLCAweGRmZTQwY2Y4LCAweGZhMTdkMDM4LCAweGIzMmFiNjk3LCAweGNjMjlmZDZlLAorCTB4ZjFhNGViNmYsIDB4YmNjMTM0M2UsIDB4MDU2YTRlNDAsIDB4MDQ1MjA3M2UsIDB4N2Q3NjU3YmMsIDB4ODZlOTAzMzIsCisJMHhkN2UyMzJkNSwgMHg2YTY5YWVlNiwgMHg2ZmM3ODM5MywgMHg0ZWM4NWVkMCwgMHhlZDg5ZDk2ZCwgMHg5Mjk3MzdkOSwKKwkweGM4ZjhjNjdlLCAweDM1ZmU3ODZjLCAweDFjYjNlNzBmLCAweDc5ZDdmNzA3LCAweDYxMTcwZWVmLCAweDQ4ZmQzM2JjLAorCTB4ZTI5ZmQ2ZTAsIDB4OTBhNDE3ZjgsIDB4ZDYxYjM1YmYsIDB4ZTU0MTk5YzYsIDB4Nzk2ZmY0MWEsIDB4YTg4YmY5NTksCisJMHhmNTMzYmQ3ZiwgMHhjNjQ3ODQwYSwgMHgzODJlMzBmNSwgMHgzOGU0OGNhYiwgMHg4YTdjMzNkNSwgMHgzNzk0MTc3ZiwKKwkweDBlMzRkYzc4LCAweDExNmFlZmVjLCAweDcxMWU3YzVlLCAweGQxMTljNDBjLCAweDYyZTM4NzZmLCAweGRlY2IwZjFjLAorCTB4N2U0NmE4OWMsIDB4N2JlN2QwN2UsIDB4YWNiYjRlOTAsIDB4Y2NkN2M0MmUsIDB4NDJkZjk3YWUsIDB4YzZkMzNiN2QsCisJMHg5YWVlMjkzYSwgMHhkM2M0Yjc2NCwgMHgzYTQ0MTliZSwgMHg3YTczM2JlZCwgMHhkNzA4M2RjNywgMHg5NDdkMDc3NSwKKwkweDhmNjQ5MmNmLCAweGI3Mzk3MTVjLCAweDkzZGEzZmNiLCAweGVjM2YyM2FhLCAweGVjMWI3MjEyLCAweDc5N2YxZTQ3LAorCTB4OTMyM2VmOWMsIDB4ZjZlZmM4ZWQsIDB4MjNiNzJmYWYsIDB4Nzc3ZmViZmIsIDB4MTdjMzkyM2IsIDB4MjhmM2MzZGUsCisJMHg4OTBmN2NhNCwgMHhjMzVmNWY3ZCwgMHg1ZmQ0MzRkOSwgMHhhZWQyM2QyYiwgMHhkOGY3Y2E0ZCwgMHhiYTNkZjIyZCwKKwkweGQwZjdjZTg3LCAweDBmZjhmMjc2LCAweGVlNDk0MTg2LCAweGFlMjIyZGJhLCAweDQzY2VmN2U1LCAweDg0YmI4N2ZmLAorCTB4N2IyYmMwZTQsIDB4Mzc0OGMzNTMsIDB4NjRlZDNiNjcsIDB4NGI2ZTY5OTcsIDB4N2I2YWUxMTQsIDB4M2NjMTFhZGEsCisJMHhlMDQ1MzY4OCwgMHg1Nzg4OTBlYiwgMHgyYzFjNDQ1OSwgMHg4MzQ3NDRhMywgMHg0MDI1YTBlMiwgMHhhNGZjM2Y3MiwKKwkweGQyYWJjNzk5LCAweDg1ZWU4ZjIyLCAweDFjZTFlMzdhLCAweGQ0NjJjZjExLCAweDU0ZDlmODdmLCAweDhhNjM3N2MyLAorCTB4MzdmZDhlOWUsIDB4ODYwOGZiZmUsIDB4MTgzZWFhNzEsIDB4MDlmOWQ3MGYsIDB4ODdiYjcwN2IsIDB4N2ZiYzVhZTIsCisJMHhlNzU1ODJmNiwgMHg4OTY4YjNmMSwgMHgzM2IwZjAxYiwgMHg5M2JmZWRjMiwgMHgwNWE4YTZhNSwgMHg4OTkzYmRlNiwKKwkweDMyZjU5ZjNjLCAweGQ5ZTdjNWFlLCAweDhmMjQ2MWI3LCAweDgyMzFhMGNiLCAweGRjYjViMmZiLCAweGUzMmY1NDVmLAorCTB4MWZiOTg3NTUsIDB4YTVjNDVlYWUsIDB4ZjQ1ZWNlNGUsIDB4YjQ1OGE2MDgsIDB4YjhiNTJkMjksIDB4ZGQ3Y2ZiNGYsCisJMHhkZjlmZjIzNCwgMHgyYTJjZmY3OSwgMHhmZDE4ZDdlYiwgMHgzZmQwOGJmZCwgMHgzZjEwM2M1ZiwgMHhmOWY3N2U5NiwKKwkweGY2ZTE2N2NjLCAweGQwZmY4MGYzLCAweGJlOGNmNjA0LCAweGZkNDZhYjQ2LCAweDc3NWNjNDU5LCAweGMzZDAzZWEzLAorCTB4NDMxNzdhYjAsIDB4MWEyNTA2ZDksIDB4MTk2MDBhZjEsIDB4N2FkNmQzZGUsIDB4NTdiZDcwNTIsIDB4NmY0ODk5YjcsCisJMHg3ZTRjZGI4NSwgMHhjYmQyNGY3YywgMHg2N2FlMWVhYiwgMHhiZDcwZjVkZiwgMHhlMDhlYTgwMywgMHgzMzZjYjIzOCwKKwkweGU4ODM3ODhiLCAweDQ1MzMwNTZmLCAweGJjMjkzNGIxLCAweDZhZDJlZDVjLCAweGIyZGZkMjg3LCAweDhiNzMzNmJmLAorCTB4Y2RkYTFhNmQsIDB4NzdmMjI2ZjksIDB4ZDdmMTZlN2YsIDB4YTMzOGJmOTEsIDB4Y2RhOWQ2ODQsIDB4OTZhNmIyZDksCisJMHg3ZDJmMTNiNywgMHhhODA3OGY2ZSwgMHgxYjhkMzJmZCwgMHg0MGNmNGM5NiwgMHg4NzgyZmE3OSwgMHhmMTkyMTdjNywKKwkweDU4ZGRiMGI2LCAweDJjYzM4ZTRmLCAweGY1ZWIxODg5LCAweGE3MzYzODJjLCAweDEyMGRjNzk4LCAweGY0MjBiZjlmLAorCTB4OGFlYmU3YzQsIDB4MTY3ZGJlMDQsIDB4ZmU3MmJiOTQsIDB4ZGUzOGYyMmIsIDB4MWNiY2Y5NGMsIDB4ODc1ZDVmOTUsCisJMHhlMzBhMzA3NCwgMHg3MjU4NDVjYSwgMHg4NGNjMmFiZiwgMHg5OTc1MWZlMCwgMHg0OGZhMjE0NywgMHhjZGNkYjc4MiwKKwkweDk2YmMyOWU5LCAweDVhZmYyMWZiLCAweGZlZTE5M2Y4LCAweGY4MjU5M2QwLCAweGI4YzVlZmQ4LCAweDQyY2JiZDY1LAorCTB4ZjVmM2U4NzEsIDB4MWE2NGE0OTcsIDB4ZjVmZGI3ZjcsIDB4OTZmZWZmYmYsIDB4YWFkN2U3ZWYsIDB4NDVjNmJmMjIsCisJMHg4YmJlNjk3MiwgMHhlMmE0ZTVjZiwgMHhlN2M1MWJkYiwgMHg3MDFmYjAwZSwgMHgwYWQ1NmIxZSwgMHhiZmQzMjM5NCwKKwkweDM0NzlhMGU5LCAweDgyMzkwNjFmLCAweDNkZTVhYzcxLCAweDliZDdhODA1LCAweDMwNGE3YmFiLCAweDVmOGM5MzVlLAorCTB4ZjI5MzU2ODQsIDB4ZWY5YmRlMGMsIDB4ZGEwOGZkODEsIDB4ZjE4YzZiMGQsIDB4NTVmMWMxYjgsIDB4MjY2NjYxN2YsCisJMHhlZTRlN2JlZSwgMHhkN2Y1MTk3ZiwgMHgyZmU5M2I3ZSwgMHhhZDE3YmZmOCwgMHgxNmNmZmZjOCwgMHgzODhiNWM5MSwKKwkweDJlMzE2MzgzLCAweGVlODk0YTE0LCAweGRhMTE3MWY4LCAweDZhOGVkYzMxLCAweDQ0ZWViNmVhLCAweDViN2U3MTNiLAorCTB4ZmYwZjdjNDIsIDB4ZWYxOGRlYjMsIDB4YzgzMjZiNjMsIDB4OGMzYWNlZWYsIDB4NGUxZTFiY2YsIDB4ZmM1MDZlZmEsCisJMHg2NWQ2OWRhZiwgMHgwZTM4MjViMywgMHgxMGY0MWRmOSwgMHg1OTljMWRlNSwgMHhiZWI4NjI2MiwgMHgxMTZmYWFmNSwKKwkweDc2MzNhOTJhLCAweGM2N2U3ZGEzLCAweDQ2NmJkN2M5LCAweDNlM2ZkNGE2LCAweGViZmFiZmIyLCAweDU3ZDlkNjgzLAorCTB4NmY1Y2ViODIsIDB4N2VjNGMxNjIsIDB4NjE5ZDcwOWEsIDB4M2FjNTFiN2QsIDB4ZTJmYTc5OWYsIDB4OGZlNzVjMTIsCisJMHg4MjVjNWZmNywgMHhkY2Q5YmNlYiwgMHgyOWJlNDdlZSwgMHg0MWFmMDc3NSwgMHgzMmJhOWNmYywgMHhlNjE1ZjY0MCwKKwkweDlkMWYyMGVmLCAweDk0ZGUzZDJmLCAweGZkMzc4ZjQ0LCAweDJlYjFlOGUzLCAweDU5MzIxZjMxLCAweGUzZjQzNjNmLAorCTB4M2QxZmE4Y2IsIDB4ZTUwZjNkMTYsIDB4ZjU5YjdjYzEsIDB4ZmM0OWVhMmYsIDB4Njc5ZmQyMWIsIDB4ZTNmZjkyYjMsCisJMHhkZDNmMWZmMCwgMHhkZDE4Zjk0OCwgMHhiMjI3ZDkyYSwgMHhiMDVhYzNiZiwgMHhjM2EzZWQxOCwgMHg2MTdkNzk2ZiwKKwkweGQzZmVmODY1LCAweGI1ZTVmZDg1LCAweDU5ZmEzMGIxLCAweGRhNDBiZWU0LCAweDc4ZjJjOTk3LCAweDAzY2Y5OGI5LAorCTB4OGNkZmZlOTksIDB4M2NlMjFiZjgsIDB4MjBkYzdmZDIsIDB4M2U0NWIxZGUsIDB4NmVlZjc2ZTUsIDB4YzdmZGM3YzUsCisJMHg2ZTRmZTQ5ZCwgMHg4NWNmMzQzZSwgMHgyMjBmZTJmZSwgMHhmY2RjN2ZkYywgMHg4ZmY5Mzk3NCwgMHg4YTVlNDQ5NywKKwkweGViMTkzZTYyLCAweDFmYjg1YzU2LCAweGRkZmJiMjU5LCAweDkwMDNjYzM0LCAweGU3ZDg1ZWZiLCAweGY5NDk5ZmRlLAorCTB4ZWZmZGM2MzUsIDB4Njk5MzkxMDcsIDB4NzAwMDM3OTgsIDB4YTc3MDhmYmYsIDB4YTQxNmUyN2EsIDB4ZmZkODY2ZmIsCisJMHhiMzYwZGU2MSwgMHhmZDg2M2YxNiwgMHhkOTE4N2IzNiwgMHhjNjVkOTUwNSwgMHhlZjhjYTBmZCwgMHg0ODU4MGI2ZSwKKwkweDU2ZWI2ZWVlLCAweGIzYWYyODIyLCAweDNjYTJjMTJjLCAweGNmMmM2YmQ0LCAweDgwNzUzYTc1LCAweGZlOTkyMmNmLAorCTB4MDc3ZTkwMTcsIDB4NWRmZWVhZTIsIDB4YTdmZTk3NTgsIDB4NDRlOWFkOWUsIDB4ZTY2NjNkYmYsIDB4ZGIzY2ExNzcsCisJMHg0Y2YyMTRlYSwgMHhkYmY2ZjkyMywgMHg3NTkxZGQ4NywgMHg2ZmMzNzYwOSwgMHg1ODRlZGMyMywgMHgzNGMxZjMyMiwKKwkweGJkNjBkNTE2LCAweDFmZjFjZDE2LCAweDc5NDZmNWM3LCAweGY3OTI0ZDFmLCAweGFmMTk3NTg5LCAweDQ5NDU4NWJmLAorCTB4OWViMTM1MmYsIDB4YzRiMGJjZmUsIDB4ZjllMzkyZjcsIDB4ZjQzNzA3MTgsIDB4NzVjYTVhYzMsIDB4ZTRkZDkzZjQsCisJMHhhYjljNTFmMCwgMHg2MzU2Y2ZlYiwgMHg5YmVmOTg3YiwgMHg1NTk2MWY4MSwgMHg1Y2FmZDAwYywgMHhjZGJmNDkwNywKKwkweDZhMWQxZmMyLCAweGU5MGFiMTM4LCAweGI4YTVkNDM3LCAweGU4ZGQ3ZjcwLCAweDA4ZGJmNGUzLCAweDliY2MyZmZiLAorCTB4ZDY3N2U2NGQsIDB4MWQxM2NjNjksIDB4ZGQ3ZmZmOGUsIDB4ZmY5Yzc3Y2YsIDB4OWNhYzNkN2YsIDB4NWJmOGM3ZmEsCisJMHgzZjk3ZWZkZiwgMHhmY2U1ZWY5YywgMHg3ZmJlZmZhNSwgMHhlNzBhZGQ5ZSwgMHgyNTc5YTRjYiwgMHhmZDkzNWJlZiwKKwkweDc5ZGY3MmVlLCAweDhiZjBmMmJlLCAweGYxN2M3YzI0LCAweDcwYzdjNjBmLCAweDZiMjUzMGYyLCAweDcyNDJmZGU4LAorCTB4OTZhZmUzNWMsIDB4ZjhlMGZmODcsIDB4MWU4NzIzYzYsIDB4YTg4MTMzNGEsIDB4ZjYxNDUyNTgsIDB4NmZjZWJiNzIsCisJMHg1MGNmMTc4OCwgMHgzNzFlN2UxZCwgMHg0NTNlNzk1NSwgMHg5ZjVkZGM3MiwgMHg5Y2VlZTIyMSwgMHg1YTdhNWY5ZiwKKwkweDEyNmFmNWE1LCAweDQzYTZlMWYxLCAweGRhYmUxZjRlLCAweGYxNGM1OGUwLCAweGU5ZjhlNGQ5LCAweDA2N2ZiNjUyLAorCTB4MWM3MjUxMmUsIDB4YjhmOTExYjUsIDB4YTllM2NiZjgsIDB4M2QzOTY1MTcsIDB4NTY3NDlmMjQsIDB4YzkwYTc5ODQsCisJMHgzOTJmNWE3OSwgMHg0YzExMWQzZSwgMHgzMmVhZWY1OCwgMHg0MTBjMDhkOCwgMHhjYzJkMzZkNywgMHg0ZjllMTIzMiwKKwkweGY0ZjZlMmNiLCAweGM4OWYyMjRiLCAweDA1ZTdlMTZiLCAweGZhYTY3M2VlLCAweDM1ZTMxZjcxLCAweDdjYTc3Y2YxLAorCTB4ZDY3YTYwNGYsIDB4MDJlZjk0MjQsIDB4YzBkZWNmOWYsIDB4NDc5NzgwNGMsIDB4NGYyNDlkY2MsIDB4MWYwZTRkYzIsCisJMHhjN2U5M2ZjYSwgMHgxMGVmZmQ5MSwgMHhhNWYzOGI3MSwgMHgxOTY3NmZmMywgMHhmZWJmYmNlOSwgMHg4NWZiZTI0ZiwKKwkweGRhZmZiZTkyLCAweGMwMTZkZGI4LCAweDE4MWY4MThkLCAweDE4NmJlZmQxLCAweDRjMWEyYTY3LCAweDMzZjVjM2I3LAorCTB4Y2IyZWZkMWMsIDB4NDU5ZWRjMGEsIDB4YTQ0ZmYxNzgsIDB4OTRmM2U2ZmMsIDB4ZjE5NWE5MmYsIDB4NjIyZmU4OTMsCisJMHhmYTNhYWMwNywgMHhmY2UyNmQzNywgMHgyMzlmNWIwYiwgMHhhYWJlZWJmNiwgMHhjZDk3OTQ1OSwgMHg3M2M4OGZjZiwKKwkweDhmZDljMzM2LCAweDlmZjlmYjFiLCAweGY1ZmQ4ZmRiLCAweGM4ZmQ5M2JmLCAweDljNzY4MWRjLCAweDdlNjlhOWU3LAorCTB4ZWQ1ZmZiY2EsIDB4NWY3MWY4MDQsIDB4Yzg3NWE4ZjgsIDB4ZGNmMjJjZjMsIDB4NWRmOTk3YzUsIDB4Y2RjM2Y2ZjYsCisJMHhiMGVmNmFlOSwgMHhlNTYzZmY3MCwgMHgzNGZmOTNlNywgMHgzNGZiZjlmOSwgMHhkZjBlYTNmNCwgMHg3YmU0NTg0ZiwKKwkweDllMjJmY2M2LCAweGY4MjU3NmM2LCAweDllMzE0M2I3LCAweDgwOTJmN2FmLCAweDQ0N2YzZTU3LCAweDZjZjRjNWU4LAorCTB4YTc1YzUxZmYsIDB4NmNkYjhmOGYsIDB4OWU0YzFkMmMsIDB4OWIxNzJlNGEsIDB4MmY4YTBlMDMsIDB4YmNmMjc3MzQsCisJMHg4Y2U1ZTY5NywgMHhmYTMzNzdlNCwgMHhhZmQwY2I0ZiwgMHhiZGExOGIzOCwgMHhmODIzMzUzNywgMHhmNTdlZmMzMywKKwkweDlhYjA4ZWRiLCAweGQ5Zjc3ZThlLCAweGRlYmJlZDBjLCAweGE5ZmViY2UzLCAweDZjNzNmODNiLCAweGExZWYyZDBmLAorCTB4ZWNjNzQ2NzgsIDB4YWFlZjI4OGYsIDB4YWU5ZmNmZWEsIDB4NzgyNGFkYWEsIDB4YjFlMDhmYzksIDB4N2NhZGNmMWEsCisJMHgwZmUzYzU5MSwgMHhiZjQzZmNiMiwgMHg1ZjkzZjEzYywgMHg5ZTA2ZTNmZiwgMHhmOGYyMWQ5ZiwgMHg5MDhmZTg1ZCwKKwkweDNkNTRmMTdlLCAweGU2YTY3ZTQ2LCAweGFiNjhkYzAzLCAweGQ4N2NmOTUyLCAweDllODhmM2Y3LCAweDJiNGMwZjlhLAorCTB4ZWIyOWZmNDcsIDB4OWRhMzk3YjQsIDB4MDcyYmY1NWIsIDB4YmUzZWY3ZWQsIDB4MjRmMjk3MmIsIDB4MGZjMTNkZWEsCisJMHgyYjNhM2U1MSwgMHg1ZGEzNTcyMywgMHhhMGUzMDg1YSwgMHhmZWYxZmJiZCwgMHg2ZTExY2JhYiwgMHhhMzM2ZmYyOSwKKwkweGRmYzYxY2ZmLCAweGM3ZmEzNGVjLCAweGQ5ZTc4ZDk5LCAweDRmOWJkZDJmLCAweDQ3NjJjYmZiLCAweDZmZWM1M2YwLAorCTB4MTFjMzlkYjMsIDB4YTNjZTIzZGUsIDB4MzI3OWJmMDgsIDB4Y2ZiZTRiZmYsIDB4NGUzNDRkNTYsIDB4MTQ2ZGI3ZjYsCisJMHg2MTcyOTcyZiwgMHg2ZDA1OTliMywgMHhlNGYyMDNjNSwgMHhmMjJlOTY3OCwgMHg2MzVlNDQ0YywgMHhhNzllMmNmNywKKwkweDhmMGVlYTIyLCAweDgxZjNiZjMxLCAweDIzOGYyYmNjLCAweGI0YjNjNzNjLCAweGU2MWY5NmFmLCAweDQwMmY5NDE4LAorCTB4MTg3ZTYyZmQsIDB4OWM1ODA1YzUsIDB4ZTdhOTJkZmMsIDB4Y2EzZDFkYjgsIDB4NzI3YTIxNjUsIDB4OWM1MWRmMDIsCisJMHhlZDA5ZTgwNiwgMHhiMWUzNGJmOSwgMHg2YjllNzhlOSwgMHg1MmY0NDc3NCwgMHg3M2UxZjNjNCwgMHgzNjkzYzIyNiwKKwkweGQzOGEzNWViLCAweGJjN2MyYmE0LCAweDZiM2RmNWUyLCAweGM2MWZhMmM3LCAweGI4NjVlNmY1LCAweGFiYmI3YWE0LAorCTB4MzUzYTUxMWEsIDB4NGQ5ZjkwMjMsIDB4NTI5NjhjZmIsIDB4YmZmYWFmMWMsIDB4ZjI5ZjNjY2MsIDB4MTdmOTJhNTAsCisJMHgyOTFhMGEzYSwgMHg2ZGY3YjI5ZiwgMHg0ZTNjZTFhYiwgMHg3NzY2MTk3MiwgMHhhOGU0ZmU1MywgMHhiYzUwNWZhZSwKKwkweDE5NDA3OWMwLCAweDcyNzYyZjMyLCAweGQ2ZjA4M2I2LCAweGEwY2Q4ZTFjLCAweDNkNGI5YjFjLCAweDQzYjU2NzI0LAorCTB4YjUzOGEyYmYsIDB4MDk0MzU2YjYsIDB4N2VjY2RhYzQsIDB4MGI0MzllMTMsIDB4ZWZlNDYwYWYsIDB4MzJlMWQzMWMsCisJMHg4YTE1N2FlMSwgMHhjM2JlOThmYywgMHhhNDE4OTg3ZiwgMHgwZjhjOGFmZCwgMHg5MzdlNzg0NCwgMHhlZTE1NjdiOSwKKwkweDNkMTViNGMzLCAweDNkNzE4Nzk3LCAweGNkNGRiODBlLCAweGJjNWZkODY1LCAweDg3MmRmYzk5LCAweDRmZDIxOTUyLAorCTB4ZGRmMTU3NjEsIDB4Yjg1ZWExNTMsIDB4YjBmMTQ1YzYsIDB4Mjk2ZWU3YmUsIDB4Y2MyYWZmMjQsIDB4ZjMxMGNjNzMsCisJMHhmMzM2Y2EyYywgMHg5YWE1MGZmZSwgMHg5YjY5OWY1MCwgMHhkNTQ3MGY5OCwgMHgwNGQ1NTlkYywgMHg4NzUwODNmNywKKwkweDNjOGE0NjdlLCAweDQ1M2YxOTU1LCAweGE5ZWExNDNmLCAweGQ3ZTBlY2Y0LCAweGZmYjYzZjMwLCAweDE0YjJkMjFjLAorCTB4ZTM0OTBlN2UsIDB4YjJlNzEyZmUsIDB4ZjNjNzFmYjcsIDB4ZmMyYzNiM2QsIDB4YzM5MWU3OWMsIDB4ZGY5MzY2MTMsCisJMHhlMGE2YWQ2ZiwgMHhlNmVlN2MzYSwgMHg2NjM3OTRmOSwgMHg0MmU3MGM5YiwgMHg4NDdmZjAwNiwgMHgxZDQ3NTZmMiwKKwkweDZiZDcwNWZhLCAweGFmZjYxNjMwLCAweDY4YmQzOTk5LCAweGQxM2IzZDZiLCAweDJkMzhiOGJmLCAweDk3YmE3OTQ4LAorCTB4OGE1NTQ1YjUsIDB4M2Q0ZWI5OWYsIDB4ZWMyN2FiNTAsIDB4M2Q3MGI2NzMsIDB4ZWY4ZmJjZDMsIDB4MzVmNzkzY2IsCisJMHg2ZTVmYTY1ZiwgMHgyZGRhMzZjYiwgMHg5MjdmZjVmZCwgMHhmZTgzZjJkZCwgMHhmZGM2ZmZmMSwgMHhmM2VlMzMwYSwKKwkweGU0OTdlZDkyLCAweDNiMjBkZDdkLCAweGUxYmZhOTNjLCAweDhmOTkxOGVjLCAweDBlMzAzZDUyLCAweGQyOWRhN2I3LAorCTB4ZjIxYjBhNGUsIDB4ZTIxZGFhNzUsIDB4ZDhjZGExN2MsIDB4NWMyM2U1ZmYsIDB4YmY5OTVmMzQsIDB4NWY1MmI1OTMsCisJMHhmMWZhNzk4MSwgMHhkN2YyMzAxZiwgMHg3MGEyM2NjOSwgMHgwOWY3Y2YzNSwgMHhlZTc0NmM5YiwgMHgyOWRhY2JkMCwKKwkweDhiMjQ2ODdmLCAweGQzZjkwYTJhLCAweDZkN2NlODdhLCAweGMxMTFlNjM2LCAweDQ3YjJlYjc3LCAweDk5ZGJiZjUxLAorCTB4ZjI0YThkNmYsIDB4NmUxMDU3NTIsIDB4NTA5ZmU2M2IsIDB4ZWI2NDZhYmUsIDB4M2FlNzFjMjIsIDB4Yzc2MzhkMDcsCisJMHgzMDhiOTNmYywgMHgxNWJmYzA4NSwgMHgwNmY0ZWJlNSwgMHgwNWM4NWYxZSwgMHg5YmY0OGM3ZCwgMHhhMWQzOWEzYiwKKwkweGExZTc4ZWJkLCAweDk5MTMzY2M4LCAweDUwZjEyMjE3LCAweDNiOWJmMDJkLCAweGNhMTE1MTc2LCAweGYwNGFiNWMxLAorCTB4OTlhZTcxNTEsIDB4NGUwZGZmY2IsIDB4ZWMxOTVlNzEsIDB4NzljMGNmNmIsIDB4ZmJjNjNlZTQsIDB4Zjg5ODM3MGYsCisJMHhhZjM3NjQ3OSwgMHhmOWQxOGM3NywgMHhmODJmYTA3OSwgMHg3MjhlYmIzOSwgMHgyODMyNzc5ZSwgMHhhZjA5MjUzZiwKKwkweGM5ZTUzZjMyLCAweGU0MTFlMGI0LCAweGNiZjNlNDk3LCAweGQ2MTI0ZTkyLCAweDZmNDdjZThmLCAweGZhZWRjNDNiLAorCTB4Y2QwYjA2ZWEsIDB4MzVjOTZmYTMsIDB4NWJlYzk3ZTQsIDB4ZmZhODYyNjIsIDB4OWNhZGJiYWIsIDB4ZGJjNjkyZWUsCisJMHg1MTYxNjc1NiwgMHhkODhiNTdlYywgMHhmNWNhN2U1MSwgMHgxNmJiMzJmZiwgMHhmZDE0YjVkNiwgMHg2YjVhNDdiZSwKKwkweDM4MDUzYTJmLCAweGEwMWFkYTNlLCAweDc0YWVjZmIyLCAweGY5ZDIxN2FhLCAweGE5MjhiOWQyLCAweGY5ZjJkODllLAorCTB4ZTYwZTVhYjUsIDB4MTQwYmM0ZGIsIDB4YjdlNzk5MjAsIDB4ZWE5MzM0N2UsIDB4YjA3N2YxOTksIDB4Y2YxNmVhZmUsCisJMHhjMzkwMzRkNywgMHgzYmUyNjM3ZCwgMHhmZmZmNzgxNCwgMHhkYmM0N2Y3OSwgMHgxOTczMTY5MSwgMHg4N2ExZjc3YiwKKwkweDVmMWQ4NjY2LCAweDkxZmRkZjQxLCAweDljNzFlNzI1LCAweGM0ZDNiZDQxLCAweGM4YzU1NjdhLCAweDVkZjQyNDVmLAorCTB4NWU4Nzk3MjUsIDB4MjVlYzg1ODcsIDB4NjUzZmM4YWYsIDB4MTUxZjIyMzUsIDB4NWY1MDNiMjMsIDB4NzE0ZTUzOTksCisJMHgwZmQzMDc3YiwgMHg4ZjNkYjBjNCwgMHg3NjgyY2Y5ZiwgMHg2Mzk1ZmZhMiwgMHgyNmRhN2ZiOCwgMHg0OWU1ODJlOCwKKwkweDE4NGY1NGJmLCAweDIyY2FkYmU1LCAweDJmZGY3ZDM3LCAweDIzNTgwZjhmLCAweGM3YzYzZmRjLCAweDBiZTllMzdmLAorCTB4ZjMyNWJlMjgsIDB4ZTU3MzE5NmEsIDB4ZjI4MGI5Y2YsIDB4ZmJmNTBjNmMsIDB4YTYxY2UyZWMsIDB4NzNjN2NhZTYsCisJMHhjMmNkMmJlYywgMHgzNmY1MTVlZSwgMHg4YmM1MzA2NywgMHgwNDNlNDRmMywgMHgyYjhkZWU3YiwgMHg3Yzg2NWJiZiwKKwkweGY3ZTBlNjc0LCAweGJiNWNhMzQ3LCAweDgyZmIwMmNhLCAweGVlZDhlNDIxLCAweGZhYzcyZTFjLCAweDBhMzU4ZWNjLAorCTB4MGNlMzU3N2MsIDB4ZmFjMmYwOGUsIDB4NzczYTk1YmYsIDB4YTgyOTFlMDYsIDB4ODJjZDMxMWIsIDB4Zjg1ODE3NDcsCisJMHg5YWYxMTU1MSwgMHgzZGM0ZTgyOSwgMHhhZWU3YzM4NywgMHg3Nzk4MjgwOSwgMHhjN2NlZDJiYSwgMHg3ZTZhMGNjZCwKKwkweDljMTBmNzNhLCAweDcwMDc1Y2EzLCAweGJjYjg1NGFmLCAweGM5ZDI4Zjg2LCAweGQzZDUyYThlLCAweGEzNjExY2YxLAorCTB4MGFhYWQ3MzgsIDB4ZTc0OTcxYjksIDB4ZjVlZDE1MjYsIDB4MzViZWI3OWYsIDB4ZTAwNmQzNTUsIDB4ODc4ODg1ZmIsCisJMHg3OGM4YTJmZiwgMHhjYmRjYTIzZSwgMHhjZTU5NjJlZCwgMHg5MDBiZjU1NiwgMHhmMGFkNTZmZSwgMHgxMmYzMzZiYywKKwkweGY4ZTljZTdjLCAweDk1NjViNGNhLCAweDU1N2RhNzk4LCAweGZhMjU0YjZhLCAweDRmM2QwNzY5LCAweDA5NjVlNzg3LAorCTB4YWY3ZjJiNzUsIDB4YzAyZjE2ZDEsIDB4ZWQwYmU2NzMsIDB4OGY4ODQ5YzEsIDB4N2JiZGU3Y2YsIDB4M2I4N2NhMjcsCisJMHgwNzc4ZGY3MywgMHgzMGRlMjRmMywgMHhhZjkxMzkwYiwgMHg5OGVlZjU4OCwgMHg3OWViMDY5ZSwgMHhmMjJkZDhhYywKKwkweDBmNDQ2YzNjLCAweDNmNzJjNmM3LCAweGRiMWU3ZjY0LCAweGZhZjI4NTM4LCAweGU3ZTFjZTY2LCAweGIxNjVhZjQ5LAorCTB4OWVmODFlYjYsIDB4M2VkMDE1OWMsIDB4ZDkxMTcyNjMsIDB4ZGU0NTMzOTEsIDB4MDJiNzhjYzUsIDB4OTgxN2U4NjksCisJMHg0MzVjNDM3MSwgMHg1ZDljM2EzOSwgMHhhY2Q3OTU3NCwgMHhjM2YwMjRmNywgMHg3ZWIxYmFkNSwgMHhmZWIxYTk2ZCwKKwkweGZlYjE5ZjM1LCAweDFhN2ZjOThkLCAweGQ5N2Y1ODliLCAweGY0OGQ5ZmVlLCAweGYzYzJiY2Y0LCAweDMwOTdjMzNlLAorCTB4NDdiZGQxMTcsIDB4MzJmZGEzMDksIDB4NzE1Yzk5ZTEsIDB4MjdlNzk3MGUsIDB4NzdkOGFiZmUsIDB4NTE5OTMzM2QsCisJMHhkYjNlZDY3YiwgMHgyMDM3M2MyZSwgMHg2OGFhZDdmZCwgMHhiNjY1ZTA5ZiwgMHhlZjdlMGNjMiwgMHhiOGJiZWEwMywKKwkweDNkMWNmMjIyLCAweDA3NjFkMzE0LCAweDNmNzE3NTZmLCAweDgxNmJiYzJlLCAweGQzY2UwZTdlLCAweDQ2YWEzZjg5LAorCTB4NGU5MDUyZGEsIDB4NzYyNjFjYjIsIDB4YTU1MmYyMzksIDB4MjM5YWVjOGQsIDB4YjllNGVlODIsIDB4MDU4ZDJhZWEsCisJMHg4NjAyY2YzMCwgMHgxYmU1ODM5YywgMHhlODhiZDc2NiwgMHhjODdmMGVhNywgMHg2OWRiZTcxOCwgMHg4YTViZTUxYSwKKwkweDQxNWIxODMxLCAweDVkMDQ4N2Y1LCAweGZmZjI5MTFmLCAweDU3NTg5YTA3LCAweGVmMTg0MGUwLCAweDFlNWNmYWVjLAorCTB4NzQ2NTJlODcsIDB4NjU2Y2ZlNWUsIDB4ZGQyNWQ1MDksIDB4YWUwMWZlNGIsIDB4NDFhMThkMWUsIDB4ZTkyN2Y0NDUsCisJMHgwYjRlYTdmOSwgMHhiZjdhODNkMSwgMHgzNGJiZjg0OSwgMHhlYTU5MDIxMywgMHhiODgwNzA5MiwgMHhjOTNkNDJjOSwKKwkweDcxOTVmZWM4LCAweDZjOWI3Y2JhLCAweDdlZjhmY2Q3LCAweDdlNzU5MzBlLCAweGQ0NGIyYmRlLCAweGFhNmEyOWExLAorCTB4ZjJmY2ZkNDAsIDB4M2I3ZjQ4ZWYsIDB4ODc5YzQxN2MsIDB4ZTc0NmNkMjUsIDB4YTNlMzg2OTMsIDB4NzY3ZjgyNWQsCisJMHg0YjkxZjEyNSwgMHhlOGY4OWFiYiwgMHgzYjkyY2VhNywgMHg5YzZiZWUwOCwgMHhhNWFmZDQyZSwgMHgwY2JhOTczMCwKKwkweDJhMjNmZDJhLCAweDRmY2UzYmYwLCAweDQ3NGY4YTZhLCAweGVkNjZmOWJlLCAweDgyNWFhOWYxLCAweDliZWY4NjljLAorCTB4YzZhOWY3ZjgsIDB4N2RmMGJkZWYsIDB4NjlmN2MyNDYsIDB4ZTBkOTdkZjAsIDB4NmQzYjc3ZWYsIDB4ZWM0NGQzNTEsCisJMHgyMWVmNGFhNywgMHhjOWE1MTg3ZCwgMHhhZGU2MjM1ZSwgMHhhZWVmZjE2NiwgMHhhM2IxNzkxMSwgMHhkNDdkZTBkMywKKwkweDNjYzZhNTViLCAweDY3ZDkzNjEzLCAweGE0ZTRmY2EzLCAweDk0YWI5MmJjLCAweDU3YzgzOWU1LCAweGJhOWFkYjU3LAorCTB4OTdiZmEwN2IsIDB4NjU1ZTNhYzUsIDB4ODJlNjdlMGEsIDB4MmRjZjJmZTcsIDB4NTdmYzhhMzksIDB4OTg2ODhiNmIsCisJMHg4YjJkNzdkNywgMHhlZGM1YzJhZSwgMHhjNDdjMTY5YiwgMHhlMWYyNGM1ZCwgMHg2NjkzZTQ1OSwgMHgwMzM2MzgzNSwKKwkweGVkY2M2N2VhLCAweDIyMmQ2ZmEzLCAweDliY2U3OWZlLCAweDQ5NWUxODM5LCAweGE0NWUxMjI3LCAweDQ5M2ZhNDE3LAorCTB4Zjc3MGM5MmYsIDB4M2JkN2U3YWYsIDB4M2I2ZjExMjksIDB4NGE1ODUxZDgsIDB4MTZiMThhYmIsIDB4ZTdhZDc3OWUsCisJMHg4ODBiY2MwZiwgMHg2NWFkODY2OCwgMHgyZjM1ZGEzNCwgMHhkYzkzMDkyZiwgMHgwMGZkY2FiOCwgMHg5Y2JkNjVlNSwKKwkweDk0NGZmYzFiLCAweDdlMTc3NTY3LCAweGNiZTFhMDUyLCAweDcxNjM3OWRlLCAweGM2ZjAwMGRmLCAweDk1ZTEzN2ZlLAorCTB4YmNhMGUzZjYsIDB4ODYyZDBmZTMsIDB4ZjhlMWUzYmMsIDB4NDIxYjhlNGMsIDB4ZmNjNTUwYmIsIDB4NDc5NDlkZTQsCisJMHhmMGUzOWExYywgMHgxMDkxNzllMSwgMHg1MjU2YzFlNiwgMHhjMmVjOGFmYywgMHg2ZjZlMTRlNywgMHhiMDliMTU4NywKKwkweDNmMzdjZWUzLCAweGFmN2I3MTk5LCAweDMzZGVkZmE5LCAweDk0NzdkN2U0LCAweDZlM2JiODczLCAweDM1ZmRlNWQ1LAorCTB4Yzc5YzVlZGMsIDB4NGIzOTNkYjgsIDB4NTE3NDJmYjQsIDB4ZWZjM2NjYmIsIDB4ODZmZGM5ZDgsIDB4ZDU4ZjRmMWQsCisJMHgwM2IwNWZiMSwgMHhlOTYwN2VjOSwgMHgzMjJjY2VjMiwgMHg3ZjgzOWJkZSwgMHhkZTQwZDY0YSwgMHhiNzMzNjZmOCwKKwkweDdjOTliNzVmLCAweDYyZTc5NDU1LCAweDljZTJmN2UxLCAweDMxOGNmZTkxLCAweGZmNjRmYzdjLCAweDYyOGU2ZTYyLAorCTB4ZDdmNzRmODgsIDB4YzVmZTRlZmYsIDB4M2YzMDc3NTIsIDB4NTg1YmZhMDcsIDB4NGM1MDJmZTYsIDB4MzNmNzE3MDgsCisJMHgxYzNlN2QwMiwgMHhkNmZlOTg2MywgMHhmZWVkMWEzMiwgMHg5YmNiNTlhYiwgMHhjZmEyNjJhNiwgMHhjZmE0MWNlMiwKKwkweGM1OWY0MDA5LCAweDlkMWNmYTA2LCAweDI0ZTVjOTkzLCAweGIzZTkyNWMyLCAweDkzNGIyZTlmLCAweDE3ODJjYWYzLAorCTB4ZWUxZDNmNjAsIDB4YTMzNTVmY2UsIDB4ZjU2ZGRjYmQsIDB4OWU1YWJjZjEsIDB4MDcyYzk4MjcsIDB4YTA1OWUwMTIsCisJMHhhYTNjNzg3MSwgMHhjMjRjZjA0YSwgMHgzOWUxOTM3MSwgMHhhNDQ5M2UxZiwgMHhmOWM2NmNjZiwgMHhjOTdlMzg2MSwKKwkweDU5ZDg1OGQ2LCAweDJmMmZjMDMxLCAweDA4MzU4M2RiLCAweGFjZGYzZjdmLCAweDQxYTNmYmUyLCAweGEyMGVhYjcwLAorCTB4ZTQ2ZmViYWYsIDB4MmE1MDk0NzEsIDB4NGYxODQ3ZDcsIDB4NjdmMTgxYzksIDB4NWZhZmYxODksIDB4ZmFmMGU5Y2IsCisJMHhkZDEwYjE3ZiwgMHg4NDUxZjgwMiwgMHg5ZjY4YjY3ZiwgMHg3OTQ0ZGRkNSwgMHhjYzZiYjM1NCwgMHgwMGVkMTIyNywKKwkweDEzYTliNzE5LCAweDk0ZjFjZGVmLCAweGU2MDU5MTliLCAweDRiYzYzNGNjLCAweGYxZTI2ZWVhLCAweDhiNThlYjlhLAorCTB4N2ViZGUxMTksIDB4M2E5ZmIxOGUsIDB4Y2MxM2ZlYjYsIDB4YzliYmFiMGIsIDB4ZDM5ODNjZjgsIDB4OGIxOTY3MWYsCisJMHhjMmEzOTY3MSwgMHhmYzA3ZDA4ZiwgMHhkM2Y0ZmM4MiwgMHhkZjBmYzVjYywgMHhmNjNiZjQwYSwgMHhlODE1NjU4NywKKwkweDZiMzJiYTc3LCAweDUwNGRlZWM5LCAweGYxYjZmMWZmLCAweGQ2NjlmZjU0LCAweDA2ZjNiZmI3LCAweGExMjhlZmI2LAorCTB4YjkyNjBkN2EsIDB4ZjkwODNlZTEsIDB4ZDU0ZGY1MTEsIDB4YzExNGQ3OGQsIDB4YTJlZDQ3YjgsIDB4MzlmOTViZGYsCisJMHhiMDRhNmYwMiwgMHhlN2JjMTY2MywgMHhmMjhhMzg5ZCwgMHhiYzg0NmIyMSwgMHhkYmM4NWJlOSwgMHhjOWQwYmRhZiwKKwkweGQ2NmY1ZTUzLCAweDkzNThkZmM5LCAweDc5ZjVlZmMyLCAweDJiYmZmY2FkLCAweDY2YjczZjMwLCAweDNjNTdhODk0LAorCTB4NDdlYjFlM2YsIDB4MWVlODRmOTUsIDB4ODcyNmRlODAsIDB4Y2U2ZmY4ODYsIDB4MDlkYTdlZTUsIDB4MWM3NDRhYTUsCisJMHg0MzI2YTVlMCwgMHhlN2M0ZGZmNCwgMHhkMWUyYjMzNSwgMHg5YThmZTQ1YywgMHgwNGNmZGU2YSwgMHhjNWI1YjRkZiwKKwkweDJjZTk5ZWY4LCAweDZkNzM3YmQ1LCAweDI1MGYyODY5LCAweDcwZTdiNTlmLCAweGE5ZWQyY2ZkLCAweDY3ZmJlMDgwLAorCTB4OGRiNmVmZmMsIDB4MzYwMzdlODAsIDB4MGM1Mzg3YzUsIDB4ZGY5NzdlNGMsIDB4ZTdlMGU1NWYsIDB4MjJmZTAyY2IsCisJMHhkM2JjZmQwZCwgMHhiMzdmM2NmZCwgMHgwNzIyYjZkYSwgMHgwZjVmZTdmNywgMHg1ZTcxMmE1YSwgMHg1MWY5NWIyZSwKKwkweDI3ZDI2ZmI0LCAweGY5NDQ5YjRmLCAweDQ2NjYzNmJlLCAweGRmNzQwNzNkLCAweGYxNzg3YzQxLCAweDQ4NjkwNTI3LAorCTB4ZGQyMzBlNmMsIDB4MjU5YWJhNGIsIDB4NDhjNmJkZTksIDB4ZGJhZmMwZDcsIDB4NWNiZjMyNzIsIDB4ZGFlODFiNWUsCisJMHhjM2Q3NDAzZSwgMHhkNzAwYjlkOSwgMHhhOWFlMDk4ZiwgMHgzZmQ1ZmQ0NiwgMHgyNjVmMTI0ZSwgMHhiYzljM2I4ZiwKKwkweDc5NDRiZmMwLCAweDI3NWYwMDNhLCAweDY2MWU1ZmYxLCAweDdmMjMxNWM1LCAweGVjZmU0YmI2LCAweGE2MmMzODQyLAorCTB4MjliMzlkMTgsIDB4ZTllMzdjNTQsIDB4NzYzMGVhNjAsIDB4MWYyZjg0ODYsIDB4ODMxNWFlN2QsIDB4NGQzZmMyZTEsCisJMHhjZmZjN2ZkYSwgMHgzY2YyZmI4MywgMHhmOWRmMGVkMSwgMHg1YzAwYzY1OSwgMHgyNDJiZmUzMCwgMHg3ODcxNTcwZiwKKwkweDVjMmQyYmI2LCAweDVjN2IwOGJlLCAweGU1OWJlN2VlLCAweGYzOGNiYjdjLCAweGU3ZTE0YWFkLCAweDc3ZThiZGRlLAorCTB4Zjk3YmRmMjEsIDB4Y2ZiODdlZjgsIDB4N2NlNDFkNjMsIDB4Y2Y2ZjQyNDIsIDB4MTY5YzA1YjEsIDB4ZWU3NWRiOTgsCisJMHgxYjlmYTI3YSwgMHhiNDY5Zjg1OCwgMHg4MzM5OTY4ZiwgMHg3NGYxMTdmZiwgMHg4NDNlMTRjNCwgMHhjYzg1OWNmYiwKKwkweGEwNTdmMTRmLCAweDEyNzI3NzhmLCAweDZmMDkwZGVjLCAweDg3OWE5ZTMyLCAweGYzYzlhNzkxLCAweGMwY2ZjNjQ5LAorCTB4YmVjOGM1YmEsIDB4ZmFkOGU3OTMsIDB4ZjM5ZTdiZTcsIDB4Yzc4OTc2OTQsIDB4NjU3N2Y0NjIsIDB4ODY1NGZmMDgsCisJMHg0NTIxNDdmMCwgMHhjOTllN2VhMSwgMHgyZmI4N2M1MiwgMHhjODUzZWU5OCwgMHg2Y2M5OThiZSwgMHhkNjY3OTcyNCwKKwkweGUxOWU3ZDcyLCAweGQ0ODdmNmUwLCAweGM3ZjFjM2ZiLCAweDkyMzM5NzE1LCAweDk5MWIzMzU3LCAweGU3YzczNzM4LAorCTB4ZDk4NzRjOTUsIDB4MmMwZWU3YWMsIDB4YWRmNGRhNjcsIDB4ZDFlZjkwMGIsIDB4ZTAwN2QxNGUsIDB4N2VlMGU5OWYsCisJMHgyMTVjZWNlYywgMHgyNGNmNTgzZiwgMHhmNWZkZjNkNCwgMHg2N2JlN2E0MSwgMHhlNDlmY2ExMiwgMHg5ZTY2YzlmYiwKKwkweDhjZDJmZWUzLCAweDk5Y2E4YzczLCAweGExMjc3N2JlLCAweGVkYThjZjllLCAweGNjNzI4NDk5LCAweDczN2JmMmU5LAorCTB4MWZkYzBkMjcsIDB4ZDFjNzhjOTgsIDB4ODcxOTI2YjksIDB4NGNmYTJmM2IsIDB4M2YxOTFmZTYsIDB4YzcwNjczNmIsCisJMHhjZmQyMzhlMiwgMHg1NTg5NDY3MSwgMHgxZTE1NGJlMSwgMHg1ODNmZTg5NywgMHg3NmVjNzQ4NCwgMHhmZjQzNGQxNSwKKwkweGU4MWIxY2M1LCAweGNiYmExODIzLCAweDE3MzBiYzE1LCAweDAwOGZlZGU5LCAweGYxMGU2ZTBmLCAweDc1ZTNjMDU1LAorCTB4MzQ3YmMxMzUsIDB4ZTFlMTJjM2UsIDB4MmI4NzgxMzYsIDB4ZmIzZDVlODUsIDB4ODlmMTRhYjAsIDB4NDNlOTdmMWEsCisJMHhiZDA4NDIxOCwgMHhlMjExNjY2MiwgMHg0NWU5M2Y1NywgMHg1OWQ4YmY3OSwgMHhmOGEyYTAzMCwgMHhiMjRlNjNmZSwKKwkweDVhYmYxNjMzLCAweGIxOTVmMTRmLCAweDRmNGM0YzViLCAweDIyZTM5M2QwLCAweDMyN2I4NjI5LCAweDMwY2JlYzI2LAorCTB4Y2NlODJmZDQsIDB4NjE3ZmJjMzUsIDB4N2I0MzI4ZDcsIDB4YTFiYzc0NzksIDB4MmE1N2EyZmQsIDB4YjE0OWY1MGMsCisJMHgyZmY3ODYyOSwgMHg1MGRhYWI3ZSwgMHgxYWU3YTRiZiwgMHgzZjUzZmJjMywgMHg4M2E4NmQ5OCwgMHhkZTcwZDBjNiwKKwkweGQ4NTU5ZjdiLCAweDY1Zjc5ODM2LCAweGJlMTk2ZmYxLCAweDE5YjZjZGZmLCAweGYzYmM2MGFmLCAweGIyZjdkOGE0LAorCTB4MGE1NjNmYjAsIDB4ZTkyMDU4NzgsIDB4NjM3Y2RjZjYsIDB4YWEyNTUxN2YsIDB4ZjNkZjIxNTQsIDB4NzllYjA1YmYsCisJMHhjMDM0ZjZiZSwgMHgwYmJmNjI1YywgMHhjNGY2OGRkYiwgMHg3YWM2MmRlMiwgMHg1NWE2Zjc0MywgMHhlNzA3MWIyOCwKKwkweGUzNTRiNDc5LCAweDc5YzkzOTU1LCAweDc5YWUzNTFlLCAweDUwY2ZhNDI2LCAweGUzMTdkODJlLCAweDYyZWMxMTEwLAorCTB4OGUxYjMzY2MsIDB4ZmQ2Y2JmY2YsIDB4MmZlOGQ4NGIsIDB4ZmVmZTdmNWIsIDB4ZjVkOTBiMTYsIDB4YWE3ZDVmOGIsCisJMHhhYzhmMGEyYSwgMHhkYmZhZTM1ZSwgMHhhN2ZhZTM3NSwgMHhkZmQ3MWE5NiwgMHg3ZmFlMzNlOSwgMHhmYWUzNjRmYSwKKwkweGY1YzZmZGJiLCAweDVjNmI1MTFmLCAweDcxODBjY2ZmLCAweDhjZWJiM2ZkLCAweDM0MTM5ZmViLCAweDA2YzhmZmFlLAorCTB4YjdlN2ZhZTMsIDB4NzBiYmQ3MTgsIDB4OGIzZDcxOTksIDB4ZWQwZDRiYzIsIDB4ZTUyZmViYzksIDB4ZGI5YWYxNjUsCisJMHg3YTAxZWY4YywgMHgyMDc0MDk0ZCwgMHhhMDQxNjhlOSwgMHhjNjc3ZjI4MSwgMHgzMGNmN2ZiNCwgMHhjMDNkMzI0ZSwKKwkweGY3NDRkMWJlLCAweDZlM2VjMWJmLCAweGY0ZmU3MjliLCAweGZjOGFkMjAxLCAweGYxZjRjOWJkLCAweGVlYzJiOTZmLAorCTB4ZmEwMTc0MTQsIDB4MGFlNTEzYTgsIDB4NjE0ZjE3ZDgsIDB4ZDg1NjM3NTksIDB4ZWRhMTgxZmIsIDB4MTJiZjI5MGIsCisJMHhiZWUyNzlmNSwgMHgzNmI5Mzg3OCwgMHg3ZDg5NGY0OCwgMHgwYTdhYjBmMiwgMHg4MWY2YzlmNywgMHhmNDcwZjI3ZCwKKwkweDhmYjMxYzdiLCAweDRmNWE4ZWM4LCAweDVkMWJhNTdlLCAweGYxNGY4ZTFjLCAweGNmZTgyNWQxLCAweGYyZjQ4MjdkLAorCTB4MzI3MDAwNzEsIDB4ZTcxYzdiYzAsIDB4NGYxZmUzMDMsIDB4OGRmZTQwOTksIDB4ZDkyOGIzNmYsIDB4MTk4MmZmZWQsCisJMHhjZGQ4MzA5NiwgMHhlMmFkYTg5OCwgMHg5NTNhNGYzZCwgMHgyZjZmNDJmNSwgMHg4NThmZmUxNCwgMHhiOTViZTBmNiwKKwkweDk4NTFlZmRjLCAweGM1ZTZlMzg1LCAweDdiMTRiY2U4LCAweGRkNzljNDZkLCAweGUzMDI3MTIzLCAweDRmNzgyMDA4LAorCTB4Y2EwMTFjNjEsIDB4OWJhNzNiNWUsIDB4ZjhhZTUyZDMsIDB4YzA0OWVlOTksIDB4NGFlOWZjZTcsIDB4NmFiNWQ5MjksCisJMHhjZDNkZTUwYSwgMHhmZDIxNDFiZiwgMHg3ODdmZmYzNCwgMHgyY2ZhMTcxOSwgMHg0Y2I5NWNiOSwgMHhkODVkYjNlMiwKKwkweDQ4MmVkYzAzLCAweDE0OWFjM2M3LCAweDA3NDE2Mjc3LCAweGMyZTdjZGUxLCAweGI4ZmU4Njc1LCAweGZjNDdmZjFmLAorCTB4MGFlM2NkN2MsIDB4ZDA2NzI2ZDMsIDB4Njc1YTMzMzEsIDB4MGYzYzZmNWMsIDB4OWMzOGRhYTUsIDB4MGQ5OTliOGYsCisJMHgwNTgxMzlmMSwgMHg1N2JjMGVjOSwgMHhmYmM2ZDEwMywgMHg3YmZiY2YxYiwgMHhkM2ZhMTQ2MywgMHg3Y2ZmZjU1NCwKKwkweGNmZTMwNmFkLCAweDlmZmEyZTM4LCAweGZlODYzZTFkLCAweDYzZWJkNTY2LCAweGY0MWFiZmU4LCAweGJhMTRjMGZjLAorCTB4Y2ViZmEzMjQsIDB4ODdmODdiZjgsIDB4YzI3ZTkxNzgsIDB4YmIyZjQxM2MsIDB4YmRmYjhjOWQsIDB4MjM4NmZjOTIsCisJMHg5OGMwOTA1NSwgMHhlN2U2NjNiZiwgMHgxNmRhYmRjMywgMHhlNjNjOWZiZSwgMHg5ODRkNjM1YiwgMHgzNzY2NjMzNywKKwkweDMyZmJlNzllLCAweDZkZjMwODdiLCAweGM3ZTQyNzRmLCAweDc5MGNiYWMzLCAweDNjYjRlOThmLCAweGI2NTdlZmFlLAorCTB4NzE4NjVjMzYsIDB4MDcxMTVlYTIsIDB4NzgzNWE3YmIsIDB4YWFiN2FlMTksIDB4MGUyZjI4ZjksIDB4Mjc3MjU3ZWYsCisJMHg0MGYxNmY3YywgMHg2YTlmMDI3YiwgMHhkZDQzMDY4ZSwgMHg1ZTEwMDhlYywgMHgxMGI2YjU1NiwgMHgzZGM1OThkZCwKKwkweDZlZjNhYjUwLCAweGZjMTMwNTczLCAweDE0OGUxNzEyLCAweGNjMmQ4NmY2LCAweDk4NGM1OTVjLCAweGMxZjdmMGM2LAorCTB4NTVmMzg2NzQsIDB4YzRlOWRhNWQsIDB4MGJkNWE4N2QsIDB4MmJjYTI1ZmQsIDB4ZmEyNTkwYWQsIDB4YjZiNGQ3YWQsCisJMHg5NGFiZGMxMCwgMHhiMzNiMTA2MCwgMHgzYjUxNjY4ZSwgMHhlMWFhZGJlMCwgMHhiZTc4NTQ1OSwgMHg2NzkyMmFmNSwKKwkweDNlNmRlNzE2LCAweDM4NjdmN2JjLCAweGRhYmQ1OWZjLCAweGM4NzI4OWU3LCAweDg3MjhkMjNmLCAweDVkYjU2ZmVlLAorCTB4ZDk1YWY4OGUsIDB4OTNjNjhjYmEsIDB4NzU2ZjZiNzgsIDB4OGRmNThlNWQsIDB4YmVkMTVlYWQsIDB4YjU0ZGRhODIsCisJMHg3MWY0ODJiYSwgMHg4NjIxNjgxYSwgMHhjN2FkMTY3MSwgMHhiMDNkNzE4OSwgMHgwM2M2MTkzMywgMHgwNDViNWVjZCwKKwkweGUxZWFjODk5LCAweDA1YTNiMmYwLCAweDVkNzMxZjQ0LCAweDhkZjQwNjFjLCAweGJjN2QwM2U1LCAweGZiNGNjY2IzLAorCTB4MWRmM2RiZDMsIDB4YWZlZGZlZjQsIDB4MGZkMTc5OGYsIDB4MWUwMTYwN2MsIDB4Zjk4YWZmNTEsIDB4ZjAyMzhmZjQsCisJMHg4ODcyMTE2NywgMHhmMjAwYzE2OSwgMHgyMzU3MjU5NSwgMHg2Yjg2NzQ3ZiwgMHhkZmUzYWQzNiwgMHhiYmM0OWZkYSwKKwkweDFmMjhjZWM1LCAweDIwZWY5MmQ0LCAweGUxN2NlYmJiLCAweGY3MTQ4ZDBjLCAweDI3YmMwOTUwLCAweDQ0ZjAwZmUzLAorCTB4ODE3NmY0NzIsIDB4ZTJlZmRiYTcsIDB4ZWZkYmJlN2UsIDB4Y2VjNzk0NjAsIDB4ZDU1ZmMxOTYsIDB4MTQ4ZDVkMDAsCisJMHgwNTliMjVmMiwgMHgwNTZmNmNhOCwgMHhlYjgyNTJjMSwgMHgwYjQxNjM2NSwgMHg0OWQ2NzVlOCwgMHhiZmQxZGIyZiwKKwkweGNkN2VlZDgzLCAweDRkZWFhMThkLCAweDU4NTk5ZTM1LCAweGFhN2M5YzZlLCAweGJlZjFkOTFkLCAweDYxOGIzZjRiLAorCTB4YzQ3NGJlODksIDB4NDU4MWFiOTcsIDB4YzUxZmNjZjAsIDB4MWQ3ODNkOGUsIDB4ODlhN2FmMzUsIDB4NWUzYWI0ZjYsCisJMHhlOWVkMTc0ZiwgMHhmN2NmNWUwMSwgMHgyMGQ0YTkzZiwgMHg5N2YxNDk2MCwgMHhkNWM2NDc3YywgMHgyZGJlNTFhMywKKwkweGIyN2NmYzYwLCAweDNiNjBlN2I4LCAweDkxYzJmMjEzLCAweGRiMDZhYjMxLCAweGJlNzQ2MjZmLCAweDUwZmZiNjQwLAorCTB4NGUzOGU3YjQsIDB4Mzk0NjI5YWMsIDB4ZmRmOGM3M2MsIDB4NmM4NzgxNTYsIDB4ZTlmNjg5YzcsIDB4YjYzMTlmMTQsCisJMHhhNjRhZjhjYiwgMHhmNDJiZWNlMywgMHhmZGIxOTk3ZCwgMHhkM2JkZjE0MSwgMHgxZDM2MzY3MSwgMHhjNzFiNDdkYiwKKwkweDUzZGEyMGRmLCAweDA4ZWYzYzFkLCAweDQ3M2YyMWM0LCAweDE1ZWZkYTJmLCAweGM3NmM3NmVkLCAweGVkOGQ0YmYxLAorCTB4MmJmOGM1NmIsIDB4NDNhZDAwOTUsIDB4Zjg4OTlmM2YsIDB4OWQ1NjhlZTQsIDB4ZjY3Y2M5ZWEsIDB4N2UwY2M4ZWEsCisJMHg5OWYwNTk4ZSwgMHhmMjFiMTk2YiwgMHgyM2FiZmNkYywgMHg5YTRjYmU3OSwgMHgwZmY3ZTNkZSwgMHg3YjY1MGYyMSwKKwkweGI4YTM0Yjg2LCAweDEwYjVlYWFmLCAweDQyMWQ1OTFkLCAweGVjM2UwODhlLCAweDhiNGEyMzk3LCAweGY3MTcxMzhmLAorCTB4M2QxOTdmOTcsIDB4OGU3ZWUxMDMsIDB4ZmUwMGFjZjIsIDB4YmVmMzllOTAsIDB4MDRjMTYyNjMsIDB4OThkYjk2NzksCisJMHhlZjA5ODJjMiwgMHgxODY0MTc3YiwgMHhlNTM3NTllYSwgMHhjY2Y3ZGUxYSwgMHg3NzY4NjUxOSwgMHhiNDM3OGU1NCwKKwkweGYxM2U1OGIzLCAweGFlODI2ZGM3LCAweDBjMmFjYTUyLCAweDAyYmVmMmVkLCAweDkyM2U3M2E2LCAweGY0NzliNTc2LAorCTB4Njc3YmMzMTQsIDB4YTQ3NGY1NGIsIDB4Y2I1N2QzZWQsIDB4MzY3Y2FiZmIsIDB4MzliNzBiOTQsIDB4MWYyMzY1NDcsCisJMHgzMjc1YTRmZSwgMHhlZjIwZGYxYSwgMHg4OTc0YTI2YywgMHhjOTQ3NGJkMiwgMHhhMmVhYjY1NiwgMHhjN2Y1NGE1ZSwKKwkweDdhYWYzY2RjLCAweGQ3OGZhYjY1LCAweDZmOWQxODhiLCAweDRiNWFkOTVlLCAweDJmODFjN2Y1LCAweDU2ZDdmY2IxLAorCTB4YTA3Yjk1M2YsIDB4ZmIwZTE2MGUsIDB4NDNhZmY0MTEsIDB4N2ZhMTNiM2YsIDB4ZmQwMjNmYWMsIDB4ZmExZGI5NjMsCisJMHhkMDg3ZjJjNywgMHg4NTZmYjYzZiwgMHgxMGZlYjE3ZSwgMHg4M2U1ODVjMCwgMHg3ZjNlMGZkMCwgMHhmYWM3ZmEwMCwKKwkweGQ1MDBkNmE2LCAweGEzYWQ2YmVmLCAweDIwZDY4NmZhLCAweDM2YjZmNzk1LCAweGFkYjVmM2QwLCAweGRkNWY1NDJkLAorCTB4N2JjYThjYmEsIDB4YWU1NGMzNWEsIDB4ZWQ0MzVkNmMsIDB4MWYzN2ExMTYsIDB4MWYxZmU3MTMsIDB4N2RjZmM2OWIsCisJMHg0NjdmYWYyNywgMHhlZWQ1ZjI5ZSwgMHg0NTA0YThiYiwgMHg5M2M4NjU1ZSwgMHg3ZGMzYzhjOCwgMHgyZjMxYTc3NSwKKwkweDcwNDdmMTEwLCAweDkzMWUzOWQ4LCAweGUwMmIxOGUxLCAweDJiNjJjZjE4LCAweGEwZGNiOTUyLCAweDJlOThlYjM4LAorCTB4YzBhOWRkZGYsIDB4Zjg1YjIzYTcsIDB4YzU3NTE3YmEsIDB4ODFhNzNkYTksIDB4Y2M1NjM3OGYsIDB4MmNjMjc5OTMsCisJMHhlZjFmOGFhZiwgMHg5NTdhZjdjNSwgMHg4ZjJhNzU1OCwgMHg4MzFmOTMzNywgMHg1NTNmMDE3OSwgMHg5MTMzZGNlMiwKKwkweDcwODRjNDc5LCAweDdmNDE5MzY5LCAweDFmYjNjYzI3LCAweDI3MGU2ZTVmLCAweDc4Mjg2ZGUyLCAweDdjNzhmMjJiLAorCTB4ZTRlY2FkNDMsIDB4YjZkNDliZjcsIDB4NTJjZDkxNDcsIDB4YmY3NDJkZmMsIDB4MTAyZWFkODksIDB4MDRmNGEwZDUsCisJMHhjMjRmNzQ4MiwgMHg2MDMzNzNmOCwgMHhlZDcyMDU5MywgMHg4NzRjZTVkYywgMHhiOGQxYWYzMiwgMHg1MDVkY2FmZiwKKwkweGE4ZTdkODYxLCAweGZkMzIzNmU3LCAweGNjYjdlODIyLCAweDE5NGE0ZmI4LCAweDNiZTE5YjdkLCAweDBjZjdkZTViLAorCTB4ZGRjZjE2ZWQsIDB4YjdmOWY2ODYsIDB4MjJmMmFkMTQsIDB4OGEzMjQ3M2UsIDB4YWZkNzU5M2IsIDB4ZDcwMDM5NjAsCisJMHgwNDRkOGVjMiwgMHhiZGUwNTA1NywgMHhmZGY5ZDE1NywgMHhlZmM1ZmJlZCwgMHhmZmZiMDg0NCwgMHgyZjgxMmVjNywKKwkweGQ3ZGE3YWRiLCAweDZhZjM3NThlLCAweDg0ZDg3YTQ5LCAweGE3ZTNlN2ZhLCAweGVlOGU0OWQyLCAweGZlNDRjNDdkLAorCTB4NjIyYzcxZWQsIDB4MDEzMzc5NDIsIDB4YmY2YzQ4Y2MsIDB4NTY3MjZmMDAsIDB4MTUxY2NhZTksIDB4NTc0Y2U1ZWIsCisJMHg4YjExN2ViMSwgMHhlYzA4YmVkMywgMHgxN2E0M2FmZiwgMHhiMTFmZmZiMCwgMHg3ZTRjZmQ0MywgMHhiZjNjYzdmMCwKKwkweGJhN2E0YTJiLCAweDg5NjdhYzQ0LCAweGQxNmQwN2RjLCAweDczYzNmZDkyLCAweDYzNWZjOGYzLCAweDI2ZDYwNzNjLAorCTB4ZGMyYjAxZjYsIDB4ZWYxOGQ5NTUsIDB4ZmYyNjFkZWQsIDB4ZDZmZGU5Y2UsIDB4MWViMDA1ZDQsIDB4MmEzYTljY2UsCisJMHhiYTBkZjNlNSwgMHhkMTczYzg2OSwgMHhiZjJhYmVjYiwgMHg2MjNkMDE2YywgMHgwODY1OTdlNCwgMHg5ZmNhOTlmZiwKKwkweGFhYmJhMTY3LCAweGY4OWM3NDc5LCAweGU1MmNjZGE2LCAweDcyOGU5ZTk4LCAweDRiZWVhMDZjLCAweDNiYTJiYjI3LAorCTB4ODlhM2YwODcsIDB4MWFkYmQ5ZjUsIDB4MzkwMGZjYTQsIDB4ZDM3N2VkNGYsIDB4NTYwZjk4NWMsIDB4Zjc0ZmYyMjIsCisJMHhiNTNhZGViNSwgMHg2NjFmMjEyNiwgMHg1MmRmYTBiNywgMHgzZDQ1YWIxNiwgMHhmMjY2NWE1YSwgMHhhZjI3YTg0NSwKKwkweDFmNjE3ZmMxLCAweDczYzdlZWRkLCAweGYzMDU1YWZhLCAweGM3MWUxOGExLCAweGJhYmNlOWRhLCAweDc5NGE4NWY2LAorCTB4NGI5MWRhNDAsIDB4YjA3NjBlOTgsIDB4ZTE2NTExYzMsIDB4OTk3ZTgxYjIsIDB4NDc3YzgzZjAsIDB4NWNjZmY1YzgsCisJMHhhZDBmMzQzNSwgMHgzZTQ3ZGE0MCwgMHgzM2VjZGRkNCwgMHg3NDg2M2Y4NywgMHg5OTg3NTlmNywgMHg2MzA5ZTViMywKKwkweDkxODNhOTdiLCAweDZhNTQ1YjllLCAweGE2MGFlODg5LCAweDNkZDNiNDIzLCAweDg1MGVkYThiLCAweDFjMjExNWU1LAorCTB4NTBmM2JkZDMsIDB4MjU0YzFmOGYsIDB4NTJkZDRkYmEsIDB4N2JjMzU3NDUsIDB4NzlmNWMxNGMsIDB4MWU5OWM3MDAsCisJMHgxYTQ5YTBmZCwgMHhkMzVlZjA1NywgMHhiNDJlY2IwNCwgMHg1ZTIyYzcxYiwgMHhhNWQxOWM3MCwgMHg2Mjg1Yzc4NCwKKwkweDU3NWFmYmJlLCAweDE1OWU5ZTEwLCAweGVmY2I2OGYzLCAweDg3ODczYmM3LCAweGNmNzhmY2Y5LCAweGU5MGVhMmU5LAorCTB4NzNjZTMxYmYsIDB4MzdmNTY1NDMsIDB4OTVjNmRlZjAsIDB4NzRkODU1MzEsIDB4MzNhZTdjNDYsIDB4NTNjZTI2YzcsCisJMHgzODAyZTAwNiwgMHg1NTM4NDU5ZiwgMHhiZmZjOWI4NCwgMHg4ZjRkN2U3YywgMHhjODE5YmY3MCwgMHhiYjhhNWFiMSwKKwkweGM0YjEzMjRlLCAweGEzMmNhYmI4LCAweGM4Y2RmZTQyLCAweDRlYmMxMTczLCAweDBiYTlkY2VmLCAweGRmYWM0YTJlLAorCTB4YjhmZDc0NDQsIDB4NzYxZmU3YzIsIDB4Y2QyZjNjNmEsIDB4ZmQxM2Q3ZWYsIDB4N2VlNGViYzQsIDB4NDg3ZjljNTksCisJMHhkZmY2ZjAxMSwgMHhlNzllMzZlMywgMHg2YzU4M2E2MSwgMHgwZDJkZTYwYiwgMHgyNWZlMWZiNywgMHhjNGE0Y2EyZSwKKwkweDE4ZTgzMGZkLCAweDY0OWQ1NzE4LCAweDc1OWYzY2EzLCAweDdmNGI4ZjMyLCAweDMzN2NjNzQzLCAweDhhZmNmMTJjLAorCTB4NmFlOWQwNGQsIDB4ZTRhZjMxYTcsIDB4NzdiNzFlNWMsIDB4ZThmNTg5Y2UsIDB4YzZiZTcxYjMsIDB4NTY3OTY0YjgsCisJMHhkZDE3YmRjMiwgMHg5MWZmZTRmNSwgMHg2ZWJlY2M3MSwgMHhmZDJlMGY5ZSwgMHgwOTA0NGI2YiwgMHg3OGU1MWRmNCwKKwkweGE1NTg3YmU4LCAweGVlOTJlNWY4LCAweGExN2RmOTZiLCAweDdiYTAxZTg3LCAweDFkMmZhMTU2LCAweGJjNWVhMWU5LAorCTB4ZThjNmJmNWYsIDB4M2JiMDU5ZWYsIDB4MWY0NTJhYjAsIDB4YzQ1YTU3ZWMsIDB4NDhkN2U0YzIsIDB4ZmIyNTI3ZjYsCisJMHgyNzliN2U5MSwgMHg1NjNlNjlmNiwgMHg5M2NhNzE4ZSwgMHhhNThmOGJlYiwgMHg4OGE2N2VlMCwgMHg5MWRiYjlkMSwKKwkweDhmNzQ5M2VhLCAweGVkZmI1ODMxLCAweDJiMjk0Zjc4LCAweDI0ZjRmN2UzLCAweDA1MjVmYmFmLCAweDNlZjNjMjE2LAorCTB4MWM2M2FlYjksIDB4MzdkODY3ZTQsIDB4YmVmZmYzODksIDB4N2Q3ZWNmMTcsIDB4OTZmM2Y0MGMsIDB4ODFjZTE4YWUsCisJMHgwOTliYTViYywgMHhhZTgxZTM4ZiwgMHhhYzY0ZWNiMSwgMHhhMGZiYTg3NiwgMHg1ZjRkZjNiMiwgMHhhNWMwYmNlZCwKKwkweDY4ZDdkZmM2LCAweDk2MzllYWVhLCAweGNiYmM5M2FhLCAweGZhNzgwN2NhLCAweGFkM2VmZDhlLCAweDRlMjdmODhjLAorCTB4NTc1MTA3YmYsIDB4Yjg0MWUxYzQsIDB4N2VjYmZjZjEsIDB4MTM3MzI3ZDMsIDB4YmU3YzYwZTksIDB4N2M4M2VkYzYsCisJMHhiZjkzNTdkMywgMHhjZWI4NDYzNSwgMHg3NTk5YmQ5NCwgMHgxYzZiODcwZCwgMHgzZDFiZDVjMiwgMHhiNzY4OTU5MSwKKwkweDBmZjZiODQ4LCAweGE1ZmFiZjczLCAweDkzNGYxNTVmLCAweDAxMjBmYThkLCAweDEyZmY1MzRmLCAweDg2NWJmNjllLAorCTB4YzA5NjY3ODYsIDB4ZjI4ZTRmY2YsIDB4YjcwNjQyZmIsIDB4ZDVmZDQ1N2YsIDB4Y2NmNzg0NjEsIDB4NTFlYmIxNjMsCisJMHhiM2JjMDIzYywgMHg1M2RlN2YwOCwgMHgxNTMzMTQ1OSwgMHgxNGFjZWJmOCwgMHhlNDI5NTlmNCwgMHhhOGNlOGY4ZSwKKwkweDE3ZGJkMGIwLCAweGE3NWU3ZTUzLCAweDc3NDNkYmM2LCAweDc5ZTA4YTJlLCAweDBiOGJkZjAyLCAweGUwZGZkMTBhLAorCTB4N2JhNTZlM2MsIDB4Nzk0OTQyOWUsIDB4MmY1Y2IyMjIsIDB4NTczZmIxZTYsIDB4YWIwZjEyMTksIDB4NzhiY2I5ZjMsCisJMHhkNGY5YjVmMSwgMHg1OTZmYmRkZiwgMHhlZDgzY2ExOSwgMHg1ZWY1ZGYyMiwgMHhlZjBkYTc1NywgMHhjNDc4OTVlZiwKKwkweDIxOTQwNTdhLCAweDJhMTE3YzRiLCAweDNmMmI3YmJhLCAweDIxOGVlOWIzLCAweGYxZjEzM2M2LCAweDFiZTI0YmVlLAorCTB4NTcyYzllMzksIDB4YmI3Mjk3ZTQsIDB4ZTJhYTM5NTQsIDB4MmVmYjg3MzksIDB4ZDllZTkzN2QsIDB4MjM1MmFmYmEsCisJMHhlMzM3ZmI5OSwgMHhmZTEyN2Q3ZiwgMHg3ZDY2NmZhMywgMHg4YWNiZDM5ZCwgMHgyYWEzZjQ3YywgMHgwMzdkYTVlZiwKKwkweGZlMjUyMWVhLCAweDlmYzQzMmIzLCAweDBmZjM0ODI1LCAweDNiNjU2ZGJkLCAweDZhNzhjMTk1LCAweGU3MmJmNDE0LAorCTB4ZTEyZmU3MjcsIDB4ODBiNjVlNzYsIDB4N2FlMDk5Y2UsIDB4YzVhYmUwMjAsIDB4YTQ0ZjUyZmIsIDB4ZjM4N2JkMGIsCisJMHhhOTcxM2QyMiwgMHg0Yzg5Y2ZjNiwgMHhlZjVkNjhkMiwgMHhjZTg1M2M5YiwgMHhmOTE3ZWNmNSwgMHgyYzRiZjExNCwKKwkweGMzMmVmZTQzLCAweGY3NmYwMjMzLCAweDBjNDVmYjllLCAweDc3MGRhOWVmLCAweDA1NWVlOTliLCAweGJmNzhmNWE2LAorCTB4N2ExNDc0MDksIDB4OWE3YmEzNWQsIDB4ZjE2YTllODEsIDB4NWYxN2E4ZGUsIDB4ZmI4NjliM2IsIDB4NjZmOTAzZTgsCisJMHgzZTQwZmI4MiwgMHhlNzdkODc5NywgMHg2ZjNhNWFkNCwgMHgyZTY3ZGFmMywgMHg5ZmZlODEzNSwgMHg1ZDg1NTdjZSwKKwkweDM5ZTE4YjEyLCAweGZjMTU4ZDlhLCAweGQ4NDM4MGRjLCAweDRlZDc4ZTAxLCAweDhlZmMyMDM1LCAweDJhYjNkZmM5LAorCTB4NGY3NjdhMDksIDB4ZGJiZTk1YmUsIDB4Zjk2Nzg5NjgsIDB4NDg3NDBlMzAsIDB4ZGZlZTUxNjUsIDB4ZmFlZmZiYTEsCisJMHgzOGJhMGJjZiwgMHg4ZjJiOWExZSwgMHhlOGUwOWQ5MiwgMHgzZGUyZjdlNiwgMHg1YzEzYWY5ZCwgMHg3ODQxZjcwOCwKKwkweDMzZWUzMjllLCAweDU3YjYzZDU3LCAweDA2YTM3OGMyLCAweGY4YmE3N2JlLCAweGUyNGNhNjdhLCAweDc3ZGNkMGY3LAorCTB4Nzg1ZGNmZTksIDB4YzJiYTVlZWYsIDB4NGJlOGZlZTgsIDB4MzkwNmNjMGEsIDB4ZDdjNDVmNWUsIDB4MTYzMmIzYTEsCisJMHhlNWZjODUxYiwgMHhiNmFmMjhkMiwgMHgwZDliN2EzMywgMHgxN2M5N2FlZCwgMHhmNGE5NDdhMywgMHg5NzkxNmFkZCwKKwkweDI5NzI3YWJlLCAweGUzYTQ5OWYxLCAweDU3YzEwNWI5LCAweDAyMzY2ZTkxLCAweDc2NDkzYzVmLCAweDlkMzAyYzRlLAorCTB4YzcyYWUzZjAsIDB4OTVjN2UzZmMsIDB4M2ZiNzFkNTgsIDB4MmZkNDJlMmMsIDB4ODE5MzI2YTUsIDB4MzgwYjhhZGYsCisJMHhlYzEyYzhkZCwgMHhlZTc3YjI1MiwgMHhmNTJjYjQxMCwgMHhjNmM0NWI3ZCwgMHhiN2ZmYmYzMCwgMHhhM2E1NjZlNywKKwkweDI3OTZkYTVkLCAweDBkYmYzY2VkLCAweDA5NWRiNWYxLCAweDM4ZTExN2E0LCAweGJlZDJhNWZmLCAweDRlZDdjNWVmLAorCTB4NmRiOGUwMzQsIDB4ZGJlNDJmMzAsIDB4NThlYTdlN2IsIDB4OWI0OWY2OGYsIDB4MmE3YzRmY2IsIDB4MjZkY2Q3YzcsCisJMHg5ZmJjMWViMSwgMHgyYmZmMTZmZCwgMHhiYjhjNmZlOCwgMHg0NzQ0N2RmOSwgMHg0MzYzNWNhNiwgMHg0Y2Y3ODdmYSwKKwkweGFkN2JjZmQ4LCAweGQ4MWEwYmY4LCAweDA3ZjkwZDRmLCAweGNmNjZiYTE2LCAweGIxMTZlZmMwLCAweDZiYjQyYWUwLAorCTB4ODZhODc1MTcsIDB4MTFlZTE3N2IsIDB4YjllMTYyZjIsIDB4ZDg0ZDE2MTQsIDB4ZmM5YzJjMWYsIDB4YjYzNzNhMmQsCisJMHg4YjFhNWNmMCwgMHg4Zjc1YmQ4MiwgMHg4ZjdkMTczOCwgMHgwYWM0NTczOCwgMHg0NDNiM2QzOCwgMHhkZmU1MTVlOSwKKwkweDI0YmVmN2NjLCAweGNiZjk5NWJkLCAweGRmMzlmM2JkLCAweGI3ZTgwMmIzLCAweDE0YjFlOTQ5LCAweGE3MWIxMGMxLAorCTB4ZWJjZTllZmMsIDB4NjJlYWQ3YmMsIDB4NzgwNDkyZDEsIDB4MDQ3M2NkMDcsIDB4ZDM4YzI2OGIsIDB4MWIzOWRlZmYsCisJMHg3ZDYwNjdjZCwgMHhjYzBlZmQzOSwgMHg3ODc4NDFkNywgMHg3ODRiZDVhZiwgMHg5MWZmYmUxYywgMHhmNDBlM2MwNiwKKwkweGM3ODBjYTNmLCAweGQwOTdmZGMxLCAweDk2YjVlZmY4LCAweDEzZmY0OTdlLCAweDM3NWZlOTg2LCAweGVmZDAzZmMwLAorCTB4ZjdiNzFhNjgsIDB4YTcxZmZjYzgsIDB4ODkxZGRmMDIsIDB4ZjllZGJkZGUsIDB4MzMxZGZjNGEsIDB4MDE3ZWZkMmIsCisJMHhhNmFjZWFlYiwgMHgzMzhmODQ3MywgMHhlNzdhNjczYSwgMHg4M2JkZGZlMSwgMHhlZTc3OWFmOSwgMHg4YzcwZjhiMiwKKwkweGFlN2M3MzNlLCAweDMzM2QwODZmLCAweDc4YzJiOTlhLCAweGM3MmM5NzlmLCAweDdjZDMxNDE3LCAweGI0ZGI5ZjkyLAorCTB4MzJmMzBiODgsIDB4MGI5YWE1NmQsIDB4YzZkMTFmN2YsIDB4NzFiYjkxNjIsIDB4MjM2OTUyZGYsIDB4NDJlMzI3MzksCisJMHhlNTNmZGZiMiwgMHgzYjNjZjJhOSwgMHg2Zjc5MDdjOSwgMHg5NzkxMTJjYiwgMHg1ZTA4ZWM1NywgMHhkNGJlZWI4MSwKKwkweDEzZmNkZWQ0LCAweGQyODNmNmY4LCAweGNjMzczYTM2LCAweDMzZjY5Yjk4LCAweGUxYTM2ZTMyLCAweGEzMTViZjJmLAorCTB4ZjBjMDMwNWYsIDB4N2ExM2NkZmMsIDB4Zjc3ZTA2NzAsIDB4MTgyNzEwNDMsIDB4ZDgyZjUxYzcsIDB4YjViY2M0MWQsCisJMHhiOGRmNjIwZCwgMHhmYWYzMWVjMSwgMHgwZGU2ZTQxMiwgMHhiMzU3ZGEwNSwgMHhlODkzZGExNywgMHhmNzJmZDI3NiwKKwkweGRlZGQzOTQ2LCAweDIyN2U4MDUwLCAweGZjYzRmNjM1LCAweGVkYjdjYzIyLCAweGU5NzZmNzExLCAweDU1Nzc4YTE2LAorCTB4ZmVmYmEzMWUsIDB4ZmY3ZGNiZTYsIDB4OGViY2U0OWEsIDB4ZDFkYTM3N2MsIDB4ODY5NGNlMzIsIDB4NmI2ODc3NzksCisJMHhiZWY3ZTQ2YywgMHg3YWYyYTdkNSwgMHhhMDhjN2ZmZCwgMHhmZmIwMTA3MywgMHhmOTQzMmQ0OSwgMHhmZWU1NWZiMiwKKwkweDNhZGYxMTIwLCAweDY3ZDBlNjJiLCAweGY5NDA1OGRiLCAweGU0MWYyMmY3LCAweDc0NGJmNzZjLCAweDM1ZDllNGFmLAorCTB4ZWJmZDY4NjMsIDB4ZGQzZWY4NWYsIDB4OTczZmI3MGIsIDB4NDNiZWIxZWIsIDB4ZjU2M2QyNGUsIDB4ZGUxNTVmNTYsCisJMHg5NzNmYjg1YiwgMHg1YTlkYWJkYiwgMHhjMTIyYWQzNCwgMHg1NzlkNWQ3ZSwgMHhlM2Y5ZjI0ZCwgMHg4OTRjNjMzNSwKKwkweDBhZWY4ZmYxLCAweGZhNTFiMDc5LCAweDE1NzhiNTM3LCAweGI4Zjk2NzllLCAweGQyMzNmYTMyLCAweGY0ZWMwN2EzLAorCTB4ODNhNjUxM2IsIDB4ZmJhMmFiYmYsIDB4ZTk1YTM3MmQsIDB4MGZhYTAxNzcsIDB4ODc1Y2RiOGUsIDB4OGQzNGMzZmIsCisJMHgwNzRkOTFmMiwgMHg5OWNmMDRlZCwgMHgyZDdlZmM3NSwgMHg1ZGU1MTZmYywgMHhmNDkxYzFkMywgMHhhOWY1NTZmYiwKKwkweDZjMjdjYTcxLCAweDYwOTVmMTRhLCAweGUwZmVhZmRjLCAweGZmZDdiYTU0LCAweDA1NzE4NmU0LCAweDY0NGVmZjI4LAorCTB4YWY3NDA1ZWEsIDB4ZjQzYzA2ZjEsIDB4NjM0M2Y1MDksIDB4MTdiNWYzZjksIDB4ZTc1NTc5ZDMsIDB4NTBlMGQ0YzYsCisJMHg4ZmE5MTA3ZSwgMHhkYWVmZWY5MiwgMHhkYmRlNWI5ZiwgMHg2NzE5Zjg4NSwgMHg3ZGZjYTFmMywgMHhiOGYxZjE0ZiwKKwkweGQ5ZjEyYmVmLCAweGY5MTVjNTNhLCAweGQ3N2FkMmY5LCAweGJjN2RmYTY5LCAweDZmNzc4ZWZhLCAweDQzZGNmNDYyLAorCTB4NzNmNzJiNzQsIDB4MGJkNWUzYzksIDB4MTJkZmI1N2QsIDB4NGJiZjhiOWYsIDB4ZTA1MmJmNTYsIDB4NjI0ZWZjNWQsCisJMHg3ZTljYTliZCwgMHg3ZGUyNGZhZiwgMHhiNzNkZDI2MywgMHgyNGZkMDg0ZiwgMHg2OWFmOTNjYiwgMHhkODIwNWY3NCwKKwkweDFmZTgwNTExLCAweDRhZDg3OTNhLCAweGUzNzI3Njc0LCAweDJlYWYzYTA0LCAweDljMDdhYmM3LCAweDRmMmY4MGI4LAorCTB4NzExM2U4NjQsIDB4ZjIxNjlmNWQsIDB4ZGYyNTdlYWEsIDB4MzBlN2NhYTcsIDB4ZTc3ZjBjN2UsIDB4YTU0ODdlMzAsCisJMHg1NzNlYWViYywgMHg5MmUzMGQzYywgMHhlZjU5M2RmMiwgMHg0YWI3NGY5ZiwgMHgzZmI1OTdiZiwgMHg2ZjVhNDVmNywKKwkweGY0ODYyN2EwLCAweDQ5YzE3YTY0LCAweDgyZjQzYTdhLCAweGU3YWUxNzc1LCAweDhjMmM5NWM3LCAweDViZjBjZmZlLAorCTB4OGVjN2Y3ZmMsIDB4ZmQ5MmIyMWMsIDB4ZWY5Yzc3ZGMsIDB4OWZkZDA3NmYsIDB4ZTAxNzg4ZTYsIDB4MTdhMWExZmQsCisJMHhlYjFjOTI0NiwgMHhlMGVmOGZjYiwgMHhkZjlkYjZmNiwgMHhmMDQ2ZjhhYiwgMHhjZGZmMTE2MiwgMHhlNjExZjcxMSwKKwkweGY5Zjc5ZGEwLCAweGVkMTQ3YjIxLCAweDllMjkyODNjLCAweGJkYmI2NjEwLCAweDJhNzBmY2Y0LCAweDk0MGZmZjQzLAorCTB4Y2E2M2NmMTQsIDB4ZWVmZDJmMDEsIDB4ZGYxNzZiMGMsIDB4M2JmYmU4YzcsIDB4NTE2MzgyMGIsIDB4MGM1OWRmMmUsCisJMHhmYmYwM2JmZCwgMHhlN2RlZjQ1MywgMHg1MjE3ODJhMywgMHg1Y2IxOGEwYywgMHhmNTJlNWUzMSwgMHhhNDJjMWY5YiwKKwkweDVlNjdjYWU3LCAweGVkMmE3YmZlLCAweGVkNDYzZGEyLCAweDYyZjA2YjIxLCAweDljYWZjNzlhLCAweGYzMTBlNzZjLAorCTB4ZWVmN2FhZmMsIDB4NDExODJkMWQsIDB4MDZlMTI4ZWIsIDB4OThkZDkzM2MsIDB4MDViMzk3OGMsIDB4M2I3YmYxMjYsCisJMHg3NGM5MWYxYywgMHg1ZjllYmZkOSwgMHg1ZmZhMWYwMiwgMHgyMWY2YmNlOCwgMHhjNmViOGViZSwgMHg1OTFjYjg1OSwKKwkweDYzZWM4MTNiLCAweGM4NjI5NmQ2LCAweDg4NzE1YjlmLCAweGJiZDBjM2RmLCAweGRjZWI0OWMxLCAweDg0M2ZmNjY3LAorCTB4ODZmZTI4ZmEsIDB4ZWQ3YmYxOTksIDB4M2Y0MDIyYzAsIDB4ZjlhMWU0YzUsIDB4NGY5MTIzZTUsIDB4Y2YyZDY0YmYsCisJMHhkMWU4ZmJiMywgMHgzOWU2MGJmNywgMHhmYmYyNWNmMCwgMHhkMmM5NzM4NiwgMHhhNDlkMDg1ZiwgMHhlMWM2M2ZhMSwKKwkweDk3ZTZkM2QzLCAweDI1NWQ3YjcxLCAweDdhZWZmOGY4LCAweGY0ZWIzNDZkLCAweDBkZTE2YmJiLCAweDcxMWZjOGUzLAorCTB4YTQxZmEyZDIsIDB4Nzc1Yjg3ZGYsIDB4NGFlOTA5ODEsIDB4NzdmMjE3MmQsIDB4YmM5ZjlmMTMsIDB4N2JkZTRiMmYsCisJMHg4YTlmOGM5NSwgMHg3ZjkyNjJjMiwgMHgzMzc4MmM0ZCwgMHg4MjdlYTFkZSwgMHg2MWMyNTllOSwgMHg5MWZmZjc0NiwKKwkweDY5ODRkZjdiLCAweGUyOWY5YTg4LCAweGY0ODVhY2I2LCAweGY2N2JlMGMyLCAweGJiZjI1ZjJjLCAweGY1YmJmZjZjLAorCTB4ZjQyYjVjMmEsIDB4ZDM4Nzk1ZWYsIDB4ZTA3ZWFmNTAsIDB4M2E0NmZiZTIsIDB4NWQ3YThmN2QsIDB4YzM2Y2YzZTUsCisJMHg4M2FmMzAwZiwgMHg0ZTE0YTYwNSwgMHg4NzkyNzZhMiwgMHg1ZGJjMjgxZiwgMHhmMzQxYjljYSwgMHg3ZWMxN2E0NywKKwkweGViZTgzZGYwLCAweDdmZWU0MjlhLCAweDcxMGNhZTYzLCAweGMxNmMyYmM4LCAweDlmYTk0ZDNjLCAweGMyNjY4YTQyLAorCTB4ZGNhN2YzNzMsIDB4ZTNkMjFhN2EsIDB4MTljNWI1YTksIDB4YzYwZjMwMmIsIDB4ZGEyNTY3YWQsIDB4OGNhM2ExZDUsCisJMHg3OGViOGJjZSwgMHhmOGM1ZjhkZiwgMHg4OWZlMzJmYiwgMHg5ZmRiZjdlOCwgMHgyNDNiZjQ2MSwgMHhiNGU0ZjNjMywKKwkweGVkODliOTllLCAweDllYjkwYTczLCAweGY2Mjg1ZjliLCAweGU0NGM4NTk5LCAweDhkZTMyNjU3LCAweGIxNjJmYmFmLAorCTB4ZjA3OTZhZWUsIDB4MjY4N2RhNzIsIDB4NGI3OGI3YmQsIDB4YTQ4N2EwYmEsIDB4N2ZjZmVkZTcsIDB4MWVhMGYyOTcsCisJMHg0OTEzZGUzNiwgMHhlZjE4NWZiMSwgMHg2MTJjNTc4MywgMHg1MzJjNDJlNSwgMHg2MWJkYWYyOCwgMHgwZDczOTcxMywKKwkweGI5MmNjZWFmLCAweDVlZTlkNzhiLCAweGVmM2I2OTg1LCAweDU5ZTNkZmExLCAweDEyY2FlYmIwLCAweGFkMTZlNWM2LAorCTB4MDVjN2E0ODMsIDB4YjQxMmZlMDUsIDB4NTU1YmUyZTMsIDB4YzM0NWYyMTcsIDB4NTFlMDk1MTYsIDB4NTZkNzNlY2QsCisJMHg4YjdhN2U3OCwgMHgwNmJiZWM5OSwgMHhiY2U5Y2YwMSwgMHg5YmFkMWE2MCwgMHhlMDBiMzRjNiwgMHg0YzE2YjRmZCwKKwkweGFiNzVmYjIzLCAweGE0YTFkZGY4LCAweDZmN2JjMDc5LCAweGUwNDMxNTZhLCAweDk5ZDdjNmM3LCAweDA0M2M1M2YwLAorCTB4YTI2MWJjMWQsIDB4YmY4MDVhNzUsIDB4ZWM3MDg5MGIsIDB4NzliZmM4NTQsIDB4MzM3ODNmM2EsIDB4ZmVjMTRmZDYsCisJMHhhYmU5Y2YxZiwgMHg3ZGQwOTY5YiwgMHgzZWY4YzkzNiwgMHg3ZDEyMGI2ZCwgMHg5MWYzMTYyZSwgMHg0NzFlNGNmOCwKKwkweGYxMGZiM2UyLCAweDJiZDJmNjg5LCAweDg1ZWY0ODUzLCAweDYyOTE1NDFlLCAweDlmZGQ4YmQ5LCAweGRhN2NiZWQyLAorCTB4OTlkZjJiYTEsIDB4ODEzN2NmOGEsIDB4OWVhM2EyZGQsIDB4NmZiM2Y1MWQsIDB4YTM1YjllYTMsIDB4ZmU3YThjNTIsCisJMHg5NjJjZTJhMSwgMHhmZjcxYWZhNCwgMHgzOWY1ZmYzOSwgMHgzZDA0YTY2OSwgMHhmMWM4M2VhOSwgMHhhNGU3M2FhNCwKKwkweGNmZjdhNDJkLCAweGViZTkxZDdlLCAweGFhY2JlZTg0LCAweGYxZWY3ODQ4LCAweDgzYjhmZWMyLCAweDM3ZWFiZDYxLAorCTB4YzcwZDIxZmQsIDB4YTY2ZjU4NjksIDB4ZTk3NWM5NzksIDB4N2NhMDc5YzMsIDB4MjA4ZDRmNmIsIDB4YzVlNWY3ZmQsCisJMHg0ZWI5NWZhOSwgMHhlYjhkZjRmZCwgMHhkZTA5ZTkyMCwgMHg5NzQyYWZmYiwgMHhmMjRjMjcxOCwgMHhiMDUxNTRlOCwKKwkweDlkMDQzN2NhLCAweGM2MDA3YTJjLCAweDM4YjZmZWM1LCAweGYzZDJmZWU5LCAweGEzZTI1NzFkLCAweDVmMDViZDdmLAorCTB4NzFkNzFkNTMsIDB4ZDFmOTExNDcsIDB4NzQ2ODZmNGQsIDB4ZmI0NGUwYzgsIDB4YzdjODA1NTUsIDB4ZDAyZmEwZjUsCisJMHhjNGFmNTE2ZiwgMHg2NDdiYTFkZiwgMHgxZWU5NTkwZiwgMHhiNzRkZmFlNiwgMHhkNWUzOGNkYywgMHhiMDlhYjcxZiwKKwkweGFiZTFkNGZkLCAweDQ5NWMxMjI2LCAweDJhNzgwYWViLCAweGZiZGU4YTE4LCAweGJlMDVlMjhhLCAweDNkODFmYzA0LAorCTB4ZTcyZGZjNDEsIDB4YzEzNzAwOTMsIDB4YmEyOWZiMDEsIDB4MDhhZmE4OGYsIDB4MGU0MTMzZDYsIDB4ZWRjODU5YmMsCisJMHg2NWRmNzgyZSwgMHhmN2U2ZmEyMSwgMHhkN2NmZjU2MSwgMHg1NzVmMzQ5NSwgMHg2NGRmN2NkMiwgMHgxN2NjZGY0NCwKKwkweDc4MmNmOWE0LCAweGU3YzI2YWRiLCAweGI2YmZlZTBiLCAweGE3M2RmNzA0LCAweDc5YTc0ZGQ2LCAweDRmZjBjYTlkLAorCTB4NTUzYWZlNDQsIDB4MjEwZmZkMDAsIDB4MGZkYzE3MmYsIDB4MGJmYjJjZjMsIDB4ZDNiNzZjZjMsIDB4Y2YzYjBkN2EsCisJMHhmNjBlZjg4YywgMHg4OWY5ZTYxNywgMHhjZjM5NDNhMCwgMHgwZDNkMzRmNywgMHhjZjQzZjlmMywgMHgyZWZkMGNhYSwKKwkweGM2YzBmY2ExLCAweGJmNGViY2E5LCAweDczMzIxNzEzLCAweDRhNmQwODdhLCAweGRlZGY3Y2E1LCAweDA0ZmJmZTZlLAorCTB4NzhjMDBlNTIsIDB4MjYwZjQ5ZTcsIDB4ZDU1Mzg3YTIsIDB4ZDBjOWU2ZmEsIDB4M2YwN2ZmZGYsIDB4MDBiNzE3MzcsCisJMHgwMDAwYjcxNywgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGNkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZmZiNSwKKwkweDY0OTMyNjY2LCAweDA4MTI0YzkyLCAweDNjOTg0MDgxLCAweDQ5ODQ5MDA5LCAweDc2OGE4ODAyLCAweDAyZDEwNDc4LAorCTB4ODk3OTRmMGQsIDB4NDIxMDA3OTMsIDB4NjliNWEwNWUsIDB4MDI0MGNkNmIsIDB4MzUwZDQ1YTIsIDB4MDFkNDVhMmEsCisJMHgwZGEyYTI4MSwgMHhiYzE1MGEwYSwgMHg0NTYyMmEwMywgMHhiNjhiNTdjNSwgMHg1MTQwMjZlNSwgMHg1ZWEwYzY3OSwKKwkweGZmZDdiNWFlLCAweDRlN2RhZGZhLCAweDU0OTBjZTcyLCAweDdkZmJkZWRiLCAweGRmMWY3Y2ZmLCAweDVhZmQ5ZjY2LAorCTB4ZDdiNWVkN2IsIDB4ZTdiZGFmNWUsIDB4Y2JhYTNkYzIsIDB4ZTRlMjE2ZWYsIDB4ZmY2ZjA1ZGQsIDB4ZjdhNTE3YmMsCisJMHhmYzgxMmVhYSwgMHgwMmNkZGY1OCwgMHgyY2MzOGZmOSwgMHg5MzRhMTRmZSwgMHhmZTcwYTY4YiwgMHhhNTZiOWI2NSwKKwkweGE2ODljNDIyLCAweGExNDFmZGJmLCAweDM2N2Q4NWZjLCAweDBiZjJhMGI3LCAweGNlZjc0NTI5LCAweGVhOGY3ZTQ2LAorCTB4MmZlZDQxNWEsIDB4MjU5ZjY4MGMsIDB4ZDhiOTczODYsIDB4NWRlYWU1NDQsIDB4MmU1MDlhMjMsIDB4Y2FlNjFlMWUsCisJMHgwZGYyZjJhMCwgMHgwOTY0NDI2MSwgMHg2ODU2ZmJmZSwgMHgzYmU5MjM3ZiwgMHg2YmE1MGI1MiwgMHgzNDc4NmY1NSwKKwkweGZkMmY0ZGE1LCAweDZmYTVjOTQ0LCAweDU3OGYzNzU2LCAweGY3MjRhYmYzLCAweGI5N2UzNGRkLCAweGY5ZWQ1ODU1LAorCTB4Mzk5ZWRjYTgsIDB4ZjM4ODQ3MmQsIDB4MDMxMzZkN2IsIDB4MjMzZjMyZDksIDB4YjAzZmNiODcsIDB4NWQ4ZDc5NTIsCisJMHg3YmY4NWFmOCwgMHgwZTZhN2RhZCwgMHhkMmI2ZTI4ZiwgMHgwZmE5OGIzOCwgMHhmYWU5NGE5MSwgMHhlYTYwZWYxOCwKKwkweDkzOGQzMTdmLCAweDhiN2RlMzQyLCAweDBlNWMxZmJmLCAweGU3Y2IwZWRmLCAweDlmYTg4YTBiLCAweGY2NjI2ZDdiLAorCTB4ZjU1ZGQ5NzMsIDB4NGRkYjM0ZjQsIDB4NmQ0NmY2MWQsIDB4NTUzYjU3N2IsIDB4M2NjNjI1ODgsIDB4MjQyMmExZTEsCisJMHg0Nzc5MTRiZiwgMHhhNDMyYmU1NywgMHg3Y2E0MmFiYywgMHhhN2NmYmY0NywgMHgxZjJmMzkxNCwgMHgxZmM2MDM3ZiwKKwkweDEyYzc4NWQxLCAweDJjM2I4ZjBkLCAweDcyZWIxZGY0LCAweDQ0ZDgxMjhmLCAweGJhYjEyZGZmLCAweGZlMDljYmVkLAorCTB4OWI4OGM2ZTcsIDB4NTVhOTRmZDEsIDB4NDdjZGFlMzgsIDB4NWY5ZTBlYmQsIDB4ODYzNDU1ODksIDB4ODdiYmUzZTUsCisJMHhhNmYzZTllYiwgMHhlMmMzMWFmZSwgMHhjZWQxMWYyOCwgMHg4OWJkNTNlMywgMHhkYTllNDM3NiwgMHhhYjlhZTA5YiwKKwkweDRiYTdhM2MxLCAweDRlYmI4NWI3LCAweDdmYTBmM2VhLCAweGE2YjEyZDU1LCAweGJlZWVjZDdjLCAweDdjMDY5M2FlLAorCTB4ZmE3ZmM1MmYsIDB4MzQ0OWJmZDIsIDB4OGJjMDkxZmIsIDB4ZGRkYWFiZmMsIDB4ZTg5MjMwN2EsIDB4Y2RmMTRkYTcsCisJMHgxN2JmNTM3NSwgMHg5ZDFkN2UwZSwgMHgxZjc1ZTZlZCwgMHg5YmViNDQ1OSwgMHg3ZjNlYTZhZiwgMHhiZWRiZTY5OCwKKwkweDQyNmNmNTQ3LCAweGZkZDg2ZmJmLCAweGU3ZmQwYzRhLCAweDZlMGY4YjliLCAweDJmZDVlZmE3LCAweGRkYmI4OWE3LAorCTB4YzUwZmYzNWQsIDB4MTdkZDg1ZTMsIDB4ZmJlOTUzYTMsIDB4MDhmNjQzZjksIDB4YjllNjhjMzEsIDB4OWRhYzdlMzcsCisJMHg1YzQ3NjJlOCwgMHhhZjc4Yjc3YiwgMHhlZjVkZDZkNSwgMHgzNWI1YmNlZiwgMHhkZWExYWE3YSwgMHgzZDFhZDE3OSwKKwkweDI1MmY0MGNkLCAweDhiZDYyZmJiLCAweDVmOWZjNjVjLCAweGVmYzJlZmNkLCAweGM3YmQ3ZDg5LCAweGY0YmRmNGFhLAorCTB4NWFjNmZkZjcsIDB4YzM1ZmJkMjgsIDB4ZjczNmJkZGIsIDB4NmUwOTZiMTMsIDB4Y2YzMDllZmYsIDB4ZmNmYjgyMTYsCisJMHg2ODJkYjMxYiwgMHg3MjhkZmU3ZiwgMHhjYmNkYmQyZCwgMHgyNDRmNWZlOSwgMHg4YjY4ZmM2MywgMHhiYzdkNzdhNCwKKwkweGY3MGI2ZTM1LCAweDdiNjk2YTUzLCAweDhmZGExYWVjLCAweDkzZWJiZmE1LCAweDU1ZDI5MGQyLCAweGNmYzk2YTVlLAorCTB4Yjc2ZjNhYzQsIDB4ZGMwMDJmYjUsIDB4NDZiMTE1ZTcsIDB4ZTdlYWViODksIDB4ZGI5YmI3N2UsIDB4YzlmM2RmOWYsCisJMHgyNzBmZTA2MywgMHg0ZjkwMWRlZSwgMHg0MWY5NGQ2NCwgMHgzZjJhM2ViOSwgMHhhNjQxNTFmZiwgMHg3ZjNkZmE4YiwKKwkweGY4MGY1ZjRmLCAweGZiOWI3NmMyLCAweGJiYjdhNjM2LCAweGY3ZDgzY2EyLCAweGE3MTg3ZjdhLCAweGI5ZWZmZDE2LAorCTB4ZTkwZmE0NjIsIDB4Y2E1ZTEyNDcsIDB4YjhlNGZhZTcsIDB4YWJiZjI1N2UsIDB4ZmI4YjY4ZGYsIDB4MTdlMGQxYmUsCisJMHhiNjc5YjdiZiwgMHhlZmZjYjI1MCwgMHgzMTYyN2Q2OSwgMHg2ZWU3ZWMzZiwgMHg0ZDc0YTFkNiwgMHhmODliNzA5OCwKKwkweGJiODY0YWM5LCAweDIyZWM3ODQ0LCAweDAzMGI5NjRkLCAweDIyODk5NWJkLCAweGM5YjBiZWZlLCAweGYxMTE3ZGZjLAorCTB4YmM1ZjdjMDksIDB4NWNiZGZjZGUsIDB4YTU2ZWFkMzQsIDB4OTgwOTJkZjksIDB4M2ZkYTBiYmYsIDB4NmJlYzA0ZmUsCisJMHg1ZWM1YWZmZCwgMHhmZjdhMDUxNCwgMHg0ZjU0Y2MzNiwgMHg0MGZlMzVmOCwgMHgyNTVmMDkxZiwgMHhjN2MxMWZiNCwKKwkweDgxMDI1MTllLCAweGJiZGY1ODk1LCAweGU4Njc5ZTU0LCAweGE3NzVkZWJjLCAweDIyODdiYjcwLCAweGFiNDE2N2ZmLAorCTB4NWI4ZjVkNjEsIDB4ZjA5MTM1ODQsIDB4MWMyZWRjN2EsIDB4NDdlOGY5ODksIDB4ZjVmYTg1MDgsIDB4NmMwYjBiZWYsCisJMHgwZjc3MjZhMSwgMHgwNGI5MmFmZSwgMHhjMjMxYWY3YywgMHg1YmJlMDgyMiwgMHg0MjdjZTA1ZCwgMHg0OWY3ZDhhYywKKwkweDVkMjlmYTMyLCAweDM1NmRlODUzLCAweGU2YzE3N2MwLCAweGQ0ZTdlODdkLCAweGUyNWRmZGJlLCAweGY4ZWY1NGQ3LAorCTB4NThkMzQwZDgsIDB4ZGRmOGViODIsIDB4MWJhMWE3YWEsIDB4YjFhZjRlYjgsIDB4ZTEwMTQwODgsIDB4MDIyMTJlZTMsCisJMHhmMjdmOTRmMSwgMHg1YTYyZTQ5MywgMHg3Y2I2Y2Y5NywgMHhhNDYyNWM5MiwgMHgzNmNjNDU3ZiwgMHgxMjllYTNkMiwKKwkweGVmM2ViYzI0LCAweGZjZDJlZjYxLCAweDMwNWNkMzhlLCAweDVkN2FkMDlmLCAweDU3ODY2YmViLCAweDJhYjg2N2M3LAorCTB4ODdhM2JiNmEsIDB4NTRmNzQwY2YsIDB4NTU3N2Y1OWUsIDB4ZjdlZmIxNzgsIDB4Y2ZhMDAyZDksIDB4M2M1ZjhkYzgsCisJMHhiOWY0MGYzOCwgMHhhMTRhZTZkNywgMHhhOWY2NmJiMSwgMHgyZGU2OTU1ZSwgMHgwYzgxYThmNiwgMHg0ZjdiNjM5YywKKwkweDljZTA1NzQ0LCAweDUyZTA1M2Q5LCAweGQ5YWVmMzBkLCAweDdjZTExNmEzLCAweDYyZmJiZjM5LCAweGY3MzY2OTQyLAorCTB4NDRlZGM1MzMsIDB4YTAzYzA3ZmIsIDB4ZjhlMDllZGYsIDB4ZjdmZDViOWIsIDB4Y2NkNzlmZjgsIDB4N2Y2NWNlZmYsCisJMHhmODAzNzA5MCwgMHg5OTUzYzZjMCwgMHgwN2M0ZWZlMCwgMHg3OWE2ZTZmZiwgMHhjNmZjY2Y5ZSwgMHhhZDEwYmM4ZSwKKwkweDA0N2Y0MTIzLCAweGUwOWJiNDVmLCAweDJhZjgxMGJjLCAweDhlNWMxMDVhLCAweGQwMzdhYWJkLCAweGE1NDQzYWNkLAorCTB4ZmY0ZjE5ZDgsIDB4MDkxMzdjMzIsIDB4ZjgyZTg0YmUsIDB4OTRhODllMDgsIDB4NTY3MDVkMTEsIDB4MzhlZGRiYmIsCisJMHhhMjM4MmY2NywgMHg2OTRmYzE3MywgMHgxMmYyOTM0MiwgMHgwZGM5ZjNiNCwgMHg0OTNhNWFmZSwgMHhiZjFkN2YxMCwKKwkweDcwY2FlMTY3LCAweDhhNGQwYmM4LCAweDk3YmU4YzI3LCAweGRjZjk1NWVkLCAweDE5MWJkYjJhLCAweDNmMTgxNmMwLAorCTB4ZDJmOWM5YzgsIDB4MTg0MGQ1NDcsIDB4YTNhODI3ZTUsIDB4ZWE5YjMwZmYsIDB4ZjU0N2JlMmYsIDB4ZmIxNDhlZDAsCisJMHgwN2Y2ZGUzNywgMHg4Mzc1ZDYxYiwgMHg4ODFjYTA0ZCwgMHgzNDRiNWMwMywgMHhmZGVjOTZiOCwgMHg4ZDBhNjdlMSwKKwkweDJkZGY3OGIzLCAweGUyY2UzMDA3LCAweDE3MGYxNDA3LCAweGU4ZWRmM2E4LCAweDhhNDNjOTc3LCAweDY3NDA1Nzg4LAorCTB4M2E0NmUzYjYsIDB4Y2U2NGQ4NWIsIDB4MGJhZDEyMmYsIDB4YzFmYzE1NTQsIDB4OWVmMDlkZmMsIDB4OTZmZDQxNWMsCisJMHhkZDczMGVlZiwgMHhhMTAyZjE4ZCwgMHg0YWJjNDJlNSwgMHhmZjY4ZDRmMCwgMHgzYjU4Y2FjZiwgMHhjZmQ1MDBmNywKKwkweDNjNjc2OGRhLCAweGUyMTcwZjljLCAweGI1YWJmNjA4LCAweDBkMjA0MTM1LCAweDFkNjMyNmI2LCAweDZiZjllZmNmLAorCTB4ZTZiMWQ2MzIsIDB4Mjk5NWZmNzcsIDB4Y2ViZjU5YmEsIDB4YWEzN2I0ZmQsIDB4MjE0OGE5ZDcsIDB4YzQ1MTRlYWUsCisJMHhmYmEwYTliNywgMHhiYThhNTM4YiwgMHgyMDFiNmZhOSwgMHg5YjM2YzVmNywgMHhjYTg3OWZiZiwgMHg4YWZjNmMwZiwKKwkweDNkODVjMWY5LCAweDZlYWU4MWJlLCAweGJmNmJiN2U4LCAweDg5MmRjM2ZhLCAweDAyZTE4MzQ4LCAweGQ3MTZmMGU5LAorCTB4MjQyN2Q4MGQsIDB4MzViZTYyMGYsIDB4ZGI0ZjU2OWIsIDB4OTdmMGY5NDQsIDB4NDRiOTM4NmMsIDB4Zjc5Mzg2NGQsCisJMHg0MmM3ZjYwYiwgMHgzZWZhYmY0MywgMHg4MGJlMDZkOSwgMHgwZmU0ODQ3NCwgMHgxY2YyMDFiNiwgMHg3YjlkYWEzZCwKKwkweDRjNzdmNmRiLCAweDllMDZlOGM5LCAweGQ3MWI2ZWEzLCAweDVjMTAwZGIzLCAweGQxNzc1OWVmLCAweDg0NWJkMDVjLAorCTB4YmUwZDFmYzUsIDB4Nzc1ZWJjMmQsIDB4YTJiM2MyMmYsIDB4NWQ0MzU3ZDEsIDB4ODllZjgyYWQsIDB4ZmVkMzg5YTIsCisJMHg0N2QzODVhMiwgMHg1MTM5ZjA4NSwgMHhjMDVjNzg1ZiwgMHg2MjAzMTBiMywgMHhmM2RlM2Y4MSwgMHhjY2JlY2Y4YywKKwkweGFkYWM3ZjM3LCAweGU4MzU3ODIxLCAweDAyMmIxZmM0LCAweGVhZmZlODViLCAweDYzNTA4NzQ2LCAweDQ2YjVlZDIwLAorCTB4Y2U1NDUxYTMsIDB4NTIwNmZiYjQsIDB4ZDUwM2VkYjksIDB4MWRkZTQwYTIsIDB4YzdhN2FmYTAsIDB4YTVmN2ZkODUsCisJMHg3MThjNDY3MywgMHgyZTFmZjZmZCwgMHhhYWZlODg5OSwgMHg4YzIyYTk3NiwgMHhkM2I3M2JmYSwgMHhkNDRlODIyNiwKKwkweDdjMDJmZGE3LCAweDllYzJmZTFjLCAweDU3YjRiZTAyLCAweDZiOTc5MDExLCAweDM1ZWY4ZjI4LCAweDgwZGVhZGEzLAorCTB4YTQ3NzJmMDEsIDB4ZDUwZjE4ZDgsIDB4OWNmMjk5MjksIDB4NGQwZjdhYjYsIDB4YmJjZjdlYTIsIDB4ZWI5MGVjNGEsCisJMHgyNmNiODc2ZCwgMHgyNWIxYmNlMiwgMHhkNzAxZDg5NiwgMHgxZDYzYzNmZSwgMHg1OGI3NTgyOSwgMHhkNTliZWYyYiwKKwkweDhmNzFmNTdiLCAweDU0N2ZkMGI4LCAweDZmMGMwN2VjLCAweDQ0NDViNjYzLCAweGEzYzZiYjUzLCAweGE2NDYwMTYxLAorCTB4MzBhMWYyNDMsIDB4YzE4ZGFmMGQsIDB4Mzc3NzBlZjEsIDB4ZTMxN2UzZWIsIDB4MmEyOGM0OTMsIDB4MDQ0ZWE5ZGYsCisJMHgyNTVjZTc5YywgMHgyZGEzYWMyZSwgMHgwYWVlZTg5NiwgMHg0ZWYzNmY2YSwgMHgwZGZhOWFiYywgMHgwNzhiOGQ4YiwKKwkweGQyNTI2YjdjLCAweDhhYmYzZDc4LCAweGJmMzg2NWFkLCAweGNmYzJmMTIyLCAweDA4YjZiN2ZiLCAweDY1ZmVjNmY5LAorCTB4ZTliZWUzMmEsIDB4MzVjZmRlMjEsIDB4ZDQ3ZTM5MGUsIDB4NTFjZjk1M2UsIDB4ZTM0M2E1NzEsIDB4NGFiYmVmZGIsCisJMHhjOTA1OWM2OSwgMHgwZjQxNDdiZSwgMHhjNDZkZmM5ZCwgMHgzOWZjMDJhYiwgMHhmOTYxNjJjYiwgMHhlNzM1ZjFhYywKKwkweGJkMjFmMDVhLCAweGE0OGE2Y2ZjLCAweDU2M2Q3ZDM3LCAweGMwYmFiMmY1LCAweGU4ZDUxZTNmLCAweGM4YWI5NTczLAorCTB4YTc5ODZmOTEsIDB4YzM0NWI3YWQsIDB4NzgwMzkxNTcsIDB4M2EyZjYxZGEsIDB4OWRhNWYzODQsIDB4M2NkY2UzYmUsCisJMHgwMWNkMzg5MCwgMHg1OWVhODUzZCwgMHg3YWE5Y2ZkMCwgMHhmNDc2MzFkYSwgMHhmYzAxYzMzYiwgMHgzMjU1ZWEyZSwKKwkweDhiMTZlZDAxLCAweDZmZDhkNWRhLCAweDIyYWJkNzhiLCAweDhkYWJlMDY4LCAweGEyZWUzOTM2LCAweDE4MjIxMTRiLAorCTB4MjJlZTM1ZGYsIDB4N2Y2ZTNmNWEsIDB4ZTkwNDVhMjksIDB4OTcwYzZkZGMsIDB4ZTRhMzFhZjUsIDB4NDUyMzc5ZmUsCisJMHhiNTBmOWZlZSwgMHhmOTY5YjRmOSwgMHg3YmFmOTk3ZiwgMHg1Y2ZkN2NjYywgMHg5NmI2MWZlYywgMHg0NmZlZmU0OCwKKwkweGE1NWJmNTBhLCAweGExNDg0ZWI0LCAweGVjNGVhZGY5LCAweGE3YmYwM2IwLCAweDk4MjI1ZGVhLCAweGIyZjc4MDY5LAorCTB4YTA4YmM2NzksIDB4N2FjZWRjNjEsIDB4OWYzYzFjOTcsIDB4MzM3MGY1YWUsIDB4NzVmMzVkZmMsIDB4ZDU0ZTFlMzIsCisJMHg3YjFlMzIyNywgMHg4NGM5M2ZlZSwgMHg1M2ZlYWVjNywgMHhiY2JjNzg0ZCwgMHhmZjFlNGNmZiwgMHg3N2Q2N2Q1NCwKKwkweDg3YjQzZmY0LCAweGY4MjZkZGZlLCAweGU3NGRmYWJiLCAweGRmNmVjNTcxLCAweDNiOTdmMDQwLCAweDk4MGZjNDVkLAorCTB4NTA1Zjg4NmUsIDB4M2RmMTVkYjksIDB4ZGJlNDM1N2UsIDB4ZTQwNGMyOGYsIDB4N2RjMmFmYmUsIDB4ZmUwNjVjODMsCisJMHg2NWNlMGRmMCwgMHg0OTgyZTdkNiwgMHhkMTdlYjdlMCwgMHhlZWNkNjljYywgMHhkZWQwMTM4YiwgMHhmYjAxN2M0ZCwKKwkweDExYWYyZjQ5LCAweGY4MjcwY2VkLCAweDM1ODNlODg1LCAweDdjYjliYWI0LCAweGY0MTA2ZmI3LCAweDRlOGUxZDIyLAorCTB4YTc3NWU2NzksIDB4MjBmYjQyZGYsIDB4YTNkZmRmNmMsIDB4NTgyZjhmYjEsIDB4Mjg3OGE3ZGIsIDB4NDZhYmQ5NmQsCisJMHg3Yzc1ZjcxYSwgMHhiMWE3YTRhYSwgMHg2ZGM4YmUwMywgMHg2OGQ1ZWZhNSwgMHhiNmVmN2M0NywgMHgwMjBlOTc5NywKKwkweGRhYzNhYTdlLCAweDgxZjcwMTczLCAweDhiOTZmZjk3LCAweDdkYWJlNDczLCAweGZiZTIwNzRiLCAweGYyY2ZhYTM2LAorCTB4ZGFiZGJkODcsIDB4NWQyZmU4NjMsIDB4NTE5NmZjYjgsIDB4NTUzM2E5NWQsIDB4ZWZkMGZmZWUsIDB4ZjQzNWY2ZGIsCisJMHg4OWRiMWMwMywgMHgwYjkyMDliZCwgMHgwYTJhZWJhYiwgMHgwZDgzYzY0ZSwgMHhmZjA3ZWY3OSwgMHg1OGI3YzQxMiwKKwkweDVkM2RkYTFmLCAweGVlZjkwMzFkLCAweDI4Nzk5MjQzLCAweDk0OGY3YzNmLCAweDEwMGY4NjFiLCAweGU0MGE0YjAxLAorCTB4ODM2NzBmYmUsIDB4YjA4ZjU0NGYsIDB4NDcwYWEwYmIsIDB4Nzk2MTFkZTQsIDB4YzM4NDYyM2IsIDB4YmZmZDUwYTUsCisJMHhkYmUzOTdmNywgMHhhMWE0MmYyMSwgMHhlODNjNjE3ZCwgMHhmMTY0Y2FmOSwgMHgxYjZkYzllZiwgMHhmMDRmZjY0MiwKKwkweDM0ZWRlYWJkLCAweDNhZGE5NTVlLCAweGZiYzI5YzY1LCAweDdjMTUzZjI4LCAweGRlMmZhZGZiLCAweDA0ZDdmNGQ2LAorCTB4OWMwMWNmYWMsIDB4ZmJjZjA0NmIsIDB4YTk2NTNmNWEsIDB4Y2Y1MDJiYmUsIDB4ZTdiZDY4ZTcsIDB4NzMzN2FhMGEsCisJMHhlODY0ZGY1NiwgMHg3ZTlhYzU0NywgMHg1MjExMjYyNiwgMHg5NDdlNjRhZSwgMHhlNWM4M2IwMywgMHg4M2Q0YjZlNywKKwkweDNlN2M1MjVlLCAweGQ3ZGZjMWUwLCAweDM1ZjljMWUxLCAweGZhMzg0OTM0LCAweDYyNDU1ZTEyLCAweDhkMWE3NTIwLAorCTB4YTJkNTIxM2IsIDB4YzAxNDBmZGIsIDB4ZTM5YjQ0M2QsIDB4OTY1YWZkMzMsIDB4MTkzOWYyYzcsIDB4ZmQxZDAzODgsCisJMHg0YjRlZTNiMywgMHhmYzA2NGVmNSwgMHg2NzBmZmQ3YSwgMHg3NWYxY2JjZCwgMHhmMmU4NmU3MywgMHhiMmRlZGRiYywKKwkweDU3YjY3MDBjLCAweGZjN2Y1OTM5LCAweGVlZDQ0NTAwLCAweDQxNjE1OTg5LCAweDhhN2ExYTM1LCAweGY5ZjQwZDczLAorCTB4MGUwYjkxYTMsIDB4OGM3YzI2ZjYsIDB4NDNjZGYyOGYsIDB4YmM2ZmIzZmYsIDB4Y2FmMjM1N2UsIDB4NzJmNzc4ODEsCisJMHhlYjcxNzNkMCwgMHhjMmVmZDY0OCwgMHhiY2EzMzc3ZCwgMHg5ODFiZTFkMiwgMHgzNzNjNTM0MCwgMHgwNjI4MzdjMCwKKwkweGJjNTE3Yzg3LCAweDk0NTEyNzVjLCAweGZjMmRkNDUzLCAweDQ1NjI5ZTEyLCAweGU1MThkZjhlLCAweGM1M2Y0NzJiLAorCTB4NWQ4ZjIzOTYsIDB4MjNkNjZmODEsIDB4OGQxMDZmNmMsIDB4NzM5ZmI5YmQsIDB4OWRkZTUxNzYsIDB4ZTFlM2FmZmMsCisJMHhmZDhmMzY5OCwgMHgyNWVkNzEzNiwgMHg3NWZlZGY5YSwgMHg4MjA2OWUzMSwgMHgxYmNlZWNiNywgMHhiYTUwZDQxNywKKwkweDEwOTQ1MmQwLCAweGRmNzA0ZDU0LCAweDU3NWQ0YTk2LCAweGY2MDc4YmZhLCAweDljZWU3OTI1LCAweDRlYmI4MzRkLAorCTB4Y2FlYWRiODMsIDB4NTBlN2VlMzQsIDB4Nzk3NDFiYjgsIDB4ZWIwYTE3ZTUsIDB4Zjk0N2ZjODMsIDB4ODFiMWZkMTcsCisJMHg2NjFmMjliYiwgMHg3NGMxZjhiOSwgMHgxNjM5NWI5YywgMHg4ODZjOTNiNiwgMHg3YTQ1YmRhMCwgMHg5YzFhM2JlNCwKKwkweDczYmVkMjhmLCAweDM1ZjdmMWM0LCAweDIxMTg5ZWY4LCAweDY4M2UyN2RiLCAweDUwN2VjMDA5LCAweGFmMGY3NjM0LAorCTB4NGVkNTEzZDMsIDB4MTU2MzRhOGYsIDB4NzIxZGI3MGIsIDB4YjJmMGE5NTAsIDB4MzFkN2ZjZmUsIDB4NGFkN2RiN2YsCisJMHhmNTRlNmFmMywgMHhkZGJjMDdkZCwgMHhmZTQ5NmYxYywgMHgwZGYwZTE4MCwgMHg2Yjc5MGE5ZCwgMHgzZmM3OWNiNCwKKwkweDFlNzkzNzkwLCAweGM2Y2I4NGQzLCAweDZiNTg5OTQyLCAweGNkMzFmYzgxLCAweDUwYjJhNzI1LCAweGJhNjNmYjkxLAorCTB4ZGUzMGRhZjAsIDB4N2FlM2UxNGMsIDB4N2JiNzlkZWYsIDB4MDdiYzRmYTEsIDB4YmVlMDg4NWQsIDB4ZmJmOWY4NTEsCisJMHg3NGUwMTExYywgMHhmZDcyMDg5ZSwgMHhlNzJiNDQ5YiwgMHg3ZDEzN2M3NSwgMHhkMjRiZGNkYywgMHg1NDdkMjdjNywKKwkweGMwNTZmZmM2LCAweGVlNjQ2ZWZkLCAweGM3OWEzYTgwLCAweDY1MDY4N2Q0LCAweGRjZDU3ZWIwLCAweDVkZjNmMTliLAorCTB4ZThkNTRmNzAsIDB4NmZlZmY2ODYsIDB4YmZkODhlYjEsIDB4Njk5ZmE4MzMsIDB4ZGZlYzg0MzcsIDB4ZjVmNWJkZjEsCisJMHhmYjQ3ZjhjYywgMHhhNzQ3NDhlOCwgMHg0YmVjZTRmZSwgMHg1YjRlYjg3OCwgMHg0YmJjZWJkMiwgMHhjMjEyN2Y1OSwKKwkweDhmZDFmMmM1LCAweGE4NWI3ZGI0LCAweDVhMmY0NTNhLCAweGQyNmUyMzlmLCAweDg5OTYwODk3LCAweDYyMjU5NjYzLAorCTB4MTBhZmFmYmUsIDB4M2FkMDE1NmYsIDB4MTU0NjNlYmUsIDB4Y2JkMzVjMGQsIDB4ZmQ2OGE2ZWQsIDB4ZTEzZmU5NGQsCisJMHgwZjViZDgzMywgMHhlMWFmNjA4YiwgMHg5MmYwYWVkNCwgMHg4MjE4ZDVlZiwgMHhiZGJhOGE3YiwgMHgyN2NhOTYzMSwKKwkweGM2YmQyN2Y2LCAweGVmYWVlZmMwLCAweGZkMGFjM2I1LCAweGYzNzQ4NmVlLCAweDY2ZDk0OWY3LCAweDY4YjI2N2ZkLAorCTB4OTRmZTMxNTIsIDB4ZmI3YWU2ZTEsIDB4YjNhMjI3ODEsIDB4ZmVhNTUzZjcsIDB4MjE4ODg2MjIsIDB4MGI3YWYyZGYsCisJMHgxZDNlNzE4YiwgMHgyZmRhMmU5MywgMHg2OTExMWMxMCwgMHgyZWIxOGZiZSwgMHg3NWZmMjdjYiwgMHg1NjE1YzYwMSwKKwkweGI3ZWE5ZjM5LCAweDFkZWJiNjU1LCAweDI4OGI3OTI3LCAweGE3YWM5YzUwLCAweGNhNTMyMjkzLCAweDRhN2ZjODI1LAorCTB4ZDNkMjAzZjIsIDB4Y2Y0ZTZlZjUsIDB4ZjI4Zjc5ZDIsIDB4Y2UxZWY1ZjMsIDB4OWQxNWE0MTcsIDB4NmIyNWJmNDAsCisJMHg3ZDYyYjczZSwgMHhmODk3MGNlZSwgMHg5YTY5NmYyZSwgMHg3NjJhYjAwMCwgMHg1YTQ0MWNiNywgMHg4MDlhMmMxNiwKKwkweGExZDE3NjYzLCAweGVmNDg4M2RhLCAweDZhZGJkNGVjLCAweGUxZDNiZTU5LCAweGQzYTM0NWJlLCAweGZkYTZhMjViLAorCTB4ZTFkNjg3MzAsIDB4ODdhYTNkOTYsIDB4NGRhNjAzZjMsIDB4NzkwYmRjOWYsIDB4YTI3YmU3MWIsIDB4NDQ0YmFhYTMsCisJMHg1NDU3MjQzMywgMHgwMTJmZGVhYiwgMHhkYjZmNzc5NywgMHhkZjlhNzhjMSwgMHgxOGEzZjUyNywgMHhiZGVhY2ZlZSwKKwkweGZhOTlmNzBjLCAweDRhNGU5Yzg5LCAweGU4MWJmYTJiLCAweDY3M2UyYmNjLCAweGY2ZjI2Yzc5LCAweGQ1MTI2YjM2LAorCTB4NWUyYWY0MmYsIDB4YmQ2YmRiZWMsIDB4ZmRhMDEwMjIsIDB4Y2YyNmRlYjcsIDB4MGU3NGY1ODEsIDB4Yzk4ZjFmNjAsCisJMHhhZGU4ZjY5OSwgMHg2N2RhN2MwMiwgMHg2NjcxYTM0YiwgMHgxMGE0YjBkZSwgMHg1NTE5NGNlMywgMHgxYmJkNDU2YywKKwkweDIwMTkyMWJmLCAweGJmNGU4YmE1LCAweGY5ZjVlZThiLCAweDc2ZWI2OTU3LCAweGYxODU2NWVlLCAweDJkMzNiMWQ4LAorCTB4ZjJjMTcyMDYsIDB4OTA3ZDY5NWQsIDB4ZjVkNGJmMTIsIDB4YWRlMDQ4ZGQsIDB4ZTE4NTkyZTMsIDB4YzExYTM4ZWMsCisJMHg2ZWRlODZmYSwgMHhlNjQ4YWVmOSwgMHhkODA3Y2IzYiwgMHhiNzYwYzIwMywgMHgyY2ViNDMzYywgMHg5OWU2ZjIwYywKKwkweDM2ZTI3ZTY3LCAweGUyNjcyYjllLCAweDE4ZmFiZTVhLCAweDkyMmZlZGZjLCAweDczNjQ5MWJmLCAweGJmZjAxMWVhLAorCTB4YTAzY2ZkZmUsIDB4OWM5YWYzOTMsIDB4MjQ0NjdhNGQsIDB4Y2Q2YWJmY2UsIDB4ODRmZTA4YWUsIDB4NjkwODk5ZmMsCisJMHg2Y2Y5MWRjZiwgMHgyZmVjNThkMiwgMHg0ZTFjNDc4YywgMHhmMzJiZmNlOCwgMHg3ZjUyODdkOSwgMHg2ZjFhZWVlZSwKKwkweDhmYzJjYjViLCAweGI5ZmNhMTFmLCAweGEzNmZjNTgwLCAweDY4OWNlOWYzLCAweGYwM2JmZjM5LCAweGI2NGVjZGRmLAorCTB4MTBhOWRkZWIsIDB4Yjc3ZjM4M2MsIDB4OTY3Y2UzZjQsIDB4YzNhODhkNjIsIDB4YmMwMjJiZjksIDB4YjcxNGIzYmYsCisJMHg1NWY4OGViNSwgMHhmNzBmNzNlNSwgMHg0NGJkZmQwMywgMHhlNTQ1MTgzOCwgMHg2NDhiYWQyZiwgMHhjZDkyZjY3ZSwKKwkweGZkMGVhYzczLCAweGZiZmIyYTNkLCAweDNkM2ZiZGNkLCAweDNkZTkxYmJlLCAweGM1M2ZmOTU1LCAweDMxYzVhNGYyLAorCTB4YjU3ZWNiZmUsIDB4ZDNkYTA4NjQsIDB4NTJmYTJlZjksIDB4YThiZjRmN2YsIDB4M2Y2OWMzMDQsIDB4NWZlZjM0ZTcsCisJMHgxYmUwOTdkOSwgMHhkMmNkYTFiNiwgMHhjZGJjZDI4ZiwgMHhhMWQyMDM0YSwgMHgwNDM4NmUwMywgMHg2OTBkZjNiYiwKKwkweGIwNWY2ZTZlLCAweGMyNGQ0NTNkLCAweGY4MTdlYzM2LCAweGVlN2MwN2Y4LCAweGVjODFlNTliLCAweGY2YzdjZmU2LAorCTB4YzE3MjVkMTMsIDB4ZjRlNWE1MTAsIDB4MmMzNTgyNDYsIDB4OGZiZTY4ZjksIDB4ZjNjNGQ3ZjEsIDB4ZmE3N2I1ZDksCisJMHhlNjA0ZjNmYiwgMHhlMDA3MTI0MSwgMHhmODdiYjYyZSwgMHgzN2Y4MGExYywgMHhmOWNmM2Q2MiwgMHhkN2FjM2NiMiwKKwkweDA2MWZmOTE1LCAweDI1ZjM5ZDlkLCAweGJkMmU3MDc4LCAweDU1ZmM3YTQwLCAweGNhY2M3ZmE4LCAweGYzNzE3Y2YzLAorCTB4ZWJiMGQxYmIsIDB4MWM3ZTkwYzQsIDB4NWU0ODdmMGUsIDB4YWZkNDA0ZmIsIDB4N2UxNmUwMWEsIDB4YjFlMDNmNmEsCisJMHgzZjAyMjZlYiwgMHg2ZDc3M2JkNSwgMHgxZDJhN2VlNCwgMHhlNWI5ZTgxZSwgMHg0YzFlMmViYiwgMHhiZDc4OWM4MiwKKwkweDBlODA2NGYwLCAweDJmZmNjYTc3LCAweDJhM2Q3YmM3LCAweGUzN2NiNTRkLCAweGE0N2YzMjk3LCAweGE0NDVmMzg4LAorCTB4YmY1MTVhNzUsIDB4MGY0N2NhNTQsIDB4Njg5ZmU3NjksIDB4YzhmZTY1Y2QsIDB4NWFlZWVkYTQsIDB4MzE1MjVmYWYsCisJMHhmOGE3ZDdjYSwgMHhhZGFlYzJmYiwgMHhkZTc0OWI5ZiwgMHhhYjYxYTU1NSwgMHgyM2ZiNjVkOCwgMHgzMzI1ZTc2MywKKwkweDc5ZTdiZTVlLCAweDJkY2VkNzY3LCAweGVjODdiZmJkLCAweGZkNGUxZmMyLCAweDNiMDM2Y2MwLCAweDNjYmIwNmZhLAorCTB4N2YxMGI3YTcsIDB4ZTdlOGJkMDEsIDB4MGJmYjhkMzQsIDB4ZWY2YTVmZWMsIDB4NTI0ZDNmMDUsIDB4ODQ5ZDljOTUsCisJMHhjMjg3YTQ4ZiwgMHhiZWY4Y2U1OCwgMHg1OThlY2ZlMywgMHgyZWI2ZTdjZCwgMHg0ODQ0ZDU2NywgMHgwNTY3YzgzZSwKKwkweGU1MTg1ZmI1LCAweDViZjMwYmJiLCAweGMyZjM5ZGE4LCAweDFjODZjZWVhLCAweDdiY2EyMzMyLCAweDNhNTdiZTM3LAorCTB4MDczMTkzZGEsIDB4NDVlZjNmM2EsIDB4YjkyNTVhYmUsIDB4NzcyMGNkMmIsIDB4ZDdiZWUzMzksIDB4ZTUxNzU5ZjksCisJMHhiZTdjYzY2ZCwgMHg5MWIxZmQ2ZiwgMHg1MjBjNjcwNCwgMHhhZDIyY2Y1ZCwgMHg5YzdlNWJhMywgMHhmYzA1YmRiYSwKKwkweGM5MzA4MWY4LCAweDk4MGFhMzhmLCAweDBiZjNlOTFmLCAweGRhMTVmZmVkLCAweDMzZTIzZWY3LCAweGUyNzlkMWFmLAorCTB4NzM4ZmRjMjMsIDB4N2FmMmIxOGUsIDB4M2NhOTZhYmUsIDB4YTE3MGU3NDgsIDB4NmM4NDAxMWMsIDB4NzljZTFkOGQsCisJMHg2ZmUxMTQ2ZiwgMHhiZTE1NTNiYywgMHgzZDQ1ZjQ2ZSwgMHgxZTdhZjVhNSwgMHgyYmQwOTlmOCwgMHhiMGFmNTRkMiwKKwkweGZiMWRhYzU3LCAweDViY2VmYmY3LCAweDhkNDdkNmQ1LCAweGJiYTlmOWQwLCAweDM3NzY3MDk3LCAweDViY2YzOTZmLAorCTB4MDFmNDQ3YzIsIDB4ZGYyYWM2NWUsIDB4NWIwZWJlNmYsIDB4YzNhYzQxZDEsIDB4OWYxZTY3MzgsIDB4NTM5Y2UzOGIsCisJMHhjMzA0Zjk4ZiwgMHg0M2RmMTg3ZiwgMHgxZjNhMTllNywgMHhmMjdlZjhlMSwgMHhlMTE1OGZkMiwgMHg3ZGZmNjBiNywKKwkweGRhZmI2NzZlLCAweGQzZWI1YjVlLCAweGVlN2MyNWJmLCAweDgxZWQ5MjVkLCAweGYwMDVlODlkLCAweDY4Y2ZmMDVlLAorCTB4N2JiM2NiM2IsIDB4N2MxZjg0YTMsIDB4ODRkNGVmNjUsIDB4MmY0NWVjMDAsIDB4ZGYwNDRmNDEsIDB4Nzk2NDJkZTgsCisJMHg3N2JmYWNiOCwgMHg3ZjUzOTUwZSwgMHg1ZjY4YzJmZCwgMHgyZjM0NWVjMCwgMHgwNjlmZWI0MiwgMHg3ZDE1ZmI0NiwKKwkweDUyODM3ZGI4LCAweGRhMGU2NmZiLCAweGJlNjQ4OGFmLCAweGY5MjAzNDczLCAweDcwNmM3Mzc4LCAweDliZGY0YTllLAorCTB4YTgxNGNmM2YsIDB4ZDYwNDU0NzcsIDB4ZWRkZWEyYTQsIDB4ZTU0MzVmZDIsIDB4NmZkNDM1NDksIDB4MTIyMTkyZjMsCisJMHhmOTUxZmZjZSwgMHhmM2NlNjhkYywgMHgzMjczOGRmNiwgMHg0Y2ZiNjcxZiwgMHg1ZjZmNTRmMywgMHg2OTdhYWZmOCwKKwkweDUxYmNkNWViLCAweDNkODNmNzk2LCAweDk0MjllNTE0LCAweDliNjNmNGE3LCAweGFiNTczZmFjLCAweDk3NDY5MWY3LAorCTB4MGY5OWNmYjQsIDB4NWE0NGE2ZjgsIDB4ZDJmZGU3NDEsIDB4OTlkMmMyNGIsIDB4YzJmYjc5MjksIDB4NTk0OGYzZWYsCisJMHhlNzI4ZGIwNiwgMHhjMjlmNWM1NiwgMHhjYmQ5YTNmNCwgMHg1YjdjNmI2NiwgMHgxYzBkMGZlZiwgMHhjYjJmMjEyMywKKwkweGI3MGIzOWJmLCAweDY3OWU4Mzg0LCAweDQxYjc4Nzk2LCAweGJlNWEzYmVlLCAweGZiN2EwYTMyLCAweDBjMWE5ZjRjLAorCTB4YTMzOTVjODMsIDB4YWYyOWRiZDAsIDB4YWY1YzYyYTUsIDB4ZDc0Y2I3MWMsIDB4YzBhNTgyZmYsIDB4MGVlZGNiZWIsCisJMHhmN2NiMzc3MSwgMHgzZWEzMDJjMSwgMHg1NTZmYWZhNSwgMHhhMzc4OThjYiwgMHgyNzYxNWNkZSwgMHgyY2YwNDJmZSwKKwkweDlhNmRmNmQxLCAweDdkM2JkN2QzLCAweGViZTlmNDA0LCAweGY0ZmE4ZGUzLCAweGU0MGY2NWE3LCAweGM2ZDJmZWYyLAorCTB4OGRlZjViM2IsIDB4YjkwZTk5M2YsIDB4ZmFhNzIyNmQsIDB4MGY3YTlkNzgsIDB4NTdlNzRkZDYsIDB4MjVkYjk3YTAsCisJMHhmYjZiMDhiZCwgMHhkZjI5OGI0NywgMHgwNzg4N2IzMCwgMHhkMzg5ZWFmNiwgMHgxZDZmNGMxYywgMHgxZjJjZTEyZCwKKwkweGYwOGVjYzM3LCAweGIwZDc2ZWMyLCAweDA2ZWQ4YzJiLCAweDgzZmI2YjM3LCAweDFiYTYyOGY0LCAweGVlMjhiZWZmLAorCTB4ZjMyZWQyYTcsIDB4MzA2NWNmOTUsIDB4MGY2MGJjZGQsIDB4ZTUxNWI5M2MsIDB4N2ZiMzg3MmYsIDB4OGU1YTMyYjYsCisJMHgyNGJiZjk1YiwgMHgyOWJkMmU4ZCwgMHg1ZmIxN2FhYiwgMHgzMmE1ZTk4ZSwgMHhlNWMzMWRjMiwgMHg3YTY3OGZiZiwKKwkweDU3ZGMzNjdhLCAweDdkMTI3YzAwLCAweGQyYmM1ZGIyLCAweDI1OGNjYzFlLCAweGU4ZDMxZmZjLCAweGZiMjM3YTBmLAorCTB4OThhMzZhZjUsIDB4Zjc5Njg1NmUsIDB4ZjU5ZTNjZmQsIDB4Nzk3ZjkyMzgsIDB4NDM3ZGRmM2MsIDB4N2JiM2VmMzksCisJMHgzZWM0MmVmYiwgMHhmMGM5MWU1YSwgMHhmMmM5NzMxYywgMHhiY2IxOTU2MywgMHhiN2RmZTYwZiwgMHhjNWZjMzBmNCwKKwkweGJjZWM4YWM3LCAweDU1ZWQ4ZTVmLCAweDczZmFkZTU5LCAweDlmODQxYTlkLCAweDlhY2ZhNzViLCAweDg2ZGZjNzI1LAorCTB4ZTFiYWE4ZjksIDB4ZDRkZGU0YTMsIDB4NTU5NWZjY2YsIDB4N2U2ZWQwOTMsIDB4NzA1M2VkYzUsIDB4ZjY5YWY2ZGUsCisJMHg0MzY5ZmIyOSwgMHg0YWZjZjNmNywgMHg5N2Q0N2ZiMywgMHhmOThjOWRlZSwgMHg3NjA3NjRkNSwgMHgxZTdlYTQxYywKKwkweDExNmE3MzljLCAweGVlOWZkM2Q2LCAweDNlZjU4NjliLCAweGUxN2Q2ZjZmLCAweGViNzcwNDRmLCAweDVlYjIzZjhhLAorCTB4NmZiNDdkNzQsIDB4ZDg1ZmJlMjYsIDB4NWZhZTFiZjMsIDB4MTZiZmYyYmQsIDB4YjZhZmNlNDEsIDB4Y2ZkMTdhNGEsCisJMHg3ZThkMWFlMywgMHgxZTZmODY0NSwgMHg3Y2FlNTdlYSwgMHhjODgxZjU5ZCwgMHg3ZjkyMjNlYywgMHhmOGZkZmVkZSwKKwkweDViYmRlOWNlLCAweGRkYTg1MDVlLCAweGQ1YmQ4OGQyLCAweDVjODFhYTljLCAweDk0Njc2YjljLCAweDA2OTJiNDYwLAorCTB4ZWQzZDRhN2MsIDB4OGQxODJiYWMsIDB4YTQ1OWYxNzUsIDB4NWI3NGI4OWMsIDB4NGIxODFmODgsIDB4N2ZkOWEwOTEsCisJMHgxNmQyZGRhOCwgMHhmMjQyYmYxOSwgMHgxOWY0MWQ4MiwgMHg3ZDI5N2Y1YSwgMHhmM2RmN2FlNywgMHg5MTY4ODU3YiwKKwkweGRmNzc2M2RmLCAweGY3NWNiNTdiLCAweGZjMzg3MDYwLCAweGIwOWIxOWFlLCAweGZkNzZlN2VlLCAweDc3ZThkMzI2LAorCTB4ODcyZjRkMGQsIDB4YWNmZmNlNTcsIDB4ZWFjZTVmYjYsIDB4YmRiNjY1ZmIsIDB4YjkwMDVlZDMsIDB4N2QzM2ZjZWIsCisJMHhmZTc2NzQ0YywgMHgzZjljYzFjOSwgMHgxMTJiYjRhZCwgMHg1NzdmOTc0YSwgMHg3MjQ2NWE3OCwgMHg2NWI3OGQ3YywKKwkweDA3ZTdlNDI0LCAweGUzNGJlZmI1LCAweGFmODI0NjViLCAweDM4NGU3Y2U5LCAweGZmNTk3MjVhLCAweDg1Yzk2YWNmLAorCTB4NDdmM2FiYmUsIDB4Yzk5MmQ0NTEsIDB4OTkyZDAzZGYsIDB4NDU4MmZmNjgsIDB4OGZmODUzZGEsIDB4M2E3OGE4ZTAsCisJMHhkMmRkZTM2OSwgMHgwY2I3ZTEwZiwgMHgyNmU4N2U0NywgMHgxYTcxZjVlNCwgMHhlOTFmMjVjMiwgMHhhNThmYmU2OSwKKwkweGY5ZTYzYjRiLCAweGJkOWJmNjM5LCAweDdhZDA3ZjU0LCAweDcwN2NhOWJiLCAweDlhZGY5Y2MwLCAweDAzZTdlZDJlLAorCTB4ZmE2ZmUyNDMsIDB4YzNmYmVkYTksIDB4MjEzYzhlNzAsIDB4M2ZkN2Y1YmEsIDB4ZDRmMzhkYTMsIDB4M2M3MTlkNTMsCisJMHgwYWNmYTZhYSwgMHg2ZTFmNGViNywgMHg4MGRiZGYyOSwgMHhmMTNhOGZlZiwgMHhmMTEyNmI3ZCwgMHg2Mzk4YTVlNSwKKwkweDllNWZjZjJhLCAweGZiNDk0ZjY3LCAweGJlNzkwYmNkLCAweGU3MTc5YzI0LCAweGZmODIxNzgxLCAweDY3Y2E1ODg1LAorCTB4Nzg5MmJlNDMsIDB4M2UzYWYzZDUsIDB4ZjJiZmU3NDMsIDB4YjA0OTQ1YTMsIDB4YWU5NDdlZGYsIDB4N2QzY2Y5ZGIsCisJMHhkZTNhOTc0MCwgMHhlZmE0NmMxYSwgMHgyZTNmNDM2NCwgMHg4NTY5MzgyZiwgMHgyYzQ5ZWNkZSwgMHhkYWVjMWFiMywKKwkweGQ4MWNmM2ViLCAweGU0Mzc4YjU3LCAweGQ2NzQ4YzM5LCAweDEwZTBhZGIwLCAweGVjZTIxYzQ5LCAweDIwMDdhYjM2LAorCTB4ZjcwMzU4MzcsIDB4ZDg2ZjdlNDIsIDB4MDVmOGI2YTYsIDB4NTRiYzNiOTcsIDB4YzBmM2FjZmYsIDB4NjhiN2E4ZGIsCisJMHhlNDNlNmM0MywgMHhlMmZkYmQ2ZCwgMHhjYjEyMjNmNSwgMHhkZDBlNzAwYywgMHg5Yzg3NWU2NiwgMHhkODdlNzMxNiwKKwkweDA0ZmU3MzZlLCAweGZmZGU4MGNlLCAweGEwYmNiYjdjLCAweGM4NzA1ZjM5LCAweDgzZTRmZjljLCAweDljODE2NzViLAorCTB4YmRmZjU1Y2IsIDB4M2Y4OWY0MmEsIDB4ZjM4NDM4NGQsIDB4NWUxN2QzZjEsIDB4MmNmYWM2OGMsIDB4NDFkOTRiZmQsCisJMHg3MWExNDllOCwgMHgwYTZlYjQyMiwgMHg1NmZmMDhmNCwgMHhiMmUzZTk4NSwgMHhmODFlOTE3OCwgMHg4MTBmMWU4MSwKKwkweDkzYTQ2MTlkLCAweDY4M2ZlMTBhLCAweGZlYmNiOTRkLCAweGNiMzJkMTE5LCAweDU5NTU3NDRiLCAweDY0ZTBiY2I3LAorCTB4NTdiZjU3NDEsIDB4NDNiM2FjYjYsIDB4YjcxZDBiY2UsIDB4OWMyZmZkYTcsIDB4NmFlYzM3NWUsIDB4ZDk2NGEzYzUsCisJMHhjNTYzNzU1NSwgMHhkNjJkZjgwOSwgMHhmNDAxM2JiZSwgMHg4NTRiZmM1NywgMHhlN2UyOGFlNSwgMHhiZTBhYmQwNywKKwkweGNlNjNiNmRmLCAweDlhY2U5YzBkLCAweGVkZDBmOGM4LCAweDJhZjc4YjdkLCAweGJiY2EyOGMxLCAweDVkYmE0OTQ2LAorCTB4N2Q2MTVlYjgsIDB4MWNkMWE0YmQsIDB4MzZiNjU3NDcsIDB4ZDlhNmRlMjQsIDB4Zjc3OGJlNWMsIDB4OWY4NmZmZmUsCisJMHgxOGYxZGNiZSwgMHgxZTVjMzNjNywgMHgwNTc4MTgyNywgMHhhN2M1NWI3YSwgMHgxNTNkZWQ4MiwgMHgzMzBkYmY5YiwKKwkweDJkNzljYjk3LCAweGJmZTFlN2Q0LCAweGFlZTFlMzk2LCAweGNmM2E1NTkyLCAweGQwYzg5M2I3LCAweDU3NGJmMGY5LAorCTB4ZTEwNjZhNTEsIDB4OGRlNmFhZmQsIDB4YmQ5Yjk0YWEsIDB4NzU5N2VjYzUsIDB4YjBjZTM5ZGEsIDB4OTE4MjIxY2EsCisJMHgyOGExY2YwNCwgMHhkZjQ1ZDdiYiwgMHg2MjhmYWUyZiwgMHgxODUxNjE3OSwgMHg5Y2Y5OWZjOSwgMHg0MzhlNzA4YSwKKwkweGRkYTBjNGY0LCAweDk2NTQ3N2E5LCAweDI1ZTJhYTgzLCAweDU3MWVhYTFlLCAweDU2YzViMDAyLCAweGZjOGE0OGMxLAorCTB4MDRiZjMyMTMsIDB4ZDI1NTI2ZGUsIDB4M2YwMGQ3OGYsIDB4MTc5OGNkZDYsIDB4YWI2ZjUyNGQsIDB4MDNmNzA2YjQsCisJMHhjMGU3OWQyZiwgMHg0YWJkNzMzNiwgMHgzOGQxZTc5YSwgMHhlZmU2NTljOCwgMHhlYjlkYTJkNSwgMHgzNmZlZWNkNywKKwkweDYwZGRmOGNjLCAweDUyN2Q2NWRmLCAweGM4NTU2YmQ3LCAweDdhYTcwNDMzLCAweGIzY2IwNDQ3LCAweDQwMjM5OGM0LAorCTB4ZWYxNGFiNTcsIDB4MjkxNTBlYzMsIDB4ZWZhMGUzOWQsIDB4MmY5NjRlMjUsIDB4ZTc5NDZlZTYsIDB4ODM4YzMzNDcsCisJMHgwZGQ3ODM5MCwgMHhhZTY3Yjk2NiwgMHhiZTA0Y2RlMiwgMHhkNjcwYmFjNCwgMHgxZmRjYTlhNywgMHg2NGU1OGJkZSwKKwkweDRlNDg0Mzk2LCAweDdkYWEzOTY2LCAweDEyZTM5ZDhlLCAweDgyNWFmMzliLCAweDFmOWFjNzkwLCAweDBhZDBmMTQ4LAorCTB4ZjNlNDdmMzIsIDB4OTY3MDllZTgsIDB4NGFhNzlhN2IsIDB4NWQ3OWE3YjksIDB4MzFmZjZlMWYsIDB4MzkwYmViNDAsCisJMHhmOWI5ZTI1YSwgMHhiNzFlMWM5ZSwgMHg4OWRiMmE5ZiwgMHgyMDBmNTIzZSwgMHg3YTEzM2FiOSwgMHg0MWU1YzEwMiwKKwkweDY3NDcyZWI5LCAweGIwNGFmYWM1LCAweDliZmNmYWVlLCAweGUwYTNkYjYzLCAweGYxZTUxMmM3LCAweGQ4NmU0YmRmLAorCTB4ZWQ4NzlkYTIsIDB4ZjAwM2MyZWIsIDB4OGE1NDljNTMsIDB4ZjYwYzVhMGUsIDB4ZTQzMjViYTksIDB4YWM3MjMxZjksCisJMHg4ZjU2YWI3NywgMHg5NjY1MTlmZCwgMHg4MGZmNzdhOSwgMHhkMDdiMjllMCwgMHhlOTQ4NmVlMiwgMHhmNWUxMDc1YSwKKwkweDI3ZmU2MjY2LCAweDgzZTc4NWQ3LCAweDk1OGU0NmVlLCAweDc5NjNhN2Y2LCAweDBlNDc5ZjkyLCAweDczYmYxYzE3LAorCTB4ZWRlZmQ2YmIsIDB4OWE1MzE2MTksIDB4NDhmNDQxMTgsIDB4OTQyYzljZmQsIDB4ZTFhOGVkZjYsIDB4YTQwNzZjNDUsCisJMHhiYmI5YmEzNSwgMHgxOTM1OTAzOCwgMHhiMzJhOWNmMiwgMHg5YWZlZmQxNywgMHhhNGU5ZTA2ZSwgMHhkZTUyZjE4YiwKKwkweGQ5NGNiOTNkLCAweDcyZjJlMTI0LCAweDVmYzhkZmJjLCAweGYwZmRiMzg1LCAweGU4ZGU3NmE0LCAweDM0NzQ0MWViLAorCTB4OGQ3MWNmODIsIDB4ZThkM2FkOWYsIDB4NzRjZjVkNjYsIDB4Yjk4YmEyNjMsIDB4Mzc0MWI3OTAsIDB4ZDhiOWU0NzMsCisJMHhmYWRhNTc0OSwgMHg3YWYwZGQxMiwgMHg0ODVkMTNiNywgMHg2YmUyMTFiYSwgMHg0Yjc0MmZiNCwgMHhkZjQ0M2I3OSwKKwkweDdiYjdkNGVhLCAweDBlODhiN2QwLCAweDZkZThjODllLCAweDA3NDIxN2E4LCAweGYxMTgxYWMyLCAweDI1MmNmYzhmLAorCTB4MmE0NzYyYTMsIDB4NTY0OTA0YjQsIDB4MmNkYzQ3ZTEsIDB4ZDdjNjQ2Y2UsIDB4NGFjMGQ2NWQsIDB4NTViZmE3ODIsCisJMHhhYjAwY2JhZSwgMHg2NTNhM2JhNCwgMHg1Y2Y5MTFmYywgMHhkOWY4OGJkZiwgMHgwYjE3ZmJlMiwgMHg0ZTJmZDUyZiwKKwkweDRhYjc2YzEyLCAweDI2MjZmOTI3LCAweGE0MDlkYjhlLCAweGIwYWEwNzcwLCAweGY2OGE1MGU3LCAweGZmYjIzMWM1LAorCTB4YzQ2ZmEyNjIsIDB4NWU3ZjUxYjMsIDB4ZGNjNjljNGIsIDB4MmE3ZmMyNDYsIDB4ZmI0MDdlNTgsIDB4ZWY2ZTdjZTgsCisJMHg1ZWY2YzhiNywgMHhkMzAzYTUyYiwgMHg1ZjZhM2VlNCwgMHgyYmY4YzYxNSwgMHgyNjQwNzNiZSwgMHg1OGQyNjRlOCwKKwkweDY2MjQ5ZDMzLCAweDRmNDEzOTRhLCAweGJhZGQzMzFiLCAweDdlMDg5MGRjLCAweDk4MzhkMjUwLCAweGYwODY5OWNmLAorCTB4ZDg1ZGFhYTIsIDB4N2Q0OGNmYTcsIDB4NGRmNTc4YTMsIDB4YmUwMDQ3OTMsIDB4ZDgzZGUzNjcsIDB4ZWNhN2E3YzIsCisJMHg0OTRhZmY2MCwgMHg3ZjFmOWNlMywgMHg1YjY1M2QwOCwgMHg5OGRmN2YzOCwgMHg3ODBmN2JlOSwgMHgxN2I4YWQzZiwKKwkweDI1MGZhMmVjLCAweDI3YjE1ZjMzLCAweGNiNWY3YjUyLCAweGEzYmY3M2Q0LCAweGM3N2Y4YTc0LCAweGE2MjM5MGRiLAorCTB4ZmViOTUwY2MsIDB4YjllZDIxMTQsIDB4MzM4ZTUxYTIsIDB4MzViOWZmZDksIDB4M2M5YmZhOTEsIDB4OTRmMGUxNWEsCisJMHhmMjU3NzBiNiwgMHhiNDU1ZjgzMiwgMHhkMWE2M2RmNSwgMHg5OGI4NDM3NywgMHg3MDEzOWNmZCwgMHhjZDRjYzgwZCwKKwkweDI0ODIxZjg2LCAweGU0ZTQ2ZWQ0LCAweGZkNWE5OTAxLCAweGM4MDZjYTMxLCAweGM5YzcwMzQzLCAweDQ3ZDdhN2ZkLAorCTB4MmQzN2U4M2YsIDB4Y2ZiN2VlNTMsIDB4ZTdhNzdkYjQsIDB4YmY1Y2FmMDksIDB4NWI1ODRkNmMsIDB4NWI1MjM0NWEsCisJMHhmM2E1MTA3MCwgMHgwMzllYzZiMiwgMHgyYTk0OTk5ZiwgMHhkZTA3YWMyNiwgMHg0ZDhhYWE3ZiwgMHgzMTdiNmYwYywKKwkweDRjYTg4NWYzLCAweDhmODJmODM3LCAweGZiYTY1OTE0LCAweGVlOTk4MzZkLCAweGI3YjRjNmRiLCAweGI2Zjk0OWRkLAorCTB4N2VkMjM5MmQsIDB4MGJmM2U5YTcsIDB4ODJlNTgyNWQsIDB4ZWY5MjMxYjYsIDB4NjQ4OTZmYjUsIDB4ZDVjYzczZmUsCisJMHhlZDI3MTUxYSwgMHg5N2RmYWM1ZCwgMHhkN2YxMjQ2YSwgMHhlMTdiODZiYSwgMHhkYTc1MmUzNywgMHgyYzdlNzBkYiwKKwkweGZiM2E2MDdjLCAweDQ5OWI0YmZiLCAweGZkNWM0N2JmLCAweDRmN2ViMzVhLCAweDY2NTg3ODdhLCAweGE4N2FmYTM3LAorCTB4MDE5YTBlNWUsIDB4NTVhZDk1MWQsIDB4MzYwNzBlOTgsIDB4OTk3ZGVjNzgsIDB4Y2MyZTI5Y2YsIDB4NGMxOWNjYWYsCisJMHhmMzJmZmYwNywgMHhmMDVjNzM4NCwgMHgzN2ZiN2E2NSwgMHhiMDkxZjc4NCwgMHhiYTBlMGIxZiwgMHhkN2M4M2ExYSwKKwkweDM3MTZlMzBiLCAweDFhN2ViMzE1LCAweGZlNjNlZDk5LCAweGJjMjU1MDM1LCAweGQ0Y2YxZDEwLCAweGVjMTI2ZmU4LAorCTB4ZDY0YmUwYTAsIDB4OTdkOGJlZDYsIDB4ZGY2ODY1YWYsIDB4NGU5OTVjZTMsIDB4YmU3MGViYTYsIDB4NzM2NmQwNmYsCisJMHhiNmJlMDI2NSwgMHg5YzE2ZTE1NSwgMHg0YTU2OTNiNywgMHhlNzdkYTZmYSwgMHhiYjgwYmRjMCwgMHhmYzAyMjJhYywKKwkweDdlZDZiOGUwLCAweGQxNmIwYWZlLCAweDc3ZjdjYTQ2LCAweDFjNTQ2YjA4LCAweGU5OGYyYmU4LCAweGZiZTU5MDNiLAorCTB4ZTlmN2ViMGMsIDB4YzgyOGM0MmYsIDB4ZDc2YmE1MGQsIDB4ZmEzNGI4NDksIDB4ZTMyM2Q2MTAsIDB4NGY5YzY5ZTMsCisJMHhjM2U0YTRiNywgMHg1M2QzYTBhZSwgMHg3NjZjNmIyMCwgMHg1ZDAzMDhlNiwgMHgxZTk4NTBjYywgMHg2MDg3M2U2OCwKKwkweDU1OTc5ZDlmLCAweGZhNzI4ZjkyLCAweDMyZjQxZmJlLCAweDFkMzA2YzY5LCAweDZhODVkODcxLCAweDc2YWJjNzI1LAorCTB4ZTIwZjBhMjQsIDB4M2I0NDNhODcsIDB4MjQxZDIzY2IsIDB4ZWEzZjgwOGYsIDB4MjdlNzQ2N2MsIDB4NDc1ZTE3NDQsCisJMHhlYjdhZDc0MiwgMHgzZDZiNjU3YywgMHhkZTc4NDY4MSwgMHhmNGUwZWY1NiwgMHhiMDk3N2FhOSwgMHg1ZWQ4NGYxMiwKKwkweDY3ZjljODlmLCAweGI2OWNkZGViLCAweGY3ZjE2N2Q0LCAweDljM2RlYWU3LCAweDhhM2Y1OWRmLCAweDdiZDQyZmYzLAorCTB4N2ViYmJmMzksIDB4YWJiZmE3MjIsIDB4ODRlZmUyMmYsIDB4M2E0YmU2MWYsIDB4OTNmOWQxZGYsIDB4OWYzYTVmNGUsCisJMHgwNWFiYTUwYSwgMHgzM2RjNjY4NCwgMHgwZmNjZjZhMCwgMHg3OTg4M2U3NSwgMHhmOGJiZjI1OCwgMHhhOWNlYmU5MywKKwkweDExM2Y5MTRhLCAweGNlYjQ1MGZjLCAweDU0MjhmZjAxLCAweDIyZjMzZWNmLCAweGRjYTNiOWUxLCAweDFkYTFmMWM5LAorCTB4MGVjMWYyNDIsIDB4OGRjZjgzYTcsIDB4MGRkOGJiNjQsIDB4MzJjMzQwZmIsIDB4ODY5ZGRiNmYsIDB4Yjk1ZTc4NzMsCisJMHhiYTA2YWMyMiwgMHg1YzM2YTliZCwgMHg3ZDc0MGQ1OCwgMHgyOWFjNWQ3MywgMHhmZGVlYmYzZiwgMHhmZjUwZmFkNywKKwkweDJkZjE4YjNmLCAweGJiMWNmYWMyLCAweDdmYTNkNGUzLCAweGRmOGZlZmE0LCAweGViMDMzYTcxLCAweDc5NmM3MDRlLAorCTB4MWVkZWUzMDgsIDB4MmFkMWMxYTEsIDB4Y2VkZGJhZTEsIDB4MDhjMGQyZjIsIDB4Y2ZlMTRmYTksIDB4MmQ3Mzg4NjEsCisJMHhmYjdkODk0ZSwgMHgzMWU3MDQzNywgMHhkYTA2MWQ2ZCwgMHhjMTQ2YjM1ZCwgMHg3NTRhYjMyZSwgMHgxZjJhYTRhZCwKKwkweGZiZThiZDYzLCAweDJhZjViNTlmLCAweDdjNjMwYmE5LCAweGZiNmEzNDk2LCAweDRjZmYxOGQ0LCAweDU3ZGUzY2Y4LAorCTB4NzhhNzVjYjAsIDB4ZTkxZjgwODUsIDB4NDFlYzJmZjgsIDB4NzFjNDExOTIsIDB4Njg1MDExYzUsIDB4YWQ5NDg1MWMsCisJMHhhZTE3YjBmOSwgMHhlNDI4ZmQ3OSwgMHgxMGVlYTU3NCwgMHg4NzNlZDVjYiwgMHg4NDI4ZTM5MywgMHhkOGQ2NzZkZiwKKwkweDkwNzc1MjlmLCAweGZlZDY4OWViLCAweGM4YzgzOGE2LCAweGY4M2I1ZWUxLCAweGViMWI2ODA1LCAweDQwNzU5MjU2LAorCTB4MjY4YjlmNjAsIDB4OTRmMWVmODUsIDB4ZDZjYmRmNjksIDB4ZTJmOGE2MjgsIDB4ZTY1NTMzN2IsIDB4YWMzMjg3OGIsCisJMHgxNGNhMGU5YywgMHg4OWE1MTM5YSwgMHg1ZTlkMjljZiwgMHgzYzcwN2Y4OSwgMHg5ZTUzNTk2MywgMHgyZjgxOTE3ZCwKKwkweDRiZGY2ODk3LCAweDc4YTYyY2IzLCAweDMyMTk0M2M3LCAweDk4MTA2YTJlLCAweDY3NzdhNTA1LCAweDMyMTdkYWE1LAorCTB4ZGM3MzczZGYsIDB4MjRiZjVlYmQsIDB4ZWE3NTdmMmIsIDB4ZTg4M2Y0NzAsIDB4OGZmNmFlYTAsIDB4ZGRiOTVhNjQsCisJMHg4NDk3MGNhMSwgMHg1OWU3NDFjNywgMHg3NGU5YzcxNCwgMHg3MmU4MmU3YiwgMHhlZmY4YTdjYywgMHhlYjNmMGM5NSwKKwkweDNlY2YxNTU5LCAweDdiZmMyY2ZkLCAweGUzMGE3ZjE1LCAweDk4NjJhOWYzLCAweDBlYzhkZjY2LCAweGYyY2U5YzhjLAorCTB4OGNhOWQ3OGYsIDB4ZDcyZGZjODQsIDB4N2ZkM2ZjN2YsIDB4NTQ3YzQ2ODksIDB4NTc2OTRlY2QsIDB4NjkwZGI0YTUsCisJMHg2Y2U1ZWRmNSwgMHhkMGY2YWI1NywgMHg5ZjAzODhmZSwgMHg1ZmNkZmIzNSwgMHhkMTRmZjY3ZCwgMHhmODk3YWNhZCwKKwkweDViZjhiNDkzLCAweGRlYWFmNzhlLCAweGMwZTM4Mjc5LCAweGQwYWZiOGY0LCAweDM3Y2EzNTc2LCAweDcxZWFhN2FjLAorCTB4YjYzZmJhMDEsIDB4Zjc4ZDlmNzAsIDB4ODUxZWNkNGQsIDB4NWQ5YTk4ZjUsIDB4ZTdjMDEzMTcsIDB4NGFhZGY2NmEsCisJMHgyNzJlMmVlOCwgMHg1ZTNkNWZiNCwgMHhkNWJmYjc0MCwgMHhjMzlmYjU4OCwgMHhjMzg0NDg3ZiwgMHhmZmFkMGZmOCwKKwkweGFmNTQ2Njc2LCAweDYyMDU0MzUzLCAweDNiNjBhZWQ1LCAweDFjNzA1NTg4LCAweDhlMmQ3MmM3LCAweGMxOTAyM2IzLAorCTB4ZTQ5ZWUxN2UsIDB4YzRmNTlhZWQsIDB4ZWRiZjQ5ZjAsIDB4MTA2M2JhYjAsIDB4ODg0MTdjYWYsIDB4NTNhZGRkODksCisJMHg3ZTc5MjBmYywgMHgwNDdkYTM5ZiwgMHhlZDg1ZjBiZiwgMHgxNzkxY2IyYSwgMHg3ZWYxNDdiNiwgMHhmZjdlZGVhOCwKKwkweDU1ZGJjNDQxLCAweDhkZDg1NjZmLCAweDMwOGUyNTU3LCAweGFhNzdhYWRlLCAweDBmZTA2MWMyLCAweGM1MGJiMDM1LAorCTB4ZDJlNzBjZjcsIDB4NDE2YWEzYTcsIDB4MTQ1YTRiNWYsIDB4YWRmODE2ZWYsIDB4ZGU5OGVlMWQsIDB4MzVkYTc4MDYsCisJMHhkNjFhNWFmYSwgMHg0NWQ3OTIzMiwgMHhmODE0ZmY4MywgMHg1Y2NlNDE5YSwgMHg4ZTdlZjdiMiwgMHhlNzdhYTQxMywKKwkweDZkZjlhZTU5LCAweDUxYjNjNzI0LCAweGNlMDM2ZjBmLCAweGQ4MGExYjMzLCAweDY1YTRiZDRmLCAweDA1Y2IzNTQ3LAorCTB4MTA1ZDIzZGIsIDB4Y2NkYjRlNjksIDB4ZDFiZTI5ZjcsIDB4OTM0NmZiYzYsIDB4NGZjMGNlZDMsIDB4YWFjZmY2ODIsCisJMHg0ZTAzMGYyYywgMHg1YWQzY2JlYywgMHhjZWRlYWIzYywgMHhiM2I2NDgzMiwgMHgwZGZiNzg2OCwgMHhhZTg4ZTdmNiwKKwkweGRhNWE0YmZhLCAweGZlYTlkM2EyLCAweGU3ZGZiYjI3LCAweGVlNDgzOWQ0LCAweDIzY2UyNWUzLCAweDNmNDczOGI5LAorCTB4ZjdjOTE5ZDksIDB4ZjlkOTNlZWQsIDB4ZDEyZjA5ZWIsIDB4YzY1YWU3NzgsIDB4ZmIwYzUyZjQsIDB4MWIyMGUwNmMsCisJMHg0MWI3M2ZkNywgMHgyNWYzMDFjNiwgMHg1YTBmZDYxMSwgMHhiNjY3M2U3OCwgMHgyN2FjMjkyNywgMHg5Zjg0ZGYwMywKKwkweDhmOWYzYjMzLCAweGY2M2VmMGI2LCAweGFiNzE3YmZmLCAweGM4NmIxNWIzLCAweGIyZWI4NDdkLCAweDViZmU4MDQ3LAorCTB4ZWQxMWZiYjUsIDB4N2ZlNWZkOWEsIDB4ZWQ2YWZmYTcsIDB4YTQ1MjliN2IsIDB4M2JlZjIzOGQsIDB4YzIwZTNkMDgsCisJMHhkNTNiZWRhNSwgMHg3OTZlZmJjOSwgMHgyZmVmOWQ5NCwgMHhiZWU2MTgyYywgMHhlOGY4MWU3MSwgMHg1MThlMzI5YiwKKwkweDA0M2Y3N2Y0LCAweDNiYzE2ZmZkLCAweDU5NmY2Y2YxLCAweDQxZjc3MzZlLCAweDM2YzM4YmZlLCAweDI4MmMxM2Y2LAorCTB4YTFmNTFjZjAsIDB4ZWQ5ZDhjN2UsIDB4NzViMTIyNGEsIDB4NmRhZGVjMDQsIDB4YThiZTUyMjksIDB4OTMzYjQzNWMsCisJMHhlODhmZGM1MCwgMHhhY2Y4NGZjZCwgMHg4Zjg0NTgwYywgMHhhNTA3OTNmMiwgMHg1MjNlYmFmMiwgMHhkOWRhZjE2ZSwKKwkweGZiZTQxM2ZmLCAweGMyZWNjNzkyLCAweGZlMmY3YjhmLCAweDVkN2VhNGU3LCAweDBlZmQyYTk5LCAweDUxN2Y2MDhmLAorCTB4Y2MxNzE5NWEsIDB4NGVkZDg3OGMsIDB4NjljYTliYTMsIDB4OWZhMDZlNTQsIDB4NGNjMTRkY2EsIDB4ZWQ2NzRmYzgsCisJMHg3Mjg5MWVkMiwgMHhmOTk1NGRlOCwgMHg0NjgzNWViMiwgMHhmZDA3ZThhNywgMHhjZWI4YTViNiwgMHgyYmJiYmNiMywKKwkweGIwZWY0MDRhLCAweGVkMjUxOGJjLCAweGRmMDliZjIxLCAweGFmMzg2NjE0LCAweGU5MjQxYTZmLCAweDA3ZjM0MWI4LAorCTB4Zjg0OGI3ZmEsIDB4ZjhlNDE3MDAsIDB4NGNhNmY2MjUsIDB4YjhmYWI5YzgsIDB4Nzg5YmEyNGIsIDB4NzhkYWIzYmMsCisJMHhhNDlhMjI0YiwgMHhjNzhiNDRmZiwgMHhkZjFlN2Q0MywgMHhkM2JmZDgyNiwgMHhjYjE4NjRmZSwgMHgxZWZiYTdjYiwKKwkweDlmZTMwMTc5LCAweGM3MzA3MjdlLCAweDA0YTViNDExLCAweGYyZTZlZDE2LCAweGFlZTM4ZTcwLCAweDA4MmMyYTc4LAorCTB4MzI3YjNmNzgsIDB4OWY1OGVkOGEsIDB4ZjYxY2E0ZDksIDB4Y2IwMjU0NTksIDB4MWVhMjg3NjEsIDB4M2FmZTgwNWMsCisJMHhlMDI5ODczNiwgMHhjMjI5OWZhMywgMHgyZGYyODg5ZSwgMHhhODBlNTliZCwgMHgzZjYzYWZhOCwgMHgxN2IxMDU0OSwKKwkweDRlOTRhZmM4LCAweGQ5ZjdkYzg0LCAweDI3NmNjMTk2LCAweDk1MGRlY2ZhLCAweGY3ZDAyOTJmLCAweDEzZWVmODM1LAorCTB4YzY3ZTBiNGQsIDB4M2ZmNGJmZjIsIDB4NmZlYTdlOWUsIDB4YWZmM2JiODMsIDB4ZGIzNjZjNTQsIDB4ZDdmNWY0YzMsCisJMHgyNDE4ZWZjYiwgMHgwYzc3MDNlZCwgMHhjYWM5N2E5MiwgMHg3ZmU5MmU0MSwgMHgzMDc5NmM4YiwgMHhmOTI5ZTc5NSwKKwkweGViMDNhZDAzLCAweDEzMWZiNDdmLCAweGQ2M2Y2ZjYwLCAweDcxNDEyN2IyLCAweGNjYzFjZjAyLCAweGRiZWYwMzVmLAorCTB4N2E3NTllYTQsIDB4NDJmZDhkYmIsIDB4Nzk0NjJmMTUsIDB4ZTc3NGZlZDksIDB4YjBlZjdjMTUsIDB4Nzg3Mjk1NDIsCisJMHhkYmRlNDU4NSwgMHg5OWVlZDBhYiwgMHhiMjY3NDQ1NiwgMHhjZGYwOGI3ZCwgMHgxNmZiNmQ3YSwgMHg4ZTQ3MWI1NSwKKwkweDAxZDZkOWZiLCAweGQ0MTA5ZmQyLCAweGYwZTQyZmYyLCAweDcxNDliODNkLCAweDJjNjllNmUyLCAweDA1Yzg2ZDVmLAorCTB4OGU2ZTJmNWUsIDB4MWE3OWY4ZTQsIDB4ODdiODhiYzcsIDB4NWNmZDlmOGEsIDB4MTE2NjMzZTIsIDB4YWU3NDA3ZWIsCisJMHhkNGFlN2YzMSwgMHg5ZGQ1NzNmOCwgMHg1ZWUwYzc1NywgMHhlNTQ3Nzg4MSwgMHhhZDE3MTJmYiwgMHhiZmUwM2U5ZSwKKwkweDRmN2FmOGExLCAweDVmNGI2M2UzLCAweDQxZjk5NDc4LCAweGM0MTdlZDI1LCAweGZjZDUyZDU5LCAweDUyOWY0YmNiLAorCTB4YmE1YzllNTgsIDB4OTg4N2VhZmEsIDB4MTM2ZGJlZWYsIDB4YjY3MDVmYjgsIDB4ZTM2OGZlZTUsIDB4ZjhkNWVjN2EsCisJMHgwZjdiNTc2NywgMHhmNTRhNWZkNywgMHhhMzM3ZmI2NSwgMHgzNmFkOWUxOSwgMHg1ZDA5ZTAwZiwgMHhmZWRkZWZjNywKKwkweDZhNWZmNTI5LCAweGYyNDJkMTVmLCAweGYzZTVlZTQ1LCAweGRjOGUyOGJmLCAweDk1ZjAyN2Y2LCAweDY3NmNlMWVkLAorCTB4N2JlN2Y1YTMsIDB4MmQ2YzY3NDYsIDB4MzNmZjMwOGIsIDB4YmYzMzg0Y2YsIDB4ZjcyYjEzMzksIDB4OWU3NDI3ZmQsCisJMHhlNzgwZWRmYSwgMHg1ZGIxZjc4NywgMHgwMmU5YmRlZCwgMHg4MGUyZDBlNywgMHhhZTFkNWZiOSwgMHhhZmRmMWFmZCwKKwkweGMwYzRmNzhhLCAweGViNDU1MzRmLCAweDdkNjhmZTgxLCAweGRmZWRjNDdlLCAweGQwZmI3MWIxLCAweDc2OGUzY2Y5LAorCTB4ZjRmYjBjMjMsIDB4OWJhNjQ4OTksIDB4YmFlNGZkMzMsIDB4MTA3Njc5OWMsIDB4YjE2ZDY3OWYsIDB4ZGUwOWRlOTIsCisJMHg2NzRiZTg2NCwgMHgxYjhhNjU2MiwgMHgwYTg3YTAzZSwgMHgzMzg3YTQ5NywgMHgxZWQ4NWE2MywgMHhjMWQ5NDY3MCwKKwkweGI2NGQ5YjY5LCAweGZjZDNhOGFiLCAweDg5N2Y0NGRhLCAweDI2ZDAxZmEwLCAweGI1OGVhOWVjLCAweDgwYzcyMDQ3LAorCTB4ZTdjYzhmY2YsIDB4Y2VmYjg4MzQsIDB4ZDA3Mzc2YTEsIDB4YmViZmNlMjksIDB4ODRkY2YyNTksIDB4Y2YzZTA1NzgsCisJMHhlM2Y2MWI3ZSwgMHg3MzNkZjBiNCwgMHg1NjRmMjY5ZiwgMHg0ZmRjYmY2ZSwgMHhkY2FhNzU4OCwgMHhlYjNmYjBhZSwKKwkweDAyZmU3NjkyLCAweGRkYmE1ZWVhLCAweGE5NzJlODlmLCAweDZlMjJmMTVmLCAweGIyZTM2OTZiLCAweGE1ZmJhMDI1LAorCTB4ODFlNmViYjUsIDB4MmM3OWY1ZWUsIDB4Yjc1ZmVlZDUsIDB4ZDNjMzJhMjksIDB4MjdmYjRlMTYsIDB4NzRmMWYyZmIsCisJMHg4YTU5YWFmYywgMHg1YzI3OWYxZSwgMHg3YjQ1ZjlmYSwgMHgyZGNiMmMzOCwgMHg0ZGIyODhlOSwgMHhhMzY1NWZkNCwKKwkweDQ5Yzc5NmIyLCAweDM5NWJmNWQxLCAweGI4NGYxZDNmLCAweDVlZmIwMmNkLCAweGI5ZGY3NjliLCAweDcwZWJmOWE3LAorCTB4NTI0ZjA0ZjYsIDB4NmQ0ZmU0OTYsIDB4NmY5ZWYyMjksIDB4YmVmMjViZmIsIDB4MGE2ZmM1ZjYsIDB4ODFmZWUyNjIsCisJMHhmYTkxYzgzYywgMHg3ZjA0N2Y3YSwgMHg3MjEwNjgxNiwgMHg5NmU3YzY4ZiwgMHg3MDRlYWVjMiwgMHhmYjMwNmU2NiwKKwkweDliMzZiMjczLCAweDliYjY0M2YzLCAweGNkM2JkOWYzLCAweGU2YmRkY2Y5LCAweDczNTVlN2JjLCAweDdiNzE4NWRlLAorCTB4ZmEwOWUxNzcsIDB4YTEwM2UyMzYsIDB4YmU4NTIzNmYsIDB4ZmE5NGNlZWQsIDB4YjdkMGYyMzYsIDB4YzZkZjQyOTEsCisJMHhjOGRiZTg3NywgMHgxZTQ2ZGY0MywgMHhkMGYyMzZmYSwgMHhkZjQyOTFiNywgMHgxYTM5ZjdjNiwgMHg3YjM1MmE5ZSwKKwkweGUzODFkNjI5LCAweGViODRmNmQ0LCAweDVmYmMwMGYxLCAweDYwNDljYzJlLCAweDUyYWMyYTNlLCAweDI0YjBiZDFmLAorCTB4NGVjN2U1OWIsIDB4MDc1NGQzM2IsIDB4MzhmNDk5ZGIsIDB4N2NhMmI3YTcsIDB4YzM3YWIyZTMsIDB4NzU2NDdiN2YsCisJMHhjNzZlMTRkZiwgMHhkZjlhZTdmNiwgMHg2NTczZmI0OSwgMHhmNjEzYjg3ZSwgMHg5ZjU1ZDY4ZSwgMHgxM2Q4ODZhYywKKwkweDQ0NGRmMjg4LCAweGY2YjYwYmZkLCAweDU1NmZjMGFkLCAweDZmZWMyYmRkLCAweDdlZTE1ZDZmLCAweGZkNzIwN2U3LAorCTB4YzdhMmVlZDgsIDB4ZGNlMzE1MmQsIDB4N2QyNmRmMDMsIDB4N2I2ZmM2NDksIDB4NmEzYjQ2MWMsIDB4YWM0ODVmYTgsCisJMHgzZjIxZTQzNSwgMHhhMWYzOWIzNSwgMHgzNWYwMjA3ZSwgMHgzNTVmNjlhZiwgMHg2ZTNjMWQzMSwgMHhiZTBiZWY2YiwKKwkweDA3NDllMjdmLCAweGExM2FmM2RmLCAweDZjYzRlZGQ5LCAweGJhNjNjYjE3LCAweDhmMjlkZjNjLCAweGMyNmNhM2RkLAorCTB4MmIyNGJkZjksIDB4MWM3N2RiOGUsIDB4ZDNkZDMwY2EsIDB4MmY0YjRkMGIsIDB4ZGFiY2IzZTUsIDB4NThhYjVmOTksCisJMHg4Y2Q5NGUzMCwgMHhhZjU5ZmIxNSwgMHg3M2U2OGM0ZSwgMHhiNjBkMTZlOSwgMHgwZGZmOTA0MSwgMHg0NDBlMGY3MCwKKwkweGU4NjhlODk4LCAweGJmMTBiOGI2LCAweGZkNTMzZjY1LCAweDQzNTNiYjYxLCAweDRjNDM5NmZjLCAweDE2ZDdkM2U1LAorCTB4MTdiNWVmOTgsIDB4MWYyYTZkNWQsIDB4ODc4Y2VmNjgsIDB4OTZmZjQ4NzMsIDB4ZDY0YjlmMDYsIDB4ZTdjY2U4YjksCisJMHg0YmQ2ODZmOSwgMHg4NDdmM2M1NiwgMHgyNWJjNTZiZiwgMHg5YTMyZDNlNSwgMHg3YjQwYjc4NywgMHhmZTFmMjM5ZiwKKwkweGUwMTRlZjM5LCAweDE2YzViY2FmLCAweDU0YmVmMzhiLCAweDlkNDQ4NzNiLCAweGI3MmU1Y2Y5LCAweGFlMmJiZjBhLAorCTB4NWRjYWVlOGIsIDB4ZWQ0YjFiYzIsIDB4MjUzNmI0YmYsIDB4NzFkZDFkMzMsIDB4MTQyNTU5MzQsIDB4MjQ3MjE5MmQsCisJMHhlNTdkMDgzNywgMHg4MjQ2Mjc4ZCwgMHg4ZGQ0YWFhZSwgMHhiZjJhMmVjOSwgMHhjNTZjMDk1NSwgMHg3MWQzZWM0NSwKKwkweGE0YWUxMjNiLCAweGY4YjRmZmYyLCAweDc1YTJjOTFlLCAweGVmMDViNjRhLCAweGJhM2UwZjlkLCAweGJkZTA0ZDIzLAorCTB4OWY2YjEzOTEsIDB4M2NiOGU2OGYsIDB4NmQ5MmZlOGQsIDB4YzFkMDA4YWUsIDB4ZjU5NTI2YzYsIDB4ZDRjZGQ4MTQsCisJMHhkOTNhMmViOCwgMHgwMTFmMTRkOCwgMHg4YzdjYTZiZCwgMHg3MTcyOTdlMiwgMHgwYmRmNDliNCwgMHg5YWExNDdjNSwKKwkweGU2OWI4ZWZkLCAweDJhOTBmMTdiLCAweGYzNmE0MGVmLCAweGY1OTJlZTVjLCAweGFmNmNiYTQ1LCAweGU3ZDdiM2RmLAorCTB4NDdkMzUyN2IsIDB4OTZiZTM2MmIsIDB4M2Y3ZDBiNzksIDB4MmU3Zjc4M2IsIDB4ZDY1Nzg0YWUsIDB4MmY3OWU2ZWYsCisJMHhkYWRmNmNiNSwgMHgxZDdiZDI5NywgMHhkNzk4NWRiZSwgMHg0NWM2YjdmMiwgMHg3Y2UzNDk1ZiwgMHg4N2M2NWRiOSwKKwkweDg5ZjliNWZmLCAweDRmYzRmY2M3LCAweGMyN2E2Y2VmLCAweDg1NDFmYjBlLCAweDFlODc2MDM1LCAweDQ2ZTRmZTVjLAorCTB4YWUxOGUyM2IsIDB4YmY5MWI2ZGIsIDB4Y2M1NmRhMmYsIDB4YmVmZDAwZjYsIDB4N2M3YWE3ZGEsIDB4ZjI4Zjg2YjMsCisJMHgxNzA2Y2FiMSwgMHg2MGZmYjNjZCwgMHgyM2NhNGZjOSwgMHhhMTRiMWM2NCwgMHhkYzM1ZmEzYSwgMHg0ZGI4YjgxMywKKwkweDY2YmNjM2M5LCAweGUzYjBlZDE0LCAweDFhM2JmZjFlLCAweDM3ZGQwOWRmLCAweDE3YTc4NzFkLCAweGFiYmQ4NmY2LAorCTB4ZGYyMGYxNDUsIDB4ODk5OTNlZDMsIDB4MGY0NDcyY2IsIDB4MzliOTJmZDMsIDB4MDg2OTcxOWQsIDB4MGExZmQ1ZWIsCisJMHg4ZTcwYmVkMiwgMHhkN2U4ODc2NCwgMHhjZjY5NTU4NywgMHhhZDEyM2M0MywgMHhkODNkYjk3MywgMHg4NWU0M2E2YiwKKwkweDBmZmJlNTk3LCAweDhkMGU3NDU1LCAweDJlZGU4N2NhLCAweDE2OTQ1NWM0LCAweDc0NGQ1NjhkLCAweGQyM2UzMzVlLAorCTB4MGI2NjBmYjQsIDB4ZmVhMmJlYzMsIDB4YTY3ZTg5NjYsIDB4Njk0OThjZmMsIDB4Y2UzN2ZhYTYsIDB4NjdlMjFhMTgsCisJMHg2NzJhZWZjZSwgMHhlOTk1NzVmZSwgMHhkYmFhOTc1ZCwgMHhlMzg1NmVmZCwgMHhiZjlhYzY3YiwgMHhkMzNiN2E1MywKKwkweGY2YTYwZGQ5LCAweGU5OWE2MjU1LCAweDliMjU5NzVkLCAweDEzM2M2NWRmLCAweDhmYTFkOTk1LCAweDQxZjc2Yjk1LAorCTB4YjRkYWZiNjYsIDB4OWRmY2FkZWYsIDB4YWZkYTYyMjYsIDB4N2YzY2QzMDMsIDB4OGRhNWU3OTQsIDB4MWRiYTA4ZmQsCisJMHg5ZmZlMzY3ZCwgMHgxOTc5ZGRkNiwgMHg4OThmMTlkMSwgMHgzYmQ4NWJmOCwgMHhlNDc5NjY3YywgMHg0MmE5ZWIwOCwKKwkweDY2OTU0M2FlLCAweDkyY2FhYThmLCAweGZmMmFhOGY2LCAweDliZTIzYjExLCAweDI0ZDZmZjA5LCAweDkzNzU0OTQyLAorCTB4YWE0NmY2YzIsIDB4OTM4YTQ4ZWYsIDB4N2RmMWRiZjksIDB4MDc1ZWY5YTcsIDB4ZjI4NGJiZmEsIDB4ZjYzMTZhNDMsCisJMHgzNTc5Njg1NywgMHg0MmU3MWJjZCwgMHhiMDQ3ZWMzNSwgMHg2YmZkZTk4MywgMHgxOWY0ZWFmZCwgMHhiNDNlY2Y3YSwKKwkweDM3NjBkZjFmLCAweDZkOGFlN2VmLCAweDIzZjYwZTNiLCAweDhhMmY0Y2JjLCAweDQ5N2M0M2NkLCAweDViNTRjYjY1LAorCTB4NzRlNWY2NzEsIDB4OGJmZGYzYTYsIDB4N2ZiNjE2ZTUsIDB4ODU3ZTFjNzUsIDB4ZGNhM2FjZTksIDB4ZGRmMTkxZWEsCisJMHhkNTFmMThmZiwgMHgwZDZmNjk1ZSwgMHgzNDQ1YmZhNSwgMHgxNzk5ZjgxZiwgMHgwMTNjNTRlZCwgMHg1ZTAzZDY0NSwKKwkweDQzMmU4MWZhLCAweDBkZDQ5MmYwLCAweDc1M2M3NGJlLCAweDdjYTQyZGUyLCAweDFjMzNmZTMxLCAweDAwNGExMWYxLAorCTB4YmMzMmYyN2MsIDB4ZmFkNDc4ZTgsIDB4MmMxM2U0NWYsIDB4MDEzYzEyNjcsIDB4M2ZhNDI3ODYsIDB4ZmY3NDJhMzEsCisJMHgyMGVmYzJkZCwgMHg4NDUwNmM3NCwgMHgzYzZlZjk0YiwgMHhlZDI0YmI0YywgMHhlNGQzMDMzNiwgMHgyOTc3ZGJiYywKKwkweGIzZWJjODFlLCAweDdiZjk1OTJlLCAweGM5MTRiZDI3LCAweDkzMTlmNTM4LCAweDkzYjNmYmNjLCAweDdlZTQ4YTdlLAorCTB4ODEyOTc5OTksIDB4ZDM2ZmZkZGIsIDB4OGZkMTc3ZDEsIDB4OGQwOTlmZWUsIDB4NWRlZmQ2ZmYsIDB4ZGRhYzFhMmQsCisJMHg0NjIxMWE0YiwgMHhjNDRmZmI3YywgMHg0MDcyZWJhZiwgMHhlNzQ5ZTc0ZiwgMHhmMGQyZTM3OSwgMHhmNmVkNGNlZiwKKwkweDk1MWU1ZTFjLCAweDNlZGFmMWNhLCAweGYzYTg4ZWNkLCAweDRlZDY5ZjYzLCAweGNhOThiNzFmLCAweGVmYTAwNWRkLAorCTB4MTdiMDA5ZmUsIDB4NGI0YzZlYWYsIDB4ZTMxN2JlMzYsIDB4M2I2MzY1NWIsIDB4Nzg4YWYyNmYsIDB4NWRjMzhiNGUsCisJMHg4YTQ3MzgwOSwgMHg0ZDc3Yzg1NywgMHgyN2Q1ZGY4ZSwgMHhlMzg4ZmUwMSwgMHgyNmJkNmNhYiwgMHg3ZmM3ZDc1MSwKKwkweGU0NTkzYzNhLCAweGU5Yzg1ZjIwLCAweGIzNjE3NTg5LCAweDNkNzg3NjhkLCAweGVkMmMxYTZkLCAweDdlMzlmYTM1LAorCTB4N2EzODcyY2UsIDB4YWFkZmY2MzYsIDB4MDUwOGQxNWQsIDB4ZmRlYWJhNWEsIDB4Y2YzYTJlOTEsIDB4OGY3YzU5NTcsCisJMHhlZjdmNjYwZiwgMHg4NWNmM2U0NiwgMHhlYzJlNjM2YiwgMHg1MTNjYmE3MCwgMHgwZmIwYWFiMSwgMHhmZmNhZmRjZSwKKwkweDljMzFlNTc5LCAweGI2MTViZWZiLCAweDlmYTNjODA0LCAweDg0MGFhMDdkLCAweGM2NzlkMGNlLCAweGUxYTdjNDcyLAorCTB4ZGQzZmFlOTIsIDB4MTBmN2M5MTIsIDB4MTc4NDU1M2YsIDB4ZWEyNWE2ZmUsIDB4ZTk5NzVjZmUsIDB4MGIzYmRkNWMsCisJMHg0MWRlZmZlMywgMHhiOGMwOGVlMywgMHgxODg5YWQ4MSwgMHhjNGNmZTNkNywgMHgxOTE1YmViOCwgMHg1N2Q5ZGQzMSwKKwkweGJkNjZiNGY0LCAweGVhYjZmMzk0LCAweGVlY2Q2NGY2LCAweDc5MWVmOTBjLCAweDYyNzBmN2M4LCAweDFlNDdiZTQxLAorCTB4Yzg1MjNkZjIsIDB4NGRiZWY4ZjcsIDB4NmMwYzJmZjMsIDB4N2U4M2NmNjgsIDB4YjIyYjFmZWEsIDB4NzViY2Y5NmEsCisJMHhiZjdlNDE2NiwgMHg4MGYwODk0NSwgMHg3OGEyZGNmZiwgMHhjMWJjNzBmYSwgMHhjNGRlZjk2NiwgMHhkNTc1OTBmMiwKKwkweDQ5ZGE2YmQzLCAweGVkZDAzMzA2LCAweDg0MzkyZTBmLCAweDhjNmU2ZTMxLCAweGM3ZTUzNTg4LCAweGVhOWFmYTM5LAorCTB4NGM1MmJhMTcsIDB4MGUyNWQ3ZTUsIDB4ZWY1Zjk1MzYsIDB4N2ZlNTMzY2UsIDB4YTlhNTc1OTgsIDB4MThjZjY0ZmUsCisJMHhhMzQ3ZmU1MywgMHg5ZmQ1MzdhZSwgMHhjYTZhOWRlYSwgMHhjNzM4OWY0ZiwgMHg1MTY2N2Y1NCwgMHhjNmZjYTliMSwKKwkweGU1NGM0YmQ5LCAweDRjY2I3YzczLCAweDNmZTU3OWY5LCAweGE5YmZkNTM1LCAweGRjYTk4NTc2LCAweDljNTY1YzJiLAorCTB4NzdhMTdiNzcsIDB4ODY1ZmRlMTEsIDB4MmRlOTQ1ZGUsIDB4OGQzODY1NmYsIDB4OWM3YTNhZWIsIDB4Nzk3N2RiYTUsCisJMHg1MDcyNjk0ZSwgMHgzNmRlYTFiZiwgMHhkN2VlMjVkMCwgMHg2ODA3MGU4MCwgMHhjMGJlNjdmNywgMHg3ZTFiZDJiOSwKKwkweGY1MjJhMGM5LCAweDQxN2QyM2RlLCAweDQyZjVhMTM3LCAweDFlNDc0N2NiLCAweDM1YTZlOGI4LCAweDdhMmE3YTJjLAorCTB4YzRmODk1YTYsIDB4MTQwZTJiZTgsIDB4ZjU3ZTUxYTQsIDB4YWQzMzg1NTMsIDB4NWY0NjVmYzQsIDB4NTRmOWUwN2QsCisJMHhiNTNkMzdjYSwgMHgzYjBmOTY0YSwgMHg1MWU1MTE3MCwgMHhmMzIwZGY0ZiwgMHgxYThiMDVkMywgMHg3YWY5MGM4ZiwKKwkweDMxZTY5Zjg2LCAweDZiYTkwN2ZhLCAweGQyNmVkMjNkLCAweGE3NjliYzZkLCAweDgwZjA4ODNkLCAweDAxZTA0ZDc4LAorCTB4MTNlODkwNjksIDB4NGZhMjAxZTksIDB4N2QxMmFmYTQsIDB4NzEwYmE1OTYsIDB4ZTkxM2U4OTAsIDB4ZjEzZmQyMjEsCisJMHg3ZmE0ZjdmZCwgMHhmYTRjM2QyMiwgMHg0OWI3ZDIyNywgMHg4NDdhNDRmZiwgMHhlZmE0NGZmNCwgMHhmNGU2Y2ZkNSwKKwkweGI3MWY3YTgzLCAweDM5N2Q0M2ZiLCAweDZiZWI0N2E3LCAweGY1YzdmYmY5LCAweGI5ZmU5Yzc1LCAweDVkZGZjZmRlLAorCTB4NDMzYjc0NDMsIDB4YmEzMWVkOTAsIDB4N2UxYWFiZmYsIDB4NzZlZGQ4NDcsIDB4ZmQxYWNlZGIsIDB4OWU1NzhhYzIsCisJMHhiMmJmYmFhNywgMHg0NmI0NTZhMSwgMHg1YWI2OWY2MiwgMHhiYTM5NGY2MywgMHhmMzNkOTBmYywgMHg2NTM4YWI1YiwKKwkweDBmNWViZjkwLCAweGUxMGQyNmY3LCAweDk4YmJmYmYxLCAweDhmZGY2YjZmLCAweGYyMDNlOTg5LCAweDUyMGE5ZDY5LAorCTB4OWYyODI5N2QsIDB4MmFiYTVmOTksIDB4MGZjN2Y4ODYsIDB4ODFiNWE5YmUsIDB4NzRiNDNlNWUsIDB4MGJmYjdmN2YsCisJMHg4N2RhNGU4ZCwgMHg4Yzg3MzM3OCwgMHhlYmJiZjJlOCwgMHhmOGNlZWY3ZSwgMHgxZTVmODMxYSwgMHg4ZTNkNmNmZSwKKwkweGYzYzdmNzQ3LCAweDQ3M2UyMTlmLCAweGYxZWI5M2Y3LCAweGVmNmFkNzQxLCAweDcwN2VlOTIzLCAweGVmNDdmZTNkLAorCTB4NjA5MmYwYjcsIDB4MWFjZDc3YmUsIDB4NTEyZGNiMmIsIDB4MzhjNDExNTYsIDB4MzVjZjljN2EsIDB4YzQzYzk2OGUsCisJMHhlOTUzNWMzYiwgMHgzZWI3MzhlNCwgMHgyM2VmMWRmNCwgMHhkZTJmM2Q1MiwgMHgyNWZjZGI5OSwgMHhmMmVkY2ZkNSwKKwkweGU2ZDFmN2JiLCAweDhmM2NlNTQxLCAweGI2M2U0YmMyLCAweGM1YTM1ZWQ3LCAweDQzYmRhMDFkLCAweDc1M2JmMzk2LAorCTB4ZmM4MzExODgsIDB4ZTFkYjI5NDEsIDB4N2RhODU1MWUsIDB4MDAxYzU3N2UsIDB4ZmFjYTQ3ZWEsIDB4ZmU5N2Y0NDEsCisJMHhkZDE3OGQxNSwgMHhjNDA2OGZiNSwgMHg2ZTIxZTRiNSwgMHg5M2I1NDA2YywgMHg4YzM2YzZlMywgMHhiOWJkZjIwOSwKKwkweGRlZDdiMWU5LCAweDRlMjJhYWQzLCAweGQ4YzdlNjM4LCAweGZhYTc0ZjQ3LCAweGVmY2YwMjY2LCAweGYwMGY3M2VlLAorCTB4NWM1YTdlNTAsIDB4NTNhNDZmNWEsIDB4ZWJiNWRlNDMsIDB4NjJlNjdkNjYsIDB4ZTk3Yzc1NWQsIDB4NGJkN2Q3NzgsCisJMHg5ZTIxYjdjNywgMHg1ZGZjZjE4YSwgMHg2ZWJhMTdlYiwgMHhhZmE1ZWJhMSwgMHgyZWE1ZTE1MywgMHg5NzdmMDNmYywKKwkweGZhZDc0ZmFmLCAweGZmZmIzZWMxLCAweGI3MGNmYWNiLCAweGNjN2RmMGI2LCAweDA3ODc0YWIwLCAweDdhZDc3ZDcwLAorCTB4MjYyZWRjZGQsIDB4ZjE3ODNlZTAsIDB4YTQ0MWY3MjUsIDB4NWY3Y2QyNGIsIDB4OGE5NjdmODAsIDB4YzA1YzEzMzEsCisJMHg4MWNkNGI5MSwgMHhkZWI0Mjc5ZCwgMHhlZjU5ZWZmMiwgMHgwNzdhOTBlMSwgMHg3Y2Q2MGFlMiwgMHhiZDc5NzY5ZCwKKwkweDFhZjUyMWRkLCAweDdlZDYwYjYyLCAweDM3NGNlZDJkLCAweGU0M2Q3Y2UyLCAweGVkMWZiMWI2LCAweDFlM2Q3MGNkLAorCTB4YTNjY2ViYzMsIDB4ZjFhNzFjNzUsIDB4OTZhMjQzYTMsIDB4ZDcxMjBmY2YsIDB4ZjFkZjU4ZmMsIDB4Y2I4ZjUyZGEsCisJMHhlZTcyY2M1ZSwgMHg2ZTU5YTc3OCwgMHg1MTRkZjA5YywgMHhkMDlkYzYyMywgMHhkNjhlNDQyYiwgMHg2ODM3ZTFmYywKKwkweDlhMjc1ZWZkLCAweDdiZDBkZmI4LCAweGYyNjgzN2YyLCAweGY5M2RlODY5LCAweGYyNjg4NmU3LCAweDAxNDg4YTY1LAorCTB4M2MyZjFhOWYsIDB4YmRlZDJlMTIsIDB4ZDkyZWYxODMsIDB4MmY0NjkyNmYsIDB4OGM1NTZlNjksIDB4OWYwODNkMDYsCisJMHg1NWYxY2MxNSwgMHg4YjkwNzdiYywgMHhiZjljZmQ3MSwgMHhmZDM4MDQ1ZSwgMHgzZjcyMDhhMSwgMHgyMjkxODk5MywKKwkweDZjMjEyM2ZmLCAweDc5MDM5ZGYyLCAweGY1NWFiMzNmLCAweDJjZTQyN2ZkLCAweGMyZTY1ZWZkLCAweGQ4YWJkZjcwLAorCTB4NGU0NGFmNzcsIDB4MjhmNzhmOTksIDB4NGI4YzE1YzYsIDB4ZTMwM2JiNDcsIDB4MWM5ZjJjZGQsIDB4YmNiMWE0NzAsCisJMHg4YjY1N2Q4NCwgMHg2ZjdmZGFlYiwgMHg2ZTkyZjlkMCwgMHg5MTA2Zjc5NSwgMHgzYTYwZGVlMiwgMHhlOWQ3OTY2ZCwKKwkweDg2ZmU0MWZjLCAweGVkMDIxNWFjLCAweDcxY2RiODI2LCAweDFmZmI3YTM4LCAweDZiMGFjNmJhLCAweGZkZmNjZjQxLAorCTB4ZmE3YmI5ODcsIDB4NjZmM2FlYzMsIDB4YjBmMWEwZWMsIDB4N2IxOWJmODMsIDB4ZjdjYzc4YzUsIDB4MTYzZWQ4Y2QsCisJMHgzOWQ5ODY5OSwgMHhiZDMxNzljZCwgMHhhNzRlNzkzYiwgMHgyNmYxYWVlNywgMHhjZjdjNmIwOCwgMHgxYWYxZDY3OCwKKwkweGNmMWQ0ZjhhLCAweDJmNWUwMmZmLCAweDJmZDc4Nzc0LCAweDM3MjkwYjA2LCAweGEyM2U0YTQ3LCAweGFjMmFiN2UzLAorCTB4MWY2NzFlZjMsIDB4YTU0NDVjNjMsIDB4MzNlOWUyNDMsIDB4Yjg3YjhjODAsIDB4M2NmMTU3NzUsIDB4ZmQxN2E5M2UsCisJMHg3NTQ1ZWY4MSwgMHhkNDNjYjhhMywgMHhjNzM2MjUwZSwgMHhjNzdmNWU3MCwgMHhlZjgzY2NlYywgMHg3YzEyMjc0NiwKKwkweGVhN2MzOWQ3LCAweGQ5Y2JjMjUwLCAweDQ5MjY2MGZjLCAweDBkOTNlMjMwLCAweGZhZWY3YzBkLCAweDA3YWFiM2RjLAorCTB4ZWFhNTdmZjIsIDB4NGYwMWViNWUsIDB4M2Y2NTUzNzksIDB4OTVlNmY4YTAsIDB4YzUwOWY4NjQsIDB4YTNlM2VlZTYsCisJMHhhZjEyMWQyYiwgMHgzMmIzZmViYSwgMHhhN2Y3ODhhZCwgMHhjYTI0MTU3MCwgMHgzZGU0ZDVmNywgMHhlODFlNWQ3MiwKKwkweDhiZTMyNjFmLCAweDNkY2NmYmY1LCAweDIzMjMwN2M5LCAweDFmZWIxZjI0LCAweGJlYWVmOTI2LCAweGYzOGVkNDllLAorCTB4NDhjZmQ0NDksIDB4Zjc0OTUzZTIsIDB4YjAzZWIwNDUsIDB4MWE0ZGU1ZGIsIDB4NzhjYTdmMGEsIDB4NzVhNzkyNjEsCisJMHg5N2EzYmZiZCwgMHg1YWYwM2Y3YywgMHg2OGQwZjk5MSwgMHg2NDNmOGZjYSwgMHhlZjJhMDExMywgMHhmMTRjMmYxOCwKKwkweDk0NmY4NTY0LCAweGZhMTZiYmYyLCAweDQ0YjA5OGZkLCAweGZjMGNhZmQyLCAweDYxMWRkYzIwLCAweDMyMzQ2ZjdhLAorCTB4OGY5NGNlMmIsIDB4ZDUzM2Y0ZjIsIDB4NmE5NTE5OGYsIDB4MGVmNThmMmEsIDB4NGZjNzk1MzEsIDB4N2JlNTM3Y2MsCisJMHhhYTY1NWQxNywgMHg1OGY2NjdkZiwgMHhlZmFmYmU1MywgMHhhNGZkNTMwNiwgMHhiY2E2NjlmMiwgMHhlNDkyOTdjZSwKKwkweDc2YTAzMTI3LCAweGMwZmRhOWFlLCAweGZkNTMxMmJhLCAweGY5ODU3ZjE0LCAweGY3YmY1NGZkLCAweDllMDI1NjQ4LAorCTB4Njk3Zjk0NzcsIDB4YmM4Nzk2NmIsIDB4OTYxMTZhYWYsIDB4OTBlZjVkOTEsIDB4ZGU1YTNhZmMsIDB4NWNlODk5MDcsCisJMHg2NDkxZWZjNCwgMHgwY2NjZmQzNCwgMHg4YThkZmE4ZiwgMHg0NjI5MjY3MywgMHhhZTI0ZjdlMSwgMHg2MGY5OWI3MywKKwkweDNmMzlhMjYxLCAweDJhZjc5NWRlLCAweDJiOWM2ZTk2LCAweGE4MjhmZTM0LCAweDZhOTI5ZTgwLCAweGYzZWZhNmFkLAorCTB4MzQ3YzZhODYsIDB4OWViMmU0NTcsIDB4ZWZlYjVkZmUsIDB4ZmY1YTYyMWIsIDB4NGU1ZDdjNTAsIDB4MDVlN2NmMGYsCisJMHg2ZjllZDJkZCwgMHhmOWVjMTc5YywgMHg5ZWMwYmM0NiwgMHg5ZWMzY2M2ZiwgMHg3YjBmYWM2ZiwgMHhmNjFjYjFiZSwKKwkweGMxNzk2MzdjLCAweDhjMWQzMzIxLCAweDgzYTY2MjM4LCAweGU5OWE4ZTJiLCAweGQwY2ZhNzQwLCAweGQ1YjJiYWY1LAorCTB4YTdjMjFmNGMsIDB4YjA3Zjk0ZjgsIDB4NmE3ZjU3NWUsIDB4ZjVkMDlmYTYsIDB4ZDc4YjA5MjEsIDB4MTE1MzgyNmYsCisJMHhmYmZjYTQ4ZiwgMHg2NDJlYjVlYiwgMHg4N2Q3M2FiZCwgMHhmNmY5MGRmMCwgMHhiZTUwZTBkYSwgMHg0ODc4NWIyNywKKwkweGU0Yjc3ODE1LCAweGQ3OWU2ZDUxLCAweDI3ZTVhZDBkLCAweDdkNWJiNmMzLCAweGFlN2RlNmJmLCAweDVmNDM1NWQxLAorCTB4ODcxZDU3NDksIDB4MWYwNzBmOWUsIDB4ZmZhNDM0N2QsIDB4MDJmOWZiZDcsIDB4ZmUzYjNmYTgsIDB4ZjQxZGIyNjIsCisJMHg0NWRmMmVkMSwgMHhlZTFmMDM2YiwgMHg0OWI3MTVkZCwgMHg3N2JjYmE3YSwgMHhlMzk1MzNmMiwgMHg5YTU5OGUxOCwKKwkweDgyZWJmMDE0LCAweGYwMzZkZjE4LCAweDZiYjM5YmNiLCAweDEzNjdmODE1LCAweDQ1OGVkMTQ1LCAweDhmZjljYjg4LAorCTB4MTdlNDY0YjAsIDB4NzdmNzk0MGMsIDB4ZGYyYjc2NDUsIDB4ZTJmOWQwN2YsIDB4MTcxOTI0ODIsIDB4ZjM1NDMyZDgsCisJMHhkYzY0N2FmMywgMHhhNTQzZjNjZSwgMHhlM2NhMjRkZCwgMHhlMmUzMzhlMiwgMHg4M2JmNzk2YywgMHgwNWU0OTlkNCwKKwkweGUxYzdjMDM5LCAweDQ3YzA0MWYwLCAweDY5ZGY4NWIzLCAweDM5YjliNTZjLCAweDg2ZmZjNDZlLCAweDgzZjdlMDJhLAorCTB4NzJmOTBiMWMsIDB4MzVkZjI2ODAsIDB4MDA3MGU0N2MsIDB4ODVlYjQxZmUsIDB4MWMxZDljZTksIDB4NWJlMjk4NzAsCisJMHg5OTczNmU4NywgMHg4OTJkMzlmMiwgMHg3NmMzZmFhNiwgMHg3OWU1NGRiYiwgMHg3OTUzMmNjMSwgMHgyOThmMjFjMSwKKwkweDI4YzhlMjNmLCAweDhlMmJmZDUzLCAweDJiZjk0ZDdhLCAweGVhOWEyNzViLCAweDkxNjlmZDVmLCAweGRhMjQ5ZjI5LAorCTB4MDc3ZTA2MWYsIDB4M2U4ZjUyMmEsIDB4ZTI1NTM0MzMsIDB4N2UzODJkYzksIDB4YjE5ZGMxNmYsIDB4YTZhN2RlZjIsCisJMHhiYTcyZWI1ZiwgMHhkM2VjZjcxZSwgMHhkZTU0MzllOCwgMHg3MWY3NjgxZiwgMHg1ZjQzNzUxYywgMHgxODdiZTFlMSwKKwkweDEyOWY0ZDBlLCAweGE3YzAzZDY2LCAweGRlNzcyZGM1LCAweGUzOWJmMGEzLCAweGU1NzhmNTk2LCAweGQzNDE3ZDRlLAorCTB4ZGQzOTc0MGYsIDB4MzVlY2FmMTAsIDB4MDgyZjJiYzYsIDB4ZTAzZGZlZWIsIDB4M2RkNmQyZmYsIDB4NzY4MWZlMTQsCisJMHg5Zjg2ZGYzOSwgMHg4OGRlZjlkYSwgMHgzYzI4NTcwZSwgMHhkYTM4YjUzMywgMHhlZmVlOGUyZCwgMHgyNWIyZDhmNSwKKwkweDE0NjUyNTlkLCAweGZlZjQxZGZkLCAweGNhZDNjZDk4LCAweDM2NWZkZDZmLCAweDRmZDVhNzllLCAweDBiZjBkNWY0LAorCTB4ZmJhNTY3YmIsIDB4MzA1YmM3YmIsIDB4YmU2N2NlNGMsIDB4ZDRmMzcyYzUsIDB4MzJjZjhlNmMsIDB4M2JkZjgzYmQsCisJMHg1MWZkZWE1YiwgMHhmM2I3NGFiOSwgMHhlMzIzMTA1YiwgMHhkZDhjNDRhNywgMHg3OWVkZmEwZCwgMHg0NGNmODkzYywKKwkweGZiZTQ2OGJiLCAweGZmOWM1YTQ3LCAweGVlNWI2YjRkLCAweGYzNDU0NDE5LCAweDdiZGE0ZGVkLCAweGU4MWIwMTYwLAorCTB4OTI1OGQyNjEsIDB4ZDg4NGYyYzMsIDB4YjM1NzY1YjYsIDB4YzdhMmU0OTMsIDB4M2Y2Y2FjZWEsIDB4MzVkZGJmZTksCisJMHhjZWI4MjQ4YiwgMHg0OTAzMWJmYiwgMHg0MDdkMDFlZiwgMHhiNGJlODFiNiwgMHg3MWU1NDcyMSwgMHgxYjllYzFhZSwKKwkweDRkZjZmZDgxLCAweGZiM2Q5YzY3LCAweGNlZDA4NDA1LCAweDc1NGZhOTBiLCAweDg3NGM2ZjQzLCAweGFmZmUzY2ZhLAorCTB4ZjE0M2VkZTMsIDB4NDJhZGViYTQsIDB4ZDc0YzMzOGIsIDB4ZDdmMWQyZTAsIDB4ZjBkMDc3NjksIDB4NzA3ZmRmYTcsCisJMHg2ZDE1YjMyZiwgMHg4YTNkZjI3MiwgMHhkMmRiODg4OSwgMHg0NzI1YWZkNywgMHg4NmFkNjVkMiwgMHgzZjAzZDQwZiwKKwkweGExNWVhOWVhLCAweGZiMDMxZDlhLCAweGM3NzA4NzcyLCAweDQzYTFiYWI4LCAweGMyYmZmZDNkLCAweDllZmY4ZThiLAorCTB4YzRmNTU3ZWUsIDB4YzJmOTQyMWYsIDB4ZWFiN2RkNzcsIDB4ZDlmZjRlODksIDB4M2UwNjU3N2IsIDB4YjQ2OGUzMjEsCisJMHg1YmE0MDk3NSwgMHg2NzdkM2ZkOCwgMHg2ZjNmNzk5NCwgMHg4ZDc2OTZjYywgMHhhMmJlZGE3MSwgMHg2Nzk5ZGRmMywKKwkweGY2MDIxN2U2LCAweGFhNTU4NmYxLCAweDM5ZTQyZmM2LCAweGM0NTI5YzVlLCAweDNhOGIxMWVmLCAweGU1MzNjYjE3LAorCTB4Y2ZkNjJmMWEsIDB4YzgwZjg1ZDcsIDB4ZjVhZWUwZjcsIDB4NDU1YzI1MTYsIDB4OWI2NjkyZjksIDB4MTVhMDQ4ZDgsCisJMHhmMzhmYmJmYiwgMHgxYjkzYmY2NiwgMHg0NDllZmU3MSwgMHgzNzI2Y2RjMCwgMHg0OWI0YjcxYSwgMHhiOTRmZWMwOSwKKwkweGM1ZWNiZGZjLCAweDVjN2VmOTRlLCAweDhiZDliYmU4LCAweDJmMTdmZDM1LCAweDg2ZGY2MDJhLCAweGNmZWU2NWZhLAorCTB4OGY2YmNlZDYsIDB4ZTEyYjdjZjAsIDB4MGJhNWJkNjcsIDB4MDJkZThkN2UsIDB4ZTgzMTFkZjIsIDB4ZjNiNGFhYzMsCisJMHg4ZTk2OWM3MCwgMHgyNGZjMzczNywgMHhjMjc5NWRmMSwgMHhjZTE2NDQ2ZiwgMHhiNzZiNDZmMywgMHhmODlkNzQ3MSwKKwkweDlkMmFmZGQ1LCAweDFjYzNjMjdlLCAweDE3MWExZmFmLCAweDRhZmZkNjcwLCAweDFhN2U3Nzc0LCAweGQzZDM3ZmRkLAorCTB4ZGZmNGU4M2UsIDB4YTg1Zjg3N2MsIDB4MWU4OTY5YzMsIDB4ZmYwNDNlMDUsIDB4NTdlOGRiYmYsIDB4ODI0OGYzZjksCisJMHgzMTI3ZmQ5MCwgMHg2YWI0OGZmMCwgMHhiOThkODlmZCwgMHhmNDRmZGRkZCwgMHhmMWM1ZDhhZCwgMHhiZTJjYWIxMCwKKwkweGYyNWM0MGZmLCAweGVmMWZlYTE5LCAweDNjZTVkZWIwLCAweGY4ZmI4MDkwLCAweGQzYmIzNDkzLCAweGU0ZDZmM2U1LAorCTB4N2VmMmQxYjAsIDB4ZTU1Zjg3NDAsIDB4Mjg5OGVlZjUsIDB4MWYxMzczZWYsIDB4YmE3N2Q4MTUsIDB4MDhhYTdmMWYsCisJMHhmYmFhNDJmNiwgMHg0NjZiN2M0OSwgMHgzZjc1ZmUzMSwgMHgxNDcwNzE0OSwgMHg2MWIzMzljMywgMHg0ODRmMGRiMSwKKwkweDdiN2MzZWI2LCAweGNiYmI4NDYxLCAweDQwM2FkMjdmLCAweGU0ZjRlN2M2LCAweGM5N2U5OTQ3LCAweGI4Y2RmZGMzLAorCTB4NzNmNzE1NzQsIDB4Y2E0NTNiMmMsIDB4MmNmNzhkNmIsIDB4ZDkwZDlkMDMsIDB4Njc5ODZjMjYsIDB4ZGZmYmFkYWIsCisJMHgyMzkyOTgxOSwgMHhmODUyZDFmNywgMHhlMjFiN2JkMiwgMHhhYzI4NTY3ZSwgMHg4NDU3MmMwNywgMHg3Y2M0MDcxZSwKKwkweDZjNWZjZjVlLCAweDMyODVmMmQyLCAweDk5MmFjYjdmLCAweGM1ZGVkNTZmLCAweDNiZDlhYWRhLCAweDk4YTQ0ZjMwLAorCTB4ZWRmMGY0MGYsIDB4ZjMwNDNkOWEsIDB4ZTA3OThhNDAsIDB4ZjIxYWY4M2IsIDB4ODNjODZiZTAsIDB4YmUwZjIxYWYsCisJMHgwZDdjMTQ4NiwgMHg1MTQ0NGJkZiwgMHhmZDJhOWU3MiwgMHhmYjBkZTMzZCwgMHhmMTllZmUwMywgMHhmZTA5YjkwNiwKKwkweGZlMWU2MzFlLCAweGY4N2Q2MzFlLCAweGYwZTU4YzdiLCAweGUxY2IxOGY3LCAweGUxZTYzMWVmLCAweDg3ZDYzMWVmLAorCTB4ODc5OGM3YmYsIDB4MWY1OGM3YmYsIDB4MWU2MzFlZmUsIDB4N2Q2MzFlZmUsIDB4ZTU4YzdiZjgsIDB4Y2IxOGY3ZjAsCisJMHhlNjMxZWZlMSwgMHhkNjMxZWZlMSwgMHg1OGM3YmY4NywgMHg2MjlkNzM3ZSwgMHhhY2RkMDdmMiwgMHhiYTUwM2JiZCwKKwkweGEzZTk4ZTNlLCAweDI5MjhiNTM5LCAweDNmZjdkNjg3LCAweGM3ZTdmZjIzLCAweGYzYWM1NGI2LCAweDZlZmMyNWRlLAorCTB4NDc4NDU1NjAsIDB4NDRkMzczYWUsIDB4MjExNmVlYjksIDB4MGU3ZGI5ZDcsIDB4NzZlZGYzYWYsIDB4ZjE5NDJmOTksCisJMHgwM2Y0YTFjMiwgMHg3NGY4Y2FiZiwgMHgwYTQxNTdlOSwgMHhmODUyMGFiZiwgMHhhZmMyOTA1NSwgMHhmZDJhZGUzMiwKKwkweDU3ZTE0ODJhLCAweDU1Zjg3N2MxLCAweDgyYWZjMjkwLCAweGE0MTU3ZTE0LCAweDg1MjBhYmYwLCAweGZjMjkwNTVmLAorCTB4YmYwNzY4MmEsIDB4NTVmODUyMGEsIDB4MTU3ZTFkZjAsIDB4ZTBhYmYwYTQsIDB4MDM4MjMxZmIsIDB4MmUxZDE1ZmUsCisJMHgyNmU5ZjljOCwgMHhkMGU4OTQzZCwgMHg0Y2JhODdhNCwgMHhjNmY5Yzg3OSwgMHg4ZGYzOTBmYSwgMHg4ZGYzOTBlNSwKKwkweDhkZjM5MGU1LCAweGM2ZjljODc5LCAweDhkZjM5MGZhLCAweDg4ZjExYmY5LCAweGVmMjk2ZjcxLCAweGRlNDFkYjFiLAorCTB4OWE3M2U2MzcsIDB4ODZjMWFmZmMsIDB4ZjljMzc5MzUsIDB4NDZiNjkxNTcsIDB4MmUyOThmMjksIDB4OWU3MmViOTIsCisJMHg1OGZmMDU5YSwgMHgxYzkyYjg2YiwgMHg3NjM5MjFlYiwgMHg4ZDY3NmZjNSwgMHg4OWY4OTJiZiwgMHgyYjk3NmYxNiwKKwkweDZmNTgyZGRhLCAweGJhZDM3YmY2LCAweGUzODI4MmY5LCAweDNiZmU3MzgzLCAweDdmNzVjYjkxLCAweGJhZDFmZjJiLAorCTB4YWMxNGVkZTcsIDB4OTBjYjZjMzcsIDB4M2RlZGU5NzAsIDB4ZDUyMmE1YzIsIDB4YmJlNTc3ZWIsIDB4YmUzYTE3YWYsCisJMHhhNWY5OGY1ZSwgMHgyODUyMGUwMSwgMHg5MTA3MTBmMywgMHgxZjMzYmI3NywgMHgyZDViZWRmMSwgMHg1ZDBiOGM4YSwKKwkweDQzNzJlMzI5LCAweGUzNDlhYWU5LCAweDNiMmQ1YjRiLCAweGJiNTA0NDBlLCAweDgzYzU2MmY2LCAweDU2OTkwNzdiLAorCTB4MGY5NmM4NzEsIDB4NDNlNmQ1M2MsIDB4ODljYmE4OWUsIDB4NmI4M2UyZDUsIDB4OTAzYzQyYWYsIDB4N2Y2ZWI3MGUsCisJMHhmN2MxM2UyNCwgMHgwYmI3NDZkZCwgMHg3MzhkMTk3YiwgMHg4ZWMyMTdjZCwgMHg2NDk4NWJkZiwgMHhkYTA0ZjI5NywKKwkweGVhMWNkZjQxLCAweDBjOWJiYzU3LCAweDQ3MzJiZGY0LCAweGZmM2U3YjllLCAweGU4Y2FhYmIyLCAweGI1ZWRkMGZiLAorCTB4ZGQxZWUxNTcsIDB4ZWVkOTA4YTQsIDB4MzM0NzhmMzcsIDB4MmEzNGE3MWUsIDB4YzlmZWYwOWIsIDB4OGJjMmVkZTgsCisJMHhkNGJmYjFmYiwgMHhkZGJhMWVlMCwgMHg3MWUzMmY2NSwgMHg0ZWZmN2M1ZCwgMHg0Mzc4YjdlZiwgMHgyYzE3ZGYzMiwKKwkweDEzZTNhZDE2LCAweGYwYTEyN2Q5LCAweGRlM2FlNmZiLCAweDYyYWY3ZTY4LCAweDBmZTJjNDdlLCAweDJmZmM4ZWMxLAorCTB4NzEyMWMzZGYsIDB4YzNkY2ZiZjEsIDB4NmM3ODY2YjksIDB4YzRkYmUyMjEsIDB4ZTQwZWY5NWUsIDB4YWJjNWUxZTQsCisJMHhiZTVjMTM3YSwgMHhmMjA3N2M4MCwgMHg1ZjZhMmY5YSwgMHhmOTY2ZmNlMywgMHhjZjkzMjQwZSwgMHhjZjhmODY0OCwKKwkweDg1N2U0MWMzLCAweGUyOThmZmRmLCAweGU1ZTk2OGRmLCAweDE1ZTBiZGM2LCAweGRmZDQwNGI2LCAweDBiNTAzYzJlLAorCTB4YWY3OTA5MDYsIDB4YjY1NzlmNTUsIDB4NTcwOTYyMzgsIDB4OTVlMjJmNDAsIDB4MTFmZDAzNzgsIDB4N2EwMTk4ZTcsCisJMHhmOGQ4ZjNjOSwgMHg1NmE5OTA3ZCwgMHg0NmZjMGQ5NywgMHg1ZDhhNzM5NywgMHg3NTQyZWM3MiwgMHhmN2RmMGM3NCwKKwkweDJlMTM5MTBiLCAweGI4ZTZmNjM2LCAweDhlM2Q3ZjhkLCAweDkzZWY4M2E0LCAweGNlMTVkZjJmLCAweGY4OGY4NTcyLAorCTB4YjllNmY4MDcsIDB4NTk3NzE5M2MsIDB4OTFjM2VjYjksIDB4MzhhZWQ0OTYsIDB4ODEyOWQzOTIsIDB4ZjNkZjc4YWQsCisJMHhlODhlZWE3NCwgMHgxMWNiMGE1MSwgMHhkYjVmYzA4NywgMHg3YmU3OWYxYSwgMHg1ZWFiYzU4MiwgMHgxNzEwZmJlMywKKwkweDk2ODgxZjFiLCAweDdmYTRhYWY3LCAweDliYzM0Y2E1LCAweGE4NWE2ZjZlLCAweDE2OTk0ZmFkLCAweDVlYmM3NDNmLAorCTB4ZTc0YmNmYmUsIDB4NzFmN2JmMzAsIDB4NzJjNmQxYjEsIDB4MjhiY2E4NDYsIDB4ODgwZmViODQsIDB4YjQ2ZjJiNzMsCisJMHhjNWQzZGRmMSwgMHgyNzU3OGI2YiwgMHg3NzdlZWU4YSwgMHhjZmUzMmJjNSwgMHgzNDk3NzFiNSwgMHhhODRlMzhkYSwKKwkweDJiNDc3YjVjLCAweDk2NTg3N2Y0LCAweGQyZTg3MjZhLCAweDI3ZWZlNjZkLCAweDRmZTQ0MjcyLCAweGFkNDRmZGZkLAorCTB4YWY1YmYxNGUsIDB4YTgzOTY0Y2MsIDB4ZWU3MWM2ZDYsIDB4Yjk0ODU3ZjMsIDB4MDExMGVjNDgsIDB4YmY5ODY3ZGMsCisJMHhlZjA1OWM2MiwgMHhlNWRmY2M1OCwgMHhkMGRkMjhmNSwgMHg3YzlhM2JkMSwgMHgxMjgzMDkzNCwgMHg4YTVlYTdkZSwKKwkweGVkMzJiZTYwLCAweGNmY2UzZjUyLCAweGU5Yzg5NGJhLCAweGU0YjI5NzhkLCAweGQxMWRhYzc3LCAweGJjYTE2YjRiLAorCTB4MjZiZWZmNWYsIDB4MWM0NGNkMTcsIDB4YjJlNDAxNjUsIDB4MWRkNzRjM2UsIDB4MjIxOGQ3NDQsIDB4NDM1N2UzNTcsCisJMHgzMDJiY2FiYywgMHhmOWIyNGZjMywgMHg3MzRlMjE1NiwgMHhmN2MxNDZkMiwgMHg3ZTQzMjY5MSwgMHg5MGQ5ODJhMiwKKwkweDJmYjAwYWE3LCAweDNlZjkwYTUyLCAweGVmODU0NGM2LCAweGJlMWU0Y2I3LCAweGI0MDdkYjRjLCAweDExZjMwNDJmLAorCTB4MzdjM2Y3N2UsIDB4ZjEwMDZhN2UsIDB4M2I3ZGIzMzcsIDB4N2Q3NzU4MmMsIDB4NmRmY2Y4M2YsIDB4NjRlNjBlZmMsCisJMHg3YmM3NjJiZiwgMHhjZjRkM2U4MSwgMHg3NDNkZTlkNiwgMHhkNDg4MmM1ZiwgMHg2OTRlNjNlYywgMHg4ZmI0ZWFmZiwKKwkweDljN2U1ODAxLCAweGM0NDZmMjI3LCAweDJkODAyZWIzLCAweGIwYjY5ZmIzLCAweDZjYThhYTg0LCAweDFiOWM5ZTU5LAorCTB4OTQyMzYzNzksIDB4NmVkMzdmYWMsIDB4OTE2MmRmMzIsIDB4ZmU0ODlmZjcsIDB4NzE3NTc4ZTMsIDB4ZTUwZmIwYTQsCisJMHhmOTJhZDc4YiwgMHhlMWQ3OTc4OCwgMHhkOGQ4N2FmYSwgMHg3NzdhYzM0OSwgMHhlNzQ5NDFkMSwgMHgwM2VlY2NmZSwKKwkweDVkZjk2MGJkLCAweDRjZmYyNjE5LCAweGY4NGE1YTY4LCAweDEwNWEzZWM2LCAweGZjNjNmYWQzLCAweDVjODRkMGQyLAorCTB4ODg5ZjFkZTEsIDB4ZjlmNWM4NzcsIDB4MDJlMjIwOGEsIDB4ZGJmOTZhZTcsIDB4OGZmMmJkOWUsIDB4Mjc4YzljNmIsCisJMHhlZGNkOGZjZSwgMHgzZmUyMjM3NywgMHgzOGZlNjVmZSwgMHg3ZjFhYjE1ZiwgMHhmMTRkYWEzNywgMHgzZGU1NzM3OSwKKwkweGRmNTgwOWM4LCAweDdlNzZlY2M4LCAweGE2NjY2MGM3LCAweDIxMmY5ZTRiLCAweDcyZGI5Njc2LCAweDg0NWRmMmRkLAorCTB4Njk0YjdiMTAsIDB4ODQ2ZjNjYjYsIDB4OGYzYzlkZDUsIDB4YjY2ZTNhZmQsIDB4M2VmM2VhNTcsIDB4MzNkZjMzNmUsCisJMHg1Y2VhZDNkNSwgMHhiZmY4Mzc2OSwgMHhhMGYxMjdiYSwgMHg3ZmZiZGU0NSwgMHhmMWQ4MTJjNCwgMHhhMDZiZDEyMiwKKwkweGU2MDE2ZmI3LCAweGJkZTIwOGZiLCAweGNmMWY3ZTE5LCAweGEzNDc3ZjRmLCAweGVmNjk0ZjkzLCAweDc0ZjRlODY1LAorCTB4ZGYyMmVlYWMsIDB4ZGE3MTI4OTcsIDB4OWU4MWFhZGQsIDB4N2MyOGQ2Y2EsIDB4NGVhNGIxMWYsIDB4YWRmNjI3ZGUsCisJMHhmY2JkZTQ1MSwgMHg4ZjU3ZWMxZSwgMHhkZjlhZjljZiwgMHgxN2ZjN2E1MSwgMHhjMzUwYjIxMSwgMHg5MWZiN2NlZiwKKwkweDVkMjkxY2Q3LCAweGRkNTNmZGY4LCAweDdmOTI2Y2FmLCAweDZmMTAzMzA2LCAweDljMzZiNzNmLCAweDdhZmU0MWRmLAorCTB4MDE4ZmQxNTgsIDB4ODdiNjY0N2YsIDB4ZjExMjY5ZDcsIDB4MWE5ZmQ0MzQsIDB4YmUyOWZiZTMsIDB4MDcyMzg4OTcsCisJMHhmMDVjNmY2MSwgMHg3ZGY4YjdmMywgMHgyOWJkOWFlMSwgMHhmMTYxZWVmYywgMHg3OGQ1YmNlZSwgMHg2MWViZTU0NywKKwkweDg5NzIzYmJlLCAweDJlOWQ4YjdlLCAweGVhOTBlNDNiLCAweDk3M2U1OGM2LCAweGVlZDFmNDE3LCAweGY2NzY4YmE5LAorCTB4ZjNlYmU5ZTcsIDB4MDc5NGFlNjAsIDB4OWM3MjNjOGEsIDB4NDUzZTlhMGIsIDB4MzU0ZGIzMDgsIDB4N2ZlNzkzZDUsCisJMHhlZGQ0M2VlOCwgMHg5NWY2YTFhMiwgMHhiZTJhZjdkMCwgMHg3YjAyOWVjYiwgMHg1NzYwZGQ4OSwgMHhiNjMxZWRkNSwKKwkweDcwNzNlM2FjLCAweDc3YjdjZjllLCAweGFmOGRiYmZmLCAweDRkNDc3NmViLCAweGE5ZDg1ZDlmLCAweGU4NGY2NmNmLAorCTB4OWQ3ZmI5MDMsIDB4YmQxZDgyZTIsIDB4MTFiZWU5Y2MsIDB4ODc2NWY1ZjEsIDB4MTRmMDg4NmMsIDB4ZjJkY2UyOTMsCisJMHhlNGJiOTJkZCwgMHhiNzI1MjViYiwgMHg5YjNmMzFlNiwgMHhjN2M5MzU4ZiwgMHhiYzUxODdiZCwgMHg5NDAyY2I4ZiwKKwkweGRmYmNmN2M2LCAweDY1N2JhZGU3LCAweDUzZDAxZWMwLCAweGUwZjdjYmQwLCAweDdiNWU1Y2NiLCAweDJhMmU0MTljLAorCTB4ZWY0YzUyNmQsIDB4MTdmOWU4MTgsIDB4NzIxZGE1NzMsIDB4YzAxOWE5M2UsIDB4YTZiNzRkZGYsIDB4ZDA4NmYxZDgsCisJMHgxMDhmMTI3YywgMHg0NmJhZjgzNywgMHhhYTNiN2EyNywgMHg5MzI1NzFjNywgMHhmOTQxYzU1MiwgMHg5ZGMxMTRhZSwKKwkweGZlMzNjNzIyLCAweDkzNDk1MTRlLCAweGFhMDYzZGY5LCAweGZlZGQ3MmNmLCAweGFmZWUyOGRjLCAweDRlZjM0NWQ4LAorCTB4Mzg2MmVhNDEsIDB4YTc4YzBmMDksIDB4M2ZhODdiZjYsIDB4ZWJjMzhmMzcsIDB4ZDgwYzFhNTEsIDB4OGY5ODM3NjAsCisJMHhjZmNhMTY3OCwgMHgxODZjMDU3NSwgMHhiZTUxYTRhNywgMHgyYjViZTI4ZiwgMHg4OWFkZjFjNywgMHgyZTQwZTdiNSwKKwkweDAzZWNiYWIwLCAweGEzNjBmMjhjLCAweGJlNzhjZjdjLCAweDA0MTFmYmY2LCAweDY1Y2JjYjJmLCAweGYzZGMyNzg0LAorCTB4ODY3ZGVmZDIsIDB4ODM1OGFiZTIsIDB4ZDYyOWFjYmYsIDB4YWQzNjVmMmMsIDB4ZTY3ZDYxYjMsIDB4YzM1ZWYwZjQsCisJMHg5NzFkMWE5NywgMHhmYmUxOGUzNCwgMHgyZjU2NjVmNSwgMHg2OWYwOTdkZiwgMHhiMmViZmVmOCwgMHgyN2UxYmJmMCwKKwkweDkwZmNkMzk5LCAweDhkNzkwNTJkLCAweDNjMDk3ZDJmLCAweDgyOWUwNmY3LCAweGQyM2VmYzE5LCAweDY3OGU3MGIyLAorCTB4ZTI2YWUzOWUsIDB4ZmJlMjc2ZjksIDB4ZTQwZmMyMDEsIDB4ZTMxMTU3MTUsIDB4OGZjNGU4OWIsIDB4NjZiMmMwMzgsCisJMHhjMTc2ZmFmMywgMHg2NWRmMjUxMywgMHhmZGU2MmU2ZiwgMHhiM2VhYzhiNywgMHhhYzcwOGNiYiwgMHhmYjgxOWZkZiwKKwkweGRmNjg3MzViLCAweGUxMjdmZGUzLCAweGNjN2RmMWYyLCAweGM4ZGMwZjUzLCAweDM4MDZmYmJmLCAweDhmMjhlNzgxLAorCTB4M2JkZTAyN2IsIDB4YmE2MWJhMjIsIDB4NDE2N2U5ZDYsIDB4ZmFjZmRjODEsIDB4YWNjMzUxNzgsIDB4ZWMzZjBlZDIsCisJMHhmN2E5ZjZiYiwgMHgwNmYzZTQyMCwgMHhmZmQ4NmY1YSwgMHg3NmE3ZGE3YiwgMHg3MWE0MDA1YywgMHhkZGYyNjVlZCwKKwkweGFiN2RkMGJhLCAweDlmN2Q1N2VmLCAweGRmNTZmYmVhLCAweDhhZDk4ZmNmLCAweDE3NGE4OTgyLCAweGJkZjNhMWRmLAorCTB4ZjA2ZWI5ZjYsIDB4Nzc4MzQ5MzQsIDB4ODRhZWI2YWUsIDB4YzE4NTU3ZDcsIDB4OTg2MjM3YWUsIDB4NTNmM2RmZGMsCisJMHhmZDFmZmJjZCwgMHhiZDU0ZGZhMSwgMHgwMzMwNmM3YywgMHhmYWY1M2RmNywgMHhlM2YzYjhmYSwgMHgwM2VjM2I2NCwKKwkweDMwZWE1YmQwLCAweGU1ZmQ2NzRiLCAweGUyNjJkZjVjLCAweGZjOWRhNTFmLCAweDA0YWFmYjYzLCAweDBhMWQ4ZmYwLAorCTB4ZGY5NmUxZmIsIDB4ZTViZWU1MjMsIDB4ZTE3YmM4Y2YsIDB4ZjhiZjk2NjcsIDB4NzdhYTJjZjYsIDB4MGI4ZGMxZmEsCisJMHhjYTJmZjc4YywgMHgyYzVmOTI4MiwgMHhmYzBiNzkyNCwgMHgwZjI2OTE2MywgMHhlNWY0Y2M2YywgMHhlN2VjMzMwZCwKKwkweGM5OWZmYmIyLCAweGRiOThmZWM0LCAweDZmMGE3NzkyLCAweGY5YmNkMWE4LCAweDNmM2ZhM2JkLCAweDU3ODdkMmYzLAorCTB4NWRjZWJiYjksIDB4NmIyNTFlN2QsIDB4M2IxNWI1ZGUsIDB4ZjQ5Mzc4OGQsIDB4MDc1Njc3N2UsIDB4MzhhNTViOWYsCisJMHg2OTUzZThiNywgMHg2MWYzMzE2MywgMHg4ZjdhNDg5MSwgMHhhMWVlYjVkMiwgMHhhOGRjNTBmNCwgMHg1YTU3OWNiMCwKKwkweGZlYTAzMjM3LCAweGQyZWJmMjJmLCAweDhkZjk1M2I1LCAweGY0YmQ3ZDI4LCAweDczZjQ1Zjc3LCAweGE2N2Y4NzU3LAorCTB4MzU3MzRlYjYsIDB4NGMzZDllN2EsIDB4ZTViOWMzZWUsIDB4YmM0NWY2MjksIDB4ZjhlYzUzZmYsIDB4NWEzOWNkYmQsCisJMHhmMzMyOWNmOSwgMHg3MmY1Y2VmNywgMHhkNWZiZjI3NSwgMHg5ZmI4MjdkOCwgMHg1OGVhZjU4NCwgMHhjYmY2OTM2YiwKKwkweDU3YWQ5N2VkLCAweDFkMDJlNDMyLCAweDlkOWFjNThlLCAweDZmNjZhMTcyLCAweGNiYzlhNDVjLCAweDhkOGI1ZWI0LAorCTB4NzFmOGI1ZWIsIDB4Y2ZhNTVlYjksIDB4YmMxN2Y1YmUsIDB4ZDNmMzQ2NTMsIDB4ZWY5M2EzZGUsIDB4ZWNiNDk0MGEsCisJMHhiMzliNzVlMCwgMHg4NTJkOWQ2NiwgMHg1ODY0ZmRlYSwgMHhhOGZlMjk4YSwgMHgwNWNmMzZiNCwgMHgzNWRjZmQzYiwKKwkweDA3ZTA2ZDFiLCAweGYxMjYxOTNmLCAweGYzZjc0YTE2LCAweDFkNjJmOGI1LCAweDE0OGYzOGFmLCAweGFmNDczZjgzLAorCTB4ODNiODNlMGYsIDB4NTk3NWI5YzYsIDB4NzdmMWI0NzgsIDB4M2QxYTAyZWQsIDB4YzZjNmQ2OTcsIDB4ZGFkMmJjNjEsCisJMHg3ZmExN2JlMiwgMHhlODQwZTdlOSwgMHgyZTExM2JmZSwgMHhmNTA5NDVmNywgMHg2Mjc5ZmQ4NywgMHg1NWVmODc4YywKKwkweDM3N2VkN2NmLCAweDQzZmViNDJmLCAweGRhZmRkZDFhLCAweDRjYmZkZjI2LCAweDkyNzk2YzhhLCAweDIyNmEzYmUzLAorCTB4ZTkxM2UwM2MsIDB4OGMwMWFkZTksIDB4ZGMwNjdhMGIsIDB4MmY3YzhiNzYsIDB4ZjViMmJkMzMsIDB4YTI0MWMwNzMsCisJMHgyMGY1YzczYywgMHgxMDViN2JjNSwgMHhiZjI4MTNlZCwgMHg3OWVmMjJjOSwgMHhkZDMyYWFhNSwgMHhhNjA3ZTFhNywKKwkweDVlOGI5NDM3LCAweDVmMWVmY2FkLCAweDIxNTFiYmU3LCAweDliMTc2YWY0LCAweDFmZGRlMGQ3LCAweGVmYzEyZjdiLAorCTB4YTlmNGU5YTYsIDB4YTdkM2EzZjcsIDB4Y2QzZGJmNGUsIDB4OWNmN2Q3NmYsIDB4Y2QxNDg5ZGYsIDB4NDllNTkyY2UsCisJMHgwYmI4ZDA3NiwgMHhiZmM0MWJlZSwgMHhmMzVkZjE2YiwgMHgzNWVmNmJiNCwgMHg0YzM3Y2U3NiwgMHg2NWM3ZGVmZSwKKwkweGZhOTc0ZGYzLCAweDZkZjNjZjUyLCAweDY2ZTg0YzJlLCAweGQ0ZjNhMWJlLCAweDQzMWU4OWY3LCAweDY5NGZlOWRmLAorCTB4MTM5NGZlOTIsIDB4ZDQ2MzlkMGEsIDB4NzBiMmM0ZWUsIDB4ZTdkM2FiOGUsIDB4YmZmNWRiYTUsIDB4OGY4N2JkZWYsCisJMHhmNjY5YzU4NiwgMHhjODI4ZDZhYSwgMHhkZmI1ZjM5NywgMHg5OTQxMTE1MSwgMHg4NmE5ZjdjNywgMHhhZmY5ZmFlZiwKKwkweGYzYTc1ZmJmLCAweGRhYjU5M2U5LCAweGVmNWEyOGY5LCAweDc1MTY3ZWMxLCAweGY1MGY3YzY5LCAweDI4ODlkMzU4LAorCTB4NjI3MzEzYmMsIDB4NmY0Zjg0OGMsIDB4ZGU0ZGFiNzcsIDB4NzY1MTE2NzMsIDB4YmJjZmRlMzcsIDB4ZmUzY2Q2ZTksCisJMHg4ZDg1OTRiZCwgMHhiZDlmNTg3ZCwgMHhmOThkMmVhOSwgMHg1ODdlNGRjMiwgMHgxZWE3NDUxNywgMHg4M2UzNDhiMCwKKwkweGFmMTZiNzkxLCAweGQ3ZjUwMmJlLCAweGMyZWZmMGE3LCAweDRlN2E3NDJkLCAweDQzZjZlN2FkLCAweDIzMTM5MDNkLAorCTB4NTNkYWE3OWIsIDB4ZmE5NjFlNTksIDB4YmIxN2VlODIsIDB4N2M0NTExNTUsIDB4MTI3YzBkNGYsIDB4M2ZiMmNiZmIsCisJMHhlMmNmZTcxZCwgMHg5ODNmNTJmNSwgMHhlMDZiMTE2NCwgMHg1MGQ4MWQzZiwgMHhmODJmYTEzNCwgMHhmYzhhYzNjNCwKKwkweGU2MGQ5YTNkLCAweDBlODZiY2Y3LCAweDdjMDJmYTJhLCAweGJjNWRmNDI2LCAweDVlMmQ2ZDViLCAweGU0ODJhN2U4LAorCTB4MTZkMWQ4MGUsIDB4OWU1ODhiM2EsIDB4OTNlMzQ1YmYsIDB4ZjhkYjlhYzcsIDB4YWYxZDdlYmQsIDB4NzhiZmUwOGYsCisJMHg3ZWM0MmFhNywgMHgxYTI3NmExNCwgMHhmZjA3ZDlhOCwgMHg3YjhmYWYxZiwgMHgwMDgwMDAzZCwgMHgwMDAwMDAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjYjVmZjAwLCAweDY1NTQ1YzBiLCAweGNlN2JmOGRhLCAweGMwY2MyYjk5LAorCTB4MTI0NWM4ODAsIDB4ODU4NDhiODcsIDB4ZDc4MGMwMzQsIDB4NTA4MTUxZGEsIDB4YjliYmEwYmIsIDB4NjU4ZTIxYmEsCisJMHg1MDA2NjVjYSwgMHhkNzc3NWRkYiwgMHhhNmExOGNmZSwgMHg0NWZhN2Q2NiwgMHg4MGVkNjVhNiwgMHg3NmMzNmE5NywKKwkweGE4MjgzNDQ4LCAweDU5OTkwYmM5LCAweDZhMzc2MjdmLCAweDViNjNiOTJmLCAweGJhNDAyZGU2LCAweDZkYmZlZGZjLAorCTB4YmNmM2NmN2QsIDB4NTExNzMwZTcsIDB4NmZiZWZkZGIsIDB4Nzk3YmY5ZmMsIDB4OWY1ZWYzZGYsIDB4Y2ZiY2YzZmIsCisJMHg4YzM0NjMzOSwgMHg2MzE4MWI3NSwgMHg0MThlOGIyYSwgMHg4OTQ4NjgzOSwgMHg4ZDhjOTk2NCwgMHg2MTVmNjkwOSwKKwkweGY2YzM4OTRjLCAweGM2NDVkYjI1LCAweDdjZmI0MDQ2LCAweDE5NjJjODkzLCAweGZhMzFkNzJiLCAweDFmYmY4ZjdkLAorCTB4M2MxZjc2MzEsIDB4NDJmM2MzMzcsIDB4MDdkNjM0YTksIDB4Y2MzN2Q3ZmQsIDB4ZDZjOTcyYTAsIDB4ZjFhZTZkYzIsCisJMHgyNTA5MjU4YywgMHg2MDYzOTNiMSwgMHhiNjZhZTNjMCwgMHhjZTI1OGEwNywgMHgyYjMwNzcxOSwgMHg4ZGE0ZDNjYywKKwkweDczYzMyNWQyLCAweGM3MjkyYmI1LCAweDQ5NmY5ZmUwLCAweDBjNDk0M2UzLCAweGQ0Njk5ZGM2LCAweDdiNDM3N2NmLAorCTB4NDE0ZTY5ODEsIDB4YmE1ZjhjMTQsIDB4MzI1YjJhMzMsIDB4NmY1ZGZiZmIsIDB4YzkxYjE4MTEsIDB4NDY3M2E1NTgsCisJMHhjYzYxNGIxYywgMHg2N2UxZGRmMSwgMHgxZmIwYTk0YywgMHhmMzA0ZDM5OCwgMHg3NzA5ZTU3ZiwgMHhhMzhiYTBiYiwKKwkweDgyNDkyZGFlLCAweGIzYWEzYzIzLCAweDdmYTA1OGE3LCAweDZmMzFkODk1LCAweDRlNzNjYzEyLCAweGEwNGRlZjcwLAorCTB4NTMzOGU2ZmUsIDB4ZTVhMWZhYzAsIDB4Y2NjNjNhZTksIDB4ZmYzOThjZTksIDB4Y2YzNDg3Y2YsIDB4M2I4OWUyZTcsCisJMHg4Nzc4YzAxNiwgMHhjZTA0N2Y3MywgMHgxZmY4ZjU1MywgMHg2YzMyMDFmMiwgMHhiMmNmNjg5ZCwgMHg4ZGJjZTFlNCwKKwkweDFjMTI0ZDdiLCAweDU2NjM3Yjc0LCAweGJlZTM5YzA5LCAweGRhNDZjN2M3LCAweGY3OWYyZjMzLCAweGE4YjY2OGI2LAorCTB4ZGJjYmRhMDQsIDB4Njk1N2MxMTgsIDB4ZDQ4ZWU4NWYsIDB4NWVlZGRjMjAsIDB4Njk2MTMxYTYsIDB4Mjg2ODlhNjIsCisJMHg5NTZjNDhjZiwgMHg1MmRiY2EwNywgMHgwNmI5YTJkOCwgMHhlMTBkYmI3ZiwgMHg4OTllZWIwMCwgMHgwMjU0OTJkYywKKwkweDlmN2IxNWVkLCAweDc5NDMzMjQ4LCAweGE1ZWJjOGQ2LCAweDljN2E3ZjdiLCAweGRkZmY0MDQ1LCAweGQ1ZTIwZDVhLAorCTB4MGIxYTYyYWUsIDB4MjVkN2JiOGMsIDB4YjI1MGRjZDgsIDB4MTJjNjY4ZjIsIDB4N2Q2ZWEzMTAsIDB4NTliMTkxOTksCisJMHhhZjlhNzA5NiwgMHg2MzBlN2I2MiwgMHhjMTdkZmViOSwgMHhhYjNmNmE3MywgMHg4ZmI4YzU2MiwgMHhkOTAzZjUzMSwKKwkweDhiZmNhMWNiLCAweGUyMWY3YmNhLCAweDdhYjUyZmYzLCAweGYxMTkyYjhiLCAweGZjYmMyNjYyLCAweDg0NTQ4YjY1LAorCTB4MDVmYmFlZWQsIDB4ZmFjMDU2MzYsIDB4YWMxYTYzN2UsIDB4NmFjOTE2NWYsIDB4ZjRhMTdjNzEsIDB4Y2YwNDliNTcsCisJMHhiMjEwMWM1NywgMHg3ODdiMzBiNSwgMHgxZWU2Yjc2NiwgMHhkMTE2OTEwMywgMHhkMzg5YjU1OSwgMHg3NTc2OGFkOSwKKwkweDdmZTAyMjUxLCAweDJkNDA4YjQ1LCAweDMzNTc5NTBlLCAweDJmMmFiZTFjLCAweDgwZTY2NjRkLCAweGI2YjY1NmZkLAorCTB4OGViMGNjNjgsIDB4MDljZTE5YTMsIDB4NTM5ZTFkZmQsIDB4NWU3OGE1OWEsIDB4N2NiMTg1YjYsIDB4ODlmZTI3YzAsCisJMHhhNTNlNmJmOCwgMHgzZjAwMzdiOSwgMHgyZTFjYWRkNSwgMHhiZWRlNTZjZSwgMHgzYjkwMDMzOCwgMHgxMzYyYjY5OSwKKwkweDI2ZGVhMGQyLCAweDZiM2ViZDUwLCAweGFhMzVmY2MyLCAweGZjZmU3YWMwLCAweDlhNTg2OTM1LCAweDM1NGM0ZTA4LAorCTB4ZjAwMjU0OTAsIDB4YTNkMTk0ZGMsIDB4ZDczYmZjNDEsIDB4NWQ0MmYzY2EsIDB4MGQ1ZWIwMWQsIDB4ZGU0OGU1MTIsCisJMHhmMWMwNmE5ZSwgMHgzY2FmMWE2NiwgMHhkMTQ2YjY3NywgMHg2YzMzYWY3OCwgMHgzNjA5YmIwMywgMHg2MTUwNmQ1MSwKKwkweDQ0MzRlZjU5LCAweDU2YjNiOTYwLCAweDcxNTk1MGNjLCAweDA5MTY2MTczLCAweDE2MTFkZmUwLCAweDYxMjJjNTkxLAorCTB4M2Q1ZWFhY2EsIDB4M2I1MDEyNDAsIDB4ZjY4NDU4NzAsIDB4ODNmYjQ4ZGMsIDB4MGM3MTlmNDgsIDB4MzNlODAyYjgsCisJMHgwNjA1Nzk5MSwgMHhmOWRmZGZmNCwgMHg3ZmNlMmU1OSwgMHgxN2RmMThjYiwgMHg1ZWFlYjYwYywgMHgwMTdlN2QzMywKKwkweDhiMjZjM2QwLCAweDVmNGM4ZTdjLCAweGM4ZjFkMjJlLCAweGIwYWY0MDQzLCAweDZjZDVhN2JmLCAweGNmMDczZTgzLAorCTB4NDJlNmMyNTcsIDB4MDhjMmNjM2IsIDB4Yjk4NGRmY2YsIDB4YWZkZmMwZjcsIDB4Y2UyMjZmMzEsIDB4NTRkZTc0Y2YsCisJMHhjYzlhZjcxYywgMHhjMzVhMjVhNywgMHhmNWY2MDEwNiwgMHg2M2ZiMTQ5YiwgMHgwNTNiOGZiOCwgMHgxMTZjZjhmNSwKKwkweGM1OGQyMDcxLCAweGZlNmFmZDdlLCAweGMyNzk2ZDljLCAweDRmZmMwM2E2LCAweGEzNjdlOGU3LCAweDQwNjJlNjQ1LAorCTB4ZjE1MTlhYTIsIDB4YzE2M2E0MDYsIDB4NjBhYjYzNjYsIDB4MGYzMzA3ZmQsIDB4MmU4MGNiZGQsIDB4MzFkMDFlMWUsCisJMHg1ZWFmOWMyZCwgMHg3ZDNkY2ZjZiwgMHgwMDk0ZWMyMCwgMHgyYThmNDZmZCwgMHhmNDE2NTkxNiwgMHgyOTU4YWIzNywKKwkweDI5OTQzZmY0LCAweDlmZDg1NTdhLCAweDlmZDhkY2U5LCAweGJlNmQwYWU5LCAweDgxOTY1OTBjLCAweDdhODhkMGZjLAorCTB4NzhlZmY1MWIsIDB4Y2EwMTFiZjMsIDB4ZTFlMmU5NDQsIDB4ZTI1NzM4NDgsIDB4M2Q0YjA1MmYsIDB4M2MxYjI5ZjQsCisJMHg4NWZmZjRmZCwgMHg1MzUyZjRiMiwgMHhmY2ExZWZjYiwgMHgxOWJkYTQ3NSwgMHhiMDcyNzc1MSwgMHg1MDFkOTRmOCwKKwkweGEzYzliMGY2LCAweGY5ZjI2NGIzLCAweGYxZGZmNzAyLCAweGEyMjI2ZmFiLCAweGZhYmVmZjQ1LCAweDdiZWY0ZTA3LAorCTB4Y2VhNThhZDksIDB4ZTliOGMwMjIsIDB4OWI1NzkyMWQsIDB4ZmE3ZWY5NzUsIDB4YTllMzYxZTMsIDB4MzllMThmZDQsCisJMHg1YmEyMGRmYiwgMHhlMWZmYjAxMCwgMHhkMzdmNzEwZiwgMHgxNGFmMDY3NSwgMHgxN2Q0ZTM4MSwgMHgzOGZmM2E3YywKKwkweDc1MWQxZTY2LCAweDI4NDY0NmZhLCAweGIxOTEzZWY4LCAweDhjM2NkYzU4LCAweDcwNjhiODFmLCAweDZmYjljMTM3LAorCTB4YTE0ZmY5OTEsIDB4NDg4YjFlYWYsIDB4ZjE5MWU5ZjgsIDB4ZTk5MWMwYTQsIDB4N2U5MTIyYjIsIDB4NWU4YWQ1ZWIsCisJMHg0Y2IzODVmMCwgMHhlOGQ2N2YzZiwgMHg1ZTBjZmYzOCwgMHhmZjM4NmQxMiwgMHhjZGQ2Yjk2MCwgMHg4ZWMxOGE2MCwKKwkweDU3MjdkMjU0LCAweDAwN2ZhNzkyLCAweGQ3NDBjYTc5LCAweGZiNmE5N2JjLCAweGY5MGZjMjMzLCAweDc4ZmMwNzRhLAorCTB4YzAyZjBjOTcsIDB4MjVmOWMzM2YsIDB4NjRiYmZlNzksIDB4MTA2NWRkYjgsIDB4MTI3ZTljMzksIDB4NmU5OTI3MDIsCisJMHhmNjUwYmExNCwgMHg1ODYzOTgyZiwgMHg5ZjFmYjQ2OSwgMHg0N2RkZDdlYywgMHg4ZjA5OTMyMywgMHhlMzgzZmZlMywKKwkweGRmYzIxM2VmLCAweDAxZDYyNzM3LCAweGZmNTFiMTFiLCAweGZjNzg0NTk4LCAweDU3OWZjMDVmLCAweGY4MGJmZWI0LAorCTB4OWZjNTBlZWIsIDB4ZTIzZDdmNTcsIDB4ZDJkMTcxZWYsIDB4MDg4MGZjODQsIDB4MjZkMmExYzgsIDB4MDY1OGY5YzIsCisJMHg5MzJmZmUyMywgMHhlMDliMmNjMiwgMHhmZmU0NzY3YywgMHg4ZmVmODg5YiwgMHhmYzJiZGYyMiwgMHgzN2Q4YTYzZSwKKwkweDQ5ZTRmNTFlLCAweDdkYzE5ZWM2LCAweGI1MGY0NGY5LCAweDEwYTc2NmE3LCAweGJhYzc1ZjlmLCAweGYwMWRiMDEzLAorCTB4ZjExNzM3OWMsIDB4ZTg3NmQ4MmUsIDB4ZmI3ZDJjMjQsIDB4NWRmNTg2NWUsIDB4MWVjYjA2MTUsIDB4NWJiZjZmMzgsCisJMHhmZTYxYTk3NCwgMHg4ZWY3Mjg4NiwgMHhjMzZlYjBhNSwgMHgxNzE2OTk1ZCwgMHhkNTk2MzNiNiwgMHgzY2EwNzI4NiwKKwkweGJlN2E4MmNjLCAweDg1Y2I4YTIxLCAweGE0ZTkwNTg2LCAweDI3N2UwZjg3LCAweDczYzJhZDI1LCAweDM0YjMwODJjLAorCTB4NmM4NmZmNDEsIDB4YTAxMzIzZGYsIDB4NmNkNjMwZGUsIDB4NTdkNzQxNzEsIDB4MWRiZTk2MDUsIDB4ZDFkMWNmYzcsCisJMHgzODczMGQzYSwgMHgzMjNjMzZkZCwgMHgwNTdhOGRkYSwgMHg3YWYzY2ZmNCwgMHgxZTU5M2ZhOCwgMHgwZDljZjBjNiwKKwkweDY4ODRiNjhkLCAweDIyOTdjYmEwLCAweDYxYjNhM2VjLCAweDRlMjRhM2ZmLCAweGQwYzkwZGQ3LCAweGExMzZlNTBlLAorCTB4Mzg3ZGMxNjQsIDB4NmZiZTc4ZGYsIDB4MTdiMDgyZGYsIDB4ZmEyY2MyZjcsIDB4ZDA1OTEwMzQsIDB4YjE5NTcyN2UsCisJMHg0MmE1ZTUwOSwgMHg3M2E1Nzc5NywgMHg3NWM2Mzc3OSwgMHhjOWMyMDc2YSwgMHhkNDY1OWQzNSwgMHg5MzdmZmNjMiwKKwkweGJiODE0YmU5LCAweDU1NmM2MzYwLCAweDBhZmUxZmI0LCAweDcwYzhjNTlkLCAweDdhNzM1NjE3LCAweGU1OTc0ZDczLAorCTB4ZDc3MzM1NjIsIDB4ZTY1ZjA4MGIsIDB4OTZmODA3MGIsIDB4NDI0MTQxNjksIDB4YWRkOTM0NjksIDB4ZTVmYWVmYjgsCisJMHhmNzA5MTc4MCwgMHg1MjdmZTFjZiwgMHg2MTllZTU2NCwgMHgyODQ3ZTdmOCwgMHg0Yzg4ZjMyYywgMHgzMjhmZTQwNCwKKwkweDBjYTNmOWM2LCAweDZmZTkwOGU5LCAweDAwNTFkMDE1LCAweDc1ZGYzMWZkLCAweDY1YzNhNzUxLCAweDZiZjE4MjNhLAorCTB4NzBkMzI1OGQsIDB4M2Y4NWNmYmQsIDB4ODllMzYzZTQsIDB4ODdmMzRhN2YsIDB4MzY1NjY3NWIsIDB4ZjQwYjAzOTcsCisJMHg5ZmQ4OTlmNiwgMHg1MTE0OGVlZCwgMHhmMTMwYWU1ZiwgMHg3ZjY0NGVmNSwgMHhjNWY1MWEzNiwgMHg3OWJkNWZjOSwKKwkweDIzYzc5NjFkLCAweDg2Y2I2ZTRhLCAweDdjMTZkYmZlLCAweGZjZTI4NDVkLCAweDM1M2UwOTZmLCAweDBiNmZlMzllLAorCTB4YjQ2OGZmZmUsIDB4YmY1NmNhNDMsIDB4NDNmZWY0NDksIDB4MTkyODU5ZjcsIDB4YWY0ZTUwMzIsIDB4MTVhNjdkMDQsCisJMHhiMDc0ZTRiMCwgMHg3NDQ2M2VmMiwgMHg4OTZhYzg5MCwgMHhmZDY1ZTM2ZSwgMHg0N2EzMGMwNSwgMHgwMGYzNzUzOSwKKwkweGJjY2E4ZWQ4LCAweDk3NDdmZmYwLCAweGNlODk2Yzc0LCAweGEyYzY5ZjVmLCAweDc0MzNlYTgyLCAweDBiZmQ0MTA5LAorCTB4Y2Y0MWM5NGQsIDB4MTcxZjhkNmYsIDB4MzlhNjdjZjQsIDB4M2IzZWE4M2IsIDB4ZmY1MDUyNjMsIDB4ODJkMzJkZGIsCisJMHg5YzRlNzdlYSwgMHg4ZTdmZDQxOSwgMHhkZDUwNGU2ZCwgMHgxZjI0NGNjNiwgMHg3MzhhZWEzYSwgMHhlMWJiMDEzZiwKKwkweGRjOTJiYWI1LCAweGUzOTc1NDRmLCAweGQwZjZhYTYzLCAweGU4MDViMzdlLCAweDVmM2JkYjI0LCAweDkxZWEwOTM1LAorCTB4NDMyNjU2ODcsIDB4MTFjYjUzN2QsIDB4ZjQzYzRmNWUsIDB4NjZlMDMyNDUsIDB4ZjlkMWNiNzMsIDB4NTNkYmQwMmEsCisJMHg0NWY0M2M2ZiwgMHg2ZDFmZDQwYSwgMHhhN2NmZTJlOSwgMHg0MGEzNjJjMCwgMHgzOWJjYjZhYywgMHg5YWY4MDVkZiwKKwkweDhhZGY2MjliLCAweGE5Nzc5YWY4LCAweGY5OGEyOGY2LCAweGJkY2NkN2Y3LCAweGI5NDI1OTJmLCAweDA2NzQ2NzMwLAorCTB4YzUzNzI3ZWMsIDB4YmYzZTEwZmUsIDB4NzU5ZWY2MmIsIDB4MWZmYjAwOTEsIDB4NDZhYjViN2QsIDB4NWQ5OGJmM2MsCisJMHhhMWU5MTViMiwgMHhmM2E3MjJmZiwgMHg5MTk3ODg1MywgMHg5NjA5N2VmZiwgMHg4YTYxZDkwMywgMHgzYzkyYmQ5YywKKwkweDAzYWRmODU0LCAweDE1MTJjNmY0LCAweGE1NDc0OWMyLCAweGU1NDRjZWI3LCAweDJhNzhiYWExLCAweGQ5OTlkNDhmLAorCTB4NTc2MzgwMTIsIDB4Yzc5NTA2NWQsIDB4N2VkNDJjZWEsIDB4OTUyMjZlYmMsIDB4NTQ2Y2VhMjcsIDB4NGM1NzViYmUsCisJMHgwOTVkNzc2NSwgMHhiMmZmMGE5NSwgMHg2YTBkOTZiZCwgMHgyYTk3NDIyNCwgMHg0ZmNlYjRlYSwgMHg2M2QyNTc4ZiwKKwkweDY5ZDkyODIwLCAweGY5ZDA5ZjA1LCAweDM5YWRiZDRkLCAweDlkNzVjZTliLCAweDY5NTllOTA5LCAweDgxZjlkYTNmLAorCTB4OWRmYTA0NTksIDB4M2QxMWQ1NmEsIDB4OWI3NDM1NGYsIDB4NDc1ZTU2NzUsIDB4MjJmYmI4YjksIDB4YmMxMThhZjMsCisJMHg1ZmIwMmE5ZiwgMHhmZDFiMjc4YywgMHgwMzBlYTk5OCwgMHg4NDFiNGJmNSwgMHhlZmQ4NTk3ZSwgMHhmNzk0MDRjZCwKKwkweDE2MzU2YjUzLCAweDUwOWU2M2I0LCAweGY2MWU5NzMzLCAweDkwZGYxNDZmLCAweDIwZTMxZDcwLCAweDA1ZDg2Y2NhLAorCTB4OTAzYWQ1MTgsIDB4NmJhMDcxNTcsIDB4NjNmNDM5ZjEsIDB4MGY3NzI4M2EsIDB4NDc0NmY1ZjIsIDB4Zjk0NzJlZDcsCisJMHg2MGNjYmEzNCwgMHg5NWYyZTdhOSwgMHgwOGUyNGJlNCwgMHgyZmVlMDI2ZiwgMHhkYTg2YTU3MSwgMHgxOThmNjI4ZCwKKwkweDlkNWY2MGU1LCAweDY5ZDIxNjc3LCAweDBhZTcyYzgxLCAweDMwZWY1YzM0LCAweDgwYmRlNDExLCAweDU3NmRmYjdjLAorCTB4ZWRmM2RhMjIsIDB4ZDAyZjllZGMsIDB4ZmE0NGVjOTYsIDB4ZmU3MTU2YWUsIDB4Zjc3YTMxNjUsIDB4ZDU0NzVjMWUsCisJMHhmNDJjZjE1ZCwgMHhiNDRkODllYiwgMHhjNTY4NDI2YywgMHg2MDY5NjQxZiwgMHgxNGQ2MTdiNywgMHhlZGRjYTI2NywKKwkweGFmODg1YjYxLCAweDEzZmQ1ZWMxLCAweDMzOGZkYmQyLCAweDk5NDVkZjgxLCAweGY4OWU2MDQ4LCAweDRkYTZmMGUyLAorCTB4ZDdhZGRhMDIsIDB4Y2U1ZDIxZTcsIDB4MzAwZjlhZDUsIDB4ZjY1ZjA3ZTAsIDB4ZGNmYmQxMDAsIDB4N2ExZTczNDgsCisJMHhhZmVjYmUwYSwgMHg3Y2NlM2Q3OSwgMHgyNmU3ODA0MCwgMHgwMGJmMzAzNiwgMHhlOWNmNTVlYSwgMHhmMDA0OWY0ZCwKKwkweDE1MTNkM2E5LCAweDRiNjlhZjU0LCAweGMwMTI3ZDMwLCAweDA3Zjg1NWE3LCAweDA5Yjc0N2ZhLCAweDBlYmI5NDJhLAorCTB4MDRhNzJiNzksIDB4YjdjNDA1ZmIsIDB4MGQ3M2Y4YjMsIDB4MDY4MGRmZGYsIDB4ZDk4YmQ4ZWQsIDB4YjA2ZmEyNjYsCisJMHgwZmVmNDk5NywgMHg5YmJhMzRjYywgMHgyMzcxYmY2MCwgMHhhMDU3YjM2YSwgMHhjZTY5OTRmZCwgMHhlYTQ5N2VjMywKKwkweDYzZjQwODgxLCAweDE1NTViZmZhLCAweDE5ZWZjOWJiLCAweDc4YzlmODg4LCAweGQzM2Q3ZDNmLCAweDI4N2I1MTIxLAorCTB4NzBlNmI1ZGQsIDB4Y2QyNmFmN2YsIDB4NTBmMTE5YjAsIDB4NTFkM2FmMWQsIDB4ODhiMTcxZDksIDB4OTI1NjlkOTEsCisJMHg0ZGI5NzY4NiwgMHhkMGNiZmRjMywgMHhiODczN2JmMSwgMHhhZjVlNDkxZSwgMHhhMjQwYjkyMSwgMHgwYjZjYjYwOCwKKwkweGM1ZGQ0YTYzLCAweGY4ZDYzMjI2LCAweGJmMjFiMDhiLCAweDM0YzljMDA3LCAweGM4M2Y2NTYzLCAweDQxNDc2MjM1LAorCTB4MWI3ZjUwNWEsIDB4OGU3YTFmZjYsIDB4OGZmMzFjZjYsIDB4YmI0OTc5NGYsIDB4NWU0YWFkNjMsIDB4Mjk2NWU5MGYsCisJMHgxODNmYTM3MywgMHg3MmFiYzcyYSwgMHhjMGI5NjVhMywgMHg4Yzc0ZmNmMSwgMHg5Y2YxMTFiZSwgMHhlNzdkMDEyNiwKKwkweDUwNGNjOTUwLCAweGIyMzM4NjI2LCAweGQ3NWYxMzM3LCAweDc3M2U5MWJiLCAweGE3ZmQzOWViLCAweDJkZGNiYzg5LAorCTB4MzA5YWZlZjIsIDB4NTc3YTQyZTYsIDB4Yjk0ZDg3ZmMsIDB4NzliOTI5ZjYsIDB4ZTY5NzhmMzQsIDB4OTFiMjVhOTEsCisJMHg4Nzk4MTNhZSwgMHgyNGVjNTdkNiwgMHg0M2Q4MWZhNSwgMHhhYTAyMTI3YSwgMHhkN2M0NzQ4MSwgMHgxNjFjNDk1NCwKKwkweGE2NzIyNzllLCAweDQ0OGNlNTE1LCAweDRmYjFiMGZlLCAweDVmNzdlNDAzLCAweDQwYWFjNDc4LCAweDc4ZTM1NWZjLAorCTB4ZTliOGUwNDMsIDB4ZWYxOTRlMzQsIDB4NGZiMjI1NWMsIDB4MjQ1YzkwNDcsIDB4ODlhNjcyM2EsIDB4NGI1NjJmZTQsCisJMHhmZTgwODhlYywgMHhhMGQ2ZWIxNiwgMHhmNWM2NTM5ZSwgMHgxNGZjMWM4MiwgMHg5MDQ3ZjBmMCwgMHgwODdlNTg4YiwKKwkweGZmZDcxMGYyLCAweDJjNDNjODMzLCAweDEwZjIwYWZmLCAweDNjODI0ZmRiLCAweGYyMDdkMmM0LCAweDA2M2ZkYjEwLAorCTB4YmNlNTg4NzksIDB4ZTQ1NjhkYmIsIDB4NjliNjlhOWYsIDB4N2UyMGQzZWMsIDB4MDE3ZGRiNTAsIDB4YzM2OWRlZjUsCisJMHhhNjQzOTFkMywgMHhlMWU0ZGVhMywgMHhlMWNiYWY5ZiwgMHgyZGVmNDU3ZSwgMHhhMGZkOWYxYywgMHgwMGZmZDFiZiwKKwkweDhhNmI1Y2JhLCAweGVmMWViMmJlLCAweDFlZjliMjM3LCAweDdjYjZkMzgwLCAweDI3ZjQ4NzZlLCAweDFjZDJmYWYwLAorCTB4MjI2ZGQ1MzUsIDB4YjdlMzhlZGIsIDB4ZmFmODZiZTUsIDB4M2UzOTYyMjksIDB4NzlmMzQ1YjcsIDB4YjI0NWQzN2IsCisJMHg5ZTRlYTY5ZiwgMHg5ZTA3MjRiNiwgMHgzZGExNjJkYiwgMHhiZGVmNWZjNywgMHg4ZGI3M2Y4MSwgMHg3YTQzZWRlMiwKKwkweDI1M2U3ZTU2LCAweGVmZjhhNGQ3LCAweDY1MmZkY2U5LCAweGJkMDEyNzY0LCAweGZmNGFmY2QzLCAweDNlNzIyNmY3LAorCTB4NGVlZmVkMGMsIDB4YzNkZDhiMTMsIDB4OTkyZGUzYzAsIDB4ZDAyZjg5NmYsIDB4NDgzZTQ2OWUsIDB4NmE4YmUwMGUsCisJMHg0Mjg1ZjEzMywgMHg1NWZkMGE4NywgMHhhNzM4NzJlNSwgMHgwNzNhNjU2OSwgMHg0M2YwNDJkZCwgMHgzYTcyODMxZCwKKwkweDI1ZjY0ZjRlLCAweGUwYzZjNWMwLCAweDk5MDViYjNjLCAweDAxZjk0MjVmLCAweDBhMDdkNDRhLCAweGEwN2MyODNmLAorCTB4ZjAyMjdiZDAsIDB4M2ZlZDEwOTksIDB4ZjQyMWNkYzcsIDB4Y2E4Zjk0YWEsIDB4MzU4ZWU4ZTcsIDB4ZGFmMDljZmUsCisJMHhkZmExMzZhMSwgMHg4N2NjMzM3NywgMHhjMWM1MTNlMywgMHhmZTQ2ZWY3NywgMHhkMTlhMzU4YywgMHhjODdjMmNmNSwKKwkweDFjOWMzYjUwLCAweGMyZWZmYWViLCAweDU3MGI5MTQzLCAweDcwNjVjNzgwLCAweDVmZjJmMGQwLCAweDM5YzkwMzg1LAorCTB4YmY0OGUzOTQsIDB4ZmRhZGM4YzMsIDB4NWRiMmQxMzksIDB4NDRmN2U5Y2UsIDB4ZDIxZjZkOGUsIDB4NTdhMGJmNTEsCisJMHhhZmQwZGZhMSwgMHhkOWRhYzM2NywgMHg3ZjM5ZjJkYiwgMHgwNTU0NzQyOCwgMHg4OWViMTAzYSwgMHhjYmQ0Y2U3OCwKKwkweDllNzI5ZWU1LCAweDYzMmU3M2ExLCAweGMyZDJmZjI0LCAweDllMjg3Yjc4LCAweGM4MDU3Mzk1LCAweDAxMzljM2JmLAorCTB4YjhjNjFmZjEsIDB4ZDgxZDcxN2QsIDB4NGQ0ZmU4MTcsIDB4M2VkMzM1YzksIDB4NTY3ZTQ3ZmEsIDB4Y2ZmOTk1YjYsCisJMHg2ZjBlNDc3ZiwgMHg4ODk0NGE3ZiwgMHgzMmZkMTQxZSwgMHg4YjQ4MmVkNCwgMHhlOTA2NjRlNiwgMHgzZjQyNjYxZCwKKwkweGZjNGI1M2FmLCAweGU2N2YwNWVlLCAweDNlODcxODI1LCAweDNmZTQ5YjIxLCAweDcxZTMyMGJmLCAweDExNThmZTcwLAorCTB4YWZiZWJiZWQsIDB4NjNkNDJlMGQsIDB4NGUwNmEzN2QsIDB4NmZiZTMwMGEsIDB4NjQzNjE4M2IsIDB4MTM2ZWQ4OTcsCisJMHgwN2RlZWY0MCwgMHhkNGY1MDYzYSwgMHgyYzdiOTAwNSwgMHg3MjczYjE5ZCwgMHg3M2NmYTExYywgMHg3M2ZhMjRmMSwKKwkweGE2MjQzYjM1LCAweDNiNGE1MDAzLCAweGY0ODc5YWJlLCAweDZkNTNiNGI0LCAweGY2ZDBiOGEyLCAweDNkMjE4ZWM3LAorCTB4Y2MxNTZlOWUsIDB4YjVmNDk3NjgsIDB4YmZhMWYxYzIsIDB4ZDZlOGMxYjMsIDB4YTgyMmZmNDMsIDB4MDY2NWZmNjMsCisJMHhkN2NjZGI4ZCwgMHg0MzgzZjhhMywgMHg3ZDUzZWY1ZSwgMHg4NWM2MGE3NSwgMHgxMzUwZWM2NiwgMHgyZjNlOTdkYywKKwkweDNiM2VkMWI5LCAweDBhYTU3ZGJjLCAweDAyZGRhN2ViLCAweDQ1NzE4MzhiLCAweDA0YWVlYWQyLCAweDJkM2U1N2E4LAorCTB4Y2UzMGI0NTgsIDB4OGIzYTI4NjEsIDB4ZTdjYTgyZjEsIDB4ZjMwYmM1OTksIDB4YzkxOGI2NTcsIDB4YTBkYTVkY2YsCisJMHg2MDE3ZDhmZSwgMHhiN2JiOTQ1ZiwgMHgyOWVlZDA2YSwgMHg1ZWRjMTlkZiwgMHgwZWI4M2JiOSwgMHhlZmY5MjJmOCwKKwkweDAwZjY4NjY4LCAweDhlNmRmY2Y5LCAweGNkZWM4NjMxLCAweGVkMWIyYzcxLCAweGUzYzBkNjRkLCAweGJmN2M4YWI5LAorCTB4NzE3NTZlZGMsIDB4Y2I4MmJhMzksIDB4OGNiZWM2NmQsIDB4ZWE1ZjdmNDUsIDB4NjNlOTJhZmMsIDB4OTFjZmFmMDMsCisJMHhmZWEwYTdlYiwgMHgyZjFjNTdmOSwgMHhlNWFhNWMwYSwgMHg2MDRmM2ZiNSwgMHhiNzljMGY1NiwgMHg0MjZmNTNiYSwKKwkweGZkYmFiZmZmLCAweGI3MTgxMWVmLCAweDUxZjMwOWFmLCAweDIyYmQ5ZjdjLCAweGRiZGVkMDk5LCAweDEwYjkyNmQ4LAorCTB4ZmQwZWNlYmUsIDB4NTZlMDExMmUsIDB4OGQzZGUwN2QsIDB4NWY3MDg4ZDksIDB4YWRjYWY2NGUsIDB4ZTMxZWI1Y2MsCisJMHg2NDUxNWVkYywgMHhkZDQ3NDRkZCwgMHhiNjY2YTcxNCwgMHg0ZjM4YTU4MSwgMHg4NGRlYmI1ZiwgMHgyYmY1NDA3NiwKKwkweDhkZGQ3NDFmLCAweGQzMDIwM2Y1LCAweGZiNDcxZTIzLCAweGVlOTY0ZTg4LCAweDJkYTU4NjQwLCAweGZiZTQyNmRkLAorCTB4YmM0MjQ0ZTksIDB4OTEzZDllMjIsIDB4ODg2NWFmODQsIDB4ZTAzM2M0NzcsIDB4MjEyY2YxMWQsIDB4NTFiYzcxM2UsCisJMHgyMjc0ZTZlMywgMHg3M2Y0ZmQ1MSwgMHhkZTBhYmYxYywgMHgxYWNkYTQ4YiwgMHhlNDZjYWY2YywgMHg2M2IxOWU3OCwKKwkweGEyMzBiNmNmLCAweGU5OTMzNTAzLCAweDdhN2VmMDgwLCAweGE2YmJjNzI3LCAweDE0NjY5ZDczLCAweDA4NjM2ZmQyLAorCTB4ODc2YmI0MWQsIDB4NzdmNzAwZTgsIDB4ZTA4NDFkMTksIDB4OGRmMDAyYmYsIDB4MGU5NDIwNzIsIDB4OTNkZmYxNDIsCisJMHhkODA2ZTVjMywgMHg0MjlmYTdkZiwgMHg3ZTA4ZGJmYiwgMHgyM2M3ZjMwMSwgMHgxZWY1NTY0NiwgMHhjYWY1ODE4ZCwKKwkweDk3M2JjZmEyLCAweGY4ZDhmYjQzLCAweDA4ZGE1ODk3LCAweGU0MTU3ZjhhLCAweGU2NmJmYzYyLCAweDVkMTBlYjNiLAorCTB4Yzg1ZWIzM2QsIDB4NTdhOTdhNDYsIDB4ODEzY2Y2ZmIsIDB4NzBhODhiNzEsIDB4MjdmNGUzOGEsIDB4MzJmOWQ5Y2YsCisJMHhmYTIwYmI5YywgMHhkODE2YTQ5YiwgMHg1YTZiY2Q3ZiwgMHhjOTI4ZGViYSwgMHgzNWVjODcxNSwgMHhmMTI5OTc4YywKKwkweGM1MzNjMDc0LCAweDVhMWQ5Y2M5LCAweDJkNmIxNzFlLCAweDczZmEwNWI0LCAweDVjZmMwOWZkLCAweGIyODE5YTg1LAorCTB4YzAxN2U4ZTUsIDB4NjA4ZWI4N2MsIDB4NTU1ZTdlZTMsIDB4MjgxNzhmMDcsIDB4MTI5NTU5N2UsIDB4OGUwZTY4MzcsCisJMHg3N2E2MDgxYiwgMHgyZTQ1NWZhOCwgMHhjNmE1NWY4ZiwgMHgzYjQ2NmNkZCwgMHhiMzAxN2ViYywgMHg0ZDVlYTU4NywKKwkweGNjNzhmMDNmLCAweDc0ZGZiMmQzLCAweDBhZjFmYjQ1LCAweDFiYjE0MjdhLCAweDZlMzgyYjk5LCAweDY1YTljOGExLAorCTB4OGYxZWY5MTMsIDB4NmFiOGUyZmUsIDB4NzZmZGM2MDQsIDB4OGE4Zjg0MGIsIDB4NzA0ZjkwMGUsIDB4ZGFiNzBhZGUsCisJMHhmODAyMTY2ZCwgMHgxOWZmZWU0OSwgMHhlZGMwMWJkMiwgMHhhMGY2YWI4YywgMHgxOWRkMjEyOCwgMHg5OTBlYmY2OCwKKwkweDhlOTFhYjNlLCAweGQ2OTViY2UwLCAweDljZjAyMjM3LCAweDM4YWU1OTBlLCAweDdmMTQ4ZGRhLCAweDhhNWI2NGFiLAorCTB4NjEyYWVlOTAsIDB4ZjQzMGVmM2QsIDB4MGI1Y2Y5NTQsIDB4YTJkNzI5ZjksIDB4YWNjZWM1MjcsIDB4YjdlZTBkNmUsCisJMHhjZTQ4NzczMSwgMHhlMDFlZmY4YywgMHgzOTY0MDFiYiwgMHg5OTJlN2JkNywgMHhmMTIzMzJmZSwgMHg5OTkwNmZkZSwKKwkweDg3OWY5MTIzLCAweGVkYzA5ZmY0LCAweDVjZmU0NTM3LCAweDNjNTgxZGJmLCAweDZlNzFkZTYwLCAweGFjMDU1MzFkLAorCTB4YTY3M2UzN2YsIDB4NGY3OGZhYTAsIDB4OWJmZjUwN2MsIDB4Y2Y0MWNjZGEsIDB4NDExOWJkYjMsIDB4NTk4ZjczY2YsCisJMHhkZDc5ZWE4MiwgMHg0ZmZhODMxMywgMHg1NDE2ZDBmOCwgMHgwZTJiZTQ5ZiwgMHg0Y2U1M2ZlYSwgMHgzMDdkNTA0OSwKKwkweDk1NzNjZTEzLCAweGUzNWJjMWZiLCAweDMzZmVhMDg1LCAweGY5YTBmYWNkLCAweDA1NDQ2NzY3LCAweDMyMGQwN2Q1LAorCTB4NTJiYjY0N2MsIDB4Y2U1Zjc3YjEsIDB4Njg2ZWY2ZTUsIDB4NzZmN2MwYTksIDB4OGEzYWYwNGIsIDB4YzRlNzdlYmYsCisJMHhkOGU2ZjVlMCwgMHhhMWZiZDc4MiwgMHhmYTBiZDk3OCwgMHhjMjdlMDU1NCwgMHhiMTVmYTA3MywgMHgxM2Y4MWRmYywKKwkweDlhMTNmMDJhLCAweGZhYzA5ZmMxLCAweDYwNGZlMDhiLCAweDAyN2YwMWU5LCAweDdmMDI1ZmRiLCAweGUwYWRlYjAyLAorCTB4MjBmZDYwNGYsIDB4NmY1ODNmZjgsIDB4ZjJhNjJiYWIsIDB4NmExMmJhOTUsIDB4YmFmYzE2YmYsIDB4Yzk4Zjc1ZTQsCisJMHhkNzk3MWVlYiwgMHg3NGUxNzdmZCwgMHg1ZGVmOWU0MiwgMHg5YzZlYmU3OSwgMHhkY2ZmY2QyZiwgMHhiYzU2M2M1OSwKKwkweDJkM2NmYzA0LCAweDg3YzZhY2ZhLCAweDVmMGFjMzdlLCAweDA2MmRjNjExLCAweGM2MTg5MmRlLCAweDdkZGQ5OWE1LAorCTB4ZjUwNjJlYWMsIDB4MzM4YTA4ZDksIDB4Yjc4MTkyYjMsIDB4N2Q1MmFlMzEsIDB4YzliNGQ1MjAsIDB4MGZlY2ZhOGMsCisJMHhiZWYzZTJlZiwgMHg3YzhjYzk1NiwgMHhlZmVkYTg3OSwgMHg4NWNmMzgxMSwgMHg1Zjc0NjE0YiwgMHhlZjEwN2E0YSwKKwkweDU0NjFiZjFiLCAweDMxY2YwNGRmLCAweDA1YjMzYTBlLCAweDM3ZTkwODA0LCAweDBiYjdlOTBmLCAweDRkZGQ0YTY5LAorCTB4Y2QyNWJkZjcsIDB4NTNjNDFhMmQsIDB4M2MyOWYyMTUsIDB4MGVhM2NiN2YsIDB4NjM1Y2ZlN2UsIDB4ZjYxMzczZDAsCisJMHhlNTRhYjI4NywgMHhiOWMyMzhhNiwgMHgyZjNlNjUzNiwgMHhmMWE0NzdmNSwgMHhjZjczY2Y3YiwgMHgwNTNmNWUxZCwKKwkweGUyY2I2ZmY1LCAweDVlN2Y3ODExLCAweGVjNWVmY2Q1LCAweGM3YzE1N2JkLCAweGM4NWYwN2U3LCAweDc2Y2FmYmE0LAorCTB4OWZlMGNmOTgsIDB4OTZhZWQ5Y2YsIDB4OGVmZjdjZWIsIDB4NjhhMjk2YjQsIDB4MDJjZDFjNTQsIDB4MDVjNTBiMWIsCisJMHg1ZmVlODViNiwgMHgzOGY2ZGFhYSwgMHg2NTU1NmU1MCwgMHgwMDY2YWRkYywgMHgyNDhmN2U5ZiwgMHhiZGY4MzdjNywKKwkweGI4YzRjMzkxLCAweDIyZjllNzFkLCAweDVmNTdlZjAyLCAweGMzYmQxY2Y3LCAweDM4ZWRmODg2LCAweGY2ZWI4MTFjLAorCTB4ZmU0MTRhYjcsIDB4YjcyYjY4ZDMsIDB4MzU1YjQ3OGYsIDB4YWQwYmJmODQsIDB4NWVmMDIzODcsIDB4MzBlN2EzNzcsCisJMHg0YmNhYmI4NywgMHhkNzI0M2ZlNywgMHg3ODI0YTFmYiwgMHhmZTc0NDliNywgMHhkMDYyNGI4YSwgMHg1NTg2NzYzZCwKKwkweGI2NjY3OWEyLCAweGI5ZTIzNThkLCAweGJkN2MzYzdhLCAweGI3OTlhYjFjLCAweDgyNWUyZGE3LCAweGJmMWUzZmZiLAorCTB4N2IyMjRmMjAsIDB4Y2EzNTA0MTAsIDB4ZWY2NjFiZjEsIDB4Y2FhNDNiNDEsIDB4ZjM4NmQ5MjMsIDB4NzllNDBhZWYsCisJMHg0ZTljZDRiYiwgMHhkZmRiNGFkZiwgMHg3OGY4ZjI4NSwgMHhkMjZjODhmMSwgMHg2OTlmOGExMSwgMHg5MTZmNzZlNSwKKwkweDdhODY5ZWM2LCAweDM2NjBjN2E0LCAweDU4M2Y5ZDIyLCAweGZjNDQ2YTljLCAweGRiMTJjMjFlLCAweGVjNjk3NzhiLAorCTB4ZTZjN2JjMDYsIDB4YmE5OGY1ZWIsIDB4N2FlZTkwMjMsIDB4YjQyNTczNWEsIDB4ZjJmOTk0NzcsIDB4ZTg4Nzc1ZTUsCisJMHgyZTZmMDg3YiwgMHhiYmI5NTNjMiwgMHhmOGYzODBkMSwgMHg3M2RiYzdmMSwgMHg3ZmVhMjZhYywgMHgzY2RlZmRkYywKKwkweDMyN2FhYmI0LCAweGU5MmVjOWMyLCAweGE3ZjIzMGQyLCAweDVkYjk5YWFiLCAweGQ4OTFkM2RjLCAweDkyNGY3ODE4LAorCTB4ZjJmZDk1NjMsIDB4ZGFmMDkxMGMsIDB4ZmI5NmE2ZDcsIDB4MDU4N2JkZGQsIDB4MzlkMzUzZjUsIDB4ZGUwZWVjMmYsCisJMHhlYTdkYzk4ZiwgMHgxZGM3YjQ1MSwgMHhmNTBjNGI0ZiwgMHgxYjVkNDNhMiwgMHg2Y2ZmZTc4YiwgMHhjYWZlZjA2NywKKwkweGQ0M2IzODY1LCAweDAwZDhkOGRlLCAweDBmYjQ3NTdhLCAweGU4ODE4ZGYxLCAweDEzZTE1ZGJjLCAweGMxNTNlMTMzLAorCTB4YjcwNjRmNjMsIDB4ZjllMjdhZTcsIDB4NjVhM2E0YmQsIDB4ZTVmNWQxMGYsIDB4NjRlZWE0ZjEsIDB4N2YxMjFmZjQsCisJMHhlNzc4YTNhOSwgMHhjNTY3ZmNiNSwgMHhhZmYwMDg2ZSwgMHhlYThiZmExOCwgMHgzMTNjZDRlMiwgMHhiYzFmNmZjNSwKKwkweGI2YWI2Yjk2LCAweGFiYmY0NDhlLCAweDFlY2FmYzg0LCAweGFjMmNmNjA2LCAweDNhN2I0NGU5LCAweGI2MWZmMjkyLAorCTB4YWQ4M2JhZTEsIDB4NzZiZmJhNmEsIDB4N2Q2NmRhZWEsIDB4YTBkOTc2MDIsIDB4ZjYwNTE4MDUsIDB4MmQ1M2I4M2QsCisJMHgwY2Q5N2JkZiwgMHg5NTJlZDc2OCwgMHhjY2NmZGFlZCwgMHhmNDA5N2NmNiwgMHg0ODhkNzNhZiwgMHg4NjY0NzNlNywKKwkweDI3ZDMxZjkxLCAweDViY2ZiZGNiLCAweGJiMjRlZjkyLCAweDQyNjQ5OGUxLCAweDg3ODY2ODdmLCAweDY2OGVjMWRiLAorCTB4N2I1NmQ3NmUsIDB4MmE2M2ZmOTIsIDB4NmFjZGVkZGEsIDB4OGE2MGQ0Y2MsIDB4ZWQ5NGUyMWQsIDB4ZGRiMmQzOTAsCisJMHg4MGNkN2E3YiwgMHg0ZTliZmM4NiwgMHg4Yzk2M2Q4MSwgMHhiYjViMmE3OSwgMHgzM2I5ZTExMiwgMHhiM2Q5MTY3MywKKwkweGVjOTlhOTRlLCAweDgzZGI2NTg5LCAweDZmYjAwN2VkLCAweGNmNTVlYTgyLCAweDcyMTdkYTg1LCAweGRjMTNjYjdjLAorCTB4ZGI4N2Y4YWUsIDB4YzY3NjQzYWMsIDB4MGE2N2Y0MzgsIDB4Yzg3MWE5YTUsIDB4NzhjODJmMGYsIDB4OTU5YmZjNTUsCisJMHhiNzk0MmRlMywgMHg5ZTY1NTFiMywgMHgxMDIxYzRhNSwgMHhmYjlkMzU1ZSwgMHg2ZWRmNzAyYiwgMHhmYzg1OTg0NywKKwkweDEwYWY1NThkLCAweGU0YmZmYjVjLCAweDNjN2Y0YzdlLCAweDMzZjQ3ODIzLCAweDM2ZmVkZjBlLCAweDZhMzVlNzRlLAorCTB4NDhmOThkYzEsIDB4MzRiNjQwMzUsIDB4YWY3MDRlOWYsIDB4NmJiMzM4YzEsIDB4MTNlNDgyMzAsIDB4MTdjOGM1NjMsCisJMHg3ZjcwMTYyYiwgMHg1ZjMxODZkNSwgMHg3ZTE1NmIyOCwgMHhiN2FiZDEwOCwgMHg1NDUyN2NhOCwgMHhiMzY4OWM4MCwKKwkweDAyYmY1MGE2LCAweDNlYTNiMzBkLCAweDkwYjQ2OTViLCAweGUzYTMxYjdlLCAweDZhZTE3YTc2LCAweGMzZDIzNjRmLAorCTB4YjVjN2YwMTgsIDB4MzFmOGYxMDEsIDB4ZmIwMTAxODYsIDB4Yzc4MDdlZWQsIDB4YzI3ODk1ZmYsIDB4MWQ0OTk1MWMsCisJMHgxOTFmYTAxNSwgMHg5NWZkNDM1YiwgMHhmMGEyNDFmOSwgMHhkZjlhZDdmMSwgMHhmYzFiZjMwNCwgMHgyM2JjMDNmMywKKwkweDU4NWZkZTExLCAweDkzYjdhNDJkLCAweGZmZjcyOGU2LCAweGNhOTdjNGI1LCAweGJkMDAyZTc5LCAweDYzMTgxYzYxLAorCTB4YzczNzg4MzQsIDB4OWZjODM3Y2UsIDB4ZjVlZWIyNzMsIDB4ODIyOGFlMzgsIDB4ZjcwOGEzZWYsIDB4NWUzMGY1ODMsCisJMHhlNzk2NTFmZSwgMHhiY2JjNzliMSwgMHhmOTE1MmU0ZCwgMHg3YjY3OTBkNSwgMHg5NWY1MGFkZiwgMHg1OTNmZjY3OSwKKwkweDg4OTlhZTQ5LCAweGI0Y2E1NzNlLCAweDljNGNmNjAyLCAweGJiZjkxODZmLCAweGYwODkxZGUyLCAweDAzZjAwNWZhLAorCTB4NWFjMmZiZjIsIDB4NjQxNjljYzEsIDB4YWYzYTcxMmYsIDB4M2NlYzRkZTEsIDB4NDU0ZWY0ZjMsIDB4ZGQ2Y2I4MzgsCisJMHhjNmQ3OTgxOSwgMHg1YTJkN2YzOCwgMHgwNWE3MzdhNSwgMHhiZDIwMDdkZSwgMHgwMjUxZmZhMywgMHgyZmQxZjJmZiwKKwkweDUzNzJiZmUzLCAweDU3OTQ2ZGM1LCAweDhjZDYyYWI1LCAweGM4MzUxN2Y3LCAweGE2ZDcyOTBmLCAweDg3YmE1MGZmLAorCTB4YjdhNDRlZGYsIDB4YTBiNWE2NmEsIDB4MGI2OWE5N2UsIDB4YTE1MTZlN2QsIDB4MDg0ZGZlM2QsIDB4NzRjOTI0NWYsCisJMHhlODE3NjhkYSwgMHg1YmYxYmQ3ZSwgMHg5NWEzOGYxNSwgMHhiYjM3MTQwYSwgMHg0ZTkxMWEwYiwgMHhjYWZkODdlOSwKKwkweDdlNzFiOWE3LCAweGZiYTBiM2NjLCAweDM5MTg4NmFlLCAweGVlODYyYmVmLCAweDlmMjI3ZWUxLCAweGY3OTUyZWZmLAorCTB4YTNlZmU0MGQsIDB4YzYzMjRmNmEsIDB4ZjkzYThlNzEsIDB4ZTYwMmQ1M2QsIDB4NTJkZDdiYTEsIDB4NmY2NTRkZDYsCisJMHgyZjAxZjU3OCwgMHg4ZDFhZWU0ZCwgMHg3NjA3Zjg3ZSwgMHgxYTkxYzUyZCwgMHg1MTE5MzZkNywgMHhiNWIxNjZjZSwKKwkweDAzMWZiYzI2LCAweGZiZWU3OTM2LCAweDFiZGIyYmRjLCAweDk0NjhmN2ExLCAweGM3ZTc5NTlmLCAweDkyYmNjYWYzLAorCTB4ODNhMDNjZjgsIDB4ZjhhMzgwMzMsIDB4NTdjN2NiOWMsIDB4MDIyMDdmYmQsIDB4ZmVmZTdlZTEsIDB4Y2E3ZWYzZmQsCisJMHhiOTAyMGZkMCwgMHhkNjU0ZjMwNSwgMHhiZGQwNjRiNiwgMHg2Nzc1OGI4YywgMHhhYmYxZmJlNCwgMHgxZmMxNTNlMCwKKwkweGYwODM5OWI0LCAweDBlYjk2NzBhLCAweDBkOWYzM2UwLCAweGQzNmU2M2U0LCAweGMwYTlmMGI1LCAweGYwM2Q0OTM5LAorCTB4ZTgyNTA0NjMsIDB4YTE0MzkyMzEsIDB4NWVlMDU2NzgsIDB4M2NkNTZhY2QsIDB4ZWVmYjU2ZmUsIDB4YjNmZmU4MDIsCisJMHhlZDE5YTJiNSwgMHg3ZWYwY2JjYSwgMHhmNTc4ZmMwZCwgMHgyOGQ3OTFmYywgMHgyNTdiM2Y5MCwgMHg1YTc4Mjk3YywKKwkweGZmNTRiY2M4LCAweGZiOGY4YTMwLCAweGYxNDRhMTcwLCAweDdjNjlmZmMzLCAweDRiZDllNDM1LCAweGI3YzJhZWYyLAorCTB4MjU3YTdjYTEsIDB4MmFiNDVjYmUsIDB4Zjg0MzdmODQsIDB4MmQyZjg4NzQsIDB4N2YwMDJmZjAsIDB4YzQxMTU1ZjYsCisJMHgxZDdlMGE4ZiwgMHg1MTkzZjA2NiwgMHgyZDE4NzVmZiwgMHgzZTM5NzY2ZSwgMHhmZGM1ZGZkMSwgMHhlYzBhYjY1NCwKKwkweGYwODdlMTQ5LCAweGUzZmM4ZmFiLCAweGFkMDE3YzUwLCAweDU0MWY1MGQ4LCAweGE5ZjMwNWU3LCAweGM5MmJjNzgyLAorCTB4N2RlZTQ1MmQsIDB4NGQ0N2JjYzQsIDB4NzA2N2RkMDIsIDB4OTY4NWZlM2UsIDB4ZmI5NGU5ZjIsIDB4ZTJkZWU1MGMsCisJMHg2ZmFlM2NkMSwgMHhjMDhmY2I0MiwgMHhhMjdiYzE2ZSwgMHgyMzNkMTk0ZCwgMHhkNWViZGVkMSwgMHg3YmYwZjMyOCwKKwkweDc0ZDY4ZmQ3LCAweGNkN2NjNjhmLCAweGIyZjFhNjhmLCAweDRjZjNjMzU3LCAweDhjMmRiYTk0LCAweDRhM2YwM2M3LAorCTB4NmUxMGJhZDAsIDB4YTZlMzA5MWYsIDB4OTFmMDFkYTMsIDB4NzgzYmNiZjAsIDB4YzY2MzRlM2QsIDB4ZTliODgyZmEsCisJMHhhYWY3YTgyNiwgMHg4M2UxZjg5NSwgMHg1Mzc2ZmNiMiwgMHgwOTgyZDFmOSwgMHg2MDRmZDQwNSwgMHg2NjFlMTA0NywKKwkweDNhZDA5NTgxLCAweDBjNWQxMDgyLCAweGU3ZThmOWZiLCAweDVlZjA3MzYzLCAweDAzZmYzOTQwLCAweGY0OGUzYzc5LAorCTB4NDMxY2Y5MWIsIDB4MDk1ZmY2ZjEsIDB4MDQ1ZjZmMTQsIDB4Zjc4NGMzYWEsIDB4Mjg5ZmQzMDIsIDB4OTNmNjgxNGUsCisJMHhhNmNkNGViZiwgMHhjMTE1Y2FmYiwgMHg0ZGZlYTNlYiwgMHg1NmU1MzhhNiwgMHg0Yjk2ZTc5YSwgMHg5OWM1ZWEwMywKKwkweGU5MGQ3ZGZlLCAweGJjOGI4MmNkLCAweGEwZDhjOTdkLCAweGY0NWI2NjdjLCAweGJiMjdlZTM4LCAweDhmNTEyMzUzLAorCTB4ZjA2ZDdhMjksIDB4NjA0MzdlZDgsIDB4MWNhY2Y1MWMsIDB4OGZhYTFlNzcsIDB4NTAyOTI0N2IsIDB4ZjdiMWJlMmYsCisJMHhhNzljNzRlMSwgMHhiMmNhZTM1YywgMHhmOThmMzAxOCwgMHgxZmI0MjRhOSwgMHg5NDNlZjdjYSwgMHhkZWVkNzY0ZSwKKwkweDlmZThlOThkLCAweDljM2QzNzk0LCAweGI4N2FhMzZlLCAweDE1MjNmYzlkLCAweDdkZjlmNzNmLCAweDBhNmQ3NjkzLAorCTB4OWQ2ZmEzYjAsIDB4NTJmYmVkYzAsIDB4Njg4NTFiZGQsIDB4ZjFiYWNlZGYsIDB4YjcxODc1ZjMsIDB4ODE2YmZiMWYsCisJMHg1OTBiNzBlMiwgMHhiN2Q0M2FmNywgMHhhZjljMTk2NSwgMHhlNDhlODM1OCwgMHhmNzQ3Y2MzZiwgMHhkZGM2N2JhNCwKKwkweGZlZTUxYmJlLCAweGFiYmY4Y2YxLCAweGNkZmVhMDk3LCAweDY1N2NkMTUzLCAweDBlMzliZGNjLCAweDA0MWI2ZmUzLAorCTB4ZmJmOWJmOGEsIDB4ZDc3YmE2OGYsIDB4NGQwNTZiYzUsIDB4NTFlYTBjN2MsIDB4YzdmZDc3OWUsIDB4ZTM4MjI4YmMsCisJMHhiYmIyMWIzZCwgMHgzNTZjYmRiMCwgMHg3NWE1OWY2ZiwgMHgzY2UwZjZiNywgMHhjZjI4Njg0ZiwgMHg0YTY1MTQwYSwKKwkweGY2M2RjMDQ5LCAweDNkZjhmMzFmLCAweDcyY2RhMmRkLCAweGNlYmNiMWJlLCAweDhkYjE2ZGQ4LCAweGEzZmNlNzgxLAorCTB4ZmU1NjdmOGMsIDB4M2I4M2M5MDEsIDB4YjZkY2JjNjUsIDB4ZjEyM2JkZmEsIDB4ZGFhNDZmMzAsIDB4MmI5NDY3ZmUsCisJMHgzYTdlM2VlZiwgMHg0MTU5ZTUwZCwgMHhhNDRjZDlmNCwgMHhmYjFhYjFmMywgMHhlZTc4MTU5MywgMHgyYmM1MmQyNiwKKwkweDUyODk1OWFkLCAweGI5Y2ZmNDFjLCAweDU4NjNkYTdmLCAweGY4YmQ1YTJlLCAweGZiOGMwYWM5LCAweDFmOTFkNzZlLAorCTB4ODU2ZmVjYTYsIDB4NWZkMTE2NjAsIDB4ZDNmOGRjM2QsIDB4Njc2ZTEwN2IsIDB4YTQ3OWU3MWUsIDB4OGZhZjFhMmIsCisJMHhlMmZlNWFiYiwgMHgxZjNjNzViMywgMHgxZDNhZjlmYywgMHg5OWQ0MmY5NSwgMHhiODhlMTk5OCwgMHhlYTllMmVhZiwKKwkweDUzMzNhZmJmLCAweGZhNzNlNmM5LCAweGFlYTZmMjUyLCAweGE1ZWU1ZjM0LCAweGI2NWJjYTMwLCAweDFlNTFkMDZlLAorCTB4ZjZkNmFlN2QsIDB4NmJjMDFlNTUsIDB4YTZjZTBkZWMsIDB4YzZiOWYyOGQsIDB4NTc2Y2Y4YzIsIDB4ODM4NDBjZjIsCisJMHgyZWYyZTM3NSwgMHhlNTRmNjEzNCwgMHhlZGVhZmY3MSwgMHg2NDQ5MGQ5ZSwgMHhmNTNlYWY4NywgMHhjZjNjMDU0YywKKwkweDBlZjkyZmNjLCAweDVlNzZlYmM3LCAweGUxYzE3OGE0LCAweDEwY2E4N2Y2LCAweDVhNGRlNWRlLCAweGRjZjkzZTdlLAorCTB4OGY0ZjFlNjcsIDB4YmNlMzEyN2IsIDB4N2ZjOWE5NmYsIDB4ZWE3OWQ5YWYsIDB4ZGU1MDhkOTksIDB4MjZiOTc5YmIsCisJMHhlODdmZGU5MCwgMHhmNzk1YmY3OSwgMHhiYWJlMmQ3MywgMHg3NWZlMWMxMiwgMHg4OTM4N2FiZSwgMHhmODA5YTdmOCwKKwkweGU3ZGZmMzJhLCAweDZiZDU5YWFiLCAweGYzNzM3ZTA4LCAweGMzZTZjNjRiLCAweDVkYThjZmZlLCAweDY3NGZjODQ5LAorCTB4NzQ0Y2RkYzYsIDB4MDgxNGVhZWUsIDB4NTcxYzhhZmUsIDB4ZjNlNmE3YzYsIDB4ZDEyYWU4ZmIsIDB4NDhlYzk5YjMsCisJMHgwNTdmOGU1OSwgMHhmN2MyMjM5ZSwgMHhkMmNmZjY4ZCwgMHhhYWZlOGVkMSwgMHhjZjU1YzE2ZCwgMHgzZDBlYjA3ZCwKKwkweGU5OWI4YzIyLCAweDllN2QwY2E4LCAweDYyYTdiMWFmLCAweGM4YmU3MTVlLCAweGU3ZDBlN2VkLCAweDcxMmJlN2I3LAorCTB4YzViNzFlNzgsIDB4YTc5MDEwOWYsIDB4NDU4ZDg0ZTIsIDB4MTNmZWEzNDYsIDB4OTcyMDYxYmMsIDB4OWViNzZkOWQsCisJMHgwNmZmYTE1NSwgMHhjMWM3ZTE3ZSwgMHgzOGZiMjg3NiwgMHg2OTVmYWY0MCwgMHhhYjJhZDdiZiwgMHg1Zjk1MWU3MSwKKwkweDUwZjg0ZWVlLCAweDNkMDBkZTY0LCAweGM2MTdjOTNlLCAweDBlZWIwMWJjLCAweGE2ZDAyYmY5LCAweDA0OWVmYmExLAorCTB4Mzc4ODBiOTIsIDB4NmJlYTg3Y2MsIDB4ZjU4NGQ3MWYsIDB4Yzc4ZTFhYjMsIDB4OTdlMDgzYmUsIDB4OTMwY2I4ZjEsCisJMHgzY2U3ZmRmMiwgMHgwYjNlN2VkYiwgMHg3OWU4NmNlNSwgMHg0ZjM5NWZhYiwgMHg3YjY4ZTFmNCwgMHhlNzQwYTJlOCwKKwkweDk1NTY3OTlmLCAweGJmZjNlZDc1LCAweDE2N2NmN2IxLCAweGRhYWNlZmUyLCAweDU3ZmU4Zjk3LCAweDg1OTdjNjlmLAorCTB4OTU3ZWE4NzgsIDB4MTU3ZmYzY2IsIDB4YzU3YjRhMGUsIDB4MTM4ZjBkMDYsIDB4MjNmMjI2MGEsIDB4MTQwYmE1MGIsCisJMHhjNjNiZTgwNywgMHhlZGQ1MDBlMywgMHgwZTllNDhiYiwgMHg0Yzc4ZjA3NiwgMHgxNDVkZDg4ZCwgMHhkYThiZjE4NywKKwkweGNmMjg1ZDUzLCAweDVmYjllMzA2LCAweDI4ZGJmMzA2LCAweGQ2NTUyMWNmLCAweGE0ODFhYTgzLCAweDFlZDcyMDM5LAorCTB4ZWUwN2EyMTksIDB4ZmU0MTllMGYsIDB4MWUzY2UwZDUsIDB4NjU2MWU1MDcsIDB4MmJiNDMzODUsIDB4NDMzZjIxY2UsCisJMHhlNGFhZDk3YiwgMHg2N2U3NDhmNSwgMHg1MDczMjNkYywgMHhmNTlkYmUzZSwgMHhkZjhhNmE4ZiwgMHg5MjZlMWViZCwKKwkweDMwOTU4ZWM4LCAweDRlMDg3OGM3LCAweDRiNzBlNzQzLCAweDI5ODdkMTNjLCAweGIzMzg3MTc2LCAweGQxYWJmNDA1LAorCTB4YmYyNGVmOTgsIDB4OWZiZjM4ZmEsIDB4ZjM4MWI5YWIsIDB4ZjM4NTdiMTMsIDB4MWJlZDczOTMsIDB4Zjk4MGY4OWEsCisJMHg5M2YzMjU3ZSwgMHg3YWNlNGY2MiwgMHg5N2M0MWZmZCwgMHg5ZWRhZTcwZiwgMHg0NzBjYmU0MCwgMHhjNWYzODg1OSwKKwkweGI1MWU1MjQ3LCAweDcyODcxZWYyLCAweDkwZTg2OTFmLCAweDg5NjJmOGZkLCAweDQ5YjRkNzllLCAweDU4ZTVlZjBjLAorCTB4MGFmMjkxYmMsIDB4Y2ExNmQ5OGEsIDB4M2NjNTljYjcsIDB4OGY1ZTc5NTMsIDB4ZjAyOWQxZWYsIDB4NTJlYmY2N2MsCisJMHg4MWExZTYyZSwgMHhkYmY3NGQzZCwgMHgzNGY2NjE0NSwgMHgxNWVhZDNjYywgMHgxZWFlMTkwNSwgMHg3ZDAwOWNlYiwKKwkweGY3M2U3ZWY2LCAweDAyNGFhNzU3LCAweDg0ODFiMWU5LCAweDY2NTNiMjcwLCAweGUyOTY3N2NlLCAweDVhN2U5NTdlLAorCTB4OTgzM2ViOTEsIDB4ZTYyY2VjODcsIDB4N2JjMmM4MWUsIDB4YzgxZGU2NTUsIDB4YTU1NmZiYzIsIDB4YzNkN2JjZGYsCisJMHgzMjJmNDk2YiwgMHhjMDVlNzU4ZiwgMHg3OWYzYTczYSwgMHhiYzBiZjNiYywgMHg1Mjc5MDcxZiwgMHgxNmMzZGYyMywKKwkweDQzNmVkZjRhLCAweDI3NDU2YjdmLCAweDE1ZWM3ZmJmLCAweDNjYzAzZjkzLCAweDE5YzAxNzMzLCAweGYwMWU3YWYxLAorCTB4NjNmZDQzNmEsIDB4ZjIxYjM2NjcsIDB4NmU5MWY4Y2YsIDB4N2Q5YTlmZTQsIDB4YmQ3Y2MzMDIsIDB4MTM2ZDc2ZWEsCisJMHhkNWFhODVjNiwgMHhlN2E0NThiZSwgMHg2YmVmNmQ4ZCwgMHhmMDZiOWU5MCwgMHg4ZTNjNzY1ZSwgMHhkY2JjNzI2NywKKwkweDM1YmY3OTQ0LCAweGY1ZWZjNjI2LCAweDAwZmZhZWRhLCAweDYzY2U3NmUzLCAweDU1M2E4YjVjLCAweDAwM2M1MWVmLAorCTB4NTdhZTM2ZTUsIDB4ZmU0MmRhZDUsIDB4Yzk3OTgzYmYsIDB4MDczNDc3ZmYsIDB4M2M2MGNkZDMsIDB4ZjI4N2U3OGYsCisJMHg3MzdjZTljOSwgMHhkY2NjN2YxMCwgMHgxZTYzZjljZSwgMHg2ODFiNzNlNiwgMHg2NzVmYzUzOCwgMHg1ZDkxYzdjNiwKKwkweGYxYzcxZmUyLCAweGFmY2U5MzYwLCAweDNmYTYzYjQzLCAweGZjN2NhMDQ1LCAweDVhZDczMGZlLCAweGU5NWM4ZmI0LAorCTB4N2ZlOWFlZGMsIDB4YmQyYjA1ZWQsIDB4NWI3M2EzZjcsIDB4M2NmOThjN2YsIDB4NzMzYmRkYjIsIDB4MTQ5NTU2YzMsCisJMHgxZDk5OWZiMCwgMHgxZmQ4ZGUzYywgMHgxMjBmY2FjNiwgMHgyMWQ3ZWRkZSwgMHgyNWI5N2MzZSwgMHhiZTMxZjI2NywKKwkweDc3NzgxOWEzLCAweDQ0ODNjNjBhLCAweDNkMGQxZjFlLCAweDZiOGU1ZDg3LCAweGZkZmM2NzFjLCAweGIzZGY2NTI4LAorCTB4M2NiOTEzMTMsIDB4YTNhMjZlNjMsIDB4NWJiZjM5MmUsIDB4YzY1MWQ3YzksIDB4NTA0MTMyZGYsIDB4OWZiOGQxZWUsCisJMHhmYWFlNTgyNCwgMHhkN2RlMWE1ZSwgMHhkZTJiOWU2MCwgMHgzYmY5NjBkNywgMHhlZjE2MWYzOSwgMHhhMmZlYjA2YiwKKwkweGY3OGIwZjljLCAweGY3OGVkODM1LCAweDk1NmY1ODM1LCAweGJlZjE2MWYzLCAweDVmNzhlYjA2LCAweDcyMmJlNTgzLAorCTB4ZGM3MWVjM2UsIDB4NmRmMWU1MmEsIDB4YTJlOTBhN2MsIDB4OTQ2ZDc5MGIsIDB4MWQxYmRlYmYsIDB4ZGMxNTFmNTIsCisJMHgwODVhMzdiZiwgMHhhODEyOGZhZSwgMHhjNmMyNjliZiwgMHg3OGZmMzBhNywgMHhjNTJmOTI5MywgMHhjM2I0NDZjYywKKwkweGZiZjljMjJhLCAweDdiMDZhOTFhLCAweGYzZjQwNGVjLCAweDQ1ZWQ3NzhiLCAweDliZjgxZTdmLCAweDg4MmI5ZmRlLAorCTB4ZWY0YTUwNWUsIDB4MTk2OGM0OTcsIDB4MjdkYmEzY2EsIDB4ODA0ZjQ3ZDgsIDB4Y2Q4ZWM3ZjEsIDB4NzI0YWRiNDgsCisJMHhlY2Y3NGY1MiwgMHgzMWJiM2ZiZCwgMHg2ZjdhZTI5MiwgMHgyNTgyNGM0OSwgMHhhZWU0NjVhNywgMHg5YTdkNDJiNSwKKwkweDg1ZmEyMDQxLCAweDUxMmE2ZWY5LCAweDY3OTg0Y2ZjLCAweGFiNjJjNzQ2LCAweDEzMDdjYjhhLCAweDkyODVjYmRhLAorCTB4YjNhZTA5NjMsIDB4OGI5ZjQxMjIsIDB4ZDU4OGY4NzIsIDB4NTFmYjgxOWUsIDB4NmEzNDVkZTAsIDB4NDVkYTFhNTksCisJMHgwN2YzNmE1ZCwgMHhiZDc1OWYxOCwgMHg1N2U4NjZhMywgMHhhNTNjNzEyOSwgMHg2OWQ2OTNkZiwgMHg5OWJmYjhmOSwKKwkweDczNmJhOTE5LCAweDM2NjA3ZTcwLCAweDBkMzY3Nzk0LCAweGQ5ZmRjNjZiLCAweDllYTE3MGM0LCAweDg1NTk5N2U0LAorCTB4MDI3ZjIwZjIsIDB4NjZlOTliYTcsIDB4MzU3YjFmNmUsIDB4ZmEzNDU1NjYsIDB4NjJkMzYxZjUsIDB4NGJiNzVlZjAsCisJMHgxOTMxZjNjNiwgMHgzYzY1YzdjZiwgMHg4MTU3M2RlMywgMHg2MTczZGY4YSwgMHg1ODVjZjc4OSwgMHgyZGEzZTY4NiwKKwkweDRkYjEyZmNmLCAweDI0MGY3ODIwLCAweGNkYjNlNjA1LCAweDAwOTdkZjkyLCAweGQ0ZjdhMTBhLCAweGYzMWM3MjljLAorCTB4MzRlZTU5NGIsIDB4Y2FkYzk1ZTYsIDB4OWU2ODc5YzcsIDB4Nzc4ZTM5MmEsIDB4NmY3YzFkNWUsIDB4OGZmMzhjYTgsCisJMHhiZGNlNTQ2NywgMHgxNjZiY2I4OSwgMHhiZjc5ZTFhOSwgMHhlNjE3MzFkNywgMHgzOTdkY2YxNSwgMHg3ZDUwZTI4MSwKKwkweDA2YTVkMTZlLCAweDVlMDVjZmJjLCAweDVlYzY3OTQ3LCAweDhiMmVmZWU2LCAweDc3MzM3Y2U3LCAweGFiZjUxYzdmLAorCTB4Y2VhOWUzOTcsIDB4N2M3NGVlZTgsIDB4ZTY0ZmEzYWYsIDB4ZjA3ZWE1MmYsIDB4ZTQ5NzllM2IsIDB4ODFiYTgxY2MsCisJMHhmM2ExMjNkZSwgMHhhNzc2ZTczOSwgMHg0ZmJkNDE0NywgMHg1ZjQ4OGJkMCwgMHhiY2ZlMjZjZSwgMHg2NzNmZTY0NywKKwkweDdjOWYzYzhhLCAweDI0ZjNhNjFlLCAweDNiZmEzZTIxLCAweGY3YzI0ZTVmLCAweGJjMTkzNzEwLCAweGY3ZmNiOTRiLAorCTB4NjZkYzkzYTYsIDB4NmZjYzc0ZGUsIDB4NGU3ODJmM2EsIDB4YWRmMWJlNjIsIDB4OThhNTI5NmQsIDB4ZWQ1ZTdmNmYsCisJMHhiM2ViMDY3OSwgMHg1ZDc4ZDJkYiwgMHgwYTY5Mzk2OCwgMHg5M2QyM2U3YywgMHhiN2M4Zjk4NCwgMHg2Mjk2YTViNiwKKwkweDkxZjlmMjNlLCAweDU5NDRjZjJkLCAweDk3ZWFlYTAyLCAweGNkNzNlMjRlLCAweDk4YTU2OTgzLCAweGViNWIzYzlmLAorCTB4NzQ4NzU2M2UsIDB4NWY0ZTdiZjMsIDB4NGUwNzdkZmEsIDB4ZGFhYTdjMjMsIDB4N2QzZWZkYjksIDB4MmYwYjgxZGYsCisJMHg2MDNlN2VhMSwgMHg3NTgyYmNhNCwgMHhkZjA5OTIxMywgMHg2ZWNmZWRmNSwgMHg2YmViN2E0NiwgMHg2YzNmMTM1MSwKKwkweDk5ZmY3ZTZhLCAweDJkM2Y1MGRmLCAweDZiNjY1OTg1LCAweGM5MGM1NjNkLCAweGJhMWRiNDk0LCAweDNiMzVmNzFiLAorCTB4ZDYyNWYzZGMsIDB4ODliYzRmMTcsIDB4MDQ3YjMxZjYsIDB4MTNhNWViZTcsIDB4NGY5MTRhNzMsIDB4ZmJlYzBlZmIsCisJMHhkOWIzZWEwNSwgMHhlMmQ4NjA5MSwgMHgxM2QwNWU3ZSwgMHg4ZmY3MmE3ZSwgMHg0MGI4YzAyYiwgMHgwY2JiYjE5ZiwKKwkweDlkZmVhZmU3LCAweGVjMWZlNzk2LCAweDcxOGU5YjhmLCAweGMwOWNmZjgyLCAweDZlMmEzMWYzLCAweGZhODQ5MmQ4LAorCTB4ZjllNTdjNTYsIDB4ZjhjMWJmYmQsIDB4NzRmNGVmZTYsIDB4Y2QxMzUzZGYsIDB4YTk0YWJkZWQsIDB4ZTEzOTdmMzEsCisJMHhjYzVlZDc2ZiwgMHg1ZTdiZTk1YiwgMHgxNWFmZjc0ZiwgMHhlMmIzOTMxOCwgMHgyOTYzYWM3YiwgMHgzZmVhZmYzZSwKKwkweDc4ODY1ZWZmLCAweGVlNzY5NDI4LCAweDc3MmZmNmM1LCAweDQzODQ0NWViLCAweDc5MTZjNjhmLCAweDhmNjFmMjMzLAorCTB4MGFjZWZjOWEsIDB4M2JkMTVlYjksIDB4ZGMyN2VmODIsIDB4OGJmODQ0NTcsIDB4ZmE4NDkyZDksIDB4YWZjNDcyYjYsCisJMHhjZjdkYzBlZSwgMHg4MzNjYjY5NiwgMHg1NjdiMGY3ZSwgMHg2NzBlNzc0YiwgMHhjMWI4MDc5ZiwgMHhkNDdiYjNiOCwKKwkweGZiMDM0OTk4LCAweDVlOTBhYTMwLCAweGNhNWIwYmNlLCAweGY3ZjljNDllLCAweGY1ZTc3ZWYwLCAweGFlOWUwODViLAorCTB4NWMzM2Q3M2QsIDB4ZDQzMWZhMGYsIDB4YWQ4NWU3YzcsIDB4Zjc2N2VkNDEsIDB4N2U4NTliM2MsIDB4Y2RkZmI5ZTksCisJMHhhMTU0ZmYyNiwgMHgyYTVmODU3MywgMHhmNDgzNmI3NywgMHg1ODgyNDkyMiwgMHgzZmNhNWI4YywgMHgwMjE5OGI5MywKKwkweDBlZTc1OWUyLCAweDkyN2JlOGVlLCAweDZiOWZjN2Y5LCAweDAwMzU3YjU2LCAweDViMmQwYWEzLCAweDBhY2RmOThiLAorCTB4ZGUyNjU0M2YsIDB4YWJlNzhjNWEsIDB4ZDFkMzFiMTQsIDB4ZjVjOGE5N2UsIDB4OWM1ZjIxOTUsIDB4M2M1ZDMzZDUsCisJMHhkNjViN2JmNCwgMHg2YmFkOTU1YiwgMHg3YzFkYTBlNiwgMHg0NWZjZmRhNSwgMHhjOTVmNDc5NiwgMHg5YjU1Zjg3YywKKwkweGRmNzgxZGRlLCAweGI1ZmU1YTE4LCAweGE4NGY5OThlLCAweGI1ODVmNWZjLCAweDk1ZTViMjVhLCAweDc4ZDZkZWY5LAorCTB4NTVhZmU4MWMsIDB4NzFmOTczNDcsIDB4ODMzN2ZhMTIsIDB4YWM5M2ZiMWMsIDB4MGFhZDE2ZWYsIDB4MDRlZWZmZWUsCisJMHhhZDU5NGY5ZSwgMHhmZWEzYTVmMSwgMHg3YjdmZTY1MywgMHg4N2RiODk4MiwgMHhjYTNhNWYyYSwgMHhiMzcxZDBhYiwKKwkweGJjZGU1OTI1LCAweGE5YmM5MDIwLCAweGQxNGUxNTZjLCAweGQyMDgyNGZiLCAweDJiM2MzZjU4LCAweGU2MzcyZTc1LAorCTB4ODc4NzBkMTMsIDB4MGYxOTdjZjgsIDB4NzBmMWU2MTIsIDB4ZDY2Y2FhYmUsIDB4NGYzMGY0ZGIsIDB4MDIyZjk4NTUsCisJMHhkMTg3MjVlZCwgMHg1MDc2ODExNywgMHg2YjEyMmJkZiwgMHhhMzE3ZDE5MiwgMHg1ZmUyOWZjYywgMHg1NjUzODk0ZiwKKwkweGZkMzZkNDc4LCAweDcxYzFlYjcwLCAweDg2NWU0ZmQwLCAweDU2MjgwMzdmLCAweDUzN2NlNDRmLCAweGViNGUxNmRlLAorCTB4MWYyZjkzMzEsIDB4Njc3Y2I2ZTksIDB4YTczYzM4ZjAsIDB4ZmIxZjgwMjksIDB4MDZjNTc2ZGEsIDB4ZjcwY2ViZmEsCisJMHhhNzUxZjc0ZCwgMHhmZmZhNmY4OCwgMHgwN2JkMzFmOSwgMHhiNWIyMjk1ZSwgMHg0ZTc5NGY3OCwgMHg0MDgzZWZlMCwKKwkweDM5MDdkZTlkLCAweDU2NzdkZjI3LCAweDQzMDg2ZDdlLCAweDk1ZjczOWZhLCAweDRmYjhmODgzLCAweDdiOWM5MWYwLAorCTB4NzI0NmNkYjEsIDB4MjNlZDRmYWMsIDB4NjI2YmI3MzksIDB4Zjk0N2FmMTEsIDB4YmQ2ZTUwY2EsIDB4MjRhN2YxMzgsCisJMHg3YzEyZmEzZiwgMHhkMjllZjg2NSwgMHgyZjhlYTU2NiwgMHhkMDFkODFjYywgMHhlNDkwYjZkMSwgMHhlNzg5NmNjOSwKKwkweDZhNWRiMDUxLCAweDcxMTM4ZjEzLCAweGUxOTMyZjc4LCAweGRlODZkOGM0LCAweGQ0NDNmMjNhLCAweDNhOTdiNDY2LAorCTB4NDJmNzJhMjcsIDB4MjVmOWZmMWEsIDB4MzFmNTNmM2YsIDB4ZTQ1NmJlZjMsIDB4YzUwMzcyY2YsIDB4NmFiZWMwN2QsCisJMHhjMGVkMDk3ZSwgMHg4YzE2YjEwNSwgMHg0ZGMyODdhNywgMHg4OThjNWZiOSwgMHhlMjI5NjZmZSwgMHg3ZGEzMWRlOSwKKwkweGJjM2NjNGVjLCAweDlmOTFmNGNmLCAweGY2NGVkNDAxLCAweDVhNmJmNTdjLCAweGQ1ZmIzN2YyLCAweDdlNTE3YjAzLAorCTB4NzFmNjhkYjksIDB4MGU5ZTAxMTMsIDB4NTQ3YWY3NGQsIDB4YmVkNDE3NzEsIDB4NjdlZDM0MmUsIDB4MWM5MWJkMjEsCisJMHg5N2Q2ZjRlMSwgMHgwN2JmOGJiOSwgMHg0ZTRmZGYyMiwgMHhmYTAwZjE5MiwgMHg3ZDIyMzU4YywgMHg4N2NmMWMwOCwKKwkweDQwOWZmNmRiLCAweDlkZDdkMzc5LCAweDk0M2E3MjRhLCAweDNkYjZjZTlmLCAweGUzNzI4MTE2LCAweGFlZWZkMDQzLAorCTB4ODdjMDc4ODAsIDB4N2NhNTlmOGIsIDB4MDc5OGY5ODAsIDB4NmIzZGU1MDIsIDB4ZjgzN2NmODMsIDB4MmZjOThmZWQsCisJMHhkYTAzOWI2NCwgMHg4MjFiMWU5MSwgMHg0MTcwYTFlYiwgMHhmMTA2ZjRiYSwgMHg3ZGY2OGI4MSwgMHhjMDFiZjIzZiwKKwkweDc3N2E2YWE3LCAweGE4NjFjMjM1LCAweDUyZWExNzNlLCAweDQ4NTBmZDQwLCAweDJiM2ZhNDNkLCAweGZkYzNmNmUxLAorCTB4ZWJjZDE4MTMsIDB4MjVlZGVkMTgsIDB4Y2YxZjdlM2YsIDB4YmQwN2FkZWYsIDB4ZTEwM2Y1NDYsIDB4ZWUyZDNmNzQsCisJMHhjMzE1YmQwMywgMHg4YmVhMTZmNSwgMHg4YTZlODhhYSwgMHhkMDFkZjU1ZiwgMHg4M2NhYmRkMiwgMHhlMTI1OWZlZCwKKwkweDI5MWU4MWY5LCAweGZlZDU1MzRlLCAweGY3ZmEyYzcyLCAweDY5OTgyNmViLCAweGIxOGZkMDdlLCAweGEwNzMxNzk0LAorCTB4MTFmZDE2M2QsIDB4N2EyMWRkYTUsIDB4MGNmN2U1ZDIsIDB4Mjg3ZTUwYjIsIDB4OWJjOTRlZWQsIDB4NDJlNTc5NGUsCisJMHg1ZjNlMTY3NywgMHg4NzE5Y2IyNywgMHhlYjA5NzUwOCwgMHgxMGUxY2U4YywgMHg3NmIzZGYzOCwgMHgyODdjZTQ4OSwKKwkweGY0Yzk1NmRlLCAweDhiMjFmMjBhLCAweGUxNWUzOWYyLCAweDFlNDUwM2YxLCAweGU1NzJjODU0LCAweDcyNjdiNjEwLAorCTB4ZjcyOTM3ZmUsIDB4ODRjZjc4NTIsIDB4OWM4YzNmN2MsIDB4MjM4MTVhZjgsIDB4Y2VmOGE1YWIsIDB4YmNjZDEzZmQsCisJMHg3OWE3OGYyZSwgMHhlNzg5ZmM3OSwgMHgzZTdhYmRlZCwgMHhjNzEzMjUyYiwgMHg0NWY3OTU5OSwgMHhkNTI4ZjJmZCwKKwkweDBlNTA1ZjJmLCAweDc4MWM5M2M0LCAweGU3MGIxZDUwLCAweGIwNDY3Y2FhLCAweDhhOTBjM2Q0LCAweGQwNDUzNWQyLAorCTB4MmQ1MzJkOWQsIDB4MWFiOGEyMmYsIDB4MmUxYWU3ZTYsIDB4MWQyODU3ZGYsIDB4ZjhlNDRlNDUsIDB4MWZiOTE0YWQsCisJMHhhMDU3Yjk1ZSwgMHg2YTczYTVmYiwgMHhmMjA3NmY3ZSwgMHg1ODBmZGU4NiwgMHgwOGE2YjA1NiwgMHgxOGJlZWZmOSwKKwkweDVmZDAyNmE3LCAweDRiZmNkNmJlLCAweGNiZWI4MjFiLCAweGM1MTRkNzZhLCAweDk1ZTdjMzBkLCAweDhkNzZiNmFiLAorCTB4NTdjZjk3NjQsIDB4OGEyYzZmNjEsIDB4YWVkZTVmMzUsIDB4NWU5Y2ZiZWMsIDB4ZjU3NGU3ZDksIDB4Y2M3ODQwYzgsCisJMHgxMjM0NTM1ZiwgMHg3ZmJhNjVjYSwgMHhkY2ZjMWUxNywgMHg1ZWI1ZGFlNywgMHg1ZDJkNTdjYSwgMHhiN2M0Zjc0MywKKwkweDhhMGRhYTVjLCAweGJlNmI1ZWIzLCAweDdiYTZlNjBhLCAweDNmZWQyYjkwLCAweGRlMDg3NGI0LCAweDMxMmI4YzVlLAorCTB4YzQzZGFmZTAsIDB4MDEzN2MwNjcsIDB4ZjRjYmM1ZWIsIDB4Mjg5ZjE0M2EsIDB4ZmQwNjNjNWYsIDB4M2M1ZjY2NTMsCisJMHgxMTNlMzAyNiwgMHgzMzliZTI1YSwgMHhiODhhZTUyMiwgMHgyYzNlMDRhOCwgMHgwZjAzMGNiMywgMHg4OWQxZmZhNSwKKwkweDNmMWFjZTNjLCAweGE4ZjFkMzkxLCAweDVlM2I1NWQ5LCAweGU5ZDcxNDYyLCAweGE1N2JmOTQxLCAweDIyZmU0Y2Y3LAorCTB4YmYwN2VmZWYsIDB4OWMyMzMyNjcsIDB4OWJkNGViZjcsIDB4ZGZkM2ZlMzAsIDB4ODdjNTBkZjksIDB4ZTYxOWQ3ZmIsCisJMHgwMzA3N2JmMywgMHg1ZGU3ODA0YiwgMHgwMjliZTNmMSwgMHgyNmFiYzBlMywgMHhkYzI0M2I3MSwgMHg5YTlkZWRjYSwKKwkweGUzZDVmNTBjLCAweGExYzY5OTRiLCAweDFiZDkxMmY4LCAweGRmNzRlMTk5LCAweDA1ZjZkN2QyLCAweDhlZmViN2U5LAorCTB4OGJkZTEzM2MsIDB4MGRiYjc1ZjQsIDB4ZmYzNTZmYzgsIDB4YThiMTdmZmMsIDB4M2UzYWZiODcsIDB4YmViNGJjYTUsCisJMHg3Y2EzM2Y2ZiwgMHhkZTcyOGRiNSwgMHgzOTM2YTFlMCwgMHg2Y2RiYWJkZiwgMHhlMmZlZjZjNCwgMHhiZjYxMTdiZiwKKwkweDhmZTk3MjRkLCAweDk4ZjhmMDJmLCAweDgzZjEyYTUyLCAweDNiZjlmZjAwLCAweDRjN2I1M2Q0LCAweDU0YzUxZjFiLAorCTB4MmRiMGNhOTksIDB4N2ZjMGJmMjQsIDB4ZTFiZDQ2OGUsIDB4ZTM5ODJiOGYsIDB4MDRjMzhiODYsIDB4NTRkMjE1YzYsCisJMHgyNTgwYWUzYywgMHhkMmQyMTVjNiwgMHhlYjAxNWM3OCwgMHgxMmMwNTcxOCwgMHg4ZWQ4MGFlMywgMHg2M2FjMDU3MSwKKwkweDE4ZWIwMTVjLCAweGM2M2FjMDU3LCAweGI4YzRiMDE1LCAweDI5N2ZiNjAyLCAweDBmZDFlN2JmLCAweDNkYzc4YjgyLAorCTB4NTdmNzI0MGQsIDB4YzAzMzdlNjIsIDB4YmYyNzY1NmYsIDB4NDdiOTVhYmYsIDB4N2M2MTdiYTIsIDB4ZGZmNTAzY2YsCisJMHhhZDNiNzk2NSwgMHg2NzhlZGU3MiwgMHhkNjA3ZGQyYiwgMHg4ODJjOTAxYywgMHhjNDFmN2MyMiwgMHgzYmY5OGU5NSwKKwkweDFlMzE0NzAzLCAweDU4MjJkMzU0LCAweDdkYjE5OGQ2LCAweDYzNjNlZDNlLCAweGE1MDdkZTQ3LCAweDZkNDdiZWQ4LAorCTB4NGY0NGNkMTEsIDB4ODI4ZDlmMWMsIDB4ZDU3YzhmNWIsIDB4NTdlMjg3YjEsIDB4OTQ5ZDcxMDUsIDB4MmNkMzVmZWYsCisJMHhjZWJiOGMzMCwgMHhkOTNmNzJkMywgMHgwZTZiNDEyOSwgMHgxZDkyYWJkZCwgMHg5Mzc2ZDRlZCwgMHg5Y2Y1NTJmZiwKKwkweGVmN2MwZTYwLCAweDQ1ZTI2NmJiLCAweDdkY2ExMzkyLCAweDg4ZmU1MmY1LCAweGYzN2EzZDM5LCAweDZiM2QyMDkyLAorCTB4Zjg1Nzc5ZTMsIDB4MjljN2VjMjcsIDB4MWQ5Mzc3ZTcsIDB4MmQxNzYwMTIsIDB4NmM2YzdiYzUsIDB4ZjdhNWJlOTcsCisJMHhlMGUwOWM0ZCwgMHg5ZGFlMTA4ZSwgMHhkMWQ5NTU3NywgMHhiNWYzMWViMiwgMHg1NWZlNjg3ZSwgMHhkZWY5MjRlMSwKKwkweDQ3YmY5YjNhLCAweDkyZjhmYzUyLCAweGJkNjAwNzdkLCAweGIyNWEyZGMxLCAweDYwOWY2ZTUzLCAweDFlNTI2ZGJmLAorCTB4MjhkODE5ZTYsIDB4NTNiNDcyZWUsIDB4MjdkNjdlNGYsIDB4OGEwZmFmNWIsIDB4ZDc0YTE0YmIsIDB4ODU2M2RjNTEsCisJMHg3ZGZkMjA1YSwgMHgzYjlmNmFjNCwgMHg0NjcyZTgwOSwgMHg2ZjE0YmRmMSwgMHgyNDZmMTE5OSwgMHhmMGU4NTYzZSwKKwkweDRmYzk2YjQ5LCAweGUzMTVkZTcwLCAweDBhOTg3N2Y5LCAweDM0ZTdlY2I1LCAweGE1Y2Y5YzlmLCAweDVlYjBhOWUwLAorCTB4MmNmN2UzNzAsIDB4YmQwYjMzMTYsIDB4YzAwOGIwM2YsIDB4ZTU1MTcxODcsIDB4MTg4YjFmZmIsIDB4ZTg1MGFmY2YsCisJMHg4MTU2YzU2YSwgMHhiY2JlOGFlOCwgMHg4NGJkZjAxMCwgMHgxMDNkZjg0NSwgMHg2YWY3N2ZkMCwgMHgyODliZmRiOSwKKwkweGM0ZjI3YmYyLCAweGUyOGYzYzRkLCAweGZjYTc2NjNlLCAweDdkNDg2NTkxLCAweGQ3ZDdlOTEyLCAweDBmNmVkMDdjLAorCTB4ZGI4OTJlYmYsIDB4OWMzOGU2ZjcsIDB4MzU3MWYxN2YsIDB4YzYxNzA3ZTUsIDB4Mjc2ZTllZGQsIDB4Zjk0MDVmM2QsCisJMHg2ZWY3ODIxMywgMHhhZjFiZmJlOSwgMHhmMzgzM2YyNiwgMHhiOWFhOGUyNywgMHg5Mjc4MDFkYywgMHhmNDg1ZDU5ZiwKKwkweDNiMWVmMTRhLCAweGNhZWJjNzk1LCAweGJmMjI5Y2E5LCAweDVlZmExNjFmLCAweGNiZTc3ZjQzLCAweGIwYmUzODJkLAorCTB4Zjg0MTYwYzYsIDB4YzAzZGYxNWYsIDB4ZmZiZmFiYjAsIDB4ZWJmMzk0ZTYsIDB4NWM5ZWM1MTIsIDB4NmJlM2MyMzMsCisJMHg1MWUxMDU4MywgMHhlZjQ5ZDcxOCwgMHhmM2NhYTU4OSwgMHhiMjViOWMzZiwgMHg4YjY5ZjEwOSwgMHgxZjVjMmU2MCwKKwkweDAwYjY2OWVmLCAweDQwZjA4YjdjLCAweDNkZDFjNjAyLCAweDY2Y2Y3YzM2LCAweDUxMzA1M2EwLCAweDcyNjVmNTNlLAorCTB4Y2MzYWViNzQsIDB4MTM0OWE5NTMsIDB4MmRhZjE4NGMsIDB4MTg1MmRiMGEsIDB4YTUxN2YzMGIsIDB4NzY3N2QzMjQsCisJMHgxYzc4ZGE2YSwgMHg0ZTRhMGZiNiwgMHg5MmRjNTMwNywgMHg2MmFhYzdjMCwgMHhmMWNmN2UzMSwgMHgzZmI1Y2JlOCwKKwkweGRmY2YyOTNkLCAweGIzZTY1YjNlLCAweDc4MmY4ZWZlLCAweGUzYjVmMTFlLCAweGZiZTliYmI0LCAweGVmNGY0YzFjLAorCTB4ZjYwZmQzYWYsIDB4ZDFjNmZiMzUsIDB4ZTg1NWFmMTQsIDB4YWUzOWIwNjgsIDB4NDVhOGU5MDksIDB4YTVhNTEzZDYsCisJMHg4ZWQxYTllZiwgMHgzN2IzY2M2OCwgMHg5NmNhMWMyMywgMHg0YjE3NWM1YywgMHg0ZTNlMWNlNywgMHg4N2RmZTRhNiwKKwkweGU1MDJjOWM2LCAweGRlNDZmZmVkLCAweDVhYmE4OWZkLCAweDViYWRkZjJhLCAweDlkNzc2NTQ1LCAweGU4MDc5ZThiLAorCTB4YmYwODIzOGIsIDB4N2Q2ZjEwMWYsIDB4ZjEzMGQyN2IsIDB4NDczM2E2NTYsIDB4YmUwNWJlOTIsIDB4OTBlZGYxZTcsCisJMHhiYmYwMmFmOCwgMHgzM2VmYzAxOCwgMHhkOWVlYTIzYSwgMHg4MzQ4ZjY4MCwgMHhjZGY3ODJjNiwgMHhkMmJjZmY5OCwKKwkweGZkZTFmMjQwLCAweDU5YzZjMzQ5LCAweDI4MTlmODE1LCAweGY0YzgzYjJlLCAweGU5ODc4ODM5LCAweDExMmFhOTE5LAorCTB4OTI2ZGZmOWUsIDB4NDRlNzE0MTAsIDB4MjI3M2MxYmUsIDB4N2M4OTYwZGYsIDB4ZjlmOTUyYTMsIDB4YTMwZDY5ZTYsCisJMHg3ZGExOTRlZiwgMHg0MGZiMjJlMCwgMHhiZjVkZjg0ZiwgMHhkNDBhZTQwNiwgMHgyMGE2NjVlZiwgMHg0NDIxNzJiOSwKKwkweGYzMjM4MGFlLCAweGFjNWY3YTMzLCAweDA5MzZjYjQzLCAweGU5Y2ZmY2ZlLCAweDE5Y2E1YzUwLCAweGI4NzhjZTQ2LAorCTB4ZTYxZDE5OWMsIDB4YjNiZTllNzksIDB4Zjk0NjFkNTAsIDB4NDRlZmMwYzUsIDB4ZjIzNzQ3NjcsIDB4YWMyNWJkYmMsCisJMHg0NjFkZDY4NCwgMHgzZTdiZDBkZSwgMHgzODE4OGVmNywgMHhiZmY0MTRmOSwgMHhkOTAzNjFmNywgMHg5NjEzZWIzOSwKKwkweGU0NzdmZmU2LCAweDcxMjc5ZmNkLCAweGRmODEzYzc4LCAweGVkNWQ1MDczLCAweDA1OWIwZTdiLCAweGIxNWQ4ZmJjLAorCTB4YmUyMzY1OTAsIDB4YzQzOWVmOTUsIDB4N2JmMjE4YzEsIDB4MzllZmY1ZmYsIDB4MTIzYzk4OGMsIDB4MGFlMGU3YmYsCisJMHhkYzQzOWVmYSwgMHgzMGU3YmUxNSwgMHg2MTcxYjI2YSwgMHg0NjFjZjdlMCwgMHgzMGIxMWU0ZCwgMHhjNjBlN2JmOCwKKwkweGIyOWRmODg1LCAweDM5ZWZjMWZmLCAweGJiY2U0ZmE0LCAweDM3MGU3YmZjLCAweGEwZmYzNjRlLCAweDNkODAzOWVmLAorCTB4NGZlMzg5OWIsIDB4NjNjNmQ4ZTQsIDB4M2I5ZjI4OTksIDB4ZTNlNWZkZjQsIDB4OTc2NDNkZjIsIDB4YjJjNTJmNjgsCisJMHhhMmE1YzIyOCwgMHhjNTZkZDE3NiwgMHg3M2QxNmRmMiwgMHg1ZjAzYjYzZiwgMHgxNTc4NDQ0YywgMHgwMzdkOTYzZCwKKwkweDUxMjU5NzdlLCAweGYyYmNhMWViLCAweDQ5YjZhZDI3LCAweGI5NmJmZjM4LCAweDNjZjhjOWI2LCAweDJmNWZkZTM0LAorCTB4NzNmNjBmOWYsIDB4Y2QwYmY2MGIsIDB4ZTJlODUzMWYsIDB4MGU1Y2M5YWUsIDB4YTljYjkzY2QsIDB4YzdiZmMzZjUsCisJMHhiZjMyNmYzZiwgMHhiZWQ2YmU0ZiwgMHhlMDc3YmY2MSwgMHhkOWZlY2E3YSwgMHhkYzU2YzU5NiwgMHg0ZWY3ZWMwZiwKKwkweGI3ZWMyN2RjLCAweDg4NjY0YjA0LCAweGY4MGY3YTBlLCAweGM5NzU3YTcyLCAweDJlNzQ2MmZiLCAweDNmYjM4ZjkwLAorCTB4OTUyOGY2ZTEsIDB4MTQ3NzJhZTksIDB4MWVhMzBkZGEsIDB4N2VlMTQ3NzAsIDB4ZTgwZTM1NDcsIDB4ZGY5MDdkZjEsCisJMHg2OGY0MDZiYSwgMHhmNTc2ZmMzZiwgMHg3ZmRiMWU4MCwgMHhkYWY5ZTM2YiwgMHg5ZjZmZjNhMSwgMHhmNDkxZmRjYywKKwkweDdlMzQwM2E5LCAweDRkZGRmYzBjLCAweDE0NDBjMWZlLCAweGU1ZTk2ZGRhLCAweDE0YWUzNDQ3LCAweGY2NmQ0ZjdhLAorCTB4OTM3NjQxMjcsIDB4OGM3YmY4OTksIDB4MDFlNjM2ZGMsIDB4OGMzZDIxOTEsIDB4MWU3OGMxZDksIDB4ZTkwYzQxNjMsCisJMHhlZjFkNGFiOSwgMHhmZGMwZjk1YSwgMHgzOGQxZDIyMiwgMHg4MDNiZWMzNywgMHhhZWRmYWVmZSwgMHhhZjdlMGMxYSwKKwkweGFhZTM0YmQ3LCAweDVlYzAyNWU0LCAweDY0ZWU3YTBiLCAweDk0NzRiZjNjLCAweDVlZDA4ZjJjLCAweDM5ZDllZmM0LAorCTB4NzdkMDhmY2IsIDB4MGI4ZWMwYTYsIDB4NzliZThmOTksIDB4NTk0Zjk0MzAsIDB4ZTZiZmIzYWQsIDB4NjJiZTUzMzMsCisJMHg3N2E1YmY1MCwgMHhmYTNkNjZmZiwgMHg1YmE1ZTViNSwgMHgyZjE3ZTQzNSwgMHhhNThmNTk2OSwgMHgyNjllZjFjMywKKwkweDE5N2Q5MThlLCAweGNiZWMxZmQ0LCAweGZiNjVmYWEwLCAweGY1NDdkOTBjLCAweGM3ZDcxN2ZkLCAweGQwMmViMzBkLAorCTB4MTNhNDU2YzEsIDB4YWE4ZTBlODUsIDB4NGZkMGUzM2QsIDB4YjMwY2VhM2QsIDB4M2MxZGY3ZjAsIDB4MjY5YTVkZjQsCisJMHg1ZGY0YmRmOSwgMHhjYWRkMzlmZiwgMHg1ZDM5NjVmMywgMHgzZjFkZjhjMCwgMHhhOWVhOGU4YywgMHhhZjFkZjJiZiwKKwkweDFjOGE5NTZiLCAweDhkY2VmYTFjLCAweDVlMjhiOTg2LCAweDcyNDhjYjM5LCAweGZmZjY0NmFlLCAweGM4OTg5N2FhLAorCTB4YmFmODUxMWUsIDB4YjUzOWU1NWEsIDB4MThjNWZiMWUsIDB4OGE5YmZlNzksIDB4N2FhYmY3ZDEsIDB4Y2Y5NDUxYzQsCisJMHhjZmFjM2Y0ZCwgMHhhY2ZiYTU0YSwgMHgxNzhmN2FkOCwgMHg1ZGI4MWRlNywgMHgxNWI5ZWZhMCwgMHg1YWI5NzM4NCwKKwkweDllMzg5NjI4LCAweDQ0NDdlNzg1LCAweGE3ODE1ZGZlLCAweDk4NDg3ZTUxLCAweDM3YmZjMTQ3LCAweGJmOTcyNTMwLAorCTB4ZjhjZjEwM2YsIDB4Y2E5OGRiNzcsIDB4MzY5ZGYyMWMsIDB4ZWQ3YTFlMzksIDB4ZWZmMWI0ZWYsIDB4ZjdlN2NkOTIsCisJMHgyNTUxMGQ3MiwgMHhmOWYxY2JhNSwgMHhmOWU4MWI4MiwgMHgxZjUyZWZjMSwgMHgyYWZlZTJiMSwgMHg3MWI0ZWY5NCwKKwkweDRlNjFiZjdiLCAweDU1N2YzZDA2LCAweDNkNDFhZjMwLCAweDVkODA3YWUxLCAweDdhNmQzYmU5LCAweGVmODBmYmU0LAorCTB4Zjg4N2JkYjMsIDB4ZDlmN2Q2YmEsIDB4MWMwZmVmOTQsIDB4MjNjMzcwNWQsIDB4YmQxYzM5N2IsIDB4MzM1NWVmNzgsCisJMHhhZmU0MThjYiwgMHgzYzMxMTdmZiwgMHg1NmMwZDI5ZSwgMHgwMDAwNTZjMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzNiM2FmOGEsIDB4MjE3MTY4MzAsCi0JMHg5ZjAxNDNmOCwgMHgzODYwNjY2NCwgMHg4MTY3YzQwZCwgMHg4MTg1OTc5OCwgMHg4MTg5OTdjMSwgMHg3ODg5OGZjMSwKLQkweDEwYzUzM2ZkLCAweDA2MTE0MTZjLCAweDVlMjAzYjA2LCAweGYwYzBjNDJlLCAweGNlMjEwNDRlLCAweDEwYzBjZTI4LAotCTB4MjBjMGNhMmQsIDB4YWZlMTBhMmIsIDB4NjI2NmQyMDQsIDB4NDBmZjcxZDQsIDB4NGMxOTQ2NjMsIDB4MDg5MjA3YjEsCi0JMHg3OTE2MTMzNiwgMHgyNjhjY2M2NCwgMHhjYTg1MjBlZiwgMHg3ZmEwMjE2NywgMHgyNTE3ZjFhMCwgMHgyMmFjYmU1NCwKLQkweDhhODQ2ZTg0LCAweDk3OTM0NTdmLCAweDQzMmJjYTgzLCAweDA5NGRmNWZkLCAweDUwMmFiOWJiLCAweDFhYTAwMDc5LAotCTB4MDM2MDVmODIsIDB4MDAwMDAzNjAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzNzAyNzhhLCAweDQ1ZTM5YzMwLAorCTB4ODM4MWU5ZjAsIDB4NWZkMzI5MTgsIDB4NTBjMGNlYzYsIDB4NDA1NWM0MDEsIDB4M2Y4ODBiYmMsIDB4N2MzMDMyYjEsCisJMHhmZjVlMjU2NiwgMHhkYjA0MjkzNSwgMHgyMTgxODI0OCwgMHg4OGQ3ODgxZSwgMHg0OWE4MzAzMSwgMHhhNDFkYzQyMiwKKwkweDAzMjYxODE5LCAweGIxNTBhMWY5LCAweDVmM2E0MDQ3LCAweDBmNzczMjhhLCAweDgwYTY5YzE2LCAweDg3MmFlNjI5LAorCTB4OTE2M2E3NjAsIDB4NjgxOWM2NDcsIDB4NTBlNTRiZjIsIDB4ZjQwNDk5ZjksIDB4YTJiZTM0MGYsIDB4YTJmZmNhOGUsCisJMHhhMDEzYTEwYSwgMHhlNGQxNTdlMiwgMHgzYmU1NDJiZiwgMHhhNmJhZmVhMCwgMHg0ZWRjZGQ4ZSwgMHhjMzVkZmQzMiwKKwkweGZjMDFhMTAyLCAweDk4NDdiMDk5LCAweDAwOTg0N2IwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGQsIDB4NzMzZWU4YjUsIDB4NDk5OTljY2UsCi0JMHgyMTI2NGNjZSwgMHg2MTAyMTMwOSwgMHg0MGEwMjA5MiwgMHgyMDBjN2UxOCwgMHhmN2YwOWQ3OCwgMHg4MDNhYTU2OCwKLQkweDA3NTE1YTU2LCAweDQzZjIxMDgxLCAweGJkMWY1MjAyLCAweDI0MjY2YmVkLCAweDFiZDU2OGMxLCAweGFiNDVhOGZhLAotCTB4NjhhOTAwNzYsIDB4NjIzNDhlZDEsIDB4YTgwNzQwYTgsIDB4MGRiNmE4NWMsIDB4YzdmNDJhZDYsIDB4YzQwNWFkMWIsCi0JMHg5NmFhNDQ5MCwgMHg2YmI5NGFiZSwgMHhlNjRmYmRhZCwgMHg0MDE5OTM5YywgMHg2ZjVmYjdiZCwgMHg2ZmQ2OTdiZiwKLQkweDY3ZDljZmIzLCAweGRmZDdiNWVmLCAweGI1ZWQ2YjVlLCAweDg5NzYyOGY3LCAweGVjNjUwZWU1LCAweGM3NWRmZTAyLAotCTB4MzE5OTAyZDgsIDB4ZjRhMjc1NzYsIDB4MGQwZWJiYzEsIDB4MDdmOGFkZmUsIDB4Y2NkZDI4MzIsIDB4Mjg2MmIxMmYsCi0JMHgyZjZlMmNmZCwgMHhmYzcwNzI4MSwgMHhkNjVlOTYxOCwgMHhmMzdlMThjOSwgMHg5NTk5MDVmMSwgMHgzMjcxZTYzMiwKLQkweGIwOTQxN2YxLCAweGRhZjJmNWVlLCAweDZkODdiMmI3LCAweGQ1YjI4NDI4LCAweDZjYzY1M2Y3LCAweDY3YWFlZDhjLAotCTB4NDRmNjYxODEsIDB4ZmY1Nzg3M2IsIDB4OTFjMTdlMmUsIDB4ZmE0ODcwY2IsIDB4ODc3NTYwY2IsIDB4YmI4N2MxODcsCi0JMHhiNmUyZTdhNCwgMHg4ZWY1OGM4OSwgMHg3ZTJkODE2MSwgMHg1ZGRlMDcxOCwgMHhjZmZkMDU5YiwgMHgzMTZkZWM2MSwKLQkweDcwNDYwNWU2LCAweDhhNTBiODVjLCAweDRiODIzMWRmLCAweGU3M2FmOGZiLCAweDBlZTc2ODQyLCAweDAwYzU1ZmFkLAotCTB4NzMzNGNmNWUsIDB4YjlhMjZkN2IsIDB4ZjUwZDE4ZWUsIDB4YTVmYTg5OTEsIDB4NmNhNjAzZGEsIDB4ODgxZGUwMGMsCi0JMHhlZDVjMDNmMCwgMHhkNzlhNGVmNSwgMHg4MWJkZWI4ZiwgMHhiNjMwNTc2MSwgMHhmNTQ3ZGVhNywgMHgyYTdlZjU3ZCwKLQkweGU5MjNmNWUzLCAweDAwZmE4MWY5LCAweGIwNTg3M2Q1LCAweGVhYzdmMDkwLCAweDY2Y2EyYzM2LCAweDg1MzZmMWFjLAotCTB4NzQxMmM3ZGQsIDB4OGMzZDY2ZjksIDB4ZmVhMjQ1NzcsIDB4MjIyY2QxYTcsIDB4YTRmZWU0YzMsIDB4MDA0MjNiYjAsCi0JMHgxMzJiYzM2YiwgMHhiY2ExM2EzMiwgMHg3ZjQxZGIxZiwgMHgyODAxOGQwZiwgMHgzZmRhMjZjNiwgMHhkY2U1ZjZiYywKLQkweGNiMTgxMzk5LCAweGRjOTFlYWZiLCAweGJkZTAwMzk5LCAweDQ2YzYxNmM0LCAweGQyYWQ3OGUzLCAweDlkZjAzMWJjLAotCTB4ZGJkMWZiY2EsIDB4ZWI2MzI1ZWIsIDB4ZWQ5YTBmODgsIDB4NjVhZmRmYzksIDB4ZjJjZjAyMTIsIDB4N2U2MGFjMGUsCi0JMHgwZjZiZjQzNywgMHgwNzAxM2JlNywgMHgwNGM2NDRiNywgMHhiOGMzMDY1YiwgMHgxODZiZWM0OCwgMHgxMTFiMzJmYiwKLQkweDM3MGUwMDg5LCAweDhjNzk5NzYxLCAweGYzNDJkMGVkLCAweDVmMWNiYmYwLCAweDkxMjMwYTQ4LCAweDI5OWM0MGMzLAotCTB4MmNhYjY1OGMsIDB4NDcwYTRiMWMsIDB4MmI3MWMxMDMsIDB4NGIwNzMzZmUsIDB4MGY0YmQ1M2YsIDB4N2VmNTcxZjIsCi0JMHhlNzExYjJmNCwgMHhjZWU0ZTUwNywgMHhkZTJjNWIzMCwgMHg3N2ZiZTE5NywgMHhlODYyZDI0MiwgMHhlN2M1ZDliZiwKLQkweDczNjMwMmYzLCAweDEyNDliYzcwLCAweDEyYjk2MTBiLCAweDJkZmExMjk5LCAweDMxMjczMmM3LCAweGU1YzYwYWVlLAotCTB4NjE3M2JhZTEsIDB4NTQ3ZTg0MTYsIDB4Yzc4NTk4NWYsIDB4ZmM4MzdlZjAsIDB4NmM4Y2E2ZmIsIDB4MWI3ZjliOWEsCi0JMHhkYTk0NDNmMSwgMHg0NzRkZGIxYiwgMHg4OGI2ZmNiOCwgMHhlZGM3MDMzZCwgMHgyM2VkODgzZCwgMHhmNmMzMTYzZSwKLQkweDM5YjY2ODJmLCAweDNiNDRiNDViLCAweDZlNDk5ZTFkLCAweDk2OGI2ODViLCAweDE2YzgyZmU4LCAweGU1ZDNmYTliLAotCTB4YmU3Mjc2NGQsIDB4ODFkZWY5ZDMsIDB4ZGE5YzgwOWYsIDB4YzIyOGZiZTEsIDB4MzcwNTk4M2IsIDB4YmRlYmMxMjcsCi0JMHgwN2E1YmU2MiwgMHgzYzA2NDE1ZCwgMHhhMzU0MmVhZCwgMHhhZmE5MjQyZSwgMHgzOWViMGNiNSwgMHgwNjQwNTk0YiwKLQkweGU1ZWI0ZTFhLCAweDA3MDNiOGYzLCAweDNiY2M0OWM5LCAweDM3YzAwM2U3LCAweGZlYzAxZDk0LCAweDA4ZTNlNjBjLAotCTB4ZGEwM2E4YjAsIDB4ODI2Yjc5YWIsIDB4MWY0ZjUwNjUsIDB4MWIwMmQ1Y2MsIDB4MzY3MjYzMWMsIDB4Y2RjNDczYzksCi0JMHg5N2ExYzNmYSwgMHhmYzEzYzdkYSwgMHgwMGRmMTc0OCwgMHgwNjA0ZWY1ZCwgMHg0MWRiYTgzMiwgMHg3ODAyMGNhMSwKLQkweGE4M2I4ZjFhLCAweGU1ZGM4ZmZmLCAweGZkMzNiMTQzLCAweGYxZjU1M2JiLCAweDNlNDE0YjcxLCAweGE2MWZkNzRlLAotCTB4ODNiZWFiYjIsIDB4NjNmYWVlY2EsIDB4MGYxYWE2NTQsIDB4MjZjNmQxMjQsIDB4NjBkZjhjMDMsIDB4NWRjYTI3NDEsCi0JMHgwNzVkMTJhMSwgMHhmZmVlMzdmZCwgMHgyMThmZjMyYSwgMHg4Nzg4MjNmOCwgMHgyZDE2Y2Q3NCwgMHg0ZTY2NWU0MiwKLQkweGY4MTVjZDU5LCAweGUxMmI3YzQ1LCAweDhlNmVmOWJjLCAweGJkYjNjNDVmLCAweDg2NmQwOTUwLCAweDJhZDljZjMyLAotCTB4Nzg2ZDFhYWQsIDB4ZmM0MDc0MGUsIDB4Yjg3YzFlOTcsIDB4MmVhNGYxMDEsIDB4ODU1Y2UzNjUsIDB4NGY5YzJmMjgsCi0JMHg5N2M4OWYxMSwgMHg1ZjM4MWFiYiwgMHgyODRlZmQ2MiwgMHgwMjk1MzlhZiwgMHhlZjFjNWRlZiwgMHg1M2E5ZGFkYSwKLQkweGMwNjA5OWRmLCAweDVjODJjMjlmLCAweDI4YmYzOWFlLCAweDc4Yzc3ZmYwLCAweDdiMzQzYTgwLCAweGJkZTgyNjQ1LAotCTB4YmMwNzdmYmMsIDB4OWU3ZDI2OGUsIDB4OTA2Yjk1YzEsIDB4OWUyYWRlYTEsIDB4MzBkZGViYWMsIDB4YWJkMjdlMjMsCi0JMHg1MDc5ZWRjMCwgMHg5N2NmYWMxZiwgMHhmODg5N2ZmOSwgMHhmYTA0ZGNkOCwgMHhkNTdlZWIwOSwgMHgyMWZiYzJhZiwKLQkweDcwZTBmNWEyLCAweGNhNTQ1Y2M1LCAweDFlZTdjYjViLCAweDYyYmM2MDkyLCAweGE4ZmRlM2Y5LCAweDI5ZDQ4N2RlLAotCTB4ZjQxYTc3NmYsIDB4NjA0MmMxNjUsIDB4ODZjNjIyYmMsIDB4MmYzZjM1YWUsIDB4MzBlYjk4OGMsIDB4ZjMwNDJkODAsCi0JMHgzZjMxNmUyZiwgMHhkOWRjY2UzZiwgMHgyZTE5ZDIyNywgMHg4MDkwNmU0OCwgMHhiZDVhZjM3ZSwgMHg4NDlhNDVlYywKLQkweGY1OGRkZTk1LCAweDBkZDlhZTJjLCAweGY0MjdhMTc1LCAweGRjOTllNGJhLCAweGFkZjk4MTE5LCAweDkwMDU5MmJlLAotCTB4NDQ5MjY5YzYsIDB4ZWZjNTZjNzgsIDB4MTQxZThmODAsIDB4N2U5NmZkZTUsIDB4YWM5OTUyZjQsIDB4MDJlZjUwZDksCi0JMHhmNGM5ODNkZSwgMHhkNjU0YmU1OCwgMHg1NmJjNzQ4YiwgMHhmZDhiZGU5YSwgMHhlNjMxMmJhNiwgMHg1NGJmOTBkNSwKLQkweGZiNmIxM2UyLCAweGYxYTE0OTM0LCAweGEwOGU5NGQzLCAweDE0ZGVlYjhjLCAweGI2YWRlZWJlLCAweDllNTFjNmY3LAotCTB4MDNmOTk3NTYsIDB4MDI4ZjVjMTEsIDB4NGNkZjkyNTEsIDB4NWU1MGIzNTgsIDB4MzYzYzAxM2YsIDB4OTM2M2MzODksCi0JMHhmNTE4OWM2OCwgMHhkYjJiZWIwMywgMHhiYzM4ZTEyMiwgMHhmYTU3ZDVkZiwgMHgwZDRhNDQ1OSwgMHgyZDE5MWZlNywKLQkweDE2OThlYzYyLCAweDNjZmVjNGNlLCAweDcwOWNhNDkyLCAweDU4ZDNlODI2LCAweGIzNmZmNDUxLCAweGMzNzJlYWExLAotCTB4NzUxM2FiZmIsIDB4N2M3MzlkZGYsIDB4NDM3OWM3YzgsIDB4NzcyYmY0Y2QsIDB4N2YyMDE1ZDYsIDB4YjM2Mjg2NTQsCi0JMHg3YTRlN2Y5MSwgMHgwZWRlYmE3ZSwgMHhmNjAyZGVmMywgMHg5ZmY4MDI4MiwgMHg2MWU1MGNlNCwgMHhlYThiMzUzZiwKLQkweGYzMGFhMzg2LCAweGUzMDNhMmUzLCAweDFlYjdiMjZlLCAweDM5ODI0YjA3LCAweDVmZjQ4ODU5LCAweDAxNzVjY2NiLAotCTB4NjdkYmRlMDUsIDB4ZjAzYjcxMmEsIDB4MDFmMjdkYTUsIDB4YWM1YzU3YjIsIDB4YzljN2ViOGUsIDB4MDdiNDMyOTEsCi0JMHhlZjgzMjM5YywgMHg0NTVlZjBjYSwgMHhkZWU3ODA3OSwgMHg3NWMzMmI2MCwgMHhiY2NjMzljNCwgMHg5YjNjODNjZSwKLQkweGI5YjY0YWVhLCAweDVjY2Y0YTllLCAweGY4Y2E1Y2FhLCAweDg0MDY5ZWZhLCAweGIyNjdmYzIyLCAweDk5NWZlMjI4LAotCTB4Zjg0MTI4MWMsIDB4ZjNlNmJjMWUsIDB4YWE2Nzg0N2UsIDB4ODRhNWQ3YzQsIDB4ZGU3MmUyZmUsIDB4YmZiNWVmNDcsCi0JMHgwMDM2MWRjOCwgMHhmOTcyYjc5ZiwgMHhlZTRhZmI1ZiwgMHg4Zjg4MDliMCwgMHg3Mzk3OWE1NiwgMHgwYjkyNmFjNiwKLQkweDczMjNmMTE1LCAweDEzYjkwZmY5LCAweGY4NzhlYmRmLCAweDk2MWJjZjdiLCAweGY0OTc5YTA1LCAweDUwMjdmMzkzLAotCTB4NmYzZTM2M2YsIDB4OWY5ZWEzZjcsIDB4N2UzZGJjZjEsIDB4MzY2YmQ0MWQsIDB4NmRmN2E0NGIsIDB4OWY4NDVjZmIsCi0JMHgzZDc5NDdlZSwgMHhkODgzNTZlZSwgMHg1MDEzY2NmZSwgMHgzYWQ1N2MwNywgMHg4YTljMWUzYSwgMHg2NjVlN2JmOCwKLQkweDBiM2QwODViLCAweDRlY2ZhODZkLCAweDNiNjhmNmU4LCAweDc4YmI5N2FmLCAweGZlZjM2NmI1LCAweDhhZmJmMWRiLAotCTB4N2Q0MzA3NzYsIDB4Zjk3YmIzNWMsIDB4YmVhMTUzMGQsIDB4NjE5ZGIwZmMsIDB4MGQ2ZDlhOTMsIDB4YWZhODIwZWEsCi0JMHhhYzMxNGE4OCwgMHhmNGU3NGNmNywgMHhhMzkyZWM4OSwgMHg4ZjdkYTBkYiwgMHg2NmY3MjNhNywgMHgyNzFkZDcwZCwKLQkweGI4MDA4ZmYzLCAweDM3YjkxZGRkLCAweDQ2NTcxZjAxLCAweGRmOGQ5YjlmLCAweDAyOTBlZTU1LCAweGM3OTgzMTQwLAotCTB4ZjA3OTQzYjYsIDB4NTI1M2NkNWQsIDB4NWM3YzAxYzAsIDB4Zjk5ZDNkYjUsIDB4ODllNWY2MGQsIDB4MWQ3ZTM5MzYsCi0JMHg5M2NjMTljYSwgMHg1OWNiYmY0MSwgMHg0ZmE0NmNlYiwgMHhhYTBkYjZjZCwgMHhkMzlmNDBkZiwgMHhkZjk5MjNmNSwKLQkweDNjZDdhODkxLCAweDc3YzBlMzA1LCAweDAyOTU5ZjJiLCAweDM2OTVjNTM4LCAweGVmNzUzZjZlLCAweGFhZGMyZDc2LAotCTB4ZDQxYWZjZTEsIDB4ZDc5YzZlZTEsIDB4NWJiNjJhM2QsIDB4Y2JiYzVkMWUsIDB4MzZmODQ3ZTUsIDB4N2RlMWIzYWIsCi0JMHhkNTliYTNlNSwgMHhhODVlODM3MiwgMHg2NDBhM2VkYSwgMHhhNmQ3MDBjOSwgMHgyNGUxODFlMiwgMHgwZjAxMjM3YSwKLQkweDg5NTNjMTMzLCAweGVkZDY4NjdhLCAweGE1NzY4YWE4LCAweDJkYWE3Y2ZlLCAweDZhYjFmODkzLCAweDVmZWE2Y2JiLAotCTB4ZDdlNDdiYTcsIDB4Yzg4N2VjOGMsIDB4NTVlMTM3NWUsIDB4MmY2YWRiYTcsIDB4YTA4ZWViZTMsIDB4YTBhZjU5ZGIsCi0JMHg2YTViZDJhMywgMHgxZjJmNWZlYywgMHg1MDM4M2E0NCwgMHhmY2E5N2I1ZiwgMHhjYThmYmQ1NiwgMHhhMjdlZjU4ZCwKLQkweGJmODg0M2NmLCAweGM2NGVkYzExLCAweDk3ZDc2MGU3LCAweDgyN2IyZjIxLCAweGMzZWMwYmNjLCAweGNiMDZlNmIyLAotCTB4MGFjZjUwZWMsIDB4YTJlZTdhZjEsIDB4YzhiZmU0YjAsIDB4ZWMxMmY1ZmMsIDB4MDRlMGM1ZGUsIDB4N2FmZGZhYzEsCi0JMHhmNjNiMDE1MCwgMHg4YWJjMzUyMSwgMHhhNmZjNjAwNSwgMHgwNGNlMDhmZiwgMHg1MjhmZjc3YiwgMHg0YWZhODYzOCwKLQkweGI4MmI4NWI2LCAweDI4N2NjNWRjLCAweGZhYzVlYjc3LCAweDEzZjI1ZGIzLCAweGE5ZTdkNjFlLCAweGJhMWY2ZmE0LAotCTB4MmNhYjc0YWQsIDB4NjM2NmI5ODksIDB4ZjdmYmZjYmQsIDB4YmIzZjUyMTUsIDB4ZmExNTFmYTksIDB4M2Y3NGJlMjksCi0JMHgzNjRmYjdiOSwgMHg3YjdiOTNmNSwgMHgwMWNmZGU4NSwgMHhmMmVkMjdlYSwgMHhmNmU4NzlmYSwgMHhkY2YwY2M2YiwKLQkweGYzZjdhOTVlLCAweGI5ZTNmNTMyLCAweGRlZTU3OWJjLCAweGNmMGNjZDMxLCAweGNmZDRkNTFkLCAweGQyMDE0NWMwLAotCTB4M2ZjZWIyYjcsIDB4YjQzYmQ2MGMsIDB4OGU2NDc3MTcsIDB4NTM0MWZhMzcsIDB4YzBkZmQzNmQsIDB4NTIwZGM1ZjUsCi0JMHg4Y2EzZTQ2NSwgMHg3OTI2NjljOSwgMHg5OTY2MGNjYSwgMHgwY2U2MDNlYSwgMHgwOWNmYjUzMiwgMHgwZmRlOTkxNSwKLQkweDg1OTU3ODVjLCAweDg5ZWYzNTJmLCAweDQwOGVhMjUxLCAweGY2OGI0M2ExLCAweGY0OTUyMGYxLCAweDI3MjBkOTRlLAotCTB4MjBmNzdmYzEsIDB4ZGRjZWY0OGQsIDB4ZTA0Nzg0ZDcsIDB4YTJiMDhlM2EsIDB4MWFiNzczN2YsIDB4ZWE0ZGViMWUsCi0JMHhjYzQ4NzRjNywgMHg4NmRmYTU4NywgMHgzZGZkZjVhNSwgMHg5ZTljMWVjMiwgMHhiN2YwZjFmZiwgMHg1YjVhZmJlMCwKLQkweGE4NGNmMGVmLCAweGZiMmI2YmJmLCAweGJjZjllMjMzLCAweDMyNjlmZmQwLCAweDY5NzZjM2FiLCAweGVmZmE0NjBlLAotCTB4YWRkMmMyOWUsIDB4NWI1ZTAzMTEsIDB4NDhiZjAwODYsIDB4ZWM1YjdlODksIDB4YTNmMjFmNjEsIDB4OTAxYTkzNjQsCi0JMHg1MTBmZDczZiwgMHhmYTA0MWIxOSwgMHgxZmRiMWQ3NCwgMHg5ZWU3MzU4MSwgMHhjNDNlZTUyMSwgMHgyZmZkMDNiZiwKLQkweDhjMmFmOGUzLCAweDc3YzY5YTNmLCAweGI3N2M2MGQ4LCAweDhlZjhmOTJkLCAweGYxYTZjOWEyLCAweGE2MTUwNTlkLAotCTB4OGMyYTlkZjEsIDB4Njk5MWYyMGYsIDB4OWRmMTg5NzMsIDB4YWQ2NjE3ZTQsIDB4OGVmOGQyNzMsIDB4ZmYxYTBhODIsCi0JMHg5ODU1OTUxZSwgMHgxYmViNGZjNiwgMHhjNjBkYTA3ZiwgMHhmZWUzNjIxZCwgMHgxN2Y5YmY0YSwgMHg3ZjllNjM1ZCwKLQkweGZlNzlhNTQxLCAweGExN2Y5ZjJhLCAweDlmOGM1MzJkLCAweDVhMmZmMzQ2LCAweDJmZjNlNWU3LCAweDc3ZjNlNGE4LAotCTB4YzZmYjdlZjAsIDB4N2ZlMWY0ZjcsIDB4MjYzZjhlMDQsIDB4ZTI4ZWY4YzUsIDB4MGZmOWU2NjksIDB4ZGZjZjM2YWQsCi0JMHg2NzFmYzdjMSwgMHg2YmUzMTNjYiwgMHg3NWY4ZmUzNCwgMHhhMWZmM2UzZSwgMHhlYWJlMzRkNSwgMHg4ZjkwMDcwOCwKLQkweGJhYjRmY2Q0LCAweDgzNDNkYTI4LCAweDI0MGRmYjQxLCAweDcyYTQxODFkLCAweGJiOTNmNzI0LCAweGUzODIyMmE0LAotCTB4NzdjZTM0ZWUsIDB4YmYwMWE1MWYsIDB4Y2E3ZDA5NjksIDB4OWUyOWViYTIsIDB4NzRmMDUyYjIsIDB4MzUzMjhlZDUsCi0JMHgwN2JjNWEzYywgMHgwMDk5N2Y3YiwgMHg0Y2JiNjk3NSwgMHgzYTM2Y2Q3YywgMHhiYzAwNTdhMiwgMHhmOTMyZWRkZCwKLQkweDVlMzc0YjNiLCAweDNkNjk5NTFiLCAweDE4MDhmZWU1LCAweGZlN2M3MTkwLCAweGQ5OGY2ZmM3LCAweGI1OTc5YzYyLAotCTB4M2Y2YWQ2NWMsIDB4YWI5MDY5ZDEsIDB4OWQzZWZkM2UsIDB4ZjgwM2FjOGQsIDB4NTM1ZTQ4MzYsIDB4NjllODA0ZmQsCi0JMHgwNmRlYTY3NCwgMHg0OWU1OGM3ZCwgMHhmM2MwMzM4YywgMHhiMzhmNDA3NywgMHg3ZmZkZmQxMSwgMHhkMWI1ZWVlOCwKLQkweDBhMmZhZjMwLCAweDFjMjg0ZmY4LCAweDQ4ZDYyN2RmLCAweDQ3ZmZjNDUxLCAweGE4YTk1NjFiLCAweGE2YjU5NmNmLAotCTB4MDdkM2QxYTMsIDB4NTNhMGFkNDcsIDB4ZDkwNzZlZWYsIDB4M2Y0ZjgwNTUsIDB4MTIxNmU3ZTIsIDB4YmY3ZWM2NDUsCi0JMHgyNDg3MGJlZiwgMHg2Zjk2N2JiMCwgMHg2ZWZhNjAxYSwgMHhmYjM2OGIxMSwgMHhmYjkyZmRhMCwgMHhjMmYxMGYxNywKLQkweGU4NWQ2ZmZjLCAweDFmOTMyZjE4LCAweDkxYjdjYzE4LCAweDFiN2NiMzFjLCAweGRiMGI0ZWY4LCAweGExZjNkODM2LAotCTB4YmI0MmNiNzIsIDB4NTJmOTRmYzksIDB4YjViZjVjZDgsIDB4YjZlZjVjYzIsIDB4Y2YxOGVkNDcsIDB4YjEyMTVlZWEsCi0JMHg2ZGVmZDBjZCwgMHhmZjhiNzY3NSwgMHg2MTU5YzdjMywgMHgwOGYxMTJjYiwgMHg4MTE3ZGUzZSwgMHhlOGYwNzk4NiwKLQkweGUzYzcyYzM2LCAweGY1ZDEyZjYzLCAweDU2ZmYyZjc2LCAweDZiZjZhNzg3LCAweDkwNTQ3MDc2LCAweGU4Mzk5ZDdlLAotCTB4MGU0OGIzNDcsIDB4MmY2MTc3ZjksIDB4ZGUxNWI3OWYsIDB4NjBjZWVkZGIsIDB4ZmRiOWUwMDgsIDB4ZDNlMTMyYWIsCi0JMHhiZWU3N2YwYSwgMHhlYzBkYTBmNCwgMHg3ZjRkY2VkMSwgMHg2ZTdkYTNiMiwgMHhmZTE1OGY5ZCwgMHhlNzVhZDYzYiwKLQkweDdkNzE1NWUzLCAweDNlYjExYzU4LCAweDVhZWM5ODhmLCAweDJmNmRhY2JkLCAweDgxOGVmYWRiLCAweDlmNjI2YTlmLAotCTB4ZTE4ZWZhZGIsIDB4ZjNlZGFhYmIsIDB4ZDExNWY1NGMsIDB4MmZkYTk5MmYsIDB4ZjRkOGI0ZGYsIDB4MGFlYjU5N2UsCi0JMHgyZDI1ZmJkMywgMHhjNWY1NGNhYiwgMHhkYTlhYWY5MSwgMHhjMWI2YjFkZiwgMHhiYWI2ZmVmNCwgMHg2ZmVmNGQ3YiwKLQkweGFhNjBkOGFkLCAweGIwZmMyOTdmLCAweDBiMmRmZGE5LCAweDRiZGU5YjM3LCAweGVkMGM1NmZiLCAweDFlMWFiZDI0LAotCTB4ZWI3Njg3OWEsIDB4NTlmOTA3NzEsIDB4ZjJlYmJmM2EsIDB4MTZlYzBhNzAsIDB4ZGQ4MzRmMmMsIDB4Y2EwMzY1ODIsCi0JMHg2ZGJmYzgyOSwgMHhiNzZiMmYzNywgMHgzNWVhMWUyYywgMHhlZDI3NjFmOCwgMHg0ZjI4MDU3NSwgMHhlMmI3YmU1NiwKLQkweGYwZGZjYWQzLCAweDFkNmM5Zjk3LCAweDhjNmFjYmQyLCAweDNkYmY0MTQzLCAweDI0MzkzZjE2LCAweDFmMWVhMGY0LAotCTB4ZGNiOTU2YWMsIDB4OWJjY2VmNTYsIDB4YjU3ZmZlOGUsIDB4OTc1ZTFmMWEsIDB4OTNlYzRmYzQsIDB4ZjM0NDk4ZTcsCi0JMHhlN2E1Njg2MCwgMHg1YjgwZGQyMCwgMHhkYWFiNzgwZCwgMHhiMzgyNmM1ZSwgMHhlMzRjYmY2YiwgMHgwNWQ5NDRhZiwKLQkweDBhNWYzN2ZkLCAweDg4ZjVjNzFkLCAweDJjMTYwZmM1LCAweDA0ZjA4MzE4LCAweGY2ZjU0MzdmLCAweGJiN2Y1YTFjLAotCTB4N2Q2Y2U3ZWEsIDB4MGJmODhlYzcsIDB4N2VhYTc5NTEsIDB4ZWEyNzk1MjEsIDB4NTNiZTU0YzMsIDB4ZGJlNTQxNWYsCi0JMHg3NjU0NzVmNSwgMHhmMmE1YWZkNiwgMHg5NTA4ZmFjZCwgMHhhMTZmYWJiZiwgMHhhZGY1MzdmMiwgMHhkZmFiMWU1NCwKLQkweGY1ZWJlNTQ0LCAweGViYmIyYTUxLCAweDdjZWE1NDgzLCAweDQzMjdhN2RiLCAweGZlMTU2ZWMyLCAweGI3MjI0ODA1LAotCTB4ZTQ1Y2M1NWIsIDB4OTZiOGJlZGMsIDB4YWNmMWU1MGYsIDB4YjQ3MGQxZjYsIDB4MDMxZWNmY2IsIDB4YzZhNjE3MjIsCi0JMHg1MjFmOTU5NywgMHhjOTA1OTVlMiwgMHgwMjhmMjhhZSwgMHg3ZmY0MDc5ZCwgMHg3NGUzNGFlZiwgMHgxY2Q4ZDk3MiwKLQkweGRlZTM3YTA2LCAweGMwMWZiZTJiLCAweDE1ZDQxMzM4LCAweDQ3ZGY4NTk2LCAweDQ5ZGNmMzAzLCAweDEwN2YwNWZhLAotCTB4M2EyOTc1ZTksIDB4Yzk2ZjYwYjEsIDB4ODljN2EwN2MsIDB4OGE1YWZlNDcsIDB4NDU2Yzg2ZmQsIDB4MjgzODVlZGMsCi0JMHhlMmM5N2FkMywgMHhhZjQ4MDM1YiwgMHhlOTM3OGE0ZiwgMHg0MDJmYmYyNywgMHhhMzkzMzliOSwgMHgwMGEzYWZlMywKLQkweGIyZGYwNGUzLCAweGIzOWZhOTc5LCAweDIwYTYwZTZkLCAweDQ3YTRmNzFlLCAweGY2N2QyNDMxLCAweGFlMGY1NmYwLAotCTB4NzI3ZGFiNzcsIDB4YjMxZjE4ZDQsIDB4YzJiMTM1OTYsIDB4NGY5ODY2YTgsIDB4N2ViOWJiNmQsIDB4YzM5YTU1YjYsCi0JMHg4Y2ZlNjllMywgMHg1ZjIwYzY5YiwgMHg1MGVmYTM3OSwgMHhhNTQ3ZDE1YywgMHg5ZjZhY2ZkZSwgMHhmZWU4ZTM0YSwKLQkweDQ5OTFkYjM4LCAweDIxN2UwYTdjLCAweDg2YWZmYmI1LCAweDA5M2Y1NTIzLCAweDFmZDhkYTM4LCAweDJlMjg3NzAwLAotCTB4YjkzZjhhMTcsIDB4MGY5NGNlNWYsIDB4YjFiYjhjNTQsIDB4NzA4ZmY2M2QsIDB4N2ZjMDc3M2QsIDB4NjU5MWQwMTcsCi0JMHg3ZWY1ZDUwYSwgMHhjNDcyNjM2YiwgMHhlZjlmMTYzMSwgMHhkZjA3OGQzMCwgMHhmYjlmNzVmOSwgMHhmOGM1ZDE0MiwKLQkweGY0Mjc2MTU1LCAweDliNmE4Mjc5LCAweDBlNDQzZThmLCAweDZhMmI5NWYyLCAweGE2OTlmYmQ2LCAweDVlN2I2ZDdhLAotCTB4ZTAwZWI0ZDQsIDB4NTllZTQwM2YsIDB4M2FlMGE0ODUsIDB4YThiODJkNTgsIDB4MjQ1YWQxNDcsIDB4ZWM4YzZmODAsCi0JMHhmMTI2ZmNlNywgMHg0ZWNlMzU3NiwgMHhiZTQ3ZWMzNSwgMHg1NGUyZmM2OSwgMHhhNTZjYjYzZiwgMHgzYmUxNWFmOSwKLQkweGFiZDg3ZjVkLCAweDVjN2UyNDVjLCAweDNiYmQ5ZjI1LCAweGZmYzhiZWQ5LCAweDQ4YmVmOTk2LCAweGQzZGI4ZGI1LAotCTB4YTBmMTE5Y2MsIDB4MTE3Y2NhYmYsIDB4ZTE4YmM2MGYsIDB4MGZjM2ViNGYsIDB4OGUzMDRkZjksIDB4YjNmN2FlYTEsCi0JMHg0ZGVmNmEyMiwgMHhkOTc2NGViNiwgMHgxZDZjOWRiOCwgMHg3YjhjNDViNywgMHhkY2FkZmMyOSwgMHhjZTM2NzQ3MSwKLQkweDk1Yzc4YWRiLCAweGI0YWJlZmVkLCAweGZmYzBhMzFmLCAweGQ0NzgxMzRhLCAweDBlNDYzYmYxLCAweGRmYzBjOGI1LAotCTB4MjJkZmRiOTUsIDB4M2Q5NGYyN2IsIDB4MTc2YmZjMzIsIDB4ZTFmZDViZDEsIDB4YjcxNDdjZDcsIDB4NjExZGU3ZDUsCi0JMHg5ZGNlMzgxZCwgMHhmZjY3ZjE3ZCwgMHg3NTg1YmYyZCwgMHhlZDk3ZGRmMSwgMHhmNjJjYmUzYywgMHg3MDM4NzQzNywKLQkweGY1MDZkMGQzLCAweDY3NzZhMjI1LCAweDliYzUxNTViLCAweDNkNzVkZGRmLCAweDU5NGI2ZmQ5LCAweDY0NGU4M2M4LAotCTB4NDUyZDZiMDUsIDB4YjMwY2YwM2IsIDB4OWQzYzQxY2QsIDB4MjY3YWFmNjEsIDB4NDNiNGU4MTgsIDB4OTc0ZTQ5NTYsCi0JMHgxMGVkOThiNCwgMHhmNTRkNWZiMCwgMHhmNWNjOWJlNSwgMHgxNzNmMzY3MiwgMHg0NmY5NGNmNSwgMHgzNDRhOGIzYiwKLQkweDQ3ZmJkMzNmLCAweDdmZTEyZjY1LCAweDhmNWJhYjM5LCAweDlkYTM3M2ViLCAweGU5ZGRiM2VmLCAweGU4M2U0YTY1LAotCTB4MWUxNzlhZGIsIDB4ZmYzOGM1MmIsIDB4N2ViZTY0OGYsIDB4MTU5M2YxZWEsIDB4YWI4ZWRjNTksIDB4MzE1NjZkOGMsCi0JMHhiNjg3ZmZiZSwgMHhjYTljNWYwOSwgMHg3YWU4ZmJmMCwgMHhjZjIyMWY1YywgMHhmZTZkODE0YiwgMHhhNGZkZjhmZSwKLQkweGQ1ZTE1YmYwLCAweDcxN2VlZmQ3LCAweGNkNDcwMTFjLCAweGJjNjkyOTc2LCAweDg5MmNiZjc3LCAweDYzZjM5ZmY1LAotCTB4YmFhNWUyODYsIDB4NWJlN2Q3NmUsIDB4MjJjOWFmZWEsIDB4MTkzMzJjMWUsIDB4ZWJjNjdlZTksIDB4ZTgzMmQ4OGMsCi0JMHhmMzhlMjA3ZCwgMHgzNDA4ZTlkYiwgMHg3MmMyZmNjMiwgMHhmNjRjOThlOCwgMHgxOTg0YmM0NCwgMHgzMGU1ODVkYSwKLQkweDVlOTJlZjNkLCAweDkzYmI0NzI5LCAweGI0MTJmMTI5LCAweDIxZWQ2MTIzLCAweDNmMDU1NTNlLCAweDEyOWU2OWM4LAotCTB4MzFiYjc3OGMsIDB4Njc3MThiYmUsIDB4ZDYwYjY3OTcsIDB4ZTYyYmJiZDcsIDB4MTZiNTFjNjIsIDB4ZjdmNDAxZjUsCi0JMHg2MWY2Njc4MCwgMHhiMjcwOWZkYywgMHhmODEwNzhkNiwgMHhlZjMzZTFkNywgMHhlNmZjYjgyZiwgMHg3NWVhM2E3YSwKLQkweDAwZjg3N2Q0LCAweDhjMDJmOWY3LCAweDIzZTk1NGUyLCAweDAxZGNlZGNkLCAweDFmNmNmZDczLCAweDVmN2NlMjllLAotCTB4ZjcxYzU4OWMsIDB4MGNiOGI1YzcsIDB4NGFjOWIzZTMsIDB4NTRiZjlmNTcsIDB4ODcxYWZlODQsIDB4NWE2NGVjMWYsCi0JMHg3OTc4ZDZmZiwgMHg3ZTIyOTVmYiwgMHhmNGY4ZTZiZiwgMHg4OTE3NTk4MSwgMHg5MzllZDU0NywgMHhjZWIwZDQ1OCwKLQkweDJhYmQyYWQ0LCAweDM5ZWQ2MWYyLCAweDZhN2Y5ZTg1LCAweGQ1ODdlYWJkLCAweGYzNTdhMGQ2LCAweDkyOWE3MGU1LAotCTB4YzIyOGY1YzMsIDB4NjEzOGMxMjcsIDB4ZTM4MDlmMDMsIDB4ZjljYTM1ZWEsIDB4N2MzZjBiMDgsIDB4OTliMjM4NmEsCi0JMHg5MThmYmY0OSwgMHhlMGM5ZjljMywgMHhmYmZkZDRmOCwgMHhlMjNmZjVmYSwgMHg2MWZmYjRiZiwgMHg5MDlmZmFmZCwKLQkweDE3OWFmZmFjLCAweDgxMTVkOTllLCAweDg3ZjJhMmY1LCAweDMzMDBmNmRmLCAweGQ2OTU3N2IzLCAweGJkZDAwMGRjLAotCTB4MDdiMzViN2EsIDB4MTI5NGYyZTUsIDB4ZGY1ZDIwZjEsIDB4YTI3M2NhOGQsIDB4NTJhMWY4NDksIDB4YTgyZWY5ZDEsCi0JMHgzZmM0YTU0OSwgMHg5ZmE3NDdjNCwgMHhlODBkZTZmZSwgMHhjZGI0N2ZjNywgMHg3ZWZmMjVlZSwgMHgwMGVlMjNiYiwKLQkweGI2ZDk1Y2E2LCAweDc2YzdjYjgyLCAweDdlYmM1YmM3LCAweDlmYzhmYmNmLCAweDdkNjZlZGI1LCAweGI3ZTRmOTUxLAotCTB4N2ViNGZkNzMsIDB4MWJmZjg0NDUsIDB4ZTU2MWZmMjcsIDB4OGQ5YzdmMTMsIDB4ZWIyZDU4ZjYsIDB4ZmQ2N2JkMjUsCi0JMHg5NzNmYzcwZSwgMHg2MmMyZjY0NSwgMHg3YmZmYTMzNSwgMHg1NmIyMWY3ZCwgMHhlZGI2YTVlMCwgMHgzZWUzZWY5YiwKLQkweGU3ZGI2ZDQ0LCAweGU5YTE3MjRlLCAweGZhZDFiZjI0LCAweDA3ZjA4NTVkLCAweGQ5ZGM1NTZlLCAweGM0OWJhZjE0LAotCTB4ZTliZjIxMjYsIDB4ZWU1MTYxNzgsIDB4M2MyZmM4MGYsIDB4OWNmMTgyNTYsIDB4ZjY1ZTI3YWUsIDB4N2M4ZGEzNDgsCi0JMHhkOWRmZjVjYSwgMHhmZGVmOTJkOCwgMHhhZTVhOWZkOCwgMHgxYTNmNDFiYSwgMHhjZWRkNmVlZCwgMHgzZjBiYjdmMywKLQkweGFiMmYwZjY2LCAweGVlMGY3MWVkLCAweGI2NmY1NDFmLCAweGY1NWNiZWQzLCAweGZmYmY1YjMzLCAweDhlNTdjNjA4LAotCTB4NDA1NzAyM2IsIDB4YmNjZjU1ZmYsIDB4NTAzNWZhZjQsIDB4OWVjZTdhYWYsIDB4NDM0Zjk3M2QsIDB4ZjQxMzcyOTMsCi0JMHhkNmZmODVhOSwgMHhhM2QwNGY4ZSwgMHhhOTJmNDdmMiwgMHhjZjhkMGZiOCwgMHhhMDk1OWViZiwgMHhmYjczZDU0YiwKLQkweDNmYTYzNjU1LCAweGY2YzQ2NjNlLCAweDEyNWE5ZGFiLCAweDlhZGVjNGZhLCAweGZjODZmZThkLCAweGU5MTU3OWMyLAotCTB4ODkzZWVlZmYsIDB4ODI0YzJjMGQsIDB4OTEyZmNkY2YsIDB4MjI3ODhjZGQsIDB4ZjU3YTBhN2EsIDB4YmVkMmNmZDEsCi0JMHg3YTQyZTgxNiwgMHg2YjJmNDJkMSwgMHhmZTQyNjliYiwgMHhhNzhjNWZiMSwgMHhmYjNmN2YwMywgMHhmOTc3ZGM2MywKLQkweDc4ODAyMzhkLCAweDJlZjY3OGE4LCAweGE0ZTdjZTBmLCAweGZjZjljNzUyLCAweGNjNWNlNmIxLCAweDQ3YjBhOGIzLAotCTB4ZjI1NGJkNzIsIDB4N2Y4ZjE1ZTcsIDB4Zjk2ZmY4ODUsIDB4NTJlNGFmZDEsIDB4ZjMwNTgzM2MsIDB4NDQzYjY0NmMsCi0JMHhjYjllNzBmMiwgMHhlNjk5YmQxZSwgMHhjNGMyY2U1OSwgMHhjOThmMTU4NywgMHhhMWYwZmY5NCwgMHg5NzNjZTZjMiwKLQkweDE2ZGU0ZTQ0LCAweDhiNzI3MjcyLCAweDRlODU5MjgzLCAweGZiODI0MmUyLCAweGQxY2FhZjEwLCAweDViY2YxNDZkLAotCTB4YWY5MmYxNDUsIDB4NmM0N2ZiZTgsIDB4NzQzZmQ1MzUsIDB4MmJiNTdhNzIsIDB4NGIwYzFmYmEsIDB4OWY3ZjkxODksCi0JMHhlOTAzYTdiOCwgMHg3MDQ4N2E3NCwgMHg2YjgxYzYyMCwgMHhmODExMTI5OSwgMHhiZjQwMmU5MCwgMHgwMzU5ZDFmMiwKLQkweDVmOTg5ZDM5LCAweDgxZGYxNTI5LCAweGNmODE5ZmZlLCAweDNkODc3ZGIxLCAweDdkMzEyYWU4LCAweDI2MTQyZWM3LAotCTB4YzYyMzVmYzYsIDB4ZDBkM2I4MDcsIDB4MGI5OTNkYmUsIDB4Zjk5MjYwZjYsIDB4M2QyNWQ4NjUsIDB4MGNjMWQ0NmUsCi0JMHg3NzkwNjY3YywgMHhkYzRmZmYyZSwgMHg5NzVkZTVjYiwgMHgzOWJjZThmZiwgMHhkNzgzZmVmOCwgMHg3N2UxMWNiOCwKLQkweDVjMDBiZjY4LCAweDdlZjQ4MWYxLCAweGU5MTI0ZGZmLCAweDI3OGIwNzA3LCAweGVjMjdmMzkzLCAweGVmY2RjZTQyLAotCTB4ZjAwMmZjYWQsIDB4ZjcxZWI4MmIsIDB4OTM4ZTBkZjEsIDB4ZmIyMDc0NDUsIDB4N2MyMzdjYjYsIDB4MzhhYmQ0NmYsCi0JMHhiZjdmYTdhZSwgMHgxNzJmMWNiYSwgMHg4YWY3ZTBmYSwgMHhmYTEwMGZjOCwgMHhmNWNhM2Q4MCwgMHgyNDNmNmE0MCwKLQkweDdiNzVlZGMyLCAweGEwOGZmYmY0LCAweDQ2YmM4MmZjLCAweGY2YmYyOGZjLCAweGJkZmZjZTEwLCAweGZmNWYwNzFkLAotCTB4N2JjZGM4MzIsIDB4Y2Q2ZTVkMzEsIDB4YjcyYWQ1N2EsIDB4NjZhZjNiMTUsIDB4M2RmNmU0YzksIDB4Y2E5MmMwMmQsCi0JMHgyYTRmM2MyZCwgMHhmMTI3NWFiNywgMHhhZjViZGZmMywgMHhlZDU0NzhlYSwgMHhlYmFhYmQ2NiwgMHhiNGY4NTRjOSwKLQkweDhhY2RjOWVhLCAweGQ1NmFmMDlmLCAweDFhZjdmMDkzLCAweDhmY2ZlZDJiLCAweGZjZWExZjNhLCAweDlhODNmOTU3LAotCTB4ZmE4ZmE4YTEsIDB4YzNlNzU0ZjgsIDB4ZjlkNTNlM2UsIDB4ZDEzYzVmYjAsIDB4ZmJlYjQ3ODQsIDB4MThkYzYwNWYsCi0JMHhmYmI0MjVmOCwgMHg4MWYzYjNkNywgMHhmODdiZDVhZSwgMHg3NzdjMmNiZSwgMHhhZjgwZWIwOCwgMHg1YWQzNzcyMCwKLQkweDFiNjdlNTBmLCAweDNkNGI1MWViLCAweGI0MWY2OTY2LCAweGY2OTY0M2Q0LCAweGNlYmQ0YjYxLCAweGUzY2EzZWQyLAotCTB4NTUwN2VkNjksIDB4MzcxMzlmOWUsIDB4NjNhZmI3YjUsIDB4YjFjNjM3MTEsIDB4YzcxNGNhZjcsIDB4ZDc5ODAxZWUsCi0JMHgzYjNkZjdjMywgMHhjMjkxYTMwYSwgMHg2ZjViNWU0NCwgMHhmNTFlYmE4ZSwgMHhkN2I3OGY1OSwgMHhhZjYyZjY4MywKLQkweDdhZWZjNzhiLCAweDRjOWViZDQyLCAweGQ2ZjY5ZDgzLCAweDcxZjQ5OTFlLCAweDQ5Y2Q5NDY3LCAweDA1ODI0ZmU2LAotCTB4NjRlYmY0NGQsIDB4YjhmM2RlYTksIDB4ZGRkYTBmN2MsIDB4NTkyY2RlMzAsIDB4NzE4YjU4MmIsIDB4ZjI5OTU2OTgsCi0JMHhkYzM2OTY2NywgMHg4Y2ZjYzFlMiwgMHgzN2M1M2Q5ZSwgMHhjYmU3ODQyZSwgMHg5YjdjYzg4ZSwgMHhmMjU0MTIzMCwKLQkweDI5ZGM3ZTBjLCAweDlhNjg3OTE2LCAweGY3YzdmYjg0LCAweGVjOTdmZDEzLCAweGQyZGQ3ZWUxLCAweDczZjM5M2ZiLAotCTB4NWNhZWY4YTUsIDB4ZGVhMmEzNWIsIDB4NmRlYzdmMDQsIDB4ZGU4M2JlZTMsIDB4OTZhM2M1NGYsIDB4MTdhZTdiZTcsCi0JMHhmZGZkY2Y3YywgMHhlZmNjMjdjYSwgMHhiMDNlMjJjMywgMHg3MWZiZTc0YywgMHhjZmY3MWM2YywgMHhhZTc3ZTUxOSwKLQkweDk2Nzc3YTE2LCAweDg1YzZmYTNjLCAweGMzOWU4NzQwLCAweDM5YmU0MzMyLCAweDNhMjY0N2JiLCAweGY3YzFkZDljLAotCTB4M2VjZTI5ZWYsIDB4OTdiNWY5MDUsIDB4YWY4ZTlkZjQsIDB4MTE4Zjk0MmUsIDB4ZDc1MGY1YTksIDB4ZmQyZmJmZjMsCi0JMHhkZWE5MzQxYSwgMHhlZjkyZGJmNSwgMHhlYmI1ZDk0MiwgMHhiMTE3ZjBmOCwgMHgwNTFiYzJmZSwgMHhkYmZkNjViZiwKLQkweGEyZTdkOGNmLCAweDdkOWU4ZDdkLCAweGVjODdkYTZlLCAweDgyZjNmYmQ5LCAweGI3N2Q2MWFmLCAweGY2NzA4MDIzLAotCTB4MDk3M2ZiZWMsIDB4M2FjZjUxZjIsIDB4YjFlYTA1NDcsIDB4MWZkYzIxOWUsIDB4ZTdmYmRjNmQsIDB4M2Y1YTRlOTIsCi0JMHg5MzdlNzg5YiwgMHg2N2MzZmI5ZCwgMHg0ZGY1ZmNmNywgMHg5ODRiMWIyOSwgMHhmYjA3ZGExNSwgMHhhODdmNjlkMiwKLQkweDhhMmVjN2Y2LCAweGZkZWNmNWFiLCAweGNlZDFhOTczLCAweDU5ZjNhY2ZmLCAweDdiMWJmNjI5LCAweDRlZTE2Y2RjLAotCTB4ZWY5MzJmODQsIDB4MzhiZWQ0ZDMsIDB4ZTYwMzZiNjUsIDB4NTdlZGI0NjMsIDB4MTlmYmMwOTcsIDB4ODI1ZjM5M2YsCi0JMHgyNzY3YjFmYSwgMHhlZGJhN2JiNywgMHg3ZWUzOGY5ZCwgMHgyZmVkNzdkYSwgMHhiZDAzYjNhZSwgMHgwNjM4NTFiYSwKLQkweDNmNTI5YTgxLCAweDkyZDExZTllLCAweGM1M2NlNWUxLCAweDFmMTcyZjBiLCAweGUwYzdmZjNiLCAweGY1N2RhMjQzLAotCTB4YThlZTNkZWEsIDB4ZmY3OWMyNTMsIDB4YTJkZmNkZTUsIDB4MjBlN2Q4M2UsIDB4ZmJlN2Q0YmUsIDB4ZWM4MWFjNWUsCi0JMHhmYmNkNGI5MSwgMHhiY2RkM2ZlOCwgMHhjY2U1ZjhhNSwgMHg3YzFmZjdiYiwgMHhmMjYzNzdkZSwgMHhlNWZkZDVkYiwKLQkweGVmOWYzZmEwLCAweGNmZWE5YmJkLCAweGVmMDQwM2I4LCAweDU3YmJmMjY1LCAweGZkMWM3OTU1LCAweDlmZmU3NDFmLAotCTB4ODEzYmVlOTgsIDB4Y2Y0YjllZWUsIDB4ZjgzZmVjN2IsIDB4ZmRkMzUzYmMsIDB4ZWU4MmVkYzgsIDB4YTk0N2NjNWUsCi0JMHg4Mjc5YzlmZCwgMHhiOWVhOTNlZiwgMHhjZTg3ZmYxYiwgMHhlZmQ3Yjc1ZiwgMHgzMTVhMDViMywgMHhiZDFkM2IyZiwKLQkweGUxZTczYzAxLCAweGUxODJkZjllLCAweGNlNDZmYmMxLCAweDI4ZGRhMmY3LCAweDJiNGJmZDhiLCAweGZiOTUxMTdjLAotCTB4ZjNjNGIyN2QsIDB4MWUxMGQ5ZDYsIDB4NGZjMjYzY2YsIDB4ZDcxMGYzNDIsIDB4MjcyYjQ1NGYsIDB4ZDZkMTU0YmIsCi0JMHg5NGNjZGQ5MywgMHhmMDEwNDc0MCwgMHg3NzU1ZGY3MiwgMHg4N2Q3MjgwNiwgMHhjNjE2M2Y4ZCwgMHgwMTY5ZTBmYSwKLQkweGZjNWI1NzhhLCAweDA1ODkyNmM1LCAweDk1NTdiMDI1LCAweDE4N2YzZWFiLCAweDQ4ZmIxNmZkLCAweDQyNTFkYzViLAotCTB4ZGU1ODViZTUsIDB4NzY5MGUyMjMsIDB4NjdmMjZhYWYsIDB4YmFlNmQxYjQsIDB4M2JhZTZmY2IsIDB4YzY0ZTdmNDQsCi0JMHg1OGZhNzdlMSwgMHhmMmQxZTMxNCwgMHg5OGJjMDc5NSwgMHg1MzhmMjZjZiwgMHhiYjJlYTYxOCwgMHhmZDA0NmI1OCwKLQkweGZjY2Y4NzA2LCAweDczZjQyMmZkLCAweGI0NWJmMTBkLCAweGIwNjBlM2RiLCAweGFkOGVmYmZkLCAweGYzMzgzZjE0LAotCTB4NjAzNzViZjQsIDB4Y2EyZjU1YmYsIDB4ZTk3ODA5Y2MsIDB4NzE2NmUxZGUsIDB4YWEyNTFiZTQsIDB4ZDk1MjNmYTIsCi0JMHhiZTI5MDcyNiwgMHgxNzRiYzRhMiwgMHg3NTBiZjYxOCwgMHg4N2VhYjE3YiwgMHg3MmFiODI2ZSwgMHgxNzNhMjNhNywKLQkweGY1ZGNhZmJlLCAweGI3NWExMjg3LCAweDNkOTJmNWQ3LCAweDBhNWE3OTFiLCAweDNiZTFhMzZjLCAweGIwM2Y3MDRiLAotCTB4YmU3ZTQ5NTIsIDB4ZTc5NTExZTQsIDB4NGVlZDc1MWIsIDB4YmM3ZTg4NWYsIDB4NmJlNzlkYjQsIDB4YjE2ZWM2NTYsCi0JMHgyODc5MGMzYiwgMHhkZWJiNTQxYiwgMHhmMjI4Zjg4ZSwgMHgyY2Y5NDQ5NCwgMHg0ZjMxOWYwOCwgMHhiYjU3Yjc1MCwKLQkweDdjMzg5MjllLCAweGU2MjhmNmVkLCAweDdmNmU1NjdkLCAweDExZTMxYmFlLCAweDAxMWNjNzk1LCAweGI3NmIxYjc0LAotCTB4ZWZmMTRmYmYsIDB4YzY3YzNmMTksIDB4OTc3ZTQ5ZDMsIDB4ZmI0M2YyNmMsIDB4NjVkYjdmZjksIDB4YjZjYWViYTIsCi0JMHhhMTViYjIxYSwgMHgxOTVkZjQ0ZSwgMHgyN2Q2ZmUxMywgMHg3ZWFhNGZmNCwgMHgxZTE3NzdiOCwgMHhkMWZhYTg5NCwKLQkweDc3OGMxZTkzLCAweGU2ZDhlZTljLCAweGZiNzAzZjIxLCAweGZkMzFlM2M1LCAweGJkZDhiZGZjLCAweGMyZmJkZmMyLAotCTB4NTRlM2U0NDksIDB4ZmM2OWRlZmUsIDB4M2Y1MWQ4MDcsIDB4ZjM3ZTJkNTUsIDB4Yzc2NDAxZjYsIDB4YzlhNTljMDIsCi0JMHhmZTc0YzdmNiwgMHhjM2U2N2FhOSwgMHhkOTVlMzFjNywgMHhjN2JkZjNiNSwgMHhiZmVhZWUxMSwgMHhiNDcxZTlmZCwKLQkweDk3M2VkOTQzLCAweDZhMmRmNzE3LCAweGM1MzVmZTlmLCAweGRlZWZmNDc3LCAweGEyNWM3OTU0LCAweDI5MjdhOWZiLAotCTB4ZmUwZGQ2M2UsIDB4YmRkNmY2MzYsIDB4ZmEwMTY0ZjcsIDB4ZmRjZmRkMjMsIDB4ZTdmZDE3MjUsIDB4ZDE2NzdiMzUsCi0JMHhjZjM1OGZmOSwgMHg5MmM4MThjZiwgMHgyMjVlYjFjOCwgMHgyMzJmNDZmZiwgMHhkYmE1NjczZSwgMHg2NDgzYjZjMSwKLQkweGJhMDE5ZjJmLCAweGU3ZDJiZmEzLCAweDc4NmFjN2M3LCAweGZjMmZjNDdjLCAweGUzYzkxZGY3LCAweGY1ZmNmZGExLAotCTB4NWUzNzA1YjYsIDB4NmRiOGY5OGIsIDB4ODNhYTAwZjYsIDB4YWZlZGZhNGIsIDB4NWVjNzNkMDEsIDB4ODg3NzFkMDYsCi0JMHgwYmVjNGNmOCwgMHhjZmRiZjUxNywgMHg1ZTgwM2ZlMCwgMHhmYzc0MmRlNywgMHhmN2Q5NmRiMCwgMHg2ZDc3YzExZSwKLQkweGVkZmE1MjAzLCAweDlmYzBjYmYxLCAweGEyM2Q2ZjFlLCAweDk0MGU5ZDA2LCAweGEwM2Y5ZGI3LCAweDZmZDIwOTc4LAotCTB4ZmJiODRjMmUsIDB4MzAwYjBmOTksIDB4ZGVjYTdkNWUsIDB4YjFlNTNiN2IsIDB4ZDE3ODc1ZWYsIDB4ZmJkY2FkNGYsCi0JMHhmNzUzYzkwNiwgMHg5ZTI5NDdmMywgMHhiM2RjNDRjOSwgMHhmMWZkZjU5YiwgMHhhMWM4OTRmOCwgMHhjZGMyN2RhYiwKLQkweDA3NDE3ZGZkLCAweDNkZjgwNzhjLCAweGZkZjg1Y2Y0LCAweDc4ZjVhZjljLCAweDQwMzhhYTQwLCAweGU0ZjNjMWQwLAotCTB4Y2Q3MDM4ZjQsIDB4N2UxNWJmMTMsIDB4ZDI2ZTgyNzUsIDB4NWJkN2E0NjQsIDB4ZWI1ZjhkMTcsIDB4MWUyMmYwNzgsCi0JMHg1Y2UzMTkyNiwgMHg3ZDJlZTNjOSwgMHhkZDBiMmU3MSwgMHg1ZjU2ZjhmNCwgMHg4M2VhMGIxYywgMHg5NTExOWUzMSwKLQkweDM3MTY0OGRlLCAweGUzY2NkZWVkLCAweDczNzZkZDYzLCAweDRlODI0ZGZlLCAweGQ1MzVlZTNjLCAweGU4ZDM4ZTYxLAotCTB4MmYyNTRkZjMsIDB4NmE1ZWRjYmEsIDB4NGYxNDlmMWUsIDB4YmIwOGQwYTMsIDB4YmFiZTNmYmEsIDB4ZGZhZTRlM2UsCi0JMHhkZTVjNzc2ZiwgMHhmZGNhNzU3ZSwgMHg3NTkyYTU5NCwgMHhjNzM2ZTUzZiwgMHhiYzNmNjhkNSwgMHg1N2NhMzJhNSwKLQkweDBjNzllNWU4LCAweGM4YjliZWZhLCAweDVhN2FlYzE3LCAweGZhYzk3OGE2LCAweGVmZDI0MWQ4LCAweGVmYTFmZDU2LAotCTB4YWRlMTU5YjcsIDB4NmNhZWYwMTMsIDB4ZDc0N2ViZTcsIDB4ODM1NDc3NGUsIDB4ZWMwZWJhN2UsIDB4Yjk1ZWJlMjYsCi0JMHhmZDE1MmRlMywgMHg3ZmRiNDNjZiwgMHg4YjNiNzJhNCwgMHgxZmFlMTFjYiwgMHhiYTdjYzM1MSwgMHhjMjVmZGQ5ZSwKLQkweGRmM2M3YWUzLCAweDM3Y2UzYWQ5LCAweGE5M2VkYzFjLCAweDljN2M5M2RkLCAweDliZWYxZGRhLCAweGM0OGFhOWM2LAotCTB4NzlmZjllNTQsIDB4MmI0ZWYxZjEsIDB4YmZiMDViYzEsIDB4M2E3NjFkZDMsIDB4MjYzYTczY2YsIDB4YmZiNjQ5Y2YsCi0JMHgxNzYxZDhiYiwgMHgyZjJiNDFmNiwgMHhiY2E1MWQ2MSwgMHhiY2ZjYTNlZSwgMHhkMzU3YzRjNSwgMHhjZDdhMGYyOCwKLQkweGM1YmYzOWQxLCAweDQwNmI4YzczLCAweDZjNGVkMWFjLCAweGRhN2NlMDZiLCAweGY5ODI3ZmY2LCAweGEzYjZlZjQ4LAotCTB4ZmQ3MTk2NWYsIDB4MzVmODg1ZGEsIDB4YWZhNThiZDgsIDB4ODM3MGNkZDUsIDB4NWRmZDI4N2UsIDB4YWJiMjIyNjgsCi0JMHgzYTRjZWY1NSwgMHgwZmMxMzM2NiwgMHg3NWM0MGNlMywgMHhjMWZhMDlhMSwgMHg5ZmNjN2RmYywgMHhjZjY0Nzg0MiwKLQkweDhmMDgzOWVjLCAweDVkNzliNWVjLCAweGVkNTJmMjQ5LCAweGNhZjI4ODVhLCAweDVlZWQ3ZWY1LCAweGMzMzhkZTczLAotCTB4NGZkMDg2ZjMsIDB4NWU3YTk1ZjcsIDB4ZjEwMzI4NTEsIDB4Y2RjNzYxZjQsIDB4MzI4Njc0YmMsIDB4Nzc1OTE3YmMsCi0JMHhkOWJkMDk0ZSwgMHhmMTYwMWY1NSwgMHgwODFjZmMxMSwgMHg3ZTQ1NmJkNiwgMHg4MzllYzU3MCwgMHg1NjBmNTFiMywKLQkweDJmZTYyNGM0LCAweGFkYTQ3M2M0LCAweDc2M2YzNzI0LCAweGE1NzNmMjY0LCAweDUxNWRiMzUxLCAweGQ0NTdlN2I5LAotCTB4Yjc4ZGIyYmUsIDB4NmEzMTYyYWYsIDB4OGM0NWU3OGYsIDB4NmM0ZDViZjYsIDB4ZTExZWM1ODIsIDB4ZjIyM2RkZmMsCi0JMHg5NWNmYWE0MiwgMHhmZjIxYjhiMiwgMHg5ZjgyNjdlYiwgMHgyNmJkZWFiYSwgMHhmMDhkNWYzZCwgMHhkNjFhZmI0MSwKLQkweGM0ZDRlMzQxLCAweGQxYzY5ODA2LCAweDliOWNkNWRiLCAweDQ2YWZlYTZhLCAweGFiN2UyMGU5LCAweGY0MmZmNzM5LAotCTB4ZWFiZTRmYmMsIDB4ZDQ4Nzg0N2QsIDB4ZTA5YmU3ZmQsIDB4ODUzZmY0NGUsIDB4ZWIyNDI3YzUsIDB4YjczZDFhN2YsCi0JMHhlNmZhODdlNiwgMHhkZTYzNzhmMywgMHg4ODJjYmQwMiwgMHhlODhjZmVhMiwgMHhkM2NhNzNlNywgMHhiZjgwOGRhMiwKLQkweDNmZjg1YTIzLCAweGRjZjgxZjUwLCAweDYyNWYwYjFiLCAweDMyNmNkZTc4LCAweDcwOWY1OWU1LCAweDBmMDQ3Yzg4LAotCTB4MDQ3Y2YwZjMsIDB4NzU4MzYyMmQsIDB4Y2I2ZDExZjgsIDB4ZjI4YzY5ODYsIDB4OGMzYjRlMGQsIDB4NWUyYzA2ZjksCi0JMHg2ZjQ0N2E4MiwgMHgyNWJkZWZkNywgMHg3ZTMwNjExZiwgMHgxNjUwYWEwMiwgMHhkZTYzMTY3MCwgMHg4ZDA3YWMzZiwKLQkweGIwNWIzY2YzLCAweDlmOWJhOGZlLCAweGJkNjAyYzkzLCAweDYwZmYzMWZiLCAweDBhMDNmMGFiLCAweGRjNThjZTMxLAotCTB4YTdlNGJjZmYsIDB4M2Q5OTI3M2QsIDB4ZDBkNTZjYTMsIDB4OWNiMzYzMDAsIDB4YTAyYTY3MjMsIDB4Mjk2ZmIzMmYsCi0JMHgwYmRmMmU3YiwgMHgzZDliMTk2NiwgMHhiM2QwZjMxMywgMHg5NzFiMmM5ZiwgMHg0YjU4ZjUwNywgMHhjYmZmN2YyNywKLQkweDUwMDU3MWIyLCAweGUyZWFlNjNmLCAweGNhMjRhYmVmLCAweGJlNWI1N2QzLCAweDdkYTIzMzNiLCAweDEzN2QzZDA2LAotCTB4YTRkNGE2NjAsIDB4NDA5Y2IzYTcsIDB4ZGZhMTMzY2YsIDB4MWY5OTcxN2QsIDB4NTU3YTFlZjMsIDB4YzIxNjY3OGUsCi0JMHg3MzI2NDM3NiwgMHg3ZWQ2MGRmYywgMHg3NWZhMWNmNywgMHgwZDlkNmQ0MywgMHhiN2JlNWZhOCwgMHg3NDk5Y2ZmNywKLQkweDIzZjMwZmRlLCAweDZiMWU5Y2YwLCAweGUxMWQyMmYyLCAweDE3MGJlNGQxLCAweGU2YjNhZmM5LCAweDc0ZmNlOTk5LAotCTB4ZWM1YzNiOTUsIDB4ZGYzNjNhMDQsIDB4MjNjZTkyMzksIDB4ZGUzMTUyM2UsIDB4MjZlMzdlODksIDB4NzBmM2I3OTEsCi0JMHgzZjIxYmU1ZiwgMHg5M2I1Nzg5NywgMHg0NGY5ZjdlZiwgMHgwZmQ5ZDc1ZSwgMHgyZWIyMzMwYSwgMHg3ZDZhMWZhMiwKLQkweDA2MjgyNzhiLCAweDVlOTQ3YWI4LCAweGY5ZWZiN2RhLCAweDMxZGJhZGY4LCAweDk5ZWIxMzBmLCAweGM0OTlkNjQ5LAotCTB4N2JlOTRiZjcsIDB4ZjMwNTNlNmIsIDB4MmQ5ZjEzNjYsIDB4Nzg4NjdjMTUsIDB4ZmFmMjFhNzMsIDB4OTUxMWNiOTcsCi0JMHhjNTViZGEwNywgMHg4YmQzMzdmYSwgMHhkNTIyOTdmMywgMHg5ZjUxODVmMiwgMHhiNGM3NGYxYywgMHhkM2M0NWNmMCwKLQkweGNmMjk5Y2U3LCAweDdhNDVjZTc1LCAweDY2NzVjZjVhLCAweGUwMzc0MzM5LCAweGU3ZTU3OTc3LCAweGZhZWU1MDBhLAotCTB4YWQ0YTY5Y2UsIDB4ZWIzZjQ4NzksIDB4ZjRhNjRmYjksIDB4MTlmOTkyZGEsIDB4Y2ZiOWM0NWIsIDB4NzEwZjcwNTQsCi0JMHg3MWMzNmY4NSwgMHhkZmUyN2U4YSwgMHg3ZmU0MTg3OSwgMHg4MDM1NTJlYywgMHhkNzYzYTRhOSwgMHhhNDI4MGM0ZSwKLQkweDQ1ZGU3ODlmLCAweDNjMmJlMGFkLCAweDFlZTc0ZWFlLCAweGNmYjQ2NmVlLCAweDgyOTBlM2RiLCAweGRjZjdkN2U4LAotCTB4NjBiYjI1ZTUsIDB4ZTRiOWQyZjAsIDB4MTdhNGY3NWYsIDB4YTkzZjMwYzYsIDB4ZGE3ZTZiZTcsIDB4NDI3YjA0MGYsCi0JMHhiMjFmMzk0MiwgMHhmMmVlMjMyNywgMHg2NDdlOWM5MCwgMHhjYzhmZDM5MSwgMHhiNzFlNjk3MiwgMHhiZGJmODJlNywKLQkweDhhZjNmYTkzLCAweGNmZDBjMGZlLCAweGVlOWY5YzRkLCAweGRmN2FmOTkxLCAweDM4MjdlZjUzLCAweDdlYzhiMDg2LAotCTB4NzcyZjFmYjQsIDB4ODUzYmFmYmMsIDB4MDNlODI4MWQsIDB4MTE4NmZmZjgsIDB4NjZjNzQwZmYsIDB4M2E0M2FmYWMsCi0JMHhjNzRhNGM4ZSwgMHhiNDc0NjRlNiwgMHhlNDlkYzc5ZSwgMHhmZDg3ZGYwYywgMHg0NDNmMmM5YywgMHhlN2FkNzJlNywKLQkweGM5MTI5OTcwLCAweGU5NTkzYzQzLCAweDNlYjRhYjViLCAweGI5ZDI1YjhjLCAweDNiMjdkZTdiLCAweGQ4ZGZhNzQ2LAotCTB4NGU4OGUzYjUsIDB4ODQzZTdhMDYsIDB4ZjNkZDhjNzAsIDB4ZDZlMTBkYmUsIDB4MjkxZGY4ZTksIDB4YzE0YzFkYjksCi0JMHg4ZmZiYWJjMCwgMHhkM2IwYmI5NywgMHhiZWQyNGUxNiwgMHhmNTI5NmQ2NCwgMHg4MmQ5ZjgwNywgMHhmM2YwMThlMywKLQkweDlmYmZkNjE0LCAweGUxNGYzZjFhLCAweDNmMDMyZmJjLCAweDdlMGU1ZWNmLCAweDRhYWYzZjc0LCAweGVlMTU3MWM4LAotCTB4ZmY5ZDAxNWIsIDB4NWI5ZjlmZTgsIDB4OTZjZWUzMDQsIDB4MTVkM2UyMzUsIDB4ZWY4YTY0ZGIsIDB4NzliOWZiNDIsCi0JMHg1ZmI5MDliOSwgMHgzZjZlYTUzMSwgMHhmMTVjNTc5ZSwgMHhiNGZjNDQ5OCwgMHg3ZmJmOWM1NCwgMHhiN2JmOWM0ZiwKLQkweDJmOTYwM2U2LCAweGJkOWU5MDhjLCAweDk0NjA1ZTc0LCAweDc2ZDU0NmY0LCAweDA5YzNmM2YzLCAweDNjYTAyYWZlLAotCTB4ODllZjcxNWYsIDB4MTU4MDVmN2UsIDB4MjEzNTY3ZmYsIDB4MzY1ZDRiZDcsIDB4ZmQwMmJkZTMsIDB4NjZjZWI3ZTQsCi0JMHg5YmNmMmJjYSwgMHhmOTBmZDdkMSwgMHhmZjliM2VmZCwgMHhmZGQzOGEwZCwgMHg2ZTMwY2VjYywgMHgyN2IyNTQxNCwKLQkweDEzMWYxMWM2LCAweDZmZDg5OWE1LCAweGJkMmY5MDk5LCAweGNkNmJhMWJmLCAweGM0NjE1ZTc2LCAweGI4YjAzZTdjLAotCTB4ZjAzZTdjYzUsIDB4ZjlmMzU2OGEsIDB4Y2M5YjExYzAsIDB4OGNhZjAzZTcsIDB4OGUwN2NmOWEsIDB4NTRkZTNlZGEsCi0JMHhjNmJiMTMxZiwgMHhmYjZjN2VkNCwgMHg1YzdkNTM3NCwgMHhmNmE2ZjNmYywgMHgzN2NmMGUxMywgMHhmOGVlYWZkNSwKLQkweGE0ZmRhOWIyLCAweGRlOWE3NzYzLCAweDM0YWNlOTRmLCAweDZhN2E5ZmJkLCAweDZkN2VhOWI1LCAweGRhOWFiZmVmLAotCTB4ZmQ3MTk3YzcsIDB4ZTQ3ZWEwNzUsIDB4ZmE5ZTYzNTQsIDB4Y2RhYTU1ODEsIDB4MGQ1N2NmOGIsIDB4OGM0Yjc5YjcsCi0JMHhmZTgzNzNjZiwgMHg4MzRiMmMxMiwgMHhkMmE3NjdlOCwgMHg1NzljMzNiMywgMHhmN2FlMzU0ZSwgMHhkMjZlY2M2NSwKLQkweGU2OWMzMzNmLCAweGUyMjVjN2JhLCAweDJmYzAwNTEwLCAweDJlMDFmYzQwLCAweGJjODE1Y2IzLCAweDFlNDBiYWU1LAotCTB4YjVhNmViZjIsIDB4ODNjNzg3MGMsIDB4NDBjYjBjNTYsIDB4Y2IzOTAyNzksIDB4OWM5ZTVkNzUsIDB4OTNiYjYzZTUsCi0JMHhiMWViZTMyYiwgMHgwMDNlZWM5ZSwgMHgyZWY5MTBiNSwgMHhiMjliZjk0MiwgMHhlMzJmZjczOCwgMHhmZTMyMTczZCwKLQkweGMyYTU0NDNmLCAweDVlNGExMTIyLCAweDdjODYwMTY3LCAweGY1Zjc1ZDZmLCAweDhmOGFkZWY1LCAweDI3Yzc4YjgwLAotCTB4MDRmMGZlMWQsIDB4ZGMzZjJjYzUsIDB4NGM1NWYwZGYsIDB4OTJmODBjNTAsIDB4NzZhNjc1YmQsIDB4NDk5Y2ZmMGUsCi0JMHhlZjg5ZjdjNiwgMHhkZmNjOTM0MiwgMHhhNWQ1MzQyZCwgMHg3ZjI5NzNlNSwgMHg3NjVjMTUyOCwgMHg0ZjUxOTJkZiwKLQkweGU3YjM3ZTgwLCAweDdmNTJhNjJkLCAweDk2ZDBiY2RlLCAweDA2ZjA1ZjM0LCAweGMzZjQ2N2Q3LCAweGM5ZmYzY2EzLAotCTB4ODBkZGRmNjAsIDB4ZmQ5MzM5NzQsIDB4Zjc5ODQzZWEsIDB4MmY1MTcyYjYsIDB4MGU3OWUzZjksIDB4ZDQ0ODdlYjMsCi0JMHgzYTJmM2RmOSwgMHhiM2Q2OGYzYywgMHhlYmRlYjhkMSwgMHg0MTk2ZGFlNywgMHg5YTZkZDYyMSwgMHhmM2UzYjJlZiwKLQkweDYxYWYzMTczLCAweGZkM2YwYTcwLCAweGM3OWYzMTAxLCAweDk2YTMyM2ViLCAweGE3MzA2MzIyLCAweDQxNzkzY2U5LAotCTB4ZGEzNjc2YmMsIDB4OWU0NTQzNjEsIDB4ZTRiNjQzZjYsIDB4MmU1NTUzZjksIDB4NDQwY2FlYmUsIDB4ODJmNjhkNDUsCi0JMHhjMTNlZDJhNiwgMHg3OWRmZjI5OSwgMHg1NWFiZjUzMCwgMHhmZjIxNTcwZSwgMHhhM2I2MzlkZSwgMHgwZWEzOWY5NCwKLQkweDNmN2U3OGY4LCAweDc3ZDc1Yjg3LCAweDIxZTg1YTA1LCAweDYwMDU1ZmQ0LCAweGZiMGJmOWI2LCAweDUxNzAzM2MzLAotCTB4YmMyMTRlNjgsIDB4MDViMmNhNmYsIDB4NGFmN2FhMzQsIDB4ZWJmOGRlNzQsIDB4YmVkMDMzMjAsIDB4YzEzMjZmZTksCi0JMHgwYTYwNzRkNywgMHg1YWE5MTVlNSwgMHgyNzQ2NDU5OCwgMHg3ZTQ0YzllNiwgMHhmMGVmYmU4MiwgMHhlNDRkZjY2MSwKLQkweGQ1NWQzNmJmLCAweDkxODhkZTc3LCAweDNhODVhYjNmLCAweDM3MGZkZmIwLCAweGE2ZGM2OWRhLCAweDdkZTk5MmU5LAotCTB4ZWFiYWQ2ODEsIDB4ZGU1MWMwMTAsIDB4NGJmMTRlOTYsIDB4ZTQwZGQzNjUsIDB4MGUzZWE5N2YsIDB4MTJlM2QzNGYsCi0JMHgzYzExMmMxYiwgMHhlMWVlY2UzYywgMHg3YzNjMDBmOCwgMHgyNjcwZjEwNSwgMHg0ZDkxZjg1OCwgMHhhZmJjMzQ5ZiwKLQkweGJjZTk1MGM5LCAweDcxMTQ5MGU4LCAweGZjM2E2ZDhlLCAweDNhMjY5MWMxLCAweGMzMzA4ZGU3LCAweGY2ZmM2ZjJkLAotCTB4M2Y5ODQzYWEsIDB4ODA3YTdjZjIsIDB4MmUzZWE0YTQsIDB4Nzc5ZTZhZTgsIDB4MWJmY2Y2NzMsIDB4MWFlZDA0YmYsCi0JMHgxZTE5OTM1ZiwgMHhjMjc3ZjBmOSwgMHg5MWYzNGYxYSwgMHg3ODI0ZDFhMywgMHhmMDA2ZTlkNywgMHg5NTdlNDM2ZiwKLQkweGY5YTZjZDM3LCAweDJmN2EwYTE2LCAweDNhZTM3YTA3LCAweGU2ODViM2UzLCAweDZkNzNmZDEwLCAweDlkNmJlNzBjLAotCTB4MDdhMTBlYzcsIDB4ODU3OTcxOWUsIDB4Zjk3Mzk2ZmMsIDB4ZjUxZDJkZjMsIDB4NzNkMjA0YzQsIDB4NzNmZmQ4NmQsCi0JMHg3M2Y2OTRhZSwgMHhkZDg5MmI5YiwgMHg1MTdiYTk3NSwgMHgxYzc2MTdhYSwgMHhjYTBlNTJjMiwgMHhkNDI3ZWUwMSwKLQkweGNmZGEzNzBkLCAweGUyN2YxZmEwLCAweDcyY2RmODMyLCAweGIwNGJkN2M2LCAweGUxZDk0YmRmLCAweDY1YTA0YWI1LAotCTB4ZWRhNWUxNzgsIDB4OTBjZmI0MzQsIDB4MGNmYjc1MGYsIDB4ZTcxNDc5ZTYsIDB4OWU4YjBiZjksIDB4YTNmNWU4MzcsCi0JMHg0NDk5ZTZjOSwgMHhlZDhlYmZhZiwgMHg5ZTM5N2U0ZSwgMHhiZDAyN2VkNCwgMHg4ZTY0NzY0ZSwgMHg2NWZmNWM5YSwKLQkweGQ0N2E3MWE0LCAweGY5NDY1NTdhLCAweDk3ZjYyOTg1LCAweGVkYzk2OTZjLCAweGRmZWI1NGM2LCAweGEyOTBmY2E1LAotCTB4YzA3ZWU2ODEsIDB4ODQ3ZjIxNmUsIDB4ZGZiNGFiOTUsIDB4Y2Q4M2Y2NzUsIDB4M2NjNzBlZjcsIDB4ZjI4OGFkMjEsCi0JMHg5M2Y1NTM4MywgMHgwNGM5NzZiZiwgMHgyMmJmY2Y4MSwgMHg5ZGZjNzQxZSwgMHhmMDE1ZTBiMywgMHhlYmE0ZDdmOSwKLQkweGQzZTAzNTY0LCAweDRiMjdjMjY2LCAweGY0N2IwY2JiLCAweDMyYmI5ZmQzLCAweDE2ZWExNzlmLCAweGUwNzU4Nzc4LAotCTB4MTYwNzVhMmQsIDB4ZjE4YTU5YmMsIDB4N2YzNzk1OTcsIDB4YTdjMGViNDQsIDB4MzlhMTY3MWUsIDB4MGZjN2EwOGUsCi0JMHgyMWRmOWM2MCwgMHhmYzE3YmE5ZSwgMHgzYjdkYzQ0ZCwgMHhmOGQ5NWUyOSwgMHgxN2JhMDhmYywgMHhhZWJhNjZhZiwKLQkweDc0OWNlYTRmLCAweDExNzA3MmVlLCAweDJlY2NlN2QxLCAweDNjZTExMDQ3LCAweDY2ZTNjNTkzLCAweDNhNGQ3NjY3LAotCTB4Zjc5OWYxODQsIDB4MTk2NzBmZWEsIDB4ZDllNjdjZTksIDB4ZTg3NmE1YTMsIDB4YTNjZWNjZWYsIDB4ZjdlOTBhYTUsCi0JMHg5ZGRlZTlhOCwgMHgyYWJmMGI5YSwgMHgzZjVlN2Y0NSwgMHg3N2M3ZDBkZiwgMHhkM2ViZTRjZSwgMHgzZjNmODI3NSwKLQkweDVlMzAxZTI5LCAweDBhNTFmYjRmLCAweGJiZWQxODdiLCAweDliNTRiYzNlLCAweDQ5OWMxNWNmLCAweGYxMTRiMzdmLAotCTB4MGViOTc4MDAsIDB4NDNkM2FlZTksIDB4MzMyYjg3OGYsIDB4ZGM2MDY2M2EsIDB4ZmMwYmY3YjYsIDB4MmU4ZGE5M2UsCi0JMHhlMzUyYTcxZSwgMHhjZDc2OTg3NSwgMHhlMzViODc5YywgMHhjNDc1YTY1OCwgMHgzYjUwZWYyOCwgMHhkMmM3MTFkNiwKLQkweGM0MWJkOWQzLCAweDc2NzZhN2VkLCAweDVmYjFlN2U3LCAweDdlZWYyOWVmLCAweDA2ZjU2N2FjLCAweGQwYzc4NzNlLAotCTB4MDZhZmU3NjUsIDB4YmI3YzAzYmQsIDB4NzFmYWRlNzEsIDB4ZjdlOTRmZTgsIDB4ZDk4YWY5NmIsIDB4ZTBiMWMyYzgsCi0JMHhlMjVlNjFiZiwgMHgyZGNiOGE1OCwgMHhlNjA3ZWZjMCwgMHg3MWM0MWVkYSwgMHhmMzczMjVhNSwgMHg2YzVjODE5NiwKLQkweDg3OTRhOGYyLCAweDFjMDhjY2E5LCAweGYzN2MyM2Y2LCAweGVjZWY4MjE0LCAweDE3ZGY5OTYxLCAweDg1YjljZjMyLAotCTB4ZmM2N2JmOWYsIDB4ZmQ5YjkyMWUsIDB4YTdkNGJlYjQsIDB4YzNlM2U3ZTksIDB4MmFmZWI4ODUsIDB4MWE1MTZjYWMsCi0JMHg4NWE3MDdkNCwgMHhkNzMyYzBlZiwgMHgxMGZjMzFkNiwgMHhmNjNhZTc3YywgMHg2MDljMDI5YiwgMHhkMGJmYzFlOSwKLQkweGNhYmIzYWJkLCAweDNmNzFmYjQyLCAweGU0Yjc3N2JhLCAweGM3ZmFjMmRmLCAweDdlODVlYmZkLCAweDQ4ZWZjYmQwLAotCTB4ZWYzMWM3NzUsIDB4ZWJiZWZlYWMsIDB4ZWM3YzYxNjYsIDB4YmEzYWFlM2IsIDB4ODJmZTA1ZjcsIDB4ZTdmNDFmNGUsCi0JMHgzMmNhZGYwYSwgMHg2YTY5MWM2MSwgMHhhMTZiOWNmMywgMHhlM2Y3ODc2ZSwgMHhjZDY5ZmJmMCwgMHg1NzdlZDA0ZCwKLQkweGFmMWYzODY2LCAweDUzNGI3MWMyLCAweGMxMGYwZjlhLCAweGI1YmNhMzNhLCAweGNkMjliNGZhLCAweGZlNjYzMDExLAotCTB4ZTNjYmNkMzUsIDB4MTBiODVhZWQsIDB4Zjc1N2Q0ZTksIDB4YTg2ZGRkNDIsIDB4ODU3NTJkM2IsIDB4ZDU3OWY1ZDcsCi0JMHhlNTBiZmMxYywgMHhjM2RjYWU5NSwgMHhkOWNhMmRlZiwgMHgxYmRmOGYzMywgMHhlZThmM2VkNywgMHgxMzRlNmI4ZCwKLQkweDlhNjM0NDdhLCAweDU4NTYzY2YxLCAweGY4OGJkZjBlLCAweDE5NWU5MmVhLCAweDhmNDhlNWNlLCAweDJmNzhhNjdiLAotCTB4NTljMzllZTIsIDB4MDZlM2M1MWQsIDB4NjJlZWMxZTEsIDB4YmM3OGNiYjQsIDB4NTJmNTgwYjMsIDB4OGFlYmM3YTksCi0JMHg2MWNhODA1OCwgMHg0OGU1NDQyYywgMHg1NWU1NGFkNiwgMHg2OGU1NDYyYywgMHgwOTY1NDFkNiwgMHhjMDMyYTVlYiwKLQkweGUzOTYzMmJjLCAweDZjY2E4MDU5LCAweDU5ZDFkZDViLCAweDY2N2Y0ZmE4LCAweDdjM2E3ZDI3LCAweDgzMDNhYWZiLAotCTB4NDRkZTkxMTgsIDB4Yzc4ZDY2YjcsIDB4NjU2YmQ2ZTksIDB4ZGNiYzFhZDksIDB4M2Y1MGY4MjgsIDB4MzQ4ZDU1NTcsCi0JMHhkYjYyYmUwMywgMHhlODdlYzhmMywgMHhkZWY2MzIxMiwgMHhmNzA0NWIyNiwgMHhmOWEzZDk2MywgMHg5YzVhYmNmNCwKLQkweDdlM2VhZTQ3LCAweGY3Y2RlYzgwLCAweDYwZjNjOTgyLCAweGJiOGJjMDVmLCAweDk2M2VkMzNlLCAweDNlZDY3ZjU5LAotCTB4NDFiZTExYWEsIDB4Mzk0MDVmN2UsIDB4NDE3MDg5NTksIDB4YTBlY2U2ZGQsIDB4NzVmNjk3NzMsIDB4M2VlOTA3YjEsCi0JMHhiNGVjNjdiOCwgMHgxODU1NWFiZiwgMHhiZDQzYjMyYSwgMHhhMDYxNzc2YSwgMHg3YTg3MjBjMSwgMHg2NjU1NzAzZSwKLQkweDk2YmM3NzJjLCAweGY1ODg4ZjM4LCAweGRmODI1YTcxLCAweDI4NmZiNjU3LCAweDc3ZmI3ZGMwLCAweGY1YTcxZmY3LAotCTB4ODVlOTg3ZmUsIDB4YjY5YTlmMzQsIDB4NGRkODZhYTMsIDB4Y2EyYTdlZmIsIDB4N2QzOWJiY2QsIDB4OTdkOTNhZjYsCi0JMHgwNjQwYWVjZCwgMHhmZGU5Nzc5ZSwgMHg0YjZmYmYzOSwgMHg5NGY3ZGZjNywgMHhkZjcxOTc1ZSwgMHgyODNkNzBlNCwKLQkweDVlZTliMDQyLCAweGY5NTFmN2E5LCAweDk1M2Y3YThiLCAweGIyZjdhYjNmLCAweDQ3MDBmODIwLCAweDA0ZGE5ZGVjLAotCTB4MzBjZTRmOWMsIDB4N2JmYmNhMmYsIDB4NDMyYmQ4ZGUsIDB4N2NiZTYyMjcsIDB4ZTYwMWJmOTEsIDB4Y2VmZDk4ZDcsCi0JMHhkZWQwMTNmZCwgMHg3NDAxYzgwYywgMHg3NWVlZWMwYiwgMHhmM2I0MjUxMywgMHhjZjI5ZjM3YywgMHhiYzZkMWVlNSwKLQkweDRmMDA4ZmYzLCAweGU2NzAxMmEzLCAweDZiMmZiOGMwLCAweGEwMmJiNTNiLCAweDI0ZmNmZWJjLCAweGU1ZmZjZTI3LAotCTB4MGZjZDM2ZWMsIDB4ZGRjNjFiZjUsIDB4MjQ3ZGM1ZWMsIDB4MDJlMzZmZTgsIDB4ZmEyZWNmZWEsIDB4ZjZjNGVmMWIsCi0JMHg1YTNmNjJmNywgMHhhMmZkOWZhMiwgMHg2NzdiYmQ3ZSwgMHg1NDNmYmUzNiwgMHhlYmVlMDhjZiwgMHhiMWIyZGE3MywKLQkweGJkMWY3ZmJmLCAweDEzZjE5NWVjLCAweGJhNDc3ZWU5LCAweDE3Y2FjYTJmLCAweDY2Y2I5ZmQ3LCAweGU2Y2JiMDQxLAotCTB4NDE2MDJiOWUsIDB4ZDM5M2M3YTAsIDB4Zjk0MmFlZWIsIDB4ZDFiZmQzNTcsIDB4YTBmZDA0ZWMsIDB4YTI1NWQ2MTQsCi0JMHhiN2E2ZjBiZSwgMHgxZjQxM2IzNCwgMHg5ZDAxYjA2YywgMHhhNTlmNTRiYywgMHhjYzcwMDk1ZCwgMHhiMTgxZmFlNCwKLQkweGE0MzJlNjk2LCAweGM2MmJiMDNiLCAweGFlOGZlMWUzLCAweGZhODIzOTliLCAweDdlZmUxYWUzLCAweGQ3OTE2MGU2LAotCTB4ZjdlM2VkMDAsIDB4ZWQwYjMxYmQsIDB4OTE4YTZhYjIsIDB4NjZlNmI2MzAsIDB4YTQ3OWY3NDYsIDB4Y2UyYTM3YjIsCi0JMHhjMWE4YjNhNSwgMHhiYTYxZmJhZSwgMHg0MmE3ZTQ5ZiwgMHg0YzNlZDA4OSwgMHhiZDBmMzljNSwgMHg1Y2ZlZmNiZiwKLQkweGZkODg3M2E2LCAweGZkZThkM2ZiLCAweDdlNzRhYmUxLCAweDY3OWM1MjBhLCAweGRmMjI3M2NkLCAweDg4MWMxNWMzLAotCTB4ZDc2M2JlZWQsIDB4YjhmNjBmZTcsIDB4NTdkNWYxMTMsIDB4Y2MzZTI4OGYsIDB4ZmZlN2QwNDMsIDB4NDlmZmNkMjgsCi0JMHhlZjFlZjEzNSwgMHhmN2Q4MWNmNSwgMHg3ZmQxMDU5ZSwgMHhlYTI2OTIzZSwgMHhiNzkyMjc5MSwgMHgyZmI0YjM0ZiwKLQkweDM0Y2ZlYmQyLCAweDFmZDY5Y2NmLCAweDEyYjhlZjllLCAweDU3YjQyNzc1LCAweGVhZmEzYmNlLCAweDliMDZkZjA4LAotCTB4N2QyY2JmYTUsIDB4ZmM2OWU3ZmMsIDB4YjQ1OTQyYWEsIDB4NTA1MmY3ZGYsIDB4NzIzYmQwMzEsIDB4YWJlZjE5YTgsCi0JMHg3OGVmNDU0ZCwgMHg5YjliMmZkYSwgMHhhZTIzZmJlMCwgMHg1ZmFkMTk1MCwgMHhiZjVhMzMzNywgMHgwNjAyZWU1MCwKLQkweGUzNGYxODNkLCAweGI5YzU1NWZlLCAweDI0N2EyNjUxLCAweDdhNjI1MGU4LCAweGQyZTQxMjdlLCAweDdjYmI0ZmI4LAotCTB4ZmU3NDVkYzcsIDB4ZTdlNjllMjQsIDB4M2YwOGIwZmQsIDB4YjE2OGY1NTcsIDB4ZmZmNjdmNjksIDB4ZTE2OWYxYzMsCi0JMHhjNzAxNGIyOCwgMHgxYzMzYmZjYywgMHgzZmU0OWE1NywgMHhkMzY4YzcwMSwgMHgzODdlZmZmMywgMHg2MzgwYTQ2NiwKLQkweDFjMTUzZmY2LCAweDJmNDU3YjU2LCAweDJiZGEyZmZmLCAweGNhYmRhMzU3LCAweDlkNmM0MWUzLCAweGY3ZmRjZThkLAotCTB4ZTUyYTJhNjQsIDB4Yzk5MzY5ZWYsIDB4ZTE5NTIwNGUsIDB4ZGY2OGVlYTcsIDB4Y2Q3NzlmMmYsIDB4OGIxYzdiZmMsCi0JMHg2MTVmOWRiMSwgMHhkNDc4Y2EyZCwgMHgxMTY3MTE1NywgMHg4NTdmODdlZSwgMHgwZmNmMDNmNywgMHg4NjgzYTAyYiwKLQkweDFmNjkzYTY0LCAweDU0MzRiZmRiLCAweGZlMDVmYjg1LCAweDU0MzVlNTg1LCAweDU0NmVlYjdhLCAweDU4N2E1ZjcwLAotCTB4ZWZiNDM4ZWYsIDB4NGZkOTZiMzYsIDB4ZGU5MzMzMzcsIDB4MmZiYWQwOGIsIDB4YjZiYjIyYWQsIDB4OWIyNzliZTMsCi0JMHg2MDc4ZGY3MSwgMHg2OGMzZGQ1YSwgMHg5MzkxNGIwNywgMHgyNGE3ODdjZCwgMHhkNmY1Y2Y3YiwgMHhkMTRmZDMyZiwKLQkweGNlOWQxNGJhLCAweDI5M2Y0MmFlLCAweDBlYzY4YWVhLCAweGI1OWEzZDIwLCAweGYwYTNkMjAwLCAweDIyOTZkMTliLAotCTB4ZGFmNzJiYTgsIDB4YWYwMDBkMDIsIDB4YmVkZDE5OTIsIDB4MWU1N2UwMDUsIDB4NGQ3NjRlMTgsIDB4YjYxZmY1MTQsCi0JMHg2ZTg5NDA3ZiwgMHhmYTlkZmNjMSwgMHgxYmI3YzUwMCwgMHhhNWI0N2Q4NSwgMHhmMzE3YWU2OSwgMHgzMDk5ZWQ5OCwKLQkweDdhZTUyMDRiLCAweGQwOTdkZDdiLCAweDc1MzRkNzVlLCAweGFlMGE3M2JkLCAweDAxOTY4MTA3LCAweDAxZjc1ZTVlLAotCTB4YjExNjRmNWMsIDB4NzhhNjY3MjIsIDB4YjQ2ZmViMGYsIDB4MWFmMjBkODEsIDB4NmZlOTdlZWEsIDB4YmFiNzlmMzIsCi0JMHhkNzBkMzgzZSwgMHg4Yzk1ZDVmOSwgMHhmNzA4N2Y3ZiwgMHhkMmNjOWU4OSwgMHhmYmRmYzJmMSwgMHg0ZjVjNzUwZCwKLQkweDdkNDQ4Njk0LCAweGViN2JjYzI2LCAweGY3ZGY1YzYzLCAweGQxZWJhYmE2LCAweDQ0Zjk4N2RlLCAweGMzMWI4ZWM4LAotCTB4NjMwZTkzZTcsIDB4ZjRmZTAwN2IsIDB4YmViNDQ1NzEsIDB4ZjE3ZDYxNDYsIDB4MGE3MWZiZTAsIDB4ZjdkMmY3OWQsCi0JMHg2YzYzOWM4MywgMHhlZDg0MWZiNCwgMHhjMmVhN2VlOSwgMHg3NDJmZGEyMiwgMHgzODgxNjNjZSwgMHg2OWU3MDNlNiwKLQkweDA5NTE3ZjdjLCAweDNiM2NjNGNlLCAweDA0YmYxZjc3LCAweDhhYTZjZTI5LCAweGEyNmQxMmZkLCAweGFkMjA1ZjM5LAotCTB4OTliNDViZTksIDB4ZmNkYTM2OWUsIDB4NWNjYzM5ZGMsIDB4OWRjMGIwNzcsIDB4NjBlYzhmNzQsIDB4MjY4MWJlNGIsCi0JMHhiMDA2ODdmNiwgMHgxNDU3ZTg0MSwgMHg2YzM2MjJkYiwgMHhjYTg1ZGEwNywgMHg3NmRmNzg1MSwgMHhlYzgxMWUzMSwKLQkweDBjNThmYWE0LCAweDMxZTMxNjkxLCAweDBjMWQzZjJiLCAweDMyODJjMDliLCAweDY0ODZhMzhmLCAweDY5OGUzYmY0LAotCTB4MDc5NDdjZTEsIDB4NjZlMjI2OWYsIDB4OGRiZjc4ODMsIDB4MzZmZjYxYTEsIDB4OGZmMTRmY2IsIDB4ZjVlZmI0N2MsCi0JMHhiMzc5YzZmYSwgMHg0YTkxZmUyOSwgMHg4ODlhMjJiZSwgMHhlYzM2ZGVlNywgMHhjZTlhZjdhMiwgMHgxOTEwMDczOCwKLQkweGM2OGU2ZmY0LCAweDZmNmI4MWYzLCAweGQ3NzlmN2UyLCAweDk0N2VlMWVlLCAweGU4YjI3ZWZlLCAweDljNDUzNmI3LAotCTB4MzI3YWU0MTMsIDB4ZDYzZGY5YzIsIDB4NDg1ZWRiMzksIDB4MGU3Y2FjZjcsIDB4NzVmMzU2ZTksIDB4NmI0ZmMzMWIsCi0JMHhkZmI5YzdlMiwgMHg1M2I3YjE2NiwgMHgxNThkYTFlNSwgMHg1ZjlmNGRmZSwgMHhmMjE4ZmMyMywgMHhjMmNlOTAyZCwKLQkweGQyZWE1OTdmLCAweDRmYmU2ZWU5LCAweGEyNDdiZjQyLCAweDRmNGRjODQ3LCAweGE4YzQ0YWI5LCAweGVhMDk4MzQ1LAotCTB4ZTk4NTM3MzksIDB4MzE3MjgyMWUsIDB4NjU0ZGYyOWYsIDB4MmMxZmU4YjksIDB4ODIyNWZmZGQsIDB4NzljNmQ5NzMsCi0JMHg1ZTRiZGUyYSwgMHhlMTMxNzFiZSwgMHg1MmViYzc0NSwgMHhhN2YwN2Y4YiwgMHg4ZDE3MDlkNiwgMHhiNGY2ZTlhNywKLQkweGZlZTgxZmVlLCAweDQ4NGZkNTgwLCAweDQ3ZTdmZGY1LCAweGNjM2EyN2VlLCAweDNlZDE5NWY2LCAweDNjMWFmZmVmLAotCTB4ZTA3NTg2Y2YsIDB4NjdkZTIwYjYsIDB4NDczZmZiYTUsIDB4Zjk4ZWVjZWMsIDB4NzM2NTVjZjgsIDB4MmVjM2Y5ZjAsCi0JMHg1NDU2MGY3ZSwgMHhkODc1ODNkYywgMHhkZjg1OWM1ZiwgMHg3ZjNlMjljZCwgMHgzYjJmOTYyNSwgMHhlZGVhMWE2MywKLQkweDdhM2UzZjk3LCAweDRhMGZmOTAzLCAweDhkM2NjMzRjLCAweGZmZjcwYTMzLCAweGU3NjMzYWY0LCAweDBiZjM4YTY0LAotCTB4N2VlZjVmYmMsIDB4Yjg2N2VlOTUsIDB4NzRmN2YwYmUsIDB4ZmRjNmJkM2UsIDB4M2Y2MzlkMmEsIDB4M2NhNzY2ZDMsCi0JMHhiMTVkZWJiYiwgMHgxZGZkZTM2YywgMHhjZGVlMTdkNywgMHg3NDdlMThiZSwgMHg4MDg4ZTFmZiwgMHg3YmQxNzBmNywKLQkweDU3MWE2MTA1LCAweGI3MDQ3M2U0LCAweDUzZDIxNzRhLCAweGU3Y2Q2ZjdmLCAweDNlOThlY2Q4LCAweGE2NjllNTEzLAotCTB4MmZmOWU5MjYsIDB4Y2Q5N2M4OGQsIDB4ZmM5Mzg3ZjMsIDB4ZTg5YmNmNjQsIDB4ZjM5YmZkZTQsIDB4Yzc5MWIyNGQsCi0JMHg0N2NmZWVhZSwgMHhlZjU5ZmYzYSwgMHhmMTIzNTkyNSwgMHhlMGE5ZWY3MywgMHgxOWI0MDVhYSwgMHgzZGM0ZDFkNywKLQkweGVmM2QyYTI1LCAweDBlODZmMTE2LCAweDU0ZjZmYjFmLCAweGFjNzk5NzkwLCAweDc1ZmI0ZWNlLCAweGZkMTc3ZWUyLAotCTB4NDE3OTk3NWUsIDB4MjI0MmZkY2IsIDB4ZDYyNDJhZmYsIDB4NWU0NDM3YzMsIDB4YTdlNjNjZDUsIDB4Mzc2ODE3ZWYsCi0JMHg3NWJmNTFkOSwgMHg2ZTYwZmI4OCwgMHhmMWJiNjE2MiwgMHg0MjVlYTY3YywgMHhiNmJkMjZiZiwgMHg3ZWI5OGU2MCwKLQkweGI3NWNjODczLCAweGU3YThhM2RlLCAweGRlYjRmY2NkLCAweDg5ZWYxNTNmLCAweDk5OWRmYmQzLCAweGQzZWMzZjQyLAotCTB4YjAzYzVkM2UsIDB4Njc1MDdlMmYsIDB4NzFlODFmOGUsIDB4NDNjYzFhYmYsIDB4MWUxOGZkYTYsIDB4ZTRlNTliZjcsCi0JMHhiYjhmNGZlMywgMHg1NmEzN2Y2OCwgMHgxNmUzMzc1MywgMHhjNWIzZWEwYywgMHhjNjk2N2NmMCwgMHg4YmM2MGRmNSwKLQkweDU5YTI5ZWYwLCAweDZmMWY3ZThhLCAweDgwZTdiZjU0LCAweGY5MDljYmJlLCAweDBkZGM2MzM2LCAweDVlZTkzMGYzLAotCTB4ZGYxZTcwYWIsIDB4YTA3MjExNTcsIDB4MGVjZTE5YzcsIDB4NWU2NDY3ZjMsIDB4NGRiNWJmODQsIDB4YmE5ZWU5YjIsCi0JMHgxM2I4OTVmYiwgMHgwMGZlZTBmOSwgMHhmMDRhYzNjZiwgMHg2ZjE0ZDQ3MSwgMHg0OWE5MzZkNSwgMHhlYmViYjdlZiwKLQkweDllMGFmNDA3LCAweDNlZTA3MjRmLCAweDAxZjdkMDJmLCAweGM2MzVlODI1LCAweDg4N2IzNDIzLCAweGY0Zjc3NmVhLAotCTB4ZjJmMjNmMGUsIDB4ZTM2NjFiMDMsIDB4OTg4ZDEwNTUsIDB4Y2E3NjBjMWYsIDB4Njk1N2RhM2IsIDB4MDNkYjc2N2QsCi0JMHg2MjFlZjE4NywgMHhjN2U2ZGJiNywgMHhiMzQxYjhmNSwgMHhhMzU3YmVkMSwgMHhlZmViNDljZiwgMHg4YmRhYTk3YSwKLQkweGViZjdhNGZjLCAweGFlMDg1NGVlLCAweDA2NTE1YWIzLCAweGFiZmYwOGJiLCAweGRhMzM0ZmUwLCAweDg3ZGYzMWFmLAotCTB4OWUzN2RmZjUsIDB4ZGRmYWVkNDYsIDB4MGE3MDc1YmYsIDB4MTMxZDU5YzUsIDB4MTdiYzAxNmQsIDB4YjFhYzFkNWMsCi0JMHhjZmM5MjQzZiwgMHg5MzZmMWJlYywgMHg1NDlmYjQ5MiwgMHg3NzQ5NGZmOCwgMHhmNTA3YTc3YiwgMHg3Yzk2Yjc0MywKLQkweDJkYzhiYTNmLCAweDNmYzJmYjg5LCAweGIyMmMzY2E1LCAweDVmMzNjM2M0LCAweGVmYzcxZTFmLCAweDhhMWJjZWE1LAotCTB4OGEzZTQ5MGIsIDB4MmI2ZjIwZGMsIDB4Y2NmNTlkYzcsIDB4ZTQ3YzkzZjAsIDB4MmUxYzdjZjIsIDB4YWJkYThkYjcsCi0JMHg2YzM3OWU0ZSwgMHgxNTJkYTdiZSwgMHg0OTc4ZWEzZiwgMHhjOGU1MDc4NSwgMHgzN2U3OGM1ZCwgMHg3ZjcxOTk4NiwKLQkweDQzYzUyZGNlLCAweDRlMzJkNzk0LCAweGI4YWZiYTQ5LCAweDUxYTFlMDU2LCAweGNhYmYxMDA5LCAweGI4OWM4NmQ3LAotCTB4NGY2NDM0MGUsIDB4N2ZmZWUyNzcsIDB4MjhjZmUyYjMsIDB4ODhmMGZiNDQsIDB4ZDY2ZTMwY2MsIDB4OGRjYjM1ZTQsCi0JMHhmYjg4YjY1ZSwgMHg2ZGJhZTc0NSwgMHg3NTU5ZWY0OSwgMHhlZWZmOTJkYSwgMHhiZTZlNWRjZSwgMHg5ZmVjYjQ0ZSwKLQkweDUyZGVlNzQyLCAweGQ0NjgwOWYxLCAweGE1YTVkOTEwLCAweGYzZWYxNzhhLCAweDVlMWNlZDk2LCAweDA0ZmM4YTU3LAotCTB4ZmM1NGRmYmQsIDB4MTc3ZWVmNzEsIDB4NjE5OTNkZmYsIDB4NjU5ZjNhNGUsIDB4OWM0OWFmMWQsIDB4NzgwMjZiYzMsCi0JMHgxYTZkY2VkMCwgMHg2Yzc4NDFkYywgMHhkMTc4YTg5YSwgMHhkM2Y5NzY4ZSwgMHg1ZWQwZDM5OCwgMHhlZjQ4OWNjOSwKLQkweDc4ZDk2YWNmLCAweGE1MzU5MDI2LCAweDRmMWQzYmUwLCAweDlmNmRiOWQ3LCAweDE2YzJmZjhkLCAweDBkZjljYmZlLAotCTB4ZmMwZGNiYzUsIDB4ZmYxOTNhYjcsIDB4OTgzYzg3NWQsIDB4ZGUzN2UxYzMsIDB4ZjI2NGE5YWIsIDB4YmMyYjNmZmQsCi0JMHhkZTNlN2U3YSwgMHg5ZmNjNmU4NywgMHg4NDVmMDUyYSwgMHgxYzhlOGRjNywgMHhlYzBjM2U5YSwgMHgzMDNhYmVkZCwKLQkweDg2ZDc4YzM4LCAweDczZmI4ZTdhLCAweGQxMzNhNzcxLCAweDY0N2RkMWJlLCAweDc1NDI5Mzc2LCAweGRmMDdkZjNhLAotCTB4NmNmN2YxMDUsIDB4MzlmZGM0ZGEsIDB4YzFmM2E4MzUsIDB4NDViZWFhOGYsIDB4OWY1ODVlNjMsIDB4YmIyY2NhZWYsCi0JMHhkYTUxZTcxNywgMHhhYjlmODA3MSwgMHhmOWExY2I2OSwgMHhhZGVmOGI1NywgMHg5YzNkYzZmMCwgMHgyZjFlZTM5ZiwKLQkweDgyYzcxOTk1LCAweDc3ZGZjMDNmLCAweGYzNDhlYjY4LCAweDJkYjcxYzYzLCAweGQ2MzlkYjhiLCAweGY1YmJjZWVmLAotCTB4YjE1Njg3M2MsIDB4ZmI0OWQxZGYsIDB4ZjgzMzM5MTIsIDB4M2JiYmQ0N2EsIDB4ZmVhM2ZjOWQsIDB4ZjdlMDY5ZjgsCi0JMHg4ZGVjNTg2OSwgMHg5NDM2N2JiZSwgMHhkNTFkZDkzOCwgMHhjN2QwZWVjMiwgMHg4MmM0NWQyZiwgMHgyZjRiYmJmOCwKLQkweDI3MTZiMWE1LCAweDg0M2I4N2Q4LCAweDJkZjYzMjFjLCAweDc4MGE1ZmIxLCAweDdjNmZiODA0LCAweDNmZWQxNDcxLAotCTB4MDRiZGZkZTksIDB4Y2ZiNjEyY2IsIDB4OTEyY2VkY2QsIDB4M2ZjMGNmZTQsIDB4NmZiYTY2MzEsIDB4MzlkOWM2YWQsCi0JMHhiZTQ3ZjUxYywgMHg0NmVkZGUxYywgMHg2NzU4ZTMzZiwgMHg1ZWRiZDYyZSwgMHhlMGY2NGQzZCwgMHg3M2YwZjBhNSwKLQkweDUxYzJiZjgxLCAweDU3MWU3ZGJhLCAweDM1ZDY3MThkLCAweGY0NWQ5NWNmLCAweGM2MzU1ZDdjLCAweDUwZmUwYzQzLAotCTB4ZTliMzZmMDIsIDB4YTE3ZWJmNzksIDB4MWZlOGJmM2YsIDB4OGQzOTJiZTMsIDB4YTA5YWU5YzksIDB4NGM4YjNlNGYsCi0JMHgwYTdkMThiOCwgMHgyNWQyM2RlOCwgMHgxZmQzOWEzYSwgMHhkZTYwZjlmNywgMHg2MDdmZDc2NCwgMHgwOWVmMjdkMSwKLQkweDlmNGZmZDdhLCAweGFlMjYzNjZmLCAweDQwZTUzZjAxLCAweGYxODhlNzg5LCAweDlmYmM1YmRlLCAweDZmYzc5NGY3LAotCTB4MTViMjdmNWEsIDB4Y2IzNTUzZjYsIDB4MmM2OTg3YzAsIDB4OGRmYTg0ZTIsIDB4ZDE2N2NlOGUsIDB4ZmFlYmQzZmUsCi0JMHhjN2MxMWJmYiwgMHgzOWZkOGM5YSwgMHhmMmU5MWNiOSwgMHhiOTI4YmQ1YiwgMHhlZGNiN2VkYywgMHgzYzBlZmMyMSwKLQkweGJlZTBmNzE2LCAweGZjNjI4YmM3LCAweGU4MWZkOGI2LCAweDc2YjZiM2JlLCAweDNkNGZlMTk5LCAweDk2MTQ1YzBjLAotCTB4NGU4MjVhYzMsIDB4ZWJlMWZiZmQsIDB4NjBmZjJlOGYsIDB4MGI3MjhlNGUsIDB4NGEzOTQ3ZjksIDB4NmJmZGNiNWYsCi0JMHhkZmU4Y2Y1ZCwgMHhjZmI0NzkxNSwgMHhlZThmMWY2NiwgMHhjOGFjNGU3NywgMHg3NTcyNDM5MywgMHgwNWY0NDMwOCwKLQkweDdiYmRmOTZiLCAweGEyZmYwYjZmLCAweGQzOWZkYzVhLCAweDE4YzdkZmE1LCAweGRlMzM2OTFjLCAweDVhNzZmNWJiLAotCTB4ODdmZDE0NDEsIDB4ZTVmNzg3YjcsIDB4ZWQxYWU2MDksIDB4ZjA1NzZhYWYsIDB4MWJiZWYwZGYsIDB4N2NhNjU0NzYsCi0JMHhjMWJjMGZkNSwgMHg5YTJmZWUwYywgMHg3MTJlYTdmZCwgMHgzZmVlOGVhZiwgMHhmZmRmOGIzNSwgMHg3ZjM5ODM2MiwKLQkweDFkZDI0YjM3LCAweDkxZmZiMGYzLCAweDcyYWY3NDlkLCAweGE3NWYyZTZlLCAweGNjN2Y3M2Y1LCAweGY2NDI1OWQ3LAotCTB4NTRhYmUwYjcsIDB4MGYzOWY3N2MsIDB4ODNkNDBmOTcsIDB4YWQ3Y2E0OTEsIDB4MGRiZjllOWEsIDB4NzBjNDYwZWIsCi0JMHg1M2NlZTg0ZSwgMHhjZjFjZThjMywgMHg3OGEwMTYxMiwgMHg3NDk2OTJlNiwgMHhiZGUwMzExNiwgMHhmOWU0ZjFlZCwKLQkweGJlODQ4YjM1LCAweDRlZjcxMzZmLCAweDVlN2NkMWIzLCAweGYzZTdiZTA5LCAweDFjOTc1YjY4LCAweGJlMGM5ZWVlLAotCTB4ZmI4OWI3MGUsIDB4NjA5NGRiYzUsIDB4ZDUyOWUyM2EsIDB4MDc4ZmExM2EsIDB4M2NhNzRiMDQsIDB4NmYwN2YzODcsCi0JMHhlNmZkNzFhMCwgMHhmYTI1N2Y3MSwgMHhiMjZmZjE3ZCwgMHhjMDAzN2RmOCwgMHhkODI3ZDBhMywgMHg5YjFlMWJmZSwKLQkweGUyYmViZTQ5LCAweGIzZmFhY2Y5LCAweDI0ZmViNGNjLCAweDllOTMzZWYwLCAweDkyN2Q3NjdmLCAweDkyN2QwOTc5LAotCTB4ZjI1MWVmNGQsIDB4M2E3OGNlZDAsIDB4N2I3NWVmYzYsIDB4Y2U2ZGIwZmEsIDB4ZGI3NDI0OTYsIDB4YWFmNGU0MjQsCi0JMHgzZmVlODUxYywgMHg3NmU3MTUxYiwgMHhiOTc2YWE0MCwgMHg2MzllZTI1OSwgMHg3YzJiNDc4MSwgMHhmOWM5YzVkOSwKLQkweGZlMGNhNWUzLCAweDdlNzRmNTdkLCAweDFiZGUzMzRmLCAweGIyODVmMzhmLCAweDc1ZmQwMDIwLCAweGY0MjJkNzRkLAotCTB4NmZlMjVmZmMsIDB4N2FiNDljNjIsIDB4YmY4ZmMzYTcsIDB4ZDNiNWQ3Y2YsIDB4YTI3YTgxNTUsIDB4NjJhM2E3NmIsCi0JMHg3ZTlmZDY4YiwgMHgzYjY2M2NiYiwgMHg0Y2NmOTlmNywgMHhmNThjN2ZiZiwgMHg3MDUxNzRhMCwgMHg1ZmQxY2ZjMiwKLQkweDNlZTk5NzY4LCAweDkyN2Y2YjQ5LCAweGVjZjM0ZGM3LCAweGVjMjllN2QzLCAweGI5YjlhZmIwLCAweGU3NGVjZDNlLAotCTB4ZjExN2IxNzQsIDB4NTcyYWQ0NzUsIDB4MWQzYzg1NDcsIDB4MmQ5MGYyMTUsIDB4NzU4NzZiZWUsIDB4OTJlYjg5YzksCi0JMHgwMjE3ZWVkZSwgMHgyY2MzOTNkZiwgMHhlN2MxN2RlOSwgMHhiMTJlMDJkZCwgMHg3NmJjM2MyZSwgMHgwNGMzZmIwNiwKLQkweDA4Y2U3ZGZjLCAweDdlZGExOWM1LCAweDdlYzAyZjEzLCAweGRjNzhjYWJiLCAweDE2ZmRmYWMwLCAweDk5OGM2N2MxLAotCTB4MzM0OWVhZWQsIDB4YjllNjEyZmQsIDB4YzVlNDk4YjAsIDB4ZmRiZDdjN2QsIDB4YjdiZjE4YTQsIDB4ZDNiOWZmZjgsCi0JMHhkYmM1ZWNmYiwgMHg4MDdiYmZjOCwgMHhmNDlhMmVmZiwgMHg4MWViOGE1MywgMHg2MWI0MTcwZCwgMHhjMThmZDE1ZSwKLQkweDVmZjgzMzhlLCAweDFkZThiMmJmLCAweDBiYWYzYzJiLCAweGVmYzRkYTc4LCAweGViOGQzMjg3LCAweGY1NWQyYjYxLAotCTB4Nzc5ZjRjNzUsIDB4MWNiMzAwZjYsIDB4ZDdmZjgyYzgsIDB4OTY0NzMyOGEsIDB4Yjk3NDNjNjgsIDB4N2Q3YzU5MWMsCi0JMHg1Y2M0ZjllNiwgMHg0OWQyZTI0ZiwgMHgxZTU4NTljZiwgMHhiY2FmNzAwMywgMHg5MGU2ZmM0MywgMHg5NWRjZWY4OCwKLQkweDMxZWYzZTE5LCAweGU5ZGEzZGYwLCAweGJiMDk3ZWI0LCAweDZmZGM0ZGJjLCAweGE4ODlkYmE5LCAweDQ2NmJjNzRmLAotCTB4MGUwMjIzYjgsIDB4NGFkN2Q3MWIsIDB4ZjMwZDdkNzIsIDB4ZTJhN2JmMTAsIDB4ZjYxMjdlYTYsIDB4MjYyYmI3MDYsCi0JMHgxNjZkZmMwYSwgMHhiMjVmNTFlNywgMHgzZmIyMjZiMSwgMHgzOTc0OWUwNCwgMHg5NjYxOTUxZCwgMHg3ZjhjYTJkMywKLQkweGFjZGQzOTBlLCAweGE0NzI3Y2YyLCAweDc4N2QzMjVmLCAweDk0MjdlZDFlLCAweDcxYzE2Mzg3LCAweDQ1NzJjNzk4LAotCTB4NWZhMDBiNDgsIDB4ZmYzMWRhNWEsIDB4MGNmMWU2MDAsIDB4OTQzZjgzZGYsIDB4ZTFlMzkwOTMsIDB4YmZiMTlmODIsCi0JMHgyZGZjMDY0NSwgMHhmMDliNzBjOCwgMHg3ZjhjZjlmNywgMHhmODc3YmIwZSwgMHhkZjM3ZDYzMSwgMHg3ZDdhMGNkYiwKLQkweGU1YzY4NjU1LCAweDk0MmZmYzAwLCAweDlhN2Y4YTgzLCAweGUwMGU4NmY5LCAweGEwNmFhZTM5LCAweDlkMGNhYTNiLAotCTB4OGI2MmRhM2YsIDB4M2VkMGI5ZDcsIDB4NjgwMmM2M2UsIDB4MTZjNzc3NWYsIDB4N2YwMGM2ZGIsIDB4ZjZlMjZmNzQsCi0JMHhkZjllOWY2MywgMHg3YTA1ZjFjOCwgMHhmOTdhODYzOSwgMHhmNGMxNjM4YSwgMHgyNzVmNTBkMSwgMHg0NThhZTNmOCwKLQkweDE0ZTdkZjhjLCAweGNmZDE0NzczLCAweGNlNDRmNWQ2LCAweDcwMzNiZDRkLCAweDdhNjU3N2RmLCAweGYwY2I4MzVkLAotCTB4M2I3ZGFmYmMsIDB4ZTg0YzJmYjQsIDB4MzdkNDZhOWIsIDB4N2RmNmQ0ZmUsIDB4OGQzYTQ2NmIsIDB4ZTIwOWViODcsCi0JMHg3MzNhNTY2NSwgMHg5NzllMDBiYSwgMHhlZTMyMjMwYSwgMHg0NTc0YmU2YiwgMHhlN2JjNzhlMSwgMHg3ODVhNTBmZCwKLQkweDdlZjg2YWY0LCAweDBlM2UxY2QyLCAweGFmNDQ3NzZiLCAweGQyZmYxMjQ4LCAweDg4YWU3NWY1LCAweDdjOGFlNTRmLAotCTB4NWUzNGRjZWYsIDB4NDVmNDJjN2UsIDB4YzFmMzk3ODMsIDB4OWViY2JkYWYsIDB4Y2YxZTQ5ZWIsIDB4MTdlZjExZWEsCi0JMHhkY2VmNWNjOCwgMHgyZWRjOTY1NywgMHhjNjdjNjU4OSwgMHhiMjQwNjNmOCwgMHgxOTYzZTNjNiwgMHg2ZjllZTIzOSwKLQkweGViNWY0MjViLCAweDdjNDI3M2ZjLCAweDJlZGY4ZmE3LCAweDljZmNiNWU2LCAweGU1OWZlMjY0LCAweGNkZjExZDRhLAotCTB4M2QwYTczZjIsIDB4MTUyMmU1ZDcsIDB4NzlmYmU5ZmYsIDB4NzhlMTFkOWIsIDB4YmU3YmQ0MDYsIDB4YzYwOTYxZmUsCi0JMHhlOWVmMGEwZCwgMHhmODQ4ZmJlMiwgMHg1MjUzNDA3YiwgMHgxZWJlODdjYiwgMHgzZDA2ZjRlOCwgMHgwZGYxODZkZiwKLQkweDI3MTNmM2QwLCAweDE4ZjQzYWQzLCAweDljODU5NzVmLCAweDFmZjRlYzFhLCAweGI2NTllZmUwLCAweGQ0NTU1Yzc1LAotCTB4ZGY2YmEwNjAsIDB4ZmVlMDE5N2EsIDB4ZDk1ZDc1OGMsIDB4NTdjNGM5ODAsIDB4ODlkNzllYTcsIDB4YTNlZjJjY2YsCi0JMHgyNWUxZDg1MiwgMHhiYzNiNTc3ZiwgMHhjOTNjNjNiNCwgMHg1NzgxMTJlZCwgMHhjN2E2ZGUzZCwgMHg1MDdiMThiNSwKLQkweDEzZjczMWY4LCAweGU0Y2QyNzdlLCAweGRmZjgwZGYyLCAweDlhM2ZmMDIxLCAweDdkYmJmZmUzLCAweGVjOTViZmY4LAotCTB4MmYyZTU2ODQsIDB4YTUyYjlkYjksIDB4ZmEyZjkyNjIsIDB4YTRkZGZmNGUsIDB4NTJhZmQzYzIsIDB4MmY3OGU3N2UsCi0JMHgxM2ZmZTdmNywgMHhjOTU1NTA4NCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGQ1ZmYwMCwKLQkweGQ1ZDQ3Yzc5LCAweGNlZmRmOGI1LCAweDMzMjRiNjc3LCAweDVmNjRjY2M5LCAweDI1ODQ5MzA4LCAweDIxMjYxMjZhLAotCTB4MjY1MDQxMDksIDB4YzUxMTYxMDksIDB4ZmIwOTQwNDksIDB4NTE1OTgzYjAsIDB4MmZiNTY5NmMsIDB4NGE0NDQxMDMsCi0JMHg1MDVkOGJkZiwgMHhkMTAxZGE5NCwgMHgxMDFhYzU1YSwgMHg4M2IwNjAzNCwgMHg2Nzk1NjIyYywgMHgwNWIwNTRhNCwKLQkweDIxMDhlZTNiLCAweGYxNmI0M2M5LCAweDNkZGU1YTU3LCAweDk5OWJkZWU3LCAweDAwNjY3N2VmLCAweDdlN2ViZTdkLAotCTB4ZGViOGZmMGYsIDB4ZGVmN2NiYjksIDB4ZmIzZGNlNzMsIDB4M2FiM2M5YmQsIDB4MjEwOTRiMjUsIDB4MGI2MmEyMWIsCi0JMHg5OTk0MWM0OCwgMHhjODRiMTI1ZSwgMHhiZDNlMDk4OCwgMHhlOTA4NDRkZCwgMHg5NTI0MjQ0OCwgMHhhNDIzYWVmZSwKLQkweDQ3NWFlYTBiLCAweDI0MjNjOTMyLCAweGJkMzg5ZWFkLCAweGJlZDE5ZWI0LCAweGZhZDJkMjVmLCAweDg2MzdmODY1LAotCTB4Yzk0YWQzMTAsIDB4ZmU5ZTMwYjksIDB4ZDNiNjk0YmUsIDB4M2ExNjZkZGYsIDB4OWVkMDMxMzAsIDB4MTYwOWViY2MsCi0JMHhkMDI1MjEzYiwgMHg4MjBkMjdjZiwgMHg5MzZmMzZmOSwgMHhiNGJlNzRiNCwgMHg2MjkwODk3NiwgMHgyZjEzMzY1YSwKLQkweDRiOGMwYWM5LCAweDk5ZWZiMDczLCAweDAxNjk1ZTFjLCAweGJiNDhkZmVkLCAweGFjODQ5MTkxLCAweDU5ZTc1NGQzLAotCTB4MTQ5OTY4MTIsIDB4YmZhNTY4ZTMsIDB4MDdiYWIwNmQsIDB4NGZlYTdlYzAsIDB4ZGE2NjdjZjksIDB4MmVhOWM0NjUsCi0JMHg3YjhlOWJhZCwgMHhiNGNjZWFjMiwgMHg2M2Y2MDYyNCwgMHgyNDY5MmQ5NywgMHg1Mzk4OTA4NywgMHgzNjZkOWQ2YywKLQkweGZiMDVkNzMyLCAweDE3NGNmZTIzLCAweGM2M2YyNDBjLCAweDE1YjIxMWY1LCAweDkzMjg5YmQ3LCAweGFiNDZjNDIzLAotCTB4MmY3ZTg3ZDAsIDB4ZDZlZTc1NjksIDB4N2Q2MDUyZjUsIDB4NmVlMjM2NDksIDB4NDk0OTZkYTcsIDB4ODRkM2JkYzQsCi0JMHgyMjkxZDdmZCwgMHg3MDQ4ZDdkYSwgMHg4N2FiNDkzZiwgMHgwNTlmNWQ2YywgMHhkZTcxNzlmMywgMHgzNmQ3MWNhYSwKLQkweGY5MmFiZGY4LCAweGZhNTZhMmJhLCAweDlmMDZjZTdiLCAweGI3MWQzZTc2LCAweDAyNjZiMzc3LCAweDJiY2M1M2VjLAotCTB4MDkxNmQxY2EsIDB4OGM3ZGQxYzcsIDB4N2Q4OWZkODAsIDB4OTI4OWZiYTgsIDB4NWJhZTBmMTAsIDB4YjM0NWQzZjQsCi0JMHg1YmY2ODVmZCwgMHg0Y2M2ZjM4NSwgMHg2ZDBkZjA2MCwgMHgyZjZjNzdmZiwgMHgwY2MyNjVmZiwgMHgxYWZkNmY1OCwKLQkweDAxNDgzMTNkLCAweDc1NjEzZmY4LCAweDRkNzAwMmRkLCAweDAxMjJkZjZiLCAweGE2OGMzZTZjLCAweGYwMmMzNDc0LAotCTB4MjlhMzBmZGQsIDB4NzZiMDE1M2QsIDB4ODdmMzg1M2IsIDB4Nzk0NzRhN2EsIDB4YjQ4YTNhMDEsIDB4YjI5NWZhZmUsCi0JMHhhMGYwZTE3MywgMHhlMjNkMWFmYSwgMHgyYzllOGI2OSwgMHg1ZTBiY2Y2ZCwgMHhkZjVjNmFkZiwgMHhjYjA2OGIyMiwKLQkweDJjZDc1NmEzLCAweGM3NjM0ZjgwLCAweGZiYzA3YWMzLCAweGU4MWY2ZGIyLCAweGNlZjg1N2RkLCAweGVlOTFjMmI1LAotCTB4ZTI5Njk1N2YsIDB4YjI1ZGFlYmQsIDB4NGFlOTI4MTgsIDB4ZTgxMzkyZWQsIDB4ZThkNmJlYTAsIDB4NmZkNDc4MDUsCi0JMHhkNjRiNzQ2NywgMHhhMTgzYmRlOCwgMHhhN2MzYmVkZSwgMHhmN2U5ZWRhMSwgMHhmZDMyMWQzYiwgMHgwZWZiNmViOSwKLQkweDdjMTA1MTY5LCAweDEyYmRlYmQzLCAweDU5YTg2YmFjLCAweDFlOWYyYjljLCAweGZlOGE5NWNmLCAweDQ1Nzg1MTBmLAotCTB4MWMzYmJhNTEsIDB4NWE0NjNjNDUsIDB4M2M5Yjk3NzYsIDB4Yjc2Zjg1MTIsIDB4ZmQwZjVkY2UsIDB4MWM2MzUzYmEsCi0JMHhmNWVmZGExZSwgMHg0ODhmZTMxZCwgMHg3NzlhZGNmNCwgMHhhZTUwN2MxYSwgMHgzMTRkNmNkMywgMHhkNzc1ZjZkMiwKLQkweDQxYWQxZGViLCAweGJhZDM2Nzc0LCAweDZiMzhjMTc2LCAweDhhYjFkOTgyLCAweDIwNmVjYTdlLCAweDljMTMxNjQ1LAotCTB4NDdmZTI1NzcsIDB4YzVjZWNmZGMsIDB4YTMyYzRiNmUsIDB4ZTA4YTQyMjMsIDB4MzE2ZTNjNWMsIDB4ODI4OTNkNjMsCi0JMHhmN2QyOGNiYiwgMHhkNzViMWQ2MSwgMHhlMWU4YzI0ZSwgMHg4MzZiOWM1MiwgMHgyM2UzYmYwNSwgMHgzYWRlM2EwZSwKLQkweDNhOTc5ZDgxLCAweDdlODkxZmJhLCAweDJlZjM2ZWFmLCAweDYyMzkyN2RjLCAweDZmYTdiODQzLCAweDc1YmJmMDk3LAotCTB4YjllMGI3ZGIsIDB4NzNiYjNhY2UsIDB4MmZmYTFlYmYsIDB4MjQ1MWE1MjUsIDB4MWI5Y2NlOTgsIDB4ZDVlZmNmODMsCi0JMHg0MjYyMzVmMCwgMHhhZGU4MWViYiwgMHhmMmExZjM4ZSwgMHgzZTkzNmU1ZiwgMHhhZmRmZGEwYSwgMHhhM2MyMzIyZCwKLQkweGZkYjZmMzZlLCAweDY0N2JmNDY5LCAweGI2MGNiMTI5LCAweDEzZmRiZjYzLCAweDA2YjVmN2Q5LCAweDYwN2ZjNDEyLAotCTB4OWQ2Yzc5OWQsIDB4OGZmODgyOGIsIDB4M2UxODdmZDgsIDB4YWY1ODViZjQsIDB4NDFkNzU0ZTksIDB4NDg3Yzg3YzYsCi0JMHg2YWZkNjI4ZiwgMHg3ZTcwNzZiYywgMHgzYzRmNGUzOCwgMHg5M2RlYmJmOCwgMHgxZGYzYTc2YiwgMHhmOWM2OGVjZSwKLQkweDczODA1ZjA0LCAweGE1ZjljMzVjLCAweDYyMTNkNjg2LCAweDVhMGViOWU4LCAweDllNmY1ODhmLCAweDgyZDNhMmI1LAotCTB4Mzg0MmU4NzAsIDB4ZTJkNjZjMzQsIDB4YWVmNGFiZmEsIDB4Y2U4M2NiNDEsIDB4YjlmOWVmYzMsIDB4ZmJkYTZkNzksCi0JMHhmZGZkM2Y3YSwgMHg4M2JmMmZlNywgMHg5MzY4NjlmOCwgMHg0OGNmYzA5YywgMHgzYmZhM2JkYiwgMHhiZmFjMDFmMiwKLQkweDIxMTI0OTkxLCAweGI3ZmIwODkzLCAweDdhM2JmNzcxLCAweGQyN2RmZDNiLCAweDg2YmY4NjJlLCAweDBiYjQzYjVkLAotCTB4Y2NmYTAxNGMsIDB4MWNkYWZiM2EsIDB4NzY4NmIzYTAsIDB4MDA5Mjg5MDMsIDB4NTgyZWVlN2YsIDB4MDU0ZTlhOGYsCi0JMHg4ZGRmMDQzYywgMHgwOTk4Y2Y4NCwgMHgwZjEyOGY4YywgMHhjZjQ4NWYzZCwgMHg3MzFhYWNlZSwgMHg4YTVmNmY4MCwKLQkweDM1M2EzMGQzLCAweDJkYmJkZmIxLCAweDFmYTAxZWFjLCAweDk3NDAwN2Y3LCAweGQ3OGVkMTU1LCAweDE1NTQ1Y2UwLAotCTB4MDI1NjhlNDksIDB4ZmI4NjNjZWIsIDB4NzA2NGE4NDgsIDB4NzU0ZjVlMGMsIDB4OTk3ZTY0N2UsIDB4ODVlNWNmMTgsCi0JMHg2MzU5OWZkNiwgMHg3ZWFmOWMwZSwgMHhmN2M3Y2ZiZSwgMHhmYzk5NWUwMiwgMHg0OWRmYjFmMCwgMHhiMDNmMmJiNiwKLQkweGQyZGUzNTZlLCAweDBmZjYxMmFkLCAweDAxMTc0ZjQzLCAweDI2Yjk2YTdlLCAweGUzZTgyZmQ2LCAweDBhYjU5YmQ3LAotCTB4ZWFiMDYxZjksIDB4NTU4MzNlNzEsIDB4MDhkYmViOGIsIDB4N2U3MmExZjgsIDB4Y2I5ZDhlYTMsIDB4NWU4Y2FiOGQsCi0JMHhjN2QzMWZlNCwgMHg5ZjI4OTExZCwgMHhmYmQwY2YzNiwgMHg5OWE0M2NhMCwgMHg4N2VkMGY1ZiwgMHhkN2Y3ZDhkMiwKLQkweDQzNzczNDY5LCAweDEzNmFkZDdkLCAweDNhN2M0NTY5LCAweGEwNDRkNjhkLCAweDRiYzQ1ODliLCAweDZiZGVhZDdkLAotCTB4ZmNmY2YzYTAsIDB4ZWFiZmM2NDUsIDB4MDEyZjI2M2QsIDB4YmE5ZWU4M2UsIDB4ODQ5MWM2MTAsIDB4ODA1M2M3MjgsCi0JMHhmZDQxZjczNywgMHg3YTUwZTYxZCwgMHg2ZjYzZDNiMiwgMHg2YTRmYmZhNywgMHhlMDRjZTc2NywgMHhhNDUxZjI4MSwKLQkweDA0YmYyMTJiLCAweGY0ZjAwMzVjLCAweGMwOGRjZTJhLCAweDBiMzhhNWM3LCAweDJjZWU1YmU3LCAweDMzZGQ3NzgwLAotCTB4NzM4ZmRlNTEsIDB4MTMyZWI3ZDksIDB4YTJhYjRiYTAsIDB4ZWE5MWQ0ZGUsIDB4YTgxOGQ4ZmQsIDB4MDBmZmMxZDcsCi0JMHg1MmE3NmMxZCwgMHg4M2FlOTRhZCwgMHg3NjVkMzNhZiwgMHg2ZWZiMDc1ZiwgMHhlYjBmZmEzMCwgMHg0ZjRiNmEyOCwKLQkweDhlYjllMWY2LCAweDJiNzViNzQ0LCAweDk4ZmI0Y2RmLCAweGE1Nzc0M2VhLCAweDM4YTU4MWJjLCAweGE1NmNiYWFmLAotCTB4NzhlNTJlM2MsIDB4OWJjYmMwMWYsIDB4ZDQxZjhjYWMsIDB4NzllM2I3MTUsIDB4MTliOGZiYWMsIDB4MDI2OWIxY2YsCi0JMHg1M2E2NjdlMywgMHhjODRkN2U0YSwgMHhiMmJlYjg0ZiwgMHhjNTU3YzcwMSwgMHgyOTkzOGZiNCwgMHgyNTdlYWJkYywKLQkweDY0NDk1YTU5LCAweDIyNDRiOTdlLCAweDlmYTc5MDJlLCAweDNiMTAzZTZkLCAweGU5N2JlMDBmLCAweDhkZmI4Y2IyLAotCTB4NmM5ZGZiNjIsIDB4ZmJhOGU3NjUsIDB4YTQ3MDBhMTksIDB4MDkzZDY2ZjcsIDB4OWQ2YmRmYjMsIDB4NGI4ZWY4OGYsCi0JMHgwZTNhZjc4MCwgMHg5NWVkZWVlYiwgMHhmNGExM2YyMywgMHhjZTI2NzllMiwgMHhkY2Y3ZmMwMSwgMHhmODNmMjlmNiwKLQkweDdiYmJhZTg0LCAweDliOTQxOGRiLCAweGE0MmVhZDA5LCAweDI4YzRiZTlmLCAweDNmNGE1NmM3LCAweDIwOTkzMjA5LAotCTB4NmFhZmJjNTEsIDB4OGEzYjEwM2YsIDB4YjlmY2ZiOGUsIDB4OGYyMDQ1NjEsIDB4OWU3NWYxMTcsIDB4MDk1ZTUxN2QsCi0JMHhlYmZkNTk3MCwgMHhmNjg2NmUxNywgMHgwZjE0YWYzYSwgMHg5OWZiYmM3YywgMHhmODEzZmQ1ZiwgMHg0ZDZkZDJmYywKLQkweGQ2OTE0OWEwLCAweGY3YTc3ZWU3LCAweGVmMWE3ZWQzLCAweDMzZmJmNjE2LCAweGY3ZTgxNjcxLCAweGRmMGY5M2Y5LAotCTB4NmQ2ZWYwMGMsIDB4YjNmNmM1NmYsIDB4ZmFjMTZlNGYsIDB4ZTE3ZWJmNmIsIDB4ZjIwN2ZmZDUsIDB4ODBlYjE1ZGUsCi0JMHhkYzVmNjc3ZSwgMHg3N2E5Nzg4ZiwgMHhkZmIwOWQ2YiwgMHg3MWJkNzQ0OCwgMHgyN2M2N2VjNywgMHgzOWMzYWU0MSwKLQkweDRiZmM2NWE4LCAweGRmYTBiNWQwLCAweDc3M2Q3ZmNmLCAweGE4N2NiMDY0LCAweDEyMTk1ZDk3LCAweDM4MzY0ZmY0LAotCTB4NWU1MDkyOWUsIDB4MTQzODljYTAsIDB4NzQ1MWI0NDUsIDB4ZDJkM2FmZmYsIDB4NzkyYWNiNDgsIDB4ZTAxZDdlZjksCi0JMHgzM2YxODczOSwgMHg3OTA5MjFhYSwgMHg3ZjQzMWJlZCwgMHhjYzRjN2RiZiwgMHgyZjNiZDQxNiwgMHhjZjA4MzNkZCwKLQkweDNiYTMwYzRkLCAweGNmOTE4ZjNhLCAweDg4Nzk4NDYzLCAweGYzM2VhMDk2LCAweGE4NzVlNjc2LCAweGNkMjk1MmQ3LAotCTB4Y2UxMjQ5ZmEsIDB4MWJhNmU4NzMsIDB4MTdiOWMyYjYsIDB4NmFmOTg1ZWIsIDB4M2FiZGExZjIsIDB4Zjg4OWU0MDMsCi0JMHhlNzVmMWQ3ZCwgMHhkZjI2NjhiYSwgMHg1MzdlNzFjZSwgMHgwNzVhNjE1NywgMHhhM2U3YjllNSwgMHg4ZDNmMDE2YSwKLQkweDJiMTBmZjdhLCAweGQxOGYyZmMwLCAweDI2NTY0M2YxLCAweDk3ZGJlYTg3LCAweDM4NGQxYWViLCAweDk3NzllNzFlLAotCTB4ZjMyODI5ZjIsIDB4OTRmYTc5ZTksIDB4NmJkYTU3OWUsIDB4ZjBlMWU1ZGIsIDB4M2UzMmRmYmQsIDB4NjBjYTRkMTksCi0JMHg3ZDY2ZDMxZiwgMHg2MmZjMDEyMCwgMHg3NTc1OWFmMiwgMHg1OGU3ZDcwOCwgMHg3MDUyYzUzYiwgMHg3NjBhZTk3YiwKLQkweGZiNzRkNDdlLCAweGNmYzRkNWE0LCAweDY5YjczYjBmLCAweGVjMzNhYWJiLCAweDhlMGNiN2M4LCAweDUzZmE0MWMxLAotCTB4YWI3NzUyZGEsIDB4Y2I3ZWZlOTksIDB4YTY0M2I3MGEsIDB4Y2NmN2I3NzQsIDB4YjRlOTcxYjEsIDB4Njk1Y2ViZmUsCi0JMHgyY2FiZDIzOCwgMHgzMWVjNzkzMSwgMHg1NjFhNzdlMSwgMHhlODhmOTI1NiwgMHhjZmM5ZGZiOSwgMHg2ODg1OTI3NSwKLQkweGUwMGEyYzZmLCAweGI0NGI0YWE5LCAweDFmN2Y4NDI2LCAweDc1ODZiNWYyLCAweDYzNmY1ZTVjLCAweGJlYzYyNGViLAotCTB4MWM2NjI5Y2MsIDB4MTZkMWJhNjcsIDB4NjcxZDA3NTgsIDB4MmZiZDYxMzIsIDB4OTA3Y2NlZjMsIDB4OTQ1YTllOGYsCi0JMHhhZTNkNzY4ZiwgMHg1ZmUwYWNmNywgMHgzYjMwNTNjNCwgMHhhODFmYzAzZiwgMHg3YTA2ZTZkZSwgMHg3YjMzZDI0ZCwKLQkweGI1NjNmODA1LCAweGYyZTZmNDE5LCAweDQwOTJkNjIzLCAweGRhY2QxNDk5LCAweDZkOTI3MGQ1LCAweDNiYWU5ZGI0LAotCTB4N2VjNGU2ZGYsIDB4ODU3ODk5ZTQsIDB4MDdjNDhhZmMsIDB4MzdmZTM5MWIsIDB4NDBjNWZlNGEsIDB4NTEzZDllNjcsCi0JMHhjNmViYTAxNiwgMHgxNDQzZmQ5YiwgMHg1Mzg3MDk3NiwgMHg5ZTliYTcwZiwgMHgwZTVlOGMzZCwgMHhkODFlMzQ2OSwKLQkweDM3YWRhMWRmLCAweDQyOTU2OTZjLCAweGFlNTBmMWU1LCAweDQ4NzVhNzlmLCAweGRhNGJjMDE2LCAweGZlMDUxYWU2LAotCTB4MGFiNzVlYTgsIDB4NWM4NmNhZjQsIDB4ZjdmNTE0YTksIDB4YmZiZmU1OGUsIDB4MjkxYmQ2OGUsIDB4YjhkZWEwZGUsCi0JMHhhYTRmOWY4YiwgMHhjNmZmNDJhNywgMHhmMDg1ZWE4ZSwgMHg4OTg0ZjRiZCwgMHhmZDQyNTkwZSwgMHhhZDNhNWM2OCwKLQkweDEyOTNkNjM3LCAweDA3MWJmZjM4LCAweGUzYTRmNzM4LCAweDk0ZjIyNDNlLCAweGQ1MjllNDFkLCAweDI2OWU0MWFiLAotCTB4ZGUzZWEzZTYsIDB4ZmE4NmRlZTgsIDB4NzNkNWM5MzcsIDB4ZjUxMGI3YjksIDB4OTk5NGM2ZjUsIDB4MjE1ZjM4MGUsCi0JMHgyYWNmNjI3YywgMHhlZDFhZjdkNCwgMHhkYTI4OGVkMSwgMHg3NDg3NTI3ZiwgMHg0Yzc3ZDMzNywgMHg3MjQ3YWQ4NCwKLQkweDc3OTI3ZDQyLCAweDczZDYxNzk0LCAweDk0NDdjMDVlLCAweGYwMzlhZWJhLCAweDA2ZGQ5ZWZkLCAweGFmZWRhMWUyLAotCTB4ZjI4ZjE5ZWYsIDB4Zjk4YmQwNWMsIDB4NzVjYTAzMjUsIDB4ODEyMmQ2OWIsIDB4YzVhZTdlNWUsIDB4NGMxYTNlNDksCi0JMHg5Y2I4MWZjOCwgMHhkYmFjZjAxMSwgMHg3MzgxYTU5ZSwgMHhjM2I3OWU3MiwgMHg5NzEyN2IzZiwgMHhjMzZiYjQ4NywKLQkweDY3ZDIxZjQyLCAweDEzZGJkNzNkLCAweDdiYzJjZTBjLCAweGY0MjdmMDgyLCAweDY0MWQzNTI4LCAweGQzNWUxOGRiLAotCTB4ZTA5NDFmMzYsIDB4NzNmMWFiMTAsIDB4NmJlMjUyY2IsIDB4NjViYmViYTIsIDB4YTYzN2M2YjMsIDB4MTlhYmY1MDAsCi0JMHhlOTU3ZjdjOCwgMHg3NDI5NTZjOSwgMHhjNjM2MjFiZSwgMHg1ZGUyYWEyZiwgMHhhYjI3YzA4NSwgMHhjMTFjOTlhNiwKLQkweGRhMmFhOWZjLCAweGQyMGE4OWE5LCAweDE1NzEwOGYzLCAweDI2NzYzZDgzLCAweGNmZjA4Y2M5LCAweGVhYzNkOWI3LAotCTB4NzlmNmExNjUsIDB4Yjc0ZmRhMTQsIDB4NDgwYTc5YjYsIDB4MTU1ZDZkMzYsIDB4OTJlNzBiNWQsIDB4ZjIxMzYzZjIsCi0JMHgwZjFkMGI0ZCwgMHg1MWQ2ZmRmNiwgMHhiZWZiMzI0ZiwgMHhiMTRkZTcxNSwgMHg4ZWY5ZDg1OSwgMHg4MzM3MTU3NywKLQkweGI1YzcyMDNmLCAweGIzMzFjOTgyLCAweDhlN2VkYzIzLCAweDNlMWU4NTVhLCAweDc0MDM1MGE3LCAweDAwZTRkNTMyLAotCTB4YWZlN2YyYmIsIDB4NmU5MWYzNDgsIDB4YzI2MDU0M2MsIDB4MzhhZjcxNzksIDB4MmJkOTkxMzYsIDB4ZTIzYmEwMGUsCi0JMHhkNWJlYTJkNiwgMHg4NmYyZWNkOCwgMHhjNzQ2MmJhNywgMHgwMmZmNTQ4ZCwgMHgxNWQyOWMzZCwgMHg4M2IxYWRlMiwKLQkweGY3NjExZmM5LCAweGQ2MDg5ZjAzLCAweDEyYjljNTc3LCAweDM1ZjgxNmU3LCAweDM3YTA4ZGQwLCAweGY1YWY2ZTcxLAotCTB4ZjNmMGY2N2MsIDB4MWZmNzQzZDEsIDB4YmRlNjlmNGMsIDB4YWZkNzJlOGMsIDB4ZmI0Mzk3YjIsIDB4MDk2MjJhZmEsCi0JMHg3NmQ1NTdiNiwgMHgxZjBlMWQ5MCwgMHg4YzlmZGJhZCwgMHg4MjNjYzJmMSwgMHhiYWIwNmRjZiwgMHhiZDYwZGE2NiwKLQkweGFiNThkZjViLCAweGQ0YmUwMTI1LCAweDIxYTFmN2I4LCAweDhjY2ZkMjU3LCAweGQxOWYzNjVhLCAweGE2MGRlMzFiLAotCTB4YjcwNTIzMWYsIDB4MGY0YjA4YjksIDB4OTU5OGU3ZjAsIDB4ZjcyM2ZkZTEsIDB4Y2Y0YzRjZGEsIDB4NjVmYWI2ZmIsCi0JMHg3YzA1YTQ5ZSwgMHg1ZjMyZmQwOSwgMHhlMzZiZGY3NiwgMHgwOGE1MjVmYSwgMHhlOTkyYjk5MiwgMHhlYmMwNDk5NywKLQkweDhkNmMxZjgxLCAweDExM2YwMmYxLCAweDdhZjUyNjdlLCAweDA5OWNmY2RjLCAweDIzM2IwYWJjLCAweDdmZjU5NjI5LAotCTB4MzU5YjlmOTgsIDB4YmM2M2RmYmMsIDB4ZjA1ZmIyMGMsIDB4ZWUzNWQ4M2MsIDB4NTkxYzg4MGYsIDB4ZGY3MTg4MGUsCi0JMHg3YzRiZGY5NSwgMHgzNTIzYzg0NywgMHg0MWZhYzBmZCwgMHhhYTdlYzE2ZSwgMHg2YmY3MjJmMywgMHgzOGVkY2ZkYiwKLQkweGUxZWYzZDE1LCAweGUwMTZhYmU3LCAweGJjNjI3YTA4LCAweGU3MDBlZmZiLCAweDE5YzQ3MTU5LCAweGViM2ZmMTRmLAotCTB4MjdhNDA2NzcsIDB4MDQzN2RiOTIsIDB4MmQzYWQwZWMsIDB4ODA2YzE4ZjEsIDB4MWZkNzlkNTcsIDB4NzhhNmI3ODQsCi0JMHg2Y2Q3YmUzNiwgMHgxY2Y0YzhmNCwgMHg2Zjc3OGE1YywgMHgxNTNjNzk4NywgMHgzZDAzZTFjNCwgMHg1Zjk0ODdmNiwKLQkweGJlMjRiOWMwLCAweDRkMjdlMDEyLCAweDcwMGIxZmM0LCAweGRiYmFjNWI0LCAweGFlZTUzZTkxLCAweDNiNTNhODRjLAotCTB4ZjNiZTAwYTYsIDB4OWZiMzBjNDgsIDB4YmQ5MGRlZmEsIDB4MmUzYzI5NDMsIDB4M2VmZmZkMTgsIDB4YzJlN2FlOGEsCi0JMHg4Nzg3MWM4YSwgMHhlZjdhNzNjZSwgMHg5OWZmNzc5ZiwgMHhmYmJmM2VmNiwgMHg3ZWMxMDFiMywgMHhlY2EzNDZhYywKLQkweGVhMDdjNmQyLCAweDZkYTkxMjNkLCAweGJiNzdjMzBmLCAweDk4NmZjYzZjLCAweGJiZjA4Mzc1LCAweGJhZGVhMWY1LAotCTB4MGM5OWNhMjIsIDB4ZmIxNTlmN2UsIDB4YTRhZjkzY2EsIDB4YWM1ZDM3Y2YsIDB4M2YyMGRlMjQsIDB4MGYxZDEzNWMsCi0JMHg4ZTJlOWFlMywgMHhlNjQzZGZjMywgMHg3YzgxZjNhNSwgMHg0ZTk4YmE2OCwgMHg3N2Q5YzMzYywgMHgzMGZjNmY4MCwKLQkweGMwZGJmMTllLCAweDNmNmM0Y2Y4LCAweGYzZmE1MWFkLCAweDNjNDVlNWZhLCAweDQyMmVkN2MzLCAweDFmNmI4NDI2LAotCTB4YjVmNmNmMWEsIDB4ZGY5ZDliMmIsIDB4MTc5MjRkYmUsIDB4MmJjNTgzZWMsIDB4ODI5OTNlY2MsIDB4MTlmZDMxNzQsCi0JMHgxNmM1YTVmNCwgMHgwYjEzNGY4ZiwgMHhiMWYyODdmYywgMHhhOWM2ODg2MSwgMHhjYzhmNmE0NiwgMHhmNjhjZjJlMywKLQkweDdhMDY4ZWQzLCAweDFjZjA1OGY1LCAweDljMzlmOWJhLCAweGQ3ZmFmMWQ3LCAweGFjNTg5ZmUwLCAweDc0ZDFjNjI1LAotCTB4Yzc0NmY5OWUsIDB4ZmJmYTc0ZTEsIDB4YjFiMWE2MjcsIDB4ZGUxNjI2MjAsIDB4ZTQwOTI1M2IsIDB4NjZhY2YyNTgsCi0JMHgzMjEyMmZmNCwgMHhhOWZhMDJkNiwgMHg5N2NiNDY0NCwgMHgwZmE0YWU2MywgMHg0NThmNTE2OSwgMHhmMDc0YTI3YSwKLQkweDJmYWVmMTZmLCAweDFkMDIxZDA0LCAweGYxODdiYWNjLCAweDQ5ZmZkMTM1LCAweDE3ZjM4NjliLCAweDFmYmUxZDI1LAotCTB4YzZlZmRmMDEsIDB4ZTgwYWZjNTcsIDB4ZDczOGMxZWMsIDB4N2JkZTcwM2YsIDB4NWZmODJiY2UsIDB4ZmE3ZmU0OGYsCi0JMHhlNWQzYTA3MSwgMHgyNDUzYzc2NiwgMHhjMzg5YmM3NCwgMHg0YmIwYjdiZCwgMHhkZWYxZmUwZiwgMHg0NGM4ZmZlNSwKLQkweGY1ZjNiNDdkLCAweDFiYTdjMDkzLCAweDBjOWYyNjhjLCAweDVkMmVjNTdhLCAweDAzZWM1ZmI3LCAweDMzOWM2MmU0LAotCTB4ZjM4ZTllM2EsIDB4ZmFkYTM4M2MsIDB4OTIwOWE1MjksIDB4ZmRjNzdmNGMsIDB4ZGUxNDRlZDIsIDB4YmMxOTFiNzcsCi0JMHg1Yjc3OGRkZiwgMHhlZTkxMTNlMywgMHg3NTdkODJlNywgMHhiMzhmNjhjMSwgMHhmYmU4YmQwMSwgMHgyNjMyZTNmMSwKLQkweDMyNDNmMDA1LCAweDc0YmM0YWNjLCAweDk5Nzg4MWJlLCAweDAxZWE3NDZmLCAweDJlOWMwYmZlLCAweDM4YWNlNzVjLAotCTB4ODE0NTg5NWYsIDB4ZjJmOTNjODcsIDB4MDc4ZWQ3MGQsIDB4ZDNlYjlmOTksIDB4NzMwZTVmZTAsIDB4Yjg3Mjg2MWUsCi0JMHhkMWZhMTBmYywgMHhhMzFhNzRmMiwgMHg2NDk5ZDNkYiwgMHhhZjI4NGVlOSwgMHg3NzFkMjVhNywgMHg4YmQ3OWIzYSwKLQkweGVmMDg3ZDc4LCAweDM3ZWFjNDk3LCAweDVkM2RiYTcyLCAweGJmYTlmYWMwLCAweGNlZmYyNzczLCAweDYyY2VmMWJiLAotCTB4ZTcxZDEzODAsIDB4NWViZTAzZDMsIDB4YmU4MmYyOGQsIDB4OGRkNmY5NGMsIDB4N2M1ZThjZjEsIDB4NTViZTYwZDYsCi0JMHhmODA0MzdkYywgMHhjNTA5NmY2MSwgMHhmYWNmZGQxYiwgMHgxM2NjYmVmMiwgMHgxOWY2NTdjMCwgMHg1N2VkNWIyYywKLQkweGJlNjRkZmM3LCAweGM3MmQ2ZmFlLCAweDk1OGU1NDFjLCAweGU0ZDhlNDJhLCAweDEwYzcyNjc4LCAweDdhMjU3NDRmLAotCTB4NDIwZDVmYTYsIDB4Yzg3ZDIwZmMsIDB4MWI5ZjhlZDcsIDB4ZTlkYzE5YTIsIDB4NDc4ZGE5NzksIDB4NzdjYmU1NzksCi0JMHg4NmY3ZjEwNSwgMHgwNDRlNzY3OCwgMHhhZDFkMzkzZiwgMHgzOGRmZTNjNCwgMHhmYmM3OWMxZiwgMHg2NjE2ZjFjOSwKLQkweDMyZmEzOWVmLCAweGI2ZDM5ZTYxLCAweGJiZmY3OGYwLCAweDhiMWYxZmFkLCAweDE5NjdiZTgxLCAweDUzYzRlNmZhLAotCTB4ZWE5M2JiN2EsIDB4YzQyMmZhMGQsIDB4MDllYjBjODcsIDB4N2NmMzRmYjEsIDB4ZGNmMzg1N2YsIDB4ODA5OWI3NzQsCi0JMHhlZjg2NmJmYywgMHg1ODllMjIyNSwgMHg3ZDk3Mjk3YywgMHgzZDRmNzI5NywgMHgxZjg2YWZkNCwgMHg1MmE3ZDVmMCwKLQkweGY0YzkyNDNlLCAweDU2M2MzNjQzLCAweDFhYTcxNjc2LCAweDE2ZjNjMTZkLCAweGVlNGZjZmQ1LCAweGZhOGY4NjBmLAotCTB4YmUzOGE3YmIsIDB4ZGE0YmM2ZDYsIDB4MGU4ZjAxNGYsIDB4NzM3MTgwZTIsIDB4M2NjMmY5ZGUsIDB4NzljOWQyOWIsCi0JMHhhMWEzZDE4YiwgMHhiYjJkY2Q3MiwgMHhiYjdlYzNkNywgMHhlYTA2ZjA3ZiwgMHhiZWY0YTdiZCwgMHgzMGE2NmQyMSwKLQkweDEzZGY3YWVkLCAweGY2ODE0ODhmLCAweDNkOTFiZmI5LCAweDc3OGU3YTdhLCAweDYyZmY3NTc1LCAweGJiYmZkZDFhLAotCTB4MzljMDc2NGIsIDB4ZDdmZmRmNzYsIDB4N2Y0MDIzYTMsIDB4YzAzOWQyZTksIDB4NzVmMmEwYWMsIDB4ZDFmNjE2ODMsCi0JMHg1M2I0ZjRjYywgMHhjZmZjMjUxYSwgMHg0NzY5NGY3ZCwgMHg0NmYxYzMzYywgMHgzM2E0MGFmNSwgMHhmMTRlMGZjMSwKLQkweDYyMTJlNWI4LCAweDE1OWZiYTQxLCAweGVhMTViYjFkLCAweDZlNGJlNWZlLCAweDdjZTYzODg1LCAweGE0ZWMzOGUyLAotCTB4ZWVlY2ZmZjAsIDB4NWU3N2U4ODksIDB4MmZjODljNDQsIDB4MWY3NDc5ZTYsIDB4MDVkM2YzMDYsIDB4NDVmNTk0ZWIsCi0JMHhmZDNhY2E2ZCwgMHg5MmVmZDIyMiwgMHg3M2JmZDU0NywgMHhmODY1NzA3ZiwgMHg3OGQxZGFmOCwgMHhkMzlkMjdhNiwKLQkweGNmZGY2Zjg3LCAweDdjYmRiZmRiLCAweDgzNzg4MWJlLCAweDdjODA4MGY0LCAweGQ1ZGZjMDJkLCAweDM5MDIxZWYzLAotCTB4ZDM5MDEyNWMsIDB4NWQzNzNlNDIsIDB4OGYzMDhhOGMsIDB4YjczZjdmMDksIDB4ZGZmYWZjMzgsIDB4ZTlhMzdjZTYsCi0JMHg3OWU1MTVhMiwgMHhmYzA0ZjhlOCwgMHhkODY2NmE5ZCwgMHhlOWI1ZTA0ZiwgMHhjNGYxMmE2MiwgMHgzZjQyZWEwNywKLQkweGMwY2I4YzBjLCAweDJjMDAyYTc2LCAweGY4MDRjNjlmLCAweDBiMDNmMDgwLCAweDIyNDBmZTNhLCAweGRmYjQ1NGM2LAotCTB4YWM3YWU2MWUsIDB4NTJmYzAwYTUsIDB4YTdiYzgwMWYsIDB4Mjc4Zjc2ZjgsIDB4MTJlOWZhYWYsIDB4M2E5N2RkZTcsCi0JMHhhMDFkOWI0NCwgMHgyODNlZjU3MywgMHgwN2Y1OWMzZCwgMHhlMjRmYjlmMSwgMHhhZTc4MDljZCwgMHhmMDYxOTE4NiwKLQkweDczYTc0MTVkLCAweDA3MTU1MDdlLCAweGY3MmZmZWYyLCAweGViMDcyNjU3LCAweDBlN2VmZDYzLCAweGE4OTdiMzNkLAotCTB4MmRjODU1MjQsIDB4ZjM2YjkyYTIsIDB4MmIxY2E4M2EsIDB4MDg2MmJkNDAsIDB4ZjY4ZjhkMzAsIDB4YjkzZTQ3NGQsCi0JMHg4MDkyMzg5MCwgMHgxOWY3N2I4ZSwgMHhmODFmZDEzMiwgMHg1ODk5ZTUyZCwgMHgzY2NmMTRjZiwgMHgxMzM3ZDMxZCwKLQkweGYwZDcwZTUwLCAweDY0ZTk0ZmVmLCAweGU4YzY4ZGZhLCAweGUyZmVhMWQ0LCAweDEyNGI3NjI0LCAweGVlNGM5ODlhLAotCTB4YTVhMmExNTIsIDB4MWQ0NDliZjUsIDB4NDdkNjg3ODgsIDB4MzA0OGNkZjMsIDB4MjZmZmFlOWUsIDB4ZWVmOTkyNWUsCi0JMHgwNjU3MzgxNCwgMHhlYzBjYWVmOCwgMHg2NTAyOWJjOCwgMHgxZDg3NDhlYiwgMHg0YjkyMzFjYSwgMHhmMGMxZDZjYiwKLQkweDY3MzQ4ZTNjLCAweGQxOGQ3ZjQwLCAweDg5ZmQzMzJmLCAweGM2MDkyMGFlLCAweGJhYjFlZjhiLCAweDRjZDdkNzk5LAotCTB4MTE2NzMwYmQsIDB4ZTMzMjZlZmMsIDB4NzVmM2Q3ZjksIDB4N2NhMDQ5MGMsIDB4MjQ2ZGY2MGMsIDB4YzFiN2Q4NDYsCi0JMHhlMzFjZmJlNCwgMHg1NGY0YmM0YiwgMHhmNTJlZDFkOCwgMHgwM2Y0MTM2NCwgMHgwMjc2OTM0NCwgMHhjZTk5MzVkZiwKLQkweDE2YjM2MDdiLCAweDFlYTA5MTYyLCAweGJiZTBiOTY1LCAweDMzN2YwMDhmLCAweDkwYzMzNDc5LCAweDAwOWY1ZGJmLAotCTB4YWRlOTZmN2UsIDB4MjhmZmMwYzUsIDB4ZjM4MDJkM2YsIDB4ZWI1ZGIxMWYsIDB4ZjA1ZTdkNDMsIDB4NWY1ZjFiMjcsCi0JMHhhOTRmZTcyYiwgMHhmZWMyNDA1NCwgMHg3ZTlmY2U2NSwgMHhmYzhjNWU2YSwgMHhmNmI4ODEyOSwgMHgxNGRhN2YwMywKLQkweDUzZjkwMTNiLCAweDdhZTM3MTMyLCAweDE1NjgyN2UyLCAweGE1ZDEyNjdjLCAweDZhZDcyN2FjLCAweDIzYzg3YzU1LAotCTB4ZGQ1MmZhYzEsIDB4ZTQ4ZGRmY2EsIDB4YzkwN2NhMTQsIDB4MWNiOTRhZTcsIDB4MmU0YTc2OGYsIDB4MTU3NDIzZjgsCi0JMHg0NGY1MWNlYywgMHhiNGZkNzhiMSwgMHg5YWNlYjY2OCwgMHhiZmYzMWIwNCwgMHhmZGI4YjE0NSwgMHgyMTAxZjRkNSwKLQkweDAxN2FkNWZmLCAweGI1ZGE1NjI5LCAweDQxM2QzNjhkLCAweGI1MTI1NTNmLCAweDdlYTE4N2E4LCAweGY0YzA5MzUwLAotCTB4ZDAzZGY3ODMsIDB4NWYyMWY3MmUsIDB4MGJmZGMxM2UsIDB4YWFiODI3NTMsIDB4NzdkZjE0YjQsIDB4NGVhMzkxZTYsCi0JMHg3MjRiMmU1YSwgMHhiYTUwMjZkNywgMHhiOWE0N2U5OSwgMHg2YmQ2OWVhMSwgMHgzZWY5MjJkZiwgMHhiMThlMTY1YSwKLQkweGY4YTc2ZGQ0LCAweGVjZGIzYjVkLCAweDZiZWI0ZDU4LCAweDNkZDQ4Y2NkLCAweDk3ZDQwNjg5LCAweGRhNjljODA4LAotCTB4ODI5MzQ1YmUsIDB4ZjAyNjkxZmUsIDB4YjQ3ZTUyYzcsIDB4NDAxMWUyMTYsIDB4ZGEwOTgzMTcsIDB4NTkzZjU0ZDMsCi0JMHhiNmUzYTQ2YiwgMHhkNjU4YjdhYywgMHhkNThmYzFkYiwgMHg4NWZjMGUzNywgMHg2NTg4OGI3ZCwgMHgzZTczMDkyYiwKLQkweDQ3NzNkMTJlLCAweGQ0MjRmY2YxLCAweDRlMjU1ZTI5LCAweDZkZjdlMjZmLCAweGFiMGU3YmYwLCAweDNiMDUyOThmLAotCTB4ZTljYmZkOTAsIDB4ZmMwYjBjYTQsIDB4NGYyY2I5MzcsIDB4NWNiM2E5YTAsIDB4MzllYjQ4OTcsIDB4NGZlODFkNjMsCi0JMHg4YzRmOWMyNiwgMHhlN2UxZGYxMCwgMHg1Y2UwNTQ3MCwgMHhhZjIxN2I2MCwgMHhiODdjZWEwZiwgMHhjYmU2MDkyYSwKLQkweGFlZWUwZTIzLCAweDU4MjM5YzBiLCAweDUwZmU4NWFjLCAweGUwZjFjY2NhLCAweDA5MjM3YzczLCAweDJhZjk4M2ZjLAotCTB4ZGUyM2YzMDMsIDB4NDNiNmYyYzYsIDB4NzZiYzU5YjMsIDB4MWZiN2Q2ODQsIDB4NWUyOGY5Y2UsIDB4ZDMzMmYyMTYsCi0JMHg0M2JlNTUyNSwgMHhlOGM4YmZlOSwgMHgwZWRiYjAzOCwgMHhiMGM5NzUyMCwgMHg0M2NiNTJlZiwgMHg5MWZkZjBhZCwKLQkweDgxZTI3N2FlLCAweDUyMzY4ZGFmLCAweGQ2Y2I0MGZlLCAweDkyYzM4NzMyLCAweDgwZDZmYjgzLCAweDI3NDdhOWZmLAotCTB4MGUzMzkzZTQsIDB4MTE2MDZiNzMsIDB4OWNkNWZiZjQsIDB4OTZkNmE2OTYsIDB4ZmIwYzVlZGYsIDB4ZWMwOTkyZWIsCi0JMHg1YzFjYTIyZiwgMHhjMTM1OTMyOSwgMHg4YmU3ODdmMiwgMHgwOWZiZmE4OCwgMHgyMDdmYmZjYywgMHgyMTM3OWM2MSwKLQkweDc0ZjgyZTI4LCAweDcyODNkNzAyLCAweDhmZjAyZTQ5LCAweDJjZmRmM2EwLCAweGY5Nzc1YmQwLCAweGJmY2U5MTliLAotCTB4ZmY5ZjlkYjIsIDB4NzVjMzljM2IsIDB4M2U3MmVmYTgsIDB4OGJhZGY4MjAsIDB4Mjc0Y2M1ZTcsIDB4YTdjMDFkNGUsCi0JMHgwMWYyOGEyYiwgMHhiZTU2M2Y1YSwgMHgzNGMwZjkwYywgMHhkZmRmYzZlMiwgMHhhNmYwNjBhYiwgMHg3Y2MxZDc4OCwKLQkweGY1MjgyNjUzLCAweGNhNWMzYjhkLCAweGI1NWFiNGZhLCAweDllYmY0MjNlLCAweDc0ZWVmODE0LCAweDQ2YmRiMmI3LAotCTB4OTQxMzk3ZTgsIDB4ZWZhY2U1ZmEsIDB4OWNhMmIyNWYsIDB4ZTFiYTdlNGQsIDB4OTdmMDQwZjIsIDB4ODIyNWQ1NGYsCi0JMHhlNzkzYjBkZiwgMHgxODRhNzRiYiwgMHhmOWUyNmExZiwgMHg5MjFkNGQyZSwgMHhhOWE1ZGYyMiwgMHg4OTAzZGU3MywKLQkweDhkMmVmOTQxLCAweDc3Y2I1NzFkLCAweDA5YzhmYTYxLCAweGY4M2Y3NzlkLCAweGEzMmM0ZmQ1LCAweDM5ZGZhNjNiLAotCTB4MGUyMmYzYzAsIDB4NTE0NDVlNDIsIDB4NzNjY2ZlODAsIDB4NTI5MDlmOTgsIDB4MzNkMWZhMzMsIDB4ZDAwZTMxMmMsCi0JMHg4YTY5ZDdhYiwgMHgyZWI4YWZkMCwgMHhmZmYwYWNkNiwgMHhhY2U1NWZhZSwgMHg5ZmMyN2U4MiwgMHhhNjVjZjIyOCwKLQkweDNiNzM0ODE5LCAweDY0MWQ1M2YzLCAweDhmY2M1Y2Y5LCAweGI0ZjZlNWU0LCAweDdlMTI0MTM3LCAweGM3ZTgzNWUxLAotCTB4YzRkZjlkNTIsIDB4MjRmMjgyNzgsIDB4ZmEyZTY2NzEsIDB4MGIzYjZiMGIsIDB4NGI1ZmMxOGIsIDB4YjFmYTEyZTUsCi0JMHgxYzc2MDliZCwgMHg0NDJlZWI1ZiwgMHhhNjJkZDczZiwgMHg2ODNmMThlOSwgMHg1ZGEyZGNlYSwgMHhjZmQwMGE2OCwKLQkweGM1ZGQwNTVmLCAweGJiYTAxODkwLCAweDRlZDFmZjdlLCAweGRjOGZmYTAzLCAweGEwNmJlYmIyLCAweGFmYmQ3YWFmLAotCTB4MTJlOTI4ODAsIDB4NzcyNDhmN2YsIDB4ZWJiYzcwOTYsIDB4MTdkMzVjMmEsIDB4MWVmNGI4NTEsIDB4ZmVjMDNiZDUsCi0JMHhlMjA1OGFhMywgMHg1NjNkYzVlYiwgMHgxYWRhODNlNCwgMHg0ZDdlZmM4MiwgMHhkOTdlNDEzOSwgMHg0ZmY5ODViYiwKLQkweGJkMmViMzNlLCAweDlhZmVmODE1LCAweGFhNzI4MjZhLCAweGUxMGUzNmM3LCAweDBmNzg4Y2JmLCAweGE1YjhlOTNiLAotCTB4MDUzZDI5OWIsIDB4YjZiYmZmZjEsIDB4YTRmNWViMjksIDB4ZmQ3OGY5MWQsIDB4NDRiYTEwZjYsIDB4NTZmODI0YmUsCi0JMHgzYWNiYjEwMywgMHg1MmVjNmI4OCwgMHg5ODgzMjc4ZSwgMHg3ODcwNzc3YywgMHgzYWJlNzIxNywgMHhhZGIxOGVmYywKLQkweGFlMWY2ZjEwLCAweDJjODVmYzYxLCAweGEwZDdhNDc0LCAweGYyY2IzNGZkLCAweGJhYjAxNDY5LCAweGU5MmJhNWE3LAotCTB4MzNlNmJkNDcsIDB4OGNjNzNiMzIsIDB4ZjlmMDk2N2YsIDB4ODRiZDdjZDUsIDB4NmIzNzQ1ZWIsIDB4MTQ1MGExYTksCi0JMHg3ZjY4NzNkMCwgMHg3NGQ0MWZhYywgMHhjMDlhMjljYSwgMHgzOGY5OGIzYSwgMHhiZTA5NWZhMSwgMHg1ZTU1ZjAyYSwKLQkweGE1MTk0ODQ2LCAweDM5MTM5YmIzLCAweDM2NDliM2JlLCAweDhmY2U5YmUwLCAweDQ2NDEyZTc0LCAweGY3ZTcwZDhiLAotCTB4OGEzNDNkODAsIDB4ODNkMjhmN2YsIDB4YTNjYWU4MDcsIDB4N2U4MTdhMzEsIDB4MjhjZDRhZDcsIDB4NDdhMDhjNGYsCi0JMHhlNGJkNzJkMywgMHhmMmZhZmU0NiwgMHhmNDBjOGY1MiwgMHg0ZjM0OTIzMSwgMHhmODBiMzViOSwgMHhmMDBjNTc2YywKLQkweDE1Mjc0YTFmLCAweGZhMDE4OTg5LCAweGNjYmUyNTY5LCAweDhlODI5MjFkLCAweGZhZGJiZGIwLCAweDEyM2E1ODY2LAotCTB4MWVmN2RmZmMsIDB4MTEyNjBiZDMsIDB4ZWZkMWJmYWEsIDB4ZjRjNGZmM2EsIDB4MTJkMjgzOTcsIDB4YzdhYTEzYTQsCi0JMHhlNWZkMDQxZCwgMHhhZmIzMGQ0ZCwgMHg0MDZkZDIyNiwgMHgxMjhiMmFiZiwgMHg5NDUzZTNmZiwgMHgxMGY2ODlmNSwKLQkweDAxM2NjMGZhLCAweGJkM2MzZjY3LCAweGE0Y2Y1ODVhLCAweGE3M2Y2NTVjLCAweGM5NDQ1ZmUwLCAweDI1YzhiMmJmLAotCTB4NzQzZjA3NjYsIDB4YmZiMDVlZjgsIDB4NWM5MjU2NjMsIDB4OGQ1MjA3ODgsIDB4NGMzODMxY2YsIDB4ZjEzZWE1YmMsCi0JMHhkN2RiZjczYiwgMHhkYmYxODYyNywgMHgzZGI4ZWFmNywgMHhjNmIzYTJhMCwgMHg2Y2U3NjdjMywgMHgxNDdhMDEyMCwKLQkweGQyNDZlMmU3LCAweGY4NTBhNzJjLCAweGYxNjNiZjQ5LCAweDBlODExYjkxLCAweDE5OTQ1ZDI5LCAweDNiZTgxZTQ5LAotCTB4YzNmOTk4YTQsIDB4NzQxMGY5YzQsIDB4MWI2YmNhNTcsIDB4MjQwZDlkMDQsIDB4NmVjZTgxMDMsIDB4N2Y0Mjg4ZWEsCi0JMHg2ZjQwOGRlOCwgMHhmOTBiN2U5NCwgMHgwYjllNDJiYywgMHgyY2I1YmRiZCwgMHhhNGIyYmU4NCwgMHgzOWViOTQxYywKLQkweGFlNDI0ZjQwLCAweDhmMWM5NzBmLCAweDdhMDU5N2RmLCAweGY2ZjUwN2JiLCAweDQzNmE3YTIwLCAweDNkMjg5MjdhLAotCTB4NDQyN2JmYTEsIDB4NTVkYjJhNWUsIDB4N2VmMDI2ZjQsIDB4ZTVhM2ViOWMsIDB4ODVlZDE5YTQsIDB4NGU0Y2QxYTksCi0JMHgzZDk5YWFmYSwgMHhkMjI0ZDk0ZiwgMHg4YzM1ZWJkYiwgMHgxMzg4YWFkZSwgMHgyODljYWRlOSwgMHhhOGQyYTRlOSwKLQkweDkxZTlhYmFjLCAweGE0YTM1MTdlLCAweDliZDIzNzM3LCAweGQxMjM0ZTlhLCAweDM3YTA0MGRiLCAweGFmZTMyZjIxLAotCTB4MTM3YjZmNGUsIDB4ZmYzM2ZmNGQsIDB4ZWRiZDI4NWEsIDB4NzZiOTJjNGQsIDB4NmM3YzEzN2EsIDB4ZDJhNTk0NDcsCi0JMHhhOTdjNzIwNCwgMHhmODYxNzI4NCwgMHg1MGFkNDFkMSwgMHg4NTkwZGExZiwgMHhhYjBlZTdmYSwgMHgzN2I2MDBlMywKLQkweDJlZTJmNmIzLCAweDBlZjkwY2E3LCAweDdiNzgyYjM5LCAweGVhMTJhYjk2LCAweDNiNjkyYjRkLCAweDM4ZTRiYTlkLAotCTB4NzQxODg3Y2IsIDB4NWMyZjZiM2YsIDB4MGNjMDdjZGQsIDB4MWIwZjJmN2UsIDB4YjVmM2Y3YmYsIDB4Zjc2ZDJjNzIsCi0JMHhjYmUzZTVhZSwgMHhkZWExMmFkYiwgMHhmZjhkOGViNCwgMHhjMzI4ZTIwYywgMHhkYmNhOGYyMCwgMHhiNzVmYmYwYSwKLQkweGNjYzFjYjIxLCAweDhlZjdhNjU3LCAweDIxZGRmYmUxLCAweGUzODAzY2VkLCAweDI1YjhkOGRhLCAweDA0ZDE4ZDg3LAotCTB4Y2ZhNjZjZWQsIDB4MzlmN2NjZGUsIDB4NjdkYjMzNjYsIDB4NGNiNzQ3YzIsIDB4YTdiZjgzYjAsIDB4ZDhmYTgzY2YsCi0JMHg1MmZhOWFhNywgMHhlYzExNzNlNCwgMHgyZGE5NzJkNCwgMHhjMGYxY2EwMywgMHhiYmMwNjRiZiwgMHhjZDljOWQ2MywKLQkweGU5NWI2OGUyLCAweDY0NGFiZTI3LCAweDdmMTEwZTdlLCAweDc1NzczODgyLCAweDU1ZjM3ZTkwLCAweDhhMTNmMzIyLAotCTB4ODIzNjQ5N2UsIDB4Y2M3OTEyZmEsIDB4ODg4ODc2OGMsIDB4MjExZWY5OGYsIDB4ZDg0ZjljMTIsIDB4MTQ4YjhjMjMsCi0JMHhkMzlmMWIyZiwgMHhmOGMzZmE4YywgMHhlNjRlMjI4MSwgMHhkZmE3Y2VkNywgMHhjNWZjYmMyZCwgMHg5ODdlNzBiOCwKLQkweGJkMzIyNDdmLCAweGRiOGYwY2U1LCAweDdhOTdkZjhiLCAweDA3N2YzYzU5LCAweGMwMWE0OTEwLCAweGQ2MjZmNzU1LAotCTB4MmIwODQ0YWQsIDB4YmMwMzI5MGYsIDB4NDZjYzdhYjIsIDB4YThlYmM3ZTksIDB4ZDM0NGJmOTEsIDB4NzA4MGY1YWMsCi0JMHhmZjMwOTRjYiwgMHhmMTE3NzI2OCwgMHhhZTg2YzVjNSwgMHhmODk2YmM3ZiwgMHgwODdmMmNmNCwgMHg1NWI4YmZkNywKLQkweDg0NDNmOThmLCAweDM4M2JiNWYzLCAweGMxZThjOGZlLCAweDcyYTdjZTc4LCAweDcxMjRhNTNjLCAweDE5Mzg3ZGJiLAotCTB4MGVlYTdjMGUsIDB4OGQzYmI3OGUsIDB4YTcyNjNhY2QsIDB4ZmUyYTc0ZGIsIDB4N2EwNDkxOTEsIDB4ZmE4OGE2Y2YsCi0JMHhjNTVkYjJiOCwgMHhlZmYyOTY1ZiwgMHhmODdhZTYyZSwgMHhmZTg3ZDIzMiwgMHgxZWI5NGZjMiwgMHhkMzEzNjY3ZSwKLQkweGVkMjJlZmMzLCAweDdkZWMyZmU4LCAweDBkOWRlOThjLCAweDJmNDA3Yjc0LCAweGJlNGFiY2NiLCAweGIyOGNmNzUwLAotCTB4YWNhZWQwZGUsIDB4MGViMTUyMzcsIDB4YTg3NTM3ZjMsIDB4ZjMxZTRlZjgsIDB4NmE2ZWY2YzMsIDB4ZGJmZjA1MjgsCi0JMHhhMjhmNDdkMiwgMHhlMGE5NzdkZiwgMHg5ZjI1NWUzMywgMHhjNjdlZTQyMSwgMHgxZWI5MWU2NywgMHg3YjZhM2ZmZCwKLQkweGQ0ZTlkODVkLCAweDA5MjliZTNlLCAweDk5OTY5MGUzLCAweGNjMzdhMGY1LCAweDBmNzk2MTg5LCAweGY5MWYyOWIyLAotCTB4ZjY4OGQ5ODIsIDB4YTBiZTI0NzIsIDB4NWU4NDgzYjYsIDB4N2YwZmFlNDIsIDB4MzIwNGE4NWUsIDB4ZTA4MjNlYzIsCi0JMHg1ZmVmODJlZiwgMHhiNjUyNWVjMSwgMHhlYzIzZjBhYiwgMHgzZjFjMTk5NSwgMHhlMWZlMjg1MywgMHg3NjEyN2YzYiwKLQkweDlmODYzMmQyLCAweDA4NzVjNGE5LCAweDVkZGVmM2YwLCAweDZlYzIzZjBjLCAweDkyNzZlNmZhLCAweDkzYjYwZTUzLAotCTB4YWQ3NWJkODQsIDB4ZWZkYTkyZjYsIDB4Y2Y1YmNlMmUsIDB4ZGFjZjYxMDAsIDB4MDI2ZDllZDEsIDB4ZGRmZTUzNDAsCi0JMHgxM2M0ZjdiMCwgMHhlZmQwMjQ1NSwgMHg2ODcxMGI1OCwgMHg3MmY1NDE3NSwgMHg2NmI1N2ZhNSwgMHhjODUyZTlkMiwKLQkweGFlODhjYzlmLCAweDQ2ZTAxN2I4LCAweGZmZDExMzNhLCAweGVjMmM5MGQ4LCAweDM0ZmYzNjI3LCAweGUxNzVjZjllLAotCTB4ZGIzOGFjY2IsIDB4MjljNGZjOTUsIDB4ODM2Yjg2ZjMsIDB4NmQ1ZWUzZWMsIDB4NDNkODJjNWYsIDB4ZmMyNDk3YmQsCi0JMHg2MWFkZDQyZSwgMHhmMTgxNTFlMiwgMHhlODdjNzEwYiwgMHhmN2JlYmJmNywgMHg0ZjczZTA2NywgMHhmMTNjNjBjNCwKLQkweDJlY2M5N2MyLCAweDI4NzliMGJjLCAweGUzOWYxNWU2LCAweDg3MDE1NzcxLCAweDc5OWY4NzI1LCAweDcwZTcwZmQ1LAotCTB4MTBlMTgyZTUsIDB4YmM5M2FlYmYsIDB4NmRhNmVkNWYsIDB4OWZlZThjMjMsIDB4ZDNhZGY5YzMsIDB4YmU4Y2Y0ZjgsCi0JMHhlYzQ0NWM1OCwgMHhkM2RmYjIzYiwgMHhmZjRmN2M4MywgMHg3ZGJmOTMxYSwgMHg4OWU2MzQ1MiwgMHgwNDg3ZGZkMiwKLQkweDI3MzY4N2M3LCAweGYwODFmOGIzLCAweGY5MzkwOWM3LCAweGU1NmY1ZTQ3LCAweGEzNWE5ZWY3LCAweDNmOThmZWM0LAotCTB4ZjNiYzUyZTIsIDB4MWZmZjgwMjksIDB4NTdlMGZkNjEsIDB4ZmM4NzQ3N2EsIDB4MTBlNmZjMWMsIDB4OTk1MmE0YjcsCi0JMHhkNzQyZGJhNCwgMHg2ZGY5ZjEwNSwgMHhkZjlmMTBkNywgMHhjNWU0YzQ5OSwgMHhiMDhiNGEzOSwgMHhlNzM2NDViZSwKLQkweDMzYmRmMDhiLCAweDg2NzkwZTNjLCAweGM0Y2ViMWM3LCAweGJlZDZiOGIyLCAweDdjYWNmZWZlLCAweDIyNjc5NzliLAotCTB4YmY0NWQxYzQsIDB4YWU4YzViOGYsIDB4M2VkZTk0MzUsIDB4MzVhZTIxNmMsIDB4MWZkODNlNTQsIDB4ZGU2MzM0MzEsCi0JMHhhZmI2MmNjZiwgMHhjYzU2M2RkZSwgMHhmZWUzMTUxMywgMHgwZTdlNTQ5NCwgMHhkNWFjZjFkNiwgMHg4NWNhMTg3NSwKLQkweDM0N2JjYTZkLCAweGQ0MWZiMGJkLCAweDdhYmVkODM3LCAweGJlMjk1OGEzLCAweGVhYTRhN2Y3LCAweGRlY2Y4MDczLAotCTB4NjdjNDdlZTksIDB4YThhNDdkN2YsIDB4ZGVmZTcwYmIsIDB4NWZjOGZjOWIsIDB4MzQ1YmY3MDksIDB4MjkxOGYzZjAsCi0JMHhmOGI1NzYwZSwgMHgzYzhlM2E5NywgMHgxZTZmOWM1YiwgMHhhNmM1OWU0NywgMHgxYzc5YjMyMiwgMHhhYzkxOGU3OSwKLQkweDczZWRhNzRkLCAweGZmZDE5MzNiLCAweDMzZDYzNGJlLCAweGY2NDcxMTQ0LCAweDc4YTM3Y2M0LCAweGRlYzdhMGJlLAotCTB4ZWMzODgxMDEsIDB4MGUyMGRmNjMsIDB4M2JlOTM5N2IsIDB4NGU1ZWMzOGYsIDB4NTU4NzEzMGEsIDB4MDI1ZmU5YzcsCi0JMHhjMDE3NDFiZCwgMHgwNjE2ZGRjMywgMHhiZWI5MmFiNywgMHgxN2EwZmMxMiwgMHg4ZmNjMTIxNiwgMHg4ZmQ5MjQyZSwKLQkweGVjM2QwNjhjLCAweDkxNzg4ZTg4LCAweGZhM2QzMjZmLCAweDc0NGI3ODZhLCAweGUxNWQ4ODY5LCAweGY2MjY4ZWJmLAotCTB4YmFhNGZkYTAsIDB4NmEzYThhNmQsIDB4ODc3OTQxZTYsIDB4MTRkMzRiZTksIDB4NjczNDA3ZTMsIDB4NWMwZmZhMmIsCi0JMHgzZGEyYmQ3OSwgMHhhOGE0NTNjYiwgMHg1MWJiYWNlNywgMHg1YjcwN2ZkMSwgMHhmNDNlYTI4NSwgMHhmZDE0NWJkMSwKLQkweDI4ZDZmM2FmLCAweDdmZTAxN2VhLCAweGM4YzlhZjkwLCAweDY2Nzg2ZWQ3LCAweDkyZmM2Mjg2LCAweGY1MmM1ZTM3LAotCTB4N2NiOWI2YzEsIDB4OGI3MmU1NmUsIDB4Nzk1ZDljNzgsIDB4MDJmZGNjYTUsIDB4OWY2ZmM4ZmIsIDB4Zjg5Nzk4YWYsCi0JMHgwYTU0OWYyNCwgMHhlZmY2NDk3MSwgMHg4N2JiMmM1YywgMHhjNThiYjBiMSwgMHhkYzc1ODYwNywgMHg2ODRlZjhhNSwKLQkweGEzMmVkMjVjLCAweDkxMjFkNWRlLCAweGY4ZDBhNGM3LCAweDg3Y2VkMmU0LCAweDhhZGU0MmQ3LCAweGZmYTE3ZjVhLAotCTB4YTBjNWI1NzIsIDB4M2U2MzQ0ZWYsIDB4YTk5ZjVhYTQsIDB4YTAyNzM2NGEsIDB4ZDI0NjkxZGUsIDB4ZTlhYjVkMTgsCi0JMHgwZjBmZDRjMiwgMHg0ODUxZjdiOCwgMHhiYTMyM2M4NiwgMHgwYTE3NDE1OCwgMHhhMWY4NTFmYywgMHg3NmMyZWI3ZiwKLQkweDJkMzVlNjMzLCAweGQyMDE2Mzc5LCAweDQ5NDUyMWEzLCAweDI1NzY1MTE3LCAweDJhZTRjNDVkLCAweDUwZWNjMmU5LAotCTB4OTk1YzQxZDIsIDB4ZjBkNDBlOTIsIDB4NzQ5NTNhYjYsIDB4YmZmNGZjNDEsIDB4N2UzYmMwMmIsIDB4ZDQ2ZTkyODIsCi0JMHg3ZDIyMmVmMCwgMHhkODBmMzE4NywgMHhkZjAwMzkyYiwgMHhlYjJmNzg2YSwgMHhiYWZiODJkOCwgMHgzY2I4YmU5YSwKLQkweDM5MTdjNzk5LCAweDc0MWY4NzdjLCAweDZlMTA5YWI2LCAweGY4NDkzZjJjLCAweGVlZGMwYzAzLCAweGJmNGEwOTI2LAotCTB4NTZhYmQwOTgsIDB4OGRiZDczMjUsIDB4ZjJmYzIzY2YsIDB4ZGEwZjI1NmIsIDB4Yjg3MWZkZjEsIDB4MmZhNjVmMzIsCi0JMHg2NmY5ZWMwYiwgMHhhZTQzZmNjMiwgMHhjMzEzOTIwNywgMHhmN2YxMTdmYSwgMHgwMTQ1ZmU0OCwgMHhmZjVjYTlkNywKLQkweGZmMmMyM2FjLCAweGYzMTQ3OGU2LCAweGJkNWM3ZDBiLCAweDhiNDJmZDBjLCAweGQxZWEzMzQ5LCAweDczYzY2YWU3LAotCTB4ZmIwN2ExZmYsIDB4MDIxOWUxYTksIDB4NTI5ZDM1M2YsIDB4ZjkwNDk1N2QsIDB4MWFhMmVmNWYsIDB4MTQyNzI2YjIsCi0JMHhlNGE3NTI5ZSwgMHg1MzNkYzMzMywgMHg4MWU0MjlkMiwgMHg1MDEzZGQ5YiwgMHg4NGU4NTdmYSwgMHgxMmJmMzA1MiwKLQkweDVmOThiMGZhLCAweDMxZjA0ZmMwLCAweGZjMDFhZjMxLCAweDU0MGU3MDMyLCAweDJhZTQ4ZDdjLCAweGM3ZjZhMmYxLAotCTB4OTYzMDMxYzAsIDB4ZWM1YmM3MDYsIDB4YTMzZTM4MjQsIDB4ZmMwNGMzZjYsIDB4ODRmZWQ0MmYsIDB4YWNjMGUxNzgsCi0JMHgzYTA3Yjg1NiwgMHgzZjQ0ZTJkYywgMHg5YWU5MDk1ZiwgMHhmZjBiYmYwOSwgMHhhZTIxZmEwYiwgMHg4ODdlZmQyMywKLQkweDJhZWE3Mjg4LCAweDFlMjlkZGYxLCAweDU2NzhmZmM5LCAweGM0NTc1YzY4LCAweDNlMTgyOTg5LCAweDNjMWQzM2ZhLAotCTB4ODAwZmIyNWEsIDB4MWRlY2Q0NzUsIDB4MTQ3NDA4OWEsIDB4OWM3NDk3ZWEsIDB4MjNjZTg1N2MsIDB4YTFlMmZhNmIsCi0JMHgyODI0MTU1ZiwgMHg1ZjdkYzUwNywgMHg5ZmI4ZmM5NywgMHg4MWYzODkzYiwgMHg4ZGRkZmJlMCwgMHg0Y2RjN2RhNCwKLQkweGY5NTMwN2Y0LCAweGYzMjUwYjE4LCAweGI1MGU5MTViLCAweDdmNDVhZGRlLCAweDA0ZWU4NmIxLCAweDA0OGViZGU4LAotCTB4MDJiMzNiYzUsIDB4NDM5NzU4ZWQsIDB4NDc5YWQ3ZWIsIDB4YzJjNTM5MzMsIDB4M2U1ODA5ZjMsIDB4NGZmY2UxMjgsCi0JMHhlZDkxOTFkOCwgMHgxNmZhZTUzNSwgMHg0OTY2MTY5OCwgMHhjMTA1ZjdmNCwgMHg3NTg2YjhlYiwgMHhiODA5N2M4YSwKLQkweDkwNzEwYTI3LCAweGQ3MDQyOTgxLCAweGM3NmM5NWQzLCAweDRmYTIxYmRmLCAweDZlODRlYmJkLCAweGMxOTk1ZGM1LAotCTB4OWU5MzZlN2EsIDB4Yjc2MDM2MWEsIDB4NzE2MDY0YmYsIDB4ZmVhNTc2Y2QsIDB4ZjRjMjlkMWMsIDB4ZTA3MGM4ZTAsCi0JMHhiYjJhNTlmOSwgMHg4ZjdhNmFlNiwgMHg0YWVhY2ZjOCwgMHhmN2Q2MjhiNiwgMHgzNjJiOWM2MCwgMHhjMDZmN2U4NSwKLQkweDkyYTdmZjQ5LCAweDRhYmUzMDI2LCAweGM0M2NjNmVlLCAweGRlMzIxZDBiLCAweDg5YmM2YWE3LCAweDNkYzY4N2YxLAotCTB4OWVhMTFlMzIsIDB4MTdkZTAzNGUsIDB4MDA3MWRhNWUsIDB4MTZlZWE1ZjUsIDB4N2VhODgwY2EsIDB4N2U4NWI2NzIsCi0JMHhlMDE1ZjA3OSwgMHgyNDZmZGFhZiwgMHgzMWU0NDE3YiwgMHg3ZWUxNDkwZCwgMHgxMDUyMDI4OCwgMHhmMTA1MDc5YywKLQkweGYxYjA5NGZkLCAweDI3ZmNmZWZmLCAweDkzZTczYjY1LCAweDFjNWU3MjU1LCAweGNmZWRhM2RjLCAweDY1ZjZkMTZiLAotCTB4NDdlMTA0ZDYsIDB4YjhhZjhmYmQsIDB4NzNhYTUyNWQsIDB4NzBhMTRmMGQsIDB4NjMyYmEwZmIsIDB4MjU1N2NjMjMsCi0JMHgwMzRlMWU3NywgMHgxYzkwYWNmOCwgMHg2MzFiN2YxMCwgMHgwZDFiZjc2MCwgMHg3MzQ3NzJmMiwgMHhmNDM3OWQ5MCwKLQkweDcxMDVkOTVlLCAweGVlMmJkM2NlLCAweDY5ZmRjMWIxLCAweDQ5NTBlZjMxLCAweGE4ZjBmNzgzLCAweDBmZmVmMTg1LAotCTB4MzZlZTIxOGIsIDB4ZDY5ZWIxY2IsIDB4OWQ5ODFiNjYsIDB4MThiZGY1OTksIDB4NWYzZDBlNWYsIDB4ZmJiM2QzYmYsCi0JMHg2NmVjYmE1ZiwgMHg2N2QwNTdiYywgMHg5NzZmZDE5NSwgMHg0MGIxOTMyMCwgMHhlMmJkNjIxNywgMHgxZGY4YTJkZSwKLQkweGZlNDM1M2VlLCAweDRjN2RmOGE2LCAweGJiZjBkZjZiLCAweGIxNGE2OTY5LCAweDE4N2JkZTJiLCAweGJjMzdkOTUzLAotCTB4YmI4MDE0ZDksIDB4NGM2YWQ3YzgsIDB4ZmQwNWFmZDQsIDB4ZWFjOGM3YTgsIDB4N2E4Yjk5YzQsIDB4M2IyMzBhZTQsCi0JMHgzZGI4YTc1ZiwgMHhiMGIwNmE3NiwgMHhlMGU2N2RhNywgMHgyOGM2YTgzYywgMHg5M2U2MWM2NywgMHhiMDEzMjNiZCwKLQkweDM4YjRiZjNiLCAweDVmYjhhY2UzLCAweGMyYzc5YjBiLCAweGY5ZTFlOWU2LCAweGFiZGUyYmMzLCAweGIxMmQ3YjQwLAotCTB4NTMxZTdjMzUsIDB4YmJkMzBhNDMsIDB4OGFjYTJmZWIsIDB4YWQ3YWE2M2MsIDB4ZWE5MWYzMGYsIDB4YmYxNWVhMmYsCi0JMHhlMmUxNDg3ZiwgMHhmM2VhMDQzMSwgMHgwNzFhMGNjZiwgMHgxYzQwNWJlYiwgMHg4MmZmYTE2YiwgMHgxM2M0MzE3NSwKLQkweDNjODg5N2E0LCAweDdjM2QzNTY2LCAweDY4ZGZmMWNkLCAweDMwZWQxMmQ1LCAweGJhZWMwZmJjLCAweGZlNTdiZjUyLAotCTB4NWZiZDg3MjksIDB4NDY4YTQ4ZjMsIDB4MWU2MWExZTQsIDB4MzAzN2I1MzEsIDB4ZjdlZWE3OWUsIDB4N2NlYTI5ZWYsCi0JMHhlN2RlM2YzMywgMHhkYjM3Y2ZlYywgMHg3N2M1N2U1MywgMHg5NjJmMWExOSwgMHgxYmMxZjIyYiwgMHhkNzE4NzhlOSwKLQkweDJhYWM3MTc4LCAweDRiY2Y5YzFmLCAweDAyOWJiM2U3LCAweGUwOTE2Njc5LCAweDViMzI3NWZmLCAweDkxZTQyMzU3LAotCTB4Y2VmZjA3YzUsIDB4OWRmMDI5ZTgsIDB4ZTYxNzllMDQsIDB4ZjhmMzg1OGYsIDB4Zjc4Yzg3NmMsIDB4YTIzZDlmOWQsCi0JMHhjYzM1YjA5OSwgMHg1YzM5M2JiYSwgMHhlMmQ0NGZhZSwgMHg0N2MxYjkzOSwgMHg3Y2MyNWI5YywgMHhmNzEzZjQ1ZiwKLQkweDNjN2RjNDE5LCAweDU1NzZmYWY1LCAweGZhYzBlN2Y4LCAweDdlNjU4YzQ3LCAweDJmM2NmNTYxLCAweDc1OGFmODcwLAotCTB4N2MzMWIyZWYsIDB4ZjE0YWJlMzQsIDB4MmMyOGY5ODEsIDB4Y2Q5Nzc3NGYsIDB4ODNmOTE4YmYsIDB4NGZlNzg5NDUsCi0JMHg3NjNhZDk5MiwgMHhjNGNmZTJkZCwgMHhjYzg5OWNmYywgMHgwZjQ0OGVhZSwgMHg3ZmRkNThmNywgMHg5YTZlM2Q0NSwKLQkweDQ4ZDU3MjA5LCAweGIyNTliNmE5LCAweGFiYjc5ZDA0LCAweGVlMDA0M2QxLCAweGExYWYwMmIyLCAweGJiNjNkNzcwLAotCTB4NjNmM2Y3OTgsIDB4N2U3ZWRjZWMsIDB4NjE1MzlkOGMsIDB4YThmZTdjMGYsIDB4ZjQwMWY5OGMsIDB4YTBhNDliNDAsCi0JMHgwOWNmZmIzYywgMHhkZTdjMGI4YiwgMHgzZmZlYTEyNiwgMHg0YWM4NGRkZiwgMHg2ZGU2NzdjYSwgMHhlMmZhNjNhYiwKLQkweDc1MzFjMzUzLCAweDlmYmY3ZTA3LCAweDU0Nzk5N2YyLCAweGNiNGNkZGRlLCAweGYxNTQ2YmY5LCAweDA4NTc2ZTYxLAotCTB4ODM3MGJjMzksIDB4MWIyMWRlY2EsIDB4M2NjNjRiZmUsIDB4Mjc5NDY2Y2YsIDB4MWNhZTdmOGIsIDB4YTRkYjc0YmYsCi0JMHhlYTdiZTBjZiwgMHg0YWZhMzYzOCwgMHg3MWZjZmRhOSwgMHg0YmNiZDcwYSwgMHg4M2M4Mjk0OSwgMHg0MmZhOWZiYiwKLQkweDdjOGY2YjFmLCAweDdlNTBjZTFlLCAweGYwMzA2ODNiLCAweGRkOTYyMzVkLCAweDJmMmMxNjJkLCAweDQxYmIzOGE2LAotCTB4ZGQ1M2U4M2UsIDB4N2JkN2MwYmQsIDB4YmFmMDYxZGYsIDB4Yzk4MTdmNTAsIDB4MzliY2I4MGIsIDB4ODRiOWY4MTIsCi0JMHg5MzMwY2VmMiwgMHg4NDFmNzljNSwgMHgyZTE0ZWM3YiwgMHhmYjkzMDMwNiwgMHgzNWZkZGM3MiwgMHg1ZTk1NzE5MywKLQkweDdlMTE4YmE0LCAweGNhMmIxY2NiLCAweGQwMGE0NzIzLCAweGUzNzNjMjdmLCAweDEzZmMwMDI3LCAweGMyNzE4YjlmLAotCTB4N2I5N2Q2YmUsIDB4YzM3ZjA2OWYsIDB4ZThkMTU1ZmEsIDB4NTgxYTM1ZmYsIDB4N2I2NzM5OWMsIDB4YzBlYzA2YjksCi0JMHhmYjQ5NzZlYiwgMHhkNGQxZGZjMSwgMHhkZTE3MmFiOSwgMHhhM2Q5MzAxNywgMHhhZTIxM2YzMSwgMHg5MzE2NWU3MywKLQkweDA5M2JlYzczLCAweDgwMWRhZWFkLCAweDU3YjgwNGNmLCAweDNlYjVkNzQ3LCAweGY4YzI5YmNiLCAweDFhODNkMzM4LAotCTB4MjU3YmNjMzksIDB4M2RjMDdmZmIsIDB4MzIxYmNmNmIsIDB4YTBiYzgzZGUsIDB4ZDdmY2Y5NjUsIDB4OTE1Zjg2MTMsCi0JMHgwZWRmMDUwZiwgMHgyOWJhZjdkNiwgMHg0MGQwYzhkYywgMHhjOTc2ZmFmZCwgMHg3N2M1OGJhNywgMHg1MTVlMzAyNCwKLQkweDM0OTdkYWJmLCAweDZmZDFlNDEzLCAweGU5ZWYxOGI0LCAweDUyZWZkNzVmLCAweDIzYWUyMDJiLCAweGM5NGNkMGU0LAotCTB4NWM0N2ZjYzIsIDB4YzQ0ZTlkOWYsIDB4YWExNzE2M2YsIDB4OWQzMjc0ZTUsIDB4NjMzM2IxZWIsIDB4MTNlNzdjMTgsCi0JMHg5YjhjMjY0NywgMHgxYWIxMjQ2MSwgMHg1NjY2OTQ3YSwgMHhmZWUwOTdiNiwgMHhkMDU2NzRlYSwgMHgyMzdjNDQwNywKLQkweGRlMTExZWIyLCAweGI0ZjhkM2VmLCAweDk0YzdkZDk5LCAweDI0YzA4NmZhLCAweDcyYTdjMTY3LCAweDNhMzdmMzg1LAotCTB4YzY5ZGM5OTUsIDB4NGI4ZmNjMjEsIDB4YzQyNzExMDYsIDB4MWQ1ZjFhZDMsIDB4NzJlYzA1YmEsIDB4ZGI4YjM0NDMsCi0JMHg4NDY0YmU1MiwgMHg4MTBlNTZmNywgMHg1ZWZiYTZiYywgMHg3YjE0NGFmNiwgMHhjN2RjNDMzZiwgMHhlMTBiMzhiNiwKLQkweDRkNTM2MzdlLCAweGI3ZGUxMTQ2LCAweGVmODdkOTNhLCAweGZjZThmNDIwLCAweDI5N2U3ODk5LCAweDRjYTg5MWJmLAotCTB4YjZkMzczYmMsIDB4Y2U5NGI1NWIsIDB4M2VhOGQzMWIsIDB4MzY2YmViNDYsIDB4MGI1NWJjZWQsIDB4ZmRiMmU0ZjcsCi0JMHhmZWI0MzU4YiwgMHg1OGI3YTZmYywgMHg0ZmZlZjVmYiwgMHhhNmYyZmVhMSwgMHhjOGJkYWMxMywgMHhmNWE2NThiZiwKLQkweDYxM2U5YjYzLCAweGE0ZDA2MGVkLCAweDRkOTdmMjExLCAweGU4N2FiN2RkLCAweDVjYWQ2N2ZjLCAweGYxZjg3MWRmLAotCTB4ZGVlMzZhMWUsIDB4N2Y2MDlhYTEsIDB4OGNhOTliZTIsIDB4NjI4ZDlkNWYsIDB4OTE2NmNlZmQsIDB4ZWYwMDM1YjksCi0JMHg1ZmZkZjBkYywgMHgyNGYwZDU0OCwgMHhjNTJjMzY4ZCwgMHg5Mjc4YzU3ZSwgMHgyMmRjN2UxMiwgMHhiZjE5NmUzZSwKLQkweDg2MjYzYTg3LCAweGYxNjI4YmFjLCAweGM1MmM0ZjI5LCAweGExY2VjMWMzLCAweDk4OWI1ZjE4LCAweGYzNzBlMzZhLAotCTB4NjIyNTNiZTMsIDB4MzE0ZjAxMWUsIDB4NWRlZWY4OWYsIDB4YmU1OTk3MjAsIDB4OWU3MDZkNWEsIDB4N2YxY2RkZmEsCi0JMHhmMDZiM2JmNCwgMHhlYzljODMzYiwgMHg0NjRkNjZmZSwgMHhlMjhmZTAyMSwgMHhhNmYxY2I0ZCwgMHg3Yjg5YmMwNSwKLQkweGI1YWYzMGRmLCAweDcwZmZmOTAwLCAweGJjMWY1YmYwLCAweDA1NjdmYjQ0LCAweDkzYTZhZGQ2LCAweGE3YzY1NDk2LAotCTB4YjhiMmI1OTcsIDB4MDczNTlmNjIsIDB4MGM0YzY5ZTksIDB4NThhMmY3N2YsIDB4MWM2MzhmYjksIDB4NWFhNjZmMGUsCi0JMHgwMTA3M2RmOSwgMHhiZjA5NjRhZiwgMHg5OGUxY2FkMywgMHg5MzUyMWZlMSwgMHhmZGY3Y2RmZiwgMHg3N2NmNWYzMCwKLQkweDdjMjBlZmJkLCAweDhhZmRlMTM5LCAweDZkZDcxZDgzLCAweGIxYjFmYjY1LCAweGNmNGE1NGJjLCAweDFlZjNkNDM2LAotCTB4NzY3N2NjNTYsIDB4MTk3YzZhOTUsIDB4NWZiMDkwM2QsIDB4N2Y4ZTBlNWIsIDB4MjA3N2JmOTAsIDB4NzE4MmYzZGUsCi0JMHgzZjRjMDU1OSwgMHhkYzU1YmQwNSwgMHg5YjllMjdkMywgMHhiNGZmYjA0OSwgMHgzYjdlM2VmZiwgMHhkODFiMzdiYiwKLQkweDdjYzVhZGU3LCAweDRmYmUxNjlmLCAweDU3YTdkYjBiLCAweDc4ZTRhZjQxLCAweDczNTRlNjVmLCAweGMzZjcxZDI4LAotCTB4YmNiZTdmYmYsIDB4ZTI5ZjNlMjIsIDB4MGY5Yjg3OWMsIDB4YmMyNDc1Y2UsIDB4ZjFhZWZjMWMsIDB4ODJhOWQ2MjIsCi0JMHg1NTljM2Y2NywgMHg4NGYwMTNlYiwgMHhmMmUzOGRmMywgMHhkNjI5NzQ5NCwgMHhmM2E0NzJmOSwgMHhiZjJkZjU5ZCwKLQkweDM1YzZjZTU3LCAweGY3ZTU4MGZjLCAweGFlOTJiYjEyLCAweDY5NjU3NjFiLCAweGM2MmU3ZTIwLCAweDJlY2YwM2U1LAotCTB4M2ViZGY4MDksIDB4NjA3NmU1NGIsIDB4OTA4OGM5MDYsIDB4MzUyZTc3OGYsIDB4N2YwY2JmYmMsIDB4YmQ4MWRiNTcsCi0JMHhhY2VmOTY1NiwgMHgyNmY0MDdmNiwgMHgxMDljYmEzYSwgMHhlZWNmM2E0NywgMHhmOTUyOGY2ZiwgMHhiMjllMjAyZiwKLQkweDE3MTgxNGQzLCAweGZhY2EyZjkwLCAweGJmMDYzNGM4LCAweDFmNGJmZjUwLCAweDM2MmQyZmRlLCAweDc3NjhiYzU0LAotCTB4MzFlZWJiNTAsIDB4YmZjMDZkY2QsIDB4ZWUyYWUzOGIsIDB4OThmNWEyYzksIDB4YzA2ZGRkMzQsIDB4MmJkMzhiYmYsCi0JMHhmY2EyYzhiZSwgMHg2N2E2OWNkYywgMHhiZTJhMWJmNSwgMHg2M2ZhODZjOCwgMHg4YzdmZDY3YSwgMHhmN2UwNDVmMywKLQkweDZkYmZhM2M0LCAweDhmNDA2YTZjLCAweGIzYjM0ZDg4LCAweDFhOTU1M2ZiLCAweDVmYWJmZjdjLCAweDAxOWRmOTdmLAotCTB4ZDcwMTE3ZjUsIDB4NDFiMTY1NDgsIDB4NGUyZTFjZDMsIDB4ZTgyNjljOTUsIDB4Y2ExM2M1ODEsIDB4OTBlZDdmZTAsCi0JMHg3Y2VkYzRmNywgMHhlNzYxNTZiZiwgMHhmYmIyYzZmNywgMHhmZWZiYmRiNywgMHhiMjI3Zjc4NiwgMHg2OTE5ZGNkMywKLQkweDMxNGQ1ZDc0LCAweDY4YjI3M2RkLCAweGZiY2M3NTdkLCAweDljOTJhZjE4LCAweDNmMDEwZjU0LCAweDY2NDJkZDg3LAotCTB4ZGQ0YWY1ZDEsIDB4MmZhMDVkZWIsIDB4NDYxY2JiOTEsIDB4ZmI5NWMyMmQsIDB4MzE0ZGUwN2QsIDB4NWU1N2JmMGEsCi0JMHhlOTdkY2RmZCwgMHg1ODJlMzNlYywgMHgwN2NlNDhjNywgMHhmYWZkNWU5YSwgMHgzNjczODgyYiwgMHhjMDM5MzU5ZCwKLQkweDczYjIzZTJkLCAweDZmYTAzZGQzLCAweGYzN2NlYzhkLCAweGQ5ODcyNjZiLCAweGVlYjEwZjdkLCAweGEzZDdlMDkxLAotCTB4MTg3NTk3YmYsIDB4M2IyM2ZkNzAsIDB4ZmQwNDViYWYsIDB4MzNhMWZkNDcsIDB4YTZlNGU4MDcsIDB4NjA1NmJlNTMsCi0JMHg1ZWZiYmQwYiwgMHgxZmRlNTc0ZSwgMHg3OThhZWNmZCwgMHg0ZGUzMTE4YywgMHhlODlmMWUwMiwgMHgxNDk5ZTgwOSwKLQkweDc4MzMzNzFlLCAweGFiN2NjMjVjLCAweDZiNjNjNDllLCAweDJiOTdhOGZkLCAweGJkNTBkM2VmLCAweDE3YTZlMzFkLAotCTB4ZmMwM2I0NDgsIDB4YjM1ZWUyZjgsIDB4YjI3ODVmZGEsIDB4ZmU4ZmVlOWEsIDB4NWQxZjUzN2UsIDB4M2NkZTkwNDEsCi0JMHgzMjkxYTJlNiwgMHg5Y2JkNDA5MiwgMHg0YWY1MTU1OCwgMHg3ZmEyYWE2MywgMHhkMTRiMjU5NSwgMHgzYWU1M2UzZSwKLQkweDdiNDRmYjQ1LCAweDI5M2VhMmExLCAweGZmYTJhNDc3LCAweDQ1NzI4ZTZkLCAweDg5YjJmNmZkLCAweGNlZDVmZThhLAotCTB4ZDBiZDQ1NmEsIDB4M2ZlOGFlZDcsIDB4YjI4NzQ4ZmMsIDB4MDE5MTM4ZmQsIDB4MWQyNzQ1MGYsIDB4ZjkyY2EwMDcsCi0JMHhjNzZlODlkOCwgMHgwN2NkMzNkMiwgMHgyNWY5MWNhMCwgMHg1ZmRhODcwMywgMHhmNmM1ZTM3YSwgMHhmMGJiZjAwMywKLQkweGM3ZWZhYTk3LCAweDM0ZTlmZjA4LCAweDg3ZDVlNGQ5LCAweDY4YTY5M2Y3LCAweGYyNWU3OTY5LCAweDM1OTEzZjIzLAotCTB4MmQ4YzdlZWMsIDB4ZTAyZjdkZDYsIDB4MTk4ZmRjNGQsIDB4OGE1MmZlMDMsIDB4ZTdiOWFhODQsIDB4NTlmMGJkZDksCi0JMHgxMjc2NWZjYywgMHg2OWZjMDMxMCwgMHg3Y2ZkMTliYSwgMHhjZmNkNzUyNywgMHhiZGM1OTlmZiwgMHhiYmRmMDAwNywKLQkweGIxNTZhZmE5LCAweGRkMTczMWVmLCAweDkzOTc3ZDhhLCAweDJkM2MyYTY1LCAweDJjYWJkNDU3LCAweDFmZjQ1MDNmLAotCTB4ZDE0YWIyOWYsIDB4OTBmZWQxM2UsIDB4MmIwZjRmMGEsIDB4MzYzOWI3ZWEsIDB4NDViNGYwYTksIDB4MjhkZmE3ODUsCi0JMHg3MGVkZmJkYSwgMHgxNTdhYmZlZSwgMHgxY2I0NGVmYywgMHgwNGFhZWZlZCwgMHhhNjdjZGMzYywgMHhkNjUxZjEwZiwKLQkweDc4MDk1NmQ1LCAweDNiNjRmMWJhLCAweGU3ZDhhYmUyLCAweDU5NzYwNGFhLCAweDAwZjlhNDdhLCAweDdmNmEzZTk0LAotCTB4NWFkN2I4YzEsIDB4ZDgzY2IwNTIsIDB4ZDVmZjQ3NjIsIDB4MmM1Yzk2ZTEsIDB4ZjAzOGI0OGYsIDB4OTRiN2RmZjcsCi0JMHg4YjU2Zjk2MSwgMHg2Y2ZmY2IxMywgMHg1NzY1ODA5OSwgMHhmNmNiMGI4YiwgMHhiZmVjNzY5NiwgMHhmOTgzYTViMywKLQkweGRmZmJlMmJmLCAweDdlMDAxODE1LCAweGJmOGQxZTgxLCAweDNjNTZlZTExLCAweGU0MzRkOGY3LCAweGZlZDEzZDlmLAotCTB4MjZhZmE4MWUsIDB4OTYzNmRlNzcsIDB4ODFlNzhkMzIsIDB4Y2M5ZDgwODksIDB4Y2VlOWEzY2IsIDB4YmY5NGU5ZDEsCi0JMHhhYzFjODVlZCwgMHg0MWZlNDA5MiwgMHgwODU5YzZiYiwgMHhiNGUxZjg3YSwgMHgwZWQxM2YwNSwgMHg1NTgxZTQyMCwKLQkweDk1OGIxNGFlLCAweDhlYjQ4ZGQ1LCAweDY0MzE4NmM4LCAweDE5OWM0ZmMxLCAweDI1MTA1ZTc0LCAweDcwNTg0YzE4LAotCTB4YTM3YmQ0MWIsIDB4YjRkZWZiNTgsIDB4ZjI3OWI3MDUsIDB4NjM3MTA3ZmUsIDB4ZTE3ZTQ4NjcsIDB4NzEzMGI0ZTEsCi0JMHhkOGNmZTdlMywgMHgzOWNmZTBjZCwgMHgxOWE4Njk3NiwgMHhmYjhjNzFlMCwgMHg1MGE0OWNiNSwgMHhlNTk2OGYzNywKLQkweGM4MWQ0MmRhLCAweGJkMmE5M2Q5LCAweGU0NTM5NDQ0LCAweGRlNjFiN2YyLCAweDBlZTM4ZDc2LCAweDQ1YmU2ZmNjLAotCTB4NmI3ZTgwNDcsIDB4OGFlZjY2MjQsIDB4OTlkM2RiN2UsIDB4OWI3YmQwYmQsIDB4ZTNhOWVkMDEsIDB4YmMyMmU3MWEsCi0JMHgzZGY1MjcxNywgMHg0OWVlNzAwMSwgMHhhOWNhM2VmYiwgMHgyNjVmNzM1ZSwgMHhlZDNiYWZjMCwgMHhkODllYWM3YiwKLQkweDA4ZTQ4NGY3LCAweDdjMThlYmFhLCAweGY3YmI0ZmRlLCAweGQ5Y2Y4NmJiLCAweGY4NTA5MmI0LCAweDU4NTlhNmY0LAotCTB4MWNlN2MwZGMsIDB4YWYwMDdhODAsIDB4MzY3NmFmMWYsIDB4ZGNhYzljNjAsIDB4NzFmNjE4MzksIDB4ZTc2MDY1Y2MsCi0JMHhmYmM2NjVkNywgMHgyY2ViNDQxMywgMHhiZmM4MjNiOSwgMHhjM2FlOTc1MywgMHhhMmUxNTM3MSwgMHg2NzM5ZjgxYiwKLQkweGQ1Y2U3OGM4LCAweDlkMjg3Y2YwLCAweDI3NDgxZmQ5LCAweDhmNGU2NzYwLCAweGI4ZTBiYjQxLCAweDU3MzdkZDg2LAotCTB4OWQyNjdmZjcsIDB4MTE3M2Q5YzksIDB4MGRmZDgzZGUsIDB4OTRjNTdiODcsIDB4ZDM3N2U3ODYsIDB4NDQ1NzdhZjksCi0JMHhhZWJkZDRlMSwgMHhmNThmYThhMSwgMHg5Zjc4NGIzNiwgMHhmMzRjZjdiNywgMHg3MDZlZDY3OSwgMHhkYzYwOTA3MCwKLQkweDFmZmMyNjcyLCAweGYzYmU3ZjZkLCAweDkxZmViZjllLCAweDQ1N2Y3ZmY2LCAweDg4NjUwMzhjLCAweGRmODQ3YWU1LAotCTB4NzY3OWRlMGMsIDB4YTdmNTExYmMsIDB4MmEwMzM1ZDksIDB4ZTRjZTJlNDAsIDB4NjYzOWIwNzEsIDB4YzM4NjEyNmQsCi0JMHgzYzNkNTZiNCwgMHg1NGQwYjg5ZCwgMHg5MDQyOTZiOCwgMHhkNmE4NGUyYywgMHg0YjQ1NTNjMywgMHg4NWFmOTYzMywKLQkweDBmNDFhZWYyLCAweDlmMDllMWViLCAweDZiMWRiY2ZhLCAweGEwNmQ4ZDQxLCAweGY5MDRiODQ3LCAweDBiNjhmZjlmLAotCTB4OTVkY2Q3NWQsIDB4NzNkOTlkYjIsIDB4ZWIzYWFlNWMsIDB4ODcxZTUxYmUsIDB4M2NlM2RmYTAsIDB4MDEwMjg2YWYsCi0JMHhkMzY3ZDVlZCwgMHhmYjdmODUyNSwgMHg2MWFmMGU1OSwgMHhjYzdmNWNlOSwgMHgxZWVjZjkyNywgMHg2MDljN2Y1MSwKLQkweGVlZmI5YzM4LCAweDQ0ODc0N2Q5LCAweGRiMjgyMzg4LCAweDJlZjhmZWI5LCAweGZkNTZlNzdmLCAweGVlZjg4M2VlLAotCTB4YzdlZjFjNzMsIDB4NDEzMjk0ZjUsIDB4ZTRjMTljOWYsIDB4MTdlZDQxNDAsIDB4ZmVlODRiYWIsIDB4MWEyZDNhMGIsCi0JMHg2ZGNmZDM4YywgMHhiODc4MGRkOCwgMHhhOGYxYzFkMCwgMHg5ZTcwMWQyMywgMHhiZGU2NzhhNiwgMHhhYTRkMzk4ZiwKLQkweDkzNTdhMTdiLCAweDRiMmU4ZTk3LCAweDJjYmNiMDY1LCAweDgzMmFiYmY2LCAweDVmNTk2NWU1LCAweDQ1YzgyNTViLAotCTB4MmQ3ZDFmMjEsIDB4NmUzZjM5NGIsIDB4YjA3YTNlNDYsIDB4MGZkNjI1NjUsIDB4M2NiMDc4YjcsIDB4ZjM4ZWIyZDIsCi0JMHg3ZjZjMzZlMywgMHhjZTUxZTVhYiwgMHgxZjljYmQ4ZiwgMHg3N2JmODMzZiwgMHhmOTYyZDRiNiwgMHhjYjFiOGI2YSwKLQkweDMzZGNlMzA3LCAweDNlMjI2ZTAwLCAweGM2ZThkNTM5LCAweDliNDNkMWJjLCAweDVmZTIwNDBjLCAweDk4MGQzYTE3LAotCTB4YzQ0ZjQwOTcsIDB4NDAyNzhmMTMsIDB4ZWYwMThkZGUsIDB4NmZmM2E5ZjUsIDB4OWZiZTdjZDQsIDB4YjdkZjQyMWUsCi0JMHgxODllOWM1OCwgMHhmYTAzMzc5NCwgMHhmNGM4YzBlMiwgMHhjZGQ4OGM3NCwgMHhlZGZlOTdjMCwgMHgwZjkwNTdmMSwKLQkweGNkZGJiMzFkLCAweGE0Yjc0ZmEwLCAweDM4YmNhMjc3LCAweDc1OWJiNGU2LCAweGJjNzllZWI0LCAweGVkYmJiNTkzLAotCTB4YWZhZDAzNjYsIDB4ZGFjN2RmNGEsIDB4MTQ3Mzc2M2QsIDB4N2M3ZWFmYWQsIDB4MTJmNzZiMWYsIDB4ZjgzZjIyMGMsCi0JMHhjN2M4NmJmOCwgMHgxMDc0ODljYSwgMHgzMWE1NDdjZSwgMHgxNzE1MmM2YiwgMHgxZjk3NWU1NCwgMHgzZTMxNzM4NCwKLQkweDM4NThkZTY1LCAweDNkNzI1ZjE3LCAweGQ1N2RhMjdkLCAweGNhNGZhODQxLCAweGFiODVhMmRkLCAweGUxNTM0ZWRmLAotCTB4OTE1NzE4MWEsIDB4NzE4NWFkNTAsIDB4YWY5NjMzNjMsIDB4MDZlMzcxODEsIDB4MWUwZGFjM2QsIDB4Yzc2ZjIxMzcsCi0JMHhlYWRmYTgxYSwgMHhmZDA1YTJkOCwgMHhjN2NlNGJmNCwgMHgyZWEyM2NjNCwgMHgxNjlmMDVkYSwgMHgzYWMzNjBmOSwKLQkweDBhMGYyODVkLCAweDBmMjg1YzNhLCAweGE2MmE1YzA0LCAweDdlMDAzZjU2LCAweGM5MGVhNmM3LCAweGE2M2FjMTIyLAotCTB4NzFjMWZkNGEsIDB4ODQ2YmE1YzgsIDB4YmYyOTIyZjcsIDB4OGVmZTk4ZGUsIDB4ZDcxZDE1NzksIDB4YjExYmY1MDQsCi0JMHhhNjU1OTNmZSwgMHg2ZjdmOTRlZiwgMHhkZjIzMGY0ZCwgMHgwZWYzZjA0ZSwgMHhiYmYyMWVmMiwgMHgzYmQ5ZTg0ZiwKLQkweDVjMDM1ZjFkLCAweDliOWVmMDRhLCAweDI0YjVkZjE5LCAweGUzZmEzMzZlLCAweDNkODMzNjQxLCAweGI2OWU3MjA0LAotCTB4MTk2NWU3MGYsIDB4NjQ1M2ZiOTcsIDB4Y2VmODc2ZTcsIDB4YzNmOTkxOGIsIDB4YWJmY2ZjY2IsIDB4Njg0NDRkZWUsCi0JMHg0ZjYxZmNlNywgMHg0YmQ5ODViYSwgMHgwNjg3NWRmYywgMHhkMDdlODZkMiwgMHhhOTk3ZTVhYiwgMHhmOWQ1YTFmMywKLQkweDU5ZmYyMjE2LCAweDRmNTE1ZjlkLCAweGExMzA3YmQ4LCAweGRlZWNjZTc5LCAweGIzOWU0ODZlLCAweDE5YTJhYmIwLAotCTB4NWUwNWFkM2YsIDB4NzhmOGU5NDMsIDB4MDk1N2NmM2EsIDB4YWJjOWMzODUsIDB4Mzg2NGUxYzAsIDB4ODdlYzg0MzgsCi0JMHgyZWVmMzE3OCwgMHg3NGM2ZmYyNCwgMHhkZWFjZjExYywgMHhiMjI3NzExNywgMHgzZjg5MzZmNywgMHg1ZDA0ZmVlYywKLQkweDhkYWZlZTg0LCAweGUwY2I1ZmMxLCAweGIzYmJmNTRmLCAweGI5YWFlNzgwLCAweGFiN2UwMjY2LCAweGM3ZjNmZTYwLAotCTB4MzUxZmYwMmIsIDB4ZjhhZWZiNWYsIDB4MGRiOWI0ZTUsIDB4NTA4MGZkZWMsIDB4MWMzOTc2M2UsIDB4YzJmNzEzMWYsCi0JMHg1M2QwYTVkNSwgMHhlNDFhM2VlMSwgMHgzNDNiYzIwMSwgMHg0YmVmZTc2MCwgMHg4MDY3NDc3NiwgMHhmN2QxNTY3ZSwKLQkweGQwZWMwNjk1LCAweGYzN2VmNjA0LCAweDljZGI5YjIyLCAweGU5MjJlMTQxLCAweGM4ODE3ZTU5LCAweGYxYTMzZGMzLAotCTB4YjZmNDE2ZmMsIDB4YzllNmNkYjQsIDB4YjA4MzJmYTgsIDB4NGFjNzY3YTAsIDB4N2UzZmUwZWIsIDB4ODc4YWVhZDYsCi0JMHhhZmQ3MjQ3MSwgMHgzYTA3N2UwZiwgMHg3YTY5OWU1MiwgMHhhMTdmOTMwNiwgMHg1ZmU0NTEyNSwgMHhmYWY5NmVmNiwKLQkweDhhMmZkZTlhLCAweDc5MmE4ZjA0LCAweDQxZWUxZmI0LCAweDQxOGIyODVjLCAweDExMmRkOWY5LCAweGRiM2ZiYzFmLAotCTB4N2E4NDllNWQsIDB4YmQwMGY3NGIsIDB4ZGFlZmNhMTYsIDB4MzAxZWVlMmUsIDB4ZGI1N2U3MDQsIDB4NjVhOWRkYzcsCi0JMHg3MWRkZjY0NiwgMHhkMGVjYTAxMywgMHgwNzlkMWZiYiwgMHgwNjkxZTBmZSwgMHhjZGJjOTM4YywgMHhjNzI3MGZmMywKLQkweGI3YzNmY2IwLCAweGM5ODBmZGY5LCAweDAwNGE1ZTFmLCAweGY2NTkzOGY5LCAweGExNDgxNTI1LCAweDFiZjc3Njc2LAotCTB4MDVlYzJhYjMsIDB4ZGQzNmY2YTEsIDB4ZWZkODU4ZWYsIDB4OTc2ZWVjZDUsIDB4NjAwNmNiYjEsIDB4ZjVkZmRiNTUsCi0JMHg5MDIyYmYyYiwgMHhlNTZhM2RlNywgMHhlM2Y5MDIyNSwgMHhiYzdiNzNmZiwgMHhhNGY1MTMyYiwgMHg5NTMzZTRhYiwKLQkweDQxNWI3OWY1LCAweDg5NzMxOGZmLCAweDIyOGUzOWU1LCAweDk1MjVjZTJjLCAweDliZjJjOWJkLCAweGRiYjZhOTc4LAotCTB4YmRhODY4ZTcsIDB4YTc2YTFkOWUsIDB4YTVmZDkyY2YsIDB4ZDQyMWVmNTAsIDB4ZDgwOWNmNWUsIDB4Mzc0ZWMyZWIsCi0JMHg0NWJmOTYxMCwgMHgzODA2ZjdlZCwgMHhkZGI5ZTcxNywgMHg4ZjEzMzE0ZSwgMHg3YzNmMjE3OSwgMHhjODdkY2U2ZiwKLQkweDlmMzBhMjE3LCAweDhmOGVmOWUzLCAweDdmYWQ2MTEyLCAweGM1ZmM0YWU5LCAweGJkMDBmNjJiLCAweDIyYmU1OTM3LAotCTB4ZjVmYTc5YzEsIDB4YzEyMGJmMmIsIDB4NzM3NWJjZWYsIDB4OGU5Yjc3M2YsIDB4ZmZhYTQzZGQsIDB4OGE3MjhjYTcsCi0JMHg4MDc1YjVjYSwgMHg5YWYyN2FhNywgMHg3OTIwZWVmZSwgMHhhYmZmZGE0YiwgMHgyOGMzZGUxZiwgMHgzNTg2YWJmZiwKLQkweGI0ZjViYzgxLCAweDdlZDI3NjRjLCAweDIyM2VkY2Q1LCAweGFjNzZmOTFlLCAweDMyOTI3YjczLCAweDI4OWVkNjQ2LAotCTB4ZWFjYmJmZmEsIDB4MTNmZjQ0MDMsIDB4YmJmNDlkOTMsIDB4OWRhMmE5ZDUsIDB4ZDc4ZWJmOGYsIDB4NmM3NmVlODksCi0JMHgwZGYzMTJjZiwgMHg2YjMzNzU2NSwgMHg3MmY4Y2I2ZiwgMHg4MjMxZTgzMiwgMHhlMGNjNmZiZiwgMHg0N2JmOTFmMiwKLQkweDYzZmRmOTQ0LCAweGNjNTc4OTE5LCAweDczYjY1MWJmLCAweDFmZGUyMDc5LCAweGM0ZTFmYWFhLCAweDZlNzBhMzk4LAotCTB4YjVjYzI1ZGIsIDB4ODc1ZmJmYWIsIDB4YjY3M2ZiZmUsIDB4ZjdlMDgyZjYsIDB4OGU5ZTQ1NGEsIDB4Nzk4Y2QyYWIsCi0JMHgwZDJmMGQ1MywgMHgyMjc0MGFkZCwgMHg4MTI3OGY5YiwgMHhlM2M1ZDJkZSwgMHgwOWIyNTVmMSwgMHgzNjE3MmVlMywKLQkweDQ5MWViZTMwLCAweGYyYmM1YmVmLCAweDQyYmUwNTE1LCAweGMwZmJmOWRhLCAweGRmYTQ5ODE4LCAweDY0OTNmZjNiLAotCTB4YTBmMzNlZjYsIDB4ZTgwYmNjMmUsIDB4ZGUwYzdjZTAsIDB4YzM3Yjg0N2IsIDB4MjEyYmZmMjIsIDB4NWVjMTM4ODcsCi0JMHg4YTM5Nzg0ZSwgMHg3MWY5NTNiZCwgMHhjNWRiZjIxNywgMHg3NjdmMzMyZiwgMHgyODAzYTZjMywgMHg3NmNiZTZkZiwKLQkweGM4OWQyN2Y0LCAweGYwMGFiZjc2LCAweDBkNzczMWU5LCAweGNhZjgzOGMxLCAweDNmNWQ3MTU3LCAweGRjNzg1YmIyLAotCTB4MTgyZjJmYWIsIDB4ZTE0Mzg3OWUsIDB4YzBhYmZiZmYsIDB4NGFmZmY3ZmYsIDB4ZmM4MmVmZjgsIDB4YmI3M2UwMzIsCi0JMHg0ZGJlZDBhMywgMHgwZWY1ZmFkNiwgMHg2NDllNmI4OCwgMHhlNzllNWNlZiwgMHhmYWVkMmI3MCwgMHhmODE1ZGYxMCwKLQkweGQzYjMwNjY3LCAweGRjNTgzYWUyLCAweDg5NjVlNDQ2LCAweGMzMzNmZWVmLCAweDFlNzRlY2NjLCAweDc5YTg2OTFmLAotCTB4NDdjNDM0NmIsIDB4YzRjNmZlMDQsIDB4NzdmMDc2OTAsIDB4MzgzODNjNTMsIDB4MDc4MDFjMWUsIDB4OWM0MGVmMDEsCi0JMHgwYWNiOGU4NCwgMHhiMGFlZDc5ZSwgMHgyM2RjMDUwZiwgMHg3ZDM1NjM5ZCwgMHhlM2FiNzU4OCwgMHgwZTk5NzcwNiwKLQkweGVmN2UwMDk2LCAweDg0Nzk4NmZhLCAweGIwYjRjZmRmLCAweGNjN2ViNGY5LCAweGYwMTFmYzEzLCAweDFlMDBjNGNhLAotCTB4ZWY5NDAzNzUsIDB4NDZiYzUxODAsIDB4MjJiOTI4MGQsIDB4ZmZlZDk1ZGUsIDB4YzM1Nzc4Y2IsIDB4ZjNkNjVkNGQsCi0JMHhmN2ZhOTgzOCwgMHhmZjM0MDNhMSwgMHhiZmZjNzBhYiwgMHhkZDlkNWZlNiwgMHgzZWQxNWZiYywgMHhkNzFiZTU3NywKLQkweDdlMTU3ZmU0LCAweDFmOTU3ZmQxLCAweGY1ZmY5MjM2LCAweDE2ZWU5OTJmLCAweDJmYzliYmEwLCAweGZjNDBkMTJlLAotCTB4ZmZiZGY2ZTYsIDB4OGIwMTNiYzgsIDB4NWUzMDNiZjcsIDB4Y2JkZjBmNzQsIDB4ZjZmZmEzMTcsIDB4OWU5NDdkZmUsCi0JMHg3ZTY2NjhiZSwgMHgzZmZiNTNhOSwgMHg0M2YzZDlkNywgMHg0NWY2NjNlOSwgMHhlODgzMzg5OSwgMHg3N2NhZjY2YSwKLQkweDY2OWYyMDc0LCAweDVjMjJjZDUzLCAweGE3MGQ2YTdjLCAweGExMjdjYzI3LCAweDQ4ZDZhMDdjLCAweGZjZjQwOTc0LAotCTB4ZjdiMmQ2ZDcsIDB4MTAyMTZiYTUsIDB4ZTdkMmMzNjMsIDB4YjU5M2VkYTYsIDB4YzdlZjA3YzQsIDB4M2ViNDliNTYsCi0JMHg5NDg3YzYwMywgMHhmYzBkNjFmNywgMHg2ODZhNTk3ZCwgMHhjYWM1ZWUyYSwgMHg5ZWYzMTk0ZSwgMHg3MTYzMjhlZSwKLQkweDc2YTYxOWE1LCAweGZkMzhkZmJjLCAweGY3ZjNlYWM4LCAweGUzNWRkOWMxLCAweGJhNzk2MTI5LCAweDlmZDI3ZWUyLAotCTB4NWUyNGRmMzQsIDB4MzdlNDA2YjQsIDB4MWUyNTlmZjgsIDB4YzNhZTVjODcsIDB4NWM3YWE0MzgsIDB4ZmU3NjAwZWQsCi0JMHhjYjEyY2IyNiwgMHhmMmMzZDgzNywgMHhhNDc5YzRkNywgMHgyODYyM2JmYiwgMHhmMGYzNzk2MiwgMHhiMzc1NmFjZSwKLQkweDAwYjQzN2NlLCAweGE4ZmQ4ZmY0LCAweGFkOTUzNDdmLCAweDM1M2MwMDJhLCAweDMwM2U5NThkLCAweGMwZjQwNDE0LAotCTB4YTI1Zjk1YTYsIDB4YzdlNmEzN2UsIDB4ZmQ1YWYyZWEsIDB4MWNiN2VmNTAsIDB4ZmExMTdhNDEsIDB4MWYxNmE5ZTIsCi0JMHhhOTdlZDVkNiwgMHg4YzdlNjM1OSwgMHg1ZjkxOWM3MSwgMHhkNDcwYmQzMiwgMHgxMTg5ZTcyNSwgMHg2ZjZmNmZmNiwKLQkweGQ4NGIzYjA5LCAweDRlM2I2YTVkLCAweDVlZjEwYmYwLCAweDBiMDBmYjVjLCAweDc3YzZiYjkzLCAweDVhOGZmYmQ4LAotCTB4NDAzNGJlNTYsIDB4NWYwNTc3MjksIDB4ZWY3NjdjYTUsIDB4NGE1ZmU0MDAsIDB4ODdjNDFiZmUsIDB4YzU1ZmZkYjEsCi0JMHhkZjc0MDM4NywgMHg0ZGZmMDBlYywgMHg2ZjdiMDY2ZCwgMHhmNWY3NGQ1ZCwgMHhhYTdlNGMyOSwgMHg5NGFlNWRlOSwKLQkweGQzNTE5ZjUxLCAweDNiZjNhMGJiLCAweDdmZDA1YjlkLCAweGQyYzYwYjM3LCAweDkyNmFjYzc1LCAweGM5ZDU5ZWYwLAotCTB4ZDdiYzFlOTcsIDB4ZGRkMDk3NDgsIDB4ZTI5ZDMzZmUsIDB4NDg2ZmJjM2QsIDB4ZTA3MmExZjcsIDB4YmUyM2I0NjMsCi0JMHg1ZDIwMWNiNSwgMHgzM2ZlZWNkMSwgMHhhODRmNDdjMywgMHhjMGEwYmQxYywgMHhiZDFjYTg0ZiwgMHg1ZmM0YWZmMCwKLQkweGY5Y2ZmZDk4LCAweGYwOTA3Mjc2LCAweGM4YmI3ZjNjLCAweDZiMjM5ZmYzLCAweDI2ZGNmN2Q4LCAweDc5MGEwNzk2LAotCTB4NzY1ZWJkNjgsIDB4NTY2OTZjMmYsIDB4NGQ3ZmJlMWIsIDB4ZTA1OGIyMGQsIDB4YzlmNmNiMjMsIDB4Nzc4YjNkNjQsCi0JMHhkZTgzNTM2OCwgMHhiZTI2ZWEyYiwgMHhlMDQ5NDc3NywgMHg5YmY5NjI0ZiwgMHhmN2IzNDY0YiwgMHg5YTc5ZDQzZSwKLQkweDkxYjNmZjIyLCAweGI0Y2JiYjhmLCAweDU0Nzg4ZjRiLCAweGU2MjQ0M2JkLCAweGQ0NDNiZjUxLCAweDY3ZmM3YTM4LAotCTB4ZjdlN2ZmMTgsIDB4MGZlZmQ1OGIsIDB4ZjllNGNhMGQsIDB4ODhhNDQ1OWYsIDB4Y2NhZmM3YzUsIDB4NWU0MDdhYTcsCi0JMHg3YjhkZjkwNiwgMHhiZGEwYjUyZSwgMHhmNDM5OTc5MywgMHgwMTE5M2MzZiwgMHg4NjY1MTc3YywgMHg5OWE1ZDdlOCwKLQkweDk0YjNkNjU3LCAweGZhNjJmZmVkLCAweGYwZGJjZDkwLCAweDRhNmY5MTNkLCAweGU3MmM4NjFmLCAweDM4Yjc1ODI0LAotCTB4ZjllN2ZkMjcsIDB4Njc5ZTAzMTUsIDB4ZWY3MTNlZjEsIDB4YmRmMWU3ZjIsIDB4MDlhZmRlOGYsIDB4ZTZhZTg3YzYsCi0JMHhjZGQzMTk5ZiwgMHhmNGRkMDNhZSwgMHg0Y2Q1YjdiMSwgMHg5NGVhM2VmMSwgMHgyMzA0ZmQwNywgMHhkZWYxYmI4ZiwKLQkweDljYjc4OGRjLCAweDBhNGM4MTkwLCAweDU4NjRiYTBmLCAweDg0MWJkMGI3LCAweDBiZTAxMTFlLCAweGNmMGI3ZWZjLAotCTB4ZmU1NmI4ZjcsIDB4ZGM0YmZmZjEsIDB4ZTliM2RjNDMsIDB4NGU0YWY5ZDEsIDB4MTNkZWZjODAsIDB4ZWYxZGY2MTUsCi0JMHgyYjlhOTlkNSwgMHg2MGY5ZmZiZSwgMHhlMDM1N2I5YywgMHhiZmU3MGE2OSwgMHgyYWQwMWRlMiwgMHg3YmRiYmQ5OSwKLQkweDNmNDY0YmExLCAweGZkMWY4YWM1LCAweGRiOGZiN2UxLCAweGViNTdlNzQzLCAweDJmOTY0ZDY3LCAweGQyNDdhZTUwLAotCTB4MmMzNDliZDcsIDB4ZDJhOGJlYWYsIDB4NjA1YWY5OGUsIDB4NDJkZjgwZmYsIDB4ZmRkNDMxZjgsIDB4N2UyYmQ5MGYsCi0JMHhmNzc2ODk5ZSwgMHhhYzI3MmVlOCwgMHg5ZWI2NTFlNywgMHg1YTZhZjg0OCwgMHhiZjBhNWZmOSwgMHgzN2VmYTQ0OSwKLQkweGNjYjEyYmVkLCAweDdmMWYzYTBmLCAweGZkMDQ5NGNjLCAweDA2MzUzZTViLCAweDc0YWQ3ZGYwLCAweDBlY2Q3ZmYxLAotCTB4OGYxMzJjOTgsIDB4YmU3MGU1NDQsIDB4MjU3YTY1ZTQsIDB4MmNlNWZhNjEsIDB4MWNlNTg1ZDIsIDB4OWJhNTg3ZDIsCi0JMHhmOWVhYmNiMCwgMHg0MmU1ODFjNCwgMHg2NWQzY2Y3ZSwgMHgwOTkxYmY3NywgMHgxZjVkNTVmZSwgMHhmZTdiNTNiZSwKLQkweGUxZTdiZmE1LCAweDhmMzc1MDNiLCAweGE5NWM4MzZhLCAweGFkOWZjYWVmLCAweDBiN2FhZmQ2LCAweDBkMzhmZWZiLAotCTB4YmZlZWM3ZjgsIDB4MGY1MWRhNjcsIDB4YjM3N2I2YjgsIDB4ZDNjZTcxYmQsIDB4ZGRmYzYxOTksIDB4YjMyZTU5ZmYsCi0JMHhlZTk3MTU3YiwgMHg1YTRkZWY2NSwgMHgzNjMyMThkOCwgMHgyNTc0ZmIxMSwgMHgwOWY5ZTE2NywgMHgyZGU0Y2RmMCwKLQkweDVjNDI2ZjgyLCAweDBkMDNmZjJiLCAweDkzMmZjYjhiLCAweDc1MDVlZmYwLCAweGM0NzgzNWY4LCAweDc5NjUxN2YyLAotCTB4NjJlZmE4NjUsIDB4NTYwZGY5ZWQsIDB4NzE3OTA0YWYsIDB4ZmI1OGEzMjMsIDB4NWRmZTJiNzIsIDB4OGZjNGQ5Y2YsCi0JMHgzYzJlNzJlNywgMHgzZGMzMmI2NSwgMHgwYjk2M2IwOSwgMHg1NGQ0ZmJmOCwgMHhlODk2Y2VlMywgMHg0NjlkNDVmOCwKLQkweGZjNGRjZjk2LCAweDA1YmY2MDgzLCAweGIxODQ5ZjYwLCAweGYyMDZjYjc3LCAweGUzMzY3NDM4LCAweDU0MmFjM2Y3LAotCTB4MGZjZTA1ZmUsIDB4MzMxNWVjMWEsIDB4ZTE3MmQyMDYsIDB4NDgxOTI3NDAsIDB4YWQ5ODdlZTksIDB4MjBjZmZkNmIsCi0JMHg4NmI3NjA2ZiwgMHhjZmFmYmRjMCwgMHhlMzAwZmU0NiwgMHgyZmRjNjIyYiwgMHhlODNhMTVlYywgMHhmMmM0ODJmNywKLQkweDBjZmIzZDhlLCAweGE0ZDRiZGUyLCAweGNiYmQzZjYwLCAweGZkMDMxOTVlLCAweGE4YjYxNDZjLCAweDJiODA0NTFmLAotCTB4NTcyYWJkZmMsIDB4ZTQ0YzdiMTgsIDB4MWQwMzBkYjEsIDB4MDQ4NWZkMTEsIDB4NDE3YTI1ZGYsIDB4ODE5Y2Y1NjIsCi0JMHg0ZDdkYmUzZiwgMHgzZDMwZmExZSwgMHhjMmZlODdhMCwgMHg3ZDgwY2VlZSwgMHg2MjEzZDMwYywgMHg5MmZmZjU4MiwKLQkweGNkMjFhZmRmLCAweDVmMGYxMDk5LCAweDAzNDE4NGYyLCAweDU0N2JjNjdhLCAweDgzM2RjMzFjLCAweDE2N2I1MzNmLAotCTB4MmVkNGQzY2EsIDB4ZDQyZmYyODUsIDB4MDNmMjg1MmUsIDB4Zjk0Mjk3NmEsIDB4YTE0YmI1MTEsIDB4MTBiMTc0NWMsCi0JMHhiZTIyMjRkZSwgMHhkODYyY2U4MSwgMHhhODNiODg4ZiwgMHg5MDNmOWJkNywgMHhiYjA2Y2RjOSwgMHgxZDYyODY3YiwKLQkweDhlYjhmNGZiLCAweDNmNWRhYzE3LCAweGM3NWQxOWZkLCAweDY5MDdiYjBiLCAweDI0NGJiZWUwLCAweGZiZWVmNDc4LAotCTB4ZmU5NWU2NWIsIDB4N2Y4ODhkM2UsIDB4ZjEwN2RiYTgsIDB4ZDJlYzE3ZWYsIDB4ZTgyZmRjYTIsIDB4MGUyZWM3ZjAsCi0JMHg1MDMxNTdlYSwgMHg3N2YzZTM4ZiwgMHhmMzBiMWM3ZiwgMHhlMWZhNThmNywgMHg1NmU4OTRlYSwgMHhiZDU4NmIyNywKLQkweDg0NWU1N2UyLCAweDM5ZGQ4MzZiLCAweGNmNGJmNjAzLCAweDRmZDgzOGY3LCAweDdlMWZjNzQxLCAweGU4M2FmNzBhLAotCTB4ZWRhNzE4ZmMsIDB4ODIzNmZhOTUsIDB4ODdkZWE2N2UsIDB4NWY2MmRmN2EsIDB4NjFlYmZmNzQsIDB4YjNiYjBiZmMsCi0JMHhkZjk0Mjc2MSwgMHhmNjVlNzYxMCwgMHg0Mzc5NzdiMSwgMHhmNzBhYmJmNywgMHhhZmExYmI3MywgMHhkYzJiZWUxOCwKLQkweDliMGU1OTdlLCAweDJmNjBkYTI3LCAweGM1N2Y3ODQ3LCAweDM4ZmVkMGY1LCAweDgxMmJhNzFjLCAweGFlN2I2ZmFmLAotCTB4ZjExMWYzZDUsIDB4NTBmMDAxZWUsIDB4NGJhM2M4M2IsIDB4NTYwZmEwYjEsIDB4Yzc2Njc4ZjMsIDB4ZTM2ZjQxYWUsCi0JMHgzMjIzOTdmZCwgMHgzODVmYmY4MSwgMHg3NzNjYTZjYywgMHgxMjc4ZTEzZiwgMHhiZDNlZmU2NSwgMHhjMmY1ZjAwYiwKLQkweGMxMDc0ZmJlLCAweDNmMTRhMDdiLCAweGM5ZWZlMDgzLCAweDYwZTA2OGZlLCAweGZlN2RmZTQ1LCAweDAzMWZhZmM4LAotCTB4ZjFmZGExZmEsIDB4Mjc0ZTE1ZWYsIDB4NmUyMGFhNWIsIDB4ZmZiOGQzM2YsIDB4YjY2OTZjMTAsIDB4ODgyYTgzZTUsCi0JMHg5MTRkY2ZkYiwgMHhjZjM5NDMwZSwgMHhlMjBlMzU5ZSwgMHg3OWRmMjJmNSwgMHg2MWY5NmU0MSwgMHgzYWI3NGEzOCwKLQkweDJiOGY1MWFhLCAweDI0MTJlNjA3LCAweDMxOGQyYTE3LCAweDIxNjA1MWZjLCAweGY1MTVlMjg3LCAweDhhZTkyOWYxLAotCTB4MzllZDEzZmUsIDB4Yjk0OWY2OGEsIDB4ZmJkYTI4MzcsIDB4ODYzOGExZWYsIDB4MDZjZjdlMDcsIDB4NDM2NWY0NzgsCi0JMHg4M2VlOGQxYywgMHhhN2I1N2RmZCwgMHhjYTc3Y2M2NCwgMHg5NmZjN2RkZiwgMHhmMjdkNjgxYiwgMHg3YmUwNzdkMywKLQkweGY2ZjAyZjZmLCAweGYxMmIzYmM5LCAweDUyZjU5YmVmLCAweDIyYTllYTc4LCAweGExZWNhNjc1LCAweGM5ODMzZjhkLAotCTB4ZmQ0MmY2NTQsIDB4YzMwZjI3YmUsIDB4ZDhkZmQwYmIsIDB4Mjc2MDg4NWUsIDB4OTdhNjExZDQsIDB4ZDQxN2IyNDYsCi0JMHg5YmU1MDI3NiwgMHgzOWJlMDUzZiwgMHgxNmE5YTVlYywgMHg2MTdmMGZjOCwgMHgyMDY5ZDdlNCwgMHhlNDBmYjY5NywKLQkweGZiNzA2NmVmLCAweGY0ZmQxMjIxLCAweGZlYzkxMzlmLCAweDI5ZmRmMDc2LCAweGJmODhmZDM1LCAweGM5Y2EyZDZmLAotCTB4YTEzZGQ4YzcsIDB4M2VkN2NhNmYsIDB4NzY4NmJlMDEsIDB4YWZkYjg3YjksIDB4Y2ZmOTU0YmMsIDB4NmYxZGU5ODYsCi0JMHg5ZWZlMDNkZiwgMHg5NGRjMzJhMywgMHhiNWJmYmZlOCwgMHgwZTVmZmUxOCwgMHhiODU5M2RkMCwgMHgwNGQ0ODFlNSwKLQkweGZhMDNkZGZjLCAweGE3ZjcyMzcwLCAweGViOTAzNjdkLCAweDFmZmJmNTUzLCAweGI0MGUyZDQ4LCAweDI4MWYxNTkzLAotCTB4YTVmYjkzZmEsIDB4OWFmYThhYjUsIDB4NDM3ZDY1MmMsIDB4ZjFlMGRhZjksIDB4YzViMWY0OTEsIDB4YmJkM2NlOGYsCi0JMHg5ZjllZTFmMywgMHgzYWVmZjYxNCwgMHg4MTI3YWZmNiwgMHg0YjdkODdmMywgMHhiYTdlZGY5MCwgMHhiZGZlMTk3ZiwKLQkweDQ2ZmY3NTU5LCAweDAxZjgxZjNhLCAweGIzOTA0NzE3LCAweDk3NGQ0ZjgyLCAweGVhYzIzYmQ5LCAweGVmOGFiZmY2LAotCTB4ZWZkYmJlMzksIDB4OGY2MTQ3YmQsIDB4MzMyZjVlNzksIDB4OWM1ZWZiZjksIDB4MTNhMGFmNWIsIDB4ZjllZWZiM2IsCi0JMHhlOGZmMGY0ZCwgMHhlZDJiODgyYiwgMHg3OWQ1NzY2MSwgMHgwNTFmOTMyYiwgMHhjMGQzM2ViYiwgMHgxNjFlOGJkZiwKLQkweGMwYWJlOGNkLCAweDNkYzBkN2UyLCAweDdlMDZmZjlhLCAweDAwMzM0YzJiLCAweDAwMDAzMzRjLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4MThhZGZmMDAsIDB4ZjUxNDcwN2IsIDB4N2JkYmRiZjksIDB4Nzk3MjRiOTIsIDB4NzEyMTEyNDAsCi0JMHhjMjIwNTcyZiwgMHg0ODQ5YWM5MSwgMHg5MmVhNDkwMywgMHhmMDNlYTQxMCwgMHhhMmEyMTkwMCwgMHg3OTllMGZhZSwKLQkweDJhOTNhODRhLCAweDAyOGQzNjFkLCAweGQ2ZDM2ZDUyLCAweDRmNGUyYTJhLCAweGQxOTU0YTJjLCAweDI1NjJiYzM0LAotCTB4NDA1Njk0NzgsIDB4MmYyYTdiMWQsIDB4NDE5Y2NhNjksIDB4ZWU0MjE5MjMsIDB4OGNjMzhhOGMsIDB4YmY3ZGZhMWQsCi0JMHg1ZWRkY2RkZCwgMHhjOWE3NTUwMiwgMHhmNmZiYmYxZiwgMHhjZmRlZjhmNywgMHgwNTA0OGFmMCwgMHg1NzFhMDE5MiwKLQkweDAyYTYyYTI2LCAweGM4ZGM4MjgwLCAweDAwYjVmYjcxLCAweGJiNGM2MTc2LCAweDk0ZTAwYjNkLCAweDE1NzAwNGM5LAotCTB4YTUwMjlmZDAsIDB4MzAyNzYxMDAsIDB4ZjBlZmRkMzgsIDB4YmRiZjQyM2QsIDB4MjI1ZjFjOTEsIDB4OWU1ZWVmN2UsCi0JMHg3N2RjMjMyMywgMHg0MDU1YTU2MCwgMHg1ZGZkMTJmOCwgMHgzNjFiNWQxNywgMHg3MDk1NjNkZiwgMHhkNDgwMTk3ZiwKLQkweDBmYjkxY2UxLCAweDFkMzAwYWQwLCAweGU3ZjAxNWRmLCAweDMyYTNhNDU4LCAweGU3ODRkYjkyLCAweGY3MTZmYWVlLAotCTB4MjQxMmZjNTUsIDB4ODI4ZjlkMjAsIDB4NzYwNDhmNGUsIDB4MTU3OThmODAsIDB4MDYyNDI3OWUsIDB4OGRmM2M0OWYsCi0JMHgyMmIwNzg0NywgMHgzODEwMDMzZiwgMHg4ZWM3MDc3ZSwgMHgwMDRhYjMzOSwgMHg4MTRmZDM5NiwgMHg4MTU4NzdiZSwKLQkweGMwMDViZjY3LCAweGVmYjQyYmVmLCAweGRmOTdjYmNiLCAweDZmMDg0OTA0LCAweGYyODZmNGIxLCAweDQ5NzBmYmQ4LAotCTB4OTBlMzAzNDMsIDB4YWFkY2VkN2UsIDB4OWQ1YmI3YmYsIDB4NzhjOWZlYjQsIDB4ZmYxZTAxYWUsIDB4YjVmYmM3ODIsCi0JMHhkN2VmNjQxMCwgMHg3YjdkYzBlZCwgMHhmNWY5N2VjYywgMHgwZGZiZDM5ZiwgMHgwYWY3OGNiYiwgMHhiZWY0YzQ4NSwKLQkweDBhMDNmNGE5LCAweGIzZWNmMTJmLCAweGI2YWRmMDg5LCAweGY5YWFmOGFiLCAweGIxYmMzZjZmLCAweDgzN2FmOTE4LAotCTB4NjlmODZkMTcsIDB4NjRjNGRmNjgsIDB4ZDk4ZmUyZjAsIDB4OTFhY2E0MjgsIDB4OGNkYzZjNzIsIDB4ZTE0NWE0OGYsCi0JMHg1Y2ZjN2RjMSwgMHg0NzM3OWQzZiwgMHgxYjRmZTY3MiwgMHg0NDkwNmYyOSwgMHhiNTYxYzkxMywgMHhiYWI3YzU0YiwKLQkweDgwMDU5YmUyLCAweDliNzc1NmY4LCAweGUwMmJiODAxLCAweDEwODNjOGQ5LCAweGRiYTBhNzgzLCAweGEzM2JmM2U2LAotCTB4MmE1ZDg3ZjQsIDB4NWZkZDA1OGYsIDB4YWFmMmNlYTcsIDB4MDFkMTJiNmIsIDB4NDA1ZTJhZWQsIDB4YTY3YTQxYmIsCi0JMHg0NzQ5NjA3MSwgMHgxMzlmMzA3YywgMHhhYzcyZTFiNywgMHhlNDkyYTMzYiwgMHg4MDgzOGM3NCwgMHhiODllYzg1MCwKLQkweDJkZjQ4ZWQ1LCAweGVmYTM5ZjU0LCAweDFmYzU0ODRlLCAweGMyNjY3OTk5LCAweGNiZDM0MGIzLCAweDJmNzdkMmMyLAotCTB4NTE2Zjc4NzIsIDB4NDg4OWEyZjcsIDB4NzVkZjFjMDEsIDB4MWNkNDMxZWYsIDB4MGMzYzE1MmMsIDB4MmM1MDYyZGYsCi0JMHgyOTYzOTdhNCwgMHhhNDY2ZWNiZSwgMHhkZGNmMWU3MywgMHgxYzEyZjNlZCwgMHhmZjEwZTAxOSwgMHhhZTA0OGFiMSwKLQkweDNmZWY2MzhkLCAweDdjZWJlZjQyLCAweGIyZjhiMzFkLCAweGIzNWYxODliLCAweDM3YTg3ZDVkLCAweDVmYzI5YTRlLAotCTB4OGYyOTE4NGEsIDB4ZDBjZDVjYTgsIDB4NTc5N2ViYTcsIDB4NTllYzg2ZGQsIDB4ZDdlNmFmZGYsIDB4MWQzMWJhY2UsCi0JMHg1YzA0YjhmNSwgMHgxNmZiYTQzNiwgMHg2MTBjMGQxZSwgMHhkZmU2Y2I3OCwgMHhlMDMxMjZlNiwgMHg1ZjI4MTllZiwKLQkweGY0NGE5ODJlLCAweDJkMDU4NGZhLCAweDY4Y2ZkZTAyLCAweGQzOTgzNWY5LCAweDU2NjdlNDYyLCAweDhmZDc0ZWZkLAotCTB4ZjQ5MWNmMmUsIDB4ZjlhYmY4YTgsIDB4N2M4NGEwZjIsIDB4OThlNzZkMGUsIDB4YWE4ODM1MWQsIDB4OWY5NDM2OWQsCi0JMHhjNDYyYzNmYiwgMHg0NWU0MTBkZiwgMHhlZmE5ZTkwZSwgMHhlNDkyNzAzYSwgMHgwM2FlYjFkOCwgMHhjZTgwMTZjYywKLQkweGFkNmM1ZDc1LCAweDdjMDMzYmI3LCAweGQ5OGZlMzNlLCAweDgzOGQwOWFmLCAweGMxYTU1YmY4LCAweDc0Nzc1ZjhjLAotCTB4MWM3ZmNhM2YsIDB4MzAzMmNiYmMsIDB4ZjgwMmU3MGMsIDB4MTNiZjdkOTMsIDB4YmYzNTlmOTAsIDB4NjJkOGYyZjgsCi0JMHg3OTQzNzZhMiwgMHhiMjA3ZjMwYSwgMHhmNGEzYWJiOSwgMHg5YzAxNTgxNywgMHg1YjY0N2Y0OCwgMHhjMzJiN2Y4MiwKLQkweGEyN2VhYTIzLCAweGZlZmY2ZGQ5LCAweDcxOWEyNzQ5LCAweDBiMWRmZmJmLCAweDE1ODNkYjMzLCAweDFjZmUwZjRmLAotCTB4MTJkYjM1ZTEsIDB4NTNmYjljOTgsIDB4ZmRhMmM5NDEsIDB4MGFmZDkzYWQsIDB4OGE2ZTU4MWUsIDB4ZGM5MzM0ZjQsCi0JMHg2ZGM1MTMzYiwgMHhmM2Y5ZmZiOCwgMHg4MWRkNWY5MywgMHgyNzU3Y2FmMCwgMHhmOTI2NDQ4YSwgMHhkZjg0NTA5MSwKLQkweGVmYTAxMWIzLCAweDNkZDhiMzNiLCAweGNiYmM1NTkwLCAweDVmZTRmZjM0LCAweDcyOWJmNjllLCAweDRkMzk3ZmRhLAotCTB4ZmViYTNjMjQsIDB4OTBlZjNlY2UsIDB4MzVmNWU1MDAsIDB4Njg1ZGYyMDQsIDB4YTUzOGU3ODIsIDB4ZDcwZjg0Y2YsCi0JMHhlNjljNzY5YSwgMHgzNmFkM2VkMCwgMHg3NWU5Mjc3OSwgMHgzOTdmYjNkNSwgMHg1NGZjODY1ZSwgMHhkM2YzN2NiZCwKLQkweDk1YmU5MDMzLCAweDdhMDU4ZDFmLCAweDExZDdhYTI3LCAweGU0MjkyMGYxLCAweDUxZTAzOGE1LCAweDlmMjY4MGUzLAotCTB4ZmYwZWVkZGEsIDB4YTU3MTMxYTcsIDB4MDBjNTIzYmUsIDB4Zjk2NTc2MzcsIDB4NDc4OThkM2YsIDB4MThjYWEwYjUsCi0JMHgxZjk4ZTdlZSwgMHgzNWZlNjlkNSwgMHgyMGRmOTc4ZCwgMHg0ODQzZDQ3ZCwgMHhiMTEwOTM4ZCwgMHhmMjE1NWQ5MiwKLQkweDIxNzE0NDljLCAweGM5OGQ4NGYyLCAweDNlY2VkZTNmLCAweDJlY2M0YzEwLCAweDUzMjA0Y2ViLCAweDAzNGMyZjdjLAotCTB4YWZmOTI2N2IsIDB4ZmMyZmNhYWMsIDB4OWJhZGU0YzQsIDB4NDJmZDM2NTAsIDB4OTNmZmVlYWEsIDB4YjU4YjRjMTYsCi0JMHgzNzg2OWVjZiwgMHhkYjM3M2VjOSwgMHgzODBlN2Q5OCwgMHgzYzY3Zjk4MCwgMHgyOTBiN2Y5ZSwgMHhmYjMyZmNlYywKLQkweDg2MWZjYzU3LCAweDQ1Y2I0YmYzLCAweGMwYzUxNzMwLCAweGVlMjg5MDVlLCAweDQ1MDliNjE1LCAweGFjZGFlMDBmLAotCTB4OTY0YTY1ZTksIDB4YWRmYzQ0MmYsIDB4OWVlZGY4ZWEsIDB4YjczYzk4ZjcsIDB4ZjA4YTc4M2MsIDB4ZmQzMjc2MWUsCi0JMHhkY2FhN2JjMSwgMHhjNGQ0MWNjMywgMHhmNjY1YTllNiwgMHg3YmZmMzQyZiwgMHg3ZGNmZTBjMSwgMHg5N2M4OWNjZiwKLQkweGRkYmVmZGYxLCAweGVkMDFmMzUzLCAweGQ4M2U1ZWY5LCAweDY3Y2ExY2Y3LCAweGZhNzgzMTMwLCAweDBmM2I1YzYxLAotCTB4ZjI4ZTM4N2YsIDB4NzViZDNjNjIsIDB4ZTAxYTVmMmQsIDB4NDc4ZDRlMDEsIDB4N2UwN2M0NzUsIDB4YmJlYjkxM2YsCi0JMHhlMTgxZjY0MCwgMHhkZTg3YzU4NCwgMHhmYzk4ZDM0ZCwgMHgzMjZmNzlhYSwgMHg2ZmRjM2ZlOSwgMHg0ZTllMmZhNCwKLQkweDNlOWQ3ZGZkLCAweDljZmQ3ZGZkLCAweGViZWFhZGQ5LCAweDlmOTgzNWJjLCAweGNjOWZkZjhhLCAweGVmYWMxODExLAotCTB4ZTYwYTRmOWYsIDB4YmJlOTM4YTcsIDB4OGE5NzNkNGIsIDB4ZDViZDhjNzAsIDB4NmZkNDRmZDAsIDB4MzdlMzFkOGQsCi0JMHhjMzUzNTdkMiwgMHhiZWMwNmQ4OSwgMHg3MTNmMTQyYiwgMHg1ZmI4YzgwZCwgMHgyNmE2Zjk5NywgMHhkMWQ5ZjAzNywKLQkweDc2NjkxNmNlLCAweDY2NjllOTA2LCAweDgyYjczYmNhLCAweGI0OGJkNzZhLCAweDc0M2I3ZGY4LCAweGU1ZmQwMDU4LAotCTB4NjdmNWE5YTQsIDB4M2EwNzVjNzYsIDB4NjM5MTZmN2UsIDB4Y2E3MmFmZTMsIDB4ZjdlYTY5NzQsIDB4MjU0YWJmOGYsCi0JMHgzZjFjNTFlNCwgMHgzYWIyNzJlZiwgMHgzMzliYTI2NywgMHg5MGQ5NzNiMywgMHg1ZjcwZTc0ZCwgMHgyODFkYTAwYywKLQkweDBkYjEzNjlkLCAweGRmNzk5MWU5LCAweDU3YmM2ZTM1LCAweDkzZTQwZDY3LCAweDY0ZjdlODFmLCAweDA3ZGY2NjVlLAotCTB4OTE5NmY3YjgsIDB4YzgxY2MxYmUsIDB4OGE0ZmY1NjcsIDB4M2JhYzM4MTUsIDB4YTBjNTYzYzIsIDB4YmU1MGYyODQsCi0JMHhlMjU3MTYwNiwgMHgwMmQ4NjVlMywgMHg0NzQ4OWQzNSwgMHhmZGQ3N2QwNSwgMHhiOGE0ZWQxMSwgMHhlOWQ0ZDRjYSwKLQkweGM2NWUyNTFjLCAweGJkMzQwN2MxLCAweDlhOTlhNzE1LCAweDhmZjE0NjNhLCAweGU5MWY2OGRiLCAweDVlMGU4MzZiLAotCTB4N2YzNTVmZjUsIDB4YzY3MjY5OTYsIDB4ZDZjN2NmODQsIDB4NWM1YTBkMzMsIDB4MTVkOTI3MGYsIDB4ZGIyZmU5MWUsCi0JMHhiODQwN2E4NywgMHg0MDM4MWNjYywgMHhiNDNkN2EyYiwgMHg0MjY3M2VhMCwgMHhjYmFmN2Q0MCwgMHg2NzI5YmYxOCwKLQkweDc4Zjk2MTJjLCAweDMzMjM4YjJhLCAweGU3YWVmNTM1LCAweDY4ZjQ4MDlhLCAweGViODU3Y2E3LCAweGQzYzgyZTI2LAotCTB4YjA4ODEzZmEsIDB4OTk5NzAyNTUsIDB4NWIzYjE0NTYsIDB4YWQ4ZjgzNjcsIDB4YWQ4OWEwNzMsIDB4YWQ5ZGExNzMsCi0JMHg1YjA3NDAzNywgMHg1YjIwODI2ZiwgMHgwZGEwNGE2MSwgMHhlYjVmZmM1OCwgMHgwYzNjYzNlYSwgMHhhMjZlNWQzZiwKLQkweDE4YmM1YzdjLCAweDg3ZjM0NjlhLCAweDJlYmM5YWI1LCAweGVhOGMwZjJmLCAweDFlNWMzZjI1LCAweDY0Y2U0MDczLAotCTB4MmU0ZTVkNzQsIDB4OWQ5OGYyMTMsIDB4OTFiMTcyZWIsIDB4MDczZGUyM2QsIDB4YWQ2OTMzZjgsIDB4ODc3YjEwODAsCi0JMHg5OWRlOTI1YywgMHhlMDk5ODIwNSwgMHg1YzE4OTAyYSwgMHg1MWU1MWRmZCwgMHhiMmNkOTIxYSwgMHg1NGI5MTQ3NywKLQkweDhmMjc2ZThkLCAweDkxNzE3MjZhLCAweGVhOGQ4ZjBkLCAweDYwNWJhZjZiLCAweGNjMzdhZWIwLCAweGZmMTQ5OWQwLAotCTB4NzIxM2VhNDcsIDB4ODRlMmNlODgsIDB4MGMwNTJmY2EsIDB4MjFmNzdlMTEsIDB4NmJlMzE5OWYsIDB4YjM2NTUxNzEsCi0JMHhmNzRlZTEwNywgMHhlMzE5OWY0OSwgMHg2NTU5NzE2OCwgMHg2YWM0NDU5MSwgMHhkZjYzZjViMywgMHg0NzY1ODQ2YywKLQkweDFmYTAzZTUyLCAweDNiYzgzMWQ5LCAweDg3YmMzZTUwLCAweGZhNTRkMjg3LCAweDdjYTdlMzllLCAweDEwMWZlMzY5LAotCTB4MDc2NTRmYzksIDB4YWRkNTkwNDAsIDB4MTdlNDU1NjgsIDB4YWVlZjM1N2UsIDB4YmE3YWE5NzEsIDB4NGIzZjI2ZDksCi0JMHgwZjZmNTg3ZSwgMHhjM2M4MDkyNCwgMHgwY2VhZDY5YSwgMHhhYzFiODdjYSwgMHg4YzlmYmJlYSwgMHg4OWJlYTYxNSwKLQkweDFlMjFiMTcyLCAweDJmOTQ2MTdiLCAweDA4MWM1N2RjLCAweGI5YTEzODg3LCAweDQ3YTUxZGM1LCAweGYwMWRmZmM3LAotCTB4Nzg0YWY5ZmUsIDB4YWZjYTY1MGYsIDB4MDliZjI5YjksIDB4YzYxYmViMjIsIDB4YjNiYjc5NmIsIDB4OTdjNDRjYjMsCi0JMHhhMzE3MGU5MCwgMHhhOTM4OTQyMywgMHgyNmRjODViOSwgMHhkZTk3YjdjYiwgMHhmNmFhMjcwYiwgMHg3YjZjOTdiNiwKLQkweDc1ZWQ3NDdhLCAweGQzZGRiYjRiLCAweGI3MGY3ZTQ3LCAweDgwMjdiMzdlLCAweDQzM2Y4NmVmLCAweDVkZWY3OGM0LAotCTB4Y2U4ZmJjYjcsIDB4Mzk0MjlhMzUsIDB4NWY5N2E4NDUsIDB4OTJiNjljMjYsIDB4Y2FmNmU4M2QsIDB4MjA5NjkyYTEsCi0JMHhmODEyNmRkZiwgMHhjYTBmY2NhZCwgMHg5Njc1YzM1ZCwgMHhlMWVmNmEyNywgMHhjYTFlZjhhNSwgMHhhYmU3ZDhhMywKLQkweDRhMGZiMmMyLCAweGQyMGU5YTZhLCAweDU3YjcyYTVhLCAweDM5ZTEwZWUxLCAweGYyMzZmNDQyLCAweGZmYTQ2NTkxLAotCTB4YWM4Zjk0YzEsIDB4OWM3ZjMxOWYsIDB4MTY5ZGRhYTAsIDB4MWZmN2JhYTcsIDB4MGFiYzc4NzksIDB4ZGZjNjIwZmEsCi0JMHhiYzVmZjcxYSwgMHg4ZjhjMmZmMCwgMHg5MTRlNDM4ZCwgMHg3YmVkOTc4ZSwgMHg3ZGVhOTlhNiwgMHhjYWIwY2ZkZCwKLQkweGRkMTFjNDMzLCAweGQ5NzY2NmVmLCAweDc3M2IzYzAyLCAweDVmM2E1MmNkLCAweDg3OGY1MWYxLCAweDNkNzVlZmUyLAotCTB4ODMyYTM2YTEsIDB4YzYyN2RkYzMsIDB4ZDdhZmY2YWIsIDB4M2Y3MGRmZTksIDB4NmU3YzRmMjQsIDB4YTY0ODdiNDcsCi0JMHhhN2NhOGIzYywgMHhlZjM3NjgzZSwgMHhhYjdmMjFiNywgMHg2MGQwN2VhOSwgMHhmNmFiZjE4NSwgMHg1OGZmN2E5NSwKLQkweDU2MWZlNDdmLCAweDE5ZjAzYmVhLCAweGE5NWRmODg1LCAweGNiNjJiZmQxLCAweDVkOTEzNzdkLCAweGZiMWJmNGFkLAotCTB4NmNhZmJkNDEsIDB4ZjZkNWNlZDQsIDB4MWYxM2Q3ZjgsIDB4ZTc4ZGRiYjUsIDB4Y2NhZmE5MWEsIDB4ZWIwY2ZhYTcsCi0JMHg3NWQ1MGYzMSwgMHhhYTViZmI3MSwgMHhkOGQ5NWY1OCwgMHgxZmZlZmM2NSwgMHgyNDk1ZjYzNywgMHg4MWJmMmQ2MCwKLQkweGQ3MmU0NzU2LCAweDRlN2YxMGNlLCAweGZkNTllN2Q2LCAweGY1NmRlNDM2LCAweDhiYTJjZGYzLCAweGM4YTc2Y2UwLAotCTB4ZjVkMWViZTIsIDB4YjYxZTdiMTAsIDB4ZDE1YjMxYTQsIDB4NDZlNTc1ZmQsIDB4YzNjN2Q1OGUsIDB4MzY0YmRmZmQsCi0JMHg3ODI4ZTg4OSwgMHhiZGQ1ODMyOSwgMHg3YWIzYWY1OCwgMHhkOTg4MWQwMywgMHg4NmNhMDE2YiwgMHgzZDdiZmI0MywKLQkweDQyNmI5MjI1LCAweGU3NzdhZjNjLCAweGZmNGY1NDg5LCAweDY3MDQ5ZDc1LCAweGY0ZmE1MTJjLCAweGRmOWFiZTdhLAotCTB4M2VhNTY1NTEsIDB4OTNlYzdlZTksIDB4ZWYyMTBlYzgsIDB4MzdiYzcyZTksIDB4ZmMwNWIwZmQsIDB4YWEwNDNmYjgsCi0JMHg5YWNlODYzZSwgMHhmMzNlNWQ1OCwgMHhlNDllNGVjOCwgMHhmZDUxOGZjZiwgMHgwMjY5OTZkOSwgMHgwZTFlNDYyMSwKLQkweGEzMDgwYzYxLCAweDRkMzZmNWY0LCAweGE5NzkwOTdmLCAweGYxNDRmZDg2LCAweGU0ZmRjMzJhLCAweDdlYzM1Y2QyLAotCTB4MmI2OTIzOWIsIDB4MGE0NTAxZTEsIDB4OGUyODRiN2EsIDB4NDhhNGVmYWIsIDB4MjBmNzBjNTMsIDB4NWZiOGZmODQsCi0JMHg0MzcxODlhZSwgMHg2NGMzOWNkMiwgMHgxNWNlMTVjZiwgMHgzNjkwZGU2YywgMHg5ZTc4ZDBiNywgMHg1ZjEzY2I1ZiwKLQkweDg3YjgzM2I2LCAweDY1N2Y5NTdjLCAweGU2NzVlODM2LCAweDdlOWUxMTgwLCAweDEwOTIxZGI0LCAweDM5YThlM2FmLAotCTB4MDBhMTZlNmUsIDB4YzEzNjI1ZDUsIDB4ZDVjYTVkZjgsIDB4NGMwMjYyZWMsIDB4ODYxYmNjMzAsIDB4OTYxY2VlZTUsCi0JMHgwOTQ1ZDkyYiwgMHhmNzIwYzhmYywgMHgxZWExYjk3OCwgMHgzNDM0ZGQ1OCwgMHg0MjJhMjljMSwgMHg3ZDYzMGY1NCwKLQkweGQ0NjdmOTQ2LCAweDI1OWZlNTE4LCAweDdlM2RlNTFiLCAweGQ5ZGU1MTg1LCAweDVmNzk0NjRkLCAweGFiOTQ2MmRkLAotCTB4Y2RjYTMxNWIsIDB4ZTFhNjcxYjMsIDB4NGFmNmM0ZmMsIDB4ZjM3OTNjMDMsIDB4ZDdmMzg2MGQsIDB4ZTAxODE3ZjgsCi0JMHgzNzZmZGJhOSwgMHg3MWQ2OWY5YywgMHhhMGJmNjFhZiwgMHg1ZjYxOTU2YiwgMHhkOWNiYjNiNywgMHhkNTgxYjVjMSwKLQkweDAyNjZmNjcxLCAweGEwZWMxNWQzLCAweDA2NDNmMGU4LCAweGZmN2FmMTdjLCAweDEyYWFmODMxLCAweDQ3YTVjZTUxLAotCTB4NDhjMmRlNTEsIDB4MTQ4NDcwM2IsIDB4NmYxODc4YTAsIDB4NTdmYWYxMDcsIDB4YWFkZmY0ZTIsIDB4OTNmNzkzZTUsCi0JMHhlZTRlM2VjZSwgMHg4ZjQxMmYzYSwgMHhhMGJjZGE3ZiwgMHhiMWZhYzJkYywgMHg1NTY5MGE3ZiwgMHhjYjU2NzQ4OSwKLQkweGFmMmQzZTZiLCAweDY0NGRmNmMxLCAweGE5NzNlMDI0LCAweDBmMTQxOGIwLCAweDNjMmIxYzUyLCAweGJiMjJhYmU5LAotCTB4MWQzNTBlMmMsIDB4ZTRhMGY2NDQsIDB4MzI1NTdiNmMsIDB4NzA0MDk3OWQsIDB4NGI0NzUzOGQsIDB4NTI5NmZlNzQsCi0JMHg3MmIxY2MwZSwgMHg4ZjM2Njc0MiwgMHhhMTcxY2E4YiwgMHhlMzI3Y2FkMiwgMHhmZDZmYjJlMSwgMHg1NGVjYzk2ZCwKLQkweGNmYTdjMzNhLCAweDM1NTJiODdkLCAweDFjOTdjYzZmLCAweDQ3OTE4ZTYwLCAweDRmOWVhOTQ1LCAweDVkNWU4Y2JjLAotCTB4MDg5Y2ZhZWUsIDB4NTJiMDdkZWIsIDB4ZmJiMjZmYmQsIDB4ZDVhM2RjZGIsIDB4OWU2NmUyMzcsIDB4YWIzMjVmZDUsCi0JMHgzMjcxMGVjNywgMHg2YWRkMWY5YiwgMHg3ZDkwZTYwZiwgMHg1ZjkwYzk5ZiwgMHgzMTdjYzVjOSwgMHg1NjA1MTI2OCwKLQkweDM2YTE3MWJmLCAweDhjNGMyYTYyLCAweDZlNTJmMjUxLCAweDlmNTEyZjliLCAweGNkMmFlZDg2LCAweDhiZjIxNzI3LAotCTB4NDY1ZTJiZTcsIDB4YTI1NDJiYmUsIDB4YjdmNGM1YjYsIDB4OTlkZTU3MjcsIDB4NzM5ZTc5NGIsIDB4YmJjMjJmYWQsCi0JMHg5NzNjY2ZlZiwgMHg5ZmNjNzk0MywgMHhmN2EyZWQyYywgMHgxOTIxZTc4NywgMHhkOWM2MTdjOCwgMHg0ODUwNDk5MCwKLQkweDFjNDNjYTA0LCAweGQxY2UyZmViLCAweGZjNjIzMzIzLCAweGU1ODVhMzc2LCAweGFkZmFkMDJiLCAweGU5MzkzNTNiLAotCTB4MGQxMmQ2ZmQsIDB4YjEzZTJmNmYsIDB4OWRmOGUzMDIsIDB4M2M5ODg3NWQsIDB4YjQwNzMzNmEsIDB4NzQ0OWFkM2UsCi0JMHg0ZGY3ZmJlMSwgMHhiZjUyMTY3MCwgMHhhODkxNTIwOSwgMHhmZjdhZTlmNiwgMHgzZWZmOWUzNSwgMHg1N2VmNTU3OSwKLQkweDM2YmU3NzJmLCAweDA3ZDBkZmIzLCAweDUxYjQ4ZWMzLCAweGYzZjE4ZGU3LCAweGVhZGYyOGFjLCAweDI1OGZiZGZiLAotCTB4ZmJkM2ZjYjAsIDB4MWY5YjM2NTgsIDB4NjQxZmRmNDYsIDB4OWIzYjgxNzMsIDB4YzdkODMwM2UsIDB4MWIxZjJkZGQsCi0JMHhlNTFlZWVlYywgMHgyODdlYzMxMywgMHg4ZjE5NjIzZCwgMHg2NGY2ODdmYywgMHhlNTAzYjljZCwgMHhhZGI3N2U3NywKLQkweGQ0NTBmYTg0LCAweDRjNmU3ZjU3LCAweDYyN2ExYzlmLCAweGY3YzI2Y2YyLCAweGM3M2NmOWJmLCAweDE3NTllOGU4LAotCTB4OWQzNGYzNjQsIDB4NGVlYmQzY2YsIDB4MmViNDM4MzIsIDB4M2U3OGQ2YzQsIDB4NWY1NWJlZjUsIDB4M2M4MzdmYWQsCi0JMHhjMjI3ZWEzMywgMHg5YjQ3MTE4ZCwgMHhkNDc5ZDRjMywgMHhkNjY3YmViYSwgMHhjM2NhNGFiOCwgMHhiMzU2ZDkzZCwKLQkweGUxNTI0ZWJhLCAweDBhYmI1MmFjLCAweDZiNGI5OWNmLCAweDQ4ZGNlMmQ4LCAweDA3MGY2YjdkLCAweGQwZjY4NzEyLAotCTB4OTc4NWQ1N2IsIDB4Nzc0NGY4YWMsIDB4NTBmNTZjODYsIDB4YjkxOTVhNWQsIDB4NDgyYjczNDAsIDB4ZTM3OWIxMGYsCi0JMHg0MWQ5NTRkMiwgMHgwNjJjMzlkZiwgMHg5ZDE5NTJiMywgMHgzODNmYTg5MywgMHgwMzVlNTI2YiwgMHgyZjI1MDE4YywKLQkweGY1M2U3MWZlLCAweGFhNDk4MzAxLCAweGY4YmUyN2RkLCAweGU5MDU3Y2RjLCAweDk3YzUyNTdlLCAweDBhNDBmNzRjLAotCTB4OTRlNzYzNTksIDB4ZmE4NTljZmEsIDB4YzI1M2VhNjIsIDB4ZjBjZDc1MGUsIDB4Y2M4ZjhjNzAsIDB4NDc4YTc1YjgsCi0JMHhkM2Q3NTc4ZCwgMHg5YWY1ZWY4YSwgMHhlNDcxMjZkYSwgMHg4MGRhY2YwZiwgMHgwN2U4YTdlNiwgMHg0MzE3ZDUxMiwKLQkweDFmYWE2Y2ZiLCAweDcwOTIwMTk4LCAweGRiNmVjY2ZmLCAweGUzY2Y2NDBiLCAweDVmYWE2NjkwLCAweDdkNjM1YWIwLAotCTB4YjY1YmUxNDEsIDB4N2QwOWM1MDAsIDB4MTFlZTkzM2UsIDB4ZmJjNWU1N2UsIDB4NmMyZDdiZTksIDB4Mjg5ODMwMGUsCi0JMHhkNzdmOTA5NCwgMHhmNTYwMWQyNywgMHg1OTVjODlkNywgMHgxNWY5YjBmMiwgMHg3YTNmMTQ0OCwgMHg2ZWI2ZDhmNywKLQkweDM5OTFlNzUyLCAweGFmZmYxMjBiLCAweDBmMTJiODczLCAweDZhNDIzM2ViLCAweGUxY2RhOTVkLCAweGY5YWJiZTc0LAotCTB4NDNkZjE5YzcsIDB4N2M0MDZkOWIsIDB4N2MxYTVmOWUsIDB4NGVlNmNiY2EsIDB4ZDlkMTBlNjIsIDB4ZDZlOTUyNmIsCi0JMHhkM2Y5ZDVlOSwgMHg3M2JlODhmOSwgMHhlN2Q1YmI2NSwgMHhkNzc5ZDE0OSwgMHgwN2U0NDk4NiwgMHhjZTc1NDcyOCwKLQkweDJmNzc3M2M3LCAweDdkZmVlNTE4LCAweDdjYjJiZWJhLCAweDU1OGY4OGYzLCAweDJkYmNlYTRkLCAweDA3ZjZmN2FhLAotCTB4OGVkZTkxNGYsIDB4YmIxYzU5MzgsIDB4M2U3OGZkZGMsIDB4NjExZmY3ZWIsIDB4ZWYzZTQwZjIsIDB4Zjg2MmZlMjIsCi0JMHg5OTg5ZTI1YywgMHgzZWVmOWUwYiwgMHhmODU3OTRmMSwgMHhiMzg1ZmNlMSwgMHhmODc4ZjlkNSwgMHgwMjM5OGI4NSwKLQkweDc3ZGZhZmRlLCAweGM5ZDkyNGU4LCAweDZlM2MxY2YwLCAweDgzMWI2ZDhlLCAweDY4ZWE2NTdkLCAweDBhY2M2YmYzLAotCTB4NGQ5MmY1MzEsIDB4NmNjMTNmYmYsIDB4OWYyMThmYmMsIDB4ZmM4YmFjZmMsIDB4NWQ4OWViMTEsIDB4Zjk0MjFmNWEsCi0JMHg5ZWI2ZTI5MiwgMHhiMWQ5NzcyZiwgMHhlMmRmNDU0ZiwgMHhiOGIzNmY0MiwgMHg4ZWM5Nzg0ZCwgMHhjYjBhNzNkNywKLQkweGExNWNmYTViLCAweDQ0YmNjMzhkLCAweDU5OWI5NjNhLCAweDc2YWZlNzNjLCAweGJiYTc2NDhhLCAweGQ0ODJmNmQwLAotCTB4MDRhNTlhZDcsIDB4ZWI4ZTNmMzYsIDB4ZTRkYmQ3NmYsIDB4ZDY1ZWM5NDcsIDB4NDE5OTUwN2MsIDB4M2JlNzZmZmQsCi0JMHg5NTdkNjgzNywgMHg2YmE2NGY5YSwgMHhmMDlkMzlmNiwgMHg2NGRlMWYxMywgMHgzNThhNTc5NiwgMHg0ZGVjNGFmYSwKLQkweDMzMjFkNTNjLCAweGY5ZDVlMTQwLCAweDc4OGYzNjgxLCAweDhmZDY2ZGVjLCAweDc3NTcxN2ZkLCAweDFjNzBlYTk5LAotCTB4MDAwMDFjNzAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDc5OTMzMzFlLAorCTB4MzFlNDI0ZTQsIDB4MWU0ZTEwODEsIDB4MDMwODY4MjAsIDB4Yjc4YTg4ODQsIDB4ZjYzMDEwMjcsIDB4ZDU3ODc2ZDIsCisJMHhhZjBlMmQ1OCwgMHg2Yjg2ZjIxMCwgMHg3ZmI2YmQyZCwgMHg3ODQ5MDgwNiwgMHgxMTFmYzFhOCwgMHgyOWUxZDVhZCwKKwkweDMxMWQ4MmY2LCAweDAzODhiNjIyLCAweGJkYWJkMjI4LCAweDU1N2M1ODM3LCAweDBiZDExZmViLCAweDJhNDQ5MDhhLAorCTB4ZTViNWVmNmEsIDB4M2VmNmI1ZWUsIDB4MDk5MzljYzksIDB4YWZkYjdiMDQsIDB4N2NmZGZmZmYsIDB4YzdlY2VlOWYsCisJMHhmNWVkN2JkOSwgMHhmZGFkNmJkYSwgMHg4MTMxYzkxOCwgMHhlNDIzMGRhNCwgMHgwNmZiZmMyMiwgMHgxMDlkOTIyMSwKKwkweDlkMzdhMTMyLCAweGQ3MjEyMGUzLCAweDY2OTI0MjE4LCAweDkyZGRmZDJmLCAweGJhZGM0MjE0LCAweGEzNDliZmUyLAorCTB4ZTRmZWJiYTksIDB4NWY1ZjlhMWEsIDB4YTRhZmYwZWMsIDB4NGQxZjViNGQsIDB4MmQwOTZhNzgsIDB4MmZhMWVmYmYsCisJMHg3Y2QwNGZjMywgMHhhZDc5ZWNmYSwgMHhjZTdlYjRjNSwgMHg1ZDBmYzkyNCwgMHgxMGFiMWExZCwgMHhkOGU3ZWQwMiwKKwkweDUyMDE3NmMyLCAweDkwOTdlNTgxLCAweDkyN2ZhMTMwLCAweDQ1ZjhlOGFmLCAweDlmZThiODg0LCAweDM3ZmU5NzI0LAorCTB4YTViMjFjODksIDB4ZDFlNDNlNjAsIDB4OTkwMjllYTAsIDB4MzEzNjQ4NDYsIDB4N2U2MDU1ZmUsIDB4ZjUwOWZjMzYsCisJMHhkMDY3Nzc0NCwgMHg3NzllNzVlZiwgMHg3ZmVjMTNlNSwgMHhkYjBhNWY4ZSwgMHhmMjczNDdlOSwgMHg0ZGM4NzIwMywKKwkweDZkMDhjNmQzLCAweGZiMWRjNzQ5LCAweGY5MDgzOTVkLCAweGU0OTkwY2MwLCAweGQ4YjY4NzYzLCAweDBmY2E2ZmZlLAorCTB4ZDIxNDc1NGMsIDB4MDgwYjY3ZmUsIDB4NDlkOWY5ZmYsIDB4Y2M4MmRhMzYsIDB4M2JlMWVkYTYsIDB4MWExZjRlMjIsCisJMHhkOTlmNjdjYywgMHhlMGRmYjhlOCwgMHg0MGRmZGRkZiwgMHg1ZmMwYTdmZiwgMHhlNWExMDk0YiwgMHg5ZTBjMWNjYiwKKwkweGM1ZDlkOWU0LCAweDE5ODljZTMwLCAweGJmNDMxNmQ3LCAweDMyMTNhNjczLCAweDlkNGQ1Njg4LCAweDQ0OTBmNjNkLAorCTB4ODkxYWViZjMsIDB4Y2RkYjRlZGYsIDB4Y2YxYzBkMjksIDB4Y2JmOGQ5ODEsIDB4ZTgwMjkzYTcsIDB4NjBlZThlOTcsCisJMHhmZmM0NWY3ZCwgMHg2NGVmMzhlYiwgMHhjYzNmZGUzZSwgMHhmYTEwMmIxZSwgMHg4YTk3ZjY0MSwgMHhhMDcyNWRhOSwKKwkweDRiZDE1M2Y5LCAweDJkMDU2YTQ4LCAweGVlNTMxOTFmLCAweGQwOWE3NjlmLCAweGU2ZTllNGYyLCAweDcyMTM0MGY2LAorCTB4YzQyNTIxMWQsIDB4MWFlYTcyOTMsIDB4YzkxNjc3ZmEsIDB4YWQ0MjI4YmEsIDB4ZWU4YzBiNmEsIDB4NGE2YjBmZTUsCisJMHgyMmY5ZmRmZiwgMHgxMmZhMDFkMCwgMHg2YTFmZDZmYiwgMHhhMGU5ZTk5YywgMHg3YjM3NWFmOCwgMHhmNGQwODc5NiwKKwkweDBmMmNjMGY1LCAweGQ5ZjVlZmUwLCAweGQ2OGYxMGIzLCAweDY3NjY3M2Y2LCAweGZiNWUwMjI3LCAweDA2ZmVlZjFiLAorCTB4ZmEwOGQwM2EsIDB4YjViM2M3M2QsIDB4ZWE0ODkwN2UsIDB4MzlmYmY0MjMsIDB4MzFjM2QxM2EsIDB4OTMwMWRmZmQsCisJMHgwOTY0MjU0ZCwgMHhiMzRkMWIzMCwgMHhkMmE2ZDUyNSwgMHhlODhkNmNmYSwgMHg5NWUzMzg5MSwgMHgzYjY5YjEwMiwKKwkweDI4OTk0OTkyLCAweDBmZjM1MmUzLCAweDI2MzdiYjYxLCAweDcxYzM0YWQ5LCAweGVmMDc3M2U2LCAweGI4MWE1NWM3LAorCTB4NmZhNTBlNjcsIDB4NzUxMjc0ZDYsIDB4MjkxMmJhNTEsIDB4NzVlMmM2YWEsIDB4MWE1NDhhNWQsIDB4ZGRjNzAzOGUsCisJMHg2ODQyNWUxYywgMHhlMWMwY2Y3YiwgMHgwMmQ4NjU3MSwgMHg0NzMyOWZkMCwgMHhmNWMyYzQwYywgMHg0MjY3ODAwMywKKwkweDRjYTI0YTZmLCAweDE4ZjhlNmVlLCAweGZiYmY3MmZkLCAweDMzOGY1MDZjLCAweDhlMDBiYjhmLCAweGVjYWE5MDA5LAorCTB4MGM4ZjBlM2IsIDB4YjIwMTkzN2MsIDB4NDNmYzgyOTYsIDB4ZTAyNDYzYzIsIDB4YjkxZWNjZmIsIDB4ZTUwNzAxMjQsCisJMHgxN2YwYTE4ZiwgMHhhNDJkYWUxNSwgMHgxNDEyZDQ3YiwgMHg0N2VjNTZiMiwgMHgwMzI0YTRmNCwgMHhkZTExNTdiZCwKKwkweDRmNTEyOTBmLCAweDQyMTU3ZTUxLCAweGQ3OGI4NGFiLCAweDEyOWU2YTVjLCAweDM1ZjA2NTM5LCAweDE5M2JhOWYwLAorCTB4NWUxY2JmYzcsIDB4ZTUxOGEwNDgsIDB4ODhkNDMxNTIsIDB4ZTMwN2MwNzgsIDB4ZWQ0ZGY5MmIsIDB4YmFjYmE1MDIsCisJMHg5NDdlZTVkMSwgMHg5MDIxOGE2ZiwgMHhlMTdlNDMzMywgMHgzYmY0NTdkZiwgMHhiZGNjZmYzNywgMHhjYTkxZDI5YywKKwkweGQzMzk2YjkxLCAweDJjZGY4YThmLCAweDhlOTJlYjY3LCAweGM4MjAwOGI1LCAweDBmNDliOTY0LCAweDQwMjQxMjEwLAorCTB4ZWI2ZjAzNzcsIDB4YmM3OGEyYmUsIDB4ZmI1YmJmMDQsIDB4ZTdjODZmZGQsIDB4Yzk5ODMyNjAsIDB4MDUzZjkzMjcsCisJMHg3OWJkMDdmYSwgMHhmMDA3N2VkMywgMHg1ZWRmM2FmNSwgMHg1ZDZiY2MwNywgMHg3YTgyNWVmZSwgMHhlOGM3ZDM4YSwKKwkweDVkYWY5NWQ3LCAweDgxZDZjZTUyLCAweGVlODA4ZDdjLCAweDllYTc0OGMzLCAweGM2YTdkMWYyLCAweGE2NzY3ZTAyLAorCTB4NzQ4YmY3MmEsIDB4MDg5MzNiN2UsIDB4NmI3NWQ5ZWEsIDB4ZDAyYjc4NDgsIDB4YjVlNTk0YjUsIDB4YjVlMTY5NmYsCisJMHg5ZDNiOGU3NCwgMHhkNjk4YmViYywgMHhlZDA2YmNkMywgMHgzYWRiYmVhOSwgMHg2ODg3MGI0OSwgMHg4ZDhiNmI3ZSwKKwkweDg1YWIxZmI1LCAweDMxMWY5YTQ1LCAweDhhMTQ4NDkxLCAweGMyYzU2ZDRmLCAweGJlNWE0ZTk1LCAweDE3ZWFhMzc1LAorCTB4MzRmZDVlYjUsIDB4MmQ2NzI1YTIsIDB4ZGViMmRmYjQsIDB4YmRmMDBhYTYsIDB4M2IyM2FkOGYsIDB4NDQzODQ5ZjMsCisJMHgzOWIxZGZjNywgMHg2OTIzOWJmOSwgMHhmOWIyMTQzZSwgMHhmMjRmZDM4NywgMHhkOTQ1ZmFmOCwgMHgwMjI4NDRhNSwKKwkweDljM2EzMWI0LCAweGFlNWM3OTIxLCAweGE5ZTUwMjA0LCAweDdlY2I3Y2JjLCAweGE0OGViZmZmLCAweDVkMzYzZGYwLAorCTB4NDVhMGFmZjIsIDB4NGNjZmQ2M2IsIDB4NzY5ZTI4ZDAsIDB4M2YwNDgxNjgsIDB4YzBmMDdmNGQsIDB4Y2NlZmNjN2MsCisJMHhkZDAwMjYwYywgMHg5ZjljNmU3NiwgMHhjMGYxNGMwMCwgMHg0NjFiOTllNiwgMHhkMjYxN2I0MSwgMHg2Y2U5MWQ2MSwKKwkweDFmNDdmZmQ2LCAweDAwZWMzYTI4LCAweDllOTk0YjM4LCAweDdlMGQ2YTRmLCAweGJjZjlhMjUzLCAweDg5YjkxMjQ5LAorCTB4YWRjZjIxNGUsIDB4MWZkYmRjMjEsIDB4NGY1ODExYjIsIDB4OGI2ZGU4ZmIsIDB4Y2RkNDRlYmUsIDB4YjRlYjU3NzksCisJMHg1ZDdmODE4ZiwgMHgyMDA5MTYwZiwgMHg4NjM1M2JkYSwgMHg5MjM3NDFlNywgMHhiZWVjOGFmMCwgMHhjODVjZWZlMywKKwkweDVkMjkxM2VhLCAweGJmMmUwZTgwLCAweDk2Njc1OTYyLCAweDQ3NTZmODVhLCAweDNjNzE3MDc5LCAweDFjNzU1YWI5LAorCTB4ODk3YTQ4OGYsIDB4NTc4YmQ2OTAsIDB4NjI0NjlmZmEsIDB4ZjA3YWU5ZjAsIDB4ZTlmNTgxMjgsIDB4ODE2M2U3OGEsCisJMHg3Y2EwNWQyNywgMHg5Y2FiODMwZiwgMHgxYzFlYjllZiwgMHg2MzU3Y2FmNywgMHgyMWIxZjFlMywgMHg3ZmEwMWVlZiwKKwkweDYxNzdjNTIyLCAweDUwZWIwNDI0LCAweDBhMjQ2MTdhLCAweDU3YzllMmZjLCAweDlhMGJiMDM0LCAweGM1YzkzMTA5LAorCTB4N2NmYmQxYTEsIDB4MTMzNzIwMWQsIDB4YWY1ODNlMjIsIDB4ODM3ZThkZDcsIDB4ODE1NjhmYzksIDB4NmZlNjMwZjgsCisJMHhiN2U0ZjdiNCwgMHhjMWZiNTg5MywgMHhmODcyODdhOCwgMHg2OTc4NTNjZSwgMHhjYjg3YmIzOSwgMHg4NDdmNGY1OSwKKwkweDczMjQ0N2FkLCAweDRmNzVjMjFjLCAweDVlNzU2MWUxLCAweGM4NGM3ZDFjLCAweDk3Y2I5NDBhLCAweDgxN2FlMDQ5LAorCTB4ZWRjZGRlYTYsIDB4NmMwNmE3NTEsIDB4NzkwMGRmYWUsIDB4OTEwMjQwYjcsIDB4MTM0ZGRmMzgsIDB4NDJkMjdhZDgsCisJMHhlOWEwNWQ3NCwgMHgxNjJmNDRhMywgMHg2NjRiOWQ3MCwgMHgyZWIyZDdmYSwgMHhiYzlmZDFmNSwgMHgxNmU5MTY1ZCwKKwkweGQ0NjhkZjQwLCAweDg3MzQ4MDNlLCAweDIzY2QzMWY4LCAweDkyNDc0YzAxLCAweDI2YWY0YzU2LCAweDQ5ZjM0YzExLAorCTB4YTQwNWE2M2IsIDB4YWY0MzUzMWIsIDB4NDIyYTg5ZjgsIDB4ZmFjNGM0N2UsIDB4YTRlNzIwYzksIDB4ZTU4YjYzZGEsCisJMHgzMjY0ZDBiYiwgMHgzY2NlM2ViMiwgMHg3Mzc4MmQ5YSwgMHhmOGViZjg5MCwgMHhlNzVmMDIxZCwgMHhmYzhhYTY0OCwKKwkweGYxN2FmODQzLCAweGU4MThiMDZlLCAweGZjMjg1NGM1LCAweGVmY2NkYmJiLCAweDBlYmUyNGUyLCAweDY5M2RlYTM4LAorCTB4ZGQzMzU3ODAsIDB4Y2Q1NDU0OGQsIDB4ZjA2ZDVhN2MsIDB4MWMyNDQ0YTksIDB4YzQxZjMyYzcsIDB4ZDZiOGNjNjMsCisJMHhmYjczNTZmZSwgMHg5YzlmOThjNiwgMHg0OTFmMjNhMiwgMHg1MGNmNjY2ZSwgMHg3MWJkZjQzOCwgMHgwODI4ZDFmMCwKKwkweGFiNDE5ZTdjLCAweDI5YjIzYWRjLCAweGI2NDk0YmJmLCAweDZiOWE1YWM4LCAweGU4NzY0Zjc0LCAweDg5M2YyZjM4LAorCTB4N2NlYjY3NDcsIDB4YmUyYWYwYWMsIDB4YTliM2MxODEsIDB4Y2IwYTllMDcsIDB4YzI5N2ZhM2EsIDB4ZmVhNjRmZjMsCisJMHgxZGIyNGNhNCwgMHg4NmEyMGJkNiwgMHhiYzU2ZGU3MCwgMHg0MmRlZjlmNiwgMHhkMmU0ZmU4ZiwgMHg1N2Q2Njk5MSwKKwkweDAyZDc4YTRhLCAweDA2OWY4NTg3LCAweGUzN2M3ZjY4LCAweGU0N2ZlYTRiLCAweDIxMWJmYWMzLCAweGE5ZWMyYTQxLAorCTB4ZTYwMTAxZjksIDB4MWE0MGFkN2YsIDB4Yzg1ZTI5MTMsIDB4YTBlZGEyNjgsIDB4NmFmNWNkNzAsIDB4Njk4YjhlY2MsCisJMHg5MWY0MTkzNywgMHg3NGM5MGI2NiwgMHhlZTkyY2ZiZSwgMHhlNDNlZDAyMywgMHhmNDFkOTEyNywgMHg2ZGYzNjdiMywKKwkweDdkNjk1YmE1LCAweDYzYjY5ZmFhLCAweDFlNDAwNWZkLCAweDBiNmQxZGFlLCAweDlmZDFiOTQwLCAweGY1MzI5ZTRlLAorCTB4MTEyZWZkNDcsIDB4ZTgzNmUxZjAsIDB4ZTRjM2YxNjMsIDB4MWZiNDM2YjEsIDB4NmZhMjdjOTUsIDB4Yzc1ZjIzODksCisJMHgxZDE1N2NiOSwgMHg5ZWIwZWE3MSwgMHhiMDk0Y2FiOCwgMHg4ZmZhMWIzMywgMHhiNTNlNDMxNCwgMHg1ZDYxZjg5YSwKKwkweGU2Y2RkNDlmLCAweDMwZTFjNjUxLCAweDU5ZmE5ZGU2LCAweDZhN2UwMDQwLCAweGMwM2IzMWY3LCAweDNmZDA0ODU1LAorCTB4NzRkYTMyNTQsIDB4YjRkZDFmZjAsIDB4N2U0MmY1MGUsIDB4NTA1MzE3NTQsIDB4ZDgzZmEyM2YsIDB4NWYzZDllMWYsCisJMHhkMDBiZWQzZCwgMHhiOWQ0N2Q3ZSwgMHg5MmJlMDc2YSwgMHg5ZmEwZTlmYywgMHhjODU2OGY1NywgMHhmOGJkZmE2MCwKKwkweGZmZjYzYjNiLCAweDE4NjJhN2I5LCAweDQ3Y2Y5OTg5LCAweDBiYjFkMTBkLCAweGE2NzBjMWE5LCAweDY3YTYxOGUxLAorCTB4ZWQzMWRhMWIsIDB4ZDMwYjc4NmMsIDB4NTk0YWU5ZmUsIDB4ZWJjZWRhOGUsIDB4YzBkN2UyN2UsIDB4M2YwZjEwMWUsCisJMHhjMDBmMzQ0NywgMHg1Yzc1ZDUxZCwgMHgxMmEyMWMxNywgMHg4MjgwMmViMywgMHhkMzZmZmYwNiwgMHhkYWYwYmNkOCwKKwkweDA4NmJjNDZjLCAweDY3ZDU0ZGU2LCAweGUwMzY3ODc4LCAweDllMDAwYTViLCAweGMyMjIzODg3LCAweDc3ODY3Y2QyLAorCTB4MDFkMDNmYzAsIDB4M2M4ZThiY2EsIDB4NWNmMTAyYjcsIDB4OWUwMmM2NGQsIDB4MGNhNGM5MzcsIDB4MTNlMDNjZjQsCisJMHg4MjdkODlkNiwgMHgwMzgwMGVlZCwgMHhmZTY5ZjNmMiwgMHhjMWZhOGZmYSwgMHhmNzg2NTlmYiwgMHg5ZTI5OTc4YywKKwkweDRiNDk0ZTAwLCAweDhlYWRjNjY0LCAweDkxM2I5NWYyLCAweDI3ZDcxMjBiLCAweGY5OTI3YWJkLCAweGJkZjZiZGQ5LAorCTB4Y2YwMGVmZjYsIDB4YWM4OTQ2OTYsIDB4NjhhNmJjODUsIDB4ZjdiNzExNGEsIDB4MTU4MjRhNDEsIDB4ZGNkZmMxZDMsCisJMHgyOGZkM2U1NiwgMHhlMmI5MGJkOCwgMHg1YTY0ODc1NywgMHgzYTVlYjQzZSwgMHg0ZjIzMTFkOSwgMHhmZDc0NjU1OSwKKwkweGIwYzI3NmE0LCAweGVjZjJlNmU1LCAweDA3NGYzOTkwLCAweGI3MzQ3ZjQwLCAweGM0M2U1Y2M1LCAweDg3YWVmNWM2LAorCTB4YWQxZTQwNzgsIDB4ZThiNjVhZjMsIDB4ZDNmZDcxNTcsIDB4ZWEyNDBkNTUsIDB4MDJmMjYzOTYsIDB4MTc5MWE3YzMsCisJMHg0MjNiMTNiYywgMHg0NmNiN2U3NCwgMHg0YzAzOGMxMSwgMHhiM2Y1YjFiNywgMHg3Y2EzYmUxNSwgMHhkNzRmMmY3MSwKKwkweDUyMzFmYTViLCAweDQ2ZGJhMjY5LCAweDE5M2QzMGM2LCAweGRkYmE3ZDZmLCAweDQ2Y2UzYzU2LCAweDRkYjA2YmZiLAorCTB4NzJhMzY3MWUsIDB4MDQyMjkyZTQsIDB4NWI5Nzc3ZWMsIDB4OTNmOWUzZDEsIDB4OGUxMjZkZDMsIDB4ZWJiNTIwOWYsCisJMHhmYmFiODUyMiwgMHg0YWRmZTIzYSwgMHhlZTRjYmVmMSwgMHgyYzdjODI4ZSwgMHgyMWZjZDYyYiwgMHgzMGZlNDc1MCwKKwkweGQ1MTI2M2NhLCAweDE1ZjY2MjYxLCAweDcwMDI1M2MxLCAweDZjNGE3ODUwLCAweGZiMDQ0ZTM4LCAweDA3MzhhNmU5LAorCTB4Y2M5OTdkZmIsIDB4NGEzNjVkZmEsIDB4ZjYzNzY4MjMsIDB4MzY1NWU3MDMsIDB4ZDgwY2UxMTksIDB4MzRmZDA5MDQsCisJMHgxNTU1OTc0ZSwgMHhhMzRkZjczOSwgMHg5ZjU1NGVkOSwgMHgyNjY3ZmQwNSwgMHg3OGMxNjcwNSwgMHg3ZTZmYjk0NiwKKwkweDE5NjNmYTI5LCAweDJiZjRjY2MzLCAweDAxNjdkNDc3LCAweDIyMDY1NDdmLCAweDRlN2Y4MGQzLCAweDkyNmM1ZjdiLAorCTB4MzZiN2JjZTksIDB4ZjE0NGJmMTAsIDB4NzAyYjllZmYsIDB4NzM1N2Y0MWIsIDB4YjAwOGZkN2IsIDB4NWUwNmRmN2YsCisJMHgzYjJhMDA5OCwgMHhhNWFjN2E4MCwgMHhhMjVmYTU2NCwgMHgxNDg5NzJlNSwgMHhjYTNmMjk5NSwgMHgyNWJmMGYxMywKKwkweDJhMWE0MDE3LCAweDkzOGIzODg2LCAweDQ3N2QzM2Q0LCAweDM1MjI0YmY1LCAweGY1MjMxY2JkLCAweGEyN2UyMThmLAorCTB4NzJkMDNjODAsIDB4NjAyNTZmNTUsIDB4ZGJhODM4MGYsIDB4ZWY4NjMyNzAsIDB4MWU3MzRjOTQsIDB4N2NkOGZhNmMsCisJMHg3MmUzN2E3ZiwgMHgyN2U3OTgyOSwgMHgwOWZlMDM4NywgMHg0OWRkZTlkYSwgMHgyNjkyN2ZjYywgMHhkZTAwMGJmYSwKKwkweGE2ZmZhZjdiLCAweGM0ZmNmMDA2LCAweDY3ZjkzMzY2LCAweDVhNGQ3ZjU2LCAweDc5Njk2ZmZlLCAweGZlZTI2ODEwLAorCTB4ZDVmY2I0YjYsIDB4ODBmMWJjYjQsIDB4OTc5YzU2OTcsIDB4OTQzMmNhNjMsIDB4MjRmMDA1MGIsIDB4YmYwN2Y5MzIsCisJMHhlNDFkNjdiZSwgMHhjZjViZjg3OCwgMHg1NzJmNThkYiwgMHhmODM1YmMzNywgMHhhNzIwZTFjMywgMHhhNDNmODMxZCwKKwkweDA1MmQ1OWM0LCAweDNlNDJmZjkxLCAweDFjMjhiNWYwLCAweDA5OGY5OTkyLCAweDYyMTM0Zjc4LCAweDE4MTc2ZTUyLAorCTB4NWE5YzliZjYsIDB4ZGM5NDc0ODgsIDB4OTg4ZWE5ZDIsIDB4OGZjMGRkZjUsIDB4YzFkZGZjYjIsIDB4ZjQ4NzhlMWYsCisJMHg3OGFkNGM2ZCwgMHgwMTIwYTQ1NSwgMHhkNzY4ZDAzZiwgMHhlMDE4YjcxMywgMHhlMjM0ZWZmYSwgMHgxZmM0NzlhOSwKKwkweGE0NzMzOGE1LCAweDdhNmE3OGIwLCAweGYzMGEyODVlLCAweDA5ZmQ1MjcyLCAweDIzM2RkM2ViLCAweGYwYzU2YjVmLAorCTB4M2IwZmM1ODEsIDB4M2YyMGFkOTQsIDB4NjFiNjhjYjQsIDB4Nzg2NWIzNWMsIDB4ZjkwMjkwZTQsIDB4ZDE0MDZhMGMsCisJMHg1ZGNhNjc3YSwgMHg0YzZkODgyMSwgMHhlMzdjNjNjZCwgMHhkNGY1YjNmNCwgMHg3ZThjM2MzNSwgMHhiZGJmYTE5OCwKKwkweGFkNWUxZjFjLCAweDY3YjNmNTFjLCAweDMxZGVkOWEyLCAweDJiMjcwMWQ2LCAweGRiMzZmNGEyLCAweGE2OTRjZTUxLAorCTB4YmU4MmM1NGYsIDB4OWI1MzlhN2UsIDB4NjllNTFhNzYsIDB4MjMzZmI5YTQsIDB4ZTM2ZWQxZGUsIDB4Yzk2YjhiZjEsCisJMHg1OTM3NjhiNSwgMHhlMWZkMTJlMiwgMHg3MWY4NmJjZCwgMHhkY2JjZDkxMywgMHhmYzE4NDlkMywgMHg1MTg5ZjRlNiwKKwkweGNmZDc5YmM0LCAweDliZDg2NmYwLCAweDliYmYzZTFlLCAweGZjMDQyMzRhLCAweGYzZjg5ZWJlLCAweGViNmYwY2NkLAorCTB4N2ZhMjhiYWYsIDB4MjllYzdlYjcsIDB4ODViZDY3YjQsIDB4Y2UzZjI2MWQsIDB4YTFjYTFlZjgsIDB4NzZjNGZjZmUsCisJMHgxOGY2YTFhOCwgMHgyMzcxMWJjYiwgMHgxOWU5YTc4YSwgMHg2MWViYmQ2OSwgMHhhZGRiYjcyYiwgMHg5MjI3NTM3NCwKKwkweDQ3NjNkMDYyLCAweDgzMTVhNzQ3LCAweDg0YjdiZWRlLCAweDNjYWI0ZWMyLCAweDYyOTc1ODdhLCAweDdlZjJhZGYwLAorCTB4ZGY4NjdjZDQsIDB4N2NkOGNiN2IsIDB4ZDNmNDdiNjksIDB4OTM5ODlkZWYsIDB4ZjI2NmUzMDQsIDB4N2YxMWIwZjgsCisJMHhlYmNiZjFlZSwgMHgyODRmNzhjZCwgMHgyZDg1YzRiNCwgMHg2N2VhYjc3ZSwgMHhjYzRiNTJmNCwgMHg1ZjM5YWJlNSwKKwkweDU3YTcyMjJiLCAweGU4Y2UxOTJhLCAweDRmM2UzMDM1LCAweDg0YmNmODMyLCAweGRmMzI3OWYxLCAweGQxMmY0ODM3LAorCTB4OTIxZDAxMGUsIDB4NGRmZjk5NGEsIDB4NGRmMzdlMmMsIDB4NWU4YzFkMjksIDB4MDBjODhmMzcsIDB4YTlmZWZjM2YsCisJMHg5NzY2M2VkZCwgMHg3MTI2YmEzMCwgMHhjNmVmYmM3ZSwgMHg3MWM4MDIxMSwgMHg0MDI2ODk3MiwgMHhjMzNlNzI3ZCwKKwkweDEzYzUzMjUzLCAweGE1Yzk3N2FjLCAweDRlZjZlZmNjLCAweDUyNWRiMGQ0LCAweDBiNWJhMzA5LCAweDVmZTE0YzdjLAorCTB4ODk4YTc0MDMsIDB4NWI0YjNiMWYsIDB4NmI3ZmEwNzUsIDB4NzQxZDRlZjEsIDB4ZTFjNTMyNTksIDB4ZDRjZjBhMjAsCisJMHhkODFiMGE1MiwgMHg4MDVmYjQ5ZCwgMHhjNTE4NTNkNywgMHg0OTUyNWFiOCwgMHhmY2E1ZDg3MCwgMHg4MmEyNDI3YSwKKwkweDEwZjg4N2NkLCAweGU5NGI2ODZjLCAweDdlNTgyNTNjLCAweDIwYjI2MjY4LCAweGE3ZWY3ZWQwLCAweDgwZjFjMDdjLAorCTB4OGYxNzNjNzEsIDB4Nzg1ZmRmYTMsIDB4ZmRkY2Y1MTIsIDB4YzgzNjRkZjAsIDB4MWNlYmY2YTksIDB4MzZhNTI3OWEsCisJMHhmNzA3ZjgzZiwgMHhmMTA4ZTY5NywgMHhiY2M2ZTdlMiwgMHgyYWNiODNmYiwgMHgzNWY4MTJjNywgMHg5NTcyZmMzMSwKKwkweDE2ZGVlM2M4LCAweDIyNDc1ZGZlLCAweDU3YzgyZTZhLCAweGE1Zjc2ZjQ4LCAweDgzMGZlYWY1LCAweDY1ZTQ3YWZmLAorCTB4ZmVjYmUzMTIsIDB4ODdhMTg5ZjQsIDB4YjIxODI0ZGQsIDB4MWZkNWY3NjUsIDB4ZGVmOGNlOTIsIDB4Nzk0MDE3OWUsCisJMHgyNGVmMDNlYiwgMHg4YTUyYWZjNiwgMHg5MTM2ZmNiOSwgMHg1ZTg2N2ZkYiwgMHgxNDA3OTJkMSwgMHgwMGExMjcyNywKKwkweGQ3MjI3N2FlLCAweDAyZGE0ZjRmLCAweGYwNTRjNTBiLCAweDRlYjhjM2JiLCAweGFlNzRjOGI4LCAweGNhOWYxOTM3LAorCTB4ZTZhNmZmOWMsIDB4NGFlMmJkMzMsIDB4OTc3NmIwODksIDB4OTAzYWE3OGQsIDB4YTgzNGQ2ZGYsIDB4YzY1YTFmYTgsCisJMHg0MzllZDVkZSwgMHg3ODY2YjBmMSwgMHg3M2JlMWY5MywgMHhiOTE5NmI4YywgMHgzY2RiZjY4ZCwgMHgyYjcwNzk3YywKKwkweDMwZmRjMDBjLCAweGFjMjJiZmQ0LCAweDhkNWY4YzgzLCAweDBlMDMzMDdkLCAweDYxZDIxOTkyLCAweDdlMDljYzlmLAorCTB4MjQ2N2UwMTEsIDB4MjQ5MDVmZGIsIDB4ZWI4ZmI1MTIsIDB4NDc5NWRmMWQsIDB4Njk2N2NkZTEsIDB4MGRjMTlmMjgsCisJMHhiNmViYzlmZSwgMHg2ZjljMmFlMCwgMHhhMjk0NmI3ZSwgMHhjOTliY2U5YiwgMHg0MjIxNmFjYiwgMHhlYmNjMjI1YywKKwkweGIyMWU3YzcyLCAweDlmOGViZTMxLCAweDAyNWRmN2Y2LCAweGUxYzRkM2VjLCAweGRiMjJkZGRmLCAweDQ3MmQ1OWE3LAorCTB4N2UwODUwODgsIDB4ZjI4OWVkMWIsIDB4NmE2Y2VhYzksIDB4YTM4MWM3OTcsIDB4ZDU2YmYzOTEsIDB4YzNmODY3MmUsCisJMHg4OWFiN2UxOCwgMHg3NWYyOTkyNCwgMHgxZmMyMzNmYiwgMHg3NzExZmFjNiwgMHg1MTRmYjgwYSwgMHg0MzU4ZDFjZCwKKwkweGNmMDBiMjNhLCAweGY2MWEyOWVmLCAweDQ4ZWI2YjU3LCAweGU5MTc3YzgzLCAweDc4MDI1YjRlLCAweDhiOGYwMzEwLAorCTB4NTI3N2ZkNzQsIDB4OTBiOGM0YmUsIDB4ZDZlYjYwN2IsIDB4ODFhN2YwZTUsIDB4NDA4NWQxMGMsIDB4MGZhOWU0Y2IsCisJMHgxNzhlOTg3OSwgMHg2OWUzMDdkYywgMHhkMmJmMmIyYSwgMHhmNWYwZTM3MSwgMHg0ZDdjYjEwYiwgMHg2YTU5NTdjNCwKKwkweDE0N2Y2YmU1LCAweDEyOWRkYWY5LCAweDlmYjc3YWM1LCAweDhmYzFiNWYxLCAweGFkMWY5Yzg5LCAweGJmOGM2ODdjLAorCTB4ZDZhZmM3OWUsIDB4MzM1ZjNlNzIsIDB4NzA4NTQ5YTEsIDB4OWI1MWRhZGYsIDB4MmNlNjllMzAsIDB4N2MwMTVjZGEsCisJMHgyNWFhMzJkZSwgMHg2NGRlN2MwYywgMHgxN2RmMzVmMCwgMHhkYjJlZmVhMSwgMHhhMzVhZDMxZiwgMHg3MjI2NGViMCwKKwkweGVlZDQ1NmJlLCAweGViN2I5MDA2LCAweDM4OTM1ZDdjLCAweGJlMDUzNGJjLCAweDVmMzliODA2LCAweDkzZjgwN2JmLAorCTB4YWUwOGRkZmQsIDB4MDc2YmQ3YzEsIDB4NDViYWQ3Y2MsIDB4ZmVkMzliNmYsIDB4YzJkOTI3ZmMsIDB4ZjE4OTFlZDcsCisJMHhkN2MwNjdlNywgMHhiMzBhNGYwMCwgMHg5NjNlZGM2MywgMHhkZmVhN2VjYSwgMHgwNmU3ZTljNywgMHg2Yjk5Zjk4OSwKKwkweGU1YWMxY2I5LCAweDFmYjZiMDcyLCAweDIyM2ZmODM5LCAweDlhZmUwM2YzLCAweGM5OGIzMDcyLCAweGU1YTI0MzgxLAorCTB4OGNhZTkzODksIDB4ZDNiMDI1MWYsIDB4OWU3YmM4ZTMsIDB4ZTFiNWZjMjQsIDB4YmM0MzM0ZGUsIDB4MjdmZTNjNzIsCisJMHhiZTg0Y2QzMCwgMHhjZmQyMzRmNCwgMHhlNGMwZTc0NCwgMHg3M2M5OGYzYiwgMHg3NmJlNzI3ZiwgMHhmZTM4N2M2OCwKKwkweGE3ZjQ2NDUzLCAweDI2OTIyZWY4LCAweGZmYmUzOTVjLCAweDcyMTU3MDVhLCAweDQzZjAzNjdlLCAweGI3MjhjNTgyLAorCTB4M2E2NjdhMzEsIDB4ODZhOTJiYzAsIDB4ZDMwNDc5OWUsIDB4MjhhZDc5YTksIDB4ODFiZTg2YTcsIDB4MmJmYTBhNTgsCisJMHgzYmM2MmI2YSwgMHg2OGFkOTk5YywgMHg5OGYzMzk5ZiwgMHgyNGZjMzFiZSwgMHhiODhkN2NlYiwgMHgzM2Q3MTM3OCwKKwkweDAyMjE3OTQ5LCAweDg1M2Q5ZmViLCAweDllYWEzZjcwLCAweGNjOTk1MWY5LCAweGQ1ZTIzMDFmLCAweDE4YThmZDg2LAorCTB4YmJkMGQ0N2UsIDB4NzlhNzlmNzAsIDB4OTdkYTNkNzgsIDB4M2JkNjM3Y2QsIDB4MzZjM2VkZTIsIDB4ZjA3N2VlZmIsCisJMHgzZWQzNWY0ZCwgMHgwZTVhMWFlYiwgMHhiYmM5YWVmZCwgMHhjM2IzYzQ5ZiwgMHhmYjE4Nzk4YywgMHg2ZTNlNGU0NiwKKwkweGE4YjUxZTczLCAweDMyZGY1YzYwLCAweGM3NmFkZWZjLCAweGZlYjI2NzM0LCAweDdhZTdiZTdhLCAweGJiZDFlZTU3LAorCTB4NTQ3NjhmMmMsIDB4NmY5ZjhjNmUsIDB4MDNlMGM3ZTksIDB4YTM0M2U4ODUsIDB4ZTQxODM3MTAsIDB4NGNlNzA5MWUsCisJMHgzZjA0ODQ5YSwgMHg5MjRkYzdkOCwgMHg5MDcyOWQyMCwgMHg1YWE5N2IxZSwgMHhmZjQwMTY4OSwgMHg5Y2JjNjYyNywKKwkweDNkYjJmNjg1LCAweGJjZTQwNmI4LCAweDAzODBhYmU5LCAweDUzYWJhOWUyLCAweDk2YzZmMzVlLCAweGU2ZjE5ZDlmLAorCTB4YTU2Y2MxYjcsIDB4N2VlMmQ1ZGYsIDB4YjE0ODgzOGUsIDB4ZGMyNzYzZmIsIDB4NGI3ZWQxZGIsIDB4ZTljNzM3YzgsCisJMHgwOWFlMTQ5YywgMHhjYzEzYzQwMiwgMHhiZjhmMGFlNSwgMHg3MmU2OTkyOCwgMHhhNDVmYzc5OSwgMHhlNzM5NGIxNCwKKwkweGJlMzRiOTBmLCAweGViOTM3OTVlLCAweDc2MDJkZjE1LCAweDFjYzRlNzRlLCAweDcxM2JkNzE2LCAweDMwNjc0ZjJiLAorCTB4ZGJjNzNlZmUsIDB4YzIzNGYzNzUsIDB4NTM1ZmVlZjUsIDB4ZjZlNTI1MWYsIDB4ZTI5YmVmYzIsIDB4OTkyMmY4YzcsCisJMHgzZWJiNDc2NSwgMHgyYjlkODUyYiwgMHgyNmU3YjEyMCwgMHhhMjZiNWZlMCwgMHhjY2ZjNjI0NCwgMHhmZjk3ODFhMSwKKwkweDYxZDRmMTA4LCAweDA2Y2FiZTBiLCAweGVhMTU2YjNjLCAweGRiNDY1ODYxLCAweGM3OWM2Y2E1LCAweDI4Zjc0MjYzLAorCTB4M2FlNmNmMTgsIDB4MDJmNWZiOGIsIDB4NmE3MmUzNDUsIDB4ZGJmNDBiMTIsIDB4ZWY4NTIxZGIsIDB4M2E1MmMwYmQsCisJMHg5MTA1N2I4ZiwgMHgzN2MwZWNiZiwgMHg4YzI5ZDAyMiwgMHhiMTQ0OGJhOSwgMHgzMDNhNDNkZSwgMHhlNjFiMDg5ZiwKKwkweDUxODdlMGI5LCAweDMzYzQ0YmJmLCAweGM2MWI2MTRjLCAweGY2Y2M3ZThkLCAweDc4ODhkNjQzLCAweDAzYTg4MzZlLAorCTB4ZWRjOWJmYjQsIDB4NDI5N2Y4MmEsIDB4MWFlNzdlODgsIDB4NDBiZTc3ZjgsIDB4YzRjODMxNmIsIDB4YzYwOGIyZTAsCisJMHg3Y2VkYWQ5MywgMHhhMDM5ZDg1MywgMHhhZmZiN2EzZSwgMHg1MjM3ZGY0ZiwgMHg1NDhmODE3MywgMHgxY2U4MzcyYywKKwkweDY5NGVmNTE0LCAweDVmZjJkZjQyLCAweDEyZjM4MTg5LCAweGRjNThhYmM2LCAweDJhNWY1YWNkLCAweGRlNDAxN2U5LAorCTB4MGJjMmU1YWMsIDB4N2UwNTNhN2YsIDB4NjQ2N2FhZjQsIDB4M2NhN2EzZjQsIDB4NDFiZjQ3MjMsIDB4MDQ1YjM1ZjMsCisJMHgwNzZkNTNmNCwgMHg3NzBmZTg5ZCwgMHg1MWYyYzIzZSwgMHhmYjQzYTI4ZiwgMHg4YzA1ZGI3MywgMHhkYmQ5ZDUwNywKKwkweGUyMDFiZGVmLCAweDA0ODhjZjhhLCAweDE5NzA4ZGZkLCAweGUyOWQ4YmVlLCAweDU5ZmIyNjczLCAweDgwMDc5Y2JlLAorCTB4OWExY2I2NmEsIDB4ZWM1N2RmMGIsIDB4NzdkODEzYjcsIDB4ZjE2ZTc5YTgsIDB4ZjlhMDZmYjcsIDB4ZjQ2NGM3YzUsCisJMHhhYzc2NmE1MSwgMHg2NTdmNjA1MCwgMHg0MDg4NTg0OSwgMHhjMTMyNmJiZSwgMHhjNGZiNDNmMSwgMHhiZWRhMGVmMCwKKwkweDM2OWVkYmNiLCAweDJiZmIwZGM3LCAweDQ1NWRhMjBlLCAweGE3YjRmNmUxLCAweGE5ZjRhNmNkLCAweDBkMzUzZjBjLAorCTB4MmRkY2FiYmUsIDB4OThmZmMxZjgsIDB4YTM4ZWNjZjIsIDB4OWFiYmY0MTksIDB4YTczYzA0MjcsIDB4NDVjYmI1NTAsCisJMHg5Y2JhMThiNCwgMHhkZmEzMTM2YSwgMHg5ZDMzZjg4MCwgMHg4YmM1ZjgyNywgMHhjMDM0ZWI0OSwgMHgwZDhlY2Q3YiwKKwkweGI3MTMxNjhhLCAweDkyMzBkMzNjLCAweDdjZGVmNjY4LCAweDFjNzQxM2NkLCAweDkzZWQ1ZGZhLCAweDU4YTYxZjgyLAorCTB4ZTA0MTIzNmIsIDB4OWNlN2NlOGYsIDB4MzBkY2RiNjUsIDB4MDhjYTE1YmYsIDB4NTlhYmNjMGYsIDB4YzM4Yjc2ODEsCisJMHg3ZWMxZjZmMywgMHg4Yjc4NjU3YSwgMHg1N2Q2OGQzMiwgMHgyOTQ1YjIzZSwgMHhhYWE3ZTE4ZiwgMHgyZDEwZDc1ZCwKKwkweDZkNGUzZjg2LCAweGQ0YmY0ZGNlLCAweGFlODY3YjdhLCAweDU0ZjBiMTViLCAweDg4YjdhNjEyLCAweGM0NjY1NjE0LAorCTB4Yzg3NjdiZWMsIDB4NDUzZjljNDksIDB4ZGYwNmZmNTMsIDB4MTgyNzVlODcsIDB4ZWYzZDBhYzcsIDB4NzQxYWJjNDEsCisJMHhiZDMyYTY1YiwgMHhiY2VkZDA2MCwgMHg3NTI4ZTljYSwgMHhiMzg4Y2QxNywgMHhkMDJmN2FhZiwgMHgyYWYxMGVjMSwKKwkweDFiZmJkMzE1LCAweDZjNmU5ODdjLCAweDliM2U5MGQwLCAweGUxNTc3ZjAwLCAweDdiOTYwNmJlLCAweDg4NjI5MTI3LAorCTB4YTI3NTc4OGIsIDB4M2M5ZjUyYzIsIDB4MjE5NjJmNWQsIDB4Zjk2MDEyNGUsIDB4ODI4M2RiYjQsIDB4MWJmOTg5NzYsCisJMHgzODM5MjZlOSwgMHhiNzVjODIwZiwgMHg5NjRjNGZjOSwgMHg0OWJlYmFlOCwgMHg3ZTI1MmUwOSwgMHg3N2I0YmUzYSwKKwkweDYwNzVjOTcyLCAweGM4ZTcwNWE3LCAweDFkOWZiMGE5LCAweGU4ZjE2MGFjLCAweGEyZTQwZjg4LCAweDdjY2JlZjg5LAorCTB4ZDZmMjY2NGIsIDB4N2M2MGExOTQsIDB4OGJmN2QzNjQsIDB4NDFlZGExYjYsIDB4N2QzNjVlMTgsIDB4ZWMyNzdjYmYsCisJMHhlNjdlZDFhYiwgMHgxYWFlNTRjYSwgMHhlZTRmZGE2NSwgMHg5YjQ5ZmJlNSwgMHg0ZmQ0ZDEzYiwgMHhhMzBhZGNkYSwKKwkweDhmZDhjNTlmLCAweDZjZmQ2MDczLCAweDE5YmQ3YjlhLCAweDQ2OTViOTllLCAweDhmZDhmNTNmLCAweDRhZjM2MDY3LAorCTB4MTk5MjYzYmIsIDB4YjFhYTNiOWUsIDB4ZmRkYmY0OWYsIDB4MDY4ODFmNjgsIDB4ZGM3NjkwZmYsIDB4NGVlZjc1MTcsCisJMHhjNDk2YjcxYSwgMHgxZmU0ZDFmMiwgMHgyYTFlNzhjMywgMHg5NDdjYjE1NSwgMHgyNGMxMzEzOCwgMHhiMjdhNDk0ZiwKKwkweDc0YTgzZjI5LCAweDZhN2RhOWIwLCAweDlmNTRjNzIwLCAweDg1YjU3NjVlLCAweGJmYThkZDJmLCAweDhhODE0ZjMxLAorCTB4YWIzOGIxMjYsIDB4YmQ0MTU4MzIsIDB4ODFkODNjNTMsIDB4YmIwNmJiZjksIDB4NzVkY2VmNTEsIDB4YjAyYWYwN2QsCisJMHhkMDU2MDBmNywgMHhjMTI5NzdmMywgMHhiZTFjNmEzMSwgMHgwODEyZjNhMSwgMHgxYjM0Y2ZjNiwgMHgzMmVjN2RhNCwKKwkweDc5MzllZmJlLCAweGRlMjM1N2M4LCAweGQ5ZDdkZmE3LCAweGQxMjQ0N2JhLCAweGYxNGE0M2ZjLCAweGFkZWYzMDIzLAorCTB4OGRlM2IzMzIsIDB4OWQ4MjQzMzgsIDB4Y2U2YmZlYTAsIDB4OGExNmRhMmUsIDB4NTBjYjZiYzEsIDB4NmY0MjJmY2EsCisJMHhkMDcyMmRiZiwgMHg3M2I4ZmMwNywgMHg0YTU3NmZmNSwgMHhhMWE2YmUxNCwgMHg3YTZlMWUwYSwgMHhlMWVkZmU1YywKKwkweDliOTliNTEwLCAweDAwZmI5Njg3LCAweGVhODU3NmZmLCAweDE1ZjFkODhmLCAweDhlM2U3ZTNhLCAweGRmYzYxYmJmLAorCTB4ZDkzYjMzMmIsIDB4NjczZGJlM2EsIDB4NDc3YzY5YTIsIDB4N2M2OTg1NTYsIDB4YTdjNzQyODcsIDB4ZjU2ZmIxZjIsCisJMHg4YTdjN2MzYiwgMHg3OTA5ZWJiZiwgMHhjNzA3N2U1NiwgMHhlMDU1NjdiNywgMHhhOTBhY2RmOCwgMHhkMDlmOGQzMCwKKwkweDkwMDFmZTMzLCAweGNkZmRjMzlmLCAweGYzN2FlNzNmLCAweGNkMmFiM2ZjLCAweGZjZDg1N2YzLCAweDgwZmVhZThmLAorCTB4ZjM4MDlmOGYsIDB4ODBmZTU5N2YsIDB4OTJhYjNmY2QsIDB4ZmFjZWRmY2QsIDB4ZGJkZjE5ZWQsIDB4NjE1N2ZmODMsCisJMHgzN2Y1YWZmZSwgMHhlNjQ5ZGNmZiwgMHgzNmFiMGZmOSwgMHhjNmNlZGZjZiwgMHgyN2Y1NjM3ZiwgMHg4ZTM3N2M3YywKKwkweDA5ZmNhNmZmLCAweDZhYjBmZjliLCAweDA3YjE1ZjFjLCAweGNhNDdjMGZkLCAweGYwN2E4NDkwLCAweGE0NjFhOTlmLAorCTB4YTM1ZDQwNjEsIDB4OTIzYTQwZTMsIDB4YzgzN2E5YzUsIDB4NWRjNzA4MzksIDB4M2VlZjhjMDksIDB4ZTZmY2EwNGYsCisJMHgyNGE3ZDVlZSwgMHhlYTkwMjU0YywgMHhkM2NlNWFjYiwgMHgxNThiYmI1NSwgMHhkMDg0MmZlNiwgMHg0MWM0NTg1ZiwKKwkweGM0NWZiODVkLCAweGI0NmM4Y2Y1LCAweDc4NTM4Nzg3LCAweDIxOGJmNzNiLCAweDc4ZGMyZmM4LCAweGFjNWI5ZTIzLAorCTB4NzdkYzEzYjMsIDB4ZmEzMDU2YTcsIDB4YzBmMWZmMWYsIDB4ZjNiMWFkZTgsIDB4NWE4YmE2YjIsIDB4MTNmZWNiNjUsCisJMHhlZjM4Yzc4MywgMHhhNmFiMjQ1NCwgMHhhNzg4MjlmYywgMHgxMjdjM2Q1MCwgMHg5ZTlhMWZmYywgMHhiNDc4ZTk5NiwKKwkweDgzZjA0M2ZjLCAweDFiOTU4YWFlLCAweDc2OGMyZTc2LCAweGNlOWYyMjc3LCAweGZlMWNiYmViLCAweGY3YzMxMjUzLAorCTB4ZGMwNTNiYTksIDB4YzM3Y2Y4NDcsIDB4ZDlmNDA1NTIsIDB4Yzk5NzU2YTIsIDB4NzRlM2E4NmYsIDB4OGVjZTdlZWEsCisJMHg3OWM2OGRmYiwgMHgxNDUwNWJiZSwgMHhjMWZkZjkwOSwgMHhiYjA1MWQ2ZiwgMHg0MWU2ZjE3MSwgMHgyNzZlZWZhNiwKKwkweDE0NzBkNWUxLCAweDc5ZmFjMTczLCAweGZmM2E1NTQzLCAweGUzZWNjYWRiLCAweGViNmI4YzQ0LCAweDljMWM1ODQzLAorCTB4NDliODgxMGMsIDB4NzkwNmRiNTksIDB4NTJkY2NkMDgsIDB4ZjllYzliMjYsIDB4ZmNlNjgzNWIsIDB4N2NlNjE1NmQsCisJMHg2ZDk2MWNhNywgMHgxMTJjY2Y2MCwgMHhlZmRhMTZjOCwgMHhjYjY1ZWJmNywgMHg4ZTM2MDBiOSwgMHg3NmU2NDk1NywKKwkweGJiZWYxYjI1LCAweGI0MTk4Njk0LCAweDhlOTBmYmU4LCAweGU5MTU2MjgzLCAweGRmNjU1NzNhLCAweGRkZDRmMDFhLAorCTB4YWUyODkzMmQsIDB4YjhhOTFkYzcsIDB4NDU0YTE0MGYsIDB4YjJhODJkYmYsIDB4OWRlMTViNzksIDB4MDBmNDNiMmIsCisJMHg4ZmVlNjc4NSwgMHgxNWE3YzQ0NCwgMHgyZTgzOGVmZSwgMHhmM2VkNDZkZCwgMHg5MDdmY2Q4ZSwgMHg5ZDZjN2UyMSwKKwkweDNiZmUxNThmLCAweGEzZTc1Yjk2LCAweGNjM2ViMDJhLCAweDE5Y2I1OTBiLCAweGE5Zjk1ODlmLCAweDM2ZjE3ZjZlLAorCTB4ZjM3YjNkYjMsIDB4YjVmYjU4YjYsIDB4NTMwY2Q3NmEsIDB4NTZmODQ5N2UsIDB4OWJjNWZiNTMsIDB4MTdlYTk5ZTcsCisJMHhkNTMxMmViNSwgMHg2YTU5NjgyZiwgMHhmZDBiY2ZjYSwgMHg4ZWZlZDRjOCwgMHhmNTRjMmJlNSwgMHg2MzVmYWZkZiwKKwkweDYyYWRiZmFhLCAweDZiN2YyOTgzLCAweGZiNTMyMWYwLCAweDk4YjZjYTViLCAweDQ3MDc2ZGVhLCAweDY4ZTQwNzdkLAorCTB4OWUyMmViZDUsIDB4M2VlMGJkZmQsIDB4OWJkODJmNzUsIDB4ZWUxMmRjMTcsIDB4ZWQ0NDdlNzMsIDB4MzM4MzkwMTUsCisJMHhiNDgxNWVkNCwgMHhmNDc4ZmY3MywgMHgyYzFlYTlhNywgMHhmOWEyNGQ4NywgMHgyZDU1OThjYSwgMHgwOTk3YTA5OSwKKwkweDY1NzJjZmVhLCAweDI0ZDBhYWMyLCAweGQ3YjAxNzhhLCAweDliODg3Y2E5LCAweDA0MWQxMjE1LCAweDBmNzI0Y2NlLAorCTB4MzE4Yjc3MWYsIDB4YTk5NzFkZjUsIDB4N2QwNTRjZGYsIDB4YjE3YWRmN2MsIDB4ZGQ3OTdlMjMsIDB4ZDRjMzc5ZDYsCisJMHhhZjZhN2UzOCwgMHhiMDIxOTJkYywgMHhjZTU5NzVjZSwgMHhiNTY5MTg5ZiwgMHhiMWE3M2NlNSwgMHhlYjgxN2RiZiwKKwkweGU5ODU2YWQ5LCAweDE5YmRlYTgzLCAweDg2NzM2MTkzLCAweGUyMjNlNWZhLCAweGY5ZWM5YjlkLCAweDBkYjAyMjNlLAorCTB4NTNmZWIwNDgsIDB4OTg4NjFmODEsIDB4NzZhYTZiZjYsIDB4ZmJlNDlhZTUsIDB4ZTExMTIxZWMsIDB4NDA5ZDA1YWEsCisJMHg1MjE3ZWFmNSwgMHg3MjAyOGQ2MCwgMHgzNTkyM2QxNiwgMHhhMWMwMzQ2YiwgMHhlZjQwNTVhZiwgMHg3NWM1NGZlYywKKwkweGU5NDM2Y2ZkLCAweDNmYWZkODM2LCAweGY0YzAxMGQzLCAweDRjMzI4NmEzLCAweDMxMDQzNTRmLCAweDAyYTFiMGZkLAorCTB4ZjUwZDkzZDMsIDB4MmMzNDc2OTgsIDB4ODZiZGY0YzcsIDB4MzZlZmE2MTAsIDB4YmJmYTYwYjQsIDB4ZGY0YzU2ODYsCisJMHhlOThjZDg2YSwgMHg0YzYxMGQxYiwgMHg0Yzc0MWIzYiwgMHhkMWU4NzkwZCwgMHgwZjZlMDFiZiwgMHg4NGQ3MWIxYiwKKwkweDJlN2NjM2RiLCAweGU3M2RhOThkLCAweGY3ZmY3MGMyLCAweDExZjNmYmJjLCAweDdmOWZlZjYwLCAweDZjZmI4ZWNiLAorCTB4Y2FjYmUxZmQsIDB4NTFkM2ZkNmYsIDB4M2NhNTdiNDcsIDB4NjM5ZDA4M2MsIDB4ODEzM2JkNmIsIDB4MjM2OWM5ZDEsCisJMHhlYzFjNjRhNSwgMHhjZmY0ZWNmZiwgMHhjNGJjYzdjZiwgMHhmZDg0ZjUyZSwgMHhmYTcxM2MzMywgMHhmYTVkNzg4NSwKKwkweGY0NDRlOWU1LCAweDk0OTk4MmVlLCAweGZlMWVhNzFlLCAweGY3ZTgyMmFmLCAweDYwN2ZhYzAyLCAweDcxMTExYzA3LAorCTB4NmRkMTI2MWQsIDB4OTVkN2EwN2UsIDB4ZTE3ODRkZTIsIDB4MmYxMDU5ZjcsIDB4YmY4M2Q3M2IsIDB4OGI4ODJjZjYsCisJMHhkOGE4YWI1ZCwgMHgzYjM2ZjlmZiwgMHhmOWQyZjg4MSwgMHhjZmJjMmUwMywgMHgzNmQ4ZmU3NSwgMHgzMmUzYzgyZiwKKwkweDNkOGUxODlmLCAweDZiNGQ2MTQ3LCAweGI3NjFkOTIyLCAweGU3MzZlZmM5LCAweGE1MGFiN2NmLCAweDY4OWExZTc4LAorCTB4MDM0N2IzODksIDB4Mzg2MWE5NWYsIDB4ZTBkOWQyMGYsIDB4NjdlOGQ0YzMsIDB4NzFjMTRmOTksIDB4NjVjYWVjY2UsCisJMHg1ZTdlMzM3MSwgMHg0MjRlZWM4MywgMHgyNzdlYTU3ZSwgMHg4NjlmZmZiNiwgMHgwYzdlYmZhNywgMHgyMzY5MDg3OCwKKwkweDVlMDgzODFmLCAweGRiOThiYjcxLCAweGY5N2VmYjdmLCAweDgxNGNmYTQ5LCAweDIwMzkyYWY4LCAweDgyZjYwZTdmLAorCTB4MTE3N2ZlOWQsIDB4NjEyMjY1MWMsIDB4MmViN2U4ZGUsIDB4NjNlYzg2MjIsIDB4NjliNzdjYTAsIDB4NjY5ZGZhM2MsCisJMHg3MzE3ZjRmOCwgMHhlNmI3YzUyZSwgMHgwNDIyMzRmYiwgMHg5YzQ2YmY2OCwgMHg4MGZlMGFhNCwgMHgwMmY1MzBmMywKKwkweDc4OGNhYmM2LCAweDZlZTQ5NzQ5LCAweGM2ZjRjNjExLCAweGJjNzhlYTRiLCAweGExZDFjNmI4LCAweGI5ZDE2OTA0LAorCTB4ZWU0YmRjYjYsIDB4Mzg2OTllOWYsIDB4YWYzOWMyYTYsIDB4MDJhYjQ3MGEsIDB4NjQ0NTRmY2UsIDB4YjllODA5NTQsCisJMHhkMmFiNmQ3MywgMHgxMmFjMWVjMCwgMHgyZjE1ZGZjZiwgMHg2NzY3OWI3ZSwgMHg2MTI1YmQ3MSwgMHg4ZWJjZGJiOSwKKwkweGI0MjBmZTcyLCAweDFkOWNhMzVmLCAweDhhOWY3NDcyLCAweDMxYjU5ZmM5LCAweGVmZGFkYjNiLCAweGY2YzBmYjA0LAorCTB4MWY3NzZhMmQsIDB4ZDY4Mzc2OWYsIDB4ZmJiNTRmMTcsIDB4M2UzMDU1M2YsIDB4NWM1MzExMmUsIDB4N2JkZmMwYzksCisJMHg5ZDgyNjA0YSwgMHhkNzcyYTllMiwgMHg3ZThmNjhmYiwgMHhkYzQ2ODcyNCwgMHhkNGZkMDk3ZCwgMHg5ZjZlN2U3NywKKwkweDg4NzI3Y2U5LCAweGYzMzhjM2I0LCAweDg4ODFmMjI3LCAweDc0M2JjYjc2LCAweDE1ZjhmZDNkLCAweGU0ZGI5ZDk5LAorCTB4ZjY3YjgwZTcsIDB4ZmViZWY5OTUsIDB4ZGY5YjllMDIsIDB4ODRlNzg1NTYsIDB4OGZmN2RlM2UsIDB4MjQyZGZmNjgsCisJMHg4MWQyMmYwMSwgMHgxZDgxMTZiNCwgMHg0YWQ4OGU3OSwgMHhjOGU3NGYwMSwgMHgzMWYxZGU2YiwgMHgzYTk1Yjg3NCwKKwkweDA1ZWY0MDRhLCAweDg2M2I2NjJkLCAweGZjYTZiZmRhLCAweDdjZTZjZGUyLCAweDA2OTk5OTM5LCAweGEzN2NhNGZhLAorCTB4Y2UwMmMyNGMsIDB4YjM3ZjU0Y2YsIDB4MTc3ZWM1NWQsIDB4NTgyNmZhOTMsIDB4OGZlZTI1NTcsIDB4MzQ4OTU3Y2MsCisJMHg5YWQ1ZWE4NCwgMHgzNDU2N2Y2NywgMHhiNDExYzI4ZiwgMHg4OGM4M2YzMywgMHg2NjQ5MmNiZiwgMHg0YTY1NjA3NiwKKwkweGMyN2Q4MTU4LCAweDdmYzZkYTBmLCAweDgzMjAwNmY3LCAweDcxMDRkYzNkLCAweGZjNDg5MjI4LCAweGZjNWY0ODNiLAorCTB4NTZmYzI5NWUsIDB4YmFmNThkNzgsIDB4YzM4ODFjNGYsIDB4ZTIxMmVlMjEsIDB4ZGFkNjAzZWUsIDB4ODZjZjZlMDUsCisJMHhlN2MwM2QzMCwgMHhjNzA1Zjg2ZCwgMHg3NjE1ZjkyYywgMHgyNDUyZGU3ZSwgMHg5Y2ZkZDAyMiwgMHgxMmQ5MDhlYSwKKwkweDg1MWZkZWIxLCAweGJiNWVkYzc4LCAweDcxMDY5NTdmLCAweDdiNmFjMGZjLCAweGRmZGM2ZjZhLCAweDBmNjQ5NzY4LAorCTB4ZTE1OWY5NjIsIDB4ZjczYzcyZDUsIDB4ZjAwYjQ1MjAsIDB4ZWY4ZjIxZGUsIDB4YzQxZjljMmIsIDB4OWMwMTZmMDQsCisJMHhkYzQwZjUyMywgMHgzYTc1Y2UxZSwgMHhkZjIxNWJiZCwgMHhmM2MwYTllNCwgMHhlZjIwNzUxZiwgMHhiYzdiYmZiNCwKKwkweDljNDE4ZWQzLCAweGEzNWE0MWRhLCAweGJiNWZlNTNhLCAweGEwMWZiMmNmLCAweDkwMmVmMzk5LCAweDUwNjdkMDRiLAorCTB4MDlhMmU3ODAsIDB4MjM1Y2I5YzYsIDB4N2UzY2VkY2QsIDB4MmUzMWZlNzMsIDB4NDM4MTc0OGYsIDB4ZGYzOWVlM2UsCisJMHhlMTQ3NzBlNiwgMHgyODk5MDkzYywgMHhiN2YxZWQ5ZCwgMHg2M2RmYzA3MiwgMHg1NmZkYzNmMCwgMHhjYWE3N2Y2OCwKKwkweDdkZjJkN2RhLCAweDllZGYzYmRkLCAweDA5N2M5ZTljLCAweGE1Zjc1NDdkLCAweGViMzFjMjQwLCAweGFkZDQ5ZDQ4LAorCTB4N2RkNjFmMDAsIDB4ZDdmOTYxMjksIDB4NWQxYTliZDYsIDB4ZTZmNDYzNTUsIDB4NTlmMDRhMmIsIDB4MjdhNjA0ZmIsCisJMHg4ZTgxM2UwMSwgMHg2NGRmYmIxMywgMHgwMjcwODdiZCwgMHgyZjQyNjFmOCwgMHgzODZkN2MzZiwgMHg3ZjQ5ODg1MiwKKwkweDhmMDRhN2JmLCAweDZiZTM4M2M1LCAweGQzZWJlZmY3LCAweGJiZTAwOWZmLCAweGYzZmViMWZmLCAweDExZGZmNGZhLAorCTB4Njc5YWZlMGYsIDB4ZDEwYmVjZjcsIDB4MTdmMmI1ZjUsIDB4MTBlMTc4MGYsIDB4NmI1MmM3ZDMsIDB4YWNlZjljMWEsCisJMHgwYmRhYjFkZSwgMHgxNDkxZjk3MiwgMHgzZjVkMDJmMiwgMHhlZjcxOGIwZSwgMHgwYzNiYTZlNywgMHg3MGRkZDNiZSwKKwkweGYzOTZiMDhmLCAweGFmOWY5OWRkLCAweDJmZjgzNmZiLCAweDU1OTBlZjlmLCAweGIyZWMwZjhjLCAweDI5OTRlZDQ3LAorCTB4MzA5NmRiNmIsIDB4N2Y2NWQ4ZjksIDB4ZjE5YmU1OWYsIDB4N2VkZDUzYmMsIDB4N2NhOGJlYjMsIDB4MGQzNDgxZmMsCisJMHhiODg1NTUwZiwgMHhmZjQ1MWNmZiwgMHg3ZmZiNzZhMCwgMHhhYmJiMDM0YywgMHhkZWEzNzQ4ZSwgMHhlMzA3N2ViMywKKwkweGY2OGM5OTdmLCAweGIxMjUzY2MwLCAweDBlNzFiZDZmLCAweGE1ZTM4ZWFiLCAweGRlMWQ2ZGFlLCAweGJiNmJhZjEzLAorCTB4OWExMzM0ZjksIDB4YWQzYmY0MGUsIDB4YmI3MDU1ZGYsIDB4OWYzMGUxZGYsIDB4NDJmMDM0ZGYsIDB4NWZlZWNjYzIsCisJMHgwNTgzYzRmNSwgMHhjZWI4NTNlZiwgMHgyYmM1N2Y2ZSwgMHgyOWYyYzdlNCwgMHgyM2U3N2ZkMywgMHhhNWZiMWUwYiwKKwkweDc1NWNiZmQ2LCAweDZiMThmZDUyLCAweGI0ZWIxYjVmLCAweDJiZmI5ZmI2LCAweDJkNWE1ODA3LCAweDBmZTBiZDQ3LAorCTB4ZjE5MTZmNTYsIDB4OWVmNTdiYmMsIDB4ODYxZjNiNmQsIDB4NzZkYmNjZjgsIDB4N2ZkYTcwZmYsIDB4ZGU5NzllZDUsCisJMHhhYmU2OWViOCwgMHhhNjUzOTI5ZSwgMHhlMWI4NjliMywgMHg5ZjQxYTI5ZSwgMHhmMmRmZmEzYSwgMHhhOGY0YmQ3MSwKKwkweDQ1MjVmYTdjLCAweDdmY2FjZDFiLCAweDk3NGJkYzljLCAweDI5MGVhN2FhLCAweDdjNWY3NDY0LCAweDUyMWM4OTRjLAorCTB4ODViNjdlZDgsIDB4YTdmNzkxM2UsIDB4ZWFiMTVmODEsIDB4ZDAxNDJmODksIDB4MTQxZjFmNWYsIDB4MWM3NjdhNDgsCisJMHgwOTc5NmU3YywgMHgxM2MwNjNlZCwgMHhhYmQzOTNkMiwgMHhmNjk2N2U4NywgMHhhODJlOTQ3NSwgMHhiMmY0MmQxNywKKwkweGFmOThmYmI2LCAweGM0MmZkMDA3LCAweDNmN2YyOWUzLCAweGI3ZDg0YmY5LCAweDBmZGQ5ZGY5LCAweGYyNzhhODc4LAorCTB4OWYzMGJjOWYsIDB4ZTMzZDUyZDMsIDB4NGVhZDlmZjMsIDB4MTUyMGZiODMsIDB4YzU0ZDI4NzIsIDB4M2M1Nzk1OTQsCisJMHhiZmU0MDNmYSwgMHg5MDdmYzdjNSwgMHhlYWM1Y2VjNiwgMHg1NzVjZmMxOSwgMHhkMTczY2MwNiwgMHg5ZTcwNzMyMywKKwkweDdjODgyNGU1LCAweDc2MzNmMTU4LCAweDQ0ODJmY2NmLCAweDIzOGE5ZjRhLCAweGQ4MzlmNzI3LCAweGFiN2E3NjNhLAorCTB4NGYxMTM3MWQsIDB4ZmIwMjQyYzMsIDB4ZTE4OWFmMTgsIDB4NjQwZjE4MWQsIDB4NjA3ZjBkZTcsIDB4NjU5MTNmZWMsCisJMHg2MGUwYmY5OCwgMHgzMGU0NWFmNCwgMHhhNWQxZjFlZSwgMHhiNzdmOTYyNCwgMHg5ZDAzYjczNywgMHhkM2Q1MGNjZSwKKwkweDQ3NWM4ZTIxLCAweDg3YzcxMGE0LCAweDJiZjY5MTcwLCAweGNlOWE5ZjFlLCAweDUyNjgxZGNmLCAweGVhOGVmZjExLAorCTB4MGU1MDI5ZmYsIDB4ZGQ2NWRiZWQsIDB4OGVmYTYwNTksIDB4MWRlZWNjNWMsIDB4M2UzZTRlZmYsIDB4ZWMwMTNiODUsCisJMHhkNDY5ZDNkNywgMHhiZjMzOGMxZSwgMHg5ZDYzMGUwMywgMHgwYzU2NzZhNiwgMHgzYmM4YzU5ZiwgMHg2YmVkZmY5MywKKwkweGYyMWJiYzk4LCAweDBhNTE5ZTFmLCAweDYwOWQ5ZmY1LCAweDgxZGYwNDcyLCAweDhhZTE0MmZkLCAweGExZmQ2M2E2LAorCTB4MDdlYTAyZDksIDB4OTNjNjg5M2IsIDB4OTczMmVkZjMsIDB4OTViZDczNzMsIDB4MTJmYzI4NWYsIDB4N2MzZGM3YWMsCisJMHgyMzI0ZTMwMywgMHgyZGJlZDAxZCwgMHg4ZmJmNDhkZiwgMHhhZTMwYWJkNSwgMHg4NmJmNmZiNywgMHhmYWU2MmYxYywKKwkweDFmNDVhZDYwLCAweDA3NTI0NzkwLCAweDJkNWI3ZmI0LCAweDBjM2U3Nzg3LCAweDM1ZTU0YmYyLCAweGNhZmM4MWE0LAorCTB4MjdjMTVlZjgsIDB4ZjFiYzhmYmIsIDB4OWZiNzJhM2QsIDB4MzViOTBjNDQsIDB4ZGNhYjU1ZWIsIDB4NDA5ZGVjNTYsCisJMHgyN2VkYzllMiwgMHgyYjg5M2Y2ZSwgMHhhZTNjYjRiNywgMHg5MDNiYmFkYywgMHg3YWQ2ZmY5ZiwgMHhkM2UzYzBkNSwKKwkweDdhMWEzYzE2LCAweDVhN2MzZmIyLCAweDFkYjdlNGY1LCAweDQ5M2Q1YzVhLCAweDQ1MjA5ZGZmLCAweGUwZDFmOTdkLAorCTB4MmFmZjgzNDMsIDB4Y2YwNmE1ZmYsIDB4YTlmMGY1MGIsIDB4N2MzZDg3YzEsIDB4OWY2MWYwNmEsIDB4OGYwOWE0NzgsCisJMHhlMWJiZmFkNiwgMHhjMDg1M2E2ZiwgMHhjZmM2MzI3MywgMHhmZGIwMGZhYiwgMHhkMWRkZmE2NywgMHgyZjg4ODUyMSwKKwkweGQyMzk5NzFkLCAweDRhNDg3NDdhLCAweGM5NmMzZTZjLCAweDc1ZWQyYzQ3LCAweDY5NjAzZTRiLCAweGViZTRiNDFmLAorCTB4ZjdhYmVkNGQsIDB4YjlkODUxMWYsIDB4OWRhOWE4OWUsIDB4ZTRhN2ZjYjgsIDB4MDFmMTM4ODMsIDB4NmJhYTFkNjMsCisJMHgwMTA5NTRmYiwgMHhmMWJiYjg3ZiwgMHgwOTI1Nzk3YiwgMHhmZTVlMjA3OSwgMHhmMmYxODhiYywgMHgyNmUzOGEyZSwKKwkweGVlZDc0ZTNhLCAweDYwOGY3YzZjLCAweDU3YzU5M2I1LCAweDJmNmVkNGJhLCAweDkzYWI5M2Q4LCAweDU1M2JiZTU4LAorCTB4NjgzZDAyNjksIDB4NTkzYjc3OTQsIDB4ZDAyYmFmZGMsIDB4YjE4YTRkZWQsIDB4MjAzZmRlZWYsIDB4MDhlZjFlYTIsCisJMHg3ZTc4ZDI5MywgMHhhMTQwZGUyOCwgMHhmZDIwZWRmOCwgMHg4MGZkYjNkNSwgMHg2MWQ3YjAyZSwgMHgzMGFjODRiYywKKwkweGQxNTRlM2YwLCAweGUyMWNiNTlkLCAweGRlMjJhZDM1LCAweGUyYjg1YjZiLCAweDIzOWMyZjE2LCAweGZiOTAzYWU5LAorCTB4YmU1YTMyOWQsIDB4ZGIyMmQ3ZTgsIDB4NTJlOTBjYTYsIDB4ZjgxZjhjNDYsIDB4OWE2ZDA5MTEsIDB4ZjVmZWMwMjQsCisJMHgwNTlmZTQ3YSwgMHhiODVmOTgwNywgMHg3OTdjN2Q3MCwgMHg5NWRmZTRhOCwgMHg0MDU0ZWZiYiwgMHhlZTdmNTJlZiwKKwkweDg3YmVlYzY0LCAweDIzYzU0ZmQxLCAweGZmMDNmMjk2LCAweDE1YTZlNWM4LCAweGRiOTUxZmUzLCAweDFlNDFmNWNkLAorCTB4ZTRlYzE4M2YsIDB4OTJjN2JlZTcsIDB4Yjc3ZmRjYjEsIDB4OWUwZmRlYzUsIDB4YTc3ZmU2MmEsIDB4ZWJhN2QyOGMsCisJMHgzY2UwNDg5OCwgMHgyMjAzZjljMSwgMHg2ZWZjZTdkMiwgMHhlMzAwN2U3NiwgMHhiZjAxZDdmYywgMHhlN2IxMmI3NywKKwkweDdjODJjZWE5LCAweDFlYmZkNTVkLCAweGVmY2NmYjNiLCAweDNlMDZlZThiLCAweGMxNGVmN2RhLCAweDc2N2E2OTRmLAorCTB4N2UyM2RiZGYsIDB4ZGY2N2Y5MDUsIDB4ZjQ4NzdhY2MsIDB4YTBlNTNmNmQsIDB4YmE1NWY3MTMsIDB4ZmY5MDdhMGUsCisJMHg0ZGZmOWViYiwgMHg3ZjkwZGRkNiwgMHhlY2YxOGVjZSwgMHgxNDVmODNhZSwgMHhhZDc1M2YwMCwgMHgxZTgwNTdiNCwKKwkweGVmZTdlMmVjLCAweDQ1ZmYzZDU2LCAweGJmYWUwNzQxLCAweGE5Yzc0ODhkLCAweDlmNGZlNjRlLCAweGVmNWZmMDNmLAorCTB4ZjM4MWZkYzEsIDB4YzBhY2U4MDcsIDB4NDJlODM4YmUsIDB4YTVmYmFhZjksIDB4NWQ2ZmUzMTMsIDB4MTQ1MTdmY2YsCisJMHhhNWZjMjdlYiwgMHhmYmU1YTlmMywgMHg1MjFlNWQ5ZCwgMHg0YmUwMTdiNiwgMHg3NTQ0ZmI2MiwgMHgxYjZlYmFiZiwKKwkweGQzNTEyZmJjLCAweDQwNTk0ODc2LCAweGYwYmNhN2ViLCAweGFmZDAwMmE3LCAweGRkOTk3YjVkLCAweDNjNzcyOWQ0LAorCTB4ODE3OWZiMGEsIDB4Y2EzNDBmMzUsIDB4MjA5ZDVlOTQsIDB4ZmY2OTgzNjQsIDB4MDEyOGRlNmIsIDB4OTc4YmVhMzksCisJMHg3MTVjNjEzZiwgMHhmYzU4ZjhhMCwgMHgwNDNlMGQ3ZiwgMHg0ZjNmZTk5ZCwgMHgyOTg1NGMxOCwgMHhkZWY4ZmYwNywKKwkweDBlMjdhMDNiLCAweDhkMmY5MWRhLCAweDU5MTI3ZWY5LCAweGU1Y2NmNjgxLCAweGZmZjRkZGU2LCAweGU4ODViY2RjLAorCTB4MDNiZGU2NDAsIDB4ZWZlMTNkZTYsIDB4YzBkN2RlNzcsIDB4YmVkNGExYTEsIDB4Y2Y5N2QwNzIsIDB4ZjMwYmJmOWYsCisJMHg4NDdlM2M3YiwgMHhmZWZjODA3NywgMHhmY2Y5ZGZkMiwgMHg3YmVlOThhZiwgMHg5N2JkZGQyOSwgMHg3Zjg3Zjc5ZiwKKwkweDlmZWVmM2U3LCAweGNiOWViZmVlLCAweDc5YzJhZWU5LCAweGZlMTdiYTk4LCAweGE5NWRmMDg0LCAweGZlMTI5MzllLAorCTB4YmZiZGU1YmUsIDB4ZmVmNjFiZjksIDB4MzViZjliNWEsIDB4OTNjZjFiMjcsIDB4NzBiMGMwM2EsIDB4NDBiNjY2N2IsCisJMHhjOGVkNzE3OCwgMHg5ZGQ4MmE5OSwgMHhkNWVmM2Y2MiwgMHg3ZTYwNDg0YywgMHhmN2IwMjg5NSwgMHgxNjUwYzgyMSwKKwkweGNmZGMyNDBmLCAweGY4MGQ2MzgyLCAweGRkOWI4ODBlLCAweDRkZGM5MzNiLCAweGM5MTM3NzY4LCAweGJjNTNhZWRmLAorCTB4YmU3YWJkYWMsIDB4OTExYWNmMWYsIDB4MjEwNTZmNzEsIDB4OGZjOTM5OWYsIDB4YmY4YjZlZjEsIDB4NWQxMDI4ZDksCisJMHg3NGFlZjZhMCwgMHg4MThmMzdmNSwgMHhiNDhmMjNkZiwgMHg5ODA1ZWQ0NSwgMHgzMzY5MGZiZSwgMHhhYWNhNjM4ZiwKKwkweGRjODdmMjYyLCAweDUzYmNlNmY5LCAweGJjZWRlNzMzLCAweGYwNjEwNzNmLCAweDBjMjQ3YzNiLCAweGQ0NzE2Y2YxLAorCTB4ZDNjZTE1NjEsIDB4MDIyNTYzODksIDB4NDkzOGE1NGYsIDB4MGVmYzA4NmIsIDB4N2RmY2NmYmIsIDB4N2VlMTAyNTIsCisJMHhjNzg2NWZlZiwgMHhhNzE2MDQ4YSwgMHhlZDcxODUxMiwgMHg5NDcxZTAzYSwgMHg3OGRjZTMwZCwgMHhlMmYxMWI0OCwKKwkweDA4YmFmN2M3LCAweGYxN2JhZmY3LCAweGY4MGVkNGRhLCAweDY2M2ZjMDk0LCAweGQ1ZmExN2Y2LCAweDEyZDNmYjg0LAorCTB4NjkxYTQyZWYsIDB4NzZlNjlkZDMsIDB4MmNiZThmZGMsIDB4YjI1ZDE4OWQsIDB4OTY5ZDM5YWEsIDB4ZDA2MmU4OTksCisJMHg0YzdkMGUyMSwgMHg3Y2YwMzE3NCwgMHhkMmIxZjRhNSwgMHhlYmZmOGFjNSwgMHhmNzVmMTgxMywgMHgyZTgzMmY0NywKKwkweGVmMWQ2ZTk5LCAweDdmZGNjOWQ3LCAweDEzM2YwMTI4LCAweDgyMDE5OWYyLCAweDdmZGNhYmZiLCAweGJjNzQ1MjkwLAorCTB4N2VhYTI0YTcsIDB4N2UwMDk3YmMsIDB4ZTAxYTk0NWMsIDB4ODZkZWVmMmYsIDB4M2Y3M2E0ZjEsIDB4MDBkYmZmN2YsCisJMHg0NGFmZDU0ZiwgMHhlYmY4YTBlMiwgMHg1MTIxZWRkYywgMHgyYjBhNWVmOCwgMHhiNjU2OWZlMCwgMHg0MDRmYjg4OSwKKwkweGFjZDE2OGE0LCAweGMzNjI3ZDk4LCAweDg1ZmFhODBmLCAweGI5NTNlNzA3LCAweDRlOWUxZWQ3LCAweGY3ZGNhZmJmLAorCTB4NjFkYTAxNDEsIDB4Y2ZkMWJiMmIsIDB4NjA1Y2ZkMDksIDB4MTQ3NTBmNzQsIDB4YTU3MDNlYzAsIDB4MmIxMWZjYzQsCisJMHg2MDQ5YWNiZiwgMHhjZmIzOTZmMSwgMHhhZTIwY2FiOSwgMHhlNzYyZWMyMywgMHhiNzIzMmI3ZiwgMHg3Mzk4ZjZjOCwKKwkweDk5MDRhMTRkLCAweDczOWU5YmM1LCAweDNkMDg1ZWExLCAweDI4ZjllMDIxLCAweGRjZjYyZjgwLCAweDljODdlMWE5LAorCTB4ZjA2MDQyN2QsIDB4OWRmMTk3ZWQsIDB4NGY1ZGNhOTgsIDB4YWE3YzQyNzUsIDB4MWZiYjJkZjIsIDB4NWRiYWY4Y2MsCisJMHhjODdlZTI5ZiwgMHhmMWVjNWY5NCwgMHgyZTFmYTA3NiwgMHg3ZDEyZTI5YSwgMHg0NGJiMDFlMiwgMHhiNmRhOGZlNCwKKwkweDY4NDNmNDFhLCAweDM2YTJmOTFlLCAweDJiZWZmZGMyLCAweDdlYWI1N2Y0LCAweGI4M2VmY2YxLCAweGY0ZjU1NjcwLAorCTB4N2Y4ODVlZTMsIDB4ZTFkZjY5OWQsIDB4YWVjMGI4YzUsIDB4ZmFlN2M3NGIsIDB4MzU5MWZmZjgsIDB4ZDZmZmZmZGMsCisJMHgzYjRmNzY2OSwgMHgwNjdmZmZiZSwgMHhmMTc2YTBmZSwgMHhmYjk2MDlkMywgMHhiMTA2YmJhYiwgMHhiNDQ5MTRmNywKKwkweDcxZWY1MmU4LCAweGYwYjllZDU1LCAweGNmYWZjNDI4LCAweDUxZTRmZGVlLCAweGNmZmFiYjgwLCAweGZjMTQ3ODdmLAorCTB4YTlkMDcyMGEsIDB4YmE4MjdkYzIsIDB4ZjE4ZWJmOWYsIDB4ZGZiYmUzM2UsIDB4ZjlkMDNkNzAsIDB4MmYxOGUzYzQsCisJMHhmYTliN2NlZCwgMHhlNzVmZjQxZiwgMHhjMGIzYTdmMywgMHhlYTdjZWNjZiwgMHg0ZjEwNjk4ZiwgMHhhOWY5ZjNiOSwKKwkweDlkY2U2ZWY4LCAweDI3NDk0Y2NmLCAweDkxODlmNDcxLCAweDA3ODZmZjAyLCAweGQyYjVhZjEwLCAweDExZGI0OGVkLAorCTB4NTFjZTdmZjQsIDB4ZDlmZjgzYmEsIDB4ZDQ4OWQ3MTMsIDB4YzY5OTc4YjAsIDB4ZTNiYjM5ZTMsIDB4YzRmYmM3YzcsCisJMHg3ZDY2ZGE2ZiwgMHg0ODQyYzZlNywgMHgwNjQ2YmY2NSwgMHg0MTM5YzcxMCwgMHgwMDY2MzllOSwgMHhlM2NkZGM3NCwKKwkweDVkNmY5MTc1LCAweDBlNzM4ZTMyLCAweDNhZjRhMGZlLCAweDg1ZTNhMTZiLCAweDNkOGY0NWI2LCAweDgzNmQ3NTBjLAorCTB4NDRlMzhkZmEsIDB4MjMzZjgwMDcsIDB4NDEzZmJlZmUsIDB4ZTQwMTIyZmYsIDB4NjBiZmVmNjgsIDB4MzdlODBjZmMsCisJMHg3M2I4NGU5ZCwgMHhkODJjODVjZiwgMHhlZTQ4ZjhiZiwgMHg4NWVmOGI5ZSwgMHgyMTU3NmYzYywgMHhmY2Y5NTExZSwKKwkweDlkNGYyODliLCAweGY4YzcxY2NmLCAweGYwNzFlMTM2LCAweDhmZjNkMjRlLCAweDk5ZjkyYmM1LCAweDFlZWRiYWNjLAorCTB4NzRlMWZmMTYsIDB4ZTY5MGY4ODAsIDB4MDcxZTcyYzUsIDB4YzQ2ZDdjNjIsIDB4MGI4YmZhODcsIDB4NzNiMTcxOGQsCisJMHg0MGJlYzYyNywgMHg3ODc3ZjZjZCwgMHg2ZTk3YTViYywgMHhkN2EwNDRjMiwgMHhjZmRjOTdmYiwgMHgwMmEwZjAzMCwKKwkweDhkOGRhZTFlLCAweGMzOGZjNjdiLCAweDJkM2RjNGY1LCAweDQyN2EwMzc0LCAweGFlMjdiM2JjLCAweDdiMTNkODQ5LAorCTB4Y2RlMTYxNzUsIDB4Y2VmNDcxNzgsIDB4ZGE1ZTJjMmQsIDB4OGYzZmM3MjksIDB4YWY0MWM0NjUsIDB4OWZlMjU5NzYsCisJMHgzZmM1ODFlMSwgMHgyYjhmMzcyZiwgMHg5NzYwZDNjNSwgMHhmMTVhZmQ4NiwgMHhmOGFiZjY3NSwgMHhhZTViZmRmYSwKKwkweGU4NWY5ZDgxLCAweGRhYWQ3Zjc3LCAweDNkZTYxZjdjLCAweDA1ZGQzODI1LCAweGVmNmQ2YmZiLCAweGE3Y2YwNDJiLAorCTB4MmI3M2IzNzQsIDB4Zjk2N2JlN2MsIDB4M2ZiM2QzZjksIDB4ZDYyZTMxMTcsIDB4ZmE4MjM5MTQsIDB4OGMzZmFhZGQsCisJMHhiYzJiNTdmZCwgMHg2Yjc4NzA3NywgMHhlM2Y1YjNmNywgMHhkODRmNWVlYywgMHg3YjM5ZmI0ZCwgMHhlYmU0MzlmOCwKKwkweDYzZWZkZGRhLCAweGFlZThlZTVjLCAweDk4OGU5NWE3LCAweDhmZDYxNmY1LCAweGNlN2NjYzcwLCAweDgwYTg3OTNlLAorCTB4ZGZlMzc5YzUsIDB4MzE3MWFiMWIsIDB4NDBlZWIzN2IsIDB4NzZlYTcxZmMsIDB4YTcxYTZhN2YsIDB4OTg1MTE0MmEsCisJMHhmMWU5NzAxZCwgMHgyZGZhNDhjZSwgMHg3Njk5ZGZkMCwgMHgzYTRkZGYxOSwgMHhiZWUzMTExMywgMHhjOTcwMWMxNywKKwkweDk1YTExZjdjLCAweDQ3NWQwZmM5LCAweDcxYzA5ZWYxLCAweGYwYTc3Zjc2LCAweDU3M2MwNGI1LCAweGQyZjFlNzdmLAorCTB4YjdmZGUwNzcsIDB4ODM1OGE5M2IsIDB4ODJiNmRmZGQsIDB4NGZkYjY5ZjEsIDB4ZWY0MDIxZjQsIDB4MTNkZmUzYjYsCisJMHgwN2RhZmQ2MSwgMHhmZmIxOGRmOCwgMHg0ZmQ0NGU4YiwgMHg1MGZkNTBmMSwgMHgxMGEwNmVmNCwgMHg3N2FhZDVkOCwKKwkweDY2Y2I3ZGFlLCAweDkzOGU5ZjgyLCAweDIzNDJlYjBlLCAweDgzZWUwN2VkLCAweGJjMzliOWMwLCAweDU2OWRlZTU3LAorCTB4YWE4OGYwMGEsIDB4N2QwYTc1NGQsIDB4ZjliYjIxZTcsIDB4YWZkZTU1N2QsIDB4MjFlZjlhYWMsIDB4NmJjNmFmOTAsCisJMHgyNjZmOGZkMCwgMHhjYzY2NGI4YiwgMHg5ZjE2NTIzMiwgMHg4N2Y3MTkwYywgMHhhYmMyMTNjYSwgMHhhZjdmN2NlOCwKKwkweDI4YmIzNzA2LCAweDhkOWU3YzVlLCAweDc4MTEyZmQ5LCAweDA2YTI2YTI3LCAweDJlNjNkM2Y2LCAweDRiYzFkZTdlLAorCTB4ODNiY2VjYmMsIDB4N2FhMzY0M2IsIDB4ZjZmZjYxZmQsIDB4OWUwODkzMGQsIDB4N2MwNmQ4NjcsIDB4ODE5ZTczZDksCisJMHgyZjgwMGI0NCwgMHhlYTdkNzY4ZCwgMHgzMjFkZTcyZCwgMHg1YTJhMTNlMSwgMHgxNzMzODcyMiwgMHhmZDUwMjVlZSwKKwkweDc3ODY2YWIyLCAweGYxMWZlNDJiLCAweGIyY2RmN2IwLCAweDM4MjFmNzQ4LCAweGRiOGRiMGRmLCAweDE1NjBkOWEzLAorCTB4ZTc3ZGY2ZTcsIDB4NmZiZWViZWMsIDB4NzhhNTMyOTYsIDB4ODUzZjMwZTksIDB4NTM1ZmY1ZDMsIDB4Y2E3YzVjZTEsCisJMHgwZDRmYzUyZCwgMHgyZDg1Njk1MSwgMHhhM2RjMWE2MywgMHg3OGJjNzk0OSwgMHhjZmNkMDY2YywgMHgzNGY0ZmY1ZiwKKwkweGUyZjdmZmFjLCAweGZmMzQ1OWIxLCAweGIyMGU3YjkzLCAweGNmMDEyYWZhLCAweGFlYjBiZWMxLCAweGVmZjAxYTc2LAorCTB4ZDlmYjk2ZDcsIDB4Yjk2NjMzMTQsIDB4NzdmMDA1N2YsIDB4NzdlZWYwMmUsIDB4YWU3MDY5MTcsIDB4ZWZlMTViYTIsCisJMHhkZGEwMDQ2NSwgMHg3ZjBjODlkMCwgMHg5Zjc3ZWU5OSwgMHg5ODY1N2YwMiwgMHhmMDA1NjNhZCwgMHg3ZmNmNjNlYiwKKwkweDE2Zjc4NDkxLCAweDJhYTFmYmY5LCAweGRjZTE1NDY5LCAweDc4OWEyZDE1LCAweGYzZTcxMmYxLCAweGNjZmJiY2ZhLAorCTB4NDk4ZGNiZjUsIDB4M2Y4MTc3YzEsIDB4YmM4ZGU3OWEsIDB4ZWYxZDFhNmYsIDB4MGU3MThhZTEsIDB4ZjJkMDBlNzYsCisJMHg4MjlhYTM0ZSwgMHhlOWM4NWQ3NCwgMHhjYjNkZjg0YSwgMHg4YjNlN2M0NSwgMHgwMmMyOTBjNSwgMHg3ZjVjYWRkZiwKKwkweDU3NTFlZjE5LCAweDFlZjQ1NzhiLCAweGRiYWI4NzM1LCAweDY3ZmJlZmQ1LCAweDMzNzgwMDdmLCAweDAwN2Y4MjkzLAorCTB4M2ZkZjU5ZmMsIDB4YjgxNWM1N2IsIDB4ZTUxOWY1MDAsIDB4NWM3ZGUyNWYsIDB4ZWIzMzNkZTMsIDB4ZWE0NDY4YmIsCisJMHhmYjNlZmI4ZSwgMHg1YTJlZmU1NiwgMHg5YmZlZjA3ZiwgMHg2OWJhMjgzYiwgMHg2ODJmMzlmZiwgMHgzOTUxOGY3YiwKKwkweGYxNTBiMzFiLCAweDMxY2ZkMWMzLCAweGQyZmQwYmNiLCAweDA0MjZjMjIwLCAweDFmYTcxMDc2LCAweGY3ODhjZjNjLAorCTB4YjgyMmVlMWYsIDB4MTc2NWRiNWYsIDB4YmJhZmYwNzQsIDB4N2Q0NTQ5ZmUsIDB4M2E3MGI5OWUsIDB4YWU1ZDVmZmEsCisJMHgzMzljMDhlYywgMHhjMzViYmFlYSwgMHgwMThhM2Q3ZCwgMHhlODY5ZTQwMSwgMHhmODI4YzQ4MSwgMHgzZTFlNTQ4NywKKwkweGU3YzNjOGI3LCAweDhmMzdmZTY2LCAweGRiNTE3NWRiLCAweGE5ZmQ4MWRmLCAweGEwNmEzZmJjLCAweGVkOGJkY2M1LAorCTB4ZWU5ZTk5MTIsIDB4OGUxMGQwNmEsIDB4MDg3NDI0YTEsIDB4OGU4MWZkZDYsIDB4ZWJlNmUzOTcsIDB4NDZjZmE3MzcsCisJMHg5ZWViOWU5YiwgMHhlZTFmZjg4MCwgMHgyOGZmYzE4ZSwgMHhjYzc0YmY3NywgMHhlNjNhMzM3NywgMHhkMWQwZTNiYiwKKwkweDdiZGQ2ZWZhLCAweDY4NThlMGFlLCAweDI4ZmNiYTc3LCAweDdkNjc1ZmJlLCAweGRmNGFjZWFmLCAweDIxZjVhOTNhLAorCTB4ZWQyYjNiNzgsIDB4ZmViOGE3YzAsIDB4YjMxYmY0MTgsIDB4MjlkMjJjN2MsIDB4MDA5MzllODYsIDB4M2UwNzMxOGUsCisJMHgwNmJjMDFiNSwgMHhlN2VjMWYxZCwgMHg5YmE5NzkzYywgMHhmMWQ2NzNhZCwgMHgwNjNhY2FkMiwgMHg5ZmI0ZTMwNywKKwkweGY3NGNkNmU1LCAweDQ1MWMwYTBlLCAweDY5Y2E4OTdlLCAweDg3YzU4ZGJhLCAweGI3ZWZiNmZhLCAweDlkNGI5Y2ZmLAorCTB4NTk1MDJjZjMsIDB4NzNmZjE0YmYsIDB4ZmUwNjRmMDAsIDB4ZmJmMzc1NmYsIDB4N2ZmMTdkZWEsIDB4ZjhhM2I0M2IsCisJMHgzZmU2MWRiZiwgMHhiYmNmZmMwMCwgMHhmYjBkZmUxNCwgMHg4N2ViOGFiZiwgMHhhMjlmZDgyYSwgMHhkYTFmZjQ3YywKKwkweDNhMWNiNGNjLCAweDhkZDEzNGVlLCAweDg3NjRiMDcyLCAweGQ5MzFmN2M4LCAweDNlODY1ZmZiLCAweGZkNWQ3MjU5LAorCTB4YjkxN2I4MjEsIDB4ZjIwMjY3ZTQsIDB4ZmVmZTQyZWIsIDB4ZmRmYzI3ZTUsIDB4YzFiOWViNGIsIDB4ZWExMGIyZjIsCisJMHgxZjlmY2JjYiwgMHhhYTNlYTMwYywgMHhmZjJlNjVkYSwgMHhiYmNmNzc2NywgMHhkZTc4NTk5NywgMHhhZDM1MjQxNywKKwkweDJiNGViZGY3LCAweGI5YmJjZmZlLCAweGI0ZTg1OGRlLCAweGQ3MmY3YmM1LCAweGRiZDY4NzQ4LCAweDMzY2NlNzRjLAorCTB4ODNmNGY0YTYsIDB4YTZjZmEwZmUsIDB4YjhmMTg5YmQsIDB4YzQwOTk1N2YsIDB4YTUyOTc0MTMsIDB4MjAxOWRlMTAsCisJMHhmNDA5NDI4NSwgMHhkN2U1Y2M1YiwgMHg3MmQ4NmZlOCwgMHgxZDlmZmFmMywgMHhjYzQzZGYzMiwgMHg0M2RmMzE2ZCwKKwkweGJlNmFkZTFjLCAweDY2ZDU3ODg3LCAweDUxYzQzZGYzLCAweGM0M2RmMzYxLCAweDMzOGQ3NjZiLCAweGFlNDc0N2U1LAorCTB4YjMxZmI1MzcsIDB4M2YyOWIyN2YsIDB4NTM0ZGZhMzYsIDB4NjZjN2YxZmIsIDB4ZGExM2YyOWEsIDB4N2Y2YTY3YmYsCisJMHg0ZGYzNWJlZCwgMHg1NDc1ZDdmNSwgMHhmODZmZWE5YSwgMHg3ZjI5OTk2OCwgMHg5YjNmZjc2MywgMHgzMTE3NDdkYSwKKwkweDYxYjg3OGZkLCAweDViZGMxMTc5LCAweDc4NzJmMDMwLCAweGExNTM2MmE5LCAweDliMDhlOTdjLCAweDllNWIxMDVhLAorCTB4OTAwNTZiYTYsIDB4N2ZlMGU5MTYsIDB4NTMyZjI3ZjUsIDB4OGEyYTNmMWMsIDB4ODk4YmE3NWQsIDB4NTM2ZmQyNmMsCisJMHhkNDdjZTYxYywgMHg4ZjdkZmU2ZCwgMHgzNTcyMmM5NywgMHhjYjUyN2VhNCwgMHhiYzFkOWEwOCwgMHg2M2NmMGYyNCwKKwkweGM2M2FmOTUzLCAweDAxYjFkYmY1LCAweGEwZGZiN2VhLCAweDliNDZkNTdjLCAweDJmOTU2ZjIwLCAweDlhMDFiZGUzLAorCTB4YWQ4ZmQ4ODYsIDB4MWY5Zjc3YjAsIDB4ZDRmOTlhNzIsIDB4Zjk1ZThmZDcsIDB4MDczOGRiOWQsIDB4NTNmYWNhZDQsCisJMHgyNjRiYzZjYiwgMHgzZmNhMzEzOSwgMHgxNzJkOGMyYSwgMHg3M2M3NGYxNiwgMHhhYmY1ZmQ0MCwgMHhiMzVjMTZmOCwKKwkweDNiYmMxMDdkLCAweGEzNTMwZjNjLCAweDE2Y2NhOWJjLCAweDY3ZGZkY2Y3LCAweDdmZDBiZmVlLCAweDhlYzdkY2RhLAorCTB4N2NmMDBjZmEsIDB4MjZkYWY3Y2UsIDB4N2I1NmJmMzgsIDB4NTFmYTM3N2IsIDB4NWUzMzc2MTksIDB4NWRlY2YzN2EsCisJMHg0NzllMDM2MywgMHhhYzNlNDgxYSwgMHhiNmZkYzZmNywgMHhlYmUxMzQ0NSwgMHhkMTc3Y2UzNiwgMHhlMGQzMzNkYiwKKwkweDNmNjY0MTljLCAweDg3YTE1NWZlLCAweDFiNDdlYmU5LCAweDA0MmNkNzQyLCAweGU5ODcxMWMyLCAweGI0NTY3OTVlLAorCTB4MzlmODFhNmUsIDB4ZWI3OWY4YzMsIDB4ZTdmOGI2NGQsIDB4MGMzYzkyYTAsIDB4NDhhMGU5MmYsIDB4ZGQ1MDVlYzEsCisJMHgyYjljMmY2OCwgMHg0ZjBiZDc3ZiwgMHgwZjY4ZGNjNywgMHgzOGU4NzkyNiwgMHgxN2I0YzdmMywgMHhiYWQ0ZmJiMSwKKwkweDVlZThlNjdmLCAweDk0N2QwZGI4LCAweDAyNmMwZWU1LCAweDkzZTU5MmZkLCAweDE3ZGQ5Njg4LCAweDgzZGJmNDllLAorCTB4Nzg4ZWYwMmQsIDB4ZWZjZGIyNjMsIDB4MDBiNzdjYzYsIDB4NGM3ZmQ5ZTMsIDB4NWUzYTIwYzgsIDB4ODQ0NTlmZTMsCisJMHg3NWYwZjFhZiwgMHhlZWM4M2U3OCwgMHhhYmI4YzdhZSwgMHhjZmMyNGYzMSwgMHhlNjcxMTgwOSwgMHg4OWQ5YmUwYiwKKwkweGFiYzZjZjgwLCAweGUxMDdlZTdiLCAweGRjMTc5MDdiLCAweGY3ZTg3NmMxLCAweGM3MTk0NmMyLCAweDk4MmM5YzZkLAorCTB4NGI3OThkZWEsIDB4Zjc4ZGJmOWIsIDB4NmNkY2IyYmUsIDB4ZGU3NGU1ZGUsIDB4OTMzZGI3MDAsIDB4YThmOGQ1YzEsCisJMHhhZTExMzI0MCwgMHgyOGY0YmRmZiwgMHg1Y2ZiMzVmOCwgMHhjNTA3ZGVmOCwgMHhjN2MwMTBjNywgMHg3M2ZiM2QzOSwKKwkweDNhNzkzMTliLCAweGVlNDE5YWFmLCAweDllZDE2YmFkLCAweDRlYTdlZjg5LCAweDhmYTFlNjM3LCAweGUzM2JkMTM0LAorCTB4ZTJmYzMzMmEsIDB4YzZmZDE5NDYsIDB4M2M2ZTQ5NDUsIDB4ODg2ZTEwZWYsIDB4ZTc5YWZhNzIsIDB4Zjk5YmU0ZGYsCisJMHg1YzI5NWI5ZCwgMHhmODg4NGVhYiwgMHhkMWQ2YjZkZSwgMHhmZDI4ZjRiYSwgMHhlNWNkYmNhZSwgMHhmMTdkNmIwZiwKKwkweGYwNjM0ZTdmLCAweDdiYTdmODUyLCAweDRmMzZkZTQwLCAweDc5ZTNmOWMzLCAweDMxZmY4MDZhLCAweDBkOWMzYzgxLAorCTB4NDUyYzE3ZmMsIDB4MjM2YzE4M2UsIDB4YzdkMzZmYjAsIDB4NzkzMGYwNGUsIDB4ZDk1MWVkOWUsIDB4NzJiZTM1N2IsCisJMHg4NWJlODcyNiwgMHhmZGE3NmNkNywgMHg1ZGZhNzk5NSwgMHhiMGYzNmZmNywgMHg0ZjM2ZmY3NSwgMHg3MmZmNzU5YywKKwkweDk3NTcwN2VmLCAweDU0ODUxZmI1LCAweDM3YjQ0NWQ0LCAweDExMWZhOTA4LCAweDNkNTM0NzZiLCAweDFiZmQwZTU2LAorCTB4YzdmMTMxNzksIDB4ZmY2ZmQwMDUsIDB4NjViZjlhNzYsIDB4ZWRlNWY2NDQsIDB4ODBjZmIwMzQsIDB4ZWNmYjBkMGYsCisJMHhhZWQ5OGY0ZSwgMHgzZmJiZDE4YywgMHhmYmJkMzBmNCwgMHhmNGMwY2Y0MywgMHhmZGExOGZlZSwgMHhlMzQ1ZWZlOSwKKwkweDRhYTkzNWRhLCAweGI0ZjdiZDdjLCAweGFjMWZkZDg3LCAweGU3ODIxNTUzLCAweDBmZDlmYjAzLCAweGRhZTVjOWQ4LAorCTB4ZDZmZWVmM2EsIDB4MWZmOWNiYTUsIDB4NGY4MzJlMzksIDB4ZmNmZWZhY2QsIDB4ZjQxMTJkMzEsIDB4NDIwN2NhNTQsCisJMHg4NmI3NzdkYywgMHgzYzZkYmYyYywgMHhhZDliNmJkMCwgMHhmN2NjMzM3OCwgMHg3OGZlMTY2NywgMHhmNTlmNGQ2OCwKKwkweDE4ZjFjYzJiLCAweDZhYzc4YjhlLCAweDA5OWI0NzhhLCAweDk3M2MzYjhmLCAweGI2YmYwZmIwLCAweGRmMzBhZmJlLAorCTB4ZjhlNGU5ZjMsIDB4MDliZjdhYTYsIDB4ZWIzNzNiYzYsIDB4NmI4ODIyYmQsIDB4MWNmOWNlZDQsIDB4MWVkN2ZlZjUsCisJMHhhZWJjY2NhNywgMHgxZDM5N2UxOCwgMHhhMWUwMDU2NywgMHg3OTlmZDY3MywgMHhlMzAzYWU3YywgMHhiOTllYWI0YSwKKwkweDU4ZTIxMTJhLCAweDdhMGQ5MzM1LCAweGFhN2RmMDQ0LCAweDQ4MzlmOWYzLCAweGVjZmI3Mzk3LCAweDJlNzljMDNhLAorCTB4M2QxMzlkOTksIDB4YTNkYWVmYjcsIDB4YTRmOGY3MTAsIDB4MmM3MjU4ZTEsIDB4NzkzZGNmN2QsIDB4ZmRhNjQ4YmMsCisJMHhiYzdiZGI5ZCwgMHg3NzAzYzI0OCwgMHhkNDNiZDM2MSwgMHg1YjdmMTczNSwgMHhkZWY3NzAxNCwgMHgzN2UxZTg0YiwKKwkweDM2OGY1YjA3LCAweGU1N2M1OTNhLCAweDM3MTczODQxLCAweDZhYmZkYTg2LCAweDdhNjVmMjEyLCAweDI4NWVlZDlhLAorCTB4MWRiZjFkMTcsIDB4Mzk1YzIxZmMsIDB4YTYyZmU2M2YsIDB4ZDA0YWIyNTksIDB4N2VjMTE2MzMsIDB4ZWUzNzNjZDMsCisJMHhjOTcyZjk2NywgMHg5ZGZhNmNjOCwgMHhlMzg3YWQxMiwgMHg2YWY5YzRjYywgMHgwNGVmYzA5OCwgMHhmMTQ0NGViOCwKKwkweGVmM2MwMmY3LCAweDNlZjg2MDc2LCAweDAyYjI0M2YxLCAweGJkZmZjMjllLCAweDc4MDkzYzFhLCAweDA5YWIzYTRmLAorCTB4NzdjNDFhODksIDB4NDcxZTZlOGEsIDB4ZDMwYTY5NTMsIDB4M2FiN2RkYmYsIDB4ODQ4Y2Y3ZjAsIDB4NTNhYWFmMDUsCisJMHgzY2RhZmVhOCwgMHhkZDhlZmQ5MywgMHg5MjBiNjNmOSwgMHg1NTY5MWZjMCwgMHgwZGYyZGU5OSwgMHhiNDYzZTFlYiwKKwkweDZiZTcwNzhiLCAweGU2MjMxNzM3LCAweDQwNTc3Yzc1LCAweDkyMWQxOTU1LCAweDhhNmI2YzMzLCAweGY5Yzc4YzM1LAorCTB4MjVmZTk4ZjMsIDB4M2RmZjFhNTIsIDB4MWViN2NhMjksIDB4MWM0M2E2Y2QsIDB4YzVjZWY4ZDgsIDB4ZmM1MjJiYmYsCisJMHg3ODAzY2ViZiwgMHhmMGZjZGI0NiwgMHhhYmZiOGY0ZSwgMHg5MmNhMzg2ZiwgMHgyOGNjZmI2OSwgMHg5NDVlNWZiZSwKKwkweGMzOWRlMWMwLCAweGZiZWYwN2RlLCAweGQzNDVlMzRlLCAweGQ0YjUxODdkLCAweDI3Yjc0ZWZjLCAweGUyMTRiNGQwLAorCTB4NmRlZmQwZmMsIDB4OGJjZWY4YzksIDB4MzhhMjllYjksIDB4MGJiYjk2OTEsIDB4MGFhZWU1Y2QsIDB4NDdlMThmOWEsCisJMHhmNmQ2NzdlYiwgMHhhZTkyNWY4NiwgMHgzN2Y2MzgzMiwgMHhiZjBmMTAzOCwgMHg3OWZkNTA2YywgMHgzNDBlOGY5NCwKKwkweGIwN2YzMGY4LCAweGRhMzRjMzQxLCAweDBmY2IxMjMwLCAweDJmMzFmODM3LCAweDk4NmNmNGRhLCAweDdmYWZmYTRmLAorCTB4ZWViYjE0OTAsIDB4OWQ1NGVmYzIsIDB4NzVjM2UxOGMsIDB4ZjlhZGU0NzIsIDB4ODhkZjhmODAsIDB4YWYxNWFmODgsCisJMHhkZWZlNDc4ZSwgMHgzYThlOWEzNCwgMHg3MzY3YmQ4NiwgMHhmZWZlYzYzMiwgMHhkMjU3ZjJlOSwgMHgwZDVmMjg0YSwKKwkweGQzYWZkMWY5LCAweGVmYzNjNjRhLCAweDE3ZjNiMDk2LCAweGY2M2E0MTcwLCAweDI1N2FlZTFlLCAweGUwOTNmOWEwLAorCTB4MzRjNjM0NzcsIDB4ZmJjMjg2M2IsIDB4Yzk1YmMxYTQsIDB4ZmQyMzk0NTgsIDB4YmJmMDg5YzUsIDB4NmMzMzdiMGIsCisJMHg5NDlhN2ViNCwgMHgwN2Y4ZWNkNywgMHg2NGRlYWI4MCwgMHhlN2U3YWZlNywgMHg2YzlmMWYzMywgMHhiY2UzYWZkNiwKKwkweDBhNjZmZjRjLCAweDcxYmNlM2M1LCAweDUzN2UwOWY4LCAweDM5YWNmZDAwLCAweDMzMDdiOWM2LCAweGJmNTQ4OTFlLAorCTB4ZWI4YTc2ZTEsIDB4ZGZiM2VmZTYsIDB4Yzc1NDQ4NWYsIDB4ZjdiZGUxZmIsIDB4Y2VjMzVlY2QsIDB4YmVjNWY3YTksCisJMHhmZjk5YmVlNywgMHhlMWUyNDQwZSwgMHgyOTE3NjgyNSwgMHgxMDNiZjYzZSwgMHgwZjdiMGEyOSwgMHg0ZDkzMDQ4OSwKKwkweGU1Y2RlZGVmLCAweDA2MDZjY2ZkLCAweDFmNTdkMDlhLCAweDE1ZmRlNmNmLCAweGZiMGU3OTFkLCAweDg4OTdkZjgzLAorCTB4ZjA4N2VmZjUsIDB4Y2NkOGMzZGYsIDB4MzU3NGQzZjUsIDB4ZWQ0ZGVjNTAsIDB4NWJkNDY3NmQsIDB4Nzc1OWViYmYsCisJMHgwYmQxMjE2ZCwgMHg4OTAxNDNmNiwgMHhlZDA0YmQ4MCwgMHhkNGJiNjk4YSwgMHhkYzAyMDMwZiwgMHhkN2NlMzNlZiwKKwkweGNkZjgwYjNlLCAweDkzZGRmZGVmLCAweGViYzMwMjdkLCAweDhhN2QzYzkzLCAweGQ0NDk0ZWZmLCAweGUzMDc5ODEzLAorCTB4MTIzYzE2ZmIsIDB4Y2E3NjAzZGEsIDB4NjIwNmJiM2UsIDB4OGZlNDc0NTIsIDB4Zjg5NDdlZjgsIDB4ZTcwMWM1M2IsCisJMHhiYzBmNTNmYywgMHhkOWU1ZWVjZiwgMHhiZjM4MTQzYSwgMHg3YzViZDJiOCwgMHg0NTUxYzQxMywgMHhmMzAzM2VhNSwKKwkweDgxNmY0ZWY3LCAweGZhOWU4M2ZjLCAweGRkYTNkODg3LCAweDFmMDEzN2M1LCAweDA2ZjdmM2E0LCAweDAxMDAwNDA4LAorCTB4ZTFhYTA4MGUsIDB4NDNmZDYzOGYsIDB4NjQ2NTRlYjMsIDB4MmJmMmNjOWYsIDB4ODczNjM3YmQsIDB4M2Y1ZjIxMzIsCisJMHhmMjA4ZjgwZiwgMHg3ZGJmYjQ4ZCwgMHhjMDIxYzE0OSwgMHg4NmUxNmU0NywgMHg0MjM3NjNlNiwgMHgwMzdmNjhkZSwKKwkweDU3ODlmZmI2LCAweDNiOGZmZTY1LCAweDRhZjYwZDk4LCAweDc5YTU1ZTRmLCAweDYyNWU0YzRmLCAweGE5NjBlMjc5LAorCTB4MjM5YWJmMzEsIDB4ZDA3M2M0N2YsIDB4M2JkODA3YjUsIDB4NjYwN2E5NWQsIDB4ZDRjZjMwMDgsIDB4ZmYxMDMzZmQsCisJMHhiY2I3ZDVlNywgMHg4NzhjMzQyYiwgMHgwNGViNjA4ZiwgMHhmNDFiOTc4YiwgMHhhNmUxZWUzMCwgMHg3OWY3ODNkOSwKKwkweDlkNjFmODYzLCAweGM0Yzc2Y2Q3LCAweDBmYmMyN2RjLCAweDFmZDNkZGYwLCAweDM2Y2JhZjhmLCAweGY3NGE5ZWY2LAorCTB4YzZlZmQ4OGYsIDB4NTQ3YjAzMGQsIDB4ODZiOWI4ODQsIDB4YTNkYzJlNjksIDB4NzBjMWZlYTcsIDB4OTgzOTVjMTIsCisJMHhjZGUzNWZkNiwgMHhiNTVlM2E0MSwgMHhhOWNkZmIzYiwgMHhhNzVmMmY1YSwgMHg4MDc3Mjk2NCwgMHhmOGI1NGUzZSwKKwkweDNmNWNkOTM1LCAweDdmOGI1MDhmLCAweDM3MmI0ODkzLCAweGYwYjVjMTBhLCAweDhmNjg2YzllLCAweDkzN2RlMmFjLAorCTB4NDcyODE5NWQsIDB4MjI4ZWI5NjcsIDB4NWYzMTgzZjUsIDB4Y2JiZmVmY2QsIDB4NDc2YjgzMmIsIDB4YzQ1OTFlODEsCisJMHg3NjU1NmVmNCwgMHhkZmE2NThhMCwgMHg4ZDk3M2Q1NywgMHhmMDY3MGJiZiwgMHgyNDUyNTU1ZCwgMHhmN2JiOWM2ZCwKKwkweDM3OTFiNzVjLCAweDIxZTQ0NzdlLCAweGVmMDlkNWI1LCAweDVhZmIxOGYyLCAweDY0MzdmYmI1LCAweGM3ZmQzZWMxLAorCTB4M2I0NmRlODcsIDB4MzY2MjQ5NzEsIDB4NzZkMzU5YzIsIDB4NjlkZjgxNWMsIDB4N2NhMzZkYTksIDB4ZDhmYmJmNDcsCisJMHhhM2M3NjNkOSwgMHhjODg3ZjI1ZiwgMHhiZTAyNmZhMCwgMHhjMzY4ZDBmZSwgMHhkOWZkZGRjYiwgMHhmZDUyMmY1NSwKKwkweGVhODVkM2E2LCAweGQzMDM4MzY4LCAweGQ1ZmQ3YTlkLCAweGYwOWMwYWUwLCAweDQ5YzliODJlLCAweDFjZjFlOWY5LAorCTB4ZWFmZTA1NWQsIDB4ZjUxZWI3YmMsIDB4M2E4YWUzZDgsIDB4ZDNhZmY4MGEsIDB4ZTA2NmMzZmIsIDB4OTEyNGFhZTcsCisJMHg1ZjBmZWJmMywgMHg3ZWY4ZjNkNiwgMHhiOWVmY2QzZCwgMHhiZmE2ZWRiNywgMHhhMTYwZGY2OCwgMHg3YmE5ZmVkOSwKKwkweDQxZmM4ZGM0LCAweDAyZGY5MmVkLCAweGI2NmVkNTFmLCAweGIzZmQ2MDg1LCAweGJlZjFkYTM5LCAweDFiZTgyNzczLAorCTB4ZmJlNjVmZDQsIDB4YTYwNTFiOTksIDB4NTg3MzQzMGYsIDB4Zjc3MmZhMWMsIDB4NzRiZTJiMzQsIDB4ZmQ4YzcwOTEsCisJMHhlOTkxMjRiZCwgMHg4NDI5MGFhYiwgMHg1ZjE1NzZmYiwgMHgyZmZlYjE3YSwgMHhiYTY5YzcxZiwgMHgxYzc3ZGEwZiwKKwkweGUzMWJkNjM3LCAweDgzOGVmNzU0LCAweGY2ZmQ1MjdjLCAweDVmY2ZmNDYxLCAweGFmYjBkYWJjLCAweDc3ZmZkNDc1LAorCTB4NjFjZmM1M2UsIDB4ZTg3NGY1MzgsIDB4ZDBkOTQxZTcsIDB4YTRjZmQ0MjcsIDB4MWVlNzg2NzgsIDB4ZjkyNDNlNzksCisJMHg0N2E5NzkwOCwgMHgyZTZkYWNmZiwgMHhmNmZhMDRjOSwgMHg3ZWIzMTNkNiwgMHhiNzRhMjVkMiwgMHgzZTc4MTI5NywKKwkweGM5NzM3Zjc0LCAweDEzZWQzOGE0LCAweDhjNzNlZDJjLCAweDdmYjE0ZmZjLCAweDNhMGYzYzJiLCAweGRhMGVmMzdiLAorCTB4YmQ5M2ZhNWUsIDB4NmRmMDBmMjcsIDB4NGJmYTU5YjAsIDB4ODZkZmM2MzYsIDB4YjdmYzE5ZmQsIDB4NjVmYmJiYzcsCisJMHhhNWU5ZWY3OCwgMHgxMGYxNDBhNCwgMHgyMDY4ZGY2NiwgMHgxNTI0NWI4NywgMHhjMGQxODc3ZiwgMHgzZWJlMWVmMywKKwkweDhkNzk3YzU1LCAweDc4YmRmZjA5LCAweDlmOTUzMDJmLCAweGZiNGNkMDZlLCAweDJlMTc4YmExLCAweDdiM2Y3YmMzLAorCTB4NDE1NjNhZjgsIDB4ZGIzZWVjNDIsIDB4N2RhNmI5MjMsIDB4YzcwZmZmZDAsIDB4YjhhMzg1ZDcsIDB4ZmU0YTM4MWYsCisJMHgzMjhjNzBjNiwgMHgzODVlODFlOSwgMHg1ZmU1NGRmMiwgMHg2OTMxMGUxNywgMHhlYzM2Njk3NiwgMHhhMWIxYWQ1MywKKwkweDBiNjY5MDlmLCAweDZlYzA3MjM5LCAweGY3ZWM1ZmZiLCAweDA3MzQyMDFhLCAweDYxYTg5OWU3LCAweGNlNTdkYTZjLAorCTB4MDc5ZjYwMzksIDB4NDQ4ZTc5YzYsIDB4NDBlMzQ5OGUsIDB4MDU2ZDc0OWUsIDB4OTEzZjUzYWMsIDB4ZTVhMWFmZDAsCisJMHg4NjE5MzkwZSwgMHhmZGUxZDU2ZSwgMHhkODk1MmEyYiwgMHhiMDc1NGU1ZiwgMHhlNmY1MTk4NiwgMHhhYjg3NjI3NywKKwkweGU1YTI1OGE0LCAweGI4NzlkNWUzLCAweGRkOTRlNWVlLCAweGZkZjYwNzU1LCAweGNmZTE3NzM2LCAweGJjOTMxMzU3LAorCTB4NWFiMjdkYTIsIDB4YzdmNjhhNTgsIDB4OWIxN2M0OWEsIDB4M2QzOGRmNjEsIDB4MDIzM2Q5ODEsIDB4NThmOWIxNzksCisJMHgyNjdhYmM0NiwgMHhiZGY3MmRhZiwgMHgzMWM0MTM3OCwgMHhhZWQ0YWViNiwgMHhhYjZlN2YwNiwgMHgwYzM5MWMzMywKKwkweDZlM2RmOWViLCAweGRjYWEzZGZjLCAweGY4MTZlMTc1LCAweDgzNzEwYWJkLCAweDMxNGJkNzBkLCAweDJiNmJiYzI5LAorCTB4NjA3ODE3OWMsIDB4OGJlYzFmODQsIDB4NDBkNzYwYWQsIDB4NWM2ZTM1ZmIsIDB4NDIxYTViZmYsIDB4ZTJhZjJmNjgsCisJMHhmNWY2YzBlYiwgMHhlNzM4NTQ5MywgMHg5Mjk2ZThkYywgMHg5MTZiYmQ2MSwgMHhiODA1NmZlYiwgMHg2NGVmYmE1ZSwKKwkweGQwM2FlM2IzLCAweDQxOTZmZTYzLCAweDgwY2JlZjNjLCAweDcxY2I0ZDc1LCAweDE0ZjVlNThjLCAweDY4NTc1YjE5LAorCTB4MzQ4NWMxODMsIDB4NDRmZmMzZjIsIDB4MzNkNDEyYWQsIDB4NmIwZWQxMjcsIDB4MDRhYjJmNzQsIDB4YmZkNjhlM2IsCisJMHg3YTc4YTBlYywgMHg4NWUzOTkzYywgMHhlOGY0ZTdkNywgMHhhMGNkOTNhNSwgMHhiZDE1YzUwNywgMHhlZjNhMTJmOSwKKwkweDdhNjMzZjFkLCAweDNmZGEwOWVhLCAweGU3NDUyYmJjLCAweDE4Nzc4MjEzLCAweGU4NDk0N2JiLCAweGMxMjQyNTg3LAorCTB4NzRkMGM3NmYsIDB4OWRmYjBlNzQsIDB4YmQxN2FhNWIsIDB4Mzg0OWM3ZTgsIDB4NDkxZjYzNWYsIDB4MGY3ZWM1MTksCisJMHg3YWMzZGExZCwgMHg4MzkxOTA5MywgMHgwY2NhOThmYiwgMHhlMjgzNWVmNiwgMHg2NmZkZTM3MSwgMHhkZDU2NzdlMywKKwkweGIzYTdmOGM0LCAweDY3ZGYyOTc4LCAweDQzZGU1OTcxLCAweDg5NWZhZTcwLCAweDc4NGVlOTliLCAweDRmODYyMTM3LAorCTB4MGI3YmNiMTUsIDB4MDdjYzA5MTIsIDB4Y2Q1NDRiN2IsIDB4ZTQ0OWJmZTUsIDB4ZDg4MzRhZmIsIDB4YjcwZWFkZWYsCisJMHhhMzJlZDA4NSwgMHgzNWU5ODQ1MiwgMHhkOWY2OGEyNCwgMHhmOTgxZDI2OCwgMHhlNjZkZTAzMSwgMHgwZDJjMzVjMiwKKwkweDI3OGQ4ZTJmLCAweGJiZTJjOGJhLCAweGM3ZWMxMTAxLCAweDc4OGQ1YmI0LCAweDQ0ZjVmMDRjLCAweDk2YmZkZWJhLAorCTB4ZmMzNmUzYzgsIDB4NjY1MzhjNzcsIDB4N2Q3ZWUyMTQsIDB4NWZhYjEyNjYsIDB4MGZiYmM4MTUsIDB4MzM4ZGJjZWMsCisJMHhjNjljNjFhNiwgMHhmNThjZWZiMCwgMHgxNmRmYjBkMiwgMHhhYjU3OTg3MiwgMHhjMTdiNWM0MiwgMHgzYTE2ZWJiMCwKKwkweGI2NzUzZTU5LCAweDg4NjhlMGZlLCAweDBiNTNiNjZiLCAweDJmZWUxYjM0LCAweGY5NmFmOGIzLCAweGIwMzRlMmU2LAorCTB4YmExZTE2Y2IsIDB4NGNlNGVkMTUsIDB4OGI2NWQ5OTUsIDB4ODI1MGNlMzYsIDB4ZGFkZWUxYTMsIDB4OGEwN2Y0M2MsCisJMHg4NDQ4NGMzNywgMHg0ZWQ1ODQ3ZCwgMHg4NTc1ZTI3ZiwgMHhmYmUyNjdlOCwgMHhjN2I1MDNiOSwgMHgzNTVkYTZiNiwKKwkweGFiNzFlNDE5LCAweGNhOTAxMjhkLCAweGVlYjI0YmZiLCAweGIxN2MwYjFlLCAweGNjZWQwZjIxLCAweGM2YzEwOWFkLAorCTB4ZDZlZmRhMjQsIDB4YWJmY2Q2N2YsIDB4NGVhN2ZlNjgsIDB4OGMzOGYwYmQsIDB4ZDU4MTNhYjMsIDB4YzA1MWJiYzMsCisJMHgxMmU3M2Q5YiwgMHhjOWJiZTFiNiwgMHgzZDZmOGRmZCwgMHgxMjUyZjA5NywgMHhhOGNhN2Y3YiwgMHg3ZTUzNmZmZiwKKwkweDgwMDA3ZDdjLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYmRmZjAwLCAweGQ1OTQ3YzBiLAorCTB4NjZmZGY4OTUsIDB4NjY2NTc5YmUsIDB4ZjI2M2M5OTIsIDB4YzIxMzA5MjIsIDB4OWU0ZTVlNGIsIDB4MTI0YzIyODAsCisJMHg0Y2I0NDNjMiwgMHhlODIwMmExMCwgMHhhNzkwMzRmMCwgMHhiYWRjNWQ0OCwgMHgzMDA0MGNmZiwgMHg1NzA2YjY1MCwKKwkweDg0ZWEyYjExLCAweGJiYWFjNTYyLCAweDM1MWJhMzQxLCAweGI4ODA4MGVhLCAweGRhNDQ2ZGQ2LCAweDhmZmQxNmQyLAorCTB4NDgxMDE1NGEsIDB4ZmVkMmI1OGEsIDB4MzljZjY1ZGQsIDB4N2NjY2RlZjcsIDB4YjVmMDE5OTMsIDB4M2VmZWI0ZmYsCisJMHhlN2RkZjdlZSwgMHhjZTczZGY3OSwgMHgxMmU5NzNiZCwgMHgyYzYxNGRmYywgMHg1NjMwYTQ5NCwgMHg1MWMxZDhjYSwKKwkweDYxOGNmNThjLCAweDI0ZGVhOThjLCAweDA2NGRjZjA2LCAweDM0ZTJkMjZmLCAweGEzN2VmYWM2LCAweGY1ZTFiYjY3LAorCTB4OTI2ZjY2MTcsIDB4MjVkOGM2YzMsIDB4NzlmYTJlZDEsIDB4YTBiMTk5YWEsIDB4Y2RiM2IxODksIDB4YzExYzE2NmUsCisJMHgzMzY2OTlkOCwgMHgxZjk2NmI5NSwgMHg5ZmEwYzY5OCwgMHhiOTg1MGU5YSwgMHhjNTViMTlmMiwgMHgzZjYzMzZkYSwKKwkweDY5OTIzYmFmLCAweDNkMDE1NWRjLCAweGY0NjQ4ZTBiLCAweDViZmUwOTc3LCAweGQ1MjhmY2JkLCAweGViYzlkZDVmLAorCTB4YWEwZWIyZDcsIDB4NGYzMTkyYmYsIDB4Zjc2YjNjMDcsIDB4MWNkMDU5NWEsIDB4NTFkZjVmYWUsIDB4NGExZjY5YWMsCisJMHhkN2JmNTFkMiwgMHgzYjA2ZmIyNSwgMHg1YmRkOGM5YywgMHgyYWJlZmMzZCwgMHg1ZDU2OWY3OCwgMHhmYWUxZjY2MiwKKwkweDEzZTM4ZTU4LCAweDg3YWZhOGFiLCAweGViZTYzYWY3LCAweDc3YWViMTg4LCAweDQ5ZGU1YzA0LCAweGFjNGU4YTgyLAorCTB4MzJiMWQwZWQsIDB4ZTAzYWQ2YzYsIDB4MWVjNjJlOWYsIDB4NmM3Y2Q4NTAsIDB4MTVmN2Y2YjcsIDB4YzI2MzI5MTksCisJMHg5ZTJhZDZlZCwgMHhmODk4YzcwYywgMHhhOGJjNmE3MCwgMHg4OGQ0ODE2NywgMHhjNDY3ZGFiMiwgMHgzNDVlMzVmNSwKKwkweDBlZjNmYmQyLCAweDYzMDc1ZmIzLCAweDNmZjRjOTFlLCAweDdmYWMyZDcwLCAweDE5NTNlYjI2LCAweDkwOWY1M2NjLAorCTB4Y2Q1ZDhlMzgsIDB4NzEyNThiNTgsIDB4YmE2NzNlMzcsIDB4MDhhMTdkMGMsIDB4NTMzMzMwMzgsIDB4ZjgzMzdlNzEsCisJMHhjNGViZjYyYiwgMHg3MTk0NDc2OSwgMHhlZDQwM2VkOCwgMHhhOThlZDk2NywgMHhjNDczNDAwYywgMHg4MzAzNzM1ZSwKKwkweDkwYjAzN2Y3LCAweGNlMDYwYWNhLCAweDI4ZmRmYTBmLCAweDIzNTlkZmIyLCAweGRkMWJlNWI1LCAweDA5ZWNmMmRhLAorCTB4N2U2MzMyZGEsIDB4OWE0ZmQ3ODIsIDB4MWE0ZWNhOWIsIDB4MDRmZWZkYzIsIDB4MDMxMWQ2YTYsIDB4NTgwMmI3MmUsCisJMHg1ZWVkN2ViMSwgMHgwNDY0ZTA0YiwgMHg5MjNiZWIxZSwgMHhhZWM2ZTUzNSwgMHg4OGM5YzBhYywgMHgxZmYxNmE3MSwKKwkweDEzNWZmMDU5LCAweDU4OWQ3NzVmLCAweGRmNDYwN2Y3LCAweDViYzAwZWFkLCAweDcxMTkwYjNkLCAweDQ2YzE0MGRkLAorCTB4YWNjNjU4ZWYsIDB4N2M0NWU2MTYsIDB4ZjE2ZmQ4MWQsIDB4Y2ZlODEyYjAsIDB4MDBiNzZlNjYsIDB4YWJiYjFiN2MsCisJMHhkZWYwMjU5NSwgMHgzMGVmODc2YSwgMHhlMTk2MjczZiwgMHhmYWYwMzU2OSwgMHgwZTg4MDU4YywgMHgzOWRhOGZlMCwKKwkweDViZWQ5OWJkLCAweGI3MTNlNDE1LCAweGNkZmVkYWFiLCAweGZmMDBkZGU3LCAweDRmMDI5M2RkLCAweDI0YWMzZDk1LAorCTB4MGVhM2FjNDYsIDB4NWUxZTkxZDYsIDB4MDdlYjM5YzcsIDB4NTgyZjg4NjUsIDB4YTVlYzZmY2YsIDB4YTY0NjE3NDgsCisJMHhmM2Q3ODUyNCwgMHg1Y2I1ZTFhZCwgMHg1ZGM2YWYwYiwgMHgxODM3YTIzNiwgMHgxODQ0YmRlNywgMHhjZWE3NjFhNywKKwkweGNlYjI4NDZmLCAweDdlNDQ2M2RjLCAweDNjZTkxN2I5LCAweDFjNzJkZTA2LCAweDZmM2M0YzRhLCAweGUwYzczYzQzLAorCTB4ZmNhY2VkYTcsIDB4MWNjN2U0M2UsIDB4YzcxODFmZTQsIDB4NjUyN2VlYjYsIDB4OGY4MThiMjcsIDB4ZmExNzM3YWEsCisJMHgwNTRkYmVhMCwgMHg1NDcxODZmZSwgMHgwOGE5YmZmOCwgMHg2ZDNiZDljOCwgMHhlOWQwMzI1NSwgMHhjM2U3M2IyOSwKKwkweDdhMmU4OTBkLCAweDBhYmM1MGVlLCAweGU3NWQzNWUyLCAweGQ1ZmE0N2M5LCAweGNjNDNiODI3LCAweDY2YTNmMWMxLAorCTB4Y2I2MDE5NDIsIDB4Zjk2MmMxYWUsIDB4ZWZlODFlYmQsIDB4Y2IxYjk4MjEsIDB4ZjAwOTg0MTYsIDB4Y2JjMmM4NzgsCisJMHhlZmNhMzkyZiwgMHg2ZWUzMDhkZCwgMHgwZGU1ZTY0YSwgMHhkNWI5YmQzZiwgMHgxNmNhMDkzZiwgMHhlNTQzOWU1OSwKKwkweDQxNmQwYzg3LCAweGZmZGRlMDNkLCAweDQ0ZjVjOTgyLCAweDI4ZjdiNTNlLCAweDMyMzA1ZTU4LCAweDRkNGMwNGYwLAorCTB4MjM2NTg0M2YsIDB4NDIyNmE2NWUsIDB4ZjRiNzIwZTcsIDB4OWI3NjlhMmYsIDB4ZWVkMDVlYTAsIDB4YTc4NDI3ZmIsCisJMHhmYjM5ZmY1YywgMHgyNjM2M2NmMSwgMHg0ZDdlN2Y2NiwgMHhhY2RmNzk3ZiwgMHg1M2JmMTgzZiwgMHhmYmY4NzU3NywKKwkweDQxOWRjNGQ0LCAweGMyZTc2ZjNkLCAweGU3YTcyYzc2LCAweDlmZjQzZjAzLCAweDZkODlhMmZlLCAweDA2MjNlMjg1LAorCTB4ZGExNzliNzYsIDB4NjMyYzVkZDUsIDB4ZDQzOTA4YzEsIDB4YjY3OWYwMjMsIDB4NWI3MjQxZDksIDB4Zjk0M2FmYmUsCisJMHhhOWY5MDYzZCwgMHg3ZDcwZTQ4NywgMHhmZTQ2YWE0NywgMHg3ZjVjYjk0YSwgMHg3ZjRkNWFmMSwgMHhjMjdjOGUzOSwKKwkweDQzZGFiZDU3LCAweGUyZmVhZGYyLCAweDEyMWVmYTY0LCAweDczNmNmNGYyLCAweGY4ODllOTI2LCAweGM4ZDIwY2UzLAorCTB4MTMzOGYwZjUsIDB4NzJmOGIwNTksIDB4ZWZhMjRjZTMsIDB4Y2JlNjFjNzIsIDB4MDZiZGI5MjIsIDB4YTQyNDBjZTcsCisJMHg4N2JjODIzNywgMHg3NTBjMmU3MSwgMHg0NjVmMjUyNSwgMHgwMjc2ZDk5ZiwgMHg2N2FjNDU5MSwgMHg2MzM0MWE5YiwKKwkweDA3ZGNkYmZmLCAweGZjMThiZTFjLCAweGI4NDRlNTIwLCAweDFlZGI1MWJkLCAweDgxMWIyM2Y0LCAweDQ4NjNlZGY0LAorCTB4N2FhY2ZmYjcsIDB4ZDRmYTkxY2MsIDB4NTAzOGYwNjYsIDB4OGFmNmE4NmYsIDB4MzQzNzJlMjMsIDB4ODY2NDdlNGQsCisJMHg1MTY5MjgwYSwgMHhkOTdmM2QzOSwgMHhkMWU4ODFiNiwgMHg0MTFmNzA2ZSwgMHgzYWVkZGFmYywgMHhhZmJlMWY5NywKKwkweDQ4M2NlOWI3LCAweDczMGUyZDI3LCAweDUxYmRmMTAwLCAweDcyODFjMWI5LCAweDA3NmJmNjQzLCAweGI4ZjM4ZjMxLAorCTB4N2E0MjFiNjAsIDB4ZDU3YWRlM2QsIDB4MGY1NDg5OGIsIDB4YTkxOTkyNjYsIDB4YzZmN2ZmMWYsIDB4MGYxN2M1ODMsCisJMHgzMWJkOGYxYywgMHhmYTBiODhmMSwgMHg2ZTc0NGI1NywgMHg5MTBiZTAwYiwgMHgxZDA0NzFmYSwgMHhkZjYzZjc0NCwKKwkweDc3OWNjNmE5LCAweGZmMDkzZDc0LCAweDg0MzZmOGI4LCAweGU3ZmUxMTEyLCAweDgxMTliYTZkLCAweDRkMmVmMzE4LAorCTB4OWU5YmJlNTYsIDB4ZGYyNTE0NWEsIDB4M2MzYjdmOTMsIDB4ZDA5NWVkODgsIDB4NDlmMjBhMGYsIDB4YTMyNjk2ZmUsCisJMHg5MGJjMmRmYywgMHgzOTIyZTk1OCwgMHg3M2I1ZWU5ZiwgMHhiNmUzODViMSwgMHg3ZDlhOGVkOCwgMHhlZDk4OGZhNCwKKwkweDNlYmZkOTEzLCAweGI4NDlmZDNlLCAweDY0YWFkZTE4LCAweDA0NjAxZjg4LCAweDRhZTM3YTg2LCAweDQxMmJiMDcwLAorCTB4MTU5N2UyMmYsIDB4ZDNlNTBjYWEsIDB4YTc2ZjNhNDAsIDB4NzdkN2Y0ZjksIDB4ZWIxMWU3NDMsIDB4MGVkZDUxNmYsCisJMHg3NWZkNmJhNCwgMHg5OWNhMzMxZSwgMHhlNjM5OGVmNSwgMHhhYTM3OTQxMCwgMHgyMGY5ZDlhZSwgMHgwMmRlZmE4NywKKwkweGI3ZDYxMjdiLCAweDFjYzhhZDI5LCAweGMxNWE4ZjhiLCAweDJkZjljNDZlLCAweGQ2NjlkNjRkLCAweDFkNjY5ZjIzLAorCTB4ZjdlOGRmZTcsIDB4OWViOTkyNWIsIDB4YjEzZmRkNjgsIDB4OWYxMjUzYzcsIDB4NzlkMjQwN2UsIDB4Y2I5YjhmNTEsCisJMHg1ODU2Yzc1NCwgMHhlN2MwZGU5ZiwgMHgwNzYzODk2YiwgMHhjMWUzN2VjYSwgMHgwYjdlY2I2YiwgMHhhODc1NjljOSwKKwkweDQ0ZjY4MDM5LCAweDU0OWI3OGY0LCAweGJlMDc4Zjc3LCAweGY4Zjk4MjZmLCAweGM3YzM5Y2IxLCAweDNhYTI1NGRmLAorCTB4MTZkNzQzNzYsIDB4NDczMzAyNTcsIDB4NGIzODM3ZDQsIDB4NmMxN2ZlMDgsIDB4ZGYwZjRjNjksIDB4YzYzZDIxMzcsCisJMHhkMzg0OTc5OCwgMHg2OGVmZTRiYywgMHhlOGEyZjkzZiwgMHhjM2I3ZjczMiwgMHg1ZDBkMTBkOSwgMHhjYmEyYzZiNiwKKwkweDRiMzdhODc5LCAweDM5OTlmY2Y5LCAweDkzNDNmZTcyLCAweDhjN2M4ZWJlLCAweDQ5YjI5YmE2LCAweDk3N2M4M2NjLAorCTB4NTg3NmNmMDEsIDB4NjZjYWE3NmYsIDB4ODA3ZDQzZWMsIDB4OTg0NGQ2YjYsIDB4ZTYzNmNkZGYsIDB4MzkzZTk5MDAsCisJMHgzMjY3N2NiNSwgMHhlN2FjYjdhYywgMHgzZjIxOTE4MCwgMHgxZDY5M2E3NCwgMHhmNDdkYTI3NSwgMHg4ZTE0YTZiOCwKKwkweDgzOGE1MzNmLCAweDNkYzc0OTllLCAweGY4MDE0ZjRmLCAweGI4MjRmNjc2LCAweDk5ZDRmODE0LCAweDA2MzBmYTAyLAorCTB4YmMwODhmN2MsIDB4OWZjNmQ2MzMsIDB4ZjIxYzY4NmEsIDB4YjY1ZmFjOGYsIDB4YzM3Njc5ODgsIDB4NmIwMjUwZjMsCisJMHhiMmJkODMzNSwgMHhjNjA3Yzg0ZiwgMHgxNTRmZTdlZSwgMHg5OWM2MTcxOCwgMHhkZGU4Y2FmZCwgMHhmNThhMmY2NCwKKwkweDgwYjUwMjFmLCAweDQzZDNkM2Y1LCAweDc3ZmQxNGUzLCAweDU4NWVkYmMwLCAweGVhZGUwNDdkLCAweGRiYzIyMWNkLAorCTB4NmJkZjQ2ZGIsIDB4ZTNjNjlmMDgsIDB4NzcyYzc0YTEsIDB4ODc5MzNkMWUsIDB4NzBiNjcwZjgsIDB4MjVlZmI1ZmIsCisJMHg2ZWU5MDA2YiwgMHhkM2Q2N2UyMCwgMHgwZTJlZWFmYywgMHg4MWUyZmU2MiwgMHg4MzUzYWI3OCwgMHgyZWViNWZhNCwKKwkweDU4NzdkMWU2LCAweDEyOWNkZmI3LCAweDZjMWIzZWZlLCAweDJlYjAwOTg2LCAweDQyNzBlNjY2LCAweDQ3YzJjNGY4LAorCTB4ODk2YmUwYmIsIDB4YTNlYjUwMGYsIDB4MDgxZjAyZWQsIDB4M2VjNDhmYTcsIDB4NGVlZjFmYTcsIDB4NzgwNjY2ZTMsCisJMHhlZmU2NmIzZiwgMHhkZjI0Njc5OSwgMHhmZTdkMDk4NywgMHgwMDVlNDI1MSwgMHgwZDFmMzNmNywgMHg3YTQ2Y2UwNywKKwkweDkxZTk1ZDUwLCAweGUyY2VhNzdhLCAweGFjM2U2ZmI5LCAweDY3YWJiZDliLCAweDU5NjNjMDRmLCAweGVkMTVhZGE1LAorCTB4NGYyNjY1YWIsIDB4Y2I1ZGRhMTIsIDB4ZWIyYmQzZGUsIDB4YzQ4NDA5ZjMsIDB4M2MwNDJiMDcsIDB4NWRmNzMyY2YsCisJMHgzNmZmM2Y4OCwgMHhjMjA5ZTM4YiwgMHg5N2ZmNzY5ZiwgMHhmOGJjYTNiZiwgMHhhMmJmNjgxZCwgMHg5MzQ2ZWY0YiwKKwkweGNkYTU2OTcxLCAweGY1OTZmZDhmLCAweDg3NmQzYzU0LCAweGFkNWIyYmY3LCAweDJlZmQwNjJlLCAweDA0ZmVlMjliLAorCTB4Zjc2NWJkZWQsIDB4ZjIxYjVjNTksIDB4YTQzOGJmNzEsIDB4NWRmYTBiM2MsIDB4MDNiZTYwZmIsIDB4OWQ3NTgxZTUsCisJMHgwNmVjZDMzNywgMHhlYjdlZTA5MywgMHg2ZGUwMmI0YywgMHg4OTY0YjI5MywgMHg3ZGFjMDg1MiwgMHgxNTE2Y2E3ZiwKKwkweDU3ZmVhY2YwLCAweDI4MTY2N2U1LCAweGMxN2Y3NTVmLCAweDhjNzVmMzE2LCAweDFjYjI4MmJkLCAweGQwZmY1OWVkLAorCTB4ZmVkZjY4OTksIDB4ZjY0NmE3MTIsIDB4N2Y2ZmI3MmUsIDB4Y2EyNzQ0NzksIDB4ODJhNjViYzUsIDB4ZWNlNTE4MGEsCisJMHhjZTYwZDlkNCwgMHhiNzhhNTMyYiwgMHhmNGZjNjE5OCwgMHgwZWExNGYxNCwgMHgzMjkzNWJjNiwgMHhiN2Y2MjY2MSwKKwkweDdmYjFiZWY0LCAweDc3ZGYwOWRkLCAweGE5OWFjY2E0LCAweDQ0ZGUxM2U2LCAweGNhY2NlZjdiLCAweDkyNmVkMGExLAorCTB4NTRiM2NmMmMsIDB4NTY2OTdmNDIsIDB4MjdhN2I2MTYsIDB4MDkwZmJmMDAsIDB4NzdmNjhmOGYsIDB4YmRmZGJmNjcsCisJMHgxY2Q0ZTY2MCwgMHg1MzQ1NGJjMCwgMHhiZmZkMGFhNSwgMHg5NmRiNzI5ZSwgMHgzNjMxNTczMSwgMHg4NzcyODFmZSwKKwkweDk4M2ZjNjA3LCAweDE1YTY2NGIyLCAweDk0NjlkZmYwLCAweGYxNmQ5N2Y1LCAweGNjOWQ1OGMwLCAweGJlMDE4NmY3LAorCTB4YmFmZWYxZmYsIDB4OWZhODY2OTksIDB4NzQyZGVhOTYsIDB4Y2Q1M2ZhYzAsIDB4OTE5OTZmZjcsIDB4NjVmODFkZmIsCisJMHg0ZmJkMTJhNCwgMHgxMjcxNDgyYywgMHg5MDQ2MWNkZiwgMHgzM2ViYWRlNiwgMHhmODJhZmQ3MiwgMHg3MWQzODczZCwKKwkweDk0MjQ3OTdmLCAweDRjZTUxMWVkLCAweDEwZGNlZTVlLCAweDRlOWM3ZTViLCAweDMzYjk3MmU1LCAweDhmNzdmNjIxLAorCTB4ZWYwMDRiOTAsIDB4YjNlOTBlYTAsIDB4OTYxODFhY2IsIDB4YzAyNzk2MWYsIDB4YzQwOWU2NGYsIDB4M2NiOWRiNWYsCisJMHg2MzlhYmUwMSwgMHhkOThlM2UyNywgMHg1ZmU1MzdkZiwgMHhkM2Y1M2I4MCwgMHhlOGFjN2FhOSwgMHgwZDcyOTBiZiwKKwkweDcxYzU2NjY2LCAweDY5NzY0Y2JlLCAweGNmNTk3NWU0LCAweGJmYjc5MjUyLCAweGViN2MxNTRhLCAweDU2NzFmMGUyLAorCTB4MzMwYWU1NmEsIDB4Yjg0NzBjZjcsIDB4YzU4Yjc2YzgsIDB4NGI0N2YzM2EsIDB4ODhkMDUyZmYsIDB4ZTJkNmI5ZmMsCisJMHhhY2Y5YzBjOSwgMHhjMTllNTdkZCwgMHhkNzg3NjMyZSwgMHhmOGQ3MmM1ZCwgMHg5OGViYzI0YiwgMHhmNDA3ZWY0YSwKKwkweDQ0YjlmZDBiLCAweDVmMzFlZWZmLCAweDU3Yzk1ZTA3LCAweDdkMWE1NzgwLCAweGMzM2FkMmJmLCAweDNiZmQ2OWZkLAorCTB4N2VlM2ZiMDMsIDB4YzU3YTAxOWUsIDB4MWI5ZTdiMTgsIDB4NDE1ZWI4NTMsIDB4ZTQyMmViZjgsIDB4NWYyMTRhZGEsCisJMHgzZDkxNmE0MSwgMHhhYmM1ZmU3ZSwgMHg4ZmNkNmY3NiwgMHhmNTAzNzcxYywgMHg3YTdkZjgwZiwgMHg0MTJmZWUwYSwKKwkweDJiMWNhMmJlLCAweGIwYjMzZDUzLCAweDhhNGY1OTdlLCAweGEwNzllZDAzLCAweGRlODI4ZGI3LCAweDg5MzdhNDU0LAorCTB4YTY5NGNlZTcsIDB4NzZlZjVhNzIsIDB4ODYzYmIxYzUsIDB4MzkxM2Y4MWQsIDB4ODNjNTM2YWYsIDB4MjJjNjQ5ZjYsCisJMHhjNDQ5N2U5ZiwgMHg4N2ZjYTRmYywgMHhmZjQ1M2JmZSwgMHgxZjllOWMyNSwgMHhjNWU3YTdlZCwgMHgyZmMyM2ZjOCwKKwkweGRmNDBkY2M0LCAweDVmY2UwNzYzLCAweDA4Y2UzNmMxLCAweDI1ODJmNWZkLCAweDcwOTFmMzgwLCAweDJmZjRiNmZiLAorCTB4YjhiYTg3ZWQsIDB4ZGE5MTJhN2EsIDB4MjYwZjFjNjUsIDB4MjE5ZWEwYmEsIDB4YjlmOWM1YzUsIDB4NmJjNGUzZTMsCisJMHhlOTc1NWY1MSwgMHhlYmUyZTI5OSwgMHgyNjUxYjk0NiwgMHhlN2JmYTRlNSwgMHg3NjRhODU0OCwgMHhiYjJlNTg0YywKKwkweDcyOTE5ZWM4LCAweDg3MzY2ODMzLCAweGJkYmZkZmViLCAweDk0NDZjNjY3LCAweDJmYmUyNmFiLCAweDE0ODNkMzRmLAorCTB4ZTNjZjBhMmYsIDB4MmZhZTE0ZTUsIDB4Mjc5OGY4MjcsIDB4MjQ3ODFkOTYsIDB4MDhlNTJlZDksIDB4NzVlMWUzYWQsCisJMHg1ODYzZWM5NSwgMHhkN2U4NWQ5ZiwgMHhmOTNmMjEwOSwgMHg2NjRjOWViMywgMHhmMGUxM2VjMiwgMHhiNjdiZmE5MCwKKwkweGRjYWZmNDI5LCAweDQ3YTVhNjRmLCAweGE1M2IwNjU5LCAweGVlMTA1NzQxLCAweDg5Y2ZiZjFmLCAweDgyNjNmYmEwLAorCTB4ZjNmMWEyMGUsIDB4YzAxM2U1NWQsIDB4NDg3MDhmYzEsIDB4Yzg3MmUxNGQsIDB4ZWQwNTY1MDksIDB4MTdmNDE1MGIsCisJMHhiNTVjZmZjMCwgMHgzZjM1YmRjZCwgMHgyZTM2ZGU2MiwgMHgxZDdhOWQ4ZiwgMHhlMDU3NjM5NywgMHhmZTU0YjQ4YiwKKwkweDNiMjVlZmJkLCAweDFlMTg3M2YxLCAweDJmZjk4ZWRjLCAweDFkNzZmNzAxLCAweGMxN2RjMWFiLCAweDA5ZjAxZDIxLAorCTB4YWY4ZGEyZDIsIDB4NTk4YmZjZjMsIDB4MjllN2VmZDQsIDB4ZWZmZWI5M2EsIDB4MWJiNzJlNDUsIDB4ZDdjZTNjNjEsCisJMHhiZmQ2M2Y2NCwgMHgzYjVkYTgzYywgMHhkY2RmZGU3ZiwgMHg2NThmNGU1NCwgMHg2ODg1M2RjNywgMHhkYWYzMGNjNywKKwkweDI4NWZiOGRjLCAweGMwNzM5OWViLCAweGRkZTFlNTAwLCAweDRiNmIwMzhhLCAweGMxZGUxZjNhLCAweDRiYTgxNGY5LAorCTB4NjdhZGU1YzAsIDB4YTViNWZiMjIsIDB4YmVmYTNhNzIsIDB4MzhmYzMxZDYsIDB4Y2JjNDU3YTcsIDB4Y2QzZTA4ZTIsCisJMHg3ODcxYjU0ZCwgMHgwODRjZmFjMSwgMHg0NzJiNTU0ZiwgMHg5YmZiZjNlNSwgMHgwMTgwZjc4NywgMHhmMDA3NWJkNiwKKwkweGUxMmRiMTQwLCAweDY0YjFkOWQ2LCAweGY4ZjkwNTgzLCAweDFmMjM3MzM4LCAweGEyNThlZjlmLCAweGRkNzg4YjFiLAorCTB4ZWJiZWM4YzksIDB4ZjAwZjBmOTcsIDB4MTQ3YjQ4NzUsIDB4ZTkwM2IyZTgsIDB4NWNkNGVhZjIsIDB4NzFkODZmMWEsCisJMHg3YzBjNzU4ZiwgMHgxMzc2ODYxZiwgMHhlYzNiOTVmYSwgMHg0YzU3ZGMwMSwgMHg0ZGNkZjU0ZSwgMHhlZGNlNzg0NSwKKwkweDRhMjA2NGFiLCAweGViNGRhYzFhLCAweGZiZWYxMTJkLCAweDdkNDE3N2ViLCAweDdlOWY2M2EyLCAweDM2ZjNjZTJjLAorCTB4YzJiYWI2YzYsIDB4ZmFhOTgxZWIsIDB4NmY1YTFmZDEsIDB4YTAyZDNlMDQsIDB4ZDZlMTEwNzIsIDB4ZmJmNWU0NjksCisJMHhjZjhhMzMxNiwgMHg4Y2ZiZTgzNCwgMHhmN2Y0MWRmOCwgMHhhM2NmYTIyYywgMHgyZmM0MTRiYSwgMHg2ZWQwOWJlZSwKKwkweDczN2JkM2FlLCAweDY3ZDdkYzE0LCAweDA3YThkYzk4LCAweGY0NDIxZjYwLCAweDU0YzJjODdlLCAweDI2ZmZmNDBiLAorCTB4NTc0ZTUxM2MsIDB4OGZkOGVmZTksIDB4NTAyYWFhZjAsIDB4YWUyNDJkZGMsIDB4NjBkYzg1ZGEsIDB4Y2QzN2RjNDEsCisJMHg3YTI1NjI5ZSwgMHgzOWRkNWY2NCwgMHhiZmY1MWFiNCwgMHhmYTA5ZTM5NSwgMHhjYzdlOGIzMSwgMHhmZjMwYTJlNiwKKwkweDJhZWYzYWZkLCAweGZkNDhmZmRhLCAweGE4NTE0ODc2LCAweDhkZDc0MzlmLCAweGIxMTJkZGRlLCAweDUwZmVjMjJmLAorCTB4YWE1MjFmZmUsIDB4ZmE0MGVlNzMsIDB4YjIzYWZiMTcsIDB4N2FjMmQzMGYsIDB4MjI5NWVkMTcsIDB4ZmRkZTI0NWIsCisJMHgzY2ExN2U2MiwgMHg3YjQ4YTNhNCwgMHg3ZWQzZWQxNCwgMHhiMWRmZDY3YiwgMHhkOWM4M2E2NSwgMHg4MjNhMzNmMSwKKwkweGQxNTIwNzNhLCAweDAxZmYzM2YzLCAweGY2MDU1MWQ2LCAweDcwZTAwNWFjLCAweDMzOTcyYTViLCAweGZhZmRmMjg3LAorCTB4MzBkZjljNDQsIDB4M2FiYzNmNTgsIDB4ZDMxYmUwOWMsIDB4OTM4ZjBiNjQsIDB4ZTkwZmZjMmUsIDB4NDgyZmVlNDYsCisJMHhiZmNmZTA0ZiwgMHhlNzNiNzJhNywgMHgxZTVjNjkyNywgMHg5NzhkMjFmZSwgMHhmYjYzMTNkMywgMHhmNTEwYmUyYiwKKwkweDFmOTcxMzU0LCAweGZjYjljYjViLCAweDQxYjdhZThmLCAweGVkYWRmYmY0LCAweDY2OGEzMWRlLCAweGVmNzYwZjdmLAorCTB4Zjc2ZTU0ODYsIDB4ODg1ZmI5MWEsIDB4MGE5NjEzYzcsIDB4ODczYjA2ZmEsIDB4YWJiNjE0ZjAsIDB4ZGE1MDNjNzgsCisJMHhjY2Y0NWZhMSwgMHhmMzcyZjJhMywgMHhiZmU4ZDk3YiwgMHhlNjlmZWRiZiwgMHhiNmY0ODdkZCwgMHhmMjdhMzdmMiwKKwkweGYxMTQ5YzU3LCAweGJlYzk5NTgyLCAweGJmZGM2NGY0LCAweGFiZjZjNDI3LCAweDc1ZDYyNzNjLCAweDFmOTE5OWJhLAorCTB4MWI4YzUzZjgsIDB4ODkzZGVjODIsIDB4YWYyODQzNzEsIDB4MzRlMGY5ZGEsIDB4MmNkNWJmZTQsIDB4ZTVlMGZlNDAsCisJMHg1YzUxMzczYiwgMHg2MTQwNzk3MCwgMHg2OWY3MDUyZSwgMHgxNjI3ZWU1ZSwgMHg0N2JkNThmOCwgMHhkZjRiZjFhZiwKKwkweDkzMTkzNmFlLCAweDc3ZTk4NGM3LCAweDZlMzY5YjQ1LCAweDU4YWJiMzU4LCAweGY2ZjZmZTUzLCAweDQ0MGIyNTY5LAorCTB4ZmNiMGExYzgsIDB4YTNlZjQ2OTksIDB4MWVmNDk1ZmIsIDB4ZDQ3ZWE3NmQsIDB4YzNmOGQyZWMsIDB4NDYxY2VlOTcsCisJMHg5N2Y1OTdlYiwgMHg3N2FkMzczMSwgMHg2NjgxNmI1OSwgMHhmMzk1YWNkZSwgMHg0OWY5YmM0OSwgMHhkNGJiNDViYSwKKwkweDQ2OWU3MzFmLCAweDAwOGZmYmNkLCAweGZmMDhmZWZlLCAweDQzNTNkMmZmLCAweGE5MmQxZTY5LCAweGJhNDBmZmJlLAorCTB4Y2FjM2NmMDksIDB4ZGFiZjFhZmMsIDB4YjAyN2M3MjQsIDB4N2VlMTY2NTYsIDB4ZmYyM2EwNDksIDB4NTA4MWVjZTUsCisJMHg2ZmZmYTcyYSwgMHg3MWQxZjcwZiwgMHhmZWUzMDVmNiwgMHhjYTBiZWViZiwgMHhjYzM5NzEyNiwgMHgwYzM2MTRkYSwKKwkweDZhYTdlMzFlLCAweGEwYmZiNGVkLCAweGE3YzUyYmJlLCAweDYxNmJlYjk1LCAweGE0NWYyZDQ3LCAweGQ0NTE3N2FkLAorCTB4NWRlYTI4YmIsIDB4NjkxMmJmYzksIDB4MjgwNTI5OWYsIDB4MGQ3Zjc4ZDcsIDB4Y2ZmMzhmODIsIDB4YTBiYTM1MWMsCisJMHg2ZTM0ZjhkZSwgMHgzZDM5MTZjNywgMHg2Y2VmNTA5NywgMHg0MzhlMjRiMywgMHg0YjM2Y2E3ZiwgMHg1MmY1MDA1ZSwKKwkweDM4YmFmYWZmLCAweDQ4MzM2ZDFkLCAweDAzM2I4YTNmLCAweDVmZmVkNmUxLCAweDg4YThiNjc3LCAweDBmYjA3ZGM3LAorCTB4ZmU1ODc5MDAsIDB4OGExNjQxZTgsIDB4YWUzNzUzOTAsIDB4MDFjYjNjNTMsIDB4ZWYyMTc2ZGUsIDB4N2Q3Y2RjZWEsCisJMHg3MWEwZWU3NSwgMHg1ZDkzZjQyOCwgMHhkMzk1ZTdjNywgMHgyMzUxNWZiMSwgMHgwOGQ0ZTVkYSwgMHg0MTlhNWY3ZiwKKwkweGMxY2NjZmIzLCAweDhkMjU0ZTMyLCAweDlhOWNlM2NiLCAweGVhMTQzMmEwLCAweGEzZGFlZjY1LCAweDg3NWZkOGE4LAorCTB4YmIzMzdhNDIsIDB4NDExMzAwMDksIDB4ZGMyNWQ5NTcsIDB4YTRiMWI5YmUsIDB4MjYzNjU5NWQsIDB4NWQ1Njg3MGMsCisJMHhlMDA3MThmNSwgMHhlYWRkMzVhNywgMHg4ZjczN2Q0NiwgMHgwZDI0MzdkMywgMHgxODIyNzllNywgMHhmOGZjZWRjNCwKKwkweGRhMmEzZDEzLCAweDdhNzUzZmVmLCAweDYxOWNkMjBhLCAweDhlZjRiODM4LCAweGQ2YTdkNDZjLCAweDZkOWU3YzEzLAorCTB4YWU2M2ZiZmQsIDB4NGRhMjI4NjcsIDB4ZGNkZGFiZmUsIDB4MjNiM2QxOWUsIDB4YTQ4N2RiOGMsIDB4OGMzN2QyYWYsCisJMHhlNzI3YmQyNCwgMHhmNDIyOWU5NywgMHgzZGYzM2E0NSwgMHhhZGZhYTM2NywgMHg2OGM5ZjA4YywgMHg4NjFiZTkzZCwKKwkweDJjZjZlNmVmLCAweDgxNTU3N2M3LCAweGFmYmUwZjc3LCAweGE4YWFiOGNhLCAweDZjMTdkZTA1LCAweGExNGJhYTBiLAorCTB4NjJiYmNiZGQsIDB4ODVjYjgzZmIsIDB4NGM3NTgxM2UsIDB4NzVjOWY1YzIsIDB4YzgyZTQ5NWMsIDB4N2UzODg2N2EsCisJMHhkNjBmYzkwYSwgMHgxZmY3YjExOSwgMHgyZjdkMjIzMCwgMHgyMTZkMzQ3ZiwgMHhhMzZlYjdjZSwgMHgzMDk0OTk5MSwKKwkweGY0ZWE3ZmZjLCAweDY0ZjljNmNlLCAweDA4MmJiNDc3LCAweDkzZGZlOTFiLCAweDFkZmY0YWUzLCAweGZjZmU0NzdlLAorCTB4OTZmOTI4YzgsIDB4ZmU1YzVmZDMsIDB4MmNmN2E3NWYsIDB4MWI2Nzk0OGYsIDB4NjkyNzg0OGQsIDB4YzdlNzg3M2YsCisJMHg2OWQ1ZmRlZCwgMHhlYWJlY2Y1YywgMHhmOWMxMmVmNCwgMHgyNzZkNzQzNCwgMHgzZGFhY2Y3ZiwgMHhmOTYzMWExZiwKKwkweGUyZjlhM2FiLCAweDZhNTQ3MDRhLCAweDZlYTBiZWY4LCAweGViODAzOWJlLCAweDI1NTQ3ZjJmLCAweDY4ZGRhODNhLAorCTB4ZGQ1OTM4YTQsIDB4OWZiOGZiMzMsIDB4NDZlNjFlZTcsIDB4YjFkNzUxMzksIDB4ZTMwZTU5NGYsIDB4NGZiMzNlZDYsCisJMHhkNzAxMTE1OSwgMHgwNTAxNzU0MSwgMHgyZWMyMzNlNywgMHhhZmNiOTBmOSwgMHgzZjQ3YmE2OCwgMHg4NzJkZGEzMiwKKwkweDljNGU1YzJkLCAweDE1ZjliNzJkLCAweDgzNTllYjgwLCAweDlkZWIwZWFmLCAweGZkYmFiMmNkLCAweGJjM2M2MWY5LAorCTB4MTFmYTZmYjksIDB4M2ZiMDM3Y2MsIDB4YjNlMjBhNjcsIDB4ZDMzYmI3NTUsIDB4NDc1YWY1MGMsIDB4NWY0OGRkMTksCisJMHgzNmZhNzUzZiwgMHg1NDUyNWMyMywgMHg0ZmI2Mjc2ZiwgMHhkN2JiYjM0ZSwgMHg4OTk3NWI0MywgMHhmYmJjYTExNSwKKwkweDFmMTg3MGJhLCAweGVmZTMyNzQ1LCAweDg1ZDNmY2UxLCAweDkxZGI4ODcyLCAweDgxM2ZjODQ1LCAweGE3YjRiYjM0LAorCTB4MzYxZGFlNDgsIDB4YzczYzc1ZjAsIDB4OWVmZjdjZjgsIDB4ZTg5MDc5ZWEsIDB4OGQwYTQ4ZjgsIDB4NTQxNzVkOWIsCisJMHg3ZjlkOWZkMCwgMHg2YjkyMzllNiwgMHg5ZDMwZmZiMiwgMHhlNDg5MWU3OSwgMHhiM2NmMmJkZiwgMHg1NmY0ODhjMywKKwkweGY5NTBlNDJiLCAweDhmOTQ3YmEzLCAweDRiZmRlNjIzLCAweDZlOTFmNDMwLCAweGJhMDE5ZmIyLCAweGZkZjdkMWI0LAorCTB4M2VhOGQzMzMsIDB4YmRmMGI5MzMsIDB4ZTE2YWVkNDIsIDB4NzkwODhhZmIsIDB4NDMxMWQ3MjMsIDB4ZjVjM2VjZWUsCisJMHgxY2Y0NGVkOCwgMHhjODI3NzJlNCwgMHhiZTYyOGRmZCwgMHgxNTdjZjhkMSwgMHg5YTdjMWZlNSwgMHhkZTk5ZWEwNiwKKwkweDMxMjNmZDFiLCAweDQ4Nzg3YTJlLCAweGU1MjdmNTAyLCAweGJlZGYzNDQwLCAweGU1MWNlODJhLCAweGZlNDZjZWE1LAorCTB4ZTUyYmIyNWEsIDB4MjJiZDY0ZmMsIDB4MzRmZWM1NjcsIDB4YzEwZjQzODIsIDB4NGE5NzdlYTEsIDB4N2EzMmE5ZWIsCisJMHhjMTExZGU4NywgMHhmZDE2YmYwZiwgMHgwM2Y5YjgxZCwgMHgwN2ZkY2EyMywgMHhhMjVkZmRmZSwgMHg4NTM2ZmFjNywKKwkweGVkYWNmMWUyLCAweGQ0M2NlMzVkLCAweGY0YTdmZTQ3LCAweGUyY2U2NzY4LCAweGYxZGIwMTI2LCAweGE3ODRiYmMyLAorCTB4MmU1YzlkNTksIDB4NTNlZTc3ZDcsIDB4NzRjMmQ5OTcsIDB4YzBlNjdmOWEsIDB4ZjU2NzQ4YWQsIDB4ZmI4NjI2MWQsCisJMHhkZmJmYTAyMiwgMHhlOWEyN2MyMCwgMHhjYTQ3YzI1NCwgMHhiNGY4NzhkZCwgMHg5NDcyZTBjZSwgMHg0N2U0OGRmOSwKKwkweDNlNTRmZDg1LCAweGRjYTQyOWZhLCAweDRlYWE3YmZlLCAweGZiZjgwOWY4LCAweDFjYmM2OTBiLCAweGE3ZGYxZmE2LAorCTB4ZGNiMDhmMDgsIDB4ZTQ1ZjEwYjUsIDB4NjAzYTI5OWYsIDB4NWJiODdkYzYsIDB4NWE3ZjNmMjEsIDB4ZTQ2Nzg3MjUsCisJMHhjNmM3YWFiYywgMHg1NGNlOWI5NywgMHg1MGQ0MzdhMSwgMHg1ODdiMWNkZSwgMHg3ZmNiZjdiZSwgMHg4MTBiZmVkMSwKKwkweGU0MWY3ODZmLCAweGQ0MTBkOWVmLCAweGQxZmU3MmYzLCAweDcyNzdjYmY4LCAweGNlODMxYjdkLCAweDExZDcxYmZlLAorCTB4M2RhNGRmYWQsIDB4YzllNmU5MjAsIDB4OGY0NmFhNWQsIDB4ZWE0NjlkZDgsIDB4NzMxYjBlY2YsIDB4NzI4ZWM3OWMsCisJMHg2MWQ4Y2YxZSwgMHhjNzZjZmFlMCwgMHhlNTAwNzM3YSwgMHg3ODBiOWJjOSwgMHhhMTdkOTk1ZSwgMHg0M2NmODgzMSwKKwkweGY4NzVhNWJhLCAweDFmMzY1MGZkLCAweDViYTc1NWJmLCAweDBkZDZlNTgzLCAweDc4NDJkNjM2LCAweDRiM2EyNGY1LAorCTB4MTkxMjdlOTEsIDB4MWU1YzhmOTcsIDB4OTczY2YwM2UsIDB4NWI3ZTc1NjcsIDB4ZWIzZmMxODAsIDB4NTM5NzczN2MsCisJMHhlMmNkMzlkYywgMHhmMzMzYjhjNiwgMHhiM2NlMzQxZCwgMHhkNzJiYTQwZiwgMHgyZThkZmI3MywgMHg4M2FiM2Y3OCwKKwkweDAzYzQ5ZmYzLCAweDJmYTI1M2M4LCAweGFlMTIwZmM5LCAweGI4NzI3ODYxLCAweGY4OTI3ZTRiLCAweDY3ZjRiYmY4LAorCTB4YTc3Y2JkMDMsIDB4ZGEzZGFhYmMsIDB4NDZkYmRjNzgsIDB4YmU0ZWQ1ZGYsIDB4NzA2YzNhY2YsIDB4Yzc4NjlmYTEsCisJMHg2ZmQxZTIxNywgMHhiM2I3YmFlZCwgMHhiNTFkODI0ZiwgMHg3YTJkZjMzYSwgMHhmZDg1YmU0YSwgMHgyN2JmODZhYywKKwkweDM4MTdiYzA5LCAweDc0YWZiZWI5LCAweDJkYTliYTcyLCAweGFjYmUyMGU5LCAweGZjNDRkOTNkLCAweGU1YzE5YjZjLAorCTB4NTY4NGVkOWEsIDB4Y2ZmNjMzMWUsIDB4YThkYmJkNjIsIDB4NjNiNTk1NWQsIDB4NTQ3N2U2MWEsIDB4NzAzOGFlM2QsCisJMHg2ZTRmMWZiZiwgMHhmY2YwYWVkZSwgMHhiZDc3NGZiOCwgMHg3MmY5ODg5MSwgMHhmMmIwMmJlYywgMHhlMTYyOWUzMSwKKwkweGU0ZWI5ZGViLCAweDVlZWNlMjcyLCAweDdiZDEzODAwLCAweGY2NzJmMTkzLCAweDYzZmE5NWZiLCAweGMyMGE2M2MxLAorCTB4ZmFjMDU2YjMsIDB4MTM5NTMzZWMsIDB4ZWM3ZTg0ZmYsIDB4NjFlZTQ5YmQsIDB4OWVjZmU0YjAsIDB4M2ZlZWU5YjksCisJMHhlZWNmYmNjMSwgMHhmNzQ2ZTI5OSwgMHg5NzhiNWE2NSwgMHg2OWNmYTdlOCwgMHgwMzdlZTM3MSwgMHhmNDBjZjdjNCwKKwkweDc4ZWZhZTE3LCAweDY4NWFmMTIzLCAweGFiZTlmYTc3LCAweGQ3NmU1MDhiLCAweDc5OWU3OThhLCAweGUxMGViZjVlLAorCTB4N2ZjOWUxYjIsIDB4NmJkZjhjOWIsIDB4MDlhYTRhMDMsIDB4ZjhmYmQ5YzcsIDB4YmU2MzY3N2YsIDB4ZjI0NjllZWEsCisJMHhmZDNjYjUxNywgMHgxN2YzMTFiYSwgMHhmZTc2ODE3NCwgMHgwMzkyNmY3ZSwgMHhmOWZlOWRlYiwgMHhlZjA4YzlmNiwKKwkweGZhMTY4ZTk2LCAweGVkZTdlNjdlLCAweGU0ZjAzZTU0LCAweDc3ZjZiZGJmLCAweDEzNzhlM2Y0LCAweGNjZWY1OGRkLAorCTB4MmYwOWZiZjMsIDB4ZjI5NTNlNzUsIDB4ZjVkMWUyZGIsIDB4YjlmYjdkOGUsIDB4OGYzZDQ0YmMsIDB4Y2I5ZjMwN2MsCisJMHg5MmQ3NDkzMSwgMHg3OTNmNGY3ZSwgMHhiZDQ4YzRkYiwgMHgwYWI3ZGYyMSwgMHgwMjZiNGU3ZiwgMHgwOTlmMjNkNywKKwkweGUwYWRhZGZlLCAweDllY2ZjZWYxLCAweGZkYTdjY2I1LCAweDFjMzQzMTgxLCAweDYzNzVjNWY3LCAweDJkZGM1ZDM4LAorCTB4NzFkNzUxZTAsIDB4NDZjMWExODcsIDB4ZGY5ZmE5ZWQsIDB4NzNlM2RmMDIsIDB4MjdlN2QwMmMsIDB4NjQ4NTI5MjMsCisJMHhkN2NhMjVjZiwgMHgwZmFhNTdmOSwgMHhiZmEwMjZmNSwgMHgxZjQ1ZTZlNywgMHhlYjFmMzgyYSwgMHgyZDQzMjY5OCwKKwkweGZlNjlmM2NkLCAweGY5MWQ1NjFkLCAweDZjNmQ2Y2JkLCAweDM4YmZmYjNmLCAweGUwMmVjMjZkLCAweDU5ZGQ5MDdjLAorCTB4MzkyMmUzOWQsIDB4OGIwZjcyNjAsIDB4NmJiMzg3YjAsIDB4MjcxODJkN2MsIDB4Y2ZhZDdlYmUsIDB4YmUzYzA3YWQsCisJMHhiNGU4ZWE3YywgMHg3MjdlNTA0MSwgMHhmODRjNTJhNCwgMHhjZjVjMmJkNywgMHg0ZTM0NmRmOSwgMHg4MWMxZmEzZCwKKwkweDNlMGI3NjhmLCAweGY1MzA3NzQ5LCAweGRjMDM5MjFhLCAweDMyYTU1MDFmLCAweGFhN2U0NmQ1LCAweGY1MTM5MjNlLAorCTB4ZWUwZjQyYWQsIDB4NzM2ZTdlMTEsIDB4NzY0ZGRlNWYsIDB4MjZiYjY3NmEsIDB4ZWQwNjFmNjIsIDB4ZjcyYTM2NmMsCisJMHhmMzEwZmRlNSwgMHhlN2Y4Njc0YSwgMHgxOTcxZGU5MywgMHhhNDY3YmU2OSwgMHhmMjdlNjAzYywgMHg4YjdlNGE3YiwKKwkweGJjYTExYmY2LCAweDU3ZDFmY2MxLCAweDI4NWRlNTlkLCAweDNkMzNlNTFmLCAweGVmZTRiZjhlLCAweDc0YjhmYmUyLAorCTB4MTVjYTE3NGYsIDB4YTM1NTM3YjYsIDB4OTVjOWUyMGYsIDB4ZTc5ZjM3MDMsIDB4MGY5NWZiN2EsIDB4OTAxYjBlODksCisJMHhkZjdjNzEwZSwgMHg1ZWRlOGQ0OSwgMHhlODE1YzI0ZSwgMHg4OTBmYTVmMCwgMHg3MTc3OTcwZSwgMHg1NWQwZGFmOSwKKwkweGQ0ZmRjNDZlLCAweDY5ZDdlMTBlLCAweDc0ODRmNDEwLCAweGJmZThmYjg0LCAweDljNjk5MzNhLCAweGUxYTFjOTg2LAorCTB4MGJjZWE3MjgsIDB4MTJmZjNiYmEsIDB4M2E0M2I3YTcsIDB4MGUwMWY5MWQsIDB4ZGVkZDFlZWQsIDB4OGZkNDBjYTIsCisJMHhmMDk3OGQ0YSwgMHhlNmY4MDBkZCwgMHhhM2RhZjM3NiwgMHhkN2Q1Njc2OCwgMHg2YmYyMzczMCwgMHgwN2UwYTc0MywKKwkweGJlMTE3YmIwLCAweGNiZDU1ZDBkLCAweDY5NDFiZmIxLCAweDBkZGZjOTMzLCAweDQxYjRjOTc2LCAweDYzYTg2ZTUwLAorCTB4ZDk2ZmM4YTUsIDB4NDI1ZTJhYmIsIDB4N2M1ZDYwYmEsIDB4MDM1ZDllM2YsIDB4NGRkMjJjZjYsIDB4OWY1YmJkNWEsCisJMHhkYjhmN2E4ZiwgMHgyYzhmZDdiZCwgMHg3MjNiZjZhMywgMHhmMmU3MTQ1ZCwgMHhmMzhhMzE1NywgMHgxOWZiNDBlZiwKKwkweDY4ZDY1ZGY1LCAweDM2ZmIzZjZlLCAweDVjYzVkZDkyLCAweDY1MzdlNDA5LCAweGQ2MGQ3NTNlLCAweDYyMmZmMDZmLAorCTB4Y2QxMWQ3OTQsIDB4YjQyOTJmYzcsIDB4NTgwODY4MGYsIDB4NTY2ODFmMjksIDB4MWE3ZmI3MTcsIDB4OWYxZjM4YmEsCisJMHg0ZjkxZjA5MywgMHhlNGFkY2Y0MywgMHhjNGMxN2Y4ZiwgMHhkMGZlMTFmYywgMHhjZTlhNWYzNywgMHgyNjhiZWNmNSwKKwkweDM1OWZiM2QyLCAweGIwYzdkODdiLCAweGJjODViN2EwLCAweDZkYWM3MDk3LCAweGRkMjFkN2NiLCAweDA5OTM3NjMyLAorCTB4Y2M0Y2IxZTcsIDB4ZjVjMGNkYTMsIDB4MDNkMGIyNDYsIDB4M2NmOGRiMDUsIDB4NzdlMTc0ZDQsIDB4YTc4OWQ3NGMsCisJMHhlMmU3OWI1MSwgMHhlMTdmOTNmMCwgMHhjODhmMTg5YywgMHgzOWU4NWQyMiwgMHg3OTdlYmExOCwgMHhlZWE0Zjg5MCwKKwkweDlhNWZkZTE5LCAweDY3Nzg1M2M5LCAweGZiNGFiZDA0LCAweDBiMWU5YTI4LCAweGJiZDliOGM0LCAweDRjMjgyYTBlLAorCTB4ZDFjZDc3YjIsIDB4MzVmNWY5ZjAsIDB4ZWIwOGQ4MmMsIDB4MmU5NzdlYmMsIDB4ZDkxYzY1MzgsIDB4OWU0OTBiNGQsCisJMHg1OGIyMzdhZiwgMHhkMjIzMmFmOSwgMHg5NTU2ZmRiOSwgMHhiZjQ0MmRlYSwgMHgzNmNkZDU3NiwgMHhiOTNmYTQ3NywKKwkweGIzYTNjMTJhLCAweDI0NTcxZGEwLCAweDEyZGVkOGZkLCAweDRhOWQxYjhjLCAweDZmMTFiYmI3LCAweGQyNWRkMmUzLAorCTB4NWJkOGQzMGUsIDB4ZGNkZmY3MDMsIDB4Y2RhMWJjMGUsIDB4MWZmNzBlM2YsIDB4ZjMwOWY1ODEsIDB4ZGEwOWFlMjksCisJMHgwZWRjZmM4ZCwgMHhmN2ZiOGY2OCwgMHg5Y2ZlZDdkZCwgMHhiODViZGZlZiwgMHgwNzA0MDJmZiwgMHg2ZjU0OTljOSwKKwkweDlkOGZmYTA5LCAweDVjYjVkZTA1LCAweGIxZGRkOTNmLCAweDkzYWFmM2Q2LCAweGNkYzBlN2FmLCAweDNlZTIxNmI3LAorCTB4OGRhZTYxYjEsIDB4NTc4MWUxZjgsIDB4ZGU5Y2E1OTQsIDB4YmVlMjExNDAsIDB4ODNmOWM3ZGEsIDB4ZTEzYzdmMDEsCisJMHgzYjI0N2EyMiwgMHgxYmM5YTFhYSwgMHg5YzhmNGQ4OCwgMHhhZWMwMWE1ZiwgMHhlODFiM2I0MiwgMHg5M2I3MGQ3MSwKKwkweDEzZjM4YzZkLCAweGJmYjk0YmE3LCAweDY5MTViOTQ3LCAweDhkM2U0YWNmLCAweGJmNDk3YmU2LCAweDM1ZmY3Y2ZkLAorCTB4ODFiY2ZkZjksIDB4ODA3OWUzZjMsIDB4M2Y3YmQyMDMsIDB4ZTljY2JmOWQsIDB4ZTA3YWViN2MsIDB4MTViZWY4NDcsCisJMHg0MjI1YjFmOCwgMHg3ZmVmNDdmZSwgMHgxZmI4OWU3MCwgMHgxZWY2ZjI5MCwgMHgzYTUxNzdhNywgMHg2ZmRkYTFjYSwKKwkweGFiNTBjNjZkLCAweDJmMGQ4Zjk0LCAweDM5N2UxOTZmLCAweDk1OGNjYmJiLCAweGYwMzM1ZmExLCAweDYwZmQyNDZiLAorCTB4NDQ1ZWQ2OGMsIDB4MDllYTNmNGYsIDB4ZmVkOGJhZWIsIDB4NmRkMmJiOGYsIDB4M2YzZmNkZGYsIDB4YWVlNTJmMzAsCisJMHg3OTgxZDJmNCwgMHg3M2E4ZTkyOSwgMHhhZGJiNmYxMCwgMHhhNThmYjQwMSwgMHgzZTdhMjkxZiwgMHg0OTlmMDQ0YiwKKwkweDAzZmRjYTdjLCAweGZlYjAyMWM2LCAweDM3ZWY4MmZkLCAweDg4OGY3YTg5LCAweDg0YmVjNDY3LCAweGYzYTVjMWY4LAorCTB4ZjY3OTQ4N2QsIDB4NmM5MWY0NzEsIDB4YjVmOTdkZjcsIDB4MmY1MjM4ZTQsIDB4OGM4ZGQzNDYsIDB4YWE3YWUwYTMsCisJMHhkN2FmYzRjNywgMHhjZmVjNWZiNiwgMHgyOWY4ZThhMiwgMHg4MDBiNWZjMSwgMHg2ZGRlNzAzNywgMHhjNDE3ZTA4NiwKKwkweDE5ZDg3NzhmLCAweDk5ZjgxM2U1LCAweDcxZTMxNTI3LCAweDdjZTA4ZGFmLCAweDM4NmZiMjM0LCAweGZhNjZiN2I2LAorCTB4OTJiYTQ0YmUsIDB4OGY3YzVkN2UsIDB4MTE1YWFhNzEsIDB4NmJkZGFjYmYsIDB4N2Y5ZTQ0MDgsIDB4ZDE4MzM3YjksCisJMHhiMzc2YmQzOCwgMHg5MWZjMGY1ZiwgMHg4N2RiZTk5YiwgMHhjYzE1ZmRlZCwgMHhmMzNkNDQxZCwgMHgyYjhhMTY4ZiwKKwkweDhhNWI4MTgxLCAweDg1OTFhNmYyLCAweGVmY2UxMTEyLCAweDIwNWVmYjI1LCAweDBjZjdkNWZhLCAweDM5ZTNiZjQ3LAorCTB4ZGYwZTM0MjUsIDB4ZGFmZTEwOWYsIDB4ZmI1ZmMyMTMsIDB4Y2Y3YmQ3N2UsIDB4MTdhZDAyYmUsIDB4ZjE2ZTcyYmYsCisJMHg1ZWNlOTE4ZiwgMHg3ZDIxZTRiNCwgMHhlN2Y0YjA5YywgMHhkZGExMjViZiwgMHg5MmI5ODE3ZCwgMHg2OTBlNzcyZSwKKwkweDU1ZWY1OTkxLCAweDI3NjdmYzIzLCAweDdmZmRiMWVjLCAweDM3M2MwYjZmLCAweDUzMmI3ODhhLCAweGI3YzNlZDE5LAorCTB4MTlmOTcwNjcsIDB4ZTNjNGJmM2UsIDB4YjRlYmVmYWQsIDB4MWNmOTM3ZmUsIDB4ZGZlMWMxOTMsIDB4NTAxY2U3MTksCisJMHhkN2RmMDY2MSwgMHhmY2UxMGU3NCwgMHg1MGFlZDdkOCwgMHhkZDY2YWZiYywgMHg0MWViM2ZmYSwgMHhiNWFjZDQyZSwKKwkweDlmMDllOTA3LCAweDcxYWI4ZWQxLCAweDI4M2E4M2Y4LCAweGI5NzAzMDlmLCAweGNkNzM3ZjA0LCAweDA3ZmQ2MTY1LAorCTB4Yzg0OWQ0ZjUsIDB4YzUwNzdlMzMsIDB4ZmQwYTk2YmYsIDB4Y2RlOWFjYjUsIDB4YTE1ZmExYmYsIDB4NDllNjY1NDYsCisJMHhmMmM3MTg0NSwgMHg5ZjA0MWUxZSwgMHg0ZjJkYjUzZSwgMHhmMmJmZjE0NCwgMHhhM2E2Nzc0NywgMHhkNDU4Y2E3ZSwKKwkweGE2YzFmMjI2LCAweDU1ZmVkMDNhLCAweDJmZTgzNzNjLCAweDZmNjcyZjU5LCAweDEzMjc2NGE5LCAweDFlZGUwMDFkLAorCTB4MjJmNmYwY2MsIDB4ZTI0YTJmMWYsIDB4Nzc0NWMxN2UsIDB4MDhmZTAzNWEsIDB4ZjA1N2I4NzksIDB4N2NmZDM0NjEsCisJMHhjZGJjZTcxMCwgMHgwMTE1MTk5NywgMHhhYTYxNmZlYywgMHhlZmQ0NmZmNywgMHg3MjM0ZTc5ZCwgMHhmYTEyYmNlZCwKKwkweDVmNDgyM2M1LCAweDRmZGRkODc3LCAweDIyZjJlZWYwLCAweDA1ZDI2M2YzLCAweDBlMzE2YmZjLCAweGI3YjFhMjA0LAorCTB4YmFmODY3YjAsIDB4YmVlM2E0N2MsIDB4NWZhMWRmYmMsIDB4ZjBlNGRiYWIsIDB4OTFiYmYwYmIsIDB4ZjE3NmNiYmUsCisJMHhlM2YxNDFlMiwgMHhkMjIzMmU0MCwgMHg4NTQ1YzM0NywgMHhmNzY5NjFlOCwgMHhhZTUxYzc5YiwgMHhhMjIxYTgzNywKKwkweDFiNjZhNTkzLCAweGEyZTFiMWUxLCAweGQ1YTllOWNhLCAweGRiMjQzNjcwLCAweGE0ZDdlZTAzLCAweDYwMzJkMjdhLAorCTB4Mjc3YmZlOWUsIDB4MDkzYzUzMjUsIDB4MTdjMzg5ZjgsIDB4ZTM5YzQ1MmEsIDB4MzdjMzMyZjgsIDB4ZjdlMDAzMjgsCisJMHgzNmYxMzU5MCwgMHgzMDVkN2ZkYywgMHg4ZjMwOTJiYiwgMHhmNDA4ZDFhZCwgMHhlNzc1MzU3MCwgMHg0M2Q4NDczNSwKKwkweGE1YWVjNzJjLCAweGZlYjdlZTgzLCAweDZlNWFmMzg2LCAweGFmNTExOWY2LCAweGQxMzRmMGFmLCAweDQ5NDViMTc5LAorCTB4OThjNzUyYzEsIDB4ZDI0ZmJjNDgsIDB4ZjVmZDFhNWYsIDB4Yzg0OTdlZjEsIDB4M2M4ZGY3OTcsIDB4OWQyMDY0NmYsCisJMHhjZjZjM2M3MywgMHgzOWIyZjUxMCwgMHhjNzlmYmNiZiwgMHhlN2MzOWU2YSwgMHhiYjQyNzgyOCwgMHg3Mjg4ODdmNywKKwkweDE3MGYyODkxLCAweDc5NzlkMmY1LCAweGY3OTdlMDlhLCAweGQxN2FmMWM3LCAweGUzMTUyY2UzLCAweDk5ZTE5OTdjLAorCTB4NzY4MjcwOGMsIDB4YzdkMjIzNDEsIDB4NjczYTE2NmIsIDB4ZmU0MDRhYzQsIDB4OTM1YmJjYTEsIDB4YzgyYzc2NGIsCisJMHg3NzA4NjliOSwgMHg0Yzk4MjcxOCwgMHg2N2E0NGNmNSwgMHg0MWM4MTM1OCwgMHhhOTZmNjdjMCwgMHhiNWIzZTA4YiwKKwkweGUzMDVlODFjLCAweDI4OWFhZjQxLCAweDJiZjEyNDFlLCAweGNmOGQxYWYxLCAweDc3Y2ExOTg1LCAweDE4MWY0ZmNiLAorCTB4NTE5ODVlYmYsIDB4Y2Q3ZTMwM2EsIDB4MTdjMjUwZDgsIDB4ZjM4YzRiZDEsIDB4ZjVmMGYxMWYsIDB4MDNjNzNiNmIsCisJMHgwY2YyZWJmMCwgMHhiMWMxODNkMiwgMHg0OWIzN2M5MSwgMHhiNWNhNTFjMCwgMHg3OGI0MTNmNywgMHhlMzlkM2NmZCwKKwkweGJiZDQ1ZWExLCAweGRhMWY3Njg0LCAweGUyM2VlZWQxLCAweDc4NTNmN2JmLCAweGFlMDJiNGZkLCAweGZlNWRhNDk3LAorCTB4NWYyZTAyNGYsIDB4NTI5ZjZiYTYsIDB4ZDFmYjQ0Y2YsIDB4ZTJmMjE0YmYsIDB4NDdlZTc0Y2IsIDB4OGRkZWJjMDcsCisJMHgwOWZhOTVmMywgMHgxOTMwNGNlNCwgMHhlYmQxNzhmOCwgMHg2YzMzOTIyNiwgMHhkNWU1MWY2MywgMHg4M2ZmYmQ0MCwKKwkweGVhNjQ1YWYwLCAweGY0MTUzNWJiLCAweGRlYzEwZmNhLCAweGJiNTExNjMxLCAweDA2NDcyODRiLCAweDQ4YzdlZmVjLAorCTB4ZDQzM2IwYmEsIDB4MGUxOWFkZGIsIDB4ZjQ5NDFmNmUsIDB4NDhkN2I4ZjEsIDB4MGNhNWFlYmUsIDB4NjU3Mjg3ZTQsCisJMHgyMTBjNjNmYywgMHg2YmYwZTQwYiwgMHhjMTQyYmYyMiwgMHg2MjE0YWViYywgMHgwN2Y2MTc2NywgMHg4Yzk3ZmY3MCwKKwkweGEzZGMzMGQyLCAweGU4MjEzYmM3LCAweDQ1MGNkMWUwLCAweGIyMTViYzI1LCAweGFkZGJjNDQyLCAweDVmNmU3ZWVmLAorCTB4MTM5ZTVkMGMsIDB4NGQ5MzY1ZTcsIDB4ZTdlYzc2YmUsIDB4OTE2ZmRkZWMsIDB4MThjMjdlOWQsIDB4OGI2NmRlMWMsCisJMHg3YzE4ZGRmMSwgMHhmYzI1MjFlYywgMHhmNGE3YjZmZCwgMHg5OGQ1ZTM3ZSwgMHhjMWY2N2U3ZiwgMHg0YmRkNjE5YiwKKwkweDFjNmVmNDdiLCAweDVmM2RlOTcyLCAweGVkMWUzM2JjLCAweGM1MDMxZWVjLCAweDZmZGY0MDZiLCAweDRkZGU3MTUzLAorCTB4YTEzY2FlZGMsIDB4NjdjMWQyZDMsIDB4M2RmNzY5NzcsIDB4OTA3YTBiYWYsIDB4ZGNhNTcyZTcsIDB4MTU3Y2ZhOTEsCisJMHg5Mzc5NzM3MywgMHhjYjFiYjg5MCwgMHgzYjcxZGQxZiwgMHhjZTVkY2I5ZCwgMHgwMDNkODdiYywgMHg2NjZiZDNmNywKKwkweDNiN2M1ZDkyLCAweGNmNWU1MWYzLCAweDM5ZWQ1NmIyLCAweGRhNmQxNWRiLCAweDA3M2JlZGYyLCAweDM5MjVjMzljLAorCTB4ZmQxMDJhYmMsIDB4MmJhNWY4NWUsIDB4ZjNmYmViNjMsIDB4MzMzZjJlODIsIDB4N2FmZGY4OGEsIDB4ZmRmOGNjNTMsCisJMHgwOWZjODVlZiwgMHhiNGZiZDljNywgMHgyZjU3ZmJmMSwgMHg4YzZmYmYxZiwgMHhlZDg3ZGY4YSwgMHgzZGY4ZTg4OCwKKwkweDYxMTNmN2VmLCAweDkxYmY2MDZmLCAweDJhY2ZmYzcxLCAweGEzZTNhZjYyLCAweDU4Yjc2OTBjLCAweDlmMTlmOTM1LAorCTB4MTI1YmIwMGMsIDB4NDVlMzdiZTksIDB4ZDhmOTljNGIsIDB4MmI2N2ZkZTgsIDB4ZDdkMzhmNjMsIDB4NWYzNjhlM2YsCisJMHhlNzllZGMyMCwgMHhiNWZkYzgwOSwgMHg4YmM2OTNhNCwgMHg2NTY3YTQ1OSwgMHhlMWM3ZGE1OSwgMHgzZGY0Mzk3NiwKKwkweGY0YmFiY2ZhLCAweGY4YmU0YjZmLCAweDJjZTY2MTU4LCAweDE3NmQ0N2YyLCAweGYyOWJiYzc2LCAweGJiNDYzZjMzLAorCTB4YmE3MmY5MDgsIDB4NGMxMGI1ZWIsIDB4Mjc4ZmQ5NzEsIDB4ODQ4NzU3MGUsIDB4MWQ3YTI2ZjksIDB4NDI2NzVmNDAsCisJMHg5OGQ4ZjIxMSwgMHhmZDIzNGY2OSwgMHgzYTZlNjZlYiwgMHhmZWU4Mjc5NywgMHhlOGFiYmJkNiwgMHhiZGZmY2Y3YywKKwkweDMyMjMzMmE3LCAweDUzZjcyYTZlLCAweDhmNjk0NjBkLCAweDk2ZmEzNGQ5LCAweDY1ZTNlOTQ1LCAweDFkOTE2ZjVkLAorCTB4NzBkN2Y2MDYsIDB4N2E3ZjNlMTQsIDB4YzNkMjZlZjUsIDB4MWQzNzk5MmIsIDB4ZDVmN2JkZTksIDB4ZTU2ZTc0MTEsCisJMHgzOTYxZWFkYiwgMHg0YmZjOWI5ZiwgMHgzNWJmM2MwYywgMHgzOTg3ZWM4ZCwgMHg3NTM3M2U2MiwgMHg2NzUwM2I3MywKKwkweDFjNjgxOGY2LCAweGQyMzk3MzBmLCAweGU3Y2Q4YjY5LCAweDg1NTQ0MjBiLCAweGYzZmQ3NWYyLCAweDYzMWRlNzQ3LAorCTB4MTVmY2M0OTMsIDB4YmRmMDBmNmMsIDB4NTJkOTNjNGUsIDB4ZGJjZTI2NWYsIDB4MzFlYWUzODQsIDB4ODk5MDI2MGQsCisJMHg2ZTg5OTZjZiwgMHgyOGE3M2UxNywgMHg4M2NmOTU1ZSwgMHg2YjFhNzllMywgMHgzYWZhYzFjYSwgMHhkN2NmNDg3MywKKwkweGM3NDgzMzA5LCAweGEyZjBmZGY2LCAweDM3OTQ1ZGIyLCAweGViNzBiZGNlLCAweGIzNmY3YzBhLCAweDhhMzEzYzkzLAorCTB4MDRjZjRjNzksIDB4NmRmYzg4YjksIDB4Yjc1YzY2NjYsIDB4NGQzYzE2YzksIDB4ZjRmMTMzZjEsIDB4OGY4OGI4NTcsCisJMHhmOTE4NDNmZCwgMHgwNzU4MTI0MSwgMHhkOWI1M2Y5ZCwgMHhiMTcxZjljZSwgMHhiMDUwZTYwZSwgMHgwODVjNzE2YywKKwkweDljZTI3ZWUyLCAweGYzYzdlNmMzLCAweDY3MmYyMGM0LCAweDVmM2ZhMjY1LCAweGM0NGFkNWY5LCAweGVlNjdjODBiLAorCTB4NWRmNzhhMTcsIDB4MTFmM2YyMGQsIDB4ODhhNWRlNDIsIDB4NzkwOGI1ZjksIDB4OGFkY2M1OTcsIDB4ZTQ4MGM3YjgsCisJMHg5NWY2ZmRkZCwgMHgyNjdlZTAzNywgMHhhM2Y3Nzk4ZCwgMHg3MTM4N2JiYywgMHgzMmZkYzUwNiwgMHg5M2U2OGY5OCwKKwkweGM4ZDU0MzNhLCAweDViNTdhNzJkLCAweDQ2YWY5OGNlLCAweGU3MDUzYmNiLCAweGJlZDNlNTk3LCAweDk0MTNiMzM3LAorCTB4YmQwNGE0OTcsIDB4Njk1Mjk3OTksIDB4ZmQxMjM2MWYsIDB4MzcyMTA2MzEsIDB4M2U3ODU5OGUsIDB4Y2YzMTY2YzIsCisJMHg4ODUzMzMzYiwgMHg3ODU5OGU2ZSwgMHhiNmI3YzI1ZSwgMHg3ZGRhZGM1YiwgMHgzZjBhNDM3ZCwgMHhkZDNlN2ZiZiwKKwkweGMwZjFjNjZjLCAweGUxMTNiOThlLCAweDA3Y2M3NjA3LCAweGRmY2UxNjdlLCAweDQxZDI5YzJjLCAweDZmOWIwMjc5LAorCTB4ZTAxYmRjNTQsIDB4NmJiYjY2ZmQsIDB4ZWJhNDBhYmQsIDB4N2Y3MGE5OWYsIDB4YzcyOGVhOGYsIDB4M2NmNjljN2MsCisJMHg0NGYzMWI4NywgMHhmN2JlNDUxYiwgMHhmNmEzOGI2NiwgMHg5YTYzZjIxOSwgMHhiN2Q2M2Q3OCwgMHhlZDk2ZTMxOSwKKwkweGFjMGUxZDViLCAweDM3ZDk1Njk3LCAweGFhZmI4OGNkLCAweDliYjFjYzE1LCAweGFmZjdhMGM1LCAweGJlNjA4ZjgwLAorCTB4ZTAzMmM3M2YsIDB4NjNmNDExNDksIDB4ODViYWUyM2QsIDB4ZWZiZTIwZDYsIDB4ZjAxNzdmYzEsIDB4ZGMzMjk0ZjIsCisJMHg4MmJmZjJiZiwgMHg3NzNhNDJlZSwgMHhkMjdhM2NjOSwgMHg4NWRkOGQ5NywgMHhiYzYwZDg2ZiwgMHhlNDg1Yjk4MiwKKwkweGYyNTZmN2FmLCAweDcyMTMyZmI4LCAweDU3MWNiYzYwLCAweDYxYjVkOWYwLCAweDg1ZWZhN2JhLCAweDViYjQzY2EyLAorCTB4NGNkMzdmZjgsIDB4ODBlYmFlM2MsIDB4OTFjNGNhMjEsIDB4YzY5ZmFjNDMsIDB4ZTRjZGMxZjksIDB4NmJkM2U3MWYsCisJMHhmYjBmZjg1OCwgMHg0ZmY3MGNhYiwgMHhmODZhNjk3MiwgMHg2MGVmOTg3MywgMHhiYmIzMjJhOCwgMHg4ZGVhMGVhNSwKKwkweDkxZmI4MzU3LCAweGNmMTVhZmFmLCAweDU0M2NmMTQyLCAweGU1ZTkyMzdlLCAweDY1Y2Q5ZDFlLCAweDM3M2U3MWQ0LAorCTB4YzNhYmEwMTcsIDB4OTRiODQ3YWIsIDB4NjBiNGI2MzksIDB4NDEyOWQ3M2YsIDB4ZDhjZGU2N2EsIDB4OWZkMzgyZGUsCisJMHhjOTRjZmMyMywgMHg5ZTAwYzY5OSwgMHgwMDk5NmIzNywgMHhjOGJmMjY3OCwgMHhmZmEzMGY5ZiwgMHhhYzJmZmY1YSwKKwkweGNjNzRmMTE4LCAweDI3OWVmNTIwLCAweGI5ZmZlNzg5LCAweDBlZDUzZDY4LCAweGNlOTc1OTNlLCAweGMyMmU3YjMzLAorCTB4Y2YzZjI4ZjksIDB4OGI3NGQwYzYsIDB4YTk5N2ZlZjgsIDB4ZDc5NzQ5NTUsIDB4MzAwZjNjYmIsIDB4ZTVjZjRiMjUsCisJMHg4NzFlMGNlMywgMHhhNjZmOWM2ZCwgMHg3MTQ2ZTViYywgMHg3ZDUzMDMwZiwgMHhmMDhjM2ZmOSwgMHhjNWI4YzhhZiwKKwkweDdmMzYwNmJiLCAweDQ2ZmQ4YzVmLCAweDA3YjcxNjRhLCAweGZkYzBkY2U2LCAweDFmMjI4ZGMyLCAweGNjNGY3ZTQ3LAorCTB4YmZiMjdlZTIsIDB4Mzc3YjRlNjQsIDB4MWUzZGVjOTMsIDB4OTQ5ZGZkNmYsIDB4NDhkOTIzNWYsIDB4ZjIxMTVmOTQsCisJMHg1ZjI0OGZlNSwgMHgyNzhlZGZjYSwgMHg4NWRmYjQ3ZiwgMHgyOWU3OTlmYywgMHg0MGJlZDAzNiwgMHhlZjI5MjFjOCwKKwkweDY4ZWYyMmJkLCAweDEwMThmMzAxLCAweDFlZTIzZDRmLCAweGFiZTVhMzk1LCAweGNjZGQwZTQ4LCAweGY3ZmVmNDdjLAorCTB4MDBmZjNjMTUsIDB4ZmQ4MGQzMDgsIDB4NmI0MzM0ZGQsIDB4NmFmM2NkM2YsIDB4OGZjZjM3Y2IsIDB4M2UzOGFmYjYsCisJMHg3YzBiYjhlNCwgMHhhNDczZWZkYSwgMHg2YjQzM2M5ZCwgMHg4N2ZhMmYyNywgMHhjZjQ5OTJhZiwgMHhmZWEyZmM2NywKKwkweDNlNzBlMGQyLCAweDNlNTQ2MzUxLCAweDI3Yzg4MzUxLCAweDNjMmFlYzZhLCAweDRmOTExNjk0LCAweGYzY2RkOGQ0LAorCTB4YWViYTFhODksIDB4ZWRjNDRmOTQsIDB4YjAyOWFmMjksIDB4ZGUyNGUzMWYsIDB4ZWM5NGQyNWEsIDB4NzI3ZjkxMGQsCisJMHg4YTRmZjMxMCwgMHhhZjZlNzRjMiwgMHgwYzNjZjNiMCwgMHhhMmJjYTFlNiwgMHhjZTk1ODcxYywgMHg4YWVhYjQ1ZCwKKwkweDlhZGI4ZmM4LCAweGRkZjhkNzY4LCAweDU1NzdhZWI3LCAweGJmZTkzZDYxLCAweDQ4NDNmOTk1LCAweGMzZjZiMTM3LAorCTB4NWY3YzU5ZDksIDB4N2VlMTQzYjMsIDB4MzMwMmZmNzQsIDB4MDU5ZDNiZWQsIDB4YzE1YzRkNWUsIDB4ZDFjNzY3YTksCisJMHhhNjZlZjhhZiwgMHgzZjI3ZDY0YiwgMHgyZjgzMGVjOSwgMHgwMTllMThhYiwgMHg4OTc5ZDE4NSwgMHhiNjdhZjZmZSwKKwkweDUxOTBmYzkxLCAweGVhOTljYTcyLCAweDMzODAzOGE2LCAweGY1ZjkyYzY5LCAweDkyMTc3NWU3LCAweDJjZDk5MjNmLAorCTB4Yjg0YTYxZWUsIDB4ZGI3Mzc5ZmYsIDB4NjllYmNjNTUsIDB4OTc1NzZlZWMsIDB4Mzc3NGMyZGIsIDB4NDNlYzRiMzYsCisJMHhmNDhhY2NhYywgMHg3YmQ3ZWZkYSwgMHhiZDdlNDRjZSwgMHgzMGI3OTM2NCwgMHgxOWQ3ZGEwYiwgMHg4YmJmZTQ4MywKKwkweDFmN2E1N2EwLCAweDJlZGU1ZjRmLCAweGUxNTBjNWU4LCAweGU2MDJiMDVkLCAweGQxOGVmYmQ3LCAweDBhNmJmYjhkLAorCTB4Y2ZmZjQxY2MsIDB4N2U0Yzk0YmYsIDB4MjMwZTc1NDksIDB4OWNiMWI1M2QsIDB4ZjQ1ZTkzY2IsIDB4M2UzYWMxOTMsCisJMHhmYWY3ZTY0ZCwgMHhhNDY2YWM2YywgMHg0Y2E3Y2Y1ZiwgMHhjNTVlM2EyMywgMHhlODNkODcwMiwgMHg3NDA1ZGI0NywKKwkweGQyY2Y3OTE4LCAweDhlYjk2ZDFlLCAweGE5ZmU5MDc1LCAweDNkMDA2NjdiLCAweGYyOTQ3YzkzLCAweGY0Yjk5ZWI4LAorCTB4NzQxYjhjMDYsIDB4YTFiM2RiNmEsIDB4Mjg1YzM5NWEsIDB4YmNmMTQ3ZjQsIDB4ZmY5ODJkYTksIDB4ZjJlM2FjNTAsCisJMHgwZjc3MmQ5MSwgMHhmNWZiNDM5YSwgMHgyYzRmOGU0NSwgMHhhMTdmNzIyOCwgMHhlYmFlY2U1YywgMHg3M2QyOWZiNSwKKwkweGExN2FlN2ZlLCAweGFkMWZmNDU0LCAweDNkODU0YWJmLCAweDE3ZTQxOTM3LCAweDdkYTU2ZmVlLCAweDdjYTlmNTA2LAorCTB4Y2ZhZGQ3NTAsIDB4NTllNzg1ZDQsIDB4YmI0OWRhMjIsIDB4ODkwYmVhNTAsIDB4OGMwOWYyYWYsIDB4YmJiNTc5ZTEsCisJMHgxYTdjODRiMiwgMHhiZTIwODZjMiwgMHgxM2UyN2ZhMSwgMHgyOTU4MzcwNSwgMHhmNzFmYmZkNCwgMHhmMThhZDc4NSwKKwkweGE4ZmMxZTgwLCAweDczM2FmZGJmLCAweGIzNmJlOTAwLCAweGQyZmE0NGQyLCAweDNjM2ZmNjhjLCAweGQyM2UyYWI3LAorCTB4ZTM1ZWZmMGIsIDB4NGM3ZDIzZDcsIDB4ZGQzNzRkNjQsIDB4OTkyNmY1MDAsIDB4YjcyOGFjN2IsIDB4MzFmZTRlODAsCisJMHg1ODVhN2U5MiwgMHhhMjlmNmYzMCwgMHg3ZWZhMjNhMSwgMHg5OGVkZjkzNiwgMHg1YWY1MjQ3NCwgMHg5ZWRjZjdmMCwKKwkweDc0YmNjNTk5LCAweDBmZTc5M2NmLCAweGE4M2FlZWRjLCAweGQ4MjY3ZGYwLCAweGVlZDEwNzlmLCAweDkzMzc1YjdhLAorCTB4MmMyNjY0ZTgsIDB4Mzk1NWViMDMsIDB4OWU5ZmY4YjQsIDB4ZGY0NzJkYTksIDB4NWFkMGM1MGYsIDB4NDg3NDQzMjgsCisJMHg5YzU0MDY3OCwgMHg1MWJkZjQ0ZiwgMHg5OGY3MjkxZSwgMHhiM2U1ZWU1NiwgMHhmOGRlNzhhZiwgMHg0MjNmYzM5NiwKKwkweDFkNzU4M2ZmLCAweDBlZjY4OTFiLCAweDhmYzRhYTU4LCAweDI3YjBmNGQxLCAweGI3OGY3YmViLCAweDExOGFjOWVjLAorCTB4N2UxNWU5NmYsIDB4Njg1ODZiZTUsIDB4NDBjYTMzZTUsIDB4Njg3ZjNiN2EsIDB4ODIzMzNlOWQsIDB4YmM3ZjI1MmUsCisJMHgxMzc5ZTA2YywgMHhhZTNjZWJjYSwgMHhjNmNjYzEzNSwgMHgyNTJlMTEwNCwgMHhmOTI4ZmZkYywgMHhkM2E0MWFlMywKKwkweDk1ZmQzMDk0LCAweGE0ODdmNzg5LCAweDA2Y2MxOTdjLCAweGQ3NWRiZDIzLCAweDAxZWEwOTY1LCAweGJmYTI4NTNmLAorCTB4OGFmZTkwNmIsIDB4ZGM4OWY2YzIsIDB4MTg0Y2I0NzcsIDB4OThmOTY3NDAsIDB4NGNmNjBlMTcsIDB4YjQ5NWQyMDEsCisJMHg4ZTk1OGE0ZiwgMHhmZGU3M2MxNiwgMHhiNmY3NGJmYywgMHhlODIzN2NlMCwgMHhjMzg0MmRlYSwgMHg4YWU4MDU1OSwKKwkweGY0MDM2YWZjLCAweDE0N2JmNmFkLCAweDRiZmM0OWRkLCAweDM1OWNiYTdiLCAweDZlNjc3ZWQxLCAweGMxYjNkNzAyLAorCTB4Y2Y0OWRiZWEsIDB4YmEyNGI4ODIsIDB4YTcwZTczN2IsIDB4MjFlNjJhYmIsIDB4NWE2NzJiYmEsIDB4NmIzNGE5N2EsCisJMHgwOTc0ZDFjYiwgMHg3NGI0ZWEyMywgMHg4YmJhMjNlNywgMHg3NDc4ZDdhNiwgMHg0ZWU5MTgzNywgMHgyYmQ0ZGJlYSwKKwkweDQ4ZTdkZGQzLCAweDhmYzVkZjc3LCAweDNlZWU5MDM5LCAweGE3YzY3MmNmLCAweDkzN2E2OGJiLCAweGM1OWY2Y2YyLAorCTB4NzU3Njg5NTEsIDB4ZmE0MjhkNjMsIDB4YTE5ZGY4YTEsIDB4NTExZTU4MmQsIDB4ZjY3NjRmOWYsIDB4ZDkzNzY0YmUsCisJMHhmYzRkOGRkZCwgMHg0NzhmNDk3YiwgMHgwNTMzNzk4ZiwgMHg3Y2Y3YzU2YiwgMHgxYjk2MjU2ZiwgMHhlODc3YzFkNywKKwkweGNmMThmNGJhLCAweDBmN2ExOWFiLCAweGExYjg1ZWZmLCAweGJmYmMwZGU5LCAweGRiY2ZkMWEwLCAweDMzN2E3Y2JmLAorCTB4NmMwYTg3OWQsIDB4ZGJjYmVkMTYsIDB4ZDhkY2IxMmEsIDB4OGE3ZmRiY2EsIDB4MzFhYmFlNzEsIDB4ODJkMDJkYmYsCisJMHg5NmRhYWZlZiwgMHg2ZmRiZTZlZiwgMHgxMTRmZDc2ZSwgMHgzY2E3ZGRlYiwgMHg2YmI1MDZmNywgMHgzZjZlZWRlMywKKwkweGU0NjA0ZTZjLCAweGZhZjZlMDI3LCAweDI5Y2ViMTY0LCAweGQzM2FmOGJiLCAweDg2N2ViZTNlLCAweDQ1NjNlODBiLAorCTB4YjllYzlmOWYsIDB4NjU3NTc0NGYsIDB4ZWNlMmVmMjQsIDB4YjY5NWNiYjMsIDB4NDc0ZTdjMWMsIDB4YmM0N2E2MzksCisJMHg0M2Y1NWJiYiwgMHgzNzc0MWM3OCwgMHgzNjc1NzEwYywgMHhmOGM4ZDNmNywgMHg1NDI5ZTYyMSwgMHg1NzE3ZDg0NywKKwkweDQ0M2I3MzY3LCAweDYxNGY0YmQ2LCAweGZkOGQ3ZTc0LCAweDcyZmU0ZWNjLCAweDNlMGNkZjE5LCAweDA3ZDQxNGM0LAorCTB4OTc2MTQ2YjgsIDB4NGU3NzhjYzQsIDB4YmIyMjY4MmYsIDB4MTk2MGZhNjIsIDB4NGJhOTBjZTcsIDB4NGJjMmRjNjEsCisJMHhlNThiNGY5ZiwgMHhlNmNiMmE0NywgMHg5MTI5ZjNmNiwgMHhkN2RmMjE3NywgMHg0ODc1ZjIwNCwgMHg0ODkwZmIxNywKKwkweDkwZjBmY2U4LCAweGRiOWVkMDc3LCAweGU3MzRjYzk3LCAweGYzZTVmNmRjLCAweGJjZWNkNGYyLCAweDAxY2Q2ZTdmLAorCTB4NTQ5YWVhZjgsIDB4ZTU4YmY3YmMsIDB4ZjJiNzk0MjksIDB4NGMxNjFlODMsIDB4ZmYzODFjNGEsIDB4MWEwYjJhZTksCisJMHhjZjhhMGYyOSwgMHg1MThiNjU3ZiwgMHhlNWMyNTdkYywgMHgzZjgxM2NkYSwgMHhkMTE4NjkzNiwgMHhhNzgxNWNlZiwKKwkweDE3YTE2Y2VhLCAweGNhMzE1OThiLCAweDZmMDI3OWE5LCAweDE5MzczNDNmLCAweDMzNmViZWI4LCAweDc5OGZjOTQ0LAorCTB4MWUzZjI4ZDksIDB4NmJjZjZiOGUsIDB4OTdjOTQ3YmYsIDB4NGFlZTMxMWEsIDB4NjJhZmM3NjEsIDB4ZmQzZmU0N2QsCisJMHhhN2YxZDg0NCwgMHhmYzc2ZTYxZSwgMHhmZTQxZDY2YSwgMHg3MTlmZGVkMywgMHg5NjFlYmUzYiwgMHhlZDEyZjQ4NywKKwkweGFiZGRhZDA3LCAweDY4NzdkNzJkLCAweGRlYTAwZGNiLCAweGFlYzZmZmIxLCAweDg2MzNiOTI4LCAweDFmN2JhNWZiLAorCTB4M2Y0MzJmYWUsIDB4NzdjZWNkNjQsIDB4MjM1ZGZmYzgsIDB4MmI0MDRjZTUsIDB4ZTc0MGMwNjcsIDB4NTFhMWU2NzIsCisJMHhkNmZhYmZlNCwgMHhkODE5ZTNmMiwgMHhmMjY5OTVkNSwgMHg3NmM5ZWY0YiwgMHg1ZTc3Zjg0NiwgMHgwZDJlNzllNCwKKwkweDdhMTFmYjhjLCAweGMxNmYyM2VkLCAweGQyOGIyYzdkLCAweGE1NzJkMTRmLCAweGU5MTVjODUwLCAweDViZjI5MGZmLAorCTB4YzY0MjliY2EsIDB4NzdlYzE0ZjUsIDB4OWI2MGYxZGYsIDB4ZTFlZjNiMjgsIDB4YzRhZmExNmMsIDB4NGRmYTRkZmUsCisJMHg4ODU0N2RhNCwgMHhkN2QyMTFmNiwgMHhiYTIyMjZhOCwgMHhiZjcyN2ViMCwgMHhlODQ3ZDI2ZCwgMHg2NjI1MDVhNSwKKwkweDE5OTE3YmM0LCAweGE2ZTExYmY4LCAweGQ5ZjU4ZGI3LCAweDY4ZjFmNDM0LCAweDgzZjdlNWY2LCAweGY0NTFlZmRhLAorCTB4MGI2M2Y3MjMsIDB4ODRkY2ZkMDUsIDB4ZmYxODE4OTEsIDB4YjgxZjcyMGYsIDB4NWNjZmQzOGEsIDB4ZjQ4NDNkZTYsCisJMHg5Y2Q1ZmJmMywgMHhmMGJlZTQ3ZSwgMHgzZDAzZWY5YiwgMHhhMDdkYzhmYSwgMHhkZDdlNGZkYywgMHhkZDNmNjBmZCwKKwkweDg2M2VjMDU4LCAweGU5NWNiMWU3LCAweGZkZjFlMDE3LCAweDQ1ZDM4NTQ2LCAweDNkZGY5Y2ZkLCAweGYyYzJjNTU2LAorCTB4NzMzMzY4ZTIsIDB4Yjk3MDg2YWIsIDB4OGNjOWE2NjUsIDB4MDMxNjk3N2UsIDB4OTljZDJmZGYsIDB4ZDJkOTdlZjUsCisJMHhiNDEzZjkwOCwgMHhiODQwMWY5NywgMHhmOTI3NmViMSwgMHhkYWFkZWI3NywgMHgzZDJiMzY3MSwgMHhmNzExZmQ3NywKKwkweGM5NWE4ZjU1LCAweDA4ZTE3NGFmLCAweGMyZTU5MzIzLCAweDBmOTQxMWFlLCAweGM3ODE5OWZlLCAweDZlN2NlNTViLAorCTB4YjVmN2JjM2YsIDB4Yjk1YmQ0MTAsIDB4Y2M2Mjk2ZWUsIDB4MDI1NWE4MmYsIDB4YjdjMWQ2MmYsIDB4NzdiZWFjMGYsCisJMHg3NTZiYmY5MSwgMHg2NzJmNzE0MSwgMHhlNDI3YzUwZiwgMHhiYWZkZjFiOCwgMHhjNmM3OTI3ZSwgMHhmNzNmNWMwMywKKwkweGRmOTQwOTI5LCAweDQ3ODdlZjBiLCAweDM4ZmVlOWM2LCAweGRjZWZjYjg4LCAweGI4MDdkZjRjLCAweDViNDdhOTFlLAorCTB4ZjgyN2YzZmEsIDB4MWIzMGI0MTMsIDB4YTdjZTEyOTQsIDB4NzA0ZGU3MDgsIDB4OTg1ZmNiN2YsIDB4MTM3OThhZTcsCisJMHgwNGUyMjMxYiwgMHhiZTY2M2VkMCwgMHhjZjIxNzlkYiwgMHgwMTcyNjE0NywgMHhiYTY1NjdjYywgMHg3ZmQ3MTdhNywKKwkweDRmODVjNDRhLCAweGE5ZTIzODg5LCAweGZjNTcxZTQ0LCAweGZlN2Q3ZjdiLCAweDdhZTIwZGI0LCAweDNiODg5NGU4LAorCTB4YzZkMTRhOWUsIDB4NDRiZDY0OWIsIDB4NmNkOTNjZjEsIDB4NjAzNDZlZjYsIDB4Mzc3OTllYmMsIDB4M2Q3MGZlODIsCisJMHg3Y2EyNmE2NCwgMHg1ZjFjNDU5NSwgMHg2YjI1MmZiZCwgMHgxYWM4MTFlZSwgMHgxMDZhM2U1NCwgMHhkMzk5ZmJiNCwKKwkweGUzMDQxZmFiLCAweDllZDM2ZjJjLCAweGY3MTVlYTgzLCAweGJhMGFmNmRiLCAweGE3ZjBiNWU5LCAweDUwNmIzNzFjLAorCTB4ZDc2YzI4ZjUsIDB4YjNkZjgwYmIsIDB4Mjg5ZTVmZGEsIDB4YmZlYTVlY2IsIDB4YzkxMGJhZjcsIDB4OGZmMmZlYTMsCisJMHgzYTljZTI0MiwgMHhmOGM4OTNmNywgMHg2MWY4YmM0MCwgMHhmYTMwYmM3NCwgMHhiYzc0Njk5YywgMHgzN2U0YjE3ZiwKKwkweDI0NWZlZjExLCAweDZlZTJkNGU0LCAweGQ1Yjg2ZjFlLCAweDgyMGYzNmNjLCAweDY3NzViN2VmLCAweDI2YjhmYzUwLAorCTB4MTM1YzNmZDEsIDB4YmY1YmY3ZWYsIDB4YTQ4NzllNTEsIDB4OWVkY2RlY2YsIDB4Y2ZmOGY4ZmUsIDB4ZjVlM2UyMjIsCisJMHgyZjVhM2UyMiwgMHg1ZGE5ZDdkNywgMHhjZjAxNjRkZiwgMHgzZTNlMzFlZiwgMHg2MDczOTA3OSwgMHg5ZjNhM2M3YywKKwkweDMzYjQ0NWUyLCAweGFjM2M2MTBjLCAweDU1Yjg3MDcxLCAweGQxMmFlYmU5LCAweDM5NjE3YzRmLCAweDM1ZjczY2EzLAorCTB4NDE2YjJkNmYsIDB4MmQ5YWYyM2YsIDB4NjE1NTk2ZTIsIDB4MzgwYmQ3NzcsIDB4ZDM5NzViYzcsIDB4OGQyZTYzYWIsCisJMHhiOTgxM2ViZiwgMHhlNTkzZDYyMiwgMHhjOTk0ZDE0YiwgMHgzM2M4OGY5MiwgMHhhZDkzNTQxZCwgMHgzNGRiOWY2OSwKKwkweGYwN2Y1MzQ0LCAweGVmOWE1MWJhLCAweDRkMjJmZWY5LCAweDFhZjVhMGI5LCAweDZkNjFmZDRkLCAweDg4ZjI5YTE1LAorCTB4ZWE2YmQ3OWQsIDB4NDkyMWIyMTcsIDB4YTIzYjZmZTQsIDB4YmIxMjVmNDcsIDB4ZjM0NzMwMmEsIDB4ODVkZWY0N2QsCisJMHhiMjlmZjY5YSwgMHhhMDkzMWRhNiwgMHg3YjQ1YTc1ZSwgMHg3YmYzMzMyZiwgMHg4NTk0YzY3YSwgMHg3NmM3YTlmMywKKwkweGMzZjRkNTJjLCAweDI5NTA0YTgyLCAweGY2MzNkZjBiLCAweDc5YTdiODk5LCAweDg3OGYwZjc5LCAweDVhYjVkZDVjLAorCTB4YmVhZDRlMzMsIDB4MWQxOGYwOGUsIDB4N2Q2MjJkZWYsIDB4MDg2ZTM3ZTQsIDB4MWIyMGVlMjgsIDB4ZDU1ZGZmMTgsCisJMHhhZWVkNGVkNSwgMHg3OGM4Zjc2NCwgMHgyMjQxYzZjOCwgMHhiMmNkOTdkZSwgMHhkMzQ3NWQzOSwgMHhjM2VjOGQ4NSwKKwkweGU0ZjRiYjBiLCAweGMzNjQyYzdmLCAweGYwNDQ5YTFmLCAweDZiODBiMDMyLCAweDMwMmVmZTIwLCAweGYwYmIxN2VlLAorCTB4Nzk4ZGRkOGMsIDB4YjViZmI3NDUsIDB4Y2E2M2U2OGMsIDB4ZGUwNWQyZDQsIDB4NWViOTE4MWYsIDB4NWQyZDQ4ZWIsCisJMHgzYTVhZGRkOCwgMHhhNWEwOWE0OCwgMHgyNzc4Njg4MywgMHhjMTc0YjQ3YiwgMHhjYmJmZjA0MiwgMHg4Njc1M2JjMCwKKwkweGI3ZmU2ZTk2LCAweGYwODFkY2UwLCAweDViZTE4NmI1LCAweDYyZDNkMDdjLCAweGJjZjFiODIzLCAweDk5OWY2OTM1LAorCTB4MWQxNDNkODQsIDB4NGU3NjkwZDcsIDB4YmJiMDkwNzAsIDB4MmUzMjNmNDUsIDB4OTNmMTU5YjEsIDB4NzcxZmQ1NWQsCisJMHgwYmNjMTA5YywgMHhkNTNkYTNlNiwgMHhjOTVmYjhjNCwgMHg2ZmU1MTA3YiwgMHhiZDI0YmYwYywgMHg5NDk3ZTc4ZiwKKwkweGMwOWI5ZDcwLCAweGYzMmQ2N2Y1LCAweDY2M2VmYzkyLCAweDkzYTRmZWUxLCAweDlmYzhhYmQ1LCAweDkxMzU5MmI0LAorCTB4OWNkOWZkZGQsIDB4ZThlZmMyZTksIDB4Y2E1NzdhYTcsIDB4OWY5MDE4NTMsIDB4OGIyOWY2MDAsIDB4MDZhZWQ3ZjAsCisJMHgxZmVmMWE4YiwgMHhkMmE3ODY4YSwgMHg3OGVkMDRhZCwgMHg0Yjc1OTg2ZSwgMHhmY2EzZTA3ZCwgMHhlZGRlMGYxNSwKKwkweDY4ZmY4OWE5LCAweDUxZTY1ZmVkLCAweGI0OTdlNTIyLCAweDEyNzhlNTg3LCAweGM5YWU1MjllLCAweDQ5YWM0YzcxLAorCTB4MTE3Yzg5OWYsIDB4YzhkOGU3MjUsIDB4ZDY5M2Y4ZTgsIDB4NDFmZDIzOWYsIDB4ZTMyMzhlMzIsIDB4OWJmZWQxNGMsCisJMHg1NWI4YmIwOCwgMHhjMWQyNzE4ZiwgMHhjZTc4MmRmOSwgMHgyMWUxZDhiNywgMHhlYjI5NjEzZiwgMHg0ZmRmMDViOSwKKwkweGE4YjQ3NzMwLCAweGI4YmZlMTJlLCAweDJmZmJmNThhLCAweDJiYWJlYWUyLCAweGYyNmZiNWM0LCAweGYyNDdhMTJiLAorCTB4NjViM2M2MDcsIDB4ZmY5NjFjN2MsIDB4ZjFhMTFmZjEsIDB4OGI5NWM1MjQsIDB4ZjJmMzk4ZjMsIDB4ZDNkMjI3MDgsCisJMHhmYmE2YmY0MCwgMHg4ZmQwMmJmOCwgMHg4YTk3ZDc1ZSwgMHgzMTMwYWFmNSwgMHhmZGRlMjIzZCwgMHhmNWEyMTJhNiwKKwkweDM2Nzk5MGZjLCAweDZmZGI5ZTQ1LCAweDZlZDMxZDYwLCAweGU4MzI3ZjIxLCAweGE3MjdiYzQ5LCAweDU4YmJmYjkzLAorCTB4YWMzZGI0NTcsIDB4MDc1OWJmOTIsIDB4YWZiYTQxMmIsIDB4ZGU3MTExNjUsIDB4MmE3N2YwZmMsIDB4NjU5NjA3ZWIsCisJMHhlYzk1ZDIxZSwgMHg4MmYxYTc4OSwgMHhlMGEzY2E3MiwgMHhjODRjNTNmOSwgMHg4Y2ZmYjk0MSwgMHhmOTkzY2ZiNywKKwkweDRmN2VmMjE4LCAweDk0NTQ3Nzk5LCAweDFjNzVmODIzLCAweDAzZmQ4NzFiLCAweDk0ZTU5NWJmLCAweGY4MDE3ZmEyLAorCTB4YzdlNDg5NTMsIDB4ZmEyNTNjZmUsIDB4YTMxZjgwM2UsIDB4MzFmMzJmZDYsIDB4ZjIxMmY2ZjQsIDB4NWM4YjJkMWIsCisJMHg4NzgwZDdlZiwgMHg5YzdlNWJiNCwgMHhjOGU5ZThjMywgMHgzZWIzZDE3MSwgMHgzZDZmYzRlMSwgMHg0N2E0YjlmOCwKKwkweDY4ZGEzZjkzLCAweGZhMGQwZDg0LCAweDc5MTQ1ZTEzLCAweGJiNWExZDgxLCAweDlkMWM5NmZkLCAweGY3ZGYxYjgwLAorCTB4ZjE1ZTA5NWMsIDB4ZjhmMjIxZjEsIDB4YWViZTNlMDQsIDB4ZjhmMzI2MWQsIDB4MGM5NzFjMjQsIDB4MGQwYWZiODQsCisJMHg4ZmY3ZmI1YywgMHgxMTVmNzBmZCwgMHgyZTEyZWUwYiwgMHg3ZTdiNGFlNywgMHhkYmQyZjg4MSwgMHhiYzIzYTU4ZiwKKwkweDU3N2FhNjE3LCAweGUzZGNmZDYzLCAweDVkMTQ0ZmExLCAweGZhNTU1ZTc4LCAweDdiODc5NGIzLCAweGU3NGY0YmExLAorCTB4ZTNhZTFhZmYsIDB4MjVlMWIwNzIsIDB4ZjM4Njg5M2QsIDB4YjM4YTI2ZGQsIDB4NDFiZDc0ZDYsIDB4NjZkOWUxNzYsCisJMHhmYzA2YjQxMCwgMHg3MjE4MGNiZCwgMHgwOGZjNjVkOCwgMHhiNzhlZjA1MSwgMHhkOWViOTI0ZiwgMHhlNWY2MjM5MCwKKwkweGVmMzJmZDYyLCAweDM5YjlkNjA3LCAweDQ3NWU2NjI3LCAweGRmYjQxYzNmLCAweGY0YWExYzA1LCAweDFjZjA5MjYzLAorCTB4OTJiZTdmNTksIDB4NzkxNzk3ZGEsIDB4M2FmNDVmNWYsIDB4ZmU3ODcyMmEsIDB4ZjdiMzI5ZGIsIDB4YzNlZmVjM2UsCisJMHhkODFkOWM5ZSwgMHhmYmJlOTU1ZiwgMHg2N2MyMzY3MCwgMHhiYmU3NDJhZCwgMHg3OWY4OThhNiwgMHg1ZTcxMmNkYywKKwkweGM5YTg0MjZmLCAweDMzOTllNzhkLCAweDY2N2RmODczLCAweGY3YTQ3ZTIzLCAweGZkZjkxYzYyLCAweGUwYTY3N2I1LAorCTB4ZmZkOTM0MzksIDB4ZTc0NzQ1MDgsIDB4ZWU3YjE5NDcsIDB4YzEyYzdmODMsIDB4MzcyMmU2ZjgsIDB4ZDhiZjZmZGUsCisJMHhiYTJmZWUyNCwgMHgwMDJjMWFjYiwgMHg5MWJhZjIzOSwgMHgxODY1NDdkZiwgMHg2NmU3NDRkMiwgMHhlNGY1OTJmYSwKKwkweGIzZDM0Y2Q3LCAweDcyNzc0OGE5LCAweGFkYmNmMmRlLCAweDAxZjc4ZjdjLCAweDdjYjE1ZTYwLCAweGFmYTVhNTNmLAorCTB4N2JmYTBkNzgsIDB4NzVjODNkMDQsIDB4MmJlY2E5NGYsIDB4ZTE4NWIyNmUsIDB4YTMzY2YzMmYsIDB4ZjgyNTUzZTEsCisJMHgxYjQzZWU0MywgMHhkMDViNWVmMCwgMHhiY2NkZTdiZiwgMHg2ZGFmN2QxYywgMHg1ODc0ZmVmZiwgMHhmNjM2M2RmZiwKKwkweDgzN2ViOGM4LCAweDFlMzQ5M2M1LCAweDZiZGM1MWY5LCAweDI3ODcxN2ZiLCAweGE0NzdkZjg5LCAweGJjZjZhN2JkLAorCTB4YmY5N2I3YzgsIDB4ZGVlZjEyNTMsIDB4NTFjY2ZmOWIsIDB4ODI3Yjk3YmUsIDB4Y2I4NWU1ZTIsIDB4NzA3OGZmYmMsCisJMHg5OTU2NDg2OSwgMHg3MzlkMzU3YSwgMHhkZWFlNWVmNywgMHg4ZmFkZmYyYiwgMHgyOGJlZGZiOSwgMHhkM2RmZjdiZSwKKwkweGJjZWM2YWY5LCAweGNlYjE1ZWM1LCAweDg4NjE3ZTcwLCAweGU3ZjcyOWNlLCAweDdlNTRiZTJkLCAweDFhNDc3YmQ5LAorCTB4MDhkMjNlZjAsIDB4ZjZiY2M4MzgsIDB4YjQ4ZmJjMDYsIDB4ZDBiZjQ2MzgsIDB4ZTU3NmNiOWYsIDB4YzRhYTg3N2IsCisJMHg4ZjMwMWFiYywgMHgzZGYyMzUzMCwgMHgzOGYwYjdhNywgMHgzMDJmMjI2OSwgMHhmYjdjODg5NCwgMHg5ZDNkMmVjYiwKKwkweDExZTVmZmUzLCAweDMxZGQ4Y2RkLCAweGNiOWI5ZGU2LCAweGE5Y2EzMmUxLCAweDBlOGQxZjEyLCAweGUzYjVmYmYyLAorCTB4NzllNzkzZDUsIDB4ZThkOGI5ZTQsIDB4ODQ1Njc1ZjksIDB4NjNmOWM1NmUsIDB4ZjFhYzcyOWUsIDB4M2Y3Y2I5MWMsCisJMHg5OWRkZTcyYiwgMHhmMGQxZjFjMiwgMHg5YmRmODk5YSwgMHhmMjdjZjJhYSwgMHg0YWQwOTRjZSwgMHgxNjg3MTNlMiwKKwkweDFlMDRjM2NmLCAweGU1MGZhZjNiLCAweDk5YjJiOWQxLCAweDhmMTBlZmRjLCAweGZhYTcyNjFlLCAweGM4YmU1MWNhLAorCTB4ZDRjYWVlN2IsIDB4YzExMWM1MjYsIDB4ODdhMjU3OGYsIDB4MWFmNWRjMzAsIDB4YmI4NDBlYmMsIDB4N2VjYmJlOTEsCisJMHg3YzE1MWY0ZiwgMHhkYzM2M2NjYiwgMHhmYTExMmRjZiwgMHg1YTllYzk2ZSwgMHg3ZWU1ODdiMiwgMHgzZDRlZjRlOSwKKwkweDY2OWM2ZmU1LCAweGJhNzJhZTNjLCAweGQwZmRhMTRkLCAweGViNjMxZjUyLCAweDdjYWQyZTQwLCAweGFhMzM3OGEyLAorCTB4YjA5OTI1YWUsIDB4MWVmZTE0OTYsIDB4ZTk2NjFmN2YsIDB4YmFmOGE4YzYsIDB4YmQ0OTVmZDgsIDB4YmU1ZmM3MmEsCisJMHhkNzE3NmI0ZCwgMHg0NjdmNmRiMCwgMHg1MWY0ZTlmYiwgMHhiMDU2M2YyZSwgMHgyYjNmZDIyNiwgMHg1N2Y2ZDAxZiwKKwkweGE3ZDY2N2IzLCAweGJjZThjZjM4LCAweDhmYzIxMTgwLCAweGVjNTcyZDM3LCAweDE5NThjYTU3LCAweDRmMzU4ZmVhLAorCTB4OWZjNDZlN2MsIDB4MTdjNzg5NjAsIDB4NDM0ZmZiZjgsIDB4N2RkZmYxODcsIDB4OGVmZTI3YzIsIDB4Yzk2ZjNlMDgsCisJMHgxNzIwZmNmNSwgMHhmMmVmM2VmZCwgMHhmNWNlYWVmOSwgMHg3ZjQ1YzljZCwgMHg3ZTdjYmJjOSwgMHg3MDJlZWExNywKKwkweDhkMmJiMzNkLCAweGZkOGI1YmY0LCAweGZhZmY5MjJlLCAweGRmZmU1Y2MxLCAweDAwMzVmNzhiLCAweDcxMjY0YzljLAorCTB4NDlhZWJhNmYsIDB4NGRmNjQ4OWYsIDB4NDNlY2U4ODAsIDB4N2U3MzFkZTcsIDB4MjY3NzY1NDAsIDB4ZDNkYTQzZjIsCisJMHhiZjYwNjdkMywgMHgxZWFkYTdjZSwgMHg3MmQ2ZGY1YywgMHgyZmZhMjE0ZiwgMHhmM2YzNTZiNiwgMHg4ZjEzNjZhMSwKKwkweDM5N2UwN2RmLCAweDUzODYwMGYxLCAweGFmNmM3Njg2LCAweGEzOWQxNzQwLCAweGZkMTA3ZjdiLCAweDNmYmFhZDQyLAorCTB4OThiY2M2MWYsIDB4NWYzY2M5ZDYsIDB4ZGExNzVkMzIsIDB4M2M2MjI4M2YsIDB4ODk5MDM1YTcsIDB4NjhlNzdkZjEsCisJMHg5YTRlNmY3ZSwgMHhjYjkwYmNiZSwgMHgzNjI3NmU3ZiwgMHhlODVjNWMwOCwgMHg2MjdmMjAyYSwgMHgxN2ZhNDFhZiwKKwkweDJlNzQyYzNiLCAweDJlZmY4ZWFiLCAweGYxYzYyOGM2LCAweDcwZWFmMzJmLCAweGYxNzY5MTBlLCAweGY5YTY2NmQ5LAorCTB4MWQ1MTg2OWQsIDB4NDg5MGQwNGEsIDB4M2M1MGE4ZjcsIDB4MzA0MzZlYTgsIDB4NjdkNDE2ZmQsIDB4NGYxNGE5NGYsCisJMHg3YjRiZjM5MywgMHhlMzAyYWIzZCwgMHhkZDhmNTI2NiwgMHhiZmI4MzhhMiwgMHgwYmZkZDg0ZCwgMHg3MWUzZmM5OCwKKwkweDllODJmOWI3LCAweGZmN2IwODE2LCAweGY3ODcyYjE2LCAweGMzY2VlNjUyLCAweDJjY2QwYjc2LCAweDc2YWMwNzUxLAorCTB4Mjk0NzY1NGIsIDB4OTBkNmIzYWQsIDB4OGM4NTc2OGMsIDB4NDdiN2M1MWYsIDB4MWFjOWZiNjIsIDB4ZTdlNzYxN2UsCisJMHhlMWJlOTU5ZSwgMHhmNDE5YzlkOCwgMHgzZjg2NWQ0MSwgMHg2OTNjODVkYiwgMHhmZmNmY2UxOCwgMHg4M2NjYTFiMSwKKwkweGQ3ODZjYWYxLCAweDMwZWZkMDQ2LCAweDNjNzgxMjk5LCAweDE5OTZlNDFjLCAweDg0M2ExMWVmLCAweGJkZDYxZWZhLAorCTB4Yzg4YjE1ZWEsIDB4NzM4ODBhNWIsIDB4ZDhkZWZjY2QsIDB4NDUzOTM5YzYsIDB4NzhmMTFlNzQsIDB4NzFmZmRkMWYsCisJMHgyM2NhMTBkZSwgMHg4NDc5MDZmZSwgMHg5MmJlYTYzNywgMHhlMDFmYmJmYiwgMHhkOTBkZWJiZCwgMHhmOTQxZDc2MCwKKwkweDc4OWZlZTc0LCAweDI1Njg0ODc5LCAweDkyOTkxYmRlLCAweDQ3OTc4OTc3LCAweDcyYzEzZTg1LCAweDZjYzI1ZTRlLAorCTB4NTY4NTE3MmEsIDB4M2UzY2ExZWEsIDB4NzE5NzkzMmYsIDB4MzYwNDBhMDMsIDB4NmNmMDZmMzUsIDB4YzkyZGRhM2YsCisJMHg4NzcwMmVjMiwgMHhjMzc3YmNlOCwgMHg5MTc0MjNjYiwgMHgxZTc3NThmZSwgMHg4NDY3Njc5NywgMHgzZTRjZjkzZiwKKwkweGMyMGU2ZGJiLCAweGZhZWM2NDdiLCAweGRlZDI3OTY5LCAweGM5ZjVhMzZlLCAweDJjZjZjYWY1LCAweGZmYmI3NjMzLAorCTB4OTU3ZTcyMTAsIDB4YzUzZGE3MzgsIDB4M2MyZDVhY2EsIDB4MDQ0ZmU3ZmUsIDB4MWVlYzFjM2MsIDB4N2ZjYmYxNDEsCisJMHhmZGUxNGRjZCwgMHg0Zjc0NDIzYiwgMHhmYTI3ZWM4ZiwgMHhiOGU0MWM3NywgMHg3YmZlMTVhYiwgMHhmMmEzZTc1OSwKKwkweGNiOTc3ZWJjLCAweGIzOGMyYmU1LCAweGVhMTljNjkxLCAweGU3OWJlN2UxLCAweGZlMjIxNGU0LCAweGMwYWE2ZjAwLAorCTB4YzlmN2NhOWIsIDB4ZDA3ZTdjZWQsIDB4MTNmZWZlMmYsIDB4ZjQ2Mjg3ZTgsIDB4MGFmYzFmZmIsIDB4ZTc4N2U3ZWEsCisJMHgyNzI3NGQxZCwgMHg1YWFiMzhjNSwgMHgyZmI2ZGM3OCwgMHg2OWU4ODBiOSwgMHhmN2RjNTU4YSwgMHhjNzVkYTI1MiwKKwkweDlmNmUzY2Y4LCAweGM1OTJmM2JhLCAweGFmMDkxZDc5LCAweDY5YzY4NTBjLCAweDA5Y2M3MDExLCAweGY2MzM5ZjBkLAorCTB4YWZmYmFmOWIsIDB4OGVlYjRiZmYsIDB4ZWYwNzk3YzAsIDB4YzVkODM5NmQsIDB4OWYxZTM3ZWYsIDB4ZjQ4NWYxYzcsCisJMHhlMDc2NDI5YywgMHg2NzdmNGQ3NiwgMHg5ZmI1NDdkNiwgMHhhZTVmMjhjMCwgMHhkYTgwYTUyMSwgMHg2ZmVlMmJkZiwKKwkweDYxZDlmNzk1LCAweGRjNzFmY2JiLCAweDU3YmI0NWJlLCAweGZjYzFhN2RlLCAweDFjNjQ1OTkzLCAweDhjZGVmZmIyLAorCTB4NzBiZjcxMGUsIDB4Mjg2ZjNhZmYsIDB4ODg3NGViMTEsIDB4ZWYyMjNhNzUsIDB4Y2ZlN2VjMzMsIDB4NzM3OTdkNjMsCisJMHhiOGU5MDNlZCwgMHhmZGZkZmUxZiwgMHhmZDEyMjk4ZCwgMHg1NjNjZjg2OSwgMHhmMWQ3Yzg3ZiwgMHgxZTU1NzJmMCwKKwkweDFiZGYyNzk3LCAweGEzM2NlNDVlLCAweGU3MGZkOWUwLCAweDc4NDlmOWE4LCAweGJiNTM3ZjIyLCAweDk0YmE1YTMxLAorCTB4ZjQxMWNjZjMsIDB4ZjNiZjgwMzksIDB4ZTI3OGU1YmYsIDB4YmJmYWQ5N2UsIDB4NzMzOGJlNzksIDB4YmViYWU5NjksCisJMHhmOTg3NWYzMywgMHgwN2RkYjIwOSwgMHgzNGEwYzA3OCwgMHgyMWJjMjdlYywgMHg3MzI3ZWM0ZiwgMHhiYzljNGU1OCwKKwkweDMzOWU2ZjQ3LCAweGRlOTE3ZmE2LCAweDdiMjdlZjQ3LCAweGQ5ZWZlNTkzLCAweGJkMWFmZDY5LCAweDM5N2JmZTRlLAorCTB4N2VmYzczZmUsIDB4ZmNhMzZiODMsIDB4N2E4ZjE4M2MsIDB4MTc2ZTE2Y2UsIDB4ZjJkYTJmZDYsIDB4MDM3ZTAyNjMsCisJMHg3OTdkNTRmZCwgMHg1MzEyYmYzOCwgMHgzYmY4ZjNjNSwgMHg0YWYzYWI1YiwgMHg3NzYwYWI2NywgMHhkYzU1MjQ5NCwKKwkweGE2ZTUwZjk5LCAweGZjOTNjNmM3LCAweGYxNTQxOTJlLCAweGYzYzgzZTc5LCAweGUwNGQ4ZjM1LCAweDdjNTc0N2RmLAorCTB4NzljYjA0M2UsIDB4OGE3OTc5MTMsIDB4Zjc5NDc5ZTcsIDB4OWVjY2I0NjAsIDB4MmJiNjE1OWEsIDB4ZDE3M2NjZWUsCisJMHgxZDRhZmFiOCwgMHg0MjY3NmJkZCwgMHg2M2Q2MDYyMywgMHhmOTQ0ZGQ3YSwgMHhmMWFlMTI4MCwgMHg1ZDI2MjU5ZSwKKwkweGJmZjNhYzUzLCAweDAzZDNmNGY3LCAweGMwNGNiZjhmLCAweDFmZDBiYTdmLCAweDIxMDVmYzI4LCAweGU4MmZlMzU1LAorCTB4Y2ZlN2U0NGQsIDB4OTJmZDVmN2IsIDB4OWJkY2Q3Y2UsIDB4MDc5ZjViZTcsIDB4NjdhZDFiZWQsIDB4ZjI4N2NkNmYsCisJMHgxNDA3ZWIwNiwgMHg2MDNjNTNlZiwgMHhjNjFmYTA4NywgMHg2MDhiNjBlNSwgMHhhZGQ5Y2FiZSwgMHhkODlmYjQ1ZSwKKwkweDI1NTliNzZhLCAweDE4ZmYwYWI4LCAweGYwMDdhOWRlLCAweGE3YjVlNTdiLCAweDBmODgzYzdlLCAweDRjNzljNWUzLAorCTB4ZjFhMDcyMTQsIDB4MTVmZGJmYjUsIDB4Njc4ZGM0ZTMsIDB4MWIzNDZlNmMsIDB4N2MzZjc2MjcsIDB4MTM1ZmRhMjcsCisJMHgxYmZlZGZiYiwgMHgzY2ZjYzNkNywgMHg0NGY3OWM5MCwgMHhmYmMyN2ZmNCwgMHg5YTI2NWQwOSwgMHhhYmVlYzRmZiwKKwkweDZiZmQ2MDU2LCAweDQwMmVlYmRmLCAweDQ0ZWViOTNhLCAweDQyYzUwNWIwLCAweDNlZmZhYmVmLCAweDg4MGU3MzQ4LAorCTB4N2NkOTdhN2QsIDB4MzlmMWI4ZDEsIDB4MDEzZjhmMDksIDB4MWUwODkzYTAsIDB4ZjhmMGU3M2YsIDB4Y2VkOWYyOGEsCisJMHgwZTZlOGYzYiwgMHg3YjU0OTM5MSwgMHg3OGVjMGFkZSwgMHg2MDVmM2I4YSwgMHg3YjhjNmUwOSwgMHhkMWZkNzNjOCwKKwkweGQ1ZTNkNTdlLCAweDdmNzgzZWIwLCAweDIwY2MxZjVkLCAweDcyOWU5ZWMyLCAweDI0ODIwY2QxLCAweGM5NjcyZTVjLAorCTB4MzlhNTcyOWEsIDB4Y2FiZjUzNGIsIDB4M2VmOWFmOTEsIDB4Y2QyYWYzM2QsIDB4NDJhZTk5ZjcsIDB4YzhkNjc5NGQsCisJMHgzN2ZhOWE4OSwgMHhlNTM1Y2JiYSwgMHg2YTY2MTNkOSwgMHhhYTdiNTdlYSwgMHg2MGMyZTUzNSwgMHhmMTdlYTY4NywKKwkweGY3ZWQyZTkxLCAweDc4OGY0YzYzLCAweDdlZWUzYTI4LCAweDI3YTU5ZjAzLCAweDJkOWVlNDNkLCAweDA2ZjRkNTNiLAorCTB4ODVmZTI3M2UsIDB4YWZkYTIzODMsIDB4OGVjNWNkN2MsIDB4ZjRiZGYwMzcsIDB4OWY5ZjQ3MmIsIDB4OWJlNjdlOTIsCisJMHgzMTgwYjZmNSwgMHg1MzM5M2ZiNiwgMHg4M2RmMDgyZCwgMHhmM2YxZDdhMCwgMHhmYjI1ZWY1MywgMHg5Mzc4ODBmZSwKKwkweGEwYTZhN2U3LCAweDUwOTAxOTVmLCAweDlmYjlkYjc1LCAweDVjMzJlZmUyLCAweDZlZmRjNDU4LCAweDk0MzExMWM3LAorCTB4N2YyNzZlNGYsIDB4ZDM0MzcxZTUsIDB4NzllNDdmYjMsIDB4ZjcyOGI5MDMsIDB4YWY5YmViYWUsIDB4OGI5NGY3NTksCisJMHhjYmJhY2QzZSwgMHgzYzI4YWFkOSwgMHg1NzI5YTFkZCwgMHhkNGQ2ZWUzOSwgMHg1ZWI5OWU5ZiwgMHg2YmE2N2RmMywKKwkweGI2OWUxNDRiLCAweGJhMzdjYTZiLCAweDUzYzI4ZTFmLCAweDllOWUxNDdiLCAweGY0OTc3Y2QyLCAweDVmZmMyZGRkLAorCTB4MGFkZmExYWYsIDB4M2Q0MjkzOWUsIDB4Yzk4Nzg4OTUsIDB4MWYwOGZhYTcsIDB4MmFkYTdhMTMsIDB4MWNkNzRmMTEsCisJMHg5NTdjMjBlZiwgMHgyODk1YmQwNCwgMHgzNDhlY2IyZSwgMHgyMGNmODFiZCwgMHhkZGIwY2JlYywgMHg3YTRjZTY4MSwKKwkweDkxNzY2YzFlLCAweGYzNzBlYmZmLCAweDY5MWU3YTQ4LCAweGZmZmJkMzc2LCAweGNmNDA5ZTY4LCAweGU4N2IzNTVmLAorCTB4MzNjZDlmZjksIDB4ZWNkM2Q5ZTgsIDB4NzM0NzY3YTUsIDB4YWU3ZmQ1MDcsIDB4Y2ZmYjhiYjksIDB4ZGRlZmZiNTIsCisJMHhjMWJmNDVjOCwgMHgwMWE4NWQ3OSwgMHhjMThlYzYyMywgMHg5ZTllNDk1YiwgMHhjNzlkMDg0ZiwgMHhlYjdmMDZmMiwKKwkweDM0MjBhOWVjLCAweDkwMWQ2N2YwLCAweDllMjA3ZjJmLCAweGZiNGYyZTQ1LCAweDFlMGU3ODYwLCAweDE5ZmRmOGNjLAorCTB4NDNhMzdmMjIsIDB4M2I0NDI5ZTcsIDB4MGZlM2Y0N2MsIDB4MzJlNmE3ZGUsIDB4MzdiZDY5YjYsIDB4MTgzYTdmMTMsCisJMHgxMzI4NjZjYiwgMHg5MGY3ZTliMiwgMHg5M2NmYmMxZSwgMHhhOGIzZDhjMywgMHhmN2JlZTg0YSwgMHhiOTYzNjcwNywKKwkweGU3OWVmYzU3LCAweDI0MWZjN2UwLCAweGM3NWJmYzNiLCAweGUyMDMzZGQ5LCAweGM3MDdhM2VjLCAweDdiM2ZiMzg4LAorCTB4N2Y0NzY1Y2EsIDB4NDZhZmQxY2YsIDB4NDcxZTExZDgsIDB4YzNjYmRmODUsIDB4M2JmODBkMGEsIDB4YTE2YWU1MWMsCisJMHhmMWVjZjUwMSwgMHg1NDIxZTczOCwgMHhlMGM5Nzk1MywgMHg3YmI3NWM1MiwgMHg1ZjkxZTUxZSwgMHhlMWRmYTA2ZiwKKwkweGZkZjBhMzliLCAweGVjOTdhY2FmLCAweGY3YTBmYWUyLCAweGE3ZWQxMzQ2LCAweDJiM2NlOThlLCAweDk1N2EzZjkwLAorCTB4Y2UxMGM3YmUsIDB4MTRmZTNkMzcsIDB4N2I1ZWE5ZTksIDB4YWZjMjFlNWYsIDB4YmNiZGYxZmEsIDB4NGM3YmVjZWMsCisJMHgwZDk0NDc3MSwgMHg4Zjk1M2UxYywgMHg2ZmRiMzkzZiwgMHgzM2UxNWVmYiwgMHgwZDExZDcxYiwgMHgxZDgzYjk5ZiwKKwkweGY0MTE1ZjdjLCAweDIwMWRhMmU0LCAweDNkYWFjN2NiLCAweDJjNTcxNGY1LCAweDc1YzMwY2Y3LCAweDM4OWFmNTFjLAorCTB4ODFlZDdhZmYsIDB4ZjIzN2U0NjEsIDB4ZjA4YmNlOTQsIDB4MzYwY2Y0ZmYsIDB4YTJlN2ZhZDAsIDB4ZTgzZjQ0ZGUsCisJMHhkNjIwN2Q0MiwgMHgxZjllMTVlZiwgMHhhMjNkZWRjYywgMHgyZTY3ZGMxMywgMHhlMGJlZDJiMCwgMHhhM2RmOGU5OCwKKwkweGVlZGY1ZDEwLCAweGNmYTNmYmUyLCAweDljODdkY2UyLCAweGRjNTdiZTI4LCAweDBiZWNmZjU0LCAweDVhZWY1ZmQwLAorCTB4ZWJkZDc1MGIsIDB4NThmNjQxMWQsIDB4MTc0MDEzNmYsIDB4NTRmN2JhNjgsIDB4ZGRmZTM5ZDMsIDB4YTEyMDE2ZTQsCisJMHhmODJkZWYzOCwgMHg2Y2ZlZjgyZiwgMHhmYzVmOWRmNywgMHhiMDdmZWEwNiwgMHgxZDI2ZWFkNiwgMHhmMDQ1MThlMiwKKwkweDJmMmEyODViLCAweGZkOTMzNTRlLCAweDZlNGU3OGI0LCAweDViYzVlYTA1LCAweDU2ZjBiYzQ0LCAweDYxNGU5YWJiLAorCTB4ZThkOTM1NDMsIDB4ZGI5NjdlODAsIDB4MDQwMzM3MGEsIDB4NmFiNGNhZDksIDB4NTM2NGZlMjMsIDB4OWIxZGNlNGQsCisJMHhlODdhYjlmMSwgMHg1OGYyMjM3NiwgMHg5YjdkOThkZCwgMHgwN2FkOGNkMSwgMHhmOTI1MmUxNiwgMHgxOWE3N2ExNywKKwkweDNhZGI3NWU2LCAweGU3ZWY4YmJkLCAweGRhZGFmOWU0LCAweDIyZjc5NDZmLCAweGM4OThmN2U5LCAweGQwMjAwMjRmLAorCTB4YTVjOTM1N2UsIDB4NDk0OWY2NjgsIDB4MTgxZjRlODIsIDB4NjMzMWUyMmMsIDB4ZGE0YmQ4ZDksIDB4ZTQ0ZWQ3NzgsCisJMHhkZjhiYjNhMywgMHgxZTI3MWUxOSwgMHhlYzJlZmRhMSwgMHg3YjhhZGZjNywgMHg0ZmVmYTM5ZSwgMHg1YzNhZTM5MSwKKwkweGNjNzVmZjdjLCAweGY2ODk5NDA4LCAweDA3YWU0MmU0LCAweDdjZmZjZGM2LCAweDdmYWMyOTQzLCAweDQ3NDNiNzVjLAorCTB4ZDViNzBkNzksIDB4Yjg3ODgwYmYsIDB4NjhmMDI1ZDAsIDB4NGZjODVkNjAsIDB4N2M5N2Y5MzcsIDB4NGM0MjFiZjAsCisJMHhmMGRjZTY5YSwgMHhiYmE1ZjQ5NSwgMHhhOTE5NTFjNywgMHhkZTQyNGIyZiwgMHgzOTdkNDhjYSwgMHgxMmFkYWZhMSwKKwkweDhmZDRhMmY1LCAweDIxMWFlNmMxLCAweDhlNDg5YjhmLCAweDQ3NWU2YzFlLCAweDdlY2RjM2U1LCAweDZlNjkxZTdhLAorCTB4OGRiOGYyMTUsIDB4NzlhYWZmYmUsIDB4MDFjNzkwYTcsIDB4ZDJmNzhmMjEsIDB4ZjllNmVlZmIsIDB4ZDlhZDdjZjQsCisJMHhhOTg1Y2Y0NywgMHg2ZTExZDdiZSwgMHhkNzNiOGUzMiwgMHhkY2JjYTNlYywgMHgxODliMGY0MywgMHg3NDJlZjFjNiwKKwkweDAzOGYyODliLCAweDQ3YjFlMjM4LCAweGM5NGYzMGQyLCAweGEzNDRlNzQ0LCAweGU1YTI5NWYzLCAweDc0M2QzZjdjLAorCTB4ZTViN2I4MGUsIDB4ZmVmN2U0NmQsIDB4MTdiNDIzM2MsIDB4YTdhN2M3MDcsIDB4NDc2NWNjYTMsIDB4ZTBmMWY0YjksCisJMHg4ZTg3MjRmMywgMHhiNDc2NWNiYSwgMHgyZTNlNGZhNywgMHhkZDk3MWVjYSwgMHgwZDNmZTUwMCwgMHg3MWZkMjVlZSwKKwkweDliYjJlN2Q0LCAweGUzYzlmY2EwLCAweGRmYmJmY2JkLCAweGY5NDBiNzY1LCAweGZjN2RjMWQzLCAweGQwNTE4MDdiLAorCTB4MmZlMGVjZmYsIDB4MzM5NThlNDgsIDB4NDdmMjIwZTUsIDB4MmE3ZjM5YTUsIDB4ZDdkMDBiYTgsIDB4MmY5MTA3ZTUsCisJMHg5OTJlNjdhNiwgMHg2MGIxN2M4YSwgMHg3MmU4OGJiMCwgMHg0MWZkNmJhNiwgMHhkOTFhY2YyYywgMHgxNTE1ZTJhZSwKKwkweDQ2ZTE1YjFlLCAweDU2OTE1NzZjLCAweGE5YmI2MmFkLCAweGM0NmM3NzM5LCAweDZlODZkMzc2LCAweGNkZGIyMzU3LAorCTB4MjM2ZmIzMTgsIDB4Yjc3MDZmOTYsIDB4MmU5ZjY4YWIsIDB4MWE1NjM5NDAsIDB4ZTU5NjQ3ZWUsIDB4NjVhNzI5NzcsCisJMHhkZGQ1ZGQzZSwgMHhlMzA3ZDI1ZSwgMHgwZmE0YmNiYSwgMHhlNjJhNWMyNCwgMHhmZjQyNmY1NiwgMHhlMjk3NjM2NywKKwkweGE5YTVkZmMwLCAweDI3ZjRhYjk4LCAweDYyZWU2MDMzLCAweDBhOTNkZTAzLCAweDNkZmZmYWYyLCAweDg3YWM3N2FlLAorCTB4Zjk2MjM2NzUsIDB4YWRiNzJhMWEsIDB4ZWRmYTA2ZmYsIDB4ZTJmNjAwN2YsIDB4ODAwMGU4MzEsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgzY2Q1ZmYwMCwgMHhlNTU0NzgwOSwgMHg5ZGNlZTdiNSwgMHg0YzkyNjQyZCwKKwkweGUyNDIwODM2LCAweDk2MjQ5OTY0LCAweDI2YjY0MzJjLCAweDBjNDg2NDEwLCAweGY5MDEzMGVlLCAweDEwMTk2NTQ0LAorCTB4MDQ0ODE2YzIsIDB4N2VhYjE3ZWIsIDB4ZTAxNzFhMTksIDB4ZDE2YjhkNjksIDB4YjVjNDZmYWEsIDB4NjFlNGI2YWYsCisJMHgxZDA5NThkNCwgMHg4N2QyNTJhYSwgMHhiNDEwNTUzYSwgMHg4OGE0NzQ3OSwgMHgxMTkwOTlmMCwgMHhjN2QyNzhkYywKKwkweGY3ZmNlNzNiLCAweDI0Y2VlNjY2LCAweGJlZmQxNDgwLCAweGZmOTM4NjA3LCAweGNmZDlmYmZlLCAweDAwNWZmZmY5LAorCTB4YjNmODUzODAsIDB4MzQ2MDdmMDIsIDB4M2QyNTM4ZmUsIDB4MDQ2ODA0OGMsIDB4ZDFiZjY3ZjEsIDB4MDM5NWIyNmQsCisJMHg4YzA3MzRhYywgMHg0MTJmYTNhMCwgMHg2MDEwYWJhMywgMHg3Njk2MGVhZiwgMHgyNGE0MDAxNCwgMHgwYjdhZmNjMywKKwkweDc0YjA4ZDk2LCAweDVkZTc5NjBiLCAweDA1NDgwMzY4LCAweDIwYmFkYTY4LCAweGRhODU4MTZlLCAweDYwNjZlM2JiLAorCTB4ZTIxNzQ1ZmIsIDB4NTJjZTM4YWYsIDB4ZTA1NDZlMDUsIDB4OWJkNDBhOTMsIDB4NGYzNDg5OWMsIDB4MWZkMjRkOWEsCisJMHg4NTZmYzdjYSwgMHgwNjRhNzg1MCwgMHgzZDlhYjdlOCwgMHg0NDgwMDRiYSwgMHgwZGFjN2I5MywgMHhmYjliZWRjNywKKwkweDg3NTg4MzRlLCAweDMxZDY4OGFmLCAweGViMWViZDZjLCAweDZjMzIwMGUzLCAweGNhMWYxZTU2LCAweDVlNTQxOTgyLAorCTB4Yzg0NmVkMDksIDB4Y2ZmNWI4NDYsIDB4ZGEyMmE0ZmIsIDB4MjMyN2M1OTcsIDB4NWY0MzRlODQsIDB4ZjllYzVmMjAsCisJMHg2M2ZlMTY1NCwgMHhlMDU0M2QwNiwgMHg2ZTAzZTk3YSwgMHg3MGQ3OTk2OSwgMHhlYTU2NjAyMCwgMHg3NDM5NjdmMSwKKwkweDIyNjY3MGVjLCAweDdlZDQ1ZWRlLCAweDE4YmYwNDZmLCAweDdkZmI0M2JmLCAweGJlOGRlMjE1LCAweGJmNjk3NTM3LAorCTB4MGY1YjU0MDMsIDB4MDIzMDQzOGQsIDB4ZDlkZmI4Y2IsIDB4ODU1ZWZlMTIsIDB4ODc4ZjBkZmYsIDB4YzNjMDY3NDksCisJMHgxMGYwYTFhNCwgMHgxYWYwMWZiNSwgMHhkN2RlOGU0MSwgMHhhNjZlY2IwYSwgMHhjMGJlZTQ3MywgMHhkMWZjY2E5ZCwKKwkweGY3MjE4MTA4LCAweGY0NDVmMmE3LCAweGZlMDVkYWZlLCAweDI1ZmYwMmY1LCAweDVhNzRlNzM2LCAweDM4ZmNkZDVmLAorCTB4OGUwMDUzOTAsIDB4NGQ3OTM1NmQsIDB4YTlmZmRjOTksIDB4MTc0NDI5M2QsIDB4MmQ4Mzc1OTMsIDB4NWI1YjNlOWEsCisJMHgwMGRlODM2NywgMHhjZGQ1YWRiMCwgMHgxNGJhZDdkMCwgMHgzZjgwNzZmNCwgMHhmOTczMzZiNSwgMHgyZTE2ZDZhZCwKKwkweDMwZjU2OGVmLCAweDhlYmFkOWRjLCAweGRiNWE1ZmUxLCAweGViNTc3ZWI5LCAweGRiYmYyZTQ2LCAweDZmZTg2NWVhLAorCTB4NWZiZjkxN2QsIDB4ODY2NTdmM2IsIDB4ZmY0ZDEyZGIsIDB4NDVjZWM5ZDUsIDB4N2I5ZThmYzQsIDB4M2U5OTEzYWEsCisJMHhjODUzZjdiOCwgMHhjODFhOWVhYiwgMHhjMzQ0YjY2ZiwgMHg5ZDY1ODMwMSwgMHg4ZjY1YzA5NCwgMHhkOWUxZjcxMSwKKwkweGMzNmRlMzE2LCAweDhjNzNmZDdkLCAweDE5YzY4OWJiLCAweGFkN2UwOWE4LCAweDRhNDM3YzQzLCAweDMwZDBmMTgwLAorCTB4YmU5YWJkZDIsIDB4M2ExYzQ2NGIsIDB4ZTRmNTY2ODksIDB4ZWIwZWZlMTIsIDB4NjQwN2JmM2MsIDB4ZDM5YjU2ZDksCisJMHgzODNlNDdhNSwgMHgxNzU1OGYxYSwgMHg2NTgyZGMwMCwgMHg3OGYzY2UwZiwgMHhmYTg1YWJhYSwgMHg0OGMwN2U0MSwKKwkweDNmYTI5Y2UzLCAweDA5N2M3MTkzLCAweDNhZjA3NzY2LCAweDBlMWNhMjEwLCAweGIxZTgwOGM0LCAweGQxOGYyYzQ5LAorCTB4NDBkZGM4NTAsIDB4NjBmOTlmYmEsIDB4MTkxM2U5ZTAsIDB4Y2IzMzgyYjYsIDB4YThmODcwYzUsIDB4OWUwM2FiOTMsCisJMHg2NTY3YTQzMiwgMHhkNTg0YzNhYywgMHhhNGY4MTI3ZCwgMHg0NjUzODQxMiwgMHhkMzhlMDBkNiwgMHgxM2Q0NmU5NywKKwkweDU2NDQxNDljLCAweDlmYzNjNzUwLCAweDYzMjJkZmM5LCAweDE0Y2JmMTg2LCAweDZiOTRkNDQ4LCAweGVkMzVhM2NkLAorCTB4OWE5OWFjZWIsIDB4NWNmNGJlZmEsIDB4YjRkMmZmMWUsIDB4ZmFlZDM0OGIsIDB4YzU5YTU3NDYsIDB4MjMyZjUzYmMsCisJMHg2Zjc0NjVkOCwgMHgwOTc0ODA1YywgMHg5YjFjOTk1NiwgMHg5OGJkZmViMCwgMHgwNjI4MjJmOCwgMHhiZjFiMTY5OCwKKwkweDMxN2JlMDg5LCAweDM3NmE1ZTE5LCAweDE0YzljMGVkLCAweDkzNGU3ZGMwLCAweDEwOGIyMzdkLCAweGM2ZGI5NzU1LAorCTB4OTllZGM3NmIsIDB4NzZjMzYzNTMsIDB4Njk1N2U2NTcsIDB4MjVjMTIxZDcsIDB4MWRhYmRmYjQsIDB4YTdkZjM0NTMsCisJMHhlOWFlNWU1NywgMHg5M2ZiMzJlZiwgMHhjZWY1YWQwOCwgMHhjNmY3Y2Q3YSwgMHg5ZjQxYWY5NiwgMHhlNWIxMzAwYywKKwkweDAxNGJlODI0LCAweDM0M2FmYmM2LCAweGVjZWU5NGUzLCAweGJmMWZiNGQyLCAweGViMTI2NDFiLCAweDM3OGU3ZDkyLAorCTB4NzQxZjk2MDksIDB4MTUyYWM0Y2EsIDB4MjRkZjliODcsIDB4M2ZhNWY1NTgsIDB4NGUwMWY2ODMsIDB4OWY1MTU5YjAsCisJMHg4M2RjOGE0YiwgMHg5NjNkMDI0NywgMHhjYWU1MjkyNywgMHg4MTJkYjdhMCwgMHhmMjEyNzBlOCwgMHg4OWJmNDhmNSwKKwkweDYzMjFjMjMwLCAweGJmZjJhOTYzLCAweDRjMWYxMDRlLCAweDMyMDAyMDUyLCAweDE2YWJmNjA3LCAweDNhNzk4MDRiLAorCTB4NDU5OGQ3OGIsIDB4MWJlNTA1NmEsIDB4YzkwNmMxZjUsIDB4Mzg0N2E2OTEsIDB4NTA1NDBlNDcsIDB4OGEwNDI4ZjksCisJMHg5NzNhY2EwOCwgMHgyYTZiZjg5ZSwgMHhiMmE1OGYzNCwgMHgwNDY5ZGMwOSwgMHhiZjc0NDgzZiwgMHgyZmRjN2M0ZiwKKwkweGUyYzRkYTA1LCAweGNmYzRjOTgyLCAweDY4ZmYzZjc1LCAweDE3YWM2ZGRlLCAweDVjMjYxYzYyLCAweGZlYmFlZmRmLAorCTB4ZmQ2YjRhOTEsIDB4OTFmNTNmYmIsIDB4N2UyMTZjMzcsIDB4Y2Q3ZWIyNmYsIDB4OGRjYjUyNzgsIDB4N2YxOWM3MmQsCisJMHgyZDZmYjk2YSwgMHg5MmUxNzdjYywgMHg5ZjY4MGRkYiwgMHhhZmZlMzYxMCwgMHhlZDBhNzZjYywgMHg1M2EyM2FkYSwKKwkweGI4YzlmYzIzLCAweDFlZDQyMGJhLCAweGM0MThiZTNhLCAweGJmZWEzMTc3LCAweDA0ZDM1YTdhLCAweDVkZGZkN2MyLAorCTB4NmY1NzZjNGUsIDB4OWUwODcyMTAsIDB4MWM0ZWY1NDUsIDB4Mjk0NjNlYTcsIDB4YTdkNDRmODMsIDB4YjJhMWVkMmEsCisJMHg2YWU5Y2I5ZSwgMHg2ZjY4OTU3ZCwgMHg1ODdiYzc1NywgMHg5NmFkMWZiNCwgMHg1MjJlZjE5NSwgMHg5Y2EyY2RjYiwKKwkweGEwZjdjZWE5LCAweGU1YWExNzI4LCAweDM5NzE3MGZmLCAweDYxM2ZiNDRlLCAweDI5ZWY1NTliLCAweDUzZmZlOTA4LAorCTB4MGYxOGRkYWEsIDB4YTA2ZWM5ZTMsIDB4YzkzMzkwM2QsIDB4MWFiYjQ4MWUsIDB4ZWRhMjFmOTgsIDB4YjE1ZWI2ODUsCisJMHgyMzdmZjMxNywgMHg0NGM1OGM3YiwgMHhkZjYzY2I4ZiwgMHg5MGVlYjkyMSwgMHhmMWJhZTQ4MCwgMHg4YmQzODM3NiwKKwkweGQ0OWU3ZmYzLCAweDEyYzZiNDUxLCAweGI3ZTdkZmMyLCAweDZhYmI3YzA4LCAweGI2MzI5Y2UzLCAweGRlNmFmOTVmLAorCTB4MzkyM2UyMjYsIDB4ODVjOGY3NmUsIDB4NTYzYWRkZjgsIDB4NGVhNzdhYzcsIDB4ZTg4MTM4YjYsIDB4ZmJkMGFmN2IsCisJMHhkODQ4ZmY2YSwgMHg4Njg2ZjJkMCwgMHhiMmY1NTE5ZSwgMHg2Y2MxZjNjNCwgMHhmYWY5YzFmYywgMHhmNGY1MWJlZiwKKwkweDhlNTljMjA2LCAweDkzNzA5NzNmLCAweGRjZjQyOTk5LCAweDk1YWRkNDQ4LCAweGVhMzZmM2Y4LCAweDNkZDIzMzU5LAorCTB4M2E5YzFiMjUsIDB4MWFmMjlmNmMsIDB4ZjFhMjY3ZWEsIDB4YzdkMGJmNDEsIDB4MjRmOGM1YWYsIDB4OGY5NTljMTQsCisJMHg2ZmY2YzliZCwgMHg4ZTUyOGNhMSwgMHhjZjJkN2JmOCwgMHg3Yzg5OTc5ZCwgMHg5ZmNlMzQ3YSwgMHhkMGRiN2M0YiwKKwkweDc1ZDc4ZGIyLCAweGUzY2FkZDhkLCAweDEwNTgzNTgzLCAweGNjZTJjZjhlLCAweDllOTdmYzI4LCAweDNmYTVmZjAxLAorCTB4ODI3MWZlMjYsIDB4NzVjZmE0MDMsIDB4YmViNDc0MjgsIDB4NzhiNzk2ZTUsIDB4ZWY5NWNiYmYsIDB4NDMzMjVmYWMsCisJMHg0NzJjYjhlZCwgMHgzOWM2OGY5NywgMHgwZTFmMDgzMiwgMHg3NDA3NGU4NSwgMHg1ZjA1MGFiNiwgMHhmYWJlMTM1NywKKwkweDEzNzNmYjE3LCAweGY5ZjBlY2IxLCAweDNlZDliYTQ3LCAweDg4OTcyYWVjLCAweDQwNzFjZGVlLCAweGY5MmEzZjc0LAorCTB4NDEwZWY2OGIsIDB4MGVkNjhlZmYsIDB4NWE1YmNiYjYsIDB4ODRiZTE4YmIsIDB4NTViYWQwNzMsIDB4OGQxMGRkN2MsCisJMHhjMDY3ZjlkZiwgMHgxMzFmZmNlZiwgMHgwMWY0YTNiZiwgMHhhZGZiMDNhMywgMHg0ZTNjMDdkYSwgMHgxMTgwZmY4NSwKKwkweDJiNGNmNGMyLCAweDI3ZTIyNWYxLCAweGZhZTI0YmExLCAweDIxMjBiOTNhLCAweDEzOGZhOWEwLCAweDczOGU1MmZlLAorCTB4Y2FlOWYxM2MsIDB4MzdhYWJiMTksIDB4OTg3OTIxNDgsIDB4MzExZDBiMWMsIDB4MGVkN2NjNDksIDB4YzQxZGFmODUsCisJMHgyMmZmMmFkNywgMHgxMWVhOTYzZiwgMHhjNDlkNmZjZiwgMHgzN2UwNDM3ZSwgMHhmM2MwYmZjNCwgMHgzYmJhNzhhOCwKKwkweDg4MWJhZjFhLCAweGFiYzFhNzhlLCAweGM2MDdmZWI2LCAweGM3ZmEyNzZiLCAweGFmODIzN2E0LCAweDY1Mzc3OGM0LAorCTB4NzdmOWUzNDYsIDB4N2M1NTVlMGEsIDB4N2ZlNDUzNmYsIDB4MjM2ZjNjMzgsIDB4N2Y5ZWE3M2MsIDB4YjRjYjZmM2MsCisJMHhmODkxYjhmMSwgMHg0NTNlY2UxZSwgMHhmNzVkNDdkMiwgMHg3ZTVhNzIxMCwgMHgyZDNhNzIyZSwgMHhkZmY4YWFkYiwKKwkweDQ2MTY3N2U4LCAweGEyNmRmZGQzLCAweGY3NDM1OWJiLCAweDUzYzgzMzllLCAweDRmMjk4ZmNmLCAweDg0OGI3ODkxLAorCTB4M2FiODEyOGQsIDB4M2ZkZmQxMmMsIDB4ZGY1NjFjY2IsIDB4NGUzYzE3OWQsIDB4ZjhkNmNlMGEsIDB4NzViZjkzNjcsCisJMHgyOWIzZmM2YiwgMHhmZDY5NjExOCwgMHhlNTM0OWJkOCwgMHg5YWFkZWIzYSwgMHhhZGE2OTdmNiwgMHg2ZTVmZDRkNSwKKwkweGJmYTlhZjViLCAweDRkMDFmZjMyLCAweDYzYzc2YWY5LCAweGQzZTY3ZTExLCAweGU3N2FmYTlhLCAweDczZjUzNDZmLAorCTB4ZWE2YmI3OWIsIDB4NjhmNGI3ZTcsIDB4ZmU3ODE3ZWEsIDB4NzhhYjI5YWEsIDB4MWMwYWRhZGMsIDB4MzU2YjZkMmYsCisJMHg2NWQzZjEyYiwgMHhmZTAzYWIwYywgMHg4YjgzMTI1YSwgMHhkZmQ5MDcwZiwgMHhkN2I3ZjRhYywgMHhhZmIyNGJiMiwKKwkweDMyZDFmZDgzLCAweGMyOTZhYjlmLCAweGNkOWQ4YWFhLCAweGI1ZjQxMjZmLCAweDJkNzg5NTVhLCAweGFkNWJlMThkLAorCTB4M2JlZmQ2MzYsIDB4ZWUxOWYzNWEsIDB4ZjEyODc1NmMsIDB4NWRjMzI1NWEsIDB4NGUyNTRlYWQsIDB4YjQ4YzMxNzMsCisJMHhiYjY2YWYwYiwgMHgzZDIxNjRhNywgMHg0NGJjYmRhNiwgMHhlOTgwYjgwNywgMHhjMTY3Zjg3ZiwgMHg3N2JjNWE1ZSwKKwkweGRjZTI4ZWJjLCAweDhlNWVjYTM1LCAweGZmYjM3ZjU3LCAweGUzYWZlNDM2LCAweDk1MDcyNmNkLCAweDMxMWZiNzdiLAorCTB4ZjlhMzBhZDgsIDB4MzJiN2VlNjUsIDB4NmNmOGMzMzgsIDB4MGQ1ZmNiNmUsIDB4NDVjZDY3ZTQsIDB4MDg2M2JhMGYsCisJMHhhNTlhOWQzOSwgMHhmNzIwN2U2MywgMHhjYzJmNTAwMywgMHgwNTIxODMzNiwgMHhkOWVjYzFmNSwgMHhmODBkYTM5MiwKKwkweDE4OTIwN2JiLCAweDNmNThkY2ZhLCAweDEzM2UwZjRkLCAweDdhMmRlYjk2LCAweDk3OWUyOTlmLCAweDNmYTMzMmU2LAorCTB4MTMyYzRiM2QsIDB4NTBmMDdhNGMsIDB4NzMyNGE0M2QsIDB4N2QwZDdlOWMsIDB4MzgzY2ExYjQsIDB4YmYxOGI4NjUsCisJMHgxYzNmMjJjZiwgMHhlOTZmNWRmYiwgMHhiZGRkOTAzMCwgMHhmYTJmZTc2ZSwgMHhiODdhYzM2ZiwgMHhmMWNlNTNkMywKKwkweDI1NjI1YzNkLCAweDNlNzkyZGZkLCAweDM3MWE5ZGQ2LCAweDM1MjBiY2JjLCAweDVmMTg1MGUxLCAweDRlMTkyNTRmLAorCTB4ZTFkMWY4YTUsIDB4N2FkYzUyNzcsIDB4OWNmMWMxOTMsIDB4MDVkZmJhMmQsIDB4YzlhNzdlY2EsIDB4YzE2ZmZiMTIsCisJMHg0ZGRlNGRkNywgMHg3MTNlNDg1MiwgMHhiODRkM2I3ZiwgMHgwMWUyMjZjZiwgMHhjMWIzNjdkYSwgMHg3ZTQ0NTc5NywKKwkweGIzZjY3NmY2LCAweDE2ZDcyYTliLCAweDJlOWE5ZDExLCAweDE1MzEzZTkxLCAweGE2OWRlMjg1LCAweDhmZDkyZjk2LAorCTB4OTFjZmQ0OGYsIDB4OTBmMTRjZjAsIDB4ZmU2NTZmYzMsIDB4OTNiYWRmZGIsIDB4OGI4ZDQ1ZjksIDB4NWM3ZDViN2EsCisJMHg2YWI4MGIyZSwgMHgzOWEzZTNjMywgMHhhNjRkZmY5MywgMHg0YmVhYTdiOCwgMHgzYzRjZmYxMSwgMHg1M2ZiZGNlOSwKKwkweGQ1YTA3N2RjLCAweDE3ZTUyZmZmLCAweDlhODJiY2Q0LCAweDViY2M4ODY3LCAweGRlNjQ3YWE4LCAweDZlMDk3NWFkLAorCTB4MmM5YWVmZGMsIDB4OTRmMzA2NTEsIDB4NWVhM2E2NzQsIDB4ZGVkZjU1NDAsIDB4OTc2NTE1OWEsIDB4YmQzYWM4ZWYsCisJMHhmZmQ2ZDY3ZSwgMHg2Y2Y5ZmFjMCwgMHg0ZDMxYmZmOSwgMHhiZTQ4ZDVkOCwgMHgwNWUzMzdkZiwgMHhlNTUzYWQwMywKKwkweDlmZmU0OGVmLCAweGZlNzA3ZDQzLCAweGQ3OTI0ZDM5LCAweGY2N2E3YTgzLCAweDQ0YzM3NjkyLCAweDdkZjlkY2U5LAorCTB4ODhhMGU1YjksIDB4YzJlZDIzOGIsIDB4MzYwN2I2ZjcsIDB4MmI1YzliYTYsIDB4OTI2MTdjNzMsIDB4MWU1MDcyNmYsCisJMHg0NzQzYTU0NCwgMHhjZjNhZGQzNCwgMHgxZmNlYjc0MCwgMHg3NmQxNmU5MywgMHg3M2JjZTBmMSwgMHhmMWEwOGJiMywKKwkweDhhY2JkZmNmLCAweGM4M2UyN2YyLCAweGE5MWZiZDNhLCAweGY3ODFmZmFkLCAweDYzNmIxZDZkLCAweGVmNDQ3MmI4LAorCTB4ZWEyNzU5M2MsIDB4MDE2MjdjNDUsIDB4ODBlZmYyMWQsIDB4NzRiOGU2NTcsIDB4M2M3YjY2NjksIDB4MTk1MDMzYzUsCisJMHhiNzdkMjc4YywgMHhmMjA2NWJhYywgMHhkNGVmNDEwZiwgMHg1Y2ZlNDY4ZiwgMHgxZjY3ZjBhMiwgMHg3ZTI0M2VmOCwKKwkweDdlZjcwNTVjLCAweDI1OTgwOTQxLCAweDIyYWU0YmQ1LCAweDA5ZjRiNzNkLCAweGZjNGYwODQzLCAweDI3ZjM5M2FmLAorCTB4Y2I3ZTk0YWIsIDB4ZGE0NjlkMmQsIDB4YjU2N2YyZWYsIDB4MWE3MWQ0ZWQsIDB4MWZjODhhNWYsIDB4MTlmYTVmNTcsCisJMHg3M2YwZGRiMCwgMHhhNzU1NmZkZSwgMHg1OTc3ZGZiNiwgMHg2Mjg3Mjk3MSwgMHgwODRiMTY1OSwgMHhhN2QyNjdlZiwKKwkweDFiYWVjOTQ3LCAweDViMjdjYWMyLCAweDNmMjBiZjM5LCAweDllMDNlMGYzLCAweGM0ZmEyMWIxLCAweDcxZjE0NzY0LAorCTB4ZjllOWY2NWMsIDB4MjNmZjViNTgsIDB4ZjcxY2IxZjMsIDB4ZjllODkxYWMsIDB4YmY3OGY5N2QsIDB4ZWI0NTk5ZGQsCisJMHhhMGYzZjU1NiwgMHhjNGMzNzlkZSwgMHhkY2EwNjc3YSwgMHgzN2E0ZjIyNiwgMHg5ZTJkYWVmZCwgMHgzODA0ZTRmOCwKKwkweDJhMTYxZDg4LCAweDZhODVkMmY5LCAweDM2OWQ3NGJlLCAweGNmYjkzYTVmLCAweDQ5Yjk3OWM3LCAweDcxNmRiZDA3LAorCTB4YmQ4OWY3NDgsIDB4NTVkYmNlMWUsIDB4NTliNzc2ZWQsIDB4NWRkM2ZjYjAsIDB4YTNmYzk5NGUsIDB4NjRiOTZmZjEsCisJMHhkZmVhYjc1YSwgMHg0ODRlZmVhOCwgMHhiZWIwZTU4ZiwgMHhmNjZiYmNlMywgMHhkNTNiZWJkOSwgMHgzMGY2YWEyZSwKKwkweDA2NTYwZWQyLCAweGZlYzk2YmRiLCAweGUzYjZmODRkLCAweDJiZTc4MjRkLCAweGY3NjkxZWFmLCAweDdhMTM4YmRlLAorCTB4NTdjMWE4ZTIsIDB4OGNmYzk3YmUsIDB4Y2YxYzYzZDcsIDB4YWZmYWY0NDEsIDB4YzY3ZTE2Y2IsIDB4MDMwMmNmNGMsCisJMHgxZjA5MWZjYiwgMHg0NTBjZGJjYSwgMHg3NjRmYWU2ZSwgMHhmNTRkOTc1ZiwgMHg5OWQwYmQ4YSwgMHhhM2IyMDY5ZCwKKwkweDIzZGY3Mjc1LCAweGY5NWYxMmQ3LCAweGRlMWJjZTY1LCAweGJmMDdjNzdjLCAweGNjZWRiNWZmLCAweGViMjY4NWY5LAorCTB4ODYzZmY2NzEsIDB4NzQ5YTMzOGIsIDB4YTJmOGE2ZTAsIDB4NGE1NmQ2YTQsIDB4NmRjNTBjN2UsIDB4ZjM1NDQ3OTQsCisJMHg5ZmVkOTE4YSwgMHhjOGFjZDdiMCwgMHhiNTU3M2NlNiwgMHhkOWViNDlkZiwgMHgxYzMzZDYyOCwgMHhiZTVhOWFiZCwKKwkweDg3MzFlNGQwLCAweGJiYTliZjliLCAweDRjMzBiYWRjLCAweDE2Y2E1ZTNlLCAweGRiZDIyZWYxLCAweGEyMWNjODdhLAorCTB4YzVmMmQ5ZjcsIDB4NjVmOGI3ZmYsIDB4MDkxZTBjOWEsIDB4ZTRhMTZjZWQsIDB4MDgyZmZlMTUsIDB4ZjgwZTc4M2YsCisJMHgyMDgzY2UxOSwgMHhmOTU4Mzc0MywgMHgzODIxNmE3YywgMHgxNzAyMmUxOCwgMHhkYmJiN2NjMywgMHg2MDMzN2M0YiwKKwkweGJlMjQ4ZTA4LCAweGJiZjU3ZmVhLCAweGZlOWJlMjAyLCAweDU3YjYyNzhiLCAweDVmM2JmOWMxLCAweDA2ZmZmNDhhLAorCTB4ZmU3OGRiYzYsIDB4ZGJiZTU3ODEsIDB4NzAzOWZjNDMsIDB4ZjRhY2UxODcsIDB4Njc2NGVhYzYsIDB4ZTQ1MWYxMjcsCisJMHg1M2JiY2I3OSwgMHgwMWQ3M2U2NCwgMHg4Yjk2N2FmZCwgMHgwM2U4YWI3YSwgMHgxYjcyYTQ5NywgMHhlNjRjZDhlYiwKKwkweDFjZGU5MDhiLCAweDM3YWFiNGY1LCAweGMyYmY2MDE3LCAweGQ3YWM3NDRmLCAweGI1ZTQ5OTYwLCAweDgwYWVkMzYzLAorCTB4NzBhYzQ1OGUsIDB4YTY1N2E2NzEsIDB4MmZhOGE3NzIsIDB4OTVlODk5NWMsIDB4MTU1ODVjYjAsIDB4NGE2ZmVhMjMsCisJMHhjNTI2NDJmNCwgMHhjYjk2MDE0MywgMHgwZmFjMDBmOSwgMHg4YmQwODAxNywgMHhmNzkzODIzNywgMHg5NjQxOTE4OSwKKwkweDZmMTdmZDg0LCAweDNlNzA5NzM1LCAweGE0MzkwMjE2LCAweDhlMjg4YmZmLCAweGI3NGUyMjFhLCAweDJmNzkwOGU2LAorCTB4YmVmYTEyY2UsIDB4MTc5YjQ2YjgsIDB4Yzk1YjMwZjksIDB4NGE2YmRiMWIsIDB4ZTc1NjEwNzIsIDB4MWQxMmY3MzgsCisJMHgxYmZjOTM4YiwgMHg3Y2EzMmExZSwgMHhhMTM2MGU5MCwgMHg3NTU2N2Q3YywgMHhhYTc3OWYyYiwgMHgzNWVkMWFmZCwKKwkweGNkYmY4NGJkLCAweGUyYmM3MDEyLCAweDlmNzkzNmU5LCAweDIzOGNlNzEzLCAweGYyY2RjZmMzLCAweGE4MDdiNWVkLAorCTB4N2I1YTExZGQsIDB4YzU3OGYwZjksIDB4NDdmNzFjN2UsIDB4ZDc4Nzk1Y2IsIDB4MWJiMTRjNTcsIDB4NDNmMWZiZTcsCisJMHhlNWNiY2YyNSwgMHhlYmU2NzlmZiwgMHhmODBiM2JmYSwgMHg3ZTQzYzE0YywgMHg3ZGRkYTM3MiwgMHgwNDZmZDc5YywKKwkweDlmZmFkMGIwLCAweDQwMTQ3MTE0LCAweDQ3ZTUwNjczLCAweGQyNjUzYzk3LCAweDExZjE5ZjkxLCAweDAzYzg2MzlhLAorCTB4ZGRjNjFiZjgsIDB4ZTMxYmZmMDQsIDB4Yzc3ZjgyNjcsIDB4MjdlMDk5ZjgsIDB4ZmMxMzNmMTgsIDB4MDRjZmM2MDcsCisJMHgxZTNiN2YxNywgMHg4ZDgwMjI4MywgMHg0ZTRiNGUzOSwgMHgzMDFjZTg3OSwgMHgxYzg2YmQ3MiwgMHhmOWMxY2Y4MSwKKwkweDdmM2M4ZGJiLCAweGY4Y2RkZDlkLCAweGViZjdhNDFkLCAweDk5NzNhNWUwLCAweDBiYzE4OWNkLCAweDZmYzM0ZTkyLAorCTB4ZjBkZmRkMDMsIDB4Nzg3MGU5ZjksIDB4MjMyNWNmNTEsIDB4ZTg1M2JmZWIsIDB4NjdhOWQ0NWEsIDB4MTVkNDVmZmIsCisJMHg2YjA4NmY4OCwgMHg5MThlNDE3NywgMHgzOTVmMGJlYiwgMHgxZmUzNGYxOCwgMHhkN2UyMGViNSwgMHhhNzk2ZTEyOSwKKwkweDgyZjk0NGU5LCAweDA4MzMyZDY3LCAweDY3NzY3NWJmLCAweGU1MWJlZDA5LCAweDUxZjY4MzNjLCAweDgzYzFmNWQ0LAorCTB4N2M3OGNiMTMsIDB4NzVhMzY0YWIsIDB4YjhlNTFmMDQsIDB4OTExZjYyMjEsIDB4YjVmNzUwNzgsIDB4ODFiZmQxMzksCisJMHgyNTdlNmZmYSwgMHg3YTgyNzY4YiwgMHgxMGRjODQwNywgMHhlZDQzNDkxZiwgMHhjZmYzMmQ3NywgMHhjY2IwNTM3NCwKKwkweDdlOWRlYjhhLCAweDBhMWU2ZTRhLCAweDI5ZjY3NWZmLCAweDU0NzdlNzhjLCAweGM3Y2Y1MzdlLCAweGU5NTJmZTE1LAorCTB4MWRmMmFlNzYsIDB4NmI5MDFlMzksIDB4NmFlNzdlODQsIDB4YjIzNmE1ZDIsIDB4YzllMzI3NGIsIDB4ZWU1N2FjMmYsCisJMHhlNjc1NzQxOSwgMHhmNGZiNDdiYywgMHg2ZWMxOTRlYywgMHhjOGQ2M2U2MywgMHg1Zjg1NjJkZiwgMHg2ZGQ4NTg1NCwKKwkweDM2YmQxMTc0LCAweDU5Y2ExZjc3LCAweGU0ZmE2MTY0LCAweGIzZjZjNjJjLCAweGJjOWFlYzcyLCAweDg5ZDU2MTY3LAorCTB4ZTE0YTFmYzcsIDB4ZWE5YTU2ZjYsIDB4Y2ViYTc4M2EsIDB4NjBkZmUzOGEsIDB4NmQzNmZlZGUsIDB4OTNmNWFlNjksCisJMHhjZjJjNDRiYSwgMHgxMDc2OTM0ZiwgMHg5Y2NiNjA1YywgMHhlNWEzNjQ5YSwgMHgzN2ZkNzk3YSwgMHg0MWQ5NGZlNiwKKwkweGEzOTU3NTIyLCAweDI5YjlmZDllLCAweGVjYzI2NGE0LCAweDk2MzlhZDQzLCAweGNiMDcxZjBlLCAweDRkNjRkNjc1LAorCTB4MzFiNGQyZjksIDB4ZGI5N2Y2OWEsIDB4NTdmNTM1YjIsIDB4ZDRkMzhmZTYsIDB4ZTU1ZWYzYWIsIDB4MmJiNGQ1MjgsCisJMHg1MTY2MGE0ZSwgMHg2MGZiODc1YywgMHg2NGU3ODBiOSwgMHg3ZGEyNWRhZiwgMHgxYzYyYmVlZiwgMHgzZjNkYTc5NiwKKwkweGNhNmU0MWNiLCAweGRhN2VhNTY2LCAweGQxMmY1YTk2LCAweDY5ZjEwMDYzLCAweDcwZWE4NzQ0LCAweDFmNDdmYWU1LAorCTB4ZTIyMmMxYTIsIDB4NjdlZWM2ODYsIDB4ZTc2ZDM4NzYsIDB4MTMwYzM3MTAsIDB4NzEwMGFjMmYsIDB4ZGM1YzNmOGUsCisJMHhhMDJmMTkxMCwgMHhmNDkwN2NmZSwgMHhkN2FiZjE2NywgMHhkYzcwZGI1OCwgMHgyZTI3NTVjZCwgMHhlZjNlZTFiMCwKKwkweDgyMzhjMWNjLCAweDQ3MTI4ZGVjLCAweDgzM2ZjNzBjLCAweDA0ZDkyMjcyLCAweGYwYzhmNGZmLCAweDAzZmMxMGRjLAorCTB4MWY4NTBiZjAsIDB4M2VmNjljMDUsIDB4ZGYwNTMzZmEsIDB4NGE3ZGJmNWYsIDB4MDdmMzhkZmEsIDB4NTdlZmM1MWUsCisJMHhhZmJlNDQ2MCwgMHg2Zjc4ZThkOCwgMHhkZWE3ZTUwZCwgMHhmOWNlODE5MSwgMHgwM2FlMjRlMSwgMHg3N2U4MWJlYiwKKwkweGIwZjdjNDM5LCAweDQ2YmJlOWU4LCAweDBmNzdmMGE3LCAweDk0YWJhNmI5LCAweDczMWZkZmZjLCAweDcxYWFiZjE0LAorCTB4Y2JhMzVkZmIsIDB4ZjM3MGY1NDIsIDB4NzBmNjlhMjcsIDB4YTZiNzc0YmIsIDB4YjZhNjY3N2MsIDB4YmI5NGVmN2MsCisJMHhlNzBmZmJjMywgMHg1YzZjMzU5NywgMHg5Y2EzNzQ2MCwgMHgzOTJjM2MzNiwgMHg4YmU4NDNiZCwgMHgyOGE0ZjVjMSwKKwkweDA5N2JhMWZhLCAweGRiNDNkYmViLCAweDcxNmQxOTk3LCAweGUxNTdlZGQxLCAweDZjYjc5NDc4LCAweGFhZGVjNjE4LAorCTB4MTkzYWVhN2EsIDB4N2ZhYTg3OWEsIDB4NzFjZjlkNDcsIDB4MDhmYmU3N2UsIDB4Y2RmNjRmNzEsIDB4YzNiMDlhZjMsCisJMHg4ZGI4MjUxZiwgMHgyZmIyN2NlMSwgMHhmNDdiOWM0NywgMHgxZGMwZjYzZiwgMHhlZTc5ZDM1ZiwgMHhlYWJlMjJlYiwKKwkweGEzZjYxNDRmLCAweDlkMzNmM2E4LCAweDA4ZjE2MTBlLCAweGQ2NDU1ZmMxLCAweGQyZWM4ZTgwLCAweDBmNThkMmMwLAorCTB4MmQzNTljYTAsIDB4OGFlOGYzOGIsIDB4N2UwODhmYzksIDB4NWU0ZjFlNjgsIDB4OWEwZjJkYzcsIDB4ZWIxZmNlOTEsCisJMHgzY2JiMWE3NCwgMHg5NjE2YzE0MCwgMHhkOWZkOWVmYiwgMHhmN2U5M2I4YywgMHhlOTJmNzEwMiwgMHgyZmIzZWQ3YywKKwkweGFkN2Q4NDA3LCAweDFlNjM3YTExLCAweGI3NjI5ZmYxLCAweGQzNTY1NTAwLCAweGM3NjgzMDVkLCAweDVlMTBjZjQ4LAorCTB4YmY2YjljYTgsIDB4Yzk4N2ZkZjUsIDB4N2ExMWVmY2YsIDB4MzcwYWYyODMsIDB4YjRlMDVmYjAsIDB4MWQwZGYzNjgsCisJMHhiYmY4ZTcyYywgMHhkNzNlZmMyZCwgMHhiNzhmZWI1OSwgMHhmMzk2OGRkYSwgMHhkODQ2NDdhOCwgMHgyMTg3NzliNSwKKwkweDU3ZmJjNWY0LCAweDVlOWIzZDIyLCAweGQwNWVmOTk3LCAweDA0ZjZhZGIxLCAweDkxMWZkMzA4LCAweDI4ZGE2Yzc4LAorCTB4ZTVhYjljYjMsIDB4Y2JlNTViYTMsIDB4ODMwZjZjYmMsIDB4ZDE4NWY1MTksIDB4ODNhNzA2ZjgsIDB4NTViNTdmZTUsCisJMHhkMjdhYjdjYywgMHg0ZWM4MzMzNywgMHg4YmQ2ZWVhZiwgMHhjZGMzMmY0YiwgMHg1YjA2NGViMywgMHhiNzliM2NkOCwKKwkweDVkOTI5Njk5LCAweDYwM2ZkNzUzLCAweGY3NDlmNDU1LCAweDBhNTM0OTU3LCAweDg0M2I1YzA0LCAweGMwYmY0NTdkLAorCTB4NDE3ZTQyOTAsIDB4ZWNmMWM0YmQsIDB4MzU1MWVlOWUsIDB4MTIzZGE3ODQsIDB4M2MyNTZjZjgsIDB4NWM2NjM1YzQsCisJMHgxYzMxNGNkZiwgMHg1ZTUwYjc3ZCwgMHhmOWYyZDIxNCwgMHhkNzFhYTU5ZSwgMHhhY2VjZjFhYSwgMHhmMjc2NTllZSwKKwkweDVjZWMzZjYzLCAweDA3MjkwN2I4LCAweGNjZDllYzkzLCAweDg3ODJkNzRmLCAweDg5M2RlZWZkLCAweDkzY2E3NGFlLAorCTB4M2ZlZTUzNGMsIDB4ZjYwYzQ5ZWMsIDB4NjdiZGJmOTEsIDB4Zjc0NGFjNTIsIDB4M2JmYzcwMTksIDB4NWY3NTdjNjksCisJMHhmNGFlMGM3YiwgMHg5Mjk3ZGU2NiwgMHg0NGZlNzUyZiwgMHhmNjdiMTUzZSwgMHg2N2FhYTI3MSwgMHhhN2RiZTRlYiwKKwkweGY3ZTc0OTVjLCAweGYxNGFjMDczLCAweGY4NTk3NGVjLCAweDIxNDdmMGQ1LCAweDZkNWVhYWNmLCAweDZjNDlmYzkyLAorCTB4YTYzM2VkYWEsIDB4YTM0ZjExZGIsIDB4ZTRhOTdlNWEsIDB4ZjczNWRiN2QsIDB4YWZkNmNmMDAsIDB4NWZhMzhjMWUsCisJMHg1NjdmOTg5NCwgMHhiMWJjNDQzOSwgMHg0N2YzZmFhYSwgMHg1N2Y5YzVhZSwgMHhmZTRmYmM2MSwgMHhlZGFlYzJkZCwKKwkweDkxN2YwOGZiLCAweDdjNjBmZGYxLCAweDdiZTYyZmY1LCAweGQ3MzNlM2EzLCAweGNkZGZkYTMyLCAweDczZGYxYzc3LAorCTB4NjljNzQ0MmQsIDB4ZWE4MTcxODMsIDB4Y2IxNzNlNWYsIDB4NThhOGQ2ZTcsIDB4ZmMyODdjODUsIDB4ZWU1YjY0N2EsCisJMHg3ZjU4MzVkZSwgMHg2NjA2MmZlNCwgMHhmZDI3MzdkNywgMHg1OGFkZThlYSwgMHg1OGI5ZjliZSwgMHgyNDkxZjNjNiwKKwkweDM5MWQ5MGYwLCAweGViY2YyOWIyLCAweDc0NGIwNmMxLCAweDZmYjI1ZWMxLCAweGNmOGUyNWIwLCAweDMyN2IzZTY5LAorCTB4NTEyZmI3ZWYsIDB4NzZiN2YyN2UsIDB4N2U0ODQzZjYsIDB4N2NjMmU4NmMsIDB4ZTg4ZmY3NDYsIDB4YjlhM2NiZmIsCisJMHhiY2M1YjgxZiwgMHhjYTVjOGEwZCwgMHg1ZmRlMTQyZiwgMHgyNDJmZjU0ZCwgMHhhNTQyN2U3MywgMHg2MzI3ZTFkZiwKKwkweDdkYWMxNDljLCAweDJiMjJiZTA1LCAweDkyZTdkZWIyLCAweDViZGQxMGU3LCAweDY5N2JhMTVjLCAweGY5N2M4NGJmLAorCTB4MDZmNzA4ZDUsIDB4YzdmMmY3ZGEsIDB4ODljM2YzZmYsIDB4MTdkYTlmYjgsIDB4MTU1NWZlYWUsIDB4MDdkOTZmYWUsCisJMHg4NGUzNDBhOSwgMHhkZmI0M2FlOCwgMHhiNjZiNmM3MCwgMHgzZjA1N2Y5MCwgMHhmMThjNWUyYiwgMHgyN2QzMGMxZSwKKwkweDM1MTIzYjJiLCAweGQxYWVhNmU1LCAweDdhNjE4M2RlLCAweDcyOWVmMDY4LCAweDA0ZTdjNGEzLCAweGVkNWM4YThkLAorCTB4ZWRkYmJhMzcsIDB4ZmJhNWQ3OTQsIDB4NzEzZjRjYTksIDB4Y2U4NGI1MWYsIDB4ZjdmZjA4YWIsIDB4OTFmZjE4OTksCisJMHg1ZGEyZjY3YywgMHhmMzU2NjczOSwgMHg0ZTYwYzkzYywgMHgwYjc1YjkyMywgMHg5N2RjMGRmYywgMHgzMWUyODliNywKKwkweGYxNDkzZDlmLCAweDMzYjk4MjNiLCAweGIzZjljMzBhLCAweDljMWJkNTc3LCAweDdiODkzMWU3LCAweDlmNDMzMThmLAorCTB4MTNkYTc3ZWIsIDB4Zjk4MzdkYjksIDB4Njk5ZTRkNGIsIDB4NGQwOWNiNTUsIDB4MDE1NTY3ZmUsIDB4ZDI1MDFmYjAsCisJMHg4OWJkMmI2NiwgMHhiYTE0ODdjZSwgMHg3YWVlOWZkYywgMHhmMWRlZjE4ZCwgMHgxOGJiYWJjMCwgMHhmMmRjNGY5ZiwKKwkweGQzYmJjZDMxLCAweDVkODNmNGMyLCAweDExMTYzYzRhLCAweGJmOTgzNTZmLCAweDY5ZWZlNDUwLCAweGU4N2U3ZjhkLAorCTB4OTQ0NWJkYjEsIDB4Y2FmNDM4ZmYsIDB4ZDNjYTIyYjgsIDB4ODdmZDk0MmUsIDB4ZjdjOTlkN2UsIDB4ODZkZmY2OWMsCisJMHhmN2NlY2I3MCwgMHhiOTFlMmYzOSwgMHgwYzdiYThkZSwgMHg4ZDQzZDA5MiwgMHhiYTY0OGZiNCwgMHhjNzdhZTNmZiwKKwkweGY0MmU3MmNlLCAweDg1MGQ4MWMzLCAweDFmMzUzZjhjLCAweGU4NjQ3MDNkLCAweGE3NWQ1MDc4LCAweDNlYmFiZTNhLAorCTB4ZGRiNTdjNzUsIDB4NWYyMmVjZGYsIDB4MTdmNDZmZDAsIDB4NDE1ZmZkOTEsIDB4ZmI2MTMwZTcsIDB4MTdmNzhmZWEsCisJMHhiYmU4NWEyNSwgMHg0OTEzZjg1NSwgMHhiN2UzMGU1OCwgMHgyYWJjZjU3ZiwgMHhmMDZhN2NmMiwgMHg0N2M5NTY1YywKKwkweGZkYWRkM2VkLCAweGFmZjkxMTk5LCAweDgzMjFlM2FmLCAweDdlZWY1YzNiLCAweDc1MmE3M2NmLCAweGRhZmRlYWJkLAorCTB4ZmQ4NWFiN2UsIDB4MjU3NjkzOWIsIDB4ZTkwZTlmMWYsIDB4MWRlYjBlZDQsIDB4YjdiZmYyM2UsIDB4YzdlNDFjOTgsCisJMHg5MDVjOWEyNywgMHgzNDY5Zjg4YiwgMHg5YWZlZjhmYSwgMHhlNGQxMmZkYSwgMHg3OTkxZWZlNiwgMHgyMzQ0ODFmOSwKKwkweDgxZTViZGQwLCAweGY3ZmNlNTU0LCAweDQyYmQ2MDJiLCAweDljMTZlODcxLCAweGQ3NTZhY2I3LCAweGQyMTJjNWJjLAorCTB4MmNmZWFhODcsIDB4MGJkZjg3MWIsIDB4M2VhOTFlZTgsIDB4ZGYyMDI3ZTQsIDB4ZGI2YjE1OTQsIDB4MmRhM2Y2ODcsCisJMHhhMGFlN2JmZiwgMHg2ZWIyNTk2MywgMHgyNGI5MzhjOCwgMHgxYjY1Yzg1NywgMHg5ZTQyYzg3NCwgMHhhODlkMWQ4NSwKKwkweGJmMGQxZGUwLCAweGFjZDdlZTFjLCAweDQwZmNmNDUyLCAweDA3NDNkOWJjLCAweDhhYjcxM2JiLCAweGY1MTNhYjdiLAorCTB4NTEwNGVkYmUsIDB4MTI0YjQwMGIsIDB4ODlmNDk5NWQsIDB4ZmFiNGJhZjEsIDB4MWNjODZjOWMsIDB4ZDhlM2NiYjYsCisJMHhjODUwNGYyZSwgMHhjY2Q0Yjc3ZCwgMHhmNzQzNWJmNywgMHhjMTMyZmQ1YywgMHhkMGM4MjE4YiwgMHg0MTNkNTYwOSwKKwkweDRiYzMwMzI0LCAweDJhNzBjNWMwLCAweDBjYmMzMzM0LCAweDAxNWUxOWRhLCAweDAyYWYwYzFkLCAweDg5Zjg0MzNmLAorCTB4MWVkODBkYWYsIDB4ZmY2NTZlZGMsIDB4M2EyNWYyZTksIDB4ZDc2NWNiYjIsIDB4Y2Y5N2VkMGUsIDB4M2MzNWYwNTIsCisJMHg1N2NiNTAzZSwgMHhhNjNlM2I5YywgMHg4NzcyZjcyYSwgMHg3Y2Q4Y2JjNSwgMHgyZjE1N2JlNiwgMHhlYzRmZTIyNiwKKwkweDM0ZGUwMzE3LCAweGMwMjA5MzgyLCAweDQ2MjY0Y2UzLCAweGRkNzhhNmNlLCAweDZiN2VmN2M2LCAweGJhZTVjOWMxLAorCTB4NjU0N2M0YjMsIDB4MTc3N2FkYzAsIDB4ZGE5NzgxMGMsIDB4OWU2NGY5YTEsIDB4YjkwMzI3YzIsIDB4ZTk1MWY4YzAsCisJMHg4ZGFlNDhmNSwgMHgzMGRkMmFjYiwgMHg3YjIzNGM1MCwgMHhjODRmNGQxMCwgMHhjNTk2NzVhMCwgMHhhN2E3MWNkNiwKKwkweDVmM2ZiNzIyLCAweDdhOGY1MzM2LCAweDY2YjRhY2I0LCAweDVmOTBhOTBkLCAweGU1MTU0ZWU2LCAweGQzMmYzNTg5LAorCTB4ZjNmYjdkNTEsIDB4NzE3MjhhOTcsIDB4ODFjMWE5NGQsIDB4Y2JkYWU4NWUsIDB4ZmE4MjVlNjYsIDB4MjdkY2FkZDksCisJMHhhMDExYTMzNywgMHhiNjcyNjM3YiwgMHgyYjc2MTczOCwgMHg3MjRkY2FmNywgMHgyZmJhNWFlNiwgMHg1ODBkYmE2NiwKKwkweDAwNjNiOGRmLCAweDIyZDdlY2ZjLCAweGI4YmM5MWI3LCAweGIzN2IxYzQ1LCAweDNhYWZkMDU1LCAweDJlNGI3ZGQ2LAorCTB4MmZiMzMzZDksIDB4Yjg3NDg2ZGUsIDB4MjhkZDZkNzksIDB4MThmNzliYjIsIDB4YTQ5ZmY4YzUsIDB4ODFiZGM2ZGEsCisJMHhjNDk5MzJmOCwgMHhiZjc1NTZiZCwgMHhjMTg5ZWY1OCwgMHhhZGIyNDA3MiwgMHhhZDBjYzk2OSwgMHg1OWM3NWQ0YiwKKwkweGU5ZDc3YmNjLCAweDc3NGZjZGU2LCAweDAyM2QyMDZmLCAweDE1YzcwNzM2LCAweGJlZmIxNDYzLCAweDM0YzRjYjY1LAorCTB4MWQ3MDMwZjQsIDB4MjA0NzVlNTYsIDB4MGI0ZDc3MmUsIDB4ZWU5MWRkNTYsIDB4MWJjNjg0N2EsIDB4Zjg3YzEzODgsCisJMHg3NTI5ZDEwOCwgMHg3NWNiZTg3OCwgMHhjNDNiOTQzZSwgMHhkZmI1ODFmNywgMHhiZDIzZWFiYywgMHgwNDJlMjlmNCwKKwkweGFlNGRmOWM3LCAweDQ3NWE3MWZiLCAweDUxOTAyZTkzLCAweDQ1ZmJmNDhhLCAweDA1MDA3YTJjLCAweDkwOTZiZTIxLAorCTB4MGYxMDczOTgsIDB4MWFmMDRlNmQsIDB4Nzc5NDVlNTksIDB4OTlmOWNhMzYsIDB4OGIwMzE3MmEsIDB4NGZjNDNjNzEsCisJMHg4YjU1Y2I5OSwgMHhjYzU0MjJlZSwgMHg2MDkzN2U2ZSwgMHgxNmJkYmJhNSwgMHgxNzllNjg2YiwgMHg3MjRkM2Q2OCwKKwkweGU0Zjg4MWIwLCAweGM2MDdlMjY4LCAweGM3NmU1OTRmLCAweGY0NTRmZTBhLCAweDllYjZmNzU5LCAweGEyODhjNmRiLAorCTB4YjJlNGMyMGIsIDB4YWY4OWRiNjksIDB4NmY3NDg2ZmYsIDB4NTA3MTY2M2EsIDB4M2UzYzkwZjMsIDB4ZTc5YzQ2YjYsCisJMHg0NmZhMzQ1YSwgMHg1ZDA5ZDM5NSwgMHg5YzM4M2UyNiwgMHhjNWEyZjViOCwgMHgwN2QyNmVkNCwgMHhiN2E0ZDliZCwKKwkweGRhMDZmNzI3LCAweGU4MWU3ZGM4LCAweGM4NDYzYmRlLCAweDdmZDdlYTg5LCAweDdkOGI5ZDIzLCAweGZjOGNjY2Y5LAorCTB4ZjkxMDQwOTEsIDB4ODM5YzVlMjMsIDB4OGFmNGZjNzMsIDB4YWQ1ZjA3MzgsIDB4ZWNhOTNkZTQsIDB4Nzg4YjdkZTEsCisJMHg1NzNiOGQ1NCwgMHhkZTJkYmNmNiwgMHg2ZmYwNzk4NSwgMHgxMjJiYmQwNSwgMHg3MTNlOTY3ZiwgMHg2ZmM0NTVlMywKKwkweGQ0OGJlZjkxLCAweDY5NDliNDc4LCAweDdiZDdhMmI3LCAweGYyMjdlZDM3LCAweGM1MTM1MWJkLCAweGJmYzM0NWEzLAorCTB4YTI3YTZhMzcsIDB4YzhkMWUzOTYsIDB4YjliZDQ2ZjcsIDB4YjE0YWZlNGEsIDB4YTFmOGEwOGYsIDB4YjQzNjk0NGIsCisJMHg4N2M3MGIzZiwgMHhmNzA5YWY0NiwgMHgzNWM5ZmFiNiwgMHhkMzk1MmIwZSwgMHhjN2Q2MGUyZCwgMHhlMTBlM2Q1NywKKwkweDY0ODllMWVkLCAweDllNTUxOWU2LCAweGQ4OTNhZDk3LCAweDVhZjE1NmJmLCAweDQ5YzliY2ZjLCAweDdlN2UyOGViLAorCTB4ZThjZGZiMTQsIDB4ZTk3YjhiZWYsIDB4ZGU5MTNlNGEsIDB4ODM3YmQwMTIsIDB4MmNjMTg5Y2QsIDB4YjliYTY3YmEsCisJMHhmZTQxZGYzYiwgMHg5ZDVhMWZmOCwgMHg2ODQzMGZmMCwgMHg1MDNjNmE3ZCwgMHg0YjU0YmYyNywgMHgyZDhlODdlZiwKKwkweDNmMGIzOGMyLCAweGE2NzllZWFkLCAweGQ1ZTU4Y2NkLCAweDEwNTVlOWViLCAweDEzZjM4NGE1LCAweGRmMmFhZmM4LAorCTB4YzY5NzgzMjksIDB4ZDU0M2VmMDEsIDB4MzkxNTNiMDgsIDB4YzBlOWE1MzcsIDB4MTg4Zjg2MTYsIDB4MGRiMDA4ZGIsCisJMHgyOTMwMGY5MSwgMHg0ZmNkOGJmNCwgMHgzOWM3ZDRkMiwgMHg0ZmY0ZDAyZSwgMHhkNGQyY2NhOCwgMHhmNzg4YzViNywKKwkweGZhNzFlMDMyLCAweGVmNDIyYTBiLCAweDNmOWQxMjQ4LCAweDAwODNmNGQxLCAweGJkMDhhZGZlLCAweDdlMjdiOTE3LAorCTB4NGY3ZTRlZWEsIDB4M2NlMDZmZTIsIDB4MjU2NWYyNDUsIDB4NzkyNmY2OWEsIDB4NWRmYzRjYWIsIDB4NDM1ZWE1ZmQsCisJMHhhNjUyOWZjZiwgMHhiOTU2ZjExYiwgMHg5YzFjZmQxYiwgMHhiNjlmNDI2NywgMHgwMWUwMjYzZSwgMHg1YmIzMTdlYSwKKwkweDk4NGJjOWFmLCAweDg1ZjJkYTZjLCAweDYyOWU0YTc5LCAweGU0ZDU4YzJjLCAweDJlZjEwNjI5LCAweDYxZDhmZWY4LAorCTB4MDU0NWYzMWQsIDB4YmFhYWZjZTQsIDB4MDA2Y2YwOGMsIDB4NmYxYTJkYWYsIDB4NWRmODQwYzcsIDB4MWM1YWM2YzcsCisJMHg0MjZhOTZmNCwgMHhjOTMyY2JjZiwgMHg4YjRiYWE0MSwgMHhiNWIzNTFmZiwgMHhkNmVkMWZmOCwgMHg1MmNjN2JlMiwKKwkweDliZDNiZTJkLCAweGIwYmVmOGI1LCAweDRjZDc4YjQ1LCAweGQ5NmYxNjhmLCAweGRhNjgyNmViLCAweDM0NmJkYmRiLAorCTB4NTc4ZGJjZTUsIDB4ZTQ1ZmRhNjgsIDB4OGYyOWExOWQsIDB4NGQ3YWYxN2IsIDB4ODU4ZWMyZmIsIDB4YWVlMmZhOWEsCisJMHg5NTdhOWFlNSwgMHg4M2UzODZjZiwgMHgxMWQ1YmVmMSwgMHhkZDAzYTZmYywgMHg3NGEwZjg2OSwgMHhmMzM1Y2ZlNywKKwkweDlmZjQ1MGZkLCAweDA1ZThhNzlmLCAweDJiZDdmZTg1LCAweGY4ZGRlNTc2LCAweGI4OTJmN2MzLCAweDdhMTU4YjRlLAorCTB4NTBkZjMwNzAsIDB4ZWU3OGUwNmQsIDB4NmQ3MjViM2QsIDB4YzUwNWU5MWMsIDB4N2IxNGI5ZGUsIDB4ODk0ZjM5MDcsCisJMHgxZDk0NTViMiwgMHhhMmJmNzE3ZSwgMHgzNmFiOWY2NCwgMHgyY2Y3NDZkZSwgMHg4YThhZmRjNCwgMHgwOWI1ZWRjMywKKwkweDFkZTIzZWQ0LCAweDQ5NGFmNGQ2LCAweGY5MWRkZTczLCAweDY3YTY2YjJlLCAweGQxMjA5Y2FkLCAweDNmNzE0NGJkLAorCTB4ODQxZWYyMzEsIDB4ZGVhYjNlZmEsIDB4MjczOWEzMTksIDB4OTZiZGVlMWYsIDB4NzhjMjVmOWEsIDB4MmYxNDhjMDEsCisJMHgzZWZjY2NlOCwgMHg3MjFmZGEzMSwgMHg1ZmQ5OTQ2YywgMHhmNmZmYjM3MywgMHg3OWNkYzk2NywgMHhmZWNjNmJhNywKKwkweGVjZWZlMjBjLCAweDc5ZjVlZWIxLCAweDNhYTNiNzg4LCAweDNkZmQ4ZDg3LCAweDAwZDZmZGU1LCAweDJmZGY4YzZkLAorCTB4M2NhNGNjZjUsIDB4YmI4NjAwZTksIDB4ZGZkNGQ3OTQsIDB4YmQyNjYzYjMsIDB4NWJlNWM0NWIsIDB4YWMyMjE1MDMsCisJMHhlNjhmM2ZhNiwgMHg3MWE0MWZiOSwgMHhiYmQ2NDgwZSwgMHhiYmVmYjE0YiwgMHgyMGNmM2UxMywgMHg3M2EyNjY3YiwKKwkweGZmM2UxMmZlLCAweGZjMmYzODdlLCAweGVlMTQ3YmZjLCAweDQwNmRmNTBmLCAweDc5ZjBmMzY3LCAweDhlMjVjZmVlLAorCTB4YzFhNzNlNTMsIDB4NzdlNGMyYWEsIDB4NGY3OTQxOWQsIDB4YjliNmUyMmEsIDB4YjhkNGJlMGEsIDB4ZmYzMjhlNmQsCisJMHgyOTYyMWMwMSwgMHg1ZGI5ZjNlYSwgMHhhY2JjNjY3ZiwgMHhlMjUzZWI0OCwgMHgxNTg3NjZiZCwgMHhhYzcxYmZjNywKKwkweDdiZWY4NGE1LCAweDIyMWQ0YjM5LCAweGI4ZTM1N2RlLCAweGIxZjdmMjMxLCAweDg3YmE2N2IzLCAweDg4ZWQyMmI1LAorCTB4OTc4NjllMjYsIDB4NTdjYzg3OTIsIDB4NDJjNWU2NDYsIDB4MWZlMzE2ZmIsIDB4NzZjYjFmNTgsIDB4NzRmYWMwZTgsCisJMHhjNjg2M2ZjZSwgMHg4NWY5Y2EzZiwgMHhmYmRhY2RiOSwgMHgzZTViZjNkZCwgMHgwMmRmZjBkMiwgMHhmYTlhMjdjZiwKKwkweDMwZDA0YTQwLCAweDc4MWZmNzA2LCAweDFiZDRmNDc1LCAweGFmZmQ3ZjEwLCAweDllMjgyYTk4LCAweGU0ZjViYTQ1LAorCTB4MGZjNjg3OTUsIDB4ODk3Nzk3ZGMsIDB4YjRjZTFiZjAsIDB4MWQ3OWNmY2YsIDB4NWFmZGNhYmQsIDB4NWJmYjlmNzUsCisJMHhkMDM5NzFmNywgMHhlZmI4ODgxYSwgMHhiZmM0ZDFlNCwgMHgwOWZlMzQyYSwgMHgwZThmYzlmMiwgMHg0MzFjMjM0YSwKKwkweGU3NjY3M2U1LCAweDU3YTkzODhiLCAweGFiZGE3Nzc5LCAweDU1ZWQzYmJjLCAweDJhZjY4OWRlLCAweDk1N2I0MmVmLAorCTB4YmJlYWExNzcsIDB4OWMwOTVlZGQsIDB4OGU2NGJmNzQsIDB4ODE2YTdhZTQsIDB4MGY3NmVmYzQsIDB4OTY5YjNlZDEsCisJMHg1ZGU4OGIwNywgMHg2MDcxNTM2MywgMHhiYmYzMjQ5ZSwgMHg3ZGY0MjNkZCwgMHg0NWJiNzc4OCwgMHg2OWY0OTU5MiwKKwkweDZlZjQzNWVhLCAweGNmMDhmMGY3LCAweGQ5ZDhiMjUxLCAweDUwZDc4OWY5LCAweDI4ZDg3MGJjLCAweGM1ZjRhM2U0LAorCTB4N2JkMjY2NmYsIDB4ZGQ1M2M3YmQsIDB4M2ZiZjg5YzcsIDB4ZjMxZjY0OTUsIDB4OWYxMmViZjMsIDB4NjAzMzgzMmIsCisJMHhlZjE2NzE5YywgMHgxM2NiYmY3YSwgMHhmMzI3MzRlNywgMHgwYTg5YjljNCwgMHhiZDBiZTY0NywgMHg5Y2IwNGE1NiwKKwkweDJlNmY3MmU4LCAweDY4ZGFiYmJmLCAweDM4NTc3N2UyLCAweDc2MTc1MzlmLCAweDdkZjIyMjFmLCAweDRkMWZjOTVjLAorCTB4NmExZmQyM2UsIDB4NWYyMTI3ZGUsIDB4YmJkMzM3OWMsIDB4Y2E2NzVhMzksIDB4NmVmMTI2ZmQsIDB4YTBjZmUwMmUsCisJMHgwZjc0NzY3NywgMHhiZGYyNDVjYSwgMHgxZGUyOWMxYiwgMHhmMGE2ZGU1ZSwgMHhmOTA5MzBmNywgMHg0NWJkM2RjYSwKKwkweGI3YTc3OWEwLCAweDdlYzBlN2IyLCAweGU1YWYyN2QyLCAweDUzZjM5M2I5LCAweDU2YzdlZjQzLCAweDdmNjc2ZmM2LAorCTB4YzZkZjIwYWYsIDB4Nzk3YWUyZjMsIDB4ZWUxN2E4ZmYsIDB4Yzc5Y2ZhMjQsIDB4N2U1NjYxN2MsIDB4ZDdmZmY0NzksCisJMHhmNWJjMzg2MCwgMHg1YTNmZjYyZiwgMHhmNzdhMTk5MCwgMHhhZGRlZjYxNiwgMHhhZjJjM2YyMCwgMHgzNDNmYWVhNywKKwkweDQyZTVlOWNlLCAweGU1YTk3YmNkLCAweDkzZGQ4ZjQzLCAweDc0ODY3MjRiLCAweDU5NDhmOTExLCAweDg4NjMzZjlhLAorCTB4MDVmM2QzZmUsIDB4Nzc0ZmVmZmQsIDB4OTdmOWEwNGQsIDB4NjBiYzhiMzcsIDB4NmZkYTZmODgsIDB4ZGNlODk4ZjksCisJMHgzZWYyMTk2MywgMHg3MjNmZGFiZiwgMHhmNWI3MmI5ZiwgMHg5ZjcwM2UzMCwgMHg2MTdmNjhmMywgMHhmMDhjYmNmYiwKKwkweGJmYjNlZWE1LCAweDA1YTNlZjdiLCAweGRmZGY3M2I2LCAweDZlNzc3ZGY3LCAweDZkNzE4MTFhLCAweDc2Nzk1MGQyLAorCTB4N2U2MTNlYjQsIDB4M2ZlZDQ5OTksIDB4OGZlZGFmNTYsIDB4YjFlNTM5MGUsIDB4ZDFkZTQ4YmIsIDB4ZTI1NGU5NmYsCisJMHhjNGNiYjIxZSwgMHhlZTVkYWExNywgMHgyOTIwZTI1NCwgMHgwMmVkODNiMCwgMHg3MTcyNGJjZCwgMHhmYjYxZTRiNywKKwkweGRhM2JlNmE4LCAweDk0N2ZiNDI0LCAweDYxYWY3MDU3LCAweDY4NWYyMTdiLCAweDc3NWYxMDcxLCAweDQ5ZjllZjIyLAorCTB4NThjZWY0MWUsIDB4YzQ0NzczY2UsIDB4NzU4YjNmZDcsIDB4YmM3ODQ0ZGYsIDB4YTMzNWFmZjksIDB4ZjJkZWZlMjgsCisJMHgzODk0MmI5NywgMHg3MmFiZDg0ZSwgMHg2OWNiM2Y4NSwgMHg0MTQ3ZGE3ZSwgMHg5OTZkZjMwMiwgMHg3MzBhYmViMiwKKwkweDU1YzlmYjMzLCAweDVlNDU5MWUwLCAweGFjOTNjOTQzLCAweGRmZjFjMWRmLCAweDE0MWEwMWZmLCAweDQzZDBhYWFmLAorCTB4MDAwMDQzZDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdXNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYTk4ZjhhLCAweDMyZThmNDMwLAotCTB4MzFlOGE0MzAsIDB4NDNkNGRjMzAsIDB4Y2YxMmQzODgsIDB4YmY0Y2EyZTEsIDB4ODMwMzBiMzAsIDB4MDM4YjEwMjgsCi0JMHg3ZjEwMjRiMSwgMHhmODYwNjQ2MywgMHg3ZWJjNDhjZSwgMHhiYjA0MTE1ZSwgMHg4MTgxODA0NSwgMHgwNzBmYzgwZiwKLQkweDE5MDVmZmQyLCAweDMzMGIzZTE4LCAweGY5MDNmMDMwLCAweDZkZmM4MGIzLCAweDg4MDg3YzQwLCAweDM3NjI4MGMzLAotCTB4MjA2N2Y0ODAsIDB4MDJjNDBmYmUsIDB4MTdjZGY4MjIsIDB4NDE3ZjIwMjQsIDB4MDdmZjk1MDgsIDB4MTA0MmZmOGQsCi0JMHg2MTYzN2ViZiwgMHgwNDk2ZjJmYywgMHg0ZGUxYjFlNCwgMHgwZjhjZGMwNCwgMHhlZjQwYTc3ZiwgMHg2YTg3ZTA0MCwKLQkweDU1N2Q3Y2E4LCAweGEwMmIwNjA2LCAweDg0M2E4NzU4LCAweDdlNDkwOGZmLCAweDQwY2M1MDE2LCAweDkzZTZjMjE1LAotCTB4MDU1MDYwNjcsIDB4NjFhYjFmZjIsIDB4MjgxZjk3MzcsIDB4NWY5NDA2YWYsIDB4MDAwNzM1MDYsIDB4MTVlNWFjNmYsCi0JMHgwMDAwMDM2OAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTg5NDczOGEsIDB4MTgzNTdhMTgsCisJMHgzMjZiMzYxOCwgMHgzMTY4NjgzMCwgMHgyMDMxODgzMCwgMHhhZjg1NjhlNCwgMHg5ZmE2NTM3MSwgMHg4MTgxOTU5YiwKKwkweDgxZjk4ODE3LCAweGQ3ODgxMDU4LCAweDZjMzAzMTMzLCAweGZmNWUyMjYwLCAweGZiMDQ1MTExLCAweGMzMDMyMDllLAorCTB4MTk3ZjIwNTEsIDB4NjYxNGVlOTAsIDB4NjQwNTU4NjAsIDB4MmZlMjAzMWYsIDB4MTA4MGJlNDAsIDB4MTAwYzgzMDMsCisJMHg2MDYxMTVmZiwgMHhjMWQyMDUzMCwgMHhjNDAzNmM0MCwgMHg5YmYxNDVjNywgMHg3YzgwODI3ZiwgMHhiZjJhMDhiYywKKwkweDI3OWY4ZDFiLCAweDI1ZmY1ZjhjLCAweDBmZjJmYzExLCAweGMzNjNjODA4LCAweGM3ZTQxNjMyLCAweDdhMDUyMjQ3LAorCTB4MjkzNzAyMDcsIDB4Y2E4ZmYyYTIsIDB4NTQzYzMwMzMsIDB4NTFkMDYwNjAsIDB4OTE5YmYwODIsIDB4NjI4MGVkZTQsCisJMHhlYzIxZTRjNywgMHhiOGMwOTIyOSwgMHgyOGI1Y2EwNywgMHgyYTc3Mzc2MiwgMHg1MDA0ZmU1MCwgMHgzNDg5NGJjZSwKKwkweDQxZDNkY2Y3LCAweDg0MzRhZmU1LCAweDNlYmMwMGQwLCAweDAzYThlNDE0LCAweDAwMDAwM2E4CiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDUxNDc4MDksIDB4ZjRmNTcwZGEsIDB4NzMyNjRjZjQsCi0JMHgxMDkwOTI2NCwgMHhhNzA5MzBhZSwgMHhlMTVjMzgwYSwgMHgxMDg0Y2EzMCwgMHhhOGVhMjQxNiwgMHgxMzg4YTg4OCwKLQkweDJlNDIxMDgxLCAweGY1NzE3NWQxLCAweDExYzNhN2ZiLCAweDllMzc1OTQxLCAweDFkNDdmYWNiLCAweGEyMmNkYzEwLAotCTB4NjAxODg4MDYsIDB4YjIwMGMxYzAsIDB4MTc2MWJiOGEsIDB4YzM2M2Q3MTUsIDB4MDE5MjFhMGQsIDB4ZTVjNThmMTUsCi0JMHhlYWFkZjdhYiwgMHg0NGNlZWU5OSwgMHhlZmYzZWJhMiwgMHhlM2ZkZmI3ZSwgMHg1NzU0NTNlMywgMHhlZjU1NWJmNSwKLQkweDVkYmQ2ZjVkLCAweDcxMDI0YTMxLCAweDAyZTQyNmY2LCAweGYyMTFjNmZjLCAweDQ5MDg0ODhjLCAweGUzNmQ5Njg5LAotCTB4MTc0OWM3YzMsIDB4OTJjZGU0NDIsIDB4ODg0MGFkNmIsIDB4MzQzZGJhZjAsIDB4ZmIyMTA0NmUsIDB4MzMwMTA5NTYsCi0JMHg1ODc2ODdhZCwgMHhkM2Y1YTEwOSwgMHhjYzA3ZDczNSwgMHhkNDNlYjQxOSwgMHg5YWZhYzFlYywgMHhiZWU3YWMxYywKLQkweDQ4YzNhZWZhLCAweDhhYWZhNWViLCAweDc2MWJhODQ2LCAweGRiMzQ3MjljLCAweDM3MzcyOTA4LCAweDdkMDU3MjNkLAotCTB4MjQ1NTdlMWUsIDB4YzQ1MGU5YWIsIDB4YjI0MGM1MzUsIDB4NDcxZTM5MDgsIDB4YWQxOTZmZDgsIDB4Njg1MjEyYTcsCi0JMHg1NWQyZDU2MSwgMHgzY2MyNjczYiwgMHhjNGNjMWE4YSwgMHg2ZTk0ZTE0MiwgMHgxNWVkN2I5OSwgMHhhZjc3M2ViNCwKLQkweGU5NGJhMDQ0LCAweDc3NTM0YWRhLCAweDEwMTc5ZjVhLCAweDY4YmVhMGVhLCAweDRlMzg4N2M3LCAweDU0NTI3OGRiLAotCTB4NGY5MDg4MzcsIDB4MzVjNDcxZmQsIDB4NGQxZGQ2ODAsIDB4ZTdkMTM3YTksIDB4MTMwZDgxYzUsIDB4N2FmMTdmYTEsCi0JMHhmZGEwNmRjMSwgMHg3ZTc2NmI4YiwgMHhlYjhiZjAwNCwgMHg4NTIyYmVhNSwgMHg0YWQ2YmYzZiwgMHhkOGQ5MDM1YywKLQkweDYzYWMwODE3LCAweGRmMzBiNWNlLCAweGM0NDgzZmQyLCAweGU3NDVlYjRjLCAweGMwMTEzNmVmLCAweGU0ZGFiMTkxLAotCTB4OGZmOGMzYjUsIDB4MTg3NjVjOWEsIDB4NTFjNzE2YTcsIDB4N2JmYTU5ZjAsIDB4YWY3ZDBlM2EsIDB4MGRjMTY1ZWMsCi0JMHgxMDMzMmI0YiwgMHg3NWE3Y2MxZiwgMHhmM2ZhNjU4YiwgMHhhNTU3NTgzNiwgMHhiZmJjM2ZhOSwgMHhmNDEzNDFlNSwKLQkweGQ4MjgxYjliLCAweGZjYzE3MTZjLCAweGMyMjY5OTU2LCAweDk5NTY2YjNjLCAweGUxNDUwNzBhLCAweDUxN2RhZmNkLAotCTB4MmJlM2FmMzMsIDB4YTlmNTc0ZmIsIDB4YTdlNWY1ZGEsIDB4NzM1YThhN2UsIDB4ODg0YzVlYjQsIDB4ZjMwNmNlYTcsCi0JMHgxZmFlOTgwZSwgMHg1NDdlN2QxYywgMHhjZjdhNDQ0OCwgMHgyYjg5MTVhZiwgMHg1MjlmMGEyZSwgMHhlZmNiOWYxZSwKLQkweDFmMDI3ZmQyLCAweGQ2MDdiNzZjLCAweGI1ZTk0NDY2LCAweDhlZmYwOWMwLCAweDkzYWNlYmQyLCAweGNlMThjZmQzLAotCTB4Y2E1N2MzNTIsIDB4NzQwZTgwNDcsIDB4Mjc3ZWQ1M2UsIDB4ZDNmOThmOTYsIDB4ZWZjMjdjYjAsIDB4ZTUzZGJjNDIsCi0JMHg0YWU1ODgxZiwgMHgzZjlmMWJiZiwgMHg2NThkMWZlZCwgMHhlNTgzZGY4ZCwgMHg1ODQ5ZmViMywgMHhlYzVlZmMwNiwKLQkweDFkM2ZkYWI3LCAweDFmN2UzNWNiLCAweDVmYzE3ZjNlLCAweGJmYWQ2NTg0LCAweGYzYWY5ZjAyLCAweGJkNzJjNDJmLAotCTB4MmZlN2M2NWYsIDB4NTk2MTk3ZmIsIDB4NzJjNmFmZTcsIDB4OTYyNTdmYTMsIDB4ZjYwMGZlZjUsIDB4ZDdlOWNjZGIsCi0JMHhlN2MzYWZlMCwgMHg1ODBkZmQ1YiwgMHgyYzIxZmQwNiwgMHg2MmY3Zjg3NywgMHhkNWUzODJiOSwgMHg4YzcyNGQ5MSwKLQkweDBmMGUyZjE0LCAweDIwNzE1MjcxLCAweDFjOWVmOTQ5LCAweGJjOTNkNjg5LCAweDQzM2E5ZWFjLCAweDdhZDEzMWNlLAotCTB4MjlkNjhmYWEsIDB4ODQ5N2JhOWUsIDB4ZGViNGNjNzIsIDB4YTdiNTgyYmQsIDB4YzdjNjQwM2YsIDB4Y2NiYTdhZDEsCi0JMHg3ODU3MzNkYSwgMHgzZDY4NWJjNiwgMHhmN2I1OWFiMywgMHhjN2M3OTFhZiwgMHgwMGZmN2FkMywgMHg3ZDc0YmY2YiwKLQkweGQ2OTViYzY4LCAweGVkNjNhZDJmLCAweGQ3MjQ4MjQzLCAweDQyNDNlYjQ2LCAweDlmNmMzZWFjLCAweGViNGVkNzI3LAotCTB4M2Q1ODlhYzMsIDB4ZDczOTIzZWIsIDB4Y2Q1OWViNDEsIDB4MmRiMWZkZWMsIDB4NWEwNGRjYTEsIDB4ZWQ2NjFiMWYsCi0JMHgxNjZmOWQ1NywgMHg2N2Y4MzE1ZCwgMHg0NTliZTRiMywgMHhmMjAzMmQyOCwgMHgxYmIxOGYxNCwgMHg3NzdjOWJhZCwKLQkweDk3YzUzNzEzLCAweDFjNjNkNTNjLCAweGM5MjNmMTQzLCAweGJlNGJiZWQ4LCAweDRjMWJkYjFkLCAweDI3YmZiNjMyLAotCTB4NTZmYjYyMTcsIDB4MjdlZDgwMjksIDB4ZGY2YzcyZTUsIDB4ZmI2MDBhNmEsIDB4YWM0MmYyYjcsIDB4YjYxMGE1MDcsCi0JMHhiMTJiMmFkYiwgMHhjMjE0ZDA3ZiwgMHg4N2NhZjRmNiwgMHhkNDg3N2RiMCwgMHhjYWVlZWQ4YywgMHg4NzdkYjFjNywKLQkweDFmZGIxOWE5LCAweDk5ZTM1MjViLCAweDBiMGZlYjQwLCAweDJmODFhN2JlLCAweDIyYmUwYjE3LCAweGFkZjgwN2QyLAotCTB4Zjk0YmNkMmUsIDB4ZDMyMDRhYWQsIDB4MDExN2JmODEsIDB4YWFmNmQyNTMsIDB4NDdkNDI2NmUsIDB4N2FjZTNmOWIsCi0JMHg2ZjM4MTQ1ZSwgMHhlMTdhODE3NiwgMHgyMDY1MGYwYiwgMHg4ZTExZTc5YywgMHgxNzg4ZTE0NCwgMHhjOWY1OTM4NywKLQkweGFjOWMwZDY4LCAweDM4MTQ4YTRmLCAweGE1OGUxMWViLCAweDdmMzY3MDczLCAweDlmM2I1NjMyLCAweDM4MTU4YTRmLAotCTB4MTQ5MTkyYWYsIDB4ZWI3M2JkOGUsIDB4YjY1YmZhY2EsIDB4MmI3ZjNlNzYsIDB4YzBlY2UwNTEsIDB4NmU3NjI0ZjksCi0JMHhiNGM3MGQzZSwgMHgxNjM4NjlmOCwgMHgzODliY2ZjMSwgMHhjZGNlOTQ5ZiwgMHgyZDcxZjQ2NywgMHg4ZjFmNDY3ZSwKLQkweGUxMDlhN2UwLCAweDljMWNlYjc0LCAweGZjNWFlMzg2LCAweGUwOGYxYzM0LCAweGQzODQwM2U3LCAweDFhZWI3M2FiLAotCTB4OWY4YjQyN2QsIDB4ZjgyMjI3ZDEsIDB4YzlmODhjMzksIDB4YWQ5YzFjZTgsIDB4ZDlmOGI1YTcsIDB4OWY4MjNhN2EsCi0JMHhiZjRlMTBjZiwgMHg2YzZiYWRjZSwgMHg2MzNmMTZhYiwgMHhmOWY4MjM1YiwgMHg0OTc1ZDcwMiwgMHg2ZDZjZTBlNywKLQkweDZiNjdlMmQ1LCAweGRmM2YwNDZiLCAweDlkYzE5YzIxLCAweDM2ZDhkNzViLCAweGI2YzY3ZTJkLCAweDEyNjNmMDQ1LAotCTB4Y2VkMGNlMDAsIDB4YTVmODI3Y2QsIDB4MmZjMTNmMTYsIDB4NDA0OWY4MjMsIDB4MzczYjIzMzgsIDB4NWE3M2VjOWYsCi0JMHg4YjlmNjRmYywgMHhlMTBkMjdlMCwgMHg5YzFjZTk4YywgMHg3ZTJkMzllMCwgMHhmODIyZTc4MiwgMHg1NzM4NDBjOSwKLQkweGQ5NWQ2ZTc2LCAweDkzZjE2OTVmLCAweDNmMDQ1NWZkLCAweGY3NDAwYTk3LCAweDQyMWYzZTFjLCAweDg2M2JkOGUxLAotCTB4MmQzYmUzYjMsIDB4MTc3Yzc2N2UsIDB4OWM3MGNmYzEsIDB4Y2Y5ZjFlNGYsIDB4ZjU1Y2UwNDUsIDB4YWU3ZTJkMGYsCi0JMHgzZjA0NDdmYSwgMHg3MjY3MDhkOSwgMHhmOGVjZTBlNywgMHgzYjNmMTY4NywgMHg0ZmMxMTFmZSwgMHg5YWViYWUxZSwKLQkweGFhZWJhZGNlLCAweDVjZmM1YTBiLCAweDY3ZTE4MTc1LCAweGRjYmFkMWQ0LCAweDZkNGVkYTA0LCAweGFmYTQ1YmEzLAotCTB4ZjFlZjNiOGMsIDB4M2EyZWI0MDgsIDB4YmE3NDVkNTksIDB4YTIyZGY4MDksIDB4MjY5MDhmZTIsIDB4YjdkZjQ4OGYsCi0JMHhmNjFjNGZhZCwgMHgyNWZiNTExMCwgMHg3NTgyNmZlMywgMHhhNjk3YTlkOSwgMHg0NjEyNGJmNiwgMHhhMGZjNmJjNywKLQkweGE2OTI0ZjQ0LCAweGJiYTkzYzllLCAweDM3OGE3ZmE2LCAweDc1ZGVkMzUzLCAweGY2OWFhNWZhLCAweDlhNjFiZTZlLAotCTB4YjFhMjhmN2EsIDB4MmFiZGZlOWEsIDB4YmRlYTZiYzYsIDB4ZTlhZDVlMTcsIDB4YTBkZjIxOWYsIDB4NzY1OWY3YTksCi0JMHhiZjdmYTZhYiwgMHhlZDM1M2JlYSwgMHg2YjE2NTYwMywgMHgyYzA5MmZkYSwgMHhhYjJmZDRkMCwgMHhmZmE2YTVmZCwKLQkweDlhNDViYWUwLCAweDFlMWJjYmY2LCAweDBkMGZiNGQyLCAweDBmYTlhNjNkLCAweGE2YjRmYmRmLCAweGQ1YTZjOGZmLAotCTB4MDc1MWY2OWEsIDB4YzdkYTY5ZDcsIDB4ZDRkNDZmMzQsIDB4NTViOTM4YWYsIDB4ZjBjYWZmZDMsIDB4YjhmYTlhMWIsCi0JMHhmNGQyZGZhZiwgMHgxZTczOTRhNywgMHg0NWQ3OGNiZiwgMHhmYjgyMGI5MCwgMHgwOTliYjkwMiwgMHhkZDkwYzVmZCwKLQkweDc3NTM3NTg0LCAweGQ4MjdkYjFiLCAweDI5NDc1ZDBiLCAweDlmMDY0ZGRkLCAweDgxMmQwYmFiLCAweGZkZGE4NGU2LAotCTB4MDM0NWVlOWMsIDB4ZGM1ZjI5OWEsIDB4YzAzN2Q2M2IsIDB4NmJkZjlmNDksIDB4OGNlZTVkZjIsIDB4N2U1MDlmZTEsCi0JMHg5NDFhNDgxMSwgMHhmYTk0MDMyZSwgMHhjNjI1MDdmNiwgMHg5YzdiZTNhZiwgMHhiZTg4N2ZlZiwgMHhmNzA4NmU1ZiwKLQkweGJmZjVhNDRmLCAweGMwMDI3MjFiLCAweGQ0MDgyZmRmLCAweDE1N2NhN2ViLCAweGU4MGE5MjJmLCAweDFlMjY2ZjE3LAotCTB4MzMwN2RmZTAsIDB4NTU5NzllYjIsIDB4MTdhY2JjZmMsIDB4MGEyMTUzOTUsIDB4NGJlNDk5NzcsIDB4NWQ2NDNmMDMsCi0JMHhmODMyYmJlNSwgMHhlOGJkNTUyOSwgMHhmMjEzYmFiYSwgMHg0ODZlZjBhMiwgMHhlZmRmNGJlZSwgMHhhM2U2OTg1NSwKLQkweGVhMjZjY2YwLCAweDM3YzdhYmU3LCAweGUxMDdmMWQxLCAweGNmYzA3NWY4LCAweDk0ZmM2MTliLCAweDMzOWJlM2Y2LAotCTB4OGZjNjZiNDcsIDB4OGNkMjJmNGIsIDB4ZTNhMjY3MWYsIDB4YWZiZWE5M2IsIDB4NGY4Zjk4ZmMsIDB4OTA5NjMyODksCi0JMHgzOGM3YzI2ZCwgMHgwOGJkMzliZSwgMHg0NGQwN2ZjNywgMHhmMWVhM2RmNywgMHg4N2UzMjNlMywgMHgzYTdiZmQ2MCwKLQkweDU4ZTY3ZjVhLCAweDhiZDNmYWVkLCAweGIxMzdlYmI1LCAweDc5NTViZmY1LCAweDhmMWY4ZjhjLCAweDM4NWI3ZmViLAotCTB4NWU5ZmQ2YzYsIDB4NjY2ZmQ2Y2MsIDB4M2JlMzIzNzAsIDB4ODI2ZmY4MjIsIDB4ZDFkN2JmZjUsIDB4NmI2NGZiZmEsCi0JMHg0NGJiZGZkNywgMHgxYjMzN2ViYiwgMHhhNzk1YWZmZiwgMHgxYzM2ZjhmOSwgMHgzNGUxNDNmZiwgMHgxMmVmN2Y1YiwKLQkweGY2NjRkZjFjLCAweDRjN2Y4MWI5LCAweDAyMmJlMjNkLCAweDkzZDI3Yzc0LCAweGMwYWVhZTJhLCAweDI4MWM3NDJlLAotCTB4YTY1MTI2MDcsIDB4MjE0OWU0MjcsIDB4NmY3MWU3MTMsIDB4NzNiN2UzM2MsIDB4NTBkZjk0ZjEsIDB4OWNmOGM5MWYsCi0JMHhhM2U2YTgwNCwgMHhjZTMyOWNmYiwgMHhlN2Q3ZjNmYiwgMHg2MTZmNDA5OCwgMHhjY2VmZGQzYiwgMHhkZDlkNTNlMSwKLQkweDkzN2YyMjIwLCAweDdlODFjYzI3LCAweDBkYWRiZTc0LCAweGQ5ZjUwY2EyLCAweDAwMTk1YzRmLCAweDI2NmU1OGZkLAotCTB4M2RlMTc4NzcsIDB4ZjNjMTA5MjMsIDB4NWUwZTRmNjMsIDB4YmU5NzVlYWQsIDB4MWQyZDUzOWMsIDB4MTdjOGQ2NmYsCi0JMHg5ZTNjOGY5YiwgMHhmM2EwYWMwYywgMHgxODI2MDNjYiwgMHhhNzFmYWQxOSwgMHg5OGQ4MjlmYiwgMHgxMmZiYTYxZSwKLQkweDc0NDg0ZjI4LCAweDI4ZmNmYTNjLCAweDAxOTE2ZmRkLCAweGM0YTliOTZhLCAweDc5ZWM4OGY3LCAweGZmOWQyZmI3LAotCTB4M2NmY2EyMzQsIDB4NTFkYmNlYjgsIDB4MjMzYzI4YTQsIDB4MWFmMWZmYzMsIDB4OThmNDAwMjEsIDB4ZjlmNzRkNTMsCi0JMHgzNzJmZjkyYSwgMHgxNzBlZjkzMywgMHgwMmQ1ODEwOCwgMHhmZjdkMmJjNywgMHg4MTNlZmU2NiwgMHgzM2Y4NTFmOSwKLQkweDhmOWRlYzlkLCAweDQ3YjM1Yzc3LCAweGVkZmRkMDcwLCAweDljMGQ2NGNhLCAweDY5NjA0ODViLCAweGI2ZmY3ZDFhLAotCTB4NjIyNTNiMTUsIDB4ZTgyOGJlMDAsIDB4ZTVmODAwYjUsIDB4NzA4NDg5N2UsIDB4NDI5Y2RhOWYsIDB4YTA2NjcxMDYsCi0JMHgwNjRlN2RmMCwgMHhkMmU5ZTZmZiwgMHg5YzE1NjZkMSwgMHhjNzljNTI5OSwgMHhmMzMzZTc0YiwgMHg3YmU3MTEzZSwKLQkweGRlZGI0ZjhiLCAweDMxZWFjM2JjLCAweGNhZTVhMTBjLCAweDQ5NDIyNWNmLCAweGI2OTE1YjdlLCAweDZkMGFmNmZkLAotCTB4ZGE4NThlZmQsIDB4ZWUwZjVkM2EsIDB4ZmQ2NDBiZjMsIDB4YmExY2JhNzMsIDB4ZWIyMzNiY2UsIDB4ZjVhNzBiYTYsCi0JMHhkNjZkYmM1OSwgMHhkMGQ2NDkzMiwgMHg0ZDczNmU5MSwgMHgxMzNkYmM1OSwgMHg0ZjEwNGVkMCwgMHhmNjlmN2VmOCwKLQkweDY4MWYyOWZkLCAweGVhNTc3M2VhLCAweGY4YmU3MWUwLCAweGRmZmZmNGZmLCAweDg2ZjJmZjRkLCAweDU1NDdjNTljLAotCTB4OWJhZDJhZjMsIDB4YWFhOGY4YmMsIDB4ZWJkYWZjZGYsIDB4ODE3OWY1MzUsIDB4ZTdmZDM0NWIsIDB4YjRkMDJjYWUsCi0JMHhhNzllYTljZiwgMHhlY2I1OWY2OSwgMHg0MGJkNGQyZSwgMHhmZmQzNGZiZSwgMHg5YTk1ODU4ZSwgMHg5NjJiZGJmNiwKLQkweDJiNmZkYTZiLCAweGJmNTM1NDdhLCAweDRkNWJmN2M1LCAweGFmYTc5YmZmLCAweDNiMGJiNGQyLCAweDQ2NmVmNWU2LAotCTB4ZGRlYmU5YmIsIDB4ZjRmZTkyOGQsIDB4N2MwMjY2MDcsIDB4YzJiM2YwYTYsIDB4NjlmZDI3ZWYsIDB4NzdlYTdlNTgsCi0JMHg3YTA5NTk2MSwgMHhjMzc3ZWE5OCwgMHhhZjk2NTYxNiwgMHhmYTBkZTgyZSwgMHgxM2ZmZTE1YywgMHhlODNhNDU1MiwKLQkweGViM2YzZDRiLCAweDRmOWVhZmY1LCAweDJjNDdhZmU5LCAweDRiMjk0MzNmLCAweDNiMDVlMjA0LCAweDY0ZmRjNmQ2LAotCTB4ZGMzN2Y5ZTUsIDB4MGNlNzgyY2UsIDB4Yzk4OTg5NjUsIDB4NmVjNmM5NjUsIDB4ZWEwMzg5ZTMsIDB4YjYxNWZlYTEsCi0JMHgzYTkyZTE4ZSwgMHgyMDQxZDcwMSwgMHg3NDAyOWE0YSwgMHg5NzZkNDFlYiwgMHgzNDdkYWU5YSwgMHgyOWQ5NmNmMywKLQkweDIwNjVmOGUyLCAweGRjYzA2MzkzLCAweDYwMTg3Nzc4LCAweGZhNjM1MGZjLCAweDNlNjE4MzhkLCAweGRlYjFkNzllLAotCTB4NTZmZTgyOTAsIDB4ZTJkMjdmOGIsIDB4N2YwMGZkYTMsIDB4ZmE0ZjJjNWUsIDB4ZGM3OTYzYTcsIDB4YThmMmMzZWYsCi0JMHhjM2NiMDhiZiwgMHg5YjJjMGFmZSwgMHhmY2IxMGJmZCwgMHhmOTYzMmZjNCwgMHg5NjE5N2Y5MSwgMHg2MzU3ZjU3ZiwKLQkweDEyYmZkMDc5LCAweDAxZmNmN2NiLCAweDFlZmQ1YjJjLCAweGZkM2UxNTJjLCAweDE4ZWJhMTRmLCAweGFlOWNiZmMzLAotCTB4M2FlOWE4ZGYsIDB4ZjM2NGUwYzYsIDB4MTg3ZDc0ZTEsIDB4NmZjMzFiZTYsIDB4YzhjZTBmZWUsIDB4ZTIzZjk1NDgsCi0JMHhkYjcxOGM5OSwgMHg0ZWNlM2MwNSwgMHhjNzE2MjRjOCwgMHhhNjJmNjNlNSwgMHg2ZmQwOWFlMCwgMHgzZDA0MGMwOSwKLQkweGI3ZTA3NjdjLCAweDdkNGUyMWZkLCAweDRhMjUyMGY2LCAweGQzZWJjNzQ2LCAweDNjNDNhZmQzLCAweGVmZmEwZjEwLAotCTB4OTc0YTAxODUsIDB4OTZlZGY2ZTQsIDB4OGI1Nzg2NzgsIDB4YzMyMjRjODEsIDB4ZWZkZTU5MDgsIDB4ODM5ZGY3MDUsCi0JMHg0OTI0NmViMCwgMHg3ZGMwN2VmMCwgMHg1YzA2M2RiZCwgMHg3ZTAyMGJlYSwgMHhjNWQ3ODYyZiwgMHgwMDQzNzNmNiwKLQkweGZmYTdmMWRlLCAweDE4ZTUwNTllLCAweGUzMDdmMzAzLCAweDRiZjQ0NTFiLCAweDM3NzllODQ5LCAweDY3YTIzN2UwLAotCTB4ODgzNGVlY2QsIDB4OTlmYjg2ZjcsIDB4OWFmNzY4OWMsIDB4NGZlMmQ2YWUsIDB4YmY4MzVhYmUsIDB4NTVmYzExZTUsCi0JMHhmYWZlMjFhNywgMHhjMjhmZmI5ZSwgMHg4Nzg0ZjExZiwgMHg4YTM4MzBkYywgMHhlZjg0NmZiZiwgMHgxZTcyOWZjNywKLQkweDM2ZWYxZmEzLCAweGY4ODNmOGQxLCAweGMxNTUyZGIyLCAweGExM2E1MzZiLCAweGY4MTFmY2UzLCAweDViM2ZjMjlmLAotCTB4ZjAwMTIwM2YsIDB4MTE3MzgxMWMsIDB4N2ZhZjA4ZmEsIDB4ZThmYTBlOWMsIDB4MTZjOWQwMzQsIDB4MGU5Zjc3ODUsCi0JMHhjZmJkZDlkZSwgMHg1ZmVmYzAzYiwgMHg0N2NhMjY5MCwgMHgyOTU5ZTA2MywgMHg2NDMyZWI0YiwgMHg2YTRmZGE5YiwKLQkweDU2Y2ZkNmQwLCAweGQwZWE5MzBiLCAweDRjMjU3MTlmLCAweGQ3ZmEwYzFkLCAweDQwOTUxZjI5LCAweGE5NjFhNjRmLAotCTB4NjY5MDU5YzAsIDB4N2QyODcxYzIsIDB4NGZhZjVjOTgsIDB4ZDRmZmI5NDQsIDB4N2VmZDg3MWYsIDB4MDQ3NDc5ZWEsCi0JMHg3YThmM2EyNywgMHgwZmJlODQ3MiwgMHg0ZmExN2YyYywgMHhlNDNiZmRjNywgMHgyNjE3ZTM1MywgMHhhMDkxYjM4OCwKLQkweDk3ZmMwZTc0LCAweDA1ZmZmYTM4LCAweDQ2MjM3ODM4LCAweGNiNzAyYmFjLCAweDdjZDk0NGViLCAweGFmNWYzYzM5LAotCTB4ZTdiZThmMTksIDB4MmYwNmNlNTIsIDB4M2M5ZjdlNjQsIDB4ODU3MWM5MTgsIDB4YThhOWE5NWYsIDB4NDhkNjE4ODEsCi0JMHhhYzhiNWJlMCwgMHgzNTEyOGZmNSwgMHg2ZTg2ZjJmNSwgMHg4MjVmYzZiMiwgMHg0YTNkNTA3ZiwgMHhmMDIzMDQ4YSwKLQkweDlmNjcwOTRiLCAweDk5NmRhMzM2LCAweDBiZjdlNzQwLCAweDNlODE2MjA4LCAweGQyYmY1ODEwLCAweGNmOTM2NmI4LAotCTB4NzhiMmZjMDUsIDB4ZTgyZTE1ZGEsIDB4ZDVlYjhkNTksIDB4MmZkMjhmY2YsIDB4M2M3NTI4YzMsIDB4ZDllMmY5ZmYsCi0JMHhlNDMxYmQ3YiwgMHhkYmQ3Mjc2MywgMHg1NzE2MDYyNSwgMHgwM2IyNzEyMCwgMHg5YTQ4ZDdjZSwgMHg4ZWMxYjhlYywKLQkweGYwNDViMzUzLCAweDNhM2I3MTgzLCAweDBhMGYwYThlLCAweDI5MDE3OTljLCAweDk5NWZmNWFjLCAweDU4MThiNjVjLAotCTB4ZWUzZjQwYmMsIDB4OTRkYzYxOWYsIDB4NmNhZmUzOGIsIDB4YjA4OWZlZmQsIDB4Y2IxZTNkNmUsIDB4N2M5OGNlMWEsCi0JMHhiZmY0NTcyOCwgMHgxNTFlMjhhYywgMHhmNDQyZmVmYywgMHhlYmE0NTlmZSwgMHg4NDNkYWUyYSwgMHg5MjkzZWFmYiwKLQkweGVmZmVmZmRjLCAweGU3ZWQ4YmQxLCAweDZlM2I0YjZmLCAweDI2NWJhZDU1LCAweDlkY2UzMDRkLCAweGM0NDBmOWEzLAotCTB4NTQ4N2YzNzUsIDB4NWI3YTlmNWYsIDB4NWQwMTBmMjIsIDB4YWE1ZWQzY2UsIDB4ODI4ZjUwNzksIDB4ZmVhMmIyMTgsCi0JMHhmM2Y1OWRmYSwgMHg5ZjdlYzFmMywgMHhmNzA1M2NkYSwgMHhkNzg5YjMyYiwgMHgyMmNhNDEwMSwgMHhmZTA1OWQ1MiwKLQkweDk4NjI2OWY5LCAweDRkM2E3ODA0LCAweGFlMThlY2ZlLCAweGQxMzlkM2EyLCAweGZlYTFmNDg0LCAweGZjZjU2MWZiLAotCTB4YTlhZWZmYTgsIDB4NTM1ZGZmNTMsIDB4YTQzNzI0MmYsIDB4ZTE3OGY5YzIsIDB4MDgwOTEyMTMsIDB4ZmI0ZDNlYjgsCi0JMHg3MDg5ZDE3MSwgMHgyYThhOTJlNywgMHg0YjE2NzdmMCwgMHhlOWRmYWVjYywgMHg1NDFlYzYyNCwgMHhmNmJlOTc5ZiwKLQkweGFkMDE1NjRjLCAweDdmMzIyNzdmLCAweDlkZWYzOTQ0LCAweDM3N2I3NTQ3LCAweGI3NWM1ZWRhLCAweGVkYTFlNGNhLAotCTB4NGY4N2VhNDcsIDB4ZmJjMDgyYmIsIDB4M2ZiMDJhODEsIDB4N2I4MmFiZjIsIDB4N2UzZGFiYWQsIDB4ZjVmY2U4N2YsCi0JMHhhMWZjNTVmMywgMHg3Y2NlZTc3NiwgMHg4MmI1YTUxZSwgMHhjZjgzMTAyNywgMHg2N2M2NDZhYywgMHgzMGY2M2YwYSwKLQkweDhkZjEzNTNhLCAweDcwZmFiYTAxLCAweGFlOWM3ZDVkLCAweGJkZTVhM2ZlLCAweGZiYzhkMTBiLCAweDAwZGY0NDJmLAotCTB4NmY5MzBhNjMsIDB4YzYwOWRmZDgsIDB4OGZmM2YyMzAsIDB4MGVkNjlmODYsIDB4MTQ5ZmYwZmUsIDB4OWNhZDRmN2UsCi0JMHg3ZWUzZjg1MSwgMHhkYjdkZjg1MiwgMHgyYzRhN2ZjZCwgMHhiZGFmYTVmOCwgMHhmYWE2NTliNCwgMHgyNzk1ZjhhOSwKLQkweGE3ZWE4NDFkLCAweDU0ZWFjNjUzLCAweGM5N2ZhNTM3LCAweGUwMGVhNWRhLCAweGQ5NDY5MzgzLCAweDJhN2NmYzAxLAotCTB4YzQwYTRlMjAsIDB4OGM4Yjc3ZDAsIDB4M2RhZmY3MDIsIDB4NmZlMjAxMzYsIDB4ZmYwYTRmZjAsIDB4NWYwZjc1ZDMsCi0JMHg3Mzg3NzEwYiwgMHhjNjI3MjU2YiwgMHgyMWNkNmFkNSwgMHhiMmQzOTUzMywgMHg2NGY5NzlmYSwgMHhiMTBmZDYwOCwKLQkweDQ0Njc4M2ZhLCAweGY5NjgzN2E4LCAweDRmNzdmOGIzLCAweDVmNTBiYWE2LCAweDE4MGMzZGNhLCAweGZmYTEwZTNmLAotCTB4ZDhlNmI2NWYsIDB4ZTVmYmIwNDQsIDB4YTY3MjhjMjQsIDB4ZmZjNjBmN2YsIDB4NTNlZDA5M2EsIDB4N2RhMTI5ODEsCi0JMHg1M2U0NmUzYiwgMHgyYmY2N2RlMSwgMHg4Y2Y4N2ZhZiwgMHhmMjcyODBlOCwgMHg3NDI3ZDAwOSwgMHgwM2YxODRlNywKLQkweGRjNDU3YmZkLCAweDY4ZGJiZjlmLCAweGYzZjE4MmVmLCAweGU4MTQ2NDUxLCAweDI0MmYwNTMxLCAweGYxNzlmY2MwLAotCTB4NDA4NjY3YjUsIDB4Y2Q2NWI1MWMsIDB4ODU0MTBlZGIsIDB4Y2VkZTQ1MmYsIDB4NmU3YWNkZDYsIDB4YmQ2M2FiYWIsCi0JMHg1MWU1NGFkOSwgMHg3ZTJhNDdlZCwgMHhlZjgxYWI4NSwgMHgyY2FjODI0MywgMHhjODBlNDI5MSwgMHgyNTU5MjlhYiwKLQkweGI4ZmE2NWI5LCAweDVmZTdhNWU0LCAweDlhZTIxYTc4LCAweGZkZGQ5ODFmLCAweDJmZjlmYzI4LCAweDJjNmY3ZWVkLAotCTB4MjBkZmNmYWQsIDB4Y2I2N2M5NzUsIDB4NTFhOTA5YjAsIDB4ZmZkMzk0ZmEsIDB4ZDI4YjBlMTcsIDB4NmVkMzc4YTMsCi0JMHg3YjMwNmI5MywgMHg5NDUyNDBmZSwgMHhlYzM3ZjMyZSwgMHhlZGMxOTEzNCwgMHhiNzViOTFmMSwgMHg4YjZjZDRkMywKLQkweDQzYmE5ZjQxLCAweDEzMGZjMTEzLCAweDA0Y2VmYjVmLCAweDQzYjUzZmY0LCAweDYyMzM1ZDIwLCAweDZlZDU3M2UwLAotCTB4NGYwMGQzZjQsIDB4YWY0ZTRmNDgsIDB4ZmQ3NGZkMDgsIDB4NDA1ZDI5Y2IsIDB4YTVlOWViYWYsIDB4ZjQxNTM3ZWYsCi0JMHgwYjgzMGE0YiwgMHhiZjk0MTJmOSwgMHhmOTBhZGU1ZiwgMHhiYjM1N2Y0OCwgMHgyZjQ1MGYwMSwgMHhmNTgwZWRkZiwKLQkweDMwNTYzMDljLCAweDY5NjY3ZjNlLCAweDVmOGU4N2FhLCAweDRlYTljOTI0LCAweGEyZjNkOTJjLCAweGZjOGU3ZjY3LAotCTB4Y2ZmZjc3MzcsIDB4Y2I1YzU5NTMsIDB4YjY4MGNkZDMsIDB4ZWIwNmVlNGEsIDB4MTM3MzUzOWMsIDB4Zjg5MGIzYWUsCi0JMHg5ZThiMGY5MCwgMHgyZmEwYmQxMSwgMHg0OTkyMzRiZiwgMHhjOWM4NjIxYiwgMHg0ZTRlNWNiNywgMHhhNWM0YTZhYywKLQkweGNkNDEzY2ViLCAweGZjZTllNjEwLCAweGM1YWMwYzU5LCAweDE4NWRmYTM4LCAweDVmMzlmYjM3LCAweGIwZThmNTBiLAotCTB4YTMxYzY1ZmUsIDB4YzBkMTkzNTcsIDB4ZWFmNTJlZjUsIDB4ZTZiYmZjZDUsIDB4ZDNhMDI2YzEsIDB4NWQzY2JkYTcsCi0JMHg5Y2E1ZmNlMSwgMHgwZjhlNjUxOCwgMHgyYjg1MDJlMSwgMHhjYWViY2ZlZSwgMHhjNjVjNDRlOCwgMHhmNTFlZmUyYywKLQkweDM5ZTE3MmNiLCAweDNjOTI2ZmY0LCAweGY3OWEyMTk2LCAweGU4OGM4NWM4LCAweGYxZjBmN2Y4LCAweGMxZTNiY2U5LAotCTB4MWE5MTNhOWYsIDB4NDAzMDVmN2IsIDB4YjUwMmVjNTIsIDB4NTMzZTJhZWIsIDB4ZmY5MzNiYzksIDB4YmM5OWNiMzUsCi0JMHhiODFmZjIyYiwgMHg3ZmI0MTI3ZSwgMHgxMWM5ODA3MSwgMHg5MmY2MDdiYywgMHgxNWQ0MmJjZSwgMHgxNTRlNzdkYiwKLQkweDQ5OTgzZjUwLCAweGFmOWM5NjI4LCAweDZiOWNiODkxLCAweDQyZmNmNWRiLCAweDEyMTQ2ZmU3LCAweGUzMDM3YzU0LAotCTB4ZDAxZDIxMjQsIDB4ODI3YzJhOWYsIDB4YTNkMmFmYmUsIDB4YTNhZTMwZTUsIDB4OGU0NTVjM2QsIDB4ZjA3ZDcyZTcsCi0JMHg2YjAzZTgyNSwgMHgxYTkwMWY1NCwgMHhmNjNhMDdhNiwgMHg1M2M0NjU3YiwgMHhlMTc4MTQ4OSwgMHgyYTVmOTA2OSwKLQkweGU0MGJiMmFmLCAweGZhYzJmMjU3LCAweGY4ZGY1YjNmLCAweDZlNTRhZGRlLCAweGU0NTNhYjNlLCAweGY1NTdhYjU2LAotCTB4ZjFiNDViNzIsIDB4NTRmODA0ZTcsIDB4ZjU5ZmI3MmYsIDB4ZTUzMTIwYWMsIDB4Mjk4ZjNlOTYsIDB4ZmY5YjNkYjcsCi0JMHhjMTU1N2EyNSwgMHhkNWE0YmE2MywgMHhlYzllOGFhYiwgMHgzZDdhOWYwOCwgMHg0MmU4YzViOSwgMHgyNGY1ZWFiYywKLQkweDU5MjAxZGZkLCAweGUxNTFmOWVkLCAweDhhZmY4NTQzLCAweDBkZWQyYzVmLCAweGE3YzIyOGZhLCAweGY4NDYxZjBhLAotCTB4ZmQ0M2UxNTQsIDB4ZDQ3OGI1YmEsIDB4OWU3YzYzYjcsIDB4Y2I3NzhiZjIsIDB4NTA3YjEzYmIsIDB4MDUwNDk2YmEsCi0JMHhlZjg1ZDliNywgMHhjNTNhODFlZCwgMHgwYjZkODc5NywgMHhlOGY0ZjdhYSwgMHg3NDA3YWVhMiwgMHg3ZjVkM2FmNSwKLQkweGQ1ZWVhZThmLCAweGVhZTlmN2Y1LCAweDAxZmViYTE1LCAweDY4Njk0ZmI2LCAweDg3ZTQxMTM0LCAweGI0YmZhNjkwLAotCTB4OWY5MGM4ODgsIDB4ZTIyZWRlMTYsIDB4OWQxYjQxYjksIDB4YmY3ZDE1NzMsIDB4NDA0NjdkNmQsIDB4YTk2MWZhYTYsCi0JMHhjM2RiZWQ4NSwgMHhkMDJhYTYyOSwgMHhiMGNlNmQ2NywgMHgxNmVhMDkyMywgMHhmMzZiN2YxNiwgMHgyYTg5MWQ4NiwKLQkweDUwNTBmMWZmLCAweDFjZGM3ZDQ0LCAweGVkNjI5MzIwLCAweDhiYzdhODVmLCAweDFkMjY2YmY0LCAweDkwZjNiM2I1LAotCTB4MTBjNzc4YjYsIDB4YjQ0ZjJmMTgsIDB4Zjg4NDJmYTUsIDB4ODZlOGI1NGMsIDB4OTVkOThlMjMsIDB4NWNlMDNiMzcsCi0JMHhlN2Q4MmRhMiwgMHhmOWY0ZTliYSwgMHgyYzg4M2Y5YywgMHgxOGY2NDIyZCwgMHgwZGY2YTliYiwgMHg1NGZjODkyNywKLQkweDk1ZjkwMGI2LCAweGIzZmU5MDJiLCAweDMxMWY2YzgyLCAweDdlNmM0NTdiLCAweDE1ZWZlNjJlLCAweDgxMzFlZWRhLAotCTB4ZmZmZWE0ZGUsIDB4NWY1Yzc1NjEsIDB4YTM1NDUzODEsIDB4YzI5YzFlN2IsIDB4MmZlZDllZjksIDB4ZGI2OGQ3OGIsCi0JMHhmYTNmN2M3ZCwgMHgwZmRmMGE1ZiwgMHg3ZWQ5NDMyNSwgMHgwODM4YjA5MCwgMHhlMjc5YmJkNywgMHg1M2E2ZWJhMCwKLQkweDE1ZWRiNDNhLCAweGQ5Y2RmMDA5LCAweDM4NzQ4OGEwLCAweDQwMDg1ZWJiLCAweDI5Yzg4YTVjLCAweDI0NjUzZjI4LAotCTB4YzE0ZWZhOGMsIDB4YzdjODBiNTcsIDB4NTBmNThlODAsIDB4NjcxZmFiY2IsIDB4OTRiYjRmZGQsIDB4Yzg3MGZlNmMsCi0JMHhjYjY1YTVmZiwgMHg2ZmZhMGZlNiwgMHhlZjZiZmE4MywgMHhkYTQ4N2ZhNywgMHg2MWRkY2ZmNywgMHhiNmRmNzNjMSwKLQkweDI3Y2M3NjFkLCAweDRlZmVkYjZlLCAweGRmNTBmZGZhLCAweDNjYzM3NjYyLCAweDM1N2M3NmRiLCAweDZkYThmODA0LAotCTB4ZjQwOGI5OTEsIDB4YjYyZjViNTgsIDB4ZmRiYzU5ZmYsIDB4NjhjZDIxYWIsIDB4ZmQyMDk3M2YsIDB4OGIxMzI1NmEsCi0JMHhmZWZmMDRkNywgMHg0YTA1ZDA4OSwgMHgwZmYwMmFiYSwgMHhmOTcyN2U3OCwgMHgyMDgwNGI1NiwgMHg3Y2IyYWZmYywKLQkweDNkNmU5ZmI2LCAweGJmOWNmYzY1LCAweDZmYTY0ZWNkLCAweGIyMjVmOTg0LCAweDZkZjJlYzczLCAweGE0YWY5ZTYzLAotCTB4ZWZkNjk3ZTMsIDB4ZWRhMmNkMzQsIDB4Mzc3ZmFmYjksIDB4Mzc5MWYzMDQsIDB4NTVhN2JmMzIsIDB4Y2UxNjdlNmEsCi0JMHg2ZjQ5MzdiMSwgMHg5ZTI4OTIyZSwgMHhiYTM4NDE1YiwgMHgyOTlkNzIxMywgMHhjNWI2NTcyZSwgMHgxODc3Y2JjMiwKLQkweDNlMmNlYTk3LCAweDdlZDg5MmRlLCAweDFmMWZkZmY0LCAweDk1MTFlNjAyLCAweDM4ODFlZDA0LCAweGNkZmRkNjAxLAotCTB4M2U4MjFmMjcsIDB4YmU0NjYxZDgsIDB4NTlmYmQ2NTQsIDB4MjNmYTI1NWQsIDB4YTlmNzViMTcsIDB4ZDA3YzMxZmYsCi0JMHhhMTBiNzVkOSwgMHhjZTNiYWNjZSwgMHhlZWJkZWZmNCwgMHhjZTE3MjQ0NywgMHhlZDA3MmY0ZiwgMHhiZGZiN2NmOSwKLQkweGVlYzk3ZjU4LCAweDkyNzZmOWM2LCAweGZlOWEwN2RmLCAweDIzN2RmOGMzLCAweGUyZTNiYmE1LCAweGJmZDlmZWViLAotCTB4YTYzYmJhZjksIDB4NzI2NjFmZmIsIDB4MWYyMTNiYmEsIDB4ZWZmNWZjYWMsIDB4NTQzZjdlNzAsIDB4MWZmZGNkY2YsCi0JMHhiZjhhZjdjYSwgMHg5Yjc4MzY2ZSwgMHhhNmZjZTg3MiwgMHgzODNiNmE5MywgMHg5Y2E0YjcxNiwgMHg3M2E5MDdkZCwKLQkweDc0NWY1ZWU2LCAweGZjNGFmOTgxLCAweGJmM2Y1MWZjLCAweGVmYjYyNjk1LCAweDk5N2NlMDkzLCAweDEyNmU0YjhlLAotCTB4ZWQ4ZjdlZjgsIDB4ZmVlNWFlOTMsIDB4MGIzZGI1YzUsIDB4ZDZiZDJmZDEsIDB4NjI3N2ZjYzMsIDB4NDY3MzdhZjQsCi0JMHg2Y2Q4OWU0MCwgMHhjOTQzYzYzNywgMHhhODNlODNiMCwgMHhhZjI1NzRkZiwgMHg3ZjhiZjc2YiwgMHhhMDQ3ODgxNCwKLQkweGU5YjVmOWZlLCAweDlmODJmNjkzLCAweDYzNGY1ZDdhLCAweDQzY2FjY2M4LCAweGUwZWJiZTUwLCAweGY3NmI0N2NmLAotCTB4YjRmOGI3MzMsIDB4NmJhNzliZjUsIDB4Nzg3MTM3ZWIsIDB4YTJiOWMwZDMsIDB4MGFmMzRmZTMsIDB4NGE3Zjg4MDEsCi0JMHg4MTQ4OWViZCwgMHg0NzM0YTg3OCwgMHhmOTAwODIyMiwgMHg2MTRiMTUyNCwgMHg1NzkzNzBkZiwgMHhiMDNkZmVmYiwKLQkweGM1MTkxZGNmLCAweDgyYjhiY2UzLCAweDExNGU3MGY5LCAweDdjNDA1MDM3LCAweDQ0NDJiNzVjLCAweDQ4MzcxMjdkLAotCTB4ZDFkZWY4NDAsIDB4MWUxZGU2MTIsIDB4MDBiMzc4MzMsIDB4NDdjM2Y5Y2YsIDB4ODE5MmZkOTUsIDB4ZTc3YWMzNzMsCi0JMHg5MjE1N2M3MSwgMHhjODc3ZjQwYSwgMHhiMjE3MGJmOSwgMHg0YmVlMjBiMywgMHhlNzlhNWZkMCwgMHhlYTFhZTQyMSwKLQkweDBiNjYxN2I3LCAweDYzYzg3OGExLCAweDYxMzkxMjMxLCAweDA1NDNjNDE4LCAweDBmMTM1ODcyLCAweDc3ZTFkNmQ1LAotCTB4Y2UxNDZhNTUsIDB4YzQ3N2ZhYzUsIDB4Zjk3NTNmOGYsIDB4ODdmZmNhMzcsIDB4NDMzZmVhMjUsIDB4MmNmM2U3ODksCi0JMHhiM2VjYTdhZSwgMHgzYzMyMDhlZSwgMHg4MTA4OTc5NiwgMHg5MGFiZTQ0YywgMHhiMGNmM2VhNCwgMHhmZGZmMTk5OSwKLQkweDI4ZTE4MWVkLCAweDFlYmYzOTU3LCAweDdmZjZjMDljLCAweGEwYmJmMDIzLCAweDllNjdlZTcyLCAweDEwMDk1ZDk1LAotCTB4ZWMxYjM4ZjcsIDB4NzJkMWNmYzMsIDB4ZmMxOGJlMWQsIDB4YmJlZjlmYmMsIDB4MDA3OTAyZmUsIDB4MjA5YjZjYjQsCi0JMHhmZmUwOGI1NCwgMHhmYmM2MzA5MywgMHhiMjE2MDllNCwgMHg1Y2JlNDYzNiwgMHg4NzM5NDk4YiwgMHgyMDdkYzBhZiwKLQkweGEwMmNjNGZjLCAweGE1Y2RmYjIzLCAweGE5MjQyNmFmLCAweDlhZTJiNmU4LCAweGVkMjFjNjUzLCAweGMzYmYwMGU5LAotCTB4N2U0YmNlMzEsIDB4M2NmYjA5NmMsIDB4NGI3ZWViYzAsIDB4OGM2ZjQ0ZjMsIDB4Y2I4M2ZlZjUsIDB4ZGYxYmZlNmYsCi0JMHgzNzYzNzdlMCwgMHhjMDI0MzMwNCwgMHg0NDEzMGRjYiwgMHgzOWVhZjljZCwgMHg4N2UzZjcxMywgMHhhZjMwZTE5MywKLQkweDNiMjYzN2ZjLCAweGY2NWQwMGM2LCAweDRlZjg2ZThhLCAweGM2NzgzY2FjLCAweGNlNzE4YmU0LCAweGMwMjdjN2E0LAotCTB4YzkwMDczYzcsIDB4M2NmODA4NWQsIDB4ODEwYjJiZjIsIDB4ZmMzYmQ2ZmQsIDB4ZTQxMDY3ZGMsIDB4YWRjMjBmNjEsCi0JMHg0Y2UyMDdiZCwgMHgwYjhiMzM2NiwgMHg3MTNiMzBjZCwgMHhlN2U2Mzc5ZSwgMHhkYzc0Mjk0OCwgMHhhMWNlZjU0MSwKLQkweDlkZDVmNDcwLCAweDQ2MDE5ZmY3LCAweDUxMjQyNDZiLCAweDdlOTRmN2IwLCAweGJmNTg0YmRkLCAweDU5NjcyNjQzLAotCTB4MTEzZmY1YWMsIDB4NzMzYWUyYzcsIDB4ZDFkZWZiODksIDB4ZGQxZmJmYzIsIDB4MGY2ZDdlNzIsIDB4MzI3YjA3OGQsCi0JMHhkOGU3N2Q4MSwgMHhjYTA5YWY5ZSwgMHg0MjQ5ZDljNywgMHhlYzNkZjQwMCwgMHgyZjllYjA5ZiwgMHhjNzc5YmRhMCwKLQkweDFiZTVkYWMwLCAweGY4NTY1ZTk4LCAweDExZTc4ZjVlLCAweGY4Y2FjZjFjLCAweDBjN2Q3OTUzLCAweGNmMDUyZjk3LAotCTB4ZjNmNTdlMGEsIDB4N2Q1M2ZhNTUsIDB4OGYxZDRlMzUsIDB4ZTg2MWFlYjgsIDB4Y2IwZjYwY2IsIDB4NDBkMzgyODIsCi0JMHg5YjE5OTU0MSwgMHhlNTg3MjA0ZCwgMHgxMDRhOGYwZCwgMHhjNWM1YmY4ZiwgMHgzMDdiNTJlMCwgMHgzYmZlN2Q0NCwKLQkweGUxY2VjY2MzLCAweDMxNWQ4NzFiLCAweGYzZTRmODEzLCAweGExMmZkNDE1LCAweDlmNjY3YmVmLCAweDdkZGQ4MDcxLAotCTB4MTNmZWUwYzcsIDB4ZmYyOTA3N2MsIDB4YmY2YjI0NTEsIDB4ZTg3ZDVmNDcsIDB4OTA0ZjE2NzcsIDB4NzAzMzcwZDQsCi0JMHhlNDk2Mzc5ZSwgMHhiOTNlMTA0OCwgMHhkNGE3NjRhZCwgMHgzMzRmYzU1NSwgMHhhZWQ4NDljYywgMHhlMjVlZWYzYywKLQkweGU5Y2YwNjFhLCAweGY5MGYzODc4LCAweDNjODEzMzExLCAweDRkNzU0MWYyLCAweDZkZGJmZGY4LCAweDBmOGM4OTE1LAotCTB4OWE3NmVhOGIsIDB4ZmQ4MTllYjAsIDB4NzE5NGYxOTUsIDB4MzUzNGYyZjQsIDB4MzQxZjliNWYsIDB4MjdiOWI3MmIsCi0JMHgxY2RmMjVlMCwgMHg4MzFkYzdiYSwgMHg5NTk4MmY0ZiwgMHg2ODFmODg3MywgMHg2Zjk0M2MyNywgMHhiMjJmZmM4NywKLQkweDc2MjhmNzEzLCAweGFhZjI1OWEyLCAweDM0ZGU0OWYyLCAweGQ5NTczOTMzLCAweGVjYjFhZTg5LCAweDU3NGE4MmM0LAotCTB4ODJjM2EwNTcsIDB4ODJiYTdkZWQsIDB4NDNmODJjOTAsIDB4M2IyYzZhNWUsIDB4OWQ5ZmFlZjEsIDB4YmZjZmJlMmIsCi0JMHg0YTliNmQyMywgMHgyYWU1YzRlZCwgMHg4MmQ1MzEzYiwgMHg2ZjdmYTI3YywgMHg3NjkzYjk4MywgMHhmZmRiYTE0MiwKLQkweDJlZjM3ZDYzLCAweGYyMTg4OWQ4LCAweDRmZTM4YmJkLCAweDgyZDMxM2IxLCAweGE2Mjc2ODA1LCAweGRmMzUxNTRkLAotCTB4ZjMzMzZjNWYsIDB4NzY4NzcxNzgsIDB4MTZmNTI3MjIsIDB4NmI2ZTRiYWMsIDB4OTc3OWZlMGMsIDB4ZjNlZmMzZmIsCi0JMHgwNzE4M2MzYywgMHg1Y2I3YzVlYywgMHg0NmVkZWJmZiwgMHgzNzFkN2E0NywgMHhhMTNiMjMzNSwgMHg3ODQ1ZmZkNywKLQkweDAyZmFmNDU2LCAweDMzOWIyZmVhLCAweDQxMjFmMTYyLCAweDBiNzA1ZTdlLCAweGYwMDJlYmQ1LCAweDBiZWJkMzIzLAotCTB4MzE3MWU3NmUsIDB4ODJmNTllOWQsIDB4ZDZhMTFkOWUsIDB4MzJmZGVjYjMsIDB4ZTUwYmIzMWYsIDB4OTliZjE5MGQsCi0JMHhhZDZmZGI0MSwgMHhiNDcxZGM5NiwgMHhiZDUxYWRmZiwgMHhiYmQ2YTU5YiwgMHg3N2E0NzZkZiwgMHhmZGRlOTg4YiwKLQkweGZkMWMzODNjLCAweGY3ZDY4ZWE3LCAweDU0YjdkNzMxLCAweGM3NzVmNTlmLCAweDMzZTk4ZmUwLCAweDc3ZWY5YWFjLAotCTB4NzM3ZDBjOGUsIDB4OTc5MDI2ZDAsIDB4ZDczYzQ0NzcsIDB4ODBmZGM2M2IsIDB4MWNkZjQzN2QsIDB4ZTllYWYxMDEsCi0JMHhiYmU0NDY3MSwgMHhhZDllOWNiZSwgMHg4MTNjNTI3ZSwgMHgzNjc3MmZlMiwgMHhkNzRiYTdmMywgMHhiMmJmODg4YiwKLQkweDY1ZmYyNjdhLCAweDQ1YzA0MmI1LCAweDdkODcxM2ViLCAweGZjZmE4MjYzLCAweDhlN2NlY2VkLCAweDQ3M2YyMGFlLAotCTB4ZWZmOWZmNDUsIDB4M2M0MTU3MzQsIDB4MDEyYWZlNzgsIDB4MWYyMTE3Y2YsIDB4OTczOWYwMWEsIDB4M2RkMGIzZTMsCi0JMHhmYTJiZjcxZiwgMHhmMWU1ODMzYywgMHg3MmU0ZDU4ZSwgMHhkM2YxODc4NCwgMHhkZjNmZGU1MiwgMHg3MmY4YzYxYywKLQkweGY3MDRlZmZlLCAweDFmM2VkMjJhLCAweGQ1ZWZiNGExLCAweDMxOWY2MGE3LCAweGRjZjc1NmJmLCAweDExY2YxY2JkLAotCTB4NzE4YjVmYTgsIDB4NmQzYWQyZDQsIDB4NGZmNzFlN2IsIDB4NDFhMTg4ZTYsIDB4ZjU3ZjYwOWIsIDB4Y2IxZGQxMjcsCi0JMHgyMmZkMjlkZSwgMHgyN2ZhMjlmOCwgMHhlMjlmYjNmMSwgMHg4NzRmYzQ2NywgMHg5ZGMxNzk5ZiwgMHhhMWZlNWYxOCwKLQkweGUzZTNkMTc4LCAweGJmNWM3MTY3LCAweDQwMjMyMzBjLCAweDNjMTk4ZjFlLCAweGI3ZTQ1ZmE4LCAweDk5MjNjYzQ0LAotCTB4Y2QzZjY4ZmQsIDB4NzEzNzA0M2QsIDB4ZTBjNzc5YmUsIDB4NWYzYzgyYWIsIDB4OWJlNThjYjksIDB4YjBkOWFkY2MsCi0JMHg2N2Q2OTUzYiwgMHgxMGExOTFkNCwgMHg1MmJiOWU5NiwgMHhmNjIzOGY2YiwgMHhmY2M1ZGViZiwgMHgwMjBkOGE4MiwKLQkweGUxY2UxNWU0LCAweDA1MTUwOWRmLCAweDFiN2JjNTFlLCAweGVkNDg1ZjZlLCAweDZiM2ZlZDNkLCAweGU3MDdkOTk4LAotCTB4NjEyZGZiYTMsIDB4ZmYwYTlmZDQsIDB4ZjI2Mzg5MmUsIDB4ZTNjZjg4YjQsIDB4MDRmMGY3NDgsIDB4ODIwZDUzYjQsCi0JMHg2NDMyZTUxMywgMHhkMjhiNzY2MSwgMHg2ODkzZWUwOSwgMHg0NGQ1ZjMxYywgMHg4ZjE2MTc0ZSwgMHgyYzc0NjA2OCwKLQkweGI5MDM3NGE3LCAweGY1ZTQxODllLCAweGRlMGZlNjNhLCAweGNlYzMzYzE2LCAweDI1M2I4MmI1LCAweDQwODUyZjc2LAotCTB4YjlkZjUxOTIsIDB4ZDhhY2ZmNzEsIDB4Y2I2NzM4NDcsIDB4NzdkMTU1NDksIDB4ZmZjNjIxZmIsIDB4M2UzNzA1NmIsCi0JMHhmZWZmZDAwOCwgMHg0MDc2ZmExOSwgMHhlOTlmYzU1NywgMHgzYzE1N2QyYywgMHg3OWQxZDEyZCwgMHg3ZjI5YTViZiwKLQkweDA4ZDc5ZTM4LCAweDIzYTdiYzZlLCAweDBiZTc4ODk4LCAweGJkZDlhYjQ3LCAweGZlNzE4ZjEzLCAweGVjMDVjYmQ3LAotCTB4NjBmN2Q0M2YsIDB4ODcxMzBmNWMsIDB4MTY0OWQzN2MsIDB4NzFjM2ViY2MsIDB4YTY3Zjk5MzMsIDB4ZDY1MDhlZmQsCi0JMHhkMGZkMDFlNCwgMHhkMjcyOTUzYywgMHgzNDU5N2U4NCwgMHgzNGU3Y2NiZiwgMHgyNDlmZGQ4MywgMHg1Zjc5YjUxOCwKLQkweDlmZmI5NDYxLCAweGRmZGJmZTAwLCAweGM1YTQ5ZjA3LCAweGRiYjk3ZGExLCAweGY2MzY5ZWM5LCAweGY0MTkxMTMyLAotCTB4ZjkwOTMyZmIsIDB4ZWI4MzY2ZTgsIDB4MmZkMDZjYmQsIDB4ZTQwNDQ5MGYsIDB4MjM3ZGYzZTMsIDB4MDVkMTlmZGYsCi0JMHg4ZmU0NDVkYSwgMHg5Nzg2Nzc4MiwgMHg4MGE0ODg0MSwgMHg4MjkxMjZlNSwgMHgzYTVkOThmYiwgMHgyYmZmYzdjMiwKLQkweDAxOWVkN2I1LCAweDgzZjA0ODdjLCAweGY4MDE4OWZkLCAweDdiYWE2Y2FlLCAweGUyMGI5ZTY3LCAweDJmZjYyMzI2LAotCTB4MWJiMWYzODUsIDB4YmRlZjlkNzMsIDB4Y2U1Yzc0MDcsIDB4YmMzOTViZWUsIDB4NjlmNzE3MmMsIDB4YTAyNWRmNzcsCi0JMHhmNGE0MWQ5YywgMHg0ZDM3MzgwMiwgMHgzZGVmNzhjZCwgMHg5N2RiYmYzYSwgMHhkNzM5ZTBhNSwgMHgzNGNhNGYwYywKLQkweGIxOWFmNzM4LCAweDY4YmI3NDRmLCAweGQ5ZDc1OWJmLCAweDM2NGU3MDZkLCAweDdjNDhhMDY1LCAweDRlZGNiYzJhLAotCTB4MzM0ZTMwOWEsIDB4OWJhZWUyYTMsIDB4YTg4YTRlNDAsIDB4NTQ3Yjg0M2QsIDB4ZjNmYjgyOGEsIDB4NDZiZDQyYmEsCi0JMHg2NWNiZjdjMCwgMHg5ZDJiYTk5ZiwgMHgzM2NhZDM1ZiwgMHhmYzc0MTFhNiwgMHhkMDBmZGE0MiwgMHhmYWMzNWU1ZCwKLQkweGRjMTFhZjk1LCAweDE4NWJhYTkwLCAweDY0ZjUxNDdjLCAweDJmMDExYWUxLCAweGZlYTI2OGFhLCAweDFiODMxYzZmLAotCTB4OWI3MGEzODgsIDB4YjRmYmU4NmEsIDB4MDdkZTE3M2UsIDB4YTcxMjZiYjgsIDB4Mzk1Njc5YzEsIDB4M2ZiZTI3OWQsCi0JMHgyNWNmMTJiYSwgMHhiNDdiZTkwYiwgMHhiOWFkMzQ5OSwgMHhhYmNkZTEwYiwgMHg2ZjdjMDgxMSwgMHhlMzNhMzQ1NCwKLQkweDZmMDBkMTkxLCAweGY2ODZlNDlmLCAweDE2ZmU3N2Y3LCAweGQyNjY0YWYzLCAweGY4NTFiYWYxLCAweDNjZTZjNGIzLAotCTB4MmZkZGFiOGMsIDB4OTNiZWYxMzgsIDB4ZWU1MTdkZDksIDB4OTFkY2I4ZGEsIDB4YjlkODdkODEsIDB4ZWY5NDQwYjQsCi0JMHhmY2VhOGM3ZSwgMHg5NjE2NDE4NCwgMHhiMGI4NWQwNywgMHhkNWQ2MGFiMiwgMHgxODY0YTcyYywgMHg5OGNlOWY5MCwKLQkweGE1MWY4ZWMwLCAweGZmNTFmNmY4LCAweGU1ODk4OGY1LCAweDQ3Y2EzNDNkLCAweGZkMmFjZDRjLCAweDA3ZDJkOTM5LAotCTB4NDM3NjcxZTUsIDB4Mzk5OWVhMGUsIDB4ZTdlNzhiYzQsIDB4OGZlNjRhYmUsIDB4MDk2YTVhMWMsIDB4NDk4N2UwMDgsCi0JMHhkZTc4NzRjZSwgMHhjZjhjZDRiOCwgMHg3NjYyNWY1YiwgMHgzMzU3YjVhNywgMHhkNDRmNDNjNiwgMHg4N2JlMDQ0OCwKLQkweGU3ZDM1YzVhLCAweDg5ZTNhMDI5LCAweDEzOWUxMmY1LCAweGE4NDhjZjhiLCAweGM0YmVlNmNmLCAweDM1OGQ2NGUyLAotCTB4NWE4OWVlMGMsIDB4OWY3MmRmYTYsIDB4ZTgyMjY5YjksIDB4OTU2YmI5ZWQsIDB4MWVhZDY1NzMsIDB4YTMxNTc0MmIsCi0JMHhjMmM2N2E5ZSwgMHg1ZjVlOTJmNCwgMHg1MTU0ZjVlOSwgMHg3NmQ4YWFmNSwgMHhiMTg5OWVlOCwgMHgyYWNmNTBlZCwKLQkweGMwZWNhZjE2LCAweDliMTM5NzNlLCAweDQxODZhN2EyLCAweDY5NDE0OTVlLCAweDgxMmI5OWFmLCAweDg5Njc2ZjlmLAotCTB4MmRhMTRkZGUsIDB4NzYwOTNlNWYsIDB4Zjc4ZWM0YjcsIDB4OWQxOTk1MDMsIDB4M2Y4YzA5NGYsIDB4MTlmZmU4MDgsCi0JMHg4MjVmMGRjMSwgMHhiMGNkMTQzYywgMHhjNzNmZmRlMCwgMHg0NzIwMWU4MSwgMHhkY2YxOTIyYiwgMHg4MDUwMzBiMywKLQkweDJlZjI1Nzc4LCAweGYyZDRhZWU3LCAweDdkY2U3MmJiLCAweDFlMjQ0ZjhiLCAweGIyMmFmZGI1LCAweGRmYWE4ZjEyLAotCTB4Zjk0NWZmZmIsIDB4NDc3MzhlOTYsIDB4MDhiMDEwODMsIDB4ZTdiNDNmNTAsIDB4ZWViMDIzZTcsIDB4ZTQyZDc5YzQsCi0JMHgzYjBhYzFmZSwgMHhmN2ZiZjVmMiwgMHg3YzBhNTk5ZCwgMHg4MTAxZjMzYiwgMHg2NDRlZGY4MCwgMHhjM2Q4MTU1ZiwKLQkweDBiODI5NWIyLCAweDFmNzNiM2UyLCAweGE1Y2ZlZjYwLCAweGRmYmNjM2VmLCAweDJmZTMyZGZmLCAweDkwMmVlN2NhLAotCTB4NDc5YWIyODMsIDB4MzVmZjYwZjcsIDB4YmZlMDBiODIsIDB4ZmQwMGFhYmYsIDB4MjQ1OTIyODksIDB4MTBlNmJlZDgsCi0JMHhiZGE4MjNlZSwgMHg0NmEzZmNjMiwgMHgzOTA1NGM1OSwgMHg3NjYyNWIyOCwgMHhjMmI3NzljMiwgMHgxZTdmMGE0ZiwKLQkweDkzNTFkZmUyLCAweDFiOTBmNzM4LCAweDAwZTc3YmU5LCAweDE0YmUwYzQ4LCAweDdiMTEwYmE3LCAweDJlNTNmYzBhLAotCTB4ZjQzYjdlMzMsIDB4MTEwNmU0OTIsIDB4YjI3ZjM4YjksIDB4ZmUxNTY3ZWYsIDB4NDZmZjgxMTMsIDB4YjFhZmY5NDQsCi0JMHhmYzA0ZDcyNiwgMHhlMDIwMjI3OCwgMHhmMDJlN2NiOSwgMHhlZmU3ZjAyZiwgMHhiMTBjZjg5NSwgMHg4YmE4ZmRhOSwKLQkweDBmOWVhN2YxLCAweGU1MWZmMWRiLCAweDBhZjNkMDNiLCAweGE4ZmMyYTdmLCAweDQ2YzNjM2U3LCAweDdkZTYwZDMyLAotCTB4YWUwYjUyZjcsIDB4Y2I2YWI3MjMsIDB4Y2U0Yzg1YjQsIDB4YjcyNzNjZjAsIDB4OTA1NGJlZWEsIDB4Y2IyMzQyZWIsCi0JMHg1YWYwNTBmYiwgMHg0Mjc5NjQ2YSwgMHg0NGY1ZTZlZCwgMHg2NzViYTlhNSwgMHg0NzliYTdlNiwgMHgyYTNkOGIzNywKLQkweDYzY2IyMjBmLCAweGRlNzFkMTA5LCAweGU2M2NmZjVjLCAweDc3NWU5ZGQzLCAweDZmZjQ1YWU4LCAweDAwM2U1MWI2LAotCTB4OTNiN2FmZmMsIDB4MDI0M2VlMTAsIDB4ZWI4YThmYTgsIDB4MWJlNjBmNDUsIDB4Mzc1OTQzMWEsIDB4NGFlZmY2YWEsCi0JMHg1N2ZjYzRmZSwgMHhlMmVmODhlYywgMHgzZTQwZTY4ZCwgMHhmMzc4YmY3ZCwgMHg4ZTc4MjE5MSwgMHhkZmY5ODhiZCwKLQkweGZkMDEzYWYyLCAweDBmMzcyMjYzLCAweDhhM2RlZjgxLCAweDQzOGYyYzhkLCAweDYxM2MxN2VmLCAweDk2ZjBmYjYxLAotCTB4ZTBlOWQ2MmQsIDB4ZWNiNTA5YjcsIDB4YmFlMmFmNWUsIDB4MmFiMzI1OWIsIDB4NDViMGZiYmUsIDB4YjllMWZhNTIsCi0JMHgwY2U5NGM4YSwgMHhmY2MzNTVkZiwgMHgyOTRhZjdkNCwgMHhiZjJkMWJmOSwgMHhkYzU3ZmM2NywgMHg1NzNmYTEyMCwKLQkweDE1YTFiYjVjLCAweDBmOGFmM2YyLCAweDViYmY3MTlhLCAweGYzMDY3YjVlLCAweDc5NWY3MzhmLCAweGQ2M2ZkZDg5LAotCTB4YjJmMjZhMjAsIDB4ZDU0M2U1ZGEsIDB4NTFjZTc4OGEsIDB4Nzk4YTVmNTYsIDB4ZTc4ZWI0MWMsIDB4M2M3NTY1MWQsCi0JMHhlNjA3ZThmZiwgMHg2NTdmY2NlYiwgMHhhMjk5NjZmYiwgMHhkZmE2ZmU3MCwgMHhiMDllZjAzOSwgMHhmYzBlYjVhNiwKLQkweGZiZjZhNTRlLCAweGU1ZGIxM2YzLCAweGU3MmRkNTNmLCAweDljZDc0ZmY5LCAweDYzMWZhODIwLCAweDBhN2QzZmU3LAotCTB4OTQ3YjgwZmYsIDB4MjdmY2RhMmMsIDB4MWJmNGNiNTIsIDB4YWM1NjY3OWQsIDB4N2UyMjEzZWYsIDB4M2U1ZjRiZDcsCi0JMHgyZGJiZjkwYiwgMHgxNjdiM2YxYiwgMHg4ZmYyNWRlNiwgMHhiYzg1OWZjZiwgMHgwOWQwMGEwYywgMHhiYWY5NGE3ZSwKLQkweDUxZGYzMTc3LCAweDg1YTBlZjc5LCAweGZmN2U4M2VmLCAweDZkMTdjYzNiLCAweDA2ZWNjMGZkLCAweDRmZGJhZDY4LAotCTB4ZDFmZjgzYTQsIDB4NTQ5YmUxYmEsIDB4NjdiZDAzYzgsIDB4NzdjNjFlN2IsIDB4YjczNTc5ZWUsIDB4NmYxNTg5MmIsCi0JMHg2ZmYwMjVlMywgMHhhYWY5MTNhMCwgMHhkNjM1YmE3YSwgMHhjOGZlNjIzNywgMHhkMDc3NGE2OSwgMHhiNmJjOTExMywKLQkweDJmOTY1MmJhLCAweDZjZjllMmU4LCAweDA3ZTc2M2ViLCAweGFiNWZjYmI3LCAweDJiYmFmMWJmLCAweDMzZDYzZjQxLAotCTB4NzlhMmUxM2YsIDB4M2QyODA3NmMsIDB4MWQwNGVmMmYsIDB4YzU3Y2YzZDcsIDB4MzdiZTZiYmEsIDB4ZmMzNGVkOGYsCi0JMHgyYmViZDI4MywgMHhmMDFmMzY4YiwgMHhjZjM5ZmFjYiwgMHhmNTZkMGQzZCwgMHhiMWU2MWRjOSwgMHgzZjgxM2E4NSwKLQkweGQxYjhmZjI1LCAweDgzYzQzMWUyLCAweDExN2M2ZDFjLCAweDdlODEwN2YzLCAweGQ3ZDAyZWY5LCAweGJjNDNhNjVmLAotCTB4YzYxNGE0ZjgsIDB4YmI3ODQ0YjgsIDB4MmI3YmJmMTksIDB4Y2EzZWZlZGUsIDB4ZmJhYmViNTMsIDB4ZjA5N2JmMzEsCi0JMHgxMjU2ZTAzYywgMHg0ZDdjYjFmOSwgMHg1ZjJhMDMxZSwgMHg2ZmY5Njc2MywgMHgxZjkwMGU5YywgMHg3M2UwNzJlNywKLQkweGY4YzcwNzllLCAweGViOGZjOTVhLCAweDZjNmUyZjI4LCAweGUzOGIyNjdjLCAweGQyZThiY2YxLCAweDNjZjIxZjM1LAotCTB4ODRkZDI4YjMsIDB4NDNhZjQwZDEsIDB4YTg3NzliZGYsIDB4NzgwOWMxZTAsIDB4ZmJjZWE1MTgsIDB4MTg4NzlkOGMsCi0JMHhkMWQ0ZmJjOSwgMHg3YTA5ZTgwZCwgMHg0OWQ3OTIzYywgMHhiZjIxM2RlYiwgMHgxZmJjMjAyZiwgMHg3NWI4OGYyYiwKLQkweDZkMTdjYjE1LCAweDkzZGZiNDk1LCAweGYyYzRlOTQ2LCAweGViYzY0NzQwLCAweGI5ZDAzNmU0LCAweGFkOGJjZmZjLAotCTB4YTllMjg3ZTMsIDB4YzM0YmJjNWYsIDB4NWFiZTBhMzcsIDB4ZWZkNmM3Y2UsIDB4N2Y4NWUzZDMsIDB4ZDlhYjdiZWUsCi0JMHg4MmZiZmU4MiwgMHhmYmUxZTM5YiwgMHgyNjQzZmE4MiwgMHhmMThiZGY4MiwgMHhkZGYyOTU3ZCwgMHhiNWI3OGYxMiwKLQkweDdmMzExM2FjLCAweDExYWVhYWIwLCAweDdmNWViYmY1LCAweDE0NzNmMTk0LCAweGUzOGI3Y2ZkLCAweDZiMmFkZTk5LAotCTB4NjVhM2Y2NjAsIDB4YTM2MDNkYTMsIDB4ZDhkZTVhNzAsIDB4YjY1ZDdjODIsIDB4ZjIwOTkwZmUsIDB4NmVkNGY2YjEsCi0JMHgwM2JjYjEzMiwgMHgzZjYwNDcyNiwgMHhiN2Y5YWEwMiwgMHgwODczYmNiYywgMHg5ZjdlNzNlYSwgMHg4NTljN2U5MSwKLQkweDYwZjI5YzdjLCAweGQ3Y2E3MWVjLCAweDMzOGNkMTlmLCAweDM5MzNhZTVmLCAweGVmMWYxNzZkLCAweDY2ZTdhMzUzLAotCTB4MTM2OWY3ODAsIDB4YWQzZWEzZjMsIDB4ZmFjNTI3MTMsIDB4NzhiNmU2YmUsIDB4YWJhYmVmODksIDB4M2I1MGZjOTksCi0JMHhkOTNhZjc4YSwgMHhhMjRlM2RkOSwgMHhiMmZkMWUyMywgMHgwZmEzZWM3YiwgMHhmNzgwZmRjMiwgMHg0Nzk4NGRkOCwKLQkweGU3OTJiOGIxLCAweDNiOTdmYzVkLCAweGQ4YmRlODBkLCAweGY5ODEzNTdlLCAweGFhZmMwNTJlLCAweGQzOTJmN2Y2LAotCTB4OTM5ZmMwNDcsIDB4ZDQyM2JjZDIsIDB4ZmNjYTMwZTcsIDB4MjQwYzVkNGQsIDB4YjdiZjNlYTAsIDB4ZmIwYWVhNGYsCi0JMHg3Yjk0NjI1MywgMHhjZGFlM2NjMiwgMHg3NjA4Y2FmYywgMHhlMmNmYzliMSwgMHg5MWZjZTRmYiwgMHhjOWJjZjBiZSwKLQkweDRjOWRkY2U4LCAweDEwNGQzNmUxLCAweDZkOWExMGRjLCAweDdlMGNmN2NmLCAweGQxZTBjZTI0LCAweDM5MDk1ZmRlLAotCTB4YjNiZWIwZjgsIDB4ODlmYTAzNmUsIDB4NDljODQzNzYsIDB4YTViYjEwYmIsIDB4YjgzNzBkMjksIDB4YTYzMmUyMmUsCi0JMHhlNjNjZWE2MiwgMHg4ZmU0M2ZhZiwgMHhlN2RmMGJlYiwgMHg1Yjc1MDgzOSwgMHhhOGRiOWZhMSwgMHg2MTIxNmZiOSwKLQkweGZmNzc1MWI0LCAweDk3ZDAzOTAyLCAweGU3MWIxZmRhLCAweDY3NWUyNTU3LCAweDcwYTZmZjY3LCAweDg3NWVmMTliLAotCTB4MTJhNDQxYzQsIDB4ZGQ4NTc3ZDgsIDB4ZTNjNGZlODcsIDB4NWY3ZTBmMGUsIDB4MjEwMzdmNDYsIDB4YzQ4OTIxZGYsCi0JMHhjMWY3ZDViYiwgMHhmNzM1NzFkMCwgMHgzNTcxZDA0YywgMHhiNjhmNDRmNSwgMHg3OGM5M2M5ZSwgMHg0OWJkOTYzNCwKLQkweDI4OThmM2U2LCAweDg5MGYxMGRhLCAweDJmZWUwNjc5LCAweGE1ZmJmMjdiLCAweDk4OWRlNzQ2LCAweDY4MjFkYzQyLAotCTB4Nzk4NmM2YmYsIDB4NjRiYzU0ZTMsIDB4MzY2YzNhZjUsIDB4ZmNlOWJjZWQsIDB4NjEyMjdhMzQsIDB4NjA2Y2IzNTAsCi0JMHg3NzNjZDRmMywgMHhlYjgwOTcxMiwgMHhkMzlmNjhmNywgMHg3ZmVhNmFmOSwgMHhjZGY2ZTc4OSwgMHhlZmEwOGM0OCwKLQkweDg0NGQ3MTZjLCAweDA2YWNmZmUzLCAweGRlOGM0YmRmLCAweDRjYzI1NGE0LCAweDRlOTNjYzI2LCAweDQ4M2ZiZTEzLAotCTB4ZTNhMGViZTAsIDB4MjEzYmZhNmIsIDB4ZDdjNmMwN2EsIDB4OWQzZDIxYzIsIDB4MmYwNmVmZWEsIDB4YzZiMDc2ZTcsCi0JMHhmYTBhM2RlYSwgMHgwNTc3YWIyNiwgMHhhNzY2ZmEyNiwgMHhjM2EzOWUwOSwgMHgwYmIwNWI2OSwgMHg4NWNjYTdlYSwKLQkweGFkMDhlNGI5LCAweGFmOGNkNTBiLCAweDI4MjBhZWZhLCAweDJjYzM3ZDM3LCAweDg5MmM4NThmLCAweDFjZDUzZjQ3LAotCTB4MzBjYjY0NDcsIDB4Yzg4YTFlZjgsIDB4MjUxODMwZDIsIDB4NWM5ZmNmYzAsIDB4OTQxNDBjOGIsIDB4MzVlNTE5NzEsCi0JMHgzYzMwNWVmYSwgMHgxMjg3MzBkZSwgMHgyODlhMGVhMSwgMHg5ZWYxNDNmYywgMHhhYWZjNjFjZiwgMHg4NjY5N2RlYiwKLQkweDc5M2NiMGExLCAweDk0NmNhZWU5LCAweDYyMjA0YmRhLCAweGVmZjRhODY4LCAweDRiMjU3YmRlLCAweDlmN2I4MWY5LAotCTB4MGRkZmVjODgsIDB4YTk1YWI4NzYsIDB4ZGYwZWM1NTMsIDB4NDdjNzU3NmIsIDB4YWEzODllZWEsIDB4NTkzM2FiZWYsCi0JMHhiZmQ4Nzg1ZCwgMHg0MjRmNTk3NCwgMHgwYWYwNGIxZSwgMHg3MTA3ZDA1NiwgMHgzY2YxNGJjZSwgMHhlYjg0OTQyYywKLQkweDUxN2Q5OGJmLCAweDRkNzAzOWU2LCAweDExZjhjNGYzLCAweGY3MGE5ZTJjLCAweDQ3YjNmNjhhLCAweDdiNDZjN2JlLAotCTB4ZDRhNmQ2YmMsIDB4ZjBiZmI4NDMsIDB4YmQ0N2VmZDYsIDB4MWZiNzVhNTYsIDB4YTc1MDBkZGIsIDB4ZTZlNGVmNjUsCi0JMHgyOTEyM2Q4OSwgMHg3OWQ1YWM1NiwgMHg1ZjgwOTc2OSwgMHhhMDY2OTA1YiwgMHg1YWM0YmNlYiwgMHhjMWE4ZGJiZCwKLQkweDNjMWExM2MzLCAweGE2M2QxNzE4LCAweDNmNjNjM2MzLCAweDNjOTcwZjA4LCAweGExZTIxOGZjLCAweDdjYTZlYmIzLAotCTB4ZTk0YWQwMzEsIDB4ODBjNzI1MzcsIDB4M2E4ZDM3ZjcsIDB4MGJmOGMzNjgsIDB4MWVkMDU5ZmQsIDB4M2FhYjM4NzEsCi0JMHhkOTU2OGVmOCwgMHg2ZTM4NTBhNywgMHg5N2YwYTM4MCwgMHg1N2MyOWVmMiwgMHgxZjRkZjExZCwgMHhkZDk0YmNlMiwKLQkweDlmZTVhN2ViLCAweDBjNjdhYjAyLCAweGY1NmIxYmMwLCAweGUwYTViMzFjLCAweGVlYmJmMWZhLCAweGVmMDJiZTI5LAotCTB4NWYyOGU0ODQsIDB4Mzg2ZjliMTMsIDB4NjM1YzI3N2MsIDB4NTViYzczYmQsIDB4OTI5ZGFmMTUsIDB4YTRjYzQwYjMsCi0JMHg1OTA1Y2RmMywgMHg0ZjVkMTkxOCwgMHhkMmQ5NDJjYSwgMHhjNTMzYWU5ZiwgMHhlYzNjYzA2MywgMHgxMjZmYWIxYSwKLQkweDFlOThlMzhjLCAweDQ4ZjU1MTBlLCAweDcwZGYwMDVkLCAweGEzOGU4YzQxLCAweDc2ZDU0N2M4LCAweDJhYWY4ZmI2LAotCTB4YjExNjA0MzAsIDB4ZTAwMTYwZjMsIDB4NTlhM2Y5NDUsIDB4YzY2MTFmYzcsIDB4OTA4NzBkMWYsIDB4ODc4MmNhM2YsCi0JMHg1NDM0N2YxOCwgMHhlN2U3OGY4ZSwgMHhhZThmYjA2YSwgMHg0MGExZTEyNiwgMHg1N2Q2OTlmNywgMHgyOGJkOGNmMiwKLQkweDU1YzM1OGRmLCAweDQ4NWYyODNkLCAweGZjYmNmYWYyLCAweDMzYWYxMDRiLCAweGNmODdkMjYyLCAweDQ3NTc1OTRiLAotCTB4OWJkZWFkZjQsIDB4ZDgyMGYwZjksIDB4ZTAzM2VlNjcsIDB4Mzc4Mjk4NzksIDB4MmI2MmRmYTUsIDB4NjYxY2IzY2IsCi0JMHhmYzAzY2RmNywgMHhkZTZlOGY5NSwgMHhiOGRiZTQwMywgMHhkNzk4Y2ZmNywgMHhjMzc3ZDhlMSwgMHgzMWRmNzg0ZSwKLQkweDE1Yzg1Mjk1LCAweGRmN2FiNzFkLCAweGI3YmZiYzIyLCAweDQwMDNhZTlhLCAweDBjYjA5MDI2LCAweDdjNjNiZDc2LAotCTB4ZTA4OWY5MzAsIDB4NDE5ZWZjMDMsIDB4Mjg0MzhmODAsIDB4NzdmOGViMmYsIDB4ZjBlZTU0NDUsIDB4NTZkZWRhM2IsCi0JMHgwM2MzYmY3NiwgMHg1MjA3OTY1NiwgMHhjOTc5MTU2ZCwgMHg3ZDk0YjBmYywgMHhmZmIwNGQ2NywgMHhjMDYyNWYyYSwKLQkweDBlNTAyOWZlLCAweDA5N2ZhZjUyLCAweDFhYjZhYmY2LCAweDBhNzRmOTM1LCAweGEyN2UxNTVkLCAweGY3MGFkNDlhLAotCTB4ZTg5NTVjNDQsIDB4OWZlNWFlNWIsIDB4MGFhNjZiMjQsIDB4MjNkZWYyOWUsIDB4NGQ5ZGUyN2UsIDB4YWVkNDY1MTksCi0JMHhiYjA2ZWYzYiwgMHhkMGE3Zjk0YSwgMHg1M2QzYjJhYSwgMHhjMDE2NGIwNiwgMHgyODdmODQ1YiwgMHgwZmEyYzY3ZiwKLQkweDMwMzdlZjdkLCAweGZlMDM4YzFlLCAweDBiNWQ4NmMyLCAweGU4NzczODQ0LCAweGUwYjM1ZDJjLCAweDNmZGEzYTFlLAotCTB4MzYyYTRhY2IsIDB4MTJiM2Y3ZDIsIDB4NjRmNTA5NjgsIDB4ZWJjYWVmNWUsIDB4ZTdkOTU4M2QsIDB4YTA0MWI3MjMsCi0JMHhiOGYxNTdjZiwgMHg5ZTU2MmJlYywgMHg1ZTc0NjAzNywgMHhiYzVjZjcwYSwgMHg5ZDlhZjFjMiwgMHhhMGJiNDU2NiwKLQkweGEyOTFhZGM4LCAweDhkYjVjZTBmLCAweDMzM2I3Y2ZjLCAweGJhMDA2OTljLCAweDBjNmM3MjI5LCAweDZhNzY0MjFiLAotCTB4MmU4ZDMyYjQsIDB4YmMzOWU0MDMsIDB4ZTE3OWY3ZTUsIDB4YmQyM2IwYmMsIDB4ZWMyNWY1NzMsIDB4ZjNmZDNmYmIsCi0JMHgxZjlmM2U0NiwgMHhkZDdmNWZlZCwgMHg0NmUwZmJlZSwgMHg1YzY5NmZjMCwgMHhkMDM3MjNmMywgMHg5ZjI1ZDk3YSwKLQkweDkxNzY5YzYzLCAweGY1MGFlY2I1LCAweGQ0YmU5ZTc5LCAweGYzYWRmZmNmLCAweDFmZTAxYzI3LCAweDllNmQ3ZWI2LAotCTB4ZmVjZmNiMTQsIDB4ZGZmY2NhY2EsIDB4ZjhlOWZlYmQsIDB4MjE3N2UyOWUsIDB4YWIyNzQwYTksIDB4NjMzNDJmYmYsCi0JMHg1NWQ1N2U4OSwgMHg4ZTgwZjJhOCwgMHhlYzA5MzFiMiwgMHg5OWM1OTVhYiwgMHgyYmJlZTljNiwgMHhhZWM3Y2U1NCwKLQkweDVmYjhiMTBhLCAweGU4MzNlODE2LCAweGRkODMzNWRmLCAweGYzMzVmZTU3LCAweDdmZThlMjhmLCAweGM3OTRlZTcwLAotCTB4MzJkZWM5Y2YsIDB4NjlkYjE2ZmEsIDB4M2IwOGI3YmYsIDB4YTg0YWNkNmYsIDB4OTNlZjg0NjgsIDB4Y2YwMzM5ODgsCi0JMHhmNjg4NzMyYiwgMHhlNGFjYWZiZSwgMHg4ZjM4MDllYSwgMHg0NzljMGM4NCwgMHhiZGFlOWM2ZSwgMHg0MDM0NmNhYiwKLQkweGNjMGM5ZjdiLCAweDJhMjNjYzU3LCAweDIzY2U4Y2JmLCAweDc4YzEwZmFiLCAweDI5NzAxOTE2LCAweDE5NGQ4NWU2LAotCTB4Yjc5ZmY5NDgsIDB4ZWNjYzBlN2YsIDB4NDI2NzExYjcsIDB4NzY0ZmVmNTQsIDB4YTA5ZGUyZGQsIDB4ZGRhYTViZjEsCi0JMHhmZWRmYzdhMCwgMHg1NjIzYmM0ZSwgMHgzNjc1YzVmZSwgMHhmZDdiOWZjNiwgMHgwM2U0MmY1ZSwgMHhkZTNjZjFlOCwKLQkweGJiYjEyYzI1LCAweDhmNWJlM2RhLCAweDE1ZmUzZDRmLCAweDk4ZjFlYWJjLCAweDQyN2I5MWYzLCAweGU5M2MwYzUyLAotCTB4YmYzZDEyZjEsIDB4YmEwMGFjMGMsIDB4ZDExNDBkZTQsIDB4ZDA3NDI5N2UsIDB4Y2JmNjg5ZTMsIDB4NWY2ZjdlODcsCi0JMHhmOWMxZmI0MiwgMHgwOGMyYjhhYiwgMHg0MzM3MmY3NiwgMHg0NTdmZGMyMCwgMHhjMjJmMzZmZiwgMHgyNTdmY2MxZiwKLQkweDM3NDhlZDVkLCAweGUzZGI1ZTNkLCAweDk3OWY5M2QxLCAweDFlZGY1ZDFhLCAweDM3ZTYxN2MwLCAweDNlNDAwZmI5LAotCTB4YzI0ZGEzNTksIDB4MWM2ODQ5NzEsIDB4YmM3YmU3NTEsIDB4MDRlNGYxMDIsIDB4YmJlZjFlMWMsIDB4YWE0MGM3MWIsCi0JMHg1NzYyYWVmOCwgMHhmZjI4ODhlMiwgMHhlYjVhZmI4YywgMHgyNzA1ZTZlNywgMHgzOWZmMDI5ZSwgMHgwNGI3YzEyYiwKLQkweGNjNDRhNmUyLCAweDhhM2EzY2MwLCAweDNlNWFjM2JmLCAweGNkNmJmY2UzLCAweGY4YTEzZTQwLCAweDBjNDNiNmQ0LAotCTB4NjY0ZmRlMDcsIDB4NWQ0ZTc5ZWQsIDB4ZjRjZjhlYmIsIDB4ZWNmODU3ZWIsIDB4YTYzMDc4MTUsIDB4M2UxNGJlM2QsCi0JMHg3ZWUzNjg5YiwgMHgxM2QyNzc3OSwgMHg1YjIxZTRmYywgMHhkZTgwMjQ0NiwgMHg5OGE0YzEyNiwgMHgwNzUxODhmMSwKLQkweDljMzgxMWJkLCAweDA1MWY5MTVmLCAweDc3M2M4YmUyLCAweGY0MjdmOWY2LCAweDhlYjUxMzU3LCAweDFjYzBmOGFhLAotCTB4MmQ5Yjc3ZDEsIDB4Zjg1MmZlODYsIDB4Yjc0ZTRhZTMsIDB4MTNiYzg5MmIsIDB4MTI1NzRiZTIsIDB4N2Q5MTE3ZTMsCi0JMHhmZDc0NDY0MCwgMHhkZTNjNmNiMywgMHg4MGY0ODNkMiwgMHhiYWIyZWU3NSwgMHhhZjk5N2VkOCwgMHhlYTZlYjIzMywKLQkweGIzZGQwMjU2LCAweDcxZDlmOGY5LCAweDgzNGVmYzM2LCAweDExMmQ4ZDg0LCAweGJkZTI2N2ZjLCAweDI5MjliMjM1LAotCTB4Zjc4OTBmM2EsIDB4ODQxNWU5MjcsIDB4ZjAzMzcxZjksIDB4MTc4YTVjYmUsIDB4OWQxYWMxNzIsIDB4NjA5YjQyYzcsCi0JMHhmODVjN2JjNCwgMHhjNmQ3NGUzYywgMHhiNmRmOTBjOSwgMHgwMDNkZjQ0ZSwgMHhmNjExNmNlYiwgMHgxOWY1YzEwZCwKLQkweGVlYzFmZDQzLCAweDZmM2ZkYmU5LCAweGVkMDY1NWQ4LCAweGY2MjE1ZmI0LCAweDJmOWZmM2UzLCAweDc4NDNiOGIyLAotCTB4M2FiMDM5YmIsIDB4OTRmZjYzYTMsIDB4MDdkYTM1OGEsIDB4ZTFiMjJlNDUsIDB4NDFjYmM4YmIsIDB4Y2MyMmMyY2UsCi0JMHg1M2NmYzgzYiwgMHhjMjI5OWM3NiwgMHgzODg3YTBmZCwgMHhlMTQ2NWM5NywgMHgxMTNiM2VlZCwgMHhhOTczZjlmMywKLQkweDdhN2U4MWJhLCAweGI3ZjNkN2JlLCAweDkwMjc5ZjllLCAweDRmNzg0Y2YwLCAweDM2M2ZjN2NmLCAweGRmZjE0MDBmLAotCTB4OTA3MzdjMjIsIDB4ZWVjYThkZjIsIDB4Zjk0MmZjMjksIDB4NWQxYjc5ZTcsIDB4NjM4OGRiNzcsIDB4ZmRiYjgxNGYsCi0JMHg1M2NmODhjZSwgMHhmZTI5ZWVjMSwgMHhmMTBmZDQ3OSwgMHgzYWZkMDBiYywgMHhmZjE1ZDNmMiwgMHhmN2NkOTM3YywKLQkweGMyMzNmNDEyLCAweDk5ZmJlODdhLCAweGY4MDY1ZDAzLCAweGNkOTBmZTdlLCAweDU3M2MzMmYzLCAweGVkOGI5NmZjLAotCTB4MjMyZWM4MzcsIDB4M2JlNzQ4MTksIDB4Y2VhMWQzOTMsIDB4NTkzZWYwNDAsIDB4ZjY4MDgxNzksIDB4OTYxMjc2ZWMsCi0JMHgyYmRiYmM2MCwgMHg3NmJlY2QyNCwgMHhjOWZjMjVhNiwgMHg1ODdlNzBmZCwgMHg5OWVkMDAzOSwgMHgxNGZhYmUwZiwKLQkweDhmOTY3ZGYxLCAweDEzYmZjNTVjLCAweDBmZWUxODE5LCAweDE2M2JiZWZiLCAweDQzYzdkZjZhLCAweGJkZThhY2MyLAotCTB4YmVkMDlmOWQsIDB4NmUwMDkyZGQsIDB4ODc3YzBhNzMsIDB4ZmI2YjIwNWIsIDB4ZDY1N2M3ZWIsIDB4N2ZhYjg3YTEsCi0JMHg2M2RmOWNhZiwgMHhiYjIyZjcwNCwgMHg5ZmMyZmU1NSwgMHg4ZDhmY2M2YywgMHg3ZTJkZjdjYywgMHgzN2M1MDE4ZiwKLQkweGMxYjNkNWQ4LCAweGM1MGYwMjRiLCAweGY0YTU1ZmUwLCAweDhjN2IyNWM1LCAweGU2ZjVhM2MzLCAweGIxZTllNmVkLAotCTB4YzY1MTE3ZWUsIDB4ODMzZGYwNTEsIDB4ZmNmODI5MzQsIDB4NjVmZjE2MzYsIDB4YzAxYzU4ZmIsIDB4NzM0ODQ0ZjAsCi0JMHg3ZDk0YWY0ZSwgMHhkZmQwMTNjMywgMHhhMDI3NWJlYiwgMHg5NzUyNWQ3ZiwgMHhmMWE1OTg2MywgMHhiODNlZDlmMywKLQkweGY3MGY5ZjlkLCAweGZhZmY0MDVkLCAweGFmY2ZjYzlkLCAweDQyZmRjNGFiLCAweGY3ZGIzZDQ5LCAweDVjZWY4MmFjLAotCTB4MGM4OWYzYmEsIDB4YjIzZmZmNDIsIDB4YTliYzg1OWYsIDB4OTA0N2I4NTIsIDB4NTNlMDg3YjUsIDB4YWNkNTNlZjUsCi0JMHg4OTdkYjI3ZiwgMHhmNjExYjk2OSwgMHhjOTM0YmVhMywgMHg1YWJmZWI0ZCwgMHhmNzQ3MTU1ZSwgMHhjNDE5NTU0ZCwKLQkweDI5YmVlODQyLCAweDI3Y2I1N2YxLCAweGI1NGQxOGFlLCAweDIwNDc5MjczLCAweGIyYWY1ODg5LCAweGZlZmNlOThkLAotCTB4Y2I1N2Y5MzksIDB4ZTM2NTk2YWEsIDB4YWVkZTJiYmUsIDB4MjQ3NmNmZGEsIDB4MmU2ZGU3MWYsIDB4ZmI0NzYzYzQsCi0JMHhiYzEyYzdkOCwgMHgzYzU1NzZjOSwgMHhiM2ZmNGY0MiwgMHhlMDA0YWU3MSwgMHg3ZjdjZTViZiwgMHg1OWMyZjU3ZCwKLQkweDBjYjA2ZmI4LCAweGY5MGU5ZjM4LCAweGVlOWNkOTYxLCAweGIzOGYzYjJlLCAweGRjZjdkOTVhLCAweDAwZjRkNmU1LAotCTB4NDU2YmE5ZTgsIDB4ZDllNjBiOWYsIDB4ZmVmOWM2ZjYsIDB4NmI3ZTQ3MTAsIDB4YjdkYzExZTAsIDB4OGViZGY5MDUsCi0JMHg1ZTQ1ZmNmYiwgMHg2NWZhYmU3NSwgMHg1ZjY3ZTY3NiwgMHgwM2EzNDk3ZCwgMHg4Y2Q3MWRmNiwgMHg2NzdlMGJmYywKLQkweGVlYzhkYTdlLCAweDZkMTk2YjRkLCAweDRmYjlmOGQyLCAweDAzMmVmMmRhLCAweGQxNDk0YWY4LCAweGNlN2U4MjI3LAotCTB4MjBlYmIxMWUsIDB4ZWM4ZWZiZDgsIDB4NzgwZWQ0NDQsIDB4ZTQwM2IwMDQsIDB4M2M1NGZlZmMsIDB4ZWRkZmFhMDcsCi0JMHgwYjY1ZDg4MCwgMHg3NGZkNmVmZiwgMHg5ZGVhNjM3ZCwgMHhmMGRkMmNiNCwgMHhiN2VjMDcxNywgMHhjZmNjZWRiMiwKLQkweGMyNmM2ZDNiLCAweDVlNGE3NDdiLCAweDA3OWVmMTE1LCAweDZkZWE2ZTNhLCAweDlmYWU1ZjEwLCAweDFiMTBmNTk1LAotCTB4MDc2ZDRlMjYsIDB4NDNhZmJmMDksIDB4OGNhZjA3ZjEsIDB4MmVkYzAzOTMsIDB4YmM0ZDcxMmEsIDB4YmQ1YzYzZGYsCi0JMHhkYTM4YjFlOCwgMHhmN2E3ODVmYiwgMHgwZjllM2U2NiwgMHgxYjkyMjE3NCwgMHhkOTIzMjVkZCwgMHgzZjIyN2U4NSwKLQkweDVkYmZhMWU3LCAweDBlZjBhZjcwLCAweGZlYmQ3OTVlLCAweDQwYWYxYmYzLCAweDQyNzZhMjY2LCAweGQ3YzkzZjAwLAotCTB4OThlZjA1ODUsIDB4YjdmYzU2M2UsIDB4ZTM2YjVmNzEsIDB4NTI3ZjdhOTcsIDB4ODNlMzNiYjEsIDB4MjBmNDk3NDMsCi0JMHg4ZGQ3MTc4MCwgMHg1ZWMyMWRmOCwgMHhlOTRkZTYyMywgMHhmMGJjY2RmZCwgMHhjYWZjMGVjNCwgMHgzNjNmOTE0NywKLQkweDAyYjFmN2Q2LCAweDE5ZDk4NzNkLCAweDdmZDc5NjVmLCAweDk0YWVmNzhlLCAweGI4MzRkMDkxLCAweDVlYWNhNmZmLAotCTB4ZjdjODg2NzQsIDB4NmYyNWU5ZTksIDB4NmFjMWRmYzMsIDB4ZTAyZTRhMGIsIDB4ZWVlMGI2ZGYsIDB4NmY1MDIxYjgsCi0JMHg1NjFlMzExMCwgMHg2NWY2NGVmZSwgMHg0MWFkNjdjMCwgMHgyOTFmZWYwOSwgMHgwMWNjN2VkZiwgMHhmM2IxNDBmYSwKLQkweDJmNzY0MWFkLCAweDA4ZjA1YjQ5LCAweGI2ZTA1NzNlLCAweDA2NWYyNDM2LCAweDgxODM2N2Y2LCAweGVkNzczZmVkLAotCTB4ZmEwYWQ2ZjksIDB4NjdmM2Y1ZTEsIDB4YWJkZjcxOTMsIDB4ZmY5ZDY5ZDgsIDB4NzM3N2M0YWIsIDB4YmUyNDYyZWQsCi0JMHg4OTZmZjZhYiwgMHhmMjAwN2Q5OCwgMHgyNDEyZjJhNywgMHg3ZjUxMGEyMiwgMHhmZTlkOWRiNSwgMHg5M2IxMmM4OCwKLQkweDgyM2FmNmY2LCAweDgyMzFlMjdmLCAweDc3ZWRlYjljLCAweGZiM2FkZjA0LCAweGZiOWQ4OGZkLCAweDMwYzhiZDhmLAotCTB4ZTFhZmM3YjgsIDB4ZmM3Y2YyN2MsIDB4NzU2ODMzZWUsIDB4MGNmOGMyMmUsIDB4NzZkYTRmZjMsIDB4MTRkOGZhN2QsCi0JMHg2NDRmYmU3OCwgMHgxNzlmZmRkZiwgMHhkOGRmZWY5MSwgMHhiMzc3YmYzMSwgMHgyYWY3OGQ0ZCwgMHg2ZWI5ZDdhNCwKLQkweGQxYjc1YTY3LCAweGM3NzZlN2ZlLCAweGQxYjU3OGIzLCAweGJiZmE5OTdkLCAweDAwZmY2ODgzLCAweDNiYTg1N2M3LAotCTB4YmI5MmY3M2IsIDB4M2YzYjdkYzMsIDB4YjcwY2ZmZGEsIDB4NDVlYWZmYmIsIDB4YjhkMmY3OTAsIDB4YzM1MDQ0ZjAsCi0JMHg5OTBlNmJmZCwgMHhiMzBjNWY0MCwgMHg3YTYyNWY3YiwgMHg3YTBhY2VhMCwgMHg3YmUzMjY0MCwgMHg1MTZlM2ExMCwKLQkweGZjMGYxOTNjLCAweDRlMjRhZTE1LCAweDc1N2JjM2M4LCAweDc0MDBjMWFmLCAweDAzMzZiMTE5LCAweGYxZDY2NGYzLAotCTB4NzU3OWMxNzMsIDB4OTUwY2E2ZDUsIDB4Y2ZjNzk5N2UsIDB4NzI0YTRlOTUsIDB4ZjllYTkyN2EsIDB4MDNkMzA3NzAsCi0JMHgzZjE3NzcyNywgMHgwM2YyZmE4NywgMHhjMzE3ZTkzMywgMHg5ODNiMjYzZSwgMHg5MjY0ZGJiZCwgMHg3ZTg3YWNhNywKLQkweGVmYjgwZDg3LCAweGViNjdiNWQ4LCAweDZlMGZiODFlLCAweDUwZDc0MWRlLCAweDQxYTczN2IwLCAweDg2YmMyODFlLAotCTB4MjBhYWViN2QsIDB4MjNlMWI2Y2YsIDB4YmY1NDE2YjAsIDB4MGQxMDI5YWYsIDB4YzQ2ZGRjNzQsIDB4MDc2NGUyYzUsCi0JMHg4ZGZmYjgwYywgMHgyNzg5MTdjNCwgMHgyOWY5ZDYxOSwgMHhmNmRiYmZkNywgMHg1MGU3MzQxYSwgMHhhNDNkZjhkYiwKLQkweDM5ZDlkYTFmLCAweDhiM2I3ZWQ0LCAweDNiZGM2ZDUzLCAweDk0NGVmOTNlLCAweGQwMDFkZjQzLCAweDliNDdlNWZmLAotCTB4NjhhZTFjYWIsIDB4OTdmMTRkNWMsIDB4MzhkODFjYzYsIDB4ZTdmZDMwNjUsIDB4MTM4MzE2OTgsIDB4YjAzYWVkYzgsCi0JMHhiYWY1ODQ1YSwgMHgyNWRiNTI0ZSwgMHgxM2ZlNzY5MCwgMHgxYTg5Zjc4NSwgMHgwNjE2YjZkZSwgMHgwZGUzY2U4ZiwKLQkweGZmMDU1MzkwLCAweDNjM2YwMmQ0LCAweDM1YjdkNjg4LCAweGJmMjA5MzE5LCAweGIyYmZjMTRhLCAweDU3N2M2NTBlLAotCTB4YjJhY2YxMWQsIDB4MzY3OTI4YTEsIDB4NTc3YzRmN2UsIDB4Yjg3Y2Y3YjksIDB4YTBmNzI4OTMsIDB4YjZjZTVmMjMsCi0JMHgzZjE5NWE3YiwgMHgzZjUwZTljOCwgMHhmZDFlM2JiOSwgMHg5ZWRjNGQ5MiwgMHhkZTgyYjQ5MSwgMHg0ZTg1M2Y4MCwKLQkweDdmNjYwZTA5LCAweDM0NzRmOTk0LCAweGJmYTczYzdlLCAweGJlNTBmZTUyLCAweDY0YjkyNzVlLCAweDFmN2UxYmU0LAotCTB4YzUwZTRiYTAsIDB4YWUzYzgxZjUsIDB4NzdmODNlODYsIDB4YWU3OTU0NWEsIDB4NDdjMDBlZjEsIDB4ZDQ3ZTM2OGIsCi0JMHhjMDMwNmNkMCwgMHhkYjY1NThmNywgMHg2NmJjNDQ4NSwgMHg2ZGZlOTNhNCwgMHg3NThjY2Y4NCwgMHgwNzBkN2ZjOCwKLQkweDcxNzFjYTA5LCAweGJlMmM1ZGVkLCAweGY4M2Q0MjQ3LCAweDVlNzg1OGJkLCAweGNmYzNmMjBkLCAweGI0MDliYmFkLAotCTB4YjU1YzEzMWMsIDB4MzdlMjA3YjgsIDB4OGFiOTAwZTQsIDB4MGRjYTg5ZTIsIDB4MjZkNTE1OTQsIDB4Zjc3OWQ3ZTAsCi0JMHgzZjJlNzJiMCwgMHhkMmI3OWRmZiwgMHg1ODU5ZjI4NywgMHhmYWZiZjJjMywgMHg3Y2Q4MzIzYSwgMHg0MzEyYmYzOCwKLQkweGZiYzg3NzdjLCAweDdmZGI4ZTc4LCAweDAyMmZkZTY1LCAweGE5ZmFkMmRmLCAweDYxMWJjN2ZhLCAweDk3NWZjYTVjLAotCTB4ZGVlZTIwM2EsIDB4MzA1M2U4ZjAsIDB4NGY1Zjg1NWQsIDB4NGUxMDkxYWQsIDB4N2NmNmJjNTEsIDB4ZDc0ZTcyZmMsCi0JMHg3ZTMwMGY1NywgMHgxYTQ2YjMxZiwgMHg4ZDMxZjcwZiwgMHhlMjEzODk5MSwgMHhhY2Q2ZGJjNSwgMHg2ZjdmNDExNSwKLQkweDYwY2U3ZTAzLCAweGZkNzYwZTcyLCAweGFjODdlZWU0LCAweDc3M2IwNGJmLCAweDJlMjA0MGM4LCAweDhhNDRjOWJkLAotCTB4NjJlNGE4MzYsIDB4MzRkN2FhZDcsIDB4NWI1YzViZjIsIDB4ZGZlMzA1MzksIDB4ZTgwMjQ5Y2QsIDB4MTU2ZTQ1NzksCi0JMHhiOTMyNmZiYywgMHg1ZmZjYTMyNywgMHgwOWZmOTNhYiwgMHgwZTM5ZmRlYywgMHhiOWM3OTc0NiwgMHg4OTNlM2ZmYywKLQkweDk0N2QzZmNhLCAweDAwNTEyNmI4LCAweGIxNGM5YjM4LCAweGY2OWFlOWVmLCAweGEyMmZmOTIzLCAweGQzYjY4ZjU3LAotCTB4NmMxY2QzYWIsIDB4NDNlOGVmNWYsIDB4ZTZiYjJmYzcsIDB4MjNlYmVlMmMsIDB4ZjM3Y2UzZjMsIDB4NmY4NTA0ZjgsCi0JMHg3ZmMwMDQzMiwgMHg1ZjYwYTUzNSwgMHgyYmM1MTdjMCwgMHhhZmZhMzNmMCwgMHgzMjczNmZhMCwgMHhmNmExYmVmMSwKLQkweDM5NDhiOGZjLCAweDZkYzhkMzk3LCAweGYyMjlhZjU0LCAweDdhMDIyYmViLCAweDU4YTg0ZDY3LCAweDcyNzY3ZTBjLAotCTB4N2E3YzhjYmUsIDB4NGVmNWYwNGEsIDB4MTRlZDc2YTIsIDB4YmQwYzczYzgsIDB4ZjRjMWQxMzAsIDB4YTdjOTM5YzgsCi0JMHhmZGJjYWZiOSwgMHhlMDc3NDgzYywgMHg2M2JhMjJlYiwgMHgxYTkxNzU4MywgMHg1MWY0MDljMSwgMHg2YzM1NWRkYSwKLQkweGMzOTRiMTVmLCAweGY1MmI5ZTUzLCAweDJmZjc4ZDFmLCAweDk3ODNjNWRhLCAweDMzM2Q5ODNhLCAweDdmYjA1NmMxLAotCTB4MjIzM2Q5ODAsIDB4MjBiOTQ3OGMsIDB4ODNiYmFiODYsIDB4NzZhM2NkYmMsIDB4MWQ5NTU2ZWMsIDB4MjM1NTI1M2IsCi0JMHhmODc4MmFiZiwgMHg3M2Y3ZTczNSwgMHg1N2RkNmM4OSwgMHg4Mjk2NzlmMSwgMHg2NzNhYTdlZiwgMHhhMzA0MWJhMiwKLQkweDE0NWFlNGMwLCAweDAwOGJiYzk4LCAweGIxZWVkNGZmLCAweGFmZWY5MTkzLCAweGYzZjdjZDg5LCAweGZlNDJhZmQ3LAotCTB4YzRlNDljNGMsIDB4MzcxZTQ4ZWYsIDB4ODM4OTJkYmEsIDB4MDBlM2U5NjIsIDB4ZmVkNmJiOTYsIDB4YzA1OWY3MDYsCi0JMHgxZGY3MjBjNywgMHhjODExNDFjOSwgMHhmZmMxODkwMSwgMHgyYWZmY2EwMSwgMHg0MDdjMjlmYSwgMHg4NzQ1ZTJmOSwKLQkweGY5ZTg0ZjRhLCAweDUzZGYzOTQyLCAweDc3NDliMmYwLCAweGViOGU3ODNlLCAweGJhNWU0NmY5LCAweDUxNTNjODNhLAotCTB4ZTlhM2YzZDYsIDB4Y2U4ZWQyZGMsIDB4NDczYTMwNmYsIDB4YWRlODBiZTUsIDB4ODFkZjg5ZTgsIDB4MmM3NGE1OWMsCi0JMHg5YzEyZmQ2NywgMHg4ZmFhOWYzOCwgMHg0ODVlNjE2NywgMHhhYTI3M2YzNSwgMHhmMzI5ZTNlMywgMHg0MmY1YzAzZSwKLQkweDM1M2NlNzQ3LCAweDFjNWZkZjU2LCAweGQ3NDhmM2JhLCAweGU0N2YyOGEwLCAweGMxNzZiZjcxLCAweGIzOWUzMzVhLAotCTB4OWU0YzIwNmYsIDB4MDFmMTVkZTUsIDB4NGU5ZTc3ZjUsIDB4Mjk0Yzc1MjMsIDB4M2U4MDhmYWEsIDB4Mzg1Njg5MWYsCi0JMHg0MmQ3NzUwNCwgMHhjNzRiZTkxMywgMHhiMDUxOTczZCwgMHg3ZTZkZjIwYiwgMHgwZmU3MjRkNiwgMHg2MGQ4ZWJhNiwKLQkweDgzNWVhNzkyLCAweDY0ZjcwMWZiLCAweGRmMzkzZjgwLCAweDZmNzg4NGUwLCAweDQwMjljN2EyLCAweDAzNDMwMjNjLAotCTB4ZDhmYjg3MjAsIDB4YjhmYmMzMzgsIDB4YWI3ZGMzMmYsIDB4ZjQxYzNkY2IsIDB4MmY0ZTY5YzEsIDB4MWUwYWJlODUsCi0JMHgxZDc3YjIzYSwgMHgwMjVmYjVkMSwgMHhlZGUzYTczZiwgMHgyNmYyM2Q3YSwgMHgzOGU3OWI5NywgMHg0N2FlMmYxZSwKLQkweGM5ZTQxMTY0LCAweDQ0OGI3YzQxLCAweGQzMzY3Zjk4LCAweDkyM2QxMTgzLCAweGQwMWNmMDRkLCAweDllNTVjN2MxLAotCTB4NTA5ZmY1MmIsIDB4NTIxMjM4OGYsIDB4NzQ2NDdhNTQsIDB4NDIzZDRjNzMsIDB4M2ZlNTMxN2YsIDB4ZjQxY2NkNjUsCi0JMHhkOGMxYzk2NywgMHgwMjdhNmNmZSwgMHg2MDI5YzdiMywgMHgxNGJmNjk0NywgMHhkMzNkZmQ5OSwgMHg1MDNlZGNkMywKLQkweGM1N2NjNDhlLCAweDhjNjYzNWVhLCAweGM4N2EyYmUzLCAweDg3OGM5NTMxLCAweDAwZWFjZmJmLCAweGE2YmQwYmJiLAotCTB4MDk1ZTBlZmEsIDB4MjY2OWIzZTcsIDB4OWYxNzljMTcsIDB4Zjc0OGMyOTIsIDB4NWNjMzc0NTMsIDB4MTVlMWZjOGQsCi0JMHhmNDMxZGU4MCwgMHg4NWY4ODExMSwgMHgyYzllZDdmYywgMHg1MTA2MmVmZSwgMHgxMWU0MTY0ZSwgMHhkNmJiYTNiNCwKLQkweDJhYmU0MjhlLCAweDgwMTRjZmNhLCAweDEzNmI4YjZmLCAweDlhNGY2ODA1LCAweGJlODAzNGUwLCAweDZhMzFkNjUyLAotCTB4NDlmYzg4YTEsIDB4ODI0NDYwZTUsIDB4ZTRhMzFlOGEsIDB4ZDVmMDExMGEsIDB4MjY5N2Q5M2IsIDB4ZDZmZGQyMjUsCi0JMHg0Y2ZkNTdhZiwgMHhkMGYxYmYxZCwgMHg2OGI0OGFmYSwgMHgxZmQ2ODZmYywgMHg3Y2ViNzViNCwgMHgyMTM3MjZmYywKLQkweDNmZTQyMGYwLCAweGU0ZjBlYWRjLCAweDU2MzViOGMwLCAweDU5OTQyZTZmLCAweGNlMzAyYjVkLCAweDg4YmNkOWRiLAotCTB4ZTUyZmNiMWYsIDB4MGU0NDRlM2MsIDB4Y2VjYjhiYjQsIDB4NWM2MTc1YWMsIDB4YTdjYzFhNzYsIDB4YTdmMWZiYWMsCi0JMHg3M2RlMWMwMCwgMHg2NmVmZDMxMSwgMHhmNWMyZThmMywgMHgyMDg4ZjkwMiwgMHgyYjc4YmEzZCwgMHgyODk3ODg0NCwKLQkweDM4NGVlNzdhLCAweGY2YTE0NTk0LCAweGExYWU3MDA4LCAweDJkZTgxYmM4LCAweDNjOTVhN2YwLCAweGQ5NWI4ODA4LAotCTB4NDAxZjZlMzEsIDB4YzI3YTgyM2UsIDB4NWEzZWE4YjAsIDB4Nzk4ODZmOTEsIDB4MDRjMmYxNWYsIDB4OWZhYTRmZGIsCi0JMHg5YmVmZjA0OSwgMHg0NzdjYTk3ZiwgMHgyZDNjYTIyOCwgMHhlYmU5NTA0YywgMHhhNzBmZjNjNywgMHg3NjA4ZjNiMiwKLQkweDdjZGRkZmFmLCAweGI5MTZlNzhjLCAweDRiYTAzNGZmLCAweGExODY3ZWY0LCAweGY5MGM5MzY2LCAweDVjNDNjNGE2LAotCTB4YjFmZTU1NGUsIDB4NzY0MjE0MTAsIDB4NTZmZDYzYzgsIDB4ODc0YTFlMjAsIDB4MmM0NTZmYjYsIDB4ZGUzZmZiOWYsCi0JMHhjZmUwMTk0OSwgMHhkNGRjMTgzNywgMHgwYmZjODIzMywgMHg2Zjc3MDc5NCwgMHhkNGE3ZGY4MiwgMHg3MzEyN2JmMSwKLQkweDA5MWU2ZDFhLCAweDFjNDIxZGUyLCAweGEzZGE4ZWZmLCAweDFkMThlNzNkLCAweGRiNGY1ZjRlLCAweGY4Y2QwNzE3LAotCTB4NzJkYWZkYjcsIDB4ZTBhZmJmOTQsIDB4MTU5OGVmYzYsIDB4ZTc3OTBlZmMsIDB4ZDc5ODgxZjEsIDB4ODM3NmFjNjksCi0JMHgzMGI2YWQ5YywgMHgyYzJkYWJmOCwgMHhhMmRhYjc2ZSwgMHgwMDRhZTdiYywgMHg3OWQxZGRiYiwgMHgxZWMyZjY3YiwKLQkweGUyNTNmZjE4LCAweDkwZTFkOThkLCAweDBjYzlmODA4LCAweGM5MmMwY2JiLCAweDBjNjc4ZDhkLCAweDcyYjc1YzEzLAotCTB4ZjFjNzVmMGUsIDB4NDZlZjY5YmYsIDB4ZDY3OWVjMTEsIDB4YjBjNWVhODQsIDB4Zjc2M2Q5ZWYsIDB4NmJmYTAwYmQsCi0JMHhkZmQ2YjY2YywgMHhmM2YwMjExYiwgMHhmNzA0YzllMSwgMHgyNDljOGE0YiwgMHhlMDlkOTMzNywgMHg2YzFlMjRkYSwKLQkweDFhMGE4MGY2LCAweDEzYjNkMjdiLCAweDVlMDk5NWY2LCAweDU1M2MwMDIyLCAweDgwMDZjZmZlLCAweDg0NzhiYTRiLAotCTB4ZGZjMGJhNmIsIDB4ZmI3ZmU1ZWIsIDB4YjRkOWMzOTAsIDB4NzIwMGJjNzcsIDB4ODI2OWE1ZGYsIDB4OWVkNDFhZTAsCi0JMHhmZWMyNTdjZiwgMHg1M2NiMDQ3YiwgMHhmYjJhZmEwMSwgMHg1ZTJmZGVjMiwgMHhhNWYwMDEzYSwgMHhmYWUyNmZmNCwKLQkweDJmOWYwYWZjLCAweDc0YzY0MjE3LCAweDc3MTgyMTNkLCAweDIzNDBmNGNjLCAweGFhMzU0OTVjLCAweGI5MzQ2ZTQ4LAotCTB4NDc5OWViNTQsIDB4NjY4ZjVlMTAsIDB4ZWRkMWQ3MTksIDB4Y2EwNzJmYTAsIDB4MWM0NGI2NjMsIDB4MTBjOWVjNzcsCi0JMHhhZDc0YjdlNiwgMHg0M2Y2OTAyMCwgMHg0MDFkMzU3YSwgMHg0NTU3YWEzZiwgMHhkY2Y0MDA5MywgMHg5YzBkZjdiNCwKLQkweDVkYTZjZjZmLCAweGI1ZjJlNGFjLCAweGNhMDVmYjkxLCAweDk4ZDk4ZWJjLCAweGNmYzYzY2RkLCAweDMzNGVhYmE5LAotCTB4YzEyMDc5YmIsIDB4Y2E0YmY5ODcsIDB4N2M3MmFhM2EsIDB4ZmUxNDE1NjksIDB4MTljYmM4NGEsIDB4Y2U1ZTcxZDEsCi0JMHhiMjkzMDQ5MSwgMHhkNjA4ZmZkZiwgMHg3OWJkM2U1NywgMHgzZWEwZjAwZiwgMHhlZmJhOTA3ZSwgMHg3NTIzZDIzMCwKLQkweGFmOTZkYjIxLCAweDAwNDBiN2RjLCAweDQ2NzJiMTdkLCAweGEyODFmOGVjLCAweGY4ZjI1NjM3LCAweGU1ZmYyYWFiLAotCTB4NGY0ZjVhOTQsIDB4NjZiMjQ4MjksIDB4ZjI5MmY0YWEsIDB4ZmNkMTUzZGUsIDB4ZmYzYzRkOTcsIDB4N2JjZDAzZTUsCi0JMHg4MDVhOTc4MywgMHg3OWIyZWU5ZiwgMHhlNTczYzBjZSwgMHhlM2FkMGJlZiwgMHhkOTQ3Yjc3ZiwgMHhiYWY4MmFjZiwKLQkweDgwZmNjOWMyLCAweDFmZDcwOTAzLCAweGMwMjQ3MzgzLCAweGYxZjI5MzkzLCAweDNjZWM0YjNhLCAweDA2OWRjYmYyLAotCTB4N2UzMDc3ZWUsIDB4NWY4YzRkMjEsIDB4ZmY2YTFkNjAsIDB4YjAwMWJmZWIsIDB4MDBkNzQzMmYsIDB4MDAwMGQ3NDMsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHhjOTMzMjY2NiwKLQkweGU0Y2M5OTI0LCAweDQwMjc1ZTQ5LCAweDIxYzQwYTMwLCAweGViMTQxMDIxLCAweGVmMGMwMTI0LCAweDAyNDE1MDQxLAotCTB4ODA0MjEyMGMsIDB4MmE5NDEzMjQsIDB4ODA2NWJkNmQsIDB4OGQ1MjAzMTgsIDB4OGJkNGI0NWUsIDB4ZDdhNTc4M2EsCi0JMHgyOTQxYjYyMiwgMHg4NGVjMWE4NiwgMHgzYTBiYzE1NywgMHg5NGI2MmEyOCwgMHhhYTU0MTQxYiwgMHhhNWFjNDA5MCwKLQkweGQ3Zjk3Yjk2LCAweDY2MWY3YjVhLCAweDk2MjI2NGNlLCAweGJmZWZiZjYyLCAweDc2N2U5ZmZmLCAweDY3ZDljZmIzLAotCTB4ZmJkN2I1OWYsIDB4NjQ5ZWNmYjEsIDB4MTI1OGM0YWIsIDB4ZGQzYjM3NjMsIDB4ZDhjNjdhNjUsIDB4YzFiNzU4YmUsCi0JMHg4OGQ4YzQ1YSwgMHg1OTZlZGY2MiwgMHhiOTc4NmM2MSwgMHhkYTFlYjc3NywgMHgzYmJmNTY0YywgMHg5NDA2MTEzNiwKLQkweDY4MjZjNzMzLCAweDNkYWMxZGVjLCAweGEzODRkYTBlLCAweGI4MzhjZTFkLCAweGEzNmFkZmRmLCAweGFjZmE2ZTc5LAotCTB4OGMyZGI5OGIsIDB4YWI5ODk1MGQsIDB4OTc2MzEwNjUsIDB4NjBkNmVmZjAsIDB4MzFkNTZhOWIsIDB4MDYyN2YzMDYsCi0JMHhlMzA2MjU0YSwgMHg2Y2I4YzQzNiwgMHhlOTYxYmVmOCwgMHg0MDAxYjJmNSwgMHhmMWQ2NjQ0OSwgMHgwMzYzMWZhYywKLQkweDJiOGQwYWFkLCAweDk2ZWU3NjJjLCAweGE3NTYzZGUxLCAweDhiNzljNjRiLCAweDllZjRhYzYzLCAweDZhNzcxY2M2LAotCTB4MWQzZTdmM2QsIDB4NGU4OTY3OWYsIDB4MzdjMDIyNjksIDB4NWIxOGJmZWMsIDB4ZmI2ZGRkMDMsIDB4MTA2NTI1NGIsCi0JMHg2ZjE0NjdiZSwgMHhjMGI2NzMxOSwgMHgwNTYwNTdmOCwgMHgxMTU5NzBhMSwgMHg5ZjdjMjQ5ZSwgMHgzOWViZWY0NCwKLQkweDRhY2YzYmJmLCAweDEyOWNlYWYwLCAweGE4ZmMzMjRjLCAweGU4NjBjN2M1LCAweDMyZjVhNWYwLCAweDAyYzg5ZmMyLAotCTB4NmQwMDAzMTIsIDB4MjMxMmQ2ZDUsIDB4YzZiZDM3YmMsIDB4ZmU2MWI5MjEsIDB4Zjk1YzYyOWIsIDB4MGU2MzVjZjgsCi0JMHg2ZDBhMWM1YywgMHgwYWI3Y2U4OSwgMHhlNzEwM2I5ZSwgMHhmOTgxNjUzYywgMHhmNjY4YmYxNywgMHhmYTMxMzQ5ZSwKLQkweGQ1ZmYwNGJiLCAweGZhNjgyNGI2LCAweGVmMzRkNjllLCAweDdmNjBiY2M5LCAweDBkMjNmZTMxLCAweDRjY2ZkYmZlLAotCTB4MzU2MzE4NmMsIDB4NDA3YjE2ZmMsIDB4ZWY4Y2RmNzYsIDB4M2M3NTM1YTksIDB4NzVmYTE3M2EsIDB4YzhjYWY4YmYsCi0JMHhhZTBhNDk2MCwgMHg2NTc4ZTAxNywgMHgzZGNjNDE3ZiwgMHhhNzdhZTA5NiwgMHg5OTc3YTRmNSwgMHhiZDI3YTkzNSwKLQkweGRlODI0YTg3LCAweDRhZGU4MTYzLCAweGIyOWY3YTRmLCAweDNiN2EwODI0LCAweGZhYzEwN2RiLCAweGMyNGM1ZGUyLAotCTB4MTM1ZjAxZTcsIDB4ODVkYzNkMzksIDB4Yjc4OGMxYWUsIDB4MzgwMzMyYTUsIDB4NTg3YTQ1NWUsIDB4NTM4ZjRjYWUsCi0JMHhhNzFmY2UxNiwgMHgyYTFlOWMyYywgMHgzOGM2ZTYxZCwgMHg3NWQyYjRlZiwgMHg5NmY1ZWY0NiwgMHhiZWJjM2NiMiwKLQkweGRjYWU4Mjc2LCAweDE2Y2Y4MTE3LCAweGVlMzQyZDU5LCAweDA1ZmNmMWFhLCAweDk5ZTI4N2QzLCAweGZiNmRmZGI1LAotCTB4YzFlZmExMGYsIDB4Zjc4NGNiN2YsIDB4YzAzNzg4NDUsIDB4NTgzZjVjN2IsIDB4Zjg0ZWJmZjcsIDB4NTNmOTE5MjgsCi0JMHgyMDNhZWE2NywgMHhkYjZhM2UwMSwgMHgyNTg2NDU2NCwgMHg5Yzk1NGMwYywgMHg1YjE5MGIyNywgMHg4OWNkYTBmNSwKLQkweDhiNWNmMDdjLCAweGYxODI4OGU0LCAweDZiMTRjOWNjLCAweDIyNTY0MzMyLCAweDc1ZmQ5ZDYyLCAweDExYmIzZTdjLAotCTB4ODM2MGI4NWEsIDB4YTMzNGRlNzEsIDB4Y2VmMjEzNmYsIDB4OGMzM2MwMWUsIDB4MzgwODI0ZjMsIDB4MDAxZmUwMWEsCi0JMHgwNTU1YTc0NywgMHgwZGY3NDljYywgMHg1NTlmZjJlYywgMHhmODUxZmI4MiwgMHg2YTRiOTgyZiwgMHg4MDk3NmY2OSwKLQkweDk5OGFhYjcwLCAweGVmNzAwMGRiLCAweDFmODk5MzZlLCAweGY2OGM2YjlmLCAweDJmZmNjMTQ1LCAweDYwN2YzOTZkLAotCTB4M2ZmYmY0MjYsIDB4YzE2NWMzYTgsIDB4MjdlYjA0ZGYsIDB4NTNhOGY4MzEsIDB4MWNhZDA0YmEsIDB4YzNkM2NhNjcsCi0JMHhlZDFjODc3ZCwgMHg0YjdjNjE5MCwgMHg4YjNlNWM3NCwgMHgzNzY0YWM2NywgMHg5NTViM2YzMSwgMHg3YmMwZjMwYiwKLQkweGQzNDdiNTU2LCAweDgyZTU1NmZhLCAweDFmMTBlNDdjLCAweGQ5Zjg4NjNjLCAweDY5NjQ2YjEzLCAweGU0MWJiZDcwLAotCTB4NjcwZGM3MDYsIDB4Y2M4Y2VmMWQsIDB4YmJhOWQyMDksIDB4YmJkOWNiZjUsIDB4MTg5ZWZkNjAsIDB4MjYyN2FmM2UsCi0JMHhkZTAwYzdjYiwgMHgwNzE3NWRjZSwgMHg1YjhmMWYyMCwgMHhjYTM1Y2YzNiwgMHhkOTI0ZDhjZSwgMHhhZmU5MWViZCwKLQkweGRlNjZmNzNlLCAweDZmODg3MWM3LCAweDVlMDgzMmM2LCAweDg0MWM5ZmEyLCAweGFjZGUzMmVmLCAweGFjNzJiZjFjLAotCTB4YzlkMWQ2OWUsIDB4ZWViODFkYTIsIDB4MjE5M2EzMTYsIDB4MzljN2JjOWQsIDB4YWQ3OGFiN2YsIDB4ZDlkMWJjMTMsCi0JMHgwZGQ0NzQ1NiwgMHg2OGVlN2JlYiwgMHhlZjlmMDM4NiwgMHhlYjM2ZWQ2YywgMHhlMmNiN2RlMCwgMHg3NWMwYmZkZCwKLQkweDcxNWQ5OWM5LCAweGNmODg0MWFlLCAweDA2M2JlYmVlLCAweDA5N2ExZTkxLCAweGZjMWY3N2FmLCAweDc0MWVlNmQ4LAotCTB4ODZkYmViNTUsIDB4N2Q2OTVmY2YsIDB4NDlhNWJkMWUsIDB4M2ZjOWVmOGEsIDB4YjUyMDdjZTEsIDB4Y2E1NWZmYjUsCi0JMHhhODYxMzkyNywgMHhjYzU5YmNiNywgMHhkZGQ2MGFiNywgMHg5MzQ4NzgzOCwgMHhjNjllODQ4YywgMHhjNjRmOTQxNCwKLQkweDBjOWZhYzJhLCAweDJhYmJkMjBjLCAweGYxMDdiNWRlLCAweDhjZDdjYWFjLCAweDg0M2VkNzc4LCAweDVlOTNkZjBiLAotCTB4OGZkY2ViNDAsIDB4ZjM0M2ZjZmQsIDB4YWJiYTBkMGEsIDB4YzhlMWU3NWEsIDB4ZmUxM2Y0ZWIsIDB4NmE3YWM1NmIsCi0JMHgwY2JmMTY0ZCwgMHg4NjZkYjNmMCwgMHhmOTU0M2EyZiwgMHg1ZTEzZGJlYywgMHgwZTMxYzdhMCwgMHgxYmE4ZTNhZiwKLQkweDhiN2JmOWU5LCAweDQzZTIxNTYzLCAweDYyYmFiMDFmLCAweGY4ZTNmZTA5LCAweDM3M2M1NjNlLCAweDIxYmJkNzE1LAotCTB4ODU4ZjY5YzYsIDB4MzA1NzliZjEsIDB4YjQ1MjBmY2UsIDB4ZGM1ODc5ZTMsIDB4NjhiNjNkZDYsIDB4ZjE1NTkzZDQsCi0JMHhkZjM4NTNlZSwgMHhiM2YzYmEwZCwgMHgwMmM3Njg1ZCwgMHhkYzNkZGQyZSwgMHhkNzg2N2MwZSwgMHg3YWRkZGQ2MSwKLQkweGM2NWVhMzgyLCAweGZkNjJhZmY5LCAweDcxZjMyMmU3LCAweGQ5ZmMzYTBmLCAweDU0ZTdhMjFhLCAweGY0MTQ4Y2ZjLAotCTB4NDFmODg5MWQsIDB4ZmZhNWRjODUsIDB4YzQxNGMzYTIsIDB4M2Q0YTA0OGYsIDB4M2U3M2Q2ZGQsIDB4MTBiMjNhYzYsCi0JMHg5ZjFkZjZkZSwgMHhmOTgwZTgwZSwgMHg3NGY4ZGVlYSwgMHhkZDZmY2EzNiwgMHhiODg4YTI2ZiwgMHg3ZDczN2VhMywKLQkweGQ5ZjFmMjNjLCAweGM1YmQzNjEyLCAweDdlOWY1M2QyLCAweGE1ZGViY2IxLCAweDFmZmFlNjA3LCAweGNiZDI1ZjZiLAotCTB4NDQ2MDJjMzUsIDB4YjJkYjVkM2IsIDB4ZDEwZmE1YzQsIDB4ZTkzMTAwYTcsIDB4YzA4NjgzZGQsIDB4NjBmZjljMDQsCi0JMHgwMDU2Y2M5MSwgMHg4NjNiNzVkZiwgMHg3YTA4YjBhNywgMHg1YWRmNmQ1YSwgMHhiOTk1NWNjZSwgMHhmNTEyZmQ4YywKLQkweDhlZDdmMjFjLCAweDk3ODRmMWExLCAweGUzZTkxYjM2LCAweDk3MDdmMWYwLCAweDE5NDZiYjU3LCAweGUwZWY5ZjdhLAotCTB4MWY3NGYzMTAsIDB4Y2MyMTNmM2MsIDB4ODEzMWI5MGYsIDB4YTIzMTk1ZGIsIDB4NDRlOTQ1MDUsIDB4OGY2Y2NmMzgsCi0JMHhkMmUxNzlmNSwgMHhlMmY3ODI5OSwgMHhjY2U5ZTAxOCwgMHhiZDBiNzdiNiwgMHg1ODY3MmZjMCwgMHg1MWQ3YmVlMCwKLQkweDMwYjRiZTdlLCAweDBjMjY3YmY0LCAweDQ1NzBhZjc5LCAweDZlZGU1MDZjLCAweGJmNmJlNjI5LCAweDcxNDNiNWU1LAotCTB4YjA5ZjhjMGEsIDB4MzdhMjc3NzUsIDB4MzBiNzdmMDQsIDB4Zjk5Nzk3ZmQsIDB4Y2JkZjA3MzcsIDB4MWRmNGM3ZDcsCi0JMHhlYzFlOTAwMywgMHgwYWM5ZDNmNSwgMHhlYzc2MTNiNCwgMHhhMDdjZTQ0ZCwgMHg0YmNlOTBlOCwgMHgxNWZhZGU4NSwKLQkweDljMTExYTVlLCAweDNhYjJjMjZmLCAweDYwYzJhOGQ3LCAweDk5ODJmNmJmLCAweGZhZmI0MmY5LCAweDVmNGQxMTgwLAotCTB4NWQwYjA1ZWQsIDB4MjZjNDI3YjcsIDB4YzNlOGZlOTIsIDB4ZjhmZWEwZmEsIDB4YmYwYjc4YjYsIDB4ZTBlZGUyYWUsCi0JMHg2ODU5ZDM5MCwgMHgyMzlhY2ZiZiwgMHg2MmVkYzlmMywgMHg0NDYzYjc1YywgMHgxMzQ3ZmEwYSwgMHhkNmZlZmU4YywKLQkweGYzMThlMzA4LCAweDc1ZjBiOGQxLCAweGVkZGNiOWJkLCAweDNiZGI5NTFhLCAweGNjOGRlMzdjLCAweDFjYWZjOTFkLAotCTB4OWFmZGMwOWYsIDB4Nzk5OTg3NmUsIDB4ZGJlZmFlNDEsIDB4NzQzYjIwNjgsIDB4ZDMwN2UyZTgsIDB4OWY3ZTgxMGEsCi0JMHg1NzU4MzA2ZSwgMHg5ZmFiM2UwMiwgMHhhZmYxOWRkOSwgMHg0ODdhYmY3MCwgMHhmZTgyNTU5NCwgMHgzZmJmOGFhNywKLQkweDY3ODJmMWYyLCAweGZiYWUxNzY0LCAweDI1ZjcwZGQzLCAweDczZjY4M2NmLCAweDgwMWFjN2UwLCAweDAzNDZjMTYzLAotCTB4ZjhkZWFmNWQsIDB4NWE3ZWJhN2QsIDB4Njc4MmU5ZjAsIDB4OWVhMjA2OTIsIDB4NGQ2N2I0M2YsIDB4ZmFiM2FlMzIsCi0JMHgxM2JlMWZiZiwgMHhhMzU2YzVmNSwgMHg2ODEwZTA3NSwgMHhhZTQ4YjY2YiwgMHhiMTcyMjE1MSwgMHhhNmIzMDVlOCwKLQkweGFhYzc1NWJmLCAweGJhZWExZDcxLCAweDdjYmVlNDk5LCAweGJjNzgwMTVmLCAweGJhMGZkYzA5LCAweDhmNjVmZjZhLAotCTB4N2YwMTdmZDYsIDB4ZmRjMDliYzUsIDB4NjE1MzQ5OTUsIDB4ZGQ0NTc1ZGQsIDB4ZGVlZTI3ZTQsIDB4ZmM3NjRkMTcsCi0JMHhmYzk5MTZiNywgMHhiZjkwZmYwMSwgMHhkMDhkZTdmYywgMHhiZDZmZmIyZiwgMHhjMTA4N2M4MywgMHg1ZTg1YTNlNywKLQkweGY0OGYyYzY2LCAweGY3ODk5NTUwLCAweGM5ZTg3NmNiLCAweDk1OGIyODlmLCAweGQwN2VkZjA5LCAweDA4YzhhMzEzLAotCTB4NjFhMzJkMzksIDB4ZTdkNGY3ZGMsIDB4NDZlYjkxZTQsIDB4ZjFkMWI4YzAsIDB4ZTI3ZTg2MDYsIDB4MjY4YmZjZjcsCi0JMHhiN2VmZDAzMCwgMHhkNDdmZDA1ZSwgMHg1MjllYjIxMSwgMHgyM2EzZDRlNiwgMHg5YTBjYzI1MiwgMHhlM2EzYWJlYiwKLQkweDA4ZmY0NzllLCAweDFlYTNkMzI2LCAweGVmNjkzMzJmLCAweGVlM2ZlZThmLCAweGQxYmJkYTM0LCAweDU1NzVlZDU2LAotCTB4Mzk0MzllN2UsIDB4ODM5NDE4MTgsIDB4ZjRmZWZiZGQsIDB4Njc1ODc4YzQsIDB4ZmI5OTQxZDUsIDB4MzNkMDU3NjMsCi0JMHg3MmJhZTE2ZiwgMHg1NjZmZGU5MSwgMHgwZWU3ODE2YywgMHhiYTFjZWMwOSwgMHgxYTQzNjlmOCwgMHhjNGIxNTdmMiwKLQkweGQzZmY0MjU2LCAweDkxZTU1MThiLCAweGQ1NDYyMmU0LCAweDljZTgwYzM3LCAweDQ0ZjNhNDE3LCAweDdkY2JjMmM3LAotCTB4YzVjOThiMTQsIDB4MTFmNzJlNGIsIDB4ZWZhZjZmZmUsIDB4ZWYyZTU5YmUsIDB4ZmJkMjMwNGUsIDB4Yjg2MWY1YzMsCi0JMHhmYTU3N2NmYywgMHhiZDkwYzI3MCwgMHg2YTU4ZGU1OSwgMHgxN2VkOGU3ZiwgMHgwOTllYjk1YiwgMHhmYWUxOGZkNywKLQkweDFjMmI4NTRmLCAweGIyMGJkYWRlLCAweDRmOGRlZjQ2LCAweDUwNWM2ODUwLCAweGZlZTkxOWZmLCAweDNlYjM4YzM1LAotCTB4NjcxMDg4NGIsIDB4N2MyNjdkODEsIDB4MjllOTg3NzksIDB4ZTFmZjAzYmUsIDB4NjQxYjhlMGMsIDB4MDAyNWVjNTEsCi0JMHg2ZmI1ODM1MiwgMHgyNWY1ZWEwYywgMHg1ZTE3NzcxNiwgMHg4NmU5N2VjZiwgMHgwYzE3ZTg1MSwgMHg0M2FjZDJkYywKLQkweDcxMjlkMWZkLCAweDg4MzY2ZDdhLCAweDgyODNmYjE2LCAweDA0NWZkMDcxLCAweGZhMTMxY2RmLCAweDUzYTBlMjAwLAotCTB4MmVmYjY4MTYsIDB4YzMxZjYzMmIsIDB4Y2M0Y2EyZmEsIDB4YmIyMDJlNmIsIDB4MDQxNDM1ZWYsIDB4N2UwMjNmZTcsCi0JMHg4ZDk5YzYwYywgMHg5ZmM3OGMyNSwgMHhlYmZmZGMwOSwgMHhhY2U4YTc5YiwgMHhjYmMzZmYzMCwgMHhjMDkzY2VhZCwKLQkweGE3OTdhYmNmLCAweGYyZjJjYjUyLCAweGZiYmY0ODc0LCAweDZmZDA2ZTA0LCAweGJiYmNlN2M0LCAweGE3NWQ2OWEyLAotCTB4Y2EzZTU3MjQsIDB4YmUwMmMzZTUsIDB4NjJkYzdhNzAsIDB4MzVkYmY5NTMsIDB4OWEyZmQ0MjAsIDB4NWY1OTFhNWYsCi0JMHhkM2QzNmY1ZiwgMHg2NmE3OTJmOCwgMHg3MWRmYTE2NCwgMHgyY2VlZmRhYSwgMHgwMGE3YTNkNCwgMHg0MWRhMDBkZSwKLQkweDliZmUyM2JkLCAweDg0Yzc4NWZjLCAweGVjMjIzZTNjLCAweDI3ODhiYzQ1LCAweDA0ZTQyMjdmLCAweGQ1YjljN2Q4LAotCTB4ZDE3NGViODIsIDB4YTdjYmQ1ZmQsIDB4ZjJmOGZiNTMsIDB4YzYzZjc0NjUsIDB4MTJmYzQzOTYsIDB4NDA5NWUyMzcsCi0JMHhjOWRmYTA1ZiwgMHg4M2Q5MzJiNSwgMHg4MGQ3NDZmOSwgMHg0OWVmNzgwNCwgMHhkMmUyOGU5MywgMHhlNTJkZWI4ZiwKLQkweDlkNzgyY2RiLCAweGZmMzM3YzUxLCAweDUwOWJmMWE5LCAweGI1Y2IyZTJlLCAweGViNmY0NzU4LCAweDc1NzZjNWJjLAotCTB4NzU5NmJjN2EsIDB4YmE1ZGExYzQsIDB4MDBjNzhmY2MsIDB4N2U0MWM5M2IsIDB4NmZiYjJmOWMsIDB4M2M2MTE1YjIsCi0JMHhlMzhjOTFkMywgMHhjMDYwNTIzYywgMHhiYTA2MGExNiwgMHhhYTNmNTBiMiwgMHhlMmQ1N2ZlZiwgMHg4NDk2YzViYywKLQkweDg4MWIwZWYxLCAweGNkMTJkMTcyLCAweDljMzg0ZWVkLCAweDFlZmQwNWEzLCAweGJlMDhhZTVlLCAweDg4ZDZhM2M4LAotCTB4ZGRjNjI0YmUsIDB4ZTgyMmFmNjgsIDB4YjllMjcxOTUsIDB4MzhlNzE2MTMsIDB4NDJkZmQxMWIsIDB4MDNhZDI3N2UsCi0JMHgzOGVlZTVmOCwgMHgwZWJjNDRlNywgMHg2YzY0YzM3MSwgMHgzY2YwYTU4NywgMHg1NThiMjljZiwgMHhlMjUzOGJmMCwKLQkweDlhNmJiOTdlLCAweGE3MWU0MjJkLCAweDM4NDFiY2I3LCAweDNjNmQ2NzFjLCAweDRmOWUxMzhmLCAweDlmMzU1YjUwLAotCTB4ZTdhYzQ3MzAsIDB4MjZhYjA0YWIsIDB4MzBiNGEzY2YsIDB4NDIzY2E0NjcsIDB4ZTM0OGNkOWIsIDB4Mzk0ZTlkNTIsCi0JMHhlZTVkZTk0NiwgMHhmMjNmYmE4NiwgMHg5OTJmOThjYSwgMHg0ZTI4MWNjZSwgMHhkYTViMjMyOSwgMHgzNjkyOGYzMSwKLQkweGYzMDJiN2NhLCAweGUxMDk4ZDJjLCAweDYzMzVlODcyLCAweDViYWZhNTdlLCAweDcxODVlYzk3LCAweDg5NzcwMWM5LAotCTB4MWVkOGUwMTEsIDB4YTVmMDRjOWYsIDB4NDgxNWZhYjAsIDB4MWQ2ZWExYWYsIDB4OWVlODdhMmQsIDB4MDZhNDlmNjgsCi0JMHg1MGE0MzA3YiwgMHg1MDkwNDdlOCwgMHg2NTViY2EzMywgMHhhNDQxZmJhYywgMHhmYWNhYjBmMywgMHhmMzA1NDY1NSwKLQkweGY1MTk1ZTUwLCAweDlkYzk2OWNiLCAweDM4ZmUwMzZkLCAweGEyM2EzN2JkLCAweDliMTNmNzVmLCAweDY5NTJmYmQwLAotCTB4ZWYwYTk2MWYsIDB4Nzg0MGMxNzksIDB4OTNjMmZhMTgsIDB4YTFkZTExYjMsIDB4OTdhNmRjMmYsIDB4NWZmNWUyNDIsCi0JMHhkZjA0MGNkOCwgMHhiMjhiYmRlOSwgMHgzMGZlN2UyOSwgMHhmNGU2ZTU4YSwgMHhlMGEzNzc5YywgMHhkZjAyMTU4YiwKLQkweGYzMjMxYWFmLCAweGRjNjIzM2RkLCAweDkzZTllYjU1LCAweDZiMjRlN2UwLCAweGI2MzNmNGY0LCAweDVkNGNiYzkwLAotCTB4ZDNkMjc5ZWQsIDB4ZjQyOWIwM2YsIDB4YjdkMzdmOWUsIDB4ZjgwM2ViZWMsIDB4ZTY0YWI3ZmMsIDB4N2EyZmJjNDAsCi0JMHhlYmU1MjM3MSwgMHg4Y2I2MzU1ZSwgMHhhOWViODJkZCwgMHgwN2NjMzFkMywgMHg5YmY3ZDllYywgMHg0ZmQwN2Q3ZCwKLQkweGEwODY1NGFjLCAweGY5Zjk3MDdmLCAweGYxMWI5YjgzLCAweGIzNTViZmZhLCAweDM0ZmY4ODIxLCAweGU2MTJlM2RmLAotCTB4MzczMmJlMDUsIDB4ZGFiZWJlMTMsIDB4YzA1NmM1MTQsIDB4NmUxZTE2OTIsIDB4ZTg0M2ZiMTksIDB4MzFkMWFmYWYsCi0JMHhlYmUxMmJkNCwgMHg3NDE5Mzc4NiwgMHgwZGZhZDhhOSwgMHg3ZjRlNjJiYSwgMHhkZDJhN2ZkNCwgMHg0ODhjYjE4MSwKLQkweDg4NmU5NTBmLCAweDdiNjdkNDNmLCAweGYwNDZiZDM2LCAweDhmNmQ3MGFiLCAweDdhMmQ3MGU3LCAweGU0NThlYjcxLAotCTB4MzYzNTNlOTMsIDB4MmEzNGYzMDksIDB4OWRhOGZmNWMsIDB4MzNmNjg2YjgsIDB4MjU3MmU4MjAsIDB4OGUxZWY5ZmIsCi0JMHhlMTlmYjcwYiwgMHhjNTg5NzM3NiwgMHg1ZGM3MTQ3OSwgMHgxNWNlN2VjOSwgMHhlODQ3YjVmYywgMHg4ZjI5ODU2MSwKLQkweDFkOTJiZTYwLCAweDI3ZGU1MWQ0LCAweDZjNzMyZTljLCAweDlmYTNmMjNkLCAweDNmMjJhZWRhLCAweDhiNjZjNTNhLAotCTB4NmNkZDFmOTgsIDB4ZDliNDdhZTQsIDB4ODk0Y2U2YzYsIDB4MDQxMzBmMjAsIDB4NWQ3NWJhYmMsIDB4ODk4YmI0NDYsCi0JMHhiZDQ0NTI2ZCwgMHhmNWMyY2E3NCwgMHhhZmNkZTgxMiwgMHgyM2QzZWU0OSwgMHhmODA4ZDVlYiwgMHhmZjcwZWM5NSwKLQkweDVkZmUyZGZhLCAweGExMjBhYTM4LCAweDVkYmEwYzdmLCAweDNkOWQ0ZjgwLCAweDhmMDI5ZjE0LCAweDdjNTU1ZTJhLAotCTB4ODg0YmUyZmEsIDB4M2YwYjM2NWYsIDB4YTRiYzdiNzMsIDB4YjNhZWUzODksIDB4MTY5Y2UzYWIsIDB4MmY2NjRmN2MsCi0JMHhjZWQxM2FmYSwgMHhlZGY4MDM5ZiwgMHhhNWM0ZGVmOCwgMHg1NzVmOTM0YywgMHhmNTg5ZWFmMywgMHgxNDM4Yzk1ZSwKLQkweDNjYTMwMmNkLCAweGJkZGRiNjVjLCAweGJhZTMwMGMyLCAweGYzYzczMDQ2LCAweGIwYWY4ZmQwLCAweGIzYmVhMDk2LAotCTB4MzFkYTNiNTUsIDB4ODY3OGRlZmYsIDB4OTcxYjM3ZTcsIDB4OWE0YWRmMzAsIDB4NzNmZmYxODcsIDB4MmE3Y2E1ZjcsCi0JMHhlOTY1ZGRlMiwgMHhmNWQ0MTc2OSwgMHg2N2VhYmQ4MSwgMHgyMmU1NzBlNywgMHhhYmQ5YmQ1YywgMHg4NTE3Mjg2YiwKLQkweDE3Mjc2ZmY2LCAweGQ2ZTg5MWM1LCAweDZiZjVjZjE1LCAweGViZGZmMTg0LCAweGUyYjdjZTg1LCAweGY5ZDEyYmY1LAotCTB4MzkwZjUxMGUsIDB4ZmM4NTNmMTIsIDB4NmIzZjk0NGQsIDB4ZTFlZTkwN2UsIDB4OTE4ZTJjZjQsIDB4N2I3Y2IxZmUsCi0JMHgxOWRjYmM0ZiwgMHgyNzZiMmYwOSwgMHhiOGY0ZjJlOCwgMHg4OGVkMTY0ZSwgMHhkYTE2Nzc2NCwgMHhmZmJjZjNiZiwKLQkweGNmNTI3YjQyLCAweDY5ZmMzZmJjLCAweDU2ZTdlN2ZjLCAweDBlYmVkZTNhLCAweGE2NGI3Y2UxLCAweDFmYjllOTM4LAotCTB4NWYzMTE4NzcsIDB4NTVhN2U2YWMsIDB4NGI1ZjNkNzgsIDB4YjlmYTA5Y2MsIDB4NWE5OTZiZjMsIDB4OWI1ZDdhZjUsCi0JMHg1NzcxODg1NCwgMHhlNDhiZWVjOSwgMHg3ZmI2NzcxZiwgMHg2NzcxZmU0ZCwgMHhiZWFjN2Y5OCwgMHg0ZjYwNWVmNywKLQkweGIyZDE4Zjk0LCAweGZjZmZmODg1LCAweGNiY2YxZTA2LCAweDQ4ZTlmOTRjLCAweGRmYjNjMzgwLCAweGYxMGE3Y2MwLAotCTB4YjQwZmY5MmYsIDB4Njc5ZmU4NWUsIDB4ZjFjN2UxY2MsIDB4MWVjOTYyNWIsIDB4OGYzMDM4MmUsIDB4YWM1ZjFjZjAsCi0JMHhiZTA4NGE2MywgMHg0Y2QxOWMxMiwgMHhiZDk3YzEwOSwgMHgyN2U5YTZkYywgMHhjNjY4ZmFiOSwgMHhhYmVmNGNhNywKLQkweGJlZTY5ZmI5LCAweGJkM2Y3MzQxLCAweGNmZDM0MGJhLCAweDMzNDliZmFjLCAweGE5NTk3YjNlLCAweDFkZTM5ZmE2LAotCTB4YWZkZjE5YTcsIDB4M2Y0ZDc2ZTksIDB4Y2Q2ZWY5YjcsIDB4YjhlNmNkZjgsIDB4ZTAwZWE5ZTcsIDB4YzNmYTA2NzUsCi0JMHg3YWM1MmI3YSwgMHg4ZjdmNWJhZiwgMHg5N2U2MzllNiwgMHg5OTJmNThmYywgMHhmOWZkYzgyZiwgMHhiMWZiMzFlNiwKLQkweGYyMjk1MjVlLCAweDE2ZmJkNzEzLCAweGRmOWRlNjY5LCAweGU4MmZjZGFjLCAweDc0YmVkNzU5LCAweDRmOWQ1ZmMwLAotCTB4YmZhMWY4NzIsIDB4ZmVmNmJkNjAsIDB4ODQ4ZGQ2YzIsIDB4ZWQzZTg1Y2YsIDB4NmEyZmM1ZjUsIDB4YTY4N2Y5ZmIsCi0JMHg0YzcxYzQwZSwgMHg3ZjQ0MmFlZiwgMHg2ZDc2ZDdlZSwgMHg3NDhhZTJiZSwgMHg1NTc3NWVmNiwgMHhkNTRhOGU3NCwKLQkweDY4YWNkOWQyLCAweGJmOGUxY2U5LCAweGQ4NWIzYzk4LCAweDM3ZGZmODdkLCAweGExZDYyZmUwLCAweDBhZWY4YmU1LAotCTB4NmJiMDdmN2YsIDB4NjIxYjljZjMsIDB4Y2Y1MWM3ZGMsIDB4OTUyZWI3NzUsIDB4Y2JlYmU2MTksIDB4YmJiMjNkNzksCi0JMHg4M2ZjY2JmNSwgMHg3ZDNjODQ0YSwgMHhmZDNjOGY2ZSwgMHhiYjEwZjYyNywgMHgzYmU5ZTZhNiwgMHgyMzcyZmViMSwKLQkweDk3ZjUxNmZiLCAweDNjNDU3ZmRkLCAweDMxZTU4MTQ0LCAweDhhY2RmZjgwLCAweGY1Y2JhNjFkLCAweDJmMzA3MzE2LAotCTB4ZDRiZmFlMWYsIDB4NWZmN2Y0MTYsIDB4ODNkN2E0ZWMsIDB4ZjA1NWFhNzUsIDB4ZjdmOGIwZjQsIDB4NWFhNzA4NWQsCi0JMHg5ZWVmMThjNywgMHg4OGRlZjA0YiwgMHhmZjgwOGM4MCwgMHhlYTlkN2MyYywgMHg0Yjg3ODAzYywgMHgxMmY4Y2YzOCwKLQkweDUxYzYwYzViLCAweDRiZGNmNzViLCAweDRiNmIwMTcxLCAweDQ4MGVmYWU0LCAweGM0M2UzYTFlLCAweGRhM2QyNTNmLAotCTB4MjM0Y2ZmODIsIDB4ZTQ0YzY4YmIsIDB4MTg5NGQxNzYsIDB4YmYzMWM3MTIsIDB4ZDg1N2JmOGQsIDB4NTFlNmRlYzUsCi0JMHhiNWJkMThlYiwgMHhlYTk5MmVkMiwgMHg4ZjU4NWQzMSwgMHhmYmQ3YTA4OSwgMHhmNjgzZmUyNiwgMHhmOTFlOGJlNSwKLQkweDQ1ODliZWQwLCAweGY3YzI3MTIxLCAweDdlYTFmN2JiLCAweDI2ZTdiYzA3LCAweDYzNjI3YmMyLCAweDQxNGE2ZWMxLAotCTB4OThkM2Y5YmIsIDB4YWViNzkyMzgsIDB4M2FlZmIyMDMsIDB4YTRkZTcwYjgsIDB4MDUwNmRiYzQsIDB4ZjBlMTJkZWIsCi0JMHg5ZGQ5MzQ4ZSwgMHhkZTdkMTBmYSwgMHg2NmVkNjkyNiwgMHg0M2Y3MDE2MywgMHg5ZGI5MTIwYSwgMHhmOGYwYjJhZCwKLQkweDdiZThhYzc1LCAweDRmNzZmY2MyLCAweDQxNGY4ZjEzLCAweDQyZGJhYTFhLCAweDg5YjFjMWZjLCAweDVjZmUzNGIxLAotCTB4NWM1OGM5NzQsIDB4ZGYxMTQ2Y2YsIDB4ZjQ0OGU2MzcsIDB4MjI0OTQ2YmUsIDB4NWYxZTVlZmIsIDB4NzVkNzE2M2EsCi0JMHg4ZTUyNWVjMSwgMHgzZTA0NGFlMywgMHgwNDZmYTJjNywgMHgwZTVmNzM2ZCwgMHgwZGY2MjI4ZiwgMHgxM2ViZjNhOCwKLQkweGI2MTI3YzYxLCAweDRkOGVkNGE1LCAweGM4M2YwYWI0LCAweGZiZDIwMzdhLCAweGRlOTNiNDQ0LCAweDhkNjU5NDZiLAotCTB4OTNiNmE1NWYsIDB4MmViYWY5MTIsIDB4MGEyYWNkYTIsIDB4MjE2OGM5Y2EsIDB4MWU4NDYzMzcsIDB4MTQ3MWZjYzMsCi0JMHhjMjczOTMwOSwgMHhkZTRkNjRlOCwgMHg1MTMxODhmOCwgMHg3YTI1OGRlNCwgMHhiYzc0ODlkYywgMHhiN2IxZDA1NSwKLQkweGNmMzNiMjNjLCAweDY5ZDUwN2JhLCAweGFkNzkxZTc4LCAweGQ1OTFlNzk5LCAweDNjOGY3MzNjLCAweGM0NGM2M2IyLAotCTB4MjFkMjMyM2MsIDB4ODc5NDE2YzYsIDB4ZjU5Nzg5ODUsIDB4OWJlYTA2NzMsIDB4Mjc4ZTljYzYsIDB4MWM3ZjIzYzYsCi0JMHgyM2NmMWQ5MiwgMHgzMWJjYzdlOCwgMHhlMmI3MDBmOSwgMHg5MWYwMzlkMCwgMHg0YWQ4MWIxMSwgMHg3ODE3ZjQzMywKLQkweDE5MzNjYTE1LCAweDJkOGIwZTIwLCAweGMzZWZjYTA4LCAweDlmODQzOTg5LCAweGE2ZmQ0N2MxLCAweGZjM2ZiODdjLAotCTB4ZjMxZGFiOTgsIDB4MzFhNjAzY2EsIDB4NjZmZmFhMWIsIDB4ODcxNjVjZDYsIDB4MTYwNmM0ZmUsIDB4Mjk1OTZlMzEsCi0JMHg2NGJlMzllOCwgMHg5ZTcyOGM5NywgMHgxMmZjMDVkNCwgMHgwNTJiMWU4MSwgMHg1NzhlNDAzZCwgMHg3Nzg3M2QyMCwKLQkweGVlYzliYmI5LCAweGFhNDAzZDA4LCAweDNkYTNlMzBjLCAweGMzOTdmMjNhLCAweDU3MTAzZjlmLCAweDdiZDIzMGY2LAotCTB4YmU3MjJmYjAsIDB4YzM4NWEyZTQsIDB4ZmQ3MThjNjEsIDB4YmMxZmU3MDQsIDB4ZmE4OGMzYWQsIDB4MzdhYTgxNjYsCi0JMHgwZjRjNzUyYiwgMHhlODJhOWRmNCwgMHhhZjAzNzUzNywgMHg5NzhiYjM1MywgMHg5ZmFhYzkyZSwgMHg4NjdlNjhjNSwKLQkweGI0YzE2MGZhLCAweDFmZTYxZjU4LCAweDc4ZTViNDE2LCAweDQ0OTcyZTA5LCAweGRiNGYxNWY5LCAweDE3ZjYxNzYxLAotCTB4YzU2YTFkMGMsIDB4N2JmOWQ3NzgsIDB4NDc5MjdkMjYsIDB4N2FlMzFhMmUsIDB4NTEzZWNmNDcsIDB4Y2ZkOTAwZjUsCi0JMHhkYzViYWE0NCwgMHhhMmVhZjgyZSwgMHg0MTM4MjE0NSwgMHgwMThkYWYzZiwgMHhiMGQ4MmMzYSwgMHg1M2VlMTc2MiwKLQkweDE5ZGZlZjc4LCAweGNhOGUyN2Q1LCAweGIyNzBjMzVkLCAweGNiMzkwMDNiLCAweGIzZDViMDBhLCAweDM4N2MwMjhhLAotCTB4MjY5OWU2OTUsIDB4MGQ3ZWYxZTYsIDB4ZGYwNTM1ZWYsIDB4MDFkYjQ3N2IsIDB4MDM1MWNmNWEsIDB4NWY4MDlhZjMsCi0JMHhhNWRlNzczYSwgMHg5OGRhYmZhMCwgMHhmZjEwNzI2NCwgMHg3MWQ3YmE4YSwgMHgxOTEwZmRkOSwgMHgxZDU3N2QwZiwKLQkweDJkYTMzNjgyLCAweGQ2MDZiYWM2LCAweGI4YzhjYWIxLCAweDc2OGJhYjdmLCAweDVhMjdmZTIwLCAweDJmYzRmNDNhLAotCTB4YzQ3YTVkODksIDB4Njc0MTU5ZTMsIDB4ZGZjOWYxZjQsIDB4Mjc0NDYyNGYsIDB4ZTljNzVkMzksIDB4N2RmMGFkOTYsCi0JMHg3OWI1ZmQyMywgMHg3NTEzNzdjMCwgMHgxOTAyZmU0MiwgMHhjYzYyN2Q3OCwgMHhlMDE1NGIzYiwgMHgyYWViMDNjYywKLQkweDdmNDFlOWM3LCAweDY3N2Y4YzRmLCAweDBmZjQwZTY5LCAweDRlM2Y5YmFlLCAweDMxM2RmYzBmLCAweDczMmY5ZGZkLAotCTB4NWFkZmQ0NDAsIDB4MGZlZmM1NTcsIDB4YmVjYmU3N2MsIDB4NWJhYzBmZDAsIDB4NGNkZmVmYzAsIDB4NTlkZWNmYmMsCi0JMHhmMzBlM2Q1NywgMHhkNjVlZWZmYiwgMHgwN2ZlN2MwYiwgMHg1N2VmMmU2NCwgMHhiYTUxY2FkYiwgMHhjNjcxNDhmYSwKLQkweGNmMzU0NGIxLCAweDFlZjgwY2NjLCAweDhlZWZkYjU3LCAweGE5NzU5ZGEyLCAweDQxYTc3MGY1LCAweDhlNDcwZjUzLAotCTB4OGRiZjAxMzEsIDB4MTJjNTdjMTcsIDB4OGMwZWM4ZTMsIDB4YWYxYmY0MTMsIDB4MThmZWQzZjcsIDB4Zjg0ZmM5OWQsCi0JMHg1ODM1OGViZCwgMHg1YjAwNmY5MSwgMHhmNjE1MmVlYiwgMHhhZWQwN2Y3YywgMHg3MjRiZjk2OSwgMHhlODBjYjYzMiwKLQkweGUyNTYyOTJkLCAweDk4Y2I1NTkzLCAweDNmNzY4Y2RiLCAweGYxZDc4NzU4LCAweGUxNzMzYzNhLCAweGQ0Nzg1NWZiLAotCTB4MGI4MGY3ZjcsIDB4ODViN2FiNDgsIDB4ZTY4MWI1YzIsIDB4MWNlYWUxNTEsIDB4Nzk0NWU1MTIsIDB4MGFhN2VkNTIsCi0JMHhmNWQ0YTc1NywgMHhiN2JmMjYyYywgMHgwMTNmYmRhNCwgMHhkYjE5ZDZlOSwgMHhmZjQxMjU5NSwgMHg0NDIzYTRjNSwKLQkweGFlYTRjZWM3LCAweDQ4NDcyNTY3LCAweGE4ZTljMGRmLCAweDM4YzU3MjdiLCAweDE5ZTdiYzJmLCAweDAyNGJhOWQ5LAotCTB4ZjkxOTQ2ZmMsIDB4OGMyNjkzM2UsIDB4OGYzZGUwNTcsIDB4NThiZGI5MjQsIDB4NzNiZTAzZGYsIDB4MzJlZjkxZjgsCi0JMHg0Njg3YTQ4ZCwgMHgyN2U2ZDUwZCwgMHhjZjljNDkyYywgMHgzYTNiNDU5YSwgMHgzMGZlYjlhYSwgMHg5YjY3YTVmMCwKLQkweDc4YzA1NmM0LCAweDIzNmVjNWNmLCAweDZkODk4OWRhLCAweDY4NGU4YzI3LCAweDMwOWRiNmViLCAweGMzYWFiZWEyLAotCTB4Yjc1M2NjM2UsIDB4NmY1MTE4YzEsIDB4Nzk5MjQ4NmQsIDB4MGZjYzMyOWUsIDB4ZTAzOTliZGUsIDB4YzdkYzQ0YTEsCi0JMHg0NTUxMjk1MCwgMHgwOTFkZGVlZSwgMHhlZjdmYjFhMywgMHhmODI1NWM1YywgMHg4ZWI3MjMyZCwgMHhiOTY2YzdjNiwKLQkweDc2YzIxZmRhLCAweDhiZDhlYjBlLCAweDJkYzMzNDJjLCAweDk5ZDJmYzZiLCAweGJmMWEzMWQ1LCAweDVkYmQ1Njc2LAotCTB4MGNkMzlmZDMsIDB4OWViOTAxZDQsIDB4MWI1ZDJjYjMsIDB4NWI4ODMwM2YsIDB4MmMxOTllMDEsIDB4NmRmYTg3ZjgsCi0JMHg4Y2UzYTBiYSwgMHhkYzAxYjVkNCwgMHg2ZGMzMzJjNywgMHhjYzg0NzZmMCwgMHg4NTZkYjEzNywgMHhkNzcwODZkZSwKLQkweGJmNTIwZTRiLCAweDczZTBhNjVlLCAweGExMGFmOTMzLCAweGViNDM3YmQ1LCAweDc5NWJhMzYyLCAweDg2YWVhMzMyLAotCTB4ZDgxNWZiZmIsIDB4NTQ1NmJjMDcsIDB4NDI0NTNlNGIsIDB4YmVlOTE4M2MsIDB4ZmJhMjU1YTcsIDB4NDdjN2Q2OWUsCi0JMHhjZjMyM2VlMSwgMHgyNmYyODk1MiwgMHgzYzQ0N2RjOSwgMHgxY2VmZWMyNCwgMHg1MWU4MmIwMSwgMHhmMzMzY2UwMywKLQkweGEzYjMxMmZiLCAweGJlZmUxMGRlLCAweGU5OWNmZjBhLCAweDNmODlhN2U1LCAweGFlYWY5Zjg1LCAweDc2MDJiYTczLAotCTB4YzljZmFlMTcsIDB4ZmU4MGM0ZmUsIDB4NjRlZmFjMzUsIDB4ZGE5ZjA2ODcsIDB4NmQ3YWFjZmUsIDB4NmQzMmNlN2YsCi0JMHhmMDkyNmE3ZiwgMHg4MWIyMDdkZiwgMHg5M2QzNGYyOCwgMHg1NWVhM2QyNCwgMHhlNjQ1ZmZiNSwgMHgwMWY5NmZmYiwKLQkweDZiYjJjZDllLCAweDhkNjdmMjI2LCAweGE4ZjU0ZmQxLCAweGZhOWJiMmNkLCAweDVlYjg3ZGVhLCAweGMwZWU0OGM3LAotCTB4OTYzOTIwMWYsIDB4MTk1NzNlNDgsIDB4ZjQxMmQ2OWMsIDB4ZTIyNTZiYTMsIDB4YzQyYzk5ZGIsIDB4OGUwOWM4NWYsCi0JMHhiM2RjYmVhNywgMHhkNzEyNjhmZiwgMHhhZWNjYWIzYiwgMHhkYjE3NTRhNSwgMHhjMTM3NTkyOSwgMHhhNzdhNTFhNSwKLQkweDU1YzBmZDFlLCAweGM4YmNlNDUyLCAweGRlZGM0OTYzLCAweDhhMjBjNWJlLCAweDIwMDZiODA3LCAweDlmNWRhMjkzLAotCTB4YzJmM2VmMWEsIDB4NzZmYzA3N2IsIDB4ZmJmZDE3YWUsIDB4MDdjMDg1MDEsIDB4YjczZGNhMGEsIDB4YmQ4NWUzMzcsCi0JMHgyNWZlMDQ5OSwgMHhlNDAzN2ZmYSwgMHhkZmE0ZTk5NiwgMHg0OTVhMzQ2ZiwgMHhhNDNiMGJiZiwgMHgyZmU3MGJlYSwKLQkweDdjNjg3NmI0LCAweDNmOGE3ZWM2LCAweDdiNWZhZDI2LCAweGZmNjJmNTBlLCAweGM3ODJjZTdlLCAweGNjNDdiZTAxLAotCTB4ZWM4ZmZkZmMsIDB4MmZiODdjOTAsIDB4M2VkMDZlYTcsIDB4YzAyOTlmZDIsIDB4YmFkZWY4MTYsIDB4NWI0N2ExNTQsCi0JMHg1MmFlZmJiNSwgMHgyZTYxYWY1MCwgMHg3YTIwYzI3ZiwgMHhlNTQ5OWE2ZiwgMHg0MWU5Mjc3NiwgMHhiYmFhNWZjOSwKLQkweDQ1MjlmYTA0LCAweDBjYTZmN2JjLCAweGJjOTVmMDg1LCAweDc1YzI0NWE4LCAweDBhZWYzMjY3LCAweDQ2M2ZlM2I0LAotCTB4YjYwYTRjMjEsIDB4OGZjZmVkNTcsIDB4NzlmZGMyOTIsIDB4NjVlNjEyNGIsIDB4MTQ4YzNiNTIsIDB4ZTMyZWIxZWYsCi0JMHhlYmE3OTQzZiwgMHhmMjMyN2YzOSwgMHhiMGZjZjg1OSwgMHgwNzU3YWE3YywgMHg3MThiZjJlMywgMHg3N2I5YWY5OCwKLQkweGRjNmZiZjY3LCAweGI0OWIyNGVmLCAweGFhYzFiNzcxLCAweGU3YzdiYjhkLCAweDQ0Y2ZmNTY5LCAweDRjZWY1Njg3LAotCTB4YjlhN2VlMmUsIDB4NTAzOWM1M2YsIDB4Nzk2YTdmNzMsIDB4ODc3ZmE2YTEsIDB4ZjhjZDY2ZWIsIDB4Njk5N2E2YmIsCi0JMHhlM2E5NTFmYSwgMHhkYTAwZjJjMiwgMHg5ZTRjNGFmYywgMHhlYjEyYmYzNiwgMHhhMjUxZTZkMCwgMHhiYTdhZmMwZSwKLQkweDlhMzE3ODA0LCAweGMwNmUxZGJjLCAweDQ2YzgxMzQzLCAweDQ3NjgyZGIxLCAweGE4OTljNjA2LCAweDY4NWQxYjQ4LAotCTB4MzRkYjYwYjYsIDB4N2M4ZmNhMjQsIDB4Yzc4N2Q0ZDIsIDB4YmUwNzUxZTEsIDB4Nzk4N2VhOWYsIDB4NGM1YmYxNGMsCi0JMHg0OTc4OGE1OCwgMHg4YTYyOTVmMiwgMHg3NTQ0ZDAxOCwgMHhkNDFlMWJkNSwgMHhkM2QzOWJmYSwgMHhlZGE5NWNiOCwKLQkweDk5ZjcyNGIxLCAweGJjMWJhYzY0LCAweDdmNzNhNGE4LCAweDg5ZjE0MDM2LCAweGJmNzE5YTI5LCAweGZjODliYjY4LAotCTB4YmU0ZTM1MjIsIDB4OTQ2NWE3MWMsIDB4MGViYTQwOWMsIDB4ZjU0OWQwN2EsIDB4YWNjYWQ2MTMsIDB4ZGU3YzU3OTgsCi0JMHhkYmE5ZjIyOCwgMHg0MWRjM2VmOSwgMHg2NzNhMWRhZCwgMHg0OTJmN2M4OCwgMHg0OWUwZmFlNiwgMHg5YzU4ZTk1NywKLQkweGFjMGRhZWJmLCAweGZhZDNjYTJjLCAweGE3NTg4YzhmLCAweDhmNmI2YmFjLCAweGVmOTY3YjQzLCAweDc5ODhjOGZhLAotCTB4NjE3NWUwYmIsIDB4ZDE1ZGY0ZTcsIDB4NTVmOTVmNTgsIDB4ZmY3MTFjOGIsIDB4ZjdjYzkyYjIsIDB4N2ExM2VjNmIsCi0JMHg4M2Y3ZDY3ZCwgMHhiMGM5NTFmMSwgMHhiNTllN2VhMCwgMHhjMzJmY2JiNSwgMHg1ZTgxNjdmYiwgMHg0YTZiZjJmMywKLQkweGZhMGQzZDI0LCAweDNjY2YxMzU5LCAweGE3ZWVhNjk5LCAweGMxZWM2YTcxLCAweDAzN2VjNWRkLCAweGVkNmE5ZmQ5LAotCTB4NzhkMzM5ZjgsIDB4NWM3YTA0NWMsIDB4OTFhMzNkN2IsIDB4MWQ2MzBiZjQsIDB4ODE1YmNjMDYsIDB4OGZkY2Q3NWUsCi0JMHhkMjcxMTY0YiwgMHgxMmU4MzY0MCwgMHhhZWEzODFlOCwgMHgyYmI1ZmJjOCwgMHhjNzQ0ZjRkMywgMHhhMjMyZWVhMywKLQkweDRmODA5M2MzLCAweGVjOWY5N2Y0LCAweGQ3OGUzZjgxLCAweDY1ZWRlMTJiLCAweGZhMTA4MWU0LCAweDRmYWI4Zjg1LAotCTB4Y2JmNDdlZTMsIDB4MDdlZGU4YmQsIDB4OTc5ZjdkMDQsIDB4NTRhODA1MDIsIDB4ZTI2OGFlM2QsIDB4YjlhNjk5ZGYsCi0JMHhmNzNmNzE4YiwgMHgxYWFmY2NiZSwgMHhlYjMxNWViMSwgMHg3YjQzMTJkNywgMHgwM2Y2ODdmYiwgMHhiOGNmOGZiNCwKLQkweGVlMzI2Zjc1LCAweGVjYjRmNGFmLCAweDdmYzA2NjRkLCAweDA1NjUwNjM1LCAweDFmYzBmM2ZhLCAweGVhN2ZmNDBlLAotCTB4N2YwNGZkNWEsIDB4M2I2MTRiNmQsIDB4OTU2ZGFmNWUsIDB4M2Q5MmE4MWMsIDB4YTE4ZGNlZGIsIDB4NDY4ZWIyNzUsCi0JMHhkZjNkZmZhYywgMHg5MzIzNWMwYiwgMHg1Yjc1NWZiOSwgMHgwNGYzYzJiMiwgMHhkYTI3Nzg2ZSwgMHgzZTUxNmRmZCwKLQkweDAwZmM4NDlmLCAweGRhZTEwOWZhLCAweGU4NjZiMTIxLCAweDE0ZGFiZjNmLCAweGEwZmJlZWIxLCAweGQ1OWVmN2MwLAotCTB4NmFiMzhhNDYsIDB4Yzc1Yzc5ZTAsIDB4NDY3ZGNjYmUsIDB4NTZkM2YyMTMsIDB4ZWI4NDk3NTgsIDB4MGM0NzdjMzgsCi0JMHhjMGQ0YmZjZSwgMHhlMTUwY2ZkMCwgMHgzODE5OTMzYiwgMHhiMGZmZWI4ZSwgMHhiODFkMDIxMiwgMHgyNjUyYWFiZSwKLQkweDU0Yjg3ZjdjLCAweDlmZTcyM2U0LCAweGI4Yzc0YzZhLCAweDc3ZWY5NmE2LCAweDRkZDk1ZGRmLCAweGFiMGZiZTc5LAotCTB4MzY1NjlmYjksIDB4Mzk3MjQwZGYsIDB4NTdmNzA5NjMsIDB4ZTU1YWY5YzIsIDB4OWYwNWE3ZGIsIDB4Mzg2ZmYzODYsCi0JMHhkN2UwZjZkZiwgMHhkN2UzYWJlYSwgMHhlNmJmMjBjYSwgMHhmYTA3ZGRhMywgMHgzZTQxNGU4ZiwgMHhlZWZmMDFmYSwKLQkweGRkYzVmYTY1LCAweGJiODAxNDg2LCAweDgxZDVhMzZmLCAweGNiMDZiZGZiLCAweDUxOTI4N2JlLCAweGY3ZTZlYzZmLAotCTB4OTQ2Y2Q0ODcsIDB4ZWU1MWZlYjgsIDB4MzdhNWY1YzYsIDB4MDkxYWQ5MTksIDB4ZWRkMzg5ZjksIDB4ODUzNzQxMDEsCi0JMHgxNDMxNDk3NSwgMHhhMmZhMDVmZiwgMHhiZjUxY2E5ZSwgMHhlOWIwMzA4NywgMHhhNzNmMzE1YiwgMHhmMDY3ZmFlNywKLQkweGQ3MWJhOTZiLCAweDZlNmZmMDg0LCAweDU1NWJlNzMyLCAweDMyMzQwZTJmLCAweDA3YWE1NmY3LCAweDAyOTlmNGI0LAotCTB4ZTA2Y2JjZjMsIDB4MzEyYzljZjUsIDB4YWViZjZlNWYsIDB4NWRhMDUzMzEsIDB4ZTRmNWNjOWYsIDB4ZGE4NzAxMGEsCi0JMHg4MGU0Mjc1ZiwgMHhmODRkZGM2NSwgMHhmOGUyNjg5YywgMHg1ZmNjYjcxZiwgMHg5OWY4ZWI4MSwgMHhlYTMwZmRkMSwKLQkweGVmNTkwOWQ1LCAweDZiZGRhMGQ3LCAweDIwZTZmYmVhLCAweDA3MzIxZmNhLCAweGJjNmFlMWY5LCAweGE3YzQ3YmJlLAotCTB4ZjU4M2VlMWIsIDB4MjY4ZmFmOWEsIDB4M2U3NzlhZmEsIDB4MzY3ZTQ1NmUsIDB4NzE0ZDBlZTcsIDB4YjUzZmUwNDcsCi0JMHg2MWM4NWNmNSwgMHhkNWYwM2I2ZSwgMHhhYWQ0N2U4NSwgMHg0ZWJiMjlmZCwgMHg3MjlmNjkxYiwgMHgyNDMxYjlkYiwKLQkweGU4ZDIxNzJmLCAweDUzNWNmYWJhLCAweGMxY2Y5NzFhLCAweDlhYTgzZjYyLCAweGFkYmQwNGNmLCAweDhlMDgyZTJmLAotCTB4NzBjMGYxNTMsIDB4YzIxMTVlNzcsIDB4ZWJkMTAyZjMsIDB4MDg2YzI1YmUsIDB4NGUzZmFiNGYsIDB4NzM1OTlmZWIsCi0JMHhmMzBiOWE1OCwgMHgxYTcwNjVkYywgMHhmN2VmODAyYywgMHhjNjJmYTdlMywgMHgyZTZmMmZmZCwgMHg4NTFkY2M2NywKLQkweGNjNGNlZmZiLCAweDAzZWUxZDdkLCAweGIwM2Y1MmI0LCAweGVmZmE5NTNjLCAweGRkYTg1NzJjLCAweDg0YmQ3MjYyLAotCTB4NGY2M2JhNzgsIDB4YWJlZDJlN2QsIDB4NTVjYTdjY2MsIDB4M2NlOWVmMGEsIDB4MDUzYjEwNjgsIDB4YTgyN2U0NGQsCi0JMHgzNmVlYTFmNSwgMHg3ZWUwOTk5OSwgMHhlYTg5MzZmNywgMHhiM2ZjMmE5ZCwgMHgzNzMzYTQyZiwgMHhlM2RmOTdlOCwKLQkweGRhYzFlMGZiLCAweGRlOTJlZjY1LCAweDFiOWY1NDczLCAweDkwZDI3MTgzLCAweGQ4OGQxMzlhLCAweGYzZmIyY2Y3LAotCTB4OGUyZmY0MTgsIDB4M2U0MTNkODMsIDB4YTU5ZmJmMDMsIDB4MGU0ZmE4NGEsIDB4NWRkZjcxMWIsIDB4Y2QzYjA1YzUsCi0JMHg2YmFlYjJmMywgMHhmNzlkY2EwYywgMHg1MGVhODkwZCwgMHgxOWNmNWJjNywgMHg2MmJkYjg1MywgMHg1ODA2Y2EwOCwKLQkweGZmZTAxMzlmLCAweGViODEzOTIyLCAweDNhMjFiNjkzLCAweGRjYTFkZjRlLCAweGQwZmMxMWFmLCAweDcxZDdjMzdlLAotCTB4MzJkMzBmNDgsIDB4ZjE5YmVkZTUsIDB4NDMzMmZkZjksIDB4ZGE1MzVlYjksIDB4YTA4ZDY3MTUsIDB4YmNjMjhmODcsCi0JMHg3NWMxNWM5OCwgMHg3ZjdlMWI2MCwgMHhlYjliZDFiYSwgMHhlYmE2ZTc4MCwgMHhmYTliZWYyMiwgMHhiZTcyZjkyYywKLQkweGZmMTRlNDgyLCAweDBhYjdlMDI0LCAweDYwYjM2ZmMxLCAweDhhMzZmMTQ5LCAweDIwZDFmYzgzLCAweGNhZGFiM2NmLAotCTB4YWRiMWViNGUsIDB4ZGE0N2Q4OTcsIDB4MTQ3ZDhjZjgsIDB4YzZmN2M3ZTIsIDB4YWRiNmRmODcsIDB4ODM3MmY5YzMsCi0JMHg1OTIzOGM3ZCwgMHg3MTg0NWY4OCwgMHhkZmJjZDMyNCwgMHg5OTRjZjNjYiwgMHgxMWRjNTNmZCwgMHgwZTU5NzlkNiwKLQkweDAzYmZjMDNhLCAweGUzODFkNTdhLCAweGRmOTFkOGE0LCAweDc2N2I1MjA3LCAweGNhMGFjM2M3LCAweGViYmEyOThmLAotCTB4NmMxN2I0MjksIDB4OGVlMjhlODAsIDB4MWZkNmFmNWEsIDB4ZTVjYTk2M2EsIDB4YzBhYTU4ZTEsIDB4N2UzNjhhNWIsCi0JMHg0ZTQ5Mzg4MiwgMHgxYzUyNzFlMSwgMHhlMjQzODQxNiwgMHgxNGViZjBhNywgMHhhZTUwOTkzZiwgMHg4MTAzYmRlMCwKLQkweGEyNDRhZjNlLCAweDI5YTk2YTRmLCAweGFiZTUwOTI1LCAweDAxOWNmODk5LCAweDg1N2YyMzlmLCAweDIyOWVkM2FmLAotCTB4YWU0MmQ5ZjIsIDB4MjM1Y2EwNjcsIDB4Yjk3MmI2ZmYsIDB4M2JiNzlmMGUsIDB4ZjM4ZWM0YjUsIDB4NWM3ZGM2YWUsCi0JMHg2OWM2ZjQxMSwgMHhmNWRhY2ViMSwgMHhiM2NiZTExMiwgMHgzYTc4NGVkZSwgMHg0YWJiZDZjMywgMHgwMGNmMmY4MSwKLQkweGEwMmZiODFjLCAweDQ5OGFlNWQzLCAweGRiOGQ3YWMwLCAweDA0YjM2MzE1LCAweGZhZGQ0MGY1LCAweDc1NmU3YTE4LAotCTB4NzNlZGRiZmYsIDB4YzI5NzlmYTEsIDB4NmI2Y2ZlZjksIDB4M2NmMTA5OTksIDB4M2Y5NzNkN2IsIDB4ZmRjNzdkZjUsCi0JMHg0ZjI4ZWMzMywgMHhhMzJlODY0NSwgMHhiNDY3ZWUwMywgMHgzZjQzODg5ZCwgMHg1NGM3NjhiMCwgMHg2ZjYxY2EzYiwKLQkweDcwYTg2NjcwLCAweGYxNmZiYjJlLCAweDA3ZTczYjQ5LCAweGY1YWE2ZmNjLCAweGJmNGFjZjM4LCAweDc4YmZmMTExLAotCTB4NmRmZTIzMTksIDB4M2E4N2ZlZGYsIDB4NmRiM2UzOTQsIDB4ODdiNDU2MzEsIDB4NzhjNjc2NjcsIDB4YmU3N2ZmNTEsCi0JMHg0OWQzZTUxMSwgMHhlMzc4ODcxNCwgMHgzMTlkYWY0MSwgMHg3ZjIyNGM3NCwgMHhjNTZjODc3MywgMHhjNmYzZDFmOCwKLQkweDNjYTE0ZmU3LCAweGExNDdiNjdhLCAweGI3MTZjN2U3LCAweGVkMGU3YzNkLCAweGQ4ZGI0ZDVlLCAweGRhN2NmYWQzLAotCTB4OTU0ZmZlODcsIDB4Zjc2NWRhODcsIDB4ZmVkNTdhZDMsIDB4MGE0ZGNiZTcsIDB4N2FiM2QxZWEsIDB4YjcxNjI3YWUsCi0JMHhlZmZlNGFiZSwgMHhmOWRkOGJlMiwgMHhiMzNmMGY1OCwgMHg1MGMzNmZmMywgMHhkYjdlNzlhZiwgMHg5OWY1MGMzZCwKLQkweDYxZWVmNWU3LCAweDVhZjNkZjc4LCAweGJmMjQ3ZDRjLCAweGYzYzY5N2M1LCAweGNjYmRhYTQwLCAweGU0ZDdhMjM5LAotCTB4NWQ4NWEyOGIsIDB4MmU2ODY5YzgsIDB4NDU5ZDdkYzcsIDB4MzAzOWE3ODcsIDB4MmZkZWFiOWYsIDB4N2VkMWQ1Y2EsCi0JMHg0NmY3YTJmZSwgMHgzYzg3ZTdkOSwgMHg5N2QwMTBkNywgMHg4N2ExZjVlMywgMHg4NjU0YzU0NywgMHg0MWFhNjVmMiwKLQkweDU1NWUzN2NkLCAweGVhZWYwNzllLCAweDc1ZTQ4NTg3LCAweDE5YTczYTAyLCAweGU4MGVhZGM2LCAweDZhZGFmZWY5LAotCTB4MDZmMTg3YzksIDB4Y2ZlMTJmZjgsIDB4YjlkNTNmOTEsIDB4NDM1YmVlZDAsIDB4ZmM2YjgyN2UsIDB4Y2ZkOGExZTAsCi0JMHg1MDUxYWM3NSwgMHhmNmY2OThhZCwgMHg2Njk3ZjEwZiwgMHgyOGZlNzQwNCwgMHg2ZGU5YTNlMCwgMHhmN2YyN2U1MSwKLQkweGQ0MTNmYTAzLCAweGVjZDQ3ZTE3LCAweGU2YzY5ZjczLCAweDM0ZjIxMTQ4LCAweDQ2OGNlZjc5LCAweGFmOWUxZTNkLAotCTB4ODQ1OGJmODEsIDB4ZGVhZmY1NWIsIDB4YTNmOWUzNGYsIDB4MGVhYjdhOGMsIDB4MzQ1NjY3ZjcsIDB4YjVlMjJiMzAsCi0JMHhmYTY3NWU0NywgMHgwYTJmOTQ2ZCwgMHg4MTI4ZWZjZiwgMHg0ZTdjMjY3NSwgMHgyMmIzYWZlOSwgMHg4YTVmYWFiYywKLQkweDQxMTZkYzc0LCAweDcyYTYyNDBmLCAweGFmOTU0NGJmLCAweGU4OGU4MDg2LCAweDM1MjgxMGQzLCAweDU2MzY4N2Y1LAotCTB4YWIzNmQ3YzgsIDB4NjhmN2JlOGUsIDB4MDliYTliNjgsIDB4MTcwZDBiZjMsIDB4MGMxOThhZWYsIDB4NzIzODY5ZWYsCi0JMHgzZGVmYzMzYiwgMHhhNmE1YWQzYSwgMHhlMmVlN2M1YywgMHgwNjNiYTY2ZCwgMHhmYzI2ZjkwNSwgMHhiODUyYzc3ZCwKLQkweDBiZmEwY2RlLCAweDIxZGZlZDkxLCAweDU5ZmVjZmExLCAweDhhNDBmMDc2LCAweGZmM2RlNDRlLCAweDEwODNiNmVmLAotCTB4Nzg1MjA3OWYsIDB4ZTc5MzNlN2MsIDB4MWU3Yzc4NGYsIDB4YmQ1NDNmNmUsIDB4MDkyYmNlYWMsIDB4Y2JkNGY3M2EsCi0JMHg4MWNmYzlhNywgMHhiMmY0OWEzOCwgMHhiOGQwYWE5NCwgMHg3NjI5YjY4YywgMHg0YzhmYWY4YSwgMHg5ZTk2MmJiMywKLQkweDNiZDNmN2YzLCAweDNkNDFiNjc0LCAweDM5ZmQ1N2U3LCAweGQ3YjlkNzhmLCAweDkzOGY3MTg0LCAweDRjZjMyM2VmLAotCTB4YWRkZjY4OTMsIDB4NWM3OWZmZWEsIDB4OWVlNWY5MTIsIDB4YzcwZjgzMGEsIDB4YTYwNTcwYTksIDB4MWRlYzdjZjEsCi0JMHgyY2NmODM0ZSwgMHhkNTQ0ZmQwNSwgMHhkZjdjYmM4ZiwgMHhkNTdkZDEyMSwgMHhjN2ZkNTRhZiwgMHg3N2U3OGI4MCwKLQkweGY3ZTUwZGE3LCAweDE3ZGM5OGI3LCAweGY3MWYyZWQwLCAweGQxN2FlOTliLCAweDMxOWQ3ZTA4LCAweGFiOGM1ZWQ3LAotCTB4NjI1M2JhZWUsIDB4NWY4NDA3YTQsIDB4Yjg2OWYyYTksIDB4YWRiZTc5ZGYsIDB4YTNlZTM3ZGYsIDB4NTNmODIwZGYsCi0JMHgzMGFjYjM5NSwgMHg1OGVkNTBmOSwgMHhjNzk3MGE1ZSwgMHg4NWUzYjQzYSwgMHhhYWZmYzc2OCwgMHhlN2MzY2ZmMSwKLQkweDQ5NmUzYjA1LCAweDNkMThlN2E1LCAweGJkM2RmNDNmLCAweGZlYmM1MjJiLCAweDBjYTc5MGFjLCAweDNkODE3ZTk1LAotCTB4MjY2ZjA4MjUsIDB4ZDgzZWQwMGIsIDB4N2M2YmVjZGUsIDB4ZGVkNzk3MWEsIDB4YjkwOWU3ZWUsIDB4ZGYzYzkyYjksCi0JMHgzZmNjZjQyNiwgMHg1MmNiOWU0YiwgMHhiNWY4NzdmZiwgMHg1ZWMzZmQ5NywgMHgyY2ZiYzdiZSwgMHgyYTQyNjRiNSwKLQkweGFlNWEzNWUwLCAweGZjYTA5NDBmLCAweDYyMjFhN2ZkLCAweGQ4NWQzYWRkLCAweDM1Nzc4ODZiLCAweDY5OWJkOWY0LAotCTB4ZTQ3YzYxZDQsIDB4ODNmOWU2YTksIDB4NmRlNTA0YTYsIDB4YzgwZTYzOGEsIDB4MzE3YjNmYjQsIDB4YzdlODgzYzQsCi0JMHg0MDkwYmEyZCwgMHhjYmZhMGQ2ZCwgMHhmMTdjY2VkMCwgMHg2NjIzZDUzMCwgMHg2ZmUxNmI1NiwgMHgzZTJlOWNjMiwKLQkweDg3YzcyNGJmLCAweDM2MmNmM2ZlLCAweGIzNGNmMjhhLCAweGI4YWMxMmRhLCAweGE5MjliOWRmLCAweDk1Y2ExZjY1LAotCTB4NmNhYzkzNzcsIDB4NTBiZjFkMGEsIDB4NzllMjZmMWQsIDB4YjQ2OTY1YjgsIDB4Zjk4NTkyYmYsIDB4YzNlYWIzMDMsCi0JMHg3ZmFkN2VmZCwgMHgxYmM4YjM3MCwgMHhiYzI3ZTZmNSwgMHg3YWU2NmVkZSwgMHg3MjRjYmY2NSwgMHhhNmY5ODc1ZSwKLQkweGI2MzMxOTFiLCAweDU5ZTBiZDcxLCAweDc1MjRmM2M2LCAweDdiZTgyYjZkLCAweGZmNzE1YWFjLCAweGYyODA3ZDMzLAotCTB4ODM1ZjU0NTAsIDB4MWVkYmE3YTEsIDB4NjQ3OTQ2NGYsIDB4YTkzZDZkNGUsIDB4NDhmNzg1ZjYsIDB4OTVkNzg2NWYsCi0JMHg1ZWI4ZGI2YywgMHhhMmM4ZDRmMiwgMHhjMjRjMzQ4ZSwgMHg5M2M0MmQ3ZSwgMHgyYTVmZTgyOSwgMHgzYmM0NjRjYSwKLQkweDU3ZDlhNWMwLCAweGNmMDVmYWE2LCAweGY5ZDJiYThiLCAweDFjNTMxZmZkLCAweDJmNDc3MzNhLCAweDcxYTZhNDc1LAotCTB4ZjYyNDhlYmMsIDB4MjNhY2Y0NmYsIDB4YWU5YmRiZWQsIDB4NTQ4ZWI5NWMsIDB4ODBkODdhZDcsIDB4ZWE5NWM1ZjEsCi0JMHg1ZWE0Y2Y0OSwgMHhkZTUxMjdhZSwgMHhmM2NmNWIzMSwgMHg5MjZkZDliYiwgMHhkOTU1ZjMxNSwgMHhjM2RkN2M2ZCwKLQkweDdmOTM0NzU3LCAweDk1OGZlNjNkLCAweDJhMDdkNDc2LCAweGUxNGVjZTlkLCAweGUxZmIzZGY4LCAweDc1YjQyNTk3LAotCTB4YWI3YThmZTAsIDB4ZmFmNWQ2MTksIDB4NGRkZjRiODcsIDB4YTRjNTdkZTcsIDB4NjM0YjczZTAsIDB4M2ZlOWJiZTgsCi0JMHhmODgzMWJkZSwgMHhhNDVhMWQ3ZCwgMHhmNTQ3NmJjZiwgMHhjMTkzZjM5MSwgMHhhOTJiZjU3YywgMHhmOTE2Nzc5NCwKLQkweGMzZDgzZDZhLCAweDI3NWU2MGQ4LCAweDg1NWJiOWZjLCAweDcwODI2YmJlLCAweDNiOWFmMjg1LCAweDI5YmZkZDc4LAotCTB4ZmE4ZTNkY2QsIDB4MzZjYmViM2YsIDB4YTRlODlmOTEsIDB4YzBhYmY0N2MsIDB4MWEzNzk4ZDcsIDB4YmFjNThiMDgsCi0JMHg1OWEzMmZmNCwgMHg5YTkxZDYwMywgMHg5MjZmZGM5MiwgMHhhNzRjZmQxYywgMHhmM2MxMWNhMCwgMHg2ZWYyN2Y1NCwKLQkweDYyM2VjODU1LCAweDNjZWIwYmVhLCAweDg1ODA0NmY5LCAweDdkZjAzYmY2LCAweDNhMDgzNzEzLCAweDhiM2M0MWE2LAotCTB4MzM0MDI1NzEsIDB4MDNkMGViMGQsIDB4M2YyN2JkNDUsIDB4ZmU3MWU5OWEsIDB4MzVlZTBjNDcsIDB4YTk3ZDYzZDcsCi0JMHg0MTU4ZWY1ZCwgMHg0ZmIwZTA0MiwgMHg3NzU5ZWQ4OSwgMHg1ZWJjOWM5MiwgMHhkNDlmZDZhZSwgMHhmNTZmNzliYSwKLQkweDkzZGYwOTI3LCAweGVhOGZmOWNmLCAweDljZmY2MjRkLCAweDc3NjI2NzVhLCAweGI1ZjhhOGJhLCAweDYxOWViOGFhLAotCTB4ODMyYzNhZmMsIDB4ZDJmYWViNWQsIDB4ZDQyMzkyZGYsIDB4NGMyOTRjN2YsIDB4N2FkYTY3ZjgsIDB4NTdiYzlhZTMsCi0JMHhkZWZmNGY4OCwgMHhhOTZkZTMzYSwgMHgxZWZiMWZlYywgMHgwYWRjMDdhNiwgMHgwYzMyMmVmZiwgMHhlNzA5YTFlZSwKLQkweGZhZWUyOTkzLCAweDkxYzRiZmVmLCAweDI2ZWI2ZDlkLCAweDE1ZDlkODdiLCAweDdmOTQwMmM1LCAweGY3NzllMGVjLAotCTB4NTAzZGZlMzYsIDB4NDk2ZmM0MjcsIDB4N2U3Njc2MjEsIDB4NTc3NzlmMGEsIDB4ZmZmMTE5NWIsIDB4MThhOGMwYjYsCi0JMHgwYTU4ZmYxYywgMHgyM2VhYzdhNywgMHhiZmEyYTZkMywgMHg2OWU4MGRlZiwgMHgzYzYzMGViZiwgMHhkMDE2ZGIxZSwKLQkweDcyZGZhMTE3LCAweDlhOTJlOTBkLCAweGQxMmU4OTFhLCAweGNiODUzZWRjLCAweDdmNjEyMWQxLCAweGJhNzJhNTBmLAotCTB4ZTNjODdkOTUsIDB4NWU1MmNmMzAsIDB4YmQwYWIxNWYsIDB4NzVlN2E5ZTAsIDB4Yzk5OTdkZjUsIDB4NGY0ZjlhOTIsCi0JMHhkOTdmNTQ4OSwgMHg2Mzc2NDVkMSwgMHhmNjg5NDJkNiwgMHhmYWRiN2VkNSwgMHg5MTY5MTNjYiwgMHg1YjMzZjFlYiwKLQkweGJmYWU0NDRmLCAweGZkMjE4Zjk0LCAweDNiM2U1YmQ5LCAweDRiN2Q4ZjNjLCAweDBmNjNjODlhLCAweDVmZWM3OWU2LAotCTB4YmQ2OTVhYTUsIDB4MjUyMWZhYjYsIDB4ZmFlYWIyYzgsIDB4YmUxZDIxYWYsIDB4ODc0MDhiNDgsIDB4NWM3ZjM4NmIsCi0JMHhkZjViNzdmYSwgMHg3ZDUyMzBmZCwgMHg2ZmNlMWFmNywgMHhlMTZlZmU0YiwgMHhhN2U5MjI1NywgMHhmM2JmMzg2YiwKLQkweGZkN2Y5ZTNiLCAweDhhZmYzYzc3LCAweDc3ZmYxOGVmLCAweGZmOTg0NGE1LCAweDAxZmRkNWZmLCAweGYwZmZmNWUxLAotCTB4ZmJlMTAyZmQsIDB4Y2MwZWEyMDAsIDB4ODdiZGUyZjcsIDB4N2U1ZGI1YTUsIDB4ZGI3MTRkNjgsIDB4MDdhMDRiYTcsCi0JMHg5ODJmMDlmNSwgMHgxODRlOGVkMCwgMHhhYjYxZWJjMSwgMHgxYjdjOTk0NywgMHgwMWJlZTBhNSwgMHg4MzJjNWYxNSwKLQkweDQxZDYxMWM3LCAweGMwNzZiY2U3LCAweDMwMzM5NjczLCAweGIyZjk4ZWNhLCAweGUwZTI4YzExLCAweDhiYWYzMzRlLAotCTB4NmQzNWJkMzEsIDB4YjdjM2VkMGEsIDB4N2UwZWRkYTYsIDB4ZGYyZjUzNDksIDB4MTc0ZTZkMzMsIDB4NzYyZjYxNzEsCi0JMHhjOTQ2NjQ2NCwgMHhhY2VmYTg2NywgMHhkNWE1ZmI2MSwgMHg2YWVhMjlkNiwgMHgwZmJlNTZkNiwgMHhiNDk1ZTk5NywKLQkweDRhYmRlOWRiLCAweGYxNDNmYTFhLCAweDM4ZjVmODdiLCAweDI0NmU3MzNmLCAweGRiOWM5NGI4LCAweDcyNTQxZTI5LAotCTB4NDQyN2JlMTAsIDB4NmUzNmQ3ZmQsIDB4YTVlNjBlNDAsIDB4NjIxN2UwNmQsIDB4YWM3MWYwNWQsIDB4NmIzYzUyMGYsCi0JMHhmYmVhNzFhNSwgMHhiZjg3ZDg3ZSwgMHg5MzAzMDllZiwgMHhiZGViOWViMCwgMHg2MjczZWY5ZSwgMHg1ZDRkNmE5NiwKLQkweDdmYzFhMGVmLCAweDc1NDRhZTcyLCAweDhjMGZiOTNkLCAweDBmZjNhNDNmLCAweDMwNDczZTdhLCAweGQwNzdlMDMxLAotCTB4MWJkNTJiMzYsIDB4MWZmMTFhZGYsIDB4MjZiYmZjNzksIDB4Y2ZiYmU3NWUsIDB4YzZlYzg3Y2EsIDB4YjhlMDE5YjgsCi0JMHhmMTIxNjc2ZiwgMHgyMzVkY2NlZiwgMHhmOGMwYTgzZSwgMHgyZjNmM2ZhMywgMHgyOTVjNDdhNCwgMHg0NTQ3MDVmMiwKLQkweDE3Y2Q0M2JlLCAweDYzYWRmNWE4LCAweDFjNzI0ZjIyLCAweDc2ZDAyZmYzLCAweDVhMDQzZTYwLCAweDVhZWU4ZmE1LAotCTB4NGZhNTI3ZGIsIDB4ODRmMmZkMDQsIDB4ZGU0M2YzYzQsIDB4NTQzZjNjNDMsIDB4MGJmNDc0NjgsIDB4YjgzOTRmZGQsCi0JMHhiOWFiZTcwZiwgMHg1MGJmNWU3ZSwgMHhjNTliM2RmMywgMHgyMDdmMGE3YSwgMHgyZmMwYTNmYiwgMHg2YzFjNmMyZCwKLQkweGQ4NWYzYjQ0LCAweDZkOGQxOTk4LCAweGMzYTdkM2JlLCAweGNhOGNlZjUyLCAweDdlOTUzYWFkLCAweGI4NjhmODkxLAotCTB4ZmRlYWU3NTgsIDB4N2JkZjU0NWQsIDB4ZmZlZWFjMzUsIDB4M2Y3YzNlYzMsIDB4YzdlMGI3NDMsIDB4ZDQ2MWY2MWYsCi0JMHhiZjU3MmZiZiwgMHhmOGM3ZGQwYSwgMHg1MjM5NTY5MSwgMHhjNDE2Njk1ZCwgMHhkY2U3MDhjNSwgMHg4YWI3MGUyNiwKLQkweGE1N2U1OWVmLCAweDYyNzNkZjBjLCAweGI2MjM1NzZmLCAweDY1MzlkNTA1LCAweDM5YWY3Nzk0LCAweDliZmU4OGQ3LAotCTB4YmVmNzYyZTcsIDB4NjY1ZjI5NWIsIDB4OTg5ZTMwNTQsIDB4YmJjZGExZGQsIDB4ZmU3ODMyZDksIDB4N2Y4OTU1ZmQsCi0JMHhhYjFkZTlhZiwgMHg3MGI4ZjhhNywgMHhjN2Y4OWVhYywgMHhmMTRjY2IzNiwgMHg2NGMwY2RhYiwgMHg3MGE3ZjYwYiwKLQkweDNjYTBhOGJmLCAweDZjZmIwY2IxLCAweDgzZjkwMjVhLCAweDg0OTVmYjA1LCAweDc5ODI4M2Y5LCAweGE1ZDhkYjMwLAotCTB4MmJhNzg4NDksIDB4N2NkNTU5ZDUsIDB4NzM5MzE2ZGEsIDB4ZWZmM2QyM2EsIDB4MWVkNmIzYWQsIDB4NGRmYjQyM2MsCi0JMHg3OGE5NzVkNSwgMHhiZGE1ZWI1MSwgMHg3ZGQ1NTlkNSwgMHgyZmYyOWUwZiwgMHgzYzM0ZmIzNSwgMHg5ODMxYWVmYSwKLQkweDc5ZGMyYzdmLCAweDVmZjYyOGMyLCAweDgyNzM1MzVhLCAweDFkYzJkODc1LCAweGFhZmVhOGU3LCAweGY1M2Q1YmQ2LAotCTB4ODZhZmM4ZTcsIDB4OTI5Y2U4ZTcsIDB4ZmQ3OWNiNmQsIDB4ODFjMDNiNzUsIDB4ZGJhYzJiNmQsIDB4MDZmY2YwMDksCi0JMHgxYjZkOGRkNiwgMHhiZmFmMWJhYywgMHg1YThmM2NiMSwgMHhiNTA3NzJmZiwgMHg1MzE3OTZiYiwgMHg5M2VjMDg1YiwKLQkweGVkYmFjMzY2LCAweDJlZGJhYTM5LCAweGRmNjNkM2VmLCAweDM2ZjVkNTI0LCAweDI4OTVhZWNiLCAweDNmNzUyMWVmLAotCTB4ZmRkNzg3ZWEsIDB4YWY5ZTY4ZTQsIDB4ZDAzN2VjZjEsIDB4ODM5ZTBjNzcsIDB4MjVkZmQyMjYsIDB4MzFiMzczNmQsCi0JMHhiMGVhZjgzZSwgMHhhZWUxMWIzYiwgMHgwODViYmFjMywgMHgzYTc1OWM1ZiwgMHhjNjZlNzhjYywgMHg4Y2MzOTc1OSwKLQkweGY2YzJiNmY1LCAweDBmZGM0NmQzLCAweDE4MGZhNzUzLCAweDkwMDYxZjMxLCAweDQ1OTZlM2E3LCAweDdjNzNiNmNmLAotCTB4ODk1YjZmZGYsIDB4YzU3YmYxMTksIDB4ZmZlYjU4ZmEsIDB4M2RmZDhmYWYsIDB4YTBhY2IxZjUsIDB4MjkxZTkyN2MsCi0JMHgxYjljZTk3MCwgMHgzNGVmZGRiMSwgMHgxM2QxMGZjZiwgMHg5ZWJjNWRhYiwgMHg1ZjdmYmFiMiwgMHhhZTc1YzM5MiwKLQkweDIxOTUwOWJlLCAweGYzOTQzNWYzLCAweDZjNmQ4NWZjLCAweGY1ZTg3MzdmLCAweDFlMDYxOTI1LCAweDQyMzllMDQ3LAotCTB4NDFmZmRlMTEsIDB4OGUzNWRkMWYsIDB4ZjQxZmRkNWYsIDB4OWQ1N2UwODksIDB4ZWZhMjY0M2QsIDB4MmM3N2RhNDksCi0JMHhjNDE4ZWVjOCwgMHgxZjM0M2YwNSwgMHgzMmJjYmFiNywgMHhmN2NmYmYxYiwgMHhiOTYyOGQxZSwgMHhjOWE3NWYzYywKLQkweGJhYjBiMWM3LCAweGI5Nzk2ZjVjLCAweGE3M2FlNTk5LCAweDc1MGJmNjk5LCAweDBlZGRhMTY1LCAweDdkMzE5ZmNmLAotCTB4ZWJiNzE2NTcsIDB4OWU3ZTc0Y2UsIDB4MTU5ZDM3ODMsIDB4YjlmNTFlYjMsIDB4N2JkZjMzZGYsIDB4OGNmYzYxZmQsCi0JMHgwYmQ5MWQ3MiwgMHg1MDU3NGViNSwgMHg4MWNiNjdhZSwgMHgxOTk2MGIzZiwgMHgyYjlmNTQ3YywgMHhmYmEwOWZkNywKLQkweGIwNmM2ZTIyLCAweDlmMjNhNDE2LCAweGI0NjgzZjFmLCAweDNjMmQ1ZTYyLCAweDdmMjhlNjNmLCAweDNjMmZhOWExLAotCTB4MWM5MWE4ZWYsIDB4ZDUyYmFjYjgsIDB4ZTA3ZGQ0ZjEsIDB4NDdkYjVhYjMsIDB4MDg2ZGJlNjMsIDB4MDUxYTZlNmIsCi0JMHhhZmU5MGZjZiwgMHhlOWZlZTJiMywgMHhiZTNjZjU5ZSwgMHhmODQwYmJmZiwgMHgzNjc5ZTEzOSwgMHg0YmY0MzNlNCwKLQkweDcxZjBmM2MyLCAweGUyMGY5Y2U5LCAweDljZmRiOWQyLCAweDBhMmRiNDgwLCAweDE3M2VhM2NlLCAweGQyZjMzZmNlLAotCTB4ZjBiZjc1YjUsIDB4ZmRjNTUzZmIsIDB4ZDU4MmYyODYsIDB4MTNiZTkxZmQsIDB4NDllZDBjNzQsIDB4YTlhOTc5NDMsCi0JMHgzOTdjYzg3ZiwgMHhkYjdmN2NlOSwgMHg0YzFmNTgxMywgMHhmMjBmYWQwYywgMHg1ZDc4NjAzYSwgMHg4NTczZDU1MCwKLQkweDgzMWQ3ZmVkLCAweGZhMDc1ZWY4LCAweDI3OThlZDFhLCAweDBhMGZkNzk1LCAweDhmZDkyOGRmLCAweGE3MDgyMzdhLAotCTB4N2E5NTNmZDgsIDB4MDRlYzdiZjksIDB4NzBjNWQ3YzYsIDB4YTc3NzljZmYsIDB4ODJiOWY5NDQsIDB4OGFlZTVmMDksCi0JMHg4MTczM2U4MSwgMHg3NmJkNDNkZCwgMHgwYjJhZmZiMCwgMHhmYTA5YTNlYSwgMHhjN2FlZmMyMiwgMHhkNzJlOTJlMywKLQkweDM0OWViMDk5LCAweDcxZWFlZGY1LCAweGUxNDE5ZGY4LCAweDIzMGU0MzFkLCAweDMwYThlZTVkLCAweGQ1NDBmZWQwLAotCTB4N2I3ZDRkZWUsIDB4N2Y3ZTE4ZmEsIDB4YmM2OGNhZTMsIDB4Y2MzOTI3OWYsIDB4MmYyZjVlMGEsIDB4YjdlM2ViYzUsCi0JMHhjZTkzMzFmOCwgMHhhMDc0MjIyNiwgMHg0ZjA3MDNjZiwgMHhiNjZlNTFlYSwgMHgxODI1ZGM5OCwgMHgxMTRlMTczZiwKLQkweDZlMGFhNjc1LCAweDliNjhlZmE3LCAweGU3ZTQ2MDYyLCAweGVlZTZlZDY5LCAweDFmMjhhZmNjLCAweDQ4NTZkZGQ0LAotCTB4ZWUzYjIzZjUsIDB4YjQxNDE4N2YsIDB4YzEzYjg1MzcsIDB4M2I1ZWM1OGUsIDB4ZGQyZjM2M2IsIDB4MTFiY2Y4NGEsCi0JMHg2M2MyMThlYywgMHhmNGViYzI5YiwgMHgxMWNmZjRlMSwgMHgyZWNkZWZmNCwgMHhkMTg3YTZmNSwgMHgyYjM5ZTBmZSwKLQkweDZhNTI5ZjI4LCAweDYwYWUzYjRmLCAweGZhMzg2N2RlLCAweGMyMWUxMmViLCAweDM1ZmYyYmQyLCAweGQwOTZmZDBiLAotCTB4NGViNzNmOGIsIDB4ZmJhZjdiZjAsIDB4MzlmZjVhYTcsIDB4ZjRlNmE2NzUsIDB4NjM3NTFkZmYsIDB4ZWI1MmZlMzUsCi0JMHg3NmJjNmE0ZCwgMHhkYTgxZjA0NiwgMHgzZmVkMTU5ZSwgMHgxYTAzN2RmYywgMHgzN2RmODhkNywgMHhkZjdmMjJkOCwKLQkweGNlODViYjMwLCAweDZmYmY1MTI5LCAweDI1NjQ2YmQ4LCAweDNmNzExMzViLCAweGM5ZGVmOGFkLCAweGE0ZmM4NTM3LAotCTB4YmVmZjRmYmQsIDB4Zjg4OTE3ZjEsIDB4Mjc4NDkzYmQsIDB4M2MzZDgwNmIsIDB4M2Q1ZTc2NGMsIDB4ZWRhZWFlYWYsCi0JMHg2ZDZmOWU3MywgMHg2YmMzZmJlMSwgMHhmYjlmMjM1YiwgMHg3N2RhMDM3MiwgMHgyNzI4ZWY3OCwgMHgyYjUxYmQyMywKLQkweGQ5OGVkYmY2LCAweDk3NDRlYTI2LCAweGViZjc5NmYzLCAweDFlOTZmMzQzLCAweGVlYTQ5MDI1LCAweGJjNTFmNWUzLAotCTB4ZjY2M2NkYTcsIDB4NTNhY2I3OTYsIDB4OTZhZmNmYmYsIDB4YWUxZjY4MWMsIDB4NTliNzBmYjQsIDB4MzVlZGQ3ZWMsCi0JMHhlNmZjZTk4ZiwgMHg3OWUxYjk3ZCwgMHhiNWQzZjdjYywgMHg2OTkzOWM3NSwgMHg3NGZmNWE1NiwgMHgzNmU3NDRiNywKLQkweDFhYWU3NDk5LCAweDg2ZmZiN2RhLCAweGNmYjQ4ZDY0LCAweDg3NjEwYmZiLCAweGM4M2E4YmM2LCAweDNmOWM4ZGNmLAotCTB4NDQ5MzdlN2UsIDB4NzdlMGRmZGYsIDB4OWZmNzQ4NzgsIDB4YzNiZmMxYmYsIDB4ZmYwMTc5ZjksIDB4N2JhZDQ3MGUsCi0JMHg1Y2Q3ZGZhOCwgMHhkMDdiYWMxZiwgMHg3N2VhNzdmNywgMHgzNjc3ZWEzOSwgMHg1MzlkNzdlYSwgMHhiOWQzNDdkNiwKLQkweDVhMTg4ZmM1LCAweGViZGZiOTUyLCAweDNhN2NiZTI1LCAweGU4ZmRkMTlkLCAweDQ5MWY1NjI4LCAweDk3YTY4ZjVlLAotCTB4ODQ1ZTlkM2MsIDB4ZGM3OWFlZTMsIDB4NDIzZDI5N2IsIDB4ZTMwYzNiZGMsIDB4MjE4Zjc4NDgsIDB4M2M4NWUyMDMsCi0JMHgzMDVlMjkxNiwgMHhlMjY5MTQ2NSwgMHhjNzg3ZWEwNSwgMHhlZWFhZDcwYiwgMHhjZmMwYTRmMSwgMHg2ZGY3NWMzNSwKLQkweDZiYzZmYzkxLCAweGRmZWJmZjM4LCAweDQ1YWZmY2YxLCAweDczMmFkYmEyLCAweDFmMTdmM2U0LCAweGJlODQ5MGNjLAotCTB4Y2UxNzllZDcsIDB4YzkyZjdjN2EsIDB4YTQ5MzdhZWQsIDB4ZDUzMzcwN2MsIDB4NGY1NDBkZDMsIDB4NTM2YWY1NTcsCi0JMHhiYzdmOWYyYywgMHg2ZGE5YTdjOCwgMHgwYzliNjg5NSwgMHg0YjY1ZjM5MSwgMHg2NDY3ZmRjNCwgMHg5M2U0MzhlNywKLQkweGYzNmEyZjgxLCAweGI0NWI4Mzk3LCAweDViMWJjYmY5LCAweDBjODhlN2I1LCAweDA5Y2Y2YmYxLCAweDNkYWZkYzI5LAotCTB4YTAyOGE2M2YsIDB4Zjg2NjNmM2QsIDB4MzFmOWVkNTEsIDB4ZTdiNDNhMjMsIDB4OTlmY2RjYzcsIDB4NWI5OGZjZjYsCi0JMHhjYmY5YjRiYSwgMHgxZWRjMmY1YiwgMHg4ZmE3MWRmNiwgMHg5YzA5NDc5ZiwgMHg5OTVjZmExYiwgMHhiOWQ4NWU2OSwKLQkweDczYjBiYTM1LCAweGNlYzNhMjZiLCAweDFmM2IwOWFkLCAweGUzOWJjYzQ1LCAweDdlNzYxM2VkLCAweDM2N2Q3NjhkLAotCTB4YmEwZGM3YWMsIDB4ZWZkYzdhZmEsIDB4MWVhMjI4ZmEsIDB4Y2Y4Y2NmZDcsIDB4ZGZkZTUxM2QsIDB4ZmE5YjdlOGMsCi0JMHgwOTdmZjUzZCwgMHhlMTkxM2IzZSwgMHg3MWY0ODE1ZSwgMHg4NzViMWNhZiwgMHgyMmIxZDU3YywgMHgyZWYzMGIyYSwKLQkweDcyNjk5NWVlLCAweGZiODNmMDIyLCAweGE3YmU4OTUxLCAweDQ2OTk1ZDJmLCAweDM1ZTY3YmZiLCAweGE5M2YyMTBjLAotCTB4NGZjOTM5ODAsIDB4MTE2NzY1OWEsIDB4OWNkODc5Y2YsIDB4M2RlY2Y1YzEsIDB4OGM2NjA2ZjUsIDB4NDYyOTk3YzcsCi0JMHgzM2QwYTgxZCwgMHhjMzViMTI0ZCwgMHgyMjY1OGRlZCwgMHhlMzM1NjFmMCwgMHhmYWJiNTg3YywgMHhiZGQ1MWM3MCwKLQkweGM4NTlkZDg1LCAweGViYWFjMTUxLCAweDBlNzlkMDE3LCAweGE4YmRlN2UxLCAweGM2MjNjNjc2LCAweDYzMTZiMGQ1LAotCTB4NjhiYmNjMWEsIDB4NDdjOTNiNmQsIDB4MWUzMDc5ZjgsIDB4ZWExY2Y2YjYsIDB4YjA5NmRhZTEsIDB4N2RiN2Y1ZWIsCi0JMHgxZmY3ZjhjYSwgMHgzYzhiZjQ0NiwgMHgyZmZiZGFhZCwgMHg5OWJhODg2NCwgMHg3ZTUwMzk4MywgMHg5YWM3ZjdkYywKLQkweDE1MmNjZmQwLCAweDU2YmI5OWY4LCAweDcwOWQ2MmIyLCAweGQyN2I0MzVlLCAweGI3OWZkMDVkLCAweDRiYjhhNjVmLAotCTB4NzFlYjBmYzUsIDB4M2EyMGNmNGUsIDB4ZmVmY2ZkNTcsIDB4Y2ZhM2YyNWMsIDB4OGUwYTRhMmIsIDB4YjhmMWM3NzMsCi0JMHg4N2JiZDI0MSwgMHg3NjU5ZjVlMywgMHhlNzNjNzBmNywgMHg1OGMzZWJhYywgMHg5ZDg3ZjZmYywgMHhkZjkzMjBiOCwKLQkweDNlNTBiZTAwLCAweDk2NTY2ZmY5LCAweDlkZWY5YTFmLCAweDYzMjZiMDZiLCAweGVlY2JjNWJlLCAweDUzNzhhNTRkLAotCTB4N2UyYWJmYzQsIDB4Njc4ODI2M2MsIDB4ZjEwZmIwZTMsIDB4NzQ5ZjVmMmEsIDB4OTFmYTIyNDksIDB4ZmYwMmViNjksCi0JMHg3ZTAzZGYwOCwgMHgyNmIzYzUxMCwgMHg3ZTgxNWE2NiwgMHgzOWE1NjlkMCwgMHhkNzYwNWQxOSwgMHgyZmYyMDY0MywKLQkweDQwOTJkOWVlLCAweDBkM2RjNWZlLCAweDFmM2M0NjY1LCAweDA5NmQ5ZWUxLCAweDc5OTY5ZmI0LCAweGJlMzA0NzlkLAotCTB4YTI3OWU5NTUsIDB4MmE1ZjcwYTEsIDB4NGI0ZjdiY2MsIDB4ZDJkNjQzOGUsIDB4ZDEzN2U0ZjEsIDB4MDlkMzUxNzEsCi0JMHg3YjI3N2U5NSwgMHg0OGM5ZGZhMSwgMHg2OWJhMDNmNCwgMHg0MzIxZmZhZSwgMHg2ZTgyMDlmOCwgMHg3ZDNiNDFlYywKLQkweDY0YjE1N2U3LCAweGZmZTYyZTZmLCAweGU5OWJkN2NlLCAweGM2N2EyYmY3LCAweDM3YWU1ZTA1LCAweGM0ZDI2ZjJiLAotCTB4MmU3ZGU1M2YsIDB4YmU3NDc1YzcsIDB4MjJkYWY3NzcsIDB4ZGQzODVmYTIsIDB4ZGU2N2ZmY2EsIDB4OGFmZWZjNzAsCi0JMHhhMTk2M2VmZCwgMHgxZmFiMzFmZiwgMHhjNjNiNzM5YiwgMHhiNzk3MTJjOSwgMHg5NmM2YWI1OSwgMHhhNWYzYmZhMywKLQkweDhiNmZjZmQwLCAweGM2MzBlOTM4LCAweGJmZDdlMDQ5LCAweGY0MTI3MThiLCAweGQyNzExM2RmLCAweDQxMjcxODA3LAotCTB4NDljNjIxZmIsIDB4ZTcxNDllZDAsIDB4MDc3MmFhMDUsIDB4ZmI3YzQwOGMsIDB4YWZiNzkwYjUsIDB4NjM3OGQ0MzMsCi0JMHhkN2U2MmE2OSwgMHhkZGU3ZmZjYSwgMHg1ZjE1OWQyMiwgMHhhMzQ5ZTNmNSwgMHhlYzliMTkzMywgMHhkM2Q3ZmFkNCwKLQkweGViZmQ2OWE3LCAweDRjNzU4MzBlLCAweGQ1ODFkYTJhLCAweDhmNzA1ZWJjLCAweDc4Y2Q2NmViLCAweDk4OGM1N2E2LAotCTB4ODU3OTYwZjcsIDB4OGY2NGViYzEsIDB4M2RlNjIzMTQsIDB4NmJiMDRjNjYsIDB4OTRkOWRmYzYsIDB4MzJkYmU5YWUsCi0JMHg5NGY3NWExNSwgMHhlYjlhN2VmMiwgMHhkNDBjNTc3NywgMHgwMDVlZTdmNCwgMHg1ZGY5MGNjNywgMHg1OWY5MjYyOSwKLQkweGM2MjZlMjJhLCAweGFjNWQzOThhLCAweGY1OTdlYzdjLCAweDAwMWU1M2MzLCAweDY4M2NiZjc4LCAweGY0ZTFmYmEwLAotCTB4Yjk1YWU5NTAsIDB4ZWU3Y2E2NWUsIDB4ZjMxMmY1YmMsIDB4OWIyNzg4MDIsIDB4N2Q3YzkxZTcsIDB4Y2U5NjM0N2UsCi0JMHg1MmRjNjk5MSwgMHhmNDMxNTZmOCwgMHhkMDMxNmM0ZiwgMHgwZDEzYjJmZSwgMHg3Y2YxNDdmNiwgMHg5MjViMTNlYiwKLQkweDNkYmJmMGUyLCAweGZjY2NhMzc3LCAweGE0YWQ3N2E0LCAweGNiNzlkNTc3LCAweGVmZDA1NjFhLCAweDQ1ZjVjYzI2LAotCTB4Y2MwZjUwMzksIDB4NTY3ZGUzZGQsIDB4NGRkZmEzZWQsIDB4NGU1MDY2NWIsIDB4YmYzZWM4OGUsIDB4MTI3M2Y0NDQsCi0JMHgyOTliMzc3ZSwgMHg4MTk5ZmU0ZiwgMHg5MmE3ZjE3OSwgMHhiODcwNzVlNiwgMHgwMzU4OTMzZSwgMHg4ZjliNGZmNiwKLQkweGUwMDA3ODBkLCAweGI5YjEzMzM4LCAweDk1N2U4NzRhLCAweGY0ODkzMDdjLCAweDQzMzIyYmU3LCAweDYyNThhZGJlLAotCTB4MTc4N2YzYTAsIDB4YzQ2ZjI3YmUsIDB4ZDIwYTkzM2UsIDB4ZmE2NWJkMzksIDB4MzliNjBmN2QsIDB4NWQ2N2U2OGEsCi0JMHg2ZTMwMjFjMCwgMHg5ZWEyMmZlOSwgMHg1ZWYyMjM1ZiwgMHg2MGY1ZmZkNCwgMHg5ZmMxMWFkZiwgMHgyNTlmNDdjOCwKLQkweDAxMDI2NzMwLCAweDdmMGZmM2NiLCAweDc1NDQ5YzNhLCAweDdkM2UyMDlmLCAweGZmZWViOGY5LCAweDY0YzZiYmQwLAotCTB4NTRmZWZkMDIsIDB4ZmQyN2NiZTUsIDB4YzkxMjYwZjYsIDB4NGZkZTM4NTUsIDB4ZjJmZWI5MWEsIDB4NDE0ODFjYTIsCi0JMHgzMzk0MTliZCwgMHgzY2Q1ZmRmZSwgMHg0MWQ5MjM4MywgMHgxYTY4NmI3YSwgMHg2YjkzYWRlYSwgMHg2NDY3OTQwZCwKLQkweGFmMWM2NzdhLCAweDdjNDJiZGNiLCAweGE0ZTdiZWFjLCAweGYwODMxOTVlLCAweGExY2E2YzlkLCAweDU5ZWYwY2VmLAotCTB4NDNmZDkzMmIsIDB4N2RlM2UzZmUsIDB4OTcxZmZmOWMsIDB4N2JiZjE4ZGQsIDB4YzYzNzI0OWIsIDB4NzM3Y2UxZWYsCi0JMHhmNGUxOTJkZiwgMHgxMWIzMDQ3YiwgMHhlYTdhMjMyNywgMHhiYzY5YjM4MSwgMHgxN2Y2YTEwZSwgMHgwN2JmZTRlZCwKLQkweGU4NzY4NmMwLCAweDVkMGUwZGE3LCAweDlmN2YwMzQ3LCAweDRlNzM1OGJiLCAweGRmZGY0ZDc5LCAweDljMjNjNzFkLAotCTB4MTdlZmVmY2UsIDB4OWNlOWRmOGYsIDB4OWYxMzIyM2UsIDB4M2NkYmVlOWQsIDB4ZjllODE1MmMsIDB4YjBkNzZlODUsCi0JMHhmOWZmYTAwNywgMHg3YTI3ZWY0NCwgMHhmYmI0NmZhNCwgMHg2MmViYzQzZSwgMHhmYzJjZGFkZCwgMHhlZGIzYmE2ZSwKLQkweDg2NmY0N2UzLCAweGIyZjRmZWU3LCAweGJlNjI0MWMxLCAweGM3ZjQ4OTJjLCAweGIzMGJjZGEyLCAweDIxYmJlOWJmLAotCTB4Nzg3ZGZjYzYsIDB4MjY5OWQxZGUsIDB4MmIxNzNlMDEsIDB4OWYzMDYzMmQsIDB4ODRiOTlmMzAsIDB4NTFmOGUyM2QsCi0JMHg4NmJjZjBiNiwgMHg3M2NmMWQ3NSwgMHhiYjE0NWM3YywgMHg3OWI0ZTMwNiwgMHg4ZjhjNzk2MSwgMHg4ZDgzZjdjNSwKLQkweDZmYzY5Mjk5LCAweGY1Yzk5ODM4LCAweGU3MWQzY2Q3LCAweDM4Yjc4ODZmLCAweGIxYTYzMWJmLCAweDVlZGVhYTAzLAotCTB4MjIwZmJmOGMsIDB4YWE4MGVkMDcsIDB4MzM1ODZiYjcsIDB4YjNmZDZiOWQsIDB4ZmYzNGJlY2MsIDB4YmY0N2M5NDIsCi0JMHgyNzg3NTIyMywgMHgyYWY4YzM1NCwgMHg2YjYzOGYyYiwgMHg1MWYyOGM1ZSwgMHhlNTgwYWE5YywgMHg4ZTBmZjEwYiwKLQkweGU3ODEzZWExLCAweDdlNWYxOTE2LCAweDAxNzdkOTBhLCAweDg2NzVmMDBiLCAweGMxOTNmYjhkLCAweGU5YzgxNTU3LAotCTB4YWNhYTdmNjksIDB4MzQ2YzFiMWIsIDB4ZmI4MWMxYmYsIDB4NzkwODE3MTksIDB4N2M5NjZkYWQsIDB4MjUwNzVlN2UsCi0JMHhjYzVmM2EzYiwgMHhkMWQ4NWYzMywgMHhjM2Q0ZmI3MCwgMHhhM2Q5ODUyZSwgMHg5Nzc2NjFmOSwgMHgyY2VkNmIzNSwKLQkweDc5ZTc0YmMwLCAweGMzODZmMGFiLCAweDI1ODk4YWU5LCAweGU2NmEyYzNjLCAweGRjYWIzZWZiLCAweDA4OTM3ZGJlLAotCTB4MTQwMWM5NmUsIDB4MDJjZjAxZWQsIDB4ODA5NTFhZTYsIDB4Yzc5MTc4ZWIsIDB4ODVmMGUxZTksIDB4YmMwN2FiYWYsCi0JMHg3MGUxOWQ2MiwgMHhkMWNlMzk1NywgMHg1YjM1ZTVmNywgMHhmODU3YzIyNCwgMHg4NDdhNTQzYSwgMHg1ZDJhNzFmYiwKLQkweGJmMWNiY2FhLCAweGQxMTI2ZDU1LCAweGZmNjVkNGYzLCAweDUwZmVkMTkwLCAweDBiNTg2Zjk1LCAweDc5ZTQyZmZjLAotCTB4NWQ2MDhmOTUsIDB4MmRiZjUwOTMsIDB4MzhmYTA3NTgsIDB4MmQzZjI3YTcsIDB4Yzg3MTJkNjIsIDB4ZGZjYzc1MzcsCi0JMHhkM2Y3MjU4OCwgMHg0NzNiOTZmZSwgMHg0ZTc5ZTBlNCwgMHhhOWRjZTk4NywgMHg1NzNmOWIwYSwgMHhlY2E4ODA5NywKLQkweDk2ZmNiNDdjLCAweGUzODc5ZjIwLCAweGJkZjQ0YWZiLCAweDUxMzFmYzVhLCAweDAwZTdhMDY3LCAweDkwNWZmMzVmLAotCTB4OTA5ZmZiZTksIDB4ZjYzZTIyNzEsIDB4N2I1NTdjOTIsIDB4M2ZhYzQ2YmQsIDB4YjlmOWViNTcsIDB4ZDM4MjU3NzIsCi0JMHhjYmJmZTdhMywgMHgwNTc4NDU3NCwgMHhkYzM1YWYzZSwgMHg3ZjVhNTlkMSwgMHhlNTc3ZTgzOSwgMHg1YmQyNDdjNiwKLQkweDA5OGYzYWVhLCAweDdiNDU3MzNkLCAweGM1ZGM3N2FmLCAweDQ5MjdkZWM4LCAweDRkZTlhZjk4LCAweDNiMDk1NzdmLAotCTB4M2VlZDFmM2YsIDB4N2ZhYzlmYjQsIDB4M2M2YmNlOTUsIDB4M2E1NWVlYjUsIDB4ZjJmOGQ1OWYsIDB4ZjBiN2RhN2MsCi0JMHg4Zjc5ZmFjOSwgMHg3YzRmZWZlMiwgMHhkOTFlNjViMiwgMHhhYjRmMDVmOSwgMHgwYzZkZGU3NiwgMHhkNmNhMWZmNSwKLQkweDVmZWU3ZGNmLCAweDM0NWY2ZjkwLCAweDZhYjk1ZDUzLCAweDQxYzQ1YjhmLCAweDljNjE1N2EwLCAweDUxZWI5ZWIyLAotCTB4ZDVlYjhlYjYsIDB4MDcwZjY4MDUsIDB4MGViYzNkOTEsIDB4ZTU1ZmRkYzcsIDB4M2ZmOTBlYmUsIDB4YzlkOTNhZTQsCi0JMHg3ZmI5ZTdmYiwgMHhiZGU2MTNiNSwgMHg4NzE4YTVmZiwgMHhmNTZjOTY5NywgMHhkNWI0YmNmMywgMHhmNmIwZjY4ZiwKLQkweGQzOGUwZmRlLCAweDA3Yzk0YmVmLCAweDZhODFmYmRmLCAweDEzOWUxOWZmLCAweDQyY2UyZWU1LCAweGJmNzYxMzM5LAotCTB4NjU5OGRlNTYsIDB4ZWMyMjNiNDUsIDB4ZGYxYjNmYzQsIDB4YzliZTIwZjcsIDB4ZmVmOGUyYmYsIDB4ZjllMzg5YTgsCi0JMHhlZjFjYjVlMywgMHg1MWZhNWI4ZCwgMHg1MzUxZmFmYywgMHgzZWFiZjIzZiwgMHhmODRiOTJkYSwgMHhmODAzNWNhZSwKLQkweGQxNWFiZjI2LCAweDgwNGQ1NWZhLCAweDEwMWY4YzZmLCAweDNkZDcwMGRmLCAweDZmODExNDdiLCAweDEzNzdjNzA3LAotCTB4Y2I1YjMzYzcsIDB4NzgxZWNhZGIsIDB4ZWJmOWQyZjUsIDB4OTQ3YmZmZjcsIDB4Y2Y4NGZkMDMsIDB4OWZmMjdlY2MsCi0JMHhkMzJhZGIzZSwgMHhkZmFhNjk1OSwgMHg3ZjNkZmFhNSwgMHhhMmNmY2Q2NiwgMHg3YmUyYTY3ZiwgMHgzZTQwODBlMSwKLQkweGM3OGE5N2VhLCAweDc4ODcxNzdmLCAweDI3OTViODVmLCAweDliZTA3YTRmLCAweGJjZTg1MzM5LCAweGJmZWZjYmZkLAotCTB4Y2UyZDI3ZWMsIDB4YmU5M2Y1MGEsIDB4OThlYTVkMjUsIDB4ZDcyYmY2OGIsIDB4Zjk2NjM5ZTEsIDB4ZDVhMmZiMjEsCi0JMHhkZjBiM2ZkZiwgMHg3Y2YwYWQwNywgMHg5ODczMTQ2NSwgMHg0NjRmMDg0YywgMHhiOWI4ZWZmOCwgMHhmZThiZWUxOSwKLQkweGVjZGNmNzJhLCAweGJiOGU0OTdiLCAweDMxYzdiZjM0LCAweDc4MGRmOTg5LCAweDkxNmIwMTllLCAweGVkNGJiZjY4LAotCTB4MjU3MTI1ZDIsIDB4YWQyZGNmMGMsIDB4NjczNjM4MjcsIDB4NjlkZjNiNzEsIDB4M2YyMmNhZWUsIDB4YzcxNDY3NmQsCi0JMHgzNTliYThmYiwgMHgwN2E0ZDFmMSwgMHg0MjNmZjExZCwgMHgzZjIwZTAzZiwgMHhkNzkyNzhkZiwgMHg0OWNlZjk0MSwKLQkweGFiNTI0M2M1LCAweGZmM2FlODQyLCAweGI4ZDczZjAyLCAweDljYzQ4MmVhLCAweGMwOWRmYzc2LCAweDYyMmZiNGIxLAotCTB4ZGExNGYzN2UsIDB4NmQwNTUwMDcsIDB4NWVmOGU4NTksIDB4OWNkYmNmYmUsIDB4YzdhMmYzYzUsIDB4NzgwNTRkNzEsCi0JMHgxZGY4OTM5ZSwgMHgxYTllNzEzYywgMHgzNzAxNzFkNSwgMHgzYTJlY2RjNywgMHg5Mjc4ZWY2ZiwgMHhjOGNmYzFjOSwKLQkweDA3ZGZhNzhiLCAweGMxZTg1YmI4LCAweGI0N2Q5Njk5LCAweGYxZTYxYzhmLCAweDdiOWUxYjMyLCAweDA1MDFhZWZmLAotCTB4ZjFkNGMyYWMsIDB4NzNjNjg2MzIsIDB4YmVmZTNmNTIsIDB4ZmY1Yjg3NDksIDB4ZGYyMmFjMWIsIDB4YmQ5MmVkYmIsCi0JMHgzYTQxM2MyNywgMHhmMzgxY2Y2YSwgMHg4ZmNlNDc0NCwgMHhmZGM1OWFiYywgMHhhNGU5YzkyOSwgMHhjYzE0NDQzYSwKLQkweGRmZWYwZDFkLCAweGViZjBhNTllLCAweGRiM2JmZjYyLCAweGVkOGNmNDAwLCAweDdhOWM5ZTc5LCAweDM5Zjk3OTlkLAotCTB4ZjBhNTM1YjIsIDB4NjcxODliZWYsIDB4YjIxYmQ0MjQsIDB4MzFhZmQzNGUsIDB4OWU4N2ZiZjIsIDB4NWQ3OTNkOWQsCi0JMHgzMGVmNjMwNiwgMHhmNDNmN2FjMCwgMHhmZjhmMTk1MywgMHg3MGZiYzZlNywgMHgzYzY0ZDdkZiwgMHhhZDg2Y2E2ZiwKLQkweDc2ZWFmODllLCAweDc4ZWFmMzNkLCAweDdhYzE2NGRiLCAweDZhNjczODg4LCAweDFkZGZjMDkyLCAweDBmMWZjY2M1LAotCTB4YTAzZmVmYmMsIDB4MmVmMTZmM2QsIDB4MWQ3ZmNlYmYsIDB4OWUzMjc1ZTAsIDB4ZTc4Zjk3NjcsIDB4MmIwNjI5ZDYsCi0JMHgyZTU1YzdiYywgMHg1MmJjNjAxNSwgMHhjMWRiZjJiMywgMHhjMmVjZjFkYiwgMHg0MjQ2ZWJjOSwgMHg3MGUzYTc1ZiwKLQkweDI5ZTc4MGZlLCAweDFlZmU2MjY2LCAweGNmNWIzMGYwLCAweDljMDVjOGY2LCAweDhmMTc4OGRlLCAweDIwN2RhMTRkLAotCTB4ZGEyNDRiNWQsIDB4ZWRlNmEyYWYsIDB4MDkwZjdhNTUsIDB4OGU4OWVkZTYsIDB4MzA3YzA1MzMsIDB4M2UxYzUzNGYsCi0JMHhhZjRjOGM2ZiwgMHhiOGQ0YjIyZiwgMHhlZGUyODViYSwgMHgxNzNlNDJjNSwgMHg0NWI5NzJhYiwgMHg2Yzk2OTcyYiwKLQkweDhmZjQ0NzQxLCAweDQ1MzM2ZjAxLCAweGY5YTRlYjBiLCAweGQ0N2JjNDZiLCAweGQ5Y2RkNzczLCAweDM2NzM3ZTdjLAotCTB4ZjJmZmUzOGYsIDB4NTk4ZmJlNzcsIDB4YWE4ZWY5ZjgsIDB4ZjE0NmQ2N2MsIDB4NGZmN2Q1ZjksIDB4YjY1NDZkMTYsCi0JMHhlMTU1ZTY4ZCwgMHg3ZmQ3Y2YwOSwgMHhmOTE1NjFiYSwgMHg2NzdmZDU0OSwgMHhkZjQ0M2ViZSwgMHgzMjRjNWQ1MCwKLQkweGVhMjI1NTc2LCAweDQ5OTllZmE1LCAweDViMWE2NmVlLCAweDNkMmRlYjcyLCAweDE1ZTdhOWM3LCAweDgxODBiMDU2LAotCTB4YmU0NDBmZDcsIDB4ZDFhM2Q4NGMsIDB4YmZjZTg1YjIsIDB4ZWZmODkwYWMsIDB4YzQ5Njc2NzQsIDB4ZTcyMDc1N2EsCi0JMHhiZjdjY2NjNywgMHgxZmYwNzllNywgMHhjMDE1M2RmMSwgMHhlZjMxZjgxNywgMHgyN2ZiZjhhYywgMHgxMTU4M2ZhMSwKLQkweDdiNjNkNDY3LCAweDczY2ZjY2NjLCAweGIxMDJjMzllLCAweGZkNDEzOTM5LCAweGQzMjI1OGRiLCAweGZiY2M4NzM5LAotCTB4YWZhYzY0ZjQsIDB4MjEzYWMyYWQsIDB4Y2NlNjNmZWYsIDB4ZTg5NGFjYTAsIDB4ZWEzNmY3M2YsIDB4ODExNzY5YTUsCi0JMHg5YmVmYTgwZiwgMHhhOTM4ODRlYywgMHhjZmI4YWY3MywgMHg5ZGYzZDIzNiwgMHhmNjdlMDkwZiwgMHgyN2ZkZTI2ZSwKLQkweDI3OWJmYmQ1LCAweGFiOWRmM2UzLCAweGU0YmZmYmQ1LCAweGYzYTg5ZmZkLCAweDYxZTNmZThiLCAweGRkODQ1N2Y3LAotCTB4ZGZlZjE5ZmYsIDB4MjcyZmRjZjQsIDB4MmQ4ZmQxN2IsIDB4NzE1ZGFjZTUsIDB4Y2ZiZjQ0OTMsIDB4MWJkNDIzZjEsCi0JMHg1NjJiMGZhMCwgMHgxNWNmMDlmYSwgMHgyZGJjNWRiYSwgMHhkMGRkN2U2NSwgMHhjYWFiOGYyYiwgMHhlZDA4ZmQ3NiwKLQkweDMyN2IxYzk1LCAweDkyZjVlZDE2LCAweDY3ZjUyNzFjLCAweDY3NDdiYTY2LCAweDhhNjhiYjQzLCAweGJhYzIzNWU0LAotCTB4ZDkxZjExZDksIDB4ZThiZDQ5OGYsIDB4YmQwOTFmZTUsIDB4ZjlmMGE1NWMsIDB4M2NjMzdjNTQsIDB4ZmU4YmIyOTMsCi0JMHg5Y2ZlNzlmZSwgMHhiYjllNjNkZCwgMHg1ZDllMDZhZSwgMHg2NjkxNGYwOCwgMHhjMGQ1ZjcxZSwgMHg3NjhlNWQ3MywKLQkweGRhMWZkNTFlLCAweDIzZjlkN2QzLCAweDJlZGMyYjg0LCAweDIzYjFmZTJlLCAweGVjNTNmMzFlLCAweGUyOWRmMTJkLAotCTB4NDJhYzk2Y2EsIDB4MmZmMTdmOTgsIDB4YTE1NTY0NzcsIDB4ODJmYzI1ZmYsIDB4NzY4YmI0M2EsIDB4ZGI4MzE3M2MsCi0JMHgzZmRiY2ZjNSwgMHhiNmU1ZmJlNCwgMHg2MGM3MWJiNSwgMHg1MGRhMDAxZCwgMHgwYmQzNThiYiwgMHhiNTZjZGU5YywKLQkweGFmMzhmZmNlLCAweGI0ZjJmZTFiLCAweDU4YjllOTFlLCAweGQzYzlmMmQ3LCAweDkyNmZlNzY4LCAweDU5Nzc3ZTIyLAotCTB4ZGUzYjllMmQsIDB4MzUyNWVmY2IsIDB4ZTAzZjczNjYsIDB4ODdjZWZlYTUsIDB4YjIwYjZmMTAsIDB4YjI5MWU5MTksCi0JMHg3OWNmOTE1NSwgMHhiMWU4NWI3ZSwgMHhlNmZmNjEwYSwgMHgyOTM1OGIwZCwgMHgyM2EyZTc4MCwgMHgwZmI4NTVlZSwKLQkweDRlNDM2YWFiLCAweDk3OGRlNjAxLCAweDk2M2U5NjY3LCAweGQ2Zjk4ZGZkLCAweDZkNmY5ZTJlLCAweDBhZDZmOWUzLAotCTB4MjgyOTYwNWIsIDB4ZjY2NmY2NzEsIDB4MzI5OThmNWIsIDB4YTlmZTBmYzEsIDB4YjIyMDY3MmEsIDB4OTQ3OTZjZjAsCi0JMHg3OTM1M2ZkYSwgMHgwZjllNDhkNCwgMHhjZmNiZmVjMywgMHhlNTBjN2YxZCwgMHg4M2MyM2Y2NiwgMHg4M2UxZjVmOSwKLQkweDc0M2Y1MWEzLCAweGFjZThjNGU0LCAweDI1ZmU0N2EwLCAweDA4OWJlZTYzLCAweGI3ZTFhY2M3LCAweDkyOWE3ZWQwLAotCTB4NzMwMWQ4YTgsIDB4Zjg5ZWZlNzksIDB4NWMzMjVmZTIsIDB4MzhkZDcwOWIsIDB4NmUyNGYzMWUsIDB4MmVlOTNmYTMsCi0JMHg0ZGZiODc1OCwgMHhiYWIzZjY5OSwgMHg5MWRjNjNmMywgMHgyZWZmZjNlYSwgMHhiNjY2ZjBmMCwgMHgzYWZkZGE5NSwKLQkweDA4MjBiMzgwLCAweGYwN2VmYTg3LCAweDYwMDY5N2Y3LCAweGQzMmI5M2JlLCAweDUwZjdlMDg2LCAweDBlNGEzMjI3LAotCTB4ZGYwNTE3NjQsIDB4YmRjMzIyN2YsIDB4ZGY1M2UxMWQsIDB4MDZjNzUyN2YsIDB4NmRmMWM4NjAsIDB4ZDA1NTc4ZTEsCi0JMHgwZGQyMDBmNywgMHhlMDQ4ZDc1YSwgMHhlZmI4OTBiNywgMHg5YTMxNTFmNiwgMHg3NjA5YjRmZSwgMHhlM2NkMGNlNiwKLQkweGY0ZDc0YjRlLCAweGQzZjQ1N2E3LCAweDcyYmJiZjhjLCAweGM0ZmVlNmEwLCAweGZhZDBjMGE4LCAweDc3YjdiZjEwLAotCTB4ZjdjYmM5N2YsIDB4NDZjNmM0ZWYsIDB4M2ZiZGZlZTMsIDB4N2RmOWZkYjYsIDB4Y2VlOWZkZmMsIDB4ZmEwNzY0MTcsCi0JMHg2ZTc3MGJiNiwgMHgxNjhmMWY3YSwgMHhiNWY0MGYzZSwgMHhhMTUyN2U1MywgMHhmNjlmZGE3YywgMHg4MzlmOGNjYiwKLQkweGQ2ODdkNGUxLCAweGMwYjBjZTkxLCAweDYwYTUyMzUzLCAweGViNmRmYjdjLCAweDdiYWQ4YjQ3LCAweGFlMDU3N2U4LAotCTB4ZjNlOGRkNTUsIDB4Mjg3ZjUxNmMsIDB4MWY2ODA1NjAsIDB4NDdiZmQ3Y2YsIDB4MGIzYWJkNzksIDB4MWQ5OWU3NWYsCi0JMHgzYzViOWNmYywgMHhmMDEyZmFlNywgMHgyMGY4NmRmZCwgMHg0MDE3OGJmYSwgMHg5N2ZjODNmMSwgMHg3YWEwOWViNSwKLQkweGFlNmM5YWRiLCAweDk2MzJlYmFmLCAweGY2NGZkMWU4LCAweDY1ZjY4YjQwLCAweDc4YWRlODBjLCAweDNiNDA5YmUwLAotCTB4ZjcwZGJjMWIsIDB4NzJjNGU1YmQsIDB4NTRjMmZkZmYsIDB4OGZlZjliY2EsIDB4ZmQ5ZmY5ZTYsIDB4ZmJmNDA5YzksCi0JMHhjNjliOGJjNywgMHgwYmJhZjVkMiwgMHhkYmZmMzQzMSwgMHhiNWY2ODA3MiwgMHhhODkzNWY3OSwgMHg3ZDMxMzE0ZSwKLQkweGNmNWM0YWQ2LCAweGRmNDQwMWZmLCAweDgwMDA2ZGEwLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAotCTB4N2RjZGZmMDAsIDB4ZDU1NDc4MGIsIDB4Mzk5ZWYwYjUsIDB4NjcwOTFlNjcsIDB4OTkyMTI3MjYsIDB4ZTRjMjEwMjQsCi0JMHg0ZTAxMDI0OSwgMHhhYWYwODA0MiwgMHg5ZTE4MDkwMywgMHg2ODMxMDA0ZSwgMHgwY2ZkZTFkMCwgMHhhZjRhODgwOSwKLQkweDA0ODE5YmY0LCAweGE4NmMxODA4LCAweDNiZDE1MDE0LCAweDZhZDQ4MGE0LCAweGE2YTNlYTZmLCAweGQwMDRjN2Q2LAotCTB4YTBkMjk0MWIsIDB4ZGVmNmI3ZmUsIDB4MjJjMDFiNWIsIDB4ZGEwNDZhMjgsIDB4ZmFkMmRlOWYsIDB4M2VmNmI1YWYsCi0JMHg4MjQ5OWNjOSwgMHhiZjdiN2I3MiwgMHhkYmUzZWY5ZiwgMHhiM2VmNjc1OSwgMHhkN2JkZWIxZiwgMHg2YjRjZmI1ZSwKLQkweDdlZWYyMDc0LCAweGZmOTliMTg1LCAweDFiMjk3YjcyLCAweDk3ZGFkOGM2LCAweDFlNjA5ZTRjLCAweDg1N2JkMmMwLAotCTB4ZDM1Y2EwZWIsIDB4YmViMTk1MzAsIDB4NTM1NmIzMDgsIDB4ZDczMTYzMWMsIDB4MDQ2YzYxZWYsIDB4MmMwMThjYzEsCi0JMHg2NGVjNzI4ZCwgMHg0MzVhNTAzMSwgMHhjM2M2NGZkOSwgMHgzYjQzYWIzMywgMHhlYWFjNjZlYywgMHgzN2JkMTQ3YSwKLQkweDMwMTFkOGJkLCAweGRiYmM3ZDQzLCAweGM2NDhkOGM0LCAweGU5NTNlZDJjLCAweGNiZDdjOWZkLCAweGZjNmJmZWE4LAotCTB4ZmQ2MzFiNzcsIDB4YWY1NGU5ZGMsIDB4NDM4NDk2YzMsIDB4ZGIwNTIyZjIsIDB4YjRmZGE4OWIsIDB4YWNhODQzZWIsCi0JMHhjYTg3M2ViYywgMHgxNDdlNzI3NywgMHg4NGZhYzNlZiwgMHgxN2ZhNTM2YiwgMHg1MjZmMWMwMiwgMHg2NGFjNGE3MSwKLQkweDYyOGQ5OTljLCAweGEzM2I3ZWVjLCAweDQ3YWI1NzdmLCAweGFiYTUzMGM3LCAweDcyZDJjOGRmLCAweGU4MWU2MjVkLAotCTB4NDRkZDc2Y2YsIDB4OGY3NGMwZTUsIDB4NmM2MDRlZTYsIDB4ZDk3NmE2ZDYsIDB4ZWM1MWViOGUsIDB4ODAzNGUxZWEsCi0JMHhjYmRkZjI4YiwgMHg5M2RlYmFmMiwgMHhiYWI3Y2Q4ZSwgMHg3YmZiYzI4NywgMHhkMDNkNThjZSwgMHhlMmNhMGRiZiwKLQkweGM2NGFmYWIwLCAweGRkNzk0ZDNjLCAweDM2ZTUxYmM3LCAweGRiMTkzYWQzLCAweDZjMmNlNTRjLCAweGNiYjNlZjA3LAotCTB4ZWYzODY1ZGYsIDB4NmYzZTU1N2IsIDB4OTEyNjExYjYsIDB4YjYwNjU4Y2MsIDB4YmY3YWU4NGYsIDB4NjBjMWQwMGQsCi0JMHg2ZDk3ODE1ZSwgMHg3N2YwYzNjMSwgMHhkNGFmYmE1MSwgMHg0ZGI0ZmQwZCwgMHg2MDJmZTU2NCwgMHg2YTViNzIzZiwKLQkweDM3MWZlMzk5LCAweDM4Yjc5OWZmLCAweGZlNjI3MWZmLCAweDQ2ZDg5NmJmLCAweGI3ZDdlZmVjLCAweDgxZTZkNmRkLAotCTB4M2MzY2I1NzksIDB4ZWVlNDg0NjIsIDB4Yjc1ZWY3ZWEsIDB4NzZhYmY3OTUsIDB4Y2Y0MDYwZGMsIDB4YjhmYTM3YWEsCi0JMHg2NmZhYzI3NywgMHhkYzIwOGYwMiwgMHhkODJkYmFmMSwgMHg5OWNmNDY5OCwgMHg1YjRiMWUyOSwgMHhhYmVhMDlhMywKLQkweDVlZDkxZDljLCAweGNkZjhiZjE4LCAweDZmZjIxMGE4LCAweDMyNTE5YmNiLCAweDlmN2U3MTgzLCAweGU5MTdiYmU5LAotCTB4YTBlNmZjNTgsIDB4MjYxMzkzMTIsIDB4NDY0ZDlhZjksIDB4ZDAzNjU4M2UsIDB4ZWYzZTFmNzMsIDB4ZjFiZGJlNmQsCi0JMHhkNjljNjAwOSwgMHg1MzVmYzkxMSwgMHgxODgxNGNjYSwgMHgxZDVmNmZlMCwgMHg4Mjg1OTM5NywgMHhlZjVkMTczZiwKLQkweGM4NGZiMDQzLCAweGM0ZWFkNWNmLCAweGFiYjc0ODI5LCAweGIwZDI2MDliLCAweDRjOWI0NThlLCAweDc1ODI1ZjQzLAotCTB4Y2I0M2I3MzEsIDB4ZWNjYzNjMDIsIDB4NzMwYjYwYmYsIDB4Njk5OTVjYTIsIDB4YzQ4NzMzYmQsIDB4ZTlhMDZiMDYsCi0JMHgwNmIxZWI5YSwgMHg5ZWJjYWJmOSwgMHhiZGFmZmQ0NiwgMHhlYjllOTdkZSwgMHhjODQ4YjY3MiwgMHgxOWY5MGQ4NywKLQkweDlmODIyNWUwLCAweDE5N2U0NWVmLCAweDFiODcyNWQzLCAweGUyOGY3ZGQzLCAweDgwZDY2N2ZhLCAweGJlNzhjM2JjLAotCTB4Mjg4NWM5MmQsIDB4NjJmYzVkNDcsIDB4ODBhZjkxNTUsIDB4ODU5NjkyNWYsIDB4Y2I0ZDRkYzksIDB4ZjQyYTk4N2MsCi0JMHg3ZTI1ZWYxZiwgMHg3MTY1MDI1OSwgMHhjMTUyZmQ1OCwgMHg3Yjc4OTEwNywgMHg2NWY5MTZlYywgMHg0OGJmNjhiMywKLQkweDAxOTk2NTA5LCAweDI4ZWE5NjBmLCAweGU3Y2MwYjZkLCAweDBhN2JiYzRhLCAweDBlZmQ2NWUyLCAweDE2ZjViZjhlLAotCTB4ZTYwM2IxNmYsIDB4OTM3MWZlYmIsIDB4OGI2MTk0MDYsIDB4YThlYzM5NDcsIDB4NTg3ZDQ2ODcsIDB4ZjE4NWY1NmQsCi0JMHhjM2ViZmNlZCwgMHgzMGYwMWI5OCwgMHg5NTI2N2FlNywgMHg4M2JlMDFmZSwgMHhkNzg1ZmViOCwgMHgwZDNhMDllNywKLQkweDhiYjk5MmEzLCAweGQ4YzVjY2NjLCAweDFiYWJhNDA2LCAweGU5YzQ1NDI3LCAweGFkNzdlNjJjLCAweDQzZTI3NDdhLAotCTB4NTNiNWZlMzAsIDB4ODhiZmFhMTYsIDB4YTk4MDJkNzgsIDB4ZTM0ZjAyN2EsIDB4OWI0MTJjYmMsIDB4NzVlNjEwNzYsCi0JMHgyYTAyYzJkMSwgMHg3ZWYxNjlkMCwgMHhkZmEwMDU4OSwgMHg0NmZhNTAyNSwgMHhkODNkNTJkMCwgMHgxNDgxZjZjZSwKLQkweGIxNzZjMTZjLCAweDgwNWIxM2NjLCAweGU2ZjU4NGY4LCAweDg2YmUzMWYwLCAweDZkNGM5N2ZmLCAweGZkNDEwZmQ5LAotCTB4OTYxYjMzZTcsIDB4ODFlMDMzOTksIDB4ODY0MTJhNzQsIDB4ODJmZTdlNzUsIDB4YmU3ODI0YzQsIDB4MmU1YmRkNzIsCi0JMHg5NGFiMWU1OCwgMHg1MGFhYTYwZSwgMHhjYzE0YzFiZiwgMHg3YmUyODBiNiwgMHg4NmJkZjY0NiwgMHhiYmQzZTA3YSwKLQkweDA4YWRmZTliLCAweGYwZGM3ZGRhLCAweGFhZTkxM2EyLCAweDBlNDliNWUzLCAweDRkM2Y2MTY1LCAweGNjMDBjZjgwLAotCTB4MmE1ZWE5YmQsIDB4NmMzNDJhMGQsIDB4NWRhMWIyOWYsIDB4NzNmM2FkZmMsIDB4YmFhZjlmMjQsIDB4YmE3ODQxOWUsCi0JMHhmYTFiNmQ1YSwgMHhmMDMxZjIxMiwgMHhmNWQ3M2UyZCwgMHhhZTNhZWFmMSwgMHhiZWZkNzVkNywgMHhjZWJmZjA1NiwKLQkweGQ3MzI5NWQ3LCAweDRjNGE5NTViLCAweDZlMTY5MDMwLCAweDEzYmNjYTZmLCAweDRjNzJlZjkxLCAweGI3MGIxNjVhLAotCTB4OGU4ZjhkMzcsIDB4MzJmODM5NDUsIDB4NWQ2MWFiNWUsIDB4ODM5NzQyZjYsIDB4ODA0OWZjNTcsIDB4YTQ3YjJlYmMsCi0JMHhjN2FlODFjYiwgMHhmM2FlYmQ3NSwgMHgyNmFmNmViZCwgMHgyZjJmZTRmZCwgMHg3OWZjM2JmZSwgMHg4MWQ3Y2QzMiwKLQkweGU2NGQzMDdjLCAweGVjOWE2Yjc2LCAweDFjOWEzZTIwLCAweGZmMjMyNjVmLCAweDc5ZmQ3YjdjLCAweGIzY2ZlODU2LAotCTB4YjZiOWZkMDYsIDB4YzdmOWZkMTcsIDB4ZjM4Nzk0NWIsIDB4ZGE5NjdmNDIsIDB4M2NkZTdkZDgsIDB4M2I2N2RmYWUsCi0JMHg0YTJiZmFiYSwgMHg4MzRiNjQ5ZiwgMHgxMzM0OTQ3ZSwgMHhjZDQ3ZmJiNSwgMHhmM2UzNDk1YiwgMHhmZWYzYjZmOCwKLQkweDZmY2ViMTJmLCAweGQzMDNmYmQyLCAweGE0NmZkNGFjLCAweDFmZDA2NzllLCAweDVmMmZmOWVhLCAweDFkYTIwZGNmLAotCTB4NWQ4MTg4ZjgsIDB4NWFmN2JiNDAsIDB4NjE2MWY3MWYsIDB4NDQ0ZWM4MDcsIDB4NjY2ZjA0YzcsIDB4Yjk5MjdlMDcsCi0JMHhhN2UyMjA3OCwgMHg0ZWUwM2IwNywgMHg4MGVjM2JmYiwgMHhiY2JhNTdjZSwgMHhjYmExZjJlOCwgMHhlOGZjYTQ0MywKLQkweDExZmQzMGYyLCAweGE0MjFlNjJkLCAweDMwZTYyMDBmLCAweDc4MWM4ZmNhLCAweGU5NTFkNzBlLCAweDcyOGY5M2VlLAotCTB4ZjgxMWNiYTksIDB4ZGQ2NzI0NjEsIDB4OWI5MDgzZWMsIDB4ZGEzMTM5MmUsIDB4NzQyZTVkMGIsIDB4YTZlNWQxMzksCi0JMHg1MmM1Yzg1MiwgMHgzY2JhMTcyMSwgMHgxZTlhOTcxYywgMHgzZGVmMGIxYiwgMHg0MzJiZTY5NywgMHhiMWYyZTg3YywKLQkweGJiNDg4NWU2LCAweDMxM2YyYmQwLCAweGYxYTVhN2U0LCAweGE5ZjkwY2Q1LCAweDdlNzBjYTEyLCAweDRmYzJmNWIyLAotCTB4OWY5MTZlZjMsIDB4OWRiZWQyNGEsIDB4OGQzMmIxMWYsIDB4NDBmZjExZmIsIDB4ZDY5OTVhN2UsIDB4MGFiMTVmYjMsCi0JMHhjYTdmZWNmOSwgMHhmZDVhYjhhZiwgMHhjYzM3NDI5YiwgMHhlODIxNmFlNywgMHg3ZTJlYjRkOSwgMHhlMzJlZmU5YiwKLQkweGY4MDY0MzdlLCAweDQ2YjQ1MGQ5LCAweDVhYjY3NWYzLCAweGIwNmIwNDA3LCAweDFhYWNkN2RkLCAweDAxZmJhOGYxLAotCTB4N2RlZTkxNGIsIDB4MjdmNGY4YmIsIDB4ZmU3MWZmNjAsIDB4YzE1YmZkM2EsIDB4ZWRmNzVmZmYsIDB4ZDlkMTFkZjQsCi0JMHhmNTY2ZGYxNiwgMHhkYmJkMjFlNCwgMHgzN2JmZjYwYywgMHg1YmIxZjE3ZiwgMHg2ZmU2ZjNhNCwgMHg0MjQzZTc0OSwKLQkweGZhMGZmYzZmLCAweGQxN2E4NzhiLCAweDFlZmY4NzEzLCAweDg2MmNjZWJhLCAweGZjMjFmYjNmLCAweDNjNjdhZjdiLAotCTB4MDJmYmU3ZDAsIDB4YTJmMzljMGUsIDB4ZDIyYmNjYmMsIDB4M2MxYmRiZWIsIDB4ZTAxZmE4OTksIDB4ODIzNGIxY2YsCi0JMHgwZjA5ZDk4NywgMHg1NmRiM2UwMiwgMHhmZTljZjMwMiwgMHgwMDdkNjc1OCwgMHg4ZjhmMjdlYiwgMHg4ZjMzZWYxMSwKLQkweDNmYjU3NTg5LCAweDViNTFmNjkxLCAweGQ2MGJkYTNkLCAweGFmOGRlZGMwLCAweDBkMGVmNjVkLCAweDc2MDEwYjgzLAotCTB4MTE0NWMxODQsIDB4ZGVkZTAxZjAsIDB4OTUzM2I3MjksIDB4OTcyMDg0ZmMsIDB4NTRkZmU4MmIsIDB4ZmQxNWYzNDAsCi0JMHg5ZTY1ZmUwOSwgMHhjZjAxNTcxMywgMHhkYjEzNTRiMywgMHg4YWFhNzQwOSwgMHg1NWQ2ZjgzZiwgMHgyNmNkNmJkNCwKLQkweGUxODc3MjY2LCAweGViYzk3MDIxLCAweGY2ZmQwMTQ5LCAweDlmYzA0OTlhLCAweDM3YzA3OWI3LCAweDBlMjVmYmI4LAotCTB4YWJmMDc2N2YsIDB4ZmEyYzgwODYsIDB4OGQ2YzdmMDUsIDB4YzlhNWI3NDAsIDB4YmZhMDkxZTQsIDB4NjBhNjQ1MzUsCi0JMHg3Yzc3NWE3YSwgMHg2N2M5ZDY3ZiwgMHg1NGMwN2NmYSwgMHhkNjY3ZGYxYSwgMHgxZjdiNWJmOCwgMHhhN2VmNGRlOSwKLQkweGRiMjFmYmQzLCAweGQ3N2Y4YzJkLCAweGY2MDllNjc4LCAweGQyOWIwZmUwLCAweDI5MmM1ZGI5LCAweDNlYjFlOThjLAotCTB4ZjhlMjVkMmEsIDB4M2ViMDAxYmYsIDB4ZDM5YTNjM2UsIDB4OTFlNWY3YzQsIDB4ZjlkMzYzZWQsIDB4YjM2NjZkYjgsCi0JMHgzNzYzYTdjMCwgMHg1NTliNTlmMiwgMHgxYmIyYjdjNywgMHhiMTk5M2RmMSwgMHhiZTQxM2U0ZSwgMHg0ZTA5ZjE4MSwKLQkweGVhY2E1NDY5LCAweDRmNWNiZTY0LCAweGI2NmViZTA0LCAweDc0ZDMyZmRlLCAweDVmMGJhNjNmLCAweGQ5N2EwODgxLAotCTB4YWJlZjgyNmUsIDB4NmRkYmUwM2QsIDB4MzM3NDNmN2MsIDB4ZGJiOWZkN2EsIDB4NTc2ZjgyZmIsIDB4MzFlYzdjZTgsCi0JMHhlYzhjN2JmMCwgMHg4OThjZmUyNSwgMHhlMDAxYTkzNywgMHhhOGRlYjVjNywgMHg3NDJmZGM3YSwgMHgxOTUyNjdjOSwKLQkweDg4Y2EyZGUxLCAweDRiZjkyZWE3LCAweGM4NTEyYjJlLCAweGZkZjUxMjNmLCAweDdhZmNhMzc3LCAweGI5ZWQ5ZGNkLAotCTB4MGQ3Y2VhM2MsIDB4NWUwMGU3ZWYsIDB4ZjdjNjk1ZDEsIDB4ZGJmN2E1NDcsIDB4YmUyM2M4MWQsIDB4ZTU4MjdhYTAsCi0JMHhjYTQ3NzliMCwgMHgzYzA0NTM2MywgMHg4NTdlNDIzZSwgMHg0MGZlOTFmYywgMHhjYTc4MDA3YiwgMHg3ZjE2ZmQ0MiwKLQkweGUzMGVlYWQ2LCAweDdmMDUzYjkzLCAweGU1NjI2ZTdjLCAweDI2ZGI0ZmE4LCAweDJkYjIzZjcxLCAweGE0MGY5NzlkLAotCTB4MDJjY2I4ZjMsIDB4NzU0Yjk3YzEsIDB4YzMwZThhN2UsIDB4NDI3ZjkxODMsIDB4NWIwOTVmYjgsIDB4N2U2OWUxMzcsCi0JMHg2M2NmMmViYywgMHhiYWMwNjZjYiwgMHg3ZDc4ZTJkYSwgMHhkZGE4ZTM1NSwgMHgzODJlOTQ4MSwgMHg4ZDc1YmZiMiwKLQkweDJmMTBjYjYzLCAweDhhMDdmZDlkLCAweDk5N2RhMGNlLCAweDQwZjZmMDJmLCAweDgxMzM5OGUzLCAweDE3Njc0MTNjLAotCTB4N2ZkYTE5ZDksIDB4NTAwNDdmMDEsIDB4N2YyMjU0MWYsIDB4YzdmM2JhOTgsIDB4ZmM2ZWY0ODQsIDB4ZGY3ODg4MTksCi0JMHhmYmM5Yjk2MywgMHhmN2RmZGRjNSwgMHgyY2NmYmM0NCwgMHhiZWYyYjdmMSwgMHgwODhjZGJhMCwgMHhkMDQ2OTZiYSwKLQkweGFlMDIyNGI1LCAweDQxYTBlMWQwLCAweDc5N2FlYWZmLCAweGFkZWVmMzUxLCAweGVhYzc5ODJlLCAweDU5NjdhMGEzLAotCTB4MmQ0ZjNmMzgsIDB4YWQ1ZmI5NDMsIDB4ZWQzYmZjZWEsIDB4MTc2YmYyMGMsIDB4M2MyNzRmM2YsIDB4ZjlkMjZlY2YsCi0JMHhkNDZlYzY3NSwgMHg4N2E4NjVjMywgMHg3M2MxNzZjNywgMHgzYzExMGY1MCwgMHgxMzEzY2NiMywgMHhlZDY2YWY2ZSwKLQkweDU3NzU3YjQ2LCAweDBlZmVkZTlkLCAweGFkNzc3ZjZhLCAweGVhOTc5ZmRlLCAweGNmNDIzYTc1LCAweDQyZDc0NDY1LAotCTB4M2VjZDVlZGQsIDB4NWVhYmY1ODMsIDB4NGQxZmVmZTMsIDB4OTAyNjczOWYsIDB4Njg3OTEzNzksIDB4ODFjYmMwODgsCi0JMHhkMTEwMzgwOCwgMHhkODM3Y2Y3ZSwgMHhmNzg4ZGFiNywgMHhkN2Q0NDUzNywgMHgyM2ZiYzA0NywgMHhmYmUzM2FlMCwKLQkweDQ4OTg5NzBiLCAweDNmMDIxNzBlLCAweGU1MjIyMTIwLCAweDlhM2Y5MjMyLCAweDljZmQzYmQzLCAweDUyNmU3YjRlLAotCTB4YzgzM2JmYzgsIDB4MGUxYWY0ZDUsIDB4OTVmNzRiMWYsIDB4NzA2MTI5ZDUsIDB4MmUzMmMyZTMsIDB4ZjAxYTMwMTcsCi0JMHg3ZmYxODVhNSwgMHgxMjAzNzNhMCwgMHgxN2E1ODNmMCwgMHgxYmQ0ZDliZCwgMHhkYTQ0ZTY1ZiwgMHg3YmZmNWU3YiwKLQkweGZkMTkzM2ZjLCAweDRiZjA2NjY1LCAweGI4NDY0YjhlLCAweDBlZjMxMjQ1LCAweDkwZDk5ZDU0LCAweDc4NzUwZjg3LAotCTB4YTdlZTE5NmQsIDB4YWUzM2VmYTcsIDB4YTJiM2Y2MGIsIDB4NDk1OTRkN2UsIDB4ZDZjNDVmYjgsIDB4ZDZjMjc5OTQsCi0JMHhmMjlmYjdhOSwgMHgxYzI1YWZkNywgMHhkNWM2YzNlZiwgMHhiZWEwODc2NSwgMHhhYjI4NTI2MiwgMHg1ZTM4Y2IxYSwKLQkweGQwOTRiZDgyLCAweGY4ODk1NzVlLCAweDI1ZDc5NGNkLCAweDhhY2JkYTJmLCAweGZhZDY1MGU4LCAweDM1ODgzZjcwLAotCTB4NWIzYWUzNjUsIDB4M2U4ODk2MWUsIDB4MGZhMDFhODEsIDB4NzMyMTY5ZTAsIDB4MmVjZWQxNWIsIDB4ODMyYjFlNjYsCi0JMHg0YzRiNWNhZCwgMHhmMDIzYzZjYywgMHhhNTg3ZjFkZSwgMHgzZmE3Njg4ZCwgMHg4NWQ3ZDhkYSwgMHgxOWQxYTFmYiwKLQkweDNjNzE3ZjdjLCAweDI5NmJhMDY2LCAweGVlN2QyZGMwLCAweGIyZGI3ZDIzLCAweGM3OTUzMjdkLCAweDBlYjZjZjI0LAotCTB4ZGJmZmIxOTUsIDB4OTI5OTcwZjgsIDB4ODQzMWY1OGIsIDB4MGZlOWFiYTcsIDB4ZjkwNjZkOTUsIDB4OWJiYTUzZjgsCi0JMHg1MzhiZWFmMCwgMHg2ZmU4Y2Q1ZCwgMHg4YzMwYjRlZiwgMHg1MWE2MzM5NywgMHgyZWUxNjkxYywgMHg5YzRlZmU1YiwKLQkweDJlMjFlNmNmLCAweGZkMTczZmY0LCAweDMyNGE2Y2IwLCAweGQ1YjQ1YmI0LCAweGQ1MWZhMWEyLCAweDcxNTM1NjZlLAotCTB4OTM5ZGJlN2UsIDB4YTRiZjU4YWQsIDB4ZGI4MTk0NTYsIDB4NmZmMzdjYTksIDB4NDI3MWFhM2YsIDB4NGNhNzhlZmIsCi0JMHg5ZmI0MjM1YSwgMHhkZGU5YWQ3MCwgMHhhZjJmMDA2MSwgMHg0NDkwZDBjYiwgMHgzMzM3NWM2ZiwgMHhiNzM5YzYxNSwKLQkweDAyNTA1MDdmLCAweDU1MWYzY2JlLCAweGRlMmNmNmZkLCAweGU1ZmI2MTllLCAweDY3YTdkYzM3LCAweDQ5N2I2MjE1LAotCTB4MmZlZDAyZGQsIDB4OWZmNDczYzAsIDB4MWE5MGVjMmYsIDB4YTcyZjM4NGQsIDB4NGIwNGRhMjMsIDB4NDY1N2YwYmEsCi0JMHg1YjBiOWNmMSwgMHhjZjhjNDE2ZCwgMHhmNzdjNTM5ZCwgMHhmNjcxYzdlZSwgMHg2N2QzZDA1YiwgMHhhNzZlNGMxNywKLQkweDlmMTBmMDA5LCAweDI5MmNiM2IxLCAweDA0ZGI5ZjE5LCAweDJlYzY3NzNkLCAweDY4NWYzOTA0LCAweGIyMWZlNGVlLAotCTB4Mzk2MmNiMjcsIDB4MWRhM2ZmMWMsIDB4MWQ2MTg3NjUsIDB4NDQxZjFlMTcsIDB4MTk1ZGFiZjEsIDB4YzAwYzg0OWUsCi0JMHgxZTk5MWRmNywgMHhhM2U3OTYxNywgMHhmMzdhZGRiOCwgMHhlODdkZDI2ZiwgMHhmMmYyZmZjNywgMHg5N2YyMTcyMiwKLQkweGQzY2I4MzNiLCAweGI5MTdkNzFiLCAweDU1Zjk4NTE2LCAweDg5OTczZWNiLCAweGJhYjRkZTBmLCAweGRmN2NlMDM3LAotCTB4YzI2MDFlOGMsIDB4NDFmMDM2N2QsIDB4MmY5MzhjNWYsIDB4ZTAxNmZiMTEsIDB4ZjYyZjhkZTcsIDB4OTdmZDVmZTAsCi0JMHgxZTVhYzdmMCwgMHgzNmVmMTg0OSwgMHhkMjdlZjVmMCwgMHgwMGRmYjQ5ZiwgMHg4N2UzM2YzOCwgMHhjN2MwMDNiYiwKLQkweGIyMzZkYjFmLCAweDliOGMyOGYzLCAweDc1ZGM1MmZhLCAweGUwN2ExMzA5LCAweGVlMjBhOGI5LCAweDUzNTI1OGFiLAotCTB4YTZmYzc4NzYsIDB4ZmI0NTBlNTMsIDB4ODQxYzA1ZGYsIDB4N2I0MWRmZDcsIDB4MmVmZGY3ZGMsIDB4ZjA4ZTFmZjAsCi0JMHhmZGJkMGJmMywgMHg4MDIzYTc3MiwgMHgwZTI3YzVjZSwgMHhmOGY0OGM4NywgMHhmODVmZjY0OCwgMHhlY2I3YmMyZSwKLQkweDgxZDkwYjI5LCAweDZjMjU0ZjY1LCAweDgxNzFjMGVhLCAweDE2YWUzMDZmLCAweDg2N2YyZWI5LCAweGFiZDVkNjg1LAotCTB4NjUyM2IyNWMsIDB4ZmJlMTI5MjUsIDB4YmZhNGMzOTUsIDB4ZTljYjkzN2IsIDB4MGVjYjg3MTksIDB4OTcyZWY1ZTUsCi0JMHg5ZmFlNTVjYiwgMHhmMTY1M2NhNiwgMHgxZjJkM2NhMiwgMHg3MGQ5OTBlOSwgMHhmNTNkMjZjNiwgMHhjZmM0NjFkNiwKLQkweDA1NTE3NWYyLCAweGYyZjg5ODM2LCAweGFmNDQ2Y2E3LCAweGEwMjM4Nzc2LCAweGU5Y2ZiZDQyLCAweDljYTE2MzkwLAotCTB4ZDZmNWMxOWYsIDB4M2YyZTBjYTYsIDB4ZWQ5MzEyYzUsIDB4NjJkNjU0MDUsIDB4Y2MwYWY1YmMsIDB4OTdjMDJmYTcsCi0JMHg3N2I2M2UzNiwgMHgyOWYzOGMzNCwgMHgwZDFiY2UwYiwgMHhlMWUyYmJmOCwgMHgyNWU1N2E3YywgMHg0YzhlZTI4OSwKLQkweDQxMzNjOGY2LCAweDVjNjBhZTVmLCAweDdjOWU1NDRmLCAweGZlMTEzYWQxLCAweDVmZjU2MmFjLCAweDVjMWZiMDQ5LAotCTB4MDY3Y2JkNTEsIDB4MDY1NzBiZWUsIDB4YzVkYWU3MmQsIDB4YjE2YmZjNWUsIDB4NTViM2Q0NWMsIDB4NWJkODExZmMsCi0JMHhmZWZlYmQ2MywgMHhmYTRlZDYxYSwgMHhhMjI5YjJhMywgMHg0ZmY2ZmFiZSwgMHhkNTUzN2UzMCwgMHgzZWJlN2M2YywKLQkweGExN2YxMWMzLCAweDcyNThjMzBmLCAweDVkOGE2MDAxLCAweDMzNjRiNmE5LCAweDA1NzJlYTU4LCAweDVkZDYwY2U0LAotCTB4ZjM0NGMwN2MsIDB4MGE1MWJlNWYsIDB4YzVmZTYwZGEsIDB4ZjhkYzc5N2QsIDB4YzFmMDNmNjMsIDB4NDA3ZjVhMjAsCi0JMHgxZWY5NzgwNSwgMHgzMzk2N2Y2ZSwgMHg3ZjBlZDA1MywgMHgxZDYwN2VkZSwgMHgwYTJmMzFjNSwgMHhjNGQwYjM3ZCwKLQkweGU3ZTdjOGJjLCAweGRjNTRiNGEzLCAweDJhN2IyZmVmLCAweGZjYmNmMDhhLCAweGY2ZmY5NWU5LCAweGJlZDdiYzM4LAotCTB4Zjg3YzY2NzksIDB4ZjkwZWJhZmUsIDB4ZDk5OWUzODMsIDB4ZjlmYWJhZTMsIDB4NTJmN2YzNjQsIDB4ZmY4YTBlNTEsCi0JMHhiMGM5ZjYxOSwgMHhlY2IxZTVkZSwgMHg5MGQzZjNhNywgMHg2ZWE5Yzk2ZSwgMHhmMmRkYWJhNSwgMHhmMzY3MGYyZCwKLQkweDg2Y2ZiMDc2LCAweDIxZGMyZjc1LCAweGNiZDgzYWQxLCAweDIwODdiMjM2LCAweDNlMzg2YWYzLCAweGI0OWVkNDk3LAotCTB4NjMzZGI5NWEsIDB4ZDlmODRiYWEsIDB4ZjVlN2Q0NmUsIDB4N2ZiYzEyNmQsIDB4ODUyNWVhMGUsIDB4MGY2ODE3ZjAsCi0JMHg4N2RmOTc4YiwgMHgzZTkzMjU3ZCwgMHgyYWZhZTFmMSwgMHg2NmZiYTZjYywgMHg1NjFkM2Y1MywgMHgzMzE3ZWY5NCwKLQkweGQ5ZjQ1Yzc4LCAweDJlZTdlZTBjLCAweGE1ZWVkNTRjLCAweDM2YTNmNDM4LCAweGVmMWE0YjZkLCAweGU2MjUxYTQ3LAotCTB4NGFiY2ZiMDEsIDB4M2EzMmRiNzMsIDB4OGRiOWZjYzcsIDB4YjU1NTJiZTIsIDB4MjcyODllNTEsIDB4MmYzYzRiZWQsCi0JMHgzMjU1YmY0MCwgMHhkODcxYWQ5MywgMHgxYWU3NWYyZiwgMHhmMDFmZDczNywgMHhjZjE5NDNmYywgMHgzZjVjMWM2NywKLQkweGJlMDJjNjU2LCAweDY2MzhjZTE1LCAweGZjNGJmZmU4LCAweDk3Zjc4MzJiLCAweGZkZWJhYzNjLCAweDVkNGRmMWNlLAotCTB4MTBjM2I5ZjUsIDB4OTVlNzdkNWYsIDB4OTc5ZTNjZTMsIDB4MTkwMTdlNDgsIDB4OWZhMTE2OGYsIDB4MDIzNGJjZjcsCi0JMHg3NzBiZDdmNywgMHhmYTgyOWYxYywgMHhmMmNmZjU3NiwgMHhlMTc1N2M1NSwgMHg3YjI3ZGY0ZiwgMHhiOWQwNWFiMSwKLQkweGI0N2RmZDFkLCAweDBjZmYwMDFmLCAweDdlNDI1M2NhLCAweDBmOGYxMjdjLCAweGQwZjgxMjlkLCAweDU3ZDdhZGU5LAotCTB4MzhmMGIwZWUsIDB4NTQ3NWU4M2QsIDB4N2Y5Yjk1MjQsIDB4M2E1NmZkNDMsIDB4NmZhODVjZGEsIDB4OGNiNjVmMmIsCi0JMHg2YmZjYmQ0MiwgMHg1ZmI0M2Y5YywgMHhmOGMwNzliNCwgMHgxNjdmODEwZiwgMHhiNDU0NjI1OSwgMHgzMzAyNmI0ZiwKLQkweDY5YWYwOGFkLCAweGY1ZGMxMTMwLCAweGYyMmE0MjVlLCAweGFmYjU2N2UzLCAweGNlNGY5MTM4LCAweGQwYjI4NTQ3LAotCTB4OGJhYzc1MGUsIDB4MDE3MTFhZDIsIDB4N2RjZjhmMmEsIDB4ODhkNTliNTYsIDB4NmEyNTljNzEsIDB4ZjUwNGMzOWIsCi0JMHhjNDY0MzY0YiwgMHg0OGZlYmVhMSwgMHhmZWIxNTkwZCwgMHgzMzM0YTZhMywgMHgxZDU1MWVjMiwgMHgxZTQ3YjA4ZiwKLQkweGEwNjdmMDRlLCAweGZmMDQ5YWJhLCAweDZiNTliZWEwLCAweGYzNWNmNGUyLCAweDNhNmI3MWRjLCAweGFjNTU3NzhjLAotCTB4ZGZlN2YzZjcsIDB4NGY3OGM2Y2YsIDB4MzY1YjZhNjUsIDB4NzdhMDExZGEsIDB4ZjNjNDdmNzYsIDB4YzNiMjI2YjMsCi0JMHgzYzkzOWY2YiwgMHhlOGJhYzM1MSwgMHgwZGU5MTZiZCwgMHhkMDRhYjVmMiwgMHhhZjRiZWQ3OSwgMHhiZjdjODQzYywKLQkweGQwNWRlOTE2LCAweDZmODA1ZjlkLCAweDE3ZjNkMDRmLCAweGZjNjE0ZTBlLCAweDE3YzgxM2ZkLCAweGI4MDJkZGJhLAotCTB4Mzc3MTgyZDYsIDB4MDlhZjg3MmIsIDB4MjVlNzgwM2UsIDB4OGYyMDc5ZmMsIDB4MTFlODI2ZjQsIDB4ZjkyMzM3ZjQsCi0JMHhjNmZhMzdiZCwgMHhiN2ZiNzI2NiwgMHhmNDhkYjM2OCwgMHhlNzI2NmM2YiwgMHgyZjFkZjZmYiwgMHg5ZjdlOTEzYiwKLQkweDZkZmM3ZjNmLCAweDdjYTk0ZjNjLCAweGJiYjJhYzAxLCAweGY4MTdiZTA3LCAweDNiZjVjMmE4LCAweDRmZTRmZTY5LAotCTB4OWQ3YWUxNTQsIDB4ZTRlZmViNWQsIDB4NTU2ZjIxNzMsIDB4NWY0ZmFmOGMsIDB4ZDYyYzk1NmYsIDB4Zjc4YmQ3YWYsCi0JMHhiYzg1MzJlMywgMHg5N2FmODEzMCwgMHgxMmY5NzEwNiwgMHg4YWYyODRmMiwgMHgzZWJlOTk3ZSwgMHg1ZjdmMWM1ZiwKLQkweDRjYTJjZmU3LCAweDYyNjk5ZmNlLCAweDcyNmQ0YzlkLCAweGJlOTA3ZTIyLCAweDdmODA2N2E4LCAweDQyNTFkNjNjLAotCTB4Y2Y5MzQwNmYsIDB4MGZmMzA2N2YsIDB4ZmYzZTk3YTMsIDB4ZDAwZjMxNTIsIDB4YjhkODllNmIsIDB4OWJiNjNhMmUsCi0JMHhjZTllOGFkOSwgMHgzOTMzZjMyZiwgMHg5YWRkOWNkZiwgMHhmODBjZGE5OCwgMHg1OWY2MGNmYiwgMHhmYzAwNjc5NCwKLQkweGE3OGQ4NzJhLCAweDVlM2U4ZGYzLCAweGE2Y2E0ZmYxLCAweGZmYTFiYWUxLCAweDhmYWZmNjEwLCAweDhmYTA1MWZiLAotCTB4YzQ3Y2ZkOGMsIDB4ZjNlODdjYjgsIDB4YjhiMmU1ZDcsIDB4N2NiNGMxNjYsIDB4ZGNmYmI2MjcsIDB4ZWI4NzkxOTEsCi0JMHg2Njk3ZTNlNiwgMHgwN2JlZjRhYSwgMHhkZjc4MDNmZCwgMHgzOGEyNmNkMywgMHhhZmIxNTlmNSwgMHgxNWY1YmIzZiwKLQkweDJlYmNhMmU3LCAweGRlMjI5ZjdlLCAweGFiYjI3ZmMzLCAweGZlNzUzY2ZiLCAweDlhNjdlMzBiLCAweGJiZjZmMTY3LAotCTB4Y2ZhYzIxYTYsIDB4NzUyZjkyMzcsIDB4YzlmY2U5YmMsIDB4ZGY5MDI1MzYsIDB4NTVhN2M5MTIsIDB4MzhhZDY3MjksCi0JMHhkZDczZTQ1ZSwgMHg3MThmMzk3ZiwgMHg1ZmZmOTQxNiwgMHhmZjI0ODI5OCwgMHg2NjQ0ZWNiNSwgMHg3Zjg2NWQ5OCwKLQkweDY1ZDUxYjBhLCAweGIzYWYzNjFmLCAweDUxY2I3YjUxLCAweGJkNzUwNzZlLCAweGFhZWJkYmFmLCAweGM0MjVjZjc4LAotCTB4NzkzMjhmZjcsIDB4ZjU2YWM5MWUsIDB4ZjQyNzM2YzQsIDB4MzZlM2U2MzMsIDB4ZmRkNjBmM2EsIDB4NDJkNzA5YzUsCi0JMHg5NWM2MGM1MiwgMHgwODJiNGE1ZSwgMHgyZTZiNzdiNywgMHhhZGZlMjA5ZiwgMHg3MGRiNmQ2NCwgMHhjNzcwYjNmZiwKLQkweDIzNDczM2ZiLCAweDQyZDhmZTlmLCAweGI3MGIyZmU3LCAweDFmYTJiNjRlLCAweGUyZjBmMmJlLCAweDczZmY0ODUxLAotCTB4NWQ5ZWRjNzUsIDB4MDQ3OTFkYWEsIDB4NzU3M2U4ZmQsIDB4ZTcxNmI5OGYsIDB4NTNjNTdiZTEsIDB4ODVmM2MyYzYsCi0JMHhiZTg5ZjNiYiwgMHg2NmRhYTNlNywgMHg4MGYxZGMyMiwgMHhiZGUxMWFjNCwgMHg2ZTQ3ODc3MSwgMHg3MWUwMWJiYSwKLQkweGI4YjE4MThlLCAweDQ5MGU4ZmNlLCAweGY4YzM2MzI1LCAweDM3NTMwOTYxLCAweDliN2U4ZGRkLCAweDdjYTJhMzFjLAotCTB4NWFmNDI0N2MsIDB4NmJkMzg1OGQsIDB4ZGFmZmUwOTcsIDB4NzljYjkyY2UsIDB4MzY0ZDRkNzEsIDB4MWM3Nzk3OWUsCi0JMHhmODBhN2QwNCwgMHg5YmJhYjBhOSwgMHhlYmVlMzg0MiwgMHhhODBmYjQ4OSwgMHg1MjRiNmQ4MiwgMHg5MzViOWQxYywKLQkweGNhYzJiNGRmLCAweGY0MDVjOWVjLCAweGNmMGM5ZWRjLCAweDFlZGE1YTRmLCAweDdjOWNmNWMwLCAweDE5YmY5MWMwLAotCTB4MThkZDJiNzEsIDB4YmJmYjg4YjUsIDB4ZTdlMDM3MjQsIDB4YmUzYWY4ZDIsIDB4MGJkNDc5ZjQsIDB4NGZlYzhiM2UsCi0JMHhmZDE1YmY3ZiwgMHg2MjdmZDQ3YywgMHg3ZjZhOTdmZSwgMHhkNmVkMGYzYywgMHg3MTU5YTNhNSwgMHg1ZTRmZmViOCwKLQkweDNmNDNhYThmLCAweGQ3MGIxM2U3LCAweGUwZmY3YTY3LCAweGVlMWM3ZDdmLCAweDY1YmY4MTI3LCAweDMyYmZjMTgwLAotCTB4MWY2N2MwYzAsIDB4MmRiNWZkMWIsIDB4MzNhN2FmMzQsIDB4Y2U5NWZlOGQsIDB4YjJlYjE1YWYsIDB4MDRmM2MyNjIsCi0JMHg5OWUzZjliYSwgMHg3NDQ3OTZiNywgMHgwMjg4MGZkOSwgMHgzMThjNWQxNiwgMHhmNmVmOGMwYywgMHg2ZDhiZWJmOSwKLQkweGQ4Mzc4ZmU4LCAweGYzYWMxYjU0LCAweDNjNzdlNDYzLCAweGUyNTk3YTZmLCAweGU3M2IwMGZiLCAweDFlNWY4ZmZmLAotCTB4ZGVmZGM0MTEsIDB4ZjBlNGZmYjIsIDB4MTA1MzI2YjIsIDB4ZWM0ZWE1NTMsIDB4ZmI2MTJlZGUsIDB4MjVmZmUwYTUsCi0JMHhkYmZjYzI5YSwgMHgwMWU3YmIzZCwgMHg5YTJiYjNkYiwgMHhiNDMyNWI2ZiwgMHhlNzk0NzJiZiwgMHgxMmI1NDAzZiwKLQkweDlkYmVkN2UxLCAweGY3ZGZmZWVjLCAweGMxNzhmNTY3LCAweDZiYmM3NGFmLCAweGViYmM0MzRjLCAweDM5ZjdkNmY4LAotCTB4MTQ1ZjAyNmYsIDB4ZWZlMTc0MTUsIDB4ZjIwYWZmMGIsIDB4N2RmYjJmNjcsIDB4M2E2OTdlNTQsIDB4ZTQzOGU4ZmIsCi0JMHg4NjhjNDc2NywgMHhlNmNiZjM3MiwgMHg0OGZlYTRjNywgMHg2ZmYyOTdmNywgMHhhYzc1N2VlMCwgMHhmY2EyYTMxMiwKLQkweDQ4ZGZlMTdlLCAweGZkOTc4Yzg3LCAweDc0ZWE1NGQ1LCAweDEzNjVlM2Q3LCAweGY3YTE2YTVlLCAweGYxMWU2OGJlLAotCTB4ZWY3ODM4ZGEsIDB4ZWI4NjI1MGQsIDB4ZjdjZjBmNmYsIDB4NjQ2ZmE0ODgsIDB4ZWJmZGM3ZGUsIDB4NzNlMjI3NDYsCi0JMHg3ZTlmNWQ3ZCwgMHg5ZjU5ZDM5NywgMHgxNzQ3YTdmNywgMHgyZDVkNzEzYiwgMHg2ZDdkZjY0ZiwgMHg0ZmI3ZDIwYywKLQkweGRhZmU4YThjLCAweDcxZjc5MTcyLCAweDEzZDczZjYxLCAweDQ3MzFlZDE3LCAweDJmOWQwMDY2LCAweDYyZTM5ODFlLAotCTB4YjY5NzM3YTAsIDB4Y2Y4NzlkY2MsIDB4NTI2ZWJkOTcsIDB4NWVkNzVmZDEsIDB4ZmVlMjczMmYsIDB4YmI3MjBmZWEsCi0JMHhkZTEyYzU1MywgMHhlNDdjZTEwYiwgMHg2OTdhODRhMCwgMHg4MzliMjk2YywgMHg2NDg2YzdlZCwgMHhjNjdlODZlNiwKLQkweDMyZmNlMGNjLCAweGM0MWNiMmU2LCAweGUwY2Y5ZjgzLCAweDZlMzNjNTM5LCAweDAzM2M1MzQ0LCAweGJjYzVmNWZlLAotCTB4ZTBiZmE1OGUsIDB4ZWYxZDEwNzEsIDB4OWM2YzdlZmEsIDB4MTAzMGY3NTgsIDB4ZjE3N2UyNDMsIDB4M2Y4OGI4YmMsCi0JMHg4YmMwZTRmZiwgMHg0YmJmYjBiMywgMHhjZTJhMmM4NywgMHgxNjQzOGJmYiwgMHhlYzE1N2ZlYSwgMHhkZTMwY2NhMywKLQkweDVmN2NhM2M1LCAweDFhNTQ3MDgyLCAweDdmZGYzM2NhLCAweGZiZTI2YWFjLCAweDE2NzVjYThmLCAweDNiYTYzNThmLAotCTB4YjU4NzE2NWYsIDB4M2MxZWZkYzMsIDB4MmJiOGUzNzMsIDB4ZmNlYTFmMDUsIDB4ZDdjM2NhYmEsIDB4MWNlYzBhYjcsCi0JMHhmODliZjdhZSwgMHg2ZDM1OTYzNywgMHhjNmY1YmM0MywgMHg3Zjk2ZGZjNywgMHhmYThjYjMzMywgMHg3YjZmOTNhMiwKLQkweDU3ODExN2UzLCAweDViZTQ3Zjk0LCAweGVkNTYyZjlkLCAweDcxZWNlN2U3LCAweDkxMTNmOTRkLCAweGQxM2U3NGZmLAotCTB4MTI2MDRiZjUsIDB4NWE3YjQxY2IsIDB4OTgzOTY1NjMsIDB4NDczMDEzOTcsIDB4Y2ExN2E4NmIsIDB4ZWQwNWI3MTQsCi0JMHhmNmY4OWNjMCwgMHgyM2NmNDQxMiwgMHg0YWJmNWM1OSwgMHgxOThmNjZjNSwgMHg4ZDhkNTFlZCwgMHg3OGI3NDdmNCwKLQkweGM3ZDcxNjc3LCAweDI4M2U2NDIxLCAweDc5NTJjY2VmLCAweGE2YWIyNWJlLCAweDgyNWU4NTdkLCAweGVkMDAzMmUzLAotCTB4Yjg5ZjU5NzYsIDB4NDlhMWJhM2YsIDB4ZDljNmUxZTksIDB4ZDk3NWYwMzIsIDB4MzIwN2I4YjgsIDB4ODdiY2M2MzQsCi0JMHg0NDc4NzI4ZiwgMHhkNDBiNDhkYywgMHhiMzMzZDJjYiwgMHhjY2FlMDA0YiwgMHgwYWM5NGNmMiwgMHhlMWQyZjdlYiwKLQkweDFlYjgwMWM0LCAweDlmMTUzZTc4LCAweDM3ZGUyOGZmLCAweGVhMjQ2YjIzLCAweGY5ZjQ4NTdmLCAweDYxOGVhNjk3LAotCTB4ZGFiYWQzMWIsIDB4ZjFkZDc5OWYsIDB4NWRkZDJmZDEsIDB4YTU4NWJiNzAsIDB4ZWIwODc5NmEsIDB4OWVlNWU1ZjMsCi0JMHhlYzFjY2YyYywgMHgyMmY5ZjIyNywgMHhkZTUyYjZjNiwgMHgzZjVmZTA1YywgMHhmZTA0ZmY0NCwgMHg4ZjQwZWQ3OSwKLQkweDJkNWYwNDNiLCAweGE0MjEyYmIyLCAweDVjYjNhYjMzLCAweGMwMzdmNGVlLCAweDhjNWE2MDE1LCAweDI1OWI3NDhjLAotCTB4MzkwZWU0ZjgsIDB4ZTdlZjgyZDQsIDB4ODJmNTVhYjIsIDB4MDNhMjVjOWQsIDB4NWRlZGY3NWYsIDB4ZDgwNjAzYWYsCi0JMHhlMDNmYmQwNSwgMHhiMDJkMmY4NywgMHgxMzZiZTAzZSwgMHgxMDQ2ZGZiMCwgMHhiMTIwMTMxZCwgMHhlOTk4ZjQwMiwKLQkweDMzZmQ3ZmI1LCAweDYwMTM1YmY2LCAweGU3ODQ1MWVkLCAweDEwYzJmNTBhLCAweGNjZmFjZTBjLCAweGQ5NTk0MzVmLAotCTB4ZTMwYzM5YzcsIDB4MWM1NzllMWQsIDB4YjhlODA1MjEsIDB4YzQzZWY5ZmUsIDB4MWY4NTJiZmYsIDB4YzQ0NTdjYzMsCi0JMHhiZTU0MWJjZiwgMHg0YjFiZTYxZSwgMHhlMDgwZjZmYywgMHhhY2ZjNGZiNywgMHhmMDQ0MTMzYSwgMHgwYmVjNzY3MywKLQkweDcwZjFlNjE5LCAweGM0NjFlZjk0LCAweGE5ZjMxYWZiLCAweDk0NmVmNWQ0LCAweGZhMjcxYWQ3LCAweDU0ZmY5ZjE5LAotCTB4YWMzNTUwZDIsIDB4M2IyNGZlMTEsIDB4NWVlNDIwOTQsIDB4ZjUwNmRkMGEsIDB4OGRiOTY5YWQsIDB4MGFiNjZmNjgsCi0JMHhjNjljYjk3ZSwgMHhkODFjM2Y2OCwgMHgzZmJjYTM2YywgMHhlYTc4ZTM3NiwgMHhhNjk3MDBjMywgMHgzZWUxYWVkZiwKLQkweGI2Y2ZmMmYzLCAweDNhMDUyZTY3LCAweDM4YmQ0MGQ5LCAweGExNTM5ZDYxLCAweGI3NTgyMmNmLCAweGNlODk2MDA1LAotCTB4NGY0NDgzODEsIDB4ZTEzODBmYTgsIDB4YzdiNGI2ZjksIDB4MzE5ZjM5NTIsIDB4NGViNWNhMmYsIDB4ZGRlZjFkMWYsCi0JMHhhMzQzMDFlOCwgMHgzM2I2NjlkZiwgMHg3MzJiZWUwYiwgMHhlNTE1MDFkOSwgMHgyN2NiYTc0ZiwgMHhlMDFiYzA3NiwKLQkweGZlNmUzMjdiLCAweDdmYWMxZjQxLCAweGViN2ZmYjk5LCAweGE2MTNhYzRkLCAweGZiMzc0ZWI4LCAweDlmZjkxNmY3LAotCTB4ODMwMTZlMjAsIDB4ZjhiMDM5N2UsIDB4YTJjM2Q5ZGIsIDB4ZTIxYzU2ODMsIDB4ODFlMmVkOTYsIDB4Y2FmNTFlZTIsCi0JMHgyNTdhZThiZiwgMHgxZjkzZTU5ZiwgMHhmMTg0NGI4MiwgMHg5MzM2OGI5NiwgMHg4Y2I3MGFhNSwgMHg2YmIwNDllYiwKLQkweDlmZWIxN2M4LCAweGMzYmIyMGNhLCAweDg1OTBmYzY2LCAweGZhMDc2M2I3LCAweDRiNmNiZjEyLCAweDJiMGU4ODkzLAotCTB4ZDc5NDRkOWIsIDB4M2ZiOWIzMzgsIDB4OGNkNTQzNzMsIDB4M2E1NGJlZTYsIDB4ZjNkMzI3YWYsIDB4MmRkZTQ3NGIsCi0JMHhkMzg3N2FlNCwgMHg4OTMzZTY2OSwgMHhlODhmMjg5MywgMHhlYTU0NDE5OSwgMHhmODJmNThmMywgMHgxNWYzYzc0ZSwKLQkweDFjYjNjNzJmLCAweDFlMzdkZGM4LCAweDJkNWExM2NmLCAweDNmMjZlODJjLCAweDM1Y2ZkNzg0LCAweGI0YWZkZTExLAotCTB4N2Y5MTk3OWUsIDB4YjEzMDRlZTYsIDB4ZDE0YjAwYmUsIDB4NDk2ZGNmOWMsIDB4MDFlZWU2NjYsIDB4OWY0MTM2YmYsCi0JMHg3MzM0NzcyOCwgMHg2YTBiZWQ4NywgMHhmODhkOWNhMiwgMHhkYTc4MGIxZSwgMHg5NzcwMWY3MCwgMHgyNzI3ZDc2OCwKLQkweGE3NGVkMGNlLCAweDhlODEzY2U3LCAweDMzMTU5NGJiLCAweDlkZGIxZDcwLCAweGJmOTE1YTUzLCAweGMzM2Y1YTFjLAotCTB4YjE0OTM2YjgsIDB4YWJjYzFmMjAsIDB4ZWU2M2QyMzAsIDB4MTk2YzIzNWMsIDB4NWJlOTE1ZmYsIDB4NzNlMzc4Y2IsCi0JMHg1ZjA4Yzc5YiwgMHhjYjk4ZTlkNCwgMHgxOGU5YzM3MiwgMHhmYTBmM2Y4NiwgMHgzNjNjNTdlMSwgMHhkZWU2M2Y4ZSwKLQkweDc5ZTAxZTM3LCAweDdjYzNmODYxLCAweDMyMjkyYjk2LCAweDE0N2I2ZmUxLCAweGFkZTAxN2M3LCAweGE2M2NmOTExLAotCTB4NThiNzg4YzgsIDB4N2Q0ZjExOGYsIDB4NDhmODhkNGIsIDB4OWJkNzFhZjAsIDB4YTg2ZTllNTgsIDB4MzYwZGY2NGYsCi0JMHg1MTVmZjdkNCwgMHg1NDA3ODA2MCwgMHgxZmI0MzU4ZiwgMHgwMTkyNzFiOCwgMHgzMzRjMGI0ZSwgMHg5YmE4Y2ZiNCwKLQkweDFhYjM4MDZkLCAweDFmYjQzNmVlLCAweGExOTE3ZmI0LCAweGNhYjgzNzNlLCAweGU4ZTQzZjUwLCAweGI0M2MwMzdhLAotCTB4ZWQwYzlmZTksIDB4MzE2ZjM3ODcsIDB4NzY4N2U3ZDQsIDB4YjQ0N2VhMWEsIDB4OGYwMGMwZmUsIDB4ZDBjMjdiNmMsCi0JMHg4ZDg3ZjQ3ZSwgMHhlZDMxZmE4NiwgMHhjN2VhMWFjZiwgMHgwMGMxN2M1ZCwgMHhkNTc4ZTg0ZiwgMHhlYmI2ZmVkMCwKLQkweDQ0ZjAwY2M3LCAweDdkYTFhZWY2LCAweDAzN2RmZGIxLCAweDBmZmQ1OTNjLCAweDkzZGJmYjQzLCAweGE3ZWExYmNlLAotCTB4ZDQzMzNmYmEsIDB4NmFiOWNmNGYsIDB4N2Y2YTY3ODAsIDB4YjZhZmI0MzEsIDB4YTM2NTQ2ZmEsIDB4MjY1ZDJhZmYsCi0JMHhjMDU5YWFiOSwgMHhlYjRhZWFlNSwgMHg3MWNhM2IxYywgMHhkZmYwMzY1MSwgMHg3ZmM5ZDYxMCwgMHhkMjllZDBlMywKLQkweDYyYTU4NTdlLCAweDM0YjI2NGZjLCAweGQ5ZjI0NDNlLCAweGRmNzBkMjZjLCAweGU0YWY2OTExLCAweDhjMWViY2NmLAotCTB4NGM1N2IxYWIsIDB4MDYyMzRmNzQsIDB4MzYxYzhlY2MsIDB4MGVjN2FjN2UsIDB4YjgyZWM0MWIsIDB4ODA2YWE5NmYsCi0JMHg4NjQ5YmMxMywgMHg2ZWU1ODlmNiwgMHgyZmIyN2Q0MywgMHg3ZmRmNTBjNywgMHgwNzgwNjY4NSwgMHhkYTE5MTc1NCwKLQkweDMxZThkYzBmLCAweDUyODE2OWMwLCAweDNhOGNmYjQzLCAweDZhY2UwMWFmLCAweDFmYjQzNzI4LCAweGE4NjdkZmI0LAotCTB4MzBhZTBkY2YsIDB4NWEzOTBmZDQsIDB4MzY4NzgwNmQsIDB4MWZiNDM0NmQsIDB4ZDQzMDFjZGUsIDB4MGNlYTg3ZTcsCi0JMHgxYjVhMjNmNSwgMHhiNmM4ZjAwYywgMHhhM2Y2ODZmZCwgMHhlYTFhMGMzZiwgMHgzNTFmYjRjNywgMHhkOGJiOGZkNCwKLQkweDc0Mjc4MDY0LCAweGRmZGExYjM0LCAweDgwNjQzZDc2LCAweDg2OTNiMjI3LCAweDMzZjZjNWY2LCAweGZhYjI3ODA2LAotCTB4ZGJmYjQzNWIsIDB4ZWExYWNlOTMsIDB4MTkyZmJhYTcsIDB4NjRmZjc1ZWEsIDB4YzY1N2NlN2EsIDB4OTk1ZmMyZTcsCi0JMHhmMGQ5ZmRhOSwgMHg4NzkyNjA3ZSwgMHg1ZTA0N2YyMSwgMHg2ZTM1NjkzMCwgMHhhNzY2ZjZjNiwgMHhkZTgxN2YxMywKLQkweGQwOTI4ZjZlLCAweDNlNTJmMWJmLCAweGY0MjYxYzUyLCAweDA0YzY1ZjAxLCAweGU4NTdjNDRjLCAweDVjNTA1N2VhLAotCTB4YWZlMjllMjgsIDB4OThkYzVhNjQsIDB4MWY3NjAzNzcsIDB4YjRlNjdmZTMsIDB4ZmI3N2Y0MzQsIDB4Mjk1ZGY5NzQsCi0JMHhmNmY4OGY1ZiwgMHg2Y2QxZDc3ZSwgMHhkYjZiZjY0NiwgMHhhN2JjYTk0NCwgMHhkOWEzYzMzYywgMHhlYmYyMGUzYywKLQkweGQ5NTNkZjZjLCAweGY4YmZiODA5LCAweGJiZjQxNGQ5LCAweDM2YzBiMjU3LCAweDI5NjRlNzljLCAweGRlMWRhNjJmLAotCTB4OGM2NTFkM2IsIDB4NTRlNWU4NjMsIDB4NmMyZGUwM2IsIDB4MWFhMzI3M2UsIDB4YjI2ZTBhNTIsIDB4YmY2YTlmZGYsCi0JMHhmYjNiZWQ0YywgMHgxMzBkZjExNSwgMHg1ODdkN2ZhYywgMHhiZWMyOGZmZiwgMHhhZGJmMDY0MCwgMHgwNTcyMGZjMSwKLQkweGZjMGZlY2JlLCAweGZjN2JjMTJhLCAweGY1ZWYwNDQ5LCAweGVmZGNhOWJiLCAweDA5ZjJhMWNmLCAweDA3ZjU0NmJmLAotCTB4M2YwNDQ1ZmMsIDB4MWMxMGY3ZWQsIDB4ZDk1Mjk3ZjQsIDB4ZjNkMmY3ZTgsIDB4ODI3MmZlNDMsIDB4MTk3ZWMwOGYsCi0JMHg3ZmIwYTNjYiwgMHhkODU5ZjJjNiwgMHg3M2ZkNjMwNywgMHhmODQ2MmZiMCwgMHg5NTAwZmVhNywgMHg3YTNhZmU0ZCwKLQkweDgxYmY4MmZlLCAweGZiZmM5N2UwLCAweDNmYjlmZTA5LCAweGZmYjM2NTQ4LCAweGZhYWY5NTI4LCAweDM1ZmVhODliLAotCTB4NmZjMTMzN2YsIDB4ODcwNDQzZjgsIDB4MWYwNGFkZmMsIDB4N2MxMWI3ZjMsIDB4YzEyMWZmYzIsIDB4YTlkYmZiNmYsCi0JMHhhNDVmZjU2YywgMHgwNzdmMWRmMiwgMHg1ZmYyOWZkNSwgMHg5ZThiYjgyNywgMHgxMjM4N2Y0NiwgMHhmODhhOWY5ZiwKLQkweGUzN2UxMzJiLCAweDJjM2ZjMTcyLCAweGNiOGJmYjllLCAweGU1YjAyYjM4LCAweDkzMmQ2ZjgyLCAweDc4YzEwZGMwLAotCTB4NDZlY2JmNjAsIDB4ODkxZDdiY2MsIDB4N2M0Mzk1N2MsIDB4ZmM1NmVhNzUsIDB4OThmZGM4ZjksIDB4ZjE5ZjAyNWUsCi0JMHgxMzNhZjRmZCwgMHg3NmU4ZDc4ZiwgMHhlODE3ZTQ1ZSwgMHgwM2M1NTI3ZSwgMHgwMGJiMWY3YywgMHgyNzNjNWZmYywKLQkweGVlMjhjZmY4LCAweGI2YTk1ZWFmLCAweDU3M2ZhMGU0LCAweGYwZDY4YTYxLCAweGY1NGFlNTFjLCAweDYxMGZjODFmLAotCTB4MjIwZGRlNzgsIDB4YjY2YmRmNzIsIDB4ZjZjMzNiODMsIDB4YmVmMDE1NzEsIDB4NGVhZmRlMTksIDB4NTRmOWEzNGQsCi0JMHg5ZDBiNTZiMCwgMHgyM2NjY2FhMywgMHgzM2RkNWM4MSwgMHhmODlkNzdjMCwgMHg0MDM5ODA3YSwgMHg5ODI1NmFmYiwKLQkweGZmMzhmYjhkLCAweGYwNWZkZjAwLCAweGE1ZWE5NWY5LCAweDU0N2UxMzZmLCAweDY3MGZjZThkLCAweDc3MDk0MmRhLAotCTB4YTRlNGZjNjEsIDB4ZGViZmYxNDQsIDB4ZjIyNTUxZjAsIDB4N2ZhZDdiYzgsIDB4ZmEwYTUyZTMsIDB4OTM3ZmE1ZTUsCi0JMHhkMzlmNDg3YywgMHhjNjM5NDcxNiwgMHhmODgzOWMxMywgMHhjODM5ZDRiZSwgMHg1MjYzMjg2YywgMHgzMDQxOGU3ZCwKLQkweGFhMzkzZjlmLCAweDBhMDMzNWVmLCAweDc1OWRmNGZmLCAweGViNGZlZTQ3LCAweDgxZGY0N2RhLCAweDliZjA1MTViLAotCTB4NDJkYjk4Y2IsIDB4ZjNjYzhkNzksIDB4Yjg1ZDVlMTYsIDB4YmUwOGY5OTMsIDB4ZmNhODA1OGIsIDB4MzVjZjhhNWUsCi0JMHgwZmU2MjQ2OCwgMHg4ZGY2MDkwNSwgMHhiNGY2YTViNSwgMHhhNTc5YzhhZSwgMHgyMDdhZTIwZCwgMHg1MGQ5OTA2ZCwKLQkweGI5ZjU0ODRlLCAweDM5M2ZiZmIxLCAweGQzYWYzNDNjLCAweGM2Y2Y2ZTYzLCAweGZhZjNlOTc1LCAweGRmOWJhYTVlLAotCTB4NGYxZDYwOWYsIDB4ZjRmZWZjZTMsIDB4NGMxNzU3ZmEsIDB4ZTNmOWRkMTksIDB4MGExN2MwMWYsIDB4Yzc2ODZmOWEsCi0JMHgwNmE0MWNmMCwgMHhhZmRmMDc2NCwgMHhmMjg5YWVmOSwgMHhhOGJlNzViOSwgMHhiZTIxODBjMCwgMHg3OTQ0YzliNywKLQkweDAyN2M1ZGZlLCAweGIwZmI4MWZjLCAweGY3YmEwZWY4LCAweDAxMzI3YzA3LCAweDhjNmFiOWQ3LCAweDVmODJiMDE0LAotCTB4Y2MxY2RhNzksIDB4ZjJiOWQxMzYsIDB4MTVjNjJiNTIsIDB4N2YwM2M3OTYsIDB4MDdjZWY3YTQsIDB4MDNmZGM1NmIsCi0JMHhkN2YwMzlmZCwgMHgyZmNmNDhlZCwgMHgwNzNhMzE3ZSwgMHhjNmY1NTVmMSwgMHhhYmUyMzcxOCwgMHhjMDc0MGNjNiwKLQkweDkyM2JlMzdkLCAweGI4NTdmM2M2LCAweDBkYzY5N2VhLCAweDkzMjY3OGE1LCAweDRmZTMwZDM1LCAweGViM2Q2ZDMzLAotCTB4N2Y4MmU1ZGIsIDB4NGE1OTI3NGUsIDB4ZjE5ZmQ0ODMsIDB4NDEzZWU1ZmMsIDB4M2QwNGZiYjcsIDB4NjRmYmFmZDcsCi0JMHgzZWYzMDQ4ZCwgMHhkZDEyZWM3ZCwgMHhmZjM2ZTk1ZiwgMHg5ODNjOGY4ZCwgMHg1NWM3YzYxOSwgMHg3OGE3NjdjZCwKLQkweDViZGZkMDdhLCAweGRmM2E3ZjQ0LCAweGVmODc1NjQ4LCAweGFmM2UxMmEwLCAweDQ2NWUzZTRlLCAweDdjMGIxMmZjLAotCTB4N2M3YzQxOWMsIDB4NjcxOWNmMDEsIDB4NzczMWRjZDksIDB4MjgwZWQ5NDEsIDB4ZmJlOTQxMDksIDB4ODFmNjk1NjcsCi0JMHhlNTQ2OTg4YiwgMHg3MmE1ZTYxMiwgMHhmOTFkOTAzOSwgMHg2ZGQ4MWJkNiwgMHg2MmFmN2M0NSwgMHg2ZDdjZjQ0ZCwKLQkweGYyMTc2MmQxLCAweDhmYjMzMmYxLCAweDMwNmJjOWY2LCAweDdkY2YxNzUzLCAweDEyNDk0NzU5LCAweDM2ZWE0YmM2LAotCTB4ZTgwNDk1YmYsIDB4N2JiMGQzOWIsIDB4Njc2ZmM2MzIsIDB4ODViZTE3MDcsIDB4ZDMyMWQ5NjUsIDB4MDU1YmNjMDUsCi0JMHhjZTJlZjhiOSwgMHhiZDU0ZGRhYiwgMHg3ZjhjMWZiNSwgMHhiNzEzNzNmNywgMHhiM2U3ODdmNiwgMHhmNjBmNGUyNCwKLQkweGFlODdhNzJlLCAweDBkZDcyMjM3LCAweGU0OTliMDcyLCAweGViNDNkNjMzLCAweDA2YTU5YzkyLCAweGMyZDhhODM5LAotCTB4YWVmOGE2M2MsIDB4Yjk0ZWY5ZmMsIDB4ZmJmZDVhMjgsIDB4ZTRiZmE4ZmUsIDB4NTQxNzhhMGUsIDB4NDM4YjYxYmQsCi0JMHhkYzYyYWYzYSwgMHhmNDc5MzAxZiwgMHgwN2VlODg3OCwgMHhkNWYzZTIzMCwgMHg3NmMzNWEyYywgMHhmZWJlMGE5ZiwKLQkweGJlMjMwMDc0LCAweDFiMDRkNGZlLCAweGZmMmU4MmMyLCAweDkyZmFhNTk0LCAweGVjYmEzMjBhLCAweGI5Zjk5NTc1LAotCTB4YjAyNzg4NjEsIDB4OWY4OWZiZTcsIDB4Y2I2ZDM3Y2YsIDB4MWZiZDQzNGYsIDB4YzRmZjQ1NGMsIDB4YWI0ZGFjZjIsCi0JMHgxNWQ4MzM0OSwgMHhhZTlmNzVmNiwgMHgxNmEzZDczOCwgMHg5YzhhODcxZSwgMHhlZGU4YTk5NywgMHg2MjNmYTMzZiwKLQkweDllMDBiMmIzLCAweGIzNWM4MDgzLCAweGZkY2YyODUxLCAweDM1NTcyNGFjLCAweDk3OGM1YTg4LCAweGY5YmFmMjRkLAotCTB4ZmZiMWFjMzksIDB4YWRiZTYyZDMsIDB4ZGQ3MWU1N2YsIDB4ZTMwN2FjMDAsIDB4ZTFjN2RkMjYsIDB4ZGQxNmNhNzYsCi0JMHgwZGU5MGUzNSwgMHg5YTcxYTMxNywgMHhlYWQxOTEwNywgMHhlZDI5OGYxYywgMHgzN2JmZTgyOSwgMHg4ZTdlZmI0NCwKLQkweDNmZTNkMWY0LCAweDM1YjJiZWZhLCAweGJhNGM5M2VkLCAweDUyZjYzNjk3LCAweDE4ZjdkZDA1LCAweDgwZmJhMzYzLAotCTB4ZDhiODg4NzcsIDB4MmUzYzQ1MWQsIDB4MDcxZTg3NzYsIDB4MDcxMTFmMWIsIDB4YjBjNzg4OGIsIDB4YzVjNzNkZjEsCi0JMHg5OGNjYmQ3NCwgMHhlNGY5YzE2NiwgMHhkN2Q0ZmZiMiwgMHg1ZDE4ZjE0ZiwgMHhhYmIzNzYwZiwgMHg4YTM2OTBiMCwKLQkweDZlMjliYjU3LCAweGM5OWYxOWQxLCAweDRjZjhmMmI3LCAweGQ1YzUzMjQ5LCAweGVlNGY0MmFkLCAweGE0ZmQ3MmYyLAotCTB4MGU1ODlmYmYsIDB4M2VjMzE4NWIsIDB4MGQzMmNlYzIsIDB4MDBkNTA4ZmIsIDB4MzI0ZWE4MGYsIDB4ZDFiODFmYjQsCi0JMHgwYjRmYTg2ZCwgMHgzM2VhMThlNCwgMHg5YzAzMzRlYSwgMHg2ODY0NTBkNSwgMHhjN2JmNjgzZiwgMHg0YjA2ZTcwMCwKLQkweDFjODdlZDBkLCAweGExZTAxYWY1LCAweGY2ODZlNTRkLCAweDg2N2Q5YmMzLCAweDBhZDBmY2ZhLCAweGQ2ODhmZDQzLAotCTB4YjIzYzAzNmEsIDB4ZmRhMWEzNmQsIDB4ODYwMzBmZTgsIDB4NzVlZDMxZmEsIDB4MTc3MWZhODYsIDB4ODRmMDBjMWIsCi0JMHhmNjg2ZmQ4ZSwgMHgxYTBmNWRiNywgMHgxZmIyMjdlYSwgMHhlZDhiZWExYiwgMHg5M2MwMzMzZiwgMHhkYTE4NWZkNSwKLQkweGQzZWMyNTNmLCAweDg2MmQ0OWVkLCAweDVjNDQwN2U3LCAweGE0ZmJhYTYyLCAweDM5ZTlmZGUxLCAweDUzZjAwYzY3LAotCTB4ODc5NDZmNDgsIDB4ODc5MjU2ZjksIDB4Zjc4M2Y1OTYsIDB4MDdmZDAwNTUsIDB4MTg2YjM3YWMsIDB4ZmRhOTk5ZjMsCi0JMHhhYjJmZDBkNiwgMHg2ZGZjNDdlZSwgMHg1MmNmZTI4ZCwgMHg5NDdjYjZhNCwgMHhlZGNjYTdkYiwgMHg2ZDNlNTg2OSwKLQkweDdkYzE2ZjcyLCAweDg5ZjhjNjZmLCAweDJhY2VmNjE0LCAweGNiMDViODU5LCAweDliMzYzMzQxLCAweDlmNDBkYzEzLAotCTB4YTBiNzA3YjksIDB4NjhhOTBjOTgsIDB4MWUwMGJiMzEsIDB4MTZlY2U0YmEsIDB4OGQ2MWQyMTcsIDB4ZmM0NDRhNDksCi0JMHhjMWFiNDg2ZiwgMHg4OWE2YzQ3MiwgMHg4ZmQ0MTI1MiwgMHg4MzU4NWRhYywgMHhmZDcxNzU3YSwgMHg2MWNiODU5OSwKLQkweGQ4MzdhMzVlLCAweGEwOWRjZDg5LCAweDNlMzBkYTBiLCAweDZmODg3YjI2LCAweGUyOWIwMDM3LCAweDhjOGMzNjNhLAotCTB4NWRiYmZjYTYsIDB4MzcxOTE1NjMsIDB4YmE3NmJiMzMsIDB4Yjg2ZTMxNmEsIDB4MWQ0MTY3NmIsIDB4YWZjMGRiOTYsCi0JMHhhYzYyMGUwZiwgMHgyYzdhZmMwZSwgMHgxZjVmODI3NywgMHgzODZlODU4NCwgMHg5NDU4ODdmMywgMHhhOWUwNzU1MywKLQkweGRmZDczYzI0LCAweGNkNTNlOTNlLCAweGZiMGFlMWFjLCAweGUzMDEzZGNkLCAweDhiNDQyN2Q2LCAweDczN2VjN2JjLAotCTB4N2Y0MjY2MjcsIDB4MGYwMGFiMjgsIDB4ZGNmYTcxZjgsIDB4YmUxZGQyODAsIDB4MmEzYmM0MzYsIDB4MzcyYTE3MDcsCi0JMHhkN2JmYTFhNCwgMHhjMGMwZGZhZCwgMHhjM2UyMjdiOSwgMHhhMjc4MDVmYSwgMHhmNWZhNmRmYywgMHg3ODVmYjA3OCwKLQkweGMzZGU2M2RlLCAweDlmNmUxY2U0LCAweGY1OWFlNDA3LCAweGQ3Y2EwMjNjLCAweDk0M2EyZWUyLCAweDgwYzQ5N2UwLAotCTB4ZDMxZmFiOWUsIDB4ZjgwZTViZWEsIDB4MTM2YWQ1OTUsIDB4ZjcxNjM3ZGQsIDB4NGRhNDMwNTYsIDB4NWYxYmUwNzEsCi0JMHg3MDBmMTZkZiwgMHg2NGVmNzg5MiwgMHg4ZTBlNmY5ZSwgMHg3MmUzODBhYiwgMHg5MjdmOGMyZSwgMHhjNjFjMDA5NiwKLQkweGJmMDBmYjFmLCAweGYzNWQyY2U3LCAweDBlNjdkY2IxLCAweDJjMmZhMGM4LCAweDA2OWE2NWM1LCAweDIwYjkzY2UzLAotCTB4ZmI5ZDM2OWEsIDB4MjJmZjQ2YWMsIDB4ZmM5ZGU0NGIsIDB4ZmJjYzQ3M2MsIDB4ZmQwZDFjYzYsIDB4ZjU4YjlmYTIsCi0JMHg4ZGY3ZWUzYywgMHhmZDgyZDhmZSwgMHg3OTMyYTBhZiwgMHg0MGY5ODg0OSwgMHg1NzlhMjljZiwgMHhjYjBhZDRjMywKLQkweDhjZGEzZmQ3LCAweDA3YzA0ZWY3LCAweDhhM2I0MjZhLCAweGY5ODczN2NmLCAweGI4NzMyYjFiLCAweDVhZjk2MjVmLAotCTB4YTViYWY4YTIsIDB4ODVjNWFiYzYsIDB4NGM5MTZmOGQsIDB4NGZlZDNkZDUsIDB4MTA2NWUyMzcsIDB4NTE4NmFmN2MsCi0JMHg0OWY4ZTViZCwgMHhhYzlmNGZiYSwgMHg1Mjk2OTgzNSwgMHhlNzg2MjEzZiwgMHgzZjg4NGEyMSwgMHg0ZDA1YTdlZiwKLQkweDkyM2UwMDRiLCAweGZmN2MzNmUzLCAweDk4MTJkZmExLCAweDRmYmM3ODdmLCAweGJlNjEzNmFlLCAweDZhYTZlMjQyLAotCTB4NTEyMWUyMTMsIDB4YmU3ODZhZjUsIDB4YzM1ZWRjYzgsIDB4YzZlMjc1ZjksIDB4MWUzZmEzYjUsIDB4NmFmNmYzODEsCi0JMHg5OTYxMDc5OCwgMHhjODdkZjNhZSwgMHg5Y2I1NDQ4ZSwgMHg3MDMyNjJkNywgMHhlYTVlZTJkZCwgMHgxMzE2Yjc1NSwKLQkweGY0M2FjM2RmLCAweGU3ZTc2OTUyLCAweDNiZDViZDViLCAweGE2YTlkZTBiLCAweGM1MDJkN2JjLCAweDRmNTg0NzhkLAotCTB4MDdlNTJiZTUsIDB4MjNiM2UwN2IsIDB4YTkyZmRjMzksIDB4YTNlNzFhNzcsIDB4YzIxN2U3ZTgsIDB4MTk1NTVjNmUsCi0JMHg2ZjQyNWJiNywgMHg2MWNiMWZkYywgMHhmM2ZiOWZiZCwgMHhjZGQ5MTIwYiwgMHg0NGRmYmJlNiwgMHg1YzNhYjFlNywKLQkweGRlMjBlMzBmLCAweGQ4YjQ2ZmVhLCAweDk4ZjU2ZjExLCAweDhiZjY0MTY3LCAweGZhN2FkZDkxLCAweDc3MDczOTg3LAotCTB4NGZmM2JhOWEsIDB4ODkwMDM5MzcsIDB4YmU0MDI5OGIsIDB4MDFhYzFiM2MsIDB4YWRmMjM5ZmMsIDB4Y2E2OWZhMWEsCi0JMHhlODRjY2I4MywgMHg2YWIxMjQwYiwgMHg0NjUyMTg0YSwgMHhjM2NhYjQ5NiwgMHg3MmJmMzI2ZSwgMHhmYTI3ZmYyMywKLQkweDY0YzFmMjhjLCAweDM3ZGQzMjVmLCAweGZkZDU3NDEwLCAweDc0NzRlZTgyLCAweGRlMjA2NjI3LCAweGU1NzllNWRmLAotCTB4ODlkY2QzZWIsIDB4NWY5ZDQ3NDgsIDB4NjNmYzlmZDcsIDB4MGU4YzJmOTQsIDB4MmU3ZTA4MWYsIDB4Y2ExMjBkNjIsCi0JMHg0NGQ2NThlYiwgMHg0NmQ2NzhlNSwgMHgwNzU4NzdlNSwgMHhjYWE2MWU5NSwgMHgxYTYyNGU1OCwgMHg0YmNjMjU5NSwKLQkweDRkNTYxNGU1LCAweGEwNmIyOTY1LCAweGEyNmIxYTcyLCAweGEzNmIwNjcyLCAweDU0NTNmNjEyLCAweGZiNGE5OTdhLAotCTB4NTdlMGQ5YmUsIDB4Nzk5NzM5NjAsIDB4YWFjNzljYTksIDB4N2M4MGJjYTksIDB4NjcyZGY4MGUsIDB4Y2RkZjA0MGQsCi0JMHgwNjZjYTg5YSwgMHg4NDFlZTAzZCwgMHg5NTNiMDk3MSwgMHhjNTllODFhZiwgMHgxMjdmMGRmMiwgMHg5YmJmMjE5NSwKLQkweDk3MTg2ZGI5LCAweDg0ZjJhMWM4LCAweDZkZjJhMzVmLCAweGFkOTUxMTdmLCAweDdiYjUwZjdlLCAweGU1NGE1ZmM3LAotCTB4Y2E5N2JmMjksIDB4MmE3MmZlZDMsIDB4NmEzZWZjZGIsIDB4MDU3ZjllZjcsIDB4YWJmODFmOTUsIDB4ZmYzN2ZjYTksCi0JMHhmNDNmMmE0NiwgMHg3N2ZjYTgwNywgMHg1OTk1MWQ3ZiwgMHgwNmZiNDY1NiwgMHg5ZmNhMTM5NiwgMHgzOTQ4ZjQwZCwKLQkweDgxYjhmNTZmLCAweDFjYjkwNWFlLCAweGU2M2RjNzhmLCAweGE0NzhkYzg0LCAweGZlMzBjY2E3LCAweDI3MWM5NGFhLAotCTB4NjZkYzUxMjYsIDB4ZTc1N2JmYmEsIDB4YTMxNmM2M2UsIDB4ZmRjZDNlM2UsIDB4ODNhMjQ3NDgsIDB4ZTFhNTU0ZmMsCi0JMHhjOGJjYzMwNCwgMHhkNGJiNTM2NiwgMHhjZjZiNjgwNywgMHhlN2I1Y2ZmNSwgMHg4ZDdmMWQ4MiwgMHgxMGQxZjZkNSwKLQkweDA3NjNkZGFlLCAweGE1YjRmNDdiLCAweDUwNDdmYWFkLCAweGYzNzhmZDJmLCAweGNlZDgzYjVjLCAweDNlZjc4ZWIxLAotCTB4NTRjMzk2N2IsIDB4YWIwNGU2M2YsIDB4ZTY3NjAxNTEsIDB4NTc4M2RmNmUsIDB4YTgxZTcwYjIsIDB4YmM3ZTkzZjcsCi0JMHg0Y2U2ZWU2MywgMHgyN2Q3Mjc5YywgMHg1MDBkNzdiMCwgMHg4NTNhZDVmZSwgMHgxYmYyYWZmMiwgMHhhMWEzZTU4ZSwKLQkweDE0YWQ1MzFkLCAweDZiMGJkZGEwLCAweGRlOGFmMTQ3LCAweGViZDY0NWRhLCAweGU5NTkzZGVmLCAweGY1MGYxMDkyLAotCTB4MDFlZGEwN2YsIDB4ZTUwOGM5NGIsIDB4YmMyYzVjNjMsIDB4MWJiN2YzNWYsIDB4MTkzNzQ5OWYsIDB4ZTk5ZGJjM2YsCi0JMHhjYzlkZmQyNiwgMHhmZWU2YTRmMywgMHg5MWU3YzA3ZiwgMHhmYWY5NmRmYywgMHgzYmU4Y2ZmOCwgMHgwYTIzYWMxZiwKLQkweDk2MzFiYmU1LCAweGYwMGU5ZmViLCAweDU1ZmY3MTliLCAweGNkZmFlMDJmLCAweDM3NDdlNGU5LCAweGRmNzM3OWVhLAotCTB4MzFiZWE5OTMsIDB4OGFkMmJiNWEsIDB4OGE0Y2U2ZjAsIDB4N2FjN2Q0ODcsIDB4ZmRiMTczYTIsIDB4NDNkMjc0ZDYsCi0JMHhlNTE4N2QyOSwgMHhkZWQyZWRiZCwgMHg3MjYxZGQ1NiwgMHhlYjk3MzUzZiwgMHgzNWMyNjU1ZCwgMHg4YmVhMzE3NSwKLQkweDhmMGNjOWVmLCAweGVmN2UwN2RhLCAweDAxZGJkNjgzLCAweDY2YWRlZTZmLCAweGNjNTI5ZWZhLCAweGQxNGEwZjg0LAotCTB4YzkzNzA0MmUsIDB4ZjNhMTI0YTMsIDB4M2EyZmQ1MTgsIDB4NWRiYWZiODIsIDB4MWIzYTM1OWEsIDB4NTExMDdhZTgsCi0JMHg5ZDVmZmU4NywgMHg0YTVmZmU0MiwgMHg3ZTNlNTBkZiwgMHhjY2FiNmE1NywgMHhmNTIyZDdmMywgMHhiZTMxNmVkZCwKLQkweDg2ZDg1MWQ5LCAweDZmOWZhZGVmLCAweGE0YmM2Mzc3LCAweGVmNThmZDM3LCAweGY5ZTNlNDBmLCAweGI3ZGEyYmI3LAotCTB4YWMzYzgxOTAsIDB4N2UzZTdkYzgsIDB4MmUxNTM4MmIsIDB4MWU2YmY3MjcsIDB4MTczNjNkY2MsIDB4OGJkNTQzZWYsCi0JMHhmMWFkZDhiYywgMHg4YWRlZmE2NiwgMHgyODNhZTA1MiwgMHg1OGFiZjU4NSwgMHhiM2IyNmU0MywgMHg2MmM3MjE2NiwKLQkweDUyM2JmNTNkLCAweGZiYjhlZjI4LCAweGQ3ZjY4ZDNjLCAweGMyM2NjMWExLCAweDg4YmQ3NGY0LCAweDM3OGU3NDViLAotCTB4Mjk0MWRmYTIsIDB4ZDhhN2FlMmMsIDB4YTc4ZDFhNDIsIDB4YmM3ZDMzZGIsIDB4ZjFiZGZmOWQsIDB4NGY3Yzg5NzYsCi0JMHgyOGM3M2M3ZCwgMHhkNjFjZmFlMywgMHg0MzlmNWEzNiwgMHg3OGZhNDFmOCwgMHgzZDdkNzBiYiwgMHhlMzdjOGRlNCwKLQkweGYwYmViODc4LCAweGQ3MWI0NmYxLCAweGQxYjViMGU3LCAweGY3MTIxY2ZhLCAweGRiYzczYTZiLCAweGJkNzhmM2Q5LAotCTB4MjIzN2IzOGQsIDB4ZjcyZjRmZmYsIDB4ZGMxM2ZmMGEsIDB4MTgwZTc2NDMsIDB4ZjljNmM1MzQsIDB4MzMwYjY5ZjksCi0JMHg5MmJjMDM5YywgMHgxZmYzZWRjYiwgMHg1OTVmMzhmMiwgMHhjOTdhZTM2ZSwgMHhmZGQyYjJlMiwgMHg4YmFlODlhNCwKLQkweDk1YWY5MWJiLCAweDE3M2E2NjNkLCAweDI2ZGZlMjUzLCAweDNjNGU0YjNmLCAweGE3ZGEyNGM1LCAweGZlN2MyNmIyLAotCTB4MTdiZjg5YjQsIDB4OThmNmIwNDgsIDB4NWZkN2IzNjcsIDB4MmMzMzNhMzQsIDB4NTVhODlkYWUsIDB4NmI2ZjMwOWIsCi0JMHhlMTk1YWJhMiwgMHg2ZjEyODAzOSwgMHhmMTJiZjVhNSwgMHhlYTE0NjBmNiwgMHhkODA5OGQ1ZiwgMHhmZTgzZWMxYSwKLQkweDhiZGY1MGM0LCAweDk3NGYzMGI5LCAweDE1YzVlNWM2LCAweGY5ODgzZDZmLCAweGQwZTU4OTU0LCAweDllM2UxODZmLAotCTB4ZTRjYzdjMTYsIDB4YjBiMmI0ZjYsIDB4NzkxZDQyZmIsIDB4NWNiYTFmMWMsIDB4YzM2ZmNlNDcsIDB4YzY4NzhlNjAsCi0JMHhlYTJhZjA0OSwgMHg4ZTNjMzFjZCwgMHgzZjcwZmE3MywgMHg3YWNjYzdkYSwgMHhmYjgzZGEzNCwgMHgwNjNiZDNmYywKLQkweDczYmMxMDk3LCAweDljMDFlNTJjLCAweDBhNzYzYzNlLCAweGVkNjY2YmVlLCAweGQ4MjY2NjljLCAweDNlMzE1YWM0LAotCTB4ZGRlNzZiMzMsIDB4OTI5ZTdjNjYsIDB4MWRmZTg4YzEsIDB4NWZhNGFkNjcsIDB4MjU1Y2VkNjcsIDB4MTRkM2ZmZGEsCi0JMHgwZTY0NWY2YywgMHgxYWUzMDRmYywgMHhlZDFkMGY0NSwgMHhiMTliNzE4MywgMHg2M2ZhMTc4ZSwgMHhiZWRjZGE3OSwKLQkweDc0NzdiZjAxLCAweDg1N2VjYTg3LCAweDczNzc5YmVlLCAweDdkNGQwMzljLCAweDBiNzQ4ZWQ5LCAweDk3N2VjNWM2LAotCTB4ZTY5N2NmY2IsIDB4ZTc4NThmMzAsIDB4ZWUyOTc4OGQsIDB4ZGI2OGZlMzAsIDB4ZmM4MmJjNzEsIDB4NjI4ZWE2OWQsCi0JMHgzNGY3NmUzYywgMHg5Y2IwMjdhYiwgMHhjODRhZDIxNCwgMHg5ZWY1NmMyZCwgMHg1YjRhNzJjMCwgMHhiYmJhMDk3NSwKLQkweDljMzYxZmE1LCAweGI4NjFiMmMwLCAweGRmODg3N2VmLCAweDJhOGUwZmMzLCAweDQ5YzYwNjc4LCAweDY4ZGNlZWZkLAotCTB4YjdkMjc3ZjQsIDB4YTQxZTRlODQsIDB4ZWU4NWIxYjgsIDB4ZjIyZGVkYjksIDB4ZGUzMDQ5ZDYsIDB4OGVkN2I3NWUsCi0JMHg3YzZmNjg3NiwgMHg2YmY0OTliYSwgMHg1YTBhZjU2YywgMHg4NjY4ODBlNywgMHhmYWFiZGNlYiwgMHg2ZmJmZDBhMiwKLQkweGVmNDZlNzE0LCAweDJjNDczMWY4LCAweDdmMzQ3OWVjLCAweGJmZTA5OWZlLCAweDFlZDdhYWFkLCAweDUyYTA3MjRiLAotCTB4ZmMyMjgzYmUsIDB4NDllNjdhYjQsIDB4M2IyODQzNDIsIDB4MWI4YzQxM2MsIDB4M2Q3MGY1ZWUsIDB4N2VmODUwMWUsCi0JMHgwMzZmOWIxOSwgMHg5OGFlOGViZiwgMHgyOWU4YmI5YSwgMHg3ZjMxYjI2YiwgMHhlYzFiZGMxYSwgMHg1MGVkMTY1NywKLQkweDg4M2ZhMjE3LCAweDA2MTE2ZWQ3LCAweDEzYmZjMWZiLCAweDc0M2RiOGM0LCAweDY3M2EyZTI4LCAweDE3MmZlN2QwLAotCTB4N2M2MTdmNDIsIDB4YWQ5ZmYzODYsIDB4OGZhN2JkNzQsIDB4ZjYxNjBlYWIsIDB4NWVkM2YwNDEsIDB4OWY0ZmVmMWYsCi0JMHhiNzYwZWM2ZiwgMHg3MzFiNWVmOCwgMHg5MjNlNzE5YiwgMHhjM2FjMGY5OCwgMHhiMDlmMzYxYywgMHhjZWJlYjQ3NiwKLQkweDg5MmQzMzc5LCAweDMwZjU5ZmRmLCAweGI5OTZhZjdlLCAweDNiZjViMGU1LCAweDQ0YmI1ZTZkLCAweDIyYWNkMDc2LAotCTB4MzMzNDNhZmYsIDB4Mjg3MDRiZGQsIDB4MDRmYmE3M2YsIDB4MWFjOGViOTEsIDB4ZGY2OWUzY2MsIDB4MDUxZjYxOTcsCi0JMHg3OWE2OTllYiwgMHhmN2U1Y2ExOCwgMHg1NWY5MGY1NSwgMHg3OGU1ODBiMiwgMHhlM2M5ODdlZSwgMHhkODRiMzEyNywKLQkweDQ5ZjhlNTdhLCAweGI0MWE2ZWQ0LCAweGI0ZTdmOGM3LCAweGYyMWEzZWEyLCAweDU0ZDY3NGViLCAweGMxN2RmMmFiLAotCTB4NWY5ODRjODksIDB4ZmM4NjYzMTYsIDB4NGZjMDU5NzQsIDB4OTY1MGJmOTYsIDB4NzFhYmM2ZTYsIDB4ZTgzOTJkMGQsCi0JMHg4Y2IwM2QxNywgMHhkNzZhOGNmMiwgMHhmOWM1NmI0ZiwgMHg2YmFjZTUyNiwgMHhlZjdhODM4OSwgMHgyY2VlOWM1NywKLQkweGZiMGRjNzlmLCAweDc5MGQ5MWVmLCAweDAwMmJjOWNiLCAweGY3NWYzZjBlLCAweDA3ZTA2MTE5LCAweGFmOWQ3YjQzLAotCTB4OGFhOTUzMTQsIDB4Y2ZiOTg0N2UsIDB4MzA1OWRkOGQsIDB4ZWRjOWQ5N2YsIDB4NmNiODc4MzcsIDB4ZjJmMTBmNmUsCi0JMHhmMDI1N2M2ZSwgMHhjNjY3ZDNhZiwgMHhhN2MyNGNlMCwgMHhiM2JjNzBhYywgMHgyNzdlY2QwZSwgMHgxYmYxMTNhNywKLQkweGQ1ZTMwOWZkLCAweDNlNjJkODgwLCAweDE0ODk0ZDdkLCAweDhlYTFmYmM0LCAweDAxMmNmNmNlLCAweGE3NDkxYWU5LAotCTB4ZWVjNzViNzQsIDB4OTU3ZjVjMmMsIDB4MjNkYmYyOTksIDB4YzQ3ZTBhZjEsIDB4NjdjODY5OWQsIDB4MWVhOWUyNmIsCi0JMHgzYWJlNTM5ZSwgMHhmNjc1MjI2NiwgMHgxYjA0ZjUyMywgMHhlZDRkZjFlOSwgMHhkZGMxNjA5ZiwgMHhmOGQ2NGYzYywKLQkweGUwYmUyOTNjLCAweDhhNDI5YzlkLCAweGNjOWM2ODQ3LCAweDBkYWNmYWM2LCAweDhjNjJiYTQ2LCAweGEyNzhmNTA5LAotCTB4YjRhMTgyYzYsIDB4YjRlN2E3NWIsIDB4YTYxMmM2ZjgsIDB4Y2VhYmE3NzQsIDB4N2I3ZDI5NzcsIDB4MTBmMmYzZDYsCi0JMHhlYTAzYjA5MywgMHhmM2Q0MWNiNCwgMHhmZmYyNjYwOSwgMHg4NGU2MDliYywgMHhkNmYwN2RmMCwgMHg3MjVmN2NjMSwKLQkweGU5MGEyYmRiLCAweDRlZGU3NjZmLCAweDUwYjRlZmY3LCAweDEzZjQxZjViLCAweDkzMzM1ZDI3LCAweGE5ZDZmZTdmLAotCTB4ODM0ZDhmNjMsIDB4OTZhZmYyNzIsIDB4YzliYjYxZDQsIDB4YmY0NmVkYjAsIDB4MzcyYmU4NjIsIDB4YmYyNjJjNDYsCi0JMHhlNTE3MmRhNSwgMHgzYTE2NTVmNSwgMHhiMWY2ODJkOSwgMHg4MjcxNDJkNSwgMHg1MzZmOWZjZCwgMHgzNWZkMjEyNywKLQkweDdkM2U3MTQ2LCAweGI5ODMyM2RjLCAweDI1YTVmYTlkLCAweDlhN2QyNWUwLCAweDdlNDZiMzI2LCAweDZiZTM3NjVlLAotCTB4M2UzYzRlOWQsIDB4YjJjNzc5NDQsIDB4YWJkZGFmODksIDB4YmQ5MzU3NTUsIDB4MzY2M2M5NGMsIDB4YWRiN2M3OGEsCi0JMHgyMWJjN2IyNCwgMHhjY2JjYTE5YSwgMHg0MWVlOWI1NiwgMHgxNzY1ZjY3OCwgMHhiMzdmNDMzMywgMHgyMTY1YjczNSwKLQkweDNmMDkxZjllLCAweDU5YWE4ZTczLCAweDY5YTk2MjI2LCAweDNmOWRiOWZjLCAweGU4N2FhYjlmLCAweGMzY2Q1Y2Y5LAotCTB4YmY3YzJiOWYsIDB4NjgxYWE3N2YsIDB4Nzc3ZjQzZjMsIDB4ZWM2ZTcxMmEsIDB4Y2JjZDRlZWYsIDB4YThkYmFmZWIsCi0JMHhmZmVjMTRmZSwgMHg0N2I0ZWZkMCwgMHhlYmQ0NTQwNSwgMHhmY2NkMTcwZCwgMHg0ZDE3Y2U3YywgMHgyOTU1YmVmYywKLQkweGZjZTM3NTY4LCAweDRmNzRjZDBhLCAweGJhMjRmYzBmLCAweGY1NGJiZDVmLCAweDdkZWFmZGQyLCAweDA4OGM5N2NjLAotCTB4MzY3MGI1N2UsIDB4YzZhZmQxZjksIDB4ZDVmZWU5OWIsIDB4ZTUzMzFlYWIsIDB4NjQyYTA1ODEsIDB4ZjA1MjFmN2UsCi0JMHgyOWU1YWJkMSwgMHg4ZTk2N2U3NCwgMHhkZDdhNDRjOCwgMHg2NDNmMjc2MywgMHg2MjQ0MWUyYiwgMHhkYzdlZjJmYiwKLQkweDdmZGNjODVlLCAweDllMmEzZmQ4LCAweDJjNmQzYmRhLCAweGUwZjkxNGFlLCAweGYyZjk0Y2IwLCAweGUzY2YxZmRmLAotCTB4ZjRhMWYyOTgsIDB4YWU2YmZhMjAsIDB4Y2JiY2EzMGEsIDB4M2YzODkzODUsIDB4Mzk0NTRjNjgsIDB4YzQ2OWExOTgsCi0JMHg5ODdiMzVmNywgMHhkYzkzNzY2NiwgMHg1NzQwZmJkMywgMHhjMmFlZTc1YSwgMHgyMmZhNGFmNywgMHgyNGQzNDZiYywKLQkweDdkMDYxODJlLCAweDFlZjg1MzUxLCAweDRjY2Y4M2M3LCAweDBhYmJlZmY5LCAweDQ5YmVmYmM1LCAweDVkN2M3MDg3LAotCTB4ZjkwYjA3Y2UsIDB4Nzc0YWY1ZDQsIDB4M2Y1MWE0M2QsIDB4ZGE0OWQ4OGUsIDB4YzMwNjgwNGUsIDB4ZmJmZjI4MDAsCi0JMHhmNTFjZjBhZCwgMHhmNzRjOWM0MiwgMHhjYTE3MDZjNiwgMHg5NzU4NzUyMSwgMHg3ZThiMjdkYywgMHg5NGY5MGIwNywKLQkweDJjZTUxYThmLCAweDdlMTE5MGViLCAweDdlZWZjODVjLCAweDYyZmI5MjE2LCAweGNlOGMwZGJmLCAweDE4MzdmYWNkLAotCTB4YzdjZWMxZGIsIDB4NTIyYzdhODQsIDB4M2YwYmFmOGUsIDB4ZGQwZjEyMzMsIDB4NzllYmVjZjAsIDB4MGFlYjVkOWQsCi0JMHhiYWQzNjU0NCwgMHg0MjVkN2NjYywgMHg1YjJhNjVkZiwgMHgyYWE2NzllOCwgMHgxNzljNmU2YiwgMHhkNzBmNzg2YiwKLQkweDBjOTBmZmRmLCAweGFiZDAyYTBlLCAweGUzMWIzY2QwLCAweDMyMDIzMzNjLCAweGFjOTliYmE5LCAweDM3YzVmNDhkLAotCTB4ODhhYjdiYWQsIDB4MzNhZTQ1NzMsIDB4MDZkYjdkNzIsIDB4NjRiZjVjNGIsIDB4MzdlNGJjZjgsIDB4MzdlNGNiMjUsCi0JMHg2MzAzZDY1OSwgMHhlNTZiYzcwYywgMHgyM2I3OWRkZSwgMHhlZWNlODc1ZCwgMHg1OWRhMDQzMywgMHg2MmE1NTgxZiwKLQkweDdhMTU1YTVjLCAweGM0YjVmMmM5LCAweDNiNjFlYmY5LCAweDcxMjVhYmYxLCAweDdkZjg0ZTQ2LCAweDI0ZGE5MTliLAotCTB4NTFjNTA4NzUsIDB4ODQxYzllYWYsIDB4MmQ3N2M3NzEsIDB4M2Q0OGZmODQsIDB4YzcwODY2MzcsIDB4NjM3Njk4ZjMsCi0JMHg4YmI4ZTQ1ZSwgMHg3Yzc5MTFkMSwgMHhkYmM4YmNjNiwgMHhjODhiZjdhZSwgMHhjODg4Y2JlMywgMHhhODYyMWJlMywKLQkweDg4OGVhYzlmLCAweDE3MWJlM2M4LCAweDZjNTdjNzkxLCAweDRjZTdhNzgwLCAweDliZTNjODhmLCAweDI4ZWY4MDYzLAotCTB4YmVkMGM3YmEsIDB4NTBkOGIzY2MsIDB4YjU3NGE3M2YsIDB4ZWY0ZWZlYTEsIDB4YWVmODA2ZmQsIDB4ZWQwZDg3ZjIsCi0JMHgwYzZhZmJlNywgMHg3OGFjZjdmNSwgMHhmYTBmNTBjNCwgMHg3M2I4YzdhMiwgMHg4N2FlMTBmMSwgMHg2ZDNjOTM2YiwKLQkweDEwMzA4MWY0LCAweGZlMGY2Zjc4LCAweDFkY2FhNDgwLCAweGQ5YzdmNmUxLCAweDU2YTJmZWNiLCAweDdkMjllM2QwLAotCTB4ZTI0ODEyN2YsIDB4OGYxMTY2NzEsIDB4MTBjNDc3MDUsIDB4OWQ4ZDBkYWYsIDB4NTE3ZGM3NjYsIDB4NDQ0YjRkOWEsCi0JMHhjZDdlY2ViYiwgMHg1ODU4MDZlZCwgMHhjNGU2ZjljMywgMHhkZGE5NGIwNywgMHgzYTc0ZDhmYSwgMHhmYzAyNzk4NywKLQkweGMwZTgxZjZjLCAweDc3Y2YyMGRhLCAweDZmMDAxN2U5LCAweGFiZjc5ZTFjLCAweGY1ZGExMjg1LCAweDc4YTU2ZWJiLAotCTB4NTgzY2U3NmUsIDB4NTU3N2Y1MjksIDB4ZjNlYTJmOWMsIDB4NDNmMThmZGMsIDB4ZWNkYmVlMWIsIDB4NTRjZjMyNTQsCi0JMHhlMjhlM2YxZSwgMHhlOTc1MWVlZCwgMHhjMzFhOTZlNywgMHhkNjQ1MWQ3ZSwgMHgxNjRiZTUwMCwgMHgzMGFjNWIwNiwKLQkweDhmZDA1YWRmLCAweDk3ODQ5YWY4LCAweDU1ZGRhMWVjLCAweDNkZTliYjQ1LCAweDEyN2YxYWIwLCAweDk2NTIwZmRkLAotCTB4ZTgxNjAyODQsIDB4YmYyN2VhYjIsIDB4ZjBlM2UxZjgsIDB4MTQ2M2UyYmUsIDB4MjdmODc4YTcsIDB4N2UyMWZjYmYsCi0JMHhjNDNmYzQwNywgMHhjODcxNzQ0ZCwgMHhlZWZiY2YxYywgMHg4NzRiYTdmZCwgMHhiYWM2NWY1MSwgMHg2NDYyNWVlOCwKLQkweDliN2RlMjdkLCAweDI2ZWI3YWJlLCAweDNjMTZmYmY1LCAweDM3YTVkYmY4LCAweDhkZGVmZjdiLCAweGQ1ODZiNzY3LAotCTB4NTk3ZjM2ZjcsIDB4NjEzY2M3ZTksIDB4MzU2YTkwN2MsIDB4Y2JkNWMzZGUsIDB4YWFiZTBiZWYsIDB4ZjhhNTZiMWEsCi0JMHg1N2M5MmNlNSwgMHhlNWZjZjI4ZiwgMHg3MDdhZmZkOCwgMHg0NWY3YmMzYiwgMHg3MTdiYjVjOSwgMHhiZmNmMDc3ZiwKLQkweDFkYTFjZjhmLCAweDk0OGJmNWUxLCAweDNjZjhhOTJiLCAweGZmZjgwODY1LCAweDU4YTM2NzY4LCAweDZmN2NmOThmLAotCTB4OGI3ZWUxMGMsIDB4NDFkMTU4OWMsIDB4MmIwNGYzZmIsIDB4ZjY1Yzg3YzUsIDB4ZWUzZmEzZjksIDB4NDQ3MzU4Y2IsCi0JMHhmNzFlYTBiYywgMHhmN2E3NjBlNSwgMHgxZTg4Zjg4YSwgMHhmNDQxN2YyZiwgMHg5Mjk0NDQ3MywgMHg0MWNlOWYzYSwKLQkweGY3NDAzZDk4LCAweGIxN2Y3NTYyLCAweDhiMzgzYzliLCAweDY1MWJlZTE4LCAweGFlMTBiZTQ1LCAweGFjMTI1YjE3LAotCTB4NTQ5MDFmMTQsIDB4NGI3N2U1MmIsIDB4MmVmYTI4ZWEsIDB4N2QxYjA0YTIsIDB4Mjg3MjQ3M2MsIDB4NjhjZmI0NmQsCi0JMHhmMTQ1MTg0OSwgMHg4NjM0MjkwMCwgMHgxMjhhMGNlMiwgMHg0MGRlZmVhMiwgMHg3ZWUwMjRiYSwgMHg3N2RmYjhjNiwKLQkweDVkNjgyYmQ5LCAweDNhY2ZmN2JkLCAweGViNDlmNzlmLCAweDc5ODg5YzYxLCAweDFmNTg3OGUwLCAweGZjNDFjZTM5LAotCTB4OWJkYTFjMmUsIDB4ZTMxZWY2NjUsIDB4NGM4NmQ3MWIsIDB4NGFmNDhlM2MsIDB4YmVlZmI1YjMsIDB4ZmRmNWU1MWQsCi0JMHg1ZWIyZjU5ZSwgMHgzMDdmOWU2MiwgMHg4NjY3M2YwYywgMHg2MDVmMTNhNCwgMHg2YzMwN2Y3ZSwgMHgwZmUzY2M1YywKLQkweGU4MDM4MTg3LCAweDYwYzEwNzllLCAweDQyZDgwNjZhLCAweGI5Zjg4MzUxLCAweDZmNTc4ZDA1LCAweDNmYzg5MmQ1LAotCTB4NzQ4N2YzMDQsIDB4ZTc5MDhkZmMsIDB4NjFhZjAyM2YsIDB4YzNlYzU3YjksIDB4NjM1YzgzZjcsIDB4MjU1Zjg0ZjksCi0JMHhjODAwZWQzZiwgMHhmYjRmYzIxZiwgMHhmZDA2NTRkZCwgMHhmYTM2NTQzOSwgMHhlNDNmYWEzNSwgMHg4OGY4MjIyZiwKLQkweDUxZjA0M2RmLCAweGNmOTUyOTdmLCAweGZjZjRiZGZhLCAweGMxMzk3ZjM5LCAweGE4ZmJmNTNmLCAweGEwYWZmMjZjLAotCTB4YWJmODJmZTcsIDB4YmZjOTdlMDksIDB4YTM5ZmUwOTEsIDB4ZTc4NTk4NWYsIDB4YmU1NDc1MTMsIDB4ZmFhMDZmZWEsCi0JMHgwOWZiZmNkNywgMHhhNDFmYzM3ZSwgMHg0YTNmZTQzMiwgMHg5YmY5OGZjZiwgMHg2ZmUxM2UwOCwgMHg3ZjZkZjgyNiwKLQkweDdmNTZlMDg4LCAweGY4ZWY5NTJiLCAweDI5ZjllOGRiLCAweGEzMDQ4N2ZmLCAweDQ1ZmVlMjNhLCAweGUwM2YxOWQyLAotCTB4ZDk4MTcxMjUsIDB4ZTI1ZTdlOGQsIDB4NGJiMzQ1ODIsIDB4MmU1N2RlMDAsIDB4ZDc2MTdkZDMsIDB4NDFkMmY5N2MsCi0JMHgzNDI3OGJlMCwgMHhmYjdiZjY5OSwgMHhlZTI5OTg1NiwgMHhmYjk1ZmJhMywgMHgxNmM3ZDYyYSwgMHhhYTVjZmQ1MywKLQkweDI2OGQ0ODZmLCAweDEyZmY2Y2JmLCAweDU3MWZkZDJiLCAweDk2N2Y3MjU2LCAweGJkYTg1NTJkLCAweGZkNTMyZjkyLAotCTB4OTJlNjJiMTMsIDB4NTM4ZjU4ZGYsIDB4ZDkyYWU3MDAsIDB4MTkzMWQ4MWMsIDB4OTMzMjJkZGIsIDB4MTExZmRlZmUsCi0JMHhlM2NhNGRkNywgMHg0ZjI5M2Y3NiwgMHg4ZmFmZjdlNiwgMHhjZmMyMDU0NiwgMHg2MjliMmIyOSwgMHg3MzU1NzAwZCwKLQkweDMwZTNlMDcyLCAweGM2MmQ1OWJlLCAweDFjOTkxYjYxLCAweGNmYzdkZGZlLCAweGFmMzA3ZmY3LCAweDkwZjlkNjA0LAotCTB4MDNjYTRiZTQsIDB4ZTA3MTdjN2MsIDB4OTlkODNjZGMsIDB4YzNiZGIzMzIsIDB4Y2NlNGYyOGEsIDB4OGQ0ZWQ5ZTgsCi0JMHhlYmNmZDNjZiwgMHhmZTIyNGU5MiwgMHhlMTMyNjlmNiwgMHg2MWI2OWY2ZiwgMHgyZmVlMjY1YSwgMHhkZGY0YzgxNiwKLQkweGYyMDVjNDhjLCAweGU5OWZiODU3LCAweGZiYTY1ZjM3LCAweDk5NGFjYWE0LCAweDgxNmM4MWUyLCAweDAzNjNlMDU5LAotCTB4ZmNkZmJiYWQsIDB4MGVhZjU0YjksIDB4NzQ3MTQ1M2MsIDB4NmQxM2NhZDcsIDB4MDE2ZmQxOTMsIDB4MWQxMTY1N2MsCi0JMHgzOWUyYzUwZSwgMHhiYjg4YjI2ZSwgMHhhNjhmOGZlZSwgMHhmOWM4YjZiYywgMHhmMTdiZmY4YywgMHgzM2YwMDliMywKLQkweDhjZmM0N2FhLCAweDRmM2YwOWVmLCAweGZkZTNmYjg4LCAweDIyMjI3N2M0LCAweDk3N2ZhNGYxLCAweDdkZjEwOWY1LAotCTB4MWUwNmMwZjIsIDB4Mzc2YzhmYmYsIDB4NzMxZmNjNDcsIDB4MmUzYmU4Y2UsIDB4OGZlOTMyOTUsIDB4MjNiODJjMDMsCi0JMHhmOTk4ZTMxYiwgMHg3ZTQzZGQzMiwgMHhiM2FhZDI3YywgMHgzZjNlNjEwNywgMHg5MWRkZjNjOCwgMHgyYzlmZWQwNywKLQkweDhlYTE4ZjkxLCAweGZkZTUyYjhkLCAweDFmMjM1YzBmLCAweDdlMDJiZTQxLCAweGRhMDQ3OTVkLCAweGU5M2JiZjZkLAotCTB4N2Q5NDM2NGMsIDB4OGMxNmVlMDMsIDB4MWY0NjNhYmYsIDB4Zjk4OWY2NDgsIDB4MTYxNzY0ZjYsIDB4ODBmYmJmMGEsCi0JMHgyYjRmYzQ0NywgMHg2NTFhM2RmOSwgMHgxM2RjOWVlNSwgMHgzODA1ZGM3YywgMHhiNWY1MmJhZSwgMHgwMzA5ZjhhOSwKLQkweDkzMGVkY2Y3LCAweGY5N2VjYTA1LCAweGNmMWMzYWYyLCAweDQ5ZDI0Zjc2LCAweGUwMjEyZjFjLCAweGM3Y2JjN2QxLAotCTB4OWUyZGJlZjEsIDB4OTI1YmJmNTIsIDB4ZjFiZGQzZDgsIDB4MzdlMWY0ZGUsIDB4NzlmNWMxZTksIDB4N2Y1MTNlZTIsCi0JMHhlMGY1MWZkNiwgMHg4YTc2OTZlMywgMHg3MGNlMDc1MywgMHgzOGI0YzgzZCwgMHgzOTE3YmZiYSwgMHgyN2Y5NmY0ZSwKLQkweDY0OWY4MTAxLCAweDg4NmYzZjFiLCAweGU3NDc2ZjdjLCAweGYwMjAyNWJlLCAweGYyOGNhZmQ4LCAweGUyY2IyNmI0LAotCTB4ZjY4Y2ZhYmIsIDB4NDYyN2ViZGIsIDB4NzI2ZjliYWIsIDB4ZDQwM2YzMWUsIDB4MWVhZmEwYmYsIDB4OWZhMjYzY2UsCi0JMHgxZmJjYTk5NCwgMHgwMjY3ZWYzMywgMHg0NGYwNDc1YiwgMHhlNGRjMGQ0NSwgMHhlODhmNjAxYywgMHgwMGZkOGZjNywKLQkweDdiYmYxZjdlLCAweDE4YWRlZWM1LCAweDQyZDc3Y2I3LCAweGM5MGU3NGI5LCAweGNlZjQ5YmI3LCAweDFmZGEyNWFmLAotCTB4MmIwZGNjYjksIDB4MTdmNTg3OGYsIDB4OWZhOTdjMTQsIDB4NDhkZTYwNDMsIDB4NzlkNzU2NWUsIDB4ZWMwNTUyNDQsCi0JMHhhZGYwYzI5MSwgMHg4OGI4ZjdiZiwgMHhlMzc5M2ZhMywgMHg5YmNhNThhMSwgMHg4NTEwZGZjOCwgMHg2NjNlZGZmZSwKLQkweDJjNTAzZTI3LCAweDBjM2YzNTIxLCAweDdmODk4YTdmLCAweGZlNzIyN2NmLCAweDdhYWNmMmM3LCAweDcxMzI4MDVlLAotCTB4MzIyMzllMTQsIDB4ZjUxOWNmN2UsIDB4NzVmYmNjMjgsIDB4Yjc3ZjkzOWYsIDB4ZDMwN2MxNjksIDB4ZmUzYzAzODcsCi0JMHgwZmU3NGM5YSwgMHhmY2QxYTVhZSwgMHhjYzFmZjZmZSwgMHg4NmY0Njc5NCwgMHg2NzdlMTc4OCwgMHg2M2RkMDk2ZCwKLQkweGY3MTJjMjRiLCAweDA1NGZiOGE3LCAweGE2MjZmYzc4LCAweDlmN2RmMDg1LCAweDA5YzFmYjQyLCAweGUxNzNlNWQ3LAotCTB4MGFiMjA5N2UsIDB4MjJlZTM3ZjYsIDB4YjhmMmY4YTMsIDB4NmY3MGQ5MGUsIDB4NjM0NWNjNmQsIDB4ODRiZmEwN2IsCi0JMHg3NmE0ZGFmYiwgMHhhMTQ0YmI2MywgMHgxNTIzNWRmZiwgMHg3ZThmZmVmYSwgMHhkN2Y1ZDA2ZiwgMHg2NGM1Yjk3ZCwKLQkweGZmNDlhMjI3LCAweDI0YzlhOTNmLCAweDJhMTY0ZmNmLCAweDc2ZGRiMTA3LCAweGZiODRiYjNiLCAweGJiN2NjNzQ0LAotCTB4YzVhMDdhOGEsIDB4NTU3YTRkMTUsIDB4ZmU0ZDExMTksIDB4NjM5NGY2ZjMsIDB4OWZjMDc2ZjYsIDB4MmEwN2U0NmQsCi0JMHg2YzAzMmJmYSwgMHhiYjE4ODNiZSwgMHhhYjczZWRmZSwgMHgyMThkMjVlNywgMHg1ZGY1ZGUzZCwgMHgzYmIwMjJlMywKLQkweGYyODJmOTc4LCAweDlkZWNkNjk5LCAweDE1Nzk4OTljLCAweGQ4ZWVmYTY2LCAweDdhYjczYzdmLCAweDIyNzdmODZmLAotCTB4MzA3NTI0ZDMsIDB4ODRlYzU3Y2YsIDB4ZTBkZmExNTcsIDB4NDE4ZmI5YzAsIDB4MzNlYTA2M2YsIDB4ZDdjNjFjZjAsCi0JMHgyOTIxN2E4ZSwgMHhmOTA1YmFiZSwgMHhiNjM5NWVhYSwgMHg4NWQwZTI4MiwgMHgyZDU3YTRmMSwgMHhlYTEwZWFiZSwKLQkweGMwYWQ3YTg5LCAweGJhZGYyZTFlLCAweGRjYWFkYzljLCAweGQ1Y2UyOTNmLCAweGJmZmU0OWJlLCAweGU0ZGVkZmE5LAotCTB4MmU1Yzk1ZmMsIDB4MDFjNWJkNzcsIDB4Yjc3ZTdkZjQsIDB4NWViZWM0ZmUsIDB4ZGZkZmMyMWUsIDB4ZTA3OWY0MmEsCi0JMHhiZDQ3YjVhYywgMHhkNzI4NjZiZiwgMHhlZjIyNDUxNywgMHgyOTdjNTY2MSwgMHg1NjdlN2Y3ZCwgMHgzY2M2NWRhMCwKLQkweDJlNTBjZjUwLCAweDFjMTJmYjQ3LCAweDJmYjBjZjk0LCAweDdlMzA4NThkLCAweGVkY2Y5ODFlLCAweGUyMGFkOTAzLAotCTB4NTM4YTc0YTcsIDB4ZDRkYTliZDUsIDB4MGE0M2QyMDAsIDB4MmUyZTkxYjksIDB4ZWZlMTg3ZDgsIDB4NmRkZmQ0NzgsCi0JMHhmOTc3ZDIwZSwgMHhmYzI4YmU4MiwgMHg2M2Y0MWUzZSwgMHg4NTI4MTdkOCwgMHhlNGQ1ZTJkZCwgMHg2ODcxZWJiZiwKLQkweDdlMDA4ZWZjLCAweDgyYjY4N2ZmLCAweGNhM2E4MmUwLCAweDliOWRmNGNkLCAweDc0MjZmN2M4LCAweGFlZGJlMTE4LAotCTB4Y2M4OWUxMWIsIDB4NjI5YWJkZjgsIDB4YWM5ZTExYmIsIDB4NDNhMWUxMWEsIDB4ZjZlMmJlZjksIDB4YTlmM2UzMjQsCi0JMHg2ZmRjMjM2ZSwgMHg5OTk0NjM3ZSwgMHg3OGEwZmZkZiwgMHgwYzE0N2U5NSwgMHhiOGMwM2VmZiwgMHg2NDAxN2Y1OCwKLQkweDYwZjdlMjBjLCAweDIxYWZiN2ZiLCAweGU4ZmY1MDdkLCAweDdlZmY5MjBjLCAweGNhZTIyMjZiLCAweDgxOTViMDBjLAotCTB4ZjNlMzZhNzEsIDB4MmQ4NTljYzQsIDB4YWFlZDdlOTgsIDB4ODdiZTIzOTAsIDB4MmNlNzQ2ZDIsIDB4NzNjMzBmODAsCi0JMHhmMjBiN2NmYywgMHg5ZTZjZTFmZiwgMHhkYzMwZDlmZiwgMHhjOGU4NzkzNywgMHhkZTFjNzlhZSwgMHhjZmNlOWIzMywKLQkweDAzNWY1NjJjLCAweDI4Yzc0ZWZkLCAweDM2ZDJlYzk5LCAweDliNzVkMzk5LCAweDM1YmE3MmE2LCAweDU3NzlkMzI3LAotCTB4NjBiNDRhYTIsIDB4NWQ1ZjM2NDUsIDB4NDcyM2M2MWEsIDB4YzkxZTI5OWEsIDB4M2RmOWUyMWEsIDB4ZDNmYWU3ZjQsCi0JMHgyYzYyNDFmOSwgMHhlNzczNDM5ZiwgMHhmYTQ3ZGJmZSwgMHg0MGQ4OWQ5NywgMHgyYWZiMDNlNywgMHg3ODhlZmE2NCwKLQkweGY5NDAzZGIyLCAweDJiY2ViMDUzLCAweGNlOTYzODg2LCAweDM5ZjlmM2I3LCAweDUwZDdhYzBhLCAweDYyYmNlYjBmLAotCTB4MTAxZjk3ZTQsIDB4YTJmNWY0OWQsIDB4ZjBjMjA2YmMsIDB4MDgxYTcyODAsIDB4YmU2OTliOGYsIDB4OTQwNzg4ZTUsCi0JMHg1MWU3ZjBkNywgMHhiYTE2ZWQ5OSwgMHhkM2Q2MmQ0ZiwgMHg3YWVhZGM5YiwgMHg1NzljNDhhMywgMHhkNzZjNzllYiwKLQkweDFlN2E5OGM0LCAweGZmOTEwNmRiLCAweGUyMzRlY2RhLCAweDI0Zjk1YWUxLCAweDZiNWMzMzhhLCAweGViZWQxMzliLAotCTB4MmY0MThlNDksIDB4MmY1YzZjMDQsIDB4ZGUxZGI5NjAsIDB4N2JkZmI5NDMsIDB4MWM1NGUxNjMsIDB4MjA0NGY1MGYsCi0JMHgxNjE0N2JlYywgMHg2ZGZmYTdjMSwgMHhjMjIxYjNiZiwgMHhlZmZiM2YyZiwgMHhmOTE4NmE0NywgMHg5ZTIwOGY5ZCwKLQkweGUzOWMwNzJhLCAweDc3YzVlZGY3LCAweGI2NzgyY2JjLCAweDNlYTVjZjA3LCAweGNiN2FhZjljLCAweGNhZTlhZjFiLAotCTB4YmFlM2I1YmYsIDB4YmZiYzg4YTUsIDB4NWFmODExMmIsIDB4YmZhNWYwMmYsIDB4Mjc0ZDQ1N2YsIDB4MmQ2OTVkM2MsCi0JMHgyNzg2ZjdiNiwgMHgxMzI3ZjQyNiwgMHgzMzJmMTNmYSwgMHhiYjNlMmFjZSwgMHhlYzYzNDEyMSwgMHg5ZmRmZTc5OSwKLQkweDY3MWQwMzI3LCAweDk4NWIzZWFkLCAweGNmOWJmMDBhLCAweGNmYzM5ZWZmLCAweDNmYTk3ZDljLCAweGVjMzYxZDM0LAotCTB4M2RmODc5ZjMsIDB4OWQ4ZjU5OGMsIDB4YTFhMjk2YmQsIDB4ODVkZTI2ZGMsIDB4OGE3MGMzZGYsIDB4YmU3ZDE5NzMsCi0JMHgwOTJmNzhmYSwgMHhmMWI1NTk3ZCwgMHg5MDY3MWUxZSwgMHgzNTc3MjRiZCwgMHgwMWM1MmYyZSwgMHg3MGVmOGNiZSwKLQkweDU1NDJmOWUyLCAweGQxNmI4NzQyLCAweGQ1N2VmNDRkLCAweGZiZjk3YmM2LCAweDBhMzUzZTk4LCAweDVjYjg4OWYzLAotCTB4ZmJmM2Q2Y2QsIDB4ZmRmOThkNGIsIDB4ZDIyYWU3NGUsIDB4NTAxNjM2N2IsIDB4ZDk0NDJmNTEsIDB4ZWViZTc0M2QsCi0JMHgzYTI2ZTYxOSwgMHg3MmI0YzlkYywgMHhjZWVlYmU3ZSwgMHg1YWNjZmE0MiwgMHgzZmQxZWE2ZCwgMHhlN2FhMWQ2YywKLQkweGQ1YmU4NmZiLCAweDJiZGM0Y2I4LCAweGRhMjQ1Mzk4LCAweGM2NWZlM2E5LCAweDdiMzRlZTcxLCAweGYwNWZhMmI2LAotCTB4NDgyY2M2N2YsIDB4Y2Y0MWI3NDAsIDB4NzVkMjFhN2YsIDB4YWRkMGVmNGYsIDB4NzU5Y2ZmZGMsIDB4NDk2ZGM0ZGUsCi0JMHhmZjI3OGYwYywgMHg1NzVmMzg3MSwgMHhlZDAwOWM3OCwgMHhmOTc0NmY0NiwgMHgzYzVkMWJhYywgMHg4OWFkMDcxNCwKLQkweGE4YmE3MGYzLCAweDQ4Y2RjZTFkLCAweGQ3MGVkODk3LCAweGQ3ZGViYzk2LCAweDExM2U4ZGRmLCAweGY4MmFiOGY4LAotCTB4ZTQyYmZkMWUsIDB4OWZjMjZmZDcsIDB4NGYzZDFmNGUsIDB4Y2VlNGM2YWMsIDB4NDBlNjdmMjIsIDB4MTQ3YzQzN2YsCi0JMHhhZjZlMDIzNiwgMHg3NmZlNjdhMywgMHhjODhmN2Q4NywgMHgzOGE1ZTQ5YSwgMHhjYjVlMjU5MywgMHg5YWU2N2NjMSwKLQkweGU2M2Q0OWJmLCAweGUzMGY2Nzc3LCAweDY3NjZmMzdlLCAweGFmMTdkZDM0LCAweGJlZTk1YTcxLCAweDI3NzM4YjVhLAotCTB4YWVjZDNmNDMsIDB4OTRiYzIzNmMsIDB4ZTYxOGViMzgsIDB4YjNhNmQ1ZDEsIDB4MDZlZGZlMjYsIDB4YWQ3MTVlNjMsCi0JMHhlZjVlNmVmMywgMHg5ZGFjYjNlMiwgMHgyZTMxZWJhNiwgMHhiNGU3YjVjZiwgMHg4MTAzYjQxOCwgMHhhZjJlZGZkMywKLQkweGJmZTc2ZTU4LCAweGJkNWJkMjViLCAweGNmMWE2ZTMzLCAweDI5NWE3NjJiLCAweGIxOGE1OGFmLCAweDU3OTRmNzU2LAotCTB4YzdjMTE3ZmMsIDB4NzhiZWI4MmQsIDB4YTc4ZjBmNWMsIDB4YmJiMmViZTksIDB4M2UyM2ZlNzksIDB4ZDU5YTc4YzcsCi0JMHhhZmRmYTNlZCwgMHg5N2ZmZDdkMSwgMHg3YTJlOWNhMSwgMHg5YWJiOWI3YiwgMHhhYzk3ZGVhMSwgMHhhY2Y1MWI5YSwKLQkweDg4NGZiZTI0LCAweDRjMjcyNDc2LCAweGZmZTNlYTVmLCAweGVmODVhODY5LCAweDRhOTUzNTk3LCAweDhkZGI5ZGIzLAotCTB4MzllZWJmNTksIDB4MzBmNDdjM2YsIDB4OWRjOTJkZDMsIDB4Y2RiMzM3Y2UsIDB4OTc0NjZmM2MsIDB4ZDU4YWI5ZWYsCi0JMHg1Y2MzN2U4MywgMHg3YWYyODkyNSwgMHgyZmVhMDJlNiwgMHhmZmI1ODVjNiwgMHgxZWZjNWRjZSwgMHgyMTI1YWNhYSwKLQkweGVlM2ZiZDNmLCAweDA3ZGY5N2I2LCAweDJlOTgzZGYwLCAweGE5YmRlOWUyLCAweGY1OWZiYTE2LCAweDcwNzk4OTllLAotCTB4Yjc5OTE5ZWIsIDB4NGVjNmY1ZTgsIDB4MWRlM2VkYzYsIDB4YTJkNmNlMzMsIDB4NjIwYzY2MzgsIDB4YjBlNDNmNzQsCi0JMHg3OGU3NjJiMywgMHhjY2MzZmU0NiwgMHhhZTYwZDA2MSwgMHhkZTMyNmNhZiwgMHg5ZTVkOThjNywgMHhhZmI2MTZmZiwKLQkweDhmNDA3NjEyLCAweDQ5ZjU1NzE3LCAweDkxZmU1MjBkLCAweDZjMzM5YmU0LCAweDNmOGRjNjI0LCAweDYyNDI1NTlkLAotCTB4ZGY0YTkxZGYsIDB4NGY2YWVjYmQsIDB4ZjZiMGUzNzEsIDB4ZDNmYjQ1ZjMsIDB4MWQ3MWM0NjksIDB4MmI4M2RkZjQsCi0JMHgzZThiYjFlYSwgMHhmMjg3ZDEzNywgMHg4YmYxMjIyMSwgMHg5ZGZmMGE3NCwgMHhhMDdmNWQzNSwgMHhmZTExNjdkZCwKLQkweDQ4ZmMzODc5LCAweDEzZGQzOTRjLCAweGJkNTdlZGQwLCAweGY1NzhlN2E1LCAweGJkMDk4NmFmLCAweDM4YWRjYmE5LAotCTB4MWYzM2IwODcsIDB4NGM5MTM0NWQsIDB4MWVhN2VlNWUsIDB4NjdkOWY2N2QsIDB4ZWE3ZTVkNWQsIDB4ZjQ5ZjYxMGUsCi0JMHg4MzMzYTI3ZSwgMHhmOThkMTk1NCwgMHg1NDlhNTAyYSwgMHhhY2EzZjEwZiwgMHg2MDA1Mjc1NiwgMHhkYWZmZGI5ZCwKLQkweDI3ZjdmZGYzLCAweGYwMWU3OTc1LCAweDJmYjYxMjYwLCAweGIwNzJmYjcxLCAweGRmMTdjYzhjLCAweDA3MmNiYTk2LAotCTB4MzRkYjcyZTUsIDB4OTQ2YWVlZGQsIDB4OWNlZGJlMzcsIDB4YmU3NDM3ZmIsIDB4MWJjZjBlZmEsIDB4OWQ5MDE5NmYsCi0JMHg0YTUxNzk4OCwgMHg1OWJlNDVhYiwgMHhlNDE1YTY1ZSwgMHgzZDEzN2RkNSwgMHgzZmY3MTU2ZSwgMHg2MzFiMWRiNywKLQkweDM2ZjRmOGM3LCAweGNmMGRhMGE1LCAweGYxMjliNzc3LCAweDUzNmRiNDA1LCAweGRlOTAxZTc4LCAweDVlNzg1MTVlLAotCTB4NzhmMWEyOWUsIDB4YmNmMGEyYjcsIDB4YTc3ZjNkMzksIDB4ODRkYmMwNjUsIDB4MDNkZGJkMGYsIDB4OGQxNWFmODIsCi0JMHhkMjg4ZTNkZiwgMHg1ZDlkYTgxYSwgMHhiMmY3ZDJmNiwgMHhlMjhjZjFlYywgMHhmZjk1NzY1MiwgMHhhNjc0NTBlZSwKLQkweDkwN2JkOTk5LCAweDJjYzNiNWQ3LCAweGU1YjYxZjY0LCAweGEyNGRiNDE1LCAweDE0NmVjOWY5LCAweDA1NDk2ZDkzLAotCTB4MTE0N2E0NDksIDB4OGQ3ZWYwZWYsIDB4MzE2ZjEzYTMsIDB4MGE5ZmM3ODgsIDB4ZDRmZGViYmMsIDB4ZGU3NWYwYjQsCi0JMHg0MTc3NzFiYiwgMHgyM2Y0NWY0OSwgMHg1ZjkwODdiZCwgMHhlYzhiMjliNywgMHg3MjQ2ZWY3OCwgMHhiZmI0ZGUxNCwKLQkweDQzMjY2MWU2LCAweDdmNTc2NjNlLCAweDdmNDUwYTk3LCAweDI0ZmVjNTNmLCAweGZkOGE4MTQ3LCAweGJmY2Y1ODU5LAotCTB4ZThiNmY4YmIsIDB4ZWYzZGVmZTcsIDB4ZmEzNjBjYzAsIDB4MjI2MzA4ZGUsIDB4ZDQ5NDI2OGYsIDB4Mjc2MWY5ZDMsCi0JMHg2MzFjZjBmZCwgMHhmZWY3Zjc0NCwgMHhiZDY3N2VkYiwgMHhmZTA5ZGUzMSwgMHhiZjUxNmZlNiwgMHg3YjlkZTY1NCwKLQkweGUxM2QxMjdiLCAweDY4ZDZlNmZlLCAweGJmNzQyZmFlLCAweGZiNzk1NjUxLCAweDBmN2U2NmFkLCAweDlhYmVmZjU1LAotCTB4YjFjYTQ3ZWUsIDB4ZGQ3NDNjNDYsIDB4Yjg3NGUzMDMsIDB4YzgzOGYyYWEsIDB4N2M1MTg1NTUsIDB4YWZhZTUyMjYsCi0JMHhiODZlM2E5ZSwgMHhkODc2ODE0NywgMHgyYzcxZmMyMywgMHgwY2Y0Y2ZkMSwgMHgyZTI5NzNjMiwgMHhhM2RjYmFkZiwKLQkweGViZmQ0NDRlLCAweDFmN2Y3NzI4LCAweGE4YTRhYmJmLCAweDMwYjdjYTY2LCAweDVmMTJmZjAxLCAweDkyNDNkZTc3LAotCTB4YzZjZmY0N2EsIDB4MzU3NGU3MGQsIDB4MjQ2ODU2MjUsIDB4YjcyODRhZTcsIDB4ZTAzZjM5MjcsIDB4NzI4Yjk1M2EsCi0JMHgxZWNiYTA3ZCwgMHgwM2FlYjhhYiwgMHgxMzg5ZGNlNywgMHhiZjVjZTRjMywgMHhiZmY3YTIxZiwgMHgzNTY0ZTRmZSwKLQkweDc0ZGY1ZDdjLCAweDZlNzljMmZmLCAweDhmNjRmZGU3LCAweGZmMWVkYzVkLCAweGQ4YzdkZjZmLCAweDQwYWViMmVhLAotCTB4MzI2Y2RmZmIsIDB4YzM5MWU1ZWEsIDB4ODZkNjNlYjksIDB4NzVlMGY4OGIsIDB4YjNiN2VlOTksIDB4ZTFiNGJlYTEsCi0JMHhkOThiM2Y4MCwgMHhmOTdhOGU1YiwgMHhkZmRmMzU0MCwgMHgxNDk5YjFjYSwgMHg3ZWIwMzk4NywgMHg4MjllNDQ1YSwKLQkweDMwZjBkMDZmLCAweGIzYWEyYzc5LCAweDg1YWJiZTkyLCAweDAzZWQwNzdkLCAweDQ5MWFlODIzLCAweDNhZmU5ZDJmLAotCTB4ZTdlNzI4ZWMsIDB4MjdiZDNhNzIsIDB4OTEyMTJhMjYsIDB4ODlmZTRjMDcsIDB4MDk5OTdlMmIsIDB4ZGNhYjlhZjUsCi0JMHhiMDM5ZjI2NywgMHg4MWQ5MWI3ZCwgMHgxMTVkZGFkZSwgMHhhZjZmNGZmYSwgMHhjZTBhZmY2MCwgMHg3M2UyODBhZiwKLQkweGEwZTc1MDU3LCAweGZjZjZhNDlmLCAweDUxOTc2Y2ZiLCAweGVjN2UwNDk4LCAweGIxZTcyZWIwLCAweDJiZjYyYWE5LAotCTB4YWI3OTNmMDksIDB4NTFhZjZmYzgsIDB4YjA5ZWVkMGIsIDB4NDJkOGE1ZjcsIDB4M2UzMGE0ZmIsIDB4ZGUyNWU5YTksCi0JMHhjN2FlMWZlNCwgMHhlZmI0NDM5YiwgMHg0ODEwZWZkNywgMHg5ZTYwZDdlOCwgMHhlZTVmMjJhMCwgMHg3ZWQwNDc4YywKLQkweDlkZjBkNGEyLCAweGRlZmM3ZDQ1LCAweDVmMzllZGNmLCAweDY5MGI1NTVmLCAweDAxOGYyODFmLCAweDBiZmMwMTdmLAotCTB4ODE5MmVjNTMsIDB4YmUyZDM3NjQsIDB4ZmNjNDRlN2YsIDB4MjhkYWRmOTUsIDB4MjEyM2Y3OWYsIDB4M2U0MmVkOWYsCi0JMHgwMTYzZDM3YiwgMHgyZDJlOGM3NiwgMHhmMDI3NjE2ZSwgMHg0OWYwMDhkMiwgMHg0OWYyMGM0MSwgMHg3MGQ5OGE0ZCwKLQkweDliOTdhM2FlLCAweGUyNmYzYWM0LCAweGJmMGY1NGU3LCAweGMxZTczZjM1LCAweDM5ZjgzZGUxLCAweDlmODRjN2U4LAotCTB4ZTJmZmEzY2YsIDB4ZTg5YmQzMDksIDB4ZjA3YTc4YmYsIDB4NjJjZGVhNzMsIDB4NTNjZTI3ZmYsIDB4Y2RkYzViNGYsCi0JMHhkMzk3ODBlZCwgMHgzYmU4NjIxMywgMHhmODdkMTkzZiwgMHhlOGQzZGYzZCwgMHg3ZjgwMTVmNywgMHg0Y2Q5Y2NmNywKLQkweDUzMmNkNjI0LCAweDg0M2E3N2U3LCAweDA2MDhjOTlmLCAweGNhMjc2ZjNmLCAweGFlZjMxOTQ1LCAweGQ1YmRkZmMyLAotCTB4ZGY4OTg4ZTUsIDB4M2EyNmY5YTMsIDB4ZTBkYzA2Y2YsIDB4M2RlM2I2YmMsIDB4ODdiYTNjYmMsIDB4MzlkM2RhNTcsCi0JMHhmZTRlYjFkZSwgMHhjN2E2MTMwMSwgMHg0MDFmMDhmYiwgMHg1YTM4YjA5ZCwgMHg0NDYwZjhiNywgMHgzMWMzMTAzYywKLQkweDE5YzVmOTlkLCAweGJmNmZkYmRkLCAweGY5ZjhhMjYxLCAweGUyMGIxZjJlLCAweDUxZGMwMmVmLCAweGJkZGY4YzY0LAotCTB4NzZkOWYyMjUsIDB4N2YyNDYxMmQsIDB4NDI5YTcyYmIsIDB4NmEyNDVmZTgsIDB4NjVmMWUyOGMsIDB4MzlmYjYzMWUsCi0JMHhiZGRmOTFhNSwgMHhlZWY5YzYzNiwgMHhlNzIyNWFmNCwgMHhlYmI1ZGY0YiwgMHg3ZmQ3ZDYyNywgMHhmZjhhMmFjZiwKLQkweDIyZmRjNjQ1LCAweDNlYjQ3ZGUzLCAweDNjODUyM2I0LCAweDE4NTRhZmVlLCAweGY1MWNiOGYzLCAweGQ4YmJlODMzLAotCTB4NzE0YWY4NjAsIDB4MzMxNGFlN2QsIDB4YTNhYzM4YzMsIDB4MmRjZjMyM2MsIDB4MjFlY2YwMjAsIDB4NTllM2E2NjUsCi0JMHg5Mjg5OWVmZiwgMHg2YmRmZTY2ZiwgMHhmNTQ2ZGMwZCwgMHg3ZTFkYmU3YSwgMHhhYmEyNzE3NywgMHgzYWNhNWQ2YiwKLQkweDExN2M5ZjMxLCAweGJjZjQwZGNmLCAweGQ3MTg1ZGFlLCAweGJjZThiY2M0LCAweGQwODRkMDM2LCAweGM2MDVjZTFmLAotCTB4ZjQ2MGFlNDksIDB4Yjc1ODU3YmQsIDB4ZjBlMjVjZTEsIDB4ZmEyNjJkOWUsIDB4YTMxZjBmMWQsIDB4MWUwMWExZWYsCi0JMHhjYzE2ZTc4YywgMHg1ODUwZjE0NywgMHgwMzljZTFiZiwgMHgyMzgwNjlkNiwgMHhlNGRmMDFmNywgMHg5M2RlMWZmZiwKLQkweGEyNzdlM2RlLCAweDI3OGY1MmY1LCAweDYxMzM4Yjc1LCAweDJmYTQ4MDA3LCAweGJkZjM4Yjg2LCAweGZhMjg2Y2ExLAotCTB4MDZmZTRhNDEsIDB4MTQ5NWMzYTIsIDB4NzJjYjVmOWUsIDB4ZGJkZjNlN2EsIDB4ZjdlMWZkMDksIDB4NzI4ODdlOTMsCi0JMHgwMTcxODA5MiwgMHgwNGRlZjg2NiwgMHgwZjc0YzhmMywgMHhlN2M0NTRjMCwgMHhlNWViZWE2YSwgMHg0OGM3OTc0MiwKLQkweGNjZDE2ZGJlLCAweGE2ODQ3OThlLCAweGVhMGY2ODgyLCAweDYwMGQ5YjEzLCAweGY4ODUyZWZjLCAweGVlMjRiNzRlLAotCTB4MjgzZmZkM2YsIDB4MDA4MTJiZDQsIDB4MDAwMDgxMmIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4OTA5NWZmMDAsCi0JMHg1MGMzNGIzMSwgMHg5N2JmODUxNCwgMHg0YTM2YWM0NiwgMHgxMDU2ZGFjMSwgMHhhODUwOGEwOSwgMHg3NTVhNTA5NSwKLQkweDk3Mzc1NDMzLCAweDIyMWQwZThjLCAweDM4YmEzODNhLCAweGZjNWQyNTFiLCAweDA5ZjljZTAxLCAweGU2ZTI4NGZlLAotCTB4NDgyYWUwZTYsIDB4MjJiZjgyOTAsIDB4MjZhNjk3ZGUsIDB4Y2JiZDA4MjAsIDB4NzdkZGU3NzksIDB4ZGRmNzNkY2UsCi0JMHgyZThkY2MyYiwgMHg1ZWNhNzU1MCwgMHg3NTYxOTA0NywgMHg0NDQ1MDZkMiwgMHg5YWVhMTE1MiwgMHg0N2UxNzUzNiwKLQkweDNjZDZhNWE0LCAweDdjMjJjMTI4LCAweDRjMTIwOTJlLCAweGVjYmJhYTc1LCAweGZiZDQ1YWIyLCAweDVmZmVkMjQ2LAotCTB4NzNlNGVjNmYsIDB4NzU2OWZkNzMsIDB4MjdlN2NhZDIsIDB4MjJmZjhlYmEsIDB4YmE3N2U4OTgsIDB4MDA4MzlkMTIsCi0JMHhlNGUzZTFkNiwgMHg2NWY2OGZiZCwgMHhjODc3M2QxMywgMHg1Zjk0ZGNhYywgMHhkNTNkYTNlOCwgMHgzOTcwMDc5YiwKLQkweDNhZGYzNzZiLCAweGRiZTIwZDQ2LCAweDBhYThmMzhhLCAweGE1NjcwNDdiLCAweGZkMzk4Zjc0LCAweGVkMzQ3MzdlLAotCTB4YjBhNTZmMmQsIDB4ZWYzN2U2NTcsIDB4YmY4OTY5NWUsIDB4YzIxYjcxYTUsIDB4YzFlYzg0ODEsIDB4YzgxNDQ3YTgsCi0JMHhiZTBkYWFkMSwgMHhiOTQxN2RjZCwgMHgzZTk5Y2I4YiwgMHhiZjA1YzU5MywgMHg2N2ViODFmMCwgMHhmM2JhNzkzMSwKLQkweDg0MTZiZjBmLCAweGNiNjJiY2JmLCAweDVmMWRkN2ZmLCAweDdmNzRmNjhkLCAweDZiN2QyMzhjLCAweGJiOTJmNzJjLAotCTB4NTBhOGRjZTEsIDB4ZDlmNjk1ZjgsIDB4ZjQxMTJlZDUsIDB4NzM4ZGJjZjMsIDB4ZjNlNTY5ZjEsIDB4NzQyYjAwN2UsCi0JMHgwMjUwNTc0NywgMHgwMDAwMDI1MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4YzU1NDdjMGIsIDB4M2Q5Y2Y4YjksIDB4OTI2ZWVjZTcsCisJMHgyMTI2Y2RkZCwgMHgyNmMyYmMyMSwgMHhiODBkNDQwMSwgMHg0MWEwMGM0MCwgMHg5NDUyMGYzNywgMHhhMmExZTFhOCwKKwkweDI0Nzg2YzIyLCAweGY2MjJlZjIxLCAweGRkYmYxZjYyLCAweDUyYzQ4OGYwLCAweGQ0YzUxZjFiLCAweGIwNTE3NjhiLAorCTB4NDAzNjhiZDEsIDB4NWMxNzU4ZDAsIDB4NmQ4YjQ1OWUsIDB4ZDVhMDQ1ZTgsIDB4NWU0MDEzN2EsIDB4YTU0MGIyMDYsCisJMHhjZmZkNDViNiwgMHhkZDljY2RmNywgMHgyNjM2NGU3MywgMHhmNmZmZWY2YSwgMHg5ZmRiZmZmZSwgMHhjY2NjZTYxZCwKKwkweDdjZGYzMzM3LCAweDliZTZiZGYzLCAweDkxYmU2NDg5LCAweGYyMTM4N2Q4LCAweDI1NmVmYzI1LCAweDEwODk1MWU0LAorCTB4OWI0ZTE4OTIsIDB4OWZjNjkzM2MsIDB4ZWRiMTA5OTQsIDB4M2JlYTI0N2UsIDB4OWUwYzg0OTksIDB4ZDE0NjcwNmIsCisJMHg2NDA4NWZhMiwgMHgyMTA2NGI0ZSwgMHg3NThkNjVjOSwgMHg3OTNkZmE0NiwgMHhlOGJjN2Q5MSwgMHg5ODE5YzMwOCwKKwkweGJkYmFlNDdjLCAweDcyMGM4NDA5LCAweDgyNjZmNmQzLCAweDdmZTkyZmJmLCAweGM2MzdiNzNmLCAweDc5Yzg3NDkxLAorCTB4ZTEzMWEyODUsIDB4YmM5YTRhZmEsIDB4ODc3YmZhNDgsIDB4MTQ5YmJlYWEsIDB4NDhkZGE2NzUsIDB4ZmQ1MWZiZmIsCisJMHg5MDg1YjcyMCwgMHg0Njc4YzMxZiwgMHg0MGNiYTk0MiwgMHg3OGI4ZThiMiwgMHhmZDJlNmY1ZCwgMHhhZjBlM2EzZiwKKwkweDI5NWJlOGNkLCAweDFjMWEyMjEwLCAweDI0MjQ0NGIxLCAweGEwNDgyMzI2LCAweDY3OWZiZTlkLCAweDQ5ZDdlZDNjLAorCTB4YWEzNmE3MDgsIDB4NDllNzRhYzgsIDB4MDg5NmI0YzgsIDB4ODA4OTcyZjUsIDB4NzZjZDg4NzgsIDB4NzhlOTdiMjUsCisJMHhlMjJlN2Q1NywgMHgyMjBkNTdiYywgMHgyN2Q2OWRhNCwgMHg2ODRlZDM5MiwgMHg2MWM0OTUzYSwgMHgyMzJkYzdiZCwKKwkweGQ1N2U0MjA2LCAweDA3MTIzZmFlLCAweDE5OWIxYjg1LCAweGRjMTU1ZTI0LCAweDBlMjEwZjA2LCAweGM3YWZjNTEzLAorCTB4OGYyYWU5OGMsIDB4YzRjOWE3OWQsIDB4YWIyMTBkNzEsIDB4NTc0YzBlM2QsIDB4ZmE2MzQ2NzksIDB4ZGIyN2QwZDgsCisJMHhmOWQwMDY3MywgMHhlOWQ4MzIwYywgMHg2MzgzNDg0OCwgMHgxMTkxZGRhNiwgMHgyZGM3Mjc4NiwgMHgwOTM4ZTczMCwKKwkweGFlMjkyNmM5LCAweDJmNWE1NGM0LCAweDRkYzg0MGQxLCAweGYzNDJkYzg0LCAweDE5MDgyMzc1LCAweDUwODRlYzQ5LAorCTB4YmM5MzNkZmMsIDB4MDE5ZGNhMmMsIDB4NDVlNjA3NzksIDB4N2NjMzcxMDMsIDB4MmUwMzMyNjMsIDB4YzYyZGUyOTEsCisJMHgxYzk1Y2Y2OSwgMHgxYmY4ZWZlMSwgMHg3ODVmZGY4MCwgMHhjMWQ2MTUyYywgMHhlZmNjMWI3ZCwgMHhmMGVjZTIxOSwKKwkweDQ2ZGQ5ZTAyLCAweDdmNWEyNmU3LCAweDVlNGNlY2E1LCAweDQ2OGFlMTRhLCAweGFkODMyZWRhLCAweDFlMTA5NGJiLAorCTB4MWZjMDRjZGYsIDB4YzljYzhmZWQsIDB4MzBkN2FjZDUsIDB4YjQyMjQ3MTgsIDB4ZWIwNWRjNzMsIDB4NzViMjcxNjQsCisJMHgxNTc0MDk1YSwgMHhmMmU2MWQ2MSwgMHg3NzY1NTg3NSwgMHgzOGZkMTlkOSwgMHgxMWZhMjQ0OSwgMHhiMWZhNWFlZCwKKwkweDhmZTk2ODY0LCAweGJhOWZiMTdlLCAweGJmNjllNzllLCAweDNiZWQ0MjRkLCAweGJkM2NlOTUzLCAweDRkY2UwYzRiLAorCTB4YTE2MGRiZjQsIDB4MGFmODAwNTEsIDB4ODBjNDI1YmMsIDB4NDFmOTJhZmQsIDB4NjNhMDUyNjUsIDB4MTc5ZTFhYjQsCisJMHhmNmY3ZTljYiwgMHhlZmNmNzMwZSwgMHg1MmUyMDYyZCwgMHgyYTUzNzJlOCwgMHhjZWM0Nzc3YywgMHg2NjI2ZTNhMCwKKwkweDZiNGNlYzQ3LCAweGU5ODdmMWNmLCAweGM5MjVkOTI0LCAweDRjMGVlZjQwLCAweGFjNDcwNDFiLCAweDQ3N2NlMzAwLAorCTB4OWMwNDliMjQsIDB4ZjZhNDcyN2YsIDB4MDhlZGQzZmYsIDB4Mzc3YWUxZjEsIDB4ZGE1NDc1ZjAsIDB4M2QyMDNjNTEsCisJMHg0NjhiMWY3OSwgMHgzNDUwODgzYywgMHgxN2U3MGMzOSwgMHhhZDE3Y2YxYywgMHg0YTQzNGY0NSwgMHg1ODY4ZTM0OCwKKwkweDg3NWY5YTVmLCAweDc5YTY2M2Y0LCAweGIwOWJlNjJiLCAweDNmY2ExZWRjLCAweGFjYzllNThiLCAweGJhNWU1ZDNlLAorCTB4NTVlM2JkMTgsIDB4NmVkYTE3NTksIDB4NDI5MWMyMDMsIDB4Mzg0NDVlNzAsIDB4OWJiZjUwOTYsIDB4OTQyMDNmMzAsCisJMHgxZmQ2MjVmZiwgMHhiN2Y3ZWFjYSwgMHhjZWVkMjUxZiwgMHhmOWMyOWUwZCwgMHgwMDNiMmViZiwgMHhkNmRiYzI5ZiwKKwkweDJlOTRhZGMwLCAweDdjMTA2ZTBlLCAweGVjMGY5YTI2LCAweDc1ZmU0MThjLCAweDlmMGNmZDdlLCAweGQ3NjdlMjg5LAorCTB4ZWEwYjkzMzgsIDB4ODM5OGRmOWYsIDB4ZWZlZGJjZjksIDB4NWU1YTI0ZGIsIDB4MjA5NDVkYjUsIDB4ZDY3OWQ4NmYsCisJMHg1YmYxNDFkNiwgMHhmYzdmNmE2MywgMHhiODNkZmE2NiwgMHg2MDJmMjQ1ZCwgMHg5ZjcxZDM3NywgMHg0OGI0ZTI5ZCwKKwkweDkyZjk2MzNlLCAweGRhYWQ5NjI4LCAweGMwMWU2YmIwLCAweDkxMzM2YjJkLCAweGVhYTcwYTI4LCAweDZmM2JkMmNkLAorCTB4MDNkMmY5YTYsIDB4NTUyYTgxMzIsIDB4ODM4Y2VhOWIsIDB4NGY4OTdlNjksIDB4OGFmYzgxNjgsIDB4M2Y2MDFmOWQsCisJMHgwY2E0YjlkZCwgMHhlMDM5ZjdmNiwgMHg3NTJmOTQ1YiwgMHhlZTkzZGFkYiwgMHg3ZGNiZGZhNiwgMHg3ZWEwMGE1YiwKKwkweDA5YzE2NmY5LCAweDdlYmU1YzRiLCAweGJmMDA4N2Q3LCAweDIxMWU1NWJjLCAweGNkMTVmODUyLCAweGRhYTFjNDMxLAorCTB4MTdkYjc5MmYsIDB4YWRlMzA5ZGYsIDB4OTQyNjQ3N2EsIDB4YWJiMjkxZWQsIDB4MTg5MTE5MGYsIDB4ZTAyMzQ2YTQsCisJMHgxM2QzNmFiNSwgMHhlNzliZTA0NiwgMHgxZmIwMDczYywgMHgyZjU1OWYwNSwgMHhiYjY4N2VkMywgMHgyNzA0ZDdlYSwKKwkweGMwZGFhZDRjLCAweDM3ODVjZGY4LCAweDY4YmNlNmEzLCAweDE5ZDU3OTgxLCAweDM3ZmI0MTQ3LCAweGJkNDIzNTFmLAorCTB4ZWJmMTVmNTIsIDB4ZGYxODBlNTEsIDB4OGMwMTYzMDYsIDB4NjMwNmZkNzMsIDB4NTY2ZjhhODksIDB4MzM1NmZmMzQsCisJMHhlOTRkNTNhZSwgMHhiZDE5ZGQwMywgMHhjZTM5ZTdhZiwgMHgzOTdjOTViNywgMHhkZjQ4NDAxNSwgMHg0MzM4Y2Y5MiwKKwkweDMzOWU4N2M1LCAweDU3ZmQyMWM0LCAweDExYzQ4YjM0LCAweGRmNzgxZjgxLCAweDg3NjBmYmU3LCAweGJlMDNmMTk1LAorCTB4YzBlZDRiNWUsIDB4NzVlYmMyMWEsIDB4NGZkN2NlYzksIDB4ODhjZDY2MGEsIDB4ZTcxZWU3YzAsIDB4Y2I5MWEzZjIsCisJMHg3ZTQxMjc4ZiwgMHgyZTY5ZjRkMCwgMHhmOTcxZDYzZiwgMHhlMjcxZTRkMSwgMHg5MzNkNjdmNywgMHg3MWVmNWQzMCwKKwkweDY3YmNmYTYxLCAweDRmM2VhNjFhLCAweGMxN2JkNjExLCAweDhkZDMwNzMzLCAweDdmN2UzNzFlLCAweDY5ODY1M2M5LAorCTB4YmYxNmE3YjMsIDB4OGU1OWUyYmYsIDB4MTc4ZjY2ZTksIDB4NTllNmJmYmYsIDB4YTc4YjY5ODMsIDB4OWVhZGQzMTEsCisJMHgzZDViNGMyNiwgMHhiYWY3YWMzZSwgMHgzNmQzMTlhNywgMHhmZjdlMGI0ZiwgMHg1MzBkYTdiNSwgMHhlOTgwMjdiZiwKKwkweDlhNWY1ODRlLCAweDk4ZWQzYzA2LCAweGMzMWNmNmVlLCAweDAzYTdhZjc0LCAweDljZjdlZGRiLCAweGM3MmQ3NGMxLAorCTB4ZTQ5YjJkYmIsIDB4MzY2ZjE0NDgsIDB4MTgzOTQxMTcsIDB4OTFjYWU4NWYsIDB4ODhiZTNlNjksIDB4N2FlNjkzZTUsCisJMHg5ZjM0OGM3MywgMHg4YTc5YTZlNCwgMHg4MTk1YzFjNywgMHgwZmNkMTMxYywgMHgyOWU1NjVhZSwgMHg2NmI5MjQzZiwKKwkweGIyZjE0ZjlhLCAweGFlYjViNGYyLCAweDRmOWEyOGRjLCAweGEzZTU2NDZiLCAweGEzNzM3YmQ2LCAweDhmOTQ3ZTY5LAorCTB4MzliNzVmOTUsIDB4ZjM0MzFiOTAsIDB4ZjJiMGI1ZDcsIDB4Njc5MjdlYjEsIDB4MDFiMWY5YTEsIDB4ZDA3ZjFmOTYsCisJMHhmOWE1Njc5NSwgMHg5ZjJjZWRmMSwgMHhjZjM3YTFmNSwgMHgxZDU5ZjM0NiwgMHg1ZDRkZmRhYywgMHg5YTU4YmM4MSwKKwkweGNhYzgyOWJmLCAweGYyNGFiOTZmLCAweDJlNDAwM2VkLCAweGI1Y2Y5ODBiLCAweGQxYzdlNGU0LCAweGU1OWRhZTdjLAorCTB4NGIxNjg2MGIsIDB4YjdmNDA4OGUsIDB4MDg1OGVlNTMsIDB4YjA4NjdjMjIsIDB4N2U1MTI1ZDEsIDB4ZjFkOGQzYjMsCisJMHg2NDdkMTUxMCwgMHg0YmFhZjBhMSwgMHgyMDMzZmNhMiwgMHhmZTUwNDU5MywgMHg5NjNhZjBiMCwgMHgxOTY0OGMwNywKKwkweGJjMmEzZjk0LCAweDY1YmJlNThkLCAweDVjZmY5NjA3LCAweDQ2ZjJjMDM4LCAweDg3ZmY5NjA3LCAweDdiZjMwODcwLAorCTB4ZWY5NjE3NjUsIDB4ZjJjNGZlMTAsIDB4ZmY5NjE3NDYsIDB4Zjk4MTM4NWUsIDB4Y2IxYmIyZmQsIDB4OTYyZTg1M2IsCisJMHhmY2IxYmEzNywgMHg1NzUzZTk0OSwgMHhkZjJmZWQzZSwgMHhkYzJlOWVlMCwgMHg1ZGRiNzIwOCwgMHg2YTU5NzI4NiwKKwkweDU5N2UwNjQ5LCAweDA0ZmZmOWNmLCAweGFmMmQwNjQwLCAweDM5NDQ2NDFmLCAweGFjZjNmM2I4LCAweGQzODE0NTE3LAorCTB4OTdjODAwZjYsIDB4MDVmYTA0YmMsIDB4NDg1YjMzODUsIDB4YzI4MjdkMDQsIDB4NzM4NmZiMTEsIDB4MzQ5MzE3Y2IsCisJMHhhMmY5NmU3MCwgMHgyMGYzODE0YywgMHgxZmVhODljMiwgMHhkYzVmOWQ5YywgMHgxN2NmMWRhNCwgMHgxMjljMGFlNSwKKwkweDdmYjU5NzljLCAweGNiZTViYWYzLCAweGJlNzhlZDZjLCAweGQ0ZTA1NGFjLCAweGZlYjg5YzIwLCAweDRmMjAyNzhkLAorCTB4YzgwOWMwZDQsIDB4ZTU5YzBhYTUsIDB4N2ZiMTI3MDgsIDB4MjcxOTcxZTMsIDB4OGNiOGUwNmIsIDB4NzUzODE0NGIsCisJMHhmZjUwNjcwOCwgMHgzNzhjMDRlMCwgMHhhYzYzYzc2YiwgMHg4NjNjZTA1MCwgMHhiZmQ2MWU3OCwgMHg1MzRjYjk3OSwKKwkweDU1MzFlM2I0LCAweGMyOWU3MDI5LCAweDBmZjZhNGYxLCAweDE2YWI2ZWNlLCAweDIxYWRiYjNmLCAweDM4NDdhY2ZjLAorCTB4YWYzN2ZiMjMsIDB4M2YxNjliNWMsIDB4N2UxMGI2YjksIDB4NmI5YzIxMzYsIDB4Yjc2NzA3ZmIsIDB4ZGQ5ZjhiNGQsCisJMHg1ZTdlMTBiNiwgMHhlOThjZmM0MywgMHg2MzcyYmNkZiwgMHg4ZGM5ZjhiNSwgMHgwZGU3ZTEwZCwgMHhmZWI4Y2YxYywKKwkweGEyNmY2NzhkLCAweDEzN2IzZjE2LCAweDIwMDlmODQzLCAweDM3ZmIxYjljLCAweDJkMjRmYzllLCAweDQyOTNmMjdlLAorCTB4ZTEwNzc5ZjgsIDB4OWMxZmVlNGMsIDB4ZmM1YTQ5YmQsIDB4ZTEwYTRkZWMsIDB4NjcwODBmZTcsIDB4OTVlNmZmNGEsCisJMHg5ZjhiNTAzZiwgMHhmYzIxODFmYywgMHg3MjcwODA3YywgMHhhOTRjY2RkYywgMHhiZGFjNzBhNCwgMHg0YzNmZDljMywKKwkweGMzZmQ5ZjhiLCAweDg5MzlmODQyLCAweDM4NTJhNjcwLCAweDI5YzM3ZGU5LCAweGE3ZTJkMTQ4LCAweDlmODQyNTIwLAorCTB4YjZlNzA4ZjMsIDB4OWZkOWMxZmUsIDB4ZmVjZmM1YTIsIDB4YWU3ZTEwOTQsIDB4ZmEzYjljMjAsIDB4ZTE4MmFmMzcsCisJMHgwYzE0ZmM1YSwgMHg1NWI5Zjg2NywgMHg4NjcyODcxYSwgMHhkODI3NGVjYSwgMHg5YTE5ZGZlNywgMHhjMTMyMTJlMywKKwkweGQxNzk2MjRlLCAweGY3YTAyNGVlLCAweDQzM2U4YTg4LCAweGFkMjI1ZGRhLCAweDM3MWNkOTZmLCAweGQ2YTIzMWZlLAorCTB4MDY4ZDcyNmIsIDB4YWE1NmNmNGEsIDB4OWFmNWE5ZTUsIDB4MWFkMTQ5ZDgsIDB4MTVjZTJhM2QsIDB4NGMyN2M5YWYsCisJMHg5ZmE5YWMxYiwgMHgyOWE2OTQ1OCwgMHgzYWU3MzgxZiwgMHhmNzIwZjk0ZCwgMHg0ODdlNGQ3OCwgMHhmYTlhNGRkOSwKKwkweDM1NzM2YWMzLCAweDZmY2JlMWY5LCAweGY1NGZkNGQ3LCAweGQzZTRkNGNlLCAweGE5YWZkY2Q3LCAweDgxNzFiMjNmLAorCTB4YTY5YWZjYTYsIDB4YjVmOTRkNzIsIDB4ZmM5YWE1YmUsIDB4ZDdkZmNkZjUsIDB4YjJkMzFmZDQsIDB4NDM3ZTUzNDIsCisJMHhmMjlhNjNkYiwgMHgzNTI3ODE3MSwgMHg5ZTA3MDlmOSwgMHhiMWJmZDRkNSwgMHhmOTRkMDVmZCwgMHg2OGFmNjNjNCwKKwkweDZjNzcyN2NhLCAweDNlNmZlNGQ1LCAweGZkNGQ2YmYzLCAweDlhZGRjMTI5LCAweGJkOWZhZGZjLCAweDQzOWZhOWFiLAorCTB4NmZhYjUzZmUsIDB4ZDRkMDNmOWIsIDB4YTEzZjZhOWYsIDB4ZjI0ZWZmMjksIDB4NTUzZDNhMjcsIDB4Y2NhZjFmNmIsCisJMHgzMmFmY2MyMSwgMHgwMWFmZDk4OCwgMHhjNmYzMTFhYiwgMHhhNzY2MTZjMSwgMHgyNzFjNGI1OCwgMHg3NzE4ZmQyOSwKKwkweGEwMGM3NDJmLCAweDAzMzQwM2Y0LCAweGUwY2U1MTc2LCAweGU4M2E2YmIyLCAweGU0ZGRlZmY3LCAweGJmNGVjNmJlLAorCTB4YmVlOGNmN2YsIDB4YmY0MTFlYzEsIDB4OTAyNmY0YTEsIDB4MDYxZDQ4NjQsIDB4OGZlNWY1NDgsIDB4NzNkZThjY2EsCisJMHhkNTFkNWM4NywgMHgxOGQ3ZGI0OSwgMHg2OGUyYTM4MiwgMHhlNzMxMjNmZSwgMHhmOWM3YTAzZSwgMHg4M2VlMDMwNiwKKwkweDQyZDQ5MTY4LCAweDQxMTM2OGJkLCAweGQ0ZDFlOWJiLCAweGFhYmQxN2FjLCAweDE4NjZiMGZkLCAweDMwODQzM2Q1LAorCTB4M2JiMjM1ZGMsIDB4YzMyOGY1MTksIDB4OWJkMDNhZjgsIDB4NzlkMTg3ZWEsIDB4ZDE2NDI2MGQsIDB4YmNiYjcxOGEsCisJMHg2MWZiNjgyMywgMHg4ZmUwYzkyNSwgMHgzZjk5MTkzMCwgMHg5MWJmZDQyNCwgMHhmZDgxOWZmNiwgMHg2YmZlODEyZiwKKwkweDk0ZGZlOTdhLCAweGJmZDM0OTM2LCAweGQzNGNhNTM5LCAweGZiNDhkOWJmLCAweDkwZjIxM2I3LCAweGJmZGUyNmUxLAorCTB4Y2IzNmZkMTksIDB4ZmVjNjRjNTYsIDB4ZDg2NTI5NGQsIDB4NmE0NmEzZmYsIDB4OGZmYmE5NzcsIDB4ODhmZmY1MGUsCisJMHgzMWViZjY4MSwgMHhjN2I5YmIzMCwgMHhkMjZlZDNmYywgMHg1Y2E1M2ZjZSwgMHg5YjIzN2YzYiwgMHgyZTQzNGFmZiwKKwkweGU3MWEzZmVmLCAweDBlNDU2YWJmLCAweDM5NGE3ZjliLCAweGMxODliZjliLCAweDBiNmZmNTBkLCAweGZhMDFiZmUxLAorCTB4ZmQyZjY5ZmYsIDB4YjViM2QyOWIsIDB4YTk1ZTFmZjMsIDB4ZjU4OWJmOWQsIDB4NzZlMTk0ZmYsIDB4ZmIwNWJmZGUsCisJMHg2ZGM1N2E3ZiwgMHgyYmMzZmU2YywgMHhjOWEzN2ZiMSwgMHgzMWZhMDRlZCwgMHhmNWFlODkwZSwgMHg1MGM5ZmVkMSwKKwkweDA0MGQyNTZhLCAweDQwZmRhMTcyLCAweGZkMWUzYTNhLCAweGQyMWE3NzA4LCAweDhiZGYxYzcwLCAweDI1NzZmNDY2LAorCTB4ZjIxYmQyOWEsIDB4YzNiMzJmMzMsIDB4NTI3Mzk0N2QsIDB4ZDM5YWFhYmIsIDB4MWNlNmM1N2EsIDB4MmMzZGYwMjMsCisJMHgzMTY0MjI0ZiwgMHgzNmEyZWExZiwgMHgzYzliZTkxMSwgMHhhNDhkZjI2ZCwgMHgyNmQwYmRlMywgMHhlOGJmMjE3YSwKKwkweGUwM2UyOWU5LCAweDMyMjYzNWFmLCAweDQ5ZGEwOGJmLCAweDNmZGYwMDI0LCAweDE3OThkOWZlLCAweGE3ZDJmM2Q0LAorCTB4NTNlNTFiOGIsIDB4ZGU0NWZjOTEsIDB4OTZiYTMyNWMsIDB4MTAwMmVmOGUsIDB4OWM3ZjJhODEsIDB4MTg2MDcxZGEsCisJMHgxZWVkNDg3ZiwgMHgxMzlmZWQ0MiwgMHgyM2VmZWIzMiwgMHhiZTQxZWY2YSwgMHg2ODdiZGE4MywgMHhlNjNhOTMzOCwKKwkweGRlYmFmMzU3LCAweDVmYzc0MTFmLCAweDBiOWY5NDQ0LCAweDZlMmY3OWU3LCAweDYyNGYwYTI5LCAweDVhZjhmN2ZiLAorCTB4MzFlYjA3YzEsIDB4NDUwYzc5N2YsIDB4YzUzYzc4N2UsIDB4YmU0ZDA0ZGUsIDB4MDdlYWM0YzYsIDB4MmY3YzEzNmYsCisJMHgwZGMzMDgwOCwgMHhlMWMxOTlmOCwgMHhjZDJmMTgxMSwgMHgzNmIzYjFjZiwgMHhiMWRlNzc0NywgMHg3ZGQxYjA1ZiwKKwkweDVkMDg2NmI0LCAweDU5OWMzMDhiLCAweGE0MGYyNWM0LCAweDU2NWVlZmVkLCAweGE3NmI4MzJjLCAweDgxODYxMDVkLAorCTB4YTE2NmIwOWYsIDB4Mzc2ODAyNGMsIDB4MDY0OTEzN2IsIDB4ZGUzYTBlMjcsIDB4ZmUwY2VkZmIsIDB4NTI3Yzk3MGMsCisJMHgyMzliNDdlZCwgMHg3NDQ1NWQ5YiwgMHg0NThhNzMzYywgMHg2OWFjZmYxYywgMHhlZDNmZjJkYSwgMHhjNjE5NzE4YywKKwkweDUzY2Q3NGQyLCAweDQ1ZGRjZmQ4LCAweGU3N2JmMmRhLCAweGI5ZjdmMzY4LCAweDU3MmE3OWI1LCAweDBmYWI5MDY1LAorCTB4NTNiZmU5OTQsIDB4ZGY4MTI0YjQsIDB4MDAxYmY0MzEsIDB4ZTM5MDdjZTMsIDB4ZDk1YWMxZTEsIDB4NmE1NzU5YWIsCisJMHg3Mjk1MWI3NiwgMHgwOWI4ODQ3MCwgMHg4YmRiMGJjZSwgMHg1ZmNmZWIzZCwgMHg3YjE3Y2RhZSwgMHg2Yjg1ZjliNSwKKwkweGRkMzlmMDc0LCAweDdmZWJlMjljLCAweGE2ODNlODFjLCAweDI4M2U4MWE3LCAweGZhNzI0ZjNlLCAweDJkNTVmMzA4LAorCTB4OWExM2RjN2QsIDB4NjUwZmEzMDYsIDB4YjYyNGE3MWUsIDB4MzNkNmE3MDQsIDB4MThkYzU4ZmEsIDB4OGExZTk5MTMsCisJMHg1MmUwZjQ0MywgMHgwZjQyOTdkMywgMHhmYzNkMzhmMywgMHg2OTQzZDM5OSwgMHhlZWFlOTY5MywgMHhjOWQ1YmUyMywKKwkweDZiMDNmZGI0LCAweDFkM2FlMTc3LCAweDNkMTk4YTExLCAweDg3YTE0MGZjLCAweGI4M2QwZDBlLCAweGQ3ZTgzZDM5LAorCTB4ODdhNzFlNmYsIDB4N2EzMDhmNzksIDB4MDc2N2FmZDAsIDB4YTY4ZTg3YTcsIDB4ZWI0OTMyY2IsIDB4MWQ3NGFlYjksCisJMHgwZWJhNzkzNCwgMHhhM2I3NzViYSwgMHg0N2FlOGExZiwgMHgxMDU4N2E0NCwgMHgzODlkMzc5YSwgMHg2NWU0MmZjZCwKKwkweGQzOGJkNjNkLCAweDAxYTc5NjAzLCAweDA5ZTIwOWRhLCAweGFjZjdhN2RiLCAweDI2ODRmOTRmLCAweDc5MTRkYTVmLAorCTB4MzZkYTZiZmQsIDB4ZmFhOTNkYWMsIDB4ZjJmMmQ1NWUsIDB4YmI3ZmI1NWEsIDB4MjY4Yjc5YTIsIDB4YTZmN2M0YmYsCisJMHhkMzY5N2VhNiwgMHg3MTdlNGQyZSwgMHhmYTlhM2JlMywgMHhkMjFjZDcwYiwgMHg3ZmJkOGJlNCwgMHhiZjlmZDRkNCwKKwkweGZlNTM1M2JjLCAweDRkNTllZDYwLCAweDE3NjUwM2Y5LCAweGRjZmJmOTM1LCAweGJmZDRkMzdmLCAweDEzZjA4ZTc3LAorCTB4YTJlZWZlNzUsIDB4ZWJhODlmYTgsIDB4YTcxNjlhY2YsIDB4MGQ3MGNmYzksIDB4ZWMzN2Q0ZDIsIDB4YTAyZWY2YmMsCisJMHg4YmVmODNjNywgMHg0ZjhmZjQwNCwgMHhmZmQxYTc5ZCwgMHg3NjUzYTlmOSwgMHgxZTkzOWQ0MiwgMHg1MzgzZWUwNywKKwkweDllOThkMTllLCAweDlmNzEzOGYxLCAweGMyNGNmMzljLCAweDFlZGI0MmY0LCAweDJhMTVjODBiLCAweGM4ZTA0YjQ3LAorCTB4OTZlNTc0YTYsIDB4MjBkOTM1YmEsIDB4ZGZjYTA5ZDcsIDB4ZDQ2Zjk1OGEsIDB4YjIxMjg3NzksIDB4OGE2Mzk0MTQsCisJMHgyMzI2YzJlZiwgMHg0NDIwNGMwOSwgMHhjN2M0ZTEwMCwgMHhlNTU1MTQxNSwgMHgzNzk0N2QxZCwgMHhkMDkxNDE1MSwKKwkweDIzYjBiY2IzLCAweDI3OWFmN2YyLCAweDIzZGI4NzhiLCAweGY3ODQ3ZjljLCAweDdhMDIxOTM1LCAweGU3MmY3NzUyLAorCTB4MjkwMjk1MjQsIDB4NjQyNzdmNTIsIDB4YWQ4MWYyMDUsIDB4MzRhOTRmNWMsIDB4Yjk1MTdlMzIsIDB4YjEyZTUwNzUsCisJMHhhYTMwM2U0MSwgMHg2YmZhYWJmNiwgMHgyMDZjOWJhMSwgMHg2NmJhNDlkMCwgMHg1ZDM2OTczZiwgMHgwNGY3ZTFhZiwKKwkweDQwODljZmJjLCAweGRmMzQxMzZmLCAweGQ2NmY5YTJiLCAweDI1ZGFlYmI0LCAweDgxYWJiOGUyLCAweGZkYjk1MDk3LAorCTB4NTI3YTI5MmEsIDB4ZDgxNTNlMDQsIDB4MGM2YjMyOTMsIDB4MTRmNWQzOGMsIDB4NTExMmRiZTYsIDB4MzRmMmVjOGYsCisJMHhjN2YzODVhZiwgMHg0YzE2OWU3MywgMHgzMGRhNzhjZiwgMHhhYzA5ZTUzZCwgMHg5M2MwNzM4NSwgMHgxZTk4MDM5ZSwKKwkweGRhNjNiNGY3LCAweGU5ODYzOWUxLCAweDRjMGU5ZTQ3LCAweGMxOWNmNDNmLCAweDIwOWU0ZmY0LCAweDlmM2NjN2E2LAorCTB4NDNjNDdhNjEsIDB4MGU3MDAyN2UsIDB4ZmU5OGNjN2IsIDB4YjRjNzYzYzEsIDB4ZTk4YzkzZGQsIDB4ZmIwZjhmMDUsCisJMHg1ZjVkZjY1MSwgMHhjYjg2Nzc3NCwgMHg3ZjQwNzNlZCwgMHhiYjZjZTgxMSwgMHhjZDZlYWM3OCwgMHhiZDlkMzBkMCwKKwkweGE0MjNmMmI5LCAweDg1Y2YwNTMzLCAweDBmNGUyNjRkLCAweDA4N2ExYTQ5LCAweDIzNzdlZDgwLCAweGU1MWY0YmQwLAorCTB4YzNhNzMyNGQsIDB4MmU0N2RhZGUsIDB4YmZlMTc5YWYsIDB4N2NhZWRlODcsIDB4ZDMwYjdhNGIsIDB4M2QxZDEwZDMsCisJMHg0ZjQ1ZjdhNSwgMHhlOWU5YWExZiwgMHhlNGNlYzE4YSwgMHgxZmE3YTcyMCwgMHg3ZDZiNzNmMywgMHgzYjEyNTFiZiwKKwkweDc3ZTkwY2E3LCAweDgwMGNkYmFlLCAweGRjZmNhNWFhLCAweDk4Njk5MDg0LCAweDVlZmJjNGJmLCAweGEzYjVjMTQ5LAorCTB4MGQxYmU4MWUsIDB4ZThkMmViNzIsIDB4NzM4MjhmYmYsIDB4ZThjNzRiODcsIDB4M2VmNmE3ZTIsIDB4ZjQ5ZDNkM2YsCisJMHhkYTE3Nzc4ZSwgMHhiYTNlMjU0MywgMHhjNjExMDllOCwgMHgxYWYwY2QxYiwgMHhjOGQzMjA2NSwgMHg0NjFhNDI3OCwKKwkweDkwNWNlNGJlLCAweGM0ODk3OTgxLCAweDczOWY3YjQzLCAweDNhZjM4NDQ2LCAweGMwNmI3NTQyLCAweDVkNzg1ZjZmLAorCTB4MTYzMmJkNjksIDB4ZjY3YTlkZTAsIDB4NWU5MDU5MWYsIDB4ZjQ3NWZhZTEsIDB4N2NmNTExMWUsIDB4MDlkMTc4MTIsCisJMHgyNWM5MGRmOCwgMHhmYzE5MzM5MywgMHg0NjkxYzFmMywgMHg2NDA5ZWEzYiwgMHhkZTdmMTZiYSwgMHg2YmY4MzVkYiwKKwkweGNmY2U1NTQ4LCAweDdmMTE5MzFiLCAweDFhOGNhZTIzLCAweGY1ZmMwZmQ0LCAweGMyZmJkZmM1LCAweGY3OTgwMmU3LAorCTB4ZmIzZTAzN2YsIDB4ZjE3ZDhmZTIsIDB4YmM3MmUyNDUsIDB4ZGZlNzQ2ZDYsIDB4ZjhjYzczYmQsIDB4MDdjMDFjYzcsCisJMHhjYWRmMWFiZiwgMHgzYzdlOWM3OSwgMHhiNWY0OTJmOSwgMHg0OTNiYjhlOCwgMHgxNGY2ZTNhMSwgMHgyNGQ4NWI4OCwKKwkweGE1ZmUxMWRhLCAweDYxNjI2YmQ2LCAweGZhNzA0MjVkLCAweGVkZTE0ZjU4LCAweGJkODBhNzNmLCAweDBiNTUzZTdmLAorCTB4ZWYwNzRiMmYsIDB4NmQxNzgxZDIsIDB4NGQyZDc3NjAsIDB4MzI3MGQ4NWUsIDB4NjkyODNhYzIsIDB4ODM1ZDRiNTUsCisJMHhiNjg3YWQ0NSwgMHgxYTk3ZjM2OSwgMHgzODJkNjk4NSwgMHhlY2VjNDcyZSwgMHg2YTI3MjAzMSwgMHg1ZWRmMTgxYiwKKwkweDY3MDJhOThlLCAweGY2MDk3MjY5LCAweDNkMzlhZTczLCAweDNlN2JkOTk2LCAweGM3MzYwZmM2LCAweGU3MzhiZjIxLAorCTB4ZmZmYWMzMjksIDB4MDZmNGYxZWMsIDB4MjEwZjE5NDcsIDB4MTk4NGU0YWQsIDB4NGIyZDMxZjgsIDB4YWY3ZWJkZWYsCisJMHhjNWZkMmNmNCwgMHg3ZWRkZTc4OCwgMHg4OWU4MGFmOSwgMHg5N2RmZmE2NiwgMHgwOTEwNzc2MCwgMHg5YWRjMGFmMywKKwkweGJhNmJkMTE2LCAweGQ2NmZiZTAxLCAweDM5ZGI0N2Y0LCAweDJmZTIzMzk0LCAweGRmNmFiZWQzLCAweDQyOTRlNDQ4LAorCTB4ZDQ1ZTU0YjcsIDB4ZTc4MGJkODMsIDB4ZDQxYTRiOWIsIDB4Y2I1NTU5N2EsIDB4OWFmOTM1NzcsIDB4ZDQxYTQ3YjYsCisJMHhmYzA1NWM3YSwgMHg1MjVmZjI4MywgMHgzNzQwNDgyYiwgMHhiYThjOWM5NSwgMHg4MTFhY2IyNSwgMHg4MjE4YWY4ZSwKKwkweDA4OGY4MDRmLCAweGI5OTU1ZWFjLCAweDlmYTZlOGMzLCAweDc1YjJiN2NlLCAweGU3N2M2ZGViLCAweDg4NTRlNjNjLAorCTB4MzczMzI4M2IsIDB4NTk3MjM5ZTIsIDB4MjBmOWI1Y2IsIDB4YWViN2NlNjcsIDB4NWJmOTAyNGMsIDB4NWVmYTVlMjEsCisJMHhiZmY2ODQ1MSwgMHg1ZjJlMDQ5NCwgMHhjZjU2YTBlNCwgMHgyODQxZjRlNywgMHhlOWJjZDU1YywgMHgxN2MyMTJjZiwKKwkweDk4MTk3N2NkLCAweGI3MGY0NjVmLCAweGJlOTFjYjhkLCAweGY5YmQ1M2YwLCAweDhlY2RjMTUwLCAweDZlYWE3ODllLAorCTB4MjM3NDY4YmIsIDB4Y2JmZmE0NWYsIDB4YzE0OWUzMGEsIDB4ZDQ1NGIxNWYsIDB4OTc3MWQxMjYsIDB4ZmZhMjc3MzcsCisJMHgxZGVjOGNlMiwgMHhlMGFmODNmNSwgMHg2N2U3M2Q5NywgMHhhMzE1M2U0OSwgMHhiNDk3OTc5YSwgMHgyNjBiM2Y0MywKKwkweGUzODg4ZWYxLCAweDFmMjgwZmRlLCAweDk5NWJmYjNmLCAweDU3MjIxZjAwLCAweDc0MmNhZDY5LCAweGM3YmI3MGNkLAorCTB4NjE1OTBjNDAsIDB4NmI0MTY3YmIsIDB4ZmJlMDIxNDUsIDB4ZDFkM2ViZWMsIDB4OGE0NDViZWUsIDB4YTQwZWI4NmMsCisJMHg5Y2VjMGIzMSwgMHg3MTgwYzRmMywgMHgxZmM5ZTc1NSwgMHhlYjU0MTM2YywgMHhlNDY0YjFmMCwgMHgzMDVjYTY3OCwKKwkweDEwMzRiYjg5LCAweGQ4MTA3YmJlLCAweGY1MzlhNjVmLCAweGY4NThlMmVkLCAweDkwNzYyOTJlLCAweDE1Y2EyNWYwLAorCTB4MTdmMTgwYjcsIDB4MmY3N2Q4NzMsIDB4ZmQwMWQ3MzEsIDB4NjM0YTdiNTIsIDB4NGE3YjUxYWYsIDB4OTRmNmE3OTMsCisJMHg2NjQyNWYyNiwgMHg0NTNjNDEyNiwgMHhmMTMyZDNjOSwgMHg0ZDI3ODgwOSwgMHg4ZWM5NDFmOSwgMHhiNTI1MmJlMywKKwkweGZkMWZhMGY1LCAweDE2ZTFmYjljLCAweDg0MzQ4OWQ4LCAweDM3YWE4N2NhLCAweGE2MmFjYjllLCAweDk4OTJlOWYzLAorCTB4MGY4OTRiZmYsIDB4YzU2NTQyNTgsIDB4NWU1ZTVhMjAsIDB4MmNiYTMzZTYsIDB4YTI3N2U3M2QsIDB4OTQzZGMyNzUsCisJMHgxNjNjMDNmMywgMHhkMWJmNzAwNywgMHg4ODZiZTJjNywgMHhhYWUyY2E0MywgMHhmM2VmNWE0ZiwgMHhiYTJhZDgxZiwKKwkweDhmNTA2Y2EyLCAweDliYzY1NzdlLCAweGFmZTdmNWZhLCAweDRmMjEyZjlmLCAweDliY2EzY2UyLCAweDU2MWM2MDY3LAorCTB4M2UwNzc4OGYsIDB4NzA1OWI5MWYsIDB4MjdlYzIyZjksIDB4ZjEzNDE2NTEsIDB4YzMzMjA5MmUsIDB4MWFkN2UyOWYsCisJMHgwZjVmY2JhZSwgMHg2YmRmOTU3OSwgMHgxYmZjYWVhMiwgMHg0NDAxOTdmMywgMHgyNThhNWZjMywgMHg5MTM5NzBmNywKKwkweGJmYzAxM2YxLCAweDdmNzEwNTIwLCAweGM5Zjg2MzdkLCAweDJmNWZlMDNkLCAweDg0NGZmOGRmLCAweGVmYmI1NDNmLAorCTB4ZmY4OWZjMjksIDB4ZTg4ZmYxZDQsIDB4NDhiY2ZlMzEsIDB4NzhkZWFiZjAsIDB4Nzc4ODc1ZjUsIDB4Y2ZkNWZmMmMsCisJMHhiN2VlODQ2YywgMHg5MjYzNTJiMywgMHhlNTdiYWU5MywgMHgxNzM2ZDVhNiwgMHg2YmM5MWRmMCwgMHhkNjcxN2Q4MywKKwkweDQ0OGI0ZTI3LCAweDc5OTdkZjBmLCAweDU5NzExZmRjLCAweGMyYmJmMDA0LCAweDczZmMyOTNmLCAweDRlZjhmY2FmLAorCTB4NmNhZWEzYjAsIDB4NGZlOGVkOTIsIDB4NGMwNTM2NmQsIDB4NWJhYjllOTQsIDB4YjE5MjE0OTcsIDB4Zjk2NGVmOTgsCisJMHhmZDAyMmY0NywgMHhjN2M5YjRkNywgMHhmZTVhNzRkNSwgMHg0MTI1OWZjYiwgMHg5NGE1MTA3YywgMHg0ODY0ODYyMSwKKwkweDU0OWY2ODAzLCAweDAwYjhmYzZmLCAweDEyMWE4ZGY0LCAweDZmYWFmZGM0LCAweDE2N2ZmZDA3LCAweGQ4YjBmMjhmLAorCTB4MWNiM2RiMTgsIDB4ZDA0OTM0MWQsIDB4NWE2YWZkOWUsIDB4YjQ1MTdjN2YsIDB4NjlkYjdhNDEsIDB4YjJkNDZmZTAsCisJMHhiZTkwYmY0NCwgMHgzYmI3MTk1ZCwgMHgwMGViNjQyYSwgMHhjOTEzYWJlNCwgMHgwYWFiZTA0NCwgMHhkOThmODg1ZSwKKwkweDdlNWYyYjFkLCAweDFkMjc2YzY2LCAweGRmYzZkNzU3LCAweGJlMTUwNGRhLCAweDUyZTk3YjE0LCAweGZjNWZjMmNiLAorCTB4MWYzYmQxZGEsIDB4YTNmNzQwYmYsIDB4ZTQ1NWJmNWEsIDB4ZGI4ZGEzOTQsIDB4NTY5NjdlNGIsIDB4YzQxYjAxY2EsCisJMHg5MDZlNTU3MywgMHhiOWZhNWU5ZCwgMHg1ZjE3ZDVmMiwgMHhkOWZjMTY3YSwgMHg0NzM5MzQ3ZiwgMHhhZjE1Zjg1MiwKKwkweDEzNzIzYmVlLCAweDkxNmM1N2NkLCAweDY5YjIxNDA3LCAweGYwYTQ4NDU4LCAweGZmZDBkNGZhLCAweGFmMGY4Zjk2LAorCTB4N2RiNmY5NDcsIDB4ZjYxOGM3NDYsIDB4ZTFmMTg3ZmQsIDB4YjJkOGE5NzUsIDB4ZjRjNjQ4Y2IsIDB4Y2I1ZTQ3YzQsCisJMHgyNTg3NjMyZSwgMHg3NGI0ZmFjMiwgMHhiN2ZlODAxNiwgMHgxYWJmZTVmMiwgMHhkZDlkZWY4MSwgMHhhOTgxOTAyOSwKKwkweDYxYjlmMDExLCAweDgwODdlYTFmLCAweGJlNGY1YzI3LCAweGQzZjVhMTVlLCAweGViYTFhZmQ1LCAweGJmNDY3MjAyLAorCTB4ODU3YWZhNWUsIDB4NWMwMGJmOWMsIDB4ZjRhMWIzODgsIDB4MjFhZmRhZmQsIDB4MjY0ZmVlMGUsIDB4ZWNhMWUwMjcsCisJMHgzMDZjODdiNSwgMHgyZDUyZDM5ZiwgMHg1NmU3ZjNhMywgMHgyYmJmMDEyNywgMHg3NjQ5YmQ5MywgMHhiMmY3ZDk0YywKKwkweGZhNDYxZmU3LCAweDcwZjQzZDJiLCAweGJhNTdmMzEyLCAweDc2NTAxOTA2LCAweDNjYzEwNzdhLCAweDFiYmZhZjE3LAorCTB4ZGM0MjU5ZTcsIDB4Y2Y2NTg3NDgsIDB4OWEzZTQ1ODksIDB4Njk5MTJhN2UsIDB4OTNlYzIyNWIsIDB4OWM5ZjdjNGIsCisJMHgyZTJlODE3ZSwgMHg0NTY5ZTc5ZCwgMHhlNDQxZmMyZSwgMHhlOGJiZTE3MiwgMHhjZjk4N2QwZiwgMHg5ODkwNmE4NSwKKwkweGQ2Y2NkNGZmLCAweGQwNmM4MGViLCAweGZkMTBkMWM4LCAweGU1MTQ3YzZlLCAweGFlNjFiOWM3LCAweDU2ZWU3MDgxLAorCTB4MjgxNzk2MTMsIDB4NTM0M2M0NDcsIDB4NjI3NWIyMDcsIDB4NTFkYjA3NzIsIDB4ZGYwNzkzYjksIDB4ZWNiYjdlYTEsCisJMHg2OWFiMWE4YSwgMHhlOTQ2NzI4NywgMHg5ZmVmMTk3ZiwgMHhmNDFhM2I4ZSwgMHg5MTQ5ZDNiNywgMHg0NmUxOTFlZCwKKwkweDNkNTAwZjg1LCAweGFhNjc0NTQzLCAweGZmZjZjZWZkLCAweGRmYjYwNmM2LCAweDliZWZmZDk1LCAweGZmY2EwZDMxLAorCTB4MjNlZDk4NzIsIDB4OTc3MjA3NjgsIDB4MTAzMDJiOGUsIDB4MTZjZDc3Y2IsIDB4NDg5ODNmOTAsIDB4ZGYzZWQyMjAsCisJMHhhZTdkZjMyOCwgMHgwYmQzZDcyZCwgMHhjNDI0YmYxZCwgMHhmYTA2ZThhYSwgMHg0MDc1Yzc4OSwgMHgzNGYyNWY3OSwKKwkweGEzZTJhZjZkLCAweGFkYWZkMDM1LCAweDFmNjU1YzI3LCAweDcwN2U3Mjk3LCAweGY1YzFmODFlLCAweGQ2NDA3ZTYxLAorCTB4NWUyYmY2MjcsIDB4YmRmNjUyYjQsIDB4NWZlYzJjZjQsIDB4MGViZDVmYmEsIDB4MTE3MmJmZDgsIDB4Y2Q5M2ZmY2MsCisJMHg0ZmRjOGU3YiwgMHgyZDI3ZWRmNywgMHhmMmQ1YmVjYSwgMHgyZGJlZmQ1NSwgMHhjNjMwZmFkYiwgMHhlZGY3ZWI5ZiwKKwkweDQ5NmI0MzI3LCAweGJmNGI3ZGM0LCAweDQzYjdkYzQ3LCAweGY4NDdmZTNiLCAweDI0Yzc4MmFhLCAweDJhYWY5NmEzLAorCTB4N2MzN2IyN2MsIDB4MTZlNGY5ZWEsIDB4ZDU3ODgxZDksIDB4M2JmYTQ5ZjMsIDB4ZDI3YWIyNGMsIDB4MGE4NzQyYTMsCisJMHg0N2ZmOTVmZCwgMHg0N2UwNzBkNSwgMHhlODU1M2EyMSwgMHgwYWE3NDQzMCwgMHhhZGU3ZWExZCwgMHhmY2JlYTNjNSwKKwkweDUyMmRmMDIzLCAweDUzN2EyOTdhLCAweDRhOTVmM2M2LCAweGE2MDM4YjNmLCAweGM5MGZmNmVkLCAweDUwYjk3YzQ0LAorCTB4ZmRjNjkxY2MsIDB4ZjNhODA2NDMsIDB4NDViZTVkM2UsIDB4Y2JhNWRmNTcsIDB4YmJlYWU5MTcsIDB4NGQ1YWY5NzUsCisJMHgzZGI2Y2FmZCwgMHgxMDc0ODI0NiwgMHg5NzEzZDRkMCwgMHgzMTM5M2JmZiwgMHhmYWRkMTIyMSwgMHhmNWExYmY5OCwKKwkweDM5ZWUxMWEyLCAweGQ4ODI1OGQ0LCAweGJjNDE1ZTVlLCAweGRjMTkxZjEwLCAweDUxYjllMjIxLCAweDNkNzFjNTM3LAorCTB4YTczNjM3ZjgsIDB4OGY5NGJjZmEsIDB4N2U2MjhlYWMsIDB4ZDA3YjZlODUsIDB4ZDVkMzRmMTYsIDB4NGMxZjJjNzEsCisJMHgxZjAzZDYzNCwgMHhhMzA3YmU1NCwgMHhiYmIxZGY5OCwgMHg1MzhiNjgyOCwgMHg3ZTlkNWJkOSwgMHg4Nzc4ZjkxMSwKKwkweDBkYmRmMjJmLCAweGRkNzA2OTJhLCAweGQ3Yjk3YTNiLCAweDc1OGY5Y2ExLCAweDYyYzZkYjQ3LCAweDNlMjlkMTdmLAorCTB4YTJhOWM3YTAsIDB4ZjgzOTY1MjUsIDB4Mjc0NTFhYTEsIDB4ZWE4YmVjZTgsIDB4NzljMWI1ZWUsIDB4ZmQzZmI3NTUsCisJMHhmYmY0MzlhZSwgMHgxNjQ0NzdlMiwgMHg0OTc1ZTM4ZSwgMHhkMDc2NTQ4MywgMHg5NzVkZTIxOSwgMHhmMDVjNDAyZCwKKwkweDg1OWZhNDVhLCAweDJkMTc2NjdlLCAweDNmNzkxYjVhLCAweDI1NzZmMzk0LCAweGUwNDY2NTk2LCAweDM5MGVkNGJiLAorCTB4NTFlZjNlYWUsIDB4ZDdhZDk0ZTAsIDB4ZTc0ZmY3N2QsIDB4ZWQxMWE2ZmIsIDB4ZGE4ZGYyZmYsIDB4OWZiNzM3NzIsCisJMHhmY2U0NjQ3ZiwgMHhjNzE5MWM2NywgMHhiZmU2NTdlZCwgMHhhYTdiN2NlMSwgMHgxY2Q3NzE5OCwgMHgwN2RkM2ViYSwKKwkweGY5YTI2MjQ0LCAweGQ3MTE3ZTRiLCAweGMxNjZkMmU3LCAweGUyMzdmZTA3LCAweDU3ZmRjNDRkLCAweGY1NDY4MjRkLAorCTB4ZDgyZTg4N2QsIDB4Y2VmNGQ3NWYsIDB4ZmZiNmJhYzcsIDB4NDAwN2ViMzksIDB4MzA3ZmFmNDcsIDB4ZGE2OWRmZjYsCisJMHg0NzFmZmFmNSwgMHgzN2Y5MDViZCwgMHg0MDdjYTY4ZSwgMHhkYmNmZDY3YSwgMHgwMmYxODUxOSwgMHg0OGFkM2JkZCwKKwkweGRlM2JkZGZmLCAweGU0MDFmOTRiLCAweDYxMzkzNGRmLCAweGZmM2JkZDljLCAweGE5ZTgxNjNhLCAweDBjYTk4NTdiLAorCTB4MzBmNzYwZjgsIDB4Yjk1ZGJmZTYsIDB4M2I2M2FmZTMsIDB4YzJhZWZlNTAsIDB4MWEzNjZjNzUsIDB4ZmZjOTlmOTksCisJMHhkZWUwOGY4ZiwgMHg5ZDNmMjVjMiwgMHgzYzE3ZTgxNSwgMHhkN2U2YmVhZSwgMHhmMDgyM2U1MSwgMHhiZWE1OWFmZiwKKwkweGU3NmRmNDBmLCAweDQzZTNjZDUzLCAweGNlNjRhZGJhLCAweDFjNWYxODU2LCAweDc5YTg3ZjhiLCAweDc1OGJmMjZiLAorCTB4ZDZhYWZmYjQsIDB4YjQ4NWM2NWQsIDB4Y2ZlZGVmM2MsIDB4ZmQxYzYyYzcsIDB4NWQzN2E2NTYsIDB4ODc5ZTNiOTAsCisJMHhjNjZkODdmOCwgMHgyOTk0YWNlZiwgMHgyNmMwMmY5ZSwgMHg1ZGY2NDZhMywgMHhiMDc5MzVhNiwgMHhlNWUyN2E4ZiwKKwkweGY1YTdmNDczLCAweDFhZWYxZjE3LCAweGFmZmQ3ZDk5LCAweGM1YzEwZjhmLCAweDY3ZDU5ZmY4LCAweDdmZGU2MDE2LAorCTB4ZjQwM2U4ZmIsIDB4MmU5MDlhODMsIDB4ZDI3ZWY5OTUsIDB4NGNmYTg3NTIsIDB4ZmIzZWYzNWYsIDB4ZmEwZTg2YmYsCisJMHhkMDIxNmYzYiwgMHg0ZDliNzk5ZiwgMHhmZGViZGFmZiwgMHhlYjgxZDFiOCwgMHgzZDA3ZGZhMiwgMHhmN2M3N2NlOSwKKwkweGQ1YWFmZjMwLCAweDI3ZWRlMzg5LCAweGZkMzY4ZmJkLCAweDViZWViNjNmLCAweGZhZGJiYWU5LCAweGZlNzdmNzllLAorCTB4ZmJkZGU3YzUsIDB4OGYzM2JmYmEsIDB4Y2UxZGJiYWYsIDB4ZmVkZTZiNTMsIDB4NzVmN2M3MWMsIDB4ZmZlOTVjZjksCisJMHhmNDU3YmE1MiwgMHhhZDQzNzZmZCwgMHg2ZjhlOTMzZCwgMHg4MmI0NjkwZSwgMHhlMjVmNzE2MiwgMHgwM2E2NGIyNSwKKwkweDBmMmY3MGEyLCAweDM4M2JmOGMwLCAweDU3NjA4ZDVmLCAweGJmOTg5OTM1LCAweDU4MTgyNGNkLCAweDgyZGRkYWJjLAorCTB4M2I0NDQ3ZTIsIDB4NWZhZTRlZWIsIDB4MGNiNDM5ZGMsIDB4NWQzYjkwZjUsIDB4ODI3ZDQxM2YsIDB4MzllZGI1NDgsCisJMHhlZTdiN2ViNCwgMHg2YWM2Mjc0MiwgMHhkY2M3ZjE5MiwgMHg4NTNkOWY5MCwgMHhlNmY2YjVlNywgMHgxMmUyMDRlZiwKKwkweDY3N2Y3ZWE4LCAweGEwMDNmNGVlLCAweDEyZTVkZWU3LCAweDI5YTYwZjUxLCAweGE3ZWZiZmVhLCAweDkzZWZiMDE0LAorCTB4N2RkMGY2YjQsIDB4ZGVmZTZkNmUsIDB4ZGRmY2RhMzksIDB4ODQzZGRlMWMsIDB4MjI5ZWZmOGQsIDB4NTg3ZTA3YzEsCisJMHg4OTUzY2U1MywgMHgyZDM1OTdlMCwgMHgwYTkwODk5NiwgMHhhYmI1NDY3MSwgMHhiYmI4ZWVjMSwgMHgxOTdlZGI0OCwKKwkweDdmMmE2NzI4LCAweGUzYzUzN2UzLCAweDVjNzg0MzZmLCAweDM5MjE3ODhhLCAweGVkMDNkZTIyLCAweGRjN2M4ZjEzLAorCTB4ZjljN2IzZWQsIDB4NDg5YWNlMjAsIDB4N2JjNzg2NGUsIDB4MzdlODljYWEsIDB4Y2NiOGY2ZTcsIDB4MzU5NmNiZGIsCisJMHg2NTlmYjBlZCwgMHhkOGFlMWQ5ZCwgMHg5YmUxYmRkMywgMHhlMTFjZmI3MCwgMHgyZmYxODVhNCwgMHhjZmI0NDRiYiwKKwkweGFlN2Q5ZDY1LCAweDVkZDdjYmFjLCAweGJmMWQ2NTBmLCAweDA3M2NiYWVkLCAweDc4NjM3MmViLCAweDVjNWE4NjVkLAorCTB4Y2NhYmY2MDQsIDB4OGI3Yzg3ZWQsIDB4MTY4N2U1OTMsIDB4ZThhZTc2MTEsIDB4MDBkMmZhYzMsIDB4ODQ2NmYxMTcsCisJMHg5ODk3ZDFlMywgMHg5Y2UwMmI4YiwgMHg0MDVhM2NjYywgMHg2YjVkYzg3ZiwgMHhlNjBmOTQ0NSwgMHg1NWM3MDEwYywKKwkweGY4YzY0OTM0LCAweDQ1MGQ4ZmUzLCAweDg1ZGViMDU5LCAweDdmNTYyNjEzLCAweDA5YzMwZDlmLCAweGYxYzI1Y2Y4LAorCTB4NTE2YTQyNWUsIDB4YmY1NzI1N2YsIDB4MGIzYjMyZmMsIDB4ZWEwODI1Y2UsIDB4ODQ1YzRiYmYsIDB4YjhlZDQxZGMsCisJMHgxMDIxNmM5MiwgMHgxMjZhZjEwZCwgMHgwNzhlYzZmMSwgMHg4ZTQwYjkzZiwgMHhkYWU0ZmM2YiwgMHg0OTZlZmMzYywKKwkweGFiZTljMzBhLCAweGU1ZmM2ZjdlLCAweDE3ZmU5ZDlmLCAweDI5Yzc2N2U1LCAweDNhNDI3NDkxLCAweGQ0OTdiYjEyLAorCTB4M2Y3Y2Y3NzYsIDB4YTU0ZDYzYzMsIDB4YmE0MzRiZTAsIDB4ZmJlYWM4MGIsIDB4YjY2NjA1ZDMsIDB4ODdlYmZlMGYsCisJMHhlNjRmOTAxMywgMHgyYzRjNzRmYywgMHhlMjY0MDdmMywgMHg2ZTFhYzQ3ZCwgMHgzYWYyNWMzNywgMHg3NjBmYzE2MiwKKwkweGNmY2U5ZmM5LCAweDZhNmNmMzczLCAweDg3YTRhYWJlLCAweDlmZmUxZGI4LCAweGQzNDg5NzEwLCAweDUxYTE3Y2VlLAorCTB4MDQ4YjNiMDQsIDB4Y2RlYmZmZDEsIDB4YzU3YmMyOGYsIDB4Y2NhMzc2ZmEsIDB4NmJhZmJlMDYsIDB4M2YwMDJmZDEsCisJMHhmMmFmZWUxMSwgMHhhNmQyOTQ3OSwgMHg3NWFhZjFiMSwgMHg1OWM3N2I1YiwgMHg3NWNmNmM2OSwgMHhkNTcxZGY4MCwKKwkweGM1YjdkZGY5LCAweDgwZmRkODJmLCAweDFkNTE0M2Q3LCAweGU2MTE0NTA1LCAweGFmZTM4OTNiLCAweGYwZGZmNzcwLAorCTB4N2Y0Y2VhZmUsIDB4OTk3ODBjYWEsIDB4Y2U2YTJmOTksIDB4ZWU2NjlkZjksIDB4MjY0MDk4Y2YsIDB4NzcwYWI4YzAsCisJMHgwYzliNjZkZiwgMHg3NDQwNzJlYiwgMHgxYWQ1N2RjMiwgMHgzYmEzNDVmZiwgMHgxZWIxZjljMiwgMHhmYzFmMDA5ZiwKKwkweDY3NjQyN2YwLCAweGM0ZjNlMDA5LCAweGQ4MDhhMjRmLCAweDczZjFlZmQ1LCAweGNmYjgwY2M5LCAweDFlYWU4MTkxLAorCTB4NzMxZGY4MTcsIDB4Yjg0ZmNjY2MsIDB4NzRjNzZjY2UsIDB4OWM4ZTYxNTYsIDB4NjhjZGZiNDgsIDB4NTA4MzhmYjUsCisJMHhmZWJjYzFiNSwgMHhjYjAzYjMzYSwgMHg0YTc2ZjA4NywgMHhhYzk1YzFiZCwgMHg1ZWQxYTc1ZSwgMHhiZmZlNjkxZCwKKwkweDc5ZjgxMjhiLCAweDkzN2JmMzk5LCAweDc1YmQ3Zjg0LCAweDM1YTlmOWNiLCAweDQxZmEwYjkwLCAweGQxNjdlMmJlLAorCTB4ZmRjMTM1ZDMsIDB4ZTA5YTY5NzEsIDB4ZjYwZGY5MDMsIDB4MDUwYmU2MzAsIDB4NTNkZTFmZDQsIDB4NjRjZmFmZWUsCisJMHg3YmExNTY3MiwgMHhjZGFiOWUzZCwgMHgxZTAyZjdkYSwgMHg4ODdmNzhlNywgMHg2NzgyODdkMywgMHhmMWZhYmYwNSwKKwkweGJmMjlmNTJhLCAweDlmZWQ1NWJhLCAweGRjNmRhYmJhLCAweDU0ZGZhMDZiLCAweDgxYmIwNWZiLCAweDNhOTZhYTgyLAorCTB4NmIwZmIwOGMsIDB4ZTE5MDllZGEsIDB4MDczZWU2N2MsIDB4YTJhNDRiODMsIDB4ODNmOGVhYjEsIDB4MGYxNjY2NzUsCisJMHhjZGZjNjdiMiwgMHgyZTRlODBmMywgMHgyYzgxMzVhZiwgMHgxNzQ1YWUyNCwgMHhkZjg3YzA2ZCwgMHgwZjdmMzgzMywKKwkweGRmZGU2YzcxLCAweDU3ZDM2NDg5LCAweDNjMGZhYmYwLCAweDU5N2NmMmY2LCAweGU3MTUzNzBkLCAweDQ3MzJhYjMzLAorCTB4MDNkYTc3MDYsIDB4ODFlNGJiOTUsIDB4Njc1YTdhMmEsIDB4ZTU3MmM3OGUsIDB4MDc0YWUwZmIsIDB4ZmI0MjBmYmUsCisJMHgxZjc4NzFjMywgMHg0ZmI4MTEzNywgMHg4ZWQyZDE5MiwgMHhhODFmNmNmNywgMHg1ODc0NjM4ZCwgMHg4OGNiYjJkNiwKKwkweDdiY2Q1NGY5LCAweGZhM2Y0YTIyLCAweDUwYmIzNGZkLCAweDMwYmNhZjFiLCAweGUwMjg2M2FmLCAweDU4MTRkMGE1LAorCTB4YTc0MDhjZTYsIDB4NzM5NGEzOTMsIDB4MjcyOWFmY2EsIDB4Yzc2ZTk0NWMsIDB4MjcyNDdmZmUsIDB4YTI3MjI5OTYsCisJMHg5NWUzZTMwMywgMHhlN2RmMDJmNiwgMHgzMDMxMzkyYSwgMHg1YTU4OWM5MiwgMHhlYjA4MThlNywgMHhmYTQ3NzRiMCwKKwkweDRiMjRkODQwLCAweDE0OWE5OWRmLCAweGVmYmM0ZTQ5LCAweDQ3Y2NlNzYxLCAweGVlZjY3ZGY5LCAweGRjNGU1NGQ5LAorCTB4YjMxMzkyYTAsIDB4ZjQ0ZTkwYTMsIDB4ZjY1MTNlZWQsIDB4NDI3MjVmNDksIDB4Y2JmZmI3NTksIDB4OTA3ZGU2ZmMsCisJMHhmN2Y2MTExMywgMHg3MTM5M2ExNywgMHhlNTE4YmY4ZiwgMHg0NWIzM2RjNCwgMHg0ZmFjYmRjZCwgMHgzOTEzOTRmYiwKKwkweDVlNjFmNzQ5LCAweGEwNDRjNjc2LCAweDdkYjlmNzlmLCAweDBiZGY5NDczLCAweDVlNDA3ZTgwLCAweDExZDk0NjY0LAorCTB4ZDFiOTdhNmYsIDB4NTNmZjVmMWIsIDB4ZmZmYWY5N2YsIDB4YmUxNTllMTAsIDB4M2ZkYTk0YmUsIDB4NzQ0OGQ0YTYsCisJMHg5NzllOTA0OCwgMHhiYWY5NDdkZSwgMHhmOGM4ZjQwMCwgMHhiOTA3ZDJmYSwgMHg2N2M3NTM5ZiwgMHg2NmNmODA4YiwKKwkweDZiMmNmOWFhLCAweDcyNjZlZDVmLCAweGY1MmRhNmExLCAweGZjYjRiOTk5LCAweDA5ZDk0NmZlLCAweDMwZmVmMmEyLAorCTB4ZjM1MmNkZGYsIDB4NWVhOGNjZGQsIDB4ZTMxOTZlZjgsIDB4MTNmZDk3YmIsIDB4NmRlYTdmNTAsIDB4ZmNlNjdmN2UsCisJMHgxMWIzZjI5NiwgMHgzMWY0MDhjZSwgMHhlNjhjNmU2NywgMHg3MTg5ZGVkZSwgMHgwNmQ4YzliZiwgMHgxMTNkZTVmYiwKKwkweGU2M2Y3OWNmLCAweDcxYzFjMDdhLCAweDdkMDRjOWJmLCAweDllM2U0OWZhLCAweDJmM2Q3Yzc5LCAweDNlNzk0ODc4LAorCTB4MjJkZTVmYzUsIDB4NmQ1NzRmYTYsIDB4ZDU3ZjExMTYsIDB4NTdmZjZjYWQsIDB4MDczZTBiMzcsIDB4ZmY4YzE3Y2QsCisJMHg1NmQ3OWUxYiwgMHhiNWU3NjBlYywgMHgzOTg1MDY3NCwgMHg3OGFmZjVhYSwgMHhjZTFlYTNhZiwgMHgwODM2MmEwOSwKKwkweGY3MGNkZTc4LCAweGE1OWYwMDFlLCAweGNlMjU5ZjFjLCAweDI5NTczYzBhLCAweGMxZmFkMjZkLCAweDJmNmRhMjFiLAorCTB4MWUxMDFiOTAsIDB4NzhhYmMzZmEsIDB4MTA1MzQyZmQsIDB4N2YwYTFkY2YsIDB4MjAzNzM4MjksIDB4YWJiNmQ0OWYsCisJMHg1OWZiNzExYSwgMHg5YTJhNGZiMCwgMHgwZDlkZGY3NSwgMHgzNzA0YWU3OCwgMHhhZGFmNDFkNCwgMHg3Yjk2ZDE2YSwKKwkweDhiMTdiY2Y4LCAweDE0NmQ4YzgxLCAweGIzM2RmOTNlLCAweGY3NzhmNGYzLCAweGY2NTNmMWU4LCAweDg4NzNmMTJkLAorCTB4OWZmMzI3ZTIsIDB4ZmUyNTlmODcsIDB4ZjA1ZTc4NWQsIDB4YzdhMmYxNzUsIDB4M2YxNDVkNDcsIDB4MzI0ZjE4MWYsCisJMHg2YzdlM2Y2MSwgMHhmMTdmMjE3MCwgMHhiYmUyMmJiZSwgMHgxODllOGI0ZSwgMHhlNTBmNzlhOSwgMHhlZjJmMWNhNywKKwkweDgzZjVkYzE5LCAweDgwYjU1ZWEwLCAweDZmZDc0YWY1LCAweGYzNDQ5N2Q5LCAweDM4Yzg1YjczLCAweDZkMjg2NjM4LAorCTB4OTBlM2NhZDIsIDB4YTA3NTZmZmMsIDB4YmI1YjlmN2MsIDB4ZGFiODgwNDUsIDB4NjBiZWZjYzUsIDB4N2MwOWVmOTksCisJMHhlNWMxZTYzZiwgMHhmYWQzZGU1NCwgMHhkYzliYzcwYiwgMHgyODdlNWU3MCwgMHg1M2ZjODgyYSwgMHg0MDlkZGZhMSwKKwkweGZhNmY5NGJmLCAweDBjNGUzOGY5LCAweDljYTNlNjBlLCAweGI4ZWMxMzZhLCAweDRjNTEwMzJmLCAweDgyNzVkMTZlLAorCTB4NGNmNjZkNzcsIDB4NWYwMTZiZmUsIDB4NmE1ZmU2MTcsIDB4NDM1OGViNjMsIDB4NzVmNjBkZDcsIDB4NWJlNzlmODEsCisJMHg4MGY4M2U5OCwgMHhlNzNiMjJmZiwgMHhkOTkyZWZmNCwgMHg0OTAyMzhmYiwgMHg0NGU3N2U0MCwgMHg4ZjkxNWNmYiwKKwkweDkzOWFlZTcwLCAweDFkZGY1YWE0LCAweDM3ZmU4YzlkLCAweGUwZmM0ZTA5LCAweDM2ZmJmZmEzLCAweGJhY2JkYmViLAorCTB4N2Y0Y2ZhMmEsIDB4ZDNjMTU3ZDcsIDB4MWYzYWRkNGUsIDB4OWMyZjZhOGEsIDB4ODI3MmU3ODAsIDB4ZjIwYmRmMTMsCisJMHhkMTc5ZTFjNywgMHhmZWY2NDZjOSwgMHgxZmFlNDFjZCwgMHhkODA1ZjdlOSwgMHg3OGY3ZWExZiwgMHgyMWMwYzA2NiwKKwkweDE0NWE3YTJlLCAweGJmNjI5NWM2LCAweDUzM2Y0YzY5LCAweDNiZmQyOWYzLCAweDZlMzc1ZjQ4LCAweGEzYjQ4NmE5LAorCTB4N2Y4ZTE2NWUsIDB4MDY2ZWRmNzQsIDB4ZDA0ZDNmYjksIDB4MTlkMTQ5YzQsIDB4MjdmZmJlZTEsIDB4YmVhMzk3YzAsCisJMHgzNjQ5M2UwMiwgMHhjODc5N2NhMywgMHgxOWVlYmVjZSwgMHgxZWYwMjQ2NiwgMHgzMjM1ZTVkYSwgMHgwNmJkZDFkMiwKKwkweGUwNmM5MWM3LCAweDA0Yzk4ZjJmLCAweDgzZTVjN2Y2LCAweDNiOWQxZTM3LCAweGE0NDVjYTAwLCAweDI2ZjdlMjhmLAorCTB4YTU2YjgzNTQsIDB4OTFhYWM1OTgsIDB4NWM5ODQ3ZTIsIDB4ZmZmYmMxM2EsIDB4YWVkNzk1MTMsIDB4YTA5Nzc4NmIsCisJMHg3Y2UyN2IwNywgMHhiNjc0YmY3MCwgMHgwNzU0ZDc3MywgMHgwZjMyNWJmOCwgMHhjZjczODZhZCwgMHgyM2Y2Nzk1OSwKKwkweDFiMWQ2MDQ3LCAweGM3NGZiYmQ4LCAweDlkYTFlNGQ3LCAweDA1NzdkMGY2LCAweGU4Yzc2N2RjLCAweGJiOWMwMTdhLAorCTB4MzkxZWE3NjcsIDB4ZTBmN2M3NDIsIDB4YjczYzQ0OWEsIDB4YmM0YWViOWMsIDB4ZTczMWNlMDcsIDB4MGU5ZDE0MWUsCisJMHg1ZGUxNmY1YSwgMHg3ZjljMGI1NiwgMHgxMjJkMWY0ZSwgMHgwZjJmMGFiNywgMHhlZmY0NzY5MiwgMHhlZWZkYWRjYywKKwkweGNhNGZiMGRkLCAweGY3ODQzY2E4LCAweDg3ZmNjYTljLCAweGZjODQwZWE2LCAweGQ3ZGIwMTdhLCAweGI4NDZkZDc4LAorCTB4NzRkZWQ5ZTcsIDB4ZmI0OTk4ZDEsIDB4MDBmNWExMmYsIDB4NTllYjM1ZGQsIDB4MDI4ZDlhYmQsIDB4ZTI1ODE3YmUsCisJMHg2NGY5MDI3ZiwgMHgxZjAxNDZjOSwgMHhmYWE3NjljNCwgMHhmNWMxOTlhZiwgMHhiZWQxMjk4MSwgMHhmOWE3YjY5ZSwKKwkweDcwMGY2ODUyLCAweDAzZGRjNjM3LCAweDc0MzU5M2U3LCAweDUyN2VkODljLCAweDk3NTM5ZTFkLCAweDk4YjQ3NmQwLAorCTB4MmVmYzZmYjQsIDB4NWViMjViYzIsIDB4YjBhZjcwMjAsIDB4ZTNlYTUyNmMsIDB4NDFkZTAwOTMsIDB4NDdlNTA5ZDksCisJMHgwOGRjZmQ3NywgMHhmYjQ3OWVlMywgMHgyZmUxNDQxYiwgMHg0MmE2M2IxNCwgMHhjMTAzZjI3ZCwgMHgxNTJlZWY4ZSwKKwkweGJhZmI4YjVlLCAweDYyM2JlZjliLCAweDE0ZTJjZDFmLCAweGVmZGNhMjA0LCAweDJhZjFkNDkzLCAweGI4NjlkMTI1LAorCTB4ZDc5NjRhOWYsIDB4M2FiY2MzZDUsIDB4MDZhOTg5YmMsIDB4NDY4YmE3YTQsIDB4MjkyN2UzOTAsIDB4N2Y1NGRkYmUsCisJMHg3MTY0NjEzZCwgMHgyN2JjN2IzMCwgMHhmZTJhMWQ4YywgMHgxZDNhMzJiOSwgMHhjYjZhMmZkYiwgMHg5OGIzM2U0MSwKKwkweDg1M2M2MTE0LCAweDIzZTk4ZWJiLCAweDdjYTNhYjlkLCAweDk0ZWI1N2UwLCAweDdkZjAyOWVkLCAweDdlMTM2YWNmLAorCTB4OTMyYWYwYmYsIDB4NzU4NjE3M2IsIDB4ZjRmYjdmYTAsIDB4YmRjMDk5N2EsIDB4ZDNlYjk1YzcsIDB4OWUzYWMxZDcsCisJMHhlMTNiMmNkZSwgMHg4ZTdjNDBkYywgMHhiZTk0MTFjNSwgMHg3YjY0ZmNjYSwgMHhhN2I4MzNkNiwgMHhjYjdmMTk5YiwKKwkweDAyZWVlZTdiLCAweDk0YTVkYmUwLCAweDdlNzA5OTRmLCAweGUyNTYzZTVhLCAweGY1M2U0NzI4LCAweDRiZTMxNDVjLAorCTB4ZTdhNTdlN2EsIDB4MWI4ZDY1NTMsIDB4NjVhMWNiMjIsIDB4ZDBlNTkxMDUsIDB4MzdlZTdhZDAsIDB4NmI5ZjJjOGQsCisJMHhiYmU5ODU4OCwgMHhmMDc4YzllMywgMHgwZDU3MTY2MywgMHhmNDA0ZDc5YiwgMHg3MGJiMjBmYywgMHhmMzc4MWVkMCwKKwkweGRjODE5ZmQzLCAweDNiZTJiNGFkLCAweDdkOTJkNTY1LCAweDgzZThjMDlkLCAweGViOWZmZjAwLCAweGVjMjlmMmRmLAorCTB4NTFiOWIyODcsIDB4MjlkOTBlZjgsIDB4NDdkODBmNTgsIDB4MWNmMDEzNmIsIDB4OGM1N2M0YmIsIDB4NzllMjU3NzgsCisJMHhmNGI0OWI0YiwgMHhlZjIxZjhhZSwgMHhhNWM0OGI3MywgMHgzMTY1NWY5NiwgMHg3N2FhYTVjNCwgMHg2ZTk0NDdmNCwKKwkweGRiZjMzZjY5LCAweGNhYjAxZjA0LCAweGRjZWEzZmEzLCAweGU2MjY3MGZmLCAweGU1YWUzOGVkLCAweDZiNTgzZjVjLAorCTB4ZmEzZWJhNDUsIDB4NDBkNWM1YzgsIDB4Mjg3ZWYzYjcsIDB4ODlkYmQwMTAsIDB4ZjIwZjVkZDcsIDB4NzA0OWJhYjAsCisJMHhmNGI4OWY4MCwgMHgyOTdkYWM4NywgMHgzZWUzMGY2ZCwgMHg1ZjQ2NzNmYSwgMHhiMDFkY2U5NCwgMHgzZmQ3YWEwZiwKKwkweDZmZWIxZmIxLCAweGZmMDAxYzE0LCAweGQ0NjI4NmU4LCAweDIyYmNjYTI3LCAweDlkOGRmMmMxLCAweDc5NTA0NzY4LAorCTB4N2I2OGYxODUsIDB4ZWMxMjYyYmMsIDB4MjY1NWVhODMsIDB4MTU2MmI4M2IsIDB4YjNlODUyN2EsIDB4NDBhN2JmOTMsCisJMHhiM2IxY2VjYywgMHhiNDY3M2I2OCwgMHg5ZWIyZjkwMywgMHg0MjM5YzUyZSwgMHhmZDAyOWU0OCwgMHhiZDE5NzhkNCwKKwkweDNiMmFiZTc1LCAweDRkZjQ4YjYxLCAweGJkMWVlYzlmLCAweGQwMjI3ZjQyLCAweGZlOTg2NjVmLCAweDMzY2ZhY2Y2LAorCTB4ZjY5ZTNkMDIsIDB4OTE2NzE4MDksIDB4ZjQwYmY0MDcsIDB4OWZlMmIyZjksIDB4MWViNTE2MjEsIDB4ZWE3ZDE3ZDUsCisJMHhmZDA3YjBlOSwgMHhlOTU4Y2JjMSwgMHhlODU0ZmE2MSwgMHhjNzg3NGY1MSwgMHg4YzBmNzIyNSwgMHg1MWQ1YTFmYiwKKwkweGZhYmM4ZjM4LCAweGNlNTllZjM3LCAweGNmOWUxOWY2LCAweDkyM2ZkNWU1LCAweDQ0YmFmYjA0LCAweDBhNDA3MTYyLAorCTB4MTYyNGFiNWUsIDB4NWM2M2Q2MzcsIDB4MDcxOWQ3NGYsIDB4YmE3YzY3ZjUsIDB4MGU4YWNjNzEsIDB4MjBmMWVkYzksCisJMHg0YTNlYTliNywgMHhkZjlmYjQwMiwgMHhlMzExN2U2YywgMHhkMmJmY2YyYiwgMHgzN2VhMjc3OSwgMHgwMDNhNTE2ZiwKKwkweDkyYjY2ZmZjLCAweDNlMjFkYTAwLCAweGFkZTU0N2U0LCAweDEzNjljNjIyLCAweDRiMzU5MDI5LCAweDcxMmJiZjY1LAorCTB4YjJiZjE1MzEsIDB4YjdjYmJlMjIsIDB4YjQ4NTdjOWEsIDB4MjdlYmY5N2QsIDB4YzI1YzYyYzYsIDB4N2I3ZmE2MGEsCisJMHgzOWQ4MTE1ZiwgMHgyYzYzYjc4OCwgMHg5NzJhM2JkYywgMHg1ZThlN2M1OCwgMHgzNDVkZjgyZiwgMHhkZWJiYzNiMywKKwkweDdhMDM5OThjLCAweGRlY2NkMDliLCAweGI5NmYyYzE3LCAweGZjYTkzNjU3LCAweDY1YTJmYmJiLCAweDkzOWUxZWE1LAorCTB4YzMzYWU5NzksIDB4M2UzMDBhZmIsIDB4NGE3NmZiZjUsIDB4Y2JkNzRlNWMsIDB4ZGJjYWZlOGMsIDB4Y2FlN2Q0NjQsCisJMHg4MDVjYjc5YiwgMHg2M2YyY2Q3OCwgMHg2Yjc3YjQyNiwgMHhjMTFhMmY5YSwgMHhkNWZiY2Q5ZSwgMHhjNDFkZWNhYiwKKwkweGE3MTM1MTM2LCAweGFlM2UyM2Q3LCAweDIwOTgwYzU5LCAweDBhYjVhYmFlLCAweGJlNjg3MWNmLCAweDNjMmRmMzEzLAorCTB4YzY2YmVkMWUsIDB4NmFmYzU1NmYsIDB4OGE1ZWViYzcsIDB4YmY2ZDhhYzIsIDB4ODU3YmUxYjQsIDB4Nzg2YzliZWQsCisJMHhhYmY5YWE1ZiwgMHhjNDdiNTVlMywgMHhmMDM0YjVjMywgMHg0ZTNiYjg3OCwgMHg5MThmZTQxMywgMHhjMWNlZTFlMywKKwkweDdkMjEyODNmLCAweDg3OGRhZDE2LCAweGJmOGNjZDIzLCAweDQ1NjY3MWQxLCAweGE0MzUwZjdhLCAweGU5ZmFiZDc3LAorCTB4ZGRjZjEwZjMsIDB4ZTc5M2Y1YjUsIDB4NWY5NWRjNjEsIDB4ZTIxZTdlNWMsIDB4Njg4MmE4NmMsIDB4ZTZhNTNkMDcsCisJMHhmZTMxZjc5NSwgMHgxZjE3Njk1NSwgMHg5N2EwZWRjMywgMHhjM2YxODk3ZiwgMHg3MjY4ZmUxNywgMHgzYjBiYjQwMiwKKwkweGZlODBhNzRlLCAweGRmY2I2MTcxLCAweDc4MmUyMDkyLCAweGU4YTk4ZWQ5LCAweDNkYjY1OWRmLCAweGVkYmRkZjBmLAorCTB4ZmEwNTllY2QsIDB4N2UyM2Y1ZjUsIDB4N2I2ZWJmNTksIDB4M2M2MGY3NWEsIDB4ZWViYTc5ZDAsIDB4NzE0MjI3YzAsCisJMHgyYzU1MmQ4ZSwgMHhlM2MxZDQ3ZSwgMHg4ZTQ3MzcxYiwgMHhjZjExZWYxNywgMHhhZWViM2FkOCwgMHg1YjFmYzAyOSwKKwkweDY3ZDA5ZTk5LCAweGJhNjFlMzVjLCAweDYzZjQzNzllLCAweGY4ZjMzNzFkLCAweGJlM2I5NmQ1LCAweDNjZjFhZTMyLAorCTB4ZDdhZTgzZmMsIDB4N2M2ZDE4YjgsIDB4OGJhZGE3ZTgsIDB4OTQyY2YxN2YsIDB4MWFmNDI2YjUsIDB4MDdlODE4ZDcsCisJMHhmNDc4OTRmZSwgMHhkOTVkYTNjZiwgMHhkZWIwODkzMSwgMHhhNGYxODFmZiwgMHgwZTg1N2ViMCwgMHhhNjlmZDdlMCwKKwkweDhjZjhiZjgwLCAweDQ0YmY0NDFjLCAweGVmMDk4NzcwLCAweDM4ZWY5NjZiLCAweGMyZTlmYjhhLCAweGVmMTg0M2Y2LAorCTB4Zjg1Yzc4NGQsIDB4YjFmYTEyMDUsIDB4MDNlZTVkZjgsIDB4NjU2OGQ5YWEsIDB4MWQ3YzkwZjEsIDB4NjFkMjVlMjAsCisJMHgyZTNjZWZjMywgMHgxMmI1ZDE5MiwgMHg5YzViZDkyZiwgMHgzNDk4YjJlNCwgMHg4YjBiM2VmZSwgMHhmOGRhYWNlNywKKwkweDBjM2Y4ZjAxLCAweDA5MzA5YmFmLCAweDJiZjNhYmQ2LCAweDNjMTU1MGUzLCAweDEzMGYwMWQ4LCAweDkxYzA3MWQ1LAorCTB4NzE0MzUyZTMsIDB4ODM3NWJhYzAsIDB4MWUzZTA0ZjUsIDB4ZjlhNWYzOGEsIDB4ZTllZjEwYTEsIDB4OGE0NjhlMTMsCisJMHg4MWIwYmYyYiwgMHg5MDVmMGZjNSwgMHg1NjhmZGYyMywgMHg2MjZiODJlMiwgMHhkN2Q2ZmI3NCwgMHhiZWUwNzhiZiwKKwkweGYxNzVmMWU2LCAweGExYzYzZjM0LCAweDVmMDUxYmExLCAweGYzMjM1NzVkLCAweDg0NjMyN2Y3LCAweDg1Yjc2NDZmLAorCTB4MGE1NDliZWUsIDB4NGYyY2ZiZmEsIDB4OTk3ZGMwYzQsIDB4YmUyMzRlZDYsIDB4NTVkOGEyOTMsIDB4ZGM1ZGJlN2MsCisJMHg4YWY1ZDZkZiwgMHhmNWEyNzE4OCwgMHhiZjkwN2IyZCwgMHgzNTQ3ZjllYiwgMHg4ZmQxNDczZiwgMHg2ZjFmMjM3NywKKwkweDFmOTMxYjc1LCAweDNlYWQ1YjVkLCAweGI1ZDM4NTBiLCAweGViYTQ0ZGZiLCAweDE4OWRjZGVhLCAweDc5YmZiYWE3LAorCTB4NzU0M2IxOWIsIDB4YzNmMjBjZmUsIDB4ZDc3ZjFhYTcsIDB4MjJjNmJiNmIsIDB4YTJlZmU3M2YsIDB4Y2FkOWZiZTksCisJMHgzZjhkNjNmOSwgMHg5YjM1M2Y3MiwgMHhhOWZhNmEyZiwgMHhlZDE4YjZmMCwgMHgzYmZiYmU5NiwgMHgwNWVlYjkyNywKKwkweDk5ZGFlNzc4LCAweDQ1YWU3NTFlLCAweGQwOGJlNjljLCAweDY0NjJjZmZmLCAweDMyMzc1NzZlLCAweGEzOTUzODNmLAorCTB4OTU5YzNlZjgsIDB4ZGEyNzA3YmQsIDB4NWIyZjUxYTIsIDB4MGM3NDlkNjYsIDB4NjY1ZDIxZGUsIDB4Y2M1YzYyMzUsCisJMHg0NzFlM2FjYSwgMHgzMjY3MjNmMywgMHhlYjRhZjdhYywgMHhiYmM2MDRlZCwgMHhiMmFiZjAxYSwgMHg5YmJiNjVlZiwKKwkweDI3MjczZTgwLCAweGNmYWE2NTE3LCAweDFiZjE5NDYxLCAweDRmODgxODA3LCAweGQzYWQ4ZmJkLCAweDRhN2Q4MjA2LAorCTB4MTg1MGVmMjQsIDB4N2Y2OTlkYzcsIDB4YjYyZTQwOTUsIDB4OWY3Zjk4N2IsIDB4MDIzMTNkNWMsIDB4ZjY0YmI3YmUsCisJMHg2ZTE0MDk3ZCwgMHgwNGUwYmU3YiwgMHhiYTRmNmNkNywgMHg3ZTQzZjA2NywgMHgxZGY2OTcwNiwgMHg0NzUzYmM1ZCwKKwkweDY5Yzk3N2U3LCAweDZhZDEzZDQwLCAweDE1NjlkODA4LCAweDRmNmE4ZDYyLCAweDQxZDcwMzQ2LCAweDVlMTI1MjFjLAorCTB4ODk3OGMwYTUsIDB4MTFlNjNjYzcsIDB4NDZkNDNmNzAsIDB4ZjUwYWRhYTgsIDB4NWRlNjkyOWMsIDB4OTI0OWQ4OTUsCisJMHg3MjE1OWRlZSwgMHg1N2E1MDQ3OCwgMHhjNTU3YTcwYiwgMHhmZjY1Njc1ZiwgMHhmMDNiNzBhNiwgMHgwY2I4OTZmZCwKKwkweGJiZTQwNzUyLCAweDdkNDZlYWQ2LCAweDBiOWIyOWUyLCAweGRmZDIzZmVmLCAweDg4OTM4ODY4LCAweGY1NGVkMTI3LAorCTB4NWZiNDUwYmIsIDB4ZGEzYjdkY2QsIDB4ZTcxZjI2YWYsIDB4YTYxM2U2ZDIsIDB4YzkyMzI3NDksIDB4OGUzZTA0OWIsCisJMHg3ODgyZDEwMiwgMHhlMDZhOWI4OCwgMHg3MGFiYjJmYSwgMHhkYzc4NTI2NCwgMHgxOWM0ODk3MSwgMHgyYzNiZjI4MCwKKwkweDZlODA4Zjc4LCAweDFlN2FhZjJmLCAweGRjNzY4YjE2LCAweDNlMWE3Yzc0LCAweGUxZDE5YjExLCAweDZhNzFiMDM1LAorCTB4MDM4OWRiYmUsIDB4ZTNhNzQ3ZGYsIDB4YWYxYmFlM2QsIDB4NzBiNTZmMjYsIDB4MDkxMTI3N2UsIDB4ZGNjNTlkZjgsCisJMHgyZmZlMzg0ZSwgMHg0YWJkZjA2OSwgMHgyMjRmOGEyYSwgMHgzOGMyNjQ0YywgMHhkZTIxMzBlOSwgMHg4M2NmOTYyNSwKKwkweDZmYTlhZmY2LCAweGViMDFlZjA3LCAweDBjODcwYjVmLCAweGI1ZWZhYmI1LCAweGUwZTVjMGRlLCAweDhhNTE0YjExLAorCTB4YWM5M2VlODUsIDB4YjgxOGI1ZTEsIDB4YjgyYzlkOWQsIDB4NjVhMDRlNGUsIDB4OWZjODAxZmUsIDB4NjFlNzk2ZDIsCisJMHhjOGQwOGE1YywgMHg1YWM0NmFlOCwgMHg0NDY2ZmI4MiwgMHhhZDU1Yzc5MCwgMHhkNTNkNDY4YSwgMHhhOGRlMjY2NCwKKwkweDhlM2Y3MGYxLCAweGQwZjFlNTc4LCAweDNmOWY4ZjhiLCAweDI4MTg1NjM5LCAweGE1MGQ2OTI4LCAweDFmY2VkYTM1LAorCTB4YTYyYzM1Y2MsIDB4NDUwMmQwOGIsIDB4OGIxMGZlMTQsIDB4NWZmNDBjNmIsIDB4NmM5ZGMzM2YsIDB4MWJkMzA3MTgsCisJMHgyODc3YmY1NiwgMHhjMTZiZGFlZSwgMHgxYmE4Njg2MywgMHgxNGMwZmZiYSwgMHgyZWY4MjE2NCwgMHhkZDBlZjEwOCwKKwkweDUxYjg3MjBmLCAweDBlYzY1M2M5LCAweDQ2MzQwNmVmLCAweDMzMmVmMjg3LCAweDY5OGRmN2U1LCAweGRhZjM3ZjJjLAorCTB4N2VmMGY1YTEsIDB4ZThiZGE3NGQsIDB4Yzc4YzBiNjYsIDB4Y2YwZWJmNmMsIDB4OWFmMTAyYzMsIDB4OTM3YmQ1ZjcsCisJMHg0NzM4Y2EyZiwgMHhjMWU0MGM2ZiwgMHgwN2I3YzdmYiwgMHgyM2M1ZmJkOSwgMHhmYzdiYTFhZCwgMHg1OTM3OGYyOCwKKwkweGVkMDA3Yzk0LCAweDQzZDZhMjhiLCAweDVhYWFkN2M4LCAweDAxYjk2MTBlLCAweDllMWQzNGYyLCAweDQyMWJjODEwLAorCTB4NjViZjc5ZTcsIDB4YjVmMjQxNGMsIDB4NzE2YjVlMTQsIDB4YjFjMTNjMzIsIDB4YmY2NjMyZDAsIDB4YjhjM2MxYTQsCisJMHg2MWQ5YmRmYSwgMHg2ZTJiNDgzYywgMHg4NmUxZTFkMCwgMHg4NTg3ODVhZiwgMHg4N2E4NmY2YiwgMHgzYmZhNTVmNywKKwkweDBiMTc0YTZmLCAweDczZDM1ZjAwLCAweGRiOGVmODBjLCAweGY0MTY2M2M0LCAweDE0NWZkMGJmLCAweDY3MGUyM2NhLAorCTB4YmNmNzJmNDMsIDB4YzI4NTNiMTUsIDB4OTdkMzU3MjksIDB4YWJhMTRlZDIsIDB4OWQyNmU4ZGUsIDB4ZWY2M2FmZDgsCisJMHhlN2U5NmE4MywgMHg4N2FlMmRkZiwgMHg4YjMyZGUwMCwgMHg4ODk2ZGQyYiwgMHgwNTc3YzdmMywgMHg4YjhiYmJhNiwKKwkweDc0YzIxM2YyLCAweDA5ZWUyYzRkLCAweDExZmVhZWYwLCAweDVhMWY4MmNiLCAweGU5ZGFmZTU0LCAweDM0YzU0YjM5LAorCTB4MDExZmRlM2EsIDB4M2MzMWI4MjMsIDB4ZGVlNWM0OWYsIDB4OWU3NDUxYTgsIDB4YzYwMzJlODksIDB4YjhiMTFmZDUsCisJMHhkYjNiNDA1NywgMHg2MjAwNjA5YywgMHhmNzEyMjZjYiwgMHhmNzBjNDEwNCwgMHhmYThmZWNhMywgMHhhZjhlY2MxZCwKKwkweDU2ZjgzNjJmLCAweGZjNjBmM2IwLCAweGZhNjExZGJiLCAweDQ3ZDFkMGU4LCAweDViNDdkMTkwLCAweGI1NDdkMjI3LAorCTB4NDdkMTkzYmYsIDB4MzQ2ZTVkNWIsIDB4M2IwMzU3M2YsIDB4YzcwNDkxYmEsIDB4NTkzN2JhYzEsIDB4NjFhNDBiMGEsCisJMHg4MjYyNmU5NCwgMHhiMjM3NDBmNSwgMHhjMjgyYjZmNywgMHgzYWViYzQyOCwgMHhmNThmNWYxOCwgMHhlNjUyZTNlMSwKKwkweDM2ZmFkYmQ1LCAweDcxZmI0ODFlLCAweDA3OTlkODA2LCAweGE2MWU3ODBkLCAweGI3YTk0ZGUwLCAweDQ2ZTJjMmMzLAorCTB4N2VlNmNkZmYsIDB4OTlhOWZhMTEsIDB4OTYxZmIxZDQsIDB4M2Y4MWViNmYsIDB4ZWQ4NzVjNjAsIDB4ZDA1ZGNjZTAsCisJMHhhZTliMzZkZSwgMHg2ZmRjMjM5MCwgMHhmODE1YzFlMywgMHg3ZjIzNzg0ZSwgMHgwNDk2M2JkNywgMHg3YmQ3MjBiZCwKKwkweDNmZGIwN2M3LCAweGRlODA3YzIxLCAweGU4ZjgwMTkzLCAweDBhZjJmZGM0LCAweGRkOTY2N2JmLCAweGNlNDBiODI2LAorCTB4ZWY2MThmMGYsIDB4NjE2ZWJjOTAsIDB4MTZiYmY1NzYsIDB4YWY0Y2E3OTEsIDB4NWJiODNjNDksIDB4N2IyYmZiMDQsCisJMHgyN2ViMDE5NSwgMHg5ZWExOWE0MiwgMHg1ZjVlMmFmZiwgMHg5NWRkZjhkMiwgMHg4OWU4NTU3NSwgMHg3ODE4ZDI3MiwKKwkweDc4ZjllNGNmLCAweGZkMmQxZWY3LCAweGE5YTRjN2M0LCAweDFlZWQyOWUwLCAweDQ1YTI5MGY3LCAweGVlMjY1MDk0LAorCTB4YzgxMGYwNWQsIDB4M2UzZjRhNTUsIDB4NzIzMWJiNGQsIDB4NDQyZGUwMTQsIDB4MjMzZTk0M2YsIDB4Nzc2ZDBmYWQsCisJMHg3YzZiYWQ4OCwgMHg1YjBiZTgwYywgMHhmMTE1MmVmNiwgMHhhZTdlOGU1ZCwgMHg0N2JjMTY2YiwgMHhjNTY3ZWI0OSwKKwkweGI0YWRkYTkwLCAweDRkMmM1NjdkLCAweGYzYzA5ZjIxLCAweDA4N2U3OTAzLCAweDc0M2ZkMzRiLCAweDdkZmEwNDFhLAorCTB4OWVjYmY3MDMsIDB4OTIyNTc4ZTUsIDB4NjM5OWJhZmQsIDB4YjhmNGNmMjAsIDB4OTQxOGU0ZWMsIDB4ODViZWNhMGIsCisJMHg1Y2UwNTQ2NywgMHhkYmU3ZTI1YiwgMHgwMzM0YzE2OSwgMHg4ZmIyOWJhYywgMHg2MDIxYTBhNSwgMHg0ZDJiNDJhNSwKKwkweGNlMjAxODcyLCAweGJiOGY1ZGUxLCAweDdiMGJjZTA4LCAweDVmYjczYmUzLCAweGVhODFlZWNiLCAweGM3Y2U3ZmJmLAorCTB4ZWJmNThkZjMsIDB4MmZiOGY0YmYsIDB4YjdlMDM5ZmUsIDB4ZjhmMWRjY2EsIDB4YmVhZjlhNGMsIDB4NjlmYTMyZjYsCisJMHhkZjU0YzQ1NywgMHg2OGVmNTVmYywgMHhlZWZmYzdlOCwgMHgwMGM0ZGZkNSwgMHgzMzNmZmExZCwgMHgzNTNmYmM0NSwKKwkweGYxZThjYWNlLCAweGI2MGU2NzgwLCAweDA0ZWZlMmNiLCAweDFjNGE4MTkyLCAweDE1Y2UyYWIyLCAweDg2NWViOGNhLAorCTB4ZGY4Njk5NGIsIDB4MDViYWNmNTEsIDB4YTdhYzIwNTksIDB4ZjY4NzhhNTcsIDB4YWU3OGE5MzEsIDB4YWUyZWFiNzgsCisJMHhiYjJmMzk1NSwgMHg4MGZjYzAyNSwgMHg0MmJlYjE1OSwgMHg3NGZhZWZlYywgMHgzZTQ5ZjdmNiwgMHg5OTkyZmE2MywKKwkweGExY2UwZmZlLCAweDMzNzNmMmE2LCAweDVlZmIzMWQ3LCAweDA5NTk4NzEwLCAweDNmMDhmOThkLCAweDVhZmQxNTM2LAorCTB4ZmVmYjQ0MzksIDB4YWY0MGQ2NDEsIDB4ZjRmMjgwNjQsIDB4Njc5Nzg0NTQsIDB4MTNhNzk1ZDYsIDB4NmI5MTViZjQsCisJMHg0ZGY5YzNhZSwgMHgwY2ZkMmEyNSwgMHgxM2EzNDZlNSwgMHhkMWY0ZjFmOCwgMHhmN2Y5ZmU5NCwgMHhlMWJmZjRjYiwKKwkweDg2N2YzMjI2LCAweGNkYjhjZWNhLCAweGJlNTE1ZjcxLCAweGM0Njk2ZjQ2LCAweGZiN2U4NTc3LCAweDUyM2YzOGI5LAorCTB4MjE2M2M1ZmMsIDB4NDExNTE3M2MsIDB4OGYxZTgwM2MsIDB4OTU2MTBlYjksIDB4ZGYxM2QxZDUsIDB4ZjFlOWZjN2EsCisJMHg4ZjUxZTBhZCwgMHg5ZDBmOWNiNywgMHg5ZThlZjFmOSwgMHgyM2UzZDFmOCwgMHg1YmU5N2U3YywgMHg3NTMwZWIwYiwKKwkweDRiZjI4OGI0LCAweGZjNGY3YmMxLCAweGVkZmFmNWIwLCAweDAwOWViNGI1LCAweDBkZjE0MmY0LCAweDMwMTc0Y2Y4LAorCTB4ODYyYjI3YmUsIDB4M2E2YzRmZDMsIDB4MTQwYjM3ZTIsIDB4MGY0ODAxYzAsIDB4NTVlM2Q3OTgsIDB4MDRhY2M3OGYsCisJMHhkNTgxM2VkZSwgMHgxYWY4MGZkZiwgMHhlZDAwZmM4OSwgMHhiMmRkNjUyMSwgMHhjNmY3NmJkMiwgMHhlOGM0ZGU0MSwKKwkweGE3YWJkMTRjLCAweGJkNTBiYzcyLCAweGJjZTZmNTFhLCAweDliZmEyYjQ0LCAweDlhOWVhZjQwLCAweDVlNWJjNjE0LAorCTB4ZGU1NzFiMTUsIDB4NjAwYmNiNDgsIDB4ZmMwYWZlOWYsIDB4MDYwOGIxZDEsIDB4OTViY2M1ZGYsIDB4NTZlMDVmZjAsCisJMHhlMmNhNWYzYywgMHhiN2RmMDU1OSwgMHg5M2Q1YTY3ZSwgMHhjZTBiZmFhNywgMHhkYzNkZmU4MiwgMHgwNTY1NWVlNCwKKwkweDg3MTA4YzdmLCAweGZmMTQ3OWU3LCAweGQ3Zjg3NWM3LCAweGYzNmJiM2I2LCAweDBhZmM3YzdhLCAweDI3YjkzMWZlLAorCTB4YWI3YTE0ZGUsIDB4N2NmZDcyYjMsIDB4ZmEwYTE5MzAsIDB4MzMzN2Q4ZjIsIDB4MTM3ZjgxNjMsIDB4YmY0NDdjN2YsCisJMHg0NTYzYzRjNCwgMHg2ZTljMzgyMSwgMHhlMjA1OWU5MSwgMHhhN2I3N2QwZSwgMHg3NjNlMGI3ZiwgMHgxNTQ5NGE5MCwKKwkweDcyNTNiYjFmLCAweGQ4ZGViM2FmLCAweGViMjk4ZjkzLCAweGM3YWY4NTM1LCAweDA1ZGRlMjE0LCAweDQ0MjlhNjdlLAorCTB4MWVjODRiZmEsIDB4ZmZjZjBkNDgsIDB4YjNmNzJiNzksIDB4NjA0MzIxMGQsIDB4MWM1ODVmOWUsIDB4NzlmM2ZmOGMsCisJMHhkNTRkZTY4NiwgMHg5YjNmZTg0YiwgMHhiNjZkOWZmNywgMHgxMjFiZmRlMCwgMHg3ODQyYmE5NCwgMHg5M2Y3YzM0ZSwKKwkweGYwZjhjNmJjLCAweGJkNjU2NDM4LCAweGQzMDk2YTUzLCAweGZiZTJlNmU3LCAweGU0MmYxNGQ5LCAweDM4ZjA5OGNiLAorCTB4MDkwNTU5YjYsIDB4ZTNlMjBmZGYsIDB4ZjY2Y2RmMzgsIDB4ZDNkYjljNDIsIDB4MmIwZGZiOTIsIDB4ODM4NDNkZjgsCisJMHg1MjdlNzE2MywgMHgzZmM4MTQ2MCwgMHhiNmU1Zjk3ZCwgMHg0ZTUwZDViZCwgMHgzZDYwOTVlYiwgMHg5MTBhZmUzZSwKKwkweDNiODIxZmY5LCAweDUyMTdiZTRjLCAweGU5NTNkNzdiLCAweGExMzk0NmY2LCAweGRjMzY3MWQwLCAweGU4MDFiZDdiLAorCTB4YjhjMjI4M2UsIDB4NjU1Y2ZjZmQsIDB4Y2Y3NjQ1ZTcsIDB4YWJlYzQ1YzEsIDB4ZjZmMGE3YWUsIDB4MDJmNzYyNWQsCisJMHg4MWRiMjhmMiwgMHhlZGZhN2E3YSwgMHg0OWYzNGU4YiwgMHhkM2I0MWU3MCwgMHhjZjIyYWJkMywgMHg1YmZkZjgxYiwKKwkweDY4YmIzZjQ1LCAweGViMGZiZjc1LCAweGUzZWZjMGRlLCAweGJhOGUyZmZhLCAweDFiZTdkNjBlLCAweDJkNjFkNWQzLAorCTB4NDRmNDI5NWQsIDB4ZjQzOGViZTksIDB4ZjFmOTlkZDMsIDB4ZGZjYjUwM2EsIDB4MDQ5Y2JjY2IsIDB4ZTNkMTUxZjIsCisJMHhlYjhhZmFjMywgMHg5YmQ3YTg2MywgMHhlNmRjM2YzZSwgMHg4NTdlYjJlZSwgMHgzNWU4YWYzZSwgMHg2NDIzZDk3ZCwKKwkweGQzNDY0NGFmLCAweGViZTNjZTcxLCAweDJlZGNkNzMzLCAweDQxYzY4YmIzLCAweDg4NmZkMzhjLCAweDczY2JkZTU2LAorCTB4MzkzZTgzNDQsIDB4OTVlZDIxYWYsIDB4YWM1NzM4NjYsIDB4MDdmOTdlNjMsIDB4M2Q4ZDY1NmIsIDB4YmVkYjg2ZWMsCisJMHg2N2JkOWVkOCwgMHhiNmI5N2YzYiwgMHhlZjhhMjNmYywgMHhjZWY4ZjE0MSwgMHg4NjhlZDZhZCwgMHg3ZTE0OTFmZCwKKwkweGJmNjdiN2NmLCAweGM5YzgyZjA2LCAweDMxYTMyMzc5LCAweGFmZGY0ZTdlLCAweDdlZmE3ZTdlLCAweDcwMzVmZGY1LAorCTB4ZDhjMWFhZmIsIDB4ZDJhOWRhMzgsIDB4MTYzNmVjNGYsIDB4Y2Q2OTdkNDcsIDB4MTRmMGNkOTMsIDB4NzNmODZmNWUsCisJMHhkNGI4ODc5YiwgMHhhM2FlNmY3ZiwgMHhhNDRlN2EyMSwgMHg3ODE0NjhmNywgMHhjMmU3YmUwYSwgMHgwZmUwOThjYiwKKwkweDFlZmY5NWE4LCAweDZjZGQ5ZGU5LCAweGY0MTNmMzM3LCAweDYwODhlZmQ2LCAweDg2ODNlYTNlLCAweGU4MjIwM2E3LAorCTB4MDQ4MjIzZjUsIDB4YTBlY2YwZjUsIDB4NjM1MGIwY2IsIDB4Yjk3YjMwMGYsIDB4ZWYwMDNkODcsIDB4NjU3Y2QwYTQsCisJMHgwZjY2MmVlYiwgMHg1ZGExZDRiNCwgMHgwYWVkNDk1MSwgMHhlMDFiM2I5MCwgMHg3Y2MxOTAxZCwgMHgyNzY4MTk0MCwKKwkweDg4NWVlYzg0LCAweDc3ODZjYWFmLCAweDBjNWRiOTMyLCAweDM3YTVhNzRmLCAweDFmMzNmYWIyLCAweDhjMzUzNzRmLAorCTB4OWRkNWJiMDAsIDB4Y2U5MzJmMGMsIDB4YThmYjVkYjQsIDB4ZjU1N2RhOTksIDB4NTA4YTI0YTksIDB4NzZjOGFhZmIsCisJMHg0ZWQ2NzdlZCwgMHhkZTNiZGNhMiwgMHhhNGJiYzAyNSwgMHg2NWE4ZmYzNCwgMHhlY2VkZmY3MiwgMHg4ZmQxYjY5OSwKKwkweGRhODFiZjgyLCAweDU0ZDliNzY3LCAweGZiNmY2Zjc2LCAweDAzOWI2NmUzLCAweGZlZGJkOWYxLCAweGNkMTdiNGU4LAorCTB4ZGY4YTM4MDQsIDB4ZTQyMWYyODIsIDB4YmUyOGZlMDcsIDB4ZjQ0MmEzZmYsIDB4NTM3ODBiMTcsIDB4ZTVmNmU1ZTgsCisJMHg4OGNlZDEwYiwgMHgwYTZhZTZiYSwgMHg3MzY1OTNjNCwgMHhiOGRiNzAzYSwgMHhjMTg2MzY1ZiwgMHg3MDYxODlhOSwKKwkweDM3NmU0YTI2LCAweGZiYmRkM2Y0LCAweDNiZjAyOGVhLCAweDA0ZmEzYmJmLCAweDJiN2U3OWRhLCAweGY0MWZkYmYzLAorCTB4ZTNhOTE1OTQsIDB4MDI2ZDZiZGIsIDB4MTBjMDk3YTcsIDB4ZGM3NzdmZDgsIDB4ZWMwMTI3YjgsIDB4YzA1OTZjOTUsCisJMHhiMmZkNGVmNywgMHg5OWYxZTllZiwgMHhkYjY2OWZjMCwgMHg2NjI5ZDI1NywgMHhmZGUyMzY0ZiwgMHg2MDU0N2YzMiwKKwkweDNkMmFjM2M4LCAweDRkZGZjZmNlLCAweDNmZGM1ZmY1LCAweGRjZmYxZDQ0LCAweGI1YWJjZDZlLCAweGMwMjJmODMxLAorCTB4N2JkY2NlY2YsIDB4ZGU4MGY0MGMsIDB4YWU1ODRlZTQsIDB4MmI5MDA0YjgsIDB4MjRhMWVhZTQsIDB4ZGQ2YTVmM2MsCisJMHg2ODlmMDM2NywgMHhlMGU3N2YxNywgMHhhNDllZWI3YywgMHhkYWFkMzQwNSwgMHhiMDM2OWZmMiwgMHgzZTM4ZWFlMywKKwkweGY4ZWQ0YmNlLCAweDc2ZTU1MzVlLCAweGExMTNkZjExLCAweDAwM2QyNmZkLCAweDg1ZDZlYjdlLCAweDFmZGVlYzU5LAorCTB4YzhhNmFmYmIsIDB4ZWY5ZmYxZDUsIDB4OWNjNDUyMTksIDB4NGNmZjc4ODksIDB4OThhNzM3ZDEsIDB4OWYxODNlYmQsCisJMHgxZGZkOGViZiwgMHhmN2JhMjljYywgMHhlZmU1NmVjOSwgMHhjZmY1ZTk5MywgMHhlMmIyNmM2NywgMHhhOWY4YzMyZiwKKwkweDRmZDY3NjY1LCAweGZiMmJmYjZmLCAweDUzZTIwNGIzLCAweDI5NmNiZmVkLCAweGIzZjhjMjIwLCAweGVmYzI0YjNmLAorCTB4M2RhNDBmZTcsIDB4M2RmNjA4NTUsIDB4MDEyMzlkOTEsIDB4YTJmNjQ0YWMsIDB4YTdjZmNiN2UsIDB4YmMyZjZmZTgsCisJMHg2NzkzYmU3YiwgMHgzY2JkNmVkZSwgMHg2ZTI0NjZlYiwgMHhkMDA0ZDcyYSwgMHg5ODAzZGNjNywgMHgwN2M5OTFkMywKKwkweGY1YmJmZjQ1LCAweDU1ZGZhZDMzLCAweDcyMmIwN2FmLCAweDZlM2ZkNzMyLCAweDc4MDIxMGQ1LCAweGZiYzJjYzc3LAorCTB4OGMyNDA3MTMsIDB4YzllYmQyZjcsIDB4YmQwNTgzNTMsIDB4MjA0ZmMzZTgsIDB4NGQ2ZDZkN2QsIDB4ZmU3YjAxOGYsCisJMHgwMDlmNjBkZiwgMHhjNjVlYjZkZCwgMHg0OWFhODNmNywgMHhjNzc4MWVlMCwgMHhiNDU1YmFhOSwgMHgyNGZjNjAwNywKKwkweDY3ZDg3YWYzLCAweGUwYTEzZThhLCAweDFlZWFlZGE1LCAweDdmZGE1OGYzLCAweDdkODM0NWY2LCAweDc2ZjEwNTA1LAorCTB4NTc2ODJmZjAsIDB4YzFmZGY4NGYsIDB4ZmU2NzkwMDQsIDB4MDdlNzg0YTAsIDB4YzZmNzE3ZDksIDB4NDVmMTU0MmMsCisJMHg3ZTAzNTVmZiwgMHg2ZWVhZmI3ZiwgMHhmYzYwZjdlZCwgMHg4YjZlZDBmNSwgMHg3YmNiZDk4MSwgMHgwNjNkZmZmNywKKwkweDU3ZGJkNGY4LCAweDkwYmMyMTJmLCAweDZmNTNkMTNlLCAweGNmM2JmZDQ2LCAweGQxZmM4NjJhLCAweDg4OTliZDZhLAorCTB4ZGUyMTg3ZDksIDB4MTUyYzZhNmIsIDB4ZmFlZjQyNmIsIDB4NjQ4N2NlNzAsIDB4ZDRmNDk1OTUsIDB4Mjc3ODQyMmIsCisJMHhkMGYwMDkyZSwgMHhmMDU2MWY0MywgMHgzZTMzZDNhYywgMHg3NzNkNzFiMiwgMHhlZjBmMTkxOCwgMHg0ZDVkYjY1ZSwKKwkweGM3N2JjMGE4LCAweDBhZmIxOGZlLCAweDhmNGNjZjk0LCAweGVlN2JkZWVhLCAweGZkZjBlOWM5LCAweDlkZGVjOGEwLAorCTB4N2VlMjJhYjgsIDB4NjJiM2JkZGEsIDB4ZGY2YTg3NzgsIDB4ZWI4YTRlNTIsIDB4YzVkMDY1NzYsIDB4ZmFkMTZmMGIsCisJMHgzMzQ1ZjY1NywgMHhiY2U0YmFmZiwgMHgyMjRmN2Q1ZSwgMHhmMWM3ZGY1YywgMHhjZWNjMTgxNSwgMHhlMTgzYmNlOSwKKwkweGFjNmZhOGJkLCAweGIwZjU3NGNmLCAweDQzNjFmZmY3LCAweDAwNTgzOTNkLCAweGZhZDQ2MmUyLCAweGZmYWMyMzRlLAorCTB4M2U4YWQ5YmYsIDB4MjVhNWZjNjcsIDB4OTc4YmY4MDYsIDB4YjQyMTBlZTQsIDB4OTI2OGIyZGYsIDB4YWMxNTc0MGIsCisJMHgzM2IwNzYyMywgMHgxODMwMWZiNiwgMHgzNzMyNWQ2MCwgMHhjZjVjNjJhNSwgMHg3MzFjZmMyYiwgMHgzMWEzNGI0OSwKKwkweDRiMTc0NTU1LCAweDE5ZDgzOWY4LCAweGFmMTI5YmQ5LCAweDk2MzJiZWZhLCAweGZiMzM5N2YxLCAweDcxODE3ZmNhLAorCTB4OTEzNDdmMWQsIDB4ZDBmNDExOTEsIDB4ZmU0Y2IxODUsIDB4YTc3YTMzNmUsIDB4Yzc3YTg2NmYsIDB4NjhkZjc4MGQsCisJMHhlZjVmZmVlZiwgMHg5NzkzNzc4NywgMHgwMzhjNzMxYywgMHg1ODk0ZTBiZiwgMHgwZWRhMGZiNiwgMHg3MTBmNTJiZSwKKwkweDgyMWY2ZGMxLCAweDY2NzJhMmQ0LCAweGEwNjhiMTYzLCAweDFjNDViZWZkLCAweDk4NzdhZmNjLCAweDkwZDZiZGZkLAorCTB4MTJiODk0M2YsIDB4YzUzNzllNjAsIDB4ZDZmZGJlMzIsIDB4ZGNlNjgzMDEsIDB4YmVmZTJkZWMsIDB4OGNiMWY1ZWYsCisJMHgzMmM2YTUwZiwgMHgwM2Q2ZGFiZiwgMHg3MDBiMDliOSwgMHhjNDQ3YjlmZiwgMHg2NGYwMWY4MiwgMHg0NTZjM2Q0NywKKwkweGU4YTgwZmM1LCAweDZmMGY5MzZmLCAweGZlODYzZTlkLCAweGMxOTc3MjczLCAweDM4ZWRjYjBlLCAweGYzMDg4MmZjLAorCTB4MjQyMTljNzUsIDB4ZjQzZDIwNGUsIDB4YWM2ZjBhMzksIDB4NWQ1YmRlMWEsIDB4YzcxZDFlMGMsIDB4MGFhZmQ4NmUsCisJMHhmZTA0YTlmZSwgMHhiZmNkMDY3MSwgMHg0M2M1MmVkNSwgMHg3ZjgyOTgzYywgMHhmZjRhMWU2NSwgMHhkYWUyMTY4ZSwKKwkweGU0YWRjMTYwLCAweGZlMTVmYWRhLCAweDMxZWZlNTY4LCAweGU1MTNiMDRjLCAweDVkMjAzM2VmLCAweDZlYjliNzZlLAorCTB4NmY3MmM1ODksIDB4ZWNjZmU0MGEsIDB4MzZkMjdhNjMsIDB4NzI0OTRmMmUsIDB4OWZjMDcwZjEsIDB4NzlmMzRlYjIsCisJMHhiN2E3OGNhYSwgMHhlM2U3ZWZmZSwgMHg0YmFmZDI1NCwgMHgwZWM4YWZkNywgMHg3NmNkZDIyZiwgMHhmMGVlNGYxNiwKKwkweDEwZTljYzA2LCAweDhlOTZkNjc3LCAweDE1NGE5ZjdmLCAweDhlM2Y3Yjk3LCAweGZkZjY4Y2ZmLCAweDgzMGViNmMyLAorCTB4NTU4ZmVlMDEsIDB4NTBlMjEwZWYsIDB4YmVhN2VkZGQsIDB4YTkzM2EyMWQsIDB4ZWRhZmU5MDUsIDB4NWM3ZGMxMTgsCisJMHhlNjVkZmNkZSwgMHg5ZjcyYTQ4ZiwgMHhlNzg2ZWJiZiwgMHhmODdmYjBlYiwgMHg4MTIwZmIzOSwgMHgxYmZkOTNhNiwKKwkweGZjNDEwZTU2LCAweGFmYjA2YzA2LCAweGZiYTI3OGMyLCAweDQ2ZGFkMjA2LCAweDkyZWJkMDIzLCAweGU1MmQyYzY1LAorCTB4OWE0YmQ1ZTcsIDB4NGIzZmI4ZGMsIDB4YzQ3OGIzZDYsIDB4NGNhOWIxNjUsIDB4MjU3YTczM2UsIDB4ZjhjMWU4ODYsCisJMHg3YjRkYmFkZSwgMHg1YzFmZjA4ZiwgMHg3ZDZkOWU3ZSwgMHg0YmY0MGY2YSwgMHg4MGZiZWJlOSwgMHg5ZWRhOWI4ZiwKKwkweDU1YzMwNzU4LCAweDQ2ZWNmNWU4LCAweDQ1OTRlMTE5LCAweDNkZjNjZjZiLCAweGI4Y2ZjY2IxLCAweGY3YTMzMGZkLAorCTB4NWNlNTFiYzksIDB4YjI2YzRmNzgsIDB4YmZjMWQ4OTcsIDB4NGRjNmQ2ZmQsIDB4YjdlZmYwMjIsIDB4ZDk1MzllODAsCisJMHg3Yjc5MDczZSwgMHgzMTYzZGY2NiwgMHhkNmY5MDdkZiwgMHg0N2UwMjA2OSwgMHg2NTI0NjZkZiwgMHg2MmZiNTQ1YiwKKwkweDM0Mzc4NmVmLCAweGI5YmNiN2ZiLCAweGViZmEzYTZlLCAweGUwMDVlMjNiLCAweDU1YmVjYWYzLCAweGU4Y2RiZWYwLAorCTB4ZmZmNzBkYmMsIDB4OWZmZGJhOWQsIDB4YzJiN2RhY2YsIDB4NGY3YWQwYmEsIDB4ZDRmZmZkZjEsIDB4ZTlmZmJhMzQsCisJMHg3MThkYjhhNywgMHg2NmQ5YzAwMiwgMHhkY2NlZmM4YywgMHhmZTkwZGY0YiwgMHhhM2I1N2M0MiwgMHgyOTdkNWYwNywKKwkweDZjMWZmOTk2LCAweGVhZmZiNGU5LCAweGZmYTEyZTNiLCAweDRlM2UzNDIxLCAweDJiZTU0ZjM3LCAweDAwMmE5Mzc0LAorCTB4MGFlOTFiZmUsIDB4NTE3YzAwOGUsIDB4NTMzZDAyYmMsIDB4Y2NmZTdhM2QsIDB4MDc5NWRjMGMsIDB4ZTFmZjNjMjQsCisJMHgyZTNjNGJlNywgMHg2YTk0NzcwNCwgMHg5OWY5ODZiZiwgMHg2ZmRkNmZiMiwgMHhmMmIyMzhjMCwgMHg5ZTgyNTc2YiwKKwkweDQ1ZTg1MDlmLCAweGI4MmIzY2ZhLCAweDc5NTNjNzg3LCAweDcxZjYxNjc2LCAweDhlYjA3ZTA0LCAweGVjOGFlM2UzLAorCTB4ZmY3ZGViZWUsIDB4NjVjZjQwYzEsIDB4Zjk4NDYyZDQsIDB4MWQ4MmY1OTAsIDB4NzcyOTQ1ZDYsIDB4YmRlZjY3YWMsCisJMHg5NGYwZTYxZSwgMHgyZGJmODdlZiwgMHhkZTNkODNiZSwgMHhmMGNjM2QyMSwgMHg1YzQyMzQxZCwgMHg5MzFmMjhlYiwKKwkweGM1Yzg0NDYzLCAweGI3MGM0MGZkLCAweGI2N2Q4NjBmLCAweGZiYWZjYTg0LCAweGFjZWJmMjU1LCAweGFhNzQ4OGRjLAorCTB4Y2UyM2UxZTAsIDB4YjFjNGFlYjcsIDB4YzdjZTNmNzksIDB4NWQxZjA3ZTksIDB4ODJmZjBhYTIsIDB4M2Y2YzA5MjQsCisJMHhlN2RiMDI4YiwgMHhiYjNmYzAyMiwgMHg5MGRiYTZlZiwgMHg0Yzg4ZWZkZSwgMHhiN2IwNzZlZiwgMHg0N2VmZTFlMiwKKwkweDhjZmE0MDZkLCAweDdiYzc2NjliLCAweGNlNDk0ZjJmLCAweDdlOGQzOGE4LCAweGVmNzRjM2U0LCAweGNlZDA2N2E2LAorCTB4ZmQ4NWZhMDMsIDB4OTdmZDFiZGUsIDB4MDg5M2ZkMDEsIDB4NzRhM2VmNzQsIDB4ODUzZjVhYWYsIDB4ZmM1ZDI4MGUsCisJMHg3Y2E1ZjAxZCwgMHg3Mjg1ZDNkNywgMHg2NWUwYTkwZSwgMHg3MzFjZWU5YiwgMHhlOWUxOWRhYSwgMHg4ZDUyMDBmZiwKKwkweDgwMDBiNTZlLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYmRmZjAwLCAweGQ1NTQ3YzA5LAorCTB4ZjM3ZGY4ZDUsIDB4MzMzMmM5NjYsIDB4YjI3NjRjOTksIDB4YTAwYzQ5MzAsIDB4ODA0OTBlMmMsIDB4MDg0ZWQ4YjAsCisJMHhjMzg4NGEyMCwgMHg5M2EwZDc1MiwgMHgzNjRiMDkwMCwgMHg5NDU2OTUxMCwgMHg4YjA2MjA4MSwgMHhiNjJkMTUxOCwKKwkweGVmODU4MzIwLCAweDEwNmQxYjQzLCAweDI2ODM1OGE4LCAweDYyMmQxMTEwLCAweGE1N2ZiMWRjLCAweDQxNDU5MDQxLAorCTB4ZWQxZmE4MjIsIDB4ZTczYmY1ODcsIDB4MzMzMzdiZGMsIDB4NmEwMjI2NmYsIDB4ZWZjN2UxZmYsIDB4ZGY3N2RlZTYsCisJMHhjZjdlY2U1ZCwgMHg2ZWM1ZjczOSwgMHg4NDM2MzFkMywgMHhhZTYzMDczMSwgMHg3ZDhjMDFlNiwgMHhmNGJmM2Y4ZiwKKwkweGExMmQ4Yzk3LCAweGNmMzc3M2U3LCAweDgyMjQ3MTVlLCAweGYwZjdjZmQxLCAweDVlNzliYWJmLCAweGM3NzZiZDUwLAorCTB4ZTkxYzU3YWYsIDB4YzVjZmFmZTcsIDB4ZmZlMDUyNWYsIDB4ODk2N2E2NzEsIDB4NDdmMTU1OGMsIDB4ODllZjRjYWMsCisJMHhmYmMwMjViNSwgMHg2Y2Q2OWQxMSwgMHhlMjY2YjQ5OCwgMHgwMzg0NjMxOSwgMHg4MzE5Nzg5ZiwgMHgxYzYzNmZmNiwKKwkweDZmYWEzZTU0LCAweDFmMmJkM2RlLCAweGU5Y2MzMWNhLCAweDliMzlhNjg1LCAweDk5OGYxNTMzLCAweDFiMzYwNWIxLAorCTB4MjdmOTY3YWQsIDB4YjBkZDkzZDMsIDB4YzZjNjQ2ZGUsIDB4YzU5YmJhZTMsIDB4ZDlkZDcyN2MsIDB4OTljNjg1MzYsCisJMHg4ZjczMjllMCwgMHg2NjY3ODM4OSwgMHhhMDdiOWU0ZiwgMHg2NjA3ZjlmZiwgMHg4ODZkOTY0ZiwgMHg3MGExM2ViZiwKKwkweDQwMThlYWJlLCAweDdlYzQ4YzRiLCAweDBjOTg1NTYzLCAweGM5YmY5ZmU2LCAweDMyNjUzM2U0LCAweGM0OWYwNWI2LAorCTB4YTNkYjJhYzMsIDB4ZmQzMjliN2MsIDB4Y2NmNGQ5ZWYsIDB4OTYzM2I3YTUsIDB4NzVhNGNiNmIsIDB4YjE1YWVhYzEsCisJMHg2NDY4NThlZSwgMHhkZmJjYzE5NywgMHg5YmI1OTY2NiwgMHgxZGQ1ZDFlMSwgMHhiMDgxZTJkZSwgMHhlZjQ2MmQ4ZiwKKwkweDM4OTk4OWQ0LCAweDFjMWFmMzk4LCAweDlkNjI5YWZmLCAweDZhNTgwMWVkLCAweDM4YTZjYmFjLCAweDY5OTJkMDA3LAorCTB4Y2Y4ZmI2NWUsIDB4ZWNlZDk3OTMsIDB4ZWVhMWIyY2YsIDB4MmRiOWU2NzAsIDB4ZjgxMjhkOGMsIDB4YzkzMGFkNjIsCisJMHg0MjFjM2Y3MCwgMHhkOWUxYzZmMSwgMHgyMDE3NWUxMywgMHgxNzUwODY3YywgMHhkNWUyN2U3YSwgMHg2NjdkMWJhOCwKKwkweDAxNDRmM2ZmLCAweDc4NjMyZmJmLCAweGQzYzFhZGY5LCAweDFkMGU2NmRiLCAweDU1M2U2MDI3LCAweGNhY2M2NjQ5LAorCTB4NWM1NTRiM2MsIDB4ZGI2NjI4ZmYsIDB4NzczZmYwZTQsIDB4MWMyZTYyOGMsIDB4NTcxODlhN2YsIDB4OGZmYWNiYjYsCisJMHgxMGFlYWZhNiwgMHg3ODg2OWFmYSwgMHgyMmU4OGVhZCwgMHhkMDUzZWFiYSwgMHhiY2MwNzQ2OSwgMHg4YmRkMTk0YywKKwkweGVlOThmYWMxLCAweDgwYWM1ZWRhLCAweGJkNzFlYWJhLCAweDI5NTU0ODAwLCAweGY2YzdlYmUwLCAweGQ3MzM4ZDg0LAorCTB4MDFkOTllMjMsIDB4MGNjOWNiMTMsIDB4Y2RiNTY3ZGQsIDB4ZDFiNmUxYzAsIDB4ZTg2NmZhMzAsIDB4Yjg2NWUwOTcsCisJMHg4MzhiYzAwMywgMHhkZTM1ODVlMywgMHhkYzZiZjg4YSwgMHhkNzg4NjI2OCwgMHhkYzM5NjM2ZiwgMHg2OGQ5NTNhYywKKwkweDQyYjdmNDAzLCAweGM2ZjcyNDdmLCAweDU3MDM5ZWE5LCAweGQ5MzFiZDQxLCAweDllNjA1MGU4LCAweGMyMmU4NjEzLAorCTB4YTBhYjg5ZmIsIDB4YWRjM2U4OGQsIDB4YmM0ZmJlMjAsIDB4ZGY5YWUyM2EsIDB4YTI3N2JiNDAsIDB4OGJjMGU1OGUsCisJMHgwNWIwOGQ1YiwgMHhhN2JmYzNhNCwgMHg0ODI5MzZmOSwgMHgyN2M0MmRhNywgMHhjMWIyYzdmMywgMHhiZWRlNzgyNiwKKwkweGQ1ZDExODY5LCAweDA1MmNlMmFjLCAweGU2Y2U3NmU5LCAweGRiOWYwNTU4LCAweDJhNzRkOGM3LCAweGQ4NjNlZmYzLAorCTB4MTNlODk1NDIsIDB4MTZkZWEwZjgsIDB4ZGU2MThmODAsIDB4ZDVlMTE1M2EsIDB4NmM5M2NlM2IsIDB4MTFlYzY1ODgsCisJMHgyM2UzMzVkYiwgMHgzMmNlODFkMiwgMHhjYzFiMjQ1OSwgMHg1ZjUwNDNkOCwgMHhiNDZiNzAwOSwgMHg0YjE2MTRiYiwKKwkweDBhNzMwNmY1LCAweDIzNjMyMWYxLCAweDBjYWRhZTA4LCAweGQ1MThkNGYwLCAweDYwNDU3NzVkLCAweDdmNWUyY2ZmLAorCTB4ODZlYWYxYTQsIDB4OWVjNjM0ODYsIDB4MjIzNTcxODksIDB4YmIzMDNlOWUsIDB4ODdmOWMxMWYsIDB4NDRhOWQ1MjYsCisJMHg3ZmFlODJlNywgMHgxMjdlY2U4MCwgMHgyYzJlZDRiZCwgMHhlMGYzODc2MiwgMHgwZTY2MGVmNywgMHg0NzkwMWJhNCwKKwkweGY4MDY2ZWI3LCAweDliM2RlODk1LCAweGJkMzU1ZDcwLCAweGMzOGUzZThlLCAweDY1N2NiNmQ1LCAweDdiYTE4NGY0LAorCTB4MjE3ODhlYjksIDB4OGNjN2Q4MTcsIDB4YWVlZjExZjAsIDB4N2VjZGNiNTMsIDB4NjZjNWIzYjksIDB4NTJlZDRjMTcsCisJMHhmY2ZjNWIyNiwgMHg3OWViNzI4NiwgMHg1OTNiOTczMywgMHg5ODIyOWE1MCwgMHg3ZWM3NjJkNywgMHhhYzIzYTIzZSwKKwkweGU1ZmFlNGM3LCAweGRkNjJjYWQxLCAweDNlMTg1Zjc4LCAweGViODkwZDdlLCAweGFjY2Y5NDY3LCAweGYyZmY3ZmU1LAorCTB4MWZkMGExOWIsIDB4OWY4OTU3N2YsIDB4YzRmY2UzNWUsIDB4YzVhM2Y1ZTUsIDB4M2MyMjI2OWYsIDB4YmRmMDkzOTAsCisJMHhlYjFjYzVkYiwgMHhlYWRmM2E5NywgMHg1ZmI5NzQ4YiwgMHgzZWEwOWI2NSwgMHgyYWY0NjRkOCwgMHhlNjZkYjgzMSwKKwkweGYxOGEyNWIwLCAweDk0NWIwZDkwLCAweGE4MjBjYjU2LCAweDJlNjE0YmZmLCAweDdmZTljM2MwLCAweGJmYWU1NGE5LAorCTB4MTMzZTNkZDcsIDB4YTFkOWFmZGUsIDB4N2U4NTJlNzMsIDB4ZjEwYTJkMzUsIDB4ZjMzN2IzODMsIDB4MzcxZDAwNDUsCisJMHgzMTA3NTk0NywgMHhiNzcwYWYxOCwgMHhmNjgwNjVkOSwgMHhjOTA0NGFkMywgMHhkNzAwOWM2NSwgMHgyZmViOTA2MSwKKwkweDgyNjhjYWU4LCAweGMwMmRmNWU3LCAweDVkM2Q1MDdmLCAweGY1YzZhODA4LCAweDZjMzE5ZGVhLCAweDgzYmUxZjgwLAorCTB4MWZiNDdjZGUsIDB4MWJkYTAwZWMsIDB4NGY2N2M4OWQsIDB4OWZmMWYyNDUsIDB4ODFmMGNjOGEsIDB4YmU1MjgzMTAsCisJMHg0YTAxODhlNywgMHg2ZTgyNTk2MSwgMHg2MmM2N2FmNCwgMHg3ODUwNGYwMCwgMHgzMGI1MWNiMSwgMHgzYzA3YTVkYiwKKwkweDM1ZTY3YTJiLCAweDc1NDZiZTAwLCAweDlmMDhhYWI1LCAweDhlODcyZWFjLCAweGU5ZjNmZDk5LCAweDNiZWQxOGJiLAorCTB4MzlkMGVmNGIsIDB4ZDZkNWY0MDMsIDB4N2FhYmNmYmQsIDB4MzFkMGViODAsIDB4OTQyYWY1OGQsIDB4NmY5ZTMxODksCisJMHg0NjIzZGUxMCwgMHg3YjYzZDVkNSwgMHhmNTU3YjE1YywgMHhhNTdjZmY0MCwgMHhlOTA1Yjc2ZSwgMHg0NGU2MWFlYywKKwkweDI0ZjkyYWI5LCAweGMxYjU5M2FlLCAweDgxZWM1OTcyLCAweGRhMTU5NzRlLCAweGI1NzcxYzQ3LCAweGM3ZmQ4MDBkLAorCTB4ZTM4Mjk5YjgsIDB4N2MwZGZkNDksIDB4MGU5MTYyYzYsIDB4NDRjYTVkZTMsIDB4M2ZlODY3MTgsIDB4OGU0N2MxMTgsCisJMHg2OGVmNzViMywgMHhiZTNlZjkwNSwgMHgxOGUyOGM2MywgMHg2YmU3NGExMCwgMHgzOGI3ZTM5OCwgMHhjZTlmNzdhZSwKKwkweDM0NzVmODg5LCAweDk0MDZkNzMzLCAweDYyYmE3ZjEzLCAweGY2NGJjMjBjLCAweGY1Y2IxZGVmLCAweGE3OGY0OGNhLAorCTB4ZWUxNTQ0MDgsIDB4MWRlNzA2MjcsIDB4Yjc2ZmEzN2UsIDB4NmMzM2Q2MDEsIDB4ZDFiNzc3OTYsIDB4ZDk5ZmIwMTEsCisJMHhlZDRiYzY4YywgMHg1MjNlZDJmNCwgMHhiMTBhNzgwZSwgMHhkMmM2YjZjYywgMHhiNzhlMjMzOCwgMHg3ZTgwMGRiNiwKKwkweDFmYjA3NTQ5LCAweDc4ZWY0ZjY4LCAweGE2Yjg0MTRmLCAweDg4Mjg3NWQ3LCAweDc3N2JhZGNmLCAweDNhZDM3YWQxLAorCTB4ZjgyOTc5ZGEsIDB4MTc2MTc5ZWIsIDB4NTYwM2RiNzQsIDB4ZGIyM2VkMWQsIDB4ZjJjZGY1Y2EsIDB4NjY2ZjVjNTMsCisJMHhhZGIyN2FjNywgMHgyYzdkZmUwOSwgMHhkNzI0ZjQyZiwgMHhmNjZiZjhjMSwgMHgxN2VmNzU2NiwgMHgyODk1ZWVlNSwKKwkweDUyZTQwM2U0LCAweGM2OTFhYzZlLCAweGU5ZWFjYmI5LCAweGJkYWJmYjhmLCAweGQyMGY3M2IxLCAweGRmN2JmM2UwLAorCTB4YjQ3ZjEyYjEsIDB4MTM3ZTEzYzQsIDB4Zjg0YTdkZjcsIDB4YmE0ODVjNDgsIDB4MzdkOWFkOTgsIDB4YjE3OTQxNWYsCisJMHhhNjcwMTRhNiwgMHhjYTU5YzI4NCwgMHg3ZWI4MzU4ZCwgMHhmNDViMWZhMiwgMHgyN2NmYTAyNCwgMHhkODgyOWVlZCwKKwkweGNjYTU3YjQwLCAweDIwMTU5ZDFlLCAweDhmN2JlNDk3LCAweDE5ZWU2NjJmLCAweGVkNjE5MGIwLCAweDE2NTk1YmU1LAorCTB4YjE3ZWY3YzksIDB4YzI3ZGYyMDEsIDB4OTEyMmZiYzAsIDB4MmUyYzlhOWUsIDB4NTY5ZmI2MTcsIDB4Y2YzODhkZDgsCisJMHhmYjQyNTgzMywgMHg5NzVlMDYzMywgMHhlMDQwN2FmMCwgMHg1Mjc2M2IzMywgMHg4NzA4NzViNiwgMHhmOGU4MGQ5MywKKwkweDRmZGU0ODk5LCAweDhkZWU4ZjJiLCAweDgzYmIwOWQ1LCAweGUwZWIwYmQzLCAweDA4ZmI4MmY0LCAweGM2NjZiZmI0LAorCTB4NzQ4YzNjNzIsIDB4OWNmNDhhNzksIDB4ZmVlMmE2NGUsIDB4NzZmODE3ODYsIDB4MWIwZWRkMjMsIDB4ZjQ4ZGRkZWYsCisJMHg5ZDA0Y2U5ZiwgMHhhMjc0ZTc4YywgMHg2M2RiZjdhNSwgMHg3MTFkN2NiOSwgMHhkYzIxOGJiYywgMHgwZWU2MTVmMywKKwkweGM2NTRlZjY3LCAweGJlMjliYjcyLCAweDBmZDEzNDYzLCAweGNlMTk0M2YwLCAweDRlYjUzNDM3LCAweDY2ZGNhMDM1LAorCTB4N2ZhODA5YjYsIDB4YTBlYjEzN2UsIDB4YWUwNTc5N2UsIDB4MzY2ZjQ4ZGQsIDB4NzlmODliOTcsIDB4ZTljNmQ5YmUsCisJMHgwN2QzOTMyNiwgMHgxYzI3M2ZiYywgMHgzZTQzNmQzZiwgMHhhM2U3ZTAxYSwgMHg3MzQ3YTQ3OCwgMHgyNmRlM2QyOCwKKwkweDAxMWJmNGUwLCAweDNkZjFkMGRmLCAweGYxZjhlMTc3LCAweDAyOTczYTFkLCAweDYwM2IwYzgzLCAweDNhZTgzMWY2LAorCTB4NDllODAxNmMsIDB4ZjQwNjUzZTQsIDB4Y2ZiNDBiMGYsIDB4OWYyMjE1YjIsIDB4MTUzOTU2YTUsIDB4YjMwMmViYzQsCisJMHhkN2RjMWVmYiwgMHhmOThkOTQ3MiwgMHg1ZjNhY2Y0OCwgMHg2Yzk3YmMzZCwgMHg3ZWZlMTE3MywgMHg2NzY4OWViNCwKKwkweDkwNjg2YzExLCAweDJjNDBmNTlkLCAweDk1NTdlM2I3LCAweGZhN2ViY2ExLCAweDUzY2EyMzViLCAweGJkYmZlNDg3LAorCTB4MDFlNWQxYjksIDB4NTBjN2YxZjQsIDB4MGUxMjNmN2MsIDB4YTczOTVhZGYsIDB4MmU1ZmI3YzUsIDB4ODAzOWNiMDQsCisJMHgwZjhlNWFkNywgMHg3N2M3ZTc2ZSwgMHg3Y2I5NTAyYywgMHgzZDZiOTYwOCwgMHgzZTQ0MjNlMSwgMHhjMWZjM2MwOCwKKwkweGViODRkYWVjLCAweDQwNDVjNmNjLCAweGZhY2QxZGU5LCAweGZhNGY3YjYxLCAweGYzNThjNWY4LCAweDJmNjdiMzRmLAorCTB4OGM1ZjhmYWMsIDB4YzdkNTA4NGQsIDB4ZDdhZTg4YmEsIDB4NzU0NzgwMTUsIDB4NjE1MGVhOGIsIDB4ZWM4YmY1MGIsCisJMHhmYWZmYzQyZSwgMHg3Njg5YzU2NiwgMHg5NTE2ZWVlMSwgMHhmMmZkNjFlOCwgMHg3MjliZDIyOCwgMHg4ZjZlNWZiZCwKKwkweDg0YWVjNDE5LCAweDZiM2ZmMDUyLCAweDVhN2QyNThmLCAweDVmZTYyYjFiLCAweGZjYzBiZjA2LCAweGJhYmM2ZGE3LAorCTB4M2Q3OWU2ZGQsIDB4NmZhZDBlNTAsIDB4ZTExMjI2ZjksIDB4NzE1OTNmZGMsIDB4NGFiYjQxMWQsIDB4ODU4MThmYWIsCisJMHg4NGRmNzgxNCwgMHhkNzA4MjliZiwgMHgzMjJhMGRjMSwgMHhhZDllZjVkNiwgMHhmNmYwOTUyNiwgMHg4YzM3OGUyZSwKKwkweDBhMzNiZTc1LCAweGE2YTdmNWQ2LCAweDdiNDBiYWQxLCAweGFmOGVlY2ViLCAweGViMDVkZDZmLCAweGZhZTY4ZGFmLAorCTB4ZWI5YTM2YjksIDB4Y2ViYmQzZTcsIDB4YmI3YTQxZjcsIDB4OTI3NGUxNzYsIDB4OWVmNGMzN2IsIDB4ZGNlNTAzOGYsCisJMHg3MzBlZmQxYiwgMHg2ZDRhY2MzOSwgMHhkNGUzZmI0NywgMHg2OGZiZTUyZSwgMHhhMjM1YTEwMCwgMHgwYWVkMWU5ZiwKKwkweDA2YTljYTM1LCAweDFjNDQxNWRiLCAweDFmMDAzOWY1LCAweDE0NWI1Zjg0LCAweDA3M2VhZmMxLCAweGQ2OTMyZWY4LAorCTB4ZDlkNzAyNzksIDB4MTRiMjMxNmUsIDB4ZmMwYjNmNjgsIDB4YmFlNGZkODgsIDB4Y2Y3YWM0N2YsIDB4OWE2ZjVmODQsCisJMHhhMGI0NjhlZCwgMHhiZWJmZDUwYiwgMHgxZTIwYmM2ZSwgMHhhMmQ1N2M2MCwgMHg2NjljN2RhNywgMHg2N2M0NGU1MSwKKwkweDEwYzVkMWIzLCAweGMyODNkZWZmLCAweGFiNzgxMDNlLCAweGJhNzczNDExLCAweDBmMDFjODY1LCAweDgxZmQ2ZmVjLAorCTB4N2ZiZTI3MzQsIDB4NDhkOWM3N2EsIDB4NDdlZDE5OWQsIDB4N2Q4NzZhOGYsIDB4NTY1ZGU5YTksIDB4NWJiYjg3ZDQsCisJMHgzOWRlNWVjZSwgMHhjMTliZTQ4MCwgMHhiYjNiZWIwZSwgMHgzM2RkYjBlZiwgMHhjZmVkNDdlMCwgMHhmZDg4YmY2YSwKKwkweDBkY2RlYWQ1LCAweGFhMjI3NjgxLCAweDFhOTQ1MjU5LCAweGRhNWE1MjNhLCAweDIyMGNhOWZlLCAweDBmMjg2M2ZlLAorCTB4NTdjYzE5YmQsIDB4M2U1ZWZiMGYsIDB4NTRkM2QwNTAsIDB4ZDdiZTQwZTYsIDB4Y2RiYjdiZTIsIDB4ZTAwZjYxOWQsCisJMHhiNzM2Y2RkYiwgMHhmMzg1ZDcwMywgMHgzZWQyZTZhNCwgMHhlODNlYjBiMywgMHgwNjc5ZTljZCwgMHgwYzZmZWUxZCwKKwkweGVkMjliZDQzLCAweGI0NGZiOTNkLCAweGZkNzMyM2M3LCAweDVlZjY5M2ZiLCAweGNlNzNmZWY3LCAweDY4YzdkYTBmLAorCTB4NzRlYzgzZGYsIDB4YzUyYzc0MGUsIDB4MjgyZDVhNzMsIDB4MDMzMjA3ODUsIDB4Nzg0YWRmZjcsIDB4YWNmYjE2YTksCisJMHhhYWI3MzA4ZSwgMHhjZGI2MmZiMCwgMHhjYTUzYjI3MCwgMHg3ZGQwYWM4MywgMHhmMzg2OWUwMCwgMHg3ODBmMzg3ZCwKKwkweDM3N2ZjZjEwLCAweDRlMTFlYjNiLCAweGRhMWIwZWZhLCAweDkxYWZiMGFmLCAweDUwNTYwZmI4LCAweGY4NzA4Yzk2LAorCTB4OGM5YWVjYzAsIDB4MjU5OWZlZjIsIDB4ZjRmYWU4OGMsIDB4MTRmN2NjYjMsIDB4YmI0YjdhNmMsIDB4MDM2NmU4OGUsCisJMHhmZmU4ODJiYiwgMHg1Yjk5ZGQwYSwgMHhlYmUyNjZkZCwgMHg3ZTdlZjhiMSwgMHhlNTBlYTM0NywgMHhhMWNmOGU2ZiwKKwkweDc5N2FiOTQzLCAweDQ3NGViMzQ3LCAweDJmMTllMGY0LCAweDBmNTY3NGUwLCAweDU0ZGZlYmViLCAweGJhNDhmZWE3LAorCTB4MmU5ZTE0OTgsIDB4YWJmNmYwNDIsIDB4Yjg0OWJjNDAsIDB4MzBmNDEyOGQsIDB4MzI4NmUxMGEsIDB4YjI3ZjRiYjksCisJMHgzNzBmYzIzMywgMHhiNTRiMGJjMCwgMHg1OGM3OGU4NywgMHhhOWMyMDY2NywgMHg3ZDYzYzVlZCwgMHg5YWJjNjEzYSwKKwkweDhhZGQ4Zjk3LCAweGFiZjlhOTcwLCAweGNjNjE4ODg5LCAweDQxOGYyZjVmLCAweDMwYjJmZmJhLCAweDcyNzM1ZGJjLAorCTB4MGY1YjlkNzEsIDB4M2RhYjc4YzQsIDB4MTU3YmU0OGIsIDB4YmRhMjMwZWIsIDB4YWRkZDcyMDAsIDB4ZDJlYjkwMGYsCisJMHhlODY3ZGI4ZSwgMHhmN2YxYzYyOCwgMHgxMmQ5NTEwZCwgMHhlNzU5ZjM4MCwgMHg0NjE2MjRiMCwgMHgzZjcyYzg1ZiwKKwkweDAwMzk2ZGRhLCAweGUxNTVmNDdmLCAweGZjYzVlNGY5LCAweGRhNDc2ZTE4LCAweGIyNWFmYzgzLCAweDk2NzhiN2RjLAorCTB4ZTdhMThjN2IsIDB4OGUwZGY2ZjEsIDB4YjE0ZTdmMjQsIDB4Yzg3YTFlYzYsIDB4YTc4ZGVkY2UsIDB4ODFjZjVjZWQsCisJMHgzYWUxNzY2MCwgMHhlMmM1ZmQ0ZiwgMHhhOWQzNDJmMywgMHgwY2FkZjdkYywgMHhkYjZhNzRlMCwgMHhhMDVlNzliYiwKKwkweGUzYWM1M2EzLCAweGRmOTA5N2Y2LCAweGI5ZDMzNmJlLCAweGZiZjA3OGFlLCAweDdlMmM0Yjc5LCAweGZiOGFiY2ZlLAorCTB4MmY1NWQ4NTIsIDB4NDA3NTY5YmMsIDB4YmIyZGUyZmYsIDB4ZjAwMWJkZTMsIDB4YmZlOThhYmIsIDB4NGNlYmE2ZWUsCisJMHg4ZmVmOTc5YywgMHgyMGZiM2JlOSwgMHgyNzRiZDgzZSwgMHgxNjUwMWQxMiwgMHgzYzZhZjhiZiwgMHgzNzM4MDNhNywKKwkweDE0ZmY0NTBkLCAweDYzM2Y4ZmU3LCAweDVkZGQ4MDUzLCAweDNkYzZiMGJjLCAweDFmYzAyZjI2LCAweGY5OTIyZTczLAorCTB4MGVmYWViMDIsIDB4YWI4OTFlMjMsIDB4ZmRhOTk5Y2YsIDB4OWUyNWJiNzYsIDB4ZDYyZjRkZTQsIDB4OGY0ZGU1MGIsCisJMHg3ODQ4YmFmMCwgMHgzYzI1ZGI2YSwgMHg5MTNlMGRmNywgMHg5N2M1ZjY4MSwgMHgwN2M1ZDgzZCwgMHhhZjdlYzFlYywKKwkweGRjN2IxNjM3LCAweGY1ZmM3MjYzLCAweGRlYTc3ZGJmLCAweDVlZjMwZWU2LCAweGFjZmYxODhiLCAweGRhMTI3ODczLAorCTB4ZDZjNmM1N2QsIDB4ZTFmOWMyY2IsIDB4MGI1MzM5ZTQsIDB4NTdjZTM3YTcsIDB4N2ZiOGUzNDYsIDB4MWYxYTY3MzksCisJMHhlZGRiNWQ2ZSwgMHgzZmU2OWZiYSwgMHgwYWFiMDdkOCwgMHhmNDRiMGJiMCwgMHhkY2VkMzc5ZSwgMHgzMjZhYjA1ZiwKKwkweDNmMmU2YmQ0LCAweGQ5Y2U4ZTNiLCAweGRjODQ1ZTkyLCAweGRiNzk4YWJiLCAweGY0YjU3ZjkwLCAweGJlZmRmMTIxLAorCTB4NGIyYTViYzQsIDB4NjkzZGJjNDUsIDB4MTFiYTcwNzcsIDB4NDNmOTIwZmMsIDB4Mzk2ZDQ3MGIsIDB4ZTEzY2M4YzEsCisJMHg3NWNmMDNjZSwgMHg3OTkyMzVjMywgMHhiZWRlMWU0MSwgMHhmZTdhNDBjMSwgMHg0ZTFmZjNjZCwgMHgzZjdhMDNjZCwKKwkweDViNjBkNmI2LCAweDVhY2U1MzBhLCAweDUxZWQzYmI3LCAweDM2MGRhN2Y0LCAweDFmYTgxNGQ5LCAweDg2NWViNDczLAorCTB4NGViOTVmN2MsIDB4MWMzZDIzNzUsIDB4ZTI3YjdiNWIsIDB4MDBiZjI4NzQsIDB4NzU4MmFkZmUsIDB4NTAzMDZlNTQsCisJMHg3NzBkYWNmYiwgMHhjMTA5ZmI1MCwgMHgxMmViOTVkNywgMHg3Y2JjYTNmYSwgMHg0NDgxZmRiMywgMHhlZmFjZTNjNCwKKwkweGYxMWViZmVlLCAweGViNjhjNWIyLCAweGFhY2ExODNmLCAweDI2M2RjNTI2LCAweDM2NzNkZTAwLCAweGI3ZDUwNjQ2LAorCTB4ZGMyY2Q4ZTgsIDB4NTMyYmM0ODcsIDB4MWRjZmRkM2MsIDB4ZGM2MzFlYjAsIDB4NmI2M2M0NGYsIDB4MThkNTFmODgsCisJMHg5MmNjZWRjNywgMHg5YWVmYjAyOSwgMHhiZWM5NjcyMSwgMHg4YTI3YmRkZiwgMHg2NjJiYzlmNCwgMHhkNmM4ZWM5NSwKKwkweGI3ZjNmZmMxLCAweGY0NWVhMTJiLCAweDM2NDlkZTlkLCAweDU4ZjNjMDllLCAweGNlODY2NzgxLCAweDhhOGZhMDQwLAorCTB4N2EyZjVlMDgsIDB4Njg3NjRmNTEsIDB4NzgyNTQ1OTEsIDB4MWQ1YzgyYjcsIDB4NjVkZTRhNDMsIDB4N2VmZDBiMWUsCisJMHg0NzUzZGYyMSwgMHhmZDBlMWVhZCwgMHgxODE4YzZjNiwgMHhiNDVmYTFlYSwgMHhhMDY2MjljZSwgMHg0ZTc5N2YyNywKKwkweGMwNjc2OWZmLCAweDk3MzM0NjdlLCAweDQyZTJlZDFlLCAweDVmNmEwODY2LCAweDBhN2Q2NTExLCAweDRjMTg1YWVkLAorCTB4MjhiMGZhOGYsIDB4ZDhmOWY4MjIsIDB4ODEzZGFlY2IsIDB4NWI1OGM0ZjYsIDB4YmZhNGJiNzAsIDB4YmZhMDM4OWMsCisJMHhiMWI5N2VmZSwgMHg4ZmU3Y2Y3YiwgMHg1NjdkODA0YywgMHg5ZWM5NTNlYywgMHhkZTVjOTBiZSwgMHg0MWNhZmI4ZiwKKwkweGRhNTFiZjdjLCAweDI5YmRlZjA0LCAweGY5ZTZmM2EwLCAweDkwNTJjYjYzLCAweDg2MTQwYWJlLCAweGU3NjNhZTdlLAorCTB4NWNlNWYzYzMsIDB4MDE4YzlmNDEsIDB4ZjFmOWZiOWUsIDB4YmIzOWQxM2MsIDB4N2Y2YzhlYmIsIDB4ZWViY2MxNWQsCisJMHhlMmZmYWUzYSwgMHhjYjBmZDllNSwgMHhmNzNiNGVhYiwgMHg4N2Y1Njg2ZiwgMHg1M2ZlN2Y5NiwgMHhmMDc4YTNmYSwKKwkweDBiNWUxOWFiLCAweGU1ODVmZjk1LCAweGZlNWMyZGM5LCAweDU2ODVlNTZhLCAweDY5NzVjODVmLCAweDRlN2Q1YmQ3LAorCTB4Y2YxM2QyMGQsIDB4ZDdlMjc5MDksIDB4ZmU3YTQ2MTcsIDB4NmI4ZjllMzMsIDB4OWU4NDg2ZTIsIDB4MjE5ZWMxOGYsCisJMHhlYTg3Nzk3OCwgMHg3NjBlNWNlOSwgMHg2ZmQ4ZWRkNywgMHg1NzExZDk4MCwgMHg2NjVhNGIwOCwgMHhiOTQ2OGFjYiwKKwkweGRjZjE2NGQ2LCAweDk3ZTAxNzE5LCAweGE4ZDRkZmVhLCAweGVkZDFmOTQzLCAweGZiMDQzMWFmLCAweGY1ZjllNDZkLAorCTB4ZmZiZTM4OWUsIDB4ODc1ZTM4ZjIsIDB4ZmI5ZDJiZjMsIDB4OTI3OTQ0MzcsIDB4MmY2ZjM4ZjUsIDB4N2UzMDMzYTMsCisJMHg4NWZiY2IyNSwgMHhhZjc2OTBmYywgMHg5ZGE1NzdiNCwgMHg3ZDU5ZWQyYiwgMHhiMzY3YjcwMywgMHg3ZTQxZGQ2MywKKwkweDVmYWZkNjMzLCAweGVkMTgzZjkwLCAweGVmNzNlNDc0LCAweGU3ZGEyOGFlLCAweDEwN2I4YTY3LCAweDczMTU2OWYyLAorCTB4YTAxNzE0M2QsIDB4N2MwZGViMDcsIDB4YmNmNWRhZmQsIDB4MTNlYzI3MTYsIDB4NDEzYjI2ZTYsIDB4MWQxY2NmYjYsCisJMHg4ZDZmOWU1ZSwgMHhjMmZmNTNkMywgMHg0MGNhNmZjNywgMHhiNmIzZWUzYiwgMHhjZTUwMzM5YiwgMHhmZmYxYTY3ZSwKKwkweDBmMGZjNGY2LCAweDUwN2Q3ZTBiLCAweGUxNTg5M2U4LCAweGY5MDg3ODI3LCAweGVkYzBlYTA4LCAweGZlZjAyZGFlLAorCTB4ZTI2ZWM1OGEsIDB4YmUyZWRmYWIsIDB4MTc0N2NhOTEsIDB4OGZlN2E0MmYsIDB4ZmNkMjY1YzUsIDB4ZGM3N2MyYjYsCisJMHgyM2E3MDBkOSwgMHgxN2QyNTUyYiwgMHgzZWVlOGQzMywgMHg5MWRlZjBiMSwgMHgxYmY5MWQwOCwgMHhjNzk5ZDcwZSwKKwkweDNiNjMzMzZmLCAweGNjZTVmM2EzLCAweGYyNmMyN2M3LCAweDFmMDFmODA2LCAweGU5MGM3ZGMzLCAweDA5YWY5Zjc5LAorCTB4OWQyYTVlYmMsIDB4MmI0ZWIzNTYsIDB4N2E2ZWFkZWEsIDB4YjdhMjEwM2QsIDB4YTcyZjExZGIsIDB4ZjYyMjY3NTksCisJMHhmYTNhNTVhYiwgMHhmM2ExMjkzNCwgMHhhZjVjYzgzZiwgMHgyMzY2YmY2MSwgMHhkMzdjOGZlYiwgMHg5MmY1YzUxYywKKwkweDAyOWJkZmI2LCAweDllZDBhYjdmLCAweGQ0MzNmMjg1LCAweGNjZTQ2MTVmLCAweDdiNWU4MjNiLCAweGM0ZWY1ZDViLAorCTB4OTMzM2JjOTEsIDB4NTZlYjRlZGQsIDB4M2VmNDRlMjksIDB4YjRlNzA3Y2UsIDB4YzYzOWYxMGYsIDB4OTc1ZmQwODksCisJMHhjNzc1YjU2ZCwgMHhjNzc5Zjg1NSwgMHgxODVjNzFmZCwgMHhmZTRmNWM3ZiwgMHhlZTNhZWQxZiwgMHhkNTcwZTc4OSwKKwkweDI5NjQ4NWZhLCAweGM0Yzc0MmZkLCAweGQ5YzUxNjdlLCAweGU4NDRmYzgyLCAweDBmZTcwZjBmLCAweDQ4ZGUzYWJhLAorCTB4ZDUxMGRiZmIsIDB4YThiOGM1ZTksIDB4M2U3ZTY2ZjcsIDB4NTVlNTFhNGYsIDB4NWE5NWRmZDAsIDB4ZmU4ODU4ZGMsCisJMHg3MWM2N2ZiMCwgMHhiYzdkYTYzZiwgMHhmMWNmMTkyNywgMHg0ZThkOTJiZCwgMHgyYzVjZTNmNCwgMHg3NjY4MGUzZiwKKwkweDQ3ODEzOGYxLCAweGQzNThlYjQ3LCAweDAzZWM4ZGUxLCAweGYwZWM0YWViLCAweDM0YTExYTE0LCAweGY4ZDIyNmM0LAorCTB4MDk2ZWFjNDksIDB4MTFmYTBkZTIsIDB4YTNkYmYyMzAsIDB4NzQzYzhhN2MsIDB4MjEzYzk3NDMsIDB4OTFhNTYxNDcsCisJMHhhZGRiNzdjOCwgMHhiYzNjNTMxZSwgMHg1ZDQ2NzQzNywgMHg1M2VkZmEzZCwgMHhlMjNjNzhhYiwgMHg2ZGU5ZTI4NCwKKwkweDFiOGQwZWNmLCAweDVlMzkzMmNiLCAweGJiODhhZmYwLCAweGQwMzQ2ZmU2LCAweDNlMzdmMmJhLCAweGZjZDFmMTQ2LAorCTB4OTVlYjU3OGQsIDB4MWY5NDM5MDAsIDB4MjdmZWEwNmYsIDB4OWJkMzlkNWUsIDB4ODUxZjE4ZmMsIDB4ODgwZWJmOGYsCisJMHg0NjYyZjRlNywgMHg4YTEwZTExZiwgMHhiZmE1ODY4NywgMHgzMTNmZjE3ZSwgMHhmNjA5ZGNhZSwgMHhlZjNjYjA1MCwKKwkweDIwMjQzZjE3LCAweDBjZmFhMTZmLCAweDNjN2Q3M2M5LCAweGMwN2YyM2Q3LCAweGQzNTgwNTdjLCAweDdjYzg2NjFmLAorCTB4OGZlNDBkODUsIDB4YmU2YzZhZGQsIDB4ZGU1MWUzMDYsIDB4YmM0MzFkMWEsIDB4MmJmOWVmYjcsIDB4Y2Q2NzZiYzUsCisJMHhiNmJjNTA3MCwgMHhjZjdkZmRmYiwgMHgzZmY2YzcyYywgMHgxMTgzNjJjYywgMHg4N2JlMjlmZSwgMHg3Y2NmZjQxNSwKKwkweGM5ZTNjOTFiLCAweGIxMzI2ZWRmLCAweGQ5YTViMDI1LCAweDNjNTMzNzZmLCAweDhlOTU0ZDc4LCAweGVlZDE3Y2ExLAorCTB4ZTgzMjY2MWIsIDB4YTBkYjVjNzgsIDB4NDdmOGUwMmIsIDB4MGVmMTI4MzksIDB4N2M0NDY0MDQsIDB4ZmMyMWJjNDgsCisJMHg2ZTMxOThiNiwgMHg1ZmFkMDJmYywgMHg3ZTgwY2JhZSwgMHhjN2RjMDRmMCwgMHg0ZTkwNmI5NiwgMHgxNWQ5NTU3YSwKKwkweDc1YzgxN2Y0LCAweDRjOWY0ODVkLCAweGZhNjlmZjhhLCAweGMzZDQ2N2U0LCAweDljNWZjNWI3LCAweDc0ODE5ZTFlLAorCTB4NWFjM2Q1YWUsIDB4NzE2NGRiZmQsIDB4MGJiZjYyNTUsIDB4NDIxM2UxZTksIDB4ZDc4OTRkZmUsIDB4N2UzMDQzYzQsCisJMHhjNzZmMDYxNiwgMHhmMDBjMWM4NCwgMHhmZjE5ZGY4ZiwgMHgxZmUzZmMyMywgMHhlMzA5MWNhMSwgMHhjOGM2N2YxZiwKKwkweDlkYTM2ZmU1LCAweDBjMjkzNmRkLCAweGU2MjdiY2JmLCAweDMyZWVhZGQ3LCAweDZmOGNmZWEyLCAweGIzY2FjMjUxLAorCTB4YzY1MWFiNmMsIDB4ZmFlMDU3MTMsIDB4MmI0NGZjNjQsIDB4YjdjMGMzOGYsIDB4ZGU1ZmZiMTEsIDB4N2IwYmJhZDQsCisJMHgxNjVlYzZlNSwgMHgxNWRiZTY4ZCwgMHgzN2I5YzNkZiwgMHgwNDZiM2NjYywgMHgzMDE2M2I5ZiwgMHhlYTNhYTM4YSwKKwkweGE4MmJjOTE4LCAweGIwOTNiOGZiLCAweDAwMjNmMjk1LCAweGI4ZTA0ZjFmLCAweDlkNjM4YTE3LCAweDFkOTIxNWI2LAorCTB4ODY1NmUzMjQsIDB4ZjhmM2UwZDgsIDB4Y2ZkOTc4OWUsIDB4NmZjNDQ3ZjUsIDB4ZTI3YTBmN2EsIDB4YjA1ZDYyNGYsCisJMHg1ZmIwNjdmZiwgMHgxNDE2MDJmYywgMHg5OTcxOTE5ZiwgMHg2MmFmM2FmOCwgMHhjNDc1NDdjYywgMHgzYmRhZGZjOCwKKwkweGYzMDRiM2NlLCAweDMzODZiYTNmLCAweDhmNTA1M2U3LCAweGEyMTViNTI5LCAweDcyY2ZiNTNjLCAweDY2ZmM2MWI2LAorCTB4OWZlZTI5ZjksIDB4Zjk4ZjNlNWYsIDB4NzkwMTJhOTYsIDB4Y2EyYzllMDUsIDB4MDViYzQyMDMsIDB4MGE3NjA3ZmEsCisJMHhhYzUzYjZmOSwgMHg1ZmU0ZjQxYiwgMHg1YWJhZjllMywgMHhhNGY0MDNlMiwgMHg3NTZlODdjNCwgMHhlZDc4NGFhYiwKKwkweDAyYTdhZjBhLCAweDQzZmVkYWYwLCAweGY5MTlmZDc4LCAweGU0OGI5ZGYyLCAweDg1MmYwZmNiLCAweDkxNzFmZTZlLAorCTB4OGM0YmYzNzQsIDB4M2IwOTBjNmYsIDB4NTc4ODY3ZGYsIDB4Njc0MDdjZWQsIDB4YmVmODgzNDcsIDB4NzhkYjNhMDcsCisJMHhmOWQyZjE4OSwgMHhhN2E4OWZlNiwgMHg1ZGZhZTE0MiwgMHg1YzI4NDI3YywgMHhmYWViMTY1NywgMHg1MTY2YmM5MSwKKwkweGQ1N2E3MGNlLCAweDRmZmU2MDk2LCAweDEyZDg5MWU3LCAweDFlN2E1Yzg2LCAweDNiN2JmYWM5LCAweDE5Njc4ODhkLAorCTB4ZDVlYjkxMDcsIDB4ZjZjODhmZTYsIDB4MGYyNTE2OWEsIDB4YmI4NTlmY2YsIDB4ZTAzOWQzY2YsIDB4ZThiZmRiNzQsCisJMHgwNzlhMTAxYywgMHgwZjlkZTdjMiwgMHgzOWZjOGRlNCwgMHhkY2QwMWQ1NiwgMHhhNjc3ZmMwYSwgMHg3NTI3NDhjOSwKKwkweDM3N2UzOTk1LCAweDdiZjdmZDBhLCAweGEwZTdjYzBkLCAweGZmZDgxMWZlLCAweDVmZmJjNjBhLCAweDAzYmNiNGQxLAorCTB4MzA1NzU3ZmQsIDB4NDc5YzU3YmQsIDB4MWRiOWVmOTUsIDB4N2M3YzgzMTUsIDB4ZjI5NTVlYzUsIDB4ZmU2NmQ4YmYsCisJMHgyYzQ1OGViYywgMHg0Yzc0ZmY0MSwgMHgwMjM5OGU4MSwgMHg4YWViMTllMCwgMHg3ODAwOGU2MiwgMHgwN2I3OGRjNiwKKwkweDc5MzllNWQ1LCAweGMxMzc5OGFlLCAweGZkZTgyYmRkLCAweDgyYjMxYmE0LCAweGFlNzhhN2ZhLCAweDNhOWU3YTA4LAorCTB4OWVhODM3MmIsIDB4YTgyMjM3NWUsIDB4YTM4NWVmN2YsIDB4ZGU5OWVhODMsIDB4NjdmYTgzNmIsIDB4YWEwZTRjMzcsCisJMHgxY2RlMzRlNywgMHhhYjE4ZmZkNCwgMHhlYzE0N2M3YiwgMHg1YmZhM2ZiMywgMHhlYmNjM2YwMCwgMHhkNjBjYjhlYSwKKwkweGI3YWM0MzNiLCAweGEwZjI5YWVmLCAweDVhZmQ4MWY3LCAweDUzMzgxZTMxLCAweGNmMTdjOTkwLCAweDAwYWJkZjhkLAorCTB4ZmYwODY3MWMsIDB4MzliZWU1Y2UsIDB4NTVjZmUzNDEsIDB4Njc3ZTg4YWIsIDB4MDQ4ZTFhMzYsIDB4YWNmNDY5ZmEsCisJMHhjMDJhNGY2YiwgMHgzOGE3YzZiOSwgMHhiOTVlYTE1YiwgMHhlY2Y5ZjgyNiwgMHhiZGU4MWIxZCwgMHhmNmUwYmVkOSwKKwkweGViODM5YmI5LCAweGQyOWNkZTgzLCAweGI5MDFlNzlmLCAweDQ2NzJiZjI5LCAweDg3ZGZiMDQyLCAweDk5ODlkMDg1LAorCTB4YjU5OWY0ZTQsIDB4N2FhNWZmZGMsIDB4MjRlODZhZmIsIDB4MjdlYzVmMTgsIDB4ZDA0MzhkZDIsIDB4OTgzOTI5OGQsCisJMHhjMTFkMjI2ZSwgMHhmYWY5NTM3NCwgMHgwNzA4YTFkNiwgMHhmYmEzZmMyZCwgMHgwYmM5ZTg2OSwgMHhmZTAwN2VmZiwKKwkweDdkMzA2NzE2LCAweGZiNGVlMTY5LCAweGVjNTY3NTgzLCAweDk1ZWZkODUwLCAweDZhY2ZiODUwLCAweDJhNzk3ODc5LAorCTB4NjMzYjg1MGIsIDB4MWZkNzIzM2UsIDB4Njg4ZmVkYzEsIDB4ZDk4MWZkZTAsIDB4ODljYTE4ZjMsIDB4YTgxNjNiYjMsCisJMHhlMzYzODcxOCwgMHhlY2ZmM2M3OSwgMHhlZDA3YWY4ZSwgMHgyZjg5ODQ3MywgMHg5N2M0ODRlNSwgMHhmODA0MjVkNiwKKwkweGU5N2M2NDdmLCAweGFmMTljNjM0LCAweDY3MTExNzY0LCAweDg0NGZmZGRjLCAweDhmMDBjODA3LCAweDBiMTFmMzAxLAorCTB4NzFkZDExOWMsIDB4M2M3ZjQ4YzUsIDB4NjUzZjJiNDksIDB4YjllM2ZhMDksIDB4ZmUyYmQyMDQsIDB4YmMzZDZjNzgsCisJMHgwM2U2MzQzZCwgMHhjNjUzYWUzNywgMHg4ZWJlNjRlNSwgMHg5MzBhMmJjYywgMHg4NDk3ZmM5ZiwgMHhiNDBmY2MwNCwKKwkweDc1ZjllMzQ3LCAweDNhN2NmYjRiLCAweDIyYmNjOTc3LCAweGMzMDJmMjI2LCAweDRmYTRmZmQ4LCAweDE0ZDdmMTlhLAorCTB4MjY3NjBiYjIsIDB4MGFmZWJkNzAsIDB4MTc2ZGQ3OGUsIDB4YTkyZmJjODgsIDB4NDcxYTdiZDcsIDB4MmE3YWRmYzYsCisJMHhjNTJhNWQ5NSwgMHgyODk0YmIxMywgMHhmNDYxNTNlNywgMHgzZjA5NDdjYSwgMHhlNjg1YmY1MSwgMHhhODE0N2Y4ZiwKKwkweDM4ZWU2YTQ3LCAweDBiZjUwN2JiLCAweDZjNjNmZGMwLCAweDZmNDA1OGI3LCAweGZkYmQ3ZTJiLCAweGQxMmI2OGJiLAorCTB4YWFlYmQ3NmIsIDB4OWMzNDJmYWYsIDB4ZDhjNDcwODksIDB4MjIyZDhlMDEsIDB4ZTQ0NWFmZGYsIDB4ZDZmNWM5ZmIsCisJMHhmNGJhYTQ0NSwgMHg5YzFlZDg3OSwgMHg4YWUzMjdmZiwgMHhjMjhkZmRkYSwgMHgzYWZlNzFmZSwgMHg5NzY0MTdiYywKKwkweDc2ZTVjZjJjLCAweDg3MDE2OWRiLCAweDI3NmUxNjBkLCAweDlkYjkxMzE4LCAweDFmMzlhYjUwLCAweGZiNzAzNmQ1LAorCTB4YWNkN2E0MGMsIDB4OGM3MTgwOTYsIDB4ZGZlYTE2ODksIDB4NGM2ODVjZGYsIDB4ZGY4NDcxYzQsIDB4NDJhNjc5NjUsCisJMHg0NTcyYzU3NiwgMHg3N2U0N2IyMSwgMHhmY2Y0ZDFiNiwgMHg4Njg1MDljZiwgMHg2ZmZmZTg0NCwgMHg2MDExYWYzMSwKKwkweDE2NjM2NTg4LCAweDkzNDM4ZjVmLCAweGU4OTJmZTE3LCAweDY4YzI1MmZmLCAweDM2ODk4ZDJhLCAweDVkYjY3ZmUxLAorCTB4NmE5MWY0ODEsIDB4NWRhOTE5NzYsIDB4OGFhNzFmMGQsIDB4MWFmYmU0NGUsIDB4YjQ2NGYyMjksIDB4NDI3MTgwNzEsCisJMHhkZmRmYTI2ZSwgMHhlMmQyZWRjNCwgMHhmZTQxODliMSwgMHhmMThjZjdmZSwgMHhkMGFmZGZjMiwgMHg1Mzk0MmVlYiwKKwkweGVmNzgxNGJmLCAweGVhZWZmZmM5LCAweGYxNDc2YjY3LCAweGFmZmZmNWFkLCAweDdmZmVlNDhjLCAweGYxMDgxZjE5LAorCTB4ODVjNzNiZmYsIDB4MWUyM2ZmZjUsIDB4ZmU3ZWVkYTIsIDB4MmRkODkzZTksIDB4M2U1MGQyOWYsIDB4ZWE3YTMwZWQsCisJMHhiNWQ1ZmNmMSwgMHg2ODc4ZWMxZCwgMHhhNGViZTdlZSwgMHg3ZGMwYzBiOCwgMHg2NzNjNGVkOSwgMHhiYjY0Y2YyZCwKKwkweDRiNmY0ODJjLCAweDdmM2I0MzE4LCAweDY5NmVhNzQ3LCAweGU5NWYzYzI0LCAweDNlN2MzNjY1LCAweGJmM2YyZDdjLAorCTB4Mzg3MWFlNTUsIDB4MGU1MjliNzEsIDB4ZmRjODlkNWMsIDB4MWYzODA2ODcsIDB4YmRmMTcyNWIsIDB4MjcxODZkYzksCisJMHhkOTk1Mzk1OCwgMHhiMjM1MGQ1MSwgMHhkYTJiMjJjNiwgMHhkODU5NmI0NSwgMHg0MTY4ZTNmMywgMHg3NzBhMTM0ZiwKKwkweDQyNzZmZTUxLCAweDBmYjdjZjE3LCAweDc2OTNhN2VkLCAweDczZTIyMTdlLCAweDJjZTc5NzU4LCAweDc5NzFjZjhmLAorCTB4Y2YxMTIyNDIsIDB4NWYzYWVkYTksIDB4YjI3ZDczYjgsIDB4YTQ2YWU4YWQsIDB4ZjBiZTgxYWYsIDB4YzI5MTg4ZTcsCisJMHhiYjMyZTY0ZiwgMHgwM2Y4ZTIyNywgMHhkODdjZjFiNywgMHg2NzdmMjk0YSwgMHhmMDFlOThlOCwgMHg3NWUwNDUzZSwKKwkweGQ3OWU1YWNhLCAweGZmN2ZjZWMxLCAweDQ1ZWQyYWJkLCAweDk0MzNlMzQ2LCAweDJkNTM5NTJiLCAweDU1MTNmNDNlLAorCTB4Njk3YTY0YjYsIDB4OTljNTZlNWQsIDB4ZTVhMmYyODMsIDB4MmJkNjM3NmQsIDB4ZTg2ZGYzZjMsIDB4OWRmZDcwOTcsCisJMHg5MWZiNDcyOSwgMHhmY2I4YzlhOSwgMHg1MmEzYjNkMiwgMHg4ZjFlOTA5ZSwgMHg2NGQ0MzhhNywgMHhmMTIzNmY0MSwKKwkweDcyNDA5Y2IwLCAweGMwMzQ2NTdlLCAweDkyZWQ3MmJiLCAweGYzZDc5ODVkLCAweGM1MTkxZmZlLCAweDVkYTgwZTliLAorCTB4NWZiMDcxNDMsIDB4ZTYxNjcwMDEsIDB4YTU2N2E5NjIsIDB4YTY0OGI3ZTQsIDB4NzE4YWE2NzEsIDB4Nzk4MmZmYmMsCisJMHhmZWYzZmMyMywgMHhkYTc1ZTVhYSwgMHhmMzAzMDFjZiwgMHg5ZDFkMDA0NiwgMHgwMzgzNzlkZSwgMHgwOWU1ZWVlZCwKKwkweDkzY2ZlNDExLCAweGFhODNkYTcxLCAweDQyNTIzZWU3LCAweDVjMWFhZWZhLCAweGQxMmQ0ZGRhLCAweDljODNmNDM2LAorCTB4M2E2MWY5ZGUsIDB4YjkzZTRkYzYsIDB4ZWQwNWFjZTcsIDB4YmJlODdmZDgsIDB4N2MyZjk4MmMsIDB4MTZiYmQxN2MsCisJMHg5M2YxYzAxNywgMHg5ZGU1MmE0NSwgMHg4NmY0MmFkZCwgMHg4OTdkZmI4NCwgMHgyNzFmZWUxYywgMHhkYzIxMTdiYSwKKwkweGRkZmM1YjZmLCAweDJhM2NjMGQwLCAweGU4ODEzMGI2LCAweGE1NGZiNjc5LCAweDljYjc1YzkwLCAweDE2OGQxY2RkLAorCTB4YmFiZDc3NGEsIDB4MmVhODJlMzksIDB4ODliNTQwZjUsIDB4YmYzYjg1ZDUsIDB4NjllODI0YmMsIDB4NjMwNmQzNzYsCisJMHhmN2U3MDNhYSwgMHgzOGZhNDJhYywgMHg3NDc0ZTdhZSwgMHhlN2M1OWI3YywgMHhhN2FmZjRjZCwgMHgxMWIwNjliYywKKwkweGI0N2Y4M2VkLCAweGVhMmI1ODk4LCAweDgxODc3ZDMzLCAweDhhYmI0OWU3LCAweDhmMGJhMDE1LCAweDlkNzZiZmMwLAorCTB4YTY4ZTVlN2IsIDB4YzYzZTY2ZjEsIDB4Y2MxOTQ3ZTUsIDB4ZWJlMDEwYjUsIDB4NzI0ZDk5NjksIDB4OTk4ZmJiNDEsCisJMHgyNWM2Mzg5ZiwgMHhhZTY3NWMwMSwgMHhlM2ZhMTg1MCwgMHhjMDIyZmZiMCwgMHhmZGUxNjc5ZiwgMHhhNWZkYTE1ZiwKKwkweDM3OTk2N2RkLCAweGY5NDgwZTU4LCAweDNjZjAyOTU1LCAweDc5ZjgyMWJkLCAweDY5NmZjYjY1LCAweDQzY2MxOTljLAorCTB4Mjc2MDIwNzksIDB4NzM1ZjllNjksIDB4ZDgwYWY1MGMsIDB4NjdlZDQxNDcsIDB4NTE5YjY2ZjYsIDB4MTQ0OTZmOGYsCisJMHg2Y2ExZWRmMSwgMHhmZWYwZjdkOCwgMHgxOGVjODhhZSwgMHg5MjdlMTg0ZiwgMHgzNmM1YzllNSwgMHgxN2NmZDYyMiwKKwkweDdjNzk1MDQ3LCAweDUxNzJhMzMxLCAweGFhZTNhNzIyLCAweDQ0ZWZiNzk2LCAweGM3NjZhOTdiLCAweDczOGUyMzE2LAorCTB4OTY4MWYxYzksIDB4OTk5YmQ2MTMsIDB4ZTg5NmVmNWYsIDB4MWUyMWFmM2QsIDB4MjgyNTJjZDksIDB4ZTFiMzUwNGUsCisJMHgzMmVjOTFhYywgMHhkMTUyOWYwMSwgMHgwMGYwOGE1ZSwgMHgxY2MyZGMzYywgMHg1MDNjZjFhYiwgMHhjN2YwNjU1YSwKKwkweDViZmZlMGU5LCAweDYwYzNiZjcyLCAweGQxZGE4MGJmLCAweGI1MTczOTkxLCAweGI5NGZiOTVmLCAweDVhYmNmOTZmLAorCTB4ZjMwYzdhMDUsIDB4NDU4M2U0YmUsIDB4ZDhjZDFmNDIsIDB4MmY3OTY5MzgsIDB4Y2VmZDUxMDAsIDB4ZmM5ZDE5NjMsCisJMHg3OGY2NDliYywgMHg1MTZiYzA5MSwgMHg4ZjY0ZmRjNCwgMHhlM2Q4ODUxNywgMHhiN2RjM2RlYywgMHhlNjRhYzdhNCwKKwkweGE1YTIzZDI0LCAweGNjMDc0OTNiLCAweDIzZjdhMDZjLCAweDRkZGViZDg0LCAweDEyMGYyZDZmLCAweGNjM2QyNDVjLAorCTB4ZTQ2ODVkNWMsIDB4YzhjNzliZTYsIDB4YjI2ZjRhZWQsIDB4YTMyNmQ3ZjAsIDB4MzBlODE2YmYsIDB4YmEwNjNlYzgsCisJMHhlZDZiYWEwYiwgMHg5ZDBkMmZmMSwgMHhiNDFmMjgxOSwgMHhlN2NjYjg3NiwgMHg2MGU3YzJkNCwgMHg5YTVmY2YyMiwKKwkweGIzOGQ3MGUxLCAweDgwNzNjMDBkLCAweDg1ZjkzOTdiLCAweDEwY2E0NmYxLCAweDNkYzZkYmU0LCAweDZlZGYyMzc3LAorCTB4MGZmMzdjZTQsIDB4OTJiMzBmNDEsIDB4ZjA0OTExM2MsIDB4OWFmNGIzZGMsIDB4ZTc3ZmM0MWEsIDB4ZjIwNjUzMTIsCisJMHg4YTY5NjdiMywgMHgzZGZkMGYxYSwgMHhjMzkyMTRhYiwgMHgxOGE2OTdhMywgMHg5N2QzY2UxMSwgMHg3Yzg3MWUwZCwKKwkweDM0NWNjYjlkLCAweDE2MzhiNGZlLCAweDljMTg2ZWQ2LCAweDc5NDdlNWM0LCAweDYzMTk4MTlkLCAweGY0NDYyOTA4LAorCTB4NTA2YTlmMGIsIDB4OWE4YzJmYzgsIDB4NmJlMDIyNjQsIDB4ZjU1N2MwOTYsIDB4YTRhZGI3OGEsIDB4NmZmMDFjYWYsCisJMHhlMDFmNWUyOCwgMHgyYWVhYjMzZiwgMHhlZTcwMWYwOSwgMHg1MmM3Y2IwOCwgMHg2NmIxNTRhZiwgMHgzYjhjMGE2MywKKwkweGQxMWI2NTY3LCAweDgyNDc5YzMxLCAweDk1YjJkN2ZhLCAweDY2ZWFhZjg0LCAweGQ1ZGQ3YjRkLCAweGI5ZDgzZjg0LAorCTB4YjU4OWNmMTEsIDB4Zjc5ZjgyM2IsIDB4ODI3NjEyNGYsIDB4YmU5MTM5OTMsIDB4MjI1YTc3M2QsIDB4YjQ3MWFmMzAsCisJMHg0YWQ5NGY4MCwgMHg2YjcyODZjNSwgMHg4NGI2YjJmYSwgMHg3ZDNlYTAxYiwgMHhlZDg0ZWFhZiwgMHg4NTg3YzM3NCwKKwkweDFmMjgyM2ZhLCAweDFjZGVjY2VkLCAweDcxOWM1N2YyLCAweDlmYjA5MjM4LCAweDUyZWRjYWM3LCAweDg2MTllZjQ1LAorCTB4M2NlMmQzZWQsIDB4ZDhjZmQwYzMsIDB4NjE4NTkxZjUsIDB4NzNhMWRmN2UsIDB4MTFlNDczMmEsIDB4ZmNhMjBmOTUsCisJMHgzNDFiMWIyYSwgMHgyZmJlYzAyOSwgMHgzMTEyZDgzMywgMHhmMzY1ZTkxZSwgMHhiODNkYzU5MywgMHhkNGY4NDA4OCwKKwkweDdlMjRhYzQ2LCAweDg4N2U0NWE4LCAweDM0YzNmM2YwLCAweGRkYTE3YjhjLCAweDc5NDJhMmYzLCAweDMwNDc2Yzg0LAorCTB4MzQ3MDlmYmQsIDB4OTA5MWMyMjYsIDB4OTAzM2VmYjksIDB4OGE2ZjJlOWMsIDB4Zjk3MWYzYTUsIDB4ZWEyMzIyYjIsCisJMHhiMTZkZjJkNSwgMHhmOWMxMWY2NCwgMHg4NmNiYmRmNCwgMHg2ODc5ZjFmYSwgMHg2NDllZGU1OSwgMHgzOWJjYjcxOCwKKwkweGUzMDZhOWQzLCAweDE5ZGNmNDMxLCAweDBkMzljZWIwLCAweDhlZmUyNDg3LCAweDIzYmY4MGY0LCAweDc4MDdmMGUxLAorCTB4NGYyZjZhMGIsIDB4ZTA0OTcyMTIsIDB4MjM4YTJkOGQsIDB4ZWYzYTVhYmQsIDB4NTgwODljZDUsIDB4NDhiYTk5ZDcsCisJMHhlOWVjOTNjYSwgMHg4YzY2YzQ3YywgMHhlOTAzZmNhMCwgMHhhYmRmMWFiZiwgMHg3OTQ0Y2ZkYiwgMHgwZTU3NjczZSwKKwkweGYxNjlmYzIxLCAweGQzZGZmZTM2LCAweGNiYmRhMTg3LCAweDY4NjE2ZWZlLCAweDY2Y2I0ZDY3LCAweGY2ODY0ZGI3LAorCTB4NmZjZTE0ZGIsIDB4MTlhZmVhZDMsIDB4ZGRjNDc2OGYsIDB4YmQ5ZTVjNDksIDB4ZDVkMDcyMDUsIDB4NDFiN2IxOTcsCisJMHgwZTQwYmEwZSwgMHgxMWYyMGJiZSwgMHg0ZTJmZWZlYiwgMHg4Yjg3ZmFhNiwgMHhiNDdlNTQxZCwgMHg0Nzk1MWZiOCwKKwkweGYyNWZiZjg0LCAweGQxMDIxMDFkLCAweDJlMjQ5MmVkLCAweGM5MjQ5NzE3LCAweDY0ODJmYWY4LCAweGZmYzY2OTM0LAorCTB4M2EyMWRkZmIsIDB4NmM2N2RlMWIsIDB4OWQzNjMwOWIsIDB4YzE1Y2ViYjEsIDB4YTljNmY3ZmEsIDB4ZDNiNWZhYzEsCisJMHg4Yzk3MWI2MCwgMHgwYTE1ZGJlNywgMHhlZWU1YTNkOSwgMHhlMWZkNDE5MSwgMHg3YmM0NjRkYywgMHg5ZTVmYWMyYiwKKwkweDg2ZjQ5ZGJmLCAweGU4MTkzOGMzLCAweGI4ZTJhNmYxLCAweDM3ZDdmZWEwLCAweDlmZDUwNmE0LCAweGZhZDA3MjQ4LAorCTB4MGVjZjhkMjYsIDB4YjRiOWJmNmEsIDB4ZWNiZDUwN2YsIDB4YTQzMTkxOWMsIDB4ZjEwMTQ3NzcsIDB4Njc5MTAyY2YsCisJMHg4ZTc3MDcwNCwgMHhmYmVmMWIxNywgMHhhNGIwZGQ3NSwgMHg1ZmJkNjBiYiwgMHg3M2QwMzNlZiwgMHg1ZTI0M2UyZCwKKwkweDk5NTFhYzY3LCAweGJlOWJjNjA3LCAweDJjMWZlNDA2LCAweDc0ZTM0OGYxLCAweDBlMmZhZmUyLCAweGIyNWNlODU4LAorCTB4N2Y2ZjI5YmMsIDB4MzUwZmQ0MDEsIDB4ZTgwZjI4MTksIDB4NTViOGIyZDAsIDB4NmExZGFmNjgsIDB4MjgzMmIwNGEsCisJMHg2MTU1Y2IzZCwgMHgyYzhjZDhkNywgMHgyZDE1ZGU0MCwgMHhhNmY5NDI1YiwgMHg5MzkzM2U2NSwgMHhlZjc2OTdlYywKKwkweGMwZWViMjkzLCAweDEyMmUyYWYzLCAweGQ1M2RlNGY5LCAweGZlMTBhYWQ3LCAweDY3ZGYwNDVjLCAweGUxNWVlOTIyLAorCTB4ZjEyN2IwNzEsIDB4NGVmNGUxMmEsIDB4MGFlM2FlYmUsIDB4MTNmNTg2NWIsIDB4YjlmNzFmOTEsIDB4NmE3MWQ2MGIsCisJMHgwZTg1NjM2MiwgMHhiZWVhMTVmZCwgMHhjZjlmOTIwNCwgMHhiNmU5MGNhYiwgMHhmMjgxOWU3NCwgMHhhZmJmNjYwYywKKwkweDUzM2FjMDZlLCAweGJlMzk1MzcyLCAweDY2YTNjYTU1LCAweDdjNjg5OGNmLCAweDAyMTQwNWQ2LCAweDZkM2MxNmZkLAorCTB4YWUwMWVhN2EsIDB4ZmI3ZDc4ZmYsIDB4ODIwM2RmNDAsIDB4OGU4ZTkxM2UsIDB4MmM1NzMyYzcsIDB4ZjVhMTU2MmQsCisJMHhjMjc2ZmU3ZSwgMHg4N2VlN2MwNiwgMHhlZTEwNmZhNywgMHhmZGMxYmQ3YiwgMHhlZmUwMTI2NiwgMHgyMGRmMGFmMywKKwkweDEyOGI2ZjkyLCAweDcwYjRhZjg4LCAweGYyZTQ2MjNmLCAweGEwN2M4YmNiLCAweDlmYTZlNWY4LCAweDdlOTI5NmNmLAorCTB4MjY3MDZlOTgsIDB4ZTU2ZTQ5M2EsIDB4M2FkY2EwYTcsIDB4NzY0MGQyYjIsIDB4YWNiYmQzMzAsIDB4M2U4ZjQ4OTMsCisJMHhlNzJjNzQ0ZiwgMHg4Yzc3YTIzOSwgMHg2OTFkZjVjMywgMHg1Zjk4NjRjOCwgMHhhNTUyYmU1MSwgMHgxZmQyMGFmMywKKwkweGU3ZTNlZmVmLCAweDBmNTU4N2Q0LCAweGRiY2MyNGQ4LCAweDUyNTg3OGEwLCAweDNlZGNkZDI4LCAweDVkZTUxODZmLAorCTB4NTk2ZGVkNmEsIDB4ZWFiYzA5N2UsIDB4ZTY0YmIwMDksIDB4ODE3OWU0ZWMsIDB4M2Y1M2JmMmMsIDB4M2VlMDYwNzUsCisJMHgzY2Y5ZjE5NiwgMHg0YWY5NDEwNSwgMHgxZGFmNTk1NSwgMHgyZWM4ZWIzNCwgMHhjMjczYzE4YywgMHhhMjU0Zjc4OSwKKwkweDhkNTkxM2IzLCAweDlmMDE5MzQzLCAweDg2YmI3NTI3LCAweDJmZjUwNWRlLCAweGVhOGY3YTI2LCAweGRhMjIzZWExLAorCTB4ZWI4NDJmZjMsIDB4MGNjYWRkNWMsIDB4ZmFmMzBiMjUsIDB4MDkxYWFmMGYsIDB4YWNmZTdkZWYsIDB4MmU2YzQ5YzEsCisJMHhjZjM5ZmNlYywgMHg0M2ZkZWVjYywgMHgxYmQ4MTVmNiwgMHhlMWRkYjhiZCwgMHhjZmZiYzE0YSwgMHgxYWNkMWQ3MywKKwkweGM3YzM4MDdiLCAweDAwMjA0OTgxLCAweDA1NmFkYjE3LCAweDc4NzYzNzZkLCAweDNjMDFlNTg4LCAweDMxZDc0ZjU3LAorCTB4ZTA3OWUwNGYsIDB4YjFlM2M4YjAsIDB4YTg3M2YzMjQsIDB4MjRhNjFiYjQsIDB4NWQzMzM5NzMsIDB4YmQ5YmU5YzcsCisJMHgwMzdhNzBhYywgMHgwZjUwMmFmYiwgMHgxNzNkYjk0OCwgMHhiZjU1YWFmMywgMHhiYjcyOTAxZSwgMHhmZTUyMzU4YSwKKwkweGRiOTkyMzhhLCAweDFmMTViMzJmLCAweDk4MzVkZGQ5LCAweDJiZmQwMjg5LCAweDU2NjgzYzZjLCAweGYzZTRkOWI1LAorCTB4YjY5OGQyNjUsIDB4N2E2MGZiNDAsIDB4NzMyNzk3MzIsIDB4OGUzZWNmOGMsIDB4M2FjOTViZTQsIDB4ZmQzNTNlZjgsCisJMHgyYWY4MzczZSwgMHhmNTQzMzIzYSwgMHhjMzZkODU0ZiwgMHg2ZjhkM2IzMiwgMHhiNzlmYTI3MCwgMHg3NTZiZjA1MiwKKwkweDI1NmJlMmEzLCAweDUxZWI4NTNiLCAweDI5OWQ1N2U5LCAweDNmNTZhOGY0LCAweDhkMjVlODg1LCAweGQxYTk5YTNlLAorCTB4NTgzMWFjYmIsIDB4ZTk3YWMyY2YsIDB4YWY1Y2IyZGUsIDB4NjhlZTlkNzYsIDB4MGU2MWMxMGIsIDB4NmZmNTBiYWMsCisJMHhhN2I3Yzc4NSwgMHgzOGFkZDY4NCwgMHhlYjIxYTMwMSwgMHgzMWVlNjRhOSwgMHg3ODBmYjhiMSwgMHg1ZDA4ZWFkZSwKKwkweDIxNWY3NjlmLCAweGQ0ZmIxNWViLCAweGY5YzJiYmFlLCAweGJiZTYyYjU1LCAweDA0MjkzNTU0LCAweDI0M2VlZDJmLAorCTB4OWM3NmI0M2UsIDB4OTc4NTRiYzQsIDB4NDVhMmI3YzMsIDB4ZDY3ZTdjMjEsIDB4ZjIzMjFmNmQsIDB4NjFiYTRiNmYsCisJMHhlMDJmZjBjZCwgMHhiMDQ3NDk3ZCwgMHg2Zjk0MTJhZiwgMHgxZTQxYWI5NSwgMHhkM2QyODY2NywgMHg0NTZjZDYxYywKKwkweGFkNjFhOWJhLCAweGRmOTA1M2NiLCAweDFmYWY5YjVhLCAweGI1ODY3ZThlLCAweGE5ZjlkMzZmLCAweGEzOWFkZWQ0LAorCTB4N2E1MDA1OGIsIDB4YmY4ZTU3NzMsIDB4MTdlNzRmY2EsIDB4NWNmYzI3OGEsIDB4ZTlkZGMzZjAsIDB4ZTAxZTlmYTUsCisJMHhlYWEzNzMzNSwgMHhkNDE0MWM4YSwgMHg3YTNmZTQ0ZiwgMHhiY2IzOGUwOSwgMHg2M2ZhMjM1ZSwgMHhlNTNmMDk2NywKKwkweGFiNTlkNjg1LCAweDJlNWZmN2U3LCAweGNmMDE1ZWI4LCAweDBmZGQ3YjlmLCAweDc3NjRmNzI3LCAweDc2MTczZjg1LAorCTB4M2QxYTViZGIsIDB4ZmI4MWIxZmYsIDB4ZmU3Y2E1NWIsIDB4ZmYyMmVmNWEsIDB4M2IwYmI0MmUsIDB4ZTNjNmNlYWMsCisJMHg5ZWI5MWE3ZCwgMHhiZDcyNGY5ZSwgMHgzOTc5ZTg0MiwgMHg1YjM1ZDFjZiwgMHgxMzMwNWUyOSwgMHhmNjgwODBlZCwKKwkweGE1NmY1NmNmLCAweGQ5ZjFhNTc4LCAweGNiYjQ1Njk5LCAweGJlOTlhZThmLCAweDhmNTJmMzBhLCAweGJkMjc0ZDM2LAorCTB4YTk3YmY5NWYsIDB4NDBjNjNkZjcsIDB4NGQ2OGEyN2IsIDB4OTA3YmZhZDksIDB4NTI0NzM3OGUsIDB4ZGRhMmIxNWMsCisJMHgyMDQ1Y2UyMywgMHg2MzlmYTE2NywgMHg2Y2FiOTcwZCwgMHg5NWIzOTczNSwgMHg5MDA3MWZhOCwgMHhmZDhiZWM3ZSwKKwkweGY0ZjBhY2VlLCAweDY4MDg3ZTQ1LCAweGU3NzliZDI3LCAweDc3OWZjZjc0LCAweGZlNzdiOGMyLCAweDI1ZTlkYTI5LAorCTB4NzU1YWQ4NTAsIDB4NWFkYmNmNjQsIDB4Y2Y1NjNmNTEsIDB4ZGUyMGYwZmYsIDB4ZTA3YjAxZDMsIDB4N2I0YjVmZmQsCisJMHgwNjQ1YWEwMCwgMHhlYTMyNWI0ZiwgMHg1NDA3NjEyMSwgMHg2YzMyMWJhYiwgMHhiZDA4Mzc2OCwgMHg3ZjgwMWZmMSwKKwkweGU3Zjg3ODQ0LCAweDExY2JmYzEyLCAweGRiZjEwMWZlLCAweDljMzgxYjRmLCAweDdmZTA2YmE3LCAweGNiYzcyNTc4LAorCTB4MmI2Y2E2ZjIsIDB4NmQzZjJmOWUsIDB4ZWJiYjI2YzgsIDB4ODIxY2E2ZDMsIDB4MDAwNzhjZmYsIDB4MWY1ZmRjZmUsCisJMHgwMDM1Nzc2YywgMHg4MTdjZjFmYywgMHg5NmY1ODdmMCwgMHhmYzA0M2JiNywgMHgwZGZlMWM5ZCwgMHgyNTZjZWUxYywKKwkweGMwODQ2NzJmLCAweDU3Zjk0YmQ5LCAweGU0ZDFmZTc3LCAweDc4ZTIzYjQ0LCAweDU3ZDkyYjY0LCAweGFjYThiN2M3LAorCTB4OTMyZWMwM2UsIDB4YWMzN2QxNzYsIDB4ZGZiNDQ5ZjEsIDB4Zjc2N2ZjMjQsIDB4ZjI4NDE4ZTksIDB4ZDdlMWY0YTcsCisJMHhkOTg3ODhhYywgMHgzMTUwNzg1YiwgMHg5NWNjZmUwNCwgMHhlZWM3ZjE0NCwgMHhhOGVkYmJmOSwgMHhkZDVmMTE2ZiwKKwkweGUyNDVkNDc2LCAweDE5Yjk4NmE5LCAweGQ3OTZjN2U5LCAweDQyMzllMDBlLCAweDQ1YmY3MTcxLCAweGI2NmZiYzhkLAorCTB4MTliZWY4MjMsIDB4ZGE5NTkyZTYsIDB4OGNlMmM1ZDEsIDB4YTRmNWMwODgsIDB4NzlkM2VmNjksIDB4YmViZGM2MTgsCisJMHhkNmVhZjljZCwgMHg1ZGU3YzRmOSwgMHgyNWI5Nzk0MSwgMHhmZTgwZDVhYywgMHhkMGFjZDYzNiwgMHgwNWVhZWQzZCwKKwkweDg2NDJkNjg1LCAweDVhM2FiNTcxLCAweDA5NDUzMzg3LCAweDU2YWVjYmNhLCAweDU2NGY2NDc1LCAweDQ0N2M0NTE5LAorCTB4ODkyNDU1ZTQsIDB4ZGMyOTQ5N2UsIDB4NjI5YzkwMmYsIDB4MjQ3NGYyYTMsIDB4ZGE3MDdkMjMsIDB4N2RlMWY0NjIsCisJMHgyNTVmMzgyYSwgMHg5ZGRlZmNlMywgMHg0MWRiYzIyNiwgMHg1ZmMwMTM1YywgMHgzMzNmMGEzNSwgMHhiN2E0NDJhOCwKKwkweGQzYTcxODViLCAweDI5N2JjYzViLCAweDk3MjcwN2FlLCAweGE3MWZhODc1LCAweGM5MzkzNDJkLCAweGExOGY4ZGNlLAorCTB4NDJjZGQyZjgsIDB4NWU2MmRkZGUsIDB4MzEzZDQ2ZWUsIDB4NjE3NDZjY2QsIDB4MzE3YWUzMDksIDB4MWEzMGQ3ZjksCisJMHgwZGY5ODdhNiwgMHhlZjc0OGNiZCwgMHhmM2EyMzRiMCwgMHhkZjEyM2M1OSwgMHg4ZWY4N2M5NiwgMHg5NWVhNTgwOCwKKwkweDFmYTM4ZTYwLCAweGY2ZGQ3ZTE4LCAweDVlMjg1YzdkLCAweGY2MDlmOGZjLCAweDg1NDZkNzRiLCAweDE3MGM4YmY3LAorCTB4MmU1YzUwNzAsIDB4NjA5YjNmZjIsIDB4Yzc1ODI4ZWMsIDB4NmYwNzE0YTgsIDB4M2ZiOGQ4NzcsIDB4YzllMDJkN2EsCisJMHhiNmFmYzdlMiwgMHhmYzc5Nzk5ZCwgMHhiMWYzMGFiMiwgMHhiYzU4ZjdmOSwgMHg1ZDU0MWYyNCwgMHhjOGNhYmQ1MCwKKwkweDYyNzk0ZjlmLCAweDM0ZWFmMTQzLCAweDhlNjFkZWM2LCAweDJhYjc4ODgxLCAweGVlNzgyMTk0LCAweDYxZjE4YjJmLAorCTB4ZjQzYWVmN2MsIDB4ZDRiMWRiODcsIDB4ZDY0Y2JkMTMsIDB4OTc4ZWFmMzMsIDB4MGUzYjY2MGQsIDB4MjVlM2ZkYzcsCisJMHgyYWJmOWUwMiwgMHgwMDMxYWQ2MCwgMHg4M2Q3ZDZmNywgMHhiNDM3ZjNmZCwgMHgwMmZiNWFlYSwgMHhiN2QzYWY3YywKKwkweGVhN2QyMWI2LCAweDFiMDYxYzIyLCAweGFmMWVlM2NjLCAweGE1MzllMmU0LCAweGFkYzVlOTZhLCAweGE2ODllMmI3LAorCTB4YTBhM2Q1ZTIsIDB4YWNmOWUzYWUsIDB4ZmVlNmJmNWQsIDB4NTk4MDViODksIDB4ZWFiNzZlMTEsIDB4Y2I5YWJiNTksCisJMHg1MmUxMDBlOSwgMHhhOTc4Nzc2YiwgMHhlMjg1M2NkZiwgMHgyMDJlMzIzNywgMHg4NjE4M2ZmMSwgMHgyZGUzYzQwZiwKKwkweDRlMzA3ZDYyLCAweDM3ZGYxNTgzLCAweDdjZDdjNzg2LCAweDhjY2MyZjgxLCAweDE1Y2ZiODQ2LCAweGYyNTczNzdjLAorCTB4YmYzMDUzNWIsIDB4MDQ3ODgyM2QsIDB4MmVkMDU1M2UsIDB4MjJkZGI4MDYsIDB4ZTJmODllY2EsIDB4NDc2ZTE0YTEsCisJMHhjZmMyOTQzZiwgMHhlMjVjZjdlZiwgMHg5NWRjY2M3YywgMHg4Mjc5Nzk0MSwgMHg3YzRkYWE1ZiwgMHg3NWZmMzk3YywKKwkweGM1MzA3Y2EyLCAweGY1Y2JlMzRlLCAweDhhN2ViZDAwLCAweDAyNDBlOGUzLCAweDY5MWViZDIwLCAweDY4ZmIyN2FjLAorCTB4YzM4ODBiMTYsIDB4NDlmYmZhNjUsIDB4NzdhZDBlYmEsIDB4ZjdkZDExY2IsIDB4NjZiYjFhNTgsIDB4NWY5NWU4MjAsCisJMHg4ZTUxM2E0NCwgMHhjZTZjNjJkZSwgMHhmNjg3MzNhOSwgMHg1MmU2NzE5MywgMHhlZmEwNjFkNiwgMHg5OTNmNDkwMywKKwkweDU1NjMzZmQwLCAweDk1MzVlNTMzLCAweGY0MWVmYzJhLCAweDU3OGI0MmU5LCAweGM3ZTI3NjA3LCAweDA2N2JiZTIyLAorCTB4YTc5YzQ2ZWMsIDB4ZmNhMTU2MzQsIDB4NzczMTY5YWYsIDB4OTc1ZjIwOTYsIDB4MmM3YThkNWEsIDB4ZGZmMTE2M2YsCisJMHg4ZDE3NTk1YiwgMHgyYjJkODlmZiwgMHhkZjg2MDZlNiwgMHhlNjMxNTA0ZCwgMHhhNGY4MGIwNywgMHhhZGZiMDVkOCwKKwkweGViYzNmOTQ3LCAweGU0Njk1ZDJiLCAweDRmZjUxMjhkLCAweDY2NWM2MWY3LCAweDAzYTA3OWVhLCAweDc2MmUxZmFhLAorCTB4NWZhN2JjYzEsIDB4OTFkOWNmMTUsIDB4ZmE3ZTdjNjIsIDB4ZGVjZjQxM2UsIDB4ZTlkZTM0ZTMsIDB4NTNmM2U0YzcsCisJMHhmOTBhZjlmYywgMHg3ZjVlMmJmYywgMHhlYTJmOGU1MCwgMHgyZjllNmIwZiwgMHg4MjdmM2NkMSwgMHhmODlmNWJkNywKKwkweGY2OGJkOGFhLCAweGRhNGU2OGViLCAweDkyMTQyM2E1LCAweDM3MjE0NjU3LCAweDEyYjY5NzRhLCAweGJiNzU0YjljLAorCTB4YjU5YTM5NzgsIDB4ZGMyZmYyZWEsIDB4ZGI4YTY0ZWYsIDB4Zjc4MDkyOTgsIDB4NTA1ODhmY2UsIDB4ZDUzM2ZmMGYsCisJMHg3ZTgxNGM2NSwgMHhmZTc5MjY5ZiwgMHg0OTljZTU4NiwgMHg3Mjg4ZDc4YSwgMHhlOTFmM2RmNywgMHhmMjFlOTI4NSwKKwkweGFlNDI4ZDI3LCAweGE2ZTVlYTlmLCAweDgzMWVhNWY3LCAweGYxYzNkZTcxLCAweGJiOWM3NTJmLCAweGU0ZjljNzQzLAorCTB4NGQ3MzhjYzcsIDB4NDczOGM4NmEsIDB4ZmViZWNjN2YsIDB4MjRlMWNhOWMsIDB4NTE3NjkxYzcsIDB4ZTk0YmJhNzEsCisJMHg2NjNhZmM4NSwgMHg3MGJmOTA2NCwgMHgxOGNlYmRlZSwgMHhjYzMxNGJmNCwgMHhjZmQwMDM3NywgMHg5MTljZGE1ZCwKKwkweDdkY2ZlMzA3LCAweDBhOGNjNWVlLCAweGJlODQ5YmI0LCAweDMyYTczOWFmLCAweGRhYTNjODE3LCAweDVmOTUwYTczLAorCTB4YzQ2NDdkYjQsIDB4ZGIzNWIzN2IsIDB4YTBlMzhjZGEsIDB4NDU5NDJkNWYsIDB4MTJhYWViMDEsIDB4YTc3ZDA0ZWIsCisJMHhhN2EwMWM5ZiwgMHg0Mjc0YmQ4ZCwgMHhmM2NjM2M2ZSwgMHhhMTNiOWUzMiwgMHhkNWNlN2M0NywgMHgzZGZkMWYzNSwKKwkweDRhMTFlZmVhLCAweDk3ZjJmOGQ4LCAweDdiMDc3ZjYyLCAweGVlNjExZmI4LCAweDYxNTFlNWM1LCAweGVlMzQ1NzZmLAorCTB4MzkwNjE0ZjMsIDB4ZmFhMmZjNjAsIDB4YmYwMmY5ZjAsIDB4MTUyOGViMTIsIDB4NTBmYTZmZmEsIDB4ZTAwMzg0NGIsCisJMHgxZTNkZTQzYywgMHg5YjU4YWY1ZiwgMHg2MmZlOGI5OSwgMHgwNGU4ZjI2MywgMHg3ZThmNWI4MiwgMHg2N2VlMmVkNiwKKwkweGQ2N2VlMTZkLCAweDAyYzc3YjUyLCAweGJiOTk0ZWZjLCAweGY4ODNlYzU3LCAweGJmMDliMmRkLCAweDJjMDY3YzkzLAorCTB4Mzc4ZWVmMGIsIDB4ODliZjdhYzksIDB4M2Y3MTQ2NjMsIDB4N2VmM2Q2MTgsIDB4ZjIyMGY5OWYsIDB4NmUyOGRlY2QsCisJMHgzNjFiNGVjZiwgMHg0M2U1MGEzMCwgMHhjZWI0NjY2NywgMHg0ZmFjZmMwNiwgMHg0YWY3NzMyYSwgMHhjNmFiZjZjMCwKKwkweGM5YTE3YjYxLCAweGUwOGNhN2QyLCAweGY0MmU4OGNiLCAweGI4ZmVlZTQ5LCAweGZlOGZlYzRlLCAweDM1YjE4ZjExLAorCTB4ODdkODA2ZTEsIDB4ZWU5NTBkZTcsIDB4NDUwNjc4MDMsIDB4Y2JjNWMyN2IsIDB4ZTVjNWVmMmYsIDB4OGQ5N2JiYjksCisJMHgwNzU3YjFlMCwgMHhhZmY1Y2NlYiwgMHg3NjBmY2U0MywgMHgxODBlODJmZCwgMHg5NGQyYzhlZiwgMHgzMDM4MGZjMSwKKwkweDVkNzg1MzFlLCAweGZjZmYwNGFmLCAweGEzM2M5MmIzLCAweGEyM2ZlNzAyLCAweDY4ZjA3ZDYzLCAweDE4ZWJiMTcxLAorCTB4MWQ3MWYwMmUsIDB4Zjc0YTA2YzIsIDB4ODBiN2EwMjgsIDB4MzFlNGRlZjMsIDB4YTlmNTQxZDEsIDB4MTVjYzcxYzUsCisJMHg5YTlkYmZlOCwgMHhiMWJmNTQxYSwgMHhmZmE4M2IzNCwgMHgwN2ZhMzNjZCwgMHhlYTY4OWYzZCwgMHhiMDBiYWZjOCwKKwkweDk3YjY3YjY3LCAweDVhOWYwNGJjLCAweGVkMGEyNThiLCAweGJlNWE0ZmJhLCAweGI0MTZlMGY5LCAweDRlYWEzNzAzLAorCTB4ZWY2NzU5YjQsIDB4NDhjMWY0ZGMsIDB4ZjAwNjc1ZTgsIDB4NDk3ZTQ3MWIsIDB4M2VkMWY5MDcsIDB4N2E3NDc5OTcsCisJMHg3ZTMwM2U5NywgMHg1MDc1OGE3NCwgMHhkNzNjYTJiZSwgMHg2OGRjNmM1ZSwgMHhmMjlkYWRhZSwgMHg3OGFlN2YwOSwKKwkweGUyNWViY2QxLCAweDcyY2I5YmZjLCAweGE5OWUzZjUxLCAweDc5ZmM5ZjdiLCAweGNmYmU2NjM1LCAweGUyMWUyZjUzLAorCTB4YmQ0NDJkZGYsIDB4MzU3Zjc0MDIsIDB4ZTJmNjg4YmUsIDB4YzBmYzEwMzksIDB4MGUzYjQ1ZmYsIDB4ODZjZDljNTEsCisJMHhmN2I0NGRjMSwgMHhmMWU5ZTZkMywgMHg5NDJkNjRmZSwgMHg4MWM2NWZhOCwgMHhiYTAxOGFkYywgMHgwMzYzNjhlOSwKKwkweDQ4ZGU2MWI3LCAweGU1ZGI4NWE2LCAweGJmOTBhNmU3LCAweGY3MTQ2ZjdjLCAweDhjNGRlY2ZiLCAweGNjNDhlZmE1LAorCTB4ZGE4NmI4NmQsIDB4ZDM0NWNlNmIsIDB4MWRhOTZmZjgsIDB4ZmEyZjI4ZTMsIDB4MTNlMjg1MDUsIDB4MmRhNzUzMTMsCisJMHg4ZGVjZmRjNSwgMHgxZGI4MGVmMiwgMHhlN2Y4OWRlNiwgMHhkYzIzYzdhYiwgMHg3YmYxYjY2YSwgMHg3N2Q1MTMwMiwKKwkweDU5NDFlN2YyLCAweGJkMGQ3OGQ1LCAweDdiNjU1MTNmLCAweDYyMWZiMDE1LCAweGUzNDJkZGNlLCAweDAwMWI0NDRlLAorCTB4Y2I1MGVhZWEsIDB4NTU5N2E4MDMsIDB4M2Y5ZjZiNjMsIDB4NWEzMWJjYTAsIDB4OWVkNGRlNDgsIDB4MjZmN2E0OGIsCisJMHhmZGZkNzExNCwgMHgwYzRmMjE3YiwgMHg2MzVkN2M5ZCwgMHhlN2EyNGRjZiwgMHhiZDdjMmU5MiwgMHhmN2YyODJiMiwKKwkweGY1MWIwOTBkLCAweDQzMjFiZGY4LCAweGFmZmQ0MmE3LCAweDRhOWZkNzNkLCAweGZhMzdkZmI5LCAweDJmYmU5MWZkLAorCTB4N2FmODQ4NjAsIDB4YmU4ZGU2MWMsIDB4YzhkOGFmMTEsIDB4ZTNjOGQxMmMsIDB4NjJjMzc1YjMsIDB4ZDU3OTE4NTgsCisJMHg5ZTM5Y2YzZCwgMHhjNzNhNmM2ZiwgMHgzYmZmOGZmMywgMHhlNDE3ZjVjZCwgMHg5ZDQ1OTJjMywgMHgzMTE3OGM3YSwKKwkweGUxMGQ4NDczLCAweGQ4MzA1MjU1LCAweDY3YzAxMTUxLCAweDhjOWJhZWVhLCAweGVhYzMxZjg4LCAweGFmYTg4ZGI3LAorCTB4MDUxNjUwNGQsIDB4ZjkxNmFmM2MsIDB4ZGQ3OTVhNTgsIDB4ZmM4M2U0MjIsIDB4M2ZkNDliOGUsIDB4ZDEwNjc5MmMsCisJMHg0MTM2YWRlNywgMHg5ZThmODJhMCwgMHhkZjJjN2MxNiwgMHgwZTMzYTBlZiwgMHhmNzNiNzFlMCwgMHg3OWE2YjdmMywKKwkweGQxMzk0MmRlLCAweDdjNmVjODUxLCAweDQ3NjdlNDllLCAweDdlNjljNjA2LCAweDllMDNmNWFlLCAweDFiYjIxNDIzLAorCTB4YmVhZjI5M2IsIDB4YzNhMWMwYTQsIDB4ZGQ3YmMwZjgsIDB4ZjNmMzg3N2EsIDB4MjZkMWY2ODUsIDB4Y2E5NmZkZjYsCisJMHg2ZmI4ZTIxNiwgMHgxZDk3ZjJmZCwgMHhlZGFmMTgyZSwgMHhkNDNjYmNlZSwgMHhjZmRlNzIwYiwgMHgwYjdiZjE3YSwKKwkweDFlNzVkNmNjLCAweDJmYjU4N2NmLCAweGVmOTAzYjQ3LCAweDBjZTFlMjI3LCAweDRkM2JhMmUzLCAweDc2ODE2ZTc0LAorCTB4YmVkNDc3OGEsIDB4ZWYwYTdhNmMsIDB4ZTE1YWQ1YmIsIDB4MTdmMzBhZmMsIDB4OGFkOTEyYmQsIDB4NGFmNmRjNzQsCisJMHhjN2Y1MWVhNCwgMHg5ZjNkYmQxZCwgMHg1ZThhN2MyMSwgMHhjZjA2M2JlOSwgMHg5MzE2YWU4YiwgMHhlM2ZkOTE5ZSwKKwkweGI2ZjI0YTNhLCAweDQ4NWVmNTg3LCAweDRjZTk2OTdlLCAweDgxYTdhN2YyLCAweGEwOTk0YmYzLCAweDdmYzE3MmQzLAorCTB4Njc0N2MxMWUsIDB4MGY4ODkyZWIsIDB4NDU4MjJlY2YsIDB4OTE3NTNjNjMsIDB4ZGExYjcwMzIsIDB4N2QwYjBlMGIsCisJMHhlNWYyNGU5NywgMHg0MTFmM2M0NCwgMHhiMWZlYzRmYiwgMHhlYWExOGY3NCwgMHgxZjEwNmM1YywgMHgxNGNiOWY1NiwKKwkweGVkNDcxZGZjLCAweDA1Y2FkZjkyLCAweDdkODQ5ODlmLCAweGI1ZDA0MzMxLCAweDNmMjQ1YmI0LCAweDYyNGY3NGIyLAorCTB4NjI2M2VjMmEsIDB4OTViZGYwM2QsIDB4YzhmOWZlZTIsIDB4MzFiYTdlNGYsIDB4ODBiZTkwZGEsIDB4MDIyYjkyNmUsCisJMHhlZGJlYTdmOCwgMHg4YTc2ODYyNiwgMHg3NDRkZGUyOSwgMHg0MGNhMDMzMywgMHhiNzY2NjUzYiwgMHg5NzFiNjI5ZCwKKwkweDU5MmZlYjA4LCAweDdiYzNhOTk2LCAweDZhNzlmMjliLCAweDdmZDFhNWVhLCAweDI3YzhhYTQ0LCAweGEwZTZiNzMwLAorCTB4OGJhODZiNWQsIDB4OWE3ZGUyNzQsIDB4MWUzY2YxMzMsIDB4ODcwNTdmMzQsIDB4YmI4MzdjZTMsIDB4Zjk4Y2VkMDgsCisJMHgzZmU0Mjg0ZiwgMHhlNTAzZmI0MywgMHg3NTAzZDBkMiwgMHhjYWJmNDBjNiwgMHg1MTA2ZTc0ZCwgMHhiOWNhN2QzYywKKwkweDI2MzRhOGNiLCAweDM4NDcyZTdiLCAweDVlYmI5ZDk0LCAweDhmZDA2YmUwLCAweDcxMGUzZjhhLCAweGMxOTJiZjcxLAorCTB4Yzg2ZTcyNjcsIDB4NDc5MmJmNDQsIDB4NGYxZjNjNDUsIDB4MDM0N2I2NjcsIDB4NTQ2YjdkZTMsIDB4YjhjOThmZjIsCisJMHg5OTMzZjRhNCwgMHg4MDRmZGVmMCwgMHhkZjQ2ZmQzZSwgMHhhM2RmNDE5OCwgMHgwYTlkZmFkMSwgMHhiOTNmZmViOSwKKwkweGJmZmE0MGQxLCAweGExOWRlZGFhLCAweDc5ZmU3ODNhLCAweGY1MDkyYmE2LCAweGE3ODM3YWM5LCAweDY3MzNmNzA4LAorCTB4MDMzOWVmYjIsIDB4YjgzZWU3ZDQsIDB4ZTFkYzNhZDUsIDB4YmViMzY3ODcsIDB4NjlmNTA3MzUsIDB4ZmQxMWMwMzMsCisJMHhkNTJiY2Q1ZiwgMHhmNzZlM2VmMSwgMHgxYTM4ZjM0NCwgMHhjZjQ5NmZhNywgMHg3MzlmM2E1YSwgMHg3M2UwOWIyZSwKKwkweDdhNDRjZWI2LCAweDJkZDAyY2U4LCAweDUyNDNkMDBiLCAweDJmMzk0OGVmLCAweGViYTQ4ZmY1LCAweDVmOTczZDZhLAorCTB4Y2ExOGU2ZDUsIDB4OWRlYmYzMjMsIDB4YTQ0MmVlNDksIDB4MWYzYzdlYmIsIDB4OWU3N2FmZDAsIDB4ZjkwMjM1NWEsCisJMHhlNTNjNzRlMCwgMHgyMWJkNGI1ZCwgMHhjNTg1ZTBmOSwgMHgyNDQ3OTRjOSwgMHgwM2U0OTJmNSwgMHg3Y2E1Y2YyOSwKKwkweGY1MmY3NDk3LCAweGZkM2ZlOGQ2LCAweGMzYmZkNmVmLCAweDNjZDI5M2FmLCAweDdkMDJhNTc3LCAweGZhZTdhYjVkLAorCTB4ODViZDVhZWIsIDB4ZmM2YzY3ZTgsIDB4Y2RkMjNkMjQsIDB4NDNkMWNiYzUsIDB4MGExZThlNDIsIDB4M2QzNWEzOTIsCisJMHhhOTQ1ODFlOCwgMHgxYzVlN2U1MiwgMHg3YzExY2MxZiwgMHhlZGM0ZGUzMywgMHg4MWYzOTQ0OCwgMHg4ZGE2YjVlMywKKwkweGIxZjcwODdlLCAweGQ5ZWI5NTNhLCAweDNkZGQ2YjlmLCAweGE5ZDVmZmM5LCAweDk3ZmYyNjk3LCAweGZjOWM1ZWE0LAorCTB4ZmU1NGVmZmYsIDB4YmNhZDBhOWQsIDB4YTM3MTBmYzcsIDB4ZjNiZDNmYmMsIDB4ODNlYTFmNzIsIDB4MDNmNDBjODMsCisJMHg2ODk2YzFlYSwgMHgwZmExMjZjNywgMHhjNTQ0NWY0OCwgMHgxZjQ4N2VmOCwgMHhmZTllZjYxNCwgMHhmNWUxYTlkZiwKKwkweGZmNmM2NmMxLCAweGQyNDBmYWIxLCAweGM5MWJlNDk3LCAweGI0MmY5MjI3LCAweDYyZjkyNDdjLCAweGJjZTE2ZmMyLAorCTB4OGI3YTc4ODgsIDB4ZDZhYThmZGYsIDB4MGUyODliN2IsIDB4OGMxZTg4ZTksIDB4Yzc2ZGQ5ZmMsIDB4ZGY4ODUzNmQsCisJMHhlMDg0ZjQ0MiwgMHgwNGJmM2YxZiwgMHgxZmM5MGRlYiwgMHhmZjI0NWY5MiwgMHg5OGZlMGI1NCwgMHhmMjQzZjgyOSwKKwkweGY5YjU2ZWM1LCAweDBhOTgxMWQxLCAweDA4ZjllNjkwLCAweDkzZTQ4OGU1LCAweGZhYjVlN2FhLCAweDQyYmE0N2ExLAorCTB4MTk5YjIzNGYsIDB4YWU5MGM3NWYsIDB4YTQwY2ExYWEsIDB4ZmMwZjUzMmIsIDB4ZjUxMmYwNzAsIDB4YTQ4YmJlYzIsCisJMHhmM2ZlYWZhNywgMHgwZjU1ZjRmNCwgMHhhN2U2NzRmNCwgMHgxZGE4NTNkMCwgMHgwM2JlNjFmYiwgMHgxZjM2NzNkNiwKKwkweDlmYTY2ZGU0LCAweDhkZmMyNmRlLCAweDliMjFmYjcxLCAweDQ2ZjYwNzlmLCAweDM1ZWU3ZGYxLCAweDY3ZmY5M2E2LAorCTB4Y2YzY2Y3YzIsIDB4MzMwM2RhNTcsIDB4ZDI0MWJmODUsIDB4MDFkODFlNjksIDB4ZjhmYzQzNjksIDB4YmNjMGYzYzcsCisJMHg4NDdiOTM4YiwgMHg4NzdjNTM2NywgMHgzMzI3Y2YxMSwgMHgwM2I0MGNhMSwgMHg1MzdmYjI3YSwgMHhlZTRkMmVkMywKKwkweDE3ZmU4YTQ1LCAweGI0ODBmM2MyLCAweDFjNmVkZDlmLCAweGFmMWUxNjkwLCAweDAyN2VkMzAzLCAweGEyNjIyNzVlLAorCTB4YjIyYmY5MmEsIDB4MDBhMzVjNGIsIDB4YmE4OTBmM2YsIDB4YzIwOTRmYjcsIDB4ZjkwMmZhZjEsIDB4MmU1NWIyZmMsCisJMHhkNjA3Y2EzZCwgMHhmNDc1ZGRmZCwgMHhjYWE1YmM3NywgMHgzMWZlY2U3YSwgMHg4ZjA5OWViMCwgMHgxZDFmYmYzMiwKKwkweDE1MWQ4ZjllLCAweDUxMWZlZGQzLCAweDcxN2ZiZjk4LCAweDk1ZmVkNjVhLCAweDQ1MWJlN2E0LCAweDllYTc0YWRlLAorCTB4M2Q0NDgzYzcsIDB4ODA5NmVhMWYsIDB4YmVhNjgxN2EsIDB4ZWFiN2Y3OTYsIDB4M2U2MDU5M2IsIDB4OTI4ZGQyMDksCisJMHgwZWVjZjFjYiwgMHhmYTYwMWZiMCwgMHgyZmE4YjNmNiwgMHhmZjQzMGE2YywgMHg4NmZjNmQ0NiwgMHg1Y2EyY2Y1NywKKwkweDZjNTBhMWRiLCAweGRlMGUxYmFhLCAweGZhMDcwNDgxLCAweDA3ZDUzODNlLCAweGM2NWQ3N2VmLCAweDc4ZGJjZGQ4LAorCTB4NDNiNWY2ZmQsIDB4MTMyZjc5NTYsIDB4MWJkYzA2ZTMsIDB4MmUyYjM0MzIsIDB4NTAyODQ3Y2EsIDB4YTE5OTU5N2MsCisJMHg0ZDNkYmVmMCwgMHgxZWI5MTNjYSwgMHgwMjE0Zjc0NiwgMHhhZjk4NjdkZSwgMHg3N2VmMjk3NywgMHhkMTY3NGRlNywKKwkweDRiYTZhZGZiLCAweDUxODZmZjk4LCAweGFjNmZlZmUxLCAweGU0YzZmZDEwLCAweGZlN2Q4NGM3LCAweGUxY2E5YTcwLAorCTB4MzQwNmZjMmYsIDB4Njk0ZDM0M2YsIDB4ZmY5ZjdmMGUsIDB4MWQyZmMxMDksIDB4NzgyMTNmMTgsIDB4ZmU4NTVhNGUsCisJMHg4NGEzMGVlZCwgMHhjMjE1N2JiNywgMHg0MTYzMmM3YiwgMHg5Zjk4MzQ3ZSwgMHhiYWQ3MWJlYSwgMHg3Y2Y0MWE0YiwKKwkweGJjMGQyZWJiLCAweDc3YmY2ODdlLCAweDAzZGIwNWE1LCAweDVmMDY5YmY0LCAweGY3ODAxZmE2LCAweDc3ZGU2MWRkLAorCTB4ZmFkZmJmMDQsIDB4MTI1YWY4NDMsIDB4ZGJhMGJlZjIsIDB4NWQ4ZTkyNTksIDB4YTMxZWY0NDEsIDB4YzY3ZDEzNzcsCisJMHhiNDM2MmJjNCwgMHg5MWRjNmJhMywgMHhlMGJjZjEyYiwgMHgxMmQyY2ZlNywgMHgxMzhjOWI4MiwgMHhiNGRmZjA4NCwKKwkweGM4MDMzMTkyLCAweDZmY2YxMjRlLCAweGViZmM4NTViLCAweGU3Zjc3NWQ2LCAweDFhZTkyOGZjLCAweDVjMDEzNmFmLAorCTB4ZWYwN2Y1YzksIDB4ZWI3NjljYmYsIDB4MDI0ZmY0MmEsIDB4YWE3M2QwNWQsIDB4YWRkNjAzZWIsIDB4NGQ2NmM3ZTUsCisJMHg3Zjg2OTQ3ZCwgMHhmYzkxZmYwNSwgMHg3MDAwN2Q0MCwgMHgxNmY5NDFjYSwgMHgwOGU4Yzg3ZiwgMHgwNDRmOTNhMCwKKwkweDdjODk0ZTljLCAweGRjZDE4ZWYyLCAweGUyYzhlYzllLCAweDNjNjk3N2U1LCAweGEwOTlmNTJlLCAweDllOTI1M2NiLAorCTB4OTBlMDAyYTIsIDB4ZjQzZjQ0MTYsIDB4ZjYwMjIxZjcsIDB4MjliYTcwNGQsIDB4YmRmM2YyNWUsIDB4YmZjMGM1MjUsCisJMHhmY2ZlNzYxZCwgMHg2NmZlZDY3ZiwgMHg1ZmNkMzc5NSwgMHhjZmY3OGVkNywgMHgyMDk2ZjdiNSwgMHhmN2M3YmE1YywKKwkweDc2OGZkYTJlLCAweDZlMDI0ZGM0LCAweDY3YmRhZGRmLCAweGMwODA3N2JmLCAweGJiZmZhMjczLCAweGY0MWY0MGFiLAorCTB4YTQ2YTllM2QsIDB4M2U5NDI1MGYsIDB4MmZhNTBkNWUsIDB4ZmE3ZGU2YWYsIDB4YmQzZDA0M2IsIDB4Nzk1MGI3ZmYsCisJMHhjZmJjZDJlMCwgMHgxNzEwN2JmMCwgMHg1YmMwYmVmZiwgMHhlM2FmMDZiMSwgMHhhMzFkNzgzNSwgMHhiYWNhOTdhOSwKKwkweDRhZmU0ODJmLCAweGUzYmU1Y2I5LCAweGUzMTJmYmUxLCAweGQwYTlhZmQxLCAweDNkM2YyNDc1LCAweDNjZjQ0ODNmLAorCTB4NzdlOTI2ZDcsIDB4NGZkNWMxMTUsIDB4NDdlZDBmY2YsIDB4MmNkYzlkZmEsIDB4ZjQ5MWI1ZTksIDB4YzM5NDI0Y2YsCisJMHgyOWY1ZmMyMywgMHhmZWE4ODcyOCwgMHhjNWM2MDk3MCwgMHg5MWVhZmFmYywgMHg2ZmI3Mjg1NSwgMHgxZmZkOTA2OCwKKwkweDJmMzdmZWE1LCAweGE2YWRlMzkzLCAweDhjOGYxMmU3LCAweGVlZmE0NjNkLCAweGFmYTk3Y2E2LCAweDNmYjkyNzFlLAorCTB4ZWZiZjg1YTcsIDB4ZmVkZGZmNGMsIDB4NDY4N2U0MWYsIDB4NmFkNjVjMGQsIDB4ZmY0ZDVlZWEsIDB4NmZkMDE3ZDUsCisJMHgyZmVmMzRjYiwgMHhhOTVmM2NkMiwgMHhkNGQxYWZhOSwgMHgyZmRmODIxYiwgMHgxZjEwYTE5YiwgMHgzOGYwMTU5NiwKKwkweGI1MmY5NmE1LCAweGVmNGFlMWY0LCAweGY1YmE3M2I2LCAweGZiMjY2MmI5LCAweDI2YWY4ODJlLCAweGI1ZmFmM2Q0LAorCTB4MWE0YjFiZTksIDB4NzVmNTAxY2MsIDB4NWYzODRhOWIsIDB4ZjcwMTZjYzAsIDB4N2FlNjQxOWYsIDB4NDMwN2EwNTUsCisJMHgyMGIzNzIwZiwgMHhkOWI5MDdiZCwgMHhmOWVmYWI0ZiwgMHhhZmUwN2ZmMywgMHgwYTM3MTQyOSwgMHhhYjc2NGJiMiwKKwkweDU1MzZmNWMxLCAweDc1YmJkYmFjLCAweDgxMDE4MmZmLCAweDRiZTdkNWYxLCAweDYzZGQ1Y2YwLCAweDVjZGJjNzFjLAorCTB4MmVkMDI2MzIsIDB4YWUyNWNkNjIsIDB4ZmVjYTdkODAsIDB4NWVmYmJlZTMsIDB4ZWIzY2Y5YzUsIDB4ZDFiMjVjZmUsCisJMHgxMTRmNzE4YywgMHgxMmYzYjRkZiwgMHhmYThhYTVmNCwgMHg2ZmY4NTZiYSwgMHgyZjFlNjFjNiwgMHg1YWEyOTNjNiwKKwkweDA4MGZlNjczLCAweGVlNmIyN2Q4LCAweGJiNmNmYjgzLCAweGI3ZGZlNTViLCAweDAwZmMwN2FiLCAweDgzOThjYTljLAorCTB4MzNhNzUwZjIsIDB4YjZhNWU1MTcsIDB4ZmMyY2M0YzUsIDB4Zjc2Zjc4MmYsIDB4ZDQ0MmVhZGQsIDB4YzYxNzA3ZDMsCisJMHgyYmQzNWU1MSwgMHhiMTdjZmNlOSwgMHhlMjc3YTYzYiwgMHg0NWI3YTg0YywgMHhiNmYyNDZkZiwgMHg1NGIxZmVlZCwKKwkweGNiNWQ1MmVlLCAweDJkOGM2Y2JiLCAweDg5NGFmNzVlLCAweDFlN2M3MmY5LCAweDNiYmE3MDQzLCAweDI1OTJhNWZkLAorCTB4YTZmN2VmNDAsIDB4OGY3ZGU4M2IsIDB4MDNiODk2ZGQsIDB4MGMwN2VkZWQsIDB4MGUwNDM3MTQsIDB4ZTdlODkyNzgsCisJMHgzYzYwZDM0MSwgMHhlOTJkOTc2ZiwgMHhmMmIxNzE0ZiwgMHhjMzhkMjZjNywgMHhmN2U1YTQ3YiwgMHhkMjVlMjgxOSwKKwkweDlmOTFiM2E5LCAweDU4YzBmM2M4LCAweGIxOWE5M2NhLCAweGFiZGU5NDRjLCAweGRmZTU3Y2E5LCAweDdiYzdhYzdmLAorCTB4MTRlYjVkYTYsIDB4NTVjZDRlZmEsIDB4NmRmZjM3NWYsIDB4MWIyYmQ0MTAsIDB4YzY3ZWU5YjIsIDB4OTQ3NGU3Y2IsCisJMHg5YWU5ZmUxNywgMHg1M2NjM2ViZSwgMHg0NzU5MWMzZSwgMHg5ZmQwYTVmOSwgMHg5ZTU2YmJlZSwgMHhjOTJmZWM3NywKKwkweDBkYWFmZWM3LCAweDQyOGUzODUzLCAweDQ3Y2ZkYTNiLCAweGUxNGZhODU3LCAweGFiMzJjZTNkLCAweGJiZjMwYTI1LAorCTB4YzhjNzdlOGYsIDB4M2VmNDczYWYsIDB4ZTZlZjdkMTMsIDB4ZDZlN2IzNTMsIDB4OGY3NGYxMzUsIDB4NzY3ZDJkMDksCisJMHgxNTU4NzE1NCwgMHhmNGRhYzM4MCwgMHgyOWM5MjVmZCwgMHhmODEyNmVkOCwgMHgwMzJkNmZkYywgMHg3NWQzMmYzZSwKKwkweDkzZTkwZmQzLCAweDVmNWU1ODhhLCAweDkyY2RlZWJiLCAweGEzOGZiMDRkLCAweDdjYTVmNDRmLCAweGQ3MGM4NGIxLAorCTB4ZDc4MDc0YmEsIDB4OTNkNzBjZTEsIDB4ZDlmYjhhNTQsIDB4Yzc5YmZjYWYsIDB4NTkzYTVmMjUsIDB4YjVmNDg4OWUsCisJMHhjYmY1ZDA1OSwgMHgwMzEzY2FlNywgMHhjNTQxNmVmZiwgMHhjMWQxM2QyOSwgMHgwMmM3NDYyYiwgMHg1NDY5ZWVmYSwKKwkweDZjZTc4MmJhLCAweGY0Mzg4M2EwLCAweGU3MTBjZjliLCAweDg1ZTdhMDE2LCAweDU3ZDhjMzViLCAweDNkYjlkMzRiLAorCTB4ODRkYmY2ZDYsIDB4YmEyMDhlNTEsIDB4MjllNDk4ZmUsIDB4ZmVhMDM3OWQsIDB4YTQ0N2ZhNjIsIDB4MTY5ODhlZTcsCisJMHg3Nzc1MmU2MiwgMHgxZGRiMjQzZSwgMHgzNDMyNzA0OSwgMHgzMzIyZmE0NSwgMHgxYWVhN2ZkMSwgMHg0ZmYzYTJlNywKKwkweDk2Yzk5ZjczLCAweGZkMTQzZTAwLCAweGZjZjJmMTNmLCAweDNmYTA0ZmRmLCAweGYxM2VmYjllLCAweDYwNGIzZmZlLAorCTB4YWZmNjQzM2MsIDB4NjhiYzVhYjQsIDB4NThiMzFjNWMsIDB4ODM4Zjg4ZjQsIDB4MzE0N2M1ZmEsIDB4OWQ2MmFkM2YsCisJMHhjNTQwZjQ4MSwgMHg1ZDQ1ODRiYSwgMHg2ZTgwN2YyOCwgMHhkZGE2YmZkMCwgMHhjMGMzMjk5NywgMHhjNjNkMThmZCwKKwkweDE5MmYzZjU3LCAweDVlNzgxNjkzLCAweGJiZjI0MTM5LCAweDM3N2NiZTI3LCAweGM2Yzk0NGZkLCAweDY1ZjMzZDAxLAorCTB4YTdjYjhkYTUsIDB4ZjdmOGViNzEsIDB4NTg4NzJiNzUsIDB4N2JiZjc0ZjQsIDB4ZTg5YmFiZGQsIDB4YzhiY2YwMWUsCisJMHg1MTU3YmM1YywgMHhmODQ0Y2ViOSwgMHhiYzU4YjRlYSwgMHhiZWYxMmJiNiwgMHgwYjFmNDU4MSwgMHhhZTc0YTFlNSwKKwkweDBlMTlmNTRmLCAweGNhOTE0N2MyLCAweDU0YjkxMWY0LCAweDE5MGEzZGQyLCAweGYwYjEzYzNmLCAweDFkMzFjN2QxLAorCTB4YmJlNjczZjMsIDB4ZWZjMDE4N2UsIDB4ZTlkMzhiOGMsIDB4ZjkyYTZkOTksIDB4YzRmMWI1MWYsIDB4MWFiN2Q3ZWEsCisJMHg4ODhmZDkwYiwgMHg0NzEwZjYyNywgMHhlMjlkNjJhYywgMHhlM2UxZTJiYiwgMHhlMjM4ZGE4OSwgMHhiZGM1ZDJiZiwKKwkweGEyMzhlZWIzLCAweDUxODdiZTgxLCAweDQ1ODhlMjI5LCAweDdmNWExNTZiLCAweGJkZmU0MmU1LCAweGVlMzhhMjkyLAorCTB4MThiMjNlM2YsIDB4ZWQyZmEwZTgsIDB4YzVjYjZiZGYsIDB4N2ZhZTY5M2MsIDB4OGJlMjk5MmEsIDB4NWVhZjVmODAsCisJMHg5OWZjOGYzYiwgMHg1ZTFjZTk3NSwgMHhiMDNiZTI2NSwgMHgxOTlkMjM4NywgMHg1OGFmZGU3OCwgMHhhZTcwNDkxNywKKwkweDA3ZjY3MjdjLCAweDdkZTNlNDRmLCAweDgxZjE4OWMwLCAweGEwOWI2YmU3LCAweGUxOWYxODBmLCAweGNlMzk2ODNkLAorCTB4ZDBmNzI1YjEsIDB4ZDY4YjY3NzcsIDB4ZjMxOTM5YzMsIDB4NzNkOTYzYjQsIDB4ZGUyMjY1MzcsIDB4ZGUzMDMyNTIsCisJMHgyZTU1ZmIyOSwgMHhlZjBmYmJiZCwgMHhkODZjZTcwNywgMHg5NTBhZDk3NywgMHhiYjZiMGY3ZiwgMHhmMDIxZjQ4OSwKKwkweGI4MGIzMjdjLCAweGQ5NjMzZTJmLCAweGQ3MjM0NmViLCAweGE4NzkyYzY3LCAweGZlMWRiM2IwLCAweGMyOWY2Y2ZiLAorCTB4NDEwNGZjNzMsIDB4MjZiN2I4YWQsIDB4NWJlZjI3ZTEsIDB4ZjdmOGU5OTUsIDB4MGE3NTRiMzYsIDB4ODkwMmMzZGQsCisJMHg3ZTk3Zjc0NiwgMHhhM2ZkYzE5MSwgMHhjZWRjMTk3OSwgMHhkMjcwY2IyZCwgMHg1NWVhOWUzZCwgMHg0Y2QyZTcyNiwKKwkweGJkZjc0ZTNlLCAweDU1ZTczODc1LCAweDI4MmEzYWViLCAweDEzMTdmOWFlLCAweDk3NmE1N2Y5LCAweGFkMjJiYTQ1LAorCTB4ZjllMzFmM2MsIDB4YWQ3Nzk0MDEsIDB4YWEzYzAyMzcsIDB4ZmM2ZTVjMWMsIDB4YWQ2M2QwNDIsIDB4OTRkNWQyNjMsCisJMHgwNzY3YWU5ZiwgMHg1NjA3ZWZmMCwgMHhhYzljYjg1YiwgMHg5YmI4MDU4ZSwgMHg4NmU5MDEzOSwgMHgxOTM5ZjdlMiwKKwkweGI4ZTI1M2U1LCAweGU2MDI4MzI5LCAweDhjM2I0NDU3LCAweGM3ZmFiMGUzLCAweDBkNjNhYmRkLCAweGZlYzFhN2U4LAorCTB4Mzg0MjBmOTcsIDB4MjM3ZjVkYzYsIDB4OTU1OWVmYWUsIDB4YjQ4MDFhZjgsIDB4YmZlZDAwYWEsIDB4M2MzY2Q1NjcsCisJMHhkOGFkOTc3NywgMHhmMGU1MGUzZCwgMHhmMTgzMmRkYywgMHg3YjJiMDU0NiwgMHgyM2QyNWRlZSwgMHgzYmZlMDU3MywKKwkweDM5NWEzZTQ1LCAweDgxYmJmMWQ0LCAweGI5NzA2NDM3LCAweGRmYjk1MWU5LCAweDJmMDEwNmU4LCAweDc5ZjIwNzQ5LAorCTB4ZjcwMzBhZjUsIDB4NDdiYzgzZTMsIDB4ZTRiZDUzMDEsIDB4ZGFiNzFhNDMsIDB4NzI4ODkxZDIsIDB4ODFiYjdhYjgsCisJMHg4Y2RmODdlZSwgMHg5NzM4MDZlYiwgMHg3NTFmNDkyZiwgMHhkY2FhZTgwMCwgMHg1MWRmNDMxMCwgMHgzNDRlZjJhZCwKKwkweDUxYWFiZDYyLCAweGJkZmZiYWExLCAweGQzYTQwYzg0LCAweDYwYmQ5NjJmLCAweDFjMzlmYTQ1LCAweGZhODM5YWQ5LAorCTB4YTQ1ZTZiYTksIDB4ZGEyOWVlOTMsIDB4OGJlZWRmYjgsIDB4YWY3NDM5NjUsIDB4YzNhZDg2NjksIDB4OTk2NWRmODIsCisJMHg4ZWRiMjBiMSwgMHhhZGEwZmM3MiwgMHgwZmNmODhkNSwgMHhiMGVhNjczNiwgMHg0NmQ5YjJlZSwgMHhiZmE1ZGQ2MSwKKwkweDg4NWZlYTkyLCAweDQxZmExNzdjLCAweDllMzg1MmJhLCAweDFiNzY5YWFiLCAweGRkMmZlZmYxLCAweGQ0ZTJlODJiLAorCTB4NDFmNmVmYjMsIDB4NDY3NTUwM2YsIDB4MmZkNDFmNDcsIDB4NTI3ZDA3NDAsIDB4MjhjZmNlMTEsIDB4OWE2YjlmYTQsCisJMHhhNGJjMWU3OCwgMHgwM2E0MWE4MywgMHg4MjM5YmJlMCwgMHhiZGI2NmEwZSwgMHg0M2YyMTc3MCwgMHgzNzNmZTIwZCwKKwkweDllODA4ZTk0LCAweGY5ZmRhOWRiLCAweDdmMThlMzBkLCAweDQ0ZTkxZGJmLCAweDJmYTgzM2VhLCAweGNlM2ZhMDMzLAorCTB4MDU4YmViYzgsIDB4MGM3ZGExZmUsIDB4ZTAwZWY3NmYsIDB4ZjlkZDc1ZjksIDB4ZDA3YzQxMDgsIDB4NjZkNzdlMTMsCisJMHg0YzNlMDRlOCwgMHg4YWQ3NzcyNCwgMHhkOGFlNzZmZCwgMHg5ZGZjNDU2ZSwgMHgxZWY3NzY3YSwgMHgzZjU0Yjc4YywKKwkweDExZGFkYTBmLCAweDNjMDQxZjg2LCAweDU2ZmY3MTZhLCAweDE5ZDkzZjVhLCAweGFiNWZiOGI1LCAweDc0ZGRmZjdmLAorCTB4OTZiMGY4MmYsIDB4ZmRjOWZkZjEsIDB4ZmVjNWVhZDYsIDB4ZmVmMTczZTUsIDB4MmFjZmIxM2EsIDB4YWRiNWUwMjYsCisJMHhjMTNiZTcyZiwgMHhmNGM3Yzg2NywgMHgzZmIxMjFkZCwgMHhiYmY4M2Q4ZiwgMHhmZWM1YmJiYSwgMHg2Y2M5NDQ5YSwKKwkweDBmODQ1NmNkLCAweDBmZTUxN2UyLCAweDI4Y2I4ZmQwLCAweDM5NzQwOWU1LCAweGU1MDM2NWI1LCAweGM5N2M0YmY3LAorCTB4ZDdlZmJmZjUsIDB4OTNmYzJlMmIsIDB4OWQ4ZjEyNTQsIDB4YjZmNzdjM2QsIDB4YTFjOWYwNDUsIDB4NzYzMjkyZmIsCisJMHhkOGJlZmMwMCwgMHgyNDBkOWY0YywgMHhjYzA3ZDU3YSwgMHhjZTQ2ZTkyNywgMHg0OWE3ZjQ1NywgMHg2MWJlZTJkNywKKwkweDVmMWM1NmZjLCAweDFiZDA3YmNlLCAweDBlNzFjN2FkLCAweDcyMWZjZTMyLCAweDhiMmY5MmZkLCAweDNiNWRhN2VhLAorCTB4NGVmZDhhZDgsIDB4NWVkMWIyNTksIDB4M2Y3Yzc4MTEsIDB4YmJlZjQ2YzMsIDB4Zjc4MDZlZDAsIDB4ZjIxNDNiNWQsCisJMHhlNzEyMWY1ZiwgMHhiZGY3NDNmZCwgMHhlMDFmMmQ2MCwgMHhjNTc3ZjdhNywgMHhlMTlkMjViYSwgMHhlNGM5ZmEwZiwKKwkweGI5ZGFmNzdhLCAweDZlYmI1ODNmLCAweGJhZTQ4NzI5LCAweGUxYmZlZThiLCAweGViOTc2YzVhLCAweDIwNTFmOGM3LAorCTB4NGEzODRhOWQsIDB4ZmFmNzk1N2EsIDB4MzQ0Yjc0YjQsIDB4ZGFhYWY1MjcsIDB4YTZkNzdkMzMsIDB4OWRmY2EyMWQsCisJMHg3OGVkNzY5MCwgMHgyYzNhM2VjMiwgMHg5ZWJiY2RmMiwgMHhlNzdkZjk1NiwgMHg0MWVkYzk2NSwgMHgzMzE4OGVmNywKKwkweDI1OWZlYTA3LCAweDE1YjZhZWYzLCAweDQ5YjczYzYyLCAweDUyMWU3YmExLCAweDRhY2ZjMGFmLCAweDkyM2U4MDdkLAorCTB4ZGVmMGMxZjYsIDB4MzZhNTdmM2MsIDB4ZjEwMjc1ZGUsIDB4NjNiYzc1NTksIDB4NDQ5MjdlMWMsIDB4N2Q1N2E1ZGEsCisJMHhhMGM2YWFkZCwgMHhjZjFiNmFmZiwgMHg1Mzc0OTM4MywgMHhmODlkYjI3NSwgMHg5M2RjNWFhMSwgMHhlZWYxNWIyYSwKKwkweGY3NDg2MWM0LCAweGNlMjgxYjRmLCAweDU4ZGY3NjUzLCAweGIzZmJkYTIzLCAweDhhMWY0ZDM3LCAweDEyN2JjMGUwLAorCTB4NmM0ZmRmMjgsIDB4ZTA0NzkyMWMsIDB4ZWJjNGI2NjEsIDB4YzZjNGJlZjEsIDB4YmZjN2FmNDcsIDB4ODc2MzNhNWYsCisJMHhjMWExZGY0YSwgMHhjYjhmOTA3MSwgMHg3ZjIzYzhlZSwgMHhjZWM4ZTFlYiwgMHhhZWQwMjM4OSwgMHg0MzZhYjVmZiwKKwkweGE2ZTQ3ZWJiLCAweGZmYjA4YjIxLCAweDU4ZWY0YjQ4LCAweGM2ZDA3OGZhLCAweGY0YmJhYTM4LCAweGE0MjdhNDMxLAorCTB4MDNmMzJjMWQsIDB4OTBiZGM1ZWIsIDB4YWY5Y2RlZWMsIDB4OGE5Nzc1N2EsIDB4ZWZhYzBiYzgsIDB4YWVmOWYxODMsCisJMHhkZGY0OTEwZCwgMHhhM2EzNTJhOCwgMHhkYmU3MTViOSwgMHg4ZWU3NDQ5OSwgMHgyNTI2Mzg1YSwgMHgyYjllZTlkYiwKKwkweDhjYjM2OWQ5LCAweDk3MjUyMjJjLCAweDQ1MzAyM2RhLCAweGM3NDM3NWY5LCAweDVlNGZhODFkLCAweDE4MzJjM2JmLAorCTB4ZDRjYjhiYmYsIDB4YjljYjQzZjMsIDB4OTBlM2NkN2QsIDB4NjFkZmMxNzEsIDB4ZWFjOGViOTIsIDB4M2I1N2U5Y2QsCisJMHgyZjdmN2M5ZSwgMHg3NGVjMmI5ZSwgMHgzZmRlOTE5ZiwgMHhlYmU5ZWNiMSwgMHhkODllMWY1MSwgMHg3ZGM3NjM5YywKKwkweDQ5MTlkYjFmLCAweDE5OGUwYmY3LCAweDc4ZTdiZjgyLCAweGI0YzJmN2E5LCAweDNkZTRhOWY3LCAweGMxZGVmY2Q3LAorCTB4ZmJhNDljZjYsIDB4YjljYmRlMGIsIDB4OThmMmQyZWMsIDB4NzQ2NjJlNGUsIDB4MDY1Y2ZjNGYsIDB4ZThlNGZlZTMsCisJMHg3ZTYyYjZlZiwgMHhjOWEzNDU2MSwgMHg4ZTY0Zjc4NiwgMHg3YzYzZmQyMCwgMHhkZjRhYmI2YiwgMHhkZmJiYTIwMSwKKwkweGRiMjNhZjgwLCAweDcwM2VlOGYzLCAweDVlYmNjN2M1LCAweGYwZjhhY2QxLCAweGMzZmI3MmZlLCAweGMyZmU1M2Y3LAorCTB4ZjEzN2IwNGMsIDB4M2RiNzc5NmEsIDB4ZWJlMWZhYmQsIDB4MzhjZTBkOTEsIDB4M2JmMWNiM2QsIDB4ZjMzNjY3MDAsCisJMHhlZjkwOGI3YywgMHg3NWJlYmMzYSwgMHhmZmUzOGE0ZiwgMHhmZDJjZmRiZiwgMHgwNzdiZDMxMywgMHhmMDkzNDdkZiwKKwkweDU3YWFlNzk2LCAweDcyMGEyZTgwLCAweDcyZmJmMGZkLCAweDlmYjIyY2YxLCAweDUwZjYyZTRmLCAweGI0Mzk1YTc5LAorCTB4YjNkMjI0NmEsIDB4MTVlZTg2MjUsIDB4NTFlM2I0YmMsIDB4NTM3M2JmMTUsIDB4NzlmMDZkYmQsIDB4MzA4ZjFmM2MsCisJMHg5ZmY3ZDBjNywgMHg5MGJjNWNiZSwgMHgxNzI3OWE4MiwgMHg4YTNmODlkNywgMHgxNWY4NTRiNiwgMHhiNTVlNTQ3YywKKwkweGZiZGU4ZGFkLCAweDBiNWU0NzcyLCAweGQ5N2RlYmRlLCAweDlhYzVjMzFjLCAweDNiZTgyMGFiLCAweDNkYmYxMjk5LAorCTB4ZmI5NjU3ZGQsIDB4MWNkN2ZjZmEsIDB4OWZkZDcyY2YsIDB4YzU2ZTllNmYsIDB4MjFmZGI1N2QsIDB4ZTIzODY1YWUsCisJMHg4NmM2M2EzNywgMHhjOGE1NjA3NiwgMHg4NmJhMzkyZiwgMHgyM2M3ZDlkYiwgMHgxOGFiZmU2MiwgMHhlZDdjN2NmMCwKKwkweDBlZmM0NDk0LCAweGE5YjZjY2QxLCAweGM1N2I2M2Q3LCAweGU3ODZjNTRlLCAweDQ5Y2VlNzAzLCAweDdkY2YzYzU2LAorCTB4ZTJiNGVmYTYsIDB4ZDZjZmFhM2QsIDB4M2U1N2ZiYzgsIDB4MjM3YmJiZmEsIDB4ZDgyOWIzYzYsIDB4OWVhYjQ0N2YsCisJMHg4NDI5MzIzOSwgMHhmYzMyZjQ0YywgMHhjYmVlOWVhNCwgMHhlNGVkMDE3ZSwgMHg0NTFmMzkzZiwgMHg4OWY4MTNmZSwKKwkweDk5OTI3Y2MzLCAweDRiYmY3MjJmLCAweDljNTdmOWY3LCAweDdkOGE0NmZmLCAweGNiYjZmN2I3LCAweDE3YjUwNmY4LAorCTB4NjNmNmYwMTUsIDB4ZDA5NmI3NmIsIDB4NjhkZTRmZGYsIDB4YmZiYWUxYjAsIDB4ZjFhMDY4ZGMsIDB4NGRiOWMwZTcsCisJMHhiZTNkZWIwNywgMHhiMDgzOWY5OSwgMHgxM2U4ZTc4ZSwgMHg2Nzc5Zjk5YiwgMHhlZjNmMzM0ZSwgMHhiODMzY2Y1NCwKKwkweDYwZDJmZGY4LCAweGU4MGEyY2JhLCAweGViMmRkZjQ3LCAweDczMjNiYmUxLCAweDczN2Y3YzVjLCAweDdlZTI3ZjQwLAorCTB4YjFiZjQ0MmYsIDB4OWZlZTk5YWMsIDB4YTkzZTZhNWQsIDB4YWFmZjdlOTYsIDB4NzRkZDE3OTEsIDB4MDhiZDEzZGIsCisJMHgyM2ZmMjJiOCwgMHg5OGJhNGFkZCwgMHhmNWM3ODZiMywgMHgwYjgzY2RlZCwgMHg5ZDI0ZmU5MSwgMHg1ODAzYmY2OCwKKwkweDNiZmM2NDZmLCAweGZhMjhiYWIyLCAweGIzMjRmN2VlLCAweDYyZmE4MGMzLCAweDE4ZTc3YzRhLCAweDA3NWY0ZjA0LAorCTB4OTE2YWFmOTcsIDB4ZTRmNzg1Y2UsIDB4ZWMyOWJkNTgsIDB4MTVkZWM0NzcsIDB4YmMxYTc4ZjIsIDB4N2FiYmY3NGIsCisJMHhjZmY3ZjhkYiwgMHg1OTMxN2RjNCwgMHg0NzRhYmU4MiwgMHhkYTI5M2U3ZCwgMHhiYTAzOGRmZSwgMHhmMmZmYWU3NCwKKwkweGY1ZDAzZDNhLCAweDNiZjY5MWE0LCAweGQ3ODA5ZGIyLCAweDdhZjM1ZmY1LCAweDE2N2I3ZDllLCAweDdkZWYzZmQ0LAorCTB4ZWMzZDNhZjYsIDB4ZjY5NWQyNmYsIDB4MmZhODA2MjEsIDB4NzVjZGYyNTksIDB4YzliOWUwNjMsIDB4M2JkODNhZTEsCisJMHg5YjEzOWU2MCwgMHg3ZjcxZDI5MiwgMHhkYjA4N2VkMCwgMHg4ZTdhMjdhNywgMHhlZTJiNTk2MCwgMHhiYTU2OWQ4ZiwKKwkweGY0Y2MyZDA2LCAweGE3N2I3ZmY3LCAweDBlNGJlMGU1LCAweGMwZDNiZDdmLCAweGE3M2JiYmU4LCAweDg3ZjVjYjdiLAorCTB4ZDcwZTlkMmYsIDB4YTEwOWRlYTksIDB4ZGQ4Y2U1ZWQsIDB4NWU3Y2Y5NDcsIDB4N2UwNzZmN2UsIDB4Nzg4OTExZGMsCisJMHg1ZGQzOGFhZiwgMHhkM2M3YmNiOSwgMHhlM2M3YjlhMCwgMHhlNGQ1ZjdlNCwgMHg3Zjc5MmFmZCwgMHhmZGZmNzJlYSwKKwkweDcyOTdiNWIzLCAweDAwZmZlY2ZmLCAweDRmYjJmMzY5LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAorCTB4N2RlNWZmMDAsIDB4NTU1NDc0MGIsIDB4NTViOWU4OTYsIDB4MmE0OTNlYjcsIDB4NTQ4NDI1NDksIDB4YWE4NGE5MjUsCisJMHhjMDkwMmI3YywgMHgzMTBjN2MyNSwgMHgwNDAzZTU0OCwgMHg2YTI4NTg4OCwgMHhhMjA1YTBkNCwgMHgwMTE0ODI4MCwKKwkweDU1ZjQ3NDFkLCAweDlhN2MzMDYxLCAweDE3OWY4ZWU5LCAweDEwMmQ0NjIyLCAweGRkNzg3MTk1LCAweDg2NmRiMWQxLAorCTB4MzIyMDUzOGYsIDB4YjQwZTlhZmMsIDB4ZDM4Y2ViNjMsIDB4NjhkMWQwMWQsIDB4MzgzMTFiNjMsIDB4NmYzNjBjZjQsCisJMHg0ZGNlN2RlZiwgMHg4MDJhNTZlYSwgMHg2ZjdiZTdiZSwgMHhmNjVlOTdhZCwgMHhlZTczOWY2MSwgMHhmZmIzZWNmOSwKKwkweDVmNWJkZjY3LCAweGE1ZWIyYzE5LCAweDBmMjRjNjY0LCAweGExNTNhYjYzLCAweDYzNTk1YTc0LCAweGZmN2I5NDE5LAorCTB4NjhkMmNmZTksIDB4YWM4MzlhYzYsIDB4YzE4ZjJlM2IsIDB4ZDNmNWEzNWYsIDB4N2NjZjUwNTEsIDB4MmU1MDRiYmEsCisJMHhjZDFhNDg0YiwgMHgxMzk5NjBjNiwgMHg5OTZmZDA2MiwgMHgxMmFlYjE4OSwgMHg2ZDNiMjZlOCwgMHgxMmQ4YzJjYywKKwkweDAxOWRmZTA5LCAweDE5Y2FmOWZmLCAweDk1NmM2NzRiLCAweDQ0ZWRmZTE1LCAweGYwODc0MmI4LCAweDdmNDY2NjgzLAorCTB4M2Y5ODA1OWYsIDB4MWZkOGMwZGYsIDB4MzkyNTc0NGYsIDB4OWQ5ZDhjZjUsIDB4YmIwYzJlMWQsIDB4YmM2NWZiMTgsCisJMHgwMDljZTZjZiwgMHg4ZWNkMWRlZCwgMHhiZWM2MzRhNiwgMHhkNGE0YzM3YywgMHhkMDllZmY0MywgMHg2MGY5MjdkZiwKKwkweGU2N2FhNWZjLCAweDZkOTI4NGVmLCAweDI0ZDhjZTFmLCAweGMzZWEyZjI4LCAweDYxZGZhMDUzLCAweDhkYjZmMTU3LAorCTB4YTljYmJjZjAsIDB4M2Y5ZTBjNjMsIDB4ZmNlNzBhZWIsIDB4ODJjNjc4ZjUsIDB4MzJmMjkzMmUsIDB4MzI3NzdlYTMsCisJMHg5ZjFlZWI4MCwgMHg5ZGZiMWMzZSwgMHhmZTVkN2Q3ZCwgMHg5MzZlYjAzZCwgMHhlYzEyNThjYywgMHg1OThjMDY3YiwKKwkweDAwMzA3ODBlLCAweDA3YzMyZmFjLCAweGI0MGUzNDQyLCAweGJlYTA5MzA3LCAweDBlNzRmNWM1LCAweDJmMzA3YzIzLAorCTB4MGRkOGM4OWIsIDB4MDZlYmVmOGMsIDB4ZjExZmJjMzksIDB4MTk2NDk0YzUsIDB4NmY5YjM3ZjcsIDB4MzI4M2RiMGYsCisJMHgzMzMzYTM4YywgMHg5OGJiYWUwMywgMHg0ZDNmNTg3NSwgMHg4ZWIxOTgwMCwgMHg3ZjYwYzM0YiwgMHgzMjYzYzA2NiwKKwkweDI0Yzc4MDk2LCAweGExZWFhNmM2LCAweGU5YWZhYzEzLCAweDA5OTBmYTk3LCAweDc4ODRkN2Q2LCAweDg1ZDA3MDE0LAorCTB4ZDcyYzdhMjMsIDB4YzU4YmY4YzMsIDB4YmM4ZWNiYmMsIDB4NThjMWM0NmIsIDB4ZWIwN2ZlMTAsIDB4NWRlNjIyNTksCisJMHgzZDc3NzFkYywgMHg5MDkyY2I5ZSwgMHhjMGI3NGNlMSwgMHg3ZmZhMjVmNSwgMHg3MmM3OWQwZiwgMHhmMmZlZWZkMSwKKwkweGUyOWM0NmFkLCAweDdlZGExZGZlLCAweGFmYTZkOWNiLCAweDUyZmNmMGY1LCAweGZkYzQ2ZGQ2LCAweDZhOGNlYjJlLAorCTB4MGNmOWE4ZWYsIDB4OTc3Y2JiZDcsIDB4OTlkZWJlYjYsIDB4YzI3NDg2OTgsIDB4OTdiMWIyYzYsIDB4ZTc0ZDU0ZjQsCisJMHg5OWY0NDhiZCwgMHhjYTc0NmZhYSwgMHg2NmUxOWZiOCwgMHgzNzEzMDRjNSwgMHhmNDQ3OWYzZCwgMHhiMDBjZGVjMiwKKwkweDYzYWM3ZWM4LCAweDhiNGZkMTE4LCAweGIxZTc0ZjRiLCAweDljYzQ5NzY0LCAweDdlYmIxOGUzLCAweDQyNzMxNjU3LAorCTB4NjFhZWZkNTMsIDB4Yzg1ZDI2NTQsIDB4NWZjZmZhYTAsIDB4NTdkZTM2MzksIDB4ZDc1ZTcwMzIsIDB4YzZhYjZhYmYsCisJMHg2YWZmNWRmNSwgMHgzYWVhOTUxMSwgMHg0ZTFkMDQ5YSwgMHg4Njc0OTdkNSwgMHgyY2U3MWQ2MSwgMHg5YjgwMGViMCwKKwkweDgxNjJjMDhlLCAweGQ2NmU5YTdlLCAweDk5ZTExODg3LCAweDU3YmZiMTk5LCAweDU5NmJjNzJjLCAweDQyNGZhNWRmLAorCTB4ZmQ4YTBlNTgsIDB4M2EyNDk3NGEsIDB4MWYzYzY0ODQsIDB4NDMzZDYxZWYsIDB4MDMxZTYyN2EsIDB4Nzk5OTNiYjUsCisJMHhhMDVjYTVjZCwgMHgzOThlYmIxYiwgMHgyNGRmZTA2MywgMHgxOWNlMmZjZSwgMHg4MWVlOWNjZiwgMHhmYzU4Mzk3NiwKKwkweDg3NTg0YWIzLCAweDA5NDFhZTYxLCAweDVjNzM3YjQxLCAweDMzZTQzNmQyLCAweGU1NzRmNDE2LCAweGUyMGQ3M2MzLAorCTB4NGUzOGFlYjksIDB4NTRlZTA5MzcsIDB4MWQyYWYzY2QsIDB4YWRmYTJhZGMsIDB4MTg3NjlhNGIsIDB4YjNjMWIyZTksCisJMHg1MTIxZTg4OCwgMHhjN2FjZDRjOSwgMHg0MDZhNWZhNCwgMHg2N2Q1YjlmYSwgMHg2MjNiYTRmOCwgMHg1ODVmYTIxYywKKwkweDI5NWUwZGM3LCAweDczNzhmYzg0LCAweDUwZGRiNjgzLCAweDQ0YWQ3NWY5LCAweDhlNDdkNDI1LCAweGZiZjZkNWU3LAorCTB4ZDAwM2QyMjksIDB4NzE3ZTEwM2IsIDB4OWMwYzNkMjQsIDB4YzNhM2M1ODMsIDB4MTIyNGYwNzMsIDB4YjljY2NiYmQsCisJMHg1YmUwMTJiOSwgMHhlZTE4MWIwZSwgMHhmN2NmMTRkZiwgMHg5NzMxMGU3OSwgMHgwZjgwZmQ4NiwgMHg4ODc1ZTI2MCwKKwkweDJlNGZhODE3LCAweGM1MzdlMmQ3LCAweGIwZTdjNWEzLCAweDg2N2UyZDNhLCAweGI3ZmJiNTdiLCAweGRhNmFlNDM1LAorCTB4MzUyMzdjMzMsIDB4Y2I4YjU5ZWQsIDB4YmZiNjcwMzQsIDB4YzQ3ZmQzNDIsIDB4ZWMwZDZhZWEsIDB4ZjRkNGNlMGEsCisJMHhhMzdmNWJjZiwgMHhiZDY4MmUwNiwgMHhhOGJmZDM1ZCwgMHhiZGE2ODE3ZCwgMHhhNjlmNzQzOCwgMHgyNjhlZDQ3ZCwKKwkweGY5ZGE1YzBkLCAweDk4ZmZhNjg4LCAweGRhNmI4ZjVkLCAweDZhMzc4NmM3LCAweDdlMWRjN2RhLCAweGU4NGYwMzRhLAorCTB4N2ZlOWEyZGEsIDB4MzRkYjA3Y2QsIDB4NWZiYTkzZWQsIDB4ZGI1ZmI0ZDMsIDB4OWUwNjg2ZjMsIDB4ZDM1YmJiZGMsCisJMHgwMzg1Y2E3ZiwgMHgxZDhhYjgxYSwgMHgzMWFmZjRkMywgMHg0ZjAzNTZmZiwgMHhhNmFiZmViNSwgMHhjN2ZiNzRmZiwKKwkweGNlMTlmNjlhLCAweDY3ZGE2YTNmLCAweGQyZDFiZmI5LCAweDkzOTczYzZiLCAweGE1ZmYyYmQ3LCAweDkzNTllZTc5LAorCTB4NWY1MGRmZWYsIDB4ZGQ5NTRiMzQsIDB4ZWJmNDg2NDEsIDB4MzViYTNlMjQsIDB4MDE4NGE3NGQsIDB4OTcyYTgzZmUsCisJMHgxYzllMWQwNCwgMHhjMTM5MjU2MSwgMHhiNzhlNTlmMiwgMHgzMmIwZTkxNCwgMHg2ZTdjN2M4YywgMHhlMGYyNDQ5NywKKwkweDI4YmQyOGFiLCAweDkxZWJkMWZmLCAweDRhZmQ5ZGEwLCAweDIyNzY1ZTUyLCAweGM0NWQ0MWRkLCAweDMzMWUyOWZjLAorCTB4MzlkNjIzOTMsIDB4ODFhYWNlYWMsIDB4OWFlZDdiODcsIDB4YTcwNmI2ZmUsIDB4ZTdjMzNkYTYsIDB4MmQ2N2I0ZDYsCisJMHhiNjcwMzQ1NiwgMHg3ZmQzNWNiZiwgMHgwNjhmNmFjNCwgMHgzNGViMDU3NiwgMHg3YmQ2ZjNmZCwgMHg2YjQxNzAzNSwKKwkweDUxN2ZhNjgzLCAweDVlZDM0ZmJiLCAweDY5YWM1YTFjLCAweGFmYzNiNTFmLCAweDU3M2I0YjgxLCAweGQ5OGZmYTZiLAorCTB4OGZiNGQ0MTUsIDB4YjRkN2FmMGQsIDB4YWFkYzNiOGYsIDB4YjU3NDI3ODEsIDB4ZjM1ZmZhNmIsIDB4M2VkMzQ4NDEsCisJMHhhNjg3N2JhOSwgMHg0ZTllZGFmZCwgMHg3N2I5M2MwZCwgMHg5NGZmYTY5NywgMHg1YzBkNjEwYiwgMHhmYTY4OGVjNSwKKwkweDZhNGY5OGQ3LCAweDBmZDZhOWUwLCAweGRiYTdmZDM1LCAweDY3ZGE2YjRmLCAweGI0ZDczZjM4LCAweDJjZDA3NmFiLAorCTB4N2FkYWQ3ZjcsIDB4YWY1ZDE3NjEsIDB4N2NmMzU5ZmMsIDB4OTBjM2RhYjAsIDB4NDg2ZjgyM2UsIDB4ZDYxM2IzNGEsCisJMHgzZmUxMDJlYiwgMHg3NzdjZTQ5YywgMHgyOGVkMWU5YywgMHg4YzE0MTgyZiwgMHg0MWFkMjkwMSwgMHg0MjBjOTJmZCwKKwkweDQ4MGFlOTBjLCAweGUyYTYzNThjLCAweDIwYWM0MDI4LCAweGMxNTU0OWI3LCAweDRmNjhjOWYzLCAweDczYWE5MDAwLAorCTB4MWZhMGZjYjksIDB4ZWI1YWQ4MTMsIDB4MWJiMjY2YTcsIDB4ZGY0MDk3MWMsIDB4MjliZmMyNWQsIDB4YTA5NDRiODMsCisJMHg4NWViYWE5ZiwgMHg0ZWExNjZmOSwgMHg3MjZmM2EwMiwgMHg1ODJlM2NmOSwgMHhhZjlkN2RjZiwgMHg2ODYyY2I0ZiwKKwkweDcwNWIwNDI3LCAweDkzMDdhMDFkLCAweDllNmY0MWJiLCAweDc5Nzc2Mzg4LCAweDM3OGYwNjRiLCAweDg5NzgwY2MzLAorCTB4NWM0OGVmOTgsIDB4MzJjY2EzYWIsIDB4Y2MzM2ZjZjQsIDB4ZmY3ZmE5NjcsIDB4YWUzZTA2YjgsIDB4OGE2YmZiMDQsCisJMHhhMGE3ZmYxOCwgMHhmYmIwNjVlZSwgMHgzN2MwMDM1YSwgMHgxNTNkOGMwNSwgMHg0Y2ZjMTJiMCwgMHg1YjcwNGVjMCwKKwkweDdiNjU0OWMwLCAweDk2ZTU0ZGMwLCAweDFkZWQ0MjgwLCAweDVmODI3MjgxLCAweDBlMDg3ODA4LCAweGRjYThlYTA1LAorCTB4ZmQ1MmYwMTYsIDB4YzEwMzQwZjYsIDB4NTQ3YzA0YWYsIDB4YTYyYzA4ZWUsIDB4OWY4MGI1ZjIsIDB4NTYwNjc3ZGEsCisJMHg0MGYzZmMxMywgMHhjMGNlY2E5MCwgMHgyMzdmYWE3YSwgMHg5YmYwNGFkMCwgMHhkZjgyNzY4MSwgMHhkY2E4ODQwYSwKKwkweGU1NDFkODE1LCAweGI1Mjc0MGVlLCAweDIyZWMwZGVmLCAweDk4NDBlZGY4LCAweDMwZTA3MGUwLCAweDVkMDIwN2MxLAorCTB4N2MwYzFmMDQsIDB4NDBhMWYwNDAsIDB4MDM4Nzk1MzcsIDB4MGQxZTU0M2QsIDB4ZjFmYjUyZjQsIDB4MDc4MjA1YzAsCisJMHg1NzZiNGJjZSwgMHgyZTU3NjEzMywgMHhkMmMwNzQxMiwgMHgyZjc5M2RiOCwgMHg4NWY2NTIzZiwgMHhiYjQ2MmQ4ZSwKKwkweDQzYTA5MTc3LCAweDg3OTgzNTQzLCAweGNjODY3NzQwLCAweDJlY2Q2ZGMyLCAweDEzYTA2YTNjLCAweDcxYzlkMTM3LAorCTB4OTZhZjJmYjQsIDB4NDA3MGQwNGUsIDB4MzM1NjBkN2EsIDB4NWE5YmQyMzcsIDB4YzllOTU0YjYsIDB4OTBhZTBjZmUsCisJMHhiYjczMmY0MiwgMHgzMzZmZWI4OCwgMHhiNTM3ZjU1MywgMHg4NTI4M2UzNywgMHgwNzliOWVkMCwgMHhmODExYjI3NiwKKwkweDlmNjEyM2U2LCAweGU1YzcxNDdjLCAweGMxYmYzOWY1LCAweGEzNWY3NjhkLCAweDY2YzBhZjE0LCAweGIyNzdmZTAxLAorCTB4OGMyZmUwM2IsIDB4NWVkNzdmYTQsIDB4OWZiNDU2ZDMsIDB4YzIzNWY1ZDQsIDB4ZTcxODNhMzgsIDB4NWEyZWVjYmYsCisJMHg2YzNiMjM1NywgMHhiZDQwZjVjMCwgMHg3MmZjMGY0NywgMHhlMmRiZTZjNiwgMHgyZmJlYmEwMiwgMHgyMjM0MTc1YiwKKwkweDg1NDI1OTEzLCAweDhjYzY0NGRlLCAweDQ4ZjNkZjc2LCAweGY3ZmNlN2U3LCAweDE3YzFjMjFjLCAweDljNDI5NTU5LAorCTB4Nzg1MzdhZTcsIDB4N2YzMGFkZjgsIDB4YjJiZDExZWYsIDB4NWUzNDM5Y2QsIDB4MDBjZWI3OTYsIDB4ZjY5OTdkZTEsCisJMHhhMDc3M2ZiNywgMHgxN2Y3NWYxZCwgMHhlMWNmMGZiZCwgMHgyMWIxMjE4NCwgMHhlOWRkNzQwNCwgMHgzYWNmODg5MiwKKwkweGQ5NGQzYTVkLCAweDAyZmRmNzY2LCAweGEyNmRmOWQ3LCAweGEwMWQ0ZWZmLCAweDU2ZWJkYmYyLCAweGI2MTJiMmJjLAorCTB4MjBhMmI4ZDQsIDB4ZjA1NWVkMTksIDB4NWY2ODBjMGYsIDB4MDM0ZTYxY2YsIDB4OTg5Yjg3Y2EsIDB4ZWExYzVkZTcsCisJMHhmODIzZTY2NiwgMHg1MmE0MTY1NiwgMHhlMTc2ZjliNiwgMHgyMTYzNmViZSwgMHhhNjE1N2Q4MiwgMHg4YWZiNTg5YywKKwkweDM4M2JkNzVlLCAweDc1MmM3MGQ4LCAweGRkOTBmMjlhLCAweGZiYzcwMDc3LCAweGViNDNkMTM2LCAweDdhNjkzMTNhLAorCTB4NWQ0YmVlMjEsIDB4NDljMzM5OTcsIDB4ZGViMzY2ZmQsIDB4ZGY3ZDcwMTcsIDB4NTNmYWZiZWUsIDB4OWQzMDZmMjksCisJMHg2MWY0ODhmYywgMHgzZmIwNjk4MSwgMHgzNzc5YzIzMywgMHgzOGUwZWYwMywgMHgyMTRiMGZjZCwgMHgzZTk1NzNhNCwKKwkweGE3NGNjMTFhLCAweDdhODUxZmYxLCAweDgwNWU5MjI5LCAweDRiN2ZkMDRlLCAweDkzOTljZGViLCAweDRkZDJmNDQ4LAorCTB4M2U5MjZmZjIsIDB4ZmE3YjA0NjgsIDB4Mjg1NDJlODQsIDB4OGM0ZTg5ZTksIDB4NTE3M2FjMTIsIDB4ZWU0OWQwMWEsCisJMHhjMGYwZjRkMCwgMHhlNDIzMjg3YSwgMHgxN2Q5ZDAyMCwgMHhmZTlmZGUzOCwgMHhlMjM3MWFlMSwgMHg5M2RiZjk2ZCwKKwkweDY2Yjc4ODljLCAweGQwMDc5YzFkLCAweDllYThmMDczLCAweDQ0MjYwNGVjLCAweGQyZGFmZWJiLCAweGIyMDdmOTEwLAorCTB4YzUyOWNjYTIsIDB4NzE3MmUzNzMsIDB4N2VhZDllYmYsIDB4NGRkYzg2M2QsIDB4NzRmNGU1YzgsIDB4MGJhODZlYzIsCisJMHhlZjljYjhkMSwgMHgyZTdkNzZkNSwgMHgyZTdkNDczZiwgMHgxNWE2ZGYzZiwgMHhjM2Q1MmQ5ZiwgMHhmODFjNGZmYSwKKwkweDhkMmNlOGRjLCAweDNmZDU4ZmIxLCAweDgyM2YyODc5LCAweDNhZWY5N2FlLCAweDdlODNjZDNkLCAweGI5MmVlYjE3LAorCTB4YmVhMDcxMzEsIDB4ZDJhYmNjNTAsIDB4ZTg5OGRlOTEsIDB4NWM4OTZhZGIsIDB4Yzc1ZDNmNTcsIDB4YTc1ZDIyZTcsCisJMHgxMWU3NWQwMCwgMHg3NjhhN2Y1ZCwgMHgzMzkzNmNmOSwgMHhiYjI4NTZmOSwgMHgyODYxMzUwMSwgMHhjOTVhMmY3ZCwKKwkweDE0YzA1YzdmLCAweDJmMzIxNzJhLCAweDBjODA4Yjk1LCAweGMxYmQ4ZTkwLCAweGY3ODg4ZDI3LCAweGQ1Mjc1OGZiLAorCTB4Nzc3ZTUwM2YsIDB4YmRmNWQyM2EsIDB4ZDlmOTFmM2EsIDB4ZDUxNzU5NGIsIDB4YjViZDY3MmYsIDB4YWYzN2I0NzgsCisJMHgxZGFlZjM1ZiwgMHhlYjUzN2Q1NiwgMHg0NDkxNTM5MywgMHg3ZmNkMGM2ZiwgMHhkYjM5Y2IxNywgMHg0ZTgzNGZhNSwKKwkweDVjZWM5M2UyLCAweGU0Yjc0N2MwLCAweGU2MTMyMjdmLCAweGQ1Njc3ZGJmLCAweDNmNTA1OTEzLCAweDg1Y2ZjZjViLAorCTB4YTJlN2UzMWQsIDB4N2RlODkxY2EsIDB4ZTAxNDVmMDMsIDB4NzhhNmRmZjMsIDB4YTRmYTVmNjgsIDB4MzQ1ZjBkM2EsCisJMHgxMjNjY2UzZSwgMHhjZmJiZDM4YywgMHg4YWU2ZGExNCwgMHhmYmYyOTNlMCwgMHhmMjg1OTBmZiwgMHgxM2JkZWU0YywKKwkweGRiZjk3YmNmLCAweGVmM2M1NGE2LCAweGZiZDcxOGZiLCAweGFmOGQ0NzkyLCAweDExOWVmYWE4LCAweGUyY2ZkZmJkLAorCTB4ODVmN2VjMTUsIDB4YjIyZmVmYTAsIDB4MTdmN2QxMTksIDB4NjU4YTM4MTIsIDB4Y2IyODc2MDMsIDB4ZjJjYmQ5ZjEsCisJMHg3MmY2ZjQwNiwgMHg4OGQxY2VkZCwgMHg5NWViZDAyNywgMHg3ZGY3MGU3OCwgMHhkNjMyZDlkYywgMHg5NDIwZmE4NSwKKwkweGUxODg3NjgzLCAweGVjZDI5MzM1LCAweDc2MTdlOGQyLCAweDhkODUwMTI5LCAweDdmM2UyMTlmLCAweDE5OGVlMzhhLAorCTB4ZmNhOTJlYmMsIDB4ZWVkMTlmZDAsIDB4ZDA1OTE5MzAsIDB4Y2U3YzQ2NWMsIDB4Njc3ZjIyMjYsIDB4OWFiZjg5MWEsCisJMHgzODc5YjUxMSwgMHhiN2U5ZDc4ZiwgMHg4NGZmMWUwYywgMHhlZmUxZWY1OCwgMHg4NDFkM2ZiOCwgMHhjNTJjYmNmZCwKKwkweDJmZWI4NzlhLCAweDNjYzBmYzUzLCAweDE5ZDI0NzI0LCAweDJlNDc3M2NkLCAweDNlNzU2M2U3LCAweGEwNzZlOTY2LAorCTB4YzEzNDdlOWQsIDB4OGY5ZTNiNzcsIDB4ZmQ1MjQ3MWEsIDB4Y2ZhZWMzYzgsIDB4NjY3Y2YxZjIsIDB4ZTU1MDZjNTcsCisJMHhhZWM3OGQzMywgMHg4NGU5NzJlMywgMHhmODQ0MTljMSwgMHgwMTRiOTU0NCwgMHg2ZjJmZDYwOSwgMHhhN2ZmMjg2ZiwKKwkweDM3MWQ3MDBmLCAweDhjNjEyZDk4LCAweGMzNGFiMDc3LCAweDM1ZmY3ZWQ5LCAweGRmMWY0MDc3LCAweGNhZTNlYWEwLAorCTB4MWE4ZWY4YTgsIDB4MDE4YTYxZjcsIDB4M2VjYzU3ZDcsIDB4ZjE0MWYxNTIsIDB4MGU0ZTU1MWQsIDB4YjFiMGJmZDIsCisJMHg4ODlmYzQyZSwgMHg3OWM3ZjU5NywgMHhjZTNmYjlmZSwgMHg4ZDc5YzNhMywgMHhlNjMyOGU0MiwgMHhmODIzN2I3NywKKwkweGFlMDBkNmQ0LCAweDMwN2ZjNjhiLCAweGZmOGQ3Y2IzLCAweGQ5YzBkNTYwLCAweGZmYTZiYjdlLCAweDRkNGVkNTg4LAorCTB4ZDZlODJiYmIsIDB4NTdhZGU3YjQsIDB4NmI0MTcwMzQsIDB4NTE3ZmE2YjksIDB4MTcwMzQ3YmIsIDB4ZmQzNGVhODcsCisJMHg2YWYwZWQ0NywgMHgwNmNlZDJlMCwgMHhiYjMxZmY0ZCwgMHhiMWY2OWE3YywgMHhmNjlhYzVlMSwgMHgxYWZkODc3MSwKKwkweDZhZDc0Mjc4LCAweDNlNmJmZjRkLCAweDI3ZGE2YTA4LCAweGI0ZDdhZjc1LCAweGFhZDNkYjVmLCAweGI2ZjcyNzgxLAorCTB4Yjk0ZmZhNmIsIDB4NTdiNGQyMTAsIDB4YjRkNWJmYjEsIDB4ZDc1Zjk4ZDcsIDB4ZjFjNjJmYzAsIDB4ZWI1NGU3NzgsCisJMHg5YjllNjgzZiwgMHg4MWFmZGY2ZSwgMHhmMWU3ODg1ZiwgMHgyM2NlMTk5YSwgMHhmOWM1ZTdkYSwgMHgyNzhiNmYwNiwKKwkweDNlZTU5ODdlLCAweGZmZGY2OWE5LCAweDhkY2RjOGM4LCAweDQ3YTEyZmMwLCAweGI2N2ZlNDc0LCAweGM1M2Q3MWQ1LAorCTB4MWQzOWFhMWEsIDB4ZDdiZWYxYzQsIDB4ZTY2YTFmMmIsIDB4YmFmN2QxY2IsIDB4N2E5ZDhlOTAsIDB4NzVmMjI2NmIsCisJMHgwMzljZjk3ZSwgMHhkMGFjNzY0MCwgMHhjNTFhYTJiMywgMHhjOWVlYmI5ZCwgMHhmNDhlNTgwMywgMHg2YzhkNWViZSwKKwkweGYyNzBkMjUzLCAweDdkYTM5NjAwLCAweDE5MDM1NzVmLCAweGNhNzE2NTMzLCAweGY5OTY1ODNiLCAweDcwZDhkNmM3LAorCTB4YmNlN2FiODksIDB4ZTBjNGU1ODMsIDB4YjM5NDFhOGEsIDB4YjE3ZTI2NjAsIDB4M2U3ZGQ2MDgsIDB4ODQ2ZDkyMzgsCisJMHhhYTY1MjU3NSwgMHhkMTBmNWU3MSwgMHgxZDBjYWFlZCwgMHhkYmFhZjlmMSwgMHg0YjM3MTQyYywgMHhhMzIyZDZiZiwKKwkweGU4MWNkZjNlLCAweGVjMTA3OTFhLCAweGQzYTdmNGRjLCAweDY5ZGM2MmQ3LCAweGExZjlkODNkLCAweGMwMTdiMDIyLAorCTB4NTlmMmM3ZWUsIDB4ZTA0M2ViYjAsIDB4YmIwNDZkMWMsIDB4NjA0ZGNiMWYsIDB4NzNmZDYzZjcsIDB4OWMyM2Y3NjAsCisJMHg3YWQ5NzRmZSwgMHhjOWQ1NmU3YywgMHg2MTcyZWE3YiwgMHhjYTBmMTFmYywgMHhkNzUzMzQ1NiwgMHgwZTJiNzUzOSwKKwkweDBmZWM3YWMwLCAweDRiMjhhZDFhLCAweGUyNjdhZThjLCAweGVjOGViMDljLCAweDBhOGViMDY1LCAweDUxMDc4YjQyLAorCTB4MzA1MmVjZmQsIDB4MWMzOTMyMWMsIDB4MmJlY2ZkMDcsIDB4MWRiODFhNzQsIDB4MmViMDQ1ZmYsIDB4OTdjZjhiNTgsCisJMHhhZWRlZTkzZSwgMHhiNmY5ZjYzMCwgMHg4YTE5MzdiMywgMHg1ZDc5OWY2MSwgMHgwMTRkNmRiNywgMHhlNjc5OTczOCwKKwkweGYxZDNiZTAyLCAweDkzZmM2MDJjLCAweDA5Y2Q4Zjc5LCAweDk3ODYwYzk2LCAweDQ4ZmY3YTE0LCAweDJjZWU0OTcyLAorCTB4MTZiNTNlNDYsIDB4ZWI4MTk0N2QsIDB4ODVmZDUwZGEsIDB4M2NlMmIzYTIsIDB4MDgzOWNjOGYsIDB4Nzg3ZTdlZWIsCisJMHgyM2U3NThiYywgMHhhZmYyYWE3MywgMHg3OWNmNWM2NiwgMHhlZjUwZWY5NCwgMHg0NzIxOGNlZiwgMHhmZmU4NTNmZSwKKwkweDJmNWM3OTkzLCAweGU1MTU5ZmMzLCAweDA4OTM4ZDkzLCAweDk0OWQ4MWIzLCAweGYzNzZmMjBjLCAweGQxYTdkNWE0LAorCTB4NDFhZDkwYTcsIDB4YmIyM2U1MDksIDB4MTQ0ZmNmMDgsIDB4NzgyM2M4MjgsIDB4MWU0NGZjNGEsIDB4NTM3OTQ3YjIsCisJMHhlNzMzZTQ1NCwgMHgxZjM2NzhjMSwgMHhmMTkxNGVkOCwgMHg3ODVhYzViMSwgMHgxOWU3OWMzMywgMHgwYzdhYzBjMywKKwkweDMyODJlOTc3LCAweDkyZjBjMWVjLCAweDllNjA1MTU3LCAweDVmYjA3OThlLCAweGI1MWIzNzgwLCAweDhlOTE2NWZlLAorCTB4OWY3MTdkOTEsIDB4Mzc4YmVlYmEsIDB4ZGRhNzY4MjksIDB4ZjBmNWM3OTcsIDB4ZWNiYjgwOTYsIDB4N2ZmYTAzMTMsCisJMHg0MDI3ZDk0YSwgMHhmZDhiOTk0NywgMHhhYmU0MGY5MiwgMHgwNGFiZDFhZCwgMHhkMmUxOWZhMSwgMHgyMjM3ZWZkZiwKKwkweDNhYzVkZjYxLCAweGZkNjM5ZjUxLCAweDI3YmIwODlhLCAweGI4NmI4YzQ3LCAweDE5YmMyN2E0LCAweDZhNGFiZDlhLAorCTB4YmQwNmZjYzQsIDB4NjE4Y2VmZTQsIDB4YzllNjk1NzcsIDB4NDY2NmI5ZmMsIDB4MWU3Nzg2ZWQsIDB4NWYzMDljOTYsCisJMHhiYTQ4NjM2NiwgMHg0YmYxYzY4NywgMHhjMmRiZDQwYSwgMHhiMWFiM2ViYywgMHhmMDA4NWE1MywgMHgzYTRlNzkxZCwKKwkweGFjOWM3NTA3LCAweDA4ZmViMGM1LCAweGEwZTVkOTNjLCAweGVkZTc4NTY0LCAweGM0MjUwNjhmLCAweDU1ZWFkZDgzLAorCTB4ZGFlMjIyNTgsIDB4NTJiZGZjNGIsIDB4ZjU3ZGI0ZjAsIDB4ODY0ZmIyYzQsIDB4OGFiZGJhZTEsIDB4YTU5YmU3MTcsCisJMHhjYWRmOWJmMiwgMHgyYjFmM2Q3MCwgMHhiZDQyYTliZiwgMHhjMzNkMWJmNiwgMHg5YzZmOGNmYiwgMHg4YzVhNzI0YSwKKwkweGE5YTVhODdkLCAweDk3M2NjZjViLCAweDcyOTI2N2YxLCAweDllOTNmMTFlLCAweDJjZTJkZGJjLCAweGYxN2RmZTAwLAorCTB4ZDZjMzRiMzYsIDB4NDc3Njc0MTgsIDB4NzViM2E3MWUsIDB4ZTJkZWFhOTksIDB4NzNkNzQ5ZWIsIDB4ZWFmYWE5M2MsCisJMHgxZmE3MmIxYiwgMHg0Y2FkNmU1NSwgMHhjZTNhYjBlMSwgMHgyNGYxZWNjYSwgMHg4ZjVhODYzNywgMHhmOThlM2RhZCwKKwkweDE5YmJkNjIyLCAweGZkZTJiMWU2LCAweGFjMmI3N2NjLCAweDIxZjAzNzg4LCAweGNjOWYzNGJjLCAweGU3ZDZlOWU1LAorCTB4NDYzN2U0ZGQsIDB4M2UyMGNmZDMsIDB4NWM5YmQxMDAsIDB4MWRkOTc0ODYsIDB4MzFiYTA2NmEsIDB4NjgyYTMzY2QsCisJMHg1YmZlZGEyZiwgMHgyNDcyODQ4YiwgMHgyODRhYjU5MywgMHhiNWQ5NmQ0NywgMHhlN2Q0NjU4NywgMHgxYmQ4YWZiMiwKKwkweDEyYmU4ZWMzLCAweGE5ZTdhODNmLCAweGNmODMyNWRhLCAweDJhYmJmOWNmLCAweDBjMGQ0M2IyLCAweGU1YzliNmU5LAorCTB4YTlmOWUxYjQsIDB4NjQ3NGRhNzQsIDB4ZTIyZmFhNzgsIDB4M2EwYmQ3M2MsIDB4N2FhZDY3MmUsIDB4ZDYwYWQzZTQsCisJMHhlYjI1NjU0OSwgMHhkNjNhZjJhMiwgMHg1OTg3YTU0YiwgMHg5OWFiMmM2NSwgMHhmMzJkNjU0MiwgMHhmOThkMzk1MiwKKwkweGFkNjNhY2E5LCAweDlkNjRjZTU0LCAweDJlYjNkNjU0LCAweGEzYmZjMTJhLCAweGU0YWNjYmQyLCAweDc2MDhkZTg3LAorCTB4OTk3Mzk2MGMsIDB4OTg1YmNhOTcsIDB4NDgyZGNhOWYsIDB4ZmVmMDEzZGYsIDB4ZGJlMDk1YTEsIDB4YmI5NTI3NTksCisJMHg0NTlkZmY4MCwgMHg1MzMxMWYxOCwgMHgzOWU0MTdiOSwgMHgzYzgzNmY5NiwgMHhmMjBjMzJjNywgMHhmOGMyNjlkYywKKwkweDgzY2E5Yjg4LCAweDQzY2E4NTAxLCAweDBmMmE3MjgxLCAweGVmZDQzYzA3LCAweGNhOGVhMDY4LCAweDk1MmYwMWUzLAorCTB4NTQwZDAyMjcsIDB4ZDQ3YzA1NzYsIDB4MzE2MDU0ZWYsIDB4ZmMwNWVmOTUsIDB4NTgxZmJlNTQsIDB4ODEwN2U1NGQsCisJMHgxMmZmOTUyMCwgMHg5MTY1NGY1OCwgMHhlMjBhZTQxMSwgMHgxNjNkZGRkYiwgMHg4ZjljOWFmZCwgMHhlODI3MWU4ZCwKKwkweDg0ZjM0ZmEzLCAweGZkZDFlYmZmLCAweDc4ZjFlMmY3LCAweDgzYmEzYThlLCAweDk0YWVkNWIxLCAweDZlNmQxZTkwLAorCTB4ZTUwNDI3OWQsIDB4NzQ5Mzc3NDYsIDB4NGVlYjk0MzcsIDB4NjRkNjNiNzAsIDB4ZDkzYjI0NGIsIDB4NzI0YWJlZDYsCisJMHhhNGJiYjhjMiwgMHg5YzAyN2Q2ZSwgMHgwZmJjZGVlZCwgMHg0ZjQxOThlNywgMHg2YjY1ZWQ1NCwgMHg3Zjg0MTQxMywKKwkweGU4MTlhNGZmLCAweGRmYzFhYjcwLCAweDdmZGExNWJiLCAweGNlYmZkMmY1LCAweGFlY2U4MzMxLCAweGM3ZjUzYzQ4LAorCTB4ZWQ0YzM4ZDcsIDB4NjZiMjBlOTMsIDB4ZjIwN2MwMmIsIDB4MjY5OTNmNGUsIDB4MTBhMDc1ZjEsIDB4YzdkMmZlM2UsCisJMHhlM2U0ZDY3MywgMHg3OTFjYjkzYSwgMHgzNjhlMDVkNSwgMHg1YjBmMTlmYSwgMHhkYjE4Y2ZjOCwgMHgwZWFjNjY3ZSwKKwkweDJkYWI0OWUwLCAweDQ3MWZlODY1LCAweGY1YjhhM2Y0LCAweGRiYTJmZDUwLCAweDU2M2FlN2Q1LCAweDFlMjMzN2E0LAorCTB4ZWUwYTdkZDYsIDB4NjVlNTEzODksIDB4Y2Y4YzU4ZjcsIDB4YmJhYjhlNDUsIDB4ZmU5OWY5YmEsIDB4ZjY0N2YzMzIsCisJMHg1ZTMzMmU5MywgMHg1NGU3OTE1MSwgMHg3NDAzZmZkZSwgMHg4NmRmNGQxZSwgMHhhZWJmMWY0YiwgMHgzNTk4ZjhhMywKKwkweGY2ZmFmNTE1LCAweDdhNzcyZTE0LCAweGRiNDNlM2IzLCAweDUzZGJkZDYwLCAweDlmMjFiYzA1LCAweDYxMGViNWY2LAorCTB4OGRiYWQ3ZDgsIDB4NmZjNzY0YjksIDB4MWQzNmYzOGYsIDB4ZDFiZmY2YzEsIDB4NjlhMGRiMjksIDB4NjM2ZmJjN2IsCisJMHgxNGY5YzEzMSwgMHhlYTk3NTlhZiwgMHhjYTVlYTM3NywgMHhiMWZhZTA0OSwgMHg5YzQ4ZjFjZCwgMHhmZmZmODIzMywKKwkweGU2ZWVlNDIyLCAweGFkYWViZWNhLCAweGQ3YWQ0ZmU4LCAweDZlNzgwMmIxLCAweDFiMDVmYWRiLCAweDRiY2UzMGRjLAorCTB4MDIyZWMwOWIsIDB4YzJmMjc5MzgsIDB4OWVkMDA1MGQsIDB4NTEzNzQxYmIsIDB4YWUxZTY0MmYsIDB4MGI0ZGE1ZTMsCisJMHhlMTI4ZDk1ZiwgMHgwYjUzMjNiOCwgMHgyMTNjZGM2MSwgMHg3NTg2NzMzZiwgMHg3NDA5NWQ4ZiwgMHhjNmQ0NjZkZSwKKwkweDYzZjVmYTE1LCAweDg1OTdlNzNlLCAweGQwMTljYzMwLCAweDVlMjIzOWJmLCAweDFhYzBkNWIxLCAweDQxNjZmNTIyLAorCTB4MzViNzk3M2UsIDB4NGMzNGJjNDUsIDB4ZDMzY2YxZTEsIDB4ZTNkMGY4ODgsIDB4MTFhYWZmYjAsIDB4YmU5M2ZlM2MsCisJMHg5ZmYxNGNkNiwgMHg5ZTdmYzc3NCwgMHhlOWVkMGU5YywgMHg0ZDA1M2ExZCwgMHg3NGI2ZDk1YSwgMHg5ZWZkMDE4ZCwKKwkweGYyMjc1OGRiLCAweDNmODk1NmUzLCAweDc2ZTZjYzFmLCAweGI5MmMxODMyLCAweDFlZmMyMjczLCAweGYyY2EzN2IwLAorCTB4ZjZhN2UyMjMsIDB4NzE4NGEwODYsIDB4NGIxMWFhOGMsIDB4YTczNzhjMjUsIDB4MzA5M2VlM2IsIDB4ZTBkZTkxZmUsCisJMHhlODg5N2M5MywgMHhmZGE5ZjkyNywgMHgyYjlmMjJhZSwgMHg2ZjY3ZDYxZiwgMHhmNzM1ZTc4NCwgMHgzYzBjYmViMSwKKwkweDgxYjc5ODU3LCAweDU2NjQwOWYyLCAweGVjZGYzOTE2LCAweDI3ODc4ZTIyLCAweGI0M2QyMDY0LCAweDY5MWFkN2RmLAorCTB4OWFmOGQxNWQsIDB4OTkxZWFlZTUsIDB4MWNlMDdjM2YsIDB4Y2NiZmRiYTMsIDB4ZmRiOGU3ZTcsIDB4ZjkwMjk4NzEsCisJMHgxZjhmMTI2MCwgMHg5MzM5Nzg5YywgMHg2ZGQ5ZTVlYywgMHgyM2Y0MWVmMSwgMHhiMjM5M2M0ZiwgMHgyYWE3ZTA5NiwKKwkweDllZmY2ODNjLCAweDFhNjJiOTc4LCAweDlhOWZiMzk2LCAweDQ4NGVmZDQ5LCAweDA1YzYzMGVjLCAweGJiNzUzZjY2LAorCTB4NzkzOWY1OGMsIDB4ZWYxYzJlYjAsIDB4NzFlODkxYjQsIDB4ODlmNzUzZjYsIDB4YzVhOTFmZTcsIDB4ZjA1ZDcyZjYsCisJMHgyZTlmZDBlZiwgMHgwMTJkN2U2ZiwgMHg4OTE1MDVlMywgMHg3OTYxNjQ2ZiwgMHg2YWJkZDc0MiwgMHg4MzdmY2MzZiwKKwkweGQ1MWFmZDk1LCAweGRhNDM3N2I1LCAweDNmYzFkNGRmLCAweDZiOTkzY2U2LCAweDM3OGM3OGMwLCAweGYzY2U5NzNmLAorCTB4ZjAzMWU2MjYsIDB4ZjkyZjA3N2MsIDB4YmEzYjk1YjcsIDB4OGU4YjAxZGUsIDB4NWJkOWQ3NWQsIDB4OWViYWQ3ODMsCisJMHg1ODgzZDY1ZCwgMHgzNDE1ODc1NiwgMHg2MWVkNTlhMywgMHhhNzJjNDFlZiwgMHhkMTZiZjk3NSwgMHhhMGZiYTliYywKKwkweGRkOTYyMGY1LCAweGM0NWU3ZDIzLCAweGVkZmZhYmZmLCAweDA1NWUzNzk2LCAweGFiNjNjNDc4LCAweGU2ODc2OGFjLAorCTB4NjMzZGRlM2YsIDB4MGQyZmM1MWIsIDB4NjBhMWY5MGMsIDB4OGY1NWJmOTIsIDB4YTZmNjZjMDQsIDB4ZjY3ODdjYTIsCisJMHhmYTg3NTkxOSwgMHg4ZDZhZTRkZCwgMHg0Zjc0ZDg0MywgMHg0Y2UzMGVhZSwgMHgxNzVhNTNkYiwgMHhlMjBiYmVkMywKKwkweDI4ZjFlMjE5LCAweDhiYTQyMWU4LCAweDJhNmYxNDgyLCAweDI1ZjAxM2YyLCAweDgyOWRjMzlkLCAweDdlMjk0ZDNlLAorCTB4OGJkNjBhNmIsIDB4N2VmZThlN2IsIDB4ZDg1ZTFjZjEsIDB4NGUzNWFmZGYsIDB4YTU1Mjc5YTIsIDB4MDhjZGM0YTAsCisJMHg0MmVjMjNiNCwgMHg3ZjMzYjc5ZiwgMHg5NmMzZTIwNiwgMHhmMThhZGZlOCwgMHhjZTJhODJhZCwgMHhkMzkxMmNmZiwKKwkweDk5NmY3NjA1LCAweDEwNTA4ZjQ4LCAweDNmZDViZDNlLCAweGU2YzFjZjBiLCAweGUwMWJjZmViLCAweGIwNmEwNzc0LAorCTB4MjVjOTNlZGYsIDB4MzY3ZmVlOTgsIDB4MzkwNjFjNGIsIDB4M2ZjMmViNDMsIDB4NWJhNGU3OGMsIDB4NTFjZWM5ZDIsCisJMHg4MDZiNmZkNywgMHgwZWVjMjJmMSwgMHg5NjhkYzdkYywgMHhiYTU0ZTc4MSwgMHhmNWY2MjBkYiwgMHhlNjBiMjg4NCwKKwkweGY1ZDRmMWYzLCAweDdhZTdjYzZlLCAweGQ0ZWRkNjFkLCAweDYyZjQ3YWUxLCAweDVkMGZiMDNkLCAweGZhMjI3YWM0LAorCTB4ZDdmYWZlZDEsIDB4ZDIzYjE0Y2QsIDB4ODk3ZTYzMDUsIDB4NDcyOWNjOTcsIDB4Y2VhMTdmZWUsIDB4ZDcxYTM3MTMsCisJMHg2MTVmZDZmZiwgMHhlNTA5Mjk1YywgMHg2N2YzYWMwOCwgMHg5MTk5MjdmYiwgMHhmMWY3YTM0ZiwgMHhmYjg4YmU0MiwKKwkweGZlOGNiZDgwLCAweGU3MWY0Y2MzLCAweGJmNDZlNmRmLCAweDBkOTRmZTg0LCAweDQzYmZkYzYxLCAweGQ0NWM2MGY2LAorCTB4MGM5MjY5NjYsIDB4MzliNWZiMTEsIDB4ZDk5ZTllYjgsIDB4NzI4ZmRmZTgsIDB4ODI3OTY2NjUsIDB4OGIzZGY0ODIsCisJMHg3MmI1YWU3NSwgMHgwZjk4M2VmZSwgMHhmZDYyMmJlYiwgMHg3MTM2MTY3ZiwgMHhmZTdjNGVjMCwgMHhlMjRlZjc5OSwKKwkweDY3NTgzYTkxLCAweGNmZWEzMTU1LCAweGJjYTVlZWM3LCAweGNjOGZjZDg5LCAweGNmZWI4YzNjLCAweDNmYjkzZjc0LAorCTB4N2VmNDA2MTUsIDB4M2U3ZGNlMmQsIDB4Nzc2NTZmOGYsIDB4ODdiYzlhYzgsIDB4YzlhY2JmMmMsIDB4YWM1OGM4OGIsCisJMHhkMDdhMDc2ZCwgMHhkOTVkMmFjMCwgMHhhODI5ZDVhNSwgMHgyNTA5NzQ2ZiwgMHg5ZGEwNjczMywgMHhmOTIzYTQ5MiwKKwkweDlhNGE3MjBlLCAweDhkMWVkMzFiLCAweDdmODEyYmEyLCAweGNkZGU3Y2Y1LCAweGIzNzNhN2NmLCAweGIwMzlmODU5LAorCTB4NzM3Y2M1NWUsIDB4N2FhY2Q4YTIsIDB4MzM2ZjMwNGUsIDB4ZDAzMjc5YjAsIDB4M2VhZDczN2QsIDB4OGYxZmExMjQsCisJMHhiMjMyZjFmZCwgMHgyNmY3MGQ5NywgMHhhZGE3M2UwZSwgMHgxOWNjZTcwNiwgMHhkNDFmYTcyOCwgMHgyYWFmMjk1OSwKKwkweDY3YTBhZjBhLCAweDk0ZmM5OWZlLCAweDFkYThkMzA3LCAweGM1MzM2NWVhLCAweGFiZDYyMzNkLCAweGNmNmIwNThmLAorCTB4M2JmZDRhZTMsIDB4MGNjZTc4NTgsIDB4NGNmYWUwZDcsIDB4YTg5OWRjYzcsIDB4MzI5NzMzNjcsIDB4ZjZlOGZmM2EsCisJMHhlN2I1NDdhMiwgMHg3OGVmN2U0YSwgMHg1MGIxYTM4YywgMHhlNzljMDdmOCwgMHg1YWY2Yzc0YywgMHhjZmEzZWZiNCwKKwkweDljYmJhNTU1LCAweGMyZjViMTYxLCAweDJmNWMwNTIzLCAweGE3MjgyNGU0LCAweDkwYWVjOGVhLCAweDY2ZjA0ZWM5LAorCTB4ZmQyM2MzY2IsIDB4YjlmMmVmYTQsIDB4NTdlNTMwMWYsIDB4ZWM0M2QyMTYsIDB4MWYwODczNjMsIDB4M2Y1ZGMyNTUsCisJMHhhODczODYyOSwgMHhmYmExZDNlZSwgMHg3ZTNkZGVjMiwgMHg1MDk5ZTllMCwgMHg3YmY1ZmQ0ZSwgMHhkZmEwYzc0ZCwKKwkweGUzMmNlZmQ0LCAweGViMzc3ZWIwLCAweGEwODE4MTllLCAweGY5MDM2MWUwLCAweDdjYmU2YjhkLCAweDQ0MDMxNWE1LAorCTB4NDE0YzhkY2QsIDB4ZTNjZWFiYmQsIDB4NmVmYWUwMjgsIDB4MjVlNDIxOGYsIDB4YjMyYzVhZjksIDB4ZDkwNzI0NmQsCisJMHhmNDExNGJjNSwgMHhlODllOTAwMiwgMHg2ZjMxYjc4NywgMHg5MWY5MmI2MywgMHg4NjEyZmNiNiwgMHhhY2NkM2M3OSwKKwkweDk3ZDIwZWYzLCAweGUzMGM4ZDY3LCAweDM4MzYzN2FmLCAweGZmYjA1NTBkLCAweDg2OWQxYjFiLCAweDIxOWY3OGY5LAorCTB4MjNiNDNhYjMsIDB4YTg1MDZhNmUsIDB4ODU0NmE2ZmUsIDB4ZmQ3OTliZDcsIDB4ZDUwZjA2ZGMsIDB4ZjBmNDZkY2YsCisJMHg1YmQ0MGI3YSwgMHhkNDI5MGYzMCwgMHg2ZjcxODAxNSwgMHg3NTNhYTRiNiwgMHhlOGQwMWY3OCwgMHg0YzE3ZWRlNSwKKwkweGZjMWM3ZWQ0LCAweDhjMjdjYzAxLCAweGJjOTEwYjhmLCAweGYxZDFlZDZmLCAweDdjN2YyMzdiLCAweDlhYjU4MjQ4LAorCTB4M2IwZWNiMTIsIDB4ZThmNzdmMTEsIDB4Y2MxNzUwMTQsIDB4MmIzMzJkOTQsIDB4NzgzNmNmYzAsIDB4N2Y2ODdhNDMsCisJMHgxMDMyODU4ZSwgMHgzNjE3YmI5MSwgMHg3ZWExMGI3OSwgMHhlMmI2NDNiNywgMHg3YjgzNzZmZSwgMHhjMTQ3Zjk4YiwKKwkweDlkZTEzMmE1LCAweGJkZGUwMGZlLCAweDNhZjc0MWQ4LCAweDNlZmM0NTViLCAweGYxNGNjNGI4LCAweDI4NzViMDY2LAorCTB4NjQ5NmNjZGUsIDB4Yjc4NjNiMGEsIDB4ODZiMDJjNzcsIDB4MzkwMzFlZDAsIDB4N2JkOGU3NDgsIDB4MDA3NjRjOGYsCisJMHg2ZWEzYzNjOCwgMHhlNjc2OGJiNCwgMHhjYTlmMTgyYiwgMHhiN2U1YWE1YywgMHhhYTBiODVmNCwgMHg2NjQ2YmM2OCwKKwkweGJlYmQzZjQ1LCAweGJjZDc4ZjkxLCAweGExZDIxNzUzLCAweDcxYjk2NTVkLCAweGYzNDFkMjI2LCAweDNmYTBhNjBlLAorCTB4NTNjMmVjZmIsIDB4ZWUxMGMzYjUsIDB4M2YyZTE0NTAsIDB4NzlhMTcyYjQsIDB4OWM0NzUzZTEsIDB4Y2ViZjFmYjgsCisJMHg3OWZkNDA1YSwgMHg1ZmQ5YWYxYywgMHgwZDJmNWRiZCwgMHhiNzlkMzNmMCwgMHgwYzdlNDA3MywgMHg2MWNhMzc5NiwKKwkweDVlNjMyNzFjLCAweGMxZjE4MmI1LCAweGM2MjdkODc0LCAweGJjOGMzYmYzLCAweDRjYTc3ODNlLCAweDBiZTkyZGY3LAorCTB4ZjQ3NWIwZTUsIDB4MGI2NzdmMDAsIDB4MWYyM2E2MTQsIDB4ZDE3YzkxMjYsIDB4OWRjOGQ3ZjAsIDB4YzE3OWY4NWEsCisJMHgzMmVmYzBhNywgMHg5ZGI4MmJlZSwgMHhkMTY3M2U1MSwgMHg5MDNmNmQ3NiwgMHg1Nzk0M2E5MywgMHhmYWRhZWRkOSwKKwkweGUzZmE4YjViLCAweDQ0M2MxYTAyLCAweGU3ZTZkOWUzLCAweDlmN2EyZjcyLCAweGM3MGFmYjAzLCAweDc0YmVkMTE1LAorCTB4ZDcyODVmN2MsIDB4NzJkOGJlYTAsIDB4MWI4YmVhODAsIDB4NDRlOWM1NjUsIDB4MGE3OWQ3NzksIDB4NTNiNDVmZjcsCisJMHhlYjgwNjE2NiwgMHg0NGNkOTYxNywgMHhhNGRmYWE3YSwgMHhmNWM4ZjBhMywgMHhjMmU0OGJhYywgMHhjNmFkZjY5NSwKKwkweDE5ZjdhMjNiLCAweGYyZWZiZmJkLCAweGE4OGU1Y2Y1LCAweDY2MTNlMGY2LCAweDFlZGIwN2IyLCAweDllZjBlOGI2LAorCTB4NzhhZGVjMTUsIDB4NTVkYzJiOGMsIDB4NDAyYzFkNTQsIDB4MWRjODQwN2IsIDB4OTczZDI1YzMsIDB4YTIxNmNkMjcsCisJMHg1MWVkODM1MywgMHhhMWZjNjQ3NywgMHgxM2Y1NTQ2NSwgMHhkODZmZDQwNSwgMHg2ZTNjNzU4ZCwgMHg5NjhlZmI0MSwKKwkweGUzMTczZjYzLCAweGU2ZDZlYTRkLCAweDEzZGI1ZGUzLCAweGE2M2Y5NTFmLCAweDcyOWJjN2NkLCAweDdmMmEzMzIxLAorCTB4N2YyYTJmMmMsIDB4N2RhNjk0NmMsIDB4NTQ1Yzc1YWEsIDB4NTFiNWQ4ZmUsIDB4MWEzNTYzZjksIDB4OTY3Yjk2NzgsCisJMHhjYWY1ZmZhNiwgMHg4NmY4MWE0ZCwgMHhmZDM0M2JmMiwgMHhkNmVlNzhlNywgMHg3NzU0ZGZiNCwgMHg2NmZkYTZiZiwKKwkweDdjMGQ0YWVmLCAweDZiNWZjMzZiLCAweDZiZTZkZmZhLCAweGIxZGZiNGQ2LCAweGY2OWEyN2Y4LCAweDJkNDlmZjY4LAorCTB4Zjk3MDE1NzcsIDB4M2ZlZWQ5YmUsIDB4ZDA2YzAxNDksIDB4M2RmNzkxZjcsIDB4MjhkZTk5NmEsIDB4N2I5ZTQ2ZjcsCisJMHhhN2I3MDI1MiwgMHhiOWZkZmJhMiwgMHg4YmZiZDM4MCwgMHgwNThmOWYxMiwgMHgxYzc4OWFlZCwgMHhmMTM1ZDhmMywKKwkweDg1NDU3MGJhLCAweDcxYzYxYmI5LCAweDIxZGY5NTFhLCAweDBlZTI2MmRkLCAweDZiYjZiZmJmLCAweDNmZjZkOWVlLAorCTB4YmM2MGZkMGUsIDB4MWI1Y2M0YTYsIDB4ZmY4YzNiZWEsIDB4MzdiOTQwZmEsIDB4NWY3NDc0ODcsIDB4NGFiZjViNjEsCisJMHg2OWI4M2QyMiwgMHg1Y2FiOGYxNSwgMHhhZjNjNTIzMCwgMHg4ZWFjMWQ3ZiwgMHhkYzQ2ZmJjNiwgMHhlY2ViYTk2YiwKKwkweDJkYTQ3MTEwLCAweDg1NDI0NzE4LCAweGZkNDE5OWU0LCAweDdlZjFjNjU2LCAweGUzNTc0ZDNmLCAweDM3MWEzZThlLAorCTB4YTQxOGRjYTMsIDB4N2U4NWJjZmMsIDB4Y2RjMGUzMDksIDB4N2JjNTY2M2UsIDB4MDJjYjc0OTMsIDB4MDY5YmZmOWEsCisJMHgyNjVkOTkyNSwgMHhiMDE2ZGEyZSwgMHg2N2NjMGYzMywgMHg2MzVjMTU1ZiwgMHg1MjdkYmQ4NCwgMHhiM2Q0ZjdkMCwKKwkweGNmZGRiY2YwLCAweDViZDMxZTI4LCAweDE4NTNlZGYwLCAweGUxNDNlOThmLCAweDIxOWQ3NDA4LCAweGY3M2YzYzczLAorCTB4NWZjZmVlYzAsIDB4ZTZkYWY5ODEsIDB4NWNhMTk3YTUsIDB4NWFjZjZlOGQsIDB4NDNlYmY3YmUsIDB4NmU3ZjY5OTcsCisJMHhkZTFmNWJkOSwgMHgxZmU3Yjk3YiwgMHgyNWJhNzVkOCwgMHgzOGM4N2RhMiwgMHhmMzI2NDM2OSwgMHhlMDAxZDA0NCwKKwkweDgwZmRlNjJjLCAweGY5ZjVjODVjLCAweGM1MjMwYWYyLCAweGZjMDFhZWIxLCAweGJmYmUwMjE1LCAweDg5Y2ZmOGFhLAorCTB4M2ZiOWUwM2IsIDB4NDRlZWZiMzksIDB4NjVlYTFkM2IsIDB4ODQ3ZTg3YWMsIDB4OWZlNTNmZDcsIDB4OWM5MmZjYTMsCisJMHhhM2RmNjA1MSwgMHg5YjE3MWRmZCwgMHg3MjE1Yzc2ZSwgMHg4ZDZkOTViYSwgMHg2YTA3MThiZCwgMHhkMTNhMzQ0YSwKKwkweGJiMzJjZmNmLCAweDA3MTkzZWNhLCAweDdlZTA2ZDc0LCAweGZlZmZiNDc1LCAweGRkYmZiZjVjLCAweDkxNzdmZTQ5LAorCTB4OTQ0YjI3MTgsIDB4OWU3ZjJiN2EsIDB4NGU0YzgzOTksIDB4MzExNGY3MTcsIDB4NmE0ZmExZjAsIDB4NjU1ZTUwOTcsCisJMHg4ZDNmOTQyZSwgMHg4OWZkOGJlNCwgMHhhNDIzOGE0NiwgMHhjMWRjNDQ1YiwgMHgxNzEzNThiMiwgMHhmYjA2ZTM1MCwKKwkweDkwOTVlZjEzLCAweDRiYzNkM2VlLCAweGYxOGY5ZTI4LCAweDVjNmYxYzAyLCAweDExZDY5M2ExLCAweDMyYzgyZjFkLAorCTB4ODZiYWQzZTcsIDB4ZDdmNTlmMWUsIDB4ZTYzMTQ4MjcsIDB4MWE4NzVhODksIDB4Mjc5ZTg4OWYsIDB4ZWEwNGY2ODQsCisJMHg2NGYxNjU5OSwgMHg3YmVmNDQ0ZiwgMHg3OTU1NjE0OSwgMHhkN2U0NzBlMSwgMHg1MWQzOTNkZSwgMHg5MDMyOWY3ZSwKKwkweDVlOGExYzNlLCAweDE0M2NjZjMwLCAweDQyYjRmZTMxLCAweGZlNjNkZmVlLCAweGU2M2Q2NDc4LCAweGUzMjI4Nzg3LAorCTB4ZWY0MWNjZDksIDB4MmEwYzEwMmIsIDB4N2JiMTg0NjYsIDB4NzdjZTExNDMsIDB4YzI3N2NmOTQsIDB4MWVjOWQ4YTAsCisJMHhmZTg3YjUwNCwgMHhkNzIxN2Q1ZiwgMHg5NzMwZDMwMywgMHgxOWYyMzg2ZCwgMHg4MWRiY2JmNywgMHgxMmRjYjFhZiwKKwkweGQ2N2Q5MmIwLCAweGYwODdmYzAxLCAweDk1MjcwMTBiLCAweGNhOWI4MGExLCAweGRhODUwMTZkLCAweDA5Y2EwN2I3LAorCTB4MjFlMDI1N2UsIDB4OGVhMDQ3NzgsIDB4NWUwMmQ3Y2EsIDB4NjgxOWRmYWEsIDB4MDFlN2Y4MjAsIDB4ODE5ZDk1MWYsCisJMHg0NmZmNTRjNSwgMHg5YmYwNGZjMCwgMHhiZjA0ZDU4MSwgMHgwMTYwZjY4NSwgMHg1M2Q3YTljNiwgMHg0YWQwM2JiOSwKKwkweGVkMDM3YmVkLCAweDA4MWRiZjA0LCAweGVjMGUxOTUxLCAweDgxMDNmYWEwLCAweDA2MGY4MjRlLCAweDI4N2MxMTc2LAorCTB4NzBmODI2MTAsIDB4NDc5NTMwZTAsIDB4N2Y1NDVkMDMsIDB4YzEwMWYwM2MsIDB4YzkzZWUzMzcsIDB4MTVkZjU4YWUsCisJMHg0Zjg1NzhjMCwgMHhmNzdkYTI3NiwgMHgxNWExNmZhYywgMHg3Y2ZiNmJlZCwgMHg3OWM1MTU5ZCwgMHgwNGI3NGZiYiwKKwkweDhkMWQxY2UzLCAweGVmMTMxZWZjLCAweDA0MGUzMTIzLCAweGVkMDg2ODc2LCAweDY3ZmNmYjM5LCAweGY2YTU0YzhlLAorCTB4MTliZWQ0YjksIDB4YzRhNzA0ODcsIDB4YWZkYjgyYjYsIDB4ZmE5MTk5NmMsIDB4MGEyMTMwZDksIDB4ZGE1OGViOWUsCisJMHhkYzAzZDIxOCwgMHhlZDRmMTg1YSwgMHhmOTMyMTViNiwgMHhmY2U5Y2Y2ZCwgMHhlZWRjODUyOSwgMHgzMzZkZjkyMiwKKwkweGE1NDFmYjcwLCAweDVjODUzNTgzLCAweGU0MjlhZWRlLCAweDE2MWY1Y2Y3LCAweGNhNGE3M2YxLCAweDllNDdhZDhiLAorCTB4YTZlZDU0MmQsIDB4N2Y3MTg3ZjUsIDB4M2ZiMDc5ZjYsIDB4NTViY2VmNWMsIDB4YjU5N2JjNjYsIDB4NzJiM2EzZGQsCisJMHhjYmRmOTM3YiwgMHhiOGJmNjAzYSwgMHhjNTBmNTg3ZSwgMHg2ZTdjZDk4NSwgMHhhZGU2ZGIyZiwgMHhlNjM5NzVhNSwKKwkweGQ2ZWQ0OGRmLCAweGQwNTM0N2EyLCAweGFmZjc2ZjRmLCAweDZkZWI0MzlhLCAweGQ5YWUyOTk0LCAweDgyOTAzYmVlLAorCTB4ODljZjZjZjcsIDB4ZjBkYjI3N2MsIDB4NjRhODZmNzgsIDB4OGQ5ZTdhZjAsIDB4ZTMwNzdmNWEsIDB4ZWMwMzgzN2UsCisJMHhlYzYzZDdhNSwgMHg0OTZlZDMwMywgMHhjNzExMzBjZiwgMHgzMzFjZDQ3YiwgMHhlODI5ZDc4ZSwgMHhmZTcxMjFkNywKKwkweGM0Y2EwZjYzLCAweGIwMzAyZjdmLCAweDJkYjllMGZiLCAweDUxMDVkZjYwLCAweGI2YmY1NDBlLCAweGJkNTVlMzAyLAorCTB4Mjg5ZGJlODUsIDB4OGU3NzlmMzcsIDB4OWMwMzIwM2YsIDB4Y2ZjN2M3NWEsIDB4ODJiZjI1NWQsIDB4Zjc5YzM0NzYsCisJMHhiZjUwMmRlNywgMHg1ZTRkYmVlMSwgMHg0ZGIwZWE1YywgMHg2ZWM4MzVjZSwgMHhjYWRmZjNlZCwgMHg0Mzk3ZjhjMCwKKwkweDVhOGY5ZWQyLCAweGY5ZjYyZGJlLCAweGI3OGY4NzgyLCAweGYxNGM5NTY1LCAweDM3OGFkYjY0LCAweGJjZjkwNzVkLAorCTB4MzNmZjkxYmIsIDB4YzM4YTNlOGIsIDB4NWNkZTRjMzAsIDB4ODY0NTBlYTcsIDB4MzVmYzllNjMsIDB4ZmY3NzE3Y2UsCisJMHhjZDQyM2FhNiwgMHhkZjNhOGYyNiwgMHg2YWVmOWM1OCwgMHhiMWUyMzRmMSwgMHhjNjJmOWI1YSwgMHgyNzkyODZiYSwKKwkweGJmMjM5MjU3LCAweDgxZWYxNDI5LCAweDk0MmNiMTY0LCAweGI4MTljZjIzLCAweGU0OWUwYWRjLCAweDA1MjUyNGY2LAorCTB4OGYzYzFhNGQsIDB4ZTZhMDJmOWEsIDB4MGJlNzQ0MGYsIDB4MjllMDVlZmMsIDB4ZGU2MmM0Y2IsIDB4NGZkNjdlZTcsCisJMHhkNzNhNDFiZiwgMHhiZDFiM2MxNywgMHg5MmUzNjc5NCwgMHgzNTg3NDkzMSwgMHg3YTEyZDgxOSwgMHhkZTJhYTdlZiwKKwkweDNkMDYyNmJhLCAweDI4NTNlNWE4LCAweDFmYzEwMGM3LCAweDJlNzEzMjE2LCAweDM4ZjhlYTliLCAweDY0Y2UzZTNhLAorCTB4MmFlMDgyYjYsIDB4NDMxODM1OGIsIDB4MzNlNWFiNWUsIDB4MmI3ZjljNjIsIDB4NzU5Yjc0ZTQsIDB4ODcwZGNlZGYsCisJMHgxYThmN2NmMCwgMHg4YjZhMzcyOCwgMHhmZDAxYjQyZSwgMHgzZDA5ZTA4NCwgMHg3ZDRjZDdjOSwgMHgyMjU3ZDZlNywKKwkweDQxMTdmNWQ2LCAweGExOGM1YjlmLCAweDZlODdiYzYyLCAweDUwNGFmMTg3LCAweDk0YmYyMmFlLCAweGQ1ODJmYzUwLAorCTB4N2Q1ZGUwNDcsIDB4MWQ4NDNmZWUsIDB4NzVjNWZjZjAsIDB4M2NmZjc0MjksIDB4ZGExYzZkNmYsIDB4NGNjY2VkNDcsCisJMHhmODMzNjBmNCwgMHhkMDQ2YzY1MywgMHgzMmU5MGQ4MywgMHg4YjM4N2QwNiwgMHhmYzBlMzQ4YywgMHhlMjI2YWE1OSwKKwkweGNiZDcwY2JkLCAweDYwOTcyODM1LCAweDI2MTZmYmRkLCAweDk5YWMzZTkxLCAweDMxYWNkZWZmLCAweGM5ZjY1NzAwLAorCTB4NjViMmNmOTQsIDB4OWNkM2NmMjksIDB4Y2EzYWVmZjQsIDB4MzFmYjc5MTMsIDB4Zjc1ZGY3ZWUsIDB4OWZiZDJkNTAsCisJMHg2N2NhMjE5NCwgMHhiMjgzY2ZkMSwgMHhjMjUzM2Q3MiwgMHgwYjk1MmU3MCwgMHg5OWJmMTQyZCwgMHgxMzNlNDE3YywKKwkweDQ4NTFhN2U5LCAweDE3ZmEzYzdhLCAweDZkNzM1ZTNjLCAweDBmNzlhY2FmLCAweGI2OGY1MjZkLCAweDhmNTQ2MDNmLAorCTB4Yjc0NjQ2NzYsIDB4ZWYzZWRlYjYsIDB4NjE1M2QzY2QsIDB4ZmNhNWY2OWUsIDB4YmY4YmY2ZTEsIDB4NzA3MDgyM2IsCisJMHgyNGUyOGU5NSwgMHg1MDY0ZmJlYSwgMHg0ZGYxNDE5MywgMHhmOTgxOTgzOSwgMHg4Y2NjMWI5YiwgMHhiZTZkYjllNCwKKwkweDYwZjI4YWQ5LCAweGM5M2M3YTdmLCAweDJjZGJmNmJmLCAweGNiYWU4NzY0LCAweDNiNDM4YTZmLCAweDU1NmYzNGQ5LAorCTB4OGMyMzk2MGEsIDB4M2IxOGFkYzEsIDB4MmRkNWU2YmQsIDB4OTEyN2Q5MzcsIDB4NTVmMzU1YmMsIDB4ZWMxY2FjODIsCisJMHhkYzhkYmI4MSwgMHhmNzNlMDljOCwgMHhlNTE5NTRmNCwgMHg5OTY3Y2YyNSwgMHhhNzk2ZWFmNCwgMHhhZGQ4Zjk4MywKKwkweGQ0ZTFkNjk1LCAweGY5YmU0Y2IxLCAweGJhNzZmODdlLCAweGJlYjg5NmI3LCAweDFkYTExYTcwLCAweDdjYTM3OWUwLAorCTB4N2I0MTE1ZDcsIDB4M2Y3MDVhNDYsIDB4OWNiNjZkMzYsIDB4NmI3Y2E0NjksIDB4Zjk4MjMyNGMsIDB4Y2NmZDBiMGQsCisJMHg2NThkZjU4OCwgMHg1NzNlNDhlNiwgMHhmMmZiZTRmOSwgMHg4N2M2M2M3ZiwgMHgwZTU5NWY4NywgMHgyYmRjNjk1YywKKwkweDNlNDE3YmYxLCAweGZjYTE5YmU3LCAweGYyMTBkMzY5LCAweDFmOGZmNTU0LCAweDhiZmNlMDI5LCAweGY1N2E0YjZjLAorCTB4N2RhNjMxOGMsIDB4Y2UyMmFiZjUsIDB4OWU0NmU1NjcsIDB4NjFiYjMyYTcsIDB4YzNkZDFkNWEsIDB4Y2M2NWJiMDQsCisJMHhkYzUxN2JlNywgMHgyN2E3YjUwYiwgMHg3YjcxM2RkMiwgMHhiZGUzMGIyZSwgMHg4ZTgxNzA0MSwgMHhmOGQyN2JjNywKKwkweGI5OGRlZDdmLCAweDkzNmExZjE0LCAweDNjYzEyOWZjLCAweGI5ZjA5N2NjLCAweDAxZGFmY2YwLCAweDdmMzA4OTQ3LAorCTB4ZWI5NzBlNWIsIDB4ZTJiN2U0MmMsIDB4YjM4YzM1N2QsIDB4ZTBmZDcyMzgsIDB4NzRiNTA1ZWYsIDB4YTYxZWM4Y2MsCisJMHg3ODllODVmOCwgMHg4ODhjNjljZiwgMHgxYzVjNjNiNywgMHhjZmQxMTdlMywgMHhjMmQ1ZWU0ZCwgMHhlMTY4MmU1MywKKwkweGMwZDA2NjJhLCAweDNjMmQ2NjM1LCAweDM3ODVhYWQ1LCAweDdkM2I3MTE1LCAweDNmNWI1ZGJhLCAweDFkODVhOWMzLAorCTB4NzRlMzA3ZDksIDB4YzJkZmNmM2MsIDB4ZjA0OWUyMjIsIDB4NDQ3ZTVlZjcsIDB4NjhkZDY4MWMsIDB4NzY1ZjNlZmUsCisJMHhjYjhhNTJmNywgMHg3OGYwZTViNiwgMHgzNjk1NjM4ZiwgMHg0MmM1OTFjZSwgMHg3MzJmZTIxMiwgMHhkNjNjNTQ2OSwKKwkweDg2M2Y2NmJkLCAweGEzMGJlZDk3LCAweDVlZmM0MWUzLCAweGE5YTFmMDAyLCAweDdjOGEzMTQ3LCAweDllNjhlYWYwLAorCTB4ZDIzZGRlODcsIDB4Y2UwOGJkYjcsIDB4NWYwYzYwYjMsIDB4NGQxZGFiYzcsIDB4ZGFjNTNmNzQsIDB4NWNhZjg4ZDMsCisJMHhiMDY5NWYyMiwgMHhlODhhN2NiZSwgMHhmOTBmMWQ0MCwgMHg3ZmIxMTgyMiwgMHhmODQ4ODdlNCwgMHgzN2JlNTFhMSwKKwkweDhiZTQxZTcwLCAweDJjZmVhNDYwLCAweGZiZDAzNmU5LCAweGExYmU2MmFiLCAweGNmZTU0M2Y4LCAweGEyOGY3MTcyLAorCTB4ODlmNGRkZTYsIDB4OWJiY2Q0YjEsIDB4NzA1ZjIyNTUsIDB4NGViZTU0NTcsIDB4MTkzNmEzOWYsIDB4YWViZWU3ZmQsCisJMHhmOGIxZjE5NSwgMHg2ODJlZjkxMCwgMHhlNTg4N2NlMiwgMHg4MzdmOTEwNiwgMHhlMjJjMTg3YywgMHhhNmY1ODg3YywKKwkweDYzNzg1NmVmLCAweDA1MGI4YmQ5LCAweDYzYmZkYzVkLCAweDIyNGY4NmM5LCAweDczYWNiN2Y2LCAweGJlNWUwNjg1LAorCTB4OTEwZGUxZWIsIDB4ZTNmNzUxZjksIDB4YmYwODMwM2YsIDB4ZWQ3ZTUxOWUsIDB4MmY5ZGIxNTIsIDB4MmJjYmZmNGYsCisJMHg0OGNkMGNjZCwgMHhjZjI4MDdkZiwgMHgzMTljMTU5NiwgMHg1ZWE3N2JmMiwgMHg0MmViOWUyMywgMHhjYzk5ZmY2MSwKKwkweDJmZDFmMmIzLCAweGYyZTIxMWRiLCAweDM3ODg5ZDZjLCAweDMzMTU1YjM0LCAweDNiOTk4MWM2LCAweDUwYzcxMzU1LAorCTB4NGI0ZDExZTMsIDB4ZDg1NGI2NWMsIDB4N2M3ZjcyNDcsIDB4N2NhNTZiYzEsIDB4MTRmOWUxZGMsIDB4ZjFhYTQ4ZGYsCisJMHgzMmM2Y2VkYywgMHg5YzY0NTNkNiwgMHhkZDYyMDY2YiwgMHhjMDU2YzE4ZSwgMHhkOTU3ZjllOSwgMHhjMGM3NDEzMywKKwkweGY4MTc0ZGJlLCAweGIwZmRjOTdiLCAweDhmMjQ2N2VjLCAweGVhNjhlNDJlLCAweGEzOWM0NGRiLCAweDBiMmRiZjlmLAorCTB4OGIzZTcwYWEsIDB4YjBmYjQ5ZGIsIDB4MWUxYWZmMzEsIDB4ZDFjNmQ0MTcsIDB4ZTczZGUyNGMsIDB4MzQzYmUzYzEsCisJMHg3ZTIyNmRmNSwgMHhiNWYxZTU3MiwgMHg4NWQzMzk3MSwgMHgyZmM2MjFiYywgMHgxYWRmMWE4YywgMHg3MTgxZmM3MywKKwkweGFiYmRmMWI1LCAweDcxNGYzN2I4LCAweDJlM2ExODRmLCAweGU5Y2RkMjM2LCAweGRmZGQ5ZDY5LCAweDgzMzE3MTg1LAorCTB4MDY2NjdmZTAsIDB4ZjI4ODk5M2EsIDB4ZTNlOWZmODAsIDB4YzFhZTdlNzksIDB4MTk4ZjhkYTEsIDB4ZmEwYmFmMzAsCisJMHg5OGI4OTczZiwgMHgzZWZhOGFlNCwgMHgwNTk5ZmRiNSwgMHgyN2NiY2ExMiwgMHhhNGU4ZmRmMCwgMHg1YTI0ZjJjMSwKKwkweGRlNDRkODhlLCAweDgxMWNiNDdjLCAweGQzNzAzNGY5LCAweDM2Y2Y1Y2MzLCAweGU1MGY4YTRiLCAweGZlN2VmNDczLAorCTB4NzU4N2YxN2YsIDB4YzhiYmUzODksIDB4Nzc4ZWNlYWUsIDB4MGY2MzJlOWEsIDB4NjM4MjA1YjcsIDB4ZjE3NWI5ZjEsCisJMHgwNzc4YzVmZSwgMHg5MThlZjc3ZSwgMHhlMzk0NGY2OSwgMHhmODhjZWI3YiwgMHgyOThlYzU2YywgMHhiNjBmMzE3MywKKwkweDEzZWJmMDRkLCAweGE3YTIzYTY5LCAweGI3ZDNkYmY0LCAweDI5ZTgyM2VhLCAweGExNzNlOGRkLCAweDEzYWU5YzNkLAorCTB4ODdmODVmZjksIDB4ZDIyN2I0NzEsIDB4MzE4YzZkYjcsIDB4YTlkNzZhYmYsIDB4ZDYwMWFkYjAsIDB4NmQ4ZTcxMTEsCisJMHg5ZmVlOWVjMiwgMHhhZGNjOGVlZiwgMHhkMjcxODhmYSwgMHgzNGIxYmU0ZCwgMHhhM2ZlN2Y1ZiwgMHg4N2U1YWY5OCwKKwkweGM0NTliN2NkLCAweDZjZjlkNGMzLCAweDY3Zjc2YTc3LCAweDdmNjlmYTMzLCAweGQ0ODdhMTM2LCAweGZlZTMzNmY5LAorCTB4MTVkNWYwNjIsIDB4NzVmZTEzZTcsIDB4Njk3NzdjZmYsIDB4ZjkzMzY3ZjcsIDB4ZjUzNjdmNjksIDB4N2NlYTFiM2IsCisJMHgzZTZjM2YyZCwgMHg3NmNmZTBiYiwgMHgzZDk3ZGVmMSwgMHg2NDM3N2Y5ZSwgMHg5YTIzZjdhOCwgMHhiZGNjZjNmYiwKKwkweGVkMmY5NDY2LCAweGU4NTBiYzZhLCAweGZhNTE3M2JiLCAweDNiZTg0OWFlLCAweDY5NzNmOWY1LCAweDNkZmYxNGI5LAorCTB4NzMyNmY4NzcsIDB4ZmE4NzNkMmMsIDB4OTMzYjA5OGQsIDB4MDk5MzNiMDksIDB4ZDllMTEzM2IsIDB4MGQ1N2E3MzUsCisJMHhiYmZjN2EwNywgMHg5NWNmMzcxZCwgMHhiZWNmYWY0MSwgMHgxY2Y4ZjRmZiwgMHhmMWQ5ZGY4MCwgMHhlODMyYjk4YiwKKwkweDllYWZkOWE5LCAweDFlMGIzMzdlLCAweGZiZGJmZTI5LCAweGU5ZjRmYzM4LCAweDViYjQwNzNlLCAweGFkY2NjZjgyLAorCTB4MTg2OTM4MDUsIDB4YmFlYWNmZDcsIDB4Yjk3Nzc5ZDUsIDB4N2NiOTVkYjksIDB4NmY4ZjFlNzUsIDB4M2Q0NTljODIsCisJMHg2N2UzOWNkNiwgMHhjYWZjN2YxOCwgMHgxZjM0OWJkMSwgMHhlZWNmMmZmYSwgMHgwMzEwNWY0ZCwgMHg3Y2I5NmEyZiwKKwkweDFlN2YyMTc1LCAweDk4ODljMGFkLCAweGFmNDhjNmNmLCAweGM3YmVhOGRkLCAweDhmN2RhNzUyLCAweDIzNjkyOTI1LAorCTB4MmM3MTg3ZDksIDB4OTYzOTQ1NjQsIDB4ZmJkMGY2NjAsIDB4NzMxNmQ3OTcsIDB4NTMzMzcwYmQsIDB4ZTE1ZmI4MWEsCisJMHgxYzc5MTAyYywgMHg0ZGNiZGVmNCwgMHg2YjVjNjJlNSwgMHhmZGIxMmZlNSwgMHgwOWU3OWQ2NiwgMHg3OWZmNzdmNCwKKwkweDY4ZTFiY2QyLCAweDczNzlhYjNlLCAweDNiZGUwNmEzLCAweGRlN2RmZWRkLCAweGIxZmQ5ZTRmLCAweDY0ZTU2ZGM0LAorCTB4MzY5OThmMWUsIDB4N2JkZmM5Y2EsIDB4YTIyYjg4OGIsIDB4M2UxNDNjNWQsIDB4ZmY3Mzc1M2YsIDB4MWU5ZjAwN2UsCisJMHgwZjU0Y2Y4ZSwgMHgzN2I1YTdjNywgMHhmZjljMGQ2OSwgMHhmNGRlOTRmMiwgMHhjMzRmODljNywgMHgwODM1ZjEzMSwKKwkweGZiZjg1MWFmLCAweDdlYTk5YjkzLCAweDg4ZWQxZWEwLCAweGM1NWJlMTJiLCAweGQ4NWY5YWFiLCAweGM4MGIzOTJjLAorCTB4OWExOTY3NWUsIDB4MTRjNjYwZmMsIDB4MWU3YmFjNjcsIDB4M2Q0OGNmYTQsIDB4MTk3YmI0NmIsIDB4MzQ4NmEzZGEsCisJMHhlZmY5OGRjNSwgMHhjN2QxN2ZjZCwgMHgxNTczZGJjYywgMHg1MjVlZjg4YiwgMHgzNjdkZTUzYywgMHgxZmM5MTkyNywKKwkweDkzMzQ5ZmRmLCAweGI2NTlmYzYxLCAweGQ0YmMyMzRjLCAweDNlNTFkNTI2LCAweGViMTg3ZWE2LCAweDNhMzU3ZjQ0LAorCTB4N2M5ZjVkMGYsIDB4ZTkwOWU1M2IsIDB4NDA2MWU4NmQsIDB4ZWNjNzlmZDksIDB4ZTk1ZjIzMzEsIDB4NWQ5MjU2M2YsCisJMHg5OTU3MDA0OCwgMHgyOTVmMmU4NywgMHgyNjc1M2QwZiwgMHgzMjRmNDNjZiwgMHhkODVlMzEzYSwgMHg5OThjNjg5ZSwKKwkweDliYWRmZTg3LCAweDcxZmI1ZGZiLCAweDFmYjg2OTdmLCAweDg4NmVmZjIzLCAweGU1NmM5N2Q4LCAweDlmNThlZWY3LAorCTB4YWI0NmY1MDAsIDB4NWRmYzUxOGYsIDB4NjE1YmZmZWMsIDB4NGRmZGE5MDcsIDB4Zjk0MzNmNTYsIDB4NGUyYTM3YTAsCisJMHhhOWY0NWZiNCwgMHg3N2UwN2Y1YywgMHhlMjMxZGM1YiwgMHgwZGJiNWYyOCwgMHhhM2ZkZmNmNCwgMHg5OWNmNWNhYywKKwkweGZiM2VkZGI5LCAweDI3ZGZiMTM3LCAweDQ0OTYyYjI4LCAweGRkMzYyNGJjLCAweDM3Mzc0NTBkLCAweDlkZGU3OGVhLAorCTB4MmQ3Mzk3Y2EsIDB4OWMwN2NhNDYsIDB4ZjdkM2IxNmIsIDB4MjEwMmU2NmMsIDB4ZjQ0NmE0ZjYsIDB4ZmU1NmVlYmYsCisJMHhkOGFjYjUzZSwgMHg3YjdlOWU5MSwgMHhmZTVmOTRlZCwgMHgwMGI1ZTE5NiwgMHg2NmE3ZGI5NywgMHhjMmJkZTgxOCwKKwkweDI4ZjMxMjUzLCAweDVkZjM4M2E5LCAweGE5OTRkZWJkLCAweGVhMWJjY2I4LCAweDc2NDVhZjRmLCAweGM4YzMxODJjLAorCTB4YzE3NTdhNGUsIDB4NGU5NWFkNDMsIDB4OGFlYThmZjIsIDB4NzM3ZDllOTEsIDB4NzcwZmEyYTYsIDB4NzdkOGMzNjMsCisJMHgwNGYyZmZiMSwgMHhmYmQ1Y2YyZSwgMHhmYzA5ZTVhNSwgMHg2NDZiZGU3ZCwgMHhmZmVjNmNkZiwgMHg0OTE3YzU1NSwKKwkweDcyNWY0OGQ1LCAweDJiYWUwZTZmLCAweDMzZGQzZmEyLCAweDViOWZmNDQ1LCAweGNmZmE4MTNjLCAweGY1ZGRhZmU2LAorCTB4Y2UzOTc3ZDIsIDB4YzhmOTlkYTUsIDB4ZWM3Y2U4YzcsIDB4ZjQyOWVjYjEsIDB4YmRlNDU4YjcsIDB4ZTgxZjkwODYsCisJMHhhM2Q2NDU3NywgMHhjZTIyYzViZiwgMHg2ZTUwNWE1MywgMHg0ZjIxOGVlYiwgMHgzZWMzMzJkNCwgMHhhMDQyZTQ2ZSwKKwkweGIxOGM4Y2Q3LCAweGNmZjVhYTU0LCAweGExNzVmNDdhLCAweDkwZmNlNzE4LCAweGVjMWZlNzM4LCAweDZhYzNiNGY3LAorCTB4M2RmODBlMjcsIDB4ODQzY2VmZTAsIDB4ZTE3MmY4ZjgsIDB4YjBmMWY0YTksIDB4YmY2YTA3YTUsIDB4NmVjN2JmMjYsCisJMHgxNmNlZmZlYywgMHhiMDAzNzFmOSwgMHgyZGIzYmVmNiwgMHhkZjhjNWJkMCwgMHg4Nzg4NjAxOSwgMHg4YmY5MTE4OSwKKwkweDI1ZjZiZjYyLCAweGVmZDA1MjZiLCAweDIwZjRiMzgxLCAweGJjMDQ3NmRkLCAweDAzMGQ2YjIzLCAweGU0MmNiZmNmLAorCTB4ZDIxNjBiMDgsIDB4MmViMTA2ZjMsIDB4MGNlYjVhNDcsIDB4MmMzOGJiOGMsIDB4NjA3M2NhM2EsIDB4Njc5MWFhY2MsCisJMHhhNjUzNmE3MywgMHhiYjBiYTFhNiwgMHgyNzE2Mjk5YywgMHhlNDVkZjdmYSwgMHhmYmUwNjQxNywgMHg3YzlmMTgwZCwKKwkweGY3ODYzNmU3LCAweDlkNjk1OTVmLCAweGZkNzVkYTEyLCAweGM2Zjc4OGYzLCAweGUxN2I4OTU3LCAweGVkMmQ1ZjNlLAorCTB4ZWZkNmMzMjcsIDB4NWZmMjMxOTcsIDB4NTA3MzgyZDMsIDB4YzMzZGY1NmUsIDB4OTJmMTk0NTcsIDB4YzY5MWRkYjYsCisJMHg1ZGVlMWZmMywgMHgwMjcyMWYxOCwgMHhlZDJkNjdiZCwgMHhiMDRmNGZjMiwgMHgzMGY4NzAwYywgMHhhOTcxOWZhNiwKKwkweDcyODJkNWQ5LCAweDE0MDk1N2U2LCAweGU3YjdkNjc3LCAweGZiYzgyMGIzLCAweDFiZmJlY2IwLCAweGY5Yzg3N2MyLAorCTB4NmM0ZjJlOTAsIDB4YjY1YjllMTYsIDB4YjllYzllMjgsIDB4MDY3NWE5NzYsIDB4ZThmNzMxZjksIDB4ZDE3OGFjNTgsCisJMHhhN2VlNjJjZSwgMHgyYjYyOGZmYywgMHg0ZmI1Y2ZiZiwgMHgxZjYzZjRlNCwgMHhiOGUxNzIzZiwgMHg3N2ZmZTdhYiwKKwkweDQ5Zjk5ZTg0LCAweDdmZGU5M2IyLCAweDRkYTNlZDUyLCAweDhlNDdmODQzLCAweDVmMjEzYTkxLCAweGY4MTE1ZTg0LAorCTB4MTk5ZjMzMzMsIDB4NzkyZjQ1ZjksIDB4Yzc3NGIwNzksIDB4OTZiZGFmNmIsIDB4NWI1M2U4Y2UsIDB4ODQxYjQ3NDgsCisJMHgxMzhlYTNmZCwgMHhjNmEyMWY5ZiwgMHhmMjQzYzU3OCwgMHhiODdhYjI1MiwgMHhlZGZhYjBiZSwgMHg3NWFmMzg0MSwKKwkweGNlNjNlOWRmLCAweGZiYTA4NWZmLCAweGQ5MGZkOTM1LCAweGQzYWQ3ZmIxLCAweGZhMzJjNmU3LCAweDljOTY5ODNkLAorCTB4M2U3OGRkN2IsIDB4ZTlmYjMzMmQsIDB4OTZiYWVjOTUsIDB4NjFkZmNlMzMsIDB4MjhmMDU2M2UsIDB4OWZkODM3Y2YsCisJMHhlZmMzNjg1ZCwgMHgxYjBlNTk0MSwgMHhlMjY1ZDM2NCwgMHgyN2QwNDZmMSwgMHgxOWQ4Y2JjZSwgMHhkZWFmOTE0NiwKKwkweDk5ZTc4MDcyLCAweGJhY2E1OGI2LCAweGM1YTFhZjMwLCAweDZhNDY1NjkyLCAweDU2ZjNjMmQ4LCAweGNiMTZmZWQ1LAorCTB4MTYwN2QyMjEsIDB4NWFkZmRmODUsIDB4Yjg0ODdmNTAsIDB4MDk0N2MwNGMsIDB4ZTExMGViYWUsIDB4NTA3N2VkNDMsCisJMHgxMjhiNWRjOCwgMHg1YTVlZjg2NiwgMHhmZDRhZDI5YywgMHg4M2Q3YjJjYywgMHgzNGU2Y2E3OSwgMHg2NjQ0Zjc0NiwKKwkweGUyMTdmMDJiLCAweGNjYzc1ZjM1LCAweGJlYzlmNDMxLCAweDVhNGZhZTYyLCAweGFhYmFjYTRhLCAweDdlMzI3ZDY5LAorCTB4ZDhiNThlYjksIDB4ZTdhNGVjY2IsIDB4N2NmMGVmMTEsIDB4Y2Y5Njg2NzMsIDB4NTc3ODEzYmYsIDB4ZjkxNjY5YzcsCisJMHg0ZWFlNzdiNCwgMHhjMzhlZDYwOSwgMHgxYmY3OTMzOCwgMHhjYjE2ZTdhNCwgMHhmNTEwNzMwMiwgMHhjYmY4ZTI1YSwKKwkweDM5MWE2NzhlLCAweGQ3ZmI3OGQ0LCAweDQzYmVmMThhLCAweDJjNGZhZTc5LCAweDA2NzhlMmIzLCAweDhkMTVmN2M2LAorCTB4OWM2MmUxZjcsIDB4N2JmYmQ1ZmYsIDB4NDdiZDJjYzAsIDB4NTgxZDMwNGQsIDB4N2RlYjFlZDgsIDB4MTNmM2ZlYWMsCisJMHhjZmQxZjJmNywgMHhiYzc5NjBmZCwgMHgwMjg3MWI1NiwgMHgwOTFlZWM3OSwgMHg3MjU2NWFmYiwgMHhkNTM1NTBlNiwKKwkweDBiZDNmOGYwLCAweGZkNTE5ZmMyLCAweGY2MzE3NDkyLCAweGJmN2YxMjBiLCAweDJiYzUyODNmLCAweGUxMGM1ZGY0LAorCTB4NjljN2E0YTcsIDB4M2VmMDMwZjEsIDB4NmY4NzNmMmQsIDB4ZGUxZTc4MWEsIDB4N2M0YzY5MzcsIDB4ZDdjYjRlODcsCisJMHgzOGZmMWNkZiwgMHgwNTlmOTM0NSwgMHg3MTMxZWM3YywgMHhkZTIzYzYzZiwgMHgzODg4ZjVhNywgMHg2ZjE4YzIxZCwKKwkweDA0OWQxN2EwLCAweDg5YzdmN2ZmLCAweGMzM2Y5YzFiLCAweDQwOTlhY2VmLCAweDVjNjBlYjhlLCAweGZhMjdlMWM5LAorCTB4NWRiYTM5MzYsIDB4ZTIzOWVmYzgsIDB4NzhkMTBmZmIsIDB4MmU0OGM5ZmUsIDB4N2E0N2E1YWYsIDB4NTFhZjc4NWMsCisJMHgxMTliZDY5YiwgMHg3YzVmZGY4YiwgMHhlZTA2NDJmOCwgMHhmZDE5YzVlNywgMHhkZjc0M2I3OSwgMHhlNzY5ZTJmNCwKKwkweGNiYzQwMmU2LCAweDZmZmJlZDExLCAweDQ3NGRmOGVhLCAweDIyZjhhN2NlLCAweGU1YzBhNWZkLCAweDNhNGIyZmRmLAorCTB4ZDkyNTcxYjMsIDB4ZGRiODBiOGQsIDB4N2RmYTdmZjgsIDB4NzNlNjE3YjMsIDB4YTQ5Nzc1M2IsIDB4MDg0ZmNmOTUsCisJMHhmYzE0MWNiOSwgMHhkMzIwYmI2MCwgMHgyYWVlNDNmNywgMHgzYTQwYWRmMiwgMHgwYmFjOTM2YSwgMHgzY2U3MmU1MCwKKwkweDlhZjJmM2NjLCAweGIzZDU1YjFlLCAweGI0N2YwNjI4LCAweGQ1ZmRmMjhjLCAweGJhYmYwOGM4LCAweGU0OTFiZDdjLAorCTB4MzcyNWIzNWUsIDB4MjhmNzcyZjksIDB4OWZiYjlmNDMsIDB4ZGU3YTk0ZTQsIDB4Nzk5ODhmNTUsIDB4ZGI4ZjhhYmUsCisJMHg3YmJlZTlkMSwgMHgzYTI2MGYyOSwgMHg3ZWE4NjUzZiwgMHg0NDlkMjNkNSwgMHgxMzdmNmEwZiwgMHhjNWYyOGY4ZSwKKwkweDE1YzUyMzcyLCAweDgxOGZhMWNlLCAweGI3MmIzYjcxLCAweDU5ZDdhMjMzLCAweGMwOThjODg5LCAweDdkMDY2M2YxLAorCTB4NDk2MDc0OTksIDB4MTA2YjhlMWMsIDB4NmEwYmRjZmUsIDB4Y2NhMWE0NWMsIDB4ZGU3ODg5ZWMsIDB4Yjk5OTViNzAsCisJMHg5YTRlODIzYSwgMHg4ZTBmY2YxOSwgMHgyMzM3ZmYxZSwgMHhhYzIyZmI1NSwgMHhhODBjNjNiMSwgMHg5NGM2MzE3ZiwKKwkweDk3ZWQ5ZjI2LCAweGYyNzg2NDNiLCAweDAzOTViNGZjLCAweDBlZTNjYzdjLCAweGM1YTNlNzQzLCAweDIzMmRiZTcxLAorCTB4ZjMwZGFjN2IsIDB4NWUwZWMwZDIsIDB4MDQ2MGIwZDMsIDB4ZjY0ZGI3ZTIsIDB4M2MwMzY4YmQsIDB4YTI2ODdlZjQsCisJMHgwYmRmZWEzYywgMHg3YzE2ZWQzZSwgMHgwNWY5ZDQzYSwgMHhkMjMwMDFkOSwgMHgxZDljN2IxOCwgMHg4MGUyOTdjNCwKKwkweDIzMjdjNjRlLCAweGViZTczNDVmLCAweGY2MzE0MmVhLCAweGYzZWM1Yzc5LCAweDc4NzhmNjMyLCAweGM3YjNmN2U0LAorCTB4MWFmZTg5MGYsIDB4NmRlZDFjN2IsIDB4NDZmZGQ0NGYsIDB4YjY3NjhjMjQsIDB4N2UzZDg2MjcsIDB4MDVmMTEyNDIsCisJMHhjMjc0Mjc5MSwgMHgwZGQ1ZGNlMCwgMHgzOTMxMzk3OCwgMHg1Njk3YmU5OSwgMHg1ZGVmYzA5MCwgMHg1MjdmYTA0ZSwKKwkweGFiYzg3ZTA2LCAweDdlZDFmM2E3LCAweDdmZjUyZDk5LCAweDQzZjg0OTE3LCAweDQ3ZjA2MDhjLCAweDYyZjkwNWZlLAorCTB4YjZiZmYzMGUsIDB4ZTIzZTIyNDgsIDB4MWI3ODM1ZjcsIDB4NzNlNTdlOWYsIDB4ZDE5MjM2ZGUsIDB4ZjljMDM2YmEsCisJMHhkYjQ2ZmRlMSwgMHg2MjMzZjljNSwgMHg4ZWE0NjdkZCwgMHg1MDM3ZmQ1MiwgMHgxM2VmMTE2NSwgMHg4ODlkM2MzMywKKwkweGY3NDFhY2ZiLCAweDcyZjc1MTc0LCAweDlmZDM2ZDc4LCAweGRjMWZhYzc3LCAweGVkNzI4NmZmLCAweDhiODZkOWJkLAorCTB4NWE2MjJlM2MsIDB4NGI4ZjQyYzIsIDB4NmRhYTk3OTgsIDB4MTBjZWE5YmYsIDB4YjlhODJmN2QsIDB4NmJkOWJiNGYsCisJMHg3ZDBmNWU4OCwgMHhkNjIxZDQxNywgMHgxZjcxZGQ5YiwgMHhjZDRmYmZkZCwgMHhhNjQ0ZjllNiwgMHgwNGUyOGM2NSwKKwkweGE2NmRmN2QxLCAweDNkMWU1ZGIxLCAweDhjMGRjZmRhLCAweDM4ZThmZGVjLCAweDUyYTllNjM5LCAweGIxODFiMGZjLAorCTB4NzllNTEyMmQsIDB4Nzk3M2RmNmIsIDB4ZmU3M2ZlYTYsIDB4M2FkNjk0N2QsIDB4NzYwZWM3OWMsIDB4ZDFkM2RhMTAsCisJMHhmN2E4NDllZiwgMHg1MWY3ZWE1YSwgMHhkZmFiM2M1NSwgMHg0ZGJmNGE4ZiwgMHhjMTYzZWI0NywgMHhjNmFlZDQyOSwKKwkweGI4N2JmMWZkLCAweGY5MTFlOTU1LCAweDdmNTgyYmU0LCAweDJiN2Y3YTdmLCAweDliZGY3YjE4LCAweGNmMjllYWRiLAorCTB4N2ZiYzczMjAsIDB4YjI5YTE4NmMsIDB4Yzg3ODQ2MTQsIDB4NmZjOGM4NWEsIDB4ZjI2ODNjMDAsIDB4ZGJkOTRjMDksCisJMHgxNmU3OWY2OSwgMHgyMjRjMzYzMywgMHgzM2RhNjgzYywgMHhmZGQzZDM0MCwgMHg3ZTZkNDJjMCwgMHgwMzUzZWMwMSwKKwkweDU3YWJmYjQ3LCAweGQ5NGQ1M2YyLCAweGYzOTU5N2Y5LCAweDlhNjM4YTU3LCAweDk0ZTRiZGM0LCAweDk3ZmJlMjUxLAorCTB4ZWQxNGFjYTUsIDB4OWVkYmY0YTIsIDB4MDczOGYzYTEsIDB4NWY3MTgxZTcsIDB4ZGQ2MjljNzQsIDB4ZjE4MjZlM2IsCisJMHg3N2ZjOGZkMSwgMHhlMmNkMmZjMSwgMHhhZWZkNWI2ZSwgMHhmNGM4ZjMwZiwgMHhjZTU0OWIxZSwgMHhmMzBkMmNkNywKKwkweDEyZTk3YmYyLCAweDhhNmU3YzQ2LCAweDhmY2M2NjY3LCAweDFlNGMyYTk3LCAweDA0YzliYmM0LCAweDMyNTk2YzMwLAorCTB4ZDQwNjczMzIsIDB4N2IzYzQ1ZWIsIDB4ODQ2NGM0OGQsIDB4ZjMzMTU1OTksIDB4NWRmYWEzZjgsIDB4NTc3ZDEwYTEsCisJMHhkNDc5YTg2OCwgMHgyMGIyMmJlZiwgMHg2NzlkNGU3ZiwgMHgyZWY1NzdkMCwgMHg3YmY5M2NmMywgMHg2YmU3ZThkNiwKKwkweGNlYTk5ZTI5LCAweDg3ZmUxNDNmLCAweGJmZGU4ZWZhLCAweDgxMzdiY2Q1LCAweDQ0MWQ1M2M3LCAweGY0MDM4ZGFmLAorCTB4NDE3Y2YwNGEsIDB4Y2EzY2Y4OGYsIDB4NjZkNWJiODUsIDB4ZmEyOTU3N2IsIDB4NGMxZTY3MGYsIDB4MTE0YTM2NTAsCisJMHhkMmNlMDhmYiwgMHg3ZTAzZWZmMywgMHhkN2ZhZjFiZiwgMHhiYzkyNzc2MSwgMHgxODk3ZGZlZiwgMHg4YmVlZmJlZiwKKwkweGRhZTQyMmZlLCAweDA5NTk3YzNhLCAweDE5MWE1ZWYzLCAweGZiYTQzMWU1LCAweDI5OTczZmFhLCAweGEwZjYwMGZmLAorCTB4ZGYxMTEzOTEsIDB4ZDZmMTgwNDksIDB4MWZlZmNlM2QsIDB4M2U3N2UzMzYsIDB4YzBlN2ZlZjAsIDB4MTNlZGZlNDAsCisJMHhkMWY3NmMxNiwgMHhiY2Q0MzY3NywgMHg1ZGEzY2M1YywgMHgzZWYwMzI1YiwgMHg4MzdkZjQ3MiwgMHg4OWM2MTFiZCwKKwkweDk5YjI2Zjk4LCAweDlmNDAxMzA1LCAweDA1MzFmNGE0LCAweGI5ZWNmM2JmLCAweDAzYTY1NDY4LCAweGEwN2Q2YzdlLAorCTB4OTNiZjAxNTAsIDB4YTVlZTg5OTksIDB4MzM3ZWFkMmEsIDB4MGFlMTBlZmYsIDB4ZWY2NzY5MTYsIDB4ZWZhNTZlOTcsCisJMHg2NGJmODZiZCwgMHgzZTE0YmY5NCwgMHhjM2VlODhjZiwgMHg3MGM0YzM5ZiwgMHhkZGY4ZmYyZSwgMHhjYmU0N2FmYiwKKwkweDdhNWQ3ZGE5LCAweGZiOTNmM2Q0LCAweGY2N2ZhNGZjLCAweGVkM2Q0ZmQ5LCAweDk5NjJlN2UyLCAweDc1MWY5MTExLAorCTB4Y2Y1NDViMWQsIDB4OTc5ZjhhZTksIDB4NWYyN2VhMmMsIDB4ZmRmODZhMzAsIDB4NDZhMzVlZGEsIDB4NWIxN2M4MWUsCisJMHg2NWZkNDZiZSwgMHg2N2FhODllYSwgMHhlM2UzM2ZkMywgMHgyZGRlMjhmOSwgMHg1M2VkYjVkYiwgMHhkYmQwM2U0NCwKKwkweGMzNWZkZjJhLCAweGJjNzNhMWFlLCAweGNmMzMxNjk4LCAweGQ1ZGNlMDZlLCAweDcxZTI2ZTczLCAweDc5YzdjNjc0LAorCTB4OWZmNzk0NmUsIDB4ZmY0MDRkNDYsIDB4ZTg3MTQ3YzAsIDB4ZDgyZmM0NjQsIDB4ZGQ5NTI5MTcsIDB4NTg3OThlY2MsCisJMHg4ZTk5NGNlNSwgMHhmM2IyYmQ3MiwgMHhlNDg3YTQxZCwgMHgzYzBmM2NiMywgMHg1ZmZkZmM3YSwgMHg3ZTg1OTViZSwKKwkweDlkYzk5ZWMzLCAweGVkMmY2ODU5LCAweDNkMTVmMmY5LCAweGQzZDU1NzhlLCAweDE5M2ViMGNiLCAweDU4YTQxZTRhLAorCTB4MTBhYTc4NGMsIDB4Y2Y1MDMzYjQsIDB4ZjU5MTQ0ZTMsIDB4ZTc0YTllYjQsIDB4Y2ZlNGU1NjUsIDB4ODcxYTRlNTAsCisJMHhkOTMzZGY2ZSwgMHg4N2U0YzJjMiwgMHgzZGEwMjY3NSwgMHhmZTdjN2NjNywgMHg1N2NhYjM2NCwgMHg3MDk3MmZlYywKKwkweDlmODE4NDVlLCAweDUyZWE1NGY2LCAweDdiOWY2MTZhLCAweDZjMTU5MTllLCAweDQ2ZjNkM2RjLCAweGU3YmZjZTAyLAorCTB4N2FjZDM5ZWMsIDB4ZjMyMmZlOTgsIDB4NWFmYmFjNDUsIDB4MmI1M2VlNzEsIDB4N2VmZWM5N2IsIDB4ZjkyYmFjNGEsCisJMHhhMWM1MmY2YywgMHgzMGRlOTU1MywgMHhjM2Q0ZGJlYSwgMHgzN2ZlZmE3YSwgMHhjOGJjZjBiMywgMHgzOGExNGM2MSwKKwkweGZjNWViYTlhLCAweGQ3M2UyYTZlLCAweDg4ZGU3MjgyLCAweDU2MzJiM2ZiLCAweDI4N2VlYzI4LCAweDU1ODMyYTMzLAorCTB4Y2M5YThmOTgsIDB4NmI0ODRhNzYsIDB4NDE3ZDJiNTMsIDB4YTVlNGU3YTQsIDB4YWQ5MzllOWMsIDB4YmYxOGMzZmUsCisJMHhhM2FmNWU0ZiwgMHg1OWYyNDUzOCwgMHhjYmY0MDZkZiwgMHgwNTY1Y2I5MiwgMHhmODRhZTRjOSwgMHhiN2YzMTBlYywKKwkweGY5ZDRmOThhLCAweGE4OGNmNWQ1LCAweDdlZTg0YmY0LCAweDYyZTNiMzI0LCAweDEzMmFhZWZlLCAweGNjNWFiZjhlLAorCTB4NTllYjE0ZWYsIDB4MmMzYmU4YzUsIDB4NTVhZDY3YzksIDB4ODMyNzJmZTgsIDB4MzNkZjQxOWQsIDB4OWE3OWUyYjgsCisJMHhiNzQ1ZjMzNSwgMHg5OWQ5NGYyNywgMHhiMWUwZTc0NSwgMHhlMzBhZDkxZSwgMHgzNjViNjRhNSwgMHhjZWI5NDE1NCwKKwkweDMyZmYyM2ExLCAweDNjNTE4N2E5LCAweDlkMjdhOTNkLCAweDRmNTI3ZGU0LCAweDhhMjcyOGExLCAweDBmNDI2OWZhLAorCTB4ZDQ5MzM5NzAsIDB4YWYyZDUwZjMsIDB4YTRkMmExNmYsIDB4M2Y4NzE3Y2EsIDB4ZGE5OGZiOGMsIDB4NzE3Y2I4Y2IsCisJMHg5OGJlNDk3OCwgMHg1MTdjYjhkMiwgMHg5NTU2YjhlOSwgMHgzMjVhY2MyYiwgMHgwZmY3ZWExZiwgMHgwNmI1YWNmZiwKKwkweDczZjc3YjllLCAweGJiZTVmZWZlLCAweGJjYmU1Y2Q5LCAweGZiZjcyNWZiLCAweGQzYmY2OTRkLCAweDQyYWE1Y2EzLAorCTB4NGRmYTA1YzMsIDB4MzNlZGMwYmIsIDB4YmFhYjFmOTUsIDB4NDgxMTM2MjUsIDB4ZTc4MzlhNjMsIDB4YzhiYTFmODcsCisJMHhkOTg0M2I5ZiwgMHg2M2FmMDBkNSwgMHg5NTI5YzkxMiwgMHhkZDA1NmI2ZSwgMHg4M2VhYjNhZSwgMHg4MWZlZDg0OSwKKwkweDM0NzdkZTg5LCAweDk4ZTVjZTM5LCAweDgzZmUxZWMxLCAweDdjNDFmN2FlLCAweDMzZjdmOGVmLCAweDQxNWRlZjdhLAorCTB4NDM3ZTgyZjUsIDB4OWEyZTQ5NGIsIDB4ZTQzOTZjODQsIDB4M2U0MTYwNTgsIDB4YWU0ODc5ODQsIDB4ZTkxODcyMWUsCisJMHgzYTA4MGViYywgMHhlOWFmNjczZSwgMHg1YjNmYzMwOCwgMHg2OWZjZGZjYywgMHhjMWZmZDQzZSwgMHg5MzQwZWI5ZSwKKwkweDFlOTczZDRjLCAweDg4NWYyZjQxLCAweGU4MmIzYmYzLCAweDdiZGQyOWE2LCAweGZjMDRjOTUzLCAweGNkMWU2MmZlLAorCTB4MGRmZWNlN2IsIDB4ZGNiMjdmYmQsIDB4YzY5ZjFmZjYsIDB4M2FhNzJlZmEsIDB4NGY3Y2ZhOGUsIDB4Y2YxOWE1NjgsCisJMHgxZjliZDBmNSwgMHhhYmI0NDA5ZiwgMHg3YjIzNWZlMywgMHg3ZWUzZTRlZiwgMHhkMGY4OWEzMywgMHg3OGNmM2IxMiwKKwkweGFkZjNmYzkwLCAweDhiN2Y5Njg4LCAweGM4MGY4NjRhLCAweDkxNjY3YWJmLCAweGU3MTIxZTc5LCAweDFlNDI1OWViLAorCTB4ZGRiODU1NGQsIDB4ZTdlNTZmNWUsIDB4NWZiMjVmNTUsIDB4OGI4YWZlYTYsIDB4ZDJhZjU1ZjYsIDB4NWFlNGYyOGQsCisJMHhmMjliN2ZlNCwgMHg3ZDRiZDEyNCwgMHhiZDk3YTczZSwgMHgwYTBmOWU4MiwgMHg2M2VjY2U3YywgMHhlZDk3ZTg5ZCwKKwkweDE5NmU5ODJmLCAweGUyM2VmODBiLCAweDFjZmYxM2QyLCAweDUyYzZiYjE5LCAweDI5MWRjZjA2LCAweDAyNGJmMDk1LAorCTB4ZDZjOTdhNmMsIDB4Y2YwMGE5YjUsIDB4YTdhMjI0NTIsIDB4MWRhZDkyZmEsIDB4OTY3ZmQwNGQsIDB4MDNhOTQxMzUsCisJMHhiM2Y5ZThmOCwgMHgwZWFmMzQxNiwgMHg5Nzg0YmMwNSwgMHhlM2Y4NzJlOSwgMHgxYjllMTc1NCwgMHhjYWNjZDNjNywKKwkweDRmZmU4Y2IwLCAweDhjYmY2M2JkLCAweGM0NmRmNmZhLCAweDJlZTMxMWFiLCAweDc1NjdjMTFlLCAweDZhNTcxZjA0LAorCTB4MjM4ZmI4MmMsIDB4MmYyMTI2YTUsIDB4NWU1MWUzM2QsIDB4ZDUzN2NhY2UsIDB4N2M3NWExOGYsIDB4MWE0YzZjN2QsCisJMHg1MDZmNzdiZSwgMHhhNzNjOTVmOCwgMHg3ZTgyYzlmZiwgMHg2YjI3Y2NlYSwgMHhjY2RmYTA1MywgMHhkNzE5NjY5MiwKKwkweDkxMmNkNDdiLCAweGQ3ZGEzY2ZjLCAweGM3OTNmOTQ0LCAweGQyYWMzOTNiLCAweDc0MDczZDJkLCAweDViNmZiYzc5LAorCTB4NmZiNjEyNzMsIDB4ZDUzZTQ4OTcsIDB4ZTIxZDJmMmIsIDB4YTdkMzhmZWEsIDB4MGIwZjdlM2EsIDB4MzA3N2UxYjYsCisJMHhiN2FmMjljZiwgMHhiMWY1M2U2MCwgMHhjY2NmMDViZSwgMHg3ZjFjM2MwMSwgMHhiOGM0M2Y1MywgMHhjMGFkMWY0ZCwKKwkweDI0NGNkZjcxLCAweDM1NmQ5ZTNhLCAweDhjYjFmNDY5LCAweDVlODQ2OTRlLCAweGQzNmYxZWFkLCAweDBkNGFmNWMwLAorCTB4MjljZmQzYzUsIDB4NzgwNmU1OTIsIDB4YWQ1ZGYzZGUsIDB4ZDE5MTM5N2IsIDB4YmQ3N2RhNTIsIDB4ZTE0YzdiZTgsCisJMHhhMWNjNzk3YywgMHhkNjNjYmUyMywgMHg4YTljYjhmNywgMHhmYjQ2NTlmMCwgMHhkZTc2OTk5MSwgMHhiMjFhOTJmYSwKKwkweDViMjljZWFmLCAweDgyNjc0NGY1LCAweDU0ZjFkNTBmLCAweDRmOGEzZTNhLCAweDljZWQxZTIzLCAweDZkZjY4ZmZmLAorCTB4MWRiZDIwYjMsIDB4ZTMyM2JmNzUsIDB4ODk2NzVkMzksIDB4YTFkMDU3MWEsIDB4NWRmMGRmYWEsIDB4ZGE5ZmE0NzEsCisJMHg3ZWYzZmI1MSwgMHgzODUxZWI4NiwgMHhkNzk0NmJmZSwgMHhkNTdkMjM4ZiwgMHhhN2EyNjQzYiwgMHg5YWZlY2FhMywKKwkweDI3YmY4NjE0LCAweGZmZWNkMjYyLCAweDlhYzkxZGZlLCAweGRhNzU5N2YxLCAweDVkYjQ3MDM0LCAweGRiZmRjZmI1LAorCTB4MGVjNGNiYTcsIDB4ZDg0N2E0NjYsIDB4M2VjMmY5NDcsIDB4ZTA3NzFmZDIsIDB4MTc2OGFlZmEsIDB4ZjdlOGViMjksCisJMHg0NWQ5MDY0OSwgMHg4YTJlZGNmOSwgMHhiZTU0ODdiNiwgMHhiODg5ZDY2ZSwgMHg2NWM3OGVhYywgMHg1OGRmZjlhMywKKwkweGYxZWVjM2ZhLCAweDhlNDkyYWQ4LCAweGM2NWJiZmJjLCAweGJlOTA3M2JhLCAweDg2MTJhM2U2LCAweDc1ZDAxZWYxLAorCTB4MTVmYzIzYTcsIDB4MDc4YjZkZWIsIDB4Y2NhZDdjMzksIDB4YmZiZjY5NzYsIDB4M2YzN2JmY2EsIDB4MWU3N2Q0YmUsCisJMHgzNjc0OTVlNSwgMHg2NTYxZGY0YywgMHgwN2U1MThhYiwgMHg5ZTc4NmJlOCwgMHhhZDY2NWUxMSwgMHgyNThiZDQ4OCwKKwkweDhkMmRmMWZkLCAweGQ4NGJhNDVkLCAweGFjNzg4NTliLCAweGYxZTQ2YjM4LCAweDM4ZTg5ZThmLCAweDg1MWZlYTk3LAorCTB4YWUyYmYyMjUsIDB4OTNlYTJlNTIsIDB4ZTY3YmI4ZjksIDB4N2Y2Nzc4ZjAsIDB4OTM4ZjMzNzksIDB4ZTVmYzA5MTUsCisJMHg1ZDY5MWE5NCwgMHhkY2Y3ODA4YSwgMHhiNTllZmIxNiwgMHg0MWZhNTRhNCwgMHgwN2RmYTJmOSwgMHhlZjgwMjlkZiwKKwkweDYxZTY5MGFmLCAweGIxNTUzZDllLCAweGNhNTI5MWQ3LCAweDk3NzdiNWUzLCAweGExNGFmMjc4LCAweDE1ZjEyYTJjLAorCTB4M2Q1ZTIyOTYsIDB4NzdkMzVmNjAsIDB4OWY2NDNkYzUsIDB4MzNiY2UzYTksIDB4ZmQxNmUzY2EsIDB4YmNjOTYxNDYsCisJMHhlZThmMGVkYywgMHg2ODYzZWQwNywgMHhlM2Q4ODY5YywgMHg3YTM4ZmI0MCwgMHhmNmVjNmU3ZSwgMHhmYzM5Yjg0MywKKwkweDMwZmIyMzdkLCAweDBjMDY0M2QyLCAweDUyZjJhNjY0LCAweDE2ZTVlMzJhLCAweDg4NDZhZWZhLCAweDFlMGRlN2ZiLAorCTB4OTE0NmYzZDIsIDB4MTAzNzg4YWYsIDB4ZjRjN2ZjOTEsIDB4MWNiZTM0ZjUsIDB4NThmNzQxOWUsIDB4ODMyNWQ4MmQsCisJMHg3NjkxZjlmYiwgMHg2YTg0YWM5NCwgMHg2YWFkZTMyMiwgMHhkZjk0YThiOSwgMHgxNTI4Y2U3MywgMHg2MDRjZjNlZiwKKwkweGE4YWZjODEzLCAweGVhM2NmY2JjLCAweGMzY2Q0M2YzLCAweGM4NTc2NWVjLCAweDYzZjM1ZTdiLCAweGMzZmE0OWQzLAorCTB4YTU1ZjI3ZTQsIDB4NGEwZTYwN2QsIDB4MWYzOWRmOTEsIDB4NGE4OWJmNmEsIDB4YzI4YTFjOTQsIDB4NWNmMzUwZDMsCisJMHgyMmRjNzllZCwgMHhkNzZhZjZlOCwgMHhjYzdhNjU1ZCwgMHgyZWQxZjk0ZSwgMHgwNTZiMDdjZSwgMHhkNWRiZjU3ZCwKKwkweGJlM2YxZTNmLCAweGZlODYxZjNmLCAweGZlZmJkOWNhLCAweDRhN2VmODkzLCAweDM3YTU2ODQyLCAweDE0NWU3ZWM2LAorCTB4ZTUzMWY5ZmIsIDB4Y2U3MGQzYzEsIDB4ZmJhMThjMWIsIDB4MDc5OWRlZDEsIDB4ZDIwMjYzYTcsIDB4ZjFmMmM3N2IsCisJMHg5ZWIwMDVmMCwgMHgyZGZjYzUzNywgMHg2ZmViOTU5NiwgMHgxYzViNDc4NSwgMHgxZWY5OThiYSwgMHg3YTc4ZmU2ZiwKKwkweGQ5M2YwZGEyLCAweGRjZTM5NWZmLCAweGE3MjA2ZGZiLCAweGQwN2QxZTViLCAweDc1ODFiMGFjLCAweDE1ZDk2YjMwLAorCTB4ZTM0N2Y5Y2UsIDB4NmQ1ZDc1MTMsIDB4NjI1ZTMwNWIsIDB4ZjdhYWJkNGQsIDB4YWY1YzVhMTQsIDB4Njk3ZGUwMjQsCisJMHg3NjRkZTdlZCwgMHhiNDQ2MGVmYywgMHg0M2M2YTAzZCwgMHhjNmE1YmQ1NCwgMHhhNGJiNTQ0ZCwgMHgxZmUzYzFjMiwKKwkweDdiZmNlZDMzLCAweDY5ZjYxNTNkLCAweGIyMGZkZmE0LCAweGFmZjIxYWFlLCAweDIyNmQzYjMwLCAweDE5ZmQwYWIxLAorCTB4ZTRmYjVhZGQsIDB4NDY1N2JmM2EsIDB4OWVkYTJhM2IsIDB4NDUzMzRkYTgsIDB4N2FiZDA3ZDksIDB4MTcxNWRmOTQsCisJMHhmZTU0ZmRiNSwgMHhjNDU0YWNmOCwgMHgxNzc5NTQ1MSwgMHhjZjlhNDc2NSwgMHhiYjQwNDk5ZiwgMHg2NzBiZWRlYiwKKwkweDhkMTQyZTI4LCAweDVjMmVlYjlmLCAweGFlYmQ5ZmRlLCAweDgzZjc0ZjVkLCAweGI3YWQ3MWQxLCAweGZkZDJlNDJmLAorCTB4MWJhZjExYTAsIDB4Y2NjYWQ0YzEsIDB4ODA4Y2M0M2YsIDB4NmI3YjRjOTcsIDB4MThlYzExOTUsIDB4ZjgyOTgzYTMsCisJMHg1OGZjMzZkZCwgMHg4ZDBkYzYzMywgMHg3YzljNzgxNywgMHhkN2ZiOWQ4NCwgMHgyZmMxOGI4OSwgMHg5NTMzNTE4NSwKKwkweDc4YzE3ZGEwLCAweGVmNDhjZTdjLCAweGVmNWQ5OWQzLCAweDA5YmRiZDkxLCAweDllMjE4NmVhLCAweGE2MTk5ZWM3LAorCTB4NTMwNzExOGIsIDB4YzA4YTYzY2YsIDB4YjdlNjZlZWYsIDB4NGQ4MWVmZTMsIDB4ZjdmNzhiYjEsIDB4NTlkYjQ2MmUsCisJMHhhMjJkM2NmYywgMHgyZDYyZTI3ZiwgMHgzY2UyMmQzZSwgMHg0MzViODMyNywgMHhkM2VjNzlkZiwgMHhlNzExNmYzZSwKKwkweGZiMWE1OTZiLCAweDYzYTNlYzFjLCAweDdhYTI0MzlmLCAweGM1YjYxMzBlLCAweDU5NmMzOWUxLCAweDc1OGE0ZGJjLAorCTB4MmY4Yjk5MGUsIDB4ODQ1YjBlN2YsIDB4ZWZkMmE5NWYsIDB4YjIwNGFjYjQsIDB4ZThhNmY3YWYsIDB4N2I0MWZiZTgsCisJMHhjYjU5YzMxMywgMHhiMmZkZmUzMSwgMHhhY2NmZGU5OSwgMHhiNDM2NzExMCwgMHg2YjlmMTBhNCwgMHg4NGJmOTdiNywKKwkweGEzNzFkYjcxLCAweDdiOGU3NGY1LCAweGJjZmZkMTI1LCAweDYwZmVmZjhlLCAweDFmZWE3OGNmLCAweGY4ODNiMzI3LAorCTB4ZmIwNzgwYmIsIDB4MWJiYmU5YWEsIDB4ZDNiYmZjZDEsIDB4MzNkZDAwN2EsIDB4M2RiOWNlYjYsIDB4ODM5YzAxNmIsCisJMHg5OTgwZmIyNSwgMHhjZjgzOWJmYiwgMHg0YTNmZWYwNywgMHg3YjRiYmUwNSwgMHhhNjU0YjlmOCwgMHhiZGEzZDQ5ZCwKKwkweGVjNjZmMjVlLCAweDhmZTM1MWYzLCAweDNhOWRhNDdiLCAweGFhMzYyYjIwLCAweDk4ZmM4YmFmLCAweGVjYTMzYjkxLAorCTB4NjQyZGIzZTksIDB4NDdjNjViNjcsIDB4MzljMGY3ZDUsIDB4OWY4ZWJkZDEsIDB4YTFkOTE2ZWMsIDB4ODdlYmFmM2QsCisJMHgxMTRhYTczOCwgMHg3ZDdmMzA4NywgMHhmYjY1ZTI4YSwgMHg3ZTcxNGVmYSwgMHgyNWM2ZDFlOSwgMHhmZTVkZjcyNywKKwkweGU3MTM1ZTljLCAweGExYzQ1M2I0LCAweDAwZTIyZTdlLCAweDdlN2ZjMjlkLCAweGYyYTRlMDIzLCAweGVhOWI4MGNkLAorCTB4MDQyODBhZGYsIDB4MGI5NDBhZWYsIDB4NzdjZmMxNjEsIDB4NDdjYjNlNTYsIDB4ODRhYWFmMTcsIDB4Y2Y0N2VkZmIsCisJMHg3ZjdkYmY3MywgMHhiZTgzYTg2MiwgMHg0MmRlNzRlZiwgMHhiZGE0MTdkZiwgMHhkYmJmMTQ0ZCwgMHgyYzcyN2MwNywKKwkweDFmYmY0OWNlLCAweDRjZGIzNDc4LCAweGE1YTNiM2YxLCAweDhhN2JmYmJmLCAweGQxNmI3Y2JiLCAweGM3MGJiOGYxLAorCTB4ZWI0ZTdhYjMsIDB4NmYxODRlNzAsIDB4ZWU4Yjg1NWQsIDB4NDdlMDM2YTUsIDB4ZWVmZmExMTQsIDB4ZmZiZTg5MzIsCisJMHgwNDBlMWIzNCwgMHgzYTU0NDVlZiwgMHhmMTY5ZjUzNywgMHg2NWZmMGY1OSwgMHgxZGRmZjE5NSwgMHg2MTdmNDJjOCwKKwkweGE0ZTg4YjhjLCAweDIyNzNlZjQyLCAweDRmYmEzNzNlLCAweDU3MWU1ZjkxLCAweDg3MWJlZWQ4LCAweDdhZjE4MDcxLAorCTB4MTRmYmJlMjYsIDB4M2JhYzQ1MzQsIDB4ZTA0MjZmMGUsIDB4NDQ4OTUzNzksIDB4MGExYTczZGYsIDB4ODZlNWQxYmYsCisJMHhhMzJmYWU1NCwgMHgzNDc1ZmZlYiwgMHhkZDFiODNkNywgMHg3NzNjZThkYiwgMHg1MGIyYmEzYiwgMHhmOTEzZWZhZiwKKwkweDI5NjRiMzEwLCAweDI4NWZiZjQ4LCAweDFjYjFkZDc3LCAweDY1OTE1YmY2LCAweGMwMTFiYjFmLCAweDY4NTNhMzJkLAorCTB4NGY0YWZiZmQsIDB4ZDhmODFjNTMsIDB4MjFjNjU3ODUsIDB4NzZiMzFkZmQsIDB4NzljZTMwNWEsIDB4NTNkZmM5Y2MsCisJMHhmOTk1MTM4NywgMHhmMjlkYjc3YiwgMHhhNGYyMzEyZCwgMHhlOTU4ZjJkNSwgMHg5NWZkZmEyMiwgMHhlZjdjZmM3ZiwKKwkweGRmN2NkMWRhLCAweDBhZjU1MjRjLCAweGZiODE1YjhjLCAweGRlZjk0MjRkLCAweGMzZjkwMmIyLCAweGZjODNiOTk4LAorCTB4YWE3M2U4Y2MsIDB4ODhiMzVmNzAsIDB4ZmM2NGYzZGUsIDB4YjZiZjRmN2IsIDB4M2Y3ODJjODYsIDB4MDI2N2VkMWMsCisJMHhmZjQyNmM3ZCwgMHgzZDA0Zjc3OCwgMHg1ZWFkYWY3ZCwgMHhlNzgyZTdlNiwgMHgxZmE0ZTc4OCwgMHg5OTdlMTNhMywKKwkweDY1NjY3Yzc2LCAweGMwZmE2MzNlLCAweGRlMWQ2MDc5LCAweGYxM2FkMGQ3LCAweGFkZWZhYTNlLCAweGY4NjI5MmJmLAorCTB4YzlkNjgzYjUsIDB4Zjk1ODllZmMsIDB4Y2RjZmQxYjAsIDB4OWEyMGIyNzYsIDB4MTYxNWIzODYsIDB4NzA5ZmExNzYsCisJMHg5OWM2OWYzMCwgMHhjY2UzZTU2ZCwgMHg5YjdjNzExMiwgMHgxNzU5ZmZhMCwgMHg4MWRmOTQ3NSwgMHhjZjgwZDZmNCwKKwkweDc5MjdjYzk1LCAweDUwZjVjYzcyLCAweGI3YWMxZDU3LCAweDQxYzZjZTFlLCAweDU2OTM0NmZlLCAweDViMzkwOTBlLAorCTB4Zjc0NTUyNWYsIDB4MDdkY2M3YmQsIDB4YmZiZWEzYzYsIDB4ZTFlNTc0YmUsIDB4OWZjMjI3MzIsIDB4Yjc0MTU0ZDQsCisJMHhkNTJmYTUyOSwgMHg5NDVhNWQyMCwgMHg0YzJmOGEyZSwgMHg1ZDc0Y2I3NiwgMHgzNmI5N2Q3OCwgMHgxN2FmZDE0ZSwKKwkweGI0NGJmNGEzLCAweDkyOGZhOGJlLCAweDU0ZjcxMTNiLCAweGY5YzQ0MzRlLCAweDRiOWY3MmNmLCAweGFiODNhNDg4LAorCTB4MmYxY2NiYzcsIDB4ZDY3YmFmN2UsIDB4MWRhNzFlMDUsIDB4ZTlmNzk3OGMsIDB4NzgwM2E1NzMsIDB4ZDhlZjNlODksCisJMHhhNzNlODk3OCwgMHhlYWFkM2MwMSwgMHg4YzFkY2JhYSwgMHhiZjZmMTU1ZiwgMHgxYWM5NzkyZSwgMHg4ZDFiZTc5OSwKKwkweGFmOGExZmI3LCAweDQxNTZkMWU2LCAweDU3OWU1Y2FmLCAweDNiN2RiZTA4LCAweGI3NzE0NDNiLCAweGVmZjk0YmI3LAorCTB4ZmY3MzFkNGIsIDB4YjNiZmUyOTYsIDB4MGQ2M2E4NTgsIDB4Y2JlMDQ1Y2EsIDB4ZThmOTQyMzksIDB4MzQ0Y2U0MjMsCisJMHhmNGY4MDYxZSwgMHhiZjJlMjgzZiwgMHgyOGI3ZjNmYiwgMHgyMWNhYWEyZSwgMHhlYTI1ZjIxMywgMHhlYTFmYzExMywKKwkweDFmOTA5OWI5LCAweGYwMmY2ZjkxLCAweDJkNWU4N2VmLCAweDQ1N2NhODdmLCAweDM4M2YyMWViLCAweDFmY2M4ZmE0LAorCTB4NWZjNWRmZmMsIDB4MThjZDcxN2IsIDB4NTIxNjc2MTcsIDB4ZDFjYWI4M2MsIDB4YWM3YmM3YTUsIDB4M2RkMjUwYzksCisJMHhkMjdmODg5MiwgMHhmNTkxOWMzYSwgMHg1OTFjNmUzYywgMHhhMTJmNzE0ZiwgMHhhNmI4ZDRmNywgMHhiYjNlYmVkYSwKKwkweDU1MTg0MTJiLCAweGMyNGQ0N2E0LCAweGM0ZmQ1MWRlLCAweDY0NTM4ZTdkLCAweDU0ZmFhYTdmLCAweDU3ZmVmNzE2LAorCTB4MDhmNzRmYWIsIDB4ZmI1NDNhN2QsIDB4NzliYjczZGUsIDB4NDNjYmU3ZGMsIDB4MWM4MDBmM2QsIDB4YTQ2ZjljOWYsCisJMHgwZTRjYjhlZiwgMHhhM2RmY2MzZiwgMHhmZTQ5ODQ3MCwgMHg5MTM3NzQ2ZiwgMHg2OWZiMGMxZiwgMHhlNjA0YTM0NiwKKwkweGYzZTY0NDc1LCAweGYzYmVlNWE5LCAweGVmZDYwYTZkLCAweDBhZjRiYjk1LCAweDE2ZmYwN2Y1LCAweDU2ODYwM2UwLAorCTB4MGQ4NjlkZmEsIDB4MTM3ZDczOGYsIDB4ZDY1MWY0NTcsIDB4YmE4M2RlZTUsIDB4ZTY5OTRmYjMsIDB4NjFlZmMyNGEsCisJMHhkZjgzNWY2ZiwgMHg4YzJhMGIwMSwgMHhiNTk4ZWJiZSwgMHhlZTQ1OGJiNCwgMHhkYzMxYTVmNywgMHhmZjljOWRhZiwKKwkweDY4MDcxZGQ2LCAweDY5ZWExZmRkLCAweDAzNTc2OGRkLCAweDlkOTY0ZjlkLCAweGNmZTcwNTBlLCAweGZkMjNkYmY2LAorCTB4ZjdkOTdkZWMsIDB4YjcwMDlkZGEsIDB4MDg2YzY5N2MsIDB4YTNjMzdhZDEsIDB4ZWNmMzAxN2UsIDB4MDc4ZDU3MzMsCisJMHg3M2VkOGQ0YiwgMHgwYmY1MTgxZiwgMHg3MzQ2YzdjMCwgMHhhM2NjMDRkNSwgMHhkYmRmYjZhYywgMHhkYWU1MWYzZSwKKwkweDYwMjY1YmQ5LCAweGJjZWMxYmZjLCAweDgzYjdkNDU2LCAweGNkYjdkZmY2LCAweDVkM2JiZjhjLCAweGQ2OWY3OGVkLAorCTB4YWJhZmEyMzEsIDB4NWFiZmJmMDYsIDB4NDhmN2UwZWQsIDB4ODdiZWQxYmUsIDB4N2I0MDRjYzYsIDB4NzNjMWVjMzksCisJMHgwYzlmMzQ0ZiwgMHgxNjRjZGQyMiwgMHgyZjE3NjVlYiwgMHhiZDQxZmM1MSwgMHg5ZTczZDk5NywgMHhmOGZmNDdkMywKKwkweDhmYjgwZjQwLCAweDQ1NWNiZjZiLCAweDdkYjkyMmY3LCAweGEwMjZmOWJhLCAweDNjN2Q3NWQ1LCAweGYxZGIwYzdmLAorCTB4YmY1OGUwN2IsIDB4MDAxZDg2MjgsIDB4NGJlNzVjZjMsIDB4Y2FlYmYzYzYsIDB4ZGU4NjM3YmEsIDB4MzZmYmVkY2QsCisJMHhmNmU3ODNlMCwgMHg0NGJjNzA2NCwgMHhjMzFlNmZiNywgMHhhZmI4ODJlZCwgMHg5MjcyY2ZkZSwgMHg3ZmY1YzAzZCwKKwkweGYzMTJjMGIwLCAweGE5Yjc1NTNiLCAweDNiMWFkMmZhLCAweDU1MmQ0NTBmLCAweDIzZGFhNTc5LCAweDIxYjM1ZjgwLAorCTB4YzY5YmJmMDIsIDB4N2NmZGZmNzAsIDB4ZjEwM2E3YTksIDB4N2ZlNzdkZjcsIDB4ZTUwYjcxMGEsIDB4ZjZjZjUyZjEsCisJMHhhZTkxYzMzMSwgMHg5N2FkNWYwNCwgMHhlZTAxYzY2MywgMHhjNWEzZjMxYywgMHgxMzQxNmUyYiwgMHg3M2JlYWJlZiwKKwkweDg2ZTk2ZmU5LCAweDc0NDFkYmE2LCAweGY4ZTk1MDY1LCAweGZmZTNhMjIxLCAweGUyN2JmNDhiLCAweDIwZWZkMGZiLAorCTB4MTRmZTc0NzksIDB4ZDM0N2MzZGQsIDB4MDNiZjRhYjEsIDB4OWJlNmM4NzQsIDB4NzllODA2OTIsIDB4N2VjMWJhMjgsCisJMHhlODA2OTI4YiwgMHhmYjdlYTg3YSwgMHg5MzFmYmZjZSwgMHhlOWM2MDdkZSwgMHhhYmRkMmNiZCwgMHhkMDU5YjdmNCwKKwkweDU0MGY3YTkxLCAweGZkNzljZTI5LCAweGZlZWM4Y2Q3LCAweGY1NDYzZGEzLCAweDdlMzVjNjc3LCAweGNhM2ZlODExLAorCTB4NzJiMGFlYTMsIDB4MzdiNDdmYjksIDB4M2QxOWZiOTcsIDB4OWE5ZmJhNjYsIDB4YmUyOTVlZTksIDB4MjM1ZDBkYmIsCisJMHhmMjExYWRjNiwgMHg3NWRiYTY3ZSwgMHhlYWFmMzk1OSwgMHhmZGRmNTUwYiwgMHg0Mzc3N2M0ZiwgMHgwMDgwMDA5OCwKKwkweDAwMDAwMDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGM3NTQ3NDBiLCAweGVlYmQ2MDk1LAorCTB4OTFhOTNmZDcsIDB4MTY4ODNlOWUsIDB4YzA4NWEwOTIsIDB4ZWI0MDQ2MTYsIDB4N2QzZDA1ZmYsIDB4YTcxZjMyMTAsCisJMHg5MDBiMThjMSwgMHgwNGUwOGI0YywgMHg2MGRkNDkxYiwgMHg5ZTNkOTBlMiwgMHgxMjMyMzFhMSwgMHgxZjYyY2Q5ZiwKKwkweGJkNjY3OGNjLCAweDhjMDMwZDM5LCAweGMwNzdiMTlkLCAweDBiNjExYzU2LCAweDM4MzdlMmRjLCAweDcxYzZlYzRiLAorCTB4M2M0YzljMTgsIDB4NmMwODQzYzIsIDB4YzcxOGQzNmMsIDB4YmM0YWIyNDMsIDB4MGY3YWRlZjcsIDB4MGI3NTZiZjUsCisJMHhjY2ViNDNkYiwgMHg0MGU3NTc2NCwgMHhhYWJkNWVhOSwgMHhmZWViNzViYSwgMHg3YWQzZDU2ZiwgMHhjZWNjNjMzMywKKwkweDUzZjgxN2Q4LCAweDA4YWNiYzNkLCAweDY1Y2IxOTFhLCAweGZjMDVmM2Y0LCAweGViZjJlMmRiLCAweGRmNjMyYjI1LAorCTB4YjRjYmVlYjksIDB4MmM5M2Y5NDMsIDB4MWU2NzBhZGYsIDB4MzU1ZmFmNjMsIDB4YjE4OGFjY2EsIDB4ZjZlM2E5YWUsCisJMHhmYTg3YjNlYSwgMHg4YzA4NzU4ZiwgMHgxMjdiNDMxNSwgMHhlZjc2ODY3NCwgMHgwMDc3YzE1NCwgMHgyN2QxMzExZSwKKwkweDdkMWU5ZDJlLCAweGZkNGM5ZmRlLCAweDg3OTVjZGFlLCAweDlkMzJmYWIzLCAweGFmN2E2ODYzLCAweDU5YjE4ZDNlLAorCTB4Y2EwZTliZjgsIDB4MzMyZDkzMjAsIDB4NWFlZGNjYTAsIDB4Y2NhMDEyYzcsIDB4OTYzNmY5MmMsIDB4YjEyZTYyNGMsCisJMHhmMjkzMzE4NCwgMHg2YmNhZTk5ZSwgMHgzOWYwMTVkZiwgMHhmZTgzMTk5MywgMHg1NmY1OTVlYiwgMHgwZDVkN2YzMCwKKwkweGNjY2YzMWMwLCAweDM4ODlmMWJjLCAweGM5YzlkMzdhLCAweDk3Y2Q1ZWQwLCAweGQ3NjllMzBhLCAweGZlOWZkZTFkLAorCTB4ZTRmMzI5YTUsIDB4NTcyZTM2MzAsIDB4ZmJjZGY1YTAsIDB4ZjA0Y2Y5OGMsIDB4ZWI2ZTc1NmIsIDB4ZTcwMzM2MDIsCisJMHhkMWNjNzE4NywgMHgxZTYwYTljNywgMHgxZDAxZTk5OSwgMHgyYWRiNWVlNSwgMHhhYTZiM2ZlOCwgMHhhZmU1ZTFjOSwKKwkweDZjZGVmODRiLCAweDNlMWJkZmM2LCAweDRhYzY3YWNlLCAweGUyZDljNjg2LCAweDU0ZmFjODA5LCAweDRjNDk4ZWM2LAorCTB4NmY1YjJmZTksIDB4ZjhlNzY3YzEsIDB4YjI4NTdhYzMsIDB4Y2Q2ZTUzM2UsIDB4ZWJjYmM0NTUsIDB4MDdlMWM3OTIsCisJMHg4NjBmNjc3OCwgMHhjYjFkNmY4ZCwgMHg1NTYzM2E1OCwgMHg4YjlmNjk5ZiwgMHgzODdkNmQwZSwgMHg1OGZiMzA1YywKKwkweDVmNGZlNWZhLCAweDMzNDY3Y2MwLCAweDVkMzk4ZmM3LCAweDVkNzlmODQ3LCAweDNlOTBmYTMyLCAweGVlZDRhZTJhLAorCTB4NGIxODkzNjIsIDB4ZmM4N2VjOTYsIDB4OTkyYWRjZjAsIDB4MzYwNTNlMWQsIDB4N2U1M2Y2MzMsIDB4MDQwMmI4YWYsCisJMHhjMjlmZWQwNCwgMHg3MzgwMTRiZiwgMHg1YWVmNmU5YiwgMHgxNmRkZDAyNywgMHhhMjFmNGM2YywgMHg0YzBiMjU5NywKKwkweDJlOTYzODFhLCAweDliZDRkNDQ5LCAweGVhNjljNzlhLCAweGQ0NGY1N2NiLCAweGRiNzM2ZmVjLCAweDQzZmE5YWRkLAorCTB4ZWE2YTY2MWIsIDB4MzU0YTI3YWUsIDB4ZDU5ZDU1ZjUsIDB4ZWY1NmYxOWEsIDB4ZmY2OWFiOWMsIDB4Njg2ZmVlZDYsCisJMHg3ZjllNmJlYSwgMHg3NDdmNTM1MCwgMHhlOTExY2FmZiwgMHg4ODVmMWEyMiwgMHg4OWU5OTFiNiwgMHhkMjNiMDU3OSwKKwkweDNhNGQ4OGJmLCAweDljYzVjZmZjLCAweGY3ZjdhM2QzLCAweDdlYzI3ZjIxLCAweGI3YWY2ZWJkLCAweGQ1ZmU4MmFkLAorCTB4ZTc4ZDNmNTcsIDB4YzVmNGI0ZmQsIDB4ZjkwMDcyYmMsIDB4MTdkOTU2YTMsIDB4NDAyYmM3OTgsIDB4YWQ1MjhkN2IsCisJMHhmNDQ1YmU5NSwgMHg0NTM2NjM1ZSwgMHhlZTk1MWJlNCwgMHgxMTU2MGFiNiwgMHhkYTY2YWZjNywgMHg2ZGIwYWFmZCwKKwkweDdlNDdhZWJkLCAweGViZDAxYTJlLCAweDM3NTliZTYxLCAweDIxNTdmY2I1LCAweGM3MDZmYzM1LCAweGM3YWZjYzY3LAorCTB4YTVjYjg0ZjUsIDB4OTMxOGVlZmYsIDB4NjA5ZTM5N2EsIDB4ZmMwMTdmYjUsIDB4OGNjOWFjYzQsIDB4YTNjNzQ3OTUsCisJMHg1ZGI3YTc0YSwgMHg2ZjVmNjMzNywgMHhlYWZjY2FkZCwgMHhhMDU4MmI3YSwgMHhkYTNlZTkwZSwgMHhmYzNiNjdiYSwKKwkweDUxNmI5MjdhLCAweDVlYmUxZGQ2LCAweDZmZWZmZTE1LCAweGVmODE1Zjg2LCAweGYzMjNmZjVmLCAweGRiMTAxM2VkLAorCTB4ZTZmYzg4YjIsIDB4Y2ZlYjVkZGYsIDB4MDI0MDJiYjUsIDB4N2ExNTI3YmMsIDB4Mjc4MjkxYTgsIDB4MGU5MDhiMTIsCisJMHg4MzY1MDM5OCwgMHg1MWY5OTA3MSwgMHhjMTMzZDQwZSwgMHg5NjUyODQ2ZiwgMHgzOGFmMDQxYywgMHgzMDM0ZWY2OCwKKwkweDdlNzFlYjJhLCAweGE2ODYxMDcxLCAweDM1ZWI0NWQyLCAweDI4OGRjYTBlLCAweGE5MmM0NTZmLCAweGViYzc5Y2VlLAorCTB4ODc1ZTA2OGUsIDB4ZDUyZWE4ZjcsIDB4M2VlN2JhZjIsIDB4ZWE5Mjg3NWUsIDB4NDNhZjI3NWUsIDB4NWFlZmFhM2YsCisJMHhiOGNlZjU4YywgMHgwMTQ0ODljMCwgMHg1ODI1YmVlYiwgMHg1YTFlMGUzNywgMHgwNWZmNGJjYSwgMHhlNDk5NGE4MSwKKwkweDVkZTgzODk2LCAweGVjN2VhN2E3LCAweDM3MDdhZjIyLCAweGYyZDBmYTcxLCAweGY2NWUzMTgzLCAweDVmMTliM2Y5LAorCTB4ODEzZjNjM2QsIDB4ZmRjMjRkYmYsIDB4MDA2ZmQ3NWMsIDB4ODI4YWQ0M2MsIDB4ZDVlZjBlYzMsIDB4M2Y4NzMyMGMsCisJMHhlNGQ1ZjcxNSwgMHhlMDk3ZDk5MCwgMHgzMTMzYTAzMywgMHg4Y2NmODg2ZCwgMHg0YWIxOTgyYywgMHgwZjc5M2UyMCwKKwkweGVkY2FhZGYxLCAweGU5NjhlM2UxLCAweDVhZjUxZWFiLCAweGZjM2JlYzAxLCAweGU1MTkzMWJlLCAweGZhYTdhNzMwLAorCTB4MmMxMmUwYjIsIDB4ZDAxM2Y5ZjEsIDB4ZmMzMjdiM2UsIDB4MWY0ZTFlNGIsIDB4MzJhMjVjMmEsIDB4NWZiNWE1NWYsCisJMHgzMmI2YWE4ZiwgMHg1OWI3MjYxOCwgMHg4NTU5ZDExNywgMHhkOTJjOWQ3OSwgMHg3MTZkY2I4NywgMHgyZTJmZTU1MCwKKwkweDU2ZTFjMjJmLCAweDFmMzlhZGU1LCAweGZiMWE2Y2Y4LCAweGI5OTY3YzNhLCAweGFlYjM2YTBhLCAweGQ5ZjBhYmJlLAorCTB4OTMzZTMwYmEsIDB4ODQ5NmY3YWQsIDB4MzIxMDE5ZjAsIDB4YjdkOWYwZDMsIDB4Mjc2ZTllODksIDB4ODMwOTRlNWYsCisJMHg0ZjE4MjY3NSwgMHgyM2U4MGNmNiwgMHhjMDU0OTljYSwgMHgzZTI0NDI0MywgMHhiMjFiZmI5YiwgMHg5N2M4YTIxZiwKKwkweDU4MTdmMDM3LCAweDk4N2U2ZTY3LCAweDVjZjQ1MTljLCAweGZlZTdhYWI1LCAweGRkYTJiM2E4LCAweDExN2E2N2UyLAorCTB4Yzg3YzcwY2IsIDB4ZDIzMTNiMmMsIDB4YmUzY2I1NzMsIDB4NmJiYTA2MDksIDB4OTBmODBlYTgsIDB4NjNiZTgxMGYsCisJMHgwNmRjMTUxZiwgMHhjZWM5OWJjZiwgMHg4MDVhYjg2MiwgMHgzMWUyYWFjNywgMHg3MWFkNmU4YywgMHhlYzkwOWQyZiwKKwkweGVjZjUwNWJjLCAweDRlNmU4NTE4LCAweGRmMTFhNzY2LCAweGM3YmQ3NmMzLCAweGI1OWRlNDQyLCAweDAxZjFjYmU4LAorCTB4YzcwOTM3Y2QsIDB4YmYyMjY2NzMsIDB4YzZkYjQwZDUsIDB4MzNmZGUxODIsIDB4OTlmMDBmYjEsIDB4M2U3Y2M4MzUsCisJMHgwOGVhY2Y3OCwgMHg0NmFmNTgwOCwgMHhmNDhkOWVmZCwgMHhmZTUxZWFjZiwgMHhlODA5NWY1NywgMHhlNWE1ZWEyNSwKKwkweDAwNzQ1Yjk3LCAweGE0MDEzZmJmLCAweDUxN2M4YjU3LCAweDY0MmU5YzMwLCAweDdlZTNkM2U2LCAweGFmZmRkNTdjLAorCTB4OTAzNDFmYjYsIDB4ZmZkYjBlYmMsIDB4Y2ZiMDQxOWEsIDB4ZDUzOTRlMDAsIDB4MWFmYTIwZTQsIDB4YzhjZjY0NjQsCisJMHg0OGM3YzE0ZSwgMHhiYzIxYWNiZSwgMHhhZGUzZjZhOCwgMHgxNzY4MjZmNiwgMHg2MjJlOTFlOCwgMHhmNjQwYjM3YiwKKwkweGIzNmNhN2QwLCAweGYzMDVmMzgxLCAweDg2N2E1NWZhLCAweDMwYWZjYmU3LCAweDM0ZWQxMTM5LCAweDdlZDRmM2NiLAorCTB4ZmEyMzEzNmMsIDB4M2M5N2I2YTgsIDB4Yjg0NzY3NTUsIDB4NDRjYzc2MDYsIDB4MGFiZDI0YjgsIDB4YzcxNTNmOTcsCisJMHg3MGUyNjBiZCwgMHg3ZjA4ZGFmOSwgMHhlNGZlMGFkNSwgMHg0MzMzMWQ0MSwgMHg2OTRmYmZiYiwgMHhmZjVmYTMwZiwKKwkweGZjZDNiNzIwLCAweDcwMmJjNDRmLCAweDQzZjBjOGRkLCAweDRlZDAwN2JmLCAweGU1Njg5MzA2LCAweDQzZmYwM2RkLAorCTB4NjlkY2Y3ODQsIDB4MDFkZjNmNzcsIDB4ZjAyOGFlNWQsIDB4NmU4NTZmZmMsIDB4NTEyNGRhM2YsIDB4ZjVjZDNlYjksCisJMHhjN2EwN2NmZCwgMHg3YzZlOTE3ZiwgMHgwZmM4NjZlMiwgMHhkNWY3NDQzOSwgMHg5MDI3Y2ZmNiwgMHhkOWYxNTIxZSwKKwkweDEwZjQ4NjM3LCAweGU4Zjg0ZGMyLCAweGRiODM0NGIzLCAweDM4NzUxMGFhLCAweGU1YmYwYWJjLCAweDJhNTdjODhjLAorCTB4NTc3YzJhOWMsIDB4MGJhYjdhN2MsIDB4ZTdiMzdiYzYsIDB4ZjYxYzEzNWYsIDB4NDU0YmY4MjEsIDB4ZmI4NDdlZTcsCisJMHg2NzRmYzFjZCwgMHg5MmVmODhiOCwgMHgzNDY2NzYzNSwgMHhmYzUyNjZmOSwgMHg5NjRjYTQ4OCwgMHgzZWEyYTYyYiwKKwkweDg1Y2M3Mzg4LCAweDc0Y2I4Yzc1LCAweDM2NGNiYWQxLCAweDAyZmQxZGEzLCAweGYzOTMyNzRiLCAweDgyNzM0ODYwLAorCTB4ZjdmMDhjY2YsIDB4ZDJlYzM3YTcsIDB4YTlkNmZiNDMsIDB4ZmJjMTMzMjIsIDB4MzZiY2IzNWIsIDB4MDlmZWE3NWEsCisJMHg5Mzk5ZWI4NiwgMHhkNjAzNjFlOSwgMHg2NTc3ZjNlOCwgMHg5YzExMjkzZSwgMHhiZjQ3NTA4MywgMHhhMmYxYzZjNywKKwkweGY4ZjQ2ODlmLCAweGM3NWZiOWUwLCAweGMxMGExY2Q2LCAweGVlMDJjMWNiLCAweGU3Y2Q5ZDhmLCAweDFlMTdkYWU1LAorCTB4ODQyOTc2ZDksIDB4YWQwZmRhM2YsIDB4YmRkZGQ0ZDMsIDB4Mjk3NmRiZGYsIDB4MTA2ZWRlNTQsIDB4MzY5N2RjNDQsCisJMHhkOWRiOGU4NSwgMHg1ZmY0MDRjMCwgMHhlMTNiNDU1YSwgMHg5MDM3NDNhMSwgMHgyYzZiZjU4NiwgMHhhZTBhN2U3OCwKKwkweDAwOGZlNzBmLCAweDViZTczZmZmLCAweGQyZmYzZDYyLCAweDhmZjY1MGE5LCAweGZmNjlmZWUxLCAweDBkZjkxZjI0LAorCTB4MmIxZmZjZWEsIDB4NWYzOGZmZWIsIDB4YTYzODczMTcsIDB4YjNiYTFlMDEsIDB4OWY3MGM1YmYsIDB4M2Y3YzZjNmEsCisJMHg3YTcyNTA0ZCwgMHhmNTQzNzJlNiwgMHg3MzllODY3NywgMHgzZWE1NTE3OSwgMHg3M2RlM2EwZiwgMHgxY2U5MWQxMiwKKwkweDk5NGM3NmE4LCAweDdkZTkxMWY2LCAweDcxYmJkMjI3LCAweDQ4YjViZWE4LCAweGYwOGJlOGQ3LCAweDIyMDU3M2ZlLAorCTB4MTZjMDdiYzEsIDB4YTE1YjNkYjksIDB4NWMxMzlkOTcsIDB4ZGZlOGQ5ZGQsIDB4NmM3M2FiM2YsIDB4Y2JjZTI1ODYsCisJMHhlNTFlM2FkYywgMHg3YWRiNTZmZCwgMHhlMmU2NTNhMiwgMHgzOGMwNThlYiwgMHhmNGNiY2ViZiwgMHhkMWU4MTk3OCwKKwkweDgyYjdmZTc5LCAweDhkZDYyYTQyLCAweGY4ODZjMmNjLCAweGU3MGJmNTU3LCAweDAxZDEzZTg5LCAweGQ3ZjJiYmZkLAorCTB4NWRkZDcxOTksIDB4MWM2NmY1YjYsIDB4ODJkNjg0Y2YsIDB4ZWEzYzM4NmUsIDB4ZTZlYzBmYmEsIDB4ZjRjYmNlZjMsCisJMHhiMmU5ZTA4OSwgMHhjNTdiYjliOSwgMHhhMzNmYTgwMSwgMHhlZTVlN2JhYywgMHg2YWFmNmEzYSwgMHgwOTE0OWZmNCwKKwkweDQzNjdlMDdmLCAweGY1NjhlOGRkLCAweDg3MjYzY2UyLCAweDNhYzI0NmJkLCAweGIyYzY2YzczLCAweGVjODk3ODRmLAorCTB4MGRiZjU1MTMsIDB4OWRhZDRmZTksIDB4OTFiYWZhNzIsIDB4MTVkNzYzZTQsIDB4ZjI0NGNmOWQsIDB4MDczMDVlNTMsCisJMHhiY2FmOWZkZSwgMHg3YjcyMGQ2ZCwgMHhhM2JmNmJiZSwgMHgxY2Y3YzQ1ZiwgMHhmM2UzZjkwMiwgMHg3NjRkYmY3MywKKwkweDJlNzczNTlkLCAweDU2YjNlN2I3LCAweDk4NTQ5MTc5LCAweDNmYTFmMDRmLCAweDViYzU0ZjMxLCAweDE5NWY1NjllLAorCTB4YTBiNzE3MWQsIDB4ZDRkZTMwZmEsIDB4MmM1OWQxZWEsIDB4MmFiZTkwYzAsIDB4NzBmM2ZjYzIsIDB4NDBiYjNiN2QsCisJMHg1OTcyZDdiMSwgMHgyZDJiZGEzMSwgMHhjODYzZGYyNiwgMHg0MjBkOTYwZiwgMHhlMmExYzIzYSwgMHg4ZTgxNDU3NSwKKwkweDdjODYyMGU4LCAweDk0MjY2N2IwLCAweGI0NjVkOTVkLCAweGQzY2NmYWFmLCAweDVmOTgwNDE3LCAweDQzNjZkZjE3LAorCTB4OGNkYmQwYmUsIDB4YjMxYmM0N2UsIDB4YTgwZDFmOGEsIDB4ZmZjMjRkZjMsIDB4YjdiMjI1MzMsIDB4MmY4NDhlYjAsCisJMHhmYzc5Mzk3ZCwgMHg4NmM3OTY2ZSwgMHhiMDMyZWNlYiwgMHhhN2YyNDhhNiwgMHhmZGYzODBiNiwgMHg5MjdlNTkwNywKKwkweDhkZGFkMTBmLCAweDdiZDIwNDFiLCAweDY2Mzc3Y2FhLCAweGMyMzdkOTMyLCAweDVjOGNkYjc4LCAweGQyNWY4MGNlLAorCTB4M2ViZjQwMmIsIDB4ZmZhMDE3YTQsIDB4ZjdiMzVhMTcsIDB4N2JhMjA1ZTksIDB4YWRmMWU1MTksIDB4MTJlZmIxNTIsCisJMHhmZTFmYjkwYiwgMHhjYTg5ODE2NiwgMHg1NDdlY2E5MywgMHhjMzM2NzE3ZiwgMHhhZmZjODIzNSwgMHg4NDMwZjJhYSwKKwkweGM3Y2E5NGRmLCAweGYxZjI2NTMzLCAweDczMmYyMjRjLCAweDJlM2Y3MTk1LCAweDVjZGM3Y2UyLCAweDVmYjk3YjE0LAorCTB4ZmI3YTMzOWEsIDB4OGQ3YTRiMWMsIDB4OTAyODUyODcsIDB4OThkZDc5ZTgsIDB4YzUyZTQ5ODcsIDB4YTMzOTZmMTIsCisJMHg1ZGEzMzc4OCwgMHhhNzA3M2ZhMSwgMHg3M2ZkYjUxMywgMHhhYWZmZGU0NSwgMHhiMjc0ZTYyMCwgMHhlNTE0NzJiNCwKKwkweGE0ZTkyYzQxLCAweGRlODNjZmUyLCAweDc5ZmY5N2NmLCAweDY4ZGE0N2VjLCAweDk5YTNlM2FlLCAweGUwNDJkNGYyLAorCTB4MmU5Y2JmOTMsIDB4OTZlNTgzZGYsIDB4YmJkYjIzZDcsIDB4NzcyZjYzZjMsIDB4NzI4MDFlZDMsIDB4MzdkZjA0ZjEsCisJMHg3OWIzZTkyMywgMHhmYjk3YjE4NSwgMHg0OGJlZDE0YiwgMHhmODQ1ZjZlMSwgMHgzZDE1Y2JmYywgMHhkMjc5NGIxNCwKKwkweDExYjM2NTA0LCAweGZmMDExZmQ2LCAweGZjYzI4ZThmLCAweGVmNTA3M2NiLCAweGU1ODE3YjcyLCAweDBmYTRiOTllLAorCTB4NjdlMWRmYjEsIDB4M2VjNDJlYjIsIDB4MWMxNDdiMDYsIDB4MDU0M2I0NDEsIDB4ZWRkZDkyMzksIDB4MmQ3ZWZkOGQsCisJMHg2NDNmNDg3ZCwgMHg1YzYxY2NhZiwgMHgyZmYzYTgxZiwgMHg3YWY4ZTEyYywgMHhiMGUwMTQ3YSwgMHgyNWVhZGUwMCwKKwkweGMyOWJhZjZlLCAweGJmY2I1MGUwLCAweDdkYmQ4YzJkLCAweGUwNDNlOTJhLCAweDFmYmIwNTQ4LCAweDQ0NDIwNWNiLAorCTB4ZDBhN2FmN2IsIDB4MWE3ZTczMTgsIDB4ZTJkOTc4MGIsIDB4ZTQ5MThkNjAsIDB4ZWZkOGM5YzksIDB4Y2EwZDlhNGIsCisJMHhkM2NlZTlhYSwgMHg0Yjk2ZDcyOCwgMHg1YzYwZTc4NywgMHgxZmY4ZmJmOSwgMHg3OWQyMWJlNiwgMHhjMWE1NjFiZSwKKwkweGFlZmY0NWU1LCAweGJjM2JiMjRiLCAweGFjNDc4Yzc2LCAweDdjY2FmYWEyLCAweDUyYWY0M2JiLCAweDk0ZGZiNjNlLAorCTB4NmMwNWRiN2MsIDB4ZTU3ZDUxZDcsIDB4ZGExZjI0ZWYsIDB4ZDYxN2RmYzMsIDB4ZjFjNmM5OWQsIDB4ZmIxZGViMzYsCisJMHg5NTlkYzYxOCwgMHhlNzhkODM3YywgMHg5ZTM2YWMxYiwgMHgzYzZkMTA5ZiwgMHgyOWI1NjBlZiwgMHhjZjFiMDc3OSwKKwkweDRhNmQ1ODNiLCAweGYzYzZjMWRlLCAweDkyOWI1NjBlLCAweGJjZjFiMDc3LCAweGU0YTZkNTgzLCAweGVmM2M2YzFkLAorCTB4NzkyOWI1NjAsIDB4M2JjZjFiMDcsIDB4ZGU2YTZkNTgsIDB4MTUzOGQzYzEsIDB4OWUzNjkxZTMsIDB4NzhkYWIwNzcsCisJMHhlMzZhYzFkZSwgMHg5Nzk4MDc3OSwgMHgzYzZjMWRlNywgMHhmMTcwMDBlZiwgMHg3MjJkODNiYywgMHg5NDNhYzFkZSwKKwkweGYxZmYyMDc3LCAweDY3YTQ5NjE4LCAweDU0N2Y1ZmI4LCAweDdiMDZjZmE5LCAweDc4NjMzNGRkLCAweGU3NmFiNTVlLAorCTB4MTcxODJkZmUsIDB4ZmM3MjA5YWIsIDB4NWU3ODM5NTUsIDB4NzdiNDE0ZDksIDB4NDU3ZTMwMGEsIDB4MDRkZmIwNjYsCisJMHgxMTQ1NjVmZSwgMHhiMGQ1ZjBjMywgMHgxM2YzYzNmOSwgMHhiZGU3ZDlkZCwgMHhiMGEzZmEwMiwgMHgwM2JjMjk5NywKKwkweDE4ZWEyOWU1LCAweGZlN2MzZjdmLCAweDNiNTc3MTYxLCAweDY1ZDZlNzhmLCAweDNiZjA4YjdlLCAweDc4NDgyY2JiLAorCTB4ODcxOGU3YzMsIDB4MTNmMjUzYWQsIDB4ZmZhZDU2YjUsIDB4YjJlNjdmMmEsIDB4OTk1ZjcxZjksIDB4ZjgwODk5ZDQsCisJMHhiYjZkNDU5MCwgMHg4YzJmZjk4OCwgMHhkN2YxNWViYiwgMHg2YWI3ZGM2MSwgMHgxNTc3MWI1MCwgMHhiOGQ0MWIzMywKKwkweDg0NGJjZjNjLCAweGUxZGYzOWMxLCAweDZiMDQ1ZjFjLCAweDJhN2YwMTZhLCAweGMxY2ZlNjAxLCAweDUzYWUxNWE0LAorCTB4YTQ1ZTdjMTIsIDB4ODgxYmRkYjcsIDB4NDUzYmJjYmUsIDB4YWE2ODE0YzcsIDB4OWU2MDY0MDQsIDB4NmEyMDEyYTUsCisJMHhjNjU0ZDI4NiwgMHhmMjRjZDJhYywgMHhmZTlkMzg5YiwgMHhmMWJkZDRkNywgMHgwMzBmMjhkOSwgMHg2YzA0NDY3YSwKKwkweGY5YTgzYzIzLCAweGJmNTgwNDg1LCAweDJiZmM4MzM0LCAweDMzMmFlZmYyLCAweDNhNDdiZmZkLCAweGNjODJlYjUwLAorCTB4NWQ4MjM4ZjMsIDB4MmY4MGNkNjIsIDB4NWMyNjZlZjksIDB4Y2VhYjkzMzYsIDB4NDVlYjZmOTAsIDB4NzNjMzM1ZTYsCisJMHg5YjM3ZTk0MSwgMHgyZDRlMjkwNSwgMHg3NmYyODkzMywgMHg2NTQxY2NiNSwgMHg2OTU3NzRkMSwgMHhjZWEzZjAxMSwKKwkweDdhZTE3NWVjLCAweDA5NjZlY2FhLCAweGVlM2Q4NWY5LCAweGYxNDhkYjNjLCAweDMyZTk3YWU0LCAweGY2MDA0OWUwLAorCTB4NDhkYTYyZjgsIDB4MmVjODhhNzYsIDB4NDUxY2Y4YWIsIDB4MmYxZjQ4YmIsIDB4YWRjOTIyNzgsIDB4NjFlYmQ4OGEsCisJMHgwYTJhODNiMiwgMHgyZGM3YzkxOSwgMHg3Y2ZjYjIyYywgMHhjZmNiODRhYywgMHhkZjVkNGIzNywgMHhmYmQ3M2M0NCwKKwkweDg3OGZkNTE2LCAweGQwYmU4ZjJlLCAweDZkOWI3OTRhLCAweDViYzJmMTYxLCAweDZmNjI4YWZkLCAweDkwZTcyNDQ3LAorCTB4ZTkwMWI5M2QsIDB4OGYwNGYxN2EsIDB4MTY4OGUxMGQsIDB4ZjYyYTc4YzcsIDB4MWI0OWVjZjAsIDB4NzY3YmFlYzEsCisJMHhkNDVhZWMxNCwgMHgyYWVjYjc0MywgMHhmYTkzOTlmYiwgMHhiMWNhM2I1MCwgMHhkMGJhNGYwZSwgMHg5MDkyYmFlZiwKKwkweGMzZGRhYTM4LCAweDhkNjcxNDNjLCAweDY5NzlhZjFjLCAweDk5MjBlMjE0LCAweGZlMTNiZmE4LCAweGVhNjM5ZDBiLAorCTB4ODdmYjAyM2EsIDB4NTRiY2ZiZTUsIDB4NDI4ZWY4ZTEsIDB4NjM0YmUzODcsIDB4YTBkMzE3Y2YsIDB4NjEzZTI3ZDQsCisJMHg3NzFiOGQwYiwgMHg5NzBlMDQ1OSwgMHhmNWMwZDA0MSwgMHhmZGZmNjJiOSwgMHg3OGY2MjRhMCwgMHg3ZDcyODEyYSwKKwkweGYyMmVmY2E5LCAweGY5NzRkNTYxLCAweDdjYWE1ODY3LCAweGJhZTFkZjNiLCAweDJkMjlmYzQwLCAweGY5MDI0ZmFhLAorCTB4NzY3ZjY2YmMsIDB4MDY4OWVhMDEsIDB4MmFlMzVlZGIsIDB4NTJkNWY3ODAsIDB4M2EyMmZkZjksIDB4NWIxZmY0NmYsCisJMHgxZWIxNmUxZSwgMHhmN2JjNDc4ZiwgMHhhM2NiMjJiOSwgMHhjNTA5MTFiYiwgMHgyOGRlNGZlNCwgMHg2N2U0ZmVlMiwKKwkweGZlMjg4Nzg0LCAweDYzOGJhZmU0LCAweGVhN2IyZmJlLCAweGM5ZmM4NjczLCAweDViMWZmZTcwLCAweDYzOWRlM2NjLAorCTB4MDY4ZTAxNDcsIDB4ZjE0NjU3MjgsIDB4YzI4Y2E2ZWIsIDB4YmY1YThkZmMsIDB4NDQzZWJmNmUsIDB4ODU0MTEwY2UsCisJMHhkYzZjNjllNiwgMHhmYzExNjNhZiwgMHhiYTM1OTczZCwgMHgxNDdiMzdiZiwgMHhmMzEwYjFkNiwgMHhmNTkxYjU3MSwKKwkweDMxYzU3ZGRhLCAweDdlOTZhZmY3LCAweDMzMDdjYTAzLCAweGQwYTlmZDViLCAweDZmMzBiY2M0LCAweGIyYmU1MGRhLAorCTB4MGZhZmQ1YzksIDB4MzgzZjczOGQsIDB4ZTUzN2UwZTEsIDB4YjM3ZTcwMDgsIDB4ZjI3MmU2MzgsIDB4ZjkxZTljN2MsCisJMHhlMTE5YmQ3NSwgMHg3ZTA2NmFlOSwgMHgyNTVmYjA4ZCwgMHg5YmZmZGMyNSwgMHg5NjExZTEzYiwgMHgzYTYzNzY4OCwKKwkweGU0MTFmNzQzLCAweDM2MzdjZjA5LCAweDgzNjM3ZTI5LCAweDJhNzY3ZmEyLCAweDJjNTNkNDcyLCAweGU1MmNlOTUyLAorCTB4ZTg1MWI5ZjUsIDB4ZmJjYWQ3ZmEsIDB4YjY5YzRhOGQsIDB4MmJmMjYyNTEsIDB4ZWM3ZmY0OTEsIDB4MzhmY2U2ZTksCisJMHg3MWM2ZTcyOCwgMHhmMzBkZWYzOCwgMHhmNDUzZGZjZiwgMHhkM2Q4OWVjNCwgMHhhMDBjOWVjZiwgMHg5MWI1Yjk5MywKKwkweGY2MzA3NWYxLCAweDAyNzRiMTc0LCAweGY2ZDRiZmNjLCAweGY4OTAxY2Y0LCAweDBkOWIyZmIwLCAweDJlOWM1Zjk0LAorCTB4ZWYwYzU4YmYsIDB4NTdjMjhiNmQsIDB4Njk3ODJiOWYsIDB4YjAzYTNlODYsIDB4MzRhMDViZmIsIDB4OTAxMGY5NDIsCisJMHhmYTQwNTQ4MSwgMHg2ZmVjNTVlZCwgMHgxNDMwOGUwMSwgMHhmMWRlMDQyMCwgMHgzYWY0ZTdlOCwgMHhjZTdjMWVlNCwKKwkweDdmZTQ2ZDVjLCAweGNhMWJjODg0LCAweDM5OTk1NjlmLCAweDgzYTc3NGRmLCAweDBlZmU4OGZmLCAweDkzMzlkMzMzLAorCTB4OWZjZjIwYWUsIDB4ZmNmMjY1NzYsIDB4NmEzYzM4NjgsIDB4NDU2ZmY0ZmUsIDB4NzFjZjE5OGYsIDB4YzQxNjY1NzcsCisJMHhlYmRkZjI4NSwgMHg2ZjI2OTg5YiwgMHhlNzg1NzVkYywgMHg4YTRmYzE4NSwgMHhjOTQ5ZmFkMywgMHg4Zjg1MjdlNCwKKwkweDc0Yjk5MDlmLCAweDI0N2ZhODVlLCAweDAyMWZkY2M4LCAweDVjNTAyNjdmLCAweGE5MTdlNDNjLCAweDdjOThjZmZlLAorCTB4N2ZmMTVjZjksIDB4Y2QxZGZkMDIsIDB4NDk0NzExOWYsIDB4MDczMDhiMGYsIDB4NzRkZGZmM2UsIDB4OGYxMGRmZjksCisJMHgxZmQzZDAyMywgMHg5ZmQzZDBhMywgMHgzNDdmZGZiMCwgMHgxMWNjNjI3YSwgMHhmMGNjNjhiNywgMHgxZWIyYmI3MSwKKwkweDcwOGViNWI3LCAweGQzMjEyMDNmLCAweDU0Y2U5MTE5LCAweDliN2EwMmZhLCAweGU4NzYzMjUwLCAweGI0ZjMyMTdkLAorCTB4NGIxMzZmNGEsIDB4YmQzZWJmOGEsIDB4ZjBiZWMwNWQsIDB4YWZlMWFjZWYsIDB4ZDE0OWQ2ZWMsIDB4N2FiNTlkZmIsCisJMHhmYTBmMjhjYywgMHhmMTliZDczMiwgMHg5OWQ0YzQ5ZSwgMHg2YmNlMDcyZSwgMHgwMDZjOTkxMSwgMHgzZTVjYmIzOCwKKwkweDAwN2I5ZTMzLCAweDY0YmYyZjNiLCAweGNkYzFiYzg0LCAweDdlM2YyZTIyLCAweGRjZmZlY2FkLCAweDJhZmY5YzA5LAorCTB4N2RiZTBiOTYsIDB4NmM0ZDdmYzAsIDB4NGRmNzAxOTcsIDB4NDk1OGZmN2QsIDB4N2I4OGZkZWMsIDB4MzVlZTQ4NzIsCisJMHhmNzIwOGM5NiwgMHhlMmY4NTY1ZSwgMHgyYjVmMDU3MywgMHhlNzI5ZDZkYSwgMHhmYjQ0NTg5OSwgMHhmZGVjNTU2NywKKwkweDk0MmIzNDhjLCAweDQ1ZDc1MjczLCAweDc0NWJlM2E0LCAweDIyODVlNzg3LCAweGUyMTQ2N2FjLCAweGU0YzdlN2UwLAorCTB4Y2Q0YzNjZTAsIDB4ZmM0MDZkMmIsIDB4ZjFjNDU2M2UsIDB4N2RmZWNkMTcsIDB4YjNmYzE0NmEsIDB4NGFkNzAwODksCisJMHhmZDAxOTlmNiwgMHhjN2ZmNTk2OSwgMHgxMWU3NDhhYywgMHgzOWQ5MTU4ZSwgMHgwMzkwMDY5YywgMHg1OTk1ZGY4MCwKKwkweGZjMzFiN2JhLCAweGI1YTQ5NWQ5LCAweDY3ZjdkNDg3LCAweDY3YWVmZTJiLCAweDUyNjdlNDE0LCAweGYxYzNjZTBlLAorCTB4NGMwZTdlMWEsIDB4M2VjNWNmMmQsIDB4ODhiNGIwMWUsIDB4ODBmZmI5ZmIsIDB4NzNmYzBlZmMsIDB4ZTM1OGE0YTgsCisJMHg2NGE4ZmVlNywgMHhiNWY3M2Y2NCwgMHgxYWRjOGY3ZiwgMHhjYmE4ZTg1MCwgMHg3ZDllZDkxMSwgMHg0MGZiZjYyMSwKKwkweGRkNjBlMGU3LCAweGI5MTU3Y2VmLCAweGFhNmY2ZTExLCAweGRiZDg5ZWU1LCAweDdhNTk2OTdiLCAweGQxYzM4NzljLAorCTB4MjRlN2I0YzgsIDB4MjhkZmYxNmUsIDB4OGY1ZDJkZTAsIDB4NzdlOTY4ZjMsIDB4NWZmYWUzMjUsIDB4MWE1OGMzODUsCisJMHhlNzhjNzNmMywgMHhmZjMxZTg2NywgMHg3ZDc5ZjljMywgMHg5NGJlMmJhOSwgMHgxOThmMzZlYywgMHgwN2Q4MzdmNSwKKwkweGI5NWY2NzE0LCAweGNkMWYyNTM5LCAweDZiNjdkODJhLCAweDkzYmU5NmE5LCAweGVmYTY0NzRhLCAweDQwM2JkMmU0LAorCTB4ZmM5Y2FhZGYsIDB4NTM0YzYxMTcsIDB4YTg5OWJjYTgsIDB4YTU2OTliYzgsIDB4MjlhZmRmYjEsIDB4OGU0OGFmMTgsCisJMHg2MzJiYWYyYywgMHg3M2RiZTcxZiwgMHg3OTc0NGU3NywgMHhmYjM3OWVhYywgMHg0ZjFiNDE0NywgMHg4ZjI1YmQ2ZSwKKwkweDY5NDc0ZTYzLCAweDc5MjFmYWE5LCAweDcwODdlYWFjLCAweDVlODY4ZDNjLCAweDBiZDEwYzQ4LCAweGNjZTQ1MTBkLAorCTB4MzYzMWMwNjgsIDB4OWRiNTFmMDQsIDB4OThhZmU1MDIsIDB4YzBhNmY5OGQsIDB4MzlkODlkYWYsIDB4OTZjN2RlZTQsCisJMHg0ZjEzODg1MSwgMHhjODdmOGQwZiwgMHhhMDQ3YWY2MCwgMHhiMWE1ZGRlMywgMHhiY2EzN2ZjZiwgMHhkYjdjMzdlOSwKKwkweDQ3ZjlkMjM2LCAweDI4YzVkNWEzLCAweDMxNzM2MjNmLCAweGIxOWZlYzNiLCAweGY2ZjI5NWIzLCAweDk0YWQwNWM2LAorCTB4MDI5ZDY2ODcsIDB4ZjQ5OGZkZTUsIDB4YWI3OWY5MmUsIDB4MzBhN2RlNmMsIDB4OWU1YzM2N2QsIDB4NWUzOThkNmMsCisJMHg5N2Q4NzI4YiwgMHgyOGM1MzdmNiwgMHhmOGViY2Q3ZSwgMHgzN2Y5M2E0YSwgMHgxNTNjYTNhZiwgMHhiMzQ3ZWUyNCwKKwkweGY3NGVjYzBkLCAweGI5N2NhZmE0LCAweDIwMmY1OGZiLCAweDlhMmYzMDEyLCAweDc2M2VlOGM0LCAweDdhYzdlMWE3LAorCTB4MDUxYjQ3Y2MsIDB4ZTY1Y2ZlM2UsIDB4OTc0ZmY5ZTcsIDB4ZjBhM2ZjNzcsIDB4MzFhMGU1OWUsIDB4N2Y1NDNiN2YsCisJMHhmYjRkOWE1MSwgMHhjZmU1NjlkZSwgMHhmMzliZjZiYiwgMHg5ZWE1ODQ5ZiwgMHhjMTllMTViNiwgMHhhNzUzZTFmMywKKwkweGVjMWM1MzI3LCAweDZiOGYwM2M1LCAweGJjNWFlY2VjLCAweGRmN2U4MGM3LCAweDdlODYxZTBiLCAweDM1ZDMyOWEyLAorCTB4OWMzYjI0NzEsIDB4YWU5MjdmMzEsIDB4YTg5YTUwOGMsIDB4ZmE1ZTdhOTQsIDB4Zjg2ZDlkMDUsIDB4ZjdmNzNiZmIsCisJMHhiZDY3ZTg0OCwgMHg3MjRjYzA3OCwgMHg5ZTgxZWE3ZiwgMHhlMzIxNTVmOCwgMHgzZTcxOTYyNywgMHhmZTNkMDZiNiwKKwkweDM1YWYwMDE5LCAweDA5MzI3M2QzLCAweGY5MmIxZGVmLCAweGNlNzk5MTczLCAweDYzMmJjMmQ0LCAweDBmOWQwMGE0LAorCTB4NmI1NzkxZGYsIDB4MmViYmE1MGUsIDB4Nzk0Y2Q2YTksIDB4NjM5ZDVjZTQsIDB4ZmNlYjFkOGEsIDB4ZjRmYzQzMWMsCisJMHg0MDgyZmRkYSwgMHgxMTJlZGQ3ZSwgMHhlMTlhZWY1MCwgMHhlYzdhODZiYSwgMHhjM2ViODkwZCwgMHg0OTZiNTNhOSwKKwkweGU3MmE3NWFiLCAweDJkZTQ3NjFlLCAweGM3ZWY4MDM5LCAweGYxYTdhZjRmLCAweDdiNjQ1OTNiLCAweGU1YzY1OGNjLAorCTB4OTkwNjhiZjAsIDB4ODBmMTdkZTYsIDB4NTVjOGU3NDgsIDB4N2M2OWRlYmMsIDB4MGYzMGNiZDYsIDB4YTZkZWEzZTAsCisJMHhhN2Q4N2JhNywgMHhlNTExNGU4ZCwgMHg4MTM0ZTlkMCwgMHhkZjJkODJlZCwgMHhlZTg1NzhlOSwgMHgwMjg4ZWM5OSwKKwkweGI5NGEyZmVmLCAweGE5NmNjYTlmLCAweGY3YTc3ZjQ0LCAweDc0OGYyZTc3LCAweGJmYTU1ZjdlLCAweGE5NjQzM2M5LAorCTB4NDljMGVkMGMsIDB4ZmY5NDI2OWUsIDB4MzZlNGI2Y2MsIDB4ZGYyNGYxN2MsIDB4ZTY4NzQzYmYsIDB4Y2ZmYzAzY2YsCisJMHgyMjdmYzE3ZCwgMHg2YjIxZjcwZSwgMHhmNzVjNzhjZiwgMHg2YTc2YTUwNywgMHgxZjBmNDViZiwgMHhiMGY0NDJiZCwKKwkweGUzZWZjOGM1LCAweDhlNzE3NTc4LCAweDg1OGViMDAzLCAweGNmMTEwMWQ2LCAweDgzNTIxODRmLCAweDJhNmRlNzk0LAorCTB4OGI3NGYyZTMsIDB4ODE2MzBmY2EsIDB4N2QzZGUwMWYsIDB4YzUwN2JmMDYsIDB4Y2VhOWRhMjYsIDB4ODQyNzA3MjYsCisJMHg1NTllYTNkZSwgMHgwNTk3YWNhNiwgMHhjMmY5ZjEzMiwgMHhkODM3NzdmOCwgMHhmNjE1OGMxZCwgMHhiMDhiMzdhNiwKKwkweGVmODk4NWZlLCAweDdhODZjODZlLCAweDVlNzhlZjQ5LCAweGIzZjc3OGNmLCAweGIyYjE4OTZjLCAweDlmNWUwY2RlLAorCTB4OTM2N2VlZjYsIDB4OWJkMTVlYTAsIDB4MzA5NWViYzksIDB4OWJiMDc4ZDQsIDB4YmQ5YWIzN2EsIDB4YTRiZTM4NzksCisJMHgwZjE1YmYxOSwgMHhmZDdmMTQ3MiwgMHg0NWQyNmY1MiwgMHgyODM1NWY4YywgMHgwMzFmODdlYiwgMHhmYmVjZTNjZSwKKwkweGUyZWYzYTQ3LCAweDc4ZmQ1YjM0LCAweDg2Yzk4MzJlLCAweDM0MTlmOGIwLCAweDYwNzdkYzg1LCAweGZmMjQwOWE5LAorCTB4ZjMwYmZiZDQsIDB4ZjYzZjdmNDUsIDB4ODRmZDk5ZDcsIDB4Mjc1OWJiZGYsIDB4YWQ4MDczZDksIDB4N2UxNDVmZGQsCisJMHg1YzJlN2I3OSwgMHhjOGQ5NmRlZSwgMHg4YzRlNzg1YywgMHhlZjA5NjZiMSwgMHhkNjRjMDgzMywgMHg3OGUzYzE3ZCwKKwkweDg1NWY5YzRlLCAweDE4N2Y5ZDQ3LCAweGM4YjViMDVjLCAweDNkNzA0MzlmLCAweDcwYThlMzRmLCAweDc5MzdjYjVkLAorCTB4NmI3YWRlNTEsIDB4MDQyN2FlNTksIDB4ZTA4NGQ3NGYsIDB4NDU2YzE4MGYsIDB4MGYxZGFjZGEsIDB4MWI1ZDNlZTEsCisJMHg0MDIwOWMxMywgMHgxYjdjYjkzZCwgMHhiMWI1ZGJlZCwgMHg4ZTA4MWZjMSwgMHhlZjgxYmE5MCwgMHgwOTZmNWI2MywKKwkweDI4OTc2M2VkLCAweDliOWQyMWI3LCAweDIxNmVkNjhjLCAweGI4ZWViMTkxLCAweGU2MGMxOTg0LCAweGU1ZDYzMWQ5LAorCTB4NDA2ZTdiYzUsIDB4ZDhlZjc0NzcsIDB4MWM3NDY1OWIsIDB4OGJlYjM4MDAsIDB4YzdhMWY5YjQsIDB4ODNmYjNhMTUsCisJMHg5OGU2MGYyMiwgMHgwMWNlNzk3NiwgMHgwNDdiYmE1ZCwgMHhkYzcwZjc4NiwgMHhhODhjMzc4MywgMHg1ZGY2MTZmZiwKKwkweGE0YmU2MjM0LCAweDExYTJlN2EzLCAweGViMDNiZWU5LCAweGYzYzc0ZTMwLCAweDZmZjk4OGM2LCAweGJkNWViOTYzLAorCTB4OTFlNzRhMmYsIDB4NGYxYzRiZDYsIDB4N2FlZWIyYTcsIDB4ZTllMDE1MmEsIDB4YmRkMDJkNTgsIDB4OTI0N2Y1YmMsCisJMHg3ZDdkNjBlNiwgMHhiMTkyYWUyYiwgMHhlNzg3NTVlNSwgMHgzOGI0YjkyMCwgMHg3MmMyOWZmYiwgMHg5NTM4MWIyNSwKKwkweGNjYjQyNDBhLCAweDEwZjY2N2E1LCAweDRkNjJiOTNkLCAweGU4ODdiMzNjLCAweDhhNGYxNmM5LCAweDE3NzJiZWE2LAorCTB4MjgwY2NlZWMsIDB4ZmE2ODY2MzcsIDB4ZWFmZWU1MzEsIDB4ODNmNDM2MzIsIDB4OTQ5YTk4ZTcsIDB4ZGI2NjVjN2QsCisJMHhlZWI4YzAxOSwgMHgzYmMxOTczMiwgMHhjMmRlMzIxMCwgMHgzMjYyY2RiZSwgMHgxYzExZWRjMiwgMHhjYmQyOGQ3NCwKKwkweGUwYWQzZmNmLCAweDFjNTI4NDJiLCAweGY3Y2YxZjdhLCAweGVmYzQwYWY0LCAweGJhN2E2ZDFkLCAweGNiZGNkM2M3LAorCTB4MzVlNmFlZWQsIDB4MjAyZWNmODIsIDB4MGRiZGY4MWUsIDB4ZWQ0MGFmNzcsIDB4ZWJhN2RlZWUsIDB4MWJlZjExOTMsCisJMHg0NzAwMGYwMCwgMHg3ZDg0ZjhkYSwgMHg5MzQ3MTEyYywgMHg0YWQ1ZGNlOSwgMHhkZjc3NTYwNSwgMHhiMzhlMDMzOSwKKwkweGRkMDIzYmUyLCAweDliYmY1NTY3LCAweGIyYmZjMmEwLCAweDkxY2U5MWE5LCAweGE0NWU3YzAxLCAweDRkOWQ3NTRmLAorCTB4NWNlOTQ3ZjYsIDB4OTc4OWNhZDUsIDB4NjE4N2E4MGQsIDB4MzQwNjk3N2QsIDB4NWJkNmQ0ZjgsIDB4Y2FmYWRhM2MsCisJMHhkMWZhZGE4ZCwgMHhmMjllZTUzMiwgMHhmOTBkMzYzNCwgMHgyMDk5NzhlOSwgMHhiNTI0MzllMiwgMHhmOWQ2NTFmZSwKKwkweGU3NWVmMWI3LCAweDBhNzlkMTZlLCAweGU4Y2RiM2U5LCAweDdlZmE4MTlmLCAweGJhYTJlOGI3LCAweDNiY2YwZWRhLAorCTB4Zjg5ZGYxMTgsIDB4YjFmMTAwZTEsIDB4YzViOWZjNDAsIDB4ZjgzNTRiMjAsIDB4ODE3Njk3M2QsIDB4YjYwNTc2ZTgsCisJMHgwZjY3ZjNhYiwgMHhmZDc1NGZiZCwgMHg1NTRkZmFmMCwgMHgxYjljNWFlZSwgMHg0NzMwYmJlOCwgMHg5MGVkMDkwNSwKKwkweDkzMTY1MTdhLCAweDIyMmY4OGYzLCAweGJkZjk3NzllLCAweGEzNmYwN2MyLCAweGVlYjgwM2Y2LCAweDdkODUyMjQyLAorCTB4NDRmZWViYmEsIDB4YmRlNjE3OWYsIDB4M2E1NmNkZWIsIDB4MjE1Nzc2ZTcsIDB4ZjkxZDgxZDAsIDB4ZDZlNzQ3NWUsCisJMHgyZjc5ZTNlNiwgMHg3OTAzZWYyOCwgMHgyZWYyODE2OCwgMHg5MjI2YTFmZCwgMHgxMjhkMzNlZiwgMHg5Y2U1NzdjOSwKKwkweGU0MmYyYTk3LCAweGI2ZTdiNTE3LCAweDIxOWU2N2U2LCAweGU3YmVlYjNiLCAweGI1NzlkMjc2LCAweGMxNzIzOWM5LAorCTB4MmQwZmE4ZDMsIDB4NDcxZGZlN2MsIDB4MTg2NmRmMDQsIDB4MzRlZjIzYTcsIDB4MzI3MWNmYzksIDB4NjFkNzJmM2YsCisJMHgyZjY4ZTQ1MywgMHhmZDc1NTFjOCwgMHg1MGUzYmZiMCwgMHg2OTIyNjFhZSwgMHg5YmNkMWU0MSwgMHg1ZGE5NTY2ZSwKKwkweGY4MjgzOTI2LCAweGZmZTg3NTZiLCAweGRkZTY1MzhlLCAweDc1YTc2ZDVmLCAweDQ4N2EzZGE3LCAweDMxNjc3NWMwLAorCTB4ZTYwMTY2ZWYsIDB4N2MzYTgyYmIsIDB4NTVmOTUwZWMsIDB4ZjhiNWQ3ZWQsIDB4NTY1ZGU4MGIsIDB4NWI2M2I1YWYsCisJMHg2NWUzZDc0NSwgMHg2ZGJiNWYzMCwgMHgyZGNmYzhjMCwgMHgxZmE4OGQwNiwgMHhkZWY4ZTBlZSwgMHhmMmMzZTM0OCwKKwkweDUwZWU3NDc1LCAweDQ3MzBmYmUyLCAweDc2ODA5ODNmLCAweDM5YTNmYWNlLCAweGY2MDhkOGUzLCAweGQzYWNkZThkLAorCTB4MTQ4MzExYzgsIDB4ZjMzNzkxYTcsIDB4NjdmMmI1NzMsIDB4NzcyYjQzYTEsIDB4YTM5NjUxYmUsIDB4NGYyNDVmNjksCisJMHhkZmRmYjRkMywgMHgzZmE5YTg1OCwgMHhiY2Q0YWNlMCwgMHg5ZDUzNjBmZiwgMHhjZGIyNmVhNiwgMHhiMTZmYmNkMywKKwkweGUzZDRkNjJmLCAweGRlNmI5NzczLCAweGE1NThlMzFmLCAweGY1YmQzNzY5LCAweGVkMDEyNmEzLCAweGMwNzdiMzcxLAorCTB4MDZlODc4MDUsIDB4MWU0YjI4ZGUsIDB4MTJkMzIzZDIsIDB4ZTMyODY1ZTAsIDB4MmM1NjJkMGEsIDB4NzQ0ZGYzYmIsCisJMHgzYzdiYjY0ZSwgMHhlYzQ0OTdlOCwgMHg3NzNhMWRmZiwgMHhjOTdjNGU2OSwgMHhkZmU1MDM1YywgMHhmYzVhYmUwYiwKKwkweGM5YTAwZTdlLCAweDNkZGJmNjg1LCAweGYwZTM2ODRmLCAweDVmMzhhYmM3LCAweGI5NDM2NWE5LCAweDI4MGFjMWViLAorCTB4NjdiMDVlZjMsIDB4ODFlOTdiZjAsIDB4Y2M3ZjcwN2IsIDB4NDVkYjhjNzEsIDB4MmVjOTk5YWYsIDB4NTM3Njg5OWEsCisJMHhiMDcxYmY4OCwgMHgzOTdlNjZiYSwgMHhiZTQyN2JmNiwgMHhmNTgyZjkxNywgMHhiYzBhNjkzMiwgMHgzYjA4Y2ZiNywKKwkweDM1ZWU3YThiLCAweGViY2JmNTIzLCAweGU2ODVkMDFkLCAweGNlNTk3ZmY3LCAweGNlYjNjMWU1LCAweGZjNzE3YmRhLAorCTB4YjJkMDNlOGUsIDB4N2RjZjRmYzgsIDB4YWViZjQ0NjgsIDB4MDEzZmFmYTMsIDB4ZTcwY2Q5ZjUsIDB4Y2ZiNDQ2ODcsCisJMHg3YTJiOWU4NywgMHg2MWM2MGM0ZSwgMHgwZTFmZTM5YywgMHg2M2RlMjNlOSwgMHhhNDZlNWVkZCwgMHg3MjJiNGZmMSwKKwkweDdhM2JlNWJkLCAweGY3OGI0ZjNhLCAweDg2NGE2YjM3LCAweGUxY2I3M2U0LCAweDYzZWYxZmEwLCAweDdiZjNiNGI3LAorCTB4MzY4ZTc4OWIsIDB4ZjkwNjljOTIsIDB4YmNhODYxZmMsIDB4ZjQxZDM2N2QsIDB4NGYxYTRjYzEsIDB4OTc5NjBmYTMsCisJMHgzZWRlZTlmOSwgMHhmYmNkNmZjOCwgMHg1YzM0OTcyYiwgMHhjODI1N2NjNSwgMHg0Y2YzZWQ3MSwgMHhiMTk2MWU3ZSwKKwkweDczZmEwMzAxLCAweGVkMzVkNzIwLCAweGZiOTVjYjFiLCAweGRlNThkMzljLCAweDJlMDcyMDE3LCAweGRiZGYyMzM4LAorCTB4OWY4YWJiN2QsIDB4YWFlMGI4MzMsIDB4MTY3ODdkYTMsIDB4NDdlNzg5ZjAsIDB4M2Y4NjFkOWYsIDB4ZTFkYmQ3OGUsCisJMHg4MWE0NjVlZCwgMHg2NjFiZmQ5MCwgMHhmZjcxNTdmZiwgMHg3MjI4ZTVlYSwgMHhiZmIyYTJmYiwgMHgwMTQwODRmYiwKKwkweDMzYjc1NTBhLCAweDg1NzdlODhlLCAweGE1ZWQ3NWI5LCAweGNmOTdkYzQyLCAweGRlYmZhMmI3LCAweGVlODEyM2YyLAorCTB4ZmZiMmZmYzEsIDB4YWMzYjM0YWQsIDB4NTRmODc4ZGYsIDB4NzY5N2RlMWEsIDB4ODY5NTNhMWYsIDB4MGNkYjg5ZjcsCisJMHhjZjY4Y2RmNiwgMHgzZGQwN2QwMywgMHgzZjVlOGVlNCwgMHhhODdlZGZjMSwgMHhiNzlmMWZiMCwgMHgxNDBlMGFmNywKKwkweGViOWVlZWM5LCAweDM2NGViNDBkLCAweGEzZmQxNWIwLCAweDNhZTA1MTdkLCAweGFiZWRjZTU4LCAweDJhNzZlNWMzLAorCTB4MTM5ODJlZGQsIDB4Yzk4ZjdlZjUsIDB4MWU5MDEzZTcsIDB4NWMyMTNlNDAsIDB4ODIwZmMwNDcsIDB4ZTY2ZGJlZmEsCisJMHhkNGY2NDhhNiwgMHgyN2RmMDU2NSwgMHhkZTE5MTliNywgMHhmZTgzNmRmYiwgMHg1OWQzOGViOCwgMHhiZGY4OGRhNywKKwkweGIwYzM5Njg1LCAweDcxZDcwMTJlLCAweDFjNzg4MWVlLCAweGExODE4MzdmLCAweGY3YzJhMTlkLCAweDAzZTA1NjcxLAorCTB4YWJmYmZmNWMsIDB4MmRjZjBjMGQsIDB4MjdhZDU5NmYsIDB4ODFiZmJmN2MsIDB4ODdmYTI3ZGIsIDB4MDMzNWJkN2YsCisJMHgyZTgwY2JlYSwgMHgyNzBmM2JmMSwgMHg5ZDM4ZGY1NiwgMHhiZmJlZTMwMSwgMHg3NTY5ZGI4NiwgMHgyZjg4MWIwZiwKKwkweDZlMTNhZDk3LCAweGE1MGU0YmRkLCAweGZmNmU5NTZiLCAweDcwZDNhMTQ2LCAweGRiYTcwZGZhLCAweGU2YmFmNDYxLAorCTB4ZGJlYmQxZWIsIDB4OTBlY2I3ZTUsIDB4NjFmN2E4MTksIDB4NDM4Y2U3ZmYsIDB4NzMxZWZhM2EsIDB4MWE3ZTQwMWMsCisJMHgwNzE4NjEzYywgMHgyYWRhNGY3MCwgMHg2M2MzYzAzOSwgMHhhN2JlZjVkMywgMHg5YzZlNTBkMiwgMHg2ZGY5ZWRlMCwKKwkweDdmMmUwNTdiLCAweDdkNzFjYmVjLCAweDg2NDZkZDE5LCAweDJhMmUwOGY3LCAweGQ5NTE3NmZiLCAweDBhMGIzYjM3LAorCTB4NjJjZmM4ZjEsIDB4YTljYTEyNjAsIDB4ZjljZTI1NmMsIDB4MWQzNTgxOGEsIDB4ZTQ1MmZmNDYsIDB4OGZmYTY3ZjIsCisJMHg4N2I3N2I2ZCwgMHgyYjdmZWZkMCwgMHhjYWFiNzRlNywgMHhlNjQ2NjljNSwgMHhmN2M1NmMzYSwgMHgwNDVmOGQwZiwKKwkweGUwNmNiY2UzLCAweDI4MjczNWU3LCAweDA5Yzk0ZGUzLCAweDUyODIyYzM2LCAweGU0ZTVjMTU3LCAweGQ0MzgxNTZmLAorCTB4M2UxNDlmZmEsIDB4NDM3ZjI3NjAsIDB4ZTY2ODVjZjgsIDB4ZDFiNzlmZjgsIDB4ZjhlYjhjZGYsIDB4YmQ3NWM5OTksCisJMHgzMDVmZGUxYywgMHhlYTFiN2NlMSwgMHgzZjQ5ZWViZCwgMHhiOWRmZTNjOSwgMHhlZTFkOTA3MywgMHhhMjdmZjA1NiwKKwkweDYzY2YzN2ZjLCAweDM1MzJjZmVlLCAweDcyZDdmNjhlLCAweGU5MDk2OWY0LCAweDY4YTUzMmQ5LCAweDMwZjE0OGRjLAorCTB4ZTY2Y2NkZjcsIDB4YmFiYTAxNGEsIDB4NWFhNTQzOTksIDB4YWFmYzc0NWYsIDB4ODJmYzgwNzEsIDB4MmZjNDBkZWIsCisJMHhiOWU5ZDMzNywgMHgwNTUzZWZkYSwgMHg4ZTQ2ZTllZSwgMHg0YTk3ZDYwNywgMHhiNmU0MWI3YSwgMHg2NzkyMTY1OCwKKwkweGZhYTBmMTUwLCAweGZiMjk5NmUzLCAweDViMWViZjY5LCAweGNmZWUyOGM3LCAweDhmODRkM2Q4LCAweDg0ZTc2ZDE1LAorCTB4NDFlNzE4NTYsIDB4MDJiMDZjODMsIDB4MzYyN2NmYmUsIDB4ODUzNGJkYWQsIDB4NjI2YzlmYjEsIDB4M2EwYjA1Y2MsCisJMHg1Y2NjYzliYiwgMHg2YzdkMDM3NywgMHhkODFlYTg5MiwgMHhiYmZhYTM2NCwgMHg1ZTU0ZWM5YiwgMHhhMmM3MzhiNiwKKwkweGE0ZTA3OWZlLCAweGVkZTIwYTY3LCAweDY3MWVkNjQ0LCAweGVkNzNjYzJkLCAweDQxZjA4MWFjLCAweGZkZjQwNjNiLAorCTB4Mzc2YjQyOTgsIDB4MGNjY2Y0ZmEsIDB4OTQ3YTM3ZWQsIDB4ZjAyOGFkZWYsIDB4ODMzMzc0M2YsIDB4ZmNiZTQwYjksCisJMHg4ZTgzZTcwMiwgMHg0NjdmMWJlZCwgMHhlNmIxY2Y3MiwgMHg0OWZhMDM3YSwgMHhiNzE3NmRmOSwgMHhmMWJkZGQ2MiwKKwkweDVmNjgwZDc3LCAweDA0ZmEwMDdjLCAweDdlZWMwY2U5LCAweDllNTAxMzY2LCAweDgxZGEzMzljLCAweGE2NmY5YTBlLAorCTB4ZWIyZjM4ZDAsIDB4NzdjODBkODIsIDB4NDMwMjYzZGUsIDB4ZjdhMGZjZmEsIDB4ZDcxYzcxYmEsIDB4ZTEyZDc0NTcsCisJMHhlNjc0NGRmOSwgMHg0OGFkMmQ5ZiwgMHhmYmI4ZmMyMiwgMHg3ZjdjNzVmMiwgMHhmN2ExNzQ4YiwgMHhmOWVmZmEyOSwKKwkweDg3ZWUwMjQzLCAweDlkZmRhMzc5LCAweDQ2N2ZlYzRhLCAweGI3YWY5MGNmLCAweGE0MTMwNmQ3LCAweDAyZjg3MjA4LAorCTB4YTM5NzhiOGMsIDB4ODY1ODFkNzAsIDB4YmQxOTM3YjcsIDB4NDEzY2YwNTMsIDB4ZTFjNzQyOTMsIDB4ZmExNThiZWQsCisJMHg5NDFiNGMwNCwgMHgyMTMyMjllZiwgMHhjMTIzOWY4ZCwgMHg1MjU4MTY5ZiwgMHg0MWY5MzI2MiwgMHhlN2UwMzhmZSwKKwkweGFiYmFiZTk2LCAweDgxMWU5NjIyLCAweGNmZjVhODdkLCAweDc2MjE4N2Q4LCAweGZjM2EzNDdjLCAweDQzN2UyNWIyLAorCTB4NDMyOWMzZTYsIDB4NDMyM2Y0NzUsIDB4MWZhMDdmZWYsIDB4ODJmYmU5MTksIDB4ZTNjOWFjYTYsIDB4Yjk3NzhhNDYsCisJMHg4M2JlYzAwNywgMHhjMzAwZWFmZCwgMHhmNDgyOWVjOSwgMHg0ZmNhOGQzZSwgMHg5MWQ5NzQ4ZSwgMHhjMTcxY2M3ZiwKKwkweGQ4MmZhODNkLCAweDNiZjIzYTVkLCAweDdiNWFiZGRhLCAweDg3ZTE0MWE4LCAweDdhMWVjNTA2LCAweDNmZWI0MmI0LAorCTB4NWVkNDlmODEsIDB4ODRhNGZkYzEsIDB4M2ZlMzRjZTMsIDB4ZmYyNzNmODUsIDB4MDU3YzhjYzksIDB4ZmQ4MzRlZjMsCisJMHhmZWQyMjU3OSwgMHhjN2FlZDU1NCwgMHgyZWQ4MTM3ZSwgMHg3NDA2NzNhMiwgMHhiZTE1ZjQ4ZSwgMHhlMGE4YmZjZSwKKwkweGViZTU1NDdhLCAweDQ4ZDdjODY1LCAweGFmOWNiZGJmLCAweGE5NmRjN2MzLCAweDFjMGJmOWFhLCAweDdiOTQ1Yjc3LAorCTB4ZjE1N2Y3MTAsIDB4MTM5ZmRhZjEsIDB4ZTdlZTVmMDgsIDB4MWY0ZjA4NTIsIDB4YjU5Y2U3YjMsIDB4MDMxZjk3NDAsCisJMHgyZTgwZmIxYywgMHhmMTlkMzlhZiwgMHg5YWZmZDA0OSwgMHg2YzlmMTljYiwgMHgxZDAzOTIxZCwgMHhiZjUzYzVjZiwKKwkweGE3MTc5MzZkLCAweDE5ZmQ0MmI0LCAweGVmMTg3YmE0LCAweDhhM2FkZTkzLCAweDFjZjQzZTZmLCAweGJlNzUzZmU3LAorCTB4NTJjYmZjMGYsIDB4MGQ4YTlmOTAsIDB4ZGEwM2EzNDEsIDB4MjYyZWZiMzMsIDB4N2M1ODFkYTAsIDB4ZTQxNGZlZTQsCisJMHg2ZTcwNjhjMywgMHhkY2UwNTRhZCwgMHg0YmRhZDhmOCwgMHhmMDFlOWMyOSwgMHg0NTVhZWUxYywgMHhmNDlmYjliZiwKKwkweDZiZmYxMTFiLCAweGRmYTIzMjM3LCAweGQ5N2VkN2ZlLCAweDQ5ZmM3YzgxLCAweGZhODRiYzVmLCAweGYxYTNlM2YwLAorCTB4ZDdmZjk0NWUsIDB4M2E3Yzk5OGUsIDB4NmYxMGZjODEsIDB4OGZiNWM4MjIsIDB4OTFmNzAzMGQsIDB4MmY0NDc5YmQsCisJMHgzZWU4ZmZhMSwgMHhjODNkZGJmNiwgMHg0Y2Q3ZWU4ZiwgMHhiNWIxZjk2OCwgMHg1MWQ3NWQ3ZCwgMHhkZGY1YjVlZiwKKwkweGYyYzQ1NTdiLCAweDg3ZTVkMWE1LCAweGQzOGY4ZGY2LCAweDZmZmFkNTdhLCAweDI4ZWQ5OTM3LCAweGI5MTEzZjQ3LAorCTB4ZmJkYjU4OWMsIDB4NmJiZmQ5MmEsIDB4YzBjYzZmMDcsIDB4NDdjN2VhMzgsIDB4Y2EwOTRmZmYsIDB4Mzc5YmY3MzUsCisJMHhiOTllNTA0YSwgMHg4MjUxYjhkZiwgMHhjNzFmZWVlZCwgMHgyZGQ5MjI3YiwgMHg4NGY0YjM3MSwgMHg2NjVmNTU1NywKKwkweGUyNmEyN2JmLCAweGZhMTQxYjQ1LCAweGQ1ZGNlZWM4LCAweDU3ZjAwOTM4LCAweDAzODk2ZTdjLCAweDdiNmFiNmYzLAorCTB4MTM5ZDE0ZjEsIDB4NzlmZTJmZGYsIDB4MjFjM2NhN2QsIDB4MjIwMzNhZmQsIDB4Y2U4YThkZTUsIDB4MGVhZmM3ZDUsCisJMHhhYTQ3Y2JhMSwgMHg5NGVmOWEwYywgMHgwZjM4ZDU3ZCwgMHgyZGY3ZTJiNiwgMHgwMjc1YzU2ZiwgMHhlYzBlZmEzYSwKKwkweGJmYzg4MGI2LCAweGYwNDZiYjJmLCAweGY2MDFiZmExLCAweGIyM2Y3ODRiLCAweDkyM2RhZWE3LCAweDk5MTBmNzQyLAorCTB4YmQzZjljZTgsIDB4MWM1M2ViMDgsIDB4NTYyOGVkZGIsIDB4ODcyNmE3Y2MsIDB4MDJjYjRiZDgsIDB4ZTgwOWJmM2EsCisJMHhlNGNmYTlhOCwgMHgyMDNmN2IyNywgMHg2MmJhYTQ1ZSwgMHhmZDc0M2Q0NywgMHg4NWIyNjMzNywgMHhkYzlhNzEwOCwKKwkweDFjYTBlNzc3LCAweGMwZDc4ZjBmLCAweDViODQxOGNmLCAweGE3Y2VhZmI1LCAweGE2NTFmOGYzLCAweDA0MmRkMjQ3LAorCTB4OTkzYjlhYjgsIDB4MTYxZDc4ODQsIDB4NGI5YTY5ZDcsIDB4ZjhmMGEyZjEsIDB4ZGJiMDNkOGUsIDB4OTNlY2ZkOGMsCisJMHhhYmMyMTI3NSwgMHg4ZmI4YTVkYSwgMHhjMGU0MTEzZCwgMHg3OTcyNTY1ZiwgMHg2NzU3ZjJhNiwgMHgzYWY1ZTc4MCwKKwkweGM5ZTZiNTAzLCAweDY5NTc3ZTUwLCAweGNjNzQ5MWVmLCAweGVjZTk3ODBiLCAweGM2MDBmZmJiLCAweDFmMDczYTE3LAorCTB4ZjMwZTlmOGMsIDB4OThiN2JlNzQsIDB4OWFlNzllNjEsIDB4ODI5ZTZiNTQsIDB4OWFlNzA2ZmQsIDB4YTIxYmM4MWYsCisJMHgxYWY5ZjA5YiwgMHgzNDVkYjkyYSwgMHhkNjQ0MmY2NCwgMHg1ZjBhYTU3ZiwgMHgyYzFlOTY4ZiwgMHhkMGYzZmNhYywKKwkweDU3OWZlMDgzLCAweDdjZmY3MjU0LCAweDcwOWY4ZjA1LCAweDdmNWMzY2ZmLCAweDFkNTk3MmE4LCAweGVmODJhZDc3LAorCTB4MmFmOTcyZTEsIDB4NDdlMDM5ZDksIDB4NWI1ZTVjOTMsIDB4MzJmN2E3NjksIDB4OTBhNTE2ZmIsIDB4OTJkZWZkN2YsCisJMHhmODc1YmIxNCwgMHg0M2EyMzlmOCwgMHg3YzM3OWM5NywgMHg3MzllZDU3YywgMHg2NjUzZTU3YiwgMHgzZDY0N2JmNCwKKwkweDg5N2JhN2YxLCAweDk3ZmNjM2UwLCAweDlkYjlmZjZhLCAweGVlZTVkOTAyLCAweGRmMGY4MzY2LCAweDJjMGFlMTUzLAorCTB4MDdkOGYxZTEsIDB4MjJjZjgzNjQsIDB4YWE4OWQ5MGMsIDB4ZGRhYjc5MWQsIDB4NmFiYjUwMjEsIDB4NjNmNmFhNTcsCisJMHhiYmUzYzljMCwgMHhmYjc4OGE0YiwgMHg1NTZiOGI2NSwgMHhhNzVjNThlNSwgMHg5NzE3OWU4NSwgMHgzOThjZTdmMywKKwkweGY1NWZhMTRmLCAweDkxODE1MmUwLCAweDRhZWM1MDFjLCAweGVkYzM0ZTk1LCAweDcyZmI0ZmNlLCAweDQzOGE0NzEyLAorCTB4YTdkMGFmM2QsIDB4YzIxMzY3Y2EsIDB4NjNkNTQzZjgsIDB4N2U3MDU0Y2YsIDB4NWUzZDQwZWIsIDB4ZjdmYzdhODgsCisJMHg3YzNjZmIxYSwgMHg4ZmUzZDA1YywgMHg0NjNmNTI1NywgMHgyZTdlOGJmZCwgMHhlYmY5MjMzYSwgMHhhZGZjNjU2NiwKKwkweDRlMDVmZWVhLCAweDU5YmMyMGQ2LCAweGZkMTliMDJjLCAweGY1ZmE2OGNjLCAweDEzOWQ4YTdiLCAweGM1MTlmZGFkLAorCTB4M2YxZGJjN2UsIDB4YzhlNDU2MWYsIDB4Y2JmM2YxNjgsIDB4NzBmMmI3OTUsIDB4ZjlmOWE5ZmYsIDB4OGM2ODdkOTYsCisJMHhkNTU3YmY2MiwgMHgxZmZiODZiYywgMHg2YTA0ZjdhNywgMHg5N2ZlZmY5MCwgMHhlMWVlZTI4MSwgMHhmYWE1M2RlZiwKKwkweGVjZDMyMjlmLCAweGEzMmNhOWNmLCAweGY3MjNmZDBlLCAweGU4M2YxZTFhLCAweDQzYmZiMjRlLCAweDdhNWJjYzdlLAorCTB4MDVhY2UzODYsIDB4YjhlZDEwN2YsIDB4NTEyNjZmNDcsIDB4MzJmNjg2ZDksIDB4Mzg1ZTJiOTQsIDB4MTU4OGY5NDcsCisJMHg3N2YwYjQ2YiwgMHhmYjE3NGM2MywgMHhmM2E2Y2JhZiwgMHg5ZWFjMmQwMywgMHg3ZDJkNGNlMiwgMHg1MDE2ZDI0OSwKKwkweDBmNjNkZDBhLCAweGYyYmU0NjlkLCAweDBmZGJkMDFlLCAweDg4ZmZiZTg0LCAweGM3OTliZWZhLCAweGZiYTYzNmUxLAorCTB4NjYxYWY3MjgsIDB4YzI3OGI0MGYsIDB4N2RhZDdlZWQsIDB4OGRjNGE5NTAsIDB4NmYwOWQ5YTIsIDB4NWNiODViZjQsCisJMHgzZTI3YTMzOSwgMHhkMzc4YzBlZiwgMHg3ZDhjYzY0YywgMHgzN2I4MmU1YywgMHg0NzQ5MzhmMiwgMHhmYzA0ZTZkZiwKKwkweGQyYmI2YTA4LCAweDUwMGM0NTdlLCAweDZiZjI4YTFjLCAweGJlZDVlYWYwLCAweDNlZThkM2E3LCAweDI3Y2RhYzk3LAorCTB4MzlmZmVmYjUsIDB4YmNmMGNiYzksIDB4OTcwZjcyNTIsIDB4YmQzNmVlNGIsIDB4YTEyYTQ3OTIsIDB4ODNiNzk3ZWYsCisJMHhlZDBlMzkzZiwgMHgxYmZkYmI0YiwgMHg4YjgwNzc4OCwgMHhjOGRlNDhmOSwgMHgzZWNiYjg5YSwgMHhlOWY0YWYyNSwKKwkweDNmMjU3Zjk5LCAweDI4OTFjNTc0LCAweDc5ZWVhNDc5LCAweDdjYTQ4ZjNjLCAweDFlNzg3NzI3LCAweDBjYTlmNGU5LAorCTB4NDhmM2VkZmIsIDB4ZThlN2JkMWQsIDB4ZjJlZGNiMWUsIDB4NWJhYWE2NDksIDB4M2I4YTFjNzEsIDB4N2M3OTE0NGUsCisJMHgyMDlmNjI3NywgMHg2MjZhYmM2MSwgMHhlOTc3NWYxZiwgMHhhZmIyMzhiNiwgMHgzYWI1N2UxYiwgMHhiYTgxZTUwNSwKKwkweGUyMmM5ZjRmLCAweGZkZTRmZGY4LCAweDVmYjA2YWNmLCAweGM5NDRhZmM5LCAweGUzN2FlYjAyLCAweGNiM2YwZGZkLAorCTB4ZDliYjc1ZTAsIDB4YzQzNmZkOGUsIDB4YzlmMzNmYTMsIDB4MjNjN2Q2YWYsIDB4MTI4MGRmN2UsIDB4MTdjN2U3ZjcsCisJMHhjOWYxYzhjNCwgMHg2Njc1NzhhMSwgMHg5NTlkYzUxNSwgMHhmYTA4YjU3OCwgMHg1YzUwY2M3MCwgMHg4YmRmYmMyNywKKwkweDc0NmU1YzU1LCAweDcxNDJiYjgzLCAweGVmM2MyM2NkLCAweDlhZWU5ZGRmLCAweDllYmZmNTQ3LCAweDI5ZGZmOGM0LAorCTB4ZmQxZTI5OTAsIDB4YzYzNWQwMmEsIDB4NjJjMWE2OGQsIDB4M2ZmZDJmMzEsIDB4ZTYyNzU4ZTMsIDB4YmFjN2JhOTEsCisJMHhmNDdjNDI3ZSwgMHhmMjNiM2FkNywgMHhmY2E3ZjQxMSwgMHg5ZGIwZjc5MywgMHg2YTg2MjNmNCwgMHgwMzMzY2YzMSwKKwkweGY3NDA1YjNmLCAweGRmMjk1MjMxLCAweDhmYjI4ZjczLCAweGEyY2ZlMGU5LCAweDJjZDAwOTVmLCAweDM0ZjQzY2MxLAorCTB4MjMzM2RmMjUsIDB4ZmUzODg5OGUsIDB4ZmI2YjgzMGUsIDB4ZjUyZmNjNTQsIDB4YzRjZDhlOGIsIDB4M2MxNDhlMDQsCisJMHg3NzllMTk2ZiwgMHgyZjllNjQxMiwgMHg2YTRmZjM1NywgMHhmZTVhM2NkZSwgMHg5NDc5YzA0OSwgMHhmM2YwNTZlZiwKKwkweGY5ODBiMjk2LCAweGM0Y2YzNTc0LCAweGY5MjkzYTk2LCAweDQzY2NhNWI1LCAweDgwN2M0MmY3LCAweGRlNzNhZmIzLAorCTB4Y2ZmYzg0NmIsIDB4ZjIxMTE1YzMsIDB4OTgyYmViM2YsIDB4ZjM2OTlmNjIsIDB4NWY3M2RiOGQsIDB4YWFmZDNhMjEsCisJMHg3OGMzYzY3OSwgMHhlNjhlZTJhZSwgMHgwZmRjZWNjNSwgMHgyOGJiODMwZCwgMHhmMjM0ZDNlOSwgMHg2ZmY4ZmViYiwKKwkweGZiNjdhNDA5LCAweGJjM2U5MDZlLCAweDAwYjEzNDE2LCAweDc4MDcxZmM1LCAweDQwY2ZiZGRjLCAweGUwNmI4NjcxLAorCTB4ZDEwZDhkYmYsIDB4ZjA1NGVmYjMsIDB4ZDVmNzhmNzEsIDB4MDRmN2ZkMTEsIDB4ZmRmMWUzZWEsIDB4YjdjZjJiZGYsCisJMHg3ZWU0YjdiZCwgMHgwMWJkZjdiNCwgMHhjNjBiMWRmZSwgMHgxM2Q2M2ZiOCwgMHg2ZWQxOGIxMCwgMHhmMmZiODNiOSwKKwkweGY1ODQ2NTY0LCAweDdlYjhlMzk5LCAweDUyYTNlNzBhLCAweGFiNGFmZjg1LCAweGRlZWI5ZTM4LCAweDdiOTg3ZWU3LAorCTB4NDhhZmNmMDMsIDB4N2I3MDVjOGEsIDB4NzRmZDVlNzgsIDB4YzZhMDlhNTYsIDB4Y2E0NWM3ZDMsIDB4OTIwOTFjYmYsCisJMHg0NDc5NjhkZSwgMHg3Y2M5ZWZhMCwgMHgzM2NiZmNkOSwgMHhmMWYzOTFlOSwgMHg0NjJmN2EyYiwgMHgzNjM0YmZjZSwKKwkweDE2OGNmYzkwLCAweDYzOGYwZWNmLCAweGZmMmE5ZGZmLCAweDc2MzhmM2E2LCAweGViNDQ5NTdhLCAweGQ3ZTRmNjRlLAorCTB4ZWI0MzYzOGMsIDB4YjBmYjgzYmYsIDB4N2Q4NDU2NzQsIDB4NmZlMzgzYjgsIDB4ZjFkYjFkOWMsIDB4M2I2M2NhZWIsCisJMHgxZTMxMTNmZSwgMHhjNzhjN2I3ZiwgMHg2Yzc5NjFmZiwgMHg4YWJhZWJmMywgMHhkYmZmYzJkOCwgMHgxZmRmYzMxOCwKKwkweDU3ZmZmZTA5LCAweGU3ODQwN2NmLCAweDBiY2ZjM2ZmLCAweDMwMDM5Zjg0LCAweDE3YjBmNWJkLCAweDlkODRiYWRiLAorCTB4ZWZjMzNmNDEsIDB4MjRkNmJmOGQsIDB4OTMxNDFjODAsIDB4Y2U3ZGQzZjYsIDB4MWYzY2U1MDUsIDB4ZWNkZWFkYjYsCisJMHg5ZDBjMmJkYiwgMHhmNWYxNTAxYiwgMHgyM2Y3MzU2OCwgMHg1ZWViYmNhNSwgMHgwNGQ0NWVmYywgMHg4MjlmNTAzOSwKKwkweGZlNzJiMmYxLCAweDU5YWU0Mzc3LCAweDg5OGM1ZTc4LCAweGM5ZTYzYTUyLCAweGM1ZjRjZGUwLCAweDViNzQ5NzYwLAorCTB4NTM1OWU3MjIsIDB4ZTlhMmYxOTUsIDB4MzVkNTgzOTEsIDB4ZTMxNTY3OGIsIDB4N2M4YTNkMWYsIDB4NGE4N2ZmMGUsCisJMHhlNWVhNTIxYywgMHg2ODk5ZTlmNywgMHhmMzRjNWY0ZiwgMHgxZWQxZDNkYSwgMHg5ZmM5M2M0YSwgMHhiYzk5ZjgyNywKKwkweDY3YjJlMDk3LCAweGRjN2ZlNjJmLCAweDdiZTExYjIwLCAweDI2ZmZjOTQ2LCAweDFiMmJiYmNmLCAweDYwYzlkMmUzLAorCTB4ZjA1ZTYyMTcsIDB4OTIwZmNjNjksIDB4N2JkMTJiM2YsIDB4NjY5NzdjZWEsIDB4MTllYTNmNzEsIDB4OWYzMDEzMDMsCisJMHhjZmNhOWRlYiwgMHhkZjllYjEzOSwgMHhlNmE2ZmQ5MSwgMHhmYzFhY2VmNSwgMHhjYTA1NWE5NywgMHhmYzIzYjVlYiwKKwkweGYzZjlkNTNmLCAweDQ0MmI2NWY2LCAweGViY2RmODBjLCAweGY4ZGYyODkxLCAweGU1ZGZmOTc2LCAweDllMWU2OGJhLAorCTB4ZTI0YzdiZTcsIDB4YmY0MDljYWYsIDB4ZWM3OGUwMTksIDB4ZWZkMTIxNjgsIDB4ZmZlNWUzOGEsIDB4YzdmZThjZDQsCisJMHgzY2YwOTE2NCwgMHhlMjU0YWZjYywgMHg3ODk0MTcwNSwgMHg1MDJmMWE4NywgMHhhY2ZmNWJmMywgMHhjMDNlNDljNCwKKwkweDAzOTQwYmY4LCAweDcyODEwZjE4LCAweDlkZGQyY2ZiLCAweDY3ZGI0ZmQ2LCAweDY3ZmZlMDQ1LCAweGYyMWYxZTA0LAorCTB4ODdjNzk0ZmUsIDB4OWM4ZThkMGEsIDB4N2Y5NGYzZDAsIDB4NjNlZjhiMzUsIDB4MmZlNzlmYWIsIDB4MGZjZjc4ZDQsCisJMHg3ZTE0ZjU5NSwgMHhlZmM3ZWY0ZiwgMHg5ZDZlMTVhMSwgMHg1ZjNkNDQ2ZSwgMHgwZTJiMzViOCwgMHg0ZmIyMTljYiwKKwkweDVlZjgwNjk3LCAweDRlYjBmYWI2LCAweDc0NDhiZmRkLCAweGU3NTk1N2I0LCAweGNhNDEzM2I2LCAweDk2MWFiZGVmLAorCTB4OGIzNGJmZjcsIDB4YTk2ODY3OWYsIDB4MDk3YmZiZTYsIDB4ZDQxOGEwZmYsIDB4NmUyMjliMWYsIDB4YjEzMWYzNDEsCisJMHhjYTQ3ZDI0YSwgMHg1ZjgwYjUyYiwgMHg3NmI2NzA4YywgMHg3YzU1Yjg3MywgMHg3NWVkZjhiNywgMHg1M2M1Y2YzOCwKKwkweDE2NThhZGMxLCAweGEzYWVjOWFjLCAweGY1ZGI3YmI4LCAweGI5YmY2OGFkLCAweGFlOWM2ZjA3LCAweGQxOTk3OGE2LAorCTB4NDNjNGZlOGUsIDB4ZGJiOGRhMDMsIDB4ZmUzY2Q1MTMsIDB4ZTAxYTJhZmUsIDB4NDU3YmI3ODgsIDB4ZWYwYjhmZjIsCisJMHg5MjdlODkxNSwgMHhiZmU0MmM1YiwgMHhkZTk4MWIyNiwgMHhkYzQ1ZjU4YSwgMHg0YzY4MmEyZSwgMHg1YjNhYzNhZCwKKwkweDYwZjY0NDkyLCAweGQyN2IxOWMxLCAweDcxNDM3OWMzLCAweDM3N2JlNGIwLCAweGRkM2M0NThjLCAweGM2YWFjZjJlLAorCTB4ZTQ1YjJlZDMsIDB4NWY5ZmI4ZTMsIDB4N2VkYWNmMzUsIDB4NmYzYTNkZjYsIDB4YzU0YmFlYWEsIDB4OGQyZjlhOGIsCisJMHhjZjU1Njc5NiwgMHgzZjFiYjgzZCwgMHg3MGQzOWNkMywgMHg4YzA2YzE4YiwgMHhiZDFlMTYzZiwgMHg1ZmNlNTQ2OCwKKwkweGExZWNiNjRhLCAweDkxZTE2YzNjLCAweDU1N2Y5NGViLCAweGNmNmVhZGYzLCAweGExYWJiMjc1LCAweGY3ZmIxMTlmLAorCTB4ZDdmOWUyNmMsIDB4MmMwZTAwZDcsIDB4YjJkZDYxN2IsIDB4ZGJhMWVmMDksIDB4NzU4M2VjYTgsIDB4OWI2M2YzZTMsCisJMHg2ZmY0YTk3MiwgMHg3Yzc5NTA3MiwgMHhmODk1MTk1MywgMHg2NGY0Yzk5OSwgMHhhNzVlZGJjYywgMHg1OWQ1ZWRiYywKKwkweDUyNGRjZWMzLCAweGU4Yjc2ZjVlLCAweDE1ZjEwOGZjLCAweDdhYTNmNzkyLCAweDFmNGZkZTc4LCAweGVlMzVlM2M3LAorCTB4YmVmYTA2MzMsIDB4OTlhY2ZiYTEsIDB4NWY0ZDc3ZTQsIDB4MGZmNDQ0ZWIsIDB4OWFlNzNmM2UsIDB4NjA3NzcwODgsCisJMHgyZTg0MmRkZSwgMHg5NjFkOTEzZSwgMHg5ZDgzZjQyNCwgMHhkYmU2MGIwZSwgMHgxYWFmZmIwYSwgMHg4NzRjM2NmMSwKKwkweDNjNjIzMDE4LCAweGMwY2YyMDBjLCAweDllZWU4YjIzLCAweDZmZGNmY2ViLCAweGYxMDU4ZDVmLCAweDU4ZmNkYjdiLAorCTB4OGZjZmZmZWYsIDB4NThmYzk1N2QsIDB4MjczZjM1NzcsIDB4MDI5MWNhYWQsIDB4OGJkZTRlYTcsIDB4ZjJkOTE5ZTUsCisJMHhkODljODg3MCwgMHg5NGY5ZTRlNiwgMHgxMTI3OTM2ZCwgMHg0ZTc2ZWUxZiwgMHgzMjFkNWE0YSwgMHg4ZjIzNjc1ZSwKKwkweDNiZGYyNDVmLCAweGZjZmExMmQ5LCAweDFmM2NkNTk3LCAweDY3MzAyYzk2LCAweDMzNTY3OTI0LCAweGM3ZGRlYmZiLAorCTB4ZDc2ZTQxMWIsIDB4M2ZmYmIyNDQsIDB4ZTVkMDI5ZjksIDB4MjM4YmEwNGMsIDB4OTAzODllZGYsIDB4MzQzZjE5YzcsCisJMHg3MWFkYjcxZSwgMHgyODMxYzRmNSwgMHhkODk4MmU5ZiwgMHhkM2FmMWUxNCwgMHg1ODU4ZTNjNCwgMHg1YzVhMmU1ZSwKKwkweDRlYTM0NTZlLCAweGExNzlkMGI2LCAweGRiZDQwNGUwLCAweDI2MzNmMWUxLCAweGJkNzAyNzA2LCAweGJkZTA2NzJlLAorCTB4ODMzMTk4MTQsIDB4Zjk2MWIxOTUsIDB4ZGYzMDVmYjksIDB4ZmJjMzI3Y2YsIDB4YTQ3NTFhY2IsIDB4NWQzY2Q0MmYsCisJMHgzNmM4YTM0MSwgMHg2YzE2N2QwMSwgMHgzZjI4ZjgzNCwgMHhhNDVlMjhkNywgMHhlYzZmYzU3NiwgMHg5MDMyMGE5NCwKKwkweDZiMzgzZmNlLCAweDE2YWUzMDk0LCAweDM0NzMxZjFlLCAweDA0OWVlZmVlLCAweDAyNmQxZGZkLCAweDVkYmEwYmRkLAorCTB4MDczZDRmMWUsIDB4M2ZkYmQyZGUsIDB4Zjk2ZGUzMDcsIDB4M2Q3NzU3NmMsIDB4YWM5ZmNmZjQsIDB4ZjRmY2YwOTMsCisJMHgzZjFlN2NmMCwgMHhkOGEwNWRmZiwgMHgzNjcxZTEzOSwgMHg0YmI0MzNhNCwgMHgxYmYwZTNjMiwgMHgzOGQ4M2ExNSwKKwkweGQ3YWRlYjliLCAweDFkNTM3ZjE0LCAweDRlMTdlZDQ3LCAweGNkOWQzZjNmLCAweGI4YjQ2ZGY1LCAweGJjNjU1MWZlLAorCTB4NmQ4MmM2Y2UsIDB4MTc3ZjcxOTMsIDB4OTNlYTE4ZTgsIDB4ZjM1YWM2Y2UsIDB4NzZmMTkwZTQsIDB4ZGJlN2U2Y2MsCisJMHg2MGZjYzE5ZSwgMHg5MDdlNjg2YSwgMHhmM2MzMDFlNywgMHgyYjljYWE4MiwgMHgwMzdkZmZlYywgMHhjODM3N2JlMiwKKwkweDZlNjNkNDZiLCAweDE0MWZjZjFiLCAweDgzMzlhYjFlLCAweDRlMDg2MzcyLCAweGMzNzdiN2FlLCAweGJlYzgwNzllLAorCTB4YmUzMTI0NzMsIDB4NDU3YmZhMmUsIDB4YzUwMmEzZGUsIDB4N2MxNjBhZTcsIDB4ZWExZTNjNzYsIDB4Zjc0NDk5Y2MsCisJMHgyNzY3ZGNiMCwgMHgzY2EyYjE2ZiwgMHhlMzE2MjA1YSwgMHg1M2I3MWViZCwgMHhjMjY3OTViOCwgMHhlZmZkZDI3YywKKwkweGJjZWZhMWFjLCAweDdmOTAzZTE2LCAweDgxZTVmNzBlLCAweDBmOWQwMzY2LCAweGZkZGVmNTU0LCAweGYwMzUzNGVmLAorCTB4YzY0ZmJkZjYsIDB4ZTBhZTdiNjEsIDB4NzlmMWQ4YjAsIDB4NzYzZjdkMjMsIDB4ZmE3ZTRiZmUsIDB4MTEwYjU4YmIsCisJMHg4MWU3OTAzYSwgMHhlNDQ0OTdiMywgMHhkNzE2Y2I5YiwgMHgxNTFmMjNkZiwgMHg0Y2YyNTIyZSwgMHgzZjRmNWNjZCwKKwkweGMwYzhiN2QwLCAweGVhZDNjZWM4LCAweDlmNTkxM2NkLCAweDQ2ZTgzYzUzLCAweDhmZTUyMTVmLCAweDQzZmNmMDUyLAorCTB4MjliZTkwZGUsIDB4NmM3YTBhM2MsIDB4NjNkMzlkY2MsIDB4MTEyZDlkM2YsIDB4MWU4MjY3M2UsIDB4MTc5Mjc4NDMsCisJMHhmODdkM2NmMSwgMHhmNjUwZWZmZSwgMHg4YTVlOWEzZiwgMHhmZjUxODcyNiwgMHhkZTYzZmJmMCwgMHg1YzM2YzEwYywKKwkweGVlMzFkYjhmLCAweDNhZjY4YTUzLCAweGQzYTJlMzk0LCAweDcxNjYxZmRmLCAweDYyOGE0ZWJhLCAweGExNDlmZGNmLAorCTB4YTdlN2E4ZGYsIDB4Y2YyNzQ3N2EsIDB4N2ZkOTg3ZjQsIDB4ZDU2Mzc5MWUsIDB4NGRmMzUyZmYsIDB4YTBmNmJmYWEsCisJMHg2NWFiMGY2MiwgMHhiYmZlNTI5MywgMHg3MmEwMzdlZiwgMHgyMWJmNzg4ZCwgMHg4NmZkZjIzOSwgMHg2ODA5MGU4NywKKwkweDFiZjdhOGE3LCAweGNkNTkxOTRlLCAweDRmM2M1NGUxLCAweGYyNzdkY2FiLCAweGU5M2IyMjJkLCAweDYyZmNkZmQ0LAorCTB4NzhhOThiZWIsIDB4NTA5MDQ5ZGYsIDB4M2ExZmI1MWQsIDB4MWRiZTdhNDcsIDB4YTdiMjIzZWMsIDB4ZTNjYjdlZmEsCisJMHhmOWY4ODdhZCwgMHhjOGRlZjZmMCwgMHhhZGRiZGRkZiwgMHgzMmY1ZGZkOCwgMHhhZWQxYjkyMywgMHhlODZkYjc5YywKKwkweGI3NDRmMjUxLCAweDhiOGY5NmUyLCAweGI3NGI3MWExLCAweDNkNTYzMDNkLCAweDdmMjNlYmM3LCAweDhjYzcxYjRmLAorCTB4NjBlY2I3MTYsIDB4ZGJiNzNhNDEsIDB4YTA3MDQ2YjEsIDB4MzlkZGI4N2UsIDB4NzljYTVkZGMsIDB4NGM3MWE4ZGQsCisJMHhiOTczZTQ3OSwgMHhiOTRjNzFlMSwgMHhiOWM3OWI1YSwgMHhmN2M0OTY2ZiwgMHg2ODA4MjVkYiwgMHhjZTc1OWFlZiwKKwkweDdmYjczYTM2LCAweDlkMjI5MDRjLCAweGNkNWE1ZWYzLCAweDI1N2NmNGU1LCAweGM4ZDA3MjBmLCAweDg1NjBlM2U5LAorCTB4ZjA2ZmY3NDAsIDB4ZmJlZTFlMWUsIDB4MWVmYzYzYzEsIDB4N2UwMmMxY2UsIDB4N2JjZDQ3MGYsIDB4YTY2YmY3YTgsCisJMHhlODNkZTUwZSwgMHgyZjdhOWRmZSwgMHhjMzY3YmQ0NywgMHg1YWUwOGY5OCwgMHg3ZDFjNWNmNCwgMHhlMTg3NmJjNywKKwkweGJkZGI4ZDkwLCAweDFhM2Y3ZTVlLCAweDQzZTYxMDY1LCAweDg5MTNjYzRkLCAweDZiYWI2YjVmLCAweGVmN2E2YWM0LAorCTB4OGY0ZmRiOGUsIDB4N2JmMDQ3NTQsIDB4ZTkxZjhhN2QsIDB4MmZlYThlYWUsIDB4ZmFkNmFmYWMsIDB4ZjcwZjU0MGIsCisJMHhkZTU0ZWUxNywgMHhlY2Q5OGJlMywgMHg4N2ZiZmI0ZSwgMHg5ZThmMWM2MywgMHhmMWI2M2IzMiwgMHhmYjQ4ZWNjNCwKKwkweGZkYTJjNWI2LCAweDVlNWFhZjFlLCAweGIwZGZlNDU2LCAweGJiMGRjNWVmLCAweDdhZjVjOTJmLCAweGE3ZmY2MGI3LAorCTB4MWJhN2NhNGEsIDB4Y2FhZTlmMjgsIDB4N2MzMWVlZDUsIDB4ZTMyOTFmZmMsIDB4Mjk0MDY1YTksIDB4ZDc3Y2EzYmIsCisJMHhiYzRhOTdmOSwgMHg3Yjk0NGJhYywgMHgyZjY5ZWUxMCwgMHhkMzk3ZTM2OCwgMHg5N2UzNjkwZiwgMHgzNTkzN2IzMywKKwkweDc4ZmY3Y2Y1LCAweDY3ODVmYmNkLCAweDhiZGE2OTI2LCAweGRhNjhmNzAzLCAweDY4MTQyZjRiLCAweDE1MDNlNWVhLAorCTB4YWYyYmY3OWEsIDB4YjNlYTZhZDQsIDB4NjVmOGRhODIsIDB4NjFjNWNkZjUsIDB4YjQ3ZDM4ZjcsIDB4ZGNhMDFhYmUsCisJMHhlNjc1N2VkMCwgMHhjYmRlNmE2ZiwgMHg1NzVkYTM1OCwgMHhhZWJiNDc5NiwgMHhlYmI1MWI4OSwgMHhmNmNkYzc1MiwKKwkweGQzOTdkNzZhLCAweDMyNWY1ZGFkLCAweGJlZjJlM2U2LCAweDdmMmUzZTdlLCAweGM3Yzk1ZGI2LCAweGRmYjA1OGU1LAorCTB4MmQ5MzhkMzMsIDB4ZjdhOWI3NjgsIDB4ZmVmN2Q1YTksIDB4NTg2NjM3MmYsIDB4MDA3ZjQwZGYsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGUyNGJmZjAwLCAweDUxZjg2MDYyLCAweDM4Y2ZjMTBmLCAweDkwOTgxODE5LAotCTB4NzcwMTQzZjgsIDB4MDE2ODQzMzEsIDB4MjEwNjA2MTYsIDB4NjI2MzY2MjAsIDB4MjI2NzYwNjAsIDB4MDcyYmJmNWUsCi0JMHg5ZDg3N2Q4MiwgMHgxMDM4ZTE4MSwgMHg3ODFmNjdkZiwgMHg1ZTI0MGQ3ZiwgMHhiYjNmNGRjZCwgMHgyZWQxZDM3ZSwKLQkweDdlMjdmMDYyLCAweDAyYWY4NjA2LCAweDA1OGIwYzBjLCAweDIxMGI3YzIxLCAweGZjY2ZmOTU0LCAweDE4YTQ3NjA4LAotCTB4MDJhNTc2NjUsIDB4MTUwMDAzZjUsIDB4ODA1MWI3N2IsIDB4MDA4MDUxYjcKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGU0YjNmZjAwLCAweDUxZjg2MDY2LCAweGI5N2JjMTBmLCAweDcyNmUxODE4LAorCTB4MDE0M2Y4MjEsIDB4ZDA4NjY3Y2YsIDB4MGMwYzJjNmEsIDB4YzZjYzQwMWEsIDB4Y2VjMGMwYzQsIDB4NzE3ZWJjNDQsCisJMHgxZDdiMDQ0ZSwgMHg0Y2MzMDMwNywgMHgzMWM4ZGUyMCwgMHg0ODFhZmVmMCwgMHg3ZTg3OWQ3YywgMHg0MmYzYTk3NiwKKwkweDgxYzE1OTY4LCAweDU3MDgzN2Y3LCAweGI0MzAzMTBhLCAweGM0MzAzMzBhLCAweDBjZjg0MDg4LCAweDU1ZjJhOGEyLAorCTB4YTliNjA4NDIsIDB4Mzk3NjY1MjQsIDB4MDAwM2Y1MDIsIDB4MzQ3MWNjMjQsIDB4MDAwMDAzODAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGRkZmYwMCwgMHg0NTU0N2M3OSwgMHhiZWRkNzBiNiwgMHg5N2E3Nzc0YiwKLQkweDQyYzg0Mjc0LCAweDQwMTBkYzIwLCAweDgwNGQ4ODU0LCAweDAyNGRlM2IwLCAweDEwNjAyYTMxLCAweDY2YjcxYzExLAotCTB4MDQ0ODRiMGYsIDB4ZDNjZTdjZGUsIDB4MDgzMWJhZjksIDB4NTQ0ZTM4ZTgsIDB4Mzg3YzA2NjYsIDB4YThkMDQxYWYsCi0JMHgxYTBjMWE1MSwgMHgxNjZiYzNiMCwgMHgyNjY2NTQxOSwgMHhiOGMzOGUzYSwgMHg2YzhhODliYywgMHhmZDAxMTI0MiwKLQkweDVmMjgzNzk4LCAweDNiNzU1MzlkLCAweDRkYmE2ZjdkLCAweGUzZmJlNjVjLCAweDQ1YTdlZmNiLCAweGVhYjdiYWRkLAotCTB4OWNlYWQ5ZDQsIDB4MjVhYWE3NTMsIDB4ZDdhOTIwNTksIDB4ZmUxOTcyMTIsIDB4NDhhNmY5NjgsIDB4NTFkMTE5MDgsCi0JMHgxZmI3MTViNiwgMHgwNDg0NjkyNywgMHg2ZGQ1OTE1ZSwgMHg3ZmMyMjEwMiwgMHgwZWQ3MjJiOSwgMHgxNmM4ZTQyNywKLQkweGY1YTU2ODIxLCAweDIxMDc1ZWM4LCAweGQzNzY3ZWI0LCAweDk3MzVhMGI0LCAweDBlMDU3ZDkwLCAweGJiM2ZkZTBkLAotCTB4MjVlYjA4YjUsIDB4OTZlMmZlYmIsIDB4MmVlNTdiNjgsIDB4NjViYTgyNTEsIDB4OGI3NzI5ZWYsIDB4NmIyYTkwOTMsCi0JMHhlOTYzYTNmMywgMHgyMjVkZjZmMywgMHgyMjg3NDJkOSwgMHg0OTBiMTI4MSwgMHg4ZGI4ZTQyNywgMHhhYzhiYmZiMCwKLQkweGFhY2VjMGJlLCAweGRkZjc5Yjk1LCAweDM0NTZmZDA1LCAweGY2OWQ4OTVhLCAweGUxN2JiOTUzLCAweGJlYjRiMWQ0LAotCTB4ZTA0Y2IwZjAsIDB4YWI2ZGNhOTUsIDB4YmViNDVlOTQsIDB4YTA4NDI4MjgsIDB4MGZkZWMwZmUsIDB4NjJiNjljNzAsCi0JMHg0YzFhMTE1MiwgMHg4ZGJmNjljOCwgMHhiYWQwNTdhOCwgMHgwNjdkMzliYiwgMHhiODM4YmU3ZCwgMHg1ZmRlMTRhMywKLQkweDJkNzgyZjVjLCAweDliYzVmZGY0LCAweGZlODE5ZGY2LCAweGZkYzgzNzE3LCAweDkyZmZkYTQ1LCAweDA3NTEwNzNhLAotCTB4MTMyZmIxYjEsIDB4YTlmY2M3OTgsIDB4MWJlNTZmMDAsIDB4N2FkMmIxMzIsIDB4MGExNWE1YzUsIDB4YjU0OTFjMDEsCi0JMHhjNjBiYjk0YSwgMHg1ZDUxNGM3ZiwgMHgxYzYxY2UzMCwgMHhlNTY3Yzc0NywgMHhmYTFjNzQ3MywgMHgwNDk3YjJkZCwKLQkweDk5NmQ0YzJmLCAweDllMDBmODg1LCAweDU5ZjZkZGQ2LCAweDVlNjEzYjRmLCAweGYwODE5NGFiLCAweDBhYjVlZWZkLAotCTB4MzgzMGI3YmMsIDB4MGFiYjE1ZmIsIDB4NGE1NjZkZjAsIDB4OWI0ZGNlMDEsIDB4M2I4MzA1OTUsIDB4Zjc1MjViZmEsCi0JMHhlM2FlMDE5NiwgMHg3YzMyZjIxYiwgMHhmMmU2ZWQzMSwgMHhkNTEwOWZiNCwgMHg0YzVmNTFkYSwgMHgwMjcyMTY4OCwKLQkweGRhNjU0MWRjLCAweDE3ZTc4ZTkwLCAweGY3YTQxNDg0LCAweGE4OTEzYTkyLCAweDI5ZmU4ZWI2LCAweDQ5ZTkwODYxLAotCTB4ZmExN2ZmZmYsIDB4MjY4M2UwNGYsIDB4NmU1YjcwNTcsIDB4N2I5NmJkMDcsIDB4MGVkNWJmZTgsIDB4NzBmMzlkN2EsCi0JMHg4NWVkNDlmYSwgMHhlNWViZmRiMSwgMHgwYTA3NDBhMywgMHg4M2RmYWQ0ZiwgMHg0Y2ZlZTNlNSwgMHg1NWZiZDcyYywKLQkweGZjNmZkYmM0LCAweGUwZGNiMDgzLCAweDI3ZjNlMmY3LCAweGRjYjBhM2ZkLCAweGZjYjBkN2U0LCAweGNiMGNiZjlkLAotCTB4ZGYxY2JmYTAsIDB4ODU5ZmUyZGIsIDB4MGZiZjU2ZTUsIDB4YWZlMzNmOWYsIDB4NWZjZWIyYzAsIDB4Zjc5ZmNmOGQsCi0JMHhiZDY1OGJkZiwgMHg1ZmNmODAzZiwgMHgzMmMzYWZmMiwgMHg3MmM1YWZlNCwgMHg5NjAzN2ZhNywgMHhiZTIwZmUwZCwKLQkweDBlYmY4YWY3LCAweDA4N2Y0NmNiLCAweDM3ZjFlZjlmLCAweDQ3ZjYxOTYyLCAweGY0MGJkY2IwLCAweGRmYzQ2NWE1LAotCTB4ZmY3ZWU1OGMsIDB4ZmEwZjJjNTEsIDB4NDNiYmYwNWIsIDB4M2U1ODkzZmUsIDB4MWVlZWYxYzIsIDB4OGEyNDhhNDcsCi0JMHgzYzQ2YjczNywgMHhlYTQ4NWM1NCwgMHhhNjQ4YWQ2NCwgMHg1NjcyZDRmNSwgMHg1MDIzYmY0ZiwgMHhiYTdhZDBhNCwKLQkweDFlMjlkNjhmLCAweDE0OGQyZDdiLCAweDU3YmQ2OTU5LCAweGI5Y2Y2YjM1LCAweDY4ZGIxNDlmLCAweGRhYzAyNzNkLAotCTB4MTVhMjNkZmIsIDB4NWZiZDY5ZGIsIDB4YjgxZjZiMmQsIDB4NDQ5YzUwMjksIDB4YWM4MzAzZWIsIDB4NDhmYWFhZmQsCi0JMHhhZmQ2ODNiMSwgMHhmY2Y2YjEwYSwgMHhkMjcxMjkzMCwgMHhkNTg0N2U3YSwgMHgyNTY4OGUwYiwgMHg2ODJmNWEyZSwKLQkweDBmYzJmNTY2LCAweDVhNmUyNTAzLCAweGRmNjE2YzJmLCAweDI5MTMzOThmLCAweDMxZjVhNjQ5LCAweGMyN2RhY2VkLAotCTB4NDNkMTMyMjUsIDB4ODA4ODEzZWIsIDB4ZDE2NzYyZjUsIDB4MmY1YTE0YzQsIDB4Njk3YWIwZjYsIDB4MWE5MmQ5ZWYsCi0JMHhjYWY2ZmY4NywgMHhlNTA5NzMyZCwgMHg0ZGMwYmE4NSwgMHhlYjQ1OTQ5YSwgMHhlMjBhY2I0YSwgMHhjYzBjZjhhNSwKLQkweDI2NDQ3YWMyLCAweDQ4ZmRhMGYzLCAweDhkMjZiNjYwLCAweGFjODU3NWE2LCAweDBlZmZmNjg0LCAweGZkZjZjNjJjLAotCTB4ZWRlZDhhYjIsIDB4YmVkODE1ODEsIDB4ZGRiMTUxNWYsIDB4YWM3ZWVhYjIsIDB4NmMzNTk0MWYsIDB4MjBmNTViNGYsCi0JMHhkMTUwN2ZiZSwgMHhhYWUwN2RiMCwgMHg0ODdlYjE0NywgMHhhOGZiNjFmNiwgMHhmN2M1YmY1NSwgMHg2YzNlMjkwZiwKLQkweDUwNzU3YzdmLCAweGZmZWI0ODliLCAweDAwYjZmODIxLCAweGJlMDhkNzVmLCAweGZjMDc5MjBhLCAweGE3MmNjYTFhLAotCTB4MjA0NmJhZmMsIDB4MWUzZTQwYjMsIDB4ZjJhNmE2MDYsIDB4ZDE0YjI2YjAsIDB4ZmRlZGJmNDAsIDB4NTE2OWYwYmEsCi0JMHgwNjlkYmNlMCwgMHgzY2NmMDVmNSwgMHhiY2ZkOGI5YywgMHhiNGM4ZmQ4MCwgMHg3ZWViYjExZiwgMHhjYTMzN2MyNiwKLQkweDZmODRjZmQwLCAweDFhN2VmNDJhLCAweDdiMWFiZGUwLCAweGZiZDlmYWY3LCAweDNjMjMxOGNkLCAweGZiZDYyY2RmLAotCTB4NWM3ZWMyNjksIDB4ODRkNzliZGQsIDB4ZjA4Y2UzY2IsIDB4ZjdhYTVlNWMsIDB4NDlmYjA4NzMsIDB4MTEzYzFlZTksCi0JMHg5ZmExYTQ3OSwgMHhlZjUwYmM4OCwgMHg0ZmQ4NGZlNywgMHhhM2MxZWVjZiwgMHhmZDBkYTMyOSwgMHhiZDIyY2E2OCwKLQkweDRmZDhhMzlmLCAweDg5ZmFmNzU2LCAweGYwOGQ2MzI4LCAweDdlZjQ0YjI4LCAweGZhN2VjNjNlLCAweDlhNWU2Zjc0LAotCTB4MWUxMWJjNzUsIDB4Y2ZkZWE1NmIsIDB4NmU3YmE0NjksIDB4ZWZkOWZhZjcsIDB4YmY2N2UyMzIsIDB4ZjM5ZjhhMmIsCi0JMHhlZTgwY2YwOCwgMHg2ZGQ4YWJjZCwgMHgzYmIxNGZjNCwgMHhkODRiOWY4YSwgMHhlYmRkOTVjZiwgMHg4OGRiYmY2NywKLQkweDI4ZWVmZDlmLCAweGU2MDE2NDdlLCAweGYzN2JhNDM1LCAweGUyMzY0ZTJhLCAweDhhMzkzOGE3LCAweGYwMDBiNzFmLAotCTB4M2MxZWVkMGMsIDB4ZjExYTdiMDcsIDB4MTQ2N2IwNzMsIDB4Y2YwODE5M2YsIDB4MzNjMWVlODgsIDB4OWY4OGRkMzEsCi0JMHhmYzUxZTk4OSwgMHhlOGNmMDhhOCwgMHgzMDczZjVlZSwgMHg4MzlmODhkZCwgMHg1Y2ZjNTFlOSwgMHhlZjhjZmQ4OSwKLQkweDY2MjZiY2RlLCAweDMxMzNmMTE4LCAweDAyOWY4YTIzLCAweDU3YzhhN2VjLCAweGRhMTBmMDg3LCAweDNmNzEyYjhmLAotCTB4ZjExOGZhODcsIDB4MTQ0ZmE4NzMsIDB4OWZiMTYzM2YsIDB4YmM5ZmI0NDksIDB4Y2QyOWZiYWUsIDB4MzRhN2UyMzEsCi0JMHg4OTlmOGEyNywgMHhiYmViZTc4OCwgMHgxY2ExY2ZkNywgMHhlNTBlN2UyMywgMHgwNTMzZjE0NCwgMHhiZGQyOTlmYiwKLQkweDM1ZjY5NTc5LCAweDJmYjRhN2UyLCAweGQyYjVjZmMzLCAweGU4Njc1YzUwLCAweGU5MTVlOWRhLCAweDJlZjVkNzI3LAotCTB4YmVmYTA0ZDIsIDB4ZDE3NTYxZTgsIDB4Zjc2MDI1ZTMsIDB4NDMzZGJhODgsIDB4YmU5MTM1OWEsIDB4Mjk0ZmFjZWYsCi0JMHhkYWM0OTg3OCwgMHgwMjc3YzUzNSwgMHhjYWQ0NWM3ZSwgMHg5MjZiYjU4YiwgMHhlYzE5MjU0NywgMHhkNTJkMTRhOCwKLQkweGQ2NTFlZjUwLCAweGNmN2VmMGNiLCAweGY2ODY3ZWYyLCAweDE5NTc1OThjLCAweDA1N2NiM2RhLCAweGM1NzY3YTg2LAotCTB4N2RmYmMzMTgsIDB4ZjUwZDhiYWEsIDB4NjBkZWY3YmUsIDB4NzAzNzNmNzgsIDB4Yjc5ZWExYjMsIDB4Zjc4NjI3ZWUsCi0JMHgzMWNlZDQwNywgMHg2MWIxNWZiNCwgMHhjYWZkYTFiMSwgMHhmZDQzNzJlMCwgMHgzNzdmYmFlYSwgMHhmNDI0M2ZiYywKLQkweDlhZmRhMTgwLCAweGVkMGQ4N2M2LCAweDFiOGYyMzQzLCAweDNmMGVjM2VhLCAweDQ0N2Y3ODY5LCAweGZiNDMxNmYzLAotCTB4MWJjZmEzYzgsIDB4ZWNiNzQ3ZGEsIDB4OWVjN2Q0MzQsIDB4N2Y3ODYzZGMsIDB4NDM3ZWZiN2MsIDB4NmY4YmRhZmQsCi0JMHgyMjJmZGUxYSwgMHhkYmRhMzY3ZiwgMHhlZjBjMGZiNiwgMHg2YTdjZjI0ZiwgMHhmMzJlYmY2OCwgMHhlYTlkOTM3MywKLQkweDlhYmYxY2Y0LCAweDJiOTA0NWQ3LCAweDIwNDk3ZTgyLCAweDM1N2I0MTRiLCAweGFlYjA1MmUyLCAweDNmMzI3MmY0LAotCTB4M2Q0MGI1YzUsIDB4ZDk0N2Y5NDYsIDB4NDM0ZDU3M2YsIDB4ZDQ3ZmE0YmUsIDB4NTVlYTI4NmUsIDB4N2QwYjQ1NzEsCi0JMHhiZTMxZDNmZSwgMHhmOWY0M2MyYiwgMHgzNWRmMTU0ZiwgMHgwZGY2Mzg5ZSwgMHg2NDgxMzdlNSwgMHhhMDVhYTk0MiwKLQkweDk1YWZiNzM0LCAweDY3MTdiZjE5LCAweDMxZjgxYTVmLCAweGQyY2FiZWZkLCAweGQ2ODUzMDNlLCAweDIxNDU4OTdiLAotCTB4MDQ1NzhmOTAsIDB4NDlkNWRhMGIsIDB4Zjc4NmE5MjIsIDB4ZmQwNGFjOTIsIDB4ODViOWI1YTYsIDB4ZTQ2MjA3NGYsCi0JMHg2YTFmNWQ2MSwgMHhmZDFkMDg2NywgMHg5OTdkOTNhZSwgMHhmYWFkNDc2OCwgMHhjZTc2MDAyOCwgMHg1ZTc0M2U5YSwKLQkweDRkNzkwOGJkLCAweGU4MTIyOGY4LCAweGIzZWZiZjRmLCAweGZiNDdkMzIwLCAweGNmZDQyYWIzLCAweGExNWYxZDg4LAotCTB4ZjFjNjBmZTMsIDB4ODcwZjIwMjMsIDB4OWQxMWZjNjAsIDB4MWJmNmI3YzcsIDB4OTZkZjE4NjUsIDB4ZGYxODYxNTMsCi0JMHgzZGYxZDBhNiwgMHhmNTVjM2ZkNCwgMHgxMjlmMWYxOSwgMHg2ZjIxMGM2MSwgMHhmOGUxOWYwOSwgMHgxYzBhOWNkNiwKLQkweGZkNDJhZDdmLCAweDkzZjFkOGFlLCAweGMzMzdlM2EyLCAweDM0NGJkZmZjLCAweDhjNjM3ZWZmLCAweDZjNTljZmYzLAotCTB4ZTZjMmJmOWMsIDB4YjNhYWZlZmYsIDB4OWMyNGZjN2MsIDB4NTljMjA3ZmYsIDB4YzU5Y2ZmMzYsIDB4ZDY1NmZlNmMsCi0JMHg3NzdjNzQ2ZiwgMHgzMDJkZmYxNCwgMHhlMzA0ZjFmZSwgMHgxOWM2ZjM1YiwgMHhhOTc3ZGZlNywgMHgzNjU2ZmU3MSwKLQkweDVmNTVlOWZlLCAweDM4OWRmMWYyLCAweDk3YzJlN2ZlLCAweDk3N2RmZTZjLCAweGQ1OGFmOGUyLCAweDUxZmUwNWU3LAotCTB4ODNhYTkzYjIsIDB4OWJkMjdjNzQsIDB4NjAwY2JlMmEsIDB4OTQwZTNhMTcsIDB4ZDBhOTUyODMsIDB4ZTg0ZGIyMTAsCi0JMHgzNGZjNzA4NywgMHg1N2RiZjE4OSwgMHg1MGRmOTQ0OSwgMHgzOWYwMDU5ZiwgMHg1OWNkNTIwOSwgMHhjZTQ2ZmQ0OCwKLQkweDhiZWE0YmViLCAweGQ4N2JkMDE0LCAweGY5YWRmZDRlLCAweDhkNzlkNDFjLCAweDU5MzdmMjIyLCAweGEwMGUwZDZmLAotCTB4OGEzNmI2ZjAsIDB4NWJjZmE4MDEsIDB4ZmEwODNlM2YsIDB4ZWU0YWNhYjUsIDB4MjRlZjg3MmUsIDB4OWZlNzgxMTIsCi0JMHg5NmM4N2FmZCwgMHhjYjk5NzlkOCwgMHhmMWYyYjVmOSwgMHg4Yjc5MTg5NiwgMHg2NGM1ODFmYSwgMHg2Zjg1MzU1MCwKLQkweDg4YzEzMDEyLCAweGQ0MjdmYThlLCAweGY4YzcwMzhmLCAweDEwZjdlYTQzLCAweDJhN2NmZmVhLCAweDliZmVmMWIzLAotCTB4NmY1MDdiZmEsIDB4M2ExZWZlYTEsIDB4N2UxNTY0Y2UsIDB4Mzc3YmJiNDcsIDB4Y2U1ZmMyOTMsIDB4NjI0NGZmZTEsCi0JMHgxZGM5ZmFmMiwgMHhlNTQwMzA0MiwgMHgwZDlmYWJmMywgMHhlZWZhZmY0NSwgMHhlOTE0MWQ3YiwgMHgwZWNjNzAxZCwKLQkweGU5ZDQzMGY0LCAweGE3NDAwMmJjLCAweGUwZDZkZGY2LCAweGFiZjEwMTE2LCAweGExYTZiZTAyLCAweDc3MzIxMjY4LAotCTB4NzVjNTM2NWQsIDB4ZGQ3ZmZiYzcsIDB4ZTA5MGU1M2IsIDB4YTI1NmU0MjYsIDB4ZmRmNDE5YzksIDB4N2QwYTU3M2IsCi0JMHgxOWRjNzQzYywgMHhhZDgwYjU5YSwgMHgwNWI2NWE0MywgMHg1YjY0OWFlNSwgMHg3MzcyMTE0NiwgMHhmNjk5NTBjMywKLQkweGYyNjlhNjQwLCAweGUzMzEyZDI3LCAweGQ2MzMyZjRlLCAweGViMWI5NDY3LCAweDViMjZiMmFkLCAweGQzYWQ1YzI4LAotCTB4ZjY5OWIyMDQsIDB4YjE5NjczM2IsIDB4YmZhNzFmNWQsIDB4OTlkMTk1MjUsIDB4NzE0ZTU3OGYsIDB4Y2QxZjQ1OTIsCi0JMHgxZTAwYjI4NCwgMHhiM2NlOTA3YiwgMHgxZDViZWMzYywgMHgzMmI5YWE5ZSwgMHgxZjFmYTA4OSwgMHhhZTgwNDllOCwKLQkweGVmN2MzNDgxLCAweDZmMzYxZTI3LCAweDY0YjNiYzMzLCAweGU3NGU1NjliLCAweDE4YjY2YjM5LCAweGMzMzZmZTA0LAotCTB4ODc1ZWZlZmYsIDB4ZTVhN2M5NjYsIDB4NjI2NDI3YmEsIDB4MzMxZjNjZTksIDB4Y2NmOWI3ZmMsIDB4YjBjOTA5ZjMsCi0JMHg2MTVlZGZjZSwgMHhlNmY4Y2U3ZSwgMHgyN2ZmYTczOCwgMHgzY2I0MWZjMCwgMHhlMTQxZmMwMSwgMHhhM2Y5YzYzZiwKLQkweGZlMzJhZjQzLCAweGE2ZmFiMmE4LCAweDZmYjQzZjAyLCAweDk1ZDIwOTE0LCAweDljYWRjYmYzLCAweDFhZDdlNjVmLAotCTB4OWYxMDgyZjksIDB4Mzg1Yzc0MGMsIDB4Mzg3ODI4NGIsIDB4NzI2NjBmODYsIDB4YzFiODU4M2UsIDB4OTI3NzM3YzgsCi0JMHg4NzE1OWM4MCwgMHhkZmFkYjcyZSwgMHhkYWE2NjBmYywgMHg3MTFmN2U3OSwgMHg5MWZkYjliZSwgMHhjZTlmODg3ZCwKLQkweGJhNzQ2NGYzLCAweGNlZTlkMzhiLCAweGFkZmI2MzZhLCAweDcyNzdhZTljLCAweGYwZGFjZWJhLCAweDdkNTRlYmQ4LAotCTB4NDFhODlmOTAsIDB4ZWFiZGU0MTksIDB4MmQ5ZTlkM2UsIDB4MzhmYTdhMDYsIDB4ZGU3MGNkM2QsIDB4ZDc3OWU5YzUsCi0JMHhjZDNkMThjZiwgMHg3YTcwYjZmMCwgMHgyZjM4NmNiNiwgMHhlMTlkN2U5MywgMHhmNzc3YzMzNSwgMHg4M2U2OWRiZCwKLQkweDgxZDlhZDcxLCAweDZhYWNmNGY4LCAweDJjNzE1YTJjLCAweGU4NjU3OWU2LCAweDYyYzcxNWZhLCAweGRkNDk2Y2U0LAotCTB4NTE3ZDQzMzQsIDB4ZmJjMzM2ZjAsIDB4MzZjYzM3MGIsIDB4NWRhZmNmYjQsIDB4YmI5ZjY4NjQsIDB4N2Q0MzFlZWUsCi0JMHg4NjY3ZTA3NiwgMHg3N2JlZWZmNywgMHhjZWZkYTE5NSwgMHhlZDBjODdlYSwgMHg2NjNjNTdiNywgMHhkYmU2ZGZhOCwKLQkweGU2N2Y3ODY4LCAweGY2ODZjZGFjLCAweDE5Y2ZlNTE5LCAweGVkOTdhN2RhLCAweDY5YTdkNDMwLCAweDBiZWYwZGJiLAotCTB4NmRmNTE3N2IsIDB4ZjdkNTc1YzEsIDB4ZWYxMDE5OWYsIDB4ZjkxNTliZmMsIDB4NzRlZmFjZDQsIDB4YWZjYzc4YmQsCi0JMHhmZWUzZjNlMiwgMHhmNDllNTg0MSwgMHg2OWY5ZjE3YiwgMHg1NzJjMjhmZiwgMHhlYmE2ZmU4MSwgMHgyYjM3NjU4MiwKLQkweGRkOWYxZWFiLCAweDk3NDJmODE3LCAweDZmNjU0ZjhiLCAweGFlZDllODBlLCAweGJlZmVhMWY0LCAweGJmZDFlZjU5LAotCTB4OGE3Njc4ZWMsIDB4NDgxNTJlNWUsIDB4NmQ4M2FjMzksIDB4OWZkNzRlZGMsIDB4NGVjYzJkZGIsIDB4MmMwMWU0MjAsCi0JMHg2ZTRjMmE5NywgMHgyYWNjZWU5NywgMHg0N2E4NmUyNiwgMHgxMzNiNTYwNiwgMHgwMjQyNGJmNywgMHg2ZDdlNjdjZSwKLQkweDg1Y2UwMTllLCAweGMxMzZhZTFiLCAweDZhZjkwNWI3LCAweGUxOTg3MDUxLCAweGIxYmE5MmY5LCAweGVjY2VlZjg2LAotCTB4NjViZTExMTMsIDB4NjFhM2UzMjAsIDB4ZGY3ZjJiMzksIDB4NzIzM2ZhMDIsIDB4MTBmYTY3MjAsIDB4MDBmYjU3ODAsCi0JMHhkMTNkOGRlYiwgMHgyZmUzM2I5ZSwgMHgwMDZjNzE1YiwgMHhjYjFjYjllMCwgMHg1ODU5ZmU5MywgMHhiMGZiZjcxZSwKLQkweGMwYWZlNjNjLCAweDM1N2YxM2YyLCAweDdiZmUyZDk2LCAweDdmNmZmY2IxLCAweGZkMGZjYjAwLCAweGRmN2NiMGViLAotCTB4NTFlNThiNWYsIDB4ZGYyYzA2ZmYsIDB4N2NiMTA3ZjMsIDB4ZTU4NzVmZDcsIDB4OTYxMGZlM2IsIDB4MmM0NmZlY2QsCi0JMHg5NjFhZmQ1YiwgMHhmMGM0YmNiYSwgMHgxOGFjZGY0YiwgMHg5ZmY1ZDE3ZSwgMHg3MjRmMWZhZSwgMHhmYzBkMzk3ZSwKLQkweGI2MmY4ZjEyLCAweDg0ZTJmOTE4LCAweDYxN2M4ZDVjLCAweDNhNjY4N2Q2LCAweGY3ZGZmNTk4LCAweDNmMjk4N2U1LAotCTB4ZDA3NDNmMTIsIDB4ZWY0NGRiM2IsIDB4OWRlOGFlYmMsIDB4N2JkMGM2MjksIDB4ZTBjM2M1OGEsIDB4MDVmZWY0ZTEsCi0JMHg1ZWM3MWJjMCwgMHhmYjhiMDQ5ZiwgMHg0ODNiMTg4OCwgMHhmYWMwYjIyYiwgMHgyZmVmOWNiMCwgMHgzZjU4MDdkMCwKLQkweGExYWVjN2M3LCAweGJkYTMzNWRkLCAweGZhMDQxYzE0LCAweGZmYTBkY2Y4LCAweGY5ZjEwODE5LCAweDUxMjk0NzczLAotCTB4Y2ZjZjEzNzIsIDB4Nzg4NGJmNGMsIDB4YWJlOGYxODAsIDB4MmU5NDgyMGIsIDB4ZGJiNzNhM2QsIDB4ZWQ1ZTE4OTMsCi0JMHhlODQ2NTIxNiwgMHg4MGQwZjE3YSwgMHgwNjczYmM2NywgMHhhOTIyNWQ2MywgMHgzYmQwN2RmMCwgMHg1ZmE3MTVjZCwKLQkweDdlMDI4MzZhLCAweDhkNmJjMmJiLCAweGU4N2NhYmViLCAweGZmOTNmOGVmLCAweDhhNzI4NDJjLCAweDQ5YTFkOTg1LAotCTB4ODdiNDQ0MDcsIDB4MmY2OWU0NDksIDB4ZWZhYTM3ZTAsIDB4ODg0Y2RlYWQsIDB4NTAwZmI3NjMsIDB4OTMxZWI4M2MsCi0JMHgwMmZlMjMxMiwgMHgzZGZjMDZjNSwgMHg4Y2Q0NzE0NCwgMHgyNjZkNTllYiwgMHg1N2ZmYWZlMiwgMHg4MWJhYjMwMywKLQkweDY0ZjRhZWJmLCAweDAzOWNmODU3LCAweGUwMTdmZWYzLCAweGQ1ZmQyYmIzLCAweDlhMjJkZTk1LCAweDlkMjM1MmZhLAotCTB4MjFkZWRiN2YsIDB4MzBhYjBmMDUsIDB4NWJlM2I3ZWUsIDB4YzMzMmI3ZGYsIDB4N2M4ZWY4MTMsIDB4ZjNhZTk2ZGMsCi0JMHhhMTBlNzM3MSwgMHhmMmU1OWNlMywgMHg4YWUxYWU3MiwgMHhiNDRiYTA2NCwgMHgyOWU4MmU5ZiwgMHgzOTQ3ZDdmYywKLQkweGU2Y2ViZmEwLCAweDZiNWJmYjFhLCAweDIxNTkyZmVlLCAweDVjNzQzNWMyLCAweDY0OTBhMjk3LCAweGJlODg1NjQyLAotCTB4MDZmZDExNWEsIDB4ZmMwMDRiNmYsIDB4NmYwZWJkZjEsIDB4ZDhmZTBhOGQsIDB4NTQ0NjNmZTksIDB4YjdlOGQ5ZTgsCi0JMHhiNGZjM2I5ZiwgMHhlNTliZmMxYiwgMHhiMWY1NjI5OSwgMHhjYmQ0NzQzOCwgMHhiNTZlNTBjYSwgMHg2ODBmZDYzMywKLQkweGQ1Y2ZkNjM0LCAweDljMjE2NTBhLCAweGNiN2M5YTk3LCAweDNjMDc1ODEwLCAweGQwNjRjN2Q1LCAweGVhNTg5OWNiLAotCTB4NTRjZjJjZmQsIDB4N2Y0YTFjNzAsIDB4NTNlYTQ3YTYsIDB4ZjY5Y2NmNTAsIDB4MWZiZGYwZGIsIDB4ZmQ0NDhlMWIsCi0JMHg0MGQxYzA3NCwgMHg4M2RmYTUzZSwgMHg0YmNlNWQ4OCwgMHgzOTQyN2VmYywgMHgxMDI4MmU5MCwgMHhmOTYxMjQ4ZiwKLQkweGVjZGZmMDJiLCAweGZkY2JiZmY0LCAweGViMDk1ZmEwLCAweDIxNTViZjdhLCAweDA2YmQ2MDMxLCAweGM2MWJkNzllLAotCTB4ZmFhOWRmYTMsIDB4OTc3YzJjMWUsIDB4NzIyNGRlNTgsIDB4NGE3N2U3NWMsIDB4N2VmODM3YjcsIDB4N2IzYTkyZjEsCi0JMHg0YzJlZDFiNSwgMHgxYWFiZDQzMSwgMHg3NjBkYWFiMywgMHgwYzAzZmMyMiwgMHgwMjQxMGFlMSwgMHg2NzI5Nzc3YiwKLQkweGI5YzkzNmJmLCAweDJiNjhmODBlLCAweGRmODBmYjA0LCAweGE1NWVmNjA1LCAweGE5ZjE0NWFkLCAweGMwY2QyNjI4LAotCTB4ZTk0NjczOWYsIDB4ZmNjZWFmN2MsIDB4NTNhN2VhODAsIDB4ZTQwNGM5NmYsIDB4NTBhMjVjOGIsIDB4NDdmNDc2MTUsCi0JMHhhMTYyNTA1NywgMHgzNmJjYjlmNSwgMHg2NGM5NjFhNywgMHhiZDRlYWY1OCwgMHhmNWRhMjM3MiwgMHgxYmI5NDhmMywKLQkweDUyMGFjZGZjLCAweGNmZjEwODViLCAweDA2NTJjNGIzLCAweGJjOTY3OTcyLCAweDIzMTYxZWUzLCAweDA1NDVlNzg3LAotCTB4Y2ViYjk5ZTEsIDB4N2Y1MzE3NjgsIDB4Yjg1ZjUwZDksIDB4NDA1ZjU4YzEsIDB4N2Q4NzRlNmUsIDB4NjVlYjA1ZjAsCi0JMHg1ZjQwMTQxMiwgMHgxNTNmZGIxOCwgMHgyNDJkMWM5OSwgMHg3ZDYwNmJkNSwgMHg3NWIzMmY1ZiwgMHg0ODg3OGU2YywKLQkweDU1NWY1NGQ5LCAweGUxNTRmYWJlLCAweDFmZmY1YTZjLCAweGY0MmRjNTkxLCAweGE5NDVkZDdkLCAweDFjNTg5ZmNjLAotCTB4YjQ2OGFjZGEsIDB4NjE4NmQzZmQsIDB4NDNjZDUyYjcsIDB4ODFhZTBmYmYsIDB4NGJiMDJhZjUsIDB4M2I1MzZlZjAsCi0JMHhjMmJiZWZkMywgMHg1ZjU3ODY2ZiwgMHgyZmVkM2JmZiwgMHhlYjJhMzg3MywgMHhjNzE4MmQwNCwgMHgwMjQ5YjAwZSwKLQkweDU4MDM3N2Y3LCAweDg2M2M5NjBlLCAweDUzMjhjMmI4LCAweDUzZjM3YmZkLCAweGQzZjAzMTFhLCAweDRhYTdkMTU2LAotCTB4ODBmZjE5M2QsIDB4ZWQ0ODI1M2YsIDB4ZjQ4N2VmOGEsIDB4ZmZhOWQ5OWYsIDB4ZmY2YTNmYzEsIDB4ODVmZjY5YmQsCi0JMHhmZDQ3ZmU4NiwgMHhlZmY3ZmRhOCwgMHg2OTQ0ZmYwNCwgMHgyYmZlZTc0NCwgMHg5NWYxN2Q1ZiwgMHg4YjI3ZDUwMCwKLQkweDRkZGFmZmI3LCAweDRhNzhmYWU4LCAweDUyZjc0ZGFhLCAweGY2ZGQyZWZhLCAweDdjZTgxYmEwLCAweDgxYjgwYTUyLAotCTB4YzUwNTRmNWYsIDB4ZjU5YzYwYjIsIDB4ZTA0OTNlZWEsIDB4MTRlNmEyZjYsIDB4ZmYwNThlMjAsIDB4N2U5ZmZkYTQsCi0JMHhkZmU4MTdmZSwgMHhmNjRkYjU3ZiwgMHhjZWFhN2M2MCwgMHgzOTUyYjExYSwgMHg2OGIwZDY1YywgMHhmYWM3YzkzMiwKLQkweGY2YmVhY2M3LCAweDhkZWExMTBiLCAweGZjNWJmZTQ2LCAweDIxZDNhZmVjLCAweDBhNzI4MmRmLCAweGQwNDRkNzhmLAotCTB4ZjViNjVkOWUsIDB4OTc1ODUyYjMsIDB4Y2EzYjQ4YWEsIDB4MTgzYmY5OTEsIDB4ZWEyYTYyZmYsIDB4NzI0YWQ5YmYsCi0JMHgyNzBhNzZlNywgMHgxYzU1ZGRmYSwgMHhiZjBkNTUyZiwgMHg0Mzc0NDJmOCwgMHhkMDA5ZmQ3OSwgMHg0MDQzZDQxNywKLQkweDVkZmNkOGJmLCAweDk3NGZiNzA1LCAweGUzYjRhZTRhLCAweDIzMjcxNGQ0LCAweDhiZDA0OGM5LCAweDkwNDg1ZTNhLAotCTB4YWJlMmE3ZDksIDB4M2M0M2U1NGYsIDB4YjdkNmNjZjIsIDB4YmUwYzQyZGMsIDB4MTczYTc5NzQsIDB4N2I5ZmZiOWEsCi0JMHhiNzdhYzRkNCwgMHhhYzViY2E5NSwgMHg1YmFmYTQxZCwgMHhhYmI3MjM2YSwgMHgyYTVjYWNjMywgMHgxZjkwZGM0NywKLQkweGVjYjM3NGIzLCAweDRiYzdkMDBkLCAweDk5ZmE3YzVmLCAweGY4M2UyMTI3LCAweDAwNzdhYjM3LCAweDhiYzk3ZmVkLAotCTB4ODYzN2JmYWYsIDB4OTBlYzk3ZDYsIDB4NjliMzI2ZDMsIDB4MGVmNDg1MzgsIDB4ZmZkMTU0ZmEsIDB4YTBlODJkZWUsCi0JMHg1Zjk3ZTJjNywgMHhlYzIxZDQ1NywgMHgxZGE5ZmRmOSwgMHg2M2IyNTk3NCwgMHg3NDg2NDI5ZiwgMHg2ODQ5NDdjNiwKLQkweDhjZTJkMjlmLCAweGM3ZDA5ZjQzLCAweDg4Mjc2MGE1LCAweDAwYWQ3ZWFmLCAweDE1ZWQ0ZmZkLCAweDFjNmU0NjQ4LAotCTB4MWQ3ZTZlN2MsIDB4MTNjMDAwZWQsIDB4MmJkMzkzZDIsIDB4ZmJkMzNmNGEsIDB4YTAyZTk0NTUsIDB4MzJmNGNkYjcsCi0JMHhmNDA1MzdiZiwgMHgyZmQ2MDhjYiwgMHhmZTUwMmRlNCwgMHhlNDBmNjk3ZSwgMHhmNTZmYmQxNSwgMHg1ZTJhMWUwMiwKLQkweGY5ODZlMTVhLCAweDE5YWE5MDljLCAweDYwZjUzZjlmLCAweGFmYzc0NmJhLCAweDFlZTkwMzkwLCAweDhhZjNkOTJjLAotCTB4ZjIxYmZkZGYsIDB4ZmZiN2MyZGYsIDB4MzVlMzFkMmQsIDB4ZTBiMmNiNDQsIDB4ODJjODE0NWEsIDB4MzRkZmNlNzksCi0JMHg4MGI5ZTcwMywgMHgyYjBmOTBmOCwgMHg0MWNiMTI5ZSwgMHg5MTI5N2UxZiwgMHhlNDcxMWRiMiwgMHg5Mzk3M2NlNCwKLQkweDcxMjg1YjEzLCAweGQwNGYzY2U5LCAweDZkZjMwNjY1LCAweGRiODMxMWRlLCAweDg3YmVkZWQwLCAweDM3ZjgzZTgwLAotCTB4MzE2YTE3M2UsIDB4MWI0YmZkNjAsIDB4OTIxYmQ3YTMsIDB4YWI1MTk3ZWUsIDB4Yjc3Zjk2MzMsIDB4M2EwNjZkYWUsCi0JMHg2NWEzZWU5ZCwgMHgxNTQ2M2VjMCwgMHgxZjFjMDI5MSwgMHhhZmRhNjVjMiwgMHgwY2E0ZjZmOCwgMHg0YWEyMjc0NiwKLQkweGJhM2JmYzg1LCAweDczYzA5N2VlLCAweGQ2NTliZjc4LCAweGVmODZmOWVjLCAweDhlZGNlNWM4LCAweGYxZjI1N2YxLAotCTB4YjA0OWRjMjksIDB4OGY0ODlmNWUsIDB4YjJhYWI3NmYsIDB4YmFlODA3YWUsIDB4MzE2N2MzMWQsIDB4N2ZlNGNlZjIsCi0JMHhkZTRjNDNlYiwgMHg0ZTBmZjk3NSwgMHgwYmY2ODMyYiwgMHg4MjM5MzJlZiwgMHhhNDNkNjBlZiwgMHhiMDMyNDU3MCwKLQkweDAyMmRkZjdkLCAweDg5MmIwN2VhLCAweGFkZjM5M2M0LCAweDYzNzM5NzMyLCAweDI4NWY5OWJiLCAweDFjOTA5MmZjLAotCTB4NGUzMDM3YzMsIDB4ZjcwMWQyMmEsIDB4YTdhYzE2MzEsIDB4ZDFlOGM3ZGYsIDB4ZGRkNzE4MmEsIDB4OGU1ZDVmYjksCi0JMHhkMDdkNzIxNywgMHg2NDA3ZDI2YSwgMHg4OTAzZDMxMywgMHhhZTAwYWFlZCwgMHhlMGU1NGI3ZiwgMHhmYzgyNGYzMywKLQkweGE4MGQ3OTUyLCAweDM5NzJiZjIwLCAweGZhZjNmZmNjLCAweDg0ZmRlZjAzLCAweDIxZTdjZGNhLCAweDdhOGQ2ZTVkLAotCTB4MTViNzJjZDUsIDB4Nzg5MDQ3M2IsIDB4ZDNiOWZiNzIsIDB4MmRjYWUyNGIsIDB4NmU1NzFlN2QsIDB4Y2ZjODJkOWQsCi0JMHhhYWY1YWZmZiwgMHg5OTBjYzc4ZSwgMHgwZWVhZjFlMiwgMHgzMjdhZWEzYywgMHg3YWNkM2UxMSwgMHhjNmE0YTc3MiwKLQkweGVmZjQ5M2Q1LCAweDk5ZDg1MjVkLCAweGQ0M2U3NTFmLCAweDBiZjE2ZmY5LCAweDFmNDE3ZDk1LCAweGU3NTRmOTQ1LAotCTB4ZWE5ZjI4YzMsIDB4NWUyOWQ4N2MsIDB4YjlhM2MwNmEsIDB4ZWZiMGVmZmQsIDB4ZGI2MmZjMDEsIDB4NzUxOGY1MzgsCi0JMHgwMTVlNmQyMSwgMHgzMzhhZmVlNSwgMHhiNGFmY2MxNiwgMHg1ZjcwMTcwZCwgMHgwOTA2ZDA2NCwgMHgzYzViNmZlYiwKLQkweDlkNGVjMDIzLCAweGNmZDVmNjNhLCAweGJiYmU0NjdmLCAweGNiN2RmMDdmLCAweDNmM2UyOTU3LCAweDZlYzg0MDE5LAotCTB4NWYwNDY1MjgsIDB4YzhlN2E1OGEsIDB4ZWFiMzgzMzAsIDB4NDNmNjA5MDgsIDB4ZTU4OWEwZmQsIDB4Y2ZmNGZlMzEsCi0JMHhiZGY3NjY2NSwgMHg2MWNlZTFmYSwgMHhiNmEyYzc4MCwgMHhhODJkYzljMSwgMHg5ZmEyMDczNywgMHhjOGY1YzU1OSwKLQkweDBjOWE4MGI5LCAweDM4NWNmNWZhLCAweDczYzlmZDBmLCAweGJjNTc0NTg3LCAweDM4ZTdjNmZjLCAweGY4ODA1ZjdkLAotCTB4YjZkYjJkMTksIDB4ZjI5MTVhOTIsIDB4NDc2OTFiNWQsIDB4ZDViMDIyYmIsIDB4ZDljNWI2NDYsIDB4OTk5MGFhZGYsCi0JMHhmOGExZmM5ZSwgMHgzZTAzZmEwMCwgMHg5NGI3YjM5ZSwgMHg3M2IxYzc5NiwgMHhiYmViOWRmZiwgMHg4MWZmZmJhOSwKLQkweGUxNTVlNmViLCAweGE3YjAxNmNkLCAweDMxNmFkYWFlLCAweGViOTYwNWM0LCAweDBhNDA1ZDdjLCAweGVlYTdhZjgwLAotCTB4MDM4NmJiYjcsIDB4NWU4YjBmMWUsIDB4MGFhZDAzYzgsIDB4ZTJmOGExN2YsIDB4ZjllNjhkZjgsIDB4OGY2MGZmNDMsCi0JMHg3MDdiMmIzZCwgMHhkMGU0ZDdkYywgMHg2YmMzYzA1YywgMHhmNjA0NmQ2NywgMHhiNTJiNzZkMywgMHhmOWMxZTI0YiwKLQkweGI5YzE4NTJiLCAweGNiYTMxOGZiLCAweGEyOTc4NThmLCAweDE4YTQ2NzM2LCAweDA5NWIzZGUyLCAweDNhNjc2ZGYyLAotCTB4NzNmM2U0MTMsIDB4MmFiODI0NzUsIDB4YjIyZGU4MTcsIDB4NjgzNTNkN2EsIDB4OTQxNGZiZTgsIDB4ZWY4MzhlNWYsCi0JMHg2MzVlZDEyZSwgMHhjNjhhZjNlNCwgMHhmNDA4MmYxZCwgMHhjMTYxNjViZCwgMHhjYmVkYTE2MywgMHhmODA1MTZhNCwKLQkweDQ1MzFhYWE1LCAweDU0MzY3ZDA0LCAweDNkNWJmM2Q1LCAweGUxODk2ZTQzLCAweDA5NjU2N2JmLCAweGNjNjA3OWU3LAotCTB4NWUwM2I3NmIsIDB4MDg1MTlmY2UsIDB4MDc2ODAxZTQsIDB4Zjg0ZjMxZGIsIDB4ZjIxODc4N2MsIDB4YmQ3OWEyNWIsCi0JMHgyNzUzMjdlYywgMHg0MTBmZDBjYSwgMHg3MWQzMzYzZSwgMHhhMTkyN2Q3MCwgMHhkN2M0YjYzZSwgMHg2YTlhZTAwYiwKLQkweDhkZTk1OTZkLCAweDFjMDFmNzgzLCAweDdjOTYzZmVmLCAweDViNzY1NTc2LCAweGU1ZDVkZjdlLCAweGM3OTYyN2Q3LAotCTB4OWQ1N2RkZjAsIDB4OWUyMzM3ZTUsIDB4YTU1ZjJlZmMsIDB4OTdiY2MwNjYsIDB4MDA2NWU1MzcsIDB4MjFiZjk3M2UsCi0JMHg1N2M3OGNmNywgMHhkZjk5ZmEyZiwgMHgwM2U3OWRiOCwgMHhmOTUwMzViNywgMHg3ZTQ2MjZiZCwgMHhjNmZjYTgxYiwKLQkweGZjYjYxMzg5LCAweDIyZmJmMmM4LCAweDdiM2M2ZmM4LCAweDk3NTdjZjhjLCAweGM3ZjBmY2RmLCAweDBkZjliZjI4LAotCTB4Y2ExZTQzMTYsIDB4ZWZhZjk5NjksIDB4ZTg1N2U1MDksIDB4ZDQxYTRiNzksIDB4OGUyM2FmNjUsIDB4NDAzYzA2YmUsCi0JMHhkZjNiNzM5YywgMHg0MDcxODAwNywgMHhiYmU1NTU4ZSwgMHhmYzdmZjFjOSwgMHhmOTc4ZTU4YiwgMHgzMzc5ODIyZSwKLQkweGU0Y2RlOTlkLCAweDJhNmVmOTc4LCAweDlkZDAwMmM3LCAweDI2ZjJmMWM5LCAweDlkYjljNzJhLCAweDI3NTA3N2U1LAotCTB4MmZkZjY1ZjksIDB4YWJlZmIwOGIsIDB4N2I3ZjczMWEsIDB4NDBhZjFkMDcsIDB4ZmEzNmJkOTMsIDB4M2M4NzQxN2UsCi0JMHg2Nzk1ODg4ZiwgMHhjZjIwNDk1NSwgMHhjZjI3YmI4NywgMHg1MzNjYjhiYiwgMHg4ZGU3ZWQzOSwgMHhkODZmNTc0MywKLQkweGRhZjYxZjk4LCAweDJmZjUxM2U4LCAweDQxZmU1ZjAzLCAweDZkZTlmZjQ0LCAweGZmNzNiMzBiLCAweDcwYzRmYTM4LAotCTB4MDBkYjhiZTAsIDB4NjMyZmNhMWUsIDB4ZmQ1YTFkMzksIDB4NzRiZmVjMDEsIDB4OTA3NGM2Y2MsIDB4YjU4MzkyOTMsCi0JMHhlYzNjODFiZiwgMHgwMTMyYWRjYSwgMHhlMWFjYjg3ZCwgMHhjZDUzZjQ2MywgMHhiZWRkMTc3MSwgMHg3NDVmYzczMiwKLQkweGMzOGU2MjNkLCAweGJkMzNhOTJjLCAweDlkYmUzMGE3LCAweGJjMjBiNjI2LCAweDc3YTI0ZmU0LCAweGQzYmUxYzViLAotCTB4ZTcwNGViZGYsIDB4OWNmN2RhZTEsIDB4ZWNlMDNiYzMsIDB4Y2ZhNDJlMmEsIDB4ZjRiODJiYTMsIDB4N2MyYjk1NzksCi0JMHg4NjRhMWJiZCwgMHhlMjkxYmM0MSwgMHhmMDI1ZTUxMSwgMHhhYTcxODhhNiwgMHg4NjAxYTJmMiwgMHg3MmI3MGNmMywKLQkweDE2ZDU4NzM4LCAweDYyZDg0MDk1LCAweDgwZWJlNDFhLCAweDllZTFiNTVmLCAweDM2OGZiMDQzLCAweDAwNWFhOGUyLAotCTB4MzFkOGY1NjYsIDB4NTdmODFmNTYsIDB4NTFkYmQ5Y2YsIDB4M2NiYTc1OWUsIDB4Mzk2NGY5YzQsIDB4NWViNWU3ZWYsCi0JMHg2ZmMwYzVkNSwgMHgwNzgyOGQ1NSwgMHhjOGFhOWRkNiwgMHhjNmRjZjAzZiwgMHg5NTVmOGQ4MSwgMHg2YTJkMWYwMiwKLQkweGU0NTYzYzEyLCAweGYwMTQyZmMzLCAweGZhZTk0YWZiLCAweDJjMzRmYzBiLCAweGJmZGEwNWZjLCAweDQ0OGE5YThiLAotCTB4NmVkMTdlZjgsIDB4YmJlNDEzMDEsIDB4ZTk3NzRmYzIsIDB4ZjdjMzk2YjYsIDB4MDRlZmMwMjIsIDB4YmFkOWRiMzgsCi0JMHhkYmQzZTFjNiwgMHgwMTgwYTRhYiwgMHgyZjI3OTJmZSwgMHg3MDY2YzlhZSwgMHgwM2I1NTZhYiwgMHg3ODUxMTFkZSwKLQkweGFmMzg4YjY3LCAweGUzYWJjMjZlLCAweDFmNzgyYmJkLCAweGUzZGViODUyLCAweGI4ZDNmYzc0LCAweDIyMmYxOGYzLAotCTB4Zjk2ZTk0ZTEsIDB4NmUzNWRmMzcsIDB4ZDE5YTQ1NTUsIDB4NTdlM2QzNWYsIDB4MmFkZjQ1NWIsIDB4NjU4OGUyMTksCi0JMHhmMzhjNjQ4MiwgMHhmYmZjNjNiNiwgMHg3ZmZmZTg0NywgMHhmMDdmYWRiZSwgMHhkZDc0MjIyZiwgMHhkM2ZkN2RmYSwKLQkweGNmYjNlZjg4LCAweGU4MTUzYzdmLCAweDkxMzVlNGIyLCAweDVhNWQyOGQ4LCAweDgyMjQ1ZGViLCAweDA1NDEyNGZiLAotCTB4NDFiOGIwZTgsIDB4MjQwZTMwZDQsIDB4YmJhNzBhNDUsIDB4YzM1MWYxNjIsIDB4ODVkZGIxZjAsIDB4NGVmMTcwN2EsCi0JMHhmZDMyNzA2YiwgMHg5ZjJiZjE3ZSwgMHhkMzNkODNlNiwgMHhhMWZiNDBmYSwgMHgzYzAzODg2YywgMHg5MzFjYTAyZiwKLQkweGVjM2U0YjQwLCAweGQ4OTYyZDEzLCAweGJmMTk4ZGJlLCAweDg3YzU4NTExLCAweGNjNzZlY2NmLCAweGVhMTA3OTAyLAotCTB4YzVhOWI5ZDgsIDB4MzViMjk5YTEsIDB4NTU3ZTFlYzYsIDB4NjQxYzU5OTEsIDB4MTVhZjNiMzcsIDB4YmNjMDRlNzgsCi0JMHhmNjJmODAzMSwgMHg4ZjllOGVkYywgMHhlNjM5ZTY3MywgMHg5NDZlMmM5NywgMHg2YWZlNzA4MywgMHg1NjhlZGQ3MSwKLQkweDNlMmM5Yjg4LCAweGFkNzVjNTZhLCAweDhjMGJlZWFhLCAweDdmNmM5NmZiLCAweDZhZWY5ZDkxLCAweDcyZmUwZDE0LAotCTB4NGViNTNmMjcsIDB4YmZjMTU4OGMsIDB4MzhjNGE4NmEsIDB4OGM3ZmFkM2MsIDB4MGJmNzEwZjUsIDB4YjUxZmEzYmYsCi0JMHgyYmQzN2I2NCwgMHgyNWMyOGEwMSwgMHhjNmViM2YyZiwgMHhkYmNkNTg3MywgMHhkNmFmZThkYywgMHhhOGRjN2I3ZCwKLQkweDdhMWE1ZjkzLCAweDUzYTVmYjg4LCAweDk3ZGY4MDRlLCAweGNkM2QyZmM4LCAweDYyYjRlNGY5LCAweDdhZWJlZmYyLAotCTB4ZTE0YWJmYTAsIDB4NjM4ZjJjMmMsIDB4ZmZmOTQ3YjcsIDB4MDc3ZjJmYzUsIDB4M2IzM2Q1NzEsIDB4YzAxZGZmM2YsCi0JMHhmMzliZjRiZCwgMHhlMjhmYmJiZiwgMHg3YmI1ZWM5MywgMHgzZDU2MGY0MCwgMHg0MzhjMTdmZiwgMHg1NjQ5ZGZlOSwKLQkweDdiOWZhZmFlLCAweGFkNzhlMzE2LCAweGExN2FiMzdmLCAweDEzYTZkNmI3LCAweDZhYzcxMDM5LCAweDc0OGZmMWRkLAotCTB4MzY1NjUzYjAsIDB4NmJiYjQyNGQsIDB4MGM5MmFlZTUsIDB4ZDA0ZWM3MTIsIDB4NjBkZmUwNGIsIDB4NjY4OGUyMzcsCi0JMHgzODY4MWRiYSwgMHg5ZTcwMDM5MCwgMHg3NDg3NzRhNSwgMHgyMWJjNjhiZSwgMHgzOGUyYzk1NCwgMHhkNDMzOGYyYSwKLQkweDc2ZGI4ZmM3LCAweDRjMzQyYjhhLCAweDcwZmM2OWJmLCAweDRhYWY2NTI4LCAweDc4NWYxMWJhLCAweDlhZjNkMjk3LAotCTB4OWViMWQwNmUsIDB4NTM0MjkxYzcsIDB4NzBiZTM1YmUsIDB4ZTk0MWZlMTYsIDB4YzYzNTY3OTUsIDB4OTg2Y2JlMTcsCi0JMHg0MjRmOWZmZiwgMHg4NDhmNDM1YiwgMHgzNzQ4ODVmMSwgMHg4NWM3YTdmMCwgMHhkZjJkMTRkYiwgMHhmM2I5NzIwYSwKLQkweDAwZWI4YzA1LCAweDA5ZDMyNmZkLCAweDY1ZjhiZWI3LCAweDRmZDVjNDBlLCAweDYxNzdlZGNhLCAweDE1OTM1YmJlLAotCTB4MzcxN2Q3ZjcsIDB4YTllNTE1ZmQsIDB4NjhkYmQ3NzUsIDB4OWYxZTEyN2YsIDB4M2ZkMTI1NmQsIDB4YjllMzQ3MTYsCi0JMHg1ZDViNTVhYSwgMHhlOWMxMmUyYywgMHhkNTBiNzEwMCwgMHg3Yzc5Y2Y4ZCwgMHgxZWI1ZjE4MiwgMHhhZjE0NDhiNywKLQkweGM3ZWQ2MDU4LCAweDVjNTk0ZWYzLCAweDA3ZWI3MmE1LCAweDgzYzUzMTBhLCAweGViMWQ1MTg0LCAweGU5N2EyMjdlLAotCTB4MWUwMGYwNzgsIDB4ZTNjNmM2NDYsIDB4YTI4N2M3ZTIsIDB4ZGQxMzM4ZjEsIDB4ODcxMDllODAsIDB4NjhkYmM2OGIsCi0JMHg1ZGM0MzdiZCwgMHhlMzVmYzI4MiwgMHgzNzViNzdjNSwgMHhhYjVlMzhiMywgMHhlOTViY2M2YywgMHhjZjhiMTNhMCwKLQkweDViZDEzNmNkLCAweGViNTc2ZjlmLCAweGY4ZjM1NzU2LCAweDA2OWE3OGFlLCAweGNlY2Y3NjhiLCAweDI5NzMzYWY4LAotCTB4NmQ1ZjdlYmUsIDB4M2VkODdlMTUsIDB4YmNjMTNjZWIsIDB4N2MwMzUzZWYsIDB4YjFmMGQ5NTksIDB4ZmE4ZDc5MDIsCi0JMHhmN2NmYTZmYSwgMHhjZmNmYjcwYywgMHg1ZTYyMmYzYywgMHgwMWQwOWFlZSwgMHhmZDY2ZWZkNCwgMHg2MWNlMGNiMSwKLQkweDM3Zjc4MWM0LCAweDhkNjVkZTFjLCAweGIzMzhmZDZjLCAweGQyNzQxNWQzLCAweGRmZWNjZTdlLCAweGFjYmQ3YzhkLAotCTB4NDAyNTYzZmUsIDB4Zjc1NDNiZmIsIDB4NDlmY2MyYjIsIDB4N2ViMDQ3MjYsIDB4M2ZlMDYzMDQsIDB4N2NiZWQyZjMsCi0JMHhmZTY0N2YxNiwgMHhhZDljNzk4MCwgMHg4NTU2M2Y1YywgMHg1NTUzOGZlMywgMHg5YzYxODVmZiwgMHhjMjkwODEyNSwKLQkweDdkYmZhY2YyLCAweDM2OTJkM2JjLCAweGRkM2JmYTEzLCAweGIzYzgxMzJjLCAweGNiMTIxZDNjLCAweGFlNmJlZGUyLAotCTB4NWY3Y2NhYjUsIDB4YjljNTk2YjMsIDB4ZTc4YTNhZTksIDB4OWNlYzVjNWUsIDB4NjBhYTk4OGIsIDB4NmJhNTY0MWMsCi0JMHg1ZjM4NTFkNCwgMHhhOGE1ZDJiOSwgMHhhY2Q1MWZlMCwgMHgzNWJjZmI2MiwgMHgwMjY2ZjczZiwgMHg2ZTUyNmJiZCwKLQkweGFkNmQ3OGM1LCAweDM0OWViZjA5LCAweDdmOWMxMTRmLCAweDFmMmM0Y2YxLCAweGQ2NmFlYzBlLCAweGM1OWEyOTNiLAotCTB4NTc0YWZmMDAsIDB4ZTE0YTg2NTksIDB4ODFmYjRkNWMsIDB4ZjI0NGE4ZjMsIDB4ZDExYzM5ZTIsIDB4ZjMwNjVhNWQsCi0JMHg4ZjE2M2QxMSwgMHg0YzdjNGUzZCwgMHg1ZjEzOTY3NiwgMHg4ZjY0NWUwYywgMHhiOTBjZGNmMSwgMHg3ZTg1NGMzNCwKLQkweGE1ZDlmZGY0LCAweGQ4NDNlNmI2LCAweGUwMDRkMWU4LCAweGM3ZWY4OTJiLCAweGMxZTJkZDE3LCAweDBiZDViNzc5LAotCTB4YWE3MTYwNWUsIDB4M2E0ZjU1OWUsIDB4NzU4MDMzY2IsIDB4NzI2NzZkYTQsIDB4M2YwNmI5M2UsIDB4NWY1ZDFhMjQsCi0JMHg1MGI5ZmMxYywgMHhlODFmNmZiZiwgMHhhMjZlZDVhNSwgMHhhMzM5NTBhNSwgMHgzY2M1NTU1OCwgMHhkNDM0M2YzOCwKLQkweDlmMDFlNDI2LCAweGQ3YzdmMTdlLCAweGIwZjZiZjY4LCAweGEwMzUyMDQ4LCAweDE5ZTdhOWNkLCAweDY3MjAyOTY5LAotCTB4ZTYwOGYyMGUsIDB4NWYyYjAwOTMsIDB4YTcwMWQxZWUsIDB4YzA4NGNmMzksIDB4OTdlNzMxMmIsIDB4OGM0ZTg5MjcsCi0JMHgyNGRiOWM3ZiwgMHg5MjJiOWZhMiwgMHg4ZTNiN2VhYiwgMHgwODI0ZWRmOSwgMHg2NWY1ZjNmMCwgMHgxY2YzODcwOSwKLQkweGYwMjMxMTc1LCAweGUzMGJiZDdlLCAweDk4ZGYwYmYzLCAweDc0MDNmMjhiLCAweDhmNTdjNTg4LCAweGI5MWZhMzMyLAotCTB4ODdjZWVlYzEsIDB4NzY4ZDlkZmQsIDB4NDkyODE2ZjcsIDB4YmM4NjZiNDAsIDB4ZGZiYzc5ZTYsIDB4NzNjNmU1OWUsCi0JMHgwMzBjNTQ0OCwgMHhlN2NlN2Y2MCwgMHg4MmY5ZmFmMiwgMHhhZjk4YzNkMiwgMHg3YTgwNWJlMCwgMHhmMTk2NjMzZSwKLQkweGJlZDk5MjljLCAweDFmYjUwODk3LCAweDBhMGQ3ZDYxLCAweGIzODkwOGRlLCAweDE5YjhkZmFmLCAweGRlY2FlZWUxLAotCTB4YjBlOGYxZDcsIDB4MzkwOWJkNTEsIDB4MDRlMjRlNDIsIDB4OTdkNjI2M2MsIDB4NjViN2UwNWQsIDB4MGRjNzZmZTAsCi0JMHhiNWY4ZWVmZiwgMHg2YmYxMWE2NiwgMHg3NWY4OGQ1NywgMHhjZmUzMzIwYywgMHhkNzk3NWY4OCwgMHhlNmNhMmY4OCwKLQkweDZmYzM2ZmMxLCAweGI5ZTMyOGYyLCAweDdlMTU3ZmFmLCAweDFkYjhkOTg3LCAweGZmNGFmMWM5LCAweDRjZTk2ZGNhLAotCTB4NTlkYzAzNjUsIDB4YzJlNTA0NTIsIDB4Y2VkOTQ3MmMsIDB4ZWVmZjAwODgsIDB4ODU1YzE2OTMsIDB4ZTg1ZDc5NWYsCi0JMHhmOWYyNjRhZiwgMHg3N2Q4ZjMwOCwgMHgxMTIzOTAwZSwgMHgxY2EyZjVlMCwgMHhkMDBiYzljMSwgMHhhMWYyMGVmMywKLQkweDIxNjllODA3LCAweDU3Y2I5MjlmLCAweDhhZTdhNjI3LCAweDllM2YwNzY5LCAweDA0ZGFiZjQzLCAweGYyMGQ3YmZjLAotCTB4OTU1ZjNiMDMsIDB4YjkzNTgyNGEsIDB4MGY1ZWE3MjAsIDB4YmYyMWRmYWMsIDB4ODY0ZjNiY2QsIDB4M2JjNGY2NzMsCi0JMHhhZjljMDA2ZiwgMHg2OGY5NjBmNywgMHg2ZGJmN2IwMSwgMHgxYTczYzEzMCwgMHg3NDg1YzhhMSwgMHhmMzU1NGZkMCwKLQkweGJmZTgzOTQ5LCAweGE5ZjY5NTQ3LCAweDZjYmVmN2UwLCAweDFiYmRmMTY3LCAweGQzZWEwYWVjLCAweGFlMTZlZGE3LAotCTB4NzFiZTI3NTcsIDB4YjZjNzk1MmQsIDB4ZjljMmFjYjAsIDB4MzZmMGI2YzAsIDB4MzdhODAwZGIsIDB4YmQ2ZTc4OGEsCi0JMHg0YWY2YTUyYSwgMHgyYzM1YmYxOCwgMHhkOWU2YjgzMywgMHhiZmMwMDM4MiwgMHgzZDcxOTI2ZiwgMHgwZTM3OWQ2OCwKLQkweGVkNDRjMWNmLCAweDRmZGIzMGI3LCAweGVhN2YwYjZjLCAweGNmYTMxYjllLCAweGI4OWYxYjViLCAweDFiMGZlMjEyLAotCTB4MzFmN2YxMmQsIDB4ZGYyY2Q4NTcsIDB4YWU4ZDdmY2IsIDB4ZjI5ZDBkYmYsIDB4NThkODU2MmUsIDB4ZmRhM2M3NWUsCi0JMHg0ZDk2M2NlOCwgMHg2MWQ3YzczYiwgMHgzOTYzMGYyNiwgMHhiODJlMGY5ZCwgMHgyYmJmZTcwMSwgMHgzYTdjZmQ0YywKLQkweDhlZjE1MjhmLCAweDc5ZDA4NzFiLCAweGM0OGJmZThlLCAweDI2ZDEyYmY0LCAweDQ3Njc0ZWNmLCAweDFhZmRlMDgwLAotCTB4NWZhODJmZDAsIDB4MGUyY2ZmNmIsIDB4NDRhMGI4ODcsIDB4ZjBjNDVjZTAsIDB4NmZlODA1ZWEsIDB4N2NhNmU2YmQsCi0JMHg1MGEyZjk0ZSwgMHhiZTAzMGQwYiwgMHhjMTRlMTg5ZCwgMHgzZWFhMGE3YiwgMHg4ZmQ3NjgyNCwgMHhmYzBjOTY2OCwKLQkweGQ1ZDdjODU5LCAweDlmMTYxNmMyLCAweGQ4ZDQ3OTFmLCAweDMyNDViYTNlLCAweDhjNDE0MWQ5LCAweDY5M2Q4ZjFmLAotCTB4ZjNhYjVlN2MsIDB4MDNhNDliYjksIDB4MjRiZmFmOWYsIDB4ZDUxNzkwMGEsIDB4MGZiYzRlZDYsIDB4ZTZkYmI4NTAsCi0JMHhkYTM4NDJmNSwgMHgyYjI5YzAyZSwgMHhjYjEyNWU1YSwgMHg5YmY3YWRlMiwgMHg2YjBmMmM2ZCwgMHg5ZDcwNDJhMywKLQkweDg5YzBiOGQ5LCAweDE3ZmIwOGZiLCAweGViM2NjNjJjLCAweGViZTY3ZWFmLCAweDVlZGNlZjFiLCAweDY2NGE3ZThjLAotCTB4MzI1YWY1ZmIsIDB4YmRmYzA1MTksIDB4YWY3ODYwNWEsIDB4YjdkZDhhY2QsIDB4OWY5ZDRiZDIsIDB4ZjlkNmZlNzUsCi0JMHg5MjQxNmIzYSwgMHhjYmRlNWUyZiwgMHg3YmIzM2I2MCwgMHgxMjBjMTc4YSwgMHhmNmQ3ZjAxNCwgMHhhOWZjNzgwYSwKLQkweDIxOWYwMWY1LCAweDA2NWNkYjdmLCAweDAwZDkwM2M4LCAweDc5ZTM1NTRmLCAweGUxNmRiYmI0LCAweGZiNTQ3OWY4LAotCTB4MGZlNjZlNmQsIDB4MDU1ODEwM2UsIDB4YTUzZjFlNzksIDB4MzI3YTA5YzIsIDB4ZDFlYmJmNzEsIDB4YTA4M2FhZGYsCi0JMHhhYjY3N2MyYSwgMHhhNmU3OGQ5ZCwgMHgxNmM4ZGJlNiwgMHhiNTRhZDM4OCwgMHg4MGJiMzc1OSwgMHg1ZmFlNGJmZiwKLQkweGIyN2RlMTQzLCAweGViZWI4MmRjLCAweGYwOGJkOTQ2LCAweGMxMDkyYTA3LCAweGE3M2YwM2Y4LCAweGQ5MmE3YmQ1LAotCTB4ZWM3ZTdiMWMsIDB4YThlOGFkODgsIDB4YThmN2NlOGQsIDB4ZWVmMzgzY2QsIDB4MDAwYWYzZTEsIDB4ZmZlYmY3YmYsCi0JMHhhNmJiMDZlMywgMHhlOTE1YTJlZCwgMHg0M2ZiOGJkOCwgMHg2ZGU3NzdmYSwgMHhkODBmNGYwYywgMHg3YmUwNzdiNSwKLQkweDcyODY5MTUyLCAweGJkYjlmNWUyLCAweDM5YzE4NmYzLCAweDE4Zjc4YTU1LCAweDVmYTBlYTM5LCAweGVhOTFlNzAwLAotCTB4YzI4ZTNhYTMsIDB4MjBiNGVhOTMsIDB4NTM0ZDEyNWYsIDB4MDMxZTdhM2QsIDB4YzhjNWVmZTEsIDB4MDQwODg5MDUsCi0JMHhiZDc0MWNmMiwgMHg4ODg1ODQyYSwgMHg3MGMxY2E4YiwgMHg3ZTAyMzM5YiwgMHg5ZDA1NmE0NywgMHg0ZWMxMDUzNywKLQkweDY2YmZhYzZjLCAweDFjZjQ0Y2U5LCAweDUyNTFlNjFjLCAweGU0ODQyY2JlLCAweDEyNzk4Mjc5LCAweGZkMDVhODkwLAotCTB4ZDc1NmZhZWIsIDB4MDg1M2FiZDMsIDB4YzdlYWNiY2EsIDB4ZWQwZDYwYTQsIDB4NjJkNDkzNjcsIDB4YWU0YWY4ODcsCi0JMHg1NmMzMTZhNiwgMHhlMmE0YWE3NCwgMHgxNTNlYmNmOSwgMHgxYzczZjMwNCwgMHg0NGE1NGY3OSwgMHhmNDJhMTZlZCwKLQkweGVmMTFiZjQzLCAweDFmZTcxNzhlLCAweGU1ZjFkNzZhLCAweDJiZTAyN2ZiLCAweDdlZmI3MGZmLCAweDc2YmM2ZjMwLAotCTB4NzVmNzllMzYsIDB4NTFlOWRhMWIsIDB4YjFlZGMxZmQsIDB4OGVmZWJlNTIsIDB4MmJlZDhjZmUsIDB4MjRiNWM4OTMsCi0JMHhkNjZmOGUzNiwgMHgzMjdkYmExZiwgMHgwM2NiN2M3YSwgMHg2ZmVlZjgwZSwgMHhhZGRhNGUwYywgMHhlMDhkZGYwNiwKLQkweDEzZWE4ZGYzLCAweDBjOGU2ZWJlLCAweGJmNDI3ZDUzLCAweDNiMGYwODJmLCAweDgyZWVmMTAwLCAweDc3MWM5OTBmLAotCTB4MDM4NzI3ZDIsIDB4ZmJlZmUwMjIsIDB4NWYzMzExZWEsIDB4Yjk1MDhkMGMsIDB4NTU4M2VkZTQsIDB4ODllY2JmMzgsCi0JMHhhZmJkYTFkNiwgMHhkMjc3YThkZCwgMHg0MGNmMGRhNiwgMHg5YmYzOTczYiwgMHg3Y2JhY2YxOSwgMHhlMGJlZTU5YiwKLQkweDJiMDFlZjVlLCAweDYwOTEwYjgzLCAweDFkMDg4NzFlLCAweGEwNzlhODcwLCAweDYwODg4ZTk3LCAweDUxMTViN2VmLAotCTB4MGViODUwM2MsIDB4Yjk0YmY5NzIsIDB4ZTYxZWJjMTAsIDB4OWQ3YzNlYmYsIDB4N2JlNGU0MWQsIDB4ZmExMTI3YWYsCi0JMHhmMjdjNGM3NSwgMHhkZTM3ZDE3MSwgMHhkY2Y4ZjJjZSwgMHhmYjY1ODc4MCwgMHgyNGY1ZjAyZSwgMHhjYThlZjQ4MiwKLQkweGQ4OTM5NTAxLCAweGZmY2U4OTc4LCAweGU1ZDc3ZTY2LCAweDNhMGUwNmEzLCAweDBiZjllMWU3LCAweDI4YWNlYjAyLAotCTB4YmRmMGYwODQsIDB4MDBmMjZjOTUsIDB4YmI3Yjc1NWUsIDB4MjRiN2RiODYsIDB4ZGZmNjg1OTAsIDB4ZWJlMTBmNGEsCi0JMHhmODEwNGU1MSwgMHhlZGQ2NDZhNCwgMHgzNjJkYWY3NSwgMHg1NWQyYjUzZSwgMHhmYjZkZjE5YywgMHhhOTE3NTUzNSwKLQkweDg3OTMxNjdmLCAweGEzYjUyNTVkLCAweDUxNzU1NmZmLCAweDFiZGZlN2MxLCAweDQ1MGE2MTdmLCAweGYzN2YwMWJhLAotCTB4ZTMzYjNkZWQsIDB4NTdjODNjNmYsIDB4ZTYyZmZmY2YsIDB4YmYzY2NhYjcsIDB4ZmNjNzZhYjUsIDB4NmJkZjEyYzYsCi0JMHgxNDdmNTQyZCwgMHhlMzU3NThhZSwgMHg3NzkzZjE1MCwgMHhlYjNiMGIzMywgMHg2NTdjZmQwNSwgMHg5NjYwM2QyMiwKLQkweDZiNGI5MWY3LCAweGI0OTg2MDBmLCAweDcyYWY3OTBiLCAweDMyMTJmYzcwLCAweDk4ZDlmNDFkLCAweDcyNWJiNTA4LAotCTB4MDVmZmNiM2IsIDB4MDcyYWJmM2UsIDB4YWRkYjdiYzMsIDB4OWU0MTAzZWQsIDB4ZGZiZTg4NTYsIDB4MTZhODExZDksCi0JMHg4YWVjMDU4YiwgMHgxZWVkMDRkZCwgMHg2ZTYzYmVlZiwgMHgxZWU2Zjc5NCwgMHhiM2E3ZjU4NiwgMHhmNjYwMTA1ZCwKLQkweGY0NDc1ZjI2LCAweDQ4ZDBhN2I4LCAweDczOGU4MGU1LCAweDBlN2JlZWM0LCAweDMwZjFhZmZhLCAweDM0MGUxNGJmLAotCTB4NjIzYTdlODEsIDB4NWUwM2Q1ZjMsIDB4MjRjNjE0MWQsIDB4MjgzMjRmMzgsIDB4MjhlMmNiOTIsIDB4MjVkYzgzMTEsCi0JMHg0OTg3MzM5MiwgMHhkZTc0NDI4ZSwgMHhlODA1YWViMCwgMHg0ODQwMzZiYSwgMHg3YjAyY2YwYywgMHhkNTAyMjMwYSwKLQkweGY0Yjc2MDJlLCAweGIwNmMyNDJlLCAweDA2ZjMwNDY1LCAweDdiYjNlNzdiLCAweGIwMTc3YTAwLCAweGI0ZGVjNzdiLAotCTB4NWJjOTM4YjMsIDB4Y2JkMTFkN2MsIDB4MDNmMmI2MjMsIDB4OTEyY2JmMDAsIDB4ZmJlMGI1ODAsIDB4NDJhMDBkYzMsCi0JMHg1ZDg4ZjE3YywgMHhiMjc4MDdkYiwgMHg4ZjM4Njk5NSwgMHgwYWYxMGY2YywgMHg1MmQ5OGU5NCwgMHhhZDdkODA0OCwKLQkweGMwYWFhNWQ0LCAweGFkODQ4YWUyLCAweGZlZDI1MDQzLCAweDQ1YWIyN2IyLCAweGZlZWNmNzQwLCAweDY1MDljZjA0LAotCTB4NDcxM2ZkODMsIDB4ZTVkOThlNmUsIDB4NmIwNzE2MWYsIDB4MWY4NzY0ZWMsIDB4NDg3MTcyZTMsIDB4MzFlZGYzYTEsCi0JMHg0NzNmZTU5OSwgMHg3YzE0MzllMywgMHhlYmFiNmZjMCwgMHhlYjZjOWM1NiwgMHgyMjVmMmM5NywgMHg2Y2YwYzI5MCwKLQkweDYwODBjYmY2LCAweGQ3ODkyZjMwLCAweDY0ODg1NDFmLCAweDI5YmY0NTRmLCAweGIwMTk3YzAwLCAweDcyNmZkMGQ4LAotCTB4ZWYwODZmMTAsIDB4YzdlYTQ5NDksIDB4YmMxMTQ1ZWUsIDB4MmJmZWEwZWIsIDB4ZjcwNmRkYTksIDB4YTBmMmU4MjUsCi0JMHhlM2EzZjlmMywgMHhmNDRhZjY2ZSwgMHg3M2Y4Zjc1NSwgMHg1MmQzZTBmOSwgMHhlMDI3ZmY3ZSwgMHhiOWRjNzViOSwKLQkweDI2NzFhYjgxLCAweGVmOGMzOWVkLCAweDY3OTBkMTM0LCAweDUxYWZkM2E5LCAweDBlY2ZkMDM2LCAweGZkNTg5MmYxLAotCTB4ODEwNjUyZWQsIDB4MjQyYWRlM2QsIDB4NmE1ZmMxNzksIDB4NzgzMDI0NWQsIDB4NDNjZjFiMDUsIDB4Y2NmMzBjOTUsCi0JMHhhMzNmMzA3NCwgMHhmZWM1ZWI4ZCwgMHgwZjM4Yjk0OSwgMHhmM2EwOWQ3ZCwgMHg1ZDcxODc1YiwgMHhlN2EyM2NkMywKLQkweDhjZTc0YzhlLCAweDMyOTBlN2NjLCAweDlkZjFhMmYzLCAweDJiMDdjYzJjLCAweDE4NGVlMDU3LCAweDQwZWMyZTcyLAotCTB4ZGRjYWFjZmIsIDB4OWNlMjQzOWUsIDB4YjE2OGM5OTMsIDB4YTYwNzNkYzcsIDB4ZmQ2ZjE0OTcsIDB4NWU0MjdhOTIsCi0JMHhlODBhNzU2MSwgMHg5OTNiOGNkOSwgMHhhM2UzMzA3ZSwgMHgzZDBjMDg0ZCwgMHg3ZjYzZmIwNCwgMHhhM2VlZTM5MCwKLQkweGU2NjY2NWViLCAweGU4ZjMyOThkLCAweGQ3NTk5OWZiLCAweGRmM2ZhOTYzLCAweGM2ZTI5NGUwLCAweDA5MjVjNzBiLAotCTB4MGM4ZmNjM2YsIDB4MThkZjNjYjIsIDB4ZjMwNzFkZmUsIDB4ZTc3YmViMzksIDB4YmZjNTBkM2QsIDB4MWJlOWUzMWQsCi0JMHgzN2RlMTg5MiwgMHg2ZmJjMzEyNCwgMHhhYTdjNzQ1MCwgMHgxZDdmMjBjOSwgMHg1ZjIxYWY3NSwgMHg5NmRmYmQ2MiwKLQkweDUwOWU0MTIyLCAweDczZTUwYjIwLCAweGJiZDE4N2JlLCAweGVkMGQ3ZGUzLCAweGJiNDQ5ZTk2LCAweDEyNTAzNmZlLAotCTB4MGRiMjY1ZWIsIDB4N2RjNTllZjksIDB4ZGZlMGJjZjQsIDB4OTk0YjlmZjgsIDB4ZGJhN2VkNDgsIDB4OGQ1MDVmMzgsCi0JMHhjMjliZThjMCwgMHg3ZWIwYmVlMCwgMHg0ZTliOGUxMiwgMHgxNDgxZGEyZCwgMHgyZGNhMGJjZiwgMHg5ZDA3ODg1ZSwKLQkweDFiYmVmMzlkLCAweGM5Y2RjODhlLCAweDc4MjQyZTZlLCAweDBkN2FiNWY0LCAweDE1N2Y3M2Y4LCAweGQxMjViNzdkLAotCTB4NTAzNmQyN2UsIDB4ZjE4M2Q1NDUsIDB4YTUyNWM4MDUsIDB4OGZiOGY1ZDMsIDB4MzcxMmRiMzksIDB4YzQ5N2NmZWYsCi0JMHg5MjU3NzZmYywgMHhjY2M4ZTEwNywgMHhlYTc0OGE5YywgMHgwMTRlNGZhOCwgMHhhN2NjYzM3ZiwgMHhlNmIzNWU1NCwKLQkweGI3MzhlZjBkLCAweDExNjZmOTQ2LCAweDZmMmNkOWUwLCAweDE0NjkzMjZkLCAweDIwOGFkZDcwLCAweDc2NzRkMmJlLAotCTB4OTc1YjdhZTYsIDB4NDM5MDM0OTcsIDB4YTcyYThmZDgsIDB4NzNhNzU0N2EsIDB4M2E2YWZlM2YsIDB4NGZmMTNiYzYsCi0JMHgxZmZlZmYwOCwgMHhjN2I4NDdlMCwgMHhkNDVlYTMxNywgMHg2MjBjODhlNSwgMHg3YTBlZGU3YSwgMHhkOWNlMjYzNywKLQkweDNlZDdmNGQ2LCAweGQxZjg5ZmIwLCAweDYwYmJjZmNmLCAweDUyZWZlOTNmLCAweGVjZjQwYmJiLCAweGVjZmZmYmM5LAotCTB4OGY4NjNjODIsIDB4OGVmMTY3ZWUsIDB4ZDdmZTRjYmIsIDB4ZmY0YzQ5MjMsIDB4NWU1NDk0N2YsIDB4ZGJiYWYzMDMsCi0JMHgyZmExNzVmZiwgMHhiZGM5NWY4NiwgMHg1MTY0NWY2YywgMHg2ZjlkMzQ1MCwgMHhhZTM3OWUzNCwgMHgxN2NmOTkwYywKLQkweDk1ZGYxMDA3LCAweGZkNzhmYzUyLCAweGU3MTYyNGZlLCAweDU5YmY1NDU5LCAweDdjNjE1NmM5LCAweGFlODFhZmRmLAotCTB4Nzk3ZmI5MjcsIDB4MDNkZDgxYjIsIDB4YTczM2MzYTIsIDB4M2UwMmE4N2UsIDB4NTZjM2RmZDcsIDB4MmNkZWFmYmUsCi0JMHg5YjQzZjViMywgMHgzZTYyZmIwYywgMHg5YzMzMzc4ZSwgMHhhNGZkZjg4NywgMHhhMjJkN2ZmMywgMHg4ZTliMzNkZiwKLQkweGMzZDUyZjc1LCAweGYzY2IzMGJlLCAweGZlNjNjZjM1LCAweDljMjk2YTQ3LCAweDkwZmY5ZmU3LCAweGJjMzRmZTgwLAotCTB4Y2Y1ZDNmN2YsIDB4YzVhZWY3N2MsIDB4M2NmMzMzZmQsIDB4YTA4ZmRmM2IsIDB4OTBiNWRmYTEsIDB4Y2U3Y2RiZDMsCi0JMHhlZDk4NjE2YSwgMHgzZTIzY2Y2ZiwgMHhmOTRlY2Y5NCwgMHgwZjk2NjExOCwgMHg5ZTIzOGU2ZCwgMHgwMGU3OWMzYiwKLQkweGYxMjYzNDNjLCAweDMyNDJhYjdkLCAweDc2MmVmMjEyLCAweGZjOTdlZTFlLCAweDY3NWVmOTZkLCAweGQzZjJiOWY4LAotCTB4YTRmNDRmM2MsIDB4OTM1OTYwOWYsIDB4ZGJmM2IyYTQsIDB4ODE0YmI3ZTEsIDB4ZWUzNTk2YmYsIDB4YmU2NTdiYzAsCi0JMHgwY2FhM2VhYiwgMHg4NGZmNzI5ZiwgMHg2YTI1ZTg3NCwgMHhlODExZmU1ZiwgMHhjMTgyN2M0OCwgMHhmOWI2NWNlZSwKLQkweDY1ZmNjMmJjLCAweGY4M2I5Zjg2LCAweDFmMDAzYmYzLCAweGVlY2VjZmI4LCAweGE5NjNiOTBmLCAweGRlZjYyMTdjLAotCTB4OGM5MmY3OTksIDB4YTI2N2ViZmIsIDB4M2NkOWU0ZTcsIDB4OTNiZWY5MmEsIDB4NWYzMzNmM2UsIDB4OWIzZTcwZDcsCi0JMHg5YWRhNzViNywgMHgzNWNhNzQ1ZSwgMHhmODcyMjc0ZCwgMHhmYmNjMDc3OSwgMHgyMTY2ZjlkNiwgMHg4YWNkMmYyOSwKLQkweGJkM2ExZmMzLCAweGZlMTA3Y2EyLCAweGQzYWJjMjI1LCAweDZjZWQ1ZTY5LCAweDI2NDBhZjNlLCAweDg0Y2JmN2RmLAotCTB4MmY5OTkyYjgsIDB4ZDc2ZjNhYmEsIDB4ODBlNGI3MmEsIDB4ZGVlOTlhYmMsIDB4ZmIzY2UwOWEsIDB4M2VkODkzZGYsCi0JMHgyYjU1M2NlZCwgMHg5ZjM4YmQwNSwgMHhjNGYxYWY5NCwgMHhhNTI3MmJkOCwgMHg4MWY3NDNkYSwgMHg3YzY1NmQxYywKLQkweGUwNmJkNTFjLCAweDdlYmU4MmJjLCAweDdjZjVjNjRiLCAweDgwY2Q0YmI5LCAweDFlOTA5MTdiLCAweDg3NjE1ZTcwLAotCTB4ZTllZjAwMzUsIDB4NmJmNzFjZTMsIDB4ZjAxOTdmNWEsIDB4NjllNTg2NWQsIDB4N2ZkNmI5N2YsIDB4ODJmYjQ3NDAsCi0JMHgxMGRkZTc4ZCwgMHg0NDFiNmRjNywgMHhlYWQzYmUzMCwgMHg3MWViYzIzMiwgMHhjNzhmMDg4OCwgMHhhNWJiZDZjMSwKLQkweDFmMzdmMzUyLCAweGRhZGEwZTgwLCAweGM3MTFmOThjLCAweGQwZjhmMTJmLCAweGJjNTk2YjI1LCAweDEwZWQ1ZTc5LAotCTB4ZGQwNWY3MGMsIDB4Zjc0YWU1YzUsIDB4ZjRlNmVlM2YsIDB4ZjZjYzJiYmIsIDB4OWE2Y2U3YmQsIDB4ZGYzMGY0ODYsCi0JMHhmYjg0NzI2NywgMHgwNDFiYjMyZCwgMHhmYTY2MjNkNCwgMHg3NzVlZjdjYywgMHhkY2VkZjQwYSwgMHhkZjdlMTE2MCwKLQkweDExZTQ1ZTg5LCAweDZlOTliYmE0LCAweDc2MWUxZGViLCAweGFkNTQ4ZGJmLCAweGM3M2Y3ZGMwLCAweDRmYjgwOTM3LAotCTB4ZGU4MTI0YjgsIDB4OGYwNzc3ZmIsIDB4M2U3Mzc3NjcsIDB4ODIyNDc5ZTYsIDB4NTVkNmUxN2YsIDB4OTgxMTdhNmIsCi0JMHhmODA1NTBmZiwgMHgzZWJmMGNkYywgMHg2MzQ0ZjlmZiwgMHgzN2NmODc3YSwgMHhjYjQ4YmNkMSwgMHg4MjlmMmNiNSwKLQkweGMyOGJlM2FmLCAweDY1YTk3ZWVjLCAweGFmMmM4ODhmLCAweDc0OGJjNzkzLCAweGNkNzg3NWY4LCAweDk3MTUyOGYzLAotCTB4ZGI2ZjNlNjIsIDB4MDlmMzExMDYsIDB4ZDcwNDBhZWYsIDB4NzdjYmJkYzAsIDB4M2Q3MDE2YWQsIDB4NWQyNzQ0NGQsCi0JMHgzMmZiZTg0ZiwgMHg2MzY3MWFjYiwgMHhmNjhmOTU3ZSwgMHhkYjY5NzYwMywgMHhkOTE3MDQ4NywgMHhkZTAyNzViNiwKLQkweDllOTA5MzdmLCAweDk0NTc5NjYxLCAweDMwODQ5ZTg4LCAweDc0YTNjZGJhLCAweDdlNmUzODdiLCAweDNmZDY5MTVjLAotCTB4NzgyNzNmNzYsIDB4NzYzZmQ2YmQsIDB4MzA4NDg5N2YsIDB4ZGQ0OTY0YWYsIDB4NGFmM2MzMzQsIDB4Nzc0ZjUxODcsCi0JMHgzYWE0N2YyNSwgMHgyZTljZGU3ZSwgMHhlOWZjYmE2ZiwgMHg5YzFlYjhmMiwgMHhhNTFmYjA3MywgMHg1Y2VjYTFlMCwKLQkweGU4NjNjZmMwLCAweGZiZmQ1MGFmLCAweGZmOGIwNzczLCAweDdkMWI3YTNjLCAweGYzYzZkOTY1LCAweGY5ODRmZDg2LAotCTB4ZTZiZDE4YTMsIDB4NzlmMTkzOGIsIDB4ZTI4Mzc1YTIsIDB4ZDc4N2EwYzEsIDB4Zjg3YThjM2EsIDB4OWY0N2NlODcsCi0JMHhmYTI3MmU4NywgMHg2MjcyY2NmYywgMHgwZjRjZGVmZSwgMHhhNjY3MGUzZCwgMHgwMDFlOTk4YiwgMHg0NzBkZjgyNywKLQkweDA3YzExYzlhLCAweDA0NDc5YzI4LCAweGM5YTA3NzA2LCAweDY2Yjc3MDhlLCAweGZlNzA2ODk2LCAweGVkZDY1OTY2LAotCTB4MGY4MTFlNTgsIDB4NTdiZDgzNDcsIDB4ZWQwMzhjZmUsIDB4Nzk1N2VlNTYsIDB4NDUwM2U3ZTMsIDB4Zjc2ZTI1ZWQsCi0JMHg0MTk2MTk4OCwgMHg5MzExMWUzMCwgMHgyZWM3OTBiYywgMHg3N2FhNWI2NiwgMHg3ZDhhNzlkMiwgMHhkMjE4Mzk2OSwKLQkweDljMjJiZDk5LCAweDk5MmRhZWU3LCAweDE0M2RjMjIwLCAweDc3YmNmYzM1LCAweDM3OWQ4NThkLCAweGMzZGJmYmQzLAotCTB4ZWQ5N2EwZjEsIDB4ODA0NmYyOGUsIDB4OWE5ZmVjZTcsIDB4ZmUyYzFkMGIsIDB4Y2UwYWZlOGMsIDB4MTQzZGVlMTMsCi0JMHg3NjBkYmZhOCwgMHhmMzA0ZWJmMCwgMHhjOGQyMGI2OSwgMHg4M2I3YTAwMSwgMHhlZTQwYTM2OCwgMHg3MmE0NzQzZiwKLQkweGZmZWQ5YzNiLCAweDI4NmNiZmQxLCAweGNiY2I1NmJkLCAweDNmOTA5N2FhLCAweDQ5YjNlMmZjLCAweDM3YjI1ZjcwLAotCTB4OTcyMmIyZDksIDB4MzhlMmZmZDYsIDB4YjllZTA5M2QsIDB4Y2U1YjY2ZjMsIDB4ZmRhODdhZTcsIDB4ZDU5Y2Y4ZWQsCi0JMHhlZjljYjZhZiwgMHg3MzdmZWI0NywgMHhkODc1NjE5YywgMHhmODdiODJhOCwgMHgwNTI3NjcxYywgMHgxZTM4YzMwNiwKLQkweGI1ZWFlN2E2LCAweDI0M2U0MWFiLCAweGE1OTdmMzBiLCAweGMzYzYwYWZkLCAweGQ1ZmRmZGY1LCAweDE3ZTBlNjk0LAotCTB4NzlmOWM4N2YsIDB4MTdlMmFhY2QsIDB4MmM2NzEwMWMsIDB4NmZkODU0ZDYsIDB4NzFiZTBhZGUsIDB4ZWE1ZmVmY2YsCi0JMHgxNjFkMTU3OCwgMHg0YTAzNjdiYywgMHgxY2E3ZmZjMCwgMHg0ODVkM2E5ZiwgMHhlNDM1NzY4MywgMHg3NjkwOTIzZCwKLQkweGI0ODNlYzM1LCAweDFkYzc3YzNiLCAweDkxZDg3ZGI0LCAweDU3MjAwOWU2LCAweDVmYmNlZjBkLCAweGY2OGRmNzg4LAotCTB4YTMwY2ZkNjUsIDB4ZjNhNmUyMGMsIDB4OWY2YWZiMzksIDB4OGFmYmIxY2QsIDB4Y2ZhMjhlZWQsIDB4MGM5NDNlODEsCi0JMHhhYTA4NDc2OCwgMHhlZDQxZGM4NywgMHhhODhkMWE4NiwgMHgzMWY4MWU0YSwgMHg4MWJkYmI0NiwgMHg0OWQ3ZDlmMywKLQkweGNmOTFlN2U1LCAweDlmNTA0NzdhLCAweDdkZjBlNTNjLCAweGZkOWJlMzA1LCAweGRhOWNkMjExLCAweGYyNTNmZTJkLAotCTB4N2FmOGM1ZWYsIDB4ZDFlMzc2NmEsIDB4ZmY5ZjIwMzksIDB4MGFmZGNlYzUsIDB4N2FmOTg2OWEsIDB4OWVmN2EzZGIsCi0JMHgxZGY3ZjQxMCwgMHg3MTBiYzkyNCwgMHg5OTI1ZTIzNiwgMHhiNzFlNzQ4MSwgMHg0YWJlMzBiMCwgMHg0YmYxOGMyYiwKLQkweGY3ZTg3Y2Y4LCAweDk1MWVlMTEzLCAweDFmYjYwZTkxLCAweDgyMjdlNzRjLCAweGE4OTQzNjlmLCAweGY4ODMwZTU4LAotCTB4OWFiMDFlNDMsIDB4NDg3YmViMGYsIDB4YjQ3ZGU4ZTgsIDB4Y2NlZGM3ZmYsIDB4MTFkNWI3ZWYsIDB4ODQ2NzVjNDMsCi0JMHg3NzA3ZDk5MywgMHgyNzVjNThiOSwgMHgwY2RkMGU0OSwgMHgwYmU5M2RmYSwgMHhkZWZkMDFlMiwgMHhlMTIyOTRmNiwKLQkweGI5ZTRhNjdlLCAweDBlMzlmNzExLCAweGY4MmUzMDU5LCAweDQwZjQxY2FjLCAweDRhZmRiZDdjLCAweDNhNDJkZDQ5LAotCTB4NzRlMzZiZmEsIDB4NWM3ZGZiZDcsIDB4Nzg4NGFmNTEsIDB4YjMxNzVjY2EsIDB4MjIyZDllMjcsIDB4N2VkYWY3OTgsCi0JMHhmZWMyMDk0YSwgMHhhZGI2NmE1NywgMHhjZjRmZDYzYSwgMHg0ZmFkZGZlNywgMHhhNGU0MWUyZSwgMHg4OTI5YTg2NSwKLQkweGY3MjNmOGMwLCAweGQyOTI4MzUyLCAweDAyZmE4NWUzLCAweDc2YzVmMDNiLCAweDQzYzUxMWMwLCAweDBmNzNkNWFhLAotCTB4OWU3YTk3ZjQsIDB4Y2Y4YjliYzIsIDB4YTRhZmM0MzUsIDB4ZjhhNjRkMGUsIDB4NTM4MzczMWQsIDB4OWUyOTdiODUsCi0JMHhjMDZlODdiNSwgMHgyZDE3YmYzYywgMHg3NmQzZmY3OCwgMHhlYTBkM2JjNSwgMHgxZWE5Y2ZkYiwgMHg5YjNkMDc4OCwKLQkweGY5YzI0YTFiLCAweGY5YzE2OGJjLCAweGJmNmE0ZjZjLCAweGZiODUzOTZhLCAweDhlMmM0MWUxLCAweDY0ODgzOTIwLAotCTB4MmE3OTA1NGIsIDB4Y2ZhMWVmNTYsIDB4N2Q5OTNiYzcsIDB4ZTRjMmRhYmIsIDB4NjJhOWRhYTksIDB4OGU4MTcxZmQsCi0JMHgxNWVmMDA1ZiwgMHhmOWU5MWNhMSwgMHhlY2VkNmQxNywgMHg1YmNmNDcxYywgMHhlN2UwNDU5YSwgMHgzZmJhNjlhNCwKLQkweDBmYzExMTFmLCAweDcwNGU1NzFmLCAweDk0ZTcxZDVkLCAweGFkM2EyYTgzLCAweDIxNzY3MzlhLCAweGQ2Y2VmZmRjLAotCTB4MmUxZjA5OGQsIDB4MjlmMmNjOWQsIDB4ZWZjMmVmYmQsIDB4ZjI3MDFjMjEsIDB4YmVmODM2ZmIsIDB4NGY5Y2I1ZDAsCi0JMHhkMTE2OTNjNiwgMHg1ZmM3ZGI0NiwgMHgyZTQ4ZGUyNCwgMHg4YzZhZjdkYywgMHg1YTYzM2VkZiwgMHhmZWYxMjdlNywKLQkweDQ0Y2Y3NmI1LCAweDhjNDQ1Yzc4LCAweDBkYTRmMGViLCAweGFlMjBhN2E1LCAweDA5MzQ0YzVjLCAweDY2YzRhOWY4LAotCTB4ZGNmNTg3NmEsIDB4OWFjNGY3MGQsIDB4ZjI3M2M5ZWUsIDB4ZTQ4NzJiNzUsIDB4ZThmZGU2YzQsIDB4ZTI0OWZiNzEsCi0JMHg0NzY4OGRlMCwgMHhjMDVlMjk5NCwgMHhmNmE3MGVjYiwgMHgwZDRmZDg1NywgMHhkYmYyZjc1MCwgMHhmOGNmM2RlMiwKLQkweGEwZDY3ZTU5LCAweDU3MDIwZThiLCAweDc0ZmU1MGZmLCAweGRhYWU3Y2MyLCAweGQzYjAxYjUwLCAweDlmZDU1Zjc5LAotCTB4MDg3YzBmZjUsIDB4YTc4YWU1ZmEsIDB4YmU4MDdhZDIsIDB4ZTk3YTczNzcsIDB4YzA3N2NlYTUsIDB4YzY2NDllNWYsCi0JMHgzYTZiOWU1ZiwgMHgyNzNlZjNlNCwgMHhmMmU4OWI4YiwgMHhmZDA3N2MwNiwgMHhiNzgzOTFlYywgMHhhNDFmZGJjNywKLQkweGYwMWY3YWZjLCAweDQxMjcwZWViLCAweDU5MTdmYTdiLCAweDY3MjA1OWI2LCAweDlkZmIzOGZhLCAweGU1Y2RmZjhjLAotCTB4ZjdjYjU1OWEsIDB4MDQxMmVmYzEsIDB4YzZlYjY0YmUsIDB4MzExNzVlYzQsIDB4NmViYTJlNGYsIDB4YWI3ODMzMjcsCi0JMHg1M2U5ZGFkNCwgMHgyOWM3NmYyMSwgMHgzYTRlNWU2MywgMHhjYjE2MzczZiwgMHhmYzMxNTkyZiwgMHhhYjVkZjNhMiwKLQkweDNhZGZmOTkzLCAweGZlZWM5NGZmLCAweDI4NGI5ZTMzLCAweDA2ZmE5MmY5LCAweDM3NmEyNGI5LCAweDIxMzNmY2VhLAotCTB4YjM3ZGMxMTAsIDB4ODlkOTg0MDksIDB4OTlkOWZlNjYsIDB4MmU4YTdmODAsIDB4YWRlODEyYTgsIDB4OTg3M2ZjNGUsCi0JMHhiZTIyNGZmMSwgMHhiMDQ4ZmRhMSwgMHhlN2Y5OWEwZSwgMHhlM2I3MjcxOSwgMHgyNWNmZjIxMiwgMHg2NTY5ZTAzNywKLQkweGVlYjdjOTUzLCAweDhkZmEzNGVmLCAweDcyZTY3Y2Y5LCAweGJlN2UyM2I0LCAweGVmMWM2N2U3LCAweDFiZGE5NWJiLAotCTB4NGM2ZjQxZjMsIDB4MmY0MTc4YjEsIDB4YmVjOGVlNTAsIDB4M2JiYmMyOTksIDB4YjVkN2JmNDksIDB4M2JlYTBmM2EsCi0JMHg3Njg3YTYyNCwgMHg4N2E4YWQ4NCwgMHgzZTdkMzg3NiwgMHhiMjY1OGI4YywgMHhmMjQ0NzRmMywgMHhiNmZlNDBiNSwKLQkweDhkNGQ5N2I3LCAweDdlZmIyN2JkLCAweDM5MjE4ZmNlLCAweGQ4MDRmYTMyLCAweDNlMzA2ZjQ1LCAweDAwYTUzNTE4LAotCTB4NTkyMWJjNmUsIDB4MTg1ZTk4ZjMsIDB4MGNkOTUyN2UsIDB4ZDBiMjhmYmYsIDB4OTM4NmY0NTUsIDB4NzQwNjdmYmUsCi0JMHhjNzUzYWMwNywgMHg2MGI3YmMxNCwgMHhmNTA1MzFkOSwgMHhkZjdiYWJlMywgMHg5M2I4ODUyZSwgMHg3MjNhMTc5ZSwKLQkweGM1YTVkYmNmLCAweGM2N2RlMTgzLCAweGZkNzM2ZjZmLCAweDY1MzFkN2FhLCAweGU5YTVmNDFlLCAweDg0ZDFkODVlLAotCTB4YmRmMzMxZTksIDB4NDdjMGU1YWUsIDB4ZTZlZDFkZjksIDB4NDk0MzRlZmIsIDB4OTMzZDJlMmMsIDB4MGU5YmIyYTgsCi0JMHhmOTU4ZmQzMSwgMHg4ODVkNzA4MywgMHg5OWQzZGVmOSwgMHg0ZmQwMWI5MSwgMHg1ZjVkZTViOCwgMHgzOTRmN2JmYywKLQkweGRmZWY5ODdmLCAweDc3YzkzYWZjLCAweGY5NWZlNjFhLCAweDk4NWVmMzQyLCAweGJhZDk1MTAyLCAweGFmYWE1MjFkLAotCTB4NTc5ZWY3NjYsIDB4ZTkzZjAxZTcsIDB4MTQ3Zjg4NzIsIDB4MDY4ZmExN2YsIDB4ZjVkZGVlMTksIDB4MTFlOGY1ZjIsCi0JMHg3YmVlYzRhZiwgMHhiZjcwNTE2OCwgMHg3ZDg0OTdlNywgMHg5OGViZTIxNywgMHg0MGY0YzVjZCwgMHg2ZTk3Y2FjMSwKLQkweDU1ODczODA3LCAweDJlODAwNzY4LCAweGY5OTkzYmZmLCAweDExMjJiZmQ3LCAweGNkZDAxZTViLCAweDNhOWM2MTJiLAotCTB4MjcyNWFiMjQsIDB4ODhmNzhlODQsIDB4Y2UwODNlNTQsIDB4OTllOWVkNzUsIDB4NWZjNjBjMzQsIDB4NWMzOWYyZTgsCi0JMHhlZDQ4NmY2MCwgMHg5MWJiZTE4NywgMHg4MTg2MGE2MywgMHg1ZDBlNzcxZSwgMHgzNWQ2MDNkZCwgMHg1NzBhNmUxZCwKLQkweDA3NjczNmQ5LCAweDE3NWMzYTFjLCAweDc0MmNiZjM5LCAweDdhYjg3NmNkLCAweDJmNDBlZmIyLCAweGRjN2M3ZTM1LAotCTB4ZmNlYmRmMDYsIDB4ODJmYTZhMTAsIDB4NWYwYzQxZjEsIDB4ZjA3NDFmMDAsIDB4ZDQzNzcwODUsIDB4ZjFhNDNjNzUsCi0JMHhkOGZmYWY1MiwgMHg5N2ZiYTE3YywgMHhmODA1ZjI1ZCwgMHhjNWVmZWU4ZiwgMHg3MTVjNDMxNywgMHg3M2RhODJmOCwKLQkweGQ5YjllMWMzLCAweDJjMjkwYjllLCAweGZjZmNjY2NmLCAweGJlMTE0NzI5LCAweGU2MDg1NWVmLCAweDc2YmQ5MDg5LAotCTB4YmUzYmJiZjYsIDB4YmYyZjhjMTQsIDB4YjY2MzYxZWMsIDB4MDczYzc0N2QsIDB4NWNlYjk1N2MsIDB4ZjkwZTRjYTksCi0JMHgyMzQzZGYzZCwgMHg0MzlmZGEwMiwgMHgwM2I4YTJhOSwgMHhhOGRlYmNlZCwgMHg3ZjFjYmQyNywgMHhjMDIwYjhlNCwKLQkweDRiOTg1ZGZkLCAweDY4NzYwZDljLCAweDZiZDgwN2E0LCAweDIzOTNhZDQzLCAweDFkM2IwZjIwLCAweDdlYzFiMjEzLAotCTB4Y2I4YzcwMmMsIDB4MzJiZmY5ODMsIDB4YjA1YmU1NjgsIDB4YWJkMmJkYTQsIDB4NmFhZGU1ZTIsIDB4ZWJhNTdkODcsCi0JMHg1YmJjMDNjMywgMHg1ZDViZmM3ZCwgMHhkNWFlM2Y4YywgMHhkMDEwZjlkOCwgMHhlODcwYjFlYiwgMHgwOTkwMDNlYiwKLQkweDMzMjIxMGUwLCAweGE4MWQ5NzJkLCAweDE0MmRjM2M3LCAweDFjMDJkNzZmLCAweDA0ZmIwZjE0LCAweDQzZjYwMGQyLAotCTB4MmI0YjQ1OTEsIDB4NjdiMDNiMDEsIDB4ZGIzODAyNDQsIDB4MDM5MWZlOWEsIDB4ZTFjOWE3NzEsIDB4NzgwNTFmZGYsCi0JMHg1YmZiZWIyNywgMHg5NmZlZTM1ZSwgMHhlZGQ2ZGVkOSwgMHhkMGZmZGQyMSwgMHgyMjg5MjVlZCwgMHhhMGFiYjc0MiwKLQkweGE3M2MwNDdkLCAweGJkYzBmNGY4LCAweDQ1YmViMGUwLCAweGY1M2U3ODZjLCAweDk1ZWE3M2YxLCAweDg5Njc5NzFhLAotCTB4OWYzMjYzY2UsIDB4MTlhNDRkYzcsIDB4MmU5NzIyZTEsIDB4ZTk0NzFlNWYsIDB4NjNlMzk1MzMsIDB4NDkxMjYxZjIsCi0JMHg0Mjc2ODdjYSwgMHhmZGMwMTRhNiwgMHg0YzkwMjQzMywgMHgxNWUyOTljNywgMHg3YzMxMjdjOCwgMHg2MzI4ZDM3MywKLQkweGE0MjZmZTFkLCAweGQ1ZDNmNDc3LCAweDYzNzVlNmZiLCAweGZmY2UyOWFjLCAweDdlYzNjYjQzLCAweDRkZmM2ZTc2LAotCTB4M2MxNzNiM2YsIDB4OTAxODlmYTYsIDB4OTUxZGZkNjAsIDB4N2IwM2NlY2IsIDB4MmIwZTFlMTgsIDB4MjNiMWQ3ZjEsCi0JMHg1OGM3OWU1YywgMHgzY2UxZjI1YSwgMHhmZjNkYmVlNCwgMHhmZjczNzVjNCwgMHgwN2JlN2Y5ZSwgMHg1M2U4ZTQ3NiwKLQkweGM2M2M4MTEyLCAweDI3ODZhNzMxLCAweDI4ZWJiZWUzLCAweGVmNGFmOTE1LCAweDA2YjNlYWI3LCAweDQ5Y2Y2MTA3LAotCTB4ODdlODdkZWMsIDB4MTVkYTNjMjgsIDB4Y2IwZDlmMDAsIDB4ZmUzY2NlZDcsIDB4ZTE3N2Y0MDQsIDB4ZjM2MjQ0OTgsCi0JMHg1ZjE1NGJlNCwgMHg5NjhmODg3ZiwgMHgwZmYxN2JmMiwgMHhkMjllY2MwOSwgMHhmYmYxMGZkYiwgMHg3OGI5NzdhOCwKLQkweDkzZDI4ZTdjLCAweDFhYzRjN2ZiLCAweDU0MjllNzQzLCAweDc0MTcyNTEzLCAweGM5Y2E3NWQwLCAweDdlNTI1M2IyLAotCTB4ZGZjMGZhNjcsIDB4N2UxZjNhMjcsIDB4NTc3NDllNGIsIDB4ZmIwZTdlYTUsIDB4NWViNjJlZjcsIDB4YzM3ZjAzOTIsCi0JMHgzNWQ3MGNmMywgMHhmZDgxMjNkYywgMHg0OGE2NWQ3ZSwgMHhhZjcxOThiNCwgMHgxZmE3YTk1NywgMHhlYmQ4ZjcxMywKLQkweDA3YmZkOTMyLCAweDJhNjI3YjllLCAweDExMWU3OWU0LCAweDJhYWM2NTMxLCAweDdjYWRlM2JjLCAweDcxOGIzN2E4LAotCTB4ZjE5YmE3Y2YsIDB4MWVmODVkN2IsIDB4ODg3ZmY4MDksIDB4NTc0ZGM5OWIsIDB4OGFiOThmZTMsIDB4NDAzNWM5ZjIsCi0JMHhjMGVjYzI3NywgMHhjOGU1MDE0MiwgMHg3YmZkZGY0YywgMHhjYjQ3YTNmZSwgMHg0ZWY4YzRlMCwgMHgxZDMzN2Y0NCwKLQkweDhjNTMzYjVlLCAweGQxNWQyMWZiLCAweDdiYjdjY2MzLCAweDU3MDMzY2U5LCAweGQ5N2FlZmMwLCAweGQ3N2YwMDQ4LAotCTB4ODNmNTgzY2IsIDB4ZWJhYzRjZmUsIDB4ZjRkNTVhZmMsIDB4ZjNiMDBmNzQsIDB4ZDQ5ZDNlNzQsIDB4ZThjZGYxODMsCi0JMHgyMGY0NGZkZCwgMHg5OTdhMGVjZSwgMHgxOWI4MjZmMSwgMHg3NWQ5NzZmZCwgMHg2MzNiYzRiYiwgMHg2N2Y0N2QyYSwKLQkweGEzMjEwZWJhLCAweGU0MzM0ODA2LCAweDU4NzM5NGQ5LCAweDhhNWJiZTY3LCAweGY5ZTEwOTc2LCAweDZkZjVlNmZmLAotCTB4MjRjNzc4YTYsIDB4ZGQ1ZGE3NTAsIDB4M2E4YjdmNGIsIDB4YjlmNzViYmIsIDB4OTVhOTFkOTcsIDB4OTUyYzFkNjAsCi0JMHhjNjNkMzI1NiwgMHgxZTFkNzhlZCwgMHg0MmZmOWQzMywgMHg0NGZlMTFjYSwgMHhjMGY5OTlmMCwgMHg2OGFlZTcwYywKLQkweGViODZiMjdlLCAweGZiNGY3ZTgxLCAweDcyYjlmZWY0LCAweGU4Nzk5YzZhLCAweGQwODViOGY4LCAweGZiYWYzOGY1LAotCTB4ZGI4ZTcxZWIsIDB4NGZlN2ZmYzgsIDB4YTAxM2ZjNGUsIDB4OTliYzkxMzUsIDB4ZDc2ZTY2ZTksIDB4MGMyOTQ3ZjUsCi0JMHgwMDY1ODA1MCwgMHhlZTIxOTNlYywgMHhkMjg3OTQ3NCwgMHg2MGQxMGE4YiwgMHg5ZGI3YmE1ZiwgMHgzNzliMWE3YywKLQkweGU0MGFmOTNhLCAweGY2MWUxNWI3LCAweDJkYmYxMTJjLCAweGRmMTIyOGJiLCAweDkzYmUwZWIwLCAweDAwNzMxZjFiLAotCTB4NmE5NmVkZGYsIDB4ZjdmNDVlMWQsIDB4NTMyNGQ1YTcsIDB4YWNmYzRkM2MsIDB4MDczYzE2ZjgsIDB4MTAyMTYyZGUsCi0JMHhmZTE0OWI1YSwgMHgxOWM0MDBlMiwgMHhjYzEyOGVhYSwgMHhlZjBlMmYwNywgMHgzZDNlMDEyYiwgMHg5ZmEzMzUyOCwKLQkweDkwODE3NmQ1LCAweGNlZWM2MmM3LCAweDAzOGQ3MGM2LCAweDM0YzZiMmVjLCAweDUwZTk5ZTc2LCAweDliZTQzMTBhLAotCTB4N2QzMzcxMWUsIDB4ZGNlYzc4ZGQsIDB4YmI0ZTJkNTQsIDB4NzlmOGNjOTgsIDB4ZjJkMmQxM2EsIDB4ZDc0YjNmZTksCi0JMHgzZjAwZmU1MSwgMHhlMzBiYTdiOCwgMHhlZjA1MTMyNCwgMHhiNzYwNjllYiwgMHg5ZmVlYzZkYywgMHhmOTFhNmI2YywKLQkweGI3ODUxYTdhLCAweGQ0MTRjZWY1LCAweGQ3MWE5MzMzLCAweDg0YTFlM2RlLCAweDBjM2Q3ZDA4LCAweDE2Y2ZiNzlmLAotCTB4N2JlODViYmMsIDB4ZWIxN2FhYTUsIDB4ZDE3MmYzYTUsIDB4NGRmOTFiZWYsIDB4YTE5M2U5OGYsIDB4ZmQxOTdhZmQsCi0JMHg1MmUyNDk5ZSwgMHg2NzU1ZTIwOSwgMHhmMDAyODUzMywgMHgyZDA4ZjcyNywgMHhmMmY3ZTBhYiwgMHgzOGQ4ZDMwMiwKLQkweDAxZTgxM2M0LCAweDkzM2JlOWZlLCAweGRmYzUwYzdiLCAweGZhZjU1MTc0LCAweDIwNWRmYzAwLCAweDU2ZGZmMjYyLAotCTB4Y2ZiZjNhZWUsIDB4Y2U1N2RiNGEsIDB4NzMzZjMwMTAsIDB4MDQ5YjI3OTIsIDB4NzRhN2Y4NjIsIDB4YmFmMzgyOWQsCi0JMHgwYzUxOWMzOSwgMHhjY2JkM2Q3YywgMHhjMjJjNGU3OCwgMHhlNTE5YzllZCwgMHhkZDhjMTIwZSwgMHgyODNjMTUyNywKLQkweGVkZWM4N2Q3LCAweDVjZWZlMmI3LCAweGU2MDRjOTM2LCAweDBkZjljYmE3LCAweGNlNjdkZjljLCAweDZlZjg2MWVhLAotCTB4YTc3NjYxMWEsIDB4NzIzNzU3MmUsIDB4ZmI4MWJiZjksIDB4YjJmOWI3Y2QsIDB4MTM5N2UzMGQsIDB4ODFmZDBmNjYsCi0JMHg5MjA0NGZiNCwgMHgzY2IzMjc5NCwgMHhjZGVkYTlhMiwgMHgyZjBlZGVlZiwgMHg4MDQ3YmQ4OSwgMHg5MDcxYmMzZSwKLQkweDk3MTVlZmM5LCAweGM4YmU0NmFlLCAweGM3ODBiYzE0LCAweGZiNjM1ZTI5LCAweGU3NGNhMzRkLCAweDZiZjI0ZDE0LAotCTB4MjAzMzBmZDYsIDB4YWNlYzRhM2IsIDB4MzA3ZDc0MjcsIDB4MjE5NDQ5YTMsIDB4ODhhMzM0MWUsIDB4NjJlZDE5ZTIsCi0JMHg5NWRlZGRhMywgMHg5NDk5MThiZSwgMHg1MjVjNWY0MCwgMHhhNDMzMDQxZiwgMHhiMGY4YmU5MywgMHg4YmU5N2JlYywKLQkweDMyZGJhOTU3LCAweDM2ZjVjYThhLCAweDIxZjQ2ZjVkLCAweDRjNmY0MDdkLCAweDAwOWZlYjEyLCAweGViYTM2YTNlLAotCTB4MWYwZTM1YTYsIDB4MWU4ZWViZTksIDB4NzJhNTI4MDcsIDB4MGNlMDdhOGMsIDB4NzQ5ZTJmY2IsIDB4ODYwNDhiMzEsCi0JMHhhMjAxYzQ3NSwgMHgyNWRhODQ3YSwgMHhkMmY2MzhkZSwgMHg2MTllNzc3ZSwgMHg1N2FhMjNmZiwgMHhiOTEyZWM2MiwKLQkweDI1ZGI4N2YwLCAweGFhM2RhODkzLCAweGJkN2MwMDE0LCAweGMyNTJiZTExLCAweDkwYTU5NmUyLCAweGMzZjEwMmM4LAotCTB4MGUzMDJmY2MsIDB4N2Y1MTI1NTQsIDB4YTdlN2Q3MTYsIDB4ZmZhMzllOTksIDB4ZTQzYjUyMTIsIDB4ZThhZjZjYzMsCi0JMHgzYzA5ZTg3MSwgMHg5N2U2NjE3ZSwgMHgxNmYyM2M2OCwgMHgzYTQyZTMxOSwgMHgzZTAyOTQ5ZiwgMHgxMTZmZmU0MSwKLQkweDJiYTA5ZjcxLCAweDM3YzdkMWJlLCAweDE0YzQ0YmYzLCAweDVmOTJlYTFmLCAweDU3N2RkY2I4LCAweGU2ZWQzOTdlLAotCTB4YTRmZWExZjEsIDB4NDRmODc3N2YsIDB4NWY5ZDBmZTcsIDB4OWJjZGViY2MsIDB4YTI1MTM4YTYsIDB4YjA5ZmU2ZjUsCi0JMHhiYzRjZjRkZSwgMHg0ODNlYmNkZSwgMHg5NWRlYmQ0NiwgMHg5OTJlNzM1ZCwgMHg2ZTg5ZjllOSwgMHg3NTc3M2IwZiwKLQkweGQ4MjcwY2U1LCAweDU5OTIxMzM1LCAweDZlYmU4MTdlLCAweDFiNWRlMzQ1LCAweGRlYmM5ZjE4LCAweDdkODI0NzMyLAotCTB4MWZkMDJhYTYsIDB4ZDA3NDFkYjksIDB4NWYzYWM1ZTMsIDB4NjAyNzViMmUsIDB4ZDczMjc0N2MsIDB4MmM0ZGFkNWYsCi0JMHg1MTM1NTg1ZSwgMHg4ZmQxYzIwYywgMHg0ZjYzZjA5MiwgMHg2ZmJiM2FiMCwgMHgxNGVmYTc0NiwgMHhkMjQ1MjdjZSwKLQkweGZmN2UwOTNlLCAweGUwYWYyNmY0LCAweGM2OTNiODg1LCAweDM1NTM4ZGUzLCAweDY2OGRlMzAxLCAweDQ0ZDdiNWJkLAotCTB4MWZiY2U5ZjcsIDB4YmJlMGJmZjAsIDB4MjA4NGNhOWIsIDB4ZmQ2NjkzZjgsIDB4YjMyMmZkMzYsIDB4NTNkOTNhMmYsCi0JMHhjY2Q4OWY3YywgMHg3MzI2NTcyZiwgMHhmNDk3ZDBmZCwgMHgxNWRhNTdmZCwgMHhkZGJmOTJhMywgMHhlZmJmZDBhZSwKLQkweGIwNjVjZThhLCAweGMwZmZhMGE2LCAweDNiMDE5M2VlLCAweGRkN2NlODFlLCAweDJkZmIwOTQ1LCAweDQ5ZGEzNjQ5LAotCTB4ZmMxNGNlMTcsIDB4ZmU0ZjdkMGEsIDB4M2ExZWY5YmUsIDB4MWFiYTdjZjMsIDB4MTdmNzUwYmYsIDB4OGZhMGZmYjgsCi0JMHhjZWM0ODM3YiwgMHhhN2Q3OWJmNywgMHhmZTIzZDcyZSwgMHg3NzVlOTk5ZCwgMHhiNWUzMWIyNCwgMHgzZDc0NWQzYSwKLQkweDVjZWYwOWRjLCAweDViYTIyNzRmLCAweGQ3NWE3YTU3LCAweDNkNmFmZjg3LCAweGFmYWZmN2FkLCAweDY2YjhmYTIzLAotCTB4N2ZjODlkZmQsIDB4OWFmMWY1ZDQsIDB4ZGI4YzE2Y2QsIDB4ZmE3ZWU3OGMsIDB4ZmUzZjFlNzgsIDB4N2VlN2I3MDUsCi0JMHhkZmZjY2M5OSwgMHgxNjZkMmZiNiwgMHgzMjQzNmY1OCwgMHhlYzBiMjdkYiwgMHg2OWZjNjI3MywgMHgwNzY2NWVmYiwKLQkweGJlMmE1Y2Q5LCAweDYyMjBhMGY3LCAweDExYzFlNDdjLCAweGQ0ZDdkNDE2LCAweGYzMDYxYTA3LCAweDE5MDk4YTk2LAotCTB4YmRiZGZiMDQsIDB4YmQ2ZjdlZDgsIDB4N2Q0NzI5MTQsIDB4OWMwODk1ZWYsIDB4OGM1ZDEzZDMsIDB4MWZkYzFlMWYsCi0JMHg3ZmZhMWRiOCwgMHg5NjgxOTNmMCwgMHg0NzRmOGMxYSwgMHgxYTVlYzE5YSwgMHg3ZWUxMjA1OSwgMHhjNTU1OGE1OSwKLQkweDkzNmI3Njc4LCAweDZhM2JlZjE1LCAweGY2YmZmZGRiLCAweDk3Y2ZkMGM5LCAweGU1MmUwYmM0LCAweDc0NmIyNmMxLAotCTB4YzdmNDBhYmYsIDB4MDg4OGYxMjQsIDB4ZWQ2ZDFjZjksIDB4MWIwM2VmMDQsIDB4MDI1MjJiMzcsIDB4ZDI3OGQ5N2UsCi0JMHhmZmZlMDM1YywgMHhjMWU1ODUxOCwgMHg2Y2Q0ZjE5YiwgMHhmYmNjYTc1YSwgMHgyYzRkMjU1ZCwgMHhjNWM0YTVmZiwKLQkweGVkM2E1ZmYzLCAweGVmZTMzNDU3LCAweDA0OTA0ZjI2LCAweGJjZTkwZDZmLCAweGM5OTJmMTVmLCAweGVmZDhlOWRmLAotCTB4ZDE1ZmIwNGEsIDB4NzdkMWY0YzgsIDB4MDMxOGFmZGQsIDB4ZGU3Y2EwMzQsIDB4ZDcwMWNiYTQsIDB4YmVjMTI0NGYsCi0JMHhlZDg1NzZjNSwgMHhjZGJmYjU3NywgMHg2OTkzZDNlZCwgMHg1ZDQ2ZTM3MSwgMHhkZWVjNWZlZCwgMHg3ZGMxYTQ5YiwKLQkweGVmZjlkYjIzLCAweGRiZGVlYzZjLCAweDEzZjM1MzRiLCAweGQyZGY5ZmJmLCAweGQ4ZDMwYzVlLCAweDg0YjM3ZjVlLAotCTB4YmUzYzczZjksIDB4OWEwYjhkMWIsIDB4OTBlOWNiZjEsIDB4NmI0ODFmNjgsIDB4ZjUwNDFjZjQsIDB4ZTdkZjcwOTUsCi0JMHhhYWUxOGE4MiwgMHg1ZDRmOGFlZiwgMHg0ZjFmYjY2ZSwgMHhiN2VmODBkMiwgMHgwMWE1ZWYxZiwgMHhkYzc5ZmIxYywKLQkweGJjZjU2YmQwLCAweGVlYzJmNjA1LCAweDcwOTJlNzYzLCAweDU0ZDE1ODNmLCAweDUzZGE0ZmYwLCAweGFlNzY1ZTZjLAotCTB4Mjg0MWM5OTIsIDB4ZjYxMDYwNmIsIDB4ZWZmMGY3YWIsIDB4YmZiNTI3YjYsIDB4ZWM1YTc1NzksIDB4YmZkYjBlN2UsCi0JMHhkN2Q5Y2ZkMSwgMHg0N2YzMDQyOCwgMHgzZjk2MTYwMiwgMHgwY2RmYzY2MiwgMHgzYjkzOGYwZiwgMHgyMjc0ZmFmMSwKLQkweGJjNjJhOWE3LCAweDA5NmY1MDNjLCAweDNmMzA1N2NiLCAweGNlNGMzYzk3LCAweGZkZmUyZmZmLCAweDgwMDA2Njg0LAotCTB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NWJiZGZmMDAsIDB4ZDU1NDc4MGQsIDB4ZGNlZWZlOTksCi0JMHhmMjY2NzdiOSwgMHhmYzk5OTkzMywgMHg0ZGMyZmUxMCwgMHgwMDkwODEwMiwgMHg3ZTEwMDg0MywgMHg1MDIwMjFkNCwKLQkweDQ1NDA2NDdlLCAweDA0M2FiYWVjLCAweGExYmY5MDg1LCAweDU2ZDNlYmIxLCAweDQxMjZlMWY3LCAweDI3ZDNlMDhhLAotCTB4Njc5NmRkNmQsIDB4NTcwNjdkYjUsIDB4M2IxMjU0YjYsIDB4NzcwNzA0YzEsIDB4MDhhMDBlYzIsIDB4ODBhMGRiNTQsCi0JMHgxMWRhZTNjMiwgMHgyNDg2YTIyOSwgMHhlYzU2YmIwZCwgMHgzYmVmZGQ2ZSwgMHg2NjY0ZGNlNywgMHhlY2ZhNWMxOCwKLQkweGY4NzI4Mzc2LCAweDljZjczOWVlLCAweGZiZGY3Y2VmLCAweGIzNzM5ZGZkLCAweDMzMDAwMWQzLCAweDY4Nzc2ZTAxLAotCTB4ZGIwMGQ5MDAsIDB4OGM4MDJmNjQsIDB4ZGUwODIwY2YsIDB4MTZlOTFiZjQsIDB4ZDMwNWQ2MDksIDB4N2FlNzc2ODgsCi0JMHhhOWRmZTBhNywgMHhjZTFhNmJhNiwgMHgyY2IwZWY5MSwgMHg3YTQ0OGYzNSwgMHg0MmQxZTk4NiwgMHhjNjM5ZTdhNCwKLQkweDY5OWU3YTcyLCAweGY4MDZlMjg2LCAweGJhNWJjODY3LCAweGNmYzAwZTY4LCAweDAzODc1ZTljLCAweGQyNTdlOWQ3LAotCTB4MDAxOTQ4NzYsIDB4NjUwNDkzNjYsIDB4NTI4ZWQ4NTksIDB4ZWMzNzM4MDMsIDB4NjVhYzAxNTIsIDB4M2MxZGFlYjgsCi0JMHhhYTQwMTc0ZSwgMHhkMjFiNzQwNSwgMHg1NGZiMzYwZCwgMHgxZTk1ZjFhMCwgMHhkMTFhNGI2ZCwgMHg4N2M0M2QwMCwKLQkweGE1MDM5YTM5LCAweGQzMzZiZWQ4LCAweGJlMDBiMzA0LCAweGFkYzFmYjRkLCAweDFlZjhhYWE0LCAweGM1YThmZmJlLAotCTB4ZmI4MWNlMzcsIDB4ZWM0NmI3YWIsIDB4MWZmNjAxNWEsIDB4YTQwNDczYmEsIDB4NmMxZDdlZDEsIDB4Y2YyZjI1YmYsCi0JMHhjNjAyODVjYiwgMHgzM2ZmZTE1NywgMHhmOGM5NjU1ZiwgMHg3NWYwYTZkYSwgMHgyYzk0MGY3YSwgMHg2NGJmNWMwNCwKLQkweDFhNWY4YTFjLCAweDU5OTk0ZmQ2LCAweDQxNmRjZjYzLCAweGY0OWYzZDAwLCAweDkwOTVjOWUwLCAweGVlYWE3MTZlLAotCTB4Y2UzNGY5OWQsIDB4YjZmMjY3ZDAsIDB4MjFmZDQxNDUsIDB4NjlhYTcyNWYsIDB4Y2U1MWU5MGIsIDB4YzBlOTZkMzAsCi0JMHg4OTg3NGVmNiwgMHhhYzU4YmZjZCwgMHhiNzkwMzAwMywgMHg4ZTBkZjUxYSwgMHg1MzM1YmM4MSwgMHg5NmZhNGQzOCwKLQkweDQ4ODFiMmU1LCAweDliN2Y1MjM5LCAweDg3MWU3ZWVlLCAweDBmODE5OGMyLCAweGRkZmE0NzFlLCAweDNiZGM0YTA3LAotCTB4YzI5MGJlOTEsIDB4NTAyZWIxZTUsIDB4N2E0NTEyZDAsIDB4MzYzMDI1YmEsIDB4OWQzOTdjODIsIDB4ZjdjOTJmM2UsCi0JMHgwNGMwOTY5YiwgMHgyZGI0YTc4NiwgMHhlNGJmMzRlOSwgMHhjYTBlZjgwMSwgMHgzZDEwNDI0MywgMHhmMTZlZmI4MCwKLQkweDAyMTZhNjgwLCAweDFjZTc4MDhjLCAweDkwMDA0Yjk3LCAweDMzMmFmODJiLCAweDI1NjBiYWQ5LCAweDg3MzdkZWI5LAotCTB4MTc1OGQ1Y2IsIDB4MWM4NTY4NjUsIDB4M2Y4MmE3ZTQsIDB4ZjVjMGY4MzcsIDB4YzFiZWI0N2QsIDB4MzAxZjEwY2YsCi0JMHgxNTM5NzFjNiwgMHg0ODU3Y2ZkOCwgMHhkMzNjZDFmNywgMHgwYTMyMWU1MCwgMHhmZmYzZDcwNSwgMHhhMGIwMTRkZSwKLQkweDNmZjhmZGZjLCAweDMyNWYyZmQxLCAweGM5ODk3NDA1LCAweDJjZmQ2ZDNkLCAweDMzYWQ4OGY2LCAweDk5NjZhZGU3LAotCTB4OWZlM2FiMzEsIDB4ZWNkNDRjNTksIDB4YmI1NDNjYTcsIDB4Zjc0OGVjMDIsIDB4YWQ0NjJmOTgsIDB4MzdmNjFkNjIsCi0JMHg5Y2Y5MWM2ZSwgMHg3ZDlmZGUyNywgMHg4ZDMwYjdjMiwgMHhjN2UyZjdkYSwgMHhmZmE3ODNjZCwgMHgxNWZiZTMyMCwKLQkweGU1MDE5MDEwLCAweGQwOWEyNzMyLCAweDMxZmU1YTFmLCAweDRhZWYzZmNkLCAweDc3YmZmM2ZjLCAweDdkYjE2N2E0LAotCTB4NWY1MTgyOGQsIDB4NzcyMjdkYjEsIDB4OTVhMzVlYjgsIDB4NjZmODM3YWYsIDB4ZDNlMTA2NDEsIDB4YTJkOTQ2NmMsCi0JMHg4NjRkNTVmYywgMHhhMmJmNmMwYSwgMHgzYTAwM2I5ZiwgMHgwYjM4ZTJiNywgMHg1NmFkYzFjMCwgMHhlMzM5NGVkNiwKLQkweDg0ZWI0MGQ4LCAweDI2OTAyMmI2LCAweDM1YmFiYzAyLCAweDFkODZiNTk3LCAweDBmMDMzOTRkLCAweDc1OThkNGMxLAotCTB4MzkwZGRlMDQsIDB4ZTVjN2JlMGUsIDB4ZTkzYTNkMzgsIDB4NTY5MWYzYTcsIDB4ZDAxMDI4NGUsIDB4NTczMGU1ODYsCi0JMHg1ZDEwNmJjOCwgMHhmMDc5ZTkwNiwgMHg0NzViOWE0YSwgMHhiYmM5ZDY3YSwgMHg0YjRmYjI2NSwgMHg5OGI0MDlhZSwKLQkweDE0YjRkOWZkLCAweGQzMGQyNmQwLCAweDcxNWM5M2E5LCAweGI4ZjQyY2I0LCAweDllN2Y2NmNkLCAweGY0Zjc0MmUxLAotCTB4MzMzYWUyZTQsIDB4ZWVlOTNhYzQsIDB4NDFmMzcxNTEsIDB4ZThjNGZmMDAsIDB4ZTJkNzU1ZjMsIDB4NjdlZTEyMTMsCi0JMHgwYWY1NWE0NiwgMHg0NTQ2NTdkYSwgMHhlNWZjZGM0MSwgMHhiYmNiYzY2ZiwgMHgwOTFlYmMwYywgMHg4ZmJmNzY1ZiwKLQkweGIzZmJlM2ZjLCAweGNjN2Y2MGNlLCAweDJiNDg4YWY4LCAweGZiYzU0N2MzLCAweDVlZTdjZmYxLCAweDZmM2JhNzhhLAotCTB4Yzk5YmI3YTYsIDB4NzRmZWE2MTMsIDB4MmU1ZmQ2N2UsIDB4NWUyN2E3NGYsIDB4ZTM0Yjk5OWUsIDB4OGRlZDk5ZTUsCi0JMHg3NTg4ZTc5NywgMHhlOTFhZjJmMSwgMHhlOGM3OTc4YiwgMHhmZDcxYzllYSwgMHhjNTk0Yjc2MywgMHgzM2JlZTNkMSwKLQkweGJlN2M2ZTM3LCAweDE3NDcxOTVlLCAweDM3MTY1OGVlLCAweDlhZWI0MjdlLCAweGVlZTI3YTM4LCAweDJmOGRjNjZmLAotCTB4ZjVjNTU0MGUsIDB4ZjlhYmVjOTcsIDB4MjUzZmY0OGIsIDB4OWUzNzE4ZDgsIDB4MWFmYTZjYzQsIDB4N2QwYjRmZmQsCi0JMHhiZmJkNmUyZiwgMHg5ZGZmZmU5NiwgMHhjZjdlOGZmNCwgMHg3YTQ0YmZkMCwgMHg0MmZhNDk5ZiwgMHgxYzM2NTkzZiwKLQkweDA2Yjg5YzlmLCAweGY4Njc0YmY5LCAweGRhMTJlYjhkLCAweGU5YTk1ZWE1LCAweDBjYmViY2M0LCAweGY3ZDgyZGRjLAotCTB4Yzg5NWVjOGMsIDB4NTE0NjhkYmYsIDB4NmM2ZmQwOWIsIDB4ZjkzNTQxMzMsIDB4NGM5ODFmZmQsIDB4ODZkMzc5MGYsCi0JMHg5NGU0ZGNlZCwgMHhhYWNmZmNkOCwgMHgxNGI4YTY2MCwgMHhlOTRkNmUzYiwgMHg0ZGEzMzhmMCwgMHg3OGQ4OWE3NywKLQkweGQzN2VkZmMzLCAweGQxNDRiNWEyLCAweGI5OTc0ZTlmLCAweDliM2Y0NTNmLCAweDcwN2Y0NGVlLCAweDIxNDI3YTQxLAotCTB4ZTk2NGE5MzcsIDB4YzU5NGFmOGEsIDB4ZDhiYzg3OWQsIDB4NmE0YjIxM2EsIDB4ZDg2MzM2YzQsIDB4YTE1ZjZiYmYsCi0JMHg4MWE4MmU1MiwgMHhmZTIxM2ZiZCwgMHhiZGVlYzk0ZiwgMHg0ODZmZmZjOCwgMHgxNzQ5MjMyMCwgMHhlZjNmMTY2ZSwKLQkweGE2OTZmYzM3LCAweGY4NjMzODY1LCAweGUyMzM0YzFhLCAweGYxNDE5NmFkLCAweDQyZTFmMDczLCAweDNmY2VkN2U2LAotCTB4ZjUwYjRlODgsIDB4ZmJlNTVlN2YsIDB4MTE1ZmM2MzEsIDB4ZTE1M2VkN2UsIDB4OWZjOTdhZDcsIDB4YWJmYjg2NTksCi0JMHg1ZDM4ZmNmNywgMHg0ZmNlNzljMywgMHgxOGMxYTU4MiwgMHgzOTBiMTUzOSwgMHgyYzFjMTk4MSwgMHgzYWUzY2NlZSwKLQkweDRiYjM1MGJiLCAweGRmZjM4OGQ5LCAweGExNmMyZWY3LCAweDEzZmJlZTc1LCAweDZmN2Q4OTZjLCAweGZlNjE1M2I2LAotCTB4NjY1M2I2NzEsIDB4NzI2YzVhZWQsIDB4MzE2YmNlNTEsIDB4MThjYjM5YTYsIDB4NWRiMDkxMWQsIDB4YjIxNDAyNzUsCi0JMHg3Y2JlZDVjYiwgMHgwZWYyODQ4NSwgMHhlMTc2Y2ZiOCwgMHhkMTQ4MGI5MiwgMHhlMDNkZGVmOCwgMHg5ZmZmYzg1NSwKLQkweDlkM2ViMDdiLCAweGYzY2QwZGM2LCAweDExNzcxM2M2LCAweGEyYTJkNzNlLCAweGQ3NzkyZjI5LCAweGU4MzkyYmE5LAotCTB4OTM2ZTA2MGYsIDB4NzVjNDljNTgsIDB4ZmJkY2Y0YWMsIDB4MjkyN2U4YzAsIDB4ZGYwMzljYmUsIDB4YWZhOGIzZDUsCi0JMHhmMzY2ZTAzNSwgMHg3MjIyZjMxOSwgMHgwNWNjZmNlMywgMHgzODk5MjIxNSwgMHgxMmMxN2U4ZiwgMHgzNDdjOGJkOCwKLQkweGZhODI1ZTUyLCAweGMxMWVlYzY5LCAweGNkN2Y1ZmUyLCAweDgyN2ZkYjFmLCAweDFkMWExZWUzLCAweGZhZjE0YjFkLAotCTB4OGE5ZmNkNDIsIDB4ZWZmN2NmNDgsIDB4N2Q0MzQxOTYsIDB4NzdjNTM3N2UsIDB4OTBjMGUxMTcsIDB4YWY4N2Y5YzMsCi0JMHhjNjNmNTNhNSwgMHhkODY3YTY1ZCwgMHg2NWVmNzE2ZiwgMHhkZWNmZGJmMiwgMHg3M2FkYzYzMywgMHhkZTliYjgyZSwKLQkweGQwMTQwYTgzLCAweDY3ZjExYjljLCAweDQ5NjgxNGI0LCAweGUwNmEzNTJlLCAweDNlNDNkZmU3LCAweGU2YzI5NGUxLAotCTB4NTliMmYwMzMsIDB4NWYzMWE1ZTAsIDB4OTc4YjExMWIsIDB4YmMyMWY0YzYsIDB4NzFhYjdjYjAsIDB4YTZlY2NjYWYsCi0JMHgwMDE2ZGJiMSwgMHg4MTU5Y2I5NCwgMHhlYmZlZmYzYiwgMHgyMzRmN2QyZiwgMHgxZjNkZTc4MiwgMHhjNDM0NmUyMSwKLQkweDM3MTFlZmM5LCAweDhmYmRjNjFhLCAweDNmNDQzNzExLCAweDg4NmI3YjJhLCAweGZlOWU4ZmRmLCAweDc5YTNlZWM4LAotCTB4YmUzNWI5ZWYsIDB4NzM4MWE1ZmIsIDB4M2RmMjQzN2YsIDB4MDgzZWYxYzksIDB4NWY5OGU3ODMsIDB4MjhkNjJjZWYsCi0JMHhmMDc4NWJhZiwgMHhlYmNhMzlmYSwgMHg5YTJkM2ExYSwgMHhjZWFiZTkwNSwgMHg2OTY3ZjFlOCwgMHg2ODA5MjFmYywKLQkweGM2YzQ0MzdjLCAweGE3NDM1NTljLCAweDdmNjFiMDE0LCAweGZiNjNhODRkLCAweGRhNmJhNDY4LCAweGQ4NTM5NzU2LAotCTB4NzIyMWRiZjAsIDB4OTAxZmY1MDcsIDB4N2ZkOGNkMDIsIDB4N2I1ZWFiNzksIDB4ZjBiODc1MDksIDB4Njk5N2ViZDUsCi0JMHhmOTU3YmVkZSwgMHhlYWI2NTdiYywgMHg5MDEzY2MxYiwgMHgwM2ZlYjAzZSwgMHhkM2FlYWY5YSwgMHg2ZmQ0MzYwMiwKLQkweDhlYTIzMzlmLCAweGE0M2FmNWE2LCAweDFkNTdhZDIwLCAweGYzNGFhMWZjLCAweDdhYjBiZjU3LCAweGI1MzlhNTNjLAotCTB4YzZhYTlhZmIsIDB4YmViZmY4YzcsIDB4MGQ1NWE3ODMsIDB4ZjlkZDU0ZTUsIDB4NWM2MmM1YzMsIDB4MDE1ZjBmMzksCi0JMHhmZWM2Mzc2NiwgMHgzNjlhMDczNywgMHgyZWUzNjM5OCwgMHg3YjI3NWJmZSwgMHgyZGY3N2UxMiwgMHhlMTc1ZmYyMSwKLQkweDI3MTIxNmMyLCAweDY3YWU5NWZhLCAweDc2NTdlNjI1LCAweGI4NzJiZjMzLCAweDg1ZmVkZmZkLCAweDhiZjQzYmQ2LAotCTB4MjgxYjg0MDksIDB4ODM3OTM1YmYsIDB4YjE3MTY3NTcsIDB4NTcwM2FjNDEsIDB4OWVhOTUxZGUsIDB4MmU1NGU4NjksCi0JMHg3YzY1ZTdjNywgMHg3N2E3MzVmYywgMHhmOTI2NzNhZiwgMHg4NWI0OTg1NSwgMHg3OWYxM2JkNSwgMHgyNTk0MGVlMiwKLQkweDdlN2FlMWU1LCAweDM5MGZiMzBhLCAweDhmNWQ0MDZkLCAweDA2OWY3Y2ZjLCAweGM3NjYzZjIwLCAweGY0ODU1YTgwLAotCTB4NTcxODk3MGUsIDB4Y2RlYzBkNjAsIDB4M2ViZjkxYmYsIDB4NjdhZDk5YTcsIDB4YWM1ZjAwMmQsIDB4Y2ZkYTMwZGYsCi0JMHg4MmIxZmY0NCwgMHhkNTI4ZDU0ZiwgMHg5NTE1ZGExNywgMHhmOTEwZGI3MCwgMHg3ZjkwZDU0NCwgMHhjNWMzZTg3ZiwKLQkweDdkZWYyNDllLCAweDYyOTVmYzIyLCAweDI5ZWY1NmYyLCAweDQ2OGZiNjFmLCAweDcxNGEzOWE5LCAweDQ0ZDBmMWFhLAotCTB4ZDY3YTY3NGQsIDB4MmViZjhjYTMsIDB4NThmYjQ2OWIsIDB4NTk5M2YwNzgsIDB4M2VmOTk4ZDEsIDB4NTc4YzdjNDMsCi0JMHg1Zjg2ZTk4NiwgMHgyMTU1Mzg3ZCwgMHhlMWZjYmRiOSwgMHhjYzdhNzM1NCwgMHhhYWQyNzIzZSwgMHhlMGY5NDkwMywKLQkweGJiNDllMmYxLCAweDViYWQwYWY3LCAweDM1YTJkMDdmLCAweGRjZGI3YzMzLCAweDM4NzdjMjExLCAweDQ0NjY4ZGQ1LAotCTB4Y2I5YjU2ZjgsIDB4M2Y3ZGYxNjMsIDB4MmMyMWJiZTMsIDB4ZDBlOTExYmIsIDB4NmJlZDVhMTAsIDB4ZGRkM2UzNjIsCi0JMHhiNDM5MDZhNCwgMHhjOTljMjc0MCwgMHgyM2MzMmYwZSwgMHgzN2FlMjdmYywgMHhmZTMwZTI4YiwgMHg3NTZhM2ZhMCwKLQkweDc4NDc3ZWZhLCAweDU1ZTlhNzMxLCAweGRhZjg5OGU2LCAweDM1ZTY4YTYwLCAweDVmM2ZhNDRiLCAweGZiMTg4MmViLAotCTB4YWQ3NGQzOTMsIDB4OTllNDhiMzksIDB4NjFiNTk2ZTksIDB4YWUyNjI5ZmQsIDB4NmEyZDNlOTcsIDB4ZGIxYzUxNzcsCi0JMHhiZDkxZjM4YSwgMHg5M2IxM2U0NCwgMHgzNjg3YjdmYywgMHgzYmVlYzk1OCwgMHg0N2FlMGU5YywgMHg0ODFjZDc1NSwKLQkweDg3N2EwOWI3LCAweGJiMjZhZGVhLCAweGMyOTM5MWRhLCAweDJlMzFiNWViLCAweDA5ZmZlZjg2LCAweGFmNjQ3ZGFmLAotCTB4M2UwMjhlYjgsIDB4MDlmNzdmNTYsIDB4MDU4ZGY1YmMsIDB4ZjcyOTdmZTYsIDB4OTRjOTljMjMsIDB4MTk5MjE1ZWYsCi0JMHhjZTM0MWNmOSwgMHhiZGFhNmExZiwgMHg4Nzk3NmIxNCwgMHg3ZjEzNzNlZSwgMHgxZjdmMGE0YSwgMHgxMzVlMzg3MiwKLQkweDcxNzVjZGQ3LCAweGFhNjkzZDljLCAweDEzMTA1ZDZhLCAweGU1YzcxMzg3LCAweGMzOTliOGQwLCAweGNlYjMwMDcyLAotCTB4Njk3MDAxY2UsIDB4ZmVmYzMyNGYsIDB4Nzc2OTU5YzIsIDB4ZGU1ZGZlOTEsIDB4Y2Q4N2U0NDksIDB4NTFlMTE4YzQsCi0JMHg4MWYyOTM1MywgMHhkOTVjYjNlMywgMHgyZTRkZTNjMywgMHg1NTRmNWIwNywgMHhlYjkyMGU3YywgMHhhZDM5Mzk3ZiwKLQkweDY3MjY1ZWE4LCAweGVjOGQ2YzM0LCAweDA1N2Y2ODc4LCAweDliM2I1MjZhLCAweDkxZGVmODJlLCAweGM0ZjdhZjFmLAotCTB4MzhjNGQzNzEsIDB4NTZlN2E0YzUsIDB4NjU4NzlmMTEsIDB4ZGFmZDM3NjYsIDB4MzFiZmQzMDAsIDB4OWQ3MjNmYWUsCi0JMHhlZDdjM2ZlYiwgMHg3OWQ5MGYyZSwgMHhjZjg2NWFmZSwgMHg1YzU5N2Y0ZiwgMHhiYmNjYzcyNiwgMHg4NTM5NTljZSwKLQkweDEyZTc5M2Y2LCAweDVjZjQ1MDc4LCAweDJiYTQ3YmUyLCAweDczM2YxZjdlLCAweDYyYjg2NzdhLCAweDRjNjAxZmNlLAotCTB4MDRlMTJkZDYsIDB4MTZlMDdkNDQsIDB4ODNlYjBlZjEsIDB4YjU3YzY2NDksIDB4ZTRkYzUyMWYsIDB4MWU0NDNiZGYsCi0JMHhjMzJmMDY2YywgMHgzNWI4MmE0OSwgMHhlMDdhZjc1NiwgMHg3ZjcwZjNkNywgMHhiMDRjNDcyZCwgMHgxZDNiNDkxMywKLQkweGYzNjI4YzcyLCAweDA0ZDhiMDc5LCAweDhhMzI2Y2JiLCAweDRiMTU4ZjA4LCAweDMyMzIxMmJkLCAweDlhZTI1ZmVjLAotCTB4Yzg2ZDhkZjYsIDB4NjVkMDIxZWYsIDB4ZDdjNzNmNWUsIDB4M2M5MWUwYzEsIDB4ZmJmZDZjNTIsIDB4ZDVhZGNkNWEsCi0JMHg1YWY5Y2ZiZiwgMHhlYjEzY2VjOCwgMHhkMzExMzlkZiwgMHgxNmUzMzU3YSwgMHg5NmQ3ZTBlYSwgMHgxZjgzYWQyNSwKLQkweDUzZDdjNTc0LCAweGM2MzRiYjBmLCAweGM3MTI3MDVjLCAweDEyOTIzMDYxLCAweDMwMjhlN2UwLCAweDg0NWM3MDgzLAotCTB4ZWRmYTg0ZTEsIDB4YTU1NWJjMzksIDB4Mjc1NjQ5YmUsIDB4ZjRkNzMzYzYsIDB4NDE4Yzc2YTcsIDB4ZTVjZjFiM2IsCi0JMHhmZDBiNzQ0MCwgMHg4ZGYzY2EzYiwgMHhiNWZhYmFhMSwgMHg0NGZmMmNjOSwgMHg3YWIzMjQ3ZiwgMHg0OTc4MjFkMiwKLQkweGU2Mzk1ZmQwLCAweDcxMThiYzQ5LCAweDkxZTVkNWM3LCAweGM5ZGE1ZmUzLCAweGI0YmJiNmZmLCAweDA2N2U5MmRmLAotCTB4Nzk0MGNhNGUsIDB4NTUxY2NkOWMsIDB4ZWJlYzQ5OWQsIDB4OThiM2U1MjAsIDB4ZTJlNGJjOGYsIDB4OTIxYWQ2N2UsCi0JMHhkZjVjMDEzYywgMHhlMjgwNzlhYSwgMHg5OGUxY2RiYywgMHg1OWQ4YzcyZSwgMHg4NWM3OGI5NSwgMHhmMjE3ZTNmYSwKLQkweGFmMjNjYzU0LCAweDk3YjRkZTlhLCAweDVkNzVmY2UyLCAweGNjNzRlYzA3LCAweGVkZmU3YjUzLCAweGI0MTQ3NDU5LAotCTB4NGVkYmVjYzgsIDB4YjRhOWZiNzYsIDB4Zjk0YWM4YTcsIDB4NTRjMDhlZTEsIDB4NTIzMDRmOTIsIDB4Nzc3MTQxOTAsCi0JMHg3Mzc0MTk4YSwgMHhmOGZjOGRkOSwgMHg1MGE2ZTM3NywgMHgzM2JiMGQ4NiwgMHgzYzI1M2I1OSwgMHhhN2U1MTM2MywKLQkweDJmZGYwOGZlLCAweDBiYTBhMWFkLCAweDhjNDkwZTJjLCAweGI4YjUwYmVlLCAweGJmZmYzZTY4LCAweDNmMjI4Zjc2LAotCTB4OWY5YjNmYjUsIDB4NDVmOGJlMmYsIDB4MGNkZjdmMDksIDB4YWNmZjFhNjYsIDB4MWVmMDI5Y2IsIDB4ZDQ3OWQxMzAsCi0JMHhkNThlNzE3ZSwgMHhjNmNjODVmNywgMHgwOTRmZWIxOSwgMHg4ODFkOTAyZCwgMHhlYjQ4ZDI4MywgMHgxNjRlNzY1MSwKLQkweGNhN2NiMGI2LCAweDc5NzAwMmY2LCAweGEzY2YzMTg0LCAweDRiYzM5Y2YzLCAweGJmNTFlMjgwLCAweGY2MTJkYzEzLAotCTB4YjAwY2E3YjcsIDB4ZGJhMDY3ZmMsIDB4OTEyZjNkYTIsIDB4ZWM4MTVhZGMsIDB4NzVlNTVkYmQsIDB4ZjYwMjMxNGIsCi0JMHg3M2YwZGE0MCwgMHhmODViM2Q2MywgMHg0NGU2NzRhNywgMHhmYzUwZjBiOCwgMHhlMTViOTliMywgMHg3OTU4YjRiNiwKLQkweDg3NzkzM2E3LCAweGE2YzgwZjI5LCAweDM0YTYyMjc1LCAweDc3ZDFjZmNhLCAweDFhZjhjZjNlLCAweGJhZDgxM2U2LAotCTB4Y2NjNTlmMDYsIDB4MDNhYmI3Y2YsIDB4NjJjZjFmOTcsIDB4MDcwODM5N2MsIDB4ODRmOWMwYzUsIDB4ZmM4ZDQ0ZjAsCi0JMHg2MWUxY2Q5YywgMHgzNDM5YjBmYiwgMHhjOGRkMmViNywgMHgyNjJhN2Y5NywgMHgzZjNmNjg2MCwgMHg3YjIxODY2OCwKLQkweGE3ZjZmYjI2LCAweGI0NTZkMzBjLCAweDhlMDJmNjg1LCAweDNjMzdkMDZiLCAweDBjN2U2OGI1LCAweDYyYTY4ZTRkLAotCTB4YWVkM2ZkZjgsIDB4MWI2ZDRmOGQsIDB4NzQ4ZGNlYzMsIDB4OGE5ZmY1MTksIDB4ZjY4YmJhNmQsIDB4YmQwYWVkYzksCi0JMHg4Y2JiMjdhNywgMHg3MjhkYzFjYiwgMHhmZWYyYjU0YSwgMHhmMzg4ZjFhMSwgMHhmOGQzYTIzNCwgMHg5MWM1YjczOCwKLQkweGQ5OWYyY2JhLCAweDE4YmQ5MDBiLCAweGE1YjdkOWY5LCAweDUwM2JlNWM4LCAweGY0M2ZiZGI1LCAweGJlZTI5NDY2LAotCTB4MWY0NzRkN2EsIDB4OWY3MWMzNmIsIDB4NDUxNjBmYWQsIDB4N2Q1MGZlYTgsIDB4NWYzZTEzZWYsIDB4ZDc2YWJmNzksCi0JMHhlZGJiZjIxNCwgMHhmOTA1N2I4YSwgMHgyM2ZlYTg5ZiwgMHhhOGJmMDc5NiwgMHhlYzYzM2I2OCwgMHhlNDBjYzYwZSwKLQkweGQ3MTM3ZTEwLCAweGZlNmY5ZmYxLCAweGZkYjllNTExLCAweGFhY2QyNDg3LCAweGM4MWRmZjkxLCAweGMyMWJiZTIzLAotCTB4ZDdlNGFiMWYsIDB4NjQzZTg3ZmQsIDB4OTkxM2VkNzksIDB4NWViNDJiYmUsIDB4MjE2OWE4NDUsIDB4YjQwZTc1YzksCi0JMHgyZWRmOTBiNiwgMHgzMDQxZjkxMSwgMHhjMTkzZmI5NywgMHgzN2NmNDUzMywgMHg5ZWMxZThjNSwgMHgwZWRjNzEyOSwKLQkweDljNTFjNmY4LCAweDNkN2IwYjBhLCAweGI2MjdmNTRjLCAweDJmZWU0NzVkLCAweDQ0YmJmOWE0LCAweGQ3YmM2YzdkLAotCTB4OTM0NzQ3MDQsIDB4MzVlMTliZGMsIDB4OWRjNTBlZDYsIDB4ZTEyOTc5ODAsIDB4ZjU5Y2U0YWMsIDB4NzhjYzRmMjEsCi0JMHhiZjNmMjY2YiwgMHgwMmY1OGFiNSwgMHgxMzNmYmU5OSwgMHgyZTQ3YjViZiwgMHhlN2RhNzZhYSwgMHhkNTFlNjBhNSwKLQkweDkzYWM0MTk1LCAweGM4ZmM0OTFkLCAweGQ4MjZmZDkwLCAweGEwM2NkZjkzLCAweDE1ZmY3OGQyLCAweGY1MDU3ZTYwLAotCTB4ZjUwMzJkYmQsIDB4Njg1Y2ZmYjcsIDB4ZGU3YzdhZjIsIDB4YTBjOTNhODUsIDB4YWYzY2UxN2MsIDB4ZWYxNGJiMTMsCi0JMHg3NGRmMWE2OCwgMHhlNGE5ZjNmNiwgMHhhODI4MDZjNywgMHg3NzlmN2ZlMSwgMHhiOTIzOGVkNywgMHg1MzJiZmUyMSwKLQkweDgwM2FjZWM4LCAweDRlYzMzNWY5LCAweGYxNGVjOTRiLCAweDdmYzI1MmZkLCAweGNjYzVkMTM5LCAweDNkYWJiNzJmLAotCTB4NzY1ZDk4Y2IsIDB4MTJlYzgwOTksIDB4MDFlY2NmZjEsIDB4YjhhMGVmZjEsIDB4N2I0MGVhNWMsIDB4NjQ0ZmVmNjAsCi0JMHg2M2RlZGU3NiwgMHgxNjdjYjBmMiwgMHg0NjA0ZmFmZCwgMHg3NDRkZGU1NywgMHgwNzIyY2Y3YiwgMHhlMjEzNzNiMywKLQkweDM1ZWM4Y2I5LCAweDEzY2Q5NDcyLCAweGE2MzRhMDA0LCAweGVjNmYwMjVjLCAweGNiOTU0MTM5LCAweGY4NmNmMGNlLAotCTB4N2VjMjJkY2IsIDB4MGNiNDkzODMsIDB4NTUyM2VlMzcsIDB4MjNlY2UzOTYsIDB4NWE3MjVlMjYsIDB4N2ZjN2QzYzQsCi0JMHg5ZWE3OTNmYywgMHhhNzhmNGY5OSwgMHgxMGUxMzhmMywgMHhjZTliNTI3MSwgMHgyMmEzZmVmYywgMHgzZWJlMzU1NiwKLQkweGU1MWI1NTc3LCAweGFjYzk2ZmU1LCAweGE3MzhiMGZmLCAweDFjOWMwODg4LCAweDE0MTRlNzE1LCAweGNmZDQzNDM3LAotCTB4NzVmY2UyNmIsIDB4ZjQxZWQyMjYsIDB4NWIzY2IzYTMsIDB4NTU2ZTUyMTYsIDB4MThmNWI0YjEsIDB4YzFiZDczYjUsCi0JMHhjZTMyOTQ4NSwgMHg0YzczZDc1ZiwgMHg0MjVlNjZlMSwgMHhmYTNjZWJmOCwgMHhmOTMzMTI4ZCwgMHhjZWJjZjNiZCwKLQkweGUwNzJmY2ViLCAweDBlNTExNzgzLCAweGY5NDYxZDhmLCAweGI4NTM4OTI3LCAweGNjM2Y4NjFkLCAweGVlNDM0NmIzLAotCTB4OTJmZGZkOGQsIDB4Zjk3ZTQ3ZTEsIDB4ZmE0M2FhMGQsIDB4MWE2MWU1M2EsIDB4MDIwMzYzZTMsIDB4OTk1NWU4OWIsCi0JMHg0NzRhNzhiZiwgMHhmNGM4M2VjNiwgMHg3OTQ0YzlhYywgMHgzNWJlZDljYSwgMHg5Y2VmOTQ5OSwgMHhjYzg3MzJmZSwKLQkweDQ1Y2NlYmIyLCAweGFhNzczZjU2LCAweDRmYzIxMjllLCAweDljOTYwMTY3LCAweDdiN2E3MDQ5LCAweDUxZjRjMmE2LAotCTB4NjczZjg5NmUsIDB4ODRjN2RhMzEsIDB4YjBlOTE0MWQsIDB4YjFmNTYyNGIsIDB4ZmQ1MDA4ZWMsIDB4NTQ3YjI5ZGMsCi0JMHg4MGFlODNjYywgMHhmOTFlNzZiZSwgMHhmODFlNzExYiwgMHgwZjFmODgwOCwgMHg2Y2ZkNDFmZSwgMHg5NDIzZTQxNCwKLQkweGRhZGM2MGI3LCAweDc3MTI4Y2Y4LCAweDJkZTQ2NzNlLCAweGIwN2JjNjc1LCAweGRhZjg0NGM1LCAweDFmZTA5NjE0LAotCTB4Y2ZkNTE2NTEsIDB4YTNhZjhmYzUsIDB4ZDllNzA1YmMsIDB4N2M3M2RhMWMsIDB4ZTZiNWVhMzQsIDB4Y2E3ZTg0ODUsCi0JMHg3OWI5ZDg1YiwgMHg3NWEzZDU5MCwgMHhmZTVjNGE2ZCwgMHgzOGE2NThmMiwgMHg0Mjg0MmMwZiwgMHg1NzEwNWZjYSwKLQkweDY2Mjg0ZmNjLCAweDFjNDE2MTM4LCAweDZkZjZjODRmLCAweDZmZGYzYjIwLCAweGZmNDJmMmUyLCAweDAzNzNlY2NhLAotCTB4Yjc5ZjE1ZTEsIDB4MzRiZjcyNTcsIDB4Y2MwMjE1NzAsIDB4OGYwNWY2N2UsIDB4YjlkZjkxZDksIDB4NWE2ZWY5NmQsCi0JMHhmNzk5YWU2MywgMHhmM2U1MGRjZiwgMHg0MDczMGQ3YiwgMHhhOTBhOGQ1ZSwgMHhiMzE2ZjhmMCwgMHg5Y2Y3NWFmYywKLQkweDU0Yjk0NWM5LCAweDBlMDk3ZjBiLCAweDU5YjVmZTdlLCAweGU0NWFiZWVjLCAweDRhMDM5Yjc3LCAweDJmY2VmY2QyLAotCTB4NDA4MWNkYzYsIDB4NjliYmFkMGIsIDB4NDdjZWM0OWYsIDB4OGZjNWY3NmIsIDB4ZDUzOTBiZjcsIDB4OWM3ZDNlZWQsCi0JMHg4M2VhZmQ4ZSwgMHg0ZTQyZmQwOSwgMHhmM2ZjNTBmZSwgMHg3ODcyN2MwMywgMHgxZTUzOTBkNiwgMHhmMzczYjFlNCwKLQkweDY3NTZiNzEzLCAweDdjZjBhNjdkLCAweDhmMzE2ZGUzLCAweDM4MTYxZmQxLCAweDkwNmRjMDZhLCAweDcyMDJlYjdlLAotCTB4MmQ1NDcwODAsIDB4Zjc5ZTc2ZTksIDB4ZGM3YWRhNDIsIDB4MDYwMzA2ZGYsIDB4Yjk0MWZlMWEsIDB4YjRlNDJjM2MsCi0JMHhlZDg3ZTA0MSwgMHg3ZmFmZGYxZiwgMHhiZGQwMGE0ZSwgMHhjNzRmYzNkMywgMHg1ZTAzNWZmMywgMHhkZjNlMzQ3NSwKLQkweDk1MmRmOWQ4LCAweGYxMTJmNWNlLCAweGIwYTZkZDU2LCAweGM4NDZiN2ZjLCAweDM1NWYxMTI3LCAweDU1NjlmODQzLAotCTB4ZTIyNWJlMjksIDB4ZGQyN2MxYWIsIDB4Yjc5ZTdmODQsIDB4MzdmOTZmZmYsIDB4YTYyMzVjZjQsIDB4ZWMyMjU1YTksCi0JMHgxZmY2YTg5YywgMHhkZGFlYjcyNCwgMHhmYjQzNWY3YywgMHg0YmZiZmIxMSwgMHhkMGRlNzVmNywgMHhjYzk4NjRmNywKLQkweGYzMzRiZGY0LCAweGY4YTVlYjE2LCAweGU1NDNiYjdjLCAweGU2NjgzMzc2LCAweDllMDZjYWU3LCAweDJjNWZkZjEyLAotCTB4YmIyNWY1ZjIsIDB4MzU3YWRlNzksIDB4ZTc0ZWNkNzQsIDB4ODMzZGZkYzQsIDB4NjlhZDYwNzYsIDB4YTI0N2M1MjksCi0JMHhhNWY4YzdjNywgMHg1ZDc5MzI0ZiwgMHhhM2Y3M2RiZCwgMHhiZjNlNTAxZiwgMHg2MzcxNDNhNCwgMHg2Mzc1MDdhNiwKLQkweGYxYzUyZjE1LCAweGU3YWZiMWJhLCAweDJiYWQ4ZjhjLCAweDFkMjVmOGM1LCAweGU4ZGIzNDhmLCAweDkyOTdlMjNjLAotCTB4M2ZiMmNjOWIsIDB4ODk0Nzc3ZmMsIDB4ZjcyNGRiZDYsIDB4NzhmZjdjMDQsIDB4ZTY2ZmUwY2YsIDB4NTM3MjVlOTEsCi0JMHhmZTdjZDE2NywgMHhkYTRiM2JlZSwgMHhmY2ZlM2U5MSwgMHhmZDZjNzcwYywgMHhmN2M1ZGM3OSwgMHhjMmFjNjRiNywKLQkweGE4ZWY2YWUyLCAweDQxNWE3ZmQ0LCAweDNkOWU4NWU3LCAweDVmN2JiZWNjLCAweGZiMjU1OTdkLCAweDIwOTc2ZmVmLAotCTB4OWUzYTE3MTcsIDB4MWQyNWVjN2IsIDB4ZjA3YmRkZTUsIDB4ZmFjOTRhYjQsIDB4NmFkM2NlYzIsIDB4ODVmMjZiZjQsCi0JMHg0NThlNThhYiwgMHhhYjZhNzlkOCwgMHhiNzhmNzU0YSwgMHg5NDZhZjdlYiwgMHgzZTE3YTdmMiwgMHgzNTU0ZTc2NCwKLQkweDNlNTNlNzk0LCAweGQwMWM5Y2Y2LCAweGJhYzc5ZmYwLCAweDRmMDk1MTVmLCAweDhjMTI2ZDBkLCAweDU3ZWQ4ZmM4LAotCTB4NDFmOTNmNTgsIDB4ZTM2ZTNmYTIsIDB4NjljMGQ0ZmUsIDB4ODFhNWMwOTUsIDB4NTViNzAzNTMsIDB4ZDg2Y2ZmYzIsCi0JMHg4Njk3MWM5MSwgMHg5ZTA4ZGE5ZiwgMHhiZTcwYTNlZCwgMHhhYmQ2ZGE0NywgMHhkMjNkMDc5NCwgMHgxMzdlM2YxYSwKLQkweDY4ZDM5OWQ1LCAweGE2ZTVjNzNjLCAweDliZmRmMWRkLCAweDMzYThmMDg3LCAweGVmZTg5ZDNmLCAweDFlMDRiMjRhLAotCTB4ZjA5OGExOGIsIDB4MWFhOTE4MzgsIDB4N2ZkYzQ2NjcsIDB4MWM2NmJhN2UsIDB4Nzk0N2I5MjQsIDB4MjM3N2M0NTMsCi0JMHhiZTRjZGViZSwgMHgyYTZiYTE3ZCwgMHgxOGZmNDVjNSwgMHhmZTE3ZDU4NSwgMHhjNmExZmYzMSwgMHgxNjY2NjVlMiwKLQkweGYwZTJjYmM3LCAweDU2OWU5ODFmLCAweGEyMmM4Zjg0LCAweGFmODI1NmY1LCAweDMyYmNlNDhlLCAweDdjYTBlYTljLAotCTB4ZGI5NDQ1NzksIDB4MjViMGIyZjEsIDB4M2Y4ODkwMTAsIDB4MmI4NzhiMTMsIDB4NzA4ZGI4MjEsIDB4YzJkODdmZDAsCi0JMHg5NTVmMjljZiwgMHhjMjA0ZGU1OCwgMHg3MjEyNmRiZiwgMHhiY2U0MjRkZiwgMHhkMWIxZWIwOSwgMHhhODgzZGRmNCwKLQkweGRkNDQxYmM3LCAweDllZDI3OWJkLCAweDM0MDI1NGUzLCAweDkzYmFmZTg4LCAweGU3MjRlY2M3LCAweGNmZmRjMDY1LAotCTB4M2ZmNzIwYjIsIDB4Nzg4Y2ZlODYsIDB4MThmNzY4OTIsIDB4ZmQyNDFlYTksIDB4NDAyZDg2ZDcsIDB4MTcyYzMzZGYsCi0JMHgxYjc5NjdmZSwgMHg0NmU5MWZmYSwgMHgzMjNmZDAzZiwgMHhlZjQ3ZTE5NSwgMHhjNjI3N2NlMiwgMHhmOGNlODZjZiwKLQkweDc4YjIwYmYxLCAweGYyMjgzYTNlLCAweDcxMmNhYWUwLCAweGI2ZjQyMDNlLCAweDRiNTIwMDYyLCAweDlhNjViZTcxLAotCTB4YjdiMDBlZWMsIDB4ZmViNGNjN2EsIDB4NDc4OGE5ODksIDB4NTY4NGZmOWMsIDB4YTI0YmUxOTgsIDB4OGRmZGEzNGYsCi0JMHg3YTBkZWZjOCwgMHhlMThiOWQxNSwgMHgzNWEzYTBmOCwgMHg3ZjdlYjYyZCwgMHhlYmQ3OGIyYiwgMHg5ZDY0NzMzNSwKLQkweGVmNTMxMGY0LCAweDRmY2IyYWFjLCAweDM3N2NlZjVhLCAweDMxYmZjNzBiLCAweGQzZDNjMzY2LCAweGNmMWRlYjYzLAotCTB4ZTNjMjIyOWUsIDB4YmM3ZjczZjcsIDB4ZjE1N2JlODIsIDB4ZDJmZjcxYjcsIDB4NjZmMzgxNTcsIDB4MmMwZWZlNTAsCi0JMHg1OWI3ZjYxZiwgMHhmODk3NTQwMiwgMHgzNzU0NGYxMSwgMHg5MGJjMjEyYywgMHgzYmE1ODZiZCwgMHgyZjU4MmYwOSwKLQkweGFmZjM0OTNjLCAweGRjM2IyYmE2LCAweGM2MTBlYWZmLCAweGY1N2U5YzY5LCAweGZjMzAzZmEyLCAweGY3Y2YxYzlkLAotCTB4OTExYjcyOGQsIDB4ZWEzMDdlYWMsIDB4NzgyZjg2ODYsIDB4NmYzYzZhN2UsIDB4ZmQ1OTQ3MzAsIDB4MTg5NjEwZDAsCi0JMHg1ZThmM2I3ZSwgMHg3ZTQ3Y2JjZiwgMHg5OGZmYmJmYiwgMHg1MGRiMWViNywgMHg5ZGIzOGYxNiwgMHhmNDhiYzE5NSwKLQkweGVkZTdjOTFkLCAweGU4NzlhNGQ2LCAweGI2OTcxZjkwLCAweDUwNjk3YjMxLCAweDNmMmMzOWEyLCAweGUwZjk4NDM5LAotCTB4ZGUzN2FjNmMsIDB4MWJkNTk0ZmUsIDB4MGY2ZDQ3OWQsIDB4Y2FiNDNjYjEsIDB4MzVmMWNlMzcsIDB4NjY4MjZhN2EsCi0JMHhjMzM2Y2Y5NiwgMHg5ZTUyZDYzNiwgMHg2ZGZmOWIxMywgMHg1MmVmZjA3MiwgMHg0ODM4OGEzNiwgMHhlYjg4MTNmNCwKLQkweGY2ZjYzODhkLCAweDgzZmQxYmIyLCAweDA1ZWE2ZmUxLCAweGJlODMzN2FlLCAweGEzNzQ5ZTdkLCAweDc2MTdhODlmLAotCTB4NjdiYTViNTMsIDB4ODk2OGE1M2IsIDB4YjBiZDUwNzksIDB4NTlmY2NjMjcsIDB4ODNjYzRiZGMsIDB4NmJjMDRhZGUsCi0JMHgyYzI5ZGJkMywgMHgyOTNmZWRjZiwgMHgxODRjZTgzYiwgMHg1MWYzZmJlNSwgMHg3ZTYxZWY5NCwgMHgxY2U0OTA1ZiwKLQkweGNmODE1M2Y0LCAweGQ5ZmY3MTVlLCAweGY5MzMyMTU0LCAweGQ2ZjBlNjk5LCAweDhlNTA5YmM4LCAweGE3ZmQzNzBjLAotCTB4Mjc1NDAyZDMsIDB4YTU3ZTFjOTQsIDB4YmI1MDcwODAsIDB4ZGFjNWM3MGYsIDB4YzdkMWVhMWYsIDB4ZjAwYTBmYmUsCi0JMHgyYTYwYTU3MywgMHhmYTMxZDNiYiwgMHg2NTdlMWZmNywgMHhlOWFkZTEzMiwgMHhiODhiMmZlZCwgMHhhOTE3YWU3ZSwKLQkweGNmZTczNzU5LCAweGQ3ODkyNTY4LCAweGQ3ODkyNmJmLCAweGE4ZTY1ZGJmLCAweGZmMmVlYTlkLCAweDg4MWJkOTIxLAotCTB4ZWZhMWFiZDEsIDB4YzA4ZTA0MGYsIDB4OGJmY2ViY2MsIDB4OWJhMzFhNTksIDB4YTYxZjFjYzIsIDB4ZmFlMmRlNmUsCi0JMHg4ZjM5Zjk2YiwgMHhhMWJmZDZjMiwgMHhmMzcxMTJiZiwgMHg4ODBlZjEzNSwgMHg1ZjgwYzQyZiwgMHhmM2Y4NjAxOSwKLQkweDdlMzEzNjlmLCAweDczMDdhN2ZjLCAweDRlYmVlMzYyLCAweGZmMjA4ZWYzLCAweGNjMDc1NGQ3LCAweGY5MDJhNDlmLAotCTB4M2E2N2Y0NWQsIDB4ZGZjYmNiZDUsIDB4ZWE3Y2IxYjMsIDB4MTVhZWMxNzgsIDB4YzgxNTdmY2MsIDB4YjFlYmZlNDAsCi0JMHhjNjI2NmJiNywgMHg1OThkOGJjNiwgMHgyNTRjM2YzMiwgMHgxNjUyZTQzOSwgMHg1ZjVmMGNmMywgMHhkNjE5YTFjOCwKLQkweDhlMDI3Mzg4LCAweGI5MzM4ZmU3LCAweGVhZmFjMTVmLCAweDg5Y2Y2NGNmLCAweGU2YWRkNWY1LCAweDE2ZGQ0ZGM1LAotCTB4ZmY2NDczYTAsIDB4Y2VmYjBiMDUsIDB4NGRlZWYzZTQsIDB4MmY4NzdlYWMsIDB4ZGZjOTEzN2MsIDB4OGQzN2NmODAsCi0JMHg2ZjBlYzdkYSwgMHgzZmNmNDg5YSwgMHgxYTc5YmMzZiwgMHg5YTk0ZjczYiwgMHg0ZTk5ZTJlMywgMHhiZTUyZTVmYywKLQkweGMzNDczNjc0LCAweGIzZWVmYWZlLCAweGZhYjhiYmVjLCAweDRmZjE4NTZlLCAweGNiM2M2Yzc0LCAweGVmZTdlNmM4LAotCTB4ZWM2YzQ3ZmQsIDB4MDI4MjQzN2MsIDB4MWYxODAzOGUsIDB4ZTc1ZDZmMzcsIDB4YThiZjJjZWIsIDB4NTg5ZWM5MGIsCi0JMHg4ZGVmMTgzYywgMHhiMTcxZTZjYiwgMHgyMGUwNWIzMCwgMHg5ZTk4NzkyOCwgMHgxNzViNzgzYiwgMHg1M2YxOTk3YSwKLQkweDFlOTkwNGFiLCAweGRlMTRkYTliLCAweGNjNWJjZWRmLCAweDNhMWYxOTNiLCAweGJmZTI3NGI4LCAweGY5YmZjZTgzLAotCTB4ZTczYjA4YmQsIDB4M2VjYzkxYzAsIDB4MDcxNTI3MDYsIDB4NmJmZDIyNzYsIDB4MWQ3Mjg0N2EsIDB4M2Y4MDk4MGMsCi0JMHhlNGZiYjBiNywgMHgxOTg1MTM5NiwgMHgxM2MxZmI4NCwgMHg4YjI1NjcyZiwgMHgzZGQyNmYxYiwgMHg1NGU1NDIwYSwKLQkweDEyNDNhZjNlLCAweGYzNjUyZmZiLCAweGU3NTM4N2YzLCAweGI1M2IzZmI5LCAweDk5MzEzN2MwLCAweDkyYTFkMzVmLAotCTB4OTA5MmU5ZDcsIDB4MzRiMmE3NzcsIDB4NDVkYzdkZDksIDB4MzFiZWRmMzEsIDB4NGZkYTI5ZmEsIDB4ZGQ4ZDg3NmYsCi0JMHhmOTNhZjVjNywgMHgwM2MyZWE3OSwgMHgxNDk5Y2QyNywgMHg5OWE1M2I3ZiwgMHgyNzZhNDcxNCwgMHhiZTg4YmJiZCwKLQkweDljYmE0MDAzLCAweGU0NmQ1YWZjLCAweGFjNzdiYjEwLCAweGVjNThlYjZmLCAweDQ3NDdjMjQ5LCAweDMyZGZjNzM2LAotCTB4ZTY3ZGY5MzUsIDB4M2JmZjQ0YjcsIDB4NzUxNmNlZTAsIDB4YWUxMzJlZDQsIDB4YzUwYWNlZjcsIDB4MWRlNTkzYjEsCi0JMHhlODkxYjQ5ZSwgMHg3ZTEyZWY4NywgMHgwYTk1ZWVmOCwgMHgwMWRlNTNjYiwgMHgxNmY3ZTE0ZCwgMHg5NTYxN2VmYywKLQkweDA5NzdiM2YwLCAweDIyYWFiY2ZmLCAweDU3YmUzZmI5LCAweDM5ZmFiM2NjLCAweDE3ZWU5Mjc4LCAweGM3ZTI3YjU2LAotCTB4YmRmMjJiZGQsIDB4ZjM2MWUwMzUsIDB4YTEzNGJkZGYsIDB4Zjc3ZGU0NWYsIDB4YzFmMjEzN2EsIDB4OGI4N2UxNmMsCi0JMHg3MGZjODhhMCwgMHhlOTAzZTMxMCwgMHhjNmQ4YjFiZCwgMHgyOWYyZWNlMiwgMHgwOWU2OTIxMywgMHhkMmZmZDFjNywKLQkweGM0MjcwM2Y3LCAweGZlODYwNDc3LCAweDY1ZGY4YTliLCAweDkxZDRlYmYxLCAweDk5MzkyZmYzLCAweDQxNDFiNmZmLAotCTB4ZTFiMWZiOTIsIDB4ZmRkODY1ZjgsIDB4ZTJlZjVjM2QsIDB4YzFkZWExYmUsIDB4N2ZmNDM0NzksIDB4ZDhhMzJiMTUsCi0JMHhmZjQzMmQ3MywgMHg3ZjczNjc0ZiwgMHhiNmNmYmI1OSwgMHhiMGJlZjYyNSwgMHhhMzhjZTgzZSwgMHg1YjkxYTFmZCwKLQkweGZiZjhjNTJlLCAweDhjNzM4MTVhLCAweDczZDhlNjAxLCAweGRmNjQxNzkwLCAweGY0ZDlkOWQzLCAweGNiMmY2YjNkLAotCTB4MmMwNzcxYWYsIDB4ZjJiZWUxN2UsIDB4MmNmMmJlYzQsIDB4ZWFlOTcxMzEsIDB4NzE0OWY1YzgsIDB4OTczZmJjM2MsCi0JMHgxNjdmZmRjZSwgMHg1YjE0OGY2YiwgMHgwN2Q1ZmQ5OCwgMHg2YmRkMDBhNSwgMHgzZGI4NDdkNSwgMHhiMTIzZGZkNiwKLQkweGNlYTJjMjczLCAweDg1N2JlYzIzLCAweGI3MjQ4YmI1LCAweDMzYjFiYjg3LCAweGEzODE5ZmM0LCAweGNmMWU1NjU1LAotCTB4YzkwY2JjMGQsIDB4ZmE4OGUwNGIsIDB4MjVkZmJlMjksIDB4OWUyMjdiZTIsIDB4NjJjZjQyMjYsIDB4OGYzZWZmOWEsCi0JMHhlY2VmYTZlNCwgMHg3NWEzOGE2ZSwgMHgzMGE3NWZkMywgMHgyMTFjMzM3NCwgMHg5YmYyMTUyZSwgMHgyNGZhNzg4OSwKLQkweGYyNDlkN2RiLCAweGVkNzFmYWMzLCAweDU0ZmY5YzE0LCAweDg0NzljN2YxLCAweGQ4OWI4NjlmLCAweDFkODU2ZmQxLAotCTB4NGZkMzRiZWQsIDB4M2JhZmZjNTEsIDB4MGZkNWVlMjAsIDB4MjRhMjg3MTQsIDB4ZjJjMDEzOTcsIDB4Y2Y2NzVlYzAsCi0JMHgxZjllNDZmNiwgMHhmYWY1N2JiMywgMHgwZjdkOGQ4OCwgMHg3NTRlMWY1OCwgMHg2Y2VlODhkYiwgMHg3NTRjOTk0YSwKLQkweGE3NzY1ODY0LCAweGYzYTJiZDIyLCAweGRmYWEyMmY0LCAweGVmZjM5NDU3LCAweDAxZDQxYTNjLCAweDNhYjY4Nzk2LAotCTB4YmY4OTI3N2QsIDB4YjhhNmVlOTUsIDB4Y2Y4Mzc0ZmIsIDB4ZDEzZGUxOWIsIDB4ZTEyNDVkY2YsIDB4ZmNmNWZmNjQsCi0JMHg5NzIxNDVjZiwgMHg3MmQ3OTNjNiwgMHg5ZDdlMTMyNiwgMHg1MzY1ZGZiZSwgMHg0NWZkNzkzYywgMHhmY2Y2YWU5NSwKLQkweDljNTk1ZjkzLCAweDhkMzhkMWE5LCAweDc2ZDk1YjhkLCAweGUzMWQxYjY0LCAweGNmNGZmYzFhLCAweDRlZmUzMDc2LAotCTB4MmMzMTgxMjksIDB4YjViZDJjYmYsIDB4MGU5YTRiZWYsIDB4ZjI5NTMxYmQsIDB4MjcyM2JlZTksIDB4MzgzMWFhYTcsCi0JMHg3ZjQ0NmRlZiwgMHg0ZDdmNDQ5ZCwgMHg2YmY2MTI2MCwgMHhhZDI0YWQ2NiwgMHhiNzBlZjkxMSwgMHhiMWY3N2Y2NywKLQkweGU4NWYzYTFjLCAweGE1MmUzYjI1LCAweGUyOWRhY2Y2LCAweDNiYzc3ZDY0LCAweDc3OTQwOWY2LCAweDk4ZDZmMTc0LAotCTB4NjY1ODZhZWYsIDB4MmQxY2MwZTMsIDB4OTYzZDM3YmEsIDB4N2YxOTI3YmYsIDB4MWU3YzgzNTcsIDB4ZGRkMTY4ODAsCi0JMHg1YmZiNjI1MywgMHg0MGZkYWZmZSwgMHgwM2YzMGU3YSwgMHg2MDNmMzhkMSwgMHg3YmFiMDljOCwgMHg4Nzk5ZDU5ZCwKLQkweDllOWVlYzJkLCAweGJmNjI1YmVlLCAweGUxY2UyYWNmLCAweDE2MzY2OTdlLCAweDczYWY2NDNkLCAweDkwYjk5ZWU4LAotCTB4M2MzMzMzNTIsIDB4MjIxOWI0NDAsIDB4MDdkZDE3NjYsIDB4ZGRmZTY0NDcsIDB4ZTdlNjE4ZGEsIDB4NjdmNTg5NjcsCi0JMHhlODQ3MjM5YiwgMHhlMjM5Y2RiYiwgMHhmNDJlNzI3ZSwgMHhjM2I3NzFiMCwgMHhlMDNkNmIwMCwgMHgwOTViNTMzMCwKLQkweDU4NTZkNjZlLCAweDZjYTljYjIzLCAweDY1MDYwZDJmLCAweGM3MjQ3ZmQyLCAweGU1NmNiY2VjLCAweDRjOTBmMmJmLAotCTB4MzM3MmMzZGYsIDB4MWU0MzY1YzMsIDB4ZjE2M2RkMzIsIDB4ZjcxMmZmZWYsIDB4ZjFjMzk5NTMsIDB4ZmRjM2RiMzgsCi0JMHhmNDE2YTUwZiwgMHgwNDA1NjZkZCwgMHg2ZGY5ZmRkOSwgMHhlOGY3MTUxMCwgMHgwZjMxZjdjOSwgMHgzN2JhMzdlYiwKLQkweDk5ZDMwZGJiLCAweDAwOGYyNjE0LCAweGY2OWYzZjFiLCAweDRmZGIyNzIzLCAweDMzNTMzOTc0LCAweDdmMTA3MjJjLAotCTB4ZjRjNzI0NTIsIDB4ZWZhZGVhNTUsIDB4ZDgwNzNmYTMsIDB4MDMwZGY2YmMsIDB4MGY5NzhmN2QsIDB4YzNiYTNiZGYsCi0JMHhkZjQ3YmM2ZiwgMHgwZjFlNGE5OSwgMHg2ZGQ1MGVmYiwgMHgxZDUwOGI0ZCwgMHgxZGU4ZGE4MywgMHhlODA1NjNmMiwKLQkweDU2YWE3MzM3LCAweGZlMWNjY2U2LCAweGMwN2MxZjllLCAweGZjNDhjZmJlLCAweDdiYjY5ZjllLCAweGJiZjg2NzI1LAotCTB4ZDI3YmUzMmYsIDB4OWEzNTgxN2QsIDB4MmViMWYxMDksIDB4MTE5NmVhY2IsIDB4YmNkNjY1MWYsIDB4NjU3YmVjMTksCi0JMHhlMTI1NmZhNywgMHgzNmQ0ODJlYSwgMHgwZTYyNGQ4MSwgMHhhODc5NjRjYywgMHg3ODJhNTVjMCwgMHg5MmZmNjgyYSwKLQkweDAyN2RmOGM3LCAweGM1ZDE3ODYwLCAweDAzOWViN2Y5LCAweDUyMzhmN2VjLCAweDJiZjdmYzJkLCAweGFkMGUyMTc2LAotCTB4OGQ3ZTg2MmUsIDB4Mjc4NThmYmUsIDB4ZWY5NDZhMTYsIDB4ZGQ1YTc3NmUsIDB4ODg1OWNmOTQsIDB4N2U2MWQ0ZGYsCi0JMHgzYmZjYWM1YiwgMHg1ZTZiMTY4YSwgMHhmMWI4ZmM4MCwgMHgzY2EyNTg1ZCwgMHgzZDE2NTA1YiwgMHg1NmRkMGVjYywKLQkweGZjMjcyZjk2LCAweGM1OWI0N2ZlLCAweGNmOTIyZGY3LCAweDQ3MmJkM2I3LCAweGYyNWMxZTUwLCAweDJjYjlmOWFiLAotCTB4Y2M3OTQ3MmYsIDB4YmE2MWU0MzcsIDB4NzAyOGY3ZjEsIDB4ZmRhMWRmZmYsIDB4ODJmZWZlMjcsIDB4MDQ1NDZmYjEsCi0JMHhjODQzOGYwMywgMHg4MzgzOTBkMywgMHhjNzcxNDRmNCwgMHhmNDMyN2E4MywgMHg5ZjJjMzA1YywgMHgwZTVjMjk1ZCwKLQkweDUyNDE3ZDBhLCAweGM4ZDVkZWM4LCAweDZmZjcxMzVlLCAweDAxYmZlZmVjLCAweDhmMWEzZWMzLCAweDAwMDAzNDMwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHg3OTkzMzMxZSwKKwkweDBmMjBmMjY0LCAweDAwODRmMTAyLCAweDAyMTg0MmEyLCAweDI3MDg4Nzg0LCAweDAxYThjNDIxLCAweDU0YmM4MDgzLAorCTB4NDg0MzNjMjYsIDB4YmZhODExMzIsIDB4MjY3N2JkNmQsIDB4YjVhZDExMDQsIDB4YmMxYjY5NTEsIDB4MTQxMDFkZTgsCisJMHhkMWEwNzUxNSwgMHg0MGU4MWMwNiwgMHhkYmRhYjExNCwgMHhkNWE4ZjhhOCwgMHg0MDQ0NTA3NiwgMHg4YmNiYzI0OCwKKwkweGFmN2ZkNTJkLCAweGU2NDljZmI1LCAweGQ0NDg0YzljLCAweGZmZmZiZmY2LCAweGRiZjNmMWZkLCAweGQ5Y2ZiM2VjLAorCTB4ZGFmNWVkN2IsIDB4ZjZiZGFkNmIsIDB4OWEzMmMxMWUsIDB4ZTQyMjRlMjQsIDB4NjVhM2Y4NWIsIDB4ZjQ4NDI3ODQsCisJMHgwYWRiMmNlOSwgMHg2NDkxOGZkYSwgMHg4YjJmZmM0MiwgMHgxMDhlMzZmMiwgMHhmMDhlNzdlZSwgMHhiYzg0NTFhNCwKKwkweDk4MGI5OWI1LCAweGNmYmMzZDY5LCAweDlmYWQwODQ2LCAweDYwM2QzNGRlLCAweGZmNjQyMmNlLCAweGVmMDJiMzA4LAorCTB4OGY5YWRlOWYsIDB4YmQyZmM5ZjUsIDB4N2I2ODE0ZTcsIDB4MDBiYzRiZDUsIDB4MTNiZWQzNzUsIDB4MTA5ZDg4Y2UsCisJMHhhMWU1YjlhZiwgMHhmNmYzZTk2YiwgMHg4NWIyNzg5NywgMHg5M2ZjNDUwZSwgMHg5MDg1MjQ0ZCwgMHhmZWMyMTY2MywKKwkweDUyZmFiMjJlLCAweDZkNTZhYjJiLCAweGY0MDc3ZmRlLCAweDI2NjRkZTViLCAweGQ1NGZkYTU2LCAweGFlZDM2NWVlLAorCTB4ODc2NWY1YTUsIDB4NTRhZjAyNDQsIDB4ZmE5NWFiNmQsIDB4MDBmMmZhZDIsIDB4OWFmYTg0MTcsIDB4NzFjNjdmN2QsCisJMHg3OTQ4MGFkYSwgMHgyNzIxMjg3MCwgMHg1ZjIyMTY3ZCwgMHg5NmNlZWI0OSwgMHg3OWY0NTk5NCwgMHgxMTY3NjA0NSwKKwkweDgzYjE1ZmJjLCAweGZiZTg5YjczLCAweDdmZjY5YjE1LCAweDM0NTdmZDBjLCAweGRhNzkwMzhhLCAweDM2ZWQ4YWZmLAorCTB4NjM2MTBmMjIsIDB4MWU2MDRiN2YsIDB4YmMwMWE2NGIsIDB4YzQ4ODZmNTUsIDB4OTdlNWViNGMsIDB4NzAwNDQ5NTYsCisJMHhhNTRiZDQyNCwgMHg2MWZmMTgwZSwgMHgzOGMwNzY0OSwgMHgwZDFjNzA4NywgMHhkMGNmNTU5ZiwgMHhkNTc3ZTg3MSwKKwkweDk4NmU3MDJmLCAweDc4ODliNTVhLCAweGRkZDY5ZTAwLCAweGRhNGYzOWQ2LCAweGQyYjU1ZTYxLCAweGY3N2VmODYwLAorCTB4YjdiYzEyN2QsIDB4YjJmNjUwMmMsIDB4MzZmODA2NTUsIDB4ZTcwMDQ1NGIsIDB4ZDJkMmNkYTYsIDB4YWRmZDlkYTEsCisJMHgwZWE2ZmVkOCwgMHhkOTBkNjNhZSwgMHg3NmE4OWVhOSwgMHg0N2QyNzk2MywgMHhhY2VlNmM4OCwgMHgwNGEyMTA1NywKKwkweDQwNzcwMGVkLCAweGYzYWMzZTlhLCAweDgxMmU3OWY5LCAweDNmZDBkMTkwLCAweDY3NGI2NDRmLCAweGM4MzA5NGZmLAorCTB4ZThmN2ZlMDcsIDB4ZjYwZjgxM2YsIDB4YjJkYjAyM2EsIDB4ZDJiNWU5M2EsIDB4NzcyZGZmNDUsIDB4NGJhY2ViZDIsCisJMHg5ZWQwOWZhNSwgMHg1NmJmZGQxNywgMHhhMDc0MDQzZSwgMHg1Y2ZiZDRmMCwgMHg0YmUyM2U1OCwgMHg0ZjgzNzJjMywKKwkweGNhZmRiYzQ2LCAweDA2Y2IwNDM3LCAweDNmOWYxYjlmLCAweGU1OGIxYmU2LCAweGU1ODI5ZjI2LCAweDJjNjJiZTEzLAorCTB4N2M1MmJlMDMsIDB4MGU2ZjhiNmYsIDB4MWU3ZDViOTYsIDB4YWY5NGZlN2MsIDB4YmVlZGNiMWMsIDB4YWNmZTdjMWEsCisJMHg3NzJjNmVlZiwgMHhmY2Y4ZmNmOCwgMHgyYzdhZGYwNSwgMHgyYzdhYmU4MywgMHhiMDFhZjk3NywgMHhmMDA1ZjQ2YywKKwkweGRiN2Q5N2JkLCAweDA1ZjI2Y2IxLCAweDVmMWVmOWYxLCAweDVmMjE5NjEzLCAweDQwN2RjYjE4LCAweDdkODY1YTVmLAorCTB4ZjAxZTU4MmQsIDB4YWJlNTg4N2QsIDB4Nzc3ZTA4YmUsIDB4Y2IxYzc3ZDAsIDB4M2JiYzU1MDcsIDB4ODE3YzkwMjcsCisJMHgxMGE5Y2RlMiwgMHg5MjE3MTUxNywgMHg4YmU0YTI1OCwgMHhjYTU4OWViNCwgMHhmOWI3MjllYSwgMHg0ZjVhMjVmMywKKwkweGM1M2FkMGYxLCAweDcwY2FkZjYzLCAweGZiZDY5OWJlLCAweGNjZjZiMGQ2LCAweDg1ODE0ODdiLCAweGFjZmQzM2Q2LAorCTB4NGE4M2MwN2QsIDB4MDdkNjk1ODEsIDB4YzFmNmIzZDQsIDB4NzEwNWZjOWIsIDB4YzAzODNlYjQsIDB4MTFkZWFmZGEsCisJMHhmYWQxYjAyZSwgMHg5ZWQ2NDFkNSwgMHhlZDkzMjIxMywgMHg2NjEzOWViNCwgMHg5NGI3ZGNmNSwgMHhjZjVhMGVjOSwKKwkweGJjZjU2MTZkLCAweDlkOTNmZDhmLCAweDYxMTc5ZWI0LCAweDE1M2Y4ZmRmLCAweGViNGYxYzllLCAweGZiNTlkYmUzLAorCTB4ZDBhNDRiYzQsIDB4MDkxM2ViNDUsIDB4N2IwMmY1ODcsIDB4YWQwMjYxN2UsIDB4YmQ1OGI4MTcsIDB4MjA5OTVmYTgsCisJMHg3ZGJmZTBjNywgMHhhMTExNjQ2MiwgMHg3ZmRkYjBiYywgMHhkM2E0MjJiMywgMHg0NTU5MTRiYSwgMHhmZTlmMTRkYywKKwkweDhiMGY1ODM5LCAweGJmYjQzMTY0LCAweDg0NTMyZmU1LCAweDkxMmViNDcxLCAweDE3ZmVkMGQ1LCAweDFmYjYwNTdmLAorCTB4NmY2YzY1MTAsIDB4ZjZjMmFmZjcsIDB4ZWQ4YzkyMDMsIDB4YjA3YmRhYTYsIDB4NjBhOGFhZmUsIDB4YmRlZDcyN2IsCisJMHg5MmFiZmVmOCwgMHg2YjgzZWQ4MiwgMHg0MWZhYzIxZiwgMHg2M2VkODNkMSwgMHhlZjhkN2Y2YiwgMHhkODNjOTQxZiwKKwkweDgwZGFjOGZlLCAweGZmZWI0ODUyLCAweDAwYjY3OWMxLCAweDllNzFkNzVmLCAweGZjMGQ5MjcyLCAweGE1MmI0YzFhLAorCTB4MjM4ZWJhZmMsIDB4MWUzZTQwNzMsIDB4ZjJhNmE2MDAsIDB4NTI1ZDJlYjAsIDB4ZmJlZGJmNDAsIDB4M2M5M2RlNDcsCisJMHgzMjc2ZjJhNywgMHhmNTNlOTdkNCwgMHhmM2Y2MTY0MCwgMHhkMjIzZjYxYywgMHhmYjllZjg3ZSwgMHg1OGNkZjg5OSwKKwkweGJmMTMzZjVkLCAweDY5ZmFkNzI5LCAweGFjZWFmNzg0LCAweGRmNjdlYmJkLCAweGYwZjVlMzM3LCAweGY1YTE1MzdjLAorCTB4NzFmYjE3YjMsIDB4MTM1ZTZlZjQsIDB4ODdhMDlkYmYsIDB4YWQ0YWRiZTcsIDB4NGZkODgzOWYsIDB4MDllMGVmNDIsCisJMHhmZDc0NjM4YiwgMHg1YTY1YzU4NCwgMHg3ZWM0N2YzZiwgMHgxZTBlZjRmYSwgMHhlYmE3MWE0NSwgMHg2Yjk2OTE0NywKKwkweGZkODg3Y2ZkLCAweDlmYWVmN2E0LCAweDFlYWQ3NGIwLCAweGQ2ODU2OTFlLCAweGE3ZWMxMWNmLCAweGE1ZTZlZjdmLAorCTB4YzNkM2FmOTgsIDB4ZmFkMmFlNjMsIDB4Y2Y3NDg5MzksIDB4MDczZjVkZWEsIDB4MWNmYzdhMWMsIDB4ZTdlMDc0NzAsCisJMHhhODMzYzIxYywgMHg3MDJhZjM3NywgMHhlMDUzZjFlYSwgMHgyNWNmYzBlYywgMHhkZWFhZTdlYywgMHhhOWMwNzNmNSwKKwkweDY3MDFjZmM3LCAweDBlNDQ3ZTA3LCAweDc3YWMzNWU2LCAweGQ3ODgyYWYzLCAweGJlMjBhN2UzLCAweDBlNGUzZjAzLAorCTB4M2JkMTE5ZTAsIDB4YTNlZDVlNzgsIDB4N2RhYmNmYzcsIDB4OGE5M2YwM2EsIDB4MWRlZThjZjAsIDB4N2EyOTg1M2MsCisJMHg3NGE2MTRmYywgMHg3ODQ2NDdlMCwgMHg5ZmFlZjVjNiwgMHhmOGY0NTM1NywgMHgwM2E1MzU3OSwgMHgzZjYxNTczZiwKKwkweDVlNmVmNWQ3LCAweGZjN2FhOTg1LCAweGUwNzZhNjE0LCAweGM5ZmIxNzI3LCAweDc4NDc2Y2Y3LCAweGQxYzdlZDA4LAorCTB4ZmIwNzNmN2QsIDB4YjA3M2YxZWIsIDB4YWU3ZTA3N2YsIDB4ZDBhNjdlYzUsIDB4ZWU3YmIyN2UsIDB4OGY1MzI4YTcsCisJMHgwZWNjYTI5ZiwgMHg5ZTIyMTRmYywgMHgzZjVkZTg2ZiwgMHhmOGY1MzMwNywgMHg4MWQ5OTgzOSwgMHhjZmQ4YTk5ZiwKKwkweGFiY2RkZWQ0LCAweDdlM2QwYWU4LCAweGY4NjBhZThhLCAweGMwOGMyNDk5LCAweDlkYWU4Njc1LCAweDcyN2U5ZTZlLAorCTB4ODU3Y2JmN2QsIDB4MmVmM2VmYTMsIDB4NmU1ZGU3NTYsIDB4YWYwZjc2MDIsIDB4NDVhNDMzZDksIDB4ZjZmYmU5ZTEsCisJMHgwZmI5MDkxZCwgMHhhNmJiNjg5MCwgMHg4ZmMwNzZlMCwgMHhkMTc5NWE4MywgMHhkOGZjNGQ3NiwgMHg5NTFkOWQzOCwKKwkweGVhZWEyNGEwLCAweDc1N2RjNTQ5LCAweDFkMjlmN2VmLCAweDlkNGY2YmEwLCAweDNkYWViNTczLCAweGFiYWI5M2RkLAorCTB4ZDc4Zjk0NjcsIDB4YTZiZmRmYmQsIDB4ZTJiZjU3NDAsIDB4ZWY3NTFiZWUsIDB4ZDE2ZmY5NjcsIDB4Y2ZkN2IzZDUsCisJMHhhODNmYmRkMywgMHhmZGFlYTE3ZSwgMHg1ZDBhODZjYSwgMHg5NTgxNTVmYiwgMHhkYjM1ZmFiYSwgMHg3ZjdiYTI3ZiwKKwkweGFlOGQ3MDU4LCAweDAzZDM3ODdkLCAweGUxMTFmNmJhLCAweDkxZjU3NDQ3LCAweGJkZDMxZTg3LCAweDhiNjViYTNmLAorCTB4ODdjYzdkYWUsIDB4YzdkYWVhY2YsIDB4ZWFlOTc2NDUsIDB4YTNkZjFlZDcsIDB4ZjZiYWZmN2IsIDB4YTRmYWJhMDMsCisJMHhiZGQ3YmY4YiwgMHhkNWRlNGY5ZiwgMHgzZjk2ZGJkYiwgMHhlMjlmZGVlYiwgMHg3ZWQ3NGNmYSwgMHgwNjk3ZGE3ZCwKKwkweDNhZWVkNTNiLCAweGU3NWE4ZDc2LCAweGZhMDhhZTQxLCAweDA5NzRmZTI1LCAweDQzYjBkNWVkLCAweGQ3ZDRiYWMyLAorCTB4YzcxNGZjY2UsIDB4ZTUyOGY5NTIsIDB4MjJjMGU5MWYsIDB4OTJmOTE5MzksIDB4MjFiYjUxZmUsIDB4OTVmOTZmYmYsCisJMHhhZWZjZmExMSwgMHg1ZDJiOWVmMSwgMHg5MjVkZjlmNCwgMHg4NjJiYjg2NywgMHg4ZGY5NDM3ZCwgMHhjYTUwNjkyMywKKwkweGVkOGQyODI2LCAweGRmOGM4OWY3LCAweDBkMmUzMjBiLCAweGY3YmY0MjNlLCAweDI3MDdkYTlhLCAweDNlNzBmYWQwLAorCTB4ZjFmMjA4M2YsIDB4YmI0MjY3MzIsIDB4MzUyNzhlM2EsIDB4OTk5YzVlZjAsIDB4NWY3NGRmYTAsIDB4ZmU5M2RlNTYsCisJMHhkZjU4NzkyOCwgMHg1YzE5ZGE5ZiwgMHg0NWViYmY2NywgMHg1MWRhMWE0ZiwgMHhjMWY4OWZiNSwgMHg5ZmQ3NTljZSwKKwkweDIxMmZhYmNlLCAweDg0OWY3MGFmLCAweGY3ZTkwM2ZkLCAweDc5YTY5N2ZkLCAweDg5NjY3ZjY4LCAweGUzZDExOWZhLAorCTB4YTFmYzc0NGIsIDB4ZTQxODdlMzgsIDB4M2Y4YzIwZTEsIDB4ZTZmOGViYmEsIDB4ZTM3NTYzMDEsIDB4NzVjYjMyNWIsCisJMHgzYTI0NWJlMywgMHhkZjkwOGJiZSwgMHg4ZWFlN2VkNywgMHg5ZTMwODk0ZiwgMHhjZmI5Mzc5MCwgMHg2NjczN2M3MSwKKwkweDlmN2Y4ZTM5LCAweGU4YWVmZDQ0LCAweGM2M2FlM2YxLCAweGJmZjk4MTZmLCAweDA3ZmNkZGRmLCAweDNmY2ZkNzhjLAorCTB4N2YzZjQyYjMsIDB4YTNmZmNkODksIDB4ZjhlYWQzZGEsIDB4M2ZmZjM4NzEsIDB4ZmNkOWE3NzMsIDB4ZmNkODJiMzMsCisJMHg4ZWRmYWNjZCwgMHhmODFkOWRmMSwgMHhjN2Y4YzA4ZiwgMHg5Y2RmMTliYSwgMHhmZjNmNDEzZCwgMHhmM2Y1MmEyYiwKKwkweDRmZjFiMzM3LCAweGM3NTA1ZWQ2LCAweDVmZjhlM2I3LCAweGZjZDgxNzcyLCAweGYxYzRhOGFmLCAweDBkYzdiMzI1LAorCTB4YzQ2NTIzZmMsIDB4ZjhlODA0ZDUsIDB4N2M1NTFmYTQsIDB4NzQyZWMwYTksIDB4MjQ4NzI4MWMsIDB4NjQyMWExNTIsCisJMHhlMTAwMzcxYiwgMHhmMThlMmJiOCwgMHg5NDcxNTdkYiwgMHhmOTlmNTBkZiwgMHg1MDA5MzlmMSwgMHhmZDQ3OTljZCwKKwkweDU3ZDc5NTQ2LCAweDQwOTdjOGVjLCAweGY1M2I2MWVmLCAweGEwYTg5NmI3LCAweDkxZTI2ZTJlLCAweDczMDZjOWJmLAorCTB4Yjc4NTEwNjAsIDB4NDNmNzg5YjUsIDB4ZWI4NmYxN2QsIDB4YmQ1ZmEwMDIsIDB4MTRhMGIyNjYsIDB4MTg0ODEzYmUsCisJMHhjYmZlN2Y5ZSwgMHhlN2EyNWI2MSwgMHhkNDk3MmM2NSwgMHg1MTIyYzc4YiwgMHgwN2UxZDZmMiwgMHgzNTIxOTAxNiwKKwkweGMwMjliZTE0LCAweGViM2JhMzA0LCAweDBlM2Y1MjlmLCAweGE5OGZlMzFjLCAweGZmYTg0M2RmLCAweGM2Yzg5OWYzLAorCTB4ZjdmNTBiZmIsIDB4ZmVhMTFlYTAsIDB4YTRjZTNhMWUsIDB4ZGRhM2JmMTYsIDB4ZjBhMzRlMWQsIDB4N2ZmMGFhOTcsCisJMHhmZDc5MzAyYSwgMHhlMDJlMzZmNCwgMHhkNWY5ZjJhNywgMHg3ZmEwNDc4ZiwgMHgxYjZlZTBiZCwgMHgxYzI3N2E0NSwKKwkweDVkMjRmZTY1LCAweDBmY2JjZTlkLCAweDZkZGY2YTc0LCAweDEwZTE2YzBlLCAweDZiZTAzMmJmLCAweDIxMjY4YTNhLAorCTB4NTA2N2Q2OGIsIDB4ZmZiZTc3NWMsIDB4MDdhOWJlYzEsIDB4YjcyMTI3MzksIDB4YTU0YzQ1MTIsIDB4OWFiZWRmZWYsCisJMHhlM2EyZWZlYiwgMHhiOWNjNTJjZSwgMHgzMjUyMWQ2YywgMHgyNGQ3Mjg0YywgMHg5MDk2MzRjMywgMHg4ODQ3MWE1YiwKKwkweDVkMzIwN2I0LCAweDQ0OGQzZjExLCAweDU4YTMzYjhkLCAweGFhNTU5ZjVmLCAweDhhOGFiN2FmLCAweGI1NzBhMjY4LAorCTB4NjZjOGU3NGUsIDB4MzllY2VmZGEsIDB4OWM2ZDc2ZmEsIDB4NDY0NGE2ODEsIDB4NTJiYzc1NjcsIDB4ZmE3NDkzOGEsCisJMHhiOTk0MzY2OCwgMHg3NDg1ZDhmMCwgMHhkZjYyZTM5ZSwgMHgxNzc4ZjA2YSwgMHg3ZThjMjQ4OSwgMHgwMTBmYmZiYywKKwkweGYxOTNmYWJhLCAweDM2MmU3OWJkLCAweDczYmMyMzZmLCAweDRhNTI4YjQ0LCAweDhjYTczOWU3LCAweDFiN2YwMDBmLAorCTB4OWY2OGZmZTEsIDB4ZDBlNTMxNGQsIDB4MjJhM2ZkNzIsIDB4OGY5ZDc1MzEsIDB4MWViOWZlMTEsIDB4MjI4MjdjZTMsCisJMHhjYmYzZjNhYywgMHhkZjE5Y2Y4ZCwgMHhmZmU5NTMxYywgMHgyZDA3ZjAyOSwgMHhhMGZlMDBiZiwgMHhmOTU1MWZmMCwKKwkweDMyYWY1M2EzLCAweDNkOWFmMGZlLCAweGRhMWY4MGQzLCAweGU5MDRmMjM3LCAweGFkY2JmMmFhLCAweGE5MmNiZjJhLAorCTB4MjEwNWYzZDcsIDB4YjhlODExMWUsIDB4ZmI5NzBlNmMsIDB4Y2MxZjE0NDAsIDB4NTk2MGY5NTYsIDB4NmU2ZjllODMsCisJMHgzZDMxN2UyNywgMHg2ZWU2NWQwNiwgMHg5YTZmN2NkOCwgMHg5ZjdlNzVkYywgMHhmZjMzN2NhOCwgMHg5Zjg4ZmRjMSwKKwkweDc0NjRmM2FlLCAweGQzYTU0M2JhLCAweGY2ZmEzNWVkLCAweGRlYmE1NTViLCAweDRlNzVkMmFlLCAweDUxYWZjM2MzLAorCTB4YzllNjQxZjUsIDB4ZGRlNDExMDEsIDB4OWU4ZDUzZmIsIDB4M2QzZDFkMTEsIDB4NzA4ZDNkMmEsIDB4ZjNkMmExZGUsCisJMHg3YTMzMWY4ZSwgMHhhODhkZTExYSwgMHg5YzM0OGNmNCwgMHhhZTgwYzkxMywgMHg1YmUxMWFmMCwgMHhmOTk3Nzc3MCwKKwkweGNjYWI1YzYwLCAweGRlOWU5YjFmLCAweDQ3NTVmY2E2LCAweDA1NTc5ZWEzLCAweDM0NzU1ODZmLCAweDZjNTZjZTRhLAorCTB4MmZhYmFlOWYsIDB4YmRkNWNjMGYsIDB4NGNhMWFjYmYsIDB4N2VhNGJlZDcsIDB4ZDE3ZGFlYjksIDB4ZjU3NTNiZmEsCisJMHg3NThmZmYzMiwgMHhiYmI4MmZlZiwgMHg3YjdlZDc1NiwgMHhmNmJhZmRjZCwgMHhlYjBmZTVmOSwgMHgxYjNkNzNlYSwKKwkweDllY2ZlZjc1LCAweDNlZDc1OWIzLCAweDVkMTlmNGFiLCAweDlkZTI4Y2ZiLCAweDY1NzRmYWJhLCAweGQzN2RlZWI3LAorCTB4MDY2ZWFiYmUsIDB4M2RlYjdjZmUsIDB4NzEzZDgwOWUsIDB4YzYwNWZkYzEsIDB4NDViODJmMzMsIDB4ZDQ3M2JjMzcsCisJMHgxZjVmMjMyNywgMHhmMmMxMGRmMywgMHg3YzhkY2ZiOCwgMHgxNjM3ZDI3ZiwgMHg2NmE2ZDZjYiwgMHg3NDEzYWMzYiwKKwkweDEyNGE1YzVkLCAweGNkMzI2OTA4LCAweDBmZGY1ZGFiLCAweGViODI2OWQ2LCAweGE5ZTRjODY5LCAweGIzN2FkM2Y1LAorCTB4Mjg3OTQ2NDksIDB4Nzg0ODkwNjksIDB4MmMxYzIxMjQsIDB4ZWQxYzJhMzYsIDB4YTQ3YjU0N2MsIDB4YWEwNmY2ODcsCisJMHhiNmJhOTNmOCwgMHgzZjYyNDQ5NywgMHg3NjUyM2VmNywgMHg3NzY1ZjAwNSwgMHhjYmZkMDNlYiwgMHg0ZGE3YmIwMCwKKwkweGVkOGRlYmI1LCAweDhkMjkxYzk1LCAweDFhYzg0ZTdlLCAweDYyNmFjMzg0LCAweGM0YTU0Nzc2LCAweDU3NzJiZmU0LAorCTB4NDI3MTAxN2EsIDB4ZTZiODNjM2QsIDB4MjkwNWUzNzIsIDB4OWYwMmE3OTMsIDB4NzhlNGViNjQsIDB4M2EzNWMzNTksCisJMHg5YTIwNGVmZCwgMHg2ZGY4MDdkYywgMHg4YWY5ZWVhNCwgMHhiZWVhZDdlZCwgMHg0NzlmYjUzYiwgMHg1NzQxYWJiOCwKKwkweGIxNjU4MzhjLCAweGU4MTMzM2Y0LCAweGU2NzM3MGUxLCAweGE3MDA2MThjLCAweDRkZWIxNDcyLCAweDNjMmVkMDdkLAorCTB4NzU1ZTJiZTUsIDB4YWZkMDEwNzQsIDB4YmVlM2NiMTQsIDB4ZjMxZTU4MzksIDB4ZWEzY2IwNzksIDB4NTNmMmM3MmIsCisJMHgxMTk2MGQ1ZiwgMHhmZTU4ZGRkZiwgMHhmMmM3ZTdjNSwgMHgyYzdhZGY2MywgMHg2M2Q1ZjIzZiwgMHgwMWFmYTFmOSwKKwkweDAxN2RmN2NiLCAweGI2ZmIwZjJjLCAweDJmOGVmOTYzLCAweGFmOGI2NTg4LCAweDlmNTZjYjA5LCAweDc3MjZhNTgyLAorCTB4NzFkZGYxM2QsIDB4MDkzZTFkNzUsIDB4Y2Y4MzE3ZmMsIDB4ZWQ3ZjNhYTQsIDB4N2M5ZDA5ZmEsIDB4ODdkZmM3MTYsCisJMHhiOWUxYTY3YywgMHhmMmFjYzFhNCwgMHgxZjhlOGE0MywgMHg0Mzk3YzAxMiwgMHhiZGExZWIzZSwgMHhiMGY5NTQ0MSwKKwkweGI3NjNlZmJiLCAweDZiZmNiNzdiLCAweDBmZWE2ZGY4LCAweDdlNGViN2U0LCAweDUzZjAzMGNhLCAweDM0ZmM0Zjc2LAorCTB4YTdlMjhmOGMsIDB4YjMxNzI2YTksIDB4ZmE3ZTU0N2IsIDB4ODYyM2NjMTksIDB4OGMwZjMxNWYsIDB4ZjY1MTNlOTAsCisJMHg4MjZmOTI5YSwgMHhiYWE1NmM3NSwgMHg2MDFmNDIwZiwgMHg3NjNhYWNmZCwgMHgwNWI3N2QxZCwgMHgxMGMwYmFlZCwKKwkweDBlY2UzNzU4LCAweGQ4NjBkYmY5LCAweDIxZmIzODQ3LCAweGY3NTY3ZTI1LCAweDQ5ZjIzM2YzLCAweGQwNTc3OGY3LAorCTB4YTAxYTU5YmYsIDB4ZGFlYTRmNDQsIDB4Nzg2MzhkNmUsIDB4MzE0ODlhYjUsIDB4ZmRkYWViYTEsIDB4MmY3MjllODMsCisJMHg4MTc1OGExYywgMHgwMWY3YzIyNCwgMHg4YzQ3NzRmNywgMHgwY2FkYTk3ZSwgMHhhZjA5ZWRmOCwgMHg3MmFmOGU3NSwKKwkweDhmNjNiZmEwLCAweGNhMGYzZGZkLCAweDJmNjYyNmE5LCAweDY4ZjMzNWM3LCAweDkzZjA5M2I3LCAweGM3NmZjMDZlLAorCTB4YTc3NjY0YmEsIDB4N2RiZGJjNDEsIDB4YmI0MmU0OTAsIDB4ZTNkNjRjODEsIDB4YzNhMDVmY2YsIDB4NDcxNGZkZGYsCisJMHhkNmVlYjgyZCwgMHgwNmZlMjFhNywgMHhiZDM4MzU3ZSwgMHg0OWViZjgxNywgMHhjZjg0ZjdiZiwgMHg3ZmVmMzA4NSwKKwkweGQyN2IzZTAxLCAweDQ1ZTkzZDhmLCAweDM0MmZjOGEyLCAweGVkYjdmOWQxLCAweDgwZmI5NjFiLCAweDFlNWVlMzBjLAorCTB4OWFmZWRhZGYsIDB4N2U1ZjllMTEsIDB4NGI2ZTNlNDcsIDB4MjViOGY4ZDEsIDB4YTQxZjgwOTMsIDB4YzZkOWNiY2EsCisJMHgyZTgxZTMyYiwgMHg0MGY0ZmQxZCwgMHg5Zjc3ZWU0ZiwgMHg3ZWZmODI2NCwgMHhkZmRmNGIzYSwgMHhlMmZlYzY3ZCwKKwkweGE3MGRjMjI1LCAweDg5MjQzYWUzLCAweDkyYmY1M2M0LCAweGQxZTM2Y2Y3LCAweGZjNDc3MTlmLCAweDY3ZDgzNzEwLAorCTB4ZTBjOWQ3NzMsIDB4YWZmYzllMzcsIDB4ZWIzZDBjYjAsIDB4MGY2NzBiZTMsIDB4M2YwNGU5M2QsIDB4NWYxYTY1NmMsCisJMHgxZDA2MzQ3MywgMHg5ODJhYjJiNSwgMHhmNjhmNjM1NSwgMHhmNWY0OWE1NywgMHg3MTVjZjViMywgMHhjNzI1ZTcxMCwKKwkweGViMDYxY2NmLCAweGE4ZTZhYjhjLCAweDBkM2Y3YTA4LCAweDk1OWZhZDRiLCAweDczOGUxMjY5LCAweDNjNzY3YjcyLAorCTB4NGMwMmZmZjMsIDB4NDA0OGVjOWYsIDB4NjdkMjczN2QsIDB4ZDlmZmY3YzEsIDB4OGZkNzc0ZjAsIDB4OGQyMTBmMDYsCisJMHhlODBiMzNlNCwgMHhkZDk2ZGE3MywgMHhjYWRkZmJmZCwgMHg4MjVlNzA4MywgMHg4OTA5MjlmOCwgMHg2OWJmODE1ZiwKKwkweDNiN2ZmZmE1LCAweGIwMTVmYTAwLCAweDBkZWJmNWFlLCAweDcwZjM3ZWYyLCAweDM3NDNiZTc4LCAweGQ2NGVmZDFlLAorCTB4YmJlMThjZjYsIDB4MjA0ZWU1ZWUsIDB4YTdiZTM0YzcsIDB4YmFhYmZiZjQsIDB4YmI2MmJkYmYsIDB4Yzc2ZjQ2YjUsCisJMHhkZWVhZTgyNiwgMHg5ZDFhZjRhNiwgMHgwMGZmMGI1ZCwgMHgxMzg2YmRjMywgMHg1NGFiMDk2MCwgMHhiMDRkYjBkOSwKKwkweGRhN2UwN2FmLCAweGYwNDljMTAzLCAweDVlZjYzODVmLCAweDc5MjIyNTk1LCAweDE2OTcxNDY0LCAweDYzODVkM2UwLAorCTB4Njc5N2ZlMzUsIDB4YTllYTk5ZmYsIDB4MDQ4YTZmMTMsIDB4YTI1YzhjZTQsIDB4YWVhOWU1NTAsIDB4ODk5YmYyMjAsCisJMHg5MTdkNjg5OCwgMHhjNmMyZjZmYSwgMHg2ZWIwMjUxNSwgMHgyNmY5Nzg5ZCwgMHg5MzE2NDNmNCwgMHhjN2Y4Mjc1MiwKKwkweDBmM2VhNGU1LCAweDg5YTdiNWUyLCAweGYzZTQxOGE5LCAweDM5Yzc3OTM0LCAweGFkMWU0YTMyLCAweDJlOWQ4NDgyLAorCTB4ZTNiN2FmNWEsIDB4YWJhZjdmYTksIDB4ZDdkMDZiMmYsIDB4NTI1YjkyOTcsIDB4ZTk3ZWRmNjAsIDB4MzgwNDkxMDYsCisJMHhmNmZhMWJkMCwgMHhmNjE3NzlhZiwgMHhhY2Q0OGNiYiwgMHg1N2ZiNzU4MywgMHhhMTZiYmM2YSwgMHg1NDE5MDg4YiwKKwkweGY2ZmQ1NTZmLCAweDBhMzJiY2YxLCAweDcxNjA0Yjg3LCAweDdhMWY2ZDE2LCAweDdmZjMyMjc5LCAweDI0MDY2NjJhLAorCTB4NTlmZmJlODUsIDB4YTk1YmM4ZTMsIDB4MDdkZmEyMDYsIDB4YmM3ZWMxZDYsIDB4NmY3MTNhN2YsIDB4ZjdlOTVkMjMsCisJMHhjMjM3ZTE1ZCwgMHg1ZDAzZDlhYiwgMHgzODU1YzNmNiwgMHg0YTczYjc5MiwgMHhjYjFlODYyMCwgMHg2NzI2MzgxNCwKKwkweDEwMmJiZWFhLCAweGM3YjhiYTVjLCAweDdiZmQ0MzM0LCAweGQxMzI1M2YzLCAweGRlMWVkM2YxLCAweDY2OGMyNzkzLAorCTB4YzBmYzAzZmMsIDB4ZTc5MmVkMDksIDB4ZDY5ZmY0ODcsIDB4N2Y4MmZmYTUsIDB4NjhmZGZmNmEsIDB4ZmViYTc5ZmYsCisJMHhmYjUzZmRhNywgMHhmZTA1ZDgxZiwgMHhhZmZhYjE3OSwgMHgyZmYzZWRmYSwgMHhhOTNlYTlmYiwgMHg0ZTk3ZjE3OCwKKwkweDEzYzlkNzQyLCAweDliOGE3ZDQyLCAweGRiNzJiNWQyLCAweDk2ODU0ZWJkLCAweDEzYmYwNWM3LCAweDgwNDRmNWY4LAorCTB4ZWY0NThlMmYsIDB4MTU0ZTA1ODcsIDB4NDFjZWM1NDIsIDB4NDlmZTBkZGMsIDB4ZWNmOTNmZmIsIDB4ZjExZTMwY2YsCisJMHg4NWQxMzZkNSwgMHhlNmVkYjRmMSwgMHg2MWNhOTliMCwgMHgxMmYyZTM3NSwgMHgyM2Y1ODM5MiwgMHgxOWRmN2VhYywKKwkweDdhNGRlYTFlLCAweGZhNzhhYmZlLCAweDFmOTAyOTk3LCAweDhkNDUzOTQyLCAweDllZDE4NTJmLCAweDc5ZmFkZWFkLAorCTB4NWU0ZmFjMTEsIDB4NjQ3MjhlZDIsIDB4YmZjNjBlZmMsIDB4YWZmYTg4OTgsIDB4ZGFlZjhhNGMsIDB4MzhjNGUxNGUsCisJMHg4YmM1NTc4MSwgMHg2NzY3ZjFiNywgMHgzNzk0Mjc3OCwgMHg4MmZhMDE3YywgMHhjN2U4MjI3YSwgMHg1NzJiYmYxYiwKKwkweDgyMzVkNGVkLCAweDhkOThmOTIzLCAweDE5MGM3YmZlLCAweGMzNTE3YTAzLCAweDNiMzAwOTBiLCAweDVmOTllZWI1LAorCTB4NzBhMTFjZTcsIDB4YTZmYWRhOWQsIDB4OTdjMjhiOTMsIDB4ODM2NzRmMjYsIDB4OGY3M2ZlOGIsIDB4NmRkZWJkZGMsCisJMHg2ZDE2ZjJhNSwgMHg5NmViNjkwZiwgMHhkN2RhYTRkYywgMHg4YTU2NTYyMSwgMHhmM2U0Mjc2MSwgMHhkZDE2NmU1NCwKKwkweGYyYjhmYTdlLCAweDdhOWYyN2Y5LCAweDdmOTllMjBjLCAweGQxMDdiYjMyLCAweGZmM2M1N2ZlLCAweDY5ZTNmYmRhLAorCTB4MzE0ZWM1N2QsIDB4YzM0ZDg0YjksIDB4ZDI3NGE1Y2UsIDB4YmZmZjRiYzcsIDB4MWU5M2I3M2IsIDB4NGQ3OWJmMTUsCisJMHhlN2IxODc5MiwgMHhkMjc2MjRmNywgMHhmZGNlYzU2NSwgMHgxNWQ2MTkxMiwgMHhmYjgzOTMxZiwgMHgwNjNkODhhNSwKKwkweDhhNDc4MjdkLCAweDdiYTg1ZWMwLCAweDg4MjViZmU2LCAweGM3ZDg5ZTMzLCAweDE4YWNkNDkxLCAweDFhZmNkY2Y4LAorCTB4Mjc4MDAzZGEsIDB4YWY0YWE3YTQsIDB4ZGUxOWZhMGUsIDB4ODBiYTUyZjcsIDB4Y2JkMjM2ZGUsIDB4NTUyMmRlZjgsCisJMHg5MGJmNDBiZiwgMHhmYmY5NDE2NywgMHgwNzkwM2Q4NSwgMHgwZGQ5OTFmNSwgMHg2MTdmMjg3OCwgMHhmM2U2MTM5NSwKKwkweGY4YzM1MDg1LCAweDUzN2JmMWZjLCAweDhiOTU5ZjQwLCAweDk2MTcxNGZlLCAweDEzZjk3OWVjLCAweDViZmU0MjNmLAorCTB4NTI4ZmY2ZjYsIDB4OTQ0NGJlMzAsIDB4NDVhZTEzNzQsIDB4ZTc5ODc0ZmUsIDB4NzBiMzRkOTIsIDB4MDc4OTRiOWUsCisJMHg3MWZjYjBmOSwgMHhjYjQwMzRiZSwgMHhkZTI5MDIwYiwgMHhhYzRlNDMxOSwgMHgyZjkzOTMyMiwgMHhkMmUyNTBiNiwKKwkweGZlMDE3ZTc5LCAweDc3ZWZlODI0LCAweGI0MzZjMGY4LCAweGEwMjRlZmJiLCAweGNlYTQ3ZTBmLCAweDU4MGM1YTg1LAorCTB4ZjQ2MTYwYmYsIDB4MmViYWFiZmEsIDB4YTMzZWIwMTAsIDB4N2RlYjc3ZjksIDB4OTNhNzQwMmQsIDB4ZDg1NDk1ZmQsCisJMHhjMTEyZjE3NywgMHhmYjgzZTJhZiwgMHhiZmNiZjY5NiwgMHhkMTk1MjUzZCwgMHg5ZTQyYzg4OSwgMHhmNzVkMWRmYSwKKwkweDc4NzNjMzI3LCAweGFjNTQ0NWJmLCAweGM4ZWZiYTM5LCAweGUzOWQ1OWI3LCAweGE3Yzc1NmFmLCAweDdhYzFjNzcwLAorCTB4NmM0YTQ1ZmQsIDB4ZDQ0ZjM1ZmIsIDB4Yjc1ZDAwZjQsIDB4NGEyY2Y4YTMsIDB4NmZmYzk5ZGUsIDB4YmJjOTlmYmQsCisJMHhlOTgxZmYyNiwgMHhmZTdlZDBjNSwgMHhmODIzOTMzMCwgMHgwYTQzZDYwZSwgMHhkYjE1Mzg1NywgMHg1MGU0Y2ZmNywKKwkweDNhM2Y1MDNmLCAweDE1NmY5Yzk2LCAweGI3ZDczOTU1LCAweGMyODVmOTFiLCAweDUxZjE3MDJmLCAweDI0ZTMwMzdjLAorCTB4ZGY3MDFkMjIsIDB4ZmEwNmU5NjUsIDB4ZjUxZTk0N2QsIDB4YWVjZWI4YzIsIDB4YmM3MjZhZmQsIDB4NDU1YmYzNGMsCisJMHg5YjIwM2ViZCwgMHhkZWU4MWU5OCwgMHg5ZTIzZjJhZSwgMHg1M2MwYzUyYSwgMHg1MmZjODE4ZiwgMHgyMGNiZjU3OSwKKwkweGNjMjk2MmJmLCAweGNkMWRjYmZmLCAweDcyYTNjZmVmLCAweDkzNTA2NWZiLCAweDM1NWViZDViLCAweGFlZjk2ZGNhLAorCTB4ZGM5NjI0ZDEsIDB4OTM3NzY5N2UsIDB4OWY0YjcyOTgsIDB4N2I1Yjk0YzcsIDB4ZmZmOWY5MDQsIDB4ZjBkNTVlYjQsCisJMHg3OGYwMGMzOCwgMHgzNTFlMjc0ZCwgMHgzZTFkZDkzZCwgMHg5MGYyN2E4ZCwgMHg4ZDVlMjMyMCwgMHgxZGZlOTI3YSwKKwkweGY5NWQ3OTI2LCAweDhkNDNlMzUxLCAweGFiOWUyYWZmLCAweDUxZjQwMmJhLCAweDdjNmE5ZjA3LCAweDFhYTdjMWQ4LAorCTB4ZWY4OTc2MWYsIDB4NmM2OGYwZWEsIDB4MzRmYjAwYmYsIDB4OTZmOWFlMTQsIDB4NTI4ZWQzOGQsIDB4NGVkMmQyNTcsCisJMHg3ZjI2ZGY3MCwgMHhhYWZiOGYyNiwgMHhlNTg0ZjM5NiwgMHhmMzExMTA4MSwgMHhkNTMwM2Y0MywgMHg3NTNiMDY4YywKKwkweDNkNmZkZmUyLCAweDc3ODUxNzdkLCAweDJjOGJmMTNlLCAweDQ0NWVhMDJmLCAweGI3ZDJmZmJiLCAweGYzYTA0ZWRmLAorCTB4NzllMmE3OTksIDB4NTRmYjQ1M2UsIDB4MDIzOTk3NGEsIDB4NzBhMzhlMTcsIDB4M2Y4ODE1Y2UsIDB4YjdlMjExM2UsCisJMHgwYTM0ZjkxYywgMHhmYWU1Zjk4ZSwgMHg0YzRkZmMzYSwgMHhhN2E3ZWNlOSwgMHg5ZmFiYmZmNywgMHhiN2NiN2RmMiwKKwkweDFkM2Y1ZDI5LCAweDUwYmJjODQ0LCAweDEwYmMzODhhLCAweDgxZDM1N2NkLCAweGRlN2YxNGFlLCAweDAwNjA1YzUxLAorCTB4NTA4OGE5ZWEsIDB4YmQ3N2U1MWEsIDB4ZjNmYjMyMjAsIDB4YTMxOWMyZWQsIDB4OWZjOWJlYzEsIDB4ZjE5ZTJjM2QsCisJMHg3YmY0NjBmYiwgMHgzYjNlYWFiZCwgMHg0MWUzOTdlYiwgMHg2NTBkOWZjZiwgMHhmNjdiN2ZhMywgMHhhYzQ3MjJkMCwKKwkweDk1NjZkMGJjLCAweGY3NTM1ZWNmLCAweDVjZWNkYTVkLCAweGJmZjk0ZjNkLCAweDdkYTNiNDhkLCAweGM5NWJiN2UzLAorCTB4ODJmYjE4YjYsIDB4NWY0ZDQ1MWIsIDB4N2ZhMzc0YWIsIDB4OGU3ZjFkM2MsIDB4ZTk3Mzg3Y2EsIDB4NTFiOWYxYTcsCisJMHhmNTM5OWI3NCwgMHg0YWVjZTA4NCwgMHgzNGZiZjgwNywgMHhhMWZiMGZjYSwgMHgwNmJlMDVmOCwgMHgyMzViMzZmYywKKwkweGUyMzFhNTQ1LCAweGY4YTljZjc5LCAweDZiZTA3ODliLCAweDBjMmRjZmNjLCAweGM3ODAwYmU1LCAweDhiYWYzYjQyLAorCTB4YzlhOTNjODMsIDB4MTQzMjUwZWIsIDB4NjA3ODlhZTAsIDB4NTM0N2NmZjksIDB4ZTIxZWY2M2UsIDB4ZWI4ZjkwZGQsCisJMHgzYzkxOWQwZCwgMHgyMzYxZmMzMSwgMHhiMDdmYTEzZSwgMHgyZTg4OGYzMywgMHg2MjdiZDdjNCwgMHhlYmMwMTJlOSwKKwkweDA0YWNiMzdiLCAweDk1ZGYzNWY2LCAweGUwYjE1NWRjLCAweGY1YjMzMzJjLCAweGJkMjkyZTY2LCAweGJmZmI4YTMwLAorCTB4YjNmOWJmMGYsIDB4OGEwMmUxMWQsIDB4OTY3NmIzOGYsIDB4ZmY5NWRkZjcsIDB4NzU5ZmRjOTgsIDB4MGU1YTgxNzEsCisJMHhmNTY3OTBmOCwgMHg3MTAwMmU2NCwgMHhmOWUyMjJiNCwgMHhlNTBlMDRmOSwgMHhmZWI0NTI3ZCwgMHhmZTlhNmZjYSwKKwkweDU0ZjVlNDNjLCAweDg5OTczODg3LCAweDExMGI1N2I2LCAweGRiZDhmODA5LCAweGZiMDA1M2I0LCAweDI4OTkyNmZkLAorCTB4NmExMDhmMTgsIDB4OGE4Y2NkODYsIDB4MDUxMTFkN2IsIDB4ZGZmMzU3YzQsIDB4ZjgwZWRkZTYsIDB4NGNkMzM3M2QsCisJMHhlODY1MmUwMCwgMHgwMWQ4MjcxOSwgMHg1MTIzNDJlNywgMHhkNzliYmEwZSwgMHg1YTY0N2MxZiwgMHgxMGZkMDhhMSwKKwkweDNmMjMwZmU0LCAweDc0ZGIyNTE0LCAweDQ5OTM1OWY1LCAweGRiYTUzNzNmLCAweDk1NjQ3MzQ0LCAweGVhZmQwNjNiLAorCTB4YmQ2N2M2MjQsIDB4ZmY5NjZmZDYsIDB4MDRkYmY0Y2YsIDB4NWYxOGRmYWEsIDB4ZWRmYWQxOGIsIDB4N2RmMTg5MjYsCisJMHg4ZDRiN2U5NCwgMHhkNjU2ZGZhNSwgMHgxN2MwYTljYSwgMHhhNzY2ZjcyYiwgMHhiZTU3NWQwMiwgMHgyYzRmYTRiMSwKKwkweDhmYmFmNmZkLCAweGE4NmZmN2Y5LCAweGZkNmRlNjc5LCAweDFlMWI3ZWE4LCAweDUxZmFkZmE1LCAweGFlMjMxNmZkLAorCTB4YTVlYTVhM2IsIDB4Y2ZmY2IzN2UsIDB4YTBlYmRmYzgsIDB4YjdjYzYyZGYsIDB4YTY5ZmM1NTgsIDB4YjU0MzhhZGYsCisJMHhmYjhhZGZhOCwgMHhhOTdjYmFmMSwgMHhmYTRmNTI0OSwgMHhiMzk3ZWNhZCwgMHg2ZGJhMmViMCwgMHhmMDA3ZjgzMSwKKwkweDBkZWRmYTBhLCAweDM4YzFjZjU1LCAweDVkZmVlN2EwLCAweDNkMjc3ZDcyLCAweDNkNWJkNTU3LCAweDY3ODQzZmY3LAorCTB4ZWNhZGNmNGQsIDB4ZDMzZGExY2YsIDB4OWU5OTBmOTUsIDB4ZjRjNTk5NWIsIDB4NGNiZGNhZGMsIDB4YzQxY2FkY2YsCisJMHhiZjUxOWNmNCwgMHg2ZmQxNzQxNSwgMHgyMWVhZmJlYywgMHgyM2Y0N2JmNCwgMHgxYjdkN2ViMywgMHgyMzk5MmY2ZCwKKwkweGZkZjQyZGJhLCAweDlmM2I1OTEyLCAweDVhM2EzMzUxLCAweGQ0YmJmZGRmLCAweDlmNzNiZThkLCAweDNkMmU3M2MxLAorCTB4ODIzZmJiZTksIDB4N2E4NDFiYmUsIDB4OTFjODIwNmMsIDB4MWM2ZTNmOTEsIDB4ZDNlNWQzNjgsIDB4YjFmNWY3YmQsCisJMHg3OTA0NWVlNywgMHhmZThmMDNmOSwgMHhlNjI2MDdmNywgMHhmYWZiZWQyNywgMHhiYjkwNDhkOCwgMHhhYTFlMDBmNywKKwkweGY5NTE5ZWVmLCAweDQ3ZTdkNWFmLCAweDI4NzkzYTdkLCAweDdiYWFmNzkzLCAweDFiYWFmZTE4LCAweGQ1ZGYzNjM5LAorCTB4NzU4NjQwN2MsIDB4ZDExNzZmZTAsIDB4MmY3ZGJlOGYsIDB4OWI2N2EzZjMsIDB4YzBkOGZhNWIsIDB4MjI1ZmZmY2YsCisJMHgyYmZkMjVjYSwgMHg4N2UyOGIyOSwgMHgzMDJiMTczOSwgMHhjZTJiYjllZSwgMHhjY2ZjMDViOSwgMHg4MGIxMDIzOSwKKwkweGQwZTBiYjFkLCAweDdlYzAyNzhkLCAweDNkNzE3MDVkLCAweGUwMGJiZGRhLCAweGM4ZTkyMjc5LCAweGExZGI5OGZiLAorCTB4ZWJmNmY1MjcsIDB4YWY5ZGE2YmMsIDB4ZjlhZTkwNjUsIDB4OGNjZDEzMTAsIDB4NzE1NzEzMmUsIDB4NWQ1OWNkODEsCisJMHg1ZGE4MjNmMywgMHhjNjJkZjk4NiwgMHhhYmRmODkzYywgMHg0N2NkOWZmMywgMHg4ZmU0NWYxMCwgMHhlNWY4Y2M3YywKKwkweDcyNzg4ZGVmLCAweGFkNTRiYzMzLCAweGFhNzhmNWU2LCAweDg5ZTI2MmUxLCAweDJjYTRiYTUyLCAweGI3MmYxM2E1LAorCTB4OTc1OTE0YmYsIDB4MzljYmVkMDEsIDB4ZjM4Y2I3ZjQsIDB4OWM2NmYwZDYsIDB4Y2Q0Nzg2YmYsIDB4YmVhMDU5YmYsCisJMHgyNDc0M2YzZiwgMHg4Njg4OWU2NiwgMHgyMmY5MmVlNywgMHhmODBkZGUxYSwgMHgzM2QzNGI3OCwgMHgyMDYxOTBkNywKKwkweDNjOTgxZjk3LCAweDdjMGQxZjNmLCAweDE3OGE3YmY0LCAweDczYWRlNzBhLCAweDJiY2VlOTA3LCAweDY1ZTJhM2JkLAorCTB4NjE0OGU3YWEsIDB4MjQ3ODBjOGEsIDB4ZjM2N2MwMzUsIDB4OTZiZTc3Y2EsIDB4YjM3N2U3NDIsIDB4MjEwYjk1OTIsCisJMHg5MzdmNTlmNSwgMHg2ODhmMTAzYywgMHgxZWEzYjZiNiwgMHg5NDcwZjhkNCwgMHg1OTg1Yzk5OSwgMHhmNWVmMmJkNSwKKwkweDdhZTIxNTc1LCAweDUwYjljNGQzLCAweDNkMDZjMmJlLCAweDc5OTllNmE3LCAweGQ3ZjI2MWVmLCAweGJhZjdmZGNjLAorCTB4Njc4ODUxOGMsIDB4OTE0ODJlNTgsIDB4NWQwMTVlYjYsIDB4ODZhNzNmZTgsIDB4NDBiYzVkMTgsIDB4NjljZmZhMTcsCisJMHhlMDIwZmRhNCwgMHg3Mzk5M2FiZCwgMHhhNmZkZTE4NywgMHgzZjAyZjc5ZCwgMHhjZmE1NmViZCwgMHgzOWNiY2U0MSwKKwkweDBlODYxNmY3LCAweDY1Y2E3YTdiLCAweGM1ODg1OGY5LCAweGM4Y2MxOGM3LCAweDE3M2Y1Y2ViLCAweDVkODk3YmMwLAorCTB4ZTY4OTkzZWQsIDB4OGUwMGY3OTYsIDB4MzY2ZTU0ODksIDB4ZmQwMGMzYzMsIDB4NDZmZThhMmYsIDB4MDdjOGM1ZmIsCisJMHg3NTAzZTUzZCwgMHgyYWI5ZWZjNywgMHgzYTA3NWY5ZSwgMHhlZGRmMDFkOCwgMHhkZTQzZDgxMiwgMHhiNDdmNWIzMCwKKwkweDE3MjBhZjc2LCAweDNhMzRkZTIyLCAweDY1ZjVkMTM0LCAweDI5ODNhMzE0LCAweGQ2NmY5ZTA2LCAweGJkOWUyYWVhLAorCTB4ZWY4NDRlMjEsIDB4NmZmZWEwNmYsIDB4N2ViYjA3MTIsIDB4ZjhkNDFmNWYsIDB4YzU3NzJjZGQsIDB4ZDIxNWM0MTMsCisJMHhlODA2ZjRhMywgMHhjZDdkZThiNywgMHgxMWI3YTZlYSwgMHhhNmFlMzc1ZiwgMHgxNWRjOTllNiwgMHg0MDdkMWE1ZiwKKwkweDZmMGU1ZTBmLCAweGQzNGZjYWRkLCAweDYxNzk5ODkxLCAweDQ2N2U1NWRmLCAweGIzZjJmNTk5LCAweGU2ZmVkYWNmLAorCTB4ZWRhYjg4NzAsIDB4OTBhZjUwZTUsIDB4N2UyZTgyNTAsIDB4ZWNjY2QzMzAsIDB4MDdhYjY2OTYsIDB4MGRmZGJjZjksCisJMHhlZTQ1YmRkMSwgMHhhOGE2N2ZhYSwgMHgyNTdmMDE3NCwgMHg2NGUyN2NmYSwgMHg0ZGU4MDg5OCwgMHhhNjdjOTU5NywKKwkweGUzMDA3YmNkLCAweGUwZjVlOGI3LCAweGU5MDdhYjc1LCAweDMzZmY1ZGQ3LCAweGVkZmVjY2NjLCAweGVhZDMxZWNlLAorCTB4OTA3OGMzZDcsIDB4YzdlYjI4ZDcsIDB4NWE0N2FlMzMsIDB4NzlhN2E5NWMsIDB4YmY3MWQ0NzksIDB4NzFiNGJjZWYsCisJMHg4NGJlZWJiZSwgMHgzYzYwYjQ5NywgMHhkODlmZGI0ZSwgMHg4OTc2N2JjMywgMHg3MzE2M2Y2MCwgMHgwYTEwN2RiYSwKKwkweGZlNmZlZTM5LCAweDU5YmZmYTEzLCAweGZmN2RkZDFhLCAweDUzMGEzZjEwLCAweGUzYmViZjNjLCAweDlmNjM4YzQ5LAorCTB4MzRjOGY2N2UsIDB4YWYxNTlmOTAsIDB4ZTU0MmM0ZjAsIDB4ODM4Nzc1YWYsIDB4ODg5ZTU5ODQsIDB4NDU0Mjc2MDQsCisJMHg1ZGZiOGYyMywgMHhjZGU3MDg0NCwgMHhhODMzYjI4OCwgMHhmMWYwYzMyNywgMHg1ZWY1MDNhMiwgMHhhMDczMmVjNSwKKwkweGYxNWY3ZTg0LCAweDEwMzk2N2YyLCAweGMzNWQ2YjdmLCAweDU5ZmY5ZmY0LCAweDkxZmQxZjk1LCAweGE4MDdjODFjLAorCTB4YmNmZWQ4MTAsIDB4YTg4ZjNlOTEsIDB4Yjc2YTc5ZmMsIDB4NmZlODBlNmQsIDB4YzczYjNiNmUsIDB4MmQ5YzExNWIsCisJMHgwY2UyYTM5YSwgMHgxNjQ1OWJmNywgMHhjMzZkZGVlNywgMHgzM2ZmNmMzYywgMHgwMzMxZTYxYywgMHg0OGU3ZDE3YywKKwkweDUzZDBmY2I1LCAweDVjYmQzMGNmLCAweGUwMDYyNGQxLCAweGY2YzU3MDNjLCAweDE3MTBhZDlkLCAweDhjZDBmOGFmLAorCTB4ZmI3N2FiZjYsIDB4ZDNlYzA5MTksIDB4Y2YzZTJmYzksIDB4ZjEzNzFiY2UsIDB4OTc2ODc4YmEsIDB4M2U3NmU0MzgsCisJMHg1OWY4ODY2YywgMHgwMWVhMTU2MywgMHhmNTgyM2Y1YSwgMHhmYmY3MWFhMCwgMHgxNWIyNzE4ZSwgMHhkOTdkZWUyZiwKKwkweGUyYjg1MTRmLCAweGYxM2I0ZjM3LCAweDM2Y2I3MDVjLCAweGI3MjNjNjI3LCAweGEwNWY3ZTVmLCAweDc4MzFkYzRiLAorCTB4OWM3NzFhYmYsIDB4ZjVjMTA1ZmEsIDB4ZjFkYzc2MjEsIDB4MjEyN2NhYTQsIDB4NDhlZTNlYjMsIDB4M2M2MTI3YjYsCisJMHg1Nzk5YzI5MiwgMHhkMTdlMjMxYSwgMHg1ZmNmZmZjMSwgMHhjZGY2MDI3OCwgMHhmMmZhZWQ0ZSwgMHhmMmJiODAwOSwKKwkweGZjNGY3MzliLCAweDJhOTNlMjk0LCAweGRiYWMxNzIwLCAweGMzZGY2N2RlLCAweGJiZWQwNjdkLCAweGQyN2Q1NWY3LAorCTB4YjhkM2NjZmEsIDB4MjdmYWQzNGYsIDB4NmI3YTFiYjMsIDB4MjY0NWZiZGQsIDB4ZWViNDUzZWMsIDB4ZTIwNTNhZmMsCisJMHg0ZWY3YWJiOCwgMHhmNTZkN2Y0MSwgMHg0OTUzOTM0YiwgMHgyYjQwN2YwYywgMHhiZDAzN2Y4MSwgMHhkMjMyMjdkOCwKKwkweDM5YjFiOWFkLCAweDRkM2NlMDEzLCAweDc3ZWIwZWU5LCAweDU4MzkzYzQ3LCAweGIyZjRlMmM1LCAweDExZGU0NzFhLAorCTB4NGJhZTVmN2IsIDB4YzY3MWI4ZGMsIDB4M2FjMWQ3Y2QsIDB4NjViYTI4ZGUsIDB4ZjFmODhiZDIsIDB4ZTFjZjRhNjEsCisJMHgwZWUzYTBiZCwgMHgzODIwOWY3NSwgMHhlM2YxYjJmNSwgMHg0YTBmZjBkMywgMHg3ZDY2MGJhZiwgMHhlMzQyZmUxYywKKwkweDBjN2NmZjkyLCAweGJhOTMxYWRhLCAweDdiODcxZjhkLCAweGRmNmQzZjgxLCAweDIxNTliZjZmLCAweDVkYTM5MDE2LAorCTB4MWVkYzYxY2YsIDB4MGY3ZDQ3ZTgsIDB4ODVmY2ZhZDIsIDB4MWNiYjg4NGMsIDB4YzBlZmRiMTcsIDB4NjZiZGViZmMsCisJMHhkOGFhYTNjYywgMHg1M2NhMDFmYiwgMHhlMzZmNGJlYiwgMHhmNzUxMWFiZSwgMHhjNzQ5NWFkZiwgMHg1MTI3ZGIxZiwKKwkweDU2ZWYzYTdkLCAweGFiM2I4YjA3LCAweGI0Yjg4MDc0LCAweDZhZTdjNGVjLCAweGI1ZjE5OWZjLCAweDJlZWU5NzE2LAorCTB4MzJkNjNkMWUsIDB4YWJiZmVkODAsIDB4NWI1NTkxZmIsIDB4NDMxMTJjZmYsIDB4MGIxYjlmYmMsIDB4ZDk3MjNhZjQsCisJMHgwZjBkNTQ3ZCwgMHg5OGMzYzAyZSwgMHhkODk2ZmRlOCwgMHhmZDhlZmZmMSwgMHg4MGRkMDMxNiwgMHg3NThmNjA5ZSwKKwkweDdhZDBhN2VjLCAweDA3YWI4ODNmLCAweGVkNjIwZmI4LCAweDY2NmViNWRmLCAweDYyYWQzNGZiLCAweDZkNDViY2VjLAorCTB4YzVhNDY1ZmYsIDB4ZTgxMmVmYjAsIDB4NGY0YmJlZGQsIDB4NzhhZWY4ZjMsIDB4YjQyNzA2Y2EsIDB4OWQ3YzU3NGYsCisJMHhiZjViMTRiYSwgMHhkNGUxNmFkZiwgMHhlN2JlMDM3YiwgMHg2NzI1N2ViZSwgMHgwNTk4MWJjYywgMHg3OGQ1NTk3YywKKwkweDRhN2IwMjQ0LCAweGY5YjRkZjViLCAweGU3ZmQ1MjllLCAweDc4ZjJjZjUzLCAweGIwNWQ2NDRlLCAweDUxYmJmNTE5LAorCTB4MTYxMzU0N2YsIDB4NWJjMjM0MzcsIDB4YWI3YTYxNmUsIDB4MWZhZDg5YmEsIDB4MDIzOTc2YTcsIDB4YTljZmRhNzYsCisJMHhhZjkxYmIwMywgMHg5MTFjNzdhYiwgMHg4M2JmYjRmYywgMHg0NTIzN2ZkYiwgMHg2MGFjZjJhMiwgMHhjMTQ0MDhmZCwKKwkweGZkODVlYTdmLCAweDg5N2Y2YzM5LCAweDcxYzZlYmY5LCAweGYxYzc1MmVlLCAweGUzOGY2Mjg2LCAweDM3NDY3MWRkLAorCTB4NTA3ZjBhY2UsIDB4MmU3ZWU3NjIsIDB4NDE0OWRlM2YsIDB4OWRmZDBkOTksIDB4ZTQwOTExNmMsIDB4ZjIwYzlmZmQsCisJMHhlMzE4ODFjNSwgMHg1YTg4YjVjZiwgMHgwZmM5OGIzYywgMHgxY2YxNDc1ZCwgMHhiYjlkODNhNiwgMHhiNDI1MTNlNCwKKwkweGM2M2I1N2JiLCAweGZkZTcwODdlLCAweDE5MjQzYjU3LCAweGI1NzUxN2UyLCAweGVlYjUyZjJjLCAweDQwNjlkY2RmLAorCTB4NWI4NGJhZWYsIDB4ZGVhZTNmNzEsIDB4YjI1NzVmODAsIDB4MWFlMjFmMmIsIDB4NTFkMmMyYWUsIDB4YmQ0NmFlYzAsCisJMHg3NDk4YTA5MywgMHgxNDc2YWZmMCwgMHhjZTE0Y2FhNywgMHg0NjlkYWFiNSwgMHgwYjllMzcwNCwgMHhjNTQ1OWRlNSwKKwkweDY1ZGUxZjMwLCAweGVjNjM1OTcyLCAweDUyZjY4ODNiLCAweDhiYzI4OWUyLCAweGUzOWZkMmU4LCAweGNhNDY5NzI0LAorCTB4N2Y5NjhmZDAsIDB4Mzk2OTY5NTMsIDB4MDUyZThkODgsIDB4YjE4NThjNTMsIDB4OTlmY2RkZWMsIDB4ZGI3NzljMmUsCisJMHg1MDdmZDUwZSwgMHg2MTRhZWM4OCwgMHg4ZWIwNjQ3OSwgMHhjZjhhZWRiNCwgMHg0M2YxYzMyMSwgMHhiNDdlNTBhMiwKKwkweDFkYjljZmE5LCAweDVlODNmN2ZiLCAweDRhMjRlYjVhLCAweDhhMzM5NTAyLCAweDg2Y2Y5OTU1LCAweDJjMjNhY2YzLAorCTB4ZTlmMDM2NWMsIDB4ODU3YWZmOTksIDB4ZjEwZDZiZjYsIDB4ZDliNDU3ZTgsIDB4MjU1MjdjYjUsIDB4NDZjY2U0MDEsCisJMHg0MWJjYzQxZSwgMHg5MzZmZTU2MCwgMHhlNjM0ZTEzYSwgMHgyNTc4MTIxMywgMHgyOThkM2VlYSwgMHhhMWZkMWRiYywKKwkweDdjNTg5YmIzLCAweGZmNTcyNzgwLCAweGNmOGIwMjdhLCAweGFmYzAwMDkxLCAweDU0MmIyZmFlLCAweGUyMTJjZjM4LAorCTB4M2JmYmMzMGUsIDB4NTgwZjE4MWMsIDB4OTQyMmM2ZjYsIDB4MzQ0M2EwMWYsIDB4ZjU4YTkyYmUsIDB4YWMxYjVlZTcsCisJMHg2N2YwMWNjZSwgMHhiZjU1NWEzNiwgMHhjMGI0YWZjNiwgMHg2YWM1OWIzOSwgMHhmNTRhN2RiZiwgMHgxOGE5NjJlNywKKwkweDk3NWU0MWZhLCAweGU1ZmFmMmE4LCAweDk4NDNhMmQyLCAweDhhNTllNjhmLCAweDhlNzUzZTdhLCAweDMxYWNkY2ZlLAorCTB4YWEyMDRiNGYsIDB4ZmU2MDFjOWYsIDB4YWRiYzk3NzMsIDB4YjcwOGNkYTYsIDB4YzU2YjdmMzEsIDB4YzM1ZDdkNzYsCisJMHgzN2EwMjdlMywgMHgxMjc0MDJhZiwgMHg4MGUyZTVmYiwgMHgzMjM3ZTIzZCwgMHg0NjEzZDdmOCwgMHg5YWZjNzc3ZCwKKwkweGI1ZjhmNGQzLCAweGRhZmM3YWNhLCAweGE3ZjExODg2LCAweGFkYzNhZmM3LCAweDk3ZTY5N2M3LCAweGY4ZGY4Nzc2LAorCTB4Yzg3M2ZhYjEsIDB4OGFmYzJhZmYsIDB4NTQ4ZWQ1NTYsIDB4NGFmZjRhZjEsIDB4NjU0YzI5MmQsIDB4NDJlOWRjMDMsCisJMHgyOGMyZTUxOCwgMHgzMGY2MTk0NywgMHg5ZmVlZmYwNywgMHhhZmM1YTgxYywgMHhlZmQ0MGVkYywgMHhiODdjZWE2OSwKKwkweDFiM2JlY2M1LCAweGYwMGYxMWM4LCAweGUwOGU1MWJhLCAweDc5ZTgyMDI0LCAweDc1ZDhmOTFiLCAweGZhYzQwYWNjLAorCTB4NGQ3YjdjOGMsIDB4MzU1Y2Y0ZjcsIDB4MGIyM2Q1ZmQsIDB4ODA5YjU3ZTksIDB4M2YyMzg3N2YsIDB4ODliZWYzYjAsCisJMHgwNTk3NTAyNCwgMHhjMTc2ZWE3MiwgMHg1OWY0MWRmYSwgMHhiODQ1OGJkYywgMHgxN2I4ODVmNywgMHg1ZWZiODIwZiwKKwkweGE0M2U1ODVjLCAweDBkYjRhYmU2LCAweDMwNmU3ODI1LCAweDAyOWYzZTE4LCAweGRjYTFlOWZhLCAweGY3YTA2OWY2LAorCTB4Mjk0ODRiYmMsIDB4YzUxZmMxZTgsIDB4MGYwM2YzYjEsIDB4MzhiZjY1YTgsIDB4ODVhYmQ1NDksIDB4ZWY4MjRjNmYsCisJMHhlNzBjYTI0MywgMHhkYjQyZGJkNSwgMHhkZWEwODMyYywgMHgyYTNkZTNjNCwgMHhhYmZhODRkZSwgMHg5MGQ2ZmM2MCwKKwkweDZjNWFlMGM4LCAweDM4ODIwYzA5LCAweGM3MTE1ZWM4LCAweDAxM2M1ZDZkLCAweGQ4NzY2NWNmLCAweDJmOTYyMTZmLAorCTB4Y2NmYTE2ZDIsIDB4OWY0YTI4YjksIDB4N2EzZDM2YjcsIDB4MzZiOWM0MTUsIDB4YTllNzYyOWEsIDB4N2U5YWIxNGMsCisJMHhlYzFiZmFkOCwgMHhjNTM3Yjc5MiwgMHgxZWVhZjJjYSwgMHg1MWU3NDAxYSwgMHhiYWFjZmQzZCwgMHhiODc5MzMwZSwKKwkweGFiZjNhNTU2LCAweGY5YzQ2ZjRiLCAweDY0ZTIxNGJmLCAweGY4OGE0NzU4LCAweDQ2MWE2ZWRiLCAweDNkZWUzOWU3LAorCTB4YjBjZjhkNDEsIDB4ZjUyOGU1NzgsIDB4MmZkMDNhZmQsIDB4ZGZlYjVmYTgsIDB4ZGRjM2U5ZTUsIDB4ZTcwMjA1NDcsCisJMHgyY2Q1NDZmNCwgMHgxNWViN2Y0NSwgMHhjYTczZTUyNywgMHg3MDRhNzkxNywgMHg2MTZkZjAyNCwgMHhjZGVmMDEyOCwKKwkweGQwNGM3ZWYxLCAweDIyZGQxZmFlLCAweDRmMzNmOGU4LCAweDIyZjM1NzVkLCAweDQ0YzA1ZTU0LCAweDNlZGY1MGY5LAorCTB4ZWMxODIyMmUsIDB4ZmMwZjAwYTAsIDB4ZmQ3MWVkNzUsIDB4ZDU1Njg1ZjMsIDB4MTQ5MjcyZWUsIDB4OTcwZGYzZTAsCisJMHg1ZWYyMGU3OCwgMHg3Yjg5ZGFkYiwgMHg2ZGJiODUwZCwgMHhhMzg0NWY3MSwgMHhmYTljM2NlZCwgMHhiZTI1ZTVhNSwKKwkweGJmN2FkNjM4LCAweDYyZjhjYWNhLCAweDlkNzA0NGEzLCAweDhlZDRiOGQ5LCAweDRiMDNjNWYxLCAweGY1ODBhZTJiLAorCTB4N2IxZmFiZmQsIDB4OGU3NTg4YWUsIDB4YzUzZjRhM2MsIDB4MjUyYzdjYjMsIDB4ZmUwNThjOWUsIDB4YmMzMWNiNWUsCisJMHhjNjk3YTdkNywgMHhmOGQ3ZjdjOCwgMHg4ZDZmZTM1OSwgMHhjNjk3ZDNhZiwgMHgzNWU1NjI3OSwgMHg3NjY1NjM3ZSwKKwkweDIxZDJjMTVhLCAweGRhZmUwNDljLCAweGUzOGYwZTNlLCAweDVjZjFhZWI2LCAweDlmOGRkY2Y2LCAweDc4MDBjOWFjLAorCTB4ZDBlNzRkYmMsIDB4Mzg4NGI2ZWUsIDB4YjFiZDk2MjUsIDB4ZmVjNGVhYzEsIDB4NmJmOGQ3NWIsIDB4MmVlZjhmMjEsCisJMHgyN2EwOWMyYSwgMHgwMzc3ZWZiYiwgMHg4MTNmNWJmYSwgMHg2NzdjMmNhMCwgMHg3M2MzMmZhOSwgMHg2NDJjNGJiYywKKwkweDg1YmJjNDBiLCAweDFjNWJmNGZhLCAweDZmOTNmZmMwLCAweDdkZTE0NzU4LCAweGViODRkNGFjLCAweDhkZDE0NmViLAorCTB4MDhhYmZiZjAsIDB4MWE4M2Y4YzEsIDB4OGQzN2VkY2YsIDB4Y2YzZThlNmMsIDB4ZmYzNTg0ZmMsIDB4YzdhNTJiNTksCisJMHhkMjE3NTZiMywgMHhlNmUzYzkyNSwgMHgzZmY3N2UwMCwgMHhmMjA5ZGJmZSwgMHg4Y2QxNzZkZCwgMHhmYWFiZWM3NCwKKwkweGFmNzdkYTQzLCAweDM2ZGQ5OTU5LCAweDBhZDk0ZTMzLCAweDY0ZjI5M2RmLCAweGM3YjcxMzk0LCAweDEyM2M1ZWU5LAorCTB4NzhhMDRkZWUsIDB4NGVhMzkyOGYsIDB4YmJmMWY5ZmEsIDB4NzFkNTBmNDQsIDB4YmI0NDllMTQsIDB4Mjg5MmY5MDksCisJMHhjNWQyZWM4YSwgMHg0NzI4ZmQyOSwgMHgzMDkwNWM5YSwgMHg0ZDhmMjA0NywgMHg4ODVjYWJkMywgMHgxY2E4M2IwYiwKKwkweGMzZDhiMjhjLCAweDk2MjQ3N2UwLCAweDEwNTM3OWQzLCAweGZhYzJjNGFjLCAweDc1NGUxMTZiLCAweDNjYzZjYjljLAorCTB4Nzk5N2NhNzksIDB4NjA4YTM4NzAsIDB4NzExMjE0NDgsIDB4ZGY0ZDdmYTEsIDB4NmQ3YTdhNmEsIDB4NTk3OTQxMDIsCisJMHhhODEwYjBmYiwgMHgxMjZjZmRhMywgMHhhZjg4NTYyMiwgMHgwMTcyMjk2NCwgMHgwYTI1MWFhNCwgMHhlZjE3OWUzMiwKKwkweGZmMzA0ZTVmLCAweDc4ZmQ5NmQyLCAweDQyZGQ4NzQyLCAweDM3YzQ3ZTg1LCAweGZiNTg4MmZjLCAweDg2OWM3Yzc5LAorCTB4NDAxZmNmMmYsIDB4NmExY2U0NmYsIDB4OGRlNjAwM2YsIDB4NzNjNmNhZGIsIDB4M2I0MTY2YmYsIDB4YTg3ZjQzYmQsCisJMHhiYTkxNThmNiwgMHhkY2ZiOGVmZSwgMHhjMjA5ZjJjNCwgMHgzZWY0NDg5MywgMHg2ODdmNTE5YiwgMHhlYmI4YzlmNiwKKwkweGJmNjA2YjIyLCAweDE4OWZkYzY4LCAweDA1NWJiNDljLCAweGNlYWQxYmJlLCAweGE4OWY0M2I3LCAweDEwOThlNmViLAorCTB4ZmJmNDI3ZDUsIDB4NjZjOGQwZGMsIDB4ZjcyYjA3YjgsIDB4NWRjNzI2NjMsIDB4M2YyMWM5ZjQsIDB4YmVmYmY4MGYsCisJMHgxN2M4YzQ3YSwgMHgyZTU0YzIyMywgMHgzMmExZjZkNSwgMHhlYWUxYTdkYywgMHgxOWZiNDNhOCwgMHg5ZTQ5ZGU4MywKKwkweGVkMTUyYTNlLCAweDhjZGY5NTVjLCAweGRiZTRkNjc4LCAweDc3YjlmNzI4LCAweDBjY2Q5YmJiLCAweDFhNDdlNjJlLAorCTB4Mjc1YzIxYzYsIDB4ZTgzNjcyMWMsIDB4YjA3OGI3YTUsIDB4MjlmMmRiZjcsIDB4YmY1YzI4MWUsIDB4ZjRhM2Y5MDIsCisJMHhiODFmMzg0YiwgMHgyMWJmZTYwMSwgMHhlNDE1YmQ3NCwgMHgyN2FmN2JlNCwgMHg1NDc1ZmEyMSwgMHhiY2QzZjY5ZSwKKwkweDBmYWUzZTI3LCAweGMwNGUyN2FlLCAweGYzZmVmNTQzLCAweDQ2MTI3YWVhLCAweDAxYzg3NzdhLCAweDc4ZTg5Mzk1LAorCTB4NDZmZmM2ODksIDB4YTNlNGQ3N2UsIDB4YzhkZTJlMGUsIDB4MDQ3NjczYzYsIDB4MGI5ZTU5ZDYsIDB4NjYzMDY1ZTIsCisJMHg3ODA1YzliMiwgMHgzYWVkZWNkNSwgMHhmZTI1YmVkNSwgMHg1NmZmYjQ3NCwgMHgxZWJhODhiYiwgMHg0ZjgwMDY2NSwKKwkweDVlY2Q0NGVhLCAweGUzYTI1Yjc3LCAweDA1MWRhYjUzLCAweDRmZGI5N2E5LCAweGZlYTQ1ZWY1LCAweDFiMzlkNDU5LAorCTB4ZmU4ZWQwYWYsIDB4ODRhMmY3OWIsIDB4ZmUzN2JmY2YsIDB4NzkxNDI4OWEsIDB4ODk4ZGZjM2EsIDB4N2YxNWRkMWIsCisJMHhiMDg0NzFmMSwgMHg5ZmZlYzJmYiwgMHgyMzBjZGY5ZiwgMHg3NzI3ZGM3ZiwgMHhlMjVhZWZjZSwgMHhmNTQyMjU3OSwKKwkweGY1YWFkZTQ3LCAweDNmMTkzNjc1LCAweGQ3OTY5YzM5LCAweGZiNjgyZjU1LCAweDAxZTlkZDlmLCAweGE5OGZiY2EzLAorCTB4NzBjNjZmYWMsIDB4ZWVmMjBmNGIsIDB4MjVmOGE5YjUsIDB4YjNlODA2NjQsIDB4Yjc2YTYxZjEsIDB4ZmY5NTc1NjQsCisJMHhiY2ZjZWFmMywgMHhiNmY3ODYzNiwgMHg4MzA3ZGI1YiwgMHgzZGU3YWQzYywgMHgyZjY4NzEzNSwgMHhiMDI2NGM0NiwKKwkweGI0MTM3NjJiLCAweDhmZmJkYzdiLCAweDViZGU1MTNhLCAweDRmZWI3NDkyLCAweDhmYzBiYjU3LCAweGE3ZDlhOWYyLAorCTB4N2M2YTVkOWEsIDB4NTUyZWMzYWYsIDB4M2UyZDFiZDcsIDB4Nzk1MTM1Y2EsIDB4MTkzY2YwYTEsIDB4MWMwM2YxZTcsCisJMHhiZmU2MmU3NSwgMHhkMDU3MDFjMiwgMHgzZDU4NGY2MywgMHgzNjVmYzA3NSwgMHhkODM4OTczYSwgMHhjZTEyMTkyZiwKKwkweGIwOTZmMTYyLCAweDkzYmIzZTRlLCAweGRlNDE5YjQ3LCAweGIwM2YxNDgyLCAweGZhZTlmOWZlLCAweDFlZWI4ODM3LAorCTB4MDk3MWIxOWUsIDB4ODVhYTVlMGMsIDB4OTdlOWJlYzAsIDB4ZDU2MGQ4NDcsIDB4ZmJjN2YzMDQsIDB4NmJmYmIwZTUsCisJMHhmYmIyZTVmYSwgMHgzMWM3MzczMiwgMHhhMThiNjVmYiwgMHhmYTVhYzI3YywgMHgxNDRiY2MxOCwgMHhmYjljZGY4OCwKKwkweDUwMDZlMWZkLCAweDY0ZjkwZTIxLCAweGY4MDBkMjljLCAweDM4MmIxNGIwLCAweDcxMTcwYzhmLCAweDE5ZGU5NDczLAorCTB4YmM4MzkwNDIsIDB4OTk0YWM0ODksIDB4ZDI0N2YxNjMsIDB4ZmI0OGZmYjksIDB4ZjM5MTI4Y2IsIDB4MDYzMjNmODEsCisJMHg5YTM3M2MxMiwgMHg5ZTdkOGExMSwgMHhmMTM4OTVlOCwgMHg4ZGViZDk4NywgMHhiY2MxY2U1ZCwgMHg0MWNmY2FhMiwKKwkweGE5MzdjZTg5LCAweGU5ODM5ZDg0LCAweGYwNTBmYjg4LCAweDhlYWRiZjAxLCAweGFkYjI3MTViLCAweGFiM2VkODE3LAorCTB4ZDllMTgxM2YsIDB4YzEwMWJmZTgsIDB4NWE4MjVlNjAsIDB4ODIyMjU3YmYsIDB4MmJmZDExMzUsIDB4ZGZhZmYwM2YsCisJMHhjYWZmNDE2NCwgMHhkMDQxZGM0NiwgMHhiMWM0MWZiNywgMHhjZTNhZWNmOCwgMHhiZmVhMWViZCwgMHg3MDJkZGExMCwKKwkweDM3MjY4ZmNmLCAweDM0M2MzYzlhLCAweDQwYjcxNmUxLCAweDc3NWU3NTVmLCAweDVmN2MwNzM2LCAweDAwZWYxNzJhLAorCTB4OWMyNzViOWUsIDB4NjcxNmJjMWQsIDB4ZjhjOTllZDIsIDB4Zjk3NWUxNGUsIDB4OWFmZDFhZjYsIDB4YWNmZDFkNDQsCisJMHhkNjg5NTcxMCwgMHgwODY5MGVmMywgMHg1Y2FkZWRkOCwgMHhhYWZjMWI5YywgMHg4MzFjZTVkNiwgMHhlN2E4YjM5NywKKwkweDNjZGQwNDExLCAweDFmY2M2Y2QzLCAweGU3ZjU1MzY5LCAweDkwYjJlM2RmLCAweDg0ZjViNTFmLCAweGM2M2Q2ZmNlLAorCTB4ZThmMzBkN2YsIDB4Mzg2YTg3MzgsIDB4OTczYzZhNzcsIDB4MTFkZDk2OWEsIDB4N2NjNzRhMDcsIDB4ZWUwOTUyZGMsCisJMHg0MzY3MjMzMiwgMHhiY2UzYjQzNiwgMHgxMjRjZjZjZSwgMHg2YTY0YmNlMywgMHg1Y2YzMWFjNCwgMHhiYzUyNTZiMCwKKwkweDRiNzgwZDdkLCAweDQwMTI2YjE1LCAweGNlZGVhNzFmLCAweDFmMTE4OGY0LCAweGM0N2Y5YzZkLCAweGZiNDdkODQxLAorCTB4MWYzMzE4ODMsIDB4ZDJkMzJiNDUsIDB4NGM1ODRhNmUsIDB4YmY0YjRmZGYsIDB4NzllZDRiMDEsIDB4MTk4ODVkODMsCisJMHg3MWIyNGM1NywgMHg2NGRjZWMzZiwgMHhmYzE4YjEwMywgMHhlZDFiMjRjZCwgMHg5ZGU3YjRlZiwgMHhmZjE0MTVmNywKKwkweDM3YmI4Yzc2LCAweDM3YmMzMWM0LCAweDM3YmMzMWM0LCAweGU1M2UxYTQ4LCAweGNlYmY5MDc4LCAweGY3OTc1YmJhLAorCTB4NDk2N2MxYjQsIDB4ZDEwZjIwMTAsIDB4YjlmMjhlOWYsIDB4ZGRlOGM1YzQsIDB4ZjY4MmJlZjksIDB4ZGNhMjFmNGQsCisJMHhjNDk0MTczMCwgMHg0MzZjOTEwNiwgMHgyMWYxNjdiZSwgMHhhZmM4N2NlZCwgMHg0MDI0Y2Y3YywgMHg5NmRiOTRiZSwKKwkweDE2ZmJmYWE1LCAweDA2MDRkZjQ2LCAweDUzMGRmOWY3LCAweGIyMTRkYzcwLCAweGUyOTgzYWM2LCAweGM5YTk2OTc5LAorCTB4ZDNhMzcxMGQsIDB4YzI3MjNmMGIsIDB4MTk4NWU5OTEsIDB4MGYyMDc5MmQsIDB4MWI4Zjc5YTcsIDB4OTg0YTk3ZTYsCisJMHg4ZTZjYjg1ZiwgMHgyZWQzMDgxNCwgMHhjMmE4MWI5MywgMHgwMWJhNzQ2MiwgMHg0Y2NiM2JmNywgMHhjN2FlZjMzMSwKKwkweGU5ZmVkOGQ4LCAweDk2MTczOGQxLCAweDkwZDM2OTY5LCAweDkyZjU5ZDRlLCAweDhjNGJmMDA0LCAweDM1ZTU0YTdjLAorCTB4Y2VhOGYxN2QsIDB4NmY5NGNjNzMsIDB4NzkwYzViMTQsIDB4MTM0OTEzNmIsIDB4MTg1YmViODcsIDB4YjFhYzk1ZjEsCisJMHgzNWI3YWFiMywgMHgzOTA2NDk3OSwgMHg1MmFiN2Q4NCwgMHgzYTM1NDdhYSwgMHg0ZDVmNTAwZiwgMHhmZTI4YjhjMSwKKwkweGJmZDdhMTcxLCAweDc5YzM3ZjA2LCAweDQ1ZWEwMTVkLCAweDEwYzg4ZTRkLCAweGEwYWRlN2E2LCAweGExZTJhMzc3LAorCTB4ZTgzZjdiNmQsIDB4OWY4ZWZiMGYsIDB4MDczOWRiZmMsIDB4NTVmZDNiZWMsIDB4OWU4MDc3NjgsIDB4YmJjZjdlM2QsCisJMHhmNGM3MzgwZSwgMHgyZTJjM2RjOSwgMHg0ZmMxODc3MiwgMHhmYTYzNjQ1YiwgMHg3NGFkOGY3ZiwgMHg4MTc3ZTAxZSwKKwkweDllNzkxZmVmLCAweDc3MjU3ZTI4LCAweGU1OTNmZGIzLCAweGRlNzBkZTAxLCAweDUwNmY3ZjVkLCAweDcwYzkzMDU1LAorCTB4ZjExZjkwOGYsIDB4MWZkZWE1NWEsIDB4NDZjN2E0NjYsIDB4MmNiNzhiMWIsIDB4Y2E1OWIxZGYsIDB4NGY3YzYxOTAsCisJMHg1YzdmOGMyNSwgMHgzNzhmNDNmNSwgMHhkMWRmZDAzYSwgMHg2M2I4NTllMCwgMHhkOWJlMDQ4NCwgMHg3NTY2NDM1ZiwKKwkweDY0NDViZGZmLCAweDAyNTI4N2ViLCAweDE1MWU2N2ZiLCAweDBmMzg0NjZmLCAweDJmNmFmN2FhLCAweDhmY2IyNWY5LAorCTB4ZGQ2M2EzMjksIDB4MjdiMGY1NGQsIDB4MTg3YmNlYzQsIDB4MTNlNGIxZTcsIDB4MTI5NTI4YjksIDB4MWNmZGM5NmYsCisJMHhmZWYwZGRmYSwgMHhmMzNkNzQzZCwgMHhlZTFmN2RkYywgMHhkOWU3MTliMywgMHgwNTFmNWVmNSwgMHgyYTY1YjNmZCwKKwkweDZkZTc4ZGJkLCAweDNlZDg4NTk3LCAweDQxZTI2MmY4LCAweGZlNzJlY2Y5LCAweGM1Y2VjNDM2LCAweDY3OGRlMzE4LAorCTB4MDBkYjY1MGYsIDB4YTliMGJmMGYsIDB4MzIzY2M0ZjEsIDB4ZWY2ZGNlMDYsIDB4ZmUyMDM0M2EsIDB4OWY1NmY3NzIsCisJMHg4MjhiZWY1MiwgMHgzY2ExYmI3YiwgMHhjZTU4MjNlZSwgMHhlMjkwMjMwMywgMHhmNmY0MzJiZiwgMHhkNTVmYzA1ZCwKKwkweDNlZjEzYjRkLCAweDhmYWFlZmI0LCAweDljMjc0MmFhLCAweGU5YWQ0YjkwLCAweDZlODc2YTI1LCAweDhiMjBmOTAzLAorCTB4NWE3ZDlkMzksIDB4YzQ5Y2Y5YmQsIDB4OWY4NjZhZmMsIDB4YjdlN2Q0ZGIsIDB4MjA3MjNlMDEsIDB4ZDlmZTViZGYsCisJMHhkYmVmNGEwNCwgMHhkMWYzYzUyYSwgMHg2ZjNkYTVmNywgMHhmN2MzZWZkMywgMHgzY2RhYmU3NiwgMHhlZDZiNzliNSwKKwkweDljNWU2YTU1LCAweDBlNGQzYmYxLCAweGI5N2NhOWU2LCAweDc1ZjRlYjc4LCAweGVhOGEyOTdkLCAweGE5OTE3ZWY2LAorCTB4ZjNjMzkzOWUsIDB4MmQ5ZjFhNDIsIDB4ZTk0NWE1MjMsIDB4YTM0OWY4MzEsIDB4ODRkZjA3NmYsIDB4ZDNmMzhlN2UsCisJMHhiZWI4YmFlOCwgMHgzZjgzYzU0YywgMHg0YzRmZGQ0ZCwgMHg5MTk1Nzg4MywgMHhhNzNhN2E4ZiwgMHgzMjQ2MmFkZCwKKwkweDdjOGRiZTQxLCAweDdkY2RkYWQyLCAweGIzMWIyMTI4LCAweDRhY2IxNjJmLCAweGE4Y2ZjNDExLCAweDE1Y2ViYmY5LAorCTB4MTcxY2RmNjUsIDB4MTRmZTBmZWEsIDB4ZTMyYjZlZTQsIDB4MDgzZDBlZmIsIDB4ZjdlODMxNGUsIDB4ZmY1YzQ1MzcsCisJMHg1NGU0M2E1NywgMHhlOTBmZmZiOCwgMHgxM2YyMGUzNywgMHg0Zjc4N2VjYywgMHg0Zjk4ZTcxYiwgMHg4MDhhMDY1MSwKKwkweDRmMmM2MmZmLCAweDgxOTU0YWZhLCAweDk3ZGIzYTgzLCAweDA0ZTczYzZlLCAweDA4NmRiYmZiLCAweGFiNTFiOGMxLAorCTB4NjllZjBmNDMsIDB4ZTM3YThmMWIsIDB4NGE4ZjRhYjQsIDB4M2Y5YmU1YTEsIDB4ZGFkYWNlODMsIDB4YzcxNzc5ODIsCisJMHhhNzcxYTkyZSwgMHg1OGUyZTY0YiwgMHgzOWQ4YjRmMywgMHg3Nzc4YmRkZCwgMHhmOWE4NzJhOCwgMHhmYTU0MGIzNSwKKwkweGZiNjIxMWRkLCAweDRkMzcwYmU5LCAweGM5NzQ3YTQ3LCAweGExZmQ1NGJmLCAweGY1MGU0NmIyLCAweDRiM2U5MThlLAorCTB4M2U2M2Q3ZGMsIDB4M2U0MGEyZGEsIDB4NWU4NWRmN2UsIDB4YmJhNDQxZTQsIDB4ZGE3NzZlOTEsIDB4MzcxZWVjNWQsCisJMHg3YjgyNDZhMSwgMHhlMjZkOGVlZCwgMHg4NTcxZmY3MCwgMHg3M2ZmN2IxMCwgMHg5ZGY0ZGRiNiwgMHg0NzljNjNlNiwKKwkweGRiMmZmMDc3LCAweDJmYWViYjVhLCAweDkwOGZmOTgxLCAweGYwOGRjZjgwLCAweDQyNWZmMzZiLCAweGQ0YTdhNjE0LAorCTB4MmYzNzc2ZjksIDB4ZjJjNDk5MTIsIDB4N2Y3NWQ0MzQsIDB4ODE1YjljMzksIDB4NzkwNzkzZmQsIDB4YzZhZGNmOTYsCisJMHgzNWY4MzRhMSwgMHgyOGYzOGQ3OCwgMHg3Y2YxMmJlMiwgMHg4ZjAzNWI0MSwgMHhmODc3ZDk3OSwgMHg3NzA2N2RkOSwKKwkweGZkNzBlNWFjLCAweDlhNGU4ZWVkLCAweDdiZjZkMTVlLCAweDMwY2E5YmFhLCAweGZiNDNjYjZmLCAweGVkYjYzYjAxLAorCTB4MjlmNmMyNjMsIDB4Y2Y3ODczZDYsIDB4MGNmNGI3NWIsIDB4ZWVhNTdjYjEsIDB4YTMwODQ5ZTgsIDB4Mzc0YTYyZGIsCisJMHhkZWJiM2ZmMCwgMHgwY2FmOTA5ZiwgMHgwYTI3ZGU4YywgMHg4YzBjYTBkYywgMHg0MTIyYjdkZSwgMHhiMTU5NTdjYywKKwkweGY5ZWViYTdkLCAweDhlMzU3NjhkLCAweDllZjVlYWE1LCAweDI0ZDQ4ZmU0LCAweDY5NmY4Y2M0LCAweDlmYzlhNmYyLAorCTB4ZGE3NzhmMjYsIDB4MGE2ZjY2NjUsIDB4NTkxOTgzODEsIDB4ZDE4NzlmODAsIDB4N2FmYWExYmYsIDB4M2RmOTlkOWUsCisJMHhhZmE1Y2QwZiwgMHhhNzNjNmY1NCwgMHgzMjU4YTdkYiwgMHgwOTZiZDE5NiwgMHhiYmNmODI1ZiwgMHgwZjE0YmJkMywKKwkweGQ4YmRiZDNhLCAweGY4YzNjZmFlLCAweGU2ZDFmM2ExLCAweDM2ODljOWExLCAweDE4OWNhMzNmLCAweDQzZDIzN2JmLAorCTB4ZTkxOWVmOGIsIDB4YzAwN2E0NjIsIDB4NWJjNjdlMDksIDB4MzU4MTZkN2IsIDB4MzhiN2NlMTQsIDB4YWY3ZmI3MDYsCisJMHg0ZDZlZTExNSwgMHhiOWMwYWM5YiwgMHhmOWY0ZWFjZCwgMHgzZTAxZmU1OCwgMHhiMGZiMDc0YywgMHg3NjhlY2ViNCwKKwkweDhkODdlYWFlLCAweDIyNWM1ZGVhLCAweDVlY2JiNTU3LCAweGQ5MjMyYWIyLCAweDI0ZDJhN2I5LCAweGI1ODk5M2UwLAorCTB4MTcxNjE5OTEsIDB4NTgzZThmMjEsIDB4YTRmNzA0NWMsIDB4MzIzODdjNGUsIDB4YmZmMTQyMDMsIDB4NTY0NmYwN2UsCisJMHhkNzc5MTZkZiwgMHhmY2ZiODZlMiwgMHg2OTBhOGE0YiwgMHgyZmQwNzFmZCwgMHg5NWZhMmZhMCwgMHg2ZWZiZTBkYiwKKwkweGY5NzNjNGViLCAweDFmZGVjY2JhLCAweGNmOWQyZTY1LCAweGVkNjZiMWVlLCAweGIzM2VkNDk1LCAweGYyYWVmNWQwLAorCTB4NDE1N2UwZjAsIDB4NGE1YjJiN2UsIDB4NTQyZTIxOGEsIDB4YmE3ODExMDksIDB4Y2UyOTU1ZGUsIDB4YWQ4NzJkYjAsCisJMHg3YmU5ZTNmYiwgMHg0ZjNjZDkxZiwgMHg3NmVlMjFkOSwgMHg4YmFlMmQ3MSwgMHg5NDA1ODc5NSwgMHhjNTg4NzIyZiwKKwkweDU3M2EwNTY3LCAweDZkNmVmZDJiLCAweDI5OTNiNTFjLCAweDVhMjZkNzdlLCAweGQzMTdlMGRjLCAweDk3ZjA3ZWU3LAorCTB4YjIyYTI2ZDcsIDB4YTM1Y2Y1MWMsIDB4NzAwNzdjMWYsIDB4N2NiMTM1YWMsIDB4MGM2ZmZkODIsIDB4YzY1YzhmOGUsCisJMHgyM2VmZDgyZSwgMHgzNGNmZTAyNSwgMHgxYTU4MmNmYiwgMHgxNzI1ZjNkYiwgMHgzN2M4ZTc5ZSwgMHhiMTg5NzhiMSwKKwkweDc2YmI2ZGZkLCAweDAwY2U0OWFlLCAweDI0M2VhOGJlLCAweDFmYzNmY2ExLCAweDg0NTU5ZmQ4LCAweDYxMzU0OWM5LAorCTB4MGVhYWQwZTcsIDB4NTM3NzNjMTMsIDB4Y2YwOGE4N2QsIDB4ODRiOWMwZGQsIDB4ZTA3YTc1NGYsIDB4YTZlZTczNWYsCisJMHg5ZTE4YWY5MywgMHg0NGFlMDQwYSwgMHhkMGI3MWE4OCwgMHhmOWQ1ZDU2ZSwgMHg5ODEwZDM1NCwgMHhkY2UzZTEwZiwKKwkweGNmODQ2ZTcwLCAweGEyZWNkNTMwLCAweGEwYWZlN2YzLCAweGUwODdjNTI1LCAweGZmNzBmMzcyLCAweDg5ZTRmZDRjLAorCTB4NTU5ZmRjM2MsIDB4MmQ3OWFhMjcsIDB4YmUzZTc2MjYsIDB4ZTU1N2RkNjMsIDB4MzlmYjJiNGYsIDB4ZGQwMjhmNGEsCisJMHgyNWIxZmY0ZiwgMHg1M2Y2YzZjZiwgMHhlNmQ2YWZkMCwgMHg4NDI5Yzc1YiwgMHgzNWVkN2YwMywgMHg3MjE5ZTc4MiwKKwkweGUwMzM0OTkzLCAweGIxOTQ0NmNmLCAweDQ3MTY2ZmMwLCAweDZjOTdjYWEyLCAweDY1ZmU5YjNmLCAweDliMzZlOTQwLAorCTB4N2U1MzIzN2UsIDB4OWZjMWZhZmYsIDB4ZTNiYmZmMjIsIDB4NjhiMmFiNGQsIDB4NTlmODczOWQsIDB4MmU3NGMzM2QsCisJMHhlZjMwYjI4YiwgMHg2YmY1NjVhOCwgMHhkMDA2ZTc0YywgMHhjMzU4ZThiYSwgMHg0YWYxYjBlYSwgMHhhM2IzM2UxNywKKwkweDE0M2ZjOGFlLCAweGJhMzE3MWM2LCAweDAxYWU1MGVlLCAweDJjNGMxNmZlLCAweDkwMWMyM2FlLCAweGNiNDc3ZjcwLAorCTB4Nzk0YjU5NTcsIDB4ZTJkMWY4MDYsIDB4NWQ3NDdhNjAsIDB4MzY3M2MxNmQsIDB4MjgxNzliODgsIDB4ZWM0ZmU0MzIsCisJMHhmYTQxZWY1MSwgMHg1Nzg2YTViZSwgMHg3ZjQyNjZkZSwgMHg3ZmMwNGEwOSwgMHg1M2UxODNiYywgMHg1NDY5MGJhMywKKwkweDVlM2M4MWFlLCAweDgxYWU1NDEyLCAweDBlN2ViZDdkLCAweDdlODNhMjRmLCAweDk2YWRmMjNmLCAweDFiY2ZhMDg5LAorCTB4MGYyOGY5ZGYsIDB4ODJiZjczZWYsIDB4MmRmMjMzZjUsIDB4ZjlkMjQzZWEsIDB4ZmY2ZGZlOWMsIDB4ZTRmYmQxY2QsCisJMHhhOWY5MWNmZCwgMHgwMzI1MWRmMCwgMHhlYzljYWZkYSwgMHgzOTUxYjcyMiwgMHgyYzg4NTNhYywgMHhhZDlmODM2NSwKKwkweDA5MWIyZmY3LCAweGQ5MWY0ZmQzLCAweGEwNzBhZjRhLCAweDNhZTMwOTNlLCAweDY3YmIxM2Y2LCAweDdlOGRkNDAwLAorCTB4ZWM0OTY5MzMsIDB4OTQ5ZGRlNTUsIDB4MTdlZTM3NzMsIDB4N2QzNDY2MjUsIDB4ODVkNjEwYjgsIDB4NGE3YmIxZGYsCisJMHhmY2MxNDUzOCwgMHhlZTNiMTdkMywgMHg5NzE4MjM2YiwgMHgzNzM4OTFiMiwgMHg5Yjg5OGRjNCwgMHhkNDUzZjlhNCwKKwkweGYxODk5YWY4LCAweDk0NWU3MjU1LCAweDg3Y2VhY2ZmLCAweDc5MDg1ZjdlLCAweDJjNmM2M2YyLCAweDhmY2U4MWJmLAorCTB4ODIzYWZkMDcsIDB4ODQ4ZTU4YzgsIDB4YTAzNjU5MzgsIDB4M2RmNTgzZDgsIDB4NGZlMWY4MjQsIDB4NTg4ZmZmNjksCisJMHhiMmNhN2M1OSwgMHg4ZmUyZTg5ZCwgMHhiNzE2MGU2NSwgMHhlMmM5YzA3OSwgMHhmMDYyNzE4ZiwgMHhlMjJiYjAxNiwKKwkweGQ4MTcxMGNlLCAweDRiOGY2ZDE1LCAweDBiY2ZlZTAyLCAweGRmNzA5YmFlLCAweGUzMDlhMGVlLCAweDAxOGI0ZmRjLAorCTB4YjUxN2VjMTcsIDB4NWJjODI1NWYsIDB4NmQ3ZjY3NDgsIDB4N2ViNWRkMmEsIDB4YWJlNDkxMWYsIDB4MGJmN2VlMjAsCisJMHg5ZDNmYWIyNywgMHhiYjhmMzA0ZiwgMHg4MDE0ODRmZCwgMHgwY2M0ZGNmZCwgMHgzYzc0NGQ0YiwgMHhkOTgzOWU2OSwKKwkweDE1NzNiZmJiLCAweDA0M2EwNGNjLCAweDE4MTFjNmY3LCAweDM4YmVjYzdmLCAweGI5ZTNkMDEzLCAweGUwNTZiOTFkLAorCTB4NDcwMTE3OGIsIDB4NjY4OTBmMTQsIDB4NWZkMDlkZDcsIDB4NmYwYTM5ZTIsIDB4Zjk2NzNlMTYsIDB4MjIzYzgyZmQsCisJMHhmYzc3ZTI5ZSwgMHhlZTE5NzY4ZCwgMHgxYWRhN2FkMSwgMHg1NmYzMTFiYywgMHhiZGUxMzc5ZiwgMHhlZTRhMmZjMSwKKwkweGYxN2Y1MGU5LCAweDNkMDJlY2FjLCAweDMwNTY3NGZjLCAweGJjZjNlNzBlLCAweDYyZjNlNzA5LCAweDJiZDVmYjVjLAorCTB4MGMwZmRjMjksIDB4YzEyZWYxNjEsIDB4Y2ZkMDA0NDYsIDB4YmU0MGE5ODIsIDB4YWU1ZjNlOTMsIDB4YWZhNmIxZjIsCisJMHhkMTFjODEzNywgMHhjMTFjMjNmYSwgMHgyOTgyMGM3MywgMHhjYjQ4ZTUxZiwgMHgyNzZiNmEyNywgMHg2N2Q0NGY5OCwKKwkweGZjMGYwYjY2LCAweDhiNWQzNzFjLCAweDg4Nzk4NTNiLCAweDI1Mjg0ZDE3LCAweGIwNGRjZjY4LCAweDA1Y2U3ODhiLAorCTB4YmNlMTk5ZjIsIDB4MGY1NTQ0ZGIsIDB4YjJiOGZjNGYsIDB4YmIwN2U1ODQsIDB4OWViZGMzMGYsIDB4N2VmNTc2Y2QsCisJMHg3MzlmNzUzMCwgMHhkNzI3Y2E5MiwgMHhhMTZmMDg5MSwgMHgyNDVkZDdlZCwgMHg0ZDI3ODg2ZSwgMHg4ZmRmYThiYSwKKwkweDVmNjBjYTc4LCAweDU3ZmI1MTRlLCAweGYwODU1ZGRhLCAweGVkZTg5ZjM4LCAweDQ1MGQyOWJmLCAweDJjM2Q2MDI3LAorCTB4ZmMwMDhhMjAsIDB4Njg2MmQ5MzQsIDB4MDlkMjNiMDcsIDB4OWZlYmYwZjcsIDB4ZmQ1MGUwM2YsIDB4MTk5MjRjZGMsCisJMHhlZGE2Yzc5ZCwgMHg4N2UxNGQ0MywgMHhiNWZiNDQ2ZSwgMHg1ZTAzNzI1OCwgMHgwZjk1ZGE3NiwgMHhkZmMwM2YyMCwKKwkweGM1Y2I5MjIyLCAweGIxZjI5ZjI1LCAweDE3MjFjMzdjLCAweDJjYWUwNDZkLCAweDg3NjlmY2E0LCAweDUwZGQ1Y2Y5LAorCTB4NzlkMmI3ZWYsIDB4ZjU5MDNkNWYsIDB4ZmEwODdjMGYsIDB4OTNjN2NhZTUsIDB4OGZkZjQwOTMsIDB4OTVhNWU5NTcsCisJMHg3ZjAxZGYxYSwgMHg3ZjE5ZTJiOSwgMHhjYTc3ODZiOSwgMHgyYzhlZDNlNywgMHgzNzkzNGY3YywgMHg2N2U4M2JlMCwKKwkweDFmOTgxODhmLCAweGYyOWJiZjZiLCAweGFmYzBkM2ViLCAweGZkMDRlZDNiLCAweDViYTU5ZmI4LCAweDY5OWM4MGU2LAorCTB4N2NhYWI0ZTMsIDB4ZDVkNzJjNmQsIDB4YmYwZmRjYWUsIDB4YzBiZmU0ZmIsIDB4YmVjMjhkZDYsIDB4NzVlOGE1MTcsCisJMHg4MzAyNGZiZiwgMHhjZmQ3MmJkNywgMHg2ODc5MDY5OCwgMHhjY2YzMTE3NiwgMHg1MTczZDQ1MiwgMHgxZTkyZmNkMSwKKwkweGRmMWEyZmM1LCAweDljNTlkYWI1LCAweGM5OWZlMzQ4LCAweGUxZTVkZmJiLCAweDg0MGJlNGY5LCAweDg3NDhiMmI4LAorCTB4Y2ZmMWEyYmYsIDB4ZjcxODdmNDQsIDB4ZTYxMjI3ODEsIDB4NjdmOTE4OWYsIDB4OTNmYzM3NTcsIDB4NDAxNjVlN2YsCisJMHg5ZmUxNzU2ZiwgMHhiYTdmOGM0MywgMHgwZmRhMWJlMywgMHhlNDYxNmJkZSwgMHhhYTFjNzc5ZiwgMHhmZjJkZGRiZCwKKwkweGZjZjNjMjVjLCAweGJlNGVmN2FiLCAweDkzNjU3ZWVjLCAweDZhOWY5ZjRmLCAweDYyZDljNzJjLCAweDU0YmIyZmU3LAorCTB4ZWE5NmVmYmMsIDB4YmQwMWNhNmYsIDB4Y2VjNGQ1MzEsIDB4ZTMyNDA5ZWYsIDB4ZWVlZjBhMTYsIDB4ZmNkZWVkMzgsCisJMHhlZmE4NmM5YSwgMHhkYTFlOTgxNCwgMHgxZWEzMzIxOSwgMHg3OGY3NjlkYSwgMHg2NjliN2UzMCwgMHgwNTU3ZTc2MSwKKwkweDIzY2UwNDRmLCAweGU0NWFmYmI4LCAweGQ5MjFkZmU4LCAweDU4NzY2MGVlLCAweGZiOGYwYzUwLCAweDM3ZjFlYzAyLAorCTB4OWQ4YzFmMTgsIDB4MmE0M2NiOWEsIDB4YTY2MmZhNWEsIDB4OTcxZDQ2MTcsIDB4Y2ZlZmMzMzYsIDB4YmZjY2VhM2QsCisJMHgwNjk2N2MwMCwgMHg3OWRmYTNiOCwgMHhjZjc4NGE4ZiwgMHgwOTUxZjU1MiwgMHhmNzZmZTNmNSwgMHhmMTA0NWRiZCwKKwkweDc5Y2YyZDUxLCAweDhiYjc5ZWNjLCAweGZiYzI4NjBhLCAweGExZmVkZjhjLCAweDhlYWQ2NWVhLCAweDVmNDA0MDQ3LAorCTB4MWZkZGVlMWEsIDB4NGIxZTcxZDcsIDB4Mjk3ZTZmN2YsIDB4Njc0ZTUxZjAsIDB4ZjkzZWYxYmIsIDB4M2ZkYjFjNjAsCisJMHgxMTY0NGQ5OSwgMHhiNDcxOTg4NiwgMHhkZWI4NWVmNCwgMHhmY2FmNzhjYywgMHhmZjNiMzBlYywgMHgyN2IwZjMzNiwKKwkweDJhZjJiZGY2LCAweDM3ZWYxODdmLCAweDhhNzdmNmE3LCAweGU3ZWZlYzEzLCAweDY4NDFmNjVhLCAweGRkNmNjODg0LAorCTB4ZDczNTRhMGUsIDB4MjZhMzNmMzAsIDB4OTM0OWY4MWIsIDB4ZjhhM2ZjNDMsIDB4NDQzMjdlMGIsIDB4YjcwNmJiZjcsCisJMHhkMDdmZjNhOSwgMHhhOWZiYjAyZCwgMHg0YmVlMTIyMiwgMHhlZmIwOWNmZSwgMHgzNjNhZWE4MiwgMHg0MGY0YzljYSwKKwkweGU2MTdlYWVlLCAweGNiMjM5YzAzLCAweGNiYTA2Njk1LCAweGQ3MTYyZWIzLCAweDViMDkwNWY5LCAweDZlNmU4MWIyLAorCTB4ODI1M2Y3MDEsIDB4MGJmOTNjYTIsIDB4MjIzZGYzYWUsIDB4ZDNiMTBlOTQsIDB4ZTI3ZDNkZjYsIDB4OGZmOGMyNDYsCisJMHg5YzYzM2QzYSwgMHhlZDA5OWY2MCwgMHgzMWJiZTA4NywgMHg4MjQ3NzNlMywgMHg1ODhmYjcxZSwgMHg5YWViMDQ5YiwKKwkweGFiODUzNzA2LCAweDEzYmQ5Yjc4LCAweDgxYWUwZDBlLCAweDhmOTdjNjRlLCAweDAwYzZjYjNhLCAweGQwM2JlMDFlLAorCTB4OGU0NzRkNGIsIDB4OGQ3YmUwNTksIDB4Y2Y3YjgyMWYsIDB4ZTI4ODNlMzAsIDB4NGU4M2UwMGIsIDB4NDAxNmUwYmUsCisJMHhhMjgzYzM1ZCwgMHhmZGI3Y2ZhZSwgMHg4YjQyZjg4YiwgMHgxN2M4ZjQ2YiwgMHg3ZTcwYjcxMCwgMHgwYjk4YmUyZiwKKwkweDA1ZjIzNTc4LCAweGNlM2NlN2I1LCAweDUwNWNmNjE4LCAweGM2OTM3OTYyLCAweGU3YjEzZmU3LCAweDg5NmVmYmUzLAorCTB4ZDkxM2RlNjAsIDB4NmJiZjY1NjcsIDB4N2RjMDQ5ZTgsIDB4ZDhiOGRmOTAsIDB4MWM5ZjZkOTgsIDB4MjhhNmE0Y2IsCisJMHg3NjY0ZTU1OSwgMHgyYTNiZjZiZCwgMHhkYTFjYzIyMywgMHhhMmE4MjM5ZiwgMHhiY2VkMGRiOCwgMHhkZDI3YTg3ZSwKKwkweDMxYzhmZTJhLCAweDQ2ZmI4MzhlLCAweDAzM2UzNzMxLCAweDEyNzBkMGVjLCAweGNjMjM2YmQ4LCAweDg3OTA2MTI1LAorCTB4MTk4OWI2NWQsIDB4ZGFlNjNmNjAsIDB4ZmNjMzY0MjYsIDB4ZmFiMjFlNWYsIDB4NWVkMjU4NGQsIDB4OWJmZTViZWUsCisJMHg3ZGE3NzJhZCwgMHg2NmMzZTlhNSwgMHhmYzZkNWJiNSwgMHg0YzdmMmEzNSwgMHgyNzc5ZDg1MiwgMHg3MGQxZWJkMCwKKwkweDkwMDNlYjY4LCAweGMyZTBlMDA5LCAweGRhZGY0ZGIzLCAweDIyODc4ZjUwLCAweDAwOTM2ZjE0LCAweGZkODc4YTBlLAorCTB4ZmIwNDY5MWMsIDB4MjRhNGRmMjEsIDB4YjAzYjA2NGYsIDB4MzgwMDU4NGYsIDB4OWQ3ZWY2ZGIsIDB4OTJjZWYxMDksCisJMHgwMjFmZWJkMCwgMHgzZWRhMjViYywgMHgwZmJmNWJhYywgMHgzNWI3YjQ2YiwgMHgzZmYzNDg3YiwgMHhmMzQ5N2IzNCwKKwkweDgyYWVjMTdiLCAweDFmZDUzMmY2LCAweGJlZDk5OTcxLCAweDA1YjA4NGQ4LCAweGU0Nzg1M2VmLCAweGEyOTU3Y2FjLAorCTB4ZTc0MGIzY2EsIDB4ZTNjZWEyNTEsIDB4NzA4MmQyNjYsIDB4NGNhOWY3NjksIDB4NzI1MWYxNTMsIDB4MzlhYmZhODgsCisJMHg1NGM4NGVkMCwgMHhlYWE5ODc4YSwgMHhkZDUzMmE3ZCwgMHg2ZTIyZmJmYSwgMHgzZWZiMWIxZSwgMHg5ZTlmYWQxNSwKKwkweDFiYWUzN2RlLCAweGEzZjYxYWQ3LCAweGM4Nzk2ODdlLCAweGY5NGZlZWM3LCAweGMzZjk4ZmJkLCAweDdlZjAwN2UzLAorCTB4YjFkZmQ2MDEsIDB4MDlmZWVjNTksIDB4MjFjM2MzMTcsIDB4NzYzYWY2MjksIDB4ZjFlYjk1NTEsIDB4OWMwZTQ4YTYsCisJMHhlN2JmZGVjNywgMHgxZTZlYjhlZiwgMHhmN2Y3ZjNkOCwgMHg3NzFjOGVjMSwgMHg5NzkwMjA0MiwgMHhhOGM0ZmUzYiwKKwkweDE4MGZjYzc4LCAweDY5NWYyMzJiLCAweDZmM2Y3YWZkLCAweDljZjYxMWI0LCAweGNjZGVmZjQ0LCAweDcyOGYwYTQxLAorCTB4YzE2N2MwMjUsIDB4OGY1Mzk1ZjIsIDB4OWRmZDBhM2MsIDB4ZTg5MDJhM2YsIDB4OTI0NTFmNzMsIDB4ZTVjNDIwNjcsCisJMHgxZGRmZDQ4YiwgMHg3YjMxYzgzYSwgMHhhODNmNmI0YSwgMHgxMWM3ZGVmZSwgMHgyMTIxNmY5NSwgMHhjNTY3YmI0MywKKwkweGE5ZTc0NTFjLCAweDFhMWZmZGVhLCAweDJmMWVhNzVkLCAweDc0ZTQyMTNlLCAweGZkZmMwZmE1LCAweDVhMTBlMjMzLAorCTB4YWE5Y2UxZmMsIDB4OWZmMzQ5MGYsIDB4ZjVjZTdjZjAsIDB4NjAwYTc3OGQsIDB4YzY5ZjVmYmYsIDB4ZGM2YTI1MTMsCisJMHhlOWVhNjQxYiwgMHg0ZTIxYzU0NywgMHg2ZmY2MGQzYSwgMHg0ZThmMzNmMywgMHhiN2U1YmM4MywgMHhmNDgxNGM3OCwKKwkweDk5YmU3Njg2LCAweDNlMTZmNTAzLCAweDQ2MmFiZGU2LCAweGJhMWY1ZWZjLCAweDk5NTVlZjEzLCAweGEzZTRjZjFiLAorCTB4NWZjN2YxYTcsIDB4Mzg2NGY5NGQsIDB4M2IzMDlkZDAsIDB4NGJkZDhmMzAsIDB4ODFlZmE0NjIsIDB4MTQ5MWZmM2QsCisJMHhiZTNkZGExOSwgMHg5MWJmYTNiYiwgMHgyYTljYWYwZSwgMHg5ZWFjN2RjMCwgMHhkYmU0NjFlOCwgMHhmZTllNzQ3ZCwKKwkweDUzNzdlMTJiLCAweGJmOGZjNDJkLCAweGZhYzJlYTliLCAweGFjMzRiZWFiLCAweGRkZWFmYzZiLCAweGQ4MTI2NGZiLAorCTB4NGU5ZjFhNzksIDB4MzM3YzYyNDksIDB4NDlhM2Y3NmUsIDB4MmY0OWRlYzQsIDB4YzU4NmRlMjMsIDB4Yzk3ZmZlMzMsCisJMHhlZTI1ZDlhYSwgMHhhM2U4ZDM1OSwgMHg4NDNhZTk3NywgMHgyZDI3ZWE4YywgMHhhYTU2Mzc5MCwgMHg3MGZiM2FjMiwKKwkweDQ0MjVkYTExLCAweDVjNjJjZjNkLCAweGI3ZjM2NmRmLCAweGRhNzUwMTRkLCAweGNjZmVlZmQzLCAweGY1N2FjYjk0LAorCTB4NmZjNTM5N2IsIDB4MGViMDBiZDUsIDB4OTlhYjA5MTYsIDB4NzhlZDUzMWUsIDB4OWQyMzFlMGQsIDB4MDhhNTIzZGYsCisJMHgxOWYwNzc3ZiwgMHhlNzA4YzBmOSwgMHhmNmY5MWQ0YiwgMHhkYTA3YWUwYSwgMHgxOGNjZTBlZiwgMHhjNjI2MjU5OCwKKwkweDhmODY4Nzk4LCAweGM3YWU4NDk5LCAweDhmNWZiZGQ5LCAweGRiZDc4YzZmLCAweDE3OGVlN2VmLCAweGRhZDAxMWZlLAorCTB4ZTkxOWJjOWQsIDB4ZjRkNzZjNjYsIDB4OTAwYzExNDcsIDB4ZWMxZmE1OGIsIDB4MjlmMWI5OTMsIDB4OGJhMmRmNDgsCisJMHgzYWU4NTExMiwgMHhjZmU5ZmE0MywgMHgyYjkyOTNmNSwgMHhiOTU2ZGY5MSwgMHhmOGVlYjNkOCwgMHg0ZjIyZmFhZCwKKwkweGY5M2IyMzNjLCAweGQ4N2E2YzRlLCAweDViYjc3YzA2LCAweDFjNDFiN2E4LCAweGY0ZmIzYWY1LCAweGMyYmQxMDNhLAorCTB4ZTI2NjBiY2YsIDB4MTMxMTE1ZmQsIDB4OTRkYWQwODEsIDB4ODg2Njk5ZDAsIDB4MjQzZjc4MzMsIDB4MjBhMWJlNzgsCisJMHhmMDMyN2ZiNCwgMHgwYjQyYWJlOSwgMHhlNzZkNTlmYSwgMHhjYTM4NzkwOSwgMHhkNTBhNmNlZSwgMHg2YjJlYzBkOSwKKwkweGYzZTc2NjRhLCAweDVkMTAyNjBlLCAweDc4YzVmNGZlLCAweDhlOWE2ZmE2LCAweGM0YTY5ZDllLCAweDYyZWUxZjY4LAorCTB4Mjg4MzNjZmMsIDB4OWZmNDM5YzksIDB4N2YyOWViNDUsIDB4YzdkYzFmODAsIDB4NDI5MjcxODEsIDB4MzI1YWZkY2UsCisJMHgzOTczMmRkOCwgMHhmNmRhMjNmNCwgMHg5OTJkNzk4ZSwgMHg3YjdhZGJjMiwgMHgyOTk5ZWEwMiwgMHhlOWRkZjc0ZCwKKwkweGZlMDg4NGEyLCAweDZmM2UyNDYzLCAweGZlZjBlMzJmLCAweDhkZDkyMjg0LCAweDU5YzVhMmY1LCAweGY5OGRmN2U4LAorCTB4MDk0NjY5MjYsIDB4YTIyMGRmYjQsIDB4YWY4NTMzZGYsIDB4NzU1ZTIwMTQsIDB4YWJjMzhkM2EsIDB4OTE3MGY2M2MsCisJMHg2MjNkZjg1YSwgMHgwZTM2NzRmZiwgMHhjMDkzZjk3MSwgMHgyNGE3N2QzZiwgMHg2NmZlMDQ2OSwgMHgwN2Q1YWM5ZSwKKwkweDEyMmVlZmUxLCAweGZhYjZmZjgzLCAweGNkZmI3M2E1LCAweDJjZjU3ZGI0LCAweGE3OGRmMzBlLCAweDNmODgzMmI4LAorCTB4ZDY4YTdmOGEsIDB4NWJhZjM4NGIsIDB4YzAwNWE5NDIsIDB4ZjU4YTMzZDcsIDB4YWFjMzFlZTcsIDB4ZDRhYjM5M2QsCisJMHhmYmQxMDI0NiwgMHhlNTBiOWNmOSwgMHhmZGI1YTBmYSwgMHhmMTFkZmM1NiwgMHhmOTgxMjJiZCwgMHhhMzdlNzI2OSwKKwkweGU3YjNlZmNhLCAweDliYmVlOTI0LCAweGE5ZGQ5ODRlLCAweGFhNGRkNWM5LCAweGZhYThkZGZjLCAweDE5M2Q3M2NkLAorCTB4MDk0YmYxYmEsIDB4NDBmZTg3YjMsIDB4NjQ4MTBiZGEsIDB4N2VkOGI4ZjcsIDB4OTZmNmI0ZjQsIDB4MjVlMWYzYzMsCisJMHhkMDY4ZGZiZSwgMHgzMTBkMzc4NywgMHhlNTdjYmRmOCwgMHgzNDhiZTQ1YSwgMHhjOGY3OGRjZSwgMHgzN2VkZjViOCwKKwkweDhkZDdkNThmLCAweDBmZDQ2YmYyLCAweDhmOGIyMGIzLCAweDM0MjdhYWVmLCAweDJmNmIzMDdkLCAweDY4M2M0MjJmLAorCTB4MzNjNTNlNTYsIDB4YmI3YWM1ZGEsIDB4MzE3ZDI3YmQsIDB4N2QxYmFlMjYsIDB4MTdiZTQ5NzEsIDB4ZmEyZTkwY2MsCisJMHhlZmUyZTNlMiwgMHg0YjdlMmZhNSwgMHg1NGIxOTZkZCwgMHg1NzhlZGZhZSwgMHhhNGZlY2RkNywgMHgyOThkZTgzZiwKKwkweDgxNDc4ZWZjLCAweGJhZThkYThmLCAweDQ3YzE4ZTY5LCAweGM1YTNiYWRhLCAweDFjYTg4YTAxLCAweGM1MzgxZWEzLAorCTB4NWNhNjYzZjYsIDB4OTFmZTI3NGMsIDB4MGU4MDcxOWQsIDB4MTJlZDQyM2QsIDB4YTk3YjBjNzcsIDB4ZTUxYjNlMzUsCisJMHg2OGVmNDNhYiwgMHgyZWNhMjU3YSwgMHhiODdlZjMxMSwgMHhkYTg1MzI1ZCwgMHhjMDJlNTJhMywgMHgyYmUxMGZkNywKKwkweDI5MjVlZjUyLCAweDg4MmI4NDgyLCAweGMxOWRhNjFmLCAweGEwNTc5MDM4LCAweGNmYWUyY2ZlLCAweDgxN2YyMjRmLAorCTB4M2IxMmUzZmUsIDB4YWY2OGMzZTUsIDB4MGFlODcxNjgsIDB4ZTk0ZjY2OTcsIDB4MWUyM2E1ZjksIDB4YzNkZDkzMzksCisJMHgxMTQ5ZjFhYSwgMHg3ZmU0MTNlMCwgMHgwNGZiOGYyNiwgMHg3ZmQ0MWJmZiwgMHg4MDAwYjMwMywgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjYzVmZjAwLCAweDU1NTQ3ODA5LCAweGY1NzlmMDk2LCAweDU1NDkyZDVlLAorCTB4MTQ2Y2FhOTIsIDB4YjYxMmYwOGIsIDB4ODQ1ODI0ODQsIDB4NTkxNmVjODAsIDB4YTAxNGEzNTgsIDB4ODE2OGNiODAsCisJMHg5YTEyNmIwYiwgMHg2OWVlOWM3MSwgMHgwMjQyYTZmZiwgMHg4M2I3NDM0MywgMHhlOGNlZGFkMiwgMHgzYWQ4NTdmNCwKKwkweDA4YjQxYTgzLCAweGQwOWQwMzAxLCAweDU4NGM1MDE1LCAweGY4MmUwODM0LCAweDFhNmQxYWQ5LCAweDg0NDkwZWQxLAorCTB4YmZiYjQ2ZDYsIDB4NzM5Y2ZmY2YsIDB4MmFhYTRiZWYsIDB4ZmZmZjRkODUsIDB4YjQ5ZmRmM2YsIDB4ZGVlZmI5N2QsCisJMHg2N2I5ZWY3NywgMHg5NzllZTczZiwgMHhiMzU1OWJkYiwgMHhmNmUwMDhhZCwgMHgxNDA3OGE5OSwgMHg3N2YxZDAwMCwKKwkweGUwNDJjMDIyLCAweGFkYWNjMzdmLCAweGM3OGVmMDE2LCAweDY5ZmNkN2JlLCAweGU3ZjgwZDg3LCAweDljMmZmYzNiLAorCTB4YTQyY2ZjOTAsIDB4OTAwYmNmNTAsIDB4Y2U1NGIwMDksIDB4N2Q1N2ZjNWYsIDB4M2M1ZTNkMzMsIDB4NTJmZTdhMjcsCisJMHg5MmI5ZmQ5OCwgMHhmODFiNzAwYywgMHhmNzFjMzBjZCwgMHhmZjhlYzVmMywgMHhjNzE1NGJlYywgMHg3ZThiMmU5NywKKwkweDRhNGNlOTllLCAweGZmODc5MGJmLCAweGJlMjMwMTE4LCAweGQ0Y2EwMTUzLCAweDIyYjc5ZGJhLCAweDU1MjdkZGJjLAorCTB4MzM0YzU1OGYsIDB4MzkwZmZlZDEsIDB4MzUwZmZlYzUsIDB4N2M4MDBjOTcsIDB4MTY3NGRmODAsIDB4M2RiMWY4YTcsCisJMHgxYzIxMTFiNiwgMHhkMWJhZDAwZCwgMHhlYzcxZWRjNiwgMHhlZmM1ZjEwNywgMHgzYzY2ZTdlOCwgMHgyMWZjMDU5ZiwKKwkweDUyYjRiNjA3LCAweDQ4MDFiNzIxLCAweGM0ZWQxODA1LCAweGZmNjAyNzQ1LCAweDBkM2Y5ZTJhLCAweGMwMjQ4NmM3LAorCTB4NWMyNDczZWYsIDB4ZTdhZjAwZDksIDB4ZjEwNGU3OTgsIDB4NWViOGMzYmQsIDB4ZTMwZGQ3MDAsIDB4Zjc1YzAxZmEsCisJMHhmNzI3NDZjOCwgMHhlNmU4ZGI1ZiwgMHg0NDJlMGRmZSwgMHhmYWMwMDY2YSwgMHgzN2FmMjcxNCwgMHg4Nzc2ZjcyZiwKKwkweGUzNWJkZjFmLCAweDUwZTdlNmNjLCAweGY4NDRkYTNlLCAweDdiMmZlMDM2LCAweDEwMDQwODZhLCAweGFjNzdhZmRmLAorCTB4ODA3NDk0ZDAsIDB4YjFlMmI3MmEsIDB4MDFkMWY1NjYsIDB4OGU1OGUzNGYsIDB4YmUyNWNiZjMsIDB4MTAyYWI3MmIsCisJMHgxZmU1ZTdjNCwgMHhjNDA3MmJhZSwgMHhlZTMzNTc1ZiwgMHgyYWE5Zjg4NywgMHhmYzM2ODM1NSwgMHg2M2QzNDk2NywKKwkweDBjZGY0NTNiLCAweGRlZmEwOGQ2LCAweDMzMDI4ZTIyLCAweDg2Y2QxNmI1LCAweDI4ZjAyY2ZiLCAweGYxZjcxNTFlLAorCTB4NmZmNzg5MzYsIDB4MWQ0MTJhZjUsIDB4Mjc4Yjc5ZmYsIDB4NjM4NzFlOWEsIDB4YWU1OGJlZTgsIDB4MGZmZTgwYjMsCisJMHg0NzMwNWJkZiwgMHg5ZDcxODYwOSwgMHhkZmEyOTMwNSwgMHhkNjc1N2M1YiwgMHhmZWQ4Y2FlNywgMHhlODk4YjQ3YywKKwkweGJmM2ZiNjNlLCAweGI3NzQ0ZWRjLCAweGMxODYzZmUzLCAweDk1ZmJhMjMwLCAweDhkNmZhNThiLCAweGM1YmEzZTg1LAorCTB4OGU3NGIxYjYsIDB4OWQxNmJmMWQsIDB4NjczYTI3ZWYsIDB4YzZjZTliNWMsIDB4Y2U4YjdmZmIsIDB4OTA0ZTExMGYsCisJMHgxYmY0NzBiZSwgMHgzMDA0OWU4YiwgMHgxYTA3ZTliYiwgMHg1NWY2NzlkMSwgMHgzMmFkZDc4ZCwgMHg4NjE0MzNjZSwKKwkweGQ0ZmU3OWQyLCAweGI3NmZmODU5LCAweGFhZmNkZjQyLCAweGZlMmQyZmE2LCAweGU3OWY2YjgyLCAweDIyYmZlZDZmLAorCTB4NjlmZGU3NDUsIDB4ZGY3ZTZmNWYsIDB4ODAzNGYzYmUsIDB4ZjljZTc4YzEsIDB4OGRmOGQxMzksIDB4YmQyYzZiYTUsCisJMHg2MmY3Y2ExNiwgMHhlNjM1YjVlOSwgMHhhMDVkMDYxYywgMHg2MDY4OTkxMywgMHg1NTVmYmMxYywgMHhkMTZiOGUxOSwKKwkweDE2MmU5N2FkLCAweDdlNGYwOGZmLCAweDVmODA3MWZmLCAweGQ2ZmFiOWYzLCAweDc2ODI3NDkzLCAweGUwMjA1N2NkLAorCTB4MDNjODQ3MzIsIDB4MDUyMDc1ZjIsIDB4MGFkZTViZTksIDB4ZWMwNDQ0ZTEsIDB4M2U3MzhiOTYsIDB4MjhmNWE4ZDcsCisJMHgzOWM0NjlmMCwgMHg4MzUzZTdlOCwgMHhmYWRmNmFjZSwgMHhiMjA3NTc2NSwgMHg5NmZiMTlmYywgMHgxNGIwMTA2OSwKKwkweDk3MjE3M2QyLCAweGQyNTVmMGIxLCAweDdlNjkyMzNhLCAweGNiNjhmOTgwLCAweDEwYjJkMzJlLCAweDA1YmE2MzllLAorCTB4OWI1MWY1ZWUsIDB4NGUwM2RhMjgsIDB4OWQxYTA3YTEsIDB4ZmJiNzVlMjYsIDB4NmUwOTliMmIsIDB4ZjBlNTc4MDQsCisJMHhmODQwNjI4MCwgMHgwOWU3NTYzYywgMHgzMzIxOGJkMiwgMHhjOTQ1ZmJmMCwgMHg5Y2RmY2YzYSwgMHhkYzA0ODEwNCwKKwkweDliNzZiNDFmLCAweDJiNDRmOTBmLCAweDM5NDFjODA2LCAweDgyNTkwNmQzLCAweDlkNjRiODM1LCAweGRjOTFmNjE2LAorCTB4YTgzNDdiNzUsIDB4ZDFiYmI5NDYsIDB4ZTA0OGVmNzgsIDB4NmM5MjQwMmUsIDB4YTk5NDc0ZmUsIDB4MGZkZThiMjYsCisJMHg3OWM1NGZiNywgMHhmYTZhMTUzNywgMHhiMmUyOWMzNiwgMHhmMWEwM2ZlYSwgMHg5M2FiNjZhZSwgMHhmODNlZWJkZSwKKwkweDVhNjYyZGNmLCAweDIwZjAyYmU3LCAweDMzNWFmMDg0LCAweDRmOGUxNTMyLCAweGE0ODM5ODczLCAweDkzZDRjYTM3LAorCTB4ZGRmYjA5YWEsIDB4OGZhNDAwM2QsIDB4OTcwYjJkYTYsIDB4M2E2ZGQyMDAsIDB4YjEzOGQ3YjQsIDB4OGM3NDQyOWQsCisJMHhkMGJmYmY0MywgMHhkZTg0MzM3OSwgMHg5YTc0ODgxYSwgMHg0MzM0ZTkyMSwgMHg2NjkyYWJlYSwgMHg0OTQ2ZjU5NSwKKwkweGFjODQxYTkyLCAweGIzNzRmZDNlLCAweDQwOGNkMWE0LCAweGVlMGE0OTdiLCAweDNjNTM0MzNiLCAweGY5YmZkODM1LAorCTB4OGZjNTE2YWEsIDB4YmEzZTkzMmYsIDB4OTUxZjRmYjEsIDB4M2RiZGY1YzksIDB4MDE5Njg2YmEsIDB4ZmYzNDQyNjYsCisJMHgzZDBhMzU5NiwgMHg3OThiNjI1NCwgMHhiZTBmZWQyZSwgMHhlNjU1N2NjOSwgMHg0MjlmMWU4YywgMHhmYmY5MTNiYSwKKwkweDgyNWU4YzYyLCAweGE2NTNmYjE4LCAweDAzYjkzNWZlLCAweGM1OGFmMGYxLCAweDg0NTRkZWZiLCAweDE5YjRlN2JiLAorCTB4NzBlN2M1OWUsIDB4ZmI5MzNiMTEsIDB4YzYzMWE3ZTMsIDB4MDdiNmM1MWUsIDB4NzU3YTI3MGYsIDB4ZTIxNWViODQsCisJMHgwN2Y1MDcyMywgMHhkN2IxZjU3OSwgMHhhM2I2M2Y5ZSwgMHhmMThlOThhNywgMHgwZDIyZGQ0YSwgMHhjZjJkOTliMiwKKwkweGYwZmIzM2JhLCAweDkyYmYwZmRlLCAweGFkNzhiMTBlLCAweGRiZGU3YTk3LCAweDhlOGQ3Y2U4LCAweGFkOGYwZmRiLAorCTB4OTc5ZWQ4YjMsIDB4NDhkNzQ5ZmMsIDB4ZjhiZGZkZjUsIDB4OTVlNWU0MzQsIDB4ZTI1ZTg5MGIsIDB4MGMyZTU3ZmYsCisJMHg0YWZkYjJmMiwgMHgwYzNlNTlkMiwgMHhmZTc4Mzg3OSwgMHg1MWU5MjI3MiwgMHgyMWFlYTdjNCwgMHg2Y2I4ZjQ5ZiwKKwkweDlmOTk2NzllLCAweDA2ODQxYzg1LCAweGMzNmUwYThlLCAweGMxMjQ4NWZlLCAweGY2MjRhZmY3LCAweGJjMjNjZjFjLAorCTB4M2NmMjYyZGYsIDB4ZWI2OGRiNGIsIDB4MjAyYTJmODcsIDB4ZDE3NWI5ZmQsIDB4ZTI4MDMzNzksIDB4Mjg4N2U1MDUsCisJMHg4NGVlOGE0ZiwgMHhhMDBkYjFiYiwgMHgwNWZmMTEzYywgMHg3MjQ4MjE1MiwgMHhkMDEwODY2MiwgMHg3ODVlMzViZSwKKwkweGQzMTlkYTlhLCAweGZiYzIxNGY0LCAweGRkYjM1YzY1LCAweDI5ZTllYjQxLCAweGQ3ZjBmN2M0LCAweDA1N2QxMzJiLAorCTB4YmY1ZmYxZmQsIDB4ZWUxYTdjMTEsIDB4ZTZkMWIwZDMsIDB4MWMyZjUwZDMsIDB4N2VlNGU4ZDgsIDB4YjczNzQ2ZTMsCisJMHhkY2VhMzY4NywgMHhmYzkxM2E2ZSwgMHhhYTFmZjI0MywgMHgxNjlmMTZiYywgMHhhNWU2NTdhMSwgMHgwMzMwZmQwYSwKKwkweDM1YzEwZWY1LCAweDAwNjA5NDAzLCAweDIzYzY2Zjc5LCAweDcyODhmMmMwLCAweDEwYTRkYzEwLCAweDM5M2NmMGJkLAorCTB4ZmE0NGY4N2QsIDB4ZTg4OGVlNWMsIDB4M2I1NmFkNDMsIDB4ODJhNTkzMjEsIDB4Njc5ODVlZTksIDB4MDlkMWY3ZTIsCisJMHhkNTlmM2UwOCwgMHgzZmQyM2U3ZiwgMHhmYzhjYmZhYSwgMHhlZmMzODQxNiwgMHhiMGI5OTZmMiwgMHhiMzdjMzkwZCwKKwkweDdhZGY4ODVkLCAweDRiZDFlOTY1LCAweGY0YjlmZGMwLCAweDQzYjk1ZWJjLCAweDhmZWI4NGJkLCAweDFmODRjZjBmLAorCTB4OGYxOGJkYTIsIDB4ZTJiYzIxODQsIDB4ZmYwNDVkY2YsIDB4MTAwYjE2ODQsIDB4YjJiMGQwN2QsIDB4ZjIxYTE2N2MsCisJMHg1Y2EyYjVmOSwgMHg4NDQ4ZmRjMCwgMHhlZjhjMWJiZSwgMHhjNGMzY2I1OSwgMHgyM2EwMDc0ZiwgMHg2NDVlZjA4ZCwKKwkweDdlNDlkOWYzLCAweDNmMDRiOTk3LCAweGRkZGI5NTc4LCAweDM5MzdhZTBhLCAweDA5NTFlMmMzLCAweGYxYmVlMWI0LAorCTB4MmQ3ZjExZWIsIDB4Y2UyMWI4MTksIDB4MWNjOTY5NmYsIDB4YjcxM2U3YTIsIDB4YzkzZWYxYmQsIDB4MDhlNmQ3YjcsCisJMHhjYzk4NmNhYiwgMHhmNjExMWQ5ZCwgMHhlMzNjMDA3YywgMHg3NDkyN2YyNCwgMHg0NzY4NzdkYywgMHgwZTRlM2Y1YSwKKwkweDZhYmI5ZWIwLCAweDZiNWU5MjA5LCAweDA5ZWM5MzNkLCAweGFmZDMzZWUzLCAweGFjYmZkOGRhLCAweDZlNTExN2E3LAorCTB4OGYyNjI3MGYsIDB4NDIxMzNkNjUsIDB4NjNmMjQzMGQsIDB4NmQ5OGU3MTMsIDB4M2MyM2FmZjYsIDB4N2EzZTY1YTAsCisJMHhlZGZiZGYwYSwgMHhhZmQyMDA2NSwgMHg1NDNmZGJkMywgMHgzMTJkMGZjOSwgMHg0MGU4MGVlNSwgMHhhMzJhOGYzOCwKKwkweGYyN2RhODUzLCAweDZlN2NlNGUzLCAweDEyNzcyNGNmLCAweGVjOWIwZTdlLCAweGNlZmJlZDNhLCAweDA0NzRiZDQ2LAorCTB4OGRhOWNiZjIsIDB4ZjkwMjNhNTAsIDB4MzY4ZGFkZTMsIDB4NzQ2ZjRmNmUsIDB4YTM2NjdiNzIsIDB4MzhhM2RiOWIsCisJMHgzYWYzZmM0ZSwgMHhiZDdmMTM4ZSwgMHg2ZmQ0ZTM4MSwgMHg0ZjZhNzFjMywgMHg3YWQ0M2FlMCwgMHg0ODk4NzJkZiwKKwkweGU1YmM2NzdlLCAweGJjMmRhOGQwLCAweGZhZGI4OTJiLCAweDc0MmM5MzNiLCAweDUwYzljMzhlLCAweGZjNGZlYzY3LAorCTB4MzcwYzRlMTQsIDB4MmVlNTA3ODAsIDB4ZGI1M2ZkZDUsIDB4YWQzZjY4MGQsIDB4MWM2NTAyZmUsIDB4Zjc1NGQ0YzAsCisJMHhhZTNhNmQ1YywgMHg4ZmU4N2IzYiwgMHgxOWYxYzJiZSwgMHg2YTdlYzNhOSwgMHgzYjZmNzg0MywgMHg4OTM4NjhlMywKKwkweGY1YzdkMmZkLCAweDNmODgzYTlmLCAweDkyYTIyNDRmLCAweGI3NjQzYzI0LCAweGM3MzY1MTc5LCAweGM0MThkMjkzLAorCTB4MjRjMmY3NjgsIDB4ZmQxOWE3ZWMsIDB4YzhhNWI5ZWMsIDB4M2E0YTRiMGEsIDB4YjAwNWMwZjIsIDB4NzNlMWIxZjMsCisJMHgyNWRmODg2ZCwgMHg1MTNmZmY3NiwgMHg5YjY4MTJkZiwgMHhmYTlkM2E1MywgMHhiYzkyNzAxMCwgMHhjYjIwZTYyYiwKKwkweDdkMjUxMGZiLCAweGFkYmZkYTExLCAweGQ0YzRmZjBlLCAweGFiYzA3ZjA4LCAweGY0OGQyMWZjLCAweDAyYWY0NGMzLAorCTB4NzdhNjc0YWUsIDB4ZjdkMmE0NzAsIDB4ZDViNzk4ZGMsIDB4MTUzMTM2NTEsIDB4MmVkN2Y3ZjksIDB4YzI2OWY5OTUsCisJMHg3NDFiYzUzNCwgMHg2MzVmOTdmNCwgMHg3YWYzODRkZSwgMHhlMjZmZDEyOSwgMHhkNGI1NTljNSwgMHhlMmUzOTgyZSwKKwkweDRkZDk2ZmJlLCAweGE1ZmYyNGI1LCAweDVmYmQ2YjhlLCAweDVjODdlZmMyLCAweGM1NDdkNjY2LCAweDYzOGJjZTFhLAorCTB4ZTM3OThkMTcsIDB4ZmZjOGM5OTEsIDB4MGM0YjY5ZWUsIDB4N2Q3YzRiM2UsIDB4ODQ5MzVmZDYsIDB4NTY3NzMyZmQsCisJMHgzNDc1MmFhMSwgMHg2YmI1ZGY3MCwgMHhiZjk3OGQxYiwgMHhlNTcyYzBkZSwgMHg1OWU4ZjI0OSwgMHhhNWVkOGFjNCwKKwkweGQzM2UzODY5LCAweDI0YzI3OGExLCAweGE5M2VkMzJhLCAweGE3NzFhMzRkLCAweGNkYjQyMWUyLCAweDU1M2I4ZWY0LAorCTB4NTQyM2UzNDQsIDB4OWZlYTRjY2YsIDB4ZDg5ZDRiZDUsIDB4NGU2NmQxOWUsIDB4NjZmMzg0YmQsIDB4NmM3OGE0ZTcsCisJMHhmMDk5ZGVmOCwgMHhmZjEwYWU4ZiwgMHhmMjQ5Y2NjZSwgMHgxNzE0ZTgyNCwgMHhhNGFlOWYwNCwgMHhhOWVhYzdiZSwKKwkweDhmMWNlOWQ2LCAweDNhZDMyNDk1LCAweDYxMzFlMmJhLCAweDkyZDZmZWJmLCAweDE0NzA0NWZmLCAweDUxNDA1MmZiLAorCTB4OTFhNWRjNjgsIDB4YzdlNGZiMWYsIDB4ZTI3NTI5M2YsIDB4MGFhMWZhYmMsIDB4MDk5Y2ZjOTAsIDB4ZTA5MWZlZTcsCisJMHhhODlhZDk5ZiwgMHhmNTQwMjAyNywgMHhiZDI5NjcxNiwgMHg5YzUxNmY1NywgMHgyYmVmYjg5YiwgMHg1MTgxZjlhMSwKKwkweDVjNzlmZDY2LCAweDc2OWRlNGY3LCAweDZmZTUwN2I2LCAweDc0NWZiM2U1LCAweDZjYzFjZWYyLCAweDlhZGZjYTE3LAorCTB4NDllZDRjNTYsIDB4Y2JkYmYwOTMsIDB4YzM5ZjJhZGYsIDB4OTMwODI2ZTMsIDB4ZWJiZjI5NTIsIDB4MWRiZGY4MWYsCisJMHg0ZDI5M2YyNSwgMHgwYzRmZjVjNywgMHg0MTZlYjE3MywgMHgxMTZhOTUzYSwgMHg4M2U3MGQ3YSwgMHg1NWRmZWY0MiwKKwkweDk0NWJmM2MxLCAweDhmM2EzZjAxLCAweGE3ZTRhZmYzLCAweGZmNzE1YTE0LCAweDUxMDllOTU5LCAweDcxMGNlN2YzLAorCTB4OGRlN2Y1NDUsIDB4NDVhYTU4MTgsIDB4ZmNmMmIxZDgsIDB4YWRmZWE4YWMsIDB4ODhlOTRhNDUsIDB4NjliZWY5ODgsCisJMHg0NWZkNTEwOSwgMHgxMWQyYWVhNSwgMHgyYjZmZjMxMSwgMHg1ZmQ1MTgxZiwgMHg1NDU2NWI3MiwgMHhiMjY5YTY3ZiwKKwkweGExMWIxZmQwLCAweDdkYzg1NGJjLCAweDliZmIyOTc5LCAweDBhODdhY2Q5LCAweDFiZWU2MjlkLCAweDhlM2Y3ZTM4LAorCTB4N2YwOWI2MTcsIDB4ZmU4NWQwYWEsIDB4YjRhNWQyMTQsIDB4ODBmZDg4YWQsIDB4YzY4ZjdjMzYsIDB4OGY1MmVjOGIsCisJMHgzZGRkYTAwNSwgMHhmYzgwZWM5MSwgMHhmNjJmZTIwOSwgMHg2Njc3NjU4YiwgMHg2MzA1ZmEzYiwgMHhiNzY4YWU4OSwKKwkweDc1MmZlMDIzLCAweGZhZjFkYjQ0LCAweGNjMjdlMTQ0LCAweDBiYWQ3ZjAxLCAweDc1YTczOWU5LCAweDY1NTdmYjFlLAorCTB4NjE0NWQ1ZTksIDB4YmY0NjdjMjAsIDB4MmEzNzBiMWYsIDB4MTM3NzlkZDEsIDB4YWM2YWI2MWYsIDB4ODkwY2U3MzcsCisJMHhkNGFkYWZkOSwgMHhmNDhjN2VjMSwgMHhiN2M4ZTZlZiwgMHhlMDIxN2Q4YywgMHhjNmZmMjc2ZCwgMHhmZmIxODczOCwKKwkweDQ3MzNjZWI1LCAweGUxN2VjNjlkLCAweGFjZDczYWRmLCAweGE5YTU4NTljLCAweGNmNWZlMTcxLCAweDljMmM0Y2ZlLAorCTB4NGYzMmE5NzksIDB4ZmIxNWZlODEsIDB4ZWNhOWFkODUsIDB4N2E0ZmUyMmYsIDB4ZjBjMTNmM2MsIDB4Y2Y1MWNhN2YsCisJMHg5Y2Y1MjJiOSwgMHg1ODVmNDk0MywgMHg2NzNkNmQ3MCwgMHhmZjJkN2JhYywgMHg3OGQ3NThjZiwgMHhkZTU0ZWExZiwKKwkweGY3YmY3OGRmLCAweDdmYzRhZWI5LCAweDI3ZTcxYmJlLCAweGFlOWU3OWM1LCAweDVjZmU3ZmM0LCAweDlhMTlmY2Y0LAorCTB4Nzk0MGUzNWUsIDB4Mjc4YTBlM2UsIDB4YTkzZjc4NDAsIDB4OTU5YWU0NmIsIDB4NTJkNmY1OWMsIDB4NWZhMWY2NWIsCisJMHhmNjcwYjcyMywgMHhiNTJkNDBmOSwgMHgyNzgzM2I1MywgMHhiOWZlNzhhZCwgMHhmOTRlYWEzOSwgMHhlYTJmYzMwNywKKwkweDBhYTU2NzE3LCAweDU1ZjhlNDdmLCAweDc4ZTNhZWRkLCAweDUzYjc0MDdkLCAweDg4ZmY1MWRjLCAweGFhZjhhNzZlLAorCTB4Mjg3MzBiZGUsIDB4MzcwZWY0OGUsIDB4YzQzOGE3YWQsIDB4ZjYyZDg3OWIsIDB4ZmExNTRkZWYsIDB4ZGY3Yzg1N2UsCisJMHhmZWE5MGY2OCwgMHg4NTdmMDQxNSwgMHhmMjUxZTNhZCwgMHhlOWJmMmE0OSwgMHgxYzVmMTBiMSwgMHhiZjJmN2YyNywKKwkweDVjNzdiZmJmLCAweGJmNjgzYTBiLCAweDFkMDQ4ZmUzLCAweDdlN2QwOGJlLCAweDIyZGVmZWJkLCAweGUyMGNhNjYyLAorCTB4YTkxN2M1NTMsIDB4MDk2YzRhNGYsIDB4NTFmZDQ4YmUsIDB4ZjU0NTc0ZTYsIDB4ODNmZjkzYzcsIDB4MGY3NmNkZWYsCisJMHhhZTZmN2E4YywgMHgwZjM1MTU5ZSwgMHhmMjFjZDhmZCwgMHg5MDJjNmE4NywgMHgzNTNlOTFhMywgMHhjZmM4N2EyNSwKKwkweGVmZTNjNThiLCAweDBlM2RmOWU1LCAweDYwNTFiOTI3LCAweDdmNTVkNzRlLCAweDI5ZTRmYjFjLCAweDdkOGJmODExLAorCTB4YzQ1NTNkYmUsIDB4OWVjODgzNzMsIDB4NTIyNzNhZTMsIDB4NTU2YjZlNzUsIDB4ZDBlNjcwOWYsIDB4ODg3ZTI2N2YsCisJMHhiYWFjNjNlZCwgMHg5NWMzZDY4YywgMHgxZTc3YzRkZCwgMHhiYTBhZTliYiwgMHhlM2QyZjBlMCwgMHg2ODZhZTdmMywKKwkweDRkZTMzZGZmLCAweGZiMWMzOGZmLCAweDIxNWYxZWM3LCAweGZiNGQ1M2ZhLCAweGZhZGZiMWIyLCAweDdmYTI3ZGY4LAorCTB4ZDliYzY5YTMsIDB4YjgxOWVjODMsIDB4ZjkyOTZlN2YsIDB4N2ZiZWU5MGIsIDB4OWI3NWZhMjcsIDB4ZDQxNTViMWQsCisJMHhhODA5OTUwMywgMHg0Y2Q1YjBkNywgMHhmN2E2MTQwYSwgMHgyZGRiYzdjNSwgMHhjMDkxNWY2OCwgMHgxNzVlNmNjOCwKKwkweDE1NmVjMGQyLCAweGMyNjU3NGYxLCAweDEzZDkyMGQwLCAweDEzYWJkOGFkLCAweDBjMTMyYWRlLCAweDkyNjQ3NzdhLAorCTB4MDlkYTg3OWQsIDB4ZGQ5ZDcxNTEsIDB4ZmJlMWVmODIsIDB4MGJmZjM2NjUsIDB4YzljMjZmODIsIDB4ODdhNWVhM2EsCisJMHgyMDBkOTYwZSwgMHhlYTkxMzhmZSwgMHhlZGU0M2M2NCwgMHg3ZDI2ZWE5YiwgMHgyMWVkZjA4NSwgMHgwMWZmZmVmYiwKKwkweGYwNzhlNmJlLCAweDNlYzU5YWQ1LCAweDI1NzlmNTlkLCAweDg2ZjM4ZjY0LCAweDNlOTQ3OTIxLCAweDNhNmExNWZhLAorCTB4MjEwODRmM2YsIDB4ZWViZmIwZWYsIDB4YjFmZTUzNzUsIDB4OTBmMTY1YzYsIDB4ZjI0MjdlZmYsIDB4MzViNmY1ZWYsCisJMHhkYWExOGYzMiwgMHgyOWE5MWYwNSwgMHhiMTdiZjVhNiwgMHhjZmYyNWI3ZCwgMHg2YTJmYjkxOSwgMHg5MTBiYTFiZSwKKwkweDMzZDljMDNmLCAweGU4ODE1MTc0LCAweDZhYTg3ZjEzLCAweGUxZjkwZjYxLCAweGU0OTBmZjNkLCAweDgzZjlmOGExLAorCTB4MTgzZjgxNDQsIDB4OGZkMWYzZDIsIDB4Nzc3YmY5ZjEsIDB4ZjFiNjc5ZTcsIDB4NjVhNzgxNzMsIDB4MGU5YWVjYzEsCisJMHgwNmIzOGZlYywgMHhlM2ZjYTA2ZiwgMHg0N2ZmMzRhMSwgMHhhZDNiODc4NCwgMHg4N2NjOTFjMSwgMHhiNDQ5ZjU4ZSwKKwkweDhlMDVlMjhmLCAweDBmZjg4YzUzLCAweDMyZGQzY2UzLCAweDcwNWM3ZmJjLCAweDQ2YzFmZGVkLCAweDY0ZTk2NTc2LAorCTB4N2Y2Mzc3ODEsIDB4ZTg4ZGIxYzQsIDB4ZjEyNGRlZjEsIDB4ZTEwNzgwZGMsIDB4MzAzZTI2ZTgsIDB4MDc4NWVhZTAsCisJMHg4ZjM5Mzg4NiwgMHhkNGZmMjIwMCwgMHgyZThiZTMyNSwgMHhhN2VjOGY1YSwgMHhkYzc5MTBlYSwgMHhmZjM4OTgzZiwKKwkweDhhYzI0NTUyLCAweDRkZTc3ZGZkLCAweDc5MWEwZjFjLCAweGZiMTAyMmUwLCAweDQ5YjUzZTRkLCAweGY4MDNlMDY1LAorCTB4OTZhMjUxM2IsIDB4Y2I1YzY5NWUsIDB4NzY4NGZkZjEsIDB4ZjZmZTI2MmQsIDB4MmE5ZDNkYjIsIDB4ZDVhOWJmZGYsCisJMHhmNmEwZTI1ZiwgMHg1Mzc5ZThmZCwgMHgwOTNmMWM2NSwgMHg1OWM1MmE4MiwgMHhjNjYyM2I5MywgMHg0NjdmZTcxYiwKKwkweDE4YmQ0ZmViLCAweDRkMjkzY2ZkLCAweDMwNDFjM2RhLCAweGIyNGYzMjI4LCAweDk3NGRjNjQxLCAweDEwYTc2NjRmLAorCTB4MmIxODZiMWYsIDB4OGIwZjQ4YTgsIDB4ZDRhNGMyYWUsIDB4YjBkMzNkM2UsIDB4NDk1OWU3MTEsIDB4MmRiOGRhOWYsCisJMHg4ZmJjZWIzOCwgMHg4OGRjNjlmNiwgMHhmNDlhM2YwYywgMHg0MzViOWJhYSwgMHhjMmNlMGFlZSwgMHg2MjM2MzBiZCwKKwkweDA2MTcyOTFmLCAweDJmYmYyZjFlLCAweDIzYWUzOGYwLCAweGIwZDM5N2U3LCAweDQzMzU2ZTZmLCAweGMzYzNlZjUwLAorCTB4MGMyZjg5MTQsIDB4YmJmZTM4ZGYsIDB4ZjZjMWQxN2MsIDB4NjJkYjYyNmIsIDB4ZWFkOWU0OTUsIDB4NzExZTgxMzYsCisJMHgxMTNkMDRiZSwgMHg2YzdkMDhmNCwgMHhlYThkNDljZiwgMHhiNTllOTJhYiwgMHhjYTdlZDEwOSwgMHg5MjRmYjk3OCwKKwkweDdhZDQ1MDY3LCAweGQwNjJiZjg2LCAweGFjZWE1MGYzLCAweGM2NjNmMjU2LCAweGRmYjE1NjNiLCAweDNiMjkzMjkyLAorCTB4OTNhMmZkNmEsIDB4MDQyZWY4ZDEsIDB4NjNlMjk3OWYsIDB4NzFjMDg3Y2YsIDB4NWFiM2M0YzAsIDB4MjkzMjdmOTQsCisJMHg2M2Y5ODNiYywgMHhjZmQxODdkMiwgMHhlZThmOWNhNywgMHhmY2M5YTY5NywgMHhhZWRkMmM1NiwgMHhmYjE4NGY4NSwKKwkweDdmZTk2OWNiLCAweGRlNWQzZTNmLCAweGNkYTY3YzY4LCAweDg2NjdjNjg5LCAweDAzOWYxYTJmLCAweDZiZTM0NTk2LAorCTB4MWYxYTNmYTAsIDB4ODk4ZDU3ODMsIDB4N2Q2MWJmMWEsIDB4ZDg3ZjU0NjEsIDB4Y2Q0NGE3MGYsIDB4MTk4MzQyY2YsCisJMHg3NWJlMWZkOSwgMHg5MWZjZDQ1ZSwgMHhmNTQ1MTYzYiwgMHg2Nzc1M2Y0NywgMHhlMGRjZmNkNCwgMHhiY2YxYTg4YSwKKwkweDJlZmU2YmRkLCAweDM2ODQxN2ZhLCAweDM0MjdjZDQ0LCAweGZlODdiZTliLCAweDRiZmUzNjM3LCAweDUzZmY3ZWQ0LAorCTB4YTE4ZGFmZjQsIDB4ZTdkMjU2ZmYsIDB4YTg1ZTg4MTMsIDB4ZWNmYjBiMzcsIDB4YTQyNWI5MTksIDB4NmY0ZDVkM2YsCisJMHg5Yjc5NDM3YywgMHhmOWNlYjE0MCwgMHhmMDNjYzBhYSwgMHgyZmQ4ZTBkNCwgMHg3YTQyOWY1NCwgMHhkYWEyMzA2ZSwKKwkweGQ2YTM3YTg0LCAweDFlYzhhYjA0LCAweDcxMzI2YTNjLCAweGYzOTBkMzFlLCAweDNmODRkMzE3LCAweGM4OWE2MmYyLAorCTB4N2I3ODE5N2IsIDB4ZDkyMmVkMWEsIDB4NDNlYTU1NDEsIDB4MjQ4ZWZhNzMsIDB4OTM1NDUzZjIsIDB4ZmVjOWRhMDksCisJMHgxZmQ2MWU2OSwgMHhiZTEwMWNlNywgMHgwNzU1ZjcxOSwgMHg0YWM1ZTcwMSwgMHg5ODJkMjc5MiwgMHhiZWE4ZmM4OCwKKwkweGE5ZmM3MmE5LCAweDhlODNmMjBlLCAweGU0ZTZhNGY2LCAweDlmODQ1M2NlLCAweDRlOWIwZTJiLCAweGZhYTZhYjdjLAorCTB4ZjBkZjY0MDMsIDB4YTFlN2ExOWMsIDB4ZGVmMzlmYmYsIDB4ZjE0OTU4NDYsIDB4ZTY1ZmQxOTYsIDB4ZTY5OWJmNWUsCisJMHhlNjdiYmIyZiwgMHg3YjdmOGE0OCwgMHhhY2FkZGY5ZiwgMHg0M2EwOGQyYywgMHhjNTE3MzllNCwgMHhhNDBlYWJmMSwKKwkweGQ4NjdmYjA5LCAweGRjN2VjMzEzLCAweDNhNmJkNTY5LCAweDUzOGMzZWQwLCAweGJiNDA3ZDg1LCAweGYxMGQyMDcxLAorCTB4ODhmMjgxZjEsIDB4MDE2OWY4NTksIDB4ZWQxZjlkMzMsIDB4YjgyN2RmMmEsIDB4ODBkZjIxZDAsIDB4ZGQ5ZjRhNmQsCisJMHhlNjQzYmZkMiwgMHhkYTNiMjBmYSwgMHgwMDkzN2Q2ZiwgMHhmNzQ0MzhhMywgMHgxZGUzM2RmMCwgMHg5NTVkZmU4NiwKKwkweGVjYmJmOGNiLCAweGY5N2Y5ZTg4LCAweGFmMDJlMWZlLCAweDkwZjYyMGY3LCAweGUyMmNlNzBlLCAweDE3ZmMwNjNjLAorCTB4NDJmZTVlYTUsIDB4ZDI0ZWU1ZWEsIDB4ZWJmOTExYzcsIDB4MjY3NmJiNTUsIDB4MmU3ZTdmOTEsIDB4YzZlM2Y4NDcsCisJMHgzYTQ5ZGZmMywgMHhlNTRkMmVmZiwgMHg5ZGRkYWZmMywgMHgwNDdjZmViMCwgMHhhZTQyMmFkZSwgMHhlMzU1N2VhOCwKKwkweGY5OTFmNWMwLCAweDM5YzZiNWNkLCAweGU3NDY4YWZjLCAweGE4ZTUyNzU4LCAweGY5MjNiNWEyLCAweGZlN2Y2MDRlLAorCTB4Yjc1YzM0YzMsIDB4N2I5NWQ3NzIsIDB4YTZmYmQwMGUsIDB4Njc2MTRjOWUsIDB4ZDJkZmJjMDMsIDB4ODJlMzgwZjcsCisJMHgyODgxN2ZhNSwgMHhjZDMzYjZiZiwgMHhhNjc1NzBjYywgMHgwOTYxMzg4OSwgMHhiYmU0NGUzNiwgMHhiODAzZTgyNSwKKwkweGRhNjM3ZGE4LCAweDdjM2ZlMjJjLCAweGJmYjA1NjFlLCAweGE0Y2MxNWEwLCAweGIzZmExNmJmLCAweDMzZjQ4NGNjLAorCTB4M2Y2Nzc5ZTAsIDB4NjljZmVkMWUsIDB4MWI3M2VmM2EsIDB4ZmI3ZWY4ZjgsIDB4OTIyYTdiZGQsIDB4ZDYzNDBmZDgsCisJMHg4MTQxZDYzMywgMHgzZGVmM2YyMCwgMHg0OTljYzA1NywgMHgwYWU5OWY3OSwgMHg5ZmI4MTdmYiwgMHhlZWZiOWU4ZCwKKwkweGVjOTliYzFlLCAweGJiZGZiMWIwLCAweDBlZjRiZmUwLCAweGYwMjJjNWYyLCAweGZhYzZiYWYwLCAweDExMzRkNzQwLAorCTB4NGIwM2Y5N2EsIDB4NDRlZDFkMmYsIDB4YTY2ZDBkYmYsIDB4MzY4NWU1MzAsIDB4YmRmMmIzOWMsIDB4Y2Y3NTc3NGEsCisJMHg5YzIzMGZjYiwgMHg2NmY5YWYxZiwgMHg3ZjcwODJiZiwgMHhiZmU3YmNiNCwgMHgzYmYzZTAwZSwgMHg0NzQxNTI5ZSwKKwkweGZkZDlmMWJlLCAweGJjNDQ3YTVhLCAweDJiZmVlZTc5LCAweGFmZTg2ZjJjLCAweDI5MjRmZjNjLCAweDFlYWM5N2E1LAorCTB4ZDYwZjkzOTIsIDB4MzIyYTM0YmMsIDB4OWY0ZTQ4NWUsIDB4Zjc0ZTkwOTksIDB4ZTJkMjkzM2IsIDB4YzZjNDZmZGUsCisJMHgzZjg4NmJhNSwgMHhmNjc1N2U1OSwgMHg1Y2JlMGQ0YiwgMHhjMzcyZjkyZCwgMHhmOWY5YTMwYiwgMHhmM2RlYTQ4NiwKKwkweDJhZjNmZTg4LCAweDM0MzZjMWU3LCAweGYxYWYzOTViLCAweDM1ODdlNDhlLCAweDMxMzM3ZTJmLCAweDhmNTdjZjMyLAorCTB4YTk1YmE5N2MsIDB4Zjc0YjcyNzUsIDB4MDlmYTNhYTYsIDB4MWU1ZTRlZmIsIDB4ZWFhYjcxY2IsIDB4MWU3M2EyY2YsCisJMHgzMjY5ZmFiZSwgMHhmOWJkZjdmNSwgMHg2ZTA3OWYyZCwgMHhiYmY4M2ViYiwgMHg3ODkxNzkxMSwgMHg3OWVhNGFhZSwKKwkweGM1NGFmNDk3LCAweGY5NGVhYjAxLCAweGI5MDM5MmFjLCAweDdlYzJlZTI3LCAweDFmZWEyYjY1LCAweDU3MjVjZjNjLAorCTB4MjlhN2IxYzcsIDB4MDBhODNiMWUsIDB4YzMyYWI3ZTUsIDB4MmJlNGFjMDksIDB4ZTUyMDk0MWIsIDB4ZWUzNGQ2YzMsCisJMHhmYjE4MzJkZCwgMHgxNjE2ZWE2YiwgMHgyNTU2YmIxMSwgMHg1OTU2N2QwYiwgMHhiMTM3MDRhZiwgMHhlOTg3M2UxZiwKKwkweGEzNjUyODVjLCAweGJmZWU1MGU0LCAweGQ3NzhlM2U1LCAweDg1ZmViMTcxLCAweDNjZjZiMDhkLCAweGY1NWQ5ZGM2LAorCTB4MzgyMDVlNWYsIDB4Mzk1YTM1ZDYsIDB4MjkyMTc2Y2YsIDB4ZmI4YzE5NmMsIDB4ODRhYmRhNWUsIDB4ZGM5ZjdhMDIsCisJMHgxYzQ0Yjk3NiwgMHg5OGY0MmFiNiwgMHhmNTVkZjY4NSwgMHhlNDExYzJkYywgMHgzODFkNzYzNiwgMHhiOTNkMjE2ZCwKKwkweDU5YjFlMWFhLCAweDMwOTE3OWYyLCAweDhiOTY0MWZmLCAweDk1OTViYmI1LCAweGQ1YWM3OTkxLCAweGE0NDIwZWU4LAorCTB4MDJmODQyZmQsIDB4NDBlYWZiMTMsIDB4MmNmYTQ5NGUsIDB4NDM1ZTFhNmIsIDB4YjZiZDQyZTgsIDB4ZjU4NTY5ZmYsCisJMHg5N2UyNDJkYSwgMHhmOWVmMGUwZiwgMHhkZjY4NmZkZCwgMHg5MjNkZmY4MywgMHg3ZDc0NWZmMSwgMHg4MDVmMDdmOCwKKwkweGI5NGE4YmZkLCAweDYzM2M1YzBmLCAweGIyYjJmOGExLCAweGRlMjE3Y2MxLCAweGJhNjM1MmZkLCAweGNmZGExZWVmLAorCTB4ZmQ2MzhmODgsIDB4MTAxNjJkZWUsIDB4MTBkOTNmZjcsIDB4ODJlYzllN2MsIDB4MWNiMmM3YTMsIDB4OWE1N2Y5ZTEsCisJMHhjZTY4ZjA4MCwgMHhlYzBhY2IxZSwgMHhjOGNlNDhkYiwgMHhjMTFkYjg1ZSwgMHhiZWY1NzE3OCwgMHg4NGYxOGQ3NCwKKwkweDc4ZmFjNGIxLCAweDM5MjFhMGY3LCAweDU4NzdhMjVlLCAweGU5NTc5ZjI4LCAweDVmMTBiNGVlLCAweDE3M2Y4NjU3LAorCTB4OWY4ZGZmZjcsIDB4ODljNmYyY2MsIDB4NTc0ZTVmYjcsIDB4MjczZjMzYTQsIDB4NjQzN2RlNGEsIDB4MzBiOTYxOGMsCisJMHg5MGMzZGFmNywgMHg2MGJlZTU4ZCwgMHhhOWQ5MGY0NSwgMHgzYjkxMDcwZCwgMHhiZmI3YTIxNCwgMHhlYzBlZTA4NywKKwkweDdjZTlkMDRmLCAweDlmM2UwNzI1LCAweGNmYjExMWQ4LCAweGY0N2NhNTFmLCAweGY5NWU1OWU2LCAweGYwOTlhYzY0LAorCTB4YjE5M2VmYjksIDB4ZjNkZjUyNWEsIDB4YWFjNzRjYWUsIDB4OTc5OTc5NzgsIDB4ZGVkZDg1ZDMsIDB4MThiYmVjOWMsCisJMHg5ZTA5MDcyZCwgMHhkOTViZWUzMCwgMHgxNDdiZTc2NCwgMHgyZDJkODM5NCwgMHg3MDcyOTE0NSwgMHhjNDVkYWFjNywKKwkweDA3YWE0ZGU3LCAweDFiMmEwMjI1LCAweDc5YWJmYTE3LCAweGM4ODc5MjdlLCAweDBjY2UzNmEzLCAweDRlYWExZjEwLAorCTB4ZmMyN2YzMWYsIDB4Mjg5YmY3MTUsIDB4ZmY1MDhmZWYsIDB4M2ZmNzRkY2QsIDB4MzlhYzcyNGQsIDB4MWU2NDY1NjAsCisJMHhmMWQ0ZDJhNCwgMHhlODg1MTZhYiwgMHhhMjZiYzNiYSwgMHhmNTgxMGFmZCwgMHg3NWYwZWE5NiwgMHg5NDU1M2M3MCwKKwkweDdiZGM1M2E5LCAweDIwMmNjMjc0LCAweDU5YmNmZDNjLCAweDM5YWZiY2UxLCAweDhiMzViZmQ1LCAweGU1NWM3YmU4LAorCTB4MmZhMzk2ZjksIDB4YmJiZWU4MDQsIDB4MTExNDFjNmIsIDB4N2Y3OWM2N2MsIDB4MmEwYzJlM2UsIDB4MDBiOWIzYWUsCisJMHhlNmVkYjQzYywgMHhjNGRkNGI4MywgMHgzOGNmM2ZiZiwgMHhkZDg2N2VjNiwgMHgyYmQyMDIxMywgMHg1MDNmZTgzNSwKKwkweDFmOWVjN2RlLCAweDA5M2FkMzBhLCAweDE1MjJiZTM5LCAweGVlOTM1OWY3LCAweDU4YjRiZTY0LCAweDI3Y2ExZWZkLAorCTB4MzZmYjIwM2QsIDB4ZTA4YWI3Y2QsIDB4OGEyN2E1YjMsIDB4ZjVjODdiZjgsIDB4NDhiYWY5ZTUsIDB4NmY3NGNkZmUsCisJMHg0YjdjZTdlOSwgMHg2OWYwNTk5NywgMHg3MWMwMGRkNywgMHg0Y2ZjZDcyMiwgMHhlMzJmMjFhNiwgMHhiODNiMDZjZCwKKwkweGQ2NTQ2YWFkLCAweDQ0ZDdkYTQ2LCAweDc5ZThkYmYwLCAweDFlYTVjMWQ3LCAweDJkOWNkZjgyLCAweDkxMzMzZGY5LAorCTB4ZmY3NjIyZTUsIDB4YTk5Zjg4OGYsIDB4NjJiNGMwY2UsIDB4OTllMTE2NmIsIDB4OWZmN2E2ZjAsIDB4N2JlNGExZjcsCisJMHhmOWEwMWYwMywgMHgxMTVlNDg3MywgMHhmY2JjNmY1NCwgMHhmOGJkM2Y5MiwgMHg3Mzc1ZDEyYywgMHg5NWM3MmZhYSwKKwkweGMyYmNkN2NmLCAweGM2Mjc3NjI5LCAweGZmOWMzYjk1LCAweDMxYjdjOTAxLCAweDg5ZjA5NWJmLCAweGZjZDE2ZmVmLAorCTB4NTFlZmMyMzYsIDB4YzViMzVmODksIDB4ZmU1OTNiYTcsIDB4ZGZlZDNhN2QsIDB4ZjE0MWJlN2IsIDB4M2M4ZGY3Y2YsCisJMHhmZjZjOTZkZiwgMHhjZmVmOWVmNywgMHg1NGU2N2NmMiwgMHgyZjVhMzdlNCwgMHgzOTllNzgxOSwgMHhmZTIwMTgzOSwKKwkweGEyODI0ZGFiLCAweGE4ZjhmODRkLCAweGU0OWI5NjZiLCAweDZmOTFjYjZlLCAweGQ3YmM5Mjg2LCAweDQwZGM3OTI2LAorCTB4OWJlNmIxNzksIDB4NmZkYzkxOTYsIDB4ZjMyNzc0MTksIDB4ZTQyZjE3ZmYsIDB4ZmIxMWFhMTYsIDB4N2YxN2E3MjQsCisJMHgyZjNiZTc0NSwgMHhlMmM1YjFjZiwgMHg3YzczYTFjZiwgMHg5YzY5Y2YyYywgMHhlZmJhNDk2YiwgMHhmOTExZTkyZiwKKwkweDdlOTIxODI2LCAweGQ3YjNmYzVkLCAweDcxOTRkN2I4LCAweDYxZGE0NzllLCAweDhmMzhmMzhjLCAweDVjODkwZGQ4LAorCTB4ZmE1N2I2N2YsIDB4OThmODFhZTEsIDB4ZDFlMGVjN2YsIDB4YzJmMmJmZDksIDB4YTkyYmFhMDksIDB4MzZjMTMxNjksCisJMHhiNTI1M2UzYSwgMHg5MmZkZWUyMiwgMHgwYzExOTM1NSwgMHhiMjE4NmQ3YSwgMHg4ZDM0MzVkMywgMHgzOWQ4OWYzYiwKKwkweDNlZTExNmFmLCAweGY4NTUwMTA4LCAweDBjZjlkMTY5LCAweDI1NWUyYWYwLCAweGRhZjE4ZjMyLCAweDYzY2JlYjlhLAorCTB4MjFhZmUzM2MsIDB4NjNjZDhkNzksIDB4OTY5YjBlNGMsIDB4MjNhZTUyNWIsIDB4YmNkYWYxOWYsIDB4ZDE4Y2Y5YjgsCisJMHg1MTcxZDExOSwgMHhjMGNlODY0MSwgMHg3ZjA0NzI4NSwgMHg0MTg5YzI4NiwgMHhmMTgzMzc5MSwgMHgyNmVhYmY5NCwKKwkweDlmZTM4NTViLCAweGRlNTk5OWUzLCAweDliMWNhZTk1LCAweDEzZTBlZDBiLCAweDNhZGI2YzRmLCAweDg0NzBlNTBkLAorCTB4NmJmNTAzYzAsIDB4ZjFmNWM5ODgsIDB4ZTZmNTA3ZWMsIDB4YzMxYjVlNDcsIDB4M2RlYTM4N2UsIDB4NGUwMmYzOTUsCisJMHgxZDBjNGIwOSwgMHgxMzdmZDA4YiwgMHgyYTI3YTU0MSwgMHhmNjNlMTJiZiwgMHhkYmYxMzI2ZCwgMHgyZGZkNTQ5ZSwKKwkweDliNGY0ZmEyLCAweDA5Mjg3NWNhLCAweDE1YzU4NzVhLCAweDkwMGVlZTQ3LCAweGUwNzY4MDdmLCAweDNlODQzMzlmLAorCTB4N2I4YTM1YjcsIDB4NjVlZTliNGIsIDB4NzRlMDk5M2QsIDB4ZTQyMzUzOGUsIDB4ZDg0MzJmMjQsIDB4MWY2MzhhYTUsCisJMHgyY2EwYjUwYywgMHg0YzlkMzI1ZCwgMHhkN2Y1YzdjZSwgMHhhNjRmYWZlZCwgMHg3M2RhZGUzNCwgMHhkMmE0NGY2ZiwKKwkweGZmMzUzYjlmLCAweGZmM2MwYzgyLCAweDUxYWVjYTE3LCAweGI3NWJmMjM2LCAweDdlMTJjNzA2LCAweGFlNmNlMTQyLAorCTB4MjBkMDJjY2YsIDB4ODdmNjE1YTAsIDB4M2MyOWVhYTcsIDB4OTUwNGJhMTQsIDB4NWI3MWE1NGYsIDB4MjU3ZTM0ZDAsCisJMHg1ODU1NWZmMSwgMHgzMGY2OTc5YywgMHg2ZGNjOGFhMywgMHhkNWRmYjg1NCwgMHhlYjRhOTM1OCwgMHg3OWI2ZmQ1NSwKKwkweDk3YWZlOTEwLCAweGYzOWY4NDMyLCAweGYxM2NkNWUyLCAweGNkMWEwNmJlLCAweDI1YzMzZmJmLCAweGEyNjgyYTk5LAorCTB4MzI0YmUzN2MsIDB4NTU3NWQ5NGYsIDB4ZmVjNjc5ZTUsIDB4NTUzMzhkMDUsIDB4N2U0MWYyMjcsIDB4Y2UxMWM3NzgsCisJMHg3NTU5MzY4YiwgMHg3M2MyNmZhMiwgMHg5NGQxZjAyMCwgMHhkNTY4N2VjMCwgMHg3NjQwZDllMSwgMHgxZTA1ZGJhZiwKKwkweDI0ZjdjNzA1LCAweGZjNDQ3Y2Y2LCAweGQ1NmNkM2QwLCAweGMxMzczZWU5LCAweDcxNTIwM2I5LCAweDFlYjIzZGZkLAorCTB4YjYxOTE3MmMsIDB4ZGNmN2QxZGUsIDB4ZTlhMTJmZDgsIDB4MjQ0Mzk0OTcsIDB4ZTU3YmUwYmUsIDB4NGMwNzZkMDQsCisJMHgzYmUyNDQ3NywgMHhjOTU5ZDg0OSwgMHhjMzEyN2I1NywgMHhlOTY3YmEyNiwgMHg1OWVmZGY0MSwgMHg0ZTBmYWI4NiwKKwkweDM4MGQ3ZGUwLCAweGVjMGVkOTczLCAweGY4NWNmNGIxLCAweGU1YzMzYTcxLCAweDA1YzgzZTI0LCAweDhkMzQyNzAxLAorCTB4MjZhZjQ5ZDYsIDB4OGU3Y2JkMzgsIDB4MDllZWE3MDQsIDB4YWFlMWZkMjgsIDB4MjA4ZThiMWEsIDB4YTRhM2NmY2EsCisJMHhjOWY0YTZjYywgMHg1ZjYyNTU3NywgMHhiMGIyODZkZiwgMHhmY2E0MWIyNywgMHg5ZDJiNmViNywgMHg4NTQ3ZDkxNiwKKwkweGZkZWZhOTMzLCAweGY4ZTI3OGZmLCAweDljMjFkYWI2LCAweDQ4YTgwYmZmLCAweDQ5YjYzYjdmLCAweDIxNGU3NGE5LAorCTB4ZGUxMjI4NTcsIDB4MDc4MTQyOGMsIDB4ZGJiNDBiYWEsIDB4N2NlZjc4YzQsIDB4MmE0NzczZTQsIDB4ZTc5ZTdmZGIsCisJMHhmM2VkM2FiMSwgMHhmODVlNThiMiwgMHgwZmYwZDE3ZSwgMHgxN2MyNTIxZiwgMHg3NmQyNDY2ZSwgMHhjOTRiZTYzZSwKKwkweDlhNzU3M2M3LCAweDg3NWMzYzhlLCAweDNjYjhmZWYzLCAweGZkOGMyYTM0LCAweDc5ZmZhYjE2LCAweDNmNTdjZmUyLAorCTB4ODBiZGIxNWMsIDB4YjMxZWVmZjQsIDB4NGZmNDljYTcsIDB4ZjY3MWUwNDcsIDB4ZWIzNDVmY2IsIDB4MGVlNDIyZGIsCisJMHg3MjY0ZjQ4NiwgMHgzZWNjNjFkZCwgMHgzZDM2ZTc1NSwgMHhmNzc2ZmU0ZSwgMHhmYmE3NDU0MSwgMHhjZjczNmVmNCwKKwkweGIyYmI4MjUwLCAweGQ1MGIzM2U5LCAweGZjMWQ1NjYzLCAweGIyZWJmZDg0LCAweGRhNWVmZjRjLCAweDM1NjM1MjZmLAorCTB4ODY0ZGNmZDcsIDB4ODczZjVjMWQsIDB4MjBlYjkxN2EsIDB4NGZhMTZlNDMsIDB4ZjUxZDlmMmUsIDB4MWQwNDc1NmMsCisJMHgwNmYyOTNkZSwgMHg2NDYxZmUzZCwgMHhiY2E0OWFiZiwgMHgxYzM4YTYxZSwgMHg3NzJkZmRkYiwgMHhmN2Y1YTcwYywKKwkweGYxODBmY2NiLCAweDE5MWMzNTVlLCAweDA0ZGY3ODRjLCAweDNjNmI3MWFmLCAweDVjNmEwZWVmLCAweGFlZjc5Y2JmLAorCTB4YzQ2ZjVlZWQsIDB4ZmU1MmQzZmMsIDB4NTZmZGNiNGYsIDB4MjBkZmZhNjcsIDB4N2NiNmQ3NzgsIDB4YzJkMmExNmEsCisJMHhhMWExZjNhYSwgMHgzNDg2ZjcxNCwgMHg0NzE5YzUzZCwgMHg2ZmNhZjQ4ZiwgMHg2OTU1M2M4YywgMHg1ZjlhMTYzZCwKKwkweGFmNTgxMTc1LCAweDUzNmJiZDIwLCAweGJkMmY3ZTkwLCAweDM5NjYzOGRiLCAweDM0OGZkZjNlLCAweDhiM2IyMTQ5LAorCTB4ZTNkOTJhZjEsIDB4NjBkZjY2ZmQsIDB4Y2VmZDVmOWEsIDB4OGY0OTYzZDcsIDB4ZjAyMDI0MWQsIDB4YWYzNzVmN2YsCisJMHg0Mzc4NDYxZCwgMHgyNDRlMmZmZSwgMHhhYzBiZGIzOSwgMHhjZDM5MGNkNywgMHhmN2M1MzkyNywgMHg4YmZmODlmMywKKwkweDdhY2I5ZmE4LCAweDdkYTU4Zjc5LCAweDdlZTVjYjFlLCAweDIyNWM5MDEzLCAweDIwM2NiM2ZmLCAweGRmYzkzYmZmLAorCTB4M2NhMjc3Y2IsIDB4NTlhM2ZiZjAsIDB4OWJiNGY3Y2UsIDB4YTMzN2VjYmMsIDB4ZmRjOTFmNWUsIDB4ZGZkNGM1ZTIsCisJMHg2NGVhNWVkMywgMHg4NDNhYTczOSwgMHhmMGQ3OTI0MiwgMHgwNDI3NWUxMSwgMHg0NWYyZDc0MCwgMHhmZDIyZjgwYSwKKwkweDY0OGNiY2ZmLCAweGYxMjQyZjcxLCAweGQ4NDMzOTM5LCAweDllOGU1MDgzLCAweGQ4NzNjMWUyLCAweDNlNGEzNTU1LAorCTB4ZThhNWVjMjIsIDB4OWE1YTdiNGIsIDB4YmY2ZDk3ZjksIDB4MjY1MjQ2OTgsIDB4ZGE1Mzg0ZWQsIDB4ZDY3OGZmNDksCisJMHg2ZDI4ZmZmYiwgMHhhN2Q3ODZkNSwgMHg3M2MzYTgyYywgMHhmMmE1Mzg2ZSwgMHhmNzE5NjFmOCwgMHgxYzlmMjU4NSwKKwkweGIyMWFmOTkxLCAweGE4OWE3YTFiLCAweDEzZTdhNjFmLCAweGU1ZjU0ZmIwLCAweDRiZWJiZDEzLCAweDlhNGQxY2M4LAorCTB4YjUyOGUzYjMsIDB4MTJhMTdjNTMsIDB4MmRhNmRiNzIsIDB4MTY2YTNmNmIsIDB4ZmM0NzllNjIsIDB4NmU2NDcwZDcsCisJMHg3NWUzZDUxZSwgMHgwMjQyYjM5ZiwgMHg2ZGYwZDg4MiwgMHgyMjJmNDdjZiwgMHg4YzNlMWUxZSwgMHhhNzYzOGZmOCwKKwkweDdmY2MzOGYwLCAweDA2MGQ3ZmU4LCAweDZlZjFmZjc3LCAweDQwOTFlYTQ1LCAweGM3ZTI3Y2QyLCAweGFmYjUwNmFlLAorCTB4MjI1NDgwOGYsIDB4ZmRkZjUzNjMsIDB4MDA3YjdkYTQsIDB4Njc3ZmU3NmQsIDB4MjI2NzA3N2EsIDB4ZjAwY2NmM2UsCisJMHhmYTdkZGI3MywgMHhjYjEyNGNkYiwgMHg1YzQ1NjdmZCwgMHhlNmYxNjBkZiwgMHg2NDM0ZmYxMSwgMHg4NzFiYTg2MywKKwkweDIyOTlhZDRmLCAweDg1NjQ1M2VmLCAweDM3OWNmN2I4LCAweDE4MzkwYTY3LCAweDBhZWQ4MDE1LCAweDMzYWFlYmM3LAorCTB4ZDRiZjc0ODgsIDB4ZTgyZDdhYTAsIDB4YzA4NDVkMmYsIDB4NmZhNGE5OTIsIDB4MDFmNzVlNjQsIDB4ZmM1ZTNmOTAsCisJMHgyODNjZmE0NSwgMHhkZjkwMGZiYiwgMHhjMWViNzY4MiwgMHgxMWQ2YzQ1ZiwgMHgzMTZmZDk3OCwgMHhlYjAwNThmMiwKKwkweDJiNWZjNDRkLCAweDBmZjgxNDliLCAweDY3YWFjNWM0LCAweDkzYWZlN2EyLCAweDFiYWJmMjc1LCAweDhjMWIxZDc3LAorCTB4NWNmMzVkNzQsIDB4MmRmOTM4Y2MsIDB4ZTIxMWZmN2MsIDB4NWQ1ZDc4NzgsIDB4Y2RjMzNkNzQsIDB4MTk3ZmQyOTksCisJMHg3ZmM5YzMwZSwgMHgzZDYyYmU0MSwgMHhkNWEwZDY2MSwgMHg2MGFjN2M4YSwgMHhmNjIyNDMxNCwgMHgwYmUwNDk5MiwKKwkweDY3Y2IyYmY1LCAweDhhNmY2MWJlLCAweGI5ZWE1ZTg1LCAweDk0YTc1YzA0LCAweDk0NzQzYmJiLCAweGQ0YTY4MWVhLAorCTB4OGY2ODc5NjUsIDB4OWYxODlhMjksIDB4ZWUyNTk4ZDIsIDB4NGFhMGI0YTcsIDB4YmM5MzBjNzUsIDB4NzdlYzU5ZmUsCisJMHhhOTY3YmMwNywgMHhkNDk1NjRkZSwgMHg1ZmM0ZTA5NywgMHhkM2M4ZmJjYSwgMHhkZGZlOTJhZiwgMHg5ZDZjNjBlYSwKKwkweDk1NTNjMGE4LCAweDgyMTkzNzljLCAweGNhZWZiNDM1LCAweDY5ZGVhMmRkLCAweGY5ZThlZWVkLCAweGViNGYxMjU1LAorCTB4OGM3ZDNhOWUsIDB4YTExNTg1ZDIsIDB4YTc4OTcxOTgsIDB4M2E5OGM2YWEsIDB4ZGMzOGIxMTYsIDB4YWRlZjI5OWYsCisJMHhmNWZiN2Q2NCwgMHhkMWZjNWJkNiwgMHhiNzhkZmMyYywgMHhmOGM2M2FlNSwgMHhlZjkxNGNlNiwgMHgxMDYzYzRhZCwKKwkweGQ1MDVkNzdkLCAweDJhZDFmMTIwLCAweGZjMmM5MDI1LCAweGM3MmM3MDVlLCAweGIwNjdkZGYzLCAweGJkY2ZhYzgxLAorCTB4M2VlOWUyNWYsIDB4N2U3YzNmYzksIDB4MTllMmJmN2MsIDB4ZmRjNTdkZjEsIDB4N2Y4NjhiM2YsIDB4ODMyY2Y4MGQsCisJMHgwZDgzZjlmMSwgMHhkZTUwYjAzZiwgMHg1NmRmOTYzMSwgMHhmZmQ5OTlkNSwgMHgxM2YxMjM1ZCwgMHg3YTZiNWZjYiwKKwkweDg1ODc2N2Y5LCAweDdmMmM1YmVjLCAweDZiOTVmYTU1LCAweGY2ZmMyZmMwLCAweDBkZjg1YmZmLCAweGNiOTFhZjNhLAorCTB4Mzk4NzM1YWMsIDB4MDlmNmI1M2YsIDB4YWJmOTQzYzUsIDB4ZjdhYjlkNmIsIDB4N2Y3Y2YyM2MsIDB4MzU5ZWI5ZWYsCisJMHhjNjA2M2RlOCwgMHhhNGU3YmQzMCwgMHg2M2JkMTc1ZCwgMHg5NmJkZWRmZCwgMHhlNzI2YmNkZSwgMHg2NmI3MmYwNSwKKwkweGUwZGQzZTczLCAweDY2NzVkOGFiLCAweGY2N2RiZjQ5LCAweGJkN2ZjMjUzLCAweDI3NjI1OGQ0LCAweGE0ZmJhM2ZmLAorCTB4OWNlOGEzYzksIDB4YzAyZTRjYWYsIDB4NTY2ZjhmZjMsIDB4ZWU5MWZjODEsIDB4MDMzYmUxYTYsIDB4YTllMTdmMDgsCisJMHg1Zjk0YzVhMiwgMHhlZDBhN2YxZiwgMHhiNzA3ZGQxMywgMHgwMjU3ZmQxNiwgMHhkMjdiMDdkZiwgMHhiNjY3ZWU0OCwKKwkweGJkZmI0ODhkLCAweGZiNjFkNzgzLCAweDcwYjI3ZGRlLCAweGU5ZTkzOTY3LCAweGI0NDVhNTkzLCAweDU0ZTM4MmFlLAorCTB4ZWQyODVlOWYsIDB4NDJjOWY1NTQsIDB4YmQ4NDQ3N2IsIDB4YzhhNjRkZmEsIDB4ZmY3MTZmY2YsIDB4MWI4YTUxZmUsCisJMHg3YjM1ZWY2NiwgMHhkYjMyM2YyOCwgMHg4MDk0ZGZlYywgMHhhMGJlMTVmMCwgMHhiNzcxYWE3OCwgMHg5ZTQ3ZWQ2MywKKwkweGJlNTE3NWE0LCAweGYzOGFjZDI4LCAweDhkMDhlOWZlLCAweDE4NTFlZDU3LCAweGIyYTZlZWZlLCAweDNmNjQzZGJjLAorCTB4ZWM4N2FhODMsIDB4N2RkMzc3NjIsIDB4MWY5MjBmZjksIDB4ZmU0MGZjZDQsIDB4MWRmYjExN2QsIDB4NjZmYTE1NGIsCisJMHhiNjY2MGRmNiwgMHhlYzgzOWRkNywgMHhiY2E3MmViZiwgMHhlYjE3NzdhOCwgMHhmYjQzY2U4ZCwgMHhjMzdkZmMyYywKKwkweDc4ZGMwNTFlLCAweGEzZWU2M2NlLCAweDNhMWUxMzJmLCAweDUwYjY5YzBmLCAweDcwZDI1MDEwLCAweDQ3MTFkMmRhLAorCTB4MjVlZDFiN2YsIDB4OWNjMmYzMGMsIDB4ZTE2MWRkYWYsIDB4N2ZmZGNkZmEsIDB4MmI3OWQwYjAsIDB4ZjM4NGZiOWYsCisJMHg3ZTI4NmI2ZiwgMHgxOWVmM2YyMCwgMHgzYTc3YmY5NSwgMHg4NWFhZmNkYSwgMHg0ZWIyYjRmOCwgMHg5MTU5MDE4MSwKKwkweDI3MWU2NmUzLCAweGNmZmQ0YWZkLCAweDM2OWU4NGVhLCAweGU0ODU3ZmY4LCAweDBkZmY4Mzc3LCAweGY1MjE1ODc5LAorCTB4ZTM1YjdkZGEsIDB4ZmZhMWJiZjMsIDB4OTZlZjA0MWUsIDB4MDNkZWI4NDEsIDB4MGViOWNiNzUsIDB4ZDExZDgxZTksCisJMHhmYzUyNTdmMywgMHgxN2NkMjM3YSwgMHhhOWYyYmVmYywgMHhiZGQ1ZjFlOCwgMHhmZDYwMWU3YywgMHhiZjQ3YWIxZiwKKwkweDJlN2ZmNDMzLCAweDVmOWYxMmU0LCAweGE2MThhZjBlLCAweDdkN2QzY2ExLCAweDg4MzBjZDdhLCAweDI5M2NhZjkzLAorCTB4NmVjMzA2ZmQsIDB4ZDg5YjBlNWYsIDB4ZWJjZWM1ZWUsIDB4MjE2MmJjNmEsIDB4ZmFkNTViN2IsIDB4Njc3M2Y2MjcsCisJMHhmNGM5N2QzNSwgMHhlMTZhNmYyOCwgMHhjMDViZDk3YSwgMHg3OWYwOGViZiwgMHg0OWRkOTM0YiwgMHg4Nzc5NzZmZSwKKwkweDlhZjMwM2QwLCAweDQyYTBjMWFjLCAweGEyNWFhMWUzLCAweGYxNjFmNzczLCAweDkwZTA0OWJkLCAweDQ4MTZmZWMyLAorCTB4ZTI1MmI4YmQsIDB4ZTNjNGE1NzUsIDB4MDZlMzhjNGEsIDB4OGM4YzdkNTMsIDB4YmM2NTJiZTMsIDB4ZDc2NzNhYmUsCisJMHhhOTI5MmEzMSwgMHhkYWViZTM5NCwgMHgxZTEzMjY4ZSwgMHg1YmQwODFlNywgMHg2ZjQyNDJmMywgMHhlYzMxZjQxOSwKKwkweDQwYmVhYzUwLCAweGQxMGY3NzBiLCAweDk1OTM2ZDc3LCAweDRiZTdkNmViLCAweDBlYmYzNWJkLCAweDVmZDI5NmY1LAorCTB4YjQwZjc0N2YsIDB4N2VmMWZjOGIsIDB4ZGRhYzc3MDEsIDB4OWU4ODZjYWQsIDB4ZmMyMDFhZWYsIDB4N2ZkMmNiZDgsCisJMHg0ZDEwMWMyZSwgMHhiMDFlZjI5NywgMHg5ZTdmN2U1MywgMHhmYzgyN2FhZSwgMHhmYjQ2YmI1NiwgMHg3ZTQ1OGViNywKKwkweGY1NWJmNWMzLCAweGVhZjEyOWUxLCAweDRkZjY4Y2I1LCAweGZkMTgxNzE5LCAweGMzNjc5NDA1LCAweDBlZTcyMWY5LAorCTB4ZmZkYzY0NDcsIDB4N2Y4NDAzOWYsIDB4MWFiMjY2YjMsIDB4YzQ0NmJhMjAsIDB4YjMwYTBiNDksIDB4NzM0OWM2ZTIsCisJMHg4NjM3ZjQwOSwgMHg3MWIzZjdkYywgMHg3NzkyNzE5MSwgMHhiN2UyMjhkNywgMHgyY2VmNzU3ZiwgMHhhYWE2YmFhNywKKwkweGJhMmZhMTNhLCAweDI5YmFlMTI2LCAweGZiMDNmN2U0LCAweGQ2NzU1NWQxLCAweDU1MzNjNTIwLCAweDdkZmMyZmM4LAorCTB4YzkwOWYxMWEsIDB4NDY1MjkzNjMsIDB4YzY3MTgyN2MsIDB4NDJmZWI0ZWQsIDB4ZjNjNGVhYmEsIDB4ZmI0NDZjMmYsCisJMHgyYzJmY2I4ZSwgMHhhYmY5OTJmZCwgMHgzNzM4ODQ2ZCwgMHhiYzQwNmRlMiwgMHgzNzg4YzNiOCwgMHhiZjBhYWYyYSwKKwkweGE5NWU3OGQ2LCAweDUxZGM3MDc1LCAweGI1ZWEyNGQ5LCAweDMzN2M4ZTFiLCAweGVkZTEwYjM0LCAweGQwZjNmZTZlLAorCTB4M2U0ZjU0ZTUsIDB4ODZlN2Q4NDAsIDB4NTRhN2QwZTIsIDB4MWVmNWY0NTcsIDB4YjVmZjVjNWIsIDB4YjUyYmZmNTcsCisJMHhlNjk1MGYyYywgMHg2YmY2NGM4ZSwgMHg3OTFmYTIwZSwgMHhiN2QxZWExMywgMHhhNTM4ZTBiZiwgMHhiZGMyNDhlMSwKKwkweDVhZWJjZjk0LCAweGZjZTYxZmUxLCAweGMzNTUzYTFlLCAweDM3ODNmNjI2LCAweGU0YjcyZDQxLCAweDhkZmE0NTFmLAorCTB4NGVhMjlkMmIsIDB4M2Y2OTQxZTksIDB4ZjIwOGZmYTksIDB4NzczODgzZjUsIDB4Zjk3ZjYxNDYsIDB4ODU0OWY0MzcsCisJMHgxMGQ1ZWJlNCwgMHhlOTU1MzJkOCwgMHhhNDJhMDdhZiwgMHhkZmNkYWNkYywgMHhmNmFlODViNSwgMHgwYWE3ZmQ2MywKKwkweDMxMTg0ZjI5LCAweGY1OGNiZGIwLCAweDg2MzNmZTlmLCAweDRlZGZhYjVmLCAweGJiYjhmZjY0LCAweGFlNTI3NTRkLAorCTB4YWJmYmYxMTksIDB4NjIyN2U0NDEsIDB4MjcxZDkwNWMsIDB4ZTQ4NWZiNWYsIDB4N2Y3OTRlY2YsIDB4NjU0OTNkNWMsCisJMHg4YjI2OTlmYywgMHgxMGI3ZjBkNiwgMHhkZDM3Y2M4ZiwgMHhiMjQxMWRhNywgMHg1Zjg3Nzk2ZiwgMHg1ODNlMjZjZCwKKwkweGRlZmEzYmJiLCAweGU3ZThlODg5LCAweGM4YTBiMWJhLCAweDdjZWM4NTQ3LCAweGJmOGM2NTE3LCAweDMxZDVmODc0LAorCTB4NmZkNTZmYzQsIDB4ZDA0YTNiN2YsIDB4OTY1MTliZTcsIDB4NjdjMzZiZjQsIDB4ZTIyMjhhYjQsIDB4ZTIyMjkzNjYsCisJMHg0NzVhZmRlNiwgMHg1NTZiYzUzMiwgMHg2NDVmNTUwNywgMHhlZjQxYmYzZCwgMHg4MTNjYTU5NywgMHhmNTAzZjIyNiwKKwkweGFiZTY3NDAzLCAweDFmYzEyNmVhLCAweGUyZDE2NmE2LCAweDdlNDQ0YmZlLCAweGY3ZmJjY2M4LCAweGJlNDYyZjFiLAorCTB4MDY3YjFlZjksIDB4NDBmMjE3MDQsIDB4Zjk4N2I5OTUsIDB4ODliNGVhYWYsIDB4N2QzYWE5ZTEsIDB4YzQ0NDczMzksCisJMHg3NzVhMDE3YiwgMHhlYWJmZTkwMCwgMHhjNGZhYzA3NSwgMHhlNzZmYTQwZSwgMHhkODkxZjdkMywgMHgwMjdlZmY5ZiwKKwkweGIyYzc2MWZiLCAweGZiOGI5N2I3LCAweDdmNDgxNTJmLCAweDlhZjZmYzNkLCAweDYwZjY5MWQxLCAweDJmNzEwMGUyLAorCTB4MzcwNzg0MGUsIDB4MTBiZjNmNzksIDB4NmMzYzRiZmIsIDB4YmYzMjQ1ODIsIDB4YWY3OWY4MjAsIDB4MmUzMDliOGMsCisJMHg5YzQwNzM3YiwgMHhmZDdhZWNiOCwgMHgyYjY2ZWFlOSwgMHhlYWI5ZmU1MCwgMHgxOWQ3MmIwMywgMHg5MmJjZGQ3ZCwKKwkweGVhYjg3ZWUzLCAweDA2ZmE0ZDFmLCAweGE5MWJmZWZjLCAweGNhZjBmODdkLCAweGViZmNmNGQxLCAweGU0NmZhYmMzLAorCTB4MjliMmE5N2MsIDB4MjAxMWNmMmEsIDB4NWZlNGRjZjgsIDB4NWRlZWY1N2QsIDB4NjliNjdmZTQsIDB4YjYxNDlmZWMsCisJMHhlZTk3N2Q5ZCwgMHg5ODM1Zjc2OSwgMHg4YWQxZGJmOSwgMHgwNjc2MTNmZCwgMHgyYWFmYzg5MiwgMHgxMWRmNGY5YywKKwkweDk4ZDU2YmVkLCAweDMyZGZkMGZmLCAweGZiM2IyYmZjLCAweGQ4OGFhNzU3LCAweDdjNzVjMmJmLCAweDRlOGI2ZTQxLAorCTB4YTdiYWQzOTQsIDB4OWE2ODhiOGEsIDB4ZDdhNGUzODIsIDB4ZTU3ZjkzYzYsIDB4MGNiN2YzZTgsIDB4Zjg5MzNlNzgsCisJMHhlMDQ5NmVlYywgMHhkOTAyOGJiYywgMHg0NDYwY2Y4MiwgMHgxYWViZGMxNCwgMHg2NGZmNjc1ZSwgMHhmNTFhYTM1ZCwKKwkweGRlZjE4OGZkLCAweDdiODgwNjVmLCAweDNlMGNlZjg3LCAweGU2NWUyOTBiLCAweDVkYTJiZGEzLCAweDkzMmZiOGQ3LAorCTB4MWNkNmIxY2UsIDB4YWVhOTNlNjIsIDB4M2RmMThiMzMsIDB4MDdiYTA1YTIsIDB4NDExZmMwOWEsIDB4MjczZjA4MDcsCisJMHg2NWQyMTFlOCwgMHg4NDM4MjU5ZSwgMHhiZGJkZmFmYywgMHgyZWIyOGFmNywgMHhmNWVhMjgyNCwgMHhmMzg3NWE2YSwKKwkweDViOTc0Yzc3LCAweGIzYzdhNWY3LCAweDllZTkyNzQzLCAweGUzYmUxZDA3LCAweDhhMWUyMjU5LCAweDViYWRmZjFkLAorCTB4OWY4ZTQxZTQsIDB4ZjhmMWZhMTMsIDB4NzhlOGZmNGMsIDB4YzUwMDMyN2EsIDB4NDhhMDVmMjIsIDB4ZWY4ODM1ZmEsCisJMHgzNWU3NjNlZCwgMHhmZTc4N2FkMywgMHhjNzAyNDNkZCwgMHhmNzNiOGY4OSwgMHg2M2ZkZjAyNiwgMHg3NWU0NGJhNywKKwkweDM0ZGJlYTRiLCAweDZkNjYxZWZhLCAweGVjODEzMjgzLCAweGY3OWNkYWQyLCAweGVjMTk3YmY4LCAweDVjOWU5MTE3LAorCTB4ZjdjODNlMWIsIDB4N2I3NTE1YWYsIDB4YzBlMzc5NjcsIDB4ZWMyZGRkYjEsIDB4OWRmOTNjYzMsIDB4N2NmOGVjNzIsCisJMHgzYzA2N2UzOSwgMHhkYjllMzIxOSwgMHg2NzNlZjc0ZSwgMHhmMTRlY2RjYSwgMHhlZWY4OWJkZCwgMHhkN2E5NTZmNSwKKwkweDY2NjJkZjE3LCAweGU4MGNlYTNmLCAweDIyN2Y3MTY2LCAweDQ4MTYzOWVlLCAweGQ0YWI3ZGJkLCAweDYzZGZiMWY3LAorCTB4NzZmZGZhMWIsIDB4NjdjMmNlYjksIDB4NzNkZDMzNjAsIDB4N2Q5ZjdlYzQsIDB4MTcwZmY0YmIsIDB4ZWZkNzk3ODEsCisJMHhmNGJkNWRmNywgMHhmZWZmNjMxMywgMHhlYTViODk0MiwgMHg4YTMwNTFmNSwgMHhlZDA4N2FmNCwgMHhlNDViZDcwZCwKKwkweDllZGRiMDI2LCAweGFlMzIzMDVmLCAweGE5ZGY0MWRmLCAweDc1M2JmMmViLCAweDU3ZmEwZDZhLCAweGY2YzdiZWU3LAorCTB4YjljYjc4ZjAsIDB4ODZmYmY5OTcsIDB4MWQ5MDA5NzMsIDB4Y2ZhZDllZTcsIDB4ZTQ3YTFhMWUsIDB4Nzk3NzQxMzYsCisJMHgxNGUxNTFlZiwgMHhiZmY0MWEzMCwgMHg2NDVhMTE4NCwgMHhmZmEwY2Q3ZSwgMHhmZjBlOTI4MywgMHgzOTQ1NzVjNywKKwkweDYzZTY0NWEwLCAweDA3ZmVhOTBlLCAweDQ3NTQxOWRkLCAweDM4ZmVjOWRkLCAweDIxZWQ4MDllLCAweDNjYTg2YjllLAorCTB4ODQ2YjUwZDcsIDB4NzAzNGJiOWQsIDB4ZWUzZTVjNzksIDB4NDA2YTVmM2IsIDB4NmU3NDkzZDgsIDB4ZWNhZDcyNWIsCisJMHgxNDg0NTYzNywgMHgyMmIwZWVmZSwgMHg5YjdmYTIwYywgMHg1MWNhZjljMiwgMHhiZjVjMmQwZCwgMHhmMTU0YTRiMSwKKwkweDNjNWE4NTc4LCAweDdjMTlmMDRiLCAweGZjMjZjMGI0LCAweDdhNWY4MzAzLCAweDg4ZjkyNWYxLCAweGI4NWZjOWM2LAorCTB4YjEwYmZhNTUsIDB4ZGExYTM0ZmMsIDB4NGJmYWQxNjcsIDB4ZWE4NzhhYmQsIDB4NDdjOWFmMzYsIDB4NGViZGM2Y2IsCisJMHhmOGI1ZWVlMSwgMHg0Y2QyZjkwOCwgMHg5Zjk2MzE3YSwgMHgxZmZiNzM1ZSwgMHhiNzc1ZmMyNSwgMHg4MDUyNWU1ZiwKKwkweGZkY2YxZmViLCAweDRmZjEyODZjLCAweGU4ZTQzNWU1LCAweGRkYmY0OTQ1LCAweGFlNzFjMDhlLCAweDc1OTdhOTYzLAorCTB4OGRiOWY1MDQsIDB4NTY5Nzg0MWQsIDB4ZDNiMmJmNjAsIDB4ODM2NWJlZDUsIDB4OGViOWI3ZjAsIDB4YzA5YzIyYTAsCisJMHg0ZDE1YTVmNSwgMHhhZDZlZmU3NiwgMHg3MTNhYTFhMiwgMHgyNmUzZTkwYywgMHg3ZWM3NjNkNSwgMHg1MmU5YzM3OSwKKwkweDE3OTQyM2NhLCAweDJhOTczYTg5LCAweGFiYmJhOGJiLCAweGJiYmE4YmIyLCAweGU3ZmVlOWI5LCAweGVmZjgxM2RjLAorCTB4MTFkNzQ0MDMsIDB4YjU3ZTNhNTgsIDB4M2VmODdiZTEsIDB4OTMzNWRmNTYsIDB4N2ZlMTM3MGYsIDB4NGIzNTBmNGUsCisJMHhiYjY4NmNmYywgMHhjNDg2Mzk5MiwgMHg4ODdmZGQzNCwgMHhmZDdlZWVlMCwgMHg4YTdkMGI0NSwgMHhkNWU2MzU1MSwKKwkweGQ2ODI1NDU5LCAweGRlNzlkNmVjLCAweGI1MmQ3NTJkLCAweGUwMzY1Njk0LCAweDQyOWRiYmI3LCAweDQzODM5YWVmLAorCTB4YmZjZDZmZDgsIDB4ZWE5YjdhYmUsIDB4MjU4YzZmODMsIDB4ZDJkNWQ1ZmIsIDB4YzExMmQ2MzYsIDB4NTAxYjlkZWYsCisJMHg2M2ExYzc2ZiwgMHgxY2E0OTgzNSwgMHhjYTJhZGM2YiwgMHgwOTQ3ZTkyMiwgMHgzZTZhYWViOSwgMHg4YmY5NDk5YSwKKwkweDdjZTc5MjRlLCAweDFlNDlkZjZhLCAweGRlYzU2ZDgxLCAweGM5MjNjOTMzLCAweDVhMmZkOTlmLCAweDRkNGJiZDYzLAorCTB4YWQwM2NmMmEsIDB4NDllZGQ0NjMsIDB4NjY2ZGYwOTEsIDB4YzQ4NTJlZjgsIDB4YTMxZDAwM2EsIDB4OGU0NDE3MTYsCisJMHhkNmJmZmNkNywgMHgzZTg1MTcwNywgMHgwN2QyODhlOCwgMHgxNjQyOWUwNiwgMHgwMzg4ZWZlMCwgMHhhNzVjYWQ4NywKKwkweGFlM2ZmNzQwLCAweDAzNmEzYTA4LCAweGMyNmVmZDA1LCAweDc2ZTQ4YTYwLCAweDBmN2JkZDMyLCAweDgzNGY5NzI3LAorCTB4NDFhZmE5YmIsIDB4ZmJhNTRiNTgsIDB4ZWEyYWIwZTksIDB4YmViMDg2ZmIsIDB4YmZmNzI4OWYsIDB4NTBiNzBiNDksCisJMHg3OTY0ZjAzZCwgMHhkYTA1M2E1ZiwgMHhlODBjZGU3OSwgMHg0ZTBiZDZlMSwgMHgxOGJhMGVmZSwgMHhiMjRlZGMzYywKKwkweDVhNTNlNzg1LCAweGUyMTQzZjJiLCAweDk5YzI3YmVmLCAweDRkODJlYjlhLCAweDg3MWQ2ZjdlLCAweGQzNzg3ZGRlLAorCTB4MGY4MTgyZTAsIDB4NDRkNWVlOTUsIDB4NzllYzUzM2QsIDB4ZmMyODE4NmUsIDB4NDJiYzliYmMsIDB4NDE0YjkxMGYsCisJMHgyMDkzYzBmNSwgMHhkM2Y5ZjdjNCwgMHhlYmRlNDNhMSwgMHg1NGM3M2ZjNywgMHgxZWU5MGI4YywgMHgzMWJhM2E2ZiwKKwkweDIwOGY4Yzg5LCAweGU3NDY5ZmNmLCAweGE3OWRlMzUxLCAweDE5OTMzZTYzLCAweDlmMDQ5ZDRhLCAweDdkMzRjZTEyLAorCTB4NzNmZWJmNjcsIDB4MjgzNTUzNzQsIDB4ZWJlZmJkZTUsIDB4NTE3MWZhZTksIDB4YTdhODNkZGYsIDB4YTlmNzhkZTksCisJMHg3YWYxNTk3ZSwgMHg0M2Q5YmViOSwgMHhmYzUzOGRkZiwgMHg3YjNhZDYxMywgMHhjMDM2NTlmNSwgMHg3MjJiODE5OCwKKwkweGZiZTg0ZTA2LCAweGMwZmMwNDZlLCAweGRmYjEyNDc1LCAweDI3N2M0NDhkLCAweGZlMjMxNzAyLCAweGU3NTE5MjJlLAorCTB4NDhiODNiYmIsIDB4NjU5MTNhYTcsIDB4N2JmZTM2ZTksIDB4YTFiNjg1M2IsIDB4NzlhZjI5ZTMsIDB4MzM5ZmNkMjgsCisJMHg3ZGVhODMzMCwgMHg2MmYyNDZlYiwgMHhmYjAyNzA1YSwgMHhlY2JmOTJiOSwgMHg3ODQ0OWRlMCwgMHhmN2M2YmM1MCwKKwkweGQzN2NjMDJiLCAweDMyMGJmN2ZiLCAweGIyMjdiZjgxLCAweDNlNzdjNTViLCAweDZkMWY5MWRiLCAweDNhMDUyY2E5LAorCTB4MjNjMzVmZDUsIDB4ZDNmOTNhMjUsIDB4MGYzNjVjNWIsIDB4MjU2YzQ3N2QsIDB4NzA3ZGVkYjgsIDB4MWQ0NGQ4ZDcsCisJMHhkNDRkOGQ0OCwgMHg3MmY1MTg3OSwgMHhiMWFkNzhiMSwgMHg4ZjRlNzkxOSwgMHg5OGYxZmQ4ZCwgMHg2MjdlOTBlZiwKKwkweDc4NDJkZmYzLCAweDk4YTkyODdhLCAweGRlNTMwZWZmLCAweDVjZGNkMzJiLCAweDdmYmYyNTBmLCAweGYwMzA0OWFhLAorCTB4ZTdlMzZjNTAsIDB4ZWM5NGY1N2QsIDB4M2Q1MmQ2NjcsIDB4OTM1OWMyMzcsIDB4NzhmZjVjMDEsIDB4MGE1NDY5MzQsCisJMHhiNGQ1NjVkNSwgMHg5YWVlN2E4OSwgMHg3N2ViMDA4YywgMHg3ZDYxNWZiMywgMHhkMjVhZDM1ZiwgMHhiMmUyZjY0YSwKKwkweGRkNzVjMmMzLCAweDA3NTEyZTM1LCAweGQwODBjODFmLCAweDNkMzQ3YWYzLCAweGEwZjQxOWE2LCAweDhmNTk0YmZiLAorCTB4NWM2NWQwNjQsIDB4N2JkMDk0M2EsIDB4OTFkZWMyZTMsIDB4ZGI0MjkzODQsIDB4ZmRkMDM3Y2IsIDB4NzQ3MGI4YzIsCisJMHg2OWQyMTk3ZCwgMHhmN2E5ZDEzNSwgMHhjOWNkMWUzYiwgMHg3ZDA2MWVmNSwgMHhkOTk4NzE5MCwgMHgwNmVlOTI5ZCwKKwkweGRmYzY5Y2JkLCAweDUxNmFmMDIzLCAweGEwYzA4ZjdmLCAweDQxNDRmNmUzLCAweGUwNTUzMzJmLCAweDc1NzdlNzBjLAorCTB4NGU5NjM3NWEsIDB4MTRlMTFiZmYsIDB4NGJiMGJhYzEsIDB4MDAwMDRiYjAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDI3N2JmZjAwLCAweGEzZjBjMGNkLCAweGE1ZmQ4MTFlLCAweDc5YmExODE4LAotCTB4ODk2OGM1NTAsIDB4MzAzMjcxMzcsIDB4MzAzMTcwYjAsIDB4MDY3MTAyNjgsIDB4MjAzNmRlZDAsIDB4MTdjNDBlZGQsCi0JMHgxMDIyZjg4MCwgMHgzMDMzNzE5YiwgMHgxMTcxMDIxNCwgMHhmMjAzMmYxMCwgMHg1NmRjZDA5MywgMHg1MGMwYzRjMSwKLQkweDQwMzVjNDA1LCAweDNhYzQwNzVjLCAweGJhMGMwYzhjLCAweDFmZGJjNDhjLCAweGYwYzBjNDJmLCAweGQ3YzEwYzQyLAotCTB4NDg2MDY3MTAsIDB4ZmY5ZmE0OTEsIDB4NTRlZTFiMDcsIDB4YzI3ZGFmYTEsIDB4ODYwYzBjYWEsIDB4NDY2MmE4YmEsCi0JMHg1ZDYzN2M2OCwgMHhhMDk4NjZmYywgMHhmMWEyOWJjOSwgMHgxN2U4ZjBjZCwgMHg4N2U1NDBiNCwgMHhlM2YyYTIxOSwKLQkweDc2MTgxOThjLCAweDM3MDlhOTIyLCAweDc0MTZlZmM0LCAweGY3YTgwMmZjLCAweDAwMDMxMDI1LCAweDIyMDM3YmViLAotCTB4MDAwMDAzNjgKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDkzY2JmZjAwLCAweDUxZjg2MDY1LCAweGQyZjljMDhmLCAweGJjZGUwYzBjLAorCTB4YzRiNDYyYTgsIDB4MGMwYzVjMGMsIDB4MGU1YzQwNDEsIDB4N2I0MDFhYzQsIDB4ZGJlOTAxNmYsIDB4Y2RjZTFjNDAsCisJMHhjNDAxMTBjMCwgMHgxZmY4ODFmYiwgMHg2MjA3ZmYxMCwgMHgwNGQ2MjAwZCwgMHg3OTQwNWZlMiwgMHg1YjFiYTg0NSwKKwkweGRhMTgxODk4LCAweDg4MDNiODgwLCAweDg3NTg4MGJiLCAweDk3NDE4MTkxLCAweDkzZmI3ODkxLCAweGRlMTgxOTg0LAorCTB4N2FmODIzODksIDB4Y2QwYzBjMTIsIDB4ZmZmM2Y0NTIsIDB4NTYzMWMzNjAsIDB4MjllZmI1ZjQsIDB4MTc0ZTNlZDAsCisJMHgxOWM3M2YwNCwgMHg1MDVjMjQ5OCwgMHhlMGJiNzBkNSwgMHg0ZDA3ODMzNywgMHhjZjhkMTc5ZSwgMHg5ZTdmNDc4NywKKwkweDVjYmYyYTIxLCAweDRkM2Y5NTBiLCAweDIzZTE4MTg3LCAweDJkMGE5YTkyLCAweGM3NDE2ZWZjLCAweDBjMGM0NjhhLAorCTB4YWJjNDQ2NGEsIDB4Y2E4YzYwZGYsIDB4ZDA4MTMwMGYsIDB4YjFhZGY5MDAsIDB4MDAwM2E4MDksIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0N2MwOSwgMHg3M2I5ZjhiOSwgMHhjOTk5ZGVlNywKLQkweGFjODQ5OTJjLCAweDVkODZmMTJjLCAweDQ4NDA5YzA0LCAweDU4NzZjNDQzLCAweDA2MjJiNGE0LCAweDMwYTIwYTk3LAotCTB4OTAzN2Q5NmMsIDB4ZmY2OWYwZmEsIDB4YTVhYjA4MTksIDB4NjhkMDZhMWEsIDB4NjgzMDRlYzEsIDB4MWEwNzQxYjAsCi0JMHgwMWMwNDgzMCwgMHg2YTJiZTJkNCwgMHg2ZDhhZDNlYywgMHgyYzM0ODBjNSwgMHgwZGM0NjQ4NiwgMHgzZmYyZDNkZSwKLQkweGNkY2U3N2RmLCAweDExMzM3YmRjLCAweGJmZmJmYjZjLCAweDRmMTY5ZmU1LCAweGI3ZmIzZGNlLCAweGU3N2NlZjlkLAotCTB4OTJjYzVmM2IsIDB4NDA3ZTEyNDAsIDB4YTFmODY1YzgsIDB4MjExMzE4ZTksIDB4NWQyNDVjNjQsIDB4ODhmZGZkNmMsCi0JMHhlNTIyN2Q1MywgMHhhY2M4OTU3ZiwgMHg0NjVhNDhlMCwgMHg0NmRiZTQyYSwgMHhiMjEzYmU0NSwgMHhiMTZmZWIxMiwKLQkweDU4OTM0NmI5LCAweGM0MDJkMzQ4LCAweDkzZGYzZjQ1LCAweDg0NTkyMjY4LCAweGY4MjZlN2RjLCAweDliY2UyNWIzLAotCTB4MTIxMjY0MjYsIDB4NmY3MTY4ZGUsIDB4MjVkZmE3NGQsIDB4ZDAyNDI1YzUsIDB4YjcyMGZkNzQsIDB4NGE3NjgwNWYsCi0JMHhlYmMzZTQxMiwgMHg5YTU2ZjcyNSwgMHgxNjVmNWYyNywgMHhjYWQ5YmRhMSwgMHgyN2U4MTNkYSwgMHhmODdjOTA4OSwKLQkweGQyMjExMDdkLCAweGU4Zjg5MTQ1LCAweDAyNGJhNGZjLCAweDMyMjQ1YmE2LCAweDRmY2U5NzJmLCAweDI2NDZkZjcyLAotCTB4NzNmMzIyM2EsIDB4OTM5MmU0MjcsIDB4OTk0ZWZiZjQsIDB4NTJlZmQzOTYsIDB4MzdkNWFlNDIsIDB4MmQ3ZTUyMzIsCi0JMHhlNGZlNzAxMSwgMHg1ZmVjNGFlYiwgMHhmYmI1NmYxZCwgMHhkNzE3YWIzNiwgMHhkZmI1MTdlYiwgMHg1YzE3ZGNiYiwKLQkweGNiNzU3ZGYwLCAweDJkMGZkOGVkLCAweGMzOTY3NWMxLCAweDllNWExNGZjLCAweGE2MjY1MjcwLCAweDM4MTFmZjQ4LAotCTB4MzUxYzcwMDUsIDB4NzFkMGI0YWYsIDB4ZjA4ODQ3YmYsIDB4ODRlZDM3Y2EsIDB4Yjc2YWJiYWUsIDB4NWMyODU4YTQsCi0JMHg0Mjk2ZWYyNiwgMHhkMmY5YTAzZiwgMHg3OTAwMjEzYSwgMHgyMTFiMDFkMywgMHg5YjlkNmUxNCwgMHg5NGU0M2U1OSwKLQkweDdjZmY1MGJkLCAweDJlZDNjZDNkLCAweDhmYWQyZGNhLCAweGRkNzAwMGRjLCAweDM4YWQ5MjJkLCAweGU2MDlhZTRjLAotCTB4YWRjMmFlZGIsIDB4NmNmM2U1OTksIDB4Nzc1YTViMmMsIDB4MmZiNDJlNzAsIDB4MWIxMGI2NjgsIDB4NmY3NGFmZWQsCi0JMHg2ODFiOGNmZSwgMHg0NDg4ZmYzZSwgMHhiNmU5NGFhMCwgMHg5YTVmNzIxNSwgMHg0MTA4MGMyZiwgMHgyMjRkNzdjOCwKLQkweDhmN2ZiZTM4LCAweGViNDZkODE4LCAweDkzNWFiOTc3LCAweDNjNzBhNGVlLCAweGNhMjU2OTU3LCAweDY3NmYzYTMwLAotCTB4MTQxZGQyNmIsIDB4OWQ4MTQ1MGUsIDB4NTE1ZGExNTMsIDB4MTIwMWUwYTMsIDB4ZGI3YmJjOWEsIDB4NWRiNGE5ZWIsCi0JMHg2M2MxNzZlOSwgMHg2ZTI5NzBhMSwgMHgzODY1MTNiMCwgMHhmYTY1YzM5YiwgMHgwYzQ5YmRhZiwgMHgyZjk2ODBmZCwKLQkweGU5MjRlYmE1LCAweGE5ZWFkNzgwLCAweDM3ZjE4NDQ0LCAweDAyMzM4YWNhLCAweGMzOTU3M2E3LCAweGU0ODk2Mjg5LAotCTB4NzFkM2I3NGIsIDB4MTdiMmJiNjgsIDB4YjEyYzBmMDQsIDB4NDA3YzQ0Y2MsIDB4NmQ3YjlkOTcsIDB4YzA3MTllYjMsCi0JMHg0M2M4NTZmYSwgMHhiNWFlYjA5ZCwgMHgwZmNiZDQzMiwgMHg1MzYzZGZjYywgMHhmMjc1N2U2MCwgMHhiNDVlNWE1NCwKLQkweGQzY2U0ZWI5LCAweGUxYjhiZmUwLCAweDM1NThhMjNhLCAweDk0MWRhYWYzLCAweDYzMGZhNWFjLCAweDg5OTI4ZTdhLAotCTB4ODQ0NTNlNzYsIDB4MjAwZTgzNzgsIDB4NTMzYzgwODMsIDB4ODU3ZDE3YzMsIDB4NzE3N2M0MzgsIDB4OWZlYmE4ODMsCi0JMHg0NDkwOTI0MiwgMHhlOGY3ZGZmYSwgMHhmZTVlMTRhZiwgMHhhYjg0NGVmZCwgMHg5Y2E1Yjc4YSwgMHg1ZGJjNTQ4ZSwKLQkweGNjNDNmY2UwLCAweGZmNmQyY2UxLCAweGUwMDhmYTZhLCAweGJhYTdjZTgxLCAweDJmZTk4ZGQyLCAweGFkMzA1MzJiLAotCTB4M2YxMDU0YTksIDB4NjhmYzAzOGYsIDB4ZGJjZjgxYmEsIDB4MzQ0YzgxMzUsIDB4NWU1ZDcxZDMsIDB4OGIzNjA2ZTIsCi0JMHgyODlkZWU5ZiwgMHgyZTdjN2NkMSwgMHhlM2RkMjdjYiwgMHg1OTZmOTQxMywgMHgyZTNlOWFiZiwgMHg0ZjAzZTZmOSwKLQkweGJkNTMyMjZlLCAweDk3OWE1NGU2LCAweDg3ODg0YjdkLCAweGQ1YmU2ZjhlLCAweDIxM2M2NTNiLCAweGEzZGYxMmFmLAotCTB4ZTRkMTdlYjAsIDB4MTJiYzAwMmIsIDB4YTVjOTRjMTIsIDB4NTAyMzU5NzgsIDB4YjVlMTQyMzksIDB4ZTE0OTE2MTYsCi0JMHhkMjk1MjZiMCwgMHhlM2QzYzUzMywgMHgyMzNkNjZmNywgMHgwOWFkN2MwYSwgMHhmNjdiY2Y5MCwgMHhhN2VjNzRlMSwKLQkweDY5OTFmYjE2LCAweGRjYWU4MzNmLCAweDZjZGNkMjRmLCAweDczNDkzZjVkLCAweGVhN2VkNDBiLCAweGFiOTg5ZmIwLAotCTB4YjlmMWU3ZWIsIDB4Y2NmOWZhMzksIDB4NzlmYjUyMmQsIDB4YWU4OWVhMWUsIDB4ZDI1NzViYWIsIDB4ZjlmYTA5YmMsCi0JMHg3ZWMxMmJjYywgMHgxMGYxZWY5MiwgMHhhYTJmYWQxZiwgMHhiZDVhNDNmNCwgMHgzNDc3MmQyMiwgMHg5ODc5OGRjNiwKLQkweGQyNjhlOTY4LCAweDQ5Y2ZlODFlLCAweDQ3NGI0YWI5LCAweDNhMzFkOWIxLCAweGM2ZjM4YTdlLCAweGE2N2RmMmViLAotCTB4NGZkNWQ1ZjUsIDB4MmJhODFkY2MsIDB4YzIzNTllNGYsIDB4NzcwZTk3NDAsIDB4MGYzYzc1ZmIsIDB4OTE1OTcyOTMsCi0JMHgzMmJlZTVlZiwgMHg3ZDg5OWRjYSwgMHhmYmZmMzhhZCwgMHhlZTUwM2FmYiwgMHgxYmUzOWZkYywgMHg4NmYzYTZlNiwKLQkweGZmOGExMmI5LCAweGY1ZGY2NWZiLCAweDQzNzQyOGVlLCAweDE0OTAyNWQ3LCAweGE0MTMxNTQ4LCAweDEyYjVmMmM2LAotCTB4N2VhNGRiODMsIDB4NDEzZDBmNWYsIDB4YzI5Yjk3ZGIsIDB4ZmU2OGUzNDMsIDB4OGZmMTMwODgsIDB4ODBiZmVlYjAsCi0JMHg4Yjc4YTUzMCwgMHhkNDA1NDkxMSwgMHg5NDEwYjE4YiwgMHhiM2QzNmI3ZiwgMHhlMDZiZjE5ZSwgMHhhNTAwNmViYSwKLQkweGVmZDIyMTE3LCAweDAyOTdjOTNhLCAweGFmZTZkOGY0LCAweGFlN2QwM2YwLCAweDYwNTMyMDE5LCAweDU0ODI3MjEyLAotCTB4Njk4M2ZjODQsIDB4Mjk3OTAxZmIsIDB4NGM4YjdmMDAsIDB4N2M3Njg3ZTUsIDB4MTIzZjhlOTksIDB4ZjE4NzZmYzcsCi0JMHhkZjE5N2EzYiwgMHgzNzViMzAzMiwgMHg0MGFkMzViZSwgMHhhNjU1YmUzNywgMHgwOGZlNTNlMywgMHhmMWYzOTdmYiwKLQkweDA4NzJmYzI5LCAweGM3MmM5NGY5LCAweDA1NjkyZGYxLCAweDk5NWFmZTM4LCAweDhmYzZlODE0LCAweDRiZmYxZWU5LAotCTB4MTg2YmY3MTgsIDB4ZmFjYTMxM2YsIDB4ZDdlOGU2MDcsIDB4NWZhNDU2OWYsIDB4NGZkNmNjYmYsIDB4ZjhmOWY4NTYsCi0JMHg0MTdlYjgzMSwgMHhhN2Y1YjNmMCwgMHg1YmY1YjExNSwgMHhlM2RkYmY1OCwgMHgyZmUxYmFiYiwgMHg4NzVjNzQwYiwKLQkweDA3ZmFjYmQwLCAweGZmYWZkMDRkLCAweGZhZmQxMjlhLCAweGY3N2M2YzJkLCAweDdjN2M3NThhLCAweDI3MWY4ZTA3LAotCTB4YmZlYjYzYWMsIDB4OTdjNzA0YTYsIDB4ZDAwZjNlMmQsIDB4YTYyZmRjOTEsIDB4NjlmYjAwMjIsIDB4Yzk0MGNhN2YsCi0JMHg5OGJkMDMyOCwgMHg4NDI3OGYwZSwgMHg5M2RmOTNjYSwgMHhmYjg3MDg4MSwgMHg3ZGRkMTg2MywgMHhjZGU5NDMxOSwKLQkweDI0YTc5MTExLCAweGVlOTAzOTQwLCAweGE2OWM2NWMzLCAweGNhMjcxYjhiLCAweGUzZjY3ZjZjLCAweDRmOThiZWJlLAotCTB4ODhiMzUxNzUsIDB4MmM2YTRkNzQsIDB4YmU3NDIxODEsIDB4MWZhMmNkOWQsIDB4NmU2YThiZjIsIDB4OWZiODg4MGMsCi0JMHg5ODgyM2QzMiwgMHhmZmJlMDg0OSwgMHhhZGE4ZDM3NSwgMHhkMzE5NzVkYSwgMHg3YjUyZDVjNSwgMHhiYWFmODY5YiwKLQkweDMyMjRmYmU1LCAweGFmY2U4MmJjLCAweDVjNjA4ODAyLCAweGU1NGVkZjI0LCAweGY4NzJhMTM0LCAweDkwYzc5NTI0LAotCTB4NWU5ODk2OWUsIDB4NzFjYThhNzIsIDB4MzdjYjRjMzIsIDB4ZTI1ZTk4MmIsIDB4YTcwZWVmMjcsIDB4OWYwOWZmZjMsCi0JMHhjMTk5YmI3ZiwgMHgxMDk5N2RiYiwgMHhiOTdmZjgwMCwgMHhmMjBjODk3MSwgMHg5ZGI1NzE2YywgMHg4ZjMyM2QwMiwKLQkweGYwYTc4ZTcyLCAweGY1MDA0YjVlLCAweDAwMWRiYTI5LCAweDU2NDJlZTdjLCAweDAzYzNlNDI0LCAweDUwMmViY2I3LAotCTB4YjZiZjJkM2QsIDB4M2RkZGFlOGYsIDB4ODUzYWIwMjQsIDB4NjFiODVmZDYsIDB4NWQzNzAwZmUsIDB4OTY1OTljZmYsCi0JMHg0ZmVjMjIzMSwgMHg4NGNmZGJjNCwgMHg5OWZhNGM3YywgMHhkNTk5MDliMiwgMHg0N2VhNTFiNCwgMHg5MmNkNzczMywKLQkweGRhNjliNjRlLCAweGYzZTlmNmNmLCAweGY5ZjQwYTczLCAweDk5MjAyOTRlLCAweDE0Mjk5ZjQwLCAweGY3ZWQxZDQ4LAotCTB4Yjk3ZDBhZGUsIDB4MjEzNGNlM2EsIDB4OGY5NWUxOWUsIDB4ODMwYTEzZjcsIDB4NWVlOWZhNTQsIDB4NjdjMGM3NDgsCi0JMHhhZTc1ZTIzNywgMHhlNzU1YjU5YiwgMHg0NGEwZmU1MywgMHhiNzFmYjg0MiwgMHg3ZmM0MTIyNSwgMHhiOWYzZDYyMiwKLQkweGYzOGRiYWQ5LCAweGJkNTkyYjlkLCAweDczM2U3NGI5LCAweDllMTExMDFmLCAweDFkYjdmOWM2LCAweGEzNGQ3YmIwLAotCTB4OTlmYjVhNjksIDB4NWM2ODI0MDQsIDB4ZjNmZTcxOGYsIDB4ZTNkNzFiOTYsIDB4OTg3ZjYxOTYsIDB4Njc3ZTM3ZWYsCi0JMHhhN2E0NjI3NCwgMHg4Zjg5ZTZmMiwgMHg1M2QwZDI5ZCwgMHg4ZjQ3ZjA2OSwgMHgyYmI0ZDI5ZCwgMHhjYmE5OTg2ZSwKLQkweGViNjYwNjE3LCAweGNlZDdlN2VhLCAweGFlMmY5NWQ3LCAweDJmOTVkNDJlLCAweDk3NDRiNzVjLCAweDQwN2ZlZjlmLAotCTB4ZjJkZTdmNTcsIDB4N2JmMmJhMTUsIDB4Y2FlYmQ2MmIsIDB4ZDQ2YzE0ZTcsIDB4OWVmYjY3ZTUsIDB4NmJiZmQ1ZDQsCi0JMHg1Y2FlOWQ1NiwgMHg0ZDc4NTAzOCwgMHhkZjU1Y2ExYiwgMHhiN2EwYTkzNSwgMHg0MDIxNjA3ZSwgMHhhYmJkMmE4ZiwKLQkweGVhODY3MGZjLCAweGEzOWU5MDJkLCAweDJiYTQwYjdhLCAweGZmMjk0ZjgwLCAweGI0YjJmNjliLCAweDZiZmNlYjdjLAotCTB4ZmViZDFhZGMsIDB4MDY5MTU0YjQsIDB4N2JhNDY0ZmMsIDB4ZjQ4ZDNjMjMsIDB4NDVmYTdmNGQsIDB4YjRkNDg3ZGIsCi0JMHgyMGI5MjA0NCwgMHg3ZWY4YmFlNywgMHg1ZWJmN2VhZSwgMHg2NDdhNzEzMCwgMHg3ZTEyOWRlNywgMHg5NWQ5Mjg5ZSwKLQkweDNiY2UwOTNhLCAweDY4Njg3MjI1LCAweDdlZjdhMzg1LCAweDc1YzA1MDQ5LCAweDEzZDJkMDEwLCAweDVhOTQ2ZjAxLAotCTB4NmUyYjcwMzUsIDB4Njc5YmE0MTgsIDB4YzcxMTQxYzcsIDB4YTVkZTAzMmYsIDB4ZTQ4MzJmZjIsIDB4MGYyMDBiMzYsCi0JMHg2ZWQzODc0MiwgMHhmMWYzMDUxZiwgMHg0Y2Y5MDVlZSwgMHhmZjcxMTM5YSwgMHhmNjljYThlZCwgMHhlMDA5MjlkOCwKLQkweDk5ZTk4Yjk3LCAweGI2OTg1OWNhLCAweDNkMzBmYTU3LCAweGU5ODA1OTU1LCAweDRjMGFjYWM5LCAweDYzOTcyYWRiLAotCTB4OGZkMmJjN2EsIDB4ZDcyYTVmZTksIDB4Y2FhN2ZhNjEsIDB4NTU4ZjRjNmEsIDB4YzdmYTYyZDYsIDB4OWRhNjAwY2EsCi0JMHg1NTRjNWU5NSwgMHg5Mzk2ZWRiYSwgMHhlNTZmNWNiOSwgMHg4MWZhMGJlNywgMHgyZDdjYWRlOSwgMHgxNWJkZmQyMiwKLQkweDAyOTNkMWY5LCAweGYxYzE3OGZjLCAweGNiZDA1MGU1LCAweDQ4YTMxYzJmLCAweDVlMWRlZjRlLCAweDE1ZTg3YTQ2LAotCTB4N2E4YmM0YWUsIDB4ZTI4MDVlNDUsIDB4NzJjZjRmYjksIDB4OTNjMzBjNWIsIDB4MTFhNjQ0Y2QsIDB4MGZkNjM3MmEsCi0JMHg2MGIzZDY3OSwgMHgyNGNkZTYyNCwgMHgzYzA3ZGExZSwgMHhmYTUxOWQzMywgMHhlMDE0N2JhNSwgMHgyMjc4NGFlYiwKLQkweDM4NjhmMGRlLCAweGY1M2ZiNzBmLCAweGVmZDA1OTlmLCAweGI2NDBjMmY1LCAweDcxMTYxZTVmLCAweDY3YTEyNGJmLAotCTB4ZWZhZjgwM2MsIDB4OTVlMTM3MGEsIDB4NmY4MGQzMGYsIDB4ZjBhYTI3Y2UsIDB4MzQyMzRkNmIsIDB4YjFiODIyNWQsCi0JMHgxNjRkMGJmZiwgMHhiNjM4MDY2MiwgMHg4NDcwMDNkOCwgMHgxOWU0NzBiZCwgMHg0Yjc3ZWMxNywgMHg1M2VhYzQ1MywKLQkweDU3ODc3YjYzLCAweGRhYmQzMDY5LCAweDc5NGY1OWExLCAweGExN2YzZWIzLCAweGNlYzY5ODVhLCAweDFkZWM0YWY5LAotCTB4ZGNhZTgwYTMsIDB4MDA4NmE3ZDUsIDB4NTUzMDUzZmUsIDB4MjI5YTU5ZmIsIDB4YjllYTM4ZTMsIDB4MjFjNjM0OTYsCi0JMHgyMTczZDI5ZCwgMHhjZjY3ZmJkNiwgMHgyMjdlYjdhMywgMHgxZjIyNjhmMywgMHhiYjAxZDg1MywgMHhlNTc0MWU1YywKLQkweDdjMGY0YmYzLCAweDczOTczZjliLCAweGQyMmQ0ZjAxLCAweGM3OWZiMDk3LCAweDA3OTc3ZmQwLCAweGNjNjZiZjQyLAotCTB4MDc5NmZkYWIsIDB4N2FlNWJmNDUsIDB4MWJhOGRlZjgsIDB4ZDQ1M2I2OGYsIDB4ZWJiNDM3MzMsIDB4YTRjZDVlOWQsCi0JMHgxNTI3NWQ1ZCwgMHhkZWRjMTk2ZCwgMHhhYjYwZGM1MiwgMHgzOGZkY2JkNiwgMHgzOWJjYmU1ZCwgMHgwZmI3NWFiNSwKLQkweGVmOTQyZmMwLCAweDA2NjA4MTQ5LCAweDU0ZTEyOWJhLCAweGFjNzY2NWQ0LCAweDFjZmNlODEzLCAweDJkZmIwNTI2LAotCTB4NTJiZDU4MTcsIDB4NTNlYzliNmIsIDB4NDE1YjBjOTAsIDB4YWQ5MDU4MGYsIDB4ZDc3MjlkZDIsIDB4M2U1Y2E5OWYsCi0JMHgzYzg5N2JmYiwgMHhlZWRjZTUwYywgMHgyNTQ3ZjZhMiwgMHhmY2QxMzEzMCwgMHhkMDViOWU0MiwgMHhlNDFkM2M1NCwKLQkweDM3M2RkOWRkLCAweDg4YjBmZWEzLCAweDEwZTBiYWU0LCAweGIzYWE0MDUzLCAweDRmMzkwZjQwLCAweGVlODBkMzRjLAotCTB4YjgzZjkzY2YsIDB4MDNjZTZhYzYsIDB4Y2UzMjRjNzMsIDB4ZmQzYWUxNjcsIDB4MjdmNTQ4M2UsIDB4NTZiZjNlNWQsCi0JMHhiNzIzY2Y5ZiwgMHhlNzlkMDEyNSwgMHgyMDI0NDhkNSwgMHhjYmVhM2YwMCwgMHg3ZTMxMzY2ZiwgMHg2YjE1MjdjOCwKLQkweGM1NTg3ZjYwLCAweGRjMGIxM2NmLCAweGYyOGZkY2M0LCAweDViNGJlOTdiLCAweDc5ZDNlNmIyLCAweGY5MzEzMDJjLAotCTB4MGJkZjllYWQsIDB4NTExZTk5ZTMsIDB4YzE5M2FjMTQsIDB4ZDM3MWYzOWUsIDB4NDBkYzlmZDgsIDB4MGQ2MDdkYTAsCi0JMHhiYmZjMzFkOCwgMHhhNTM2Y2YwNSwgMHhlYmJlZmUyNywgMHg1NWYzOGRmYywgMHg3NjFlOGZmNywgMHhkMjhmM2UwNCwKLQkweDg4MWJjMTA2LCAweDk4NTQ4ZmIyLCAweGY4ZmZiZTA0LCAweGViMDk3ZTk5LCAweDFiOTllOGQ2LCAweDQzNWFmOTBjLAotCTB4ZmY5MGRlYmUsIDB4ODEyZGU5YmIsIDB4NjFjZGU4ZTgsIDB4MjUzMDZkZjIsIDB4ZmQwMmZhMzIsIDB4NjU4NzMwNGEsCi0JMHg3ZmQyM2ZkZiwgMHg2YmZlOGY0YSwgMHhmN2ZkYTlmZiwgMHhlOTY3ZmRhNywgMHhhN2ZmYWZmYSwgMHhjN2I4M2ZmNiwKLQkweGZhZDE4M2ZjLCAweGM3Njk3ZDJmLCAweDM3OTUzZjFlLCAweDcyNmUyZjQ1LCAweDljZmZiYTExLCAweDc5Mjc1NzM1LAotCTB4YjY0YmZlMjgsIDB4ZTJmYjQ2YWQsIDB4MDVkZmIzMTksIDB4MjAzNjdjZjQsIDB4Mzk0NDBiNGUsIDB4NzEzNjlmNTcsCi0JMHgzYWYxMjViYiwgMHhjMGY3MzgwNCwgMHg3M2ZmYjRhZiwgMHgwNjdjZmZjZiwgMHhkY2JlNWI5YywgMHgzY2YxYjkyNiwKLQkweDU5MDk2MGQzLCAweDM1OTY5ZjI4LCAweGEzMjc0ZTE1LCAweGU1ODI3ZjMxLCAweDQyMmE3ZWQ3LCAweDlmNGY1OWJlLAotCTB4NGE2ZGNmNDUsIDB4YTUxYmZiMDIsIDB4ODdlZmFlMTQsIDB4YWIyYTVmNTAsIDB4ZDg1NGViZmYsIDB4MTg0OWNhN2YsCi0JMHgwZWQ4Y2NmOSwgMHg4ZjE4YmZjNiwgMHgxY2JlNzFmMiwgMHhjZTljYjNkYiwgMHg3MmYwZjUxMywgMHhhNmYyOTcwZSwKLQkweGJhMmE3ZjlmLCAweDY5ZDFmZDIwLCAweDM2OTMxN2I0LCAweGVkOGQ5M2Q0LCAweDczZmViODBhLCAweDY4NGNlNGNjLAotCTB4ZjkxZWFhYTcsIDB4YzgxZWY5MWUsIDB4MjQyZTE1NGQsIDB4ZjExZmY0YzAsIDB4ZTFhMzJkYTUsIDB4ZmY1MWRhZmMsCi0JMHg4MWEwOTc3YiwgMHgxNzZmY2E5NywgMHhmZDdmMGI4MiwgMHg1Y2JiZDJiMiwgMHhiMWU3ZTRlZSwgMHhiNjAwYmI0OCwKLQkweGRlYjk5YTUzLCAweDEyZDJjMmQ2LCAweDdiMDJlNDI5LCAweGU0OWQ0OTY5LCAweDI1Y2ZkM2YxLCAweGY2Nzk5ZTNiLAotCTB4N2U0ZjM4MjksIDB4YTEwY2YxNjAsIDB4NzhlZjE3ZmQsIDB4MzQzOThmZWQsIDB4NGE1M2JjNWYsIDB4NDA0OWNlOTgsCi0JMHhhN2UwOGE0OCwgMHgzZTViZmU5YywgMHhhMjhmODIyNiwgMHgyYjI2YmVkZiwgMHg4N2Y3ZDhhMywgMHgyOTc4MjNlMiwKLQkweDI2NTA3OWRlLCAweDYzYzI3YWEzLCAweGRjYTBmMDcyLCAweDlmODI4OGU2LCAweGEwYTk4OWUwLCAweDdkMmY4OTVmLAotCTB4Y2ZmZTAzMjMsIDB4NzI0ODEwMWUsIDB4ZDY3ODE0N2EsIDB4MDI3YTg2YmQsIDB4YzlmMTA5YzAsIDB4M2Y4ZGQ1ZjEsCi0JMHg4YTcyZmQ0MywgMHg0NmViOTAxNywgMHhlZGViMTk3YywgMHhmYTA1ZjJlNSwgMHhhNTIxZmIwNSwgMHgwNjVlMTdlZiwKLQkweDJjOWZmMzNiLCAweGMxNDM4MDFlLCAweDYwYjlmNzBiLCAweDE1Y2RhNzNkLCAweGFjYjdjZThjLCAweGYxZDJmMjRlLAotCTB4OTI3ZjI0MGIsIDB4YmRmNjUzMWIsIDB4MjI5ZmU5ZTAsIDB4ZjNiZmU1ZmQsIDB4N2U3NjI0ZDMsIDB4NzA5YWE2ZjMsCi0JMHhjMmE3ZjJhZiwgMHhiZTZmMTczYSwgMHg0Nzk5ZDcxMywgMHgwNTg3NDg3YywgMHg5MDVjYzQ1YiwgMHhjOTk4NWY5NywKLQkweGY4NTE5ZGI0LCAweGU0Yzg5ZTY0LCAweDE0YWRlOWU2LCAweGE3OWQ3NGI5LCAweDc2ODQzNmU5LCAweDgxODgzZmQ3LAotCTB4NThiZjY4NmQsIDB4ZmMxZTQwNDIsIDB4OTM5N2I1NTQsIDB4YzJmZjk4YTUsIDB4NGUzNWYwY2EsIDB4YWE3ZWY1NTQsCi0JMHhiN2U5NjlmNSwgMHhlMDJiNmQ3ZSwgMHg2ZjAwZGNlOSwgMHhjYWJkZDgzMiwgMHhlMWNmZDk4OSwgMHhmZGE2NWMyMSwKLQkweDk0ZGNlZjhhLCAweDE0NDRmMGNjLCAweDQ3NmYxNjczLCAweGYwYzk4MmY1LCAweDRhYjdlYTFkLCAweDVkNjhkYjVlLAotCTB4M2QzOTcyM2IsIDB4M2UzMmZlMzIsIDB4MGM3NzlkM2UsIDB4OTNhN2U3ZWMsIDB4Y2EzMDQxNDgsIDB4YWE4ODM2ZmEsCi0JMHhiYWZiYTAxYywgMHhmYzM0Y2U4NiwgMHg3ZWJmZjhjZSwgMHg5NTc3ZTMzZCwgMHhhNzMzMDNmZiwgMHhlZmU3Zjk0MSwKLQkweDc2ODIzZTMyLCAweDc5ZDI1ZmIwLCAweGZjYjE5Mjg1LCAweGNhMDIxZGUwLCAweDQ1MDkwYjA3LCAweDg5N2FmM2UzLAotCTB4ZGNiZWI5ZjMsIDB4ZmU3NDJmNDgsIDB4NDM1NjIxNjYsIDB4M2M0ZTMwMzcsIDB4NWVlZDAxZTIsIDB4YmRiNDM1NzksCi0JMHhiOGMyYWU1NiwgMHhhYWZkOWVhZSwgMHhlNWNmOWM3YywgMHg5NTIyZGRjMSwgMHhlNDQ1ZDcwNywgMHhlNGNjZDkwMSwKLQkweDk3N2FlZjQwLCAweDIyNThmMTFmLCAweDBhN2Q5ZTA1LCAweGFiZjI5N2Y4LCAweDk1ZmUwMTVmLCAweDlmZmQ2MTcyLAotCTB4ZTNmZTFlMzQsIDB4M2U2Zjk0ZGQsIDB4YWI3Y2FhMDksIDB4YmU0NmFiOTcsIDB4MmUzNWQ4MmQsIDB4YjI3ZWRmMmEsCi0JMHhkZjNhMjMyMSwgMHhmOTUxZWZkMiwgMHhkYmUzMDM3NiwgMHg1NTcyZDdmZiwgMHhhODk1NjM4NSwgMHg5Y2FhYWI5NywKLQkweDQ2OWUwZGVjLCAweDJhMjY5OTM5LCAweDljYTM1NzA4LCAweDkyZWYzZmE0LCAweGE4ZjQ5ZWFjLCAweDdmNGFhMWQyLAotCTB4YmQyOWJmNDUsIDB4Mzc1MWU0MDYsIDB4ZDg3NGFhOWQsIDB4MWQyYWE3NGQsIDB4ZTg5ZmIwZjYsIDB4YmYyYzY4ZTAsCi0JMHhkMjgyNjgxOSwgMHhmN2RlZWU0YiwgMHg3OGEzZjZhNiwgMHhmNzYxNjkyZCwgMHhlYmRkYjQ1MCwgMHhmMmYwYTc5MCwKLQkweGFhNDczNmUyLCAweGEwOTdlZjVmLCAweGY5MGMwN2NkLCAweGQ3YmVhMWEwLCAweGQ0MzVjZjkwLCAweDE1ZjIxOWY3LAotCTB4NjYwMWZhODYsIDB4MmMzZTY4M2YsIDB4OTA4N2E0MTMsIDB4OTJiNGJlYWUsIDB4Yjc2MDlkZjgsIDB4ZGRhMjJmZGIsCi0JMHg3OWNlOGJhZSwgMHhkNWRmNmQwZCwgMHg1M2YwMWU5OCwgMHhjNmRhYjBmOSwgMHg0NGUxOGZjZSwgMHhiM2M4MGQ3OSwKLQkweDE1ZDg3NzJlLCAweGQzMWI3OTBmLCAweGMzNzJiYjdiLCAweGZlOGQzOGFlLCAweDQ0NDVhMjc4LCAweDIwMTZkYzc5LAotCTB4OGNmNmI0ZDMsIDB4MjE1NDVmMDgsIDB4NmY0OGRhZmUsIDB4ZDkwZWNjZTUsIDB4NzdlZWMzMTUsIDB4NjkxZDEyNmYsCi0JMHg1OWRjZTFjYiwgMHgxOTI4N2EyZCwgMHhlZTJiNDU5MCwgMHhiYTg5ODE3MiwgMHhhZGQwNjVhYiwgMHhjNWY3ZThiMywKLQkweDVhZWM4ODZmLCAweGE3MzVlZmM0LCAweDY3MGRjZTZhLCAweDA5ZjFmZjg4LCAweDZkOTdkYzAyLCAweDZjMmZmYzQwLAotCTB4NDU4OGU3NjEsIDB4NzNkM2EyMWIsIDB4ZTc5NzZmMTEsIDB4ZGM4MzI2NTgsIDB4NDlmZmZhYTQsIDB4ZWQ1NTlkYWQsCi0JMHhlMWIzNjBhNywgMHg5Y2NkY2I3YiwgMHgzY2YxYWJlZSwgMHgyZmFmNTQ1NywgMHhkMGYzZjFmNywgMHg2NDdlNTU0OSwKLQkweDFmOTQwYzkwLCAweGYzODFkMDcwLCAweDM3YmI5NzM4LCAweDlkNmYyMzg5LCAweDc1ZDBmMTQ1LCAweDM3NDAyNDQ0LAotCTB4YzQ0NDVhMTcsIDB4NzY0Njg1YzMsIDB4ODlmYzQ5NWYsIDB4MjQ2NTNmYzgsIDB4ODU0ZWYyOGMsIDB4YzdmMDA3NTcsCi0JMHg1MGU1ZGViMCwgMHhiMzBmZWVjNywgMHg0YTU1YTQxZSwgMHhmNDc5ZmNmNiwgMHhiMWRhNjhhZiwgMHhmYmExODNlNywKLQkweGZiZDJmZjIwLCAweDNkMjY3ZjY5LCAweDYwM2U0ZmViLCAweGQ3NmUzYjQzLCAweGJiZGUyNzAxLCAweDMzN2ZlZDc0LAotCTB4ZWZjODQxZWQsIDB4YmVmMDc4YjUsIDB4YTM1N2MwZjksIDB4NTZiYThlODEsIDB4OGU0MDBhNWEsIDB4Zjc2MDBkNzUsCi0JMHhiZmZiNTVmNCwgMHhmYjg2ZGQxYSwgMHg5ZmM0MmFlNywgMHg1ZmNlY2NkMywgMHhmM2ZlNWExNywgMHg1ZmIzZGMzOCwKLQkweDAyYWJhMTY4LCAweDFkODBlMGZkLCAweDJmZTVlMWVkLCAweGQwOGVkMGRiLCAweDJjYWJmZmI1LCAweGI3OWZlMzlmLAotCTB4YmY3ZTMyOWUsIDB4YjMyNGU1ZDIsIDB4ZTJmY2MxNzYsIDB4N2NiYTVkOTgsIDB4NTY2N2Y4ZGYsIDB4ZDM3M2ZkYzAsCi0JMHgyZDIxNzk0MSwgMHgzN2NhZmM5ZiwgMHg3NjNlNDFhMywgMHg0ZjdhNjJlZCwgMHgzNGY2ZDRhNywgMHhhY2E0MWZkYywKLQkweGEyNDJiNGJhLCAweGU2MDRlZTcwLCAweGY5NGY0YmU4LCAweGY5MjY3MmFiLCAweGNiODM0NjQ3LCAweGI5MWY2ODM3LAotCTB4ZmY1Yzc4NWEsIDB4MDIxZTA2M2YsIDB4YjQ5NjIzZGUsIDB4MDE1NjAzMzgsIDB4ZjhlOTdkZDYsIDB4MWMxZTQxOWYsCi0JMHhhYTVkMjBiMCwgMHhiODI0ZmRlYiwgMHgyYjkxZjUwMiwgMHhhYzA2N2JhZCwgMHhkMzdmZjEzYiwgMHhkNWQwODViYSwKLQkweGJmZjRiYmFjLCAweGUzM2ZiZTM5LCAweDBmOTFhOGZiLCAweGZlZjlkMjdhLCAweGMzYmYzMWZiLCAweDVlZjljMWU5LAotCTB4ZTJmZmJkMjUsIDB4NzdkZTFiN2YsIDB4YWViYmJjNTEsIDB4ZmZjNmVlYmMsIDB4MWRlZWViZTYsIDB4ZTVjYzZmZWYsCi0JMHhmZGMzNzc3OCwgMHhkZjJiZjk3YiwgMHhhYmJlZmNlMCwgMHgzZmZhM2I5YywgMHhiZWFhZmQ3NCwgMHhmMjkzM2JmZSwKLQkweDNmYWQwNjZlLCAweDQwM2I1NDhkLCAweGU5NTFmOGIxLCAweDY4MzIzN2ExLCAweDFmZmFlZmU5LCAweDRlZjk4MzhlLAotCTB4YzYzNWY3ZTIsIDB4NjY2MzdkZjksIDB4NzA0OWJlZTcsIDB4MjVjNzQzNmYsIDB4ZWYzZjAyNzEsIDB4M2Y1MjczYjEsCi0JMHg1YmY0NWZhZSwgMHg0ODdhODc5NiwgMHg0MGJmZmViZiwgMHg5NTk4ODI3ZCwgMHhmYzBmYjgxYSwgMHgwZjQyZGE1ZCwKLQkweDMxOTAzNmZhLCAweDc3OTA3Y2M3LCAweGZhZjNjOGRmLCAweDA0YWZlMmYzLCAweGNhYWI4NWUyLCAweDFmMzc2OTdlLAotCTB4N2ZiNTNkMDEsIDB4NThmNTExN2YsIDB4ZmFmZWEyOWEsIDB4ZmIxYTZiYWEsIDB4Y2VlYjIyNWUsIDB4ZjQ1MjNmMzMsCi0JMHgwOWE5OWJlNywgMHgxNGQwNzNmYSwgMHg4NDRkZGZkZSwgMHg4NzI2ZmZjZCwgMHgzODUwMDgxMCwgMHg1OGYwMWE0YywKLQkweDI3NDNkODAyLCAweDQwODg5MTBkLCAweDZmODk1M2YzLCAweGE2MWI5YzE1LCAweDdkZmRmNDM4LCAweGUzYzRmNzAwLAotCTB4YjdjYzcwMjIsIDB4N2YwMjJkZWUsIDB4YzA0N2FiM2UsIDB4OTg3NTg2ZmUsIDB4MzM1ODllNTAsIDB4ZTE4M2E0MDUsCi0JMHhiZmNjNjZiNSwgMHgwMzhmNzI2MywgMHhlMWI4Y2YzOCwgMHgyMDFlNGZhNSwgMHhjYWY1NTc2MCwgMHg2NWNiYTE0YywKLQkweDJmYWZmMWY2LCAweDA1OTA5ZTVmLCAweDAzZjY2ZmU3LCAweDUwYjc3OGZlLCAweDY2ZDE3ZDdkLCAweGViYTE4YTEyLAotCTB4ZmUyNjZjNWQsIDB4OGJiMDc4ZDgsIDB4Y2VhNGU0MGEsIDB4YzNjZmFhMmUsIDB4MjI5M2Y3Y2YsIDB4N2VhOTVjZmQsCi0JMHhjZmY4NzQ2ZiwgMHg3NGEyNWY0ZSwgMHgyMTA4NzI3ZiwgMHhmYmM1MjE3YiwgMHg1M2NmNjYyZSwgMHg2YmRmNTdjZiwKLQkweDNmMmFmMDYxLCAweGQ5MDMwMjRhLCAweGFiOThiOGJkLCAweDJjNWEzZmI5LCAweGU5N2JiYTMxLCAweGMyYzZiYjJmLAotCTB4ZDc2MjY2YjksIDB4OGZjNjU4YzgsIDB4OTA0ZmNjOTksIDB4ODgxNzk3ZWIsIDB4MDA3MWViMTIsIDB4YzU4YTBlM2YsCi0JMHhhMjIzYjE3YiwgMHhkOWRmOWEzMywgMHhmYWRlN2U3NiwgMHhkMjk3ZGMwZCwgMHg1NDllYWJiNCwgMHg5M2Y3YTA4YiwKLQkweGZjZjlkYTMwLCAweDJkYjI1NmY1LCAweGFlNDI3ZjhhLCAweDM4MmRkYWE0LCAweDk4OGZlOGRlLCAweDM2N2FmNjA1LAotCTB4MzRkYTYyZmUsIDB4OGViNzhiNTYsIDB4YTNjZDY3ZTksIDB4N2UwMWUyN2IsIDB4MmJlZTZhNGUsIDB4YzJmODUxZmUsCi0JMHhiYmUwMGVmOSwgMHgzNTM2ZDZkZCwgMHgyZWRmMGEzNywgMHg2MzNkOTg5MCwgMHg3ODRiYTFjNiwgMHg1MmQxMWViZSwKLQkweDFmM2UwMjY3LCAweGRkZDI2ZjUxLCAweDcxMmRkZGJiLCAweDE5MGM3ZGZkLCAweDcxOWFmMzAzLCAweDA0Y2NlNmM4LAotCTB4M2QxMTFjYmMsIDB4ZGU1N2VmZTAsIDB4OGJlY2E5ZjIsIDB4ODQ2NDZmNzIsIDB4ZjYwZmY0MjcsIDB4OGRjOTVhZDYsCi0JMHg4MjkzZWVlMywgMHhmYmFlMDEwYiwgMHg5YzA5NWJjZSwgMHhkNWNhZjZiNywgMHhlOWU2ZDFjNSwgMHgyZTc5YjBiMCwKLQkweDQ2ZmJjMTI2LCAweDgzZjdmZmE3LCAweDQ3MmVjNGVmLCAweDU3OWMxMjY4LCAweDc1ZjIwOWVhLCAweDQ4MjNmYTRmLAotCTB4NDgxYTE3YzcsIDB4OWMzMWU0MDAsIDB4NWMyZTQwNmYsIDB4MWZiODI0NjgsIDB4MDJmYzkwNTAsIDB4ZGY5NDZiY2UsCi0JMHhjNzNkYTA3ZiwgMHhmOWRlNmIwZiwgMHhjYTQ3ZDgxYiwgMHg5ODM3MDQ1YSwgMHg2ZGNjY2JhMCwgMHhjYWVkZDgzMiwKLQkweDkwNDRlMzliLCAweGVhOGExOWRiLCAweDc1MWVlOTBmLCAweDZhMmY4Njg3LCAweGViYzIzMzI1LCAweDM5YmVjZTcwLAotCTB4MWQ2N2VlMzAsIDB4Y2Q3ZDgxMzIsIDB4MDVkODZhZmIsIDB4OTZiM2ZmNzIsIDB4YmQwN2M4YjEsIDB4OTViN2ViYWQsCi0JMHgwNDhhNjhhNCwgMHg2YmE0MTBmZCwgMHg2YzhjM2QyMywgMHg2ZmU1ZDE4YywgMHg4MTdkN2QxMCwgMHhkYTU4NjZiZiwKLQkweGUwYTI3OTk2LCAweDdjNjY0NzJmLCAweDJkZjJkNTdhLCAweDdjOTlmZmYwLCAweDZmOTU1NzdiLCAweGMzNTczMTNlLAotCTB4ZDE5OTI2NDcsIDB4MjViZTQ2YmQsIDB4NGI2ZjkzNDcsIDB4ZTAxOTI1MDUsIDB4YTBmZjc0YmUsIDB4ZDJlYmMwNjQsCi0JMHg2OGM0YTQzNywgMHgyNTQ3NmRmMiwgMHg5MTdiMDdiYiwgMHgzNTc2YjFmYiwgMHhiZDc2Zjk1MSwgMHg1MTM1YmU0NiwKLQkweDRmYzUxNmY5LCAweGYxMzI0M2EwLCAweGYyMGFlZGZkLCAweGMzNWZmMDJkLCAweGJlNDAzYjdmLCAweGJlNjdhMzQ1LAotCTB4NmRmMmE4M2YsIDB4OTQwOWNiNzQsIDB4NGM5YmEzNmYsIDB4MmZjY2ZmM2EsIDB4ODRkZjI4YWYsIDB4OWY0MDNiYzQsCi0JMHhlYzc5MjIzYSwgMHgwNzY3ZTg1MSwgMHhlNDVlZGZkNywgMHgwZTMwMzY3ZSwgMHhiMjcxYjljOCwgMHg1YWJmYzcxYiwKLQkweGI1NzI5NzM5LCAweDA4YmZlZTcyLCAweDViOWNhYWNlLCAweDlmYTA5YmJhLCAweDY0M2E0ZjZhLCAweDVlZTk2ZTcyLAotCTB4YTAwNGU3MmEsIDB4OTZlNzI2NDcsIDB4OGVjYzI3ZWUsIDB4YzM2ZjkwNjMsIDB4ODIzN2M4N2IsIDB4YWM0MmNiZjUsCi0JMHhmYTczNzk3ZCwgMHhmZWQwZjcxMywgMHg4ZjI1NzhjNiwgMHgxMzFmZDY5NSwgMHhiNGUzNzc5MSwgMHg2YzljNmVmMiwKLQkweDkwZjczODQ2LCAweDRlYWU0Nzc3LCAweGYyZTZlZGRlLCAweDgxYjFjYThlLCAweGY0OGQ1ZjIwLCAweGZiZDE2OWUxLAotCTB4N2YxYmVlZmYsIDB4YzBiN2YxYmEsIDB4Nzg4YTZmMmYsIDB4ODk4ZWY1MGYsIDB4MzViYzE3ZGQsIDB4ZDAyNjc0ZmUsCi0JMHhjOTk5MDZkNywgMHg3Yjk3MWY1ZiwgMHhlYzdlOTU5ZCwgMHg2Y2FiZjI3ZiwgMHhlYzhkYTU3ZCwgMHgxMzU5NDEzZCwKLQkweGVhY2IwZmQzLCAweDdmNDI4MGM1LCAweDA5NzM5YTlkLCAweGY3MGE5M2VmLCAweGU2OTkyNDBiLCAweDFmYWE1YTY3LAotCTB4ZmQzZTgwNzcsIDB4M2ViODQ0OWMsIDB4NDM0MzNkM2QsIDB4OGJiMjhiMGYsIDB4NjU1YmNlZDEsIDB4OTQyNTZkNzMsCi0JMHg4OTk5MTc4ZiwgMHhjNWI5ZWMxNSwgMHg0MTY3YTk4ZSwgMHg2NmNlMmQ5ZiwgMHhmZTYyZGZmNiwgMHg1NDRiZjU1ZCwKLQkweGY3OGQzM2ZkLCAweDRiY2Q3OWU5LCAweDdhNDdlZjVlLCAweGIwY2ZhYmRlLCAweDc4Y2ViYzMwLCAweDFmODAwODQ2LAotCTB4ZjY3YmNmNjEsIDB4ZTI4NWNhMDAsIDB4MTVmN2ZkMDYsIDB4YzUzM2ZkN2MsIDB4NzkxNzg0MzYsIDB4OGI2Y2Y0NWIsCi0JMHg4YzJiM2ZjMiwgMHhlMWMyM2E3MCwgMHg4M2EyZTE0NCwgMHgwYTg4NDA1MywgMHhlOWU5OGEyNywgMHhiODExNDkxOSwKLQkweGI2ZDliZTE0LCAweDg1YzBlYzA2LCAweDZmNzgwYTRmLCAweDBhYjc1YzY4LCAweDU1ZmFlMzM3LCAweGQxNzZhYTM4LAotCTB4N2U1ZmRlNjIsIDB4MzNiZTFkNGIsIDB4ODU0NWMyMzEsIDB4ZGQxZTExYjMsIDB4YTNjMDM3NzAsIDB4ZmZmNmU2NGEsCi0JMHhmYzE2MzIwYywgMHhhMGRkMjg1OCwgMHg5YmZmZjE5YywgMHhiOTBmZmU4OCwgMHhkZWU4ODcxMywgMHhmMmU3YWM0MywKLQkweGM0ZjU2YzdmLCAweDNkZGQ3MGM5LCAweGUxODJmYzEzLCAweGM5NzZhZTNlLCAweDM3ZGZlMGViLCAweDA2MzI5OGVlLAotCTB4NzIxYmQzYjYsIDB4OTdiODNlMmMsIDB4YTMwYjZlZGIsIDB4ZjBlOTU0MWMsIDB4Y2Q4NzRlMjMsIDB4ZmFmYmJlMWMsCi0JMHg3M2MyNGM1NiwgMHgwNmUwYjM2MSwgMHg2NDNjYTQzZCwgMHg1Mzk2Yjg0MywgMHgyYWQxYjQ3YSwgMHg3MmZjOWY4NywKLQkweDFiYWI4NzJhLCAweGYzMzRiYmRmLCAweGMxZTI4OWZkLCAweDc1MWZlNzA0LCAweGY3YjAwYWJmLCAweDE4NWI2MzMxLAotCTB4MTgxYmNhNWUsIDB4MTg0OTMyNWUsIDB4YjU2NWVmZWQsIDB4ZDc0NDI3ODIsIDB4MDRiY2Q2NTMsIDB4Zjk1NTgyZmQsCi0JMHg1YTFjN2Y0YywgMHg1ZmExNDUzYywgMHgyNWZhMzQ3MywgMHg4YWNjOWM2MCwgMHhiY2M1OWJlYywgMHhmNTRiMGNkZSwKLQkweDNmOWVjMTFmLCAweDFkNDdmMjgzLCAweGRmZmQyMTkyLCAweDk1ZjdkMGI3LCAweGY4OGM0NWZjLCAweDZkYzM5MGZhLAotCTB4MDFkNWMwMDcsIDB4ZmQzMzBiZjAsIDB4ZGYwOTc0MmIsIDB4ZTVlNWE4Y2QsIDB4YWUwZWJmNjYsIDB4YzhiYTlmOTMsCi0JMHhhMGJmNmZlOCwgMHgxYmE1MWQ4MCwgMHhiNGNmNDA2ZSwgMHgzNzBhOWM3YywgMHg0M2MwNjdhMCwgMHhmMjExN2NjYiwKLQkweDdkZGUxNDc5LCAweDE3YWU3YmQyLCAweDdjYjRjN2VlLCAweDA0ZmZiODVmLCAweGUwOGI3ZmViLCAweGZkZDY1MTIxLAotCTB4M2JmYmU5OWQsIDB4ZmM2Zjc1ZDIsIDB4YmU4MTkxZmUsIDB4OGY4NWIyZGYsIDB4ZGVmYTA1OGUsIDB4OTNkZjIwMmYsCi0JMHgzZGZkMzg5NiwgMHg0ZGNlY2M5NywgMHgwZjk0NmRkYiwgMHgwZGU2MWVlMCwgMHhlOTU1YjNjOSwgMHgxY2MyMWYyOSwKLQkweDUwOWU3MGNlLCAweDZiOTI3NjM0LCAweDU3ZTAyMTYxLCAweGZmNDU2MGQ4LCAweDQwYzc5YzMwLCAweGU1NmFhZmE2LAotCTB4NDkxYjBlZjUsIDB4ZjdiMzIzYmMsIDB4ZjljNmZmZmUsIDB4NDk3ZDM3YWMsIDB4ZjE4MjhmY2QsIDB4ZDMzNjhlNDAsCi0JMHhjNjQ3ODZmMSwgMHhhYTE3ZWUzMywgMHhlYjRhZTAxZCwgMHhiMWZlNWJiMiwgMHg3Y2UzYTk3NSwgMHg3Mjk5ZmY1NywKLQkweDI4Zjc4YWQyLCAweGMzOGQxZmFhLCAweGUwOTQyYmU0LCAweDMwNGQzYWZjLCAweGMyZDFmZGViLCAweDcwZmZjZjFjLAotCTB4MmRmY2IyZmYsIDB4YWIxNDkzZmQsIDB4NGRlMmZkZWUsIDB4MjlmODgzYTIsIDB4NGFmMzNlZGMsIDB4Y2I1NDJmYzgsCi0JMHhlYzAyNmY3OCwgMHgzZWU4OTMxZiwgMHg4ZWNmOTM0OCwgMHgxZWZmN2I4ZSwgMHg1ZWYxMTcyYywgMHhmYjM3ZDZlNiwKLQkweGQ1YmRjMjk0LCAweDhhNjdjY2FkLCAweGEwMjE5YWRjLCAweDc0MGVmMGZlLCAweDcwZjQxZTM2LCAweGY4NWFmMTJiLAotCTB4ZmIzY2I0OTAsIDB4NzgwMTcxN2IsIDB4NWY1MTkwNjcsIDB4N2NhMTU5M2QsIDB4NTAyMWE2M2QsIDB4NzI2N2E5MDUsCi0JMHhjMDJkZTEzOCwgMHgwMDkxNDRkNywgMHg3ZGJkNWFiZSwgMHg3YmZlYzMyNiwgMHgwNjQ5NWZkZiwgMHg5ZWE4Y2U5OCwKLQkweDM5OGNmZDgwLCAweDVlYTExMjQyLCAweDhmMTEzNzhlLCAweDNlOWJlMzMzLCAweDNhNzZmNzdmLCAweDQ1NDdmMWJmLAotCTB4Y2RlYjQyOGYsIDB4MDA3MGVjM2MsIDB4NmNkZjBkOWYsIDB4NWMwZDNlMjIsIDB4MGFhMDQ4NzIsIDB4NGZlMzQ3ZWMsCi0JMHg3OTA3NmY3OSwgMHgxZWY1NDA1MCwgMHg2ODJmZjdmMCwgMHg0MTcyYWJhOSwgMHhlZDgwYjM3ZSwgMHhhOWJlZmRjYiwKLQkweDFkYmYzYTJlLCAweGJkNGU5ZmI1LCAweGFkMDJlNDBlLCAweDZmOTRkZDA3LCAweGViY2FmNTY2LCAweGIyYjgwZjA1LAotCTB4OTQ2Y2I1ZTYsIDB4MGJkNDZlNTEsIDB4NDc2Y2EwZjgsIDB4ZDY1NjIwNDAsIDB4ZmI0YWMwNmYsIDB4YjY5OWIxZGQsCi0JMHg4YmZkODRjZiwgMHhlYjdlODdiNiwgMHg3NmY3N2QzZiwgMHg5ZTc0M2I5MCwgMHhkZDkxYmVkOCwgMHg3NmQxZTZjZiwKLQkweGZkNDlmMDBhLCAweDcwYWZlYzEyLCAweDVkZTA0MGIzLCAweGRiMjM0MTQyLCAweDRhOGUwYTlmLCAweDNhNmYyODFlLAotCTB4YmJlZTI0ZjgsIDB4YTk3OGU5ZDMsIDB4ODUxZmIwZTksIDB4OGVmYmUwYTYsIDB4ZGYxYjgyYjEsIDB4NDM0OTRkZDUsCi0JMHgwYjA1ZDViOSwgMHgwMWQ2MDY4NiwgMHhlMDVjYmVlYywgMHg1MWZlN2U3OSwgMHgyZDM3YmZmNSwgMHhjZjM3N2ZjYywKLQkweDQzZWU0MmIzLCAweDNiMmI3OWZiLCAweGY0ODRkZDMxLCAweGZhMGNhOWY0LCAweDZmMGEyOWRhLCAweDNiZjc4NTFmLAotCTB4NzBlMTdmZGMsIDB4OWI3MmM3ZjYsIDB4NjczYzdmNjYsIDB4YmZmNDg0MTksIDB4ZmEyMjc5YTgsIDB4YjkyNjJkNGIsCi0JMHg2MzNmYWY3OCwgMHhkZjNiZDMzYywgMHgwMDE2ZDFiZSwgMHg1MmRiZGRiYiwgMHgzZjdjM2ZiOCwgMHhiZjA1YTM3YywKLQkweDcyNjBlZTc3LCAweDFiNDA3M2I4LCAweDZmNGY2OWRhLCAweDQ3YmMwODk2LCAweGEyMmNkYWE4LCAweDI4ZGQzODljLAotCTB4YjhiNWZkZTEsIDB4OWRiOTQyNDUsIDB4MjFlOTgzYmYsIDB4N2ViMzM3ODcsIDB4ZmQzMDM3NGYsIDB4M2I5NmYyNmQsCi0JMHg5YzNlYzJhNywgMHhlZmJkNGRiZiwgMHgzZDVhNzI2NiwgMHgwYmI5ZTY4NywgMHg1MTliZmI3NSwgMHhiODcyYWFjZSwKLQkweGEwYTNjMzk0LCAweDVmZWYwZWJhLCAweDU0Yjc3MjhkLCAweGYyMGQwZmRkLCAweDY1ZWUxNGI2LCAweDg0MzVmZWYxLAotCTB4MzQxYTU0N2MsIDB4OTgzOTEzZmEsIDB4MGQ3Mzg2M2MsIDB4MTJlODQzZDAsIDB4NTFkOTc3ZDIsIDB4NDZiOWMwODksCi0JMHgyYTYzYjhmOCwgMHhlYzJjZTdhYywgMHg3YzdjYjRmNywgMHhmYjg1ZTA4YiwgMHg5NjYzODJmMCwgMHg4MWUzZWEwMCwKLQkweDE1ZmVmM2Y5LCAweDJjMGY5OWY2LCAweGJmYzA1MDQ0LCAweGNhODNlMjlkLCAweGY4NGI2Y2E5LCAweGVmZDE4ZjJmLAotCTB4ODJiMWRmNjcsIDB4OWZhNTA4YTcsIDB4ZDU3ZjA4ZjksIDB4MWI3MzM0MmYsIDB4N2NjOGYzZjMsIDB4ZGUwOTI2YTcsCi0JMHg3ZDI5OTI3ZiwgMHhkN2U0MGU1MCwgMHg5MWE3YzQ4YSwgMHhlZjA1NjcxYiwgMHhmZGIzNzdlZCwgMHhmZmY1YWRjMSwKLQkweGYzYWI5NGNjLCAweDZmZWQ5ZjYwLCAweGQ5NTFmMjY1LCAweGRkZmJlMTI2LCAweDQ0N2NmY2MzLCAweGI3ZTgwYmNmLAotCTB4NjM3N2I4NTksIDB4ODdhMWFjOTIsIDB4OTMxYmZkYzIsIDB4NmIyMGU4YTgsIDB4MTU0NDdmYjgsIDB4Mjg1YmY3N2YsCi0JMHgwZjBhNzFiMywgMHhjZDNhZWUwOCwgMHg2YTNmNmEzOCwgMHhkNjVlZjJiZiwgMHg5NjdlZDA2ZSwgMHgyMTdmZDZmNiwKLQkweGY5ZDcwZmNjLCAweGMzNzIwYzg1LCAweGYxOGY0ZmQ4LCAweGZiMjdlOTdiLCAweGMwZDYyZmRmLCAweGI3ZWNlZDNiLAotCTB4Y2U2ZTc0NDUsIDB4MjBmYTc4ZmUsIDB4OWE4MGJkZWQsIDB4NTkwYzdlYWEsIDB4NTc4ODlhZWYsIDB4YmZlY2JmMDMsCi0JMHgwNmFmMTBjNCwgMHgyOGUzNGRkZiwgMHhkZGZjNTNmZiwgMHhiOWY0Y2NkMiwgMHhlNDI3NzFhNiwgMHhiYmNjNGNkMiwKLQkweGI4Y2JkZjgxLCAweDBhNmNiYTNkLCAweGNhNjllZmJiLCAweGYwMTU2Nzc4LCAweDAxNGNmNGZmLCAweDdkZjg4MWU5LAotCTB4ZDQwNDlmNzIsIDB4NGZmMDE0ZGYsIDB4ZWQ2NGNmY2UsIDB4ZTA3YjY5ZjMsIDB4MTkyN2E2Y2IsIDB4YTE3OTUyOWYsCi0JMHhkYjI5M2M4MCwgMHhkNjJhNzFiYywgMHhlODE0MTdhZiwgMHgzZTZlYTliZiwgMHhkOTA1MjVlYSwgMHhmYWYyYzEyMiwKLQkweDE1MjdhODEzLCAweDAwNDg5ZjM0LCAweDViZmNhNjdlLCAweGQ5NDBmYTAzLCAweGM0MWI4YjA0LCAweDJhOTdjYWIxLAotCTB4ZmRjZGJmOWYsIDB4M2RkNTg5ODksIDB4Y2JmOGZjMGEsIDB4ZjBhMmE5ODAsIDB4NzA5NDc4YjcsIDB4NjVmMTk1YmQsCi0JMHhkYmUzMzY3OSwgMHhiMDQ4NzdiNywgMHg3M2UxYWJjMiwgMHg4Zjk1NmJlNCwgMHhjY2UzZTA0NSwgMHhkZTFmMWYwOCwKLQkweGJlMDY1OTNjLCAweGQwMTAxZDNlLCAweGM4MzI2MmVmLCAweGVkZjNlMDAxLCAweDMxZWZiNzAyLCAweGY5NmFmNjNkLAotCTB4NjY3YTRhZmMsIDB4ZDg1ZmU1MjksIDB4NTczZTU1MmYsIDB4Y2ZjOGRhZjksIDB4M2JiNmU2YWQsIDB4ZGRmNzFlNjAsCi0JMHg0Yzc1YzM2OCwgMHgzZmRlZmVmZSwgMHgxNWU0YzdkZSwgMHhmZTRkZDdkZSwgMHgyMDQ5MDNmZSwgMHhjY2NjZjMxZiwKLQkweDZiODU0N2FmLCAweDgxZjk5OWE5LCAweGNkNTc5OGY1LCAweDZhZjUzOTBhLCAweGM3OTg2N2U2LCAweDVlZGU4YjQ2LAotCTB4YzcxMmQ4NzIsIDB4MjVlYjlkZmMsIDB4ZjEyYmZiYTQsIDB4YmIzZTBmNjcsIDB4NWFiY2ZlNGEsIDB4N2YxMmJhYmUsCi0JMHhmYjhiZTNhYSwgMHgwNjFjZmRmNSwgMHhkOWViOGUyMCwgMHg2Mzg1Mjc1ZiwgMHg3N2YxYzI4OCwgMHg1ZmEwY2Y4ZCwKLQkweDRmZTdmOWQ5LCAweDE0M2MwMGNjLCAweDBlNzRhM2VmLCAweDI0ZThkNWY0LCAweGU2NzM5MDIxLCAweDQ1NWJlZTAwLAotCTB4ZmQxN2EyNGQsIDB4YWNhMWNkNjUsIDB4M2U1YTlkZGIsIDB4YzUzZmZlNjYsIDB4OWU5MTNhMmYsIDB4MDI1OTc2OGEsCi0JMHhhMmZiNjlkMywgMHg0NjhmMWYzZCwgMHg2MTk1OGMzZiwgMHgzZmYyNGZmNCwgMHg3ZjY1ZjVjZiwgMHg4M2UwNjhkYiwKLQkweDQzZjMzMzIyLCAweDk5ODVjYTMyLCAweDc3M2ZhNjU2LCAweDgyY2ZiNWVjLCAweDJjMGQwOWY1LCAweGYwNTE0MGRlLAotCTB4YjlhMmM5MmUsIDB4OTU2Njk4YTcsIDB4MmY3ODdhZDQsIDB4MGM3NGE3ZTgsIDB4N2U2MTMxZWYsIDB4YWFlZTc3ZGEsCi0JMHg3NmM3NTFmZiwgMHg5YThhMjcyNiwgMHgyZGM0MDBhNSwgMHhkOWQ4NmEyOCwgMHg0NWE1ZmUwOSwgMHhmZjY4MmNjNywKLQkweDE0Zjg2ZjJhLCAweGJmMjdlN2ZkLCAweDJiZWQwM2I4LCAweGVlYTJjZGU1LCAweDNmODdhZDNlLCAweGIyMTg4MzVmLAotCTB4NTM1YTFmODAsIDB4ZDFmZmRlMjksIDB4MDdjYzA5ZmMsIDB4NzdkY2ZmYjksIDB4N2UyYjM3ZjQsIDB4M2YxZWZmNzEsCi0JMHg2ZmYxNjEwNSwgMHg3YzgxNzM5ZiwgMHhjZGJhZDczOSwgMHgwZDdkN2U4NSwgMHhkYjVmZWVkZiwgMHhiODJmN2ZjMywKLQkweGRkZWZmYjllLCAweGI5ZTA5YTcyLCAweGRlZmZiYTI2LCAweDMyODVmODM5LCAweGJkNTY4M2NhLCAweGU4NjkxZWZmLAotCTB4OWQyNWZhODMsIDB4OTQ2ZTU2NjcsIDB4ZmQ2ZThmZmIsIDB4NGYxN2M3N2MsIDB4Yzc3OWZmODMsIDB4ODY5ZTRmYWUsCi0JMHhlZGZjOTc3OSwgMHhhZmMxYTdiMywgMHhlMWIwMWM4OCwgMHhmY2ZlNTdiZSwgMHhhYmFmZTg3YiwgMHg2NTY0ZGJiNiwKLQkweGZkYjlkYTc0LCAweGVlNzdmNDM5LCAweDgxZTJjMGZjLCAweDlmZjczYWRlLCAweGIyZmYwMzRlLCAweDkyOTc5ZGNlLAotCTB4NmNiOTllYzAsIDB4ZWY2ODRkZmYsIDB4NzI3YmI2NWQsIDB4NmZiMjg5MzIsIDB4NmZkMDI5YTgsIDB4YWRmYzJhZTAsCi0JMHhkYzNiNzg4ZCwgMHg5ZmZkMTg3NCwgMHg4M2JjNTNjZSwgMHhjYmY2ZWMxYywgMHg3ZjMyOTYwYywgMHg2M2ZiODU1NywKLQkweDZmZjc0NjM2LCAweGQ5N2ZlMWVmLCAweDM3YWRmYjc0LCAweDYyNmZmYzgyLCAweGZkMTVlNGZhLCAweGY4YTVkZjMwLAotCTB4ZjAyYWZlYmMsIDB4NmRmZGM4ZDgsIDB4YWI3Y2I3ODMsIDB4Zjg3OWU2MWYsIDB4YzlhYmUyODUsIDB4OWEyZmM3ODAsCi0JMHgyOWZhZmYxNiwgMHhkM2VhNmIyOCwgMHhlODY2MWZhYiwgMHhmYWE3ZTAyYSwgMHhkZWFkZmJjZiwgMHg2ZmMwYWM1NywKLQkweGZlODM3ZWJiLCAweGU5YmY4MGFmLCAweDVmNDdlYzBhLCAweDgzZmJjMWE0LCAweDJlNzg1MjMzLCAweGZkZTEzZmVjLAotCTB4NTJiZjhjMTYsIDB4ZTQ3ZGZmYjQsIDB4ZWZkZGNlYTcsIDB4NzA5YTlkYTAsIDB4ZDI0ZWY2M2YsIDB4OGRmY2MzZmQsCi0JMHg3YWRlYmUwNSwgMHhlNGRmZjMyNywgMHg0ZWZmMDA3OCwgMHhiOWRmODVjNSwgMHg2YmEzMjcxZiwgMHgzN2IzYmZkNSwKLQkweGFjYWZjZWJmLCAweGZkNTZmZjRjLCAweGZmZWI0YmZhLCAweDIzMjRmZGNjLCAweDAxYjIxMzc4LCAweGY1YmUyNzVmLAotCTB4MDcwYTgyM2QsIDB4MTFjYjk3MzcsIDB4N2VlOGU1YmYsIDB4Y2I3ZWRkYjQsIDB4M2UwMWJjMDYsIDB4ZjZlYTlmNjEsCi0JMHhmZWY5YTY0YiwgMHhmMjRlZDA2MywgMHhmODNmMzQ3ZSwgMHhlZmU2M2FjZSwgMHhkZmU5MjlkYywgMHhjNGYwNDY4ZiwKLQkweDBkNTgyM2RmLCAweGFiODFjYmZlLCAweGQyYmU1ZmYzLCAweDljMmJiZTNhLCAweDM0NTI4MjRlLCAweDNhYmMyN2FlLAotCTB4ZGYyZThlYmUsIDB4M2ZjMjZkMTMsIDB4OTE2ZDVlZjYsIDB4OTMxZjdjNjAsIDB4N2YwNDRiNjAsIDB4Y2Y2ODEzOTAsCi0JMHhmMzdmM2VlYywgMHhmYjcwNzZmNSwgMHgyMmYzYzc3YiwgMHgwOWFlYmZmYSwgMHg2ZWY5NDYxZSwgMHgxMDY1MWY5NCwKLQkweDdjY2EyMzQ3LCAweGJlOThkOTg3LCAweGY2Y2NkNjVlLCAweGNlNWQ4ZThmLCAweGQzZjY4MzgwLCAweGQyMmY2ODcxLAotCTB4MDllMzU5NzUsIDB4N2JmYjRmZDksIDB4MzJiN2UxYmQsIDB4N2M2MmM3YmIsIDB4NDA0N2ZiMDQsIDB4MTc4ZTllYjMsCi0JMHg3ZTY2OGUwZSwgMHg2ZmRlY2NkYSwgMHgxZjFjNjcxYywgMHhmYTI1YmNhNywgMHg5ZjhkZTUzOCwgMHhmNjI5YzZlYSwKLQkweGUzYjc2NTA3LCAweDMzOWRlM2NhLCAweGZlODJlZjdiLCAweDNkMzJiNWNlLCAweDljNTA1Y2YxLCAweDU4N2RlZDE2LAotCTB4ZjdlMjRkOGEsIDB4YTUyY2Q1NjEsIDB4MjVjNjI4ZmIsIDB4MjQzOGIyNzEsIDB4ZjUwNjJiYTIsIDB4ZWNjZTY1Y2UsCi0JMHg5MDA5YjE2MywgMHg1NDA3ZThjYSwgMHgwZGZiODJiNSwgMHgwMjkzY2NmZCwgMHhmZTcyYWVmOCwgMHg1NzdjYzA5OCwKLQkweGY2MzU3YzAzLCAweDIzZWRjOTFmLCAweDI5NGFhZmEwLCAweDc3NjA5OWI5LCAweDM5MWRjYTMwLCAweDFhMDI0NGMxLAotCTB4NGU3MzJmN2MsIDB4NWVmMDU2NGIsIDB4ZjAxZmQ0MjQsIDB4YjRlMzNjNzksIDB4NjQ3ZWZkMDQsIDB4NjQ3ZDVmYjAsCi0JMHhlOTkyNmIyNiwgMHgwYmYyM2VmYywgMHg1ZmI0MTU5ZSwgMHgwM2M3ZjVmMiwgMHhmYjNkOWQ3MiwgMHg4N2JlZjM1NywKLQkweGE5YmQ5ZDQ0LCAweDBlM2UxMmNjLCAweDhhZjIxNWU3LCAweGM0MjNlZjBkLCAweGU3OGMzNjAzLCAweDBkYjRmZTUwLAotCTB4Zjc3ODdiZDcsIDB4ZGVhMmNmNTcsIDB4NjEwYjZiZmQsIDB4NTRmNDQzZjcsIDB4ZGNhNDcxMDMsIDB4YmJkMzhmYWMsCi0JMHgzZmZhN2FiZiwgMHhjNjg2YWY0MSwgMHhhN2ZjZmM3NCwgMHg0ZjM4N2Q2OSwgMHhmY2YxZGEzNCwgMHg3NjJiYjVkMywKLQkweGFmY2ZlYTM0LCAweGU0MDMzODNjLCAweGQxOWRiZTVhLCAweGM5OGJmZTYzLCAweDVmZGEyYTgxLCAweGI3Y2IyMjdiLAotCTB4ZjE4MDE4ZWYsIDB4Mzk3NzhhMDMsIDB4ZjBmMTFmZDEsIDB4NjBjYTk3ZWUsIDB4ZDE3Y2VhOWYsIDB4YTQwNjZlMGUsCi0JMHhmZmFlMTVmMywgMHgzYmM3ODZmZiwgMHhhZDE0OTVhYSwgMHgzMTIxNzI1ZiwgMHgyMDc3ZGEyYiwgMHhlNTY3OTBjNSwKLQkweDdmMDQ5ZWY4LCAweDgxMWYzOGIyLCAweDE2MzlhYjFkLCAweGJkNTA4ZmRmLCAweDc5Y2ZkNzU4LCAweDA3YmY3YzI5LAotCTB4OTdkZmQ4ZTksIDB4ZjUwOTliYmQsIDB4YWM2MDc5MDUsIDB4MWZmZjk2YTcsIDB4ZTViNzkzMWIsIDB4MTFjZWRhMTYsCi0JMHg4NzJlNWZhOSwgMHhiYWJlNThmMywgMHhhZDI3OTMyZiwgMHgyYWU3ZmY1OCwgMHg5ZWYyZjM5ZCwgMHhlYmZhYjJmZCwKLQkweGY1NzUwMzZkLCAweDNjNjVmNmQ0LCAweDdlOTE4OGRlLCAweDE2ZmRlNzFmLCAweDJjMzM3YzM3LCAweDI4OGQzYzVhLAotCTB4M2ZlZmM3ZjMsIDB4MDRkZjg4MTUsIDB4MWI0ZWNiN2EsIDB4Nzc4MjUxYzYsIDB4YmYwZmUwZjgsIDB4NWZmNzY2NDcsCi0JMHhjNjEwYWUyNSwgMHhlNWM3ZDkzMywgMHgwODRjNDk3MSwgMHhlNWY0YWJlMywgMHg5MGZhODBmMywgMHgxN2I2ZDYyNywKLQkweDJmYTVlZjAwLCAweGU3YzQwOGQ5LCAweGU5YzU3ZDI5LCAweGVlOTc3YzA1LCAweDU3ZmRhYWY5LCAweDY2ZWZlMDk5LAotCTB4ZTk1ZWJiNDcsIDB4NzQ4MmZmMmIsIDB4Y2QwOTZhNTAsIDB4M2I2NTc4YzUsIDB4OTllMjA0MmQsIDB4MjM3Y2VjNzUsCi0JMHg0M2I1ZjgwZCwgMHg3ZmM1YTUwYSwgMHg2OTVlYmRjYiwgMHg0Nzg4NjJkMCwgMHg1MmVmZTdlMCwgMHg3ZGUxODMwMywKLQkweGIzM2VmYWJkLCAweGQzMzkxN2E4LCAweGRlZjc2MzY1LCAweGJkZGU2Y2ZiLCAweDdkNzdlNDM2LCAweDk1NzM5ZWRjLAotCTB4ZWZiNDgzY2QsIDB4ZTg5NDhiYjQsIDB4OWI0ZGYxNzIsIDB4NjlkOTc3ZjQsIDB4YTNiOGU1YmIsIDB4MzdjNzNiYzcsCi0JMHg0OWU3M2U2MSwgMHgyMDE4MTI2YiwgMHgwZTNlYThjYiwgMHgyMWE4YmNmMiwgMHgwZmQ4M2ZiZCwgMHg3N2Q0ZDkwZSwKLQkweGVjMmM0YWVjLCAweDA1MjQ4NzQ3LCAweDA2ODdkOWNmLCAweGZiYjVmZDI4LCAweGFiNGE5OWNjLCAweGFlZDA5NjYyLAotCTB4ZGQ1NzY5ODMsIDB4MDk3ZDc5YTcsIDB4NjZkYTI3ZjgsIDB4MWY3YjkzNDUsIDB4OGYwOGVjZDksIDB4MWJjNWFiMjIsCi0JMHgwNzY0OWRlZCwgMHgwMmRlYWZkZiwgMHgxYjIyNDA2MywgMHgxZDQzZjgxNywgMHg0MDE0OTBmNywgMHg0NjI4YmMzOSwKLQkweDBmZjRmZDYxLCAweGI4YmRmMGM4LCAweDJkMjBlZjYxLCAweGQ1Y2QwYTFjLCAweDI5ZjI4ZjU4LCAweGQ0OTBiM2MyLAotCTB4ZjkxYTk5YzgsIDB4Yjg1NzhlYWQsIDB4ZjE5OGExZGMsIDB4M2ZmOWJhM2QsIDB4OGM1NWU5YmEsIDB4Yzg4ZDE5ZTAsCi0JMHg3NDcyNzg5YSwgMHhiMzNiNDVjNywgMHgyY2MwZWVmYSwgMHg3ZTAxNWFlNSwgMHg5Yjc1YzkzMiwgMHg2YTk1MjA0NSwKLQkweDEyMThmN2U0LCAweGQ1NDFkNGM0LCAweGFhYmYxNjJlLCAweDNjOWM4MDgyLCAweDgzNDcxZGQzLCAweGQ3ODExYTYwLAotCTB4ZmRmNzI4MDMsIDB4OTIxOTA4MDMsIDB4MTI4NmZhMGUsIDB4ZWZjMGQ2ZWIsIDB4ZjM4NWNkOTIsIDB4MDgyYjk4YjEsCi0JMHhkZGQzMTc5MywgMHg3ZTBhN2ZhMCwgMHhlOTRjYjkxZiwgMHg2MWIyYWFhOSwgMHg0MGY3OGIxMCwgMHgwZDdlZjBiYywKLQkweDNmM2E1ODU1LCAweDRiZjVmYjk3LCAweGQ1ZjkwN2EwLCAweDI3ZGY3MGI4LCAweDYyMGEyYTgxLCAweGJiNDUzMzcwLAotCTB4ZTJjMjI0ZWIsIDB4NDYzYmFkOTksIDB4YjQ4ZmU3YjQsIDB4ZmZhZjgxMTgsIDB4MDczMWNhMjAsIDB4Njk4NGZjODksCi0JMHhjODJhYzQxZSwgMHhiZmQ4YWFkYiwgMHg5Y2ZkYzM2NSwgMHhhMDQyNGRjMywgMHgyNDFkZGExZiwgMHg2M2E5YTc2NCwKLQkweDk2OWNmOWE0LCAweDM0OTk1ZGZmLCAweGY3NGJhMWFmLCAweDkxYjk3ZDA0LCAweDMzNWNhODJmLCAweGY4NDQxYjhjLAotCTB4MzczZjdlZDEsIDB4YTFiOWZiZjQsIDB4YWRiZmNmZGYsIDB4ZTU0ZTE1NWYsIDB4MTBlOTQxZDYsIDB4NjU3NTYwODcsCi0JMHg4ZDhkYzM5MCwgMHhhMzcwZTU2NywgMHg3MTBlMTlmMCwgMHhjNjI5ODhkNywgMHgxMWNkZWZjMywgMHgzNjdjMzFhZSwKLQkweGYxNGZhODE2LCAweDFkMjYyNzNhLCAweGQ4ZjNmNGUxLCAweGFmZjA2MTAzLCAweDA0YjUwOTI1LCAweDA0YWJjM2NlLAotCTB4YzkyMmZlMzUsIDB4MTFkYTY4NzUsIDB4NzBmOTE1YjcsIDB4NGU2NzFmM2QsIDB4ZjU3N2EzMGMsIDB4ZmFjZjdjMWQsCi0JMHhlOGVmYmMzNiwgMHg1YmQ2ZGY1MSwgMHhmNWU4OThmZCwgMHhjN2NkYmQ5ZCwgMHhkZjNlNzUxZSwgMHhiZDk0Y2U1NSwKLQkweDcwNWJmZWYyLCAweDZmMmRkYjVmLCAweGZhOTQxNGRjLCAweDYyNzNkYjc3LCAweDcxYTViZjY4LCAweGMzNmI3ZmVkLAotCTB4YjQ2ZjRjMmYsIDB4MmZlM2Q3ZjYsIDB4ZDI5NWU4MDYsIDB4ZmQ2MGNjNGYsIDB4N2JkZTIzNzcsIDB4N2NmOTk3YTMsCi0JMHg0OGVmMzQxZCwgMHg5YmJhZWJhNSwgMHg5ZWE1M2Y4ZiwgMHhiM2RmNzdkZCwgMHhlOGUzZDk4YywgMHhmNTBiY2ZmMSwKLQkweDc3ZmFmMGU3LCAweGFlZDFmMzViLCAweDg3ZTYyMjcwLCAweDllZTEyNzE4LCAweGRlMTdhNjVhLCAweGY3ODg5MGYzLAotCTB4MDhlMjNkYWIsIDB4N2Y5NDJmYzEsIDB4MDQyZTVkZWUsIDB4ZTJkMWU5NDIsIDB4ZTM3NzkxMjIsIDB4ZjhmM2ZmNjgsCi0JMHg0MzM4YzZmOCwgMHg1ZDRjYTIzZSwgMHgzMzhiNDYyNywgMHg3ZDRjZThjNCwgMHg1ZjhjNjU4NywgMHhmMmU0ODhiMCwKLQkweGVmZmE1MWY4LCAweDkzMzczNmVkLCAweDVjODBlNjg3LCAweDJmYjIzMjNkLCAweDNhNTIzN2Y5LCAweGQyOTI3ZDA2LAotCTB4ODk2N2RjMzEsIDB4NzEyZDNkZmMsIDB4ZmFiZmNjYzksIDB4M2M5ZDc4OGUsIDB4YjEyOGEwYmIsIDB4YzUzNmJmYjgsCi0JMHgyZTFiZTJlYiwgMHhjNzI0YWYxZCwgMHhmOWI1ZTQ2OSwgMHhiZjE3NWRhMiwgMHhhNGYyNGFhNSwgMHgyZTkyYmM4MCwKLQkweGNhMTQ0NzVlLCAweDNlYzVmMjU3LCAweDUzOTRkMTQ0LCAweDE5OTkxNDNkLCAweGVlNTEzNmRjLCAweDIwMDM5OGE0LAotCTB4NWNlZWNjZTcsIDB4NmM3YTBmOTIsIDB4YjU0ZmEzMWMsIDB4YTIzMDljYmUsIDB4OWI3YzZmNWIsIDB4MjYyYzdiZmUsCi0JMHhlOTZjZjkxMSwgMHhjNjE5MjUxMiwgMHhlYjczZGEwOSwgMHhjYWU4OTNlMSwgMHgzZDFjZjhmNiwgMHg4M2JmYzFlOSwKLQkweGQ2MGFiYmFkLCAweDNkNzNkZTlkLCAweDgzYzdiMjU1LCAweDc3NGU3M2ZhLCAweGNjMmIxYmJjLCAweGVmMjhiNDRmLAotCTB4ZGZiZjMwMmIsIDB4MmFlYzA0NGIsIDB4MzllM2UxM2QsIDB4YmJmMGEwMTMsIDB4N2U4N2U4MTAsIDB4ZjRlYzYyMjEsCi0JMHhjM2FmZThhMSwgMHgxMDc1ZTRmNSwgMHhmNWNhOTFjZiwgMHhlM2JlM2M1NSwgMHhmMWNmMWUyYSwgMHg3MzdmMWU2MSwKLQkweGE4ZjM4ZjBkLCAweGE5ZWFjZmMyLCAweGQ2ODIzOGM2LCAweGFiN2ZhY2MxLCAweGMxMjdlMzliLCAweDQzZTNlMWM0LAotCTB4NTI5YWM5N2QsIDB4MzY4NGY3ODEsIDB4ZTIwODQ1NzcsIDB4NzRmZTkxNzEsIDB4YmI2OTgwOWYsIDB4YjI3ZTExYWIsCi0JMHg5MjdkYTA5YiwgMHgwNWJjYzdkNiwgMHg2YTk1MzRmMiwgMHhjYzFlMjI0NywgMHg0ZjkyMGFlZSwgMHhmYmI2MWZjYiwKLQkweGQ5YjgwMmRlLCAweDQxYmM3ZDE0LCAweGMzNDBjYTRiLCAweDllMDFiMGJkLCAweGM5M2QzZDJhLCAweGE3MDI2MmU0LAotCTB4MTI3YzIzMjcsIDB4NTNkZjE2NjQsIDB4ZjRkZWEzYTUsIDB4Y2ZlZTJhYWEsIDB4ODNkMmE5YmIsIDB4MmI4ZjE1NjksCi0JMHg4NDcxMDU1NSwgMHg4ZjI5NGUyMCwgMHhjZmM4OTQyMywgMHg4ZTE0NTU4OSwgMHhiZTA5ZmRmMCwgMHg2NjU1NTY2ZiwKLQkweDlkYTY3OTYzLCAweGE2MDk1M2VkLCAweGMwMTI4MzhhLCAweGJiMzA5ZTI1LCAweGY0OWY4MjY3LCAweDU1Y2MyMmNmLAotCTB4ZmM1MjdlMTQsIDB4N2FiYzgxNDQsIDB4ZTdjMzU4OGYsIDB4NzQ0MWU5Y2QsIDB4ZTE3MTBkOWIsIDB4MmYwMDI3OTQsCi0JMHgyNjQ4NmYzNSwgMHg5NzE1ZTdiOCwgMHhkNjNlNGNkZiwgMHhjYjM4YjNkMCwgMHgzNDc2MDcxYiwgMHg2MDEzZTFkMSwKLQkweGUwMzlmYmZmLCAweDIzNjdjZTk1LCAweDU5YzYxNzlkLCAweDlhYjBmNGU1LCAweGE3MmQ3ZGUzLCAweGRlM2NmNTg3LAotCTB4NWQzODJmZTcsIDB4MGZkNzRhM2MsIDB4N2IwZjJhZjksIDB4MWE2MWIwMzcsIDB4Yzg0YjhiZjMsIDB4NjhiOGYxMzAsCi0JMHgzYmY1YTIyMSwgMHg4OTA0ZjM4YiwgMHgzYzg5ZDc0YywgMHg3MThhNjBhYSwgMHgwYjMxYzhlZiwgMHgyNDdkOGJkMiwKLQkweDdlNTA4YWYxLCAweDhiMDA4MWVjLCAweDBhOWI5OTYzLCAweDFhOWM2NmZiLCAweDEyODI3MmI3LCAweGI2MWYxYjM3LAotCTB4M2UzY2NjODYsIDB4MWRjZWM4OWMsIDB4M2RlMzUxYWQsIDB4NTkwZTc5NTYsIDB4ZGJkZWZjZTEsIDB4ZGNjZTBlN2MsCi0JMHhmNmJjNjA0MywgMHhkMjBlODg1MSwgMHg3YjNiOTdjNywgMHg2YTNiY2QzMSwgMHg3ZjRkZmVhOSwgMHhkYTVmMWVlYywKLQkweDVhZTdhMDZhLCAweDM3M2YwMTBiLCAweGJlN2Y5ZDA3LCAweGY3YjFhZjQ2LCAweGQ5MDgwNzYyLCAweGE5ZDhhNDdmLAotCTB4NDUwNzRiM2MsIDB4OTdmN2UyODMsIDB4MDA2YzgzYjUsIDB4MDU3MzBhNjcsIDB4YTQ5YjFkZWMsIDB4MDM5MDU0ZGMsCi0JMHhkYmEyZTI5YiwgMHg0Y2VjNjI2ZCwgMHg4ZTY1NzY1ZiwgMHg4ZDc1ZDFkMCwgMHhlZTc2YzVlNCwgMHhmNDc0NjMwOSwKLQkweDRmZTVjMzVmLCAweGRkMWM5NGZjLCAweDdjZGU1NTc3LCAweDBiZmFjMzFlLCAweDMwOTk3ZGRhLCAweDk5OGJhNGFmLAotCTB4YjcwOWJmYzgsIDB4NTUzZjk3NDUsIDB4Mzg4N2VjOTIsIDB4OThhMzU1MDAsIDB4OTRjZmYzYmMsIDB4NDNkNTllOTksCi0JMHg3NTM5MzA5ZSwgMHhmOGYwOGM4MSwgMHg4NjQ2NzQzNSwgMHhiZjA3ZDQxMywgMHhlMmViMjk5YywgMHgzZTAzYWUxOSwKLQkweDYzNzEwNjE5LCAweDAyYWZmZDE5LCAweDM4YTlhMDdlLCAweDg5ZmE0NjU4LCAweGYzYzI2ZTlmLCAweDVmY2UxYWVhLAotCTB4ZGE3ZTczMGYsIDB4MTFlOWY5YzAsIDB4YzQwYjIzZTAsIDB4Njc3YzY1OWYsIDB4YjBlMTllMjYsIDB4NThiOTU0OWYsCi0JMHhmZTAxMmRkYywgMHhjNTU0OWI0ZiwgMHg3MTg3OTgyYywgMHgwNDU5OGY4ZSwgMHgzMmE4OWZiOCwgMHg0MzE3NTM3YiwKLQkweDU5ZTJkNmJlLCAweGUzMWU2MGE5LCAweGVkNmJmYjAxLCAweGRmN2YzNDRhLCAweDJjZTI3ZDkwLCAweDZjZDc4NTNiLAotCTB4NmFjN2JmOGUsIDB4YWNmZTIyYzcsIDB4YWMwMTRmNmUsIDB4YzE4OGVjY2IsIDB4NTBkNTdkZjMsIDB4NzNiNDQxNmIsCi0JMHhiMzNiNzRjMiwgMHgyZjc4NTA4ZiwgMHg0Y2ZhN2U4NCwgMHg4NzNlZTljYiwgMHg2NmExOTk4MSwgMHhmZGMyMTY2NiwKLQkweDFkMDc3ODMxLCAweGVkY2E3ZTg1LCAweGZkMjE4ZjRjLCAweDQ2YjA2NGZkLCAweDM4ZjBkNDBlLCAweDkzZjE0NDcxLAotCTB4YjA3OTFhZTEsIDB4MDI1NGM4NzIsIDB4NzI5ZTllNzYsIDB4YjgzOTE3YTAsIDB4MmFjMWM5OGQsIDB4MDYyZmVmODEsCi0JMHhmOGYxNTZiYywgMHgzNDFjYWFkYiwgMHhjNGEzNWUwMywgMHg0ZDdkNWFkNywgMHhiZTdkZWViNiwgMHhiMWI4ZTVjNCwKLQkweDNiM2IzYWRlLCAweDllMjFhZDM3LCAweDU5ZTg0ZmIwLCAweDBlYjRlMTRlLCAweDNmZDkxNGUwLCAweGEwZTNiYTczLAotCTB4M2FjYTIwZmQsIDB4MGNlZmYyOGMsIDB4NTMyMDgzZWMsIDB4MzM4YzNlY2MsIDB4OWU1NjQ4YjIsIDB4ZTU3MjBmMTgsCi0JMHg0Y2JmOThkZiwgMHgzYTgyN2E2ZiwgMHg0MmM1ZmU1ZSwgMHgyZWYyNjdkYywgMHhiZmZkYzc4ZSwgMHgyMTNjNzZhMCwKLQkweDJiMDJhZTcwLCAweGY2OWRlNmJkLCAweDc1M2ZjZGU5LCAweGQ3NGVkZTAxLCAweGNkZDNmYmYyLCAweDU3ZmMwMDUyLAotCTB4MmVhZWQ3NGUsIDB4NGRiNTdjYzMsIDB4ZmM0YzljMDEsIDB4ODgyZTAzZTUsIDB4NjllOGIyY2IsIDB4Y2Y1M2VmMTEsCi0JMHhkMGQzZjhjNCwgMHhjYmViZWZmZiwgMHg3ZjhkNDU5NywgMHhiNWJhOGFjNCwgMHgxNjlmMjA2OSwgMHhlZjhiNWQ2ZCwKLQkweDdiYzRjZWVjLCAweGYyNmFlNjg3LCAweGJkNDE1MzI0LCAweDk2ZDM4ZDUwLCAweDBiYzU4Y2Y3LCAweGZiNmY1ZGZhLAotCTB4ZThlNmRlNTIsIDB4ZjgyYWZkZTcsIDB4Y2E1YWY0MTUsIDB4MWViN2EwMmYsIDB4NDM4NGU1NzQsIDB4N2U2N2ZmMTQsCi0JMHhiMjdkNDM2OSwgMHg0Mjc3ZjY0YSwgMHgxZGFiNmFiZSwgMHhmOGFhOTA1YSwgMHgxZTNmZjFlOCwgMHgwYmI0ZGZiNiwKLQkweDc2YzNjN2U0LCAweDg5NDgzZWVmLCAweGVkNGJjNTgzLCAweGY4ZWEzZTZkLCAweDg1NmI2MGVkLCAweDc4YTdiNzdiLAotCTB4YTc4YTE0MWMsIDB4MWJiYjNhOTksIDB4ZTc2Yjc3YmIsIDB4ZWQ2MjE0NzYsIDB4OTc4NjNjYTUsIDB4YmI5NGJkMmIsCi0JMHg3MTBjOWY5OCwgMHhlNzU3MmY0NywgMHgxZjlmOTY3MywgMHgwN2I1NmQxNywgMHgwM2QxNDY1NiwgMHg4NGY3ZjExNiwKLQkweDg2N2RmODhiLCAweGJiNjcyZjRhLCAweDY3NDYyZGY1LCAweDE3MjVmZjZhLCAweDYyZjQ2NWFmLCAweGI5ZTE0YmEwLAotCTB4OWY4NzQ4NTEsIDB4N2Y3MDkxMWQsIDB4MTFiYjllMTEsIDB4NWQ5NGI0ZTMsIDB4MTJmZDYxYjQsIDB4ZjgyOGYzZDEsCi0JMHg0NWI3OTM3NywgMHhkZWZiZDNhNCwgMHg1OWY3ODcxOCwgMHg5MDc4ODYxZCwgMHgwOWU5ODNhMiwgMHhiMTc3OWE2YSwKLQkweGU2OWZhNzU4LCAweGIwY2ExNjA1LCAweDJjNWRlNzlmLCAweGY2MGM3NDYzLCAweDkzOTgzODY3LCAweDY4OWI1ZTZmLAotCTB4MDM5NmY0ZTYsIDB4YjRkZDJmZWQsIDB4NmZjYmQ2OTIsIDB4MjY0ZWY0NjMsIDB4YmVkMGNiZjgsIDB4M2NmNzY3NTgsCi0JMHg4YTBlNDUxYywgMHgzNzE3NDUwZSwgMHg4NGFkYmYzNCwgMHg0OWY4NzNiNSwgMHg3ZmZlZTY4MiwgMHg5ZThiOGYxMSwKLQkweDQ1YzU5MTdmLCAweDQ5M2Y2ZTI0LCAweGYyZTczYTAxLCAweGZhOWY0MjI5LCAweDI2MWRiNWY4LCAweDdhZTMyZjg2LAotCTB4MTMzYWY4MTMsIDB4NDM3YmQ3YmEsIDB4M2VmZGViMmYsIDB4MGZkNzJmNWIsIDB4MWJjNmRiZjIsIDB4ZjFhYmY1ZDYsCi0JMHg1OTE1ZDZkMSwgMHg1ZmFjMDRjZiwgMHg5NzBkZTNjMiwgMHhkNWRlMTg5OCwgMHg0YzFkMWJmMiwgMHg3YjY5YWIwZSwKLQkweGE1ZTIyY2U1LCAweDhmMjE1MWZiLCAweGI4MTc5OGFiLCAweGNmM2UwNjRmLCAweDJmMTcxY2RiLCAweDVmOTlkNjY4LAotCTB4YTdlNzQ3M2IsIDB4MWYzYjU3OTIsIDB4NmZlNTcwZTMsIDB4ZDAyZjJmOWUsIDB4OWUzNzU1ZjAsIDB4NmJhZjI5ZmMsCi0JMHg4NmUzNzRmMSwgMHgzYTU3NTMzZSwgMHhiZGNhMWY2MCwgMHgzZWUzMDFkNiwgMHg2NWY3M2E1YiwgMHhiYzMyZmQwMiwKLQkweGEzZmQ5MTlkLCAweGRkMGU1MDJiLCAweGNlZjY4YWU3LCAweGRiYzA0NmU1LCAweDM4N2NlZDM4LCAweGM5ZmIwNmRlLAotCTB4YTM3YmVkNDgsIDB4NThlM2QxOGIsIDB4YmUyYjZmYjYsIDB4ZGJiYmVlMWYsIDB4NDQ1MTY0OWYsIDB4ZDEzNzk3N2EsCi0JMHhlMzg0NjlmMSwgMHg1OWJmMGUyYywgMHg4ZTFjNzBkZCwgMHg4NjU3NTQ3ZSwgMHg3ZjNhNzVlMywgMHhjOGUxNWVhOSwKLQkweDQ5YzJhZmYxLCAweGIwZjU0ZWZkLCAweDE4NDQ4ZTk5LCAweDU3ZjdiMDk3LCAweDBhYWZlM2I1LCAweDI3ZjE5MTdlLAotCTB4YTFkZWZhZjAsIDB4YTJmYzgyNGYsIDB4ZjRmODEyZjIsIDB4MWYzZmIzZWMsIDB4YjBmNzZkYWQsIDB4MzBiZGUyN2QsCi0JMHhiYWJlYTkwZSwgMHhkODNmYjU3YiwgMHhkZjUwNzk3ZCwgMHgwNDczYzkzZiwgMHhhZGZlNmJjZSwgMHhhZThhYTdhMiwKLQkweGE5ZjYzMGJiLCAweDU2YWUxMGNlLCAweGFlYWRkZmJmLCAweDc2MGUxODZjLCAweDIwY2FhYWQ2LCAweDQwYmI1NGE2LAotCTB4OGE2YThiYmQsIDB4Njg1ZmQwMWUsIDB4NzhiNDZmMTUsIDB4YmMzOWViNTQsIDB4MzJiNjU3NTcsIDB4NGZkNTkxM2IsCi0JMHgyNDBmNjBkYywgMHg5OWM5MmY4YywgMHgzMzM3NjhiMSwgMHg4MzdhZjQzYiwgMHg2MGRjZjkyYywgMHg3YmY5OTNhNywKLQkweDViZWNjOTY3LCAweGU3MDk5ZTk3LCAweGJmMGM4NGUwLCAweDFkNmJiZTA2LCAweDQzNjJmZmNjLCAweGY4M2Y1MmNhLAotCTB4M2VjMTU5ZWQsIDB4MjJlZDA4MzksIDB4ODE3Njc0MTcsIDB4OWM4YmNkNTcsIDB4ZjBkNGVlOTQsIDB4ZjU4MzMxYTMsCi0JMHg5MDQyNTJlNSwgMHgyNDZlMWRhMCwgMHg0NzlkYWVmZCwgMHgyZWNlYWI0MiwgMHhkOThiODQ2YSwgMHgxMmZiYzJlYSwKLQkweDJlZjZlMTMzLCAweGVmZjUwZjBlLCAweDcyZTVhYzY0LCAweGNkZGI4NmI4LCAweDE5N2IwNzFlLCAweGJiNGFkZjg1LAotCTB4MzVhM2Y3MGIsIDB4MzlkODk4ZDcsIDB4ZjNjNjZhYzMsIDB4NDBmMWI4MzUsIDB4OGZkNjM5N2QsIDB4N2FjMWIwZWIsCi0JMHg0M2YzZDA0NCwgMHhlNDQyNzc5OCwgMHg3YjQzMTExYSwgMHgyMzhmOTAwOSwgMHgzZWY5MDA4YSwgMHhmNDA2YjQyNCwKLQkweDZkODlhZWQ2LCAweGQ5ZjdjM2Y3LCAweGUwMWQ1ZjM2LCAweGQ2ZDRjYmY3LCAweDRmZDgwMmUzLCAweDAwYzM3ZDczLAotCTB4M2ZhMmI1Y2UsIDB4N2ZmNWExNDMsIDB4YTAzMzg2MmQsIDB4M2EyZDFhNWUsIDB4NmJkMmNmMTYsIDB4YTdkYWFmYzAsCi0JMHhmMTYxOTdiOSwgMHhiMTc5MjM0MCwgMHhlNTlhZmU2NywgMHhjNTNkYzM2NiwgMHhlNWI0YzNkNywgMHgyZDk0NmNmYiwKLQkweDdiZmNmNWM2LCAweDBiMWYwOTI5LCAweDc0YjZlZjI4LCAweGYxNzNjOWRiLCAweDhlNTFkMDdkLCAweGEwMGZhNDRmLAotCTB4YmY2YzIzYWYsIDB4NjI1NjYwYmUsIDB4NGRmZDk5ZTMsIDB4Njc2NzU1NzksIDB4NmFhZjJhYjYsIDB4ZjNmMzMzYzYsCi0JMHg1N2E1M2Q1MCwgMHg3NGFiYTdiMCwgMHgzNWVjZDgzMiwgMHhhOTBkM2QwMSwgMHg3NGI1ZGZhNiwgMHg4MzJmNDUxMSwKLQkweDcyZjcwNjcxLCAweDBmY2VhMTFmLCAweDNjMDAwN2RlLCAweDZjNTk4YmM1LCAweGM1ZDAzMWJmLCAweDI1ZmI2ZWJlLAotCTB4YjMyYTdiZmIsIDB4YWYzM2MyNTUsIDB4YTIzOGY5NjIsIDB4ZDFmYzYwZmUsIDB4ZTNlZGJhMGYsIDB4Y2RkZTU4YWIsCi0JMHhkODBiZTU3MiwgMHgwNWExZGM3ZCwgMHhhNmQ3ZThiMSwgMHhjYjc2NjNjZSwgMHhjM2QwNTZkYSwgMHgyZWE0Yjc2NiwKLQkweGQ5OTlmYjg0LCAweDBhZmVlYmQ2LCAweDdjMjkzZWU5LCAweGUyNzIwZWM4LCAweGU3OWUyY2E3LCAweDJhYmRlZmRkLAotCTB4ZmJiYTY5ZDksIDB4ZGVmOGFkZGQsIDB4Y2ZkZjM0ZmEsIDB4MDRiMDkyZTYsIDB4YjcxMWY3ZjgsIDB4MDFlYmVjY2MsCi0JMHhjNDA1ZDNlNCwgMHgwOTQxZjNjMywgMHg4NGY3YmRjZSwgMHg0MmRlNzcwMiwgMHgxYWJlZjc3MywgMHg2MjhlMDViOCwKLQkweDVmODQ4ZjczLCAweDgyZjk3NDAzLCAweGMzNjhhOWVlLCAweDdiMzVkYjU2LCAweGQ2Nzk2NzVlLCAweDY2ZmQ3YmFlLAotCTB4YjIyN2FlMmIsIDB4NWZhZTJiNWUsIDB4ZjY0NDFmNWQsIDB4YjhlZWYyYzQsIDB4OTEyZTJjYzAsIDB4MGI0OThmMGEsCi0JMHhkYjY3YmFkOSwgMHg3Yzk4ZmNlNywgMHhkYjM5ZGU4YiwgMHhjY2FmZWEzYSwgMHhjN2NkODg3ZiwgMHhhMWNmOWYwOCwKLQkweDRlYzVjYTg4LCAweGE0ZTRkNzg3LCAweGUxZDBmZmViLCAweDVlYjQ5ZDE1LCAweDY2OWMzNTg5LCAweDYyZmM4ODFlLAotCTB4ZTg5OTdjODEsIDB4YWU4OTI2YmIsIDB4ZGYwMGZjZmYsIDB4NDM4MDQ0YjAsIDB4ZDJhYjlmNmIsIDB4ZjRlNGRmMmYsCi0JMHhlZmE3MjZmZCwgMHhlM2JiZDMzNywgMHgxZWEwMjcxOCwgMHhhZTAyNGY3ZCwgMHhiM2E3MDY2YiwgMHg0N2RmYmIzNSwKLQkweDZmZjNjYzNmLCAweGE1NGI3OGIwLCAweDgzZWI3MmEyLCAweDQ5MTMzNzY4LCAweDZhYWMzOGI0LCAweGRmYjcyNmZhLAotCTB4MGU5NTRlMjgsIDB4MGRjZTNjMDMsIDB4NGQxOTk3ZTMsIDB4OWZiYmY0NzYsIDB4ZjRlYTI5OTEsIDB4MDI5OTE5ZjAsCi0JMHgxZDZiODdmNywgMHgyZjRlODc3ZCwgMHhkMmY1YzU1ZCwgMHhmZjgwZmQ5ZSwgMHg4NTlmYjE4MSwgMHgzOWUzMjdjYiwKLQkweDllZWM4ZjZjLCAweGZmZGZmMjA4LCAweDg1YjNhMzM0LCAweDI5M2MyODUzLCAweDEzYWNlNWRkLCAweGZjNzBkZWYwLAotCTB4ZjIwMjM2YTksIDB4MWM0ZDYxNzAsIDB4ODVmM2ZiODEsIDB4MjBmYmZjMGYsIDB4ZDY1MGM3ODgsIDB4ODFiNzM0YWEsCi0JMHgxZTA4MGM5YywgMHg4YjI1YmZiMCwgMHg0NjdlMzI0YiwgMHgxMGU5YjVlNywgMHhiZjIxODdkYiwgMHhmMGU5ZTYwNCwKLQkweDNkOGQwZTJhLCAweGM4YWE0M2JhLCAweGRmNWQwMzcwLCAweDNjODJmMGViLCAweGY3ODc3Zjk4LCAweDZmZTc4YzAzLAotCTB4N2IwNDFkMGUsIDB4Zjk5ZWJhYjcsIDB4MDBkOTI4ZjcsIDB4OWI0MWY5ZmYsIDB4MzEyYjUzMTcsIDB4MzZiOTUwYzcsCi0JMHg5MGFjNGNkZiwgMHg2Y2M0Y2IyNiwgMHg3M2NiN2M4MywgMHgxZTRiYjA1ZiwgMHgxOGU0ZWViNiwgMHhkZmRmNjU2MiwKLQkweDcyZjQwNGI4LCAweDViYWM4MzVkLCAweDNlYTBhOGY3LCAweDNlYjM3ZDdmLCAweGU3ZDIxMTlmLCAweGU3ZDExZWM3LAotCTB4NDMxYTgzYjcsIDB4ZmZjMzk1ZjEsIDB4ZmRhMWQ0Y2UsIDB4ODc3ZjAyMTYsIDB4MGI0NWY4YTYsIDB4MGNiZWIzZmEsCi0JMHgwNWZhMDA3YiwgMHg0ZGRlNTBkYSwgMHg4MmM5NmUyZSwgMHg1ZTRmZDZmYiwgMHg5Y2UwOWE3MCwgMHhkZjliZWZiZiwKLQkweDc4NmQ3ZGUyLCAweGM5ZTMxZDg3LCAweDBjNTNmYzFmLCAweGMwN2YwMTg5LCAweGExNWI2ZDE3LCAweDA0ZTI5OGJjLAotCTB4MmZjNTc3ZWMsIDB4MGVjMGVhZGEsIDB4N2E4NDY3YjIsIDB4NWZhMDBkMWUsIDB4MzFiZjllYzUsIDB4NzZmMGY5YmYsCi0JMHg2ZmVlMDA0YiwgMHhkY2ZiZDkzZiwgMHg5ZjZmNDAwYiwgMHhmYTg3ZWY2YywgMHhkZjgyY2JjZSwgMHhkN2Y5ZmQwNCwKLQkweGM0ZTY3YzMzLCAweDI3MmQ3ZGIwLCAweGRlMzNkMjg2LCAweDc1Y2ZlYmJiLCAweDFjOTkzYmY3LCAweDFlNmNhZjY5LAotCTB4NGU1OWZiMDEsIDB4YjQ3ZmIzM2MsIDB4MDExYzFlNTcsIDB4OGYwZTVjZmIsIDB4NDllYWFlNDMsIDB4YmM3ZTNjMzksCi0JMHgyNzRmZWE5YiwgMHhlNTE0MzlkOSwgMHgwZmNlNzBjMiwgMHhiMjA1ODE3OSwgMHhkNWZhMDFkNywgMHg1MzkwMTg4YSwKLQkweDc5ZTU2NzVkLCAweGFjMzU4ZmUwLCAweDE1NDcwZjU2LCAweGY0MDZkN2NmLCAweDdjZjkyYmRmLCAweGY3Y2QxMDE2LAotCTB4NTZmN2I4NzQsIDB4YmQwMGE0ZDYsIDB4YmVhMjQzM2QsIDB4ZjljMzVjN2IsIDB4NjVlN2Y5ZTgsIDB4ZjIyZmJjZjUsCi0JMHhkMTQ0NjhmOCwgMHhjODhhY2ZiYywgMHgxZmFjYjI3MywgMHhiZTAwMjVmOCwgMHgxN2JlNDYwNiwgMHhmYjU1YzYxYiwKLQkweGZmZmJjYTlmLCAweDkyZmNjYWNjLCAweGNlMWMzODEzLCAweDdkNDExZTU1LCAweGFkZGY1YmEwLCAweDY4YTc3YWY0LAotCTB4MDdiNTc5ZjIsIDB4ZmMyM2U2OTMsIDB4ZDAyZDI2MGUsIDB4MWZiNmYzOWUsIDB4ZmUwMzlhNGUsIDB4ZmM2NjBkMzYsCi0JMHhiMzI1NTNiYiwgMHgyNzI0N2Q5ZiwgMHg0MThiYmUwMSwgMHgwMzk0Mjc5OCwgMHhhZjgyM2IxYywgMHhkNTFlYTBiOSwKLQkweGZkNjhjNzY3LCAweDZmNmJmMjU3LCAweGVjZDE0ZWYyLCAweGNlOTVkZmQ3LCAweGJiNjVlM2JiLCAweGNhNWU1YzE5LAotCTB4MTZmZGJkY2UsIDB4YTJjZGJiYTAsIDB4MDcxNWFhMDcsIDB4MTQ3OWJjZWYsIDB4ODRiMzdiYzAsIDB4NzY0YjcyZWYsCi0JMHhiZGI3MTg0YSwgMHhiNDA2ZWViYywgMHhiZTM3MTQ1MywgMHhmZmUzMTUzMywgMHgwM2RmMzkzZCwgMHg5MzMyY2FmMywKLQkweDlhMGM3MTVjLCAweGY0ODBlZTE4LCAweDhjNmVjYjRjLCAweDYxZmM1N2FmLCAweDYwNTY2YzhkLCAweGEzYmE3YWJlLAotCTB4YTNmMDhjNzQsIDB4NmRkNjU0MWEsIDB4MTVkZTUzYzAsIDB4N2VhYjNmZTgsIDB4MzBiN2UyMzcsIDB4YzQ2ZjZmYTAsCi0JMHgxYmE3MmI1MywgMHg4YjVjMzNmYSwgMHgzZWJkNjM2ZiwgMHg4ZWY4ZmRkMywgMHg5NTM5NjRiMiwgMHg1NDNiMWE2MywKLQkweGY0NmFhOWM5LCAweDAzOGUzM2Q3LCAweGEzNDRkYTM3LCAweDc3MDNlY2E3LCAweDFkYWZlMDFiLCAweGZlODM2ZmNjLAotCTB4ZWUyY2Q2MDgsIDB4ZTU4ODNhZDcsIDB4ZDAyMDBlMzEsIDB4MDQ3ZmFjMTUsIDB4M2JjMGEyOTksIDB4MzRjOGRiY2MsCi0JMHhkMWI5NTU0OCwgMHgwZDFjMWQ5MSwgMHhkYTE2NWZmNSwgMHhmNjE1ZmQ5ZSwgMHhlZDdlNDRlNywgMHgyZTMwODc3MCwKLQkweDNlZmU1ZjYyLCAweDc5NjE0M2I1LCAweGE4M2FlZmY1LCAweDM2MmQ0NWU1LCAweGU0ZjhmM2Y0LCAweDcxZjI4Y2JjLAotCTB4NDE5N2Y4MDUsIDB4MjY2YzE3ZmQsIDB4M2ViZmRkMTMsIDB4MTI2N2Q5ZDksIDB4MDQ3NjJkZjgsIDB4NzNkY2JjNTksCi0JMHhlNDkzM2VjMSwgMHg4ZDc3ZDk2ZiwgMHgwZmRkNDE3MiwgMHg3NGFmYzA0ZiwgMHhlOWMyZmNkZiwgMHg0YjdlYzMwZCwKLQkweGNlYmYzMTU2LCAweDE5MTUzZWU0LCAweGE0ZjA1MTE1LCAweDJiOTA0YmI2LCAweDEyM2NlMDMyLCAweGQ5ZTFkN2JlLAotCTB4YTdmMjcwOGEsIDB4YzE3MjNlYzMsIDB4ODFmNjgyOTcsIDB4MTIxZWRjZjksIDB4MDZmZGNlZWYsIDB4YmFkMjc1ZmEsCi0JMHhmZTJmZmE1ZSwgMHhlODE1Yjg4OCwgMHg3M2QxNjNlYiwgMHhlNDUwN2JiZiwgMHhhNjUxNmY5ZSwgMHg5MGYzZGYwZiwKLQkweGI0NWNlYzU1LCAweDY2NDI0Y2QwLCAweDg0MmVlZmFhLCAweGU2MzQ2M2ZkLCAweGI4NWJiZjcxLCAweGE2ZmY0MDU5LAotCTB4ZWJmNDFiNDUsIDB4ZGFhZDc4ODEsIDB4NDA1MDg3YmYsIDB4MjJkZmIxYWEsIDB4NjBiNGM0MTIsIDB4MTBiY2JlYjMsCi0JMHhmODE3MjNmNiwgMHhmYzdiYjA2NywgMHhiOTdkN2FhMiwgMHhhNGE4NGVmYSwgMHgxYTI1YjJmMSwgMHhlYTIwYmVkYywKLQkweDJlYzliY2ZhLCAweGIzNmUxNzlhLCAweGRiZWVmY2UyLCAweDM1ZWVjYjE0LCAweDdkODVlMjY0LCAweDg5YzliYzMwLAotCTB4Zjg5OGJjNzIsIDB4YmUzZjNiZDgsIDB4MzAzZjk2MGYsIDB4ZDI4OGJiZGYsIDB4ODVmMmQ3NjcsIDB4MzA3ZDQ1ZGUsCi0JMHg3ZDgxMDc3ZSwgMHhmODk1YjE2ZiwgMHgxZTU4NjM1ZCwgMHgwYjIwMTdlMiwgMHgzOGIyOWYyMSwgMHhlZDRlYjA1MSwKLQkweDI5ZTI5NjNiLCAweDE1YzAzNDI0LCAweDUzYWMyZjU5LCAweDY1ZGU0ZTViLCAweDExNmUyY2Y4LCAweGJkNjBhMzQyLAotCTB4NjQ0MjdlZjAsIDB4MmJkNmQ1ZWIsIDB4NjkyODcwZTEsIDB4MTFlY2U4YjQsIDB4MGE3ZmUwYTUsIDB4OTc0ZDMzN2UsCi0JMHhiOTdlYmEyZCwgMHg4ZmRkMWYzZiwgMHg2OWUyOGQ4OSwgMHgwZGRjYjc1MywgMHg0ZmNkMWI1YywgMHhkNzg3MzhmZSwKLQkweDUyZjMzYmE2LCAweDA1MWYzZjgxLCAweDA3MmZiMzNkLCAweDE3M2QzNjY4LCAweDYxY2M5MDgzLCAweDcxZDJiNzgwLAotCTB4ZTc3NmM2NjIsIDB4MjU2YjNjYjEsIDB4NjQ3ZDRmY2IsIDB4NTFlOTBmZTAsIDB4MWJjZWZlMWIsIDB4MTQyYzZmZGUsCi0JMHhmNzg3NWY3MywgMHg3ZGI5Y2Y1NywgMHg3MWQxNzYzZiwgMHg2OWJjOWExNiwgMHhlZjUzZTQ2NiwgMHg1Y2Q3ZjQ1MCwKLQkweGM0ZmZkNmNlLCAweDJiNmI4YTk4LCAweDU1N2I5Y2EyLCAweDA0MmUzZTdjLCAweGJmZDFiZWYxLCAweGNlYWJlZDk3LAotCTB4N2RhNGIwY2MsIDB4YzVjOGI0NWYsIDB4YTFlYzRmZTQsIDB4MTA3NzdjMzYsIDB4YmJlMDJkZGUsIDB4MTM4NTI3YzcsCi0JMHhjOWYwMmVmOCwgMHhjZTA0MjkxZiwgMHg2ZjE0MjllNSwgMHgxNDlmMWYyMCwgMHhiZjg4MmFjOCwgMHg3MzM0ZDk5NSwKLQkweGJmODA2YmM5LCAweGEzZDQxOGNjLCAweDhhMjY5YjRhLCAweDNmNWMwZWE1LCAweDE1ZWNhM2QzLCAweDk5ZWY3MDc1LAotCTB4MThmODZmM2MsIDB4ZWViYTZiYTAsIDB4ZmYwMWI3NzksIDB4NWI4NDE0YmIsIDB4NDFkMTgzYWEsIDB4ZmE3ZjRhY2EsCi0JMHg3ZTMwOTFkMiwgMHg4MGQ3OTJlZSwgMHhlMGM1NDZlZiwgMHgwYTY0ZDkzYiwgMHhhNjNjNjcyYiwgMHg0YTJmNDBlYiwKLQkweDQxMDcxOTIxLCAweDU3NGNhNzhlLCAweDc3MmQ4MGM2LCAweDkzOGQ4YjkzLCAweGNkZTcxMjY4LCAweDBjNmRmZDA0LAotCTB4MjQzZmM3Y2IsIDB4NzEyMmI3NzgsIDB4MjU3NWM0NmQsIDB4MzY5ZmQ4NWIsIDB4N2ZhMGVmODIsIDB4ODA0ZWMxNWEsCi0JMHhlNzg2MDFlNSwgMHgzMDE5MTVjOSwgMHg5NjIwZjI3ZSwgMHhmNDIxYzgyNiwgMHg4ZGRhM2E1MywgMHhjZGVhMWY3NywKLQkweGU1MDRkY2NiLCAweDEzNGJiMmYyLCAweGZiNjllMzkzLCAweGMwZjQxZGEzLCAweGQxZDVlNTRjLCAweDFkOWVhYWZlLAotCTB4NDM5ZTgwNzIsIDB4ZjU2NzBmMDYsIDB4MmNiMTVlYjksIDB4MjdlNWY5ODMsIDB4MTBmYWE5YTQsIDB4NzkyNWQ3YWIsCi0JMHhmYzgyYzc2MywgMHhkYmU5ODc3YywgMHhiMWJjM2I5ZiwgMHg4Mzc3MzdlMCwgMHhiODBmZGQxYywgMHhmY2E5ZTM4NiwKLQkweDM0MDQ5ZGEyLCAweGQ2N2NiZmYyLCAweGE0ZGVmODk3LCAweGY3NGJhMmZjLCAweDY5YzllMjFkLCAweDBhNGI0OWZkLAotCTB4ZTNkYzYxMGUsIDB4N2U4YWQyNTIsIDB4YmQ0MWE1YzksIDB4MzEwZGViZmYsIDB4ZTk1NWM3ZDEsIDB4NDhhMmZjYmMsCi0JMHg5NWM3NTFmYywgMHhmNjJmZGZmNSwgMHhkMTNlZmUyMSwgMHhiZmU5MjVlYSwgMHhmOWY0MTQ1ZiwgMHgzZDc4YWZlNiwKLQkweGQ5Mjc3ZTMzLCAweGM3MzgyZTZkLCAweDA3N2Q4NzRkLCAweGU0YzA0OWU0LCAweGUwOGZhZTk3LCAweGE2ZGRkM2E1LAotCTB4MTUzYTZmZGIsIDB4NzFlMmVmOTYsIDB4YjU3MmQ1NzUsIDB4MzI1OWNlZmYsIDB4YzYxMzlmN2YsIDB4YTkyYTNhNzEsCi0JMHg3OWYwYTI0MCwgMHhiNDUzZTVhYSwgMHgxY2I0OTZhMywgMHg3NGE4Zjg0NCwgMHg5ZDkzODExMSwgMHg0YTcwMzVmOCwKLQkweDk5MGQ2YWFhLCAweGZlZmY4ZjI4LCAweDQ3NmI0NTkxLCAweDcyNTE0YjVlLCAweDNmYjNmMzg4LCAweGYyOTdhZDZmLAotCTB4MmZjNDEyNmYsIDB4M2RiN2YwZDcsIDB4NTFkZjliYjMsIDB4ODkzMjZjY2MsIDB4YmY5OWRlZGMsIDB4NGQwNGNhNzYsCi0JMHg2ZWVmZDc5ZSwgMHgyMWY4MmZlZiwgMHg2NDhlNjc5NCwgMHhhNDdiZGZlZCwgMHgwNzJiNzdmMCwgMHg1ZDEzZTQ0NywKLQkweDUzYWU1YTQ3LCAweGYyMWFiNzkzLCAweGE1MWY5YTBlLCAweGU1MGRiYmM5LCAweDE0ZjI4NjA5LCAweGFiM2ZiZTQzLAotCTB4YTUwY2UxZGYsIDB4ZGE0MjFlODksIDB4MjFmZDI5MWUsIDB4OGViOTVkZmMsIDB4ODg1Y2QwZDQsIDB4YWM0MWIwMzgsCi0JMHhkZGZjMjFmOCwgMHhmNjRjZDJjOSwgMHg1YWNiMTQ3NywgMHhiMzczMGYwNCwgMHhmMzJiZjA2MiwgMHg4NzMwN2JiMCwKLQkweDM4NWU0ZGE3LCAweGZhZDBlMDEyLCAweDkyODNjODNhLCAweGZhMGRjMTY2LCAweDMzYjgyM2JlLCAweGE3Njg3OTg0LAotCTB4ZDkwNWRhNjgsIDB4ZTA5MmFkM2IsIDB4NmJkNzZjMDksIDB4Yzg0ZGMzZmYsIDB4M2YwZjBmY2YsIDB4ZTRhZWY1ODksCi0JMHhlYmE2NDRlZiwgMHhmMzdiZTBmZCwgMHg3Yzk4NzRiMywgMHg1M2RmNjExNywgMHhlYzc3MGNlMywgMHg3N2YyM2Y3YywKLQkweGNlZjdlOGVkLCAweDk0NjFlZjU0LCAweGFhZjc4NmE3LCAweDQ3MWYzMGU1LCAweDM4NTQ1Zjg0LCAweDAyZmMzYzNlLAotCTB4ZjNmYzVkYzYsIDB4NDBmNzk2YTgsIDB4ZmIyZmIwMGQsIDB4OTVlODA1NzQsIDB4MWU5ZTk2MWYsIDB4YzQxNjdhMDcsCi0JMHhlM2ZkODQ2ZSwgMHgyZDcwMjE3MSwgMHgxMTRmNDdlYywgMHhlZTMwYjVkZiwgMHgwZTQzYTViZCwgMHgzOTk0OWZjMiwKLQkweDgxNmRiNTJlLCAweDFlYzMxMDUwLCAweDNmZjA4ZjVkLCAweDAwMWI2Y2VlLCAweGRhZTg5MjdmLCAweDRmOTYxYWQ4LAotCTB4MTAwOGMzNmMsIDB4ZmQzNzYyNmIsIDB4MzlmYjRjZDAsIDB4ODA2ZGEwM2UsIDB4YzU0N2U2ODksIDB4NDNlNTY2MWUsCi0JMHhmZTQwYjZkYSwgMHhiMGRmZDhjZSwgMHgwMzZkNTFmMiwgMHgxZDFjMzc0NCwgMHhkYjdmMTExYSwgMHgzZWY5ZDFkYywKLQkweDFiYzk5NjJkLCAweDA2NDM3ZTc1LCAweDQxNjM1MzdiLCAweGZiNjEyYThmLCAweGI0ODczYzBlLCAweGI3M2FiOTUyLAotCTB4NmQ4ZWRjZTgsIDB4ZmY3MzFlMTQsIDB4NmVmMjhlZDUsIDB4M2ZlZGM3NWIsIDB4M2ZiMWZhNjYsIDB4OTJhMGZjMTcsCi0JMHg1ZjcxYmMzOSwgMHg0NjZlZjk0NCwgMHhmNjE1MjFiZCwgMHgzZTA4ZjhjMiwgMHgwYWFkNjk5ZCwgMHgyYTIzMWJlZSwKLQkweDkwNWU4Mjc2LCAweGVlMjQ3NzNjLCAweGVmNGU5ZDFiLCAweDkxNzFkOGRhLCAweDlhMDQ4YmY0LCAweDhkYWM3OWQyLAotCTB4MmVmOTMzNzUsIDB4NWIzZGYwOWEsIDB4ZDQ0ZTgzZjIsIDB4ZjFlNTFlOWYsIDB4MjFkZjI5YmEsIDB4NWUzODM4N2QsCi0JMHg4Y2Y1ZjJjNiwgMHhhMWU3NjU4ZCwgMHhkODRkZDc0NCwgMHhhZjVjZGRjZiwgMHhkODFmNTlhZCwgMHhmZmYwYTM2ZSwKLQkweGRlMGU3YTkzLCAweDM5ZTRmNGM4LCAweGM0ZWU1NDc1LCAweDM3ODE3ZjgyLCAweDFjYzllNDE1LCAweDhjOGYwN2IwLAotCTB4YmZiZDU1ZTQsIDB4MWRlNjgzMjYsIDB4Y2Q1OGYzOTEsIDB4MzZhYTZmNGMsIDB4MWQ0ZDc4MmUsIDB4NTVlNTU3MmIsCi0JMHhhZjZiM2E0ZCwgMHg1NWM5NWJlZSwgMHg4ZmM5M2UwYywgMHhkNjE1YmI1ZSwgMHhmZjMzMzc2MSwgMHg4NmIzYzU4MSwKLQkweDdhODE1ZDZlLCAweDVmMzg2ZGMwLCAweGMyYTZmNWUyLCAweGUxNTRmY2I5LCAweGEzZTgxMzQwLCAweDBkYTY3ZTJhLAotCTB4ZWI4MmRlZjYsIDB4MmEzOGY3ZTEsIDB4ZDdmMWQ0OWUsIDB4MTQyZjc1ZjIsIDB4ZjYwMTFlYTksIDB4ZTEwZmI3NzQsCi0JMHhkMThhZjU0OSwgMHhlOTlkNzJlYywgMHg1YWU5NmIxNSwgMHg3YzJhMWYwMSwgMHgxYzZkYjk4OSwgMHgwNDVmZmY3YywKLQkweDBjZmZhNWE3LCAweDdlZGRmZDM4LCAweGJjN2JkM2RjLCAweGZkMDM1OWM3LCAweGFkM2YyZTk3LCAweGUxYzM4ZjdmLAotCTB4OTIxMGI4ZmUsIDB4ZjEzNTMzOTIsIDB4Mzg3N2U4NTMsIDB4ZjJlYWRlNzcsIDB4NzM1NjIyZmQsIDB4YzFmNzM1YmYsCi0JMHhkNTNmZDQ1MiwgMHhlNWZmZDhmNSwgMHg5MTc3NjlhNSwgMHhkNDY5ZmM5ZSwgMHhjOWZmOGYwZiwgMHgwMmVjMDFiYSwKLQkweGNhMjBlNWM3LCAweDI2M2ZlM2UzLCAweDM4ZTQyZWY4LCAweGVhYTU2NzhmLCAweDVhZmY1OWI3LCAweDZkY2UxNDdjLAotCTB4MjIyYjExZmYsIDB4N2E1NGQ4N2QsIDB4ZTY3NzcyMTAsIDB4YTdhZWY4NTEsIDB4M2JiYzM5ZGIsIDB4ZDQ2NGZkNTcsCi0JMHhjNzg2YmFmZCwgMHhlMDc5YWRhMSwgMHhkMWFmN2MzYSwgMHgzY2YwZGE0NSwgMHgyODI2Y2ZlZSwgMHg2N2NiYmIzZiwKLQkweDRhNzJjNTBmLCAweGM4MWI3ZTI3LCAweDhjMThjMjg5LCAweDQxOTM1ZmM3LCAweGNkNDk3ZGYwLCAweDBlNTgxMWVjLAotCTB4YzdmNDU4ZTcsIDB4NzFjNTZkOTksIDB4M2EzMjY2NmEsIDB4NDc4YzI5YWMsIDB4NWRjODIxN2IsIDB4NzQ2ZjViODAsCi0JMHhlY2M1NTQ5NCwgMHgxZGVjYzQxZiwgMHg3ZjFmYmRhZCwgMHhmOWY5OTYyZiwgMHg3NmRiMzNkYiwgMHhlZDdhMGZiZiwKLQkweGI1ZWExYjA2LCAweDU3YmM0MjgwLCAweGYxYzY0ZWE5LCAweDhmZWMzZDI4LCAweGNkOTdmZGM1LCAweGE5NjNlMTYzLAotCTB4NWM3MTg3ODEsIDB4ZDYwM2RhMGYsIDB4NTFmM2JkM2EsIDB4YWVjY2ZkY2UsIDB4ZGIzN2ZjYzAsIDB4MThlYjNhYzgsCi0JMHg1NTkwZTYzOCwgMHg3Y2Y5MmYyOCwgMHhlODEzZjU0OCwgMHhlYjhmMzE1NywgMHg1YzE1MWY4OSwgMHg3MjFlODI3MCwKLQkweDFlZGJiNjM0LCAweGY5ZjM4NWUwLCAweDE3Y2FjMjAyLCAweDAxM2Y2NDNjLCAweDBmMDVhYmU3LCAweDY0Yjc3OGIxLAotCTB4ZmQ1ZTRkZGQsIDB4NmI5ZDA5M2QsIDB4ZjlkM2Q4MTIsIDB4MDlkODZkNGYsIDB4M2I0MWYwNzAsIDB4MWZmZmY0MTcsCi0JMHhlNDFmNzg0ZSwgMHhjM2JkODg3YiwgMHg3ZWRhN2UyNSwgMHg0N2ZkYTQ3OCwgMHg5NzYwZjdjMCwgMHg0OWZjZDkxNywKLQkweDE2ODk1ZGE1LCAweDU4YTNmNGU3LCAweGZkNTM5N2VlLCAweDllM2I1Nzg0LCAweDVmYjE4ZTNhLCAweDAzNmM4ZTdhLAotCTB4MGY3MGEzN2UsIDB4ZjBhODNiYzEsIDB4NTlkZmQ4Y2YsIDB4NDEzN2NlMzAsIDB4NDZjMmZmMGUsIDB4OGE1NmU3Y2IsCi0JMHgzYzI5MmI3MSwgMHhiODlkY2I3ZCwgMHhmM2JlNzU1ZSwgMHhhMjM3YzM5MiwgMHg3ZmQwYzI5ZCwgMHgwYjJjYmRiYiwKLQkweDc5ZWFlN2VjLCAweDM5YTQzYzg4LCAweGU0NWMyMWZmLCAweGY4ODQ1ZTQ4LCAweDU3M2M2MTAxLCAweGNmY2VmOGY1LAotCTB4Mjg3M2M2Y2QsIDB4NjhiMzdmMjEsIDB4MmJiZjc1ZWIsIDB4ZmNjMzA0NTAsIDB4ODIyOTVkMzksIDB4ZTNlNmYwMTksCi0JMHgxY2IyZmVmNywgMHhlYjcyMGI5ZSwgMHg1MGViMDJmZiwgMHg4MDAwNTg5ZSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3YzBiLCAweDczYjlmODk5LCAweDMzMzJiY2VmLCAweDQ5MzI0Y2M5LAotCTB4OWI4ZjIxMjYsIDB4ODA0MDIxMDcsIDB4NTIwMjRjNDksIDB4MTg3ODQzMWYsIDB4YTQwNzZiMzUsIDB4NDM4YjViMTYsCi0JMHg5MjExMjNjMiwgMHhiMTc1YjY4OSwgMHg1MTAwY2I2NSwgMHg4ZDA0MjIwOCwgMHg0MTM4MGFiYywgMHhiYjZiYmE1MCwKLQkweDA2MDIyMmMxLCAweGI2YTJkMTFhLCAweDZlYjQyZmVhLCAweGZkZmVlZDU3LCAweDU4Zjg4ODQ1LCAweDE2NTQ0NjQ5LAotCTB4ZWZmZmFkNWIsIDB4OTliOWNlZmIsIDB4NTE0NDkzYjksIDB4NjdmNGRkYmIsIDB4NzM5ZWU3MmYsIDB4NzdjZWY5Y2YsCi0JMHhjZWY5ZjdiZSwgMHhlOTlhMTYxOSwgMHhmNDY2MmRlYiwgMHhmYzNlNzlmNywgMHgzMzU3N2Y4NywgMHgzMDM0ZTg5NiwKLQkweDdjZDhjYTk2LCAweDk2NzczNTk5LCAweGViNDdkZjQ0LCAweDZkNjdhYTI1LCAweDM0OTY3ZDViLCAweDBiYmMwMmM2LAotCTB4NjZmNTM2ZTYsIDB4NjA3ZGExZmIsIDB4Njk0ZGY5YjksIDB4ZWI4OGJjMjIsIDB4NjMzMGIxOWYsIDB4YjU2ZDhjMTUsCi0JMHg5OTM1OTBiMiwgMHhmNDEyNmRiMSwgMHhiYmNmMGU1MywgMHg3OTM1ZTE2YywgMHgyMzU4MGQ4YywgMHhjNjAyYjA4ZiwKLQkweDU5YWZjNzgyLCAweDFiZmJlZjgwLCAweDRkMDY1NDEyLCAweDA4NTg5ODc2LCAweDhlZTNhMWNiLCAweDU3NmMzZWYwLAotCTB4NjRjNDViZDQsIDB4N2MxODA3YTgsIDB4MjRiZTc4NmUsIDB4MGQyNDg0NzcsIDB4NWU5YWM2MDgsIDB4ODdhY2Y3OTIsCi0JMHhhZTQ3ZmQ3NiwgMHhiMmFjZmRlNSwgMHg0MWNhMGNhOSwgMHhiOGMxMzZhOCwgMHg1NzVmZDBjMSwgMHhhNGM2NDRiMiwKLQkweGZmMWExNjM5LCAweDZjMjkyMWNjLCAweDY2YzNmYWM2LCAweDg1ZTBkM2U2LCAweGJmZTFmYWZmLCAweDJmMTgzMmZhLAotCTB4MjcxOTA4NmMsIDB4MTAyYjEzYzEsIDB4ODIzNmMzOGUsIDB4NDBkYTY2MDMsIDB4ODEzZjdkZTMsIDB4OWJmMTg3YWQsCi0JMHgwMGNmOTIwYywgMHg4ZGI3NGRmNSwgMHhmMGUxYWYwYiwgMHg2N2UwMTg1OCwgMHhjOWFkMDA5OSwgMHhlODI0NWFjMCwKLQkweGI1ZTA1MzJmLCAweGU4YmE3MGM5LCAweGE3NWUxMjhlLCAweGY4YTViYjQwLCAweDNkZGE5NTBmLCAweGNiOWMwMTJiLAotCTB4NjQ3YTFiMmMsIDB4ZTEzOTkzODAsIDB4MGRiZmE4M2YsIDB4ZWJhMmYzZWIsIDB4YmZlMWI0ZDAsIDB4MzQ3OWMzM2YsCi0JMHgyZGI4MDQxZCwgMHgzZDk3Yjg1MSwgMHg2ZGM3OWZhNiwgMHgyN2FkMTRjYywgMHg3ZWI0NDNiOCwgMHgyZjhlNzJiNiwKLQkweDQ3ODU4MzM2LCAweDUxMGViYzAzLCAweDg0Zjc1NWI2LCAweGYyYzdjNDY1LCAweDY1Y2NlY2U5LCAweGVmNDRmNGQwLAotCTB4ZWIxZGJmMmMsIDB4M2MyZDU5M2IsIDB4NWYzMGVmODMsIDB4ZGE5ZWUwMTgsIDB4MjhjY2YxZDUsIDB4ZWVhYWVmNjgsCi0JMHgwNmU5YzZjOSwgMHhhMGIxZmY5NywgMHgzYWU4YjJlZiwgMHhkZTVlNzA2YiwgMHg3NjY2NTliNSwgMHgwM2JlOGYxYSwKLQkweGVjMDc3YzUwLCAweDljZWM2ZWQ0LCAweGQ1Y2ZiMTA5LCAweDQxYWE1ZGY0LCAweGViYzcxNWJlLCAweDg4MTk1N2M1LAotCTB4MDQ4NjVmMWMsIDB4Yzg2OTZjZTMsIDB4ZGFiYWUwMzcsIDB4YjAwNTc4MTQsIDB4YjMxYjZhMmUsIDB4ZDllMTE1NjcsCi0JMHhjMWM3MzQ1NywgMHhlYzg5ODNkOCwgMHhkM2UxM2Y1NiwgMHhmZTg3ZTk1YiwgMHgyZDU2NzUxZSwgMHhlOTdmNDI3NCwKLQkweDlkNWJhYWFlLCAweGJmMWM3Y2E5LCAweDAyOWZhNzAzLCAweDZiYTUwZDQwLCAweDQ3ZTFhOWVkLCAweGQwNWU5NzZiLAotCTB4MWY2Y2RhNWMsIDB4YzRkYjlkYjksIDB4OWVkOTE2ZjEsIDB4ZjA4M2RlMTQsIDB4MTc5NTEyMjgsIDB4YjFkOGRlZmYsCi0JMHg4ODUzZTA5ZSwgMHg5NWQ4ZWU2ZSwgMHhlYmY4NDYxNywgMHhlOTA5OWI1OSwgMHg5YjBiMTk3YywgMHg1YjE3OGU5MCwKLQkweGU4MTEyODU4LCAweDRiMzQzMTYyLCAweDZkOTJlNzgyLCAweGFjYzZhNjY2LCAweDVmNTg0MzVmLCAweGFlMWNlZDY2LAotCTB4ZDNmNzRhNjUsIDB4NGRkMjIyNTIsIDB4NzRiM2Y1MGYsIDB4YjJkZGJlYmYsIDB4MDFkYmFjMTksIDB4ZDYxNjhkZjUsCi0JMHhhNzY3YzM2ZCwgMHg0NTg5YmViZSwgMHhlMWUwOGUwOCwgMHhmZWJhY2RjZiwgMHhjM2FkMWI1OSwgMHhjODYzMmI3NiwKLQkweGJlNjU0OWE3LCAweGZlMDFiYmJjLCAweGVmNDYwYmM4LCAweGI3Y2ZhMDFlLCAweDc4NjhiYWM0LCAweDM1NTY3NjQ4LAotCTB4NjQxMzllMjAsIDB4YjIzM2NkMDMsIDB4MDNkZTE2Y2EsIDB4YjAzM2VjZjMsIDB4NGRlNzVjN2EsIDB4MWNlYjc2MmUsCi0JMHg2NGFmZjY3OCwgMHhhMTIzNDJiZSwgMHg3N2FlMjI2MywgMHgxZmQ3M2UzYywgMHg3ZDIzZDZiNSwgMHgxM2Y5NDE2YywKLQkweDM4MzczZjQzLCAweDVlZTc4NDhkLCAweGJlNDdhYjEzLCAweGZkMGQ1Y2E5LCAweGE2YTVjOGM1LCAweGZjMDFlYzliLAotCTB4OTcyNjk3NmUsIDB4YzQ2ZjlkNjAsIDB4YTg2YjY2NzUsIDB4OWU5MWVkOGMsIDB4NGZlMzJlMTIsIDB4ODNiZGJiZWQsCi0JMHhhN2YzMzdlZCwgMHg0YjdiZjljMiwgMHhhZTA3NDI0MywgMHgwY2VlOTQ1MywgMHhjNGFlZTg4YywgMHhmN2MwMGE2ZiwKLQkweDU4M2M4NTQ3LCAweDM4ZmRmOTYwLCAweDQwYTNmN2E0LCAweGExZjdjODA4LCAweDBiOTcyYjRlLCAweDcyZmU3MzhhLAotCTB4YTc3ZDFmMjgsIDB4NDU1ZWJiYzQsIDB4ZTI3MmUwZmEsIDB4ZDgxMmY3ZTgsIDB4ZjlmMjE4NmEsIDB4ZGVmNWZlZjcsCi0JMHhmY2ZlYTE5NywgMHgwY2Q1MjYzYiwgMHg0NjkxMGJmNSwgMHg0YThmM2Q2MCwgMHg4NWUzODdjYywgMHhmNzg3MzA5ZSwKLQkweGMwNjViYmMxLCAweGIyY2YwOGI2LCAweDI4YzIxM2UzLCAweDAyOTkwZWRmLCAweDM4ZTExN2RiLCAweGZiYmQxYjhmLAotCTB4ODk2NWJiZTAsIDB4NDIzYzVmZTEsIDB4YTA1ZTE5ZjUsIDB4OTE5NGY2NDQsIDB4ODhlODYxZDMsIDB4MTA5ZjdmOGQsCi0JMHhiOTVmYjdmZSwgMHgxYmRkM2ViMSwgMHhhYzdiZjY4MiwgMHgwN2M4MTM4MSwgMHgwOTM1NjY5OSwgMHg5N2JmNjVmYiwKLQkweGJiYTcxZjE5LCAweDNiZjgwNWM4LCAweDgyNGFmMzhkLCAweDM4NDk1NDI3LCAweGZhODM5NzRlLCAweDU4Y2FmZTAxLAotCTB4Njk5Y2ZkMDQsIDB4ODBmOWE3NGQsIDB4MzhlMWY0ZGMsIDB4Zjc5YTM2NjcsIDB4MzJkY2RjYTAsIDB4ZWQ0NGFlMzgsCi0JMHhiM2ZkMWI0ZiwgMHhmYTdjYTAzMiwgMHgyYWVmNTI4OSwgMHg5YmYwMWFhOCwgMHg3ZjQwNGRiYSwgMHg1ZjRiNGRjMSwKLQkweGVhMTdhMDY0LCAweGM0NmVlYTBjLCAweGEzNmUzYjBmLCAweDExZWI2ODc5LCAweDA2YTRiOGRjLCAweGFkYjc4M2ViLAotCTB4ZGFlNTAxYjgsIDB4NzI4OWZjNDgsIDB4YmJjOGM1OWEsIDB4NDFjOTE2N2UsIDB4OWY1MWRmZmEsIDB4ZmE4ZGQ5ZGYsCi0JMHg1N2FjNmJhMCwgMHgyYzBmNWFhNiwgMHg5Mzg3ZDAzZSwgMHg3MjMzZWRiNywgMHgxOThlNDZmYywgMHhiNTJmNGY4OSwKLQkweGE1MGJhNDdmLCAweDFjMGZlYjkyLCAweDk0ZjIwODI3LCAweGYyNDJmYzY5LCAweDBmMmNhNjM0LCAweDE4ZWJlNjU3LAotCTB4ZmM0ZTlhM2MsIDB4ZGIzZjVmMWYsIDB4ZjkwOGY4MTEsIDB4ZmZmZWU5YTcsIDB4OGFiOTYzNzksIDB4OWU0ODQ1ZTMsCi0JMHhlMjU0YjZiMSwgMHhkYmJiODAzMywgMHg2ZGY3ZGYwMiwgMHhlNTVmMTA3NywgMHhmNzBmNTBhZSwgMHg3NDFlYmFlMiwKLQkweDMzNWQzY2QxLCAweGNiMDNiMjdjLCAweDNjYThmMzNiLCAweDFjNmRjODU1LCAweGUyYzZmNTE2LCAweGNhZjQ4YzI5LAotCTB4NThiNTk5NjIsIDB4ZDE3ZGU4Y2EsIDB4ZjY3ZjY4NzYsIDB4Y2Y1YTZjODksIDB4Y2ViNjY2YzUsIDB4MzZjZTdjMDIsCi0JMHhkYjNmZmE3MCwgMHhmMDBhNzIwMSwgMHgyNWVlNjc1MywgMHg0ZGZlY2IzOSwgMHhiNTE4ZmI2MiwgMHhjYjc2YzE2YiwKLQkweGIyOGM5MDYwLCAweGI5NDM3OGExLCAweDM4NWJjM2E1LCAweDdmZmEwY2E2LCAweGU5MDc2NzZhLCAweDhhNzIwNjAxLAotCTB4OWEwNWQ4YzUsIDB4YTRmOTQzMWMsIDB4Y2RmZDllZmIsIDB4NDg2M2M3YWMsIDB4YzdjNGI3OTMsIDB4ZDlmNGE5MzAsCi0JMHgyOGYyYTIxMywgMHg3MmNmZTlkOSwgMHgzMGExNjA1NSwgMHg1Njc3ZjExZCwgMHgwNGU5ZGMwZSwgMHg4NTg0YjZmOSwKLQkweGIwMzYzZTQ4LCAweGUzNmE3YTZlLCAweDcyZTViYzgxLCAweDJlZTVjMmQ3LCAweDQxMmUxMzNlLCAweDNhYzZkZWZlLAotCTB4YTIzNjZlNDksIDB4ZWU0ZTFhNDQsIDB4M2JiOTAwYWUsIDB4Y2JiOTY0NzEsIDB4ZTIyOTczNTgsIDB4ZGQ4Yjc4MzUsCi0JMHgyMjFlNzg4YiwgMHhkNzdjODU3ZiwgMHhjNGRkMzFkNiwgMHgxNWQ0ZjBlNSwgMHg0NDk1OTk2MSwgMHhlODlhOTBmMSwKLQkweDExNWE5NjliLCAweDU3YzFhYmQ1LCAweDEyNzUxNjJkLCAweDFmMmNmZDk2LCAweGRhNjNhZGU1LCAweDdkNDFhN2JmLAotCTB4OTQzZTYxNTAsIDB4ZTYxZWI2OWIsIDB4YmJmNzgwZWIsIDB4ZjNmNWZkODQsIDB4ZjFmYTk1MzQsIDB4MTg1ZDM4OTgsCi0JMHg4NTJiM2YxNSwgMHg5ZWFhY2FmYSwgMHg0OWYyMDM2ZSwgMHhiY2EyNzMyYSwgMHhmZWYwZjQ3NywgMHhiYmUwMzk3NywKLQkweGNiOGVmYzMyLCAweDJkZWZjMWNkLCAweGU2MjEyNWFjLCAweDU2YTNhYWZiLCAweDQ3MGJhM2EyLCAweGU5MzM2MTFjLAotCTB4MGJhZTQwYzMsIDB4YjNmYjRiZmEsIDB4ZmVhNGVjOTksIDB4ZjM5MjBlYTMsIDB4YWYzNjQ2ZmQsIDB4ZDFiYmRhMTMsCi0JMHhiY2Y1YTIxZSwgMHhhZWZiZmE4NywgMHgyMTllOGYyYiwgMHgyMThhMzU1NiwgMHg4ZGQ3NGFlZCwgMHhlY2Q2NTY0MiwKLQkweDllYmNjNjgzLCAweDFlZGY0ODliLCAweGM3YzhhYjMwLCAweDc3YmQ1YzE3LCAweDYzYzYxOTYyLCAweGVkYmYyNzI4LAotCTB4ZjA1ZGE5NTIsIDB4OWZkMmY0ZTAsIDB4ZGZhMGZiYzIsIDB4MGRkOGU1ZWUsIDB4OThiZDIyOTQsIDB4NjRkZDFmZTUsCi0JMHgyNTliNzU4MSwgMHgwNWRjODhhZiwgMHhkYjY2MzY3MCwgMHg2Nzg3Mjg5ZCwgMHg5ZmQ3ZmVlNCwgMHhiYmYyODY2ZSwKLQkweDhjY2M4ZDA3LCAweGZhNmZiZWViLCAweGIyM2Y5NjNjLCAweDFiMDg2ODljLCAweGQwYzZmNzRmLCAweGZhZmRkMmViLAotCTB4YmVhNzYzNzIsIDB4MmZhYzNjMWMsIDB4Yjg3MmUxZGYsIDB4ZGUyNzhlY2YsIDB4ZjQwZTdlZjQsIDB4YmYzNzM2NjQsCi0JMHg5YWYwMDFkMywgMHhkYzkzMzI5ZiwgMHhmODE1ZGViYywgMHgyNmU3YTQ2NywgMHhlMjI0ZTQ0MywgMHhmZWZiOWNkMSwKLQkweDczYWUwMGM0LCAweDNlMTIwN2Q3LCAweDNkMjY0MGNkLCAweGM4YmYxYzI1LCAweDBiYWMxNzU3LCAweGQ4YzM5ZDcyLAotCTB4ODU3YjUxZWIsIDB4NDc4NDBjNTksIDB4NTEzZDA2YjAsIDB4MjBlNDEwZjksIDB4ZGVmOTVmMDEsIDB4YmZlNjFhN2QsCi0JMHg3MzgyNGU3OCwgMHhkNWYxYmQzNSwgMHhiZGEyNTQ1NCwgMHhlMGIyMzA0MiwgMHg0NWRmNmJiNiwgMHgzNWRhMWViYiwKLQkweDBkOTg5YzkwLCAweGZhYWUwMGVkLCAweDJmNmU1YzZkLCAweGM4ODkzZDYzLCAweGQ3NjA0ZDBmLCAweDdmMDk2MDU4LAotCTB4YjFmNGUyZTcsIDB4ZDk1MjI1YjQsIDB4NGY2Y2ZmMGQsIDB4NzA4YjFlYWUsIDB4N2UyOTlmMmEsIDB4ZDhiNWZmNWMsCi0JMHhmNjFkOGM2ZiwgMHgxZGZiOGI5MCwgMHhkYjViZjc0YiwgMHhhMWY4NjJmYSwgMHgyYmE1ZDNiMSwgMHhiNDY3MGYwNywKLQkweDVkZTJjNWY1LCAweDI1NTMzZmYwLCAweGI2ZGVkNjI1LCAweGI5MGYwMjFiLCAweDdiMGY5MTUyLCAweGZjNjBkMzRkLAotCTB4ODhmYjNmYWIsIDB4ZTU5MmY3ZjQsIDB4MGE5ZDkwY2YsIDB4ZWRjMDU4ZjMsIDB4NzI4YWFiMzYsIDB4NGY1ZGM5NzUsCi0JMHgyZmNkN2JkMywgMHgyNzZkOWIzOCwgMHhlZDk5ZTBiZiwgMHg5OTc2NWU2NiwgMHgxNzc2N2NhOCwgMHg3NDk2NWJmNywKLQkweGE3OWM2MTRhLCAweGNhNjJlNzM0LCAweGJiYTc5NDM0LCAweDFiMzM0ZThjLCAweDNjNzhkNzhhLCAweDNmZjNiZGJlLAotCTB4ZjU0YzE5MTMsIDB4ZmEzYTQyNmQsIDB4MWJiNzEyMTMsIDB4NjQ4OWNkOWMsIDB4ODljZGFhOWYsIDB4YjcwNTFmNjgsCi0JMHhjYTJlZjM1ZCwgMHg2NGJiMjVhOSwgMHg3NjM1ZWEyZiwgMHhjZDFkZTFjYywgMHhlYzczM2NiMCwgMHhmM2Y2M2IyMiwKLQkweDgwMzRjYTYxLCAweDRjZjc3ZGEzLCAweDY1ZWY0Y2E3LCAweDQ4ZjkxODdmLCAweDBkNWNmNWYxLCAweDkzZGQ5NWVmLAotCTB4NjdiN2U0NTUsIDB4OTdmODcxNzcsIDB4MjA4ZjJjYjgsIDB4OTlmZDVkMWQsIDB4NjJiMjc2NGMsIDB4Y2ZiNDAxNjAsCi0JMHhiMWJlNGRkYSwgMHhjZWVhYjdjOCwgMHg3ZDcwYjM3ZCwgMHg2OTlkOWVkZSwgMHg5NGJmZjZhMCwgMHhlMmYxMTM5OCwKLQkweGVmODY5ZTVhLCAweDFmOGE0ODk3LCAweDViN2ViNGY5LCAweDdlYWM0ZDQzLCAweDEzMjVkNWJlLCAweDVkY2I0ZGJmLAotCTB4Mjc2YmQ2OTEsIDB4ZjUwOWJhYmUsIDB4ZTAyZWUzNTUsIDB4Y2U3ZjFjMjMsIDB4ZDliYTdmZWIsIDB4NjkyYmU1MWQsCi0JMHhhNjFiYjZjZSwgMHgxYThmZmY2MiwgMHg4Mzc3YzhiZCwgMHgzZmU3Nzc3YSwgMHg1ZmUxN2QxMSwgMHg2ZGNhMjU3NywKLQkweGNhNmZhZjhlLCAweGM2OWI2NjY3LCAweDI4NDVjZDI3LCAweDZlYWM5NzNmLCAweDYzMGU3MjJlLCAweGM5ZjIwZmNmLAotCTB4NmY5N2NlNGUsIDB4YjdlZTI0YjksIDB4ZWNlYjI1NjYsIDB4MDBmYzkxZGQsIDB4ODdjMWIxN2IsIDB4OTk3OGI3ZjgsCi0JMHhkMzNjMWY2ZiwgMHg3ZjQzMGRjMSwgMHhhMTU5MjEyZiwgMHgxMzY0ODRmYSwgMHhlNGY5NDllMSwgMHhhOTJmZmQ4ZSwKLQkweDNlMDcxNzY4LCAweDY1Y2NmYTQ0LCAweDI3ZDQ1MmJlLCAweDk1NTljNDZhLCAweGVjMmI3NDg0LCAweGRiOTNiNjA1LAotCTB4OTA3ZjYwODEsIDB4OTUyNWI1YmQsIDB4YzYzZWIyM2QsIDB4ZmU4OTMzZmYsIDB4OGE3YzRlNDAsIDB4YjVmZmEyNzIsCi0JMHg3ZTIyNGY0ZiwgMHg5ZmRlNzI5YiwgMHg3ODNhZmE4OCwgMHgwYTkzMjNmMSwgMHg0OTc3YjVmMywgMHg1ZWVkYmYyNCwKLQkweDA5YmE0MzNmLCAweDBiNjZjZDc2LCAweDM3NzJhMjRiLCAweDIxN2FlNWU4LCAweDI2Mzc1ZTdlLCAweDc1MWNiOTFiLAotCTB4YWI5ZmE4NDcsIDB4YjczZjM4NTIsIDB4ZDNkMTE4YmIsIDB4NjQwOWU1OGUsIDB4ODc3MGVlOTcsIDB4NTdmNDA4YWQsCi0JMHgyOWY2NWJlNSwgMHhlNzU4NzU2OCwgMHg2NzVmMGIwNiwgMHhmYjVmZGVjYiwgMHhiMGYzYTQ2NCwgMHg2NThkMWNlNCwKLQkweDQwYzdmMzk1LCAweDBjYjBmY2ZkLCAweGI3YmJiY2UzLCAweDgzZTU0NDIwLCAweGQ0MzJiY2QzLCAweGJjM2VmN2Q5LAotCTB4NzRmMTFmMmUsIDB4ZjZjNWU4ZDgsIDB4MjI2ZjZmNzYsIDB4YmRkZGVmY2UsIDB4N2U3MTEyNjcsIDB4OWE2NTdiZjUsCi0JMHg4M2Y4N2Q3NywgMHg1MTI1NDViNCwgMHgyOTE3ZjEzOSwgMHg3NjhjOTA1MCwgMHhjN2IyNWI4MiwgMHhmNzc3OGJjYSwKLQkweGQwYjY5ODdlLCAweGQyNTNmZGNlLCAweGUzYzNlNTk3LCAweGFkMzVkZDI1LCAweGZhYmZiZjE4LCAweGVmMmViZTJhLAotCTB4NDYxY2QyZmQsIDB4MTU5ZWY4MzksIDB4ZmM4YzU5ZjQsIDB4ZjVjMWNmN2QsIDB4Y2Q2NGQ0ZGIsIDB4NDFjY2U4Y2YsCi0JMHg1NjU4MzNmZCwgMHhmYzcwMWFjNiwgMHhmY2Y5MzkxZiwgMHgxY2NlYTZkZCwgMHg5NmZmY2JlNCwgMHhiNmRjZmRmNCwKLQkweDkwNjE2NjRlLCAweDI0ZWIwZDRiLCAweGZmOTkwNjE2LCAweGNjOWUyZmRlLCAweGVlZmZmOTQxLCAweDZhNzMyN2JlLAotCTB4ZmY4YmUwNjMsIDB4ZDBjZTdiNGUsIDB4OWFmMTEzYzYsIDB4ZDc4ZGE2NWEsIDB4ZDVlMzg1OWQsIDB4YTI2ZmNkN2EsCi0JMHg2NmViNjE5YywgMHgyNmY5MDZmYSwgMHhkYjYzM2Y5ZiwgMHg4YTNlNmRiMywgMHhkNzAwMGNhNywgMHhkZjZhMWQyMiwKLQkweGY4MjdkNDBkLCAweGNjMmViODJjLCAweDRlOTBjNjEyLCAweDZkZGM5NzZkLCAweGJlN2NmZWM2LCAweGRmZGEzNzQyLAotCTB4ZmQ3MWY3ZGEsIDB4OTI3YTBhYjcsIDB4YTdlNDRiMGUsIDB4MjQyMjRhZGEsIDB4ZmNiNmJmOWYsIDB4MTNkN2U4ZjcsCi0JMHg0Yzk4ZDlkNiwgMHg3MjcyM2ZmMiwgMHgzMGZhMjMxNCwgMHg0ZDRjZGUyMSwgMHg1NWY1MDU3NiwgMHg1ZjRlMWFkYSwKLQkweGM4MWIxZjkxLCAweDI0Mjc3MDFmLCAweDNmNjA2NDRlLCAweDc2M2QzMjk5LCAweDE3NTc2Zjk0LCAweDkyMThiNDI1LAotCTB4MTg0ZTdkZjAsIDB4MTY2NzY3ZGIsIDB4MmFhMTc3ZDMsIDB4MzRhMWZmNGUsIDB4MGM5ZTcxNDYsIDB4ZmYyMTJjZDYsCi0JMHg5N2I3MjczMiwgMHhlNzMwYTZiMywgMHg0ZmVlMjg3YSwgMHg4NzhjNzZlNiwgMHgwNWM5Yjc3OSwgMHhjNjEyZmViNCwKLQkweDY4YmMzNDI1LCAweDA4ZTkwMWZhLCAweDkyN2JlNWU1LCAweGVhNDhlODg1LCAweDk0N2VjODkyLCAweGIxZjM5ZDBkLAotCTB4ZWFlODkxZGYsIDB4OGFkNzVjNmUsIDB4OTYwZDVkMjgsIDB4YjU3NDQxZmYsIDB4MDg2ZjFiNDksIDB4YTI1NDA1NWQsCi0JMHg3ODY1OGYyYiwgMHhmNjI1NTJiYSwgMHg5MGIzZGE5NSwgMHg3NGFmZmQxZiwgMHg0MjRkYWY4MSwgMHg2YzdlNDRmZSwKLQkweDQwMTZmMWUxLCAweDQ2YjdjZTE5LCAweGIxNjM1N2Y0LCAweDQ3YThjYjc3LCAweDYzZjdjNmJjLCAweGMxM2I4ZmUzLAotCTB4MjVmZjQ1ZWUsIDB4Nzg3Y2VkMDMsIDB4NDBiMzVhOGUsIDB4M2Q2Mzc1YTUsIDB4ZGFlZmU4YmQsIDB4NWY0ODViMjYsCi0JMHhjOWU4NmJkZSwgMHg3ZDI2M2I0MywgMHhhNDAxZjM1YywgMHgyNWY5ZjQ4ZiwgMHg2ZmM4NmI2NSwgMHg1ZWExNzJjYiwKLQkweDcxNGI1ZDQwLCAweGZkZDNlNTg3LCAweDdlODA4ZWRjLCAweDliNjY4ZTkxLCAweGJhNmIzZmM4LCAweGRiOWY5YTZiLAotCTB4MmZjNGQ1MTEsIDB4MTU1NjBkYzEsIDB4YWVmNGUwZjUsIDB4Zjc2NDU1YmMsIDB4MzM1ZTYwYWYsIDB4ZjZjNzcxZDEsCi0JMHg5YzJmMThjNSwgMHhhY2EyZjc2YiwgMHgyMTNjNjJiMywgMHhlN2FmZTcwNSwgMHg5M2E5NTZiYiwgMHhiNWQwZjFlYywKLQkweDVkNzI4YmNjLCAweGJiYjY0NzhiLCAweDE0ZmY3NzdhLCAweDA5NDM3ZmY1LCAweGYxODNmN2Y5LCAweDdhNDY0MmM5LAotCTB4Y2JlNWRkYTMsIDB4MWViYzA2NDgsIDB4YTc4ZjFiZmEsIDB4MTk0Mjk3YjUsIDB4ZjU4OTRmOWUsIDB4Y2JlZDlmNmMsCi0JMHg3NmI5NDE3MCwgMHhkZWYwOTU4MywgMHgwN2ViYzFkZSwgMHg0OWEwODAxYywgMHhmZWE0YTcxNCwgMHhlYjg1OTI1OCwKLQkweDgxZjJhMWExLCAweDUzNjk5YmUyLCAweDBkYjdmNjk4LCAweGI5NWE5OWNiLCAweDQxZDkyYjZkLCAweGU3YjdmZjFhLAotCTB4MjUxYzc4NzEsIDB4YzhiNDNjZmUsIDB4ZjFkY2RmMmYsIDB4NDdmMDAyN2MsIDB4YTY4ZGM2MWEsIDB4YjQyMTE3ZDIsCi0JMHhjOTJlMjlmNywgMHg3Y2I2MTRjYiwgMHg2NDgwMDBkMCwgMHhlYjI3ZjE2MiwgMHg1YjExNWM2NywgMHhkZmEzZWRlNiwKLQkweDdhYzdhZjViLCAweGY1ODNiZmQwLCAweDY1ZTgzNjA4LCAweDAyYjNlY2FkLCAweGQxMWQ2YjFjLCAweDYwZWMwNTdhLAotCTB4N2M0OTYxY2IsIDB4MzM3NWU0ZmYsIDB4OTJmZTYxMGIsIDB4OTNmNDNmMTgsIDB4YWZjNjFmNTYsIDB4NWUzNzRjYWMsCi0JMHg1YzRhN2MyYywgMHhkZmU4NDZmZiwgMHg3N2VkNmFhZSwgMHgwNjg0Y2Y1NiwgMHhlNTY5OTYwZiwgMHhiMmY5ZDc4ZiwKLQkweGJlYTMzZmEwLCAweGY4YTk0MjNmLCAweDc4ZGEwYjFlLCAweDYzMzgzZGNmLCAweGE4YWM4NmZkLCAweGMyZjYwMDdkLAotCTB4MzRjZjI4MjcsIDB4ZWJlZDYxM2IsIDB4NjA5MzZkMzUsIDB4NDNmMzliMmMsIDB4NGQ1ZmVhMTMsIDB4MTJkZDA3ZGYsCi0JMHhmY2YxMjFkOSwgMHhiZTkxNGI2YSwgMHgwODVkN2Q5OSwgMHhjZWE1NzVmNiwgMHg3MGE1YjZiZSwgMHhiMjE2N2FmYiwKLQkweDI0MjVmODI0LCAweGZjMmI4M2JmLCAweGIwNWJlZDBjLCAweGJlYjA5MjRiLCAweGNmZjdiNWZmLCAweGZkZjUwZDNlLAotCTB4NzI3MmZlNzMsIDB4NmVlZDhhOTQsIDB4NTU3ZThmOWYsIDB4ZjI0MmEyZjAsIDB4MGU1ZmI4MzcsIDB4OTYzN2MwNGIsCi0JMHg4MzU3NmUyZSwgMHhiNDc4YTczZSwgMHgzOWI3M2Y0NiwgMHg0MmI4ZmQwNSwgMHhlZDZjZTMwYywgMHhhNDBhYTRjNywKLQkweDczYTNmMDc3LCAweGY5NmIwM2JlLCAweDY2NWYxNGEzLCAweDlmZDQ0NTRhLCAweDY1Zjc5ZjhjLCAweDE4OWUzYzI5LAotCTB4NWVkYWFlMmMsIDB4OTVlZmZkODQsIDB4ZWIwYmRhMTgsIDB4MmRhNzRmOGIsIDB4Y2RlYTdmMjQsIDB4ZGYzMTQ1YjQsCi0JMHg5MDdlMWMzNSwgMHhkZmIwZDlmMCwgMHgyZjFlMmMzOCwgMHg4ZjA5OTE0YiwgMHhmMDllNDc0ZCwgMHgyZjc4ZGNhMSwKLQkweGE4NGM5MTJjLCAweDY4YWRjMjU3LCAweDFiZDdkNmQ3LCAweGU1NjQyMmQwLCAweDUzMzcwNWUxLCAweDg5OWU3ZDdjLAotCTB4NjVmOTg2OGQsIDB4ZGMxNzdkMDgsIDB4MmE2ODYzN2YsIDB4OTNmZTFiY2UsIDB4ZmYwZWQ1ZTAsIDB4M2IxMzkyNjIsCi0JMHhiNGVjNTllNiwgMHg3YjVjNTE0ZiwgMHg5OWMxZTEzYiwgMHhhYzNjNDNlMCwgMHhjMGNhYWUyZiwgMHhjZjY2OWE3MSwKLQkweDFlNWM1MjcyLCAweDZmYWMzOWVjLCAweDE0N2JlYmJhLCAweDVhZTBkN2E3LCAweDhkNThkODdmLCAweGQ4MjU0ZWY2LAotCTB4YjgwNmJmNzUsIDB4YWJhZjkzYjMsIDB4OGY1ZjAyZjYsIDB4ZmU5NDBmOTIsIDB4NDY1YmNhMTAsIDB4YmEyZmUzOTAsCi0JMHg0OGI0NWQzOSwgMHhjYmI3ZDBmZSwgMHg2MmM3OGUyOSwgMHg4N2I5NzJlMywgMHg3ZDc4ZmRiOSwgMHg2OWRhODk4YSwKLQkweDUxNGZhZmVmLCAweDg0NTdhZjA4LCAweGI5MjNhNjdhLCAweDZkN2E1NzFjLCAweDk5MDc1NzY4LCAweGFiZjQwM2VmLAotCTB4ZWVhZWRmOTksIDB4ZjJlMjc1YTMsIDB4YTU1MmJkY2IsIDB4ZGRjNTkzNzgsIDB4YWMyNGVmN2IsIDB4N2YyMTQyYmYsCi0JMHgwZmJkMjk4NiwgMHhhZGZkYjhlMCwgMHgyNjdhZWY2ZSwgMHg3N2NiMDBmOCwgMHhlYTFjNTA5NSwgMHgxZTYwNGE2OCwKLQkweGIwYTU2ZmFlLCAweDVjOGZmYjU3LCAweDEyNWI1YTUzLCAweGY3NWFiZmI1LCAweDAxYWJjMjM5LCAweGY1MGVhZDBmLAotCTB4OTM5NDZhZmUsIDB4MjcyNDI4OWYsIDB4MzNkMjI1OTksIDB4Zjg2OWZhMWQsIDB4ZmJmNTMyNmIsIDB4MGVhMDViMDcsCi0JMHg4NmI1NjlmYiwgMHg0MjBlOTE1YiwgMHg3M2I1MzIxZCwgMHg2Mzc0YjFjZiwgMHhlMjNlZWYzZiwgMHhkMzNiNDBlOCwKLQkweDQ4NjM2ZWU4LCAweDUwYmVlMGM3LCAweGY2ZTJjNDljLCAweGQzY2ExNTMzLCAweDA5MTQwYjQzLCAweDVkOWM0NWY1LAotCTB4NDllMzFkMzMsIDB4MjliOGI3ZTQsIDB4ZjgyNTU4ZGUsIDB4YzE1MDM0NjMsIDB4NDJiMTBiNTksIDB4NTEyOWU3Y2IsCi0JMHg0ZmY5ZTczYiwgMHg1MmY4MmFlNywgMHgxNjBjN2ZiMywgMHgzMTllMWYxZSwgMHhmOGUxODEyZiwgMHg0OWM4OWVlYywKLQkweGRkOWJjNjAzLCAweGUxZWQwYzNkLCAweGM2ODk0ZWM2LCAweGRjN2UyYzY5LCAweGQyY2JmZTg0LCAweDQxZGZjZTRlLAotCTB4ZmUwMDZmZTEsIDB4NThhZWQwNzIsIDB4NzYxMzYyOTEsIDB4NzdhNzBiNjYsIDB4MTQ3MjczZDYsIDB4YmUzMWY5ZTIsCi0JMHgzYjQxOGM5ZSwgMHhiMmRmYWM0NywgMHhmZDY5ZGE4YSwgMHhiYzljNDQ5OSwgMHg0MDkzYzQ1MSwgMHhkYWZkNTIxMywKLQkweDU4Y2VjZDE0LCAweGMyNmQ5ZTJkLCAweDZlZTNlMGNlLCAweDMyN2M3YTkxLCAweGQyNTRiM2UyLCAweGU3YjU3M2M1LAotCTB4OTI3NzIxNmUsIDB4MjE2NjQ0NGUsIDB4YmU4MDQ2ZmYsIDB4NWRiNGFlMzAsIDB4NmZmYjdkOWEsIDB4MmJkYjdlNjEsCi0JMHgxNGQxNzljNiwgMHhjOTM5MDBmMywgMHg0ODFlZjg2NSwgMHg3ZTVlZjAxMSwgMHg0ODU5ODNmOCwgMHgxMTlhYWMzNywKLQkweDllMWQzNmJmLCAweGZkOGEzNzI2LCAweGQyMTdiNDA0LCAweDU4MWRjZDZkLCAweDMxNmI3ZTlmLCAweGVmOGM2N2U5LAotCTB4NWVjMGJlZTMsIDB4M2IwY2Q3ODEsIDB4NTY3OWViOGYsIDB4OWY3MGYyODcsIDB4ZmY4NGU5MmQsIDB4ZjhlMmRmZjYsCi0JMHgxZjY4MTIxMywgMHhjNmQ2MWQyMywgMHg3NWNmNGM5MSwgMHhiMGYyZDcxOCwgMHgzZjUxYTdkMiwgMHgzMmQ0NmE3YiwKLQkweDRmZGI0Nzg0LCAweGQ5YThmZGMyLCAweGE5YzcyNDI1LCAweDdjOTVlYzljLCAweGFiZjllMDdiLCAweDAxZTExNzE0LAotCTB4ODQ2YWJjZmMsIDB4ZWQ4N2RmMTcsIDB4ZjRhZGZkZDEsIDB4MzhhNWNkZTksIDB4ZTExZmVlMmUsIDB4NWJhMzNmYjMsCi0JMHhlYjM1MzhhMSwgMHhmYzhmYmRkZCwgMHhmMTEzYjM3ZSwgMHhiOWY4NzM1NSwgMHhkNmZmNTE1NywgMHhlZDI3NTg1OCwKLQkweDJkZDljNWY3LCAweGYxYmM0ZTNmLCAweDAzYTM5NDQ5LCAweGJlZWVjZWU3LCAweGNlZmFlMTFiLCAweGQ2ODA2ZjIxLAotCTB4NWM4ZjZmNDcsIDB4Y2ZiNzE1N2QsIDB4NTM2N2RiZGYsIDB4MjNkYzhlZDEsIDB4OGZkODM2ZTQsIDB4NWZhMTI3YzQsCi0JMHhkZTMyN2Y3MiwgMHg0NTM5N2M4ZSwgMHg5NjBjOWZlZiwgMHgyNDc2ZWVmZiwgMHhmMDA0MmY4NywgMHhlZjkxOGJlZCwKLQkweDBkZmZlMTQxLCAweDQ0NGY5ZmQ0LCAweDIwZmFmNWZkLCAweDJiZmZhMDNjLCAweGVkNTA3NmEzLCAweDJiZWQxYjVlLAotCTB4NzExN2ZhMGYsIDB4OGZmM2M4ZjYsIDB4MGY0ODQyZDgsIDB4MTRhZDNiZTcsIDB4ZmVjNDU0NzcsIDB4ZTQ0NzM5Y2MsCi0JMHg4YjUyNDQ0ZSwgMHgyODRkZTRlYiwgMHhiZGI3ODM2ZiwgMHhmMDAzMmJmNywgMHhmN2MxZDI5ZiwgMHhlYzQ5MTQzYiwKLQkweDMzMjBiYzg3LCAweDczZTM3ZmJlLCAweDI5NGZlZWM2LCAweDVmMWU1OWFlLCAweDNlNDdjYTA5LCAweDZlMjI2NWVmLAotCTB4NDhiOTJjYjQsIDB4N2MzMmZiZTUsIDB4NjI1OTZhNWYsIDB4NTNkYTExNzcsIDB4YjQzZDA5NGYsIDB4YWJlZjgxMmMsCi0JMHhkZDRjYjgwYywgMHhhYzdiYWViOCwgMHhiNDI5ZjM4MSwgMHg2N2JmYzJmZiwgMHhiMWFiMzFiZiwgMHg2MTFkMmZmYiwKLQkweDI5OWRkNzZlLCAweDYwOWI3NDM2LCAweDFmNjgxZDllLCAweGUwNmRiYWUwLCAweGZiODMzMGZiLCAweDFkY2RjN2Q1LAotCTB4NTE5MzgyNjYsIDB4YzQ1NWEwNzksIDB4OTVmZGI1ZWIsIDB4NTcxZTNjZTMsIDB4Y2U1MWY2MjcsIDB4MTBmYzU5Y2MsCi0JMHg0OGI1YTk2ZSwgMHg5ZmU4ZDVjZCwgMHg4ZDNmNTg1ZCwgMHhkZTc3ZDdlMiwgMHg3NTllOWIzZiwgMHhmNzcxZjRlYiwKLQkweGRlOTlhY2M1LCAweDVhOTRmYjZiLCAweDc5OTZiYmJjLCAweDhlNWVkYzRkLCAweDYwMGQxMWM2LCAweDk0ZWJhOGJmLAotCTB4Nzk5N2Q0MmEsIDB4ZTUxYWI5Y2MsIDB4ZDU4MjFhYmYsIDB4MTZjZjBjOWEsIDB4MmVkMWEyNzgsIDB4NzNiNDI0MTksCi0JMHgwMjc3NTY5NCwgMHgxNmRhZWZhZSwgMHg1MGE5ZTkwMywgMHhlZDg3YzE4YiwgMHhiOGU3M2MzNCwgMHhkMmE5MWM3OSwKLQkweGIwMWFlM2NkLCAweDQ3MWM2MTU0LCAweDQ1MThiNjdiLCAweGI3ZjQ1ZmRjLCAweGYxYmExOThhLCAweDczZjg5MDY5LAotCTB4MWVhOTUzYWQsIDB4ZmQ2YjVmNGUsIDB4MmQ5YjE4YjUsIDB4NjQ4YmE3MTgsIDB4N2RhZTI4MWIsIDB4NDc5YmU0YzEsCi0JMHgyMmU0ZTM3MSwgMHhiNjdjMDIxNiwgMHg1NWQ3OWEzOCwgMHg5ZGUyN2FmMywgMHg5Zjg4ZDYwYiwgMHhiODU0YWZlYSwKLQkweDY0ZDRjOTIxLCAweDM3NmU5Zjk0LCAweGUzYzY1MzhmLCAweGJlOWI1MTZkLCAweGQyMWZiZjFjLCAweGViOTdkNjEwLAotCTB4NDY0YzYwNTgsIDB4ODgzZmRmMDEsIDB4NzM3NmVmN2QsIDB4N2Q2MTc1ZjksIDB4ZDdiN2MwOWUsIDB4OWI1NjcyODQsCi0JMHg4ZTJjYWFmZiwgMHg3ZjM2NDMzNywgMHhjZDU3NjdlNiwgMHg3N2M4M2E0MywgMHgyMDNmMjg5OSwgMHhhYmUzYzVkZiwKLQkweDNmODIxMzMwLCAweDQ0Yjc0YWZmLCAweDZmMDcxMWY0LCAweDQ4NmQxYTBiLCAweGRmN2NhZDVmLCAweDFmYzJhYmVlLAotCTB4ZWU1NWY3MGYsIDB4N2MxZmExMzQsIDB4YWI2N2RjMWUsIDB4ZGY2ODlhNzMsIDB4MjRlMzUyZjQsIDB4NzJmNWJhYjcsCi0JMHhmN2ZjYjA2OCwgMHg5ZmI5NjdmNywgMHgzYzhiMmFkNCwgMHhhMWM5MjcwZSwgMHhjYjlmMjc1YSwgMHg0OGZiYzkxOSwKLQkweDgzYjdiZTM3LCAweDY4ZjM4MDlkLCAweDZlZDBjYjk1LCAweDlkYTM3ZTk5LCAweGRjNzRkMWU2LCAweGM2ZTA3MTRhLAotCTB4YTgzOWJkMTUsIDB4N2FhYTliYzcsIDB4MjAzZjMwOGIsIDB4YWQwOGJmMWUsIDB4NjgyZmM5YTIsIDB4ZmYwNmViNTcsCi0JMHhkODg0ZWQwMywgMHhjNTQ3ZTQ3NiwgMHg3ZWZhMDdlZiwgMHgzZjQ1NGVlNCwgMHhlNzgxY2NlNywgMHhiMDFkNWY1MCwKLQkweDdmODJiZTkyLCAweDM4YzY2ZDNkLCAweGIyM2M5MWNiLCAweDAyM2FjNmEzLCAweDMwNWRiMDJiLCAweGEzZjc3YmExLAotCTB4NzBiNzY4NzksIDB4Y2JiMWE5YmIsIDB4NjE3NjgxZGMsIDB4M2VjYzRiNmQsIDB4MDZkZmZlMWIsIDB4NWIxYmJlZmQsCi0JMHg3N2YxNGM5NywgMHg1ZjdmYWVkNiwgMHhiYmVlMzNiZiwgMHg2ZDcwZmIyMSwgMHg0YzViY2ViNCwgMHhlZmM4YjE4MSwKLQkweDlmNjg3N2EwLCAweDgxODM1Y2ZjLCAweDY0ZWJiN2Y2LCAweGI3OTQ2MmVmLCAweDdiN2FhY2U3LCAweGFmODM5Y2ZjLAotCTB4OWFkZGNmZDcsIDB4YzIyZGUxM2QsIDB4MGYyYzFlNzUsIDB4MTE2ZjY3NTksIDB4ODE5ZDczYWUsIDB4NjlmYjYyMDUsCi0JMHhmNTg2NzVjNCwgMHhmOWQ2MjY1ZCwgMHg4YjkzMTNkYywgMHgzZmRmOWQ3MCwgMHhkNzA4YjkzMCwgMHhjZGIxOGI3OSwKLQkweGE4ZjM3Yzg3LCAweDFiOTBmMDMzLCAweGU5OWJlZGZhLCAweGY3MGE3YjI3LCAweDJlOGY5MTNkLCAweGM0MGYxZTk1LAotCTB4ZmY4MWUzZDEsIDB4ZWZhNDdhM2QsIDB4Yzc4N2QyNDYsIDB4ZWJkMGUxMDYsIDB4Y2Q0OWI3NDMsIDB4NmI1MDc5NDIsCi0JMHg1ZWExN2YzMSwgMHhlMzYxYmZjNCwgMHhjNTMzMTY3OCwgMHhmYTdmOGUzYiwgMHg1MDQ3YzZlMSwgMHg2NGM5NzQwZSwKLQkweDFkZmQ2ODhmLCAweDY4MDUwMjU3LCAweGQ1N2YxZDBmLCAweDIzNDkwZGUzLCAweGVkMThiZmY3LCAweDA3ZGEwYWFkLAotCTB4NDU1YzYxMGMsIDB4N2IzNDAzZjMsIDB4OWYxZTVlMzIsIDB4Yzc3OWYzMTIsIDB4N2I0MmFiZWQsIDB4OGRjNmViZmMsCi0JMHg0YjNiYzVlYiwgMHhlNzZlNDNmOCwgMHgzY2JjOTVlZSwgMHg3MTQ5ZGM2ZSwgMHgwYjYzYTZlNCwgMHg3ZTI3MTg5YywKLQkweGM2ZTNjYzI3LCAweDUyOTQ0ZjRkLCAweGZjMjFiOGRjLCAweDJkZTYzNzRjLCAweDg5YzkyZWIxLCAweGRlYzM0N2ZlLAotCTB4ZGIxNzEzMzcsIDB4ZjgyZTdlYTMsIDB4NWYyMzZmYjUsIDB4M2Y3ZThiMzEsIDB4OTlmMDlkZTksIDB4YzEzYjNhYzQsCi0JMHg3MWVhMTU3ZCwgMHg0MjYyM2I5YiwgMHg3ZjAyNmZiYSwgMHg5YWQ0ZjMwZiwgMHhlYzQ5Yzg5NCwgMHgyOGNkYzliNywKLQkweGIwZmNhMzFmLCAweGYyZDNmZmRlLCAweDRkZjg3NmEyLCAweDc0Nzc3NzI0LCAweGQ3OTQ2MTQ5LCAweDVlNDBhNjY5LAotCTB4OTYzNWVhMTYsIDB4OGI2YjNjZTUsIDB4NmVjN2Q5ZjIsIDB4NzdmNzFiOWYsIDB4YmVkYmZiYTMsIDB4ZTRjNzcxZmYsCi0JMHg0ZjZlZjUxYiwgMHgzNWVkZmEyMiwgMHhlNTEzOWYzMiwgMHg5MDg3NzZkOSwgMHhiN2M5MGE2NywgMHhjMmJhNzc4ZiwKLQkweGI3ODhmZjNjLCAweGVkY2MzOGZmLCAweGVmMmQwNjg0LCAweDBhZGQ2MTQ4LCAweGI5ZTJkN2FjLCAweGJkNzBkN2JlLAotCTB4Yzc3N2RlNTEsIDB4YjJkOGZiYzksIDB4MTRiZDJmYjYsIDB4ZjZlM2QxZjcsIDB4MGRkYjYzYmYsIDB4ZWNjN2U3ZWUsCi0JMHg2MWZhZWI3ZiwgMHhiOTZhYTVjZCwgMHg1ZjViZmY3ZSwgMHgzMjdlZTIxZiwgMHhiMmYyYzNmMCwgMHhlYjZhZmQyOCwKLQkweDkzNmZkMWEwLCAweGViMDc0Mzg4LCAweGY0ODNkZjRmLCAweDM5MmMzYzFiLCAweGU2NWJiZWQxLCAweDBjYmJmNGU1LAotCTB4YzRmMzJkZmMsIDB4M2FjZWZjYTEsIDB4MjM4OTc5ZjUsIDB4YWE2OTdmZjEsIDB4Y2IwN2ZmOWUsIDB4ZWFmOGEwZmYsCi0JMHg5YzlhYTkxNSwgMHhjZGFmN2NlNCwgMHgwZmRiOGI1ZiwgMHhlMjRiYjNjZSwgMHhhZjM3MTk3YywgMHgzZTM1M2Y3OCwKLQkweDk5ZjlhZWRlLCAweDZmMGYyYTk3LCAweGUzODc4NDFjLCAweDBmZmNiMDYzLCAweGM2Yjc4Nzk2LCAweGZkYTQ2NWUxLAotCTB4MGYyY2FmOGMsIDB4MzVmNzk3ZmYsIDB4MzViNjNhMWUsIDB4YjQwZWZkMTEsIDB4NTk0ZmQxZTMsIDB4ZjNjOGNmYjcsCi0JMHhiMWZkMDAyMywgMHg2NGIzYzVmYiwgMHg5ZmVmOGZiYiwgMHg3ZWJkNWFjYSwgMHgyNTlkNWUxZiwgMHg1ZjM5ZTFmNiwKLQkweDRjODRmMzNmLCAweGY2MjhkNmViLCAweDM5OGYxYjg5LCAweGRlYjRkOGJjLCAweDY5ZjY4NGJlLCAweDZmNGZmN2UzLAotCTB4ZTE2NjA3NjMsIDB4YTNlZmM1NTIsIDB4MmU3ZTQzMmUsIDB4ZDRmZGYyZjgsIDB4YmNjMWQ0ZDYsIDB4NWJjYzNjODUsCi0JMHhjYmQyYWNhOCwgMHgxZmVjNjdmOSwgMHhkNjYyMDRhNiwgMHgxYzA0YWFiZCwgMHhkYmU4NjE4MiwgMHg3MjU4ODRhMiwKLQkweGE5YWRmYmNjLCAweDQ2N2VhZWRjLCAweDRjNzhmN2U0LCAweGE1ZTYxZDZjLCAweDdjZDg3MjZjLCAweDBjNzhjZmU4LAotCTB4NDdlOGZmM2MsIDB4MjhlZGZlMjksIDB4YzBhYTJkMTcsIDB4MzJlZjkxZWIsIDB4MjFlNWUwMDMsIDB4OTVjOTI3NjMsCi0JMHg4YmRkYTM1MCwgMHhkZjhiNTA3MiwgMHgyYzdmZmQ2OCwgMHg1OTJlYzFmNiwgMHhmYmQxYzdmZiwgMHg3YTY1ZmY4MSwKLQkweDUzY2ZjNzhmLCAweDc1NWY3OGRhLCAweGUwMWI2ZWRmLCAweDhjMTdjNzQ2LCAweGRjNDVmOGU4LCAweDRhMWJjYTVmLAotCTB4MzNmNTIzYmYsIDB4OWNiZjFkMTIsIDB4OTUyMTdmZWEsIDB4MjI2ZmEyZTQsIDB4YTI1YzJiZTUsIDB4NDc5NWIxOWMsCi0JMHg4ODljNjBjZSwgMHgxOGFiMzQxZCwgMHgwOTM4YzRkNywgMHgxOTBkYzdlOSwgMHg1YmQyNmYyMiwgMHg4MGYyOWIzOSwKLQkweGJmOTg5NWJkLCAweGYzZmUwNmY1LCAweGM4ZWQ5MWYyLCAweGUxZjVjMWJlLCAweDg4ZGY2NDc2LCAweGVjZjVmM2ViLAotCTB4ZmU5ZGJiYzgsIDB4N2Q2NzQ4YjMsIDB4NmY5NDdjZDMsIDB4ZjAwMWQ2YmUsIDB4MGJmODdmYTMsIDB4ZDNiNDc3OWUsCi0JMHhhNzczZTljYSwgMHgyZDkyZTljNCwgMHg3OGE0Yjk0ZiwgMHg3NDcxYTdjYiwgMHg5MWZmZTlmNSwgMHg4ZGE0YjUxYywKLQkweGJkZmU1NzY0LCAweDEyNWZlOGU1LCAweDcyM2E3ZTMxLCAweGE3OWUyMTNmLCAweDc4NDNkNTViLCAweGQ4OTMxYzhiLAotCTB4NzZiODk4OWUsIDB4ZTBjZmYzMTAsIDB4YWYwMTBjZmIsIDB4ZTEyM2ZlZjYsIDB4ZjM0YzJjMzcsIDB4ZmJjMWE2NjUsCi0JMHg1OGIzNWZmNywgMHgzZTk4MTI1OCwgMHgzNjJlNWNlNSwgMHhhZmI0ZWRmOSwgMHhmM2M5ZDRkMCwgMHgzMDU2OWE1ZiwKLQkweDE4NGRlMzkyLCAweDc4YzEyZDM3LCAweDk4YjY2Y2UyLCAweDQyODE4OWUyLCAweGZiNWI5M2NjLCAweDI3MjQzZGJhLAotCTB4MGU3ZGJjNjEsIDB4ZmZhZjNiNDMsIDB4ZGViZTVlMzUsIDB4ZmVjNjI4MTUsIDB4Njk3YTJiODMsIDB4Y2U3ZGEzMWYsCi0JMHg1NTg3OTQ3YiwgMHhmNzg3ZjlmOSwgMHhiYzEzOTc1NCwgMHg5YjcwNGYxNCwgMHg2ZTI1ZTdmNSwgMHgwZWZiZTM0YywKLQkweGE2OWZkM2RhLCAweGUyOGZiYmFkLCAweGYzZDdlZmY5LCAweGRiYTBlMmJjLCAweDg0YjhjNGU3LCAweGE5YjcwZjE2LAotCTB4ZDBhZmI0M2QsIDB4NmYxYjkwNzQsIDB4MGY5ZjMyOTUsIDB4ZDExNjY5ZmIsIDB4NjljMWQzNTMsIDB4NjUzNzE4YTUsCi0JMHhiNDUyZDY5ZCwgMHg2Y2ZmMmI3NywgMHhmZGVmYmYyNywgMHg0ZjI5MzJiYiwgMHhlMDRhNjhlMiwgMHg1MWQ3ODQ2YSwKLQkweGVkMTZiZTFlLCAweDA3MTg1Y2QzLCAweDBmZjdkZWVkLCAweDcwOGE1YjVjLCAweDBiNmZmMjZiLCAweGZkYTFjZGM2LAotCTB4MWUzZTg3MTYsIDB4ZGYzYzJjY2UsIDB4NTFkMWUxYmIsIDB4MWFiY2RjNWEsIDB4ZjA0NWIzZjEsIDB4NTViN2IzMjEsCi0JMHhlZjg2MWVjZSwgMHg5NzRmN2UzNSwgMHhmYTdmZDQwZCwgMHgzZmI0MmRmNywgMHgyZDgzYzlhZSwgMHgxNGIwMTY0NiwKLQkweDI0YzhlNTQ0LCAweDc0MTgzZjkxLCAweGFlYzVmYzhiLCAweDQ1M2YzY2Q5LCAweGE5ZTJlZDk0LCAweGY3MWRmM2UxLAotCTB4YWYzODQ5Y2MsIDB4MzdjYTY5NDksIDB4NGE3MmM3ZGIsIDB4YWM3ZGQ4ZjYsIDB4ZWEwMTQ4YmYsIDB4ZDBjNGYzMTcsCi0JMHhhNTE1ODc0ZiwgMHgyMmVkOGI3OCwgMHg5ZGYzYTNiNywgMHhjNzIzYTIyNiwgMHhhN2Y3YzYzYSwgMHg5ZWQwOGU4MCwKLQkweDMzZDIyMmJmLCAweDU5ZTYwOTNkLCAweDA1N2RkZWQ4LCAweDQ1ZjhmN2UyLCAweDMyOTNhZDAzLCAweDk3ZGE0NWZiLAotCTB4NzhmODkyNDksIDB4NWI3YTFiMDUsIDB4YzYxYzYwYzcsIDB4Yjg5NWNhZjksIDB4YjM5YjZhOTQsIDB4MzZmOGI3MGEsCi0JMHhhNDc3ZmNiOSwgMHgxNzM3ZGYxMSwgMHhmZjU1NzhlMywgMHg5Mzc5ZTQ2MSwgMHg1ZjE0NmNjNywgMHg0NjU5Y2Y2OCwKLQkweGFmZmQ5Mzc5LCAweDNlZTc3NTliLCAweGI2MjE5ZmUyLCAweGYzMjRmMjlhLCAweGY2OTFmZjBmLCAweDI1MDcxYzA3LAotCTB4ZTdiNGRlMWQsIDB4YmU3NjY5N2QsIDB4OTllYTE1NmYsIDB4NTczNWI5NDUsIDB4MmFiZTQ5YjgsIDB4NDIxY2ZlYzcsCi0JMHg1NTY5NDM3YiwgMHgxNmIwZjI1MCwgMHg0NTYwY2ZhMywgMHg1MThhYjVmOSwgMHhiYjc0N2YzYywgMHg5NWViODBkMywKLQkweDA2NjJmMjJiLCAweDYyNzVmZjhlLCAweDZkMTVmYzgwLCAweGYzY2MyMDNmLCAweGY3YmQ4YzlhLCAweGFjYTYxZmEwLAotCTB4ODQyYWJkZWEsIDB4NjVkMDcxZWIsIDB4YTliOGMyNjgsIDB4ZjE0NGQyMzEsIDB4OGEzNjYzOTYsIDB4MmUxZWU2YWYsCi0JMHgyODJkZmQ1OCwgMHhkMjczYWVlNywgMHhkMWMwZDdmZSwgMHg2Zjk0YjlhNSwgMHgzZDFjZjMwZSwgMHg0Y2VmM2NjYywKLQkweGNkNDg3OWUzLCAweDYzOTQ1ZTgyLCAweDMzZWEwMzM2LCAweGUyZjMzMzY1LCAweDNlMmQ3OWU4LCAweDdlZjgwMmU3LAotCTB4M2EyMTUzYjQsIDB4MDgxNjk4NWYsIDB4OWUwZTdhZTMsIDB4YzA5ZTU5NmYsIDB4M2MyOGI3Y2YsIDB4ZmU1OGUyM2UsCi0JMHhkY2YxMmZmYSwgMHhiNzExNmVjOCwgMHhmYzdjNzEzZCwgMHhiNWYzOGExYywgMHhmZGUyMTIyYSwgMHg1MWU3OGI4MiwKLQkweDNmYTY5NjNlLCAweGY3YzUxMDg3LCAweGNkNDdjYTA5LCAweGFlNDdmNjNmLCAweGY2MGRhMGJmLCAweDdkMzkxOGFmLAotCTB4MGVlZWFkMjgsIDB4M2JmNjI3OGMsIDB4N2I3Zjk0MDIsIDB4NGNiNzRiNjUsIDB4YmVjZTYzZmIsIDB4MThkNWFhMDcsCi0JMHhkNzFiNjZiZiwgMHhiOWZiNGQyNywgMHhjN2VmMWUxZiwgMHhmOTFlOTk3YywgMHhlMTNjYTBlZCwgMHhmY2IwNjQ3YSwKLQkweDdhNGZiMjBmLCAweDU3YzdmNGUyLCAweGRlOTg0ZmY2LCAweDUzYjc4YmFmLCAweDIxYjhmZGUyLCAweDdmNWM3Nzc2LAotCTB4NWEyYmQ5MjMsIDB4NzQ1NTQ5YmUsIDB4M2IzNzZlMWMsIDB4YTQyODdiMzQsIDB4YjJhOWM3Y2IsIDB4MTY2YmYzOGIsCi0JMHgyNjBmZmY3ZCwgMHgyMmZmNzkzYiwgMHg4ZDZkMjczZiwgMHg3ZDQxNGFiYSwgMHhlMjhjMmZmNSwgMHg5MGZlNWE3MywKLQkweGFhMTQyZjk2LCAweDIxM2Q3OWUyLCAweGI3Y2U4NTgzLCAweGU1MWI1ODc5LCAweGRkNjI4ZDA5LCAweGI0NzE0NDkyLAotCTB4YTdkZjg2NWUsIDB4N2MxMGJlNjMsIDB4ZjJkMmZmZmYsIDB4Y2M1ZGZmYTksIDB4MzkyNjRlYmIsIDB4YmYwODRhYTksCi0JMHg1MjRjZjMxNSwgMHhmNmYwZWUxMCwgMHg3N2RlMzhjNSwgMHgxNTllMzRlYywgMHhjODUyNGNmMywgMHhjZGZlMjA5ZiwKLQkweGQ0ZmNmM2Y0LCAweDdmN2NmNWU5LCAweDMwZjQxMzIxLCAweDM5MGIzMzk2LCAweDk5ZTc1YTVkLCAweGNiNTU1ZjI4LAotCTB4NGNmMmQxMWYsIDB4MDk1NGJjMzQsIDB4NTk4ZTY3N2MsIDB4NTA3Mjg3OWMsIDB4OTJkOTQ3Y2IsIDB4ZmI0NGFkZTAsCi0JMHg3YjAyNTVhNywgMHg5MGQzZTcxYSwgMHg3ODRiZjIyMCwgMHhmOTBkZWRiZiwgMHhhZmY3YTQ2MSwgMHg4ZjEyN2Y5YiwKLQkweDY1MGYyZDY3LCAweDNkMjA2MjcyLCAweDVlN2EyMmJkLCAweGQxMWZjYjRlLCAweDNkNjYyNmU4LCAweGM3MWRhZTA5LAotCTB4NTU1ZjNkYjgsIDB4MGM3OWEyNmYsIDB4NzE0NzVjMzQsIDB4MDMwNjgxYzksIDB4ZDU1ZmJkNDMsIDB4MTg3NGU2NjUsCi0JMHg3OThlZGUzNywgMHhmZDhkZDYyNiwgMHhlNTJiNjEyYSwgMHhmODdhMGJkNywgMHhkNjE2N2IzMiwgMHhiZWUzMThiNywKLQkweDJmZWU1NjI3LCAweDdmZGUwM2U4LCAweDNkMjc2NTc2LCAweGE3NTJhYzA3LCAweDMzY2U4OTNjLCAweDk1MDk0N2NlLAotCTB4NWViOGU5ZTMsIDB4NmFmMzFjYjksIDB4OTAxMjM5MjIsIDB4MGZlZDg0ZDAsIDB4MzUzOTUwZDcsIDB4YTc5NjA2ZjIsCi0JMHg1MWFlNWU3YSwgMHg4YzBjNGY0MCwgMHhhMDk2ZWM4ZSwgMHgyZGRiN2ZiZCwgMHg5OWI0OGNiYywgMHg3ZDNkZmEwOSwKLQkweGU0YTg0ZDc2LCAweDM2M2JlODFiLCAweDJhYTM2ZjI0LCAweDM3ZTI5NTNkLCAweGJjNTBmNGY3LCAweDcyYmJlODQ4LAotCTB4MGNkOTFmMmUsIDB4YWJjNzk4NzMsIDB4OWQ5YjhhNTQsIDB4M2IyM2M4Y2EsIDB4N2Y5YzVlYzAsIDB4YjNlYjA3YjAsCi0JMHg4MzY3MTRjYywgMHg1M2ZmYTI3YSwgMHg3YWYxYTdhMywgMHhjYjNmYWY5NSwgMHgwZGZjZjA3MiwgMHhmOTQyMWJkNiwKLQkweDFhNmYyYTc2LCAweDkxMWJhYmM1LCAweGIyOWVjMDNmLCAweDcwNzMwMjNiLCAweDNkNDljZjVkLCAweDljM2YyMjc3LAotCTB4MjVjZmY5OWEsIDB4MGVlN2U3NDgsIDB4ZTUxMGI0ZmQsIDB4YjAyNjM1Y2YsIDB4Mzc5MTg3ZDMsIDB4ZGU1YzE5NjksCi0JMHhlYmVkMTgwYywgMHg2NWU3ZTgyNCwgMHhkOGZiZTA3YiwgMHhmOWI2YWJjZiwgMHg3Y2Q1MzBiMywgMHgxMzM0Y2E1ZSwKLQkweGExNjAxZDFlLCAweGZmMjhjODVmLCAweGI5ZmFjNTUyLCAweGQxZmI3MmU2LCAweDYxMmZjMzM1LCAweDJiMWFlODFlLAotCTB4YTAzNTIzODcsIDB4MDk5ZWM4ZjgsIDB4MDNiZTk1Y2MsIDB4MDkyMzVmZjMsIDB4NDlhOTg2ZmIsIDB4NmFhODg3ZTQsCi0JMHhjYjIxZmExMiwgMHg1OTQ2YjljNCwgMHhmODJjYjdmMCwgMHg3YjJiMGZmYiwgMHhkODMwMTUwYSwgMHgyY2RjZWYyZSwKLQkweGRlZGZlNzBmLCAweDY4NmZlNzE4LCAweDVjZTk0ZGNmLCAweGQ1OTFjZjRlLCAweDZlMWY0ODA5LCAweGQ3ZGY5MWUzLAotCTB4MjZjOTNhYzAsIDB4YmRmMTE4NmYsIDB4ZmI0MWRiMjYsIDB4MmEzYjRmYjcsIDB4YWZkMGJkM2QsIDB4ZTUyZmZiOTQsCi0JMHgyNmJkNTc5OCwgMHg3MWNhNWZmYiwgMHhmNjRlNGQ5ZiwgMHhlNTMxZmM3YSwgMHhmNTJhZTk0ZCwgMHgyMWRiMDMzNywKLQkweGU1Y2Q2Y2ZlLCAweGJiZmQ3ZjE4LCAweGZkMDQ5N2Y1LCAweGZlZmQ3Yzk1LCAweDczMzFmYjA2LCAweDIyNTk5NmI4LAotCTB4ZGRmMDBhMzksIDB4MDNjMGQ2Y2QsIDB4MTYxNzdlYjgsIDB4YjNmYjQ5YmMsIDB4N2E5ZTY2NzcsIDB4NGUyYmYzMDMsCi0JMHg4OGNmOTkxOSwgMHg5YzQzMjQ3MiwgMHg4ZWJkMDMzZiwgMHg3NWNjOWVlMywgMHhjZTUzZjNmMSwgMHhiMTEzZDM2ZCwKLQkweGYyZTljMDVjLCAweDdkYTYxNjVhLCAweGZjYjk5YWY1LCAweGFjZjVlM2JjLCAweGRhMTdhNWE3LCAweGFhMzFlMzVkLAotCTB4NzFmYzMxYmQsIDB4NWYyZmFhYWQsIDB4ZDcyZmFjNWYsIDB4N2Y4ZTNjODgsIDB4ZGZkZmVhZjIsIDB4ZDIwYTIyYzAsCi0JMHg3Y2E3YjdlOSwgMHhmZGY2MjYzNiwgMHgyZmRmNTY1MywgMHg5MjllOGY5MCwgMHhlODY3ZGU3OCwgMHhmYjI0ZTY3MiwKLQkweGQwODUyZGQ5LCAweDY0ZmYxOTllLCAweGM5ZmYzOGE2LCAweDU1ZmYxM2YzLCAweDRlNGY1ZmY4LCAweGI2OWY1NDYxLAotCTB4ODJjN2IyZGYsIDB4MmQ5ZTIyZjUsIDB4MWVmMWZhOGIsIDB4MjY0ZGM5NjYsIDB4MzBmYTQ5YjksIDB4NDczYzg5MjIsCi0JMHhiMGYxZWQzNywgMHg3OTNiYjc0MywgMHg5YWRhMTc1YywgMHgwYjQzOWZhMCwgMHg5YTRiYzI1NCwgMHg0MmFlYzBkZCwKLQkweDEwYjcyYmZlLCAweGJlNzQ2OWZmLCAweDBhZjQwYWM2LCAweDY1MWNhOTc4LCAweDVkZmE0MDQ5LCAweGMzNmVmNDYzLAotCTB4YjMwNGU0YmUsIDB4NWE2ZmZhOGEsIDB4OTZmYTg1YTIsIDB4ZmU5MGE2N2YsIDB4MzMzNTY1NTgsIDB4ZGM0Zjk0MjcsCi0JMHg2ODY1NDA5NywgMHg0NGUwNzI0NywgMHg3MThjMjk4NSwgMHhlZTQyMzVlZSwgMHg0ODFiZjdjYiwgMHhjYzJhNTY3ZiwKLQkweGQwMWI3OThmLCAweDlmZGYxYmFlLCAweDNiNTBiMGM4LCAweDdjNWNkMjk4LCAweGYxYThjYTdmLCAweGYyODUzNGQ1LAotCTB4MWFlYzA1MzgsIDB4ZjQ4OGMxM2YsIDB4NTdlMGFiN2UsIDB4YjNjZGYwNTksIDB4ZmI4ZDA3MDAsIDB4NzE0MWRjODIsCi0JMHgwNWJkNTUzMCwgMHg2MzJkZTdjYiwgMHg3MDUxMWNlOCwgMHg2MjliOWNmMCwgMHg5ZDhhYzFjMCwgMHhmOGJiZGY4MiwKLQkweDNmOGQzMzM5LCAweGQyMDE3OTM1LCAweDI4YjcxMGFkLCAweDZkMGUzMTI1LCAweDNlYTFhN2FmLCAweDZiNWY2NDY2LAotCTB4MDdlZGFhZmMsIDB4NzZiNDViNjYsIDB4Y2ZmYjBmOGEsIDB4M2NkOWRmMTAsIDB4ZGNiODQyNzksIDB4NDdmY2E2NjgsCi0JMHg3YWVhNWVmMSwgMHgxZmE0MTNlZSwgMHhhZjc3YWY4ZCwgMHgzZDdjNDBiZCwgMHgzZmM1ZGYxNCwgMHgwZTc1ZjJhNiwKLQkweDk4ZjdjNzI3LCAweDM5MWZlNDJjLCAweGVhMTY0YzYxLCAweGFmMmUzNTlmLCAweDE3Mjk4ZmVhLCAweDRiY2ZmOTAzLAotCTB4M2I0MDdjNDYsIDB4N2Q1OGRmMjgsIDB4OTE4OTUwYWEsIDB4ZTcwZjM2ZjMsIDB4NGJlNzY4NTcsIDB4YjA5ZjdjMDEsCi0JMHg2N2M4NTlhYSwgMHhjOGRiOGNjMywgMHg3ZGZkYjVjNywgMHhiOGMwZjVjNywgMHgwMzg0ZWVkMCwgMHg3Yjc2ODVjNiwKLQkweDQzNmVlNmFkLCAweDRmZTM3MGUyLCAweDJmYmM3MTUxLCAweDZlYjE5NzFiLCAweDA0ZWI5ZTIyLCAweDQyMGU4MTVlLAotCTB4ZTEzYTM3MTgsIDB4NWUzZDEwMzAsIDB4NGY3YmYyMjcsIDB4NThmMWYyYTQsIDB4YTY1ZjNlYjEsIDB4NDBkMGU4MTAsCi0JMHhmY2ZhNThmOSwgMHg5ZGE0NmI5OCwgMHhiNmVmYTgyZCwgMHgyMGY3MTM1YSwgMHhlODI3M2RkZCwgMHg2N2VkYTRlMiwKLQkweDNjZWY2ODg1LCAweDU5ZThiZjM3LCAweDkyYjNlYjk0LCAweDkxMjBiNTU2LCAweDg5M2FjNzVjLCAweDc1NzkzNWVmLAotCTB4NGFjZGUzMjEsIDB4MWFkYzgzMmMsIDB4YmZmNTgxZTcsIDB4N2NkNGZmMzMsIDB4ZDc1OWZjZWMsIDB4NWZkNDQyZDYsCi0JMHg3YmM2MGYyMCwgMHhhZmMyODc1MiwgMHgzNzA2OWZkMSwgMHhmYmQyMjFkMiwgMHhjMWM2MWQyMCwgMHhiYjExZDFhZiwKLQkweDBiMTI5M2ExLCAweDg4YmQ4MTc3LCAweDA0N2VjZDRmLCAweDkxZTc4ODRmLCAweGY5ZDFkOWFiLCAweGIyY2YxMTAxLAotCTB4MzQ3OWYzMzQsIDB4NmJlZTA4ODQsIDB4OWU1MDBmNWMsIDB4MDE5OWU1ZDksIDB4NjlkNjA3OWYsIDB4NzIwZmE0ZGUsCi0JMHg1OWVjNmMxNCwgMHg3NmUzMDYzMCwgMHhmZmI0ZWYwMCwgMHhlZGUzNzg0YiwgMHhhN2NiMmZlNSwgMHhiNThmODkxZSwKLQkweGZiMzlhNWYxLCAweDM4M2E5ZjI5LCAweGQ1Zjk0ZWQ3LCAweDY5M2U0NWQzLCAweDcxNDBkZWIwLCAweGM4YWJmMDc0LAotCTB4OTY2MjZmMWUsIDB4YTlkZGNhMzAsIDB4ZjJkNWJlYzIsIDB4M2M0YThmZmMsIDB4YzI3YTE5M2UsIDB4YjE4YmVlYWMsCi0JMHg1OWU2ODc5MywgMHgxZGM3OTRhYiwgMHhiMWYzYzE1YSwgMHg0NmUwZWQwNywgMHg5MDYwZWM5NSwgMHgwNTczYmFkYiwKLQkweDc2NWNhNWVkLCAweGQyYWVkZmI3LCAweDI0YTc5OTc5LCAweDgwYjQzZWRlLCAweDdkYjNkYzUxLCAweGU0NWZhOGI2LAotCTB4NThmNzZiMGMsIDB4N2NkMTY5NDgsIDB4NDYwZWY2ZjcsIDB4YzhlZWRmZjQsIDB4NTk0Y2ZhYTcsIDB4MTZmZGNiOWMsCi0JMHg3OWVkMzdkNywgMHhiZjZjNGZkYywgMHhiN2VhODhiOSwgMHg1MmM3ODQyNCwgMHg4N2Q4OGY1ZSwgMHhmNWZiODFkZiwKLQkweDdmMWZiMDVmLCAweGUzZjM0NzlmLCAweGIwNzUxYzc4LCAweGEzOGE3N2ZjLCAweGI0MGNlYTNlLCAweDJhMmRmZDIxLAotCTB4ODExOGU1ZjEsIDB4M2M0Y2VhNWUsIDB4YmFmNDBhOWUsIDB4N2E2MTg3YjMsIDB4ZmEyMTczNWYsIDB4ZTZiMmQ3M2IsCi0JMHg0NDA1MGM1NywgMHgyZTkwNWJhZiwgMHg3YTA3OGRlNywgMHhlYmQxZDAyZCwgMHg5NzA1NGY1NiwgMHg0Njk3MDhkYiwKLQkweDVhNzQ4M2FmLCAweDE3Mzc5ZjFjLCAweDc2ZmI2MzA4LCAweDliOWZlNzU3LCAweDMyZTgzZmQwLCAweDMwZGU3OTdiLAotCTB4OTc4YzgzY2YsIDB4MmNmMDMxMGYsIDB4NmUzYzM4NTQsIDB4ZjY3ODI2NTksIDB4YzFjNGZmMTMsIDB4MTM3YzI5NzMsCi0JMHg4Y2U5YTc0YiwgMHhmYzQ4YzdmMywgMHg5MGIwYWU5MywgMHgzZmNhMmNhMywgMHg0ZjAzNTk0ZiwgMHg3YzgzYjhlMiwKLQkweDBiZjcwZjc0LCAweGRiMmRjMDg3LCAweGJhNmU5ZTg5LCAweDA1MTdlZjk5LCAweGUzZWY1YzZkLCAweDhjMDY1MWJlLAotCTB4N2Y4YzViM2YsIDB4ODY3ZmFiNTMsIDB4OTZjZGRiMGIsIDB4ZTFiYTFlMzgsIDB4MWNmZjAwN2YsIDB4YWJiYjNmNTEsCi0JMHhlNmM2ZjI5MSwgMHg4ZTllMzBjYywgMHg3OTM0NzNiNSwgMHhjZDUzZWRhOSwgMHg3NDZmZWQxMywgMHgxZTYyMzZjZSwKLQkweGZkMWFkY2Y3LCAweDViYmNkMGZlLCAweDRkZDRmZWY4LCAweGNjZmRmNTczLCAweGEwM2UxYjYzLCAweDZjZDY0NmZjLAotCTB4YmJjZGZjNDQsIDB4OGFmZjVmNDUsIDB4Njk1ZjcwNjcsIDB4M2QyYmVlMGMsIDB4MDMyOWUyMmIsIDB4NDdjODI3YzAsCi0JMHhiMjVkNGRiZiwgMHhmM2EwNzZmMywgMHgyOTJmM2YzMSwgMHhjY2NmMzhjMywgMHg5YmJkODZiNCwgMHg4ZWU4ZmNhMSwKLQkweDZkZmU1NDcxLCAweDc0N2ZmN2RhLCAweDE3NzdlYjBhLCAweDQxODY3OTUxLCAweDkwYzdlN2UyLCAweDhhY2Y4MTBmLAotCTB4MmViZTZmMmIsIDB4ODlmNTExMmYsIDB4NDY3NmY3ZTgsIDB4ODEwOTNkZWYsIDB4Y2VkMGQ5ZjYsIDB4ZjI5ZjMxMzMsCi0JMHhmODg4NjczZSwgMHg1ZTIyYzBjMCwgMHgwNzI0ZmQ3ZiwgMHg1NWJkZWQ0ZiwgMHg4Y2VhZjhhNSwgMHhlNDdjYzg4NCwKLQkweGZmNGIxNzgzLCAweDkwZjMwY2IzLCAweDcyOGJlNDY3LCAweGIwZTM1M2Q5LCAweGMxZjRhY2ZjLCAweGZkNjdkNDdjLAotCTB4ZDcwNTc2OGQsIDB4Yzc5MzI5YTEsIDB4NGIxN2M3YTUsIDB4ZTIyNzYzZGQsIDB4N2ZkMTJjNzksIDB4NGQ1NzlmMjMsCi0JMHg5MTMyMmZkOSwgMHhmMTU0NjY0ZiwgMHhhNzdiYzY3ZSwgMHgzYjYwMTZiNSwgMHhmNzJhNzljMywgMHgxMTEyNWE2NywKLQkweDE5YmYxYWZmLCAweGQ5YTQxZjg0LCAweDI3MjE3ZThkLCAweGQ5YmRmNDllLCAweGZhZmQwMjkyLCAweGE3MTc5MjJkLAotCTB4MjZmMjlmZTgsIDB4OWQ5ODE3YzUsIDB4ZmJmM2E3OWYsIDB4NmI4YzE0ZjIsIDB4M2NmMWY3NGYsIDB4ZDhhYjZkZDUsCi0JMHhiNmYzYjQyYSwgMHhkNjUzZTk1ZCwgMHgwYjc0ZmQ0MCwgMHg3YTA0ZjVhMywgMHhiZDIwNjUzNywgMHgyNzIwZmU0ZiwKLQkweGFlY2M4OTExLCAweDllOGQ3N2E3LCAweDNlNzQ2YjY2LCAweGMwY2Y0ZjQzLCAweGZlZmM3NmE3LCAweDhlYjVlNGNiLAotCTB4N2E1MWFkOWUsIDB4MDljZTI5MWUsIDB4YTA2NDY1NzAsIDB4NWU5NmY4NWMsIDB4MTM4ZTBkOGYsIDB4ZTNmMThmYzcsCi0JMHhmMDI3MjQ4ZSwgMHg0NmRlNTYyZiwgMHhiZTI0ZWJlMSwgMHhiZmVjYzJjYiwgMHgzNmNiZTQwMiwgMHhlMWM3MmY4ZCwKLQkweDFlODY0Y2ZjLCAweDJiOTQzZjNhLCAweDAxZDFjNzc5LCAweDBiNWUyOWRjLCAweGZlMzhiOWU5LCAweGM2Y2JlMGQ0LAotCTB4NTBkOTcyZDgsIDB4ZDE0ZmYwYjgsIDB4ZTdmZTUwZWMsIDB4OTY0M2Y4YzYsIDB4N2NlZjg3YTgsIDB4MTcwYTM5MmMsCi0JMHhmMTE1M2Y4YywgMHhmMGUxZWVjMCwgMHhiOTlhOTJlYywgMHg4NjdlMTE1YywgMHhkMjY4YjcxNiwgMHgzZjU4N2JlNiwKLQkweDdlMDRjYWRmLCAweDcxODNkZjhlLCAweDI4NWJkYTI2LCAweGY3MDgzNzFkLCAweDM2ODNhYzI1LCAweGRmZDBhMDlmLAotCTB4ODc3ZTJkNzMsIDB4MWRmNmU2MDksIDB4Y2ZkMTFkNTcsIDB4YmE4MzQxNzcsIDB4ODExZDVkNzAsIDB4Mjc5YzIzNmYsCi0JMHhlODYzYTEwYywgMHgzZTYyMmQ4ZiwgMHhmYTA2NWZkYSwgMHg0NDU0NjdmMCwgMHgzNzgzNGJkNywgMHgyMzRkNGYxZSwKLQkweGY5ZjhkMWM4LCAweGJhMjdlM2M0LCAweGY4MTkzZDZlLCAweDBkZTdjZWQ0LCAweGU3MTJmN2NlLCAweGI4OWY2ZjE5LAotCTB4NWY3OGZhNGQsIDB4MjVjYjg4YjIsIDB4YzU3MGUzNDcsIDB4MTJjMzVmNTgsIDB4ZjM4NzE0YmMsIDB4ZDViZmU0NGEsCi0JMHg3MjgxYmQ4MCwgMHg1MTlhYTZiOSwgMHg2ZWQ5MjQzYywgMHg2NjljMzhhMCwgMHgyN2M0OGM3NywgMHg0OGM1NWY1NywKLQkweDYzMmNkNTRlLCAweDlmMjA1Y2UyLCAweGE2M2QzYzVmLCAweDkzMWZkZWIzLCAweGI3NTE2YmZmLCAweGFmN2U0NDJmLAotCTB4ZjBmMmViYjcsIDB4NmUzY2VjNmIsIDB4MWI5MzVlYmYsIDB4ZjUwMmI3YWMsIDB4ODg3OTYwZmMsIDB4NDBhZGVmOWUsCi0JMHhmZjdmMTNiOSwgMHgxZTQ1Y2Q1NywgMHgyOGJlNGUyZiwgMHhmYmM2YjNkMSwgMHhmOWVhMDU2NiwgMHgwYWRlZWFlNCwKLQkweDI0MGY1Zjk0LCAweDc1YzVlZWY5LCAweGUzYzBjMzdkLCAweGRjZjhmMWVhLCAweGUyZDA2MTlhLCAweGE3NDQ5N2M1LAotCTB4NzgzNDdjZjEsIDB4ZDgxMWRhY2UsIDB4ZjE2OGUzODEsIDB4MGY1MjczYTQsIDB4MzhhNjRmOGYsIDB4M2M4MWZmNDUsCi0JMHg0YmEwNjdhNCwgMHgyMDY2OWEyMywgMHgxY2ZmM2YyNywgMHgzN2ZjNTE5ZCwgMHhmNzI2ZWRlMCwgMHg3YjljOWFlZCwKLQkweDE4ZGNlNDk4LCAweDVjZmRkN2ExLCAweGJlOWNmODllLCAweDRlMWMxOWJkLCAweDAyMWRjYmMyLCAweDllODUzMzJmLAotCTB4MjY1M2JmM2QsIDB4YWY4NjY0M2YsIDB4YTE2ZTJiNzgsIDB4YjIzNzlmMDQsIDB4OGZiMWYxMzAsIDB4OGY3NmEzZjQsCi0JMHhhODMwNzlkNywgMHg2M2ZkYjFiYSwgMHg0YmI3ZDIwZSwgMHhmZGEzYTg1ZSwgMHgwY2RiMzFhNSwgMHg5N2QxOGQ0YywKLQkweGJhMDljMzYzLCAweGVmYzY0MWZiLCAweDI3OTVkNjRmLCAweGRhZWE2Njc0LCAweGFmOWMzYTRmLCAweDFlZWQyZmFiLAotCTB4ZWNiZmFiYTcsIDB4Yjk1ZDMyZjksIDB4YWVhYTY3YTIsIDB4YWI1N2U0ZmQsIDB4N2JjYmU1NzQsIDB4N2ZiNWQzYWYsCi0JMHhlMDNkZjUwNCwgMHhjY2VmNWJmNSwgMHhlZmZmYmRkMSwgMHhjNzllYjMxZCwgMHgyMzJiZGNmZCwgMHg3ZjdkZDNkZiwKLQkweDU4MTljNDQ2LCAweDBjNTNkN2M4LCAweGQxYTg1ZmYzLCAweGRkNWFjNWVmLCAweDc0ZDY2MGY3LCAweDA3Mjg5NTRiLAotCTB4MGRjMmRmZjgsIDB4MWE3ZDRmM2MsIDB4YmZiNjJjNjAsIDB4N2I3YTZkNDUsIDB4NTA4YjI2NjIsIDB4NTg1MzVmN2UsCi0JMHhjYzMzNzZmMiwgMHgzN2Q3ZDM1MywgMHhiYzIwZWUxYywgMHgwMTNkZDk3ZSwgMHgwYzBiZGM2MywgMHgxOTdkMGY0OCwKLQkweDg1OGM2NzYwLCAweDE0YjBhNDdmLCAweDg5MWJiM2NjLCAweGZkNmNiZmZmLCAweGQ3ZTE1ODhiLCAweDQ3YjM3ZjVhLAotCTB4NTU1NmZlYmYsIDB4NjJiNmZlYmYsIDB4YmMzYmZhZmQsIDB4OWE0ZmY1ZmEsIDB4OTc3ZjVmYTIsIDB4MjlmZWJmNGYsCi0JMHg0ZmY1ZmFkNSwgMHgzZmQ3ZWJmNSwgMHhmZDdlOWU3ZCwgMHhmNWZhMDIzMywgMHg1ZmFmNTUxZiwgMHhmZDY2ZWNmNywKLQkweGQ3MmVlNzdhLCAweGU4NWU2YmFmLCAweDM2ZmRmZDM2LCAweGQxYTA3NDcxLCAweDBiNGYyNjkzLCAweDc3MTFkZGQ2LAotCTB4MTk4MThlMWYsIDB4YTM0MmU4NjIsIDB4N2FmZTg1YjMsIDB4ZGQxYTVmY2EsIDB4NzhkZDEzZjYsIDB4ODYzMWY0ZjEsCi0JMHg2ZmNiYmM4OSwgMHg5OTg1MWY0OCwgMHg3Zjk4MTc0MCwgMHgzZjkyY2M5OSwgMHgxYmVmM2QyNywgMHhkNDNhOTk5ZCwKLQkweDU2ZTRkMGJlLCAweGY1OGYzZWFjLCAweDY3OTI0NzhmLCAweGYwOTRmNDQzLCAweDUzZDQ0Nzk3LCAweGEzNWIyZmU4LAotCTB4NzQ0OGYyZmUsIDB4ZmQwMzFhZmEsIDB4YTA2ZjgzNGEsIDB4NGVjZGQ4MzgsIDB4MDQ4OWM3MGUsIDB4ODg3ZmI3NmUsCi0JMHgzYjQzOTc1NSwgMHhlMDA1MzM2OCwgMHgwM2U3MGQ3ZCwgMHgzMDk2YmZlMywgMHhkZjFkZTI5ZSwgMHgxYzQ2OWQ2MywKLQkweDQzZDYxNmY3LCAweDQyMmNmOWNmLCAweGVhNzMwMGNmLCAweDY0MmM3ZGNlLCAweDdmODg5MzdlLCAweDgxNTk5NzVjLAotCTB4NGFkZTkxNzEsIDB4MTYxN2EzOTQsIDB4ZjY4MzdhOWMsIDB4Yjk0YzVlYjMsIDB4NGUzMjdiYTQsIDB4NjhjOTdlZTMsCi0JMHhiOTBhY2VjNiwgMHgyNmZiODdkMSwgMHg4YWI3ZWU1MCwgMHhhOThmYTA3OCwgMHg5ZTdjMThlZSwgMHhkYWNiZjExNSwKLQkweDU3ZTkxMmU5LCAweDdlNTAyNzI2LCAweDI1NzdlZDU3LCAweGZmYjU0ZmQyLCAweDk5NzU5ZmMzLCAweGZmMWVhZTNjLAotCTB4YzM1Y2IzNWMsIDB4MGJiMDliNmIsIDB4NWY3MDdkYjgsIDB4YmJmNTRhYTYsIDB4YjI3NmFhNjAsIDB4OTQ0ZWJkNDMsCi0JMHhkZjFmZDBmZiwgMHg0NGQ4NzhjNywgMHhjMmM3YjlmZSwgMHhhMjk1MDRlMSwgMHhlM2E2NGM1YywgMHhiOGVlYjQ3NCwKLQkweGNiZWU3OGZlLCAweDRkZjBlMTYzLCAweDIyZTU5ODUwLCAweDAyY2YxZmJjLCAweDk1ZGUxNzY0LCAweGRmZmQ0Zjk5LAotCTB4ZTM4ODgwYWIsIDB4ZmVjMzhmZmQsIDB4MTU2ODRhM2QsIDB4YzA3ZmQxYzUsIDB4NWJmNDcxZjQsIDB4YTM4YTI1OWEsCi0JMHg4NWUwMDBmZiwgMHhmNWU5YzdhNywgMHhjYWQ2MWVhMCwgMHgzM2JjMDVhYiwgMHg0ZmJjMWRiMCwgMHgxODRiMzRmNywKLQkweGZkYmFmYWZmLCAweDc4YzNmNjBkLCAweDc4ODdmODNmLCAweDU5YTFlMmQ3LCAweDU4NjY4NzQwLCAweDYwM2ZiZGQ3LAotCTB4OGY4YmNmMTQsIDB4NDE5MjhlOGIsIDB4OTNmZTYzYTIsIDB4ZjdhYjlmOTEsIDB4OWZiOGRiMjgsIDB4ZDRlYmQyN2EsCi0JMHhkMTk4N2RjNSwgMHhiZjIwZTc4NSwgMHhiY2MyZGVjYywgMHhlNzMxYjNlNSwgMHg4N2JkNjAwYywgMHhlOTc0N2ZiZCwKLQkweGJmMmZiZTI4LCAweDMxNjc2NTY2LCAweDRmZDg4ZGQxLCAweDdlZTU3YmJjLCAweDk3OGFjYjJhLCAweDNlZjEwYWYyLAotCTB4ZjdjYzU3MmEsIDB4YzdkNDM3MjYsIDB4ODc2MmJiZjAsIDB4OTBlNDYzZWYsIDB4Y2JhN2VlZDEsIDB4ZDk1OWVlNTcsCi0JMHg0Njc4ZmI0MywgMHhkYWQ2NmY3MSwgMHg4MTljM2JhYywgMHgyZmM3Nzg5OCwgMHg2MzFkODUzMywgMHgxYTY3MzEwOSwKLQkweGZjMzdhNjEzLCAweGUxOWQzM2JkLCAweGU1NGVjYWZhLCAweGNiNWZhYzZjLCAweDg4NmM5NzllLCAweGNmNDE0NmI3LAotCTB4ZDdiYTA5MmYsIDB4NjA3YjM2ZTAsIDB4NWViODE4YmMsIDB4ZThkZWY0MTIsIDB4M2NlMTMxZWMsIDB4ZThiNTgyNWUsCi0JMHhkMmI0YjhjMSwgMHhkM2ZiYTZlMywgMHgxYzkzNzE2ZSwgMHg4M2FjNDFiYSwgMHg4ZGQ0YTBmOSwgMHgwYWNjNGFlNywKLQkweDVlYzVmOTllLCAweDgzMmZkYTdhLCAweDY0YmNmNzI2LCAweDc2ZWZiODY0LCAweDI0MzVjNTRmLCAweGNkYzk0ZDRmLAotCTB4OGZhMDZlZGUsIDB4YzhiNGJlMWYsIDB4YWYwNjE4MTksIDB4NTFlY2QzZGEsIDB4YzVjYWM0MmUsIDB4NWY4NTMyZTcsCi0JMHhjNjRkOTkzZSwgMHgxZTA2MTk3NSwgMHg3NDNmOTNkMiwgMHg1ODdlNmZmMiwgMHg3ZTU4ZjNjMSwgMHhmOTQ2MDNmOCwKLQkweGZjMzk2Y2VkLCAweDk0ZjE0NjU1LCAweGY3MjRiY2NhLCAweDJmNDIyYzVjLCAweDA2MDRhYzM3LCAweGU4ZjYwMzFjLAotCTB4OTgwYjBiNGEsIDB4NjZiMjFmNDEsIDB4OThkMmQzYjIsIDB4NDM2OWU4OGYsIDB4M2FkZThiZTksIDB4ZjY1ZWNlZjgsCi0JMHhjZmY0NjJiYiwgMHhhZmY4YWJlZiwgMHgyYTNiMmM2NiwgMHhmMmM3YWY1ZiwgMHg3NThmYjFmYSwgMHgxZDlhMGU2MiwKLQkweGRlNTM3MTYxLCAweGUwYWYxODUwLCAweGFmZjcxODRjLCAweDNiNjM1N2ZiLCAweDFmNzk4ZjdjLCAweGUwMWVmMGQ1LAotCTB4NTc0Mjc3YjksIDB4MjZkYmRiMDQsIDB4ZWIwNzdkMWUsIDB4OTZkZGVjMTMsIDB4ZTEyZWY4MDIsIDB4MDA1NWU2MTYsCi0JMHhmMmRlYTk1ZiwgMHg3NGYwMDU2OSwgMHhiMDJmNDM5NSwgMHhiZGYxMzZkNCwgMHgzN2VmMGE2ZCwgMHhkZDI2YmY3ZSwKLQkweDQzZGY4N2JlLCAweGZiMTMwNTczLCAweDA0NWVmY2EyLCAweGQ1MjMzZjZkLCAweDBhYWRhN2JlLCAweGJlYTE1NmU1LAotCTB4OGY4MTQxZmUsIDB4Y2ZlM2ZiMTQsIDB4MzAzZDYzZTcsIDB4YWQxNjY4ZGMsIDB4YmJkNDQwN2YsIDB4NTRmNzhmZWMsCi0JMHhkZDE2NWNmMSwgMHhmZjQ1OWJmNywgMHg5NzAzNzY0OSwgMHhmYjEzMmE1NywgMHg5MzdlYmNiNiwgMHhmNTZhYjdhOCwKLQkweDY1ZjYyNjFlLCAweGE4YWI3ZDc5LCAweGRlNzlkYjM3LCAweGVlYjdiMDEyLCAweGZjNjJiNWZiLCAweDJjMGM1YmI0LAotCTB4ZWVjZjQzMTAsIDB4MTAyYzA5YjksIDB4MzVjOTFmNDMsIDB4ZDFiMmJhYzksIDB4M2IyNWNmY2UsIDB4YmVlYTY0NjcsCi0JMHg1YmJkZmFkMywgMHg0NTc4OWI4YywgMHg0YjNiZWViZSwgMHhmYjdkMzhlMSwgMHhjZmE0YzliOSwgMHgzNjc4MTBlZSwKLQkweGVhZTk5NTY1LCAweGFjZmVmM2I1LCAweGYyNzNiNDVkLCAweGFhN2I4YTc2LCAweGFhZjNkZmFlLCAweGUwNzI4NDlhLAotCTB4ZGQxYWU1ZWMsIDB4Yjc0ODJkN2EsIDB4ZDNmMjM4NzcsIDB4YmMyMWJmNzEsIDB4YTMzNTNhMTIsIDB4YTc4OGIxM2MsCi0JMHg2ODNkM2M1MywgMHhhNTUzYzA1YywgMHg3Yjg4OWU3MiwgMHg4NTM5NTlhZSwgMHg2ZTgwN2JjYSwgMHg5NWExZmViMSwKLQkweDgyZWYyYTVlLCAweDlmY2YwYWIyLCAweGJjMmEzZjQzLCAweDYwZmQwZWRmLCAweDgzZjQyYjc5LCAweDFmYTEwN2NmLAotCTB4ZTMwMDNlN2MsIDB4Zjg2NmZkNjEsIDB4YTA5YmNiMGUsIDB4YjdkZjJjM2YsIDB4N2JlNTQ3ZDIsIDB4Yjk1MzU2NTcsCi0JMHhjYTlmYTU3NSwgMHhhM2NlNTc2YiwgMHgwMzJiZGRlNywgMHhiMmIzNWNmNCwgMHg4ZTY3ZWE5ZSwgMHg2YmVkZmFlMiwKLQkweGIzOTQwNWU3LCAweDk5ODBiY2Y4LCAweGU3YTIyYWEzLCAweDgwYmNiNDNhLCAweGZlZjBkMzBlLCAweGI4YTNjZGRjLAotCTB4ZmU2NWNjMWMsIDB4ZmU5YzJkYTcsIDB4ZWNjODllZTksIDB4YTM0ZjlkMGQsIDB4ZTdlMjliZGYsIDB4YTFiMTkxZWIsCi0JMHhkNTVkZWE5OSwgMHgzYmVkMWM3YywgMHhhY2IxMGVlNiwgMHgxNThjN2U0YSwgMHhlYTRiZjVkYiwgMHgxOTk3Y2E2YSwKLQkweGNjZWFlM2NiLCAweDI1NmE2MjEzLCAweGZlOTc0ZWJmLCAweDEzZTkwODk0LCAweDVmMmY1OGE1LCAweGRmYzNjY2YzLAotCTB4ZTMxMDFkNTMsIDB4M2VjZDg1YzgsIDB4OGE2NThlOWMsIDB4YzRmMzFiYmYsIDB4OWQwMGRlZWQsIDB4MDhiZGNmZWYsCi0JMHg5YjFmODM5ZCwgMHhhNjJhZjE3NCwgMHhhZWUyZTk4MiwgMHhjOWQxZGJkMSwgMHg3Njc0Y2EzMywgMHg4OWIxN2NhYSwKLQkweGJlYjI1OWRhLCAweDcyNjc2YmE3LCAweGQ1ZGFlYWQ3LCAweGM3YmJjZDJlLCAweGM1MThmODgzLCAweGIwZGU2MWU3LAotCTB4YjhjMDY1OGEsIDB4ZDMzN2RhOGIsIDB4YmFjNWViYjgsIDB4YmRmOTdjYzEsIDB4M2UyNDA3ZDYsIDB4M2RiZjYxNWYsCi0JMHhiNWYzMTRlYSwgMHgzYWI5MjA2YywgMHg0NThiYzVjNiwgMHhjYTAzMjE0OSwgMHg5ZDdmZjdjMywgMHhjOGZhZmM0NCwKLQkweDQ3OGEwNjQzLCAweDAzNjE2NThlLCAweDUwNzhkN2FlLCAweDgxM2Y1OGQzLCAweDEyNzk1MmY1LCAweDk3Mjg1NzRhLAotCTB4ZjJjNjU1MzIsIDB4N2U0MjJjNjUsIDB4YWI2ZmQ4MmUsIDB4ZTQ5YjlkNzEsIDB4Mjg1NjQzYzAsIDB4M2MwZWNiOWYsCi0JMHhiYTkxZjNjYSwgMHg4OTE0YWY0OSwgMHhlY2QyMjhmNSwgMHg3YzRhNmRkOCwgMHgyOGRkNmY3YywgMHhlN2Y1OGZmMiwKLQkweDliZjdlMjk1LCAweGQzMmEzOTU3LCAweDFmZThmZWQxLCAweGU2Y2M3ZjIxLCAweDQyZGNmMzM5LCAweGUzMmRiZmMwLAotCTB4ZWY2YTdhNGQsIDB4YzMwZDU1ZWYsIDB4Nzg3ZGUzOWUsIDB4ZjJjZGY0OTQsIDB4ZmJmYWMzM2UsIDB4MWZkZTgxYjgsCi0JMHgyYjljNzljNiwgMHg1ZTY2MDNmOSwgMHgwOGMyYTZiMSwgMHg4YzZiMDlmOSwgMHg5MzUwOWM5YSwgMHhlY2I2M2Q5OCwKLQkweGYzMzE2MjRkLCAweGFiZTU2NDc4LCAweGVjMDkwYTA1LCAweDc2NGRlMTAwLCAweGU3Y2M3NDZhLCAweGVhNTI3ZjJiLAotCTB4MjJhNjNjYzQsIDB4N2ZiOTM3OTEsIDB4OGNlMTQ2NjUsIDB4N2JlZmQxZDEsIDB4YjMxNDFkMDQsIDB4YzVmZjkyNGUsCi0JMHhmYzk3ODM2ZSwgMHhlNzUzOWY0OCwgMHhkYjBiNWE3NywgMHg0NDVlNzg3YywgMHg5OGJjYzcxZSwgMHhiNTk2MzM2MywKLQkweGY5NmIzOWQxLCAweDIzYzkzMjZmLCAweDRjYjVjNGY5LCAweGMxMjNiYjA1LCAweDdiMjE2NjE5LCAweGZjMjY1ZmI0LAotCTB4ZjkwOTFmZDcsIDB4MDY3ZDkxZjksIDB4NjhlNzJmYzEsIDB4YzhmOWUxZjcsIDB4ZTljOGY5ZGUsIDB4ZDQ5ZTYyNzUsCi0JMHhmYTQ2ZWQ0NywgMHhhZmFkM2U0OCwgMHg1ZjdhNzYyZiwgMHgyZTlkMDAwZCwgMHgyMmYzNjgzZSwgMHg2ZGM1MDk3OCwKLQkweGJjYTAzZjc0LCAweDEyNTk2MjViLCAweDIwZjNjMWMxLCAweDZjYmRiOTkzLCAweDQyYzk1NmRjLCAweDFiNTc5ZWIwLAotCTB4YmYwOTg3MDIsIDB4ODMyMWVhYmQsIDB4NWRhMWZjYTYsIDB4ZWU4OThhNjMsIDB4Nzg4MzFmNjcsIDB4NmU1ZTIzYjEsCi0JMHg0MzgxOWMyZSwgMHgxZTEzMTYxNywgMHhiZjc5ODkxNywgMHgyNmIxZTYyNSwgMHg4MGJmYzM1YiwgMHg3ODdjZjk4NywKLQkweDc2ZTJlMDlmLCAweGNmZDZlZmNkLCAweGFhOTJkZWYzLCAweDRiN2Q2MzZmLCAweGEwZjk0YzhmLCAweDk3M2NmOGYxLAotCTB4NDRjNGE3ZjgsIDB4ZjFkYWYwNTgsIDB4NzAwNDZlM2MsIDB4YTBmYzg1YmUsIDB4ODgyOWRjMjAsIDB4YjY5ZmJlNWYsCi0JMHhlMzBhNjljNCwgMHhhOTdlZTAzOSwgMHgzMGYyOWFiMywgMHg3ZjI4MTgyNywgMHhkZjJlOWUzNSwgMHhmMzY4ZjYxNywKLQkweDZkM2QyNzI4LCAweGNmNDRiMzllLCAweDczZGY3MmQxLCAweDdmYzg1MzBiLCAweGFlZDY3YWUwLCAweDlmMTZiY2YwLAotCTB4Zjc4ZDhkNGYsIDB4MjhlMmQ3YWQsIDB4NDEzZjVmMjIsIDB4ZGY3ODNiYzAsIDB4NDc5ZTM4ZDgsIDB4ZGIzZDY3NjgsCi0JMHgyNDY2NGYzMCwgMHg5NTkwYzZiZiwgMHhjMGQ3ZTcxNywgMHg1NGZkMjBkMiwgMHg2NTFmMjg1OCwgMHhhNGU3OTZiZCwKLQkweDhmMjk1MjllLCAweGU3OTg5ZTFiLCAweGJhNzQxMTY0LCAweGI5ZWZjMWQ2LCAweDNhMzdlNmQwLCAweGQxZDFjYjhiLAotCTB4MDZmZjljNTksIDB4ODZkZTVhMmMsIDB4MjYzNGE2YWYsIDB4YWJiNmJmZmYsIDB4NmQ3NWZjOGUsIDB4YzQ0MDZhM2YsCi0JMHhmNDEyMDY0OSwgMHg4MjBkNDdmYiwgMHg2ZDllMDYxNCwgMHg3ZGMwNGFhYiwgMHgxZmJlMzY5MCwgMHgzZDc1ZDBkNSwKLQkweGQ4ZjJlZmJmLCAweDI4NWY3NDAzLCAweDNkMjJhOWY0LCAweDc1ZjY4OWQ0LCAweGZhZmVmNGViLCAweGUyMDFmZGEyLAotCTB4NDA3OGY4ZDcsIDB4OTgwZmZmYmMsIDB4MWU1ZGExMzMsIDB4NjdlN2ZmZWYsIDB4Y2JkZjdmMDksIDB4ZTliZjcxNGEsCi0JMHg5MzgyODZjYywgMHgyOWI3MDAwOSwgMHhkMWI5ZDE4ZiwgMHg3NGUzZjI1MSwgMHhhNTU4M2JlZiwgMHgyNmNmNzg2ZCwKLQkweGNhZjdlMTJiLCAweDBmZmZhZmM0LCAweDk3ODQ0ZGIyLCAweGRmNWYxMmZkLCAweGYxM2I2OGQwLCAweDJlMGFmZWMxLAotCTB4N2QzZmY2MDcsIDB4MjhkMTg2ZmUsIDB4N2QyNTcyY2YsIDB4OTFhZTcxM2UsIDB4ODE4Yjc3ZGYsIDB4YzlkZjc4N2UsCi0JMHhmOTcwZjU1OCwgMHgwY2IyMzM2MiwgMHg1ZmNmNGNkZiwgMHg4ZDdiOTdhMSwgMHhkYTRmN2I4NywgMHhkMzdmOTI1NCwKLQkweDRmM2Q3MGIzLCAweDg0YjEyNWZlLCAweGY3NDIyOGY4LCAweDgzYjlhM2U2LCAweDc4ZGMyMWUzLCAweGUxODBlMzZlLAotCTB4ZjRiMWY5ODMsIDB4NDUyY2RkZjAsIDB4NjZmODZkYzAsIDB4MWU4Njc4ZjIsIDB4YWYyNTczYWUsIDB4ZTFjNzVkYTQsCi0JMHhmNTBiMjliYSwgMHhiNGU5Zjc2MywgMHgwZDdjN2NkOCwgMHhjMzU1MDNhZSwgMHhmODZlMmI5ZiwgMHgwMjlhNzhhNiwKLQkweDhiMGU1NGYwLCAweGMyMmZmYWE3LCAweGYwZDMwMWQzLCAweGMwNGNmY2YwLCAweGYyY2Y2ZmYzLCAweGQ2ODYyZWZiLAotCTB4NmRmYjQzN2YsIDB4MWVmZTFjNjcsIDB4YzUwOWI5ZWIsIDB4MzNmYmMwMzYsIDB4MmZhNzlmYzIsIDB4MDRjMmY2OGQsCi0JMHgwNWNiM2FmZSwgMHhmOTBiOTY3ZCwgMHg4OTVmMjVlMywgMHg0YzlmNWYwNSwgMHgwYTlkNjRmOSwgMHg3MmMxYTk0YiwKLQkweDJhZWY0MmU1LCAweDRhN2Y3YTM1LCAweGZjYTAxMGQwLCAweDc5YmFmNjdjLCAweDQ0NzdmOTU4LCAweDk5MDM4NWM4LAotCTB4Mzg3OGIwZDIsIDB4ZjRmOWU2MjgsIDB4YThiOWI1OGIsIDB4ZDU3ZGVlNjcsIDB4YjQyZTUwY2MsIDB4NWVmZGZiMDgsCi0JMHhlZjA1YTc2NywgMHg4OGYwZDU5ZiwgMHgwNjc4MzJlNSwgMHg1ZWM1OTE0ZCwgMHg2NDdmOTcyYywgMHg4Y2MzZWQ1MSwKLQkweDZkZTNlMDY3LCAweDZkMWJlMzhhLCAweGFiZjllZDNjLCAweDBmYWU2MmFjLCAweGNjNjU2N2E1LCAweGM1NzRkZmRiLAotCTB4ZDQyZjc0MmIsIDB4NjQ4NTcyYTYsIDB4N2ZjNmQ3ZWYsIDB4Y2U1ZTllYmIsIDB4NzY5MmJmNzUsIDB4NWY5N2E3MDMsCi0JMHg0OTM0YmQyMSwgMHgxYjdlMjU2ZiwgMHhmMjI5NDFjYSwgMHhjYmVlMDk3MiwgMHhmZjM0MDI5YiwgMHg0M2IxZTAyMCwKLQkweGVkYTc4YTFhLCAweGY5YjQ1ZTgyLCAweGUwZDdmMzY5LCAweDkwYjk1Yzc2LCAweDlhZjFjMWQ2LCAweDQxYzY5NDk5LAotCTB4MTdkMzVlZDEsIDB4ZTFmZjQyNDksIDB4NWM1ZjQ4YmMsIDB4MGY3M2YwYTEsIDB4ZmJhZDBhMTUsIDB4ZTk1MzI5YTYsCi0JMHhiMTAxY2E1YywgMHhkY2I5MWUyZiwgMHhmODNkZWMzNCwgMHhmNzZmMDI3ZCwgMHgwZjYzZmM1ZSwgMHgyZWExYjVmYSwKLQkweGMwMGJkZDIzLCAweDhkY2Y1ZTk0LCAweDRiZjEyZjc4LCAweDBjMzNkZDBhLCAweGY3OGQ1NGY0LCAweGUyZmQzZDFjLAotCTB4ZjNiNDQ0ZjksIDB4ZjJlMmNjZGUsIDB4MmUyY2NkZWMsIDB4Y2EyZTA3MGYsIDB4ZTQ1ZTc0ZDUsIDB4NzI5YzhmYzUsCi0JMHhjZTlmZmQwYywgMHg0ZDNlYzU5MiwgMHgwMzllMGY0ZiwgMHhmM2M2NThkOSwgMHgxZWMyZWRkZiwgMHg1N2Q4YmZiMCwKLQkweGE3ZGJmMDhmLCAweGM1MmNjNGZjLCAweGIyMWZkYmQwLCAweDQ2ZDcwNGNjLCAweDBiY2QyNDUzLCAweGM5OGYwNWZkLAotCTB4ODJlYzliYWMsIDB4NmRhZmJhNWUsIDB4OTM5YjljZjAsIDB4ZmNhOWExZTMsIDB4OGVmNjg2NTksIDB4ZTNkZjhiYmQsCi0JMHhlNTRiM2E3NiwgMHgzZWUwMTY3MiwgMHhjNjEzZWYwNCwgMHhjM2FjZTQ3ZSwgMHgyZjE4NzJmYSwgMHhjM2JkZmEzZiwKLQkweGExMzNkN2M5LCAweGIyYTNkZjgyLCAweDM4M2Y4YWU5LCAweDI0Yjg5ZWYxLCAweGM3ZmRkMTg5LCAweGVhMzZjODNmLAotCTB4NTdhZGExY2UsIDB4MmNlYzFjYjksIDB4M2I0MWU5ZWYsIDB4Mjg1NGU0MmUsIDB4ZmJiM2E3MmYsIDB4ZmJkYTBiMGUsCi0JMHhmMmY4NWYxYSwgMHg4YWQ3YmNmOCwgMHg0ZWQ3N2NmYiwgMHgzOWUzMGUyOSwgMHhkNzhlOGQxNCwgMHgyMDJlMDc2NCwKLQkweGJlMDQ2ZWRmLCAweGFmZWM5Yzc4LCAweGMyNzRmZjFlLCAweGYzMTRiMzhmLCAweDFlYjAyNzVjLCAweDk1ODZhZmJhLAotCTB4ODdjODljOWIsIDB4OGU4MzA2YzUsIDB4ZTZjOWFlZGYsIDB4NDEzZGEzNzQsIDB4ZjNkZDkzZmQsIDB4OWFiYjQxNjMsCi0JMHgyYzNiOTdkZSwgMHg3ZGI1Y2YwYywgMHgxMjc2NzE3YywgMHhiNjcyYTdkYSwgMHg5ZDc5ZWY2NiwgMHhlZDhmYzc4OCwKLQkweDdjNGVjOTczLCAweDBkZjZiN2ZiLCAweGRhMDc3OWIxLCAweDczZjAyZGYzLCAweGNiNDRjN2JiLCAweDU5ZmViYzhiLAotCTB4MGIzMTdlZDgsIDB4ZTk3NjgzZGMsIDB4Nzc1OTc2ZTIsIDB4YzE2ZGZmZGUsIDB4ZGEyZThiZTcsIDB4OWQ4Yzc3NTgsCi0JMHhmN2NhNjhiZiwgMHhhMmQyYmNlOCwgMHhmZWY0ODk4YiwgMHhmNDlmOTE2ZCwgMHgyYTRiYzhiNiwgMHg4YWYwZjMxNCwKLQkweGRmZDkxNWU3LCAweGM2ZjdmZWQwLCAweGZmNWRjYmM5LCAweDk3MmQ0OGY5LCAweGQwZDk4NTk3LCAweDZiZDRhMzZmLAotCTB4ZTM2YTdmNDIsIDB4YjlkMGJmZDQsIDB4N2ZjMGI3OTEsIDB4ZDE3ZjM2ZWYsIDB4Nzc1ODUzM2MsIDB4ZWQ4M2I4Y2MsCi0JMHg3NzU5NWEyZSwgMHhhOGJhZWM0YSwgMHhiZTc0NzcwNCwgMHg2YjdmYWE3NiwgMHhmMDRiZTdhNSwgMHhjNzg3NGEzOCwKLQkweDNhMDVmZjY4LCAweGJmZWQwZTNjLCAweDVhZGZlYTg4LCAweGZkMjVmYzU5LCAweGZmYTExZjhmLCAweGQxZmMxZDNjLAotCTB4N2RlOTBiN2UsIDB4NDdkYTg5ZmYsIDB4MjcyZmMwNmQsIDB4NzhlZjU3YmEsIDB4OGVlYmYzMGEsIDB4N2NmZWU5OWIsCi0JMHg4YWIzYjg3NiwgMHg5MmZkYWZjZSwgMHgzYmM2YjlkMSwgMHgwNmYyN2Y4ZiwgMHhiOWRkY2RlNiwgMHgzMWM1ZTRjNywKLQkweGY5OTE4YzA2LCAweDQzZjQ2MWRlLCAweGYwODY3MzIxLCAweDc5ZWQyOTFlLCAweGNkMDE3NjQzLCAweDQ1YmRmZTI3LAotCTB4MGYzMTNiMDksIDB4MzhhYzUyY2UsIDB4NTg1OTNmNTEsIDB4ZjEzNTc4NGYsIDB4OTNlNDg1ODMsIDB4ZmFkNzk3MTYsCi0JMHgyNjcyODcxZCwgMHhmNzZhM2U0NiwgMHhmNjJiYmM4NSwgMHgwYjYwZmY4ZCwgMHhjMGFlY2MyYywgMHg4MTU3ZjczMiwKLQkweDljNjIzNzczLCAweGQ5NjFlMWFkLCAweDc0MjFlZmM5LCAweGM1YTIzZjkxLCAweGYzZjQxNWJiLCAweGUzZDQzMDBhLAotCTB4ZTNmZTc4NjcsIDB4NGIwMzcyM2YsIDB4MGU3ZTZlOTEsIDB4ZGZlMzAwZTIsIDB4MDFiZDg0ZjIsIDB4ZmYwYTRmOGEsCi0JMHg4ZjZiM2VlZiwgMHhmNzIzMWJjNywgMHhkZjJiNjQ1NiwgMHg4YjZmZGY0YywgMHg3ZjE1MzdkMywgMHhlYjliYTQ3YSwKLQkweDhmMzgxNTliLCAweDU3ZTdiOTQ2LCAweDhlNzg3OWI1LCAweDFiZGM1N2E5LCAweDViZGQ5MmE1LCAweGVlOTI3ZTViLAotCTB4ZmNkNWFiOTcsIDB4ZmJmMTc1ZjksIDB4YjQyZWQ5ZWMsIDB4N2NmOGI1ODMsIDB4YTEzZmU2MjIsIDB4ZjNjOGRmYmUsCi0JMHhiYzZjZWJlZiwgMHgxNGZiZjc1YywgMHg0Nzg5Y2YzYSwgMHhlZjEwNGE0NSwgMHhkZjk3YjI5ZCwgMHhmYzI0ZTgyYiwKLQkweDBmMzAxNzllLCAweDIwZTYzNjU4LCAweDllMDQwNzdlLCAweDQzM2Q3N2NmLCAweDVmOWUxOGY3LCAweGEwZTg5YTM3LAotCTB4YTUzZjM3ZWUsIDB4NjQwZWM5N2IsIDB4NjNhY2ZjOGEsIDB4NzU0M2QyMGUsIDB4ZGUyNTZmNjYsIDB4OTMyMDc3OTMsCi0JMHg0YTlkOWJkYiwgMHg4YzU5NjI3NywgMHhhYjM2YjlmZCwgMHhmYmViZTQ4YSwgMHhkMDFiNDZlYiwgMHhiYWYwZDczZSwKLQkweDhkODVjODUzLCAweDg5NTAzYzVhLCAweDZkZmRlMjU0LCAweGJmNzc5N2VmLCAweGEwZjA3YTRjLCAweGM2ZTc3ZTk1LAotCTB4NGE5M2U4NzAsIDB4YTM3MTRmYmEsIDB4YWZhNWVlOTksIDB4Y2I3NjM0M2EsIDB4MmM2ZmE4M2MsIDB4YThiZTUwMzIsCi0JMHhlMDk1OTBlMSwgMHhkZjllYjczOSwgMHhhMmRmODRlZiwgMHgzNDNjNmViZSwgMHhhODBmN2U4YSwgMHhiY2ExMTZjZSwKLQkweDZmMDRjNmFlLCAweGQ0OTdlZTExLCAweGRkMTZmYTFkLCAweGJlZTY3ZjI3LCAweDM3MjgzOWIxLCAweDM5YWFhNzRmLAotCTB4N2RlZTdmNzQsIDB4Zjc5ODc0ODAsIDB4Zjg2MzYzZTksIDB4NzRjOWQ2ZmIsIDB4ZDFiMWQyNWUsIDB4YWUyZTE4MTYsCi0JMHhmODkzZTlhMSwgMHg2NDBlYTNmYiwgMHg0NjFmZjY5NiwgMHg3OGI1OGNmYywgMHg5MTc5NDBmNywgMHhiOGIwM2Y3NiwKLQkweGY5ZWVhYzBmLCAweGYzMTUxY2M4LCAweDU1N2Y4NWFjLCAweDMzZWY3ZjY3LCAweGZkYWRmN2JhLCAweDNkMzg1YmNkLAotCTB4Y2QwMjdkZjMsIDB4YjcxZjhiM2YsIDB4MDM5ZGU4NGUsIDB4ZmM3Y2M4YTYsIDB4MzViYWE2N2QsIDB4OWUyNmZmMDIsCi0JMHgyODY3NTY4NywgMHhkMzI3ZGZhNSwgMHhlZTMxYmZmMCwgMHgwNDU3ZDU3ZSwgMHg5OWU3YjVkZSwgMHhiN2JhMTUxNywKLQkweDFjODFlYzBlLCAweDczM2E1N2RjLCAweDc2ZjQ0Y2RjLCAweDNhNzhlMzY2LCAweDU3OGRhZDJmLCAweDAyNzFiODA3LAotCTB4NTY0ZTllOWYsIDB4ZmVmYWUyMjcsIDB4YmFhZmM4NTksIDB4ZDRlZmRjMzUsIDB4MzYxOWQ3ZGUsIDB4NDc3YWUzNTcsCi0JMHg2Zjk0Yzk4ZSwgMHgyNDhjZTAzMywgMHhkNjg4N2VlMiwgMHhjZTBmMmI0ZSwgMHhkZmE2NGJhNywgMHhmOTkwM2ExOSwKLQkweGQwM2JhZDM0LCAweDMyYmE0MzE1LCAweGZhNDFjNmZjLCAweGZlMWJmODM2LCAweDk3ZWY0NTdiLCAweGY1MGQ5MGIzLAotCTB4ZjI2NmFiZjQsIDB4MzMxYzRlZDMsIDB4ZjAzYzFkOTMsIDB4M2I3NzNmMWEsIDB4N2IyZjFlZTQsIDB4YWRlZjA3MjQsCi0JMHgxNDY2ZmUwYywgMHhlYzgxYjVjOSwgMHgzNzZlNmVjOCwgMHhiOGRlZTk1YiwgMHhjOTgxNTM4MSwgMHg0MzJjZmY2MiwKLQkweDgxOTc4YmRjLCAweDYzODVkYWY2LCAweGQ3YjQ2ZWQ2LCAweDIwZmI0OWUwLCAweDQzZDdiNjIxLCAweGU4ZGI4ZmVmLAotCTB4ZDI3ODBmZmUsIDB4MWQyNjA5MzksIDB4OWNlZmQwZjQsIDB4N2RmMTM2YjAsIDB4Njc3ZjdkMGYsIDB4Y2EwYzYwNGUsCi0JMHhhMDBiM2JlOSwgMHhkZjdlM2I3ZiwgMHhlNDJlZWQ0NywgMHgxOTYxMjYwNywgMHg3OGM1MzJmZSwgMHg3NjZmZDQ5OSwKLQkweDRiZGU5NzIwLCAweGVmZjg3OTFmLCAweGZhODliNDdiLCAweDlhMGZhYTFlLCAweDFlNjk5MzAzLCAweDhlYjA3NjdmLAotCTB4NGRmOWU2NjEsIDB4MmY3YjdmZWYsIDB4OWJlNDg1M2IsIDB4OTllMDM3MDYsIDB4YmM3OGJmZWMsIDB4ZTIwYzcyNzgsCi0JMHgzZTM4NWRmNywgMHg3MDcyZTllMiwgMHgzZTA0YmYzZCwgMHg1ZjkwYTc4YywgMHg3MWQ3YzVkMiwgMHg5NzEzNThmZCwKLQkweGM5ZTNhZDI3LCAweDQzMWJhNWNlLCAweDU2OWFmMjYyLCAweGU4OWI3YjFkLCAweGRiZThjMDcyLCAweDcyMjk3YThhLAotCTB4YmRmOGM4Y2EsIDB4NjAxOTYwNmEsIDB4NmYwYTYxOWMsIDB4ZmNlMzY3NTcsIDB4OWVmMWMxYTQsIDB4Njg2ZTZmYzgsCi0JMHhlZjRmNzllNSwgMHg5Y2VkZTJmZCwgMHgyNzNjNzYwNSwgMHg5Y2VlYjZmYiwgMHg4M2Y3MTZhYywgMHhhZTMxMTI0ZSwKLQkweDg5YWFmNzYyLCAweGRlZGMyNWI1LCAweGZlMmUwOTk2LCAweDhkMWI0ZGZiLCAweDU1NGVmZDJhLCAweDE0YjFiZWU4LAotCTB4NTI2MzM4NGYsIDB4OGViZGQxMGYsIDB4OTAxODI3ZWIsIDB4NWNiZDVhOWUsIDB4ZjhkYTg0ZjYsIDB4OWFmYmI0YmMsCi0JMHhlMjk3N2JiNCwgMHg5Y2RkZjJmMSwgMHgzOGJiZmUwMiwgMHhkZTJiNzAyYywgMHhhOTlhN2RkOSwgMHg4ZGIzNjI2OSwKLQkweGM3YWI5ZmVlLCAweGViY2EwMTdmLCAweDJiM2UwZDBiLCAweGJkMjViZmNmLCAweDM3OWVmNDMwLCAweDhlZmM5N2QzLAotCTB4Zjk2ZGZmZDUsIDB4ZTY4Y2I5MDcsIDB4MjUwZGVhZDksIDB4Yzc3ZDVlYTIsIDB4NTgzZWZkYzksIDB4YmJmNDk1M2QsCi0JMHg3NzQ5ZTdjYywgMHhiZWEwNjZlOCwgMHg5MzlhZGZmNiwgMHgwNzI0ZjU0YSwgMHg3ZDc4OTFkZiwgMHhmMjY5OWQzYywKLQkweDkwM2UwODZlLCAweGZjNWZiMDZlLCAweDNkYmVmYTBlLCAweDQ4ZDVjNzg3LCAweDc5YmRlMDU4LCAweDdiYTI2NDJjLAotCTB4MGFiZTg0NjEsIDB4Y2YwMThhNGEsIDB4ZDRiOWY3NzUsIDB4YmVjYmE0NDQsIDB4NTVlNDgyZDYsIDB4NTJlMGE3OTgsCi0JMHhlODYyY2FkMywgMHhhMzJjZjgyNCwgMHg5ZTJhY2NmMywgMHhiZjhjOTg0ZiwgMHg4ODliZTI3MywgMHhjOTAzYmNmMSwKLQkweDNjNDIzOGZhLCAweGViNGY4ZjNjLCAweGZmNWIxZjlkLCAweDc3MmUxY2QzLCAweDFmYjg3MzViLCAweDI2MWNlYmY4LAotCTB4M2M3OGZlZWMsIDB4MjI1ODNhNzIsIDB4MWJkNWEwZTgsIDB4Y2FmYzhhYjgsIDB4YjY0Yjc2YjgsIDB4ODhmYTA5MjUsCi0JMHhkNGY2ZGY3YiwgMHhjYWJlNTMzZiwgMHg4NWJkZmQ0ZSwgMHhkZTNkNjIzNSwgMHg5MjE0ZGU3OSwgMHg4MTMzZTEyNiwKLQkweDM3ZWI4ZGYyLCAweGZmNTc3OTczLCAweDVkZDE0ZDQyLCAweGZjZTc0Y2JjLCAweDRkZGM3NWE3LCAweDcwYjMwZmJmLAotCTB4YzYyMmNjY2YsIDB4OGJhZDE3ZTUsIDB4NzMwYjlmNDYsIDB4ZGY2ODQ1N2MsIDB4NGVjYmI2NDUsIDB4NmRmYTkzZTQsCi0JMHhhYWQzYzEzMiwgMHhjM2I2NTliNCwgMHg4Y2RiYjNmYiwgMHgwYmQ1Zjc2NCwgMHgwNTY2Y2U3OCwgMHgxNGRkNjkxMiwKLQkweGVmMDA5OGE2LCAweDIyNDA5NTY3LCAweGM1ZGJiNWQ5LCAweGNkYzRlMGVmLCAweGEyYmRkYTAzLCAweDFmODMwZDk0LAotCTB4YzI2NzVmMGIsIDB4NzQzMGMxNGYsIDB4ZWI0MGNhNzAsIDB4ODk4MTMwYjQsIDB4ZTg5MzQ3ZGYsIDB4ZWNkOWM3OWMsCi0JMHhlZTU4YWRjMCwgMHhlZTllN2YwMywgMHhhMDZiNmU5ZiwgMHhmMWUyNTU3YiwgMHgyMDEyZDY3ZCwgMHhlNjIyNWQ3YSwKLQkweDdlMzNlMWEzLCAweDAzOWYwZDFjLCAweDlmYjQ0Zjg4LCAweGZhNDFkZjllLCAweDhjYTBmODJmLCAweGVlOWVjYzE0LAotCTB4ZWNmYzkwZmEsIDB4YmU2NmM3NjksIDB4YmY3YzJkZjEsIDB4MTUxOGVjMTksIDB4Y2JmZTZkZjUsIDB4MDc3ZDQ3ZGYsCi0JMHg5OGVkMGE3MiwgMHg2OTA1NjNkYSwgMHhhMzZmNGUyYywgMHhkMmZiNTkzZiwgMHg4YzQzNDRkYywgMHg5NzZkNmNiZSwKLQkweGI1YTU5ZjY5LCAweDIyZTI0ZTcwLCAweDA2ZmU3ZjZhLCAweGFhZDNhZmE0LCAweGE2MmNhZDM3LCAweDlhMzkyYmRkLAotCTB4YWY1ZmE5M2YsIDB4NGQ3ZmNkYmEsIDB4MzdlYTcxYzQsIDB4ZGE1ZTY5MTgsIDB4NGMwMDBjYmEsIDB4NmNkYjg3MjQsCi0JMHg4MWZmYTQ2MSwgMHhhYmY1MDhhYywgMHg3ZDIwZDNhZCwgMHhmNDY4M2FlMywgMHhjZDNlZWQwNCwgMHg3ODcxOGE3MSwKLQkweDJmMmZiNmJjLCAweDg2MWRlOTUwLCAweDAwM2YxNjRlLCAweGRiN2Y2MmUzLCAweGU2OWY3NDFjLCAweGUxYWI4ZWE1LAotCTB4MDViZDcwNjMsIDB4ZDcxOTUzNWYsIDB4YzUxZTc3NzEsIDB4MTRhNzBkYzcsIDB4ZGQzZjA2NGEsIDB4ZjIwZTRkNzYsCi0JMHgwN2Q4MWQ3MSwgMHg5M2E4ODcxOCwgMHhiZGQwNmYyMiwgMHg3NGNjYzdhNiwgMHhlNmRkNmZlZiwgMHg3OGUyYjdhNSwKLQkweDBkOTlhZjc1LCAweGZjNzdkZjU4LCAweDU3MDQ4OTlhLCAweDllMDJiYWRjLCAweGY3YTM4NjcyLCAweDhlNDhiYzgxLAotCTB4NjA3ZjA2MzcsIDB4NmI3ZjEwNTcsIDB4OWI4MTg5ZjMsIDB4OGIzZjAwZTAsIDB4YzgxOWM1ZWUsIDB4OTE4Y2Y1ODMsCi0JMHhlMWNkN2YwMywgMHhlZjY4MWFmMSwgMHhmMzdkMTEzNCwgMHhlNzA2OTk3YiwgMHhhZjliOGNlYiwgMHhhZmJlNmUzMywKLQkweGU2NmZhMjMwLCAweDE2N2NkMDBkLCAweGUwMzY2ZWJlLCAweDVmZjc4NWZiLCAweGI3NzE4NDVmLCAweDY5ZDNmNWJlLAotCTB4YmVjOTdkNWUsIDB4N2Q1ZmM4ODksIDB4MzBmZmQwMzksIDB4ZmRlMTcyZjIsIDB4MmY5MmNmMzAsIDB4OTU5YjY3OTgsCi0JMHg3OWM0NmJkNiwgMHhiMzc2NDcyNiwgMHgyN2E3OTgyZiwgMHhiN2NmM2Y1NywgMHg3ZTkxMzUxNCwgMHhjYzg4ZTM0ZiwKLQkweGNjMTI4ZTMwLCAweDE2ZmM2ZmY2LCAweDk3ZWZkMzJmLCAweDFlOWM4ZDA1LCAweDc0NmQ5YjgyLCAweDhiYmZhYTJlLAotCTB4YzlhZjhmZGYsIDB4MTJlZjE4MDEsIDB4ZjQ0MGMxZTksIDB4NmVhNTU3ZDAsIDB4NzVmNDgyOTksIDB4ZmRjNGVjOWYsCi0JMHg5N2Y1YmU4YSwgMHgyZmJmOGNiZCwgMHg3NjUxYjdkNywgMHg1N2QwZGRhMiwgMHhmMjA3ZjFjNSwgMHg1Zjc4ZjQ4MCwKLQkweDJhMDZmZjhlLCAweGVmZDIzNzFmLCAweGZiNjk5ZGE0LCAweDNlZTg5ZmViLCAweGZhNDY2MzgyLCAweDNjODFlMjNkLAotCTB4NTg3OWM2ZmYsIDB4YWU1MTc4MDYsIDB4ZTI2ZTVlMDEsIDB4ZTY5MWFiNzYsIDB4YzFlZWJhZGYsIDB4ZGExZjU4NzUsCi0JMHg2ZmNlODkzNiwgMHg3YWQ3ZDUwYywgMHg5MDZmZDczYywgMHgxNGM4N2M3NSwgMHhkZTBiYzY5NSwgMHgxN2VlOGEzZiwKLQkweDEyMGNmMGQxLCAweDIzZmQwOGI2LCAweDllNTgxZjBkLCAweDk3OGEyMTNiLCAweDhmN2YzOGEwLCAweDhmYmYwMjc2LAotCTB4YzQzM2M4NGIsIDB4MTNkNzNlNGYsIDB4ZTUwNThlNzgsIDB4MTlhNzllMTgsIDB4Y2JjNTVmNDksIDB4N2JiZDc4OWYsCi0JMHg0ZmI2YWU2MywgMHgwZGM3OTdhOSwgMHg3OWFmYmY3MSwgMHg2OTc5NWM1YiwgMHgxNjU4ZGM5YywgMHg1NzE4ZGY1NywKLQkweDg2ZjlmYTBmLCAweGNmZDJlMmUxLCAweGEyY2Y4ZTBjLCAweDFhMjE5MjdlLCAweDRmYjgxZDFmLCAweDU2YjRiZjIyLAotCTB4MDdlODRkNTEsIDB4ZWI4ZDNlM2QsIDB4NTk4NTNhZTcsIDB4ZTRiZTIyYWUsIDB4MTU2YTczZTcsIDB4YzMyZTYyZDYsCi0JMHhhYzUzNWVmNywgMHhiNWZkMDRiZiwgMHg5Y2ExOTM5OCwgMHhiNDEwZTVjMCwgMHg5NGM1MzZhYiwgMHhjMWFiNzkzNSwKLQkweGEzYzA0YWIzLCAweDljNzZiZjNkLCAweDdkYzQ2NmEwLCAweDE1Yjk1NThjLCAweGNhMzFmNzQzLCAweGJmNWZmY2U0LAotCTB4MTFkNjdlODgsIDB4ZTBjY2ZjOTksIDB4YjBmZjVjMGIsIDB4ZjJkYzNmNGYsIDB4M2JlZjFiOTgsIDB4MzIzY2EwMmUsCi0JMHg3OGYxZmU2ZCwgMHg2MWZjMzgxYywgMHhlNGRlZmQyMiwgMHg1ZjNhMjZmMywgMHg1Mjk1ZGI1ZSwgMHg3MjU4N2U0NSwKLQkweDZmYmM1ODY0LCAweDQ0ZmFlNWNkLCAweGU5NWZhZmViLCAweDZiMWQ5YzRkLCAweGM0ZGViMzQ3LCAweGFkZjdkZmQ4LAotCTB4NGFlMWZjM2QsIDB4N2YwMTZiZjQsIDB4OGU0NjM5MjEsIDB4NWE5NjM5OWYsIDB4ZGQ2NWZlODUsIDB4ZjBhYjMyZWYsCi0JMHg1Y2QxZWZiYywgMHgzZWEwMGUyZCwgMHhlNmY5MDFiYywgMHgxM2UyOTk4OCwgMHgzM2NjMmZmZCwgMHgyZmZkZjdlMCwKLQkweDlkZTc4YmQ0LCAweGZmNjA5Zjc0LCAweDcwNzI2NzViLCAweGZlODM0NGZjLCAweGNmN2Y4OWJlLCAweDlkNTRmNmU1LAotCTB4NTdkZGNkZTEsIDB4OWEzZmZjYTIsIDB4MjYyNmI3OWUsIDB4Mjg2NzVkMGUsIDB4MzFmOGJmMjMsIDB4YzIzZTY0NjMsCi0JMHgzYWZmNzYwZCwgMHhmYWQ1MDNjYywgMHgxMmFiOWEzOSwgMHhkZTQ3ZmQxYywgMHhlMWYyOGRkZSwgMHgzMmVjYzZjYywKLQkweDQ3ZmQyYjE0LCAweGRjMWY5MGM2LCAweDQ1NjVkYWZmLCAweGZmNmI1Zjc4LCAweDk0NWUxOTdkLCAweGQ1MTk4ZjBiLAotCTB4ZTJkZmI5M2IsIDB4OGJjOWVlZjAsIDB4ZTBlMzg3ZjYsIDB4OTFmZjYzZmUsIDB4M2YxODk1YzksIDB4YzM4ZDdmZTgsCi0JMHgyNzhhNjUwYiwgMHhlNjEwYmI0MCwgMHgyNmZkNmE1ZiwgMHg5ODRkZDQxYSwgMHg2NzdlY2U4ZiwgMHg4ZWUyYmYyNCwKLQkweGYxZDIwYWNmLCAweGQzNDQ5NTdlLCAweGEwNTBmN2YwLCAweGMzY2ZhMTFmLCAweGQ2ZjM0ZDVlLCAweGZkZTM3ZGYyLAotCTB4MzdmZjJkMGMsIDB4ZWVkMzBmZGUsIDB4MTdmNzhmOGIsIDB4M2RkYjU5ZWIsIDB4ZWYxYzk3OTgsIDB4NmU2MTgyMzcsCi0JMHhkZjg5YTUwOSwgMHg0ZWJmYTczMywgMHhmNzRiZjdkMiwgMHhkZmQ2NmU3ZiwgMHhmNjEyMWQ5ZiwgMHg3MWU0ODU4MCwKLQkweDdhZTNmMDJkLCAweDc5ODUzZjhhLCAweDNjOWQ2ZmRjLCAweGM1ZWM3ZWVjLCAweDZmYTc2ZTVjLCAweDdlNmRmZGI1LAotCTB4OWViYWNjNmYsIDB4MDNjNTMwMzYsIDB4NjI2ZDNkNzgsIDB4NzBkOTRmMTYsIDB4OWM4NWUzZmUsIDB4YzM3YjkyNWEsCi0JMHhiMTc1OGRmYiwgMHhhMWIxZDZmNywgMHhhYWU5ZTQ3ZSwgMHg5ZGY5ZTUzMCwgMHhlZmQzMmY1ZSwgMHhmNWMzYzQ1OSwKLQkweGY4YzhmZDU1LCAweGViZGZiNWVmLCAweGM0ZWQwNGY4LCAweDAwOTM4YzU0LCAweGU0NWZjOWE0LCAweGQ1ZTFlYjNmLAotCTB4YmYxNTY5ZjAsIDB4MDFmZmYyYTMsIDB4OTQ5MTEzZGQsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCi0JMHg3ZGI1ZmYwMCwgMHhjNTU0N2MwYiwgMHhiZGRjZjhkNSwgMHhjMzc2NGNmYiwgMHgwODNjODQyNiwgMHg4MTNiY2Q4NCwKLQkweDQ0OTAyYzI0LCAweDhmMmVkNGFjLCAweDAzMTBmMGM0LCAweDU4NTA4MjJhLCAweDg5ZGU0MDIwLCAweGM1YjBmZDYwLAotCTB4NDA4MDIxNjYsIDB4MTUxYTg2ZDEsIDB4MjYwZGRhMmIsIDB4MjJlYzEyMDgsIDB4NzYwZDEyMDEsIDB4NGE4ODg5NDEsCi0JMHhhZGI0NTUwMywgMHgyMDJhMjVmMiwgMHhkNDEwOTIwNCwgMHhlYjZiZmU4ZiwgMHg3MzMzOWNmZiwgMHhkMDgyMGZiMywKLQkweGNmZThmYmY2LCAweDk5ZGVlNjRlLCAweDdkZTczM2I5LCAweGZkOTk5Y2NlLCAweGY3Zjg3YmZlLCAweDE3YmVjNjEzLAotCTB4NjJhMmQ5YTUsIDB4Yzk2MzEwNmMsIDB4MmQ5OTkwZmYsIDB4NDNiMmIxOTQsIDB4ODkxYWU3MWEsIDB4YWZkYWMwYjEsCi0JMHhmNTBiOTk5ZiwgMHgzOThkMTZlZSwgMHhmOTU4YzJjNiwgMHg2NzI2ZDkyMSwgMHg2NTlhYzYzMCwgMHgzZTBjNDI2NywKLQkweDA4YTgyMmZmLCAweDhmMzc5N2RlLCAweDMzY2NjYjMxLCAweDljYjM3OTVlLCAweGFjNjU0Y2U3LCAweGQ4NmFlOWFiLAotCTB4NjcxYTU0ZTIsIDB4ZmQ4OGM1YmEsIDB4YTFkYWI2OWYsIDB4YzJhY2M4MzQsIDB4NTdiNGY0NjUsIDB4NGM4YjU4Y2EsCi0JMHg2OWRlMjhmMywgMHg5OTMyZmVhOCwgMHhlMWVmYmZkMSwgMHhiMDU3NTJiZiwgMHgyOWJjYmQ0ZiwgMHhiZDRiZmFiMiwKLQkweDdmOGM1ZWE3LCAweDM2N2ZjMjQ0LCAweDhjNTk2N2E2LCAweGVjNTdmMDk1LCAweDYxODdlYTcyLCAweDVkZGU2MDUzLAotCTB4MTkxMmU3YjUsIDB4YjJhOGQxMmMsIDB4YTEzMjVhYzcsIDB4MTY5ZGY4OWUsIDB4NjdiNThjZWIsIDB4N2U2ODk5ZTUsCi0JMHg2Nzk4MTY0MSwgMHgyMGRiZjNiNywgMHhiN2QyZjMwNiwgMHhiZjljMzZjOCwgMHgyYzMyZmNmZiwgMHhmZjMyYzY1YSwKLQkweGMyZTVmOTgzLCAweGYzM2NjMmZjLCAweDU4NjRmOTgzLCAweDU5ZTY3OTA2LCAweGIyZDFlOTY2LCAweDNlODc5ODU4LAotCTB4YzQ4ZDlkMjgsIDB4YTM2OWI2MTYsIDB4ZmMyMmZkYTAsIDB4NmEyZmRlMTMsIDB4MDU4ZDNjNTksIDB4NzlhOTM2MzEsCi0JMHhlMDAzMWFjOSwgMHhiMjVhYmJhMSwgMHg3ZTc5ZTBlYSwgMHhmMDBkYzAwYiwgMHg3NjRkYmY5MCwgMHg5MzJmMDA1YSwKLQkweDMxMWQ1NjkyLCAweGQzZjE3ZDQwLCAweGU2YmExZWYwLCAweGNmNGVlM2M4LCAweDllY2JmNjg2LCAweGI4N2VhOTkwLAotCTB4MWFkMzkxZjYsIDB4MGQzNmViYzQsIDB4MDMxZTIxZDMsIDB4ZWY4YmI2ODIsIDB4YTE1ZjljMzEsIDB4Y2I2MTVmOTgsCi0JMHg3YzEyMGJkNCwgMHhkOTIxZDk2ZiwgMHhmNWZlYzZlYSwgMHg1ZjNlMmIyNiwgMHg3OWYzNDFiYywgMHg5NmZhZDdiYiwKLQkweGRlMzAxZmUwLCAweGQzOTJhZDkyLCAweGE5MmRlMzBkLCAweDk1ZGY3ZGY2LCAweDM4YjJkMGU5LCAweGVmZDViZmU4LAotCTB4OTlmYWVkNzksIDB4NTRiMTQyNDcsIDB4NTFkNjA5MzMsIDB4OGY3ZGY0ZTgsIDB4Zjk4NmRlZmYsIDB4NzdiZjhiOTQsCi0JMHg4YzFlNmMyNiwgMHgzMDMyZTlmOCwgMHg2MWY4MDZkNiwgMHg4NjMwZjZlYSwgMHgxYTNkYmJhNSwgMHg3Y2Q1ZDhmMSwKLQkweDU4ZjExYTM2LCAweDI0ZmZmYWZlLCAweGE3ZjA3ZWIyLCAweDE0YzVhYzk0LCAweGUwMTAyZTdhLCAweGY3ZDg5MTY5LAotCTB4YWJmYmE0MmEsIDB4NjlmYWYzZDMsIDB4ZTcwODdhM2YsIDB4YzcxYTlkOGIsIDB4M2ZiYzJiNjAsIDB4NzQ2ZGZiNTIsCi0JMHhiMzQ5ZDIzYiwgMHgxZmI5OTg3ZCwgMHg5ZjFiZWRmYSwgMHgwOGFhMGMzOSwgMHg4NjA2ZGQyYywgMHgzY2NiODY2NSwKLQkweDRkZTRmOTA1LCAweGQyMTM3OThkLCAweDMzZjVmNmM3LCAweGYwZGQ0M2I3LCAweDAwNjYwNjg2LCAweGYxMjMwNGY1LAotCTB4MTJjN2YyMGIsIDB4M2UxNTcxYWYsIDB4ZDliMTI5ZDksIDB4OTk0MjY2NTQsIDB4Njg5MmYzOGEsIDB4OTMwZmRmNWUsCi0JMHgxZTc3MWU4OCwgMHhkMDllOWRlZSwgMHg2OTg2N2NkZiwgMHgyMWU4ZGRhOCwgMHgzNDdkZGE4YywgMHhkMjM1NmYyYywKLQkweDExY2E4MDViLCAweDM2NjBmODg0LCAweGUwMTQyNTliLCAweGFhZmEwOTJiLCAweGUxMjE1OTVhLCAweDRkNTYwOGYzLAotCTB4YTJlNjEwZTUsIDB4ZWNjNjA1ZjIsIDB4YWNjZjZjNDYsIDB4NjMzMzg0NjYsIDB4N2UxMTgzNDMsIDB4NWViNGYzYzQsCi0JMHhlNmU5MGFiYiwgMHg5Yjc3MDI2NywgMHg4ZTBmNGUyNCwgMHg4N2FjZTY2MCwgMHgzZDVhZTViZiwgMHhhNjMwMDc5MywKLQkweGQ4NDFlZDY1LCAweGYzMzY5NGM5LCAweGJkZTBjM2Q3LCAweDI1NTk0M2U2LCAweDQzYzhiZDAxLCAweGNkNWE3YzE1LAotCTB4OGM2ZmRmODgsIDB4YzZmMDBkZjcsIDB4MTdmN2UxZGYsIDB4YTU3OGUyZTUsIDB4ODNhNjY1ZmIsIDB4NmEzNzJlZjEsCi0JMHhlZDg4ZGI5OCwgMHg5ZGEwNWY4MSwgMHhiNWFmZmRlNiwgMHg1YTk3MjgzMSwgMHhlYjAwOTYyNCwgMHgzZTNhODcyOCwKLQkweGI2YTcxZjJmLCAweDUyZTBiZDM5LCAweDc4ZjBlMTZmLCAweGYwNDg5MmRhLCAweDhlZGI1MmU4LCAweDMzZmE0MzRkLAotCTB4MmMzYWQyMmYsIDB4MmU3ZTRlMzgsIDB4MTEzNDcxODMsIDB4YWYzOGI0OGIsIDB4ZDA0ZmVmYzMsIDB4ODJkZTIwYzcsCi0JMHhlYjM3YzRkNSwgMHhiNmVmOTQ1YiwgMHg2NGZjNzE5OSwgMHg3OGYzMjlkNSwgMHhhOTkzZGY3OCwgMHhmMWUxZGI2NiwKLQkweGNkYzZhM2Y5LCAweGY3Y2E0N2M4LCAweDNmMWMyY2JhLCAweDEyODEyYjY3LCAweDk3Y2YzYzkyLCAweDgzOTdkYzY0LAotCTB4ZmIzMjk3ZmQsIDB4YTVhM2E0N2EsIDB4N2I3MzMyMzUsIDB4MGQ3OWZkZDEsIDB4NmI5MmY3YzcsIDB4YzYzZGNjODEsCi0JMHg0Y2M0NWZhYiwgMHg2YjkyZDc1YSwgMHhiY2ZjZjQ0MSwgMHg2ZjNiYjc4MSwgMHg5ZWYxNzRlMiwgMHhjN2M1ZDM4NSwKLQkweDg4NWZiYmUyLCAweGFmMmRiZmZhLCAweGVhZjJiZWFjLCAweGVmMWYwYmYyLCAweGQ2ZTVjNDU4LCAweGE1NDc0ODdiLAotCTB4NDRjZTdiNTIsIDB4ODhmYWM0ZjgsIDB4ZjVjYTJkNWUsIDB4ZTY2Njk1YjMsIDB4M2FkMGZkZDYsIDB4ZDdiNzMyMDcsCi0JMHg1ZGRhZmI3NywgMHg0MGY3MzAzMywgMHg2ODU5Yjg2ZiwgMHgxYWY1OWVmZSwgMHhjYWQ5ZmRlOSwgMHgzMWMwOWI4OCwKLQkweDllOGUwN2NhLCAweGUwN2NlM2YxLCAweDg5ZjhmZDc4LCAweDY1NmNmZWY0LCAweDFmYzY0ZGYyLCAweDYzZjE4MzcxLAotCTB4MTllZmU2N2MsIDB4YWY5ZTllMzcsIDB4MjBiMTU1NGQsIDB4OWZiNWFiYTAsIDB4NmNjNDljZTgsIDB4NzRhN2FlN2EsCi0JMHhiYWQ2ZWY4MiwgMHhmZDJkZTkyNywgMHg0ZDgzYWZmMCwgMHhlMTYzNjI4YSwgMHg4YjljYTM3ZCwgMHhiY2Q5N2M3NCwKLQkweGFlN2M4Y2M4LCAweDc0YjkwNjA5LCAweGQ4ZDdmNDFiLCAweDcxODBlZjcyLCAweDAzMjFjMTc1LCAweDVhYWY3ZTkxLAotCTB4ZGY1ZDY4ZTIsIDB4MWQxMDU3MDYsIDB4YjQ3NDNiN2YsIDB4OGZjMTg4ZWMsIDB4N2Q2MWU0NTQsIDB4OTk3YzkwZWQsCi0JMHg1OWZhYjM3OCwgMHg3YWU1ZjM5MiwgMHgyMWQzN2RmZSwgMHg5ZmU0NGE2MCwgMHhhZjQyZjVkYiwgMHgxOGJjYzlmZiwKLQkweGQ0MzU1M2JlLCAweGY0Yzk4ZmFlLCAweGY5OTRjN2NjLCAweGIzM2M0MzM2LCAweDk0MzBmYjI2LCAweDgxOWI4ZjAzLAotCTB4ODAxZjg5NmYsIDB4NWFiZDYxYWYsIDB4M2JiYmZlYzksIDB4OWZkODFmODAsIDB4OGExZWFjNzUsIDB4MjRmNjBkNmYsCi0JMHg0NzFmMTdiMywgMHgwOWZkNzBjNCwgMHg3Mjg1MTBkYywgMHhhODZhYzFkMSwgMHg0YWJhNmYyYywgMHhmZjAwYjY3MCwKLQkweGY3OTRiYWUyLCAweGUwODdhY2U1LCAweGMyY2Q3YzhlLCAweDE2ZDUyNjkxLCAweDRmNjRkZjdhLCAweGNjZjM0YmNhLAotCTB4NzhlZWNmYTMsIDB4MDE1MGU4YzcsIDB4ZmQwZWU5ZmYsIDB4ZDllMTA4MjMsIDB4NmU5OWVlYWQsIDB4MjJkNWQyODUsCi0JMHg3N2MzN2EwNywgMHg4ZmU3MGM2NCwgMHg0ZWJmNDMwOSwgMHg2NWU3ODc2ZiwgMHhkM2U0MGZkOCwgMHgyNzE2NmYyMywKLQkweGQzMjlmY2ExLCAweGJjZTNhNGY1LCAweGY3ZjliYzhmLCAweGRmZjc5NDc0LCAweDg2MWUyYTFlLCAweDdiNDI3N2NmLAotCTB4M2RiNDEzYjIsIDB4ZjFhZjU2NjUsIDB4YTFkOTk5ZTIsIDB4OTMyOWViMWEsIDB4ZWY4OGUyNjMsIDB4M2NlZjlmZmMsCi0JMHhlNzE4MzU1NCwgMHg4ODYyMDBkMSwgMHg1Njc3YzA4NSwgMHhlNWY3MTdiZSwgMHhkYjA3MjQ0MCwgMHgxODY3Mjg1MywKLQkweDBiN2E5N2M4LCAweGNhZjc0ZGRhLCAweDNlY2E1NzI4LCAweGVhMDRkYjAyLCAweGJmNWNjZDE5LCAweDRlNjUwYzY3LAotCTB4NjdkYTBjNTUsIDB4N2M0NmNkMWYsIDB4Y2Q2YTY1OTUsIDB4YzA0YTU4MmEsIDB4MWFlNzM2YTgsIDB4YTk5MDFmNzgsCi0JMHgxZDFlYTMzNywgMHg1ZjdmODQzZSwgMHgwZTNjZmE4YiwgMHg0NDBmNjdmYiwgMHhlNDE0ZmRiYywgMHgwZjI0N2ZlYywKLQkweDJiZWNmY2VhLCAweDA2YjJhOWY3LCAweGRjYTk1ZWY4LCAweDAwZTUxZDNlLCAweDMxZTk4NWM4LCAweDA3ZDk3ZTMwLAotCTB4YjU0ODlmNWYsIDB4MzA5ZThiNjAsIDB4ZDBiNzRmYzQsIDB4ZTMxMjdmM2YsIDB4Mzc5MzFhM2MsIDB4ZmJhYWU5MTMsCi0JMHhlM2Q3NzdmZSwgMHhiYjI0MzdhMywgMHg4OGUzZDcxZCwgMHg1ZjUxNWJkNCwgMHhlYzY3MDhiMCwgMHhjZWJjMmY0YywKLQkweGJhMDk1MThkLCAweGJhMDFlZTAxLCAweGI2ZTYyZTFkLCAweDc5NmJiMDY3LCAweDY3MjVlOTMwLCAweGI5NDNkMjA4LAotCTB4MWU1MWQ5OGEsIDB4ZDQwMDY5YjIsIDB4ZjMyZTkxZGIsIDB4ZjVhNjY2ZDIsIDB4ZDBkNzlmYTcsIDB4NmM2MmNiNzgsCi0JMHg0YWJlNzA4YiwgMHhjZDY2OGZmYiwgMHhjM2Y3YjM0ZCwgMHgwNGE5NDg4NywgMHgyMWViYWQ0ZiwgMHhhOTRmNjc5YywKLQkweGYwMWRiYWQxLCAweDgyYmUyMWYwLCAweGQyY2QyZjdlLCAweDkzYjA2NWI5LCAweDBkYzYzNWJhLCAweDI3ZDFkMDEyLAotCTB4MDc1YmYzODEsIDB4MTg0ZmZhYzEsIDB4Y2ViODE1ZWQsIDB4NWU0YzBmZDksIDB4YzhlOTc1OGYsIDB4YTQ3MmNiNDAsCi0JMHg1OWVkODVjYiwgMHgwNjM5OTc4OCwgMHhiZWY4YzNmYiwgMHgxNjFmNmY0NCwgMHgzY2JjNGIwNiwgMHgwMDM0OWVkNCwKLQkweDQwZGU2YTk1LCAweDk3OTY2ZjBlLCAweGZjZWZkNzk2LCAweDc1M2M3Y2Y5LCAweDU0YjdmYTQ2LCAweDMxYjdhNWMwLAotCTB4NDlkOTAwNmUsIDB4Njc0ODBkYWYsIDB4MTUyZTlmMzAsIDB4ZDBmZDQwMmIsIDB4MTVmYmU2MjUsIDB4MjVlNjIzZTgsCi0JMHgyNzljMGJhNywgMHg3ZGExMGJiNSwgMHhlZDQ5ZGQ2MSwgMHg5N2Y1YWYyMiwgMHhlYWUwODU4MiwgMHgzYTdhMmVjNywKLQkweDE3NDVkYjg2LCAweGRiZmVmZGY3LCAweDlkNTBjMDVmLCAweDQ0NDgxY2RmLCAweGJhNThiNWJiLCAweDc2ZmFlYjQ0LAotCTB4NjJmOWM5ZDcsIDB4YmViOGQ1N2QsIDB4YTI3YjdhNDcsIDB4MTJhZWIwYjUsIDB4OTcyZDYxZDcsIDB4ZWE3ZDYyMWYsCi0JMHg1YTFmYzQ5ZSwgMHgyZGFhOTc1ZiwgMHg4MGUyZTg4NywgMHhmMThmYWU2NCwgMHgzYzZkMmJmNCwgMHhmNDA1MTM5OSwKLQkweDNjMTc1MDVlLCAweDk2NzRlNjVhLCAweGU4NTY3NDg4LCAweGQxNzg4Zjg0LCAweDAyOGUzMmIxLCAweGRlNDJlNTlmLAotCTB4ZjAxNGFlZjUsIDB4YjY3NmUwMDksIDB4ZmJlNTFmMDIsIDB4MzNlMGZjNjcsIDB4OGQ5M2RkNWYsIDB4MmFiZjk4ZjMsCi0JMHhhOWU1YzU1OCwgMHg3OTQ3ZTg5MywgMHhlZmE1NjBiZiwgMHhmYjE0YWI3NywgMHg0OWM5MzFlNywgMHg3ZWJjNjZmMywKLQkweGRjZWMxMWQwLCAweGVhOWQ3NTA0LCAweGEyZjc4N2VhLCAweGIyYTY5MGRkLCAweDJkYjBkZGEyLCAweDY4YzA2NDAwLAotCTB4ZjAyOGZlYzYsIDB4MDdjODAyZjMsIDB4ZGYzZDA4N2QsIDB4MDIyM2NmODAsIDB4Njc4OGZmNzgsIDB4ZTgyYWNlNTQsCi0JMHg5OWExMzc5ZiwgMHgzMmE1ZjBlOCwgMHg2Zjg2NTVhMywgMHg5OGUwNjQyZCwgMHgzMzE2MTRjMCwgMHg2N2Q5ZDkxYiwKLQkweDUwZmRmZmM3LCAweDY4ZjNhYzNiLCAweGYwOGRkZDhjLCAweDE1NTAzMDVmLCAweGMzY2QyMWZkLCAweGRhMDY2MjNlLAotCTB4MWMzOGUzNmYsIDB4ZmQxN2IzYWYsIDB4OTk5MzNmZTAsIDB4YjFlNDY0MzUsIDB4ZmJlNDJhY2QsIDB4OTRiZTY2OTksCi0JMHhlM2U3MTIyNSwgMHg4MzRkOTk3YiwgMHhkOTlmYmJkZiwgMHgyZWE5ZGRhOSwgMHg5M2ZkMGRhZCwgMHhjMTViZTg1MywKLQkweDBlNjAxZmJjLCAweDM5ODczZTdhLCAweGRjY2I5Y2E5LCAweGFjYTdmZWQ0LCAweDFmMGFlYTlkLCAweDA4MmZmZDAwLAotCTB4M2U3ZmY0ZTUsIDB4ZjliYTI2NWMsIDB4MzI3ZGU3MTgsIDB4NGFlODdkMzAsIDB4Njc4Y2M3NTgsIDB4NWZjODEyOTMsCi0JMHhmMDQ0MTlhYiwgMHg2N2JjZDliOSwgMHg4ZjhlMWM0OCwgMHg3MWRiZDhjNiwgMHg2ZmRjZGU5YywgMHg3MTgxYWM1ZSwKLQkweGQxMzc3YTU0LCAweDk4OWM5ZjVmLCAweGUxZDA0ODM0LCAweGI2ODljYjBmLCAweGNjN2YzZWRlLCAweGI4NzAwOTE4LAotCTB4MmVmNGEwNGIsIDB4NjNmOTMxNWIsIDB4Mzk5MWIyZDksIDB4ZTM2ZDNmMDAsIDB4NTNmYTI3NjQsIDB4NDNhYjZjYzcsCi0JMHg5M2FhNjU0MywgMHhjYWIzNmQ1ZSwgMHg1OWRmZjdhNCwgMHg1MDE5NGNjZCwgMHhjNjk0Njc3ZiwgMHg2Yjc0NDU1YSwKLQkweDVkM2MzZDIzLCAweGNkN2Q5NzhjLCAweDc4MDBmNmZlLCAweDU4NmU1ZDNlLCAweGRjZjUwYzFiLCAweDc5MGZlMDIxLAotCTB4ZDBlNGQ1ZDEsIDB4YjNlNDZhYmQsIDB4Y2ZiZWYxMjksIDB4ZmFmYWE1YTcsIDB4NmFiMzc3NGQsIDB4M2QzYmUxMTksCi0JMHg2MWRkYjdjMywgMHg5NWQwMGI4NCwgMHgzZmZiOTYyYSwgMHhmZTFiMzg2YywgMHg4ZmUxZWNiZCwgMHgzMWY5MTQ3YiwKLQkweDFiYjZhYWVkLCAweGQ2MjYzMWU2LCAweGY1ODU4ODZlLCAweGVjZmJiZjJmLCAweDUzMmVmYzdjLCAweGEwYzYwZmIzLAotCTB4YjMyMTNhNWUsIDB4NzNmZWYwNGQsIDB4ZDgxYjEzZTAsIDB4ODI1NjVmNGIsIDB4Mzk3ZTAzMDYsIDB4ZDYxZmY2MDcsCi0JMHgwZDNiMDJiZiwgMHgxNjk1OGJjYiwgMHg1ZDgxMmYyYSwgMHgyYWJiZWY4NSwgMHgyMDdmNTRhZCwgMHgxNjI0MmYzNiwKLQkweGMzNjhiZjQwLCAweGVkMWRiNTE1LCAweGZhMmNlYWZlLCAweDVmNDEwYWZlLCAweDJhYjcyYTZkLCAweGJiNjdmOTEwLAotCTB4Yjg3ZDQ1NjQsIDB4MjEzNmQwYzIsIDB4YTJiNmUwMTAsIDB4MTgwYWM2M2UsIDB4YWU0ZDQ1NjYsIDB4YmU3ZTljNTYsCi0JMHhkMTA3MmYzYiwgMHg0NTU4ZjRiOCwgMHhkN2E1OTYyYiwgMHhkMjA3NjYyNCwgMHg4YmNlNDE3ZSwgMHgzZWJiZjFjNiwKLQkweGRkZDY3Y2ZjLCAweGU1N2NmY2YwLCAweDg1ZmVmYTU4LCAweGJmN2QxYjRhLCAweGNhOTczMmIzLCAweDNjN2I1ODhhLAotCTB4NzRiNWIzYjYsIDB4MjBiNDBlYjQsIDB4N2QxMGFlMzYsIDB4YTFkMGRkZGMsIDB4YjY3YTgyOGUsIDB4ZGYyMWIyNGQsCi0JMHg0ZTYzNjlkZCwgMHhhYjc1ZTAyNywgMHhhZGE5ZWI4NiwgMHgwZjkwYTdhMCwgMHg3Y2NkYTdjNywgMHg3YTg2NjFlMSwKLQkweGUzOGU5ZWM0LCAweDMwYTUzZmRjLCAweDNlOTljNzFiLCAweGRiMWFhMTc2LCAweDYzMWRmMDNkLCAweDc0M2M2MzAzLAotCTB4NjViYTMzNzYsIDB4ZjJmYzcyN2UsIDB4ZGRkMTEyOWIsIDB4MWVlNTk1NjUsIDB4YzcxY2FiYjQsIDB4N2EwZmIyNjUsCi0JMHgxODU1MzBkNSwgMHhlMTkzZjdiZiwgMHg3NGUwMDc0ZSwgMHg3MGI4ZmVmOSwgMHgzNWNiNjc5NCwgMHgyZjEwZjA5NiwKLQkweDI3ZTlkNjM5LCAweGRjZjczYWM3LCAweGRmYWRlMTE2LCAweGRmNWM0MzNhLCAweGQwZTUwNWZlLCAweDgxMGU1YzY3LAotCTB4YjdlZTc0YTUsIDB4MTE4Y2E3MjgsIDB4OTc2ZmM0NTYsIDB4NTIwMDQzZjAsIDB4Y2I4ZmE4ODEsIDB4NDA2ZjgyYjQsCi0JMHgzM2JkNjA4ZSwgMHg4M2M4MmQ4MCwgMHg1MWFiZDY3YSwgMHhmMDBmOTAxMywgMHg4ZjI0OTY3YiwgMHhmNTdjNDk5YywKLQkweDU4NWZkOGQ5LCAweGU5ZGJkZjNjLCAweGRmOTdmMjVhLCAweDUzYjJmZDQyLCAweDVlODBkMGU1LCAweDVkNWNjY2JhLAotCTB4ZWFiYWUzYWYsIDB4MTdiNDU2OGMsIDB4YzA3NTI1OTMsIDB4ZWZlYzEwY2EsIDB4OTY0YmJlMjQsIDB4MjA5NWVhMmMsCi0JMHhmYWJkNzY0NywgMHgxOWU3ZTBjMiwgMHg4ZDhjMDlkYSwgMHg2YzZmZjc4NSwgMHhmMzM5MjQwOSwgMHg2NjdhYzY4NiwKLQkweDgxN2ZmNjI1LCAweGM5Zjk3ZmY3LCAweGMyNmYzZjQ3LCAweGQxZDI4OWYyLCAweDEwNTk0MjhmLCAweGNkNzA0MjFiLAotCTB4NzBlMTRkZmYsIDB4NTExMWIzYTQsIDB4NmYxODA2ODAsIDB4NmRjOTQxZjcsIDB4YWQyYzY3NDgsIDB4NDg5YWYwZTYsCi0JMHg2ZGM4Y2Y5OCwgMHg1MGMxYWExZCwgMHhhYTkzYWE4ZSwgMHhjYTYxMWNiMCwgMHhmYmMzMjYzZCwgMHhjZDBiNThiMiwKLQkweDhjNDM0YzYzLCAweDMyZWM4NTFjLCAweDlmOTdmOWQ4LCAweDZiZTFiZDkwLCAweDVjZDZhNDg3LCAweDc5OTgzMDk5LAotCTB4OTJlMTkxZWMsIDB4YTVlMjIyZWIsIDB4MzQ3YTc0Y2EsIDB4NGQ1NjNiZTksIDB4Yjk2ZmVjZTMsIDB4Njk3MzRmZjcsCi0JMHhlMGU5NjAxZCwgMHhhZDZhMTdiYywgMHg4ZTljMWZhNCwgMHhjYmIzYTQ1YSwgMHhkOTJiNjRmNiwgMHhlNzhlNzllNywKLQkweGVkOTdiZjEwLCAweDE3ZDQ1NjYxLCAweGZmNWZjMDA3LCAweGEzM2ZiNjExLCAweGFjMWU3NWE2LCAweGYxODQxOTNiLAotCTB4MDdlMDAxOWIsIDB4ZTk3ZGUwMWIsIDB4OTNkMjFlYTgsIDB4MGMyZDQzYTUsIDB4YzVmNDNiYmYsIDB4M2UxMTcyYmIsCi0JMHg2YmZiOGQ2NSwgMHhiZDEyOWM2OSwgMHg4MmQ5ZmQxNSwgMHg1MTViNTdmZCwgMHhjY2M5YjI2ZiwgMHhkNWY0ODA5YSwKLQkweDlhYmZlYmM4LCAweDFlYTJiMzY0LCAweDg2ZmRhODJkLCAweGE4ZjJkYmQ3LCAweDgzZGUwNzllLCAweGU2MmZkYjFhLAotCTB4NDJiM2Q5NzYsIDB4NzRmNmIxMmYsIDB4YjI0NDViOTIsIDB4N2ViZTBmMTYsIDB4ZmRmMWFmMDUsIDB4NjQ0NzE4ZDYsCi0JMHhjZmEzZDE4NSwgMHg0MTZkMGY0MCwgMHhmMmQ0ODhmZSwgMHhlNjEzNmRmZSwgMHg2ZTVjMTM0NiwgMHhlMzI5MGY1MSwKLQkweDBlNjVhYjNjLCAweDJkNDVlYTAzLCAweDIwZjU5N2Q3LCAweDYwM2U5MDJmLCAweDdjNzExN2ZjLCAweGM5NDY2ZjQ1LAotCTB4YWMyMzVhNTIsIDB4MWQ1OWVhM2IsIDB4ZjhiN2IzOTcsIDB4ZDYwM2Q5OWQsIDB4ZWM1NGRlOTMsIDB4MWY2MTcyYjgsCi0JMHhlODEzNjE1NCwgMHhiZmI0NjVkZiwgMHg4OTcwZjI4MiwgMHg2ZDRjYjNkMCwgMHhlM2JiNDU0OSwgMHg3NzZkYTMzMywKLQkweDYwNzFkOTJjLCAweDdmNDhhOGU3LCAweDY1ZWIxZWZkLCAweDcxNzVkODMyLCAweDMxOWQ3NjVlLCAweDE3ZjQ5NmU0LAotCTB4ZTNmNmQ5MzMsIDB4N2RiNTZlN2EsIDB4OWZlNzk4YTgsIDB4MDM0MzNjYzUsIDB4MWQyYzlkYTIsIDB4ODdmODBhZmQsCi0JMHg3ODU4ZTk4NCwgMHg1ODcxODZkMiwgMHg0NDdlZjFmNCwgMHhjMTU2ZWIyNCwgMHhlMTFkMDczYSwgMHg4YmIxZTNmNSwKLQkweDFiMDVhY2I3LCAweDc3YTQ3ZGZkLCAweDMzODI0NzBlLCAweGZiNDMwMDUwLCAweGNhNmU3OTRjLCAweDYyMTBmNGUwLAotCTB4MTFkZDkzZDcsIDB4NTQ2MmIwM2UsIDB4MzM3ZDE3ODUsIDB4YzIwYzdiYjUsIDB4NjUzZmQzNjMsIDB4ZGI3Njg0YjcsCi0JMHhmYzUyMzNmZiwgMHg4NmRlN2ZjNywgMHhmZDdmZWUzOCwgMHgxNTBlNjI0YywgMHgyZDE1ZDdkMiwgMHhiNGQxNmJiNSwKLQkweGY0M2RmZWVmLCAweGI1NGMyOTZiLCAweDAwN2IzZmEyLCAweDcxYzdhZGYwLCAweDhlYzk2YTY2LCAweDA1ZGI0MTZhLAotCTB4MDljY2I3ZGEsIDB4ODZmN2I5MjMsIDB4Yzc0MWNiODYsIDB4ZGZkZTAwOWMsIDB4ZjdjMTAwMDAsIDB4Njg5ZGMzYWIsCi0JMHg1NWQ2MGRhNywgMHhlMzg2OTdiYywgMHhkZjEyMDU1NywgMHgxYjljNjhiNCwgMHhjN2ZjNzE2MiwgMHhiMmY4ZDIwNiwKLQkweGU4ZTFiZGZlLCAweGU0MjI3ZDdmLCAweDllZTQ5NTUxLCAweGM3NmRmMThiLCAweGVmYzMyZDE1LCAweGEzYmIwNGQ1LAotCTB4NTM1ZWExY2EsIDB4N2ZkYTljMzgsIDB4ZWQxOTJhMDIsIDB4NWI2MDlhYzQsIDB4MDNkOWNhMjQsIDB4ZmU0OTk0ZmYsCi0JMHhiYTgyOGNkNSwgMHhjNTEzZTQ5MSwgMHhkODY2NmE2MSwgMHhmZWExODMyMiwgMHg0ZDRiYzBhMCwgMHg5OWZlYjNhZCwKLQkweDRjOWU3YzUwLCAweGI4YzYwY2UzLCAweGUxOGJiNjFlLCAweGMzNDVmY2UzLCAweDA3YTdkOWZiLCAweDA3NWVkMWFhLAotCTB4ZjA4OTE0NGQsIDB4MDI3ZTZkZmIsIDB4ZTNjMmQyYzUsIDB4MDg3MWM4MjYsIDB4Y2ZiN2UxNWYsIDB4MTk0NzcyMTYsCi0JMHhiM2U4M2IxZiwgMHhmZmUzMGVkMCwgMHgzN2E5MmNlNiwgMHg1ZmRkN2YyMCwgMHgwZDAwZTg2MCwgMHg1ODI5M2VjMiwKLQkweGY1YmY0MjYzLCAweGQ2ZWNiYjdlLCAweGY3NjA1YzgxLCAweGVjZmFkYjY1LCAweGRmMWM1ODgyLCAweGJkMjFjNzI2LAotCTB4OTM3ZTJiZTUsIDB4ZjVjMjMxN2IsIDB4ZGIzZDFlY2QsIDB4ZTAyMzc2NDQsIDB4YmE3YWVkMzUsIDB4MWZkZjgwYmIsCi0JMHhmOGUzZmU4MCwgMHhjN2ZkYmNhNywgMHg5ZmU3MWQ0MiwgMHg2ODg3NDgwYiwgMHg0M2RhMDYwZiwgMHg0ZGU1ZmU3MCwKLQkweGY2ZjI5ZjkzLCAweDU5MmNlNzJiLCAweDQwNzI0NDE3LCAweGE1NTJmNzdjLCAweDEzMmZhOWVkLCAweGE1Yzg0ZWQwLAotCTB4ZjJhZWY5NTIsIDB4N2E5OWRjYmQsIDB4ZmU4YTE0OWIsIDB4NzE4OWNlOGQsIDB4MGVjMjA1YzAsIDB4NjdiOWQ3MmQsCi0JMHg2NzNlM2YyMSwgMHhlZmEzMGZiMCwgMHg0NzRjNWQxNCwgMHg2Njc0MzE3YiwgMHg0NzVjMDBmMiwgMHgwZTYwYmJmNywKLQkweDAyMzNkYjQxLCAweDgwNTA2N2NmLCAweDRjMmI5ZTIzLCAweGQ0NGMzNzQ0LCAweDQ4MThiZmVkLCAweGRmMDRiOWY2LAotCTB4NjJmYTNhNDEsIDB4ZGEzYjY5OGQsIDB4MmRhZDc2NzMsIDB4ZDFkMjA5NzIsIDB4NDdiMjQwZjIsIDB4YzFkYzgwY2UsCi0JMHgwNDk0Y2Y3MSwgMHhmYmNlMWQxMywgMHhjOGZiZjE3NSwgMHhiNGYyNjc2ZiwgMHg1YTY3OWY0NCwgMHhlOWY3YmRiOCwKLQkweDg1YWRkOTRhLCAweGJjY2Q3N2Y1LCAweGY0MjI0Y2Y2LCAweDQ1ZjU1YWViLCAweGRiMjg1NmQ2LCAweDFhMzVmY2Q3LAotCTB4MzViY2QxZjUsIDB4ZGZiMGQzYTUsIDB4ZDM1NWEyYmMsIDB4ZTIzNzRlMTEsIDB4M2EyNTc5ZjMsIDB4NmUxY2NjYzEsCi0JMHhiNzZjZTM1MywgMHg2NzQyYmUyMywgMHgzOTQxY2I1ZSwgMHhlNGI4YjgzZCwgMHgxN2MxOGMzOSwgMHhjNGVmZDljNywKLQkweGRiNjk5N2Y1LCAweDY1MWUxMGNiLCAweDhkMTY3YzZmLCAweGYzNzc3M2Y2LCAweGExNWI3YmNiLCAweDI3ZDkzMzZjLAotCTB4MzViMmJmNjAsIDB4YzNhY2M1NzcsIDB4NTVmZjg0YzEsIDB4MDE3YzA2YTYsIDB4NjcxZTdkMWQsIDB4ZTVmN2MxY2YsCi0JMHhkODg5ZGM5MywgMHgyZGE2OTJlZiwgMHg1NmM2ZTEwNywgMHg3ZGRkOWFkZCwgMHg4MGZlYTViMSwgMHg0MDYwN2U4NCwKLQkweGIyOTUxOTRiLCAweGQxZTcxZDMzLCAweGE0ODNiOTI5LCAweGQ4MjM4NDM4LCAweDRiZWViMDBmLCAweDcwNTA3NzY2LAotCTB4Yzk4ZDQ1MmEsIDB4ZTlkZTI4OWUsIDB4NWE5YTNlYmIsIDB4NDAzYjg4OTgsIDB4NmM5NzYyYmYsIDB4MzJkZDIwMzMsCi0JMHhlYmU3MTZhNywgMHg5ZTE4YmVkZiwgMHg3YzViYmI1MywgMHhmYzVjYzQ1ZSwgMHg5M2QzNzA3OSwgMHhhYjdkMjA3NywKLQkweDM3ZjcxYjk5LCAweGQ4NGFlZTJlLCAweGJjYmZmODhlLCAweDZmNDRlNWZmLCAweGJjYmZkODNmLCAweGZkN2NiZTdlLAotCTB4MDBiZTkwOTcsIDB4ODllMDk3OGUsIDB4NDFhYmU5MDYsIDB4NzVmZmUzZTcsIDB4ZmEyNDhhZWQsIDB4ZmQxMWVmODIsCi0JMHg3MjRhZWQ3NCwgMHg4ZjkyZjI2ZSwgMHgzMDdlNDI1ZCwgMHgwNjZiMmJhYiwgMHg5NWNkYmRkMiwgMHgyMjk2NzY4NSwKLQkweDk1ZGU5ODJmLCAweGIyNWJmZTRlLCAweDE1ZmQxZDJiLCAweDNjYjBkZTQ1LCAweDc3M2QyMjU3LCAweGZkYjExMmJhLAotCTB4OGQ2N2Y0MDEsIDB4ZWQxNmVmOWUsIDB4YzRkZGFhOGUsIDB4NTUwZThlZTMsIDB4NmM0N2Q2MDYsIDB4ZWUzMmJhYzcsCi0JMHhiNDk3ZDZjZCwgMHg0ZjUzZWI1NSwgMHg5ZmQ2ZmE3MSwgMHg5NWZjZjIxMCwgMHgxZjhhYjQ1NywgMHg4MmJmMGIyYywKLQkweDVhM2MxNDU5LCAweDcwNDZmZGI4LCAweDgxNTZiM2Y5LCAweDU5NTFjM2NiLCAweGJmODAzNzE4LCAweGRjZGU2OTYyLAotCTB4ZmI4NTdlNmYsIDB4ZDk0NjA3Y2QsIDB4MmFhZTUwYTMsIDB4NjA4MWY5ZmUsIDB4NWVhMmE3YTgsIDB4ZWE1NmYzZTUsCi0JMHhlN2ZjMWMwYSwgMHg0YmNmZTZiZCwgMHhmN2JlMzBhMywgMHgxZjhmMWM0NiwgMHhiY2I4MTk1NSwgMHhiOTcwMzJhYSwKLQkweDE1OTRkYWI0LCAweDM0YWJlZjhlLCAweGEyYTZjNzYwLCAweGVlMmM3MmJmLCAweDBlMDc4ZDRiLCAweDM2NmQyYWU3LAotCTB4ZjU3ZGMxMTAsIDB4ZTk0NzViYTUsIDB4NmQ5NzZmOTEsIDB4YTZmN2E1MWIsIDB4NjM5ZGFhOGYsIDB4ZGU2MDU5OGUsCi0JMHhhZGFhNzY5NywgMHhiNTJhODRiOCwgMHhkN2I0NDlmMywgMHgyZWNhNzZhYSwgMHg3YWY3YTMwNywgMHg2NGJmYjQxYiwKLQkweGRiMDI3MjNjLCAweGUzYzZkZDJkLCAweDY1ZmY0YTE2LCAweGY5NmRiMzViLCAweGIxMWVmMzVlLCAweDY5YmUxN2QzLAotCTB4YzhmYWRmMmUsIDB4NTFmYWRmMjYsIDB4ZmQwNjQ1YjQsIDB4Yjk0NmZkZWIsIDB4OGU2M2ViN2QsIDB4N2ZjZmQ2ZjksCi0JMHgyNDJjZjBmOCwgMHhmMWQ5MDJjMywgMHhlM2Y2OGNhNCwgMHhhMThlNzM1ZiwgMHhjMGVhZjkzZSwgMHhmNzhhMjBjMSwKLQkweDhhZGY5NjdjLCAweGFkYjJmMTc2LCAweDNjMDc3MGJlLCAweDM4Mjc2ODRhLCAweDc3YTQ0ODc2LCAweGZjZmU5ZDBiLAotCTB4MDMxZjNmZDIsIDB4NWYzODk0NDYsIDB4MTRkZDM3YjIsIDB4M2FhYjQ3MzEsIDB4OWRmNmZhZTYsIDB4ODZjYjM1Y2MsCi0JMHg3Zjk1YTU3MSwgMHg4YzcyZmI4YSwgMHg1ZGRiZGM2NywgMHgwZmU4YjQ1YiwgMHg0NmY3N2ZmOSwgMHgzNjhjY2I3YywKLQkweDE2MzdjNjBiLCAweDdlZWZlNThlLCAweGZiMjI3MmI0LCAweDdjZGJjNzAyLCAweDcxZTkwNzMyLCAweGQyMjRhZmUxLAotCTB4MjVmNzBiYzMsIDB4ZDM3NDhkYmQsIDB4MTRjZTc3YjEsIDB4MTJlNTY3MmEsIDB4Y2JiODk0M2MsIDB4NmRjOTE2YjIsCi0JMHgyYzc5YmE4MiwgMHg2NTBmZGJlYiwgMHg2YjQ1ZWYzMCwgMHhhMWYxM2U3NSwgMHhmM2JlY2RmYywgMHhmYmUzNWE1OCwKLQkweGUxZDM1OTdlLCAweDZiYmVlMWJmLCAweGRhNDVmZTgxLCAweGE2ZDgyZWE3LCAweDM5NmI4YmYzLCAweGJkM2I0MmRmLAotCTB4N2U0NjJiZTgsIDB4ZjdkZDUxNzgsIDB4NWVlMmZlYmEsIDB4MTQzYWM0NGIsIDB4ZWUzOTkwZmIsIDB4NmU0ZWI4NjQsCi0JMHg4ZWRmODIwMiwgMHgzZDcyMDdmZiwgMHhjNGQ3NmNjNCwgMHg4ZGQ4ZjIwZiwgMHg5NWE5YWEzZiwgMHhjY2E1N2UxMSwKLQkweDhlMzk4OGZlLCAweDIwNzc1MWZjLCAweDBlYTk2N2NjLCAweGE0ZDFiMWVjLCAweDU3N2Q2OTg3LCAweDc4YTAwZWI3LAotCTB4MDY2NzNjMDcsIDB4YjU5NTdlNzgsIDB4YmU3ZWExNjUsIDB4ZjJiMjY4ZGEsIDB4OTY1YjU5MzgsIDB4YTBjYmVhMTksCi0JMHg2MDJiZjA4ZSwgMHgxMmE3MDRkNSwgMHhhNzMyY2I5NCwgMHhkZGI3OWIxYiwgMHhiM2FkZjRlMCwgMHg5N2I3NmU2YSwKLQkweDExODdkZGE4LCAweDlkYWNjNTFlLCAweGJkMWUyMWZhLCAweGJhYzA5NWRiLCAweDNiNDEwOTNlLCAweGIzM2ZhZmM0LAotCTB4ZGNiYzljNTIsIDB4OTVmYzI1YTgsIDB4ZjNhZjdkMzcsIDB4MGJmOGFmN2UsIDB4YzRhMmZmOGEsIDB4ZjQ1NzdlZTEsCi0JMHhiN2QyMDA2MCwgMHgzNTg3ZDg0NiwgMHg1YjdiOWQxYiwgMHg5NGViM2Q2MSwgMHgwMzE2ZGViOCwgMHg2YjA3YTdjOSwKLQkweDdiMDdiY2I5LCAweDU5ZDcxMTMwLCAweGQ2ODUyNWIzLCAweDhiNjRhMGZkLCAweGY2YjY4NzU5LCAweDdmZDEzZDBjLAotCTB4ZDNkODMwNGQsIDB4OTI0NzY0YTEsIDB4MjM3NjAwYmQsIDB4NzMzZGFkZDksIDB4MTJlZGNlYjQsIDB4MzcyZThmZGEsCi0JMHg0ZjM1YzFkYSwgMHhjYTA2ZjhmMywgMHg5ZjZiYjI0OSwgMHg1MjdkOTAzMCwgMHgyN2RiODMzMywgMHhhOWMyNWIzNSwKLQkweGNhNzA1ZmZmLCAweGYyNTc2ODkxLCAweDkxM2NkNGY5LCAweDk5NWRlZGM2LCAweDhjZTE2M2Y3LCAweDY1ZjYwN2U2LAotCTB4NWU2YmRlYTIsIDB4YjJmZjVkOGEsIDB4ZjExMTNlZDksIDB4MjZiN2FjYWQsIDB4ZmI4NGM3YjgsIDB4ZTA2MGFjMWQsCi0JMHg3YWY5ZTkyZCwgMHgwMDdhYmZhMSwgMHhmZjA3MTgwZSwgMHhjNTZiY2E1MiwgMHhkZGE1MDk3ZCwgMHgxZjVjZjE3ZCwKLQkweGVkYjA0ZDY0LCAweDVlMjhlZDEwLCAweGIxOWFhZjllLCAweGE3OTgyN2U5LCAweDUyY2E4Y2YwLCAweDdmMDVlMzE1LAotCTB4ZDcxMTJkOWIsIDB4YzMxNmU1ZmYsIDB4OTlkM2M0NjgsIDB4Njc5ZTVjNTEsIDB4MDVmMWUwNGQsIDB4ZGI2YzViZjAsCi0JMHg1ZTIyZmY3MSwgMHhmZDc3MTNlNSwgMHg2MTRlZjhhOSwgMHhmNWU2ODViYywgMHgyZjhmMzY2NSwgMHgyOGYyMzI5YSwKLQkweGRhYjYwMzhlLCAweGY1ZjZmZTgyLCAweGJlZjllMzBiLCAweGVmMzZiZTY4LCAweDk5ZmI4ZmY4LCAweDM2MTcwMjhmLAotCTB4NWYxN2ZiODksIDB4YmU5MTI0M2UsIDB4OWEyNGY1ODQsIDB4MWJmNTllYTEsIDB4YmU3ZmM1MDMsIDB4YzE0NzdhMTQsCi0JMHgyNjUxZDAwNywgMHhjNzIxNjFlOSwgMHhjNjdlOTBjMiwgMHgxOWU3ZTg3OCwgMHhhNDBlMTc0MSwgMHhmZDM3OGIwYiwKLQkweDgzYzdkMmY4LCAweDA5ZWNmZjAyLCAweDA0ZDY5ZjZlLCAweDEzY2Q3YWYzLCAweDlmYTAzNzI5LCAweDY1MGZmZGZlLAotCTB4ZmNiNTM1YmQsIDB4MDFkZmJmYmQsIDB4ZGUzNmIwNzQsIDB4NzRmZTllMGIsIDB4NGNjZWQ0YzAsIDB4N2YzNWZkZWYsCi0JMHg4ZDk2YzgzYSwgMHg1N2U3MjhjOSwgMHhiNDU2MDE0OCwgMHhmZTA4NTdjNywgMHgxMTg0YjE1OCwgMHgwYWIxNDYzZCwKLQkweDgyMzVmOTA5LCAweDAwOGYyOWI5LCAweGM3MDE4MWU0LCAweGMwMGY3MWZiLCAweDdmMGY4YmRjLCAweGJjY2Y0ZDcyLAotCTB4MTY3OGRmZjUsIDB4YTg5ZjUzZWMsIDB4OWY2OWY0OGYsIDB4NzlmMThlNmQsIDB4OGE0NDU3N2YsIDB4OTZjOWZiY2YsCi0JMHhhOWY1M2U1MSwgMHhiNGZiYjdjOSwgMHhkZTNhZGJiZiwgMHhkOGNmN2VhNywgMHg2N2VkM2VjOSwgMHhkNGY4NjZkOCwKLQkweGM2YWNjYzZkLCAweGVlNTRiN2Y5LCAweGNkZTBmYjI0LCAweDk3ZGM1NzRhLCAweDY1YzNkNzA5LCAweDNlYzhlZTljLAotCTB4YTZiMTk1OGIsIDB4YWE2NzA3YmEsIDB4MGRjNjFlODEsIDB4MDYyMmIyMzgsIDB4ZWRlMzg3ZWEsIDB4ZTQ3NTFlYmMsCi0JMHhiMTk5OGM2YSwgMHhmMjE3ZTJiNywgMHg1NzIzODhmYSwgMHgzNDdlYTE2MywgMHhkZmFmMTE3ZSwgMHg3ZjVmYzhjMSwKLQkweDRjZjE3ZTI3LCAweDE1YzUyYTQ3LCAweDY2N2UyMThmLCAweDhhMzhhYjVkLCAweGFiNDdlMTZlLCAweDQxODkyZTY3LAotCTB4MjRjOTJmMWUsIDB4NjdlY2FlMzksIDB4M2Y2MzEzZGMsIDB4YmNhY2ZjODQsIDB4OGQ5ZmRhNTcsIDB4YWZiYmZkZTcsCi0JMHg3ZGRmZjk3MCwgMHgyMzc3Y2I4NSwgMHhmZTgzMjkxYSwgMHgzMmZjMTJmZCwgMHgwZTA0ZmVmYSwgMHg2ZjQxMzYyMiwKLQkweGE2MmZmZGE0LCAweDhiZWE1Y2Q3LCAweDk0ZmM4MzQzLCAweDNjNjE4YzZjLCAweGYwMTJhNWFmLCAweGQzNzA4MDlkLAotCTB4MzRhZWU5NTMsIDB4MzJhNDc5NTMsIDB4MmJiN2NhODIsIDB4ZTAxZjJjMmQsIDB4NGM5OTVhZGEsIDB4MmI0YWIxZTUsCi0JMHgzOTVlM2YzZCwgMHgyYmY3Y2E5NiwgMHhhODllNTQ2ZCwgMHhhZGIyYTVjYywgMHgwOTRhOGYzMiwgMHgyODc5YTk4YywKLQkweDM3NTg3NjNmLCAweDBlMmUxMDY4LCAweGJkMzlmMDc1LCAweGM2ZTUyZjI3LCAweGNlY2Q0YzcyLCAweGM2ODVmODI5LAotCTB4NWY2YzE4NmYsIDB4MzFkZDkzYzQsIDB4NzE3MTRjYzQsIDB4ZDM1YmJjZjEsIDB4NzNkMjIyZjMsIDB4YzE2NjE1ZDUsCi0JMHhhNmMzYjg3YywgMHg5ZmI0MTZkMywgMHg0NGY1MzJhYiwgMHg5YjRmNTJlZiwgMHhiOGViZTUwNSwgMHhiYWFmNWUwYywKLQkweDY3NTE2NmQyLCAweGZkZWEzYWYwLCAweDI4ZDc2MGVlLCAweGE1NTUwYmQ0LCAweDE4OWFlYjQ2LCAweDQ0OGVlZjdjLAotCTB4YTE1NzE5N2UsIDB4Mzg3ZmEyYjUsIDB4M2U2N2E3YTksIDB4YTMzOGYxZjIsIDB4ZjQ3YTgyZDYsIDB4MmRmNWE5YjAsCi0JMHg3M2NhM2RmMSwgMHhkY2MyYmJhOSwgMHgzNDU3ZGMyYSwgMHhlMmNjNTliNCwgMHg3YzBlMzgzYiwgMHhjMWY1MDYzNywKLQkweGJiZTE4N2I4LCAweGVkMDU2ZTM0LCAweDY3OWI4ZDA3LCAweGU0YWVmYmVjLCAweDBmZmQ1ZGY3LCAweGU0YTI3NzdmLAotCTB4NWVmOGRkZjUsIDB4ZmYzYTZlZjgsIDB4YmJlN2M1YWUsIDB4ZTVlYzk5NmUsIDB4MGZiMjZlMmIsIDB4MTFhZDgzYmEsCi0JMHhmYTk1NWYyOCwgMHg0YTlmN2MyNCwgMHgzM2QyNDI3MSwgMHgxOTZlMmNlMywgMHhlODg3ZWZmNywgMHgwNzBkM2NiOCwKLQkweGE1ZTBkMmYzLCAweDYyNzg5NTZmLCAweDY3NWYyZjVkLCAweDA4YmJhNTU3LCAweGIwOTI2YWY5LCAweDU5NjkyNjU3LAotCTB4YTk5M2MyMzIsIDB4OThmZTI4MDIsIDB4MWFkNzdmMmQsIDB4Y2RlNWY1MDUsIDB4OWRjYzI4ZDIsIDB4ZGJjYmE0OTgsCi0JMHg5YWFlN2U0NiwgMHhjYTE2MWRjYiwgMHhiNzUzMzJmNSwgMHhlZDBjYmUxNSwgMHg1OTQ1ODU0ZSwgMHg0ODZhZGYzMSwKLQkweDBmMTYwMWM0LCAweDNjYmIzODcyLCAweGZhZjUxNTM3LCAweGQ0ZGY5MTI5LCAweDQ4NGY2NDFjLCAweDliZGM3OTgwLAotCTB4MjU0YTcyMGEsIDB4ZDlmNzE5ODgsIDB4ZGU0OTAzNzIsIDB4Y2E0YTFmNzcsIDB4YTY3ZjdiNDQsIDB4MDE5ZmIyY2UsCi0JMHgzYzI2YTcxZiwgMHg3MjBkNTMzMywgMHg0YjAwZTY3MSwgMHhmYWM2NjRhNiwgMHhiNzBmNWUzNiwgMHhiZGUwOTdlYywKLQkweDczMzMzZDk5LCAweGMxZmZlZGQyLCAweDQ5MzRmYWZlLCAweDM4MWY5N2VkLCAweGFkZjgwMTM2LCAweGM4YjJmNzM0LAotCTB4ZmIyMWVjNTcsIDB4ZTQ5OGM3ZjYsIDB4NzdlMjg4MzQsIDB4OWVjN2E0NmUsIDB4MDNkMjI2YzksIDB4OGU1YjhmMTgsCi0JMHg5MmQ1M2JmMiwgMHgzNWEyZWQ4OSwgMHhmZjA4NDEzZCwgMHg5NGQ0ZWZlZSwgMHg4MzJkMDIzZiwgMHhlMzhhZjNlZSwKLQkweGYzYzJkOGJjLCAweGUzZjlmYzRhLCAweGFiZDcwMjcyLCAweDlmM2NmMWU1LCAweGFmNDIyY2E5LCAweDRhZTViMmE3LAotCTB4OGY3Y2EzMGUsIDB4M2ZmNDc4YmMsIDB4NTdlZGVhYzEsIDB4MDI3N2ZlYmYsIDB4NTk4ZTFmZGYsIDB4NDdmMWU1YWYsCi0JMHg2NTMwYTExNCwgMHhlYTUzMDA1YiwgMHhhOTZiY2MwZSwgMHgzMTQwMjQ3ZCwgMHg0ZTAwNmQ0NiwgMHg1NDdlYzVhNiwKLQkweDI0Y2RmYTZmLCAweDFiN2I0ZmI1LCAweDY3YmNmN2I2LCAweGQyOWYwNDM2LCAweGNmN2VhNGJmLCAweDhiYzZkNjZmLAotCTB4MmNiZDIxZWYsIDB4ODI1YzRlNjUsIDB4NGRhOWZlYmYsIDB4MGJmYzUxMGMsIDB4YTEwYmYzYzIsIDB4ZTM4YmYyMDYsCi0JMHhhMDU3YTA2NSwgMHgxNzQwYThjZiwgMHgwY2ViMzNjNSwgMHhkY2MxN2U5YywgMHhjNTRlYjJhMCwgMHhjMDAzNmJkZiwKLQkweDUwZmE4NWZlLCAweDlhM2VlM2E4LCAweDIyYmVkMTNiLCAweDY3ZjUxMDcxLCAweGVmMmZlYzY2LCAweDIyOTFmZWE1LAotCTB4MWY3OTRlNmYsIDB4MTk3OTUxOGUsIDB4MGNkYWU5ZjMsIDB4NTU5MzhlNTgsIDB4NGU0ZGMyZmQsIDB4YzQ2YmZmMWMsCi0JMHg4M2E1NTc3NywgMHgyZmQyZjU5ZCwgMHgyYjQxODE1ZCwgMHg4NjU0ZjFiZCwgMHhmZGRlOGRmZCwgMHhhNTNmNTAyNiwKLQkweGZkZDgyOTdmLCAweDljOTIwNzY3LCAweDhkMjk3YTI2LCAweDJiM2U1MTU3LCAweDRiNmZjZGY4LCAweDM2YjBkNzY4LAotCTB4YTU2MWVhMmQsIDB4YWI5MDY5ZGYsIDB4NDEwZmJkZjgsIDB4MDlmOTYyY2UsIDB4YzBiM2Q3YzgsIDB4OWNhOTdmOWIsCi0JMHg5NWE3ZTU0ZCwgMHhhNjdlN2E3NiwgMHhmNmNhODBiMiwgMHhmZTdhMGFjYSwgMHgyYTRhZTU3OSwgMHg2NTM1Y2Q2NywKLQkweDM3OTQ5ZjIwLCAweGJkNjc2NmFkLCAweGE1ZDRiYWU4LCAweDRiZWY3YmIxLCAweDNmZGYxZTllLCAweGUwNGFlY2JkLAotCTB4OThlOWRkNzYsIDB4OTViYmRmZmUsIDB4YmM3Mjc3ZjcsIDB4ODE3ZDgzNzUsIDB4ZGZkMDI0ZjYsIDB4OGRjODczNWEsCi0JMHgxMzZlOGNlZCwgMHgzNzdhYmZkZiwgMHg3NzczZDM4NSwgMHgyNWQ3YWYyNCwgMHg1MzZlYTg2OCwgMHhmZmQ4YWRiMSwKLQkweGQxMmQxNGRkLCAweGM2NDQ4YWViLCAweDJjNzg4OWRiLCAweGRmOGQxZmQwLCAweDNlNTRlNzA3LCAweDE5Y2VkMjhlLAotCTB4MmZlZGNhYWYsIDB4ZjIyNTk4NGYsIDB4ZTg5ZjQ0NzYsIDB4YzYzZDIwMmYsIDB4OTk2N2QxNzgsIDB4OWZkM2U4ODUsCi0JMHgzOTEzNmEyZSwgMHgzOGViYzRkZiwgMHgyZWExNDVkZCwgMHg3MDhjN2RjMiwgMHgwYTczMTM4MywgMHhkYzM2YmU2MCwKLQkweDM4OTNhZjU3LCAweDlmNDc1ZTNkLCAweDVkOWZlZTJhLCAweDBlMzA5ZjQ3LCAweDVjZTgwOWMxLCAweDdlYzdmMjgyLAotCTB4ZWY5NGEzZjQsIDB4MGI2ZmJlMGEsIDB4ZTA4Y2ZkMzMsIDB4YTMzMWEyZGMsIDB4MGNiMWY4YmUsIDB4YWFmZWM1ODAsCi0JMHgwZjk4MTNkZSwgMHhiMjY2MTUxZSwgMHhmNjQ4OWVlMCwgMHhmZThhYzZlMywgMHgxMjNmYzdlNCwgMHg2ZmZkN2RiOCwKLQkweDFmOGZiZmFmLCAweGRkN2ZkNzdkLCAweGQwN2VjNWJhLCAweGU0OWJhZWFkLCAweGE0NGJjYTA5LCAweGMzZTQ3ZTlmLAotCTB4M2U0NTA0YTUsIDB4MTM5MWZhNzAsIDB4M2Y1MGU3NmQsIDB4MzUwNjRiNzQsIDB4MGRiYmIzYzYsIDB4ODNhZTJlOWMsCi0JMHg0ZmE3MGE1YiwgMHgwNTZhM2U4NSwgMHhiYWUxNDQ3ZCwgMHhlOWViM2NlMiwgMHhkZjgwN2Y5YiwgMHhjYTMxOTZmYSwKLQkweGEzYzdmMGViLCAweGQ2YmM1NzIyLCAweDJmMDRmN2Y1LCAweGQ4MThjMjc5LCAweDQ4N2ZkMDE3LCAweDA5ZjY5MTg5LAotCTB4MDk5YTI0NTcsIDB4Y2U4M2RkN2UsIDB4NmYwMmRmY2YsIDB4ZTI3YTE1OWYsIDB4YTdkZjE1NzksIDB4ZGY3NmU0NTAsCi0JMHgzMDVlNDk3MywgMHg5ZTQ3ZDUyMywgMHg3YTMzYjQzMywgMHhiZjg4ZTkwZSwgMHhmMDU2MmFkYywgMHhmODUxZmExYSwKLQkweDcwYmYyZjI5LCAweGVmNTNjMGFjLCAweGVlMTU0Y2VjLCAweDZiN2Q3NWJmLCAweGNkMWU1MDc0LCAweDY4MzM5ZWUwLAotCTB4MDU2ZDc0NDcsIDB4N2ZmYzgwMDMsIDB4ZjQwOTM0ZGIsIDB4ODc4YzEyZDksIDB4YWZiZTMwNTgsIDB4OGJlOGZkYTcsCi0JMHgyNGIyMGY2MCwgMHg3MmJhZTc2OCwgMHhmMjk4ZWQwNiwgMHgwN2E2NjRlNywgMHg3ZGNmYzlkMCwgMHg2NWU5MGIzMywKLQkweDk5OGQyMWU5LCAweDRmYWQ5YWVjLCAweDNiN2E0MzFkLCAweDUwNTkyOGQ3LCAweGMyMzU3N2RmLCAweGIzOWY3MWIyLAotCTB4NDAzNGU0YzYsIDB4NjNhODFjZmIsIDB4NjUzYjY1ZmIsIDB4MDM1MjI1MjcsIDB4MTRmZTkwN2IsIDB4Mjg2YjNiZGYsCi0JMHg3NzdiNDU4YiwgMHhhMzNmNzNlMiwgMHhiNWE1ZjhmZCwgMHg3MTg3MGIxMiwgMHhhMmJhZGFkZiwgMHhlN2VhMTIzNSwKLQkweGY5ZmNmMWI2LCAweDdmY2YwMzJhLCAweDZiMzc5MWNmLCAweGI0N2M2MzA3LCAweDMxMmYzZjk2LCAweDdiZmU1MGU2LAotCTB4NzU2NjJlZDEsIDB4YWY2NWJjNjMsIDB4YTVmM2ZjODksIDB4MTU3OWJlMzUsIDB4ZWI3Y2RiMDUsIDB4NWNiZTIyODUsCi0JMHhiY2ZiZTc1NCwgMHg0ZjM3YzFhNCwgMHhjOGEyNGM2MywgMHhhMzYxNDhjMywgMHgxMzVhNWUyOCwgMHgyMjgwNzY0MiwKLQkweDc3ZTQ2ZjRmLCAweDM5NzM5NmQ5LCAweDYxZDdkOGM5LCAweDBmOTVlZjE4LCAweGI5ZmQxMzdkLCAweDg4NjdkNzkxLAotCTB4MmZkNDA3N2EsIDB4YTJmMWMzN2YsIDB4Yzk0Y2E1YzAsIDB4MTk2NDg4MmIsIDB4MjNjYzBjYWUsIDB4M2Y3MTk4MzQsCi0JMHg4YmY5YWNhYSwgMHg3M2Y5ODYyMCwgMHg4OWQzZWQwMSwgMHgyOTk3NWYzZiwgMHg5MzYzNmFkZiwgMHhhNTY5ZmI0YywKLQkweDMwOTc4NjJkLCAweGZmNmNiMGNmLCAweDg0YzVhZDQ5LCAweGVjODg3ZjcwLCAweDYzOThiYjgwLCAweDZlOGJmYTNkLAotCTB4NmZlNDRhOTUsIDB4OGRkYzUxYjcsIDB4NTI5NjdhZDksIDB4NjBkOWJiN2MsIDB4ZjY1YWZkNDYsIDB4NzNhZGM3ZmEsCi0JMHg2MjVmYmViMSwgMHhkMGUzYzQwNiwgMHhhNTkzYTI3NiwgMHg1ZmI0YzljZiwgMHhjOWYyZDBjZCwgMHg4Yzg5ZDBmMiwKLQkweGJiM2M0NTc4LCAweGNmM2VkMDA2LCAweGUyM2JjNDMyLCAweGU3OGVmMDE5LCAweDM0ZTdlNDFiLCAweGJiYTVmNzg0LAotCTB4YjU1ZjdhNjQsIDB4ZWQ4YjRhYjUsIDB4N2UzOTM5Y2YsIDB4YzhlN2JjMTUsIDB4NDVjZjA4YWIsIDB4NGU3YzcwMmYsCi0JMHg5OWZlYWU3YywgMHg1ZDgzYTQwMCwgMHhkZjczYjIxYSwgMHg3OTgzN2U4MiwgMHhkMDNhMWYzZiwgMHg3N2UzZTIxZSwKLQkweGRmMTQ0YmQ1LCAweDY2ODNhM2VhLCAweGUwMWQxZjVkLCAweDA3NDY2ZjNjLCAweDY3YTQ5ZmMwLCAweDA2MDc0NjZmLAotCTB4NGZlNDE3OTQsIDB4OGExYTNiOGYsIDB4ZjhjZmVkZjYsIDB4OWRiODk0N2MsIDB4MWY5Yjk3MTIsIDB4MTBmYTU5ZDIsCi0JMHhkODg4NGQzNCwgMHgxYjJjZjY0NywgMHgwODk1NWY2MCwgMHhlNGNjZTY3MiwgMHg3NGRjMjgwZiwgMHg1MWVlY2E2YSwKLQkweGZmMDM0Zjk0LCAweGJmOTQ2MWY0LCAweGZiN2NmMDQ3LCAweDQ0NGI3ZmU3LCAweDMzMWRkMDc5LCAweDE4YzFkYjYzLAotCTB4YWUwNzY3YzIsIDB4OTAzODNiYTcsIDB4OTIzZGQzZWIsIDB4M2FlN2EyNTMsIDB4OTNiZTBlYjcsIDB4ZjkxNTcyMGQsCi0JMHhhM2E5YmQ5MiwgMHhhMGY3NDNmOCwgMHg4OTNlMWUwNywgMHgxODRmNjhmYiwgMHhjOTJlODhhZCwgMHhlMmJhZmRjNiwKLQkweGMxM2U3Nzk2LCAweGNjNmIyN2Y4LCAweDdkZjhmOWI2LCAweDQ2MmIyZmMyLCAweDM3ZGYxMGJmLCAweGI1ZTg1ZjgwLAotCTB4M2Y5OTI4ZGYsIDB4NGJiZjdlYTAsIDB4Y2I3NWE1OGMsIDB4ZjI1NmViMmEsIDB4MDU5OGVhZGYsIDB4ZTVlYjk1ZWQsCi0JMHhhZmY5MjMzZiwgMHg2ODZlYWZjNCwgMHgwMWU5Zjk5ZiwgMHg3NmU3ZmM4ZiwgMHhmMTBjNzMxOSwgMHhlNWMwYjczYiwKLQkweGY3MTEzMmQzLCAweDcxYzhmYTNkLCAweDY3NWM0MGY1LCAweDUzMzczZjFkLCAweDI5NzIwMmQ4LCAweGY4YTVjZTk0LAotCTB4ZDEzMjk3YzgsIDB4MTlkMjNjZmUsIDB4NDcyYmYxYzAsIDB4ZWM5NTAxYzUsIDB4OWQzZTQ3MmQsIDB4ZWM5NGUzODQsCi0JMHgyMTk0ZTNlMiwgMHg5ODFjMjBmZCwgMHhkYzAwOTlmYiwgMHgyODY5NzAyNywgMHg4NGM0NTkxZSwgMHg1OTMyNjk1YywKLQkweGU0N2U5NmRkLCAweDdhZWQ1ZDQ4LCAweGU5ZmQ3ZjM0LCAweDM3ZWMxOGE3LCAweDFkM2Y4NDVjLCAweGI2ZmEzNTk1LAotCTB4OTdjYTAzZmIsIDB4ZDI1ZjI0MTEsIDB4MDc3ZjQ3YmUsIDB4MjNkMzIzNjksIDB4ZDRlNWIyNDcsIDB4ZjVhZmU4MDEsCi0JMHhlNDAwY2IzMiwgMHhiOWU5MWJlMywgMHhkYWMwYWRhNCwgMHgzOGE2ZTM1ZSwgMHhiM2VkNGNmNSwgMHhhOWY2NjE1ZiwKLQkweDdjMjJiOWE3LCAweGIyNmM4ZmRhLCAweGU1MWZiY2Y4LCAweDNmNzlmNjRlLCAweGE3ZDU5OGU2LCAweGQ2MzZkOTllLAotCTB4OWY2ZGZkYTcsIDB4YjdlYTdjZDgsIDB4YjRmYWU3YjcsIDB4M2NhYmUzYmYsIDB4MmE2ZjdhOWYsIDB4ZjYwN2U3YWMsCi0JMHg5MDhhZWVlZiwgMHhiNjRmZGE3YywgMHgwN2M2N2MxOCwgMHg5OWYwNGUwZCwgMHhmM2VjMWM5YSwgMHhlMWM4ZDdiYywKLQkweGVmNzFhMzc0LCAweGFiOGVmYWI2LCAweDhjZjdiOWY4LCAweDg2N2YxZGY1LCAweDViZGM3N2NkLCAweGQwMGVjM2M1LAotCTB4NGQxMDZhOWIsIDB4NjI4ZjQxM2IsIDB4YzAyNTRhZjksIDB4ODZmMWVjMWQsIDB4YmZhYTA4Y2EsIDB4ZDJhMTY5NWEsCi0JMHhjZjRjOTk1NSwgMHg1MmI0YWI1ZiwgMHgyYzcyYjFiZCwgMHg3ZDgwMGZkNSwgMHhiMDI2ZjU4ZiwgMHgxZDdjYjFmNywKLQkweDdlN2M3Y2VjLCAweDhhYjU3ODMzLCAweGRmMTMxZWVmLCAweGNiYmUyZTNkLCAweDA3NmUxNmQ4LCAweGVmMmUwNGRjLAotCTB4NDQyN2ZlOGIsIDB4YWZlYzM2ZmYsIDB4Njk2MWQwZjEsIDB4MWFlYWE2NmUsIDB4OTBmOGVkZjAsIDB4MmY4YzVhMGIsCi0JMHhlN2I3OTZkOCwgMHhmM2RmOWZhMCwgMHgwM2I2Y2NhZSwgMHhmM2JiMzA1ZiwgMHhlYTI4NjU1OCwgMHgxZjNjODFhOSwKLQkweDNkZTdhZjIxLCAweGVkOTcxNzhjLCAweGZlZTMzMzhmLCAweDNmYTZjNmM3LCAweDVkZjdjMDlkLCAweDMzYzUzMjhkLAotCTB4MTE3ZDM0OGUsIDB4YmE1Y2UzODQsIDB4NTAzZWNjMDYsIDB4OTdhODM3ZTgsIDB4ZmFhMjRkZmMsIDB4Nzk4Zjc4MjYsCi0JMHg4MmY3OTNmOCwgMHhjYjdhNGI2MSwgMHg1MmViN2E0NSwgMHhkMjc3NTJiYywgMHg4NmJjOGRmOSwgMHhkYTc2ZGFiZCwKLQkweGVmNGJkYzU3LCAweGY1YmUwNWRmLCAweGQ2YjNiZjc5LCAweGRiMTliZGU3LCAweGRhYjY3ZWUzLCAweGM1Zjc3ZTQ5LAotCTB4MzczYzY1MjYsIDB4OTc4OTJmYjUsIDB4YzVkMjNjZTgsIDB4YzdhZDZmOWQsIDB4YmRkMmJlN2MsIDB4M2VlMjA3MGIsCi0JMHhjOWMzNzE2MCwgMHgwMDNmYzViMCwgMHg3NjA3Y2JmZiwgMHgyZjVjYTJhNywgMHhmOWM1OTY2ZCwgMHg2OTVlM2UyMywKLQkweDg5MWU3MmIzLCAweDdlMjRiZmNmLCAweGNhMDg0ZTZmLCAweDIxODkwNmVkLCAweDZhYjEyZTdhLCAweDZlMmE4ZmNhLAotCTB4Mzk0MTJmYWEsIDB4NTczYzljNWEsIDB4OTcyMWYxNDMsIDB4M2MwMWUyMmMsIDB4Y2NjNGIwZGYsIDB4YmFlNjdkYjgsCi0JMHgzNWU3ODQxYSwgMHgzYTNhZTBmZiwgMHhiYTg1ZjMxZCwgMHhjMjBhZGU1YiwgMHhmOWUzNzZlZiwgMHhkZWZjMmYxMywKLQkweGRjZWRjNDkzLCAweGRmYjg5MjdiLCAweDJkZjFhOTc0LCAweGQxYjkzZjNhLCAweGJiODcxNmY1LCAweDNmZWI0ZGRhLAotCTB4NTBkZGVhMjIsIDB4NjQ5YmJjMTIsIDB4MzVlMTdmNWEsIDB4OGNhMGYwOTksIDB4NGM5MjYwZjcsIDB4NGE2ZTRkZTMsCi0JMHg0ZWJhZTEzMCwgMHhmMmY3ZjhiOSwgMHg3OWZjMmM5MywgMHg5YzdjYzJmYywgMHgzOTg4ZjFmZiwgMHg5NWQ5MzI5OSwKLQkweDNkZGYyZTNjLCAweGNhM2Q2YTdjLCAweGU4MGZjYzUxLCAweDA0N2IwZmNmLCAweGI1Zjk4NWM3LCAweDc3YzYzYzhhLAotCTB4MGViNWY3ZTMsIDB4Y2YxZmI4MDYsIDB4NzQ4YTM4MWQsIDB4Mjc0ZmUyODAsIDB4NDczZGZiNzEsIDB4M2Q0NzhmNmIsCi0JMHhhMTY4Y2E3MSwgMHhkYzlhZjgzOCwgMHhmN2UyMTMzOCwgMHgzY2Y4OTYwOCwgMHg1N2RhMjVmNywgMHhkZmU0NmEyOCwKLQkweDBiNmU2NTNiLCAweGQ1M2JiYTQyLCAweDNiNDY0NjM4LCAweDQwYWYxOTQ2LCAweGJlOGZiNzdjLCAweDIwZTZmMGZiLAotCTB4NmIzODE1M2MsIDB4MDc4ZTM4OGQsIDB4N2U3OWZjN2YsIDB4NzFlNjk5OTIsIDB4MTY3Mjc5ZGMsIDB4OTJhNzRiZGEsCi0JMHg2OGNlYzkwMywgMHhmY2ZkZjJkNSwgMHhlZjZlMDZlMiwgMHhhYTg5NmE5ZSwgMHg1YmY2YmQ5NSwgMHhiYTNlMDVmMiwKLQkweGQ3ODQ1NTkzLCAweDY4OGQyNmFlLCAweGY5OWViNzM3LCAweDdjNzBkM2I0LCAweGM3Y2VmOWQ1LCAweDEyNzhlY2VjLAotCTB4MTc5MmVjZWQsIDB4NTQ5MzNhNjQsIDB4YzMwOGE5YTIsIDB4ZTZkZjlmZjUsIDB4MDEwMmJmM2IsIDB4M2I4ZDEyZTcsCi0JMHg1ZThiY2MyYywgMHhmOGZiOWE0YiwgMHhkZTc0NDhjNiwgMHg4NTg5ZjBhYywgMHhmMWUwYTlmMCwgMHhjNzNmMzI1NCwKLQkweDlmODIyYTcyLCAweDViZDkyYTgzLCAweGQxZWQ3NDRmLCAweDE5YWUzY2Y3LCAweGJmM2M1ZmY1LCAweGFlN2U2NmY2LAotCTB4Zjk3ODBmNjIsIDB4M2NmZDBjNDksIDB4YTY1YzZlNGQsIDB4ZjdhM2Q2MmEsIDB4YmY2ZDEzN2IsIDB4ZmU4NDFhNGIsCi0JMHg4NWY5MWU1MywgMHg4YTI2ZWM0MCwgMHgzYzdkYTA4YiwgMHhhN2VmZTUwMCwgMHg3Yjc3ZTBjZiwgMHhkODc5ZjkxYiwKLQkweDExNzM3ZDUyLCAweDVhZjVmYmVlLCAweGJlNjA0MTgxLCAweDRlMzRkYmJkLCAweGQxMThjZmUxLCAweGVjMmE1ZDRlLAotCTB4N2IxNmYzZDQsIDB4YTNmYjhjOTYsIDB4YWViNDU1YWIsIDB4ODlkOTA2OTIsIDB4NDI1ZDk4ZjksIDB4MWJkZTVkZGUsCi0JMHg2OWQyMGY3MywgMHg4Y2Q5MzFjOSwgMHg1NzQ0Y2RmZSwgMHg2NWM3YWZjYywgMHhmYjI2ZGU5MCwgMHhlZGM1Y2NhZSwKLQkweDEyOWRiMmRjLCAweDdkOGFiNWQ5LCAweDhiZWMyYTUxLCAweDNkOGVjMjczLCAweGRiODdiYWI3LCAweGY2MjQ4N2I3LAotCTB4Y2VjNzhjNTQsIDB4NDU3NjE1MjgsIDB4M2Q3OWJjYTksIDB4OWZmYjJiZTYsIDB4Mzk2YzJkYWYsIDB4ZmQ4OWU3NGMsCi0JMHhlZjE2ZDVjZiwgMHhiYTk3YWRmNCwgMHhiZjhhZWI3YywgMHg5ZjUyNGVmNywgMHhmZTgyOTI3ZiwgMHg5NGE3ZDgwOSwKLQkweGMwYTlmMTJmLCAweGFjYWZlMmE3LCAweDIzODZiMzQ4LCAweDViNTQ2ZmJmLCAweDAzNzEyOGE2LCAweGExZjk1Nzg0LAotCTB4NmYzODg1N2QsIDB4OTU4MDQ5NjcsIDB4NmY5NTg3ZmMsIDB4YmZiYjVjMTAsIDB4Nzc0OTdlZTYsIDB4NzdmNWEzMDQsCi0JMHhlZWRmMGUzMywgMHhlNWRmNGUyNiwgMHhjN2E5YzkxYSwgMHg3MDIzYThmZSwgMHg1Y2U0YmQzYywgMHhhM2E4NzY4ZCwKLQkweDEyZTQ4ODM3LCAweGY3YzFlMWU2LCAweGZlZTFjZjk2LCAweGEzNjMwZGE3LCAweDg1NWE5NTMwLCAweDI5ZmQxNDBmLAotCTB4YTlkZWNkY2UsIDB4YmQ4Mzk3NmUsIDB4MjQ5NWMzZTQsIDB4MTI0ZTc3NmUsIDB4NGMyYjQ4ZjksIDB4ODM1ZmQyNTYsCi0JMHhjMWViYjljNSwgMHgwZjZmNmU3YSwgMHg1MzU3M2I1NiwgMHg2NjMxZmUzYywgMHhmMjcxNDM1OSwgMHg0ZTkwYTMwMywKLQkweGYxNGVhZTMwLCAweDEyM2Q1NWZmLCAweGViMWZjM2M1LCAweDA2M2Y5MDkxLCAweDc5MTFhZDliLCAweGY4NDlmNTVlLAotCTB4MDc2M2Q1M2UsIDB4NDhmNjMzMGMsIDB4YzdiYTlkZjgsIDB4ZDczYWY4OTQsIDB4NjZkNDMzZWYsIDB4ODk0ZmNlMGQsCi0JMHg4N2ZiMjkzYiwgMHg3Mzk0ZmNjYSwgMHhmM2U3ZmYwOCwgMHg4Y2ZjYzMzMywgMHhiZTAxZjk5ZSwgMHhhYmZmNjAwNywKLQkweDBmYjI1NjE5LCAweGU3Mjg2N2EyLCAweDFlNDgyYWZkLCAweDA0YmNmMDI4LCAweDcwMDkzZWY0LCAweGE0MWQzMTg1LAotCTB4ODc2ZDkyOWIsIDB4NDBmZTc4NzMsIDB4Y2JkZjlkMWIsIDB4YzhlYmUyMDksIDB4MzllM2Y5MTEsIDB4OTQxY2JjMDEsCi0JMHgyYjM1ZjFjYywgMHg5ZThiYzc5OSwgMHgzNzIyYTUxMCwgMHg4NWI2NDlkZiwgMHgyZmI5NDMyNSwgMHgzOTMyMmYzOSwKLQkweDYyY2U3M2QzLCAweDljZmMwN2Y5LCAweDg3YmNiZjg1LCAweDU3NGY0NGU3LCAweGVlNTEwZjgxLCAweDMyNDJiNGZkLAotCTB4NjNkOGZiYzcsIDB4ZjljYWJmOWMsIDB4MmEzZTNlYTMsIDB4ZTIyNWUwZmUsIDB4YjViMGU2MTMsIDB4OWU2MTg3MjUsCi0JMHgwNWVmZTcwMiwgMHg3OGU2MGQyYiwgMHgxNzI4YmUyZiwgMHhjNWE2MjA3ZSwgMHg3Mjk3ZmVlMiwgMHg1Y2MwYmU0ZSwKLQkweGVjNDBlNzQ4LCAweGU4Y2NjMzJiLCAweDk3Y2I5NTk3LCAweGFmZmY1ZTI4LCAweDkzNzk1ZGYyLCAweGUwNmRkZDZmLAotCTB4NDkzNmVmZjQsIDB4OWVkY2ZmZTQsIDB4MTNjZjY3ZGMsIDB4ZmUwYjQ2M2YsIDB4YjQ0YmI1YTgsIDB4OWRmYjVjMmYsCi0JMHhlNmRiYzc5YSwgMHhiYjVmMTQ0OSwgMHg3Y2YyMWUxZiwgMHg2MGFlZDE3YSwgMHhkZDliZTUzYywgMHgzN2RhNTUwZiwKLQkweGZiMTUwOWFiLCAweDlmYjRhMWQ2LCAweGY3NTg5Zjc3LCAweGUyZGYyMmZkLCAweDgzMTVjNmE4LCAweGE1YTNhMGYxLAotCTB4M2Y4ZTJiN2EsIDB4N2Y2OGI5ODcsIDB4YTM2YjFlN2QsIDB4ZDk2MDc0ZjIsIDB4ZWUwZDM3N2UsIDB4ZmNmZThhMTgsCi0JMHhjNTFkNzZjNywgMHg2ZWQ3NmFhMSwgMHg0ZjVjYTEzNywgMHhiOGNkNmI2NywgMHhkOGEwMDZjZiwgMHg1Yjk4ZmRmOSwKLQkweGYyNTM4ZmRmLCAweDBlMmVjMTg5LCAweGZjMDRmYTQ3LCAweDdmZmM0NmNmLCAweDE4ODliODA1LCAweGUyZmY3ZDdkLAotCTB4M2U1M2Y2OGYsIDB4ZmJjM2U3NTIsIDB4ZDBjMDNkNjYsIDB4ZmYyMWVhYWYsIDB4YjU2MmE4YTgsIDB4MWM0ZGY2ODYsCi0JMHhjYjM5MmRhYywgMHhlZjA1NTc4MywgMHhmMGZhZGUwYSwgMHgxZjE2NjE2YSwgMHg4NjlhYzJiYywgMHg0YmU0OWMyMCwKLQkweGZkMmU0ODMzLCAweDc3YTg2NjRlLCAweDA1NTc4NjZmLCAweGY4MTEzZmVlLCAweGU1Y2NkNjU5LCAweDE1YmUzZjk3LAotCTB4ZTc4MDNjM2MsIDB4ZGY0OGUyYTMsIDB4MzEzYzIzNmUsIDB4N2Y0YmM5MWQsIDB4YmUxOWI4N2EsIDB4ZTFlNzMwODAsCi0JMHgzYWExODlhYiwgMHg1NGEzMmZmMiwgMHgyZDQ2OWU1YywgMHgzOGJlMjg5NSwgMHhiNTBmZDk5NywgMHhmMDJiMzk0MywKLQkweGJiZDEwZDUzLCAweDgxM2NkYmMwLCAweGYzOTk4ZmI3LCAweGZmOThlNGVlLCAweDkzYmRiYzNkLCAweDNjOWQ1NzljLAotCTB4ZjViZTdhZTgsIDB4ZjExYmQzZTcsIDB4ZmFjNTg5NjUsIDB4M2E1ZjQ1NDcsIDB4MWZhM2YyMTksIDB4NmJmMWZiM2YsCi0JMHhmMGFkMWUxZiwgMHhkYTNjMmYzZiwgMHg1ZjExMDY1NywgMHg2ZTViZTFmNiwgMHg4OGJkMzViOCwgMHhhYTFjNjA3ZiwKLQkweDcxNmJkZjg5LCAweDYwOTU3ZTUzLCAweDU3Y2Y4MDIxLCAweGE2ZjU3ZDkzLCAweDJlMDUzNzgyLCAweDlkZWI4YTM3LAotCTB4YzIzYjcyZDYsIDB4ZmI0Yzg4ZjEsIDB4ZWU0OTlmOTgsIDB4NjM5NDY2YTMsIDB4ZmNlOGE3MjksIDB4YjNmZWQyOWIsCi0JMHgxZjQzNmRkNSwgMHgxYjNlNzE4MiwgMHg1YWQzY2JjZiwgMHhkNGE5MWY5ZSwgMHgzZTNjMDE2ZCwgMHhjZWE0NTlmOCwKLQkweDRjZmRlYjgxLCAweGZhODA5OTRhLCAweGJmZTkzM2UyLCAweGI4N2FmM2E2LCAweDM5ZjU4MmQ2LCAweDUwY2MxM2UxLAotCTB4ZTI1MWFkM2YsIDB4N2M0NDZiODksIDB4NjdlNTQ5YzAsIDB4NDQ5YjZlNzMsIDB4MzZmNjI0ZWQsIDB4M2Y5ZjhlZjMsCi0JMHg3Y2ZjNTEyYSwgMHg5YzcyODgwMSwgMHg2Nzg0Y2M1ZiwgMHhmZWFmMzE3MywgMHg0NmUzY2ZjYywgMHg3MmRmM2VkMSwKLQkweDFmNTBmMWRmLCAweDkyMWM1MGM3LCAweDVlNzc4YmZiLCAweGY0MmNkMWViLCAweDdhN2QzYmQyLCAweGZlMTVkMjcwLAotCTB4Y2U5MzNmM2MsIDB4ZDgwODE2MWIsIDB4Yjg1MjQyZGEsIDB4ZTdlNGVjN2YsIDB4ZDMzZDE1MzYsIDB4ZDE5ZjZjN2IsCi0JMHg0MTdhNGUzYiwgMHhlYWZiOTVjNCwgMHg3YjQ0NGYyOSwgMHgzYmMzYTllYiwgMHhlMzg4OTU3ZSwgMHhlOTFkNjgxNCwKLQkweGFiZmI3ZTc4LCAweGQxYTNlN2RhLCAweGYxZDgyODllLCAweGI3ZDkyMjc4LCAweGEyMjYzNjNiLCAweGZkYjA1MjlmLAotCTB4YWEzNjg5NTcsIDB4NGZjOWRhMDcsIDB4Nzc3NWYzNTIsIDB4YTVmZGI5ZWUsIDB4ZTc3YTVlNGQsIDB4NmZkY2UxZDEsCi0JMHg5YzNmYTc5OSwgMHg5NGVlNzY4ZCwgMHg2MWQ3OTcxMSwgMHhlN2UxM2UzYywgMHhmMzg3ZGQxMiwgMHgwZWI2ZDY1MywKLQkweDY0ZmNkZmY1LCAweDQ2YWNlZjRlLCAweGUxOTk3MjRmLCAweDczYzAyZGY5LCAweDc1ZGRjYTdkLCAweDkzYzdhN2M4LAotCTB4NDNlNGQwYmYsIDB4OWE4YTVkM2IsIDB4Mzk5ZjMzZTAsIDB4N2VlMzg3MzcsIDB4NWNjOTA2ZjYsIDB4MGZkYmJjY2YsCi0JMHg4NWNhZmRhNSwgMHg0NDZkMjU2YiwgMHhlMGI3ZWEyOCwgMHhlYTNmZTg1MSwgMHgxZTY5ODI1MiwgMHg2YThjMzY4YiwKLQkweDU3ZjNlN2M1LCAweDc0NTNlN2YxLCAweDM4NTNjNmNlLCAweGNhNWFiM2NlLCAweDEwZjkwMjM3LCAweGFmYzc5ZGViLAotCTB4ZjFlN2UxNGIsIDB4Yzg5NjZjMTcsIDB4OTNiZTU3YWUsIDB4YWQ1ODRjZjAsIDB4Mjk3NTNhZjcsIDB4ZDQ2NzJmNDIsCi0JMHhjZTUxZGM5MSwgMHg3NTViNGUwOSwgMHgxODA4ZWRmMiwgMHhiYjZhOWZmNywgMHgzOWM2MDUyOSwgMHg3OGI5ZjRmMSwKLQkweDE0OWYzYzM3LCAweGZkMTUyMTcyLCAweGZkYWQwNDliLCAweGVlYjg4NWI3LCAweDgzY2EzYWVkLCAweDkyOGY0OGNiLAotCTB4ZThmZGExYzMsIDB4ODUzZmM3ODcsIDB4MGI1NTgyZTUsIDB4ZjI4ODViN2YsIDB4MTQ3ZWFiNzEsIDB4ZjNlNjE3NGYsCi0JMHg1NTU5MmU1YiwgMHhhYWRmM2YyOCwgMHhjMjExNjA3ZCwgMHhmNWE3YWJlZCwgMHhhZjJmOTc2NCwgMHhmZDY3MGE0ZCwKLQkweGJlNTI4ZmYwLCAweDhkYzdmODBjLCAweDdhOTU1ZDgyLCAweDlhNTc3NzJhLCAweDllZGEzY2U5LCAweGZmYWEwOGNhLAotCTB4MjU0MmQyYmUsIDB4NmJlOWNkOWIsIDB4OGRjYjk5YjksIDB4ZTYzNzhkMWIsIDB4ODBiMzIwNWEsIDB4YzFiMTlhYmQsCi0JMHg3MDYzMmNjMCwgMHg5Yzk2Y2U1ZiwgMHgxODQ4NzAwMiwgMHhhMzdkYmE1ZSwgMHhhNTZlMTc1OCwgMHg0Y2M0NzI4YywKLQkweDZjNjQzODQ0LCAweDRkMTVhODdjLCAweGVlMTRkMGRhLCAweDZhNzdiZDY3LCAweGVkZjIzNDQzLCAweDJmMWQ1NWIyLAotCTB4NTM3YWUyMTYsIDB4N2Y2MTQ2ZjIsIDB4MTQyYmI2ZmQsIDB4ZjlhYjc4MzcsIDB4ZWYwOGY5ZjEsIDB4YmUzYWVkODIsCi0JMHhhZmVlYjEzZSwgMHhmZjBjNGU5ZSwgMHg3OGVmOGMyZCwgMHg3YzdlNDM1NywgMHgxNzhlYjZmOSwgMHg3OGI5NDIzNywKLQkweDZmNWE0M2YzLCAweGY1ZDViZjdhLCAweGZiZTE0YzhlLCAweGFiZTMzNzlkLCAweDVmZTFjMTFiLCAweDQ1NWZhYmU3LAotCTB4N2Y2Y2ZmMTMsIDB4ZjllMWVlOWMsIDB4N2NhYWY5NzcsIDB4ZGY4MjZhZDUsIDB4ZDliYzk0YmEsIDB4Njk1ZjVmNDgsCi0JMHg0ZmM4ZDExYywgMHg5OGZjYTU1ZiwgMHg0ODcxZGNlOCwgMHhmMjJiZjgyMiwgMHg0YjNmZTk1NSwgMHhlNTU4YmZjMCwKLQkweGM2MmUzY2RhLCAweDYxYmY1ZjIzLCAweGMzZGYwNDE5LCAweGQxMTNlN2NkLCAweDY5YTZmZGFlLCAweGZiYWUwZmNlLAotCTB4YjdiZjI1NDAsIDB4ZWJlMDA5YTUsIDB4NTI4ODJmN2QsIDB4NzFlZDY5NjYsIDB4OTY1ZjU4NTYsIDB4ZmZlMGM3MzgsCi0JMHgxMmEyOTFkZSwgMHg2ZmRmMmNmNiwgMHg1NzkyN2ZjNywgMHgxN2U4MDc3ZSwgMHg0Zjk4MDBjNywgMHgwZWU0OGI0OSwKLQkweGU5YWUzZjQwLCAweDIwZWEwYmFlLCAweGZiMTIzM2Q0LCAweGM5MWUyN2RjLCAweDdhNWVlN2Q4LCAweGJkZjM0NmY2LAotCTB4ZTM4NjU5NTksIDB4ZWVlNDc4MjQsIDB4N2NhODlmNmQsIDB4YmRiOTYzZWUsIDB4N2VlN2MwM2QsIDB4MDNmZjNlOTMsCi0JMHgzZjY5Njk5ZSwgMHgzOTU2YjIyNywgMHg0Yzc5ODBiZiwgMHg3NDI5Y2Q1ZCwgMHg5NjgyZTI1ZSwgMHgwMGViYjFlMywKLQkweDNlM2MzOWQ4LCAweDdiYWY2NGMzLCAweDc3MzQyZTIyLCAweGY1OWNhM2E2LCAweGViZDk2ZjVmLCAweDI1MWY0NDlkLAotCTB4MjE1ZjhmNGQsIDB4ZjI2OWI2M2YsIDB4Y2RmYTc1MDUsIDB4NDc3ODdmZDcsIDB4NzFkYmRkMjcsIDB4ODU5ZWQzNDEsCi0JMHhiNjk3NTRmZSwgMHg1MGYxMWQzZCwgMHhlNzk3MDZmNiwgMHg5NDFjMmFmZiwgMHg2MDFiODVlNywgMHg2NWU3YzAyMSwKLQkweDI0ZTg5ZTkyLCAweDcxNDRiZTViLCAweDNjNjNhZTgxLCAweGZjZDY1MDJlLCAweGRlZDNjOTEyLCAweDI5OTcxZTE2LAotCTB4ODRlNWI1NTcsIDB4YTJhMzFjNjMsIDB4NTllNTE1YTMsIDB4OTNmNzA0NmYsIDB4MDliZGM0Y2EsIDB4MWU4NGUyZTMsCi0JMHhlMzQ0Zjc1NCwgMHhkOGI3MGU3OSwgMHgzYmZjNTYyNywgMHhmOTAxODdiYywgMHgyYWU1NWNiNSwgMHhmNGE1ZmNhMSwKLQkweDJkZmI4NjQwLCAweGUxOWY5MTE3LCAweDMxOTVmY2Y5LCAweGJmY2U5MWViLCAweDhkMWEwZTcyLCAweGY0YmRmMWYyLAotCTB4MWM1MTk3YmYsIDB4NjY4MTBmZWYsIDB4ZDkxMWVjOTksIDB4NmZiYzJmMjcsIDB4Mjc5OTRlMWQsIDB4YWVjNTMwYzgsCi0JMHg4YmM5ZjQwOSwgMHhlZTVhZDcyZSwgMHgzOGY2N2IyMSwgMHgxZjJiN2ZkZiwgMHhiZDg5ZjljZSwgMHg3NGE5ZjljZSwKLQkweDg0NmQ2MWVkLCAweDgyMGQ3OGQ3LCAweDZlZmIxNDlmLCAweDRlZmUxZmNhLCAweGQxMzg3OTdjLCAweDkyZjkxYzc2LAotCTB4NzhlMjE1Y2UsIDB4OTI5YzAzMTEsIDB4Nzk2NWRhMjQsIDB4MmQ4ZDFiZjYsIDB4OTVjZmFmYzIsIDB4OTM3OTdkZTksCi0JMHg4ZTVmNzBjYywgMHgyZjI4OTg0NSwgMHg1MzU1OTcyMCwgMHhlNjE0ZTU3ZSwgMHgzMzliNDcxYSwgMHhmMTI3ZjZlYSwKLQkweDdmYTk5YjVlLCAweGZlNjBjNzkwLCAweGI0NDFmODE2LCAweDYwMTM5ZDdmLCAweGE2ZmNjNzhmLCAweGMwNDkyYWQzLAotCTB4YzMzMTk1ZDUsIDB4ODdlOTlmNGIsIDB4NGUzNTNkNzMsIDB4ZjU4ZjQ4OTYsIDB4OWQ5MjA2NDQsIDB4ZTk3Njc5MzIsCi0JMHg2OWZiNmYzYywgMHg4M2I3OGFiNCwgMHg2MjZlYzg3MSwgMHhhZTdlMWVjZSwgMHhlZTkzZGRjNiwgMHhhY2M4ZWY3ZCwKLQkweDkwNTYwNDNmLCAweDhjYWU2NDVlLCAweDg5ZGY1ZTU5LCAweGU2ZjVjZTFjLCAweDA2ZmZkYzU1LCAweGZiMTcyOTNhLAotCTB4NzdmMmQ5YWMsIDB4YmQzZGEwY2YsIDB4NWZkZjEwZmMsIDB4Zjk4YWFkM2MsIDB4ZThiM2YzMTgsIDB4ZTc4NGI2ZGMsCi0JMHg3OTM5ZjlhMywgMHhiYzM2Njc2NiwgMHg2ZDJiYWY2NywgMHgyYTA3OWQxMCwgMHhjYzMxMjNkZiwgMHhkNjZiMmI3MywKLQkweDUxMzhjNzZkLCAweDBjM2RhNjk5LCAweGQzNjM3OWU5LCAweGU3YTQ1YTQ3LCAweDRkNzdkYzcyLCAweDc5YWJlN2UzLAotCTB4NzI0ZjVjZGMsIDB4NDhjY2RjYmMsIDB4MjUzNjk1N2YsIDB4YmJmMThjN2QsIDB4OGI1YzYzZDIsIDB4OTI0ZmFhOTYsCi0JMHgxYjcyOGU3ZiwgMHhiOGRjNTdiZiwgMHgxMmYxZmM5NywgMHhiYzdmMjZlNiwgMHg2ZTk3YzFhNCwgMHg4ZmZhMjM3YSwKLQkweGI3MGU0N2RmLCAweDMyMzNkY2Y4LCAweDhmZTcyYjc5LCAweDMyNWVlMjU5LCAweDkzYjBlMjI2LCAweGJkNmJjMjIzLAotCTB4MGE0NTMxY2YsIDB4Y2VlNGQ4M2MsIDB4NzRjNzY4NzUsIDB4YmM1NjRhYzcsIDB4YzAzYmE2OTcsIDB4MjNlZDE2YjEsCi0JMHg2YmI3MjI0NywgMHg5ZGRjZGZiYSwgMHg4YmU0OTRiMSwgMHgzNGRlZTMzMywgMHhkYjg3NTdiYywgMHg2YzM3OTNiMSwKLQkweGYzNWVjYjUxLCAweGUzZWUyYzk5LCAweDA1NjAwZWViLCAweGY2ZWYwODA3LCAweDkwOGY4ODIxLCAweGUxYThiY2E0LAotCTB4OWUzZWU4ODMsIDB4N2M2MDc3MTMsIDB4ZjI3YjljNDgsIDB4NDQ2ZmM3NWYsIDB4MzhiOGU4NWMsIDB4N2JjY2E5YmYsCi0JMHg5NzE0NTQ2YSwgMHg3NDQ5Y2M2NywgMHgxOWNlMmFkNCwgMHg0YTM2NzkyOSwgMHgxZWIxMGFmZiwgMHgzZDA3N2VjNSwKLQkweGZiNDNmZTFkLCAweDkzNGZiODI1LCAweGYyNjlmNjJmLCAweGJlNGQzZWM1LCAweDE3YzlhN2Q4LCAweDYyZjkzNGZiLAotCTB4ZWM1ZjI2OWYsIDB4N2Q4YmU0ZDMsIDB4NGZiMTdjOWEsIDB4NjlmNjJmOTMsIDB4MGQzZWM1ZjIsIDB4NTRlMmMzZTUsCi0JMHgxMWNkZmYzMSwgMHhkMWVhMzRmYiwgMHhjMWI1ZTQ1NiwgMHgxMGU5ZmE5ZSwgMHhkZjYwZmFiZiwgMHgyNDQzYTdmNiwKLQkweDg5NjBmYWRmLCAweDI1N2M0ZmRhLCAweDExODc2OWY2LCAweDIxNjZhM2UzLCAweDU0N2M3ODlmLCAweDJhNzlkZjM5LAotCTB4ZTExOTNlZDAsIDB4ZmNlNzljYWMsIDB4MDNhOWY3MmEsIDB4NDI5MzRmYzgsIDB4ZDliZjkwZTYsIDB4Y2EyNmZlMGIsCi0JMHhmNmUxY2FhMywgMHhlYzc3NmMzYywgMHgyZGY4YzRkOCwgMHgxNDBkMjcyNCwgMHhlMGZkM2NlNywgMHg5ODczOWYwOCwKLQkweGFjYzc5M2UzLCAweGM2MzA3YmM1LCAweDdlNzEyNTFiLCAweDllNjQ3YWJjLCAweDM4YzFmZmUyLCAweDY2MTY1YjEzLAotCTB4MzA3Y2I5YTgsIDB4MmQ5Y2JkYTMsIDB4NzdlM2U0OTcsIDB4YzYxYTQ3OTYsIDB4MjRkNjFjYTAsIDB4ZjcwZWU3ZGIsCi0JMHg4MzM5ZGI5MiwgMHg1ZGEzYzU5NywgMHg3Y2IxYWFkNCwgMHhjNzVhZjE4YywgMHhiZjNhMWEwNywgMHg5NGY1YzRhYiwKLQkweDhkMjVlZjc2LCAweDkzN2VjNDJmLCAweDhlZDZlMzkzLCAweGZjZjVmMWM2LCAweDk2OWIzOGJlLCAweDZjZmNlMDM1LAotCTB4ZWU4OTQwYWEsIDB4MzUxNjYxNmUsIDB4ZTFjMjgzY2EsIDB4NTgyNjZlOWMsIDB4ZDZlYzdkYjgsIDB4MTgyMWQ0NWEsCi0JMHgxZjE4MDk4ZiwgMHhhZDEzNzk4YSwgMHgwNGM3Y2YwMiwgMHgzYzBiOGY5ZSwgMHhhNGQ3N2VlMywgMHg4NWRmYmUwNCwKLQkweDYxNzdlZTI1LCAweGQ1OGRlNGE5LCAweDFmMmRlNGE1LCAweDI3YjRmMjRlLCAweGM0YWNlMTFhLCAweGU3MjhhNmZkLAotCTB4ZWU4Yjk4ZmMsIDB4ZDA1MTdjMzMsIDB4YmU3MGQyNmQsIDB4NzI2MWYyY2YsIDB4MDljM2EzZGUsIDB4YjczYTJlM2YsCi0JMHg2OWUyMmM1OSwgMHg0MzdmNjI5ZCwgMHhjZmQyYTc1OSwgMHhmYmYxOWZkMywgMHgwNzMyNDY1YywgMHg4M2IzNjdlZSwKLQkweDA4NzY0ZjIyLCAweDlmNTAyM2Q4LCAweGU0OWMzMDc5LCAweDdhMWU3MjkwLCAweDA3ZWUxOGU2LCAweGZjZTI3ZGIwLAotCTB4MTMyNTg0NjIsIDB4YzQ0YWEzZjksIDB4ZmM5Y2JiNTMsIDB4NDg2OTZkMWMsIDB4MjM5ZTIyNWIsIDB4YTU3YzEyZTgsCi0JMHhkMTczOTVkNCwgMHg2ZWExYTNhNSwgMHgyODRiOWNmNCwgMHg4ODk2ZDk5ZCwgMHgyNGJhMTJlNywgMHgwZGNlOGE4MywKLQkweDRmZWZlNzZmLCAweDhkMmJiZTA5LCAweGY3MjllMzE1LCAweGQxNWRlODRlLCAweDQzZWU4Nzg4LCAweGJjZjFhMzA3LAotCTB4N2JhMzI2ZGQsIDB4NmVmYjk3MjksIDB4MjgxMWRlN2UsIDB4M2E5NmYzMTYsIDB4Y2MxOWQ3MjUsIDB4Zjc3NDdkY2YsCi0JMHgxZTYzZjcxYiwgMHhmNWM2YTc3ZCwgMHhkYjFmZDYyMiwgMHhjYzdlZTg3ZCwgMHhmNjk0ZWRjZiwgMHhiZjdiMzE5ZSwKLQkweGM2OGFlNDFmLCAweDc3NDdkZGZjLCAweDgzZjdmMGI3LCAweDZjMThiZWY2LCAweDVlNmJhYWY1LCAweGI1ZWY4MzNiLAotCTB4OGZkZDBlNmIsIDB4NzU1M2JjZjksIDB4NDg5NTYzY2UsIDB4NzRlN2JmMmYsIDB4ZmZiM2Q4NjUsIDB4YjhhZGMyMWMsCi0JMHgxM2VkZGI5OSwgMHhmNGJmZWNmNiwgMHhmZGU1ZWExYSwgMHgzZmVmZGEyNiwgMHhlMDg2M2MzOCwgMHhmMmZjZDU1ZCwKLQkweGFlYjNhNDY2LCAweGJmZGUzY2JkLCAweDE3YTNlMWE5LCAweDc0ZWQ0MTdmLCAweDU0ZGMwZDc0LCAweGMxODMyYjlkLAotCTB4OWVlY2Q2NzcsIDB4MWE5YWYzNGIsIDB4ZWIxYWZhZTgsIDB4NDYzODhkNGYsIDB4OTAzYTk4ZjMsIDB4MTFkNmYzZjMsCi0JMHhlNzhmZGRlZiwgMHhlZmY2YmEwMSwgMHg2ZWY5MDQ3OSwgMHg2ODMwMDBlYSwgMHhmOWJiM2U3MSwgMHg3ZGEyYTBmOSwKLQkweGJmZDA5MzI5LCAweGNkYjUzMmVmLCAweDVlY2JmMWM3LCAweGYzMzlkMWQxLCAweDc0ZTE3ZGEyLCAweGMzZGJjNzJmLAotCTB4OTkzOWY5NjMsIDB4YThkMWQ1ZTEsIDB4ZWZhZjU1NjcsIDB4NTA4YmYxZGEsIDB4ZmRhMDY3NmMsIDB4NmUxMGYyOWUsCi0JMHhiNWM5MTVlNywgMHhmZTExMGY1OSwgMHgzY2YxZGE1ZSwgMHg4MTk3N2JjZSwgMHgzMTBiNWZmNiwgMHhjMmY1MDJhNiwKLQkweGE3MTQwOTFkLCAweDVmMWZlMzdmLCAweDY0M2M0N2NjLCAweDdjZThkYmNiLCAweDA2NzVkN2NmLCAweDk0ZTFjMjE1LAotCTB4Y2YwMDM2ZDYsIDB4Njk0ZTM4ZDMsIDB4MTQyY2RmYzgsIDB4ZmNkM2MyZjUsIDB4NjA1MTdkYmMsIDB4MmZlMTBlN2IsCi0JMHhmNTFhM2FiNCwgMHg0N2MwZDE2YywgMHhhN2JjZTNhNywgMHhhMjJmZDVjYSwgMHhlNjVlYzNiZiwgMHhkODVkYzZmNywKLQkweDdlODM3MDA1LCAweDk0MzVlYTE3LCAweGNiYjVkYWFkLCAweDNiZTJlNzQ0LCAweDc4ZjllYWE1LCAweDllYTM4OTNmLAotCTB4NTQzNGViYjcsIDB4ZjUxZDNjMTMsIDB4YjRkZWZjNDksIDB4NDhlODMwNWQsIDB4ZTdjNWI3NmMsIDB4OTdmYTg1ZjksCi0JMHhiZDFmZDFkMywgMHhmMjU0Y2FmOCwgMHg1NWZhMTU0YiwgMHhjZWE4YTVmOCwgMHgzZjFkN2NmZiwgMHhmZTI0NWFiNywKLQkweDMzMDc2NjY2LCAweDJlOTNjNTdhLCAweGViYWU3ODFlLCAweGZmZDNjY2I3LCAweGNlODY4MzYyLCAweGQ4ZWExNzc5LAotCTB4NTYwZmNjNWEsIDB4ZWEyOGExZjgsIDB4NWY1YzVjYWUsIDB4MTEzNmFhOTEsIDB4MzFjMjk2ZWQsIDB4MmY5MWYzZWQsCi0JMHgzZTk4MTgyZSwgMHgyN2JkZGEwMiwgMHhlMzUxNTVmNCwgMHhmZjY4MTllYSwgMHhhNjNlNjhkZSwgMHhiZjhmOWMxMSwKLQkweGViN2FlMDg5LCAweGQzODMyNjliLCAweGJmZDFiZjdiLCAweDk5OTJiNGZjLCAweGQ0ZjA0ZmRmLCAweDdiZTE1YTdmLAotCTB4YWQzZGYwZGUsIDB4YjRmZDA0YWIsIDB4M2YyZTEwYjIsIDB4YmM3YjQwY2UsIDB4N2M1MDJlOTMsIDB4YmY0YWMxNjcsCi0JMHg3ODIzOTI3MywgMHhiNjk5NjQ1ZSwgMHg5ZWY1MTEzZCwgMHg4NjNmZmUzMiwgMHhhODVkYjk5YiwgMHhiN2ZiYTc2ZSwKLQkweDQ1NGRmYmZjLCAweGM4ZTUwNDczLCAweGI3OWU3ZTZlLCAweGEwZWE1MWE4LCAweDUyMDgyMjczLCAweDhiNjY3YmFmLAotCTB4ZTYyNzBlZjQsIDB4ODc4N2Y1MDksIDB4MDc4MTJjODgsIDB4MTFiOWViMTgsIDB4YTI4ZjM0MzEsIDB4MDc5ZDAzMDYsCi0JMHgwZjY4MGUyZiwgMHhjNGE5M2I0MiwgMHhmNjg0MWVkNCwgMHgzMmViZDc0ZiwgMHhlODg5YzNkZCwgMHg4ZmM2NTUwYiwKLQkweDg5NGY3Y2Y1LCAweDM0YmExNjEzLCAweGRmN2Y0MzM2LCAweDFjNjBlNTgzLCAweDBkZmUxOTcyLCAweDA0NzU3OGEwLAotCTB4NjgyYTI3ZGYsIDB4Y2ZlN2U0MGEsIDB4MWU3NGVkY2QsIDB4MjYzY2ZmZGIsIDB4YzVlY2QzYWUsIDB4MmY0ZDVkOGYsCi0JMHhlOWZiNzk4NSwgMHg3OTcwNDdhMywgMHgxMDc1MmRkMCwgMHhlM2ZmNzRkZiwgMHg4M2E0NjhmMywgMHg4YjViMTUyMiwKLQkweDI1MTc5NWZiLCAweGVhMDIyZTdlLCAweGEyZTIxZTc0LCAweGZhMmNmN2Q4LCAweGY0ODAxOGQ2LCAweDEyOWJmMTczLAotCTB4YTkyZWUzZTIsIDB4ZmI1Y2U0OWQsIDB4N2M5MzNmZWUsIDB4OTNiNGQyZTgsIDB4YzQ2OGZiOWMsIDB4ZThmYzkzN2YsCi0JMHg4ZjlmNmUwYSwgMHg0NDdkYWI3MiwgMHhkOTFmN2YwZiwgMHgyM2NmMWYzZSwgMHg3Yzc1ODliZCwgMHg4MWZmZjc4ZiwKLQkweGZkZGFlZmZlLCAweGVmYThmZGVkLCAweDhmM2NjYWE3LCAweDMxYTRiZDgyLCAweDg3MTBmOGYzLCAweDI3MDEzMmY3LAotCTB4YWU5YzM2YzYsIDB4NjM0M2ZmMjQsIDB4MmRkMGZkNDEsIDB4MTY2ZjAzZTgsIDB4OThmZTVlNjQsIDB4Y2M1ZDRmYzIsCi0JMHhmOTExYTdiMiwgMHhjN2RmODBiMywgMHhjMzU1NzYwMywgMHhjZGZmNjg2YiwgMHg4NGZiYTMwOSwgMHhlY2E2ZTFmYywKLQkweGZjODY4NjMzLCAweDY5ZTIyOTZkLCAweGMwZmVjOTg2LCAweDY5NTM4MDA4LCAweDE3ZjkzYjZhLCAweDg3YTRlZDQwLAotCTB4OTFkNGRlY2EsIDB4ZTlhZGQ5OWYsIDB4MmJmMjgxZDksIDB4OGI5ZjY0YzUsIDB4NmRiNDRhZWQsIDB4YmMyNDMzZWIsCi0JMHgxNWJkYTBhNywgMHhjYTI5ZmE0ZCwgMHgzOTk3YzdmOSwgMHhiZWE1NzViZCwgMHg4ODRkY2ZjNCwgMHg4MTYyY2E3ZCwKLQkweGIyNWJiYzA3LCAweGUyNDNlOTE2LCAweDY5YWI3ZTc4LCAweDZmMjhmYmRmLCAweDQ4ZTJkYWJhLCAweGQzZjNmYjRlLAotCTB4ZThhN2E2ODUsIDB4NDA0ZjhhOWUsIDB4ZTJiYzNiYWYsIDB4N2MyYzlmMDAsIDB4NjYwMWYyOTksIDB4ZjE4ODFlNjMsCi0JMHhiZGJlNzNmYSwgMHhmZTRiZGRkZiwgMHhmNWVjZGIyMCwgMHhjNmIxZTkxYywgMHgxNzBmZWViNywgMHgwZmI3NGJhNCwKLQkweGRlNjgzODFmLCAweDAwZGY5MDNiLCAweGRhMTNjNWZlLCAweGJlODc3ZWU4LCAweGNiYTg0Y2ZhLCAweDdlMjNmNTVlLAotCTB4NzhmNmJmNzUsIDB4MGZkYTAwNWYsIDB4NTA1ZDg0M2IsIDB4OWE3ZGQ0MzIsIDB4M2MzZGY3ZmMsIDB4ZjQwYWI3NmYsCi0JMHgwN2Y3ZDUxYSwgMHg2YWE1N2U1MiwgMHg1MGFkZTgwZiwgMHg1ZjUwYjdhZSwgMHg1MWI1MDcxNCwgMHhiZjZiYWFkYywKLQkweGQ3NzlmNjhlLCAweGM2OGY5ZjM0LCAweDUyM2QwM2Y1LCAweGY5YjhhNjdjLCAweDdjY2JkZDIwLCAweDRjODdmZDEwLAotCTB4OTQ2MThmZDIsIDB4MzliZmIzMTcsIDB4ZTUxMGZkMGMsIDB4OTVjYTg5NzksIDB4ZDNmNWYyMjgsIDB4Y2YyODdlNTEsCi0JMHgyMjc3NjU0YiwgMHhkYTk1ZjM5ZCwgMHg4Mzg4ZmVlOCwgMHgyYTI1ZGU2MiwgMHgxNzU4Y2JhOCwgMHhkZjM4OTZmMywKLQkweDJmN2U2NmIzLCAweDVlZGUzZjk2LCAweDc2ZWRjMTE5LCAweDlmNzQwZjkwLCAweDc5ZDc5YWU3LCAweDA3OTE0MGRjLAotCTB4MWNhZTQyODUsIDB4OWNhOWU3YzEsIDB4M2VjYWNkZmYsIDB4NDQyZDc0MTEsIDB4NGU0N2VmYmUsIDB4MGIzMDhmMjQsCi0JMHhlMjgyYjg3ZiwgMHg1ODQ2M2IzYSwgMHhhN2Y0NWQ3OCwgMHg4OWRjNzk3MSwgMHhkMWJkOTdkZSwgMHg4YTliMWU5OSwKLQkweDNkY2EyY2ZkLCAweDE0NzkxZTVmLCAweDI4MmY5MWU3LCAweDBlNDgyMjA3LCAweGMxODRkMWFjLCAweDk0NWU4YWJhLAotCTB4YzJhMmZlZTgsIDB4YTA3M2FiNzksIDB4N2VhNjViMzksIDB4MmQ0OWVlODgsIDB4ZTM1YmJjYzAsIDB4YTdmMmYzZjUsCi0JMHg1N2I4ZjFhMywgMHhlYzUyZjI4OCwgMHhlMGVkMTUwMywgMHgzNTE3NDBmYiwgMHhlNDBkMWY3YywgMHgyZmY1ZTUwZCwKLQkweDA3M2FiNDliLCAweDY4NDk2ZmY5LCAweDRmZGJkNmE5LCAweGQ3ZjhkOWJlLCAweDU4YWY1YjlkLCAweDBmZGUxMzlkLAotCTB4ZGNhZDE3OWYsIDB4NWQ4ODNhZDIsIDB4YmRhMTVlM2YsIDB4NzJjYzI3MzYsIDB4ZGU2NTczZmQsIDB4M2NjYTBkMTcsCi0JMHg3OTA2NjgyNywgMHhlYWY2NjNjMywgMHg3MzRmYmMxYywgMHg4NWRmZmU5OSwgMHhjNWY3NWYwNywgMHhmNTFiOWQ2NiwKLQkweGY2OTdjMDJlLCAweDU2YmNlZTgzLCAweGJkNWYxM2UxLCAweGNjODU3OGQ5LCAweDM3MWZmYjQ5LCAweDU5N2ZiZjlhLAotCTB4NTM0ZmI5MjIsIDB4NTdmMDJkNWUsIDB4ZjlkOWYxM2QsIDB4YTBmZGVmNjgsIDB4ZjZiZTQyMjksIDB4MTYwYTI1YzUsCi0JMHg0MDdiYTMwZSwgMHg3OTg3MGJlYywgMHg0YmZjMjVjNywgMHg1NTgzOTQxMCwgMHhhMGUyMzM5NCwgMHhiZTcwZjgxMiwKLQkweDI4NzgxZmI1LCAweDA0NjdmZmVkLCAweDMyOWE0ZmNmLCAweGUwZDVmMzgyLCAweGJkY2ZjNWE5LCAweGEzOWUyOGM2LAotCTB4ZTM3NDFkNGUsIDB4NTRhNjIxZjMsIDB4N2NiNzRmY2UsIDB4MjA2MjY0M2UsIDB4NjBjODc3NmYsIDB4Zjc0ZmI4YzYsCi0JMHg1YzUxYmZhMSwgMHg3MTlkN2JiOCwgMHgzMDZmZGYzNiwgMHhkZjc4NDhiMiwgMHhkZGI2OTExYSwgMHg4YWZiZmUzYiwKLQkweGU3ODE0NzM4LCAweDdlZmNlOWJlLCAweGUzODdlNmIyLCAweGJlYTZhOTRhLCAweDFiZDkxMmI4LCAweGNmYjQ4MWE5LAotCTB4OTU3NGQ1ZDIsIDB4NGI3NzViZjQsIDB4NDNmNzE5YTYsIDB4NDY5Y2RhYmEsIDB4N2ZmMmI3ZTQsIDB4ZWExODRmZmMsCi0JMHhiMzk2YWVlMSwgMHhmNWQ2OTc5NCwgMHg1N2NhNzlkZCwgMHgwNmYyMjhkYiwgMHg3Yzg5MzQ4ZiwgMHgwOThiMzZhZiwKLQkweDdlZTc3NzlmLCAweDM2ZWQ4MzkxLCAweDU3MTNkMjg5LCAweGE1MzE3MWUwLCAweDI1NjVmYzU0LCAweGZmNzVlMDdlLAotCTB4NmI4NDI4ZDEsIDB4OTNlMzc5YmQsIDB4YTYwZjMwMTksIDB4MWRkZmE2YWYsIDB4MDQzOWZmMDAsIDB4YWUyNzg3ZjUsCi0JMHhhMWZmMDk2MCwgMHgyYjhjNGEzYywgMHhiOGYwMjdjNCwgMHg1NzE4OTYwMiwgMHhiOGYwZDc4OCwgMHhhZTMxZDYwMiwKLQkweDE1YzYyNTgwLCAweDE1YzYzOWYwLCAweDA1NzE4ZWIwLCAweDAxNWM2M2FjLCAweGMwNTcxOGViLCAweGY4MGFlMzEyLAotCTB4OGU3MTZiZmMsIDB4Mzc4YzFiYTMsIDB4OTIzNGY3MWUsIDB4Y2Y1MTVmZmMsIDB4ODg1NzZiZjcsIDB4ZDQ1N2ExZmIsCi0JMHg4NWI3OTQ0YSwgMHgwZjUwMzhlNywgMHhkM2M3OTc1ZSwgMHg1Yzc4ZjIyOCwgMHhiMDNmNjg1YiwgMHg0NTZjYmY3YywKLQkweDBmNzllMTU0LCAweDc5ZjMwZTg3LCAweDNjNjI4ZTdhLCAweDY0YWY3Y2E4LCAweGU3YzE2ZDVkLCAweDFiMWU2OWIzLAotCTB4OWUzZjMyNWIsIDB4MzVlYmNmODcsIDB4YWM5N2JjNTYsIDB4MzA5YmU1YmIsIDB4YjUxNTc3OGMsIDB4NmFkYzUzZDQsCi0JMHgyZDIxZjg1MiwgMHg2MjQxYjllMSwgMHhhNTlkNmYxOCwgMHhhOTcyN2VlMywgMHhkMzQ3NGYwYywgMHhkMWQ5MjliZSwKLQkweGYyMzZiYWE1LCAweDRhNzc4YTVmLCAweGRkZjNlZjY2LCAweDkwYWY2M2U1LCAweDliY2JlODljLCAweGY5Y2MxOTcyLAotCTB4YzZkNWZhM2UsIDB4NGZmMGFlZjMsIDB4NTdkODhmYzQsIDB4ZjQ5YmNhNWUsIDB4M2Q5MTU5ZTUsIDB4MmQxZjY1ZTIsCi0JMHg3YzY0ZmRjNSwgMHhlNzQ3N2YyZSwgMHhkMWMxNGE0YiwgMHg5M2Y1MjgxZCwgMHhjZmI3ZTU4NywgMHg3N2IyZDQ1YywKLQkweGUyOWJkZTNkLCAweDc3ZGNkZmJmLCAweDlmNmZjZjVlLCAweGQ4YWE2NTc5LCAweGNmYzUxZTRmLCAweDlkM2VlNDg5LAotCTB4N2MzZjY3YmYsIDB4NDc1YWI3YWYsIDB4NzBlNTRhZjYsIDB4MjY2YTY1N2IsIDB4MjhkODZiZTYsIDB4OTBmNDcyZWUsCi0JMHgyZmFkZmM4MSwgMHhjNGY5MjRiNywgMHgyMWU1YjI1ZCwgMHhhZTU4ZjcxNCwgMHg2YjhmNDg5MSwgMHhiMGViZWQ5MiwKLQkweGM1ZGNjNGRmLCAweDE4OTk2ZjE0LCAweDU2N2UyMjYxLCAweGE0YmRmMGU4LCAweGZkZjFjN2JjLCAweGM1MGIzNGYyLAotCTB4ZWM3NWIyYmIsIDB4Yzg5ZTM0NjcsIDB4Zjg5MjgyZWYsIDB4YTI0YWJiMmQsIDB4MzIxN2E5N2IsIDB4NTk3YjlkMmIsCi0JMHhmMmY3ZTM2MCwgMHgyZGU4ZjcyOSwgMHg0MWNmM2M2MCwgMHg1YmU1YWJhMSwgMHgyODJiYjIyNCwgMHhmYjg2MTEwMCwKLQkweDBiOWUxYzlkLCAweDdiYTFkZTVhLCAweGM0ZWIxNjRmLCAweGJlMmE3ZTNkLCAweDg5YjUxZTFmLCAweGMxMmNiZmU3LAotCTB4ZGVmMGE0MWIsIDB4NThhYmQwMTAsIDB4YjM3ZDllODIsIDB4MDNkYjllMWQsIDB4M2I3MzQ0ODcsIDB4ZTM4ZTEyZGYsCi0JMHhhMWFlM2MyZiwgMHhmMGVjZTEzYywgMHhhNGVkMTNiYiwgMHgzZTUxMjdlZiwgMHhmNmVmNWUwMywgMHg5MjFmODhmZCwKLQkweDBjZjliZWEzLCAweDQzNzkzNTQ3LCAweDQ4YWRkZDcwLCAweGIxZTcxNGE3LCAweGIyYmM3OTUzLCAweDllMjU0YTgwLAotCTB4NzYyZmU0YTMsIDB4MTdiODNhMWYsIDB4Y2U1ZDlmYmYsIDB4ZTFiZGU1ZWYsIDB4ZmU4MGJkNzksIDB4ZTcyOWFkY2YsCi0JMHhmOTE0NWUxNSwgMHg1M2FhNTE3NSwgMHg3NWZjZjA2MywgMHgyYjQ2YjdkNCwgMHhmYzNiM2ZhZSwgMHg4YWY3OWQxMCwKLQkweDRlMWZlMzEzLCAweGU1MDM3YmNjLCAweDM5ODgyZDhhLCAweGNiZWUxZmIwLCAweDczM2MwMzU0LCAweGM2MTIwMTcwLAotCTB4M2MzNjVkY2QsIDB4NDg3M2QzMzcsIDB4ZjUxZTUzMzIsIDB4Y2I3M2YyNzUsIDB4MjllZmNjM2EsIDB4ZGVlODk3OGYsCi0JMHhlYTgwOWNmMCwgMHgzZjE4MzBlYywgMHg4YWM2MzYyNywgMHg4OWJjYmJmMiwgMHhhMGJiNWRjNywgMHhjM2JmNzhlNCwKLQkweDMxODFmNzQ5LCAweDE0ZDczZjdlLCAweDI0OTBiNzgxLCAweDRjZDQ4OWZiLCAweDgyYTlmM2NmLCAweGFlNWJiYTZmLAotCTB4OWJlMWZjZjIsIDB4ZThlYjY1YzcsIDB4YjA2NjEzYmUsIDB4MjFiMWY3MmEsIDB4MTg4ZWE3ZGUsIDB4ODU1OWYxNGEsCi0JMHhjMjFiN2E2ZSwgMHg3Y2RkMjNiNywgMHhiY2MzZjQyZSwgMHg2ODM1Mjc3OSwgMHg2Yzk4N2MzZiwgMHgzMGUxMGNmZiwKLQkweGJhY2FmZjNmLCAweGZmNjc1YTMwLCAweGNmMjUzMWYxLCAweGE2M2UzZmRlLCAweGFiZmZlZGM4LCAweDJiZjdmYWZjLAotCTB4NTEzY2E4MmIsIDB4YjZjYTkyYjksIDB4MDdiZDA3NGEsIDB4ZWE3NWYwYmQsIDB4ZmY1NWM1YWQsIDB4OGZmNWYwOGUsCi0JMHg2NWJkMzJhYiwgMHhlMDU3ZTkwMCwgMHhmNmM3MWU2ZiwgMHg1ZjAyYTM4YiwgMHg3YWY4YmNhYiwgMHhhMmYwNGI2MiwKLQkweGQ0N2Y2ODBkLCAweDRmZmVlOTY4LCAweDYxNWU3N2NjLCAweDQ5YTAzOTI0LCAweGFhOWUzN2ViLCAweGYxNDhjZGMwLAotCTB4MTg2NjVlZDcsIDB4OTA5ZmYwOGQsIDB4YzE1NmE3MWMsIDB4OTI2OTAxZmIsIDB4ZjIwMGZlY2YsIDB4ZjkwZmFlMDksCi0JMHgxM2U0NGIwNCwgMHhmM2RjNTdiNSwgMHg3MGIwMmQwNSwgMHgxYzA3YjcwNiwgMHgwODE4MGY2NCwgMHg4MzU3ZWJhZiwKLQkweDFlZjA5MGZjLCAweGZjOGZiMzI1LCAweDNmMjdlNGI4LCAweDkwNzk3MWMwLCAweGYwYjU3ZGNlLCAweGVmMjUyNmZjLAotCTB4ZDcxNDAyNzMsIDB4NGYyM2Y3NDYsIDB4MGM5ZTVjNWMsIDB4YzJlZDcwMGQsIDB4MGIyZDBjZWYsIDB4YTNlMmJjYTAsCi0JMHg0NzVmNGUxYSwgMHhiOWJjZjIzNywgMHhlZmM3OTY3YywgMHhhZTVlYmE2ZiwgMHgxNjNlMjEwNCwgMHhmMzM5ZWMwZiwKLQkweGZjNWZiNDNjLCAweDM1ZDkyMzJiLCAweDY2OTcyM2ViLCAweDI1NzIyN2ZkLCAweGMzYzM4ZDIwLCAweDYzMjU4MTMxLAotCTB4Y2FjZGYyN2UsIDB4ZTA0NWVlN2UsIDB4MzE0ZTY2ZjcsIDB4MmU1YjlmOTEsIDB4N2NiMmEwZWMsIDB4NzJhN2YxMzMsCi0JMHhlZDRjYjQzZSwgMHhlZDhmNThlYSwgMHhmZjNjNGQ0MiwgMHhiZWU4Y2Q0MywgMHhjMWFhNTM5NiwgMHhjMTU5OWVmYywKLQkweGM0YTZhNzY3LCAweDU4NjA1ZTUxLCAweGE4ODdiZjE1LCAweGVlODk2ZWU3LCAweGM4MTQ5ZTAzLCAweDU2Yzg1N2VmLAotCTB4MGNiYzk1ZTUsIDB4Yjk1NmRmZWYsIDB4NTRjMWVmYzUsIDB4MTIyYmY4ZDMsIDB4NzNkMTVjNzksIDB4NmJkYjk1MWUsCi0JMHhiYTI2Yjk1MSwgMHhiYWY2NDEzZiwgMHhjNjMxYTkzZiwgMHgzOWY0NWVlYiwgMHg2ZWNmYmVmYywgMHg0ZGZmNzJhNywKLQkweGEwODdiY2RlLCAweDdlMWNjZDVmLCAweGIzMzc2NmNmLCAweDAzZmI4MTNjLCAweDcxMDA4MjhlLCAweGI1ZTgxMjdmLAotCTB4OTlmZGNmMGMsIDB4ZWRjOWZlMDcsIDB4MTU0MjllYmMsIDB4MTlhZDUzOWQsIDB4ZWI4ZDU5NjUsIDB4NDJjYzc5YWEsCi0JMHgyN2Y3M2RlZiwgMHhlOGRjZjg3MSwgMHg4MmRiOWMzZSwgMHg4MzY5ZjllYywgMHhlNzE3YmZhZSwgMHhjZTZmMjkxOSwKLQkweDY2OWZlYzEyLCAweGUzNGZmN2U0LCAweGVlZDA4ZGU1LCAweDRmZTE5Y2U4LCAweDBlMzg0MGVjLCAweDNkYTI2NGIxLAotCTB4NzA2YzY4YmUsIDB4MTFmNDA0OTYsIDB4MDZmMzA2YTUsIDB4ZDQ2MzBmZTgsIDB4NDZkMDVmNzQsIDB4NzFmMzEzYjUsCi0JMHg3ZGM1YTg4NywgMHhlZjIxNmEwMSwgMHhkMTgwYzg2MSwgMHg4NWE2ZGVkNCwgMHg5NmE3YzJmYSwgMHhhYmVhMWIzMSwKLQkweGYzZjc0NjI4LCAweGZlZjllYmM2LCAweDU4NjNmNDM4LCAweDQ2NDZiODYyLCAweDdjNzhjODNkLCAweDNlMDBlMTY4LAotCTB4NDY3MGMyZmUsIDB4NDVhNWNmYmYsIDB4M2JmMjUwMTYsIDB4MjY3N2YwYjMsIDB4YjBiYmM1MTgsIDB4ZWE2OGQwN2YsCi0JMHhmZWYxNTBlZiwgMHhjMzk0MzUzNiwgMHg1MjNkZjhlMiwgMHhiNDc0ZWIzZCwgMHhmMWYwYmEyZiwgMHhhNzFmYTRhMSwKLQkweDc3M2RmMDRkLCAweGU3OGQzMjdmLCAweGI4ZTUyODJkLCAweDlmMGY4Yjc0LCAweDQyOWI1YTJmLCAweGQ2OGI4YmZiLAotCTB4M2I0NTI5Y2UsIDB4NDgxMGRlYzQsIDB4ZWYzYjAyZTcsIDB4ZWYwYmE5N2IsIDB4OWQ5NjJmNzEsIDB4ZjU4MjNmNGIsCi0JMHg1N2I3NGVjYywgMHg0YTJmN2MyMywgMHhhMWZiZjk5NiwgMHhkZmZiYTJjMSwgMHg4YzllNjJkMiwgMHhmMmUzMzVkZCwKLQkweDc3NGU1MGViLCAweGY3ODEzZGVjLCAweDRmYmY0ZGU0LCAweDE5ZDNmZWE2LCAweGFkOWE4ZmJmLCAweGRlNmNmN2U1LAotCTB4OGVhMmI4ZWQsIDB4MWVlZmYxODAsIDB4YmNiYzUxMjcsIDB4NDY4ZTYwYzMsIDB4YzBhMTZlZmIsIDB4NWM2OWYzZDcsCi0JMHgzZjVjMmY3ZSwgMHhlYmZkMTEzNCwgMHhiZGRmNzFiYiwgMHg1YTczM2QxZiwgMHgwZmRlNTNiNCwgMHhmYzdjYzg5YiwKLQkweGZiYzU0ZjliLCAweGZlZjhkMzRmLCAweGZlMzhiMGZjLCAweGFlODM3ZjNlLCAweDRiMDgyZTIzLCAweDRhMDkzYjhkLAotCTB4NGVjMjc1OGQsIDB4NThiNGNmNWMsIDB4ZTExNWIzOTYsIDB4Mzc4ZjI4ZjgsIDB4OWI5ODE4NzYsIDB4OGQzZWIxZTgsCi0JMHgzZDY3NmFlMCwgMHgzYWUzOGYxZCwgMHgzYWQwNDZlYSwgMHhhMzliYzYzYSwgMHg3MTBlNWVlOSwgMHgzMzEyZWI3ZiwKLQkweGUzMWQ0Zjk3LCAweDk4Y2U3N2Y5LCAweGE5MjE0ZGRiLCAweDFlZjA3ZjljLCAweGE1MDJjNWQ3LCAweDNkNTY1NzY3LAotCTB4NWJiNDFiNzksIDB4ZTc0ZjRhYmMsIDB4N2QzYzk3MzUsIDB4OGIyYmY5MmYsIDB4YTczYTY0NmIsIDB4ZGVmYjM2YzksCi0JMHhjNGZhMGFlMywgMHhiZmYzZjM4ZCwgMHhkZWZmZDU4ZiwgMHhkMjM5YzQ1NSwgMHg4OTY2ZmU0MSwgMHg5NTU4NjhlOCwKLQkweGYxZmI4YjU1LCAweDRlYzA1YjNkLCAweDQ2ZjlmNzgwLCAweDA1ZGEzYzc3LCAweDc1ODM1NmY5LCAweGJkY2ZkNDhkLAotCTB4ZGMwMWRmYWMsIDB4NmI5ZWYwYjIsIDB4Y2Y5M2YxNDYsIDB4ZTAxZmVkZDMsIDB4MmY1NjE3NzcsIDB4MDM1MDdiYTQsCi0JMHgxNzE0ZWQ1MywgMHgyMTdlMDYxYiwgMHg0ODQxM2ZkYSwgMHg2OWQ3MDAzZiwgMHg3ZmJhNWUwMCwgMHg4OTFlZGQ0MiwKLQkweDM0ZmFjZmZlLCAweDljYzQzY2YxLCAweDM0YmEyNDY4LCAweDBlZTdlNDMwLCAweGU3MTEzOThkLCAweGEwY2ViMWQ3LAotCTB4NmQzMTk5NDIsIDB4ZTA0ZmE3MGQsIDB4MzQ3YWJkMWIsIDB4MDE2MDMzOWUsIDB4NGJiZmJmYzgsIDB4NmYzOTc0ZTMsCi0JMHgxNmFmM2FiNSwgMHg2ZDQwNDNlYSwgMHg2ZTkwNDI5YiwgMHg0ZTdkMTE0NiwgMHg1MGViZGFiNiwgMHgxOGY1N2RhZiwKLQkweDczNzI4YjFiLCAweDdjMmRlNmYxLCAweDRjZmYwMjVlLCAweDM0ZTc0NmRkLCAweDE5OGZhYWJmLCAweDBhMDY3OThkLAotCTB4NGViNjRjM2QsIDB4NGRlNjliMzgsIDB4ODQ0OWY3MDcsIDB4MzFjZjU4N2YsIDB4ZWIxYTM3ZDQsIDB4MmY1YzRlYTIsCi0JMHhmNDhjM2YzYywgMHg5YjgyNmQzMSwgMHhlNWIyMTJmMiwgMHhiY2ZkZmExMiwgMHhmNzQ2MDhkZSwgMHhjZTMyZjRmMiwKLQkweGQ0MWJiZGFmLCAweDM5MTQ2N2E0LCAweGEwMDNjOGExLCAweGQzOWUxYjA3LCAweDdmZmRmMDU1LCAweGYyMjg3ZjY1LAotCTB4NzI0M2UwMDYsIDB4OGExYjkxNDUsIDB4NGJlODUxN2MsIDB4NzRmZTMzOTEsIDB4N2NjMDFmMzUsIDB4NGZlYTY4ZTcsCi0JMHg2MzkxNGNmMiwgMHg2OGQ1MGViOCwgMHhmMDUxN2M4ZiwgMHg1ZTMwZDlhYywgMHg4MTU3NzE0NSwgMHhkMmY5NmNlNywKLQkweDg3MDg4MzllLCAweDJkZDkyMzAyLCAweGVhMzE3MDdkLCAweDVhZDEyZTA5LCAweGNmZjc4NGQ2LCAweGI3OTQzZDU2LAotCTB4ZTNkMjI5NzcsIDB4ZDA2MzczMmYsIDB4ZTA1Yjk4ZmUsIDB4YTdmMjllN2IsIDB4MjhlN2JlMTUsIDB4M2RmNGFjMTcsCi0JMHhlNTZmMzk0NywgMHhmYzYyOGU5ZiwgMHgwZmIwMGQ4OSwgMHg5Y2ZjMDc0YiwgMHgxN2I5ZTVmOSwgMHhlZmVhODYzZSwKLQkweDgxMzE3OTdlLCAweGVhOTdkOWZiLCAweGFlZWZjNTlmLCAweDY4ZjMxMDBhLCAweGE1NWFmM2U3LCAweDRjMzFiZDI1LAotCTB4MGZmODgxZDgsIDB4NzE4OGIyZjEsIDB4MTMxODVkM2UsIDB4ZGZmNTAyN2MsIDB4MDkzZjEwNWYsIDB4ZjFjMWZmYjgsCi0JMHg2N2UwNDY3MywgMHhlODBmYzIxMSwgMHhhZTNhZTE3ZSwgMHgxMjFjM2E5NywgMHhhZDE2MjNjNSwgMHhjMWJhN2MxNSwKLQkweGU3ZjQ3Y2Y3LCAweDMwM2RhYzkxLCAweGZhOGU3M2NlLCAweGEzMTJjN2YzLCAweDczOTVhZjkxLCAweGZjMGRmNmQzLAotCTB4ZjJiNGI1NWMsIDB4NzYyZmQ5MTgsIDB4ODcyZDdlZTUsIDB4MmI1YWZkZGYsIDB4ZWJmOWY5NWIsIDB4Y2Q3M2RmNzYsCi0JMHgyZDM2MTk4MSwgMHhmNzE4MmJjNSwgMHgxZjI1MTZhMywgMHhkNTM2ZjllMSwgMHhiYmY3MTk5MiwgMHhmY2YzYzVmMywKLQkweGI5Y2Y5MjBkLCAweDFlNzQ5Y2I5LCAweGE2OThkYTE3LCAweGEzYjYzYzI2LCAweGNhZjE0MjlkLCAweDBhMmZkMjZhLAotCTB4YTBkYzgyOWQsIDB4ZDVmOTdjNzMsIDB4YmQ0YmI0YTMsIDB4ZjEyMmU4ZTQsIDB4Y2FiMjcxN2MsIDB4MzZkNzc3ZTcsCi0JMHhlYmZkZjFhNiwgMHgxODFhNjQ3NiwgMHhhYzcyNTM3NywgMHgzYmM5MDk3NiwgMHg5NTQ3YzUwYiwgMHg0NzkyOGJmNiwKLQkweGMxYjhjN2FmLCAweGViZjhjZGEyLCAweDMzZmU5ZTQ3LCAweDM2N2NmOWQzLCAweGRjOTRmOThhLCAweGU1ZjdjZTQwLAotCTB4Yjc5ZmUxNTUsIDB4OWZjOWJjZDMsIDB4Zjc3NTdhMmUsIDB4MDMzYmY4YWIsIDB4OTFkNTdmNDUsIDB4MjkxYTI5OWUsCi0JMHg5ZDUzZDlmNiwgMHgzZWQyZjc1OSwgMHg1NWQ3M2YzMiwgMHg2OTNkZjAyNiwgMHhlODQxNjdmNywgMHhmMjM3OTQyNywKLQkweGVjYTFiMmZiLCAweDU1NmNiMmMwLCAweDY1ZmJmOTAxLCAweDkwODdlMDU2LCAweGRmYmZmM2ViLCAweDQxYWZmNTdlLAotCTB4ODhlY2JlM2MsIDB4NDdmZmJmMTIsIDB4ZDY1NTYzYmYsIDB4MWZjNTA1ZjgsIDB4NjQ3NzJlZDAsIDB4NGY5NDc4ZDAsCi0JMHg1Y2JmZGZlZSwgMHhmYjg4MmVmYSwgMHg5NzA0ZWRiMSwgMHg4NGRmNDNlYywgMHg1ZmY2M2NkMSwgMHhmOTc5YjhhNSwKLQkweGY2NjE3NWExLCAweGRkN2RkNjdlLCAweGNmMTEwMTM5LCAweDJhZjgxNzI4LCAweGUwYWY5YjY3LCAweGFhZjk1YWZlLAotCTB4YzgyY2YzZGMsIDB4YmY3ZmJlMzMsIDB4Y2UyMmU5NzUsIDB4OGRiYjFiNzAsIDB4NGNkNWQ2ZjIsIDB4NWNjZjdkZTUsCi0JMHgwN2UxMzNhZiwgMHhiN2NiMjVmMywgMHhiZDlkNzNmMiwgMHhkYzAwY2I2YSwgMHhlNzE2ZWI5NywgMHgxZGRiZmNiNCwKLQkweGMzN2VlNzRmLCAweDBjMjdlMDY1LCAweGM4Mzc3NDQ0LCAweGRkZDNjZmI0LCAweDY1NzhlM2MwLCAweGUyYjU0ZjBkLAotCTB4NzAzMmQ4ZjksIDB4OTU5ZDkxOWMsIDB4OGQ2NTQ0NzMsIDB4ZWI3YmQzMzIsIDB4MWE0N2NjMzUsIDB4MTY3OWUzNzgsCi0JMHhmZGQxMzZlZiwgMHhjOTJlODUzNCwgMHhlOWYzMGY1NiwgMHg5MDY5N2YwNSwgMHgxNjVlN2NkNywgMHg3M2FjNTU3NCwKLQkweGNhZjhlMTY1LCAweDcyMTA1ZmZjLCAweGQ4NTc2OTRjLCAweGI3OWQxNGYyLCAweDY0NWQ3Njg1LCAweDkwM2VmYzlmLAotCTB4OWViMmZkZjEsIDB4Y2VjZjM4MTMsIDB4N2Y2ODYzNmQsIDB4YjdiNWQwYWIsIDB4MGQ4ZmUyOGMsIDB4NzJiNzk0ODEsCi0JMHg3ZTdiZTM1MSwgMHhkZWY4OWY3YiwgMHg2NzZlNzRiZSwgMHgyNGRlNjI3NCwgMHhhNjU1N2ZmNiwgMHgxM2NlMTliOCwKLQkweGU0YTJmMWY5LCAweDJjZDFjZjliLCAweDczYTczNWZhLCAweDNhN2U2NTNiLCAweDdkYTUwM2U3LCAweDI4MjNhYmExLAotCTB4NmY5ZmRhMWUsIDB4NmY5NTEzZmEsIDB4NmY3YzdiNjEsIDB4YmQ0NzRiNmMsIDB4OTAzMWJlNzksIDB4NmY5ZWQzY2UsCi0JMHgwZGU3M2U3YywgMHhkNzY1ZGVmOCwgMHg4YmM5NTBmOCwgMHhmM2E3NGViZiwgMHg2ZGU1ZTVmOCwgMHg3M2IwNWNlMiwKLQkweGUyNjczOGEwLCAweDM2NzRmNWEyLCAweDVmZTg0OTQ0LCAweGFmZmM4YTk2LCAweDQxN2RjNmNlLCAweGM3NWZlMjJhLAotCTB4NjI3YmY2N2YsIDB4ZWZiYmFmYjMsIDB4MjY0Yzc3YWMsIDB4Zjc2Y2JmOWUsIDB4N2ZlY2VmYjksIDB4ZjEzMmZjNmIsCi0JMHgxM2NhYThkYywgMHhiN2JmZTFkZiwgMHg1ZGRmOTRjYSwgMHg0YTc2ZjMzMSwgMHg0OGZlNzYzYywgMHgwZTc4MDNjYiwKLQkweDdmYzdiZDk3LCAweGZlZWMwZDk3LCAweDlhM2ZkMTY3LCAweGU0ODFjN2ZmLCAweGFkZWZlMjdmLCAweGY3ZWJmZDYwLAotCTB4ZmNkOWJlZjksIDB4NDRhZTQyMzEsIDB4NGNiZTUzYjQsIDB4MWZiNzBjNDcsIDB4Y2M0ODM2NGEsIDB4MDYyYjcwMDYsCi0JMHg2ODAwNzJmYSwgMHhiMzMyOWM0YiwgMHgyMzFkZmRlMywgMHgyNzcyZmVmOSwgMHgyNDc2YmZkMCwgMHg2N2NhMGJjOSwKLQkweDFkZmUwMzM5LCAweDZiYzEwZWZkLCAweDI0YjkzZjdjLCAweGU3ODg5ZGQ2LCAweDVlNDUzYjAzLCAweDNiODg0OTQxLAotCTB4N2I4YzIwNzEsIDB4Yzk0OWQwNDksIDB4YjdhMjc3NGMsIDB4ZGRiMjUzN2YsIDB4OTczNTc5NGQsIDB4YmUxZDNlNDQsCi0JMHhjOTVlNzhjNywgMHgyM2FlZGU2OCwgMHhlNzQ1ZGNjNiwgMHgxODliZjYzOCwgMHg4M2FhYWJkYSwgMHhkMmMzYTIyNiwKLQkweGJkZGIwZDk3LCAweDQ2OTlkNWNmLCAweDkyZmZmYjcyLCAweGVlMWJkZjk2LCAweDUzZTdjMWQ4LCAweGUzNGQ1NDE4LAotCTB4NWRmNDEyNWMsIDB4ZjM0ZDUwMTgsIDB4MjljZTIzM2IsIDB4YmQ3OTZhMTcsIDB4YmVlOGMzNDMsIDB4ZmM1ZDllZmUsCi0JMHg5MThiYTEzZSwgMHgzYmYwMDc2ZCwgMHg1MGE1NzcxNywgMHg4YzQ3NjlkZSwgMHhiZDEzNjk3MywgMHg0NTI2NzllNywKLQkweDM4ZGNlOGFmLCAweDRjYmIwYmFmLCAweGY3MjgyZTc0LCAweDlmNjk1Yjk3LCAweDI3NGViN2IxLCAweGMyZTFkYzYxLAotCTB4MWVlNzQ2MjAsIDB4MjIwZmQ0MmUsIDB4YjI0MTdkN2QsIDB4YzJmMzdjNTAsIDB4YmM2OTAzYmIsIDB4NzQ5NWNhYTIsCi0JMHhjNDA4YTViZSwgMHg1MDlkZGEwNCwgMHg3NmJkYTJlNiwgMHg2OGI5ZmVhMSwgMHg2ZmE4NWZlNCwgMHg1NTlkYmFjMCwKLQkweGYyMzlmZmNmLCAweGJiZmU0ZWU5LCAweGY5NWYxNzEwLCAweGJlZjc4YTdiLCAweGVmZmE1MjhmLCAweDU0ZjgyODlmLAotCTB4ZTQ4ZGE3ZGUsIDB4OTIzNjk4ZmMsIDB4OTFhOGYzZjMsIDB4M2JkZTdlNjYsIDB4MmM0Y2Y1ZDAsIDB4MzdmMzhmYWQsCi0JMHgwMmZjOTljMCwgMHhhZmJhMjdlMCwgMHgzOWFiOGNlNywgMHg4YTcxODI0YywgMHhhODZjOWEwZSwgMHhlZTM0M2JkZiwKLQkweDBlMDllN2M0LCAweDc4NzdlMjgxLCAweDE3ODVmOTE4LCAweGJmMjQwYzc2LCAweDFhNjhhYzFjLCAweDM0OGVjMmU3LAotCTB4ZjI1MmQzY2EsIDB4YWRhMWE2NGQsIDB4MjM0Yzc4NDYsIDB4ZGJjYjY2ZjgsIDB4ZTVmZWU5ZDIsIDB4YzdjYTQwYmEsCi0JMHgzNmZjN2EyOSwgMHhjODlmZTUxNSwgMHg3YTJlZWVkYywgMHg1MTM0ZjE3NSwgMHg0ZDdlZTFiNywgMHhhMTdmY2ZkMSwKLQkweDkzZTI4YmMwLCAweDg5Njk1ZTRhLCAweDhmYTVhMzkwLCAweGYzMDAzMWRmLCAweDY1MWZkOTcwLCAweGFhYmI5M2NhLAotCTB4ZmU4Zjc5ZTYsIDB4NDhlNWY5NzAsIDB4YmMwZjQ3MjEsIDB4MDI1YjdjNDAsIDB4YzNiZjhlNzQsIDB4YzJmMjJjNTQsCi0JMHg3MWUxNWY4YiwgMHg3N2Y1ZTI5NiwgMHhmMWYyNGIzYywgMHhkZTYxODY4NCwgMHg1M2Q3MjVlZiwgMHgyZjcwZGU0MSwKLQkweDk2ZTVjOTE4LCAweGRhOTViZmE3LCAweGRlN2I0MzE3LCAweDlhMjBiZGZmLCAweGU1MGQwZWNmLCAweGViZTNmYjI5LAotCTB4MjJiZmZiOTYsIDB4OGJmZDViZmYsIDB4ZjQwNzYwNWMsIDB4OTU3YzFmYjMsIDB4NTdmMjNkYjUsIDB4MDYwZDAzOTQsCi0JMHhmMjllODNhYiwgMHg4ZDRlYmRmYywgMHhkZjNmMjk2YiwgMHhkMGY5MjA2MCwgMHhhZjdlMmMxOSwgMHgxMWU3OTJiNSwKLQkweGZhOWZhZjE0LCAweDM4NTdjYTZiLCAweDY5OWQyZjc1LCAweDdmZWNlNjVhLCAweGE0NzRhZWJmLCAweDBmOGJlZjg2LAotCTB4M2U0MDBlYjQsIDB4ZTA3YzA1MmMsIDB4M2ExZjgwNzgsIDB4YThmZWNlNWYsIDB4ZWJmZWZlYTEsIDB4Y2I5MjNhOTksCi0JMHhkYzNlM2VmNSwgMHgzYmExZjNjMywgMHg3NGJjNzMwNywgMHg3YTQ0OWFiZSwgMHhkMzk4MjNhNywgMHhmYzk3Y2MzNSwKLQkweDVlNjBjZWQ0LCAweGU2MDRhMjUyLCAweDNkMzk5OGRmLCAweDkxNzc4ZTc0LCAweGVkMjlkZGZmLCAweGMzNDNiMmE1LAotCTB4MTRhZDE1ZmIsIDB4ZTZlMjJiYmYsIDB4NDgyNTIzZjksIDB4ZmY3ODcxYjMsIDB4YjQzNmU2Y2YsIDB4NjcxZTUwM2IsCi0JMHhhZGQyYTY4ZCwgMHgxZWZlYjkwYiwgMHhmMjYzYTA3NiwgMHg3ZTBhOGVlZiwgMHhlODcwZjI1MiwgMHhhZTI4MDE3NywKLQkweDNjYTJkMmU5LCAweGFmYmIwYmI1LCAweGRmZmFlMWE0LCAweGVmZTdlMDhiLCAweGFlNDNjYTI1LCAweGZiMjkyOTFiLAotCTB4NTQwNzk0ZWMsIDB4MmIzYzI1Y2MsIDB4OWZiNDQ4NzYsIDB4YTFmNmJjNWYsIDB4ZTJmYmE0NDIsIDB4OTE3MzJkOGEsCi0JMHgxNDc1OTQxZiwgMHhmYTJlNTlhYiwgMHg0YzkyMWQ0OSwgMHg3ZWJmMDFmMywgMHhlYmQ0Y2NjMSwgMHhmN2MwYTdiZiwKLQkweDE5N2NjYWY3LCAweDNkMjdjZmRmLCAweDZmYjZiYzAzLCAweDUzYjE0NWE0LCAweDU3OGMzNTU5LCAweDRjZGE1NmIyLAotCTB4ZmM1MTg5ZGYsIDB4MDUzZWJlNGUsIDB4ODNlZmI4NGUsIDB4M2M0YThjZjksIDB4NTdlYjQ2ZTAsIDB4ZjlhMzc5ZTYsCi0JMHg3NWU0MjNiYywgMHhkN2U1OGM0NywgMHgxZmRmMTBlMywgMHhhZTRmMjRjOCwgMHg0MDY2Mzc3ZSwgMHg2ZGQ4MGZjOCwKLQkweGNhYTE0YmY0LCAweDBmZmYzMDc4LCAweDM4YzExNzUxLCAweDU2NzkwYWNmLCAweDc5YzNmMzBjLCAweGZkZjM2ZTI2LAotCTB4M2FlNDgwN2QsIDB4MDZmMGZhZGYsIDB4YTM2YTdhZGYsIDB4YzViZDNkNmYsIDB4ZGI3ZDZlYjcsIDB4ZGY4MmRlYjcsCi0JMHgwOWMwZjRjZCwgMHgwNzNjNjFmZCwgMHg4NzljNTNiMSwgMHhjZjE4N2Y0MCwgMHg4YzNmYTEzMywgMHhiMTg3ZjQ3NSwKLQkweDlmMTg3ZjQ0LCAweDc1OGMzZmEzLCAweDhlYjE4N2Y0LCAweDg5MjViMGZlLCAweGEyNThjM2ZiLCAweDY1Y2Y4YzNmLAotCTB4NDk1Mzg3MmIsIDB4MDIzZjhmMmQsIDB4MmZiNDZjMWUsIDB4NWRmOTQ3M2YsIDB4ZDEwYmYwMGEsIDB4NDIxYzJkMWUsCi0JMHg3Y2M2MWQ3NiwgMHg3ZTk1NzdlOSwgMHhkMjI5NmQ3OSwgMHhmZDkzMGNkMSwgMHhjYzRjYzhkMiwgMHgxZjViNmFjNywKLQkweGYyZmRlZDg5LCAweDFiNDY0YTk0LCAweDY4NmYxODhjLCAweDNkN2U3NzVmLCAweDI2MjkyMTlhLCAweGFmNmMxNWZiLAotCTB4YWU5NTJmZTQsIDB4NGY3ZThiN2MsIDB4ZTViNTdkYWYsIDB4NzhlMTNmOGYsIDB4ZjI4N2I4YTIsIDB4Nzg0NTRmN2IsCi0JMHg3MTRjYmU0ZiwgMHhmOGEzM2QyZSwgMHhkZmRmNTU5ZSwgMHhmOWZlZGMzZCwgMHg2NzlhYjc0NiwgMHg1ODAxZmZmNCwKLQkweDAwZGI4YmJiLCAweDAwMDBkYjhiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjY2RmZjAwLCAweGQ1OTQ3NDBiLAotCTB4ZTZmZWVmYmQsIDB4NDkzMjQ5OTUsIDB4NDFlNDIxMjYsIDB4MjFlNGNjMjAsIDB4NDkzODkzMTEsIDB4NDcxMTRiYzgsCi0JMHhhOGQ1MzA0OCwgMHg2ODRkNDNjMywgMHg0MDkyMTM4YywgMHhhM2MzMDQ4MCwgMHg3Yjk2YzRlYiwgMHhhNDQwMTgzMywKLQkweDUxYjc4ZDcwLCAweGExM2EzOTUxLCAweGU4NWRlOTRhLCAweGI2OTUwYTA5LCAweDEwMDY3MzljLCAweDRlNmQ4YWM1LAotCTB4YjZhYmFkNWIsIDB4YTkwNzg4MzgsIDB4NjgzNDk2ODcsIDB4NjllZGVjNTcsIDB4ZGZmN2ZmZWYsIDB4YmVmOTk3ZGYsCi0JMHhiYzdiNTI0OSwgMHhhY2RkNzdhYiwgMHg3YmZlN2JhNSwgMHhmZTNmNmZlZiwgMHhlZmZmZmRlZiwgMHhmYzQyMTA4ZCwKLQkweGZiNWJmZTg1LCAweGRhZjA4YzdjLCAweDg1ZmRmZjA1LCAweDQ0MmZkZmZmLCAweDU5Y2YxMGI5LCAweDBlOWQzMjQ3LAotCTB4ZDc3YzJlMjEsIDB4NGY1YzViYmUsIDB4MTg2OGFjNjUsIDB4MDZlNmE0MmEsIDB4MDlhNDQ5YmIsIDB4YjhkZjExYjEsCi0JMHg1MzM1YTg4NCwgMHhlZjA0NzlhNywgMHgyOGM3ZjY1MSwgMHhhNGYzNGM0MiwgMHg4ODVkMzEwOCwgMHg0OWY5MzNkMSwKLQkweDA1ZmZmYTgyLCAweDJjNGYzNzdmLCAweGE4Y2FjNzViLCAweGFkZGUwZWIzLCAweDZjY2YzMDk4LCAweDU0OGFmMDliLAotCTB4NzM1ZGZiMWEsIDB4NGYxYTA1ZjAsIDB4YTI0ZDc5ZDQsIDB4ZWE0ZDg4NDIsIDB4MzVlY2U3MWEsIDB4NTkxMDUxMDksCi0JMHgzOGMxYjVlZiwgMHhiZmViNzQyMSwgMHgwMThhNjBlZSwgMHg2MTlhMWEyZSwgMHhiMWZkN2ZlOCwgMHg0OTdiNDMxYywKLQkweGJkYTFhZTY4LCAweDEzZDZmOTZkLCAweDk2MjE0NGU2LCAweGY0MzMyZWVkLCAweGJjMTE2YWJiLCAweGE3Y2ZhYmNmLAotCTB4ZWE2ZTAzMDcsIDB4ZjBkMWJiZTcsIDB4M2FlYTEwOWQsIDB4OTM2ZWIyOWQsIDB4YzNmY2U0NzUsIDB4ZDFkMzdmZDQsCi0JMHhlMzAwNGY0YywgMHgyZjBiMzVlZSwgMHg4ZDAzYjdlZCwgMHgyYjY0NDJhNSwgMHg0ZjE4MWQ4MSwgMHgxNzllMmEwYywKLQkweDZhNTZiYzY4LCAweGU4YmI1M2Y3LCAweDlkMzhmM2IxLCAweDJjM2I3ZTJhLCAweDJkYTRlMDIyLCAweDliZjM0NDdkLAotCTB4ZDFlNzdmYTksIDB4YzI1NmUwZjQsIDB4YzljNjFmNGIsIDB4ZjBhNzc2YTQsIDB4NmI3OGQzMjYsIDB4ODcxNzBlZTYsCi0JMHg2ZjM1OWM2OCwgMHhkMDQyYmI3ZSwgMHg4M2NjYmIxNiwgMHgyMTVjY2VkOSwgMHgwM2MxMmIzNiwgMHg5ZjEwYjM0ZSwKLQkweGFiNGUxY2E0LCAweGQ5ODc3NmE2LCAweGY0NDNjOGJmLCAweGZjYTY3Y2I5LCAweGU3ODQ1NWM3LCAweDFlY2M4N2NiLAotCTB4MGQ2ZDkzY2MsIDB4MjkxMjk1YTUsIDB4YWIyNjgzODUsIDB4MDM4Y2VjMDYsIDB4Y2RmYjA3ZmQsIDB4NjNhMjQxNzUsCi0JMHg5Y2MzYWQxNiwgMHhjMThmZTExMiwgMHg3OTcxNjlmZSwgMHgzNWJlYzg4ZSwgMHgwYjZkOTg3ZSwgMHg3ZDg0ZGNjZCwKLQkweDc5ZWIxY2JkLCAweDBhM2Y4MDQxLCAweDlkYmM2MmVmLCAweDhmZTAyYjMxLCAweDgwOTQ1YjhlLCAweDNlYzhmYWVkLAotCTB4NzdlNTNhMzcsIDB4ZWEzZTdlZGEsIDB4N2MwNjMyYTUsIDB4ZGIzZTY1ZTYsIDB4YmU1ZmI2YWMsIDB4OGJiMTQ0ZjYsCi0JMHg3YmQ5ZDFmNiwgMHgyYzRjZGIyYywgMHhlODc0Y2ViMCwgMHgwMTk1MjY0MCwgMHhmYjE5YmZiYiwgMHhmZmNjMThlOSwKLQkweDY3OWE3Y2M1LCAweDYxNjYzYmVkLCAweDNlZmZmZWE2LCAweDlhYjEyOGIwLCAweDhiYzlmN2Y2LCAweGMxM2Q0ZjU2LAotCTB4ZGI3ZmY3MGYsIDB4YWM3ZGE2MTYsIDB4MWU2ZDA0YjUsIDB4M2JiZTNiMmEsIDB4Nzk1MmYzNjgsIDB4YWU0MWMxZWIsCi0JMHg2NWIwNzU1ZiwgMHhiNTc1ZjgzMSwgMHg3ZDgxZGVlOCwgMHhiZjEyYjI1ZiwgMHhiMWQxZjBlYiwgMHhhNGU3ZDk1MCwKLQkweDMxZWViZjc1LCAweGM0Nzc3ZjMxLCAweDZiZGEzZjA5LCAweGE3NGZmM2NkLCAweDk1MDc3ZjYyLCAweGI5N2IyYzEyLAotCTB4ODVhZGIwZWYsIDB4N2VkNDdiZWEsIDB4N2EzMmYyZDEsIDB4NzRlZDU5NzYsIDB4YTQzYTNmZWEsIDB4OTJhN2RlMzAsCi0JMHhkNzQzYmI4ZiwgMHgxYjJjN2NiMiwgMHg3Y2I5NzM3MywgMHg4ODIxM2FlYywgMHhiZTExZGYyNSwgMHhhNTc0NDEyMiwKLQkweDNlZjAxYWI1LCAweGZjY2NkNjdhLCAweDFjZGM3YTM5LCAweDg3NDlmNDE0LCAweDBjYmE5NDJkLCAweDJiMTdmODc0LAotCTB4Zjg4YmExZDMsIDB4YTRmODhhYTcsIDB4NDBkZjdlOGIsIDB4ZDliZTZmYTUsIDB4ZDQwZmJmYzAsIDB4YmRmODFiYzQsCi0JMHg4OGU0ZTg0MSwgMHhjYzQ3YmJjNiwgMHhlYmNiYzAzMCwgMHhlZmZkMGQ3MywgMHg5NDVkN2U1ZCwgMHhkYTQ2OTQzYywKLQkweDBkZmZmOGNkLCAweGJiODI3NjkxLCAweDRhNWMwNGI2LCAweGM2ODVhMDIyLCAweDMwYjcyYTdhLCAweGY4NjZkZDlmLAotCTB4OGQyYzRiYmUsIDB4M2Y5ZjAzZjQsIDB4Njc4YzZmZmYsIDB4NGI2ZDg2MjEsIDB4MjZiZjY4OGIsIDB4YWZkMTA3YTIsCi0JMHhhZDVlN2ZjMSwgMHg2ZDNkNzMwZiwgMHhiMzk3MjBjNCwgMHg5OGJmM2Q3MywgMHhmMjMxN2M0ZiwgMHg0N2VjNTViNiwKLQkweGRmMDg5ZmM1LCAweDdmNDZlODE1LCAweDIwZTkxM2I5LCAweDlkNWExMTA0LCAweGIxZDY4OTM3LCAweGE5YzkwOGZlLAotCTB4NjE4YTVmNDEsIDB4MDZlYjE3ZDAsIDB4NzRiNmJhMWQsIDB4MmE2MjhiZDQsIDB4YjQwNTliZTksIDB4YjBjMGFlOGYsCi0JMHhmOGMxZGJhZCwgMHg0YTExNjRiNywgMHhhMjJiZjdkNiwgMHhkYmZiODUyNywgMHhiYzI0NTJiMywgMHhhYzQ3ZjUwNSwKLQkweGY4NzU4NjFmLCAweDY4NjM3OGMzLCAweDgxNmU2MzNmLCAweGFmYjc0NGJjLCAweGFjMGI3ZGE3LCAweDNkZmVlYzQ3LAotCTB4MmRmYWQ1ZjQsIDB4ZGU2MzFmNzUsIDB4ZWEzY2RhZjUsIDB4YWU5ZjFhZjgsIDB4ZWJkZjRiZGUsIDB4OWUzZDFkZDYsCi0JMHg3MmM1YzRhMywgMHhlMWUwZjZiZCwgMHg3ZTEwNjdkNywgMHg0YjkyZjk5NiwgMHg0MzlkNDcyMCwgMHg4NTJkYWM0YiwKLQkweGQzNGRmOTEzLCAweDlhMGY1N2ZiLCAweGYwNmUzMTgzLCAweGI3ZTYyOWRmLCAweDhmNTY4M2QxLCAweGIyZjAxYmY4LAotCTB4MGYxODJiZGUsIDB4OGFiODdjZDEsIDB4ZjlhNzY1ZjYsIDB4M2M1MTFkNTcsIDB4MDNmNjQ1NDEsIDB4ZjE0NmQ2N2UsCi0JMHg5YWNkYzYyNywgMHhiZTFhNmYwNCwgMHhkNTE3ZjFjNiwgMHg2ODNmMWFiZSwgMHgyOThmYWI5ZCwgMHgwOWNiZTg0MSwKLQkweGE3YzY4OTc4LCAweDNmMmFjZjNhLCAweDBhZWI5MGZkLCAweGM2YTJiYWYyLCAweGYyZDE1NTE1LCAweGZlODZjOWI4LAotCTB4ZTExNGZiYTMsIDB4MWYxOGJlNTQsIDB4MmM2Y2M3NGIsIDB4ZTU3M2IzZGYsIDB4MmE4ZTQ3ZmUsIDB4ZGRmNGZkOWUsCi0JMHhhZTE2NjMzZCwgMHgxZjFmZTcxZiwgMHhmMjE0YWRlMSwgMHg5MjFmMDEzNywgMHg3ZTUyN2M5ZiwgMHhlMzRiMWVlZSwKLQkweDdjNWVmZWVmLCAweDM0ZmM0NWY1LCAweGVmZGM1NzNiLCAweDdhZjQ0NDczLCAweDYyMWU5ZTQ0LCAweDQ5Mjk0YjNlLAotCTB4NWI0OGJkNDgsIDB4YWNlNWRmYTAsIDB4M2IzZDU0MWYsIDB4NGQyNDNlOTUsIDB4ZmM5NGZhY2YsIDB4NzFlN2U2MDMsCi0JMHhmODk0ZTNiYiwgMHhhNTc1NjhkYywgMHhlYjRmODMyNywgMHhkNDY4ZjY4YywgMHhkNjRhNGFlMiwgMHg2NDJkMjFmOSwKLQkweGMwZDM1ZDY3LCAweGMyZDMzM2JmLCAweDYwOWY4ZTM0LCAweDRmNGQ1N2U4LCAweDc2ZjFkNWZiLCAweDBlY2RjYjZjLAotCTB4NmZmM2JlZWIsIDB4ZWEwOWE2YjcsIDB4MWE3NWJkOWYsIDB4Y2ViMTJkOTcsIDB4OTY5MWQ4MzQsIDB4ZWMxZjY2YWQsCi0JMHhhNDhmODdlMywgMHg1ZjExNTVhNywgMHg5YWRkYjg3ZCwgMHg3YzQzNGY1YSwgMHg2Y2JjZTBmOCwgMHg5NmI4MDQ1MSwKLQkweGM1OGYwYmNiLCAweDEzMWQwNDM0LCAweDYyNWQ1NWY3LCAweGZkNzQ3YzYyLCAweGFlZDhmN2Y3LCAweDM2NzRkNmZkLAotCTB4Yjc3MjAxYjEsIDB4MTU2MjY4ZmQsIDB4ZmI2ZWIzOGQsIDB4NjQ5YzJhY2YsIDB4ZmU0Yzg3Y2YsIDB4ZmZkYTEyYmEsCi0JMHhkYjIwY2EyNywgMHgyYzFjZTE3MywgMHhmYzQ1MTVmNiwgMHg2YmRiYjU4OSwgMHgzYmY3NjFkMywgMHg1OWVhN2NmZiwKLQkweDU2ZmY3ZGQ4LCAweGY4ODk5YTZiLCAweDI3M2YzN2U4LCAweDNkYjBhODdiLCAweDUyZTIzZjYzLCAweDRiZTNlNGFjLAotCTB4ZmIwN2M0MmYsIDB4MjkyZmZmODgsIDB4ZjU0YjFiYzIsIDB4OGEyN2NjNmIsIDB4N2FmYjA2OWQsIDB4ZmZjYzFlZmMsCi0JMHhiNzlhNzZjZiwgMHgwZjA2ZjMxYywgMHg0ZjVlNjA2NCwgMHhlYmNjMWFlMCwgMHhlNDlmOWFkZiwgMHhkZGZlMmJmZiwKLQkweDdmYTU3YjAzLCAweGU3YjU0MDc3LCAweGEwMzI4ODU3LCAweDNiNWVjMWRiLCAweDk3YWJmZmMzLCAweDg4NDczZDEwLAotCTB4MGMxOWJkNDMsIDB4ZTJlYmQ0YmYsIDB4ODBiN2E4NzIsIDB4MzkxNGQ3ZWIsIDB4NDZmYmJkMjUsIDB4M2NkMjM2NGEsCi0JMHhhMGEyODU4MSwgMHhhM2FkZWQ5YiwgMHhkZmViNDJjMCwgMHhlMDc5YzRhNCwgMHgzYzUyNmM0ZiwgMHhmZGQwNGVlOSwKLQkweGNlZDJjOWU3LCAweDVlOGJmNGFhLCAweGU0MjM0ZGNmLCAweGYzZjhlOTgzLCAweDY4YmIzMWU2LCAweDJkZWZmMWQzLAotCTB4MmYwMGQ5MjIsIDB4ZmExYTY3YjIsIDB4ODZkZDNhZDcsIDB4YWUzMzViZjYsIDB4YzU3ZmI0MzUsIDB4NmY4MDYyNTUsCi0JMHhmNDM2YTgyZiwgMHg4YjczYzNiZiwgMHhlYWFiYmUwMSwgMHg0YmZlODYyYiwgMHhmMDBjNGJiYywgMHg0MzQ2YmFiMiwKLQkweDJkN2RiYmZmLCAweDFiN2JmNjg2LCAweDFiZGExOGQ2LCAweGYwMGMxYmZkLCAweDM0MWUzYjU3LCAweDdiYWZiZmY0LAotCTB4MmJkZGExYWIsIDB4YmJkODE2OWMsIDB4MTcxZjQ0ZTMsIDB4ODg1ZmZkZTEsIDB4YmQzNzI4MmUsIDB4ZDNkMGVmOWQsCi0JMHg1MzIyZmU3NSwgMHg3YzI0ZDBmNywgMHhmNDg5NjhmYiwgMHhlYTUxN2U2ZiwgMHg5OGZlMDVkZCwgMHg0ODdjOTI2NSwKLQkweGMzYWUxN2E1LCAweGQ0MjdiMDMzLCAweDBhNDIyNTllLCAweDM4NjIyYmZiLCAweGRkMTM3YzEzLCAweDdlN2RiYTJmLAotCTB4MmVhYmM5ZmMsIDB4ZjRhZGExYTIsIDB4ZTkwYjA2YzMsIDB4Mjc5NWY5OGQsIDB4YmUwOTcyY2IsIDB4MWI2YmU1ZjMsCi0JMHhlNjFmYTQyZCwgMHgyYWYyNzhkZiwgMHhiNjk1MWZlMCwgMHgzMmZiNzIzNSwgMHhjMzQ1YWVjMSwgMHgwNDM3NmZjYiwKLQkweDZmZjM5ZDY4LCAweDgxZWRkOWNlLCAweGU5MTNmM2RmLCAweDlmYzU0Y2Y3LCAweGJlNWI3N2Q4LCAweDEwY2EzN2RjLAotCTB4OTNjYTIzZjEsIDB4NWYyODhmYzQsIDB4YjM2YzdlMjMsIDB4ZmM0N2JmOTIsIDB4YWY0Y2YyODgsIDB4ZDQ3ZmViODcsCi0JMHhkOWU1YzU1YiwgMHgzZjk3MmY1ZSwgMHg3MmUzYWRlZSwgMHhlNWM3ZDdiOCwgMHhiODFiN2I0ZiwgMHg5ZmFmNzlmYywKLQkweGI3Yjc3YmJmLCAweDdhZjdjYjgzLCAweDk3ZmViOWJiLCAweGZlNWMzZGJkLCAweGY1YzAzN2FhLCAweDJjMjg5NmFmLAotCTB4MDEwMmI0ZmYsIDB4MDM3YjA1YmQsIDB4Nzc2ZjVkZmUsIDB4NzdhNGNjODQsIDB4ZTVlYjMxYzUsIDB4ZjI0YWJkNzEsCi0JMHhkZGE1NzhhZCwgMHhhMmE5NWM1NCwgMHg2ZWJlY2E4OSwgMHg1Yzg3OGUxMSwgMHgxN2M5MmQ4NiwgMHgzOWY4YmU4OSwKLQkweDdhMjM3ZWQ5LCAweGVhMmUyMmQ0LCAweGM2MWZhZGZjLCAweGFmNDI0ZjdhLCAweGM5ZDMzMTA4LCAweGZmYWQ1OGZhLAotCTB4NjllZjUyYTcsIDB4MTVlZTVmYWUsIDB4OTc3YTdkN2EsIDB4ZDAyM2ZmZGIsIDB4YjJmNzFkZmIsIDB4ZWMzMzMyZmMsCi0JMHgyNGU5Zjc1MywgMHgyNGM3N2E2YSwgMHg5M2UzMjYzYSwgMHg1OTNlNTQ2NywgMHhjNjJjNGY2MCwgMHgzZDgxNmVmOSwKLQkweGIyN2IwODNiLCAweDgzZWUxMmMwLCAweDRjZmJlYTFlLCAweDNkMjIxZWI4LCAweGM2YzEyMjc0LCAweDExZWZhOTdhLAotCTB4Y2ExM2ZiMGIsIDB4OWJlMTgyYTcsIDB4N2RjMzA1NTIsIDB4YTE5YjBkOWYsIDB4M2QzODE3NzcsIDB4NTQ1NzZjMTksCi0JMHgwMjJlY2YzOCwgMHhkZDcyMjk0OSwgMHg0YTFlNjc1OCwgMHhhN2NkNTNjMiwgMHhmM2IwNDVlMSwgMHgyZTZjMzkzNywKLQkweDVmOWMwOWU4LCAweGNmMzE0YTYyLCAweDAyYmNkYWJiLCAweGQ3YmQ1MmUzLCAweGZmM2ZkZjQ2LCAweDY4OTkwODk5LAotCTB4NWZhOGIzNWQsIDB4MTBhNWYzMmMsIDB4ODdkODE3MjgsIDB4ODc5MjNlY2QsIDB4Mjc2ZjU0OTksIDB4OWJkNTE2NzgsCi0JMHgwMmQ3YmI2NSwgMHg2YzNhN2MzYSwgMHg3NmExMWQ4NiwgMHgwM2RiMjQ5MSwgMHg3Y2M4OTRhNiwgMHgyYzEzM2FkYSwKLQkweGVjYTk3ZTM0LCAweGU3MmE1ODk3LCAweDM5YzBiYzAxLCAweDNhZDBhMjU0LCAweDFlMWNiYWZiLCAweDAyZGQyMWUwLAotCTB4NWVmZWU3ZGUsIDB4NTQzZjdmMzMsIDB4M2ExZTA0ZTIsIDB4ZmI0MTFlMWQsIDB4ZTIwNTJjMjAsIDB4YWYxZmI5NGEsCi0JMHhkNzIyYzEzMywgMHg1ZmE5ZjM1MywgMHg0MzJmZDE3OCwgMHg3MWQ0NjI3OCwgMHg4MDNkYjJlYywgMHgwZDRhNmU3MSwKLQkweDhmODA1YTY1LCAweDIwMjc5YjZlLCAweDlkNjJmMWM3LCAweGZiMmYxN2U4LCAweGI5M2FjYzg1LCAweGFkMDNmYmNkLAotCTB4YWNmZmVjOTcsIDB4ZjQzNzYxOTQsIDB4NGM0M2YxMmUsIDB4MmJkNGY4MjksIDB4NTM5OTYxZjksIDB4YTk3MDgzZjIsCi0JMHgxYTFmY2FiMCwgMHg0YTc1MmNiZiwgMHhlZGNhZmM5MiwgMHg3OGQyOTY3NywgMHhhZmU3MThiZSwgMHg3ZmNlNDllMywKLQkweDk3ZTZlNGFhLCAweDUxMmNkZjEwLCAweDFmYmZmNWZkLCAweGZkMjU3OGJmLCAweDdiYmQ1MjY3LCAweGY0NjhkZjIyLAotCTB4ZTM0N2Y4ZDEsIDB4ZDIzZTY4ODMsIDB4YjdhMzQwZjgsIDB4N2YzNDVkZjYsIDB4MzQ1NWYzNDUsIDB4NGJiMDJkM2YsCi0JMHgwZjhlODMzYSwgMHg0OWY5MTMyOSwgMHg5MDY4NzRmOSwgMHg2NzY5ZGZkNywgMHg0ZmNkMTZiYiwgMHgzNTMwN2NkMSwKLQkweDRlN2RjOTNmLCAweGZkMDhhM2U0LCAweGNmMmY4ZjgxLCAweGRlNmVjMzQ3LCAweGE0ZmI2NmM3LCAweDhmZjFhNDdjLAotCTB4MWYxYTRmYzYsIDB4MTYyMjNmZGQsIDB4Y2I1MzUxMjcsIDB4OTQ3NWViOTgsIDB4Y2ZmYzcyN2IsIDB4OGFiNDhmNDAsCi0JMHhhYjMzMTY1YiwgMHhiZTQ1Y2QzOCwgMHg5ZWZkODk4NCwgMHg1YmRmYTI5OCwgMHg1MDFmYzRiMSwgMHgyZjczYzIzYywKLQkweDJlMzM4MWZjLCAweDdlYzVkOGFiLCAweDQyNTFkN2I2LCAweGVhYTQ1YmY0LCAweDliYTIzM2QxLCAweDhmYjkxY2VkLAotCTB4NDZiNWQwMDEsIDB4YzJhMmYxMjUsIDB4ZDc3ZmVjZDUsIDB4MmM3ZThjMzgsIDB4ODhmYzIzMmMsIDB4MTdlZmQ0ZGIsCi0JMHgwZGI3YzlmZiwgMHg2YTljNThlYiwgMHg1MzZmNmZmNCwgMHg0NTViZTNmZCwgMHgzNzVmOGYzZiwgMHhmMGJkYWEzMywKLQkweDZmOWJmNjU2LCAweDZmZDYzM2NiLCAweDVlZmQ1NTI4LCAweGNmNDM3MGI3LCAweDVjOGYwOGQ2LCAweDdlY2RkODlmLAotCTB4NTcyYThkNmIsIDB4NzJmZDJhNTksIDB4OWYzMTY2NWQsIDB4ZmMyYjU4ZjAsIDB4ZDdmNzI4MTYsIDB4NjJmMzY3N2UsCi0JMHg4MDQ1NWJkYywgMHgyMDg4YWZlMSwgMHgxMDhiYjc5NywgMHgxOTA3NzM4ZiwgMHgwOTc3YzAwMiwgMHg2OWRjMDU2MSwKLQkweDkxYjZjOTFmLCAweGZiMzdhZDQ4LCAweGY4NWY4MDNmLCAweDM5ZmU1OWRiLCAweGM2MzZjNzM4LCAweGNmMjBmYmZhLAotCTB4NmNlZmUyYTcsIDB4NWJlNjgwN2EsIDB4MGYyOGI2NTQsIDB4NzFhYzlkZGYsIDB4ZDI3NTNmYjEsIDB4MWRmZWNiOWUsCi0JMHgxMjlhYzJlNCwgMHhjOTM3Y2Y5MSwgMHhmZDkxZTYzZSwgMHgxM2Y2NDUzYSwgMHg5ZmIyNjllNSwgMHhkZWM3NjQ3OSwKLQkweGY4MDlmYjIwLCAweDAyYWQ4MmI2LCAweDI5NzYyZGRmLCAweGI3ZGJhMmMyLCAweGNlZWRmZGY2LCAweDZkMzJjMjQ1LAotCTB4N2I3NGZiNmEsIDB4ZmE2N2Y3ZjEsIDB4NGFkZjdmODksIDB4MTIyMzUzOWUsIDB4NjBkNjU2NTEsIDB4YTcyNTZmYmYsCi0JMHg2MzE5NjQ5YiwgMHhkNWU4YjJlMywgMHg0ZmZjYzliYywgMHhmMzIyZmY4ZCwgMHhhNmY5ZTYyZCwgMHhkNzg2YjNjMiwKLQkweDc4NmE3YzY4LCAweDdkNzgxMmZlLCAweDNlYmMzMjY5LCAweGNlZDgyMjUzLCAweDU5NWZkYThmLCAweDU3NTViODhmLAotCTB4ZGU2ZmQ0YmMsIDB4MDY0NDEzNTcsIDB4YTNjNmVmZjEsIDB4MWJmZDFjZjIsIDB4ZTMxMzMxMmMsIDB4ZjdiNTNjNGIsCi0JMHhlNDJjMjhkYywgMHgyYmRjN2Y0YSwgMHhhYWYzYzAwMiwgMHg4ZmFlNmE5ZSwgMHhmNzg5OGY4ZSwgMHg2YmY4NjE2ZSwKLQkweGQ5NTcyZjJhLCAweGRkZTgyMWZkLCAweDZiYTFhNWNiLCAweDFmMTJjM2M4LCAweGJjNGJlYmVmLCAweGVkZjllNjgxLAotCTB4Y2UwZjY2NGIsIDB4ZDc2NjlkMjcsIDB4YWNlMjBmNmUsIDB4MmYzZDk5NmYsIDB4OWQzZmZiZTAsIDB4NzI0YTVlY2EsCi0JMHgzNjlmOWUyNSwgMHhkM2FjMzllOSwgMHg5ZGE4ZjEyZSwgMHhlMzlkYmVjMywgMHhjZTE0Yjk2MywgMHgyM2M4MGNiMiwKLQkweDVmOTgyOWZkLCAweDkyNjY1ZmYzLCAweGZlMjc2OTJmLCAweGU1OTM2N2RkLCAweDQ1NGNmZTU0LCAweDUyOWZlOTFjLAotCTB4NTBmYWNmZWUsIDB4Yzc3ZDFmYTMsIDB4NTM4ZDE2NzAsIDB4ZWIyNmZhNDEsIDB4YWYzZTM4ZDEsIDB4ZjdkZTlkNzgsCi0JMHgwOGQ1MGVkOCwgMHhjNWFmYmY4MywgMHgyNTUzNDYyMywgMHg2Yjg4MTcxZSwgMHhiMDNjNDQ5ZSwgMHgwNDU1OGNlNiwKLQkweDgyMTQ3ZGE5LCAweDI1MGNmNjhmLCAweDdhMzViZDA4LCAweGZhMTlhYWU2LCAweDExNDEzNmI2LCAweDU0MmY2MGQzLAotCTB4NjE5MzEyN2QsIDB4M2U5ZDJlMTIsIDB4MDljNTc1ODgsIDB4ZTM4ZjhlOTcsIDB4NzAwYzUyMGIsIDB4YTE4NjY3ODIsCi0JMHg4ZTU1NTI3ZiwgMHgzYmQ5M2RhMSwgMHhhZDNlZDBkNywgMHg0ZjAwZDRhZSwgMHhlODYwZGRmNywgMHhkMGIwZGU5ZiwKLQkweDZmZmE2NzAwLCAweGVhY2ZmNDMzLCAweDM1ODA2YTU4LCAweGFiMjU5NTdkLCAweDE1ZWVhY2M0LCAweGY3NjdlZjg2LAotCTB4NzdmNDM0YWMsIDB4ZGExYWQ2MDcsIDB4ZmI4OTcxY2QsIDB4YmMwNjhmNTksIDB4NGUzNDA1YzMsIDB4ZWU0ZTNhOWQsCi0JMHg3ZTg2OGRjZSwgMHhhYTZkZDA4MiwgMHhiZmM4OWM4MCwgMHhjZWViMTI2NywgMHgzYWNmNDQyOCwgMHhjODdhYWFjNywKLQkweGQ3ZmY3ZTY5LCAweGQ3MzRlYjhkLCAweGJjYTk5MjViLCAweDdmZDQ2NWQ1LCAweDc4NDYxOWI1LCAweDQyODRlMzkxLAotCTB4NGU0NThiNDMsIDB4ZWFjZTFlYTMsIDB4OGNlMDE4YjYsIDB4ZDc5YmQyMzIsIDB4NTE2MjhmZDEsIDB4MmY4MmYxY2MsCi0JMHhhZTdmYmZhMiwgMHg3OGQxZmU4MSwgMHg4NGYwN2UyMiwgMHg2OWVjOWZkMCwgMHhiMzdhZWIwMCwgMHg4ZjdiMDJkNSwKLQkweDFmN2U4MmZjLCAweGYxZTgyZmM4LCAweDFlODJmYzgwLCAweGRmNDE3ZTQ2LCAweDdkMDVmOTFmLCAweGZhMGJmMjNiLAotCTB4NDYzM2IyZjYsIDB4MWIwZjk3ZmEsIDB4OWVmOTVmZTksIDB4NWYxYWZlOTEsIDB4ZWFhNzQ1NGUsIDB4ODQzZjkxYjAsCi0JMHg3ZjJiZjE1ZiwgMHg1ZTM3NGU4NSwgMHgzNDRmZjIzMiwgMHgzNzI2NmU3ZCwgMHhmNDE1MzkyNywgMHhkNzIxM2M1MCwKLQkweDlkZDdhNzk3LCAweGZhMjJmNDUxLCAweGY3YzA0YzA0LCAweDlmNDkwNGNjLCAweGEwNDk3NWQwLCAweGIzMTllZDU3LAotCTB4OGZmYzEyMDgsIDB4Yzc3Y2ZiNTEsIDB4MjMyODZmZTIsIDB4YWI4NmYwM2QsIDB4ZWJmYTAzMzQsIDB4MTQ3YWUxNjYsCi0JMHg5ZGM1ZGI3MSwgMHg4Njg4NGYyNiwgMHg3ZTM1MTE1ZCwgMHg3ZGZmMGNmNSwgMHgxYTE3YTQ2NSwgMHhiNmNkNWRhNiwKLQkweGZjNDYzZjgxLCAweGRjOWU3MDczLCAweGQ5ZGRlYWE1LCAweGMwZmM3MjcxLCAweDEyN2NjMTQyLCAweGQ4MzliYWY4LAotCTB4MzM5ZWUzNDcsIDB4Y2ZkMDJiZjUsIDB4YjdmNDRmZGYsIDB4MGJmYmZiZTMsIDB4ZDQ3Zjc5YmIsIDB4Y2RmN2MxNDMsCi0JMHgwZDkzMWFmZiwgMHhlMGI2NzliOCwgMHgwYzI4YjA3MywgMHg4ODQ5MmY5NywgMHgyY2U2YzVlOCwgMHhkNDNiMjdhYSwKLQkweGUzOWVhNjU1LCAweGRmNGVkNDNjLCAweGI4Yzk5Nzc1LCAweDY5Yzc4MjRlLCAweGExNTE3OGUzLCAweDQ0NGUyMmYwLAotCTB4ZTZlY2FmYzcsIDB4NmNlM2UwMjIsIDB4NjNlMDFjZWMsIDB4ZGU0MWU0YzAsIDB4MjU3NTZjMjAsIDB4ZGUwNTFmNDEsCi0JMHhiZGU0MGIzNCwgMHg5ZmMyMTdlMCwgMHg1N2ZhYTU5YiwgMHgyOWU0NjI1OSwgMHg1ZWNlNzNhYywgMHhkN2FiYjA2MSwKLQkweDYyYzJlZDA2LCAweDBkMzk3ZmM4LCAweDg2NTBkMTcwLCAweGM3ZjVmZmExLCAweDkyZjY4NjVjLCAweGJkYTE4MTUwLAotCTB4MDBjNzhjZWMsIDB4MTk1NzBmOTcsIDB4ZTdiZTU3ZmEsIDB4ZTFkNWMwMzUsIDB4MWJmZjQzM2EsIDB4ZjAwY2Y5MmYsCi0JMHhlZjllNDU2YywgMHgyMzk2NTNiZiwgMHg5OTJlMjFmMywgMHgzODdlNmJkZiwgMHg2YmZhNTA3OSwgMHhmOWFmZGNmMiwKLQkweDQ5ZmZhMmQ1LCAweDM4NzExZGFmLCAweGJmMzU3Zjk1LCAweDZkYTNmMzVjLCAweGNmZDA0MDg0LCAweGY2YzJkM2I2LAotCTB4ZmE1ZGE2NjAsIDB4ZjYyZGZlYzksIDB4NjgyN2M4ZjMsIDB4NTdlNmJhZmUsIDB4MDhhOWZlNmIsIDB4NzZmNTdhZDQsCi0JMHhmNjkzYmU4NywgMHgzNWViZjU0NSwgMHg4YmYzNTlmZiwgMHg0YzVkOGIxMywgMHhiMjM2ZWIzZiwgMHg0YjA3ZTBhYiwKLQkweGFlNzYxMzM4LCAweDFhNGM0NjM5LCAweDRjYjk3OTBmLCAweGQ3YTI1YjllLCAweDdhMmJhZGFmLCAweGE3NjJjNGZlLAotCTB4ZGM3NTE3ZTQsIDB4N2VlMmVjMTcsIDB4Y2NmZTI0ZGYsIDB4ZjU3Y2FhYmYsIDB4NjNiZWI5OWYsIDB4YWQ2N2NmZTAsCi0JMHhiYjU2Zjc5ZSwgMHhmNGYzZWJmZiwgMHgxMzIxZmMyNSwgMHhmNWYzNTJmZSwgMHgyNjRkZmQ3MiwgMHhjNzY3YzcxMywKLQkweGQ3MmU1ZmQ3LCAweDBiZjU5NWFmLCAweGQ5MjFkZmM5LCAweDM3ZTJmMzU5LCAweDFmYzgzYWY3LCAweGMyYzdiNjc4LAotCTB4YWYzMzk2NzEsIDB4ZTQwYzZjNWMsIDB4NWUxMjFmYzEsIDB4ZmM5YjMzOGMsIDB4M2UwN2QwN2MsIDB4MGIwN2NlMDUsCi0JMHhkZjNjY2RjYiwgMHg3NzI5MzJhNSwgMHhjZjJjYmQxMSwgMHhkMjQyYTM2NSwgMHhjNmM3YjQ3ZiwgMHhlODQ5ZDQ3OSwKLQkweGVkYTA3Y2NkLCAweDhiNDNmMTA3LCAweDUxMGRjNjU1LCAweGM5Njg2ZTIyLCAweGMwNDM3MTk3LCAweDQ0YTIxYjg4LAotCTB4MmZmNTEwZGMsIDB4M2UxODdhZjcsIDB4ZjBjNTViZDIsIDB4MGNiZDdhZjcsIDB4ZTNhZGViMWYsIDB4M2ViZDA3ZjIsCi0JMHgyNmY4ZDdhZSwgMHg3OWRhNWYxYSwgMHhjNDNmYTM0YiwgMHgyZjIzNzYxMCwgMHgxZmViMWY4YSwgMHg2ZDcyZjQ5MiwKLQkweGQzZjZmYWIwLCAweGEyNGRlYjE2LCAweGUwOGQyOTRlLCAweDhmMTUxZWYzLCAweDNjNDllNjMzLCAweDdmZTQxZmEwLAotCTB4ZTZiNTdlYWEsIDB4OWJjNDI0YzIsIDB4YzkyYjg1NDcsIDB4YWFlMjU3ZjksIDB4Njg3YzJmN2YsIDB4OTczZjFmNzgsCi0JMHg5NDliY2I4ZSwgMHg1MmU0YTk4NywgMHhjZWViM2YzYiwgMHhkMTc3MmNhYiwgMHhiNzJkMThmMiwgMHgzZmU3NzhkMSwKLQkweGZjN2JiOWRkLCAweDUzYzVhYjVjLCAweGU4ZDUzOTU0LCAweDU1YjVjOWEyLCAweDVmYTExYjg0LCAweGNlMjY3OTgyLAotCTB4NjA5YzNmNTMsIDB4ZjNjNWEzOTQsIDB4MDc3ZjdlMjQsIDB4YmNmMmEyMzksIDB4MzI2Njk5Y2IsIDB4ZmRiMmY4NDcsCi0JMHgxMDE3ZjI3MSwgMHg0ODY5ZWYxZiwgMHg4MDU5ZTBlNCwgMHg3ZGJhOGZjZSwgMHhkMmZhZjAyZSwgMHgyYjdlYTA2ZSwKLQkweGQwNjJhYzA3LCAweGIwNzU3ZDg1LCAweDQ0MDk2ZDFkLCAweGQ4NDcxYjlmLCAweGFkZGI2YzlmLCAweDNlNDY5ZjM4LAotCTB4ZTdlNGU3N2YsIDB4ZDEzZmNlNGEsIDB4NmZjMjZkMzgsIDB4ZmJkYmJhYzMsIDB4YWI1NmZkOGQsIDB4ZmNlOGNhZTcsCi0JMHhkNTNjZDU0YSwgMHg4Nzg0NzlkZSwgMHg3ZjM1MWZmZCwgMHgxOWY2YTFkZSwgMHg2ZTYwOWZlNywgMHg2MGRmMWE5MiwKLQkweDE0MzJhNDc5LCAweGI5YmYzYmEzLCAweDhiMjhlZjkwLCAweGI4Yjc4NGMwLCAweDZkYzNkODAyLCAweDZiYmU0ZjE2LAotCTB4Nzg2OWJmMjIsIDB4OTdlNzk4OWIsIDB4ZjdjNDFiZjcsIDB4YTBmY2Y5NjIsIDB4MjMyZmY5ZTUsIDB4NmFmYTBmY2YsCi0JMHhmZmI1MTRmOSwgMHg5ODU5ODBlNSwgMHg0OGUwZGY3MSwgMHg3ZmE3ZTcwYywgMHg0ZjdiM2E2YiwgMHg3Zjk3NGI4ZSwKLQkweDExYjc5MDk5LCAweDMwOWZiODg5LCAweDI3YmE2ODdhLCAweGI0YmFjOTMwLCAweDFiMzYxZmQyLCAweDY4NGM5MWVlLAotCTB4MTEzNDdhZGYsIDB4MTdjZWM5ZTcsIDB4ZjNhNjllNjUsIDB4Nzk2OTUzYzUsIDB4M2NkN2JkM2EsIDB4MWJmYmMyY2YsCi0JMHhlN2RiZjkzMiwgMHg5YmRjOGY0ZCwgMHg2MGM3ZmI1OCwgMHgzNTdhY2EzMSwgMHg5ZmJkMTI3ZSwgMHg1ZjM2YmQ3MSwKLQkweGE1MTlmZTYxLCAweGFiNWViMWZkLCAweGE0N2Y3ODUzLCAweDQ5ZTQwNTE3LCAweDExMmZkN2NiLCAweDVhOTQ1NGExLAotCTB4YjNiZmM0M2UsIDB4ZTVhMGU5OWEsIDB4ZDU0MjVhNDMsIDB4ZmJiYjhmYmMsIDB4YThlMzViNTYsIDB4MmRhOWY4NGIsCi0JMHg0OGFlNzFiNSwgMHg0YjNjMjQ5ZSwgMHgyYTk5YmZkZSwgMHhhYzZjYjI1ZiwgMHgzZTViYzc4NCwgMHhiMzhmMjM3NiwKLQkweGU2NWI5ZTZkLCAweGQ5ZWRiNjRmLCAweGVlNmZmZjAwLCAweDFlMDU2MTQxLCAweDRlMzk1NmMyLCAweDU1M2U5ZTM0LAotCTB4ZGNiOTI0ZTUsIDB4NmUzN2I3YTgsIDB4NmY2ZjU4NTUsIDB4Zjc5NmFkODQsIDB4NmI2ZjU4N2MsIDB4MTU3ZWQ1ZjAsCi0JMHhhNmYwOTVhZSwgMHg1YjBlMTJlZCwgMHgyNDk1M2IxZCwgMHgwNWM0NWZiOSwgMHhkODk0NGZiMCwgMHg4N2IxY2UwZiwKLQkweGY2MDIzOGQ0LCAweDQwZmIxMjgxLCAweDYwMTVmNDNkLCAweGQwYzAyYmU4LCAweGFmYTE4MDU3LCAweGExNWY0MjUwLAotCTB4NjVmMGE1N2UsIDB4YmM4ODhlMjMsIDB4NGU0ZThkNGUsIDB4ZDFhOWQ3OTAsIDB4ZWJjODFmZjksIDB4NzVlNDYxZTgsCi0JMHhkNzkxZmRmNCwgMHhhZjIzYjdkMSwgMHg1ZTQ3NmZhMywgMHhhZjIzMGY0NywgMHhiYzhmZWZhMywgMHg1ZTQ2MWU4ZSwKLQkweDc5MWZkZjQ3LCAweGJjOGMzZDFkLCAweGYyM2ZiZThlLCAweGU0NzZmYTNhLCAweGM4ZWRmNDc1LCAweGU0NjFlOGViLAotCTB4OTFmZGY0NzUsIDB4ZGZiN2QxZDcsIDB4ZjIxOGEzZGYsIDB4OWE5M2Y3M2UsIDB4ZWViNWRmMDYsIDB4NzFmY2M2OWQsCi0JMHgzMTNiZWRkYSwgMHg0MWZiZTg4ZiwgMHg2NmJmOWZmYywgMHg4ZjlkMDFjZCwgMHg2ZWRmMDFhZiwgMHg0OGYzOGFlYywKLQkweDQ5ZDdmNzNhLCAweGE0ODQ5YmJhLCAweGQzMjM0OGYzLCAweGMyNGQ4Yjc5LCAweGU3NzQ5ZWI1LCAweGYyMGZmZTI0LAotCTB4OTk1NjM1MjksIDB4N2M4OTQxNGYsIDB4NTNlNDRhMGEsIDB4NTI5ZjIyNTAsIDB4MjlmMzJmOTMsIDB4NDE0ZjkxMjgsCi0JMHgyODI5ZjIzZCwgMHg4OTQxNGY5MSwgMHhlNDRhMGE3YywgMHg5ZjIyNTA1MywgMHgxNGY5MTI4MiwgMHgwYTdjODc3YywKLQkweDUwNTNlNDRhLCAweDRhMGE3YzhmLCAweDdmNTA1M2U0LCAweGJjODFkNjhlLCAweGY4MmViNjhhLCAweGYzODY3OWNiLAotCTB4ZTFhMWYxMWMsIDB4YzAzNGU3M2MsIDB4ZmRmNTk3ZjAsIDB4ZGJlYjJmZTEsIDB4ZGJlYjJmZTEsIDB4NjFlYjJmZTEsCi0JMHhmZWZhY2JmOCwgMHhiMGY1OTdmMCwgMHhlNThiOWU2OSwgMHhmZWIzN2UwYywgMHg3YWNkZjgzYiwgMHg3MDNmYThiOCwKLQkweDNiYTBiMTFhLCAweDM1ZWVmZGY2LCAweGU1MDRlMTk0LCAweGRmNDljNTU5LCAweDE1YjdmZjk3LCAweDYzODU4M2M4LAotCTB4MGY2NGVjOTUsIDB4MGZhZGJmZDksIDB4ZDgyMWE4YWQsIDB4MmJhN2RlYWYsIDB4ZDAyNjIzMTYsIDB4NDRkOGYzOWIsCi0JMHgwNDQ4N2YzNywgMHhlOGEwOGY3MSwgMHhkNzZlNGNmMywgMHg0N2ZjYWFmMiwgMHgyMjM5MmY3NCwgMHg1MzVmMGZkOCwKLQkweDdkYTVkNzI0LCAweDMzNGUxMWVmLCAweDA0N2ZhZDRhLCAweGY0NWZiYzllLCAweGQ2M2Y1YWZjLCAweDkwNzViYTk3LAotCTB4ZmRjMTJjOWQsIDB4OGUyZDkyODYsIDB4NGZjNDVkZDIsIDB4ZmIwYTRjMDcsIDB4OWZjODA3YTEsIDB4NWU4OTNhNWEsCi0JMHhhM2ZkNTBhYSwgMHgyN2MzYTYwMywgMHhhMjJmNzBlMywgMHhhN2VjZjE0NSwgMHg4OGIxYWZhMSwgMHhlMDUyZDYzMywKLQkweGZlMTRiYmE5LCAweGIyNzk3NjQyLCAweGRmNzVhZmVhLCAweGRhM2Y3YjgwLCAweDFkYjhiNWJhLCAweGYyMmYwOWU5LAotCTB4ODQ0N2YzZWYsIDB4YjllNjhkYWQsIDB4NmI2MTUzZTksIDB4OTM2NmRmODcsIDB4YzNiZTAyZmUsIDB4ODBiYWVkYjksCi0JMHhlM2FmZGRlMiwgMHg2OTcyODJlZiwgMHgwZDgxZmNmZiwgMHhmZDUxYjQzNywgMHg2ZmJhODc3NSwgMHgxNzFmODc2OCwKLQkweGNlZmJiZjI3LCAweGM3OGM4OTczLCAweGZiMjliNzNiLCAweGY5OWZiNGNkLCAweDkwNzc4NDg3LCAweGNiOTQ5NWZhLAotCTB4ODc3NWRmZjMsIDB4OWUzNmI2OWMsIDB4ZDc2YjY5ZDcsIDB4OTdkODQzZGYsIDB4NWNlMTczNmQsIDB4ODgzNWMyMjgsCi0JMHg4YTc5ODlmZiwgMHhmMDQ0NDE3OCwgMHgwZDdiZmI0NiwgMHg0NDg2YmJmYiwgMHg3NWQ3ZjEwNSwgMHgzZmZiNjMwNywKLQkweGQ3NTFmMWQyLCAweDdlMDFiMjUwLCAweGZmNjY1OGUwLCAweDU5ZmUzYTQ3LCAweDcyNDQxZjg3LCAweGVjMjA2ZTQxLAotCTB4ZjI0YWE3NTYsIDB4YzNiZDZhZjUsIDB4NzljNTFiZTQsIDB4NjIzZWNiYTIsIDB4OWE2ZWZlMDMsIDB4N2I4YjVjOTcsCi0JMHhmMGI4ZTI2YywgMHhlNmVmODNlNCwgMHg0ZTlmNmNiNSwgMHhiZDA3ZjJlYiwgMHhiYTAzZGMxZSwgMHhkM2VlZDNlOSwKLQkweDYzZWYzZjBjLCAweDgyYTdkOTk4LCAweDcwZjZjN2Q3LCAweGM1MDk0MDRlLCAweDBjZWUyYTEzLCAweDA5NTI5YTBjLAotCTB4ZDViMDIzYmUsIDB4ODdmZTg2OWEsIDB4MDBlZTA3ODQsIDB4YTBiMTI4OTksIDB4NDJhZmIyMzQsIDB4NTU4YTZjMzEsCi0JMHhkNGUyMmZjMCwgMHg5MWZmMWQzNCwgMHg3ZTBlNThlNiwgMHgwNTU4ZjEyOSwgMHhjNTg5NjNmOCwgMHg4OWJlODU2OSwKLQkweGVmYTIzN2Y2LCAweDcxZmY5MDdmLCAweDY4NjdiY2FmLCAweDZiMWVjMGI1LCAweDUzOGI1MWZlLCAweDM2ZWFmNWFlLAotCTB4MmQxZmZiMmIsIDB4ZDBmZmM5NDcsIDB4ZmNkNTJiZGQsIDB4MDg1ZWVkMGQsIDB4MTA5ZTFkZjksIDB4ZGI5MWY4ZWMsCi0JMHhiOWQ0MmUzOSwgMHg3ZmJlMWRlMSwgMHg3ODNiODlmMSwgMHhmYWY4OTkyMCwgMHhmN2MzOWM5MywgMHhiN2UxYjk1NCwKLQkweGM5NGZhYzI4LCAweDI3MmNlODZmLCAweDNmNmNiNjNjLCAweDU1ZjM4ODlkLCAweGZiMGFmMDM4LCAweDNkYjc1NzFiLAotCTB4MDhlMzI4OWUsIDB4YTZkMTFmMzIsIDB4Y2Y4YjQ5ZTIsIDB4NjhmNGFiYjQsIDB4N2QwMWVmNTMsIDB4M2JjYjdhNDgsCi0JMHgwODZlZWQ4NywgMHhiZDY4MzZmNywgMHhmYjQ0NTdlYywgMHhiOTFmOWE4NywgMHgzODRmMWI0ZSwgMHhhNDVjNDVkZiwKLQkweDhiYjdmNjgzLCAweDViYmJkNWEwLCAweDg5ODg2NDc2LCAweGQ1M2FlM2ZlLCAweGNkYjM1Y2FmLCAweDNhN2VmN2NhLAotCTB4YzJlZDkwNDQsIDB4M2Y1NDYwOWEsIDB4YmFjZmJlZjUsIDB4OWRmYWM2ODMsIDB4YTdmZTUxZTUsIDB4ZWVkMjJlN2EsCi0JMHg3ZGJjYjZlNSwgMHg3ZmY2NmVlYSwgMHg2ZjljYWRiYSwgMHhmZDJhZGE2YiwgMHgwNDU4NzEyMSwgMHg4YmMwMTVmMywKLQkweDM3MDRiMTRjLCAweDk0N2FmNTFkLCAweDI3ZTdmODQ5LCAweDFmNTQ1ZmFhLCAweDJlYmM2NThlLCAweDdkNjc4YjE5LAotCTB4OGIyYzc0YjIsIDB4MzJjNjdiZTEsIDB4NGM3N2JjYjksIDB4OGE1YzhiZGUsIDB4M2JkMTBjNTgsIDB4OTEwNGFiNWMsCi0JMHhlYTk5ZmI0ZiwgMHg3YjhkZGQwZiwgMHgyMDYzYTA5MiwgMHg5NDc5Zjk5ZCwgMHgxNDUzMTlmOCwgMHhhZTZhN2FhYiwKLQkweDc3MDUzOTU3LCAweGRmZWFkZWIzLCAweGY1OTg3YjhlLCAweGNiZmQ4MjgzLCAweGQxMzdlMDNiLCAweGEzZjAwZGY4LAotCTB4ZGMxZTQxYTYsIDB4YjczZjdjYjUsIDB4NmVmOTExNGUsIDB4OTUwNmMzYzgsIDB4MDQxZTQ5ZmYsIDB4ZWIyZjBmZWIsCi0JMHg0MTI1OWFiNSwgMHhmMDY5YWZkYywgMHhlZTgxMzYxZiwgMHgwM2Y4MWM5YSwgMHhlZjgwMmRlNywgMHg1NzM2MjgwOCwKLQkweGY4Mjc5ZjIxLCAweDc5ZjFhY2JjLCAweGM3MzQzY2I0LCAweDg3MjVmMWFiLCAweGZiOGQxZjhjLCAweDlkMmM1OGE3LAotCTB4ZDdlMDQ1YmIsIDB4ZGVkNGJjMmIsIDB4MGNlMDE4OGMsIDB4ZjcwODExOTUsIDB4ZmRiMjg1MDksIDB4YWY1ZmQxZTQsCi0JMHhkM2MzODZkOCwgMHgzNDNmOGM5NywgMHhhZjRjNGM5OSwgMHhmNmY3ZjIxMSwgMHg3MGM1NjA0MywgMHg2NWU0M2E2ZCwKLQkweGNiYmE1MmI3LCAweDUzY2Y1OTE1LCAweDU3MmYwYjk1LCAweDJiYzVjZWU4LCAweGY5MjJmOTU1LCAweDYzZjljNzRiLAotCTB4ZTlmOTIzZTMsIDB4NDBmZjEyNjIsIDB4Y2YwOTViMmIsIDB4YTRlNmIzOTAsIDB4YTIxNGQ3ZjAsIDB4YzJlNTI3Y2MsCi0JMHhkYjBjNDM1YiwgMHhlMjdkZDQyOCwgMHg3M2FkMDQyMiwgMHg3YzY3MGE4NSwgMHg5ZGZkZWUyZiwgMHg4NjFmOGM4NSwKLQkweDVlNWY5NjJmLCAweGJmZmMyODExLCAweDhhNGQ4N2QwLCAweGFiNTdlZjg1LCAweGZjOTg3MWY4LCAweGVmYzM5NTFmLAotCTB4ODMxNzg3YjcsIDB4MjM4NWYxYWUsIDB4MWEyZGQwMzYsIDB4MWVlZGY3M2YsIDB4ZjA4NzMzZGEsIDB4ZTkyMTUxOTAsCi0JMHhiN2ViNjRkNywgMHgwNDUxNzlmMiwgMHhiNTVmODhhZCwgMHgyMmZiNGExNiwgMHhhZmVjYWUyYywgMHhjNWM0M2U3MiwKLQkweGRmNmQzZTcxLCAweDg5ZjdhYTFmLCAweGFjZTFmMWEzLCAweDdlMDI3NjkwLCAweGY0OGU2YmIyLCAweDRmYzI1MTkzLAotCTB4ZjgxYzdkYzYsIDB4MjdlMTgwYzksIDB4OGM5Zjg0YTMsIDB4ODBjOWY4N2EsIDB4ODYwMzI3ZTEsIDB4N2UxODBjOWYsCi0JMHhjOWY4NGEzMiwgMHhlNGMyN2ZhOCwgMHhkMTMwZmYzZCwgMHhmMDUzNjlmMywgMHhhN2M0YWJmMCwgMHg0ZGZhYTU5ZiwKLQkweGE3ZmViNDE1LCAweGQ3OWI4ZjcxLCAweDExZmRlN2VmLCAweDE5NWViMGRmLCAweDVmYzQ1M2Q3LCAweDFmMDg4YWY2LAotCTB4NzBiOWVjYWQsIDB4ZTExMzk0ZDQsIDB4YmY5ZGI2YTcsIDB4ZTIwNWVhN2YsIDB4MTdlNDk1OGYsIDB4M2JmZDllNDIsCi0JMHhmMTRjNTA5NSwgMHhkY2Y2N2NkNCwgMHg5Nzk2MzhkYSwgMHg2MzZlYmVlNywgMHgxYjY0ZGJmZCwgMHg0Nzc3NmQzZSwKLQkweGNmN2VmOWYwLCAweDdkNGFiNGZmLCAweGQxNzdjYTE5LCAweDYzYmEyYmI4LCAweDRmZmZkMDNkLCAweGIxZDJmYTU1LAotCTB4MGY0MmY4ZGUsIDB4YWQzMmU1ZDMsIDB4MjUxZGVmODksIDB4YmY1MGIzZmEsIDB4OWViZjBjNTIsIDB4YmY5YWZkNDEsCi0JMHhkYTM2NzZmMSwgMHhiNmVlMzgxZiwgMHgxY2I3MGY0MSwgMHhlMTkxZDkyYiwgMHgxNzdlZjdjMiwgMHhlMWM1YjVmOCwKLQkweDU4Y2ZjMWI0LCAweGVkOTkyZGJmLCAweDhjYmE3MzZlLCAweDczYzcxMmRiLCAweDQ3YTM0YmRlLCAweGI3OGM4NTU1LAotCTB4YjgyOTUyN2QsIDB4OTc5ZWEyYmMsIDB4MjVkNjQxMDgsIDB4NmU5MjdlODYsIDB4YzVhNmYyZDEsIDB4NThlM2EzMTEsCi0JMHhmM2NhNzg5MSwgMHgwNzEwNzMzYiwgMHgzZTllMTU0OSwgMHgyMTdjNDRkNywgMHg4ZDJiNjFjZSwgMHhlM2EyNTFjNCwKLQkweDZhZjJlMzFkLCAweDlkZjg4NjEzLCAweDUwYTlhZTU2LCAweGRiY2VmNzBjLCAweDg1YWJjZmM3LCAweGQ3ZTFkMzhiLAotCTB4MTEzOGE2M2YsIDB4Yjg3MzZlNmYsIDB4YjgyNmFkZWUsIDB4MzcxNThjZWQsIDB4OGE3ZDQ1MzIsIDB4ZjA0OTk2Y2IsCi0JMHg3MzhhMjNjOCwgMHhiOWJkZTgzZiwgMHgxMzU2ZjU4NCwgMHhmNzhhNTI2OCwgMHhiNzJjZDUwYiwgMHhjYjJhNDE2ZCwKLQkweGFmZWY5NmE2LCAweGQ2NmE3NjNlLCAweDkwYWZiMWY3LCAweGI2NzU4NmQ3LCAweDE0YjZiZDM5LCAweGRhZDNkZjlkLAotCTB4ZjdmNTc4YWYsIDB4YjFiODM1MjAsIDB4OWIwZGM2NDIsIDB4ZmMwMTE4ZTgsIDB4NmRkOWI3ZGQsIDB4MjUzODg5NWIsCi0JMHhmZmI4M2ZiOSwgMHgxM2U1NDZiNywgMHhjN2VhM2JlZCwgMHg3M2VhMWZmNywgMHhhYmUwZWJjNCwgMHhmNDE3ZGExMSwKLQkweGQ1MmJlNjE2LCAweGUzMTJiZjhkLCAweGZlYTdlNmViLCAweDU2YjViN2VjLCAweDJkNzhmMDI0LCAweDFiYjdkYTRlLAotCTB4NDlkNzkzYTUsIDB4OGQzYzYwNzgsIDB4NWNmMWExZWMsIDB4YmRlMzBmM2MsIDB4N2FiNDE0MzUsIDB4YmJkYzFlYjAsCi0JMHgzMzg1NzgyMCwgMHgyYjNjYzU2OCwgMHg3YzcwOTViNywgMHhjZTViYmZkZiwgMHg2Yzk5ZGZlMywgMHg2NzVmODIyYiwKLQkweGU5NjZkYTcxLCAweDNiZTIzZGZkLCAweDBlMTM2NWYwLCAweDVlYmNhOWY3LCAweDA4ZGI4N2Y2LCAweDQzZjAyOTRmLAotCTB4NzVmZmM4NTMsIDB4OGI1N2M0NGMsIDB4ZmViNmZlYmEsIDB4ZDhmZmEzNjQsIDB4ZjQxNTk4ZmYsIDB4NGFlZDU0NjksCi0JMHg1NDllMWQzNCwgMHhiNmU1NzhmOSwgMHhkNzc4NmM1YiwgMHhmMmYxNjZkMCwgMHg4YWJmMDdiYiwgMHgxMGRmN2ZlZiwKLQkweDkwZjkwYmJiLCAweGFkMjc4MWM2LCAweGFlMWY4MjZlLCAweDkzZjY3ZTkwLCAweGVhZGY5MjE1LCAweGI4Zjk0MjczLAotCTB4MjFiMjMxZTcsIDB4MzcyMWVmOTYsIDB4YmY3OWZiM2EsIDB4OWM3ZWY4ZTMsIDB4YzRmZjAzZjAsIDB4MTM3YzYzZTksCi0JMHg5ZjcwMDQ5ZiwgMHg0OGMwNmRhZiwgMHgxMjdhYzhkZiwgMHg4MWI2ZGM3OCwgMHg1NWJmOTYxNiwgMHhhOWNkYmYxNiwKLQkweDEzZGVjNzVmLCAweGE1ZTEwYWY5LCAweDgxNWVlNDkxLCAweGIzZmE3MWZkLCAweDFmMTczZmMxLCAweGY3OWIzN2JmLAotCTB4N2JlNGViNDksIDB4ZTJkNzFlNTQsIDB4MzdjYzc5OGMsIDB4ZmYxYWQ3Y2MsIDB4Nzk0OTk3MzQsIDB4YTk3YmU2ZDYsCi0JMHhiZGYzYzJjMiwgMHhiNGU1MjVmNCwgMHhkZjBiNzc2ZCwgMHgxMGNkNjk4MywgMHg2MmY5NDUxZSwgMHg1M2U0ZDUzOSwKLQkweDM1NDZkNzkzLCAweDdiYmFkOTJlLCAweGY0ZWJmMDg5LCAweGVlZWZkOTBkLCAweGNmYzEyNzk3LCAweDJiOWQ3NTY1LAotCTB4M2UxMjdhNTQsIDB4YjhiYTEzNWYsIDB4M2QyYWJiZGQsIDB4NzI4YzcyOWIsIDB4ZWUzMGYxOGYsIDB4OWJlZTU1MjksCi0JMHgzN2YyODYxNiwgMHg2YmZhNDYxNCwgMHhjOGE1MzZmMywgMHhlMGZmYzBlZiwgMHhiZDJhNTNiMywgMHhmNzIzN2ZkMSwKLQkweGVhYTRmMTU3LCAweGJkNzFkNjhkLCAweDFhN2I2ODcxLCAweDg1NjFjNmY0LCAweGY3MWI1NGYzLCAweGUzNmViZjQ4LAotCTB4ZTcxYzA5OGIsIDB4YWY4ZDhmZmEsIDB4ZWExZWY4ZmUsIDB4ODMxM2M5ZjcsIDB4MTNmN2ZhY2QsIDB4MjdhOTIxNmQsCi0JMHg4MjlmYzlkYSwgMHhkYWE1NThkZSwgMHhmZjYyODZmZCwgMHg3Mjc0MmI0ZiwgMHgxN2FkZjZkYywgMHhhYzVjODFhZiwKLQkweGY4YjkyYTE4LCAweDBlZmJjMTRiLCAweGVhZmNkZjQxLCAweDczYmUxZmM1LCAweDVmNjIyYjgzLCAweGRjYWM3ZGI1LAotCTB4MTZkNjZmZjksIDB4NzI2ZjFlODcsIDB4NTYwYWJiOWYsIDB4NDkzY2VmMGEsIDB4NWFjMzljMmYsIDB4MWRmMjI5YjcsCi0JMHhmZDhkOGY1OSwgMHhkMWRlOGQ0ZiwgMHhmMjQyZDA3YywgMHhmMDg4ZWFkYiwgMHhhOWZmNDY4MSwgMHg3OGRiMjZmYywKLQkweDVmZDI0ZTNlLCAweDA3YzZiN2EzLCAweDNhMzViZDFhLCAweDlkMjk3YmYxLCAweGZiYWRhZmZmLCAweDJiNWU5NTMzLAotCTB4NTMxZGZlNTQsIDB4ODc0NTZlZTUsIDB4ZTU4YWI2ZGIsIDB4MDU2YjZkZGQsIDB4YjFmYTZiZGYsIDB4NGUzZjU4Y2QsCi0JMHg3ZWI4ZTcyNywgMHhjMGI5MDFkZiwgMHg2OWQwMjJiYiwgMHhjNjU1Yjc3NCwgMHhhMDRkMGYyMywgMHhiZWVjMzY1MywKLQkweDZhZDU4ZWI2LCAweDhkNWRiMWRjLCAweGZjZDJhZTFmLCAweDRjN2Y2MmUwLCAweGFiNGU4ZWE1LCAweDZhNzQ5MzlmLAotCTB4NWZlZGU5N2QsIDB4ZmJjNWMwZmYsIDB4NGY2YzdhOTMsIDB4MmI4YmZiMGMsIDB4YmQzMzBlODcsIDB4NjYzZTc3MWEsCi0JMHhmNGJmNTM3NSwgMHg1ZjQxYjc0YSwgMHgzODk3NzZiNywgMHhiMTVmMzcxMSwgMHhmOTBhZDA3MywgMHg0ZDc0YWY0ZiwKLQkweGVhNGRlZmNhLCAweGFmMGQ2MGJkLCAweGNlOGEzZmIwLCAweGExZmQ2OWVlLCAweDNjZDMwZWY3LCAweDI2YzQzNzliLAotCTB4MzY4ZDFlZTIsIDB4ZjI1MmI3OGYsIDB4NzI3NzZiNzUsIDB4ZWQ2YmU2MGEsIDB4MzgxZmY5NmUsIDB4M2Y3YTY4Y2YsCi0JMHhjNDJlZWU1YSwgMHg0OTU4Nzk0YSwgMHgyZjJlNDI5ZiwgMHhkZWM5ZTJkYywgMHgzZjMxMzg1OCwgMHg5NTk1OTVhNiwKLQkweDEwY2Y2ZTkyLCAweDI1NmY3MTdhLCAweGJiZTg3ZTJiLCAweDAzZDY0M2MwLCAweDkzZTQxZTcxLCAweDQxYzJmMmYzLAotCTB4YzYzZTBiY2MsIDB4MTdhNDZkYmEsIDB4YWYyNWZmNzEsIDB4YWM3YmZjMzMsIDB4YmU3NDVjODMsIDB4MjEzMjgyZWYsCi0JMHhkMjNiZTY0NSwgMHg5MjZmZGUwOCwgMHhjYzcyYjNlZiwgMHg1MmFmYmNiMiwgMHgwZjZhM2JkYSwgMHg4NmE0NWRhMSwKLQkweDY4ZmZiMWNiLCAweDVmOTUzNWJkLCAweDM2YTdmMWExLCAweDlhOWViNDRlLCAweDU3Nzc3ZjZhLCAweGEyZmE3OTRhLAotCTB4YWI3MDVkZmQsIDB4NGYwMjkzNzEsIDB4NmRlNjlkYjYsIDB4MDc4ZTc0N2UsIDB4ZGEyZmE0NzEsIDB4ZTY0ZTJkYTcsCi0JMHg0YmY3YzY5NywgMHgzMjk1NWFjYywgMHhlNGYzN2VjOSwgMHhmZGVhNjgzOSwgMHg0ZGE2ZDQwZSwgMHg3OTA5ZGZiMiwKLQkweGI0NGU1NTVmLCAweDc5ZTNlZmJiLCAweDI3OTk3ZTkyLCAweGRkOTBhMGI5LCAweDZjMmVlZmEyLCAweDY1ZmJlNTg4LAotCTB4MzhiNGJlZGEsIDB4NWVmYWRmZmQsIDB4MTRjYWMxZTEsIDB4NGUxNGZlMzUsIDB4MTRkOTNmODAsIDB4NDg3ZmNhYTcsCi0JMHhhMjVmYThjMiwgMHhmZGVjZDdhYiwgMHgyMTM4NjczOSwgMHgzZjlmYTc0NSwgMHhhMWVkNTZlYSwgMHgzYzgxZWYwOCwKLQkweDgxNWM5ZThiLCAweGZlYjljNzc4LCAweDQyYTYwOTBiLCAweDlmNWNhN2YwLCAweGFiNjZkZGY2LCAweGY0MGY1Y2U3LAotCTB4YmUxOGY2ZGMsIDB4ZDM3ZTRlZWYsIDB4ZGE5M2M0MGUsIDB4YTcxY2M5MDMsIDB4ZWNhN2FmYjksIDB4ZTcxYTVlZTIsCi0JMHhmYzU5NmRiZSwgMHhmM2YzNTBkZSwgMHgyZmZhYTk1NywgMHg4ZWNiNzM3ZSwgMHhlYmRmZjQ0YSwgMHg2ZjhmYzI3NiwKLQkweDg4NmNmODc3LCAweDJjMGZjNWMzLCAweGRmYjBlNWIxLCAweDVhMDFjZjJiLCAweDIyYjM2YWRlLCAweDBjOWVmYzdjLAotCTB4NjU3MjExZmEsIDB4N2IwNzkxM2EsIDB4ZjRhZjdhYjMsIDB4NjI0ZGViZmYsIDB4YjM5YmYyMjcsIDB4MzM4YjdjZmIsCi0JMHg1MjllMWZhMSwgMHhjNTI3ZjAzYywgMHhkYWEzZDIzZSwgMHhjNzc0OGM3OSwgMHg2ZmJlYzU4NywgMHhlZjY4YmY0MSwKLQkweGM2YzJlNmVmLCAweDIxOWZiMTlhLCAweDgyOWRjZTJmLCAweDA3ZWMwYmZjLCAweGE2NWUwMWViLCAweDZlNzFmY2E5LAotCTB4YWI4MjdjZTAsIDB4MmZjZjgyMzAsIDB4ZTM0ODFlZmIsIDB4ZDY3ZjJkMGIsIDB4MTk0ZmY4OGUsIDB4MGQyOWEzZjgsCi0JMHhlNmE2ZDFmYywgMHgyYzBjNzZjOSwgMHg3MDdkYjg2MiwgMHhlOWZiYmYxOSwgMHg0NzNhNjc0MywgMHhmYjU2M2RiNiwKLQkweGVmMDhhMDQ0LCAweGRhM2UyNTc4LCAweDA5ZGQxNmJhLCAweDdmNjNhOGJmLCAweDM1Y2UzMjRjLCAweGI2NDBkNmQ5LAotCTB4MWI2ZDBmZGUsIDB4MDFkZjk4N2MsIDB4ZTU4YzFhNWQsIDB4Y2UzNTQwNzcsIDB4NjdiODM1MjUsIDB4N2M5ZjZhYjMsCi0JMHgzYmY1YTc2NywgMHhiNTk3ZWFhMSwgMHhlZjBjOGI1ZCwgMHg0YzY5ZGE3OSwgMHhkOWZmOGQyNywgMHg1ZmRmM2M1MCwKLQkweDA0ZTlkZWQzLCAweDk1ZTNmZWVjLCAweDRlYmRmMmU1LCAweGQzYmU0YmI1LCAweGFlZmVlNGM5LCAweDVhZjRlMzQ5LAotCTB4YmU1N2IxNzksIDB4M2JiZGQwZmIsIDB4YmU5MWIzYmEsIDB4MjU3YWVjZWYsIDB4N2JhY2UzMTEsIDB4NGUxNTY3ZmMsCi0JMHhjZWI3YzcxMywgMHg3N2YxZmM2MCwgMHhiYmU1N2I0NywgMHgyN2M3ZjZhMywgMHhiZTAzZmY3ZiwgMHgxYzc2N2YwNiwKLQkweGM2NzkwYzUzLCAweGVjNDk4MmZiLCAweGMyNDNmYTg3LCAweGRmYjZmYzg2LCAweGJkY2ZkODI5LCAweGIwM2QxNjY0LAotCTB4YTI1ZjlhZWIsIDB4YzU1MmZmZDUsIDB4ZmVhNGE1YzMsIDB4Y2Q3ZmQwNmMsIDB4NjFiMzI3ODEsIDB4MjA5MzdlMzcsCi0JMHhmNzAzYTZlMSwgMHhjODdhMDhmZSwgMHhmNDhjN2NmZiwgMHhmZDgyMmRiZiwgMHhmNDgwZDZkYiwgMHg2NGY3YjU5NywKLQkweDM4ZWM3ODQyLCAweDE5NTQ3Zjg3LCAweDQ2YjlmMmNmLCAweGFkYTQ5NzdkLCAweGFlMGJmYzhiLCAweGQ0NDU4ZGZmLAotCTB4NmY3ODFkNjEsIDB4ZGY3ZTdlMDQsIDB4M2QwNzZhMTIsIDB4MTQ3ZjI3ZGYsIDB4MmExMzhmNzksIDB4NmZkZmJkZmYsCi0JMHg4N2Y3Y2M1ZSwgMHg1N2UwMTA0OCwgMHg0YWZmZGZiYywgMHg5YTg5ZjIwMiwgMHhmZTZiNTYxZiwgMHhiNGVmMTc5NSwKLQkweGVmOTUxZTM3LCAweDg3MGJlMzgxLCAweGQ0MjMxY2Y5LCAweGE3N2FjOTc4LCAweGRmOGRiN2U0LCAweDRhY2UyZWI3LAotCTB4NmI4YWJmNjUsIDB4ZGIyMTJkM2EsIDB4YWI1YWY0NjQsIDB4ZjBlMzRkZmEsIDB4MmU3Y2MzOTEsIDB4ZmQyNDNjZWIsCi0JMHhmM2ExY2U4MiwgMHg3ZTY4MTdlYywgMHg3MGJlZjY4NiwgMHhlY2YzYTFkZCwgMHhhZGRmNjgyNywgMHhkMmYxMjIzZiwKLQkweGI3ZDY0NDc1LCAweDc4YjQ5ODE0LCAweGMzYzk1NzhiLCAweDM4NjE1OTc5LCAweGI0ZDJjMmJmLCAweDliOWIwMGQ1LAotCTB4M2E1MDVhYjYsIDB4MDhjODc4ZDUsIDB4MGFiYmU1ZmIsIDB4OTllN2NhN2UsIDB4YjhlYTZkYWUsIDB4ZjM3NTViMDQsCi0JMHg5NzRkNTZjNSwgMHgzZWE4ZGFlZiwgMHhhNWVmODFkNywgMHhiYmRhZDczZCwgMHg1MGYzYzg4ZSwgMHgyNzZlMmJhOCwKLQkweGVmNWQ4M2RmLCAweGViZWNhMGIwLCAweGRmM2RiMDcyLCAweGMwMmE2ZGQ3LCAweDEyYWY3NTdkLCAweDcxZGNmZWM3LAotCTB4ZjRkNmZlZjUsIDB4MjJjNmVmNzUsIDB4NDYyOTkwNGUsIDB4N2NkYzk5NGUsIDB4MTU2NjZiNmYsIDB4MDIyZTliOGQsCi0JMHg3YjRiOGY3YywgMHg5ZmU1NzQ0ZiwgMHhmOGMzMmUzZiwgMHhhZmMyNjIwYiwgMHg1Yjk4MDIyMCwgMHg3OTA5YTMzNSwKLQkweGUxNDkwNTkzLCAweGY3M2M2MDMyLCAweGQzODRiYTU4LCAweDBlMjBhZmMzLCAweDM3MjQwY2U1LCAweGE1ZjI4ZjIxLAotCTB4OGFmNTRhZTMsIDB4MzBlZWNlMjEsIDB4MGEwN2FmZjksIDB4ZGIyZWM2YmEsIDB4YzQ2MzVjNjQsIDB4NTc5OWI5MDYsCi0JMHhmYTY4ZjkyNSwgMHhlMjQ3M2E0OSwgMHg4M2I5ZjUxYywgMHhkM2U5ODFjZiwgMHg5YjlkZjliYSwgMHhhMTk3MGMyOCwKLQkweDgzN2M3MWRmLCAweDhjN2Y2MGZiLCAweDQyMGVmZjkzLCAweGY2ZjU5NzllLCAweDAyNzU1OGM2LCAweDNkZTk5Nzk3LAotCTB4YTQyNWFlYWEsIDB4OWYwMzYzZTYsIDB4ZjdmODgyOWIsIDB4YTEyYjhlMDQsIDB4YmNmZGViNmYsIDB4NGYyOTJhZWUsCi0JMHg5Nzk5MThiZSwgMHhjZWIxNGJiZCwgMHhlNGZhMjdmYSwgMHg4MzVmZGI5MCwgMHhjYzcyZmE3NSwgMHhiOGI5MjU0NSwKLQkweDdkZWYyYjE3LCAweGI3ZjM1MTVmLCAweDUwYmNiZjlhLCAweDdhOTY3NjlkLCAweGM4Y2RiM2NlLCAweGI0ZmU0MDcwLAotCTB4ZDc4YTg5ZmIsIDB4MWY1MmVmY2IsIDB4OGFkOTNjMmEsIDB4YzQ3MzdmNzUsIDB4MTYyMGVmY2UsIDB4NzNjOWM0OGUsCi0JMHhiNjNhOGNkNSwgMHhkOWIxN2RhZiwgMHgyZTI4M2ZlYywgMHhmZWEyNjg4YiwgMHgyMTRkMGIyNywgMHhhNmZmZGZkYywKLQkweDU5OWU3M2IwLCAweDZkZmNhM2Q4LCAweGMzZGYyYzUzLCAweGYxYmY4ZTU2LCAweDk2NGRlYzM5LCAweDkyYTdmN2Y5LAotCTB4ZmY1OTlmNjgsIDB4OGJhMDc4YTAsIDB4ZmUyZjQ3OWIsIDB4NmNhODRmZTMsIDB4MTg3ZmRiMWEsIDB4ZmU0OTExZmIsCi0JMHhiOWMzZjA2NiwgMHg3ZWYzYmFkMSwgMHg5ZDM3ZjU0MiwgMHhiNDhmNzY0MywgMHg4ZmJmNDI2MywgMHg5ZTdlMGZlMywKLQkweGFjOGE2Mjk4LCAweGM1YzhjYWVmLCAweDg3OWQ1ZjE3LCAweGU5ZjFjZWQyLCAweDMyY2RjNzg1LCAweDllYjUxNTllLAotCTB4YmUyZTE5MmIsIDB4OThmZDRlMGYsIDB4YTYxYzU3M2UsIDB4MGI4N2NlMjAsIDB4MGY3YTlmOGYsIDB4N2I4ODViZWIsCi0JMHhkODM3MzhjZSwgMHhmNmY1OTdhZCwgMHgyNTY2Yjg0ZSwgMHgxNTBlN2UyMywgMHg4OGFjOTdmYSwgMHhiNTQwNzgzZSwKLQkweGFlN2Q2OTRiLCAweDdiMDhkYzlmLCAweDIwNTlhNmY5LCAweDY1MTQ0MGVlLCAweDA3ZDY4ODNlLCAweDQyNWY4MzNmLAotCTB4YWEzN2M2ZmUsIDB4MDdlZDc5ZTQsIDB4NTQ2ZmJlMzksIDB4NjcwNjVjYjEsIDB4OWJlNzJlNDEsIDB4YjY5ZmJmMjcsCi0JMHhlMzUxNGFhZiwgMHhkMWFlOTI1OSwgMHg4YmE2OGI3NCwgMHhlNzcxNmY4NiwgMHg4NTI0ZTlmMCwgMHhhOGY0NWNmMSwKLQkweGM2MmVlZmM0LCAweGI3NjdlN2VmLCAweDE5OGE5ODkzLCAweGM2MzZmYmZmLCAweGY4NmZmZmYzLCAweGNhN2RlMmZkLAotCTB4ZmJlMzczZjcsIDB4ZDNlZDNhZmMsIDB4NzdlN2Q4NmQsIDB4OTNlZDFmZmUsIDB4YmNkZmMwZjUsIDB4M2VlMzYxY2YsCi0JMHhiMTQyZmFkMywgMHg4ZjM3YzA3MywgMHg4YWNmZDg5YiwgMHgwYTJhMzdiZSwgMHg2NmQxZWIwNCwgMHg1M2M3MWM3MywKLQkweGRkZjI3MWZkLCAweGQzY2ZlOTAxLCAweGRlOWE5ZmQwLCAweDJlMTc1ZDljLCAweDRlNzFiZjgyLCAweGFlYjE2Nzg4LAotCTB4ZWI4ODY5YjAsIDB4MzBlNTU2MmYsIDB4YzMxNGNjZGYsIDB4YzI3ZWZjOTksIDB4M2Y4NzJlMTIsIDB4MzViZmI2NmIsCi0JMHg0YmIyMjNmNywgMHgwZjA0OGYwMywgMHhmNGUzNGFiZiwgMHg1NmE3YzEyOSwgMHhlZGRkNWY0MSwgMHg5NWRjZmNlMCwKLQkweGE1NjAyOWEwLCAweDQ1OTIwNjc5LCAweDdmOWEzMWYxLCAweGNlNWNjZDYwLCAweGFhMTE1Y2IzLCAweGIxYjA2YTllLAotCTB4ZWNmNmEyOWUsIDB4Y2EzN2I0MWUsIDB4ZjlmZGVmZjYsIDB4YTNmODFlYzIsIDB4Zjc4MmY5MjMsIDB4YWUyMjUwMzMsCi0JMHhjMGYwNGJkOSwgMHhmZjZlMDI5MiwgMHhmNmU3YTZhMSwgMHg5N2VmYzgyNCwgMHg4MTkzZTYwOCwgMHhlZjdjMjkzNSwKLQkweDgzYTdlOWU0LCAweDBlOGVjMmQ3LCAweDExMzM3YTBjLCAweGY0NGNhYjU3LCAweDE5Yzc0MTg3LCAweDA3OWY2OTY2LAotCTB4ZTU0ZjU0ZGMsIDB4YjFhZjhhMTMsIDB4YzkxNGUzMWQsIDB4ZTMxYjg2ZjUsIDB4NDM0MDNhNWUsIDB4MmE5MWU2YzUsCi0JMHgzZDczZmFhNSwgMHhkNWNmOWMwOSwgMHg2MzhiNDdlNCwgMHg3ZjljMGVjZiwgMHhkZWQyNzgwYSwgMHhmMmEwN2YyMywKLQkweGM1Nzc4Njk5LCAweGE2NjdkZjJiLCAweGU4ZDY3OGFhLCAweDZhNWJmMWEwLCAweGE2Y2Y3YzljLCAweDM3N2M5MTZjLAotCTB4YmQ3OTFmN2UsIDB4MzNjOGZiZTAsIDB4Mjc3ODI5NjksIDB4NzFlMzFjZDcsIDB4NGFkZmRmMDEsIDB4ZmQ2MThmZjIsCi0JMHgzZTg4MWI3ZCwgMHhkMjQzZWM2NiwgMHg1YmRlMWNlMSwgMHg5OTdmZTI0ZSwgMHg3ZTVhNGRhYiwgMHgzNDYzZGY5ZiwKLQkweDlhNWZhOTBiLCAweDNkMTdmN2I1LCAweDIyMTdmN2M2LCAweGVmMTkzMzNjLCAweGU4OWY5ODkxLCAweDNlZGQ2N2ZiLAotCTB4NWZiZTM1NWIsIDB4ZDJmYjY1ZWUsIDB4ZDlkZWYyYWMsIDB4N2E0ZjM0ZmYsIDB4NWFhOTI4NmYsIDB4NjIzYjk1ZGEsCi0JMHg5ZGZjODlmZCwgMHhmMzQ1MGVmYSwgMHg3Yzk2Y2ZjMywgMHhlNGY2MGIzYywgMHhjYzZmODNkYywgMHhhMjU3Nzk0NCwKLQkweGY2OWFiOTJmLCAweDFmZTM0NGYzLCAweDdkYzRjMzE2LCAweGY3ZTYxOTkwLCAweGZlMzQxZjM0LCAweGU1YzcxNjcxLAotCTB4ZmNjMWJjYjcsIDB4NTdhZWI3ZmYsIDB4MDFmZmM3NWIsIDB4MDkzNGUxNzAsIDB4MDAwMDQ4ZDAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3YzA5LCAweGYzN2RmMGY1LCAweDY2NDk5OTk2LAorCTB4MGQ5MDkzMjYsIDB4OGEwMjcxMDgsIDB4MDgxMzgwYTgsIDB4YzNiNDQwNjksIDB4OGUyMmEyMjIsIDB4MjYwZGM1NWIsCisJMHgxMDM3ZDkwMiwgMHhmZGFmZjBmZCwgMHgyZDM2MTAzMiwgMHg0NjgyZDBkNiwgMHhhMGMwNzQ4YiwgMHgwZDA0ODJjMSwKKwkweDAwZTAyNDE4LCAweGQ1MmZmODJlLCAweDViN2JiZmQ4LCAweDE2YzM0YTBjLCAweDdlMWI4MDkyLCAweGNlN2ZlNWI1LAorCTB4ZWYyNWY3YjksIDB4NmQ4MDI2NGQsIDB4ZmRmYjVmYmYsIDB4ZTZmMTY5YmYsIDB4NWRkZjdiYmMsIDB4M2RjZjc2Y2UsCisJMHgxNGZiZGNmNywgMHhmODk2MjhkYiwgMHhlMGNlYzY2MywgMHgyY2FiZDIwZiwgMHhkZDUxYjE4YywgMHhhMGRiNmNlOSwKKwkweDc0ZmE4N2ExLCAweDY1NTlmZmU3LCAweDQyODdlYWQzLCAweDZlZDBhYjFlLCAweDljZmRkNjFlLCAweDdlNTQ4NWIxLAorCTB4Mzg2YjhjNDAsIDB4ZjRkMzFjYmIsIDB4OGYwZTFiMTAsIDB4OTYxNmM5NmQsIDB4NmU3ZGQ4Y2MsIDB4MDkwMWJmNDYsCisJMHg5MTI5NzRiZSwgMHg1NjE1Y2ViMSwgMHg3ODBjYmFmNywgMHgwODVjN2FhZSwgMHgyMGM4ZjdkZiwgMHhmN2MyNTA3NywKKwkweDE2NTJjOTNjLCAweGJhYTIzZmU0LCAweGJlY2MwMWQ3LCAweDZjYjMyMzNmLCAweGUwZGE2NmM2LCAweGMzZmMwZjZmLAorCTB4N2NiZWEwN2EsIDB4NjMxMDZjYWMsIDB4MDU5OTY5ZWEsIDB4NzdlYTdmYTAsIDB4MzQwM2E1MTIsIDB4MDBlZmMzMzYsCisJMHg2YzJkZjk3OCwgMHhmZWVlZDBkYywgMHhlY2ZkMTNiOSwgMHhlOGI3ODA3MywgMHg1YjdlODlmOSwgMHgwOTdmOTBjMCwKKwkweGVjZmZhODkzLCAweDVmYWE0YWZiLCAweGYyZjE2ZjZmLCAweDA3M2U2YzViLCAweDhkOTQxNjM2LCAweDdmOTYzYmNmLAorCTB4OGJlN2MyZTksIDB4N2FhMTZlOWIsIDB4ZDgyYzUzMTgsIDB4YzhiNzcyY2YsIDB4NjM1Y2ZjNGYsIDB4YmJmYWVlOTYsCisJMHg3NmEyMTRmMSwgMHgwNGQzZDg3NCwgMHgzMTg4ZmVlZCwgMHhiNmJmYjVlOSwgMHhkNTQzYzAzMiwgMHgwNTYzZDU1NiwKKwkweGFhZDg0Y2JjLCAweDcwMGM3Zjg2LCAweDg0Mjk1YWU5LCAweDlkOTc2NWIwLCAweGZiNGJjMDMxLCAweDlkODcwZTZhLAorCTB4OWZjYjBmOWEsIDB4YWExODA1YTgsIDB4ZmYzNmI3MjgsIDB4ZGJjNDBhZmMsIDB4YTNhZDk5NTYsIDB4Zjc4NGZjNjYsCisJMHgzYmM3MWI1NiwgMHg5ZTcwZTQ2YiwgMHg2YmE1ODM5ZCwgMHhmN2M3NGY3NywgMHhjY2FkMWEwYiwgMHg2ZTk1ZjUwZSwKKwkweDA1N2E5ZmNmLCAweDU0ZmJmOWMwLCAweGQ3NGE0NTg2LCAweDAxZmFkMDJmLCAweGVhOTIxODVjLCAweGNmMThlZTExLAorCTB4MzZlMGZkYTgsIDB4Y2ExZWI0MzksIDB4OTM5YWI4NzcsIDB4MWZmMTgzNmYsIDB4Y2YzMWI0YWIsIDB4Njc2ZmQwYzUsCisJMHg4MGFkZjI3MywgMHg5NmQwYTI4NywgMHhkMTVlZjg0OSwgMHgyYzhiYzk0NiwgMHhmYWViNjEzNCwgMHg3YmMyZmIzNywKKwkweGFmMjQxYmE1LCAweDVjNTJmMDE1LCAweDQzM2NjYjE3LCAweGMwY2UxZjc4LCAweDM5MDZkNmJmLCAweDlmYzg2M2ZjLAorCTB4MTk2NGUzMGIsIDB4NDllYWQ3NDgsIDB4NTdmNmM2NGMsIDB4Mzc2NzFlNjgsIDB4MGU1NThlOWUsIDB4Mzc2YjFlNjEsCisJMHhkYTAxYmE1YywgMHg1ZWNhZjc4MSwgMHhjNDM4YmM5NCwgMHgyMDBiMGIzMiwgMHhiNzZmYjY1ZiwgMHg4MWQ2N2I0ZiwKKwkweDBkYTA1YmUzLCAweDk2YjhlMjc2LCAweDNmMmU1ODZhLCAweGVlY2RiYjk0LCAweGQ1YWRmZWMxLCAweGQxN2U0MTI2LAorCTB4OWU1YWI1ZWEsIDB4NzVjNWZlODEsIDB4Y2Q4ZjMxOTcsIDB4NDE5YWFmZDAsIDB4ODhmZTQ2MjksIDB4OWIwMThmNGMsCisJMHhjNDUzZmIxOCwgMHhmOTFlYWY5OCwgMHgzNzY5MDk0NCwgMHg5ZmEyZTQxOSwgMHgyZWY0NGYxNCwgMHhmNTRkOTNhZSwKKwkweDRiMTkyNjAzLCAweDAwN2VmZjgyLCAweDgyYmUwMjdmLCAweDU3ODQ5ZDNiLCAweDA1NzM2ZTlkLCAweDNiNzRlOTFmLAorCTB4Mjk4N2U0MjUsIDB4ZmFjNmQ5OWQsIDB4NDhlN2Y0ZjUsIDB4NzU0ZmU4MDcsIDB4NWZkMjliYTUsIDB4YmE1MmE2NTQsCisJMHhmNDQzZDJiMiwgMHgwN2YxMDI3OSwgMHg2ZmQxNzJlOSwgMHg0ZTM2NThkNywgMHgzZTVkNzY4MSwgMHg0YjMxNDZlNiwKKwkweGE3MWJlMjk4LCAweGU3ZTA5YzAyLCAweDAxZGRmMjcwLCAweGYxOTY3M2M5LCAweDZhMTNlOWViLCAweDcyNjUxNzIwLAorCTB4NTNlNDliMTUsIDB4MDVhYzAyZmEsIDB4YjQyZjMwZTYsIDB4OWJlOGRjYWYsIDB4ZDdiMTlhMzgsIDB4MWM3MWUwNTksCisJMHg1MDI5MjJmZiwgMHhhYzY1NzQ4MCwgMHg3NDBmZDUzZSwgMHgxZTgxMjI1OSwgMHhjNTJkN2MwMSwgMHg5NjFlMDI0MSwKKwkweDA2N2UwNWY0LCAweDRmNzEzZDNhLCAweDI0YjJiM2Y2LCAweDcwODg5YWM2LCAweDY2OGY3M2RlLCAweDU0MzUzZDUwLAorCTB4MGNmNTBhOGYsIDB4YzkzZDc3M2EsIDB4ZjU0YzczZDMsIDB4ZDAyZjRmMjQsIDB4ZjU0YjU5ZWIsIDB4OWVhZmNmZDgsCisJMHgzMThmYTYyNywgMHg5MTdhNjdmNywgMHg1ODBiY2Y1ZSwgMHhmY2YzOTE2ZSwgMHg2MzNjOTVjNiwgMHgzMzNmYjlhYywKKwkweDk0OWVhODRhLCAweDAwMmNiZGJiLCAweDdmOWQ2NWU1LCAweDg2NGZiMzU4LCAweGY4YzZjNzdjLCAweDIzMzI4ZjExLAorCTB4ODZkZjhkMWYsIDB4YWE0MTM5ZjUsIDB4OTcxNDdjOGMsIDB4YTc5MjYzMTMsIDB4MDk4MjVmNzgsIDB4OWZiOTMzZWUsCisJMHg3ZjkyN2NhOSwgMHg2NTNmMjlhMCwgMHg3YzExYTVkYSwgMHg1ZWI3NzBlOSwgMHg1NGU4NjAyNiwgMHhmZWEzNWUzOCwKKwkweGQyMzRmZDZhLCAweGQ5ZmFlMzNiLCAweDlmYTA3ZTA4LCAweDAzY2VmNDgzLCAweGJiMTcwMjYzLCAweDU3ZDhkZmExLAorCTB4NDA3ZmY0MDYsIDB4OGVlZTVjMGIsIDB4MmUzMDM3YzIsIDB4ZWE2MmE1ODksIDB4OTkxYTYwYjEsIDB4NzhlNTU0YmYsCisJMHhmYmZmZGYxYiwgMHhmZGUxMDdjMSwgMHhlMGU3NGI3MiwgMHg0YmZmODA3OCwgMHg4ZTIxZjcxYSwgMHg0Y2E4OGZmYiwKKwkweDMyMzE2ZTgxLCAweDMxNzJjMGFiLCAweDZmZmE0NjU2LCAweGIzZjY0NjY5LCAweDk3NWUwMzQxLCAweDkxN2UwMDBkLAorCTB4YTY1ZGViYmEsIDB4MWY5MTUyMDYsIDB4NDExNTgyNWIsIDB4MzAyNWNmZTQsIDB4OGM3ZWIwNDEsIDB4ZTExNTY0MWQsCisJMHhmZWYwODVlMCwgMHhjNDU0YmM4MCwgMHhmZDAzNTViZiwgMHg4MzVmNmM2MSwgMHhmYjUyODdmNiwgMHg1YjdlZDhhZCwKKwkweDA3NWJlZDJmLCAweGI3ZGE5OGU2LCAweGRhOTgxN2E1LCAweDNlZDA2OWI3LCAweDcwNjc0N2M4LCAweGYwMWY2OGJlLAorCTB4OTNiMTg2MzcsIDB4NmZiNTNlNmMsIDB4ZjZhMDJmNGQsIDB4YzBhYzZhOTcsIDB4NTc0YzdlZDQsIDB4YmI2MGRmZmIsCisJMHg0OWZiNjNkZiwgMHg3MDNmYzY1MSwgMHhlOWZjNzk4YywgMHg2YmYxZTY0NSwgMHg0MTZjZmM3YywgMHg0MzFmYjQ1MCwKKwkweDIwYTQ5N2UzLCAweDExN2E3ZjFmLCAweGQ3OTViZjFmLCAweGFiYmVkNWRiLCAweDA0OWFmZjBiLCAweDVlYTQzYWVkLAorCTB4YWM2ODNmYzYsIDB4OTQxN2ZjNzksIDB4ZTU2ZmM3OTgsIDB4MmMxN2JiZWQsIDB4YTgzYmVkMTMsIDB4MTk2OTc4ZmQsCisJMHgyNTA1ZmYxZiwgMHgwZDY2YmVkNCwgMHhiNDhmOTE3OCwgMHgyMTE1MzFmZSwgMHg0MGQzNGY5YywgMHgwNzQ4NTI4MCwKKwkweDkyMWQyOGZhLCAweDkzZTgxOGMwLCAweDg0ODFiMmRmLCAweDM4NjIwNzg3LCAweDAzMTM3ZGRmLCAweGQ2ZThlNmZjLAorCTB4MTIwNDJjYTcsIDB4OTk3MGYzMDgsIDB4OGRlMmU5ZTAsIDB4M2YzZTM0ZTMsIDB4OWY1ZTY5MDcsIDB4YWIzYWJhMmQsCisJMHg4Y2Y5YTY1MSwgMHgyZTg2YjRhZCwgMHgzN2I2ZmU4MiwgMHg2Nzg0NDFjYSwgMHgyNDMyYmNhZCwgMHg3NjBhN2NkMywKKwkweGIwYTdiZTAyLCAweGYzZmYzZTMwLCAweDhjZWI2MWFhLCAweDY3NGM4YWUzLCAweDJkYWRhYjU3LCAweGQyZWFiOTA2LAorCTB4OTBkOWUzZWYsIDB4MDU1ZmU4MGEsIDB4NmVhOGMxMzIsIDB4MzRmNDE1YjgsIDB4MzlmYzNkMDMsIDB4MGY0YzYzZTgsCisJMHgzOTJlZGNhYiwgMHg1ZDljN2EwNCwgMHgwNTliOTQ2YywgMHhiMjA5MmVkYywgMHhmZjQwODdmNywgMHhkZmZhMjI3ZiwKKwkweGI3N2M3MGFhLCAweDg4NDI5M2NlLCAweGNjNTY2ZmZmLCAweGNkOWY1MGQxLCAweGE0MDU4ZWFlLCAweDVjYTNmNzc3LAorCTB4YmI3M2E5ZDAsIDB4MTRmNjQ0MzUsIDB4OWY4ODA3NGMsIDB4MTkxNDQ5ZGIsIDB4MWJhZWQzZmIsIDB4MzA1Yzk0ZGUsCisJMHgzMWY0ZDYzZiwgMHgwYjM3NzdiZCwgMHhmMjg1NGUyZCwgMHgwZWU3OTczMywgMHhlZmY4YzM3MCwgMHgyMTFkNjY5YSwKKwkweDdjYzRmY2UzLCAweGM3MjQyZGZkLCAweDg3MjViZmFjLCAweDJiMGQ2OWIxLCAweGRjMDBmZWQ0LCAweGJjZmQ0ZDNlLAorCTB4MWRmZWYwYzUsIDB4NTc3YzMzMDEsIDB4NTc2ZTE5ODEsIDB4ZWQwNWFhNDMsIDB4YWQ4OTQyOTksIDB4YTllZjdhODUsCisJMHhlZGViZTczMCwgMHgzODEyOTY0YywgMHgzZjdiNDU1ZCwgMHg4NWY0MWMwMSwgMHgzYTYwZjc0NywgMHg4OWJiMWYwMiwKKwkweGZjZGRkM2FlLCAweGU1M2ZiZDVkLCAweDRjMmNhOTBmLCAweDEyNGI3MWYzLCAweDUxMjdmYTIzLCAweDhmOWI4MGI5LAorCTB4ZDNiZmIyM2IsIDB4MGZjZjliNTUsIDB4YTBmZTk5ZmQsIDB4ZWM4Y2Y4NGMsIDB4NThhZWNiN2YsIDB4ZDllYzA1OWYsCisJMHg1NTJmOWE5NiwgMHhmMWM4YzE2NCwgMHhjNjdmZjY0NCwgMHhiOGYxYzhmYywgMHg3MjFmOWMzNSwgMHgzOWNmOTE4MywKKwkweDUzZjI0NDlmLCAweDVmYjhlMzc5LCAweDUzZjAzMjFlLCAweGJmYjVmZDY5LCAweGFmNzg2NDNjLCAweDEzMjZlZWI4LAorCTB4YzNiYTE4NWMsIDB4MjZiZjNlNTQsIDB4YmIzZjk0ZDcsIDB4M2Y5NGQwYmEsIDB4MTMxY2Q5NzMsIDB4ZDA3YzFiOWMsCisJMHhmY2M2N2U1NCwgMHg3YmZjYTYwNSwgMHhlNTMxMWUyYSwgMHhjMmIwNTVkZiwgMHg3ODExZGYwNCwgMHhmNmZlNTRjYSwKKwkweGY5NGQ2YjY5LCAweGRjOTc1ZDk2LCAweGY1NTQ3Mjg4LCAweGRlNzBjYzgxLCAweGZhZDFkYWY4LCAweGJmMzdiNDczLAorCTB4YTQ1ZTI4NzYsIDB4NTdiMDExYzcsIDB4ODE4ZTBlNTAsIDB4N2I2OTgyYmQsIDB4YWJiMjQ4ZTMsIDB4MzFlNjBmNDEsCisJMHg0YjU2YTEzMCwgMHhjNmNiODNmYiwgMHhhNDY2NWVhMiwgMHhlZmQyNDMzZiwgMHhjNjM0YzE4MywgMHg4NDNjOTc5ZSwKKwkweDYzNDZiOTNmLCAweDg5NjE2MDYxLCAweDcxZjE3NDI1LCAweDZmYzg2Y2E3LCAweDBkN2U0NzM5LCAweDllYzhmYTA4LAorCTB4ZjQ0YjcyZjksIDB4NzJlYmU1ZTcsIDB4ZDNiZDQwMmYsIDB4NWY4MDNlOWIsIDB4M2FlNzljN2YsIDB4OTkxMDNkODQsCisJMHhiZjMxMjI1ZiwgMHg3ZWJlYjlmMSwgMHg3YWUyNWNiYSwgMHg1M2FjNDRiZSwgMHgzYmVhNWU0YSwgMHgwZTEwYjk5ZSwKKwkweDViMzhhZTBmLCAweDU0ODBmNTdiLCAweGZkNjg5M2Q0LCAweDgwM2YyMTI3LCAweDUxZTgxODE0LCAweDI0YzgzNzVjLAorCTB4NjViYjZkZGYsIDB4ZWExOTU3ZWEsIDB4OTlhYmQwMDQsIDB4NDI1N2JmY2MsIDB4OWJkZTEzM2QsIDB4ZWMzMGNiN2UsCisJMHhkNDc1ZWY4NywgMHg4OTMxYWNmYiwgMHhjYWI2ZjVlNiwgMHhhNDNjYmZjOSwgMHg5NGZjN2QyMiwgMHg0NjljYTkxZSwKKwkweDgwNjU2YjY5LCAweDA1OTU0M2QyLCAweDU5NWU3ZTk0LCAweGU1NGI2OTQxLCAweDU0MGY0YTdjLCAweDYzZmQyOTA2LAorCTB4M2Y0YTMyZTUsIDB4ZjRhNmFjYWQsIDB4NGExYWNhZTMsIDB4NTEwY2FjM2YsIDB4YTNlOTVlZGEsIDB4MmU4Nzk3NTQsCisJMHhmNjE3ZWJmZCwgMHhjMGI3NThiMCwgMHg4YjBmNmUwMywgMHhiMjgyMmNiMSwgMHhkZWU3MjRjZCwgMHg1M2YzOTQ1NCwKKwkweGEzMDY2ZjhlLCAweDYzZWE3ZmJkLCAweGRlOGNhMjYwLCAweDZmYzkxNWYxLCAweDQ3ZDFkM2JkLCAweDA4NWU0YWY2LAorCTB4Y2Y0ZmE3OTgsIDB4YTcwYzdiN2MsIDB4MjZjMmRkOTMsIDB4OGY0N2QwMzMsIDB4Zjc5Y2Y0NWMsIDB4MmIwNGExZGUsCisJMHhhOWMwMzJjOCwgMHg1MTljOWJkZSwgMHgwZmI5ODVlYSwgMHgzYTJlNzVlOSwgMHg3MGU3NWYzMSwgMHgzZWI3Njc1YywKKwkweGFjNmM5N2ZkLCAweDIwNjk3MmY3LCAweGNhZjc4NzlmLCAweGYwYjMwZjM0LCAweGQ3YTQ1ZWIzLCAweGY0OWJjNTBmLAorCTB4NWJkMjlmZGEsIDB4MmU4OWRjYTAsIDB4MzNhNzM1ZmMsIDB4NmU0OGU3NDgsIDB4ODM1NGZmYWEsIDB4Yzc4ODI5OTUsCisJMHgyZTEwZDhhNiwgMHg3YmVkNGY4ZCwgMHgzOGYyODVkNiwgMHgzZWFlNTUzNywgMHg3Yzc3YjIzNCwgMHg1NDY3ZDY5NSwKKwkweDI5ZTMwYzNiLCAweGE3YzMzNDZmLCAweGRjYzlhNWFhLCAweGJiODllMDdmLCAweDk1ZjIxODc1LCAweDQ1ZDBmYWJiLAorCTB4NGE1NGZmNDgsIDB4YTZlNjdhZjUsIDB4YjFjZWQ0NmEsIDB4N2M3MTQxYmEsIDB4NzlmMTBlZmUsIDB4ZjEzYzYzNzAsCisJMHhhOTNiYWMyYiwgMHgzZmJiM2ZmYywgMHhmN2EzZDViZCwgMHhmNjA2YjE4NywgMHgwMWY1MGQ4NSwgMHhmNzNhMGRlNCwKKwkweGRkMDdhOGZhLCAweDNmMzRhZjk1LCAweGZkNDlhYmQyLCAweDE4ODVlZDA2LCAweDIwNjY3N2Y4LCAweGFjMTBhYmQ2LAorCTB4MmY1ZTViZDcsIDB4ZTM5N2FkMDcsIDB4ZjZhNjhkZjMsIDB4YmU4ZjNkZTAsIDB4N2FmN2M3YTYsIDB4YjU4NTViZTcsCisJMHg3ZDA0ZTNlYSwgMHhlN2YwYTU3NSwgMHhhYmQ5ZDcxNCwgMHhiYzRhZjNjZCwgMHhlYzZmMmUwOSwgMHg2NzlhNmQ1YiwKKwkweDdmOTAwZmYwLCAweGM4MjkyMTU2LCAweDliODIyNTNmLCAweDMyYzcxNDNhLCAweDZhOTdmYTA5LCAweGU1YmQ1MGYxLAorCTB4NmE1NzJmMTIsIDB4MWUwMmQxNmIsIDB4YjQ2NmM3NjIsIDB4ZDFjZGVlMzMsIDB4ZmI3M2NmZjksIDB4MWZkZjQwMWYsCisJMHgxZWNhYWRmZCwgMHhkN2UxN2NjNSwgMHhiMDZjZjU1MSwgMHhlN2U4MmQ2ZiwgMHgwZGJkZDAxMSwgMHhlZjUwNTNjNSwKKwkweDNkNzZkZDFkLCAweDk4YjMyN2Q5LCAweGE0OGI4NWRmLCAweDhkOWQ1NjAyLCAweDY2MDljZTc2LCAweDdmZmM4Yzk5LAorCTB4MzVkZWZkODIsIDB4YzhkZWIwZDIsIDB4OWZkNDY4YjcsIDB4ZjNjY2NiOTksIDB4MjY2N2Q4MmMsIDB4MGNjNmJmMzgsCisJMHg5MzliYjFlNywgMHg1NmYzZGY5MSwgMHhhMGI3MzBhYSwgMHg2ZmYzOWE1YywgMHhiZTQ5YjhiNywgMHgxMmM1NTlmMiwKKwkweDNmMDhlZjVhLCAweGE2NmViZGQ4LCAweDJmYjkwN2Y0LCAweGVjOTllNTdkLCAweDg3ZThhMWRjLCAweGY3NWJmYWUwLAorCTB4NzAyNjE0MGYsIDB4MzEyOGE1M2IsIDB4ZmYyMGY5YTQsIDB4M2Y5MTg2OGIsIDB4ZmJlMTgyYjksIDB4YTdhODI1YTEsCisJMHg1ZGU2NGU4MiwgMHhlZmQyN2FjZiwgMHhiMjNmZjY4NywgMHhkMjdjZmFiZiwgMHhmYTIxNGZjMywgMHhiZTQ5ZDcyMSwKKwkweGRhNzU5NDUwLCAweGQ4NDkxNmMzLCAweDk3NGE0MTViLCAweDc2ZWI3MThiLCAweDVjMDQ0ZDZiLCAweDQ3ZDcwMTFiLAorCTB4YmYzNzdmYzAsIDB4YmYxMzMyMjUsIDB4MzUwMjVhYTUsIDB4NWZjZTI0OTYsIDB4NGE0ODJmNjgsIDB4NDdmODE2YTcsCisJMHg1MWVkNGZlYSwgMHhiNTNmZWQ3ZiwgMHgzZmE4MzRmZSwgMHhmZDdmNTRkYiwgMHgwYmZlYjUzZiwgMHgyOWJmZjQ3YiwKKwkweGFmYTVmZDVhLCAweDA0MTZkYTZjLCAweDc5YjQ1MzdkLCAweDNjYzE4Yjk1LCAweDRlYTk1NDc0LCAweDRiZGQwMmY2LAorCTB4MjE3NjJmZDYsIDB4ODI1MTFjMWYsIDB4YTNlN2U0MmUsIDB4MzQ3Mjc5MjEsIDB4MjJkMmY4N2UsIDB4ZTdjY2EyZmMsCisJMHg4NTVkNzA5MCwgMHhjN2ZkNDI3ZiwgMHg1NGQ5Zjg1ZSwgMHg1OWJlZTdiNCwgMHhiZDY5YmFhZiwgMHg1YjBkNjc1NCwKKwkweDFhY2I0ZTQxLCAweGRmYTBhNzBhLCAweDFjODNlMDE3LCAweDQ2NTI3YTVlLCAweDlmY2NkMWI4LCAweDRhYWZjZjQ1LAorCTB4NzAxZWZmNDYsIDB4ODQ0ZjU4OGEsIDB4YWIyYTVlYzksIDB4OWMyNGYzZmQsIDB4Mjc1OWNhODcsIDB4N2JlNDU5YzksCisJMHgwNGU5ZmVkOCwgMHg1YWI5OGZkMiwgMHhlODdjY2Y1YywgMHhlNWY5ZDkyNywgMHgwZGU1MmYwMiwgMHhiYjI5M2IzZiwKKwkweDMwZjZiZDMwLCAweDRjYjAxM2VhLCAweDdjOGYwZWM4LCAweDQxZDg0MGFmLCAweGM0Y2UyYzg3LCAweGIxNDI1ODU2LAorCTB4YTExZmIxMWYsIDB4YzJmMWQ0ZGUsIDB4YWEwZWRjNDIsIDB4ZjBlNGYwZGEsIDB4YjZhZmQwODMsIDB4MjRiYWRmZGEsCisJMHg3OTc0YmUwMywgMHhmMzNmNTUzYiwgMHg3YTdhYWZkNywgMHg2MmVkY2JkNywgMHg1ZWZkZDdiZCwgMHgzNGYzZGU4OCwKKwkweDg5YWRmYjBhLCAweGQ4NmEyNWE3LCAweGM5NzFmNjg1LCAweDg0MWJkNTVhLCAweDllOWIyNWM3LCAweDVjNjllZTdkLAorCTB4ZjU2MjdlYWYsIDB4MTdmNTA0NWUsIDB4YzNlMzdhNmYsIDB4NmYxNzAwMzEsIDB4ZjBhNzEzNTEsIDB4ZTRhNDM4NjEsCisJMHhjMzk0ZmE2ZSwgMHhiYTIzZjliZiwgMHhmMmY0NTFlOSwgMHgxODY3OWExYiwgMHg0MjcwZmU3ZiwgMHhiNzhhNWQzNywKKwkweGIwZDhkNmVjLCAweDUwOThmODllLCAweDcxNmI1YmJmLCAweGZkNGZhMTQ0LCAweDY3Njg0OWMxLCAweDU2Zjg2ZDU1LAorCTB4ZDFlNTc1YzMsIDB4Yzk0YjEyNWQsIDB4YjVjZjgyODgsIDB4ODBiZDkwNmYsIDB4MGE3YTIyNzgsIDB4MmZkMTc1N2EsCisJMHhkMDM5N2NhMiwgMHgyNDdhZjUwNSwgMHhiZGNiMjJiZCwgMHgxNDY1ZmE4MSwgMHg5M2ZkMTdhZiwgMHhiZTJmZGZjMCwKKwkweDRmZWM3ZThhLCAweDQzYzQ1ZWFkLCAweGI5Zjc4YmMxLCAweDk1ODczYzcwLCAweGNmZTdjZTBhLCAweDNmNDY0ZTJjLAorCTB4NGMxYTgxN2QsIDB4OWZjYTUzNzYsIDB4OWZiOWFjMTcsIDB4YmRmZjJmZjgsIDB4ZmFmOTkzZmIsIDB4NDJkN2Q3ZDAsCisJMHgyZmIwNTU3MywgMHhlYWY2NzM4ZSwgMHg3OTljNjhkYiwgMHg1ODdjNDAyYywgMHgwZmVjOGNmMCwgMHhjMmI1ZmE0MSwKKwkweDIyODk2ZjI2LCAweDk3MzJjNTI3LCAweDgwZWJjMzkzLCAweGMzY2UzMGI4LCAweGJmNDE0ZWI4LCAweGQwZTVlZmVlLAorCTB4Y2M4ZmYyN2EsIDB4ZWUwZmE4NjEsIDB4NmNmMWZkZDcsIDB4OGI1ZmMxMmUsIDB4YjI3MTg0ZmQsIDB4ZGFlNzVmNDUsCisJMHhiYjViZmM0YywgMHg3NGU5MTliNCwgMHgwNTJmODA2YywgMHg0Y2U1NmFmZCwgMHg0ODdjMGEwOSwgMHhmOTVlYTA2NywKKwkweDM4NTNhYmJkLCAweGM5NDc5ODlkLCAweDVkODFlZjE2LCAweDYzOWYwMTMwLCAweDY3ZDU2NmY5LCAweDhmN2E2ZTFmLAorCTB4NmVlOGM5OWQsIDB4MWY2ODllN2YsIDB4ZjM4MzFkZmEsIDB4NTY2NGUxZjksIDB4N2M2NTFmNTAsIDB4MDdhZWIyMzUsCisJMHhmMDM3NWU2MCwgMHhiOWRlNDE5OSwgMHhjMjNlZDdmYywgMHhmZjk3NWRlNSwgMHgzMTkzNGRkMCwgMHhiOWY3YWJmZiwKKwkweDM4N2JlMTFjLCAweGMyYmY0MjVmLCAweGZiYmY5NDI5LCAweDgzZjQ4OTU2LCAweGM5YTM4NTk1LCAweGU0MmFhZDc5LAorCTB4YzkxZjljZGMsIDB4NDU3ZmQwMmYsIDB4MGRmMDMzOGEsIDB4NzQ0MDkzYjYsIDB4ZGU1YWJmMjAsIDB4YThkZjc4NGEsCisJMHg1NzVkYjE1NywgMHgzOTc1N2FjZiwgMHgyMGZhMTdjZSwgMHg3MDdkMDY0ZiwgMHg2MDNlYjc1OSwgMHhlODFlYjlhYiwKKwkweGYyMGFlZWRkLCAweDdhMWE5YmY1LCAweDVmOTQ2OWVlLCAweDA3YTBkNzkwLCAweGUzZjU1N2U1LCAweGRjNmY4ZmY4LAorCTB4MjA5ZGUxZmIsIDB4NzVlYmM3YjcsIDB4ZDVlYjM1YjksIDB4NzgyZGI5NDgsIDB4N2M4NGJkNjksIDB4YzdiNzI5MWEsCisJMHg4OTRhYzAwYiwgMHgzY2YwYjcyNiwgMHhiNDE2ZGNhYSwgMHhhYWY0NGJmYywgMHg2NWM3Yzc4ZSwgMHhmNWQ1NWViMywKKwkweDhjZjg2ZjY0LCAweGNhOTc5M2Q0LCAweDEyN2FhODllLCAweGVjYjNlZjdlLCAweGYzYThmYzllLCAweDQ1N2ZjZWExLAorCTB4ODBiZDI5YmYsIDB4OWYzYTA5ZmMsIDB4YzVkODdjZWEsIDB4ZjYxZjNhYTcsIDB4ZjA5OGNmZjAsIDB4M2I3Zjk5MTgsCisJMHhjMTBjMDRmMiwgMHg3ZjI1NWRiZiwgMHhkZjEzNDk2MiwgMHhkZWY3ODM4ZiwgMHhmODQ1OWZlYywgMHhjNzM0ZDFmMiwKKwkweDlmZWNkZmFhLCAweDExNDM4NDY4LCAweDc5NDQ3ZDcwLCAweDhmZWMwNDVmLCAweDgwODgxZjI4LCAweDRiZTU0YzJiLAorCTB4OGM2YWY3MWEsIDB4MmE2YzIwZjgsIDB4MmJmZjlkNjcsIDB4NzU5NDQ1ZjYsIDB4OTUwZjNlYWMsIDB4ODJkNDljMzcsCisJMHg5ZDY5MWZjOCwgMHg3NTNmZWExYSwgMHhlOGE4OTgyMSwgMHg5MzI5ZGMzZiwgMHg3MDAzYjBmZiwgMHhlOWRhMDRiYywKKwkweDBhMTE5OGQ4LCAweDZjNTkxZTgyLCAweDBlY2RlYmU3LCAweDAxMmJhNzc3LCAweDFjZjFjNWQyLCAweDk2ZDI0Y2VlLAorCTB4OWZkNDFlYTAsIDB4MWZiOWRhNzcsIDB4ZTlkZmMzYTQsIDB4MzFmODM3OGEsIDB4YTRjOTM2MGUsIDB4NmM0MjViYzcsCisJMHgwOTNmMzQ3MiwgMHhkZjg0MzRjYywgMHgzZTViZDYxNiwgMHhlMDc2OGZmNywgMHg4N2I2MzNiZSwgMHhjZjQwY2VmYiwKKwkweGZhNDc2NWFiLCAweDU2YmY1YzdjLCAweDIzNjA1ZWNiLCAweGVkYzE2YjM2LCAweDc3YTE3NDJlLCAweDcxYmEwZDM0LAorCTB4ZmQ5ZjNjMWEsIDB4NmRiN2NjYjYsIDB4YWZhNTNlODIsIDB4ODQ3MWRkNjEsIDB4MmIxODlmMDUsIDB4NzJkZTdlZTEsCisJMHg0ZDk5OWZlMiwgMHg2YjMyMWQ3YywgMHgyODc5NzQ3OSwgMHgzOWU1ZWYxMiwgMHg3N2E4NjllNiwgMHhiOWYwZmQ2MSwKKwkweGQ3YWMwZmQxLCAweGUyM2FiMDUzLCAweDQyZjVkMzc5LCAweDNkNjlhYTZlLCAweGNlNmI1NDU4LCAweGQ0ZjU4ODBmLAorCTB4YzlmZWJhMzcsIDB4N2ZhNDk5NjQsIDB4ZWI4NGExNzAsIDB4YWZiN2ExN2EsIDB4MzhkZTg3OTYsIDB4YjFkM2U4MGQsCisJMHhiZmI4NjY0ZiwgMHgyNjQ5YWE3YSwgMHhjOGRhOWNmYSwgMHgzMDU5NTNmNywgMHg4Y2FmZTQ4OSwgMHhkNGJlOTI3NSwKKwkweGYyODZkNmYxLCAweDdhZWY3MTc1LCAweDlmZWI2ZGFjLCAweDNlNDIxZmIyLCAweGUxODdmNmRhLCAweDZkYjQ4MmJmLAorCTB4Nzc4MzI3ZGIsIDB4NDdjYWZjMjAsIDB4M2Q2MDdmZTksIDB4NjVkODRmY2IsIDB4Yzc3MzNmMjcsIDB4N2ZmMTI3MmUsCisJMHhhNWRmY2VjNywgMHg3NmYwODQzZiwgMHgzYWY3ZjkyYiwgMHgxYzNiN2Q3NiwgMHhhMTYzYjFmOSwgMHg2MGY1MDBiNSwKKwkweDdlYmUwMGM3LCAweGVkZjlkYWFhLCAweDdmOWExNmYwLCAweDMzMWQxMTE3LCAweDdkZTg4ZDE0LCAweDA3MmZlOWFhLAorCTB4NTRlMDJlMzAsIDB4ZWQwYThjMTMsIDB4MjRiMTVkOGIsIDB4ZGFhZmU1NWYsIDB4YjFkMTFmYzksIDB4ODBlY2RiZjMsCisJMHg5ZTM3OWZlMywgMHhkM2ZmYjEzMiwgMHg1ZWQzNjRlMSwgMHg3M2M1ZmVjMiwgMHg4ZWY5NzliZiwgMHhjMDJlY2ZkMSwKKwkweGRkODZmMWZkLCAweDlmYzg0Y2RhLCAweDg3NWZkYWYwLCAweDc4ZWQ3ZWEzLCAweGVkNGRkYjg5LCAweGRjMWFjYjZhLAorCTB4NDhiYTE4ZGYsIDB4YmQwMmE4NWUsIDB4ZmFjODUxZGEsIDB4ZDE2ZmI2MzEsIDB4NDcyOGYxYzQsIDB4NTdmMmYxM2QsCisJMHgyZjljYjNmMiwgMHg3YzI4MjYzZSwgMHg4ZmVmZmIzZCwgMHhmNWM3YzkwZiwgMHg5MzY0MzM5ZiwgMHgxZGRmZGM3MCwKKwkweDg5ZWEwM2Y4LCAweDRiZTI1NjVkLCAweGViYzdiYzdkLCAweDczM2Q5MDE3LCAweGZiZGY3MWFlLCAweDUyZGM2ZTNmLAorCTB4YmRjNjdjZjgsIDB4ZmY5Y2RmZTAsIDB4ZmE4NzhhYWQsIDB4M2QwNzI5MTcsIDB4MDNlNzdjZjksIDB4N2E3MjZmMDQsCisJMHhjOWU3YmZhOSwgMHhhN2ZmNmJlZiwgMHhhMDI1ZmRkMSwgMHhlM2RjZWJiYiwgMHg0YjNmZmYwZSwgMHgwYmE3YjdmNywKKwkweDNlMzFiYmJhLCAweGJmYjVmY2EwLCAweGE4N2VmZjUyLCAweDM3Zjk2YjllLCAweGUzNmY3YmE3LCAweGI3ZmRlZGQ3LAorCTB4MzNmNzllMmMsIDB4NTY2NGZjYTEsIDB4ZTJjMzQwZWQsIDB4NmYzZGQyZGEsIDB4NWJlZTQyNjcsIDB4YjFlMzdiNjksCisJMHhmNjIzZTNiZiwgMHg1ZTM0ZjQ3YiwgMHhmMWI2ZmVlNSwgMHhlZDAzZWZiOCwgMHhhYzQ5NzhiMiwgMHhhYjNhZjkxNywKKwkweGZhMmZiMGJmLCAweDNiMjNjYmNmLCAweDYzZGE3ZmE0LCAweGM1MzA0ZjY0LCAweDJiZjcxMmIzLCAweGU5OWY0YWRmLAorCTB4MzYwYmQ4YTUsIDB4YzIwMGUzZTIsIDB4NmMwNTJiZWUsIDB4NGFmZTZmNWUsIDB4NGFkYzNlNjIsIDB4ZmQ3ZTlmZWQsCisJMHhkMzczYjQzZSwgMHg4M2IyNjRkMiwgMHhmN2ZiMjUyMSwgMHhmZTY0ZDc3NSwgMHhhZDMzNDRiYywgMHg5OGY1YWU4NywKKwkweDEyOTM0N2Q3LCAweDg5YThlYmNkLCAweDE5YWJiZWEyLCAweDBlZDVmZmVmLCAweDNjMDIxNDI5LCAweGNiZjAxZjhjLAorCTB4OGVhN2Y0NDQsIDB4MTI2NTQ4YmYsIDB4NjA1ODkzYzAsIDB4MjYzYmFlMTEsIDB4OWRmNWNjM2EsIDB4ODM2YzdkYzAsCisJMHhjNWVmZjFiZiwgMHgzYzJlYzRlMywgMHg0N2U5NWMwZSwgMHhjOTkwMGUzYywgMHgzYzRlN2FhZiwgMHg2ZjA5YmY2MiwKKwkweGM3OGMyMTk5LCAweGUzOTc4YTYxLCAweDRiZDRhMTMxLCAweDFlYjE2YTdlLCAweDFkYTI2ZWM3LCAweDM0OTYzOGEzLAorCTB4YjgyYjNjYTMsIDB4YTA3OGU2OWUsIDB4OWViZWI4NzUsIDB4NGNkZjBkZWUsIDB4ZDExNWNmYWMsIDB4MjU3ZjhlYTQsCisJMHhjZGQ5ZjY0ZCwgMHg1Y2ZhZDFmNSwgMHhhNTBmY2JhNywgMHg3ZmM3NGU4NywgMHhhYWM5MmU5NCwgMHg4ZTY5MmU5OSwKKwkweGViY2EwYTM5LCAweDhjM2Y1YzY0LCAweDFjOTlmMmM0LCAweGI0MmEwYjRlLCAweDBmZDYyNGRmLCAweDI4ZTY3OGQ3LAorCTB4YTQyNzgwNDEsIDB4YWY0ODJhNjUsIDB4MjJmNmRiN2MsIDB4NzliNTFmOGMsIDB4YzVjN2VhMjUsIDB4MWY5YTE2NmQsCisJMHhlMTEyNTk2YywgMHg0MjhkNDg3ZCwgMHhmNzE2N2JmMCwgMHhkNGY3YTQyOCwgMHhmZTM5NWUyYiwgMHhiYjNmNDMyMCwKKwkweGJhMDZlMzRmLCAweDdjOTdlZjlmLCAweGQ4Y2NlNjdmLCAweGYwYzdmNDZjLCAweGRlN2ZjNjFmLCAweDU5YjdlYjAwLAorCTB4MDYzODU5YWIsIDB4NjE1YjM0ZjAsIDB4ZjQwNGI4YzEsIDB4NzNlYzRiOTMsIDB4MGNkYzlmOTMsIDB4ZTRhYWVmZTMsCisJMHg1NWNlN2FlZSwgMHhmMmJkMzdiZSwgMHgwMTVmNGVjZiwgMHg0NWY5ZjYzZCwgMHg5NGM3NmQ4YywgMHhjNjI4OGE2ZiwKKwkweDlhOGZmNmY1LCAweGY3Y2FiZTM4LCAweDFlNDBkMGIzLCAweDBkZmIyMTg3LCAweGFiMmY4YWZiLCAweGNhZjMzZmRjLAorCTB4ODkxYTVmMWYsIDB4MWQ3MWRjZWIsIDB4N2ViOGUzNDMsIDB4YTk3MWUyY2QsIDB4OGE3MGJkNjIsIDB4MGViY2UyNzksCisJMHhlMjgzYWZkNCwgMHg5Zjc0YmY2OCwgMHhlNzE2OGNlYywgMHhiZmFjNDFiOCwgMHgyOGYxODM3ZiwgMHhiMmQ0NzY5MCwKKwkweDU3ZDcxOTZhLCAweGJlZmM5M2FjLCAweDViMWI1YWMxLCAweDY2MWUyNTFmLCAweDdlMTE2YThkLCAweGY4Mzc0MTIyLAorCTB4N2ZiOGQ5YzksIDB4MGQ5ZmRiYzMsIDB4ZTkxOWM2YWYsIDB4YThlNTM2ZDYsIDB4MWQyN2JjMzIsIDB4NjFiOWY3ZjAsCisJMHhjNTFmZWFmZiwgMHgxMWY3YWUyZiwgMHgyZGVjMWJiZiwgMHhmNDUxZmM5MywgMHhkZmMwYmQ0NywgMHg5MWRmM2RkNCwKKwkweGE2ZDJmNDlmLCAweGRmZTQxNmI1LCAweGE2MmQ2YjRiLCAweDU1M2FkOGZkLCAweGIwNDYzMWY4LCAweGE5YWZkODExLAorCTB4MmNjZWVjN2IsIDB4ZDkzZWNiYTQsIDB4ZTVhNWYxOGIsIDB4NDBiNTI3NGQsIDB4NDhjNDdkOTQsIDB4ZThmZDYyN2MsCisJMHhkZDU1NmY3ZiwgMHhiNTBlZWVkNCwgMHg3NWUyMjY3ZSwgMHhjMzFiMDljNywgMHhhZDc2ZjU3NSwgMHgzZjVhMzhiYSwKKwkweDdlZjJiNGVmLCAweGY3ZjU2NmNlLCAweGY3ZjhjZjBkLCAweDBlYjhlZmMzLCAweGFlM2M3ODQ3LCAweGYwOTk2YjNmLAorCTB4MWZmMjQ0ODMsIDB4NTUzZTNlMjMsIDB4YmYzODQyYzcsIDB4ZjUxNTdhZTIsIDB4OGM4ZGE5YzIsIDB4Yzk0MDc3ZTYsCisJMHgwNmZlYjg2MywgMHhkMWIxZmY3OSwgMHhlMzcxNzNhZiwgMHg1ZGEwZGY5NiwgMHhiOTI0ZDY1MCwgMHg0Y2EyNGI3MSwKKwkweDhmZDBkMTY5LCAweDJmMThkZTViLCAweGU5OWMzY2UzLCAweGRkNmZlM2QxLCAweGM4MzU2ZWMzLCAweDEwYWFhYjQ1LAorCTB4ZDk4ZWY2YmUsIDB4ZmJiNjE3NzEsIDB4ZDBjNjliNjUsIDB4ZGViZGYxNGUsIDB4ZmM3OWMyZTksIDB4MjQ5MWE2Y2IsCisJMHhlYjhkYmQwNywgMHgzNDU2NGFlNSwgMHg4NDFjZTMxMSwgMHg4N2U0OGMzZSwgMHg0YzYzMWJhMSwgMHhhMDcyMTVmMCwKKwkweDU0ZDdjYTFmLCAweDZmM2NjYjZiLCAweGQzMmRmYTE0LCAweDc4OGZiMTI0LCAweGY0MmRmYTllLCAweDdiN2U5OWZmLAorCTB4MDE2ZmQ3NWYsIDB4MjM5MDZmZDksIDB4NDE5YmMwYmYsIDB4ZDM0NGE1YmYsIDB4NGYyNTczNmYsIDB4ZWU3ZGUyMGEsCisJMHg0ODI5NDFjZSwgMHhhYjZmYjlkNywgMHhkYmY0ZDE0OSwgMHgyZmJlNGFhNiwgMHg0ZGM0NTliYSwgMHg3ZTgwMzQ3NywKKwkweGRmYTBkY2JiLCAweDQ1YmY0MDFhLCAweGEzMTkxZjg5LCAweDczZmE3ZWU5LCAweGJmZDBiN2U4LCAweGExMzZmZTQ2LAorCTB4ZGUzMjhiN2UsIDB4NzRmZTA0MWIsIDB4ZTliYzM2ZmQsIDB4ZTFiN2U5MjAsIDB4M2M1MzE2MGQsIDB4Zjg0ZDQ0ZjAsCisJMHg2ZmQ1N2E5YiwgMHg2OGFkZDI1MiwgMHhiZDUzZWYxZiwgMHg2N2Y4NTFiMSwgMHgzN2M3YjA5MywgMHg2YzQ2Mzg4YiwKKwkweDk1NWNmNTA3LCAweDVjZjRjM2Y2LCAweGI5ZWFmOWRlLCAweDc1OWUxMTdmLCAweDJiNzczNzNkLCAweDllZThiOGEzLAorCTB4ZGNmNWM4N2MsIDB4ZTdhMGVkZGMsIDB4YWU0N2U0MjQsIDB4NjRlZWU2ZTcsIDB4YTExNzJmZGMsIDB4ZDBmNDg2ZGYsCisJMHg5N2NhOGM2ZiwgMHhlNWZiZjk4NSwgMHhkZTRmMTk4ZCwgMHhmMDhkZjUwZCwgMHg5NDFiNWVhOSwgMHhlZmFkZDExZiwKKwkweDVkZjUxOTQ2LCAweGJlOGJkNjk1LCAweGZhN2U3N2RiLCAweDc3ZDBhYjZlLCAweGEyMDZjN2EwLCAweDBmZTQ4ZDdlLAorCTB4ZGUzOTkzNmYsIDB4YzNlOGM3N2MsIDB4Nzk0NjVmMWIsIDB4ZmI0YzlkZjksIDB4Zjg1OWVmOTIsIDB4YTMzYmQxZmUsCisJMHg3ZjIxNjcwZiwgMHhmM2ZhMmE3ZCwgMHhkOWU5YzZhMiwgMHhmYWE0MTk1ZSwgMHhjN2NlYmMyNywgMHhmYjkxYmE1NywKKwkweGI4MWFjYmNiLCAweDJiNTY1ODdkLCAweGU3ZjAzYzg3LCAweDY5ZGYzMWE0LCAweDlkYzJmZmQ4LCAweGY4MDE0YjEyLAorCTB4MTNmNTZiMjYsIDB4OWZlYmI0MGUsIDB4MWY1ODk5NTcsIDB4ZjAzNGM5NGQsIDB4NjI5Y2FjYzMsIDB4ZDk1N2ZiZjIsCisJMHhmY2YwZWI1ZCwgMHhkOTg1MmNkMSwgMHhlYzVmYmZkMCwgMHhlZDE0NzQ5OCwgMHhiZTFjZTJlMCwgMHg5ZTJjNTAxZiwKKwkweGIzYjA3MWViLCAweDQ0NjRmNGJiLCAweDljZTM0ODNjLCAweDllYjNmYjM3LCAweGFkNTMxNjcxLCAweDlmNTNhZTljLAorCTB4YjcxODQyOTUsIDB4MjJlZTMzZGEsIDB4YjhhMTdhNDQsIDB4NWRmY2ZjY2UsIDB4YzkzNzdmMjEsIDB4ZjYyZjg0MmQsCisJMHhlZTM1MWNhZSwgMHg4NWQ3MmY0MywgMHg0ZjAyN2RhNywgMHg5ZTEzMTc4MCwgMHgzYzU0NTI0MiwgMHg2NGE3YTUwMSwKKwkweGE1ZTM3NzI2LCAweDRiMmQ3N2YwLCAweGYwYTA1ZjcwLCAweDkxZjY4OTI5LCAweGUzYWRjNzIzLCAweDNhZmM3MjJkLAorCTB4NzczZjc1MWUsIDB4YmYyZmE4YjEsIDB4NmI5ZDJkNjksIDB4OGU4YmM0OGEsIDB4NzQ3YzQ4ZTcsIDB4MWYwMjNkZTEsCisJMHg3ZTVkNjllZiwgMHhkNzE4OTFlZCwgMHg3YTQzN2MwNCwgMHg4MDlmZjgyNiwgMHgzZmM3NjgxNywgMHhmOWQzMjJlZSwKKwkweDVlMDQ4ZjliLCAweDliOGY1NjQ2LCAweDM3MGZlMTgwLCAweGU0M2ExYzYxLCAweDc5Y2NkNWU3LCAweDYzZTAyZmIzLAorCTB4MTE5ZWM3ZDQsIDB4MzE1ZTlkMzgsIDB4N2RjMDFhYzYsIDB4NGVmNjBkZGEsIDB4MWYzYTgzZDIsIDB4M2U3MmIzMGUsCisJMHhkOTVlODRkNCwgMHgzYzYyYWZkMSwgMHgyNTFiZjNhZCwgMHhlNTIxZGEzNywgMHhiNWUxM2I2MSwgMHgwZWQxZjgxYywKKwkweGY1M2VmNjQ1LCAweDU3ODEyNGNkLCAweDZhYWY5ZDM3LCAweGQwMTNmMzE0LCAweDI2ZWI4MmMxLCAweGYxMGFiZTdkLAorCTB4OWIyMzU4ZjMsIDB4ZWJjYTVkMzgsIDB4NThiMjVkMzgsIDB4OTRjN2VkMjcsIDB4MzBkZTQ4ZDUsIDB4NzFhY2E3OGMsCisJMHhlYmExYzUwZSwgMHgwZTdlMTlmYSwgMHhmMGEyOWQyMywgMHg3ZjhkMTJhZiwgMHhiMzliM2ExOSwgMHg2MmNkZTdiYiwKKwkweGI1YWE2ZTUxLCAweGU3ZGM0M2ZhLCAweGIxZjIwYTk5LCAweGZlMTBkODk2LCAweDNlZmUxNjc3LCAweDI0NTBmYzU3LAorCTB4NzgxMzJlYmQsIDB4NzU3ODg0ZGIsIDB4YjkzYWZlMjAsIDB4OGVmZTE1ZmQsIDB4ZjllOTY5Y2UsIDB4ODRkMDRhZTUsCisJMHg5ZjRmMDlkNywgMHg1M2I3ZmNlNiwgMHhhYzVmYTBmMiwgMHhjZmM4NmYwYiwgMHhjNzRhM2Y5MCwgMHhkMjMzZjIxYiwKKwkweDQ2NTcyOWExLCAweGRkZjAwZjM4LCAweDc4ZTdhMzI3LCAweDI4ZDRiZjcxLCAweDBmM2I4NWY3LCAweDkxOWZmYWYyLAorCTB4YjhjYTJjYmMsIDB4ZmY3ZjMwN2YsIDB4NGRlZWJlNDAsIDB4YzU1OTg3ZGUsIDB4ZjdmMDQxM2EsIDB4ZmRjZWY2M2IsCisJMHg3N2JmOTEyMywgMHhkMTJmZGM0YSwgMHhmN2RhNmYxNCwgMHhkN2NhYzFiYywgMHgyMGVjMWI0ZCwgMHhmNmRmYjgwNywKKwkweGU3NWRlYWI2LCAweGFlMWZhOWU5LCAweGMwMzk3MmIyLCAweGUwYzc4NGY1LCAweDA3MDRiYWY3LCAweDc1YTZmMTgyLAorCTB4YTQxNzhhMzYsIDB4ZjZlNDBjN2UsIDB4NmY1ZjUxYWEsIDB4NWJhNGIzYjIsIDB4N2ZhZjdhYjMsIDB4MzdiZmE4OGEsCisJMHg4Nzg3NDk3YiwgMHg0N2E4N2I2MSwgMHgyMWJkYTExYiwgMHhjZTQ1ZWRkZCwgMHhlMGZmYmExNywgMHg0M2JhZTM1YywKKwkweDNiZGZjZmYwLCAweDFmOWRiZDJlLCAweGNlNTU0ZjFhLCAweDRjNWY2OTlhLCAweGI1NGFhYjhmLCAweGQxNTE1ZTA0LAorCTB4OTkyYzliYmUsIDB4ZTdhMGI3ZTIsIDB4NzBmZmNlODIsIDB4YTM2YWI3ZmQsIDB4YTU5ZmFmN2EsIDB4ZDA4ZWM4ZGEsCisJMHgyZDVlY2JjZiwgMHhmMDEwNTgzYiwgMHgyNTRmYTVmNiwgMHhlMzJiMDE3OSwgMHg3ZjM4YjE4MywgMHgxMDc5ODc4YywKKwkweDhmZjcyZjkyLCAweGNhNmVlOGZhLCAweGVkOWY2OTk3LCAweDI5ZjVkZmM2LCAweDFiYzg3ZGM1LCAweGJiMWQwYzc5LAorCTB4ZmIyMjUzMzEsIDB4NmNhYzNkZTEsIDB4MzZlMWRhMzQsIDB4MjY4YWIzZTYsIDB4NDdlNzNmMjEsIDB4ZDczYzIxZjEsCisJMHgzZDViNTk5MiwgMHgzZDcyMDNjMSwgMHg4NTU0MmVhMiwgMHg2NzQyNzdhOSwgMHhhZjQ4M2JlMiwgMHg3YTQzMzI3MSwKKwkweDRjZmFmYjM1LCAweGJlZjdmOWMwLCAweGRjNGNiMzNmLCAweDgxM2IwNzhhLCAweDhmYjExOWVhLCAweDMxYjk2MTI1LAorCTB4Y2U1YTI0YmUsIDB4ZWFmODZlOGMsIDB4N2ZhMDViZmQsIDB4NWVjYmY3YTMsIDB4NjliYjk0MGYsIDB4NzI4MWMzYWYsCisJMHg4NWI1NjQzNiwgMHgxOTc4MGMwNSwgMHhlODU1NDJjMywgMHhjODdkMWE3NywgMHg4M2VhMGI3NywgMHhmMDdiYjAwMiwKKwkweGQzNDE0OTdjLCAweGMyMTcyYWRhLCAweGJmN2EyNWFiLCAweGU0OTgxODNjLCAweGFhNmRmZTgyLCAweDMyZTkzOTM5LAorCTB4MGU1MDBiZDQsIDB4Y2Q1ZjI5YWIsIDB4NGFkNzk1Y2IsIDB4Y2U3MTBjNWUsIDB4ZjE0MTVhNmIsIDB4MTJiNTc5NDgsCisJMHgxNGRjNjAxZCwgMHhkNzhkOTg5MiwgMHhiZDQxYjIxYiwgMHhmYmMzNTY5YiwgMHhjMTdmMzg1OSwgMHhlZDZmNThmYiwKKwkweDQxNmZmN2M5LCAweGE0ZmQwM2JkLCAweGZkZjIzN2Y3LCAweGNmNzgzY2ZhLCAweDNiNTI3MjgzLCAweDVjMmJlYTg3LAorCTB4MDczYzMxMmQsIDB4Y2Y5MWIwNTMsIDB4NTVmYjA1NGYsIDB4ZWMzN2U2MmYsIDB4ZGRlNjhhN2UsIDB4ZGY1ZWQwMjksCisJMHhjMjhmOWMwYywgMHhkMTNjZTkxMywgMHhlNzRkYzk0OCwgMHg4MGJlMWYzOCwgMHgwZTA3NTZmNCwgMHhhNWYwNWYxOCwKKwkweDQ5MDlmOGYzLCAweGEzZmQ2MmMwLCAweDZkZmQ3ZmRiLCAweDllNTM1Y2ZjLCAweDA3ZDY4MTc3LCAweDI3Mjc3OWVhLAorCTB4ZmM0MmMzMjksIDB4ZTFmNjkyNzQsIDB4MDNiZTAxMGYsIDB4NzkzNzljNTYsIDB4OWNkZWNiM2MsIDB4YzMxNmI0MmYsCisJMHgxYjYzOThmYywgMHg2YWNmZWY0NCwgMHgxZTcxNDcxYywgMHhlMjlmOTliMywgMHhlNjhlYTYzYywgMHg1N2JiZTc3NiwKKwkweGVmZTg0M2RhLCAweDRjZWQ1NzdiLCAweGFmN2JlN2MzLCAweGY2ZjNkMmI0LCAweGI3MGY1YzRkLCAweGJmMjE2ODBmLAorCTB4MmFkNWUxZmIsIDB4NTUyZmYzYzMsIDB4MTNkMjY1YWIsIDB4NzRhYTM3ODcsIDB4ODY3ZTU3NmUsIDB4NmZlNDM3YzcsCisJMHhkZWM4NzZlMiwgMHhjM2RlYmNkNSwgMHg5YjdlZGM3NSwgMHg5MzZkY2NmMCwgMHg1ZmNlMWU3MCwgMHhlYWY5Y2ZjZiwKKwkweDg3NWY1YTdhLCAweDRkMGJiOWU2LCAweDllYTQ1YmYzLCAweGE5NzBmNWQ1LCAweGY1NDE0N2MwLCAweDhmNGZkYTVhLAorCTB4ZmFhNWJiZDQsIDB4NmZhMTE4N2MsIDB4OWQ5ZjcxNGIsIDB4MjRjM2QzZjYsIDB4OTFmNWE1NDcsIDB4NmU4ZTY1ZjEsCisJMHg0M2YyMGRiZiwgMHhlZmUyM2JmOCwgMHhjMzJhZmRiMiwgMHg0NWY0OGQ3NSwgMHg2NzhhMjRkYiwgMHhmMjFlZjljMywKKwkweDNlNDkzNzQ3LCAweGY4Mjg3YjhjLCAweDdiMjIxYWQ4LCAweGUzM2I5NDNjLCAweGY5OWU3MDNmLCAweGM4ZjBjYWM0LAorCTB4MDNkMjJiNDgsIDB4YjU4ZTU0ZjQsIDB4ODRiZjhmZjMsIDB4YjNkZjQ3ZTcsIDB4ZjAxMGU0NjEsIDB4NWZlMTJlNGYsCisJMHg1YWNlMTM4ZiwgMHhiMjdlZTNjZiwgMHg4Yzk5NWJkZSwgMHhjNGQ5OGRlNywgMHhmMjA3YTQzZSwgMHgzMDE2NjQ2YiwKKwkweDkyYTM4ZGU4LCAweGY5M2I5NmVmLCAweGZiNDZlMGZjLCAweDk2NmJhNzQ3LCAweGYzODc5ZDU2LCAweGViOGQ5MTZjLAorCTB4OTU3YWNmNDcsIDB4MGJjNzhiY2UsIDB4M2UwYmQ2MTgsIDB4YjcwYTc3YjQsIDB4MGNkNjQ4YWYsIDB4NzNiODUwZmMsCisJMHgwZWE4MzI0NSwgMHhjYmM0NDRiNiwgMHhlNjczODk1NCwgMHhhNzZmMWE4NSwgMHg1ZWU0OTc3MCwgMHhhZjQ3Njg2YiwKKwkweGRiNTdhZjQ3LCAweGI0MWJkZmNlLCAweGQ1YmRhNzkzLCAweGEzZmQ4ODVmLCAweGExYWQ3ZTcxLCAweGE3YWM4OGRlLAorCTB4ZDRiZGZiNDcsIDB4YTc1ZmYzOTMsIDB4ZmZiOWUyNTcsIDB4MGE2NTc3OWMsIDB4NjJmOWNmNzYsIDB4M2VlMzIwY2EsCisJMHg3ZWVhOWU4ZiwgMHgyZGY3ZWNlNiwgMHg1ZmMwNjdjYywgMHg5ODYzMWZjZSwgMHg4NmVmNDBjZiwgMHg0MGZmMjA1MSwKKwkweGI5MWExYmJmLCAweGVhMzBkNzNkLCAweDQ1OWE1NmEwLCAweGJkZTUxYmIwLCAweGNiYTNmODRjLCAweGJiZmRmMjI2LAorCTB4MTZmN2NjODYsIDB4Yzk0ZmZjYTEsIDB4NTgxZjg4OTIsIDB4NDlmNWEwMzAsIDB4ODNjZGZiMjQsIDB4NTlmOTAwZmIsCisJMHg3ODdjZmRmYywgMHhlMWIyZTUxZiwgMHhhMGE3MmUyOSwgMHg0ZmE4M2MyZiwgMHg5OGFmNTZjYSwgMHgyNTZiZTU0NCwKKwkweGIwZGZkNjBmLCAweDkyZWM5NzM2LCAweDUxOTkxYzgyLCAweGIyNDFlZDdlLCAweDBmMWEwYTkzLCAweDgzM2NhMjI2LAorCTB4N2I0NGFlZmMsIDB4ZDVhYzZjYTAsIDB4OTc1OGVhOGQsIDB4ZGZjZTVkNGIsIDB4OTk2MWU3MTUsIDB4Y2YwYzNkY2QsCisJMHg1ODc2ZTA3NywgMHhmNzk2ZjkzNCwgMHg3MmI3NjEzMywgMHhlMWNmMmNiOSwgMHgyNmVlZmI3MiwgMHgzZTc4NDcxNSwKKwkweGFkNzI0ZTcyLCAweDcyOGNiMWNiLCAweGM3MmRkNTljLCAweGQwNGY1NzdiLCAweDg3MGZhZTUwLCAweDk5YTM4YTI0LAorCTB4ZTUwMDdhODAsIDB4ZTcxZTgzN2MsIDB4ZjNkOGVkYzQsIDB4ZDk3M2YzOTUsIDB4YmYyMGE1OTksIDB4NzJlYTVmMzgsCisJMHhhNDc1Y2JhZSwgMHgyZDJiMzczYywgMHhlZTNmNjJiNywgMHhlMzRlZDJiYiwgMHhmNmQ1NzA5OCwgMHhmYWUzZWYwZiwKKwkweDI3NWZmNjhhLCAweDMyNjBmNTVjLCAweDg1M2NjN2VhLCAweDc4ZTk3OWM3LCAweDVjNzg1NTJkLCAweGFkN2U4ZjYwLAorCTB4M2RmNWEwNWMsIDB4ZjQ0NWZlOWYsIDB4ZDlhYjMzZTMsIDB4OGI2ZjEyNWYsIDB4YjVlZmYxZTcsIDB4YjlmZGYxMmEsCisJMHg5Yzg3YjNlNCwgMHg5ZTdjYTc5ZCwgMHg0YjlkNWNhZiwgMHhlNWY2ZjUzZSwgMHhlMjdhZTY5ZCwgMHhmNTQ3Njk5MSwKKwkweGYwMWRhZmFjLCAweGJlM2MwNjE4LCAweDhhNTlmMWI1LCAweGMyZjEzZTBmLCAweDg3NDhhOWMxLCAweGU3YzAxZGUyLAorCTB4OWQxYjVmYzgsIDB4NGU3YThjMmMsIDB4NTViY2QxMDksIDB4MzlkMzIwZDQsIDB4YjM4NGE2MDMsIDB4ZTUxYTcxNmYsCisJMHgxNTc1Yzc5OCwgMHgzZjEyNzY2ZiwgMHgwZDY0YmQxNSwgMHg4YmY3ODE0ZCwgMHg5YzMxN2RiNiwgMHg3NjE2NmFlMiwKKwkweGYwNWFkYzUyLCAweDA3MmY2MTA1LCAweDFjYTM4NjViLCAweGJlM2MyOTE0LCAweGZjMmY1MjJjLCAweGU3ZWRjNmRhLAorCTB4ZDNiMWVkYjYsIDB4MWQ1MjdjNzAsIDB4YThhMmRmYmYsIDB4NmFkNTc2ZmUsIDB4YzI3OGE3ZDgsIDB4NTBiYjUyYTYsCisJMHg4Mzc5ZjY4ZSwgMHhmZTc4YzdjMCwgMHhiYzY3ZmIxNywgMHgyYjhmNDE1NywgMHhmNWMwZGI2YiwgMHgxYWEzNTE0NCwKKwkweDhhMzI3YmMyLCAweDYzYjRiNmVhLCAweGM3ZDE3MWJjLCAweDk1N2ZmMjU2LCAweGYzYTQ5ZGQ3LCAweDZmMzYxMzE0LAorCTB4Nzk0YWZmMjIsIDB4OGZkYTZjYTMsIDB4NTlkZjExZWIsIDB4MThhZDg3MjcsIDB4NGE1MGQ4OTcsIDB4MWYwMDkwZmIsCisJMHhjNDVlYjgyNCwgMHhmOGMwZmU1MywgMHgzYmNkZTJjMywgMHg4NTAxMDViNywgMHhlZjNmMmZjNSwgMHhhYzcyZmQ0MiwKKwkweGYxMGJiZDc5LCAweDM1OWVmNTBlLCAweDNjNDdiYWRlLCAweDIyMjNmZDY3LCAweGMzODZmMzllLCAweDJmNGI2Zjc0LAorCTB4ZjBjNzljZjEsIDB4Yjc5NDEwMGYsIDB4NGU3OGU2NmQsIDB4ZWM4N2Q3NTYsIDB4YjY2N2U4NGIsIDB4NDdmZWNhM2YsCisJMHhlOWJlN2Q5NywgMHgxZTc4MzVlYiwgMHhlM2E1ZWRhMSwgMHgyNWRmYjA2YiwgMHgwZDcyZmI3ZiwgMHg1ZGIxODljNiwKKwkweGNhZjc5YTc2LCAweGUyODBmODVmLCAweGJlZjdmNWI3LCAweGM4N2YwOWIwLCAweGZlMjllNzg2LCAweGFiMTNmZGJkLAorCTB4ZGY2YjZiMTcsIDB4ZTMxZDM4NzksIDB4N2NiN2RiMDYsIDB4Y2NmZThjOTcsIDB4MjZhZjNiNzksIDB4YWRiY2VmN2YsCisJMHg5NDU4NTIxMywgMHg5MTRmNDM3OSwgMHgxMWU3NDM3ZiwgMHhiNzQ5MWY3ZiwgMHgyOTdiMGRiZCwgMHhkMDA0ZWQ5ZSwKKwkweDU3NjBmNTFkLCAweDI5N2Q2ZTljLCAweDg4ZjY3ZjhmLCAweGQxOGRkY2Y4LCAweDg4ZjQzYmNmLCAweGU1Yjg2ZGM3LAorCTB4ZmY1MTJiYzYsIDB4ZjI3YjcwMzcsIDB4ZWZiOTcxOWMsIDB4M2YyZjNkMDMsIDB4MTQ2ZTNhMGYsIDB4MzdmNWQ3ZjEsCisJMHhmNzJlMzU5YywgMHhmNDAxZmUwNCwgMHg3NGNkZDhiMiwgMHhmNjYxYmFmYywgMHhiY2M2OWZhZiwgMHhjNmJkM2U4NiwKKwkweDAzY2Y4NmU1LCAweDhhNzlmYTdmLCAweGE3M2U2Yzc3LCAweGE1ZThlNTFkLCAweDM0M2M1MGRmLCAweDA3OGE2ZmQyLAorCTB4ZDNhZmEzZTcsIDB4MTFjYTNjZjEsIDB4Y2UzYTczYjUsIDB4YWQzYjlkM2YsIDB4ZDE0ZmRmNzQsIDB4OWU0ODhmY2UsCisJMHg0N2JlYjdkYSwgMHhjZTI2NmE3ZSwgMHhhZWIzYjQzNSwgMHg5NzNmOGYxZiwgMHg5ZDZiNzhjNCwgMHhkMDU3OWUzYywKKwkweDNkN2RlMzAxLCAweGUyMmU3YTJlLCAweGViNWYzOTdhLCAweGM1YmRiZWYxLCAweDFmNmQ1ZWY5LCAweGUwMGZlZTI4LAorCTB4YjVhNWM4ZjEsIDB4YjNmMTEwN2YsIDB4NzI5Mzc0ZGQsIDB4Y2YwNzVlOTAsIDB4ZTNhZDQ3MWEsIDB4NzJmNDJkYzEsCisJMHhmNDdiMWM3NywgMHgzOGFlZWFiOCwgMHgyMWJhMDhmNiwgMHhlYTllNzEzZCwgMHgzODA3NTM4YSwgMHg0OWY5MDQ2ZCwKKwkweDJlNzY4YTNlLCAweDhmMmQ3ZGEyLCAweGEzNTc2ZjdmLCAweGUzZDYzNzlmLCAweGY0MTE3ZGRhLCAweDliZGJjN2Q2LAorCTB4N2I3MmU4YmMsIDB4NTBmYzcxYWUsIDB4NDI2NmQxM2MsIDB4YjU3YzRmNTIsIDB4YmY1ZDFmN2QsIDB4N2Y0YmI0Y2YsCisJMHhlYmJlZmFkNywgMHgxNDg5NTRiYywgMHg1ZWViMWU3OSwgMHg4NmQyY2JlNCwgMHhlY2NmZTQ4MywgMHhmMThiN2Y1YSwKKwkweDdiZmYwOWI2LCAweGM1MzIwYmRiLCAweGRmYTkyZjM5LCAweDUyM2RmYTRiLCAweGJkZTE5NDdmLCAweDdiZmE1MTJkLAorCTB4ZTdkODVkYmYsIDB4NjhmZTdjOGQsIDB4NzIxOWM5N2IsIDB4N2I2ZDNkNDAsIDB4OTc1ZjEzYjYsIDB4NzE0ODNjNmQsCisJMHhiZGQ2NmZkNiwgMHhlMjE4YjVhYywgMHgwOGZlNzAyNywgMHhmNmQzYzYxOSwgMHhhNGUxZWVlMiwgMHgzMGZkYzVjZiwKKwkweDg5NTRlZDkxLCAweGEyOWJjYTc2LCAweGYxYmU1M2I3LCAweGUyOWRhOWE0LCAweDc2ZTZiZDYwLCAweDYzYmRiYjljLAorCTB4YWM3NmVmOGEsIDB4YjczMzU4ZWYsIDB4Y2JkNThmMTMsIDB4ZjZkMTQzOTMsIDB4ZDhhYWVjNjksIDB4MjllNmFmZWYsCisJMHgwZjc0YTNjYywgMHg3YmRmOTM4ZSwgMHhjODYyYmIyMywgMHhjY2U3OWNlZSwgMHgxMTJlMzhmOSwgMHhiYWUyOGQ1MywKKwkweDM4ODgxNmFhLCAweDUzN2E5ZmIwLCAweGNlNTVkZTkxLCAweDc3ZjYxOGViLCAweGUwZDdlMjMxLCAweDAxZGQ1MWZmLAorCTB4OWFhYWY2ODYsIDB4YmY0MmNmZWEsIDB4ZDFkZWE0NDMsIDB4NjQyYzJkMTIsIDB4ZTczY2Y3YTAsIDB4ZWQwZjE0ZTQsCisJMHg5MGQzODQ4YiwgMHgwZjMyMDc5ZSwgMHg2N2VmNThhYiwgMHhjZmFiZmUxMSwgMHgwNTI0YjYxNCwgMHg1MDU5ZjdmYSwKKwkweDdhODAyZWYyLCAweDBjNWZmN2Q5LCAweGQ2N2IzYmYwLCAweDg3ODFjM2FmLCAweGE5YmY5MzY1LCAweDAwNzlkYWNjLAorCTB4MzVlYzJiZDcsIDB4Yzg0N2VkM2IsIDB4N2Y3NGVjYmIsIDB4M2IxYWY5NDgsIDB4ZDZlZjc3OGQsIDB4YmIyMzlmNmYsCisJMHhjNjU2ZDdmYiwgMHg1NTYwODdmNywgMHhiOTk2Zjc4MywgMHhiNzg3MWQ3OSwgMHgyZmU2YmI3ZSwgMHhjYmUzNTc2OCwKKwkweDFhZmU3ZWQwLCAweDg5ZWI4ZjI4LCAweGZlYjRiMThkLCAweDhlMjk3OGU5LCAweDdmY2I1MWVlLCAweGE4YTlhMWVkLAorCTB4Mzk2M2YyZDcsIDB4NGU2ZmU2M2YsIDB4N2Q0MTU1MDksIDB4NmUxYzQ5YWQsIDB4ZWU4MDM0ZGQsIDB4Yzk3ZTI4YWIsCisJMHg3YmE1ZjE0OSwgMHg4NjUyYmViNywgMHhlNmZiNTRmMywgMHg2MDMzMGM1OCwgMHhmYjA5YWZlZCwgMHg3ZWUyMzdmZiwKKwkweDYzZDUxYWFkLCAweDY0MmYzMzhjLCAweDJlNzhjNzhhLCAweDUzNjExOGE4LCAweDNmMjMxMzVjLCAweGZhMTFjOTA2LAorCTB4ZThlMzFhYjEsIDB4YzVkODExM2MsIDB4YTg0ZTdhYTYsIDB4ODk3ODBmOWQsIDB4ZjhmZDgzOGYsIDB4M2Y3MGFhMzksCisJMHhlNTkxMDdkNCwgMHg3NmZkZmNmNCwgMHhkY2JkOGU3ZSwgMHhiYTM5ZWYwYSwgMHg5ZDZiOTdjYiwgMHhlZWFlMWM3OSwKKwkweDMzNDlmNWM3LCAweGU3NDRmZjk1LCAweGIzZGY5MTczLCAweDIzZmU1ZTVlLCAweDdhYWVkZWJkLCAweGUyNjVmYmY4LAorCTB4ZmU0ODliN2UsIDB4NTdhNWQ0M2QsIDB4YjQ3MTdhZmUsIDB4ZjRhMjViZmIsIDB4MmZkZjllOWYsIDB4ZWQwNWEwYjEsCisJMHhiYTc2MmQ5NiwgMHg2N2VmMGJiNywgMHhkYjBlNzNjMCwgMHg1NWZmYmUzNCwgMHhmZGQzMGFlMiwgMHgzZTg0M2IzOSwKKwkweGQzMDk4OTJlLCAweDQ0ZmQzZTdkLCAweGMyM2NiMDNmLCAweDIyZjJkNmNjLCAweDE1ZjRiZGQyLCAweGIzZjhjMzNiLAorCTB4M2U5Y2Q3ZDIsIDB4YjZlOTc3YTQsIDB4OTU3ZjViNmYsIDB4YjE4YmYxODUsIDB4N2QyYmQ3ZTQsIDB4MWYxMTdmZWQsCisJMHhkM2MzNWE5NCwgMHgyZGJjZmVlOSwgMHhlN2Y3ODY1NiwgMHgzYjc5NmRiNSwgMHg0ZGI1ZTUxZCwgMHg5YzI3YTcwZCwKKwkweGI0YWY1ZjY1LCAweDU3YmU2YWRlLCAweDU4ZTM4YzQwLCAweGJjNDJlODY1LCAweGFmM2Y0MTc3LCAweDllOGJkNDViLAorCTB4ZGI4NjMyYjksIDB4OWYxOGY2ZDcsIDB4ZGRlNDg2MzUsIDB4YjFkNDRmN2MsIDB4YzY0MWM2Y2EsIDB4OWU0NWZiZjMsCisJMHg3ZmIxN2FlOCwgMHg5ZDhmZmE4YywgMHgzOGY0Nzc0MywgMHgyNjNmZGFmNywgMHhlNjk5ZWQwOSwgMHg5NjQwNzQ2NCwKKwkweGZhOGUzZDgxLCAweGU0ZWVhOGJjLCAweDdjMWZmNDMwLCAweDZmZGZhMzE2LCAweGY5YzM4OWUwLCAweDczYWQzM2U4LAorCTB4Y2ZiZmVhMTgsIDB4MTk4NzNiZDIsIDB4OTUyMzk5ZTcsIDB4OTJhMjhmMzYsIDB4OGVkMjg3NWYsIDB4ZmFmMzI3YjUsCisJMHhiNTM3OGMzMSwgMHhmN2E2OGI0ZiwgMHgxMmM0YzU4NiwgMHg4ZTFlOGFmZSwgMHg3YThlN2E4ZCwgMHhhYmU3MGM0YywKKwkweDUzMWY2ODM0LCAweDQzZTUxNzZjLCAweDJkMzNmNzZmLCAweDMxYjg3YTQ0LCAweDQ5ZWJjM2M2LCAweGJjZjg2OTBiLAorCTB4MjBmYjZlYjgsIDB4OTUwYTFlMjMsIDB4NzIwNzJhNmEsIDB4NjQyY2Y4NGEsIDB4ODMyY2I1MmIsIDB4MmJkYmQ2ZmUsCisJMHgyOGYwZWY5YywgMHhmMjgxM2Y3NCwgMHg1NWY4YmE3ZiwgMHgzOTMzYTZlZSwgMHg1MThlMzE5MSwgMHg1YzY2MTRlMCwKKwkweGU3ZWIzM2YyLCAweDZmZDUxNDQ4LCAweGNjNjlmYzQzLCAweDY0NjQ1NmVmLCAweGY3OTI2YTk1LCAweGE5NGY1NjE4LAorCTB4N2UyZWNjMDMsIDB4NDMwNTVhNWYsIDB4ZWM0NDc5M2QsIDB4MGMxZmEzZWYsIDB4M2Q3YzZlZDMsIDB4MzgzZjdhNDgsCisJMHgzMjhiYjE4MCwgMHg0ZjA5YmVmMCwgMHhiZjgwZGI5YywgMHgzZWIzNzA2YiwgMHgyYjY5ZTMwOSwgMHg1MzE3ZDcxOCwKKwkweDQ4OGY2OGRjLCAweDAzM2IwMGMxLCAweDU5NTU1NGZjLCAweDAzZGY4ODM3LCAweDJmMTg3Y2MyLCAweGY0MmMyNjQ5LAorCTB4ZjM3ZWU1Y2YsIDB4ODA4M2I0M2IsIDB4ODQzZGY5NGYsIDB4MTU1MGIxNTcsIDB4ODZjMzE4YTAsIDB4OWUzYWVmYzksCisJMHg5NmYzZmJmMSwgMHhlYjhjY2M3ZCwgMHgwNzQxMTI4ZiwgMHg3YTRkZGMxNiwgMHg3ZmJhYzFjYywgMHg1YWEzMDA5ZCwKKwkweDE1NWI3ZDQ1LCAweGRjMWNiN2Y3LCAweDU5Yjg3MzlmLCAweDU4YzNlZDE4LCAweDQyYzcwYjA3LCAweDFjYWExOGVhLAorCTB4MmJiZmNhMzMsIDB4NWYwMzYwMGIsIDB4ZjM5YWM3YmEsIDB4ZjQwMmU1MjMsIDB4ZjViYjQ0NWEsIDB4ZjdhODNmODQsCisJMHhiZjdhODhhYiwgMHhhYmY3YTg4YSwgMHhlM2FiZDViMywgMHgyODM2ZGNhOSwgMHg1OGE1ZWYwMywgMHhmMDJmNTk1YywKKwkweDA5YjNkYmM2LCAweDg2N2UwMWJjLCAweGNjN2YzZGUwLCAweGZiMTVlMzEyLCAweDE4ZDc4NGU2LCAweDk2MmIxYmQxLAorCTB4OGU2ZWJhMDcsIDB4ZmE3ZTIwYzksIDB4NGVhZWRjNTksIDB4ODk2Njk3OGMsIDB4YzNkNzBjMzUsIDB4YmVmZDI0OGIsCisJMHgxODc3ZTY0ZiwgMHgxYjZlNjNkZSwgMHhhMjIzZTFjOSwgMHhjZjAyY2Q5ZCwgMHg1NWJmNzQ4YiwgMHhiMjc2ZjI4ZiwKKwkweGI3OTQ3YWJmLCAweDI2M2U1NmY3LCAweDZmNjc3OTdhLCAweGRlOGQ4OWZkLCAweGVhNWVmODlmLCAweDVhOGQ4ZWFmLAorCTB4NGJkNTBmZmYsIDB4ZjQ3ZGFmNjUsIDB4NzZlZmVlMGUsIDB4YTAzNzI3ZTksIDB4NmU2NzZjZGUsIDB4MWE1NGZkNDYsCisJMHgxNmI3ZmFkZiwgMHg0Y2VkYzI3YSwgMHhkZTk5OWE1YiwgMHhjMGRmYzgzMSwgMHg5YTE3MzE2ZiwgMHg0OWYyNDc5ZiwKKwkweGY0NzJmZTE0LCAweDI5ZGY3MTg1LCAweDYxZjNiYmRhLCAweGU3NGQ1ZTdlLCAweGJlMzE1YzgzLCAweDlmN2NiNTg5LAorCTB4ZGM3OWVlZmMsIDB4NDZjYjA3OGYsIDB4MjVkZmU2MWYsIDB4ZTFhZWVmZjIsIDB4MGZkZGUzZjYsIDB4MWIwZmI0Y2IsCisJMHhjMWQ1YmY3OSwgMHhlMWVmY2RmZiwgMHg4MDFmMDdiOCwgMHg1ZjMzZGRiYywgMHhhMjMzODUwYSwgMHhkZWM1ZGJkZCwKKwkweDY3N2E4NzhmLCAweGRlNDRmZTg4LCAweDllNjAxNTgzLCAweDY4ZTRjYjQ5LCAweGJlNzE2MGY3LCAweDQ1ZTFjZmQ0LAorCTB4OGIzMTdmZGUsIDB4NjZmZGM1ZjksIDB4MzE1OWU3ZTYsIDB4MjJkYmUyNmUsIDB4MGY1NWE0MjUsIDB4ODJjNzllZWQsCisJMHhkMWVmODAyYiwgMHhjN2JlMDRmZSwgMHg5YzU5MmZmZCwgMHg4ZDJlNjZjNywgMHg5YWRmZDdjNywgMHhhNzdmZDI2MCwKKwkweDcwZTI3ODg2LCAweDhiYWY2NmJlLCAweDdjZmU2ZWU3LCAweDE0OWViNWVlLCAweGU1NDU3OWUzLCAweDFlZTlhYzc0LAorCTB4OWJkNTJhYTAsIDB4M2Q0ZGZhOGEsIDB4ODBmMzNkN2QsIDB4MDdhNzZhMWMsIDB4MWYyMThmMzEsIDB4N2UxMjU2ZWMsCisJMHgzZDI0ZjMwYywgMHg1MDg0YWE5NSwgMHgzZjZlMmEyZiwgMHgzN2JiNDdjYiwgMHg1ZWIzZjM5ZSwgMHhhZWJjNGI1ZSwKKwkweDE3N2NjZWNiLCAweGU2NDYxZGZlLCAweDVkY2ZmZjgxLCAweGRmZjNhMWUxLCAweGE3ZmMzOTU3LCAweDVkOTVmZTcxLAorCTB4YTM4MGRlMzksIDB4YjcwNDNmMjcsIDB4ZTE1NzcxZjIsIDB4OGU3YTMzYjgsIDB4N2FmMzRhYTcsIDB4MGViZWRlYzksCisJMHhjYmYyNDVlNiwgMHgzZmQ4NmQ3OSwgMHhjOGY5ZWFkOSwgMHhhZGZiZmQ4MywgMHhkMzBmZDBjYSwgMHgyM2RlM2YxMywKKwkweDE1M2ZjODIxLCAweDI0NzE0ZmVhLCAweGMxOTRkYzcyLCAweGJjNzJmZWQ4LCAweGZmZjQxNDZmLCAweGU4YmY3MTMyLAorCTB4NTIyNjRhYTIsIDB4MDhiNzU3MWUsIDB4MzRhNTFmZWYsIDB4OTEzZWE0NDcsIDB4OGY3MmE2NGUsIDB4OTc0YTdiOGEsCisJMHhkNTI5N2E1NCwgMHg1NmYzNmJmMSwgMHhiNjk4M2RkMywgMHgzNmZiNzkwYiwgMHhhMjVmYTBiNywgMHg0MDJmZTA0NSwKKwkweGI1MmQ5N2Y2LCAweGVkMWRmNjgyLCAweGRlMzA4YWVlLCAweDYwZDJjNzI3LCAweGI5NjFjMWRlLCAweDlhYmYwOWFiLAorCTB4MTNiZjkxOWIsIDB4NDU2YzEzY2EsIDB4NjZiNTUyMTgsIDB4NzE0OWQxMGEsIDB4Yzg3Y2IwNTcsIDB4MDYwNDc1NGYsCisJMHhlMzdkYTJjNywgMHg2OTg3ZGYzMSwgMHhkNjcxMWQ0ZCwgMHhmOGJiMzFmYiwgMHhmYmM3MTM2ZCwgMHhiN2U3MTI2MywKKwkweGE2M2ZiYzQ4LCAweDZlMzA3YjM2LCAweGJiNmJiMWUyLCAweGJjMjJhYmVlLCAweGUzODg3MmMzLCAweDdlZjkzZmZkLAorCTB4MzdiYzRmNmUsIDB4YzA2OTliNGYsIDB4MzI3YjMzYmIsIDB4MDI2N2ZkZTEsIDB4NWUwNTRiY2YsIDB4YWExZDA0YWIsCisJMHhjNGFiM2UwNCwgMHhlMjU1YWZiZCwgMHg4MTJhZGNkZSwgMHgzYmM0MmFkZiwgMHg3Yjg4OGZhNCwgMHgzZDIzMTc3YiwKKwkweGVmMTE5NTIwLCAweGExZDZiZmMwLCAweDdiNDMyNjQxLCAweDUyMGYwZjdjLCAweGI3NWJlMDg3LCAweGIyYTRmYzg1LAorCTB4YmM0M2VmYzMsIDB4ZGUzOTEzNWIsIDB4MDNhMDBlNmQsIDB4ZGRlMDM1ZjEsIDB4YzI0MWY5ODMsIDB4NzhlMGVhYTcsCisJMHgwZTljZjI4NiwgMHhlZjEwNTYwMiwgMHhhNzM5ZjEyMywgMHhiNmZkZTAwNywgMHg4N2Q0MjRkOCwgMHhkNjc4NGM2MywKKwkweDFmOWZjNzEyLCAweGYzZTI5ZmRlLCAweGYzOTBhMjViLCAweDZhMjVmYzQ4LCAweDVkNjA1ZWZjLCAweDhmYjM3YmJlLAorCTB4NzY1YzQ0YWIsIDB4MTE5N2I4OTUsIDB4Y2Q3Njg4ZjEsIDB4YmIwZmMwMmEsIDB4M2Y5M2UzOTgsIDB4MmY2MDIyMWYsCisJMHhmZDYyNDlhNSwgMHhjMDc0MDU1ZiwgMHgzZDg1MjdmYywgMHg3NGM2Nzg4NCwgMHhiNzVmMmM2NywgMHg3NjJhNWEyNCwKKwkweDA0YTc4OGFiLCAweDRiMGZkZjdlLCAweDZjYjRiMjBjLCAweGYxODA0M2M2LCAweDFlNjQxYTk3LCAweGUxZmRmNTg0LAorCTB4YzhmZjMzNWEsIDB4N2VlMjI1NmUsIDB4Yzg5M2NmNDksIDB4NTZkZjJiNmYsIDB4MmY3ZmI4MmQsIDB4NzRkZWJmY2YsCisJMHhlNjllNWJhZSwgMHhmZTEwZjc4YiwgMHgzNWRhMTIwMywgMHhiODcyMTMzZiwgMHhmYTg1ZjkwMiwgMHg4YmMzZDdjNywKKwkweDE1MmMxZjA1LCAweDIyM2YwNmY3LCAweDIxMzFlN2Y4LCAweDdjZWI4ZmNmLCAweDQ4ZTdlNWUzLCAweGYxZTY0Zjk2LAorCTB4MTY5OTg5OGUsIDB4OTg2MmJmNzEsIDB4ZTMwOWUzMTksIDB4ODM0Y2Y1YmQsIDB4YzZkYWQxN2UsIDB4OWZkZDI5NDMsCisJMHg5MmI2M2VjOSwgMHg2NTBlYzZkYywgMHhmOGFmZTQzZSwgMHhmMTBjMWY4ZiwgMHg3ZGZkNzBmYiwgMHhkNzhhMWVkMSwKKwkweGViMWRiZmVmLCAweDBlODNiZjg5LCAweDcxMTU4N2I0LCAweGQ3Y2NhNGNmLCAweGVmNTFjZDkzLCAweGVlZjJhZDhkLAorCTB4YTY1ZmExYjEsIDB4YmVlY2ZlYjcsIDB4NzNmMTFiNjksIDB4MWU0NGU1ZGUsIDB4YmZlMDI3ZDYsIDB4OGVjMDM2NjMsCisJMHhjMTU3NTgxYSwgMHhjODFiZDYyZiwgMHhhNTdhOGM1ZSwgMHhlYmZjNDljNiwgMHgxYmU3ZmU4MCwgMHgxN2I2MjRmOCwKKwkweGM3NTRjZWZmLCAweDVmNTAxYmI1LCAweDI0MDY4MGJjLCAweDZhMmZjMTMwLCAweGNmMTFkOTA2LCAweGZhMGY3MzgwLAorCTB4ZmVhOTU2YjEsIDB4YWMyZjM4YmUsIDB4OGZlZThmOGEsIDB4ZGYyYzY1ZmIsIDB4NWQ2NTcwODcsIDB4YWMyYmYyNmEsCisJMHg5ZWY0N2Q1NCwgMHhlZjU5YWM3YiwgMHg0NGYzMTRhYywgMHg5Y2IzNDRjMiwgMHg0ZmMyZjNlOCwgMHgzOTU3N2Q0NSwKKwkweDVmYjEzYjAyLCAweDkyMjdhN2M5LCAweDFjZGUyNzNjLCAweDUyYTg5ZTdkLCAweGY3ZGUyMGI1LCAweGNiOGMzNTUxLAorCTB4ZTM1NzMwNzcsIDB4ZmQwZjczZjYsIDB4ZTQ5ZjY4YzMsIDB4M2FmMDYwNTQsIDB4N2NlOTgzZjQsIDB4N2Q3MTkwYjYsCisJMHhhZWRjNjQxNywgMHgwNGY1YzdkNCwgMHhlNzE1YmRmMiwgMHgzZmYxMzcwMywgMHhjYjA4MDdjZSwgMHhkZWZjNmExNywKKwkweGU0MmRiYmUzLCAweGU0MjI1ODg3LCAweDY3MjE1MWVkLCAweGZkN2M4NWNiLCAweDhhY2JlNTFjLCAweDI5N2I1OGY3LAorCTB4YWI5MDg1ZmQsIDB4OTA4NzI4OTUsIDB4ZTBjZDhmMWUsIDB4M2ZiOGJjZjYsIDB4MmNjZjVmNGMsIDB4ZmJhMDhkYjQsCisJMHgxNjFjYWIyMiwgMHg0Zjk0MTc5YSwgMHhhZTA3MjFhYywgMHg3NjhmNzYwZiwgMHg3NjQ3ZmZhMywgMHg0ZTAzYjk2NiwKKwkweGZiYTJjZmNjLCAweDJjZjhhNWRjLCAweDM3Y2RmMjM3LCAweDljMTc1OWNlLCAweGM4MTYxZTJkLCAweDJiMTZmNzRmLAorCTB4ZWE0YmY3MmEsIDB4ODk1N2M4ZjcsIDB4Zjc1NDA4ZmIsIDB4ZDVmZDBjY2QsIDB4ZDg1NjI2NGYsIDB4OTYzNWRlMjksCisJMHhlNGQ3ODdjNywgMHg4MWRlMTM2NiwgMHg4NmIxOWQxZSwgMHhiNGNhNWE3NSwgMHhmYmVlYmFlYiwgMHhlYzlmZWFjMywKKwkweGVmODM1ZWU1LCAweDY5NjBkZTg1LCAweDQxYTE3NjQxLCAweGZiODhkNDRmLCAweGM4Mjc5OTI0LCAweGM1ZjQxODg2LAorCTB4MzEyNjhiYzIsIDB4ZDRmNWVmZjQsIDB4Y2RlOGJkMTMsIDB4MmU2ZjVjZjUsIDB4NGRlYmEyOTIsIDB4ZjVkNzhlZGQsCisJMHhkMTdlYTQ2NiwgMHg0YzE3YzVkMywgMHg1NGJmOWQzNiwgMHg3YTQ2NWUxZCwgMHgzZjc0NDg2NywgMHhjYWMzYjI0MiwKKwkweGQ3OTkyZmY3LCAweDMzZDE5YjliLCAweGVjOTVmMDFmLCAweGVkMGJlMDMwLCAweGYxNmZkZDIxLCAweDg5ZTMyOGUzLAorCTB4YWU0NzkzZDQsIDB4MDBkN2U3ZDMsIDB4NGIzNDNiZGQsIDB4ZmEzOTNjZjMsIDB4NzlhYmYzYWMsIDB4ZmQzZmM4NWUsCisJMHg3OTRmY2QwOCwgMHg1YTUzNDdhNywgMHhkOTJkNzM1MCwgMHg2OTc3MGMyMywgMHgxYzJlZjcwYywgMHgwYmJmN2Q1ZSwKKwkweDQ2Yjg3YmU5LCAweDU2YWY5ZmVjLCAweDc0YmYxODQzLCAweDE5NzE2NmI4LCAweDBmNzZkNWMxLCAweDJmZGM2NmQyLAorCTB4M2RlMTc0MWUsIDB4YzhkNmIzNGQsIDB4MjQ3ZTlmYjQsIDB4ZjE0ZTk4MjYsIDB4Mzk5ZmRmOWYsIDB4NjNlMjFiMjMsCisJMHg5YTVkYWMxNiwgMHg2YjM4ZmM4ZSwgMHgzNzNhNTJkZCwgMHgzN2MxMjQ3YiwgMHg1OTgwNmZkOCwgMHg3OWVjODc5NiwKKwkweGJjYzZmZWZkLCAweGI0M2VhZDY3LCAweGRiZTM3YmM3LCAweGZkZDFkNWJjLCAweDI3Zjg1NTNkLCAweDc3OTg1M2FlLAorCTB4NzY0M2FlMDgsIDB4ODY3NGM2YmIsIDB4ZmM4ZTBmODEsIDB4ODJlYjRlYzIsIDB4OGVkODJkMmEsIDB4NThiYWQ1NzAsCisJMHgyNTU1ODM3YywgMHgyODBmYmY0NCwgMHgwZmI1NzFkNSwgMHhmMGVhOTRlOSwgMHg3MzI5OGI1ZCwgMHg0ZjdlZDAyNCwKKwkweGRiYzQ3MmVmLCAweDNiNWY0NTZmLCAweDJkM2ViYmVlLCAweDNhMDI0NWVlLCAweGJiZjI2NGRkLCAweDU2ZDc3ZGYyLAorCTB4YjY2MzQ3ZTEsIDB4NDQ2M2YyNWUsIDB4N2M5N2E3YmUsIDB4NjI5MzhmMTcsIDB4N2ZmOWU4ZWUsIDB4Njg2OWZmYjcsCisJMHgzMTVkZjU4ZiwgMHhlNmI0YmY4ZSwgMHhlODRmOTJmOCwgMHhhMTFmNzk4OSwgMHhjZjhiYzQ1MCwgMHg1YTFiMTc1YSwKKwkweDY2Y2U0NTE4LCAweGIzYzdmMzg5LCAweGNlOTk3ZWM0LCAweGViZDc4NThmLCAweGUzZTczOWY2LCAweDVlOTczZTQ4LAorCTB4ZmFmODg0YjgsIDB4Y2QyYTdkY2IsIDB4YWZjMDY1NmIsIDB4MTdhNWVmYTgsIDB4NTA3ZGQzNDYsIDB4ZTJiYjllMGIsCisJMHhmYzBiOGM3MSwgMHhmOTRjYmY2YSwgMHhjNGVkYTcyNSwgMHhmNTNmZWRjNywgMHhjZTgyMzlkMiwgMHg5ZGY0YTlkZiwKKwkweDVkZjZhZjg4LCAweGRhMDFlNzRkLCAweDNhZDNmZGM1LCAweDdjOWNkMjllLCAweGMxYzZiYzNkLCAweGU5ZGU1MGY1LAorCTB4NzQzYzkxOWYsIDB4YTY2ODU3ZjEsIDB4Nzc5ZTcyODYsIDB4NWU1Y2U3ZmEsIDB4MzFkOWZlZjAsIDB4ZGVlYmVjMzgsCisJMHhlMGExNzcxYywgMHgyY2Q3ODA2YiwgMHgyMTY5MzQ5ZiwgMHhjMmRmOWJkNCwgMHgwZDhkOGFlNSwgMHg3YjFmOTE5NiwKKwkweGQxZjdhYzZkLCAweGM2YmZmMjI4LCAweGI1ZjkzMWUxLCAweGYzOTY1YmYyLCAweDRjYWVjMGY3LCAweGNjOTljNDM0LAorCTB4Yzg3YmRmMTIsIDB4NjVlZmNkM2YsIDB4NGIyMGVlNjUsIDB4ZmExMjc5NDUsIDB4Y2MwZTViYjAsIDB4ZGJiNzcyZjcsCisJMHhkM2Q0ZTNjZCwgMHg3OWM2YmIxNywgMHhkNmZkNjk4NSwgMHhlOGFiY2UzZCwgMHg1M2IwOWU3OSwgMHgxMzQ2NWJmMiwKKwkweDVmOWUzZGRjLCAweDllMzY4ZThkLCAweGE1OGM3MWVlLCAweGQxZjFlZGYyLCAweGI0NTBmZmRiLCAweGMwNTk1YWRmLAorCTB4OGI0ZmEwN2MsIDB4NzliZmZkYzQsIDB4ZDQzNGZiYTEsIDB4ZTNhYjc5MWYsIDB4YjhjMzI0MTMsIDB4NGQ4YTZiZjIsCisJMHgzNTc5NGZmMSwgMHg1ZmRmNzRiOSwgMHhlZDVjZWFmZSwgMHg3NmJjODM1ZSwgMHgzNmNkODVkMSwgMHg0NzQzZTVkMSwKKwkweGQ1MzJlODgwLCAweDQwZTNkZmUxLCAweGYwYTE3Y2I5LCAweDU4M2Q0ZjgxLCAweDExZDNhNzJmLCAweDgyYmMzODJkLAorCTB4YWU3ZGRiZjQsIDB4M2VhN2U3NjgsIDB4OGQ1M2E0OGMsIDB4MWZhYzEzYTAsIDB4ZDI3NDBjYjIsIDB4N2VmOTEzZTksCisJMHgwN2QyZmFlYiwgMHg4YmZkYzUzZSwgMHg0NWVkZjhhNywgMHgwOGIxZWJiZCwgMHhjNzQ0NjVmYSwgMHhmMzgzYTc1ZiwKKwkweDBmZDgyYjZiLCAweGRmYzJmMzgxLCAweGJiZjhhNjY1LCAweGU4MjdmMTVlLCAweDdmNDdlM2FkLCAweDUxZGZmNjBlLAorCTB4OTQ0ZWZiOTQsIDB4MWY1ODUxY2QsIDB4ZTE3Mzg3ZTcsIDB4YzE3ZGJiYWQsIDB4OGZhMmUzMGYsIDB4ZjNhOWM1MjcsCisJMHgwNDE2N2NjMywgMHg3MWFhM2UwMSwgMHhmMWY3YTNmYiwgMHhiNjgyYzQzYywgMHg5NzRmMThmMywgMHhmMTM2MmU5YywKKwkweDAxNzM4YTQzLCAweGZmNDE1Mzk3LCAweDIxMWU3YmEzLCAweGM1MGQ2ZWJlLCAweGJkMTllZDdhLCAweGQ5YzUyNzhmLAorCTB4MTg1YzFmMGIsIDB4ZmZiMzQzNjQsIDB4MTFjMWYxZWYsIDB4MjlmODM3Y2QsIDB4ZGU2MDQ3OWMsIDB4ZjBiZDc5YzIsCisJMHgxYjg2YzdmOSwgMHgxOGVhOTdmYiwgMHg3OWM0ZTY5NywgMHhmNmZjZmFhOSwgMHhiZGUzODNiNywgMHgxZTFkNzBmYiwKKwkweGFiN2IyNzVjLCAweDhlMjU0ODYwLCAweGJmN2M2MGMwLCAweDM3ZjRmNWM4LCAweDE0NWJkZmU4LCAweDY4ZjBjNGZmLAorCTB4Y2FlMmY0NzYsIDB4ZGZhMDk3N2QsIDB4OTliMmFhYjUsIDB4YzVkODU1NTIsIDB4MGNlMmVkMGMsIDB4Njg4ZjVkZmUsCisJMHgyYjVlMDVmNywgMHhjYWUyZWJmNCwgMHhiNWI3ZWU2NiwgMHg3MGRiOTkwNSwgMHgzMjNiMDBjZiwgMHg4YWQ4ZmM5MiwKKwkweDY5Y2Y2Y2MzLCAweDdlOGRjMDZhLCAweDgzZGM0ZDczLCAweDY1ODEyYWEwLCAweDY3ZTg1OTE5LCAweDFhMGNjYzRhLAorCTB4OTM4ZDc3ZjAsIDB4NGYyY2Q3ZWYsIDB4ZmRjNmUzZGQsIDB4OGZkNDJiMTAsIDB4OWE1YjMzZmUsIDB4NzdlNGNhNzIsCisJMHhlNTk5NWQ3YiwgMHhkN2U5M2EwNCwgMHg3YWIwYzc0NCwgMHgxZjkxMjQ5ZiwgMHgxZjg0NTRmMiwgMHgxZmE5OTRmMiwKKwkweDdkYTZjZDg5LCAweDI4YmM0ODhhLCAweDI4MWRmZTM2LCAweGIzZmYwOTg1LCAweDlkZmU4N2MwLCAweDNlNmVhNWE0LAorCTB4OGZjMjk1Y2UsIDB4YWZmYTA0ZmQsIDB4MzYzYjAyMmYsIDB4YzFmNjQ1ZDYsIDB4N2MyYzBiOTIsIDB4ZTg1MzY4N2QsCisJMHgzYzZiMmJiZSwgMHhmMWM1YWYyZiwgMHhmZjcxZDg3MSwgMHg1OWY1YzY0MywgMHhkZTI3NjA5OCwgMHhkNWQzMjYxMCwKKwkweGYxYzIxMjhiLCAweGRjMjEyM2NjLCAweGUwOTc4NTg3LCAweDVjNjNhMzdhLCAweGZjZjgwM2NiLCAweGQ3MjA3Yjc5LAorCTB4YTZmZjc4MDksIDB4MDkwMWYzNmYsIDB4ODFmYzMzZjcsIDB4MzVjZjExOGIsIDB4MDNkMzMwNzIsIDB4NzcyZDdmZTUsCisJMHg3NGI5NjI2NiwgMHg4MTM4ZmFjOCwgMHgzOWUwMTdhNywgMHg5ZjYxODA4NywgMHhkY2Q3ZGY5NCwgMHhlMTNkY2IwZCwKKwkweDExMmJlNjBiLCAweDVmZGY4NmZiLCAweGM3YjdjYzZjLCAweDFmYjAyYWY4LCAweDRhY2JkZjkxLCAweGZkYTI0MmZjLAorCTB4MDc0Y2ZjNDEsIDB4MzRmZGZmOWYsIDB4ZjI3NzJmM2YsIDB4MDdmMTA1NzUsIDB4NmUzZWQ3ZjIsIDB4M2M1MjlkM2YsCisJMHg4N2VmYjg3MSwgMHhiNGRkNzlkOCwgMHhiY2YzNjNlZiwgMHgxMTRmNjg2ZSwgMHhlMDVhZDhlYiwgMHg0ZmIwYzU1NywKKwkweGIzZTJhMTc3LCAweDU0NWQzZjIwLCAweGZkOGRjZjBkLCAweDI3Mjc2MjhkLCAweGYyZGFlODM4LCAweGRlYmQ3NmE4LAorCTB4ODNhZjNjM2YsIDB4NGY0Zjk0ZjgsIDB4OTIyNDdiMjIsIDB4ZWQ3NDc2MmYsIDB4NjllZmYwMjcsIDB4OWUzM2ExZGQsCisJMHhmMWMzODhiMiwgMHhmYWQxZmY0YywgMHhmZGFlOTNlZSwgMHg3NjFjNDVhYSwgMHg1ZWZjYTg3MywgMHg2OWZlM2ZiZSwKKwkweDk5YzUxYzZlLCAweGEzYjhmZGVhLCAweGRhMzM2OTY5LCAweGY1MzQ3N2M1LCAweGJjZjg4OTlkLCAweDNmZTJlMGEzLAorCTB4ZWQ0M2JhNjMsIDB4ZmE4YjEzZGMsIDB4Y2U4OTdlZTIsIDB4YzFmOWRkOTcsIDB4YTQyYzZhZWIsIDB4NDc1ZmRmNWIsCisJMHgyZjNjMWZmNywgMHhlYjNhNzFlNCwgMHgwMWZlOTE1NCwgMHg3ZWY4ZDZlNiwgMHg0N2RmODg1NywgMHhhZTAyYmNjNSwKKwkweDcxNWZkMTU3LCAweGRiNzQzODc3LCAweGYzZGQwMDBkLCAweDM0MDZlODdhLCAweGViZWZhNmY3LCAweDQzZDUwMzdjLAorCTB4ODkzZGRlYTAsIDB4ZjdmNDk0ZjYsIDB4NzI2ZmJkMWEsIDB4MzVkN2JmOTgsIDB4ZTM0NmM1N2UsIDB4OGRhZjFlZTksCisJMHgwZjhmYWZjNiwgMHhlZmY4NGE3YSwgMHhmN2I4OGZjMiwgMHhmOGM3Yzc0ZCwgMHg3N2RjN2M5OSwgMHgxZDc1ZGVjNCwKKwkweGUwM2FjYjNiLCAweDNmYjBkYjBlLCAweGRlM2U3OGYzLCAweDdjZmM0ODlmLCAweDFmYTA1OTg1LCAweGY2ZmE3NDVmLAorCTB4ZTMzZTNmMjAsIDB4YmQ0NWVkZjQsIDB4NGNlYjYyNTcsIDB4YmM5MjA2NTcsIDB4Y2JjZjg1YmMsIDB4YzkwNWMwZTQsCisJMHgwMzEzZmUzMCwgMHgyMTI3MTcwMiwgMHg5Y2ZiOWExZSwgMHhjMDdmYmQ5NywgMHg4MGZiZjljZSwgMHg4MWY3ZjM5ZCwKKwkweDViYWY5ZDBjLCAweGVjZDdjODljLCAweDUzOGQyMjc0LCAweDkyYzc3ZWZmLCAweGJiMWY4N2FkLCAweGM0ZmJmODFkLAorCTB4YmIzZWZjZGIsIDB4ZTM3M2Q5NTIsIDB4OTY5N2U0NDMsIDB4M2UyZTMxOTksIDB4ZmMyMDNkMzIsIDB4N2M1ZDJkMGMsCisJMHg0MzNiYzdjOCwgMHhhMzMyZjJlMSwgMHhjMWNlOTYyMSwgMHg5YjJmOThjYywgMHgzMTlmZGJlZSwgMHgzMmMzYzc5ZiwKKwkweGFkZjg3OWE1LCAweDIyYzI3NWE2LCAweGIzZDJkNzExLCAweDQ0ODNmNDFlLCAweGZlNzMzM2Q2LCAweDY1MTdiYTA0LAorCTB4NDcxZWU2OWIsIDB4OWMzNTkxN2UsIDB4ZjQ0ZTY2Y2YsIDB4NjA4ZTc4YzksIDB4ZjY4OTMyY2MsIDB4ZjIxZjQ3ZjEsCisJMHgzYzAwYjYzNCwgMHg0NWVmMTQzMywgMHhlMGY5OWQzMSwgMHhmYmMyMGQ3ZiwgMHhiOTlhY2E1MSwgMHg5ZTQ1MzQ3ZiwKKwkweDQ4NTNmOTkzLCAweGYzZTFlZDU3LCAweDEwNzNjMjNkLCAweGM3OWYwZTRmLCAweDY5Y2ZkODYxLCAweGRkMzIyYjUzLAorCTB4MzhmN2NmYzgsIDB4NzIwN2E4N2MsIDB4ODI3ZGY1NmYsIDB4MjJmZGQ1NzQsIDB4MGFmYmJjZmEsIDB4MTcxODAxZDgsCisJMHgyN2I3N2I5YSwgMHhiNzI0ZjkwNywgMHhkNGEzZWVkZSwgMHhkMDE4OTRjNiwgMHhiMzBhYjk2YiwgMHgzMWEyOWE2MSwKKwkweDBjNjk4ZWM1LCAweGJkOWE2MWIzLCAweDM1NGZkODUwLCAweGUwZmQ5MTM3LCAweDc4NmJmMWNhLCAweGQzNmU3OWJmLAorCTB4ZmJlMzVmZjMsIDB4Yjc3ODRhZjksIDB4ZGNhYmUwNjQsIDB4YTNiZmI3YTYsIDB4M2YzZTc2NzMsIDB4NTY1ZWZkYzUsCisJMHg5ZmQ2OTlhNywgMHhmMGNkZWFjMywgMHgzODY2OGRlNSwgMHg0Nzg2NmMzMywgMHg2NWMzMzNlZSwgMHg2NzY4MzYzOCwKKwkweGUxMWVmODhjLCAweDg2NTY5ZDllLCAweGRlMmIyYmRmLCAweGY0MzhhNTZjLCAweGEwYWU3MTU3LCAweGU5M2I1ZTc4LAorCTB4NGRjNTA5YzUsIDB4NzEyNzE4ZDksIDB4MDVhNzQ1ZmMsIDB4ZmUzYjk1ZmQsIDB4NTljNTMyZmEsIDB4NjU4YTZlNzQsCisJMHhmYmI4NjcxOCwgMHg4MzE2MThkMywgMHhlZDliYmM3MSwgMHgxOGJmMzBlYiwgMHhkOWZlODc2OCwgMHhiNWY2Y2RlMiwKKwkweGVkYjM0ZjE4LCAweDQzNGY5ZDUyLCAweGVkYjUwZjE0LCAweDRiYmNmYzZmLCAweDA4NmIwNmU3LCAweDZmOGUyZWUzLAorCTB4ZTQ0NWZlN2YsIDB4ZmExYmUzY2IsIDB4YWFmNjFkOTMsIDB4N2Q2MGI0MTQsIDB4ZGQzODQ3YzEsIDB4M2ViZDA4YzcsCisJMHhlMmY1ZTg0NiwgMHhmYzdhZjMzYSwgMHhhZjZlOTcwYSwgMHhmY2UyODdiYSwgMHhlMzgxMjYzNywgMHgyZmIyYjViYiwKKwkweDI1NzdjNTg3LCAweDhjNmRmYjc0LCAweDQwZGQ2N2IwLCAweDc2ODdjZmNmLCAweGQwODg3OWQzLCAweDdiYTE3OWNmLAorCTB4NmJkMTFmMzUsIDB4YjNlYTBjNDEsIDB4MGNkYWEzOGUsIDB4NWM1ZDRiZjQsIDB4Y2VhM2M2NjMsIDB4Y2M4NDk3ZGYsCisJMHgyNGJhMjdjZiwgMHhjZjBjZTdhMSwgMHhjNTVlMzAzMywgMHhlNzE1MjRiMywgMHhkZmEzNjdlZiwgMHg4YmJkN2Y1MywKKwkweGJjMmYxOWRiLCAweDIwZjJlOWEwLCAweDk5MmE3YjhiLCAweGIyYWU3MGM3LCAweDc5YjNlZjViLCAweDA4OWUzMWZkLAorCTB4ZmJiMDM1ZTksIDB4YmI0NDcxNzksIDB4MmViMWZkN2EsIDB4ZGE1ZmNmMmUsIDB4NDQ4Mjc5ZjgsIDB4OTU2Mzg3ODEsCisJMHhlODZlYzhmYiwgMHg3ZDJiMjNiMiwgMHgzODA2ODliZSwgMHg3Mjc3NjZhZiwgMHg3NzZmZTEyZSwgMHhmOTg2YmRmMiwKKwkweGRlYzM2NGFhLCAweDRlMzBiYmU0LCAweDhmNDE0ZWFlLCAweGUzYjkyYjM2LCAweDQ5OGY5ZmI5LCAweDNkNzJlN2M0LAorCTB4MTFmMzEzZjYsIDB4NmZmNTZkOGYsIDB4ZDgxY2IwYjgsIDB4NzE4YzIzZDksIDB4NTczNWY5NjcsIDB4ZTQxYTI2ZmIsCisJMHhiOWYyODdmZSwgMHgzNzEyYjc0ZSwgMHgzOTJiY2JjNywgMHg5Y2YwOTNjZCwgMHhmZjBkNzE0OCwgMHhmZDcxNjE4ZSwKKwkweDgwZGNiNzZkLCAweGNmY2Q1ZWY4LCAweGNjMmI2N2QzLCAweDk2M2M4MzJmLCAweGZhZWRiOTZjLCAweGZjYmNmMDYxLAorCTB4ZWM1ZTUxOTksIDB4MmI3MTU0MGYsIDB4NzhkZTJmM2UsIDB4M2QxNWNlOTIsIDB4OGVmZWUxNmEsIDB4MDUwNGZhNDgsCisJMHgxM2ZhM2Q5ZiwgMHgzOWVhMDE0NywgMHhjYjc1ZWZhOCwgMHg5ZjdmN2EwOCwgMHgyMzliZWMwNSwgMHhkY2VmODNlMywKKwkweGIzOGU0NTA1LCAweGEwNmYwZmZhLCAweDlmMzMzMGY4LCAweDY4NGJkZjAyLCAweDk3YWU3NWJmLCAweGU5ZThlYmJjLAorCTB4ZDE5YmVjYzIsIDB4YTAyZGY3NTQsIDB4OGZjODc5NzgsIDB4MGMyOTdlYmEsIDB4YTQ4OWViOTksIDB4NmZjMTZhZWYsCisJMHhlNDYyMWJmMCwgMHg3ZDcyYzg5MywgMHhkY2U5MDRhNiwgMHhkMDdjYzk3NCwgMHg0M2ZmMDY5MywgMHg4YTZhYTFjOSwKKwkweDA3NmM4ZGNmLCAweGMxOTg1ODIzLCAweGUxODFkYTBlLCAweDliOTcyODc1LCAweGZjMTY5Yzc4LCAweDg4YjY1YjI0LAorCTB4NjFjNDFmNjMsIDB4ZjkxNWM3YmEsIDB4ZjhhMjE4MTEsIDB4ODNkMTM2NTIsIDB4NGQ5OWJkNzgsIDB4MzdkNzU0YzYsCisJMHhjM2Y1Mzk2ZCwgMHg1MmFiZmNiMSwgMHhhMmJmNzNjYiwgMHhlNzI0OWNmYSwgMHhkZDMwZWU2ZCwgMHg5YzRmZGI2ZiwKKwkweDcwZjM2ZjQ3LCAweDhmZWVmZjU4LCAweDY0ZDQ1ZjllLCAweGUzYWViOGE3LCAweGJmZDIzNDI3LCAweDE0OWUzMDBiLAorCTB4Yjc2OGJmY2IsIDB4M2Q2OGMwNTgsIDB4NzhjZmE1YmUsIDB4YWI2ZTUzOGMsIDB4MWZhNWY3ZTcsIDB4NWUzM2VmYWIsCisJMHgxZWJjY2IzYiwgMHhmOWY0NGZhOSwgMHgzOWZlMjBmNiwgMHhiZTdhZmQxYSwgMHg4M2NlMTcyNiwgMHg3NzFjNzg4YiwKKwkweGNjOGE5ZjRhLCAweGQyNzQyODhhLCAweDJhZDQ0YmRmLCAweGQzZmQ3MTMyLCAweGJiYzM4Zjc5LCAweGNjMTRmMDhlLAorCTB4OWZlZmM4NTAsIDB4NWM5YTdlNGEsIDB4ZTgzYTlmZTEsIDB4MDJlZGJmZjYsIDB4YWNhMTM5YmEsIDB4ZWMyNWZlMGYsCisJMHhkZmExZDc5MywgMHhmYmQ5MGJmMywgMHhmNzUwN2I4MCwgMHhhY2FjZmQzZSwgMHhhM2RmOWQwMCwgMHhmYjQwZjQwZiwKKwkweDU2MTYxNTMzLCAweGUyNjZkZjgwLCAweDYwOWMzNTNjLCAweGFlNjc0ZjlhLCAweDcxOWUyODk2LCAweDc4ZjM3MmQ2LAorCTB4ZTM2ZWJlZjAsIDB4YWFjMDVhZmMsIDB4NTYyMmRlYTksIDB4NmFjMTY5NGYsIDB4Y2UyMTdlNzMsIDB4MjczYzJlNDcsCisJMHg4YTc2ZTNjNywgMHhmYWY5Y2Q2YSwgMHg4ZDkyYzBiOSwgMHhmMGQxYWM2NywgMHhjN2QzMzVmNiwgMHhjNzAyZmJlNywKKwkweGEzNmNkZDI3LCAweDJhYjdkZGZlLCAweDY5NzdlZjhlLCAweDZkZjM4N2NjLCAweGU5MjcyYWU3LCAweGEwMTY2MmZmLAorCTB4ZTYyOWRjN2UsIDB4NzMwN2YyZmQsIDB4ZWQyMGIzN2QsIDB4MzdkMzNmOTgsIDB4Y2I5ZTBmYWIsIDB4MmQyM2YzZTcsCisJMHhmOTllNDkxOSwgMHgxM2M1N2ViZCwgMHhiZjAwNzg1OSwgMHhiY2UxODdjZiwgMHg4NTI0ZGM1YiwgMHgwMzZjMjE4NywKKwkweDlmYzExZDUxLCAweDM4MjZiZGUzLCAweDM2NzllMzdlLCAweDZlMzhmYzdkLCAweDNlZjY3M2UzLCAweDllMTE2ZmE3LAorCTB4YjhmOTkyOWIsIDB4MDIyNWY5OGQsIDB4YWQxYjI1MWYsIDB4OThkMTdmMjYsIDB4NzlkMDUyOGQsIDB4NmFhZjllMzksCisJMHgxYWNhZjdhMSwgMHhmNTRkNThjZSwgMHhlYzFkNzk4YSwgMHhiYTA3NjYwMSwgMHgyYjU4Mjk4ZCwgMHg3NTU2NjBlMywKKwkweDI1ZDBmMWU5LCAweDFjY2JjZWQxLCAweDc1NWM3ODEwLCAweDk0NWY1ZTViLCAweGJlZDFjN2RiLCAweDlkMTAyN2VkLAorCTB4Zjg0YTdhNDMsIDB4MDZkODU4YTMsIDB4ZWM4Y2M1ZWQsIDB4N2IzZjI5ODIsIDB4ZTI5Mzg3MjEsIDB4MjZhNmJkMWUsCisJMHg0YTJmYmU4ZCwgMHg2NTMzNjFmYiwgMHgwZTc4OWJmZiwgMHhkMDNlMzJiMywgMHg5OWRhMGUzNywgMHgyYmE1ZjE2OSwKKwkweGMxYmViZjI0LCAweGNmOWQ2ZmU0LCAweDg4ZTRmMGYxLCAweGEyMmE0YjhhLCAweDNhNzViN2FjLCAweDUzZDUyMTNmLAorCTB4M2I3MDQwOWMsIDB4NTk5ZGE3OWYsIDB4MjBjMDZhOWQsIDB4YjhlMzIzMTcsIDB4ZDNkYjhjYmUsIDB4M2E4ZmU3NDIsCisJMHhmZTc0NGFiNywgMHgyMGU5MjlmOSwgMHhlYTdlMGY5ZCwgMHhmZjQzMGY1YSwgMHgwOWQwMmE0MCwgMHgxMjUzZWZmNSwKKwkweGZjZjc4NDViLCAweDM0ZGMzNTY1LCAweDczYTQwZGU3LCAweGUzMTc4YzU2LCAweGM2MWI0YTBmLCAweDFhMGVhNWM5LAorCTB4NjJlM2I3M2YsIDB4YmVlMmQ2MmIsIDB4MjE4Y2NhNTQsIDB4NjFkZjkwMjMsIDB4ODY2ZTMzZGMsIDB4M2NlM2EzZTcsCisJMHgwNzVmNWVkNCwgMHhjMmVhN2JhNywgMHhhMWRjYzY2MCwgMHhjZTdmYmVkOCwgMHhjMzhmMjgxYiwgMHg3Y2JjZTg2MiwKKwkweDk5Y2FlMDBhLCAweGI0MzJlOTQwLCAweGU2NTk1MmNmLCAweDUzMzNiNDZlLCAweGEwNDY3OGE3LCAweDhiOTU3ZjRmLAorCTB4OTE2NDkzYjcsIDB4ZjY4NGRjNjcsIDB4MjcwZTA4ZTMsIDB4ZDZmOTJjM2MsIDB4YTBhZTEzMTEsIDB4ZmNhYzUyNzYsCisJMHgxY2Y4N2E5MywgMHhmYTFiNGRlZCwgMHg3YTA2MWMyNywgMHhjNGM4YTg0ZiwgMHhmMTA2NTNmNiwgMHhhNzBiNTEzNCwKKwkweGJiZmIzZDYxLCAweDc1YTAxZWU4LCAweDIzMzczY2M4LCAweGJiZWYzZDdkLCAweDJlYjgyOTcxLCAweDBiMDZkZmRjLAorCTB4ZmI2M2QwNzUsIDB4OTdmZGY0ZDMsIDB4ZmJlYzgzYjAsIDB4ZjJmMDg3MGIsIDB4OTc5OTRlYzIsIDB4MjRlN2NmYzksCisJMHgxNWY2ZWJhNiwgMHhmYWExZDcyZiwgMHg1ZWEyNDZlMiwgMHhmOWRiOGY3ZCwgMHhlNDdjMzk1ZiwgMHhlYjQyYmYwNywKKwkweGEwODAzY2U1LCAweDU4ZTlmOTUzLCAweDBiY2MzMjE2LCAweDIxYmVkM2U1LCAweGI0ZmNiM2ZiLCAweGVmMWNmNGNiLAorCTB4OTVjNjM1MDksIDB4YTFlYzE0OTcsIDB4YjI5NDNiZWYsIDB4NTA5ZjNhNjYsIDB4ODM4ZTZmNWEsIDB4N2EyNjIyYmYsCisJMHg5NzlmM2FiYiwgMHgzMDU5OTY5ZiwgMHhmOTlhYmI2YSwgMHgyYzNlZTlmOSwgMHhiOTVhMjdkOCwgMHhkM2YzZjM2NCwKKwkweGZjNmUxOTkyLCAweGU4NTM5NDU2LCAweDcxNjljYjM5LCAweDBhNzFmYWUxLCAweDY3YTg0N2NlLCAweDdhYTA5NjQyLAorCTB4ZGE1ZDM3NzksIDB4NzlhNjJkZGQsIDB4ZTFjM2RkYTgsIDB4YThiZmIxMGUsIDB4YjdmNWViZTcsIDB4MzljNGQzNGYsCisJMHg3YmNmN2UzZCwgMHgyMDI4MjU1YiwgMHg0ZGQzY2ZjMCwgMHg1ZGRmYzkyNywgMHhmMDliYjRkMiwgMHgzNzQ1ZjNhMywKKwkweGQwNTk2MjllLCAweGFhZTRhNzgwLCAweDY0MDViMGU2LCAweGZkYjhlOWZjLCAweDAyNWU4NzRiLCAweGNiYTNkOTI0LAorCTB4N2Q0YjNiZjMsIDB4YmYxZjIxNjMsIDB4ZWY5MDYxNmIsIDB4NzkyZWFjZDgsIDB4Y2FiMzc1MjcsIDB4ZjBmZDBiMjIsCisJMHg2Mzg5ZDJlZSwgMHhkZjJmMzA4ZCwgMHgzNWYzN2VmZCwgMHhiMmI3ODExMywgMHg2YmY3ZjI4NiwgMHg2YjdiZGVlMywKKwkweDc1MDZjNjIxLCAweDRjZTgzYjlkLCAweGIwMGQzYmY3LCAweDAwNzYwMjJkLCAweGJiMDBjYzNjLCAweDIzMTNmMjIzLAorCTB4ZTAyMzUzZjIsIDB4Y2RiZTVlMzQsIDB4YmQ5NzRlMTksIDB4ZmI4ZTZkOGMsIDB4ZjQwNTFhZTAsIDB4ZjBkZjViNWMsCisJMHg2NDc5YmM3NCwgMHhkNzQ3ZDU3OSwgMHg0YjhlZjdlMCwgMHg3YmY3ZjhiMywgMHhhZjI0OWFjYiwgMHg2NWEzZDA2NCwKKwkweGU0ODcxZTVlLCAweDMzNjhiNmYwLCAweDlhMWUyMjg3LCAweDUwN2Q0NGRmLCAweDcxYjkyOGQyLCAweGRmYThlMGZkLAorCTB4ZGYxODI2MTIsIDB4YWJkZTE4ZjMsIDB4OTJkM2ViZTcsIDB4NWVmNDgzZmEsIDB4YjEwZmY1YWYsIDB4M2EzZjNjOTAsCisJMHg3NzJhNzNlNCwgMHgzNjJkZmRhZSwgMHhhZjNkZmNjNSwgMHg1MmJiZjZkZSwgMHg1MGI3ODEyZCwgMHhjN2Y3ZWFkZiwKKwkweGE4Zjk2ZGI3LCAweDIwYWE3YmZiLCAweDdkN2RlZDdmLCAweDQ2OWY0OTdiLCAweGM3MmY1YjljLCAweGU1YmEzOGZlLAorCTB4YTNlM2M3NDUsIDB4N2RkMTRlNDMsIDB4ZDYxODdmYmEsIDB4MDc5YTAxZjQsIDB4MmU0ZWYzYjEsIDB4ZmY3NWFiYzAsCisJMHgxNDc4N2E1NCwgMHgyNzc4NWZkYSwgMHg0ZjFmY2UyZiwgMHg3MDRiYTE0OCwgMHgwNTlhN2E1ZSwgMHhlZjc2YzEyZSwKKwkweDM3NjhiZDI5LCAweDgwZWM2YTdlLCAweDVlMGNmMmRhLCAweGRjNGRmMzA5LCAweDAxZmZjMjQ5LCAweGZjMDBjYjY3LAorCTB4YzdlOWRkNjQsIDB4YTRlMWMyZmYsIDB4ZTYwOWJhMTYsIDB4YWZlZmVhYjYsIDB4MWVjZGVmYzEsIDB4YzAzMmQwMTgsCisJMHg4ZmY3ZjAwMiwgMHhlMDk5M2E1ZiwgMHg0MTllNWE4YiwgMHgwNGVhYzJmOCwgMHgxOTZiMGYwZSwgMHgwM2ZiYzMyMCwKKwkweDIzMjY3ZDgzLCAweGEzYmJkNmZkLCAweGExMDlmZGNiLCAweGM1ZmVmNDZmLCAweDg5MWRmNjBlLCAweDg0YWFmYjQzLAorCTB4MmM3ODNiY2YsIDB4NzU3YTA2ZGEsIDB4NGRiMWQxN2EsIDB4ZDMxZjAxZWIsIDB4ZjQ5NjIzZmYsIDB4NWJiNmZhZGQsCisJMHgxZTEzZjNhZSwgMHg2ZjhjN2U4MiwgMHhhNmY4MTE0YywgMHhiYmY0OTE3OSwgMHg1ZjQ0ZjY0MiwgMHhiYTEzMGI5YywKKwkweDZmNGNlOWU5LCAweDcxYmNkMGY2LCAweGI0MTZjNTY5LCAweDBmYTY1MjFmLCAweDU1ZTM3OWE1LCAweGVlMjdlZjk3LAorCTB4ZTllOWRkNTEsIDB4YzRmZTllMjQsIDB4NWJmYWU2ZWQsIDB4NDZiYzUwYjYsIDB4YjI0ZTQzY2EsIDB4ZGYxNzFlYWIsCisJMHgyM2I5MDA2NywgMHhiYTA4NzBmZSwgMHgzYzdjZGM1OCwgMHg3MzE5MGRmZiwgMHg4MDAwMWJkMSwgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZGRmZjAwLCAweGM1OTQ3ODBkLCAweGJiYmNmMGI1LCAweDI2ZWZmZWVmLAorCTB4YjI0ZDliYmIsIDB4ZjM3OWY5MDksIDB4NzExMDA4NDMsIDB4YTkxODkzMTMsIDB4MTg4ODRkZDYsIDB4MjIwYmI1MzEsCisJMHg0OTcxNmI2MiwgMHhjOTMwNDlmOCwgMHgyZDE2YWQ0NiwgMHg1NDQ4NTliZCwgMHg0NmQxMDg4MiwgMHhlMWI4MGEwNCwKKwkweGZkMmI2MjAyLCAweDFhOGM0NTgyLCAweGY2ODg4MmU4LCAweDcyZGZiZDJiLCAweGJkM2ZhZGViLCAweDhhN2UxYmQ3LAorCTB4YjQ1NjQyODgsIDB4ZWI2ZGVhNWMsIDB4MjY2NjczOWQsIDB4NWM5Mzc3ZDksIDB4OWY3YjdhYTgsIDB4YmU4ZjhiZTcsCisJMHhjZWYzM2JjZSwgMHhmZTczMzk5YywgMHhiMzMzOWNlNiwgMHg5MDg2YmIxYSwgMHgyNThlNDI2NCwgMHg0ZWM3MzBkYywKKwkweGU2MzFkZjlmLCAweDIyNGM5ZDE1LCAweGY0MzNiYmE0LCAweGM4NGI0OTljLCAweGM0MjExMjdiLCAweDA5ZjA0ODQ1LAorCTB4MGU3YjY4NTMsIDB4ZDFlZGRmMjEsIDB4YjQ4OTc1MDQsIDB4NzM0ZGUxZGUsIDB4NDRiMmQxMTYsIDB4YzM0NWJkN2MsCisJMHhkNTdmYmRlNSwgMHhkMmIzZTVkZSwgMHhkMzJkMzE3MiwgMHg5OTEyYWJlNywgMHhiZDMzZjU4YiwgMHhmZTVhMGU2OSwKKwkweGE3YWVmZTAyLCAweDlmNTYxZWU1LCAweDU4YWQyNWFlLCAweDdmYmVjMzlmLCAweGU1ZGM4NGFhLCAweDc2ZDRjZmEzLAorCTB4N2QyOTZlM2EsIDB4YjViODlkYWUsIDB4OTE2YjhlOWQsIDB4MGJjYTE3ODksIDB4NWQ2YzE2ZTcsIDB4NzM2YTYxNGUsCisJMHg4OTc4NDJjYywgMHg1MTI2OWJkNywgMHhlNjM2NGVmOCwgMHg3NmQxNTY2YSwgMHhjOGFmYTdiZiwgMHg1MTVjODQzNSwKKwkweDk3YjBjZGUwLCAweGZmNDBmOWQxLCAweDQ0ZDIxYzc0LCAweDNjMzY5NTI3LCAweDM3OTgxY2ZlLCAweDdhZDdhZmFkLAorCTB4Y2YzYTY0YjMsIDB4MzlmZTFkZGIsIDB4ZTM1ZWJlZDAsIDB4ZDBiNDQyOWQsIDB4NzdjMGI3ODksIDB4ODgyM2I0MDUsCisJMHgzYjc2Mzk5ZiwgMHg0MGYyMjdiNiwgMHhmZmZmYmMxOSwgMHhiODk1NGYwOCwgMHg0ZjExNWZlZSwgMHg3NTM0ZWY3NywKKwkweGY4MjQyYzlkLCAweGI3ZmQwNWY3LCAweDJhYTFkN2I5LCAweGJhZDJmYTA3LCAweGNiODcxYTRlLCAweGQwZmZjMzc3LAorCTB4MjRhZDQ4NzEsIDB4MmMzYTE0OTMsIDB4OGQ2ZTIyYWIsIDB4YmZlODM2ZmYsIDB4N2EwN2U5NzksIDB4NTEzNzgxYTIsCisJMHhmMDJmZjQzZCwgMHhlYjBhNGViZSwgMHg4MmZjZTk1MiwgMHg3NmNmMjRmYiwgMHhiMmNmZGVjMiwgMHhlODk1OTIxMSwKKwkweDIxZTYxM2JmLCAweGMzZjc5ZWUwLCAweGQxN2YzNGU2LCAweDNmMmM3Y2YwLCAweDc2ZTZhOTc4LCAweGU0Yjc5YzVhLAorCTB4ZjRlZGFlY2MsIDB4NTkwZjc5ZmIsIDB4ZGI4NjUxMDgsIDB4OWQ3MTFlZDMsIDB4YjhjZjdmZGYsIDB4OWY0OTVjOWEsCisJMHg4NmIwZGVmYSwgMHgxOWZkZWJlMiwgMHhiNjljYjNjNCwgMHgxYTQzNWY3YiwgMHg3M2VmZmYwMCwgMHg3NDNmOTViYywKKwkweDg1MzIxMWY3LCAweGI1ZDk1ZjkwLCAweGQwNDk5ZGY4LCAweGJkZGJlNDgzLCAweDUzYjdlMjg4LCAweGQwMjM0MTIyLAorCTB4ZDIzZDRjYzMsIDB4ZDI4ODYwYzMsIDB4ZmViMDk1YzMsIDB4ZmJlODdkNzQsIDB4ODcyNzA3ZWUsIDB4MDY3ZDc0ODIsCisJMHg2MTkxMDBjOSwgMHhiZWM0MTUzZSwgMHhiZmE5ODk1ZCwgMHgyOWViMDBhMywgMHhiNDRkMDQ5ZCwgMHgwZTY4ZGEzZSwKKwkweDVlODA5NTZkLCAweDUwYTVhMDI4LCAweDVmZWIwOTNmLCAweDA3ZmFkODk1LCAweDM4ZTIzMGVmLCAweDFkMTkzM2RkLAorCTB4NDMzYTM3NzYsIDB4YjYwMDFjYzEsIDB4YzZkZTAwOGIsIDB4NzY5NGEzYTIsIDB4NjQ0ODc0ODIsIDB4YjY5OTk0ZWYsCisJMHhlMzZjN2M2MSwgMHgzYTUyYzE3MiwgMHhiNGRiZTJmMCwgMHhlNGRhYjIzZiwgMHhiMDFmNGYxOSwgMHhiYjk0MzI4NCwKKwkweDRhM2M3MTUyLCAweGJlOTFhYjBmLCAweGZkNDcwNjY0LCAweGFiNDJkMzhmLCAweDM5NGY1YzcwLCAweDM2YTNjYmFjLAorCTB4MWY3ODdjZWYsIDB4MDE0NTkxZmQsIDB4Yzg5OTM3ZjgsIDB4N2QwOTYzNGEsIDB4ZThjM2E0NGEsIDB4ZTFjMGViYTQsCisJMHgxMzRmNWQyMSwgMHg2MGJiODNhMCwgMHg3Zjg3OGEwMCwgMHg1MzZmMzg2ZiwgMHhkODlmZmJlOCwgMHgwODAzODQyNSwKKwkweDQ4NGU1OGNkLCAweDc1ZjU2MTFkLCAweGE0YzcyY2NiLCAweDg2ZDRmMDI5LCAweGRkZjQwOTBkLCAweDAzYmMxYmNhLAorCTB4ZDk3MmJlODIsIDB4ZjNmYjQ4ZDMsIDB4ZWIyMmJhNzMsIDB4ODNjMDM2YTMsIDB4ODA0YmJlMWYsIDB4MjliNzNmZmUsCisJMHhlZmQzMjg1NiwgMHhkM2YyYzBhNywgMHhiZjg3MGJlZiwgMHg3ZGYwMzlmZiwgMHhlMGM3YzAxOSwgMHg2NTE2NmQyNywKKwkweDFmOGMzNGJiLCAweDgwYjlmY2YxLCAweDZmNjllYmFmLCAweDljNjI3OGVjLCAweGQ5OGY3ZWY4LCAweGYwMDdmZmJkLAorCTB4NGUxZWYxNDUsIDB4YjQ1ZTAxNzQsIDB4ZjBmMWFlYjgsIDB4YzdkMWY0YmEsIDB4NWU3ZWI0NGQsIDB4ODJiMWQ2OWIsCisJMHhkNGJmZDNlMiwgMHhmMDE1ZjM4NiwgMHhiZDFhOTVkZSwgMHhlYzhkZTQ4ZSwgMHhhNWE1OTRmZiwgMHgyZmY5ODY1YywKKwkweDk2NGY3NDY1LCAweDYyZTIyODE5LCAweDJlMWZhMmYxLCAweDQ4NWRkMjUzLCAweGQyMzU4N2EyLCAweGYwZTVlZjI4LAorCTB4NTE3ZjgwMDEsIDB4ZjhmN2NjNzcsIDB4NjIxYWJmZGYsIDB4MjFiZTA5ZGIsIDB4M2YwNzE0OGEsIDB4OTI0NTJiYTcsCisJMHgxMmZjZGQ2MSwgMHgzZWJkMzc1YiwgMHg1NmU0MGYzYSwgMHg5ZjAyZGMzYywgMHg4ZGU1YzZmZiwgMHg3Yzc4OGJhMCwKKwkweGJiZTAxYmZmLCAweDVkYmUyNDZjLCAweGU4NGM4MWZhLCAweDgwZDRiZmQ3LCAweDlmZWY4YTc4LCAweGY3N2UxMDkwLAorCTB4NGQwNDg5YjQsIDB4NGJkNmVlOTQsIDB4ZmFlYmQyMTIsIDB4OTAyMTJkMDcsIDB4ZThhNjgzOWIsIDB4NjA2N2MwMGUsCisJMHhkZWI4OGRmZiwgMHgwYWNkMWFlNywgMHhlYTM2NGRhMSwgMHhmNzA1YmYxOSwgMHgxNzFmMThkYiwgMHhkYzgwMTQwYywKKwkweGVjZTc0NzNiLCAweGVlNzNlYmE1LCAweGEwOWVkYTM3LCAweGE0MjA4MDI0LCAweGFkZGEzN2U1LCAweDVlZTdmZjQwLAorCTB4YjNmNTg5YmUsIDB4NWExMGEyZGMsIDB4ZTk4NjAwMGUsIDB4N2ZlMDgxYjgsIDB4NTc4YTExYjYsIDB4YzcxMTk2NjksCisJMHgwYTU3YjEzZiwgMHg4ZmJlYTAxOSwgMHg1ZTQ2MzllMiwgMHgzNmZmYTM5ZSwgMHg4ZGNiMGM5NCwgMHgzODAwYTg0MSwKKwkweDA3MDgyY2ZhLCAweDhlMjM2OTlkLCAweDU5MzM1ZGY3LCAweGQxNmZjNzQ1LCAweGFkMGQ1ZTQ4LCAweDI5MzI1OTZmLAorCTB4MzFlMGNlZDQsIDB4MTZkNWNhYzYsIDB4NGE5MGU5MGQsIDB4NDViZmY5ODYsIDB4ZGVlMGJjNzMsIDB4YTcyNzU2MjIsCisJMHg2MGFjNzk3MCwgMHg4NTEyNDNiYiwgMHgzYWI4YzliMywgMHgwNWZhMDVhMiwgMHg0YmY1YTAzZSwgMHg3ODY3M2VhMCwKKwkweDdmNTY1YTFkLCAweDQ3OTgxN2Y0LCAweDdkMzUxZWNiLCAweDllYWYzZDM0LCAweGJhNTg5MmM3LCAweDE3YTYxOWNhLAorCTB4MTdjMzI5NGIsIDB4ZjFhMTI2YTksIDB4MmYxYjVlMTQsIDB4MjEyMjZhNWIsIDB4ZTk2M2UwMmQsIDB4MmFlMjcyMzQsCisJMHhjMGUwZjRkYSwgMHg1YjIzYTA3NCwgMHhhM2E5MmY2OSwgMHhlMjY5YzBjZiwgMHhhN2I4NTEwZCwgMHgzNmJjZjdmNiwKKwkweGQ0NzdiNjhlLCAweGJhNjEzMjQ0LCAweGNkYmZhNTgxLCAweGYwZDU3OTNiLCAweGFmMzgwYjNhLCAweDRiNDI3ZmU5LAorCTB4N2UxZTM4YWMsIDB4ZWVmMTQxNDcsIDB4ODliYjYyYjYsIDB4N2Q4OGFlYjMsIDB4OTJlZmMwYWUsIDB4MGYyZjRjMzUsCisJMHgxZmUwMmJjMCwgMHg3NWNkZTk5OSwgMHhmZDUyNmY1YywgMHg2MTdhZjI4YSwgMHhhZmQ0MDRkNywgMHhjZTQwZmZhMCwKKwkweGY0YzA5NTNkLCAweDkwM2RjODMxLCAweGFhOGU2ZDMzLCAweDllNzQxY2FiLCAweDE0ZDU2NzY2LCAweGM3MWIxOTQ3LAorCTB4MjdlOTgzNjcsIDB4YTc4OGZlYTEsIDB4MjQzZDc4ZWIsIDB4YjVlNmE1ZGEsIDB4Yzc1YWI3MTYsIDB4MGNmOTQ3NmUsCisJMHg5MGRkMTZmMSwgMHgyYzg4ZTRjOCwgMHhhZmQxNzk2MSwgMHgxMGFiM2Q3NSwgMHhlNmU5MTkzZSwgMHgyODM5Y2RkZSwKKwkweDk3NDgxYjk3LCAweDg5YmNlODFlLCAweGM3NDBmNDg0LCAweDk4MjQ4YzhiLCAweDExNjJlOTQwLCAweDlmNDg5NjZkLAorCTB4ODgxYmQ3OGIsIDB4OGQ3ZWIzMTIsIDB4ODliOTc1MjEsIDB4NDliYjg1Y2IsIDB4N2JiZmJmMDQsIDB4MzU3ZDVjNjcsCisJMHg3ZDY4ZGIwOSwgMHgyZDg0OTFiMywgMHhkNzU1ZWNmMCwgMHg4ZTdkNTBiNywgMHg4NWY3ZDY3YywgMHhlOTNkZjYyMSwKKwkweDhiYmRmMzY2LCAweDNhYTNiYmFmLCAweDc5ZDNmNWE0LCAweGRkNTEzMDZmLCAweDVkMDY4NGVhLCAweDk3NTMzZWI4LAorCTB4MjY3YWUwZjUsIDB4MWU3Mzc4OTYsIDB4MmJmMmJkMDYsIDB4YTUyYjY3OWQsIDB4ZjVmMDNmZGIsIDB4NjYzOWY4MTIsCisJMHhiYzAwYWFhZiwgMHg5YzFhYjU5YiwgMHgwMzYxZjQ3ZiwgMHhkNTI0ZTdlMiwgMHg2YmZlYjBlMywgMHg1OWFlZTQxZCwKKwkweDhkYWU3OWY0LCAweDgwNzVmMzc4LCAweDJjZDY3YjI2LCAweGFmM2M0OGRiLCAweDAwZDRjNTdhLCAweGQwZTBkMzc0LAorCTB4ZDMyYWU4YTgsIDB4Zjk3MmMzYTEsIDB4ZTVmZjhlMGEsIDB4MWNkNmQwOTYsIDB4YTAxNGY3NDQsIDB4YTE1Y2YyYTcsCisJMHg5OTk0Yzk1NywgMHg0NzRjN2NiNCwgMHg2ZTVhM2JlZCwgMHg0M2Y1NjM5OSwgMHg0ZjYwMDM3ZiwgMHgwZWZkZjJkMCwKKwkweDc3ZWVjZjI2LCAweDQ1M2Q3MWU4LCAweGQwNTdjYzU5LCAweGZiMDcxZDBkLCAweDllYzU1ZjMzLCAweDQzNjU4ZTAyLAorCTB4NzQ2MDlmZWQsIDB4YmFmMGY1YzMsIDB4ZWEwZjczNDYsIDB4ZDVmYTIxZTEsIDB4MjJkZmE0MTAsIDB4ZmFmMDFlOWYsCisJMHhmMzJiOTcwYSwgMHhmOGExNmVjMSwgMHgxNDEyODU3ZSwgMHgyZjYwOGZjOCwgMHgzZTI5NWZiMywgMHhlNWE1MmRlNiwKKwkweDc5MTc0ZTU3LCAweDY3NDAyOTU2LCAweGYyYmNkZTRjLCAweDQxNTkzMzFkLCAweGNjZjM3Yzg3LCAweDI3ZmIxZjRmLAorCTB4YjRmZTdmNWEsIDB4ZmFkMDMxNWUsIDB4NzQ2YjQwMDUsIDB4ODg5MTVlZmQsIDB4YmUwYmM2MTcsIDB4YmU4MTA4NjgsCisJMHg3YjMzZDI2YywgMHgxNWZmNjliNCwgMHhmYmQxOWVjYywgMHg3MTg0MmMzNywgMHhjMDc5ZDA1ZSwgMHgwODRhNjlkZSwKKwkweGViMDNiNzNkLCAweGEyOTQzY2QzLCAweDg2M2FhYmM5LCAweDE2Y2JlMGNmLCAweGY0MzliZGY2LCAweGEwYmI5ZmIzLAorCTB4YTQxM2Q1M2UsIDB4ZmYyNmEzZWQsIDB4NzRkNzU4NDYsIDB4N2E4ODkyODMsIDB4YzI1YWQ3ZjksIDB4MzgxNzA5YzYsCisJMHg4NzhmNWUyOCwgMHg5YzdkZGQ5OCwgMHg0ZTMwNDk1NiwgMHhhMWZiMGRiZiwgMHg5MGI2OWE3YywgMHgzM2EyNzNmNiwKKwkweGU1NDNlNzE1LCAweDI3NTlkYTJmLCAweDgyYjYxOGQ2LCAweDM0Mzc1ZGZjLCAweDhmZWQ4NGFlLCAweGQzZDM3Y2ViLAorCTB4OGJmOGY5NjgsIDB4YjRlNTllYzUsIDB4MGZhN2QwNmEsIDB4MDczZDI5ZWIsIDB4YWZiYjMyZDYsIDB4MDE2Y2EzNWUsCisJMHgxNmZkOTBmYywgMHg4ZjU4ODc5YywgMHhiNWM1OWFjMCwgMHhiMjU4MWY1MCwgMHg4ZjkwMTZlYywgMHhjODM5ZjE2MywKKwkweDM3MjMxMjdiLCAweDE2Njg5MWNmLCAweDg2YzZkM2YwLCAweGU4MzBkZWRjLCAweDFlODlmZTk1LCAweDRkYzRhZjU0LAorCTB4OGRkMjlmMTcsIDB4YTkzZGI1OWQsIDB4ZWU4ZGY4NjMsIDB4NWYzZDIxZDMsIDB4MTc0MGZmNmUsIDB4NDNkMzM5NzIsCisJMHhjYTgwNGUzMCwgMHgwZmY4MjI2NSwgMHg1OTRjNzJlNSwgMHhhZDk5NWEzYiwgMHg1NDk1ZTA2MywgMHhlYmE5ZGY2ZSwKKwkweDQ3ZmMxMjUzLCAweDllNWE1ZDYwLCAweDk3Zjc4ZmZjLCAweDE0NWUzMDJhLCAweDRhZTkyMmU1LCAweGE5M2NiZTQ2LAorCTB4YmEwM2NlZjMsIDB4ZjU4NzU0NzUsIDB4ZmQ3YTMxNzUsIDB4OTlkOTgzYTQsIDB4MDc2ZTA2ZjUsIDB4OTYzZWIwOTIsCisJMHg3OTdkNDUwZiwgMHhjNWVlOWE5NSwgMHg3ZmE3MDRmMywgMHhmN2M5ODQ1YiwgMHhjZTFhZjU5MSwgMHg0MDFhYjcxZiwKKwkweDIwNjU0ZDhmLCAweDIzZDA2YzkzLCAweGMxNWZlODU2LCAweDBlOWVhN2ZlLCAweDM5NjllYmViLCAweGJmNTg1OTdiLAorCTB4NGY4MTNmODgsIDB4NDZjM2JlMjgsIDB4MWI5M2VmM2EsIDB4MjliZjhjNmMsIDB4NDU5ZmEwMWEsIDB4ZTVmNTA0MTUsCisJMHg2M2I1MmQyMiwgMHhkMmJkZTA0YiwgMHhlNWQ3NDAzNywgMHhhNDBlOGJkNCwgMHg4YTY3ZjIyZiwgMHhmOWVmOGExNSwKKwkweDUwMzNiNzg0LCAweGIxY2E5N2JiLCAweDMwYTQzYTk3LCAweGFmZTYwYmVjLCAweGU1MzU2YzM3LCAweGI1N2I1ZjAwLAorCTB4Y2RjZjU4MzYsIDB4ZjliMWNhMTIsIDB4MWIwNTk1MWQsIDB4OWVjOTc5NjgsIDB4MTNmZDcwMmIsIDB4MmU1ZDE4MmEsCisJMHgyZjUwMzkwOSwgMHhiMWYyZTU0ZSwgMHhhM2QyMTBkZSwgMHg4OTMzZmUxZCwgMHhmNjg4M2VjMCwgMHgxMzc0ZjY4ZiwKKwkweDY0YWQyOGZkLCAweGFlNDAxZTI0LCAweDE0MjFlOGFiLCAweGQxZjZhNjUzLCAweDU3MjY1ZWQ0LCAweDI0ZTc5NTA5LAorCTB4ZjIxMjZlYzYsIDB4ODkzOGU0MWUsIDB4ZjRkNTAzYjMsIDB4ODhmYTE0MTEsIDB4YTRhMjNkYzksIDB4NzIxM2RjODIsCisJMHg5N2RkOThmOSwgMHgzZTNiNDRlOCwgMHg5N2Q2MTUzZiwgMHg5YjkzMjdhZSwgMHg2YmM0MjViYiwgMHg3ZDQ1NjkzMywKKwkweGQwYzBmNDIyLCAweDljOGY1Y2I4LCAweGJlOTkwNmQyLCAweGNmODEzYzMyLCAweGFlMGU2NzdjLCAweDhiZDIxMmViLAorCTB4OTVlODQ0ZmEsIDB4ZGYyMGU4YjEsIDB4ODhmYmUxYTksIDB4YmM2MGU5ZDEsIDB4OWFmZWMxNTMsIDB4NzVmMDkzNGUsCisJMHg2NWE2YmM3NCwgMHg4NTNjZGMyNCwgMHg1MDUzNmQzZCwgMHg2OTNkMzIzZiwgMHg5ZTEyN2E2NCwgMHg5N2QwY2JlNiwKKwkweDVlMzFmYWYxLCAweGMxZWJjNjFmLCAweDc3ZDMzZDU0LCAweDNkODU5ZDYyLCAweGQ5OGQzYTkzLCAweDg1OTc1MzAxLAorCTB4ZmMwOGE0YjQsIDB4OTRlYWRlMzUsIDB4MjZiYjYxZTQsIDB4YThkMThlZjAsIDB4MWY2NTA5NWMsIDB4OWVmOTA1YzksCisJMHgyYTYyZjk1MCwgMHhjNGM4MGZhZCwgMHhhMTY1N2MwYiwgMHhlZmExZTk3OCwgMHhiN2ZiNzMzNywgMHhkN2NkOTUyNywKKwkweGFiZjQ2N2FkLCAweGQ4YTQ3ZDkzLCAweGMxMTJlYjBhLCAweDk5MzQ2ZjdkLCAweDA1MWU4MWQ4LCAweGU4ZGIzNzNlLAorCTB4MWRmMDI1NzcsIDB4ZWZhMWI3ZTMsIDB4MWNjM2E0OGQsIDB4MmJkNTdkZjMsIDB4MTczZmQ0MjYsIDB4MGM4NWI2NWUsCisJMHhiM2Y4OGY2OCwgMHg5NGJmYjQxZCwgMHg0ZWQwMWJkZiwgMHgwZDhhZjczZCwgMHhhZTM5ZTlmNSwgMHhlZmMyNWQwZiwKKwkweDdlNjExZTQwLCAweDQxYWViZTE2LCAweDAwOGUzNTUyLCAweGM2MzM0YmVkLCAweGY2MTQwODgxLCAweGQ5ODNiMzU5LAorCTB4MjFlZDIzNTksIDB4OTkxMzlmNWUsIDB4ODBjYWU4YzMsIDB4OGUwYmNkZmIsIDB4NGNhMDA3ODEsIDB4N2ZhMDIxZTEsCisJMHg3ZTMyNzE2ZSwgMHg1Njk5ZWMwZiwgMHgzZWZhNDNmYywgMHgxODdhYjNlMCwgMHg0MGM1ZmRmNiwgMHhmN2VkMDZhZiwKKwkweDdkMjkxOGU3LCAweDhiMmVkNzRkLCAweGQxZTc0ODNlLCAweDgzYjU2OTljLCAweGZlY2VhYjdlLCAweDQxZGRkZmQ3LAorCTB4ZDFlZTFmY2IsIDB4ZjNhYzAzMTEsIDB4NDk3MzY5ZjYsIDB4YjdmMmQ4ZWUsIDB4M2UzYmE0MzEsIDB4NzcyZmMzMTAsCisJMHg5Yjk3NTRlZiwgMHg0MGU1ZDU3YiwgMHhiZjdjYmE5ZiwgMHg2NTNhZTZkMywgMHhmOWUxZDk0MSwgMHhjMWI1ZDI4MiwKKwkweDg3YmE3YWQwLCAweGQ1Nzg2YmMyLCAweDg2NjhmYTgwLCAweDEzOTBmZmQzLCAweDdhMjZhZGU0LCAweGM4NmNmMDE4LAorCTB4ZjgwYTc4ZmUsIDB4OWZmZDAyM2IsIDB4NTAzNGYwNDgsIDB4MzExNDhhMzYsIDB4NWY1ZjAzZmMsIDB4YjZjZmNkMzAsCisJMHg2MWI3ODI4ZiwgMHgwNmEzMTFmYywgMHg3NWFkNGNmMSwgMHgxNzM5NDRmNiwgMHhkMmUyN2NlMCwgMHg0MDNjM2Y3YiwKKwkweDk2NjhiZmU3LCAweGRmMDJiZWQ5LCAweGNhY2I2Yjc4LCAweDE4NDQ5ZWMxLCAweDRkZmQ2MDQ5LCAweDhiYmVjMjFmLAorCTB4ZjU4NDZiYjYsIDB4YjY5MzM1M2YsIDB4YWMzNTcwYTMsIDB4ODliMGZhNjcsIDB4NmY4MDEyNDQsIDB4NjlkZGE4NWIsCisJMHgxYmZjNGJhNCwgMHg3Nzc3NmZjZSwgMHhmNGMzY2I0NCwgMHgzNTlkYmI3ZiwgMHhmOTRlMDExMywgMHhlODBmYjIyZiwKKwkweDM3ZTg1MWUzLCAweGVhZGU0ZWM2LCAweDRiZmM3MjY0LCAweDQ2MzI5OWZiLCAweDAyYjY5OWY4LCAweDAzOGQ5YWZlLAorCTB4ZmUzYTRhZmEsIDB4MGNmOTdmZjUsIDB4YTVlMmZkZTUsIDB4ODIzZWUxYWYsIDB4YjMzZTYzY2UsIDB4YzgwYTRkYWIsCisJMHgxZTBmYzVhNywgMHhkZjYyZjdjMCwgMHg4YWQzMmE3NiwgMHgzNmQ3YjZmYiwgMHhhMWQ5NTgxOCwgMHhjZGE5ZjJjNywKKwkweGI4Yjk1ZjZjLCAweDNjYzEwYTU3LCAweDkzMTc1OWE1LCAweDZjMmY0MTJhLCAweDY0MGRkOWQ2LCAweGYxZTM1ZTI0LAorCTB4YjdhNmMxZjgsIDB4ZjVlZmMwMTMsIDB4ZjYxZDIyMDEsIDB4YzdiMzEyN2IsIDB4YjgwOWFkZWMsIDB4MTM1YTUwN2YsCisJMHhhYzBjYmVjMCwgMHg5MDQzZjFiZiwgMHg2YjM3OGI4ZiwgMHg5MDJmNjAzZCwgMHhjZmY0MzY3ZCwgMHhjMzdjZGUyYywKKwkweGU4NTY4NWM0LCAweDRhYTRkM2U3LCAweGI5NmQxM2YwLCAweGQwNTQzYzAxLCAweDdlNjIxN2NlLCAweGY0ZjVjODllLAorCTB4NmFlNWJjYmQsIDB4ZDBmMWY4MDUsIDB4NjJmZjA2NjYsIDB4ZDAwNzcxODcsIDB4ZDE3ZmY1ZDEsIDB4MWFjOTdmMjIsCisJMHhiOTNiMDdlMiwgMHgwODlkZWY1YiwgMHhkYTZjYWQ3YywgMHhlN2Q2MWQzZSwgMHgxYWU5OTk4MywgMHgyMjRiYmY2YywKKwkweDYzOGJjMDc2LCAweDVmYmMwYTY5LCAweGUwM2VjOTJjLCAweDhkZjU4NmUzLCAweDRmNzZiMWI1LCAweGM3Zjk5MzlkLAorCTB4YTU5N2IzMmEsIDB4YWY5MTU4MGMsIDB4NmQzZTgwZTYsIDB4MDhmOTRjZGUsIDB4ZGVmNTlmYzYsIDB4MGQ3MGVlZWYsCisJMHg2YjM0OTVmMywgMHhhMTUzMmRmZCwgMHgxZTc1NjdmZiwgMHg3YjIxYmJlMCwgMHg5MGI3ZDM2NiwgMHg0YzJmZTBiZSwKKwkweGUzOThiNWYxLCAweDk5ZjJhYmViLCAweGE0ZjgyMmMxLCAweGVhZTQwMGI1LCAweDA1YWQxNWUyLCAweDhjZWM1MWY2LAorCTB4NDRkOTNlMjEsIDB4MjEzMjcyZjksIDB4ZjkxMjlkYTcsIDB4MTk5M2ZjMDIsIDB4NjNiZWQ1NGUsIDB4YjU5YTdkYWMsCisJMHhjNjdhODM1MCwgMHhlZGRlMjFlOCwgMHhiNzRhOTlmNCwgMHhiNzFmYjBjOSwgMHg2ZjU4YzkyNSwgMHg3ZDIzZDI0YiwKKwkweDc3YmE3ZmNiLCAweGJjZTg2ZmU3LCAweDJmZmE3NDllLCAweDI2Y2NiZTgwLCAweDZiZDA2MmRlLCAweDQ1NWVkNDRhLAorCTB4MzU0MDVhY2QsIDB4MTM2NDYxZGEsIDB4Y2M4OWFmYjMsIDB4OTJlYjg1ZmMsIDB4MzE1NThlYzksIDB4MTI1MzczZmIsCisJMHgzOTUwNGZkYiwgMHg3M2Y0MDVmMSwgMHgxZjNmZGRlZSwgMHg2NGI2ZmMwNiwgMHhlYzA1M2M3ZCwgMHhjZmM1YzA4NSwKKwkweGIzNWZlMGY0LCAweGRmMjg0YmY2LCAweDAxMWYxZWFkLCAweGNmZjQwOWJhLCAweDg2OGEwYjI0LCAweGMzYzA3MmU1LAorCTB4YmNmYzQ2ZjQsIDB4OThlOTI0ZTYsIDB4YjE0NTc1MWMsIDB4ODI5NzRhOWYsIDB4NDEwNzZlZTUsIDB4ZDRiOGRhN2EsCisJMHg0NmZlZjY4YywgMHg0MDA0Yzg1NywgMHgyYjdjYWRmZiwgMHhlZTQ2YTdlYywgMHhmYjZlMzQwZiwgMHg3NDBiNTc4NSwKKwkweGUzZWM5MjFlLCAweGZlMzBhY2ExLCAweDE3OTg2YzE4LCAweDNlNzFkMmQyLCAweGM0MTc5NmRjLCAweDhmNGE5ZWYyLAorCTB4Yjc1OWQ2OTYsIDB4NWNjYWUzZmQsIDB4Y2U5ZjUzYzAsIDB4OWVhZGVkMDMsIDB4ZGY5ODA0ODEsIDB4MjQ0ZWRiODcsCisJMHhiNjFhZmNjMCwgMHgwZGRlNzE2OSwgMHgxNjUyNGZhMSwgMHgwOWNiMGQxNiwgMHg5MDVmYzY5ZCwgMHg1ZDgyNzYwNCwKKwkweDQyZjhjMmIyLCAweGVkYjg3YzVlLCAweDU2MDU5NGQzLCAweDdkNDAzZmU2LCAweDVlM2EzYTVhLCAweGM5Y2FjZWNjLAorCTB4ZGZmNWZkZjAsIDB4NjY3MmViNjQsIDB4NzIwNDIxOTcsIDB4Zjk4OThjZjAsIDB4MzNiYjQ1ZjcsIDB4YWVmZmE2MzYsCisJMHhjZGZlMTI0YiwgMHgzZmQwMmNkZSwgMHhhMjc5NjU0MywgMHhmN2M0ZTQwNiwgMHgyZWZlNmNlZCwgMHhmMDE2NmY3ZCwKKwkweGJhOTI0N2U1LCAweGI1MmIyNTlmLCAweDUyZTU0NDI0LCAweDg0ODk0YWUzLCAweGYzM2ZjY2E4LCAweDIwNTk0YmRjLAorCTB4ZmVkYzNmZmYsIDB4MGM1ZDU2NTIsIDB4ODlkZmYxN2MsIDB4NmE0OThkZTcsIDB4YWZmMDlhN2YsIDB4MGNlMWY0YmEsCisJMHg2M2NlYWYxOCwgMHgzMWNjN2U2MCwgMHgzZGEyYWJmYywgMHhhNGZjY2Y1OSwgMHg4MTZiOTQ4MywgMHg4Mzc3YzUwZSwKKwkweGQ4MmY2NjBkLCAweDE4YzQ4M2JiLCAweDVkNWI5NzAyLCAweDdhZDdmNzNmLCAweGQ4MmVmOWJkLCAweGUzZWY4OGQ3LAorCTB4ZjQwZDVmZmEsIDB4ZmE5MmUxNDQsIDB4NTgyN2Y0MjQsIDB4OWYyOGEyOGEsIDB4NzdmY2I0YmYsIDB4OTE4Y2Y1ZDEsCisJMHg4ZDlkNzRmZiwgMHhjNmNkNGViMCwgMHgwNDcxZTFlOCwgMHg3ODBmNDNlOSwgMHg2NTU4YjdkMywgMHhlZDI5NTdkMCwKKwkweGY3YTJiZThjLCAweGU1OWY3MDZiLCAweDgxNGMyNzMyLCAweGRkM2U4MGI4LCAweDc2ZjkwNTZkLCAweDQzYjk4MTdkLAorCTB4YjNlZjA4OTMsIDB4MzMzZWQwNDIsIDB4MGJiZjEwYmQsIDB4MGZmYTMxNTYsIDB4YzNmNDEwYTYsIDB4MDk1NjkxYTUsCisJMHhlNjc2YjRmZCwgMHgyMGE4Y2ZlNywgMHhmOGI0NTVmNiwgMHhlNzY2MjRiMywgMHhiZDY3ODliOCwgMHg1ZmQ3MGYzNiwKKwkweGM3MDczOGMyLCAweDQwMGZkMDhiLCAweGNmMmYyMDQ3LCAweDIzYTQ0NjQ4LCAweDdiNDI1ZmE5LCAweDlkZTlhYjU0LAorCTB4NDU4ZWZkMDcsIDB4YmFjNTJiNTcsIDB4MmExYWJhNzIsIDB4ZWFlODlkZmYsIDB4MjNjNzQxNDksIDB4MjBhZmNhZTgsCisJMHhhMzhkYjk1ZCwgMHgyM2Y3MTVkMywgMHgxMjdiNzY1ZiwgMHgzNmJlYzFmNCwgMHgyZDZiZTM5NSwgMHhmYmQxM2Y5NywKKwkweDJlYWZjMjhkLCAweDc5NmI3Y2MxLCAweDZiNDZiNTdmLCAweGM0N2EwYjU4LCAweGQ2MzhmYmEzLCAweGRhODliYzNmLAorCTB4NGE3ZmIwYzUsIDB4M2U5ZWJiMDMsIDB4NTdjZmI1YzcsIDB4NjQ0OGRkNzAsIDB4OTYwOGZjMDAsIDB4MmZhODhkYWIsCisJMHg3MjQ0ZDMxZiwgMHg5ZDQ5OGVjMCwgMHhlODFiYmFkNCwgMHg1MTVlNzUyMywgMHgwYmVlM2I0OSwgMHgxN2EwMWMzMywKKwkweDdmYTJkNzQwLCAweDFmMzRlOTc0LCAweDFjNTgyM2IzLCAweDhmNTMzYTI4LCAweDA3OTY5Y2ZiLCAweDhlY2M3ZDJiLAorCTB4MDk3ZTQxYTgsIDB4YTAyOTM2YWMsIDB4ZTdmNWE3MDcsIDB4MDhmYTA3MmMsIDB4MDMxZTIzMmMsIDB4ODZjZjcxZDIsCisJMHg5ZGNmZTA0NSwgMHhhYzgwZjU2ZCwgMHhiMjI1ZjExMywgMHg5ZDc3Y2Q1MiwgMHgwNTUzOGIxMiwgMHgwZjE4MjI2ZiwKKwkweDBkMzM4ZTFiLCAweGU4MjFmOTZjLCAweGY0MjJjNmZmLCAweDhmZjkwYzliLCAweDhkZWEwOWYzLCAweGQ2NDM4ZGNiLAorCTB4ZGUyMTM2YWQsIDB4ZDA2OGZjNDUsIDB4MjU3NDExNDYsIDB4M2ZiMTkxZmEsIDB4N2E2NDY4OTIsIDB4NDA3Y2E0NjgsCisJMHgwNTRhNzNmZiwgMHhhMWViN2YxMSwgMHgzY2NhMmU5YywgMHg1ZmY4MjNkZSwgMHg0NTZjYTNjNCwgMHhjOGIwMWNiZSwKKwkweGJmMzk5YzJiLCAweDA0OWM0MzMyLCAweGIzNmM3N2ZjLCAweDAwZmQ4NDE2LCAweDE5NTk4ZGZhLCAweDY5NGZjYWRkLAorCTB4NTBlOTIwMjgsIDB4YWFhYjlmZmIsIDB4YmNjYTYyMzMsIDB4YzFmN2QwZmQsIDB4NWY1NzM3NTUsIDB4YTg3N2ZhOGIsCisJMHg3YWE2YzAxZSwgMHgyNmJkOTQ1OSwgMHhjMzU1ZTIwNSwgMHg4M2I1MzJmNSwgMHhmZjEyN2Q4ZCwgMHgxYmU2ZTJiZSwKKwkweDk0MWVhYWE4LCAweGVlN2ZmOGM0LCAweGQxMWY4MmY0LCAweGM1ZTM1NDQ0LCAweGY1YzcyN2MyLCAweDViZmRhM2FmLAorCTB4MzgzZWRlMTUsIDB4ZWZlODI2ZWUsIDB4N2U1MTEyYTksIDB4ZTE0YmQzYTAsIDB4Zjc1M2FiNWIsIDB4ZGZlNTI4ODcsCisJMHhmNzhjNDE0MywgMHhhZjBlNTM3ZiwgMHg2YzMxOWQ1YSwgMHhlMTdiNTAxZiwgMHhjMzY1NDljZiwgMHhlZmEzYzI3NiwKKwkweDQ5NWQ3NmQ1LCAweDNmZDhiMmM3LCAweDE1ZmU4M2Q1LCAweDkyZTAzZWZhLCAweGU3ODkwZWQwLCAweGY0OTcwNGQ3LAorCTB4NjU2YmVjZDUsIDB4ZTA5ZDdkODQsIDB4NzRmNWY2NjIsIDB4MmZiYTQ5NjAsIDB4NTgxZGY5NDEsIDB4ZGY2MDIzZTYsCisJMHhlOWM0YmI1MiwgMHhlM2U0YmI0MiwgMHhmZDY4MDc1MywgMHgxZjlmNTliOSwgMHhiYjQwYTcxZSwgMHhiZWMxZTY3YiwKKwkweDQ2NTE3MDJhLCAweGE5ZDgxYmY5LCAweDZmOTQ0OTBkLCAweGFlY2NmZDhjLCAweGUzMWNmYWE2LCAweDk2N2U4MjA1LAorCTB4MzhmZDM5ZDgsIDB4OTdmYzA0ODIsIDB4MzJhNGZiZGQsIDB4NWE0Mjc3YTAsIDB4NmJhMzZlYjMsIDB4Mzc5NzAzZjksCisJMHhmYmUxYzcxMywgMHg5Nzc5ZjhjZCwgMHgyMDVmOThiYiwgMHhhMWI1NTg1MCwgMHgyNmRmZmEwMCwgMHg1NjE3YjAxMSwKKwkweDU5NGYxZTE1LCAweDYzYTlmYjgwLCAweGJlNjMwYjI5LCAweDBhN2JlYzZiLCAweDUzYjhkOWYxLCAweGNiMWUyYTM3LAorCTB4NzgwNGUxYTksIDB4NDVmOTc5NmMsIDB4MzM4ZGM4MmYsIDB4NDI2NTA5MjEsIDB4MDRlYTFjODMsIDB4NDFhMWI2YmIsCisJMHgyOTIxMTYwMywgMHgwM2JmY2QwZCwgMHhmNTczMWZlMywgMHg1ZjlkM2M2NCwgMHg4MTc3ZDcwNiwgMHhhNzA2Yjc5ZCwKKwkweGJmZTliY2MyLCAweGQxYjU3ZDEyLCAweGM0ZTUwOGI3LCAweDJiNDZiOWM2LCAweGViMGE5MWM2LCAweGQ4M2M0MWVlLAorCTB4YzNjMDVlY2QsIDB4MzRhYWMyYWEsIDB4ZTY2NWE3MTgsIDB4NGRjNjNiNzQsIDB4ZjUwNzNkYTgsIDB4MDc3ZTBmMmQsCisJMHhhZTAyNDVmZCwgMHgxYWJhN2Q1NSwgMHhhOWNhNzdiMCwgMHgwYTBiZjc1ZCwgMHg0NjczYTY3NywgMHhmNWYyODc4ZCwKKwkweGUyZWVlZDM4LCAweDU3MTBhY2ZiLCAweGZmOGU1ZDFmLCAweDE3NDY2NGJmLCAweGY4MmY5MjFkLCAweDhmZjQ1MmVkLAorCTB4Njc3ZjU4OTIsIDB4MWZiMzFmNzYsIDB4NTVlOTcxNmYsIDB4NWM1YmYxZmUsIDB4MzZiZGFlY2MsIDB4ZTQwNjk5MTgsCisJMHhiMDFlNWZiMiwgMHgyMDFkNWQ4MCwgMHg1ZjYwNGZkZSwgMHg2NTU2N2M0ZCwgMHg5MzEzYWUzYiwgMHgwNTM2YWU1ZiwKKwkweGQ3NDY2NmZkLCAweDQyNTc2M2MwLCAweGVlMzJiNWZkLCAweGYwM2M4ODY3LCAweDVjZjcxODYzLCAweDhhYjNjYmE3LAorCTB4ZjI4MDNlNzAsIDB4OTAyMTQ1ODMsIDB4ZmU1Y2ZiYzcsIDB4OTZmYWMyZWYsIDB4ZGNmNTdiNzMsIDB4ODMxNjM3Y2IsCisJMHg1ZmQ4NTE3ZiwgMHg1MDk5Y2Y5ZCwgMHg5NGRhNzY2ZiwgMHg0ZTQwNmIyNywgMHg3OTY2NDlmZSwgMHg2NDY4YzYwMywKKwkweGM5NjdlZDFhLCAweGI3MWM0ZWU3LCAweDg0ZWExNGQzLCAweDY4ZjYwZmY1LCAweGVhYzliZWIxLCAweGRiZjQwNDVmLAorCTB4MjlmYWViNzgsIDB4MGQ2MDg3OTgsIDB4ZDUxZTgwMTUsIDB4ZDAwOGJhYjksIDB4YTBiZWRkMzEsIDB4ZjJlOGM1MWYsCisJMHg0ZjIzODgxMSwgMHgyNTk3Y2UwYiwgMHg3NjcxMTdkMCwgMHg2M2YwMzRjZCwgMHg4NWM1YmVlMSwgMHhjZTJhZGM3ZSwKKwkweDE1MjllMzFmLCAweDJiMjIzMjljLCAweDM0OTE3Yzc0LCAweGY5YmNlNzZjLCAweGJjMzJkOWU3LCAweGM2OGZmNjE0LAorCTB4ZDVlZWZjYzgsIDB4ZWMwNGNkNzMsIDB4ZjQ0OGYyNWMsIDB4ZjhmYzA2YjAsIDB4N2IwMTA4YWUsIDB4YzI1N2I5YjgsCisJMHg1ZjBiOWE3MSwgMHhlNWZlYzNkMCwgMHhkZmM2NWVlZSwgMHhhMGRmYmUwMSwgMHg3OGMyY2JmOCwgMHhlZGMyY2I5NCwKKwkweDY3NDYwZTgxLCAweDFjNzg3MjI0LCAweGI2NzlmOWUwLCAweDc2ZDA4NDllLCAweDQyNTc3ZTMxLCAweGMwNzkzMzk2LAorCTB4ZjhmM2QzZmIsIDB4MzdmNzMzNDMsIDB4ZjU4ODRkNTEsIDB4Y2VjMjVjYWIsIDB4NWI4ZWExNTgsIDB4NDlkNzcxZjAsCisJMHhmMDE2YWYxMSwgMHhmY2E5MmM1YSwgMHhjM2Q5ZTJlNCwgMHgxODNjNGZiZiwgMHgxYmZjMGU5ZCwgMHg3ZTA1ZjRhNSwKKwkweGNjZDIwZGE3LCAweGYzYTc1ZTdiLCAweGM5MzY1MGRiLCAweDliOThhNjAzLCAweDA0YjY5MzkyLCAweGE0NTI1M2RlLAorCTB4ZmJlZDJmNzgsIDB4MGRkMDNhNjQsIDB4YWZjODIxYTksIDB4ZGE5NTdkMmQsIDB4ZWI4YjJiNjYsIDB4YTU4YzVlNjAsCisJMHg1M2VhMDdiNSwgMHhmZDQ0MmFlZiwgMHg1OTkzNzEwYywgMHgxY2IzZmRmNCwgMHhlNjU2NjlhZiwgMHgwOGFmNzNjNywKKwkweDM0MWM0MGU2LCAweDllZWZhMGYxLCAweDJiZmM2MWQ3LCAweDRkODdlOGNjLCAweDczNjM2YmE1LCAweGY4MjU3M2UyLAorCTB4ZjhhNGRjYmQsIDB4Nzc2N2U4MDAsIDB4ZjAwMjUyYWQsIDB4YzQxZjc4ODgsIDB4MGQxNjY3MGIsIDB4M2QzOGUzZTcsCisJMHg3ZDJiNzc5MiwgMHg5ODM5NzZlZSwgMHg2YTQwY2VkZiwgMHgxZjc4NWUwMCwgMHgxZmM3MGViMiwgMHhlMzA3OWZjMSwKKwkweDllMGY3YzQyLCAweDMyYzJkMmU3LCAweGMwYzlmZmZhLCAweGVmYjhlZDk2LCAweDQ4M2U2MDM3LCAweGVmMWJkZjZkLAorCTB4MzVhZGZlODAsIDB4Yzc4YzVlOTIsIDB4ZDUyZGQ5YzYsIDB4MDJiZWI3ODksIDB4ZjY3ODNmZjQsIDB4MDE4Nzk2ZDQsCisJMHg3YWY2ZGJhZSwgMHhjZTI1ZWYzMCwgMHg5YmZlYjkxZSwgMHhiMzNmM2VjYywgMHgzZjAwYTJkZCwgMHg5YjcyZTU2YywKKwkweDI3Yzg4ZmRhLCAweDNmNmM1ZGMxLCAweDFlNDc2ZjE5LCAweDI3ZjdhOTc1LCAweGRkYWZlNTQzLCAweDA1ZjA2NDhlLAorCTB4MGIzY2IzYjcsIDB4N2MwM2RmMjEsIDB4NzBkODM3ZmYsIDB4ZDdmNDAxM2UsIDB4MTNjMTBkYmYsIDB4OGRiMjBmOTcsCisJMHg4ZmY0ODNlNywgMHhlNmYyMGY5ZSwgMHhlODEwNGIwZSwgMHgwOWFmN2NlMSwgMHg4ZjMyOTJmZCwgMHg0NWI1OWQ3YiwKKwkweDc1MjQwMDFmLCAweDAxY2YwZTM4LCAweDcyNTgxYjc5LCAweGNhMWFlN2U2LCAweDhiMGY3MjdmLCAweDhmMTJjOTIzLAorCTB4NGI0YWZkMzMsIDB4NmJjYzVjNTgsIDB4ODA4YmZmMDcsIDB4Nzc0Yzc2NWIsIDB4M2U0MDhiN2IsIDB4NzEzNzc5YjIsCisJMHhiMzkzNTFiZiwgMHgyZWYxNjE0MCwgMHg5NGQ0Mzc5NiwgMHg3YjAwMmUxMCwgMHg4N2FlNTVlYSwgMHg1ZTJjY2M5YSwKKwkweDg3ZDBlODM1LCAweDI2YTM1ZDYxLCAweDE4NWQxZmZmLCAweDkzZGY2MmQ3LCAweGQ4OTQxYTVmLCAweDg4NGY1NmI4LAorCTB4MGEyNzc1ZDksIDB4OWQzZDYxMzUsIDB4MDdkODBmNjcsIDB4NTlhYjZlYjAsIDB4OWYyODZiN2MsIDB4YzdhMWJmNjAsCisJMHg1ODkwZTJjMCwgMHg0MWNjZWMxZSwgMHhlMjJmNTkzOSwgMHgzZjk5ZmI1NiwgMHhhN2M3OWVhZSwgMHhmNDVhY2M0ZSwKKwkweDc0NWNhNDBjLCAweGIwMzVhZDQ4LCAweGFhYjBiYjNmLCAweDBmZThmZDEyLCAweDlmMTMzOTNjLCAweDdlZDUyYmY1LAorCTB4YTdlMDQ1ZmYsIDB4MjM4ZTFiY2YsIDB4MWQ3YmZmMGIsIDB4YmQ5OWU4ZjEsIDB4ZDQ0N2VjM2MsIDB4NTk0NWZiNTAsCisJMHhiZTgxNTcyOSwgMHgxNWY2MjFjYywgMHgyMDk1ZmYyMCwgMHhlOWFiYWQ1ZCwgMHhjMTNlODNiMywgMHgxMjM0OTc2OCwKKwkweGE3NzIzOWQ4LCAweGZiZWIwY2NiLCAweGY1MDY4NzY4LCAweGUzNDNiMDU0LCAweGNmMDI3Njg1LCAweDhmY2NjOTM5LAorCTB4ZjMzMjRkNzQsIDB4MGFhNWQwNmIsIDB4ZDllMjM4YzEsIDB4MDc3MWUzYTEsIDB4YTI3MmRmZGUsIDB4MjM1M2MzMDksCisJMHg3NmEzZTdiMSwgMHg3ZDM0NjZiOSwgMHhkMGViZmEyZCwgMHg0ZmMxMWFiNSwgMHhhMGQ0Y2QxNywgMHhkZTgyZmJkZiwKKwkweGM2ZmQxNzNiLCAweDc5MDIwMmNlLCAweGQ2YjYxZDU0LCAweDFlYWMzNTk1LCAweDI5ODJlNzc5LCAweGViZmFjM2VhLAorCTB4MTI0ODY2NjQsIDB4MzNmMjA5YzUsIDB4Y2JlNzk5MzUsIDB4NjE2ZGUxYzUsIDB4MWYxY2JhOTcsIDB4YTkwYzY5OGYsCisJMHgzZmM0ZjVjYiwgMHhjNThmMmQyMSwgMHhhN2RmNjIwZiwgMHg3NWY5MzMyNiwgMHhjNzBlNTU2MSwgMHhlM2YzMDdiNywKKwkweDY3OTdmY2M0LCAweDMyNjliYzMwLCAweGIzMzczM2Q5LCAweDQxZDAyZTZhLCAweDczOTdjNDJlLCAweGFiZmNjOWUwLAorCTB4N2YwODI2NzQsIDB4MDkyZTc1ZWUsIDB4ZGUwZTIzZTksIDB4ODBkYTMwMGUsIDB4M2M1OTNhYmUsIDB4M2Y4NTZmZjQsCisJMHhlNGNhZWUxZSwgMHhiYzFmYWUxNCwgMHhkNjVmODg2ZSwgMHg4ZjE4ZjVkYiwgMHg0OTNmNWNiZSwgMHgwZTVhYjI1ZCwKKwkweGZlYmY5NTBkLCAweDI3ZGIyY2ZkLCAweDllNzk2YTc1LCAweDUwZTUxZDhkLCAweGU1Y2Q5ZDlkLCAweDExZDllNDg0LAorCTB4NmE1NmY3ODYsIDB4M2EzY2MwMmYsIDB4M2Y2MDI1YjUsIDB4OGFkNWJiNGMsIDB4NmZkOTY4ZjMsIDB4ZjM3MDNmNDIsCisJMHhkMDJjODFiMiwgMHgwMzU1MmRlMywgMHg4OWI3MTAwNSwgMHgyYjQwMmZjNywgMHhkYjQ1ZjkwYiwgMHhmZWU4YjlkNSwKKwkweGQ4ODRlYzAzLCAweDRiNWYzYzc2LCAweGZlZjU2NzFkLCAweGY2MGNiOTIwLCAweGJmNzYyNzM5LCAweGI3NmFmYTAxLAorCTB4ZmQxNWY1MDksIDB4ZjAwNjAzYmYsIDB4ODM5Y2JjYjMsIDB4MzY4N2NjZjYsIDB4MGJiNDFiN2YsIDB4OWU1YmMzOTgsCisJMHg4NWJiMDFjZCwgMHhmZGNkNGRkOSwgMHgwYmIwMWU4NiwgMHhlMjYyM2FlYiwgMHhkNTlmZjA3YywgMHg1OTFmYjhlYSwKKwkweDNiZmY0NGU5LCAweDZmYmY1NmU5LCAweGRkZjcxNGQ4LCAweDE3NjAzODg4LCAweGJkM2FmM2FlLCAweDNiZjAyMjdmLAorCTB4N2Y5ODNiZDUsIDB4ODM1MWI2NzAsIDB4NWFmNTAzNzksIDB4Yjc5MDIyY2YsIDB4N2I2YTRkNjcsIDB4YWQ4ZGFjZmMsCisJMHg3NWExOTZkNywgMHhiNWJkYTBmNiwgMHhmNjc1Y2M2NSwgMHhkNzNhYzAxNCwgMHhiNjNmODg2YiwgMHg2NzU4NjY5ZiwKKwkweDdjNGRiZWJhLCAweDc4YmVjZjlkLCAweGYzYWMwMTc1LCAweDJlYWZiYmM3LCAweGE3NWU3NTgwLCAweGRmMDJmMmViLAorCTB4NWJmYzM5YjQsIDB4MjdiZjY5OTMsIDB4M2RhMWYwNmYsIDB4MmY1OGYyMjUsIDB4MjRmNzFlOTcsIDB4NDMyYmZkYWIsCisJMHhmZjIxZmZlNSwgMHgzMGZhNThjYSwgMHg1YTg3MDQzYywgMHg0YWY0YmExZiwgMHgzYTgzYzgwNiwgMHhkNWJmZTFhMywKKwkweGFhMzdmMDhiLCAweDQwNjhjZjFmLCAweDNmZmVjNzdmLCAweDA3NjZiYTdmLCAweDJkN2U4MWM4LCAweGJmYTIyM2RhLAorCTB4MGYzZmIyZmQsIDB4ZWZmZGExZWMsIDB4Njk0MTNkYjgsIDB4YjkxYmZlZWMsIDB4MjQ2ZGQ4NWYsIDB4ODhhYmYwNDEsCisJMHgyN2IwODA3ZCwgMHg1YmYxZTVlMywgMHgyNTFmM2U3YywgMHhiYjAwNmY3YiwgMHg4ZGZhY2JlNiwgMHg2MzNiZjgxYiwKKwkweGU3NjY1M2U4LCAweGNjM2M5MzZlLCAweDdlOGJkYzZmLCAweGYzN2Q5NmU0LCAweDNlMjdlMGVkLCAweGUzN2U2MjFkLAorCTB4ZDE4YjE3OTYsIDB4N2ExOGRjNmYsIDB4NjU3OTBjMmQsIDB4YzNiMjVmYTQsIDB4ZGI3MWEzZmUsIDB4MDdjODA0YjEsCisJMHhiYTVjZmIxMCwgMHg4YzkzM2RhZiwgMHhlZmRlYThmNCwgMHg0ODlkMGU5ZSwgMHgwYTAxZmM4MCwgMHg3MWU4MjU3NywKKwkweDA3YWEyYjhiLCAweGZiYTE2ZmJhLCAweDZjMjNjODNkLCAweGExODdhMzkxLCAweGMxMTcxNmRmLCAweDNlZDI5NzNjLAorCTB4YzQ0ZmZlZjUsIDB4ZjRmYTM3NzksIDB4ZjYzNzc3MjgsIDB4ZDc5MDIxNGIsIDB4NGU3ZjdhMjksIDB4OTIzNWU4MDYsCisJMHgyMDc4Yzc2MSwgMHhjOThiYjNlNywgMHhiMjk0ZDRkZSwgMHhmN2JhZjhkOCwgMHhlMWU0ZTRmMywgMHgwZDgxYjA3YywKKwkweDAzYmY0ODg5LCAweDgzYjVlMjNhLCAweGUzNjBkYjNjLCAweGY5NDY0Y2YyLCAweDhlNGRjN2Y2LCAweDYzMGZjYjEwLAorCTB4NjIxOGZmZWQsIDB4YzhhMzQyNzYsIDB4NTg0OTkzMGIsIDB4NjhiNWViYTYsIDB4NTg1ZGY3YjYsIDB4ZTFmNzkwNmYsCisJMHg1YjFmNzkzOCwgMHhiYmZiNzExNiwgMHg1MmY1MTg0OSwgMHhjYTE4MTkzMywgMHgxNzZkOGIwZiwgMHg3ODg3ZDcxZiwKKwkweGQyMWZhYWI4LCAweDFmODBhYzVhLCAweDA3YWI0ZWVjLCAweGI4Zjg4MWUwLCAweGY2YzgzZWJhLCAweDk2MWY5NGViLAorCTB4YWZkMzBjOTYsIDB4YmY0MTA3NTgsIDB4MWQwZmRjMmQsIDB4MDhmZTM4NjgsIDB4NGZhMDZmZDAsIDB4ZDc3ZDgzYjIsCisJMHhkYmY0NjFlNCwgMHg5MDViZjc0NCwgMHhlZmNmMWI0NywgMHgzNzlkNTdhNCwgMHg5N2ZmMTYzYSwgMHhkMWY1YThhNiwKKwkweGU0ZWZmOTUwLCAweDQ1M2ViZDVmLCAweGZlNjJmN2NkLCAweDM0M2Y2ZmMyLCAweGYxODk3ZWNmLCAweGUyYmNkYzY1LAorCTB4ZmVmMWE5ZjcsIDB4YmNjZmIxNzYsIDB4MjczODc5NWMsIDB4ODcwZjJkNDUsIDB4Nzk2NzdmY2EsIDB4MmViNDM3NTgsCisJMHgxZDUwZjJmMSwgMHhlNTliZjhjZiwgMHg1YzcwZmZlMSwgMHg0ZjdkOTllMywgMHgwM2JlYzAyNywgMHhhN2Q4NzhlYywKKwkweDYzYWVkY2FjLCAweGZkMTQxM2Y5LCAweGU5ZTJmMWIxLCAweGM1OTdhYjVhLCAweDVlYTJiNTRmLCAweGE2NTc4NzFkLAorCTB4ZTMzYzM4ZjMsIDB4ZDQ1ZWQ3ZWIsIDB4ZjMzNWJhZTIsIDB4M2VmMzcxMzgsIDB4MzY5YTA3OWIsIDB4OWM2MzE3NTgsCisJMHhiYTdlM2UzNiwgMHgwZTllZWM4NCwgMHg0NzFmMTU0YiwgMHhjZTdlMDI2ZCwgMHg3NTNjNzRiYiwgMHg4ZjhiMGE3NSwKKwkweDIwNzI1ODUyLCAweDZmM2UyMTZmLCAweGE3ZWIzNWViLCAweDc1OThmZTQ5LCAweDFiYTIyYWFmLCAweGRiZTg1MTgyLAorCTB4MzM4OTA3MjgsIDB4MTRjNmZkZTYsIDB4YzZiZjU3NjYsIDB4N2FkYzhiZjMsIDB4YWQ2MDhlNzYsIDB4ZmQ4NWUyY2QsCisJMHhmMmMzNWI4YywgMHhmMmUwN2U5ZiwgMHgxOGJjODI2ZCwgMHhmYWYxYzJhMywgMHg0MzQ0ZWRmMiwgMHhhZThjZjJmMSwKKwkweGIwNGFlNTE3LCAweDM5MDFlYWQ5LCAweGEyMzdmYzI4LCAweDVlM2M4YmZmLCAweDNmZmFkOTcxLCAweGZjZjdkZThlLAorCTB4M2M3YmQzMGYsIDB4ZjE4YmY2N2UsIDB4ZGRiOGQ2ZmUsIDB4MTUxYjhhN2EsIDB4ZTNhNDEwNWYsIDB4Y2E1ZjEwMjMsCisJMHg2M2JmNDkxOSwgMHgxZDE2MzNmNSwgMHgxZGYxNGQxZiwgMHhmZTc2NjE0OSwgMHhiODU3Y2MxNCwgMHgyOTYzMzk0YywKKwkweDNmMDA5ZThkLCAweDUwNjNkOTExLCAweDdlMDlhZmMwLCAweGFiOGZkNDEyLCAweGFhM2U3OGQzLCAweGU2MjY3Y2E3LAorCTB4MjU3M2IzNjksIDB4NThjZTFjZTIsIDB4NDMwN2U0NzYsIDB4YzhlY2MzZWIsIDB4OWY1Y2M2MGYsIDB4ZGU0NzY3MmYsCisJMHgwODdkZjBlZSwgMHhkMmIyNzY3NCwgMHgxZTAxZTc4YiwgMHg2MWY4NTFiNSwgMHg2MTljZjg3ZiwgMHhlMjJlNzNkNCwKKwkweGZjYTVjNjNjLCAweGQxYzQ1ZjJkLCAweDRiZmYxN2Q1LCAweDNhOTJkNDcyLCAweDc1Zjk1ZDk2LCAweDEzY2ZkMWNiLAorCTB4NzYzYTdmYzAsIDB4ZmY5ZTQxM2YsIDB4NDViYzQxMTksIDB4NmI2NDQ5ZjcsIDB4MTAzYjVmOGMsIDB4MTk3YmY5NjEsCisJMHhmZWYxNWUxYywgMHhhMWJlZjgzZiwgMHg5OTliZDUyMSwgMHhmYzdmZGY0YSwgMHgxMjQ4ZDFhZSwgMHg2NTJlOWVhOSwKKwkweDY3YzViMTcyLCAweDRiNDJiOGM1LCAweDY5N2ZjYjJmLCAweDhlNTA0NjU5LCAweGI0ZGY4MGI3LCAweDMzODlmYzA4LAorCTB4NGY3ZGQ4MDksIDB4MjAxM2ZkM2EsIDB4ZjdkMWVlOGYsIDB4MjI2ZDQxYWMsIDB4MTE2N2RiZjgsIDB4YmRjZWYzYjAsCisJMHg5YzMzY2FjYiwgMHg2Nzk4YzlmZSwgMHhlMzAwNmNiNywgMHhjZWIzZGQxOCwgMHhmOTU2MWU2MCwgMHg1MjNlOWYxNywKKwkweGEyZjA4YTUzLCAweDUwNjVjMTNmLCAweDNkYjk2NzlmLCAweGYxMzNjOTk1LCAweDZmODQzZDljLCAweDNmZjNmYTJmLAorCTB4ZGFmOTYwNmUsIDB4MGVkNzk3MDEsIDB4MGZlMTA5N2UsIDB4OGMxMTI4YjcsIDB4NjFlY2I0MmIsIDB4OTZiOTViYzYsCisJMHgzMGZjODdjZCwgMHg2NWE5ZTkwMywgMHhmODMxNjU0ZiwgMHhhOWFmNDk0ZCwgMHhmMmRkZWMxOCwgMHhkZjcxNWJkZiwKKwkweGU5ODNmMWY3LCAweGNmYjEyNzk4LCAweDdjMDJhZmU1LCAweDM3NDM0YWQ4LCAweDRkOWE3ZDgxLCAweGY3YmIwMWM3LAorCTB4MTUzN2RkZTMsIDB4ZmU0MmRjMDMsIDB4MzliZjAzYWQsIDB4NGQ5ZDdmMWQsIDB4NDYyNzE3ZWQsIDB4NjRiZjc3OTYsCisJMHgzM2VlMjY0NywgMHg1YWZlYWM5YiwgMHgxMzNhZmY5OCwgMHg5ZGI4MjM4MywgMHhmZWUxNGY5ZiwgMHgxN2ZlNzhmMiwKKwkweGQ1YWE5ZjdjLCAweGRmYTkzOGUwLCAweDVjOWM2MjM1LCAweDNhNzU4NWM4LCAweDBkZTYzN2UyLCAweDllMTI5M2NiLAorCTB4ZjE3MDE4NjcsIDB4OTlmZWM3M2MsIDB4OTc4NTRmMmMsIDB4YmU3NTJlYWQsIDB4MzdjOTQ3ZTcsIDB4MjUzYzAwOTQsCisJMHg4YjU3ZjJhOSwgMHhlNDQ3NTk2NywgMHhiMmE0OTQwYiwgMHg1Y2VhOTY3OCwgMHhiMzIyZTVhMiwgMHg3YWVkNzNhNywKKwkweDRhZGIyN2E0LCAweDk0NTRlMmMyLCAweGJmYWVjMDllLCAweDA2OTkxYTM2LCAweGJiZjJiY2U3LCAweDllMDJkN2MzLAorCTB4MjBkNDVmZjcsIDB4NDc5OWU0OWUsIDB4Mjg5MzNlMzAsIDB4NTZmMmYxYjEsIDB4MDA0ZTc0MGYsIDB4YWRmZDhjN2YsCisJMHg5NTQ5NjBlYiwgMHhhMDE1N2IyZSwgMHhlZmE3NDlmNCwgMHhmZmU0NTQ4MSwgMHhhZjE4NDJkNiwgMHgyYzc0NWZlYSwKKwkweDA1OWY3MmJmLCAweDU5ZGQwY2ZkLCAweDc5NWY5ODRkLCAweGVhODMzZGVlLCAweDMzZmM0ZTdjLCAweDNlNjA1NjQ4LAorCTB4NmZkZjZlNjUsIDB4ZGI2MDRlMzEsIDB4Mjc5YThkMjMsIDB4MTVhYTQ0ZmIsIDB4MTgyNWE2ZjksIDB4MzYzOThlOTksCisJMHhjZTUwYmFkNywgMHgxZjdlZmJjYSwgMHhlZTQzYmIwNCwgMHg5MTAyNDE5NCwgMHgwMzU3OWQwZSwgMHhjYjgyZDNlNywKKwkweGM3ZjVmYTA5LCAweGIwMzVkYjc3LCAweDNmM2NkOTVlLCAweDdmZmY3MDY2LCAweGJlZTNmMTRlLCAweDQyMDVjNDQ1LAorCTB4Mzc0OWJmMmMsIDB4YzdlYzA4ZjAsIDB4ZGYwM2U1ZTQsIDB4ZWM3YWMyMGMsIDB4YzA1YTY4NzEsIDB4YjY4YmFhN2YsCisJMHg5ZjY1ZGZhMCwgMHhkOWFjZmQwNSwgMHhiZTJiNzk3ZCwgMHgyYmQ5Y2I0MSwgMHgxYjA3MThlZCwgMHg2Y2VlZTU3YywKKwkweGYzYTdlN2NjLCAweDNjY2EzZjFjLCAweGY5NjU0YTFmLCAweDhiM2VmMjQ4LCAweGZjOTlmNDA2LCAweGE4YzBmMTA0LAorCTB4MGFhNTIzYjIsIDB4OTY4YTdlZTEsIDB4MDdkZjNmNjksIDB4OGUxZTRhN2EsIDB4MGEzZjgyOWIsIDB4YWE0MzU0ZjQsCisJMHhjZGQwMDc3ZiwgMHhhNWE0YjlkMCwgMHg4OTJlNzY2NiwgMHgyZGI1YTc5ZiwgMHg5YzE3NmY3ZCwgMHhmZGMyZDlmNywKKwkweDRmZjcwN2I5LCAweGJmZmU4NTllLCAweDc1ODI1OTRlLCAweGY5NjBlMGI4LCAweGIyYTQyZjk1LCAweGZjNDhlMjc4LAorCTB4ZDYzY2M0MWYsIDB4NjViZjdkZGMsIDB4MDJlMjhkN2EsIDB4OGM3NTk3ZmEsIDB4NTc0ZWU0NWUsIDB4NWYxOWY4MGYsCisJMHhkZTYzZjA0OSwgMHg2MTFkNzVlZSwgMHhlY2NkYzYyZCwgMHhhMzVjN2YyNywgMHhkNjc3ZWNjNCwgMHhiMmQzM2QzMywKKwkweGUzY2ZlZDkzLCAweGQyOTczN2Y3LCAweDkyMWViZjJmLCAweDBjYmY0YzMzLCAweDc2NGVmZjk1LCAweGY0ZTJlZmNiLAorCTB4NmZiY2RmY2EsIDB4NWVmZGVhMjEsIDB4YmYxMmZkYmMsIDB4OGY2MTFiYmYsIDB4OTYzN2Y1YzcsIDB4NTBmMjIzMWQsCisJMHg2MWM3ODZhYSwgMHhkODRkYjRmNiwgMHg5ZTU1NDE0OSwgMHg5Zjk1OTU0ZSwgMHhmYmFhMzQzYiwgMHg0NzY0OWY1ZiwKKwkweDNiNzkxMDdhLCAweDcyY2FlZDI5LCAweGZlOGZkYmM4LCAweDRlZGZhMDg4LCAweDNjODkxNWU0LCAweGNiMTU2MGEyLAorCTB4OGM2YTA5ZjcsIDB4NGRkMTJlNzgsIDB4Njg3ZjMwYmEsIDB4MTI0YjA5MWMsIDB4ZjAwNmQ3ZmEsIDB4ZTQyYTZkZmMsCisJMHg0ZmVmZDExMSwgMHhmZjYyZTZhNCwgMHhhNTY3ODk5YiwgMHgyMmE2ZTUxNiwgMHhjODI2ZmMwMSwgMHhiODAyNDkzZiwKKwkweGMxMTYxYjQzLCAweDcxNTliNzc4LCAweDlmZTQxMzNjLCAweDAzM2VlMTI0LCAweGM3ZGQzOWY5LCAweDM1YTc1NmYyLAorCTB4M2E0M2I4YjAsIDB4NGU1MGNmZDUsIDB4Njk3NDY3Y2YsIDB4M2NjN2FiOWEsIDB4MjI1NzkxNTYsIDB4NWUwNDRmZjIsCisJMHhkM2JlMzhhYSwgMHgwMWNhMmMyNywgMHg1NGYyMjhiOSwgMHhlNTNkOTlkNiwgMHgzOWMxMTc2MCwgMHgxY2JmMzg2OCwKKwkweGJjZjMzNDZjLCAweDc3NmZkNjEzLCAweDRmOWUyZTYzLCAweDI5NzliMmZlLCAweGY5MTY3OGYxLCAweDdmNDRmYTI5LAorCTB4ZTQ2Y2JiYTYsIDB4Mzc0MTY3MzksIDB4NzA4OWViMzEsIDB4ZWNjN2RjNmQsIDB4M2QwNmFhZmMsIDB4NzFiMDYzY2UsCisJMHgwNzJiZmEwNiwgMHhlYzA0MzUxYiwgMHgwMzdlYWE4MSwgMHhmMWI4YzNhMywgMHg5M2Q1Y2UzNiwgMHg4NzJiZjQzMCwKKwkweDA1NGYyMDRjLCAweGNlY2E1YzNkLCAweDA4NWJlYmE1LCAweDZkODNlMGZlLCAweDUyNGVmMzNiLCAweGQ2ZDQzZmRlLAorCTB4OTM0MWNmOGIsIDB4MTJiZGFiZDQsIDB4MDNjZWExY2YsIDB4YjQ4ZGY1YzksIDB4MWFmOTVhZmMsIDB4NjY4OWI3YzgsCisJMHg2YTg0OTQ0OSwgMHg5NmZhYWZkMywgMHg2MGM0ZjU0YywgMHgyODdkZjQ3MiwgMHg3YmUxYmVkZiwgMHhiYTNlM2NhYywKKwkweDliZWRhMjQ1LCAweGVkNjIzZWQzLCAweGE5ZDMzNjgxLCAweGVmZmY1ZWQ4LCAweDU3ZWI0MWI1LCAweDI2N2Y3ZmQwLAorCTB4MzUxY2Y5ZjEsIDB4ZWJmNDY0ZWUsIDB4M2Y0MTEyM2MsIDB4YTU3ZmQ3MTIsIDB4YWRiYTNlNGMsIDB4ZGM5ZmI0N2EsCisJMHg1NDk1MWYzYywgMHg4ODU0ZmNmMywgMHg3YjcyZDBmOCwgMHhlZmM2MzE1YSwgMHgxM2Q5NDRhZCwgMHgwMzBjZmE4MSwKKwkweGUzMDgyN2IzLCAweGNjZjFmNjg3LCAweGY0ZTQ2ZDZmLCAweGJmODQzMjQwLCAweGYyMDgyMDZhLCAweDgxYzczZGFlLAorCTB4ZTdjOTBmZGYsIDB4ZjMxMDg2M2QsIDB4OGZmMWIxOWIsIDB4OWUwNTc4YmUsIDB4YjY3OTEyNGIsIDB4NjczM2Q4ODQsCisJMHgzNmY5ODE1ZiwgMHgxMzVhZjJhYSwgMHhkYjI5YTczZiwgMHg3YmJjZTEzMywgMHhjMWRiOGViYiwgMHhlNmM0N2NiYywKKwkweDA0ZjM4ODVmLCAweGRkZjZhNGJlLCAweDUwN2UxYmQxLCAweDc2NzRmYzA0LCAweDQxZjMwZmVmLCAweGE3YThkZGNlLAorCTB4ZTQ1MTg0ZmIsIDB4OTMzYTU5NWEsIDB4ZWIzYTgzNmIsIDB4Yjc3ZTg5NGEsIDB4MDE2ZmU2YzYsIDB4MzJjNzdjM2EsCisJMHgzMTFjM2E2ZiwgMHhhOTU0OWI5YSwgMHhjMWJjMDA3NywgMHhkNzgwYjRlNywgMHg4ZTI3NGU2NCwgMHg0NzNlMGNkOSwKKwkweDNjODI0ZmI1LCAweDFiMTM3NmQ0LCAweDdiMmZkOTM3LCAweDdmODQ1Y2YxLCAweDg1MWI3NGI2LCAweGYyNjI1ZGJiLAorCTB4ODg5NDdlOWIsIDB4OTJhMTU1NzYsIDB4MjZjODcxMDgsIDB4Y2I1NWVlN2UsIDB4Y2I5Njg4ZTUsIDB4MWI2ZTdmOTEsCisJMHhjMWE5OTdjOCwgMHgxM2VmNGQ3OCwgMHg3ZmU3YjA1YSwgMHhiZmUyZTNjYiwgMHg5ZjlmNTFjZCwgMHhiODMzNzFlOCwKKwkweDU2OTY3M2M1LCAweGNmZTgwMmI5LCAweDUyM2FhYmE1LCAweGFiNDBlOTRiLCAweGZkNzA4NGY3LCAweDM3MTg2ZDMyLAorCTB4NzcyYjYwM2UsIDB4YTVlZmQwMGYsIDB4NDI5NTFmZWMsIDB4ZTY3Yjc3M2UsIDB4YmUyMTRhOGYsIDB4ZGM3YTc1YTcsCisJMHg4ZjcyOThiZSwgMHgzNTdmZDE5YiwgMHg1OWJjMDNiNCwgMHhlZmMxNGI1YSwgMHg5N2Y1YjVmYiwgMHhmYTJiZmI0OCwKKwkweGY1MGRmZGYyLCAweDM1NzA2MDYzLCAweDcwNTlhMzE5LCAweDkzNTlmZTZlLCAweGZmYWMzYjdmLCAweDMwYzdmOTg1LAorCTB4ZmE0MGZjMmUsIDB4YWYyMWY3ZDEsIDB4ZDE4ZWE4ZTMsIDB4ZTc5MzMwNWQsIDB4NjllZTkzZTMsIDB4MGVlZTk0MDksCisJMHg1ZTc4MzllNywgMHgxZWJmOGIwYSwgMHhhOGZjYzA5ZSwgMHhmY2IxN2U1NCwgMHhlNjEyODlkMSwgMHg2NmNlZDYyMSwKKwkweDI2NmY2MmU3LCAweGZhMDE4ZTkxLCAweDY4NTkzYTNkLCAweDFjOGFmNGZkLCAweDc5NmI3ZmI0LCAweDc3ZjRjODllLAorCTB4N2ViMDA5N2MsIDB4Y2E4ZjZmZDMsIDB4YjJjN2Y3MjAsIDB4ZWI3NDZlZTcsIDB4M2UxODgxOTQsIDB4OTc1MTQ5YmUsCisJMHg5NzU0MmU2ZiwgMHg5NzUxZTViZiwgMHg5N2YxNWRiZiwgMHg5MzY1YjEwOSwgMHhlODEwN2JkOSwgMHhkZjg5NTVmNSwKKwkweGIxMGQ3MTQ3LCAweGE0YmE3ZjIzLCAweDkzNWRkODIwLCAweGU3ZTc0YTVmLCAweGU1M2U1OTg5LCAweGYxN2VmOTRmLAorCTB4ZjU4MjBhYTUsIDB4NWI4ZDNiMjksIDB4ZmRjZjUwOGQsIDB4M2Y1ZTVhZWYsIDB4ZDk4YzRkZDksIDB4ZWEwN2M0NGUsCisJMHhmM2M0YThlOSwgMHg5MzE4NWQzMiwgMHhiMWVmN2IyMiwgMHg2ZDM0M2YzMywgMHhlY2ZkYTdhYiwgMHgxZjIwYWY5ZCwKKwkweGU0MzU1OGE3LCAweGE1ZWJjMDliLCAweDA0YzNiNDQ2LCAweDI4OWJiNDVmLCAweDk2M2M1MzdkLCAweDgxOWEzMzhmLAorCTB4OWU3NWRiZGUsIDB4ZDY5N2QwZjUsIDB4MmY0MDUwNmMsIDB4YjExODI2NTcsIDB4YzgzZmVkNmYsIDB4OWI5NmQ3YTgsCisJMHhjYjRlYzQwYywgMHg2MzM3MWYwNywgMHgzZTI2NWNiOSwgMHgyMGExMjNjOCwgMHg1MWU3ODZjZSwgMHgwYWQ0Mjc5ZCwKKwkweDYwZWRhNWYzLCAweDE2MGVlZGJlLCAweGViOTZkNzU3LCAweDdlZDNjZjUxLCAweDNlMGY1ZDcxLCAweDljMTEwOWExLAorCTB4Zjk4Y2E1N2YsIDB4YzE2NjFjYTYsIDB4N2MyNDc0NzcsIDB4NmJlNzM0ZmYsIDB4NTE4NDg2YWQsIDB4N2JiM2E1OGUsCisJMHhmZWQxMGUzOSwgMHhiZjgzZGZhMSwgMHhkZmEwZjZkMiwgMHgxM2I5NTBhZSwgMHgyNzFiY2ZlYSwgMHhjMGE4YjllMCwKKwkweDU5MmY3OWQwLCAweGRhMTVjMDAzLCAweDY3ZTg3Y2I5LCAweDNmMDRmMmU3LCAweGE1NDJmOTBiLCAweDg1MmJiZTVlLAorCTB4ZjgxNDkwMzAsIDB4MDUzYjA1MGYsIDB4ZmI4MjA0ZWMsIDB4Y2NiNzExMDAsIDB4ZDk3YThhMzQsIDB4MGRhNmZkMGIsCisJMHhlMGU3NjdiNSwgMHg1Njk5Nzg1MiwgMHg2MDI1MzU4NSwgMHgyN2YxYmNhNywgMHhlNGIxYzNhMCwgMHg5MzFhNjE0NSwKKwkweGU0MjllMjEzLCAweGMzYzMxNmM1LCAweDE5YWY2YTQ3LCAweGVmMGEzZDZkLCAweDliMGNmMmM3LCAweDg0YzdhZDlkLAorCTB4YWQ0YmUwMGMsIDB4ZTgwNjQyNzksIDB4NDc4Nzc2Y2QsIDB4MGI5NGM1ZjEsIDB4YWU2YTc2ZTksIDB4ZGI0NWYwMTMsCisJMHgzNWFkZjJkMSwgMHgxOGU1ZjJjNywgMHhjNjk4NTRmZCwgMHhlNzZkMDBlNCwgMHgxZWYwYTI0ZCwgMHhjMDE5MjkzNCwKKwkweGRiOGNhM2JmLCAweDdjYjVjNmNjLCAweGU5YmFlM2JkLCAweDQxZGRiNGI4LCAweGI2OTcxZDFiLCAweDg0MzI2NmRiLAorCTB4OGRhMzA5MzUsIDB4NzhjMGExNWYsIDB4YTI5NzFhOTcsIDB4ODMzZjkxMWQsIDB4OTNhNTAzYWYsIDB4MGVjMWY4MjAsCisJMHhhZjQ4MzRkYSwgMHhmMmJlNzgzMywgMHgxZTM2NjRjMSwgMHhmZmU3NTQyOSwgMHhmOGU5OWJlNCwgMHhjZWE2NWY5OCwKKwkweGRhNTFiOWY3LCAweGZhN2EwMWQ0LCAweDU2YzI1MzY5LCAweDM4MzdjZmEwLCAweGZjYjYxY2RkLCAweDY5ZDgzZTQzLAorCTB4MzgyYmNjNmYsIDB4NzEyNjcyODQsIDB4ZDExMDA3NzksIDB4ZjI4YmQyMGMsIDB4MGJjMWM4NDYsIDB4YTFjYWM3NjksCisJMHg4ZGUxZTU0YywgMHgwZmRlNzQ2OSwgMHgwNzlkMWVlNCwgMHgzYzcyMWY5ZCwgMHhhNWY2OGY5ZCwgMHg1NjkzNWJkOSwKKwkweDQxN2UxMjM2LCAweGEwNmUwMjlmLCAweDIxOGJlMDUzLCAweDVmODM4ZDNhLCAweGE1YjkxYmQwLCAweDM3MjUxMzE3LAorCTB4OWUxNzNiNTMsIDB4YTQyNWVlYzIsIDB4MmJjNWU1OTUsIDB4YTNmM2MzOTksIDB4ZDhkZDNlNDQsIDB4MThkMWU2Y2EsCisJMHg3NDZmYjg0NCwgMHhlNmYzMThmYywgMHhmZmU3MThlZSwgMHhmNzM1YzAxZSwgMHhiZWYwNGZjYSwgMHgzZjllZTIyMiwKKwkweDE0NzdmNjAxLCAweGM5Njk3OWRlLCAweGM2ZjA3YmZmLCAweGNhOTdmOWRiLCAweGNmOGIxZjBmLCAweGFjZDJmOGM1LAorCTB4MWUxZjk4OWQsIDB4N2NjNTZkOTgsIDB4M2YzYzY5ZjEsIDB4YzFhMGQwMzYsIDB4MGZkZDAwYjgsIDB4ODVhMjNlZTIsCisJMHg5NzIwNDMxOCwgMHg1Y2JiNzJhNywgMHg0NTc4NWI5YywgMHhlMGQ2ZmU2MiwgMHg3ZDQ1MDY4YiwgMHhkZTdjNTEzZiwKKwkweGU5Nzk4MmI4LCAweGJmMmM2NWMxLCAweDZmN2VjODdjLCAweDFmN2VkMDU2LCAweDljZmM3M2QyLCAweDkzMzE3NzQ0LAorCTB4MjhmN2RkZWQsIDB4ZTY4OWZiZWEsIDB4NDRmZGY1MTMsIDB4NzEyMWVkMGIsIDB4MzI5NDhhNmYsIDB4ZGRkZmJmOWMsCisJMHhiYmZlOTA0MywgMHg5ZjU4Yjk2ZCwgMHg4OGZhNjVhZSwgMHhhM2U5ODM3YywgMHhiYWEyMWNlZSwgMHgzOTlkNjkxZiwKKwkweDk0ZjMxMTM0LCAweDQ2YzE1ZTc4LCAweDZmZjgzZmM4LCAweDlhN2UwYmYyLCAweGMyZmNhOTI2LCAweGM5YWZlNTQzLAorCTB4ZjBlNmRjMmYsIDB4NWIzYTAyZWYsIDB4OTJjZGU0NTgsIDB4ZWJkNjNkMjgsIDB4ZDI5ODdmOTksIDB4ODEwOGE2ZWIsCisJMHg3Y2Q2YzU3NCwgMHg0NGRkYTdkOCwgMHhlNGQyZGY1YSwgMHgwMmZlYmQyMSwgMHhhNTMyNzVlOSwgMHhiZDE1M2NkNywKKwkweDE1ZmM2MWVlLCAweGU4MmQyMTQ0LCAweDBiNGU4ODc1LCAweGZkMDBmM2UzLCAweDZlZGM2MGZiLCAweDViZWZlZjQ3LAorCTB4NmZkMzVmNjAsIDB4NjgzY2IwZjAsIDB4MmYxOWQ3OTYsIDB4NTllMDYyMWYsIDB4NWM3ODMzMjAsIDB4ZjNjMjJkNWEsCisJMHgwZjEzZjQzYSwgMHg0ZGYwZTVjZiwgMHgxMmE2OWQyYywgMHhmMTYzMWZjNiwgMHg4MjRjYWE0ZiwgMHhmZTYxOTJiNiwKKwkweDZmZmQ5OTMxLCAweDdjNDNiOGMxLCAweGNmZGIwOGY0LCAweDZiNWI4MDhlLCAweDczOWE3YTQ1LCAweDA1N2Y4YjA3LAorCTB4ODAyZWNjMmMsIDB4MWQxYTU4MzgsIDB4N2YxZjI2N2YsIDB4ZGFhZmE3NGUsIDB4NGE2NmVkMDEsIDB4ZmE2MTBmMGMsCisJMHgxNjdmODUwZiwgMHhkZmQ5OWZhZiwgMHhiMzcwNzk4YywgMHg2M2M3NzVhYSwgMHgyZjIxMjBlZCwgMHgyZTZkZGM0NSwKKwkweDdkYWI3ZjZmLCAweGQyZjIwZWE2LCAweGUzYWFkNzY3LCAweDY0ZWY3MzVkLCAweGIzMzliNmYxLCAweDI1Y2NmZGQ1LAorCTB4N2NjMTNmYWIsIDB4MDNhYWQyNGQsIDB4NTNiZGNkZmMsIDB4ZGE0OWZmNWQsIDB4MDI2YzljNTAsIDB4NzEwZWM5YzQsCisJMHhlNTIwZDAzZiwgMHhkN2EzZTAxMywgMHhiYTZmMTc5MywgMHg4NGY5ZDI4NywgMHg4MDk1MTQ5ZiwgMHg5NDg2ZjBkZiwKKwkweGQwNGY2ZGM2LCAweDI3MWJiM2YyLCAweDk0ZjVmOTYxLCAweDI4ZmY3ZWVmLCAweGMwMjk2ZmQ0LCAweGUyNWMzNTcyLAorCTB4ZTA1NmZiMDQsIDB4ODU2N2NhNDMsIDB4YzhjYzc3ZTUsIDB4YzI3ZDAwNDksIDB4ZTA4N2JkZmIsIDB4ZGZkOWI3N2IsCisJMHg3M2I2OTMzZCwgMHgzY2M1Yzk0ZiwgMHhkN2VlNmFkNiwgMHhlYWM4NWMxOCwgMHhjNmQyYmU2ZiwgMHg1MmVmOTU1MiwKKwkweDZkNWM1ZmQwLCAweDFkMzVmNzY2LCAweDA0YmI3ZTI5LCAweDczYWJhYWYyLCAweGQ1ZTRiOTc5LCAweDI0M2U1MDQ5LAorCTB4M2FmNzgyN2QsIDB4Y2FiNjZiOWMsIDB4ZTkyZDBlYjAsIDB4YjkzZWNmY2MsIDB4YTQ0ZjBhNTAsIDB4ZjI3NmE5NzgsCisJMHhiY2Q5OWJmZSwgMHg0YjllNGI2YSwgMHhhZWE5M2UwNywgMHhmNjRjZmQ2MiwgMHg0MWU2NzY1NCwgMHgyYzc5Y2QzYiwKKwkweDI2Mzc0YjlmLCAweGJmMDVmZTAwLCAweDk1N2RmMGU1LCAweDVjN2QyYmIwLCAweDNkZTRiYzRlLCAweGZiNDQ5MWQ2LAorCTB4MGYyNTE5ZjUsIDB4NzE1N2QxNGMsIDB4NjY0YmRkOGMsIDB4N2QwM2U3NjUsIDB4ZmMxOTFjZGUsIDB4MmNiY2QzZjQsCisJMHhiOGNhYjZlZiwgMHhlMWU0MGQzYywgMHgyOTdkN2UyZCwgMHgyYzZlY2JjYywgMHgxMTc5MDQzZSwgMHg2NTk1MTU4OSwKKwkweDI0NmRhNzk4LCAweGZlOTRiZWI4LCAweDNmMDNhN2M3LCAweDU2NDlmZDVlLCAweDU1OWQxMDAyLCAweGJlODJmZjRkLAorCTB4YWZiYTBhNjYsIDB4ZTUzN2QzNTYsIDB4NjVlOWM5ZGIsIDB4MmFkZjk2OTcsIDB4ZDMwZDM2ZmEsIDB4M2VmNjU4ZjcsCisJMHhlMTAyYWI4NSwgMHhhZjVhODZmYSwgMHhjNzEzOGQwZCwgMHg4ZWUzZjE5ZiwgMHgyZmUwMzcyNSwgMHhjMzBlZmU1NiwKKwkweDk4N2M4YmQ3LCAweDc5OGRkOTAxLCAweDgyNWRhN2MwLCAweDM4MDI2ZjRmLCAweDllMDg5YWY0LCAweDNjOTZjYThmLAorCTB4NzE4MGYwOTMsIDB4N2E4OGM3ODUsIDB4MDU1ZjhlMmYsIDB4MzNlMDk5N2MsIDB4MTcwOTE5MmYsIDB4NmVjMmM5ZmMsCisJMHhmMDJlN2Y2NSwgMHg3YWYwNjRhMywgMHgzODk3OWRmYSwgMHhlM2EyZTE4NywgMHg3YTBlOTFkZiwgMHhjZjA2MTFmYywKKwkweGM5OTVhOTY2LCAweDExMmZiZTE5LCAweDMxMTY5N2ZlLCAweDdjZjUzZWRmLCAweDFlZWNjZGNiLCAweGNiZjgzNzAzLAorCTB4M2M1Mjc2MzAsIDB4Y2JlZTA4NjksIDB4OWYzMTA3NTgsIDB4YjNlN2Q3MDAsIDB4OWU5YjNlOGQsIDB4NDczNmVkY2UsCisJMHhlZGNmZDIzZCwgMHgyODNhYTM1NCwgMHhmZjc0YzI1ZSwgMHhkNDFlNzAwZiwgMHg3ZWMxZjcwNCwgMHg2MmYxMjE2ZiwKKwkweDQ3ZDI5Y2ZjLCAweDZlYzYzZDIwLCAweGUzYzZmMDEyLCAweGI5MGM2NWE5LCAweDc4OWYzZjFhLCAweDViYWYwY2ZjLAorCTB4ZTI5ZTBkMjQsIDB4N2NkMGUxZmMsIDB4ZjE5ZTczMmYsIDB4YWY0YjhhZjYsIDB4YjkzYTViZjYsIDB4ZWMzOWQxN2YsCisJMHhmYTg0MmM0ZiwgMHhhMGY2NjI1YSwgMHhlMTIzZDEzZiwgMHhkYTk2YWY3ZSwgMHg2YmE3MjAxZiwgMHg3MWZhMDg2YiwKKwkweGZhMGQ1NjljLCAweDMyMWQ4NTEzLCAweGZmNWM5ZjE2LCAweDZhYjcyNjRkLCAweGY3M2YwODliLCAweDRmMTdlNmM4LAorCTB4ZTA2NGE5OGYsIDB4MWFkNjc4N2UsIDB4ODAwYjBkOTUsIDB4YWFhYzFiZmYsIDB4NTZiNTA2NzMsIDB4NGU3ODhmMTYsCisJMHg1MDMyMTFjOCwgMHhhODdmN2EwNiwgMHgwZmVmNDIzYywgMHg4YTFjODE5NCwgMHhmNmFlN2ZiZiwgMHgzYjdiZjMyMiwKKwkweGFjZjg0YTJmLCAweDAzMmIxY2Y1LCAweDE5YWNlZmJkLCAweDU2NzkwMzI4LCAweDE0ZmVmNzY3LCAweDEzZGM1NWQ2LAorCTB4YmRjZjhmMTksIDB4OTc5MTFhZTksIDB4MWE3NDU5NzIsIDB4MGUyMjQ3Y2YsIDB4N2ZlNmM0N2EsIDB4M2ZjNjNkMzksCisJMHhhMDhhNTY3NSwgMHhjYmI1NzU5ZiwgMHhjZmU3ZTdjZSwgMHhkODc2N2EwMSwgMHhlZmMxMmE3MywgMHhhYWQ4ZGIzNCwKKwkweGQxMzhiYjAzLCAweGNlOTAzZmUxLCAweDVmMTdlOGU0LCAweDlhMTdlNmMwLCAweDU2ZGUzYzUyLCAweDY2NTg3ZmVkLAorCTB4ZWUxZTIyYzMsIDB4ODFiODc4ZTUsIDB4OWJmM2Q5ZWIsIDB4YTkwZmI4YjQsIDB4MGQzZTE2ZjYsIDB4OWJjMGEwYTEsCisJMHhiZTQyMTIzYSwgMHgxNDdlYTJmNSwgMHhhNzlkYzZmNywgMHhkYTE4NTUwNiwgMHg3ZDQzNmYzZiwgMHhmNTU3ZjhiYiwKKwkweGIwOWIyNzE4LCAweDE4OTQ0MzVlLCAweDY0MzEzOTdkLCAweDMyN2ZkZDU2LCAweDU1NTNhNzc5LCAweDVkMzdhMmJlLAorCTB4YmVjYWZlZDUsIDB4NzE3ZDU1NWMsIDB4ZmVhYTkyNzgsIDB4NTQ0YjM3YWEsIDB4NTRjOGIyZTUsIDB4ZGZhYmZiNTUsCisJMHhhZjk1NTJhOSwgMHg2YWExOTgxOSwgMHgzZGY0MDNiZiwgMHg0ZTM3ZTNjNSwgMHhmZmJkNTJjZiwgMHgzN2Y0ZTM2OCwKKwkweDVkN2QzZTIxLCAweGVmYWEzYmY0LCAweDA0M2Y3MDRmLCAweDg1MjM3YTA5LCAweDA0MGJmZTc0LCAweDUzYWM1ZWJkLAorCTB4OWFjZDRmN2QsIDB4N2MwZTU0YjAsIDB4YWMxNmZlY2YsIDB4OTVmNzc5NjYsIDB4ZmRiMTYzMTQsIDB4ZGI1MmVjMmQsCisJMHgyODkwMzcxMywgMHg4NGI2MmJlNiwgMHg0MDk4NGYyNCwgMHhiZWJhOWRkZSwgMHhmMTA3YWZiMSwgMHgwZjdiYTk3YSwKKwkweDZiZTZiODI2LCAweGM2OTc1NGMwLCAweDIyNjMzYjUxLCAweDBkNWM4MjIwLCAweGYxNjM4Mzc5LCAweGJmZDZhNWZiLAorCTB4YTk3ZmU0ODAsIDB4ZDViODM3ZjUsIDB4ZDQ1MjZmZWIsIDB4NTQyOTZmZWIsIDB4YTNjZGJmYWYsIDB4MGFjNGZmNWUsCisJMHhiYzNiZmFmNSwgMHhhYTRmZjVlYSwgMHhiMjdmYWY1MSwgMHhhOWZlYmQ0ZiwgMHg5ZmViZDU3MywgMHhmZmFmNTdlNiwKKwkweGJhZjUwNmI4LCAweGQ3YWFiNjY3LCAweDdhYTk3YjNiLCAweDRiODI3MzVkLCAweDc0ZjFmNTU0LCAweGM4NDllODIwLAorCTB4Zjc5NWJjY2YsIDB4YTQ1M2RiYWEsIDB4NDJlODYyNjgsIDB4NWYwMmQ5ZDAsIDB4OGQ2M2U2MDMsIDB4MzU0ODdhZWYsCisJMHg0YzdkM2M1ZSwgMHhmNDhmM2MyMCwgMHhlNTQ3ZDIyYiwgMHg3MjdmNmUzOCwgMHhhOTdhYTBiYSwgMHhkYTMyNWM2YSwKKwkweDczYzAzNzE5LCAweGZmNmUwNGVlLCAweDMzYjc0NmZiLCAweGQ1OGFmYzg0LCAweGU2ZmJiMWViLCAweDA4ZGFlNGIxLAorCTB4ZDFmN2M1N2QsIDB4ZDgyYmVhNjMsIDB4Zjc4NjliNDcsIDB4ZWZkMTYzZDEsIDB4NTllYTg0YmIsIDB4ZmEzNTdjMWMsCisJMHgzM2IwZWVjZiwgMHg5OTlhMGUzOCwgMHg1NDI5ZmYzZCwgMHhkMWRiNDM1ZCwgMHhkZTE0MTUzNiwgMHg3NDNlNjE3NywKKwkweDkzY2Q3N2ZjLCAweDFkZjIwZmQxLCAweDcxODNhYmQyLCAweDdjMTEyNGVmLCAweDdjNTEyM2NlLCAweDc1NWQ4OWZhLAorCTB4ZjEwMTY1YmUsIDB4NjQ1ZmI5ZTksIDB4YzlhOWUwMDksIDB4N2EwZTUwMzgsIDB4YTNmY2MyZmYsIDB4ZWU3YzYzZWYsCisJMHhkZDY1ZDI0OCwgMHhlMjFjNzIwNywgMHgzOTA5ZTMzZiwgMHg0OWM5ZTVjNSwgMHhmMmQxMDM4OCwgMHgyN2Y3MTMzOSwKKwkweDhhZTI4OTdhLCAweGVlMjllN2MxLCAweDI2OWJhY2Y3LCAweDVhMjU5ZWExLCAweGQ1YjFlNjMzLCAweDllYTEyZWRkLAorCTB4ZjYwZmZiYWEsIDB4ZjRjNzFmNmMsIDB4NTJlNzg4ZGEsIDB4NmUyZWQ3ODEsIDB4YTEzYjMwMWYsIDB4NjJkZDBlMGYsCisJMHhhZGY4OTBmYywgMHhlYzdhOGY2OCwgMHgzZmI0ZGViMCwgMHg0N2Y5ODcxNiwgMHhkYmIxN2Y3NiwgMHgyNWRjZTBjOCwKKwkweDg5YzJiOTExLCAweGRkNzEwNmM3LCAweDdjZTFmZDYxLCAweGUwYzhkYjliLCAweDQ2MjNhNWRiLCAweGUyNjRlZmMwLAorCTB4MzFmMGZiNDcsIDB4ZDYzYzhhOTksIDB4ZWZkNjI0ZWYsIDB4MTdmMDVjZDEsIDB4N2U2ZmNkOWEsIDB4YTlmMjFhYWIsCisJMHhmNDcyZTBlNSwgMHhhODhmN2ZkZiwgMHhiNjc3ZjdmZCwgMHhmZmJmZTg0YSwgMHgzZTliODUxZSwgMHgxYjhmNzZkZCwKKwkweGVmMjhiMmY0LCAweDFlMjFiODAyLCAweGZiZThlZDAwLCAweDA0YWI3NzU0LCAweGFkYWZiMWZlLCAweGIxMGYzZGJmLAorCTB4YmZiMjVmNzYsIDB4ODMwODdlYTEsIDB4M2Q2MGZlMGIsIDB4ODMzNjdmODUsIDB4ZDI4MWI3ZDIsIDB4MTFlZmI2Y2IsCisJMHhmYmM2MWZmNCwgMHhhOTY5Yzc2YiwgMHgzMWZjODEwNiwgMHhjMDk3YmIxZCwgMHhmYjY3YWYyZCwgMHhiYjFlYzNlMiwKKwkweDc0NDRjZmNhLCAweDdhNDczODBlLCAweGYyMGU3YjI5LCAweDljYzU0ZmJlLCAweDM0NzRhMGQzLCAweDFmYmFmZGVhLAorCTB4YTQ3Y2IwNjUsIDB4NDRjOGI2ZjYsIDB4ZTM5ZTRiODgsIDB4ZGI4N2Q3NzEsIDB4NTZiMmM0ZGUsIDB4MjY1ZTYwZjYsCisJMHg4OGU1ZjdkYywgMHhhMmVmNWVmOSwgMHg0ZTcyMzFmNSwgMHg2M2VmZDJiNiwgMHhlYWNlOGRlNCwgMHgxZTZiY2JjMywKKwkweGJjNjA4YjY5LCAweDI1ZWZjNzUzLCAweDVlZTMzNDdiLCAweGJmYzYzZmJiLCAweDZlMzhjZWYyLCAweGM0ODMxOTI3LAorCTB4NjliODQyOWUsIDB4NGY0ZWZmNGYsIDB4NWEzZjQwMjMsIDB4NzYyYTdjYmIsIDB4ZDM3MDZkMWYsIDB4ZWVmNTYyZmUsCisJMHgxYjEyNjRjNSwgMHhmNmQ5NTg3ZiwgMHg4OGZkYzIwZSwgMHg2NzQzZjdlNCwgMHgzNjEyN2M4NiwgMHg2NDFiN2M1MSwKKwkweGRmNGQwMzM4LCAweGU1MTFiODZmLCAweGFmNzZkZWFmLCAweDFhYTFlZTA3LCAweGI3MDY3ZjBiLCAweDdlNTYyMTdjLAorCTB4ZGY4ZTM4N2UsIDB4ZTdlNWM1Y2YsIDB4YzlkMTZkOTMsIDB4ZGI3YjRlMzAsIDB4NWQ2ZjBhODAsIDB4ZmRmMTE3NmQsCisJMHhjNDUyMzY5YSwgMHg3YWM0M2ZlYSwgMHhmNDgyOGQ0ZCwgMHg0MmQyOGE3MywgMHhmMjdhZTIwNCwgMHhjMWZjMGQ4MCwKKwkweDEwMjYzZWQ0LCAweDhkYjlkNjdmLCAweGI4MzA2ZjE4LCAweGEyZTRiYzE4LCAweDllNjNlOTBiLCAweDNlMDBjMTlkLAorCTB4MWY0YTRjYmYsIDB4ZTFkNTJmZWYsIDB4NGNiZWZhZmUsIDB4ZWZiZmI2MmIsIDB4NzgwZmUzMzcsIDB4MjllYWRmMjksCisJMHhjMzdmYjQxYSwgMHg2MWM3ODY3YywgMHhmOTczZDNmOCwgMHgwZmJmNjQ0OSwgMHg1ZDNlODBlNCwgMHhkMzg1MzhjNiwKKwkweGYxZDcwYjNlLCAweGYwMjdmNmNiLCAweGNjMTEzN2FlLCAweDVhNjdkNjQ3LCAweDVjYjg1ZWQxLCAweDZhMTlkZDM4LAorCTB4OGZlM2M3YmMsIDB4ZmZlNTA5ZTIsIDB4Zjc0ZjFjN2QsIDB4OTNmY2M4M2QsIDB4ZjA0ZmRkZjcsIDB4NGE1OTA1M2MsCisJMHhlOTg3Y2FmZiwgMHg4Nzk3MWM2YSwgMHhjZjg3YzRhOSwgMHgwODJhMzZhZSwgMHg0NjVlYjAwZCwgMHhlZDQwOWZlMiwKKwkweDhkOGJkMjExLCAweDgyYTdlMDRkLCAweDgwZWNhZjdhLCAweGFhMjc4OGQ0LCAweGI5ZTEzMzVkLCAweDE3NjRlMmE2LAorCTB4NmJkYWUzYjAsIDB4MTNjMDhiM2YsIDB4MmY4MDExNjIsIDB4YzEwOTAzN2IsIDB4YWI5OGJjNTUsIDB4Zjg3N2M3NDAsCisJMHhkNzgxMzk1OSwgMHhlNTY1Y2MyNywgMHhlODlmNWU0NCwgMHhlZjRjZTU2MywgMHgwMDM1NTIwYiwgMHhjYjQ3MTcxNiwKKwkweGNhNmYzYWI0LCAweDgwYmM3OTA3LCAweGZjZjE3M2IwLCAweDg0Y2Q4ZDdlLCAweDczYWIwYmNiLCAweGRmZDQzNTY2LAorCTB4OGI5Y2YwNDksIDB4YWYwOWZmYTgsIDB4NWYxZWIzNGYsIDB4NjM3YTA3OTksIDB4MGRmYmZhYjYsIDB4ZDZhOTBmMWMsCisJMHgzMGQzNWRlMywgMHgxN2FlYTZkZSwgMHhlYjY0YWNmMSwgMHhmYmYxMzdmOSwgMHg1M2ZkNzUyMiwgMHhmNTliN2JmYywKKwkweGQ0MWE2NDdjLCAweDdmYzdhYmU3LCAweGFjNWJkNzljLCAweGNhOGRlZjJjLCAweDAzN2Y3NjdlLCAweGQ3OGM3ZmFmLAorCTB4YzYxZWEwOWIsIDB4NWFmNTY0MmYsIDB4NmYwOWRmNzEsIDB4MThlMWM5ZDcsIDB4NDMxZTMzZTIsIDB4YmYzMzI2MGMsCisJMHgyMzM2OTZmMiwgMHhiZjNjNTdmMiwgMHg3M2Y3MDdkZCwgMHg5YmYzMGQ5NSwgMHhmNTE5Mjk3ZCwgMHgzMmZiODZkZSwKKwkweDUwNDlkYzk4LCAweDUxZGViYzA2LCAweDc3YThhMmU0LCAweDM3Y2M2NWRhLCAweDQ4ZjViYWQwLCAweDk3MmIwNjRmLAorCTB4ODcxZjljMjcsIDB4ZWFkNDg5ZTQsIDB4ZTRjNjQ0NjEsIDB4OWFlOGE1ZjQsIDB4OTAwNWYwMTIsIDB4MGZmNDU5NmIsCisJMHhmYmUzM2FlOCwgMHg5MThmZTIxYSwgMHg2NjRkZTk3MywgMHg4M2U1OGZlMiwgMHgzOTU1NGUwNSwgMHg1NTc0Y2VlNSwKKwkweDVjZWNkNzdiLCAweDc0YjViZDU1LCAweGNjOWVhYTkyLCAweGRjOWYyMjc2LCAweDVjY2JlOWNiLCAweDE3YWFhMjU0LAorCTB4NmQ5MDY1ZjcsIDB4YjU5ZDlkYmMsIDB4NTU0ZmU1ZDMsIDB4YTg1ZjNiYjUsIDB4OWY4ZDAyMjQsIDB4YTNkYzQ5YmEsCisJMHg3YzgyMzFlNiwgMHg5Yjk2ZDdiOCwgMHhiM2Y4ZmMwYSwgMHg0ZTQ0MGFiNiwgMHhmNjI3ZTUzYiwgMHgxYmE3ZjNiNCwKKwkweDU0ZmE1OThjLCAweGNiMTBiOTc4LCAweDdlNTgzYmNmLCAweDg3OWI3YjdmLCAweDllMDg3Mzk1LCAweGFiNmY2ZmFmLAorCTB4Y2EyZWYyYzEsIDB4NjlmY2YwOWYsIDB4ZGI5ZjE3OWIsIDB4Y2ZhMTU5NjksIDB4MmJmZGE0N2YsIDB4ZGExZTlmYjQsCisJMHhhMTlmOTQzZiwgMHgzMzczYzNmZCwgMHgzZjllMWZlZCwgMHhmZDQzZmRhMSwgMHg5NDJmZGEwNiwgMHhjMTcwYTY5ZiwKKwkweDBmZGEyOWYzLCAweGVkMzFmZmJjLCAweGI0NGZjYTFmLCAweGI2YmNiMGY5LCAweDFmOTYyZTZkLCAweGYzZTNmMzZmLAorCTB4N2MwNmI2YjEsIDB4OGFkNmQ5ZGYsIDB4OTZkYjQ3ZTUsIDB4YjZlMWYzZTIsIDB4ZGJkYjNlMjAsIDB4MmY3ZDYyNTYsCisJMHhmOWU3OTNhNywgMHgyYmU3ZGM3OSwgMHhmMTAzYmRkOSwgMHgyMTlmZGZlYiwgMHg5ZDJmYmI2MSwgMHgxNTRhNTM5ZiwKKwkweDNmMmFiOTdhLCAweGZjMDMzZmE3LCAweGZjZWFiZDAyLCAweGMyMWZjMDU0LCAweDhjNzg2MjYxLCAweDA2NjhlMzg3LAorCTB4OTEyNzBmYjMsIDB4OTMwYjcyYzgsIDB4MWYwNzE4MWYsIDB4NjE1OWU3ZGYsIDB4YWUzNWZjYTEsIDB4NGU3YmFkOTUsCisJMHhkM2ViMTQ1ZiwgMHg0Nzc4ZDgxYSwgMHg1YzQwOWRiOSwgMHhjZTUxOTI0MSwgMHhiYjQzOWI4ZSwgMHhjYWE0NTI3MywKKwkweGQwMDdmMmMyLCAweDE0ZGM0MzBmLCAweDVhZWNlNTNmLCAweDIxZTY0NjcyLCAweDU3MjVjMDBkLCAweDMzMWUzZDUwLAorCTB4Mzk3YzIxYWYsIDB4Yjc4MDljMTgsIDB4NTdmZGUwZDEsIDB4Njk2ZDM3OGUsIDB4YTc1ZmJiMmYsIDB4NmMwYzJiYTYsCisJMHhlMmI2ZjY2NiwgMHhiOWM2M2FmZCwgMHg5ZjRjYjBiZSwgMHhlZjFmOWYyZSwgMHg3MTc0OThlOSwgMHg1MjI0ZGQzYSwKKwkweDliZjE3NmY5LCAweDhjY2ZhMTQ0LCAweDMxZmVmNTI2LCAweDZhODk0MTdkLCAweGI4YmRhNjdmLCAweGQxNTcyODg2LAorCTB4ZmJkNDhiN2UsIDB4YmRmZTczM2MsIDB4MTk4Y2VmYWEsIDB4ZjVlYWE5MGYsIDB4ZmFhYTE1YWUsIDB4MWU3M2JiYmEsCisJMHhjNzNlMDM3MSwgMHg2MTk5YjhiMSwgMHgyMTAyNzJmNSwgMHg0ZmRkODVlNCwgMHg0Y2U2NWMyMCwgMHg5MjczOGYzNiwKKwkweDYwNWY3ZWMyLCAweDEzM2RmZjM3LCAweGQ2Nzk3ZmJlLCAweDVjNjVmMWNlLCAweDA5ZjJmYjhkLCAweDQ4MmM1NjBlLAorCTB4MGY0MDZhMGMsIDB4NDQ4YmZjN2QsIDB4OWUzYjdmOTQsIDB4N2U5ZmEwZDEsIDB4NDA2OTA5MjIsIDB4ZTZhNjRjZGUsCisJMHgwMTVmZDQyNCwgMHhmMTZiOGMzNywgMHg5NDJkMjZhYSwgMHg4NWEyODk4YiwgMHg4YTI0NTVmMiwgMHg3ZmJhM2FmYiwKKwkweGY1ZDI2NGQxLCAweDlmZmFkMTZiLCAweGQ5ZjJkMTMxLCAweDJjYjNmZjRjLCAweGZhOGMzMGJmLCAweDY3YWY4MGJhLAorCTB4YWRjN2Q4ODEsIDB4ZGNmZGUzOTcsIDB4MzdmNDRjYzYsIDB4NzYyNWNmYTksIDB4ODc0YmZkZjAsIDB4OTcwZGY5ODksCisJMHhjMTUzY2EzYiwgMHg0NjM3M2UwZSwgMHg3ZGNkYTgzZSwgMHgxNDA1OGRlMiwgMHg2M2I0YjZkZiwgMHgxZmVmMTRmOCwKKwkweDllYTMzNDU3LCAweDk0Y2JjZmQ3LCAweGY3NWU1YWJlLCAweGQ0NGZhYTdhLCAweGYzMDc5MzdjLCAweGNmZmE1YjM4LAorCTB4NmI3NmUwMjksIDB4ZmYyMjhmYzksIDB4M2M4NGU4NzQsIDB4OWU0MTEyNTMsIDB4ODkzZDk3MGQsIDB4M2IxZTY2MjQsCisJMHg5M2M5ZGVkYSwgMHgxMWZhMjE1MSwgMHgzNzVmMzI2ZiwgMHg0ZmY5NWYzMSwgMHg0YmM4NzY5NSwgMHhkMTc5ZTAyYywKKwkweGYyZDJkYjNiLCAweDdmMGZjN2FiLCAweDUwNzRlM2VmLCAweGEwMzUyMjQ4LCAweDM0OGIwYjVmLCAweGUwNzQxMDllLAorCTB4MzFmY2FiYjUsIDB4MmYyZWZjYTYsIDB4NGI5MzBiOWMsIDB4ZjJjNDA3ODgsIDB4Zjc4NWQyNDQsIDB4ZDU3ZmM4MjksCisJMHg3YzlhM2U2MiwgMHg1MGEyMWFmMCwgMHgwZDZhZDhmYiwgMHg3MGQxNjA5MywgMHg3NWZiODRiZiwgMHhmY2U1Y2ZiZSwKKwkweDljNmFmNjY3LCAweGVjMjU5YzhmLCAweDc0ZTgwZjI2LCAweDFiZDU5OWYyLCAweGFjZmMzYTAxLCAweGY0ZDhjNzViLAorCTB4ZDBiZWJhYjgsIDB4MmRlZjUwNGEsIDB4MTQ4N2Q0MmEsIDB4ZWJjYmVlMDksIDB4ZTU0MDdiYzIsIDB4YzhjOTEyMmQsCisJMHhiOWE2MzgwMSwgMHhkZjdlODNlNywgMHhiNjNhNDE2YiwgMHg5ZmM3MmZhYywgMHhlMzU5YjgzMCwgMHgwZWZjNDBhZiwKKwkweGMyMzU3YjI4LCAweDlhZWRhMmU4LCAweDgyYjdlYjI3LCAweGYwMDEzOTNkLCAweGRjYmMwNTYyLCAweDQzMGQ1ZjkxLAorCTB4MWUyMjE3ZTcsIDB4MmY3OWYyMTcsIDB4YzhlOGYzZTQsIDB4ODMzZmMyMWMsIDB4NzBiYzc4ODcsIDB4NmVhMmVmMWYsCisJMHhjZjUyOGZlMSwgMHhhYWQyZjFmMywgMHhhMmJkYzM2ZiwgMHhmZjJkMTFlZCwgMHgzZTM1MjI5OSwgMHg1MzIyZTk1NywKKwkweDcwYzM0YmU2LCAweDY2MTczODUxLCAweGI4MDE1YzgyLCAweGQ4MGY4MmFmLCAweDkxOWY5YWZjLCAweDk0MWNjNmM4LAorCTB4NmY2ODM1NmIsIDB4M2YzMDY5OTQsIDB4OWIyZTllM2QsIDB4OGZkYzk5MzIsIDB4N2RkOWQ4NjYsIDB4NDg1M2VlZTQsCisJMHg5M2U1YzNjZiwgMHhjMjQ4MmM2ZiwgMHg1YmIzMzNmZCwgMHg4ZmNiMzI2YywgMHg1ODk1N2FmNCwgMHhlMTJhZjdiZiwKKwkweDcyZTdlNDVmLCAweGExZGUxY2NjLCAweGIxMjcwNTdiLCAweDg5MmI2MGJjLCAweGI0YmM4N2FjLCAweDJiZjVmNmIxLAorCTB4ZGM3MDczMzIsIDB4YjUzZDdkZTEsIDB4YTUzZjIwNWQsIDB4NWM3OTg4Y2MsIDB4YTEzZTQ0YWIsIDB4Njk5OTU0NzIsCisJMHg1NzM4NGY2MywgMHhmYTc0ZTQ2NSwgMHhmNzlkNGRhOCwgMHg2ZmNmOWRiMywgMHg0MThmNWYzYiwgMHhmMjdiYzhhMywKKwkweDljYzcxNmQ2LCAweGFmZWJhOWYzLCAweDg4OTYzZjQ3LCAweGZmNzIwZWQzLCAweDFkNTlhMGUxLCAweGE0ZTQ2ZDU3LAorCTB4YWJhODc4MzAsIDB4YzFmMTBjY2EsIDB4NmRhNzE2MmUsIDB4ZGQ5OWJmZWMsIDB4YzdlZmJiNmIsIDB4ZWQzMDJmNzgsCisJMHhhODdhMDE1MywgMHg1N2ViZWRlNywgMHgwYjU4ZmRhYSwgMHg1ZjkxZmE3NywgMHhmMTY0ZmRlMywgMHgzOThhMzE3ZSwKKwkweGUzMWZlYzNkLCAweDMzNWI2MmZkLCAweDQzYzI3ZWY5LCAweDdiMGUyMThhLCAweDYxZGU3NTYyLCAweDcyNzdlYzMzLAorCTB4MWYwZjllMDgsIDB4ZWYwMTdkYTcsIDB4ODFiYmE2ZGQsIDB4OTc0ZmI4MmUsIDB4YTNmYmIxMTQsIDB4NTRmZmQ3ZTIsCisJMHhiMmYxMWU5NiwgMHg3OGVmYWM1MywgMHgzYmE1ZGEyYiwgMHhkODFjOThjYiwgMHgyZGZjZTA3OSwgMHgyYjNmNjllMywKKwkweGY5ZDUyNDczLCAweDNhMzk5NTgwLCAweDI5YjdhNzVjLCAweDk3YjNjMzdkLCAweGVlZDE5YTkwLCAweGE5OTQzYjI5LAorCTB4ZWY3MjZhZjksIDB4YzFlZmY1NWEsIDB4MWMwZGY3MzQsIDB4ZmYyODI4YjYsIDB4MWZiYTAzNWUsIDB4NDI3OWZjM2MsCisJMHgxNDUxZjIxMSwgMHgwOGM0YmY3ZiwgMHhjMTk5MzBjMiwgMHg3NmIzZTcwZCwgMHgxNzk5M2U2YiwgMHg2NzZmMGY0YiwKKwkweDM2ZmY1OGNhLCAweDBkMmY4YmE3LCAweGFlMWFiNTU3LCAweGE1NmY0NWIzLCAweGZkNzA2MGNjLCAweGI5YzZlNDBlLAorCTB4NTg5NGYxZjAsIDB4YjVjMDQ2N2IsIDB4MDNkZjhjN2IsIDB4ZTJhYmYwZjgsIDB4MWZhZDQyYTksIDB4ZmE3NGYwNjIsCisJMHg2ZWQzYzNiZiwgMHhmY2YwZThmZCwgMHhiM2YzYzM5NSwgMHg5YjVlZWM0MywgMHg1MTVmZjU5MSwgMHhlMWFiNzU5ZiwKKwkweDY0N2NmYjNkLCAweDBhNDk4ODBlLCAweDdmMTE1ZmVmLCAweDE4Mjk5M2VlLCAweGViZjhlNjEzLCAweDU5ZjRlNTJkLAorCTB4MDc4ZmU1Y2EsIDB4YzA5MTUwY2YsIDB4MWU2MzU3N2IsIDB4OTI0Y2FmNjYsIDB4YmU1Y2ExNmEsIDB4MmNmNzdmMDAsCisJMHgwMmMzZWY5MywgMHhiZjllM2YxYSwgMHg0NjE5ZWYyMSwgMHg2NGQ3N2Y5NSwgMHg5ZGRlYmEzMSwgMHg4NzhhOGQyZSwKKwkweGNmMzYyY2QyLCAweGIyZWE0NzAzLCAweGQ4ZjFiZmMxLCAweDcyMDIwNjNiLCAweGJmY2YzMzYxLCAweDZiZGVjYzdlLAorCTB4MDVhNjdiODQsIDB4NDI1Y2ExMWUsIDB4NzQ3ZDAxOWYsIDB4YzdiYzI4MTEsIDB4MmEzMzNmNGEsIDB4ZDNjNjUxZDYsCisJMHhjNmQ2ZjFiMCwgMHg0ZjE4OGRmMSwgMHgxNTY0YTczYywgMHgzYTU1N2IzMiwgMHgzODczODVhNCwgMHgwYjdkYWY2YiwKKwkweDViNWI3ZmVmLCAweGZkZWNhMzJhLCAweDFkNWZmOGQyLCAweDViZjBmZjg3LCAweDdhMzBiNzI5LCAweGUxNDU5Mjk5LAorCTB4OTBmZTkxNmIsIDB4MGU1YTZkZjAsIDB4MmE3ZmQxNDgsIDB4YmQxNTdjODIsIDB4YTAxZmU3MWYsIDB4NDY5MWVjNzgsCisJMHg4YjJkMjllMiwgMHg5Zjk4OGJkMSwgMHhkYjgwYmY5OCwgMHg1YzAyZGQ3NiwgMHgwNmJiZGIwNywgMHhiY2E1MWE1NCwKKwkweDg5MTdkMGJkLCAweGJjYzFmZjVjLCAweDJiNWM1ZjUwLCAweDY1NGM3M2IzLCAweGRhZmJhZTMyLCAweGVlNzhhOThhLAorCTB4MTdjZjM3NmMsIDB4MWZhMzVlODksIDB4MTY0NDc3ZjUsIDB4NzYzZGJjNzAsIDB4YjgxMWI3ZjEsIDB4YWZkODM5NDcsCisJMHg4ODNmZmJjMywgMHgxNWJlZTAzYywgMHg4ZGZmMWZlZSwgMHg1Mzg5Zjc4YywgMHhmYjgxYWE3YSwgMHgzOTFjMGVjYywKKwkweGViZmIwMDlmLCAweDg0M2E1OWY5LCAweDg3OTczZTdiLCAweDM1YjUxNzgzLCAweGM4ZWMxZTc4LCAweDBjNmQ3NjY3LAorCTB4Njk2NWQ3ZmQsIDB4ODkxMjdkYjksIDB4MzVhZjM5YzAsIDB4OGIzY2VjMjUsIDB4ZDYwM2RiOTUsIDB4MDAxYjI3MjMsCisJMHg0M2M1NmI3ZSwgMHhkZTg2MjkwNiwgMHgxMDE5NjU2NiwgMHg2OGZhMzVhZSwgMHgxN2Y2ODc4YSwgMHg2MTI1YTdkOCwKKwkweDdiYzFmZmU2LCAweGIzY2U4NzE5LCAweDVhMWUxOWRhLCAweGJkYTEwZjRhLCAweGY3NjdlZDYwLCAweDI5NjVkNjM1LAorCTB4Yjg1MmNlNGMsIDB4ZTZmN2QyZjcsIDB4ZWJkOTlmODksIDB4OGU5NGJlYTEsIDB4YmRmYzNiOTcsIDB4ZDNkNmNlY2QsCisJMHg0YmVlYzY1YywgMHgzZmVkN2I1YSwgMHhjODNlZTFkYiwgMHg0NzFkZjg0NCwgMHg3OWYyZWZkOCwgMHg3MjkyYjgwYSwKKwkweDQ4ZGZiYzM1LCAweGNiZjgxNzI0LCAweDVhYmU2MzJlLCAweDIzNWVmODZmLCAweDJmODJmYmQ4LCAweDYyZDVjYWRlLAorCTB4MzlmOTQ3YmIsIDB4MGEyYjQ3ODksIDB4NGNhZTcwNDMsIDB4ZGIzNWIxZDAsIDB4Y2MxNjQwZmYsIDB4MGJjNWYyOGYsCisJMHg3YzQ0ZWY2OCwgMHhmNjNmMTBkMywgMHhkZjMzYzg2MiwgMHgzMmU2NDUyNSwgMHgwNzZmNDQzYiwgMHg2OGQ0MmMzZSwKKwkweGUxMTZmYzU0LCAweDU0OWUyNmViLCAweDczZGRhM2ZkLCAweGExNWRhNzNmLCAweDQ2NDIzYmY3LCAweGZlNGRlNzAyLAorCTB4MjI2NjcxNzgsIDB4MTkxZGE3ZDgsIDB4MWFmM2RlYzIsIDB4MjU5YjVmMDEsIDB4OGMwZTYyNWYsIDB4ZGM1YTJmZjMsCisJMHg3MjM4MWUwZiwgMHhlZGM2MDFiYywgMHhiZTAyZjNhMCwgMHhlYjc1Zjg3ZCwgMHgzYTUzYjA2YSwgMHg1M2U0NWVlYywKKwkweGQwZWNiZTMxLCAweGZkNjBmNWYwLCAweGRmN2JkNmVjLCAweGQ0NjQ3ZjA0LCAweDNhY2RlZWMxLCAweDExODY3NTM4LAorCTB4ZDNiNjlmZTgsIDB4YTA3ZjNmNDAsIDB4MDRmMGY3ZmIsIDB4ZmQxYWE3ZTgsIDB4YjNlZDBiMDYsIDB4OGI3N2MzYTYsCisJMHhiMDExZmY4OCwgMHg2Yjc1MTc2ZiwgMHgzYzgzZjc1NSwgMHhjMmM1ZTVjYywgMHg4ZTEyMTY4YiwgMHhhYzJjMmZkOSwKKwkweDZiOWUwZWY4LCAweDAxMzE3ODVjLCAweGNmY2MzZmRmLCAweGNmY2MzZmVkLCAweGY4ZTJlZGJkLCAweDVmM2Y5OTc4LAorCTB4ZmI4YWZhY2YsIDB4ZGU5YzRmNmYsIDB4OGVkZGZlNGEsIDB4YmJmN2M2M2EsIDB4YTU5YWZkNjAsIDB4ZmFhODNkMDEsCisJMHhjNzNmNTMzNSwgMHg2ODdmNjRmMywgMHgyMWIwOTNiMywgMHhmMzExZGUwNiwgMHg5OGUxMjI0YywgMHg1ZGRhODc3MSwKKwkweDUyNzA5MTM0LCAweGZhMzJmYWVjLCAweDE1YWY5ZTFkLCAweGU2ZDBmZmViLCAweGRkOGUzYzQ2LCAweDFlMTUzOGZmLAorCTB4NTNjZmZiODcsIDB4ZmY2NDcxZTEsIDB4ODdmZjU4MDUsIDB4ZjQ0YmMyYjYsIDB4ZmU4Yzc5M2YsIDB4MGZmMDU0NzMsCisJMHhlZjhmOWJmNywgMHg3YmFjMWRjZiwgMHhlZWY5NDJkNiwgMHhjNmM1Nzg2MCwgMHhmN2UxNGI1NywgMHg3YmY4MGNmNywKKwkweGI3YWZhNDFiLCAweGVlYjljZjBhLCAweGZhMGU3ODIyLCAweDdhN2ZmZDgxLCAweDFmNTJmMjFmLCAweGMwZjdhYWQ4LAorCTB4ZThiYTgzMTgsIDB4N2EyOGNmM2MsIDB4ODNkODlmMjYsIDB4Nzg5Y2VmNzAsIDB4ODc5NTlkYmUsIDB4ZGVmZjFjZWIsCisJMHg5MGVjODcyOCwgMHg5NDJjNmE2NywgMHg4Y2U3YTBlZCwgMHgwMTVhMTIyNCwgMHgyMzUyOTdmYiwgMHhkZjExMzljYSwKKwkweDM0ZmVmZDEyLCAweGIzOTJhYjUzLCAweDQ2YTE3ZWUyLCAweDY4ZDg3ZjllLCAweDI2YWZmMTYxLCAweGFjMmNmZmFiLAorCTB4NTc0ZDEyZmYsIDB4MWY2OGNmY2IsIDB4ZjAzYjBiYTcsIDB4MGUyMTNiN2MsIDB4Zjg4OGQ3ZGMsIDB4YzVmYjBjOGUsCisJMHhmOTdkNzAzYywgMHg5YjBiOWMwOCwgMHgwY2ZmZTM5NywgMHgxNTA5ZmJiZSwgMHhkMWVmMTAyYiwgMHgwZmNkYjE1ZSwKKwkweGYzOGY3OWY5LCAweGE2ZTNlNDdkLCAweDIzMTNkYjg4LCAweGYyZDk3NTNmLCAweGJhMWJiMzU3LCAweGVjYjdlOGUyLAorCTB4OGNjMjNiNzcsIDB4NDBkOTc1N2UsIDB4Y2ZjOGRhYmYsIDB4N2NlMDcyZWIsIDB4NjdiZjAwZTMsIDB4YjlmYjQxNGUsCisJMHhkZTMwZjRhZSwgMHhmYzI3NTk0NywgMHhmM2UzMmIwMiwgMHg2MDFkMzI1NiwgMHg1NDc4OGI0ZiwgMHg4MjE3ZTQwMiwKKwkweGRkODZiMGRkLCAweDYxNmY1ODUzLCAweDI3NWZmYWU1LCAweGJhMTdiOWUxLCAweDgxMTRiMjFmLCAweDY1YWRkOTljLAorCTB4MDcxZTIyZmUsIDB4MWU2MWNmM2IsIDB4MDJjOWFlMzQsIDB4N2NmMjBlZmMsIDB4YWZmZGYzOTcsIDB4ZTdhN2JkZTEsCisJMHgzYTQ3OGU1NywgMHgwZmU1ZmZhOCwgMHhkZGMzMWVmMSwgMHgwZDlmNGNlOSwgMHgzZWExYjNlZSwgMHhjYTc4MzdhYiwKKwkweGRkY2Q1ZWUxLCAweGVkNmVjY2U5LCAweDI1MDljMzk1LCAweGEzZWM3NjMxLCAweGE3Mjg1NTE5LCAweDVlMzk1ZTNmLAorCTB4MTkyNzFiMTMsIDB4YzJlNGNkOWYsIDB4OTRmZmUxMWEsIDB4Y2U3MGU1YTMsIDB4ZjBkMmUzZWEsIDB4ZGQzZWExM2YsCisJMHgxYmRmYzI2MywgMHg1M2ZkZWNkMywgMHhiYWJmZGUzOSwgMHg2M2JmODBjNiwgMHhlMjc3YjU1MSwgMHg1ZmIwYjliYSwKKwkweDFmMzE5MDRjLCAweDg0ZDdiMzViLCAweGM1NWQ5Y2YwLCAweDZmODM4M2VlLCAweGVmMzVlZTQxLCAweGNiYmY4NzFkLAorCTB4NjI4OTZmNTYsIDB4ZDliMzY0ZGUsIDB4YzFmMTAwNTMsIDB4YzBkZmJkZmEsIDB4ZjEzODlmZGYsIDB4OTAyY2M0ZjgsCisJMHg5NTkzYzc4MywgMHhmYjZmYmMyYywgMHgzYTc0OGE3MSwgMHgyNmZiZTNlZiwgMHg1NzlkZjdiMCwgMHhkYjZhYjllMywKKwkweDM0N2Y4YjFhLCAweDRiZDA4OGZmLCAweGVkY2RmN2YxLCAweGQ3M2UyZjRlLCAweDY4OTlmODA3LCAweDVlMWM4MGY0LAorCTB4Njc1ZmU0MzgsIDB4YmZkNjA3ZjcsIDB4MjRhNTlkMTksIDB4ZjMwNmZmYTAsIDB4YTdlZGVhMTcsIDB4ZWIxZGY3ZjAsCisJMHg0OWRkOGZiYiwgMHg0MmU5M2UzMCwgMHhiY2ZiMTVmYSwgMHhiOWViNzFmOCwgMHg4ZmFkZGFmZSwgMHhkNWRmODNjZSwKKwkweGY4ZTc2ZmFiLCAweDU5ZjdiZmU3LCAweGRmYzYyOWFmLCAweDVmZjgxNDliLCAweGYzMWY3NzEzLCAweGM1ZGUzOGY3LAorCTB4MTkxMWM0ZjMsIDB4NzZhNGI5ZWYsIDB4OGZmODE2NDUsIDB4MjAzN2VjNGUsIDB4MzM1ODlkYmQsIDB4MTA1N2VmMTksCisJMHg1ODUzZDVlMywgMHg4ZjRmOTRlZCwgMHhiMDI5OTUzYiwgMHgxNWIyMGJiZSwgMHhiNjc2ZmYzNiwgMHhlOWVmMTU3ZiwKKwkweGJkZjgxMWY4LCAweDJkM2VlOGNlLCAweGRhMGRhZmU2LCAweGM3MTAwOWEzLCAweDc5NDRlZDE0LCAweDVhZmQzZTY4LAorCTB4ZGRiN2JkZmMsIDB4ZGQ3MDA3ZTksIDB4YTAxMTVkMjksIDB4NmQyZmNkMmIsIDB4YmYwM2I3YTgsIDB4ZjcxYmJmNjQsCisJMHg4MjA5Mjk3MSwgMHg4ZWY4MzQ5ZiwgMHgwNzdiZjcwMSwgMHg5ZWQwMTlmNywgMHg5ZDk3N2MxZSwgMHhlZjcxMWZjZiwKKwkweDA1OWEzNTlmLCAweDdlMDZkY2Y3LCAweGRhZTUwZTM5LCAweDBiNzQ2NjYwLCAweDc4NGRiZmIzLCAweDUxZTBlNGNmLAorCTB4NWUzY2Q1ZmYsIDB4ZDFlZmM2OWMsIDB4ZWZiYjAzNGMsIDB4MTg1MzNlYzIsIDB4YzRmYTNlZWMsIDB4NmM5MDQzYjgsCisJMHhmZGZiZTM3MywgMHg4ODJmYmMxNiwgMHgyNGY5ZDkzZSwgMHg3ZjFiOGY2OSwgMHhmMTc0ODkzNywgMHhmZGY4MjNlZiwKKwkweDA5ZmU1OTAzLCAweGM4MWZhNzIwLCAweGUxNWJmZGEzLCAweGVlZDg5M2ZiLCAweDRhZmZhZTQyLCAweDkyMTE1OThjLAorCTB4Yzc0YmM3Y2UsIDB4ZDlmZDMzN2UsIDB4Y2NmYTVlZjgsIDB4YTgwZjdlY2QsIDB4YjA0N2Q3OGIsIDB4NWZmMDYwM2UsCisJMHhiZGY4ZjM4ZCwgMHgzMjhjZjQ4ZCwgMHg1ZjdhYWZjZiwgMHg0OWQ5N2RlNCwgMHg2ZTAyOGViOCwgMHgyM2I0Njc4YSwKKwkweDkzZDJmMWUzLCAweDAyOWZmNmNkLCAweDM5NzRmMTFmLCAweDgwOTc5ZWI0LCAweDc4MzJmYzBmLCAweGI2M2VjMGJmLAorCTB4ZWEyNmFiOGUsIDB4OWNlOTNjOTksIDB4ZGUzMmY2OGMsIDB4Mjc5MzE0MzAsIDB4MDdkZjdjYjgsIDB4M2E4Mzk3NDgsCisJMHg5N2EwZDNlZiwgMHg4NDc1NDdhMiwgMHgyZDQ4YzNkZCwgMHg1NDU3ZjAwMywgMHgxNmY1NzZiMCwgMHg3MDEwZjdlNiwKKwkweDA3ZTdlMTljLCAweDFlNTkzYjFhLCAweDNlZTc5OWUxLCAweDg1NmY5YWM4LCAweGE4MWZmM2YzLCAweGZmMGJjZmNlLAorCTB4MDEyNGVkMjEsIDB4OGY1NjMzZmMsIDB4YzQ1NzUwOTIsIDB4YzIyZDc2ZWMsIDB4NmU4ZjdlYzUsIDB4ZGZjMTRlOGQsCisJMHgzZTNlMGMwYiwgMHgyNzEyZmQxMSwgMHhiYzVlY2FmNCwgMHgxNWQ1NzYwNywgMHg2ZDI3YTAxYSwgMHg0ZmJmOTczMSwKKwkweGZiODk3OWIwLCAweDZkM2RjNGRkLCAweGM4MTk3OGYxLCAweDk5YjJmYTY2LCAweDNiODJlZmY4LCAweDI1MTM4ZmZlLAorCTB4ZjE0YjA3ODUsIDB4ZmY3NDRhYmUsIDB4NTJjZDIwNmIsIDB4N2U1ODlhZjYsIDB4OTE4NWVhM2IsIDB4MmZlYTQyZjcsCisJMHhmZjgyN2JmMSwgMHhiMDUzZTViYiwgMHg5ZjgwNjU1NiwgMHhkNWU4MDI2MCwgMHg3ZmI2NzZkMywgMHg0MDIyNWJjNCwKKwkweDNjZDk2YmJmLCAweGI4MDNlMDNiLCAweDRlZjg4MmZmLCAweDViYzQ1ZTgzLCAweDRlMWUyODI1LCAweDllM2VhYzRiLAorCTB4MWJiYzg0Y2UsIDB4MWJhMDBmODEsIDB4YTNiZTE3ZTgsIDB4OWQ5ZTdmN2QsIDB4NzYzZmY2YzMsIDB4MTc5NDNmMjcsCisJMHhhYTVlNDNkNCwgMHg0OTAxNTdkMCwgMHgwZjdkYzBkNiwgMHgwMjRhMWQyNywgMHhjZWM5ZTVkMCwgMHhjODcyZTczYywKKwkweDI5Mjg3MWY3LCAweGUwNzZmNmIxLCAweDBlN2JjMTEwLCAweDczZmYzODE0LCAweDkyMmVmYzM1LCAweDA1ZjgwYTc3LAorCTB4ZmVkNTNiNzcsIDB4NWU3ODc4ODgsIDB4ZmQ0MDFjYTgsIDB4YzY5ODVmZjMsIDB4ODAwMDUzYzUsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGI1ZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZmZiNSwgMHg3OTMzMjY2NiwKKwkweDg0ODQxZTRlLCAweGU0MjQ5ODQwLCAweDA5MzA4NDAxLCAweDA3NDE0MTBmLCAweDY4MTUxMDQ4LCAweDg1MjgwOTc4LAorCTB4NDIxMDA3OTMsIDB4MTdiNjg4MWUsIDB4MjQwY2RiNWIsIDB4NDFiNDVhMjAsIDB4NzY4YmQxNTEsIDB4YjQ1NDQxNDAsCisJMHgwMzQxNDE0MSwgMHg1OGE1MDA3NywgMHg1NmQ1NjM1MSwgMHg4ODBkY2I2ZCwgMHhhODMxMWZiYywgMHhhZGFkZmY5NywKKwkweGZiNWJmNWZmLCAweDkwY2U2NDljLCAweGY5YjdiNWE4LCAweDY3ZDlkODNlLCAweDdiNWFkN2JmLCAweDNiZGFmNWVkLAorCTB4M2Y0MzdjZGYsIDB4NzU2MTA5ZDcsIDB4MTBmNDQyMmIsIDB4MTE2ZGNlMjIsIDB4YTMxMDk4NjIsIDB4NDJmMzgyZGMsCisJMHgxMWM4ODVkOCwgMHhjYThkZjNmYywgMHg1YzNhZGI4OSwgMHg4ZGY4ODU4OCwgMHhkYWY5YWFhYSwgMHgyYmM4OWViNSwKKwkweDFmNWMyZGViLCAweDc3NDY3NWUzLCAweGI1ZjFiZGYxLCAweDI4ZjI1MGZmLCAweDA4NGMyMWIzLCAweDVkM2RmZTg3LAorCTB4MWUzMTBmODgsIDB4OTBlYTdiOGQsIDB4NDYwY2E3ZGQsIDB4MDlhYzJlMWEsIDB4NzVhYzU0NDIsIDB4YTUxYTQ1ZmEsCisJMHhiYWNjNGU2ZiwgMHg0Mjg1ZTY1MywgMHg1YzZjYzc3NSwgMHhlMzRhZDg5OSwgMHhjYTJhNmY5NiwgMHgxZmIyOTExMiwKKwkweGQwYWFmMzQxLCAweGVhOWU1NWU3LCAweDBhODc1MmNkLCAweGVhYThmNmQxLCAweGViZjY4NGRhLCAweDZhOGY5ZTU1LAorCTB4YTUxZWI4ZjMsIDB4ZGJkNjI3ZWYsIDB4OWZhOWNiNWMsIDB4MjczZTdkMGEsIDB4YzVkMTZiN2EsIDB4MGFiNzk0YjksCisJMHhmMjgwYmRhYiwgMHg0NWRhMmQ1NiwgMHg1NDc4MmVmZCwgMHhiMTc3ZjYyZCwgMHg4MWY3YWEzZSwgMHhmODBiYTBiNSwKKwkweDNhODk0ZDYwLCAweDFlYTgzMjdjLCAweGUzOTQ2OWQ2LCAweDcyNjhmN2JmLCAweGMyZmNkMTU3LCAweDYzY2M3N2U5LAorCTB4ZDFmN2UyYTMsIDB4ZDFmNDRlZmMsIDB4ZmM3ZjIxZTYsIDB4ODJiMTMwOTMsIDB4NDVkYWVhZjIsIDB4MmJkY2VlZDEsCisJMHhhMWMyN2RlMSwgMHgwMTcyN2I0NSwgMHgwMzFlYjk1ZiwgMHgxOGUzYTE5ZSwgMHg3ODA4YmNmMCwgMHhiYWJkMjBjNiwKKwkweGFiZjA0YmM1LCAweGEwZjU0ODdkLCAweDRiZTZiZWNlLCAweDk4ZGY4MGQxLCAweGFlNDc0NTNkLCAweDYxYjVmN2MxLAorCTB4ZWNkYThjMjIsIDB4Y2VmZTljM2IsIDB4OGI4ZjM0YWQsIDB4M2Q0MTU1YWIsIDB4MTkzZGQyOGEsIDB4ZGJjNjgyODksCisJMHgyZTdjZjk2ZSwgMHg0ZGJmNzNlMCwgMHhkMjkxN2FjYywgMHg0N2E3YjdkMiwgMHg0NmZkMjg1YiwgMHgyMWY1MWZhNywKKwkweDZhMzUyNzA5LCAweGFlN2NmNDdhLCAweDk4YjkzZWRmLCAweDllZGNjN2YyLCAweDdhYTA4MmM0LCAweDJjZTlkNjNmLAorCTB4NmI2NTVmMTQsIDB4NzE4ZDE2ZmYsIDB4NzhkOGQ2MmEsIDB4MmU1ZTA2NWQsIDB4YmYzNDFkNjIsIDB4ZmUxMThkOGIsCisJMHg4Yjk3MDRlNSwgMHg1ZmI4ZGJiZCwgMHhiZjQ2NGYwMywgMHg0MTgzYzAxNSwgMHhhNTZmNTQ0ZiwgMHhlMzhmYTVkYiwKKwkweDExNDcxN2IzLCAweGUxYjRkMzVjLCAweDY0ZTgyZTllLCAweDJlMzQ4M2MxLCAweGU1MWY1YmZhLCAweGZmN2RlNjc1LAorCTB4NzQ3ODBkNzEsIDB4MjU5NjliZTAsIDB4OGYwM2ZjMGMsIDB4YmM2ZGE0NGYsIDB4ZGU1OWJlOTcsIDB4OTNkMTBhYjMsCisJMHg3ZDc4ZDBlMCwgMHhjYmRmNDJhYSwgMHg4NTA5ODRmNiwgMHhkYTUzMmJmYSwgMHg5YzA5Mjg4ZSwgMHhhYzE0ZmI3NywKKwkweDhjM2NmMTdmLCAweDk4NzFmNjU3LCAweGY3YzdlNTA1LCAweGYzYzc5ZjVlLCAweGMxMmJjMTBhLCAweDdhMmJiNTI5LAorCTB4OTZkNjk4YmYsIDB4ZGY4MjA5ZWEsIDB4NzM2ZDNlYzUsIDB4N2QwNmJlNzksIDB4ZTc5YmNlNzQsIDB4NGMzN2JiNTEsCisJMHg0YzVjNWY2MCwgMHg3NjQ2N2MyMywgMHhmODAxYjFjMiwgMHg1ZGY1YzYxOSwgMHg2ZjZmYTY3NiwgMHhiMWQ3ZTAxZSwKKwkweDdhYzg1NzVlLCAweGZkZWIyMTVkLCAweDBiN2QzMDQwLCAweDI5ZWJjNjhmLCAweDgyY2MyNGZmLCAweGRjMGZlNWVmLAorCTB4NzFhNmU1OTQsIDB4OGUzYmRmOGUsIDB4Y2UzYzc1ZDcsIDB4NzVmZDg3OWIsIDB4Y2ZmYTk1M2MsIDB4ZTU5ZDcyYmQsCisJMHg3MzNhZDAwZiwgMHg4ZDlkNjViZiwgMHhiNzU3YzY0ZSwgMHg3YjZiOGNlYiwgMHgzYWNiN2M0MiwgMHg2ODc0ZWEzNywKKwkweGFiMzNmM2FjLCAweGZhOGFkYTNiLCAweDljYjE1NWJiLCAweDE0ZmI2YThhLCAweGNjOGQ3ZmRmLCAweGQwZDA1NmJiLAorCTB4MGY0OTM2YjUsIDB4ZmMyMzZiYjUsIDB4NjY4NWQ3YzAsIDB4NmU3ZjA0ZGIsIDB4ZjFhMDFmMjcsIDB4NTgzZDI3YmUsCisJMHg4ZjhlMWU5OCwgMHgwMjNjM2Y3NSwgMHhlYTlmNzVmNCwgMHg5NzAxYjlmMiwgMHg5Y2ZjZWYyMSwgMHg1N2VmYzdmMiwKKwkweGIxZjkwMjVkLCAweDBmYzQ3ZTEyLCAweGM3MGZlMDJjLCAweDczMjc4YjUzLCAweGI1Y2RhZjdlLCAweGI0ZjlmYTgyLAorCTB4MDQ3ZjZmZjEsIDB4NjNkYzVjZmQsIDB4NWY1ZTBiNzMsIDB4OTBiM2ZkZjEsIDB4YWY4MmY5YTcsIDB4YzY2ZTVjMTEsCisJMHhlYmNlNTRiOCwgMHhkNjE5ZWY1NywgMHhlOGYxNzI4OCwgMHhiYmE2NTc2MCwgMHgwMjE0YmUwYiwgMHhhYTM1OGFlNywKKwkweDAxZDIxZjY5LCAweDNlZDVlM2MxLCAweDNhYzZlMjkwLCAweDg3MTMzODBjLCAweGE4M2E5YWNkLCAweDRmYzgxZTEzLAorCTB4OTcwOWQ0MWYsIDB4OWFkMGJiNWEsIDB4ZmIxMmZiZjgsIDB4ZmM0MTQxOTQsIDB4OTc0OWYwMGMsIDB4M2NmZjQ0ZTcsCisJMHhhMmQyYzdjOSwgMHhjODczZjY4MywgMHg4ZmY5NDJmYywgMHhmZjQ4Y2Y1MSwgMHhjYzU3YzFkMiwgMHg3MDUxNzhmYywKKwkweDE5NTBlMDllLCAweGMyMWM1ZjkyLCAweGNhNDJhYTM3LCAweGI3Y2E0M2FiLCAweGY5OWNmYWY3LCAweDEzZjhlODQwLAorCTB4MzFiZWU0ZDMsIDB4YzNhYTU4ZTAsIDB4OTE0NWJiNzEsIDB4YzUzZWU0N2MsIDB4MmQ3ZTg5YmYsIDB4NGJlZGJhYjUsCisJMHg4ZTJmZmU2OSwgMHg0ZmQwZjMxMSwgMHhhZTM4NTU5OSwgMHhjZWQ5N2RlNSwgMHg4YWI1MmJlYiwgMHg3YzAyYjA4NiwKKwkweDYzM2Q3MGY3LCAweDQzNWZkNGRkLCAweGMzZTUxYzU4LCAweDdhYTIxZjI1LCAweDc5NDFlYzEzLCAweGYzMWFkZjgzLAorCTB4ZjA5MzRmMDksIDB4NWJjNWQyMzAsIDB4ODNjNzhkOWQsIDB4MTRkZDU5ZTAsIDB4ZWVkN2NhNmIsIDB4ZWUzYzZlNGEsCisJMHhjNjJmY2NlOCwgMHg2ZmY0YzkyZiwgMHgzODdlYWQyMiwgMHhhYTdmMjJlMCwgMHg4YzFlYjU3NywgMHhiMjQ5ZmEyMCwKKwkweGQ0NjllMTY4LCAweGZmODNjNWVmLCAweDY2ZWI5ZDFiLCAweDI2MmYwZmJjLCAweGU5YTgxNmZjLCAweGY1YTYxZDJmLAorCTB4M2Q1NmVkYjYsIDB4OWJlZmQwOWIsIDB4NWYxMWZjZjIsIDB4MWI3ODdhNWYsIDB4OWJkOWFmN2QsIDB4Nzc3NWVlMjEsCisJMHg4ZTE0M2ZhZSwgMHg4YTVkNzcxNywgMHgxN2VmYTc0ZSwgMHgwNWMzZDkwZSwgMHhjZGE1MDFjOSwgMHhkMWVkNjNmMSwKKwkweDg0YmFiZmJjLCAweGJiODc1YmJiLCAweDZiMDVkZmQxLCAweGEwOTRmNDZiLCAweDZiNDQxNzdhLCAweDdhMjBkNGY0LAorCTB4YTk3NWRkMjksIDB4ZmMzMWU0NGUsIDB4MWYxMDZhN2MsIDB4OGY0Zjc0ZmYsIDB4MmY3ZDJhYjEsIDB4YjFhZjdkZmIsCisJMHhlOWM3NGExNiwgMHg3MzZmZGVmZCwgMHhlNjg2YjkzZiwgMHhlNjFkZGJlZCwgMHhiZWYzNGNkOSwgMHgwYjJjZTZmMCwKKwkweGIzNzg1ZmRhLCAweGVhN2Y0ZjQyLCAweDRmYjNmNGU1LCAweGI0N2UzMTUzLCAweDMxYmJkMjQ1LCAweDI5MzQ4OGRlLAorCTB4OGU1OTk1NGYsIDB4ZmMxYTMxM2UsIDB4Njk5ZWQ1ZmYsIDB4ZTU5ZDY5ZjUsIDB4MmM4Mjk2NjUsIDB4YWQ5Yjc5ZTAsCisJMHg3ZGU2MmU2ZCwgMHg5NWFiMTE0MSwgMHhjNjdlY2ViOCwgMHhmZGI5YjlhNSwgMHg5ZjI3ZGQ4NSwgMHhmNGY4N2YwMCwKKwkweDYwMDUzZWZlLCAweDY3NzYxNzJiLCAweDdlNTQ2OWU3LCAweDU5MjFlM2UxLCAweGMyZjdlYTJlLCAweGYwMWVjOTdkLAorCTB4ZjczNjZkODUsIDB4ZWVkZTk5NGYsIDB4ZGY2MGYyODksIDB4OWM2MWZkMWIsIDB4Zjc3ZmU4MjUsIDB4YTQzNWMzNTUsCisJMHg1MmY5Y2IxZiwgMHhlMzkzNGYzZSwgMHhjZTgyOTRmYSwgMHhlZTJkYTM3ZSwgMHhiZjAyOGY1ZiwgMHhiM2NkYmRmOCwKKwkweDdmYTU5Mjk5LCAweDhiMTllOGNmLCAweDc3M2Y2MWY1LCAweGQ1YjI4NzgxLCAweGUyNmRjMjYxLCAweGRlNzgyYjI3LAorCTB4ODc2M2MyYTUsIDB4MTE3Mjg0MWMsIDB4YTJlNTVmNDQsIDB4NmZjZmJmOTgsIDB4NDA1ZjdmMzQsIDB4MTdkZjAyN2MsCisJMHhhZjdmMzdhZSwgMHg1YWFiOGQxMCwgMHhmYzhiN2Q2OSwgMHhmNjgyZWZlNiwgMHhmYjExMmY4ZiwgMHhlMjY5ZjhkYSwKKwkweGQ2ZjE3ZWYzLCAweGY1NGNjMjZmLCAweDBmZTc0Zjg0LCAweGE1YzdlNjBlLCAweGM3YzExZmI0LCAweGZlZmM1NzllLAorCTB4M2RlZmMwMTUsIDB4NzQzM2FmMmEsIDB4ZDJkM2NiNWQsIDB4NDQ4ZjFkNzgsIDB4NmI2ZTYzZmMsIDB4NTk4ZjVlMTAsCisJMHhlMDg5MzU4NCwgMHgxYzJlY2M3YSwgMHg0N2U4MDU0OSwgMHhiZWFiOWMwOCwgMHhjZGZlNjEzZCwgMHhmZWRlZTRkNCwKKwkweDMyOTZhNTVmLCAweGUwYjI0YmRmLCAweDA1YzNiODNjLCAweGVkZmQ0N2NlLCAweDdlOGE5OTM5LCAweDc5MTc1NmNhLAorCTB4NzdlNjgzNWIsIDB4ZTQ3ZGU2ZDEsIDB4ZGY1NzkwZTcsIDB4ZjU0ZDdlMjMsIDB4MzdmNThkOGUsIDB4MWQ3OWE1OGUsCisJMHhkNGY1NTdiYiwgMHgzM2FmMzE3NywgMHhlM2Y5OWYyNCwgMHgyOGY3MWUwOSwgMHhmMjg0M2ZjMiwgMHgyZDRjOWNjZiwKKwkweGRlOWNiYzIxLCAweDM0YjUzMjdjLCAweDMxMTVmZTk4LCAweDhkMWU5ODJiLCAweGViYzI2Njk0LCAweGY0ODlhYzgyLAorCTB4ZWIwNWFkMTgsIDB4ODlkN2FkMDksIDB4MGQ3Y2YzNWYsIDB4YjE1NTNhNzgsIDB4Nzg3YTJiYTQsIDB4ZTU0Zjc0MTQsCisJMHgwNTU3N2YzOSwgMHgzZDlhY2VlNCwgMHgzM2U4M2YzNiwgMHgwZjE3ZTM2MiwgMHg2Y2ZhMGFkZiwgMHhkYTQwYjliNiwKKwkweDJmNTQ3YmI1LCAweDViYjE3NGU0LCAweDFjZTI2N2Y1LCAweGJhMzRmZTZiLCAweGVlY2NlNzEyLCAweDY4MzUyZTIxLAorCTB4MTcwZTc0ZGQsIDB4YjBiOTdjZTMsIDB4NTk2MjUyZWIsIDB4MTkzM2Y3MmUsIDB4OWVlZDQ0ZjIsIDB4ZGZhMDNjODcsCisJMHg1Y2YxZTZlZSwgMHhmMWFmZmE5YSwgMHhmZjk5YWYzZiwgMHgyMGZkY2Y5ZCwgMHg4MWYwNDZmMSwgMHhjMGIyMjc4ZCwKKwkweDNlMGY4OWRmLCAweDk5ZmQ4Njk3LCAweDc5MWRiNWY1LCAweDgzODc1YTIxLCAweDJjN2U2OGZlLCAweDdmZjQ1ZmJmLAorCTB4YTNhNWYyYzUsIDB4YmJmYWY1NTksIDB4MzQ5ZWMzYzAsIDB4MDdmZmMzM2IsIDB4Y2QwMjZmY2YsIDB4N2U3M2IxMmYsCisJMHhlMDNkOWYzNCwgMHg2YjNjYzZjYiwgMHg5Yzc2NmRkYywgMHhkMTFkMTdiMywgMHhiNGE3ZTA3OSwgMHg4OWY5ODlhMCwKKwkweDA2ZTRmOWZhLCAweDI4OWIyZDdmLCAweGVlMTZiZjg4LCAweDA5YzJiZjllLCAweGYxNTFhMTc5LCAweDZmMjgwZjQwLAorCTB4MmFkY2Y5NTYsIDB4ZGRmYWEwZGYsIDB4ZWNjMjk3ODQsIDB4MjEzYmY2YmIsIDB4ZTU0NDNlOWYsIDB4M2FiYzc0ZDQsCisJMHhhOGIzOGZlYSwgMHg1NGZiYzJmZSwgMHhmOGRiZWZjZSwgMHg4MGRhM2ZkMywgMHgxMTM2MGRkNywgMHg0Nzg2M2MwNiwKKwkweDYzYzdkMjZmLCAweDNlOTE2ODc5LCAweDM3Y2Q0NWJmLCAweGI3YTA1NjlkLCAweDAxM2Q1MWVjLCAweGU1MWNkZmI0LAorCTB4ZDViMmY3YzEsIDB4ZjRjMTYzYjYsIDB4NTBiZjFmMzUsIDB4MmJkN2YzN2YsIDB4ZjgxYTQwZmUsIDB4YzJmY2I5ODQsCisJMHgyN2NlOWYzMCwgMHg1YzZmYmU0MiwgMHgwMjdmNzUzNSwgMHg4OWViMmI1MiwgMHg3MmU2ZmM4YiwgMHhmMzRlYmNmYywKKwkweGRmN2ZkNWE5LCAweDE3YTZiOTlhLCAweDI5YzE3M2YwLCAweGFiZjYwYjQ0LCAweDFkZjU5NWI1LCAweDA1NGQ2ODExLAorCTB4ZmVlYzJmMWUsIDB4YWM3ODE1MmMsIDB4YjI3ZmY1N2QsIDB4ZWJmODE3NDQsIDB4NTFjZDRmZDgsIDB4ODQyMjI3MDksCisJMHhjNmU3NGIzOCwgMHhmZGQwMTYzNywgMHg1ZGM1YzlhNSwgMHg4ZmIxN2ZkNCwgMHg2ZDViMTdkYywgMHg2MzkwNWViZSwKKwkweDhhZmM2ZmY3LCAweGRkYzVjMWY5LCAweDE3NTc1ZjVhLCAweDVmYjlkYmY0LCAweDEyNGI0ZTdkLCAweDIwNTM4MGQyLAorCTB4YmFlNGRhMWQsIDB4ZTQ4NGZiMTEsIDB4MWY0MTdiYzEsIDB4ZGQ0ZDU2OWIsIDB4NmJlNzc5NDQsIDB4YTI0MjQ4MzYsCisJMHhmNzkyMzMzNiwgMHhmY2M3ZjYwYiwgMHg3ZDhkN2VhMCwgMHgwMTdjMTViMiwgMHgxZmM5MzBlOSwgMHhlNTIzZWM1ZSwKKwkweGJjYmFkNTg0LCAweGZiNWY3NWIwLCAweGU2MmVjY2U0LCAweDI2Y2QzYWIzLCAweDkyM2VkYmNmLCAweDJiNGRjYzZmLAorCTB4OWM4NzRmMGUsIDB4MDM0NWYxNjEsIDB4NzVlYmMyMWYsIDB4MTU3YzEwMjcsIDB4OTdlYWJlOWQsIDB4M2RmMDUxMmQsCisJMHhkYTcyMzQ0OSwgMHhmYTcxMzQ1YiwgMHgyNDVhMTBiOCwgMHgwYjhmMGJlYSwgMHg0ZmEyMTY3MCwgMHg3YmM3ZTAyYywKKwkweDMxYWJkNzllLCAweDhlODlmY2RmLCAweGQwNmFmMDNiLCAweGY4NTYyZjgzLCAweGVhZWZkMzM3LCAweDYzNTA4NzQ2LAorCTB4NDZiNWVkMjAsIDB4YTBkNDUxYTMsIDB4NGJlZWJmYTksIDB4NTQwZmI2ZTUsIDB4M2VkNDlmZDYsIDB4MmUzZDNlMDYsCisJMHhjOGNiZjdlMCwgMHhmOGMxMzFlOSwgMHg3NGI4NzdkYiwgMHhkZWFiZmEwMiwgMHhmNTJlN2E0OSwgMHg0ZDg3N2U3NywKKwkweDU5NTdhMDA0LCAweDNkNTBiZjY5LCAweGVjMmZlMWRiLCAweGNkNGJlMDY5LCAweDVjYmM4MDhhLCAweGFmN2M3OTRiLAorCTB4ZmFmNTY1MWQsIDB4OTc5MmUwODMsIDB4OWE5MWUxMmUsIDB4YmI3MGM1OWUsIDB4OWExZWY1NjAsIDB4OTU3M2ZhMDgsCisJMHhkYmQ3MjFkYSwgMHhjMDRmOTcwZSwgMHgyYTRiNjM3OSwgMHhmYjVlNjNiNSwgMHhhNDc1OGYwZSwgMHg1NmIxNmYwMSwKKwkweDlhYWIzN2RlLCAweDVjNWI3MThkLCAweGY2MmEzZmU4LCAweDQzNmY5ZTAzLCAweDUzNDQ0NWFlLCAweGMyOGY4NmJiLAorCTB4ODc0YzBjZmMsIDB4M2E2MTQzZTQsIDB4ODUwMjFiNWMsIDB4ZjgxNzc3MGUsIDB4MTRjMjg5ZjEsIDB4NzdjYTgyMzEsCisJMHhjZjMwMTNhOCwgMHgxNzUyYWVmMywgMHg5NThiNjhmMCwgMHg5YjMwODc3NiwgMHg5YWY0MDI3NywgMHg3OGI4ZDhiMCwKKwkweDdhNDQ2ZmNjLCAweGFiZmZjZjA2LCAweGNmM2MyNWQ4LCAweDgwYmM0OGFmLCAweDdhZjI0MWJlLCAweGJkMGRmMjMxLAorCTB4N2Q4NjU1Y2IsIDB4OGZiYzIzZTMsIDB4ZmM3MjFkNmIsIDB4OWYyYTNkYTgsIDB4NDNhNDYyYTMsIDB4YmJlZmRiZTcsCisJMHhjODljNjhjYSwgMHhkMDI0ZGFiZSwgMHhhODlmMzE4MywgMHhmMDBiYWY2MSwgMHg4NThiMWNlNywgMHgzNzg2YjNlNSwKKwkweDJmODBkNzIyLCAweGQyMWJlNTE4LCAweGY4MTliZDI1LCAweDc1NjA5OTU4LCAweGFlM2M3ZjgxLCAweDU3NGFlN2QzLAorCTB4NjgyMGEzYjEsIDB4MTYxZWI2OWQsIDB4MGVjNTVlMWQsIDB4YmRiYjY5YzAsIDB4OTdjZTEwZjgsIDB4NzM4ZWZhMzYsCisJMHg1NGQyN2Y3MywgMHhhYTE0ZjQwNywgMHgyNzNmNDE2NywgMHg2NGM3NjhlYSwgMHgwZWU5ZGZhMywgMHg0MjQxNzdjMCwKKwkweDViYjQ3OGU5LCAweGMyYWM5NjI4LCAweDVlYjg1YjdlLCAweDNlMjA4MTE1LCAweGUzOTM2MGRiLCAweDIxMWNiODJlLAorCTB4YzczYTQzMDIsIDB4ZTNmODQwNWQsIDB4ZjlhMzk3ZjYsIDB4ZDY1MzgzN2IsIDB4ZmI5Mjg4NmIsIDB4Mjk3NGNlZTcsCisJMHhkM2Q0YWUyZiwgMHg4M2ZhN2FiNSwgMHhjY2M3YmFmOSwgMHhmZWM3Y2ZkNywgMHhlNGE5NGI3MSwgMHg1M2E2NzdlZiwKKwkweGViNGFkNWJmLCAweGFiMjY4ODc4LCAweDgwZWRkYTkyLCAweDk3M2E4OWVmLCAweGNkMDU4NDA4LCAweGM2NzU4YWY3LAorCTB4MzhkMDQwOGIsIDB4M2IyZWY1MWQsIDB4MTgzZTIwNDUsIDB4NDdjNjZlMWYsIDB4YjkyMzdhZTcsIDB4MTI1ZDQ0ZmMsCisJMHhmZWZiYjFjMywgMHhlYzcwNGM1MywgMHgwNGMzM2ZlYywgMHhjZmZiMmJjNywgMHg3NTEzZjJlMiwgMHhmZmQxZGYzOSwKKwkweDRmZmE2ZWMwLCAweGIzYmZjZDMzLCAweDVkZmM3ZWRmLCAweDgyZmFkMmVjLCAweDIyZWRkY2JmLCAweGQzNzRjMDdlLAorCTB4YmIyNjc2Y2EsIDB4NzYwNmZkYTIsIDB4OTg3MWYxMmYsIDB4OTVmN2RjODAsIDB4MDU3NmNiNTMsIDB4ZTk2ZDg3ZjEsCisJMHgwYjlmNWQ3NiwgMHhmYWRmODBhNCwgMHg2YjRlM2FjNCwgMHg4ZjFhNWQ3NywgMHgwYmUyNmVmNiwgMHhjYmQwZTc2YywKKwkweGNmMWI0NTZiLCAweGZhMDJmYzEzLCAweGJhYjY0OGJkLCAweDk2OTc3Y2I5LCAweDk4YzhiZDBkLCAweGYzM2M4NzQ3LAorCTB4ODU5ZjQ4YmIsIDB4OWVkODQxZjYsIDB4MWY2MzQ3YmYsIDB4NGRiNmI0NWYsIDB4YTlhYTdkODYsIDB4ZGUwODhkNTksCisJMHhmZGY0MDdkNywgMHgxN2NmYjYzMSwgMHhkNWQ3YjA3OSwgMHhiZGYxMWRhMCwgMHg5YzVkZWU5ZiwgMHg4NGQ0ZjgwZCwKKwkweGRlNjFlNWI1LCAweDJkZmVmN2ZiLCAweDU3YzhlNzBmLCAweGM1ZjcxNjdiLCAweDlmNTRhZGY3LCAweDViN2IwZmU1LAorCTB4YmZhODI3OGQsIDB4YjNlNWMyN2UsIDB4OWI0Y2U4OGMsIDB4ZmExZmZkZjUsIDB4ZmE5ZWViN2QsIDB4MzZjNzk4NWUsCisJMHgyZTQ4M2RkOCwgMHg1NmY2NTlhYywgMHhiMDc4ZjFjNiwgMHhlMDgzZWYyMSwgMHgxNmY4ODI1ZiwgMHhhNmJiNDNlYiwKKwkweGRmMjA2M2E5LCAweDBmMzI0ODdkLCAweDk2ZWU4N2U1LCAweDNlZDBjMzcyLCAweDgzNDk2ZmMyLCAweDJjZTFmN2RjLAorCTB4NjE5YTg5ZjAsIDB4ZTE1NDE3NzYsIDB4OTYxNmZjZjAsIDB4Mzk4N2MzYjcsIDB4OWY5ZjM4NWMsIDB4ZWJjMTkzZWQsCisJMHhjODRlNDNiMywgMHg3OGEyZmI0MCwgMHhmMTU0ZTdhNiwgMHgxYjZkYzlhZiwgMHhlMDRmZjY0MiwgMHg2OGRiMzUwZiwKKwkweDc1YjU2YWJjLCAweGY3ODUzOGYyLCAweGE5ZjAzMWQxLCAweDc4YmZiNzlhLCAweDEzNWZkNzQ3LCAweDhjNWE5ZjgxLAorCTB4NWY3OGYwNGIsIDB4NDMyMTI3ZWYsIDB4OWE3YTg5M2IsIDB4YWJiZWY1YTMsIDB4OWI4Y2RlYTgsIDB4MWZhMTUzOTMsCisJMHg5OWZhZTg5NSwgMHgxOTQwNDg5OCwgMHgxMDY4ZmNjOSwgMHg5ZTU3MjBlYywgMHg3YTBmNTJkYiwgMHhjMDM0ZDE0ZCwKKwkweGYwZWM5N2MxLCAweDk4MWFmY2UwLCAweDcxYzkxYzIyLCAweGY0ZmVkMGQ4LCAweDU3ZWUzNGE5LCAweDJlYzMxNmU5LAorCTB4MDNkZTYwYWEsIDB4ZGYzZDM1ZjQsIDB4MmM2OTY5YWIsIDB4MzhmZTkzOWYsIDB4M2IzZmQxZDAsIDB4ZmJjMzI1YWUsCisJMHhhMzBiZjA3NywgMHhkZjM3ODdmZSwgMHhlMmViNDgzYSwgMHg3OWU0MzBkYywgMHgzNmU5YmRiYiwgMHgzYWFkYjNjYywKKwkweDk4NDdmNTkyLCAweGM5ZWVkMGYzLCAweDJhMDJjMzliLCAweGM4YjY4YWVjLCAweDNmZTdkMGQ1LCAweGIwN2I5ODhhLAorCTB4ZmVlM2MxMDcsIDB4ODMyMjJkMjgsIDB4Nzk5YWNkZGEsIDB4OTVlNDJhYzMsIDB4YTVlZWYxZmQsIDB4ZDY5MmU3YTAsCisJMHhkM2U3YzBlMSwgMHg4MzI2MmQ0ZSwgMHg2ODcyYWZjNiwgMHg4OTY5MTM3ZCwgMHhkOTY4ZmJlNywgMHg4YmU0MzgzMSwKKwkweDQ0OWUyNWUzLCAweDJlZTJhMGYxLCAweDUzZTcyZmU3LCAweDBmZjFjOGEyLCAweGU4NDk2OTQ3LCAweGYyZDJjNGE3LAorCTB4NjZmODU1YzQsIDB4ODM3YjYxNmQsIDB4ZmRjMWU4NjgsIDB4OGE4YmI3OWMsIDB4MDM3ZmU0YWUsIDB4NzVmNDQ3MGUsCisJMHg2Yjg5YjNlYywgMHhmNmZhZDMyZiwgMHhkNGYxOGRhZCwgMHhlZmNiN2NkMywgMHg5NmI3Mzk5ZSwgMHhlMjk2ZjlkMiwKKwkweDlhNmE4MGM0LCAweDU1ZDYxNjc3LCAweDliZTkyYmU1LCAweDc5ZjNmMjRjLCAweDY1ZWYzZTliLCAweGFlYWRiY2ZhLAorCTB4MWNmZGUwYWMsIDB4NDM3YWVmM2EsIDB4YzI4NWY5NWUsIDB4NTBmZjIwZmEsIDB4YWM1ZjE1ZmUsIDB4ODdjYTVlZmYsCisJMHgzMDdkMmU1OSwgMHgyMGQ2ZTcwZCwgMHgzNjQ5ZGIwYiwgMHgyMmRlZDM4NCwgMHg3ZDVkZjIzZCwgMHhiZWQzOGY5ZSwKKwkweGY3ZjFjNDczLCAweDE0OWVmOGQ1LCAweDNkMjdkYjJlLCAweDdlYzNmMTZjLCAweDM3NzYzYzUwLCAweDlhYzllOWUzLAorCTB4NjM0YThmNDgsIDB4MWRiNzA4OTUsIDB4ZjA5OTUwNzIsIDB4ZDlmYzVjYjIsIDB4NjllZGJmOTgsIDB4NjYxNTc1YTUsCisJMHg2ZTAxZDc2OCwgMHhhOTJkZTJmMywgMHhiNDNjZjAxZiwgMHg2ZjIwNTM4MSwgMHhmOGViOTI4ZCwgMHhkNzkzNzkxNiwKKwkweDZjYjg1NTMxLCAweDM1ODk5NDJjLCAweDUzMWZjODE2LCAweGYzMjk3MjVkLCAweGE2M2ZiOTE1LCAweGUzMGRhZjA5LAorCTB4ZDcxYTEwY2QsIDB4YmIwNWMzZmIsIDB4MWZjNGZhMTcsIDB4YmNkMTBiYTAsIDB4N2YxZjBhNjcsIDB4OWNmYzJkOWYsCisJMHg1YzAyMmFkZSwgMHg5NWEyYzdmZiwgMHg4OWJjMDZmMywgMHg0ODI1ZTYzZSwgMHg1M2Q5MzhmYSwgMHg4Y2RmZjg2NSwKKwkweDkxMTdiZjc5LCAweGFkMTk2N2Q3LCAweGQ5MjNjYTYzLCAweGFkNWZhYzk5LCAweGY5ZjBjMWViLCAweGQxNGY3OWFlLAorCTB4ZWZmNjg2ZTksIDB4ZmQ4M2Y0M2MsIDB4OTlmYTlkM2IsIDB4ZmVjODYzN2EsIDB4ZTA2MWVjMmQsIDB4ZjZkYmYzMzMsCisJMHg4NzdiNGI1MSwgMHg0Yzk5MTRmZSwgMHg0NzVlYjg3MCwgMHhjNWRlZjVlOSwgMHhhOTE1M2ZhYywgMHhmODQ3YzI5MSwKKwkweGZhYTUxOTY5LCAweGYyMWM3NzIxLCAweGEwNDg0ZjJlLCAweGI5ZmRkYzc1LCAweGI3N2U4M2Q0LCAweDg0M2RiYzVjLAorCTB4NDYzNzdmY2EsIDB4ZDJkY2Y1MTUsIDB4NjRkNGYyY2IsIDB4YmRjOTlmYmQsIDB4OWQ4NjlmYzcsIDB4MjQwOGIwZjUsCisJMHgxN2I5YTUwYywgMHg4ZjVlZDY1ZCwgMHg1NjRlZjlhMSwgMHg1MmM0MzViNywgMHhhNGRlODRmOSwgMHhiZGYxMDRjNywKKwkweDViYjYxMjFiLCAweGQ4ZGRkN2ExLCAweDYyN2RmY2NmLCAweDk5ZGY1OWFlLCAweGMwNTUxYTI0LCAweDczNTBmMjc5LAorCTB4MGY4MDdkYmQsIDB4MGM4YWQ3ZDEsIDB4MDE4OGI3YTksIDB4ZGZlZTgwNjIsIDB4NDdmYmI5NjMsIDB4MTNlZDFmN2EsCisJMHgwYmUxZDkyZiwgMHhiYjQzMzU3OSwgMHgzYTVjNzAwNywgMHgxOGI5YjNlOSwgMHg3YWU1NTg1NywgMHhkOTUxZGU2YSwKKwkweGU0OGM3NzllLCAweGRmOWQyZjJjLCAweDg0ZThlYmM3LCAweDA4ZjI5MzA4LCAweDZlNDhhN2YyLCAweGNlYTY3YTQwLAorCTB4M2EzOWU5Y2QsIDB4YTE3ZTUxZTcsIDB4NjdlYjIzY2UsIDB4N2Q4MDNmMTQsIDB4NzNmYWJhNTYsIDB4Yjc3MmYwMmIsCisJMHg2ZWY5YzI1MywgMHg3NjFmYWE2NywgMHhjNmE2OGFiNSwgMHhlNTVlOThmMSwgMHg0ODgzYTZhZSwgMHhlM2M1MDNjYiwKKwkweDM4MmVjYzcxLCAweGQyMjBlNGI0LCAweGI2ZjQzYmJiLCAweDVmZGQwZTI1LCAweDVkYmZmM2MwLCAweGEzZGJkM2E3LAorCTB4ODgzNGRlYTYsIDB4YmJlZGM5ZjYsIDB4ZjZlYmRmYTUsIDB4NGRhNzUzM2UsIDB4YzZkZTQwNGEsIDB4YThlOGVlZjksCisJMHgzNDIyYjJmYSwgMHhhOGNmMjJkYSwgMHhiNzU4Y2RkZSwgMHhjMWU4ZjliNywgMHhjOWU3NWE3OCwgMHhmZjNjMTFiYSwKKwkweDllNWU3NWQzLCAweDA5YmFkOWZmLCAweGEzM2RmZTljLCAweDI3YWUzOWY4LCAweDZjNzk2NzNlLCAweGQ2YTNiNmQyLAorCTB4ZTQ1ZmFhMTQsIDB4YjdkOGJjNTUsIDB4ZGY4NTdhZDcsIDB4ZGViMTc0NGYsIDB4ZjU4MWNmMjYsIDB4MWY2MDBlNzQsCisJMHhmNTM0MTk4ZiwgMHhlOTMwM2JmMSwgMHhkYTI3NmQwYywgMHg1MTcxYjhjZiwgMHgzYzk5YzYxMSwgMHg3YThhYzRhMiwKKwkweDIyMTZiZjMzLCAweDRlOTNhZDNlLCAweDhkZWU4YmJmLCAweGY4ZWI1N2Y1LCAweDYxNTdiZjNiLCAweDFiZGY5ZTc4LAorCTB4ZGY2Y2YwY2IsIDB4ZjkwMzExOTEsIDB4OGNjZWU5NjAsIDB4NmY4OTQ4OWUsIDB4MDQ2ZjdhMWEsIDB4ZDk3ZWQ3ZTAsCisJMHhmZjZkZjNjMiwgMHg4ZWY1OWMyOCwgMHg3NzRiZjZkMCwgMHg3YTg5ZWMwZSwgMHgyMmRmMDk2NywgMHhmYjNjZGU0OCwKKwkweDgzYjg3ZmZjLCAweDcxYjM5NWNmLCAweDAyN2Q1ZjRkLCAweGM5NTdmNmZlLCAweDM5YjI0OGRmLCAweDVmZjgxOGYxLAorCTB4ZDAxZTVlZWYsIDB4Y2U1ZDA1Y2IsIDB4MDIyMzNkMjYsIDB4NmU4ZDVmZTcsIDB4NDI3ZjA0NTcsIDB4YjRiODZjZmUsCisJMHgyMTdmMGVlNywgMHgxN2Y2MmM2NSwgMHg5YzEzNzNjNiwgMHhiOTE5MWNjMywgMHg3ZjcwODdjNywgMHhmZDQ2N2U0NywKKwkweDkyNThmY2JkLCAweGI5ZWZmYTA3LCAweDYzYTQ4ZmVkLCAweGYzNGRhZGZjLCAweGZhOGM3OTNmLCAweGY4YjdlZjNmLAorCTB4OWQ0ZTc0NmMsIDB4NWUxNzRkMTcsIDB4MmE3ZTFmMDUsIDB4Nzc3YmVkOTIsIDB4OWMyZjM0MmIsIDB4NzE3YjliYzMsCisJMHg4NmIxNDczZSwgMHgyYzM5YzMyZiwgMHg3M2NmYmNmYywgMHgxOTc1YjcxNCwgMHgxN2FhYWRmMSwgMHg3YTA1ZWQxZiwKKwkweDMwNjA4ZDdjLCAweDViNWZjYTgyLCAweGVkN2NjMTFiLCAweGM4ZTc5YjM1LCAweGI4ZjdmNDMyLCAweGZiZTllZmVjLAorCTB4MGJiNjNjZWYsIDB4MDVkNTdkZTksIDB4NjVmYTUyNzcsIDB4YTFlMzFjNDYsIDB4MDM0NTgxZmMsIDB4NzljZTllZDAsCisJMHgzZGZkNGM5MSwgMHg4MDEyOGFmNywgMHhiYWQwNmFiZiwgMHg2OTkyMmI3ZCwgMHgxYzM3ODM3ZSwgMHgzNGEyZjRiNSwKKwkweDFlYTUyOWZmLCAweDM3M2VjMGU5LCAweGY5ZmQ4MjFlLCAweDZlNmUxOTZmLCAweDlhNWI2NDNmLCAweGQ5NmQ4MjlhLAorCTB4NzVjOWZmY2IsIDB4ZTU5YmZlN2MsIDB4OWY3NWRjODIsIDB4M2EyNWVkOGYsIDB4NGEwMTgzZTUsIDB4MzQ4ZDk5ZDMsCisJMHg4ZmQ0YjBkNywgMHg2Mzg2MzQwYSwgMHg2NzY3YWYyMywgMHg2ZmY3YjRmMywgMHg0OTA3NTgxNSwgMHg4OTc3OTgxZSwKKwkweDkxZTdjM2RkLCAweDc4MTFiN2RmLCAweDc4ZTVhZjNlLCAweGY2MmJiZjU4LCAweDNiN2EwYTNkLCAweDcwN2EyNWFmLAorCTB4ZmE0Y2JkM2UsIDB4N2ZhOGQ1ZmMsIDB4N2NlYmNhYzQsIDB4YTJmN2E5ZTUsIDB4MjE4OWRmNjEsIDB4YmYwOWQ5M2QsCisJMHg3OGRiN2U0OCwgMHhlM2VlYWZkNCwgMHhmNTg3ZjAxNiwgMHgwOWZhZTI3OSwgMHg4ZWNkNGY4MCwgMHg5ZmI5MWI5ZCwKKwkweGZhMDc4NzJhLCAweDRiY2VjNTZlLCAweDJmMjA1MzA3LCAweDk5M2MyMGRlLCAweDMyMWRjN2EwLCAweGFmNDJhYmZmLAorCTB4NTZhNWE1NDcsIDB4ZTY1MmZjNmMsIDB4NWYzOThhNWIsIDB4ZmMyN2RhNGMsIDB4Y2E0Y2EyZmUsIDB4ZTdlODhmNDksCisJMHg2M2NkNjhhMCwgMHhlZTI0Yzk3ZSwgMHhhZmQ3YzRlZSwgMHhlYmU1MThhOCwgMHhiMGM5N2NkMywgMHgyN2U3MWI2ZiwKKwkweGZkYTk3YjlkLCAweGIyZWM2NWIwLCAweDViZDhjYjdkLCAweGRmMmUxOTUzLCAweGViYjNkY2YzLCAweGRmZDE5N2U3LAorCTB4NzNlMTc2MjMsIDB4ZGYzMDNmNTIsIDB4YzFiZTllYzAsIDB4Y2RlYmNmMmUsIDB4MmY0MDY3YzQsIDB4ZTM0ZDc5YzYsCisJMHhlZDkzZjVlNiwgMHgyOWFmZTBiZCwgMHgwNzY4MzJhYSwgMHg5MWU1MjNjMSwgMHhiZTM3OTYzMCwgMHg2MmIzZjhlZiwKKwkweDZkZjlmMTU2LCAweGUxYjU1YmM4LCAweGQ5ZjIyZjkyLCAweDg4NWZlZDQxLCAweDM3ZWVhZWQyLCAweDc5MzI3NjBjLAorCTB4M2JhYjBiZGUsIDB4ZTNjOGYyMTcsIDB4ZmE2YmRlNTEsIDB4OTZkNWJjYjEsIDB4MzlkMDM1OGEsIDB4NTNlNjFkN2EsCisJMHg5NWZjOTJhMywgMHg0NTdmMjQxMSwgMHg3M2FmN2RjNiwgMHgyZGU1MTAzNCwgMHg1YmVmZmI0MiwgMHhjZDA0NmM3ZiwKKwkweGYxMjkwNjMzLCAweDg2YTQ2OGVmLCAweDQ4NWE0NWRlLCAweDdkMzlmYzk3LCAweGYzZjgxMzViLCAweDNmOTI2MTQzLAorCTB4YmU2MTBkNDcsIDB4NzQzM2FjNjQsIDB4MDdjNDAzOWMsIDB4NmYzYmUyMzQsIDB4MTFhMzM5ZDAsIDB4MzkxNzE4M2YsCisJMHg3ZDc4Y2FjNiwgMHg5MDc1NTJkZCwgMHgzOTIyZTVjZSwgMHgxYWRhMDgwMiwgMHhkZWYzOTQzYiwgMHg2MTYzODIyOCwKKwkweDJlYjQyYWE0LCAweDI1MjM0N2Y0LCAweDNhYzdjZGJjLCAweDk4NDQyN2M3LCAweGM0MjUxNWVhLCAweGJmOGZiMWRhLAorCTB4MWQ1NWZhZWYsIDB4M2NiODZhNGYsIDB4ODM3MGQ0YmYsIDB4NzQxM2JhYmYsIDB4ZmFjODdkYmYsIDB4Nzc2ZjdhZTUsCisJMHgzYWJlNjMwZSwgMHhlYjdlZjk1NiwgMHhkZjE1YjIyZSwgMHg4YjhmM2MwOSwgMHg3MzczZTdjYywgMHgyMzk0ZTQ1YywKKwkweGQ0NzVlMDlhLCAweDdhZTg3YmUxLCAweDFjMjVkNzQzLCAweGZhOGU0ZmRmLCAweDE2N2MyMjg5LCAweGVkY2ZjN2VjLAorCTB4YjY2Yjc3NmMsIDB4NWJmNzNlYjUsIDB4YTJmMzZiODIsIDB4NDdlYzBmNWMsIDB4NzBiZWQzMmYsIDB4YjU0ZTlmODAsCisJMHgwY2RiOWNiMywgMHgzN2VhOTJkOSwgMHg1YzcxNzBmNywgMHhkZmJhNmJjYiwgMHg2ZjViMzdkYywgMHhiZTdjMTRlZiwKKwkweGM1ZWVjZjM0LCAweDYxNWVmNDdlLCAweDQ4ZWMxMDM0LCAweGQyNmZkMmY1LCAweDE2ZjI1YjZjLCAweGU1ZTZlYmNlLAorCTB4ODE5YTFlMjksIDB4NjllZmMxNTAsIDB4OTdlNDdjY2IsIDB4MDk1ZWJjZmMsIDB4ODE3ZjBhZGMsIDB4NDBiYjczZWYsCisJMHhmZWIxNzVmZCwgMHg1Zjk0ZTlkNSwgMHg5ZTBjOGJmNywgMHg4ZmE0NDdjZiwgMHg4YWJjNjJkNywgMHhlYjViZTY3MCwKKwkweDcxYzliZDYyLCAweGZmOTc5ZjA0LCAweGIyNzlmMmExLCAweDkxZjI5ZjJlLCAweDZlZDlkN2NjLCAweDM3OGE2ZWIzLAorCTB4MDRhZDdlMTksIDB4MzZlYjZmMWQsIDB4YjA1ZWYyY2EsIDB4NGQzY2EyOTMsIDB4MjZjNGZmYjYsIDB4ZDdhMmRmZWIsCisJMHhmYmYxZDA0YiwgMHhiNGE3NGViMSwgMHg2ODNmOTlmZiwgMHhhMGFjMjM5MywgMHg5NWZiNzdmZiwgMHg0NmZiYzZiZSwKKwkweDE3ZTE5Mzc4LCAweDkzM2NhYzdhLCAweDU0Yjc5ODZkLCAweGY0YzY5MGRlLCAweDY2ZDNkYmE0LCAweGU4ZGNmY2U5LAorCTB4YzMxYzBkMTcsIDB4OWZjYjRmMjEsIDB4M2IzN2YzZDksIDB4MmEzM2RmNDEsIDB4MWYyMTQ3OWMsIDB4MjJiMTU0N2UsCisJMHgwY2ZkN2EwYSwgMHgyMTg0MGQ0ZCwgMHg5MTdhNmFiZSwgMHg0YmFlNDNiNywgMHgzOTVlYjhjNywgMHgxZmExYjk2ZSwKKwkweGRmMDBjYTA2LCAweDcxMGU2ZGJkLCAweDgxZmZjYjJmLCAweDk2ZmFjMTIxLCAweGZhNDVlNzgxLCAweDFhNmVhZGJlLAorCTB4N2ViMDYwZjMsIDB4ZmUyNzY5NWQsIDB4NzJlNTE4MzMsIDB4NmE0NTU3M2YsIDB4ZDU3ZDA3YmYsIDB4YzFlMWJhZWUsCisJMHg1NGZiYmQ2MCwgMHhiYzc5NDNmOSwgMHhjZjcxZjRlZiwgMHgzYzFmNzlkNSwgMHg2ZjM5MDk5ZSwgMHhiOGM2YTcwMiwKKwkweGYwMTFmYTFkLCAweGQ1ZjZmZDQ5LCAweGVmZGE3M2NmLCAweGRhZjAwYjNlLCAweDkyZmE5NGU0LCAweDg1ZTNlZGI1LAorCTB4MzU5ZmFmOTQsIDB4MDlmN2NmODAsIDB4ZDg1ZTFkNTMsIDB4ODQ3N2RhZjUsIDB4YWRhZjYxZjksIDB4YzVlZTE1OWYsCisJMHg0NGY3ZWFiYSwgMHg5ODU3NjFmOSwgMHhkMjFiZWZhNywgMHg2ZmJiZjhiYiwgMHhhZGU5OGRiYiwgMHg2NjdmZWVjYSwKKwkweGRhYWJiNTBiLCAweDg5ZTk5ZmRiLCAweDk2ZWQ5NWU4LCAweDY0MjM1N2JlLCAweDZkMzdiNDc5LCAweGY3OTQ1MGU1LAorCTB4Y2Q3OWZhNjQsIDB4ZjJlMThlZTYsIDB4ZTVjMTU1MzcsIDB4NThhYzgxZTEsIDB4NTM5Yjc3ODIsIDB4MTM3NTg1M2IsCisJMHhiY2ZkYjJiZCwgMHgxZmJmMmVjYSwgMHhmYTEyZTlkMSwgMHg5NmZmZmIyNSwgMHg0MmJmNzE0NCwgMHg4ZjNmNmJjZiwKKwkweDU4NGY3ZDY3LCAweDkxZjNjOWJkLCAweGFmMjA3ZGJmLCAweDdkY2JiMzQ3LCAweDdlYTQ2YTIxLCAweGU3MjVjNDc4LAorCTB4OWUzOWE0NzUsIDB4OGY0MTg1ZjcsIDB4ZGNiNzhhNDcsIDB4ZWY4MDk1OTMsIDB4ZmNkMmFmMjQsIDB4MGQ0Y2IyZmUsCisJMHhkMDZlMWZjMCwgMHhmMmY1MzI5ZiwgMHhiYjUxNTdkYiwgMHhkOTU1NWY0ZiwgMHhkN2U3MzM2ZiwgMHhmYmUzMGY4YiwKKwkweDEzZDUxNTljLCAweDZiYmNhZDM5LCAweGY1Y2I5ZjMyLCAweGEyZWVhNzFmLCAweGE3YTk4NGYyLCAweGUwNmJiZmQ4LAorCTB4ZDk5NTRlN2YsIDB4ZTk5ODlhOWYsIDB4ZGY4MTMzNTUsIDB4ODNmNmZmNWMsIDB4ZDllMWZmNTQsIDB4YWYwMDE2MjcsCisJMHg0NzM1MzNjMywgMHhmNmRiZWMyNiwgMHg0Y2ZmOTdkNiwgMHhmZTVkNmRmMywgMHgzNmEzZDYyNywgMHhmODExNmI0NCwKKwkweGQzZjc3MTdlLCAweGM1NjZiZjVjLCAweDdlODAyY2ZmLCAweDc0OTU2MzUwLCAweGI1ZGI5YzYzLCAweDkxYmYzZDNhLAorCTB4ZmZhMmM1YTksIDB4NjNiZjE1YWEsIDB4YjcyMjIyM2QsIDB4YmJkN2YyNDUsIDB4M2EzZjFmYmUsIDB4NjVmOWJjZDMsCisJMHgwZTJkZGE4NSwgMHg1NGUxYWU2ZiwgMHhmY2UxZTdmNSwgMHhhMjA0YWIzYiwgMHgyYjg2MGM5NSwgMHg1Y2U3NzVlYiwKKwkweDQ3ZTA2ODgxLCAweDcyYjk0OGIzLCAweGJmMTBkNmYxLCAweGE4OTI1MDMxLCAweGRkYTg4YmRiLCAweDhmNTUyNmUyLAorCTB4NDFkYmY0NTcsIDB4MTdmNWExYTcsIDB4ZjdhZTc3ZDMsIDB4OGE1N2JmM2QsIDB4NzYzZGY5MjYsIDB4MzBkN2ZkZDcsCisJMHhmZTAwNDVmZSwgMHg2NGNmMzNhZSwgMHg5YzNkMDI2ZSwgMHg1Njc0ZjlkZiwgMHgzNDM2OWZiMCwgMHg3MmJlNzJiZCwKKwkweDdkZjRlN2ZkLCAweGQ4YmU4ZTczLCAweGMyZGI2ZjQwLCAweDBiODVmNjRjLCAweGY0ZWIyNGNmLCAweGMyZTllOTI2LAorCTB4ZTdlY2Q5MzMsIDB4ZDlmN2Q0NGUsIDB4MDk2N2M1MDUsIDB4MDg1ZmJiNDcsIDB4OWUxMDY3OGUsIDB4OTcxY2UxYTYsCisJMHgwZTFhNmRlMywgMHg5ZDYxZmJiOSwgMHg2ZjhlMmUyZiwgMHg2N2JlMGUxYSwgMHg2OGUxNDFmMCwgMHg0MWJiNjNjYSwKKwkweGY0MWU1MzRlLCAweDhhN2Y4MzY0LCAweGZlMmNhNmUyLCAweDQyY2E2ZmVlLCAweGQyMmQ5N2ZiLCAweGE3Y2M2MzBlLAorCTB4OGUxNGI5ZjIsIDB4ZjBiNWEyN2IsIDB4NmU3Y2FlZmUsIDB4OGRlNDI2ZTAsIDB4OTI5ZGVhNzEsIDB4MjUzYmQ0ZWYsCisJMHhiNzVkMDk3ZiwgMHhlOGVkMjk5NiwgMHgxZWU2NGZhNCwgMHgzZWE0YjNhNywgMHg1YzgyZjQ5NiwgMHhkZTY1OTNlNCwKKwkweDM3MGJmMzI5LCAweDZmZTFkODk0LCAweGJjYzliN2FmLCAweGZkODk3ZDZiLCAweDM1ZjdlNjE4LCAweDRmYzRiNTY5LAorCTB4YzViZjc0NzMsIDB4ZGRhOTdmMDIsIDB4ZmFmZWZiMGIsIDB4M2YxY2UxZTUsIDB4Y2YzZWRiMzEsIDB4N2FmNjY5NGIsCisJMHgwMzVjNjliYiwgMHhlNmZkZmQwZiwgMHhmOWY0OGJlZiwgMHgwYjg5MGRmNCwgMHhlZGI2YTVlYSwgMHhmNjM5YzMwYiwKKwkweDhlMzJlOGE0LCAweGI0YTY0OTYwLCAweDZjZmIzZWUzLCAweGFhOTE3YzQ3LCAweDZkYzJkYmViLCAweGVhNWJhMWQwLAorCTB4OGZkNzhjMWIsIDB4ZWY1ZTA2ZWQsIDB4MmZmOWExNDgsIDB4NWVhNWUzZDYsIDB4ZmFiODQ4YjYsIDB4ZTM3Yzk1OWUsCisJMHgwNTJkN2NlNSwgMHhjMDA1ZDVlNywgMHgyYzVjZTcxZCwgMHhlZjIxNzNlNSwgMHg3OTE5YmM0OSwgMHhmMGExNWYwMywKKwkweDgyZjFmMTVkLCAweDlmOTVkODE0LCAweGM3ZjY5NGM4LCAweDhmMmM3YzUwLCAweGU1MTNkZTFhLCAweGQ0Y2Y1YzA2LAorCTB4ZGMwMGNhMWQsIDB4YTg5ZDc1OGQsIDB4NjhlOTdhZjMsIDB4YWZiZmI0ZWIsIDB4OGM2ODc3Y2YsIDB4MzA0NzdjOGYsCisJMHgxZDZmZDc3ZCwgMHgyMDI0ODg3MiwgMHhkNWFiNmU3MSwgMHg1YmQ0MjU4MywgMHhiZjQzZjdmZCwgMHgzNmFhZGZhOCwKKwkweDNiOTcwNGY5LCAweDkxNzM5NzgwLCAweGJkNDFkZmZiLCAweDBiNjIxYjA1LCAweGVkMTgwZmEwLCAweGYyMmZhZTE3LAorCTB4N2JjZDA3OTYsIDB4NWUzMzU2ZTAsIDB4ZjM5OTM1MDYsIDB4ZjM5OTc3ODMsIDB4MGQwNjcxNWIsIDB4ZTVkYmU3ZmIsCisJMHgyMWY5Y2MwNywgMHg5M2Y5Y2M4NywgMHgzMzcxZGMxZiwgMHhlYTg1NGZiNiwgMHhiZTg1NWZiYiwgMHg4N2YxZTdmMywKKwkweDdhOWY0ZTcwLCAweGUwNjg5NWY5LCAweGNiNWZmMTZiLCAweDBiOGY0MjBmLCAweDNjMjE2NzhkLCAweDdjNzNkMDJhLAorCTB4OTdhNjE0NWIsIDB4YmE1YWUyMmIsIDB4ZGM0NjQzZTEsIDB4MzA2Mjc2MDYsIDB4ZGYwYTU0ZGQsIDB4OTVkYTZiNDEsCisJMHhhNjhhY2ZmNSwgMHg2NzQ0YmQ5YiwgMHhjZmRlY2I1NSwgMHhlY2IzN2E5MCwgMHg1YWQzNjQ3NywgMHhkMGNlZTQzYiwKKwkweDNiZTNiYjcxLCAweGM2ZWJkMjIyLCAweDIxMTkyYTNlLCAweDM2NWVhZWNiLCAweGZlOGE3YzRlLCAweDFlMzdiY2Q2LAorCTB4MmJmMjU4ZjQsIDB4OTI5YmU1ODUsIDB4MDc1ZmIyOTcsIDB4M2VkZDFjZGQsIDB4NmY0ZTQ2ZmIsIDB4MzBmMGMwOWUsCisJMHg5YjBiOTJlYywgMHhlNTE0NDA5NSwgMHg4NzQ0MjM1ZCwgMHg4YmYxMWY3ZiwgMHhmMTIxMGRhNSwgMHhlMjQyNmI5ZiwKKwkweGNiOTlkNjgyLCAweGY3ZGFlZTE3LCAweDUwNDcxMGZmLCAweGUzODI3OGUxLCAweDY3OGNhZTJlLCAweDVlODAxZmY0LAorCTB4YjA0YTc5NTksIDB4YTlmMmFhN2QsIDB4ZTVjY2MyNmYsIDB4ZjVmMzVkNzIsIDB4YWRlNzE4NzUsIDB4ZjFjYjVkZjAsCisJMHhhYWNiNTc3YiwgMHhhM2ZlMzhlMiwgMHg0YmE4ZTk3MywgMHhjYjczODUzYiwgMHg1ZWFmNzczOCwgMHhmMjk1NTFiNywKKwkweGZkODRiN2JjLCAweDhlNzY5MWM4LCAweDg4NzZhYzhiLCAweGViY2QwNDQwLCAweGViZGQ5NDUwLCAweGQ2OTdlZmEyLAorCTB4YjJiY2IxNDcsIDB4ZTg1Y2U0ODAsIDB4MjcwYTk0OGIsIDB4NjI3YTRkYzcsIDB4YmJjNGVlZDAsIDB4ZDU2NWNiMmEsCisJMHhkNTFlMTJmMSwgMHhiMGZjNTFiZiwgMHhhOGMzNTcxZCwgMHgzMjkzZmM4YiwgMHhkODA0NDhiZiwgMHhmMjNhMGJiZSwKKwkweGY4MDNhZDA2LCAweDQ2OGJjZTBiLCAweDU5NTY1ZmE5LCAweDlmMDBmYjAzLCAweGFiNjg3MzhlLCAweGFkMTU1ZWI5LAorCTB4YzgzOGEzZjMsIDB4MzVlZmU2N2IsIDB4ZDdlYjhkYTIsIDB4MmMyNmZhZWUsIDB4M2Q5MDdiZjgsIDB4NDM1ZWY1OWEsCisJMHhmOTc1NTZmZiwgMHgzODY1ZmQ0YSwgMHgyMDc0NGZjYiwgMHg2Y2JlODM4NCwgMHhlZWJlZGNiYSwgMHg2ODIzOTIxZSwKKwkweDdiMGQyYjdkLCAweGRmMjk1YWY4LCAweDllNTFiMmRkLCAweDY3OWYyNDYzLCAweGQ2ZWI0ZTAxLCAweGVmODY3YzkyLAorCTB4Y2UyMDZmYTQsIDB4ZjcwYTJjNDQsIDB4ZWE1ZWY5NGIsIDB4Njc2NmViMGIsIDB4ZjJmNDVjYjEsIDB4NDAwYTVlM2YsCisJMHg0ODdiNjkxZiwgMHhiYWQyYmI2MSwgMHhiYWVmZDk3YywgMHgzOTczZmFmYiwgMHhlM2MyYTdmOCwgMHhiNjFjYjE4NCwKKwkweGRlNTE4YTZlLCAweDRmOTFmNTg3LCAweGM4NjRjNTMwLCAweDFlZjdmYWY5LCAweDRiZGVmZTZlLCAweDNlYzE2NmY1LAorCTB4YjI3NDFlMjIsIDB4ZmI5MGM0N2QsIDB4MmViZWI5MGQsIDB4MWFjOWNiNTYsIDB4NzVmZWI5ZDYsIDB4ZjA1MTZkYjEsCisJMHhmODhhODliYiwgMHg2Y2I3MjVlZiwgMHgzNmUzY2ZkNiwgMHgyYWZjM2Y1YSwgMHg4M2UyOTVjNywgMHhmNTE5OGZmMCwKKwkweDczYzk2NjQ2LCAweGVmNThmODY1LCAweGZiMWViZDE2LCAweDUzMmRjYTVmLCAweGU2OGViZGVlLCAweGM1YjBmZTU1LAorCTB4ODFhMTdiMGQsIDB4NjZmNWUxMDcsIDB4ZDdjNzBlMDEsIDB4Nzc0MDBiM2EsIDB4N2I0YWM3YzMsIDB4Yzk3YzkxZDksCisJMHgwYTg2MjNlNywgMHhhYjFhMzc4ZSwgMHhjYjM2M2JmNywgMHhjMjkzNGE2MiwgMHg5ZmE5MWU4OSwgMHgxZWQyNDVlMywKKwkweDk4YjQzNTFmLCAweDEzMjQ5NmVkLCAweDZlMmFlYmNjLCAweDRmZGViMjY1LCAweGY3ZjhiZGI5LCAweDRmOThiYmEzLAorCTB4NGExNDVkMDcsIDB4NmRmOGZiZjksIDB4MmYzOTI2Y2EsIDB4MGUyN2M3MmYsIDB4ZjZjOWMwN2YsIDB4MzlmYWUzY2UsCisJMHhlODgxZTA2NCwgMHgwZmNiMTg2OCwgMHgwZDhiNWYzYSwgMHhhMGI1OWJhMSwgMHhhMDg3OWMwNywgMHg2ZTk4MjUwNywKKwkweDhiNzE3NGNjLCAweGVlMmJlMTIyLCAweGJhZjdmMjkzLCAweGU4Mzc5OTU4LCAweGYxM2ZmNDgyLCAweDIyOWJhMGJmLAorCTB4NGVlZmYwYzEsIDB4ZGJkNjM0MGYsIDB4NzQ0ODFlOWQsIDB4ZDA3NDA4YjAsIDB4MGU4NDJmNTEsIDB4ZWMzZmQ1ODQsCisJMHhhNTQyZmNkYiwgMHgyYjg3NjIyMywgMHhhYjE0ODI4NCwgMHgxN2NlMjFmMCwgMHhlYmMzMjQ2NywgMHhiMTFmYWIxZSwKKwkweDEyYWRiZDc4LCAweDkyYWM3ZDJmLCAweGYxYjRlOGVlLCAweDdkNzAxNzg1LCAweDRiN2RlMjJmLCAweGJjMjg1YzFlLAorCTB4NDUyNGJmNTQsIDB4MWZhZDdkYjAsIDB4NzEzMTU1YzksIDB4NDUyMDRlZGMsIDB4YmIwYThlNTgsIDB4NWY2OGE1MTMsCisJMHgyZmZiMjMxMiwgMHhmZTM4MjllOSwgMHg1YWYzZmE4ZSwgMHgzNmU2NzRlMiwgMHhjMTVlZmUxYywgMHg0N2RhMDU3MiwKKwkweDlmN2I3MDE3LCAweDVhZjdiNjQ1LCAweDIxOWJlZDI5LCAweDk1YjY5OGY1LCAweDVjYmYxYzYxLCAweDJjOWY3NzcyLAorCTB4YjFjNGM5ZDAsIDB4YTIzOTNhNjYsIDB4ZGU5MTk1ZDMsIDB4OGRkNmVkOTQsIDB4ZjAyNDllNzUsIDB4ZmU4NmQyODMsCisJMHgzYmQ0ZGU3YywgMHgwMjc3YWI4YiwgMHhiMDQ3Y2Y5ZiwgMHhlYWIyNTlmYywgMHg2MTg2OTNjNywgMHg3YmM0MmY3ZSwKKwkweDkzMzNjMjgwLCAweGE4M2ZiM2I3LCAweDRmZjY2MWI0LCAweGI0YmU4NDNlLCAweDJiZGZjOWQ1LCAweDU5ZjViNWIyLAorCTB4ZjcxNWZmOTAsIDB4YTFmNDlkZGMsIDB4N2IwMWM2NzQsIDB4OWFkN2I1MTIsIDB4OTU3ZjljYTYsIDB4ZWRiZWM5ZDIsCisJMHg5ODllNDBlZiwgMHhmYWU1NWQzYywgMHgzZmI0ODU5MywgMHhjZTM5MDY4YiwgMHhkNmU3ZGYyNCwgMHhkMjZmZWEyNCwKKwkweDY5YzM4NTI4LCAweGE5NWQzYThlLCAweGE0MGZjMWI3LCAweDJjYTlmN2UzLCAweGU0N2Y5NzQ1LCAweDU1OTI4MTNkLAorCTB4NzNkMmIyN2QsIDB4YzkyMTNmZTEsIDB4ZmQzOTBiYjgsIDB4MThmZWEzNTMsIDB4YTVlNDAzNjUsIDB4ZmVlNGUzYmUsCisJMHgxZmEzZWEzMywgMHg0YjNhN2JmNCwgMHhkNWJmNTVjYSwgMHgwOWU0NjJlMSwgMHg3Y2JmNWNhZSwgMHg4Y2QxZDg3NSwKKwkweDQwYjZhNDY4LCAweGZkZTlhNTM2LCAweDc1ODRiZWM3LCAweGUzMTc0YzRlLCAweDc3ZWUwM2Q3LCAweGNmMTM2MmFhLAorCTB4Zjk4NGFkYjcsIDB4MWI5NjU0NDIsIDB4NDI5MWFiZjQsIDB4ZDZlM2ZhY2QsIDB4OGYyN2NjZmUsIDB4N2EzYjY5OGUsCisJMHg2ZThmZTUzNywgMHg4Y2VkMjQxZSwgMHhiZTYxN2RiYSwgMHg3MDdjYjA0YiwgMHg3N2U0OGM3NCwgMHg5ODIzOWI2ZCwKKwkweDVhYjg4ZmZlLCAweDNkYTRlMmEzLCAweDY1MGRlZDhlLCAweGI2N2M0OTNhLCAweGY4N2VmZWFjLCAweGVkMjJjYmI5LAorCTB4Y2M3ZTcxNDcsIDB4YzcxYTY4N2YsIDB4NTNhZDk0MjcsIDB4MDdiODYxMDMsIDB4NmY2Y2M2YjAsIDB4ZGVkNDhhYTgsCisJMHhiNTA4N2VjNiwgMHgwN2RhODQxYiwgMHhhM2EwMzM0MCwgMHhkMzBhMzVmMiwgMHg4ZjdhZGY2MSwgMHg5Y2Y5OTkzZCwKKwkweGNhZmFjMmUyLCAweDcwZmQwMzIzLCAweDljN2I5NDBlLCAweDg1N2NjNzFjLCAweDgyNmJlMGZkLCAweGI5ZDg3MGZiLAorCTB4YjU4OTA3MDUsIDB4MDA5ZjZiNjcsIDB4MjU4ZDI1NGUsIDB4ZTQ0NmVmYWMsIDB4ZmFiZmNjNmEsIDB4ZWMxNzA0YWEsCisJMHgyNmZlOWQxNywgMHhiZTBiNWVjMiwgMHhjNjRkNmQ2NCwgMHg5NjU1ZmNiZSwgMHgzMTMwZjE5YiwgMHhjOTE1OTVjZSwKKwkweGZiZTRlZDc0LCAweGFlNmQ0NzExLCAweGU4ZWZjYzJjLCAweGU3MDVhNzRhLCAweDkyMTVjNGVkLCAweDM5ZGY2OWJlLAorCTB4MWVlMThmNzAsIDB4M2YwNzA4YWIsIDB4ZmIyNTlhZDgsIDB4NWFkY2IzOWQsIDB4YmRmMjkxYmMsIDB4MTUxYWMyMWQsCisJMHg2N2NhZmEwNywgMHg1ZmQ4NWVmYSwgMHg3NWU2MmRmYiwgMHgwNDYyMTdlYSwgMHgzNWIyODllNCwgMHg3NGJjZTU2YiwKKwkweDk2ZDYxMGZhLCAweGU3MWE3OGMyLCAweDAyYjRlNmQ0LCAweGU0M2EwMWQ4LCAweGRiNjNmZWRiLCAweGJhMGVjNzAxLAorCTB4M2QzMGFlOTgsIDB4YzEwZTdhZDAsIDB4YmZkZTljOGUsIDB4ZTljYTMyZjQsIDB4Y2JkMDNlZmIsIDB4N2U4MWIxYzQsCisJMHg1MjJmMWI4OCwgMHhiNmJlMzhhYiwgMHhlMDc4NDkzZCwgMHg2ZDE3NmM3NywgMHg5M2I0OGYyYywgMHg2N2JlMDIzYywKKwkweDlmODMxOWYwLCAweDFkNzg1ZDEwLCAweGRlZjg5ZDg5LCAweDIyNTM0NzUyLCAweGNlYjViZTFlLCAweDc1YjNlOWMxLAorCTB4NzgyNTYxMmUsIDB4ZTI0YmFiNmYsIDB4NmU3NTBiZmMsIDB4NzJlYTliNGUsIDB4NzU4YmZiZjgsIDB4YThlZmNlMWUsCisJMHg5N2Y5YzExYiwgMHhkZjljYmNlYiwgMHhkMzgxMzc1NSwgMHhmOThhZWI1NywgMHgwOGFmYzFiYiwgMHgwYzk3Y2MzZSwKKwkweDI3ZjA2M2JlLCAweDNlMGNiZTgzLCAweDczNTc0YTE1LCAweDE3YjhjYzA5LCAweDFmOTllZDQxLCAweGViMTA3YzFhLAorCTB4ZjI3NDE0YjAsIDB4ZTljZjAzMjcsIDB4MDkyZmIxNGEsIDB4Y2ViNDUwZmMsIDB4NTIyOGZmMDYsIDB4MGFmZjNkY2YsCisJMHgyMmJkYjljMSwgMHhlZDIyZWQ5MiwgMHhmNmMxZjI0MiwgMHgwNzlmMDc0OCwgMHgwYmIxNzZhOSwgMHhkYmZhODlmNiwKKwkweDBlZWY0N2JjLCAweGFkNmY4NzNhLCAweDg4MzU4NDUwLCAweGM0YmM3ZjhlLCAweDc0NDFhYzI5LCAweGFjNTk2ZjNjLAorCTB4ZDk2NzNmMjksIDB4YTRmNDZmZmIsIDB4ZDE4ZGRmZmUsIDB4MWU2OWIzNzIsIDB4ZTI3OTdlNDcsIDB4ZjdkMTNmZjEsCisJMHg0Y2YyZmNkZiwgMHhmMzRlZjAyNiwgMHhjNjA4ZmNkOCwgMHg5ZjVjMmJiZCwgMHhkNzljYWI0NywgMHg5Nzk2NzY1ZCwKKwkweDdkNGI4NmZhLCAweGQ0Yjg2ZmFiLCAweDA4ZTNmMGI3LCAweGEyM2RjZjhhLCAweDJkMjRhM2UzLCAweGIxYTc5ZGY2LAorCTB4OWJhZWVjNmYsIDB4YjQ0ZWMwNDcsIDB4ZmE0YmRlNTIsIDB4ZjJhM2Y4MDQsIDB4MmJmOGU4YmYsIDB4NzBjNjE2NWQsCisJMHhmN2QwNmQyZCwgMHgzNmRjNzA2YiwgMHhiMjU4ZjVjMSwgMHhmMTRlZjk2MCwgMHhkN2JmMDEwYSwgMHgwM2Q4NWZiMSwKKwkweDYzODgyYjI0LCAweDQwYWZjMzhhLCAweDZiZTUyMjc2LCAweGFiOThlYzBlLCAweGU0MTFmNzdmLCAweDIxZDk2NTc2LAorCTB4NDczNWIzOTYsIDB4MDg3ZmM3MjQsIDB4NzA1Y2VkOWYsIDB4ODNiMmNhN2YsIDB4ZjZiNDRmNWMsIDB4NDY2ZmM1MzYsCisJMHhjMWRhZjUwYywgMHhjMGUzNDAzNywgMHg3ZWNlNjk1ZiwgMHgxYTJlZmQ4MSwgMHg1NDdmYmUxNSwgMHg1ZjJmN2ZhZSwKKwkweGEyZTI5OGFkLCAweGYyYWI2NDY3LCAweDk1OTY0NWRlLCAweDQyNTlmM2QzLCAweGY5MWE0NzNmLCAweDk2ZTgzMmJjLAorCTB4NjFjNzA4ZjgsIDB4ZGJlNjM3OTYsIDB4ZTdmMTA0MTcsIDB4NTk3YmZkNTIsIDB4YTcxNGM1OGUsIDB4OWQ5NjdmNzksCisJMHhjZDhmMzlmYiwgMHg5YmRlZmQ0OSwgMHhjZjlmNmU5MywgMHhmN2NkY2ZmYywgMHhhNWZhOGMwNSwgMHg2MGFiMDUzOSwKKwkweDgzNWQyZTRmLCAweGY2Y2VhNmE4LCAweDdkNTZkOTI1LCAweDdmYTkyZTVlLCAweDhiNWNlODM5LCAweDJlYTJmOGUyLAorCTB4OWU0MzA3Y2YsIDB4NDc1Zjg1MzksIDB4ZWY1OWZjZjIsIDB4YjllMTdjYWEsIDB4YWM4ZmUwMTcsIDB4OWYxODczZmMsCisJMHg3NTgzOTU1MywgMHg3ZmFlNGFmYiwgMHg4Mzk2MzRmOCwgMHg3MGNhOTFiYywgMHhmZjEyZTFjOCwgMHgzNWZkY2Y4NSwKKwkweGI1NWQ3MTFhLCAweDk3YmRhNDNiLCAweDZiNDhhM2QyLCAweGZiNjBhYWVlLCAweGY2ODc4ZDVlLCAweGFkZjgxYzQ5LAorCTB4ZmFmZmVmZDksIDB4ZmJlNjdmMGIsIDB4MTRiMDg0OWQsIDB4ZTM5ODZlM2QsIDB4N2M3NjZhZDQsIDB4YjA2YmYxY2EsCisJMHg3Mjg2ZjljNywgMHgxZDVmMWM3ZiwgMHhmOTU2YmVkYSwgMHg0MjU3ZjU5YSwgMHg2OGE3YzMyYywgMHgzYzg5OTdjZiwKKwkweDEyOTc5ZDhmLCAweGY3NmFlN2MxLCAweDJhZWM0Y2FjLCAweDFmYjQyODhlLCAweGIwYzFjZTIzLCAweDM1OGFkNWZmLAorCTB4NTljZmMzOWYsIDB4OTM4NGQ3N2IsIDB4ZmY2NWRlOTIsIDB4Y2ExZWVkYTEsIDB4MzEzODRhOGUsIDB4ZWVjNjIwNTAsCisJMHg1ODkzYjYyYSwgMHgyYzlmYzcwNSwgMHhlZDM4ZWRkNSwgMHg2M2Y2NGNmZSwgMHhkNzc3Mjc3NywgMHgyNDQ2YTdhZSwKKwkweGRkNWJiNTkyLCAweGJlYjM4ODMxLCAweGFlODRjNDI4LCAweGI2NDlmNGYwLCAweGQzY2Y2Yjk0LCAweGZiM2Y4MjNlLAorCTB4ZTU5NTM2ZTIsIDB4YTJkYjhiY2EsIDB4NmNkNDNmNzgsIDB4ZTIyMGYwN2IsIDB4NTI5ZTZiMDQsIDB4MmQ1OGVkZDgsCisJMHhhZmNlMzg1YSwgMHgxYzJhODc2NiwgMHhlYzFkZTdjMSwgMHhjZmRkZjE0NywgMHg1MTczZjE3MywgMHg4YjVmNDA0YiwKKwkweDY2ZWYxNDlhLCAweGMzYmI0ZjlhLCAweDY4MjNkMzFkLCAweGJlODBhZjNlLCAweDg3MTczNDg4LCAweGZmNDcwZDM1LAorCTB4MDc5ZmZjYzYsIDB4Mzc5MjBiN2YsIDB4YzgzZjM1MTcsIDB4ZWY1NDhkZjEsIDB4YmYzN2NiMDIsIDB4M2MzOGUwOGQsCisJMHhjMWRlYzkzYSwgMHgxODZlY2YzYywgMHg0NWY1ZmVjMiwgMHg1ODZiZGI0ZCwgMHhlMTE2ZDgzZSwgMHg4Y2U5ZTk4MiwKKwkweGU0MGY3Y2NkLCAweDgxZGUzZTgwLCAweDljOGYyOTZjLCAweDY3ZDFlZGQ1LCAweDFmNTk1MDVmLCAweDJmYjEzY2MyLAorCTB4Yjg3MWU4Y2YsIDB4ZjUzN2JiNDYsIDB4NGI2NjZmNzYsIDB4NWIyNmE3ZjksIDB4ZmVhMzRmZWUsIDB4ZDFhM2E2YTIsCisJMHhjOWZlYThmZCwgMHhmYTczZWY1ZCwgMHgxNjZmYmViZSwgMHgzZGYwYjY0NSwgMHgyMjNiOTNjZiwgMHhjOWUwOWVmOCwKKwkweGZlMzlmZjFkLCAweDdjZWYxYTM1LCAweDI1MDQ5OGQzLCAweGM4OWQ5ZjY4LCAweGJhN2RjOWI2LCAweGYzMmZjNjQxLAorCTB4MTNkNjE3MjUsIDB4NjczZDc4OWEsIDB4YWMyOGE1YjcsIDB4YTRkZTAzMmYsIDB4ZjFkZDlmYjcsIDB4MzY0M2RmMTIsCisJMHgxYzFmZWJlNCwgMHhiMTRiMzgyZiwgMHgxOGEzZGM4NiwgMHg4ZDcyMDgzZCwgMHhkN2JmNTVhMywgMHg2M2RiYTZkMSwKKwkweGFmZmE2ZmZlLCAweDU5MjdiZmQxLCAweGU0NzFmNThhLCAweGM0NjEwZDNkLCAweGJkNjRiODZmLCAweDI3YjczNTIyLAorCTB4YzFkY2RkZjYsIDB4OTdiODk5ZWUsIDB4NzE5MmRlMmQsIDB4ZmJiN2EyOTcsIDB4NzM3ZmU4MTEsIDB4YmI2NzhkZGYsCisJMHhiYjliNTJjYiwgMHgxYzVmZjIyNywgMHhlMDk1ODUyNiwgMHhjZTg4NzczMywgMHg4NzVhOTI1NywgMHgzNDdiYmVjMSwKKwkweDg2MTVjYTRkLCAweGI1NmFhZDNmLCAweGJmMDRiYzIyLCAweDNlNjc0NDVlLCAweGQwYWFmZGU0LCAweDQ5YzkwNzYwLAorCTB4NTYzZDdjNjcsIDB4NzFkYWYxNjEsIDB4OTlkOTQ2M2UsIDB4M2JiN2VhMmUsIDB4NzViZWMxMzcsIDB4ZWM3YzJlYzQsCisJMHgyOWQxN2I3ZiwgMHhkMmU5MjdmZCwgMHhmNjE4ZjIwZiwgMHg3MTU1YTUxNywgMHhkODc4YWM4MSwgMHhhOWJhNzRmMSwKKwkweDQxZTU0YTlhLCAweDI5YjU1M2Y0LCAweGVhMzkwNTkwLCAweDJiZGE1ZDljLCAweGE5ZmQwZTUxLCAweGFiZDY0MGFhLAorCTB4ZmQxNGU5ZDcsIDB4NjlhM2RmYTAsIDB4ZjcyYzBiYWUsIDB4ZDAxMjhjZWUsIDB4NDRhZjJjM2YsIDB4ZDNjOGJiNDksCisJMHg0MTYxNGRjZSwgMHgxY2JmNzZlNywgMHhjNzc3MTE4YiwgMHg2NmRmNGFmZSwgMHgwYmNjM2YzOSwgMHg3YjIyZmNmMiwKKwkweDVkZTQxNjYzLCAweGQxNDVkYzYzLCAweDM5ZGUzYzhkLCAweGUxNDViYzdkLCAweGEzOWZkMjhkLCAweDNlYTIxMWM3LAorCTB4ZWMxMzZmOGYsIDB4MjY3YjZhNzcsIDB4MzNlNmU1OGMsIDB4NjMyZjJkYzksIDB4ZjRjZjMzZmMsIDB4YTM4N2I4ZTcsCisJMHhiYjA1ZmU2OSwgMHhmMWM5ZGNiOCwgMHg4NmNmOTVlNywgMHhkM2RmMzAwNSwgMHg1ZGIxNDRjZiwgMHhjYTRkYjRlYiwKKwkweDEyYTNhNzYzLCAweDE0M2IxZTU5LCAweGY2NWNmMGY1LCAweGE2MTUzZDYzLCAweDVhNzQyZWMwLCAweDk0MjRmNjExLAorCTB4ZjJjMWVlNmYsIDB4MzJkZDY1NDAsIDB4MTI1NGQ3ZjYsIDB4NGIxYzgxN2IsIDB4N2ZjODA0ZTksIDB4NjdmNzM3YTcsCisJMHgzN2U5ZDE3YiwgMHg0MTVjYmU1NSwgMHhiYmUzNTdkZiwgMHhmZWU3MWEyNiwgMHgwODgwZjU4YywgMHg3OTllMjNiNiwKKwkweDgzZmQ2ZmY2LCAweDVhNDYzYmZkLCAweDNlZDk5NGY5LCAweDUxODNkMDY2LCAweGY5MjM5NDVlLCAweGQ0OGU1MTYwLAorCTB4NzFjODZlNTMsIDB4ZDExZDVhNzEsIDB4YWYzYTcwZjQsIDB4YzIwN2YyNTMsIDB4YjQ4MWViMDMsIDB4ZWY2MTEzMWYsCisJMHgzYmI0ZDIzZiwgMHg5YzA0ODk1MSwgMHgwOWZmNTkwMywgMHhmYTk1NmZiOCwgMHgzNjZkOTlkNiwgMHhiZTU1NTNmNiwKKwkweDNiNjVlNTEyLCAweGYxNTdkZGQ0LCAweDU1NGFjOTdkLCAweDE2OTVlM2NhLCAweGY5NTBkZjc5LCAweGZmYjY1NmU1LAorCTB4MmNlMzNmZDQsIDB4ZGUwODNjMDAsIDB4NmRiNmRmYWMsIDB4ZTQ3MWY1NTYsIDB4ZjRiN2E3YjgsIDB4ODA4ZDdlOTEsCisJMHgxMDc5N2Y5ZSwgMHhjNjI2MzVmYiwgMHg1OTUzNzk4OSwgMHgwNzkwZGFjZSwgMHgyYTdhNWViOCwgMHg2OWZlZTM4MiwKKwkweDM0ZTIyZjFjLCAweDczZjY3ZjJhLCAweDA1OThjZjA5LCAweGMxZDAyN2FjLCAweDRhYjlmY2NkLCAweDc3ZDVjZmU3LAorCTB4ZmI4MzEzNWYsIDB4OTU1ZGUyMTAsIDB4YjI1Yzc5ZWYsIDB4ZmY4MjdhN2EsIDB4ZDFlYmMyODYsIDB4YmYzZjlkMWMsCisJMHg4M2YzMzhmYywgMHg4ODM3ZGEyYSwgMHhmYmFjNWIwZiwgMHhhYjNmMTcxMywgMHg3OGI5NWNiMCwgMHgzMDhmMzVkNSwKKwkweDI2Yzc3ZGRmLCAweDVjZTIyZjcwLCAweGMxZDE4M2QzLCAweDkxY2ZhOGY4LCAweGJkYjNiMGZjLCAweGE2MmZlYjg3LAorCTB4NWJmZGIyZmEsIDB4MmQ5ZjNjZDEsIDB4MTNlNjBmMzYsIDB4ZGRlZmM3OGEsIDB4MDdmNTU5ZmUsIDB4MjI2Y2FmYjUsCisJMHhjYWVmMjJmOSwgMHgyZDEyNWZmNSwgMHhmODMzZmQzZiwgMHhmYjI3MzZjYiwgMHg3Y2ZmMDk1MSwgMHhhZGFjZWEzZiwKKwkweDdmZDYwMTY5LCAweGYzMjc3OWY2LCAweDcyYjFiMzlkLCAweGYzYTQ5ZmRmLCAweGY5OGQ5N2Q0LCAweGI2NmJmNGRjLAorCTB4OWE2MWZjY2IsIDB4ZDBiNDM5YzAsIDB4OThkN2VlNmYsIDB4OWIxY2VhZDcsIDB4NGY3OGI3YTQsIDB4ZDU0NGZjMGMsCisJMHg0N2Y0MGY4NCwgMHhiNzExZjlmOCwgMHhlZGM2ZDc3ZiwgMHg0MGIzZDc0MywgMHg0ZmIxZDc2ZiwgMHhiYTYwOGY5ZiwKKwkweGUyNGJkYjM5LCAweGQ5MGJlY2U1LCAweDhkMWQ5ZTdjLCAweGYzNGVmNDk1LCAweDc0ZGU4NTRkLCAweGI4YTY1NjM2LAorCTB4YTg3YTA0OTksIDB4Mzg3YTQ5NzQsIDB4ZWQ4OWE2M2IsIDB4ZWQ5NTY3MDIsIDB4YzliNTFlOWMsIDB4NzRjYjk1NzYsCisJMHg1ZmQxM2I3ZiwgMHhiNDA3ZTgxMiwgMHg2M2FhYmIwOSwgMHgxOWU0MGI0ZCwgMHgwNWUxZjlmMCwgMHg0ZjcwMDY5YywKKwkweDBlOGVkNDNiLCAweGQ3ZjljNTNhLCAweGUzMzNlZmFhLCAweGViZjYwNTFkLCAweDg5YTc5ZmIwLCAweGJhNmJjN2VmLAorCTB4ZWRiNTU5M2MsIDB4ZjAyNTdmNGEsIDB4NjE0ZGI1NTQsIDB4MTk3ZmRhN2YsIDB4MTNhY2QwZmQsIDB4ZDEwMDNmMGMsCisJMHhjMjlmNjJlNSwgMHg2ZTJjMjJlZiwgMHhmYjExNmRiOCwgMHhiZGFjOTZkMywgMHhhYzZmNzQxNSwgMHg2ZjdlYjE2MywKKwkweGYyYTJhOGZjLCAweDY5M2E4ZTdjLCAweDM5NWVlNGZmLCAweGRmZGYwMTllLCAweGVmMWQyOGU3LCAweGYzOGNiODc1LAorCTB4M2JmMGY2OGIsIDB4NDc0OTZlMzksIDB4ZmVhNDZkOTQsIDB4MzU5NDFhYWEsIDB4YTE5YTRlM2MsIDB4MTlmNWNhZTcsCisJMHhkOGIwMjI3MCwgMHhhYTNiZTc2MSwgMHg2ZWVlZDNkZiwgMHhiYjNjYzZmZCwgMHg5ZDMxY2Y5YiwgMHg5MzRkMWZjZiwKKwkweGRlZGI5M2Y3LCAweDJmY2NmNzk2LCAweDI2MjQzZDdkLCAweDQxZTQ1YmVlLCAweGY0NjA2MWJlLCAweGQwNjNiODg3LAorCTB4MjJmM2Y1MjAsIDB4MzVmNjFjZjgsIDB4Y2YzNGViZWMsIDB4ZmY2NjBkYWMsIDB4ZTY1M2NlNGUsIDB4ZTY2ZDgwZmMsCisJMHg3MzBlZWU3YywgMHg5Y2Q5YWYzZSwgMHhjZTZlYmNmNywgMHgwZWUzMDlmZiwgMHhmNDEzODRlYiwgMHg0MjM1YzQ2ZiwKKwkweGZkMGE0NmZmLCAweGY1MjYxZGRiLCAweDdmYTFlNDZmLCAweDhkZmU4NTIzLCAweDkxYmZkMGVmLCAweDNjOGRmZTg3LAorCTB4YTFlNDZmZjQsIDB4ZmU4NTIzN2YsIDB4ZmVlZWVmOGQsIDB4YmE1NTRlMTIsIDB4ZTA3ODE0YmQsIDB4NGVkZGJhYjgsCisJMHhmNzgxM2UyMywgMHg4OWQ5YzVjYiwgMHg1NTg1NDdjYywgMHgxNzE3YTVlYSwgMHhkOGZjYjJlNSwgMHhlMjlhNmY2MSwKKwkweDExOTM3YjYwLCAweGFkMTg5NThmLCAweDFjNDdmNzg1LCAweDJhYjJkMjgwLCAweGIxZGI4ZDM5LCAweDU1ZjZiYTFkLAorCTB4MmFhZTg3NjksIDB4ZWVjMjQ2NzAsIDB4ZTRmMmJhZDEsIDB4YTczZDg4MmEsIDB4ZDQxOGI0YTMsIDB4ZGI2YjY4YmYsCisJMHgyZjU2ZjgwMiwgMHhmZjdlYzAzYiwgMHg3N2VlZTVkNiwgMHg2M2Y4OTNhZiwgMHg1ZjExOGJmYiwgMHgwZjczODI1NSwKKwkweDI1ZjQ5YjdjLCAweDcxZWU3NzE5LCAweDQzNTNkYjA0LCAweDRkNjI0NGZkLCAweGQzZjIxZTUwLCAweGQ0M2U3MzNhLAorCTB4ZTZiZTA0MmYsIDB4NDZhYmVkMzUsIDB4NmM2ZmM3YzYsIDB4ZmJlMGM5NmQsIDB4ZTBlMzNlOWYsIDB4ZWE5ZjY5ZmIsCisJMHhjYjMxM2JmNiwgMHgyMTk4ZjJjMSwgMHgxYmNlMjNjZiwgMHg5ZjdhNTk3MCwgMHg5NWU3MDliMiwgMHhjMzFjN2ZhNywKKwkweGE2NTBmZGI5LCAweDY4NjE3ZWU5LCAweDA4Nzk3NjVhLCAweGY5MWRmM2NiLCAweGUzMDU4YTM1LCAweGJlNWY0Zjk0LAorCTB4Y2Q2YWY1OGYsIDB4ZWRkMmU3Y2IsIDB4ZDdiMmRjZmEsIDB4ZWVmMzRjNWIsIDB4ZDEzNzBmZWYsIDB4NzFhZGMwZDEsCisJMHg1ZWNjN2UyMSwgMHg3NzgzZmFhNiwgMHgzMWY4ODdhNSwgMHhhN2NhOTgwNywgMHhiZTYyMTlhZCwgMHg4ZDdjNWY4ZiwKKwkweGJkYWZiY2E5LCAweGExY2Y2ZTIzLCAweGZjZTRiOWZiLCAweGE1Y2ViMjVjLCAweDZmNWUwMmM4LCAweGM1NTRiZDY4LAorCTB4NmZmODI3ZjMsIDB4NGU1MmRiYzUsIDB4YzY3M2E3MmQsIDB4MmJiZmFmMWIsIDB4OWQ3ZjAwNTIsIDB4NTdlMDMyNzcsCisJMHg4NThiNjRkMSwgMHgzZjRjYWQ5ZCwgMHhmMzMyYzQ4NywgMHgxNTYxNWNiOSwgMHgyNzVjNTczZSwgMHg4NGI4NTVkZCwKKwkweDdmZGE5NjM3LCAweDY1NGM2ZDY5LCAweDQ3ZTVmYTNhLCAweDY4ODEyYWE5LCAweDNjOTY4MGQxLCAweGRlOGJhZmU4LAorCTB4ZTgzODcyN2MsIDB4OThkZDVhYWEsIDB4M2JmMmEyZWEsIDB4NWMxNmZmMTQsIDB4YjcxMzNmMjAsIDB4OTUyNDcxM2QsCisJMHg0OTVhYTkyNywgMHhhYTczYzI3ZiwgMHgxY2ZmNzAyZCwgMHgxOWVkZDFmMCwgMHg3Y2E0ZWYwMiwgMHg2OGE1ZTZiYSwKKwkweGU5ZDQxZjhlLCAweDBhZTZkNTJmLCAweDZjNmMxZDA3LCAweDgxNGY1OTU0LCAweGViOGQ0Y2ZkLCAweDhkOGQ5M2E0LAorCTB4NmJkMGUxZjEsIDB4M2UyOGM2MmEsIDB4NWMwNmM3YzgsIDB4ODUwOGZhMGMsIDB4ZWZlZmM5MDcsIDB4OTdiZDY5YmEsCisJMHg5NGY3YzkwZSwgMHg3NTJlNzU4YywgMHg0MWEyZmFjOSwgMHgwN2RlMzdiNiwgMHg1YzdiZDYzMCwgMHgzNzJiNDdkNywKKwkweDNiNzU5MWJlLCAweDdmZDczZjdkLCAweDdlMWI5ZTVmLCAweGJjNWRiYWRjLCAweDZkOTZjNWVlLCAweDdkMjk5MjViLAorCTB4ODVkZGExYzcsIDB4N2I3ZDJkNzUsIDB4MWE0OGY0NWMsIDB4MzI2ZGNiZTcsIDB4NzViM2ZkYWUsIDB4MjNlMTNlNGYsCisJMHhlMzc3N2E3ZSwgMHgwZmU4NzY5MywgMHg5ZGJmNTY5NSwgMHg2Njc5Y2RkZiwgMHgwZWYxMWRhMywgMHhjOGRkNmZkNywKKwkweDJkNmMxN2RmLCAweDcxODA3YjYxLCAweDExOTRlZWNmLCAweGEzYzNhZDk3LCAweGMxYjJhYzYyLCAweGRlM2NlYjQ1LAorCTB4MTU4NWNhNWYsIDB4YTY5ZTMyZTEsIDB4NDZmNTFkNDgsIDB4NTViNWQ2MDIsIDB4YTZiYWM3YzksIDB4ZTNiNzZmMTcsCisJMHhmNTg3ODFmZCwgMHhhNmZiYTE3YSwgMHhhMmI0ZjBmZCwgMHgzNTdiYjAxZSwgMHhkNGM3MWMyOSwgMHgxMTk5M2VkZCwKKwkweDY0ZmJjZmU4LCAweDRlMzRlNWRhLCAweGM4MWU1ZmE3LCAweDgyODdkZTdhLCAweDIzOWMyZmI0LCAweGY1ZmEyMWI5LAorCTB4ZjVkYTU1NjEsIDB4NGVmOTU1OWEsIDB4MzA5MDNkOTgsIDB4NWVjMmYyMGQsIDB4MzU0NTZlZjksIDB4MGEyMzQzOWQsCisJMHg3MTBiYjdhMCwgMHhhM2M1YTUzNSwgMHhkNzlkMTM1NCwgMHhmNjk4NDYxNiwgMHhiNDExMmNjMSwgMHg5YmJmYThhZiwKKwkweDdlNTMyZjQ1LCAweDUzMGNjNGZhLCAweDA3ZDM5OWZkLCAweDBiOWRmODg2LCAweDdmOTljYjNhLCAweDhmN2E2ZDVkLAorCTB4OWYyZWZhYTYsIDB4YzdiYjYxNWIsIDB4NGE3N2YzNTgsIDB4YmIzYTYyZWYsIDB4NWFiZWQ0ZDEsIDB4NDdiZDM1NGMsCisJMHhmN2E5ZThiMywgMHg2NTQ0Y2UxOCwgMHg1NGUxYzQ3NiwgMHg2NjU4ZjdlOCwgMHhlZmY1NDc2OSwgMHgxNjlkZmNhZCwKKwkweDdkYWZkYTYyLCAweDkyN2YzYzMzLCAweGZkOGRhNWU3LCAweDdkM2Q4NjA5LCAweGU4Y2Y3ZTE2LCAweGVmMGNiY2VhLAorCTB4YmM0NTE3ODgsIDB4OWExZGVjMzAsIDB4NjE2OTFlNTksIDB4M2M0ODU1M2QsIDB4YThmNmViNTQsIDB4OGY2OTFjZWEsCisJMHhkOGI1ZjZhYSwgMHhmMDRkOGYxMSwgMHg0ODEwYTZiNywgMHhiNjE1MWE2YSwgMHg0NzdkNTIzNywgMHhkZmNjOWM0YSwKKwkweGNjM2JlZjg1LCAweGRmZDA1MmY3LCAweDUyMWY5NDY1LCAweDQyYmZiMDRiLCAweGRkNjg2YmNiLCAweDYwNmExNzM4LAorCTB4ZDgzYjYyNDcsIDB4MDc2YzkzODQsIDB4ZmJkMWM2MzMsIDB4ZjQzNGU4MzcsIDB4ZmVkMDgwN2QsIDB4MzM3MDBjMDYsCisJMHhiYWRjYWVmZiwgMHg4MjJmNjBmZCwgMHhkOGUyYjRjZiwgMHg1NDlkYzQ3YywgMHg5NWIxNGQzNSwgMHg2ZjQ5NWVlNCwKKwkweDU0YmZmZjA2LCAweDdlYmY2MTYxLCAweDRjMDNlMWZiLCAweDU2MTVlZDZmLCAweGZmNGI4YzhmLCAweDc4ZDRiODc2LAorCTB4OTQzNWRkYTUsIDB4YmFkMDE3MGUsIDB4YjA1ZTdmZTAsIDB4MTVmOGYxNDMsIDB4ZTlmMDBmNTksIDB4ODEwY2ZhMDUsCisJMHg3MDE3NGE0ZiwgMHgwMWQ1ZTAzMywgMHg3ZTcyOTBiZiwgMHhlMjI4NmUzZiwgMHgwYTdiZTQyNiwgMHgxNDI1YzA1NywKKwkweDBiMzhmYTllLCAweDI3NzJjMTM0LCAweGYzY2ZjYmNkLCAweDhjNTdlOTBhLCAweGI3OGZkZDA4LCAweGIwZmZkOWRiLAorCTB4ZTUyZTExNDEsIDB4ZjUzMWUxYmIsIDB4ZjRlM2I0YjIsIDB4NmZlYjkwY2QsIDB4MjA3OGE5ZGIsIDB4ZDk3Y2RmYmYsCisJMHhlODNiZGZjYSwgMHhkOWM2NThhNywgMHhkZTY4OWY0ZiwgMHg1NGY0MWRhZiwgMHg4Y2NmZjcyYywgMHhlZWRjODljYiwKKwkweGRmNTc0NWRmLCAweGZmODY0ZjQ1LCAweGRkN2UzNDI2LCAweDE5ZTY0N2I4LCAweDFhYjdkZmEwLCAweGYzN2Q4NjI2LAorCTB4MWJlMWM0NGYsIDB4ZTc3NzQxZjIsIDB4ZTQzOWM3NGMsIDB4OTkxMGYxZDIsIDB4YmNmOWU1ZGUsIDB4ZTM5ZDJhMzQsCisJMHhiZWRkMzVjYywgMHg0ZDY5ZjA2OCwgMHg1YjhjNjc2ZiwgMHg3OGVlZTU0MiwgMHg3ZTZmN2JkMCwgMHg0MzU1NzE2NywKKwkweGZiZjA2YTQ2LCAweDFiNGFkYTM3LCAweDk3NTM4MWRiLCAweGUyNWE3M2M3LCAweDdjZTIyNTc0LCAweGRmMmU1OTI5LAorCTB4NGY3NjM5NjksIDB4MjlmODQ0Y2YsIDB4MjViNGFkOGUsIDB4OGZhZWE0NGMsIDB4NTUzNDM5ZGQsIDB4ODhiZTQyMGMsCisJMHg4NmQ3NGZkMywgMHhjZmI2MGFjZCwgMHgwMzJkZTkxYiwgMHg5YzYxZjllNCwgMHg4NzJkZTdlZiwgMHgzZjYxNjdhMywKKwkweDhkMTlkY2FlLCAweDJiYzVhMTkwLCAweGEyZWUxZmRmLCAweGEyZDliZTczLCAweGZlYzAxYTJkLCAweGNlN2M4ZGUwLAorCTB4M2NjNmQ3MGIsIDB4MzkwY2U3ZDgsIDB4NTE2NTcyYTMsIDB4NTUwM2M4NGYsIDB4MDRmMDM4ZmYsIDB4Yjk2ZDAxZTQsCisJMHhlYTcyMTEyZCwgMHg4MTU0MGZlOSwgMHhlNzNhMWFkMCwgMHhlNTM4YmU1OCwgMHg2YTdkZjQ5NCwgMHhhYmRmMDQ3MywKKwkweDJmMDhhNTNjLCAweGQ0OGI1MWZjLCAweGQzMmU3OTdkLCAweDMzN2NkYjc5LCAweGQyNzA4ZmM2LCAweGFlMzBjM2I4LAorCTB4YzYxMjRiN2YsIDB4MzBiMmY4ZjUsIDB4MzMzY2I2YWUsIDB4OGJiYjJiYTYsIDB4OTdhZWQ2OTEsIDB4YzMxNmRmZjIsCisJMHhhM2RiYWNjZSwgMHgwZjIzZjcyMSwgMHg0YjY0NWZiOSwgMHhjODc5MWZiOSwgMHhmNzIxNDhmZCwgMHhmYzBkN2JlMywKKwkweGQ3MWJmMDBlLCAweDZmNDNlNWI3LCAweDM5MTU4ZGY1LCAweDhlMWNmODRiLCAweDdmNWM4MWNjLCAweDAxZWUxMmJiLAorCTB4ZjE1ZGJhM2YsIDB4ODQ3OGU0ZjQsIDB4ZjllNTYyMGYsIDB4MjM1NzgyMWIsIDB4YjI0NmRkMWQsIDB4NWVkZDEwNTksCisJMHg4MjIxZDk3NywgMHg4OGM2ZWJlMywgMHg5YzdlNTM1OCwgMHhiZjU0ZDkyMywgMHgyYTY2OTVjOCwgMHhiZmE5M2ViZiwKKwkweDc3MDZmY2E5LCAweDUzN2YyOWJlLCAweGZkNTM0OGNlLCAweGE2MzE5ZTQ5LCAweGRjNDY4ZmZjLCAweGM1M2ZhYTYwLAorCTB4OWY5NGM1M2IsIDB4YTliNjYxMzYsIDB4MTJlMjhjZmUsIDB4NTljY2Y5NTMsIDB4YjNlNTRjOGIsIDB4Zjk0Y2RiYjUsCisJMHgzNGVlMmI1YiwgMHg5MmYxZmZkNSwgMHhhZjcyYTZlNSwgMHgwZTcxNTk3MCwgMHgyMzFmNDMzNiwgMHgzZTg1ZWZiOCwKKwkweDZmZWRlOTQ2LCAweGUzMDY0NjY3LCAweDRiMzhkNDc1LCAweDM1MGNlZjk3LCAweDU2ZmE5MDBkLCAweDM5ZjdhZTc0LAorCTB4MDllZTI1ZDAsIDB4ZThmYjBlODEsIDB4ZTJmNjgwZjcsIDB4YmYwNjE5OWMsIDB4ZmE5MTQwNjUsIDB4ZTgzMjRiNzAsCisJMHg2ODVlYjQyNiwgMHhmZDg4YThmOSwgMHg2NTk0ZjA5NywgMHg5ZjZlZTdmZiwgMHgzMTNlMjU2MSwgMHg0M2ZkYWFlYSwKKwkweGZiN2YyODMyLCAweDU2MTllNmMwLCAweGFlYTMyZmUyLCAweDNhNTJmZmQ5LCAweGRjZjE3ZmU1LCAweGYwN2NiMjM3LAorCTB4NTcyODRiZmUsIDB4ZmNjYmY3NzIsIDB4YzgyMmMxMzQsIDB4OWJjZTA2YWYsIDB4OGM3NWEzZTEsIDB4OGQ3ZDJlYmEsCisJMHhiYTUzZGE0NywgMHg1MjM1NTM4YywgMHg5ZDcxMDFjMCwgMHgwMGQyMDM4MCwgMHhmZGQyMjdkMSwgMHg1ZjQ4OWY0NCwKKwkweGI3MmNmYTI3LCAweGU4OTA3MTA5LCAweGQyMjFlOTEzLCAweGY3ZmRmMTRiLCAweDNkMjI5N2E0LCAweGQyMjk3YTRjLAorCTB4NDUyZjQ4NzcsIDB4Mjk3YTQyZGEsIDB4Y2RkNDNmZDIsIDB4M2E4M2Y0ZTIsIDB4YjFmZGRiOGQsIDB4OGZkMzgyYWUsCisJMHhmN2YwOTZlYSwgMHg3MTk2ZWE0ZiwgMHgxZjNhOTdmYSwgMHg4MDY0ZmY3ZiwgMHhiMDA4N2Y2MSwgMHg4YmYwYzY5ZCwKKwkweDA5MWZjMGQ1LCAweGRiMmVkZTdiLCAweGIxYmY2MGI5LCAweGFiZTc5NWUyLCAweDVmYWNjN2UxLCAweGIwMjM1YTIyLAorCTB4YjFhZDViNGYsIDB4ZmU5ZDFjMjcsIDB4YWRmOWVlYzksIDB4OTIwODljNTUsIDB4ZGVlMTljY2IsIDB4ZjhmMDA2Y2YsCisJMHhiN2NjNWRiZCwgMHhjNDQ3ZWZmNSwgMHg4NDA1M2ViNCwgMHhiNWQzNGZhNywgMHgzMzA3ZTBiMywgMHhjNjU2Y2EwYSwKKwkweGVlYjhmZjEwLCAweGQwMzYyNWViLCAweGFlOTY4N2NiLCAweGQ1ZWZhM2VmLCAweDAzYTdkYmY5LCAweGY3ZTg2ZGJkLAorCTB4YTY1ZGZkNWEsIDB4YWUzMjFkNmIsIDB4NmI2YjVhZjAsIDB4YmZkYmRiM2QsIDB4MDNjNDZlMTQsIDB4ZWZlYzMzZWQsCisJMHg1ZWY5NThmNywgMHhlMDg1ZjJiMSwgMHhjMTA0ZThmYywgMHg1YjJmZmFmOSwgMHg1YWYxMGUzOCwgMHhjZjg5Mjc5NywKKwkweGM0NmYzZDFkLCAweGZkZjg3NTA1LCAweGVmMTQxM2YxLCAweDhkZTFmODYzLCAweDJmYzI5Zjc4LCAweDNlNDFjNzVhLAorCTB4Nzc2OTFkMTgsIDB4MGRjNDg1ODcsIDB4MmZiZWRmYzAsIDB4YmNjNjhmZWEsIDB4YzMyNzdkZjgsIDB4OTdkNGZmYmYsCisJMHhmMmY3ODAyMiwgMHhiNWZlM2YwYywgMHhkODM0OTY4ZSwgMHhlMWRmNDYxNSwgMHgzM2M3MDRmMCwgMHhlNTdhZmUxOSwKKwkweGU3MTUxNjhiLCAweDY0YWYxMTg5LCAweDNiY2M2MzhjLCAweDE1ZmQ0YWNhLCAweDVkMjNjNjc0LCAweDQ3Y2E2YWViLAorCTB4NzU3ZDQ2NWMsIDB4OTNkN2Y3MjQsIDB4NDlkZGUzYmUsIDB4Yjk1NWU3YWEsIDB4ZWMzZTUzNWQsIDB4MjJhYmEzYzcsCisJMHg4Y2U5NDIzZCwgMHhhZmE5ZTgxMywgMHgzYWYxZWE5YiwgMHgzOGQwYmYwYiwgMHgxZWI0NjI0ZSwgMHgxYzdlODEyNywKKwkweDAxZGY5Y2IyLCAweDQ4MTA5ZDFjLCAweGEzOWZmYmM2LCAweGIwM2RkODk3LCAweGI4OGUzZTgzLCAweGI4Y2U4MmIzLAorCTB4MDg4ZmQ0MDUsIDB4Mjc5OGM3ZGEsIDB4MTVmN2VkZmEsIDB4YmNmMjE3Y2QsIDB4OWRmMGNiZDcsIDB4MjlmNDkyZTYsCisJMHgzZjVlN2FkYywgMHgyYzYzODVhZiwgMHgzZDU0YmJkYiwgMHhmYWU2MWM1ZiwgMHhjZmQxMDQ2YiwgMHg5MGRhMTlhZCwKKwkweDFmZGZkNDgxLCAweDdjY2M4Yzk0LCAweDdhMzIxN2Q2LCAweDA5NGZkZjYwLCAweDBiYjA0Nzc5LCAweGYwMzExOWZhLAorCTB4YmM3ZTg0ZmYsIDB4MDViZGVmMTIsIDB4ZTk0MmUxZGIsIDB4NDE4ZmMwYzgsIDB4YmJkZTA2NGYsIDB4MGU4MzJiYTMsCisJMHgxOGQwZTI4MiwgMHg2NTcxMWRlZiwgMHhmNGExN2Y3YSwgMHgxOTlkMWRkNiwgMHg0M2FkNzVmNCwgMHg4Y2YwMDFkMiwKKwkweGFlODMyMGY4LCAweGY4OWEyZjk0LCAweDJhZThlYjFlLCAweDA2N2Y5ZjA3LCAweGM1ZDI4NTVkLCAweGU5MjU3NDk1LAorCTB4MGUyN2ZlYjQsIDB4YmE0YWVmZWUsIDB4YzAwN2E0ZWEsIDB4NTVkMzg3ZTUsIDB4ZjhmMzhhOGIsIDB4NzlhN2E1OWYsCisJMHhlZTNjNjI2ZCwgMHg3NjVjOTdmZiwgMHhhYmRhNDQxZiwgMHg3YzE3YjY5ZiwgMHgxOThjNGNhNiwgMHgyZTEzMTIwZiwKKwkweDYyZWMxMDc1LCAweGJhMzJmNWExLCAweDdmNGExN2E5LCAweGJjNmVlZGExLCAweDZlNDY1ZGEyLCAweGZhNzFiYjcwLAorCTB4YWVkYTE5NTksIDB4MDQ3YWVkMTIsIDB4NzFjMjFiYjcsIDB4ZjdlOTZmMTEsIDB4MWE3MmRlMDgsIDB4OTk5ZTJkNzEsCisJMHhiOTBlNTM5MCwgMHgyZjJkZjI2ZCwgMHgyN2NjOGRlMSwgMHhmM2E3MTliYSwgMHgwOTYyNDNmMywgMHhlZTI0YmY5ZiwKKwkweDg1NGY0MGZhLCAweGNiOGQ2OTNhLCAweDQyZmFjODVkLCAweDcxZDc2NDYxLCAweGVkZWEzNzA1LCAweGRjNWQ3ZmM3LAorCTB4NGY4Y2Y5ODAsIDB4MzdlM2NiMzAsIDB4ZjVmY2YyZWEsIDB4MGZmYjkxYTIsIDB4YzZlMTQ3N2QsIDB4Y2U1OWViZGMsCisJMHg2MTQ3N2QwZiwgMHhmZTNkNDBmMywgMHg4MWE0NGQyMCwgMHg4ZjBhMTdkZiwgMHgwZWZlOWY5YywgMHhjZmJlYTE0NiwKKwkweGM5YmE3NDUzLCAweDU0NjJhYjcwLCAweDZhOWJlZTFjLCAweGFmMzIxYzU2LCAweDNjOGMxZGUzLCAweGZjZTNlYjhjLAorCTB4ZTljZmMyMGQsIDB4ZmRjMDIyNGQsIDB4MDkwM2EyNGMsIDB4NjEwOTFmZjksIDB4Yzg1ZmVmOTMsIDB4YWEzNWJhZmIsCisJMHg1NzkwZGZmNiwgMHg0ZmJhN2I4ZCwgMHhiMDU3YjUzYiwgMHg0YzQ0MGZjZiwgMHg0YTc3ODM5ZSwgMHhkNzE5MGRjNiwKKwkweDE3ZjZlZDBmLCAweGRiY2U1OWJhLCAweGI5NjBjOGVmLCAweDE2ZDJmYjEzLCAweGRlMjdjOWQ3LCAweDVmYmE3M2E0LAorCTB4OGEzN2JjYTYsIDB4ZmI0NmY3MTQsIDB4M2JmYTc5ZDEsIDB4YmY5MWM3M2EsIDB4NDBiOTY3MzEsIDB4NzM2ZWYxYmIsCisJMHhmZWQxOTNiYywgMHg2MTM4ZDcyNiwgMHg5Y2ZlZWY4ZCwgMHg3NzZmMjliYywgMHhkZWNkZDg2ZiwgMHgwNDJlY2Q4YSwKKwkweGJkOGFkZjdlLCAweDdkZWIxMGFhLCAweDQ1YTdiNjJiLCAweDRlNzY2MWE2LCAweGFmZDJiZDA3LCAweGEwZDhiOTJiLAorCTB4YzZmMWNlZmIsIDB4YzFkZDc4ZjMsIDB4Mjg2YjgwZDksIDB4ZmYzODBkM2MsIDB4ZWIxZWI4MDAsIDB4MDc3YmFlMGEsCisJMHhhYTM3OTYwOCwgMHhhZDVmMjQyMywgMHhkNTdjOTA4ZSwgMHg1ODc1NzM4MCwgMHg5ZWRlN2RjNywgMHg1NTI3ZjFjMSwKKwkweGY5YWYwOTBlLCAweDU2MTFhZWNiLCAweDJjMTdmNTEyLCAweDkzZjljOTFiLCAweGI4MDdjMjc1LCAweDYwOTJjNjlmLAorCTB4ZjdiMTBmMTAsIDB4Y2U1OGViMDksIDB4OWRkY2VmMWIsIDB4ZThiZGY4N2QsIDB4MmFlNzlhMjQsIDB4OTgzZmY2ODcsCisJMHg0MDgyYjlkZiwgMHhlMjg0NDkxNiwgMHhiZTdhODZlNCwgMHgwNWZlN2Y4ZiwgMHhhYTdkMDNkNSwgMHhmMWFmNzU0YSwKKwkweDk2ZmFjZWMwLCAweDdkNzFlZjJhLCAweGZlMTUyMDdkLCAweGQ3NTRmMTU4LCAweDBlNTVlOGYxLCAweDlmNDM1ZjA5LAorCTB4OThhZmQyMWMsIDB4NWZiMWFkZjcsIDB4ODBiZWZlODUsIDB4MGVmNTVmMjEsIDB4YzZkY2YxOTMsIDB4ZTRlZWY3M2QsCisJMHg5MmUxZTFhZCwgMHg5MzBlZjVhZiwgMHhlYmMwZDhmYywgMHhlZTdlYmIwNiwgMHg4OWMzM2Y1MywgMHgzYWZjYTY4ZiwKKwkweDk4YWJmNTljLCAweDJlNGM2ZjU4LCAweGMyODU4M2VjLCAweDc2MTg5ZmE0LCAweGY5MDRmNjk1LCAweDIyYjVjYTdlLAorCTB4OTQ1MTkxZWIsIDB4MTM2NDNjMmYsIDB4MDc2ZjJhN2UsIDB4OTI3OTQwNDMsIDB4MWZiNmIzZjQsIDB4ZWY4MmE0YmEsCisJMHhmYzI5NDUxNywgMHg2ZjcxODYzZSwgMHgyMmM5MmMyOSwgMHhjMjdjNDFkYywgMHhiZDM3MGVlOSwgMHgxMzkxMWI0YiwKKwkweDc5NDdjYTY3LCAweGM3ZWE5OTdhLCAweDk1Mzc0ODhjLCAweDk4MDc3YWM3LCAweDE0MjdlM2NhLCAweDhhM2RmMjk4LAorCTB4ZWZkNTM2YWYsIDB4MjlhYzZiMzksIDB4NjhkZGFjOWYsIDB4MzE1MjlmYWEsIDB4ZjgzNzk0ZDUsIDB4MjRmYzhhNTgsCisJMHhjNWI5MmNmYSwgMHhiMmVmYmVkNCwgMHgzNGZkNTM1MiwgMHg1Y2E5YTU1ZiwgMHgzMTliM2JjNSwgMHgyNWI3YWI0MCwKKwkweDgxY2YxMTI3LCAweGQ1OGM5ZmNhLCAweGUzZGU0MzRiLCAweGYwY2IwOGI1LCAweGZlNmI3N2NlLCAweGNiZGU1YTMzLAorCTB4ODBiOTEwOTksIDB4NmNjOWFmZGYsIDB4OWU3OTk5ZmMsIDB4MmM2YjQ0ZWEsIDB4Y2RiYmQ3YTUsIDB4YzkyOGIxN2MsCisJMHhiOTE3MWY5YywgMHg3MWRmODE0ZiwgMHg5ZmNjY2I5YywgMHg0ZDU4OTY1MywgMHhlYWU1MWZmOSwgMHhlNDRmMzRmYywKKwkweGJiZTNkZGIxLCAweDMwMGRhZmYwLCAweDRlMTQzZmUxLCAweDdlZmMwZjQ0LCAweGVmOWQzYjY4LCAweGNkZWJjYzNlLAorCTB4MDcwZjdlMzIsIDB4NzVlMDkzN2UsIDB4MGMxMjZmYzAsIDB4ODI0ZGY4MDcsIDB4MDQ5YmYwZjMsIDB4MjRkZjg3ZDcsCisJMHg5MzdlMWNiOCwgMHg4NzIxZjJlMCwgMHhkNjFmZjhjYywgMHg1NWZmYzY2MiwgMHg2ZmYxOTkxZiwgMHg3ODc3NjVkMCwKKwkweGE2NmFkOTFhLCAweDlhMjlhMTBmLCAweGJhNzgyZGYyLCAweDdlOTk5NGU2LCAweDFkNzNmMTQyLCAweDA5YjE1Yjg5LAorCTB4MDllMjg3YzAsIDB4YmUzODdmYjgsIDB4OGJlMDg2NTYsIDB4MzdmN2MzZjAsIDB4MzE0NzdiZGIsIDB4ZDdkNzFlN2UsCisJMHgyMDYwNmQ3NSwgMHgzYTJlOTdkZiwgMHg2ZmJjMGFhNCwgMHg3MWYzYWM2MywgMHg2ZDNmZGNmZCwgMHg4OTczMWFkNSwKKwkweDVkY2VmY2NmLCAweDc2M2UwNDkwLCAweGRiN2U5MDlkLCAweDRmMTY1NWYxLCAweDIwN2ZiYTgwLCAweDI5ZDk5YzY0LAorCTB4M2ZhODQzZGEsIDB4YWE1MmZlMmIsIDB4MjZkMjc0MWQsIDB4MGU3YmNmZGYsIDB4OTVkODc5N2MsIDB4MTIzZWIyZjEsCisJMHhmNmJlZjg0ZiwgMHgyN2JlNTRjZiwgMHhhOGQyYzQ3NSwgMHg4ZWFmOGY4MCwgMHg5ZjAwOWVkMSwgMHg4NGJiOTc5OSwKKwkweDhhMjQ5YmQ3LCAweDVjNDAyZmI3LCAweGE1ODU3ZmQ0LCAweGFmYjczZjIyLCAweDcyMmRjN2JjLCAweDg5ZmVmOTViLAorCTB4YTZlNzI3YzEsIDB4MmRhOWI4YzgsIDB4ZGQ3ZmJhYjksIDB4OWVhN2UzMjMsIDB4Nzc3Mjk1YzksIDB4NzFjNWM3OTQsCisJMHhmMmI5MjVkZSwgMHg4YmE5MGQ3ZSwgMHgwMTA3NzNhOSwgMHhkOTlkODczZSwgMHgwYjNhY2Y4MCwgMHg4YWQ5ZWJiZiwKKwkweDlkMDllNDdiLCAweDBmMjFjOGY3LCAweGEzZWNmZTQzLCAweDFmZjU3ZmNiLCAweDQ3NTgxYzNiLCAweDNhNjE3YWY2LAorCTB4MWRmYmZiN2YsIDB4ODFlMmY4YTYsIDB4ZmNhNjVkNWIsIDB4NTMyNGE2YTAsIDB4ZGNiYmMxZmQsIDB4NDBmY2YyYTYsCisJMHhjODdjYTk4ZSwgMHgzZjI5OGYyMSwgMHhhOTg0NjVhYywgMHg3OTFmNTVmZSwgMHhhZDkxZjk0ZCwgMHhhZmY1NGMxMywKKwkweGNhNmM1NTM5LCAweDQ3YjY4OGE3LCAweDhhYmVkZjAxLCAweGNkMWM1M2I0LCAweGI5ZmE5NzRkLCAweGU0ZGM3MDViLAorCTB4ZTU2M2JiZGMsIDB4N2VkZDVmN2QsIDB4NDZmYmM4NjEsIDB4ZDNhNmI5ZGMsIDB4ZDExZWE4NzUsIDB4ZThlNTJlZDcsCisJMHhmNTIxNjRmYSwgMHgxZmFlODc0NiwgMHhhMTNlYjMwYSwgMHgxZGUzNzFlOSwgMHhlNjdjNThmNywgMHg1ZTIzNzFiOCwKKwkweGQwZWY0M2JjLCAweDdiOGU4YWY1LCAweGUyZjE5ZDM0LCAweGYxNzhlMGRlLCAweGJmNWQ2MWI5LCAweGM3NWU3ZDFmLAorCTB4ZmJmY2U4N2IsIDB4ZWI3YWU1ZGEsIDB4YmRmM2I0ZWYsIDB4YTE1ZTYzMWQsIDB4OTZjOTQ5ZjMsIDB4ZDFkOWJiNzQsCisJMHhiZmFhYmRmNSwgMHg0NmZiNGFlNSwgMHgyNWYxNjY2YiwgMHgzNjEzZmRkMCwgMHg2ZGZmMmI0ZiwgMHhmM2M2MmI4NCwKKwkweGI3NWUyMmI0LCAweGNmNzYxN2ZlLCAweDhmNzdmNzBhLCAweDVjYjA3NzM3LCAweDY1OGIxY2NmLCAweDhlNWM5NGRlLAorCTB4ZGRmZDMzOGIsIDB4OTI0MTg4ODQsIDB4NzU4M2FkYmUsIDB4NzhjODRhZmIsIDB4ZGM2NDYzNzMsIDB4YmJiMTg4OWEsCisJMHg4ZmRkYmY0MSwgMHg2NDk5ZTEyNywgMHhmZjdjMGQxNywgMHhmMTY3YmY0YiwgMHhmNzRkMzVlMywgMHhiZDhlNjhhMSwKKwkweGNlM2Y3ZjUxLCAweDRjM2QwMzZmLCAweDU5ZjI0YjFjLCAweDViMTNjOTNlLCAweDQ5MTQzZDdhLCAweGNiMTNjYTcyLAorCTB4OGE5ZjZjYWMsIDB4Mzc1N2ZlN2IsIDB4ZGU3NWZhZmIsIDB4ZmE0YmU5OWYsIDB4YjIwM2U4MTAsIDB4MDdhOGY0MGUsCisJMHhiNzI5NTRmMiwgMHgyYmViOTIwYywgMHhiOGVlYmY1MiwgMHgxODdlYzBlNywgMHg0M2YzZjQyMSwgMHgxNzRmYmM3MCwKKwkweDY4NzRjNmY0LCAweDc1ZGZlM2FjLCAweGRiYTBjMWVmLCAweGZhMTkzODUwLCAweDNiZTNkMGFmLCAweGQyZjMxOWZiLAorCTB4MDdlYzY3ZTEsIDB4ZmRjNjdlMDMsIDB4YjY2ZGY3MTMsIDB4N2M5MTRkZTIsIDB4ZTIwMjY1OGYsIDB4NmRmYzBjZTUsCisJMHhjNmY2OTNjOSwgMHg1MDNjM2EwNSwgMHhiYmE4ZmMwZiwgMHg2ZTZhNDU3YSwgMHhlZGY3ZWMwYywgMHhlYWUzMWRjMiwKKwkweGVhM2IwZTgyLCAweDYyZTA5YmZmLCAweGZiYmJiZmMwLCAweDg3ZjFkZDZkLCAweDVkZjBiZTUwLCAweGEzYmFkZGY3LAorCTB4ZGVmNjdmZDMsIDB4OTA5ZjEwNWIsIDB4NWUzYTRiZjEsIDB4MWMyY2ZkZmMsIDB4OTQ3NzcwMTcsIDB4MzIzZjNmNzksCisJMHg5MTg5ZjI0OCwgMHhlNGZkZjQ4MywgMHhjY2Q2ZmQyMywgMHgwZmZjMDQyZiwgMHg5ZDU1MmJmNSwgMHhiY2YzYzg1ZiwKKwkweGRmOThhZDI0LCAweDhhZjljNmFmLCAweDM3ZjM1YmZiLCAweDg4NDdmOTRhLCAweDg3YWJjNGUyLCAweGUzNmY4ZmMyLAorCTB4N2FkN2NiZmIsIDB4NGE2ZGRiMDUsIDB4ZGUzZjE1MWIsIDB4NzVmMTJhZjksIDB4OWZiMzBmYWQsIDB4MDc3MmNkY2YsCisJMHgyNmM4M2JiZiwgMHg0NjU3NmE0ZCwgMHg1ZGE1ZjZlZCwgMHhjMmZhY2VmOSwgMHg2MGVlZjk0OCwgMHgwYmVhZmJlOCwKKwkweDJmMTliZDc1LCAweDg2ZGY2MDZhLCAweDE5ZWViZGZhLCAweDNjYjFmYmE0LCAweDljZjJjM2MyLCAweGExNTBkNzFlLAorCTB4MzdhMGU5ZDcsIDB4MGU2ZjdjYmYsIDB4MzFmNjMyN2EsIDB4NjcxZjFjYTUsIDB4M2YwZGNkYzAsIDB4M2NjZTkwZDQsCisJMHgwNzNjMzdjMSwgMHhiNTgzNzllNywgMHgwZWM1ZjhjYiwgMHhhYjdlMWFmOCwgMHg2MWVjYmYwZSwgMHgxYTExMjdiZSwKKwkweDc3Y2U3MThmLCAweDNmMmJiYTIwLCAweGViMWZlMTk4LCAweGY4NzQxZjZlLCAweGVmYzNiZWM3LCAweDg5NjkxZWQ2LAorCTB4NjlmMWRmYzYsIDB4NjdkZjI2ZGYsIDB4ZmQ1YmY0ZTksIDB4MjJjYmI4NjUsIDB4ZjAzMTUzZmQsIDB4ZmRlYWI1M2YsCisJMHg1ZDc5OGQ4OSwgMHg5NmQ1MGZkZCwgMHg5NDM4ZTRlZiwgMHg3M2I2OGI2NiwgMHgyY2VmYWQxMCwgMHg3Yjc3OGZmNSwKKwkweDlmZGM4OWVmLCAweDI2MTE3Nzg4LCAweDJiYTk3NmVhLCAweGNkY2JhZGQ3LCAweDhmZTkxNGEzLCAweGVmOGNhOWY2LAorCTB4NWVmMjA5ZjYsIDB4ODE1MWYxM2QsIDB4NGZjNDY3N2QsIDB4MDQ4MTExNGMsIDB4NGExZjg2YTQsIDB4ZTE5MjNkNWIsCisJMHg0YWExZjg2ZiwgMHg5ZTc5MjMwMiwgMHhkYTE3ZWEzMywgMHhlYjY4ZTRmMCwgMHg4NTE1NzdhMywgMHg1M2ZkM2JiYiwKKwkweDVjNjQ3ZGFkLCAweGFhN2U3NzU0LCAweGI5ZjM5NzY5LCAweGFmOTdlOWJmLCAweDE4M2U3ZWUxLCAweGI2ZTUyNjk0LAorCTB4MDM2ZWZiODYsIDB4MmFkODBkOWQsIDB4YWI2NzU4NmMsIDB4NGJiZmViYWQsIDB4YWJmM2E4NTEsIDB4M2Q5YWU4MTIsCisJMHg5NmFkZTI4MiwgMHg5NjJmYmMyYiwgMHhiZjg4YzIyYSwgMHhlNDZmM2U2MiwgMHhmOWVhMzUyZiwgMHg3ZGJmOTkyMiwKKwkweGVhYjdjY2E1LCAweGQxNmRhN2VmLCAweDI3NTgyMGVkLCAweDdhMDdhYzUyLCAweDRlZGQzNmY5LCAweGM1MjA3NTgyLAorCTB4N2MxZGYwM2EsIDB4MzVmMDc5MGQsIDB4OTBkN2MxZTQsIDB4MGE0MzVmMDcsIDB4YTVlZjg2YmUsIDB4NzYxNTM4YTIsCisJMHgwYWQzZjg1YiwgMHhmYzA3ZjY4MywgMHg3MjQxODU2OSwgMHhjMTY5ZmMxMywgMHg4MmQzZjg3OSwgMHgxNjlmYzNlYiwKKwkweDVhN2YwZTVjLCAweDY5ZmMzOTcwLCAweGQzZjg3OWMxLCAweDlmYzNlYjgyLCAweDNmODc5YzE2LCAweGZjM2ViODJkLAorCTB4Zjg3OWMxNjksIDB4YzNlYjgyZDMsIDB4MGU1YzE2OWYsIDB4Mzk3MDVhN2YsIDB4NzljMTY5ZmMsIDB4ZWI4MmQzZjgsCisJMHg1YzE2OWZjMywgMHg2Mjk5NmYzZSwgMHhkM2NkYjdmMiwgMHg1YjI4N2ZkZiwgMHg1MWY0Y2YxZiwgMHg5YjFjNTE5OCwKKwkweGVmZmRmODQ3LCAweGM0ZmM3Zjg4LCAweDM3M2MwZTk2LCAweDJlZGQwMjJmLCAweDQ4ZjcwZWFkLCAweDkwNGUzNzNjLAorCTB4ODkwOGI3NzgsIDB4OGNkOWI2ZTcsIDB4MzJlY2JiZTcsIDB4YjRlMzI0NWYsIDB4N2UwN2U5NDMsIDB4ZjQ5YjQyYWIsCisJMHhkZjg1MjE1YiwgMHg1NmZjMjkwYSwgMHgyYWI3ZTE0OCwgMHgyYjdlOTRjYywgMHhlMTViZjBhNCwgMHg0ODU2ZmMzYiwKKwkweDBhNDJiN2UxLCAweGY4NTIxNWJmLCAweDZmYzI5MGFkLCAweDJiN2UxNDg1LCAweDBhZGY4M2I0LCAweGY4NTZmYzI5LAorCTB4NTIxNWJmMGUsIDB4ZmRmMGFkZjgsIDB4ZmUwM2NkMDgsIDB4OTA1ZTYzMmIsIDB4ZjQ5OWZiZjMsIDB4OTM0M2EyNTIsCisJMHhlNTMyZWE1ZSwgMHhkNzA3ZTcyMSwgMHg1YzFmOWM4NywgMHhiODNmMzkwZSwgMHg3MDdlNzIxYywgMHg3MDdlNzIxZSwKKwkweGMxZjljODdkLCAweGRjODM0OWY5LCAweGVmMjBiZmJjLCAweGJjODNiNzA3LCAweGQ0MWY5YzFmLCAweGI2MDM3YmU4LAorCTB4MmUxYjQ5YWIsIDB4MzViNDhlYmMsIDB4NzE0Mjc5NGEsIDB4MmYzNTMxMDksIDB4OGJmYzI2NzMsIDB4MzUyNTRlYWQsCisJMHg2ZDg0MjNkNiwgMHg4NTk5ODBmOSwgMHgzOGY0ZDc5NCwgMHg2NmQxM2NjNywgMHhhZTM5YmUwMSwgMHgwNWE2ZjA4MCwKKwkweDBmNjVjNzA0LCAweDVjYzk3ZmZhLCAweGY5YjNmODZlLCAweGJmOWVmMDg3LCAweDUwZGViMDQzLCAweDM1YWZkZmEzLAorCTB4NGI4NDdiZGEsIDB4ZWZkNDZhNDUsIDB4MmY1ZDc3Y2MsIDB4MWVhMzdjNzQsIDB4NzlhMGNiZjMsIDB4OGY5OTYyOTAsCisJMHhiYmZjOTM3OCwgMHhhZjcwMGIyMiwgMHg5MTQ1OGI2MCwgMHg2NDJiYjhmMSwgMHg1ZDI4NzQzYywgMHhlNzkzY2FhZCwKKwkweGY2Y2IxNmZiLCAweDUzODhlMWZkLCAweGI4M2M1MTI5LCAweDE1NjU5MWVmLCAweDgwMDU2Yzg3LCAweDdlMDI5MmQzLAorCTB4NTYyZjJhZjcsIDB4YWI5MmQ3NWYsIDB4Y2M2NTg3MTEsIDB4MTI0YmIwZGIsIDB4ODY3YmUwOWYsIDB4YmQ4NGRhYTMsCisJMHhmZDE5YzY5YywgMHhlZmUzYjA4NSwgMHg0YmI0NGM3MywgMHhhMGVkMDI3OSwgMHgyOWY0MGU2ZiwgMHhmNDQxNGRkZSwKKwkweDllNGYyY2JkLCAweGI2ZWY5YTdiLCAweGZiZTljYmFiLCAweGFlNGI2ZGMwLCAweDg5YzVmZGM2LCAweGQzZGRiMmUxLAorCTB4Mzg2Njg5YmYsIDB4Zjg1MDZlNGUsIDB4NmRhOGNlOWUsIDB4YzlmYjhiYzIsIDB4M2E3ZTc1Y2IsIDB4NWVjYjliNzAsCisJMHhmOGJhZTNjZSwgMHg2ZmQxYTNkZSwgMHhiZTU0ODZjOSwgMHg1YTIyNTlhNywgMHg0NTBmNzEwYiwgMHgzZGY4NTUwYywKKwkweGI0NmUwMzdjLCAweGJlYjFkN2JlLCAweGIwMmFkYTJjLCAweGZiZTBmZjJmLCAweDdlMmUyNDRmLCAweGEzNGZmYjlmLAorCTB4MjExNmM2ODcsIDB4Y2IzNDUwYWUsIDB4MGQyNzQyZjcsIDB4ODNkOTU5MmQsIDB4ZTVmOWE1ZTYsIDB4YmZhM2ExN2IsCisJMHhlNzA2ZjI1OCwgMHg4NWVmOTI5ZiwgMHhlNzBjZjkzMiwgMHg5ODc5ZjFmOSwgMHhmZGY4NTNlZCwgMHg4ZGJlYzk5NSwKKwkweGVlMzcwNDk2LCAweDI1YjcyZjY1LCAweGUxMzZmZWEyLCAweGY1MDU1ODgxLCAweDhkOGFmNzA4LCAweDE2OGFlNTc1LAorCTB4YmQwMTUzOGIsIDB4NDFmMTAzODgsIDB4NjM5YzQ3ZjQsIDB4ZGYyNWU4M2EsIDB4NTlmN2UzNjMsIDB4MzY1ZDU4YTYsCisJMHhjZTQzMWJmMCwgMHhiMWM5NzEyOSwgMHgzMTUxZDQ4YiwgMHg0NDMyY2Y3YywgMHhkMGQ0Yjg0ZSwgMHg3ZTYyZTM4MywKKwkweDNiNGU5Yzc4LCAweGJhNWZlN2RmLCAweDg1NzJjOWQzLCAweGJlNjE1ZWI2LCAweGM2NWYzZTc5LCAweGY2ZGQ1NmJiLAorCTB4N2E0YjcwZTEsIDB4OTljZTljNjcsIDB4YmMxNmZmMzQsIDB4N2QyNjdiMDMsIDB4ODUwOGY0N2IsIDB4NzliZDg4ZTUsCisJMHgwZGEzZDcwNCwgMHhjZDNkZjEyZiwgMHhmMDZmOTU5MiwgMHgwZDRiOTQzZCwgMHhmYmNiNDUwZiwgMHg1MmZmZDI2YywKKwkweGIwY2RjM2FlLCAweGYxZDdjZDNiLCAweDY5YzdhZTUzLCAweGVmOTNhYjFkLCAweGNjMzlkMzNhLCAweDZhNWNhZWVmLAorCTB4MTE5Y2IxYjAsIDB4ZjIxYTJmMmEsIDB4OTExZWYxYTcsIDB4YzIzZmFlMTAsIDB4NjBkMTUzY2UsIDB4MGJjMDNiZTMsCisJMHg0YWFjOTRkNywgMHg5MWNhNTcxMiwgMHg3MzM5NzU4YiwgMHhlMzhkODM1MSwgMHhmN2Y0MmFiMiwgMHg2ZWZmNDJkNCwKKwkweDFlM2Q2MmNmLCAweGYzNTZmMTZiLCAweDQyZjI0ZmY3LCAweDdkZTM1MGU0LCAweGM5NGViZDRkLCAweGIwNjYwN2RiLAorCTB4YzZjNGI0M2MsIDB4Y2IzOWNkZmUsIDB4YjYyNDdjYTUsIDB4OTNlZTNmMGIsIDB4Y2UzZTU5Y2MsIDB4ZTY2NmY3ODIsCisJMHg5NDdhZjRlYywgMHg1ZGU5ZTgyZSwgMHhkODlhNGU1ZCwgMHg0ZmY4NjRlYSwgMHhmY2MxMWNiOSwgMHgxNGU1ZWE2NSwKKwkweDM5N2NkZmNlLCAweDk3OTlkMzk5LCAweGVlMmFkYzY1LCAweDVhNmU4MTIyLCAweDA3M2JlNDhiLCAweGQxZjJlYmVmLAorCTB4YzZiMWM0MGMsIDB4YzllYjNlNDMsIDB4ZjQ0ZWRkZjQsIDB4NzRmMjIxOGQsIDB4YWJjMDM1YmUsIDB4Mzg3ODgwMWMsCisJMHg0NGFkYTZkMSwgMHg4ZGM0ZWM5YywgMHg0ZDgzZWY4MiwgMHhmZDQ1MWM4MiwgMHgxNTVjODJjZiwgMHg1NjkxZmQ4ZiwKKwkweDI2NjFmN2M0LCAweDY4YmY3YzI4LCAweGY0ZGJkMGQyLCAweDQzZmI0MGZkLCAweGY3ZTEzZjMwLCAweDI5YzJiNDU3LAorCTB4Y2QzOWM0N2UsIDB4ODA1YmI2ZDIsIDB4Njg1ZjYzN2YsIDB4NWVmY2EzYmUsIDB4NjI5ZjI0ZWEsIDB4OWE5MjNiYzcsCisJMHg3NDFiNmZhZSwgMHhlNjNmYmExZiwgMHhiMjc2ZTg0NiwgMHhlYjA3Njk0OCwgMHhiMjYxOTNiMCwgMHhiN2M5MjQ3OCwKKwkweGQzZTQyNjZhLCAweGY2NmRiMGI5LCAweDYwODEwOWQyLCAweGNiMmI5NTFmLCAweGQ1NzZmYzdiLCAweDQxOTIwNmNjLAorCTB4YzlmYjU1ZmYsIDB4ZGU0NThiMWMsIDB4OTAzOTIzM2YsIDB4OTY4ODBiZWYsIDB4MmY5NDllYTIsIDB4NDAxNGEzNTksCisJMHhmNWU2MzIzZiwgMHgzOGVjNjdiOSwgMHgzYTRlYjBjZiwgMHhhN2Q4ZWQyOCwgMHhkMmU1MWVmMiwgMHg3ZTRkMzI3YiwKKwkweDhjYjRkMDliLCAweDM0ZmQ4ZGUwLCAweDI3ZjVhNjM3LCAweGY0Njg2MTBhLCAweDFjMmRlMTYwLCAweDg1ZWJmNzgxLAorCTB4MDA1NDI4ZjEsIDB4ZThiNzk4ZjEsIDB4M2JjMWVhZjksIDB4OTczYWI0ZmYsIDB4OTFmOWM0ZTEsIDB4YTY2ODdkYmYsCisJMHhlMDVmZjIyZiwgMHg2YjE0NzM5MywgMHg0YjFiZGZmMCwgMHgwZDU3NjhiMiwgMHg1MGY3YzFlZSwgMHgxMWJmMDNjNywKKwkweDllZmM2ZGI5LCAweDRiYjY0YTQ0LCAweDdiMTBhOWYyLCAweDg5NjBmNTRiLCAweDRiYmI1MGM3LCAweDc3M2NhZTU5LAorCTB4N2E5ZGQ1ODQsIDB4ZGM3YmZiMmIsIDB4ZDYzNGI3NmMsIDB4YmU2NmNjN2QsIDB4ZjNhNDZiZTcsIDB4NWVlN2ViMDcsCisJMHg5ZWU3YmZkZCwgMHhmOTE2YzNjYSwgMHgxNjYzYzJmZSwgMHg4ODU3ZjZmZiwgMHhkMGY3MmY1ZSwgMHg4ZmJkNjA2NiwKKwkweGU3OWVkZTIxLCAweDhjZmFmMWFmLCAweGY4M2E0Y2Y3LCAweDg5NmVmZTk1LCAweDk2NDc0ZjQxLCAweDJhZmJlMjVkLAorCTB4Yjc3NjkxYTUsIDB4ZTU0ZjQ0MWEsIDB4MGZiZTE1YWIsIDB4ZGU0Y2JhNWEsIDB4MmI1NmQ2ZTcsIDB4NmU4NDVkZjIsCisJMHg5OWJmNThlYywgMHg5ZWZjYmZmZCwgMHgxMTdlNmZkNSwgMHhmODc1MGIyZSwgMHhiY2I3YjFjZSwgMHg4NGViNDhlMSwKKwkweDNkOTc5ZmVmLCAweDM0N2M5MzYwLCAweDBlZmI4OTkwLCAweGYyNzEyY2I3LCAweDdiOWZkOWJiLCAweDBmMDZhYjhhLAorCTB4OGMzYzllMDMsIDB4ZTVkODcxYTcsIDB4OGM0YjdmNTQsIDB4NGJkZjA0YjYsIDB4ZDg0MWNiNDUsIDB4ZmNmZWU3MWQsCisJMHhiYThmN2U2ZCwgMHhkZjhkMzliNiwgMHg5NWQ5MmNiZiwgMHhkOWVmMGFiZiwgMHg3ZWQxZWU3YywgMHg0NDk3ZjU4MiwKKwkweDQ3OTBlY2JhLCAweGY5NjIxYTZhLCAweDUzZGI5ZTdjLCAweGRhMmJjZmJmLCAweGUwNjdjZmQ4LCAweGQyYzFiZWU3LAorCTB4YmU3ZDc3OGUsIDB4YWVhMmU3MWMsIDB4NmNjMDExNTcsIDB4YmFmNTRjNTMsIDB4ZjYxYTYzYjYsIDB4NGIzYjUwZDEsCisJMHhkZjIxYmJlOCwgMHhkZDgxNTc2NSwgMHg1ZjY0MWVjNCwgMHhiNjMyZWMzNSwgMHg3MWIzNjM5YywgMHg3N2IxY2ZhZSwKKwkweGY3M2VmN2ZkLCAweGY0MzdmM2VhLCAweDdhMWRmOWRhLCAweDllZjhlZTZkLCAweDJhZDdmZjkwLCAweGNiZDNkODJlLAorCTB4NzEzM2RkMjMsIDB4OTBmY2ExYmYsIDB4NjJiNDkxMGQsIDB4YmU1YjljNjIsIDB4N2M4ZjczMWYsIDB4OGVmNGE2M2YsCisJMHg3MzY3ZTY3YywgMHhkYzAyOTM4MCwgMHhmYmM5MTkzYiwgMHhlOTRmZGNiOCwgMHhmYmY3ZWU5MCwgMHhmNDBmNmJhZCwKKwkweDBhN2EwZGQ5LCAweDgyMWRmOTc4LCAweDFlZDc5NzcyLCAweDk1MWYyNDE3LCAweDc3YTYyYTM1LCAweDBiZmM4YzI0LAorCTB4OTdjOTU1ODMsIDB4ZmMwMGRkNDgsIDB4OWE0NzdjN2UsIDB4Y2QzOTZmMWQsIDB4ZjEwOTMxMjEsIDB4Mjc0MTdiOTksCisJMHg1MWRiM2FjMywgMHg5OTNmOGUzZCwgMHhjYTBlMmU5OCwgMHhmZTE0YmRmNywgMHgyZjE4ZTRiYiwgMHg5NTViZWZmOCwKKwkweGMzZGY5YTM2LCAweGRmMmNmYWEwLCAweGM1MWMxYWVkLCAweDY4Yjg5NWZkLCAweDVkNDg2OWRkLCAweDAzODI0ZjNjLAorCTB4M2VlZGE5YzMsIDB4ZTNjZGNmZWEsIDB4MDJjYTNlMzAsIDB4MDdlYzFiN2UsIDB4NDJmNzEwNzMsIDB4N2U1YzViZjksCisJMHg2ZDI5YzYxYiwgMHg2OGQ0ZWY5MCwgMHhkYTM4ZTQ2YiwgMHgyMGZiNThlYSwgMHg5NzU2MDdjOCwgMHg1Y2IwNGZiZCwKKwkweGJkZGYyMGQ4LCAweGRkZmZhMzllLCAweGNiMmY5YTExLCAweDI3MDRlNWNkLCAweGVlMzNiM2RjLCAweGFiYzI4NmRkLAorCTB4Nzk3ZjlmNDQsIDB4Y2U1OWFjNjMsIDB4MDM2YjVjNmMsIDB4ZjM3NzY2N2UsIDB4ZGQzOWM2NWUsIDB4MzBkYTVkMGUsCisJMHgyODM3ZGY4NiwgMHhiZWY5N2FiNywgMHhmYmMzYTY4YSwgMHhmNzljZGJiMywgMHg3YjMyNWZjMiwgMHgzNGI2MjNkZCwKKwkweGIwNjVmZmNhLCAweGU5Y2Y2Yjk0LCAweDdhNjI3MWZiLCAweGE5ZGY5MzIwLCAweGYxYzljZGJhLCAweDhkNWRiM2UzLAorCTB4NzgwZWRlYmMsIDB4ODFmMDQ0M2YsIDB4NjYyYWUyZGMsIDB4Zjg5ZDEzNzgsIDB4YmU1OTZmMTAsIDB4Y2VkZjhjY2UsCisJMHg3N2M5NDRmOSwgMHhmMDk1ZDdmYywgMHhkNTYwNWJmZSwgMHg3OWUwYWVlYywgMHg4OTk3ZGZhYywgMHhiNGQ5YTFmOCwKKwkweDk3MGVmMWVmLCAweDFmN2M2OTcwLCAweDMzNDNjNGY2LCAweDYyMDVlZmY5LCAweGU2Y2YxYzllLCAweGJiYzc4ZjcxLAorCTB4NGMzNzQ0NTMsIDB4MThmZDA2ZDcsIDB4ZjE4ZGYzZjcsIDB4YjRhYjFlYWMsIDB4NmJiZTdiYzcsIDB4NDIwZjdhOWYsCisJMHg3YzI3YWY0ZSwgMHhkZGQwMGZjMywgMHgwMmUzYjUzZSwgMHgyZjZiOGQyNiwgMHg1ZTA3ZWY5NywgMHhmZGY0ZWZjMSwKKwkweDZhMDFmZmZhLCAweDAwZDM2YzkxLCAweDAwMDBkMzZjLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLAorCTB4NjU1NTVjN2IsIDB4ZDZiYmYwYmEsIDB4YzBkODU3ZGEsIDB4NTFiMDhiNjYsIDB4NjIwMjBkYzAsIDB4MTAxMDZkMTEsCisJMHg4MGExNzUxNSwgMHg2MzZhNzM1YiwgMHg4ZGM0MjkzNywgMHg5MTAxNTBiNywgMHhmMzlmYThhYywgMHhhOTZmMGRiMSwKKwkweDk2MmEyNjk1LCAweDhkYTZiNjc1LCAweGIyNzA3NTk1LCAweGQ5OWIxYjQ2LCAweDBmNWQ5YTZhLCAweDM5ZDM4ZDNhLAorCTB4MzJjZGI2NTMsIDB4MzRkMjA5YmIsIDB4OTlkMzdkOWYsIDB4ZGU3OWU3YmUsIDB4MGRhZjYwYjUsIDB4ZjlhNjc1YTQsCisJMHgzZWZjZWZjZSwgMHg3ZGY1ZTNmYywgMHhlZTdkN2JkNywgMHg3NjVlZjNjZiwgMHhiMjRjNjMyMiwgMHg5ODc4MzYzMSwKKwkweDhjODFiMTgzLCAweDQ1OTMxODE5LCAweDc3YTEzZmM4LCAweDYzMDJlZGZiLCAweGJlYWM3MTk1LCAweDI4ZDIxMzJkLAorCTB4MGI2YmZmNTYsIDB4ZGZlM2RmNjMsIDB4YTI3NDllZjgsIDB4OGYyYzY0NTMsIDB4NWRhMGRiYjEsIDB4MTBhZjdjMWIsCisJMHhkNmNjYWJkOSwgMHgyOWQzM2RmMywgMHgxNDhhZjdkMCwgMHhkNDFkZDMzNiwgMHg3ZWMzZmIxZSwgMHgxM2VmZDVlMywKKwkweDMzOGI2OWZjLCAweGUzYWJlYTdiLCAweGJiNzhkODU2LCAweDlhN2VkMGE5LCAweGRkOGJlYjA1LCAweDNlYTgxYmY1LAorCTB4MjZlOWIzY2YsIDB4MzYzMmM1OTEsIDB4ODdmZjA0ZGIsIDB4N2I0ODk0YTUsIDB4MzJlNmM0NTYsIDB4NzA1N2IwZDYsCisJMHhlMWE4YTExYSwgMHgxOGIxODk0MSwgMHhmMDhiOWY0OCwgMHhiZWM2NjRiMSwgMHgzYmNkZjg2OCwgMHhjZmJkNDBiNywKKwkweDY0YWY2ZjM3LCAweDM1ZTY3YjQzLCAweDM5OGEzZmM3LCAweGY3MzYzMDQ2LCAweDBjNzMzNjUyLCAweGE1ZGU2YzYwLAorCTB4MGY1Njk0MzEsIDB4MDczODY0ZjMsIDB4ZjhkYmQ1MDYsIDB4YzYwN2JhNWMsIDB4ZmIyZGFkYmYsIDB4NWEzMDdmZGMsCisJMHgzMGU1OWZiNywgMHhiZjczZmVmNiwgMHhlODY4ZTNmZCwgMHhkZTlmMzE5NywgMHgzYWNmNGQ3ZCwgMHhhMTNlYWQ2NiwKKwkweGMzMDRiMmFmLCAweDRkNzNhZjhkLCAweDgzMTU1NzQ2LCAweDE4YjZjZTc5LCAweGNkMTQxMjFjLCAweDY0YzU1ZTVlLAorCTB4MzNiMzI3OTgsIDB4MTNlNDFhNjcsIDB4NDIyYmNjNzUsIDB4MTZmZDZjYmYsIDB4ZjNlYjA0ZDksIDB4YjU1N2ZlMzAsCisJMHg1ZGE5OTA1YywgMHg4MjRmYmU2MywgMHg3YTg2MGNmNSwgMHhkZjVlMWNjNiwgMHg1OGY3ZjAwYywgMHg0ODg0NjcwYywKKwkweDkxMmRlOGE4LCAweGNkYmMxOTAzLCAweGY4M2QyOWY3LCAweDIxYTkwYzFkLCAweDg5ZWYwN2E3LCAweDVlY2MxZDBhLAorCTB4N2I2ZDA2NTcsIDB4MzMwMzA1ZjAsIDB4NjVlYjBmOTYsIDB4ZmNlYWFlMWMsIDB4YmZmMzJhYTcsIDB4ZmIyMGJkNmQsCisJMHg0ZTBkZGVhMCwgMHgyNzU3Y2YwNywgMHg3YWMxZTYxYiwgMHgzNjRmYWNlNywgMHg1Y2I0ODZjYywgMHg0NzNlNWVmOSwKKwkweDJmOGRkZTViLCAweGNjYWY4YWFiLCAweDRmNTg3Njk1LCAweDU3YzcxYjU3LCAweGUxM2QzYWQ3LCAweDJmNGY2YmFiLAorCTB4YTkzMTI1N2MsIDB4MDA3NzFlNjcsIDB4OGUwMGQ4YmUsIDB4ZTM4MjM2MmYsIDB4NTdjMDUzMGIsIDB4YTgyZjMzYTUsCisJMHg3YzcwYmZkZSwgMHhlZGZlN2VjZCwgMHhkMDc2NWUwZiwgMHhjZWZmYThmYSwgMHgxZGJlOGQwNywgMHhiNmFjZmZkMCwKKwkweGYyYjc4NGJkLCAweGM5ZjQxYmQ1LCAweDk5Y2VhZjUwLCAweGRiNTE3MDRjLCAweGI2Y2ZhZWNmLCAweDZkZTc4MDMyLAorCTB4MWRlYmI3YWIsIDB4ZThlZWZjMTYsIDB4OTUyMWVlOTMsIDB4NDEzZjEwNTksIDB4Njc5MDA5OWUsIDB4M2JiYzQwYmEsCisJMHgzOTdlYTdhMiwgMHg5YzYxN2JhNCwgMHg5MWNkOGIyNSwgMHg3MTllZGFlYywgMHgzY2Y0MjhiNiwgMHg4NmRhM2ViYiwKKwkweGFmYWVjZGUzLCAweDcxNjU4ODdhLCAweGY2Njc3N2ZhLCAweDY2YjNiZmU2LCAweGEwYjMxN2NlLCAweGIzY2ZlNDNmLAorCTB4ZTQyNGNlNDUsIDB4ZDQ1MTBhOGIsIDB4M2U5YTliZjAsIDB4Nzk4Mzc4ODQsIDB4MzVlMDA2M2QsIDB4ZGJjM2ZlMjMsCisJMHgwYzM4NDY5ZSwgMHg2Y2U2MTQ1ZSwgMHhhOWE5NGY4NiwgMHg4YjhlMWYwMSwgMHgzNmYzOGNmNCwgMHg4MjZiY2M4OCwKKwkweDgxMzVhOTdhLCAweDU0OGYzODhiLCAweDg3NmMyOGEwLCAweDUyOGQ4NDY5LCAweDFkZjkwYjE2LCAweDQ4MDJlZDMwLAorCTB4ZWU5ZTI0NTMsIDB4YzNmNWYyNzMsIDB4Njc3ZTNmNzcsIDB4NWMzYzgxMzEsIDB4YTFjZjRhYmYsIDB4M2I2MDZhZjQsCisJMHhmZTAwYTc1NywgMHhkOWNjMzEwZCwgMHg0ZmExZThlYywgMHgzZTk1MWZiNSwgMHg2ZmVkZmE1NSwgMHg3MGFlN2I3ZCwKKwkweDM5OTM2NzdkLCAweDMzODY1OTNjLCAweDU2ZTMwNGM5LCAweGI5Y2MzYzNlLCAweDNhZmNiODQ2LCAweDBmMDA2MTBkLAorCTB4ODE3YWQwNWIsIDB4N2Q2YzBiNTgsIDB4OTAzNTM3YWMsIDB4MGZjZDc2NTcsIDB4MjRhNWI3YWQsIDB4ODZmNThmYjYsCisJMHg5M2U1NTNhZSwgMHhjM2NlMjYzOSwgMHgwMTUxMjdjMCwgMHhmYWQ3Nzc5OCwgMHhmMTBjNTFhMSwgMHhjYTJmMzAyZCwKKwkweGNkOGJiMzlkLCAweDVkNWJjZTIyLCAweDUwNGQ1M2Q3LCAweGJiYjZlNjE5LCAweDMzZTk0NGM5LCAweGMzNjhjMDRkLAorCTB4NzY0ZDNlMDAsIDB4ZTRkZjNmY2EsIDB4MjlhZGI0YTAsIDB4OWRkYmNhODMsIDB4NjMzZjlhMzYsIDB4ODA2OTg4ODEsCisJMHg4NTMwOGFhNywgMHg4ZjNjZmRmZiwgMHhlNTQxNjVlNSwgMHhlZTljNmQ1MywgMHgxMTAzNWI0ZSwgMHhmZDM5MjBiNiwKKwkweDBkNzliZDcxLCAweDBlZmE0MjhiLCAweGNjZmM4ODNjLCAweDVkYjI4NzFhLCAweGY1ZTlkNDMwLCAweDRjYzQyMzY3LAorCTB4M2YzZTRmYTQsIDB4N2QxMmRkYjUsIDB4MTYzZmM5MjcsIDB4MDJlYzcwNjEsIDB4MjRiMTliOTYsIDB4ZTAyMzc0ZmIsCisJMHgzOGYyZWU2YiwgMHg5YjEyOTAyNywgMHhlNDk0MzhkMSwgMHhiNDZmMGNjMiwgMHg3ZWIwMDA5MywgMHhjYzc4NDMwYiwKKwkweGY4NjBlNDUzLCAweDIzOTVhYTkyLCAweGIyNmI3ZWIxLCAweGU2NzE4MDU1LCAweDVhZTc5YzVhLCAweGNlZDVmZGE5LAorCTB4NGI3YmYxZmIsIDB4OTMyNTIxOTksIDB4OTAyNmNhYWEsIDB4NzIyODc3NjMsIDB4ZGNjMDg5NmMsIDB4YTA3Nzg3YzgsCisJMHgxMmZlNDQ5YywgMHhmZWEyYTUwZiwgMHhmMDU1YTNiOSwgMHg1NmNmMjkxYiwgMHgyMWQ3MDAwYiwgMHg3OGQyZWVjZCwKKwkweDA1NWIxMzk0LCAweGJiNmMwZWU3LCAweGE5YTllNDBkLCAweDBkNzY5ZTQ3LCAweDdhODE3ZjczLCAweGY0MDc3ZDgxLAorCTB4MjU1ZmZkMDcsIDB4NWQ3MTAyMjAsIDB4Y2ExYzcyNmQsIDB4NzU4MjRkZjEsIDB4Yjk3OWMzMTcsIDB4MDU5ZjA4MGQsCisJMHg2ZTljOWQwYSwgMHhjOGUxMTMzOSwgMHhhM2ViODFlYywgMHg2NTEwNWZmOCwgMHgyODhiMjNjYywgMHgzZDE0MWI2ZiwKKwkweDc5NDA2NDg2LCAweDMxMGU0ZTQ1LCAweGNhNDFmODcwLCAweDNhM2YxMWRhLCAweGEwZTkwOWE3LCAweGM1MTI5MmNiLAorCTB4ODg2ZjI4ZmEsIDB4ZjJjMzg5NDgsIDB4YzkxMmFkMzksIDB4YWE5ZTk1NDUsIDB4N2MyODM1ZDUsIDB4YTNiZTE3MzMsCisJMHgyYTkxMmJkZSwgMHg1NmJlOTE2MiwgMHg3NGE0NGNiNiwgMHhjZDkyODZjZSwgMHgyNGUzYTA1ZSwgMHg5YTNiMWRjMSwKKwkweGI4NjdhM2Q2LCAweDEzYjUzOTllLCAweDU1YmM0N2FmLCAweDliNDYzMGVmLCAweDdhNDk2ZjAwLCAweDEwNGU1MjZmLAorCTB4YmVkOWNlM2YsIDB4YmI0MTg5MmEsIDB4ZDNjZGRiZjMsIDB4NWIxN2ZlNTEsIDB4YTFhMzhhY2IsIDB4ZDE2ZGJjZmQsCisJMHgxZTkwNTJkOSwgMHg3YWU2Y2E0OSwgMHhjNGVkNDE2NCwgMHhhY2YwMDYzOCwgMHgyNzkxZmJmOSwgMHhlNzhmYTBhYywKKwkweGU4NTY5ZjQyLCAweDcwYjY5YmZmLCAweGQ0YWExNzlmLCAweDkyNGZlZDM0LCAweDMxZGVlNzgwLCAweGExYjNlMjc5LAorCTB4ZTBmMTQyZmUsIDB4MWY1MGEzMmQsIDB4ZTJhN2JlMDgsIDB4Y2UyM2JlYTksIDB4NTAzYzg3ZGEsIDB4MGZjMDczZDMsCisJMHhkYWY3YTAwZSwgMHhmNTFlZjVmZiwgMHhkNmY4OTVmMywgMHhiZWQwZTVmNSwgMHg0ODg1ZjZhNiwgMHhhNmUxNjdlYywKKwkweGExNWJlNDNmLCAweDQ5ZThhMGZjLCAweDE3M2ZmZWMzLCAweDQ1NjUzZmI2LCAweDllZGQ2YzAyLCAweGVlN2M3YTg1LAorCTB4NGYyOGI0YTYsIDB4ZjkxN2YyMWYsIDB4YmQ1MWYxMDAsIDB4YWFmODIwNWYsIDB4NTE3YzMzZTUsIDB4YzdiYjg0MDYsCisJMHg0YzU2MGNjZiwgMHhmNDgwY2NhZCwgMHg4ZDYyNWU3ZSwgMHhmNmE4MGY2OCwgMHgzMjNlNWE4YywgMHhmM2FkY2I5YiwKKwkweDkwOTNlYjUxLCAweGI1M2ZlNjRlLCAweGNjZjUwOTI1LCAweDVmM2MxMTY3LCAweDZmYWRkNGYxLCAweGVjZjJkY2EwLAorCTB4YWYxMDFhMzQsIDB4MzgzMzFkMWUsIDB4NDE3OTlmNTEsIDB4NTUxZDIyYmYsIDB4OTNjNmZmMDMsIDB4MDRhZTYxZGQsCisJMHgwZWNhMmE3YSwgMHg2ZmNlYjgyNywgMHg1MWZhNDExZCwgMHhhNzdjMTc5ZCwgMHhjYzc0Y2ZmMiwgMHhkMjE4ZjM4NSwKKwkweDc0OGQ5OWRjLCAweDdmOWQ2N2ZmLCAweGNmZjNlMjJlLCAweDE3YTc2NmY1LCAweGY1Y2Q5OWYxLCAweDRiZDc5ZmRiLAorCTB4MDVlZTU4YTUsIDB4ZTQ3YjQxODYsIDB4ODg1ZmViY2YsIDB4ZDhmNGI1NDgsIDB4ZmJkMjI1NmYsIDB4ZDY3Njg0YjIsCisJMHhlYTM2NDI4YiwgMHg3NmNjZjBlZCwgMHgxYmIyMmNjMywgMHg5ZDU5ZDExOCwgMHhjMzU5ZDM5NSwgMHhlMGU5N2QwMSwKKwkweGE4YzdiMjE4LCAweDM3ZTc0NmE0LCAweDA1YWY4NWY0LCAweDlkZDViZDhhLCAweDgwZDdiN2RmLCAweDg3YjM1MjdjLAorCTB4NmQzNTExZGIsIDB4NTA4ZWM4NjcsIDB4ODU1YTkyZWQsIDB4MzllZTE3OWYsIDB4ZGE4NTc2NDMsIDB4ODcxZjZlYWUsCisJMHg1ZTNlZWQ0YiwgMHhjODAxOTU1ZSwgMHg4MGU1Y2QxZCwgMHgwYWJhNDIwMCwgMHhmYmY5MDVmMSwgMHhkM2Q3ZjVmZSwKKwkweDdiZjI2OTk3LCAweGI1ZGY3ZjI5LCAweDc1MGYyZTU2LCAweGI3YTg0OTlkLCAweDM0OWM2NGQ2LCAweDk3NmJmZTIwLAorCTB4NWU0MmZkMmIsIDB4YmNkZTM0MWYsIDB4MmYwNDgxZWMsIDB4YzE2YTFmMmMsIDB4ZmQ4ZDBlZjYsIDB4OWEyZmJiNTAsCisJMHhjMzZiZmJkYSwgMHg5N2JlYTM1NiwgMHg0YzNhMmNlYiwgMHhhNDJkNmI5YiwgMHg4YmQ1YjdmZiwgMHg5YzVjYmExOSwKKwkweGVkMTM5ODVjLCAweDkxNjE4M2I5LCAweDA3NDcyODU5LCAweDA2NjUzYzJlLCAweDNiNmEwMjQ4LCAweGJlNTA4ODhmLAorCTB4MmY3M2NhM2EsIDB4MDMxYzY3ZDIsIDB4NmY1MDkwYWUsIDB4NWZiNDA1ZjgsIDB4NzRmOTVlM2IsIDB4NmUzZmY2MDQsCisJMHgwNjZiZTA0OCwgMHhiZjBiZDc1MywgMHhmMjBjNWU5YiwgMHgyZDk4MTk2NCwgMHgwNjY3MWY2NCwgMHgwZjFkMjA0NiwKKwkweGY0ZTVjYzNjLCAweDFhYjY3YWUzLCAweGI5ZDMxYmY1LCAweGY3MjgzNGQ5LCAweDNjNDJkY2EzLCAweGRiZTYxYjdmLAorCTB4MWRmZmZmMDUsIDB4ZmVjNjBmZjMsIDB4MTQzZmM5OTksIDB4ZDBhNGJkZGIsIDB4NTk2OGRiYTcsIDB4YWViY2MwMmQsCisJMHg4MzU5ZWExZSwgMHhkMDQxYmU0YiwgMHgyMjJkOTM1ZiwgMHhhYzM0YTQwZSwgMHhkZmU3YTFkNywgMHg4Mjc1N2I1NSwKKwkweGMxMTNhNzIyLCAweGM4YmI0MDhlLCAweDQxNmVjODMwLCAweGYzMzY2ZTNhLCAweGNjYjIwOWY1LCAweGY3MWU2MTFhLAorCTB4OGQ5ZTFlNjcsIDB4YTc2ZDdhN2EsIDB4OWQ2MTE5ODksIDB4YzhjMzNhMTMsIDB4ZTQxYzRkN2UsIDB4NmNkNmJkMjIsCisJMHgyZGJkMjI0ZSwgMHgwMmFjNzQzOCwgMHgxNGNlMWZlYSwgMHhjZmFjM2FmZCwgMHhjZmFjM2U0YywgMHhhZTc2MjE0YywKKwkweDlkYjE5NjY4LCAweDZmYjVmMDcwLCAweDk2MGZiZTUxLCAweDgyODkxZTJlLCAweDQ3YmUwZGY1LCAweDlkNDMzNjcwLAorCTB4OGY3M2FlY2EsIDB4MTVhNDFiZmYsIDB4ZmRlYzc2OTcsIDB4MmRmZjQ4NTcsIDB4ZTExM2IzY2EsIDB4NzVjYmJhN2EsCisJMHg1YmE4MDNjNiwgMHgzOTMzNmQ2YiwgMHhjMTYwZGViOSwgMHhlZjc4MzhlYiwgMHhiMTM2OTFiNywgMHg5ZDFkN2U2NywKKwkweDRkZmI5ZWU3LCAweDI3MjZhNjJlLCAweDA3MDk5ZmVhLCAweGExMWZkMjI1LCAweGMzYjBlOWYzLCAweDNkNTI4N2M0LAorCTB4MmMzYjNiYjIsIDB4YjAxMDRmYTIsIDB4NzBmNzkxZmUsIDB4MTY0YzEzN2UsIDB4YmFmNjg0YmYsIDB4YjA2NWZmNDksCisJMHhjNDhlNjE3ZSwgMHg5MzU3NzNlOCwgMHg4M2RmNjE0YSwgMHg5MzhiMTA5MSwgMHhkMTc0N2Q0NywgMHgzOGViNzY0MiwKKwkweDNhNTUwZjg1LCAweGRiOWIyYjdiLCAweDcyMjk2ZjhmLCAweDczMzM4NTU1LCAweGFmNTgyY2M4LCAweGQ2NmNmMGE4LAorCTB4MTAyMmZhYWIsIDB4Zjg3YjMyY2UsIDB4YWY1MjkxNzYsIDB4OTMyODkyZWIsIDB4ZjQ2ZDVlMWQsIDB4ZWJiMmU4MzEsCisJMHgzM2QyNTBlMCwgMHgzZmQ5YzlmZCwgMHhmNjAxZGRhMCwgMHhmOTU0ZjJjNCwgMHg1MzI3ODQ1ZCwgMHgwYWNkZWVmNCwKKwkweDJkZmQ1NGZjLCAweGFjZGZmZDI5LCAweDhiNjZmMWMwLCAweDUzNzZlMWM4LCAweDdhMTRkYzA4LCAweDFlOTdhNTBhLAorCTB4ZGI0MTg4N2EsIDB4ZWNjZjFiYTMsIDB4NTFhM2Y2YmUsIDB4NmJkZjg0YzksIDB4ZmQ3OGU2MWUsIDB4ZWRmYWYwOTAsCisJMHhjZDgwMmI1YiwgMHg0ZGJmYTBkOCwgMHgwY2ZlZmMyMSwgMHhiOThiZjU3OCwgMHhlZGFmMDIzZiwgMHg5YmY1NzhhMSwKKwkweDM3NWUyMTg3LCAweGEwNjc2NDg5LCAweGEzNzY4ODFkLCAweGI1YzBlNTA3LCAweDYwZjZlNzk0LCAweDUxMzkyMzA2LAorCTB4ZDczOTg1MjksIDB4ODA3N2UzMjQsIDB4ODdjOTE2NDMsIDB4NTQxZjI4YTMsIDB4MTVjNDMwYjksIDB4ZTlmNTA2YjgsCisJMHg3MWU1NzA2OSwgMHg4ZGIxMDE3ZSwgMHgxMGE0ZTc5NywgMHhmNmIwMjQ1ZCwgMHhiYzA3MmM3OCwgMHgyNzdkYTFlNywKKwkweDdlNjY4Njk5LCAweGU1Yjc3MjBjLCAweGRmZGVkZjAxLCAweDgyY2QzZjQwLCAweDk4M2NlYjZmLCAweDhiNjZmNzhmLAorCTB4MGViN2VkMTMsIDB4YzNkNWU4OWYsIDB4NTlhMjVhM2MsIDB4YmYxODdlZDYsIDB4NGU1NWZlNjUsIDB4NDUzMzk2MmYsCisJMHhmODM3NGM2ZSwgMHhlZjgzN2VkMCwgMHhiZGY4OGQ0OSwgMHhlOTdmN2Y5YywgMHg0NDFmNjdlZiwgMHg4ZDMzYWNmYiwKKwkweGIyNWFiYWQxLCAweDY3ZGEzYTU5LCAweGY0MTk2NTJkLCAweGRjYWFiN2ZkLCAweGI3ODIzMDc5LCAweGRkZjRlMzJmLAorCTB4NDNlNmRmMzIsIDB4YTNlOGY0M2QsIDB4MjdhOGUxYmUsIDB4ZjFjYmI2NWEsIDB4NTEwZDQ4MzYsIDB4OTgxY2Y4OWUsCisJMHhkMzg5MjBmZiwgMHg5NDMyNGI3ZCwgMHg3MDU5YmE0MywgMHg3ZWM1Y2Y5NywgMHgwZGYzZTFhZSwgMHhmZjNkODc5NCwKKwkweDRlNjU3NDE0LCAweGU1MDZkMTA1LCAweDc2MjMxYmE3LCAweGU5NTU1Y2EwLCAweDJlMzBmMDc0LCAweGNmNzg4N2RmLAorCTB4NzkzODQ1NmMsIDB4N2E4Y2IwMjcsIDB4ODU0M2ZmZTgsIDB4MGJmODU0ZGUsIDB4MDA4ZDM2YzAsIDB4M2MxMDk4ZjcsCisJMHhhMzE3NzRhOCwgMHhjYTU4NWZjMCwgMHg0MTNiY2ZlOSwgMHhmMzFkNGY1OSwgMHgwMDkxYmZhMSwgMHgzODA3MDk1MywKKwkweGYwYzExYTU3LCAweGQ1OTY3NDgzLCAweDZmZjM4ZDkzLCAweDkxZjgwYzVlLCAweDBmMWMxZDcwLCAweGRkNTY0NWE3LAorCTB4MTU1ZjA3ZDYsIDB4MGRmMTI4ZTYsIDB4YTZmOTAyMTgsIDB4YTliZTcxOTIsIDB4N2E0MmJhNDQsIDB4MGFiYTA0NmMsCisJMHg0ODE2NDdhMiwgMHhhZTE3M2U4OCwgMHg4M2NhMTVkMCwgMHgxY2I4ZjcwOCwgMHhjMjU3ZTc1OCwgMHhmMGIxZjIxZiwKKwkweGE2OTRmZmFkLCAweGE0Y2UzNWY3LCAweDFlMmYyZTFjLCAweDczNGE3YjMzLCAweGQwNGRlZjQ4LCAweDY1NmY5ZGQ4LAorCTB4ZmE4ODlhN2YsIDB4YWZiZGY0ZTUsIDB4MTQ5YTYwMjUsIDB4ZWI4YzllZTUsIDB4ZDdmZTVjZDgsIDB4MWZmZjE0NTIsCisJMHhiOGY0MDdjNiwgMHhmZmNiMGY4ZSwgMHgyZGRhMjI0ZiwgMHgyMzVmNGI5NSwgMHg3OWQyYmZmYSwgMHgzNzk4OTk5NiwKKwkweDVkMWVlMDFjLCAweDAwZmQzODJjLCAweDQ2MmQ3OWJmLCAweDE2ZjgyNGU3LCAweDBjNzU1YzU3LCAweDZhZDY1OWUxLAorCTB4NTY5MTE4NzQsIDB4MWM4ZDYyZDgsIDB4NDA4ZjJiM2IsIDB4ZGExZDhhMzcsIDB4MzliYTI0NmEsIDB4ZjQ4OTRiZjcsCisJMHg4YjkyYjljMSwgMHgwZjgwMGVhZiwgMHg0ZTA4NTZlNywgMHgzMmQ2NTdhYywgMHgzNzkwMjU2YywgMHhhODE2MjkyYiwKKwkweGEwNTc5OTVlLCAweDFjYTk2NTdhLCAweDA1MWEyNzVmLCAweGFmNDAzN2EyLCAweGRlMjgzYjI1LCAweDhlZjVhNzMxLAorCTB4MTNkZjg4YTksIDB4YTQwZjVmYzUsIDB4MTg3YWMxZjgsIDB4MmU2M2U1NDcsIDB4OTU5ZTQ4ZGUsIDB4NTZhYmY1MjksCisJMHhiYjQ3OTExYiwgMHhhY2I1OTdiZiwgMHgzZmZjODhiYSwgMHhkZTUyMWJkMywgMHhlYzUzZTkzYSwgMHg1YjUxYWNiNywKKwkweDgyMzVjNmVlLCAweDRlNTc3NzFkLCAweDA3Y2EwYzQ0LCAweGVmY2U2NGU2LCAweDQwZjI0ODExLCAweDkzZmEwZmYyLAorCTB4NDQ3MTQwYmIsIDB4YzIwZjMwY2YsIDB4NjFiYzg5YzMsIDB4OTllYmE0N2EsIDB4ZGJhMDU3MDgsIDB4ZGQ3Y2E1ZTgsCisJMHhiZTBhYTczMywgMHg5OWNlYjA0OSwgMHgxZjY3Y2UxNiwgMHhmYmJlMDk5NiwgMHgwOWZmM2UwNSwgMHg1MDY1ZWY0MCwKKwkweDVkNzQwYjFlLCAweDM4ZTRjMzE2LCAweGU2MjZkZDQ4LCAweDJlNzljNzBmLCAweGNhMDlmNjFkLCAweGQ0MzhkM2RiLAorCTB4OGZlZmFhMjgsIDB4Zjc1Y2ExYjQsIDB4Yjc4OTExZTgsIDB4ZTVhNTJmMzIsIDB4ZWRlOTQ3Y2MsIDB4OThmMzRmY2MsCisJMHg3NDkzM2FjMSwgMHhmYzkzYWY5MCwgMHhmMzhlMzEyYiwgMHgwMzY3YjMyYiwgMHg4YjVmZDdkMiwgMHhlMDE2OWM0ZSwKKwkweDQyMzlkZGZiLCAweDQzOTQyOGRlLCAweGRkNjgwMzhkLCAweDcwMWY1Yjk3LCAweDA2NzY4MGE1LCAweDVmYWM0MWFhLAorCTB4MTQ3ZWUzOTYsIDB4NGNjYWIzZmIsIDB4NzRhYjcxOGYsIDB4OTk1YThlOTUsIDB4MTdkNjE1MzcsIDB4OWJlMmRlYmIsCisJMHg2YjhiZWIwNCwgMHhmNWMyMWNmNSwgMHgzODM3NGZhNiwgMHgxMzgzZWYxMCwgMHg3NDEzM2FmOCwgMHg1NDNmOWZkYywKKwkweDgxYTM2MDZlLCAweDE4M2YzNjBlLCAweGRiM2E0M2U2LCAweGRhMjAzNWJjLCAweDAzZTZmZWExLCAweDk3Y2MwMTgwLAorCTB4ZjBiYzE0YWYsIDB4NGU2MWVhZGQsIDB4NzU1OWQzOGMsIDB4ZmVlZDExMWUsIDB4MTg4ZjU2YTIsIDB4ZTFhN2UyMDgsCisJMHgzOTQ0NDFiMiwgMHgyM2QzYmU5MSwgMHg1YWI0OWVhMiwgMHgzNTNkNTNkNywgMHg0ZmQ0YWM1ZiwgMHg1OTA2NzkzNywKKwkweDRlOWU0ZWM5LCAweGExNWMzM2Y0LCAweGQ0OWZiNTFmLCAweDA0NWY4MzU2LCAweDRhYzkxN2I4LCAweDU3Yjc5OTdkLAorCTB4OWU4YTYxZmIsIDB4Mzk2MWRiNTYsIDB4YWI3YTY3ZDIsIDB4NDUzZjRmYTMsIDB4M2Y1MDViNGQsIDB4MDhmODhmODMsCisJMHg3YmQyMDVjNiwgMHhmZDcxMWZjYSwgMHgxYmYwODRkYSwgMHgzNmFiZjM3OCwgMHgyMTAzMzc0YywgMHg5ZDFjNzFmOCwKKwkweDc5ZTM0Y2M3LCAweDE1ZDMzY2Y4LCAweGJmYmY4N2RhLCAweDYzZTM4ZjdmLCAweGI5YmJmMDFlLCAweGU0MjJmZWY1LAorCTB4MWYwMGNkYTMsIDB4OWRlNmYzYzQsIDB4Y2ZkNGNjYjMsIDB4Nzk5YTU5ZjQsIDB4ZjI4NmE5MzEsIDB4NGIwNzA4MjUsCisJMHhhMjNjNzVlZiwgMHhkNTNkMmZjYywgMHhiZDY5NWEyMywgMHhlNzY4NDNjZSwgMHhlMjhjY2JhNSwgMHg3NjNmNmEwMSwKKwkweGY0MDU3NDFkLCAweDg1N2E3NzZhLCAweDkwY2JjYzdhLCAweDQ3Yjg5NDVhLCAweDRlYjM4ZTNhLCAweDVkMzFmZjQwLAorCTB4NmI0OTU3YzEsIDB4ZjYzMzYxZmQsIDB4NWYxNDY2ZTMsIDB4ZmU4NWNmNGMsIDB4ODQyNmZlYTEsIDB4ZmMzN2ExODMsCisJMHg1ZTk5ZTc0MiwgMHg0MjczZTdjYywgMHhmMThlZGZhOSwgMHhlNzZjNzQ5NCwgMHg3NDQzMTE1OCwgMHhkNWQ3ZTdjNSwKKwkweDFjNjIxNGVhLCAweGEwOGZiMTk3LCAweDdlOTBjOWZkLCAweDBjYjhjMjllLCAweDdlNGVjZmE0LCAweGI0MmU0YTZkLAorCTB4OTdkMWZlN2YsIDB4NTJkMGI0NzYsIDB4MGZiMzNlMGUsIDB4ZjVhYjU2ZTUsIDB4OWM3MDliZTYsIDB4ZmY5ZjIyODMsCisJMHg1ZGUyNzI0ZCwgMHgyMDZkZGY5OCwgMHg1M2JlOWEzZCwgMHg3OTQ0ZGI0ZSwgMHhlYmZkMTM5MywgMHg1NWRmNTZhZSwKKwkweDJjYmQ0MjJmLCAweGViNjRjNjE4LCAweDBhMTM4ZjNkLCAweDNhMTVkYTljLCAweGNiNzkzOTM4LCAweDUzZWY1YzIwLAorCTB4NTgyYzc3NDUsIDB4NWY4N2VkMDIsIDB4M2I4ZDM4ZjcsIDB4OTRmY2NhN2MsIDB4OWIwZmM4MTYsIDB4MzBhYmNiZjgsCisJMHhjNzhlNWY3ZiwgMHhmZWU0MDIzYywgMHhkZTVmZDJiMCwgMHg2YWU1MGZiNiwgMHg4MjFjZmNlOSwgMHg0NTc2YzU5NywKKwkweGRhMzlhOWYyLCAweGJmMDJmNWUzLCAweDUyZGM0NzM3LCAweGQyYjhmYzhlLCAweDI0NDg3MDY2LCAweGZhMTllYjc3LAorCTB4NzcxMWNkNTksIDB4ZTViZmIxZGIsIDB4NGMyNmY5ZDEsIDB4MzZiZmQ2MGQsIDB4NmUzYzljYTEsIDB4MWUyMTMxYzksCisJMHgxODEzMmQ5YSwgMHgwYWFjZWI5NiwgMHg0ZjFiYmU5ZSwgMHg4ODUyNDBmYSwgMHg3Mzg0Nzc3MiwgMHhlNTc0NGNiYSwKKwkweDBjMjcyODY0LCAweGJjYWQwNjA5LCAweDJmNzk3MWQ2LCAweGI0M2UxZGQ5LCAweGY1YWNiYTlmLCAweDYwY2M4MTQ4LAorCTB4N2NhMDU0MDksIDB4Njk3OTU0OTMsIDB4M2M3MTdhNzEsIDB4YTNiNGUyYzksIDB4OTE0MmI0YmYsIDB4YWY4NjJjMzcsCisJMHhmNzM5NjBkMywgMHg1ZWFmMzg5ZiwgMHg5NjJlNjNmZCwgMHg4NjdmNGI1MCwgMHg0MTI4Y2NiMCwgMHg5YmRhM2ZmOSwKKwkweDU3M2UxMGM2LCAweGJiYzU4MzUzLCAweDY4NDRmNTE4LCAweDcwMjA1ZDdmLCAweDRmYTM4ZTUwLCAweDdlMzM3NjQ3LAorCTB4NWVkZGVlNDgsIDB4N2EzNDFiYjIsIDB4N2E1ZTViYTQsIDB4ZjIyMWY1YTIsIDB4N2E4MTFlNTIsIDB4NzkyMDU4YTIsCisJMHgwY2ViNjFlOSwgMHgwYzEyZmViOCwgMHgzYzVjMDBiMiwgMHg1NDVlYjhkYiwgMHhjZTI2N2JmOSwgMHg0OWU1ZjAwNSwKKwkweDVlNWM5MTY1LCAweDI2NzNlNGU5LCAweGQxZWZjNjBlLCAweDQ1MmE1Y2FlLCAweDVlMDIxZTIyLCAweGMzZTllMGM5LAorCTB4OTM3OGY3OWYsIDB4OWQxZTUwN2YsIDB4YTk4N2ZhNDEsIDB4MjFmZTkwMDcsIDB4MGZlMTQ0ZmQsIDB4NmYwNzhhOGYsCisJMHg1MGEzZjVkOSwgMHhkOTEyY2I1ZiwgMHg4NWNiOTUwMywgMHhlMmNmYjQzNiwgMHg2OTQ3ZDFiYywgMHgyZWRjYzViZSwKKwkweGE2YmY5NzY4LCAweDg5MmExY2Y1LCAweDc5Nzk0NDRiLCAweGM3OTlkOTYyLCAweGJlYmQ0MWVmLCAweGZmZjQ5YzI5LAorCTB4NTY2N2E1YTQsIDB4YTY2ZTNjNjAsIDB4MjExYTcwNTcsIDB4N2QxYTU5ZWYsIDB4NmY5ODdiZjcsIDB4OTA1ZDNhMzQsCisJMHg4MWYwYWIzZiwgMHg5MTQ1OTdmYiwgMHhiODA4NGY2OCwgMHg3NTllOGNjZSwgMHg4MzMyMTY1NiwgMHhmMTM5ZTI5YiwKKwkweDNiNDA5NjMzLCAweDM0ZTBhMzRmLCAweGExZTA3YTNiLCAweGVmNTI3YWM3LCAweDM3YmMwNWY1LCAweGZhZDBmZTQ2LAorCTB4YThkN2JjM2YsIDB4M2U3NzU5YzgsIDB4YzZhMmQ5Y2EsIDB4NzAwYTg3ZTQsIDB4N2NmNWViNWQsIDB4ZDdkMThkOWUsCisJMHgzOTI3ZGU1MywgMHgxY2I5NzYzOSwgMHgzZmQ4YTk5ZSwgMHg1N2IzYTU5ZSwgMHhjMGY3YzNjNiwgMHhjZWY5NDE2YSwKKwkweGM4YTk1NmYxLCAweDg4ZTM0MGU1LCAweDBkM2YxODYzLCAweDNlNDgxNzJjLCAweGEyNTJiYzc5LCAweDVjY2RkYTFmLAorCTB4ZWY3ODRkOWUsIDB4NWQ5MDBhMjgsIDB4YjQzZGU1ZDgsIDB4NzIyYjVhOTIsIDB4MzY3NGEzZGUsIDB4OTQ1ODhjMTcsCisJMHhlM2RmYTc2ZiwgMHhmZTQ3OWZmZSwgMHg5YmI2MjU2MywgMHg4M2I1YTJkMywgMHgwY2ZkMDIyNiwgMHg2N2JjYjg0MCwKKwkweGYxZTlmZDI2LCAweGVmYmFkMTk2LCAweGVhNjk0NWYwLCAweGQzOGVhZDU1LCAweDhiYWIzZGU0LCAweGU3YjBjN2FlLAorCTB4NTIyNzdiYWMsIDB4Mzk5MmFmM2MsIDB4MmFkZTkxMjIsIDB4YzEzNzZlNjUsIDB4ZTYxYjI1OWYsIDB4NGY5ZDU3MzMsCisJMHgyYWM3YjczMSwgMHhhMjdlYzE4YiwgMHhiMDdiNWFlZiwgMHgzMzg5ZmVjNywgMHg3OGE4ZGYyMCwgMHgzYTEzZjE1NCwKKwkweDE5NzY1ZWVmLCAweGFjZDA3NmUzLCAweGRkN2FkYTc1LCAweDE2MzAxMDc2LCAweGU1Y2FiYThhLCAweDMyYmY3NmRhLAorCTB4Yjk0NTlmYmIsIDB4ZTAzOGRlZTgsIDB4YWVhYmYyMWIsIDB4ODA4MjFlNTAsIDB4MjY2ZTdmMjEsIDB4YTYxZjcxZTMsCisJMHhjZWQ1NDNlOCwgMHg1MTdhNTkyZiwgMHg2NjY4NzI4ZiwgMHhjMjNkNDVlMywgMHgxZmQyZTY3MywgMHgzODVmYTdlNiwKKwkweGExYmVmM2I1LCAweDNlYmI0YTIwLCAweGJmOTM0ZTM5LCAweDUzNDQzNWQxLCAweDMwZjc2NmZmLCAweGE3NWJmN2NkLAorCTB4NWVmOWFiNWYsIDB4YzlhOTE5ZWUsIDB4NWUzZDVlZGYsIDB4ZmQ0NjdmNTMsIDB4N2ExY2FkMjQsIDB4YTNkNjlhMzcsCisJMHg3OWJmYTdlMiwgMHhhM2U4YTViZiwgMHgxMmVjNDI3NywgMHhlMjNhOWQzNSwgMHhiZjkxMTMzZiwgMHhlNDY3MmMzZiwKKwkweDMzNzg3Y2JmLCAweDFkMzFmOGQzLCAweGU3ODIyNDIzLCAweGY5M2Q1YzgwLCAweGM4ZTVmNzMxLCAweGJmMjA4ZmVmLAorCTB4YTFmNDRmYzksIDB4NzM0M2YzYzIsIDB4YTIyOGM5YTEsIDB4N2VlNDYyN2YsIDB4NzI1ZmE4NzksIDB4NWU1MDM5OTAsCisJMHhmZGIxZDRjZSwgMHhmZjhmNTQ0MiwgMHg5Y2YzMGU2NywgMHhlM2JhZmVjNywgMHhmMTBmNGIwZCwgMHgxZjg4NDM3OCwKKwkweGZmNzhhNTczLCAweGJmY2MwNjcwLCAweDRkNzk3OTBmLCAweDE2YzNmNzJlLCAweGZmYWYzNmVlLCAweGI1OGUwODM4LAorCTB4ZmM5YWQxNmQsIDB4ZWJmMWZkYTIsIDB4M2JkNjBlM2YsIDB4YWUxZDA0NGIsIDB4OTNlMTQ2YjMsIDB4N2RhMDE2NWEsCisJMHhhMGU4YmI1MiwgMHg0MGM0ZWFmZSwgMHg1ODNiZTYyYywgMHhmNGI0NmM2NywgMHgwYThiODM4ZiwgMHgyNThmODAwZiwKKwkweGE5ZGUyODM3LCAweDE5M2ZjM2ZhLCAweDllMGE0NTNlLCAweDFhNzBiNGNiLCAweDkwZTNjYjkzLCAweDI5MTA4ZjVmLAorCTB4YzcyMzljZGQsIDB4ZjEwM2ZlZTcsIDB4ZjQ5ZWI0MWMsIDB4ZGM3ZmJjZGMsIDB4Yzg0NzIyN2EsIDB4OWY5ZjA4NTksCisJMHhlM2RmYWYxYiwgMHgxNzk0MGYxZSwgMHg3ZjBiOTA4ZSwgMHhmZTRjYjgyNiwgMHg0N2E1YzI0NywgMHhkODJmNDdjZiwKKwkweDcyYTNmYTBkLCAweGZkZmI4MTlkLCAweGJmNWMzM2RlLCAweGZlZmQ3MjM3LCAweGY2OGZiNDdjLCAweDQ0ZjM5Yjg3LAorCTB4ZWQwNzBlZTcsIDB4ZTkzZWQyOTcsIDB4NjE4ZDdiYTEsIDB4NTlkZjE4MTksIDB4Nzk3ZDIzYTEsIDB4ODE5MDk5N2EsCisJMHgyMTI2YzJmZSwgMHgwZjM2ZmM4YywgMHhjODE2NDhhYiwgMHhjODc4YjliZSwgMHhhYTMxZmQ0OCwgMHgzYWZkZWQwNywKKwkweDA1NTFmMzkwLCAweGU0MDk2YjNlLCAweDcxZTVjY2RmLCAweDcxNmUzNWIxLCAweGY1MDM4YTRhLCAweDFlYWMxZmY2LAorCTB4ZTI3YThiOGEsIDB4ZmQ5ZTFlMTEsIDB4Njk2YmUxMzAsIDB4MmJlZTQ1ZGYsIDB4NmJkMDEyN2UsIDB4ODUxMmQxZTUsCisJMHhkNWNjNWY4ZiwgMHgyZTFmM2FkMSwgMHg5NDlkYjkxNCwgMHgxZjcwYmEyYSwgMHhhOWQ4MTU2MywgMHg5NjA2NTc2OCwKKwkweDkxNWYyOGViLCAweDZkNTllOWM3LCAweDlkMGExZmY3LCAweDE0ZGQ5NGM3LCAweGRhODhmMzg2LCAweDdkN2RiYTI0LAorCTB4MmU1MWZiOGMsIDB4NzkzZDBmOGYsIDB4YjNlZDE4NTcsIDB4Njg3NDJhMDEsIDB4ZDZiZGRiZWYsIDB4YWY1ODJlNjksCisJMHg4ZDk2ZDBiZCwgMHhkY2RhZGZiNiwgMHg0ZDZmZWE2OCwgMHhjZjE1OTc0NiwgMHg3NDhjZmNhMSwgMHhmZThlY2E3OCwKKwkweDhjZmFjMGEwLCAweGU2NTVjZDMzLCAweDU4MGZlZWFiLCAweGU5MzZmZTk0LCAweDlkYTJiZjQxLCAweDFlMjg5ODIyLAorCTB4ZjkxYWYxNjEsIDB4YjE2NzE1ZjksIDB4MWNjYWRlMjYsIDB4YTc2ZTBiMDIsIDB4ZjQyOGYzZDYsIDB4MWI0MmM3NmEsCisJMHhlZmY2OTdlMSwgMHg1ZGIxNzhkNSwgMHgxYmE0MTdhMSwgMHhjZjRhYmJjNCwgMHg4OTgzZmRhMSwgMHhlOWNjOGRlYywKKwkweDE1ZDlmMzg5LCAweGU1MWE4ZTUyLCAweDhmNzQ4ZGQ5LCAweDFmOTBlYWZkLCAweDA3ZmU1Y2JjLCAweGUzYzRiZTZlLAorCTB4ZGVkN2RlMmMsIDB4ZTE4ODc5YzMsIDB4MGM5YzUyNWYsIDB4NWZjZTRhZWMsIDB4YmVlMjQzNGIsIDB4MDI0ZjkxM2YsCisJMHg0MGNmMGU2NiwgMHhkZTFlNTY4NCwgMHhkYWM5ZDBhYiwgMHg0OGRlODI3ZiwgMHgzZWJjMDJiYSwgMHg4ZmU1Y2I5YywKKwkweDM2ZmRjMGFiLCAweGIyYzczYmNhLCAweGZiYTIzMGQ0LCAweDk2MjcwYjFmLCAweDUxMzg0NTYwLCAweDM4NzJiYTVlLAorCTB4MWYzZGYzNzksIDB4Y2M3NDllMTAsIDB4N2Y3MWI0NmYsIDB4NzJlMWY5MGIsIDB4MzFjMmE0N2MsIDB4YmU5ZTY0NDksCisJMHgzYzg4ZjJmNCwgMHhjYTFiZmJlNSwgMHg2YWI3YWU3ZSwgMHg2MWQ5MGZjOCwgMHgwMmM1NzcyOCwgMHhjYzJjZDJjNiwKKwkweGZmYjZiYzYxLCAweDhmOWMwZTdhLCAweDM5NmFlODg1LCAweDk2YWVlNWQyLCAweGNmZTQzMDk0LCAweGNhYmM2NTY0LAorCTB4MGNhN2QyOWIsIDB4MjA1ZmEwNzcsIDB4MDQwZWQwMTgsIDB4ZTNjMGMzYmYsIDB4NTc0ZWRjM2YsIDB4Yjk0ZjdhZTUsCisJMHg3MmM0N2VkNiwgMHgxZjhmNjY0ZiwgMHhlYWY3ZGFhNiwgMHg4Mjk3M2M3NywgMHg1OWYzYWFlMywgMHhmZDYxZDhhNSwKKwkweDEyNTU3N2NkLCAweGRjYTI3MjRiLCAweDgwOGY3NjVhLCAweDVhYjFkY2YwLCAweDcxN2RmOGQ0LCAweDAzMjU2MTVlLAorCTB4N2ZjZTNlM2YsIDB4OGVmZDEzYWYsIDB4Y2RhZmIwMzgsIDB4ZjU3NWNmMjgsIDB4NWUwODMzODIsIDB4MGE4MTdiODEsCisJMHhmODg3MTMzOCwgMHhlMjRmZTAyYiwgMHg4OTY3YmQzYSwgMHg1N2M3NDI1ZSwgMHg4NWFiYjFkNywgMHg1ZGU3MWI4ZiwKKwkweDlmOTBjODJjLCAweGEwMmY1MTU0LCAweDk5NTZiN2RmLCAweGEzMDU1YzdmLCAweDNlOTk2OWVmLCAweDllMjFlMzAxLAorCTB4ZTM4YTU2MTYsIDB4MDMzMzU2NTUsIDB4MzMyYWY1YzYsIDB4ZjI4NjUzOTksIDB4NzQ0M2M2Y2EsIDB4MDJiOWVkZGUsCisJMHgyMDZmMjUzOSwgMHg0ZjNhNGZjOSwgMHhhNGYwMmFlMywgMHg0ZDFkMDFlNywgMHg3NjQzMjg0ZCwgMHg4NjRiYjg2NywKKwkweDE2N2Y4OWYxLCAweDRjYjVhNzFkLCAweDU5ZWZhMmYwLCAweDg0M2NlMmQ0LCAweDExZDAwMWZlLCAweDJkM2M3ZGM1LAorCTB4ZTc1ZjFhMDEsIDB4NWQ3MjcxZTUsIDB4ODBlOWMxOGIsIDB4NjU4ZDQ4NzUsIDB4NTUyMWZmYjQsIDB4ZDQzMjljMWIsCisJMHhkZjI5YjYzYiwgMHgyZDk1ZjE4ZiwgMHgwZGRmZGM4ZCwgMHhkNjc0OTNmNSwgMHhkMWMzZDdmYSwgMHg5OTEwYWI1ZiwKKwkweDc5MGEwMTQ0LCAweDU2NTlmYTJhLCAweDMwNTYyZTg1LCAweGY3ZWUzYjc3LCAweDQxZmUxOTMzLCAweGRjYTU0OGJiLAorCTB4MmE2ZjNkNWEsIDB4ZDBlNTIyNjYsIDB4MTNkYzgzNzgsIDB4NmI5ZTQwOWYsIDB4ZDNiMjQwZGMsIDB4Njc4ZGFhOTQsCisJMHhjOTJiMmQ0OCwgMHg3ZDYyMzNhZiwgMHg4OTBmYWNhOCwgMHhhNWQ1NDg3NywgMHhhYzk3MTcxNCwgMHhmMzViZjJkYSwKKwkweDhlMDg2MjIyLCAweDllMWUzYzU5LCAweDhkODhlZjczLCAweDcyN2NjMmI3LCAweDFmZTM3OTdmLCAweDQxODczZDMwLAorCTB4ZmU1YjgwMzMsIDB4NGMwNzNiYjIsIDB4YWMxNmZmODcsIDB4YTYyMzc4ZDgsIDB4ZThjZWJjNGYsIDB4ZTA4ZmMxOWMsCisJMHhmYThjNjY1NywgMHhlOGZhZmNmMSwgMHhiMmFiZjI5NSwgMHhiOWQwMGYyNiwgMHhkMjdkYWZjMiwgMHgwOTRmMWFiZiwKKwkweGZlOTU0ZmU1LCAweDRkNGVmOTQzLCAweDdmODY1ZWQ3LCAweDEyMDUyNmQ3LCAweGRmNGYwZjkxLCAweGRiMDMzMjNiLAorCTB4NzNkZTM2NTcsIDB4NWY4OGM3YzgsIDB4NzdkMDA3MDUsIDB4MTE3MTc3YTUsIDB4NTY2MGJhMjMsIDB4NWU1YmQwOTcsCisJMHg0OTBiMzc4NCwgMHgxZjM3YmZlYywgMHgzYjdjODYzZiwgMHgxM2U3ZWZmZSwgMHg5NWRmMDg3ZiwgMHg2M2NlOGMwOSwKKwkweGY2NDlmZDgxLCAweGRmYWE5YTljLCAweDNlYjlmMjIzLCAweDI0Njc5MGJkLCAweGMxNDY0ZWJjLCAweDA1M2JhYzBhLAorCTB4YzdiZWUwZGEsIDB4MmI0ZTYwNzgsIDB4ZjAyZTdmYTQsIDB4NGRlMzhiM2MsIDB4ZWY5ZTNjODEsIDB4NmI0MGZkN2IsCisJMHg0YjM3YWUwYywgMHhhNzhlZjVjNywgMHg3NmU2OGVkYiwgMHhhOGZmYjc0OCwgMHgwNjU5MGZkOCwgMHhkY2VkMDUzNiwKKwkweDc3MTEyNmMwLCAweGMwZTA1OTZlLCAweGUyZDYzYmU3LCAweGM5Yjk2YmJlLCAweGNhZWIwNjk5LCAweGY0NDhkZmJhLAorCTB4ZjY4YTA0ODQsIDB4YTc2ODk2NTEsIDB4YjZhZWU1YjgsIDB4OWY2OWNiOGYsIDB4ZDJjMGQxYjEsIDB4MGVlMDZlMjgsCisJMHgwMDY0NzNjMywgMHg0Y2FhYjBjZiwgMHhhY2MzNTdiMiwgMHg4NTdhYWY2OCwgMHgxZTg4YWFhNCwgMHgyMmY1MDg3YiwKKwkweGVmMmNiNDBhLCAweDMwYWM1M2FkLCAweGIwNDJhZWZlLCAweGVjN2IzMzQ3LCAweDU5ZmVkNTFjLCAweGViNGM5ZjljLAorCTB4NjgyMGVkNTcsIDB4OGZkZGIwYzcsIDB4MGI0YWE3ZTUsIDB4MTliYjIyNGIsIDB4ZjdmYjgzZTYsIDB4OTAyNjRjYjYsCisJMHhmZjUyMTNlZCwgMHhkOTIzMzJmNCwgMHg3YmFmNzZhZiwgMHg1YmI0NzBjYSwgMHhhMGU2YTc5NywgMHg5YWUzMGFkZCwKKwkweGZkN2Y2ZTI0LCAweGJiNjdjYTNiLCAweDI4NWVmOTRlLCAweDQ5YjllMGU2LCAweDA1ODAxZjc1LCAweDg3MThkMTc0LAorCTB4ZmVhYWVkNTMsIDB4ZTc2M2E1ZTcsIDB4OTUwNWI5NTQsIDB4OWYyZjliN2YsIDB4NTlmZjdlYzEsIDB4NTU2M2RkNzIsCisJMHg2MzRkNGRlOCwgMHhlOWUwNzlmOCwgMHhjZjhkYmQwYSwgMHg5ZTlhNTMzNywgMHg3M2RiYjNmZiwgMHhmZTkzYWVhNywKKwkweDM5ZmVlYjc5LCAweDlmZmFlMWQ3LCAweGZmZDg4ZWIxLCAweDNjZDhmODIxLCAweDNhYzY3ZmY5LCAweDRmZjI5OTZlLAorCTB4NWYzNzg3NWMsIDB4NDNjZmM4NmUsIDB4ZTc0NmQ2NzksIDB4N2UyZWVjODgsIDB4ZGVlNDFjMmUsIDB4Y2I5Y2JjM2QsCisJMHgwOTkzOGIzOSwgMHg3NGZmYzc2NCwgMHhmZDg0ZDc3OSwgMHgxYzFmNDE5ZCwgMHg3Nzc4YTFjZiwgMHg2NzE4M2EwOCwKKwkweDg4YTFhNTg4LCAweDhjYTVjZGVjLCAweDJjODY4MWY2LCAweDQzNDBmYmU1LCAweDIyNGQzYTk2LCAweDZlMTYwM2RhLAorCTB4ZWM1MjBlMjcsIDB4Yjk0YjQxY2UsIDB4OWNhNzE5ZGQsIDB4MTE4Yjg4MmIsIDB4M2ZkNDMyN2QsIDB4Y2E1YmNiZjYsCisJMHhiZWUwYzZlNywgMHhkNWVjOTE5MCwgMHhmNWRkMzZlNiwgMHg1ZTUzZDQxNiwgMHg4NjhmY2U4OSwgMHhkMmQyODlkYSwKKwkweDVmOWM0YTk1LCAweGY2YWE5ZjZiLCAweDc5ZTMxYTY4LCAweGI0YjNiMmZkLCAweGEzZGFhNzRmLCAweGI0ZjI5NDQzLAorCTB4NjAzZjdjYTUsIDB4MWVkNjhiNDgsIDB4ZGFkNmFiOGQsIDB4MTA4MmZhOGYsIDB4YmFhOTczM2IsIDB4ZWI0OWQwN2YsCisJMHhlOWQ3MmRkMywgMHhhODdmZmNmMSwgMHhiMDdiODlkZCwgMHhhYjA3MTRhOCwgMHhmZWI0MDY3YSwgMHhmNjMwZDc0ZCwKKwkweGY5Zjc3ZTc0LCAweDFmZGMxYzhjLCAweGQwNWFiOTlhLCAweGNmNTUzOWU4LCAweDdlMjgyNDAyLCAweDQzZTNlMmE0LAorCTB4M2Y4ODczZDQsIDB4NWZiNTM0ZjcsIDB4YWYzZTZmZDIsIDB4MmU0YzcwNDgsIDB4NTM5Y2Q3NGYsIDB4MWU3ZWVjNjIsCisJMHgzYTczNzEyZiwgMHgxMWVhZjVmYSwgMHhkZGFlZDE2YiwgMHgzN2M2ZWViNywgMHhmZDY5N2QzMSwgMHgwNGU1ZTE5ZCwKKwkweDZmNTRmNWFmLCAweGViYzZjYjdmLCAweDc2NTBmZjMwLCAweGU2MTIzZGJiLCAweDUzYThkMGY1LCAweGVmZDAwOWVmLAorCTB4ODVlMzNjNmEsIDB4Mjk3OGIzZWIsIDB4OWUxNGI2OGYsIDB4N2FiM2QwOGIsIDB4YTRkYmRmZGEsIDB4MGQ5ZjRjMGYsCisJMHg0NTEyMmJlNSwgMHgyM2JlOTExYywgMHgxODMyOTgxZCwgMHg1OTMwOWY5ZCwgMHgzNWY1N2U3OCwgMHgzMGUzZWU4YywKKwkweDFhOWY1Y2U1LCAweGQ3M2QwOTg3LCAweGM3YzNjYWI3LCAweGM0ZjAwNTU5LCAweDE4OTYzNTczLCAweDM5YTkxZjdlLAorCTB4MDhlOWZlZTEsIDB4ODE4NzY2ZWYsIDB4OGIzOTM5ZTEsIDB4NjI0ZmVlNzIsIDB4YTgyYWFlZDUsIDB4YmY3ZWRjNzcsCisJMHgwYmVlMTY3ZCwgMHg3ZTg4MTg2NywgMHgyNmNlOThhNCwgMHg5ZWQ5OTNjNCwgMHg3MWMyYWY2MywgMHhjZDM1ZTI0MiwKKwkweDIwMzdlOTI5LCAweGZiYjViYzU5LCAweDIwNjc5ZWYwLCAweGM5Y2Y3YjdkLCAweDJhOWQzMTJmLCAweGYzYzNlZmI1LAorCTB4ODg0NjUyMjUsIDB4YmY2YmQyOWYsIDB4OWJkYzExOTgsIDB4NGE1ZjMzODcsIDB4NmUzYjk2MzIsIDB4NzU0ZTkxMTAsCisJMHg4NjlhNmZlYiwgMHg1MGMxNTRmZSwgMHg0ZjU4MWFlNywgMHgxYmYzMDI1OCwgMHhiZDYxMWU2MCwgMHg3Yjc5ODlmNiwKKwkweGNlOWMyMGE5LCAweGY1OTY0OGQ1LCAweGRmZDgwZDE1LCAweDdmYmEwOGE4LCAweGFlMDNiZWMwLCAweDRkZjNhN2NiLAorCTB4ODBmNjU3ZjQsIDB4MGUzYTQ3YTgsIDB4YzM4ZmY2NTMsIDB4MWZlZDdiMzIsIDB4MzBjMmZjZDMsIDB4M2I1OWUxNGQsCisJMHg3YTE1YzNlNCwgMHhjYTdiNjM1ZiwgMHg2Yjc3ZmI4NywgMHgxMDZlNTIxMywgMHg2OWY1M2QxZCwgMHhiYmQ2MTk1ZiwKKwkweGFiMWJiYmYyLCAweDI2ZmQ1ZjY4LCAweDlmY2YxNTkzLCAweGNhZmIyOTg1LCAweGE1NzRlM2ExLCAweDQzNjc1YjNhLAorCTB4NjQxOGI0NmEsIDB4NTVmMTE2NzMsIDB4ZTA3MjVmMGYsIDB4ZTY4MzUzZDgsIDB4OWNmYWY1MDEsIDB4NzM2ZTNhYTcsCisJMHhkYTgzYzcxZSwgMHg2NGMyZDE5ZiwgMHhmNzQzMjNiNCwgMHg4MWZiNDNhZCwgMHg1NmJlNzA3OSwgMHgzMWZkYTllYSwKKwkweDAxZTc0NmQ2LCAweDUxOGI4ODc0LCAweGE3YWJiNTdkLCAweGU5ZGYwZGI5LCAweGZmMWZiYjI0LCAweGNjODJlMzgyLAorCTB4MzVmYzQzMWEsIDB4Y2VkYjU1YWMsIDB4MGRjZmNhOWMsIDB4MmExOGY0YTgsIDB4ZmRkMGE1MmYsIDB4NmY3YWQ0ZjcsCisJMHg5ZjgxZTEzOCwgMHgxZmFkMDgyNywgMHhmNmQwZDcwYSwgMHg1ODMzYjdmMCwgMHhlMTYwZGRkZSwgMHhhOTVkODhmYiwKKwkweGFjMjJiOTlkLCAweDQ3M2RhNTdiLCAweGJmNWE3ZjMzLCAweGVmN2ZkM2QwLCAweGJlNmQzY2ZkLCAweGI5ZjYzNjRjLAorCTB4N2QwNzk0M2UsIDB4NGU4Mjc3Y2QsIDB4NmM1OTZmYmIsIDB4OGQyZmI2ZDEsIDB4MjU3NzdlZDEsIDB4NDU5MmYzNjgsCisJMHg2ZDkxZGZlOSwgMHg4ZTFhZjNhMiwgMHhmNzllMTM3YywgMHgxOGQ4Zjk1MywgMHg4YWY3ZWZlMiwgMHgyZWZhMmFkZiwKKwkweDFlNzRjOTkxLCAweDc5ZGU5Mzc1LCAweGUzYzRlNTBlLCAweDAxZDI0MDMzLCAweGY4MmMzYzdkLCAweDU1MmU1OGNjLAorCTB4MGY1MTViYjQsIDB4OTNkM2FkYzYsIDB4YWVmYzdhOWMsIDB4YmRlMGNlNWIsIDB4NmJhMDE2YTAsIDB4Zjc3MWU1ODQsCisJMHhjNTZlOWI0NywgMHhmMTQ4YjE3YywgMHg3MGZiOWIwZCwgMHhjYjUxZDIzOSwgMHgzN2JmNWY3NywgMHgzYTlmY2YxYiwKKwkweDViY2U3NDBkLCAweDc1YjFiNzNkLCAweDFlMmI2MWFjLCAweDk0Y2I4YTBiLCAweGZkZjA2OWNkLCAweDg0ZTYyYWExLAorCTB4NjMyM2IwOTksIDB4ZmM3MTIzNjMsIDB4MTVhMmQxMmQsIDB4ZDFmM2RkZjUsIDB4NzE4ZWZmZjUsIDB4OGMxOWU2OTQsCisJMHhlMTQyMTlmNiwgMHg0NmQyMzc1NywgMHg3NTZlMzY3MiwgMHg1YmY3ODBiNiwgMHg1ZjliMWUxZSwgMHgwNjMxNzI4OSwKKwkweGFmOTQ2NWZjLCAweGM1N2RjYTkwLCAweGYwMTVjNzE3LCAweGM1YjZjMGY4LCAweGJlMjNjNTJmLCAweGRiMGY1ODM3LAorCTB4YTIxNTllNjksIDB4NTJkOGE3MTMsIDB4OGI3ZmU1YzEsIDB4N2IzZWQxODUsIDB4Mzc1MmE4ZjMsIDB4NzJlYzRkMWUsCisJMHg4YjNjMGVjOSwgMHg0MWRlZTJkOCwgMHgyZDU5NWVmMywgMHg5Y2FjZDk3MiwgMHhjODU4MDE5NywgMHhiZTljMzk1MSwKKwkweGZkNGEzNjBjLCAweGIzMzQ2ZTk4LCAweDk3MjgzOWY4LCAweDdjZThjMjkyLCAweDgxZjY3ZjUwLCAweDU3Y2I4NGI0LAorCTB4ZTljYzZmNmMsIDB4MTE0M2RlYmYsIDB4NWNjOGYxOGQsIDB4OWZlNDY3Y2IsIDB4NmRmZDBiOWYsIDB4ZjI5OWIxOWQsCisJMHg1MzhkM2NhYSwgMHhkZmJiYmJlOCwgMHgxYmJhM2QxMCwgMHgzNjcyNGJmMCwgMHg5ZTJjZTQxYSwgMHg4NzhlNjNjNywKKwkweGY1NzViNzg5LCAweDNhMjBiNGMyLCAweDdjODA1NWQ1LCAweDJlZTdlMmNkLCAweGJlYmI3ZTMwLCAweDg3ZTMzNGE4LAorCTB4OWI5ZDRjZmMsIDB4NTUxOGU1Y2IsIDB4OTdlYmJiMWUsIDB4ZGEwNWRjNjEsIDB4NjM1ZjUxZmIsIDB4MGZjZTc4M2YsCisJMHhiN2Q3MTk1MiwgMHg0NDNmYTg1MSwgMHg4MzBjZjM3ZSwgMHhlODM5ZWYwMywgMHg0MzBlNDAyYSwgMHg1NjgyNWQ3YiwKKwkweGM5MTgxYzRmLCAweGMxZmIzNWYxLCAweGEwOWVjY2JiLCAweDcyOGM0ZDM4LCAweGJlYTM2NjFlLCAweGViMDY5Y2RlLAorCTB4NzQ0MzM4ZDksIDB4NmM3ODA3NmUsIDB4ZmExMDY4YTksIDB4NTVjNGM3OGEsIDB4MGQ5OTdlNzAsIDB4ZGU2ZmQxZjUsCisJMHgxYjEzOTE1MiwgMHg4YzY2OWViYywgMHgzNmQwYzA3MywgMHhkYjlmMGZkNywgMHhiZmM4ODVkMywgMHhiYzc5MjM1ZCwKKwkweDFjZGQ2N2JkLCAweDNmNDA3MWJlLCAweDQ3OWE4N2E4LCAweDZhZTZhZTk3LCAweDU1NzI0MWRhLCAweDZkNmRlNTY3LAorCTB4MDczYTdhYWUsIDB4Y2ZjMTU1ZDksIDB4ZjgxM2FkNWQsIDB4YzRhNDgyN2UsIDB4ZjI4YjliY2IsIDB4NGJmNGJmNDksCisJMHg0OTJiMTUyZiwgMHg1N2UyODQ5ZiwgMHhlNWZkM2Y5ZCwgMHg5OTExZTkwNywgMHg4NzE5ZjFmMSwgMHg0Y2NlYjQ5YiwKKwkweGRhMDdlMWZhLCAweDRhZjk3NDNiLCAweDFlMGJkNDdkLCAweDYyYmE3ZjZkLCAweGY4ZTMzNjUxLCAweGFmMTA1ZmE4LAorCTB4N2JjNWU2M2EsIDB4OTVmZGExOTMsIDB4M2ExNmZjMmEsIDB4ZTA2OWM5MWYsIDB4OGQ5ZGIxZWQsIDB4ZGJmNDhiZjgsCisJMHhjOGUwMDE2OSwgMHhhMWNlODJlOSwgMHgzYzM4ZjdiMywgMHg3YzNhMjRiNywgMHgyZTAxZjg2YiwgMHhhZTc0ODdkMiwKKwkweDc4ZjdhNTJiLCAweDY1OGUwOThmLCAweDdkZThlZmI4LCAweGU3ZjNhMjVkLCAweGNkNGY3YWExLCAweGIxMzA3MGFiLAorCTB4M2U5Y2U3MzYsIDB4MGY5YzRkZWMsIDB4YTc2OTM1ZWEsIDB4MDFmYTg5ZDcsIDB4ZWQ4YTk3ZDAsIDB4MDk0YjJhMzYsCisJMHg1Y2Q0YjNiYiwgMHhkN2FkZThlMCwgMHhhYjZkNWNiYSwgMHg5MzcyODJhZiwgMHgwM2Y2OTk4MywgMHg5OTUzNGMzYywKKwkweDc5YzAzMDdmLCAweDFjY2YzM2VkLCAweDNkZjU4YWJmLCAweGY4MDNhZTBlLCAweGU2YmNlMDk5LCAweGU2MzM0N2Y5LAorCTB4ZWRmMzdiNDAsIDB4YjliNDI2YWQsIDB4ZjVhMWNmNDMsIDB4NzZhNGVmNmUsIDB4NGNhYjRiNzEsIDB4MjNjNTE5ZDMsCisJMHg4NmI5NTQ2NSwgMHhhZmQ5MGIwOCwgMHhlNDg2NzRjYywgMHhjNmM5MzRiMywgMHgzZDEwYTdlZCwgMHg1MGY4MGViOSwKKwkweDY0NGFmMDhmLCAweDM4ZDBhZjA0LCAweDQ5ZjhlODcxLCAweGRlZmNjOTA1LCAweDFhNTJlMmU0LCAweGE3NDU0Mzc3LAorCTB4NWQ5MGUzMWUsIDB4NGVjNTdhYWUsIDB4ZWZhOWY0ZjIsIDB4N2JiMWZiNDIsIDB4ZmYyM2E3M2EsIDB4YzgxYTE1NzcsCisJMHhjMWY4N2UxZSwgMHhjZjExOTM0OSwgMHhjNTEyNjVkZSwgMHg3YmQxN2FkMSwgMHgyMzNkYmFjOCwgMHgxY2FlOWNmNSwKKwkweDdmMjhjZDhiLCAweGRiYjljY2I3LCAweGZlYzNlOGVjLCAweDhiMzE1MmQ4LCAweDk2NWEyZmNlLCAweGE1NjMzYjcwLAorCTB4ODhlNDgxYmQsIDB4ZTdiOTQyYTUsIDB4NzFjYmQ4YTIsIDB4YTIxM2JmYWEsIDB4Mzc1NGI3MjcsIDB4OWJkZWYxOTgsCisJMHg4NTkwZGU3YSwgMHhlZDk3ZGJkOCwgMHhiYmJkMWZiZiwgMHhmMThiZjk2MSwgMHgyYWVlNGZhOCwgMHg3OWM3ODg2OSwKKwkweDRmZjA4OTZmLCAweGQ1ZGYxMzc3LCAweGYyMDI5ZjkzLCAweGYxZTUxZTM4LCAweDkyMGU5MWEyLCAweDdmZjJkZDJmLAorCTB4MGUzYjM5YzYsIDB4NTU2OTE4MWUsIDB4NDNkYjhhZjgsIDB4NDE3ZmUyNWYsIDB4OTI4ZDY2YmYsIDB4MWM2MDE0YTcsCisJMHg4ZTQ0YjUyZCwgMHg3NGJjNjA3NiwgMHgwMGQzYmJkZiwgMHg3YWJkOTNhZSwgMHhmYjhkNjNmMiwgMHgyZmMxZjQ4MSwKKwkweDQ5MzgyNjMyLCAweDY4MWU5ZTVmLCAweGFjOWQyMmIwLCAweDhmNDZmYzZhLCAweGUyY2U2YmY3LCAweDdmZTg1NWU5LAorCTB4ODdiNzAyNTUsIDB4OTgxOGM1NTYsIDB4YTFmMzQyZGYsIDB4MmU3NTRmNDUsIDB4ZjVhN2E4NjYsIDB4MDEzN2RjMDksCisJMHg3OThmYzViZiwgMHhmZDEwMjMxNiwgMHhiYWYxOGU0YywgMHgyOTg3MDBhZCwgMHgzMGJiYmUzMSwgMHhkN2FjNGFhZCwKKwkweDEyOWM2MGQ5LCAweGYwODBiNDQ3LCAweGM1NjNhMjlkLCAweDlkYWYxZTA2LCAweDExNWNmMzg1LCAweDU5YzUxMWYzLAorCTB4ZDFjNWE3MjcsIDB4YzVhMzU0N2QsIDB4YzlmYmMzYWQsIDB4ZjZkNTY3N2EsIDB4OGJjZThjYjUsIDB4YjAxNWJjNTEsCisJMHg4Y2UxZjc0YSwgMHhiNmJkYzcxOCwgMHhlZWFiOGUyNywgMHhkY2YxYTkxMywgMHgwNDI5MDU3NSwgMHhmZmMxMjEyZiwKKwkweGNiMjNlMjJkLCAweDFlZjExMDFhLCAweDQwM2U5ODdlLCAweDQ2YWFmOGY2LCAweGNkNDFmOTEzLCAweDkxZGEzYjA5LAorCTB4ZjgyMzMyM2QsIDB4M2U3YWE0M2UsIDB4YjE2M2UwMTcsIDB4MGM1NjdjMDIsIDB4OTVkNjliYmMsIDB4MTdiYjE0OTQsCisJMHg5MWZhYTVlNywgMHg1MGFmMjBmMSwgMHhjYzI1NjVkZSwgMHg0YmViOGE5YiwgMHg0YWVkYzM3YSwgMHgwY2M2N2E4NiwKKwkweDE2NjAzNjVkLCAweGEyYjllYWUwLCAweGM2MWVhYzc4LCAweGQ4NTgzYzIxLCAweGFiZmI0YzM4LCAweDQwZDEyMmJmLAorCTB4ZjJkMGQ4ZjEsIDB4NWM3ODBiMjcsIDB4MjEwNTBiMzIsIDB4MTM1ZWViYWUsIDB4NzU1ZGNmZGQsIDB4YWFmN2JlZTAsCisJMHgzMDFlN2U1MCwgMHg2NzY3YzkzOSwgMHhmZmJjMTQ4MSwgMHg2Njc3MWRkZSwgMHhhZWRkZmY3YywgMHhkYmI1YmY5YywKKwkweGE2M2Y3NDBkLCAweGY4Y2NiZTNiLCAweGU3MWFiY2JlLCAweGQ5ZTUxYTg4LCAweDMxZjI3ODhjLCAweGM3ZjQyMWM3LAorCTB4OGY3MWFiZmUsIDB4NGZjYTQ2MWIsIDB4NmRhYzdmNjAsIDB4NjNjNTE1YzAsIDB4NjhlYWM2YzIsIDB4ODUyOTI3OWYsCisJMHgwNWY3ODI3OSwgMHg1ZmViMjk1NiwgMHg3YTg3MGRkNSwgMHg3NWY1ZWEzYiwgMHhmNjA3OTQyOCwgMHgzNzhkODcwZiwKKwkweDIyMjZiYmU3LCAweDg4ZWM0NmRkLCAweDQ3ZGFmZDQ3LCAweDE3MTM0M2JjLCAweDc5Mjg3YmMxLCAweGZhNjIwNGIxLAorCTB4OWM3OWFhOTMsIDB4M2NlYTY2MjQsIDB4NTM0ODc3OGEsIDB4MGFkOTNlZjksIDB4ZGNmYzYwMTYsIDB4N2M4NGMwYTAsCisJMHhmZDRiZWFiYSwgMHhlODg3NzAwZCwgMHg5MjdhY2NkNywgMHg5MGFlOTE5MywgMHg3ZjJmNDhiOCwgMHg2NTc2ZTY0NSwKKwkweGEyZGJkYzg4LCAweDAyZjFmOWYwLCAweGNmOTFlZTI1LCAweDkzZTdiZmYyLCAweDUyMjhiYjI1LCAweDE4ODlmN2Q5LAorCTB4ZTg3MjQyOTUsIDB4ZDkwYTU3MTEsIDB4NDExY2M0NDMsIDB4OWQ5Y2JlZjAsIDB4ODdiMTUwNzMsIDB4OGY5Y2E3N2UsCisJMHg4M2U3MmJmNywgMHg4M2U3MmIwZiwgMHgwYjc3YzU1ZiwgMHg4NjNmOTBjMCwgMHg3YTQwMTZlZiwgMHhlNTQ5YzliYywKKwkweDI4MTUzNDZmLCAweDZmZTM5OWNhLCAweDQ4OTJlZTQ1LCAweGY5OTQxZmIyLCAweGFkZjk5NGU5LCAweDI1NzM0ZWIwLAorCTB4NmQ1NjdlMDMsIDB4NTg3OWQzZDMsIDB4ZTk4NGMyNjMsIDB4YWYzMmNmNjgsIDB4ZGIxMTllZGMsIDB4NzU4N2VmNzMsCisJMHg5ZWZjYmZjMiwgMHgwOTVkYTc3MywgMHgzYTRmM2ExZSwgMHgzZmY3Y2FjNywgMHg1NDJkN2M1NSwgMHhiNjEyYWZlYSwKKwkweGM3NWY5MDE5LCAweDM2ZTE2YTc2LCAweGM2YTQ1MmZlLCAweGRhNjIyY2FlLCAweDRkMTM5N2YzLCAweDRiZjUzNDQzLAorCTB4OTdmM2RhYWMsIDB4NmFkN2VjOTMsIDB4Njg3NjRmYmUsIDB4OTc1ZTVmY2YsIDB4MWY2NDNlMzEsIDB4MGI1NzRiNTYsCisJMHg4MDZlODAxMywgMHg3ZDMzYWE0ZSwgMHhkNjg1ZmYzNCwgMHhjZDdiOGE1MiwgMHg3NGM3YjkwZCwgMHgzZjM2YWI0NywKKwkweDJmY2RhN2RmLCAweGFiY2RhZGRjLCAweDQ2YzNjOWU3LCAweDkyMzBmNDI5LCAweGYxMzFmYzhkLCAweDBjZjdlNDRlLAorCTB4MDEwN2VmODUsIDB4M2FiMzZmYmYsIDB4Y2ZkYTExOTksIDB4ZjhiZjc4MTYsIDB4MWIwMGM2MWUsIDB4NzZjOTRiZWQsCisJMHhlM2FjMjM4YywgMHg1Y2IwOWZmNywgMHhjM2JkY2JjNywgMHhiZTdhZjY5NSwgMHhkYjhlYzU2ZiwgMHg0YjFkYmVlOCwKKwkweDA2ZWRlMWNjLCAweGZjN2VlZmYwLCAweDcyZjFhNDhlLCAweGZlODdhZjBlLCAweGEyMWJkNjEyLCAweGU1YzM1M2Y0LAorCTB4ZmU0NTljOTMsIDB4MzNlYzliODIsIDB4NjJiMzZiMjMsIDB4YzJmZTAxNmEsIDB4ZTkzOTlhMzQsIDB4YWIwYzc1OWUsCisJMHg5MDc1YmYyNywgMHg1MTMyN2Y3MiwgMHg0M2JjYTRlOCwgMHgzZTYxODZiMCwgMHhmMGE2NzA0NSwgMHhlNDhmODVmOCwKKwkweGZlNDk1MGMzLCAweDg5ZjEyYTc1LCAweGY0NDc3NDViLCAweGI5MGQ5N2U2LCAweGFhZjAwN2JhLCAweDkxMDI4NmY4LAorCTB4NTYyM2UyZTQsIDB4ZDhmOWVmNDYsIDB4YmYxM2Y3NWMsIDB4YjAxNmMzNmUsIDB4OGY2YjMzNmUsIDB4Zjg3YTE1NDksCisJMHg2MWJjZWRlNywgMHg1YzEzNWZjNCwgMHhiNTJmZGEwZSwgMHg3ODBiMjQxNSwgMHg4NTg4YTUyZSwgMHg0NTM2Y2I5YywKKwkweGM0YTNlODY5LCAweDVmNDIxNzFhLCAweDRiZTg0MjQzLCAweDlkN2Y3ZjRiLCAweDM5NDVkNWVjLCAweGU4NDJjZTkwLAorCTB4ZTViZTJmZjAsIDB4YWYxODJjNTEsIDB4MDVmYThmNGMsIDB4NzY4OWQ1OGYsIDB4Y2E5ZTA1NGEsIDB4NzU0Zjk2MDIsCisJMHhlZTMxOWI0NiwgMHg3M2QxOGI2NywgMHgzZmQ4YTU3OSwgMHhhYjlmNGFhNSwgMHhiMmViNTllNCwgMHg1NjZiZmJlMSwKKwkweGY2ZTY0OWQxLCAweGYxM2QyZGJhLCAweDk2ZGYxODI1LCAweGVhMzVmNjAwLCAweDVjOTE5OTYzLCAweDFmZDNiMDdkLAorCTB4N2ZkNDM1NzYsIDB4NjVmZmZjMDQsIDB4ZWIxYmZkMGMsIDB4NjVlZmJjNjQsIDB4NWYxMGU0YjUsIDB4Nzk0OTYyM2YsCisJMHhkMDVlZjMwMCwgMHg0MzdmNThlOCwgMHhlNWFmZjczMSwgMHhlZjgyNmNlOCwgMHgwNWJlYTE1MSwgMHhjMjNkYTVlZiwKKwkweGMxYTk0Y2YyLCAweGZlYmMyZGY1LCAweDUxNjQ1OTdhLCAweDMxMTg5ZjkwLCAweDlkYmZlYTgyLCAweGNlZjg2NjY3LAorCTB4ZDlhMDc3ODEsIDB4NjNlYzcxODcsIDB4ZGQ3N2FjZjIsIDB4N2I3ZmViNDEsIDB4YWYwN2Q3MTQsIDB4YThmMTFjMTksCisJMHg3Yzk5MWUwZiwgMHhkMjg3YTY3NywgMHg2ODVmOGQ3NCwgMHhiZWU0MTA0YiwgMHg4Zjg1MTdjZSwgMHg5MmJkNzIzNiwKKwkweDc4YzdlMjViLCAweDM0YzI3NDdjLCAweGZkMDM5OTU3LCAweGU5MGJiNzFkLCAweGYxMTJlNzQyLCAweGZkMzc1YmU4LAorCTB4YTg3ZTJiNDQsIDB4MGZjMTA2ZTQsIDB4NWQ3NDliNGIsIDB4ZTNmZjQzMGUsIDB4MzU3NzBiMTEsIDB4ZDU5ZTI5MWUsCisJMHgwMmY5ODY1MiwgMHhkOTAzZWU5MSwgMHhkOWViZTI1YywgMHg3ZTAyYWViOCwgMHhlNTRhZjBmZSwgMHgxODFlYTg3MSwKKwkweGJmZGI5YTMyLCAweDNjNDQ4NjkzLCAweGRmZmExNDMwLCAweGIxNWEyNDUwLCAweDJiN2EwZGZmLCAweDRlZjFlN2RkLAorCTB4MTc1N2U0NjYsIDB4ZTA5N2VhYmIsIDB4MTEwOTZkYmMsIDB4ZGE2ZmNmMGMsIDB4YmU3ODFhMGEsIDB4MDBjY2MwZDgsCisJMHhiZDZiOTM0ZiwgMHg0YTY5ZjExNywgMHhmNmMwOGNmNSwgMHg3YTdlMDc0NywgMHg1YjE5ZWQxYywgMHg3MDNhNDg4MiwKKwkweGFlZjljYmEyLCAweDI4MTdlYjFiLCAweDc5ZTI5ZGYxLCAweDliM2M3MGViLCAweDU5OWFiNDQ1LCAweGI5NTQxYzBmLAorCTB4Y2JjOTllYmUsIDB4MGFiMmZmYzksIDB4MGFjY2RlZjQsIDB4Y2UwZDQzNmIsIDB4NzA4NDkxZTcsIDB4YWU2ZGYzYjIsCisJMHg3OWUyMGIwNiwgMHhkMTNkNDBjMywgMHg3ZjIyNDk0MSwgMHhjMjU1NmE1NywgMHhmZmNjMGFiNCwgMHg3MTkxYTA2MiwKKwkweDFmMmZmM2JlLCAweDUzODFmZThhLCAweDViMzU3NWEwLCAweGM3NWU2ODFhLCAweGMxMzk4OTJlLCAweGE5YTg5NmVmLAorCTB4Y2Y4NWExZDksIDB4ZjhmMTQ2ZWYsIDB4ZjFlMzA5OTAsIDB4ZjViNzlmODAsIDB4OGI5YTljY2MsIDB4NzhhN2EzZjQsCisJMHg2YjdjN2Y1MywgMHg3ZWNlNWQ3MywgMHgyYWZlNjFmYiwgMHgxMTBiMDM5NCwgMHhjMjk3ODViZSwgMHhmYTQwNGY5OCwKKwkweGZlNjEyOTNkLCAweDViMDE3Zjc3LCAweDYwZDlkNjgwLCAweDZlNDFmZWMxLCAweGJmYTJmYWJiLCAweDdlOWNkMTg4LAorCTB4NGIwZTBiOWIsIDB4ZDc4MjRlZjgsIDB4MzQxZjEwMjEsIDB4NDQ0ZTRlNWIsIDB4YjUyODc4M2UsIDB4YTFlOGU4OGMsCisJMHg4OTlhOGY4MiwgMHhmY2YzODYyZiwgMHhlZWY3NzlkYiwgMHgxMzdhM2M0MSwgMHhlNzdmNjljMywgMHgzMTU5ODJhMSwKKwkweDYwYmVmNGMxLCAweDMyZjQ0ODk0LCAweDRlNjE2ZmVlLCAweDk0NjNlMjNmLCAweDkxZmJmODgxLCAweDhjNTZjNzA4LAorCTB4Y2NmMzc5NGYsIDB4ODI0YmJmNjQsIDB4OTg2Y2Q5NzUsIDB4Mjg2MmM0ZTcsIDB4NWRhMmZlODcsIDB4N2VmMTNlNjIsCisJMHgwYjhmMDU3NSwgMHhkNTdlMzAyYiwgMHhmODg0M2I2NSwgMHgzMTY2NGE5MCwgMHgzOTQ5YWU3ZSwgMHhlZjkxMTRmNywKKwkweGI0MzU0MzVjLCAweDI1OTU2ZmZhLCAweGQ4Y2ZkZTk3LCAweDQyNzBkMDkyLCAweGJiMjBiNmQ5LCAweDU3MjI5MDZhLAorCTB4NDU4ODk0MDYsIDB4NTkwNmRmMjgsIDB4ZWI2NTVkYjgsIDB4YmI5NDA1OTQsIDB4YWE0N2ZiYTEsIDB4ZWQyOWQ3YmUsCisJMHhhNjViMzI4YywgMHgzNzFiNTRhMywgMHg3ZDcwMTVkMiwgMHhlOTdmNmExYiwgMHhjMzVlZGMyYywgMHhhZThmYmMzZiwKKwkweDg5M2YzNWNmLCAweDMxNzQzOGU3LCAweDE5N2Y3YWRhLCAweDBhNzM5Y2E1LCAweDNhNTRhZmIxLCAweDdhZTU2MGRmLAorCTB4ZDFhZTQzNjIsIDB4YTFiZDc0ODcsIDB4MmE1OWRiOTgsIDB4NDdmMmFiMWYsIDB4ODcyYWJmODUsIDB4ZWY3ZTdiZDQsCisJMHg1MTk1ZjYyOCwgMHg4NzM2NWU0ZSwgMHhlNTk5ZWFlNCwgMHhkNDA3NmY3OCwgMHhjMzE3NzM5ZSwgMHhmYTU2ODk3YiwKKwkweDFmNzJhZWZlLCAweDZmNjI5NGYxLCAweDViZDhhN2JkLCAweDViZDhhMWZmLCAweDA1YmRhM2VmLCAweDgzNTE4NmY5LAorCTB4MTQzN2JmMDgsIDB4MDhkZDc2MmUsIDB4MjA5MDFhZjMsIDB4M2ExNGRmMTEsIDB4ZWRjNDRjNGUsIDB4MjcxOTcxYWYsCisJMHg2MWQ5N2QyYywgMHgwZWEyZDExMSwgMHgzNDhmMDVlMywgMHgzNjQ5N2JmMiwgMHgxNTk4ZWQ5NywgMHg5NWNmNTlmMSwKKwkweDc2NmIyY2Y5LCAweGJjYmIzNDY5LCAweDdhZTNmMjdjLCAweGU0M2VkMWQyLCAweGI5NTU3YmViLCAweDk5NGM3OTRmLAorCTB4ZmU2NTcxZmYsIDB4NTdmMzI4NmYsIDB4NDM0OThmZWQsIDB4YmNhMTMyYmUsIDB4ZWZhZjEwZGYsIDB4ZmMyOTdlNDcsCisJMHhiOWQwYTcyOSwgMHhiNTc5NTBhOCwgMHhlOTA4YzQwMSwgMHhmYzkxMjJlYiwgMHhlNzc4MjA5ZiwgMHgyNWJkZTQ2YSwKKwkweDRlZjVmNzIwLCAweDFlNjhjOTU5LCAweDc2NjBkYmJmLCAweDdjNDYyYzU3LCAweGE3MTQ2NjRlLCAweDI3YWFlODlkLAorCTB4YjkwMzY1YjksIDB4ZjhiMzcyNDUsIDB4Y2E2Y2ViNWMsIDB4ZTU4MzM4NDcsIDB4NjM4MTUxOWUsIDB4OGU1YWNiYjEsCisJMHg0NjM4YmU3MiwgMHgyNDU3MWY0ZiwgMHg1YmJkZDBhNCwgMHgxZDBlZmVkNSwgMHgwY2YwNzJmNywgMHg4MmE2Njc5NSwKKwkweGYzZTI1ZWY1LCAweDZjNzI0N2ZmLCAweDhlZTNlMzJjLCAweGZkM2EyNGJkLCAweDRmMWNkZTVjLCAweDkxMjM3OTI2LAorCTB4NWZlZDBhN2MsIDB4NjM2ZjM3OTUsIDB4YmUyMDY0Y2MsIDB4ZmJhMTY0NGYsIDB4NjEwYTc3MDAsIDB4OWRlNzg0NGUsCisJMHgzZjMwN2MyOCwgMHhmZjdkZDE5NywgMHg2NzNkOGFjMSwgMHgwMWQxZGU1NywgMHhjZWI4YTE0ZSwgMHhmNWIwNGVkOCwKKwkweGZjN2FmODgzLCAweDFiZjc1MzI1LCAweDhmOGVkYzZjLCAweDlhMjdlNGQ2LCAweDRiZjUzNWUyLCAweGVmOWFjOWFjLAorCTB4MzVjM2VjOTMsIDB4YjIzYjI3ZGYsIDB4MzJlYmY5MzUsIDB4ZmZlYTY5NDYsIDB4YzlhNDU5YzIsIDB4NTkzMDUwZGYsCisJMHgyZTRjYmY1MywgMHg2NjY1ZTRkMywgMHgwZTQ4NzdhNSwgMHhmYTFlZWQzNiwgMHhhN2ZkMWViMSwgMHhhNzFmYTFiNiwKKwkweGExNGY4NmY1LCAweDBlMGJmMGYxLCAweGEzYjVlMTYwLCAweDAwZTg2NzhiLCAweDg3NTE4NTQ2LCAweGZjODY0Y2VmLAorCTB4Njc5M2QxYzYsIDB4MGFlZjgwZTgsIDB4M2FmZTFmMDcsIDB4ZDM2ODU4MTksIDB4N2YzYzI5ZTgsIDB4NTNhZmUxZjUsCisJMHhmNDY1YmYyMCwgMHg4NjNmM2M3NSwgMHgzYWRjZjA5MSwgMHgyZjBjZWE3YSwgMHhlYTFjNTllMCwgMHhkMDM0NzQ3OSwKKwkweGVhOTcyZGYxLCAweGY4M2RhMjhmLCAweGU2ZDM2NWM3LCAweDRlZjg0YjI2LCAweDA2NjI1OTQwLCAweDhhNmNlN2NjLAorCTB4N2VmYzYxZTcsIDB4MTVhY2VjNzMsIDB4ZmM3NjExNzgsIDB4OGY3NGY1NzcsIDB4NzlhMzM3ZWQsIDB4ZmM4YjhlYmIsCisJMHg4YjhlOGQ1ZCwgMHhiYjBkMWRmYywgMHg1M2Y2ZjFjOCwgMHhjYmJlZjU1MywgMHg3ZTlhMGUwNCwgMHg2NDExNWZkZiwKKwkweGZkMDVhZjdlLCAweGRjNjkzOWNkLCAweGZkMTRjNGRmLCAweGRmZDE0YzRkLCAweGNkZmQxNGM0LCAweDZmZWU3YTM5LAorCTB4MjZmZThhNjIsIDB4ODliZmEzOTYsIDB4MzI0ZDViZTksIDB4YjkzNGVmYTUsIDB4NzI2ZjZkMjgsIDB4YmY3ZGRhNTMsCisJMHg2YWU3MjllMCwgMHhlZjM4MGEzZCwgMHg5ODViOGI0ZiwgMHgxMTE3ZTRjMywgMHg0YWU3YTE0ZSwgMHg0ZjlkZjQzYSwKKwkweDQ1Y2E3ZWQwLCAweDEyZmJjMGU2LCAweDM5NGUyMjg3LCAweDM5YWNiZjcwLCAweDJlNzQ0NGNmLCAweDRjM2JiNjc0LAorCTB4OTczMGJkZjAsIDB4YjYyZjliZTcsIDB4NjE3ZTUwM2IsIDB4OGU5ZWVkMWUsIDB4OTQ2Y2I2ZTgsIDB4MTZiNWNkYmYsCisJMHgzNWJiZWUyNywgMHgyM2M3ZjQ1ZiwgMHgxYmQ2MTQ5ZiwgMHg3MTRjZGVlOCwgMHhlOWM1Mjc2NywgMHhiZGZjMmQwYSwKKwkweGM3MTE0Mzg0LCAweDkxZTMyODhlLCAweDkxNzlkYTVjLCAweDI3N2M0NWY5LCAweGIwZWVkY2M3LCAweDNmNjBlMzJhLAorCTB4ZWEzMjZlMzAsIDB4MzAyNWMyYjcsIDB4YmY1YmY1MmUsIDB4YjBhOWZhOTgsIDB4ODQyYjhmNzQsIDB4ZTFmYTZiOGMsCisJMHg0MTBhMjc3MSwgMHgzMTc2YTZlMywgMHhjNzAxMTc3YSwgMHhmNWM2Njg3NSwgMHhmYzNmNzQ0YiwgMHg3OGMyNWZhMiwKKwkweGQzYjQ0NzYxLCAweDM1NGQ3MThlLCAweDIxZGY4YzVmLCAweGRmY2Y0NWJmLCAweGY4NzQyYzVmLCAweGI4OTNkNDI1LAorCTB4NWJlZjg5YmQsIDB4MzNkODgxYzYsIDB4MWYwZDc5ZDMsIDB4NDdhODY1YzksIDB4NWQ5ZGI5NzEsIDB4OWExNzlkN2MsCisJMHg5ZjkwMGJmYywgMHg2MDc3OTU4YSwgMHg3YmE1OGNjMCwgMHg3MzBjNGM5YiwgMHg5MTI4YmVhMiwgMHgzODM2M2JiZSwKKwkweGUzMzlkZjE3LCAweDFiMTVhMGVmLCAweDFmOTBkYmRkLCAweGRlNWM3NGViLCAweGRmMzMxOGIwLCAweGNmYjVkMDU3LAorCTB4M2JkNDE1ZmYsIDB4ZWM5ODNiMTksIDB4NGJmYjA0OTUsIDB4YjQwNDc1MmMsIDB4NDRjYWU0NWYsIDB4NWIyNGUzYmIsCisJMHg3NTY4NzI0ZiwgMHg4ZjdmZTc5NCwgMHgzMWJlN2EwNiwgMHhmNDUwNWViMywgMHg3NzYzZjUyNywgMHhmZGMwZWY4NSwKKwkweDg2NTc4ZTg4LCAweDRkMWYyMWU1LCAweDY0NWUzYTMzLCAweDFmN2ZiZmMwLCAweDNjZmM0NGRkLCAweDg3OTFjYTJkLAorCTB4N2RmZGFjMmYsIDB4OGY5ZTBhZjQsIDB4Mzc4OGJjNzMsIDB4NjlhY2FkODMsIDB4OGZmYzcxNDYsIDB4ZjE0NTJmM2YsCisJMHhhNzlhNzQwZCwgMHg3ZmI0M2EwYSwgMHg3NjUzNzNkNCwgMHgwNjM2MTNkMSwgMHhmYWViNTRlMCwgMHhkN2U3YzBjYSwKKwkweDcwNzhjMDY5LCAweGMxMDcxOGQ0LCAweDQ2NjFlMDZmLCAweDI3M2E5OGU3LCAweGUwNzZmODQ3LCAweGZhODBkZjdlLAorCTB4YjI4NzhjNmMsIDB4ZDYxZTQ3NGMsIDB4ZDI3N2QyNGIsIDB4ZWY4ZWYyN2QsIDB4YTgyN2ZkZjgsIDB4NTA1Mzc5MTksCisJMHg4Mzg5ZmVmYywgMHhmOGFmYWI5MiwgMHhkYzMxYzllMywgMHg2YTk0NWQ0ZSwgMHhhODc4ODc1OSwgMHg5NDRjOWJiMywKKwkweGU3NDhiYzFlLCAweDlkY2U5OTgyLCAweGQ5NmJmMThhLCAweGE5N2JmN2QwLCAweGZhZTE4ZWFmLCAweDQxYTU3OTIxLAorCTB4NzQ0MTAyMzEsIDB4MzBlNTk0YzIsIDB4MGNiZGU2YTYsIDB4YmJmNmQwZjQsIDB4OGJkZmJhYzMsIDB4NDMzMjcwMDMsCisJMHhkZWYzYzg5YSwgMHhlYjE3OGYxZCwgMHhhYzY1ZjUzNCwgMHhlMzFkZmRkZiwgMHhiZGE3YWNmNCwgMHg4ZmNkZGJmYywKKwkweGM2NTU0ZjJmLCAweGM3OTk3YTQzLCAweGQ1MGM3ZmM4LCAweDZkMGI2YjNiLCAweDg0M2YzYmVhLCAweGNjNjNjN2U3LAorCTB4NTIzZGU5ZGIsIDB4MTQ4Nzc5NDksIDB4NGUzMTVhZWEsIDB4M2RlOGNlMTEsIDB4MzdiZmMxYWUsIDB4OWU4MTlhZmIsCisJMHgzZDM5OWE3NiwgMHhkZDNjOGFhNywgMHhlYWZhZjIyOSwgMHhiYmVhYTUzYiwgMHg3YTE0Y2Y2YiwgMHhhM2NjMmI2ZSwKKwkweDhmZDRmYzdlLCAweGRmMWIzN2I0LCAweDZkNjc4OGNiLCAweDZlZmFiZTM0LCAweDAxMmY1YTk0LCAweDJiMDkyMGY0LAorCTB4ZTIzYTY3NWQsIDB4ZmIxMjUwYWIsIDB4NjNlN2U3ODQsIDB4MWQyMGU2OGEsIDB4YjJmMjY4NWMsIDB4Y2RmNDgyNGYsCisJMHhjNmM4ZjA4NSwgMHg0OWQ1ZmM2MCwgMHgzZjVhZjdkYSwgMHhkYTgxMzMxZiwgMHgxYjZiZWRhOSwgMHgyODRmYjIyNywKKwkweDNhMjdlOTc4LCAweDY5MTU0ZGFhLCAweDYyNGViZDFmLCAweDljM2JlMmFmLCAweGE4MGQ1OTIwLCAweGE3NzZkNTk3LAorCTB4NzhlMmRlNDAsIDB4YzVmYzgyZWYsIDB4YmI5MDNkZjQsIDB4M2VkMWU4OWYsIDB4ZmJlOTRlOWQsIDB4M2YyYTFlNGQsCisJMHg2OTRkNTRkZCwgMHhjYTllYTlhMCwgMHhhNDZhNmEzZiwgMHgyM2RiOTZmNCwgMHgxNjdmOTE3MiwgMHgzZWM2NWZlZCwKKwkweGRhZjdhMjA5LCAweDEwMjdiZDM2LCAweGQ0NTUzZjk0LCAweDUxYWQxZDM3LCAweDcyNTRlOGU4LCAweDFjOWZkZmRmLAorCTB4NTNiYmVkYzMsIDB4M2IzZTM4ZTMsIDB4ZjdjMGRlYzAsIDB4OTcyZTgwZGEsIDB4ZGJmZDZkNWIsIDB4ZmRjYTFkMWQsCisJMHhmOWUzYTNhZSwgMHgzYzQ3NjVmZSwgMHhjMzFmMmZjZiwgMHg2NDU5NmVmZCwgMHhlOGZlZDhhZCwgMHgzZmVmMDM3OCwKKwkweGVmYzZhYzQ1LCAweDdiZjc4ZGIyLCAweDc3YTQ1ZDJhLCAweGIxMzU3ZWE0LCAweDU4MzFmZWU4LCAweDczY2ExNjNmLAorCTB4YWVhN2YyN2EsIDB4NDFlNWRmZTIsIDB4YWY5ZDVjYmMsIDB4NDJiNmZkZmEsIDB4NjFlZWZhYWIsIDB4OGZjZjdmM2EsCisJMHg3YTAyZjdkZiwgMHhmYWQ1ZmVhNywgMHgzZTcwMjY2MywgMHg0YmVmYWQwYywgMHg0M2M5ZTdlNSwgMHhjMmE5ZjFlMSwKKwkweDY4MTdjNGI3LCAweDI0MWYyMzY3LCAweDlkNDVmMTA3LCAweGE1NDJmODgzLCAweGQ2ZmU5NTQzLCAweGE3Mzg3MjE2LAorCTB4MGYzYTE1MWEsIDB4MDdlZWU3ZTcsIDB4NzY4NDJlYTMsIDB4YjRjY2UzODMsIDB4YmJlMzIwOGYsIDB4OWQ5ZWIwY2IsCisJMHhhMTJmYzI4MiwgMHg2M2JjYTBmYywgMHhjYTgzZjJhYywgMHgwZmJkMmEwNywgMHhlZmUzM2UwNiwgMHg4Yzc1ZjMzNCwKKwkweDVmNzlmYTk1LCAweDdiNDc1OTU4LCAweDg0NWRjNDZjLCAweDJiN2E4M2Q3LCAweDEyYjFhZGVhLCAweGIwNzkyZjdmLAorCTB4ZWRjZWY1ZDgsIDB4MTFiMTlmYzgsIDB4OTY5MThjMGUsIDB4ZjdkNGIyYWMsIDB4ZmUzZWM3MjUsIDB4OTU0M2MyYWYsCisJMHhhM2MwZmQwYiwgMHhjYTBjMWMxNywgMHgxMjNmYzNiYiwgMHg1MGU3MjQwZSwgMHhmNmZkMjM4ZSwgMHg4YzRlYjcyMSwKKwkweDE3NzYyOWIxLCAweGM3Y2ZkZmE3LCAweDFkMjI2ZmM4LCAweDFkNjYwODc1LCAweDMwZTg3YmRlLCAweGYwNWY3ZGY3LAorCTB4MGViZTc4ZTgsIDB4MTZkNjhlOTUsIDB4ZTMwNzRhMzIsIDB4OTZmNjg3M2EsIDB4YmE3YWVhN2IsIDB4MjMwNzc5ZDcsCisJMHhjNjFhOTdmOSwgMHhhY2YxNDNjYiwgMHhmZTQ4MmJhZSwgMHhhOTc5YzE5ZCwgMHhlYzBjNjRmMCwgMHhhMTI3ZTgxZiwKKwkweGU4ZWY0MmM2LCAweGUwZTg1NmRkLCAweGQzZjAzNmZjLCAweDY3YWMwZGNhLCAweDNlOGEzNWZkLCAweGY4OTQ0YzdiLAorCTB4N2U4YWM4N2IsIDB4YTQxNzJlZTksIDB4MWE5OTY1OTksIDB4Y2Y0NzQzYmQsIDB4ZWZlMTVmM2EsIDB4NTY0NWZiOGEsCisJMHhhMzcyZWY4ZCwgMHgxNzFjMWQ2ZiwgMHhlNWM4NTIxZiwgMHgzY2Y0ZDc0MywgMHgyZjEzZjcxMSwgMHhmNzQyZDVmYywKKwkweGVhMGMyZjhiLCAweGNlZjY4ZDNjLCAweDUzM2Q1Njg1LCAweDJhOWIyM2RlLCAweDhiOWRkZTgwLCAweGY5MGMxMzNlLAorCTB4ZjM5ZWYyYTUsIDB4MGVmN2U4ZTcsIDB4MTc2ZDdhODMsIDB4YjViZGEzNGYsIDB4NGNjNGFiNjgsIDB4ZWI2MDllNzgsCisJMHgzZDIwYjczNywgMHg0ZjQ1N2JjZCwgMHg1YjlhOTllNywgMHg3YTQ3MWUzNywgMHhjMDRmYjczYywgMHg4NWQ5NmZlNywKKwkweDMxYzUwMjdkLCAweDdjMjI1YjZiLCAweDBhNWZhODY2LCAweGM3N2ZhYzc5LCAweGUzYzdjOTZlLCAweDM5YzUzMjhiLAorCTB4M2VmMTk0NmEsIDB4YTBhNWQ3MzEsIDB4ZWI3MTNlNWQsIDB4ZmI4NDNhNWQsIDB4OGIwMmVkYmMsIDB4YjQ4ZjdlODMsCisJMHhkZjBjNzlkZSwgMHg4ZGI3MzkxZCwgMHgzNjZiMmZkZiwgMHhmOWMwZWU0NywgMHgwY2ViNGE5NywgMHhjMTdjYTA4MywKKwkweDYzNWU1ZTc2LCAweGY3MGNmZDI5LCAweGNkM2MxNzQzLCAweDYwYjNmZTI4LCAweDhmZjkwNDZmLCAweDFmZjQ1YWYzLAorCTB4OGVlYzgyMDUsIDB4ZmNkYTZkZWEsIDB4NDA2NmQ2N2MsIDB4NTNiMDU4M2EsIDB4MDdiMzVlNWIsIDB4NzlmMjQxZjIsCisJMHgyZjEyYTE1MCwgMHgyOWIyY2UxOSwgMHhlM2MyZDI1ZSwgMHhlZjdjYWEwNywgMHhiOTdiNWY2ZCwgMHhkZTUwNmQxYywKKwkweDg5N2Y2NmZmLCAweDVmMGZmN2E1LCAweDIzZTkyNmY5LCAweDI5OTdjZjBiLCAweGZmOTAzM2Y5LCAweDE3OGUxYmVhLAorCTB4Y2E3NTJlMTUsIDB4YjNjNTVmZDgsIDB4Njc1ODM2ZGMsIDB4MmI2NjJiZGQsIDB4MDc3NWVkZmEsIDB4NzllMjQ2Y2UsCisJMHgwMTYxNDViMCwgMHhiZDk5MTc3YSwgMHhkZWQxNTkyYywgMHhlNGJmNjA3YiwgMHgxZWQ2Zjg0NSwgMHhmYjg5M2YzNCwKKwkweDllMmY3NTk4LCAweGExM2M2MDMwLCAweGIyNjJkZjc0LCAweGVmMzEyNjU3LCAweGZkOWJmNDRhLCAweDg5ZGFjOGEyLAorCTB4N2RlOWRhOGUsIDB4Y2U3NzI2NWYsIDB4MWMyZTdlYzMsIDB4MGVkMTViMzAsIDB4NGZmOTdiYTgsIDB4ZmNjNzZlYzcsCisJMHhhN2RkMDI4YiwgMHgyMDE4OTBiYywgMHg1NWI3OTkzYSwgMHgwYzQzN2JhMiwgMHgxZWZjYjQyZCwgMHhhZjEwOTEzYSwKKwkweDI4YjZlNzg4LCAweDBlZTU4ZjdhLCAweDE5ZTIzYmM0LCAweDQ2NDhlZWYwLCAweGQwNzFlMTNhLCAweGY0NGI0Zjc5LAorCTB4ZDliNWI5YmQsIDB4ZjljZmY1ODAsIDB4YmM1NTdlMzgsIDB4MDk0YjRhOTcsIDB4ZTcxZTBiY2YsIDB4NzViODljZjgsCisJMHhhNDMwZTZkNywgMHg2NGY1YTc4MywgMHg3NjgxMWY4ZiwgMHgwZDNiNzg4MywgMHhlMTVlMTgxZCwgMHhjNWQ4NWZmZCwKKwkweGQzNzc5MWNmLCAweDM3NjMwMWMxLCAweDJmM2NlMDFkLCAweGE3YzAwNzQ3LCAweDQ3MmZmN2E0LCAweDk3ZTg5ZDA3LAorCTB4ZGRmZmJmOTIsIDB4MGVkMGM3YjksIDB4ODdlN2UwOGYsIDB4ZDUxYjc3ZDUsIDB4MmUwNzFhNzcsIDB4ZGYxNDc1M2MsCisJMHhiZmIzNGFlNywgMHhhNTc3NzY0MCwgMHhjNWRhOGJlZCwgMHg5ZDA5ZGU4YywgMHg0YmU3ODg1MywgMHgwMmJkYmYyNiwKKwkweGNhNzI3N2QxLCAweDJmMTRkOWIzLCAweDZkNzYwN2Q1LCAweDc0NDM3OGMxLCAweDNhYzdjNTM4LCAweGUxYjZjYjkyLAorCTB4YjZjNTk4ZmIsIDB4YzJmNjkzNmYsIDB4Y2VmZDE2M2EsIDB4ZWIxMWU3NDgsIDB4M2ZjNjdlMTUsIDB4YmVhMjA3M2MsCisJMHhhNzc4MGM0YiwgMHgwN2I1MTlmMywgMHhjNjVjZmM4ZCwgMHhlMWZiZWQzZSwgMHhjZTljZjExZCwgMHg5NTlkMGM0YiwKKwkweDgwNGZkMThiLCAweDQxMWM3MGZlLCAweGMyZTlmZWU2LCAweDQ1MWRmYzgzLCAweGE4NWM5ZmQ1LCAweDQ3YjhhN2JlLAorCTB4NjA4MzZlZmIsIDB4M2RlYTliN2QsIDB4NzA0Mjk4NTAsIDB4ZDYzNzFhMTgsIDB4NzM3OTc2ODEsIDB4MGQ4NGYzMzksCisJMHhjMTdkMjFmZCwgMHg1YzdjYTlkZiwgMHhiNWZhOGJmMSwgMHgxYmQxZmIyNywgMHhiY2M5MWRhYSwgMHgxNWRhZjcyMSwKKwkweDAxNDc3NWI5LCAweGJiZDFlMzlmLCAweDdiZTFkMGRmLCAweGY5M2IxZDhjLCAweDNmY2MzYmVmLCAweDA2MmFmMjA4LAorCTB4MWFmNTE5ZjcsIDB4ZDRhNzUzYjksIDB4MGZlOTE0ZmYsIDB4NWJkZTc2ZTAsIDB4MDUyODkyZmYsIDB4OGJmNzk3Y2IsCisJMHhhNzlhOWZiMSwgMHg0ODc1M2Y3OSwgMHhmNTU3MTQ1NywgMHhmZTgzMGU2ZiwgMHgzM2QzNmNiZSwgMHg0YzA1OTdlNCwKKwkweDIzZmIzNzkxLCAweDRiZDQ2ZTI4LCAweGJlZGNlY2JlLCAweDUwZjdjZDEyLCAweDc2MDg1YWJhLCAweDk0MjIyZTI2LAorCTB4NjlmNmVhYmUsIDB4YTg1ZDNkZWIsIDB4NjcwZTdiZWMsIDB4ZmZmOWUwZDcsIDB4OTBlMDMxYWYsIDB4YmE1ZjIzZDcsCisJMHg4ZTY3ZTlkZiwgMHg2ZWVmZTQyOCwgMHhlZjY4Mjg3ZCwgMHgwNTZiMGZlZiwgMHg3N2VhMGY5NiwgMHg2M2M0Y2ZiOCwKKwkweGVhZmU0YWE0LCAweGZlNGQ1NmRkLCAweGE2YmIzNjlhLCAweDFkZmJiNWZlLCAweGZlZDllZjlhLCAweDExZjdjZDBjLAorCTB4N2M5YTlkYzcsIDB4YTY4MTdiNWUsIDB4NjRmN2M4ZmUsIDB4YzA1NDdlNGQsIDB4ZTYzZmE5YTUsIDB4ZWY5MzViYmMsCisJMHhmNGY1ODRjYSwgMHhlOWE4Y2Y2MSwgMHhhOWEwYmIyNCwgMHhkNjYxZDkzZiwgMHg0NjVkN2ZmNCwgMHg2NWRmMjZiNCwKKwkweGQ4YTNlMDUxLCAweGZiZmRhYTk5LCAweGZmNmU0MmE3LCAweDdjMmFhNjg2LCAweDhlZDRlMTdmLCAweDM3ZWRmYWEzLAorCTB4MmJjNzY4MTQsIDB4NWRlM2I1OTMsIDB4MWRmMDVlMjksIDB4ZmY5ZTlkNDEsIDB4ZjhhNjAyN2UsIDB4MzRiYTA5ZmIsCisJMHg5ODA5ZmJmZSwgMHhjMDRmZGZjNywgMHgwMTNmN2YxNCwgMHhlNGRkN2ZjYiwgMHhhNmJlZmNhNCwgMHgwNGJmY2EwMiwKKwkweGY3ZTYwOTdlLCAweGU5ODI5ZjgzLCAweDYwOWZlMGNiLCAweDc3ZTBlNWY5LCAweGI4ZjcxOTRjLCAweGNhMWJlZTMyLAorCTB4NGUxNTNmYjgsIDB4YmRmZDI5NmYsIDB4ZWY4N2Y0YTMsIDB4M2RmNGVhMGQsIDB4Nzk1ZDZiZGYsIDB4ZTNlMDI1ZTIsCisJMHg3NDY3ZGIyMiwgMHgwODZlNTk1ZiwgMHhhMzFjNjI5NCwgMHhlMTg5NzVmMywgMHhmMWU2NjdmOSwgMHg0MThhNmYxZCwKKwkweGExODAzNmZkLCAweDlkZGNjNDlkLCAweDZlM2VlMjZmLCAweGFkNDM4YmRkLCAweDgxZWZhZTc4LCAweDA3Nzg3ZmZkLAorCTB4MjdkODVmYmYsIDB4ZjBlNmJjNTEsIDB4ZDg5MWIzZmUsIDB4YzI5Nzk3Y2YsIDB4ZTkwYTMwZTksIDB4N2NkN2M4NDUsCisJMHgwZDdlNTAyYiwgMHg2NzczYzc3YywgMHhjYTRhZjc5MywgMHhhNDZkNjdiYiwgMHg1NTRjYmVlZiwgMHgyZmJhM2VmMywKKwkweGQ3YjNkZWVkLCAweGI4NWE3ODgwLCAweDdmN2QyZjdiLCAweGYzNWFmODFkLCAweGNkNzZmNzdkLCAweDg3ZDYyYjc3LAorCTB4NDdjZWExNzQsIDB4ZjdjZjg1NzEsIDB4YTlmOWZkYWIsIDB4N2YyYTRkN2UsIDB4ZGRmM2ZlM2YsIDB4NDE4ZTU2NDcsCisJMHg2YWI3YmM3ZCwgMHgxN2I1YzYwMCwgMHgzYjExMzllZSwgMHhmMWYwMDdmYiwgMHg2NmNmNGJkNSwgMHgzZGE4MWVhMiwKKwkweGQxZTcyOTIwLCAweDA3YjU3Zjc4LCAweGNmOWU0YWY0LCAweDZmNzUyNmJmLCAweDYzMzc5ZTI5LCAweGIzYmEwNDdiLAorCTB4NGY1YjI1ZjQsIDB4ZWUxNmM0ZTcsIDB4NzI4MzU1ZGYsIDB4ZWRjNjYxNzYsIDB4YjU3ZjhhN2EsIDB4ODNiYzRhNDksCisJMHg2MzUwZDNiZiwgMHg2YmFlZGM2NSwgMHhkZjEyM2FmYiwgMHhkYjdkZmZhOSwgMHgxZWYxZWJkMSwgMHgyM2MxYzc3NCwKKwkweGM3NGM1ZWY0LCAweDRmZTM0OTNlLCAweGYxY2IxZDhkLCAweGY3MmM3NjNiLCAweDc3ZGNiZWZmLCAweDA5Y2YxMjI0LAorCTB4ODQ3NmQwM2UsIDB4YTdlNzVkYzMsIDB4ZjI1NjFmZjUsIDB4YmMxMjkwMWQsIDB4ZmViNDRiZjcsIDB4Y2QyNDk3ZjksCisJMHhjMGI4MDFlZiwgMHhjZGZiYTE3MSwgMHg3MDIyZDNmYiwgMHhmOGRiMjc1ZCwgMHg3ZDQwZDM3OCwgMHhkNTZhNzk1MCwKKwkweDFiZmY5YzFjLCAweGU1M2NmMmY2LCAweGRkZmEzMjdkLCAweGFlYWI4ZWExLCAweDc2NzI4NWRiLCAweGU3ZDQ5YjYxLAorCTB4ZDgzOWY3NzksIDB4OThlZmNjMmYsIDB4ZWJlOWQzOWUsIDB4MWIxYzJmYTksIDB4YzM3ZjcwMDQsIDB4NzQ5YjIwMzUsCisJMHg2MmFmNTI4NCwgMHhhNTliZDcyYywgMHhlYTJhNGYwNiwgMHg0NzE2OTM5MSwgMHhmZGY5ZDIwNCwgMHg4ODExYTFhZSwKKwkweDYyOThjM2RmLCAweGJhNDllYmI5LCAweDFmNjBiZTA3LCAweGI1YTRlZjFmLCAweGVlZTkxMjNkLCAweDUyMTFiZWU0LAorCTB4MmRjYmZlZjAsIDB4ZTliYTdhY2EsIDB4NWU2ZjFiYmIsIDB4NmZiNTUzYzIsIDB4ZTlmYjA1YmIsIDB4OWYyZjFmYzEsCisJMHhmNTRhZDYzNiwgMHhiODlkZjBkZiwgMHg5M2FjZWQwNSwgMHhjMGRkZmMxOSwgMHhmZTQ2MDY2MywgMHhkYzNkYzJmNSwKKwkweDcwNzkzZTRlLCAweGZiZTBmNmYwLCAweDdjMTRkMzU5LCAweDdkZjA2NDc0LCAweGY1ZmIwYmY1LCAweDc3ZGJiZDRhLAorCTB4M2QzZDRkMzEsIDB4ZWQ0ZWQ3YzcsIDB4MzNiZWFjN2MsIDB4NWU3ZGExMGYsIDB4Njc0NGI4ZjMsIDB4ZjVmNDZhMWQsCisJMHg0ZmZlYjhiMSwgMHg1N2U3NjliNywgMHg0NmI5YzBhZCwgMHgwZDhkOGZlZiwgMHgwMzlhZDdhMiwgMHgyMTYzN2NkZCwKKwkweGYyYTAzZjNhLCAweGE5ZjA4Mzg5LCAweDg2NjRmMWUyLCAweGU3NjVlN2M0LCAweGVjZDVmOGVmLCAweGRkNzQ0NWRkLAorCTB4ZTNjNGJlM2IsIDB4MzFlZjgzYjcsIDB4NzRiZTI5MzksIDB4YjU1YTdmMTksIDB4MmRmYzgyMWIsIDB4YmQyM2JkZmEsCisJMHg5ODllNjg2YiwgMHg5YzFmNjNkMiwgMHgxYTFmOTQyZSwgMHg5ODdlODc5YiwgMHg5M2NjZmM5YiwgMHgxODViZWMwYywKKwkweGViZWQxNmIzLCAweDg5MWRmYTI4LCAweGQ3NmUzOGNkLCAweGZmYmQzZDNlLCAweGIwM2E2YjVmLCAweGVmMjNkZjAwLAorCTB4YzBhMzAyNzIsIDB4ZTliNmJiYmMsIDB4NDY2N2RmYmIsIDB4NjI5ZTc3M2IsIDB4ZjBlYTdlZTcsIDB4N2ZhMDRiZTQsCisJMHhiNDg5OTc2YiwgMHg5MjNkOWFiZSwgMHg1YzE3Y2YwZiwgMHg1N2RlZTQ1MCwgMHg0MDZmOTM3YiwgMHgyZTM5YWQ3YSwKKwkweDlhM2ZkMTU5LCAweDcwZmM5NmQ4LCAweDc3ZTkyZTYxLCAweGRhZWI1N2IyLCAweGI3NWM5ZGI4LCAweDU4YmIyMDViLAorCTB4MTU2YTQzYjUsIDB4NjI5Y2U0M2IsIDB4ZDY1YjlmMDcsIDB4NTdlM2VkYzksIDB4ZWExMWI2MDQsIDB4N2IwMzBkYWQsCisJMHg5YjVkZTYwNCwgMHhkYWVjODUzOSwgMHhjYWRkNjk1YSwgMHg0NzNjMGVjMSwgMHhlNjFiYjVhNSwgMHhlNzQ0M2MxZiwKKwkweGQxY2VjMGFlLCAweGFkZGMyZjk0LCAweDY5YjZkN2NkLCAweGY4YmZhYWYzLCAweDNiNmVkOGQyLCAweDM3ZmEzODYzLAorCTB4MWM2MTUyMjUsIDB4MGE5YmMzZjIsIDB4ZTc3ZjU1NWUsIDB4ZjQ5YzZiY2UsIDB4ZTgwZjI3ZmIsIDB4YjhkNDUzMWMsCisJMHhkMTZiYzIwNCwgMHhjN2NjMmYyYiwgMHhjMjZhZmI3OSwgMHgzNDdmZTQ5YywgMHhkYWUwOTZmZSwgMHhkN2VlMTdmMSwKKwkweDFiZGVlMDc0LCAweGYwZTMzM2YyLCAweGU5Y2ZkOGVkLCAweGYwNWU5MTdjLCAweDJjYmFlZmUxLCAweGZkODE1ZDQyLAorCTB4MzJkZjA0OTksIDB4YmI3YjNiOGMsIDB4MjkzZTQ5MjIsIDB4Y2ExYTA4ZTcsIDB4NjMyYWZmYjksIDB4YjJhNjE4MGMsCisJMHhlN2Y3MmM3ZSwgMHgzOGVhZjU0MywgMHgwZThhNDA1ZCwgMHhiMTgxMTM5MiwgMHhkOGFmNTQyOSwgMHhkZTU3Y2ZjMCwKKwkweGZkMjRlMTE5LCAweGVkYzRjNDM2LCAweDZlMjYyMWY1LCAweDc1ZDEwZmFmLCAweDg1ZGZhMzJlLCAweDdkZjAyNDE4LAorCTB4Njk5N2FjOGUsIDB4OWQ2ZDYwZmYsIDB4MDQxN2Y2ODUsIDB4ZTEwZTk1N2IsIDB4OTU1MDc2YjEsIDB4ODg3ZGU5MGUsCisJMHhmZDAzMmRiNSwgMHg4YzVmMzUzYSwgMHhlYzdiMzNkZiwgMHg0NzhiNTI4MywgMHg4Y2VjZTM4NywgMHgwNDdkOTQxNywKKwkweDc0Y2I0ZmFlLCAweDkwNzQ3ZDU2LCAweDk5NmM2NTdlLCAweDNkZWE3ZTY2LCAweDdlN2Q5ZmNjLCAweGE1OWY5ODU2LAorCTB4ZWY4MDdlNjcsIDB4NzVmZjZjMjgsIDB4ODZlYzkzYWUsIDB4ZjdmNTMyYTQsIDB4MmU0OWVhMWEsIDB4MTJmY2YwYTgsCisJMHg3MDE4YmRlOCwgMHg4MTZjNzc0NSwgMHgxZGI2NmE2ZSwgMHg5NmIyZmYyMiwgMHg3NmM0YWZiNSwgMHgxZDdjOTFhNSwKKwkweGJlZmUwNmE1LCAweDRmMTg2OTUxLCAweGZjYjhlMzc1LCAweGE1ZDI1MTJhLCAweGMzZjZiNGUzLCAweDdlYjI3MTkxLAorCTB4YzYzYmE0MWMsIDB4ZjJlMzRkYjksIDB4Nzk5NTNmNjgsIDB4NmYwZDdkNjEsIDB4NDNkNjc3ZjMsIDB4MTM5NDNlZTUsCisJMHg3YzBkN2QzZCwgMHg0NjZmZjI4OCwgMHhkNTRkNjBiZCwgMHhiZjljNjlkOCwgMHg2ZWEyZjExNiwgMHhmNmY4NWEzZSwKKwkweGVhMjdjNDkzLCAweGM2NmFjYzM5LCAweGEzNjY3YmY5LCAweGM0MWE5YWQ5LCAweGRmOTA4YjE3LCAweGMzNzdkZWQwLAorCTB4MTM4YzdjYmYsIDB4ZWI2YWJmZjAsIDB4ZTk5NzNhN2MsIDB4YTJiNThjNjksIDB4ZmE0OGI3NWYsIDB4N2UyNWY2OTIsCisJMHhkYTJkZGYyYywgMHhjZGZiY2RhZiwgMHgxMWZkZmU5YywgMHgxOTQ5ZjkwMiwgMHgwZGUzYmFlMywgMHgwYTQ5OGZjNCwKKwkweDA4Zjc2YzdmLCAweGZiNjAwZTc0LCAweGNmMWUzYTc3LCAweDdlMjgxMGFiLCAweDM2MTQzMzc3LCAweDYyNDk5NGRhLAorCTB4YmEyMmVhYmQsIDB4ZTMzMzcyNGYsIDB4NGI1OTYzNDcsIDB4M2RiYmYyOGMsIDB4Nzk2ZmI0MzEsIDB4OWJlZWIyOTMsCisJMHgyODQzZmU3NSwgMHhkYmVhOGU1NywgMHg3NDllMzE5MiwgMHhjNGU0ZDZiNCwgMHgxYjU5Y2JmZSwgMHhjMTVhNmZiZCwKKwkweDE1M2QyOWRhLCAweDlmYTJmNzVlLCAweDIyMjZmNzNhLCAweDYzYzlmZGRkLCAweGY2ZDY3OGE0LCAweDUwMjIzYmU1LAorCTB4ZTViMTY3YmUsIDB4MDQ0ZmRjNTYsIDB4YjdjNmVjNTAsIDB4NzNiM2ZiMDEsIDB4ZDUxZGY3NDIsIDB4MmY2MGM0ZmIsCisJMHgwMjdkMjFjNywgMHgxZDIxMjdmZSwgMHhkOGRjMDc5YywgMHg1ZmI3N2E3MywgMHgyMzE3YzdmOCwgMHgyYzVmN2YxMSwKKwkweDViOTZlMTc5LCAweDlkNWZmYTE5LCAweGE4MmQ0N2U0LCAweDVkZjc0NjVmLCAweDMzZGE5YzgxLCAweGFhZjA3YmYyLAorCTB4NWJjNTVkZTIsIDB4ZjAxZDVlMzcsIDB4YjBhZjE4MmYsIDB4OTM4NDA0YTYsIDB4YzkxOTY1ZjQsIDB4ZTg5MTdmYTUsCisJMHhmMGU1ZDY5YywgMHhiYzdkYzJhYSwgMHgwZTNiOWY4MiwgMHg4YTE1Zjk3MCwgMHhiNzBmMTU2ZiwgMHg0M2Y1YmJlMiwKKwkweDIzNmVlZjQ5LCAweGM5MjMzMTNjLCAweGI4N2E1MGNiLCAweDMwODBiZTFjLCAweGM0ZDkzY2U5LCAweGExZjkyMzE4LAorCTB4NGYyZTQ1ODMsIDB4MjgxM2NmMDcsIDB4ZjMzYjc5NWUsIDB4ZjQ4MDEyYmMsIDB4ZjVmN2YwOTYsIDB4YzcwYWRlZmMsCisJMHhiNzgyODU1YiwgMHgyZmRmMzEzZiwgMHg3MWZmOTIzMiwgMHhjZTMyM2I3OCwgMHg2MDZlMzRkZCwgMHhlNTBkYmU2ZiwKKwkweGIyZjhmZWQzLCAweDM3ZmNlMWM2LCAweDE4ZmE1ZjU1LCAweDNmMDg2M2YyLCAweDM3NmJmMDg3LCAweDJmZjA5ZDFlLAorCTB4YzY5ZThmMDgsIDB4NmVjYmUyNDgsIDB4YWU3YjRiN2MsIDB4N2ZlMjJmNGMsIDB4NWZiNThlMzAsIDB4YWY5M2Y5ZjAsCisJMHg0NjA1NWY4MCwgMHhmOGY4YmZiZiwgMHg1NGRlYWQzOCwgMHhhNWMyYTZmMSwgMHgwN2UwYjhiZiwgMHgyYWQ0N2ZjYywKKwkweGU3MGFiZWQwLCAweDc0OGRiYmUzLCAweDU3ZGQ0M2ZmLCAweDVlNGZmNzUxLCAweDVjZjVjNzE5LCAweGQ4MDFmYTY4LAorCTB4YjU1ZmI4NGIsIDB4NDBlNGUzMjYsIDB4MTk0ZjMzYjQsIDB4ZmVmODdlZDQsIDB4ZGFjYjA3ZWYsIDB4YjZmN2YxMTMsCisJMHhlOWUyMjgzZSwgMHhkZGZmMDMyOSwgMHg4NzJmMzUwZiwgMHgwN2U0YjhmMSwgMHhjMjJmNDZmMSwgMHhmODYxMDNlOSwKKwkweDFmMzNkNDA0LCAweGNmNWNmNzA4LCAweDA3MDY3MWYzLCAweDI2ZTNjYmU2LCAweDUzOTAzZGUwLCAweDc5OGUzNTdhLAorCTB4ZjA3ZjEyYmYsIDB4OGY5NDc5ZjEsIDB4MDI3YWE2MmMsIDB4MDc0YTVkZmYsIDB4ZjYxZGRlZmUsIDB4MTczNjA4MmIsCisJMHhiYjgzZTdjYywgMHg5ZDdkZThkMiwgMHg3MThkN2RlZSwgMHg0NjdmMGVkYywgMHhkYzc3NDc1OSwgMHhlMjgxNWVmZiwKKwkweDM1NTEzM2ZlLCAweDg0YzRmZWUxLCAweDg3N2MyZTJkLCAweDQzN2RmNGYzLCAweGI0ZGY2OWIzLCAweGVhM2UzYjQxLAorCTB4OTc4YTY0ZmQsIDB4ZmVlN2UwNmUsIDB4YWJlYTc1MmUsIDB4Yjc1YmY0ODIsIDB4YzhiZTJkYmUsIDB4ZDFlNGU3Y2IsCisJMHhiZmE4OGNlZiwgMHg4NmRiMjc0NywgMHhjN2RjZmY3MywgMHhkNTUwZGY3ZiwgMHg1ZmM3NWQ2NywgMHg3M2M3MDRiMCwKKwkweGRmZTI1MzNmLCAweDBmZTFmOWRkLCAweGMzZWIwNTI2LCAweDRkYWQ0ZjQzLCAweDBkYWE3ZWM3LCAweDA1YTcyY2RlLAorCTB4YjFlZTg3N2YsIDB4YWE1YmI0MjQsIDB4NGU5NTVhOWYsIDB4MGY1M2Y0ZjYsIDB4NTQ1ZmEzYTQsIDB4YmE2ZDYzYmQsCisJMHgwZjcwZjk0YywgMHhiZTNhNjVmOSwgMHgxYjllMmZlZSwgMHhkNGYzZTc0NSwgMHhkY2NhZjZmZSwgMHgxZDMwYThhZiwKKwkweDNkYmQ0MTJhLCAweDU2YWZlYWU1LCAweGRhNDFmZWUwLCAweGZmYzUwMjdkLCAweDE1ZjZiMDY2LCAweDMzMmI2N2E4LAorCTB4MTZiMTVmMzgsIDB4ZTg3ZmM5MTMsIDB4Nzc2YmY2OGYsIDB4NGVjNWZmMGQsIDB4NjQ2ZjA3OTQsIDB4ODFjZmQ1OWMsCisJMHgyMDNlMTI3YSwgMHhkNWRmMTAzNSwgMHhkZmEzYWRmMiwgMHg3ZmNkNWMwOSwgMHg3ZWE3YjAyNywgMHg1NmZmZWQyMiwKKwkweDlkZTgxNzJkLCAweGZjZjUxOWFiLCAweGYxYTRmMzc3LCAweDU5YzcwNGQxLCAweGQxOGZiM2FiLCAweDc5NGI1N2ZiLAorCTB4NmZhMzE0ZjksIDB4NjdlYzQ5ZGYsIDB4M2ZkZjgxOGIsIDB4ZTA5NGVlNjQsIDB4YjI5MjcwZmIsIDB4OWQ3MzM4NWYsCisJMHhjYTcxN2JmMiwgMHg2MzliNjkzOCwgMHg1M2FmMDdiNywgMHg1OTFkZjY1MiwgMHhkZjI0NzdlYSwgMHgzMmYwNTA2ZSwKKwkweDU3ODllOTc1LCAweDU0ZWZkMGVkLCAweDFlM2NjN2JkLCAweGU5YjNiZmJlLCAweDYxOWZhYTVjLCAweDNhMzNmNDFjLAorCTB4ZjA2Njk4NWYsIDB4ZDcxZjNhM2MsIDB4NzE0OGMzYmQsIDB4YzFhY2RjZDIsIDB4Y2ZkNDFjNTIsIDB4MTFiNDUyNTksCisJMHhhYjRiOTlkMywgMHg3MjhmOWQxZSwgMHhjZDk0ZDViOCwgMHhmOWYyMzU4ZiwgMHgxMTRlMDgzNSwgMHhlZDkxZjRlNSwKKwkweGI4NDJjZWI3LCAweDdmYzRkZjlkLCAweGZiNjFhYmZmLCAweGMyZGRmYTMwLCAweGFmZGVlNGZlLCAweGY5ZWZmODlhLAorCTB4YTI2NGRkM2QsIDB4MmIyNmQ5ZjQsIDB4Y2ZlYmEzYzMsIDB4ZmYyOWQ5MzUsIDB4NGEwZTRkYWYsIDB4Y2QzY2Y0ZDksCisJMHhkN2Y0ZDhlZiwgMHhlMTRiODhkZiwgMHhiOTczYmJmNCwgMHgzYmY0Y2RhYiwgMHgzOTQ2MGQ4OCwgMHgyYmMwM2M3NSwKKwkweDFkZGFhYWVkLCAweGMyZWIyODBmLCAweGJkYjJiOGY3LCAweDBlMTExM2M5LCAweDNlMmMwZmI5LCAweDc1YjNhNjg2LAorCTB4N2Q5N2RmM2MsIDB4MjRlYWU0ZjMsIDB4MmM3N2Q2MTQsIDB4N2NjNGYzM2QsIDB4NzhmYjdlZjgsIDB4MjcwODM1ZjcsCisJMHgxNDhiYjZkMywgMHg2MDcyMzhhNywgMHhiYmMyMjU1NSwgMHhhZjkxODc3YSwgMHhmOWY3NTk0ZiwgMHg4ZjcxZTk0ZCwKKwkweDc1Zjk3YzYyLCAweDE2MGRjNTNkLCAweGM0ZjMzYjZkLCAweDg3N2YwYzAzLCAweDk4MjFiMTc3LCAweGJkNzRhZmRlLAorCTB4N2VlNzhmNTcsIDB4YWFmOGU1ZTYsIDB4NzhmYzM4M2YsIDB4NDQ5YjVhYmUsIDB4ZjgwM2IzZmMsIDB4ZjNhN2YzMmEsCisJMHhjYmE1YTJkNSwgMHhjNmNiN2UwOCwgMHhiODQyNmZiYiwgMHg5MzdiZDc5ZCwgMHgwZmNlOWY5MCwgMHhlZTc0NGIxZiwKKwkweGY4MjA0NTdkLCAweGRiYmM3MmFiLCAweGJmZTA1NmFmLCAweDU3NWI2YzUwLCAweGM3MjNkYzk4LCAweDA0Yjk2MWJmLAorCTB4M2UwNzQzZGYsIDB4ZjlmYjQ3NGQsIDB4M2ZlNWZkOWIsIDB4NjA5N2VlYjgsIDB4MTg2MWZlZGQsIDB4MWE1MTMzYWYsCisJMHhlMGRmM2RmYSwgMHhmNTg0ZWExOSwgMHgzZWYzZjdlNSwgMHg2YWYxZDJlOCwgMHg1MzlmOWZmYywgMHgzNjIxM2ZjMCwKKwkweGU2MjE5ZGY4LCAweGQ0Zjk4MjhkLCAweDYxZmMxNDFjLCAweDI2Y2ZhODU5LCAweGJmNDNhNjdkLCAweDhmY2ZmYzExLAorCTB4MTk4Y2U3MzQsIDB4OWY0ODI4ZmIsIDB4Y2JkZjM3ZjcsIDB4NGZkODc1YTUsIDB4MWRkYzhmNWEsIDB4ZmNjODllZjksCisJMHg1NDdiN2E0MSwgMHg4M2Y5OGMyMCwgMHg3M2Y2ZWRjNiwgMHhmYjQwY2NhMCwgMHgxNzI0ZjE0ZSwgMHgyZTc4NmYxMCwKKwkweGUxODFjMmVjLCAweDk5ZmYzMDNiLCAweGMyZjFlMzgxLCAweGYxNGY2MDRiLCAweGYyOTMxMDc4LCAweGQ5ZjlkNjdiLAorCTB4NTBiMjJmODEsIDB4YjdhZTg2Y2UsIDB4ODgyZmU1ZWUsIDB4YWZmNjZhM2UsIDB4ZmFkMDI4YmEsIDB4Y2JhNjdmMjcsCisJMHgwZmZhZmNiYSwgMHgxNjQ1ZjUzZCwgMHg3ZDMzZWZlMiwgMHhiNmZkMWYyMCwgMHgxNjQwODYwYiwgMHhiN2VlYTFlMiwKKwkweDU4ZmY5ZTVjLCAweGYzZTVhODM4LCAweGY3ZTgxYjU3LCAweDEzMDRlYjNhLCAweGY0ODk0OWQxLCAweDJlMWZjNTI1LAorCTB4ODdmMWU3MWMsIDB4OTI0ZjAzYmEsIDB4YzgzYWVkM2MsIDB4YzQ4YjQwZTMsIDB4OGMzOGQyZjYsIDB4Mzk5ZmQ0OWIsCisJMHhjYmFjZjI4NiwgMHhlODMxZmRjZSwgMHgyYjcxZGU5ZiwgMHg0MWU4YWExYywgMHhkZTEyNjc1ZCwgMHg0ZGQ4M2JmNywKKwkweDNjOGZkYzBmLCAweDBjM2JmYzhmLCAweGYzYTM2OWZiLCAweDljMmIyY2JkLCAweDM5ZjE1ZGExLCAweDdjMzBmM2YyLAorCTB4MjU3OTMwYmYsIDB4ZGY3OWY5ZDIsIDB4OGY5NDFjYzAsIDB4YWRmZDY2NmYsIDB4YmY4NmUyOGUsIDB4YjI3YmE3MGYsCisJMHhlNjkyNmRiNSwgMHgzYWY3Nzk5YywgMHg3MDNmMTI3YywgMHgyOWZiNTRjNCwgMHhlN2MxYzk5YywgMHgxYjhlMGNiOSwKKwkweDgzN2U2ZWM4LCAweGJhMmUxM2VmLCAweDdiMTNmMzhhLCAweGVkNTNmMzk5LCAweDdiMDY0M2YyLCAweDE1YmI3ZjUwLAorCTB4YzhlZDUyN2UsIDB4MWJmZmJmMjksIDB4ODViM2U1ZjEsIDB4ZDUwNGZkMzIsIDB4ZmZjN2E1NGYsIDB4NGNmN2ZlOWYsCisJMHgzMzQxMmZmZiwgMHg4MDAwNjNlYywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YWE1ZmYwMCwKKwkweDU1NTQ3MDBkLCAweGJkZWYzZTk2LCAweGRkMjc0OWZlLCAweDEyNDIxMzQ5LCAweDQyMDY4NDA4LCAweDAzNjIxYTg4LAorCTB4YzRkNjcyODEsIDB4MjA2ZWZjZTksIDB4NmIwMWJiMzMsIDB4OGQwOGM0MmQsIDB4NzQ5ZDI0MjIsIDB4NmFlY2U4ODIsCisJMHgwMjFhNmViOSwgMHgzNjc1NjRhYywgMHgxZDQ3NTk4YywgMHg4MDlmOWI0NywgMHg5NDc2ZWMyOCwgMHgwZGEwYzA0MCwKKwkweDZiYTJjYjBhLCAweDNhMjZhYTQ1LCAweGFiNTQ1YjU1LCAweGE2ZTAwZWFjLCAweGQ2M2I4MjIzLCAweDNiZTdiOGUyLAorCTB4MWRkZGI1ZWYsIDB4YTZlZDRmZTIsIDB4ZWU3ZGJhOGEsIDB4OWVlN2I5Y2YsIDB4Y2U3N2NlN2IsIDB4NTJiNDhmM2QsCisJMHg2YTIyY2EyMiwgMHgyYTA4Y2RjZiwgMHg2ZWE2ZmYwYSwgMHg2ZDQ0NDVhMiwgMHhmNjdmMjQyOSwgMHhhZjFmNDU0MSwKKwkweDdkYmM2NGQzLCAweDU4YzlhMzQwLCAweGNlMDhlYjkzLCAweDQ3NTQ0MTllLCAweDQ1OWEyNmRkLCAweDY1NDI4NGI0LAorCTB4MjliZjcxYTQsIDB4Nzk1YmNiZjIsIDB4NmQwZGZlYmMsIDB4NjE5MzE3NDEsIDB4YjA2YWFkMWIsIDB4N2FhNmQ1MTMsCisJMHgxMzE0MzYwYiwgMHhhYWNhYWIwZCwgMHgwYmNjNjI4NiwgMHg0YjlkMmU5NSwgMHg3ZWZlMGRmNCwgMHg4NzliNzQ0YSwKKwkweDJhMjI0Zjk5LCAweGY2MGYxNGQzLCAweDE2OWM5ZDFiLCAweDhiNWRjOWRjLCAweDQ5MWJmYjk3LCAweGVhYTc5ODRkLAorCTB4NTM0Zjk4ZjMsIDB4YTM4MjdjMDgsIDB4ZDgxZDRiMjUsIDB4OTk2NGI0NjgsIDB4OGVlZjNlMjMsIDB4MDdkNmQyMzcsCisJMHhkMmExNGUzMSwgMHhmOWY2MTIzYiwgMHg2ODg1OGY0YiwgMHhjYjE3ZDEyMSwgMHg2NTBmYWExNywgMHhkYWFlNzlmMiwKKwkweDUxMzM3NDAzLCAweDI5ZWQ3NjhkLCAweDcwZGRmNzg1LCAweDA1NTY0Y2NjLCAweGFmYmM2N2ZjLCAweDY3MDIzOWYyLAorCTB4ZmE2NWVhMzQsIDB4NzkwYTQ3NTIsIDB4NGJjZWNjYWMsIDB4MWJjZjBmMWUsIDB4ZDgyOTNiOTksIDB4M2Y2ZmU3YzUsCisJMHhlNzg5OTBhMCwgMHhlZWIxMWRiNSwgMHg2ZDc5ZTE0YywgMHg5YmI2NDhlNiwgMHhmMDM2ZGRmNywgMHhkYjg3OGIzYiwKKwkweDJjZjdmZWY2LCAweGNmNThiOWFlLCAweDllNDMzNjQ3LCAweDZkZmExNTE0LCAweDE3NGZmMjc3LCAweGNlNjA3ZjkxLAorCTB4M2YzMTc3ZmIsIDB4ZjQ0ZDY5ZmYsIDB4NjdiZDM3ZWQsIDB4MDVkN2Q2MjEsIDB4NWFmZDhmOWUsIDB4ODJkNWY2MGUsCisJMHg1NmYwYTU2ZSwgMHgzY2ZkZGEyNywgMHg5YmJmNDhhZiwgMHhlNWRmZjg2ZiwgMHhiMzg2NTc1YywgMHhmOGJlN2UzOCwKKwkweGE3YTI1ZDM5LCAweDY5ZjhiZDE4LCAweGQ2MDJmNzNlLCAweDQzZWI0NjhiLCAweDIxZWU1OTc2LCAweDZlNzE3Yjk2LAorCTB4MjUyZThlY2UsIDB4NWZhZTlkNzEsIDB4NGI2OTc2OGYsIDB4OWQxNWNiMGUsIDB4NjYxNWI4YTksIDB4NmMwZDRkMTUsCisJMHg4NTFmNDI3NiwgMHgxNzk3YjM4YSwgMHhiOTdmNWY0NywgMHg5YmY0MmQ3NCwgMHg5ZGJkMmMxMiwgMHg5MGI1MTdjZiwKKwkweGM3ZTJjN2RjLCAweDA0YjQ5YmI2LCAweDZhMGYxNjc5LCAweDM0NDNkYzFlLCAweGM5MGU5YTk1LCAweGUyYTc3YmJkLAorCTB4NjFiY2E4M2UsIDB4ZDYxMjY3YTksIDB4MmI3YmJlOGQsIDB4Nzk1NTE5NmYsIDB4NzNmYWZkYmQsIDB4Nzk3NWNhMDQsCisJMHhjOWE5YjBjZSwgMHhkNzcyMWI3ZCwgMHg4MGVkZTVlNywgMHhjNDAwZDlmZSwgMHhmYWE5NGU4ZSwgMHhjNzk1MWVmZSwKKwkweGJmZDdjN2U3LCAweDQ2YTc5YzY4LCAweGYwODljZTJiLCAweDlkYzUwNmY4LCAweDlmNjcxY2UzLCAweGY1ODdiYjU4LAorCTB4ZTllZjg2YmUsIDB4YjQ2ZmJlNDUsIDB4NjkzODc1MmYsIDB4ZmRhMjZjY2QsIDB4ZmY0MmI5MWQsIDB4ZGE0Yjg3NzMsCisJMHhmNDkxNDc1MCwgMHgxNmUxZDJiZiwgMHgyZGM3NjBmYSwgMHhmMGVhMWY0MiwgMHg1MWQwM2QwOCwgMHg4ZWQxZWQyNywKKwkweDAzM2ZlOTA2LCAweDcwOGNmZjUxLCAweGUyZWMyMGEwLCAweDRhNmQ3YzE0LCAweDFjY2UxZTljLCAweDllNDk0ZjQzLAorCTB4MjRhOTljM2YsIDB4OTkxNDUzZDMsIDB4M2NiODcwZmYsIDB4YTVmYTYwMTgsIDB4OTM5Y2E3MzIsIDB4YzBkMWNhOGQsCisJMHg0YjRlNjhmYSwgMHhiNDBjYTEyZiwgMHg2NzRhNDFmOSwgMHgwMzdiYjFiYiwgMHgzZmZiYjYxZSwgMHg0M2RhZWRkNCwKKwkweDRiY2ZjNTMzLCAweGYzM2FhZjMwLCAweGRiZjg0NmNlLCAweDY5MmIyY2U1LCAweDFlYzNjZmFjLCAweGRlNjNkZmVmLAorCTB4MDU1NWQzZTksIDB4NjgzZmQxZGIsIDB4ZmVmOTViNzMsIDB4OTRkYzU3ODcsIDB4ZmY0N2JkMDEsIDB4Yjc4ZDIzNGQsCisJMHhiMDVhMjhhZSwgMHgwYWU5OTRiOSwgMHhjYzc2MjJiYiwgMHhjODZlNmVmYywgMHg0ZmM2YmI2NiwgMHhiODM1NTNlNiwKKwkweGUzYTRkNGJhLCAweDAyYjY3Mzg0LCAweGMxYWViN2ZkLCAweGRiMjYxYjNlLCAweGZjNzk1ODE2LCAweDU3ZjdiOTRhLAorCTB4ZjdhNjI3ZDgsIDB4MGFlYjI5ZGEsIDB4ZDk4YmQwYmMsIDB4ZjNjYWJlZjUsIDB4YTY2ZWZmMDIsIDB4ODBmNzllNWUsCisJMHhkZjY0OWRjMywgMHg4MjJiY2I0NywgMHg0NWM1OWJiMCwgMHgwN2NmMzZiMywgMHhkOWJhNzY3ZiwgMHhmNWJiM2ZiYywKKwkweDUxZTdjODdlLCAweGMxNGU5NGQzLCAweGI4MDk5NzMxLCAweGYzZmRjNDEwLCAweDQ1MmU5NTNlLCAweDcxNmMzMGVjLAorCTB4N2Y5OTMyOTksIDB4MmIyMmI1MzgsIDB4MTk0ZWViYzAsIDB4YjhkYTdkZjcsIDB4N2RjNjMzZWYsIDB4ZDVmZGMzYmYsCisJMHhmZGNiYmVkYywgMHgxZmI4ODc2OCwgMHg5ZTk4OGFlZCwgMHhkMDg1YTM0ZCwgMHgwZGE3ZjA1ZiwgMHhlZjQ0NzkyZiwKKwkweGEzYTBmOWEzLCAweDNiMGU1YTY2LCAweGQzM2YwMjVjLCAweDgxYmYyN2YxLCAweDVjYTI3OGU1LCAweDAzNmVlMzk3LAorCTB4NmI2ZTg2N2YsIDB4ODVkN2QzZTgsIDB4ODU4YjRmODQsIDB4NGJmZmIwYmMsIDB4OWY2MDlmNTgsIDB4ZjVmMTc1YjEsCisJMHg5YmIyZWQyNCwgMHhlN2MyOTAyOSwgMHgyMGI2YzNhMCwgMHg4OTUzNDRmNCwgMHgwZWNiNWY4MCwgMHg2OTJlMDhlNywKKwkweGNmOGFiMzI5LCAweDAxN2E2NDRmLCAweGFiZDI5ZTA5LCAweGFlNWU3ZDU2LCAweDg1ZmMyMTZiLCAweDhjZmIyNDc1LAorCTB4OTk4MGQ1MDQsIDB4Mzk5ZmM0ZWQsIDB4ZjJjOTk4NTQsIDB4MTY3ZTE4OGUsIDB4NDlmZDBmYTMsIDB4Y2ZmNmZjMTMsCisJMHhkN2RiOWE2NywgMHhmZTdjZmQxNCwgMHgxMzg1NDM2NSwgMHhhOWIxNWViMCwgMHg0ZWZmMzNiMCwgMHhlMWFjZmM3ZCwKKwkweDA2OTlmZTg3LCAweDk0M2NlMzNmLCAweDdkYzdjYTEyLCAweGNlMWQ4ZjQ0LCAweDJlZTk4N2JmLCAweDFlYWQ3ODdiLAorCTB4ODI4NWMyMDcsIDB4NWMyZTE0ZGYsIDB4NDI1NDljMDYsIDB4ZDQ0ZGM4ZTcsIDB4YWY3ZGZjNzcsIDB4NDdkMDI3ZTksCisJMHhmZGQwNzllOCwgMHhkM2FmN2ZjNywgMHg2NzM5ZGY0YSwgMHg1MGE0ZjhlMiwgMHhmZDA0ZTJiZSwgMHgzZGY3NDE4MSwKKwkweDQwOWRjMTNmLCAweDg3Mzk1ZjliLCAweGRmYTZjYjcxLCAweDMzMjdhYjdiLCAweGE3ODM1ODZlLCAweGZmMzc2MDNiLAorCTB4ZWQ5N2RiYTIsIDB4ZDAyN2ZmNDAsIDB4MmIxMWNiNWIsIDB4MGYyYjJlYzEsIDB4MGFmNjdmZjQsIDB4M2JmNGI3OGYsCisJMHhhOGZiODBkYywgMHhiYmU4ODY2NywgMHhjN2RlYzhmMywgMHg3ZDIzNmY2MSwgMHhhZTg3ZjE2NiwgMHhmZTdiYmZmZCwKKwkweDI1Njc5OTExLCAweDM1YmQ1Yjk4LCAweGNmYmM0YTU0LCAweGUzN2ZlM2QxLCAweGI0OWY2MTM1LCAweDZmZDAxNWQwLAorCTB4MzkxNzljNTcsIDB4ZmVlYTI3ZWEsIDB4YTlmMTU0M2QsIDB4ZjViZDAwMzcsIDB4YzQ2YmY4MWYsIDB4MGEwY2ZhYjUsCisJMHg2NWU5NmVjMCwgMHhlNDY2NDdiZSwgMHg2YTg2ZjU3YiwgMHhjNzcxZTEyYSwgMHg2ZmYwNGFkMCwgMHg4NmVhYzk3YiwKKwkweGNkNWVmYTlkLCAweDVmMWY4NGE5LCAweGZiMTRjY2YzLCAweDNiYjFiZTZiLCAweDNkNTc3MTFmLCAweDIzY2Y2ZmJhLAorCTB4MjM2Nzk4NTksIDB4Yzk5ZWRiYzgsIDB4ZjU3YWM0NzYsIDB4ZGQxNjNiNjksIDB4NmJiN2Y3MmYsIDB4ZjcyMDZmY2YsCisJMHg2NGVkMWIzZSwgMHgwM2NjY2QzZSwgMHg5OWVmMzVmYiwgMHhkMWYwMGMxZCwgMHhlM2ZhZmI1ZSwgMHgxYTg3Yjg5NSwKKwkweGU4M2RiOWVkLCAweGE2ZGJiMmJmLCAweDJkNjcwZjQyLCAweGY4NzI4YzllLCAweGJiYjM1OWUxLCAweGJhMGNlYjE3LAorCTB4MmVhMjc4NzksIDB4NTZhNDVhNGYsIDB4M2JhYjJmZWUsIDB4MzdkNzcxMWYsIDB4ODBiZmUxZjEsIDB4Zjc1YWY1ZGMsCisJMHgzY2UyY2ZmMywgMHgzODg0YWQ3YiwgMHhlYjFmNjE3MSwgMHhlODVkZDc4ZCwgMHgyZGM3Y2YzNSwgMHg5ODczZWM4ZiwKKwkweDk0OTcyZjYwLCAweDgyY2Y5NWVlLCAweGVmM2VhZjdmLCAweGY0NWJhZDkyLCAweDQzOWRlODE5LCAweDExZTc4ZmQ4LAorCTB4NjUyNWYyZTIsIDB4ODVmZjUyN2IsIDB4NWUyNWJkZGUsIDB4OTdjNWRmZDYsIDB4MDliZDhiZWEsIDB4MTdmMzFiZjYsCisJMHg1MjZiNmVkZiwgMHg2MDI0MTQ3YywgMHhiZjE5ZjI1YywgMHgzYjIwMTljOSwgMHg4MzY2ZGZjNywgMHg5OWU4NzhiYywKKwkweGJlMjk2NzkxLCAweDczN2VlMmZlLCAweDZhM2FjMmQ4LCAweDk0ZTZkMmI2LCAweGY4M2ZiOGNjLCAweDBlYmNmZWYyLAorCTB4M2JhOWYzZTcsIDB4MzRjNzkxMGEsIDB4ODRhYzg4MmYsIDB4NTFiMDVjNWYsIDB4N2JjZjJlNGEsIDB4YmU1Zjg4ZGIsCisJMHgyYTk3MWI4MywgMHg0ZjJkZGYyNSwgMHhjN2VlODU0ZCwgMHgzOGY1NzM1NywgMHgxNmMwNzU3NiwgMHgxZGRmMjgwYywKKwkweDgzYTNmZThmLCAweDhlY2NlZjljLCAweDY3YWY3N2QzLCAweDdlNzEyOTdlLCAweGFkNDI1YjZmLCAweDJkYjdkZTZlLAorCTB4NzM4ZmM3NTMsIDB4ZTMzZjdmM2MsIDB4Y2ZiMTk1NTgsIDB4ZTc5Mjg3YWEsIDB4Mjk5MTUyZGYsIDB4ODk2NmQzZjYsCisJMHhjNjBlMjIxNCwgMHg4OGFjMmZmOCwgMHgxMGE0NWFlMSwgMHg1ZDc2MzU3OCwgMHhlMDEzZDIzZCwgMHhlMDhhY2JjOCwKKwkweGYyYTBlZjg4LCAweGE4NmU5NmExLCAweDRmYWUzYjM0LCAweGE4MjA0YTVmLCAweDBmN2Y4Yzk1LCAweDdiOGM4YmI5LAorCTB4NTVlZjVlNjAsIDB4ZGJlNTdlZTgsIDB4OThkOGYzNmYsIDB4MjQ2YTRiNGYsIDB4YWI1Mzc5MWQsIDB4N2M4ZTkyMjMsCisJMHg0NmE4ZTQ2OCwgMHhjYmViOGQzYiwgMHgxOTlmZjE4YSwgMHg0NjQ5YWZkZiwgMHhmNjY0M2ZiOCwgMHg4ZmRiYzZkOCwKKwkweDZmM2M0MzhmLCAweDJhYjM3ZTFkLCAweGZkZDBhOTNlLCAweDRkMjA2OWE2LCAweDY0NjcyM2Y2LCAweGU5YjZlYzExLAorCTB4Mzg3NWU0YjksIDB4MWZjMTMzYTcsIDB4NjU3NjA2NDcsIDB4OGZlMjEzN2IsIDB4YWEzYjkwY2YsIDB4MTM3ZTI4N2MsCisJMHg3Y2EzZmFmZCwgMHhhNTRmODFkOCwgMHhmNmFiMGFjZCwgMHg2NWIxYWYyMiwgMHgzYTI5NGQwYSwgMHhlNWIxYjAxZCwKKwkweGE3YjRiZWZiLCAweDVlMmU3ZWMyLCAweDFlM2YxNTZkLCAweDczODIyMjUxLCAweDBhYWUyN2I5LCAweDIzOTg4YzNlLAorCTB4Y2E4ZTczODIsIDB4MThmYzExZmYsIDB4MDk1OTEwOTksIDB4YjRhZGNhZGMsIDB4YzlmMTk2YWYsIDB4MWUyZTk1OTEsCisJMHhhMGMyYjJmZiwgMHgwM2U0OTFhNywgMHg1NzMyMjc4NSwgMHhiNWVhNGYwMywgMHgzNzExYjdkMSwgMHgwOWQ5OTc2OSwKKwkweDdiZTk4OTNmLCAweGEyMjdhMTlkLCAweDc4M2I4NmM3LCAweGIzNDEwZmZjLCAweDRlNjFmMTBiLCAweDBiZTQ2MmE1LAorCTB4YjVmOWY4OTYsIDB4OTA4ZDNmYjgsIDB4Zjg0MWMwZWIsIDB4ZGRkZDkzNjcsIDB4ZmRjMWEzMmIsIDB4YmMxZjIwYWYsCisJMHhlNWRkZGIzMywgMHgzMjZmNWViYSwgMHhjYWNhZTU4NywgMHhlZTJkNmFmYywgMHhmYmRkM2IyOSwgMHhkZmNjMTU4ZiwKKwkweDA3YzkxYzVmLCAweDRiYjViMWNlLCAweGRkN2I2YTFjLCAweDQ3ZmIxM2JhLCAweDgwN2JhM2NkLCAweGRlMWMxNzVmLAorCTB4OWY1ODJiMjcsIDB4YWRhMTk2YWQsIDB4NjdkMjJjYTUsIDB4YTQyOWM4ZTYsIDB4NmY2MDRiZjgsIDB4YmRiYTIzODIsCisJMHhiMmVmMTQ4ZCwgMHg1NjFlOWYwOCwgMHg5NzY3ZWIyYSwgMHg0Yjk0MGY3MSwgMHhhMWY2MDNiNCwgMHhlNmZjZjdlOCwKKwkweDAwZWZhYmMwLCAweDY2ODY0NjZmLCAweGY1OGY0ZTA5LCAweDRmMDMwYmE3LCAweDNlMzcwM2E2LCAweDk4MWVmOGUwLAorCTB4NjBmZmVmMTMsIDB4ZmEwYjVlZjUsIDB4YzNiOGJmOTcsIDB4OWVmNmUxMTIsIDB4YmJlN2M5Y2QsIDB4MGNmNmVkN2MsCisJMHg5ZTNkMGJmOCwgMHhlYzdiMGZkMCwgMHhlYWM3YTY0OSwgMHg0ZTE5NzYwNSwgMHhlODgwODNmMiwgMHgyOWM3OWNmZCwKKwkweDBlNTRiN2YyLCAweGRmMGY0MWI1LCAweGQ2OThjYmQyLCAweDYzMTNlODEyLCAweGE5ZjMzMWU4LCAweGNlMWZjZjQxLAorCTB4YjZmODQ4NzksIDB4NDMwZjBiNGUsIDB4Y2MwNzIzNmYsIDB4ZTRlZjdjMDQsIDB4N2Y3NDI2YjgsIDB4MWFlZjEwNWEsCisJMHhhZGM3MDBmNSwgMHgyMTZlM2QyYywgMHgwZmE0YjQ1ZSwgMHg4Y2JkYzRhZCwgMHg5ODlkNWJmNCwgMHhhN2M4ZTliZiwKKwkweGRiM2YzOGY5LCAweGRiY2UzZTYzLCAweDM2NzBlNDcyLCAweGY3OGRjZWMxLCAweDZjYzdjNzA0LCAweDFmZjRiNzhjLAorCTB4MjRiYmM2YzksIDB4ODZhYWRmZDYsIDB4NDcxNzIxMGEsIDB4NDdlMDEyYjgsIDB4ODVhZmRmYWMsIDB4OGI3ZjIxMGIsCisJMHhmMTgyNTQzMiwgMHhmOTk2ZTQyOCwgMHg0OWEwNmI0YywgMHhlOGFhZDFjZSwgMHgzNDQ3NGY3ZSwgMHhmN2IxZjljMSwKKwkweDZlODU1MWY2LCAweDI1MGY4Y2FmLCAweDFkMzcwN2M4LCAweGIxMTI1NGJkLCAweGQ5YTBmMWM3LCAweGU4MTM5NWMwLAorCTB4ZGZmZGQ2MmYsIDB4MDljMGM4YjksIDB4YmYwY2RhNWUsIDB4YmMyNzA3MWYsIDB4ZjVhM2RjMzEsIDB4YWU3ZGM4MTYsCisJMHhiNjNiOTc0MiwgMHgzYmNhZjg1ZSwgMHg2ZGUzMjAyMywgMHg5OTJhNWRhZiwgMHhjNjc1OGM1OSwgMHhhM2MwNGEzYywKKwkweDAxN2M3MTU5LCAweDBlMGFlNDBlLCAweGYzNjczMjZjLCAweDJiY2Y3Y2I5LCAweGQyNWU0ZWVlLCAweDk2YjFiOGRjLAorCTB4ZDMzYWQzYTcsIDB4NmJkMGI1ZmQsIDB4NWRlNDA1MTMsIDB4YjFhZTU2MzcsIDB4ODU3MGY0NzYsIDB4NTUzZWJmN2UsCisJMHhmNmZiOGY3ZiwgMHg5NjRlYzEyOCwgMHg3ZDYzMjJlYiwgMHg5YmMxN2NlZSwgMHg1ZDY3ZjAzMCwgMHhmODVhYzZmNSwKKwkweDdlNTk3ZGRmLCAweGY5YmJlMjRiLCAweGVkYWZmODg3LCAweGFkZDdhNjQ5LCAweDMzOWI1OGRmLCAweDFlZmI5ZjhlLAorCTB4MTI2YTdlZGEsIDB4ZDlhZmNmNWQsIDB4ZGIzNmEzYmIsIDB4NGM3ZjdkNzUsIDB4OThiNjhiZWUsIDB4NDllNjk1OWMsCisJMHhiZTU4ZmE4OSwgMHhiNzEyNzZiMSwgMHhhZmZlNTJlYiwgMHg3ZGNmZDBmYSwgMHg4YzM1ODhmMSwgMHhiNWZhY2JiOCwKKwkweGZkYjdmY2UwLCAweDA5MjViZDcxLCAweDVmODA3ZmI3LCAweDlkNmIwNTMzLCAweGZlNWJiZTMzLCAweDEyYWI2ZGIxLAorCTB4NGY4MDU2MWUsIDB4ZTJiZDVmZWMsIDB4MDkzN2VjNjcsIDB4MThhYTZkZmIsIDB4NWE2OGE3NTMsIDB4Mzc3OTFkM2QsCisJMHg0ZjRmNTc3OSwgMHg2ZDhjNTNhYywgMHhhOGE3MjgxOSwgMHg0OWJkODhiNywgMHhkMmI4N2VjYiwgMHg2MjNlOGUzZCwKKwkweGQ0YWU2ZmYzLCAweDg2NGQ5ZjY0LCAweDZmYTk0ZjFkLCAweDFlMTVlNjc5LCAweDUzY2NiOTdmLCAweDU1N2VjOTU2LAorCTB4YmY5MmE5YWUsIDB4YTZhN2RkOGYsIDB4ODYwZmNmNTIsIDB4ODBiZjFkYjIsIDB4Y2QwNzQ1M2QsIDB4Yjk0OWY4NGUsCisJMHg0ZjMzZWJhNiwgMHhmYzJlZmNiZCwgMHhlMWRiMmYzMSwgMHgzNTdlNjRlYSwgMHhiY2ZhNjk1NSwgMHhlYTI3MzY2MywKKwkweDVmNjNkMTQwLCAweGZmZTA3YmU1LCAweGE1Y2JlYzViLCAweGQzYjI2MmNlLCAweDk1M2YxZTY0LCAweDNkZjA1NzNiLAorCTB4YzZjN2NmYjYsIDB4N2FhNTY5M2UsIDB4NjQ1ZWQzYmUsIDB4NTMzYWZlZmUsIDB4M2FkYmUzYjEsIDB4YzUxYmU0OTMsCisJMHgxMmQ5YzE2OSwgMHhmODkwYmY4NywgMHhlODVjMWQxNiwgMHhmN2MwNWNkNCwgMHhkNmZlMWRhMCwgMHg2NzdmZjVmZSwKKwkweDBjOGYwZTIzLCAweDBiYmE2N2ZlLCAweGQzZWQ3NWI4LCAweGI2Y2ZkODc0LCAweDgxZDM4ZjgxLCAweDY2MDYyNzBmLAorCTB4MWQ5ZWQwMzksIDB4MWZkMDM5NzIsIDB4MTZiOGZiYWQsIDB4MzY4Y2JhZjMsIDB4OGIzMDY3NWUsIDB4ZjYzNmIxOWMsCisJMHgxM2Q1OGU3ZSwgMHhjZGQxZGUxMiwgMHg3M2FmNmJkMCwgMHg2MTRiMmZkYiwgMHg4MmRkYTllZiwgMHhjZThlZmM2MywKKwkweGQ3ODhmYzQ0LCAweGUzMzk1YzE5LCAweGViMTI2NWQ1LCAweGY1YjMwNTBjLCAweGQ0NWEwMzNhLCAweDdhY2MwYTE5LAorCTB4ZWEzNDAxOWQsIDB4Njc1MTY4MGMsIDB4MGNlYTNmNDAsIDB4MDA2NzUxYTAsIDB4NjgwMzNhOGQsIDB4YTJkMDE5ZDQsCisJMHgyYmZlODBjZSwgMHhiY2IxNmJhOCwgMHg1MGRlNGU1MSwgMHhlY2QxYWFkZiwgMHhmNDBmZmY4MiwgMHhmNWU0NDE2YSwKKwkweDc0ZDMxYzBmLCAweGM0MTI4NzdhLCAweGZiYzY3ZjdkLCAweGFmNDYwZTIzLCAweDI4YjA3NWU4LCAweGU3Nzk1M2M3LAorCTB4ZmJjYjM0MWYsIDB4NWVkYTFhMjAsIDB4ZDZmNzEzMzcsIDB4NTU3MWI5YWYsIDB4ZDkzNzExMTcsIDB4YTNjZGRiMTQsCisJMHg2YTFmNTEyNywgMHgxYmRjNTNlZiwgMHgyZTVmZTg1ZCwgMHg1YzFiNmM3MiwgMHhmYTIzN2VmOCwgMHhkNTZlY2Q3YiwKKwkweDlhYmFmYjg1LCAweDZmOTdmYThkLCAweDU4ZWE1N2IwLCAweDJjYzczOWQ1LCAweDE1ZmJjZjcyLCAweGVmZmRlMWNhLAorCTB4NjRlZmVhYjAsIDB4MmNiZGM2YmYsIDB4OTU0NWIwZjcsIDB4MWQ2ZmRhM2MsIDB4Y2I0YmY3OTIsIDB4NGQ3MzhhOGIsCisJMHg3ZWRhMWU0MiwgMHgxMzgyZTdjYiwgMHg5ZGY0YjY5ZCwgMHhiMjFmZDc5MCwgMHhjNTI0ZDczOSwgMHg3ZGU0OGY1NywKKwkweGMxNzRmYzdlLCAweDQ1NDMzYzhkLCAweGE3ZDVhZjRjLCAweDdiNWVkZjkwLCAweGY5MjEzODAxLCAweGI0N2U0MjQ4LAorCTB4MzNmY2Q5ZDYsIDB4NWRhNDY3ZTQsIDB4N2VmY2UxMzMsIDB4NjQ0ZWU4N2UsIDB4NmQzZGQ2ZjksIDB4YjA5MjI4ZmUsCisJMHg5OTMwNzM3ZiwgMHg2ZGY2MGRmNiwgMHg5OWM4MjNjZCwgMHgwMzRhOGZkYywgMHg5NDNmYjJlMiwgMHg3NGFhMWZkYywKKwkweGM2OTI3ZDY0LCAweDNjZDFlNjNmLCAweGZmNzU1YmU0LCAweDNmNDBlNmI0LCAweGRiYjk3N2VmLCAweDYxY2FmOTJhLAorCTB4MjU3MGY3OGYsIDB4YjM0OWYxZmIsIDB4MjcyZmVhNDcsIDB4YmRlNGQ5OGYsIDB4OWNmYjdlNzUsIDB4OGQ0YmZhYTQsCisJMHgxZmVhNTUzNiwgMHhjNDhhY2MxYiwgMHhkZWU1MmJmMSwgMHhhYWNiYjA2MywgMHhlZWE1N2JiYSwgMHgxMGViOTU1MiwKKwkweGUxZDk4ZTdmLCAweDM3ODZmMmQxLCAweDVjYzM3N2MwLCAweDZhYmZkNDk3LCAweGUxMGJmNGFjLCAweGY3MmY3ZWM3LAorCTB4N2YxNjY4M2MsIDB4ODI1NGU5YWIsIDB4YzlhYmQzMmEsIDB4YWQ3ZjgxNmQsIDB4M2Q4YTc1NjIsIDB4Mjk4ZmVkOTksCisJMHg3OGFiMGZlYywgMHhiYjA0YzZhZiwgMHg5MTVkYjBkYSwgMHgxMDBhNDJiYywgMHg4Njk1ZTdhYywgMHhmZTBkNTczZSwKKwkweGZiMGE1N2ViLCAweDNkNTZiZGNiLCAweDU1NTNjZTBmLCAweGM1ZDc5ZmUxLCAweGRmZTc4YjcxLCAweGZjMGI1ZTQ3LAorCTB4NTVjNzFkNjYsIDB4NWY2NzFjYjQsIDB4MzdiZjcwOGYsIDB4OWViZTZhNmQsIDB4YzA3MmJiZTcsIDB4MzMxOWY1N2YsCisJMHg3MjZhNGYwMSwgMHg5NWU4NWU3ZSwgMHhmY2VkNWY3OCwgMHgwOTViZWY4NCwgMHg3MzdkYTVkZiwgMHhhOGUxZjdkMywKKwkweGM4NDkzZTg5LCAweDc1OWE0ZjZiLCAweGNhN2Q2MWZjLCAweGVjMTRlYjdiLCAweDVlM2VlYTU1LCAweDM0NzRjZjY5LAorCTB4OGNhMmJiNDksIDB4MzQwYmZmYzQsIDB4ZTAyZjZmM2QsIDB4NGE2NjcyYmIsIDB4ZWIwZmEyZGQsIDB4NmVlZGRhNmIsCisJMHgwYjg2M2ZlOCwgMHhiZWZjOGRiYiwgMHhlNzk2ZTU0MCwgMHg1YmQ1NGVlZCwgMHhkYzI5ZDMwYiwgMHhjYTViOGQzZiwKKwkweGU3NjE3ZTE0LCAweDVjNzFkNDdjLCAweDNkNGYzZmMyLCAweDdkMDVjMGJiLCAweDQzNzc2OTdjLCAweGM3MzkzNTFmLAorCTB4MzFkZGUxZTYsIDB4NzJmZmUwY2IsIDB4ZGM1NWMzNTksIDB4MDI5ZDI3OTcsIDB4NDM4ZjlmZDgsIDB4NWFkZmFjZGQsCisJMHg1ZDQxNDgxYywgMHg1MGQxZTQzZCwgMHgzOGE2M2YyNywgMHgxZWJmYWVmMSwgMHg3MTZmYjc0ZiwgMHgxNDBhY2ZjMiwKKwkweGI1YjdlYTI3LCAweGQ5MzVkZGE5LCAweGU2NzZiZmNjLCAweDljZjAzNzBjLCAweDYxZWE1NWYxLCAweDc2ZWFkYzIzLAorCTB4NTM1MDZiNzAsIDB4NmNhNmI1ZjQsIDB4ZmYwZGYzZDQsIDB4NTRhNmY3MjksIDB4ZDdmNzhhNGQsIDB4MWQxNDdlMWIsCisJMHhmMTFkMjJmYywgMHg2ZGQ0NDdmNSwgMHg4MDdmODM3NywgMHg4MzVlZWU2YywgMHhmZWEwZWMzZiwgMHhiZjUyNjlhNiwKKwkweGU1ZDFkOThkLCAweDYxM2IzOWZkLCAweGY0YWI1MzQ3LCAweGVmOGQ4ZDc1LCAweDBjNGY5MTk5LCAweGMxY2RlNmRkLAorCTB4N2NkNzJiZmUsIDB4Y2U1YjI1YmUsIDB4OGNiZDdlMzksIDB4YjgwMzM3NzEsIDB4MTY1ZWI2M2IsIDB4NDYzZGYxYzMsCisJMHg2Yjc4MWRmZCwgMHgyNmJhZWEzMiwgMHgzMjZiYWVhMywgMHhhMzI2YmFlYSwgMHhlYTMyNmJhZSwgMHhhZWEzMjZiYSwKKwkweGJhZWEzMjZiLCAweDZiYWVhMzI2LCAweDI2YmFlYTMyLCAweDk3YWUxM2E5LCAweDg3OGVkZGY2LCAweDA4ZWExZGE0LAorCTB4YmM0Mjc4YzgsIDB4YzdlYWI5YjgsIDB4NTUxNzVkZDUsIDB4YTU3NzUzOGQsIDB4YzQ4NjU3MTQsIDB4YmQ3YmY2NWQsCisJMHhjZWE2M2RkZSwgMHgyNmFlZmVjYSwgMHhlMGQ1N2JmOCwgMHg0MzFlN2I4NCwgMHg3MTYzZDI1ZSwgMHg2YjU0MzhiMywKKwkweDYwM2MxNmYxLCAweDU0ZjA3YzE3LCAweDhkNmY1YjhkLCAweGY1MmVjZmU5LCAweDliNjRjYmQ5LCAweDJjYTg3YjhmLAorCTB4NTE1MjY1OWEsIDB4MjNlZTM0YzcsIDB4ZGY4NGVmNTYsIDB4MWJmMDljZTAsIDB4ZDMxYmYwYjQsIDB4ZmNkZmI4ZWMsCisJMHg1ZGFlYzJkNiwgMHgwMTA5ZTdhYSwgMHg3MjZjMTNjOSwgMHgzMjM3NWJiZiwgMHgyZjdkMzBhZSwgMHhlNTcwOTMzOSwKKwkweGMyYjgzMWIzLCAweDkwMTU5YTBmLCAweDk1YTBlZDYzLCAweDIzM2Y3NGJhLCAweDM3MjU0ZmY4LCAweDBlM2Y5YzdmLAorCTB4OWM3NDg0Y2UsIDB4ZGExYTk2OTksIDB4YjVhNjdkODcsIDB4MTc5MWJhYTUsIDB4OWQ4YmJmYjMsIDB4ODhhNmRjOWQsCisJMHgwNmExYWZiZiwgMHhiYzFjNzdkOSwgMHg3YzllNDc0OSwgMHg3M2QxYzRlZiwgMHhmN2Y5ZTFiZiwgMHhmMjVkODNmZSwKKwkweGQ3OTNhZDlkLCAweGUwZmZmYTJlLCAweGFlOTU0ZDRkLCAweDg0Nzc1ZjhmLCAweDk2NTllNzdkLCAweDQzYjY1NGVhLAorCTB4MTZkNTU3OGUsIDB4YjhiYTkyMmEsIDB4NTBmZTJhOWEsIDB4NThhZTNkYTMsIDB4ZDM3N2EzODAsIDB4YjU3N2RjM2MsCisJMHhjODM5ZTFiNSwgMHgyZWZlYzM5OSwgMHhhMzJjZGZlZiwgMHg2YTFhNmJiZSwgMHhkOWY0Y2JkZSwgMHhiZTM3M2NlYywKKwkweDNkY2Q0ZGFiLCAweDgwMGIwNTQ0LCAweGIwYzU3NTQ3LCAweGFkZDRiM2FiLCAweDE5NjNkZDYwLCAweGJmODNiZmRlLAorCTB4YTdjYzVlZGMsIDB4OTZmZWUzNTYsIDB4YjNiNjk3NTMsIDB4Y2U2M2VlNGIsIDB4MzJmYmRjNDIsIDB4ZjUxZmFiYWIsCisJMHg5ZTZmMmQ4NiwgMHhiMmMyN2E5MCwgMHhkNDQyZDcwYywgMHg3OWJjYjYxYiwgMHg1YzczYTc1YSwgMHhlNTFiOGFmZCwKKwkweGFiYWIxM2IyLCAweDY2Zjg4MjdmLCAweDEwOWYzZWViLCAweDA5YTFmZDY3LCAweGMwZmI3NDQ5LCAweDA5ZjNlZWU0LAorCTB4M2YwNWFlNzEsIDB4M2Y0ZTlkZjgsIDB4YWZiODRjNTMsIDB4NWM5NDQzNTYsIDB4ZjIxZGJiZDUsIDB4NGJmZWViZjksCisJMHhhOGQzY2Y3ZiwgMHhhYWE3YzljNCwgMHg3NDljNWM3NCwgMHhlN2IwYzI4MiwgMHhmOTBlYzVkMSwgMHg3MTMzOTdmZSwKKwkweGRiZDQzY2ZkLCAweDEwYjVkOGE4LCAweGZkYWYzOGYzLCAweGUyZjhlYzM1LCAweGMxYTc5ZWFkLCAweDc3MzhjZjI3LAorCTB4MzU3OWYxMGUsIDB4MGQ5MGM3NTgsIDB4YmJlMzE5ZWQsIDB4ZGJkNTI5ZTQsIDB4M2QzNmI2ODgsIDB4MzU3ZTkyNjAsCisJMHg2ZGY2OGE1OCwgMHhmYTIwZjQzNSwgMHg4MTc2MmZkOSwgMHhmMzkzZWQ0ZiwgMHgzYTYyMmM2ZSwgMHhiNzlhMWFjZiwKKwkweGU5Nzg4ZWRlLCAweDczZmU4ZGQ5LCAweGVjNWU5ZTY1LCAweGRmZWViNjM3LCAweGU1OGY5YzY5LCAweGMzNzk4N2Q5LAorCTB4ZjllNGFhODUsIDB4NmRlYTM3YzMsIDB4NTVjMjJlY2MsIDB4MzcxZDBlM2EsIDB4OTNhY2E4ZmMsIDB4NThlN2ZiZTQsCisJMHhhNTVlMzlmYiwgMHhmZGY5NzgxYSwgMHg0N2JjYjM3MiwgMHg3ZTRjNGYyMCwgMHgwYTVkNWVlYSwgMHhhM2RlNTg3OSwKKwkweDYxYWZiYzg2LCAweDUyOTllYzljLCAweDdiNmVmOThmLCAweGM3N2VjODBkLCAweDdjNjUzYjBkLCAweGUzYWYzOTZjLAorCTB4YTY4NWI0YTMsIDB4MGRlNDA0ZTAsIDB4NGUwZDFlNTMsIDB4NzY1M2JjODAsIDB4ZGM1Y2RhOGMsIDB4YjUxODEwYmUsCisJMHhlMTc4N2YyMSwgMHhlODZkNDc2ZiwgMHg3NTQzYzE3ZiwgMHg1NmJmZTFlMywgMHhjMmRmMDlhZCwgMHgzZjU5NTFiMiwKKwkweDkyMWFmNzlkLCAweDA0ZThjMjc3LCAweDRkODU2ZmU0LCAweDZjMDI1OTZmLCAweGU2OWU3M2I3LCAweGI3ZjI5MzdkLAorCTB4ZDM2Mzg5MjIsIDB4ZmU5YTViMGQsIDB4ODdiMDRhYTgsIDB4ZTQ5MGNmZTksIDB4MjU5ZDU0YWIsIDB4ZGQxNGJlZTMsCisJMHgzZThmN2RmZiwgMHg2ZThlYzJhOCwgMHgwOWRjYjIwOCwgMHg2OWU3MzdmNiwgMHgxMjQ4ZTVkMywgMHg2YmFjYjBkZiwKKwkweGYzODM3MDMxLCAweDNmNzFhNGI1LCAweDNjYmU0NzMzLCAweGU0MjNjMGM1LCAweDM3OGM4ZDhmLCAweGJlYjdhNmZlLAorCTB4NzljOGJlNDIsIDB4OGM3ZTE4ZGMsIDB4MjYxYzMxNGQsIDB4ZWJlZjVkYzQsIDB4MjBmYzE3MTEsIDB4YmJkYWRlNzksCisJMHhmNzhhZDkxZSwgMHg3NmUzNTM2ZCwgMHhkNzhmYmM4YiwgMHhkYjQ1NmRmNCwgMHgyNTllZmFkYSwgMHg0Y2JmMjQ4NywKKwkweDY1ZjljZjlhLCAweDljOWQ3ZDEyLCAweDdiNjhlNDYzLCAweDM5YWRmM2YwLCAweDc2Y2JlY2UzLCAweDBlZDEyZDcwLAorCTB4Mzc0MzlhNGUsIDB4ZDI3YWJkZTAsIDB4NDgwZWVhOWYsIDB4MGZkZDA5MWMsIDB4NmFkOWQ5N2MsIDB4ZWNhZTIzNzcsCisJMHhkOGE1NTVmYSwgMHhhOWY1YjdkNywgMHhmYWE5OGYzMiwgMHhhNzUxZDk0NywgMHg1MjU0MGZjYywgMHg4N2U2ZmMxMSwKKwkweGUxZTAxMWRhLCAweDBjM2MyNGVjLCAweDg5NzJkZDQ4LCAweGRkYWU3MDQzLCAweGFkYjYwNzc4LCAweDEyM2U0YTcxLAorCTB4NTMzNmViZjMsIDB4OThhZGMzZTgsIDB4ZWY5MGU1OTcsIDB4NDViNzBjMTEsIDB4NmY3YzJjYTYsIDB4NGFlZWUyOWEsCisJMHgyZWNlMmJjOCwgMHg5ZDA0MTU5OSwgMHg4MzBhMTlkZCwgMHgxNWNmZThlZiwgMHhkNWM4ZWEzNywgMHhkNmFlM2E2OSwKKwkweDdiYWQwZGE4LCAweDM1MmRmYzc5LCAweDViZjFiODJjLCAweDZmZjMwN2UwLCAweDc2OTdhY2I3LCAweGIxNGNkOTQ1LAorCTB4MjkwYTVjZGIsIDB4NzA2N2ZmZmEsIDB4M2Q3YmM0MmQsIDB4NjdhZDNkZjYsIDB4MjBlZmIwNWIsIDB4ZjA0YWZiZGUsCisJMHg4ZmE4YjU5OSwgMHhlNDVkOTVmZSwgMHg4MGQ1MDY4OSwgMHgzM2QzY2Y5OSwgMHg3YmI3MDQ4MSwgMHhiODk0MmNlZSwKKwkweGM2ODZhNTEzLCAweDJjZmY5MWZiLCAweDZhM2E5NTRmLCAweDEzZDcwNGNmLCAweGQzZGE2ZWY4LCAweGY1ZTRhMzdjLAorCTB4YzdhNGZlODcsIDB4MjlhNWQxZmIsIDB4M2Q3MWU0NmUsIDB4NzExYjVjZjMsIDB4NWQ0NzllYWUsIDB4YTI5YWZlMzIsCisJMHhhMTNjMGJmMywgMHhhOTY3YTdlYiwgMHhlNjllY2U3ZSwgMHhjNTlmNzk0YywgMHg4NzY3YTFlZSwgMHhiZmJlMzI2NywKKwkweGU1YmMzMjU5LCAweDE4MDNhOGQ1LCAweDY2N2IxZmRmLCAweDRmYjczZjcwLCAweGRlNzcwZDI5LCAweDc1NzMzZTA3LAorCTB4Yjk5NDU3NzksIDB4ZGU0ZWRlZTQsIDB4N2IxM2UzNzksIDB4ZjE4NjdkNzQsIDB4ODk3ZGFjMWQsIDB4ZmVmZGU5MjMsCisJMHhjYjgwZmViZiwgMHgwMDIyMjBiMywgMHgwMDAwMDAwMAogfTsKIAogI2VuZGlmIC8qX19CTlgyWF9JTklUX1ZBTFVFU19IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCmluZGV4IGFlYTI2YjQuLmVkNjQ4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKQEAgLTIyLDE0ICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlICJibngyeF9yZWcuaCIKLSNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCi0jaW5jbHVkZSAiYm54MnhfaHNpLmgiCi0jaW5jbHVkZSAiYm54MnhfbGluay5oIgogI2luY2x1ZGUgImJueDJ4LmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU1VQUE9SVF9DTDczIDAgLyogQ3VycmVudGx5IG5vICovCiAjZGVmaW5lIEVUSF9ITEVOCQkJMTQKICNkZWZpbmUgRVRIX09WUkVIRUFECQkoRVRIX0hMRU4gKyA4KS8qIDggZm9yIENSQyArIFZMQU4qLwogI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MApAQCAtMTM5LDYgKzEzNCwyNiBAQAogI2RlZmluZSBQSFlfU0dNSUlfRkxBRwkJCTB4MgogI2RlZmluZSBQSFlfU0VSREVTX0ZMQUcJCQkweDQKIAorLyogKi8KKyNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSCQkweDIKKwkjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0xDIAkJMHg3CisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9DT1BQRVIJMHgyMQorCisjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9BRERSCQkweDgKKwkjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9QQVNTSVZFIDB4NAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRQkgMHg4CisjZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUgkJMHgxNAorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkUgCTE2CisjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19BRERSIAkJMHg0MAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSyAweDEKKyNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUgCQkyCisKKyNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX1VOS05PV04gCQkJMHgwCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9MQyAgIAkJCTB4MQorI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfQUNUSVZFX0NPUFBFUl9DQUJMRQkJMHgyCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRQkweDMKKworI2RlZmluZSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSAJCQkweDAwNDQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE1NCwxMyArMTY5LDM0IEBACiAJCShfYmFuayArIChfYWRkciAmIDB4ZikpLCBcCiAJCV92YWwpCiAKLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9waHlfbWRpbyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX1NUICsKLQkJICAgcGFyYW1zLT5wb3J0KjB4MTgsIDApOwotCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcGFyYW1zLT5wb3J0KjB4MTgsCi0JCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKKwl1MzIgZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwkvKiBTZXQgQ2xhdXNlIDIyICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVCArIHBhcmFtcy0+cG9ydCoweDEwLCAxKTsKKwlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWY4MDAwKTsKKwl1ZGVsYXkoNTAwKTsKKwlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWQwMDBmKTsKKwl1ZGVsYXkoNTAwKTsKKwkgLyogU2V0IENsYXVzZSA0NSAqLworCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfU1QgKyBwYXJhbXMtPnBvcnQqMHgxMCwgMCk7Cit9CitzdGF0aWMgdm9pZCBibngyeF9zZXRfcGh5X21kaW8oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IHBoeV9mbGFncykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwlpZiAocGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgeworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9TVCArCisJCQkgICBwYXJhbXMtPnBvcnQqMHgxOCwgMCk7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcGFyYW1zLT5wb3J0KjB4MTgsCisJCQkgICBERUZBVUxUX1BIWV9ERVZfQUREUik7CisJfSBlbHNlIHsKKwkJYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3MocGFyYW1zKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX0RFVkFEICsKKwkJCSAgIHBhcmFtcy0+cG9ydCoweDEwLAorCQkJICAgREVGQVVMVF9QSFlfREVWX0FERFIpOworCX0KIH0KIAogc3RhdGljIHUzMiBibngyeF9iaXRzX2VuKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBiaXRzKQpAQCAtMjc3LDggKzMxMywxMCBAQAogCQkJICAgcG9ydCo0LCAwKTsKIAl9CiAKLQkvKiBlbmFibGUgZW1hYyAqLwotCVJFR19XUihicCwgTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDEpOworCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwKKwkJICAgIEVNQUNfUlhfTU9ERV9SRVNFVCk7CisJYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19UWF9NT0RFLAorCQkgICAgRU1BQ19UWF9NT0RFX1JFU0VUKTsKIAogCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkgewogCQkvKiBjb25maWcgR01JSSBtb2RlICovCkBAIC00OTgsNyArNTM2LDcgQEAKIAl1ZGVsYXkoNTAwKTsKIAlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX1NFVCwKIAkJICAgIHZhbCk7Ci0JYm54Mnhfc2V0X3BoeV9tZGlvKHBhcmFtcyk7CisJYm54Mnhfc2V0X3BoeV9tZGlvKHBhcmFtcywgcGh5X2ZsYWdzKTsKIH0KIAogdm9pZCBibngyeF9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCkBAIC03NDksMTIgKzc4NywxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGJueDJ4X2dldF9lbWFjX2Jhc2UodTMyIGV4dF9waHlfdHlwZSwgdTggcG9ydCkKK3N0YXRpYyB1MzIgYm54MnhfZ2V0X2VtYWNfYmFzZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZXh0X3BoeV90eXBlLCB1OCBwb3J0KQogewogCXUzMiBlbWFjX2Jhc2U7CiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6Ci0JCWVtYWNfYmFzZSA9IEdSQ0JBU0VfRU1BQzA7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkvKiBBbGwgTURDL01ESU8gaXMgZGlyZWN0ZWQgdGhyb3VnaCBzaW5nbGUgRU1BQyAqLworCQlpZiAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkpCisJCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMwOworCQllbHNlCisJCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMxOwogCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCWVtYWNfYmFzZSA9IChwb3J0KSA/IEdSQ0JBU0VfRU1BQzAgOiBHUkNCQVNFX0VNQUMxOwpAQCAtNzcyLDExICs4MTUsMTIgQEAKIHsKIAl1MzIgdG1wLCBzYXZlZF9tb2RlOwogCXU4IGksIHJjID0gMDsKLQl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShleHRfcGh5X3R5cGUsIHBvcnQpOworCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGJwLCBleHRfcGh5X3R5cGUsIHBvcnQpOwogCiAJLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6CiAJICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgogCSAqLworCiAJc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwogCXRtcCA9IHNhdmVkX21vZGUgJiB+KEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CiAJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7CkBAIC04NDEsMTAgKzg4NSwxMSBAQAogCXUxNiBpOwogCXU4IHJjID0gMDsKIAotCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGV4dF9waHlfdHlwZSwgcG9ydCk7CisJdTMyIG1kaW9fY3RybCA9IGJueDJ4X2dldF9lbWFjX2Jhc2UoYnAsIGV4dF9waHlfdHlwZSwgcG9ydCk7CiAJLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6CiAJICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgogCSAqLworCiAJc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwogCXZhbCA9IHNhdmVkX21vZGUgJiAoKEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CiAJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCkpOwpAQCAtOTY3LDYgKzEwMTIsOCBAQAogCQkJICAgICAgKG1paV9jb250cm9sIHwKIAkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQpKTsKIAorCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7CisKIAkvKiB3YWl0IGZvciB0aGUgcmVzZXQgdG8gc2VsZiBjbGVhciAqLwogCWZvciAoaSA9IDA7IGkgPCBNRElPX0FDQ0VTU19USU1FT1VUOyBpKyspIHsKIAkJdWRlbGF5KDUpOwpAQCAtMTE1Niw2MiArMTIwMyw5IEBACiAJCQkgICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMLAogCQkJICAgICAgcmVnX3ZhbCk7CiAKLQkvKiBFbmFibGUgQ2xhdXNlIDczIEFuZWcgKi8KLQlpZiAoKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpICYmCi0JICAgIChTVVBQT1JUX0NMNzMpKSB7Ci0JCS8qIEVuYWJsZSBCQU0gU3RhdGlvbiBNYW5hZ2VyICovCisJLyogQ0w3MyBBdXRvbmVnIERpc2FibGVkICovCisJcmVnX3ZhbCA9IDA7CiAKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMSwKLQkJCQkgICAoTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4gfAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fU1RBVElPTl9NTkdSX0VOIHwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX05QX0FGVEVSX0JQX0VOKSk7Ci0KLQkJLyogTWVyZ2UgQ0w3MyBhbmQgQ0wzNyBhbmVnIHJlc29sdXRpb24gKi8KLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMywKLQkJCQkgICAgICAmcmVnX3ZhbCk7Ci0KLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDMsCi0JCQkocmVnX3ZhbCB8Ci0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwzX1VTRV9DTDczX0hDRF9NUikpOwotCi0JCS8qIFNldCB0aGUgQ0w3MyBBTiBzcGVlZCAqLwotCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAotCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwgJnJlZ192YWwpOwotCQkvKiBJbiB0aGUgU2VyRGVzIHdlIHN1cHBvcnQgb25seSB0aGUgMUcuCi0JCSAgIEluIHRoZSBYR1hTIHdlIHN1cHBvcnQgdGhlIDEwRyBLWDQKLQkJICAgYnV0IHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCB0aGUgS1IgKi8KLQkJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7Ci0JCQkvKiAxMEcgS1g0ICovCi0JCQlyZWdfdmFsIHw9IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LWDQ7Ci0JCX0gZWxzZSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlc1xuIik7Ci0JCQkvKiAxMDAwTSBLWCAqLwotCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMDAwTV9LWDsKLQkJfQotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKLQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsIHJlZ192YWwpOwotCi0JCS8qIENMNzMgQXV0b25lZyBFbmFibGVkICovCi0JCXJlZ192YWwgPSBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTjsKLQl9IGVsc2UgewotCQkvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KLQkJcmVnX3ZhbCA9IDA7Ci0JfQogCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAogCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKQEAgLTEzNDQsNDQgKzEzMzgsMjUgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgbWlpX2NvbnRyb2w7CiAJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9yZXN0YXJ0X2F1dG9uZWdcbiIpOwotCWlmIChTVVBQT1JUX0NMNzMpIHsKLQkJLyogZW5hYmxlIGFuZCByZXN0YXJ0IGNsYXVzZSA3MyBhbmVnICovCi0JCXUxNiBhbl9jdHJsOworCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBCQU0vQ0wzNyBhbmVnICovCiAKLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCi0JCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCi0JCQkJICAmYW5fY3RybCk7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQlNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAotCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAotCQkJCShhbl9jdHJsIHwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTiB8Ci0JCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfUkVTVEFSVF9BTikpOwotCi0JfSBlbHNlIHsKLQkJLyogRW5hYmxlIGFuZCByZXN0YXJ0IEJBTS9DTDM3IGFuZWcgKi8KLQkJdTE2IG1paV9jb250cm9sOwotCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkJICAgICAgJm1paV9jb250cm9sKTsKLQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgImJueDJ4X3Jlc3RhcnRfYXV0b25lZyBtaWlfY29udHJvbCBiZWZvcmUgPSAweCV4XG4iLAotCQkJIG1paV9jb250cm9sKTsKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICAgICAobWlpX2NvbnRyb2wgfAotCQkJCU1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8Ci0JCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pKTsKLQl9CisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCSAgICAgICZtaWlfY29udHJvbCk7CisJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAiYm54MnhfcmVzdGFydF9hdXRvbmVnIG1paV9jb250cm9sIGJlZm9yZSA9IDB4JXhcbiIsCisJCSBtaWlfY29udHJvbCk7CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCSAgICAgIChtaWlfY29udHJvbCB8CisJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKKwkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTikpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0aWFsaXplX3NnbWlpX3Byb2Nlc3Moc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCkBAIC0xNzI2LDcgKzE3MDEsMTEgQEAKIAkJICAgICgoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KIAkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHx8CiAJCSAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KLQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSkpIHsKKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAorCQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgfHwKKwkJICAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSkpIHsKIAkJCXZhcnMtPmF1dG9uZWcgPSBBVVRPX05FR19FTkFCTEVEOwogCiAJCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSB7CkBAIC0xNzcwLDM4ICsxNzQ5LDQ0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfc2dtaWlfdHhfZHJpdmVyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X2dtaWlfdHhfZHJpdmVyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUxNiBscF91cDI7CiAJdTE2IHR4X2RyaXZlcjsKKwl1MTYgYmFuazsKIAogCS8qIHJlYWQgcHJlY29tcCAqLwotCiAJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1JFR19CQU5LX09WRVJfMUcsCiAJCQkgICAgICBNRElPX09WRVJfMUdfTFBfVVAyLCAmbHBfdXAyKTsKIAotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19UWDAsCi0JCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsICZ0eF9kcml2ZXIpOwotCiAJLyogYml0cyBbMTA6N10gYXQgbHBfdXAyLCBwb3NpdGlvbmVkIGF0IFsxNToxMl0gKi8KIAlscF91cDIgPSAoKChscF91cDIgJiBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX01BU0spID4+CiAJCSAgIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfU0hJRlQpIDw8CiAJCSAgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUKTsKIAotCWlmICgobHBfdXAyICE9IDApICYmCi0JICAgIChscF91cDIgIT0gKHR4X2RyaXZlciAmIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLKSkpIHsKLQkJLyogcmVwbGFjZSB0eF9kcml2ZXIgYml0cyBbMTU6MTJdICovCi0JCXR4X2RyaXZlciAmPSB+TURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0s7Ci0JCXR4X2RyaXZlciB8PSBscF91cDI7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJaWYgKGxwX3VwMiA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1RYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKKwkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1RYMSAtIE1ESU9fUkVHX0JBTktfVFgwKSkgeworCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19UWDAsCi0JCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCB0eF9kcml2ZXIpOworCQkJCSAgICAgIGJhbmssCisJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCAmdHhfZHJpdmVyKTsKKworCQkvKiByZXBsYWNlIHR4X2RyaXZlciBiaXRzIFsxNToxMl0gKi8KKwkJaWYgKGxwX3VwMiAhPQorCQkgICAgKHR4X2RyaXZlciAmIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLKSkgeworCQkJdHhfZHJpdmVyICY9IH5NRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSzsKKwkJCXR4X2RyaXZlciB8PSBscF91cDI7CisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBiYW5rLAorCQkJCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsIHR4X2RyaXZlcik7CisJCX0KIAl9CiB9CiAKQEAgLTE5MDIsNiArMTg4NywyNSBAQAogCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4YTA0MCk7CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCisJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKKwkJCQkJICBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisKKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCQkvKiBVbnNldCBMb3cgUG93ZXIgTW9kZSBhbmQgU1cgcmVzZXQgKi8KIAkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwpAQCAtMTkxOSw5ICsxOTIzLDYgQEAKIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCQl7Ci0JCQl1MTYgZW1hY19iYXNlOwotCQkJZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMwIDoKLQkJCQkJR1JDQkFTRV9FTUFDMTsKIAogCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCiAJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLApAQCAtMTk0OSw2ICsxOTUwLDIzIEBACiAKIAkJCWJyZWFrOwogCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKworCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJLyogSFcgcmVzZXQgKi8KKwkJCWJueDJ4X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJICAgICAgIDE8PDE1KTsKKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWRcbiIpOwogCQkJYnJlYWs7CkBAIC0xOTgwLDYgKzE5OTgsMzEgQEAKIAl9CiB9CiAKKworc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCSAgICB1MzIgc2htZW1fYmFzZSwgdTMyIHNwaXJvbV92ZXIpCit7CisJRFAoTkVUSUZfTVNHX0xJTkssICJGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwKKwkJICh1MTYpKHNwaXJvbV92ZXI+PjE2KSwgKHUxNilzcGlyb21fdmVyKTsKKwlSRUdfV1IoYnAsIHNobWVtX2Jhc2UgKworCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJICAgIHBvcnRfbWJbcG9ydF0uZXh0X3BoeV9md192ZXJzaW9uKSwKKwkJCXNwaXJvbV92ZXIpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJICAgIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkciwKKwkJCQkgICAgdTMyIHNobWVtX2Jhc2UpCit7CisJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZmd192ZXIyKTsKKwlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwb3J0LCBzaG1lbV9iYXNlLAorCQkJCSh1MzIpKGZ3X3ZlcjE8PDE2IHwgZndfdmVyMikpOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwpAQCAtMTk4OCw3ICsyMDMxLDYgQEAKIAkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KIAkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCXUxNiBmd192ZXIxLCBmd192ZXIyOwogCiAJLyogTmVlZCB0byB3YWl0IDIwMG1zIGFmdGVyIHJlc2V0ICovCiAJbXNsZWVwKDIwMCk7CkBAIC0yMDI0LDE0ICsyMDY2LDEwIEBACiAJLyogV2FpdCAxMDBtcyAqLwogCW1zbGVlcCgxMDApOwogCi0JLyogUHJpbnQgdGhlIFBIWSBGVyB2ZXJzaW9uICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOwotCURQKE5FVElGX01TR19MSU5LLCAiODA3MiBGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwgZndfdmVyMSwgZndfdmVyMik7CisJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKKwkJCQlleHRfcGh5X3R5cGUsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CiB9CiAKIHN0YXRpYyB1OCBibngyeF84MDczX2lzX3Nucl9uZWVkZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCkBAIC0yMDQ5LDcgKzIwODcsNyBAQAogCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAweGM4MDEsICZ2YWwpOworCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnZhbCk7CiAKIAlpZiAodmFsICE9IDEpIHsKIAkJLyogTm8gbmVlZCB0byB3b3JrYXJvdW5kIGluIDgwNzMgQTEgKi8KQEAgLTIwODEsNyArMjExOSw3IEBACiAJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4YzgwMSwgJnZhbCk7CisJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKIAogCWlmICh2YWwgPiAwKSB7CiAJCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCkBAIC0yMDk3LDcgKzIxMzUsOCBAQAogCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgMHhjODIwLCAmdmFsKTsKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX1NQRUVEX0xJTktfU1RBVFVTLAorCQkJICAgICAgJnZhbCk7CiAJCSAgLyogSWYgYml0IFsxNF0gPSAwIG9yIGJpdCBbMTNdID0gMCwgY29udGludWUgb24gd2l0aAogCQkgICBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gKFhBVUkgd29yay1hcm91bmQgbm90IHJlcXVpcmVkLAogCQkgICAgYXMgdGhlc2UgYml0cyBpbmRpY2F0ZSAyLjVHIG9yIDFHIGxpbmsgdXApLiAqLwpAQCAtMjExNSw3ICsyMTU0LDcgQEAKIAkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCQkJZXh0X3BoeV9hZGRyLAogCQkJCQlNRElPX1BNQV9ERVZBRCwKLQkJCQkJMHhjODQxLCAmdmFsKTsKKwkJCQkJTURJT19QTUFfUkVHXzgwNzNfWEFVSV9XQSwgJnZhbCk7CiAJCQkJaWYgKHZhbCAmICgxPDwxNSkpIHsKIAkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkJCSAgIlhBVUkgd29ya2Fyb3VuZCBoYXMgY29tcGxldGVkXG4iKTsKQEAgLTIxMzMsOSArMjE3Miw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKLQkJCQkJICB1OCBleHRfcGh5X2FkZHIpCisJCQkJCSAgdTggZXh0X3BoeV9hZGRyLCB1MzIgc2htZW1fYmFzZSkKIHsKLQl1MTYgZndfdmVyMSwgZndfdmVyMjsKIAkvKiBCb290IHBvcnQgZnJvbSBleHRlcm5hbCBST00gICovCiAJLyogRURDIGdyc3QgKi8KIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LApAQCAtMjE4NSwxNyArMjIyMyw0OTYgQEAKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMCk7CiAKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmZndfdmVyMik7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICI4MDczIEZXIHZlcnNpb24gMHgleDoweCV4XG4iLCBmd192ZXIxLCBmd192ZXIyKTsKKwlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCXNobWVtX2Jhc2UpOworfQogCitzdGF0aWMgdm9pZCBibngyeF9iY204NzI2X2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJLyogTmVlZCB0byB3YWl0IDEwMG1zIGFmdGVyIHJlc2V0ICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBTZXQgc2VyaWFsIGJvb3QgY29udHJvbCBmb3IgZXh0ZXJuYWwgbG9hZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAxKTsKKworCS8qIE1pY3JvIGNvbnRyb2xsZXIgcmUtYm9vdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKKworCS8qIFNldCBzb2Z0IHJlc2V0ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTDIsCisJCSAgICAgICAweDczQTApOworCisJLyogQ2xlYXIgc29mdCByZXNldC4KKwlXaWxsIGF1dG9tYXRpY2FsbHkgcmVzZXQgbWljcm8tY29udHJvbGxlciByZS1ib290ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCisJLyogd2FpdCBmb3IgMTUwbXMgZm9yIG1pY3JvY29kZSBsb2FkICovCisJbXNsZWVwKDE1MCk7CisKKwkvKiBEaXNhYmxlIHNlcmlhbCBib290IGNvbnRyb2wsIHRyaXN0YXRlcyBwaW5zIFNTX04sIFNDSywgTU9TSSwgTUlTTyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAwKTsKKworCW1zbGVlcCgyMDApOworCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBvcnQsCisJCQkJZXh0X3BoeV90eXBlLAorCQkJCWV4dF9waHlfYWRkciwKKwkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCQl1OCBleHRfcGh5X2FkZHIsIHU4IHR4X2VuKQoreworCXUxNiB2YWw7CisJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIHRyYW5zbWl0dGVyIHR4X2VuPSV4IGZvciBwb3J0ICV4XG4iLAorCQkgdHhfZW4sIHBvcnQpOworCS8qIERpc2FibGUvRW5hYmxlIHRyYW5zbWl0dGVyICggVFggbGFzZXIgb2YgdGhlIFNGUCsgbW9kdWxlLikqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAmdmFsKTsKKworCWlmICh0eF9lbikKKwkJdmFsICY9IH4oMTw8MTUpOworCWVsc2UKKwkJdmFsIHw9ICgxPDwxNSk7CisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAgdmFsKTsKK30KKworCitzdGF0aWMgdTggYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2IGFkZHIsCisJCQkJICAgICB1OCBieXRlX2NudCwgdTggKm9fYnVmKSB7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHZhbCwgaTsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJaWYgKGJ5dGVfY250ID4gMTYpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJSZWFkaW5nIGZyb20gZWVwcm9tIGlzIgorCQkJICAgICIgaXMgbGltaXRlZCB0byAweGZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogU2V0IHRoZSByZWFkIGNvbW1hbmQgYnl0ZSBjb3VudCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0JZVEVfQ05ULAorCQkgICAgICAgKGJ5dGVfY250IHwgMHhhMDAwKSk7CisKKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBhZGRyZXNzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfTUVNX0FERFIsCisJCSAgICAgICBhZGRyKTsKKworCS8qIEFjdGl2YXRlIHJlYWQgY29tbWFuZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwsCisJCSAgICAgICAweDJjMGYpOworCisJLyogV2FpdCB1cCB0byA1MDB1cyBmb3IgY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spICE9CisJCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgIkdvdCBiYWQgc3RhdHVzIDB4JXggd2hlbiByZWFkaW5nIGZyb20gU0ZQKyBFRVBST01cbiIsCisJCQkgKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZCB0aGUgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IGJ5dGVfY250OyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX0JVRiArIGksICZ2YWwpOworCQlvX2J1ZltpXSA9ICh1OCkodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9NQVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUpCisJCQlyZXR1cm4gMDs7CisJCW1zbGVlcCgxKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X2dldF9zZnBfbW9kdWxlX3R5cGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICB1OCAqbW9kdWxlX3R5cGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggdmFsOworCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9VTktOT1dOOworCisJLyogRmlyc3QgY2hlY2sgZm9yIGNvcHBlciBjYWJsZSAqLworCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSLAorCQkJCSAgICAgICAxLAorCQkJCSAgICAgICAmdmFsKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBTRlArIG1vZHVsZSBFRVBST00iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0NPUFBFUjoKKwl7CisJCXU4IGNvcHBlcl9tb2R1bGVfdHlwZTsKKwkJLyogQ2hlY2sgaWYgaXRzIGFjdGl2ZSBjYWJsZSggaW5jbHVkZXMgU0ZQKyBtb2R1bGUpCisJCW9mIHBhc3NpdmUgY2FibGUqLworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJCSAgICAgICBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQUREUiwKKwkJCQkJICAgICAgIDEsCisJCQkJCSAgICAgICAmY29wcGVyX21vZHVsZV90eXBlKSAhPQorCQkgICAgMCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJIkZhaWxlZCB0byByZWFkIGNvcHBlci1jYWJsZS10eXBlIgorCQkJCSIgZnJvbSBTRlArIEVFUFJPTVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChjb3BwZXJfbW9kdWxlX3R5cGUgJgorCQkgICAgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBY3RpdmUgQ29wcGVyIGNhYmxlIGRldGVjdGVkXG4iKTsKKwkJCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9BQ1RJVkVfQ09QUEVSX0NBQkxFOworCQl9IGVsc2UgaWYgKGNvcHBlcl9tb2R1bGVfdHlwZSAmCisJCQlTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfUEFTU0lWRSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiUGFzc2l2ZSBDb3BwZXIiCisJCQkJCSAgICAiIGNhYmxlIGRldGVjdGVkXG4iKTsKKwkJCQkqbW9kdWxlX3R5cGUgPQorCQkJCSAgICAgIFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRTsKKwkJfSBlbHNlIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiVW5rbm93biBjb3BwZXItY2FibGUtIgorCQkJCSAgICAgInR5cGUgMHgleCAhISFcbiIsIGNvcHBlcl9tb2R1bGVfdHlwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9MQzoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJPcHRpYyBtb2R1bGUgZGV0ZWN0ZWRcbiIpOworCQkqbW9kdWxlX3R5cGUgPSBTRlBfTU9EVUxFX1RZUEVfTEM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gZGV0ZXJtaW5lIG1vZHVsZSB0eXBlIDB4JXggISEhXG4iLAorCQkJIHZhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJlYWQgdGhlIHJlbGV2YW50IGZpZWxkIGZyb20gdGhlIG1vZHVsZSAoIFNGUCsgKSwKKwlhbmQgdmVyaWZ5IGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoaXMgYm9hcmQgKi8KK3N0YXRpYyB1OCBibngyeF92ZXJpZnlfc2ZwX21vZHVsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQl1OCBtb2R1bGVfdHlwZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCAqc3RyX3AsICp0bXBfYnVmOworCXUxNiBpOworCisjZGVmaW5lIENPTVBMSUFOQ0VfU1RSX0NOVCA2CisJdTggKmNvbXBsaWFuY2Vfc3RyW10gPSB7IkJyb2FkY29tIiwgIkpEU1UiLCAiTW9sZXggSW5jIiwgIlBJQ09MSUdIVCIsCisJCSJGSU5JU0FSIENPUlAuICAgIiwgIkFtcGhlbm9sIn07CisJdTggYnVmW1NGUF9FRVBST01fVkVORE9SX05BTUVfU0laRV07CisJLyogUGFzc2l2ZSBDb3BwZXIgY2FibGVzIGFyZSBhbGxvd2VkIHRvIHBhcnRpY2lwYXRlLAorCXNpbmNlIHRoZSBtb2R1bGUgaXMgaGFyZHdpcmVkIHRvIHRoZSBjb3BwZXIgY2FibGUgKi8KKworCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCSAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJOT1QgZW5mb3JjaW5nIG1vZHVsZSB2ZXJpZmljYXRpb25cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobW9kdWxlX3R5cGUgIT0gU0ZQX01PRFVMRV9UWVBFX0xDKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiTm8gbmVlZCB0byB2ZXJpZnkgY29wcGVyIGNhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSW4gY2FzZSBvZiBub24gY29wcGVyIGNhYmxlIG9yIEFjdGl2ZSBjb3BwZXIgY2FibGUsCisJCXZlcmlmeSB0aGF0IHRoZSBTRlArIG1vZHVsZSBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIGJvYXJkKi8KKwlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJICAgICAgIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFLAorCQkJCSAgICAgICBidWYpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBWZW5kb3ItTmFtZSBmcm9tIgorCQkJICAgICIgbW9kdWxlIEVFUFJPTVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQ09NUExJQU5DRV9TVFJfQ05UOyBpKyspIHsKKwkJc3RyX3AgPSBjb21wbGlhbmNlX3N0cltpXTsKKwkJdG1wX2J1ZiA9IGJ1ZjsKKwkJd2hpbGUgKCpzdHJfcCkgeworCQkJaWYgKCh1OCkoKnRtcF9idWYpICE9ICh1OCkoKnN0cl9wKSkKKwkJCQlicmVhazsKKwkJCXN0cl9wKys7CisJCQl0bXBfYnVmKys7CisJCX0KKworCQlpZiAoISgqc3RyX3ApKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgTW9kdWxlIHZlcmlmaWVkLCAiCisJCQkJICAgICAiaW5kZXg9JXhcbiIsIGkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJRFAoTkVUSUZfTVNHX0xJTkssICJJbmNvbXBsaWFudCBTRlArIG1vZHVsZS4gRGlzYWJsZSBtb2R1bGUgISEhXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgdTggYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkJdTggbW9kdWxlX3R5cGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBvcHRpb25zW1NGUF9FRVBST01fT1BUSU9OU19TSVpFXTsKKwl1OCBsaW1pdGluZ19tb2RlOworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MTYgY3VyX2xpbWl0aW5nX21vZGU7CisJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUsCisJCQkJICAgICAgIG9wdGlvbnMpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBPcHRpb24gZmllbGQgZnJvbSIKKwkJCSAgICAiIG1vZHVsZSBFRVBST01cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbGltaXRpbmdfbW9kZSA9ICEob3B0aW9uc1swXSAmCisJCQkgIFNGUF9FRVBST01fT1BUSU9OU19MSU5FQVJfUlhfT1VUX01BU0spOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCisJCSAgICAgICZjdXJfbGltaXRpbmdfbW9kZSk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJDdXJyZW50IExpbWl0aW5nIG1vZGUgaXMgMHgleFxuIiwKKwkJIGN1cl9saW1pdGluZ19tb2RlKTsKKworCWlmIChsaW1pdGluZ19tb2RlICYmCisJICAgIChtb2R1bGVfdHlwZSAhPSBTRlBfTU9EVUxFX1RZUEVfUEFTU0lWRV9DT1BQRVJfQ0FCTEUpKSB7CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJNb2R1bGUgb3B0aW9ucyA9IDB4JXguU2V0dGluZyBMSU1JVElORyBNT0RFXG4iLAorCQkJIG9wdGlvbnNbMF0pOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJCSAgICAgICBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSk7CisJfSBlbHNlIHsgLyogTFJNIG1vZGUgKCBkZWZhdWx0ICkqLworCisJCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIG9wdGlvbnMgPSAweCV4LlNldHRpbmcgTFJNIE1PREVcbiIsCisJCQkgb3B0aW9uc1swXSk7CisKKwkJLyogQ2hhbmdpbmcgdG8gTFJNIG1vZGUgdGFrZXMgcXVpdGUgZmV3IHNlY29uZHMuCisJCVNvIGRvIGl0IG9ubHkgaWYgY3VycmVudCBtb2RlIGlzIGxpbWl0aW5nCisJCSggZGVmYXVsdCBpcyBMUk0gKSovCisJCWlmIChjdXJfbGltaXRpbmdfbW9kZSAhPSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSkKKwkJCXJldHVybiAwOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX0xSTV9NT0RFLAorCQkJICAgICAgIDApOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJCSAgICAgICAweDEyOCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDAsCisJCQkgICAgICAgMHg0MDA4KTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfTFJNX01PREUsCisJCQkgICAgICAgMHhhYWFhKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXU4IHZhbDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdGltZW91dDsKKwkvKiBJbml0aWFsaXphdGlvbiB0aW1lIGFmdGVyIGhvdC1wbHVnIG1heSB0YWtlIHVwIHRvIDMwMG1zIGZvciBzb21lCisJcGh5cyB0eXBlICggZS5nLiBKRFNVICkgKi8KKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNjA7IHRpbWVvdXQrKykgeworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIDEsIDEsICZ2YWwpCisJCSAgICA9PSAwKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGluaXRpYWxpemF0aW9uICIKKwkJCQkgICAgICJ0b29rICVkIG1zXG4iLCB0aW1lb3V0ICogNSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltc2xlZXAoNSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdTggYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggbW9kdWxlX3R5cGU7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlpZiAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgZGV0ZWN0aW9uIGlzIG5vdCByZXF1aXJlZCAiCisJCQkgICAgImZvciB0aGlzIHBoeVxuIik7CisJCXJldHVybiAwOworCX0KKworCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgcGx1Z2dlZCBpbi9vdXQgZGV0ZWN0ZWQgb24gcG9ydCAlZFxuIiwKKwkJIHBhcmFtcy0+cG9ydCk7CisKKwlpZiAoYm54MnhfZ2V0X3NmcF9tb2R1bGVfdHlwZShwYXJhbXMsCisJCQkJICAgICZtb2R1bGVfdHlwZSkgIT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byBnZXQgdmFsaWQgbW9kdWxlIHR5cGVcbiIpOworCQlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJICAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKKwkJCS8qIEluIGNhc2UgbW9kdWxlIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgaXQgdHJ5cyB0bworCQkJbGluayB1cC4gVGhlIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiBoZXJlIGlzIExSTSAvCisJCQlMSU1JVElORyBtb2RlIHdoaWNoIHNldCBhY2NvcmRpbmcgdG8gdGhlIG1vZHVsZS10eXBlKi8KKwkJCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIHJlYWQgbW9kdWxlLXR5cGUuIgorCQkJCSAgICAiUHJvYmFibHkgZHVlIHRvIEJpdCBTdHJldGNoaW5nLiIKKwkJCQkgICAgIiBQcm9jZWVkaW5nLi4uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChibngyeF92ZXJpZnlfc2ZwX21vZHVsZShwYXJhbXMsIG1vZHVsZV90eXBlKSAhPQorCQkgICAwKSB7CisJCS8qIGNoZWNrIFNGUCsgbW9kdWxlIGNvbXBhdGliaWxpdHkgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgdmVyaWZpY2F0aW9uIGZhaWxlZCEhXG4iKTsKKwkJLyogVHVybiBvbiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkJICBwYXJhbXMtPnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUdXJuIG9mZiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csCisJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkvKiBDaGVjayBhbmQgc2V0IGxpbWl0aW5nIG1vZGUgLyBMUk0gbW9kZSAqLworCWJueDJ4X2JjbTg3MjZfc2V0X2xpbWl0aW5nX21vZGUocGFyYW1zLCBtb2R1bGVfdHlwZSk7CisKKwkvKiBFbmFibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlICovCisJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgZXh0X3BoeV9hZGRyLCAxKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTMyIGdwaW9fdmFsOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJLyogU2V0IHZhbGlkIG1vZHVsZSBsZWQgb2ZmICovCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILAorCQkJICBwYXJhbXMtPnBvcnQpOworCisJLyogR2V0IGN1cnJlbnQgZ3BpbyB2YWwgcmVmZWxlY3RpbmcgbW9kdWxlIHBsdWdnZWQgaW4gLyBvdXQqLworCWdwaW9fdmFsID0gYm54MnhfZ2V0X2dwaW8oYnAsICBNSVNDX1JFR0lTVEVSU19HUElPXzMsIHBvcnQpOworCisJLyogQ2FsbCB0aGUgaGFuZGxpbmcgZnVuY3Rpb24gaW4gY2FzZSBtb2R1bGUgaXMgZGV0ZWN0ZWQgKi8KKwlpZiAoZ3Bpb192YWwgPT0gMCkgeworCisJCWJueDJ4X3NldF9ncGlvX2ludChicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFIsCisJCQkJICAgICAgcG9ydCk7CisKKwkJaWYgKGJueDJ4X3dhaXRfZm9yX3NmcF9tb2R1bGVfaW5pdGlhbGl6ZWQocGFyYW1zKQorCQkgICAgPT0gMCkKKwkJCWJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHBhcmFtcyk7CisJCWVsc2UKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKKwl9IGVsc2UgeworCQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJYm54Mnhfc2V0X2dwaW9faW50KGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVCwKKwkJCQkgICAgICBwb3J0KTsKKwkJLyogTW9kdWxlIHdhcyBwbHVnZ2VkIG91dC4gKi8KKwkJLyogRGlzYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgKi8KKwkJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgIGV4dF9waHlfYWRkciwgMCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDd4X2ZvcmNlXzEwRyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKQEAgLTIyMzksNyArMjc1Niw3IEBACiAJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4YzgwMSwgJnZhbCk7CisJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKIAogCWlmICh2YWwgPT0gMCkgewogCQkvKiBNdXN0bid0IHNldCBsb3cgcG93ZXIgbW9kZSBpbiA4MDczIEEwICovCkBAIC0yMzc3LDMxICsyODk0LDQwIEBACiAJCSAgICAgICBNRElPX0FOX0RFVkFELAogCQkgICAgICAgTURJT19BTl9SRUdfQURWX1BBVVNFLCB2YWwpOwogfQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X3ByZWVtcGhhc2lzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXUxNiBiYW5rLCBpID0gMDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAorCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfUlgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYMzsKKwkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1JYMS1NRElPX1JFR19CQU5LX1JYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19SWDBfUlhfRVFfQk9PU1QsCisJCQkJCSAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfcnhbaV0pOworCX0KKworCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfVFgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKKwkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19UWDEgLSBNRElPX1JFR19CQU5LX1RYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLAorCQkJCQkgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4W2ldKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAogCQkJCXN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKIAlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpIHsKLQkJdTE2IGJhbmssIHJ4X2VxOwotCi0JCXJ4X2VxID0gKChwYXJhbXMtPnNlcmRlc19jb25maWcgJgotCQkJICBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLKSA+PgotCQkJIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUKTsKLQotCQlEUChORVRJRl9NU0dfTElOSywgInNldHRpbmcgcnggZXEgdG8gMHgleFxuIiwgcnhfZXEpOwotCQlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1JYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYX0FMTDsKLQkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19SWDEtTURJT19SRUdfQkFOS19SWDApKSB7Ci0JCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcG9ydCwKLQkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkJICAgICAgYmFuayAsCi0JCQkJCSAgICAgIE1ESU9fUlgwX1JYX0VRX0JPT1NULAotCQkJCQkgICAgICAoKHJ4X2VxICYKLQkJCQlNRElPX1JYMF9SWF9FUV9CT09TVF9FUVVBTElaRVJfQ1RSTF9NQVNLKSB8Ci0JCQkJTURJT19SWDBfUlhfRVFfQk9PU1RfT0ZGU0VUX0NUUkwpKTsKLQkJfQorCQlpZiAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgorCQkgICAgKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKQorCQkJYm54Mnhfc2V0X3ByZWVtcGhhc2lzKHBhcmFtcyk7CiAKIAkJLyogZm9yY2VkIHNwZWVkIHJlcXVlc3RlZD8gKi8KIAkJaWYgKHZhcnMtPmxpbmVfc3BlZWQgIT0gU1BFRURfQVVUT19ORUcpIHsKQEAgLTI1MDYsMTIgKzMwMzIsNTMgQEAKIAkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgICBNRElPX1dJU19ERVZBRCwKIAkJCQkgICAgICAgTURJT19XSVNfUkVHX0xBU0lfQ05UTCwgMHgxKTsKKworCQkJLyogQkNNODcwNSBkb2Vzbid0IGhhdmUgbWljcm9jb2RlLCBoZW5jZSB0aGUgMCAqLworCQkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlLCAwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKLQotCQkJbXNsZWVwKDEwKTsKKwkJCS8qIFdhaXQgdW50aWwgZncgaXMgbG9hZGVkICovCisJCQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspIHsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZ2YWwpOworCQkJCWlmICh2YWwpCisJCQkJCWJyZWFrOworCQkJCW1zbGVlcCgxMCk7CisJCQl9CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNiBpcyBpbml0aWFsaXplZCAiCisJCQkJImFmdGVyICVkIG1zXG4iLCBjbnQpOworCQkJaWYgKChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpIHsKKwkJCQl1OCBpOworCQkJCXUxNiByZWc7CisJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQlyZWcgPSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwICsKKwkJCQkJCWkqKE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDEgLQorCQkJCQkJICAgTURJT19YU184NzA2X1JFR19CQU5LX1JYMCk7CisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgTURJT19YU19ERVZBRCwKKwkJCQkJCSAgICAgIHJlZywgJnZhbCk7CisJCQkJCS8qIENsZWFyIGZpcnN0IDMgYml0cyBvZiB0aGUgY29udHJvbCAqLworCQkJCQl2YWwgJj0gfjB4NzsKKwkJCQkJLyogU2V0IGNvbnRyb2wgYml0cyBhY2NvcmRpbmcgdG8KKwkJCQkJY29uZmlndWF0aW9uICovCisJCQkJCXZhbCB8PSAocGFyYW1zLT54Z3hzX2NvbmZpZ19yeFtpXSAmCisJCQkJCQkweDcpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgUlgiCisJCQkJCQkgIkVxdWFsaXplciB0byBCQ004NzA2IHJlZyAweCV4IgorCQkJCQkJICIgPC0tIHZhbCAweCV4XG4iLCByZWcsIHZhbCk7CisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJCQkgICAgICAgcmVnLCB2YWwpOworCQkJCX0KKwkJCX0KIAkJCS8qIEZvcmNlIHNwZWVkICovCiAJCQkvKiBGaXJzdCBlbmFibGUgTEFTSSAqLwogCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LApAQCAtMjU3OCw5ICszMTQ1LDk1IEBACiAJCQkJCSAgICAgICAweDEyMDApOwogCiAJCQl9Ci0KKwkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCWV4dF9waHlfdHlwZSwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbml0aWFsaXppbmcgQkNNODcyNlxuIik7CisJCQlibngyeF9iY204NzI2X2V4dGVybmFsX3JvbV9ib290KHBhcmFtcyk7CiAKKwkJCS8qIE5lZWQgdG8gY2FsbCBtb2R1bGUgZGV0ZWN0ZWQgb24gaW5pdGlhbGl6YXRpb24gc2luY2UKKwkJCXRoZSBtb2R1bGUgZGV0ZWN0aW9uIHRyaWdnZXJlZCBieSBhY3R1YWwgbW9kdWxlCisJCQlpbnNlcnRpb24gbWlnaHQgb2NjdXIgYmVmb3JlIGRyaXZlciBpcyBsb2FkZWQsIGFuZCB3aGVuCisJCQlkcml2ZXIgaXMgbG9hZGVkLCBpdCByZXNldCBhbGwgcmVnaXN0ZXJzLCBpbmNsdWRpbmcgdGhlCisJCQl0cmFuc21pdHRlciAqLworCQkJYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24ocGFyYW1zKTsKKwkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDApIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgZm9yY2VcbiIpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAweDQwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAweEQpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4NSk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJCSAgICAgICAweDQwMCk7CisJCQl9IGVsc2UgaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09CisJCQkJICAgIFNQRUVEX0FVVE9fTkVHKSAmJgorCQkJCSAgICgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCisJCQkJICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKSkpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgY2xhdXNlMzcgXG4iKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0FEViwgMHgyMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0NMNzMsIDB4MDQwYyk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0ZDX0xELCAweDAwMjApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwgMHgxMDAwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIDB4MTIwMCk7CisKKwkJCQkvKiBFbmFibGUgUlgtQUxBUk0gY29udHJvbCB0byByZWNlaXZlCisJCQkJaW50ZXJydXB0IGZvciAxRyBzcGVlZCBjaGFuZ2UgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDQpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCQkgICAgICAgMHg0MDApOworCisJCQl9IGVsc2UgeyAvKiBEZWZhdWx0IDEwRy4gU2V0IG9ubHkgTEFTSSBjb250cm9sICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMSk7CisJCQl9CisKKwkJCS8qIFNldCBUWCBQcmVFbXBoYXNpcyBpZiBuZWVkZWQgKi8KKwkJCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIFRYX0NUUkwxIDB4JXgsIgorCQkJCQkgIlRYX0NUUkwyIDB4JXhcbiIsCisJCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdLAorCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMSwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0pOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMiwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgogCQl7CkBAIC0yNjI3LDcgKzMyODAsNyBAQAogCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgMHhjYTEzLAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLAogCQkJCSAgICAgICZ0bXAxKTsKIAogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0yNjk0LDcgKzMzNDcsNyBAQAogCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgMHg4MzI5LCAmdG1wMSk7CisJCQkJCSAgICAgIE1ESU9fQU5fUkVHXzgwNzNfMl81RywgJnRtcDEpOwogCiAJCQkJaWYgKCgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCiAJCQkJICAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8yXzVHKSAmJgpAQCAtMjcwOCw3ICszMzYxLDcgQEAKIAkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCQkJCSBleHRfcGh5X2FkZHIsCiAJCQkJCSBNRElPX1BNQV9ERVZBRCwKLQkJCQkJIDB4YzgwMSwgJnBoeV92ZXIpOworCQkJCQkgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZwaHlfdmVyKTsKIAkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBZGQgMi41R1xuIik7CiAJCQkJCWlmIChwaHlfdmVyID4gMCkKIAkJCQkJCXRtcDEgfD0gMTsKQEAgLTI3MjMsNyArMzM3Niw3IEBACiAJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgMHg4MzI5LCB0bXAxKTsKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzgwNzNfMl81RywgdG1wMSk7CiAJCQl9CiAKIAkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3IChwYXNzaXZlIG1vZGUpIElJICovCkBAIC0yNzk4LDYgKzM0NTEsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQl7CisJCQl1MTYgZndfdmVyMSwgZndfdmVyMjsKIAkJCURQKE5FVElGX01TR19MSU5LLAogCQkJCSJTZXR0aW5nIHRoZSBTRlg3MTAxIExBU0kgaW5kaWNhdGlvblxuIik7CiAKQEAgLTI4MjcsNiArMzQ4Miw1MCBAQAogCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCiAJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7CisKKwkJCS8qIFNhdmUgc3Bpcm9tIHZlcnNpb24gKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmZndfdmVyMSk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIyLCAmZndfdmVyMik7CisKKwkJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24ocGFyYW1zLT5icCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlLAorCQkJCQkJKHUzMikoZndfdmVyMTw8MTYgfCBmd192ZXIyKSk7CisKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSJTZXR0aW5nIHRoZSBCQ004NDgxIExBU0kgY29udHJvbFxuIik7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDEpOworCisJCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICBNRElPX0FOX1JFR19DVFJMLCAmdmFsKTsKKwkJCXZhbCB8PSAweDIwMDsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7CisKKwkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCWV4dF9waHlfdHlwZSwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CisKIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlEUChORVRJRl9NU0dfTElOSywKQEAgLTI5MTAsMzggKzM2MDksNDMgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYvODcyNlxuIik7CisJCQkvKiBDbGVhciBSWCBBbGFybSovCiAJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX0FMQVJNLAorCQkJCSAgICAgICZ2YWwyKTsKKwkJCS8qIGNsZWFyIExBU0kgaW5kaWNhdGlvbiovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLAorCQkJCSAgICAgICZ2YWwxKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2Lzg3MjYgTEFTSSBzdGF0dXMgMHgleC0tPiIKKwkJCQkgICAgICIweCV4XG4iLCB2YWwxLCB2YWwyKTsKIAogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYgTEFTSSBzdGF0dXMgMHgleFxuIiwgdmFsMSk7CisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19SWF9TRCwKKwkJCQkgICAgICAmcnhfc2QpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCisJCQkJICAgICAgJnBjc19zdGF0dXMpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOwogCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfU0QsICZyeF9zZCk7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCQkgICAgICBNRElPX1BDU19SRUdfU1RBVFVTLCAmcGNzX3N0YXR1cyk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsICZ2YWwyKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsICZ2YWwyKTsKLQotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IHJ4X3NkIDB4JXgiCisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYvODcyNiByeF9zZCAweCV4IgogCQkJICAgIiAgcGNzX3N0YXR1cyAweCV4IDFHYnBzIGxpbmtfc3RhdHVzIDB4JXhcbiIsCiAJCQkgICByeF9zZCwgcGNzX3N0YXR1cywgdmFsMik7CiAJCQkvKiBsaW5rIGlzIHVwIGlmIGJvdGggYml0IDAgb2YgcG1kX3J4X3NkIGFuZApAQCAtMjk1MSwxOSArMzY1NSwzMSBAQAogCQkJZXh0X3BoeV9saW5rX3VwID0gKChyeF9zZCAmIHBjc19zdGF0dXMgJiAweDEpIHx8CiAJCQkJCSAgICh2YWwyICYgKDE8PDEpKSk7CiAJCQlpZiAoZXh0X3BoeV9saW5rX3VwKSB7CisJCQkJaWYgKGV4dF9waHlfdHlwZSA9PQorCQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgeworCQkJCQkvKiBJZiB0cmFuc21pdHRlciBpcyBkaXNhYmxlZCwKKwkJCQkJaWdub3JlIGZhbHNlIGxpbmsgdXAgaW5kaWNhdGlvbiAqLworCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkJCQkJICAgJnZhbDEpOworCQkJCQlpZiAodmFsMSAmICgxPDwxNSkpIHsKKwkJCQkJCURQKE5FVElGX01TR19MSU5LLCAiVHggaXMgIgorCQkJCQkJCSAgICAiZGlzYWJsZWRcbiIpOworCQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCiAJCQkJaWYgKHZhbDIgJiAoMTw8MSkpCiAJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwogCQkJCWVsc2UKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJfQogCi0JCQkvKiBjbGVhciBMQVNJIGluZGljYXRpb24qLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmdmFsMik7CiAJCQlicmVhazsKLQogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAkJewpAQCAtMzAxOCw3ICszNzM0LDcgQEAKIAkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIDB4Y2ExMywKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKIAkJCQkgICAgICAmdmFsMSk7CiAKIAkJCS8qIENoZWNrIHRoZSBMQVNJICovCkBAIC0zMDYzLDE3ICszNzc5LDE3IEBACiAJCQkJCX0KIAkJCQl9CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkJICAgICAgMHg4MzA0LAotCQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOworCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCiAJCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9uIDEuMS4yICovCiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0zMDkwLDcgKzM4MDYsNyBAQAogCQkJCQkgICAgICJhbl9saW5rX3N0YXR1cz0weCV4XG4iLAogCQkJCQkgIHZhbDIsIHZhbDEsIGFuMTAwMF9zdGF0dXMpOwogCi0JCQkJCWV4dF9waHlfbGlua191cCA9ICgoKHZhbDEgJiA0KSA9PSA0KSB8fAorCQkJCWV4dF9waHlfbGlua191cCA9ICgoKHZhbDEgJiA0KSA9PSA0KSB8fAogCQkJCQkJKGFuMTAwMF9zdGF0dXMgJiAoMTw8MSkpKTsKIAkJCQlpZiAoZXh0X3BoeV9saW5rX3VwICYmCiAJCQkJICAgIGJueDJ4XzgwNzNfaXNfc25yX25lZWRlZChwYXJhbXMpKSB7CkBAIC0zMTE4LDExICszODM0LDExIEBACiAKIAkJCQl9CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICAgIDB4YzgyMCwKLQkJCQkJCSAgICAgICZsaW5rX3N0YXR1cyk7CisJCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCisJCQkJCSAgICZsaW5rX3N0YXR1cyk7CiAKIAkJCQkvKiBCaXRzIDAuLjIgLS0+IHNwZWVkIGRldGVjdGVkLAogCQkJCSAgIGJpdHMgMTMuLjE1LS0+IGxpbmsgaXMgZG93biAqLwpAQCAtMzE1NiwxNyArMzg3MiwxNyBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiBTZWUgaWYgMUcgbGluayBpcyB1cCBmb3IgdGhlIDgwNzIgKi8KIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJCSAgICAgIDB4ODMwNCwKLQkJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CiAJCQkJaWYgKGFuMTAwMF9zdGF0dXMgJiAoMTw8MSkpIHsKIAkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CkBAIC0zMjI2LDcgKzM5NDIsNTMgQEAKIAkJCQkJICh2YWwyICYgKDE8PDE0KSkpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJCS8qIENsZWFyIExBU0kgaW50ZXJydXB0ICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIExBU0kgc3RhdHVzIHJlZyA9IDB4JXhcbiIsCisJCQkJIHZhbDEpOwogCisJCQkvKiBDaGVjayAxMEctQmFzZVQgbGluayBzdGF0dXMgKi8KKwkJCS8qIENoZWNrIEdsb2JhbCBQTUQgc2lnbmFsIG9rICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX1NELAorCQkJCSAgICAgICZyeF9zZCk7CisJCQkvKiBDaGVjayBQQ1MgYmxvY2sgbG9jayAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCisJCQkJICAgICAgJnBjc19zdGF0dXMpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIDEuYSA9IDB4JXgsIDEuMjAgPSAweCV4XG4iLAorCQkJCSByeF9zZCwgcGNzX3N0YXR1cyk7CisJCQlpZiAocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB7CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQl9IGVsc2UgeworCisJCQkJLyogQ2hlY2sgMTAwMC1CYXNlVCBsaW5rIHN0YXR1cyAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwgMHhGRkUxLAorCQkJCQkgICAgICAmdmFsMSk7CisKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsIDB4RkZFMSwKKwkJCQkJICAgICAgJnZhbDIpOworCQkJCURQKE5FVElGX01TR19MSU5LLCAiODQ4MSA3LkZGRTEgPSIKKwkJCQkJICAgICAiMHgleC0tPjB4JXhcbiIsIHZhbDEsIHZhbDIpOworCQkJCWlmICh2YWwyICYgKDE8PDIpKSB7CisJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJCX0KKwkJCX0KKworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCiAJCQkgICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKQEAgLTM0MjYsNyArNDE4OCw3IEBACiAJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCSAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAotCQkJICAgICAgICZjdHJsKTsKKwkJCSAgICAgICZjdHJsKTsKIAkJaWYgKCEoY3RybCAmICgxPDwxNSkpKSB7CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlJlc2V0IGNvbXBsZXRlZFxuXG4iKTsKIAkJCQlicmVhazsKQEAgLTM0NTIsOTEgKzQyMTQsMzkgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZXh0X3BoeV90eXBlID0gMDsKLQl1MTYgdmFsID0gMDsKLQl1OCBleHRfcGh5X2FkZHIgPSAwIDsKKwl1MzIgc3Bpcm9tX3ZlciA9IDA7CiAJdTggc3RhdHVzID0gMCA7Ci0JdTMyIHZlcl9udW07CiAKIAlpZiAodmVyc2lvbiA9PSBOVUxMIHx8IHBhcmFtcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXNwaXJvbV92ZXIgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkgICAgcG9ydF9tYltwYXJhbXMtPnBvcnRdLmV4dF9waHlfZndfdmVyc2lvbikpOworCiAJLyogcmVzZXQgdGhlIHJldHVybmVkIHZhbHVlIHRvIHplcm8gKi8KIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQlleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwotCiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAKIAkJaWYgKGxlbiA8IDUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBUYWtlIGV4dCBwaHkgb3V0IG9mIHJlc2V0ICovCi0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb25fZWYoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCS8qICB3YWl0IGZvciAxbXMgKi8KLQkJbXNsZWVwKDEpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmdmFsKTsKLQkJdmVyc2lvblsyXSA9ICh2YWwgJiAweEZGKTsKLQkJdmVyc2lvblszXSA9ICgodmFsICYgMHhGRjAwKT4+OCk7Ci0KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwKLQkJCSAgICAgICZ2YWwpOwotCQl2ZXJzaW9uWzBdID0gKHZhbCAmIDB4RkYpOwotCQl2ZXJzaW9uWzFdID0gKCh2YWwgJiAweEZGMDApPj44KTsKKwkJdmVyc2lvblswXSA9IChzcGlyb21fdmVyICYgMHhGRik7CisJCXZlcnNpb25bMV0gPSAoc3Bpcm9tX3ZlciAmIDB4RkYwMCkgPj4gODsKKwkJdmVyc2lvblsyXSA9IChzcGlyb21fdmVyICYgMHhGRjAwMDApID4+IDE2OworCQl2ZXJzaW9uWzNdID0gKHNwaXJvbV92ZXIgJiAweEZGMDAwMDAwKSA+PiAyNDsKIAkJdmVyc2lvbls0XSA9ICdcMCc7CiAKLQkJaWYgKCFkcml2ZXJfbG9hZGVkKQotCQkJYm54MnhfdHVybl9vZmZfc2YoYnAsIHBhcmFtcy0+cG9ydCk7CiAJCWJyZWFrOwogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JewotCQkvKiBUYWtlIGV4dCBwaHkgb3V0IG9mIHJlc2V0ICovCi0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb25fZWYoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJnZhbCk7Ci0JCXZlcl9udW0gPSB2YWw8PDE2OwotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZ2YWwpOwotCQl2ZXJfbnVtIHw9IHZhbDsKLQkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3Zlcih2ZXJfbnVtLCB2ZXJzaW9uLCBsZW4pOwotCQlicmVhazsKLQl9CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZ2YWwpOwotCQl2ZXJfbnVtID0gdmFsPDwxNjsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmdmFsKTsKLQkJdmVyX251bSB8PSB2YWw7Ci0JCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIodmVyX251bSwgdmVyc2lvbiwgbGVuKTsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHNwaXJvbV92ZXIsIHZlcnNpb24sIGxlbik7CiAJCWJyZWFrOwotCiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CiAJCWJyZWFrOwogCkBAIC0zNjM2LDYgKzQzNDYsMTQgQEAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJleHRfcGh5X2xvb3BiYWNrOiA4NzA2XG4iKTsKIAkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlBNQS9QTUQgZXh0X3BoeV9sb29wYmFjazogODcyNlxuIik7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJICAgICAgIDB4MDAwMSk7CisJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkJLyogU0ZYNzEwMV9YR1hTX1RFU1QxICovCiAJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKQEAgLTM5MDYsMTEgKzQ2MjQsMTMgQEAKIAogCS8qIGluaXQgZXh0IHBoeSBhbmQgZW5hYmxlIGxpbmsgc3RhdGUgaW50ICovCiAJbm9uX2V4dF9waHkgPSAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHx8Ci0JCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApIHx8Ci0JCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKTsKKwkJICAgICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdYU18xMCkpOwogCiAJaWYgKG5vbl9leHRfcGh5IHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkpIHsKKwkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAorCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHx8CisJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSkgfHwKKwkgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFRfUEhZKSkgewogCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKIAkJCWJueDJ4X3NldF9wYXJhbGxlbF9kZXRlY3Rpb24ocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOwogCQlibngyeF9pbml0X2ludGVybmFsX3BoeShwYXJhbXMsIHZhcnMpOwpAQCAtNDEwNCw2ICs0ODI0LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJQaHkgYWRkcmVzcyA9IDB4JXhcbiIsIHBhcmFtcy0+cGh5X2FkZHIpOwogCiAJCWJueDJ4X2xpbmtfaW5pdGlhbGl6ZShwYXJhbXMsIHZhcnMpOwogCQltc2xlZXAoMzApOwpAQCAtNDExMiw3ICs0ODMzLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCitzdGF0aWMgdm9pZCBibngyeF84NzI2X3Jlc2V0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1OCBleHRfcGh5X2FkZHIpCit7CisJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF84NzI2X3Jlc2V0X3BoeSBwb3J0ICVkXG4iLCBwb3J0KTsKKworCS8qIFNldCBzZXJpYWwgYm9vdCBjb250cm9sIGZvciBleHRlcm5hbCBsb2FkICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLCAweDAwMDEpOworCisJLyogRGlzYWJsZSBUcmFuc21pdHRlciAqLworCWJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsIDApOworCit9CisKK3U4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCSAgdTggcmVzZXRfZXh0X3BoeSkKIHsKIAogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwpAQCAtNDE1MCwyOCArNDg4NywzNyBAQAogCSAqLwogCSAvKiBjbGVhciBsaW5rIGxlZCAqLwogCWJueDJ4X3NldF9sZWQoYnAsIHBvcnQsIExFRF9NT0RFX09GRiwgMCwgaHdfbGVkX21vZGUsIGNoaXBfaWQpOwotCWlmIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB7Ci0JCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpKSB7Ci0JCQkvKiBIVyByZXNldCAqLwotCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKLQkJCQkJICBwb3J0KTsKLQorCWlmIChyZXNldF9leHRfcGh5KSB7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDgwNzMgcG9ydCAlZCBpbnRvICIKKwkJCQkgImxvdyBwb3dlciBtb2RlXG4iLAorCQkJCSBwb3J0KTsKIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCiAJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAogCQkJCQkgIHBvcnQpOwotCisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQl7CisJCQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJCS8qIFNldCBzb2Z0IHJlc2V0ICovCisJCQlibngyeF84NzI2X3Jlc2V0X3BoeShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X2FkZHIpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCS8qIEhXIHJlc2V0ICovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKKwkJCQkJICBwb3J0KTsKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAorCQkJCQkgIHBvcnQpOwogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJyZXNldCBleHRlcm5hbCBQSFlcbiIpOwotCQl9IGVsc2UgaWYgKGV4dF9waHlfdHlwZSA9PQotCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyA4MDczIHBvcnQgJWQgaW50byAiCi0JCQkJCSAibG93IHBvd2VyIG1vZGVcbiIsCi0JCQkJCSBwb3J0KTsKLQkJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAotCQkJCQlNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCi0JCQkJCQkgIHBvcnQpOwogCQl9CiAJfQogCS8qIHJlc2V0IHRoZSBTZXJEZXMvWEdYUyAqLwpAQCAtNDI0OCw3ICs0OTk0LDcgQEAKIAkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgewogCQkJaWYgKCEodmFycy0+cGh5X2ZsYWdzICYKIAkJCSAgICAgIFBIWV9TR01JSV9GTEFHKSkKLQkJCQlibngyeF9zZXRfc2dtaWlfdHhfZHJpdmVyKHBhcmFtcyk7CisJCQkJYm54Mnhfc2V0X2dtaWlfdHhfZHJpdmVyKHBhcmFtcyk7CiAJCX0KIAl9CiAKQEAgLTQzMzcsNiArNTA4Myw3IEBACiAKIAlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKIAkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSAmJgorCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpICYmCiAJICAgIChleHRfcGh5X2xpbmtfdXAgJiYgIXZhcnMtPnBoeV9saW5rX3VwKSkKIAkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzKTsKIApAQCAtNDM5OCw3ICs1MTQ1LDcgQEAKIAkJdTE2IGZ3X3ZlcjE7CiAKIAkJYm54MnhfYmNtODA3M19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSk7CisJCQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwgc2htZW1fYmFzZSk7CiAKIAkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLApAQCAtNDQzNCw3ICs1MTgxLDcgQEAKIAogCS8qIFBBUlQzIC0gY29tcGxldGUgVFhfUE9XRVJfRE9XTiBwcm9jZXNzLCBhbmQgc2V0IEdQSU8yIGJhY2sgdG8gbG93ICovCiAJZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCS8qIFBoYXNlMiBvZiBQT1dFUl9ET1dOX1JFU0VUKi8KKwkJLyogUGhhc2UyIG9mIFBPV0VSX0RPV05fUkVTRVQgKi8KIAkJLyogUmVsZWFzZSBiaXQgMTAgKFJlbGVhc2UgVHggcG93ZXIgZG93bikgKi8KIAkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAogCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKQEAgLTQ0NjksMTIgKzUyMTYsNTEgQEAKIAogfQogCisKK3N0YXRpYyB1OCBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKK3sKKwl1OCBleHRfcGh5X2FkZHI7CisJdTMyIHZhbDsKKwlzOCBwb3J0OworCS8qIFVzZSBwb3J0MSBiZWNhdXNlIG9mIHRoZSBzdGF0aWMgcG9ydC1zd2FwICovCisJLyogRW5hYmxlIHRoZSBtb2R1bGUgZGV0ZWN0aW9uIGludGVycnVwdCAqLworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfR1BJT19FVkVOVF9FTik7CisJdmFsIHw9ICgoMTw8TUlTQ19SRUdJU1RFUlNfR1BJT18zKXwKKwkJKDE8PChNSVNDX1JFR0lTVEVSU19HUElPXzMgKyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQpKSk7CisJUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPX0VWRU5UX0VOLCB2YWwpOworCisJYm54MnhfaHdfcmVzZXQoYnAsIDEpOworCW1zbGVlcCg1KTsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVF9NQVg7IHBvcnQrKykgeworCQkvKiBFeHRyYWN0IHRoZSBleHQgcGh5IGFkZHJlc3MgZm9yIHRoZSBwb3J0ICovCisJCXUzMiBleHRfcGh5X2NvbmZpZyA9IFJFR19SRChicCwgc2htZW1fYmFzZSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQlkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKSk7CisKKwkJZXh0X3BoeV9hZGRyID0KKwkJCSgoZXh0X3BoeV9jb25maWcgJgorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzI2X2NvbW1vbl9pbml0IDogZXh0X3BoeV9hZGRyID0gMHgleFxuIiwKKwkJCSBleHRfcGh5X2FkZHIpOworCisJCWJueDJ4Xzg3MjZfcmVzZXRfcGh5KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJCS8qIFNldCBmYXVsdCBtb2R1bGUgZGV0ZWN0ZWQgTEVEIG9uICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkJICBwb3J0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogdTggYm54MnhfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKQogewogCXU4IHJjID0gMDsKIAl1MzIgZXh0X3BoeV90eXBlOwogCi0JRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9jb21tb25faW5pdF9waHlcbiIpOworCURQKE5FVElGX01TR19MSU5LLCAiQmVnaW4gY29tbW9uIHBoeSBpbml0XG4iKTsKIAogCS8qIFJlYWQgdGhlIGV4dF9waHlfdHlwZSBmb3IgYXJiaXRyYXJ5IHBvcnQoMCkgKi8KIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRSgKQEAgLTQ0ODgsNiArNTI3NCwxMiBAQAogCQlyYyA9IGJueDJ4XzgwNzNfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJLyogR1BJTzEgYWZmZWN0cyBib3RoIHBvcnRzLCBzbyB0aGVyZSdzIG5lZWQgdG8gcHVsbAorCQlpdCBmb3Igc2luZ2xlIHBvcnQgYWxvbmUgKi8KKwkJcmMgPSBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7CisKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkgImJueDJ4X2NvbW1vbl9pbml0X3BoeTogZXh0X3BoeSAweCV4IG5vdCByZXF1aXJlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaAppbmRleCA0N2NiNTg1Li4xOWE4NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKy8qIENvcHlyaWdodCAyMDA4LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCiAgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQpAQCAtNjYsOCArNjYsNiBAQAogCS8qIERldmljZSBwYXJhbWV0ZXJzICovCiAJdTggbWFjX2FkZHJbNl07CiAKLQotCiAJLyogc2htZW0gcGFyYW1ldGVycyAqLwogCXUzMiBzaG1lbV9iYXNlOwogCXUzMiBzcGVlZF9jYXBfbWFzazsKQEAgLTc3LDcgKzc1LDYgQEAKICNkZWZpbmUgU1dJVENIX0NGR19BVVRPX0RFVEVDVAlQT1JUX0ZFQVRVUkVfQ09OX1NXSVRDSF9BVVRPX0RFVEVDVAogCiAJdTE2IGh3X2xlZF9tb2RlOyAvKiBwYXJ0IG9mIHRoZSBod19jb25maWcgcmVhZCBmcm9tIHRoZSBzaG1lbSAqLwotCXUzMiBzZXJkZXNfY29uZmlnOwogCXUzMiBsYW5lX2NvbmZpZzsKIAl1MzIgZXh0X3BoeV9jb25maWc7CiAjZGVmaW5lIFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKQkoZXh0X3BoeV9jb25maWcgJiBcCkBAIC04OSw2ICs4NiwxMiBAQAogCiAJLyogcGh5X2FkZHIgcG9wdWxhdGVkIGJ5IHRoZSBDTEMgKi8KIAl1OCBwaHlfYWRkcjsKKwl1MTYgeGd4c19jb25maWdfcnhbNF07IC8qIHByZWVtcGhhc2lzIHZhbHVlcyBmb3IgdGhlIHJ4IHNpZGUgKi8KKworCXUxNiB4Z3hzX2NvbmZpZ190eFs0XTsgLyogcHJlZW1waGFzaXMgdmFsdWVzIGZvciB0aGUgdHggc2lkZSAqLworCXUzMiBmZWF0dXJlX2NvbmZpZ19mbGFnczsKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCAoMTw8MCkKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRAkoMjw8MCkKIAkvKiBEZXZpY2UgcG9pbnRlciBwYXNzZWQgdG8gYWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCXN0cnVjdCBibngyeCAqYnA7CiB9OwpAQCAtMTI1LDggKzEyOCwxMSBAQAogLyogSW5pdGlhbGl6ZSB0aGUgcGh5ICovCiB1OCBibngyeF9waHlfaW5pdChzdHJ1Y3QgbGlua19wYXJhbXMgKmlucHV0LCBzdHJ1Y3QgbGlua192YXJzICpvdXRwdXQpOwogCi0vKiBSZXNldCB0aGUgbGluay4gU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGRyaXZlciBvciBpbnRlcmZhY2UgZ29lcyBkb3duICovCi11OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKTsKKy8qIFJlc2V0IHRoZSBsaW5rLiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gZHJpdmVyIG9yIGludGVyZmFjZSBnb2VzIGRvd24KKyAgIEJlZm9yZSBjYWxsaW5nIHBoeSBmaXJtd2FyZSB1cGdyYWRlLCB0aGUgcmVzZXRfZXh0X3BoeSBzaG91bGQgYmUgc2V0CisgICB0byAwICovCit1OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkgIHU4IHJlc2V0X2V4dF9waHkpOwogCiAvKiBibngyeF9saW5rX3VwZGF0ZSBzaG91bGQgYmUgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KIHU4IGJueDJ4X2xpbmtfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKm91dHB1dCk7CkBAIC0xNjMsNiArMTY5LDEwIEBACiAKIHU4IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X2NvbmZpZywKIAkJICAgICAgdTggZHJpdmVyX2xvYWRlZCwgY2hhciBkYXRhW10sIHUzMiBzaXplKTsKKy8qIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludCBzaG91bGQgYmUgY2FsbGVkIHVwb24gbW9kdWxlIGRldGVjdGlvbgorICAgaW50ZXJydXB0ICovCit2b2lkIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcyk7CisKIC8qIEdldCB0aGUgYWN0dWFsIGxpbmsgc3RhdHVzLiBJbiBjYXNlIGl0IHJldHVybnMgMCwgbGluayBpcyB1cCwKIAlvdGhlcndpc2UgbGluayBpcyBkb3duKi8KIHU4IGJueDJ4X3Rlc3RfbGluayhzdHJ1Y3QgbGlua19wYXJhbXMgKmlucHV0LCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKTsKQEAgLTE3MCw0ICsxODAsNSBAQAogLyogT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIGV4dGVybmFsIHBoeSBhZnRlciBwb3dlciB1cCAqLwogdTggYm54MnhfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKTsKIAorCiAjZW5kaWYgLyogQk5YMlhfTElOS19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKaW5kZXggMmUzNDZhNS4uMDBhNzhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwpAQCAtNTAsMTUgKzUwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvemxpYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJibngyeF9yZWcuaCIKLSNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCi0jaW5jbHVkZSAiYm54MnhfaHNpLmgiCi0jaW5jbHVkZSAiYm54MnhfbGluay5oIgorCiAjaW5jbHVkZSAiYm54MnguaCIKICNpbmNsdWRlICJibngyeF9pbml0LmgiCisjaW5jbHVkZSAiYm54MnhfZHVtcC5oIgogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40NS4yNyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDA5LzAxLzI2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNDguMTA1IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIwMDkvMDMvMDIiCiAjZGVmaW5lIEJOWDJYX0JDX1ZFUgkJMHgwNDAyMDAKIAogLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nICovCkBAIC03MywyNiArNzEsMzIgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7CiAKK3N0YXRpYyBpbnQgbXVsdGlfbW9kZSA9IDE7Cittb2R1bGVfcGFyYW0obXVsdGlfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGlfbW9kZSwgIiBVc2UgcGVyLUNQVSBxdWV1ZXMiKTsKKwogc3RhdGljIGludCBkaXNhYmxlX3RwYTsKLXN0YXRpYyBpbnQgdXNlX2ludGE7Ci1zdGF0aWMgaW50IHBvbGw7Ci1zdGF0aWMgaW50IGRlYnVnOwotc3RhdGljIGludCBsb2FkX2NvdW50WzNdOyAvKiAwLWNvbW1vbiwgMS1wb3J0MCwgMi1wb3J0MSAqLwotc3RhdGljIGludCB1c2VfbXVsdGk7Ci0KIG1vZHVsZV9wYXJhbShkaXNhYmxlX3RwYSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbSh1c2VfaW50YSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShwb2xsLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3RwYSwgImRpc2FibGUgdGhlIFRQQSAoTFJPKSBmZWF0dXJlIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9pbnRhLCAidXNlIElOVCNBIGluc3RlYWQgb2YgTVNJLVgiKTsKLU1PRFVMRV9QQVJNX0RFU0MocG9sbCwgInVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVmYXVsdCBkZWJ1ZyBtc2dsZXZlbCIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3RwYSwgIiBEaXNhYmxlIHRoZSBUUEEgKExSTykgZmVhdHVyZSIpOwogCi0jaWZkZWYgQk5YMlhfTVVMVEkKLW1vZHVsZV9wYXJhbSh1c2VfbXVsdGksIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9tdWx0aSwgInVzZSBwZXItQ1BVIHF1ZXVlcyIpOwotI2VuZGlmCitzdGF0aWMgaW50IGludF9tb2RlOworbW9kdWxlX3BhcmFtKGludF9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kZSwgIiBGb3JjZSBpbnRlcnJ1cHQgbW9kZSAoMSBJTlQjeDsgMiBNU0kpIik7CisKK3N0YXRpYyBpbnQgcG9sbDsKK21vZHVsZV9wYXJhbShwb2xsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwb2xsLCAiIFVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7CisKK3N0YXRpYyBpbnQgbXJycyA9IC0xOworbW9kdWxlX3BhcmFtKG1ycnMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1ycnMsICIgRm9yY2UgTWF4IFJlYWQgUmVxIFNpemUgKDAuLjMpIChmb3IgZGVidWcpIik7CisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiIERlZmF1bHQgZGVidWcgbXNnbGV2ZWwiKTsKKworc3RhdGljIGludCBsb2FkX2NvdW50WzNdOyAvKiAwLWNvbW1vbiwgMS1wb3J0MCwgMi1wb3J0MSAqLworCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJueDJ4X3dxOwogCiBlbnVtIGJueDJ4X2JvYXJkX3R5cGUgewpAQCAtMjEzLDcgKzIxNyw3IEBACiAJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKIAlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CiAKLQlEUChCTlgyWF9NU0dfT0ZGLCAiZG1hZTogb3Bjb2RlIDB4JTA4eFxuIgorCURQKEJOWDJYX01TR19PRkYsICJETUFFOiBvcGNvZGUgMHglMDh4XG4iCiAJICAgRFBfTEVWRUwgInNyY19hZGRyICBbJXg6JTA4eF0gIGxlbiBbJWQgKjRdICAiCiAJCSAgICAiZHN0X2FkZHIgWyV4OiUwOHggKCUwOHgpXVxuIgogCSAgIERQX0xFVkVMICJjb21wX2FkZHIgWyV4OiUwOHhdICBjb21wX3ZhbCAweCUwOHhcbiIsCkBAIC0yMzQsNyArMjM4LDcgQEAKIAkJRFAoQk5YMlhfTVNHX09GRiwgIndiX2NvbXAgMHglMDh4XG4iLCAqd2JfY29tcCk7CiAKIAkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigiZG1hZSB0aW1lb3V0IVxuIik7CisJCQlCTlgyWF9FUlIoIkRNQUUgdGltZW91dCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJY250LS07CkBAIC0yODksNyArMjkzLDcgQEAKIAlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwogCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKIAotCURQKEJOWDJYX01TR19PRkYsICJkbWFlOiBvcGNvZGUgMHglMDh4XG4iCisJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKIAkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKIAkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCiAJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKQEAgLTMwNiw3ICszMTAsNyBAQAogCXdoaWxlICgqd2JfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7CiAKIAkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigiZG1hZSB0aW1lb3V0IVxuIik7CisJCQlCTlgyWF9FUlIoIkRNQUUgdGltZW91dCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJY250LS07CkBAIC00NjgsNyArNDcyLDcgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X2Z3X2R1bXAoc3RydWN0IGJueDJ4ICpicCkKIHsKIAl1MzIgbWFyaywgb2Zmc2V0OwotCXUzMiBkYXRhWzldOworCV9fYmUzMiBkYXRhWzldOwogCWludCB3b3JkOwogCiAJbWFyayA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKyAweGYxMDQpOwpAQCAtNTAyLDgzICs1MDYsMTA0IEBACiAKIAlCTlgyWF9FUlIoImJlZ2luIGNyYXNoIGR1bXAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0JCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7Ci0KLQkJQk5YMlhfRVJSKCJxdWV1ZVslZF06IHR4X3BrdF9wcm9kKCV4KSAgdHhfcGt0X2NvbnMoJXgpIgotCQkJICAiICB0eF9iZF9wcm9kKCV4KSAgdHhfYmRfY29ucygleCkgICp0eF9jb25zX3NiKCV4KVxuIiwKLQkJCSAgaSwgZnAtPnR4X3BrdF9wcm9kLCBmcC0+dHhfcGt0X2NvbnMsIGZwLT50eF9iZF9wcm9kLAotCQkJICBmcC0+dHhfYmRfY29ucywgbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICAgICAgIHJ4X2JkX3Byb2QoJXgpICByeF9iZF9jb25zKCV4KSIKLQkJCSAgIiAgKnJ4X2JkX2NvbnNfc2IoJXgpICByeF9jb21wX3Byb2QoJXgpIgotCQkJICAiICByeF9jb21wX2NvbnMoJXgpICAqcnhfY29uc19zYigleClcbiIsCi0JCQkgIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfYmRfY29ucywKLQkJCSAgbGUxNl90b19jcHUoKmZwLT5yeF9iZF9jb25zX3NiKSwgZnAtPnJ4X2NvbXBfcHJvZCwKLQkJCSAgZnAtPnJ4X2NvbXBfY29ucywgbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICAgICAgIHJ4X3NnZV9wcm9kKCV4KSAgbGFzdF9tYXhfc2dlKCV4KSIKLQkJCSAgIiAgZnBfY19pZHgoJXgpICAqc2JfY19pZHgoJXgpICBmcF91X2lkeCgleCkiCi0JCQkgICIgICpzYl91X2lkeCgleCkgIGJkIGRhdGEoJXgsJXgpXG4iLAotCQkJICBmcC0+cnhfc2dlX3Byb2QsIGZwLT5sYXN0X21heF9zZ2UsIGZwLT5mcF9jX2lkeCwKLQkJCSAgZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCwKLQkJCSAgZnAtPmZwX3VfaWR4LAotCQkJICBmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4LAotCQkJICBod19wcm9kcy0+cGFja2V0c19wcm9kLCBod19wcm9kcy0+YmRzX3Byb2QpOwotCi0JCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKLQkJZW5kID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSArIDI0NSk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXN0cnVjdCBzd190eF9iZCAqc3dfYmQgPSAmZnAtPnR4X2J1Zl9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoInBhY2tldFsleF09WyVwLCV4XVxuIiwgaiwKLQkJCQkgIHN3X2JkLT5za2IsIHN3X2JkLT5maXJzdF9iZCk7Ci0JCX0KLQotCQlzdGFydCA9IFRYX0JEKGZwLT50eF9iZF9jb25zIC0gMTApOwotCQllbmQgPSBUWF9CRChmcC0+dHhfYmRfY29ucyArIDI1NCk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqdHhfYmQgPSAodTMyICopJmZwLT50eF9kZXNjX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigidHhfYmRbJXhdPVsleDoleDoleDoleF1cbiIsCi0JCQkJICBqLCB0eF9iZFswXSwgdHhfYmRbMV0sIHR4X2JkWzJdLCB0eF9iZFszXSk7Ci0JCX0KLQotCQlzdGFydCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgLSAxMCk7Ci0JCWVuZCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgKyA1MDMpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKnJ4X2JkID0gKHUzMiAqKSZmcC0+cnhfZGVzY19yaW5nW2pdOwotCQkJc3RydWN0IHN3X3J4X2JkICpzd19iZCA9ICZmcC0+cnhfYnVmX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigicnhfYmRbJXhdPVsleDoleF0gIHN3X2JkPVslcF1cbiIsCi0JCQkJICBqLCByeF9iZFsxXSwgcnhfYmRbMF0sIHN3X2JkLT5za2IpOwotCQl9Ci0KLQkJc3RhcnQgPSBSWF9TR0UoZnAtPnJ4X3NnZV9wcm9kKTsKLQkJZW5kID0gUlhfU0dFKGZwLT5sYXN0X21heF9zZ2UpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKnJ4X3NnZSA9ICh1MzIgKikmZnAtPnJ4X3NnZV9yaW5nW2pdOwotCQkJc3RydWN0IHN3X3J4X3BhZ2UgKnN3X3BhZ2UgPSAmZnAtPnJ4X3BhZ2VfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJyeF9zZ2VbJXhdPVsleDoleF0gIHN3X3BhZ2U9WyVwXVxuIiwKLQkJCQkgIGosIHJ4X3NnZVsxXSwgcnhfc2dlWzBdLCBzd19wYWdlLT5wYWdlKTsKLQkJfQotCi0JCXN0YXJ0ID0gUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMgLSAxMCk7Ci0JCWVuZCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zICsgNTAzKTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJdTMyICpjcWUgPSAodTMyICopJmZwLT5yeF9jb21wX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigiY3FlWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAotCQkJCSAgaiwgY3FlWzBdLCBjcWVbMV0sIGNxZVsyXSwgY3FlWzNdKTsKLQkJfQotCX0KLQorCS8qIEluZGljZXMgKi8KKwkvKiBDb21tb24gKi8KIAlCTlgyWF9FUlIoImRlZl9jX2lkeCgldSkgIGRlZl91X2lkeCgldSkgIGRlZl94X2lkeCgldSkiCiAJCSAgIiAgZGVmX3RfaWR4KCV1KSAgZGVmX2F0dF9pZHgoJXUpICBhdHRuX3N0YXRlKCV1KSIKIAkJICAiICBzcHFfcHJvZF9pZHgoJXUpXG4iLAogCQkgIGJwLT5kZWZfY19pZHgsIGJwLT5kZWZfdV9pZHgsIGJwLT5kZWZfeF9pZHgsIGJwLT5kZWZfdF9pZHgsCiAJCSAgYnAtPmRlZl9hdHRfaWR4LCBicC0+YXR0bl9zdGF0ZSwgYnAtPnNwcV9wcm9kX2lkeCk7CiAKKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCUJOWDJYX0VSUigiZnAlZDogcnhfYmRfcHJvZCgleCkgIHJ4X2JkX2NvbnMoJXgpIgorCQkJICAiICAqcnhfYmRfY29uc19zYigleCkgIHJ4X2NvbXBfcHJvZCgleCkiCisJCQkgICIgIHJ4X2NvbXBfY29ucygleCkgICpyeF9jb25zX3NiKCV4KVxuIiwKKwkJCSAgaSwgZnAtPnJ4X2JkX3Byb2QsIGZwLT5yeF9iZF9jb25zLAorCQkJICBsZTE2X3RvX2NwdSgqZnAtPnJ4X2JkX2NvbnNfc2IpLCBmcC0+cnhfY29tcF9wcm9kLAorCQkJICBmcC0+cnhfY29tcF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpKTsKKwkJQk5YMlhfRVJSKCIgICAgICByeF9zZ2VfcHJvZCgleCkgIGxhc3RfbWF4X3NnZSgleCkiCisJCQkgICIgIGZwX3VfaWR4KCV4KSAqc2JfdV9pZHgoJXgpXG4iLAorCQkJICBmcC0+cnhfc2dlX3Byb2QsIGZwLT5sYXN0X21heF9zZ2UsCisJCQkgIGxlMTZfdG9fY3B1KGZwLT5mcF91X2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOworCX0KKworCS8qIFR4ICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7CisKKwkJQk5YMlhfRVJSKCJmcCVkOiB0eF9wa3RfcHJvZCgleCkgIHR4X3BrdF9jb25zKCV4KSIKKwkJCSAgIiAgdHhfYmRfcHJvZCgleCkgIHR4X2JkX2NvbnMoJXgpICAqdHhfY29uc19zYigleClcbiIsCisJCQkgIGksIGZwLT50eF9wa3RfcHJvZCwgZnAtPnR4X3BrdF9jb25zLCBmcC0+dHhfYmRfcHJvZCwKKwkJCSAgZnAtPnR4X2JkX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikpOworCQlCTlgyWF9FUlIoIiAgICAgIGZwX2NfaWR4KCV4KSAgKnNiX2NfaWR4KCV4KSIKKwkJCSAgIiAgYmQgZGF0YSgleCwleClcbiIsIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgsCisJCQkgIGh3X3Byb2RzLT5wYWNrZXRzX3Byb2QsIGh3X3Byb2RzLT5iZHNfcHJvZCk7CisJfQorCisJLyogUmluZ3MgKi8KKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKKwkJZW5kID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJYX0JEKGogKyAxKSkgeworCQkJdTMyICpyeF9iZCA9ICh1MzIgKikmZnAtPnJ4X2Rlc2NfcmluZ1tqXTsKKwkJCXN0cnVjdCBzd19yeF9iZCAqc3dfYmQgPSAmZnAtPnJ4X2J1Zl9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X2JkWyV4XT1bJXg6JXhdICBzd19iZD1bJXBdXG4iLAorCQkJCSAgaSwgaiwgcnhfYmRbMV0sIHJ4X2JkWzBdLCBzd19iZC0+c2tiKTsKKwkJfQorCisJCXN0YXJ0ID0gUlhfU0dFKGZwLT5yeF9zZ2VfcHJvZCk7CisJCWVuZCA9IFJYX1NHRShmcC0+bGFzdF9tYXhfc2dlKTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gUlhfU0dFKGogKyAxKSkgeworCQkJdTMyICpyeF9zZ2UgPSAodTMyICopJmZwLT5yeF9zZ2VfcmluZ1tqXTsKKwkJCXN0cnVjdCBzd19yeF9wYWdlICpzd19wYWdlID0gJmZwLT5yeF9wYWdlX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogcnhfc2dlWyV4XT1bJXg6JXhdICBzd19wYWdlPVslcF1cbiIsCisJCQkJICBpLCBqLCByeF9zZ2VbMV0sIHJ4X3NnZVswXSwgc3dfcGFnZS0+cGFnZSk7CisJCX0KKworCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOworCQllbmQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJDUV9CRChqICsgMSkpIHsKKwkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IGNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGksIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7CisJCX0KKwl9CisKKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKKwkJZW5kID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSArIDI0NSk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFRYX0JEKGogKyAxKSkgeworCQkJc3RydWN0IHN3X3R4X2JkICpzd19iZCA9ICZmcC0+dHhfYnVmX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogcGFja2V0WyV4XT1bJXAsJXhdXG4iLAorCQkJCSAgaSwgaiwgc3dfYmQtPnNrYiwgc3dfYmQtPmZpcnN0X2JkKTsKKwkJfQorCisJCXN0YXJ0ID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgLSAxMCk7CisJCWVuZCA9IFRYX0JEKGZwLT50eF9iZF9jb25zICsgMjU0KTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gVFhfQkQoaiArIDEpKSB7CisJCQl1MzIgKnR4X2JkID0gKHUzMiAqKSZmcC0+dHhfZGVzY19yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHR4X2JkWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAorCQkJCSAgaSwgaiwgdHhfYmRbMF0sIHR4X2JkWzFdLCB0eF9iZFsyXSwgdHhfYmRbM10pOworCQl9CisJfQorCiAJYm54MnhfZndfZHVtcChicCk7CiAJYm54MnhfbWNfYXNzZXJ0KGJwKTsKIAlCTlgyWF9FUlIoImVuZCBjcmFzaCBkdW1wIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKQEAgLTU5MCwzNyArNjE1LDQ0IEBACiAJdTMyIGFkZHIgPSBwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOwogCXUzMiB2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOwogCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKKwlpbnQgbXNpID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSA/IDEgOiAwOwogCiAJaWYgKG1zaXgpIHsKLQkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wOworCQl2YWwgJj0gfihIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKKwkJCSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCk7CiAJCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKKwl9IGVsc2UgaWYgKG1zaSkgeworCQl2YWwgJj0gfkhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wOworCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAorCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKIAl9IGVsc2UgewogCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKIAotCQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBNU0ktWCAlZFxuIiwKLQkJICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKwkJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KVxuIiwKKwkJICAgdmFsLCBwb3J0LCBhZGRyKTsKIAogCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiAKIAkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzA7CiAJfQogCi0JRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgTVNJLVggJWRcbiIsCi0JICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKwlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBtb2RlICVzXG4iLAorCSAgIHZhbCwgcG9ydCwgYWRkciwgKG1zaXggPyAiTVNJLVgiIDogKG1zaSA/ICJNU0kiIDogIklOVHgiKSkpOwogCiAJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewogCQkvKiBpbml0IGxlYWRpbmcvdHJhaWxpbmcgZWRnZSAqLwogCQlpZiAoSVNfRTFITUYoYnApKSB7Ci0JCQl2YWwgPSAoMHhmZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CisJCQl2YWwgPSAoMHhlZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CiAJCQlpZiAoYnAtPnBvcnQucG1mKQotCQkJCS8qIGVuYWJsZSBuaWcgYXR0ZW50aW9uICovCi0JCQkJdmFsIHw9IDB4MDEwMDsKKwkJCQkvKiBlbmFibGUgbmlnIGFuZCBncGlvMyBhdHRlbnRpb24gKi8KKwkJCQl2YWwgfD0gMHgxMTAwOwogCQl9IGVsc2UKIAkJCXZhbCA9IDB4ZmZmZjsKIApAQCAtNjQzLDE1ICs2NzUsMTkgQEAKIAlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpXG4iLAogCSAgIHZhbCwgcG9ydCwgYWRkcik7CiAKKwkvKiBmbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKIAlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiAJaWYgKFJFR19SRChicCwgYWRkcikgIT0gdmFsKQogCQlCTlgyWF9FUlIoIkJVRyEgcHJvcGVyIHZhbCBub3QgcmVhZCBmcm9tIElHVSFcbiIpOworCiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2ludF9kaXNhYmxlX3N5bmMoc3RydWN0IGJueDJ4ICpicCwgaW50IGRpc2FibGVfaHcpCiB7CiAJaW50IG1zaXggPSAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSA/IDEgOiAwOwotCWludCBpOworCWludCBpLCBvZmZzZXQ7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdCBoYW5kbGluZyAqLwogCWF0b21pY19pbmMoJmJwLT5pbnRyX3NlbSk7CkBAIC02NjEsMTEgKzY5NywxMCBAQAogCiAJLyogbWFrZSBzdXJlIGFsbCBJU1JzIGFyZSBkb25lICovCiAJaWYgKG1zaXgpIHsKKwkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlWzBdLnZlY3Rvcik7CisJCW9mZnNldCA9IDE7CiAJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2ldLnZlY3Rvcik7Ci0KLQkJLyogb25lIG1vcmUgZm9yIHRoZSBTbG93IFBhdGggSVJRICovCi0JCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVtpXS52ZWN0b3IpOworCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3Rvcik7CiAJfSBlbHNlCiAJCXN5bmNocm9uaXplX2lycShicC0+cGRldi0+aXJxKTsKIApAQCAtNzQ4LDcgKzc4Myw2IEBACiAJLyogVGVsbCBjb21waWxlciB0aGF0IGNvbnN1bWVyIGFuZCBwcm9kdWNlciBjYW4gY2hhbmdlICovCiAJYmFycmllcigpOwogCXJldHVybiAoZnAtPnR4X3BrdF9wcm9kICE9IGZwLT50eF9wa3RfY29ucyk7Ci0KIH0KIAogLyogZnJlZSBza2IgaW4gdGhlIHBhY2tldCByaW5nIGF0IHBvcyBpZHgKQEAgLTg0Miw5ICs4NzYsMTAgQEAKIAlyZXR1cm4gKHMxNikoZnAtPmJwLT50eF9yaW5nX3NpemUpIC0gdXNlZDsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfdHhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCB3b3JrKQorc3RhdGljIHZvaWQgYm54MnhfdHhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJdTE2IGh3X2NvbnMsIHN3X2NvbnMsIGJkX2NvbnMgPSBmcC0+dHhfYmRfY29uczsKIAlpbnQgZG9uZSA9IDA7CiAKQEAgLTg1Myw2ICs4ODgsNyBAQAogCQlyZXR1cm47CiAjZW5kaWYKIAorCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoYnAtPmRldiwgZnAtPmluZGV4KTsKIAlod19jb25zID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKIAlzd19jb25zID0gZnAtPnR4X3BrdF9jb25zOwogCkBAIC04NzQsMzIgKzkxMCwzMCBAQAogCQliZF9jb25zID0gYm54MnhfZnJlZV90eF9wa3QoYnAsIGZwLCBwa3RfY29ucyk7CiAJCXN3X2NvbnMrKzsKIAkJZG9uZSsrOwotCi0JCWlmIChkb25lID09IHdvcmspCi0JCQlicmVhazsKIAl9CiAKIAlmcC0+dHhfcGt0X2NvbnMgPSBzd19jb25zOwogCWZwLT50eF9iZF9jb25zID0gYmRfY29uczsKIAotCS8qIE5lZWQgdG8gbWFrZSB0aGUgdHhfY29ucyB1cGRhdGUgdmlzaWJsZSB0byBzdGFydF94bWl0KCkKLQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCi0JICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdCBzdGFydF94bWl0KCkKLQkgKiB3aWxsIG1pc3MgaXQgYW5kIGNhdXNlIHRoZSBxdWV1ZSB0byBiZSBzdG9wcGVkIGZvcmV2ZXIuCi0JICovCi0Jc21wX21iKCk7Ci0KIAkvKiBUQkQgbmVlZCBhIHRocmVzaD8gKi8KLQlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSkpIHsKKwlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSkgewogCi0JCW5ldGlmX3R4X2xvY2soYnAtPmRldik7CisJCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikgJiYKKwkJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQorCQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCisJCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQKKwkJICogc3RhcnRfeG1pdCgpIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQKKwkJICogZm9yZXZlci4KKwkJICovCisJCXNtcF9tYigpOworCisJCWlmICgobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSAmJgogCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSAmJgogCQkgICAgKGJueDJ4X3R4X2F2YWlsKGZwKSA+PSBNQVhfU0tCX0ZSQUdTICsgMykpCi0JCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOworCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCi0JCW5ldGlmX3R4X3VubG9jayhicC0+ZGV2KTsKKwkJX19uZXRpZl90eF91bmxvY2sodHhxKTsKIAl9CiB9CiAKQEAgLTkxMywxMiArOTQ3LDEyIEBACiAKIAlEUChCTlgyWF9NU0dfU1AsCiAJICAgImZwICVkICBjaWQgJWQgIGdvdCByYW1yb2QgIyVkICBzdGF0ZSBpcyAleCAgdHlwZSBpcyAlZFxuIiwKLQkgICBGUF9JRFgoZnApLCBjaWQsIGNvbW1hbmQsIGJwLT5zdGF0ZSwKKwkgICBmcC0+aW5kZXgsIGNpZCwgY29tbWFuZCwgYnAtPnN0YXRlLAogCSAgIHJyX2NxZS0+cmFtcm9kX2NxZS5yYW1yb2RfdHlwZSk7CiAKIAlicC0+c3BxX2xlZnQrKzsKIAotCWlmIChGUF9JRFgoZnApKSB7CisJaWYgKGZwLT5pbmRleCkgewogCQlzd2l0Y2ggKGNvbW1hbmQgfCBmcC0+c3RhdGUpIHsKIAkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQIHwKIAkJCQkJCUJOWDJYX0ZQX1NUQVRFX09QRU5JTkcpOgpAQCAtMTA3OCw4ICsxMTEyLDcgQEAKIAogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+cGRldiwKIAkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpLAotCQkJCSAgICAgICBicC0+cnhfb2Zmc2V0ICsgUlhfQ09QWV9USFJFU0gsCi0JCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJICAgICAgIFJYX0NPUFlfVEhSRVNILCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJcHJvZF9yeF9idWYtPnNrYiA9IGNvbnNfcnhfYnVmLT5za2I7CiAJcGNpX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLApAQCAtMTI2MCw3ICsxMjkzLDcgQEAKIAkJICAgd2hlcmUgd2UgYXJlIGFuZCBkcm9wIHRoZSB3aG9sZSBwYWNrZXQgKi8KIAkJZXJyID0gYm54MnhfYWxsb2Nfcnhfc2dlKGJwLCBmcCwgc2dlX2lkeCk7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCQlicC0+ZXRoX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTEzNjUsNyArMTM5OCw3IEBACiAJCS8qIGVsc2UgZHJvcCB0aGUgcGFja2V0IGFuZCBrZWVwIHRoZSBidWZmZXIgaW4gdGhlIGJpbiAqLwogCQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAogCQkgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBza2IgLSBkcm9wcGluZyBwYWNrZXQhXG4iKTsKLQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJfQogCiAJZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gPSBCTlgyWF9UUEFfU1RPUDsKQEAgLTEzNzYsNyArMTQwOSw3IEBACiAJCQkJCXUxNiBiZF9wcm9kLCB1MTYgcnhfY29tcF9wcm9kLAogCQkJCQl1MTYgcnhfc2dlX3Byb2QpCiB7Ci0Jc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHJ4X3Byb2RzID0gezB9OworCXN0cnVjdCB1c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycyByeF9wcm9kcyA9IHswfTsKIAlpbnQgaTsKIAogCS8qIFVwZGF0ZSBwcm9kdWNlcnMgKi8KQEAgLTEzOTQsMTYgKzE0MjcsMTYgQEAKIAkgKi8KIAl3bWIoKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzKS80OyBpKyspCi0JCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFRTVE9STV9SWF9QUk9EU19PRkZTRVQoQlBfUE9SVChicCksIEZQX0NMX0lEKGZwKSkgKyBpKjQsCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wcm9kdWNlcnMpLzQ7IGkrKykKKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX1JYX1BST0RTX09GRlNFVChCUF9QT1JUKGJwKSwgZnAtPmNsX2lkKSArIGkqNCwKIAkJICAgICAgICgodTMyICopJnJ4X3Byb2RzKVtpXSk7CiAKIAltbWlvd2IoKTsgLyoga2VlcCBwcm9kIHVwZGF0ZXMgb3JkZXJlZCAqLwogCiAJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKLQkgICAiV3JvdGU6IGJkX3Byb2QgJXUgIGNxZV9wcm9kICV1ICBzZ2VfcHJvZCAldVxuIiwKLQkgICBiZF9wcm9kLCByeF9jb21wX3Byb2QsIHJ4X3NnZV9wcm9kKTsKKwkgICAicXVldWVbJWRdOiAgd3JvdGUgIGJkX3Byb2QgJXUgIGNxZV9wcm9kICV1ICBzZ2VfcHJvZCAldVxuIiwKKwkgICBmcC0+aW5kZXgsIGJkX3Byb2QsIHJ4X2NvbXBfcHJvZCwgcnhfc2dlX3Byb2QpOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3J4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCBpbnQgYnVkZ2V0KQpAQCAtMTQzNyw3ICsxNDcwLDcgQEAKIAogCURQKE5FVElGX01TR19SWF9TVEFUVVMsCiAJICAgInF1ZXVlWyVkXTogIGh3X2NvbXBfY29ucyAldSAgc3dfY29tcF9jb25zICV1XG4iLAotCSAgIEZQX0lEWChmcCksIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKKwkgICBmcC0+aW5kZXgsIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKIAogCXdoaWxlIChzd19jb21wX2NvbnMgIT0gaHdfY29tcF9jb25zKSB7CiAJCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gTlVMTDsKQEAgLTE1MjcsNyArMTU2MCw3IEBACiAJCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKIAkJCQkgICAiRVJST1IgIGZsYWdzICV4ICByeCBwYWNrZXQgJXVcbiIsCiAJCQkJICAgY3FlX2ZwX2ZsYWdzLCBzd19jb21wX2NvbnMpOwotCQkJCWJwLT5ldGhfc3RhdHMucnhfZXJyX2Rpc2NhcmRfcGt0Kys7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X2Vycl9kaXNjYXJkX3BrdCsrOwogCQkJCWdvdG8gcmV1c2Vfcng7CiAJCQl9CiAKQEAgLTE1NDQsNyArMTU3Nyw3IEBACiAJCQkJCURQKE5FVElGX01TR19SWF9FUlIsCiAJCQkJCSAgICJFUlJPUiAgcGFja2V0IGRyb3BwZWQgIgogCQkJCQkgICAiYmVjYXVzZSBvZiBhbGxvYyBmYWlsdXJlXG4iKTsKLQkJCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJCQkJCWdvdG8gcmV1c2Vfcng7CiAJCQkJfQogCkBAIC0xNTcwLDcgKzE2MDMsNyBAQAogCQkJCURQKE5FVElGX01TR19SWF9FUlIsCiAJCQkJICAgIkVSUk9SICBwYWNrZXQgZHJvcHBlZCBiZWNhdXNlICIKIAkJCQkgICAib2YgYWxsb2MgZmFpbHVyZVxuIik7Ci0JCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIHJldXNlX3J4OgogCQkJCWJueDJ4X3JldXNlX3J4X3NrYihmcCwgc2tiLCBiZF9jb25zLCBiZF9wcm9kKTsKIAkJCQlnb3RvIG5leHRfcng7CkBAIC0xNTgzLDEwICsxNjE2LDExIEBACiAJCQkJaWYgKGxpa2VseShCTlgyWF9SWF9DU1VNX09LKGNxZSkpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCWVsc2UKLQkJCQkJYnAtPmV0aF9zdGF0cy5od19jc3VtX2VycisrOworCQkJCQlmcC0+ZXRoX3Ffc3RhdHMuaHdfY3N1bV9lcnIrKzsKIAkJCX0KIAkJfQogCisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBmcC0+aW5kZXgpOwogI2lmZGVmIEJDTV9WTEFOCiAJCWlmICgoYnAtPnZsZ3JwICE9IE5VTEwpICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpICYmCiAJCSAgICAobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpICYKQEAgLTE2MzIsNyArMTY2Niw3IEBACiB7CiAJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9IGZwX2Nvb2tpZTsKIAlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCBpbmRleCA9IEZQX0lEWChmcCk7CisJaW50IGluZGV4ID0gZnAtPmluZGV4OwogCiAJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7CkBAIC0xNjQxLDggKzE2NzUsOCBAQAogCX0KIAogCURQKEJOWDJYX01TR19GUCwgImdvdCBhbiBNU0ktWCBpbnRlcnJ1cHQgb24gSURYOlNCIFslZDolZF1cbiIsCi0JICAgaW5kZXgsIEZQX1NCX0lEKGZwKSk7Ci0JYm54MnhfYWNrX3NiKGJwLCBGUF9TQl9JRChmcCksIFVTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKKwkgICBpbmRleCwgZnAtPnNiX2lkKTsKKwlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgVVNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQpAQCAtMTY1NCwxNSArMTY4OCwxNCBAQAogCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CisJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBibngyeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldl9pbnN0YW5jZSk7CiAJdTE2IHN0YXR1cyA9IGJueDJ4X2Fja19pbnQoYnApOwogCXUxNiBtYXNrOwogCkBAIC0xNjcxLDcgKzE3MDQsNyBAQAogCQlEUChORVRJRl9NU0dfSU5UUiwgIm5vdCBvdXIgaW50ZXJydXB0IVxuIik7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0JRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7CisJRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKIAogCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewpAQCAtMTY5Myw3ICsxNzI2LDcgQEAKIAkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwogCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCAwLCBuYXBpKSk7CisJCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCAwLCBuYXBpKSk7CiAKIAkJc3RhdHVzICY9IH5tYXNrOwogCX0KQEAgLTE4MDYsMjYgKzE4MzksNTAgQEAKIC8qIEhXIExvY2sgZm9yIHNoYXJlZCBkdWFsIHBvcnQgUEhZcyAqLwogc3RhdGljIHZvaWQgYm54MnhfYWNxdWlyZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCiAJbXV0ZXhfbG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKIAotCWlmICgoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpIHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpCi0JCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCWlmIChicC0+cG9ydC5uZWVkX2h3X2xvY2spCisJCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9NRElPKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfcmVsZWFzZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCi0JaWYgKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSkKLQkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFXzgwNzJfTURJTyk7CisJaWYgKGJwLT5wb3J0Lm5lZWRfaHdfbG9jaykKKwkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX01ESU8pOwogCiAJbXV0ZXhfdW5sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOwogfQogCitpbnQgYm54MnhfZ2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1OCBwb3J0KQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBwb3J0OworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisJaW50IHZhbHVlOworCisJaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7CisJCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlYWQgR1BJTyB2YWx1ZSAqLworCWdwaW9fcmVnID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPKTsKKworCS8qIGdldCB0aGUgcmVxdWVzdGVkIHBpbiB2YWx1ZSAqLworCWlmICgoZ3Bpb19yZWcgJiBncGlvX21hc2spID09IGdwaW9fbWFzaykKKwkJdmFsdWUgPSAxOworCWVsc2UKKwkJdmFsdWUgPSAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJwaW4gJWQgIHZhbHVlIDB4JXhcbiIsIGdwaW9fbnVtLCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKIGludCBibngyeF9zZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KQogewogCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KQEAgLTE4NzksNiArMTkzNiw1MiBAQAogCXJldHVybiAwOwogfQogCitpbnQgYm54Mnhfc2V0X2dwaW9faW50KHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpCit7CisJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgc3dhcCByZWdpc3RlciBpcyBzZXQgYW5kIGFjdGl2ZSAqLworCWludCBncGlvX3BvcnQgPSAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkgJiYKKwkJCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpKSBeIHBvcnQ7CisJaW50IGdwaW9fc2hpZnQgPSBncGlvX251bSArCisJCQkoZ3Bpb19wb3J0ID8gTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUIDogMCk7CisJdTMyIGdwaW9fbWFzayA9ICgxIDw8IGdwaW9fc2hpZnQpOworCXUzMiBncGlvX3JlZzsKKworCWlmIChncGlvX251bSA+IE1JU0NfUkVHSVNURVJTX0dQSU9fMykgeworCQlCTlgyWF9FUlIoIkludmFsaWQgR1BJTyAlZFxuIiwgZ3Bpb19udW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisJLyogcmVhZCBHUElPIGludCAqLworCWdwaW9fcmVnID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPX0lOVCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFI6CisJCURQKE5FVElGX01TR19MSU5LLCAiQ2xlYXIgR1BJTyBJTlQgJWQgKHNoaWZ0ICVkKSAtPiAiCisJCQkJICAgIm91dHB1dCBsb3dcbiIsIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogY2xlYXIgU0VUIGFuZCBzZXQgQ0xSICovCisJCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX1NFVF9QT1MpOworCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9DTFJfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQ6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gSU5UICVkIChzaGlmdCAlZCkgLT4gIgorCQkJCSAgICJvdXRwdXQgaGlnaFxuIiwgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOworCQkvKiBjbGVhciBDTFIgYW5kIHNldCBTRVQgKi8KKwkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyk7CisJCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX1NFVF9QT1MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCVJFR19XUihicCwgTUlTQ19SRUdfR1BJT19JTlQsIGdwaW9fcmVnKTsKKwlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBibngyeF9zZXRfc3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc3Bpb19udW0sIHUzMiBtb2RlKQogewogCXUzMiBzcGlvX21hc2sgPSAoMSA8PCBzcGlvX251bSk7CkBAIC0xOTMzLDEzICsyMDM2LDE2IEBACiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKIAkJCQkJICBBRFZFUlRJU0VEX1BhdXNlKTsKIAkJYnJlYWs7CisKIAljYXNlIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg6CiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAogCQkJCQkgQURWRVJUSVNFRF9QYXVzZSk7CiAJCWJyZWFrOworCiAJY2FzZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOgogCQlicC0+cG9ydC5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAogCQkJCQkgIEFEVkVSVElTRURfUGF1c2UpOwpAQCAtMTk2NCw3ICsyMDcwLDggQEAKIAkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICE9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FKSB7CiAJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpIHsKIAkJCQlwcmludGsoIiwgcmVjZWl2ZSAiKTsKLQkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYKKwkJCQkgICAgQk5YMlhfRkxPV19DVFJMX1RYKQogCQkJCQlwcmludGsoIiYgdHJhbnNtaXQgIik7CiAJCQl9IGVsc2UgewogCQkJCXByaW50aygiLCB0cmFuc21pdCAiKTsKQEAgLTE5NzksNyArMjA4Niw3IEBACiAJfQogfQogCi1zdGF0aWMgdTggYm54MnhfaW5pdGlhbF9waHlfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHU4IGJueDJ4X2luaXRpYWxfcGh5X2luaXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSkKIHsKIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQl1OCByYzsKQEAgLTE5OTUsMTggKzIxMDIsMjQgQEAKIAkJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmNfYXV0b19hZHYgPSBCTlgyWF9GTE9XX0NUUkxfQk9USDsKIAogCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKworCQlpZiAobG9hZF9tb2RlID09IExPQURfRElBRykKKwkJCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfWEdYU18xMDsKKwogCQlyYyA9IGJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwogCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAogCQlibngyeF9jYWxjX2ZjX2FkdihicCk7CiAKLQkJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkKKwkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApICYmIGJwLT5saW5rX3ZhcnMubGlua191cCkgeworCQkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9MSU5LX1VQKTsKIAkJCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKLQorCQl9CiAKIAkJcmV0dXJuIHJjOwogCX0KLQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLW5vdCBpbml0aWFsaXppbmcgbGlua1xuIik7CisJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCBpbml0aWFsaXplIGxpbmtcbiIpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0yMDE5LDE3ICsyMTMyLDE3IEBACiAKIAkJYm54MnhfY2FsY19mY19hZHYoYnApOwogCX0gZWxzZQotCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLW5vdCBzZXR0aW5nIGxpbmtcbiIpOworCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHNldCBsaW5rXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfX2xpbmtfcmVzZXQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisJCWJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsIDEpOwogCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAl9IGVsc2UKLQkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC1ub3QgcmVzZXR0aW5nIGxpbmtcbiIpOworCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHJlc2V0IGxpbmtcbiIpOwogfQogCiBzdGF0aWMgdTggYm54MnhfbGlua190ZXN0KHN0cnVjdCBibngyeCAqYnApCkBAIC0yMDQzLDExOSArMjE1Niw0MiBAQAogCXJldHVybiByYzsKIH0KIAotLyogQ2FsY3VsYXRlcyB0aGUgc3VtIG9mIHZuX21pbl9yYXRlcy4KLSAgIEl0J3MgbmVlZGVkIGZvciBmdXJ0aGVyIG5vcm1hbGl6aW5nIG9mIHRoZSBtaW5fcmF0ZXMuCi0KLSAgIFJldHVybnM6Ci0gICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMKLSAgICAgICBvcgotICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCi0gICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaXJuZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCi0gICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwKLSAgICAgYmUgc2V0IHRvIDEuCi0gKi8KLXN0YXRpYyB1MzIgYm54MnhfY2FsY192bl93c3VtKHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3BvcnRfbWlubWF4KHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IGksIHBvcnQgPSBCUF9QT1JUKGJwKTsKLQl1MzIgd3N1bSA9IDA7Ci0JaW50IGFsbF96ZXJvID0gMTsKKwl1MzIgcl9wYXJhbSA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCAvIDg7CisJdTMyIGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjOworCXUzMiB0X2ZhaXI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgRTFIVk5fTUFYOyBpKyspIHsKLQkJdTMyIHZuX2NmZyA9Ci0JCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnWzIqaSArIHBvcnRdLmNvbmZpZyk7Ci0JCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+Ci0JCQkJICAgICBGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOwotCQlpZiAoISh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpKSB7Ci0JCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KLQkJCWlmICghdm5fbWluX3JhdGUpCi0JCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7Ci0JCQllbHNlCi0JCQkJYWxsX3plcm8gPSAwOworCW1lbXNldCgmKGJwLT5jbW5nLnJzX3ZhcnMpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl9wb3J0KSk7CisJbWVtc2V0KCYoYnAtPmNtbmcuZmFpcl92YXJzKSwgMCwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0KSk7CiAKLQkJCXdzdW0gKz0gdm5fbWluX3JhdGU7Ci0JCX0KLQl9CisJLyogMTAwIHVzZWMgaW4gU0RNIHRpY2tzID0gMjUgc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLworCWJwLT5jbW5nLnJzX3ZhcnMucnNfcGVyaW9kaWNfdGltZW91dCA9IFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQyAvIDQ7CiAKLQkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgRkFJUk5FU1MgKi8KLQlpZiAoYWxsX3plcm8pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHdzdW07Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfcG9ydF9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkgICBpbnQgZW5fZm5lc3MsCi0JCQkJICAgdTE2IHBvcnRfcmF0ZSwKLQkJCQkgICBzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgKm1fY21uZ19wb3J0KQotewotCXUzMiByX3BhcmFtID0gcG9ydF9yYXRlIC8gODsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBpOwotCi0JbWVtc2V0KG1fY21uZ19wb3J0LCAwLCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSk7Ci0KLQkvKiBFbmFibGUgbWlubWF4IG9ubHkgaWYgd2UgYXJlIGluIGUxaG1mIG1vZGUgKi8KLQlpZiAoSVNfRTFITUYoYnApKSB7Ci0JCXUzMiBmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYzsKLQkJdTMyIHRfZmFpcjsKLQotCQkvKiBFbmFibGUgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyAqLwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuY21uZ192bl9lbmFibGUgPSAxOwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuZmFpcm5lc3NfZW5hYmxlID0gZW5fZm5lc3MgPyAxIDogMDsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLnJhdGVfc2hhcGluZ19lbmFibGUgPSAxOwotCi0JCWlmICghZW5fZm5lc3MpCi0JCQlEUChORVRJRl9NU0dfSUZVUCwgIkFsbCBNSU4gdmFsdWVzIGFyZSB6ZXJvZXMiCi0JCQkgICAiICBmYWlybmVzcyB3aWxsIGJlIGRpc2FibGVkXG4iKTsKLQotCQkvKiAxMDAgdXNlYyBpbiBTRE0gdGlja3MgPSAyNSBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCi0JCW1fY21uZ19wb3J0LT5yc192YXJzLnJzX3BlcmlvZGljX3RpbWVvdXQgPQotCQkJCQkJUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDIC8gNDsKLQotCQkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggbm8gdGltZXIgYXJtaW5nIHdpbGwgb2NjdXIKLQkJICAgMS4yNSBjb2VmZmljaWVudCBpcyBmb3IgdGhlIHRocmVzaG9sZCB0byBiZSBhIGxpdHRsZSBiaWdnZXIKLQkJICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLwotCQltX2NtbmdfcG9ydC0+cnNfdmFycy5yc190aHJlc2hvbGQgPQorCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBubyB0aW1lciBhcm1pbmcgd2lsbCBvY2N1cgorCSAgIDEuMjUgY29lZmZpY2llbnQgaXMgZm9yIHRoZSB0aHJlc2hvbGQgdG8gYmUgYSBsaXR0bGUgYmlnZ2VyCisJICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLworCWJwLT5jbW5nLnJzX3ZhcnMucnNfdGhyZXNob2xkID0KIAkJCQkoUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDICogcl9wYXJhbSAqIDUpIC8gNDsKIAotCQkvKiByZXNvbHV0aW9uIG9mIGZhaXJuZXNzIHRpbWVyICovCi0JCWZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjID0gUU1fQVJCX0JZVEVTIC8gcl9wYXJhbTsKLQkJLyogZm9yIDEwRyBpdCBpcyAxMDAwdXNlYy4gZm9yIDFHIGl0IGlzIDEwMDAwdXNlYy4gKi8KLQkJdF9mYWlyID0gVF9GQUlSX0NPRUYgLyBwb3J0X3JhdGU7CisJLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyB0aW1lciAqLworCWZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjID0gUU1fQVJCX0JZVEVTIC8gcl9wYXJhbTsKKwkvKiBmb3IgMTBHIGl0IGlzIDEwMDB1c2VjLiBmb3IgMUcgaXQgaXMgMTAwMDB1c2VjLiAqLworCXRfZmFpciA9IFRfRkFJUl9DT0VGIC8gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOwogCi0JCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB3b24ndCBhcm0KLQkJICAgdGhlIHRpbWVyIGFueW1vcmUgKi8KLQkJbV9jbW5nX3BvcnQtPmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCA9IFFNX0FSQl9CWVRFUzsKKwkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggd2Ugd29uJ3QgYXJtIHRoZSB0aW1lciBhbnltb3JlICovCisJYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkID0gUU1fQVJCX0JZVEVTOwogCi0JCS8qIHdlIG11bHRpcGx5IGJ5IDFlMy84IHRvIGdldCBieXRlcy9tc2VjLgotCQkgICBXZSBkb24ndCB3YW50IHRoZSBjcmVkaXRzIHRvIHBhc3MgYSBjcmVkaXQKLQkJICAgb2YgdGhlIFRfRkFJUipGQUlSX01FTSAoYWxnb3JpdGhtIHJlc29sdXRpb24pICovCi0JCW1fY21uZ19wb3J0LT5mYWlyX3ZhcnMudXBwZXJfYm91bmQgPQotCQkJCQkJcl9wYXJhbSAqIHRfZmFpciAqIEZBSVJfTUVNOwotCQkvKiBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCi0JCW1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcm5lc3NfdGltZW91dCA9Ci0JCQkJCQlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAvIDQ7Ci0KLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgKi8KLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmNtbmdfdm5fZW5hYmxlID0gMDsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmZhaXJuZXNzX2VuYWJsZSA9IDA7Ci0JCW1fY21uZ19wb3J0LT5mbGFncy5yYXRlX3NoYXBpbmdfZW5hYmxlID0gMDsKLQotCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgIlNpbmdsZSBmdW5jdGlvbiBtb2RlICBtaW5tYXggd2lsbCBiZSBkaXNhYmxlZFxuIik7Ci0JfQotCi0JLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQotCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkgKiA0LAotCQkgICAgICAgKCh1MzIgKikobV9jbW5nX3BvcnQpKVtpXSk7CisJLyogd2UgbXVsdGlwbHkgYnkgMWUzLzggdG8gZ2V0IGJ5dGVzL21zZWMuCisJICAgV2UgZG9uJ3Qgd2FudCB0aGUgY3JlZGl0cyB0byBwYXNzIGEgY3JlZGl0CisJICAgb2YgdGhlIHRfZmFpcipGQUlSX01FTSAoYWxnb3JpdGhtIHJlc29sdXRpb24pICovCisJYnAtPmNtbmcuZmFpcl92YXJzLnVwcGVyX2JvdW5kID0gcl9wYXJhbSAqIHRfZmFpciAqIEZBSVJfTUVNOworCS8qIHNpbmNlIGVhY2ggdGljayBpcyA0IHVzZWMgKi8KKwlicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcm5lc3NfdGltZW91dCA9IGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjIC8gNDsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfaW5pdF92bl9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMsCi0JCQkJICAgdTMyIHdzdW0sIHUxNiBwb3J0X3JhdGUsCi0JCQkJIHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCAqbV9jbW5nX3BvcnQpCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3ZuX21pbm1heChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKIHsKIAlzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuIG1fcnNfdm47CiAJc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3ZuIG1fZmFpcl92bjsKQEAgLTIxNzEsMTcgKzIyMDcsMTggQEAKIAl9IGVsc2UgewogCQl2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+CiAJCQkJRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKLQkJLyogSWYgRkFJUk5FU1MgaXMgZW5hYmxlZCAobm90IGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9lcykgYW5kCisJCS8qIElmIGZhaXJuZXNzIGlzIGVuYWJsZWQgKG5vdCBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvZXMpIGFuZAogCQkgICBpZiBjdXJyZW50IG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMS4KIAkJICAgVGhpcyBpcyBhIHJlcXVpcmVtZW50IG9mIHRoZSBhbGdvcml0aG0uICovCi0JCWlmICgodm5fbWluX3JhdGUgPT0gMCkgJiYgd3N1bSkKKwkJaWYgKGJwLT52bl93ZWlnaHRfc3VtICYmICh2bl9taW5fcmF0ZSA9PSAwKSkKIAkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOwogCQl2bl9tYXhfcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+CiAJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKIAl9CiAKLQlEUChORVRJRl9NU0dfSUZVUCwgImZ1bmMgJWQ6IHZuX21pbl9yYXRlPSVkICB2bl9tYXhfcmF0ZT0lZCAgIgotCSAgICJ3c3VtPSVkXG4iLCBmdW5jLCB2bl9taW5fcmF0ZSwgdm5fbWF4X3JhdGUsIHdzdW0pOworCURQKE5FVElGX01TR19JRlVQLAorCSAgICJmdW5jICVkOiB2bl9taW5fcmF0ZT0lZCAgdm5fbWF4X3JhdGU9JWQgIHZuX3dlaWdodF9zdW09JWRcbiIsCisJICAgZnVuYywgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlLCBicC0+dm5fd2VpZ2h0X3N1bSk7CiAKIAltZW1zZXQoJm1fcnNfdm4sIDAsIHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKSk7CiAJbWVtc2V0KCZtX2ZhaXJfdm4sIDAsIHNpemVvZihzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4pKTsKQEAgLTIxOTMsNTUgKzIyMzAsMjAgQEAKIAltX3JzX3ZuLnZuX2NvdW50ZXIucXVvdGEgPQogCQkJCSh2bl9tYXhfcmF0ZSAqIFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQykgLyA4OwogCi0jaWZkZWYgQk5YMlhfUEVSX1BST1RfUU9TCi0JLyogcGVyIHByb3RvY29sIGNvdW50ZXIgKi8KLQlmb3IgKHByb3RvY29sID0gMDsgcHJvdG9jb2wgPCBOVU1fT0ZfUFJPVE9DT0xTOyBwcm90b2NvbCsrKSB7Ci0JCS8qIG1heGltYWwgTWJwcyBmb3IgdGhpcyBwcm90b2NvbCAqLwotCQltX3JzX3ZuLnByb3RvY29sX2NvdW50ZXJzW3Byb3RvY29sXS5yYXRlID0KLQkJCQkJCXByb3RvY29sX21heF9yYXRlW3Byb3RvY29sXTsKLQkJLyogdGhlIHF1b3RhIGluIGVhY2ggdGltZXIgcGVyaW9kIC0KLQkJICAgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGluIHRoaXMgcGVyaW9kICovCi0JCW1fcnNfdm4ucHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnF1b3RhID0KLQkJCSh1MzIpKHJzX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAqCi0JCQkgICgoZG91YmxlKW1fcnNfdm4uCi0JCQkJICAgcHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnJhdGUvOCkpOwotCX0KLSNlbmRpZgotCi0JaWYgKHdzdW0pIHsKKwlpZiAoYnAtPnZuX3dlaWdodF9zdW0pIHsKIAkJLyogY3JlZGl0IGZvciBlYWNoIHBlcmlvZCBvZiB0aGUgZmFpcm5lc3MgYWxnb3JpdGhtOgogCQkgICBudW1iZXIgb2YgYnl0ZXMgaW4gVF9GQUlSICh0aGUgdm4gc2hhcmUgdGhlIHBvcnQgcmF0ZSkuCi0JCSAgIHdzdW0gc2hvdWxkIG5vdCBiZSBsYXJnZXIgdGhhbiAxMDAwMCwgdGh1cwotCQkgICBUX0ZBSVJfQ09FRiAvICg4ICogd3N1bSkgd2lsbCBhbHdheXMgYmUgZ3JhdGVyIHRoYW4gemVybyAqLworCQkgICB2bl93ZWlnaHRfc3VtIHNob3VsZCBub3QgYmUgbGFyZ2VyIHRoYW4gMTAwMDAsIHRodXMKKwkJICAgVF9GQUlSX0NPRUYgLyAoOCAqIHZuX3dlaWdodF9zdW0pIHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIKKwkJICAgdGhhbiB6ZXJvICovCiAJCW1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgPQotCQkJbWF4KCh1NjQpKHZuX21pbl9yYXRlICogKFRfRkFJUl9DT0VGIC8gKDggKiB3c3VtKSkpLAotCQkJICAgICh1NjQpKG1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKiAyKSk7CisJCQltYXgoKHUzMikodm5fbWluX3JhdGUgKiAoVF9GQUlSX0NPRUYgLworCQkJCQkJICg4ICogYnAtPnZuX3dlaWdodF9zdW0pKSksCisJCQkgICAgKHUzMikoYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICogMikpOwogCQlEUChORVRJRl9NU0dfSUZVUCwgIm1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGE9JWRcbiIsCiAJCSAgIG1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEpOwogCX0KIAotI2lmZGVmIEJOWDJYX1BFUl9QUk9UX1FPUwotCWRvIHsKLQkJdTMyIHByb3RvY29sV2VpZ2h0U3VtID0gMDsKLQotCQlmb3IgKHByb3RvY29sID0gMDsgcHJvdG9jb2wgPCBOVU1fT0ZfUFJPVE9DT0xTOyBwcm90b2NvbCsrKQotCQkJcHJvdG9jb2xXZWlnaHRTdW0gKz0KLQkJCQkJZHJ2SW5pdC5wcm90b2NvbF9taW5fcmF0ZVtwcm90b2NvbF07Ci0JCS8qIHBlciBwcm90b2NvbCBjb3VudGVyIC0KLQkJICAgTk9UIE5FRURFRCBJRiBOTyBQRVItUFJPVE9DT0wgQ09OR0VTVElPTiBNQU5BR0VNRU5UICovCi0JCWlmIChwcm90b2NvbFdlaWdodFN1bSA+IDApIHsKLQkJCWZvciAocHJvdG9jb2wgPSAwOwotCQkJICAgICBwcm90b2NvbCA8IE5VTV9PRl9QUk9UT0NPTFM7IHByb3RvY29sKyspCi0JCQkJLyogY3JlZGl0IGZvciBlYWNoIHBlcmlvZCBvZiB0aGUKLQkJCQkgICBmYWlybmVzcyBhbGdvcml0aG0gLSBudW1iZXIgb2YgYnl0ZXMgaW4KLQkJCQkgICBUX0ZBSVIgKHRoZSBwcm90b2NvbCBzaGFyZSB0aGUgdm4gcmF0ZSkgKi8KLQkJCQltX2ZhaXJfdm4ucHJvdG9jb2xfY3JlZGl0X2RlbHRhW3Byb3RvY29sXSA9Ci0JCQkJCSh1MzIpKCh2bl9taW5fcmF0ZSAvIDgpICogdF9mYWlyICoKLQkJCQkJcHJvdG9jb2xfbWluX3JhdGUgLyBwcm90b2NvbFdlaWdodFN1bSk7Ci0JCX0KLQl9IHdoaWxlICgwKTsKLSNlbmRpZgotCiAJLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKS80OyBpKyspCiAJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKQEAgLTIyNTQsMTEgKzIyNTYsMTAgQEAKIAkJICAgICAgICgodTMyICopKCZtX2ZhaXJfdm4pKVtpXSk7CiB9CiAKKwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLwogc3RhdGljIHZvaWQgYm54MnhfbGlua19hdHRuKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IHZuOwotCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIHN5bmNlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgKi8KIAlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwogCkBAIC0yMjY2LDYgKzIyNjcsMTkgQEAKIAogCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKIAorCQkvKiBkcm9wbGVzcyBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJCXUzMiBwYXVzZV9lbmFibGVkID0gMDsKKworCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQorCQkJCXBhdXNlX2VuYWJsZWQgPSAxOworCisJCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICAgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpLAorCQkJICAgICAgIHBhdXNlX2VuYWJsZWQpOworCQl9CisKIAkJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykgewogCQkJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzOwogCkBAIC0yMjgzLDM2ICsyMjk3LDM4IEBACiAJYm54MnhfbGlua19yZXBvcnQoYnApOwogCiAJaWYgKElTX0UxSE1GKGJwKSkgeworCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCQlpbnQgZnVuYzsKKwkJaW50IHZuOwogCiAJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgewogCQkJaWYgKHZuID09IEJQX0UxSFZOKGJwKSkKIAkJCQljb250aW51ZTsKIAotCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBCUF9QT1JUKGJwKSk7CisJCQlmdW5jID0gKCh2biA8PCAxKSB8IHBvcnQpOwogCiAJCQkvKiBTZXQgdGhlIGF0dGVudGlvbiB0b3dhcmRzIG90aGVyIGRyaXZlcnMKIAkJCSAgIG9uIHRoZSBzYW1lIHBvcnQgKi8KIAkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wICsKIAkJCSAgICAgICAoTElOS19TWU5DX0FUVEVOVElPTl9CSVRfRlVOQ18wICsgZnVuYykqNCwgMSk7CiAJCX0KLQl9CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApICYmIChicC0+bGlua192YXJzLmxpbmVfc3BlZWQgPiAwKSkgewotCQlzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgbV9jbW5nX3BvcnQ7Ci0JCXUzMiB3c3VtOwotCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7CisJCQlpbnQgaTsKIAotCQkvKiBJbml0IFJBVEUgU0hBUElORyBhbmQgRkFJUk5FU1MgY29udGV4dHMgKi8KLQkJd3N1bSA9IGJueDJ4X2NhbGNfdm5fd3N1bShicCk7Ci0JCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnAsIChpbnQpd3N1bSwKLQkJCQkJYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkLAotCQkJCQkmbV9jbW5nX3BvcnQpOwotCQlpZiAoSVNfRTFITUYoYnApKQorCQkJLyogSW5pdCByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGNvbnRleHRzICovCisJCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwKTsKKwogCQkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQotCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCwKLQkJCQkJd3N1bSwgYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkLAotCQkJCQkJICAgICAmbV9jbW5nX3BvcnQpOworCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCk7CisKKwkJCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQorCQkJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCQkgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSo0LAorCQkJCSAgICAgICAoKHUzMiAqKSgmYnAtPmNtbmcpKVtpXSk7CisJCX0KIAl9CiB9CiAKQEAgLTI0ODksNiArMjUwNSw3IEBACiAJdTMyIG5pZ19pbnRfbWFza19hZGRyID0gcG9ydCA/IE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDEgOgogCQkJCSAgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwOwogCXUzMiBhZXVfbWFzazsKKwl1MzIgbmlnX21hc2sgPSAwOwogCiAJaWYgKGJwLT5hdHRuX3N0YXRlICYgYXNzZXJ0ZWQpCiAJCUJOWDJYX0VSUigiSUdVIEVSUk9SXG4iKTsKQEAgLTI1MTQsNyArMjUzMSw3IEBACiAJCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKIAogCQkJLyogc2F2ZSBuaWcgaW50ZXJydXB0IG1hc2sgKi8KLQkJCWJwLT5uaWdfbWFzayA9IFJFR19SRChicCwgbmlnX2ludF9tYXNrX2FkZHIpOworCQkJbmlnX21hc2sgPSBSRUdfUkQoYnAsIG5pZ19pbnRfbWFza19hZGRyKTsKIAkJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIDApOwogCiAJCQlibngyeF9saW5rX2F0dG4oYnApOwpAQCAtMjU2OSw3ICsyNTg2LDcgQEAKIAogCS8qIG5vdyBzZXQgYmFjayB0aGUgbWFzayAqLwogCWlmIChhc3NlcnRlZCAmIEFUVE5fTklHX0ZPUl9GVU5DKSB7Ci0JCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIGJwLT5uaWdfbWFzayk7CisJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIG5pZ19tYXNrKTsKIAkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CiAJfQogfQpAQCAtMjU5MSw5ICsyNjA4LDggQEAKIAogCQlCTlgyWF9FUlIoIlNQSU81IGh3IGF0dGVudGlvblxuIik7CiAKLQkJc3dpdGNoIChicC0+Y29tbW9uLmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spIHsKLQkJY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHOgotCQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KIAogCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8gMSAqLwpAQCAtMjYyNCw2ICsyNjQwLDEzIEBACiAJCX0KIAl9CiAKKwlpZiAoYXR0biAmIChBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wIHwKKwkJICAgIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzEpKSB7CisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQoJmJwLT5saW5rX3BhcmFtcyk7CisJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCX0KKwogCWlmIChhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKSB7CiAKIAkJdmFsID0gUkVHX1JEKGJwLCByZWdfb2Zmc2V0KTsKQEAgLTI2NDAsNyArMjY2Myw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmIChhdHRuICYgQk5YMlhfRE9PUlFfQVNTRVJUKSB7CisJaWYgKGF0dG4gJiBBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfSFdfSU5URVJSVVBUKSB7CiAKIAkJdmFsID0gUkVHX1JEKGJwLCBET1JRX1JFR19ET1JRX0lOVF9TVFNfQ0xSKTsKIAkJQk5YMlhfRVJSKCJEQiBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKQEAgLTI4ODYsMTAgKzI5MDksNiBAQAogCWlmIChzdGF0dXMgJiAweDEpCiAJCWJueDJ4X2F0dG5faW50KGJwKTsKIAotCS8qIENTdG9ybSBldmVudHM6IHF1ZXJ5X3N0YXRzLCBwb3J0IGRlbGV0ZSByYW1yb2QgKi8KLQlpZiAoc3RhdHVzICYgMHgyKQotCQlicC0+c3RhdHNfcGVuZGluZyA9IDA7Ci0KIAlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQVRURU5USU9OX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX2F0dF9pZHgpLAogCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKIAlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgVVNUT1JNX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX3VfaWR4KSwKQEAgLTI5MTQsNyArMjkzMyw3IEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKLQlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgWFNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCkBAIC0zMDAzLDE2ICszMDIyLDQxIEBACiAKICNkZWZpbmUgVVBEQVRFX0VYVEVORF9UU1RBVChzLCB0KSBcCiAJZG8geyBcCi0JCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIG9sZF90Y2xpZW50LT5zOyBcCi0JCW9sZF90Y2xpZW50LT5zID0gbGUzMl90b19jcHUodGNsaWVudC0+cyk7IFwKLQkJQUREX0VYVEVORF82NChmc3RhdHMtPnQjI19oaSwgZnN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF90Y2xpZW50LT5zKTsgXAorCQlvbGRfdGNsaWVudC0+cyA9IHRjbGllbnQtPnM7IFwKKwkJQUREX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBVUERBVEVfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCW9sZF91Y2xpZW50LT5zID0gdWNsaWVudC0+czsgXAorCQlBRERfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFVQREFURV9FWFRFTkRfWFNUQVQocywgdCkgXAogCWRvIHsgXAotCQlkaWZmID0gbGUzMl90b19jcHUoeGNsaWVudC0+cykgLSBvbGRfeGNsaWVudC0+czsgXAotCQlvbGRfeGNsaWVudC0+cyA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnMpOyBcCi0JCUFERF9FWFRFTkRfNjQoZnN0YXRzLT50IyNfaGksIGZzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCQlkaWZmID0gbGUzMl90b19jcHUoeGNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfeGNsaWVudC0+cyk7IFwKKwkJb2xkX3hjbGllbnQtPnMgPSB4Y2xpZW50LT5zOyBcCisJCUFERF9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIG1pbnVlbmQgLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfNjQobV9oaSwgc19oaSwgbV9sbywgc19sbykgXAorCWRvIHsgXAorCQlESUZGXzY0KG1faGksIG1faGksIHNfaGksIG1fbG8sIG1fbG8sIHNfbG8pOyBcCisJfSB3aGlsZSAoMCkKKworLyogbWludWVuZFtoaTpsb10gLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfRVhURU5EXzY0KG1faGksIG1fbG8sIHMpIFwKKwlkbyB7IFwKKwkJU1VCXzY0KG1faGksIDAsIG1fbG8sIHMpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVUJfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCVNVQl9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAogCX0gd2hpbGUgKDApCiAKIC8qCkBAIC0zMDM5LDExICszMDgzLDEyIEBACiB7CiAJaWYgKCFicC0+c3RhdHNfcGVuZGluZykgewogCQlzdHJ1Y3QgZXRoX3F1ZXJ5X3JhbXJvZF9kYXRhIHJhbXJvZF9kYXRhID0gezB9OwotCQlpbnQgcmM7CisJCWludCBpLCByYzsKIAogCQlyYW1yb2RfZGF0YS5kcnZfY291bnRlciA9IGJwLT5zdGF0c19jb3VudGVyKys7Ci0JCXJhbXJvZF9kYXRhLmNvbGxlY3RfcG9ydF8xYiA9IGJwLT5wb3J0LnBtZiA/IDEgOiAwOwotCQlyYW1yb2RfZGF0YS5jdHJfaWRfdmVjdG9yID0gKDEgPDwgQlBfQ0xfSUQoYnApKTsKKwkJcmFtcm9kX2RhdGEuY29sbGVjdF9wb3J0ID0gYnAtPnBvcnQucG1mID8gMSA6IDA7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQkJcmFtcm9kX2RhdGEuY3RyX2lkX3ZlY3RvciB8PSAoMSA8PCBicC0+ZnBbaV0uY2xfaWQpOwogCiAJCXJjID0gYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU1RBVF9RVUVSWSwgMCwKIAkJCQkgICAoKHUzMiAqKSZyYW1yb2RfZGF0YSlbMV0sCkBAIC0zMDU5LDcgKzMxMDQsOSBAQAogc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CiAKKwlicC0+c3RhdHNfcGVuZGluZyA9IDA7CiAJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CiAJYnAtPnN0YXRzX2NvdW50ZXIgPSAwOwogCkBAIC0zMDgxLDkgKzMxMjgsMTkgQEAKIAkJICAgICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cy5lZ3Jlc3NfbWFjX3BrdDFfbG8pLCAyKTsKIAogCS8qIGZ1bmN0aW9uIHN0YXRzICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJbWVtc2V0KCZmcC0+b2xkX3RjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPm9sZF91Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5vbGRfeGNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+ZXRoX3Ffc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMpKTsKKwl9CisKIAltZW1zZXQoJmJwLT5kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKLQltZW1zZXQoJmJwLT5vbGRfdGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOwotCW1lbXNldCgmYnAtPm9sZF94Y2xpZW50LCAwLCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CiAJbWVtc2V0KCZicC0+ZXRoX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cykpOwogCiAJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7CkBAIC0zMDk3LDYgKzMxNTQsOCBAQAogCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKIAogCSpzdGF0c19jb21wID0gRE1BRV9DT01QX1ZBTDsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCXJldHVybjsKIAogCS8qIGxvYWRlciAqLwogCWlmIChicC0+ZXhlY3V0ZXJfaWR4KSB7CkBAIC0zNDg2LDcgKzM1NDUsMTEgQEAKIHsKIAlzdHJ1Y3QgYm1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5ibWFjX3N0YXRzKTsKIAlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7Ci0Jc3RydWN0IHJlZ3BhaXIgZGlmZjsKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKwlzdHJ1Y3QgeworCQl1MzIgbG87CisJCXUzMiBoaTsKKwl9IGRpZmY7CiAKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JlcmIsIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JmY3MsIHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKQEAgLTM0OTYsNyArMzU1OSw3IEBACiAJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyamJyLCByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4Y2YsIHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7Ci0JVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfYm1hY194cGYpOwogCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHhwZiwgdHhfc3RhdF9vdXR4b2Zmc2VudCk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0eHBmLCB0eF9zdGF0X2Zsb3djb250cm9sZG9uZSk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NjQsIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0cyk7CkBAIC0zNTE3LDEyICszNTgwLDIzIEBACiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0ZXJyLAogCQkJCXR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9ycyk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0dWZsLCB0eF9zdGF0X2JtYWNfdWZsKTsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF9ibWFjX3hwZl9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbyA9CisJCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfYm1hY194cGZfbG87CisKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2xvID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9sbzsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfZW1hY19zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlzdHJ1Y3QgZW1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5lbWFjX3N0YXRzKTsKIAlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7CisJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAKIAlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9pZmhjaW5iYWRvY3RldHMpOwogCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHMpOwpAQCAtMzU1NSw2ICszNjI5LDI0IEBACiAJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzKTsKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzKTsKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzKTsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpID0KKwkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGk7CisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfbG8gPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKKwlBRERfNjQoZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGksCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbywKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfbG8pOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9oaSA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b25zZW50X2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8gPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9uc2VudF9sbzsKKwlBRERfNjQoZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9oaSwKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfaGksCisJICAgICAgIGVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8sCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2xvKTsKIH0KIAogc3RhdGljIGludCBibngyeF9od19zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKQEAgLTM1NjMsNyArMzY1NSwxMSBAQAogCXN0cnVjdCBuaWdfc3RhdHMgKm9sZCA9ICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyk7CiAJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXN0cnVjdCByZWdwYWlyIGRpZmY7CisJc3RydWN0IHsKKwkJdTMyIGxvOworCQl1MzIgaGk7CisJfSBkaWZmOworCXUzMiBuaWdfdGltZXJfbWF4OwogCiAJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykKIAkJYm54MnhfYm1hY19zdGF0c191cGRhdGUoYnApOwpAQCAtMzU3Miw3ICszNjY4LDcgQEAKIAkJYm54MnhfZW1hY19zdGF0c191cGRhdGUoYnApOwogCiAJZWxzZSB7IC8qIHVucmVhY2hlZCAqLwotCQlCTlgyWF9FUlIoInN0YXRzIHVwZGF0ZWQgYnkgZG1hZSBidXQgbm8gTUFDIGFjdGl2ZVxuIik7CisJCUJOWDJYX0VSUigic3RhdHMgdXBkYXRlZCBieSBETUFFIGJ1dCBubyBNQUMgYWN0aXZlXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzU5NCwxMzQgKzM2OTAsMjExIEBACiAKIAlwc3RhdHMtPmhvc3RfcG9ydF9zdGF0c19zdGFydCA9ICsrcHN0YXRzLT5ob3N0X3BvcnRfc3RhdHNfZW5kOwogCisJbmlnX3RpbWVyX21heCA9IFNITUVNX1JEKGJwLCBwb3J0X21iW0JQX1BPUlQoYnApXS5zdGF0X25pZ190aW1lcik7CisJaWYgKG5pZ190aW1lcl9tYXggIT0gZXN0YXRzLT5uaWdfdGltZXJfbWF4KSB7CisJCWVzdGF0cy0+bmlnX3RpbWVyX21heCA9IG5pZ190aW1lcl9tYXg7CisJCUJOWDJYX0VSUigiTklHIHRpbWVyIG1heCAoJXUpXG4iLCBlc3RhdHMtPm5pZ190aW1lcl9tYXgpOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCBldGhfc3RhdHNfcXVlcnkgKnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ3X3N0YXRzKTsKLQlpbnQgY2xfaWQgPSBCUF9DTF9JRChicCk7CiAJc3RydWN0IHRzdG9ybV9wZXJfcG9ydF9zdGF0cyAqdHBvcnQgPQotCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KLQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZicC0+b2xkX3RjbGllbnQ7Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp4Y2xpZW50ID0KLQkJCSZzdGF0cy0+eHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfeGNsaWVudCA9ICZicC0+b2xkX3hjbGllbnQ7CisJCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7CiAJc3RydWN0IGhvc3RfZnVuY19zdGF0cyAqZnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHMpOwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXUzMiBkaWZmOworCWludCBpOwogCi0JLyogYXJlIHN0b3JtIHN0YXRzIHZhbGlkPyAqLwotCWlmICgodTE2KShsZTE2X3RvX2NwdSh0Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9Ci0JCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgdHN0b3JtIgotCQkgICAiICB0c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKLQkJICAgdGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmICgodTE2KShsZTE2X3RvX2NwdSh4Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9Ci0JCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgeHN0b3JtIgotCQkgICAiICB4c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKLQkJICAgeGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOwotCQlyZXR1cm4gLTI7Ci0JfQorCW1lbXNldCgmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKKwllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpID0gMDsKKwllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvID0gMDsKKwllc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpID0gMDsKKwllc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvID0gMDsKKwllc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSA9IDA7CisJZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8gPSAwOwogCi0JZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9Ci0JZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCWludCBjbF9pZCA9IGZwLT5jbF9pZDsKKwkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnRzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmZwLT5vbGRfdGNsaWVudDsKKwkJc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp1Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnVzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF91Y2xpZW50ID0gJmZwLT5vbGRfdWNsaWVudDsKKwkJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp4Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnhzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF94Y2xpZW50ID0gJmZwLT5vbGRfeGNsaWVudDsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmZnAtPmV0aF9xX3N0YXRzOworCQl1MzIgZGlmZjsKKworCQkvKiBhcmUgc3Rvcm0gc3RhdHMgdmFsaWQ/ICovCisJCWlmICgodTE2KShsZTE2X3RvX2NwdSh4Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9CisJCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKKwkJCURQKEJOWDJYX01TR19TVEFUUywgIlslZF0gc3RhdHMgbm90IHVwZGF0ZWQgYnkgeHN0b3JtIgorCQkJICAgIiAgeHN0b3JtIGNvdW50ZXIgKCVkKSAhPSBzdGF0c19jb3VudGVyICglZClcbiIsCisJCQkgICBpLCB4Y2xpZW50LT5zdGF0c19jb3VudGVyLCBicC0+c3RhdHNfY291bnRlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCh1MTYpKGxlMTZfdG9fY3B1KHRjbGllbnQtPnN0YXRzX2NvdW50ZXIpICsgMSkgIT0KKwkJCQkJCQlicC0+c3RhdHNfY291bnRlcikgeworCQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAiWyVkXSBzdGF0cyBub3QgdXBkYXRlZCBieSB0c3Rvcm0iCisJCQkgICAiICB0c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKKwkJCSAgIGksIHRjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKKwkJCXJldHVybiAtMjsKKwkJfQorCQlpZiAoKHUxNikobGUxNl90b19jcHUodWNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQorCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHVzdG9ybSIKKwkJCSAgICIgIHVzdG9ybSBjb3VudGVyICglZCkgIT0gc3RhdHNfY291bnRlciAoJWQpXG4iLAorCQkJICAgaSwgdWNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOworCQkJcmV0dXJuIC00OworCQl9CisKKwkJcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9CisJCXFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGkgPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9ieXRlcy5oaSk7Ci0JZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbyA9Ci0JZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyA9CisJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQlxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvID0KIAkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfYnl0ZXMubG8pOwogCi0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9CisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkgPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5oaSk7Ci0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9CisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8gPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5sbyk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCisJCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X3VuaWNhc3RfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfbXVsdGljYXN0X3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfYnJvYWRjYXN0X3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCwKKwkJCQkJZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHMpOworCQlVUERBVEVfRVhURU5EX1RTVEFUKG5vX2J1ZmZfZGlzY2FyZCwgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlTVUJfRVhURU5EX1VTVEFUKHVjYXN0X25vX2J1ZmZfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChtY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChiY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9VU1RBVCh1Y2FzdF9ub19idWZmX3BrdHMsIG5vX2J1ZmZfZGlzY2FyZCk7CisJCVVQREFURV9FWFRFTkRfVVNUQVQobWNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOworCQlVUERBVEVfRVhURU5EX1VTVEFUKGJjYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmhpKTsKKwkJcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbyA9CisJCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5sbyk7CisKKwkJVVBEQVRFX0VYVEVORF9YU1RBVCh1bmljYXN0X3BrdHNfc2VudCwKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKKwkJVVBEQVRFX0VYVEVORF9YU1RBVChtdWx0aWNhc3RfcGt0c19zZW50LAorCQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CisJCVVQREFURV9FWFRFTkRfWFNUQVQoYnJvYWRjYXN0X3BrdHNfc2VudCwKKwkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOworCisJCW9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkID0gdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZDsKKwkJb2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCA9IHRjbGllbnQtPnR0bDBfZGlzY2FyZDsKKworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyk7CisKKwkJQUREXzY0KGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSwKKwkJICAgICAgIHFzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCisJCSAgICAgICBlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvLAorCQkgICAgICAgcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbyk7CisJCUFERF82NChlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSwgcXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGksCisJCSAgICAgICBlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbywgcXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8pOworCX0KKworCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpLAorCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvKTsKKworCW1lbWNweShlc3RhdHMsICYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSAtIDIqc2l6ZW9mKHUzMikpOworCisJQUREXzY0KGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2hpLAorCSAgICAgICBlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19sbyk7CiAJQUREXzY0KGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCiAJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGksCiAJICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8sCiAJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG8pOwogCi0JQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCi0JICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOwotCi0JVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfdW5pY2FzdF9wa3RzLCB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X211bHRpY2FzdF9wa3RzLAotCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKLQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9icm9hZGNhc3RfcGt0cywKLQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZCk7Ci0KLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmhpKTsKLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmxvKTsKLQotCVVQREFURV9FWFRFTkRfWFNUQVQodW5pY2FzdF9wa3RzX3NlbnQsCi0JCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKLQlVUERBVEVfRVhURU5EX1hTVEFUKG11bHRpY2FzdF9wa3RzX3NlbnQsCi0JCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOwotCVVQREFURV9FWFRFTkRfWFNUQVQoYnJvYWRjYXN0X3BrdHNfc2VudCwKLQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7Ci0KLQltZW1jcHkoZXN0YXRzLCAmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKLQotCWVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19maWx0ZXJfZGlzY2FyZCk7Ci0JZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+eHhvdmVyZmxvd19kaXNjYXJkKTsKLQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkID0KKwkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2ZpbHRlcl9kaXNjYXJkKTsKKwkJZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQgPQorCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT54eG92ZXJmbG93X2Rpc2NhcmQpOworCQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KIAkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+YnJiX3RydW5jYXRlX2Rpc2NhcmQpOwotCWVzdGF0cy0+bWFjX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2Rpc2NhcmQpOwotCi0Jb2xkX3RjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmhpID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5oaSk7Ci0Jb2xkX3RjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmxvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5sbyk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkpOwotCW9sZF90Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmxvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmxvKTsKLQlvbGRfdGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMubG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMubG8pOwotCW9sZF90Y2xpZW50LT50b3RhbF9yY3ZfcGt0cyA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9wa3RzKTsKLQotCW9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCk7Ci0Jb2xkX3RjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCk7Ci0JZXN0YXRzLT5ub19idWZmX2Rpc2NhcmQgPQotCW9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQpOwotCW9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT50dGwwX2Rpc2NhcmQpOwotCi0Jb2xkX3hjbGllbnQtPnRvdGFsX3NlbnRfcGt0cyA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfcGt0cyk7Ci0Jb2xkX3hjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmhpKTsKLQlvbGRfeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmxvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQubG8pOwotCW9sZF94Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQuaGkpOwotCW9sZF94Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQubG8pOwotCW9sZF94Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQuaGkpOwotCW9sZF94Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQubG8pOworCQllc3RhdHMtPm1hY19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19kaXNjYXJkKTsKKwl9CiAKIAlmc3RhdHMtPmhvc3RfZnVuY19zdGF0c19zdGFydCA9ICsrZnN0YXRzLT5ob3N0X2Z1bmNfc3RhdHNfZW5kOwogCisJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X25ldF9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmJwLT5vbGRfdGNsaWVudDsKIAlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOworCWludCBpOwogCiAJbnN0YXRzLT5yeF9wYWNrZXRzID0KIAkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpICsKQEAgLTM3MzMsMzQgKzM5MDYsMzMgQEAKIAkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSkgKwogCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKIAotCW5zdGF0cy0+cnhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpKTsKKwluc3RhdHMtPnJ4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSk7CiAKIAluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7CiAKLQluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCArCi0JCQkgICAgIGVzdGF0cy0+bWFjX2Rpc2NhcmQ7CisJbnN0YXRzLT5yeF9kcm9wcGVkID0gZXN0YXRzLT5tYWNfZGlzY2FyZDsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbnN0YXRzLT5yeF9kcm9wcGVkICs9CisJCQlsZTMyX3RvX2NwdShicC0+ZnBbaV0ub2xkX3RjbGllbnQuY2hlY2tzdW1fZGlzY2FyZCk7CisKIAluc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOwogCiAJbnN0YXRzLT5tdWx0aWNhc3QgPQotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSk7CiAKIAluc3RhdHMtPmNvbGxpc2lvbnMgPQotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19sbyArCi0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfbG8gKwotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOwotCi0JZXN0YXRzLT5qYWJiZXJfcGFja2V0c19yZWNlaXZlZCA9Ci0JCQkJb2xkX3RjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkICsKLQkJCQllc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19sbzsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zX2hpKTsKIAogCW5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9Ci0JCQkJZXN0YXRzLT5yeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2xvICsKLQkJCQllc3RhdHMtPmphYmJlcl9wYWNrZXRzX3JlY2VpdmVkOwotCW5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBlc3RhdHMtPmJyYl9kcm9wX2xvICsgZXN0YXRzLT5icmJfdHJ1bmNhdGVfbG87Ci0JbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0gZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19sbzsKLQluc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfbG87Ci0JbnN0YXRzLT5yeF9maWZvX2Vycm9ycyA9IG9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQ7CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpKTsKKwluc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5icmJfZHJvcF9oaSkgKworCQkJCSBibngyeF9oaWxvKCZlc3RhdHMtPmJyYl90cnVuY2F0ZV9oaSk7CisJbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19oaSk7CisJbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpKTsKKwluc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkpOwogCW5zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkOwogCiAJbnN0YXRzLT5yeF9lcnJvcnMgPSBuc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKwpAQCAtMzc3MSw0NiArMzk0Myw2MSBAQAogCQkJICAgIG5zdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKIAogCW5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPQotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOwotCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPSBlc3RhdHMtPnJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzX2xvOworCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGkpOworCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKTsKIAluc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKIAluc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOwogCW5zdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7CiAKIAluc3RhdHMtPnR4X2Vycm9ycyA9IG5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgKwotCQkJICAgIG5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnM7CisJCQkgICAgbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyArCisJICAgIGJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCWludCBpOworCisJZXN0YXRzLT5kcml2ZXJfeG9mZiA9IDA7CisJZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgPSAwOworCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCA9IDA7CisJZXN0YXRzLT5od19jc3VtX2VyciA9IDA7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOworCisJCWVzdGF0cy0+ZHJpdmVyX3hvZmYgKz0gcXN0YXRzLT5kcml2ZXJfeG9mZjsKKwkJZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgKz0gcXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3Q7CisJCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCArPSBxc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQ7CisJCWVzdGF0cy0+aHdfY3N1bV9lcnIgKz0gcXN0YXRzLT5od19jc3VtX2VycjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewogCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKLQlpbnQgdXBkYXRlID0gMDsKIAogCWlmICgqc3RhdHNfY29tcCAhPSBETUFFX0NPTVBfVkFMKQogCQlyZXR1cm47CiAKIAlpZiAoYnAtPnBvcnQucG1mKQotCQl1cGRhdGUgPSAoYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKKwkJYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKTsKIAotCXVwZGF0ZSB8PSAoYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKLQotCWlmICh1cGRhdGUpCi0JCWJueDJ4X25ldF9zdGF0c191cGRhdGUoYnApOwotCi0JZWxzZSB7Ci0JCWlmIChicC0+c3RhdHNfcGVuZGluZykgewotCQkJYnAtPnN0YXRzX3BlbmRpbmcrKzsKLQkJCWlmIChicC0+c3RhdHNfcGVuZGluZyA9PSAzKSB7Ci0JCQkJQk5YMlhfRVJSKCJzdGF0cyBub3QgdXBkYXRlZCBmb3IgMyB0aW1lc1xuIik7Ci0JCQkJYm54MnhfcGFuaWMoKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KKwlpZiAoYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKGJwKSAmJiAoYnAtPnN0YXRzX3BlbmRpbmcrKyA9PSAzKSkgeworCQlCTlgyWF9FUlIoInN0b3JtIHN0YXRzIHdlcmUgbm90IHVwZGF0ZWQgZm9yIDMgdGltZXNcbiIpOworCQlibngyeF9wYW5pYygpOworCQlyZXR1cm47CiAJfQogCisJYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShicCk7CisJYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShicCk7CisKIAlpZiAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1RJTUVSKSB7Ci0JCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmYnAtPm9sZF90Y2xpZW50OworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0KKwkJCQkJCQkmYnAtPmZwLT5vbGRfdGNsaWVudDsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwLT5ldGhfcV9zdGF0czsKIAkJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuc3RhdHMgPSAmYnAtPmRldi0+c3RhdHM7CiAJCWludCBpOwpAQCAtMzgyNSwyMCArNDAxMiwyMiBAQAogCQkgICAgICAgKHUxNikobGUxNl90b19jcHUoKmJwLT5mcC0+cnhfY29uc19zYikgLQogCQkJICAgICBicC0+ZnAtPnJ4X2NvbXBfY29ucyksCiAJCSAgICAgICBsZTE2X3RvX2NwdSgqYnAtPmZwLT5yeF9jb25zX3NiKSwgbnN0YXRzLT5yeF9wYWNrZXRzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgKFhvZmYgZXZlbnRzICV1KSAgYnJiIGRyb3BzICV1XG4iLAotCQkgICAgICAgbmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSA/ICJYb2ZmIiA6ICJYb24iLAotCQkgICAgICAgZXN0YXRzLT5kcml2ZXJfeG9mZiwgZXN0YXRzLT5icmJfZHJvcF9sbyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICVzIChYb2ZmIGV2ZW50cyAldSkgIGJyYiBkcm9wcyAldSAgIgorCQkJCSAgImJyYiB0cnVuY2F0ZSAldVxuIiwKKwkJICAgICAgIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpID8gIlhvZmYiIDogIlhvbiIpLAorCQkgICAgICAgcXN0YXRzLT5kcml2ZXJfeG9mZiwKKwkJICAgICAgIGVzdGF0cy0+YnJiX2Ryb3BfbG8sIGVzdGF0cy0+YnJiX3RydW5jYXRlX2xvKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInRzdGF0czogY2hlY2tzdW1fZGlzY2FyZCAldSAgIgotCQkJInBhY2tldHNfdG9vX2JpZ19kaXNjYXJkICV1ICBub19idWZmX2Rpc2NhcmQgJXUgICIKKwkJCSJwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCAlbHUgIG5vX2J1ZmZfZGlzY2FyZCAlbHUgICIKIAkJCSJtYWNfZGlzY2FyZCAldSAgbWFjX2ZpbHRlcl9kaXNjYXJkICV1ICAiCiAJCQkieHhvdnJmbG93X2Rpc2NhcmQgJXUgIGJyYl90cnVuY2F0ZV9kaXNjYXJkICV1ICAiCiAJCQkidHRsMF9kaXNjYXJkICV1XG4iLAotCQkgICAgICAgb2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkLCBlc3RhdHMtPm1hY19kaXNjYXJkLAotCQkgICAgICAgZXN0YXRzLT5tYWNfZmlsdGVyX2Rpc2NhcmQsIGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkLAotCQkgICAgICAgZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZCwKLQkJICAgICAgIG9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQpOworCQkgICAgICAgbGUzMl90b19jcHUob2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQpLAorCQkgICAgICAgYm54MnhfaGlsbygmcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSksCisJCSAgICAgICBibngyeF9oaWxvKCZxc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSksCisJCSAgICAgICBlc3RhdHMtPm1hY19kaXNjYXJkLCBlc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCwKKwkJICAgICAgIGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkLCBlc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkLAorCQkgICAgICAgbGUzMl90b19jcHUob2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCkpOwogCiAJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiWyVkXTogJWx1XHQlbHVcdCVsdVxuIiwgaSwKQEAgLTM5ODcsNyArNDE3Niw3IEBACiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOwogCQlpbnQgcmM7CiAKLQkJYm54MnhfdHhfaW50KGZwLCAxMDAwKTsKKwkJYm54MnhfdHhfaW50KGZwKTsKIAkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOwogCX0KIApAQCAtNDIzOSwxMCArNDQyOCw2IEBACiAJCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLAogCQkJCQkJICAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCiAJCQkgYnAtPnJ4X3RpY2tzID8gMCA6IDEpOwotCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSBVU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgc2JfaWQsCi0JCQkJCQkgICAgIFVfU0JfRVRIX1JYX0JEX0lOREVYKSwKLQkJCSBicC0+cnhfdGlja3MgPyAwIDogMSk7CiAKIAkJLyogSENfSU5ERVhfQ19FVEhfVFhfQ1FfQ09OUyAqLwogCQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwpAQCAtNDI3Myw4ICs0NDU4LDcgQEAKIAkJaWYgKGZwLT50cGFfc3RhdGVbaV0gPT0gQk5YMlhfVFBBX1NUQVJUKQogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKIAkJCQkJIHBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBicC0+cnhfYnVmX3NpemUsCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcnhfYnVmLT5za2IgPSBOVUxMOwpAQCAtNDI4OSwxNiArNDQ3MywxMyBAQAogCXUxNiByaW5nX3Byb2QsIGNxZV9yaW5nX3Byb2Q7CiAJaW50IGksIGo7CiAKLQlicC0+cnhfYnVmX3NpemUgPSBicC0+ZGV2LT5tdHU7Ci0JYnAtPnJ4X2J1Zl9zaXplICs9IGJwLT5yeF9vZmZzZXQgKyBFVEhfT1ZSRUhFQUQgKwotCQlCQ01fUlhfRVRIX1BBWUxPQURfQUxJR047CisJYnAtPnJ4X2J1Zl9zaXplID0gYnAtPmRldi0+bXR1ICsgRVRIX09WUkVIRUFEICsgQk5YMlhfUlhfQUxJR047CisJRFAoTkVUSUZfTVNHX0lGVVAsCisJICAgIm10dSAlZCAgcnhfYnVmX3NpemUgJWRcbiIsIGJwLT5kZXYtPm10dSwgYnAtPnJ4X2J1Zl9zaXplKTsKIAogCWlmIChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpIHsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJyeF9idWZfc2l6ZSAlZCAgZWZmZWN0aXZlX210dSAlZFxuIiwKLQkJICAgYnAtPnJ4X2J1Zl9zaXplLCBicC0+ZGV2LT5tdHUgKyBFVEhfT1ZSRUhFQUQpOwogCi0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7CisJCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQkJZm9yIChpID0gMDsgaSA8IG1heF9hZ2dfcXVldWVzOyBpKyspIHsKQEAgLTQzMjEsNyArNDUwMiw3IEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZwLT5yeF9iZF9jb25zID0gMDsKQEAgLTQzOTYsOCArNDU3Nyw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJCWlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgewogCQkJCUJOWDJYX0VSUigid2FzIG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAiCi0JCQkJCSAgIiVkIHJ4IHNrYnNcbiIsIGkpOwotCQkJCWJwLT5ldGhfc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworCQkJCQkgICIlZCByeCBza2JzIG9uIHF1ZXVlWyVkXVxuIiwgaSwgaik7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJpbmdfcHJvZCA9IE5FWFRfUlhfSURYKHJpbmdfcHJvZCk7CkBAIC00NDMzLDcgKzQ2MTQsNyBAQAogewogCWludCBpLCBqOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7CkBAIC00NDg2LDI3ICs0NjY3LDIwIEBACiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0gYm54Mnhfc3AoYnAsIGNvbnRleHRbaV0uZXRoKTsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0JCXU4IHNiX2lkID0gRlBfU0JfSUQoZnApOwotCi0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X3Byb2RzX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfbG8gPQotCQkJCQkJVTY0X0xPKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuc3RhdGlzdGljc19kYXRhID0gKEJQX0NMX0lEKGJwKSB8Ci0JCQkJWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFKTsKKwkJdTggY2xfaWQgPSBmcC0+Y2xfaWQ7CisJCXU4IHNiX2lkID0gZnAtPnNiX2lkOwogCiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zYl9pbmRleF9udW1iZXJzID0KIAkJCQkJCUJOWDJYX1JYX1NCX0lOREVYX05VTTsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmNsaWVudElkID0gRlBfQ0xfSUQoZnApOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uY2xpZW50SWQgPSBjbF9pZDsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uZmxhZ3MgPQotCQkJVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfTUNfQUxJR05NRU5UOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWNfYWxpZ25tZW50X3NpemUgPQotCQkJQkNNX1JYX0VUSF9QQVlMT0FEX0FMSUdOOworCQkJKFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX01DX0FMSUdOTUVOVCB8CisJCQkgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyk7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPQorCQkJCQkJY2xfaWQ7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5tY19hbGlnbm1lbnRfbG9nX3NpemUgPQorCQkJCQkJQk5YMlhfUlhfQUxJR05fU0hJRlQ7CiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5iZF9idWZmX3NpemUgPQogCQkJCQkJYnAtPnJ4X2J1Zl9zaXplOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uYmRfcGFnZV9iYXNlX2hpID0KQEAgLTQ1MjYsNiArNDcwMCwyMSBAQAogCQkJCQkJVTY0X0xPKGZwLT5yeF9zZ2VfbWFwcGluZyk7CiAJCX0KIAorCQljb250ZXh0LT51c3Rvcm1fYWdfY29udGV4dC5jZHVfdXNhZ2UgPQorCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAorCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfVUNNX0FHLAorCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7CisKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2hpID0KKwkJCQkJCVU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2xvID0KKwkJCQkJCVU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2hpID0KKwkJCQkJCVU2NF9ISShmcC0+dHhfcHJvZHNfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnR4X3Byb2RzX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5zdGF0aXN0aWNzX2RhdGEgPSAoY2xfaWQgfAorCQkJCVhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0VOQUJMRSk7CiAJCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnNiX2luZGV4X251bWJlciA9CiAJCQkJCQlDX1NCX0VUSF9UWF9DUV9JTkRFWDsKIAkJY29udGV4dC0+Y3N0b3JtX3N0X2NvbnRleHQuc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CkBAIC00NTM0LDEwICs0NzIzLDYgQEAKIAkJCUNEVV9SU1JWRF9WQUxVRV9UWVBFX0EoSFdfQ0lEKGJwLCBpKSwKIAkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1hDTV9BRywKIAkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOwotCQljb250ZXh0LT51c3Rvcm1fYWdfY29udGV4dC5jZHVfdXNhZ2UgPQotCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAotCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfVUNNX0FHLAotCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7CiAJfQogfQogCkBAIC00NTQ2LDE0ICs0NzMxLDE1IEBACiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKIAlpbnQgaTsKIAotCWlmICghaXNfbXVsdGkoYnApKQorCWlmIChicC0+bXVsdGlfbW9kZSA9PSBFVEhfUlNTX01PREVfRElTQUJMRUQpCiAJCXJldHVybjsKIAotCURQKE5FVElGX01TR19JRlVQLCAiSW5pdGlhbGl6aW5nIGluZGlyZWN0aW9uIHRhYmxlXG4iKTsKKwlEUChORVRJRl9NU0dfSUZVUCwKKwkgICAiSW5pdGlhbGl6aW5nIGluZGlyZWN0aW9uIHRhYmxlICBtdWx0aV9tb2RlICVkXG4iLCBicC0+bXVsdGlfbW9kZSk7CiAJZm9yIChpID0gMDsgaSA8IFRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9TSVpFOyBpKyspCiAJCVJFR19XUjgoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCiAJCQlUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfT0ZGU0VUKGZ1bmMpICsgaSwKLQkJCUJQX0NMX0lEKGJwKSArIChpICUgYnAtPm51bV9xdWV1ZXMpKTsKKwkJCWJwLT5mcC0+Y2xfaWQgKyAoaSAlIGJwLT5udW1fcnhfcXVldWVzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9jbGllbnRfY29uZmlnKHN0cnVjdCBibngyeCAqYnApCkBAIC00NTYzLDEzICs0NzQ5LDEzIEBACiAJaW50IGk7CiAKIAl0c3Rvcm1fY2xpZW50Lm10dSA9IGJwLT5kZXYtPm10dTsKLQl0c3Rvcm1fY2xpZW50LnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IEJQX0NMX0lEKGJwKTsKIAl0c3Rvcm1fY2xpZW50LmNvbmZpZ19mbGFncyA9Ci0JCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFOworCQkJCShUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgfAorCQkJCSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRSk7CiAjaWZkZWYgQkNNX1ZMQU4KIAlpZiAoYnAtPnJ4X21vZGUgJiYgYnAtPnZsZ3JwICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpKSB7CiAJCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzIHw9Ci0JCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEU7CisJCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRTsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsICJ2bGFuIHJlbW92YWwgZW5hYmxlZFxuIik7CiAJfQogI2VuZGlmCkBAIC00NTg3LDYgKzQ3NzMsOCBAQAogCX0KIAogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXRzdG9ybV9jbGllbnQuc3RhdGlzdGljc19jb3VudGVyX2lkID0gYnAtPmZwW2ldLmNsX2lkOworCiAJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKIAkJICAgICAgIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBicC0+ZnBbaV0uY2xfaWQpLAogCQkgICAgICAgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMF0pOwpAQCAtNDYxNSwxOCArNDgwMywyMiBAQAogCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9kcm9wX2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2Ryb3BfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAljYXNlIEJOWDJYX1JYX01PREVfTk9STUFMOgogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAljYXNlIEJOWDJYX1JYX01PREVfQUxMTVVMVEk6CiAJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAljYXNlIEJOWDJYX1JYX01PREVfUFJPTUlTQzoKIAkJdHN0b3JtX21hY19maWx0ZXIudWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlCTlgyWF9FUlIoIkJBRCByeCBtb2RlICglZClcbiIsIG1vZGUpOwogCQlicmVhazsKQEAgLTQ2NzcsMTkgKzQ4NjksNjQgQEAKIAlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOwogfQogCisvKiBDYWxjdWxhdGVzIHRoZSBzdW0gb2Ygdm5fbWluX3JhdGVzLgorICAgSXQncyBuZWVkZWQgZm9yIGZ1cnRoZXIgbm9ybWFsaXppbmcgb2YgdGhlIG1pbl9yYXRlcy4KKyAgIFJldHVybnM6CisgICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMuCisgICAgICAgb3IKKyAgICAgMCAtIGlmIGFsbCB0aGUgbWluX3JhdGVzIGFyZSAwLgorICAgICBJbiB0aGUgbGF0ZXIgY2FzZSBmYWluZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCisgICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwgYmUgc2V0IHRvIDEuCisgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBhbGxfemVybyA9IDE7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgdm47CisKKwlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7CisJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7CisJCWludCBmdW5jID0gMip2biArIHBvcnQ7CisJCXUzMiB2bl9jZmcgPQorCQkJU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCQl1MzIgdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgorCQkJCSAgIEZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVCkgKiAxMDA7CisKKwkJLyogU2tpcCBoaWRkZW4gdm5zICovCisJCWlmICh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpCisJCQljb250aW51ZTsKKworCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KKwkJaWYgKCF2bl9taW5fcmF0ZSkKKwkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOworCQllbHNlCisJCQlhbGxfemVybyA9IDA7CisKKwkJYnAtPnZuX3dlaWdodF9zdW0gKz0gdm5fbWluX3JhdGU7CisJfQorCisJLyogLi4uIG9ubHkgaWYgYWxsIG1pbiByYXRlcyBhcmUgemVyb3MgLSBkaXNhYmxlIGZhaXJuZXNzICovCisJaWYgKGFsbF96ZXJvKQorCQlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfZnVuYyhzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCB0c3Rvcm1fZXRoX2Z1bmN0aW9uX2NvbW1vbl9jb25maWcgdHN0b3JtX2NvbmZpZyA9IHswfTsKIAlzdHJ1Y3Qgc3RhdHNfaW5kaWNhdGlvbl9mbGFncyBzdGF0c19mbGFncyA9IHswfTsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JaW50IGk7CisJaW50IGksIGo7CisJdTMyIG9mZnNldDsKIAl1MTYgbWF4X2FnZ19zaXplOwogCiAJaWYgKGlzX211bHRpKGJwKSkgewotCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IE1VTFRJX0ZMQUdTOworCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IE1VTFRJX0ZMQUdTKGJwKTsKIAkJdHN0b3JtX2NvbmZpZy5yc3NfcmVzdWx0X21hc2sgPSBNVUxUSV9NQVNLOwogCX0KKwlpZiAoSVNfRTFITUYoYnApKQorCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyB8PQorCQkJCVRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU07CiAKIAl0c3Rvcm1fY29uZmlnLmxlYWRpbmdfY2xpZW50X2lkID0gQlBfTF9JRChicCk7CiAKQEAgLTQ3MDAsMTcgKzQ5MzcsMjkgQEAKIAlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsgLyogbm8gcnggdW50aWwgbGluayBpcyB1cCAqLwogCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKIAotCS8qIHJlc2V0IHhzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBpKyspIHsKLQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBCUF9DTF9JRChicCkpICsKLQkJICAgICAgIGkqNCwgMCk7Ci0JfQotCS8qIHJlc2V0IHRzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBpKyspIHsKLQkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBCUF9DTF9JRChicCkpICsKLQkJICAgICAgIGkqNCwgMCk7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJdTggY2xfaWQgPSBicC0+ZnBbaV0uY2xfaWQ7CisKKwkJLyogcmVzZXQgeHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLworCQlvZmZzZXQgPSBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJIFhTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgY2xfaWQpOworCQlmb3IgKGogPSAwOworCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGorKykKKwkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LCAwKTsKKworCQkvKiByZXNldCB0c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCisJCW9mZnNldCA9IEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQkgVFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBjbF9pZCk7CisJCWZvciAoaiA9IDA7CisJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaisrKQorCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsIDApOworCisJCS8qIHJlc2V0IHVzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KKwkJb2Zmc2V0ID0gQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSBVU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIGNsX2lkKTsKKwkJZm9yIChqID0gMDsKKwkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBqKyspCisJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwgMCk7CiAJfQogCiAJLyogSW5pdCBzdGF0aXN0aWNzIHJlbGF0ZWQgY29udGV4dCAqLwpAQCAtNDcyNiw2ICs0OTc1LDExIEBACiAJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKIAkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKIAorCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArIFVTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOworCiAJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpLAogCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOwogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsCkBAIC00NzQ1LDYgKzQ5OTksMTMgQEAKIAkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCiAJICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKIAorCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSwKKwkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCisJICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKKwogCWlmIChDSElQX0lTX0UxSChicCkpIHsKIAkJUkVHX1dSOChicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VULAogCQkJSVNfRTFITUYoYnApKTsKQEAgLTQ3NjQsMjAgKzUwMjUsOTEgQEAKIAkJbWluKCh1MzIpKG1pbigodTMyKTgsICh1MzIpTUFYX1NLQl9GUkFHUykgKgogCQkJICBTR0VfUEFHRV9TSVpFICogUEFHRVNfUEVSX1NHRSksCiAJCSAgICAodTMyKTB4ZmZmZik7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgRlBfQ0xfSUQoZnApKSwKKwkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpLAogCQkgICAgICAgVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKIAkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIEZQX0NMX0lEKGZwKSkgKyA0LAorCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCkgKyA0LAogCQkgICAgICAgVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKIAogCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBGUF9DTF9JRChmcCkpLAorCQkJIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCksCiAJCQkgbWF4X2FnZ19zaXplKTsKIAl9CisKKwkvKiBkcm9wbGVzcyBmbG93IGNvbnRyb2wgKi8KKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCXN0cnVjdCB1c3Rvcm1fZXRoX3J4X3BhdXNlX2RhdGFfZTFoIHJ4X3BhdXNlID0gezB9OworCisJCXJ4X3BhdXNlLmJkX3Rocl9sb3cgPSAyNTA7CisJCXJ4X3BhdXNlLmNxZV90aHJfbG93ID0gMjUwOworCQlyeF9wYXVzZS5jb3MgPSAxOworCQlyeF9wYXVzZS5zZ2VfdGhyX2xvdyA9IDA7CisJCXJ4X3BhdXNlLmJkX3Rocl9oaWdoID0gMzUwOworCQlyeF9wYXVzZS5jcWVfdGhyX2hpZ2ggPSAzNTA7CisJCXJ4X3BhdXNlLnNnZV90aHJfaGlnaCA9IDA7CisKKwkJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKKwkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkgeworCQkJCXJ4X3BhdXNlLnNnZV90aHJfbG93ID0gMTUwOworCQkJCXJ4X3BhdXNlLnNnZV90aHJfaGlnaCA9IDI1MDsKKwkJCX0KKworCisJCQlvZmZzZXQgPSBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJCSBVU1RPUk1fRVRIX1JJTkdfUEFVU0VfREFUQV9PRkZTRVQocG9ydCwKKwkJCQkJCQkJICAgZnAtPmNsX2lkKTsKKwkJCWZvciAoaiA9IDA7CisJCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9ldGhfcnhfcGF1c2VfZGF0YV9lMWgpLzQ7CisJCQkgICAgIGorKykKKwkJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwKKwkJCQkgICAgICAgKCh1MzIgKikmcnhfcGF1c2UpW2pdKTsKKwkJfQorCX0KKworCW1lbXNldCgmKGJwLT5jbW5nKSwgMCwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkpOworCisJLyogSW5pdCByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGNvbnRleHRzICovCisJaWYgKElTX0UxSE1GKGJwKSkgeworCQlpbnQgdm47CisKKwkJLyogRHVyaW5nIGluaXQgdGhlcmUgaXMgbm8gYWN0aXZlIGxpbmsKKwkJICAgVW50aWwgbGluayBpcyB1cCwgc2V0IGxpbmsgcmF0ZSB0byAxMEdicHMgKi8KKwkJYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnApOworCisJCWJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShicCk7CisKKwkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQorCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0KTsKKworCQkvKiBFbmFibGUgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyAqLworCQlicC0+Y21uZy5mbGFncy5jbW5nX2VuYWJsZXMgPQorCQkJCQlDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19WTjsKKwkJaWYgKGJwLT52bl93ZWlnaHRfc3VtKQorCQkJYnAtPmNtbmcuZmxhZ3MuY21uZ19lbmFibGVzIHw9CisJCQkJCUNNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfVk47CisJCWVsc2UKKwkJCURQKE5FVElGX01TR19JRlVQLCAiQWxsIE1JTiB2YWx1ZXMgYXJlIHplcm9lcyIKKwkJCSAgICIgIGZhaXJuZXNzIHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCX0gZWxzZSB7CisJCS8qIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgYXJlIGRpc2FibGVkICovCisJCURQKE5FVElGX01TR19JRlVQLAorCQkgICAic2luZ2xlIGZ1bmN0aW9uIG1vZGUgIG1pbm1heCB3aWxsIGJlIGRpc2FibGVkXG4iKTsKKwl9CisKKworCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCWlmIChicC0+cG9ydC5wbWYpCisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSAvIDQ7IGkrKykKKwkJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkgKiA0LAorCQkJICAgICAgICgodTMyICopKCZicC0+Y21uZykpW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKQpAQCAtNDgxNCwxMyArNTE0NiwxNyBAQAogCQlmcC0+Y2xfaWQgPSBCUF9MX0lEKGJwKSArIGk7CiAJCWZwLT5zYl9pZCA9IGZwLT5jbF9pZDsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJibngyeF9pbml0X3NiKCVwLCVwKSBpbmRleCAlZCAgY2xfaWQgJWQgIHNiICVkXG4iLAotCQkgICBicCwgZnAtPnN0YXR1c19ibGssIGksIEZQX0NMX0lEKGZwKSwgRlBfU0JfSUQoZnApKTsKKwkJICAgInF1ZXVlWyVkXTogIGJueDJ4X2luaXRfc2IoJXAsJXApICBjbF9pZCAlZCAgc2IgJWRcbiIsCisJCSAgIGksIGJwLCBmcC0+c3RhdHVzX2JsaywgZnAtPmNsX2lkLCBmcC0+c2JfaWQpOwogCQlibngyeF9pbml0X3NiKGJwLCBmcC0+c3RhdHVzX2JsaywgZnAtPnN0YXR1c19ibGtfbWFwcGluZywKLQkJCSAgICAgIEZQX1NCX0lEKGZwKSk7CisJCQkgICAgICBmcC0+c2JfaWQpOwogCQlibngyeF91cGRhdGVfZnBzYl9pZHgoZnApOwogCX0KIAorCS8qIGVuc3VyZSBzdGF0dXMgYmxvY2sgaW5kaWNlcyB3ZXJlIHJlYWQgKi8KKwlybWIoKTsKKworCiAJYm54MnhfaW5pdF9kZWZfc2IoYnAsIGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCiAJCQkgIERFRl9TQl9JRCk7CiAJYm54MnhfdXBkYXRlX2RzYl9pZHgoYnApOwpAQCAtNTE5OCw2ICs1NTM0LDggQEAKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1NSQ19FTkRJQU5fTSwgMSk7CiAJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9DRFVfRU5ESUFOX00sIDEpOwogCVJFR19XUihicCwgUFhQMl9SRUdfUlFfREJHX0VORElBTl9NLCAxKTsKKwkvKiBtYWtlIHN1cmUgdGhpcyB2YWx1ZSBpcyAwICovCisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9IQ19FTkRJQU5fTSwgMCk7CiAKIC8qCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUEJGX1NXQVBfTU9ERSwgMSk7ICovCiAJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9RTV9TV0FQX01PREUsIDEpOwpAQCAtNTI2NiwxNCArNTYwNCw2IEBACiAJfQogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQlJCMV9DT01NT05fU1RBUlQsIEJSQjFfQ09NTU9OX0VORCk7Ci0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKSB7Ci0JCS8qIGZpeCBmb3IgZW11bGF0aW9uIGFuZCBGUEdBIGZvciBubyBwYXVzZSAqLwotCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAsIDUxMyk7Ci0JCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMSwgNTEzKTsKLQkJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsIDApOwotCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMSwgMCk7Ci0JfQotCiAJYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0NPTU1PTl9TVEFSVCwgUFJTX0NPTU1PTl9FTkQpOwogCVJFR19XUihicCwgUFJTX1JFR19BX1BSU1VfMjAsIDB4Zik7CiAJLyogc2V0IE5JQyBtb2RlICovCkBAIC01Mjg2LDM3ICs1NjE2LDEwIEBACiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNETV9DT01NT05fU1RBUlQsIFVTRE1fQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgWFNETV9DT01NT05fU1RBUlQsIFhTRE1fQ09NTU9OX0VORCk7CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVRTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJQ1NUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwKLQkJCQlYU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKLQkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVVTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQl9IGVsc2UgeyAvKiBFMSAqLwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JfQorCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgWFNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9DT01NT05fU1RBUlQsIFRTRU1fQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9DT01NT05fU1RBUlQsIFVTRU1fQ09NTU9OX0VORCk7CkBAIC01MzM4LDggKzU2NDEsNyBAQAogCQlSRUdfV1IoYnAsIGksIDB4YzBjYWMwMWEpOwogCQkvKiBUT0RPOiByZXBsYWNlIHdpdGggc29tZXRoaW5nIG1lYW5pbmdmdWwgKi8KIAl9Ci0JaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgU1JDSF9DT01NT05fU1RBUlQsIFNSQ0hfQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgU1JDSF9DT01NT05fU1RBUlQsIFNSQ0hfQ09NTU9OX0VORCk7CiAJUkVHX1dSKGJwLCBTUkNfUkVHX1NPRlRfUlNULCAwKTsKIAogCWlmIChzaXplb2YodW5pb24gY2R1X2NvbnRleHQpICE9IDEwMjQpCkBAIC01MzU4LDYgKzU2NjAsMTEgQEAKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIENGQ19DT01NT05fU1RBUlQsIENGQ19DT01NT05fRU5EKTsKIAlSRUdfV1IoYnAsIENGQ19SRUdfSU5JVF9SRUcsIDB4N0ZGKTsKKwkvKiBlbmFibGUgY29udGV4dCB2YWxpZGF0aW9uIGludGVycnVwdCBmcm9tIENGQyAqLworCVJFR19XUihicCwgQ0ZDX1JFR19DRkNfSU5UX01BU0ssIDApOworCisJLyogc2V0IHRoZSB0aHJlc2hvbGRzIHRvIHByZXZlbnQgQ0ZDL0NEVSByYWNlICovCisJUkVHX1dSKGJwLCBDRkNfUkVHX0RFQlVHMCwgMHgyMDAyMDAwMCk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBIQ19DT01NT05fU1RBUlQsIEhDX0NPTU1PTl9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQUVVX0NPTU1PTl9TVEFSVCwgTUlTQ19BRVVfQ09NTU9OX0VORCk7CkBAIC01NDEwLDkgKzU3MTcsMTQgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlzd2l0Y2ggKGJwLT5jb21tb24uYm9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgewotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIxRzoKLQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IDE7CisJCWJyZWFrOworCisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkvKiBGYW4gZmFpbHVyZSBpcyBpbmRpY2F0ZWQgYnkgU1BJTyA1ICovCiAJCWJueDJ4X3NldF9zcGlvKGJwLCBNSVNDX1JFR0lTVEVSU19TUElPXzUsCiAJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aKTsKQEAgLTU0NTEsNiArNTc2Myw3IEBACiBzdGF0aWMgaW50IGJueDJ4X2luaXRfcG9ydChzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJdTMyIGxvdywgaGlnaDsKIAl1MzIgdmFsOwogCiAJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIHBvcnQgaW5pdCAgcG9ydCAleFxuIiwgcG9ydCk7CkBAIC01NDg1LDYgKzU3OTgsOCBAQAogCVJFR19XUihicCwgUFhQMl9SRUdfUFNXUlFfU1JDMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKICNlbmRpZgogCS8qIFBvcnQgQ01zIGNvbWUgaGVyZSAqLworCWJueDJ4X2luaXRfYmxvY2soYnAsIChwb3J0ID8gWENNX1BPUlQxX1NUQVJUIDogWENNX1BPUlQwX1NUQVJUKSwKKwkJCSAgICAgKHBvcnQgPyBYQ01fUE9SVDFfRU5EIDogWENNX1BPUlQwX0VORCkpOwogCiAJLyogUG9ydCBRTSBjb21lcyBoZXJlICovCiAjaWZkZWYgQkNNX0lTQ1NJCkBAIC01NDk1LDEyICs1ODEwLDM4IEBACiAJCQkgICAgIGZ1bmMgPyBUSU1FUlNfUE9SVDFfRU5EIDogVElNRVJTX1BPUlQwX0VORCk7CiAjZW5kaWYKIAkvKiBQb3J0IERRIGNvbWVzIGhlcmUgKi8KLQkvKiBQb3J0IEJSQjEgY29tZXMgaGVyZSAqLworCisJYm54MnhfaW5pdF9ibG9jayhicCwgKHBvcnQgPyBCUkIxX1BPUlQxX1NUQVJUIDogQlJCMV9QT1JUMF9TVEFSVCksCisJCQkgICAgIChwb3J0ID8gQlJCMV9QT1JUMV9FTkQgOiBCUkIxX1BPUlQwX0VORCkpOworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSAmJiAhQ0hJUF9JU19FMUgoYnApKSB7CisJCS8qIG5vIHBhdXNlIGZvciBlbXVsYXRpb24gYW5kIEZQR0EgKi8KKwkJbG93ID0gMDsKKwkJaGlnaCA9IDUxMzsKKwl9IGVsc2UgeworCQlpZiAoSVNfRTFITUYoYnApKQorCQkJbG93ID0gKChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKSA/IDE2MCA6IDI0Nik7CisJCWVsc2UgaWYgKGJwLT5kZXYtPm10dSA+IDQwOTYpIHsKKwkJCWlmIChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKQorCQkJCWxvdyA9IDE2MDsKKwkJCWVsc2UgeworCQkJCXZhbCA9IGJwLT5kZXYtPm10dTsKKwkJCQkvKiAoMjQqMTAyNCArIHZhbCo0KS8yNTYgKi8KKwkJCQlsb3cgPSA5NiArICh2YWwvNjQpICsgKCh2YWwgJSA2NCkgPyAxIDogMCk7CisJCQl9CisJCX0gZWxzZQorCQkJbG93ID0gKChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKSA/IDgwIDogMTYwKTsKKwkJaGlnaCA9IGxvdyArIDU2OwkvKiAxNCoxMDI0LzI1NiAqLworCX0KKwlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCArIHBvcnQqNCwgbG93KTsKKwlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAgKyBwb3J0KjQsIGhpZ2gpOworCisKIAkvKiBQb3J0IFBSUyBjb21lcyBoZXJlICovCiAJLyogUG9ydCBUU0RNIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IENTRE0gY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgVVNETSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBYU0RNIGNvbWVzIGhlcmUgKi8KKwogCWJueDJ4X2luaXRfYmxvY2soYnAsIHBvcnQgPyBUU0VNX1BPUlQxX1NUQVJUIDogVFNFTV9QT1JUMF9TVEFSVCwKIAkJCSAgICAgcG9ydCA/IFRTRU1fUE9SVDFfRU5EIDogVFNFTV9QT1JUMF9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIHBvcnQgPyBVU0VNX1BPUlQxX1NUQVJUIDogVVNFTV9QT1JUMF9TVEFSVCwKQEAgLTU1MDksNiArNTg1MCw3IEBACiAJCQkgICAgIHBvcnQgPyBDU0VNX1BPUlQxX0VORCA6IENTRU1fUE9SVDBfRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gWFNFTV9QT1JUMV9TVEFSVCA6IFhTRU1fUE9SVDBfU1RBUlQsCiAJCQkgICAgIHBvcnQgPyBYU0VNX1BPUlQxX0VORCA6IFhTRU1fUE9SVDBfRU5EKTsKKwogCS8qIFBvcnQgVVBCIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IFhQQiBjb21lcyBoZXJlICovCiAKQEAgLTU1NjcsMzYgKzU5MDksNjMgQEAKIAkvKiBQb3J0IEVNQUMxIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IERCVSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBEQkcgY29tZXMgaGVyZSAqLworCiAJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IE5JR19QT1JUMV9TVEFSVCA6IE5JR19QT1JUMF9TVEFSVCwKIAkJCSAgICAgcG9ydCA/IE5JR19QT1JUMV9FTkQgOiBOSUdfUE9SVDBfRU5EKTsKIAogCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKyBwb3J0KjQsIDEpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQl1MzIgd3N1bTsKLQkJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IG1fY21uZ19wb3J0OwotCQlpbnQgdm47Ci0KIAkJLyogMHgyIGRpc2FibGUgZTFob3YsIDB4MSBlbmFibGUgKi8KIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NRiArIHBvcnQqNCwKIAkJICAgICAgIChJU19FMUhNRihicCkgPyAweDEgOiAweDIpKTsKIAotCQkvKiBJbml0IFJBVEUgU0hBUElORyBhbmQgRkFJUk5FU1MgY29udGV4dHMuCi0JCSAgIEluaXRpYWxpemUgYXMgaWYgdGhlcmUgaXMgMTBHIGxpbmsuICovCi0JCXdzdW0gPSBibngyeF9jYWxjX3ZuX3dzdW0oYnApOwotCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwLCAoaW50KXdzdW0sIDEwMDAwLCAmbV9jbW5nX3BvcnQpOwotCQlpZiAoSVNfRTFITUYoYnApKQotCQkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQotCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCwKLQkJCQkJd3N1bSwgMTAwMDAsICZtX2NtbmdfcG9ydCk7CisJCS8qIHN1cHBvcnQgcGF1c2UgcmVxdWVzdHMgZnJvbSBVU0RNLCBUU0RNIGFuZCBCUkIgKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfRUdSRVNTX1NSQ19FTkFCTEVfMCArIHBvcnQqNCwgMHg3KTsKKworCQl7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19FTkFCTEVfMCArIHBvcnQqNCwgMCk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19PVVRfRU5fMCArIHBvcnQqNCwgMCk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfUEFVU0VfRU5BQkxFXzAgKyBwb3J0KjQsIDEpOworCQl9CiAJfQogCiAJLyogUG9ydCBNQ1AgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgRE1BRSBjb21lcyBoZXJlICovCiAKLQlzd2l0Y2ggKGJwLT5jb21tb24uYm9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgewotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIxRzoKLQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQl7CisJCXUzMiBzd2FwX3ZhbCwgc3dhcF9vdmVycmlkZSwgYWV1X2dwaW9fbWFzaywgb2Zmc2V0OworCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCisJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlBVVF9ISV9aLCBwb3J0KTsKKworCQkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiB0aGUgc3dhcCByZWdpc3RlciBpcworCQkgICBzZXQgYW5kIGFjdGl2ZSAqLworCQlzd2FwX3ZhbCA9IFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApOworCQlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKKworCQkvKiBTZWxlY3QgZnVuY3Rpb24gdXBvbiBwb3J0LXN3YXAgY29uZmlndXJhdGlvbiAqLworCQlpZiAocG9ydCA9PSAwKSB7CisJCQlvZmZzZXQgPSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzA7CisJCQlhZXVfZ3Bpb19tYXNrID0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpID8KKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xIDoKKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wOworCQl9IGVsc2UgeworCQkJb2Zmc2V0ID0gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wOworCQkJYWV1X2dwaW9fbWFzayA9IChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKSA/CisJCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMCA6CisJCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMTsKKwkJfQorCQl2YWwgPSBSRUdfUkQoYnAsIG9mZnNldCk7CisJCS8qIGFkZCBHUElPMyB0byBncm91cCAqLworCQl2YWwgfD0gYWV1X2dwaW9fbWFzazsKKwkJUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCS8qIGFkZCBTUElPIDUgdG8gZ3JvdXAgMCAqLwogCQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7CiAJCXZhbCB8PSBBRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKQEAgLTU2NDIsMTAgKzYwMTEsMTcgQEAKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJdTMyIGFkZHIsIHZhbDsKIAlpbnQgaTsKIAogCURQKEJOWDJYX01TR19NQ1AsICJzdGFydGluZyBmdW5jIGluaXQgIGZ1bmMgJXhcbiIsIGZ1bmMpOwogCisJLyogc2V0IE1TSSByZWNvbmZpZ3VyZSBjYXBhYmlsaXR5ICovCisJYWRkciA9IChwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wKTsKKwl2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOworCXZhbCB8PSBIQ19DT05GSUdfMF9SRUdfTVNJX0FUVE5fRU5fMDsKKwlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisKIAlpID0gRlVOQ19JTFRfQkFTRShmdW5jKTsKIAogCWJueDJ4X2lsdF93cihicCwgaSwgYm54Mnhfc3BfbWFwcGluZyhicCwgY29udGV4dCkpOwpAQCAtNTY3NSw5ICs2MDUxLDYgQEAKIAl9CiAJYm54MnhfaW5pdF9ibG9jayhicCwgaGNfbGltaXRzW2Z1bmNdWzBdLCBoY19saW1pdHNbZnVuY11bMV0pOwogCi0JaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJUkVHX1dSKGJwLCBIQ19SRUdfRlVOQ19OVU1fUDAgKyBwb3J0KjQsIGZ1bmMpOwotCiAJLyogUmVzZXQgUENJRSBlcnJvcnMgZm9yIGRlYnVnICovCiAJUkVHX1dSKGJwLCAweDIxMTQsIDB4ZmZmZmZmZmYpOwogCVJFR19XUihicCwgMHgyMTIwLCAweGZmZmZmZmZmKTsKQEAgLTU4MDYsMjAgKzYxNzksMTkgQEAKIAlpbnQgaTsKIAogCS8qIGZhc3RwYXRoICovCisJLyogQ29tbW9uICovCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAotCQkvKiBTdGF0dXMgYmxvY2tzICovCisJCS8qIHN0YXR1cyBibG9ja3MgKi8KIAkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spICsKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF90eF9kYl9kYXRhKSk7CisJfQorCS8qIFJ4ICovCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAotCQkvKiBmYXN0IHBhdGggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjIHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKLQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKLQorCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwogCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZykpOwogCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKIAkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfZGVzY19tYXBwaW5nKSwKQEAgLTU4MzYsNiArNjIwOCwxNSBAQAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCiAJCQkgICAgICAgQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwogCX0KKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisKKwkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCisJCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSk7CisJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJfQogCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwogCiAJQk5YMlhfUENJX0ZSRUUoYnAtPmRlZl9zdGF0dXNfYmxrLCBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKQEAgLTU4NzgsMjkgKzYyNTksMjAgQEAKIAlpbnQgaTsKIAogCS8qIGZhc3RwYXRoICovCisJLyogQ29tbW9uICovCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJYm54MnhfZnAoYnAsIGksIGJwKSA9IGJwOwogCi0JCS8qIFN0YXR1cyBibG9ja3MgKi8KKwkJLyogc3RhdHVzIGJsb2NrcyAqLwogCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAogCQkJCSZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKIAkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfZGJfZGF0YSkpOworCX0KKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAKLQkJYm54MnhfZnAoYnAsIGksIGh3X3R4X3Byb2RzKSA9Ci0JCQkJKHZvaWQgKikoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspICsgMSk7Ci0KLQkJYm54MnhfZnAoYnAsIGksIHR4X3Byb2RzX21hcHBpbmcpID0KLQkJCQlibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSArCi0JCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayk7Ci0KLQkJLyogZmFzdCBwYXRoIHJpbmdzOiB0eF9idWYgdHhfZGVzYyByeF9idWYgcnhfZGVzYyByeF9jb21wICovCi0JCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBzd190eF9iZCkgKiBOVU1fVFhfQkQpOwotCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7Ci0KKwkJLyogZmFzdHBhdGggcnggcmluZ3M6IHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KIAkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSwKIAkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X2JkKSAqIE5VTV9SWF9CRCk7CiAJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKQEAgLTU5MTksNiArNjI5MSwyMyBAQAogCQkJCSZibngyeF9mcChicCwgaSwgcnhfc2dlX21hcHBpbmcpLAogCQkJCUJDTV9QQUdFX1NJWkUgKiBOVU1fUlhfU0dFX1BBR0VTKTsKIAl9CisJLyogVHggKi8KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgeworCisJCWJueDJ4X2ZwKGJwLCBpLCBod190eF9wcm9kcykgPQorCQkJCSh2b2lkICopKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSArIDEpOworCisJCWJueDJ4X2ZwKGJwLCBpLCB0eF9wcm9kc19tYXBwaW5nKSA9CisJCQkJYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZykgKworCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spOworCisJCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLworCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3Qgc3dfdHhfYmQpICogTlVNX1RYX0JEKTsKKwkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAorCQkJCSZibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOworCX0KIAkvKiBlbmQgb2YgZmFzdHBhdGggKi8KIAogCUJOWDJYX1BDSV9BTExPQyhicC0+ZGVmX3N0YXR1c19ibGssICZicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKQEAgLTU5NzIsNyArNjM2MSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCXUxNiBiZF9jb25zID0gZnAtPnR4X2JkX2NvbnM7CkBAIC01OTkwLDcgKzYzNzksNyBAQAogewogCWludCBpLCBqOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0JEOyBpKyspIHsKQEAgLTYwMDIsOCArNjM5MSw3IEBACiAKIAkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsCiAJCQkJCSBwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAotCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJIGJwLT5yeF9idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQkJcnhfYnVmLT5za2IgPSBOVUxMOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtNjAzNCwxMCArNjQyMiw2IEBACiAJCSAgICJzdGF0ZSAleFxuIiwgaSwgYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLAogCQkgICBibngyeF9mcChicCwgaSwgc3RhdGUpKTsKIAotCQlpZiAoYm54MnhfZnAoYnAsIGksIHN0YXRlKSAhPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQpCi0JCQlCTlgyWF9FUlIoIklSUSBvZiBmcCAjJWQgYmVpbmcgZnJlZWQgd2hpbGUgIgotCQkJCSAgInN0YXRlICE9IGNsb3NlZFxuIiwgaSk7Ci0KIAkJZnJlZV9pcnEoYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLCAmYnAtPmZwW2ldKTsKIAl9CiB9CkBAIC02MDQ5LDMyICs2NDMzLDM3IEBACiAJCXBjaV9kaXNhYmxlX21zaXgoYnAtPnBkZXYpOwogCQlicC0+ZmxhZ3MgJj0gflVTSU5HX01TSVhfRkxBRzsKIAorCX0gZWxzZSBpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpIHsKKwkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7CisJCXBjaV9kaXNhYmxlX21zaShicC0+cGRldik7CisJCWJwLT5mbGFncyAmPSB+VVNJTkdfTVNJX0ZMQUc7CisKIAl9IGVsc2UKIAkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfZW5hYmxlX21zaXgoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpbnQgaSwgcmMsIG9mZnNldDsKKwlpbnQgaSwgcmMsIG9mZnNldCA9IDE7CisJaW50IGlndV92ZWMgPSAwOwogCi0JYnAtPm1zaXhfdGFibGVbMF0uZW50cnkgPSAwOwotCW9mZnNldCA9IDE7Ci0JRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWzBdLmVudHJ5ID0gMCAoc2xvd3BhdGgpXG4iKTsKKwlicC0+bXNpeF90YWJsZVswXS5lbnRyeSA9IGlndV92ZWM7CisJRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWzBdLmVudHJ5ID0gJWQgKHNsb3dwYXRoKVxuIiwgaWd1X3ZlYyk7CiAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlpbnQgaWd1X3ZlYyA9IG9mZnNldCArIGkgKyBCUF9MX0lEKGJwKTsKLQorCQlpZ3VfdmVjID0gQlBfTF9JRChicCkgKyBvZmZzZXQgKyBpOwogCQlicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS5lbnRyeSA9IGlndV92ZWM7CiAJCURQKE5FVElGX01TR19JRlVQLCAibXNpeF90YWJsZVslZF0uZW50cnkgPSAlZCAiCiAJCSAgICIoZmFzdHBhdGggIyV1KVxuIiwgaSArIG9mZnNldCwgaWd1X3ZlYywgaSk7CiAJfQogCiAJcmMgPSBwY2lfZW5hYmxlX21zaXgoYnAtPnBkZXYsICZicC0+bXNpeF90YWJsZVswXSwKLQkJCSAgICAgYnAtPm51bV9xdWV1ZXMgKyBvZmZzZXQpOworCQkJICAgICBCTlgyWF9OVU1fUVVFVUVTKGJwKSArIG9mZnNldCk7CiAJaWYgKHJjKSB7Ci0JCURQKE5FVElGX01TR19JRlVQLCAiTVNJLVggaXMgbm90IGF0dGFpbmFibGVcbiIpOwotCQlyZXR1cm4gLTE7CisJCURQKE5FVElGX01TR19JRlVQLCAiTVNJLVggaXMgbm90IGF0dGFpbmFibGUgIHJjICVkXG4iLCByYyk7CisJCXJldHVybiByYzsKIAl9CisKIAlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJWF9GTEFHOwogCiAJcmV0dXJuIDA7CkBAIC02MDkyLDI3ICs2NDgxLDYwIEBACiAJfQogCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJc3ByaW50ZihmcC0+bmFtZSwgIiVzLmZwJWQiLCBicC0+ZGV2LT5uYW1lLCBpKTsKIAkJcmMgPSByZXF1ZXN0X2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsCi0JCQkJIGJueDJ4X21zaXhfZnBfaW50LCAwLAotCQkJCSBicC0+ZGV2LT5uYW1lLCAmYnAtPmZwW2ldKTsKKwkJCQkgYm54MnhfbXNpeF9mcF9pbnQsIDAsIGZwLT5uYW1lLCBmcCk7CiAJCWlmIChyYykgewotCQkJQk5YMlhfRVJSKCJyZXF1ZXN0IGZwICMlZCBpcnEgZmFpbGVkICByYyAtJWRcbiIsCi0JCQkJICBpICsgb2Zmc2V0LCAtcmMpOworCQkJQk5YMlhfRVJSKCJyZXF1ZXN0IGZwICMlZCBpcnEgZmFpbGVkICByYyAlZFxuIiwgaSwgcmMpOwogCQkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCWJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9JUlE7CisJCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKIAl9CiAKKwlpID0gQk5YMlhfTlVNX1FVRVVFUyhicCk7CisJaWYgKGlzX211bHRpKGJwKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJICAgICAgICIlczogdXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcCAlZCAtICVkXG4iLAorCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLAorCQkgICAgICAgYnAtPm1zaXhfdGFibGVbb2Zmc2V0XS52ZWN0b3IsCisJCSAgICAgICBicC0+bXNpeF90YWJsZVtvZmZzZXQgKyBpIC0gMV0udmVjdG9yKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcCAlZFxuIiwKKwkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwKKwkJICAgICAgIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfZW5hYmxlX21zaShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCByYzsKKworCXJjID0gcGNpX2VuYWJsZV9tc2koYnAtPnBkZXYpOworCWlmIChyYykgeworCQlEUChORVRJRl9NU0dfSUZVUCwgIk1TSSBpcyBub3QgYXR0YWluYWJsZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJYnAtPmZsYWdzIHw9IFVTSU5HX01TSV9GTEFHOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfcmVxX2lycShzdHJ1Y3QgYm54MnggKmJwKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwogCi0JcmMgPSByZXF1ZXN0X2lycShicC0+cGRldi0+aXJxLCBibngyeF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykKKwkJZmxhZ3MgPSAwOworCWVsc2UKKwkJZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKworCXJjID0gcmVxdWVzdF9pcnEoYnAtPnBkZXYtPmlycSwgYm54MnhfaW50ZXJydXB0LCBmbGFncywKIAkJCSBicC0+ZGV2LT5uYW1lLCBicC0+ZGV2KTsKIAlpZiAoIXJjKQogCQlibngyeF9mcChicCwgMCwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfSVJROwpAQCAtNjEyNCw3ICs2NTQ2LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluYXBpX2VuYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIH0KIApAQCAtNjEzMiw3ICs2NTU0LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluYXBpX2Rpc2FibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiB9CiAKQEAgLTYxNDAsMTAgKzY1NjIsMTAgQEAKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYnAtPmludHJfc2VtKSkgewogCQlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgewotCQkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQotCQkJCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7CiAJCQlibngyeF9uYXBpX2VuYWJsZShicCk7CiAJCQlibngyeF9pbnRfZW5hYmxlKGJwKTsKKwkJCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKKwkJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CiAJCX0KIAl9CiB9CkBAIC02MTUyLDEwICs2NTc0LDggQEAKIHsKIAlibngyeF9pbnRfZGlzYWJsZV9zeW5jKGJwLCBkaXNhYmxlX2h3KTsKIAlibngyeF9uYXBpX2Rpc2FibGUoYnApOwotCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7Ci0JCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7Ci0JCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JfQorCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7CisJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KIH0KIAogLyoKQEAgLTYxNzEsOSArNjU5MSw5IEBACiAJICogdW5pY2FzdHMgMC0zMTpwb3J0MCAzMi02Mzpwb3J0MQogCSAqIG11bHRpY2FzdCA2NC0xMjc6cG9ydDAgMTI4LTE5MTpwb3J0MQogCSAqLwotCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IDI7CisJY29uZmlnLT5oZHIubGVuZ3RoID0gMjsKIAljb25maWctPmhkci5vZmZzZXQgPSBwb3J0ID8gMzIgOiAwOwotCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAkvKiBwcmltYXJ5IE1BQyAqLwpAQCAtNjE5OCw5ICs2NjE4LDkgQEAKIAkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubHNiX21hY19hZGRyKTsKIAogCS8qIGJyb2FkY2FzdCAqLwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPSAweGZmZmY7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9IDB4ZmZmZjsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubHNiX21hY19hZGRyID0gMHhmZmZmOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPSBjcHVfdG9fbGUxNigweGZmZmYpOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIgPSBjcHVfdG9fbGUxNigweGZmZmYpOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIgPSBjcHVfdG9fbGUxNigweGZmZmYpOwogCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5mbGFncyA9IGNwdV90b19sZTE2KHBvcnQpOwogCWlmIChzZXQpCiAJCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9CkBAIC02MjI5LDkgKzY2NDksOSBAQAogCSAqIHVuaWNhc3RzOiBieSBmdW5jIG51bWJlcgogCSAqIG11bHRpY2FzdDogMjArRlVOQyoyMCwgMjAgZWFjaAogCSAqLwotCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IDE7CisJY29uZmlnLT5oZHIubGVuZ3RoID0gMTsKIAljb25maWctPmhkci5vZmZzZXQgPSBCUF9GVU5DKGJwKTsKLQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJLyogcHJpbWFyeSBNQUMgKi8KQEAgLTYyNjUsNyArNjY4NSw3IEBACiAJCQkgICAgIGludCAqc3RhdGVfcCwgaW50IHBvbGwpCiB7CiAJLyogY2FuIHRha2UgYSB3aGlsZSBpZiBhbnkgcG9ydCBpcyBydW5uaW5nICovCi0JaW50IGNudCA9IDUwMDsKKwlpbnQgY250ID0gNTAwMDsKIAogCURQKE5FVElGX01TR19JRlVQLCAiJXMgZm9yIHN0YXRlIHRvIGJlY29tZSAleCBvbiBJRFggWyVkXVxuIiwKIAkgICBwb2xsID8gInBvbGxpbmciIDogIndhaXRpbmciLCBzdGF0ZSwgaWR4KTsKQEAgLTYyODMsOCArNjcwMywxMiBAQAogCQl9CiAKIAkJbWIoKTsgLyogc3RhdGUgaXMgY2hhbmdlZCBieSBibngyeF9zcF9ldmVudCgpICovCi0JCWlmICgqc3RhdGVfcCA9PSBzdGF0ZSkKKwkJaWYgKCpzdGF0ZV9wID09IHN0YXRlKSB7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJleGl0ICAoY250ICVkKVxuIiwgNTAwMCAtIGNudCk7CisjZW5kaWYKIAkJCXJldHVybiAwOworCQl9CiAKIAkJbXNsZWVwKDEpOwogCX0KQEAgLTYzMTcsMTkgKzY3NDEsNjggQEAKIAogc3RhdGljIGludCBibngyeF9zZXR1cF9tdWx0aShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaW5kZXgpCiB7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOworCiAJLyogcmVzZXQgSUdVIHN0YXRlICovCi0JYm54MnhfYWNrX3NiKGJwLCBicC0+ZnBbaW5kZXhdLnNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKKwlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7CiAKIAkvKiBTRVRVUCByYW1yb2QgKi8KLQlicC0+ZnBbaW5kZXhdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfT1BFTklORzsKLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAsIGluZGV4LCAwLCBpbmRleCwgMCk7CisJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfT1BFTklORzsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAsIGluZGV4LCAwLAorCQkgICAgICBmcC0+Y2xfaWQsIDApOwogCiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwogCXJldHVybiBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfT1BFTiwgaW5kZXgsCi0JCQkJICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDApOworCQkJCSAmKGZwLT5zdGF0ZSksIDApOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X2ludF9tb2RlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IG51bV9xdWV1ZXM7CisKKwlzd2l0Y2ggKGludF9tb2RlKSB7CisJY2FzZSBJTlRfTU9ERV9JTlR4OgorCWNhc2UgSU5UX01PREVfTVNJOgorCQludW1fcXVldWVzID0gMTsKKwkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCURQKE5FVElGX01TR19JRlVQLAorCQkgICAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gJWRcbiIsIG51bV9xdWV1ZXMpOworCQlicmVhazsKKworCWNhc2UgSU5UX01PREVfTVNJWDoKKwlkZWZhdWx0OgorCQlpZiAoYnAtPm11bHRpX21vZGUgPT0gRVRIX1JTU19NT0RFX1JFR1VMQVIpCisJCQludW1fcXVldWVzID0gbWluX3QodTMyLCBudW1fb25saW5lX2NwdXMoKSwKKwkJCQkJICAgQk5YMlhfTUFYX1FVRVVFUyhicCkpOworCQllbHNlCisJCQludW1fcXVldWVzID0gMTsKKwkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCURQKE5FVElGX01TR19JRlVQLCAic2V0IG51bWJlciBvZiByeCBxdWV1ZXMgdG8gJWQiCisJCSAgICIgIG51bWJlciBvZiB0eCBxdWV1ZXMgdG8gJWRcbiIsCisJCSAgIGJwLT5udW1fcnhfcXVldWVzLCBicC0+bnVtX3R4X3F1ZXVlcyk7CisJCS8qIGlmIHdlIGNhbid0IHVzZSBNU0ktWCB3ZSBvbmx5IG5lZWQgb25lIGZwLAorCQkgKiBzbyB0cnkgdG8gZW5hYmxlIE1TSS1YIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZnAncworCQkgKiBhbmQgZmFsbGJhY2sgdG8gTVNJIG9yIGxlZ2FjeSBJTlR4IHdpdGggb25lIGZwCisJCSAqLworCQlpZiAoYm54MnhfZW5hYmxlX21zaXgoYnApKSB7CisJCQkvKiBmYWlsZWQgdG8gZW5hYmxlIE1TSS1YICovCisJCQludW1fcXVldWVzID0gMTsKKwkJCWJwLT5udW1fcnhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJCWlmIChicC0+bXVsdGlfbW9kZSkKKwkJCQlCTlgyWF9FUlIoIk11bHRpIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvICIKKwkJCQkJICAiZW5hYmxlIE1TSS1YICBzZXQgbnVtYmVyIG9mICIKKwkJCQkJICAicXVldWVzIHRvICVkXG4iLCBudW1fcXVldWVzKTsKKwkJfQorCQlicmVhazsKKwl9CisJYnAtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gYnAtPm51bV90eF9xdWV1ZXM7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwpAQCAtNjMzOCw1NiArNjgxMSwyOCBAQAogCXUzMiBsb2FkX2NvZGU7CiAJaW50IGksIHJjID0gMDsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJRFAoTkVUSUZfTVNHX0lGVVAsICJlbnRlciAgbG9hZF9tb2RlICVkXG4iLCBsb2FkX21vZGUpOwogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQogCQlyZXR1cm4gLUVQRVJNOwogI2VuZGlmCiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQ7CiAKLQlpZiAodXNlX2ludGEpIHsKLQkJYnAtPm51bV9xdWV1ZXMgPSAxOwotCi0JfSBlbHNlIHsKLQkJaWYgKCh1c2VfbXVsdGkgPiAxKSAmJiAodXNlX211bHRpIDw9IEJQX01BWF9RVUVVRVMoYnApKSkKLQkJCS8qIHVzZXIgcmVxdWVzdGVkIG51bWJlciAqLwotCQkJYnAtPm51bV9xdWV1ZXMgPSB1c2VfbXVsdGk7Ci0KLQkJZWxzZSBpZiAodXNlX211bHRpKQotCQkJYnAtPm51bV9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9vbmxpbmVfY3B1cygpLAotCQkJCQkgICAgICAgQlBfTUFYX1FVRVVFUyhicCkpOwotCQllbHNlCi0JCQlicC0+bnVtX3F1ZXVlcyA9IDE7Ci0KLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwgYnAtPm51bV9xdWV1ZXMpOwotCi0JCS8qIGlmIHdlIGNhbid0IHVzZSBNU0ktWCB3ZSBvbmx5IG5lZWQgb25lIGZwLAotCQkgKiBzbyB0cnkgdG8gZW5hYmxlIE1TSS1YIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZnAncwotCQkgKiBhbmQgZmFsbGJhY2sgdG8gTVNJIG9yIGxlZ2FjeSBJTlR4IHdpdGggb25lIGZwCi0JCSAqLwotCQlyYyA9IGJueDJ4X2VuYWJsZV9tc2l4KGJwKTsKLQkJaWYgKHJjKSB7Ci0JCQkvKiBmYWlsZWQgdG8gZW5hYmxlIE1TSS1YICovCi0JCQlicC0+bnVtX3F1ZXVlcyA9IDE7Ci0JCQlpZiAodXNlX211bHRpKQotCQkJCUJOWDJYX0VSUigiTXVsdGkgcmVxdWVzdGVkIGJ1dCBmYWlsZWQiCi0JCQkJCSAgIiB0byBlbmFibGUgTVNJLVhcbiIpOwotCQl9Ci0JfQorCWJueDJ4X3NldF9pbnRfbW9kZShicCk7CiAKIAlpZiAoYm54MnhfYWxsb2NfbWVtKGJwKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnAoYnAsIGksIGRpc2FibGVfdHBhKSA9CiAJCQkJCSgoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSA9PSAwKTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYm54MnhfZnAoYnAsIGksIG5hcGkpLAogCQkJICAgICAgIGJueDJ4X3BvbGwsIDEyOCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQlmcC0+cG9sbF9ub193b3JrID0gMDsKQEAgLTY0MDUsMTQgKzY4NTAsMjIgQEAKIAkJCXBjaV9kaXNhYmxlX21zaXgoYnAtPnBkZXYpOwogCQkJZ290byBsb2FkX2Vycm9yMTsKIAkJfQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSS1YXG4iLCBicC0+ZGV2LT5uYW1lKTsKIAl9IGVsc2UgeworCQlpZiAoKHJjICE9IC1FTk9NRU0pICYmIChpbnRfbW9kZSAhPSBJTlRfTU9ERV9JTlR4KSkKKwkJCWJueDJ4X2VuYWJsZV9tc2koYnApOwogCQlibngyeF9hY2tfaW50KGJwKTsKIAkJcmMgPSBibngyeF9yZXFfaXJxKGJwKTsKIAkJaWYgKHJjKSB7CiAJCQlCTlgyWF9FUlIoIklSUSByZXF1ZXN0IGZhaWxlZCAgcmMgJWQsIGFib3J0aW5nXG4iLCByYyk7CisJCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpCisJCQkJcGNpX2Rpc2FibGVfbXNpKGJwLT5wZGV2KTsKIAkJCWdvdG8gbG9hZF9lcnJvcjE7CiAJCX0KKwkJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSB7CisJCQlicC0+ZGV2LT5pcnEgPSBicC0+cGRldi0+aXJxOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0kgIElSUSAlZFxuIiwKKwkJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+cGRldi0+aXJxKTsKKwkJfQogCX0KIAogCS8qIFNlbmQgTE9BRF9SRVFVRVNUIGNvbW1hbmQgdG8gTUNQCkBAIC02NDM1LDExICs2ODg4LDExIEBACiAJfSBlbHNlIHsKIAkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAotCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCBsb2FkIGNvdW50cyBiZWZvcmUgdXMgJWQsICVkLCAlZFxuIiwKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgLSBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCiAJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwogCQlsb2FkX2NvdW50WzBdKys7CiAJCWxvYWRfY291bnRbMSArIHBvcnRdKys7Ci0JCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIG5ldyBsb2FkIGNvdW50cyAgICAgICAlZCwgJWQsICVkXG4iLAorCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCAtIG5ldyBsb2FkIGNvdW50cyAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWlmIChsb2FkX2NvdW50WzBdID09IDEpCiAJCQlsb2FkX2NvZGUgPSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT047CkBAIC02NDg2LDcgKzY5MzksNyBAQAogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkKIAkJaWYgKGJwLT5tZl9jb25maWcgJiBGVU5DX01GX0NGR19GVU5DX0RJU0FCTEVEKSB7Ci0JCQlCTlgyWF9FUlIoIiEhISAgbWZfY2ZnIGZ1bmN0aW9uIGRpc2FibGVkXG4iKTsKKwkJCURQKE5FVElGX01TR19JRlVQLCAibWZfY2ZnIGZ1bmN0aW9uIGRpc2FibGVkXG4iKTsKIAkJCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0RJU0FCTEVEOwogCQl9CiAKQEAgLTY1MDMsMTkgKzY5NTYsMTkgQEAKIAkJYm54Mnhfc2V0X21hY19hZGRyX2UxaChicCwgMSk7CiAKIAlpZiAoYnAtPnBvcnQucG1mKQotCQlibngyeF9pbml0aWFsX3BoeV9pbml0KGJwKTsKKwkJYm54MnhfaW5pdGlhbF9waHlfaW5pdChicCwgbG9hZF9tb2RlKTsKIAogCS8qIFN0YXJ0IGZhc3QgcGF0aCAqLwogCXN3aXRjaCAobG9hZF9tb2RlKSB7CiAJY2FzZSBMT0FEX05PUk1BTDoKIAkJLyogVHggcXVldWUgc2hvdWxkIGJlIG9ubHkgcmVlbmFibGVkICovCi0JCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7CisJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKIAkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCiAJCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgTE9BRF9PUEVOOgotCQluZXRpZl9zdGFydF9xdWV1ZShicC0+ZGV2KTsKKwkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKIAkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCiAJCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwogCQlicmVhazsKQEAgLTY1NDgsMzMgKzcwMDEsMzIgQEAKIAlicC0+cG9ydC5wbWYgPSAwOwogCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KIAlibngyeF9mcmVlX3NrYnMoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7CiBsb2FkX2Vycm9yMjoKIAkvKiBSZWxlYXNlIElSUXMgKi8KIAlibngyeF9mcmVlX2lycShicCk7CiBsb2FkX2Vycm9yMToKIAlibngyeF9uYXBpX2Rpc2FibGUoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIAlibngyeF9mcmVlX21lbShicCk7CiAKLQkvKiBUQkQgd2UgcmVhbGx5IG5lZWQgdG8gcmVzZXQgdGhlIGNoaXAKLQkgICBpZiB3ZSB3YW50IHRvIHJlY292ZXIgZnJvbSB0aGlzICovCiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3N0b3BfbXVsdGkoc3RydWN0IGJueDJ4ICpicCwgaW50IGluZGV4KQogeworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2luZGV4XTsKIAlpbnQgcmM7CiAKIAkvKiBoYWx0IHRoZSBjb25uZWN0aW9uICovCi0JYnAtPmZwW2luZGV4XS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkc7Ci0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgaW5kZXgsIDAsIGluZGV4LCAwKTsKKwlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIGluZGV4LCAwLCBmcC0+Y2xfaWQsIDApOwogCiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwogCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRCwgaW5kZXgsCi0JCQkgICAgICAgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMSk7CisJCQkgICAgICAgJihmcC0+c3RhdGUpLCAxKTsKIAlpZiAocmMpIC8qIHRpbWVvdXQgKi8KIAkJcmV0dXJuIHJjOwogCkBAIC02NTgzLDEzICs3MDM1LDEzIEBACiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfQ0xPU0VELCBpbmRleCwKLQkJCSAgICAgICAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAxKTsKKwkJCSAgICAgICAmKGZwLT5zdGF0ZSksIDEpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBibngyeF9zdG9wX2xlYWRpbmcoc3RydWN0IGJueDJ4ICpicCkKIHsKLQl1MTYgZHNiX3NwX3Byb2RfaWR4OworCV9fbGUxNiBkc2Jfc3BfcHJvZF9pZHg7CiAJLyogaWYgdGhlIG90aGVyIHBvcnQgaXMgaGFuZGxpbmcgdHJhZmZpYywKIAkgICB0aGlzIGNhbiB0YWtlIGEgbG90IG9mIHRpbWUgKi8KIAlpbnQgY250ID0gNTAwOwpAQCAtNjU5OSw3ICs3MDUxLDcgQEAKIAogCS8qIFNlbmQgSEFMVCByYW1yb2QgKi8KIAlicC0+ZnBbMF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIDAsIDAsIEJQX0NMX0lEKGJwKSwgMCk7CisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgMCwgMCwgYnAtPmZwLT5jbF9pZCwgMCk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCAwLApAQCAtNjYyMyw5ICs3MDc1LDggQEAKIAkJCSAgICpicC0+ZHNiX3NwX3Byb2QsIGRzYl9zcF9wcm9kX2lkeCk7CiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCQkJYm54MnhfcGFuaWMoKTsKLSNlbHNlCi0JCQlyYyA9IC1FQlVTWTsKICNlbmRpZgorCQkJcmMgPSAtRUJVU1k7CiAJCQlicmVhazsKIAkJfQogCQljbnQtLTsKQEAgLTY2NDgsOCArNzA5OSw2IEBACiAJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIDApOwogCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgMCk7CiAKLQlSRUdfV1IoYnAsIEhDX1JFR19DT05GSUdfMCArIHBvcnQqNCwgMHgxMDAwKTsKLQogCS8qIENsZWFyIElMVCAqLwogCWJhc2UgPSBGVU5DX0lMVF9CQVNFKGZ1bmMpOwogCWZvciAoaSA9IGJhc2U7IGkgPCBiYXNlICsgSUxUX1BFUl9GVU5DOyBpKyspCkBAIC02NzMxLDE1ICs3MTgwLDE0IEBACiAJLyogUmVsZWFzZSBJUlFzICovCiAJYm54MnhfZnJlZV9pcnEoYnApOwogCi0JLyogV2FpdCB1bnRpbCB0eCBmYXN0IHBhdGggdGFza3MgY29tcGxldGUgKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCS8qIFdhaXQgdW50aWwgdHggZmFzdHBhdGggdGFza3MgY29tcGxldGUgKi8KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQljbnQgPSAxMDAwOwotCQlzbXBfcm1iKCk7CiAJCXdoaWxlIChibngyeF9oYXNfdHhfd29ya191bmxvYWQoZnApKSB7CiAKLQkJCWJueDJ4X3R4X2ludChmcCwgMTAwMCk7CisJCQlibngyeF90eF9pbnQoZnApOwogCQkJaWYgKCFjbnQpIHsKIAkJCQlCTlgyWF9FUlIoInRpbWVvdXQgd2FpdGluZyBmb3IgcXVldWVbJWRdXG4iLAogCQkJCQkgIGkpOwpAQCAtNjc1Miw3ICs3MjAwLDYgQEAKIAkJCX0KIAkJCWNudC0tOwogCQkJbXNsZWVwKDEpOwotCQkJc21wX3JtYigpOwogCQl9CiAJfQogCS8qIEdpdmUgSFcgdGltZSB0byBkaXNjYXJkIG9sZCB0eCBtZXNzYWdlcyAqLwpAQCAtNjc2NCwxNSArNzIxMSwxNSBAQAogCiAJCWJueDJ4X3NldF9tYWNfYWRkcl9lMShicCwgMCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aGRyLmxlbmd0aF82YjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoOyBpKyspCiAJCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVtpXSk7CiAKLQkJY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gaTsKKwkJY29uZmlnLT5oZHIubGVuZ3RoID0gaTsKIAkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQogCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX0VNVUxfTVVMVEkqKDEgKyBwb3J0KTsKIAkJZWxzZQogCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIHBvcnQpOwotCQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAkJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKQEAgLTY4MzYsMTEgKzcyODMsMTEgQEAKIAlpZiAoIUJQX05PTUNQKGJwKSkKIAkJcmVzZXRfY29kZSA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIHJlc2V0X2NvZGUpOwogCWVsc2UgewotCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIGxvYWQgY291bnRzICAgICAgJWQsICVkLCAlZFxuIiwKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCAtIGxvYWQgY291bnRzICAgICAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWxvYWRfY291bnRbMF0tLTsKIAkJbG9hZF9jb3VudFsxICsgcG9ydF0tLTsKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCisJCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgLSBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCiAJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwogCQlpZiAobG9hZF9jb3VudFswXSA9PSAwKQogCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OOwpAQCAtNjg2MCwxMyArNzMwNywxNCBAQAogCS8qIFJlcG9ydCBVTkxPQURfRE9ORSB0byBNQ1AgKi8KIAlpZiAoIUJQX05PTUNQKGJwKSkKIAkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKKwogCWJwLT5wb3J0LnBtZiA9IDA7CiAKIAkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCiAJYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIAlibngyeF9mcmVlX21lbShicCk7CiAKQEAgLTY5MDgsNiArNzM1Niw2NCBAQAogICogSW5pdCBzZXJ2aWNlIGZ1bmN0aW9ucwogICovCiAKK3N0YXRpYyBpbmxpbmUgdTMyIGJueDJ4X2dldF9wcmV0ZW5kX3JlZyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKK3sKKwlzd2l0Y2ggKGZ1bmMpIHsKKwljYXNlIDA6IHJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YwOworCWNhc2UgMToJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjE7CisJY2FzZSAyOglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMjsKKwljYXNlIDM6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YzOworCWNhc2UgNDoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjQ7CisJY2FzZSA1OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNTsKKwljYXNlIDY6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y2OworCWNhc2UgNzoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjc7CisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJVbnN1cHBvcnRlZCBmdW5jdGlvbiBpbmRleDogJWRcbiIsIGZ1bmMpOworCQlyZXR1cm4gKHUzMikoLTEpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfdW5kaV9pbnRfZGlzYWJsZV9lMWgoc3RydWN0IGJueDJ4ICpicCwgaW50IG9yaWdfZnVuYykKK3sKKwl1MzIgcmVnID0gYm54MnhfZ2V0X3ByZXRlbmRfcmVnKGJwLCBvcmlnX2Z1bmMpLCBuZXdfdmFsOworCisJLyogRmx1c2ggYWxsIG91dHN0YW5kaW5nIHdyaXRlcyAqLworCW1taW93YigpOworCisJLyogUHJldGVuZCB0byBiZSBmdW5jdGlvbiAwICovCisJUkVHX1dSKGJwLCByZWcsIDApOworCS8qIEZsdXNoIHRoZSBHUkMgdHJhbnNhY3Rpb24gKGluIHRoZSBjaGlwKSAqLworCW5ld192YWwgPSBSRUdfUkQoYnAsIHJlZyk7CisJaWYgKG5ld192YWwgIT0gMCkgeworCQlCTlgyWF9FUlIoIkhtbW0uLi4gUHJldGVuZCByZWdpc3RlciB3YXNuJ3QgdXBkYXRlZDogKDAsJWQpIVxuIiwKKwkJCSAgbmV3X3ZhbCk7CisJCUJVRygpOworCX0KKworCS8qIEZyb20gbm93IHdlIGFyZSBpbiB0aGUgImxpa2UtRTEiIG1vZGUgKi8KKwlibngyeF9pbnRfZGlzYWJsZShicCk7CisKKwkvKiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKKwkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmdW50aW9uIHNldHRpbmdzICovCisJUkVHX1dSKGJwLCByZWcsIG9yaWdfZnVuYyk7CisJbmV3X3ZhbCA9IFJFR19SRChicCwgcmVnKTsKKwlpZiAobmV3X3ZhbCAhPSBvcmlnX2Z1bmMpIHsKKwkJQk5YMlhfRVJSKCJIbW1tLi4uIFByZXRlbmQgcmVnaXN0ZXIgd2Fzbid0IHVwZGF0ZWQ6ICglZCwlZCkhXG4iLAorCQkJICBvcmlnX2Z1bmMsIG5ld192YWwpOworCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF91bmRpX2ludF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jKQoreworCWlmIChDSElQX0lTX0UxSChicCkpCisJCWJueDJ4X3VuZGlfaW50X2Rpc2FibGVfZTFoKGJwLCBmdW5jKTsKKwllbHNlCisJCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X3VuZGlfdW5sb2FkKHN0cnVjdCBibngyeCAqYnApCiB7CiAJdTMyIHZhbDsKQEAgLTY5NTgsOCArNzQ2NCw3IEBACiAJCQkvKiBub3cgaXQncyBzYWZlIHRvIHJlbGVhc2UgdGhlIGxvY2sgKi8KIAkJCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9VTkRJKTsKIAotCQkJUkVHX1dSKGJwLCAoQlBfUE9SVChicCkgPyBIQ19SRUdfQ09ORklHXzEgOgotCQkJCSAgICBIQ19SRUdfQ09ORklHXzApLCAweDEwMDApOworCQkJYm54MnhfdW5kaV9pbnRfZGlzYWJsZShicCwgZnVuYyk7CiAKIAkJCS8qIGNsb3NlIGlucHV0IHRyYWZmaWMgYW5kIHdhaXQgZm9yIGl0ICovCiAJCQkvKiBEbyBub3QgcmN2IHBhY2tldHMgdG8gQlJCICovCkBAIC03MDI3LDYgKzc1MzIsMTMgQEAKIAlicC0+bGlua19wYXJhbXMuY2hpcF9pZCA9IGJwLT5jb21tb24uY2hpcF9pZDsKIAlCTlgyWF9ERVZfSU5GTygiY2hpcCBJRCBpcyAweCV4XG4iLCBpZCk7CiAKKwl2YWwgPSAoUkVHX1JEKGJwLCAweDI4NzQpICYgMHg1NSk7CisJaWYgKChicC0+Y29tbW9uLmNoaXBfaWQgJiAweDEpIHx8CisJICAgIChDSElQX0lTX0UxKGJwKSAmJiB2YWwpIHx8IChDSElQX0lTX0UxSChicCkgJiYgKHZhbCA9PSAweDU1KSkpIHsKKwkJYnAtPmZsYWdzIHw9IE9ORV9QT1JUX0ZMQUc7CisJCUJOWDJYX0RFVl9JTkZPKCJzaW5nbGUgcG9ydCBkZXZpY2VcbiIpOworCX0KKwogCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9DRkc0KTsKIAlicC0+Y29tbW9uLmZsYXNoX3NpemUgPSAoTlZSQU1fMU1CX1NJWkUgPDwKIAkJCQkgKHZhbCAmIE1DUFJfTlZNX0NGRzRfRkxBU0hfU0laRSkpOwpAQCAtNzA1MSwxNSArNzU2MywyMSBAQAogCQlCTlgyWF9FUlIoIkJBRCBNQ1AgdmFsaWRpdHkgc2lnbmF0dXJlXG4iKTsKIAogCWJwLT5jb21tb24uaHdfY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuY29uZmlnKTsKLQlicC0+Y29tbW9uLmJvYXJkID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuYm9hcmQpOwotCi0JQk5YMlhfREVWX0lORk8oImh3X2NvbmZpZyAweCUwOHggIGJvYXJkIDB4JTA4eFxuIiwKLQkJICAgICAgIGJwLT5jb21tb24uaHdfY29uZmlnLCBicC0+Y29tbW9uLmJvYXJkKTsKKwlCTlgyWF9ERVZfSU5GTygiaHdfY29uZmlnIDB4JTA4eFxuIiwgYnAtPmNvbW1vbi5od19jb25maWcpOwogCiAJYnAtPmxpbmtfcGFyYW1zLmh3X2xlZF9tb2RlID0gKChicC0+Y29tbW9uLmh3X2NvbmZpZyAmCiAJCQkJCVNIQVJFRF9IV19DRkdfTEVEX01PREVfTUFTSykgPj4KIAkJCQkgICAgICAgU0hBUkVEX0hXX0NGR19MRURfTU9ERV9TSElGVCk7CiAKKwlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgPSAwOworCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfZmVhdHVyZV9jb25maWcuY29uZmlnKTsKKwlpZiAodmFsICYgU0hBUkVEX0ZFQVRfQ0ZHX09WRVJSSURFX1BSRUVNUEhBU0lTX0NGR19FTkFCTEVEKQorCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgfD0KKwkJCQlGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEOworCWVsc2UKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzICY9CisJCQkJfkZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQ7CisKIAl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uYmNfcmV2KSA+PiA4OwogCWJwLT5jb21tb24uYmNfdmVyID0gdmFsOwogCUJOWDJYX0RFVl9JTkZPKCJiY192ZXIgJVhcbiIsIHZhbCk7CkBAIC03MDc4LDcgKzc1OTYsNyBAQAogCQlicC0+ZmxhZ3MgfD0gTk9fV09MX0ZMQUc7CiAJfQogCUJOWDJYX0RFVl9JTkZPKCIlc1dvTCBjYXBhYmxlXG4iLAotCQkgICAgICAgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSA/ICJOb3QgIiA6ICIiKTsKKwkJICAgICAgIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgPyAibm90ICIgOiAiIik7CiAKIAl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bSk7CiAJdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzRdKTsKQEAgLTcxNzEsMjcgKzc2ODksNiBAQAogCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA1KVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA2KVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODA3MilcbiIsCiAJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CkBAIC03MjE3LDYgKzc3MTQsMzkgQEAKIAkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNSlcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNilcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MjYpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChTRlg3MTAxKVxuIiwKIAkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKQEAgLTcyMjgsNiArNzc1OCwyMiBAQAogCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChCQ004NDgxKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1RQIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlCTlgyWF9FUlIoIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWQgMHgleFxuIiwKIAkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CkBAIC03NDUzLDEyICs3OTk5LDEyIEBACiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAl1MzIgdmFsLCB2YWwyOworCXUzMiBjb25maWc7CisJdTE2IGk7CiAKIAlicC0+bGlua19wYXJhbXMuYnAgPSBicDsKIAlicC0+bGlua19wYXJhbXMucG9ydCA9IHBvcnQ7CiAKLQlicC0+bGlua19wYXJhbXMuc2VyZGVzX2NvbmZpZyA9Ci0JCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5zZXJkZXNfY29uZmlnKTsKIAlicC0+bGlua19wYXJhbXMubGFuZV9jb25maWcgPQogCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubGFuZV9jb25maWcpOwogCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyA9CkBAIC03NDcxLDEwICs4MDE3LDM1IEBACiAJYnAtPnBvcnQubGlua19jb25maWcgPQogCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9mZWF0dXJlX2NvbmZpZ1twb3J0XS5saW5rX2NvbmZpZyk7CiAKLQlCTlgyWF9ERVZfSU5GTygic2VyZGVzX2NvbmZpZyAweCUwOHggIGxhbmVfY29uZmlnIDB4JTA4eFxuIgotCSAgICAgS0VSTl9JTkZPICIgIGV4dF9waHlfY29uZmlnIDB4JTA4eCAgc3BlZWRfY2FwX21hc2sgMHglMDh4IgotCQkgICAgICAgIiAgbGlua19jb25maWcgMHglMDh4XG4iLAotCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnNlcmRlc19jb25maWcsCisJLyogR2V0IHRoZSA0IGxhbmVzIHhneHMgY29uZmlnIHJ4IGFuZCB0eCAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdmFsID0gU0hNRU1fUkQoYnAsCisJCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS54Z3hzX2NvbmZpZ19yeFtpPDwxXSk7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ19yeFtpIDw8IDFdID0gKCh2YWw+PjE2KSAmIDB4ZmZmZik7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ19yeFsoaSA8PCAxKSArIDFdID0gKHZhbCAmIDB4ZmZmZik7CisKKwkJdmFsID0gU0hNRU1fUkQoYnAsCisJCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS54Z3hzX2NvbmZpZ190eFtpPDwxXSk7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ190eFtpIDw8IDFdID0gKCh2YWw+PjE2KSAmIDB4ZmZmZik7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ190eFsoaSA8PCAxKSArIDFdID0gKHZhbCAmIDB4ZmZmZik7CisJfQorCisJY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0uY29uZmlnKTsKKwlpZiAoY29uZmlnICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0VOQUJMRUQpCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQorCQkJCUZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQ7CisJZWxzZQorCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgJj0KKwkJCQl+RkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRDsKKworCS8qIElmIHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZiBXb0wsIHNldCB0aGUgZGVmYXVsdCBzdGF0ZSBhY2NvcmRpbmcKKwkgKiB0byB0aGUgSFcKKwkgKi8KKwlicC0+d29sID0gKCEoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpICYmCisJCSAgIChjb25maWcgJiBQT1JUX0ZFQVRVUkVfV09MX0VOQUJMRUQpKTsKKworCUJOWDJYX0RFVl9JTkZPKCJsYW5lX2NvbmZpZyAweCUwOHggIGV4dF9waHlfY29uZmlnIDB4JTA4eCIKKwkJICAgICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JTA4eCAgbGlua19jb25maWcgMHglMDh4XG4iLAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmxhbmVfY29uZmlnLAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnLAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrLCBicC0+cG9ydC5saW5rX2NvbmZpZyk7CkBAIC03NTIxLDcgKzgwOTIsNyBAQAogCQkJCSAgICAgICAiKDB4JTA0eClcbiIsCiAJCQkJICAgICAgIGZ1bmMsIGJwLT5lMWhvdiwgYnAtPmUxaG92KTsKIAkJfSBlbHNlIHsKLQkJCUJOWDJYX0RFVl9JTkZPKCJTaW5nbGUgZnVuY3Rpb24gbW9kZVxuIik7CisJCQlCTlgyWF9ERVZfSU5GTygic2luZ2xlIGZ1bmN0aW9uIG1vZGVcbiIpOwogCQkJaWYgKEJQX0UxSFZOKGJwKSkgewogCQkJCUJOWDJYX0VSUigiISEhICBObyB2YWxpZCBFMUhPViBmb3IgZnVuYyAlZCwiCiAJCQkJCSAgIiAgYWJvcnRpbmdcbiIsIGZ1bmMpOwpAQCAtNzU3MSw2ICs4MTQyLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2luaXRfYnAoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCB0aW1lcl9pbnRlcnZhbDsKIAlpbnQgcmM7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdCBoYW5kbGluZyB1bnRpbCBIVyBpcyBpbml0aWFsaXplZCAqLwpAQCAtNzU5NCw2ICs4MTY2LDE2IEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJICAgICAgICJNQ1AgZGlzYWJsZWQsIG11c3QgbG9hZCBkZXZpY2VzIGluIG9yZGVyIVxuIik7CiAKKwkvKiBTZXQgbXVsdGkgcXVldWUgbW9kZSAqLworCWlmICgobXVsdGlfbW9kZSAhPSBFVEhfUlNTX01PREVfRElTQUJMRUQpICYmCisJICAgICgoaW50X21vZGUgPT0gSU5UX01PREVfSU5UeCkgfHwgKGludF9tb2RlID09IElOVF9NT0RFX01TSSkpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgIk11bHRpIGRpc2FibGVkIHNpbmNlIGludF9tb2RlIHJlcXVlc3RlZCBpcyBub3QgTVNJLVhcbiIpOworCQltdWx0aV9tb2RlID0gRVRIX1JTU19NT0RFX0RJU0FCTEVEOworCX0KKwlicC0+bXVsdGlfbW9kZSA9IG11bHRpX21vZGU7CisKKwogCS8qIFNldCBUUEEgZmxhZ3MgKi8KIAlpZiAoZGlzYWJsZV90cGEpIHsKIAkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7CkBAIC03NjAzLDE4ICs4MTg1LDE4IEBACiAJCWJwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwogCX0KIAorCWJwLT5tcnJzID0gbXJyczsKIAogCWJwLT50eF9yaW5nX3NpemUgPSBNQVhfVFhfQVZBSUw7CiAJYnAtPnJ4X3Jpbmdfc2l6ZSA9IE1BWF9SWF9BVkFJTDsKIAogCWJwLT5yeF9jc3VtID0gMTsKLQlicC0+cnhfb2Zmc2V0ID0gMDsKIAogCWJwLT50eF90aWNrcyA9IDUwOwogCWJwLT5yeF90aWNrcyA9IDI1OwogCi0JYnAtPnRpbWVyX2ludGVydmFsID0gKENISVBfUkVWX0lTX1NMT1coYnApID8gNSpIWiA6IEhaKTsKLQlicC0+Y3VycmVudF9pbnRlcnZhbCA9IChwb2xsID8gcG9sbCA6IGJwLT50aW1lcl9pbnRlcnZhbCk7CisJdGltZXJfaW50ZXJ2YWwgPSAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyA1KkhaIDogSFopOworCWJwLT5jdXJyZW50X2ludGVydmFsID0gKHBvbGwgPyBwb2xsIDogdGltZXJfaW50ZXJ2YWwpOwogCiAJaW5pdF90aW1lcigmYnAtPnRpbWVyKTsKIAlicC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbDsKQEAgLTc2NTksMTQgKzgyNDEsMTYgQEAKIAogCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgogCQkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgogCQkJY21kLT5wb3J0ID0gUE9SVF9UUDsKIAkJCWJyZWFrOwogCkBAIC03ODg4LDYgKzg0NzIsODQgQEAKIAlpbmZvLT5yZWdkdW1wX2xlbiA9IDA7CiB9CiAKKyNkZWZpbmUgSVNfRTFfT05MSU5FKGluZm8pCSgoKGluZm8pICYgUklfRTFfT05MSU5FKSA9PSBSSV9FMV9PTkxJTkUpCisjZGVmaW5lIElTX0UxSF9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMUhfT05MSU5FKSA9PSBSSV9FMUhfT05MSU5FKQorCitzdGF0aWMgaW50IGJueDJ4X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0YXRpYyB1MzIgcmVnZHVtcF9sZW47CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwlpZiAocmVnZHVtcF9sZW4pCisJCXJldHVybiByZWdkdW1wX2xlbjsKKworCWlmIChDSElQX0lTX0UxKGJwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gcmVnX2FkZHJzW2ldLnNpemU7CisKKwkJZm9yIChpID0gMDsgaSA8IFdSRUdTX0NPVU5UX0UxOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHdyZWdfYWRkcnNfZTFbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gd3JlZ19hZGRyc19lMVtpXS5zaXplICoKKwkJCQkJKDEgKyB3cmVnX2FkZHJzX2UxW2ldLnJlYWRfcmVnc19jb3VudCk7CisKKwl9IGVsc2UgeyAvKiBFMUggKi8KKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSByZWdfYWRkcnNbaV0uc2l6ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgV1JFR1NfQ09VTlRfRTFIOyBpKyspCisJCQlpZiAoSVNfRTFIX09OTElORSh3cmVnX2FkZHJzX2UxaFtpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSB3cmVnX2FkZHJzX2UxaFtpXS5zaXplICoKKwkJCQkJKDEgKyB3cmVnX2FkZHJzX2UxaFtpXS5yZWFkX3JlZ3NfY291bnQpOworCX0KKwlyZWdkdW1wX2xlbiAqPSA0OworCXJlZ2R1bXBfbGVuICs9IHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpOworCisJcmV0dXJuIHJlZ2R1bXBfbGVuOworfQorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqX3ApCit7CisJdTMyICpwID0gX3AsIGksIGo7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGR1bXBfaGRyIGR1bXBfaGRyID0gezB9OworCisJcmVncy0+dmVyc2lvbiA9IDA7CisJbWVtc2V0KHAsIDAsIHJlZ3MtPmxlbik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybjsKKworCWR1bXBfaGRyLmhkcl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpIC8gNCkgLSAxOworCWR1bXBfaGRyLmR1bXBfc2lnbiA9IGR1bXBfc2lnbl9hbGw7CisJZHVtcF9oZHIueHN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBYU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIudHN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBUU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIudXN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBVU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIuY3N0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBDU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIuaW5mbyA9IENISVBfSVNfRTEoYnApID8gUklfRTFfT05MSU5FIDogUklfRTFIX09OTElORTsKKworCW1lbWNweShwLCAmZHVtcF9oZHIsIHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpKTsKKwlwICs9IGR1bXBfaGRyLmhkcl9zaXplICsgMTsKKworCWlmIChDSElQX0lTX0UxKGJwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJZm9yIChqID0gMDsgaiA8IHJlZ19hZGRyc1tpXS5zaXplOyBqKyspCisJCQkJCSpwKysgPSBSRUdfUkQoYnAsCisJCQkJCQkgICAgICByZWdfYWRkcnNbaV0uYWRkciArIGoqNCk7CisKKwl9IGVsc2UgeyAvKiBFMUggKi8KKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlmb3IgKGogPSAwOyBqIDwgcmVnX2FkZHJzW2ldLnNpemU7IGorKykKKwkJCQkJKnArKyA9IFJFR19SRChicCwKKwkJCQkJCSAgICAgIHJlZ19hZGRyc1tpXS5hZGRyICsgaio0KTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtODA0Niw3ICs4NzA4LDcgQEAKIAkJCU1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfV1JfRU4pKSk7CiB9CiAKLXN0YXRpYyBpbnQgYm54MnhfbnZyYW1fcmVhZF9kd29yZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1MzIgKnJldF92YWwsCitzdGF0aWMgaW50IGJueDJ4X252cmFtX3JlYWRfZHdvcmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgX19iZTMyICpyZXRfdmFsLAogCQkJCSAgdTMyIGNtZF9mbGFncykKIHsKIAlpbnQgY291bnQsIGksIHJjOwpAQCAtODA4Miw4ICs4NzQ0LDcgQEAKIAkJCS8qIHdlIHJlYWQgbnZyYW0gZGF0YSBpbiBjcHUgb3JkZXIKIAkJCSAqIGJ1dCBldGh0b29sIHNlZXMgaXQgYXMgYW4gYXJyYXkgb2YgYnl0ZXMKIAkJCSAqIGNvbnZlcnRpbmcgdG8gYmlnLWVuZGlhbiB3aWxsIGRvIHRoZSB3b3JrICovCi0JCQl2YWwgPSBjcHVfdG9fYmUzMih2YWwpOwotCQkJKnJldF92YWwgPSB2YWw7CisJCQkqcmV0X3ZhbCA9IGNwdV90b19iZTMyKHZhbCk7CiAJCQlyYyA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtODA5Nyw3ICs4NzU4LDcgQEAKIHsKIAlpbnQgcmM7CiAJdTMyIGNtZF9mbGFnczsKLQl1MzIgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAoKG9mZnNldCAmIDB4MDMpIHx8IChidWZfc2l6ZSAmIDB4MDMpIHx8IChidWZfc2l6ZSA9PSAwKSkgewogCQlEUChCTlgyWF9NU0dfTlZNLApAQCAtODIxNiw3ICs4ODc3LDcgQEAKIAlpbnQgcmM7CiAJdTMyIGNtZF9mbGFnczsKIAl1MzIgYWxpZ25fb2Zmc2V0OwotCXUzMiB2YWw7CisJX19iZTMyIHZhbDsKIAogCWlmIChvZmZzZXQgKyBidWZfc2l6ZSA+IGJwLT5jb21tb24uZmxhc2hfc2l6ZSkgewogCQlEUChCTlgyWF9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAoMHgleCkgKyIKQEAgLTgzNDUsNyArOTAwNiw3IEBACiAJCQlpZiAoKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSB8fAogCQkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfRElTQUJMRUQpKSB7CiAJCQkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkJICAgICAgICZicC0+bGlua192YXJzKTsKKwkJCQkJCSAgICAgICAmYnAtPmxpbmtfdmFycywgMSk7CiAJCQkJcmMgfD0gYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywKIAkJCQkJCSAgICAgJmJwLT5saW5rX3ZhcnMpOwogCQkJfQpAQCAtODQzNSw3ICs5MDk2LDggQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWVwYXVzZS0+YXV0b25lZyA9IChicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9PSBCTlgyWF9GTE9XX0NUUkxfQVVUTykgJiYKKwllcGF1c2UtPmF1dG9uZWcgPSAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0KKwkJCSAgIEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKSAmJgogCQkJICAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKTsKIAogCWVwYXVzZS0+cnhfcGF1c2UgPSAoKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSA9PQpAQCAtODU2Nyw4ICs5MjI5LDcgQEAKIAl7ICJudnJhbV90ZXN0IChvbmxpbmUpIiB9LAogCXsgImludGVycnVwdF90ZXN0IChvbmxpbmUpIiB9LAogCXsgImxpbmtfdGVzdCAob25saW5lKSIgfSwKLQl7ICJpZGxlIGNoZWNrIChvbmxpbmUpIiB9LAotCXsgIk1DIGVycm9ycyAob25saW5lKSIgfQorCXsgImlkbGUgY2hlY2sgKG9ubGluZSkiIH0KIH07CiAKIHN0YXRpYyBpbnQgYm54Mnhfc2VsZl90ZXN0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC04NzU2LDIzICs5NDE3LDIzIEBACiAJdTE2IGxlbjsKIAlpbnQgcmMgPSAtRU5PREVWOwogCi0JaWYgKGxvb3BiYWNrX21vZGUgPT0gQk5YMlhfTUFDX0xPT1BCQUNLKSB7CisJLyogY2hlY2sgdGhlIGxvb3BiYWNrIG1vZGUgKi8KKwlzd2l0Y2ggKGxvb3BiYWNrX21vZGUpIHsKKwljYXNlIEJOWDJYX1BIWV9MT09QQkFDSzoKKwkJaWYgKGJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlICE9IExPT1BCQUNLX1hHWFNfMTApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBCTlgyWF9NQUNfTE9PUEJBQ0s6CiAJCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfQk1BQzsKIAkJYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOwotCi0JfSBlbHNlIGlmIChsb29wYmFja19tb2RlID09IEJOWDJYX1BIWV9MT09QQkFDSykgewotCQl1MTYgY250ID0gMTAwMDsKLQkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19YR1hTXzEwOwotCQlibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7Ci0JCS8qIHdhaXQgdW50aWwgbGluayBzdGF0ZSBpcyByZXN0b3JlZCAqLwotCQlpZiAobGlua191cCkKLQkJCXdoaWxlIChjbnQtLSAmJiBibngyeF90ZXN0X2xpbmsoJmJwLT5saW5rX3BhcmFtcywKLQkJCQkJCQkmYnAtPmxpbmtfdmFycykpCi0JCQkJbXNsZWVwKDEwKTsKLQl9IGVsc2UKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JcGt0X3NpemUgPSAxNTE0OworCS8qIHByZXBhcmUgdGhlIGxvb3BiYWNrIHBhY2tldCAqLworCXBrdF9zaXplID0gKCgoYnAtPmRldi0+bXR1IDwgRVRIX01BWF9QQUNLRVRfU0laRSkgPworCQkgICAgIGJwLT5kZXYtPm10dSA6IEVUSF9NQVhfUEFDS0VUX1NJWkUpICsgRVRIX0hMRU4pOwogCXNrYiA9IG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgYnAtPnJ4X2J1Zl9zaXplKTsKIAlpZiAoIXNrYikgewogCQlyYyA9IC1FTk9NRU07CkBAIC04Nzg0LDYgKzk0NDUsNyBAQAogCWZvciAoaSA9IEVUSF9ITEVOOyBpIDwgcGt0X3NpemU7IGkrKykKIAkJcGFja2V0W2ldID0gKHVuc2lnbmVkIGNoYXIpIChpICYgMHhmZik7CiAKKwkvKiBzZW5kIHRoZSBsb29wYmFjayBwYWNrZXQgKi8KIAludW1fcGt0cyA9IDA7CiAJdHhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKIAlyeF9zdGFydF9pZHggPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOwpAQCAtODgwOCwxMiArOTQ3MCwxMCBAQAogCiAJd21iKCk7CiAKLQlmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kID0KLQkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCkgKyAxKTsKKwlsZTE2X2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QsIDEpOwogCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCi0JZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgPQotCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCkgKyAxKTsKLQlET09SQkVMTChicCwgRlBfSURYKGZwKSwgMCk7CisJbGUzMl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCwgMSk7CisJRE9PUkJFTEwoYnAsIGZwLT5pbmRleCwgMCk7CiAKIAltbWlvd2IoKTsKIApAQCAtODg2OCw3ICs5NTI4LDcgQEAKIAogc3RhdGljIGludCBibngyeF90ZXN0X2xvb3BiYWNrKHN0cnVjdCBibngyeCAqYnAsIHU4IGxpbmtfdXApCiB7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmMgPSAwLCByZXM7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCiAJCXJldHVybiBCTlgyWF9MT09QQkFDS19GQUlMRUQ7CkBAIC04ODc2LDE0ICs5NTM2LDE2IEBACiAJYm54MnhfbmV0aWZfc3RvcChicCwgMSk7CiAJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CiAKLQlpZiAoYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9NQUNfTE9PUEJBQ0ssIGxpbmtfdXApKSB7Ci0JCURQKE5FVElGX01TR19QUk9CRSwgIk1BQyBsb29wYmFjayBmYWlsZWRcbiIpOwotCQlyYyB8PSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEOworCXJlcyA9IGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfUEhZX0xPT1BCQUNLLCBsaW5rX3VwKTsKKwlpZiAocmVzKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwgIiAgUEhZIGxvb3BiYWNrIGZhaWxlZCAgKHJlcyAlZClcbiIsIHJlcyk7CisJCXJjIHw9IEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQ7CiAJfQogCi0JaWYgKGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfUEhZX0xPT1BCQUNLLCBsaW5rX3VwKSkgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICJQSFkgbG9vcGJhY2sgZmFpbGVkXG4iKTsKLQkJcmMgfD0gQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRDsKKwlyZXMgPSBibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX01BQ19MT09QQkFDSywgbGlua191cCk7CisJaWYgKHJlcykgeworCQlEUChORVRJRl9NU0dfUFJPQkUsICIgIE1BQyBsb29wYmFjayBmYWlsZWQgIChyZXMgJWQpXG4iLCByZXMpOworCQlyYyB8PSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEOwogCX0KIAogCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwpAQCAtODkxMCwxNCArOTU3MiwxNCBAQAogCQl7IDB4Nzc4LCAgMHg3MCB9LAogCQl7ICAgICAwLCAgICAgMCB9CiAJfTsKLQl1MzIgYnVmWzB4MzUwIC8gNF07CisJX19iZTMyIGJ1ZlsweDM1MCAvIDRdOwogCXU4ICpkYXRhID0gKHU4ICopYnVmOwogCWludCBpLCByYzsKIAl1MzIgbWFnaWMsIGNzdW07CiAKIAlyYyA9IGJueDJ4X252cmFtX3JlYWQoYnAsIDAsIGRhdGEsIDQpOwogCWlmIChyYykgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICJtYWdpYyB2YWx1ZSByZWFkIChyYyAtJWQpXG4iLCAtcmMpOworCQlEUChORVRJRl9NU0dfUFJPQkUsICJtYWdpYyB2YWx1ZSByZWFkIChyYyAlZClcbiIsIHJjKTsKIAkJZ290byB0ZXN0X252cmFtX2V4aXQ7CiAJfQogCkBAIC04OTM0LDcgKzk1OTYsNyBAQAogCQkJCSAgICAgIG52cmFtX3RibFtpXS5zaXplKTsKIAkJaWYgKHJjKSB7CiAJCQlEUChORVRJRl9NU0dfUFJPQkUsCi0JCQkgICAibnZyYW1fdGJsWyVkXSByZWFkIGRhdGEgKHJjIC0lZClcbiIsIGksIC1yYyk7CisJCQkgICAibnZyYW1fdGJsWyVkXSByZWFkIGRhdGEgKHJjICVkKVxuIiwgaSwgcmMpOwogCQkJZ290byB0ZXN0X252cmFtX2V4aXQ7CiAJCX0KIApAQCAtODk1OSwxMiArOTYyMSwxMiBAQAogCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljb25maWctPmhkci5sZW5ndGhfNmIgPSAwOworCWNvbmZpZy0+aGRyLmxlbmd0aCA9IDA7CiAJaWYgKENISVBfSVNfRTEoYnApKQogCQljb25maWctPmhkci5vZmZzZXQgPSAoQlBfUE9SVChicCkgPyAzMiA6IDApOwogCWVsc2UKIAkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQlBfRlVOQyhicCk7Ci0JY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCXJjID0gYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKQEAgLTkwMzcsOSArOTY5OSw2IEBACiAJCQlidWZbNV0gPSAxOwogCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAkJfQotCWJ1Zls3XSA9IGJueDJ4X21jX2Fzc2VydChicCk7Ci0JaWYgKGJ1Zls3XSAhPSAwKQotCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCiAjaWZkZWYgQk5YMlhfRVhUUkFfREVCVUcKIAlibngyeF9wYW5pY19kdW1wKGJwKTsKQEAgLTkwNDksNDAgKzk3MDgsOTggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWxvbmcgb2Zmc2V0OwogCWludCBzaXplOworCXU4IHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOworfSBibngyeF9xX3N0YXRzX2FycltCTlgyWF9OVU1fUV9TVEFUU10gPSB7CisvKiAxICovCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksIDgsICJbJWRdOiByeF9ieXRlcyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIoZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X2Vycm9yX2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X3VjYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiByeF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfYmNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkX2hpKSwJOCwgIlslZF06IHJ4X2Rpc2NhcmRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAorCQkJCQkgNCwgIlslZF06IHJ4X3BoeV9pcF9lcnJfZGlzY2FyZHMifSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCisJCQkJCSA0LCAiWyVkXTogcnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKGh3X2NzdW1fZXJyKSwgNCwgIlslZF06IHJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0sCisKKy8qIDEwICoveyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwJOCwgIlslZF06IHR4X2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCQkJCTgsICJbJWRdOiB0eF9wYWNrZXRzIiB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlsb25nIG9mZnNldDsKKwlpbnQgc2l6ZTsKIAl1MzIgZmxhZ3M7CiAjZGVmaW5lIFNUQVRTX0ZMQUdTX1BPUlQJCTEKICNkZWZpbmUgU1RBVFNfRkxBR1NfRlVOQwkJMgorI2RlZmluZSBTVEFUU19GTEFHU19CT1RICQkoU1RBVFNfRkxBR1NfRlVOQyB8IFNUQVRTX0ZMQUdTX1BPUlQpCiAJdTggc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiB9IGJueDJ4X3N0YXRzX2FycltCTlgyWF9OVU1fU1RBVFNdID0gewotLyogMSAqLwl7IFNUQVRTX09GRlNFVDMyKHZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfYnl0ZXMiIH0sCisvKiAxICovCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9ieXRlcyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfZXJyb3JfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInR4X2J5dGVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXJyb3JfYnl0ZXMiIH0sCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2Vycm9yX2J5dGVzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfdWNhc3RfcGFja2V0cyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfdWNhc3RfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfbWNhc3RfcGFja2V0cyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfbWNhc3RfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfYmNhc3RfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInR4X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tYWNfZXJyb3JzIiB9LAotLyogMTAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfY2Fycmllcl9lcnJvcnMiIH0sCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2JjYXN0X3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2NyY19lcnJvcnMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2RvdDNzdGF0c2FsaWdubWVudGVycm9yc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2FsaWduX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF91bmRlcnNpemVfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfb3ZlcnNpemVfcGFja2V0cyIgfSwKKy8qIDEwICoveyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHNmcmFnbWVudHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9mcmFnbWVudHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfamFiYmVycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKG5vX2J1ZmZfZGlzY2FyZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2Rpc2NhcmRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobWFjX2ZpbHRlcl9kaXNjYXJkKSwKKwkJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfZmlsdGVyZWRfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHh4b3ZlcmZsb3dfZGlzY2FyZCksCisJCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2Z3X2Rpc2NhcmRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX2Ryb3BfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9icmJfZGlzY2FyZCIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGJyYl90cnVuY2F0ZV9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2JyYl90cnVuY2F0ZSIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3BhdXNlX2ZyYW1lcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfbWFjX2N0cmxfZnJhbWVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobmlnX3RpbWVyX21heCksCisJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfY29uc3RhbnRfcGF1c2VfZXZlbnRzIiB9LAorLyogMjAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X2Vycl9kaXNjYXJkX3BrdCksCisJCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X3BoeV9pcF9lcnJfZGlzY2FyZHMifSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3NrYl9hbGxvY19mYWlsZWQpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9za2JfYWxsb2NfZGlzY2FyZCIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGh3X2NzdW1fZXJyKSwKKwkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIgfSwKKworCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJ0eF9ieXRlcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfaWZoY291dGJhZG9jdGV0c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2Vycm9yX2J5dGVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAidHhfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X21hY19lcnJvcnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9yc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2NhcnJpZXJfZXJyb3JzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9zaW5nbGVfY29sbGlzaW9ucyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tdWx0aV9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfaGkpLAorLyogMzAgKi97IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZGVmZXJyZWQiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9leGNlc3NfY29sbGlzaW9ucyIgfSwKQEAgLTkwOTAsMTQgKzk4MDcsNiBAQAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9sYXRlX2NvbGxpc2lvbnMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfdG90YWxfY29sbGlzaW9ucyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZyYWdtZW50cyIgfSwKLS8qIDIwICoveyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfamFiYmVycyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF91bmRlcnNpemVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGphYmJlcl9wYWNrZXRzX3JlY2VpdmVkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfb3ZlcnNpemVfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0c19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzY0X2J5dGVfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NW9jdGV0c3RvMTI3b2N0ZXRzX2hpKSwKQEAgLTkxMTAsNTIgKzk4MTksNDYgQEAKIAkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF81MTJfdG9fMTAyM19ieXRlX3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfaGkpLAogCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzEwMjRfdG9fMTUyMl9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpKSwKKy8qIDQwICoveyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpKSwKIAkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF8xNTIzX3RvXzkwMjJfYnl0ZV9wYWNrZXRzIiB9LAotLyogMzAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3hvbl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfeG9mZl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X291dHhvbnNlbnRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF94b25fZnJhbWVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9vdXR4b2Zmc2VudF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3hvZmZfZnJhbWVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9tYWNfY3RybF9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9maWx0ZXJlZF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfZGlzY2FyZHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih4eG92ZXJmbG93X2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9md19kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGJyYl9kcm9wX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAiYnJiX2Rpc2NhcmQiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihicmJfdHJ1bmNhdGVfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJicmJfdHJ1bmNhdGUiIH0sCi0vKiA0MCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAotLyogNDIgKi97IFNUQVRTX09GRlNFVDMyKGh3X2NzdW1fZXJyKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIgfQorCXsgU1RBVFNfT0ZGU0VUMzIocGF1c2VfZnJhbWVzX3NlbnRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9wYXVzZV9mcmFtZXMiIH0KIH07CiAKLSNkZWZpbmUgSVNfTk9UX0UxSE1GX1NUQVQoYnAsIGkpIFwKLQkJKElTX0UxSE1GKGJwKSAmJiAoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfUE9SVCkpCisjZGVmaW5lIElTX1BPUlRfU1RBVChpKSBcCisJKChibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MgJiBTVEFUU19GTEFHU19CT1RIKSA9PSBTVEFUU19GTEFHU19QT1JUKQorI2RlZmluZSBJU19GVU5DX1NUQVQoaSkJCShibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MgJiBTVEFUU19GTEFHU19GVU5DKQorI2RlZmluZSBJU19FMUhNRl9NT0RFX1NUQVQoYnApIFwKKwkJCShJU19FMUhNRihicCkgJiYgIShicC0+bXNnbGV2ZWwgJiBCTlgyWF9NU0dfU1RBVFMpKQogCiBzdGF0aWMgdm9pZCBibngyeF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqYnVmKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpLCBqOworCWludCBpLCBqLCBrOwogCiAJc3dpdGNoIChzdHJpbmdzZXQpIHsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgewotCQkJaWYgKElTX05PVF9FMUhNRl9TVEFUKGJwLCBpKSkKLQkJCQljb250aW51ZTsKLQkJCXN0cmNweShidWYgKyBqKkVUSF9HU1RSSU5HX0xFTiwKLQkJCSAgICAgICBibngyeF9zdGF0c19hcnJbaV0uc3RyaW5nKTsKLQkJCWorKzsKKwkJaWYgKGlzX211bHRpKGJwKSkgeworCQkJayA9IDA7CisJCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fUV9TVEFUUzsgaisrKQorCQkJCQlzcHJpbnRmKGJ1ZiArIChrICsgaikqRVRIX0dTVFJJTkdfTEVOLAorCQkJCQkJYm54MnhfcV9zdGF0c19hcnJbal0uc3RyaW5nLCBpKTsKKwkJCQlrICs9IEJOWDJYX05VTV9RX1NUQVRTOworCQkJfQorCQkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkpCisJCQkJYnJlYWs7CisJCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1NUQVRTOyBqKyspCisJCQkJc3RyY3B5KGJ1ZiArIChrICsgaikqRVRIX0dTVFJJTkdfTEVOLAorCQkJCSAgICAgICBibngyeF9zdGF0c19hcnJbal0uc3RyaW5nKTsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKKwkJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSAmJiBJU19QT1JUX1NUQVQoaSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXN0cmNweShidWYgKyBqKkVUSF9HU1RSSU5HX0xFTiwKKwkJCQkgICAgICAgYm54Mnhfc3RhdHNfYXJyW2ldLnN0cmluZyk7CisJCQkJaisrOworCQkJfQogCQl9CiAJCWJyZWFrOwogCkBAIC05MTY4LDEzICs5ODcxLDIyIEBACiBzdGF0aWMgaW50IGJueDJ4X2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpLCBudW1fc3RhdHMgPSAwOworCWludCBpLCBudW1fc3RhdHM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKLQkJaWYgKElTX05PVF9FMUhNRl9TVEFUKGJwLCBpKSkKLQkJCWNvbnRpbnVlOwotCQludW1fc3RhdHMrKzsKKwlpZiAoaXNfbXVsdGkoYnApKSB7CisJCW51bV9zdGF0cyA9IEJOWDJYX05VTV9RX1NUQVRTICogQk5YMlhfTlVNX1FVRVVFUyhicCk7CisJCWlmICghSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkKKwkJCW51bV9zdGF0cyArPSBCTlgyWF9OVU1fU1RBVFM7CisJfSBlbHNlIHsKKwkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkpIHsKKwkJCW51bV9zdGF0cyA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspCisJCQkJaWYgKElTX0ZVTkNfU1RBVChpKSkKKwkJCQkJbnVtX3N0YXRzKys7CisJCX0gZWxzZQorCQkJbnVtX3N0YXRzID0gQk5YMlhfTlVNX1NUQVRTOwogCX0KKwogCXJldHVybiBudW1fc3RhdHM7CiB9CiAKQEAgLTkxODIsMjkgKzk4OTQsNzEgQEAKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmJ1ZikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgKmh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOwotCWludCBpLCBqOworCXUzMiAqaHdfc3RhdHMsICpvZmZzZXQ7CisJaW50IGksIGosIGs7CiAKLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7Ci0JCWlmIChJU19OT1RfRTFITUZfU1RBVChicCwgaSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gMCkgewotCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KLQkJCWJ1ZltqXSA9IDA7Ci0JCQlqKys7Ci0JCQljb250aW51ZTsKKwlpZiAoaXNfbXVsdGkoYnApKSB7CisJCWsgPSAwOworCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5mcFtpXS5ldGhfcV9zdGF0czsKKwkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fUV9TVEFUUzsgaisrKSB7CisJCQkJaWYgKGJueDJ4X3Ffc3RhdHNfYXJyW2pdLnNpemUgPT0gMCkgeworCQkJCQkvKiBza2lwIHRoaXMgY291bnRlciAqLworCQkJCQlidWZbayArIGpdID0gMDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCW9mZnNldCA9IChod19zdGF0cyArCisJCQkJCSAgYm54MnhfcV9zdGF0c19hcnJbal0ub2Zmc2V0KTsKKwkJCQlpZiAoYm54MnhfcV9zdGF0c19hcnJbal0uc2l6ZSA9PSA0KSB7CisJCQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCisJCQkJCWJ1ZltrICsgal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KKwkJCQlidWZbayArIGpdID0gSElMT19VNjQoKm9mZnNldCwgKihvZmZzZXQgKyAxKSk7CisJCQl9CisJCQlrICs9IEJOWDJYX05VTV9RX1NUQVRTOwogCQl9Ci0JCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSA0KSB7Ci0JCQkvKiA0LWJ5dGUgY291bnRlciAqLwotCQkJYnVmW2pdID0gKHU2NCkgKihod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQpOwotCQkJaisrOwotCQkJY29udGludWU7CisJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApKQorCQkJcmV0dXJuOworCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmV0aF9zdGF0czsKKwkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9TVEFUUzsgaisrKSB7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2pdLnNpemUgPT0gMCkgeworCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJYnVmW2sgKyBqXSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlvZmZzZXQgPSAoaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbal0ub2Zmc2V0KTsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbal0uc2l6ZSA9PSA0KSB7CisJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQlidWZbayArIGpdID0gKHU2NCkgKm9mZnNldDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIDgtYnl0ZSBjb3VudGVyICovCisJCQlidWZbayArIGpdID0gSElMT19VNjQoKm9mZnNldCwgKihvZmZzZXQgKyAxKSk7CiAJCX0KLQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KLQkJYnVmW2pdID0gSElMT19VNjQoKihod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQpLAotCQkJCSAgKihod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQgKyAxKSk7Ci0JCWorKzsKKwl9IGVsc2UgeworCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmV0aF9zdGF0czsKKwkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgeworCQkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkgJiYgSVNfUE9SVF9TVEFUKGkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDApIHsKKwkJCQkvKiBza2lwIHRoaXMgY291bnRlciAqLworCQkJCWJ1ZltqXSA9IDA7CisJCQkJaisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJb2Zmc2V0ID0gKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCk7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gNCkgeworCQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCisJCQkJYnVmW2pdID0gKHU2NCkgKm9mZnNldDsKKwkJCQlqKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiA4LWJ5dGUgY291bnRlciAqLworCQkJYnVmW2pdID0gSElMT19VNjQoKm9mZnNldCwgKihvZmZzZXQgKyAxKSk7CisJCQlqKys7CisJCX0KIAl9CiB9CiAKQEAgLTkyNTEsNiArMTAwMDUsOCBAQAogCS5nZXRfc2V0dGluZ3MJCT0gYm54MnhfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gYm54Mnhfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSBibngyeF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuCQk9IGJueDJ4X2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MJCT0gYm54MnhfZ2V0X3JlZ3MsCiAJLmdldF93b2wJCT0gYm54MnhfZ2V0X3dvbCwKIAkuc2V0X3dvbAkJPSBibngyeF9zZXRfd29sLAogCS5nZXRfbXNnbGV2ZWwJCT0gYm54MnhfZ2V0X21zZ2xldmVsLApAQCAtOTM2MywyNSArMTAxMTksNDEgQEAKIAlibngyeF91cGRhdGVfZnBzYl9pZHgoZnApOwogCiAJaWYgKGJueDJ4X2hhc190eF93b3JrKGZwKSkKLQkJYm54MnhfdHhfaW50KGZwLCBidWRnZXQpOworCQlibngyeF90eF9pbnQoZnApOwogCi0JaWYgKGJueDJ4X2hhc19yeF93b3JrKGZwKSkKKwlpZiAoYm54MnhfaGFzX3J4X3dvcmsoZnApKSB7CiAJCXdvcmtfZG9uZSA9IGJueDJ4X3J4X2ludChmcCwgYnVkZ2V0KTsKLQlybWIoKTsgLyogQk5YMlhfSEFTX1dPUksoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrICovCiAKLQkvKiBtdXN0IG5vdCBjb21wbGV0ZSBpZiB3ZSBjb25zdW1lZCBmdWxsIGJ1ZGdldCAqLwotCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiAhQk5YMlhfSEFTX1dPUksoZnApKSB7CisJCS8qIG11c3Qgbm90IGNvbXBsZXRlIGlmIHdlIGNvbnN1bWVkIGZ1bGwgYnVkZ2V0ICovCisJCWlmICh3b3JrX2RvbmUgPj0gYnVkZ2V0KQorCQkJZ290byBwb2xsX2FnYWluOworCX0KIAorCS8qIEJOWDJYX0hBU19XT1JLKCkgcmVhZHMgdGhlIHN0YXR1cyBibG9jaywgdGh1cyB3ZSBuZWVkIHRvCisJICogZW5zdXJlIHRoYXQgc3RhdHVzIGJsb2NrIGluZGljZXMgaGF2ZSBiZWVuIGFjdHVhbGx5IHJlYWQKKwkgKiAoYm54MnhfdXBkYXRlX2Zwc2JfaWR4KSBwcmlvciB0byB0aGlzIGNoZWNrIChCTlgyWF9IQVNfV09SSykKKwkgKiBzbyB0aGF0IHdlIHdvbid0IHdyaXRlIHRoZSAibmV3ZXIiIHZhbHVlIG9mIHRoZSBzdGF0dXMgYmxvY2sgdG8gSUdVCisJICogKGlmIHRoZXJlIHdhcyBhIERNQSByaWdodCBhZnRlciBCTlgyWF9IQVNfV09SSyBhbmQKKwkgKiBpZiB0aGVyZSBpcyBubyBybWIsIHRoZSBtZW1vcnkgcmVhZGluZyAoYm54MnhfdXBkYXRlX2Zwc2JfaWR4KQorCSAqIG1heSBiZSBwb3N0cG9uZWQgdG8gcmlnaHQgYmVmb3JlIGJueDJ4X2Fja19zYikuIEluIHRoaXMgY2FzZQorCSAqIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW5vdGhlciBpbnRlcnJ1cHQgdW50aWwgdGhlcmUgaXMgYW5vdGhlciB1cGRhdGUKKwkgKiBvZiB0aGUgc3RhdHVzIGJsb2NrLCB3aGlsZSB0aGVyZSBpcyBzdGlsbCB1bmhhbmRsZWQgd29yay4KKwkgKi8KKwlybWIoKTsKKworCWlmICghQk5YMlhfSEFTX1dPUksoZnApKSB7CiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogcG9sbF9wYW5pYzoKICNlbmRpZgotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAotCQlibngyeF9hY2tfc2IoYnAsIEZQX1NCX0lEKGZwKSwgVVNUT1JNX0lELAorCQlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgVVNUT1JNX0lELAogCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfdV9pZHgpLCBJR1VfSU5UX05PUCwgMSk7Ci0JCWJueDJ4X2Fja19zYihicCwgRlBfU0JfSUQoZnApLCBDU1RPUk1fSUQsCisJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBDU1RPUk1fSUQsCiAJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksIElHVV9JTlRfRU5BQkxFLCAxKTsKIAl9CisKK3BvbGxfYWdhaW46CiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIApAQCAtOTQ1Nyw3ICsxMDIyOSw3IEBACiAJCXJjID0gWE1JVF9QTEFJTjsKIAogCWVsc2UgewotCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUFY2KSkgeworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewogCQkJcmMgPSBYTUlUX0NTVU1fVjY7CiAJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCQlyYyB8PSBYTUlUX0NTVU1fVENQOwpAQCAtOTQ3OSw3ICsxMDI1MSw5IEBACiB9CiAKICNpZiAoTUFYX1NLQl9GUkFHUyA+PSBNQVhfRkVUQ0hfQkQgLSAzKQotLyogY2hlY2sgaWYgcGFja2V0IHJlcXVpcmVzIGxpbmVhcml6YXRpb24gKHBhY2tldCBpcyB0b28gZnJhZ21lbnRlZCkgKi8KKy8qIGNoZWNrIGlmIHBhY2tldCByZXF1aXJlcyBsaW5lYXJpemF0aW9uIChwYWNrZXQgaXMgdG9vIGZyYWdtZW50ZWQpCisgICBubyBuZWVkIHRvIGNoZWNrIGZyYWdtZW50YXRpb24gaWYgcGFnZSBzaXplID4gOEsgKHRoZXJlIHdpbGwgYmUgbm8KKyAgIHZpb2xhdGlvbiB0byBGVyByZXN0cmljdGlvbnMpICovCiBzdGF0aWMgaW50IGJueDJ4X3BrdF9yZXFfbGluKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHUzMiB4bWl0X3R5cGUpCiB7CkBAIC05NTM4LDcgKzEwMzEyLDYgQEAKIAkJCQl3bmRfc3VtIC09CiAJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbd25kX2lkeF0uc2l6ZTsKIAkJCX0KLQogCQl9IGVsc2UgewogCQkJLyogaW4gbm9uLUxTTyB0b28gZnJhZ21lbnRlZCBwYWNrZXQgc2hvdWxkIGFsd2F5cwogCQkJICAgYmUgbGluZWFyaXplZCAqLwpAQCAtOTU2Niw2ICsxMDMzOSw3IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IHN3X3R4X2JkICp0eF9idWY7CiAJc3RydWN0IGV0aF90eF9iZCAqdHhfYmQ7CiAJc3RydWN0IGV0aF90eF9wYXJzZV9iZCAqcGJkID0gTlVMTDsKQEAgLTk1ODIsMTIgKzEwMzU2LDE0IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKICNlbmRpZgogCi0JZnBfaW5kZXggPSAoc21wX3Byb2Nlc3Nvcl9pZCgpICUgYnAtPm51bV9xdWV1ZXMpOworCWZwX2luZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGZwX2luZGV4KTsKKwogCWZwID0gJmJwLT5mcFtmcF9pbmRleF07CiAKIAlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAzKSkpIHsKLQkJYnAtPmV0aF9zdGF0cy5kcml2ZXJfeG9mZisrLAotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrLAorCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCUJOWDJYX0VSUigiQlVHISBUeCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtOTU5OCw4ICsxMDM3NCw5IEBACiAJICAgaXBfaGRyKHNrYiktPnByb3RvY29sLCBza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlLCB4bWl0X3R5cGUpOwogCiAjaWYgKE1BWF9TS0JfRlJBR1MgPj0gTUFYX0ZFVENIX0JEIC0gMykKLQkvKiBGaXJzdCwgY2hlY2sgaWYgd2UgbmVlZCB0byBsaW5lYXJpemUgdGhlIHNrYgotCSAgIChkdWUgdG8gRlcgcmVzdHJpY3Rpb25zKSAqLworCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIGxpbmVhcml6ZSB0aGUgc2tiIChkdWUgdG8gRlcKKwkgICByZXN0cmljdGlvbnMpLiBObyBuZWVkIHRvIGNoZWNrIGZyYWdtZW50YXRpb24gaWYgcGFnZSBzaXplID4gOEsKKwkgICAodGhlcmUgd2lsbCBiZSBubyB2aW9sYXRpb24gdG8gRlcgcmVzdHJpY3Rpb25zKSAqLwogCWlmIChibngyeF9wa3RfcmVxX2xpbihicCwgc2tiLCB4bWl0X3R5cGUpKSB7CiAJCS8qIFN0YXRpc3RpY3Mgb2YgbGluZWFyaXphdGlvbiAqLwogCQlicC0+bGluX2NudCsrOwpAQCAtOTY2NCw5ICsxMDQ0MSw5IEBACiAJCWhsZW4gPSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEgKyB2bGFuX29mZikgLyAyOwogCiAJCS8qIGZvciBub3cgTlMgZmxhZyBpcyBub3QgdXNlZCBpbiBMaW51eCAqLwotCQlwYmQtPmdsb2JhbF9kYXRhID0gKGhsZW4gfAotCQkJCSAgICAoKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfODAyMVEpKSA8PAotCQkJCSAgICAgRVRIX1RYX1BBUlNFX0JEX0xMQ19TTkFQX0VOX1NISUZUKSk7CisJCXBiZC0+Z2xvYmFsX2RhdGEgPQorCQkJKGhsZW4gfCAoKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKSA8PAorCQkJCSBFVEhfVFhfUEFSU0VfQkRfTExDX1NOQVBfRU5fU0hJRlQpKTsKIAogCQlwYmQtPmlwX2hsZW4gPSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtCiAJCQkJc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpIC8gMjsKQEAgLTk4MTAsMTIgKzEwNTg3LDEwIEBACiAJICovCiAJd21iKCk7CiAKLQlmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kID0KLQkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCkgKyBuYmQpOworCWxlMTZfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCwgbmJkKTsKIAltYigpOyAvKiBGVyByZXN0cmljdGlvbjogbXVzdCBub3QgcmVvcmRlciB3cml0aW5nIG5iZCBhbmQgcGFja2V0cyAqLwotCWZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kID0KLQkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QpICsgMSk7Ci0JRE9PUkJFTEwoYnAsIEZQX0lEWChmcCksIDApOworCWxlMzJfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QsIDEpOworCURPT1JCRUxMKGJwLCBmcC0+aW5kZXgsIDApOwogCiAJbW1pb3diKCk7CiAKQEAgLTk4MjYsMTAgKzEwNjAxLDEwIEBACiAJCS8qIFdlIHdhbnQgYm54MnhfdHhfaW50IHRvICJzZWUiIHRoZSB1cGRhdGVkIHR4X2JkX3Byb2QKIAkJICAgaWYgd2UgcHV0IFR4IGludG8gWE9GRiBzdGF0ZS4gKi8KIAkJc21wX21iKCk7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJYnAtPmV0aF9zdGF0cy5kcml2ZXJfeG9mZisrOworCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CisJCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrOwogCQlpZiAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCX0KIAlmcC0+dHhfcGt0Kys7CiAKQEAgLTk4NjIsNyArMTA2MzcsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGZyb20gc2V0X211bHRpY2FzdCAqLworLyogY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBmcm9tIGRldl9tY2FzdC5jICovCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTkyMSw3ICsxMDY5Niw3IEBACiAJCQkJICAgY29uZmlnLT5jb25maWdfdGFibGVbaV0uCiAJCQkJCQljYW1fZW50cnkubHNiX21hY19hZGRyKTsKIAkJCX0KLQkJCW9sZCA9IGNvbmZpZy0+aGRyLmxlbmd0aF82YjsKKwkJCW9sZCA9IGNvbmZpZy0+aGRyLmxlbmd0aDsKIAkJCWlmIChvbGQgPiBpKSB7CiAJCQkJZm9yICg7IGkgPCBvbGQ7IGkrKykgewogCQkJCQlpZiAoQ0FNX0lTX0lOVkFMSUQoY29uZmlnLT4KQEAgLTk5NDAsOSArMTA3MTUsOSBAQAogCQkJZWxzZQogCQkJCW9mZnNldCA9IEJOWDJYX01BWF9NVUxUSUNBU1QqKDEgKyBwb3J0KTsKIAotCQkJY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gaTsKKwkJCWNvbmZpZy0+aGRyLmxlbmd0aCA9IGk7CiAJCQljb25maWctPmhkci5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJCQljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCQkJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCQkJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKQEAgLTEwMTI4LDcgKzEwOTAzLDcgQEAKIAkubmRvX29wZW4JCT0gYm54Mnhfb3BlbiwKIAkubmRvX3N0b3AJCT0gYm54MnhfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGJueDJ4X3N0YXJ0X3htaXQsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBibngyeF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGJueDJ4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYm54MnhfY2hhbmdlX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwJCT0gYm54MnhfaW9jdGwsCkBAIC0xMDE0Miw3ICsxMDkxNyw2IEBACiAjZW5kaWYKIH07CiAKLQogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMDMyMSw3ICsxMTA5NSw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CiAKIAkvKiBkZXYgemVyb2VkIGluIGluaXRfZXRoZXJkZXYgKi8KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmJwKSk7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpicCksIE1BWF9DT05URVhUKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTAzNDgsMTQgKzExMTIyLDE0IEBACiAJCWdvdG8gaW5pdF9vbmVfZXhpdDsKIAl9CiAKLQlicC0+Y29tbW9uLm5hbWUgPSBib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWU7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzICglYyVkKSBQQ0ktRSB4JWQgJXMgZm91bmQgYXQgbWVtICVseCwiCi0JICAgICAgICIgSVJRICVkLCAiLCBkZXYtPm5hbWUsIGJwLT5jb21tb24ubmFtZSwKKwkgICAgICAgIiBJUlEgJWQsICIsIGRldi0+bmFtZSwgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAogCSAgICAgICAoQ0hJUF9SRVYoYnApID4+IDEyKSArICdBJywgKENISVBfTUVUQUwoYnApID4+IDQpLAogCSAgICAgICBibngyeF9nZXRfcGNpZV93aWR0aChicCksCiAJICAgICAgIChibngyeF9nZXRfcGNpZV9zcGVlZChicCkgPT0gMikgPyAiNUdIeiAoR2VuMikiIDogIjIuNUdIeiIsCiAJICAgICAgIGRldi0+YmFzZV9hZGRyLCBicC0+cGRldi0+aXJxKTsKIAlwcmludGsoS0VSTl9DT05UICJub2RlIGFkZHIgJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKKwogCXJldHVybiAwOwogCiBpbml0X29uZV9leGl0OgpAQCAtMTA0ODcsMTUgKzExMjYxLDE1IEBACiAJCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9CiAJCQkJCQlibngyeF9zcChicCwgbWNhc3RfY29uZmlnKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoXzZiOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGg7IGkrKykKIAkJCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldKTsKIAl9CiAKIAkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCiAJYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIAlibngyeF9mcmVlX21lbShicCk7CiAKQEAgLTEwNjIyLDggKzExMzk2LDggQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgYm54MnhfZXJyX2hhbmRsZXIgPSB7CiAJLmVycm9yX2RldGVjdGVkID0gYm54MnhfaW9fZXJyb3JfZGV0ZWN0ZWQsCi0JLnNsb3RfcmVzZXQgPSBibngyeF9pb19zbG90X3Jlc2V0LAotCS5yZXN1bWUgPSBibngyeF9pb19yZXN1bWUsCisJLnNsb3RfcmVzZXQgICAgID0gYm54MnhfaW9fc2xvdF9yZXNldCwKKwkucmVzdW1lICAgICAgICAgPSBibngyeF9pb19yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm54MnhfcGNpX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKaW5kZXggZDA4NGU1Zi4uYjhjZTZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKQEAgLTMwLDggKzMwLDIwIEBACiAgICBhZGRyZXNzIEJSQjFfSU5EX0ZSRUVfTElTVF9QUlNfQ1JEVCsxIGluaXRpYWxpemUgZnJlZSB0YWlsLiBBdCBhZGRyZXNzCiAgICBCUkIxX0lORF9GUkVFX0xJU1RfUFJTX0NSRFQrMiBpbml0aWFsaXplIHBhcnNlciBpbml0aWFsIGNyZWRpdC4gKi8KICNkZWZpbmUgQlJCMV9SRUdfRlJFRV9MSVNUX1BSU19DUkRUCQkJCSAweDYwMjAwCisvKiBbUlcgMTBdIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYWJvdmUgd2hpY2ggdGhlIEhpZ2hfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBkZS1hc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfSElHSF9MTEZDX0hJR0hfVEhSRVNIT0xEXzAJCQkgMHg2MDE0YworLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGJlbG93IHdoaWNoIHRoZSBIaWdoX2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0hJR0hfTExGQ19MT1dfVEhSRVNIT0xEXzAJCQkgMHg2MDEzYwogLyogW1JXIDIzXSBMTCBSQU0gZGF0YS4gKi8KICNkZWZpbmUgQlJCMV9SRUdfTExfUkFNIAkJCQkJIDB4NjEwMDAKKy8qIFtSVyAxMF0gVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBhYm92ZSB3aGljaCB0aGUgTG93X2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgZGUtYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0xPV19MTEZDX0hJR0hfVEhSRVNIT0xEXzAJCQkgMHg2MDE2YworLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGJlbG93IHdoaWNoIHRoZSBMb3dfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBhc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfTE9XX0xMRkNfTE9XX1RIUkVTSE9MRF8wCQkJIDB4NjAxNWMKIC8qIFtSIDI0XSBUaGUgbnVtYmVyIG9mIGZ1bGwgYmxvY2tzLiAqLwogI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9CTE9DS1MJCQkJIDB4NjAwOTAKIC8qIFtTVCAzMl0gVGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCB0aGUgd3JpdGVfZnVsbCBzaWduYWwgdG93YXJkcyBNQUMgIzAKQEAgLTEyNSw2ICsxMzcsMTAgQEAKICAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CiAgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCiAjZGVmaW5lIENDTV9SRUdfQ1FNX1BfV0VJR0hUCQkJCQkgMHhkMDBiOAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBDQ01fUkVHX0NRTV9TX1dFSUdIVAkJCQkJIDB4ZDAwYmMKIC8qIFtSVyAxXSBJbnB1dCBTRE0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcyBkaXNyZWdhcmRlZDsKICAgIGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUgdHJlYXRlZCBhcyB1c3VhbDsKICAgIGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0xMzIsNiArMTQ4LDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU0RNIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgQ0NNX1JFR19DU0RNX0xFTkdUSF9NSVMgCQkJCSAweGQwMTcwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU0RNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBDQ01fUkVHX0NTRE1fV0VJR0hUCQkJCQkgMHhkMDBiNAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIGZvciBRTSBmb3JtYXR0aW5nIGluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gdGhlIFFNCiAgICBpbnB1dHMuICovCiAjZGVmaW5lIENDTV9SRUdfRVJSX0NDTV9IRFIJCQkJCSAweGQwMDk0CkBAIC0yMTEsNiArMjMxLDExIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU1RPUk0gaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBDQ01fUkVHX1NUT1JNX0xFTkdUSF9NSVMJCQkJIDB4ZDAxNmMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBTVE9STSBpbnB1dCBpbiB0aGUgV1JSIChXZWlnaHRlZCBSb3VuZCByb2JpbikKKyAgIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDEobGVhc3QgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDIgKG1vcmUgcHJpb3JpdGlzZWQpOworICAgdGMuICovCisjZGVmaW5lIENDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHhkMDA5YwogLyogW1JXIDFdIElucHV0IHRzZW0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0zMjMsNyArMzQ4LDExIEBACiAgICBzZXQgb25lIG9mIHRoZXNlIGJpdHMuIHRoZSBiaXQgZGVzY3JpcHRpb24gY2FuIGJlIGZvdW5kIGluIENGQwogICAgc3BlY2lmaWNhdGlvbnMgKi8KICNkZWZpbmUgQ0ZDX1JFR19FUlJPUl9WRUNUT1IJCQkJCSAweDEwNDAzYworLyogW1dCIDkzXSBMQ0lEIGluZm8gcmFtIGFjY2VzcyAqLworI2RlZmluZSBDRkNfUkVHX0lORk9fUkFNCQkJCQkgMHgxMDUwMDAKKyNkZWZpbmUgQ0ZDX1JFR19JTkZPX1JBTV9TSVpFCQkJCQkgMTAyNAogI2RlZmluZSBDRkNfUkVHX0lOSVRfUkVHCQkJCQkgMHgxMDQwNGMKKyNkZWZpbmUgQ0ZDX1JFR19JTlRFUkZBQ0VTCQkJCQkgMHgxMDQwNTgKIC8qIFtSVyAyNF0ge3dlaWdodF9sb2FkX2NsaWVudDdbMjowXSB0byB3ZWlnaHRfbG9hZF9jbGllbnQwWzI6MF19LiB0aGlzCiAgICBmaWVsZCBhbGxvd3MgY2hhbmdpbmcgdGhlIHByaW9yaXRpZXMgb2YgdGhlIHdlaWdodGVkLXJvdW5kLXJvYmluIGFyYml0ZXIKICAgIHdoaWNoIHNlbGVjdHMgd2hpY2ggQ0ZDIGxvYWQgY2xpZW50IHNob3VsZCBiZSBzZXJ2ZWQgbmV4dCAqLwpAQCAtMzM3LDggKzM2Niw2IEBACiAjZGVmaW5lIENGQ19SRUdfTlVNX0xDSURTX0FMTE9DIAkJCQkgMHgxMDQwMjAKIC8qIFtSIDldIE51bWJlciBvZiBBcnJpdmluZyBMQ0lEcyBpbiBMaW5rIExpc3QgQmxvY2sgKi8KICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfQVJSSVZJTkcJCQkJIDB4MTA0MDA0Ci0vKiBbUiA5XSBOdW1iZXIgb2YgSW5zaWRlIExDSURzIGluIExpbmsgTGlzdCBCbG9jayAqLwotI2RlZmluZSBDRkNfUkVHX05VTV9MQ0lEU19JTlNJREUJCQkJIDB4MTA0MDA4CiAvKiBbUiA5XSBOdW1iZXIgb2YgTGVhdmluZyBMQ0lEcyBpbiBMaW5rIExpc3QgQmxvY2sgKi8KICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfTEVBVklORwkJCQkgMHgxMDQwMTgKIC8qIFtSVyA4XSBUaGUgZXZlbnQgaWQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KQEAgLTczMCw2ICs3NTcsNyBAQAogI2RlZmluZSBET1JRX1JFR19TSFJUX0NNSEVBRAkJCQkJIDB4MTcwMDU0CiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wCQkJCSAoMHgxPDw0KQogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMAkJCQkgKDB4MTw8MykKKyNkZWZpbmUgSENfQ09ORklHXzBfUkVHX01TSV9BVFROX0VOXzAJCQkJICgweDE8PDcpCiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMAkJCSAoMHgxPDwyKQogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIAkJCSAoMHgxPDwxKQogI2RlZmluZSBIQ19SRUdfQUdHX0lOVF8wCQkJCQkgMHgxMDgwNTAKQEAgLTE0MTAsNiArMTQzOCwyOSBAQAogICAgVGhpcyBpcyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBwaW47IG5vdCB0aGUgZHJpdmUgdmFsdWUuIFdyaXRpbmcgdGhlc2UKICAgIGJpdHMgd2lsbCBoYXZlIG5vdCBlZmZlY3QuICovCiAjZGVmaW5lIE1JU0NfUkVHX0dQSU8JCQkJCQkgMHhhNDkwCisvKiBbUlcgOF0gVGhlc2UgYml0cyBlbmFibGUgdGhlIEdQSU9fSU5UcyB0byBzaWduYWxzIGV2ZW50IHRvIHRoZQorICAgSUdVL01DUC5hY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBtYXA6IFswXSBwMF9ncGlvXzA7IFsxXSBwMF9ncGlvXzE7IFsyXQorICAgcDBfZ3Bpb18yOyBbM10gcDBfZ3Bpb18zOyBbNF0gcDFfZ3Bpb18wOyBbNV0gcDFfZ3Bpb18xOyBbNl0gcDFfZ3Bpb18yOworICAgWzddIHAxX2dwaW9fMzsgKi8KKyNkZWZpbmUgTUlTQ19SRUdfR1BJT19FVkVOVF9FTgkJCQkJIDB4YTJiYworLyogW1JXIDMyXSBHUElPIElOVC4gWzMxLTI4XSBPTERfQ0xSIHBvcnQxOyBbMjctMjRdIE9MRF9DTFIgcG9ydDA7IFdyaXRpbmcgYQorICAgJzEnIHRvIHRoZXNlIGJpdCBjbGVhcnMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSAjT0xEX1ZBTFVFIHJlZ2lzdGVyLgorICAgVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuIGludGVycnVwdCBvbiB0aGUgZmFsbGluZyBlZGdlIG9mIGNvcnJlc3BvbmRpbmcKKyAgIEdQSU8gaW5wdXQgKHJlc2V0IHZhbHVlIDApLiBbMjMtMTZdIE9MRF9TRVQgWzIzLTE2XSBwb3J0MTsgT0xEX1NFVCBwb3J0MDsKKyAgIFdyaXRpbmcgYSAnMScgdG8gdGhlc2UgYml0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSAjT0xEX1ZBTFVFCisgICByZWdpc3Rlci4gVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuIGludGVycnVwdCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YKKyAgIGNvcnJlc3BvbmRpbmcgU1BJTyBpbnB1dCAocmVzZXQgdmFsdWUgMCkuIFsxNS0xMl0gT0xEX1ZBTFVFIFsxMS04XSBwb3J0MTsKKyAgIE9MRF9WQUxVRSBwb3J0MDsgUk87IFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgR1BJTyBpbnB1dAorICAgdmFsdWUuIFdoZW4gdGhlIH5JTlRfU1RBVEUgYml0IGlzIHNldDsgdGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBPTEQgdmFsdWUKKyAgIG9mIHRoZSBwaW4gc3VjaCB0aGF0IGlmIH5JTlRfU1RBVEUgaXMgc2V0IGFuZCB0aGlzIGJpdCBpcyAnMCc7IHRoZW4gdGhlCisgICBpbnRlcnJ1cHQgaXMgZHVlIHRvIGEgbG93IHRvIGhpZ2ggZWRnZS4gSWYgfklOVF9TVEFURSBpcyBzZXQgYW5kIHRoaXMgYml0CisgICBpcyAnMSc7IHRoZW4gdGhlIGludGVycnVwdCBpcyBkdWUgdG8gYSBoaWdoIHRvIGxvdyBlZGdlIChyZXNldCB2YWx1ZSAwKS4KKyAgIFs3LTRdIElOVF9TVEFURSBwb3J0MTsgWzMtMF0gSU5UX1NUQVRFIFJPIHBvcnQwOyBUaGVzZSBiaXRzIGluZGljYXRlIHRoZQorICAgY3VycmVudCBHUElPIGludGVycnVwdCBzdGF0ZSBmb3IgZWFjaCBHUElPIHBpbi4gVGhpcyBiaXQgaXMgY2xlYXJlZCB3aGVuCisgICB0aGUgYXBwcm9wcmlhdGUgI09MRF9TRVQgb3IgI09MRF9DTFIgY29tbWFuZCBiaXQgaXMgd3JpdHRlbi4gVGhpcyBiaXQgaXMKKyAgIHNldCB3aGVuIHRoZSBHUElPIGlucHV0IGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZhbHVlIGluICNPTERfVkFMVUUKKyAgIChyZXNldCB2YWx1ZSAwKS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfR1BJT19JTlQJCQkJCSAweGE0OTQKIC8qIFtSIDI4XSB0aGlzIGZpZWxkIGhvbGQgdGhlIGxhc3QgaW5mb3JtYXRpb24gdGhhdCBjYXVzZWQgcmVzZXJ2ZWQKICAgIGF0dGVudGlvbi4gYml0cyBbMTk6MF0gLSBhZGRyZXNzOyBbMjI6MjBdIGZ1bmN0aW9uOyBbMjNdIHJlc2VydmVkOwogICAgWzI3OjI0XSB0aGUgbWFzdGVyIHRoYXQgY2F1c2VkIHRoZSBhdHRlbnRpb24gLSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZwpAQCAtMTU1NCw2ICsxNjA1LDE0IEBACiAgICBjb21tYW5kIGJpdCBpcyB3cml0dGVuLiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgU1BJTyBpbnB1dCBkb2VzIG5vdAogICAgbWF0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgaW4gI09MRF9WQUxVRSAocmVzZXQgdmFsdWUgMCkuICovCiAjZGVmaW5lIE1JU0NfUkVHX1NQSU9fSU5UCQkJCQkgMHhhNTAwCisvKiBbUlcgMzJdIHJlbG9hZCB2YWx1ZSBmb3IgY291bnRlciA0IGlmIHJlbG9hZDsgdGhlIHZhbHVlIHdpbGwgYmUgcmVsb2FkIGlmCisgICB0aGUgY291bnRlciByZWFjaGVkIHplcm8gYW5kIHRoZSByZWxvYWQgYml0CisgICAofm1pc2NfcmVnaXN0ZXJzX3N3X3RpbWVyX2NmZ180LnN3X3RpbWVyX2NmZ180WzFdICkgaXMgc2V0ICovCisjZGVmaW5lIE1JU0NfUkVHX1NXX1RJTUVSX1JFTE9BRF9WQUxfNAkJCQkgMHhhMmZjCisvKiBbUlcgMzJdIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBmb3Igc3cgdGltZXJzMS04LiB0aGVyZSBhcmUgOCBhZGRyZXNzZXMKKyAgIGluIHRoaXMgcmVnaXN0ZXIuIGFkZHJlcyAwIC0gdGltZXIgMTsgYWRkcmVzcyAtIHRpbWVyIDLvv71hZGRyZXNzIDcgLQorICAgdGltZXIgOCAqLworI2RlZmluZSBNSVNDX1JFR19TV19USU1FUl9WQUwJCQkJCSAweGE1YzAKIC8qIFtSVyAxXSBTZXQgYnkgdGhlIE1DUCB0byByZW1lbWJlciBpZiBvbmUgb3IgbW9yZSBvZiB0aGUgZHJpdmVycyBpcy9hcmUKICAgIGxvYWRlZDsgMC1wcmVwYXJlOyAtdW5wcmVwYXJlICovCiAjZGVmaW5lIE1JU0NfUkVHX1VOUFJFUEFSRUQJCQkJCSAweGE0MjQKQEAgLTE2NjAsNiArMTcxOSwxOSBAQAogLyogW1JXIDRdIGxlZCBtb2RlIGZvciBwb3J0MDogMCBNQUM7IDEtMyBQSFkxOyA0IE1BQzI7IDUtNyBQSFk0OyA4LU1BQzM7CiAgICA5LTExUEhZNzsgMTIgTUFDNDsgMTMtMTUgUEhZMTA7ICovCiAjZGVmaW5lIE5JR19SRUdfTEVEX01PREVfUDAJCQkJCSAweDEwMmYwCisvKiBbUlcgM10gZm9yIHBvcnQwIGVuYWJsZSBmb3IgbGxmYyBwcHAgYW5kIHBhdXNlLiBiMCAtIGJyYjEgZW5hYmxlOyBiMS0KKyAgIHRzZG0gZW5hYmxlOyBiMi0gdXNkbSBlbmFibGUgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0VHUkVTU19TUkNfRU5BQkxFXzAJCQkgMHgxNjA3MAorLyogW1JXIDFdIFNBRkMgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCisgICB+cHBwX2VuYWJsZS5wcHBfZW5hYmxlID0gMCBhbmQgcGF1c2VfZW5hYmxlLnBhdXNlX2VuYWJsZSA9MCBmb3IgdGhlIHNhbWUKKyAgIHBvcnQgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0VOQUJMRV8wCQkJCQkgMHgxNjIwOAorLyogW1JXIDE2XSBjbGFzc2VzIGFyZSBoaWdoLXByaW9yaXR5IGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfSElHSF9QUklPUklUWV9DTEFTU0VTXzAJCQkgMHgxNjA1OAorLyogW1JXIDE2XSBjbGFzc2VzIGFyZSBsb3ctcHJpb3JpdHkgZm9yIHBvcnQwICovCisjZGVmaW5lIE5JR19SRUdfTExGQ19MT1dfUFJJT1JJVFlfQ0xBU1NFU18wCQkJIDB4MTYwNjAKKy8qIFtSVyAxXSBPdXRwdXQgZW5hYmxlIG9mIG1lc3NhZ2UgdG8gTExGQyBCTUFDIElGIGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfT1VUX0VOXzAJCQkJCSAweDE2MGM4CiAjZGVmaW5lIE5JR19SRUdfTExIMF9BQ1BJX1BBVF8wX0NSQwkJCQkgMHgxMDE1YwogI2RlZmluZSBOSUdfUkVHX0xMSDBfQUNQSV9QQVRfNl9MRU4JCQkJIDB4MTAxNTQKICNkZWZpbmUgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0sJCQkJIDB4MTAyNDQKQEAgLTE3MzAsNiArMTgwMiwxMCBAQAogI2RlZmluZSBOSUdfUkVHX05JR19JTlRfU1RTXzEJCQkJCSAweDEwM2MwCiAvKiBbUiAzMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgTklHX1JFR19OSUdfUFJUWV9TVFMJCQkJCSAweDEwM2QwCisvKiBbUlcgMV0gUGF1c2UgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCisgICB+c2FmY19lbmFibGUuc2FmY19lbmFibGUgPSAwIGFuZCBwcHBfZW5hYmxlLnBwcF9lbmFibGUgPTAgZm9yIHRoZSBzYW1lCisgICBwb3J0ICovCisjZGVmaW5lIE5JR19SRUdfUEFVU0VfRU5BQkxFXzAJCQkJCSAweDE2MGMwCiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBSWCBQQkYgTFAgSUYgKi8KICNkZWZpbmUgTklHX1JFR19QQkZfTEJfSU5fRU4JCQkJCSAweDEwMGI0CiAvKiBbUlcgMV0gVmFsdWUgb2YgdGhpcyByZWdpc3RlciB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIHBvcnQgc3dhcCB3aGVuCkBAIC0xNzM5LDYgKzE4MTUsMTAgQEAKICNkZWZpbmUgTklHX1JFR19QUlNfRU9QX09VVF9FTgkJCQkJIDB4MTAxMDQKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFJYIHBhcnNlciByZXF1ZXN0IElGICovCiAjZGVmaW5lIE5JR19SRUdfUFJTX1JFUV9JTl9FTgkJCQkJIDB4MTAwYjgKKy8qIFtSVyA1XSBjb250cm9sIHRvIHNlcmRlcyAtIENMNDUgREVWQUQgKi8KKyNkZWZpbmUgTklHX1JFR19TRVJERVMwX0NUUkxfTURfREVWQUQJCQkJIDB4MTAzNzAKKy8qIFtSVyAxXSBjb250cm9sIHRvIHNlcmRlczsgMCAtIGNsYXVzZSA0NTsgMSAtIGNsYXVzZSAyMiAqLworI2RlZmluZSBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVAkJCQkgMHgxMDM2YwogLyogW1JXIDVdIGNvbnRyb2wgdG8gc2VyZGVzIC0gQ0wyMiBQSFlfQUREIGFuZCBDTDQ1IFBSVEFEICovCiAjZGVmaW5lIE5JR19SRUdfU0VSREVTMF9DVFJMX1BIWV9BRERSCQkJCSAweDEwMzc0CiAvKiBbUiAxXSBzdGF0dXMgZnJvbSBzZXJkZXMwIHRoYXQgaW5wdXRzIHRvIGludGVycnVwdCBsb2dpYyBvZiBsaW5rIHN0YXR1cyAqLwpAQCAtMTg4NSw2ICsxOTY1LDcgQEAKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzIJCQkgMHg0MDBlNAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMwkJCSAweDQwMGU4CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80CQkJIDB4NDAwZWMKKyNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzUJCQkgMHg0MDBmMAogLyogW1JXIDMyXSBUaGUgQ00gaGVhZGVyIGZvciBmbHVzaCBtZXNzYWdlIHdoZXJlICdsb2FkIGV4aXN0ZWQnIGJpdCBpbiBDRkMKICAgIGxvYWQgcmVzcG9uc2UgaXMgc2V0IGFuZCBwYWNrZXQgdHlwZSBpcyAwLiBVc2VkIGluIHBhY2tldCBzdGFydCBtZXNzYWdlCiAgICB0byBUQ00uICovCkBAIC0xODkzLDYgKzE5NzQsNyBAQAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMgkJCSAweDQwMGM0CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV8zCQkJIDB4NDAwYzgKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzQJCQkgMHg0MDBjYworI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNQkJCSAweDQwMGQwCiAvKiBbUlcgMzJdIFRoZSBDTSBoZWFkZXIgZm9yIGEgbWF0Y2ggYW5kIHBhY2tldCB0eXBlIDEgZm9yIGxvb3BiYWNrIHBvcnQuCiAgICBVc2VkIGluIHBhY2tldCBzdGFydCBtZXNzYWdlIHRvIFRDTS4gKi8KICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfTE9PUEJBQ0tfVFlQRV8xCQkJCSAweDQwMDljCkBAIC0yMDM1LDYgKzIxMTcsMTkgQEAKICNkZWZpbmUgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzUgCQkJCSAweDEyMDRlOAogI2RlZmluZSBQWFAyX1JFR19QR0xfSU5UX1hTRE1fNiAJCQkJIDB4MTIwNGVjCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9JTlRfWFNETV83IAkJCQkgMHgxMjA0ZjAKKy8qIFtSVyAzXSB0aGlzIGZpZWxkIGFsbG93cyBvbmUgZnVuY3Rpb24gdG8gcHJldGVuZCBiZWluZyBhbm90aGVyIGZ1bmN0aW9uCisgICB3aGVuIGFjY2Vzc2luZyBhbnkgQkFSIG1hcHBlZCByZXNvdXJjZSB3aXRoaW4gdGhlIGRldmljZS4gdGhlIHZhbHVlIG9mCisgICB0aGUgZmllbGQgaXMgdGhlIG51bWJlciBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGFjY2Vzc2VkCisgICBlZmZlY3RpdmVseS4gYWZ0ZXIgc29mdHdhcmUgd3JpdGUgdG8gdGhpcyBiaXQgaXQgbXVzdCByZWFkIGl0IGluIG9yZGVyIHRvCisgICBrbm93IHRoYXQgdGhlIG5ldyB2YWx1ZSBpcyB1cGRhdGVkICovCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjAJCQkJIDB4MTIwNjc0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjEJCQkJIDB4MTIwNjc4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjIJCQkJIDB4MTIwNjdjCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjMJCQkJIDB4MTIwNjgwCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjQJCQkJIDB4MTIwNjg0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjUJCQkJIDB4MTIwNjg4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjYJCQkJIDB4MTIwNjhjCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjcJCQkJIDB4MTIwNjkwCiAvKiBbUiAxXSB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHJlYWQgcmVxdWVzdCB3YXMgYmxvY2tlZCBiZWNhdXNlIG9mCiAgICBidXNfbWFzdGVyX2VuIHdhcyBkZWFzc2VydGVkICovCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9SRUFEX0JMT0NLRUQJCQkJIDB4MTIwNTY4CkBAIC0yNDk4LDYgKzI1OTMsMTEgQEAKICAgIGNvbnNpZGVyZWQgemVybyBzbyBwcmFjdGljYWxseSB0aGVyZSBhcmUgb25seSAyMCBiaXRzIGluIHRoaXMgcmVnaXN0ZXI7CiAgICBxdWV1ZXMgNjMtMCAqLwogI2RlZmluZSBRTV9SRUdfQkFTRUFERFIgCQkJCQkgMHgxNjg5MDAKKy8qIFtSVyAzMl0gVGhlIGJhc2UgbG9naWNhbCBhZGRyZXNzIChpbiBieXRlcykgb2YgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gVGhlCisgICBpbmRleCBJIHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlci4gVGhlIDEyIGxzYnMgYXJlIGlnbm9yZSBhbmQKKyAgIGNvbnNpZGVyZWQgemVybyBzbyBwcmFjdGljYWxseSB0aGVyZSBhcmUgb25seSAyMCBiaXRzIGluIHRoaXMgcmVnaXN0ZXI7CisgICBxdWV1ZXMgMTI3LTY0ICovCisjZGVmaW5lIFFNX1JFR19CQVNFQUREUl9FWFRfQQkJCQkJIDB4MTZlMTAwCiAvKiBbUlcgMTZdIFRoZSBieXRlIGNyZWRpdCBjb3N0IGZvciBlYWNoIHRhc2suIFRoaXMgdmFsdWUgaXMgZm9yIGJvdGggcG9ydHMgKi8KICNkZWZpbmUgUU1fUkVHX0JZVEVDUkRDT1NUCQkJCQkgMHgxNjgyMzQKIC8qIFtSVyAxNl0gVGhlIGluaXRpYWwgYnl0ZSBjcmVkaXQgdmFsdWUgZm9yIGJvdGggcG9ydHMuICovCkBAIC0zNDM4LDYgKzM1MzgsMTYgQEAKICNkZWZpbmUgU1JDX1JFR19LRVlSU1MwXzAJCQkJCSAweDQwNDA4CiAjZGVmaW5lIFNSQ19SRUdfS0VZUlNTMF83CQkJCQkgMHg0MDQyNAogI2RlZmluZSBTUkNfUkVHX0tFWVJTUzFfOQkJCQkJIDB4NDA0NTQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMAkJCQkJIDB4NDA0NTgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMQkJCQkJIDB4NDA0NWMKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMgkJCQkJIDB4NDA0NjAKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMwkJCQkJIDB4NDA0NjQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNAkJCQkJIDB4NDA0NjgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNQkJCQkJIDB4NDA0NmMKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNgkJCQkJIDB4NDA0NzAKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNwkJCQkJIDB4NDA0NzQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfOAkJCQkJIDB4NDA0NzgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfOQkJCQkJIDB4NDA0N2MKICNkZWZpbmUgU1JDX1JFR19MQVNURlJFRTAJCQkJCSAweDQwNTMwCiAjZGVmaW5lIFNSQ19SRUdfTlVNQkVSX0hBU0hfQklUUzAJCQkJIDB4NDA0MDAKIC8qIFtSVyAxXSBSZXNldCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lcy4gKi8KQEAgLTM0ODEsNiArMzU5MSwxMCBAQAogLyogW1JDIDFdIE1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0IHRoZSBJbiM5CiAgICBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFRDTV9SRUdfQ1NFTV9MRU5HVEhfTUlTIAkJCQkgMHg1MDE3NAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IGNzZW0gaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfQ1NFTV9XRUlHSFQJCQkJCSAweDUwMGJjCiAvKiBbUlcgOF0gVGhlIEV2ZW50IElEIGluIGNhc2Ugb2YgRXJyb3JGbGcgaXMgc2V0IGluIHRoZSBpbnB1dCBtZXNzYWdlLiAqLwogI2RlZmluZSBUQ01fUkVHX0VSUl9FVk5UX0lECQkJCQkgMHg1MDBhMAogLyogW1JXIDI4XSBUaGUgQ00gZXJyb25lb3VzIGhlYWRlciBmb3IgUU0gYW5kIFRpbWVycyBmb3JtYXR0aW5nLiAqLwpAQCAtMzUyNCw2ICszNjM4LDcgQEAKICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8yCQkJCQkgMHg1MDA1OAogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzMJCQkJCSAweDUwMDVjCiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfNAkJCQkJIDB4NTAwNjAKKyNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF81CQkJCQkgMHg1MDA2NAogLyogW1JXIDFdIElucHV0IHBiZiBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwogICAgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTM1NjMsNiArMzY3OCwxMCBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFRDTV9SRUdfU1RPUk1fVENNX0lGRU4JCQkJCSAweDUwMDEwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU1RPUk0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHg1MDBhYwogLyogW1JXIDFdIENNIC0gQ0ZDIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMgZGlzcmVnYXJkZWQ7CiAgICBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlIHRyZWF0ZWQgYXMgdXN1YWw7CiAgICBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtMzU5OCwxMCArMzcxNywyMiBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFRDTV9SRUdfVE1fVENNX0lGRU4JCQkJCSAweDUwMDFjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgVGltZXJzIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1RNX1dFSUdIVAkJCQkJIDB4NTAwZDAKIC8qIFtSVyA2XSBRTSBvdXRwdXQgaW5pdGlhbCBjcmVkaXQuIE1heCBjcmVkaXQgYXZhaWxhYmxlIC0gMzIuV3JpdGUgd3JpdGVzCiAgICB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY3JlZGl0CiAgICBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDMyIGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBUQ01fUkVHX1RRTV9JTklUX0NSRAkJCQkJIDB4NTAyMWMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBRTSAocHJpbWFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVFFNX1BfV0VJR0hUCQkJCQkgMHg1MDBjOAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1RRTV9TX1dFSUdIVAkJCQkJIDB4NTAwY2MKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAocHJpbWFyeSkuICovCiAjZGVmaW5lIFRDTV9SRUdfVFFNX1RDTV9IRFJfUAkJCQkJIDB4NTAwOTAKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAoc2Vjb25kYXJ5KS4gKi8KQEAgLTM2MjgsNiArMzc1OSwxMCBAQAogLyogW1JDIDFdIE1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0IHRoZSBJbiM4CiAgICBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFRDTV9SRUdfVVNFTV9MRU5HVEhfTUlTIAkJCQkgMHg1MDE3MAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IHVzZW0gaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVVNFTV9XRUlHSFQJCQkJCSAweDUwMGI4CiAvKiBbUlcgMjFdIEluZGlyZWN0IGFjY2VzcyB0byB0aGUgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgWFggcHJvdGVjdGlvbgogICAgbWVjaGFuaXNtLiBUaGUgZmllbGRzIGFyZTogWzU6MF0gLSBsZW5ndGggb2YgdGhlIG1lc3NhZ2U7IDE1OjZdIC0gbWVzc2FnZQogICAgcG9pbnRlcjsgMjA6MTZdIC0gbmV4dCBwb2ludGVyLiAqLwpAQCAtMzY3Nyw2ICszODEyLDcgQEAKICNkZWZpbmUgVE1fUkVHX0VOX0NMMV9JTlBVVAkJCQkJIDB4MTY0MDBjCiAvKiBbUlcgMV0gRW5hYmxlIGNsaWVudDIgaW5wdXQuICovCiAjZGVmaW5lIFRNX1JFR19FTl9DTDJfSU5QVVQJCQkJCSAweDE2NDAxMAorI2RlZmluZSBUTV9SRUdfRU5fTElORUFSMF9USU1FUiAJCQkJIDB4MTY0MDE0CiAvKiBbUlcgMV0gRW5hYmxlIHJlYWwgdGltZSBjb3VudGVyLiAqLwogI2RlZmluZSBUTV9SRUdfRU5fUkVBTF9USU1FX0NOVCAJCQkJIDB4MTY0MGQ4CiAvKiBbUlcgMV0gRW5hYmxlIGZvciBUaW1lcnMgc3RhdGUgbWFjaGluZXMuICovCkBAIC0zNjg0LDE0ICszODIwLDIyIEBACiAvKiBbUlcgNF0gTG9hZCB2YWx1ZSBmb3IgZXhwaXJhdGlvbiBjcmVkaXQgY250LiBDRkMgbWF4IG51bWJlciBvZgogICAgb3V0c3RhbmRpbmcgbG9hZCByZXF1ZXN0cyBmb3IgdGltZXJzIChleHBpcmF0aW9uKSBjb250ZXh0IGxvYWRpbmcuICovCiAjZGVmaW5lIFRNX1JFR19FWFBfQ1JEQ05UX1ZBTAkJCQkJIDB4MTY0MjM4CisvKiBbUlcgMzJdIExpbmVhcjAgbG9naWMgYWRkcmVzcy4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjBfTE9HSUNfQUREUgkJCQkJIDB4MTY0MjQwCiAvKiBbUlcgMThdIExpbmVhcjAgTWF4IGFjdGl2ZSBjaWQgKGluIGJhbmtzIG9mIDMyIGVudHJpZXMpLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9NQVhfQUNUSVZFX0NJRAkJCQkgMHgxNjQwNDgKIC8qIFtXQiA2NF0gTGluZWFyMCBwaHkgYWRkcmVzcy4gKi8KICNkZWZpbmUgVE1fUkVHX0xJTjBfUEhZX0FERFIJCQkJCSAweDE2NDI3MAorLyogW1JXIDFdIExpbmVhcjAgcGh5c2ljYWwgYWRkcmVzcyB2YWxpZC4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjBfUEhZX0FERFJfVkFMSUQJCQkJIDB4MTY0MjQ4CiAvKiBbUlcgMjRdIExpbmVhcjAgYXJyYXkgc2NhbiB0aW1lb3V0LiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9TQ0FOX1RJTUUJCQkJCSAweDE2NDAzYworLyogW1JXIDMyXSBMaW5lYXIxIGxvZ2ljIGFkZHJlc3MuICovCisjZGVmaW5lIFRNX1JFR19MSU4xX0xPR0lDX0FERFIJCQkJCSAweDE2NDI1MAogLyogW1dCIDY0XSBMaW5lYXIxIHBoeSBhZGRyZXNzLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMV9QSFlfQUREUgkJCQkJIDB4MTY0MjgwCisvKiBbUlcgMV0gTGluZWFyMSBwaHlzaWNhbCBhZGRyZXNzIHZhbGlkLiAqLworI2RlZmluZSBUTV9SRUdfTElOMV9QSFlfQUREUl9WQUxJRAkJCQkgMHgxNjQyNTgKIC8qIFtSVyA2XSBMaW5lYXIgdGltZXIgc2V0X2NsZWFyIGZpZm8gdGhyZXNob2xkLiAqLwogI2RlZmluZSBUTV9SRUdfTElOX1NFVENMUl9GSUZPX0FMRlVMTF9USFIJCQkgMHgxNjQwNzAKIC8qIFtSVyAyXSBMb2FkIHZhbHVlIGZvciBwY2kgYXJiaXRlciBjcmVkaXQgY250LiAqLwpAQCAtMzcwOCw2ICszODUyLDE3IEBACiAjZGVmaW5lIFRNX1JFR19UTV9JTlRfU1RTCQkJCQkgMHgxNjQwZjAKIC8qIFtSVyA4XSBUaGUgZXZlbnQgaWQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8wCQkJCSAweDQyMDM4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMQkJCQkgMHg0MjAzYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEwCQkJCSAweDQyMDYwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4NDIwNjQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHg0MjA2OAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzCQkJCSAweDQyMDZjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4NDIwNzAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNQkJCQkgMHg0MjA3NAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE2CQkJCSAweDQyMDc4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTcJCQkJIDB4NDIwN2MKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOAkJCQkgMHg0MjA4MAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE5CQkJCSAweDQyMDg0CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHg0MjA0MAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweDQyMDg4CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjEJCQkJIDB4NDIwOGMKQEAgLTM3MjMsNiArMzg3OCwxOSBAQAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweDQyMGIwCiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4NDIwYjQKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweDQyMDQ4CisvKiBbUlcgMV0gVGhlIFQgYml0IGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8wCQkJCQkgMHg0MjBiOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMQkJCQkJIDB4NDIwYmMKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEwCQkJCQkgMHg0MjBlMAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTEJCQkJCSAweDQyMGU0CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMgkJCQkJIDB4NDIwZTgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEzCQkJCQkgMHg0MjBlYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTQJCQkJCSAweDQyMGYwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNQkJCQkJIDB4NDIwZjQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE2CQkJCQkgMHg0MjBmOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTcJCQkJCSAweDQyMGZjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xOAkJCQkJIDB4NDIxMDAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE5CQkJCQkgMHg0MjEwNAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFRTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHg0MjAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTM5NjcsNiArNDEzNSwxMCBAQAogLyogW1JDIDFdIFNldCB3aGVuIHRoZSBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKQogICAgYXQgdGhlIGRvcnEgaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBVQ01fUkVHX0RPUlFfTEVOR1RIX01JUyAJCQkJIDB4ZTAxNjgKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBkb3JxIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX0RPUlFfV0VJR0hUCQkJCQkgMHhlMDBjMAogLyogW1JXIDhdIFRoZSBFdmVudCBJRCBpbiBjYXNlIEVycm9yRmxnIGlucHV0IG1lc3NhZ2UgYml0IGlzIHNldC4gKi8KICNkZWZpbmUgVUNNX1JFR19FUlJfRVZOVF9JRAkJCQkJIDB4ZTAwYTQKIC8qIFtSVyAyOF0gVGhlIENNIGVycm9uZW91cyBoZWFkZXIgZm9yIFFNIGFuZCBUaW1lcnMgZm9ybWF0dGluZy4gKi8KQEAgLTQwMzAsNiArNDIwMiwxMCBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFVDTV9SRUdfU1RPUk1fVUNNX0lGRU4JCQkJCSAweGUwMDEwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU1RPUk0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHhlMDBiMAogLyogW1JXIDRdIFRpbWVycyBvdXRwdXQgaW5pdGlhbCBjcmVkaXQuIE1heCBjcmVkaXQgYXZhaWxhYmxlIC0gMTUuV3JpdGUKICAgIHdyaXRlcyB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKICAgIGNyZWRpdCBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDQgYXQgc3RhcnQtdXAuICovCkBAIC00MDQwLDYgKzQyMTYsMTAgQEAKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwogI2RlZmluZSBVQ01fUkVHX1RNX1VDTV9JRkVOCQkJCQkgMHhlMDAxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFRpbWVycyBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19UTV9XRUlHSFQJCQkJCSAweGUwMGQ0CiAvKiBbUlcgMV0gSW5wdXQgdHNlbSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTQwOTIsNiArNDI3MiwxMCBAQAogICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKICAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KICNkZWZpbmUgVUNNX1JFR19VUU1fUF9XRUlHSFQJCQkJCSAweGUwMGNjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgUU0gKHNlY29uZGFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfVVFNX1NfV0VJR0hUCQkJCQkgMHhlMDBkMAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChwcmltYXJ5KS4gKi8KICNkZWZpbmUgVUNNX1JFR19VUU1fVUNNX0hEUl9QCQkJCQkgMHhlMDA5NAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChzZWNvbmRhcnkpLiAqLwpAQCAtNDEwNyw2ICs0MjkxLDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU0RNIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgVUNNX1JFR19VU0RNX0xFTkdUSF9NSVMgCQkJCSAweGUwMTU4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU0RNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1VTRE1fV0VJR0hUCQkJCQkgMHhlMDBjOAogLyogW1JXIDFdIElucHV0IHhzZW0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC00MTE0LDYgKzQzMDIsMTAgQEAKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKICAgIGF0IHRoZSB4c2VtIGludGVyZmFjZSBpc2RldGVjdGVkLiAqLwogI2RlZmluZSBVQ01fUkVHX1hTRU1fTEVOR1RIX01JUyAJCQkJIDB4ZTAxNjQKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCB4c2VtIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1hTRU1fV0VJR0hUCQkJCQkgMHhlMDBiYwogLyogW1JXIDIwXSBJbmRpcmVjdCBhY2Nlc3MgdG8gdGhlIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIFhYIHByb3RlY3Rpb24KICAgIG1lY2hhbmlzbS4gVGhlIGZpZWxkcyBhcmU6WzU6MF0gLSBtZXNzYWdlIGxlbmd0aDsgMTQ6Nl0gLSBtZXNzYWdlCiAgICBwb2ludGVyOyAxOToxNV0gLSBuZXh0IHBvaW50ZXIuICovCkBAIC00MTYzLDYgKzQzNTUsNyBAQAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweGM0MGIwCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4YzQwYjQKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweGM0MDQ4CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNQkJCQkgMHhjNDA0YwogLyogW1JXIDFdIEZvciBlYWNoIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IGluZGV4IHdoZXRoZXIgdGhlIG1vZGUgaXMgbm9ybWFsICgwKQogICAgb3IgYXV0by1tYXNrLW1vZGUgKDEpICovCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wIAkJCQkgMHhjNDFiOApAQCAtNDE3Nyw2ICs0MzcwLDggQEAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE3CQkJCSAweGM0MWZjCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xOAkJCQkgMHhjNDIwMAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTkJCQkJIDB4YzQyMDQKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzQgCQkJCSAweGM0MWM4CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV81IAkJCQkgMHhjNDFjYwogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHhjNDAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTQ0MjcsNiArNDYyMiwxMCBAQAogLyogW1JDIDFdIFNldCBhdCBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKSBhdAogICAgdGhlIGRvcnEgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBYQ01fUkVHX0RPUlFfTEVOR1RIX01JUyAJCQkJIDB4MjAyMzAKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBkb3JxIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX0RPUlFfV0VJR0hUCQkJCQkgMHgyMDBjYwogLyogW1JXIDhdIFRoZSBFdmVudCBJRCBpbiBjYXNlIHRoZSBFcnJvckZsZyBpbnB1dCBtZXNzYWdlIGJpdCBpcyBzZXQuICovCiAjZGVmaW5lIFhDTV9SRUdfRVJSX0VWTlRfSUQJCQkJCSAweDIwMGIwCiAvKiBbUlcgMjhdIFRoZSBDTSBlcnJvbmVvdXMgaGVhZGVyIGZvciBRTSBhbmQgVGltZXJzIGZvcm1hdHRpbmcuICovCkBAIC00NDY1LDYgKzQ2NjQsMTAgQEAKIC8qIFtSQyAxXSBTZXQgYXQgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikgYXQKICAgIHRoZSBuaWcwIGludGVyZmFjZS4gKi8KICNkZWZpbmUgWENNX1JFR19OSUcwX0xFTkdUSF9NSVMgCQkJCSAweDIwMjM4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgbmlnMCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19OSUcwX1dFSUdIVAkJCQkJIDB4MjAwZDQKIC8qIFtSVyAxXSBJbnB1dCBuaWcxIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtNDUyMyw2ICs0NzI2LDEwIEBACiAgICB3cml0ZXMgdGhlIGluaXRpYWwgY3JlZGl0IHZhbHVlOyByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCiAgICBjcmVkaXQgY291bnRlci4gTXVzdCBiZSBpbml0aWFsaXplZCB0byA0IGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBYQ01fUkVHX1RNX0lOSVRfQ1JECQkJCQkgMHgyMDQxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFRpbWVycyBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19UTV9XRUlHSFQJCQkJCSAweDIwMGVjCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgZm9yIFRpbWVycyBleHBpcmF0aW9uIGNvbW1hbmQuICovCiAjZGVmaW5lIFhDTV9SRUdfVE1fWENNX0hEUgkJCQkJIDB4MjAwYTgKIC8qIFtSVyAxXSBUaW1lcnMgLSBDTSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCkBAIC00NjA4LDYgKzQ4MTUsMTAgQEAKICAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CiAgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCiAjZGVmaW5lIFhDTV9SRUdfWFFNX1BfV0VJR0hUCQkJCQkgMHgyMDBlNAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX1hRTV9TX1dFSUdIVAkJCQkJIDB4MjAwZTgKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAocHJpbWFyeSkuICovCiAjZGVmaW5lIFhDTV9SRUdfWFFNX1hDTV9IRFJfUAkJCQkJIDB4MjAwYTAKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAoc2Vjb25kYXJ5KS4gKi8KQEAgLTQ2NjUsNiArNDg3Niw4IEBACiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4MTY2MDYwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4MTY2MDY0CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4MTY2MDY4CisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4MTY2MDZjCisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4MTY2MDcwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHgxNjYwNDAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHgxNjYwODgKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHgxNjYwOGMKQEAgLTQ5NjQsOSArNTE3NywxMSBAQAogI2RlZmluZSBFTUFDX1JYX01PREVfRkxPV19FTgkJCQkJICgxTDw8MikKICNkZWZpbmUgRU1BQ19SWF9NT0RFX0tFRVBfVkxBTl9UQUcJCQkJICgxTDw8MTApCiAjZGVmaW5lIEVNQUNfUlhfTU9ERV9QUk9NSVNDVU9VUwkJCQkgKDFMPDw4KQorI2RlZmluZSBFTUFDX1JYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCiAjZGVmaW5lIEVNQUNfUlhfTVRVX1NJWkVfSlVNQk9fRU5BCQkJCSAoMUw8PDMxKQogI2RlZmluZSBFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOCQkJCSAoMUw8PDMpCiAjZGVmaW5lIEVNQUNfVFhfTU9ERV9GTE9XX0VOCQkJCQkgKDFMPDw0KQorI2RlZmluZSBFTUFDX1RYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fMAkJCQkJIDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18xCQkJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPXzIJCQkJCSAyCkBAIC00OTc2LDYgKzUxOTEsMTAgQEAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MJCQkJIDI0CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSAkJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1oJCQkJIDIKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyAJCQkgMjQKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX0NMUgkJCSAwCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQJCQkgMQorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9TRVRfUE9TIAkJCSAxNgogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0xPVyAJCQkJIDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCAJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1cJCQkJIDAKQEAgLTUwMTUsMTEgKzUyMzQsMTIgQEAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19PVVRQVVRfTE9XCQkJCSAwCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fU0VUX1BPUwkJCQkgOAogI2RlZmluZSBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRQkJCQkgMzEKLSNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8JCQkJIDAKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9HUElPCQkJCQkgMQorI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX01ESU8JCQkJCSAwCiAjZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfUE9SVDBfQVRUX01BU0sgCQkJIDMKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9TUElPCQkJCQkgMgogI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX1VOREkJCQkJCSA1CisjZGVmaW5lIFBSU19GTEFHX09WRVJFVEhfSVBWNAkJCQkJIDEKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfQlJCX1BBUklUWV9FUlJPUgkJICAgICAgKDE8PDE4KQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19DQ01fSFdfSU5URVJSVVBUCQkgICAgICAoMTw8MzEpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NEVV9IV19JTlRFUlJVUFQJCSAgICAgICgxPDw5KQpAQCAtNTAzNCw2ICs1MjU0LDggQEAKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfRE1BRV9IV19JTlRFUlJVUFQJCSAgICAgICgxPDwxMSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVAkgICAgICAoMTw8MTMpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9QQVJJVFlfRVJST1IJICAgICAgKDE8PDEyKQorI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wCQkgICAgICAoMTw8NSkKKyNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMQkJICAgICAgKDE8PDkpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0lHVV9QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxMikKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19IV19JTlRFUlJVUFQJCSAgICAgICgxPDwxNSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxNCkKQEAgLTUxODgsNyArNTQxMCw3IEBACiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX0lOVF9ESVNBQkxFCQkoMTw8MTApCiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX1JFU0VSVkVEIAkJKDB4MWY8PDExKQogI2RlZmluZSBQQ0lDRkdfU1RBVFVTX09GRlNFVAkJCQkweDA2Ci0jZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRAkJCQkweDA4CisjZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRF9PRkZTRVQJCQkweDA4CiAjZGVmaW5lIFBDSUNGR19DQUNIRV9MSU5FX1NJWkUJCQkJMHgwYwogI2RlZmluZSBQQ0lDRkdfTEFURU5DWV9USU1FUgkJCQkweDBkCiAjZGVmaW5lIFBDSUNGR19CQVJfMV9MT1cJCQkJMHgxMApAQCAtNTIxNiw5ICs1NDM4LDI4IEBACiAjZGVmaW5lIFBDSUNGR19QTV9DU1JfU1RBVEUJCQkoMHgzPDwwKQogI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1BNRV9FTkFCTEUJCSgxPDw4KQogI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1BNRV9TVEFUVVMJCSgxPDwxNSkKKyNkZWZpbmUgUENJQ0ZHX01TSV9DQVBfSURfT0ZGU0VUCQkJMHg1OAorI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfRU5BQkxFCQkoMHgxPDwxNikKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01DQVAgCQkoMHg3PDwxNykKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01FTkEgCQkoMHg3PDwyMCkKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MXzY0X0JJVF9BRERSX0NBUAkoMHgxPDwyMykKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01TSV9QVk1BU0tfQ0FQQUJMRQkoMHgxPDwyNCkKICNkZWZpbmUgUENJQ0ZHX0dSQ19BRERSRVNTCQkJCTB4NzgKICNkZWZpbmUgUENJQ0ZHX0dSQ19EQVRBIAkJCQkweDgwCisjZGVmaW5lIFBDSUNGR19NU0lYX0NBUF9JRF9PRkZTRVQJCQkweGEwCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfVEFCTEVfU0laRQkJKDB4N2ZmPDwxNikKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9SRVNFUlZFRAkJKDB4Nzw8MjcpCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfRlVOQ19NQVNLCQkoMHgxPDwzMCkKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9NU0lYX0VOQUJMRSAJKDB4MTw8MzEpCisKICNkZWZpbmUgUENJQ0ZHX0RFVklDRV9DT05UUk9MCQkJCTB4YjQKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVMJCQkJMHhiNgorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19DT1JSX0VSUl9ERVQJKDE8PDApCisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX05PTl9GQVRBTF9FUlJfREVUCSgxPDwxKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19GQVRBTF9FUlJfREVUCSgxPDwyKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19VTlNVUF9SRVFfREVUCSgxPDwzKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19BVVhfUFdSX0RFVAkoMTw8NCkKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfTk9fUEVORAkJKDE8PDUpCiAjZGVmaW5lIFBDSUNGR19MSU5LX0NPTlRST0wJCQkJMHhiYwogCiAKQEAgLTUzNjMsNiArNTYwNCw0MiBAQAogI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKICNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCiAKKyNkZWZpbmUgTURJT19SRUdfQkFOS19UWDEJCQkJMHg4MDcwCisjZGVmaW5lIE1ESU9fVFgxX1RYX0RSSVZFUgkJCQkweDE3CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLCQkweGYwMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUCQkxMgorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9NQVNLIAkJMHgwZjAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX1NISUZUCQk4CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX01BU0sJCTB4MDBmMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9TSElGVAkJNAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfTUFTSwkJMHgwMDBlCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9TSElGVAkJMQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUNCVUYxVAkJCTEKKworI2RlZmluZSBNRElPX1JFR19CQU5LX1RYMgkJCQkweDgwODAKKyNkZWZpbmUgTURJT19UWDJfVFhfRFJJVkVSCQkJCTB4MTcKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0sJCTB4ZjAwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQJCTEyCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX01BU0sgCQkweDBmMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfU0hJRlQJCTgKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfTUFTSwkJMHgwMGYwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX1NISUZUCQk0CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9NQVNLCQkweDAwMGUKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX1NISUZUCQkxCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JQ0JVRjFUCQkJMQorCisjZGVmaW5lIE1ESU9fUkVHX0JBTktfVFgzCQkJCTB4ODA5MAorI2RlZmluZSBNRElPX1RYM19UWF9EUklWRVIJCQkJMHgxNworI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSwkJMHhmMDAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19TSElGVAkJMTIKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfTUFTSyAJCTB4MGYwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9TSElGVAkJOAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9NQVNLCQkweDAwZjAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfU0hJRlQJCTQKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX01BU0sJCTB4MDAwZQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCisKICNkZWZpbmUgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMAkJCTB4ODAwMAogI2RlZmluZSBNRElPX0JMT0NLMF9YR1hTX0NPTlRST0wJCQkweDEwCiAKQEAgLTU1NjYsOSArNTg0MywzMCBAQAogI2RlZmluZSBNRElPX1BNQV9SRUdfUk9NX1ZFUjIJCTB4Y2ExYQogI2RlZmluZSBNRElPX1BNQV9SRUdfRURDX0ZGRV9NQUlOCTB4Y2ExYgogI2RlZmluZSBNRElPX1BNQV9SRUdfUExMX0JBTkRXSURUSAkweGNhMWQKKyNkZWZpbmUgTURJT19QTUFfUkVHX0dFTl9DVFJMMgkJMHhjYTFlCisjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwwIAkweGNhMjMKKyNkZWZpbmUgTURJT19QTUFfUkVHX0xSTV9NT0RFCQkweGNhM2YKICNkZWZpbmUgTURJT19QTUFfUkVHX0NEUl9CQU5EV0lEVEgJMHhjYTQ2CiAjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxIAkweGNhODUKIAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMIAkweDgwMDAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSwkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUJCTB4MDAwMAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUJMHgwMDA0CisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19JTl9QUk9HUkVTUwkweDAwMDgKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0ZBSUxFRAkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQllURV9DTlQJMHg4MDAyCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX01FTV9BRERSCTB4ODAwMworI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX0JVRgkweGM4MjAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9NQVNLIDB4ZmYKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDEJCTB4Y2EwMQorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMgkJMHhjYTA1CisKKworI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFVgkJCTB4YzgwMQorI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUwkJMHhjODIwCisjZGVmaW5lIE1ESU9fUE1BX1JFR184MDczX1hBVUlfV0EJCQkweGM4NDEKKwogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9SRVNFVCAJMHhjMDAwCiAjZGVmaW5lIE1ESU9fUE1BX1JFR183MTA3X0xFRF9DTlRMCTB4YzAwNwogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9WRVIxCQkweGMwMjYKQEAgLTU1OTgsNiArNTg5NiwxMiBAQAogI2RlZmluZSBNRElPX1hTX1BMTF9TRVFVRU5DRVIJCTB4ODAwMAogI2RlZmluZSBNRElPX1hTX1NGWDcxMDFfWEdYU19URVNUMQkweGMwMGEKIAorI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwCTB4ODBiYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgxCTB4ODBjYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgyCTB4ODBkYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgzCTB4ODBlYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlhBCTB4ODBmYworCiAjZGVmaW5lIE1ESU9fQU5fREVWQUQJCQkweDcKIC8qaWVlZSovCiAjZGVmaW5lIE1ESU9fQU5fUkVHX0NUUkwJCTB4MDAwMApAQCAtNTYxOSw2ICs1OTIzLDggQEAKICNkZWZpbmUgTURJT19BTl9SRUdfQ0wzN19GQ19MRAkJMHhmZmU0CiAjZGVmaW5lIE1ESU9fQU5fUkVHX0NMMzdfRkNfTFAJCTB4ZmZlNQogCisjZGVmaW5lIE1ESU9fQU5fUkVHXzgwNzNfMl81RwkJMHg4MzI5CisKIAogI2RlZmluZSBJR1VfRlVOQ19CQVNFCQkJMHgwNDAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaAppbmRleCA4YTgzZWIyLi5hMzA2MjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIC8vIEdlbmVyYWwgZGVmaW5pdGlvbnMKICNkZWZpbmUgQk9ORF9FVEhfUF9MQUNQRFUgICAgICAgMHg4ODA5Ci0jZGVmaW5lIFBLVF9UWVBFX0xBQ1BEVSAgICAgICAgIF9fY29uc3RhbnRfaHRvbnMoQk9ORF9FVEhfUF9MQUNQRFUpCisjZGVmaW5lIFBLVF9UWVBFX0xBQ1BEVSAgICAgICAgIGNwdV90b19iZTE2KEJPTkRfRVRIX1BfTEFDUERVKQogI2RlZmluZSBBRF9USU1FUl9JTlRFUlZBTCAgICAgICAxMDAgLyptc2VjKi8KIAogI2RlZmluZSBNVUxUSUNBU1RfTEFDUERVX0FERFIgICAgezB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDJ9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggMjdmYjdmNS4uOGRjNmZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJX3VubG9ja19yeF9oYXNodGJsKGJvbmQpOwogCiAJLyppbml0aWFsaXplIHBhY2tldCB0eXBlKi8KLQlwa190eXBlLT50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApOworCXBrX3R5cGUtPnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BUlApOwogCXBrX3R5cGUtPmRldiA9IE5VTEw7CiAJcGtfdHlwZS0+ZnVuYyA9IHJsYl9hcnBfcmVjdjsKIApAQCAtODkyLDcgKzg5Miw3IEBACiAJbWVtc2V0KCZwa3QsIDAsIHNpemUpOwogCW1lbWNweShwa3QubWFjX2RzdCwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkocGt0Lm1hY19zcmMsIG1hY19hZGRyLCBFVEhfQUxFTik7Ci0JcGt0LnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0xPT1ApOworCXBrdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTE9PUCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0xQX0JVUlNUOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE2MjgsNiArMTYyOCwxMCBAQAogICogbm8gb3RoZXIgbG9ja3MgbWF5IGJlIGhlbGQuCiAgKi8KIHZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKQorCV9fcmVsZWFzZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKKwlfX3JlbGVhc2VzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQogewogCXN0cnVjdCBzbGF2ZSAqc3dhcF9zbGF2ZTsKIAlpbnQgaTsKQEAgLTE3MDQsNiArMTcwOCwxMCBAQAogICogQ2FsbGVkIHdpdGggUlROTAogICovCiBpbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcikKKwlfX3JlbGVhc2VzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCisJX19yZWxlYXNlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDNkNzY2ODYuLjljMzI2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTAwMiw2ICsxMDAyLDEwIEBACiBzdGF0aWMgdm9pZCBib25kX2RvX2ZhaWxfb3Zlcl9tYWMoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQkJICBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUsCiAJCQkJICBzdHJ1Y3Qgc2xhdmUgKm9sZF9hY3RpdmUpCisJX19yZWxlYXNlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCiB7CiAJdTggdG1wX21hY1tFVEhfQUxFTl07CiAJc3RydWN0IHNvY2thZGRyIHNhZGRyOwpAQCAtMTcxMCw2ICsxNzE0LDcgQEAKIAljYXNlIEJPTkRfTU9ERV9BTEI6CiAJCW5ld19zbGF2ZS0+c3RhdGUgPSBCT05EX1NUQVRFX0FDVElWRTsKIAkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3MobmV3X3NsYXZlKTsKKwkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9kZWJ1ZygiVGhpcyBzbGF2ZSBpcyBhbHdheXMgYWN0aXZlIGluIHRydW5rIG1vZGVcbiIpOwpAQCAtMzE5Myw2ICszMTk4LDggQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiBzdGF0aWMgdm9pZCAqYm9uZF9pbmZvX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmZGV2X2Jhc2VfbG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gc2VxLT5wcml2YXRlOwogCWxvZmZfdCBvZmYgPSAwOwpAQCAtMzIzMiw2ICszMjM5LDggQEAKIH0KIAogc3RhdGljIHZvaWQgYm9uZF9pbmZvX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19yZWxlYXNlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHNlcS0+cHJpdmF0ZTsKIApAQCAtMzM2OSw3ICszMzc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYm9uZF9pbmZvX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gYm9uZF9pbmZvX3NlcV9zdGFydCwKIAkubmV4dCAgPSBib25kX2luZm9fc2VxX25leHQsCiAJLnN0b3AgID0gYm9uZF9pbmZvX3NlcV9zdG9wLApAQCAtNDczOSw3ICs0NzQ4LDcgQEAKICAqLwogaW50IGJvbmRfcGFyc2VfcGFybShjb25zdCBjaGFyICpidWYsIGNvbnN0IHN0cnVjdCBib25kX3Bhcm1fdGJsICp0YmwpCiB7Ci0JaW50IG1vZGUgPSAtMSwgaSwgcnY7CisJaW50IG1vZGVpbnQgPSAtMSwgaSwgcnY7CiAJY2hhciAqcCwgbW9kZXN0cltCT05EX01BWF9NT0RFTkFNRV9MRU4gKyAxXSA9IHsgMCwgfTsKIAogCWZvciAocCA9IChjaGFyICopYnVmOyAqcDsgcCsrKQpAQCAtNDc0OSwxMyArNDc1OCwxMyBAQAogCWlmICgqcCkKIAkJcnYgPSBzc2NhbmYoYnVmLCAiJTIwcyIsIG1vZGVzdHIpOwogCWVsc2UKLQkJcnYgPSBzc2NhbmYoYnVmLCAiJWQiLCAmbW9kZSk7CisJCXJ2ID0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm1vZGVpbnQpOwogCiAJaWYgKCFydikKIAkJcmV0dXJuIC0xOwogCiAJZm9yIChpID0gMDsgdGJsW2ldLm1vZGVuYW1lOyBpKyspIHsKLQkJaWYgKG1vZGUgPT0gdGJsW2ldLm1vZGUpCisJCWlmIChtb2RlaW50ID09IHRibFtpXS5tb2RlKQogCQkJcmV0dXJuIHRibFtpXS5tb2RlOwogCQlpZiAoc3RyY21wKG1vZGVzdHIsIHRibFtpXS5tb2RlbmFtZSkgPT0gMCkKIAkJCXJldHVybiB0YmxbaV0ubW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCBiYmJjM2JiLi4wZWZmZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC0yNTA2LDcgKzI1MDYsNyBAQAogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkVfQUxUKSB7IC8qIGhhbmRsZSByeCBzZXBhcmF0ZWx5ICovCiAjaWZkZWYgVVNFX05BUEkKIAkJY2FzX21hc2tfaW50cihjcCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKICNlbHNlCiAJCWNhc19yeF9yaW5nTihjcCwgcmluZywgMCk7CiAjZW5kaWYKQEAgLTI1NTcsNyArMjU1Nyw3IEBACiAJaWYgKHN0YXR1cyAmIElOVFJfUlhfRE9ORV9BTFQpIHsgLyogaGFuZGxlIHJ4IHNlcGFyYXRlbHkgKi8KICNpZmRlZiBVU0VfTkFQSQogCQljYXNfbWFza19pbnRyKGNwKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogI2Vsc2UKIAkJY2FzX3J4X3JpbmdOKGNwLCAxLCAwKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjEzLDcgQEAKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9ET05FKSB7CiAjaWZkZWYgVVNFX05BUEkKIAkJY2FzX21hc2tfaW50cihjcCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKICNlbHNlCiAJCWNhc19yeF9yaW5nTihjcCwgMCwgMCk7CiAjZW5kaWYKQEAgLTI2OTEsNyArMjY5MSw3IEBACiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOwogCWlmIChlbmFibGVfaW50cikgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJY2FzX3VubWFza19pbnRyKGNwKTsKIAl9CiAJcmV0dXJuIGNyZWRpdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCBkOTg0Yjc5Li41OGY2ZmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTE2MTIsNyArMTYxMiw3IEBACiAJaW50IHdvcmtfZG9uZSA9IHByb2Nlc3NfcmVzcG9uc2VzKGFkYXB0ZXIsIGJ1ZGdldCk7CiAKIAlpZiAobGlrZWx5KHdvcmtfZG9uZSA8IGJ1ZGdldCkpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXdyaXRlbChhZGFwdGVyLT5zZ2UtPnJlc3BRLmNpZHgsCiAJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9TR19TTEVFUElORyk7CiAJfQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAKIAogCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQkJaWYgKHByb2Nlc3NfcHVyZV9yZXNwb25zZXMoYWRhcHRlcikpCi0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCQkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAkJCWVsc2UgewogCQkJCS8qIG5vIGRhdGEsIG5vIE5BUEkgbmVlZGVkICovCiAJCQkJd3JpdGVsKHNnZS0+cmVzcFEuY2lkeCwgYWRhcHRlci0+cmVncyArIEFfU0dfU0xFRVBJTkcpOwpAQCAtMTk2Nyw4ICsxOTY3LDcgQEAKIAkJdHhfc2NoZWRfc3RvcChzZ2UpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykKLQkJaWYgKHNnZS0+ZXNwaWJ1Z19za2JbaV0pCi0JCQlrZnJlZV9za2Ioc2dlLT5lc3BpYnVnX3NrYltpXSk7CisJCWtmcmVlX3NrYihzZ2UtPmVzcGlidWdfc2tiW2ldKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NwbWFjLmMgYi9kcml2ZXJzL25ldC9jcG1hYy5jCmluZGV4IGY2NjU0ODcuLjNmNDc2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3BtYWMuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcng6IHBvbGxpbmcsIGJ1dCBubyBxdWV1ZVxuIiwKIAkJCSAgICAgICBwcml2LT5kZXYtPm5hbWUpOwogCQlzcGluX3VubG9jaygmcHJpdi0+cnhfbG9jayk7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUxNCw3ICs1MTQsNyBAQAogCWlmIChwcm9jZXNzZWQgPT0gMCkgewogCQkvKiB3ZSByYW4gb3V0IG9mIHBhY2tldHMgdG8gcmVhZCwKIAkJICogcmV2ZXJ0IHRvIGludGVycnVwdC1kcml2ZW4gbW9kZSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJY3BtYWNfd3JpdGUocHJpdi0+cmVncywgQ1BNQUNfUlhfSU5UX0VOQUJMRSwgMSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTUzNiw3ICs1MzYsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9sb2NrKTsKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwcml2LT5kZXYpOwogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAKQEAgLTgwMiw5ICs4MDIsOSBAQAogCiAJaWYgKHN0YXR1cyAmIE1BQ19JTlRfUlgpIHsKIAkJcXVldWUgPSAoc3RhdHVzID4+IDgpICYgNzsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CiAJCQljcG1hY193cml0ZShwcml2LT5yZWdzLCBDUE1BQ19SWF9JTlRfQ0xFQVIsIDEgPDwgcXVldWUpOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogCQl9CiAJfQogCkBAIC0xMTYxLDcgKzExNjEsNyBAQAogCXByaXYtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1Z19sZXZlbCwgMHhmZik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBkYXRhLT5kZXZfYWRkciwgc2l6ZW9mKGRldi0+ZGV2X2FkZHIpKTsKIAotCXByaXYtPnBoeSA9IHBoeV9jb25uZWN0KGRldiwgY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0tPmRldi5idXNfaWQsCisJcHJpdi0+cGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0tPmRldiksCiAJCQkJJmNwbWFjX2FkanVzdF9saW5rLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAlpZiAoSVNfRVJSKHByaXYtPnBoeSkpIHsKIAkJaWYgKG5ldGlmX21zZ19kcnYocHJpdikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggYTg5ZDhjYy4uNzFlYWE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgInQzY2Rldi5oIgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC02OSw2ICs2OCw4IEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0c3RhdHM7CiAJaW50IGFjdGl2aXR5OwogCV9fYmUzMiBpc2NzaV9pcHY0YWRkcjsKKworCWludCBsaW5rX2ZhdWx0OyAvKiBsaW5rIGZhdWx0IHdhcyBkZXRlY3RlZCAqLwogfTsKIAogZW51bSB7CQkJCS8qIGFkYXB0ZXIgZmxhZ3MgKi8KQEAgLTkyLDYgKzkzLDcgQEAKIHN0cnVjdCBzZ2VfZmwgeyAgICAgICAgICAgICAgICAgICAgIC8qIFNHRSBwZXIgZnJlZS1idWZmZXIgbGlzdCBzdGF0ZSAqLwogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsgICAgICAvKiBzaXplIG9mIGVhY2ggUnggYnVmZmVyICovCiAJdW5zaWduZWQgaW50IGNyZWRpdHM7ICAgICAgIC8qICMgb2YgYXZhaWxhYmxlIFJ4IGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBpbnQgcGVuZF9jcmVkOyAgICAgLyogbmV3IGJ1ZmZlcnMgc2luY2UgbGFzdCBGTCBEQiByaW5nICovCiAJdW5zaWduZWQgaW50IHNpemU7ICAgICAgICAgIC8qIGNhcGFjaXR5IG9mIGZyZWUgbGlzdCAqLwogCXVuc2lnbmVkIGludCBjaWR4OyAgICAgICAgICAvKiBjb25zdW1lciBpbmRleCAqLwogCXVuc2lnbmVkIGludCBwaWR4OyAgICAgICAgICAvKiBwcm9kdWNlciBpbmRleCAqLwpAQCAtMTc4LDE1ICsxODAsMTEgQEAKIAlTR0VfUFNUQVRfVFhfQ1NVTSwJLyogIyBvZiBUWCBjaGVja3N1bSBvZmZsb2FkcyAqLwogCVNHRV9QU1RBVF9WTEFORVgsCS8qICMgb2YgVkxBTiB0YWcgZXh0cmFjdGlvbnMgKi8KIAlTR0VfUFNUQVRfVkxBTklOUywJLyogIyBvZiBWTEFOIHRhZyBpbnNlcnRpb25zICovCi0JU0dFX1BTVEFUX0xST19BR0dSLAkvKiAjIG9mIHBhZ2UgY2h1bmtzIGFkZGVkIHRvIExSTyBzZXNzaW9ucyAqLwotCVNHRV9QU1RBVF9MUk9fRkxVU0hFRCwJLyogIyBvZiBmbHVzaGVkIExSTyBzZXNzaW9ucyAqLwotCVNHRV9QU1RBVF9MUk9fTk9fREVTQywJLyogIyBvZiBvdmVyZmxvd24gTFJPIHNlc3Npb25zICovCiAKIAlTR0VfUFNUQVRfTUFYCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKLSNkZWZpbmUgVDNfTUFYX0xST19TRVMgOAotI2RlZmluZSBUM19NQVhfTFJPX01BWF9QS1RTIDY0CitzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm87CiAKIHN0cnVjdCBzZ2VfcXNldCB7CQkvKiBhbiBTR0UgcXVldWUgc2V0ICovCiAJc3RydWN0IGFkYXB0ZXIgKmFkYXA7CkBAIC0xOTQsMTcgKzE5MiwxNCBAQAogCXN0cnVjdCBzZ2VfcnNwcSByc3BxOwogCXN0cnVjdCBzZ2VfZmwgZmxbU0dFX1JYUV9QRVJfU0VUXTsKIAlzdHJ1Y3Qgc2dlX3R4cSB0eHFbU0dFX1RYUV9QRVJfU0VUXTsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW1QzX01BWF9MUk9fU0VTXTsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpscm9fZnJhZ190Ymw7Ci0JaW50IGxyb19uZnJhZ3M7CisJc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvIGxyb19mcmFnX3RibDsKIAlpbnQgbHJvX2VuYWJsZWQ7Ci0JaW50IGxyb19mcmFnX2xlbjsKIAl2b2lkICpscm9fdmE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eF9xOwkvKiBhc3NvY2lhdGVkIG5ldGRldiBUWCBxdWV1ZSAqLwogCXVuc2lnbmVkIGxvbmcgdHhxX3N0b3BwZWQ7CS8qIHdoaWNoIFR4IHF1ZXVlcyBhcmUgc3RvcHBlZCAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHR4X3JlY2xhaW1fdGltZXI7CS8qIHJlY2xhaW1zIFRYIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWNsYWltX3RpbWVyOwkvKiByZWNsYWltcyBSWCBidWZmZXJzICovCiAJdW5zaWduZWQgbG9uZyBwb3J0X3N0YXRzW1NHRV9QU1RBVF9NQVhdOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKQEAgLTIzMCw2ICsyMjUsNyBAQAogCXVuc2lnbmVkIGludCBzbG93X2ludHJfbWFzazsKIAl1bnNpZ25lZCBsb25nIGlycV9zdGF0c1tJUlFfTlVNX1NUQVRTXTsKIAorCWludCBtc2l4X252ZWN0b3JzOwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIHNob3J0IHZlYzsKIAkJY2hhciBkZXNjWzIyXTsKQEAgLTI0Nyw2ICsyNDMsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgYWRhcF9jaGVja190YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBleHRfaW50cl9oYW5kbGVyX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGZhdGFsX2Vycm9yX2hhbmRsZXJfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua19mYXVsdF9oYW5kbGVyX3Rhc2s7CiAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CiAKQEAgLTI4OSw2ICsyODYsOCBAQAogdm9pZCB0M19vc19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0dXMsCiAJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsIGludCBmYyk7CiB2b2lkIHQzX29zX3BoeW1vZF9jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCk7Cit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpOwordm9pZCB0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKIAogdm9pZCB0M19zZ2Vfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2Vfc3RvcChzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKaW5kZXggNWMzYzA1ZC4uZTFiMjI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwpAQCAtMTAwNSw3ICsxMDA1LDggQEAKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCi0JaW50IGVyciwgbGFzaV9jdHJsOworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGxhc2lfY3RybDsKIAogCWVyciA9IG1kaW9fcmVhZChwaHksIE1ESU9fREVWX1BNQV9QTUQsIExBU0lfQ1RSTCwgJmxhc2lfY3RybCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggZGI0ZjRmNS4uOWVlMDIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTI4MCw2ICsyODAsNyBAQAogCXVuc2lnbmVkIGxvbmcgbnVtX3RvZ2dsZWQ7IC8qICMgdGltZXMgdG9nZ2xlZCBUeEVuIGR1ZSB0byBzdHVjayBUWCAqLwogCXVuc2lnbmVkIGxvbmcgbnVtX3Jlc2V0czsgIC8qICMgdGltZXMgcmVzZXQgZHVlIHRvIHN0dWNrIFRYICovCiAKKwl1bnNpZ25lZCBsb25nIGxpbmtfZmF1bHRzOyAgLyogIyBkZXRlY3RlZCBsaW5rIGZhdWx0cyAqLwogfTsKIAogc3RydWN0IHRwX21pYl9zdGF0cyB7CkBAIC03MDEsNiArNzAyLDggQEAKIHZvaWQgdDNfaW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCB0M19pbnRyX2Rpc2FibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCB0M19pbnRyX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgdDNfeGdtX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKK3ZvaWQgdDNfeGdtX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwogdm9pZCB0M19wb3J0X2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CkBAIC03MDgsNiArNzExLDcgQEAKIGludCB0M19waHlfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIAogdm9pZCB0M19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKK3ZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpOwogaW50IHQzX2xpbmtfc3RhcnQoc3RydWN0IGNwaHkgKnBoeSwgc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IGxpbmtfY29uZmlnICpsYyk7CiBjb25zdCBzdHJ1Y3QgYWRhcHRlcl9pbmZvICp0M19nZXRfYWRhcHRlcl9pbmZvKHVuc2lnbmVkIGludCBib2FyZF9pZCk7CiBpbnQgdDNfc2VlcHJvbV9yZWFkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgX19sZTMyICpkYXRhKTsKQEAgLTc0NCw2ICs3NDgsOCBAQAogCiBpbnQgdDNfbWFjX3Jlc2V0KHN0cnVjdCBjbWFjICptYWMpOwogdm9pZCB0M2JfcGNzX3Jlc2V0KHN0cnVjdCBjbWFjICptYWMpOwordm9pZCB0M19tYWNfZGlzYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpOwordm9pZCB0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYyk7CiBpbnQgdDNfbWFjX2VuYWJsZShzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgd2hpY2gpOwogaW50IHQzX21hY19kaXNhYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCk7CiBpbnQgdDNfbWFjX3NldF9tdHUoc3RydWN0IGNtYWMgKm1hYywgdW5zaWduZWQgaW50IG10dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKaW5kZXggYmFiOGE5My4uZDhiZTg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtMTcwLDYgKzE3MCw0MCBAQAogCX0KIH0KIAordm9pZCB0M19vc19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCwgaW50IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwLT5wb3J0W3BvcnRfaWRdOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChzdGF0ZSA9PSBuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCXJldHVybjsKKworCWlmIChzdGF0ZSkgeworCQlzdHJ1Y3QgY21hYyAqbWFjID0gJnBpLT5tYWM7CisKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCisJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLworCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKKwkJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX1NUQVRVUyArCisJCQkJICAgIHBpLT5tYWMub2Zmc2V0KTsKKwkJdDNfd3JpdGVfcmVnKGFkYXAsCisJCQkgICAgIEFfWEdNX0lOVF9DQVVTRSArIHBpLT5tYWMub2Zmc2V0LAorCQkJICAgICBGX1hHTV9JTlQpOworCisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwKKwkJCQkgQV9YR01fSU5UX0VOQUJMRSArCisJCQkJIHBpLT5tYWMub2Zmc2V0LAorCQkJCSBGX1hHTV9JTlQsIEZfWEdNX0lOVCk7CisJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwLCBwaS0+cG9ydF9pZCk7CisKKwkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fVFgpOworCX0gZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJbGlua19yZXBvcnQoZGV2KTsKK30KKwogLyoqCiAgKgl0M19vc19saW5rX2NoYW5nZWQgLSBoYW5kbGUgbGluayBzdGF0dXMgY2hhbmdlcwogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluayBjaGFuZ2UKQEAgLTE5NywxMCArMjMxLDM0IEBACiAJaWYgKGxpbmtfc3RhdCAhPSBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJaWYgKGxpbmtfc3RhdCkgewogCQkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fUlgpOworCisJCQkvKiBDbGVhciBsb2NhbCBmYXVsdHMgKi8KKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArCisJCQkJICAgIHBpLT5tYWMub2Zmc2V0KTsKKwkJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLAorCQkJCSAgICAgQV9YR01fSU5UX0NBVVNFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJICAgICBGX1hHTV9JTlQpOworCisJCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsCisJCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJCSBGX1hHTV9JTlQsIEZfWEdNX0lOVCk7CisJCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCX0gZWxzZSB7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJcGktPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnBpLT5waHksIDEpOworCisJCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKKwkJCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwaS0+bWFjLm9mZnNldCk7CisJCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsCisJCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJCSBGX1hHTV9JTlQsIDApOworCisJCQlpZiAoaXNfMTBHKGFkYXB0ZXIpKQorCQkJCXBpLT5waHkub3BzLT5wb3dlcl9kb3duKCZwaS0+cGh5LCAxKTsKKworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKIAkJCXQzX21hY19kaXNhYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CiAJCQl0M19saW5rX3N0YXJ0KCZwaS0+cGh5LCBtYWMsICZwaS0+bGlua19jb25maWcpOwogCQl9CkBAIC0zMzksNyArMzk3LDcgQEAKIAogCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2luZm9bMF0udmVjLCBhZGFwdGVyKTsKIAkJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKQotCQkgICAgbiArPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIGkpLT5ucXNldHM7CisJCQluICs9IGFkYXAycGluZm8oYWRhcHRlciwgaSktPm5xc2V0czsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQogCQkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9pbmZvW2kgKyAxXS52ZWMsCkBAIC01MDksMTkgKzU2Nyw5IEBACiB7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7Ci0JaW50IGksIGxyb19vbiA9IDE7CiAKIAlhZGFwdGVyLT5wYXJhbXMuc2dlLnFzZXRbcXNldF9pZHhdLmxybyA9ICEhdmFsOwogCWFkYXB0ZXItPnNnZS5xc1txc2V0X2lkeF0ubHJvX2VuYWJsZWQgPSAhIXZhbDsKLQotCS8qIGxldCBldGh0b29sIHJlcG9ydCBMUk8gb24gb25seSBpZiBhbGwgcXVldWVzIGFyZSBMUk8gZW5hYmxlZCAqLwotCWZvciAoaSA9IHBpLT5maXJzdF9xc2V0OyBpIDwgcGktPmZpcnN0X3FzZXQgKyBwaS0+bnFzZXRzOyArK2kpCi0JCWxyb19vbiAmPSBhZGFwdGVyLT5wYXJhbXMuc2dlLnFzZXRbaV0ubHJvOwotCi0JaWYgKGxyb19vbikKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwogfQogCiAvKioKQEAgLTExODMsNiArMTIzMSwxMCBAQAogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOwogCisJLyogU3RvcCBsaW5rIGZhdWx0IGludGVycnVwdHMgKi8KKwl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKKwl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcGktPm1hYy5vZmZzZXQpOworCiAJdDNfcG9ydF9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOwogCXBpLT5waHkub3BzLT5wb3dlcl9kb3duKCZwaS0+cGh5LCAxKTsKQEAgLTEzMDksNiArMTM2MSw3IEBACiAJIkNoZWNrVFhFblRvZ2dsZWQgICAiLAogCSJDaGVja1Jlc2V0cyAgICAgICAgIiwKIAorCSJMaW5rRmF1bHRzICAgICAgICAgIiwKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCkBAIC0xNDM0LDEzICsxNDg3LDE1IEBACiAJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9WTEFOSU5TKTsKIAkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX1RYX0NTVU0pOwogCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfUlhfQ1NVTV9HT09EKTsKLQkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX0xST19BR0dSKTsKLQkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX0xST19GTFVTSEVEKTsKLQkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX0xST19OT19ERVNDKTsKKwkqZGF0YSsrID0gMDsKKwkqZGF0YSsrID0gMDsKKwkqZGF0YSsrID0gMDsKIAkqZGF0YSsrID0gcy0+cnhfY29uZ19kcm9wczsKIAogCSpkYXRhKysgPSBzLT5udW1fdG9nZ2xlZDsKIAkqZGF0YSsrID0gcy0+bnVtX3Jlc2V0czsKKworCSpkYXRhKysgPSBzLT5saW5rX2ZhdWx0czsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ19ibG9ja19kdW1wKHN0cnVjdCBhZGFwdGVyICphcCwgdm9pZCAqYnVmLApAQCAtMTU3Niw3ICsxNjMxLDYgQEAKIAogc3RhdGljIGludCBzZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0JaW50IGNhcDsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbGlua19jb25maWcgKmxjID0gJnAtPmxpbmtfY29uZmlnOwogCkBAIC0xNTg2LDcgKzE2NDAsNyBAQAogCQkgKiBiZWluZyByZXF1ZXN0ZWQuCiAJCSAqLwogCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewotCQkJY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoY21kLT5zcGVlZCwgY21kLT5kdXBsZXgpOworCQkJaW50IGNhcCA9IHNwZWVkX2R1cGxleF90b19jYXBzKGNtZC0+c3BlZWQsIGNtZC0+ZHVwbGV4KTsKIAkJCWlmIChsYy0+c3VwcG9ydGVkICYgY2FwKQogCQkJCXJldHVybiAwOwogCQl9CkBAIC0xODI3LDI4ICsxODgxLDYgQEAKIAltZW1zZXQoJndvbC0+c29wYXNzLCAwLCBzaXplb2Yod29sLT5zb3Bhc3MpKTsKIH0KIAotc3RhdGljIGludCBjeGdiM19zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pIHsKLQkJaWYgKCEocGktPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXBpLT5yeF9vZmZsb2FkIHw9IFQzX0xSTzsKLQkJZm9yIChpID0gcGktPmZpcnN0X3FzZXQ7IGkgPCBwaS0+Zmlyc3RfcXNldCArIHBpLT5ucXNldHM7IGkrKykKLQkJCXNldF9xc2V0X2xybyhkZXYsIGksIDEpOwotCi0JfSBlbHNlIHsKLQkJcGktPnJ4X29mZmxvYWQgJj0gflQzX0xSTzsKLQkJZm9yIChpID0gcGktPmZpcnN0X3FzZXQ7IGkgPCBwaS0+Zmlyc3RfcXNldCArIHBpLT5ucXNldHM7IGkrKykKLQkJCXNldF9xc2V0X2xybyhkZXYsIGksIDApOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN4Z2JfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGdldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gc2V0X3NldHRpbmdzLApAQCAtMTg3OCw4ICsxOTEwLDYgQEAKIAkuZ2V0X3JlZ3MgPSBnZXRfcmVncywKIAkuZ2V0X3dvbCA9IGdldF93b2wsCiAJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCi0JLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MgPSBjeGdiM19zZXRfZmxhZ3MsCiB9OwogCiBzdGF0aWMgaW50IGluX3JhbmdlKGludCB2YWwsIGludCBsbywgaW50IGhpKQpAQCAtMjQ2MCw4ICsyNDkwLDIwIEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOwogCQlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKKwkJaWYgKHAtPmxpbmtfZmF1bHQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKKworCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBpKTsKKwkJCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwLT5tYWMub2Zmc2V0KTsKKwogCQkJdDNfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIGkpOworCQkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXB0ZXIsIGkpOworCQl9CiAJfQogfQogCkBAIC0yNTA2LDYgKzI1NDgsOCBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAogCQkJCQkgICAgICAgYWRhcF9jaGVja190YXNrLndvcmspOwogCWNvbnN0IHN0cnVjdCBhZGFwdGVyX3BhcmFtcyAqcCA9ICZhZGFwdGVyLT5wYXJhbXM7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgaW50IHYsIHN0YXR1cywgcmVzZXQ7CiAKIAlhZGFwdGVyLT5jaGVja190YXNrX2NudCsrOwogCkBAIC0yNTI0LDYgKzI1NjgsNTQgQEAKIAlpZiAocC0+cmV2ID09IFQzX1JFVl9CMikKIAkJY2hlY2tfdDNiMl9tYWMoYWRhcHRlcik7CiAKKwkvKgorCSAqIFNjYW4gdGhlIFhHTUFDJ3MgdG8gY2hlY2sgZm9yIHZhcmlvdXMgY29uZGl0aW9ucyB3aGljaCB3ZSB3YW50IHRvCisJICogbW9uaXRvciBpbiBhIHBlcmlvZGljIHBvbGxpbmcgbWFubmVyIHJhdGhlciB0aGFuIHZpYSBhbiBpbnRlcnJ1cHQKKwkgKiBjb25kaXRpb24uICBUaGlzIGlzIHVzZWQgZm9yIGNvbmRpdGlvbnMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGZsb29kCisJICogdGhlIHN5c3RlbSB3aXRoIGludGVycnVwdHMgYW5kIHdlIG9ubHkgcmVhbGx5IG5lZWQgdG8ga25vdyB0aGF0IHRoZQorCSAqIGNvbmRpdGlvbnMgYXJlICJoYXBwZW5pbmciIC4uLiAgRm9yIGVhY2ggY29uZGl0aW9uIHdlIGNvdW50IHRoZQorCSAqIGRldGVjdGlvbiBvZiB0aGUgY29uZGl0aW9uIGFuZCByZXNldCBpdCBmb3IgdGhlIG5leHQgcG9sbGluZyBsb29wLgorCSAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcG9ydCkgeworCQlzdHJ1Y3QgY21hYyAqbWFjID0gICZhZGFwMnBpbmZvKGFkYXB0ZXIsIHBvcnQpLT5tYWM7CisJCXUzMiBjYXVzZTsKKworCQljYXVzZSA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0KTsKKwkJcmVzZXQgPSAwOworCQlpZiAoY2F1c2UgJiBGX1JYRklGT19PVkVSRkxPVykgeworCQkJbWFjLT5zdGF0cy5yeF9maWZvX292ZmwrKzsKKwkJCXJlc2V0IHw9IEZfUlhGSUZPX09WRVJGTE9XOworCQl9CisKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0LCByZXNldCk7CisJfQorCisJLyoKKwkgKiBXZSBkbyB0aGUgc2FtZSBhcyBhYm92ZSBmb3IgRkxfRU1QVFkgaW50ZXJydXB0cy4KKwkgKi8KKwlzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSk7CisJcmVzZXQgPSAwOworCisJaWYgKHN0YXR1cyAmIEZfRkxFTVBUWSkgeworCQlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gJmFkYXB0ZXItPnNnZS5xc1swXTsKKwkJaW50IGkgPSAwOworCisJCXJlc2V0IHw9IEZfRkxFTVBUWTsKKworCQl2ID0gKHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfU0dfUlNQUV9GTF9TVEFUVVMpID4+IFNfRkwwRU1QVFkpICYKKwkJICAgIDB4ZmZmZjsKKworCQl3aGlsZSAodikgeworCQkJcXMtPmZsW2ldLmVtcHR5ICs9ICh2ICYgMSk7CisJCQlpZiAoaSkKKwkJCQlxcysrOworCQkJaSBePSAxOworCQkJdiA+Pj0gMTsKKwkJfQorCX0KKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSwgcmVzZXQpOworCiAJLyogU2NoZWR1bGUgdGhlIG5leHQgY2hlY2sgdXBkYXRlIGlmIGFueSBwb3J0IGlzIGFjdGl2ZS4gKi8KIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOwogCWlmIChhZGFwdGVyLT5vcGVuX2RldmljZV9tYXAgJiBQT1JUX01BU0spCkBAIC0yNTM4LDkgKzI2MzAsMjMgQEAKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWRhcHRlciwKIAkJCQkJICAgICAgIGV4dF9pbnRyX2hhbmRsZXJfdGFzayk7CisJaW50IGk7CiAKKwkvKiBEaXNhYmxlIGxpbmsgZmF1bHQgaW50ZXJydXB0cyAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+cG9ydFtpXTsKKwkJc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7CisKKwkJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBpKTsKKwkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHAtPm1hYy5vZmZzZXQpOworCX0KKworCS8qIFJlLWVuYWJsZSBsaW5rIGZhdWx0IGludGVycnVwdHMgKi8KIAl0M19waHlfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwogCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKQorCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgaSk7CisKIAkvKiBOb3cgcmVlbmFibGUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwogCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CiAJaWYgKGFkYXB0ZXItPnNsb3dfaW50cl9tYXNrKSB7CkBAIC0yNTczLDEwICsyNjc5LDQyIEBACiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIGxpbmtfZmF1bHRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCisJCQkJCSAgICAgICBsaW5rX2ZhdWx0X2hhbmRsZXJfdGFzayk7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPnBvcnRbaV07CisJCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCQlpZiAocGktPmxpbmtfZmF1bHQpCisJCQl0M19saW5rX2ZhdWx0KGFkYXB0ZXIsIGkpOworCX0KK30KKwordm9pZCB0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5wb3J0W3BvcnRfaWRdOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+d29ya19sb2NrKTsKKwlwaS0+bGlua19mYXVsdCA9IDE7CisJcXVldWVfd29yayhjeGdiM193cSwgJmFkYXB0ZXItPmxpbmtfZmF1bHRfaGFuZGxlcl90YXNrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+d29ya19sb2NrKTsKK30KKwogc3RhdGljIGludCB0M19hZGFwdGVyX2Vycm9yKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcmVzZXQpCiB7CiAJaW50IGksIHJldCA9IDA7CiAKKwlpZiAoaXNfb2ZmbG9hZChhZGFwdGVyKSAmJgorCSAgICB0ZXN0X2JpdChPRkZMT0FEX0RFVk1BUF9CSVQsICZhZGFwdGVyLT5vcGVuX2RldmljZV9tYXApKSB7CisJCWN4Z2IzX2Vycl9ub3RpZnkoJmFkYXB0ZXItPnRkZXYsIE9GRkxPQURfU1RBVFVTX0RPV04sIDApOworCQlvZmZsb2FkX2Nsb3NlKCZhZGFwdGVyLT50ZGV2KTsKKwl9CisKIAkvKiBTdG9wIGFsbCBwb3J0cyAqLwogCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtpXTsKQEAgLTI1ODUsMTAgKzI3MjMsNiBAQAogCQkJY3hnYl9jbG9zZShuZXRkZXYpOwogCX0KIAotCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpICYmCi0JICAgIHRlc3RfYml0KE9GRkxPQURfREVWTUFQX0JJVCwgJmFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCkpCi0JCW9mZmxvYWRfY2xvc2UoJmFkYXB0ZXItPnRkZXYpOwotCiAJLyogU3RvcCBTR0UgdGltZXJzICovCiAJdDNfc3RvcF9zZ2VfdGltZXJzKGFkYXB0ZXIpOwogCkBAIC0yNjQwLDYgKzI3NzQsOSBAQAogCQkJfQogCQl9CiAJfQorCisJaWYgKGlzX29mZmxvYWQoYWRhcHRlcikgJiYgIW9mbGRfZGlzYWJsZSkKKwkJY3hnYjNfZXJyX25vdGlmeSgmYWRhcHRlci0+dGRldiwgT0ZGTE9BRF9TVEFUVVNfVVAsIDApOwogfQogCiAvKgpAQCAtMjY4NCw3ICsyODIxLDYgQEAKIAkJQ0hfQUxFUlQoYWRhcHRlciwgIkZXIHN0YXR1czogMHgleCwgMHgleCwgMHgleCwgMHgleFxuIiwKIAkJCSBmd19zdGF0dXNbMF0sIGZ3X3N0YXR1c1sxXSwKIAkJCSBmd19zdGF0dXNbMl0sIGZ3X3N0YXR1c1szXSk7Ci0KIH0KIAogLyoqCkBAIC0yNzUzLDcgKzI4ODksNyBAQAogCWludCBpLCBqID0gMDsKIAlpbnQgbnVtX2NwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKIAlpbnQgaHdwb3J0cyA9IGFkYXAtPnBhcmFtcy5ucG9ydHM7Ci0JaW50IG5xc2V0cyA9IFNHRV9RU0VUUzsKKwlpbnQgbnFzZXRzID0gYWRhcC0+bXNpeF9udmVjdG9ycyAtIDE7CiAKIAlpZiAoYWRhcC0+cGFyYW1zLnJldiA+IDAgJiYgYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0lYKSB7CiAJCWlmIChod3BvcnRzID09IDIgJiYKQEAgLTI3ODIsMTggKzI5MTgsMjUgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGN4Z2JfZW5hYmxlX21zaXgoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IG1zaXhfZW50cnkgZW50cmllc1tTR0VfUVNFVFMgKyAxXTsKKwlpbnQgdmVjdG9yczsKIAlpbnQgaSwgZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW50cmllcyk7ICsraSkKKwl2ZWN0b3JzID0gQVJSQVlfU0laRShlbnRyaWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgdmVjdG9yczsgKytpKQogCQllbnRyaWVzW2ldLmVudHJ5ID0gaTsKIAotCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwLT5wZGV2LCBlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpKTsKKwl3aGlsZSAoKGVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwLT5wZGV2LCBlbnRyaWVzLCB2ZWN0b3JzKSkgPiAwKQorCQl2ZWN0b3JzID0gZXJyOworCisJaWYgKCFlcnIgJiYgdmVjdG9ycyA8IChhZGFwLT5wYXJhbXMubnBvcnRzICsgMSkpCisJCWVyciA9IC0xOworCiAJaWYgKCFlcnIpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW50cmllcyk7ICsraSkKKwkJZm9yIChpID0gMDsgaSA8IHZlY3RvcnM7ICsraSkKIAkJCWFkYXAtPm1zaXhfaW5mb1tpXS52ZWMgPSBlbnRyaWVzW2ldLnZlY3RvcjsKLQl9IGVsc2UgaWYgKGVyciA+IDApCi0JCWRldl9pbmZvKCZhZGFwLT5wZGV2LT5kZXYsCi0JCSAgICAgICAib25seSAlZCBNU0ktWCB2ZWN0b3JzIGxlZnQsIG5vdCB1c2luZyBNU0ktWFxuIiwgZXJyKTsKKwkJYWRhcC0+bXNpeF9udmVjdG9ycyA9IHZlY3RvcnM7CisJfQorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjkzNSw2ICszMDc4LDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5hZGFwdGVyX2xpc3QpOwogCUlOSVRfV09SSygmYWRhcHRlci0+ZXh0X2ludHJfaGFuZGxlcl90YXNrLCBleHRfaW50cl90YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfZmF1bHRfaGFuZGxlcl90YXNrLCBsaW5rX2ZhdWx0X3Rhc2spOwogCUlOSVRfV09SSygmYWRhcHRlci0+ZmF0YWxfZXJyb3JfaGFuZGxlcl90YXNrLCBmYXRhbF9lcnJvcl90YXNrKTsKIAlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+YWRhcF9jaGVja190YXNrLCB0M19hZGFwX2NoZWNrX3Rhc2spOwogCkBAIC0yOTYxLDcgKzMxMDUsNyBAQAogCQluZXRkZXYtPm1lbV9lbmQgPSBtbWlvX3N0YXJ0ICsgbW1pb19sZW4gLSAxOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAJCWlmIChwY2lfdXNpbmdfZGFjKQogCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwppbmRleCAyZDdmNjlhLi42MjBkODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCkBAIC0xNTMsNiArMTUzLDE4IEBACiAJbXV0ZXhfdW5sb2NrKCZjeGdiM19kYl9sb2NrKTsKIH0KIAordm9pZCBjeGdiM19lcnJfbm90aWZ5KHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcikKK3sKKwlzdHJ1Y3QgY3hnYjNfY2xpZW50ICpjbGllbnQ7CisKKwltdXRleF9sb2NrKCZjeGdiM19kYl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJmNsaWVudF9saXN0LCBjbGllbnRfbGlzdCkgeworCQlpZiAoY2xpZW50LT5lcnJfaGFuZGxlcikKKwkJCWNsaWVudC0+ZXJyX2hhbmRsZXIodGRldiwgc3RhdHVzLCBlcnJvcik7CisJfQorCW11dGV4X3VubG9jaygmY3hnYjNfZGJfbG9jayk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X2lmZl9mcm9tX21hYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgdmxhbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAppbmRleCBkNTE0ZTUwLi5hOGU4ZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCkBAIC02NCwxMCArNjQsMTYgQEAKIHZvaWQgY3hnYjNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGN4Z2IzX2NsaWVudCAqY2xpZW50KTsKIHZvaWQgY3hnYjNfYWRkX2NsaWVudHMoc3RydWN0IHQzY2RldiAqdGRldik7CiB2b2lkIGN4Z2IzX3JlbW92ZV9jbGllbnRzKHN0cnVjdCB0M2NkZXYgKnRkZXYpOwordm9pZCBjeGdiM19lcnJfbm90aWZ5KHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcik7CiAKIHR5cGVkZWYgaW50ICgqY3hnYjNfY3BsX2hhbmRsZXJfZnVuYykoc3RydWN0IHQzY2RldiAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eCk7CiAKK2VudW0geworCU9GRkxPQURfU1RBVFVTX1VQLAorCU9GRkxPQURfU1RBVFVTX0RPV04KK307CisKIHN0cnVjdCBjeGdiM19jbGllbnQgewogCWNoYXIgKm5hbWU7CiAJdm9pZCAoKmFkZCkgKHN0cnVjdCB0M2NkZXYgKik7CkBAIC03Niw2ICs4Miw3IEBACiAJaW50ICgqcmVkaXJlY3QpKHZvaWQgKmN0eCwgc3RydWN0IGRzdF9lbnRyeSAqb2xkLAogCQkJc3RydWN0IGRzdF9lbnRyeSAqbmV3LCBzdHJ1Y3QgbDJ0X2VudHJ5ICpsMnQpOwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CisJdm9pZCAoKmVycl9oYW5kbGVyKShzdHJ1Y3QgdDNjZGV2ICp0ZGV2LCB1MzIgc3RhdHVzLCB1MzIgZXJyb3IpOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaAppbmRleCBhMDM1ZDVjMi4uMWI1MzI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaApAQCAtMTcwLDYgKzE3MCwxMCBAQAogCiAjZGVmaW5lIFNfUlNQUTBESVNBQkxFRCAgICA4CiAKKyNkZWZpbmUgU19GTDBFTVBUWSAgICAxNgorI2RlZmluZSBWX0ZMMEVNUFRZKHgpICgoeCkgPDwgU19GTDBFTVBUWSkKKyNkZWZpbmUgRl9GTDBFTVBUWSAgICBWX0ZMMEVNUFRZKDFVKQorCiAjZGVmaW5lIEFfU0dfRUdSX1JDUV9EUkJfVEhSU0ggMHg1NAogCiAjZGVmaW5lIFNfSElSQ1FEUkJUSFJTSCAgICAxNgpAQCAtMjU4LDYgKzI2MiwxMCBAQAogI2RlZmluZSBWX1JTUFFDUkVESVRPVkVSRk9XKHgpICgoeCkgPDwgU19SU1BRQ1JFRElUT1ZFUkZPVykKICNkZWZpbmUgRl9SU1BRQ1JFRElUT1ZFUkZPVyAgICBWX1JTUFFDUkVESVRPVkVSRk9XKDFVKQogCisjZGVmaW5lIFNfRkxFTVBUWSAgICAxCisjZGVmaW5lIFZfRkxFTVBUWSh4KSAoKHgpIDw8IFNfRkxFTVBUWSkKKyNkZWZpbmUgRl9GTEVNUFRZICAgIFZfRkxFTVBUWSgxVSkKKwogI2RlZmluZSBBX1NHX0lOVF9FTkFCTEUgMHg2MAogCiAjZGVmaW5lIEFfU0dfQ01EUV9DUkVESVRfVEggMHg2NApAQCAtMjIwNyw2ICsyMjE1LDE1IEBACiAKICNkZWZpbmUgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfTE9XXzggMHg4NTQKIAorI2RlZmluZSBBX1hHTV9JTlRfU1RBVFVTIDB4ODZjCisKKyNkZWZpbmUgU19MSU5LRkFVTFRDSEFOR0UgICAgOQorI2RlZmluZSBWX0xJTktGQVVMVENIQU5HRSh4KSAoKHgpIDw8IFNfTElOS0ZBVUxUQ0hBTkdFKQorI2RlZmluZSBGX0xJTktGQVVMVENIQU5HRSAgICBWX0xJTktGQVVMVENIQU5HRSgxVSkKKworI2RlZmluZSBBX1hHTV9YR01fSU5UX0VOQUJMRSAweDg3NAorI2RlZmluZSBBX1hHTV9YR01fSU5UX0RJU0FCTEUgMHg4NzgKKwogI2RlZmluZSBBX1hHTV9TVEFUX0NUUkwgMHg4ODAKIAogI2RlZmluZSBTX0NMUlNUQVRTICAgIDIKQEAgLTI0MDUsNiArMjQyMiwxMCBAQAogI2RlZmluZSBWX1hBVUlQQ1NBTElHTkNIQU5HRSh4KSAoKHgpIDw8IFNfWEFVSVBDU0FMSUdOQ0hBTkdFKQogI2RlZmluZSBGX1hBVUlQQ1NBTElHTkNIQU5HRSAgICBWX1hBVUlQQ1NBTElHTkNIQU5HRSgxVSkKIAorI2RlZmluZSBTX1hHTV9JTlQgICAgMAorI2RlZmluZSBWX1hHTV9JTlQoeCkgKCh4KSA8PCBTX1hHTV9JTlQpCisjZGVmaW5lIEZfWEdNX0lOVCAgICBWX1hHTV9JTlQoMVUpCisKICNkZWZpbmUgQV9YR01fSU5UX0NBVVNFIDB4OGQ4CiAKICNkZWZpbmUgQV9YR01fWEFVSV9BQ1RfQ1RSTCAweDhkYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCBkMzE3OTFmLi5hNzU1NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtNjEsMTIgKzYxLDE5IEBACiAjZGVmaW5lIEZMMV9QR19PUkRFUiAoUEFHRV9TSVpFID4gODE5MiA/IDAgOiAxKQogCiAjZGVmaW5lIFNHRV9SWF9EUk9QX1RIUkVTIDE2CisjZGVmaW5lIFJYX1JFQ0xBSU1fUEVSSU9EIChIWi80KQogCiAvKgorICogTWF4IG51bWJlciBvZiBSeCBidWZmZXJzIHdlIHJlcGxlbmlzaCBhdCBhIHRpbWUuCisgKi8KKyNkZWZpbmUgTUFYX1JYX1JFRklMTCAxNlUKKy8qCiAgKiBQZXJpb2Qgb2YgdGhlIFR4IGJ1ZmZlciByZWNsYWltIHRpbWVyLiAgVGhpcyB0aW1lciBkb2VzIG5vdCBuZWVkIHRvIHJ1bgogICogZnJlcXVlbnRseSBhcyBUeCBidWZmZXJzIGFyZSB1c3VhbGx5IHJlY2xhaW1lZCBieSBuZXcgVHggcGFja2V0cy4KICAqLwogI2RlZmluZSBUWF9SRUNMQUlNX1BFUklPRCAoSFogLyA0KQorI2RlZmluZSBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LIDY0VQorI2RlZmluZSBUWF9SRUNMQUlNX0NIVU5LIDE2VQogCiAvKiBXUiBzaXplIGluIGJ5dGVzICovCiAjZGVmaW5lIFdSX0xFTiAoV1JfRkxJVFMgKiA4KQpAQCAtMzA0LDIxICszMTEsMjUgQEAKICAqCXJlY2xhaW1fY29tcGxldGVkX3R4IC0gcmVjbGFpbXMgY29tcGxldGVkIFR4IGRlc2NyaXB0b3JzCiAgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKICAqCUBxOiB0aGUgVHggcXVldWUgdG8gcmVjbGFpbSBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgZnJvbQorICoJQGNodW5rOiBtYXhpbXVtIG51bWJlciBvZiBkZXNjcmlwdG9ycyB0byByZWNsYWltCiAgKgogICoJUmVjbGFpbXMgVHggZGVzY3JpcHRvcnMgdGhhdCB0aGUgU0dFIGhhcyBpbmRpY2F0ZWQgaXQgaGFzIHByb2Nlc3NlZCwKICAqCWFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZCBidWZmZXJzIGlmIHBvc3NpYmxlLiAgQ2FsbGVkIHdpdGggdGhlIFR4CiAgKglxdWV1ZSdzIGxvY2sgaGVsZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHJlY2xhaW1fY29tcGxldGVkX3R4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJCQlzdHJ1Y3Qgc2dlX3R4cSAqcSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlY2xhaW1fY29tcGxldGVkX3R4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQkJc3RydWN0IHNnZV90eHEgKnEsCisJCQkJCQl1bnNpZ25lZCBpbnQgY2h1bmspCiB7CiAJdW5zaWduZWQgaW50IHJlY2xhaW0gPSBxLT5wcm9jZXNzZWQgLSBxLT5jbGVhbmVkOwogCisJcmVjbGFpbSA9IG1pbihjaHVuaywgcmVjbGFpbSk7CiAJaWYgKHJlY2xhaW0pIHsKIAkJZnJlZV90eF9kZXNjKGFkYXB0ZXIsIHEsIHJlY2xhaW0pOwogCQlxLT5jbGVhbmVkICs9IHJlY2xhaW07CiAJCXEtPmluX3VzZSAtPSByZWNsYWltOwogCX0KKwlyZXR1cm4gcS0+cHJvY2Vzc2VkIC0gcS0+Y2xlYW5lZDsKIH0KIAogLyoqCkBAIC0zMzQsNiArMzQ1LDE4IEBACiAJcmV0dXJuIHEtPmluX3VzZSAtIHIgPCAocS0+c2l6ZSA+PiAxKTsKIH0KIAorc3RhdGljIHZvaWQgY2xlYXJfcnhfZGVzYyhjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpxLCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqZCkKK3sKKwlpZiAocS0+dXNlX3BhZ2VzKSB7CisJCWlmIChkLT5wZ19jaHVuay5wYWdlKQorCQkJcHV0X3BhZ2UoZC0+cGdfY2h1bmsucGFnZSk7CisJCWQtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOworCX0gZWxzZSB7CisJCWtmcmVlX3NrYihkLT5za2IpOworCQlkLT5za2IgPSBOVUxMOworCX0KK30KKwogLyoqCiAgKglmcmVlX3J4X2J1ZnMgLSBmcmVlIHRoZSBSeCBidWZmZXJzIG9uIGFuIFNHRSBmcmVlIGxpc3QKICAqCUBwZGV2OiB0aGUgUENJIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFkYXB0ZXIKQEAgLTM1MSwxNCArMzc0LDcgQEAKIAogCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGQsIGRtYV9hZGRyKSwKIAkJCQkgcS0+YnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChxLT51c2VfcGFnZXMpIHsKLQkJCWlmIChkLT5wZ19jaHVuay5wYWdlKQotCQkJCXB1dF9wYWdlKGQtPnBnX2NodW5rLnBhZ2UpOwotCQkJZC0+cGdfY2h1bmsucGFnZSA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlrZnJlZV9za2IoZC0+c2tiKTsKLQkJCWQtPnNrYiA9IE5VTEw7Ci0JCX0KKwkJY2xlYXJfcnhfZGVzYyhxLCBkKTsKIAkJaWYgKCsrY2lkeCA9PSBxLT5zaXplKQogCQkJY2lkeCA9IDA7CiAJfQpAQCAtNDIzLDYgKzQzOSwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmluZ19mbF9kYihzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSkKK3sKKwlpZiAocS0+cGVuZF9jcmVkID49IHEtPmNyZWRpdHMgLyA0KSB7CisJCXEtPnBlbmRfY3JlZCA9IDA7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisJfQorfQorCiAvKioKICAqCXJlZmlsbF9mbCAtIHJlZmlsbCBhbiBTR0UgZnJlZS1idWZmZXIgbGlzdAogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCkBAIC00NjMsMTAgKzQ4Nyw3IEBACiAJCWVyciA9IGFkZF9vbmVfcnhfYnVmKGJ1Zl9zdGFydCwgcS0+YnVmX3NpemUsIGQsIHNkLCBxLT5nZW4sCiAJCQkJICAgICBhZGFwLT5wZGV2KTsKIAkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCWlmICghcS0+dXNlX3BhZ2VzKSB7Ci0JCQkJa2ZyZWVfc2tiKHNkLT5za2IpOwotCQkJCXNkLT5za2IgPSBOVUxMOwotCQkJfQorCQkJY2xlYXJfcnhfZGVzYyhxLCBzZCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC00NzgsMTkgKzQ5OSwxOSBAQAogCQkJc2QgPSBxLT5zZGVzYzsKIAkJCWQgPSBxLT5kZXNjOwogCQl9Ci0JCXEtPmNyZWRpdHMrKzsKIAkJY291bnQrKzsKIAl9Ci0Jd21iKCk7Ci0JaWYgKGxpa2VseShjb3VudCkpCi0JCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisKKwlxLT5jcmVkaXRzICs9IGNvdW50OworCXEtPnBlbmRfY3JlZCArPSBjb3VudDsKKwlyaW5nX2ZsX2RiKGFkYXAsIHEpOwogCiAJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZWZpbGxfZmwoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKmZsKQogewotCXJlZmlsbF9mbChhZGFwLCBmbCwgbWluKDE2VSwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksCisJcmVmaWxsX2ZsKGFkYXAsIGZsLCBtaW4oTUFYX1JYX1JFRklMTCwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksCiAJCSAgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVApOwogfQogCkBAIC01MTUsMTMgKzUzNiwxNSBAQAogCXdtYigpOwogCXRvLT5sZW5fZ2VuID0gY3B1X3RvX2JlMzIoVl9GTERfR0VOMShxLT5nZW4pKTsKIAl0by0+Z2VuMiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjIocS0+Z2VuKSk7Ci0JcS0+Y3JlZGl0cysrOwogCiAJaWYgKCsrcS0+cGlkeCA9PSBxLT5zaXplKSB7CiAJCXEtPnBpZHggPSAwOwogCQlxLT5nZW4gXj0gMTsKIAl9Ci0JdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfS0RPT1JCRUxMLCBWX0VHUkNOVFgocS0+Y250eHRfaWQpKTsKKworCXEtPmNyZWRpdHMrKzsKKwlxLT5wZW5kX2NyZWQrKzsKKwlyaW5nX2ZsX2RiKGFkYXAsIHEpOwogfQogCiAvKioKQEAgLTU4NSw4ICs2MDgsOCBAQAogCW1lbXNldChxLT50eHEsIDAsIHNpemVvZihzdHJ1Y3Qgc2dlX3R4cSkgKiBTR0VfVFhRX1BFUl9TRVQpOwogCXEtPnR4cV9zdG9wcGVkID0gMDsKIAlxLT50eF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uID0gTlVMTDsgLyogZm9yIHQzX3N0b3Bfc2dlX3RpbWVycygpICovCi0Ja2ZyZWUocS0+bHJvX2ZyYWdfdGJsKTsKLQlxLT5scm9fbmZyYWdzID0gcS0+bHJvX2ZyYWdfbGVuID0gMDsKKwlxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uID0gTlVMTDsKKwlxLT5scm9fZnJhZ190YmwubnJfZnJhZ3MgPSBxLT5scm9fZnJhZ190YmwubGVuID0gMDsKIH0KIAogCkBAIC03MzMsNyArNzU2LDkgQEAKIAkJcmV0dXJuIHNrYjsKIAl9CiAKLQlpZiAodW5saWtlbHkoZmwtPmNyZWRpdHMgPCBkcm9wX3RocmVzKSkKKwlpZiAodW5saWtlbHkoZmwtPmNyZWRpdHMgPCBkcm9wX3RocmVzKSAmJgorCSAgICByZWZpbGxfZmwoYWRhcCwgZmwsIG1pbihNQVhfUlhfUkVGSUxMLCBmbC0+c2l6ZSAtIGZsLT5jcmVkaXRzIC0gMSksCisJCSAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QKSA9PSAwKQogCQlnb3RvIHJlY3ljbGU7CiAKIHVzZV9vcmlnX2J1ZjoKQEAgLTgxMywxNCArODM4LDE1IEBACiAJCQkJICAgbGVuIC0gU0dFX1JYX1BVTExfTEVOKTsKIAkJbmV3c2tiLT5sZW4gPSBsZW47CiAJCW5ld3NrYi0+ZGF0YV9sZW4gPSBsZW4gLSBTR0VfUlhfUFVMTF9MRU47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbmV3c2tiLT5kYXRhX2xlbjsKIAl9IGVsc2UgewogCQlza2JfZmlsbF9wYWdlX2Rlc2MobmV3c2tiLCBza2Jfc2hpbmZvKG5ld3NrYiktPm5yX2ZyYWdzLAogCQkJCSAgIHNkLT5wZ19jaHVuay5wYWdlLAogCQkJCSAgIHNkLT5wZ19jaHVuay5vZmZzZXQsIGxlbik7CiAJCW5ld3NrYi0+bGVuICs9IGxlbjsKIAkJbmV3c2tiLT5kYXRhX2xlbiArPSBsZW47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbGVuOwogCX0KLQluZXdza2ItPnRydWVzaXplICs9IG5ld3NrYi0+ZGF0YV9sZW47CiAKIAlmbC0+Y3JlZGl0cy0tOwogCS8qCkBAIC0xMTYxLDcgKzExODcsNyBAQAogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxaWR4KTsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0JcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CisJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAljcmVkaXRzID0gcS0+c2l6ZSAtIHEtPmluX3VzZTsKIAluZGVzYyA9IGNhbGNfdHhfZGVzY3Moc2tiKTsKQEAgLTE1NzAsNyArMTU5Niw3IEBACiAJdW5zaWduZWQgaW50IG5kZXNjID0gY2FsY190eF9kZXNjc19vZmxkKHNrYiksIHBpZHgsIGdlbjsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0gICAgICBhZ2FpbjpyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxKTsKK2FnYWluOglyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxLCBUWF9SRUNMQUlNX0NIVU5LKTsKIAogCXJldCA9IGNoZWNrX2Rlc2NfYXZhaWwoYWRhcCwgcSwgc2tiLCBuZGVzYywgVFhRX09GTEQpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CkBAIC0xNjEyLDcgKzE2MzgsNyBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CiAKIAlzcGluX2xvY2soJnEtPmxvY2spOwotICAgICAgYWdhaW46cmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CithZ2FpbjoJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZxLT5zZW5kcSkpICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IGdlbiwgcGlkeDsKQEAgLTE5MzgsNiArMTk2NCw3IEBACiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcXMgLSAmYWRhcC0+c2dlLnFzWzBdKTsKIAogCWlmICh1bmxpa2VseShwLT52bGFuX3ZhbGlkKSkgewogCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOwpAQCAtMTk0NSwxMCArMTk3Miw4IEBACiAJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9WTEFORVhdKys7CiAJCWlmIChsaWtlbHkoZ3JwKSkKIAkJCWlmIChscm8pCi0JCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYigmcXMtPmxyb19tZ3IsIHNrYiwKLQkJCQkJCQkgICAgIGdycCwKLQkJCQkJCQkgICAgIG50b2hzKHAtPnZsYW4pLAotCQkJCQkJCSAgICAgcCk7CisJCQkJdmxhbl9ncm9fcmVjZWl2ZSgmcXMtPm5hcGksIGdycCwKKwkJCQkJCSBudG9ocyhwLT52bGFuKSwgc2tiKTsKIAkJCWVsc2UgewogCQkJCWlmICh1bmxpa2VseShwaS0+aXNjc2lfaXB2NGFkZHIgJiYKIAkJCQkgICAgaXNfYXJwKHNrYikpKSB7CkBAIC0xOTY1LDcgKzE5OTAsNyBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9IGVsc2UgaWYgKHJxLT5wb2xsaW5nKSB7CiAJCWlmIChscm8pCi0JCQlscm9fcmVjZWl2ZV9za2IoJnFzLT5scm9fbWdyLCBza2IsIHApOworCQkJbmFwaV9ncm9fcmVjZWl2ZSgmcXMtPm5hcGksIHNrYik7CiAJCWVsc2UgewogCQkJaWYgKHVubGlrZWx5KHBpLT5pc2NzaV9pcHY0YWRkciAmJiBpc19hcnAoc2tiKSkpCiAJCQkJY3hnYjNfYXJwX3Byb2Nlc3MoYWRhcCwgc2tiKTsKQEAgLTE5ODEsNTkgKzIwMDYsNiBAQAogfQogCiAvKioKLSAqCWxyb19mcmFtZV9vayAtIGNoZWNrIGlmIGFuIGluZ3Jlc3MgcGFja2V0IGlzIGVsaWdpYmxlIGZvciBMUk8KLSAqCUBwOiB0aGUgQ1BMIGhlYWRlciBvZiB0aGUgcGFja2V0Ci0gKgotICoJUmV0dXJucyB0cnVlIGlmIGEgcmVjZWl2ZWQgcGFja2V0IGlzIGVsaWdpYmxlIGZvciBMUk8uCi0gKglUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlOgotICoJLSBwYWNrZXQgaXMgVENQL0lQIEV0aGVybmV0IElJIChjaGVja2VkIGVsc2V3aGVyZSkKLSAqCS0gbm90IGFuIElQIGZyYWdtZW50Ci0gKgktIG5vIElQIG9wdGlvbnMKLSAqCS0gVENQL0lQIGNoZWNrc3VtcyBhcmUgY29ycmVjdAotICoJLSB0aGUgcGFja2V0IGlzIGZvciB0aGlzIGhvc3QKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbHJvX2ZyYW1lX29rKGNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpwKQotewotCWNvbnN0IHN0cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKikocCArIDEpOwotCWNvbnN0IHN0cnVjdCBpcGhkciAqaWggPSAoc3RydWN0IGlwaGRyICopKGVoICsgMSk7Ci0KLQlyZXR1cm4gKCooKHU4ICopcCArIDEpICYgMHg5MCkgPT0gMHgxMCAmJiBwLT5jc3VtID09IGh0b25zKDB4ZmZmZikgJiYKLQkJZWgtPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApICYmIGloLT5paGwgPT0gKHNpemVvZigqaWgpID4+IDIpOwotfQotCi1zdGF0aWMgaW50IHQzX2dldF9scm9faGVhZGVyKHZvaWQgKiplaCwgIHZvaWQgKippcGgsIHZvaWQgKip0Y3BoLAotCQkJICAgICB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKLXsKLQljb25zdCBzdHJ1Y3QgY3BsX3J4X3BrdCAqY3BsID0gcHJpdjsKLQotCWlmICghbHJvX2ZyYW1lX29rKGNwbCkpCi0JCXJldHVybiAtMTsKLQotCSplaCA9IChzdHJ1Y3QgZXRoaGRyICopKGNwbCArIDEpOwotCSppcGggPSAoc3RydWN0IGlwaGRyICopKChzdHJ1Y3QgZXRoaGRyICopKmVoICsgMSk7Ci0JKnRjcGggPSAoc3RydWN0IHRjcGhkciAqKSgoc3RydWN0IGlwaGRyICopKmlwaCArIDEpOwotCi0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0M19nZXRfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgICAgdm9pZCAqcHJpdikKLXsKLQl2b2lkICplaDsKLQotCXJldHVybiB0M19nZXRfbHJvX2hlYWRlcigmZWgsIGlwaCwgdGNwaCwgaGRyX2ZsYWdzLCBwcml2KTsKLX0KLQotc3RhdGljIGludCB0M19nZXRfZnJhZ19oZWFkZXIoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZywgdm9pZCAqKmVoLAotCQkJICAgICAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgICAgdm9pZCAqcHJpdikKLXsKLQlyZXR1cm4gdDNfZ2V0X2xyb19oZWFkZXIoZWgsIGlwaCwgdGNwaCwgaGRyX2ZsYWdzLCBwcml2KTsKLX0KLQotLyoqCiAgKglscm9fYWRkX3BhZ2UgLSBhZGQgYSBwYWdlIGNodW5rIHRvIGFuIExSTyBzZXNzaW9uCiAgKglAYWRhcDogdGhlIGFkYXB0ZXIKICAqCUBxczogdGhlIGFzc29jaWF0ZWQgcXVldWUgc2V0CkBAIC0yMDQ5LDggKzIwMjEsOSBAQAogewogCXN0cnVjdCByeF9zd19kZXNjICpzZCA9ICZmbC0+c2Rlc2NbZmwtPmNpZHhdOwogCXN0cnVjdCBjcGxfcnhfcGt0ICpjcGw7Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqcnhfZnJhZyA9IHFzLT5scm9fZnJhZ190Ymw7Ci0JaW50IG5yX2ZyYWdzID0gcXMtPmxyb19uZnJhZ3MsIGZyYWdfbGVuID0gcXMtPmxyb19mcmFnX2xlbjsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpyeF9mcmFnID0gcXMtPmxyb19mcmFnX3RibC5mcmFnczsKKwlpbnQgbnJfZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzOworCWludCBmcmFnX2xlbiA9IHFzLT5scm9fZnJhZ190YmwubGVuOwogCWludCBvZmZzZXQgPSAwOwogCiAJaWYgKCFucl9mcmFncykgewpAQCAtMjA2NCwxOCArMjAzNywyMCBAQAogCXBjaV91bm1hcF9zaW5nbGUoYWRhcC0+cGRldiwgcGNpX3VubWFwX2FkZHIoc2QsIGRtYV9hZGRyKSwKIAkJCSBmbC0+YnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKKwlwcmVmZXRjaCgmcXMtPmxyb19mcmFnX3RibCk7CisKIAlyeF9mcmFnICs9IG5yX2ZyYWdzOwogCXJ4X2ZyYWctPnBhZ2UgPSBzZC0+cGdfY2h1bmsucGFnZTsKIAlyeF9mcmFnLT5wYWdlX29mZnNldCA9IHNkLT5wZ19jaHVuay5vZmZzZXQgKyBvZmZzZXQ7CiAJcnhfZnJhZy0+c2l6ZSA9IGxlbjsKIAlmcmFnX2xlbiArPSBsZW47Ci0JcXMtPmxyb19uZnJhZ3MrKzsKLQlxcy0+bHJvX2ZyYWdfbGVuID0gZnJhZ19sZW47CisJcXMtPmxyb19mcmFnX3RibC5ucl9mcmFncysrOworCXFzLT5scm9fZnJhZ190YmwubGVuID0gZnJhZ19sZW47CiAKIAlpZiAoIWNvbXBsZXRlKQogCQlyZXR1cm47CiAKLQlxcy0+bHJvX25mcmFncyA9IHFzLT5scm9fZnJhZ19sZW4gPSAwOworCXFzLT5scm9fZnJhZ190YmwuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJY3BsID0gcXMtPmxyb192YTsKIAogCWlmICh1bmxpa2VseShjcGwtPnZsYW5fdmFsaWQpKSB7CkBAIC0yMDg0LDM2ICsyMDU5LDE1IEBACiAJCXN0cnVjdCB2bGFuX2dyb3VwICpncnAgPSBwaS0+dmxhbl9ncnA7CiAKIAkJaWYgKGxpa2VseShncnAgIT0gTlVMTCkpIHsKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9mcmFncygmcXMtPmxyb19tZ3IsCi0JCQkJCQkgICAgICAgcXMtPmxyb19mcmFnX3RibCwKLQkJCQkJCSAgICAgICBmcmFnX2xlbiwgZnJhZ19sZW4sCi0JCQkJCQkgICAgICAgZ3JwLCBudG9ocyhjcGwtPnZsYW4pLAotCQkJCQkJICAgICAgIGNwbCwgMCk7Ci0JCQlyZXR1cm47CisJCQl2bGFuX2dyb19mcmFncygmcXMtPm5hcGksIGdycCwgbnRvaHMoY3BsLT52bGFuKSwKKwkJCQkgICAgICAgJnFzLT5scm9fZnJhZ190YmwpOworCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JbHJvX3JlY2VpdmVfZnJhZ3MoJnFzLT5scm9fbWdyLCBxcy0+bHJvX2ZyYWdfdGJsLAotCQkJICBmcmFnX2xlbiwgZnJhZ19sZW4sIGNwbCwgMCk7Ci19CisJbmFwaV9ncm9fZnJhZ3MoJnFzLT5uYXBpLCAmcXMtPmxyb19mcmFnX3RibCk7CiAKLS8qKgotICoJaW5pdF9scm9fbWdyIC0gaW5pdGlhbGl6ZSBhIExSTyBtYW5hZ2VyIG9iamVjdAotICoJQGxyb19tZ3I6IHRoZSBMUk8gbWFuYWdlciBvYmplY3QKLSAqLwotc3RhdGljIHZvaWQgaW5pdF9scm9fbWdyKHN0cnVjdCBzZ2VfcXNldCAqcXMsIHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21ncikKLXsKLQlscm9fbWdyLT5kZXYgPSBxcy0+bmV0ZGV2OwotCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKLQlscm9fbWdyLT5mcmFnX2FsaWduX3BhZCA9IE5FVF9JUF9BTElHTjsKLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPm1heF9kZXNjID0gVDNfTUFYX0xST19TRVM7Ci0JbHJvX21nci0+bHJvX2FyciA9IHFzLT5scm9fZGVzYzsKLQlscm9fbWdyLT5nZXRfZnJhZ19oZWFkZXIgPSB0M19nZXRfZnJhZ19oZWFkZXI7Ci0JbHJvX21nci0+Z2V0X3NrYl9oZWFkZXIgPSB0M19nZXRfc2tiX2hlYWRlcjsKLQlscm9fbWdyLT5tYXhfYWdnciA9IFQzX01BWF9MUk9fTUFYX1BLVFM7Ci0JaWYgKGxyb19tZ3ItPm1heF9hZ2dyID4gTUFYX1NLQl9GUkFHUykKLQkJbHJvX21nci0+bWF4X2FnZ3IgPSBNQVhfU0tCX0ZSQUdTOworb3V0OgorCXFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfdGJsLmxlbiA9IDA7CiB9CiAKIC8qKgpAQCAtMjM1NiwxMCArMjMxMCw2IEBACiAJfQogCiAJZGVsaXZlcl9wYXJ0aWFsX2J1bmRsZSgmYWRhcC0+dGRldiwgcSwgb2ZmbG9hZF9za2JzLCBuZ2F0aGVyZWQpOwotCWxyb19mbHVzaF9hbGwoJnFzLT5scm9fbWdyKTsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX0FHR1JdID0gcXMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX0ZMVVNIRURdID0gcXMtPmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX05PX0RFU0NdID0gcXMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogCWlmIChzbGVlcGluZykKIAkJY2hlY2tfcmluZ19kYihhZGFwLCBxcywgc2xlZXBpbmcpOwpAQCAtMjc3NSw3ICsyNzI1LDggQEAKICAqLwogdm9pZCB0M19zZ2VfZXJyX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1bnNpZ25lZCBpbnQgdiwgc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UpOworCXVuc2lnbmVkIGludCB2LCBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSkgJgorCQkJCSB+Rl9GTEVNUFRZOwogCiAJaWYgKHN0YXR1cyAmIFNHRV9QQVJFUlIpCiAJCUNIX0FMRVJUKGFkYXB0ZXIsICJTR0UgcGFyaXR5IGVycm9yICgweCV4KVxuIiwKQEAgLTI4MDUsMTMgKzI3NTYsMTMgQEAKIH0KIAogLyoqCi0gKglzZ2VfdGltZXJfY2IgLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglzZ2VfdGltZXJfdHggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CiAgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KICAqCiAgKglSdW5zIHBlcmlvZGljYWxseSBmcm9tIGEgdGltZXIgdG8gcGVyZm9ybSBtYWludGVuYW5jZSBvZiBhbiBTR0UgcXVldWUKICAqCXNldC4gIEl0IHBlcmZvcm1zIHR3byB0YXNrczoKICAqCi0gKglhKSBDbGVhbnMgdXAgYW55IGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycyB0aGF0IG1heSBzdGlsbCBiZSBwZW5kaW5nLgorICoJQ2xlYW5zIHVwIGFueSBjb21wbGV0ZWQgVHggZGVzY3JpcHRvcnMgdGhhdCBtYXkgc3RpbGwgYmUgcGVuZGluZy4KICAqCU5vcm1hbCBkZXNjcmlwdG9yIGNsZWFudXAgaGFwcGVucyB3aGVuIG5ldyBwYWNrZXRzIGFyZSBhZGRlZCB0byBhIFR4CiAgKglxdWV1ZSBzbyB0aGlzIHRpbWVyIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudCBhbmQgZG9lcyBhbnkgY2xlYW51cCBvbmx5CiAgKglpZiB0aGUgVHggcXVldWUgaGFzIG5vdCBzZWVuIGFueSBuZXcgcGFja2V0cyBpbiBhIHdoaWxlLiAgV2UgbWFrZSBhCkBAIC0yODIxLDUxICsyNzcyLDg3IEBACiAgKgl1cCkuICBTaW5jZSBjb250cm9sIHF1ZXVlcyB1c2UgaW1tZWRpYXRlIGRhdGEgZXhjbHVzaXZlbHkgd2UgZG9uJ3QKICAqCWJvdGhlciBjbGVhbmluZyB0aGVtIHVwIGhlcmUuCiAgKgotICoJYikgUmVwbGVuaXNoZXMgUnggcXVldWVzIHRoYXQgaGF2ZSBydW4gb3V0IGR1ZSB0byBtZW1vcnkgc2hvcnRhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHNnZV90aW1lcl90eCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNnZV9xc2V0ICpxcyA9IChzdHJ1Y3Qgc2dlX3FzZXQgKilkYXRhOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYocXMtPm5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaS0+YWRhcHRlcjsKKwl1bnNpZ25lZCBpbnQgdGJkW1NHRV9UWFFfUEVSX1NFVF0gPSB7MCwgMH07CisJdW5zaWduZWQgbG9uZyBuZXh0X3BlcmlvZDsKKworCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKKwkJdGJkW1RYUV9FVEhdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0sCisJCQkJCQkgICAgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyk7CisJCXNwaW5fdW5sb2NrKCZxcy0+dHhxW1RYUV9FVEhdLmxvY2spOworCX0KKwlpZiAoc3Bpbl90cnlsb2NrKCZxcy0+dHhxW1RYUV9PRkxEXS5sb2NrKSkgeworCQl0YmRbVFhRX09GTERdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdLAorCQkJCQkJICAgICBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LKTsKKwkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOworCX0KKworCW5leHRfcGVyaW9kID0gVFhfUkVDTEFJTV9QRVJJT0QgPj4KKwkJICAgICAgKG1heCh0YmRbVFhRX0VUSF0sIHRiZFtUWFFfT0ZMRF0pIC8KKwkJICAgICAgIFRYX1JFQ0xBSU1fVElNRVJfQ0hVTkspOworCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBuZXh0X3BlcmlvZCk7Cit9CisKKy8qCisgKglzZ2VfdGltZXJfcnggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KKyAqCisgKglhKSBSZXBsZW5pc2hlcyBSeCBxdWV1ZXMgdGhhdCBoYXZlIHJ1biBvdXQgZHVlIHRvIG1lbW9yeSBzaG9ydGFnZS4KICAqCU5vcm1hbGx5IG5ldyBSeCBidWZmZXJzIGFyZSBhZGRlZCB3aGVuIGV4aXN0aW5nIG9uZXMgYXJlIGNvbnN1bWVkIGJ1dAogICoJd2hlbiBvdXQgb2YgbWVtb3J5IGEgcXVldWUgY2FuIGJlY29tZSBlbXB0eS4gIFdlIHRyeSB0byBhZGQgb25seSBhIGZldwogICoJYnVmZmVycyBoZXJlLCB0aGUgcXVldWUgd2lsbCBiZSByZXBsZW5pc2hlZCBmdWxseSBhcyB0aGVzZSBuZXcgYnVmZmVycwogICoJYXJlIHVzZWQgdXAgaWYgbWVtb3J5IHNob3J0YWdlIGhhcyBzdWJzaWRlZC4KKyAqCisgKgliKSBSZXR1cm4gY29hbGVzY2VkIHJlc3BvbnNlIHF1ZXVlIGNyZWRpdHMgaW4gY2FzZSBhIHJlc3BvbnNlIHF1ZXVlIGlzCisgKglzdGFydmVkLgorICoKICAqLwotc3RhdGljIHZvaWQgc2dlX3RpbWVyX2NiKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHNnZV90aW1lcl9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3BpbmxvY2tfdCAqbG9jazsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gKHN0cnVjdCBzZ2VfcXNldCAqKWRhdGE7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBxcy0+YWRhcDsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KHFzLT5uZXRkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CisJdTMyIHN0YXR1czsKIAotCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0pOwotCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKTsKLQl9Ci0JaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdKTsKLQkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOwotCX0KLQlsb2NrID0gKGFkYXAtPmZsYWdzICYgVVNJTkdfTVNJWCkgPyAmcXMtPnJzcHEubG9jayA6Ci0JCQkJCSAgICAmYWRhcC0+c2dlLnFzWzBdLnJzcHEubG9jazsKLQlpZiAoc3Bpbl90cnlsb2NrX2lycShsb2NrKSkgewotCQlpZiAoIW5hcGlfaXNfc2NoZWR1bGVkKCZxcy0+bmFwaSkpIHsKLQkJCXUzMiBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTKTsKKwlsb2NrID0gYWRhcC0+cGFyYW1zLnJldiA+IDAgPworCSAgICAgICAmcXMtPnJzcHEubG9jayA6ICZhZGFwLT5zZ2UucXNbMF0ucnNwcS5sb2NrOwogCi0JCQlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKLQkJCQlfX3JlZmlsbF9mbChhZGFwLCAmcXMtPmZsWzBdKTsKLQkJCWlmIChxcy0+ZmxbMV0uY3JlZGl0cyA8IHFzLT5mbFsxXS5zaXplKQotCQkJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCWlmICghc3Bpbl90cnlsb2NrX2lycShsb2NrKSkKKwkJZ290byBvdXQ7CiAKLQkJCWlmIChzdGF0dXMgJiAoMSA8PCBxcy0+cnNwcS5jbnR4dF9pZCkpIHsKLQkJCQlxcy0+cnNwcS5zdGFydmVkKys7Ci0JCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKLQkJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKLQkJCQkJcXMtPnJzcHEuY3JlZGl0cy0tOwotCQkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKLQkJCQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfUlNQUV9GTF9TVEFUVVMsCi0JCQkJCQkgICAgIDEgPDwgcXMtPnJzcHEuY250eHRfaWQpOwotCQkJCX0KKwlpZiAobmFwaV9pc19zY2hlZHVsZWQoJnFzLT5uYXBpKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoYWRhcC0+cGFyYW1zLnJldiA8IDQpIHsKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUyk7CisKKwkJaWYgKHN0YXR1cyAmICgxIDw8IHFzLT5yc3BxLmNudHh0X2lkKSkgeworCQkJcXMtPnJzcHEuc3RhcnZlZCsrOworCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKKwkJCQlxcy0+cnNwcS5jcmVkaXRzLS07CisJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKKwkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKKwkJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUywKKwkJCQkJICAgICAxIDw8IHFzLT5yc3BxLmNudHh0X2lkKTsKIAkJCX0KIAkJfQotCQlzcGluX3VubG9ja19pcnEobG9jayk7CiAJfQotCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBUWF9SRUNMQUlNX1BFUklPRCk7CisKKwlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKKwkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFswXSk7CisJaWYgKHFzLT5mbFsxXS5jcmVkaXRzIDwgcXMtPmZsWzFdLnNpemUpCisJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworb3V0OgorCW1vZF90aW1lcigmcXMtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CiB9CiAKIC8qKgpAQCAtMjkwNiwxMCArMjg5MywxMCBAQAogewogCWludCBpLCBhdmFpbCwgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnEgPSAmYWRhcHRlci0+c2dlLnFzW2lkXTsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IgPSAmcS0+bHJvX21ncjsKIAogCWluaXRfcXNldF9jbnR4dChxLCBpZCk7Ci0Jc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9jYiwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl90eCwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9yeCwgKHVuc2lnbmVkIGxvbmcpcSk7CiAKIAlxLT5mbFswXS5kZXNjID0gYWxsb2NfcmluZyhhZGFwdGVyLT5wZGV2LCBwLT5mbF9zaXplLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyksCkBAIC0yOTg2LDEwICsyOTczLDYgQEAKIAlxLT5mbFswXS5vcmRlciA9IEZMMF9QR19PUkRFUjsKIAlxLT5mbFsxXS5vcmRlciA9IEZMMV9QR19PUkRFUjsKIAotCXEtPmxyb19mcmFnX3RibCA9IGtjYWxsb2MoTUFYX0ZSQU1FX1NJWkUgLyBGTDFfUEdfQ0hVTktfU0laRSArIDEsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlxLT5scm9fbmZyYWdzID0gcS0+bHJvX2ZyYWdfbGVuID0gMDsKIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT5zZ2UucmVnX2xvY2spOwogCiAJLyogRkwgdGhyZXNob2xkIGNvbXBhcmlzb24gdXNlcyA8ICovCkBAIC0zMDQxLDggKzMwMjQsNiBAQAogCXEtPnR4X3EgPSBuZXRkZXZxOwogCXQzX3VwZGF0ZV9xc2V0X2NvYWxlc2NlKHEsIHApOwogCi0JaW5pdF9scm9fbWdyKHEsIGxyb19tZ3IpOwotCiAJYXZhaWwgPSByZWZpbGxfZmwoYWRhcHRlciwgJnEtPmZsWzBdLCBxLT5mbFswXS5zaXplLAogCQkJICBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCk7CiAJaWYgKCFhdmFpbCkgewpAQCAtMzA2NCw2ICszMDQ1LDggQEAKIAkJICAgICBWX05FV1RJTUVSKHEtPnJzcHEuaG9sZG9mZl90bXIpKTsKIAogCW1vZF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKKwltb2RfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CisKIAlyZXR1cm4gMDsKIAogZXJyX3VubG9jazoKQEAgLTMwODgsNiArMzA3MSw4IEBACiAKIAkJaWYgKHEtPnR4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24pCiAJCQlkZWxfdGltZXJfc3luYygmcS0+dHhfcmVjbGFpbV90aW1lcik7CisJCWlmIChxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQorCQkJZGVsX3RpbWVyX3N5bmMoJnEtPnJ4X3JlY2xhaW1fdGltZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKaW5kZXggYWMyYTk3NC4uZmYyNjJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCkBAIC0xMTUzLDYgKzExNTMsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB0M19nYXRlX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyICpyeF9jZmcsCisJCQkgICAgICAgdTMyICpyeF9oYXNoX2hpZ2gsIHUzMiAqcnhfaGFzaF9sb3cpCit7CisJLyogc3RvcCBSeCB1bmljYXN0IHRyYWZmaWMgKi8KKwl0M19tYWNfZGlzYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisKKwkvKiBzdG9wIGJyb2FkY2FzdCwgbXVsdGljYXN0LCBwcm9taXNjdW91cyBtb2RlIHRyYWZmaWMgKi8KKwkqcnhfY2ZnID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcpOworCXQzX3NldF9yZWdfZmllbGQobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcsCisJCQkgRl9FTkhBU0hNQ0FTVCB8IEZfRElTQkNBU1QgfCBGX0NPUFlBTExGUkFNRVMsCisJCQkgRl9ESVNCQ0FTVCk7CisKKwkqcnhfaGFzaF9oaWdoID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0hJR0gpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgMCk7CisKKwkqcnhfaGFzaF9sb3cgPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgMCk7CisKKwkvKiBMZWF2ZSB0aW1lIHRvIGRyYWluIG1heCBSWCBmaWZvICovCisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCB0M19vcGVuX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyIHJ4X2NmZywKKwkJCSAgICAgICB1MzIgcnhfaGFzaF9oaWdoLCB1MzIgcnhfaGFzaF9sb3cpCit7CisJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisJdDNfc2V0X3JlZ19maWVsZChtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRywKKwkJCSBGX0VOSEFTSE1DQVNUIHwgRl9ESVNCQ0FTVCB8IEZfQ09QWUFMTEZSQU1FUywKKwkJCSByeF9jZmcpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgcnhfaGFzaF9oaWdoKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgcnhfaGFzaF9sb3cpOworfQogCiAvKioKICAqCXQzX2xpbmtfY2hhbmdlZCAtIGhhbmRsZSBpbnRlcmZhY2UgbGluayBjaGFuZ2VzCkBAIC0xMTcwLDkgKzEyMDIsMzIgQEAKIAlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CiAJc3RydWN0IGNtYWMgKm1hYyA9ICZwaS0+bWFjOwogCXN0cnVjdCBsaW5rX2NvbmZpZyAqbGMgPSAmcGktPmxpbmtfY29uZmlnOworCWludCBmb3JjZV9saW5rX2Rvd24gPSAwOwogCiAJcGh5LT5vcHMtPmdldF9saW5rX3N0YXR1cyhwaHksICZsaW5rX29rLCAmc3BlZWQsICZkdXBsZXgsICZmYyk7CiAKKwlpZiAoIWxjLT5saW5rX29rICYmIGxpbmtfb2spIHsKKwkJdTMyIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdzsKKwkJdTMyIHN0YXR1czsKKworCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgcG9ydF9pZCk7CisJCXQzX2dhdGVfcnhfdHJhZmZpYyhtYWMsICZyeF9jZmcsICZyeF9oYXNoX2hpZ2gsICZyeF9oYXNoX2xvdyk7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOworCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIG1hYy0+b2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAmIEZfTElOS0ZBVUxUQ0hBTkdFKSB7CisJCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisJCQlmb3JjZV9saW5rX2Rvd24gPSAxOworCQl9CisJCXQzX29wZW5fcnhfdHJhZmZpYyhtYWMsIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdyk7CisKKwkJaWYgKGZvcmNlX2xpbmtfZG93bikgeworCQkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJaWYgKGxjLT5yZXF1ZXN0ZWRfZmMgJiBQQVVTRV9BVVRPTkVHKQogCQlmYyAmPSBsYy0+cmVxdWVzdGVkX2ZjOwogCWVsc2UKQEAgLTEyMDIsNiArMTI1Nyw1NyBAQAogCXQzX29zX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBwb3J0X2lkLCBsaW5rX29rLCBzcGVlZCwgZHVwbGV4LCBmYyk7CiB9CiAKK3ZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIHBvcnRfaWQpOworCXN0cnVjdCBjbWFjICptYWMgPSAmcGktPm1hYzsKKwlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CisJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwaS0+bGlua19jb25maWc7CisJaW50IGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjLCBsaW5rX2ZhdWx0OworCXUzMiByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3c7CisKKwl0M19nYXRlX3J4X3RyYWZmaWMobWFjLCAmcnhfY2ZnLCAmcnhfaGFzaF9oaWdoLCAmcnhfaGFzaF9sb3cpOworCisJaWYgKGFkYXB0ZXItPnBhcmFtcy5yZXYgPiAwICYmIHVzZXNfeGF1aShhZGFwdGVyKSkKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwgMCk7CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fUlhfQ1RSTCArIG1hYy0+b2Zmc2V0LCAwKTsKKwl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwl0M19vcGVuX3J4X3RyYWZmaWMobWFjLCByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3cpOworCisJbGlua19mYXVsdCA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsCisJCQkJIEFfWEdNX0lOVF9TVEFUVVMgKyBtYWMtPm9mZnNldCk7CisJbGlua19mYXVsdCAmPSBGX0xJTktGQVVMVENIQU5HRTsKKworCXBoeS0+b3BzLT5nZXRfbGlua19zdGF0dXMocGh5LCAmbGlua19vaywgJnNwZWVkLCAmZHVwbGV4LCAmZmMpOworCisJaWYgKGxpbmtfZmF1bHQpIHsKKwkJbGMtPmxpbmtfb2sgPSAwOworCQlsYy0+c3BlZWQgPSBTUEVFRF9JTlZBTElEOworCQlsYy0+ZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisKKwkJdDNfb3NfbGlua19mYXVsdChhZGFwdGVyLCBwb3J0X2lkLCAwKTsKKworCQkvKiBBY2NvdW50IGxpbmsgZmF1bHRzIG9ubHkgd2hlbiB0aGUgcGh5IHJlcG9ydHMgYSBsaW5rIHVwICovCisJCWlmIChsaW5rX29rKQorCQkJbWFjLT5zdGF0cy5saW5rX2ZhdWx0cysrOworCisJCW1zbGVlcCgxMDAwKTsKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCX0gZWxzZSB7CisJCWlmIChsaW5rX29rKQorCQkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwKKwkJCQkgICAgIEZfVFhBQ1RFTkFCTEUgfCBGX1JYRU4pOworCisJCXBpLT5saW5rX2ZhdWx0ID0gMDsKKwkJbGMtPmxpbmtfb2sgPSAodW5zaWduZWQgY2hhcilsaW5rX29rOworCQlsYy0+c3BlZWQgPSBzcGVlZCA8IDAgPyBTUEVFRF9JTlZBTElEIDogc3BlZWQ7CisJCWxjLT5kdXBsZXggPSBkdXBsZXggPCAwID8gRFVQTEVYX0lOVkFMSUQgOiBkdXBsZXg7CisJCXQzX29zX2xpbmtfZmF1bHQoYWRhcHRlciwgcG9ydF9pZCwgbGlua19vayk7CisJfQorfQorCiAvKioKICAqCXQzX2xpbmtfc3RhcnQgLSBhcHBseSBsaW5rIGNvbmZpZ3VyYXRpb24gdG8gTUFDL1BIWQogICoJQHBoeTogdGhlIFBIWSB0byBzZXR1cApAQCAtMTMyMyw3ICsxNDI5LDcgQEAKICNkZWZpbmUgTUM3X0lOVFJfTUFTSyAoRl9BRSB8IEZfVUUgfCBGX0NFIHwgVl9QRShNX1BFKSkKICNkZWZpbmUgWEdNX0lOVFJfTUFTSyAoVl9UWEZJRk9fUFJUWV9FUlIoTV9UWEZJRk9fUFJUWV9FUlIpIHwgXAogCQkgICAgICAgVl9SWEZJRk9fUFJUWV9FUlIoTV9SWEZJRk9fUFJUWV9FUlIpIHwgXAotCQkgICAgICAgRl9UWEZJRk9fVU5ERVJSVU4gfCBGX1JYRklGT19PVkVSRkxPVykKKwkJICAgICAgIEZfVFhGSUZPX1VOREVSUlVOKQogI2RlZmluZSBQQ0lYX0lOVFJfTUFTSyAoRl9NU1RERVRQQVJFUlIgfCBGX1NJR1RBUkFCVCB8IEZfUkNWVEFSQUJUIHwgXAogCQkJRl9SQ1ZNU1RBQlQgfCBGX1NJR1NZU0VSUiB8IEZfREVUUEFSRVJSIHwgXAogCQkJRl9TUExDTVBESVMgfCBGX1VOWFNQTENNUCB8IEZfUkNWU1BMQ01QRVJSIHwgXApAQCAtMTM2MCwxMSArMTQ2NiwxMSBAQAogCQkgICAgICAgVl9UWDFUUFBBUkVSUkVOQihNX1RYMVRQUEFSRVJSRU5CKSB8IFwKIAkJICAgICAgIFZfUlhUUFBBUkVSUkVOQihNX1JYVFBQQVJFUlJFTkIpIHwgXAogCQkgICAgICAgVl9NQ0FQQVJFUlJFTkIoTV9NQ0FQQVJFUlJFTkIpKQorI2RlZmluZSBYR01fRVhUUkFfSU5UUl9NQVNLIChGX0xJTktGQVVMVENIQU5HRSkKICNkZWZpbmUgUExfSU5UUl9NQVNLIChGX1QzREJHIHwgRl9YR01BQzBfMCB8IEZfWEdNQUMwXzEgfCBGX01DNUEgfCBGX1BNMV9UWCB8IFwKIAkJICAgICAgRl9QTTFfUlggfCBGX1VMUDJfVFggfCBGX1VMUDJfUlggfCBGX1RQMSB8IEZfQ0lNIHwgXAogCQkgICAgICBGX01DN19DTSB8IEZfTUM3X1BNVFggfCBGX01DN19QTVJYIHwgRl9TR0UzIHwgRl9QQ0lNMCB8IFwKIAkJICAgICAgRl9NUFMwIHwgRl9DUExfU1dJVENIKQotCiAvKgogICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBQQ0lYMSBtb2R1bGUuCiAgKi8KQEAgLTE2OTUsNyArMTgwMSwxNCBAQAogc3RhdGljIGludCBtYWNfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1bnNpZ25lZCBpbnQgaWR4KQogewogCXN0cnVjdCBjbWFjICptYWMgPSAmYWRhcDJwaW5mbyhhZGFwLCBpZHgpLT5tYWM7Ci0JdTMyIGNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpOworCS8qCisJICogV2UgbWFzayBvdXQgaW50ZXJydXB0IGNhdXNlcyBmb3Igd2hpY2ggd2UncmUgbm90IHRha2luZyBpbnRlcnJ1cHRzLgorCSAqIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSBwb2xsaW5nIGxvZ2ljIHRvIG1vbml0b3Igc29tZSBvZiB0aGUgb3RoZXIKKwkgKiBjb25kaXRpb25zIHdoZW4gdGFraW5nIGludGVycnVwdHMgd291bGQgaW1wb3NlIHRvbyBtdWNoIGxvYWQgb24gdGhlCisJICogc3lzdGVtLgorCSAqLworCXUzMiBjYXVzZSA9IHQzX3JlYWRfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0KSAmCisJCSAgICB+Rl9SWEZJRk9fT1ZFUkZMT1c7CiAKIAlpZiAoY2F1c2UgJiBWX1RYRklGT19QUlRZX0VSUihNX1RYRklGT19QUlRZX0VSUikpIHsKIAkJbWFjLT5zdGF0cy50eF9maWZvX3Bhcml0eV9lcnIrKzsKQEAgLTE3MTUsMTAgKzE4MjgsMjAgQEAKIAkJbWFjLT5zdGF0cy54YXVpX3Bjc19jdGNfZXJyKys7CiAJaWYgKGNhdXNlICYgRl9YQVVJUENTQUxJR05DSEFOR0UpCiAJCW1hYy0+c3RhdHMueGF1aV9wY3NfYWxpZ25fY2hhbmdlKys7CisJaWYgKGNhdXNlICYgRl9YR01fSU5UKSB7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwKKwkJCQkgQV9YR01fSU5UX0VOQUJMRSArIG1hYy0+b2Zmc2V0LAorCQkJCSBGX1hHTV9JTlQsIDApOworCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXAsIGlkeCk7CisJfQogCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0LCBjYXVzZSk7CisKIAlpZiAoY2F1c2UgJiBYR01fSU5UUl9GQVRBTCkKIAkJdDNfZmF0YWxfZXJyKGFkYXApOworCiAJcmV0dXJuIGNhdXNlICE9IDA7CiB9CiAKQEAgLTE5MjQsNiArMjA0NywyMiBAQAogCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfSU5UX0NBVVNFMCk7CS8qIGZsdXNoICovCiB9CiAKK3ZvaWQgdDNfeGdtX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpZHgpOworCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCSAgICAgWEdNX0VYVFJBX0lOVFJfTUFTSyk7Cit9CisKK3ZvaWQgdDNfeGdtX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgaWR4KTsKKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9YR01fSU5UX0RJU0FCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJICAgICAweDdmZik7Cit9CisKIC8qKgogICoJdDNfcG9ydF9pbnRyX2VuYWJsZSAtIGVuYWJsZSBwb3J0LXNwZWNpZmljIGludGVycnVwdHMKICAqCUBhZGFwdGVyOiBhc3NvY2lhdGVkIGFkYXB0ZXIKQEAgLTM2MTcsNyArMzc1NiwxNSBAQAogCWFkYXB0ZXItPnBhcmFtcy5pbmZvID0gYWk7CiAJYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9IGFpLT5ucG9ydHM7CiAJYWRhcHRlci0+cGFyYW1zLnJldiA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfUkVWKTsKLQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMDsKKwkvKgorCSAqIFdlIHVzZWQgdG8gb25seSBydW4gdGhlICJhZGFwdGVyIGNoZWNrIHRhc2siIG9uY2UgYSBzZWNvbmQgaWYKKwkgKiB3ZSBoYWQgUEhZcyB3aGljaCBkaWRuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHRzICh3ZSB3b3VsZCBjaGVjaworCSAqIHRoZWlyIGxpbmsgc3RhdHVzIG9uY2UgYSBzZWNvbmQpLiAgTm93IHdlIGNoZWNrIG90aGVyIGNvbmRpdGlvbnMKKwkgKiBpbiB0aGF0IHJvdXRpbmUgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW1wb3NlIGEgdmVyeSBoaWdoCisJICogaW50ZXJydXB0IGxvYWQgb24gdGhlIHN5c3RlbS4gIEFzIHN1Y2gsIHdlIG5vdyBhbHdheXMgc2NhbiB0aGUKKwkgKiBhZGFwdGVyIHN0YXRlIG9uY2UgYSBzZWNvbmQgLi4uCisJICovCisJYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA9IDEwOwogCWFkYXB0ZXItPnBhcmFtcy5zdGF0c191cGRhdGVfcGVyaW9kID0gaXNfMTBHKGFkYXB0ZXIpID8KIAkgICAgTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgOiAoTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgKiAxMCk7CiAJYWRhcHRlci0+cGFyYW1zLnBjaS52cGRfY2FwX2FkZHIgPQpAQCAtMzcwNyw3ICszODU0LDE0IEBACiAJCSAgICAgICBFVEhfQUxFTik7CiAJCWluaXRfbGlua19jb25maWcoJnAtPmxpbmtfY29uZmlnLCBwLT5waHkuY2Fwcyk7CiAJCXAtPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnAtPnBoeSwgMSk7Ci0JCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkpCisKKwkJLyoKKwkJICogSWYgdGhlIFBIWSBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0cyBmb3IgbGluayBzdGF0dXMKKwkJICogY2hhbmdlcywgc2NoZWR1bGUgYSBzY2FuIG9mIHRoZSBhZGFwdGVyIGxpbmtzIGF0IGxlYXN0CisJCSAqIG9uY2UgYSBzZWNvbmQuCisJCSAqLworCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmCisJCSAgICBhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID4gMTApCiAJCQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMTA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmggYi9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKaW5kZXggYjFiMjVjMy4uN2JmOTYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaApAQCAtMzUsMTAgKzM1LDEwIEBACiAjZGVmaW5lIERSVl9ERVNDICJDaGVsc2lvIFQzIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfTkFNRSAiY3hnYjMiCiAvKiBEcml2ZXIgdmVyc2lvbiAqLwotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xLjEta28iCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEuMi1rbyIKIAogLyogRmlybXdhcmUgdmVyc2lvbiAqLwogI2RlZmluZSBGV19WRVJTSU9OX01BSk9SIDcKLSNkZWZpbmUgRldfVkVSU0lPTl9NSU5PUiAwCisjZGVmaW5lIEZXX1ZFUlNJT05fTUlOT1IgMQogI2RlZmluZSBGV19WRVJTSU9OX01JQ1JPIDAKICNlbmRpZgkJCQkvKiBfX0NIRUxTSU9fVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwppbmRleCA5ZDc3ODY5Li5mODdmOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogc3RhdGljIGludCB0M2IyX21hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwotCXVuc2lnbmVkIGludCBvZnQgPSBtYWMtPm9mZnNldDsKKwl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQsIHN0b3JlOworCWludCBpZHggPSBtYWNpZHgobWFjKTsKIAl1MzIgdmFsOwogCiAJaWYgKCFtYWNpZHgobWFjKSkKQEAgLTE1OCwxNCArMTU5LDI4IEBACiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9QT1JUMUFDVElWRSwgMCk7CiAKKwkvKiBTdG9wIE5JQyB0cmFmZmljIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFRYVE9HR0xFUyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDApOworCS8qIEVuc3VyZSBUWCBkcmFpbnMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1RYX0NGRyArIG9mdCwgRl9UWFBBVVNFRU4sIDApOworCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX1JFU0VUX0NUUkwgKyBvZnQsIEZfTUFDX1JFU0VUXyk7CiAJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUkVTRVRfQ1RSTCArIG9mdCk7ICAgIC8qIGZsdXNoICovCiAKKwkvKiBTdG9yZSBBX1RQX1RYX0RST1BfQ0ZHX0NIMCAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJc3RvcmUgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisKIAltc2xlZXAoMTApOwogCisJLyogQ2hhbmdlIERST1BfQ0ZHIHRvIDB4YzAwMDAwMTEgKi8KKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLCAweGMwMDAwMDExKTsKKwogCS8qIENoZWNrIGZvciB4Z20gUnggZmlmbyBlbXB0eSAqLworCS8qIEluY3JlYXNlZCBsb29wIGNvdW50IHRvIDEwMDAgZnJvbSA1IGNvdmVyIDFHIGFuZCAxMDBNYnBzIGNhc2UgKi8KIAlpZiAodDNfd2FpdF9vcF9kb25lKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRV9FUlJfQ05UICsgb2Z0LAotCQkJICAgIDB4ODAwMDAwMDAsIDEsIDUsIDIpKSB7CisJCQkgICAgMHg4MDAwMDAwMCwgMSwgMTAwMCwgMikpIHsKIAkJQ0hfRVJSKGFkYXAsICJNQUMgJWQgUnggZmlmbyBkcmFpbiBmYWlsZWRcbiIsCiAJCSAgICAgICBtYWNpZHgobWFjKSk7CiAJCXJldHVybiAtMTsKQEAgLTE5MSwxMSArMjA2LDIxIEBACiAJCSAgICAgRl9ESVNQQVVTRUZSQU1FUyB8IEZfRU4xNTM2QkZSQU1FUyB8CiAJCSAgICAgRl9STUZDUyB8IEZfRU5KVU1CTyB8IEZfRU5IQVNITUNBU1QpOwogCi0JaWYgKCFtYWNpZHgobWFjKSkKKwkvKiBSZXN0b3JlIHRoZSBEUk9QX0NGRyAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0RBVEEsIHN0b3JlKTsKKworCWlmICghaWR4KQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMEFDVElWRSk7CiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMUFDVElWRSk7CiAKKwkvKiByZS1lbmFibGUgbmljIHRyYWZmaWMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9FTkZPUkNFUEtULCAxKTsKKworCS8qICBTZXQ6IHJlLWVuYWJsZSBOSUMgdHJhZmZpYyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNiw3ICsyNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKQogewogCXVuc2lnbmVkIGludCBpLCByZWcgPSBtYWMtPm9mZnNldCArIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xOwogCkBAIC0yNDcsNyArMjcyLDcgQEAKIAl0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xKTsJLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlZyA9IG1hYy0+b2Zmc2V0ICsgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfSElHSF8xOwogCkBAIC0zMzIsMTggKzM1Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwgbXR1KTsKIAotCS8qCi0JICogQWRqdXN0IHRoZSBQQVVTRSBmcmFtZSB3YXRlcm1hcmtzLiAgV2UgYWx3YXlzIHNldCB0aGUgTFdNLCBhbmQgdGhlCi0JICogSFdNIG9ubHkgaWYgZmxvdy1jb250cm9sIGlzIGVuYWJsZWQuCi0JICovCi0JaHdtID0gbWF4X3QodW5zaWduZWQgaW50LCBNQUNfUlhGSUZPX1NJWkUgLSAzICogbXR1LAotCQkgICAgTUFDX1JYRklGT19TSVpFICogMzggLyAxMDApOwotCWh3bSA9IG1pbihod20sIE1BQ19SWEZJRk9fU0laRSAtIDgxOTIpOwotCWx3bSA9IG1pbigzICogKGludCltdHUsIE1BQ19SWEZJRk9fU0laRSAvIDQpOwotCiAJaWYgKGFkYXAtPnBhcmFtcy5yZXYgPj0gVDNfUkVWX0IyICYmCiAJICAgICh0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQpICYgRl9SWEVOKSkgewotCQlkaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwkJdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhtYWMpOwogCQl2ID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQpOwogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX0NGRyArIG1hYy0+b2Zmc2V0LAogCQkJCSBGX0VOSEFTSE1DQVNUIHwgRl9DT1BZQUxMRlJBTUVTLCBGX0RJU0JDQVNUKTsKQEAgLTM1NSwxNCArMzcxLDE0IEBACiAJCWlmICh0M193YWl0X29wX2RvbmUoYWRhcCwgcmVnICsgbWFjLT5vZmZzZXQsCiAJCQkJICAgIEZfUlhGSUZPX0VNUFRZLCAxLCAyMCwgNSkpIHsKIAkJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBtYWMtPm9mZnNldCwgdik7Ci0JCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQkJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRSArIG1hYy0+b2Zmc2V0LAogCQkJCSBWX1JYTUFYUEtUU0laRShNX1JYTUFYUEtUU0laRSksCiAJCQkJIFZfUlhNQVhQS1RTSVpFKG10dSkpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQsIHYpOwotCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQl0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKIAl9IGVsc2UKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwKIAkJCQkgVl9SWE1BWFBLVFNJWkUoTV9SWE1BWFBLVFNJWkUpLApAQCAtNDUyLDkgKzQ2OCwxMiBAQAogCiAJaWYgKHdoaWNoICYgTUFDX0RJUkVDVElPTl9UWCkgewogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOwotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fREFUQSwgMHhjMGVkZTQwMSk7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLAorCQkJICAgICBhZGFwLT5wYXJhbXMucmV2ID09IFQzX1JFVl9DID8KKwkJCSAgICAgMHhjNGZmZmYwMSA6IDB4YzBlZGU0MDEpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX01PREUpOwotCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVFBfUElPX0RBVEEsIDEgPDwgaWR4LCAxIDw8IGlkeCk7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9UUF9QSU9fREFUQSwgMSA8PCBpZHgsCisJCQkJIGFkYXAtPnBhcmFtcy5yZXYgPT0gVDNfUkVWX0MgPyAwIDogMSA8PCBpZHgpOwogCiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgb2Z0LCBGX1RYRU4pOwogCkBAIC01MTAsMTUgKzUyOSwxMiBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwogCXN0cnVjdCBtYWNfc3RhdHMgKnMgPSAmbWFjLT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgdHhfdGNudCwgdHhfeGNudDsKLQl1bnNpZ25lZCBpbnQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfeGNudDsKKwl1NjQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gMDsKIAl0eF94Y250ID0gMTsJCS8qIEJ5IGRlZmF1bHQgdHhfeGNudCBpcyBtYWtpbmcgcHJvZ3Jlc3MgKi8KIAl0eF90Y250ID0gbWFjLT50eF90Y250OwkvKiBJZiB0eF9tY250IGlzIHByb2dyZXNzaW5nIGlnbm9yZSB0eF90Y250ICovCi0JcnhfeGNudCA9IDE7CQkvKiBCeSBkZWZhdWx0IHJ4X3hjbnQgaXMgbWFraW5nIHByb2dyZXNzICovCiAJaWYgKHR4X21jbnQgPT0gbWFjLT50eF9tY250ICYmIG1hYy0+cnhfcGF1c2UgPT0gcy0+cnhfcGF1c2UpIHsKIAkJdHhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAogCQkJCQkJQV9YR01fVFhfU1BJNF9TT1BfRU9QX0NOVCArCkBAIC01MjksMTEgKzU0NSwxMSBAQAogCQkJdHhfdGNudCA9IChHX1RYRFJPUENOVENIMFJDVkQodDNfcmVhZF9yZWcoYWRhcCwKIAkJCQkJCSAgICAgIEFfVFBfUElPX0RBVEEpKSk7CiAJCX0gZWxzZSB7Ci0JCQlnb3RvIHJ4Y2hlY2s7CisJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7CiAJCW1hYy0+dG9nZ2xlX2NudCA9IDA7Ci0JCWdvdG8gcnhjaGVjazsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCh0eF90Y250ICE9IG1hYy0+dHhfdGNudCkgJiYgKG1hYy0+dHhfeGNudCA9PSAwKSkgewpAQCAtNTQ2LDIzICs1NjIsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJbWFjLT50b2dnbGVfY250ID0gMDsKLQkJZ290byByeGNoZWNrOwotCX0KLQotcnhjaGVjazoKLQlpZiAocnhfbWNudCAhPSBtYWMtPnJ4X21jbnQpIHsKLQkJcnhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAotCQkJCQkJQV9YR01fUlhfU1BJNF9TT1BfRU9QX0NOVCArCi0JCQkJCQltYWMtPm9mZnNldCkpKSArCi0JCQkJCQkocy0+cnhfZmlmb19vdmZsIC0KLQkJCQkJCSBtYWMtPnJ4X29jbnQpOwotCQltYWMtPnJ4X29jbnQgPSBzLT5yeF9maWZvX292Zmw7Ci0JfSBlbHNlCi0JCWdvdG8gb3V0OwotCi0JaWYgKG1hYy0+cnhfbWNudCAhPSBzLT5yeF9mcmFtZXMgJiYgcnhfeGNudCA9PSAwICYmCi0JICAgIG1hYy0+cnhfeGNudCA9PSAwKSB7Ci0JCXN0YXR1cyA9IDI7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTcwLDggKzU2OSw2IEBACiAJbWFjLT50eF90Y250ID0gdHhfdGNudDsKIAltYWMtPnR4X3hjbnQgPSB0eF94Y250OwogCW1hYy0+dHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQltYWMtPnJ4X3hjbnQgPSByeF94Y250OwotCW1hYy0+cnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKIAltYWMtPnJ4X3BhdXNlID0gcy0+cnhfcGF1c2U7CiAJaWYgKHN0YXR1cyA9PSAxKSB7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggN2NlMzA1My4uODYxYzg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCQlwcmludGsodmVyc2lvbik7CiAKIAlpZiAoYmRldikKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBiZGV2LT5idXNfaWQpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIsIGRldl9uYW1lKGJkZXYpKTsKIAllbHNlIHsKIAkJaSA9IDA7CiAJCWRldiA9IHJvb3RfbGFuY2VfZGV2OwpAQCAtMTEwNSwxMCArMTEwNSwxMCBAQAogCiAJCXN0YXJ0ID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5zdGFydDsKIAkJbGVuID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGJkZXYtPmJ1c19pZCkpIHsKKwkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoYmRldikpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IFVuYWJsZSB0byByZXNlcnZlIE1NSU8gcmVzb3VyY2VcbiIsCi0JCQkgICAgICAgYmRldi0+YnVzX2lkKTsKKwkJCSAgICAgICBkZXZfbmFtZShiZGV2KSk7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIGVycl9vdXRfZGV2OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWZ4eC5jIGIvZHJpdmVycy9uZXQvZGVmeHguYwppbmRleCA2NDQ1Y2VkZC4uNGVjMDU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguYworKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCkBAIC0yOTM3LDcgKzI5MzcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAoaW50KShicC0+cmN2X2J1ZnNfdG9fcG9zdCk7IGkrKykKIAkJZm9yIChqID0gMDsgKGkgKyBqKSA8IChpbnQpUElfUkNWX0RBVEFfS19OVU1fRU5UUklFUzsgaiArPSBicC0+cmN2X2J1ZnNfdG9fcG9zdCkKIAkJewotCQkJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYiA9IF9fZGV2X2FsbG9jX3NrYihORVdfU0tCX1NJWkUsIEdGUF9OT0lPKTsKKwkJCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBfX25ldGRldl9hbGxvY19za2IoYnAtPmRldiwgTkVXX1NLQl9TSVpFLCBHRlBfTk9JTyk7CiAJCQlpZiAoIW5ld3NrYikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWJwLT5kZXNjcl9ibG9ja192aXJ0LT5yY3ZfZGF0YVtpK2pdLmxvbmdfMCA9ICh1MzIpIChQSV9SQ1ZfREVTQ1JfTV9TT1AgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggZTRjZWY0OS4uNTU2MjVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC02MDYsOCArNjA2LDggQEAKIAlpZiAoIW1lbV9zdGFydCB8fCBscC0+YWRhcHRlciA8IERFUENBIHx8IGxwLT5hZGFwdGVyID49dW5rbm93bikKIAkJcmV0dXJuIC1FTlhJTzsKIAotCXByaW50ayAoIiVzOiAlcyBhdCAweCUwNGx4IiwKLQkgICAgICAgIGRldmljZS0+YnVzX2lkLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOworCXByaW50aygiJXM6ICVzIGF0IDB4JTA0bHgiLAorCSAgICAgICBkZXZfbmFtZShkZXZpY2UpLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOwogCiAJc3dpdGNoIChscC0+ZGVwY2FfYnVzKSB7CiAjaWZkZWYgQ09ORklHX01DQQpAQCAtNjY5LDcgKzY2OSw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwogCXNwcmludGYobHAtPmFkYXB0ZXJfbmFtZSwgIiVzICglcykiLAotCQlkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBkZXZpY2UtPmJ1c19pZCk7CisJCWRlcGNhX3NpZ25hdHVyZVtscC0+YWRhcHRlcl0sIGRldl9uYW1lKGRldmljZSkpOwogCXN0YXR1cyA9IC1FQlVTWTsKIAogCS8qIEluaXRpYWxpc2F0aW9uIEJsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9kbmV0LmMKaW5kZXggMWI0MDYzMi4uZGIxZTMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2RuZXQuYwpAQCAtOSw2ICs5LDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIxLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSAiZG5ldC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggODZiYjg3Ni4uMDUwNGRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJlMTAwIgogI2RlZmluZSBEUlZfRVhUCQkJIi1OQVBJIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjMuNS4yMy1rNiJEUlZfRVhUCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMy41LjI0LWsyIkRSVl9FWFQKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiSW50ZWwoUikgUFJPLzEwMCBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKQEAgLTI0MCw2ICsyNDAsNyBAQAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTMsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTQsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTUsIDcpLAorCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwZmUsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMDksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMjksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDI0NDksIDIpLApAQCAtMjc1LDYgKzI3Niw3IEBACiAJcGh5XzgyNTYyX2VtID0gMHgwMzIwMDJBOCwKIAlwaHlfODI1NjJfZWsgPSAweDAzMTAwMkE4LAogCXBoeV84MjU2Ml9laCA9IDB4MDE3MDAyQTgsCisJcGh5XzgyNTUyX3YgID0gMHhkMDYxMDA0ZCwKIAlwaHlfdW5rbm93biAgPSAweEZGRkZGRkZGLAogfTsKIApAQCAtOTQzLDYgKzk0NSwyMiBAQAogCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBhZGRyLCBpbnQgcmVnLCBpbnQgZGF0YSkKIHsKKwlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgICgobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpICYmIChyZWcgPT0gTUlJX0JNQ1IpICYmCisJICAgICAoZGF0YSAmIChCTUNSX0FOUkVTVEFSVCB8IEJNQ1JfQU5FTkFCTEUpKSkgeworCQl1MTYgYWR2ZXJ0ID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKKworCQkvKgorCQkgKiBXb3JrYXJvdW5kIFNpIGlzc3VlIHdoZXJlIHNvbWV0aW1lcyB0aGUgcGFydCB3aWxsIG5vdAorCQkgKiBhdXRvbmVnIHRvIDEwME1icHMgZXZlbiB3aGVuIGFkdmVydGlzZWQuCisJCSAqLworCQlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCQlkYXRhIHw9IEJNQ1JfU1BFRUQxMDAgfCBCTUNSX0ZVTExEUExYOworCQllbHNlIGlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwSEFMRikKKwkJCWRhdGEgfD0gQk1DUl9TUEVFRDEwMDsKKwl9CisKIAltZGlvX2N0cmwobmV0ZGV2X3ByaXYobmV0ZGV2KSwgYWRkciwgbWRpX3dyaXRlLCByZWcsIGRhdGEpOwogfQogCkBAIC0xMjc2LDE2ICsxMjk0LDEyIEBACiAJaWYgKGFkZHIgPT0gMzIpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JLyogU2VsZWN0ZWQgdGhlIHBoeSBhbmQgaXNvbGF0ZSB0aGUgcmVzdCAqLwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKSB7Ci0JCWlmIChhZGRyICE9IG5pYy0+bWlpLnBoeV9pZCkgewotCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOwotCQl9IGVsc2UgewotCQkJYm1jciA9IG1kaW9fcmVhZChuZXRkZXYsIGFkZHIsIE1JSV9CTUNSKTsKLQkJCW1kaW9fd3JpdGUobmV0ZGV2LCBhZGRyLCBNSUlfQk1DUiwKLQkJCQlibWNyICYgfkJNQ1JfSVNPTEFURSk7Ci0JCX0KLQl9CisJLyogSXNvbGF0ZSBhbGwgdGhlIFBIWSBpZHMgKi8KKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMzI7IGFkZHIrKykKKwkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOworCS8qIFNlbGVjdCB0aGUgZGlzY292ZXJlZCBQSFkgKi8KKwlibWNyICY9IH5CTUNSX0lTT0xBVEU7CisJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOwogCiAJLyogR2V0IHBoeSBJRCAqLwogCWlkX2xvID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfUEhZU0lEMSk7CkBAIC0xMzAzLDcgKzEzMTcsMTggQEAKIAkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX05TQ19DT05HLCBjb25nKTsKIAl9CiAKLQlpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBhZHZlcnQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOworCisJCS8qIFdvcmthcm91bmQgU2kgbm90IGFkdmVydGlzaW5nIGZsb3ctY29udHJvbCBkdXJpbmcgYXV0b25lZyAqLworCQlhZHZlcnQgfD0gQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOworCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBhZHZlcnQpOworCisJCS8qIFJlc2V0IGZvciB0aGUgYWJvdmUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCAqLworCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUik7CisJCWJtY3IgfD0gQk1DUl9SRVNFVDsKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOworCX0gZWxzZSBpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCiAJICAgKG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX1RQSVNUQVRVUykgJiAweDgwMDApICYmCiAJCSEobmljLT5lZXByb21bZWVwcm9tX2NuZmdfbWRpeF0gJiBlZXByb21fbWRpeF9lbmFibGVkKSkpIHsKIAkJLyogZW5hYmxlL2Rpc2FibGUgTURJL01ESS1YIGF1dG8tc3dpdGNoaW5nLiAqLwpAQCAtMTk0NCw5ICsxOTY5LDkgQEAKIAlpZiAoc3RhdF9hY2sgJiBzdGF0X2Fja19ybnIpCiAJCW5pYy0+cnVfcnVubmluZyA9IFJVX1NVU1BFTkRFRDsKIAotCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKIAkJZTEwMF9kaXNhYmxlX2lycShuaWMpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZuaWMtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJm5pYy0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTk2Miw3ICsxOTg3LDcgQEAKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWUxMDBfZW5hYmxlX2lycShuaWMpOwogCX0KIApAQCAtMjEzNCw2ICsyMTU5LDkgQEAKIH0KIAogI2RlZmluZSBNSUlfTEVEX0NPTlRST0wJMHgxQgorI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERSAweDE5CisjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09OICAgICAgIDB4MDAwRiAvKiBMRURUWCBhbmQgTEVEX1JYIGJvdGggb24gKi8KKyNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT0ZGICAgICAgMHgwMDBBIC8qIExFRFRYIGFuZCBMRURfUlggYm90aCBvZmYgKi8KIHN0YXRpYyB2b2lkIGUxMDBfYmxpbmtfbGVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSAoc3RydWN0IG5pYyAqKWRhdGE7CkBAIC0yMTQzLDEwICsyMTcxLDE5IEBACiAJCWxlZF9vbl81NTkgPSAweDA1LAogCQlsZWRfb25fNTU3ID0gMHgwNywKIAl9OworCXUxNiBsZWRfcmVnID0gTUlJX0xFRF9DT05UUk9MOwogCi0JbmljLT5sZWRzID0gKG5pYy0+bGVkcyAmIGxlZF9vbikgPyBsZWRfb2ZmIDoKLQkJKG5pYy0+bWFjIDwgbWFjXzgyNTU5X0QxMDFNKSA/IGxlZF9vbl81NTcgOiBsZWRfb25fNTU5OwotCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCBuaWMtPmxlZHMpOworCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgeworCQlsZWRfcmVnID0gRTEwMF84MjU1Ml9MRURfT1ZFUlJJREU7CisKKwkJbmljLT5sZWRzID0gKG5pYy0+bGVkcyA9PSBFMTAwXzgyNTUyX0xFRF9PTikgPworCQkgICAgICAgICAgICBFMTAwXzgyNTUyX0xFRF9PRkYgOiBFMTAwXzgyNTUyX0xFRF9PTjsKKwl9IGVsc2UgeworCQluaWMtPmxlZHMgPSAobmljLT5sZWRzICYgbGVkX29uKSA/IGxlZF9vZmYgOgorCQkgICAgICAgICAgICAobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6CisJCSAgICAgICAgICAgIGxlZF9vbl81NTk7CisJfQorCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgbGVkX3JlZywgbmljLT5sZWRzKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOwogfQogCkBAIC0yMzc1LDEzICsyNDEyLDE1IEBACiBzdGF0aWMgaW50IGUxMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiBsZWRfcmVnID0gKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSA/IEUxMDBfODI1NTJfTEVEX09WRVJSSURFIDoKKwkgICAgICAgICAgICAgIE1JSV9MRURfQ09OVFJPTDsKIAogCWlmICghZGF0YSB8fCBkYXRhID4gKHUzMikoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpCiAJCWRhdGEgPSAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKIAlkZWxfdGltZXJfc3luYygmbmljLT5ibGlua190aW1lcik7Ci0JbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCAwKTsKKwltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY4Niw2ICsyNzI1LDkgQEAKIAl9CiB9CiAKKyNkZWZpbmUgRTEwMF84MjU1Ml9TTUFSVFNQRUVEICAgMHgxNCAgIC8qIFNtYXJ0U3BlZWQgQ3RybCByZWdpc3RlciAqLworI2RlZmluZSBFMTAwXzgyNTUyX1JFVl9BTkVHICAgICAweDAyMDAgLyogUmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisjZGVmaW5lIEUxMDBfODI1NTJfQU5FR19OT1cgICAgIDB4MDQwMCAvKiBBdXRvLW5lZ290aWF0ZSBub3cgKi8KIHN0YXRpYyBpbnQgZTEwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTI2OTgsNiArMjc0MCwxNSBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJaWYgKChuaWMtPmZsYWdzICYgd29sX21hZ2ljKSB8IGUxMDBfYXNmKG5pYykpIHsKKwkJLyogZW5hYmxlIHJldmVyc2UgYXV0by1uZWdvdGlhdGlvbiAqLworCQlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVEKTsKKworCQkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELCBzbWFydHNwZWVkIHwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9SRVZfQU5FRyB8IEUxMDBfODI1NTJfQU5FR19OT1cpOworCQl9CiAJCWlmIChwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgdHJ1ZSkpCiAJCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCB0cnVlKTsKIAl9IGVsc2UgewpAQCAtMjcyMSw2ICsyNzcyLDE2IEBACiAJLyogYWNrIGFueSBwZW5kaW5nIHdha2UgZXZlbnRzLCBkaXNhYmxlIFBNRSAqLwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCAwLCAwKTsKIAorCS8qIGRpc2JhbGUgcmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQpOworCisJCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELAorCQkgICAgICAgICAgIHNtYXJ0c3BlZWQgJiB+KEUxMDBfODI1NTJfUkVWX0FORUcpKTsKKwl9CisKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMF91cChuaWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggZjU1ODFkZS4uZTlhNDE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0xODIsNyArMTgyLDYgQEAKIAkvKiBhcnJheSBvZiBidWZmZXIgaW5mb3JtYXRpb24gc3RydWN0cyAqLwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCi0Jc3BpbmxvY2tfdCB0eF9sb2NrOwogCXUxNiB0ZGg7CiAJdTE2IHRkdDsKIAlib29sIGxhc3RfdHhfdHNvOwpAQCAtMjM4LDcgKzIzNyw2IEBACiAJdTE2IGxpbmtfc3BlZWQ7CiAJdTE2IGxpbmtfZHVwbGV4OwogCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKLQlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF90eF9wYWNrZXRzOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA2YmQ2M2NjLi45M2I4NjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC01NzcsMTIgKzU3NywzMCBAQAogCiB2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiByY3RsLCB0Y3RsOwogCiAJLyogc2lnbmFsIHRoYXQgd2UncmUgZG93biBzbyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBub3QKIAkgKiByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0aW1lciAqLwogCXNldF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOwogCisJLyogZGlzYWJsZSByZWNlaXZlcyBpbiB0aGUgaGFyZHdhcmUgKi8KKwlyY3RsID0gZXIzMihSQ1RMKTsKKwlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJLyogZmx1c2ggYW5kIHNsZWVwIGJlbG93ICovCisKKwkvKiBjYW4gYmUgbmV0aWZfdHhfZGlzYWJsZSB3aGVuIE5FVElGX0ZfTExUWCBpcyByZW1vdmVkICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlICovCisJdGN0bCA9IGVyMzIoVENUTCk7CisJdGN0bCAmPSB+RTEwMDBfVENUTF9FTjsKKwlldzMyKFRDVEwsIHRjdGwpOworCS8qIGZsdXNoIGJvdGggZGlzYWJsZXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoICovCisJRTEwMDBfV1JJVEVfRkxVU0goKTsKKwltc2xlZXAoMTApOworCiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAogCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtNTk1LDcgKzYxMyw2IEBACiAJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CiAJYWRhcHRlci0+bGlua19kdXBsZXggPSAwOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7CiAJZTEwMDBfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwpAQCAtMTA0OCw4ICsxMDY1LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CkBAIC0xMzY4LDggKzEzODMsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0KIAkvKiBFeHBsaWNpdGx5IGRpc2FibGUgSVJRIHNpbmNlIHRoZSBOSUMgY2FuIGJlIGluIGFueSBzdGF0ZS4gKi8KIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtMTYyNCw3ICsxNjM3LDYgQEAKIAogCXR4ZHItPm5leHRfdG9fdXNlID0gMDsKIAl0eGRyLT5uZXh0X3RvX2NsZWFuID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmdHhkci0+dHhfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODIsOCArMTg5NCw2IEBACiAgKiBlMTAwMF9zZXR1cF9yY3RsIC0gY29uZmlndXJlIHRoZSByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiBAYWRhcHRlcjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KLSNkZWZpbmUgUEFHRV9VU0VfQ09VTlQoUykgKCgoUykgPj4gUEFHRV9TSElGVCkgKyBcCi0JCQkoKChTKSAmIChQQUdFX1NJWkUgLSAxKSkgPyAxIDogMCkpCiBzdGF0aWMgdm9pZCBlMTAwMF9zZXR1cF9yY3RsKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yMDU2LDE3ICsyMDY2LDE0IEBACiBzdGF0aWMgdm9pZCBlMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICBzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCWJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLwogfQogCkBAIC0yODY1LDExICsyODcyLDExIEBACiAJCXJldHVybiBmYWxzZTsKIAogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQljbWRfbGVuIHw9IEUxMDAwX1RYRF9DTURfVENQOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJLyogWFhYIG5vdCBoYW5kbGluZyBhbGwgSVBWNiBoZWFkZXJzICovCiAJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKQEAgLTI5MTUsMTMgKzI5MjIsMjEgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOworCXVuc2lnbmVkIGludCBsZW4gPSBza2JfaGVhZGxlbihza2IpOworCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemUsIGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgZjsKLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisJb2Zmc2V0ID0gMDsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBtYXhfcGVyX3R4ZCk7CkBAIC0yOTU2LDE4ICsyOTcxLDE4IEBACiAJCQlzaXplIC09IDQ7CiAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKLQkJCQlza2ItPmRhdGEgKyBvZmZzZXQsCi0JCQkJc2l6ZSwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwogCQljb3VudCsrOwotCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CisJCWlmIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC0yOTc1LDkgKzI5OTAsMTMgQEAKIAogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7Ci0JCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OworCQlvZmZzZXQgPSAwOwogCiAJCXdoaWxlIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCQkJLyogV29ya2Fyb3VuZCBmb3IgcHJlbWF0dXJlIGRlc2Mgd3JpdGUtYmFja3MKQEAgLTI5OTMsMjMgKzMwMTIsMTYgQEAKIAkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CiAJCX0KIAl9CiAKLQlpID0gKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0zMTg1LDcgKzMxOTcsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgbXNzOwogCWludCBjb3VudCA9IDA7CkBAIC0zMjkwLDIyICszMzAxLDE1IEBACiAJICAgIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpKQogCQllMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8oYWRhcHRlciwgc2tiKTsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKSkKLQkJLyogQ29sbGlzaW9uIC0gdGVsbCB1cHBlciBsYXllciB0byByZXF1ZXVlICovCi0JCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwotCiAJLyogbmVlZDogY291bnQgKyAyIGRlc2MgZ2FwIHRvIGtlZXAgdGFpbCBmcm9tIHRvdWNoaW5nCiAJICogaGVhZCwgb3RoZXJ3aXNlIHRyeSBuZXh0IHRpbWUgKi8KLQlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKIAkJaWYgKHVubGlrZWx5KGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChhZGFwdGVyLCBza2IpKSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT50eF9maWZvX3N0YWxsX3RpbWVyLCBqaWZmaWVzICsgMSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eF9yaW5nLT50eF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJCX0KIAl9CkBAIC0zMzIwLDcgKzMzMjQsNiBAQAogCXRzbyA9IGUxMDAwX3RzbyhhZGFwdGVyLCB0eF9yaW5nLCBza2IpOwogCWlmICh0c28gPCAwKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKQEAgLTMzMzYsMTYgKzMzMzksMjEgQEAKIAlpZiAobGlrZWx5KHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAotCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAotCSAgICAgICAgICAgICAgIGUxMDAwX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGVyX3R4ZCwgbnJfZnJhZ3MsIG1zcykpOworCWNvdW50ID0gZTEwMDBfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QsIG1heF9wZXJfdHhkLAorCSAgICAgICAgICAgICAgICAgICAgIG5yX2ZyYWdzLCBtc3MpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBNQVhfU0tCX0ZSQUdTICsgMik7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyAyKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTM2ODcsMTIgKzM2OTUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSkgeworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfSBlbHNlCiAJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiAKQEAgLTM3NDcsMTYgKzM3NTUsMTggQEAKIAkJZXczMihJTUMsIH4wKTsKIAkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAl9Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpKSB7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwotCX0gZWxzZQorCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCX0gZWxzZSB7CiAJCS8qIHRoaXMgcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuISBpZiBpdCBkb2VzIGl0IGlzIGJhc2ljYWxseSBhCiAJCSAqIGJ1ZywgYnV0IG5vdCBhIGhhcmQgZXJyb3IsIHNvIGVuYWJsZSBpbnRzIGFuZCBjb250aW51ZSAqLwotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKKwkJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzc3MywyOCArMzc4MywyMSBAQAogCiAJYWRhcHRlciA9IG5ldGRldl9wcml2KHBvbGxfZGV2KTsKIAotCS8qIGUxMDAwX2NsZWFuIGlzIGNhbGxlZCBwZXItY3B1LiAgVGhpcyBsb2NrIHByb3RlY3RzCi0JICogdHhfcmluZ1swXSBmcm9tIGJlaW5nIGNsZWFuZWQgYnkgbXVsdGlwbGUgY3B1cwotCSAqIHNpbXVsdGFuZW91c2x5LiAgQSBmYWlsdXJlIG9idGFpbmluZyB0aGUgbG9jayBtZWFucwotCSAqIHR4X3JpbmdbMF0gaXMgY3VycmVudGx5IGJlaW5nIGNsZWFuZWQgYW55d2F5LiAqLwotCWlmIChzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spKSB7Ci0JCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlciwKLQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nWzBdKTsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCX0KKwl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nWzBdKTsKIAogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nWzBdLAogCSAgICAgICAgICAgICAgICAgICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGxpa2VseShhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpKQogCQkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzgxMywxNSArMzgxNiwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwlib29sIGNsZWFuZWQ7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzPTAsIHRvdGFsX3R4X3BhY2tldHM9MDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgKSB7CisJd2hpbGUgKChlb3BfZGVzYy0+dXBwZXIuZGF0YSAmIGNwdV90b19sZTMyKEUxMDAwX1RYRF9TVEFUX0REKSkgJiYKKwkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+Y291bnQpKSB7CisJCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKQEAgLTM4NDQsMTAgKzM4NDgsNiBAQAogCiAJCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJCWVvcF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgZW9wKTsKLSNkZWZpbmUgRTEwMDBfVFhfV0VJR0hUIDY0Ci0JCS8qIHdlaWdodCBvZiBhIHNvcnQgZm9yIHR4LCB0byBhdm9pZCBlbmRsZXNzIHRyYW5zbWl0IGNsZWFudXAgKi8KLQkJaWYgKGNvdW50KysgPT0gRTEwMDBfVFhfV0VJR0hUKQotCQkJYnJlYWs7CiAJfQogCiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CkBAIC0zODY5LDggKzM4NjksOCBAQAogCQkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAgKwogCQkgICAgICAgICAgICAgICAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIApAQCAtMzg5Miw3ICszODkyLDcgQEAKIAkJCQlyZWFkbChody0+aHdfYWRkciArIHR4X3JpbmctPnRkdCksCiAJCQkJdHhfcmluZy0+bmV4dF90b191c2UsCiAJCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKLQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCwKIAkJCQllb3AsCiAJCQkJamlmZmllcywKIAkJCQllb3BfZGVzYy0+dXBwZXIuZmllbGRzLnN0YXR1cyk7CkBAIC0zOTAzLDcgKzM5MDMsNyBAQAogCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYnl0ZXMgKz0gdG90YWxfdHhfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKLQlyZXR1cm4gY2xlYW5lZDsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKaW5kZXggMDg5MDE2Mi4uNmMwMWEyMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC00MCw2ICs0MCw3IEBACiAgKiA4MjU3M0UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIChDb3BwZXIpCiAgKiA4MjU3M0wgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyCiAgKiA4MjU3NEwgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAqIDgyNTgzViBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTYxLDYgKzYyLDcgQEAKIHN0YXRpYyBzMzIgZTEwMDBfZ2V0X3BoeV9pZF84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfY29wcGVyX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsCiAJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogc3RhdGljIHMzMiBlMTAwMF9maXhfbnZtX2NoZWNrc3VtXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpAQCAtOTksNiArMTAxLDcgQEAKIAkJcGh5LT50eXBlCQkgPSBlMTAwMF9waHlfbTg4OwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXBoeS0+dHlwZQkJID0gZTEwMDBfcGh5X2JtOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTIxLDYgKzEyNCw3IEBACiAJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJaWYgKHBoeS0+aWQgIT0gQk1FMTAwMF9FX1BIWV9JRF9SMikKIAkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAkJYnJlYWs7CkBAIC0xNjQsNiArMTY4LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlpZiAoKChlZWNkID4+IDE1KSAmIDB4MykgPT0gMHgzKSB7CiAJCQludm0tPnR5cGUgPSBlMTAwMF9udm1fZmxhc2hfaHc7CiAJCQludm0tPndvcmRfc2l6ZSA9IDIwNDg7CkBAIC0yNTAsNyArMjU1LDcgQEAKIAljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgogCQlmdW5jLT5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UgPQogCQkJZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzE7Ci0JCWZ1bmMtPmNoZWNrX2Zvcl9saW5rID0gZTEwMDBlX2NoZWNrX2Zvcl9zZXJkZXNfbGluazsKKwkJZnVuYy0+Y2hlY2tfZm9yX2xpbmsgPSBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzE7CiAJCWZ1bmMtPmdldF9saW5rX3VwX2luZm8gPQogCQkJZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2ZpYmVyX3NlcmRlczsKIAkJYnJlYWs7CkBAIC0yNjEsNiArMjY2LDcgQEAKIAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlmdW5jLT5jaGVja19tbmdfbW9kZSA9IGUxMDAwX2NoZWNrX21uZ19tb2RlXzgyNTc0OwogCQlmdW5jLT5sZWRfb24gPSBlMTAwMF9sZWRfb25fODI1NzQ7CiAJCWJyZWFrOwpAQCAtMzc0LDYgKzM4MCw3IEBACiAJCXJldHVybiBlMTAwMGVfZ2V0X3BoeV9pZChodyk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKQEAgLTQ2Myw4ICs0NzAsMTUgQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTczICYmIGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXRfdmFsID0gZTEwMDBlX2FjcXVpcmVfbnZtKGh3KTsKKwkJYnJlYWs7CisJfQogCiAJaWYgKHJldF92YWwpCiAJCWUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzEoaHcpOwpAQCAtNTA0LDYgKzUxOCw3IEBACiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKGh3LCBvZmZzZXQsIHdvcmRzLCBkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3MToKQEAgLTc3OCw3ICs3OTMsMTAgQEAKIAkgKiBNdXN0IGFjcXVpcmUgdGhlIE1ESU8gb3duZXJzaGlwIGJlZm9yZSBNQUMgcmVzZXQuCiAJICogT3duZXJzaGlwIGRlZmF1bHRzIHRvIGZpcm13YXJlIGFmdGVyIGEgcmVzZXQuCiAJICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwogCQlleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKIApAQCAtNzk0LDYgKzgxMiw5IEBACiAJCQltc2xlZXAoMik7CiAJCQlpKys7CiAJCX0gd2hpbGUgKGkgPCBNRElPX09XTkVSU0hJUF9USU1FT1VUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJY3RybCA9IGVyMzIoQ1RSTCk7CkBAIC04MTksOCArODQwLDE2IEBACiAJICogTmVlZCB0byB3YWl0IGZvciBQaHkgY29uZmlndXJhdGlvbiBjb21wbGV0aW9uIGJlZm9yZSBhY2Nlc3NpbmcKIAkgKiBOVk0gYW5kIFBoeS4KIAkgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkKKworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCW1zbGVlcCgyNSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBldmVudHMuICovCiAJZXczMihJTUMsIDB4ZmZmZmZmZmYpOwpAQCAtODMwLDYgKzg1OSwxMCBAQAogCQlody0+ZGV2X3NwZWMuZTgyNTcxLmFsdF9tYWNfYWRkcl9pc19wcmVzZW50KQogCQkJZTEwMDBlX3NldF9sYWFfc3RhdGVfODI1NzEoaHcsIHRydWUpOwogCisJLyogUmVpbml0aWFsaXplIHRoZSA4MjU3MSBzZXJkZXMgbGluayBzdGF0ZSBtYWNoaW5lICovCisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwkJaHctPm1hYy5zZXJkZXNfbGlua19zdGF0ZSA9IGUxMDAwX3NlcmRlc19saW5rX2Rvd247CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg2LDE3ICs5MTksMjIgQEAKIAlldzMyKFRYRENUTCgwKSwgcmVnX2RhdGEpOwogCiAJLyogLi4uZm9yIGJvdGggcXVldWVzLiAqLwotCWlmIChtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzMgJiYgbWFjLT50eXBlICE9IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChtYWMtPnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJZTEwMDBlX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKGh3KTsKKwkJcmVnX2RhdGEgPSBlcjMyKEdDUik7CisJCXJlZ19kYXRhIHw9IEUxMDAwX0dDUl9MMV9BQ1RfV0lUSE9VVF9MMFNfUlg7CisJCWV3MzIoR0NSLCByZWdfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJlZ19kYXRhID0gZXIzMihUWERDVEwoMSkpOwogCQlyZWdfZGF0YSA9IChyZWdfZGF0YSAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfAogCQkJICAgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQiB8CiAJCQkgICBFMTAwMF9UWERDVExfQ09VTlRfREVTQzsKIAkJZXczMihUWERDVEwoMSksIHJlZ19kYXRhKTsKLQl9IGVsc2UgewotCQllMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOwotCQlyZWdfZGF0YSA9IGVyMzIoR0NSKTsKLQkJcmVnX2RhdGEgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKLQkJZXczMihHQ1IsIHJlZ19kYXRhKTsKKwkJYnJlYWs7CiAJfQogCiAJLyoKQEAgLTk2MSwxOCArOTk5LDMwIEBACiAJfQogCiAJLyogRGV2aWNlIENvbnRyb2wgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoQ1RSTCk7CiAJCXJlZyAmPSB+KDEgPDwgMjkpOwogCQlldzMyKENUUkwsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCS8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZWcgPSBlcjMyKENUUkxfRVhUKTsKIAkJcmVnICY9IH4oMSA8PCAyMyk7CiAJCXJlZyB8PSAoMSA8PCAyMik7CiAJCWV3MzIoQ1RSTF9FWFQsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEpIHsKQEAgLTk4MCw5ICsxMDMwLDIzIEBACiAJCXJlZyB8PSBFMTAwMF9QQkFfRUNDX0NPUlJfRU47CiAJCWV3MzIoUEJBX0VDQywgcmVnKTsKIAl9CisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBoYXJkd2FyZSBlcnJhdGEuCisJICogRW5zdXJlIHRoYXQgRE1BIER5bmFtaWMgQ2xvY2sgZ2F0aW5nIGlzIGRpc2FibGVkIG9uIDgyNTcxIGFuZCA4MjU3MgorCSAqLworCisgICAgICAgIGlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcxKSB8fAorICAgICAgICAgICAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcyKSkgeworICAgICAgICAgICAgICAgIHJlZyA9IGVyMzIoQ1RSTF9FWFQpOworICAgICAgICAgICAgICAgIHJlZyAmPSB+RTEwMDBfQ1RSTF9FWFRfRE1BX0RZTl9DTEtfRU47CisgICAgICAgICAgICAgICAgZXczMihDVFJMX0VYVCwgcmVnKTsKKyAgICAgICAgfQorCiAKIAkvKiBQQ0ktRXggQ29udHJvbCBSZWdpc3RlcnMgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoR0NSKTsKIAkJcmVnIHw9ICgxIDw8IDIyKTsKIAkJZXczMihHQ1IsIHJlZyk7CkBAIC05OTAsNiArMTA1NCw5IEBACiAJCXJlZyA9IGVyMzIoR0NSMik7CiAJCXJlZyB8PSAxOwogCQlldzMyKEdDUjIsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXJldHVybjsKQEAgLTEwMDksNyArMTA3NiwxMCBAQAogCXUzMiB2ZnRhX29mZnNldCA9IDA7CiAJdTMyIHZmdGFfYml0X2luX3JlZyA9IDA7CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWlmIChody0+bW5nX2Nvb2tpZS52bGFuX2lkICE9IDApIHsKIAkJCS8qCiAJCQkgKiBUaGUgVkZUQSBpcyBhIDQwOTZiIGJpdC1maWVsZCwgZWFjaCBpZGVudGlmeWluZwpAQCAtMTAyNCw2ICsxMDk0LDkgQEAKIAkJCXZmdGFfYml0X2luX3JlZyA9IDEgPDwgKGh3LT5tbmdfY29va2llLnZsYW5faWQgJgogCQkJCQkgICAgICAgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyk7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgRTEwMDBfVkxBTl9GSUxURVJfVEJMX1NJWkU7IG9mZnNldCsrKSB7CiAJCS8qCkBAIC0xMTIyLDkgKzExOTUsMTYgQEAKIAkgKiB0aGUgZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseQogCSAqIHNldCBpdCB0byBmdWxsLgogCSAqLwotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgJiYKLQkgICAgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2RlZmF1bHQpCi0JCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2Z1bGw7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19kZWZhdWx0KQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIGUxMDAwZV9zZXR1cF9saW5rKGh3KTsKIH0KQEAgLTEyMDMsNiArMTI4MywxMzEgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfY2hlY2tfZm9yX3NlcmRlc19saW5rXzgyNTcxIC0gQ2hlY2sgZm9yIGxpbmsgKFNlcmRlcykKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBDaGVja3MgZm9yIGxpbmsgdXAgb24gdGhlIGhhcmR3YXJlLiAgSWYgbGluayBpcyBub3QgdXAgYW5kIHdlIGhhdmUKKyAqICBhIHNpZ25hbCwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGxpbmsgdXAuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX2NoZWNrX2Zvcl9zZXJkZXNfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTMyIHJ4Y3c7CisJdTMyIGN0cmw7CisJdTMyIHN0YXR1czsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwljdHJsID0gZXIzMihDVFJMKTsKKwlzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CisJcnhjdyA9IGVyMzIoUlhDVyk7CisKKwlpZiAoKHJ4Y3cgJiBFMTAwMF9SWENXX1NZTkNIKSAmJiAhKHJ4Y3cgJiBFMTAwMF9SWENXX0lWKSkgeworCisJCS8qIFJlY2VpdmVyIGlzIHN5bmNocm9uaXplZCB3aXRoIG5vIGludmFsaWQgYml0cy4gICovCisJCXN3aXRjaCAobWFjLT5zZXJkZXNfbGlua19zdGF0ZSkgeworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfY29tcGxldGU6CisJCQlpZiAoIShzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGxvc3QgbGluaywgcmV0cnkgYXV0b25lZyBiZWZvcmUKKwkJCQkgKiByZXBvcnRpbmcgbGluayBmYWlsdXJlCisJCQkJICovCisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiQU5fVVAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cDoKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIC9DLyBvcmRlcmVkIHNldHMsIHJlLWVuYWJsZQorCQkJICogYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciBhbmQgZGlzYWJsZQorCQkJICogZm9yY2VkIGxpbmsgaW4gdGhlIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGluIGFuCisJCQkgKiBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggb3VyIGxpbmsgcGFydG5lci4KKwkJCSAqLworCQkJaWYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpIHsKKwkJCQkvKiBFbmFibGUgYXV0b25lZywgYW5kIHVuZm9yY2UgbGluayB1cCAqLworCQkJCWV3MzIoVFhDVywgbWFjLT50eGN3KTsKKwkJCQlldzMyKENUUkwsCisJCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiRk9SQ0VEX1VQIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOgorCQkJLyoKKwkJCSAqIElmIHRoZSBMVSBiaXQgaXMgc2V0IGluIHRoZSBTVEFUVVMgcmVnaXN0ZXIsCisJCQkgKiBhdXRvbmVnIGhhcyBjb21wbGV0ZWQgc3VjZXNzZnVsbHkuIElmIG5vdCwKKwkJCSAqIHRyeSBmb3JpbmcgdGhlIGxpbmsgYmVjYXVzZSB0aGUgZmFyIGVuZCBtYXkgYmUKKwkJCSAqIGF2YWlsYWJsZSBidXQgbm90IGNhcGFibGUgb2YgYXV0b25lZ290aWF0aW9uLgorCQkJICovCisJCQlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKSAgeworCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlOworCQkJCWh3X2RiZyhodywgIkFOX1BST0cgICAtPiBBTl9VUFxuIik7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogRGlzYWJsZSBhdXRvbmVnLCBmb3JjZSBsaW5rIHVwIGFuZAorCQkJCSAqIGZ1bGwgZHVwbGV4LCBhbmQgY2hhbmdlIHN0YXRlIHRvIGZvcmNlZAorCQkJCSAqLworCQkJCWV3MzIoVFhDVywKKwkJCQkgICAgKG1hYy0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOworCQkJCWN0cmwgfD0gKEUxMDAwX0NUUkxfU0xVIHwgRTEwMDBfQ1RSTF9GRCk7CisJCQkJZXczMihDVFJMLCBjdHJsKTsKKworCQkJCS8qIENvbmZpZ3VyZSBGbG93IENvbnRyb2wgYWZ0ZXIgbGluayB1cC4gKi8KKwkJCQlyZXRfdmFsID0KKwkJCQkgICAgZTEwMDBlX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKGh3KTsKKwkJCQlpZiAocmV0X3ZhbCkgeworCQkJCQlod19kYmcoaHcsICJFcnJvciBjb25maWcgZmxvdyBjb250cm9sXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19mb3JjZWRfdXA7CisJCQkJaHdfZGJnKGh3LCAiQU5fUFJPRyAgIC0+IEZPUkNFRF9VUFxuIik7CisJCQl9CisJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2Rvd246CisJCWRlZmF1bHQ6CisJCQkvKiBUaGUgbGluayB3YXMgZG93biBidXQgdGhlIHJlY2VpdmVyIGhhcyBub3cgZ2FpbmVkCisJCQkgKiB2YWxpZCBzeW5jLCBzbyBsZXRzIHNlZSBpZiB3ZSBjYW4gYnJpbmcgdGhlIGxpbmsKKwkJCSAqIHVwLiAqLworCQkJZXczMihUWENXLCBtYWMtPnR4Y3cpOworCQkJZXczMihDVFJMLAorCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0KKwkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOworCQkJaHdfZGJnKGh3LCAiRE9XTiAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShyeGN3ICYgRTEwMDBfUlhDV19TWU5DSCkpIHsKKwkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHN5bmMsIGFuZCBjYW4gdG9sZXJhdGUgb25lCisJCQkgKiBpbnZhbGlkIChJVikgY29kZXdvcmQgYmVmb3JlIGRlY2xhcmluZworCQkJICogbGluayBkb3duLCBzbyByZXJlYWQgdG8gbG9vayBhZ2FpbgorCQkJICovCisJCQl1ZGVsYXkoMTApOworCQkJcnhjdyA9IGVyMzIoUlhDVyk7CisJCQlpZiAocnhjdyAmIEUxMDAwX1JYQ1dfSVYpIHsKKwkJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IGZhbHNlOworCQkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBlMTAwMF92YWxpZF9sZWRfZGVmYXVsdF84MjU3MSAtIFZlcmlmeSBhIHZhbGlkIGRlZmF1bHQgTEVEIGNvbmZpZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIE5WTSAoRUVQUk9NKQpAQCAtMTIyMCwxMSArMTQyNSwxOSBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpICYmCi0JICAgICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GNzQ2KQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUXzgyNTczOwotCWVsc2UgaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF8wMDAwIHx8ICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GRkZGKQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRjc0NikKKwkJCSpkYXRhID0gSURfTEVEX0RFRkFVTFRfODI1NzM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfMDAwMCB8fAorCQkgICAgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpCisJCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MTcsMyArMTczMCwxOSBAQAogCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKIH07CiAKK3N0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTgzX2luZm8gPSB7CisJLm1hYwkJCT0gZTEwMDBfODI1ODMsCisJLmZsYWdzCQkJPSBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUgorCQkJCSAgfCBGTEFHX0hBU19XT0wKKwkJCQkgIHwgRkxBR19BUE1FX0lOX0NUUkwzCisJCQkJICB8IEZMQUdfUlhfQ1NVTV9FTkFCTEVECisJCQkJICB8IEZMQUdfSEFTX1NNQVJUX1BPV0VSX0RPV04KKwkJCQkgIHwgRkxBR19IQVNfQU1UCisJCQkJICB8IEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCwKKwkucGJhCQkJPSAyMCwKKwkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKKwkubWFjX29wcwkJPSAmZTgyNTcxX21hY19vcHMsCisJLnBoeV9vcHMJCT0gJmU4Ml9waHlfb3BzX2JtLAorCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IGU2Y2FmMjkuLjI0M2FhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEEgMHgwMDAwMDA4MCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmFibGUgUGluIDcgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRUVfUlNUICAgIDB4MDAwMDIwMDAgLyogUmVpbml0aWFsaXplIGZyb20gRUVQUk9NICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1JPX0RJUyAgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9ETUFfRFlOX0NMS19FTiAweDAwMDgwMDAwIC8qIERNQSBEeW5hbWljIENsb2NrIEdhdGluZyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUyAgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9FSUFNRSAgICAgICAgICAweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IDM3YmNiMTkuLmYzNzM2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0xMDEsNiArMTAxLDcgQEAKIAlib2FyZF84MjU3MiwKIAlib2FyZF84MjU3MywKIAlib2FyZF84MjU3NCwKKwlib2FyZF84MjU4MywKIAlib2FyZF84MDAwM2VzMmxhbiwKIAlib2FyZF9pY2g4bGFuLAogCWJvYXJkX2ljaDlsYW4sCkBAIC0xOTUsOCArMTk2LDYgQEAKIAl1MTYgbGlua19kdXBsZXg7CiAJdTE2IGVlcHJvbV92ZXJzOwogCi0Jc3BpbmxvY2tfdCB0eF9xdWV1ZV9sb2NrOyAvKiBwcmV2ZW50IGNvbmN1cnJlbnQgdGFpbCB1cGRhdGVzICovCi0KIAkvKiB0cmFjayBkZXZpY2UgdXAvZG93bi90ZXN0aW5nIHN0YXRlICovCiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIApAQCAtNDAxLDYgKzQwMCw3IEBACiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzJfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU3M19pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc0X2luZm87CitleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1ODNfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9pY2g4X2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoOV9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2ljaDEwX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCBlNDg5NTZkLi40ZDI1ZWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTc5MCw2ICs3OTAsNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAljYXNlIGUxMDAwX2ljaDhsYW46CiAJY2FzZSBlMTAwMF9pY2g5bGFuOgogCWNhc2UgZTEwMDBfaWNoMTBsYW46CkBAIC0xNTg5LDcgKzE1OTAsNyBAQAogCSpkYXRhID0gMDsKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAJCWludCBpID0gMDsKLQkJaHctPm1hYy5zZXJkZXNfaGFzX2xpbmsgPSAwOworCQlody0+bWFjLnNlcmRlc19oYXNfbGluayA9IGZhbHNlOwogCiAJCS8qCiAJCSAqIE9uIHNvbWUgYmxhZGUgc2VydmVyIGRlc2lnbnMsIGxpbmsgZXN0YWJsaXNobWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAppbmRleCAyZDRjZTA0Li5kOGI4MjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaApAQCAtMzM5LDYgKzMzOSw4IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0VfSUFNVAkJMHgxMDhDCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0wJCQkweDEwOUEKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc0TAkJCTB4MTBEMworI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzRMQQkJCTB4MTBGNgorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1ODNWICAgICAgICAgICAgICAgICAgICAgMHgxNTBDCiAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX0NPUFBFUl9EUFQJMHgxMDk2CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfRFBUCTB4MTA5OApAQCAtMzc2LDYgKzM3OCw3IEBACiAJZTEwMDBfODI1NzIsCiAJZTEwMDBfODI1NzMsCiAJZTEwMDBfODI1NzQsCisJZTEwMDBfODI1ODMsCiAJZTEwMDBfODAwMDNlczJsYW4sCiAJZTEwMDBfaWNoOGxhbiwKIAllMTAwMF9pY2g5bGFuLApAQCAtNDU5LDYgKzQ2MiwxMyBAQAogCWUxMDAwX3NtYXJ0X3NwZWVkX29mZgogfTsKIAorZW51bSBlMTAwMF9zZXJkZXNfbGlua19zdGF0ZSB7CisJZTEwMDBfc2VyZGVzX2xpbmtfZG93biA9IDAsCisJZTEwMDBfc2VyZGVzX2xpbmtfYXV0b25lZ19wcm9ncmVzcywKKwllMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlLAorCWUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cAorfTsKKwogLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCiBzdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7CiAJX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KQEAgLTc4Nyw2ICs3OTcsNyBAQAogCWJvb2wgaW5faWZzX21vZGU7CiAJYm9vbCBzZXJkZXNfaGFzX2xpbms7CiAJYm9vbCB0eF9wa3RfZmlsdGVyaW5nOworCWVudW0gZTEwMDBfc2VyZGVzX2xpbmtfc3RhdGUgc2VyZGVzX2xpbmtfc3RhdGU7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggZTQxNWU4MS4uNmQxYWFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0zOTAsOCArMzkwLDYgQEAKIH0KIAogc3RhdGljIERFRklORV9NVVRFWChudm1fbXV0ZXgpOwotc3RhdGljIHBpZF90IG52bV9vd25lcl9waWQgPSAtMTsKLXN0YXRpYyBjaGFyIG52bV9vd25lcl9uYW1lW1RBU0tfQ09NTV9MRU5dID0gIiI7CiAKIC8qKgogICogIGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4gLSBBY3F1aXJlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZwpAQCAtNDA4LDE2ICs0MDYsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmbnZtX211dGV4KSkgewotCQlXQVJOKDEsIEtFUk5fRVJSICJlMTAwMGUgbXV0ZXggY29udGVudGlvbi4gT3duZWQgYnkgcHJvY2VzcyAiCi0JCSAgICAgIiVzIChwaWQgJWQpLCByZXF1aXJlZCBieSBwcm9jZXNzICVzIChwaWQgJWQpXG4iLAotCQkgICAgIG52bV9vd25lcl9uYW1lLCBudm1fb3duZXJfcGlkLAotCQkgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0KLQkJbXV0ZXhfbG9jaygmbnZtX211dGV4KTsKLQl9Ci0JbnZtX293bmVyX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlzdHJuY3B5KG52bV9vd25lcl9uYW1lLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwltdXRleF9sb2NrKCZudm1fbXV0ZXgpOwogCiAJd2hpbGUgKHRpbWVvdXQpIHsKIAkJZXh0Y25mX2N0cmwgPSBlcjMyKEVYVENORl9DVFJMKTsKQEAgLTQzNSw4ICs0MjQsNiBAQAogCQlod19kYmcoaHcsICJGVyBvciBIVyBoYXMgbG9ja2VkIHRoZSByZXNvdXJjZSBmb3IgdG9vIGxvbmcuXG4iKTsKIAkJZXh0Y25mX2N0cmwgJj0gfkUxMDAwX0VYVENORl9DVFJMX1NXRkxBRzsKIAkJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwotCQludm1fb3duZXJfcGlkID0gLTE7Ci0JCXN0cmNweShudm1fb3duZXJfbmFtZSwgIiIpOwogCQltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiAJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKIAl9CkBAIC00NjAsOCArNDQ3LDYgQEAKIAlleHRjbmZfY3RybCAmPSB+RTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwogCWV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKIAotCW52bV9vd25lcl9waWQgPSAtMTsKLQlzdHJjcHkobnZtX293bmVyX25hbWUsICIiKTsKIAltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwppbmRleCA2Njc0MTEwLi4xOGE0ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCkBAIC0xNTksNDEgKzE1OSw2IEBACiB9CiAKIC8qKgotICogIGUxMDAwX210YV9zZXQgLSBTZXQgbXVsdGljYXN0IGZpbHRlciB0YWJsZSBhZGRyZXNzCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqICBAaGFzaF92YWx1ZTogZGV0ZXJtaW5lcyB0aGUgTVRBIHJlZ2lzdGVyIGFuZCBiaXQgdG8gc2V0Ci0gKgotICogIFRoZSBtdWx0aWNhc3QgdGFibGUgYWRkcmVzcyBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuCi0gKiAgVGhlIGhhc2hfdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCByZWdpc3RlciB0aGUgYml0IGlzIGluLCB0aGUKLSAqICBjdXJyZW50IHZhbHVlIGlzIHJlYWQsIHRoZSBuZXcgYml0IGlzIE9SJ2QgaW4gYW5kIHRoZSBuZXcgdmFsdWUgaXMKLSAqICB3cml0dGVuIGJhY2sgaW50byB0aGUgcmVnaXN0ZXIuCi0gKiovCi1zdGF0aWMgdm9pZCBlMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKQotewotCXUzMiBoYXNoX2JpdCwgaGFzaF9yZWcsIG10YTsKLQotCS8qCi0JICogVGhlIE1UQSBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuIEl0IGlzCi0JICogdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mICgzMiptdGFfcmVnX2NvdW50KSBiaXRzLiAgV2Ugd2FudCB0bwotCSAqIHNldCBiaXQgQml0QXJyYXlbaGFzaF92YWx1ZV0uIFNvIHdlIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcgotCSAqIHRoZSBiaXQgaXMgaW4sIHJlYWQgaXQsIE9SIGluIHRoZSBuZXcgYml0LCB0aGVuIHdyaXRlCi0JICogYmFjayB0aGUgbmV3IHZhbHVlLiAgVGhlIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKSBzZXJ2ZXMgYXMgYQotCSAqIG1hc2sgdG8gYml0cyAzMTo1IG9mIHRoZSBoYXNoIHZhbHVlIHdoaWNoIGdpdmVzIHVzIHRoZQotCSAqIHJlZ2lzdGVyIHdlJ3JlIG1vZGlmeWluZy4gIFRoZSBoYXNoIGJpdCB3aXRoaW4gdGhhdCByZWdpc3RlcgotCSAqIGlzIGRldGVybWluZWQgYnkgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGUgaGFzaCB2YWx1ZS4KLQkgKi8KLQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgKGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDEpOwotCWhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7Ci0KLQltdGEgPSBFMTAwMF9SRUFEX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBoYXNoX3JlZyk7Ci0KLQltdGEgfD0gKDEgPDwgaGFzaF9iaXQpOwotCi0JRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGhhc2hfcmVnLCBtdGEpOwotCWUxZV9mbHVzaCgpOwotfQotCi0vKioKICAqICBlMTAwMF9oYXNoX21jX2FkZHIgLSBHZW5lcmF0ZSBhIG11bHRpY2FzdCBoYXNoIHZhbHVlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcjogcG9pbnRlciB0byBhIG11bHRpY2FzdCBhZGRyZXNzCkBAIC0yODEsOCArMjQ2LDEzIEBACiAJCQkJCXU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAogCQkJCQl1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCiB7Ci0JdTMyIGhhc2hfdmFsdWU7CiAJdTMyIGk7CisJdTMyICptY2FycmF5ID0ga3phbGxvYyhody0+bWFjLm10YV9yZWdfY291bnQgKiBzaXplb2YodTMyKSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIW1jYXJyYXkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aWNhc3QgYXJyYXkgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KIAogCS8qCiAJICogTG9hZCB0aGUgZmlyc3Qgc2V0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgZXhhY3QKQEAgLTMwMiwyMCArMjcyLDI0IEBACiAJCX0KIAl9CiAKLQkvKiBDbGVhciB0aGUgb2xkIHNldHRpbmdzIGZyb20gdGhlIE1UQSAqLwotCWh3X2RiZyhodywgIkNsZWFyaW5nIE1UQVxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKSB7Ci0JCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBpLCAwKTsKLQkJZTFlX2ZsdXNoKCk7Ci0JfQotCiAJLyogTG9hZCBhbnkgcmVtYWluaW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8KIAlmb3IgKDsgbWNfYWRkcl9jb3VudCA+IDA7IG1jX2FkZHJfY291bnQtLSkgeworCQl1MzIgaGFzaF92YWx1ZSwgaGFzaF9yZWcsIGhhc2hfYml0LCBtdGE7CiAJCWhhc2hfdmFsdWUgPSBlMTAwMF9oYXNoX21jX2FkZHIoaHcsIG1jX2FkZHJfbGlzdCk7CiAJCWh3X2RiZyhodywgIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOwotCQllMTAwMF9tdGFfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKKwkJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKTsKKwkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKKwkJbXRhID0gKDEgPDwgaGFzaF9iaXQpOworCQltY2FycmF5W2hhc2hfcmVnXSB8PSBtdGE7CiAJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKIAl9CisKKwkvKiB3cml0ZSB0aGUgaGFzaCB0YWJsZSBjb21wbGV0ZWx5ICovCisJZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKQorCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaSwgbWNhcnJheVtpXSk7CisKKwllMWVfZmx1c2goKTsKKwlrZnJlZShtY2FycmF5KTsKIH0KIAogLyoqCkBAIC01MDEsNyArNDc1LDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NjYsNyArNTQwLDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfSBlbHNlIGlmICghKEUxMDAwX1RYQ1dfQU5FICYgZXIzMihUWENXKSkpIHsKIAkJLyoKIAkJICogSWYgd2UgZm9yY2UgbGluayBmb3Igbm9uLWF1dG8tbmVnb3RpYXRpb24gc3dpdGNoLCBjaGVjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDkxODE3ZDAuLmJmYjJkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTQ0LDEwICs0NCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hZXIuaD4KIAogI2luY2x1ZGUgImUxMDAwLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4zLjMtazYiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMy40LWs0IgogY2hhciBlMTAwMGVfZHJpdmVyX25hbWVbXSA9ICJlMTAwMGUiOwogY29uc3QgY2hhciBlMTAwMGVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogCkBAIC01Niw2ICs1Nyw3IEBACiAJW2JvYXJkXzgyNTcyXQkJPSAmZTEwMDBfODI1NzJfaW5mbywKIAlbYm9hcmRfODI1NzNdCQk9ICZlMTAwMF84MjU3M19pbmZvLAogCVtib2FyZF84MjU3NF0JCT0gJmUxMDAwXzgyNTc0X2luZm8sCisJW2JvYXJkXzgyNTgzXQkJPSAmZTEwMDBfODI1ODNfaW5mbywKIAlbYm9hcmRfODAwMDNlczJsYW5dCT0gJmUxMDAwX2VzMl9pbmZvLAogCVtib2FyZF9pY2g4bGFuXQkJPSAmZTEwMDBfaWNoOF9pbmZvLAogCVtib2FyZF9pY2g5bGFuXQkJPSAmZTEwMDBfaWNoOV9pbmZvLApAQCAtOTksOCArMTAxLDggQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpCi0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAotCQkJCQkgbGUxNl90b19jcHUodmxhbikpOworCQl2bGFuX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBhZGFwdGVyLT52bGdycCwKKwkJCQkgbGUxNl90b19jcHUodmxhbiksIHNrYik7CiAJZWxzZQogCQluYXBpX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBza2IpOwogfQpAQCAtNTY1LDE1ICs1NjcsMTQgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3B1dF90eGJ1ZihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3ByaW50X3R4X2hhbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MjAsMTUgKzYyMSwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSAwOworCWJvb2wgY2xlYW5lZDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXMgPSAwLCB0b3RhbF90eF9wYWNrZXRzID0gMDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IDA7ICFjbGVhbmVkOyApIHsKKwl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKKwkJZm9yIChjbGVhbmVkID0gMDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CkBAIC02NTQsMTAgKzY1Niw2IEBACiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwotI2RlZmluZSBFMTAwMF9UWF9XRUlHSFQgNjQKLQkJLyogd2VpZ2h0IG9mIGEgc29ydCBmb3IgdHgsIHRvIGF2b2lkIGVuZGxlc3MgdHJhbnNtaXQgY2xlYW51cCAqLwotCQlpZiAoY291bnQrKyA9PSBFMTAwMF9UWF9XRUlHSFQpCi0JCQlicmVhazsKIAl9CiAKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKQEAgLTY3OCwxMyArNjc2LDExIEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmRldGVjdF90eF9odW5nKSB7Ci0JCS8qCi0JCSAqIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKLQkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaQotCQkgKi8KKwkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQorCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCiAJCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gMDsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcAorCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wCiAJCQkgICAgICAgKyAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIAkJCWUxMDAwX3ByaW50X3R4X2hhbmcoYWRhcHRlcik7CkBAIC02OTUsNyArNjkxLDcgQEAKIAlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX3R4X2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7Ci0JcmV0dXJuIGNsZWFuZWQ7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPmNvdW50KTsKIH0KIAogLyoqCkBAIC0xMTUyLDcgKzExNDgsNyBAQAogCSAqIHJlYWQgSUNSIGRpc2FibGVzIGludGVycnVwdHMgdXNpbmcgSUFNCiAJICovCiAKLQlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CisJaWYgKGljciAmIEUxMDAwX0lDUl9MU0MpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQkvKgogCQkgKiBJQ0g4IHdvcmthcm91bmQtLSBDYWxsIGdpZyBzcGVlZCBkcm9wIHdvcmthcm91bmQgb24gY2FibGUKQEAgLTExNzksMTIgKzExNzUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMjE4LDcgKzEyMTQsNyBAQAogCSAqIElNQyB3cml0ZQogCSAqLwogCi0JaWYgKGljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgeworCWlmIChpY3IgJiBFMTAwMF9JQ1JfTFNDKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKIAkJLyoKIAkJICogSUNIOCB3b3JrYXJvdW5kLS0gQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIGNhYmxlCkBAIC0xMjQ2LDEyICsxMjQyLDEyIEBACiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI2NSw3ICsxMjYxLDggQEAKIAl1MzIgaWNyID0gZXIzMihJQ1IpOwogCiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpIHsKLQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKQEAgLTEyODIsNyArMTI3OSw4IEBACiAJfQogCiBub19saW5rX2ludGVycnVwdDoKLQlldzMyKElNUywgRTEwMDBfSU1TX0xTQyB8IEUxMDAwX0lNU19PVEhFUik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWV3MzIoSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX09USEVSKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMjAsMTAgKzEzMTgsMTAgQEAKIAkJYWRhcHRlci0+cnhfcmluZy0+c2V0X2l0ciA9IDA7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2OTgsNyArMTY5Niw2IEBACiAKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwogCiAJcmV0dXJuIDA7CiBlcnI6CkBAIC0yMDA3LDMyICsyMDA0LDI1IEBACiAJICAgICEoYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCAmIGFkYXB0ZXItPnR4X3JpbmctPmltc192YWwpKQogCQlnb3RvIGNsZWFuX3J4OwogCi0JLyoKLQkgKiBlMTAwMF9jbGVhbiBpcyBjYWxsZWQgcGVyLWNwdS4gIFRoaXMgbG9jayBwcm90ZWN0cwotCSAqIHR4X3JpbmcgZnJvbSBiZWluZyBjbGVhbmVkIGJ5IG11bHRpcGxlIGNwdXMKLQkgKiBzaW11bHRhbmVvdXNseS4gIEEgZmFpbHVyZSBvYnRhaW5pbmcgdGhlIGxvY2sgbWVhbnMKLQkgKiB0eF9yaW5nIGlzIGN1cnJlbnRseSBiZWluZyBjbGVhbmVkIGFueXdheS4KLQkgKi8KLQlpZiAoc3Bpbl90cnlsb2NrKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKSkgewotCQl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0JfQorCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlcik7CiAKIGNsZWFuX3J4OgogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKIAkJCWUxMDAwX3NldF9pdHIoYWRhcHRlcik7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQotCQkJZXczMihJTVMsIGFkYXB0ZXItPnJ4X3JpbmctPmltc192YWwpOwotCQllbHNlCi0JCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKKwkJCQlldzMyKElNUywgYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCk7CisJCQllbHNlCisJCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJfQogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0yOTIyLDggKzI5MTIsNiBAQAogCWlmIChlMTAwMF9hbGxvY19xdWV1ZXMoYWRhcHRlcikpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCiAJLyogRXhwbGljaXRseSBkaXNhYmxlIElSUSBzaW5jZSB0aGUgTklDIGNhbiBiZSBpbiBhbnkgc3RhdGUuICovCiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKQEAgLTMzMjAsNyArMzMwOCw3IEBACiAKIAlhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArPSBlcjMyKEFMR05FUlJDKTsKIAlhZGFwdGVyLT5zdGF0cy5yeGVycmMgKz0gZXIzMihSWEVSUkMpOwotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpCisJaWYgKChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpICYmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODMpKQogCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBlcjMyKFROQ1JTKTsKIAlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyICs9IGVyMzIoQ0VYVEVSUik7CiAJYWRhcHRlci0+c3RhdHMudHNjdGMgKz0gZXIzMihUU0NUQyk7CkBAIC0zNzc3LDIzICszNzY1LDMwIEBACiAJdW5zaWduZWQgaW50IGk7CiAJdTggY3NzOwogCXUzMiBjbWRfbGVuID0gRTEwMDBfVFhEX0NNRF9ERVhUOworCV9fYmUxNiBwcm90b2NvbDsKIAogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKQorCQlwcm90b2NvbCA9IHZsYW5fZXRoX2hkcihza2IpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCWVsc2UKKwkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCS8qIFhYWCBub3QgaGFuZGxpbmcgYWxsIElQVjYgaGVhZGVycyAqLwogCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCWNtZF9sZW4gfD0gRTEwMDBfVFhEX0NNRF9UQ1A7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKQotCQkJZV93YXJuKCJjaGVja3N1bV9wYXJ0aWFsIHByb3RvPSV4IVxuIiwgc2tiLT5wcm90b2NvbCk7CisJCQllX3dhcm4oImNoZWNrc3VtX3BhcnRpYWwgcHJvdG89JXghXG4iLAorCQkJICAgICAgIGJlMTZfdG9fY3B1KHByb3RvY29sKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzgzMiw0MiArMzgyNyw0MCBAQAogewogCXN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCW9mZnNldCA9IDA7CisKIAl3aGlsZSAobGVuKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCi0JCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCSAqIGluIFRTTyBtb2RlLiAgQXBwZW5kIDQtYnl0ZSBzZW50aW5lbCBkZXNjICovCi0JCWlmIChtc3MgJiYgIW5yX2ZyYWdzICYmIHNpemUgPT0gbGVuICYmIHNpemUgPiA4KQotCQkJc2l6ZSAtPSA0OwotCiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkvKiBzZXQgdGltZV9zdGFtcCAqYmVmb3JlKiBkbWEgdG8gaGVscCBhdm9pZCBhIHBvc3NpYmxlIHJhY2UgKi8KIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCi0JCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkJCXNpemUsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSkpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKLQkJCWFkYXB0ZXItPnR4X2RtYV9mYWlsZWQrKzsKLQkJCXJldHVybiAtMTsKLQkJfQogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CisJCWNvdW50Kys7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwotCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CisKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMzg3NSw0OSArMzg2OCwyNyBAQAogCiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKLQkJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCQkgKiBpbiBUU08gbW9kZS4gIEFwcGVuZCA0LWJ5dGUgc2VudGluZWwgZGVzYyAqLwotCQkJaWYgKG1zcyAmJiBmID09IChucl9mcmFncy0xKSAmJiBzaXplID09IGxlbiAmJiBzaXplID4gOCkKLQkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGFkYXB0ZXItPnBkZXYsCi0JCQkJCQkgIGJ1ZmZlcl9pbmZvLT5kbWEpKSB7Ci0JCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCQkiVFggRE1BIHBhZ2UgbWFwIGZhaWxlZFxuIik7Ci0JCQkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCi0JCQlpKys7Ci0JCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlpID0gMDsKIAkJfQogCX0KIAotCWlmIChpID09IDApCi0JCWkgPSB0eF9yaW5nLT5jb3VudCAtIDE7Ci0JZWxzZQotCQlpLS07Ci0KIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC00MDY5LDcgKzQwNDAsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3M7CiAJdW5zaWduZWQgaW50IG1zczsKIAlpbnQgY291bnQgPSAwOwpAQCAtNDEzOCwxOCArNDEwOCwxMiBAQAogCWlmIChhZGFwdGVyLT5ody5tYWMudHhfcGt0X2ZpbHRlcmluZykKIAkJZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKGFkYXB0ZXIsIHNrYik7CiAKLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpKQotCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KIAkvKgogCSAqIG5lZWQ6IGNvdW50ICsgMiBkZXNjIGdhcCB0byBrZWVwIHRhaWwgZnJvbSB0b3VjaGluZwogCSAqIGhlYWQsIG90aGVyd2lzZSB0cnkgbmV4dCB0aW1lCiAJICovCi0JaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19WTEFOOwpAQCAtNDE2MSw3ICs0MTI1LDYgQEAKIAl0c28gPSBlMTAwMF90c28oYWRhcHRlciwgc2tiKTsKIAlpZiAodHNvIDwgMCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIApAQCAtNDE3OCwyMiArNDE0MSwyMCBAQAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAorCS8qIGlmIGNvdW50IGlzIDAgdGhlbiBtYXBwaW5nIGVycm9yIGhhcyBvY2N1cmVkICovCiAJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsIG5yX2ZyYWdzLCBtc3MpOwotCWlmIChjb3VudCA8IDApIHsKLQkJLyogaGFuZGxlIHBjaV9tYXBfc2luZ2xlKCkgZXJyb3IgaW4gZTEwMDBfdHhfbWFwICovCisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7CisKKwl9IGVsc2UgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CiAJfQogCi0JZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfZmxhZ3MsIGNvdW50KTsKLQotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLwotCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQ1NDMsNiArNDUwNCwxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIEFFUiAoQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nKSBob29rcyAqLworCWVyciA9IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGZhaWxlZCAiCisJCSAgICAgICAgICAgICAgICAgICAgIjB4JXhcbiIsIGVycik7CisJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KKwl9CisKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwpAQCAtNDYzNywyNCArNDYwNiwyOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBlcnI7CisJcGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7CiAKIAllMTAwMGVfZGlzYWJsZV9sMWFzcG0ocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9IGVsc2UgeworCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKworCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7CisJCWV3MzIoV1VTLCB+MCk7CisJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAl9Ci0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CisJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CiAKLQllMTAwMGVfcmVzZXQoYWRhcHRlcik7Ci0JZXczMihXVVMsIH4wKTsKLQotCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoqCkBAIC00OTIyLDEyICs0ODk2LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQkvKgotCSAqIFdlIHNob3VsZCBub3QgYmUgdXNpbmcgTExUWCBhbnltb3JlLCBidXQgd2UgYXJlIHN0aWxsIFR4IGZhc3RlciB3aXRoCi0JICogaXQuCi0JICovCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0KIAlpZiAoZTEwMDBlX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odykpCiAJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfTU5HX1BUX0VOQUJMRUQ7CiAKQEAgLTUwOTEsNiArNTA1OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVycjsKIAogCS8qCiAJICogZmx1c2hfc2NoZWR1bGVkIHdvcmsgbWF5IHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRhc2ssIHNvCkBAIC01MTI1LDYgKzUwOTQsMTIgQEAKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKKwkvKiBBRVIgZGlzYWJsZSAqLworCWVyciA9IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJICAgICAgICAicGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZmFpbGVkIDB4JXhcbiIsIGVycik7CisKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKQEAgLTUxNTYsNiArNTEzMSw4IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTczTCksIGJvYXJkXzgyNTczIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMKSwgYm9hcmRfODI1NzQgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMQSksIGJvYXJkXzgyNTc0IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgzViksIGJvYXJkXzgyNTgzIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVCksCiAJICBib2FyZF84MDAwM2VzMmxhbiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTIxMDAuYyBiL2RyaXZlcnMvbmV0L2UyMTAwLmMKaW5kZXggYjA3YmExOS4uZDJmNmVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTIxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMjEwMC5jCkBAIC0yMTYsMTMgKzIxNiwxMyBAQAogCQlwcmludGsoIiAlMDJYIiwgc3RhdGlvbl9hZGRyW2ldKTsKIAogCWlmIChkZXYtPmlycSA8IDIpIHsKLQkJaW50IGlycWxpc3RbXSA9IHsxNSwxMSwxMCwxMiw1LDksMyw0fSwgaTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaW50IGlycWxpc3RbXSA9IHsxNSwgMTEsIDEwLCAxMiwgNSwgOSwgMywgNH07CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycWxpc3QpOyBpKyspCiAJCQlpZiAocmVxdWVzdF9pcnEgKGlycWxpc3RbaV0sIE5VTEwsIDAsICJib2d1cyIsIE5VTEwpICE9IC1FQlVTWSkgewogCQkJCWRldi0+aXJxID0gaXJxbGlzdFtpXTsKIAkJCQlicmVhazsKIAkJCX0KLQkJaWYgKGkgPj0gOCkgeworCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGlycWxpc3QpKSB7CiAJCQlwcmludGsoIiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+aXJxKTsKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKaW5kZXggNjI3MWI5NC4uNmUzMTdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiZWhlYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDA5NiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDEwMCIKIAogLyogZUhFQSBjYXBhYmlsaXR5IGZsYWdzICovCiAjZGVmaW5lIERMUEFSX1BPUlRfQUREX1JFTSAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBkZmU5MjI2Li5hYzBjNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTE1NSw2ICsxNTUsOCBAQAogCWludCBudW1fZndfaGFuZGxlcywgaywgbDsKIAogCS8qIERldGVybWluZSBudW1iZXIgb2YgaGFuZGxlcyAqLworCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcHRlciwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkgewogCQludW1fYWRhcHRlcnMrKzsKIApAQCAtMTc2LDE1ICsxNzgsMTkgQEAKIAlpZiAobnVtX2Z3X2hhbmRsZXMpIHsKIAkJYXJyID0ga3phbGxvYyhudW1fZndfaGFuZGxlcyAqIHNpemVvZigqYXJyKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYXJyKQotCQkJcmV0dXJuOyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KKwkJCWdvdG8gb3V0OyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KIAl9IGVsc2UKIAkJZ290byBvdXRfdXBkYXRlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KSB7CisJCWlmIChudW1fYWRhcHRlcnMgPT0gMCkKKwkJCWJyZWFrOworCiAJCWZvciAoayA9IDA7IGsgPCBFSEVBX01BWF9QT1JUUzsgaysrKSB7CiAJCQlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gYWRhcHRlci0+cG9ydFtrXTsKIAotCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApKQorCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApCisJCQkJfHwgKG51bV9wb3J0cyA9PSAwKSkKIAkJCQljb250aW51ZTsKIAogCQkJZm9yIChsID0gMDsKQEAgLTIwNyw2ICsyMTMsNyBAQAogCQkJfQogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpKytdLmZ3aCA9IHBvcnQtPnFwX2VxLT5md19oYW5kbGU7CisJCQludW1fcG9ydHMtLTsKIAkJfQogCiAJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CkBAIC0yMTYsMTYgKzIyMywyMCBAQAogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpKytdLmZ3aCA9IGFkYXB0ZXItPm1yLmhhbmRsZTsKIAkJfQorCQludW1fYWRhcHRlcnMtLTsKIAl9CiAKIG91dF91cGRhdGU6CiAJa2ZyZWUoZWhlYV9md19oYW5kbGVzLmFycik7CiAJZWhlYV9md19oYW5kbGVzLmFyciA9IGFycjsKIAllaGVhX2Z3X2hhbmRsZXMubnVtX2VudHJpZXMgPSBpOworb3V0OgorCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBlaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnModm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlaGVhX2JjbWNfcmVnX2VudHJ5ICphcnIgPSBOVUxMOwogCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IGVoZWFfbWNfbGlzdCAqbWNfZW50cnk7CkBAIC0yMzMsNiArMjQ0LDggQEAKIAlpbnQgaSA9IDA7CiAJaW50IGs7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhlYV9iY21jX3JlZ3MubG9jaywgZmxhZ3MpOworCiAJLyogRGV0ZXJtaW5lIG51bWJlciBvZiByZWdpc3RyYXRpb25zICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KQogCQlmb3IgKGsgPSAwOyBrIDwgRUhFQV9NQVhfUE9SVFM7IGsrKykgewpAQCAtMjUwLDcgKzI2Myw3IEBACiAJaWYgKG51bV9yZWdpc3RyYXRpb25zKSB7CiAJCWFyciA9IGt6YWxsb2MobnVtX3JlZ2lzdHJhdGlvbnMgKiBzaXplb2YoKmFyciksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWFycikKLQkJCXJldHVybjsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCisJCQlnb3RvIG91dDsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCiAJfSBlbHNlCiAJCWdvdG8gb3V0X3VwZGF0ZTsKIApAQCAtMjYxLDYgKzI3NCw5IEBACiAJCQlpZiAoIXBvcnQgfHwgKHBvcnQtPnN0YXRlICE9IEVIRUFfUE9SVF9VUCkpCiAJCQkJY29udGludWU7CiAKKwkJCWlmIChudW1fcmVnaXN0cmF0aW9ucyA9PSAwKQorCQkJCWdvdG8gb3V0X3VwZGF0ZTsKKwogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpXS5wb3J0X2lkID0gcG9ydC0+bG9naWNhbF9wb3J0X2lkOwogCQkJYXJyW2ldLnJlZ190eXBlID0gRUhFQV9CQ01DX0JST0FEQ0FTVCB8CkBAIC0yNzIsOSArMjg4LDEzIEBACiAJCQlhcnJbaV0ucmVnX3R5cGUgPSBFSEVBX0JDTUNfQlJPQURDQVNUIHwKIAkJCQkJICBFSEVBX0JDTUNfVkxBTklEX0FMTDsKIAkJCWFycltpKytdLm1hY2FkZHIgPSBwb3J0LT5tYWNfYWRkcjsKKwkJCW51bV9yZWdpc3RyYXRpb25zIC09IDI7CiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkobWNfZW50cnksCiAJCQkJCSAgICAmcG9ydC0+bWNfbGlzdC0+bGlzdCwgbGlzdCkgeworCQkJCWlmIChudW1fcmVnaXN0cmF0aW9ucyA9PSAwKQorCQkJCQlnb3RvIG91dF91cGRhdGU7CisKIAkJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJCWFycltpXS5wb3J0X2lkID0gcG9ydC0+bG9naWNhbF9wb3J0X2lkOwogCQkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19TQ09QRV9BTEwgfApAQCAtMjg4LDYgKzMwOCw3IEBACiAJCQkJCQkgIEVIRUFfQkNNQ19NVUxUSUNBU1QgfAogCQkJCQkJICBFSEVBX0JDTUNfVkxBTklEX0FMTDsKIAkJCQlhcnJbaSsrXS5tYWNhZGRyID0gbWNfZW50cnktPm1hY2FkZHI7CisJCQkJbnVtX3JlZ2lzdHJhdGlvbnMgLT0gMjsKIAkJCX0KIAkJfQogCX0KQEAgLTI5Niw2ICszMTcsOCBAQAogCWtmcmVlKGVoZWFfYmNtY19yZWdzLmFycik7CiAJZWhlYV9iY21jX3JlZ3MuYXJyID0gYXJyOwogCWVoZWFfYmNtY19yZWdzLm51bV9lbnRyaWVzID0gaTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGVhX2JjbWNfcmVncy5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWhlYV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTMwOCw3ICszMzEsNyBAQAogCiAJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CiAKLQljYjIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2IyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjIpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjIiKTsKIAkJZ290byBvdXQ7CkBAIC0zNDEsNyArMzY0LDcgQEAKIAlzdGF0cy0+cnhfcGFja2V0cyA9IHJ4X3BhY2tldHM7CiAKIG91dF9oZXJyOgotCWtmcmVlKGNiMik7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMik7CiBvdXQ6CiAJcmV0dXJuIHN0YXRzOwogfQpAQCAtMzcwLDggKzM5Myw2IEBACiAJCQkJCQkJICAgICAgRUhFQV9MX1BLVF9TSVpFKTsKIAkJCWlmICghc2tiX2Fycl9ycTFbaW5kZXhdKSB7CiAJCQkJcHItPnJxMV9za2JhLm9zX3NrYnMgPSBmaWxsX3dxZXMgLSBpOwotCQkJCWVoZWFfZXJyb3IoIiVzOiBubyBtZW0gZm9yIHNrYi8lZCB3cWVzIGZpbGxlZCIsCi0JCQkJCSAgIGRldi0+bmFtZSwgaSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTM4NywyNiArNDA4LDE5IEBACiAJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIGFkZGVyKTsKIH0KIAotc3RhdGljIGludCBlaGVhX2luaXRfZmlsbF9ycTEoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLCBpbnQgbnJfcnExYSkKK3N0YXRpYyB2b2lkIGVoZWFfaW5pdF9maWxsX3JxMShzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsIGludCBucl9ycTFhKQogewotCWludCByZXQgPSAwOwogCXN0cnVjdCBza19idWZmICoqc2tiX2Fycl9ycTEgPSBwci0+cnExX3NrYmEuYXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwci0+cG9ydC0+bmV0ZGV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHByLT5ycTFfc2tiYS5sZW47IGkrKykgewogCQlza2JfYXJyX3JxMVtpXSA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBFSEVBX0xfUEtUX1NJWkUpOwotCQlpZiAoIXNrYl9hcnJfcnExW2ldKSB7Ci0JCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAotCQkJCSAgIGRldi0+bmFtZSwgaSk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKCFza2JfYXJyX3JxMVtpXSkKKwkJCWJyZWFrOwogCX0KIAkvKiBSaW5nIGRvb3JiZWxsICovCiAJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIG5yX3JxMWEpOwotb3V0OgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZWhlYV9yZWZpbGxfcnFfZGVmKHN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciwKQEAgLTQzNSwxMCArNDQ5LDEyIEBACiAJCXU2NCB0bXBfYWRkcjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBwYWNrZXRfc2l6ZSk7CiAJCWlmICghc2tiKSB7Ci0JCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAotCQkJCSAgIHByLT5wb3J0LT5uZXRkZXYtPm5hbWUsIGkpOwogCQkJcV9za2JhLT5vc19za2JzID0gZmlsbF93cWVzIC0gaTsKLQkJCXJldCA9IC1FTk9NRU07CisJCQlpZiAocV9za2JhLT5vc19za2JzID09IHFfc2tiYS0+bGVuIC0gMikgeworCQkJCWVoZWFfaW5mbygiJXM6IHJxJWkgcmFuIGRyeSAtIG5vIG1lbSBmb3Igc2tiIiwKKwkJCQkJICBwci0+cG9ydC0+bmV0ZGV2LT5uYW1lLCBycV9ucik7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKQEAgLTgzMCw3ICs4NDYsNyBAQAogCXdoaWxlICgocnggIT0gYnVkZ2V0KSB8fCBmb3JjZV9pcnEpIHsKIAkJcHItPnBvbGxfY291bnRlciA9IDA7CiAJCWZvcmNlX2lycSA9IDA7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllaGVhX3Jlc2V0X2NxX2VwKHByLT5yZWN2X2NxKTsKIAkJZWhlYV9yZXNldF9jcV9lcChwci0+c2VuZF9jcSk7CiAJCWVoZWFfcmVzZXRfY3FfbjEocHItPnJlY3ZfY3EpOwpAQCAtODQxLDcgKzg1Nyw3IEBACiAJCWlmICghY3FlICYmICFjcWVfc2tiKQogCQkJcmV0dXJuIHJ4OwogCi0JCWlmICghbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJaWYgKCFuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlyZXR1cm4gcng7CiAKIAkJY3FlX3NrYiA9IGVoZWFfcHJvY19jcWVzKHByLCBFSEVBX1BPTExfTUFYX0NRRVMpOwpAQCAtODU5LDcgKzg3NSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHM7IGkrKykKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPnBvcnRfcmVzW2ldLm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZwb3J0LT5wb3J0X3Jlc1tpXS5uYXBpKTsKIH0KICNlbmRpZgogCkBAIC04NjcsNyArODgzLDcgQEAKIHsKIAlzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIgPSBwYXJhbTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZwci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcHItPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtOTE1LDcgKzkzMSw3IEBACiAJc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwICpjYjA7CiAKIAkvKiBtYXkgYmUgY2FsbGVkIHZpYSBlaGVhX25lcV90YXNrbGV0KCkgKi8KLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjApIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTk5Niw3ICsxMDEyLDcgQEAKIG91dF9mcmVlOgogCWlmIChyZXQgfHwgbmV0aWZfbXNnX3Byb2JlKHBvcnQpKQogCQllaGVhX2R1bXAoY2IwLCBzaXplb2YoKmNiMCksICJlaGVhX3NlbnNlX3BvcnRfYXR0ciIpOwotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMDcsNyArMTAyMyw3IEBACiAJdTY0IGhyZXQ7CiAJaW50IHJldCA9IDA7CiAKLQljYjQgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2I0ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjQpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjQiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTEwNzUsNyArMTA5MSw3IEBACiAJaWYgKCFwcm9wX2NhcnJpZXJfc3RhdGUgfHwgKHBvcnQtPnBoeV9saW5rID09IEVIRUFfUEhZX0xJTktfVVApKQogCQluZXRpZl9jYXJyaWVyX29uKHBvcnQtPm5ldGRldik7CiAKLQlrZnJlZShjYjQpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjQpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMjAxLDExICsxMjE3LDExIEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZWhlYV9xcF9pbml0X2F0dHIgKmluaXRfYXR0ciA9ICZwci0+cXAtPmluaXRfYXR0cjsKIAotCXJldCA9IGVoZWFfaW5pdF9maWxsX3JxMShwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnExCi0JCQkJICAgICAtIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMgotCQkJCSAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKKwllaGVhX2luaXRfZmlsbF9ycTEocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMQorCQkJICAgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyCisJCQkgICAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKIAotCXJldCB8PSBlaGVhX3JlZmlsbF9ycTIocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiAtIDEpOworCXJldCA9IGVoZWFfcmVmaWxsX3JxMihwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyIC0gMSk7CiAKIAlyZXQgfD0gZWhlYV9yZWZpbGxfcnEzKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKIApAQCAtMTMwMiw3ICsxMzE4LDcgQEAKIAlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjAgKmNiMDsKIAogCXJldCA9IC1FTk9NRU07Ci0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKQogCQlnb3RvIG91dDsKIApAQCAtMTMzOCw3ICsxMzU0LDcgQEAKIAlyZXQgPSAwOwogCiBvdXRfZnJlZToKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xNzQ4LDcgKzE3NjQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTE3NjksOCArMTc4NSw2IEBACiAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgbWFjX2FkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCS8qIERlcmVnaXN0ZXIgb2xkIE1BQyBpbiBwSFlQICovCiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkgewogCQlyZXQgPSBlaGVhX2Jyb2FkY2FzdF9yZWdfaGVscGVyKHBvcnQsIEhfREVSRUdfQkNNQyk7CkBAIC0xNzkxLDkgKzE4MDUsOCBAQAogCiBvdXRfdXByZWdzOgogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIG91dF9mcmVlOgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MTcsNyArMTgzMCw3IEBACiAJaWYgKChlbmFibGUgJiYgcG9ydC0+cHJvbWlzYykgfHwgKCFlbmFibGUgJiYgIXBvcnQtPnByb21pc2MpKQogCQlyZXR1cm47CiAKLQljYjcgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2I3ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjcpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjciKTsKIAkJZ290byBvdXQ7CkBAIC0xODM2LDcgKzE4NDksNyBAQAogCiAJcG9ydC0+cHJvbWlzYyA9IGVuYWJsZTsKIG91dDoKLQlrZnJlZShjYjcpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjcpOwogCXJldHVybjsKIH0KIApAQCAtMTk1Myw4ICsxOTY2LDYgQEAKIAl9CiAJZWhlYV9wcm9taXNjdW91cyhkZXYsIDApOwogCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCWVoZWFfYWxsbXVsdGkoZGV2LCAxKTsKIAkJZ290byBvdXQ7CkBAIC0xOTg0LDcgKzE5OTUsNiBAQAogCX0KIG91dDoKIAllaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnMoKTsKLQlzcGluX3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CiAJcmV0dXJuOwogfQogCkBAIC0yMjE3LDcgKzIyMjcsNyBAQAogCiAJcG9ydC0+dmdycCA9IGdycDsKIAotCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTIyMjgsNyArMjIzOCw3IEBACiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQogCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOwogCi0Ja2ZyZWUoY2IxKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IxKTsKIG91dDoKIAlyZXR1cm47CiB9CkBAIC0yMjQxLDcgKzIyNTEsNyBAQAogCWludCBpbmRleDsKIAl1NjQgaHJldDsKIAotCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTIyNjIsNyArMjI3Miw3IEBACiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQogCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOwogb3V0OgotCWtmcmVlKGNiMSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMSk7CiAJcmV0dXJuOwogfQogCkBAIC0yMjc2LDcgKzIyODYsNyBAQAogCiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKHBvcnQtPnZncnAsIHZpZCwgTlVMTCk7CiAKLQljYjEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IxID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjEpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKIAkJZ290byBvdXQ7CkBAIC0yMjk3LDcgKzIzMDcsNyBAQAogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKIAkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKIG91dDoKLQlrZnJlZShjYjEpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjEpOwogCXJldHVybjsKIH0KIApAQCAtMjMwOSw3ICsyMzE5LDcgQEAKIAl1NjQgZHVtbXk2NCA9IDA7CiAJc3RydWN0IGhjcF9tb2RpZnlfcXBfY2IwICpjYjA7CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yMzcyLDcgKzIzODIsNyBAQAogCiAJcmV0ID0gMDsKIG91dDoKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjUsOCArMjQ3NSw2IEBACiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KIAlyZXQgPSBlaGVhX3BvcnRfcmVzX3NldHVwKHBvcnQsIHBvcnQtPm51bV9kZWZfcXBzLAogCQkJCSAgcG9ydC0+bnVtX2FkZF90eF9xcHMpOwogCWlmIChyZXQpIHsKQEAgLTI1MDMsOCArMjUxMSw2IEBACiAJCX0KIAl9CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX1JFR19CQ01DKTsKIAlpZiAocmV0KSB7CiAJCXJldCA9IC1FSU87CkBAIC0yNTI2LDEwICsyNTMyLDcgQEAKIAkJZWhlYV9pbmZvKCJGYWlsZWQgc3RhcnRpbmcgJXMuIHJldD0laSIsIGRldi0+bmFtZSwgcmV0KTsKIAogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTc5LDkgKzI1ODIsNiBAQAogCWlmIChwb3J0LT5zdGF0ZSA9PSBFSEVBX1BPUlRfRE9XTikKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCWVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOwogCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKIApAQCAtMjU5MCw3ICsyNTkwLDYgQEAKIAlwb3J0LT5zdGF0ZSA9IEVIRUFfUE9SVF9ET1dOOwogCiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCiAJcmV0ID0gZWhlYV9jbGVhbl9hbGxfcG9ydHJlcyhwb3J0KTsKIAlpZiAocmV0KQpAQCAtMjU5OCw3ICsyNTk3LDYgQEAKIAkJCSAgZGV2LT5uYW1lLCByZXQpOwogCiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI2NjQsNyArMjY2Miw3IEBACiAJdTY0IGR1bW15NjQgPSAwOwogCXUxNiBkdW1teTE2ID0gMDsKIAotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTI3MTYsNyArMjcxNCw3IEBACiAKIAlyZXQgPSAwOwogb3V0OgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjc2Niw3ICsyNzY0LDcgQEAKIAl1NjQgZHVtbXk2NCA9IDA7CiAJdTE2IGR1bW15MTYgPSAwOwogCi0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjgxOSw3ICsyODE3LDcgQEAKIAkJZWhlYV9yZWZpbGxfcnEzKHByLCAwKTsKIAl9CiBvdXQ6Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yOTUwLDcgKzI5NDgsNyBAQAogCXU2NCBocmV0OwogCWludCByZXQ7CiAKLQljYiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYiA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yOTY3LDcgKzI5NjUsNyBAQAogCXJldCA9IDA7CiAKIG91dF9oZXJyOgotCWtmcmVlKGNiKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0yOTgxLDcgKzI5NzksNyBAQAogCSpqdW1ibyA9IDA7CiAKIAkvKiAoVHJ5IHRvKSBlbmFibGUgKmp1bWJvIGZyYW1lcyAqLwotCWNiNCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjQgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiNCkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzAwOSw3ICszMDA3LDcgQEAKIAkJfSBlbHNlCiAJCQlyZXQgPSAtRUlOVkFMOwogCi0JCWtmcmVlKGNiNCk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjQpOwogCX0KIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMzA0MCw3ICszMDM4LDcgQEAKIAlwb3J0LT5vZmRldi5kZXYucGFyZW50ID0gJnBvcnQtPmFkYXB0ZXItPm9mZGV2LT5kZXY7CiAJcG9ydC0+b2ZkZXYuZGV2LmJ1cyA9ICZpYm1lYnVzX2J1c190eXBlOwogCi0Jc3ByaW50Zihwb3J0LT5vZmRldi5kZXYuYnVzX2lkLCAicG9ydCVkIiwgcG9ydF9uYW1lX2NudCsrKTsKKwlkZXZfc2V0X25hbWUoJnBvcnQtPm9mZGV2LmRldiwgInBvcnQlZCIsIHBvcnRfbmFtZV9jbnQrKyk7CiAJcG9ydC0+b2ZkZXYuZGV2LnJlbGVhc2UgPSBsb2dpY2FsX3BvcnRfcmVsZWFzZTsKIAogCXJldCA9IG9mX2RldmljZV9yZWdpc3RlcigmcG9ydC0+b2ZkZXYpOwpAQCAtMzA2OSw2ICszMDY3LDIyIEBACiAJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPm9mZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlaGVhX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVoZWFfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWhlYV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlaGVhX3N0YXJ0X3htaXQsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVoZWFfbmV0cG9sbCwKKyNlbmRpZgorCS5uZG9fZ2V0X3N0YXRzCQk9IGVoZWFfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZWhlYV9zZXRfbWFjX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBlaGVhX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZWhlYV9jaGFuZ2VfbXR1LAorCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IGVoZWFfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGVoZWFfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IGVoZWFfdmxhbl9yeF9raWxsX3ZpZAorfTsKKwogc3RydWN0IGVoZWFfcG9ydCAqZWhlYV9zZXR1cF9zaW5nbGVfcG9ydChzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgdTMyIGxvZ2ljYWxfcG9ydF9pZCwKIAkJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCkBAIC0zMTIxLDE5ICszMTM1LDkgQEAKIAkvKiBpbml0aWFsaXplIG5ldF9kZXZpY2Ugc3RydWN0dXJlICovCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwb3J0LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCi0JZGV2LT5vcGVuID0gZWhlYV9vcGVuOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaGVhX25ldHBvbGw7Ci0jZW5kaWYKLQlkZXYtPnN0b3AgPSBlaGVhX3N0b3A7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlaGVhX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBlaGVhX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGVoZWFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gZWhlYV9zZXRfbWFjX2FkZHI7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gZWhlYV9jaGFuZ2VfbXR1OwotCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGVoZWFfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfYWRkX3ZpZCA9IGVoZWFfdmxhbl9yeF9hZGRfdmlkOwotCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGVoZWFfdmxhbl9yeF9raWxsX3ZpZDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZWhlYV9uZXRkZXZfb3BzOworCWVoZWFfc2V0X2V0aHRvb2xfb3BzKGRldik7CisKIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1RTTwogCQkgICAgICB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9UWAogCQkgICAgICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIKQEAgLTMxNDIsNyArMzE0Niw2IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVIRUFfV0FUQ0hfRE9HX1RJTUVPVVQ7CiAKIAlJTklUX1dPUksoJnBvcnQtPnJlc2V0X3Rhc2ssIGVoZWFfcmVzZXRfcG9ydCk7Ci0JZWhlYV9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKQEAgLTMzNzAsNyArMzM3Myw2IEBACiAJCWVoZWFfZXJyb3IoIkludmFsaWQgaWJtZWJ1cyBkZXZpY2UgcHJvYmVkIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAKIAlhZGFwdGVyID0ga3phbGxvYyhzaXplb2YoKmFkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXIpIHsKQEAgLTM0NTAsMTEgKzM0NTIsMTIgQEAKIAllaGVhX2Rlc3Ryb3lfZXEoYWRhcHRlci0+bmVxKTsKIAogb3V0X2ZyZWVfYWQ6CisJbGlzdF9kZWwoJmFkYXB0ZXItPmxpc3QpOwogCWtmcmVlKGFkYXB0ZXIpOwogCiBvdXQ6CiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ3Myw4ICszNDc2LDYgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KIAlpYm1lYnVzX2ZyZWVfaXJxKGFkYXB0ZXItPm5lcS0+YXR0ci5pc3QxLCBhZGFwdGVyKTsKIAl0YXNrbGV0X2tpbGwoJmFkYXB0ZXItPm5lcV90YXNrbGV0KTsKIApAQCAtMzQ4NCw3ICszNDg1LDYgQEAKIAlrZnJlZShhZGFwdGVyKTsKIAogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzUxOCwxMiArMzUxOCwxNCBAQAogCQkvKiBSZWFkZCBjYW5jZWxlZCBtZW1vcnkgYmxvY2sgKi8KIAljYXNlIE1FTV9PTkxJTkU6CiAJCWVoZWFfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9ubGluZSIpOworCQlzZXRfYml0KF9fRUhFQV9TVE9QX1hGRVIsICZlaGVhX2RyaXZlcl9mbGFncyk7CiAJCWlmIChlaGVhX2FkZF9zZWN0X2JtYXAoYXJnLT5zdGFydF9wZm4sIGFyZy0+bnJfcGFnZXMpKQogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CiAJCWVoZWFfcmVyZWdfbXJzKE5VTEwpOwogCQlicmVhazsKIAljYXNlIE1FTV9HT0lOR19PRkZMSU5FOgogCQllaGVhX2luZm8oIm1lbW9yeSBpcyBnb2luZyBvZmZsaW5lIik7CisJCXNldF9iaXQoX19FSEVBX1NUT1BfWEZFUiwgJmVoZWFfZHJpdmVyX2ZsYWdzKTsKIAkJaWYgKGVoZWFfcmVtX3NlY3RfYm1hcChhcmctPnN0YXJ0X3BmbiwgYXJnLT5ucl9wYWdlcykpCiAJCQlyZXR1cm4gTk9USUZZX0JBRDsKIAkJZWhlYV9yZXJlZ19tcnMoTlVMTCk7CkBAIC0zNTMxLDYgKzM1MzMsOSBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KKworCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKKwogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYwppbmRleCA0OWQ3NjZlLi4zNzQ3NDU3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJdTY0ICpyYmxvY2s7CiAKLQlyYmxvY2sgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJcmJsb2NrID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYmxvY2spIHsKIAkJZWhlYV9lcnJvcigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybjsKQEAgLTEwMjIsNSArMTAyMiw1IEBACiAJZWxzZQogCQllaGVhX2Vycm9yKCJFcnJvciBkYXRhIGNvdWxkIG5vdCBiZSBmZXRjaGVkOiAlbGxYIiwgcmVzX2hhbmRsZSk7CiAKLQlrZnJlZShyYmxvY2spOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylyYmxvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAppbmRleCBhODMyY2M1Li5jMjZjZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaApAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gMTBHIEV0aGVybmV0IERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC42NDgiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjAuOTMzIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jIgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAKQEAgLTk3LDYgKzk3LDcgQEAKIAlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfcnEgcnFbMV07CiAJdW5zaWduZWQgaW50IHJxX2NvdW50OwogCWludCAoKnJxX2FsbG9jX2J1Zikoc3RydWN0IHZuaWNfcnEgKnJxKTsKKwl1NjQgcnFfYmFkX2ZjczsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKIAlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW0VOSUNfTFJPX01BWF9ERVNDXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCmluZGV4IDdkNjA1NTEuLjAzNDAzYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwpAQCAtNDAwLDEwICs0MDAsMTMgQEAKIAkJcmV0dXJuIElSUV9OT05FOwkvKiBub3Qgb3VyIGludGVycnVwdCAqLwogCX0KIAotCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9OT1RJRlkpKQorCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9OT1RJRlkpKSB7CisJCXZuaWNfaW50cl9yZXR1cm5fYWxsX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19JTlRYX05PVElGWV0pOwogCQllbmljX25vdGlmeV9jaGVjayhlbmljKTsKKwl9CiAKIAlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfRVJSKSkgeworCQl2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfSU5UWF9FUlJdKTsKIAkJZW5pY19sb2dfcV9lcnJvcihlbmljKTsKIAkJLyogc2NoZWR1bGUgcmVjb3ZlcnkgZnJvbSBXUS9SUSBlcnJvciAqLwogCQlzY2hlZHVsZV93b3JrKCZlbmljLT5yZXNldCk7CkBAIC00MTEsOCArNDE0LDggQEAKIAl9CiAKIAlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfV1FfUlEpKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZlbmljLT5uYXBpKSkKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZlbmljLT5uYXBpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX0lOVFhfV1FfUlFdKTsKIAl9CkBAIC00NDAsNyArNDQzLDcgQEAKIAkgKiB3cml0ZXMpLgogCSAqLwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDUwLDcgKzQ1Myw3IEBACiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCiAJLyogc2NoZWR1bGUgTkFQSSBwb2xsaW5nIGZvciBSUSBjbGVhbnVwICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDc2LDYgKzQ3OSw4IEBACiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCisJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfRVJSXSk7CisKIAllbmljX2xvZ19xX2Vycm9yKGVuaWMpOwogCiAJLyogc2NoZWR1bGUgcmVjb3ZlcnkgZnJvbSBXUS9SUSBlcnJvciAqLwpAQCAtNDg4LDggKzQ5Myw4IEBACiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCisJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfTk9USUZZXSk7CiAJZW5pY19ub3RpZnlfY2hlY2soZW5pYyk7Ci0Jdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX01TSVhfTk9USUZZXSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC01NzAsMTEgKzU3NSwxMSBAQAogCSAqIHRvIGVhY2ggVENQIHNlZ21lbnQgcmVzdWx0aW5nIGZyb20gdGhlIFRTTy4KIAkgKi8KIAotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApKSB7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CiAJCWlwX2hkcihza2IpLT5jaGVjayA9IDA7CiAJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktPnNhZGRyLAogCQkJaXBfaGRyKHNrYiktPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNikpIHsKKwl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpIHsKIAkJdGNwX2hkcihza2IpLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwdjZfaGRyKHNrYiktPnNhZGRyLAogCQkJJmlwdjZfaGRyKHNrYiktPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7CiAJfQpAQCAtNjE2LDcgKzYyMSw3IEBACiAJCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnKTsKIH0KIAotLyogbmV0aWZfdHhfbG9jayBoZWxkLCBwcm9jZXNzIGNvbnRleHQgd2l0aCBCSHMgZGlzYWJsZWQgKi8KKy8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgcHJvY2VzcyBjb250ZXh0IHdpdGggQkhzIGRpc2FibGVkLCBvciBCSCAqLwogc3RhdGljIGludCBlbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTY4Myw3ICs2ODgsNyBAQAogCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPSBzdGF0cy0+cngucnhfYnl0ZXNfb2s7CiAJbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBzdGF0cy0+cngucnhfZXJyb3JzOwogCW5ldF9zdGF0cy0+bXVsdGljYXN0ID0gc3RhdHMtPnJ4LnJ4X211bHRpY2FzdF9mcmFtZXNfb2s7Ci0JbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gc3RhdHMtPnJ4LnJ4X2NyY19lcnJvcnM7CisJbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gZW5pYy0+cnFfYmFkX2ZjczsKIAluZXRfc3RhdHMtPnJ4X2Ryb3BwZWQgPSBzdGF0cy0+cngucnhfbm9fYnVmczsKIAogCXJldHVybiBuZXRfc3RhdHM7CkBAIC05MjgsMTIgKzkzMyw4IEBACiAKIAlpZiAocGFja2V0X2Vycm9yKSB7CiAKLQkJaWYgKGJ5dGVzX3dyaXR0ZW4gPiAwICYmICFmY3Nfb2spIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCQkiJXM6IHBhY2tldCBlcnJvcjogYmFkIEZDU1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKLQkJfQorCQlpZiAoYnl0ZXNfd3JpdHRlbiA+IDAgJiYgIWZjc19vaykKKwkJCWVuaWMtPnJxX2JhZF9mY3MrKzsKIAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCkBAIC0xMDY4LDggKzEwNjksOCBAQAogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQkJbHJvX2ZsdXNoX2FsbCgmZW5pYy0+bHJvX21ncik7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19JTlRYX1dRX1JRXSk7CiAJfQogCiAJcmV0dXJuIHJxX3dvcmtfZG9uZTsKQEAgLTEwOTUsOSArMTA5Niw5IEBACiAKIAkJdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pY19ycV9hbGxvY19idWYpOwogCi0JCS8qIEFjY3VtdWxhdGUgaW50ciBldmVudCBjcmVkaXRzIGZvciB0aGlzIHBvbGxpbmcKKwkJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCiAJCSAqIGN5Y2xlLiAgQW4gaW50ciBldmVudCBpcyB0aGUgY29tcGxldGlvbiBvZiBhCi0JCSAqIGEgV1Egb3IgUlEgcGFja2V0LgorCQkgKiBSUSBwYWNrZXQuCiAJCSAqLwogCiAJCXZuaWNfaW50cl9yZXR1cm5fY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfUlFdLApAQCAtMTExMiw3ICsxMTEzLDcgQEAKIAkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWxyb19mbHVzaF9hbGwoJmVuaWMtPmxyb19tZ3IpOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0pOwogCX0KIApAQCAtMTQ2MSw2ICsxNDYyLDI2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBlbmljX3NldF9uaWNjZmcoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJY29uc3QgdTggcnNzX2RlZmF1bHRfY3B1ID0gMDsKKwljb25zdCB1OCByc3NfaGFzaF90eXBlID0gMDsKKwljb25zdCB1OCByc3NfaGFzaF9iaXRzID0gMDsKKwljb25zdCB1OCByc3NfYmFzZV9jcHUgPSAwOworCWNvbnN0IHU4IHJzc19lbmFibGUgPSAwOworCWNvbnN0IHU4IHRzb19pcGlkX3NwbGl0X2VuID0gMDsKKwljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKKworCS8qIEVuYWJsZSBWTEFOIHRhZyBzdHJpcHBpbmcuICBSU1Mgbm90IGVuYWJsZWQgKHlldCkuCisJKi8KKworCXJldHVybiBlbmljX3NldF9uaWNfY2ZnKGVuaWMsCisJCXJzc19kZWZhdWx0X2NwdSwgcnNzX2hhc2hfdHlwZSwKKwkJcnNzX2hhc2hfYml0cywgcnNzX2Jhc2VfY3B1LAorCQlyc3NfZW5hYmxlLCB0c29faXBpZF9zcGxpdF9lbiwKKwkJaWdfdmxhbl9zdHJpcF9lbik7Cit9CisKIHN0YXRpYyB2b2lkIGVuaWNfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmljLCByZXNldCk7CkBAIC0xNDc2LDggKzE0OTcsMTAgQEAKIAogCWVuaWNfc3RvcChlbmljLT5uZXRkZXYpOwogCWVuaWNfZGV2X3NvZnRfcmVzZXQoZW5pYyk7CisJdm5pY19kZXZfaW5pdChlbmljLT52ZGV2LCAwKTsKIAllbmljX3Jlc2V0X21jYWRkcnMoZW5pYyk7CiAJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOworCWVuaWNfc2V0X25pY2NmZyhlbmljKTsKIAllbmljX29wZW4oZW5pYy0+bmV0ZGV2KTsKIAogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xNjIwLDE0ICsxNjQzLDYgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCi0JY29uc3QgdTggcnNzX2RlZmF1bHRfY3B1ID0gMDsKLQljb25zdCB1OCByc3NfaGFzaF90eXBlID0gMDsKLQljb25zdCB1OCByc3NfaGFzaF9iaXRzID0gMDsKLQljb25zdCB1OCByc3NfYmFzZV9jcHUgPSAwOwotCWNvbnN0IHU4IHJzc19lbmFibGUgPSAwOwotCWNvbnN0IHU4IHRzb19pcGlkX3NwbGl0X2VuID0gMDsKLQljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKLQogCS8qIEFsbG9jYXRlIG5ldCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBpbml0aWFsaXplLiAgUHJpdmF0ZQogCSAqIGluc3RhbmNlIGRhdGEgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4KIAkgKi8KQEAgLTE3OTMsMTQgKzE4MDgsNyBAQAogCiAJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOwogCi0JLyogRW5hYmxlIFZMQU4gdGFnIHN0cmlwcGluZy4gIFJTUyBub3QgZW5hYmxlZCAoeWV0KS4KLQkgKi8KLQotCWVyciA9IGVuaWNfc2V0X25pY19jZmcoZW5pYywKLQkJcnNzX2RlZmF1bHRfY3B1LCByc3NfaGFzaF90eXBlLAotCQlyc3NfaGFzaF9iaXRzLCByc3NfYmFzZV9jcHUsCi0JCXJzc19lbmFibGUsIHRzb19pcGlkX3NwbGl0X2VuLAotCQlpZ192bGFuX3N0cmlwX2VuKTsKKwllcnIgPSBlbmljX3NldF9uaWNjZmcoZW5pYyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkiRmFpbGVkIHRvIGNvbmZpZyBuaWMsIGFib3J0aW5nLlxuIik7CkBAIC0xODU4LDcgKzE4NjYsNiBAQAogCWlmICh1c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0KIAllbmljLT5jc3VtX3J4X2VuYWJsZWQgPSBFTklDX1NFVFRJTkcoZW5pYywgUlhDU1VNKTsKIAogCWVuaWMtPmxyb19tZ3IubWF4X2FnZ3IgPSBFTklDX0xST19NQVhfQUdHUjsKQEAgLTE4NzAsNyArMTg3Nyw2IEBACiAJZW5pYy0+bHJvX21nci5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKIAllbmljLT5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKLQogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCmluZGV4IDExNzA4NTcuLmUyMWI5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKQEAgLTM0LDYgKzM0LDkgQEAKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiB9OwogCisjZGVmaW5lIFZOSUNfREVWX0NBUF9JTklUCTB4MDAwMQorI2RlZmluZSBWTklDX0RFVl9DQVBfUEVSQkkJMHgwMDAyCisKIHN0cnVjdCB2bmljX2RldiB7CiAJdm9pZCAqcHJpdjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKQEAgLTUwLDYgKzUzLDcgQEAKIAlkbWFfYWRkcl90IHN0YXRzX3BhOwogCXN0cnVjdCB2bmljX2RldmNtZF9md19pbmZvICpmd19pbmZvOwogCWRtYV9hZGRyX3QgZndfaW5mb19wYTsKKwl1MzIgY2FwX2ZsYWdzOwogfTsKIAogI2RlZmluZSBWTklDX01BWF9SRVNfSERSX1NJWkUgXApAQCAtNTc1LDkgKzU3OSw5IEBACiB7CiAJdTY0IGEwID0gKHUzMilhcmcsIGExID0gMDsKIAlpbnQgd2FpdCA9IDEwMDA7Ci0gICAgICAgIGludCByID0gMDsKKwlpbnQgciA9IDA7CiAKLQlpZiAodm5pY19kZXZfY2FwYWJsZSh2ZGV2LCBDTURfSU5JVCkpCisJaWYgKHZkZXYtPmNhcF9mbGFncyAmIFZOSUNfREVWX0NBUF9JTklUKQogCQlyID0gdm5pY19kZXZfY21kKHZkZXYsIENNRF9JTklULCAmYTAsICZhMSwgd2FpdCk7CiAJZWxzZSB7CiAJCXZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVF92MSwgJmEwLCAmYTEsIHdhaXQpOwpAQCAtNTg3LDggKzU5MSw4IEBACiAJCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX01BQ19BRERSLCAmYTAsICZhMSwgd2FpdCk7CiAJCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX0FERFJfQURELCAmYTAsICZhMSwgd2FpdCk7CiAJCX0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcjsKKwl9CisJcmV0dXJuIHI7CiB9CiAKIGludCB2bmljX2Rldl9saW5rX3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCkBAIC02MjYsNiArNjMwLDIyIEBACiAJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5Lm10dTsKIH0KIAordTMyIHZuaWNfZGV2X2xpbmtfZG93bl9jbnQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQoreworCWlmICghdm5pY19kZXZfbm90aWZ5X3JlYWR5KHZkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB2ZGV2LT5ub3RpZnlfY29weS5saW5rX2Rvd25fY250OworfQorCit1MzIgdm5pY19kZXZfbm90aWZ5X3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCit7CisJaWYgKCF2bmljX2Rldl9ub3RpZnlfcmVhZHkodmRldikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5LnN0YXR1czsKK30KKwogdm9pZCB2bmljX2Rldl9zZXRfaW50cl9tb2RlKHN0cnVjdCB2bmljX2RldiAqdmRldiwKIAllbnVtIHZuaWNfZGV2X2ludHJfbW9kZSBpbnRyX21vZGUpCiB7CkBAIC02ODIsNiArNzAyLDExIEBACiAJaWYgKCF2ZGV2LT5kZXZjbWQpCiAJCWdvdG8gZXJyX291dDsKIAorCXZkZXYtPmNhcF9mbGFncyA9IDA7CisKKwlpZiAodm5pY19kZXZfY2FwYWJsZSh2ZGV2LCBDTURfSU5JVCkpCisJCXZkZXYtPmNhcF9mbGFncyB8PSBWTklDX0RFVl9DQVBfSU5JVDsKKwogCXJldHVybiB2ZGV2OwogCiBlcnJfb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCmluZGV4IGI5ZGMxODIuLjhhYThkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKQEAgLTEwMiw2ICsxMDIsOCBAQAogdTMyIHZuaWNfZGV2X3BvcnRfc3BlZWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHUzMiB2bmljX2Rldl9tc2dfbHZsKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiB1MzIgdm5pY19kZXZfbXR1KHN0cnVjdCB2bmljX2RldiAqdmRldik7Cit1MzIgdm5pY19kZXZfbGlua19kb3duX2NudChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwordTMyIHZuaWNfZGV2X25vdGlmeV9zdGF0dXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9jbG9zZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2VuYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2Rpc2FibGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaAppbmRleCA4MDYyYzc1Li4yNTg3ZjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlDTURfSU5JVF9TVEFUVVMJCT0gX0NNREMoX0NNRF9ESVJfUkVBRCwgX0NNRF9WVFlQRV9BTEwsIDMxKSwKIAogCS8qIElOVDEzIEFQSTogKHU2NClhMD1wYWRkciB0byB2bmljX2ludDEzX3BhcmFtcyBzdHJ1Y3QKLQkgKiAgICAgICAgICAgICh1OClhMT1JTlQxM19DTURfeHh4ICovCisJICogICAgICAgICAgICAodTMyKWExPUlOVDEzX0NNRF94eHggKi8KIAlDTURfSU5UMTMgICAgICAgICAgICAgICA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0ZDLCAzMiksCiAKIAkvKiBsb2dpY2FsIHVwbGluayBlbmFibGUvZGlzYWJsZTogKHU2NClhMDogMC8xPWRpc2FibGUvZW5hYmxlICovCkBAIC0yMDcsNiArMjA3LDExIEBACiAJICogaW46ICAodTMyKWEwPWNtZAogCSAqIG91dDogKHUzMilhMD1lcnJubywgMDp2YWxpZCBjbWQsIGExPXN1cHBvcnRlZCBWTklDX1NURl8qIGJpdHMgKi8KIAlDTURfQ0FQQUJJTElUWQkJPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9BTEwsIDM2KSwKKworCS8qIHBlcnNpc3RlbnQgYmluZGluZyBpbmZvCisJICogaW46ICAodTY0KWEwPXBhZGRyIG9mIGFyZworCSAqICAgICAgKHUzMilhMT1DTURfUEVSQklfWFhYICovCisJQ01EX1BFUkJJICAgICAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9GQywgMzcpLAogfTsKIAogLyogZmxhZ3MgZm9yIENNRF9PUEVOICovCkBAIC0yNTksNiArMjY0LDcgQEAKIAl1MzIgc3RhdHVzOwkJLyogc3RhdHVzIGJpdHMgKHNlZSBWTklDX1NURl8qKSAqLwogCXUzMiBlcnJvcjsJCS8qIGVycm9yIGNvZGUgKHNlZSBFUlJfKikgZm9yIGZpcnN0IEVSUiAqLwogCXUzMiBsaW5rX2Rvd25fY250OwkvKiBydW5uaW5nIGNvdW50IG9mIGxpbmsgZG93biB0cmFuc2l0aW9ucyAqLworCXUzMiBwZXJiaV9yZWJ1aWxkX2NudDsJLyogcnVubmluZyBjb3VudCBvZiBwZXJiaSByZWJ1aWxkcyAqLwogfTsKICNkZWZpbmUgVk5JQ19TVEZfRkFUQUxfRVJSCTB4MDAwMQkvKiBmYXRhbCBmdyBlcnJvciAqLwogI2RlZmluZSBWTklDX1NURl9TVERfUEFVU0UJMHgwMDAyCS8qIHN0YW5kYXJkIGxpbmstbGV2ZWwgcGF1c2Ugb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCmluZGV4IGNlNjMzYTUuLjlhNTM2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaApAQCAtNzYsNiArNzYsMjAgQEAKIAlpb3dyaXRlMzIoaW50X2NyZWRpdF9yZXR1cm4sICZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0X3JldHVybik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZuaWNfaW50cl9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIpCit7CisJcmV0dXJuIGlvcmVhZDMyKCZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIpCit7CisJdW5zaWduZWQgaW50IGNyZWRpdHMgPSB2bmljX2ludHJfY3JlZGl0cyhpbnRyKTsKKwlpbnQgdW5tYXNrID0gMTsKKwlpbnQgcmVzZXRfdGltZXIgPSAxOworCisJdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKGludHIsIGNyZWRpdHMsIHVubWFzaywgcmVzZXRfdGltZXIpOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiB2bmljX2ludHJfbGVnYWN5X3BiYSh1MzIgX19pb21lbSAqbGVnYWN5X3BiYSkKIHsKIAkvKiByZWFkIFBCQSB3aXRob3V0IGNsZWFyaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcGljMTAwLmMgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKaW5kZXggYTUzOWJjMy4uYjYwZTI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMTExNCw5ICsxMTE0LDkgQEAKIAogCWlmICgoc3RhdHVzICYgRXBpY05hcGlFdmVudCkgJiYgIWVwLT5yZXNjaGVkdWxlX2luX3BvbGwpIHsKIAkJc3Bpbl9sb2NrKCZlcC0+bmFwaV9sb2NrKTsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmVwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpIHsKIAkJCWVwaWNfbmFwaV9pcnFfb2ZmKGRldiwgZXApOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZXAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZlcC0+bmFwaSk7CiAJCX0gZWxzZQogCQkJZXAtPnJlc2NoZWR1bGVfaW5fcG9sbCsrOwogCQlzcGluX3VubG9jaygmZXAtPm5hcGlfbG9jayk7CkBAIC0xMjkzLDcgKzEyOTMsNyBAQAogCiAJCW1vcmUgPSBlcC0+cmVzY2hlZHVsZV9pbl9wb2xsOwogCQlpZiAoIW1vcmUpIHsKLQkJCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCQlvdXRsKEVwaWNOYXBpRXZlbnQsIGlvYWRkciArIElOVFNUQVQpOwogCQkJZXBpY19uYXBpX2lycV9vbihkZXYsIGVwKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcWwuYyBiL2RyaXZlcnMvbmV0L2VxbC5jCmluZGV4IDQwMTI1NjkuLjUxZWFkNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VxbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VxbC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlhZGRfdGltZXIoJmVxbC0+dGltZXIpOwogfQogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19pbml0Y29uc3QgPQogCSJFcXVhbGl6ZXIyMDAyOiBTaW1vbiBKYW5lcyAoc2ltb25AbmNtLmNvbSkgYW5kIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSlcbiI7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXFsX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWFsbnguYyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCmluZGV4IGRhZjcyNzJjLi44OTFiZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWFsbnguYworKysgYi9kcml2ZXJzL25ldC9mZWFsbnguYwpAQCAtOTMsOCArOTMsOCBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOwogCiAKIC8qIFRoaXMgZHJpdmVyIHdhcyB3cml0dGVuIHRvIHVzZSBQQ0kgbWVtb3J5IHNwYWNlLCBob3dldmVyIHNvbWUgeDg2IHN5c3RlbXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5jIGIvZHJpdmVycy9uZXQvZmVjLmMKaW5kZXggMjc2OTA4My4uYTUxNWFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjLmMKQEAgLTM2LDQ2ICszNiwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAorI2lmbmRlZiBDT05GSUdfQVJDSF9NWEMKICNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KICNpbmNsdWRlIDxhc20vbWNmc2ltLmg+Ci0jaW5jbHVkZSAiZmVjLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GRUMyKQotI2RlZmluZQlGRUNfTUFYX1BPUlRTCTIKLSNlbHNlCi0jZGVmaW5lCUZFQ19NQVhfUE9SVFMJMQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKLSNkZWZpbmUgSEFWRV9taWlfbGlua19pbnRlcnJ1cHQKKyNpbmNsdWRlICJmZWMuaCIKKworI2lmZGVmIENPTkZJR19BUkNIX01YQworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNkZWZpbmUgRkVDX0FMSUdOTUVOVAkweGYKKyNlbHNlCisjZGVmaW5lIEZFQ19BTElHTk1FTlQJMHgzCiAjZW5kaWYKIAogLyoKICAqIERlZmluZSB0aGUgZml4ZWQgYWRkcmVzcyBvZiB0aGUgRkVDIGhhcmR3YXJlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZlY19od1tdID0gewogI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQotCShNQ0ZfTUJBUiArIDB4ODQwKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX001Mjd4KQotCShNQ0ZfTUJBUiArIDB4MTAwMCksCi0JKE1DRl9NQkFSICsgMHgxODAwKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkKLQkoTUNGX01CQVIgKyAweDEwMDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMHgpCi0JKE1DRl9NQkFSKzB4MzAwMDApLAotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUzMngpCi0JKE1DRl9NQkFSKzB4ZmMwMzAwMDApLAotI2Vsc2UKLQkmKCgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2NwbS5jcF9mZWMpLAotI2VuZGlmCi19OworI2RlZmluZSBIQVZFX21paV9saW5rX2ludGVycnVwdAogCiBzdGF0aWMgdW5zaWduZWQgY2hhcglmZWNfbWFjX2RlZmF1bHRbXSA9IHsKIAkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLApAQCAtOTgsNiArODQsNyBAQAogI2Vsc2UKICNkZWZpbmUJRkVDX0ZMQVNITUFDCTAKICNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NNTI3MiAqLwogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBzb21lIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBkaWZmZXJlbnQgUEhZcwogKi8KQEAgLTE2Miw3ICsxNDksNyBAQAogICogYWNjb3VudCB3aGVuIHNldHRpbmcgaXQuCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgZGVmaW5lZChDT05GSUdfTTUyN3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KQorICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpCiAjZGVmaW5lCU9QVF9GUkFNRV9TSVpFCShQS1RfTUFYQlVGX1NJWkUgPDwgMTYpCiAjZWxzZQogI2RlZmluZQlPUFRfRlJBTUVfU0laRQkwCkBAIC0xODIsNiArMTY5LDggQEAKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKKwlzdHJ1Y3QgY2xrICpjbGs7CisKIAkvKiBUaGUgc2F2ZWQgYWRkcmVzcyBvZiBhIHNlbnQtaW4tcGxhY2UgcGFja2V0L2J1ZmZlciwgZm9yIHNrZnJlZSgpLiAqLwogCXVuc2lnbmVkIGNoYXIgKnR4X2JvdW5jZVtUWF9SSU5HX1NJWkVdOwogCXN0cnVjdAlza19idWZmKiB0eF9za2J1ZmZbVFhfUklOR19TSVpFXTsKQEAgLTE5MCw2ICsxNzksNyBAQAogCiAJLyogQ1BNIGR1YWwgcG9ydCBSQU0gcmVsYXRpdmUgYWRkcmVzc2VzLgogCSovCisJZG1hX2FkZHJfdAliZF9kbWE7CiAJY2JkX3QJKnJ4X2JkX2Jhc2U7CQkvKiBBZGRyZXNzIG9mIFJ4IGFuZCBUeCBidWZmZXJzLiAqLwogCWNiZF90CSp0eF9iZF9iYXNlOwogCWNiZF90CSpjdXJfcngsICpjdXJfdHg7CQkvKiBUaGUgbmV4dCBmcmVlIHJpbmcgZW50cnkgKi8KQEAgLTM0MiwxMCArMzMyLDEwIEBACiAJICoJNC1ieXRlIGJvdW5kYXJpZXMuIFVzZSBib3VuY2UgYnVmZmVycyB0byBjb3B5IGRhdGEKIAkgKglhbmQgZ2V0IGl0IGFsaWduZWQuIFVnaC4KIAkgKi8KLQlpZiAoYmRwLT5jYmRfYnVmYWRkciAmIDB4MykgeworCWlmIChiZHAtPmNiZF9idWZhZGRyICYgRkVDX0FMSUdOTUVOVCkgewogCQl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJCWluZGV4ID0gYmRwIC0gZmVwLT50eF9iZF9iYXNlOwotCQltZW1jcHkoZmVwLT50eF9ib3VuY2VbaW5kZXhdLCAodm9pZCAqKSBiZHAtPmNiZF9idWZhZGRyLCBiZHAtPmNiZF9kYXRsZW4pOworCQltZW1jcHkoZmVwLT50eF9ib3VuY2VbaW5kZXhdLCAodm9pZCAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQliZHAtPmNiZF9idWZhZGRyID0gX19wYShmZXAtPnR4X2JvdW5jZVtpbmRleF0pOwogCX0KIApAQCAtMzU5LDggKzM0OSw4IEBACiAJLyogUHVzaCB0aGUgZGF0YSBjYWNoZSBzbyB0aGUgQ1BNIGRvZXMgbm90IGdldCBzdGFsZSBtZW1vcnkKIAkgKiBkYXRhLgogCSAqLwotCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylza2ItPmRhdGEsCi0JCQkgICAodW5zaWduZWQgbG9uZylza2ItPmRhdGEgKyBza2ItPmxlbik7CisJZG1hX3N5bmNfc2luZ2xlKE5VTEwsIGJkcC0+Y2JkX2J1ZmFkZHIsCisJCQliZHAtPmNiZF9kYXRsZW4sIERNQV9UT19ERVZJQ0UpOwogCiAJLyogU2VuZCBpdCBvbiBpdHMgd2F5LiAgVGVsbCBGRUMgaXQncyByZWFkeSwgaW50ZXJydXB0IHdoZW4gZG9uZSwKIAkgKiBpdCdzIHRoZSBsYXN0IEJEIG9mIHRoZSBmcmFtZSwgYW5kIHRvIHB1dCB0aGUgQ1JDIG9uIHRoZSBlbmQuCkBAIC02MzMsNiArNjIzLDkgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJZGF0YSA9IChfX3U4KilfX3ZhKGJkcC0+Y2JkX2J1ZmFkZHIpOwogCisJZG1hX3N5bmNfc2luZ2xlKE5VTEwsICh1bnNpZ25lZCBsb25nKV9fcGEoZGF0YSksCisJCQlwa3RfbGVuIC0gNCwgRE1BX0ZST01fREVWSUNFKTsKKwogCS8qIFRoaXMgZG9lcyAxNiBieXRlIGFsaWdubWVudCwgZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAJICogVGhlIHBhY2tldCBsZW5ndGggaW5jbHVkZXMgRkNTLCBidXQgd2UgZG9uJ3Qgd2FudCB0bwogCSAqIGluY2x1ZGUgdGhhdCB3aGVuIHBhc3NpbmcgdXBzdHJlYW0gYXMgaXQgbWVzc2VzIHVwCkBAIC0xMTE0LDcgKzExMDcsNyBAQAogLyogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSA4NzIxICovCiAKICNkZWZpbmUgTUlJX0tTODcyMUJMX1JYRVJDUgkyMQotI2RlZmluZSBNSUlfS1M4NzIxQkxfSUNTUgkyMgorI2RlZmluZSBNSUlfS1M4NzIxQkxfSUNTUgkyNwogI2RlZmluZQlNSUlfS1M4NzIxQkxfUEhZQ1IJMzEKIAogc3RhdGljIHBoeV9jbWRfdCBjb25zdCBwaHlfY21kX2tzODcyMWJsX2NvbmZpZ1tdID0gewpAQCAtMTIyMyw1OCArMTIxNiwzMiBAQAogI2lmZGVmIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CiBzdGF0aWMgaXJxcmV0dXJuX3QKIG1paV9saW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICogZGV2X2lkKTsKLSNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTTUyNzIpCiAvKgotICoJQ29kZSBzcGVjaWZpYyB0byBDb2xkZmlyZSA1MjcyIHNldHVwLgorICoJVGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgTUlJIGludGVycnVwdCBzZXR1cCBvZiB0aGUgTTUyNzJFVkIuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfaW50cnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfbWlpX2ludHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAocmVxdWVzdF9pcnEoNjYsIG1paV9saW5rX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgImZlYyhNSUkpIiwgZGV2KSAhPSAwKQorCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlIGZlYyhNSUkpIElSUSg2NikhXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVzYyB7Ci0JCWNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIHNob3J0IGlycTsKLQkJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkJeyAiZmVjKFJYKSIsIDg2LCBmZWNfZW5ldF9pbnRlcnJ1cHQgfSwKLQkJeyAiZmVjKFRYKSIsIDg3LCBmZWNfZW5ldF9pbnRlcnJ1cHQgfSwKLQkJeyAiZmVjKE9USEVSKSIsIDg4LCBmZWNfZW5ldF9pbnRlcnJ1cHQgfSwKLQkJeyAiZmVjKE1JSSkiLCA2NiwgbWlpX2xpbmtfaW50ZXJydXB0IH0sCi0JCXsgTlVMTCB9LAotCX07CisJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKKwkqaWNycCA9IDB4MDgwMDAwMDA7Cit9CiAKLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoaWRwLT5pcnEsIGlkcC0+aGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLCBkZXYpICE9IDApCi0JCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLCBpZHAtPm5hbWUsIGlkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0IGF0IENvbGRGaXJlIDUyNzIgU0lNICovCi0JaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IzKTsKLQkqaWNycCA9IDB4MDAwMDBkZGQ7CitzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppY3JwOworCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KIAlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOwogCSppY3JwID0gMHgwZDAwMDAwMDsKIH0KIAotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwotCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKLQotCS8qCi0JICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICogU2VlIDUyNzIgbWFudWFsIHNlY3Rpb24gMTEuNS44OiBNU0NSCi0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoKCgoTUNGX0NMSyAvIDQpIC8gKDI1MDAwMDAgLyAxMCkpICsgNSkgLyAxMCkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KKyNpZmRlZiBDT05GSUdfTTUyNzIKIHN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEzMDcsNTQ5ICsxMjc0LDYgQEAKIAlpZiAoaWFwID09IGZlY19tYWNfZGVmYXVsdCkKIAkJIGRldi0+ZGV2X2FkZHJbRVRIX0FMRU4tMV0gPSBmZWNfbWFjX2RlZmF1bHRbRVRIX0FMRU4tMV0gKyBmZXAtPmluZGV4OwogfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0JaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKLQkqaWNycCA9IDB4MDgwMDAwMDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmljcnA7Ci0JLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCAqLwotCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7Ci0JKmljcnAgPSAweDBkMDAwMDAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci19Ci0KLS8qCi0gKglEbyBub3QgbmVlZCB0byBtYWtlIHJlZ2lvbiB1bmNhY2hlZCBvbiA1MjcyLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgZGVmaW5lZChDT05GSUdfTTUyN3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KQotCi0vKgotICoJQ29kZSBzcGVjaWZpYyB0byBDb2xkZmlyZSA1MjMwLzUyMzEvNTIzMi81MjM0LzUyMzUsCi0gKgl0aGUgNTI3MC81MjcxLzUyNzQvNTI3NSBhbmQgNTI4MC81MjgyIHNldHVwcy4KLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcmVxdWVzdF9pbnRycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7Ci0JaW50IGI7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVzYyB7Ci0JCWNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIHNob3J0IGlycTsKLQl9ICppZHAsIGlkW10gPSB7Ci0JCXsgImZlYyhUWEYpIiwgMjMgfSwKLQkJeyAiZmVjKFJYRikiLCAyNyB9LAotCQl7ICJmZWMoTUlJKSIsIDI5IH0sCi0JCXsgTlVMTCB9LAotCX07Ci0KLQlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWIgPSAoZmVwLT5pbmRleCkgPyAxMjggOiA2NDsKLQotCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVycy4gKi8KLQlmb3IgKGlkcCA9IGlkOyBpZHAtPm5hbWU7IGlkcCsrKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShiK2lkcC0+aXJxLCBmZWNfZW5ldF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIGlkcC0+bmFtZSwgZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSA1MjgwLzUyODIgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KLQl7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICppY3JwOwotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAqaW1ycDsKLQkJaW50IGksIGlsaXA7Ci0KLQkJYiA9IChmZXAtPmluZGV4KSA/IE1DRklDTV9JTlRDMSA6IE1DRklDTV9JTlRDMDsKLQkJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChNQ0ZfSVBTQkFSICsgYiArCi0JCQlNQ0ZJTlRDX0lDUjApOwotCQlmb3IgKGkgPSAyMywgaWxpcCA9IDB4Mjg7IChpIDwgMzYpOyBpKyspCi0JCQlpY3JwW2ldID0gaWxpcC0tOwotCi0JCWltcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIGIgKwotCQkJTUNGSU5UQ19JTVJIKTsKLQkJKmltcnAgJj0gfjB4MDAwMDAwMGY7Ci0JCWltcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIGIgKwotCQkJTUNGSU5UQ19JTVJMKTsKLQkJKmltcnAgJj0gfjB4ZmY4MDAwMDE7Ci0JfQotCi0jaWYgZGVmaW5lZChDT05GSUdfTTUyOHgpCi0JLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgTUlJIGxpbmVzICovCi0JewotCQl2b2xhdGlsZSB1MTYgKmdwaW9fcGFzcGFyOwotCQl2b2xhdGlsZSB1OCAqZ3Bpb19wZWhscGFyOwotCi0JCWdwaW9fcGFzcGFyID0gKHZvbGF0aWxlIHUxNiAqKSAoTUNGX0lQU0JBUiArIDB4MTAwMDU2KTsKLQkJZ3Bpb19wZWhscGFyID0gKHZvbGF0aWxlIHUxNiAqKSAoTUNGX0lQU0JBUiArIDB4MTAwMDU4KTsKLQkJKmdwaW9fcGFzcGFyIHw9IDB4MGYwMDsKLQkJKmdwaW9fcGVobHBhciA9IDB4YzA7Ci0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NNTI3eCkKLQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBNSUkgbGluZXMgKi8KLQl7Ci0JCXZvbGF0aWxlIHU4ICpncGlvX3Bhcl9mZWM7Ci0JCXZvbGF0aWxlIHUxNiAqZ3Bpb19wYXJfZmVjaTJjOwotCi0JCWdwaW9fcGFyX2ZlY2kyYyA9ICh2b2xhdGlsZSB1MTYgKikoTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKLQkJLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgRkVDMCBNSUkgbGluZXMgKi8KLQkJZ3Bpb19wYXJfZmVjID0gKHZvbGF0aWxlIHU4ICopKE1DRl9JUFNCQVIgKyAweDEwMDA3OCk7Ci0KLQkJKmdwaW9fcGFyX2ZlY2kyYyB8PSAweDBmMDA7Ci0JCSpncGlvX3Bhcl9mZWMgfD0gMHhjMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX0ZFQzIpCi0JCS8qIFNldCB1cCBncGlvIG91dHB1dHMgZm9yIEZFQzEgTUlJIGxpbmVzICovCi0JCWdwaW9fcGFyX2ZlYyA9ICh2b2xhdGlsZSB1OCAqKShNQ0ZfSVBTQkFSICsgMHgxMDAwNzkpOwotCi0JCSpncGlvX3Bhcl9mZWNpMmMgfD0gMHgwMGEwOwotCQkqZ3Bpb19wYXJfZmVjIHw9IDB4YzA7Ci0jZW5kaWYgLyogQ09ORklHX0ZFQzIgKi8KLQl9Ci0jZW5kaWYgLyogQ09ORklHX001Mjd4ICovCi19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqIFNlZSA1MjgyIG1hbnVhbCBzZWN0aW9uIDE3LjUuNC43OiBNU0NSCi0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoKCgoTUNGX0NMSyAvIDIpIC8gKDI1MDAwMDAgLyAxMCkpICsgNSkgLyAxMCkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQl1bnNpZ25lZCBjaGFyICppYXAsIHRtcGFkZHJbRVRIX0FMRU5dOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JaWYgKEZFQ19GTEFTSE1BQykgewotCQkvKgotCQkgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBGTEFTSC4KLQkJICogSWYgaXQgaXMgYWxsIDEncyBvciAwJ3MsIHVzZSB0aGUgZGVmYXVsdC4KLQkJICovCi0JCWlhcCA9IEZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgICAoaWFwWzNdID09IDApICYmIChpYXBbNF0gPT0gMCkgJiYgKGlhcFs1XSA9PSAwKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQkJaWYgKChpYXBbMF0gPT0gMHhmZikgJiYgKGlhcFsxXSA9PSAweGZmKSAmJiAoaWFwWzJdID09IDB4ZmYpICYmCi0JCSAgICAoaWFwWzNdID09IDB4ZmYpICYmIChpYXBbNF0gPT0gMHhmZikgJiYgKGlhcFs1XSA9PSAweGZmKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQl9IGVsc2UgewotCQkqKCh1bnNpZ25lZCBsb25nICopICZ0bXBhZGRyWzBdKSA9IGZlY3AtPmZlY19hZGRyX2xvdzsKLQkJKigodW5zaWduZWQgc2hvcnQgKikgJnRtcGFkZHJbNF0pID0gKGZlY3AtPmZlY19hZGRyX2hpZ2ggPj4gMTYpOwotCQlpYXAgPSAmdG1wYWRkclswXTsKLQl9Ci0KLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgaWFwLCBFVEhfQUxFTik7Ci0KLQkvKiBBZGp1c3QgTUFDIGlmIHVzaW5nIGRlZmF1bHQgTUFDIGFkZHJlc3MgKi8KLQlpZiAoaWFwID09IGZlY19tYWNfZGVmYXVsdCkKLQkJZGV2LT5kZXZfYWRkcltFVEhfQUxFTi0xXSA9IGZlY19tYWNfZGVmYXVsdFtFVEhfQUxFTi0xXSArIGZlcC0+aW5kZXg7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2VuYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci19Ci0KLS8qCi0gKglEbyBub3QgbmVlZCB0byBtYWtlIHJlZ2lvbiB1bmNhY2hlZCBvbiA1MjcyLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIweCkKLQotLyoKLSAqCUNvZGUgc3BlY2lmaWMgdG8gQ29sZGZpcmUgNTIweAotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlpbnQgYjsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkJeyAiZmVjKFRYRikiLCAyMyB9LAotCQl7ICJmZWMoUlhGKSIsIDI3IH0sCi0JCXsgImZlYyhNSUkpIiwgMjkgfSwKLQkJeyBOVUxMIH0sCi0JfTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JYiA9IDY0ICsgMTM7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCXsKLQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKmljcnA7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICppbXJwOwotCi0JCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArCi0JCQlNQ0ZJTlRDX0lDUjApOwotCQlmb3IgKGIgPSAzNjsgKGIgPCA0OSk7IGIrKykKLQkJCWljcnBbYl0gPSAweDA0OwotCQlpbXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKwotCQkJTUNGSU5UQ19JTVJIKTsKLQkJKmltcnAgJj0gfjB4MDAwMUZGRjA7Ci0JfQotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQykgfD0gMHhmMDsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUNJMkMpIHw9IDB4MGY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqIFNlZSA1MjgyIG1hbnVhbCBzZWN0aW9uIDE3LjUuNC43OiBNU0NSCi0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoKCgoTUNGX0NMSyAvIDIpIC8gKDI1MDAwMDAgLyAxMCkpICsgNSkgLyAxMCkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQl1bnNpZ25lZCBjaGFyICppYXAsIHRtcGFkZHJbRVRIX0FMRU5dOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JaWYgKEZFQ19GTEFTSE1BQykgewotCQkvKgotCQkgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBGTEFTSC4KLQkJICogSWYgaXQgaXMgYWxsIDEncyBvciAwJ3MsIHVzZSB0aGUgZGVmYXVsdC4KLQkJICovCi0JCWlhcCA9IEZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgIChpYXBbM10gPT0gMCkgJiYgKGlhcFs0XSA9PSAwKSAmJiAoaWFwWzVdID09IDApKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCQlpZiAoKGlhcFswXSA9PSAweGZmKSAmJiAoaWFwWzFdID09IDB4ZmYpICYmIChpYXBbMl0gPT0gMHhmZikgJiYKLQkJICAgKGlhcFszXSA9PSAweGZmKSAmJiAoaWFwWzRdID09IDB4ZmYpICYmIChpYXBbNV0gPT0gMHhmZikpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JfSBlbHNlIHsKLQkJKigodW5zaWduZWQgbG9uZyAqKSAmdG1wYWRkclswXSkgPSBmZWNwLT5mZWNfYWRkcl9sb3c7Ci0JCSooKHVuc2lnbmVkIHNob3J0ICopICZ0bXBhZGRyWzRdKSA9IChmZWNwLT5mZWNfYWRkcl9oaWdoID4+IDE2KTsKLQkJaWFwID0gJnRtcGFkZHJbMF07Ci0JfQotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGlhcCwgRVRIX0FMRU4pOwotCi0JLyogQWRqdXN0IE1BQyBpZiB1c2luZyBkZWZhdWx0IE1BQyBhZGRyZXNzICovCi0JaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCi0JCWRldi0+ZGV2X2FkZHJbRVRIX0FMRU4tMV0gPSBmZWNfbWFjX2RlZmF1bHRbRVRIX0FMRU4tMV0gKyBmZXAtPmluZGV4OwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfbG9jYWxod19zZXR1cCh2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTMyeCkKLS8qCi0gKiBDb2RlIHNwZWNpZmljIGZvciBNNTMyeAotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlpbnQgYjsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGlkZXNjIHsKLQkJY2hhciAqbmFtZTsKLQkJdW5zaWduZWQgc2hvcnQgaXJxOwotCX0gKmlkcCwgaWRbXSA9IHsKLQkgICAgeyAiZmVjKFRYRikiLCAzNiB9LAotCSAgICB7ICJmZWMoUlhGKSIsIDQwIH0sCi0JICAgIHsgImZlYyhNSUkpIiwgNDIgfSwKLQkgICAgeyBOVUxMIH0sCi0JfTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JYiA9IChmZXAtPmluZGV4KSA/IDEyOCA6IDY0OwotCi0JLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwotCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGIraWRwLT5pcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLGRldikgIT0gMCkKLQkJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgSVJRKCVkKSFcbiIsCi0JCQkJaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKLQl9Ci0KLQkvKiBVbm1hc2sgaW50ZXJydXB0cyAqLwotCU1DRl9JTlRDMF9JQ1IzNiA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSMzcgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjM4ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1IzOSA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDAgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQxID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0MiA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDMgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ0ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0NSA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDYgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ3ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0OCA9IDB4MjsKLQotCU1DRl9JTlRDMF9JTVJIICY9IH4oCi0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szNiB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szNyB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szOCB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0szOSB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MCB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MSB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MiB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MyB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NCB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NSB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NiB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0NyB8Ci0JCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0OCApOwotCi0JLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgTUlJIGxpbmVzICovCi0JTUNGX0dQSU9fUEFSX0ZFQ0kyQyB8PSAoMCB8Ci0JCU1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01EQ19FTURDIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURJT19FTURJTyk7Ci0JTUNGX0dQSU9fUEFSX0ZFQyA9ICgwIHwKLQkJTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDXzdXX0ZFQyB8Ci0JCU1DRl9HUElPX1BBUl9GRUNfUEFSX0ZFQ19NSUlfRkVDKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OwotCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKLQotCS8qCi0JICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICovCi0JZmVwLT5waHlfc3BlZWQgPSAoTUNGX0NMSyAvIDMpIC8gKDI1MDAwMDAgKiAyICkgKiAyOwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKLQotCWZlY19yZXN0YXJ0KGRldiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2dldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQl1bnNpZ25lZCBjaGFyICppYXAsIHRtcGFkZHJbRVRIX0FMRU5dOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCi0JaWYgKEZFQ19GTEFTSE1BQykgewotCQkvKgotCQkgKiBHZXQgTUFDIGFkZHJlc3MgZnJvbSBGTEFTSC4KLQkJICogSWYgaXQgaXMgYWxsIDEncyBvciAwJ3MsIHVzZSB0aGUgZGVmYXVsdC4KLQkJICovCi0JCWlhcCA9IEZFQ19GTEFTSE1BQzsKLQkJaWYgKChpYXBbMF0gPT0gMCkgJiYgKGlhcFsxXSA9PSAwKSAmJiAoaWFwWzJdID09IDApICYmCi0JCSAgICAoaWFwWzNdID09IDApICYmIChpYXBbNF0gPT0gMCkgJiYgKGlhcFs1XSA9PSAwKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQkJaWYgKChpYXBbMF0gPT0gMHhmZikgJiYgKGlhcFsxXSA9PSAweGZmKSAmJiAoaWFwWzJdID09IDB4ZmYpICYmCi0JCSAgICAoaWFwWzNdID09IDB4ZmYpICYmIChpYXBbNF0gPT0gMHhmZikgJiYgKGlhcFs1XSA9PSAweGZmKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQl9IGVsc2UgewotCQkqKCh1bnNpZ25lZCBsb25nICopICZ0bXBhZGRyWzBdKSA9IGZlY3AtPmZlY19hZGRyX2xvdzsKLQkJKigodW5zaWduZWQgc2hvcnQgKikgJnRtcGFkZHJbNF0pID0gKGZlY3AtPmZlY19hZGRyX2hpZ2ggPj4gMTYpOwotCQlpYXAgPSAmdG1wYWRkclswXTsKLQl9Ci0KLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgaWFwLCBFVEhfQUxFTik7Ci0KLQkvKiBBZGp1c3QgTUFDIGlmIHVzaW5nIGRlZmF1bHQgTUFDIGFkZHJlc3MgKi8KLQlpZiAoaWFwID09IGZlY19tYWNfZGVmYXVsdCkKLQkJZGV2LT5kZXZfYWRkcltFVEhfQUxFTi0xXSA9IGZlY19tYWNfZGVmYXVsdFtFVEhfQUxFTi0xXSArIGZlcC0+aW5kZXg7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2VuYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci19Ci0KLS8qCi0gKglEbyBub3QgbmVlZCB0byBtYWtlIHJlZ2lvbiB1bmNhY2hlZCBvbiA1MzJ4LgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLSNlbHNlCi0KLS8qCi0gKglDb2RlIHNwZWNpZmljIHRvIHRoZSBNUEM4NjBUIHNldHVwLgotICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXA7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopSU1BUF9BRERSOwkvKiBwb2ludGVyIHRvIGludGVybmFsIHJlZ2lzdGVycyAqLwotCi0JaWYgKHJlcXVlc3RfOHh4aXJxKEZFQ19JTlRFUlJVUFQsIGZlY19lbmV0X2ludGVycnVwdCwgMCwgImZlYyIsIGRldikgIT0gMCkKLQkJcGFuaWMoIkNvdWxkIG5vdCBhbGxvY2F0ZSBGRUMgSVJRISIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JYmRfdCAqYmQ7Ci0KLQliZCA9IChiZF90ICopX19yZXM7Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGJkLT5iaV9lbmV0YWRkciwgRVRIX0FMRU4pOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19zZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCi17Ci0JZXh0ZXJuIHVpbnQgX2dldF9JTU1SKHZvaWQpOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCi0JZmVjcCA9IGZlcC0+aHdwOwotCWltbWFwID0gKGltbWFwX3QgKilJTUFQX0FERFI7CS8qIHBvaW50ZXIgdG8gaW50ZXJuYWwgcmVnaXN0ZXJzICovCi0KLQkvKiBDb25maWd1cmUgYWxsIG9mIHBvcnQgRCBmb3IgTUlJLgotCSovCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRwYXIgPSAweDFmZmY7Ci0KLQkvKiBCaXRzIG1vdmVkIGZyb20gUmV2LiBEIG9ud2FyZC4KLQkqLwotCWlmICgoX2dldF9JTU1SKCkgJiAweGZmZmYpIDwgMHgwNTAxKQotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGRpciA9IDB4MWM1ODsJLyogUHJlIHJldi4gRCAqLwotCWVsc2UKLQkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkaXIgPSAweDFmZmY7CS8qIFJldi4gRCBhbmQgbGF0ZXIgKi8KLQotCS8qIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSovCi0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkID0KLQkJKChiZC0+YmlfYnVzZnJlcSAqIDEwMDAwMDApIC8gMjUwMDAwMCkgJiAweDdlOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQotCS8qIEVuYWJsZSBNSUkgY29tbWFuZCBmaW5pc2hlZCBpbnRlcnJ1cHQKLQkqLwotCWZlY3AtPmZlY19pdmVjID0gKEZFQ19JTlRFUlJVUFQvMikgPDwgMjk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2xvY2FsaHdfc2V0dXAodm9pZCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9oYXNoID0gUEtUX01BWEJVRl9TSVpFOwotCS8qIEVuYWJsZSBiaWcgZW5kaWFuIGFuZCBkb24ndCBjYXJlIGFib3V0IFNETUEgRkMuCi0JKi8KLQlmZWNwLT5mZWNfZnVuX2NvZGUgPSAweDc4MDAwMDAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY191bmNhY2hlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlwdGVfdCAqcHRlOwotCXB0ZSA9IHZhX3RvX3B0ZShtZW1fYWRkcik7Ci0JcHRlX3ZhbCgqcHRlKSB8PSBfUEFHRV9OT19DQUNIRTsKLQlmbHVzaF90bGJfcGFnZShpbml0X21tLm1tYXAsIG1lbV9hZGRyKTsKLX0KLQogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIwNTUsNyArMTQ3OSw5IEBACiAJCXByaW50aygiRkVDOiBObyBQSFkgZGV2aWNlIGZvdW5kLlxuIik7CiAJCS8qIERpc2FibGUgZXh0ZXJuYWwgTUlJIGludGVyZmFjZSAqLwogCQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQgPSAwOworI2lmZGVmIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CiAJCWZlY19kaXNhYmxlX3BoeV9pbnRyKCk7CisjZW5kaWYKIAl9CiB9CiAKQEAgLTIyMzcsMTIgKzE2NjMsMTIgQEAKIAogfQogCi0vKiBJbml0aWFsaXplIHRoZSBGRUMgRXRoZXJuZXQgb24gODYwVCAob3IgQ29sZEZpcmUgNTI3MikuCi0gKi8KICAvKgogICAqIFhYWDogIFdlIG5lZWQgdG8gY2xlYW4gdXAgb24gZmFpbHVyZSBleGl0cyBoZXJlLgorICAqCisgICogaW5kZXggaXMgb25seSB1c2VkIGluIGxlZ2FjeSBjb2RlCiAgICovCi1pbnQgX19pbml0IGZlY19lbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBfX2luaXQgZmVjX2VuZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZwltZW1fYWRkcjsKQEAgLTIyNTAsMTUgKzE2NzYsMTEgQEAKIAljYmRfdAkJKmNiZF9iYXNlOwogCXZvbGF0aWxlIGZlY190CSpmZWNwOwogCWludCAJCWksIGo7Ci0Jc3RhdGljIGludAlpbmRleCA9IDA7Ci0KLQkvKiBPbmx5IGFsbG93IHVzIHRvIGJlIHByb2JlZCBvbmNlLiAqLwotCWlmIChpbmRleCA+PSBGRUNfTUFYX1BPUlRTKQotCQlyZXR1cm4gLUVOWElPOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXIgZGVzY3JpcHRvcnMuCiAJKi8KLQltZW1fYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwltZW1fYWRkciA9ICh1bnNpZ25lZCBsb25nKWRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBQQUdFX1NJWkUsCisJCQkmZmVwLT5iZF9kbWEsIEdGUF9LRVJORUwpOwogCWlmIChtZW1fYWRkciA9PSAwKSB7CiAJCXByaW50aygiRkVDOiBhbGxvY2F0ZSBkZXNjcmlwdG9yIG1lbW9yeSBmYWlsZWQ/XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjY5LDcgKzE2OTEsNyBAQAogCiAJLyogQ3JlYXRlIGFuIEV0aGVybmV0IGRldmljZSBpbnN0YW5jZS4KIAkqLwotCWZlY3AgPSAodm9sYXRpbGUgZmVjX3QgKikgZmVjX2h3W2luZGV4XTsKKwlmZWNwID0gKHZvbGF0aWxlIGZlY190ICopZGV2LT5iYXNlX2FkZHI7CiAKIAlmZXAtPmluZGV4ID0gaW5kZXg7CiAJZmVwLT5od3AgPSBmZWNwOwpAQCAtMjI4MCwxOCArMTcwMiwyNCBAQAogCWZlY3AtPmZlY19lY250cmwgPSAxOwogCXVkZWxheSgxMCk7CiAKLQkvKiBTZXQgdGhlIEV0aGVybmV0IGFkZHJlc3MuICBJZiB1c2luZyBtdWx0aXBsZSBFbmV0cyBvbiB0aGUgOHh4LAotCSAqIHRoaXMgbmVlZHMgc29tZSB3b3JrIHRvIGdldCB1bmlxdWUgYWRkcmVzc2VzLgotCSAqCi0JICogVGhpcyBpcyBvdXIgZGVmYXVsdCBNQUMgYWRkcmVzcyB1bmxlc3MgdGhlIHVzZXIgY2hhbmdlcwotCSAqIGl0IHZpYSBldGhfbWFjX2FkZHIgKG91ciBkZXYtPnNldF9tYWNfYWRkciBoYW5kbGVyKS4KLQkgKi8KKwkvKiBTZXQgdGhlIEV0aGVybmV0IGFkZHJlc3MgKi8KKyNpZmRlZiBDT05GSUdfTTUyNzIKIAlmZWNfZ2V0X21hYyhkZXYpOworI2Vsc2UKKwl7CisJCXVuc2lnbmVkIGxvbmcgbDsKKwkJbCA9IGZlY3AtPmZlY19hZGRyX2xvdzsKKwkJZGV2LT5kZXZfYWRkclswXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJZGV2LT5kZXZfYWRkclsxXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDBGRjAwMDApID4+IDE2KTsKKwkJZGV2LT5kZXZfYWRkclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDAwMEZGMDApID4+IDgpOworCQlkZXYtPmRldl9hZGRyWzNdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMDAwMDBGRikgPj4gMCk7CisJCWwgPSBmZWNwLT5mZWNfYWRkcl9oaWdoOworCQlkZXYtPmRldl9hZGRyWzRdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCQlkZXYtPmRldl9hZGRyWzVdID0gKHVuc2lnbmVkIGNoYXIpKChsICYgMHgwMEZGMDAwMCkgPj4gMTYpOworCX0KKyNlbmRpZgogCiAJY2JkX2Jhc2UgPSAoY2JkX3QgKiltZW1fYWRkcjsKLQkvKiBYWFg6IG1pc3NpbmcgY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSAqLwotCi0JZmVjX3VuY2FjaGUobWVtX2FkZHIpOwogCiAJLyogU2V0IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRlc2NyaXB0b3IgYmFzZS4KIAkqLwpAQCAtMjMxMyw4ICsxNzQxLDYgQEAKIAkJbWVtX2FkZHIgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCS8qIFhYWDogbWlzc2luZyBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlICovCiAKLQkJZmVjX3VuY2FjaGUobWVtX2FkZHIpOwotCiAJCS8qIEluaXRpYWxpemUgdGhlIEJEIGZvciBldmVyeSBmcmFnbWVudCBpbiB0aGUgcGFnZS4KIAkJKi8KIAkJZm9yIChqPTA7IGo8RkVDX0VORVRfUlhfRlJQUEc7IGorKykgewpAQCAtMjM1NywxMyArMTc4MywxMyBAQAogCiAJLyogU2V0IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRlc2NyaXB0b3IgYmFzZS4KIAkqLwotCWZlY3AtPmZlY19yX2Rlc19zdGFydCA9IF9fcGEoKHVpbnQpKGZlcC0+cnhfYmRfYmFzZSkpOwotCWZlY3AtPmZlY194X2Rlc19zdGFydCA9IF9fcGEoKHVpbnQpKGZlcC0+dHhfYmRfYmFzZSkpOworCWZlY3AtPmZlY19yX2Rlc19zdGFydCA9IGZlcC0+YmRfZG1hOworCWZlY3AtPmZlY194X2Rlc19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZlcC0+YmRfZG1hICsgc2l6ZW9mKGNiZF90KQorCQkJCSogUlhfUklOR19TSVpFOwogCi0JLyogSW5zdGFsbCBvdXIgaW50ZXJydXB0IGhhbmRsZXJzLiBUaGlzIHZhcmllcyBkZXBlbmRpbmcgb24KLQkgKiB0aGUgYXJjaGl0ZWN0dXJlLgotCSovCi0JZmVjX3JlcXVlc3RfaW50cnMoZGV2KTsKKyNpZmRlZiBIQVZFX21paV9saW5rX2ludGVycnVwdAorCWZlY19yZXF1ZXN0X21paV9pbnRyKGRldik7CisjZW5kaWYKIAogCWZlY3AtPmZlY19ncnBfaGFzaF90YWJsZV9oaWdoID0gMDsKIAlmZWNwLT5mZWNfZ3JwX2hhc2hfdGFibGVfbG93ID0gMDsKQEAgLTIzNzUsOCArMTgwMSw2IEBACiAJZmVjcC0+ZmVjX2hhc2hfdGFibGVfbG93ID0gMDsKICNlbmRpZgogCi0JZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylmZWNwOwotCiAJLyogVGhlIEZFQyBFdGhlcm5ldCBzcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwogCWRldi0+b3BlbiA9IGZlY19lbmV0X29wZW47CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBmZWNfZW5ldF9zdGFydF94bWl0OwpAQCAtMjM5MCw3ICsxODE0LDE2IEBACiAJbWlpX2ZyZWUgPSBtaWlfY21kczsKIAogCS8qIHNldHVwIE1JSSBpbnRlcmZhY2UgKi8KLQlmZWNfc2V0X21paShkZXYsIGZlcCk7CisJZmVjcC0+ZmVjX3JfY250cmwgPSBPUFRfRlJBTUVfU0laRSB8IDB4MDQ7CisJZmVjcC0+ZmVjX3hfY250cmwgPSAweDAwOworCisJLyoKKwkgKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKKwkgKi8KKwlmZXAtPnBoeV9zcGVlZCA9ICgoKChjbGtfZ2V0X3JhdGUoZmVwLT5jbGspIC8gMiArIDQ5OTk5OTkpCisJCQkJCS8gMjUwMDAwMCkgLyAyKSAmIDB4M0YpIDw8IDE7CisJZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOworCWZlY19yZXN0YXJ0KGRldiwgMCk7CiAKIAkvKiBDbGVhciBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KIAlmZWNwLT5mZWNfaWV2ZW50ID0gMHhmZmMwMDAwMDsKQEAgLTI0MDMsNyArMTgzNiw2IEBACiAJZmVwLT5waHlfYWRkciA9IDA7CiAJbWlpX3F1ZXVlKGRldiwgbWtfbWlpX3JlYWQoTUlJX1JFR19QSFlJUjEpLCBtaWlfZGlzY292ZXJfcGh5KTsKIAotCWluZGV4Kys7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MzAsNyArMTg2Miw2IEBACiAJLyogQ2xlYXIgYW55IG91dHN0YW5kaW5nIGludGVycnVwdC4KIAkqLwogCWZlY3AtPmZlY19pZXZlbnQgPSAweGZmYzAwMDAwOwotCWZlY19lbmFibGVfcGh5X2ludHIoKTsKIAogCS8qIFNldCBzdGF0aW9uIGFkZHJlc3MuCiAJKi8KQEAgLTI0NDUsMTIgKzE4NzYsMTEgQEAKIAkqLwogCWZlY3AtPmZlY19yX2J1ZmZfc2l6ZSA9IFBLVF9NQVhCTFJfU0laRTsKIAotCWZlY19sb2NhbGh3X3NldHVwKCk7Ci0KIAkvKiBTZXQgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGVzY3JpcHRvciBiYXNlLgogCSovCi0JZmVjcC0+ZmVjX3JfZGVzX3N0YXJ0ID0gX19wYSgodWludCkoZmVwLT5yeF9iZF9iYXNlKSk7Ci0JZmVjcC0+ZmVjX3hfZGVzX3N0YXJ0ID0gX19wYSgodWludCkoZmVwLT50eF9iZF9iYXNlKSk7CisJZmVjcC0+ZmVjX3JfZGVzX3N0YXJ0ID0gZmVwLT5iZF9kbWE7CisJZmVjcC0+ZmVjX3hfZGVzX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZmVwLT5iZF9kbWEgKyBzaXplb2YoY2JkX3QpCisJCQkJKiBSWF9SSU5HX1NJWkU7CiAKIAlmZXAtPmRpcnR5X3R4ID0gZmVwLT5jdXJfdHggPSBmZXAtPnR4X2JkX2Jhc2U7CiAJZmVwLT5jdXJfcnggPSBmZXAtPnJ4X2JkX2Jhc2U7CkBAIC0yNTUyLDM5ICsxOTgyLDE3MSBAQAogCS8qIENsZWFyIG91dHN0YW5kaW5nIE1JSSBjb21tYW5kIGludGVycnVwdHMuCiAJKi8KIAlmZWNwLT5mZWNfaWV2ZW50ID0gRkVDX0VORVRfTUlJOwotCWZlY19lbmFibGVfcGh5X2ludHIoKTsKIAogCWZlY3AtPmZlY19pbWFzayA9IEZFQ19FTkVUX01JSTsKIAlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZlY19lbmV0X21vZHVsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdAorZmVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZXJyOworCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisJaW50IGksIGlycSwgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAKLQlwcmludGsoIkZFQyBFTkVUIFZlcnNpb24gMC4yXG4iKTsKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRU5YSU87CiAKLQlmb3IgKGkgPSAwOyAoaSA8IEZFQ19NQVhfUE9SVFMpOyBpKyspIHsKLQkJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlKSk7Ci0JCWlmICghZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWVyciA9IGZlY19lbmV0X2luaXQoZGV2KTsKLQkJaWYgKGVycikgewotCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJCWNvbnRpbnVlOworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIHBkZXYtPm5hbWUpOworCWlmICghcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIEluaXQgbmV0d29yayBkZXZpY2UgKi8KKwluZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlKSk7CisJaWYgKCFuZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOworCisJLyogc2V0dXAgYm9hcmQgaW5mbyBzdHJ1Y3R1cmUgKi8KKwlmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwltZW1zZXQoZmVwLCAwLCBzaXplb2YoKmZlcCkpOworCisJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CisKKwlpZiAoIW5kZXYtPmJhc2VfYWRkcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9pb3JlbWFwOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCisJLyogVGhpcyBkZXZpY2UgaGFzIHVwIHRvIHRocmVlIGlycXMgb24gc29tZSBwbGF0Zm9ybXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCWlmIChpICYmIGlycSA8IDApCisJCQlicmVhazsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBmZWNfZW5ldF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIHBkZXYtPm5hbWUsIG5kZXYpOworCQlpZiAocmV0KSB7CisJCQl3aGlsZSAoaSA+PSAwKSB7CisJCQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKKwkJCQlmcmVlX2lycShpcnEsIG5kZXYpOworCQkJCWktLTsKKwkJCX0KKwkJCWdvdG8gZmFpbGVkX2lycTsKIAkJfQotCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewotCQkJLyogWFhYOiBtaXNzaW5nIGNsZWFudXAgaGVyZSAqLwotCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJfQogCi0JCXByaW50aygiJXM6IGV0aGVybmV0ICVwTVxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKKwlmZXAtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZlY19jbGsiKTsKKwlpZiAoSVNfRVJSKGZlcC0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGZlcC0+Y2xrKTsKKwkJZ290byBmYWlsZWRfY2xrOworCX0KKwljbGtfZW5hYmxlKGZlcC0+Y2xrKTsKKworCXJldCA9IGZlY19lbmV0X2luaXQobmRldiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfaW5pdDsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF9yZWdpc3RlcjsKKworCXJldHVybiAwOworCitmYWlsZWRfcmVnaXN0ZXI6CitmYWlsZWRfaW5pdDoKKwljbGtfZGlzYWJsZShmZXAtPmNsayk7CisJY2xrX3B1dChmZXAtPmNsayk7CitmYWlsZWRfY2xrOgorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKKwkJaWYgKGlycSA+IDApCisJCQlmcmVlX2lycShpcnEsIG5kZXYpOworCX0KK2ZhaWxlZF9pcnE6CisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopbmRldi0+YmFzZV9hZGRyKTsKK2ZhaWxlZF9pb3JlbWFwOgorCWZyZWVfbmV0ZGV2KG5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQKK2ZlY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZlY19zdG9wKG5kZXYpOworCWNsa19kaXNhYmxlKGZlcC0+Y2xrKTsKKwljbGtfcHV0KGZlcC0+Y2xrKTsKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKiluZGV2LT5iYXNlX2FkZHIpOworCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWZyZWVfbmV0ZGV2KG5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmZWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKKworCWlmIChuZGV2KSB7CisJCWZlcCA9IG5ldGRldl9wcml2KG5kZXYpOworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQkJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKKwkJCWZlY19zdG9wKG5kZXYpOworCQl9CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitmZWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAobmRldikgeworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQkJZmVjX2VuZXRfaW5pdChuZGV2LCAwKTsKKwkJCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZlY19kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgICAgPSAiZmVjIiwKKwkJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgPSBmZWNfcHJvYmUsCisJLnJlbW92ZSAgPSBfX2RldmV4aXRfcChmZWNfZHJ2X3JlbW92ZSksCisJLnN1c3BlbmQgPSBmZWNfc3VzcGVuZCwKKwkucmVzdW1lICA9IGZlY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdAorZmVjX2VuZXRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJGRUMgRXRoZXJuZXQgRHJpdmVyXG4iKTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZlY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK2ZlY19lbmV0X2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZmVjX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KGZlY19lbmV0X2NsZWFudXApOwogbW9kdWxlX2luaXQoZmVjX2VuZXRfbW9kdWxlX2luaXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuaCBiL2RyaXZlcnMvbmV0L2ZlYy5oCmluZGV4IDI5MjcxOWQuLjc2YzY0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5oCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5oCkBAIC0xNCw3ICsxNCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19NNTIweCkgfHwgZGVmaW5lZChDT05GSUdfTTUzMngpCisgICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YQykKIC8qCiAgKglKdXN0IGZpZ3VyZXMsIE1vdG9yb2xhIHdvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSBvZmZzZXRzIGZvcgogICoJcmVnaXN0ZXJzIGluIHRoZSBzYW1lIHBlcmlwaGVyYWwgZGV2aWNlIG9uIGRpZmZlcmVudCBtb2RlbHMKQEAgLTEwMywxMiArMTAzLDE5IEBACiAvKgogICoJRGVmaW5lIHRoZSBidWZmZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCiAgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9NWEMKK3R5cGVkZWYgc3RydWN0IGJ1ZmRlc2MgeworCXVuc2lnbmVkIHNob3J0IGNiZF9kYXRsZW47CS8qIERhdGEgbGVuZ3RoICovCisJdW5zaWduZWQgc2hvcnQgY2JkX3NjOwkvKiBDb250cm9sIGFuZCBzdGF0dXMgaW5mbyAqLworCXVuc2lnbmVkIGxvbmcgY2JkX2J1ZmFkZHI7CS8qIEJ1ZmZlciBhZGRyZXNzICovCit9IGNiZF90OworI2Vsc2UKIHR5cGVkZWYgc3RydWN0IGJ1ZmRlc2MgewogCXVuc2lnbmVkIHNob3J0CWNiZF9zYzsJCQkvKiBDb250cm9sIGFuZCBzdGF0dXMgaW5mbyAqLwogCXVuc2lnbmVkIHNob3J0CWNiZF9kYXRsZW47CQkvKiBEYXRhIGxlbmd0aCAqLwogCXVuc2lnbmVkIGxvbmcJY2JkX2J1ZmFkZHI7CQkvKiBCdWZmZXIgYWRkcmVzcyAqLwogfSBjYmRfdDsKLQorI2VuZGlmCiAKIC8qCiAgKglUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGNvdXJ0ZXN5IG9mIGNvbW1wcm9jLmgsIHdoaWNoIHdoZXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IGI4MjUxZTguLmE4NThjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC42MiIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjY0IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTg3LDggKzg3LDggQEAKICNkZWZpbmUgREVWX0hBU19NU0lfWCAgICAgICAgICAgICAgMHgwMDAwODAgIC8qIGRldmljZSBzdXBwb3J0cyBNU0ktWCAqLwogI2RlZmluZSBERVZfSEFTX1BPV0VSX0NOVFJMICAgICAgICAweDAwMDEwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHBvd2VyIHNhdmluZ3MgKi8KICNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YxICAgICAgMHgwMDAyMDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMSAqLwotI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjIgICAgICAweDAwMDQwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAyICovCi0jZGVmaW5lIERFVl9IQVNfU1RBVElTVElDU19WMyAgICAgIDB4MDAwODAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgaHcgc3RhdGlzdGljcyB2ZXJzaW9uIDMgKi8KKyNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YyICAgICAgMHgwMDA2MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMiAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjMgICAgICAweDAwMGUwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAzICovCiAjZGVmaW5lIERFVl9IQVNfVEVTVF9FWFRFTkRFRCAgICAgIDB4MDAxMDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgZXh0ZW5kZWQgZGlhZ25vc3RpYyB0ZXN0ICovCiAjZGVmaW5lIERFVl9IQVNfTUdNVF9VTklUICAgICAgICAgIDB4MDAyMDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgbWFuYWdlbWVudCB1bml0ICovCiAjZGVmaW5lIERFVl9IQVNfQ09SUkVDVF9NQUNBRERSICAgIDB4MDA0MDAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgY29ycmVjdCBtYWMgYWRkcmVzcyBvcmRlciAqLwpAQCAtMTAyLDcgKzEwMiw3IEBACiBlbnVtIHsKIAlOdlJlZ0lycVN0YXR1cyA9IDB4MDAwLAogI2RlZmluZSBOVlJFR19JUlFTVEFUX01JSUVWRU5UCTB4MDQwCi0jZGVmaW5lIE5WUkVHX0lSUVNUQVRfTUFTSwkJMHg4MWZmCisjZGVmaW5lIE5WUkVHX0lSUVNUQVRfTUFTSwkJMHg4M2ZmCiAJTnZSZWdJcnFNYXNrID0gMHgwMDQsCiAjZGVmaW5lIE5WUkVHX0lSUV9SWF9FUlJPUgkJMHgwMDAxCiAjZGVmaW5lIE5WUkVHX0lSUV9SWAkJCTB4MDAwMgpAQCAtMTEzLDE3ICsxMTMsMTMgQEAKICNkZWZpbmUgTlZSRUdfSVJRX0xJTksJCQkweDAwNDAKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0ZPUkNFRAkJMHgwMDgwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9GT1JDRUQJCTB4MDEwMAotI2RlZmluZSBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUgkJMHg4MDAwCisjZGVmaW5lIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SCQkweDgyMDAKICNkZWZpbmUgTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUCTB4MDBkZgogI2RlZmluZSBOVlJFR19JUlFNQVNLX0NQVQkJMHgwMDYwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9BTEwJCShOVlJFR19JUlFfVFhfRVJSfE5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVFhfRk9SQ0VEKQogI2RlZmluZSBOVlJFR19JUlFfUlhfQUxMCQkoTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1JYX0ZPUkNFRCkKICNkZWZpbmUgTlZSRUdfSVJRX09USEVSCQkJKE5WUkVHX0lSUV9USU1FUnxOVlJFR19JUlFfTElOS3xOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikKIAotI2RlZmluZSBOVlJFR19JUlFfVU5LTk9XTgkofihOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRnxOVlJFR19JUlFfVFhfRVJSfCBcCi0JCQkJCU5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1JYX0ZPUkNFRHwgXAotCQkJCQlOVlJFR19JUlFfVFhfRk9SQ0VEfE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkKLQogCU52UmVnVW5rbm93blNldHVwUmVnNiA9IDB4MDA4LAogI2RlZmluZSBOVlJFR19VTktTRVRVUDZfVkFMCQkzCiAKQEAgLTEzMiw3ICsxMjgsNyBAQAogICogTlZSRUdfUE9MTF9ERUZBVUxUPTk3IHdvdWxkIHJlc3VsdCBpbiBhbiBpbnRlcnZhbCBsZW5ndGggb2YgMSBtcwogICovCiAJTnZSZWdQb2xsaW5nSW50ZXJ2YWwgPSAweDAwYywKLSNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJOTcwIC8qIGJhY2t1cCB0eCBjbGVhbnVwIGlmIGxvb3AgbWF4IHJlYWNoZWQgKi8KKyNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJNjU1MzUgLyogYmFja3VwIHR4IGNsZWFudXAgaWYgbG9vcCBtYXggcmVhY2hlZCAqLwogI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfQ1BVCTEzCiAJTnZSZWdNU0lNYXAwID0gMHgwMjAsCiAJTnZSZWdNU0lNYXAxID0gMHgwMjQsCkBAIC0xNTcsNiArMTUzLDkgQEAKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfQUNRCTB4MDAwMGYwMDAKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX0xPQURFRAkweDAwMDA0MDAwCiAjZGVmaW5lIE5WUkVHX1hNSVRDVExfVFhfUEFUSF9FTgkweDAxMDAwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfREFUQV9TVEFSVAkweDAwMTAwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfREFUQV9SRUFEWQkweDAwMDEwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfREFUQV9FUlJPUgkweDAwMDIwMDAwCiAJTnZSZWdUcmFuc21pdHRlclN0YXR1cyA9IDB4MDg4LAogI2RlZmluZSBOVlJFR19YTUlUU1RBVF9CVVNZCTB4MDEKIApAQCAtMjg5LDggKzI4OCwxMCBAQAogI2RlZmluZSBOVlJFR19XQUtFVVBGTEFHU19BQ0NFUFRfTElOS0NIQU5HRQkweDA0CiAjZGVmaW5lIE5WUkVHX1dBS0VVUEZMQUdTX0VOQUJMRQkweDExMTEKIAotCU52UmVnUGF0dGVybkNSQyA9IDB4MjA0LAotCU52UmVnUGF0dGVybk1hc2sgPSAweDIwOCwKKwlOdlJlZ01nbXRVbml0R2V0VmVyc2lvbiA9IDB4MjA0LAorI2RlZmluZSBOVlJFR19NR01UVU5JVEdFVFZFUlNJT04gICAgIAkweDAxCisJTnZSZWdNZ210VW5pdFZlcnNpb24gPSAweDIwOCwKKyNkZWZpbmUgTlZSRUdfTUdNVFVOSVRWRVJTSU9OCQkweDA4CiAJTnZSZWdQb3dlckNhcCA9IDB4MjY4LAogI2RlZmluZSBOVlJFR19QT1dFUkNBUF9EM1NVUFAJKDE8PDMwKQogI2RlZmluZSBOVlJFR19QT1dFUkNBUF9EMlNVUFAJKDE8PDI2KQpAQCAtMzAzLDYgKzMwNCw4IEBACiAjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEVfRDEJCTB4MDAwMQogI2RlZmluZSBOVlJFR19QT1dFUlNUQVRFX0QyCQkweDAwMDIKICNkZWZpbmUgTlZSRUdfUE9XRVJTVEFURV9EMwkJMHgwMDAzCisJTnZSZWdNZ210VW5pdENvbnRyb2wgPSAweDI3OCwKKyNkZWZpbmUgTlZSRUdfTUdNVFVOSVRDT05UUk9MX0lOVVNFCTB4MjAwMDAKIAlOdlJlZ1R4Q250ID0gMHgyODAsCiAJTnZSZWdUeFplcm9SZVhtdCA9IDB4Mjg0LAogCU52UmVnVHhPbmVSZVhtdCA9IDB4Mjg4LApAQCAtNDYwLDcgKzQ2Myw3IEBACiAvKiBHZW5lcmFsIGRyaXZlciBkZWZhdWx0cyAqLwogI2RlZmluZSBOVl9XQVRDSERPR19USU1FTwkoNSpIWikKIAotI2RlZmluZSBSWF9SSU5HX0RFRkFVTFQJCTEyOAorI2RlZmluZSBSWF9SSU5HX0RFRkFVTFQJCTUxMgogI2RlZmluZSBUWF9SSU5HX0RFRkFVTFQJCTI1NgogI2RlZmluZSBSWF9SSU5HX01JTgkJMTI4CiAjZGVmaW5lIFRYX1JJTkdfTUlOCQk2NApAQCAtNTgyLDExICs1ODUsMTcgQEAKICNkZWZpbmUgTlZfTVNJX1hfVkVDVE9SX1RYICAgIDB4MQogI2RlZmluZSBOVl9NU0lfWF9WRUNUT1JfT1RIRVIgMHgyCiAKKyNkZWZpbmUgTlZfTVNJX1BSSVZfT0ZGU0VUIDB4NjgKKyNkZWZpbmUgTlZfTVNJX1BSSVZfVkFMVUUgIDB4ZmZmZmZmZmYKKwogI2RlZmluZSBOVl9SRVNUQVJUX1RYICAgICAgICAgMHgxCiAjZGVmaW5lIE5WX1JFU1RBUlRfUlggICAgICAgICAweDIKIAogI2RlZmluZSBOVl9UWF9MSU1JVF9DT1VOVCAgICAgMTYKIAorI2RlZmluZSBOVl9EWU5BTUlDX1RIUkVTSE9MRCAgICAgICAgNAorI2RlZmluZSBOVl9EWU5BTUlDX01BWF9RVUlFVF9DT1VOVCAgMjA0OAorCiAvKiBzdGF0aXN0aWNzICovCiBzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgewogCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOwpAQCAtNzQ0LDExICs3NTMsMTMgQEAKIAl1MTYgZ2lnYWJpdDsKIAlpbnQgaW50cl90ZXN0OwogCWludCByZWNvdmVyX2Vycm9yOworCWludCBxdWlldF9jb3VudDsKIAogCS8qIEdlbmVyYWwgZGF0YTogUk8gZmllbGRzICovCiAJZG1hX2FkZHJfdCByaW5nX2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJdTMyIG9yaWdfbWFjWzJdOworCXUzMiBldmVudHM7CiAJdTMyIGlycW1hc2s7CiAJdTMyIGRlc2NfdmVyOwogCXUzMiB0eHJ4Y3RsX2JpdHM7CkBAIC03NTgsNiArNzY5LDggQEAKIAl1MzIgcmVnaXN0ZXJfc2l6ZTsKIAlpbnQgcnhfY3N1bTsKIAl1MzIgbWFjX2luX3VzZTsKKwlpbnQgbWdtdF92ZXJzaW9uOworCWludCBtZ210X3NlbWE7CiAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAKQEAgLTgxMiwxMyArODI1LDE4IEBACiAKIAkvKiBwb3dlciBzYXZlZCBzdGF0ZSAqLwogCXUzMiBzYXZlZF9jb25maWdfc3BhY2VbTlZfUENJX1JFR1NaX01BWC80XTsKKworCS8qIGZvciBkaWZmZXJlbnQgbXNpLXggaXJxIHR5cGUgKi8KKwljaGFyIG5hbWVfcnhbSUZOQU1TSVogKyAzXTsgICAgICAgLyogLXJ4ICAgICovCisJY2hhciBuYW1lX3R4W0lGTkFNU0laICsgM107ICAgICAgIC8qIC10eCAgICAqLworCWNoYXIgbmFtZV9vdGhlcltJRk5BTVNJWiArIDZdOyAgICAvKiAtb3RoZXIgKi8KIH07CiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiBsb29wcyB1bnRpbCB3ZSBhc3N1bWUgdGhhdCBhIGJpdCBpbiB0aGUgaXJxIG1hc2sKICAqIGlzIHN0dWNrLiBPdmVycmlkYWJsZSB3aXRoIG1vZHVsZSBwYXJhbS4KICAqLwotc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAxNTsKK3N0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNDsKIAogLyoKICAqIE9wdGltaXphdGlvbiBjYW4gYmUgZWl0aGVyIHRocm91cHV0IG1vZGUgb3IgY3B1IG1vZGUKQEAgLTgyOCw5ICs4NDYsMTAgQEAKICAqLwogZW51bSB7CiAJTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCwKLQlOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUKKwlOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUsCisJTlZfT1BUSU1JWkFUSU9OX01PREVfRFlOQU1JQwogfTsKLXN0YXRpYyBpbnQgb3B0aW1pemF0aW9uX21vZGUgPSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUOworc3RhdGljIGludCBvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX0RZTkFNSUM7CiAKIC8qCiAgKiBQb2xsIGludGVydmFsIGZvciB0aW1lciBpcnEKQEAgLTg1Nyw3ICs4NzYsNyBAQAogCU5WX01TSVhfSU5UX0RJU0FCTEVELAogCU5WX01TSVhfSU5UX0VOQUJMRUQKIH07Ci1zdGF0aWMgaW50IG1zaXggPSBOVl9NU0lYX0lOVF9ESVNBQkxFRDsKK3N0YXRpYyBpbnQgbXNpeCA9IE5WX01TSVhfSU5UX0VOQUJMRUQ7CiAKIC8qCiAgKiBETUEgNjRiaXQKQEAgLTkyMyw3ICs5NDIsNyBAQAogCQlkZWxheW1heCAtPSBkZWxheTsKIAkJaWYgKGRlbGF5bWF4IDwgMCkgewogCQkJaWYgKG1zZykKLQkJCQlwcmludGsobXNnKTsKKwkJCQlwcmludGsoIiVzIiwgbXNnKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSB3aGlsZSAoKHJlYWRsKGJhc2UgKyBvZmZzZXQpICYgbWFzaykgIT0gdGFyZ2V0KTsKQEAgLTEwNTIsNiArMTA3MSwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgbnZfbmFwaV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwluYXBpX2VuYWJsZSgmbnAtPm5hcGkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIG52X25hcGlfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKworCW5hcGlfZGlzYWJsZSgmbnAtPm5hcGkpOworI2VuZGlmCit9CisKICNkZWZpbmUgTUlJX1JFQUQJKC0xKQogLyogbWlpX3J3OiByZWFkL3dyaXRlIGEgcmVnaXN0ZXIgb24gdGhlIFBIWS4KICAqCkBAIC0xNzYwLDcgKzE3OTcsNyBAQAogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBKdXN0IHJlc2NoZWR1bGUgTkFQSSByeCBwcm9jZXNzaW5nICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgbnZfZG9fcnhfcmVmaWxsKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTIzNjUsMTQgKzI0MDIsMTYgQEAKICAqCiAgKiBDYWxsZXIgbXVzdCBvd24gbnAtPmxvY2suCiAgKi8KLXN0YXRpYyB2b2lkIG52X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbnZfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgZmxhZ3M7CisJaW50IHR4X3dvcmsgPSAwOwogCXN0cnVjdCByaW5nX2Rlc2MqIG9yaWdfZ2V0X3R4ID0gbnAtPmdldF90eC5vcmlnOwogCiAJd2hpbGUgKChucC0+Z2V0X3R4Lm9yaWcgIT0gbnAtPnB1dF90eC5vcmlnKSAmJgotCSAgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHgub3JpZy0+ZmxhZ2xlbikpICYgTlZfVFhfVkFMSUQpKSB7CisJICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5vcmlnLT5mbGFnbGVuKSkgJiBOVl9UWF9WQUxJRCkgJiYKKwkgICAgICAgKHR4X3dvcmsgPCBsaW1pdCkpIHsKIAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lOiBmbGFncyAweCV4LlxuIiwKIAkJCQkJZGV2LT5uYW1lLCBmbGFncyk7CkBAIC0yMzk4LDYgKzI0MzcsNyBAQAogCQkJCX0KIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKIAkJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJCQl0eF93b3JrKys7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoZmxhZ3MgJiBOVl9UWDJfTEFTVFBBQ0tFVCkgewpAQCAtMjQxNSw2ICsyNDU1LDcgQEAKIAkJCQl9CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQkJbnAtPmdldF90eF9jdHgtPnNrYiA9IE5VTEw7CisJCQkJdHhfd29yaysrOwogCQkJfQogCQl9CiAJCWlmICh1bmxpa2VseShucC0+Z2V0X3R4Lm9yaWcrKyA9PSBucC0+bGFzdF90eC5vcmlnKSkKQEAgLTI0MjYsMTcgKzI0NjcsMTkgQEAKIAkJbnAtPnR4X3N0b3AgPSAwOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQorCXJldHVybiB0eF93b3JrOwogfQogCi1zdGF0aWMgdm9pZCBudl90eF9kb25lX29wdGltaXplZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCitzdGF0aWMgaW50IG52X3R4X2RvbmVfb3B0aW1pemVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBmbGFnczsKKwlpbnQgdHhfd29yayA9IDA7CiAJc3RydWN0IHJpbmdfZGVzY19leCogb3JpZ19nZXRfdHggPSBucC0+Z2V0X3R4LmV4OwogCiAJd2hpbGUgKChucC0+Z2V0X3R4LmV4ICE9IG5wLT5wdXRfdHguZXgpICYmCiAJICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5leC0+ZmxhZ2xlbikpICYgTlZfVFhfVkFMSUQpICYmCi0JICAgICAgIChsaW1pdC0tID4gMCkpIHsKKwkgICAgICAgKHR4X3dvcmsgPCBsaW1pdCkpIHsKIAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lX29wdGltaXplZDogZmxhZ3MgMHgleC5cbiIsCiAJCQkJCWRldi0+bmFtZSwgZmxhZ3MpOwpAQCAtMjQ2MCw2ICsyNTAzLDcgQEAKIAogCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJCXR4X3dvcmsrKzsKIAogCQkJaWYgKG5wLT50eF9saW1pdCkgewogCQkJCW52X3R4X2ZsaXBfb3duZXJzaGlwKGRldik7CkBAIC0yNDc0LDYgKzI1MTgsNyBAQAogCQlucC0+dHhfc3RvcCA9IDA7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CisJcmV0dXJuIHR4X3dvcms7CiB9CiAKIC8qCkBAIC0yNTQ2LDcgKzI1OTEsNyBAQAogCiAJLyogMikgY2hlY2sgdGhhdCB0aGUgcGFja2V0cyB3ZXJlIG5vdCBzZW50IGFscmVhZHk6ICovCiAJaWYgKCFudl9vcHRpbWl6ZWQobnApKQotCQludl90eF9kb25lKGRldik7CisJCW52X3R4X2RvbmUoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKIAllbHNlCiAJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CiAKQEAgLTI5MDcsNiArMjk1Miw3IEBACiAJCSAqIENoYW5naW5nIHRoZSBNVFUgaXMgYSByYXJlIGV2ZW50LCBpdCBzaG91bGRuJ3QgbWF0dGVyLgogCQkgKi8KIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtMjkzNSw2ICsyOTgxLDcgQEAKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzc1LDUwICszNDIyLDcxIEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIGludCBudl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRvdGFsX3dvcmspCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDKSB7CisJCWlmICh0b3RhbF93b3JrID4gTlZfRFlOQU1JQ19USFJFU0hPTEQpIHsKKwkJCS8qIHRyYW5zaXRpb24gdG8gcG9sbCBiYXNlZCBpbnRlcnJ1cHRzICovCisJCQlucC0+cXVpZXRfY291bnQgPSAwOworCQkJaWYgKG5wLT5pcnFtYXNrICE9IE5WUkVHX0lSUU1BU0tfQ1BVKSB7CisJCQkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX0NQVTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChucC0+cXVpZXRfY291bnQgPCBOVl9EWU5BTUlDX01BWF9RVUlFVF9DT1VOVCkgeworCQkJCW5wLT5xdWlldF9jb3VudCsrOworCQkJfSBlbHNlIHsKKwkJCQkvKiByZWFjaGVkIGEgcGVyaW9kIG9mIGxvdyBhY3Rpdml0eSwgc3dpdGNoCisJCQkJICAgdG8gcGVyIHR4L3J4IHBhY2tldCBpbnRlcnJ1cHRzICovCisJCQkJaWYgKG5wLT5pcnFtYXNrICE9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVCkgeworCQkJCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycShpbnQgZm9vLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JdTMyIGV2ZW50czsKLQlpbnQgaTsKKyNpZm5kZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJaW50IHRvdGFsX3dvcmsgPSAwOworCWludCBsb29wX2NvdW50ID0gMDsKKyNlbmRpZgogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycVxuIiwgZGV2LT5uYW1lKTsKIAotCWZvciAoaT0wOyA7IGkrKykgewotCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKLQkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOwotCQl9IGVsc2UgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKLQkJfQotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKLQkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQotCQkJYnJlYWs7CisJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwl9IGVsc2UgeworCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwl9CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIG5wLT5ldmVudHMpOworCWlmICghKG5wLT5ldmVudHMgJiBucC0+aXJxbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKIAotCQludl9tc2lfd29ya2Fyb3VuZChucCk7Ci0KLQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCW52X3R4X2RvbmUoZGV2KTsKLQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwludl9tc2lfd29ya2Fyb3VuZChucCk7CiAKICNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAKLQkJCS8qIERpc2FibGUgZnVydGh1ciByZWNlaXZlIGlycSdzICovCi0JCQlucC0+aXJxbWFzayAmPSB+TlZSRUdfSVJRX1JYX0FMTDsKKwkvKiBEaXNhYmxlIGZ1cnRodXIgaXJxJ3MKKwkgICAobXNpeCBub3QgZW5hYmxlZCB3aXRoIG5hcGkpICovCisJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCi0JCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCi0JCQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQl9CiAjZWxzZQotCQlpZiAobnZfcnhfcHJvY2VzcyhkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSB7CisJZG8KKwl7CisJCWludCB3b3JrID0gMDsKKwkJaWYgKCh3b3JrID0gbnZfcnhfcHJvY2VzcyhkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSkgewogCQkJaWYgKHVubGlrZWx5KG52X2FsbG9jX3J4KGRldikpKSB7CiAJCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCkBAIC0zNDI2LDY1ICszNDk0LDU2IEBACiAJCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJCX0KIAkJfQotI2VuZGlmCi0JCWlmICh1bmxpa2VseShldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbnZfbGlua19pcnEoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl9saW5rY2hhbmdlKGRldik7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVFhfRVJSKSkpIHsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9VTktOT1dOKSkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggdW5rbm93biBldmVudHMgMHgleC4gUGxlYXNlIHJlcG9ydFxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlwY2lfcHVzaChiYXNlKTsKIAotCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKLQkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7Ci0JCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOwotCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQl3b3JrICs9IG52X3R4X2RvbmUoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKworCQlpZiAoIXdvcmspCiAJCQlicmVhazsKLQkJfQotCQlpZiAodW5saWtlbHkoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXBjaV9wdXNoKGJhc2UpOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gbWFueSBpdGVyYXRpb25zICglZCkgaW4gbnZfbmljX2lycS5cbiIsIGRldi0+bmFtZSwgaSk7Ci0JCQlicmVhazsKLQkJfQorCQl0b3RhbF93b3JrICs9IHdvcms7CiAKKwkJbG9vcF9jb3VudCsrOwogCX0KKwl3aGlsZSAobG9vcF9jb3VudCA8IG1heF9pbnRlcnJ1cHRfd29yayk7CisKKwlpZiAobnZfY2hhbmdlX2ludGVycnVwdF9tb2RlKGRldiwgdG90YWxfd29yaykpIHsKKwkJLyogc2V0dXAgbmV3IGlycSBtYXNrICovCisJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJfQorCisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCW52X2xpbmtfaXJxKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJfQorCWlmICh1bmxpa2VseShucC0+bmVlZF9saW5rdGltZXIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBucC0+bGlua190aW1lb3V0KSkpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCW52X2xpbmtjaGFuZ2UoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7CisJfQorCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLworCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCisJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCWVsc2UKKwkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCXBjaV9wdXNoKGJhc2UpOworCisJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7CisJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwl9CisjZW5kaWYKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxIGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKIAotCXJldHVybiBJUlFfUkVUVkFMKGkpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCkBAIC0zNDk3LDQ1ICszNTU2LDM4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQl1MzIgZXZlbnRzOwotCWludCBpOworI2lmbmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwlpbnQgdG90YWxfd29yayA9IDA7CisJaW50IGxvb3BfY291bnQgPSAwOworI2VuZGlmCiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX29wdGltaXplZFxuIiwgZGV2LT5uYW1lKTsKIAotCWZvciAoaT0wOyA7IGkrKykgewotCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKLQkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOwotCQl9IGVsc2UgewotCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKLQkJfQotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKLQkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQotCQkJYnJlYWs7CisJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CisJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwl9IGVsc2UgeworCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwl9CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIG5wLT5ldmVudHMpOworCWlmICghKG5wLT5ldmVudHMgJiBucC0+aXJxbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKIAotCQludl9tc2lfd29ya2Fyb3VuZChucCk7Ci0KLQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgVFhfV09SS19QRVJfTE9PUCk7Ci0JCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJbnZfbXNpX3dvcmthcm91bmQobnApOwogCiAjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JCWlmIChldmVudHMgJiBOVlJFR19JUlFfUlhfQUxMKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCi0JCQkvKiBEaXNhYmxlIGZ1cnRodXIgcmVjZWl2ZSBpcnEncyAqLwotCQkJbnAtPmlycW1hc2sgJj0gfk5WUkVHX0lSUV9SWF9BTEw7CisJLyogRGlzYWJsZSBmdXJ0aHVyIGlycSdzCisJICAgKG1zaXggbm90IGVuYWJsZWQgd2l0aCBuYXBpKSAqLworCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKIAotCQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQotCQkJCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJfQogI2Vsc2UKLQkJaWYgKG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkKGRldiwgUlhfV09SS19QRVJfTE9PUCkpIHsKKwlkbworCXsKKwkJaW50IHdvcmsgPSAwOworCQlpZiAoKHdvcmsgPSBudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSkgewogCQkJaWYgKHVubGlrZWx5KG52X2FsbG9jX3J4X29wdGltaXplZChkZXYpKSkgewogCQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJCWlmICghbnAtPmluX3NodXRkb3duKQpAQCAtMzU0Myw2NiArMzU5NSw1NyBAQAogCQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCQl9CiAJCX0KLSNlbmRpZgotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X2xpbmtfaXJxKGRldik7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQl9Ci0JCWlmICh1bmxpa2VseShucC0+bmVlZF9saW5rdGltZXIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBucC0+bGlua190aW1lb3V0KSkpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbnZfbGlua2NoYW5nZShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1RYX0VSUikpKSB7Ci0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCBldmVudHMgMHgleC4gUHJvYmFibHkgVFggZmFpbC5cbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVU5LTk9XTikpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIHVua25vd24gZXZlbnRzIDB4JXguIFBsZWFzZSByZXBvcnRcbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJcGNpX3B1c2goYmFzZSk7CiAKLQkJCWlmICghbnAtPmluX3NodXRkb3duKSB7Ci0JCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOwotCQkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKLQkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJd29yayArPSBudl90eF9kb25lX29wdGltaXplZChkZXYsIFRYX1dPUktfUEVSX0xPT1ApOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCisJCWlmICghd29yaykKIAkJCWJyZWFrOwotCQl9CiAKLQkJaWYgKHVubGlrZWx5KGkgPiBtYXhfaW50ZXJydXB0X3dvcmspKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlwY2lfcHVzaChiYXNlKTsKKwkJdG90YWxfd29yayArPSB3b3JrOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gbWFueSBpdGVyYXRpb25zICglZCkgaW4gbnZfbmljX2lycS5cbiIsIGRldi0+bmFtZSwgaSk7Ci0JCQlicmVhazsKLQkJfQotCisJCWxvb3BfY291bnQrKzsKIAl9CisJd2hpbGUgKGxvb3BfY291bnQgPCBtYXhfaW50ZXJydXB0X3dvcmspOworCisJaWYgKG52X2NoYW5nZV9pbnRlcnJ1cHRfbW9kZShkZXYsIHRvdGFsX3dvcmspKSB7CisJCS8qIHNldHVwIG5ldyBpcnEgbWFzayAqLworCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCX0KKworCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl9saW5rX2lycShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCX0KKwlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl9saW5rY2hhbmdlKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOworCX0KKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KKwkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQorCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQllbHNlCisJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQlwY2lfcHVzaChiYXNlKTsKKworCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgeworCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOworCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOworCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOworCQl9CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJfQorCisjZW5kaWYKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX29wdGltaXplZCBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7CiAKLQlyZXR1cm4gSVJRX1JFVFZBTChpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3R4KGludCBmb28sIHZvaWQgKmRhdGEpCkBAIC0zNjI3LDEwICszNjcwLDYgQEAKIAkJbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSkgewotCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2JhYmx5IFRYIGZhaWwuXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9CiAJCWlmICh1bmxpa2VseShpID4gbWF4X2ludGVycnVwdF93b3JrKSkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwpAQCAtMzY1OSwxMyArMzY5OCwyMiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBucC0+ZGV2OwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcGt0cywgcmV0Y29kZTsKKwlpbnQgcmV0Y29kZTsKKwlpbnQgdHhfd29yaywgcnhfd29yazsKIAogCWlmICghbnZfb3B0aW1pemVkKG5wKSkgewotCQlwa3RzID0gbnZfcnhfcHJvY2VzcyhkZXYsIGJ1ZGdldCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOworCQl0eF93b3JrID0gbnZfdHhfZG9uZShkZXYsIG5wLT50eF9yaW5nX3NpemUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCisJCXJ4X3dvcmsgPSBudl9yeF9wcm9jZXNzKGRldiwgYnVkZ2V0KTsKIAkJcmV0Y29kZSA9IG52X2FsbG9jX3J4KGRldik7CiAJfSBlbHNlIHsKLQkJcGt0cyA9IG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkKGRldiwgYnVkZ2V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCXR4X3dvcmsgPSBudl90eF9kb25lX29wdGltaXplZChkZXYsIG5wLT50eF9yaW5nX3NpemUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCisJCXJ4X3dvcmsgPSBudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIGJ1ZGdldCk7CiAJCXJldGNvZGUgPSBudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KTsKIAl9CiAKQEAgLTM2NzYsNDQgKzM3MjQsNDIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlpZiAocGt0cyA8IGJ1ZGdldCkgewotCQkvKiByZS1lbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzICovCisJbnZfY2hhbmdlX2ludGVycnVwdF9tb2RlKGRldiwgdHhfd29yayArIHJ4X3dvcmspOworCisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfTElOSykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7Ci0KLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQotCQlucC0+aXJxbWFzayB8PSBOVlJFR19JUlFfUlhfQUxMOwotCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCi0JCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCWVsc2UKLQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0KKwkJbnZfbGlua19pcnEoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JcmV0dXJuIHBrdHM7CisJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJbnZfbGlua2NoYW5nZShkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7CisJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOworCQlyZXR1cm4gcnhfd29yazsKKwl9CisKKwlpZiAocnhfd29yayA8IGJ1ZGdldCkgeworCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cworCQkgICAobXNpeCBub3QgZW5hYmxlZCBpbiBuYXBpKSAqLworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CisKKwkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9CisJcmV0dXJuIHJ4X3dvcms7CiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfcngoaW50IGZvbywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCXUzMiBldmVudHM7Ci0KLQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUV9SWF9BTEw7Ci0Jd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCi0JaWYgKGV2ZW50cykgewotCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOwotCQkvKiBkaXNhYmxlIHJlY2VpdmUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJcGNpX3B1c2goYmFzZSk7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLSNlbHNlCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9yeChpbnQgZm9vLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKQEAgLTM3NjAsNyArMzgwNiw2IEBACiAKIAlyZXR1cm4gSVJRX1JFVFZBTChpKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vdGhlcihpbnQgZm9vLCB2b2lkICpkYXRhKQogewpAQCAtMzgxMCwxMCArMzg1NSw2IEBACiAJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIHVua25vd24gZXZlbnRzIDB4JXguIFBsZWFzZSByZXBvcnRcbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KIAkJaWYgKHVubGlrZWx5KGkgPiBtYXhfaW50ZXJydXB0X3dvcmspKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCkBAIC0zOTE4LDIxICszOTU5LDI3IEBACiAJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0VOQUJMRUQ7CiAJCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCAmJiAhaW50cl90ZXN0KSB7CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXNwcmludGYobnAtPm5hbWVfcngsICIlcy1yeCIsIGRldi0+bmFtZSk7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwKKwkJCQkJCSZudl9uaWNfaXJxX3J4LCBJUlFGX1NIQVJFRCwgbnAtPm5hbWVfcngsIGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwogCQkJCQlnb3RvIG91dF9lcnI7CiAJCQkJfQogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9uaWNfaXJxX3R4LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQlzcHJpbnRmKG5wLT5uYW1lX3R4LCAiJXMtdHgiLCBkZXYtPm5hbWUpOworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsCisJCQkJCQkmbnZfbmljX2lycV90eCwgSVJRRl9TSEFSRUQsIG5wLT5uYW1lX3R4LCBkZXYpICE9IDApIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4ICVkXG4iLCByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKIAkJCQkJZ290byBvdXRfZnJlZV9yeDsKIAkJCQl9CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXNwcmludGYobnAtPm5hbWVfb3RoZXIsICIlcy1vdGhlciIsIGRldi0+bmFtZSk7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwKKwkJCQkJCSZudl9uaWNfaXJxX290aGVyLCBJUlFGX1NIQVJFRCwgbnAtPm5hbWVfb3RoZXIsIGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CkBAIC00MDQ2LDE5ICs0MDkzLDE5IEBACiAJCQltYXNrIHw9IE5WUkVHX0lSUV9PVEhFUjsKIAkJfQogCX0KLQlucC0+bmljX3BvbGxfaXJxID0gMDsKLQogCS8qIGRpc2FibGVfaXJxKCkgY29udGFpbnMgc3luY2hyb25pemVfaXJxLCB0aHVzIG5vIGlycSBoYW5kbGVyIGNhbiBydW4gbm93ICovCiAKIAlpZiAobnAtPnJlY292ZXJfZXJyb3IpIHsKIAkJbnAtPnJlY292ZXJfZXJyb3IgPSAwOwotCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IE1BQyBpbiByZWNvdmVyYWJsZSBlcnJvciBzdGF0ZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNQUMgaW4gcmVjb3ZlcmFibGUgZXJyb3Igc3RhdGVcbiIsIGRldi0+bmFtZSk7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkvKiBzdG9wIGVuZ2luZXMgKi8KIAkJCW52X3N0b3Bfcnh0eChkZXYpOworCQkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUE9XRVJfQ05UUkwpCisJCQkJbnZfbWFjX3Jlc2V0KGRldik7CiAJCQludl90eHJ4X3Jlc2V0KGRldik7CiAJCQkvKiBkcmFpbiByeCBxdWV1ZSAqLwogCQkJbnZfZHJhaW5fcnh0eChkZXYpOwpAQCAtNDA3Niw2ICs0MTIzLDExIEBACiAJCQlwY2lfcHVzaChiYXNlKTsKIAkJCXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CiAJCQlwY2lfcHVzaChiYXNlKTsKKwkJCS8qIGNsZWFyIGludGVycnVwdHMgKi8KKwkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKKwkJCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQkJZWxzZQorCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwogCiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwogCQkJbnZfc3RhcnRfcnh0eChkZXYpOwpAQCAtNDA4NSwxMSArNDEzNywxMSBAQAogCQl9CiAJfQogCi0KIAl3cml0ZWwobWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CiAJcGNpX3B1c2goYmFzZSk7CiAKIAlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgeworCQlucC0+bmljX3BvbGxfaXJxID0gMDsKIAkJaWYgKG52X29wdGltaXplZChucCkpCiAJCQludl9uaWNfaXJxX29wdGltaXplZCgwLCBkZXYpOwogCQllbHNlCkBAIC00MTAwLDE4ICs0MTUyLDIyIEBACiAJCQllbmFibGVfaXJxX2xvY2tkZXAobnAtPnBjaV9kZXYtPmlycSk7CiAJfSBlbHNlIHsKIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfUlhfQUxMKSB7CisJCQlucC0+bmljX3BvbGxfaXJxICY9IH5OVlJFR19JUlFfUlhfQUxMOwogCQkJbnZfbmljX2lycV9yeCgwLCBkZXYpOwogCQkJZW5hYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CiAJCX0KIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfVFhfQUxMKSB7CisJCQlucC0+bmljX3BvbGxfaXJxICY9IH5OVlJFR19JUlFfVFhfQUxMOwogCQkJbnZfbmljX2lycV90eCgwLCBkZXYpOwogCQkJZW5hYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CiAJCX0KIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfT1RIRVIpIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgJj0gfk5WUkVHX0lSUV9PVEhFUjsKIAkJCW52X25pY19pcnFfb3RoZXIoMCwgZGV2KTsKIAkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IpOwogCQl9CiAJfQorCiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtNDU2MCw2ICs0NjE2LDcgQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtNDYxMiw2ICs0NjY5LDcgQEAKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NzM4LDcgKzQ3OTYsNyBAQAogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkKLQkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0oZGV2LCBkYXRhKTsKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKIAllbHNlCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTQ3NjQsMTIgKzQ4MjIsMTIgQEAKIAkJZWxzZQogCQkJcmV0dXJuIE5WX1RFU1RfQ09VTlRfQkFTRTsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMSkKLQkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WMV9DT1VOVDsKKwkJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMykKKwkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WM19DT1VOVDsKIAkJZWxzZSBpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTX1YyKQogCQkJcmV0dXJuIE5WX0RFVl9TVEFUSVNUSUNTX1YyX0NPVU5UOwotCQllbHNlIGlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1NfVjMpCi0JCQlyZXR1cm4gTlZfREVWX1NUQVRJU1RJQ1NfVjNfQ09VTlQ7CisJCWVsc2UgaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMSkKKwkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WMV9DT1VOVDsKIAkJZWxzZQogCQkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKQEAgLTUwMzgsOSArNTA5Niw3IEBACiAJaWYgKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgewogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0jaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JCQluYXBpX2Rpc2FibGUoJm5wLT5uYXBpKTsKLSNlbmRpZgorCQkJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTUwOTgsOSArNTE1NCw3IEBACiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwogCQkJbnZfc3RhcnRfcnh0eChkZXYpOwogCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQkJCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwkJCW52X25hcGlfZW5hYmxlKGRldik7CiAJCQludl9lbmFibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKIAkJfQogCX0KQEAgLTUxNjksNiArNTIyMyw3IEBACiAvKiBUaGUgbWdtdCB1bml0IGFuZCBkcml2ZXIgdXNlIGEgc2VtYXBob3JlIHRvIGFjY2VzcyB0aGUgcGh5IGR1cmluZyBpbml0ICovCiBzdGF0aWMgaW50IG52X21nbXRfYWNxdWlyZV9zZW1hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCWludCBpOwogCXUzMiB0eF9jdHJsLCBtZ210X3NlbWE7CkBAIC01MTkxLDggKzUyNDYsMTAgQEAKIAkJLyogdmVyaWZ5IHRoYXQgc2VtYXBob3JlIHdhcyBhY3F1aXJlZCAqLwogCQl0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKIAkJaWYgKCgodHhfY3RybCAmIE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX01BU0spID09IE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX0FDUSkgJiYKLQkJICAgICgodHhfY3RybCAmIE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX01BU0spID09IE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX0ZSRUUpKQorCQkgICAgKCh0eF9jdHJsICYgTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfTUFTSykgPT0gTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfRlJFRSkpIHsKKwkJCW5wLT5tZ210X3NlbWEgPSAxOwogCQkJcmV0dXJuIDE7CisJCX0KIAkJZWxzZQogCQkJdWRlbGF5KDUwKTsKIAl9CkBAIC01MjAwLDYgKzUyNTcsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbnZfbWdtdF9yZWxlYXNlX3NlbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHR4X2N0cmw7CisKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKKwkJaWYgKG5wLT5tZ210X3NlbWEpIHsKKwkJCXR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCQkJdHhfY3RybCAmPSB+TlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfQUNROworCQkJd3JpdGVsKHR4X2N0cmwsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJCX0KKwl9Cit9CisKKworc3RhdGljIGludCBudl9tZ210X2dldF92ZXJzaW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiBkYXRhX3JlYWR5ID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwl1MzIgZGF0YV9yZWFkeTIgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IHJlYWR5ID0gMDsKKworCXdyaXRlbChOVlJFR19NR01UVU5JVEdFVFZFUlNJT04sIGJhc2UgKyBOdlJlZ01nbXRVbml0R2V0VmVyc2lvbik7CisJd3JpdGVsKGRhdGFfcmVhZHkgXiBOVlJFR19YTUlUQ1RMX0RBVEFfU1RBUlQsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJc3RhcnQgPSBqaWZmaWVzOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdGFydCArIDUqSFopKSB7CisJCWRhdGFfcmVhZHkyID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwkJaWYgKChkYXRhX3JlYWR5ICYgTlZSRUdfWE1JVENUTF9EQVRBX1JFQURZKSAhPSAoZGF0YV9yZWFkeTIgJiBOVlJFR19YTUlUQ1RMX0RBVEFfUkVBRFkpKSB7CisJCQlyZWFkeSA9IDE7CisJCQlicmVhazsKKwkJfQorCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwl9CisKKwlpZiAoIXJlYWR5IHx8IChkYXRhX3JlYWR5MiAmIE5WUkVHX1hNSVRDVExfREFUQV9FUlJPUikpCisJCXJldHVybiAwOworCisJbnAtPm1nbXRfdmVyc2lvbiA9IHJlYWRsKGJhc2UgKyBOdlJlZ01nbXRVbml0VmVyc2lvbikgJiBOVlJFR19NR01UVU5JVFZFUlNJT047CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBudl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTUzNDQsOSArNTQ0Niw3IEBACiAJcmV0ID0gbnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpOwogCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCW5hcGlfZW5hYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwludl9uYXBpX2VuYWJsZShkZXYpOwogCiAJaWYgKHJldCkgewogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC01Mzc4LDkgKzU0NzgsNyBAQAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAlucC0+aW5fc2h1dGRvd24gPSAxOwogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCW5hcGlfZGlzYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCisJbnZfbmFwaV9kaXNhYmxlKGRldik7CiAJc3luY2hyb25pemVfaXJxKG5wLT5wY2lfZGV2LT5pcnEpOwogCiAJZGVsX3RpbWVyX3N5bmMoJm5wLT5vb21fa2ljayk7CkBAIC01NTcxLDE0ICs1NjY5LDYgQEAKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fVFg7CiAJfQogCi0JbnAtPm1zaV9mbGFncyA9IDA7Ci0JaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSSkgJiYgbXNpKSB7Ci0JCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0NBUEFCTEU7Ci0JfQotCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0lfWCkgJiYgbXNpeCkgewotCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0NBUEFCTEU7Ci0JfQotCiAJbnAtPnBhdXNlX2ZsYWdzID0gTlZfUEFVU0VGUkFNRV9SWF9DQVBBQkxFIHwgTlZfUEFVU0VGUkFNRV9SWF9SRVEgfCBOVl9QQVVTRUZSQU1FX0FVVE9ORUc7CiAJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjEpIHx8CiAJICAgIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjIpIHx8CkBAIC01NzIzLDE0ICs1ODEzLDM1IEBACiAJfSBlbHNlIHsKIAkJbnAtPnR4X2ZsYWdzID0gTlZfVFgyX1ZBTElEOwogCX0KLQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkgewotCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSAvKiBzZXQgbnVtYmVyIG9mIHZlY3RvcnMgKi8KLQkJCW5wLT5tc2lfZmxhZ3MgfD0gMHgwMDAzOwotCX0gZWxzZSB7CisKKwlucC0+bXNpX2ZsYWdzID0gMDsKKwlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiBtc2kpIHsKKwkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfQ0FQQUJMRTsKKwl9CisJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSV9YKSAmJiBtc2l4KSB7CisJCS8qIG1zaXggaGFzIGhhZCByZXBvcnRlZCBpc3N1ZXMgd2hlbiBtb2RpZnlpbmcgaXJxbWFzaworCQkgICBhcyBpbiB0aGUgY2FzZSBvZiBuYXBpLCB0aGVyZWZvcmUsIGRpc2FibGUgZm9yIG5vdworCQkqLworI2lmbmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9DQVBBQkxFOworI2VuZGlmCisJfQorCisJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX0NQVSkgewogCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfQ1BVOwogCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLwogCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDE7CisJfSBlbHNlIGlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDICYmCisJCSAgICEoaWQtPmRyaXZlcl9kYXRhICYgREVWX05FRURfVElNRVJJUlEpKSB7CisJCS8qIHN0YXJ0IG9mZiBpbiB0aHJvdWdocHV0IG1vZGUgKi8KKwkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7CisJCS8qIHJlbW92ZSBzdXBwb3J0IGZvciBtc2l4IG1vZGUgKi8KKwkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfQ0FQQUJMRTsKKwl9IGVsc2UgeworCQlvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQ7CisJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLworCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDM7CiAJfQogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRKQpAQCAtNTc3MSwxOSArNTg4MiwyNiBAQAogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTUdNVF9VTklUKSB7CiAJCS8qIG1hbmFnZW1lbnQgdW5pdCBydW5uaW5nIG9uIHRoZSBtYWM/ICovCi0JCWlmIChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUKSB7Ci0JCQlucC0+bWFjX2luX3VzZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX01HTVRfU1Q7Ci0JCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG1nbXQgdW5pdCBpcyBydW5uaW5nLiBtYWMgaW4gdXNlICV4LlxuIiwgcGNpX25hbWUocGNpX2RldiksIG5wLT5tYWNfaW5fdXNlKTsKLQkJCWlmIChudl9tZ210X2FjcXVpcmVfc2VtYShkZXYpKSB7Ci0JCQkJLyogbWFuYWdlbWVudCB1bml0IHNldHVwIHRoZSBwaHkgYWxyZWFkeT8gKi8KLQkJCQlpZiAoKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSykgPT0KLQkJCQkgICAgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUKSB7Ci0JCQkJCS8qIHBoeSBpcyBpbml0ZWQgYnkgbWdtdCB1bml0ICovCi0JCQkJCXBoeWluaXRpYWxpemVkID0gMTsKLQkJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBQaHkgYWxyZWFkeSBpbml0aWFsaXplZCBieSBtZ210IHVuaXQuXG4iLCBwY2lfbmFtZShwY2lfZGV2KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogd2UgbmVlZCB0byBpbml0IHRoZSBwaHkgKi8KLQkJCQl9CisJCWlmICgocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfTUdNVF9TVCkgJiYKKwkJICAgIChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUKSAmJgorCQkgICAgbnZfbWdtdF9hY3F1aXJlX3NlbWEoZGV2KSAmJgorCQkgICAgbnZfbWdtdF9nZXRfdmVyc2lvbihkZXYpKSB7CisJCQlucC0+bWFjX2luX3VzZSA9IDE7CisJCQlpZiAobnAtPm1nbXRfdmVyc2lvbiA+IDApIHsKKwkJCQlucC0+bWFjX2luX3VzZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ01nbXRVbml0Q29udHJvbCkgJiBOVlJFR19NR01UVU5JVENPTlRST0xfSU5VU0U7CisJCQl9CisJCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG1nbXQgdW5pdCBpcyBydW5uaW5nLiBtYWMgaW4gdXNlICV4LlxuIiwKKwkJCQlwY2lfbmFtZShwY2lfZGV2KSwgbnAtPm1hY19pbl91c2UpOworCQkJLyogbWFuYWdlbWVudCB1bml0IHNldHVwIHRoZSBwaHkgYWxyZWFkeT8gKi8KKwkJCWlmIChucC0+bWFjX2luX3VzZSAmJgorCQkJICAgICgocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19NQVNLKSA9PQorCQkJICAgICBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpKSB7CisJCQkJLyogcGh5IGlzIGluaXRlZCBieSBtZ210IHVuaXQgKi8KKwkJCQlwaHlpbml0aWFsaXplZCA9IDE7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBQaHkgYWxyZWFkeSBpbml0aWFsaXplZCBieSBtZ210IHVuaXQuXG4iLAorCQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCiAJCQl9CiAJCX0KIAl9CkBAIC01OTQ1LDYgKzYwNjMsOCBAQAogCS8qIHJlc3RvcmUgYW55IHBoeSByZWxhdGVkIGNoYW5nZXMgKi8KIAludl9yZXN0b3JlX3BoeShkZXYpOwogCisJbnZfbWdtdF9yZWxlYXNlX3NlbWEoZGV2KTsKKwogCS8qIGZyZWUgYWxsIHN0cnVjdHVyZXMgKi8KIAlmcmVlX3JpbmdzKGRldik7CiAJaW91bm1hcChnZXRfaHdiYXNlKGRldikpOwpAQCAtNTk5NSw2ICs2MTE1LDggQEAKIAlmb3IgKGkgPSAwO2kgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKIAkJd3JpdGVsKG5wLT5zYXZlZF9jb25maWdfc3BhY2VbaV0sIGJhc2UraSpzaXplb2YodTMyKSk7CiAKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIE5WX01TSV9QUklWX09GRlNFVCwgTlZfTVNJX1BSSVZfVkFMVUUpOworCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcmMgPSBudl9vcGVuKGRldik7CkBAIC02MDY4LDExNSArNjE5MCwxMTUgQEAKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQMDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzExKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A1MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjYpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI4KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMxKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2KSwKQEAgLTYxODQsMTUgKzYzMDYsMTUgQEAKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXswLH0sCiB9OwpAQCAtNjIyMCw3ICs2MzQyLDcgQEAKIG1vZHVsZV9wYXJhbShtYXhfaW50ZXJydXB0X3dvcmssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywgImZvcmNlZGV0aCBtYXhpbXVtIGV2ZW50cyBoYW5kbGVkIHBlciBpbnRlcnJ1cHQiKTsKIG1vZHVsZV9wYXJhbShvcHRpbWl6YXRpb25fbW9kZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mob3B0aW1pemF0aW9uX21vZGUsICJJbiB0aHJvdWdocHV0IG1vZGUgKDApLCBldmVyeSB0eCAmIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4gSW4gQ1BVIG1vZGUgKDEpLCBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiBJbiBkeW5hbWljIG1vZGUgKDIpLCB0aGUgbW9kZSB0b2dnbGVzIGJldHdlZW4gdGhyb3VnaHB1dCBhbmQgQ1BVIG1vZGUgYmFzZWQgb24gbmV0d29yayBsb2FkLiIpOwogbW9kdWxlX3BhcmFtKHBvbGxfaW50ZXJ2YWwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1lciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7CiBtb2R1bGVfcGFyYW0obXNpLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggY2U5MDBlNS4uYjAzN2NlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKIAkJLyogZG9uZSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJKCpmZXAtPm9wcy0+bmFwaV9lbmFibGVfcngpKGRldik7CiAJfQogCXJldHVybiByZWNlaXZlZDsKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQkJCS8qIE5PVEU6IGl0IGlzIHBvc3NpYmxlIGZvciBGQ0NzIGluIE5BUEkgbW9kZSAgICAqLwogCQkJCS8qIHRvIHN1Ym1pdCBhIHNwdXJpb3VzIGludGVycnVwdCB3aGlsZSBpbiBwb2xsICAqLwogCQkJCWlmIChuYXBpX29rKQotCQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZmZXAtPm5hcGkpOworCQkJCQlfX25hcGlfc2NoZWR1bGUoJmZlcC0+bmFwaSk7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwNzlhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiBGcmVlc2NhbGUgUG93ZXJRVUlDQyBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJTSBidXMgaW1wbGVtZW50YXRpb24KKyAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSU0gcmVncworICoKKyAqIEF1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBnaWFuZmFyX21paS5jIGFuZCB1Y2NfZ2V0aF9taWkuYyAoTGkgWWFuZywgS2ltIFBoaWxsaXBzKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91Y2MuaD4KKworI2luY2x1ZGUgImdpYW5mYXIuaCIKKyNpbmNsdWRlICJmc2xfcHFfbWRpby5oIgorCisvKgorICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAorICogb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisgKiBnZW5lcmljIG1kaW8gYnVzICh0aWVkIHRvIGEgc2luZ2xlIGludGVyZmFjZSksIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzCisgKiBkb25lIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKKyAqIHRoZSBUQkkgd2hpY2ggY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUyBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvCisgKiB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IKKyAqIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZXhhbXBsZS4KKyAqLworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAorCQlpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byB3cml0ZSAqLworCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKKworCS8qIFdyaXRlIG91dCB0aGUgdmFsdWUgd2Ugd2FudCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7CisKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCisJd2hpbGUgKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCisgKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZIG9wZXJhdGlvbgorICogZG9uZSBvbiB0aGUgYnVzIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBpbnRlcmZhY2UsCisgKiB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGdlbmVyaWMgbWRpbyBidXMKKyAqIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKKyAqIHRoZSBUQkkgd2hpY2gsIGluIHR1cm4sIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMKKyAqIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8gdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUKKyAqIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGVnLgorICovCitpbnQgZnNsX3BxX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywKKwkJaW50IG1paV9pZCwgaW50IHJlZ251bSkKK3sKKwl1MTYgdmFsdWU7CisKKwkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHJlYWQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7CisKKwkvKiBDbGVhciBtaWltY29tLCBhbmQgdGhlbiBpbml0aWF0ZSBhIHJlYWQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgMCk7CisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIE1JSV9SRUFEX0NPTU1BTkQpOworCisJLyogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCAqLworCXdoaWxlIChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSAmIChNSUlNSU5EX05PVFZBTElEIHwgTUlJTUlORF9CVVNZKSkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBHcmFiIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZnJvbSBtaWltc3RhdCAqLworCXZhbHVlID0gaW5fYmUzMigmcmVncy0+bWlpbXN0YXQpOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAorICogb24gdGhlIGJ1cywgd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgcmV0dXJuaW5nLgorICovCitpbnQgZnNsX3BxX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQoreworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKKworCS8qIFdyaXRlIHRvIHRoZSBsb2NhbCBNSUkgcmVncyAqLworCXJldHVybihmc2xfcHFfbG9jYWxfbWRpb193cml0ZShyZWdzLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAorICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LgorICovCitpbnQgZnNsX3BxX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoreworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKKworCS8qIFJlYWQgdGhlIGxvY2FsIE1JSSByZWdzICovCisJcmV0dXJuKGZzbF9wcV9sb2NhbF9tZGlvX3JlYWQocmVncywgbWlpX2lkLCByZWdudW0pKTsKK30KKworLyogUmVzZXQgdGhlIE1JSU0gcmVnaXN0ZXJzLCBhbmQgd2FpdCBmb3IgdGhlIGJ1cyB0byBmcmVlICovCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OworCWludCB0aW1lb3V0ID0gUEhZX0lOSVRfVElNRU9VVDsKKworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCS8qIFJlc2V0IHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX1JFU0VUKTsKKworCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX0lOSVRfVkFMVUUpOworCisJLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KKwl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pCisJCWNwdV9yZWxheCgpOworCisJbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7CisKKwlpZiAodGltZW91dCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLAorCQkJCWJ1cy0+bmFtZSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEFsbG9jYXRlIGFuIGFycmF5IHdoaWNoIHByb3ZpZGVzIGlycSAjcyBmb3IgZWFjaCBQSFkgb24gdGhlIGdpdmVuIGJ1cyAqLworc3RhdGljIGludCAqY3JlYXRlX2lycV9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQgKmlycXM7CisJaW50IGk7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IE5VTEw7CisKKwlpcnFzID0ga2NhbGxvYyhQSFlfTUFYX0FERFIsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaXJxcykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCWlycXNbaV0gPSBQSFlfUE9MTDsKKworCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7CisJCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7CisJCWNvbnN0IHUzMiAqaWQ7CisKKwkJaWYgKGlycSA9PSBOT19JUlEpCisJCQljb250aW51ZTsKKworCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOworCisJCWlmICghaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoKmlkIDwgUEhZX01BWF9BRERSICYmICppZCA+PSAwKQorCQkJaXJxc1sqaWRdID0gaXJxOworCQllbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIgorCQkJCQkiJWQgaXMgbm90IGEgdmFsaWQgUEhZIGFkZHJlc3NcbiIsCisJCQkJCW5wLT5mdWxsX25hbWUsICppZCk7CisJfQorCisJcmV0dXJuIGlycXM7Cit9CisKK3ZvaWQgZnNsX3BxX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwljb25zdCB1MzIgKmFkZHI7CisJdTY0IHRhZGRyID0gT0ZfQkFEX0FERFI7CisKKwlhZGRyID0gb2ZfZ2V0X2FkZHJlc3MobnAsIDAsIE5VTEwsIE5VTEwpOworCWlmIChhZGRyKQorCQl0YWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCBhZGRyKTsKKworCXNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCVsbHgiLCBucC0+bmFtZSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0YWRkcik7Cit9CisKKy8qIFNjYW4gdGhlIGJ1cyBpbiByZXZlcnNlLCBsb29raW5nIGZvciBhbiBlbXB0eSBzcG90ICovCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX2ZpbmRfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IFBIWV9NQVhfQUREUjsgaSA+IDA7IGktLSkgeworCQl1MzIgcGh5X2lkOworCisJCWlmIChnZXRfcGh5X2lkKG5ld19idXMsIGksICZwaHlfaWQpKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChwaHlfaWQgPT0gMHhmZmZmZmZmZikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBpOworfQorCisKKyNpZmRlZiBDT05GSUdfR0lBTkZBUgorc3RhdGljIHUzMiBfX2lvbWVtICpnZXRfZ2Zhcl90YmlwYShzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncykKK3sKKwlzdHJ1Y3QgZ2ZhciBfX2lvbWVtICplbmV0X3JlZ3M7CisKKwkvKgorCSAqIFRoaXMgaXMgbWlsZGx5IGV2aWwsIGJ1dCBzbyBpcyBvdXIgaGFyZHdhcmUgZm9yIGRvaW5nIHRoaXMuCisJICogQWxzbywgd2UgaGF2ZSB0byBjYXN0IGJhY2sgdG8gc3RydWN0IGdmYXIgYmVjYXVzZSBvZgorCSAqIGRlZmluaXRpb24gd2VpcmRuZXNzIGRvbmUgaW4gZ2lhbmZhci5oLgorCSAqLworCWVuZXRfcmVncyA9IChzdHJ1Y3QgZ2ZhciBfX2lvbWVtICopCisJCSgoY2hhciBfX2lvbWVtICopcmVncyAtIG9mZnNldG9mKHN0cnVjdCBnZmFyLCBnZmFyX21paV9yZWdzKSk7CisKKwlyZXR1cm4gJmVuZXRfcmVncy0+dGJpcGE7Cit9CisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX1VDQ19HRVRICitzdGF0aWMgaW50IGdldF91Y2NfaWRfZm9yX3JhbmdlKHU2NCBzdGFydCwgdTY0IGVuZCwgdTMyICp1Y2NfaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisJaW50IGVyciA9IDA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJ1Y2NfZ2V0aCIpIHsKKwkJc3RydWN0IHJlc291cmNlIHRlbXByZXM7CisKKwkJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnRlbXByZXMpOworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJLyogaWYgb3VyIG1kaW8gcmVncyBmYWxsIHdpdGhpbiB0aGlzIFVDQyByZWdzIHJhbmdlICovCisJCWlmICgoc3RhcnQgPj0gdGVtcHJlcy5zdGFydCkgJiYgKGVuZCA8PSB0ZW1wcmVzLmVuZCkpIHsKKwkJCS8qIEZpbmQgdGhlIGlkIG9mIHRoZSBVQ0MgKi8KKwkJCWNvbnN0IHUzMiAqaWQ7CisKKwkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOworCQkJaWYgKCFpZCkgeworCQkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCQkJaWYgKCFpZCkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCSp1Y2NfaWQgPSAqaWQ7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKKworc3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGJpOworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzOworCXUzMiBfX2lvbWVtICp0YmlwYTsKKwlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKKwlpbnQgdGJpYWRkciA9IC0xOworCXU2NCBhZGRyLCBzaXplOworCWludCBlcnIgPSAwOworCisJbmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAoTlVMTCA9PSBuZXdfYnVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld19idXMtPm5hbWUgPSAiRnJlZXNjYWxlIFBvd2VyUVVJQ0MgTUlJIEJ1cyIsCisJbmV3X2J1cy0+cmVhZCA9ICZmc2xfcHFfbWRpb19yZWFkLAorCW5ld19idXMtPndyaXRlID0gJmZzbF9wcV9tZGlvX3dyaXRlLAorCW5ld19idXMtPnJlc2V0ID0gJmZzbF9wcV9tZGlvX3Jlc2V0LAorCWZzbF9wcV9tZGlvX2J1c19uYW1lKG5ld19idXMtPmlkLCBucCk7CisKKwkvKiBTZXQgdGhlIFBIWSBiYXNlIGFkZHJlc3MgKi8KKwlhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIG9mX2dldF9hZGRyZXNzKG5wLCAwLCAmc2l6ZSwgTlVMTCkpOworCXJlZ3MgPSBpb3JlbWFwKGFkZHIsIHNpemUpOworCisJaWYgKE5VTEwgPT0gcmVncykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2J1czsKKwl9CisKKwluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7CisKKwluZXdfYnVzLT5pcnEgPSBjcmVhdGVfaXJxX21hcChucCk7CisKKwlpZiAoTlVMTCA9PSBuZXdfYnVzLT5pcnEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5tYXBfcmVnczsKKwl9CisKKwluZXdfYnVzLT5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIG5ld19idXMpOworCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItbWRpbyIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLXRiaSIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImdpYW5mYXIiKSkgeworI2lmZGVmIENPTkZJR19HSUFORkFSCisJCXRiaXBhID0gZ2V0X2dmYXJfdGJpcGEocmVncyk7CisjZWxzZQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisjZW5kaWYKKwl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLHVjYy1tZGlvIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAidWNjX2dldGhfcGh5IikpIHsKKyNpZmRlZiBDT05GSUdfVUNDX0dFVEgKKwkJdTMyIGlkOworCisJCXRiaXBhID0gJnJlZ3MtPnV0YmlwYXI7CisKKwkJaWYgKChlcnIgPSBnZXRfdWNjX2lkX2Zvcl9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgJmlkKSkpCisJCQlnb3RvIGVycl9mcmVlX2lycXM7CisKKwkJdWNjX3NldF9xZV9tdXhfbWlpX21uZyhpZCAtIDEpOworI2Vsc2UKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIHRiaSkgeworCQlpZiAoIXN0cm5jbXAodGJpLT50eXBlLCAidGJpLXBoeSIsIDgpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHRiaSkgeworCQljb25zdCB1MzIgKnByb3AgPSBvZl9nZXRfcHJvcGVydHkodGJpLCAicmVnIiwgTlVMTCk7CisKKwkJaWYgKHByb3ApCisJCQl0YmlhZGRyID0gKnByb3A7CisJfQorCisJaWYgKHRiaWFkZHIgPT0gLTEpIHsKKwkJb3V0X2JlMzIodGJpcGEsIDApOworCisJCXRiaWFkZHIgPSBmc2xfcHFfbWRpb19maW5kX2ZyZWUobmV3X2J1cyk7CisJfQorCisJLyoKKwkgKiBXZSBkZWZpbmUgVEJJUEEgYXQgMCB0byBiZSBpbGxlZ2FsLCBvcHRpbmcgdG8gZmFpbCBmb3IgYm9hcmRzIHRoYXQKKwkgKiBoYXZlIFBIWXMgYXQgMS0zMSwgcmF0aGVyIHRoYW4gY2hhbmdlIHRiaXBhIGFuZCByZXNjYW4uCisJICovCisJaWYgKHRiaWFkZHIgPT0gMCkgeworCQllcnIgPSAtRUJVU1k7CisKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCW91dF9iZTMyKHRiaXBhLCB0YmlhZGRyKTsKKworCS8qCisJICogVGhlIFRCSVBIWS1vbmx5IGJ1c2VzIHdpbGwgZmluZCBQSFlzIGF0IGV2ZXJ5IGFkZHJlc3MsCisJICogc28gd2UgbWFzayB0aGVtIGFsbCBidXQgdGhlIFRCSQorCSAqLworCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikpCisJCW5ld19idXMtPnBoeV9tYXNrID0gfigxIDw8IHRiaWFkZHIpOworCisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKKwkJCQluZXdfYnVzLT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnFzOgorCWtmcmVlKG5ld19idXMtPmlycSk7CitlcnJfdW5tYXBfcmVnczoKKwlpb3VubWFwKHJlZ3MpOworZXJyX2ZyZWVfYnVzOgorCWtmcmVlKG5ld19idXMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisKKwltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopYnVzLT5wcml2KTsKKwlidXMtPnByaXYgPSBOVUxMOworCW1kaW9idXNfZnJlZShidXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9wcV9tZGlvX21hdGNoW10gPSB7CisJeworCQkudHlwZSA9ICJtZGlvIiwKKwkJLmNvbXBhdGlibGUgPSAidWNjX2dldGhfcGh5IiwKKwl9LAorCXsKKwkJLnR5cGUgPSAibWRpbyIsCisJCS5jb21wYXRpYmxlID0gImdpYW5mYXIiLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIiwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNsX3BxX21kaW9fZHJpdmVyID0geworCS5uYW1lID0gImZzbC1wcV9tZGlvIiwKKwkucHJvYmUgPSBmc2xfcHFfbWRpb19wcm9iZSwKKwkucmVtb3ZlID0gZnNsX3BxX21kaW9fcmVtb3ZlLAorCS5tYXRjaF90YWJsZSA9IGZzbF9wcV9tZGlvX21hdGNoLAorfTsKKworaW50IF9faW5pdCBmc2xfcHFfbWRpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsX3BxX21kaW9fZHJpdmVyKTsKK30KKwordm9pZCBmc2xfcHFfbWRpb19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZzbF9wcV9tZGlvX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGxfc3luYyhmc2xfcHFfbWRpb19pbml0KTsKK21vZHVsZV9leGl0KGZzbF9wcV9tZGlvX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaCBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkYWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIEZyZWVzY2FsZSBQb3dlclFVSUNDIE1ESU8gRHJpdmVyIC0tIE1JSSBNYW5hZ2VtZW50IEJ1cyBJbXBsZW1lbnRhdGlvbgorICogRHJpdmVyIGZvciB0aGUgTURJTyBidXMgY29udHJvbGxlciBvbiBGcmVlc2NhbGUgUG93ZXJRVUlDQyBwcm9jZXNzb3JzCisgKgorICogQXV0aG9yOiBBbmR5IEZsZW1pbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpZm5kZWYgX19GU0xfUFFfTURJT19ICisjZGVmaW5lIF9fRlNMX1BRX01ESU9fSAorCisjZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJTUlORF9OT1RWQUxJRCAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNSUlNQ0ZHX0lOSVRfVkFMVUUJMHgwMDAwMDAwNworI2RlZmluZSBNSUlNQ0ZHX1JFU0VUICAgICAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgTUlJX1JFQURfQ09NTUFORCAgICAgICAweDAwMDAwMDAxCisKK3N0cnVjdCBmc2xfcHFfbWRpbyB7CisJdTMyIG1paW1jZmc7CQkvKiBNSUkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIHJlZyAqLworCXUzMiBtaWltY29tOwkJLyogTUlJIG1hbmFnZW1lbnQgY29tbWFuZCByZWcgKi8KKwl1MzIgbWlpbWFkZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGFkZHJlc3MgcmVnICovCisJdTMyIG1paW1jb247CQkvKiBNSUkgbWFuYWdlbWVudCBjb250cm9sIHJlZyAqLworCXUzMiBtaWltc3RhdDsJCS8qIE1JSSBtYW5hZ2VtZW50IHN0YXR1cyByZWcgKi8KKwl1MzIgbWlpbWluZDsJCS8qIE1JSSBtYW5hZ2VtZW50IGluZGljYXRpb24gcmVnICovCisJdTggcmVzZXJ2ZWRbMjhdOwkvKiBTcGFjZSBob2xkZXIgKi8KKwl1MzIgdXRiaXBhcjsJCS8qIFRCSSBwaHkgYWRkcmVzcyByZWcgKG9ubHkgb24gVUNDKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworaW50IGZzbF9wcV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7CitpbnQgZnNsX3BxX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKK2ludCBmc2xfcHFfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKKwkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKK2ludCBmc2xfcHFfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKK2ludCBfX2luaXQgZnNsX3BxX21kaW9faW5pdCh2b2lkKTsKK3ZvaWQgZnNsX3BxX21kaW9fZXhpdCh2b2lkKTsKK3ZvaWQgZnNsX3BxX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCk7CisjZW5kaWYgLyogRlNMX1BRX01ESU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDk4MzFiM2YuLjlkODFlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTkzLDcgKzkzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSAiZ2lhbmZhci5oIgotI2luY2x1ZGUgImdpYW5mYXJfbWlpLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAogI2RlZmluZSBUWF9USU1FT1VUICAgICAgKDEqSFopCiAjdW5kZWYgQlJJRUZfR0ZBUl9FUlJPUlMKQEAgLTE0MCwxMyArMTQwLDI2IEBACiB2b2lkIGdmYXJfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX2NsZWFyX2V4YWN0X21hdGNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfbWFjX2Zvcl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sIHU4ICphZGRyKTsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzOworc3RhdGljIGludCBnZmFyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogCiBNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ2Zhcl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGdmYXJfZW5ldF9vcGVuLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdmYXJfc3RhcnRfeG1pdCwKKwkubmRvX3N0b3AgPSBnZmFyX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGdmYXJfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpLAorCS5uZG9fdHhfdGltZW91dCA9IGdmYXJfdGltZW91dCwKKwkubmRvX2RvX2lvY3RsID0gZ2Zhcl9pb2N0bCwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlciA9IGdmYXJfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogLyogUmV0dXJucyAxIGlmIGluY29taW5nIGZyYW1lcyB1c2UgYW4gRkNCICovCiBzdGF0aWMgaW5saW5lIGludCBnZmFyX3VzZXNfZmNiKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xNjYsNiArMTc5LDkgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi0+bm9kZTsKIAljaGFyIGJ1c19uYW1lW01JSV9CVVNfSURfU0laRV07CisJY29uc3QgdTMyICpzdGFzaDsKKwljb25zdCB1MzIgKnN0YXNoX2xlbjsKKwljb25zdCB1MzIgKnN0YXNoX2lkeDsKIAogCWlmICghbnAgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE5NSw2ICsyMTEsMjYgQEAKIAkJfQogCX0KIAorCXN0YXNoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiYmQtc3Rhc2giLCBOVUxMKTsKKworCWlmKHN0YXNoKSB7CisJCXByaXYtPmRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HOworCQlwcml2LT5iZF9zdGFzaF9lbiA9IDE7CisJfQorCisJc3Rhc2hfbGVuID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicngtc3Rhc2gtbGVuIiwgTlVMTCk7CisKKwlpZiAoc3Rhc2hfbGVuKQorCQlwcml2LT5yeF9zdGFzaF9zaXplID0gKnN0YXNoX2xlbjsKKworCXN0YXNoX2lkeCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJ4LXN0YXNoLWlkeCIsIE5VTEwpOworCisJaWYgKHN0YXNoX2lkeCkKKwkJcHJpdi0+cnhfc3Rhc2hfaW5kZXggPSAqc3Rhc2hfaWR4OworCisJaWYgKHN0YXNoX2xlbiB8fCBzdGFzaF9pZHgpCisJCXByaXYtPmRldmljZV9mbGFncyB8PSBGU0xfR0lBTkZBUl9ERVZfSEFTX0JVRl9TVEFTSElORzsKKwogCW1hY19hZGRyID0gb2ZfZ2V0X21hY19hZGRyZXNzKG5wKTsKIAlpZiAobWFjX2FkZHIpCiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRkciwgTUFDX0FERFJfTEVOKTsKQEAgLTI1NSw3ICsyOTEsNyBAQAogCQlvZl9ub2RlX3B1dChwaHkpOwogCQlvZl9ub2RlX3B1dChtZGlvKTsKIAotCQlnZmFyX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOworCQlmc2xfcHFfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CiAJCXNucHJpbnRmKHByaXYtPnBoeV9idXNfaWQsIHNpemVvZihwcml2LT5waHlfYnVzX2lkKSwgIiVzOiUwMngiLAogCQkJCWJ1c19uYW1lLCAqaWQpOwogCX0KQEAgLTMyOSw4ICszNjUsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcml2LT5kZXYgPSBkZXY7CisJcHJpdi0+bmRldiA9IGRldjsKKwlwcml2LT5vZmRldiA9IG9mZGV2OwogCXByaXYtPm5vZGUgPSBvZmRldi0+bm9kZTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZvZmRldi0+ZGV2KTsKIAogCWVyciA9IGdmYXJfb2ZfaW5pdChkZXYpOwogCkBAIC0zNjksMjEgKzQwNywxMiBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwotCWRldi0+b3BlbiA9IGdmYXJfZW5ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZ2Zhcl9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IGdmYXJfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBnZmFyX3BvbGwsIEdGQVJfREVWX1dFSUdIVCk7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGdmYXJfbmV0cG9sbDsKLSNlbmRpZgotCWRldi0+c3RvcCA9IGdmYXJfY2xvc2U7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1OwogCWRldi0+bXR1ID0gMTUwMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJmdmYXJfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmdmYXJfZXRodG9vbF9vcHM7Ci0JZGV2LT5kb19pb2N0bCA9IGdmYXJfaW9jdGw7CiAKIAlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSB7CiAJCXByaXYtPnJ4X2NzdW1fZW5hYmxlID0gMTsKQEAgLTM5MywxMSArNDIyLDggQEAKIAogCXByaXYtPnZsZ3JwID0gTlVMTDsKIAotCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4pIHsKLQkJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyOwotCisJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JfQogCiAJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSCkgewogCQlwcml2LT5leHRlbmRlZF9oYXNoID0gMTsKQEAgLTQyNSw3ICs0NTEsNyBAQAogCQlwcml2LT5oYXNoX3dpZHRoID0gODsKIAogCQlwcml2LT5oYXNoX3JlZ3NbMF0gPSAmcHJpdi0+cmVncy0+Z2FkZHIwOwotICAgICAgICAgICAgICAgIHByaXYtPmhhc2hfcmVnc1sxXSA9ICZwcml2LT5yZWdzLT5nYWRkcjE7CisJCXByaXYtPmhhc2hfcmVnc1sxXSA9ICZwcml2LT5yZWdzLT5nYWRkcjE7CiAJCXByaXYtPmhhc2hfcmVnc1syXSA9ICZwcml2LT5yZWdzLT5nYWRkcjI7CiAJCXByaXYtPmhhc2hfcmVnc1szXSA9ICZwcml2LT5yZWdzLT5nYWRkcjM7CiAJCXByaXYtPmhhc2hfcmVnc1s0XSA9ICZwcml2LT5yZWdzLT5nYWRkcjQ7CkBAIC00NjYsNiArNDkyLDkgQEAKIAkJZ290byByZWdpc3Rlcl9mYWlsOwogCX0KIAorCWRldmljZV9pbml0X3dha2V1cCgmZGV2LT5kZXYsCisJCXByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfTUFHSUNfUEFDS0VUKTsKKwogCS8qIGZpbGwgb3V0IElSUSBudW1iZXIgYW5kIG5hbWUgZmllbGRzICovCiAJbGVuX2Rldm5hbWUgPSBzdHJsZW4oZGV2LT5uYW1lKTsKIAlzdHJuY3B5KCZwcml2LT5pbnRfbmFtZV90eFswXSwgZGV2LT5uYW1lLCBsZW5fZGV2bmFtZSk7CkBAIC01MTEsNyArNTQwLDcgQEAKIAlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIE5VTEwpOwogCiAJaW91bm1hcChwcml2LT5yZWdzKTsKLQlmcmVlX25ldGRldihwcml2LT5kZXYpOworCWZyZWVfbmV0ZGV2KHByaXYtPm5kZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjAsNyArNTQ5LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCkBAIC01NjksNyArNTk4LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wdmFsOwogCWludCBtYWdpY19wYWNrZXQgPSBwcml2LT53b2xfZW4gJiYKQEAgLTgzOCwxMiArODY3LDEyIEBACiAJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFRyYW5zbWl0LCBkZXYpOwogCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRSZWNlaXZlLCBkZXYpOwogCX0gZWxzZSB7Ci0gCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCwgZGV2KTsKKwkJZnJlZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQsIGRldik7CiAJfQogCiAJZnJlZV9za2JfcmVzb3VyY2VzKHByaXYpOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+ZGV2LAorCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5vZmRldi0+ZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCB0eGJkOCkqcHJpdi0+dHhfcmluZ19zaXplCiAJCQkrIHNpemVvZihzdHJ1Y3QgcnhiZDgpKnByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCXByaXYtPnR4X2JkX2Jhc2UsCkBAIC04NjUsMTIgKzg5NCwxMiBAQAogCQlpZiAoIXByaXYtPnR4X3NrYnVmZltpXSkKIAkJCWNvbnRpbnVlOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAorCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAogCQkJCXR4YmRwLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOwogCQl0eGJkcC0+bHN0YXR1cyA9IDA7CiAJCWZvciAoaiA9IDA7IGogPCBza2Jfc2hpbmZvKHByaXYtPnR4X3NrYnVmZltpXSktPm5yX2ZyYWdzOyBqKyspIHsKIAkJCXR4YmRwKys7Ci0JCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+ZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCisJCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKIAkJCQkJdHhiZHAtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCX0KIAkJdHhiZHArKzsKQEAgLTg4Nyw3ICs5MTYsNyBAQAogCWlmKHByaXYtPnJ4X3NrYnVmZiAhPSBOVUxMKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX3NpemU7IGkrKykgewogCQkJaWYgKHByaXYtPnJ4X3NrYnVmZltpXSkgewotCQkJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCByeGJkcC0+YnVmUHRyLAorCQkJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHJ4YmRwLT5idWZQdHIsCiAJCQkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwKIAkJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKQEAgLTk1Myw3ICs5ODIsNyBAQAogCWdmYXJfd3JpdGUoJnJlZ3MtPmltYXNrLCBJTUFTS19JTklUX0NMRUFSKTsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwotCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5kZXYsCisJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5vZmRldi0+ZGV2LAogCQkJc2l6ZW9mIChzdHJ1Y3QgdHhiZDgpICogcHJpdi0+dHhfcmluZ19zaXplICsKIAkJCXNpemVvZiAoc3RydWN0IHJ4YmQ4KSAqIHByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCSZhZGRyLCBHRlBfS0VSTkVMKTsKQEAgLTExNjUsNyArMTE5NCw3IEBACiByeF9za2JfZmFpbDoKIAlmcmVlX3NrYl9yZXNvdXJjZXMocHJpdik7CiB0eF9za2JfZmFpbDoKLQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYsCisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2Yoc3RydWN0IHR4YmQ4KSpwcml2LT50eF9yaW5nX3NpemUKIAkJCSsgc2l6ZW9mKHN0cnVjdCByeGJkOCkqcHJpdi0+cnhfcmluZ19zaXplLAogCQkJcHJpdi0+dHhfYmRfYmFzZSwKQEAgLTExODMsNiArMTIxMiw4IEBACiAKIAluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CiAKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9yZWN5Y2xlKTsKKwogCS8qIEluaXRpYWxpemUgYSBidW5jaCBvZiByZWdpc3RlcnMgKi8KIAlpbml0X3JlZ2lzdGVycyhkZXYpOwogCkBAIC0xMjAzLDEzICsxMjM0LDI0IEBACiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZkZXYtPmRldiwgcHJpdi0+d29sX2VuKTsKKwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHR4ZmNiICpnZmFyX2FkZF9mY2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwKQogewotCXN0cnVjdCB0eGZjYiAqZmNiID0gKHN0cnVjdCB0eGZjYiAqKXNrYl9wdXNoIChza2IsIEdNQUNfRkNCX0xFTik7CisJc3RydWN0IHR4ZmNiICpmY2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwOwogCisJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgR01BQ19GQ0JfTEVOKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYiA9IHNrYjsKKwkJc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20ob2xkX3NrYiwgR01BQ19GQ0JfTEVOKTsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gTlVMTDsKKwkJZGV2X2tmcmVlX3NrYl9hbnkob2xkX3NrYik7CisJfQorCWZjYiA9IChzdHJ1Y3QgdHhmY2IgKilza2JfcHVzaChza2IsIEdNQUNfRkNCX0xFTik7CiAJY2FjaGVhYmxlX21lbXplcm8oZmNiLCBHTUFDX0ZDQl9MRU4pOwogCiAJcmV0dXJuIGZjYjsKQEAgLTEzMTQsNyArMTM1Niw3IEBACiAJCQlpZiAoaSA9PSBucl9mcmFncyAtIDEpCiAJCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0xBU1QgfCBUWEJEX0lOVEVSUlVQVCk7CiAKLQkJCWJ1ZmFkZHIgPSBkbWFfbWFwX3BhZ2UoJmRldi0+ZGV2LAorCQkJYnVmYWRkciA9IGRtYV9tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlLAogCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAogCQkJCQlsZW5ndGgsCkBAIC0xMzMwLDIzICsxMzcyLDI1IEBACiAKIAkvKiBTZXQgdXAgY2hlY2tzdW1taW5nICovCiAJaWYgKENIRUNLU1VNX1BBUlRJQUwgPT0gc2tiLT5pcF9zdW1tZWQpIHsKLQkJZmNiID0gZ2Zhcl9hZGRfZmNiKHNrYik7Ci0JCWxzdGF0dXMgfD0gQkRfTEZMQUcoVFhCRF9UT0UpOwotCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJZmNiID0gZ2Zhcl9hZGRfZmNiKCZza2IpOworCQlpZiAobGlrZWx5KGZjYiAhPSBOVUxMKSkgeworCQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX1RPRSk7CisJCQlnZmFyX3R4X2NoZWNrc3VtKHNrYiwgZmNiKTsKKwkJfQogCX0KIAogCWlmIChwcml2LT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJaWYgKHVubGlrZWx5KE5VTEwgPT0gZmNiKSkgewotCQkJZmNiID0gZ2Zhcl9hZGRfZmNiKHNrYik7CisJCWlmICh1bmxpa2VseShOVUxMID09IGZjYikpCisJCQlmY2IgPSBnZmFyX2FkZF9mY2IoJnNrYik7CisJCWlmIChsaWtlbHkoZmNiICE9IE5VTEwpKSB7CiAJCQlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfVE9FKTsKKwkJCWdmYXJfdHhfdmxhbihza2IsIGZjYik7CiAJCX0KLQotCQlnZmFyX3R4X3ZsYW4oc2tiLCBmY2IpOwogCX0KIAogCS8qIHNldHVwIHRoZSBUeEJEIGxlbmd0aCBhbmQgYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCBCRCAqLwogCXByaXYtPnR4X3NrYnVmZltwcml2LT5za2JfY3VydHhdID0gc2tiOwotCXR4YmRwX3N0YXJ0LT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwl0eGJkcF9zdGFydC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSwKIAkJCXNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOwogCiAJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX0NSQyB8IFRYQkRfUkVBRFkpIHwgc2tiX2hlYWRsZW4oc2tiKTsKQEAgLTEzOTksNiArMTQ0Myw3IEBACiAKIAluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCisJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5yeF9yZWN5Y2xlKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5yZXNldF90YXNrKTsKIAlzdG9wX2dmYXIoZGV2KTsKIApAQCAtMTUzMSw3ICsxNTc2LDcgQEAKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZmFyX3ByaXZhdGUsCiAJCQlyZXNldF90YXNrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKIAkJc3RvcF9nZmFyKGRldik7CkBAIC0xNTc4LDcgKzE2MjMsNyBAQAogCQkJCShsc3RhdHVzICYgQkRfTEVOR1RIX01BU0spKQogCQkJYnJlYWs7CiAKLQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5kZXYsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQkJYmRwLT5idWZQdHIsCiAJCQkJYmRwLT5sZW5ndGgsCiAJCQkJRE1BX1RPX0RFVklDRSk7CkBAIC0xNTg3LDcgKzE2MzIsNyBAQAogCQliZHAgPSBuZXh0X3R4YmQoYmRwLCBiYXNlLCB0eF9yaW5nX3NpemUpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBmcmFnczsgaSsrKSB7Ci0JCQlkbWFfdW5tYXBfcGFnZSgmZGV2LT5kZXYsCisJCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQkJYmRwLT5idWZQdHIsCiAJCQkJCWJkcC0+bGVuZ3RoLAogCQkJCQlETUFfVE9fREVWSUNFKTsKQEAgLTE1OTUsNyArMTY0MCwxNyBAQAogCQkJYmRwID0gbmV4dF90eGJkKGJkcCwgYmFzZSwgdHhfcmluZ19zaXplKTsKIAkJfQogCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCS8qCisJCSAqIElmIHRoZXJlJ3Mgcm9vbSBpbiB0aGUgcXVldWUgKGxpbWl0IGl0IHRvIHJ4X2J1ZmZlcl9zaXplKQorCQkgKiB3ZSBhZGQgdGhpcyBza2IgYmFjayBpbnRvIHRoZSBwb29sLCBpZiBpdCdzIHRoZSByaWdodCBzaXplCisJCSAqLworCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcmVjeWNsZSkgPCBwcml2LT5yeF9yaW5nX3NpemUgJiYKKwkJCQlza2JfcmVjeWNsZV9jaGVjayhza2IsIHByaXYtPnJ4X2J1ZmZlcl9zaXplICsKKwkJCQkJUlhCVUZfQUxJR05NRU5UKSkKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJnByaXYtPnJ4X3JlY3ljbGUsIHNrYik7CisJCWVsc2UKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKIAkJcHJpdi0+dHhfc2tidWZmW3NrYl9kaXJ0eXR4XSA9IE5VTEw7CiAKIAkJc2tiX2RpcnR5dHggPSAoc2tiX2RpcnR5dHggKyAxKSAmCkBAIC0xNjI2LDkgKzE2ODEsOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAlzcGluX2xvY2soJnByaXYtPnJ4bG9jayk7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkgewogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5pbWFzaywgSU1BU0tfUlRYX0RJU0FCTEVEKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogQ2xlYXIgSUVWRU5ULCBzbyBpbnRlcnJ1cHRzIGFyZW4ndCBjYWxsZWQgYWdhaW4KQEAgLTE2NTQsNyArMTcwOSw3IEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGxzdGF0dXM7CiAKLQliZHAtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLAorCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSwKIAkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJbHN0YXR1cyA9IEJEX0xGTEFHKFJYQkRfRU1QVFkgfCBSWEJEX0lOVEVSUlVQVCk7CkBAIC0xNjc0LDggKzE3MjksMTAgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAotCS8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgdGhlIHNrYiwgc28ga2VlcCB0cnlpbmcgdGlsbCB3ZSBzdWNjZWVkICovCi0Jc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHByaXYtPnJ4X2J1ZmZlcl9zaXplICsgUlhCVUZfQUxJR05NRU5UKTsKKwlza2IgPSBfX3NrYl9kZXF1ZXVlKCZwcml2LT5yeF9yZWN5Y2xlKTsKKwlpZiAoIXNrYikKKwkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsCisJCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUgKyBSWEJVRl9BTElHTk1FTlQpOwogCiAJaWYgKCFza2IpCiAJCXJldHVybiBOVUxMOwpAQCAtMTgxMiw3ICsxODY5LDcgQEAKIAogCQlza2IgPSBwcml2LT5yeF9za2J1ZmZbcHJpdi0+c2tiX2N1cnJ4XTsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5kZXYtPmRldiwgYmRwLT5idWZQdHIsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIGJkcC0+YnVmUHRyLAogCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCS8qIFdlIGRyb3AgdGhlIGZyYW1lIGlmIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgKi8KQEAgLTE4MjMsNyArMTg4MCw3IEBACiAJCQlpZiAodW5saWtlbHkoIW5ld3NrYikpCiAJCQkJbmV3c2tiID0gc2tiOwogCQkJZWxzZSBpZiAoc2tiKQotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgKi8KIAkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMTgzNSw2ICsxODkyLDggQEAKIAkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCisJCQkJaWYgKGluX2lycSgpIHx8IGlycXNfZGlzYWJsZWQoKSkKKwkJCQkJcHJpbnRrKCJJbnRlcnJ1cHQgcHJvYmxlbSFcbiIpOwogCQkJCWdmYXJfcHJvY2Vzc19mcmFtZShkZXYsIHNrYiwgYW1vdW50X3B1bGwpOwogCiAJCQl9IGVsc2UgewpAQCAtMTg3MCw3ICsxOTI5LDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBnZmFyX3ByaXZhdGUsIG5hcGkpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJaW50IHR4X2NsZWFuZWQgPSAwOwogCWludCByeF9jbGVhbmVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTg5MSw3ICsxOTUwLDcgQEAKIAkJcmV0dXJuIGJ1ZGdldDsKIAogCWlmIChyeF9jbGVhbmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCS8qIENsZWFyIHRoZSBoYWx0IGJpdCBpbiBSU1RBVCAqLwogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5yc3RhdCwgUlNUQVRfQ0xFQVJfUkhBTFQpOwpAQCAtMjMwOCwyMyArMjM2NywxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZmFyX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyID0gZ2Zhcl9tZGlvX2luaXQoKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKLQotCWlmIChlcnIpCi0JCWdmYXJfbWRpb19leGl0KCk7Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdmYXJfZXhpdCh2b2lkKQogewogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnZmFyX2RyaXZlcik7Ci0JZ2Zhcl9tZGlvX2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQoZ2Zhcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBlYWE4Njg5Li5kZDQ5OWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0jaW5jbHVkZSAiZ2lhbmZhcl9taWkuaCIKIAogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdG8gYmUgaGFuZGxlZCBpbiBvbmUgY2FsbCBvZiBnZmFyX3BvbGwgKi8KICNkZWZpbmUgR0ZBUl9ERVZfV0VJR0hUIDY0CkBAIC0xMjYsOSArMTI1LDEyIEBACiAjZGVmaW5lIERFRkFVTFRfUlhfQ09BTEVTQ0UgMAogI2RlZmluZSBERUZBVUxUX1JYQ09VTlQJMAogCi0jZGVmaW5lIE1JSU1DRkdfSU5JVF9WQUxVRQkweDAwMDAwMDA3Ci0jZGVmaW5lIE1JSU1DRkdfUkVTRVQgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHRkFSX1NVUFBPUlRFRCAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiBcCisJCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCBcCisJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgXAorCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIFwKKwkJfCBTVVBQT1JURURfQXV0b25lZyBcCisJCXwgU1VQUE9SVEVEX01JSSkKIAogLyogVEJJIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLwogI2RlZmluZSBNSUlfVEJJQ09OCQkweDExCkBAIC03MzYsNyArNzM4LDggQEAKIAlzcGlubG9ja190IHJ4bG9jazsKIAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCiAJLyogc2tiIGFycmF5IGFuZCBpbmRleCAqLwpAQCAtNzU2LDYgKzc1OSw4IEBACiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX2luZGV4OwogCisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9yZWN5Y2xlOworCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOwogCiAJLyogVW5wcm90ZWN0ZWQgZmllbGRzICovCkBAIC04MjYsOCArODMxLDcgQEAKIGV4dGVybiB2b2lkIGdmYXJfcGh5X3Rlc3Qoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJaW50IGVuYWJsZSwgdTMyIHJlZ251bSwgdTMyIHJlYWQpOwogdm9pZCBnZmFyX2luaXRfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAotCQkJICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOwotaW50IGdmYXJfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzOwogCiAjZW5kaWYgLyogX19HSUFORkFSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggNTliM2I1ZC4uZGJmMDZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKQEAgLTYwMCw2ICs2MDAsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOwogCXByaXYtPndvbF9lbiA9IHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMgPyAxIDogMDsKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCBwcml2LT53b2xfZW4pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5YTQyNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9naWFuZmFyX21paS5jCi0gKgotICogR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJTSBidXMgaW1wbGVtZW50YXRpb24KLSAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSU0gcmVncwotICoKLSAqIEF1dGhvcjogQW5keSBGbGVtaW5nCi0gKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImdpYW5mYXIuaCIKLSNpbmNsdWRlICJnaWFuZmFyX21paS5oIgotCi0vKgotICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAotICogb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCi0gKiBnZW5lcmljIG1kaW8gYnVzICh0aWVkIHRvIGEgc2luZ2xlIGludGVyZmFjZSksIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzCi0gKiBkb25lIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKLSAqIHRoZSBUQkkgd2hpY2ggY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUyBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvCi0gKiB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IKLSAqIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZXhhbXBsZS4KLSAqLwotaW50IGdmYXJfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKLQkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gd3JpdGUgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKLQotCS8qIFdyaXRlIG91dCB0aGUgdmFsdWUgd2Ugd2FudCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jb24sIHZhbHVlKTsKLQotCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KLQl3aGlsZSAoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAotICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWSBvcGVyYXRpb24KLSAqIGRvbmUgb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLAotICogd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBnZW5lcmljIG1kaW8gYnVzCi0gKiBUaGlzIGlzIGhlbHBmdWwgaW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBsaWtlCi0gKiB0aGUgVEJJIHdoaWNoLCBpbnR1cm4sIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMKLSAqIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8gdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUKLSAqIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGVnLgotICovCi1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0JdTE2IHZhbHVlOwotCi0JLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byByZWFkICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7Ci0KLQkvKiBDbGVhciBtaWltY29tLCBhbmQgdGhlbiBpbml0aWF0ZSBhIHJlYWQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29tLCAwKTsKLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29tLCBNSUlfUkVBRF9DT01NQU5EKTsKLQotCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KLQl3aGlsZSAoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIChNSUlNSU5EX05PVFZBTElEIHwgTUlJTUlORF9CVVNZKSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQkvKiBHcmFiIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZnJvbSBtaWltc3RhdCAqLwotCXZhbHVlID0gZ2Zhcl9yZWFkKCZyZWdzLT5taWltc3RhdCk7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLS8qIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKLSAqIG9uIHRoZSBidXMsIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzIGRvbmUgYmVmb3JlIHJldHVybmluZy4KLSAqIEFsbCBQSFkgY29uZmlndXJhdGlvbiBpcyBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IGdmYXJfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogV3JpdGUgdG8gdGhlIGxvY2FsIE1JSSByZWdzICovCi0JcmV0dXJuKGdmYXJfbG9jYWxfbWRpb193cml0ZShyZWdzLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpKTsKLX0KLQotLyogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCi0gKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZCi0gKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IGdmYXJfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogUmVhZCB0aGUgbG9jYWwgTUlJIHJlZ3MgKi8KLQlyZXR1cm4oZ2Zhcl9sb2NhbF9tZGlvX3JlYWQocmVncywgbWlpX2lkLCByZWdudW0pKTsKLX0KLQotLyogUmVzZXQgdGhlIE1JSU0gcmVnaXN0ZXJzLCBhbmQgd2FpdCBmb3IgdGhlIGJ1cyB0byBmcmVlICovCi1zdGF0aWMgaW50IGdmYXJfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQl1bnNpZ25lZCBpbnQgdGltZW91dCA9IFBIWV9JTklUX1RJTUVPVVQ7Ci0KLQltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQkvKiBSZXNldCB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX1JFU0VUKTsKLQotCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfSU5JVF9WQUxVRSk7Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBidXMgaXMgZnJlZSAqLwotCXdoaWxlICgoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkgJiYKLQkJCS0tdGltZW91dCkKLQkJY3B1X3JlbGF4KCk7Ci0KLQltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCWlmKHRpbWVvdXQgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayFcbiIsCi0JCQkJYnVzLT5uYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQWxsb2NhdGUgYW4gYXJyYXkgd2hpY2ggcHJvdmlkZXMgaXJxICNzIGZvciBlYWNoIFBIWSBvbiB0aGUgZ2l2ZW4gYnVzICovCi1zdGF0aWMgaW50ICpjcmVhdGVfaXJxX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWludCAqaXJxczsKLQlpbnQgaTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKLQotCWlycXMgPSBrY2FsbG9jKFBIWV9NQVhfQUREUiwgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFpcnFzKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKLQkJaXJxc1tpXSA9IFBIWV9QT0xMOwotCi0Jd2hpbGUgKChjaGlsZCA9IG9mX2dldF9uZXh0X2NoaWxkKG5wLCBjaGlsZCkpICE9IE5VTEwpIHsKLQkJaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNoaWxkLCAwKTsKLQkJY29uc3QgdTMyICppZDsKLQotCQlpZiAoaXJxID09IE5PX0lSUSkKLQkJCWNvbnRpbnVlOwotCi0JCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7Ci0KLQkJaWYgKCFpZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgqaWQgPCBQSFlfTUFYX0FERFIgJiYgKmlkID49IDApCi0JCQlpcnFzWyppZF0gPSBpcnE7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCi0JCQkJCSIlZCBpcyBub3QgYSB2YWxpZCBQSFkgYWRkcmVzc1xuIiwKLQkJCQkJbnAtPmZ1bGxfbmFtZSwgKmlkKTsKLQl9Ci0KLQlyZXR1cm4gaXJxczsKLX0KLQotCi12b2lkIGdmYXJfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWNvbnN0IHUzMiAqcmVnOwotCi0JcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7Ci0KLQlzbnByaW50ZihuYW1lLCBNSUlfQlVTX0lEX1NJWkUsICIlc0AleCIsIG5wLT5uYW1lLCByZWcgPyAqcmVnIDogMCk7Ci19Ci0KLS8qIFNjYW4gdGhlIGJ1cyBpbiByZXZlcnNlLCBsb29raW5nIGZvciBhbiBlbXB0eSBzcG90ICovCi1zdGF0aWMgaW50IGdmYXJfbWRpb19maW5kX2ZyZWUoc3RydWN0IG1paV9idXMgKm5ld19idXMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBQSFlfTUFYX0FERFI7IGkgPiAwOyBpLS0pIHsKLQkJdTMyIHBoeV9pZDsKLQotCQlpZiAoZ2V0X3BoeV9pZChuZXdfYnVzLCBpLCAmcGh5X2lkKSkKLQkJCXJldHVybiAtMTsKLQotCQlpZiAocGh5X2lkID09IDB4ZmZmZmZmZmYpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGludCBnZmFyX21kaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCi0JCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzOwotCXN0cnVjdCBnZmFyIF9faW9tZW0gKmVuZXRfcmVnczsKLQlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKLQlpbnQgZXJyID0gMDsKLQl1NjQgYWRkciwgc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICp0Ymk7Ci0JaW50IHRiaWFkZHIgPSAtMTsKLQotCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7Ci0JaWYgKE5VTEwgPT0gbmV3X2J1cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZpY2VfaW5pdF93YWtldXAoJm9mZGV2LT5kZXYsIDEpOwotCi0JbmV3X2J1cy0+bmFtZSA9ICJHaWFuZmFyIE1JSSBCdXMiLAotCW5ld19idXMtPnJlYWQgPSAmZ2Zhcl9tZGlvX3JlYWQsCi0JbmV3X2J1cy0+d3JpdGUgPSAmZ2Zhcl9tZGlvX3dyaXRlLAotCW5ld19idXMtPnJlc2V0ID0gJmdmYXJfbWRpb19yZXNldCwKLQlnZmFyX21kaW9fYnVzX25hbWUobmV3X2J1cy0+aWQsIG5wKTsKLQotCS8qIFNldCB0aGUgUEhZIGJhc2UgYWRkcmVzcyAqLwotCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgb2ZfZ2V0X2FkZHJlc3MobnAsIDAsICZzaXplLCBOVUxMKSk7Ci0JcmVncyA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7Ci0KLQlpZiAoTlVMTCA9PSByZWdzKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfYnVzOwotCX0KLQotCW5ld19idXMtPnByaXYgPSAodm9pZCBfX2ZvcmNlICopcmVnczsKLQotCW5ld19idXMtPmlycSA9IGNyZWF0ZV9pcnFfbWFwKG5wKTsKLQotCWlmIChuZXdfYnVzLT5pcnEgPT0gTlVMTCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bm1hcF9yZWdzOwotCX0KLQotCW5ld19idXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OwotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbmV3X2J1cyk7Ci0KLQkvKgotCSAqIFRoaXMgaXMgbWlsZGx5IGV2aWwsIGJ1dCBzbyBpcyBvdXIgaGFyZHdhcmUgZm9yIGRvaW5nIHRoaXMuCi0JICogQWxzbywgd2UgaGF2ZSB0byBjYXN0IGJhY2sgdG8gc3RydWN0IGdmYXJfbWlpIGJlY2F1c2Ugb2YKLQkgKiBkZWZpbml0aW9uIHdlaXJkbmVzcyBkb25lIGluIGdpYW5mYXIuaC4KLQkgKi8KLQllbmV0X3JlZ3MgPSAoc3RydWN0IGdmYXIgX19pb21lbSAqKQotCQkoKGNoYXIgKilyZWdzIC0gb2Zmc2V0b2Yoc3RydWN0IGdmYXIsIGdmYXJfbWlpX3JlZ3MpKTsKLQotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIHRiaSkgewotCQlpZiAoIXN0cm5jbXAodGJpLT50eXBlLCAidGJpLXBoeSIsIDgpKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHRiaSkgewotCQljb25zdCB1MzIgKnByb3AgPSBvZl9nZXRfcHJvcGVydHkodGJpLCAicmVnIiwgTlVMTCk7Ci0KLQkJaWYgKHByb3ApCi0JCQl0YmlhZGRyID0gKnByb3A7Ci0JfQotCi0JaWYgKHRiaWFkZHIgPT0gLTEpIHsKLQkJZ2Zhcl93cml0ZSgmZW5ldF9yZWdzLT50YmlwYSwgMCk7Ci0KLQkJdGJpYWRkciA9IGdmYXJfbWRpb19maW5kX2ZyZWUobmV3X2J1cyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBkZWZpbmUgVEJJUEEgYXQgMCB0byBiZSBpbGxlZ2FsLCBvcHRpbmcgdG8gZmFpbCBmb3IgYm9hcmRzIHRoYXQKLQkgKiBoYXZlIFBIWXMgYXQgMS0zMSwgcmF0aGVyIHRoYW4gY2hhbmdlIHRiaXBhIGFuZCByZXNjYW4uCi0JICovCi0JaWYgKHRiaWFkZHIgPT0gMCkgewotCQllcnIgPSAtRUJVU1k7Ci0KLQkJZ290byBlcnJfZnJlZV9pcnFzOwotCX0KLQotCWdmYXJfd3JpdGUoJmVuZXRfcmVncy0+dGJpcGEsIHRiaWFkZHIpOwotCi0JLyoKLQkgKiBUaGUgVEJJUEhZLW9ubHkgYnVzZXMgd2lsbCBmaW5kIFBIWXMgYXQgZXZlcnkgYWRkcmVzcywKLQkgKiBzbyB3ZSBtYXNrIHRoZW0gYWxsIGJ1dCB0aGUgVEJJCi0JICovCi0JaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSkKLQkJbmV3X2J1cy0+cGh5X21hc2sgPSB+KDEgPDwgdGJpYWRkcik7Ci0KLQllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwotCi0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCi0JCQkJbmV3X2J1cy0+bmFtZSk7Ci0JCWdvdG8gZXJyX2ZyZWVfaXJxczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfaXJxczoKLQlrZnJlZShuZXdfYnVzLT5pcnEpOwotZXJyX3VubWFwX3JlZ3M6Ci0JaW91bm1hcChyZWdzKTsKLWVycl9mcmVlX2J1czoKLQltZGlvYnVzX2ZyZWUobmV3X2J1cyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKLXsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQotCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwotCi0JZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBOVUxMKTsKLQotCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdik7Ci0JYnVzLT5wcml2ID0gTlVMTDsKLQlrZnJlZShidXMtPmlycSk7Ci0JbWRpb2J1c19mcmVlKGJ1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tZGlvX21hdGNoW10gPQotewotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyIsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSIsCi0JfSwKLQl7Ci0JCS50eXBlID0gIm1kaW8iLAotCQkuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwKLQl9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZ2lhbmZhcl9tZGlvX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtZ2lhbmZhcl9tZGlvIiwKLQkubWF0Y2hfdGFibGUgPSBnZmFyX21kaW9fbWF0Y2gsCi0KLQkucHJvYmUgPSBnZmFyX21kaW9fcHJvYmUsCi0JLnJlbW92ZSA9IGdmYXJfbWRpb19yZW1vdmUsCi19OwotCi1pbnQgX19pbml0IGdmYXJfbWRpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2lhbmZhcl9tZGlvX2RyaXZlcik7Ci19Ci0KLXZvaWQgZ2Zhcl9tZGlvX2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2lhbmZhcl9tZGlvX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjMjQyYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmgKLSAqCi0gKiBHaWFuZmFyIEV0aGVybmV0IERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KLSAqIERyaXZlciBmb3IgdGhlIE1ESU8gYnVzIGNvbnRyb2xsZXIgaW4gdGhlIEdpYW5mYXIgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBBdXRob3I6IEFuZHkgRmxlbWluZwotICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19HSUFORkFSX01JSV9ICi0jZGVmaW5lIF9fR0lBTkZBUl9NSUlfSAotCi1zdHJ1Y3QgZ2Zhcl9wcml2YXRlOyAvKiBmb3J3YXJkIHJlZiAqLwotCi0jZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUlJTUlORF9OT1RWQUxJRCAgICAgICAgMHgwMDAwMDAwNAotCi0jZGVmaW5lIE1JSV9SRUFEX0NPTU1BTkQgICAgICAgMHgwMDAwMDAwMQotCi0jZGVmaW5lIEdGQVJfU1VQUE9SVEVEIChTVVBQT1JURURfMTBiYXNlVF9IYWxmIFwKLQkJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsIFwKLQkJfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiBcCi0JCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgXAotCQl8IFNVUFBPUlRFRF9BdXRvbmVnIFwKLQkJfCBTVVBQT1JURURfTUlJKQotCi1zdHJ1Y3QgZ2Zhcl9taWkgewotCXUzMgltaWltY2ZnOwkvKiAweC41MjAgLSBNSUkgTWFuYWdlbWVudCBDb25maWcgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbWNvbTsJLyogMHguNTI0IC0gTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCBSZWdpc3RlciAqLwotCXUzMgltaWltYWRkOwkvKiAweC41MjggLSBNSUkgTWFuYWdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0JdTMyCW1paW1jb247CS8qIDB4LjUyYyAtIE1JSSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbXN0YXQ7CS8qIDB4LjUzMCAtIE1JSSBNYW5hZ2VtZW50IFN0YXR1cyBSZWdpc3RlciAqLwotCXUzMgltaWltaW5kOwkvKiAweC41MzQgLSBNSUkgTWFuYWdlbWVudCBJbmRpY2F0b3IgUmVnaXN0ZXIgKi8KLX07Ci0KLWludCBnZmFyX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKLWludCBnZmFyX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBnZmFyX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCi0JCQkgIGludCByZWdudW0sIHUxNiB2YWx1ZSk7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pOwotc3RydWN0IG1paV9idXMgKmdmYXJfZ2V0X21paWJ1cyhjb25zdCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KTsKLWludCBfX2luaXQgZ2Zhcl9tZGlvX2luaXQodm9pZCk7Ci12b2lkIGdmYXJfbWRpb19leGl0KHZvaWQpOwotCi12b2lkIGdmYXJfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKLSNlbmRpZiAvKiBHSUFORkFSX1BIWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggNzgyYzIwMS4uZGQyNmRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwpAQCAtNTMsNiArNTMsOSBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJLyogRmluZCBvdXQgdGhlIG5ldyBzZXR0aW5nICovCiAJaWYgKCFzdHJuY21wKCJvbiIsIGJ1ZiwgY291bnQgLSAxKSB8fCAhc3RybmNtcCgiMSIsIGJ1ZiwgY291bnQgLSAxKSkKIAkJbmV3X3NldHRpbmcgPSAxOwpAQCAtODEsNyArODQsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoYmRfc3Rhc2gsIDA2NDQsIGdmYXJfc2hvd19iZF9zdGFzaCwgZ2Zhcl9zZXRfYmRfc3Rhc2gpOworc3RhdGljIERFVklDRV9BVFRSKGJkX3N0YXNoLCAwNjQ0LCBnZmFyX3Nob3dfYmRfc3Rhc2gsIGdmYXJfc2V0X2JkX3N0YXNoKTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X3J4X3N0YXNoX3NpemUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTAwLDYgKzEwMyw5IEBACiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCWlmIChsZW5ndGggPiBwcml2LT5yeF9idWZmZXJfc2l6ZSkKIAkJZ290byBvdXQ7CkBAIC0xMzAsOCArMTM2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKHJ4X3N0YXNoX3NpemUsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9zaXplLAotCSAgICBnZmFyX3NldF9yeF9zdGFzaF9zaXplKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyeF9zdGFzaF9zaXplLCAwNjQ0LCBnZmFyX3Nob3dfcnhfc3Rhc2hfc2l6ZSwKKwkJICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfc2l6ZSk7CiAKIC8qIFN0YXNoaW5nIHdpbGwgb25seSBiZSBlbmFibGVkIHdoZW4gcnhfc3Rhc2hfc2l6ZSAhPSAwICovCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfaW5kZXgoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTUyLDYgKzE1OCw5IEBACiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCWlmIChpbmRleCA+IHByaXYtPnJ4X3N0YXNoX3NpemUpCiAJCWdvdG8gb3V0OwpAQCAtMTcyLDggKzE4MSw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihyeF9zdGFzaF9pbmRleCwgMDY0NCwgZ2Zhcl9zaG93X3J4X3N0YXNoX2luZGV4LAotCSAgICBnZmFyX3NldF9yeF9zdGFzaF9pbmRleCk7CitzdGF0aWMgREVWSUNFX0FUVFIocnhfc3Rhc2hfaW5kZXgsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9pbmRleCwKKwkJICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfaW5kZXgpOwogCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIxMCw4ICsyMTksOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoZmlmb190aHJlc2hvbGQsIDA2NDQsIGdmYXJfc2hvd19maWZvX3RocmVzaG9sZCwKLQkgICAgZ2Zhcl9zZXRfZmlmb190aHJlc2hvbGQpOworc3RhdGljIERFVklDRV9BVFRSKGZpZm9fdGhyZXNob2xkLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQsCisJCSAgIGdmYXJfc2V0X2ZpZm9fdGhyZXNob2xkKTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0yNDcsNyArMjU2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGZpZm9fc3RhcnZlLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb19zdGFydmUsIGdmYXJfc2V0X2ZpZm9fc3RhcnZlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZSwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlLAorCQkgICBnZmFyX3NldF9maWZvX3N0YXJ2ZSk7CiAKIHN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yODQsOCArMjk0LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGZpZm9fc3RhcnZlX29mZiwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlX29mZiwKLQkgICAgZ2Zhcl9zZXRfZmlmb19zdGFydmVfb2ZmKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZV9vZmYsIDA2NDQsIGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYsCisJCSAgIGdmYXJfc2V0X2ZpZm9fc3RhcnZlX29mZik7CiAKIHZvaWQgZ2Zhcl9pbml0X3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yOTMsMTIgKzMwMyw5IEBACiAJaW50IHJjOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB2YWx1ZXMgKi8KLQlwcml2LT5yeF9zdGFzaF9zaXplID0gREVGQVVMVF9TVEFTSF9MRU5HVEg7Ci0JcHJpdi0+cnhfc3Rhc2hfaW5kZXggPSBERUZBVUxUX1NUQVNIX0lOREVYOwogCXByaXYtPmZpZm9fdGhyZXNob2xkID0gREVGQVVMVF9GSUZPX1RYX1RIUjsKIAlwcml2LT5maWZvX3N0YXJ2ZSA9IERFRkFVTFRfRklGT19UWF9TVEFSVkU7CiAJcHJpdi0+Zmlmb19zdGFydmVfb2ZmID0gREVGQVVMVF9GSUZPX1RYX1NUQVJWRV9PRkY7Ci0JcHJpdi0+YmRfc3Rhc2hfZW4gPSBERUZBVUxUX0JEX1NUQVNIOwogCiAJLyogQ3JlYXRlIG91ciBzeXNmcyBmaWxlcyAqLwogCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2JkX3N0YXNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCA3ZThiM2M1Li4zMTBlZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCkBAIC0xNzEsNyArMTcxLDcgQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiIKIEtFUk5fSU5GTyAiICAgU29tZSBtb2RpZmljYXRpb25zIGJ5IEVyaWMga2FzdGVuIDxrYXN0ZW5AbnNjbC5tc3UuZWR1PlxuIgogS0VSTl9JTkZPICIgICBGdXJ0aGVyIG1vZGlmaWNhdGlvbnMgYnkgS2VpdGggVW5kZXJ3b29kIDxrZWl0aHVAcGFybC5jbGVtc29uLmVkdT5cbiI7CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgX19jb25zdGFudF9odG9ucyhJUFBST1RPX1VEUCkpOyBcCisgICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1VEUCkpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAodWgpLT5sZW4pOyBcCiB9IHdoaWxlICgwKQogCkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgX19jb25zdGFudF9odG9ucyhJUFBST1RPX1RDUCkpOyBcCisgICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1RDUCkpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCBodG9ucyhsZW4pKTsgXAogfSB3aGlsZSAoMCkKICNlbmRpZgpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAkgICAgLyogdGFjayBvbiBjaGVja3N1bSB0YWcgKi8KIAkgICAgdTMyIHRhZ3ZhbCA9IDA7CiAJICAgIHN0cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7Ci0JICAgIGlmIChlaC0+aF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSkgeworCSAgICBpZiAoZWgtPmhfcHJvdG8gPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CiAJCXN0cnVjdCBpcGhkciAqaWggPSAoc3RydWN0IGlwaGRyICopKChjaGFyICopZWggKyBFVEhfSExFTik7CiAJCWlmIChpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKIAkJICAgIHN0cnVjdCB1ZHBoZHIgKnVoCkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogCQkJCSAqLwogCQkJCWlmIChudG9ocyhpaC0+dG90X2xlbikgPj0gNDYpewogCQkJCQkvKiBkb24ndCB3b3JyeSBhYm91dCBmcmFncyAqLwotCQkJCQlpZiAoIShpaC0+ZnJhZ19vZmYgJiBfX2NvbnN0YW50X2h0b25zKElQX01GfElQX09GRlNFVCkpKSB7CisJCQkJCWlmICghKGloLT5mcmFnX29mZiAmIGNwdV90b19iZTE2KElQX01GfElQX09GRlNFVCkpKSB7CiAJCQkJCQl1MzIgaW52ID0gKih1MzIgKikgJmJ1Zl9hZGRyW2RhdGFfc2l6ZSAtIDE2XTsKIAkJCQkJCXUzMiAqcCA9ICh1MzIgKikgJmJ1Zl9hZGRyW2RhdGFfc2l6ZSAtIDIwXTsKIAkJCQkJCXJlZ2lzdGVyIHUzMiBjcmMsIHBfciwgcF9yMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDJkNDA4OTguLjE1NTE2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtMzIyLDIzICszMjIsMjUgQEAKIAkucmVidWlsZAk9IHNwX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzcF9vcGVuX2RldiwKKwkubmRvX3N0b3AJCT0gc3BfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNwX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBzcF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgdm9pZCBzcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIEZpbmlzaCBzZXR0aW5nIHVwIHRoZSBERVZJQ0UgaW5mby4gKi8KLQlkZXYtPm10dQkJPSBTSVhQX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHNwX3htaXQ7Ci0JZGV2LT5vcGVuCQk9IHNwX29wZW5fZGV2OworCWRldi0+bmV0ZGV2X29wcwkJPSAmc3BfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5zdG9wCQk9IHNwX2Nsb3NlOwotCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSBzcF9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5tdHUJCT0gU0lYUF9NVFU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBBWDI1X01BWF9IRUFERVJfTEVOOwogCWRldi0+aGVhZGVyX29wcyAJPSAmc3BfaGVhZGVyX29wczsKIAogCWRldi0+YWRkcl9sZW4JCT0gQVgyNV9BRERSX0xFTjsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX0FYMjU7CiAJZGV2LT50eF9xdWV1ZV9sZW4JPSAxMDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gTlVMTDsKIAogCS8qIE9ubHkgYWN0aXZhdGVkIGluIEFYLjI1IG1vZGUgKi8KIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKQEAgLTc4OCw5ICs3OTAsOSBAQAogCiAvKiBJbml0aWFsaXplIDZwYWNrIGNvbnRyb2wgZGV2aWNlIC0tIHJlZ2lzdGVyIDZwYWNrIGxpbmUgZGlzY2lwbGluZSAqLwogCi1zdGF0aWMgY2hhciBtc2dfYmFubmVyW10gIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAorc3RhdGljIGNvbnN0IGNoYXIgbXNnX2Jhbm5lcltdICBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKIAkiQVguMjU6IDZwYWNrIGRyaXZlciwgIiBTSVhQQUNLX1ZFUlNJT04gIlxuIjsKLXN0YXRpYyBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSICBcCitzdGF0aWMgY29uc3QgY2hhciBtc2dfcmVnZmFpbFtdIF9faW5pdGRhdGEgPSBLRVJOX0VSUiAgXAogCSI2cGFjazogY2FuJ3QgcmVnaXN0ZXIgbGluZSBkaXNjaXBsaW5lIChlcnIgPSAlZClcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNpeHBhY2tfaW5pdF9kcml2ZXIodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwppbmRleCA4MWE2NWUzLi5iYjc4YzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCkBAIC0yMDMsNyArMjAzLDYgQEAKIAkJdW5zaWduZWQgY2hhciBidWZbVFhCVUZGRVJfU0laRV07CiAgICAgICAgIH0gaGRsY3R4OwogCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGludCBwdHRfa2V5ZWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsgIC8qIG5leHQgdHJhbnNtaXQgcGFja2V0ICAqLwogCkBAIC00MjMsNyArNDIyLDcgQEAKIAliYy0+aGRsY3R4LmJ1ZnB0ciA9IGJjLT5oZGxjdHguYnVmOwogCWJjLT5oZGxjdHguYnVmY250ID0gd3AgLSBiYy0+aGRsY3R4LmJ1ZjsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JYmMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwliYy0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTU0Nyw3ICs1NDYsNyBAQAogCXBrdGxlbiA9IGJjLT5oZGxjcnguYnVmY250LTIrMTsgLyogS0lTUyBrbHVkZ2UgKi8KIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdGxlbikpKSB7CiAJCXByaW50aygiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCWJjLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCWNwID0gc2tiX3B1dChza2IsIHBrdGxlbik7CkBAIC01NTUsNyArNTU0LDcgQEAKIAltZW1jcHkoY3AsIGJjLT5oZGxjcnguYnVmLCBwa3RsZW4gLSAxKTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwotCWJjLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiB9CiAKIHN0YXRpYyBpbnQgcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY250KQpAQCAtODAyLDE5ICs4MDEsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiYXljb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJheWNvbV9zdGF0ZSAqYmMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJmJjLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIGVwcF93YWtldXAodm9pZCAqaGFuZGxlKQogewogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaGFuZGxlOwpAQCAtMTA2NSwxMCArMTA1MSwxMCBAQAogCQloaS5kYXRhLmNzLnB0dCA9ICEhKGJjLT5zdGF0ICYgRVBQX1BUVEJJVCk7CiAJCWhpLmRhdGEuY3MuZGNkID0gIShiYy0+c3RhdCAmIEVQUF9EQ0RCSVQpOwogCQloaS5kYXRhLmNzLnB0dF9rZXllZCA9IGJjLT5wdHRfa2V5ZWQ7Ci0JCWhpLmRhdGEuY3MudHhfcGFja2V0cyA9IGJjLT5zdGF0cy50eF9wYWNrZXRzOwotCQloaS5kYXRhLmNzLnR4X2Vycm9ycyA9IGJjLT5zdGF0cy50eF9lcnJvcnM7Ci0JCWhpLmRhdGEuY3MucnhfcGFja2V0cyA9IGJjLT5zdGF0cy5yeF9wYWNrZXRzOwotCQloaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IGJjLT5zdGF0cy5yeF9lcnJvcnM7CisJCWhpLmRhdGEuY3MudHhfcGFja2V0cyA9IGRldi0+c3RhdHMudHhfcGFja2V0czsKKwkJaGkuZGF0YS5jcy50eF9lcnJvcnMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKKwkJaGkuZGF0YS5jcy5yeF9wYWNrZXRzID0gZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCQloaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IGRldi0+c3RhdHMucnhfZXJyb3JzOwogCQlicmVhazsJCQogCiAJY2FzZSBIRExDRFJWQ1RMX09MREdFVFNUQVQ6CkBAIC0xMTE2LDYgKzExMDIsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF5Y29tX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBlcHBfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGVwcF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCSAgICAgPSBiYXljb21faW9jdGwsCisJLm5kb19zdGFydF94bWl0ICAgICAgPSBiYXljb21fc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBiYXljb21fc2V0X21hY19hZGRyZXNzLAorfTsKKwogLyoKICAqIENoZWNrIGZvciBhIG5ldHdvcmsgYWRhcHRvciBvZiB0aGlzIHR5cGUsIGFuZCByZXR1cm4gJzAnIGlmIG9uZSBleGlzdHMuCiAgKiBJZiBkZXYtPmJhc2VfYWRkciA9PSAwLCBwcm9iZSBhbGwgbGlrZWx5IGxvY2F0aW9ucy4KQEAgLTExNDMsMTcgKzExMzcsMTIgQEAKIAkvKgogCSAqIGluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3QKIAkgKi8KLQlkZXYtPm9wZW4gPSBlcHBfb3BlbjsKLQlkZXYtPnN0b3AgPSBlcHBfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGJheWNvbV9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJheWNvbV9zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cyA9IGJheWNvbV9nZXRfc3RhdHM7CiAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAliYy0+c2tiID0gTlVMTDsKIAkKKwlkZXYtPm5ldGRldl9vcHMgPSAmYmF5Y29tX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmF4MjVfaGVhZGVyX29wczsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJheWNvbV9zZXRfbWFjX2FkZHJlc3M7CiAJCiAJZGV2LT50eXBlID0gQVJQSFJEX0FYMjU7ICAgICAgICAgICAvKiBBRl9BWDI1IGRldmljZSAqLwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQVgyNV9NQVhfSEVBREVSX0xFTiArIEFYMjVfQlBRX0hFQURFUl9MRU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCA0NmY4ZjMzLi5kNTA5YjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTg3LDcgKzg3LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2JwcWV0aGVyLmg+CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkFYLjI1OiBicHFldGhlciBkcml2ZXIgdmVyc2lvbiAwMDRcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKKwkiQVguMjU6IGJwcWV0aGVyIGRyaXZlciB2ZXJzaW9uIDAwNFxuIjsKIAogc3RhdGljIGNoYXIgYmNhc3RfYWRkcls2XT17MHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZ9OwogCkBAIC05Niw4ICs5Nyw4IEBACiBzdGF0aWMgaW50IGJwcV9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBicHFfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJwcV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQlBRKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYnBxX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9CUFEpLAogCS5mdW5jCT0gYnBxX3JjdiwKIH07CiAKQEAgLTExMCw3ICsxMTEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYnBxX2xpc3Q7CS8qIGxpc3Qgb2YgYnBxIGRldmljZXMgY2hhaW4gKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqZXRoZGV2OwkvKiBsaW5rIHRvIGV0aGVybmV0IGRldmljZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpheGRldjsJLyogYnBxIGRldmljZSAoYnBxIykgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJLyogc29tZSBzdGF0aXN0aWNzICovCiAJY2hhciAgIGRlc3RfYWRkcls2XTsJCS8qIGV0aGVyIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KIAljaGFyICAgYWNwdF9hZGRyWzZdOwkJLyogYWNjZXB0IGV0aGVyIGZyYW1lcyBmcm9tIHRoaXMgYWRkcmVzcyBvbmx5ICovCiB9OwpAQCAtMjIyLDggKzIyMiw4IEBACiAJc2tiX3B1bGwoc2tiLCAyKTsJLyogUmVtb3ZlIHRoZSBsZW5ndGggYnl0ZXMgKi8KIAlza2JfdHJpbShza2IsIGxlbik7CS8qIFNldCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhICovCiAKLQlicHEtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlicHEtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAogCXB0ciA9IHNrYl9wdXNoKHNrYiwgMSk7CiAJKnB0ciA9IDA7CkBAIC0yOTIsNyArMjkyLDcgQEAKIAlicHEgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKChkZXYgPSBicHFfZ2V0X2V0aGVyX2RldihkZXYpKSA9PSBOVUxMKSB7Ci0JCWJwcS0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTMwMCw4ICszMDAsOCBAQAogCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCWRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfQlBRLCBicHEtPmRlc3RfYWRkciwgTlVMTCwgMCk7Ci0JYnBxLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JYnBxLT5zdGF0cy50eF9ieXRlcys9c2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcys9c2tiLT5sZW47CiAgIAogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMzA5LDE2ICszMDksNiBAQAogfQogCiAvKgotICoJU3RhdGlzdGljcwotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJwcV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYnBxZGV2ICpicHEgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZicHEtPnN0YXRzOwotfQotCi0vKgogICoJU2V0IEFYLjI1IGNhbGxzaWduCiAgKi8KIHN0YXRpYyBpbnQgYnBxX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQpAQCAtMzk2LDYgKzM4Niw3IEBACiAgKglQcm9jIGZpbGVzeXN0ZW0KICAqLwogc3RhdGljIHZvaWQgKmJwcV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoUkNVKQogewogCWludCBpID0gMTsKIAlzdHJ1Y3QgYnBxZGV2ICpicHFkZXY7CkBAIC00MjgsNiArNDE5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYnBxX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoUkNVKQogewogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtNDU0LDcgKzQ0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBxX3NlcW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBxX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSBicHFfc2VxX3N0YXJ0LAogCS5uZXh0ID0gYnBxX3NlcV9uZXh0LAogCS5zdG9wID0gYnBxX3NlcV9zdG9wLApAQCAtNDc3LDE2ICs0NjksMTcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnBxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBicHFfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGJwcV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJICAgICA9IGJwcV94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gYnBxX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCSAgICAgPSBicHFfaW9jdGwsCit9OwogCiBzdGF0aWMgdm9pZCBicHFfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYnBxX3htaXQ7Ci0JZGV2LT5vcGVuCSAgICAgPSBicHFfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IGJwcV9jbG9zZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJwcV9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICA9IGJwcV9nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bAkgICAgID0gYnBxX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcwkgICAgID0gJmJwcV9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7CiAKIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKaW5kZXggZTY3MTAzMy4uODgxYmY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCWludCBjaGlwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNjY19pbmZvICppbmZvOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCiAJaW50IGNoYW5uZWw7CiAJaW50IGNhcmRfYmFzZSwgc2NjX2NtZCwgc2NjX2RhdGE7CiAJaW50IHRtcl9jbnQsIHRtcl9jdHJsLCB0bXJfbW9kZTsKQEAgLTIzOSw3ICsyMzksNiBAQAogc3RhdGljIGludCBzY2NfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNjY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiBzdGF0aWMgaW50IHNjY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2NjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2NjX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpzYSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0eF9vbihzdHJ1Y3Qgc2NjX3ByaXYgKnByaXYpOwpAQCAtNDQxLDYgKzQ0MCwxMyBAQAogCW1lbWNweShkZXYtPmRldl9hZGRyLCAmYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBzY2Nfb3BlbiwKKwkubmRvX3N0b3AgPSBzY2NfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gc2NjX3NlbmRfcGFja2V0LAorCS5uZG9fZG9faW9jdGwgPSBzY2NfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9hZGFwdGVyKGludCBjYXJkX2Jhc2UsIGludCB0eXBlLCBpbnQgbikKIHsKIAlpbnQgaSwgaXJxLCBjaGlwOwpAQCAtNTc2LDExICs1ODIsNyBAQAogCQlzcHJpbnRmKGRldi0+bmFtZSwgImRtYXNjYyVpIiwgMiAqIG4gKyBpKTsKIAkJZGV2LT5iYXNlX2FkZHIgPSBjYXJkX2Jhc2U7CiAJCWRldi0+aXJxID0gaXJxOwotCQlkZXYtPm9wZW4gPSBzY2Nfb3BlbjsKLQkJZGV2LT5zdG9wID0gc2NjX2Nsb3NlOwotCQlkZXYtPmRvX2lvY3RsID0gc2NjX2lvY3RsOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNjY19zZW5kX3BhY2tldDsKLQkJZGV2LT5nZXRfc3RhdHMgPSBzY2NfZ2V0X3N0YXRzOworCQlkZXYtPm5ldGRldl9vcHMgPSAmc2NjX25ldGRldl9vcHM7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7CiAJCWRldi0+c2V0X21hY19hZGRyZXNzID0gc2NjX3NldF9tYWNfYWRkcmVzczsKIAl9CkBAIC05NjEsMTQgKzk2Myw2IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzY2NfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNjY19wcml2ICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotCiBzdGF0aWMgaW50IHNjY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqc2EpCiB7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICgoc3RydWN0IHNvY2thZGRyICopIHNhKS0+c2FfZGF0YSwKQEAgLTEyMTYsMTcgKzEyMTAsMTcgQEAKIAkJfQogCQlpZiAocHJpdi0+cnhfb3ZlcikgewogCQkJLyogV2UgaGFkIGFuIG92ZXJydW4gKi8KLQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChwcml2LT5yeF9vdmVyID09IDIpCi0JCQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJZWxzZQotCQkJCXByaXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQkJcHJpdi0+cnhfb3ZlciA9IDA7CiAJCX0gZWxzZSBpZiAocmMgJiBDUkNfRVJSKSB7CiAJCQkvKiBDb3VudCBpbnZhbGlkIENSQyBvbmx5IGlmIHBhY2tldCBsZW5ndGggPj0gbWluaW11bSAqLwogCQkJaWYgKGNiID49IDE1KSB7Ci0JCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoY2IgPj0gMTUpIHsKQEAgLTEyMzksOCArMTIzMyw4IEBACiAJCQkJCXByaXYtPnJ4X2NvdW50Kys7CiAJCQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJ4X3dvcmspOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlwcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0xMjc1LDcgKzEyNjksNyBAQAogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGNiICsgMSk7CiAJCWlmIChza2IgPT0gTlVMTCkgewogCQkJLyogRHJvcCBwYWNrZXQgKi8KLQkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9IGVsc2UgewogCQkJLyogRmlsbCBidWZmZXIgKi8KIAkJCWRhdGEgPSBza2JfcHV0KHNrYiwgY2IgKyAxKTsKQEAgLTEyODMsOCArMTI3Nyw4IEBACiAJCQltZW1jcHkoJmRhdGFbMV0sIHByaXYtPnJ4X2J1ZltpXSwgY2IpOwogCQkJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIHByaXYtPmRldik7CiAJCQluZXRpZl9yeChza2IpOwotCQkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gY2I7CisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY2I7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJpbmdfbG9jaywgZmxhZ3MpOwogCQkvKiBNb3ZlIHRhaWwgKi8KQEAgLTEzNTEsMTUgKzEzNDUsMTUgQEAKIAkJCXdyaXRlX3NjYyhwcml2LCBSMSwgRVhUX0lOVF9FTkFCIHwgV1RfRk5fUkRZRk4pOwogCQlpZiAocmVzKSB7CiAJCQkvKiBVcGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgKi8KLQkJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkvKiBPdGhlciB1bmRlcnJ1biBpbnRlcnJ1cHRzIG1heSBhbHJlYWR5IGJlIHdhaXRpbmcgKi8KIAkJCXdyaXRlX3NjYyhwcml2LCBSMCwgUkVTX0VYVF9JTlQpOwogCQkJd3JpdGVfc2NjKHByaXYsIFIwLCBSRVNfRVhUX0lOVCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBVcGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgKi8KLQkJCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHByaXYtPnR4X2xlbltpXTsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBwcml2LT50eF9sZW5baV07CiAJCQkvKiBSZW1vdmUgZnJhbWUgZnJvbSBGSUZPICovCiAJCQlwcml2LT50eF90YWlsID0gKGkgKyAxKSAlIE5VTV9UWF9CVUY7CiAJCQlwcml2LT50eF9jb3VudC0tOwpAQCAtMTQyNSw3ICsxNDE5LDcgQEAKIAkJd3JpdGVfc2NjKHByaXYsIFIxNSwgRENESUUpOwogCQlwcml2LT5ycjAgPSByZWFkX3NjYyhwcml2LCBSMCk7CiAJCWlmIChwcml2LT5ycjAgJiBEQ0QpIHsKLQkJCXByaXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQkJcnhfb24ocHJpdik7CiAJCQlwcml2LT5zdGF0ZSA9IFJYX09OOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCmluZGV4IDhlYmE2MWExLi42MWRlNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlwa3RfbGVuID0gcy0+aGRsY3J4LmxlbiAtIDIgKyAxOyAvKiBLSVNTIGtsdWRnZSAqLwogCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKSB7CiAJCXByaW50aygiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJY3AgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAltZW1jcHkoY3AsIHMtPmhkbGNyeC5idWZmZXIsIHBrdF9sZW4gLSAxKTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwotCXMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIH0KIAogdm9pZCBoZGxjZHJ2X3JlY2VpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzKQpAQCAtMzI2LDcgKzMyNiw3IEBACiAJCQlzLT5oZGxjdHgubGVuID0gcGt0X2xlbisyOyAvKiB0aGUgYXBwZW5kZWQgQ1JDICovCiAJCQlzLT5oZGxjdHgudHhfc3RhdGUgPSAyOwogCQkJcy0+aGRsY3R4LmJpdHN0cmVhbSA9IDA7Ci0JCQlzLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQlpZiAoIXMtPmhkbGN0eC5sZW4pIHsKQEAgLTQyNywxOSArNDI3LDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaGRsY2Rydl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSAqc20gPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJnNtLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogT3Blbi9pbml0aWFsaXplIHRoZSBib2FyZC4gVGhpcyBpcyBjYWxsZWQgKGluIHRoZSBjdXJyZW50IGtlcm5lbCkKICAqIHNvbWV0aW1lIGFmdGVyIGJvb3Rpbmcgd2hlbiB0aGUgJ2lmY29uZmlnJyBwcm9ncmFtIGlzIHJ1bi4KQEAgLTU2OCwxMCArNTU1LDEwIEBACiAJCWJpLmRhdGEuY3MucHR0ID0gaGRsY2Rydl9wdHQocyk7CiAJCWJpLmRhdGEuY3MuZGNkID0gcy0+aGRsY3J4LmRjZDsKIAkJYmkuZGF0YS5jcy5wdHRfa2V5ZWQgPSBzLT5wdHRfa2V5ZWQ7Ci0JCWJpLmRhdGEuY3MudHhfcGFja2V0cyA9IHMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCWJpLmRhdGEuY3MudHhfZXJyb3JzID0gcy0+c3RhdHMudHhfZXJyb3JzOwotCQliaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBzLT5zdGF0cy5yeF9wYWNrZXRzOwotCQliaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IHMtPnN0YXRzLnJ4X2Vycm9yczsKKwkJYmkuZGF0YS5jcy50eF9wYWNrZXRzID0gZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQliaS5kYXRhLmNzLnR4X2Vycm9ycyA9IGRldi0+c3RhdHMudHhfZXJyb3JzOworCQliaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJCWJpLmRhdGEuY3MucnhfZXJyb3JzID0gZGV2LT5zdGF0cy5yeF9lcnJvcnM7CiAJCWJyZWFrOwkJCiAKIAljYXNlIEhETENEUlZDVExfT0xER0VUU1RBVDoKQEAgLTYzMCw2ICs2MTcsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rydl9uZXRkZXYgPSB7CisJLm5kb19vcGVuCT0gaGRsY2Rydl9vcGVuLAorCS5uZG9fc3RvcAk9IGhkbGNkcnZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY2Rydl9zZW5kX3BhY2tldCwKKwkubmRvX2RvX2lvY3RsCT0gaGRsY2Rydl9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGhkbGNkcnZfc2V0X21hY19hZGRyZXNzLAorfTsKKwogLyoKICAqIEluaXRpYWxpemUgZmllbGRzIGluIGhkbGNkcnYKICAqLwpAQCAtNjY5LDIxICs2NjQsMTMgQEAKIAlzLT5iaXRidWZfaGRsYy5zaHJlZyA9IDB4ODA7CiAjZW5kaWYgLyogSERMQ0RSVl9ERUJVRyAqLwogCi0JLyoKLQkgKiBpbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0Ci0JICovCi0JZGV2LT5vcGVuID0gaGRsY2Rydl9vcGVuOwotCWRldi0+c3RvcCA9IGhkbGNkcnZfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGhkbGNkcnZfaW9jdGw7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjZHJ2X3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0gaGRsY2Rydl9nZXRfc3RhdHM7CiAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAogCXMtPnNrYiA9IE5VTEw7CiAJCisJZGV2LT5uZXRkZXZfb3BzID0gJmhkbGNkcnZfbmV0ZGV2OwogCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBoZGxjZHJ2X3NldF9tYWNfYWRkcmVzczsKIAkKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVgyNTsgICAgICAgICAgIC8qIEFGX0FYMjUgZGV2aWNlICovCiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOICsgQVgyNV9CUFFfSEVBREVSX0xFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IGJiZGIzMTEuLjAzMmMwZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtNTksOCArNTksNiBAQAogCXVuc2lnbmVkIGNoYXIJCSp4aGVhZDsJLyogcG9pbnRlciB0byBuZXh0IGJ5dGUgdG8gWE1JVCAqLwogCWludAkJCXhsZWZ0OwkvKiBieXRlcyBsZWZ0IGluIFhNSVQgcXVldWUgICAgICovCiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKLQogCS8qIERldGFpbGVkIFNMSVAgc3RhdGlzdGljcy4gKi8KIAlpbnQJCW10dTsJCS8qIE91ciBtdHUgKHRvIHNwb3QgY2hhbmdlcyEpICAgKi8KIAlpbnQJCWJ1ZmZzaXplOwkvKiBNYXggYnVmZmVycyBzaXplcyAgICAgICAgICAgICovCkBAIC0yNTMsNyArMjUxLDcgQEAKIAlpZiAoYXgtPnJidWZmWzBdID4gMHgwZikgewogCQlpZiAoYXgtPnJidWZmWzBdICYgMHg4MCkgewogCQkJaWYgKGNoZWNrX2NyY18xNihheC0+cmJ1ZmYsIGF4LT5yY291bnQpIDwgMCkgewotCQkJCWF4LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlheC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogCiAJCQkJcmV0dXJuOwpAQCAtMjY4LDcgKzI2Niw3IEBACiAJCQkqYXgtPnJidWZmICY9IH4weDgwOwogCQl9IGVsc2UgaWYgKGF4LT5yYnVmZlswXSAmIDB4MjApICB7CiAJCQlpZiAoY2hlY2tfY3JjX2ZsZXgoYXgtPnJidWZmLCBheC0+cmNvdW50KSA8IDApIHsKLQkJCQlheC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJYXgtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0yOTUsNyArMjkzLDcgQEAKIAlpZiAoKHNrYiA9IGRldl9hbGxvY19za2IoY291bnQpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWtpc3M6ICVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKIAkJICAgICAgIGF4LT5kZXYtPm5hbWUpOwotCQlheC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlheC0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC0zMDMsOCArMzAxLDggQEAKIAltZW1jcHkoc2tiX3B1dChza2IsY291bnQpLCBheC0+cmJ1ZmYsIGNvdW50KTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgYXgtPmRldik7CiAJbmV0aWZfcngoc2tiKTsKLQlheC0+c3RhdHMucnhfcGFja2V0cysrOwotCWF4LT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKKwlheC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJYXgtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY291bnQ7CiAJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIH0KIApAQCAtMzQ0LDcgKzM0Miw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlheC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJYXgtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJc2V0X2JpdChBWEZfRVJST1IsICZheC0+ZmxhZ3MpOwogCX0KIAlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwpAQCAtNDA2LDcgKzQwNCw3IEBACiAJCQltZW1jcHkoYXgtPnhidWZmLCBheC0+eGhlYWQsIGF4LT54bGVmdCk7CiAJCX0gZWxzZSAgewogCQkJYXgtPnhsZWZ0ID0gMDsKLQkJCWF4LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIApAQCAtNDE3LDcgKzQxNSw3IEBACiAJCQltZW1jcHkoYXgtPnJidWZmLCBvcmJ1ZmYsIGF4LT5yY291bnQpOwogCQl9IGVsc2UgIHsKIAkJCWF4LT5yY291bnQgPSAwOwotCQkJYXgtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCQlzZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncyk7CiAJCX0KIAl9CkBAIC00NDQsNyArNDQyLDcgQEAKIAlpZiAobGVuID4gYXgtPm10dSkgewkJLyogU2lnaCwgc2hvdWxkbid0IG9jY3VyIEJVVCAuLi4gKi8KIAkJbGVuID0gYXgtPm10dTsKIAkJcHJpbnRrKEtFUk5fRVJSICJta2lzczogJXM6IHRydW5jYXRpbmcgb3ZlcnNpemVkIHRyYW5zbWl0IHBhY2tldCFcbiIsIGF4LT5kZXYtPm5hbWUpOwotCQlheC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTUxOCw4ICs1MTYsOCBAQAogCiAJc2V0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmYXgtPnR0eS0+ZmxhZ3MpOwogCWFjdHVhbCA9IGF4LT50dHktPm9wcy0+d3JpdGUoYXgtPnR0eSwgYXgtPnhidWZmLCBjb3VudCk7Ci0JYXgtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlheC0+c3RhdHMudHhfYnl0ZXMgKz0gYWN0dWFsOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gYWN0dWFsOwogCiAJYXgtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWF4LT54bGVmdCA9IGNvdW50IC0gYWN0dWFsOwpAQCAtNjY0LDMyICs2NjIsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpheF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbWtpc3MgKmF4ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmYXgtPnN0YXRzOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgYXhfaGVhZGVyX29wcyA9IHsKIAkuY3JlYXRlICAgID0gYXhfaGVhZGVyLAogCS5yZWJ1aWxkICAgPSBheF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICA9IGF4X29wZW5fZGV2LAorCS5uZG9fc3RvcCAgICAgICAgICAgID0gYXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBheF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gYXhfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIHZvaWQgYXhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBGaW5pc2ggc2V0dGluZyB1cCB0aGUgREVWSUNFIGluZm8uICovCiAJZGV2LT5tdHUgICAgICAgICAgICAgPSBBWF9NVFU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBheF94bWl0OwotCWRldi0+b3BlbiAgICAgICAgICAgID0gYXhfb3Blbl9kZXY7Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSBheF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gYXhfZ2V0X3N0YXRzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYXhfc2V0X21hY19hZGRyZXNzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKIAlkZXYtPmFkZHJfbGVuICAgICAgICA9IDA7CiAJZGV2LT50eXBlICAgICAgICAgICAgPSBBUlBIUkRfQVgyNTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgICA9IDEwOwogCWRldi0+aGVhZGVyX29wcyAgICAgID0gJmF4X2hlYWRlcl9vcHM7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmYXhfbmV0ZGV2X29wczsKIAogCiAJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7CkBAIC05MjksNyArOTIzLDcgQEAKIAl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoZnAgIT0gTlVMTCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncykpCi0JCQkJYXgtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWF4LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJY3ArKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC05ODIsOSArOTc2LDkgQEAKIAkud3JpdGVfd2FrZXVwCT0gbWtpc3Nfd3JpdGVfd2FrZXVwCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAogCSJta2lzczogQVguMjUgTXVsdGlraXNzLCBIYW5zIEFsYmFzIFBFMUFZWFxuIjsKLXN0YXRpYyBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSIFwKK3N0YXRpYyBjb25zdCBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSIFwKIAkibWtpc3M6IGNhbid0IHJlZ2lzdGVyIGxpbmUgZGlzY2lwbGluZSAoZXJyID0gJWQpXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBta2lzc19pbml0X2RyaXZlcih2b2lkKQpAQCAtOTkzLDggKzk4Nyw5IEBACiAKIAlwcmludGsoYmFubmVyKTsKIAotCWlmICgoc3RhdHVzID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fQVgyNSwgJmF4X2xkaXNjKSkgIT0gMCkKLQkJcHJpbnRrKG1zZ19yZWdmYWlsKTsKKwlzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9BWDI1LCAmYXhfbGRpc2MpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcHJpbnRrKG1zZ19yZWdmYWlsLCBzdGF0dXMpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKaW5kZXggYzAxMWFmNy4uZDcxMmU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKQEAgLTE4NCw3ICsxODQsOCBAQAogCiAjaW5jbHVkZSAiejg1MzAuaCIKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiQVguMjU6IFo4NTMwIFNDQyBkcml2ZXIgdmVyc2lvbiAiVkVSU0lPTiIuZGwxYmtlXG4iOworc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCisJIkFYLjI1OiBaODUzMCBTQ0MgZHJpdmVyIHZlcnNpb24gIlZFUlNJT04iLmRsMWJrZVxuIjsKIAogc3RhdGljIHZvaWQgdF9kd2FpdCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIHRfdHhkZWxheSh1bnNpZ25lZCBsb25nKTsKQEAgLTE1NDIsMjMgKzE1NDMsMjQgQEAKIC8qICoJCQkgICAgTmV0d29yayBkcml2ZXIgbWV0aG9kcwkJICAgICAgKiAqLwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICA9IHNjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IHNjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBzY2NfbmV0X3R4LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gc2NjX25ldF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19nZXRfc3RhdHMgICAgICAgPSBzY2NfbmV0X2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsICAgICAgICA9IHNjY19uZXRfaW9jdGwsCit9OworCiAvKiAtLS0tPiBJbml0aWFsaXplIGRldmljZSA8LS0tLS0gKi8KIAogc3RhdGljIHZvaWQgc2NjX25ldF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+dHhfcXVldWVfbGVuICAgID0gMTY7CS8qIHNob3VsZCBiZSBlbm91Z2guLi4gKi8KIAotCWRldi0+b3BlbiAgICAgICAgICAgID0gc2NjX25ldF9vcGVuOwotCWRldi0+c3RvcAkgICAgID0gc2NjX25ldF9jbG9zZTsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc2NjX25ldF90eDsKKwlkZXYtPm5ldGRldl9vcHMJICAgICA9ICZzY2NfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgICAgICA9ICZheDI1X2hlYWRlcl9vcHM7CiAKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNjY19uZXRfc2V0X21hY19hZGRyZXNzOwotCWRldi0+Z2V0X3N0YXRzICAgICAgID0gc2NjX25ldF9nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBzY2NfbmV0X2lvY3RsOwotCWRldi0+dHhfdGltZW91dCAgICAgID0gTlVMTDsKLQogCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsICBBWDI1X0FERFJfTEVOKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgICZheDI1X2RlZmFkZHIsIEFYMjVfQUREUl9MRU4pOwogIApAQCAtMjA3Myw3ICsyMDc1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NjX25ldF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY2NfbmV0X3NlcV9vcHMgPSB7CiAJLnN0YXJ0ICA9IHNjY19uZXRfc2VxX3N0YXJ0LAogCS5uZXh0ICAgPSBzY2NfbmV0X3NlcV9uZXh0LAogCS5zdG9wICAgPSBzY2NfbmV0X3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCA1NDA3Zjc0Li41MDBhNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtNzcsNyArNzcsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIHlhbV9kcnZuYW1lW10gPSAieWFtIjsKLXN0YXRpYyBjaGFyIHlhbV9kcnZpbmZvW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiWUFNIGRyaXZlciB2ZXJzaW9uIDAuOCBieSBGMU9BVC9GNkZCQlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHlhbV9kcnZpbmZvW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCisJIllBTSBkcml2ZXIgdmVyc2lvbiAwLjggYnkgRjFPQVQvRjZGQkJcbiI7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMTUsMTAgKzExNiw2IEBACiAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JLyogU3RhdHMgc2VjdGlvbiAqLwotCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KIAlpbnQgbmJfcnhpbnQ7CiAJaW50IG5iX21kaW50OwogCkBAIC01MDcsNyArNTA0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCQkJKyt5cC0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCQkrK2Rldi0+c3RhdHMucnhfZHJvcHBlZDsKIAkJCX0gZWxzZSB7CiAJCQkJdW5zaWduZWQgY2hhciAqY3A7CiAJCQkJY3AgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CkBAIC01MTUsNyArNTEyLDcgQEAKIAkJCQltZW1jcHkoY3AsIHlwLT5yeF9idWYsIHBrdF9sZW4gLSAxKTsKIAkJCQlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJCQluZXRpZl9yeChza2IpOwotCQkJCSsreXAtPnN0YXRzLnJ4X3BhY2tldHM7CisJCQkJKytkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CiAJCQl9CiAJCX0KIAl9CkBAIC02NzcsNyArNjc0LDcgQEAKIAkJCXlwLT50eF9jb3VudCA9IDE7CiAJCQl5cC0+dHhfc3RhdGUgPSBUWF9IRUFEOwogCQl9Ci0JCSsreXAtPnN0YXRzLnR4X3BhY2tldHM7CisJCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOwogCQlicmVhazsKIAljYXNlIFRYX1RBSUw6CiAJCWlmICgtLXlwLT50eF9jb3VudCA8PSAwKSB7CkBAIC03MTYsNyArNzEzLDcgQEAKIAkJCWhhbmRsZWQgPSAxOwogCiAJCQlpZiAobHNyICYgTFNSX09FKQotCQkJCSsreXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzOworCQkJCSsrZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9yczsKIAogCQkJeXAtPmRjZCA9IChtc3IgJiBSWF9EQ0QpID8gMSA6IDA7CiAKQEAgLTc3OCwxNiArNzc1LDE2IEBACiAJc2VxX3ByaW50ZihzZXEsICIgIFR4VGFpbCAgICV1XG4iLCB5cC0+dHh0YWlsKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgU2xvdFRpbWUgJXVcbiIsIHlwLT5zbG90KTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgUGVyc2lzdCAgJXVcbiIsIHlwLT5wZXJzKTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgVHhGcmFtZXMgJWx1XG4iLCB5cC0+c3RhdHMudHhfcGFja2V0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICIgIFJ4RnJhbWVzICVsdVxuIiwgeXAtPnN0YXRzLnJ4X3BhY2tldHMpOworCXNlcV9wcmludGYoc2VxLCAiICBUeEZyYW1lcyAlbHVcbiIsIGRldi0+c3RhdHMudHhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsICIgIFJ4RnJhbWVzICVsdVxuIiwgZGV2LT5zdGF0cy5yeF9wYWNrZXRzKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgVHhJbnQgICAgJXVcbiIsIHlwLT5uYl9tZGludCk7CiAJc2VxX3ByaW50ZihzZXEsICIgIFJ4SW50ICAgICV1XG4iLCB5cC0+bmJfcnhpbnQpOwotCXNlcV9wcmludGYoc2VxLCAiICBSeE92ZXIgICAlbHVcbiIsIHlwLT5zdGF0cy5yeF9maWZvX2Vycm9ycyk7CisJc2VxX3ByaW50ZihzZXEsICIgIFJ4T3ZlciAgICVsdVxuIiwgZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyk7CiAJc2VxX3ByaW50ZihzZXEsICJcbiIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHlhbV9zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHlhbV9zZXFvcHMgPSB7CiAJLnN0YXJ0ID0geWFtX3NlcV9zdGFydCwKIAkubmV4dCA9IHlhbV9zZXFfbmV4dCwKIAkuc3RvcCA9IHlhbV9zZXFfc3RvcCwKQEAgLTgxMiwyNiArODA5LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqeWFtX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB5YW1fcG9ydCAqeXA7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQl5cCA9IG5ldGRldl9wcml2KGRldik7Ci0JaWYgKHlwLT5tYWdpYyAhPSBZQU1fTUFHSUMpCi0JCXJldHVybiBOVUxMOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJnlwLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyBpbnQgeWFtX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeWFtX3BvcnQgKnlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTg3NywxMCArODU0LDEwIEBACiAKIAkvKiBSZXNldCBvdmVycnVucyBmb3IgYWxsIHBvcnRzIC0gRlBHQSBwcm9ncmFtbWluZyBtYWtlcyBvdmVycnVucyAqLwogCWZvciAoaSA9IDA7IGkgPCBOUl9QT1JUUzsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB5YW1fZGV2c1tpXTsKLQkJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7Ci0JCWluYihMU1IoZGV2LT5iYXNlX2FkZHIpKTsKLQkJeXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gMDsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKnlhbV9kZXYgPSB5YW1fZGV2c1tpXTsKKworCQlpbmIoTFNSKHlhbV9kZXYtPmJhc2VfYWRkcikpOworCQl5YW1fZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IDA7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgYXQgaW9iYXNlIDB4JWx4IGlycSAldSB1YXJ0ICVzXG4iLCBkZXYtPm5hbWUsIGRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSwKQEAgLTEwNjgsNiArMTA0NSwxNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB5YW1fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IHlhbV9vcGVuLAorCS5uZG9fc3RvcAkgICAgID0geWFtX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAgID0geWFtX3NlbmRfcGFja2V0LAorCS5uZG9fZG9faW9jdGwgCSAgICAgPSB5YW1faW9jdGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB5YW1fc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIHZvaWQgeWFtX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMDg4LDE4ICsxMDczLDExIEBACiAJZGV2LT5iYXNlX2FkZHIgPSB5cC0+aW9iYXNlOwogCWRldi0+aXJxID0geXAtPmlycTsKIAotCWRldi0+b3BlbiA9IHlhbV9vcGVuOwotCWRldi0+c3RvcCA9IHlhbV9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0geWFtX2lvY3RsOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0geWFtX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0geWFtX2dldF9zdGF0czsKLQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnlwLT5zZW5kX3F1ZXVlKTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZ5YW1fbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXgyNV9oZWFkZXJfb3BzOwogCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB5YW1fc2V0X21hY19hZGRyZXNzOwotCiAJZGV2LT50eXBlID0gQVJQSFJEX0FYMjU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOOwogCWRldi0+bXR1ID0gQVgyNV9NVFU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggNmZkN2FhNi4uYTgxNWUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJICBFTUFDX0ZUUl80NDBFUF9QSFlfQ0xLX0ZJWCkpCiAJCURCRyhkZXYsICIlcyIgTkwsIGVycm9yKTsKIAllbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkZXYtPm5kZXYtPm5hbWUsIGVycm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXNcbiIsIGRldi0+b2ZkZXYtPm5vZGUtPmZ1bGxfbmFtZSwgZXJyb3IpOwogfQogCiAvKiBFTUFDIFBIWSBjbG9jayB3b3JrYXJvdW5kOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGRmYTYzNDguLjVjNjMxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTEwMjgsMTAgKzEwMjgsMTAgQEAKIAogCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU1VDQ0VTUyk7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJaWYgKGlibXZldGhfcnhxX3BlbmRpbmdfYnVmZmVyKGFkYXB0ZXIpICYmCi0JCSAgICBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKSB7CisJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpIHsKIAkJCWxwYXJfcmMgPSBoX3Zpb19zaWduYWwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCQkgICAgICAgVklPX0lSUV9ESVNBQkxFKTsKIAkJCWdvdG8gcmVzdGFydF9wb2xsOwpAQCAtMTA0NywxMSArMTA0NywxMSBAQAogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CiAJCWxwYXJfcmMgPSBoX3Zpb19zaWduYWwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCSAgICAgICBWSU9fSVJRX0RJU0FCTEUpOwogCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU1VDQ0VTUyk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9pZ2IvTWFrZWZpbGUKaW5kZXggMTkyN2IzZi4uODM3MmNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCiAjIEludGVsIDgyNTc1IFBDSS1FeHByZXNzIEV0aGVybmV0IExpbnV4IGRyaXZlcgotIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisjIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMzLDUgKzMzLDUgQEAKIG9iai0kKENPTkZJR19JR0IpICs9IGlnYi5vCiAKIGlnYi1vYmpzIDo9IGlnYl9tYWluLm8gaWdiX2V0aHRvb2wubyBlMTAwMF84MjU3NS5vIFwKLQkgICAgZTEwMDBfbWFjLm8gZTEwMDBfbnZtLm8gZTEwMDBfcGh5Lm8KKwkgICAgZTEwMDBfbWFjLm8gZTEwMDBfbnZtLm8gZTEwMDBfcGh5Lm8gZTEwMDBfbWJ4Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCAxM2NhNzNmLi5lZmQ5YmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC02MiwxNyArNjIsMTIgQEAKIHN0YXRpYyBzMzIgIGlnYl9yZXNldF9pbml0X3NjcmlwdF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiBzdGF0aWMgczMyICBpZ2JfcmVhZF9tYWNfYWRkcl84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAKLQotc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1IHsKLQlib29sIHNnbWlpX2FjdGl2ZTsKLX07Ci0KIHN0YXRpYyBzMzIgaWdiX2dldF9pbnZhcmlhbnRzXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKIAlzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gKm52bSA9ICZody0+bnZtOwogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7Ci0Jc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICpkZXZfc3BlYzsKKwlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKiBkZXZfc3BlYyA9ICZody0+ZGV2X3NwZWMuXzgyNTc1OwogCXUzMiBlZWNkOwogCXMzMiByZXRfdmFsOwogCXUxNiBzaXplOwpAQCAtODUsOCArODAsMTAgQEAKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1NzU7CiAJCWJyZWFrOwogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2OgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X05TOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUjoKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1NzY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05NCwxNyArOTEsNiBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBNQUMgaW5pdGlhbGl6YXRpb24gKi8KLQlody0+ZGV2X3NwZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUpOwotCi0JLyogRGV2aWNlLXNwZWNpZmljIHN0cnVjdHVyZSBhbGxvY2F0aW9uICovCi0JaHctPmRldl9zcGVjID0ga3phbGxvYyhody0+ZGV2X3NwZWNfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWh3LT5kZXZfc3BlYykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZfc3BlYyA9IChzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKilody0+ZGV2X3NwZWM7Ci0KIAkvKiBTZXQgbWVkaWEgdHlwZSAqLwogCS8qCiAJICogVGhlIDgyNTc1IHVzZXMgYml0cyAyMjoyMyBmb3IgbGluayBtb2RlLiBUaGUgbW9kZSBjYW4gYmUgY2hhbmdlZApAQCAtMTk1LDEzICsxODEsMTMgQEAKIAogCS8qIFBIWSBmdW5jdGlvbiBwb2ludGVycyAqLwogCWlmIChpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KGh3KSkgewotCQlwaHktPm9wcy5yZXNldF9waHkgICAgICAgICAgPSBpZ2JfcGh5X2h3X3Jlc2V0X3NnbWlpXzgyNTc1OwotCQlwaHktPm9wcy5yZWFkX3BoeV9yZWcgICAgICAgPSBpZ2JfcmVhZF9waHlfcmVnX3NnbWlpXzgyNTc1OwotCQlwaHktPm9wcy53cml0ZV9waHlfcmVnICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19zZ21paV84MjU3NTsKKwkJcGh5LT5vcHMucmVzZXQgICAgICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldF9zZ21paV84MjU3NTsKKwkJcGh5LT5vcHMucmVhZF9yZWcgICAgICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19zZ21paV84MjU3NTsKKwkJcGh5LT5vcHMud3JpdGVfcmVnICAgICAgICAgID0gaWdiX3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzU7CiAJfSBlbHNlIHsKLQkJcGh5LT5vcHMucmVzZXRfcGh5ICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldDsKLQkJcGh5LT5vcHMucmVhZF9waHlfcmVnICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19pZ3A7Ci0JCXBoeS0+b3BzLndyaXRlX3BoeV9yZWcgICAgICA9IGlnYl93cml0ZV9waHlfcmVnX2lncDsKKwkJcGh5LT5vcHMucmVzZXQgICAgICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldDsKKwkJcGh5LT5vcHMucmVhZF9yZWcgICAgICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19pZ3A7CisJCXBoeS0+b3BzLndyaXRlX3JlZyAgICAgICAgICA9IGlnYl93cml0ZV9waHlfcmVnX2lncDsKIAl9CiAKIAkvKiBTZXQgcGh5LT5waHlfYWRkciBhbmQgcGh5LT5pZC4gKi8KQEAgLTIyOSw2ICsyMTUsMTAgQEAKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogCX0KIAorCS8qIGlmIDgyNTc2IHRoZW4gaW5pdGlhbGl6ZSBtYWlsYm94IHBhcmFtZXRlcnMgKi8KKwlpZiAobWFjLT50eXBlID09IGUxMDAwXzgyNTc2KQorCQlpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKGh3KTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NTEsNyArNDQxLDcgQEAKIAkgKiBTRlAgZG9jdW1lbnRhdGlvbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHRvIGNvbmZpZ3VyZSB0aGUgU1BGIG1vZHVsZQogCSAqIHRvIHdvcmsgb24gU0dNSUkuICBObyBmdXJ0aGVyIGRvY3VtZW50YXRpb24gaXMgZ2l2ZW4uCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUIsIDB4ODA4NCk7CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxQiwgMHg4MDg0KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTQ4MCwyOCArNDcwLDI4IEBACiAJczMyIHJldF92YWw7CiAJdTE2IGRhdGE7CiAKLQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWYgKGFjdGl2ZSkgewogCQlkYXRhIHw9IElHUDAyRTEwMDBfUE1fRDBfTFBMVTsKLQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCQkgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKIAkJLyogV2hlbiBMUExVIGlzIGVuYWJsZWQsIHdlIHNob3VsZCBkaXNhYmxlIFNtYXJ0U3BlZWQgKi8KLQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkmZGF0YSk7CiAJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7Ci0JCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJZGF0YSAmPSB+SUdQMDJFMTAwMF9QTV9EMF9MUExVOwotCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKIAkJCQkJCSBkYXRhKTsKIAkJLyoKIAkJICogTFBMVSBhbmQgU21hcnRTcGVlZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgTFBMVSBpcyB1c2VkCkBAIC01MTAsMjQgKzUwMCwyNCBAQAogCQkgKiBTbWFydFNwZWVkLCBzbyBwZXJmb3JtYW5jZSBpcyBtYWludGFpbmVkLgogCQkgKi8KIAkJaWYgKHBoeS0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb24pIHsKLQkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCUlHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29mZikgewotCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywKIAkJCQkJSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKQEAgLTgwMyw3ICs3OTMsNyBAQAogfQogCiAvKioKLSAqICBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3NSAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCisgKiAgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG1jX2FkZHJfbGlzdDogYXJyYXkgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCiAgKiAgQG1jX2FkZHJfY291bnQ6IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KQEAgLTgxNSw5ICs4MDUsOSBAQAogICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+bWFjLnJhcl9lbnRyeV9jb3VudAogICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhhdCBjaGFuZ2UgdGhpcy4KICAqKi8KLXZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKIHsKIAl1MzIgaGFzaF92YWx1ZTsKIAl1MzIgaTsKQEAgLTEwNTEsNyArMTA0MSw3IEBACiAJCSAqIGRlcGVuZGluZyBvbiB1c2VyIHNldHRpbmdzLgogCQkgKi8KIAkJaHdfZGJnKCJGb3JjaW5nIFNwZWVkIGFuZCBEdXBsZXhcbiIpOwotCQlyZXRfdmFsID0gaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoaHcpOworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuZm9yY2Vfc3BlZWRfZHVwbGV4KGh3KTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiRXJyb3IgRm9yY2luZyBTcGVlZCBhbmQgRHVwbGV4XG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtMTExMCw2ICsxMTAwLDEzIEBACiAJICAgICAgIEUxMDAwX0NUUkxfU1dEUElOMTsKIAl3cjMyKEUxMDAwX0NUUkwsIHJlZyk7CiAKKwkvKiBQb3dlciBvbiBwaHkgZm9yIDgyNTc2IGZpYmVyIGFkYXB0ZXJzICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgeworCQlyZWcgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwkJcmVnICY9IH5FMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEE7CisJCXdyMzIoRTEwMDBfQ1RSTF9FWFQsIHJlZyk7CisJfQorCiAJLyogU2V0IHN3aXRjaCBjb250cm9sIHRvIHNlcmRlcyBlbmVyZ3kgZGV0ZWN0ICovCiAJcmVnID0gcmQzMihFMTAwMF9DT05OU1cpOwogCXJlZyB8PSBFMTAwMF9DT05OU1dfRU5SR1NSQzsKQEAgLTEyMjcsMjAgKzEyMjQsMTIgQEAKICAqKi8KIHN0YXRpYyBib29sIGlnYl9zZ21paV9hY3RpdmVfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKmRldl9zcGVjOwotCWJvb2wgcmV0X3ZhbDsKKwlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKmRldl9zcGVjID0gJmh3LT5kZXZfc3BlYy5fODI1NzU7CiAKLQlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc1KSB7Ci0JCXJldF92YWwgPSBmYWxzZTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzUgJiYgaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc2KQorCQlyZXR1cm4gZmFsc2U7CiAKLQlkZXZfc3BlYyA9IChzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKilody0+ZGV2X3NwZWM7Ci0KLQlyZXRfdmFsID0gZGV2X3NwZWMtPnNnbWlpX2FjdGl2ZTsKLQotb3V0OgotCXJldHVybiByZXRfdmFsOworCXJldHVybiBkZXZfc3BlYy0+c2dtaWlfYWN0aXZlOwogfQogCiAvKioKQEAgLTE0MzAsNiArMTQxOSw0NCBAQAogCXJkMzIoRTEwMDBfTVBDKTsKIH0KIAorLyoqCisgKiAgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmIC0gZW5hYmxlIG9yIGRpc2FibGUgdm1kcSBsb29wYmFjaworICogIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0CisgKiAgQGVuYWJsZTogc3RhdGUgdG8gZW50ZXIsIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkCisgKgorICogIGVuYWJsZXMvZGlzYWJsZXMgTDIgc3dpdGNoIGxvb3BiYWNrIGZ1bmN0aW9uYWxpdHkuCisgKiovCit2b2lkIGlnYl92bWRxX3NldF9sb29wYmFja19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwl1MzIgZHR4c3djID0gcmQzMihFMTAwMF9EVFhTV0MpOworCisJaWYgKGVuYWJsZSkKKwkJZHR4c3djIHw9IEUxMDAwX0RUWFNXQ19WTURRX0xPT1BCQUNLX0VOOworCWVsc2UKKwkJZHR4c3djICY9IH5FMTAwMF9EVFhTV0NfVk1EUV9MT09QQkFDS19FTjsKKworCXdyMzIoRTEwMDBfRFRYU1dDLCBkdHhzd2MpOworfQorCisvKioKKyAqICBpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYgLSBlbmFibGUgb3IgZGlzYWJsZSB2bWRxIHJlcGxpY2F0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3QKKyAqICBAZW5hYmxlOiBzdGF0ZSB0byBlbnRlciwgZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAqCisgKiAgZW5hYmxlcy9kaXNhYmxlcyByZXBsaWNhdGlvbiBvZiBwYWNrZXRzIGFjcm9zcyBtdWx0aXBsZSBwb29scy4KKyAqKi8KK3ZvaWQgaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXUzMiB2dF9jdGwgPSByZDMyKEUxMDAwX1ZUX0NUTCk7CisKKwlpZiAoZW5hYmxlKQorCQl2dF9jdGwgfD0gRTEwMDBfVlRfQ1RMX1ZNX1JFUExfRU47CisJZWxzZQorCQl2dF9jdGwgJj0gfkUxMDAwX1ZUX0NUTF9WTV9SRVBMX0VOOworCisJd3IzMihFMTAwMF9WVF9DVEwsIHZ0X2N0bCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbWFjX29wZXJhdGlvbnMgZTEwMDBfbWFjX29wc184MjU3NSA9IHsKIAkucmVzZXRfaHcgICAgICAgICAgICAgPSBpZ2JfcmVzZXRfaHdfODI1NzUsCiAJLmluaXRfaHcgICAgICAgICAgICAgID0gaWdiX2luaXRfaHdfODI1NzUsCkBAIC0xNDQwLDE2ICsxNDY3LDE2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGUxMDAwX3BoeV9vcGVyYXRpb25zIGUxMDAwX3BoeV9vcHNfODI1NzUgPSB7Ci0JLmFjcXVpcmVfcGh5ICAgICAgICAgID0gaWdiX2FjcXVpcmVfcGh5XzgyNTc1LAorCS5hY3F1aXJlICAgICAgICAgICAgICA9IGlnYl9hY3F1aXJlX3BoeV84MjU3NSwKIAkuZ2V0X2NmZ19kb25lICAgICAgICAgPSBpZ2JfZ2V0X2NmZ19kb25lXzgyNTc1LAotCS5yZWxlYXNlX3BoeSAgICAgICAgICA9IGlnYl9yZWxlYXNlX3BoeV84MjU3NSwKKwkucmVsZWFzZSAgICAgICAgICAgICAgPSBpZ2JfcmVsZWFzZV9waHlfODI1NzUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGUxMDAwX252bV9vcGVyYXRpb25zIGUxMDAwX252bV9vcHNfODI1NzUgPSB7Ci0JLmFjcXVpcmVfbnZtICAgICAgICAgID0gaWdiX2FjcXVpcmVfbnZtXzgyNTc1LAotCS5yZWFkX252bSAgICAgICAgICAgICA9IGlnYl9yZWFkX252bV9lZXJkLAotCS5yZWxlYXNlX252bSAgICAgICAgICA9IGlnYl9yZWxlYXNlX252bV84MjU3NSwKLQkud3JpdGVfbnZtICAgICAgICAgICAgPSBpZ2Jfd3JpdGVfbnZtX3NwaSwKKwkuYWNxdWlyZSAgICAgICAgICAgICAgPSBpZ2JfYWNxdWlyZV9udm1fODI1NzUsCisJLnJlYWQgICAgICAgICAgICAgICAgID0gaWdiX3JlYWRfbnZtX2VlcmQsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gaWdiX3JlbGVhc2VfbnZtXzgyNTc1LAorCS53cml0ZSAgICAgICAgICAgICAgICA9IGlnYl93cml0ZV9udm1fc3BpLAogfTsKIAogY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzVfaW5mbyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKaW5kZXggYzE5MjhiNS4uZWFmOTc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjgsNyArMjgsNyBAQAogI2lmbmRlZiBfRTEwMDBfODI1NzVfSF8KICNkZWZpbmUgX0UxMDAwXzgyNTc1X0hfCiAKLXZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoc3RydWN0IGUxMDAwX2h3KiwgdTgqLCB1MzIsIHUzMiwgdTMyKTsKK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3KiwgdTgqLCB1MzIsIHUzMiwgdTMyKTsKIGV4dGVybiB2b2lkIGlnYl9zaHV0ZG93bl9maWJlcl9zZXJkZXNfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGlnYl9yeF9maWZvX2ZsdXNoXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCkBAIC00MCw4ICs0MCwxMSBAQAogI2RlZmluZSBFMTAwMF9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBTaGlmdCBfbGVmdF8gKi8KICNkZWZpbmUgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAogI2RlZmluZSBFMTAwMF9TUlJDVExfREVTQ1RZUEVfSERSX1NQTElUX0FMV0FZUyAgICAgICAgICAweDBBMDAwMDAwCisjZGVmaW5lIEUxMDAwX1NSUkNUTF9EUk9QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKIAogI2RlZmluZSBFMTAwMF9NUlFDX0VOQUJMRV9SU1NfNFEgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEUxMDAwX01SUUNfRU5BQkxFX1ZNRFEgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRTEwMDBfTVJRQ19FTkFCTEVfVk1EUV9SU1NfMlEgICAgICAgMHgwMDAwMDAwNQogI2RlZmluZSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUCAgICAgICAweDAwNDAwMDAwCiAjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQICAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9VRFBfRVggICAgMHgwMTAwMDAwMApAQCAtNTgsOSArNjEsNiBAQAogICAgIEUxMDAwX0VJQ1JfUlhfUVVFVUUyIHwgICAgXAogICAgIEUxMDAwX0VJQ1JfUlhfUVVFVUUzKQogCi0jZGVmaW5lIEUxMDAwX0VJTVNfUlhfUVVFVUUgRTEwMDBfRUlDUl9SWF9RVUVVRQotI2RlZmluZSBFMTAwMF9FSU1TX1RYX1FVRVVFIEUxMDAwX0VJQ1JfVFhfUVVFVUUKLQogLyogSW1tZWRpYXRlIEludGVycnVwdCBSeCAoQS5LLkEuIExvdyBMYXRlbmN5IEludGVycnVwdCkgKi8KIAogLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gQWR2YW5jZWQgKi8KQEAgLTk1LDEyICs5NSw2IEBACiAjZGVmaW5lIEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fTUFTSyAgICAgIDB4N0ZFMAogI2RlZmluZSBFMTAwMF9SWERBRFZfSERSQlVGTEVOX1NISUZUICAgICA1CiAKLS8qIFJTUyBIYXNoIHJlc3VsdHMgKi8KLQotLyogUlNTIFBhY2tldCBUeXBlcyBhcyBpbmRpY2F0ZWQgaW4gdGhlIHJlY2VpdmUgZGVzY3JpcHRvciAqLwotI2RlZmluZSBFMTAwMF9SWERBRFZfUEtUVFlQRV9JUFY0ICAgICAgICAweDAwMDAwMDEwIC8qIElQVjQgaGRyIHByZXNlbnQgKi8KLSNkZWZpbmUgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQICAgICAgICAgMHgwMDAwMDEwMCAvKiBUQ1AgaGRyIHByZXNlbnQgKi8KLQogLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCiB1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyB7CiAJc3RydWN0IHsKQEAgLTExNiw2ICsxMTAsNyBAQAogfTsKIAogLyogQWR2IFRyYW5zbWl0IERlc2NyaXB0b3IgQ29uZmlnIE1hc2tzICovCisjZGVmaW5lIEUxMDAwX0FEVlRYRF9NQUNfVFNUQU1QICAgMHgwMDA4MDAwMCAvKiBJRUVFMTU4OCBUaW1lc3RhbXAgcGFja2V0ICovCiAjZGVmaW5lIEUxMDAwX0FEVlRYRF9EVFlQX0NUWFQgICAgMHgwMDIwMDAwMCAvKiBBZHZhbmNlZCBDb250ZXh0IERlc2NyaXB0b3IgKi8KICNkZWZpbmUgRTEwMDBfQURWVFhEX0RUWVBfREFUQSAgICAweDAwMzAwMDAwIC8qIEFkdmFuY2VkIERhdGEgRGVzY3JpcHRvciAqLwogI2RlZmluZSBFMTAwMF9BRFZUWERfRENNRF9JRkNTICAgIDB4MDIwMDAwMDAgLyogSW5zZXJ0IEZDUyAoRXRoZXJuZXQgQ1JDKSAqLwpAQCAtMTQ5LDExICsxNDQsOCBAQAogI2RlZmluZSBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFICAweDAyMDAwMDAwIC8qIEVuYWJsZSBzcGVjaWZpYyBSeCBRdWV1ZSAqLwogCiAvKiBEaXJlY3QgQ2FjaGUgQWNjZXNzIChEQ0EpIGRlZmluaXRpb25zICovCi0jZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9FTkFCTEUgIDB4MDAwMDAwMDAgLyogRENBIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfRElTQUJMRSAweDAwMDAwMDAxIC8qIERDQSBEaXNhYmxlICovCi0KLSNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IxIDB4MDAgLyogRENBIE1vZGUgQ0IxICovCi0jZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMiAweDAyIC8qIERDQSBNb2RlIENCMiAqLworI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9ESVNBQkxFIDB4MDEgLyogRENBIERpc2FibGUgKi8KKyNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyICAgICAweDAyIC8qIERDQSBNb2RlIENCMiAqLwogCiAjZGVmaW5lIEUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTSyAweDAwMDAwMDFGIC8qIFJ4IENQVUlEIE1hc2sgKi8KICNkZWZpbmUgRTEwMDBfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTiAoMSA8PCA1KSAvKiBEQ0EgUnggRGVzYyBlbmFibGUgKi8KQEAgLTE3MCw0ICsxNjIsNDQgQEAKICNkZWZpbmUgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVCAyNCAvKiBUeCBDUFVJRCBub3cgaW4gdGhlIGxhc3QgYnl0ZSAqLwogI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUIDI0IC8qIFJ4IENQVUlEIG5vdyBpbiB0aGUgbGFzdCBieXRlICovCiAKKyNkZWZpbmUgTUFYX05VTV9WRlMgICAgICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIEUxMDAwX0RUWFNXQ19WTURRX0xPT1BCQUNLX0VOICgxIDw8IDMxKSAgLyogZ2xvYmFsIFZGIExCIGVuYWJsZSAqLworCisvKiBFYXN5IGRlZmluZXMgZm9yIHNldHRpbmcgZGVmYXVsdCBwb29sLCB3b3VsZCBub3JtYWxseSBiZSBsZWZ0IGEgemVybyAqLworI2RlZmluZSBFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX1NISUZUIDcKKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9NQVNLICAoMHg3IDw8IEUxMDAwX1ZUX0NUTF9ERUZBVUxUX1BPT0xfU0hJRlQpCisKKy8qIE90aGVyIHVzZWZ1bCBWTURfQ1RMIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0lHTk9SRV9NQUMgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0RJU0FCTEVfREVGX1BPT0wgICAoMSA8PCAyOSkKKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX1ZNX1JFUExfRU4gICAgICAgICAoMSA8PCAzMCkKKworLyogUGVyIFZNIE9mZmxvYWQgcmVnaXN0ZXIgc2V0dXAgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUkxQTUxfTUFTSyAweDAwMDAzRkZGIC8qIExvbmcgUGFja2V0IE1heGltdW0gTGVuZ3RoIG1hc2sgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfTFBFICAgICAgICAweDAwMDEwMDAwIC8qIEFjY2VwdCBMb25nIHBhY2tldCAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9SU1NFICAgICAgIDB4MDAwMjAwMDAgLyogRW5hYmxlIFJTUyAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9BVVBFICAgICAgIDB4MDEwMDAwMDAgLyogQWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUk9NUEUgICAgICAweDAyMDAwMDAwIC8qIEFjY2VwdCBvdmVyZmxvdyBtdWx0aWNhc3QgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUk9QRSAgICAgICAweDA0MDAwMDAwIC8qIEFjY2VwdCBvdmVyZmxvdyB1bmljYXN0ICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX0JBTSAgICAgICAgMHgwODAwMDAwMCAvKiBBY2NlcHQgQnJvYWRjYXN0IHBhY2tldHMgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfTVBNRSAgICAgICAweDEwMDAwMDAwIC8qIE11bHRpY2FzdCBwcm9taXNjdW91cyBtb2RlICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1NUUlZMQU4gICAgMHg0MDAwMDAwMCAvKiBWbGFuIHN0cmlwcGluZyBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfU1RSQ1JDICAgICAweDgwMDAwMDAwIC8qIENSQyBzdHJpcHBpbmcgZW5hYmxlICovCisKKyNkZWZpbmUgRTEwMDBfVkxWRl9BUlJBWV9TSVpFICAgICAzMgorI2RlZmluZSBFMTAwMF9WTFZGX1ZMQU5JRF9NQVNLICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRTEwMDBfVkxWRl9QT09MU0VMX1NISUZUICAxMgorI2RlZmluZSBFMTAwMF9WTFZGX1BPT0xTRUxfTUFTSyAgICgweEZGIDw8IEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCkKKyNkZWZpbmUgRTEwMDBfVkxWRl9MVkxBTiAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRSAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEUxMDAwX0lPVkNUTCAweDA1QkJDCisjZGVmaW5lIEUxMDAwX0lPVkNUTF9SRVVTRV9WRlEgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFMTF9RVUVVRVMgICAweEZGRkYKKwordm9pZCBpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwordm9pZCBpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCmluZGV4IDQwZDAzNDIuLmFkMmQzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00MiwzMyArNDIsMTEgQEAKICNkZWZpbmUgRTEwMDBfV1VGQ19FWCAgIDB4MDAwMDAwMDQgLyogRGlyZWN0ZWQgRXhhY3QgV2FrZXVwIEVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9XVUZDX01DICAgMHgwMDAwMDAwOCAvKiBEaXJlY3RlZCBNdWx0aWNhc3QgV2FrZXVwIEVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9XVUZDX0JDICAgMHgwMDAwMDAxMCAvKiBCcm9hZGNhc3QgV2FrZXVwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0FSUCAgMHgwMDAwMDAyMCAvKiBBUlAgUmVxdWVzdCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0lQVjQgMHgwMDAwMDA0MCAvKiBEaXJlY3RlZCBJUHY0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfSVBWNiAweDAwMDAwMDgwIC8qIERpcmVjdGVkIElQdjYgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19GTFgwIDB4MDAwMTAwMDAgLyogRmxleGlibGUgRmlsdGVyIDAgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYMSAweDAwMDIwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAxIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0ZMWDIgMHgwMDA0MDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMiBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19GTFgzIDB4MDAwODAwMDAgLyogRmxleGlibGUgRmlsdGVyIDMgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYX0ZJTFRFUlMgMHgwMDBGMDAwMCAvKiBNYXNrIGZvciB0aGUgNCBmbGV4aWJsZSBmaWx0ZXJzICovCi0KLS8qIFdha2UgVXAgU3RhdHVzICovCi0KLS8qIFdha2UgVXAgUGFja2V0IExlbmd0aCAqLwotCi0vKiBGb3VyIEZsZXhpYmxlIEZpbHRlcnMgYXJlIHN1cHBvcnRlZCAqLwotI2RlZmluZSBFMTAwMF9GTEVYSUJMRV9GSUxURVJfQ09VTlRfTUFYIDQKLQotLyogRWFjaCBGbGV4aWJsZSBGaWx0ZXIgaXMgYXQgbW9zdCAxMjggKDB4ODApIGJ5dGVzIGluIGxlbmd0aCAqLwotI2RlZmluZSBFMTAwMF9GTEVYSUJMRV9GSUxURVJfU0laRV9NQVggIDEyOAotCiAKIC8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0dQSTFfRU4gICAweDAwMDAwMDAyIC8qIE1hcHMgU0RQNSB0byBHUEkxICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDRfREFUQSAweDAwMDAwMDEwIC8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDQgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQNV9EQVRBIDB4MDAwMDAwMjAgLyogVmFsdWUgb2YgU1cgRGVmaW5lYWJsZSBQaW4gNSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEEgMHgwMDAwMDA4MCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmVhYmxlIFBpbiA3ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDRfRElSICAweDAwMDAwMTAwIC8qIERpcmVjdGlvbiBvZiBTRFA0IDA9aW4gMT1vdXQgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRUVfUlNUICAgIDB4MDAwMDIwMDAgLyogUmVpbml0aWFsaXplIGZyb20gRUVQUk9NICovCisvKiBQaHlzaWNhbCBGdW5jIFJlc2V0IERvbmUgSW5kaWNhdGlvbiAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9QRlJTVEQgICAgMHgwMDAwNDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUyAgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfU0dNSUkgICAweDAwODAwMDAwCkBAIC0xMDMsMTMgKzgxLDcgQEAKICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVlAgICAgICAgMHgwOCAgICAvKiBJRUVFIFZMQU4gUGFja2V0ICovCiAjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1VEUENTICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBFMTAwMF9SWERfU1RBVF9UQ1BDUyAgICAweDIwICAgIC8qIFRDUCB4c3VtIGNhbGN1bGF0ZWQgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfRFlOSU5UICAgMHg4MDAgICAvKiBQa3QgY2F1c2VkIElOVCB2aWEgRFlOSU5UICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfQ0UgICAgICAgIDB4MDEgICAgLyogQ1JDIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0UgICAgICAgIDB4MDIgICAgLyogU3ltYm9sIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0VRICAgICAgIDB4MDQgICAgLyogU2VxdWVuY2UgRXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX0VSUl9DWEUgICAgICAgMHgxMCAgICAvKiBDYXJyaWVyIEV4dGVuc2lvbiBFcnJvciAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX1JYRSAgICAgICAweDgwICAgIC8qIFJ4IERhdGEgRXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX1NQQ19WTEFOX01BU0sgMHgwRkZGICAvKiBWTEFOIElEIGlzIGluIGxvd2VyIDEyIGJpdHMgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVFMgICAgICAgMHgxMDAwMCAvKiBQa3Qgd2FzIHRpbWUgc3RhbXBlZCAqLwogCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX0NFICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgRTEwMDBfUlhERVhUX1NUQVRFUlJfU0UgICAgMHgwMjAwMDAwMApAQCAtMTE5LDE0ICs5MSw2IEBACiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX0lQRSAgIDB4NDAwMDAwMDAKICNkZWZpbmUgRTEwMDBfUlhERVhUX1NUQVRFUlJfUlhFICAgMHg4MDAwMDAwMAogCi0vKiBtYXNrIHRvIGRldGVybWluZSBpZiBwYWNrZXRzIHNob3VsZCBiZSBkcm9wcGVkIGR1ZSB0byBmcmFtZSBlcnJvcnMgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSyAoIFwKLSAgICBFMTAwMF9SWERfRVJSX0NFICB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX1NFICB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX1NFUSB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX0NYRSB8ICAgICAgICAgICAgICAgIFwKLSAgICBFMTAwMF9SWERfRVJSX1JYRSkKLQogLyogU2FtZSBtYXNrLCBidXQgZm9yIGV4dGVuZGVkIGFuZCBwYWNrZXQgc3BsaXQgZGVzY3JpcHRvcnMgKi8KICNkZWZpbmUgRTEwMDBfUlhERVhUX0VSUl9GUkFNRV9FUlJfTUFTSyAoIFwKICAgICBFMTAwMF9SWERFWFRfU1RBVEVSUl9DRSAgfCAgICAgICAgICAgIFwKQEAgLTE0NSwxNiArMTA5LDExIEBACiAvKiBNYW5hZ2VtZW50IENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19TTUJVU19FTiAgICAgIDB4MDAwMDAwMDEgLyogU01CdXMgRW5hYmxlZCAtIFJPICovCiAjZGVmaW5lIEUxMDAwX01BTkNfQVNGX0VOICAgICAgICAweDAwMDAwMDAyIC8qIEFTRiBFbmFibGVkIC0gUk8gKi8KLSNkZWZpbmUgRTEwMDBfTUFOQ19BUlBfRU4gICAgICAgIDB4MDAwMDIwMDAgLyogRW5hYmxlIEFSUCBSZXF1ZXN0IEZpbHRlcmluZyAqLwogLyogRW5hYmxlIE5laWdoYm9yIERpc2NvdmVyeSBGaWx0ZXJpbmcgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19SQ1ZfVENPX0VOICAgIDB4MDAwMjAwMDAgLyogUmVjZWl2ZSBUQ08gUGFja2V0cyBFbmFibGVkICovCiAjZGVmaW5lIEUxMDAwX01BTkNfQkxLX1BIWV9SU1RfT05fSURFICAgMHgwMDA0MDAwMCAvKiBCbG9jayBwaHkgcmVzZXRzICovCiAvKiBFbmFibGUgTUFDIGFkZHJlc3MgZmlsdGVyaW5nICovCiAjZGVmaW5lIEUxMDAwX01BTkNfRU5fTUFDX0FERFJfRklMVEVSICAgMHgwMDEwMDAwMAotLyogRW5hYmxlIE1ORyBwYWNrZXRzIHRvIGhvc3QgbWVtb3J5ICovCi0jZGVmaW5lIEUxMDAwX01BTkNfRU5fTU5HMkhPU1QgICAweDAwMjAwMDAwCi0vKiBFbmFibGUgSVAgYWRkcmVzcyBmaWx0ZXJpbmcgKi8KLQogCiAvKiBSZWNlaXZlIENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9FTiAgICAgICAgICAgICAweDAwMDAwMDAyICAgIC8qIGVuYWJsZSAqLwpAQCAtMTYyLDE0ICsxMjEsMTEgQEAKICNkZWZpbmUgRTEwMDBfUkNUTF9VUEUgICAgICAgICAgICAweDAwMDAwMDA4ICAgIC8qIHVuaWNhc3QgcHJvbWlzY3VvdXMgZW5hYmxlICovCiAjZGVmaW5lIEUxMDAwX1JDVExfTVBFICAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgZW5hYiAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0xQRSAgICAgICAgICAgIDB4MDAwMDAwMjAgICAgLyogbG9uZyBwYWNrZXQgZW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1JDVExfTEJNX05PICAgICAgICAgMHgwMDAwMDAwMCAgICAvKiBubyBsb29wYmFjayBtb2RlICovCiAjZGVmaW5lIEUxMDAwX1JDVExfTEJNX01BQyAgICAgICAgMHgwMDAwMDA0MCAgICAvKiBNQUMgbG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0xCTV9UQ1ZSICAgICAgIDB4MDAwMDAwQzAgICAgLyogdGN2ciBsb29wYmFjayBtb2RlICovCiAjZGVmaW5lIEUxMDAwX1JDVExfUkRNVFNfSEFMRiAgICAgMHgwMDAwMDAwMCAgICAvKiByeCBkZXNjIG1pbiB0aHJlc2hvbGQgc2l6ZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX01PX1NISUZUICAgICAgIDEyICAgICAgICAgICAgLyogbXVsdGljYXN0IG9mZnNldCBzaGlmdCAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0JBTSAgICAgICAgICAgIDB4MDAwMDgwMDAgICAgLyogYnJvYWRjYXN0IGVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzIwNDggICAgICAgIDB4MDAwMDAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMjA0OCAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzEwMjQgICAgICAgIDB4MDAwMTAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMTAyNCAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzUxMiAgICAgICAgIDB4MDAwMjAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgNTEyICovCiAjZGVmaW5lIEUxMDAwX1JDVExfU1pfMjU2ICAgICAgICAgMHgwMDAzMDAwMCAgICAvKiByeCBidWZmZXIgc2l6ZSAyNTYgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9WRkUgICAgICAgICAgICAweDAwMDQwMDAwICAgIC8qIHZsYW4gZmlsdGVyIGVuYWJsZSAqLwpAQCAtMjI2LDExICsxODIsNyBAQAogLyogZW5hYmxlIGxpbmsgc3RhdHVzIGZyb20gZXh0ZXJuYWwgTElOS18wIGFuZCBMSU5LXzEgcGlucyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjAgIDB4MDAwNDAwMDAgIC8qIFNXRFBJTiAwIHZhbHVlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElOMSAgMHgwMDA4MDAwMCAgLyogU1dEUElOIDEgdmFsdWUgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4yICAweDAwMTAwMDAwICAvKiBTV0RQSU4gMiB2YWx1ZSAqLwotI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjMgIDB4MDAyMDAwMDAgIC8qIFNXRFBJTiAzIHZhbHVlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElPMCAgMHgwMDQwMDAwMCAgLyogU1dEUElOIDAgSW5wdXQgb3Igb3V0cHV0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElPMiAgMHgwMTAwMDAwMCAgLyogU1dEUElOIDIgaW5wdXQgb3Igb3V0cHV0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElPMyAgMHgwMjAwMDAwMCAgLyogU1dEUElOIDMgaW5wdXQgb3Igb3V0cHV0ICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfUlNUICAgICAgMHgwNDAwMDAwMCAgLyogR2xvYmFsIHJlc2V0ICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfUkZDRSAgICAgMHgwODAwMDAwMCAgLyogUmVjZWl2ZSBGbG93IENvbnRyb2wgZW5hYmxlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfVEZDRSAgICAgMHgxMDAwMDAwMCAgLyogVHJhbnNtaXQgZmxvdyBjb250cm9sIGVuYWJsZSAqLwpAQCAtMzA4LDkgKzI2MCw3IEBACiAjZGVmaW5lIEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQgICBFMTAwMF9BTExfU1BFRURfRFVQTEVYCiAKIC8qIExFRCBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX01PREVfTUFTSyAgICAgICAweDAwMDAwMDBGCiAjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX01PREVfU0hJRlQgICAgICAwCi0jZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX0lWUlQgICAgICAgICAgICAweDAwMDAwMDQwCiAjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX0JMSU5LICAgICAgICAgICAweDAwMDAwMDgwCiAKICNkZWZpbmUgRTEwMDBfTEVEQ1RMX01PREVfTEVEX09OICAgICAgICAweEUKQEAgLTM1NywxMiArMzA3LDcgQEAKIAogI2RlZmluZSBNQVhfSlVNQk9fRlJBTUVfU0laRSAgICAweDNGMDAKIAotLyogRXh0ZW5kZWQgQ29uZmlndXJhdGlvbiBDb250cm9sIGFuZCBTaXplICovCi0jZGVmaW5lIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFICAgICAgICAweDAwMDAwMDQwCi0KIC8qIFBCQSBjb25zdGFudHMgKi8KLSNkZWZpbmUgRTEwMDBfUEJBXzE2SyAweDAwMTAgICAgLyogMTZLQiwgZGVmYXVsdCBUWCBhbGxvY2F0aW9uICovCi0jZGVmaW5lIEUxMDAwX1BCQV8yNEsgMHgwMDE4CiAjZGVmaW5lIEUxMDAwX1BCQV8zNEsgMHgwMDIyCiAjZGVmaW5lIEUxMDAwX1BCQV82NEsgMHgwMDQwICAgIC8qIDY0S0IgKi8KIApAQCAtMzc4LDQxICszMjMsMTUgQEAKIAogLyogSW50ZXJydXB0IENhdXNlIFJlYWQgKi8KICNkZWZpbmUgRTEwMDBfSUNSX1RYRFcgICAgICAgICAgMHgwMDAwMDAwMSAvKiBUcmFuc21pdCBkZXNjIHdyaXR0ZW4gYmFjayAqLwotI2RlZmluZSBFMTAwMF9JQ1JfVFhRRSAgICAgICAgICAweDAwMDAwMDAyIC8qIFRyYW5zbWl0IFF1ZXVlIGVtcHR5ICovCiAjZGVmaW5lIEUxMDAwX0lDUl9MU0MgICAgICAgICAgIDB4MDAwMDAwMDQgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIEUxMDAwX0lDUl9SWFNFUSAgICAgICAgIDB4MDAwMDAwMDggLyogcnggc2VxdWVuY2UgZXJyb3IgKi8KICNkZWZpbmUgRTEwMDBfSUNSX1JYRE1UMCAgICAgICAgMHgwMDAwMDAxMCAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICgwKSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfUlhPICAgICAgICAgICAweDAwMDAwMDQwIC8qIHJ4IG92ZXJydW4gKi8KICNkZWZpbmUgRTEwMDBfSUNSX1JYVDAgICAgICAgICAgMHgwMDAwMDA4MCAvKiByeCB0aW1lciBpbnRyIChyaW5nIDApICovCi0jZGVmaW5lIEUxMDAwX0lDUl9NREFDICAgICAgICAgIDB4MDAwMDAyMDAgLyogTURJTyBhY2Nlc3MgY29tcGxldGUgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYQ0ZHICAgICAgICAgMHgwMDAwMDQwMCAvKiBSeCAvYy8gb3JkZXJlZCBzZXQgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjAgICAgICAgMHgwMDAwMDgwMCAvKiBHUCBJbnQgMCAqLwotI2RlZmluZSBFMTAwMF9JQ1JfR1BJX0VOMSAgICAgICAweDAwMDAxMDAwIC8qIEdQIEludCAxICovCi0jZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4yICAgICAgIDB4MDAwMDIwMDAgLyogR1AgSW50IDIgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjMgICAgICAgMHgwMDAwNDAwMCAvKiBHUCBJbnQgMyAqLwotI2RlZmluZSBFMTAwMF9JQ1JfVFhEX0xPVyAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9TUlBEICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgRTEwMDBfSUNSX0FDSyAgICAgICAgICAgMHgwMDAyMDAwMCAvKiBSZWNlaXZlIEFjayBmcmFtZSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfTU5HICAgICAgICAgICAweDAwMDQwMDAwIC8qIE1hbmFnZWFiaWxpdHkgZXZlbnQgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0RPQ0sgICAgICAgICAgMHgwMDA4MDAwMCAvKiBEb2NrL1VuZG9jayAqLworI2RlZmluZSBFMTAwMF9JQ1JfVk1NQiAgICAgICAgICAweDAwMDAwMTAwIC8qIFZNIE1CIGV2ZW50ICovCiAvKiBJZiB0aGlzIGJpdCBhc3NlcnRlZCwgdGhlIGRyaXZlciBzaG91bGQgY2xhaW0gdGhlIGludGVycnVwdCAqLwogI2RlZmluZSBFMTAwMF9JQ1JfSU5UX0FTU0VSVEVEICAweDgwMDAwMDAwCi0vKiBxdWV1ZSAwIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjAgMHgwMDEwMDAwMAotLyogcXVldWUgMCBUeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0jZGVmaW5lIEUxMDAwX0lDUl9UWERfRklGT19QQVIwIDB4MDAyMDAwMDAKLS8qIGhvc3QgYXJiIHJlYWQgYnVmZmVyIHBhcml0eSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JQ1JfSE9TVF9BUkJfUEFSICAweDAwNDAwMDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9QQl9QQVIgICAgICAgIDB4MDA4MDAwMDAgLyogcGFja2V0IGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KLS8qIHF1ZXVlIDEgUnggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JQ1JfUlhEX0ZJRk9fUEFSMSAweDAxMDAwMDAwCi0vKiBxdWV1ZSAxIFR4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1RYRF9GSUZPX1BBUjEgMHgwMjAwMDAwMAotLyogRlcgY2hhbmdlZCB0aGUgc3RhdHVzIG9mIERJU1NXIGJpdCBpbiB0aGUgRldTTSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfRFNXICAgICAgICAgICAweDAwMDAwMDIwCiAvKiBMQU4gY29ubmVjdGVkIGRldmljZSBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0ICovCi0jZGVmaW5lIEUxMDAwX0lDUl9QSFlJTlQgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgRTEwMDBfSUNSX0VQUlNUICAgICAgICAgMHgwMDEwMDAwMCAvKiBNRSBoYW5kd2FyZSByZXNldCBvY2N1cnMgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX0RPVVRTWU5DICAgICAgMHgxMDAwMDAwMCAvKiBOSUMgRE1BIG91dCBvZiBzeW5jICovCiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBSZWFkICovCiAjZGVmaW5lIEUxMDAwX0VJQ1JfUlhfUVVFVUUwICAgIDB4MDAwMDAwMDEgLyogUnggUXVldWUgMCBJbnRlcnJ1cHQgKi8KQEAgLTQyMyw3ICszNDIsNiBAQAogI2RlZmluZSBFMTAwMF9FSUNSX1RYX1FVRVVFMSAgICAweDAwMDAwMjAwIC8qIFR4IFF1ZXVlIDEgSW50ZXJydXB0ICovCiAjZGVmaW5lIEUxMDAwX0VJQ1JfVFhfUVVFVUUyICAgIDB4MDAwMDA0MDAgLyogVHggUXVldWUgMiBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgRTEwMDBfRUlDUl9UWF9RVUVVRTMgICAgMHgwMDAwMDgwMCAvKiBUeCBRdWV1ZSAzIEludGVycnVwdCAqLwotI2RlZmluZSBFMTAwMF9FSUNSX1RDUF9USU1FUiAgICAweDQwMDAwMDAwIC8qIFRDUCBUaW1lciAqLwogI2RlZmluZSBFMTAwMF9FSUNSX09USEVSICAgICAgICAweDgwMDAwMDAwIC8qIEludGVycnVwdCBDYXVzZSBBY3RpdmUgKi8KIC8qIFRDUCBUaW1lciAqLwogCkBAIC00NDEsMTcgKzM1OSwxOSBAQAogICAgIEUxMDAwX0lNU19UWERXICAgfCAgICBcCiAgICAgRTEwMDBfSU1TX1JYRE1UMCB8ICAgIFwKICAgICBFMTAwMF9JTVNfUlhTRVEgIHwgICAgXAotICAgIEUxMDAwX0lNU19MU0MpCisgICAgRTEwMDBfSU1TX0xTQyAgICB8ICAgIFwKKyAgICBFMTAwMF9JTVNfRE9VVFNZTkMpCiAKIC8qIEludGVycnVwdCBNYXNrIFNldCAqLwogI2RlZmluZSBFMTAwMF9JTVNfVFhEVyAgICAgIEUxMDAwX0lDUl9UWERXICAgICAgLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KICNkZWZpbmUgRTEwMDBfSU1TX0xTQyAgICAgICBFMTAwMF9JQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBFMTAwMF9JTVNfVk1NQiAgICAgIEUxMDAwX0lDUl9WTU1CICAgICAgLyogTWFpbCBib3ggYWN0aXZpdHkgKi8KICNkZWZpbmUgRTEwMDBfSU1TX1JYU0VRICAgICBFMTAwMF9JQ1JfUlhTRVEgICAgIC8qIHJ4IHNlcXVlbmNlIGVycm9yICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWERNVDAgICAgRTEwMDBfSUNSX1JYRE1UMCAgICAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWFQwICAgICAgRTEwMDBfSUNSX1JYVDAgICAgICAvKiByeCB0aW1lciBpbnRyICovCisjZGVmaW5lIEUxMDAwX0lNU19ET1VUU1lOQyAgRTEwMDBfSUNSX0RPVVRTWU5DIC8qIE5JQyBETUEgb3V0IG9mIHN5bmMgKi8KIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgU2V0ICovCi0jZGVmaW5lIEUxMDAwX0VJTVNfVENQX1RJTUVSICAgIEUxMDAwX0VJQ1JfVENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLwogI2RlZmluZSBFMTAwMF9FSU1TX09USEVSICAgICAgICBFMTAwMF9FSUNSX09USEVSICAgLyogSW50ZXJydXB0IENhdXNlIEFjdGl2ZSAqLwogCiAvKiBJbnRlcnJ1cHQgQ2F1c2UgU2V0ICovCkBAIC00ODEsNiArNDAxLDEwIEBACiAgKiBtYW5hZ2VhYmlsaXR5IGVuYWJsZWQsIGFsbG93aW5nIHVzIHJvb20gZm9yIDE1IG11bHRpY2FzdCBhZGRyZXNzZXMuCiAgKi8KICNkZWZpbmUgRTEwMDBfUkFIX0FWICAweDgwMDAwMDAwICAgICAgICAvKiBSZWNlaXZlIGRlc2NyaXB0b3IgdmFsaWQgKi8KKyNkZWZpbmUgRTEwMDBfUkFMX01BQ19BRERSX0xFTiA0CisjZGVmaW5lIEUxMDAwX1JBSF9NQUNfQUREUl9MRU4gMgorI2RlZmluZSBFMTAwMF9SQUhfUE9PTF9NQVNLIDB4MDNGQzAwMDAKKyNkZWZpbmUgRTEwMDBfUkFIX1BPT0xfMSAweDAwMDQwMDAwCiAKIC8qIEVycm9yIENvZGVzICovCiAjZGVmaW5lIEUxMDAwX0VSUl9OVk0gICAgICAxCkBAIC00OTAsMTAgKzQxNCwxMCBAQAogI2RlZmluZSBFMTAwMF9FUlJfTUFDX0lOSVQgNQogI2RlZmluZSBFMTAwMF9FUlJfUkVTRVQgICA5CiAjZGVmaW5lIEUxMDAwX0VSUl9NQVNURVJfUkVRVUVTVFNfUEVORElORyAxMAotI2RlZmluZSBFMTAwMF9FUlJfSE9TVF9JTlRFUkZBQ0VfQ09NTUFORCAxMQogI2RlZmluZSBFMTAwMF9CTEtfUEhZX1JFU0VUICAgMTIKICNkZWZpbmUgRTEwMDBfRVJSX1NXRldfU1lOQyAxMwogI2RlZmluZSBFMTAwMF9OT1RfSU1QTEVNRU5URUQgMTQKKyNkZWZpbmUgRTEwMDBfRVJSX01CWCAgICAgIDE1CiAKIC8qIExvb3AgbGltaXQgb24gaG93IGxvbmcgd2Ugd2FpdCBmb3IgYXV0by1uZWdvdGlhdGlvbiB0byBjb21wbGV0ZSAqLwogI2RlZmluZSBDT1BQRVJfTElOS19VUF9MSU1JVCAgICAgICAgICAgICAgMTAKQEAgLTUxMCwzMCArNDM0LDkgQEAKIC8qIEZsb3cgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9GQ1JUTF9YT05FIDB4ODAwMDAwMDAgICAgIC8qIEVuYWJsZSBYT04gZnJhbWUgdHJhbnNtaXNzaW9uICovCiAKLS8qIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gV29yZCAqLwotI2RlZmluZSBFMTAwMF9UWENXX0FORSAgICAgICAgMHg4MDAwMDAwMCAgICAgICAgLyogQXV0by1uZWcgZW5hYmxlICovCi0KLS8qIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBXb3JkICovCi0KLS8qIFBDSSBFeHByZXNzIENvbnRyb2wgKi8KLSNkZWZpbmUgRTEwMDBfR0NSX1JYRF9OT19TTk9PUCAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEUxMDAwX0dDUl9SWERTQ1dfTk9fU05PT1AgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBFMTAwMF9HQ1JfUlhEU0NSX05PX1NOT09QICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgRTEwMDBfR0NSX1RYRF9OT19TTk9PUCAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEUxMDAwX0dDUl9UWERTQ1dfTk9fU05PT1AgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBFMTAwMF9HQ1JfVFhEU0NSX05PX1NOT09QICAgICAgIDB4MDAwMDAwMjAKLQotI2RlZmluZSBQQ0lFX05PX1NOT09QX0FMTCAoRTEwMDBfR0NSX1JYRF9OT19TTk9PUCAgICAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1JYRFNDV19OT19TTk9PUCAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1JYRFNDUl9OT19TTk9PUCAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1RYRF9OT19TTk9PUCAgICAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1RYRFNDV19OT19TTk9PUCAgICAgIHwgXAotCQkJICAgRTEwMDBfR0NSX1RYRFNDUl9OT19TTk9PUCkKLQogLyogUEhZIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYICAgICAgMHgwMTAwICAvKiBGRFggPTEsIGhhbGYgZHVwbGV4ID0wICovCiAjZGVmaW5lIE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHIDB4MDIwMCAgLyogUmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCi0jZGVmaW5lIE1JSV9DUl9QT1dFUl9ET1dOICAgICAgIDB4MDgwMCAgLyogUG93ZXIgZG93biAqLwogI2RlZmluZSBNSUlfQ1JfQVVUT19ORUdfRU4gICAgICAweDEwMDAgIC8qIEF1dG8gTmVnIEVuYWJsZSAqLwogI2RlZmluZSBNSUlfQ1JfTE9PUEJBQ0sgICAgICAgICAweDQwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBsb29wYmFjayAqLwogI2RlZmluZSBNSUlfQ1JfUkVTRVQgICAgICAgICAgICAweDgwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBQSFkgcmVzZXQgKi8KQEAgLTYwOSw2ICs1MTIsNyBAQAogI2RlZmluZSBOVk1fSURfTEVEX1NFVFRJTkdTICAgICAgICAweDAwMDQKIC8qIEZvciBTRVJERVMgb3V0cHV0IGFtcGxpdHVkZSBhZGp1c3RtZW50LiAqLwogI2RlZmluZSBOVk1fSU5JVF9DT05UUk9MMl9SRUcgICAgICAweDAwMEYKKyNkZWZpbmUgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9CICAgMHgwMDE0CiAjZGVmaW5lIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSAgIDB4MDAyNAogI2RlZmluZSBOVk1fQUxUX01BQ19BRERSX1BUUiAgICAgICAweDAwMzcKICNkZWZpbmUgTlZNX0NIRUNLU1VNX1JFRyAgICAgICAgICAgMHgwMDNGCkBAIC02NjMsMTAgKzU2Nyw4IEBACiAjZGVmaW5lIElHUF9MRUQzX01PREUgICAgICAgICAgIDB4MDcwMDAwMDAKIAogLyogUENJL1BDSS1YL1BDSS1FWCBDb25maWcgc3BhY2UgKi8KLSNkZWZpbmUgUENJX0hFQURFUl9UWVBFX1JFR0lTVEVSICAgICAweDBFCiAjZGVmaW5lIFBDSUVfTElOS19TVEFUVVMgICAgICAgICAgICAgMHgxMgogCi0jZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9NVUxUSUZVTkMgICAgMHg4MAogI2RlZmluZSBQQ0lFX0xJTktfV0lEVEhfTUFTSyAgICAgICAgIDB4M0YwCiAjZGVmaW5lIFBDSUVfTElOS19XSURUSF9TSElGVCAgICAgICAgNAogCkBAIC03NjMsNCArNjY1LDggQEAKICNkZWZpbmUgRTEwMDBfR0VOX0NUTF9BRERSRVNTX1NISUZUICAgICA4CiAjZGVmaW5lIEUxMDAwX0dFTl9QT0xMX1RJTUVPVVQgICAgICAgICAgNjQwCiAKKyNkZWZpbmUgRTEwMDBfVkZUQV9FTlRSWV9TSElGVCAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRTEwMDBfVkZUQV9FTlRSWV9NQVNLICAgICAgICAgICAgICAgIDB4N0YKKyNkZWZpbmUgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyAgICAgIDB4MUYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCmluZGV4IDk5NTA0YTYuLjY4YWFjMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgImUxMDAwX21hYy5oIgogI2luY2x1ZGUgImUxMDAwX3JlZ3MuaCIKICNpbmNsdWRlICJlMTAwMF9kZWZpbmVzLmgiCiAKQEAgLTQxLDYgKzQwLDggQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2ICAgICAgICAgICAgICAgICAgICAweDEwQzkKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSICAgICAgICAgICAgICAweDEwRTYKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyAgICAgICAgICAgICAweDEwRTcKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSICAgICAgICAweDEwRTgKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X05TICAgICAgICAgICAgICAgICAweDE1MEEKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfQ09QUEVSICAgICAgICAgICAweDEwQTcKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfRklCRVJfU0VSREVTICAgICAweDEwQTkKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVIgICAgICAweDEwRDYKQEAgLTE0NCwxNDQgKzE0NSw2IEBACiAJZTEwMDBfZmNfZGVmYXVsdCA9IDB4RkYKIH07CiAKLQotLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7Ci0JX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KLQlfX2xlMTYgbGVuZ3RoOyAgICAgIC8qIExlbmd0aCBvZiBkYXRhIERNQWVkIGludG8gZGF0YSBidWZmZXIgKi8KLQlfX2xlMTYgY3N1bTsgICAgICAgIC8qIFBhY2tldCBjaGVja3N1bSAqLwotCXU4ICBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KLQl1OCAgZXJyb3JzOyAgICAgIC8qIERlc2NyaXB0b3IgRXJyb3JzICovCi0JX19sZTE2IHNwZWNpYWw7Ci19OwotCi0vKiBSZWNlaXZlIERlc2NyaXB0b3IgLSBFeHRlbmRlZCAqLwotdW5pb24gZTEwMDBfcnhfZGVzY19leHRlbmRlZCB7Ci0Jc3RydWN0IHsKLQkJX19sZTY0IGJ1ZmZlcl9hZGRyOwotCQlfX2xlNjQgcmVzZXJ2ZWQ7Ci0JfSByZWFkOwotCXN0cnVjdCB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgbXJxOyAgICAgICAgICAgICAgLyogTXVsdGlwbGUgUnggUXVldWVzICovCi0JCQl1bmlvbiB7Ci0JCQkJX19sZTMyIHJzczsgICAgICAgICAgICAvKiBSU1MgSGFzaCAqLwotCQkJCXN0cnVjdCB7Ci0JCQkJCV9fbGUxNiBpcF9pZDsgIC8qIElQIGlkICovCi0JCQkJCV9fbGUxNiBjc3VtOyAgIC8qIFBhY2tldCBDaGVja3N1bSAqLwotCQkJCX0gY3N1bV9pcDsKLQkJCX0gaGlfZHdvcmQ7Ci0JCX0gbG93ZXI7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLwotCQkJX19sZTE2IGxlbmd0aDsKLQkJCV9fbGUxNiB2bGFuOyAgICAgICAgICAgICAvKiBWTEFOIHRhZyAqLwotCQl9IHVwcGVyOwotCX0gd2I7ICAvKiB3cml0ZWJhY2sgKi8KLX07Ci0KLSNkZWZpbmUgTUFYX1BTX0JVRkZFUlMgNAotLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gUGFja2V0IFNwbGl0ICovCi11bmlvbiBlMTAwMF9yeF9kZXNjX3BhY2tldF9zcGxpdCB7Ci0Jc3RydWN0IHsKLQkJLyogb25lIGJ1ZmZlciBmb3IgcHJvdG9jb2wgaGVhZGVyKHMpLCB0aHJlZSBkYXRhIGJ1ZmZlcnMgKi8KLQkJX19sZTY0IGJ1ZmZlcl9hZGRyW01BWF9QU19CVUZGRVJTXTsKLQl9IHJlYWQ7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBtcnE7ICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBSeCBRdWV1ZXMgKi8KLQkJCXVuaW9uIHsKLQkJCQlfX2xlMzIgcnNzOyAgICAgICAgICAgICAgLyogUlNTIEhhc2ggKi8KLQkJCQlzdHJ1Y3QgewotCQkJCQlfX2xlMTYgaXBfaWQ7ICAgIC8qIElQIGlkICovCi0JCQkJCV9fbGUxNiBjc3VtOyAgICAgLyogUGFja2V0IENoZWNrc3VtICovCi0JCQkJfSBjc3VtX2lwOwotCQkJfSBoaV9kd29yZDsKLQkJfSBsb3dlcjsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBzdGF0dXNfZXJyb3I7ICAgICAvKiBleHQgc3RhdHVzL2Vycm9yICovCi0JCQlfX2xlMTYgbGVuZ3RoMDsgICAgICAgICAgLyogbGVuZ3RoIG9mIGJ1ZmZlciAwICovCi0JCQlfX2xlMTYgdmxhbjsgICAgICAgICAgICAgLyogVkxBTiB0YWcgKi8KLQkJfSBtaWRkbGU7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgaGVhZGVyX3N0YXR1czsKLQkJCV9fbGUxNiBsZW5ndGhbM107ICAgICAgICAvKiBsZW5ndGggb2YgYnVmZmVycyAxLTMgKi8KLQkJfSB1cHBlcjsKLQkJX19sZTY0IHJlc2VydmVkOwotCX0gd2I7IC8qIHdyaXRlYmFjayAqLwotfTsKLQotLyogVHJhbnNtaXQgRGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX3R4X2Rlc2MgewotCV9fbGU2NCBidWZmZXJfYWRkcjsgICAgICAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KLQl1bmlvbiB7Ci0JCV9fbGUzMiBkYXRhOwotCQlzdHJ1Y3QgewotCQkJX19sZTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCi0JCQl1OCBjc287ICAgICAgICAvKiBDaGVja3N1bSBvZmZzZXQgKi8KLQkJCXU4IGNtZDsgICAgICAgIC8qIERlc2NyaXB0b3IgY29udHJvbCAqLwotCQl9IGZsYWdzOwotCX0gbG93ZXI7Ci0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCXU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JCQl1OCBjc3M7ICAgICAgICAvKiBDaGVja3N1bSBzdGFydCAqLwotCQkJX19sZTE2IHNwZWNpYWw7Ci0JCX0gZmllbGRzOwotCX0gdXBwZXI7Ci19OwotCi0vKiBPZmZsb2FkIENvbnRleHQgRGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX2NvbnRleHRfZGVzYyB7Ci0JdW5pb24gewotCQlfX2xlMzIgaXBfY29uZmlnOwotCQlzdHJ1Y3QgewotCQkJdTggaXBjc3M7ICAgICAgLyogSVAgY2hlY2tzdW0gc3RhcnQgKi8KLQkJCXU4IGlwY3NvOyAgICAgIC8qIElQIGNoZWNrc3VtIG9mZnNldCAqLwotCQkJX19sZTE2IGlwY3NlOyAgICAgLyogSVAgY2hlY2tzdW0gZW5kICovCi0JCX0gaXBfZmllbGRzOwotCX0gbG93ZXJfc2V0dXA7Ci0JdW5pb24gewotCQlfX2xlMzIgdGNwX2NvbmZpZzsKLQkJc3RydWN0IHsKLQkJCXU4IHR1Y3NzOyAgICAgIC8qIFRDUCBjaGVja3N1bSBzdGFydCAqLwotCQkJdTggdHVjc287ICAgICAgLyogVENQIGNoZWNrc3VtIG9mZnNldCAqLwotCQkJX19sZTE2IHR1Y3NlOyAgICAgLyogVENQIGNoZWNrc3VtIGVuZCAqLwotCQl9IHRjcF9maWVsZHM7Ci0JfSB1cHBlcl9zZXR1cDsKLQlfX2xlMzIgY21kX2FuZF9sZW5ndGg7Ci0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCXU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JCQl1OCBoZHJfbGVuOyAgICAvKiBIZWFkZXIgbGVuZ3RoICovCi0JCQlfX2xlMTYgbXNzOyAgICAgICAvKiBNYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLwotCQl9IGZpZWxkczsKLQl9IHRjcF9zZWdfc2V0dXA7Ci19OwotCi0vKiBPZmZsb2FkIGRhdGEgZGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX2RhdGFfZGVzYyB7Ci0JX19sZTY0IGJ1ZmZlcl9hZGRyOyAgIC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBidWZmZXIgYWRkcmVzcyAqLwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgbGVuZ3RoOyAgICAvKiBEYXRhIGJ1ZmZlciBsZW5ndGggKi8KLQkJCXU4IHR5cF9sZW5fZXh0OwotCQkJdTggY21kOwotCQl9IGZsYWdzOwotCX0gbG93ZXI7Ci0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCXU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JCQl1OCBwb3B0czsgICAgICAvKiBQYWNrZXQgT3B0aW9ucyAqLwotCQkJX19sZTE2IHNwZWNpYWw7Ci0JCX0gZmllbGRzOwotCX0gdXBwZXI7Ci19OwotCiAvKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbGxlY3RlZCBieSB0aGUgTUFDICovCiBzdHJ1Y3QgZTEwMDBfaHdfc3RhdHMgewogCXU2NCBjcmNlcnJzOwpAQCAtMzU5LDYgKzIyMiw3IEBACiAJdTY0IGxlbmVycnM7CiAJdTY0IHNjdnBjOwogCXU2NCBocm1wYzsKKwl1NjQgZG9vc3luYzsKIH07CiAKIHN0cnVjdCBlMTAwMF9waHlfc3RhdHMgewpAQCAtNDA5LDYgKzI3Myw3IEBACiAjaW5jbHVkZSAiZTEwMDBfbWFjLmgiCiAjaW5jbHVkZSAiZTEwMDBfcGh5LmgiCiAjaW5jbHVkZSAiZTEwMDBfbnZtLmgiCisjaW5jbHVkZSAiZTEwMDBfbWJ4LmgiCiAKIHN0cnVjdCBlMTAwMF9tYWNfb3BlcmF0aW9ucyB7CiAJczMyICAoKmNoZWNrX2Zvcl9saW5rKShzdHJ1Y3QgZTEwMDBfaHcgKik7CkBAIC00MjIsMjUgKzI4NywyNSBAQAogfTsKIAogc3RydWN0IGUxMDAwX3BoeV9vcGVyYXRpb25zIHsKLQlzMzIgICgqYWNxdWlyZV9waHkpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqYWNxdWlyZSkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpjaGVja19yZXNldF9ibG9jaykoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpmb3JjZV9zcGVlZF9kdXBsZXgpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X2NmZ19kb25lKShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAlzMzIgICgqZ2V0X2NhYmxlX2xlbmd0aCkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpnZXRfcGh5X2luZm8pKHN0cnVjdCBlMTAwMF9odyAqKTsKLQlzMzIgICgqcmVhZF9waHlfcmVnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYgKik7Ci0Jdm9pZCAoKnJlbGVhc2VfcGh5KShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKnJlc2V0X3BoeSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCpyZWFkX3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2ICopOworCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZTEwMDBfaHcgKik7CisJczMyICAoKnJlc2V0KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnNldF9kMF9scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7CiAJczMyICAoKnNldF9kM19scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7Ci0JczMyICAoKndyaXRlX3BoeV9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNik7CisJczMyICAoKndyaXRlX3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2KTsKIH07CiAKIHN0cnVjdCBlMTAwMF9udm1fb3BlcmF0aW9ucyB7Ci0JczMyICAoKmFjcXVpcmVfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKnJlYWRfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKLQl2b2lkICgqcmVsZWFzZV9udm0pKHN0cnVjdCBlMTAwMF9odyAqKTsKLQlzMzIgICgqd3JpdGVfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKKwlzMzIgICgqYWNxdWlyZSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCpyZWFkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCp3cml0ZSkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfaW5mbyB7CkBAIC00ODMsNyArMzQ4LDYgQEAKIAlib29sIGFzZl9maXJtd2FyZV9wcmVzZW50OwogCWJvb2wgYXV0b25lZzsKIAlib29sIGF1dG9uZWdfZmFpbGVkOwotCWJvb2wgZGlzYWJsZV9hdjsKIAlib29sIGRpc2FibGVfaHdfaW5pdF9iaXRzOwogCWJvb2wgZ2V0X2xpbmtfc3RhdHVzOwogCWJvb2wgaWZzX3BhcmFtc19mb3JjZWQ7CkBAIC01NjUsOSArNDI5LDQwIEBACiAJZW51bSBlMTAwMF9mY190eXBlIG9yaWdpbmFsX3R5cGU7CiB9OwogCitzdHJ1Y3QgZTEwMDBfbWJ4X29wZXJhdGlvbnMgeworCXMzMiAoKmluaXRfcGFyYW1zKShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKKwlzMzIgKCpyZWFkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgIHUxNik7CisJczMyICgqd3JpdGUpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworCXMzMiAoKnJlYWRfcG9zdGVkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgIHUxNik7CisJczMyICgqd3JpdGVfcG9zdGVkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKKwlzMzIgKCpjaGVja19mb3JfbXNnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKKwlzMzIgKCpjaGVja19mb3JfYWNrKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKKwlzMzIgKCpjaGVja19mb3JfcnN0KShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK307CisKK3N0cnVjdCBlMTAwMF9tYnhfc3RhdHMgeworCXUzMiBtc2dzX3R4OworCXUzMiBtc2dzX3J4OworCisJdTMyIGFja3M7CisJdTMyIHJlcXM7CisJdTMyIHJzdHM7Cit9OworCitzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8geworCXN0cnVjdCBlMTAwMF9tYnhfb3BlcmF0aW9ucyBvcHM7CisJc3RydWN0IGUxMDAwX21ieF9zdGF0cyBzdGF0czsKKwl1MzIgdGltZW91dDsKKwl1MzIgdXNlY19kZWxheTsKKwl1MTYgc2l6ZTsKK307CisKK3N0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NSB7CisJYm9vbCBzZ21paV9hY3RpdmU7Cit9OworCiBzdHJ1Y3QgZTEwMDBfaHcgewogCXZvaWQgKmJhY2s7Ci0Jdm9pZCAqZGV2X3NwZWM7CiAKIAl1OCBfX2lvbWVtICpod19hZGRyOwogCXU4IF9faW9tZW0gKmZsYXNoX2FkZHJlc3M7CkBAIC01NzgsOSArNDczLDEyIEBACiAJc3RydWN0IGUxMDAwX3BoeV9pbmZvICBwaHk7CiAJc3RydWN0IGUxMDAwX252bV9pbmZvICBudm07CiAJc3RydWN0IGUxMDAwX2J1c19pbmZvICBidXM7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvIG1ieDsKIAlzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfZGhjcF9jb29raWUgbW5nX2Nvb2tpZTsKIAotCXUzMiBkZXZfc3BlY19zaXplOworCXVuaW9uIHsKKwkJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1CV84MjU3NTsKKwl9IGRldl9zcGVjOwogCiAJdTE2IGRldmljZV9pZDsKIAl1MTYgc3Vic3lzdGVtX3ZlbmRvcl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwppbmRleCA5N2YwMDQ5Li5mNGMzMTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzcsMTkgKzM3LDYgQEAKIHN0YXRpYyBzMzIgaWdiX3NldF9kZWZhdWx0X2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBpZ2Jfc2V0X2ZjX3dhdGVybWFya3Moc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKLS8qKgotICogIGlnYl9yZW1vdmVfZGV2aWNlIC0gRnJlZSBkZXZpY2Ugc3BlY2lmaWMgc3RydWN0dXJlCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqCi0gKiAgSWYgYSBkZXZpY2Ugc3BlY2lmaWMgc3RydWN0dXJlIHdhcyBhbGxvY2F0ZWQsIHRoaXMgZnVuY3Rpb24gd2lsbAotICogIGZyZWUgaXQuCi0gKiovCi12b2lkIGlnYl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBlMTAwMF9odyAqaHcpCi17Ci0JLyogRnJlZWluZyB0aGUgZGV2X3NwZWMgbWVtYmVyIG9mIGUxMDAwX2h3IHN0cnVjdHVyZSAqLwotCWtmcmVlKGh3LT5kZXZfc3BlYyk7Ci19Ci0KIHN0YXRpYyBzMzIgaWdiX3JlYWRfcGNpZV9jYXBfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWcsIHUxNiAqdmFsdWUpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CkBAIC0xMzEsNiArMTE4LDM3IEBACiB9CiAKIC8qKgorICogIGlnYl92ZnRhX3NldCAtIGVuYWJsZSBvciBkaXNhYmxlIHZsYW4gaW4gVkxBTiBmaWx0ZXIgdGFibGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2aWQ6IFZMQU4gaWQgdG8gYWRkIG9yIHJlbW92ZQorICogIEBhZGQ6IGlmIHRydWUgYWRkIGZpbHRlciwgaWYgZmFsc2UgcmVtb3ZlCisgKgorICogIFNldHMgb3IgY2xlYXJzIGEgYml0IGluIHRoZSBWTEFOIGZpbHRlciB0YWJsZSBhcnJheSBiYXNlZCBvbiBWTEFOIGlkCisgKiAgYW5kIGlmIHdlIGFyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgdGhlIGZpbHRlcgorICoqLworczMyIGlnYl92ZnRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgdmlkLCBib29sIGFkZCkKK3sKKwl1MzIgaW5kZXggPSAodmlkID4+IEUxMDAwX1ZGVEFfRU5UUllfU0hJRlQpICYgRTEwMDBfVkZUQV9FTlRSWV9NQVNLOworCXUzMiBtYXNrID0gMSA8PCAodmlkICYgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyk7CisJdTMyIHZmdGEgPSBhcnJheV9yZDMyKEUxMDAwX1ZGVEEsIGluZGV4KTsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwkvKiBiaXQgd2FzIHNldC9jbGVhcmVkIGJlZm9yZSB3ZSBzdGFydGVkICovCisJaWYgKCghISh2ZnRhICYgbWFzaykpID09IGFkZCkgeworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9DT05GSUc7CisJfSBlbHNlIHsKKwkJaWYgKGFkZCkKKwkJCXZmdGEgfD0gbWFzazsKKwkJZWxzZQorCQkJdmZ0YSAmPSB+bWFzazsKKwl9CisKKwlpZ2Jfd3JpdGVfdmZ0YShodywgaW5kZXgsIHZmdGEpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGlnYl9jaGVja19hbHRfbWFjX2FkZHIgLSBDaGVjayBmb3IgYWx0ZXJuYXRlIE1BQyBhZGRyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0xNDgsNyArMTY2LDcgQEAKIAl1MTYgb2Zmc2V0LCBudm1fYWx0X21hY19hZGRyX29mZnNldCwgbnZtX2RhdGE7CiAJdTggYWx0X21hY19hZGRyW0VUSF9BTEVOXTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX0FMVF9NQUNfQUREUl9QVFIsIDEsCisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9BTFRfTUFDX0FERFJfUFRSLCAxLAogCQkJCSAmbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwpAQCAtMTY1LDcgKzE4Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkgKz0gMikgewogCQlvZmZzZXQgPSBudm1fYWx0X21hY19hZGRyX29mZnNldCArIChpID4+IDEpOwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQkJZ290byBvdXQ7CkBAIC0yMTMsNyArMjMxLDggQEAKIAogCXJhcl9oaWdoID0gKCh1MzIpIGFkZHJbNF0gfCAoKHUzMikgYWRkcls1XSA8PCA4KSk7CiAKLQlpZiAoIWh3LT5tYWMuZGlzYWJsZV9hdikKKwkvKiBJZiBNQUMgYWRkcmVzcyB6ZXJvLCBubyBuZWVkIHRvIHNldCB0aGUgQVYgYml0ICovCisJaWYgKHJhcl9sb3cgfHwgcmFyX2hpZ2gpCiAJCXJhcl9oaWdoIHw9IEUxMDAwX1JBSF9BVjsKIAogCXdyMzIoRTEwMDBfUkFMKGluZGV4KSwgcmFyX2xvdyk7CkBAIC01ODgsOCArNjA3LDcgQEAKIAkgKiBjb250cm9sIHNldHRpbmcsIHRoZW4gdGhlIHZhcmlhYmxlIGh3LT5mYyB3aWxsCiAJICogYmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24gYSB2YWx1ZSBpbiB0aGUgRUVQUk9NLgogCSAqLwotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX0lOSVRfQ09OVFJPTDJfUkVHLCAxLAotCQkJCSAgICAgICAmbnZtX2RhdGEpOworCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MMl9SRUcsIDEsICZudm1fZGF0YSk7CiAKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKQEAgLTcyMCwxMSArNzM4LDExIEBACiAJCSAqIGhhcyBjb21wbGV0ZWQuICBXZSByZWFkIHRoaXMgdHdpY2UgYmVjYXVzZSB0aGlzIHJlZyBoYXMKIAkJICogc29tZSAic3RpY2t5IiAobGF0Y2hlZCkgYml0cy4KIAkJICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywKIAkJCQkJCSAgICZtaWlfc3RhdHVzX3JlZyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywKIAkJCQkJCSAgICZtaWlfc3RhdHVzX3JlZyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC03NDIsMTEgKzc2MCwxMSBAQAogCQkgKiBQYWdlIEFiaWxpdHkgUmVnaXN0ZXIgKEFkZHJlc3MgNSkgdG8gZGV0ZXJtaW5lIGhvdwogCQkgKiBmbG93IGNvbnRyb2wgd2FzIG5lZ290aWF0ZWQuCiAJCSAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0FVVE9ORUdfQURWLAogCQkJCQkgICAgJm1paV9ud2F5X2Fkdl9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfTFBfQUJJTElUWSwKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfTFBfQUJJTElUWSwKIAkJCQkJICAgICZtaWlfbndheV9scF9hYmlsaXR5X3JlZyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC0xMDQxLDcgKzEwNTksNyBAQAogewogCXMzMiByZXRfdmFsOwogCi0JcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBOVk1fSURfTEVEX1NFVFRJTkdTLCAxLCBkYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX0lEX0xFRF9TRVRUSU5HUywgMSwgZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCmluZGV4IGNiZWU2YWYuLmEzNGRlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC01OCwxMiArNTgsMTIgQEAKIAogdm9pZCBpZ2JfY2xlYXJfaHdfY250cnNfYmFzZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX2NsZWFyX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgIGlnYl92ZnRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgdmlkLCBib29sIGFkZCk7CiB2b2lkIGlnYl9jb25maWdfY29sbGlzaW9uX2Rpc3Qoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKTsKIHZvaWQgaWdiX3B1dF9od19zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICphZGRyLCB1MzIgaW5kZXgpOwogczMyICBpZ2JfY2hlY2tfYWx0X21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotdm9pZCBpZ2JfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX3Jlc2V0X2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfdXBkYXRlX2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2Jfd3JpdGVfdmZ0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpOwpAQCAtODMsMTMgKzgzLDggQEAKICNkZWZpbmUgRTEwMDBfRldTTV9NT0RFX01BU0sgIDB4RQogI2RlZmluZSBFMTAwMF9GV1NNX01PREVfU0hJRlQgMQogCi0jZGVmaW5lIEUxMDAwX01OR19ESENQX0NPTU1BTkRfVElNRU9VVCAgICAgICAxMAogI2RlZmluZSBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4gICAgMHgyCiAKLSNkZWZpbmUgRTEwMDBfSElDUl9FTiAgICAgICAgICAgICAgMHgwMSAgLyogRW5hYmxlIGJpdCAtIFJPICovCi0vKiBEcml2ZXIgc2V0cyB0aGlzIGJpdCB3aGVuIGRvbmUgdG8gcHV0IGNvbW1hbmQgaW4gUkFNICovCi0jZGVmaW5lIEUxMDAwX0hJQ1JfQyAgICAgICAgICAgICAgIDB4MDIKLQogZXh0ZXJuIHZvaWQgZTEwMDBfaW5pdF9mdW5jdGlvbl9wb2ludGVyc184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB1MzIgaWdiX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqbWNfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTcxYzdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5jCkBAIC0wLDAgKzEsNDQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImUxMDAwX21ieC5oIgorCisvKioKKyAqICBpZ2JfcmVhZF9tYnggLSBSZWFkcyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHJlYWQKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWx5IHJlYWQgbWVzc2FnZSBmcm9tIGJ1ZmZlcgorICoqLworczMyIGlnYl9yZWFkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJLyogbGltaXQgcmVhZCB0byBzaXplIG9mIG1haWxib3ggKi8KKwlpZiAoc2l6ZSA+IG1ieC0+c2l6ZSkKKwkJc2l6ZSA9IG1ieC0+c2l6ZTsKKworCWlmIChtYngtPm9wcy5yZWFkKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl93cml0ZV9tYnggLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlcgorICoqLworczMyIGlnYl93cml0ZV9tYngoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAwOworCisJaWYgKHNpemUgPiBtYngtPnNpemUpCisJCXJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWVsc2UgaWYgKG1ieC0+b3BzLndyaXRlKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX21zZyAtIGNoZWNrcyB0byBzZWUgaWYgc29tZW9uZSBzZW50IHVzIG1haWwKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gY2hlY2sKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBTdGF0dXMgYml0IHdhcyBmb3VuZCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3MzMiBpZ2JfY2hlY2tfZm9yX21zZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfbXNnKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX2FjayAtIGNoZWNrcyB0byBzZWUgaWYgc29tZW9uZSBzZW50IHVzIEFDSworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGlnYl9jaGVja19mb3JfYWNrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2spCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfcnN0IC0gY2hlY2tzIHRvIHNlZSBpZiBvdGhlciBzaWRlIGhhcyByZXNldAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGlnYl9jaGVja19mb3JfcnN0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QpCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfcnN0KGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9wb2xsX2Zvcl9tc2cgLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3BvbGxfZm9yX21zZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCWlmICghbWJ4LT5vcHMuY2hlY2tfZm9yX21zZykKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAobWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodywgbWJ4X2lkKSkgeworCQlpZiAoIWNvdW50ZG93bikKKwkJCWJyZWFrOworCQljb3VudGRvd24tLTsKKwkJdWRlbGF5KG1ieC0+dXNlY19kZWxheSk7CisJfQorb3V0OgorCXJldHVybiBjb3VudGRvd24gPyAwIDogLUUxMDAwX0VSUl9NQlg7Cit9CisKKy8qKgorICogIGlnYl9wb2xsX2Zvcl9hY2sgLSBXYWl0IGZvciBtZXNzYWdlIGFja25vd2xlZGdlbWVudAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3BvbGxfZm9yX2FjayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCWlmICghbWJ4LT5vcHMuY2hlY2tfZm9yX2FjaykKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAobWJ4LT5vcHMuY2hlY2tfZm9yX2FjayhodywgbWJ4X2lkKSkgeworCQlpZiAoIWNvdW50ZG93bikKKwkJCWJyZWFrOworCQljb3VudGRvd24tLTsKKwkJdWRlbGF5KG1ieC0+dXNlY19kZWxheSk7CisJfQorb3V0OgorCXJldHVybiBjb3VudGRvd24gPyAwIDogLUUxMDAwX0VSUl9NQlg7Cit9CisKKy8qKgorICogIGlnYl9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZAorICogIGNvcGllZCBpdCBpbnRvIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAqKi8KK3MzMiBpZ2JfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAoIW1ieC0+b3BzLnJlYWQpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGlnYl9wb2xsX2Zvcl9tc2coaHcsIG1ieF9pZCk7CisKKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBtYngtPm9wcy5yZWFkKGh3LCBtc2csIHNpemUsIG1ieF9pZCk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlciBhbmQKKyAqICByZWNlaXZlZCBhbiBhY2sgdG8gdGhhdCBtZXNzYWdlIHdpdGhpbiBkZWxheSAqIHRpbWVvdXQgcGVyaW9kCisgKiovCitzMzIgaWdiX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAwOworCisJaWYgKCFtYngtPm9wcy53cml0ZSkKKwkJZ290byBvdXQ7CisKKwkvKiBzZW5kIG1zZyovCisJcmV0X3ZhbCA9IG1ieC0+b3BzLndyaXRlKGh3LCBtc2csIHNpemUsIG1ieF9pZCk7CisKKwkvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gaWdiX3BvbGxfZm9yX2FjayhodywgbWJ4X2lkKTsKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgZTEwMDBfaW5pdF9tYnhfb3BzX2dlbmVyaWMgLSBJbml0aWFsaXplIE5WTSBmdW5jdGlvbiBwb2ludGVycworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFNldHVwcyB1cCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgdG8gbm8tb3AgZnVuY3Rpb25zCisgKiovCit2b2lkIGUxMDAwX2luaXRfbWJ4X29wc19nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwltYngtPm9wcy5yZWFkX3Bvc3RlZCA9IGlnYl9yZWFkX3Bvc3RlZF9tYng7CisJbWJ4LT5vcHMud3JpdGVfcG9zdGVkID0gaWdiX3dyaXRlX3Bvc3RlZF9tYng7Cit9CisKK3N0YXRpYyBzMzIgaWdiX2NoZWNrX2Zvcl9iaXRfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG1hc2spCit7CisJdTMyIG1idmZpY3IgPSByZDMyKEUxMDAwX01CVkZJQ1IpOworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAobWJ2ZmljciAmIG1hc2spIHsKKwkJcmV0X3ZhbCA9IDA7CisJCXdyMzIoRTEwMDBfTUJWRklDUiwgbWFzayk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfbXNnX3BmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgVkYgaGFzIHNlbnQgbWFpbAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2NoZWNrX2Zvcl9tc2dfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKCFpZ2JfY2hlY2tfZm9yX2JpdF9wZihodywgRTEwMDBfTUJWRklDUl9WRlJFUV9WRjEgPDwgdmZfbnVtYmVyKSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5yZXFzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfYWNrX3BmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgVkYgaGFzIEFDS2VkCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpZ2JfY2hlY2tfZm9yX2Fja19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAoIWlnYl9jaGVja19mb3JfYml0X3BmKGh3LCBFMTAwMF9NQlZGSUNSX1ZGQUNLX1ZGMSA8PCB2Zl9udW1iZXIpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLmFja3MrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9yc3RfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGlnYl9jaGVja19mb3JfcnN0X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJdTMyIHZmbHJlID0gcmQzMihFMTAwMF9WRkxSRSk7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmICh2ZmxyZSAmICgxIDw8IHZmX251bWJlcikpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCXdyMzIoRTEwMDBfVkZMUkUsICgxIDw8IHZmX251bWJlcikpOworCQlody0+bWJ4LnN0YXRzLnJzdHMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3dyaXRlX21ieF9wZiAtIFBsYWNlcyBhIG1lc3NhZ2UgaW4gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzdGF0aWMgczMyIGlnYl93cml0ZV9tYnhfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgcDJ2X21haWxib3g7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBpOworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCXdyMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpLCBFMTAwMF9QMlZNQUlMQk9YX1BGVSk7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvd25lcnNoaXAgbm93Li4uICovCisJcDJ2X21haWxib3ggPSByZDMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSk7CisJaWYgKCEocDJ2X21haWxib3ggJiBFMTAwMF9QMlZNQUlMQk9YX1BGVSkpIHsKKwkJLyogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwICovCisJCXJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKwkJZ290byBvdXRfbm9fd3JpdGU7CisJfQorCisJLyoKKwkgKiBmbHVzaCBhbnkgYWNrIG9yIG1zZyB3aGljaCBtYXkgYWxyZWFkeSBiZSBpbiB0aGUgcXVldWUKKwkgKiBhcyB0aGV5IGFyZSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhbiBlcnJvcgorCSAqLworCWlnYl9jaGVja19mb3JfYWNrX3BmKGh3LCB2Zl9udW1iZXIpOworCWlnYl9jaGVja19mb3JfbXNnX3BmKGh3LCB2Zl9udW1iZXIpOworCisJLyogY29weSB0aGUgY2FsbGVyIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlhcnJheV93cjMyKEUxMDAwX1ZNQk1FTSh2Zl9udW1iZXIpLCBpLCBtc2dbaV0pOworCisJLyogSW50ZXJydXB0IFZGIHRvIHRlbGwgaXQgYSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgYW5kIHJlbGVhc2UgYnVmZmVyKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9TVFMpOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3R4Kys7CisKK291dF9ub193cml0ZToKKwlyZXR1cm4gcmV0X3ZhbDsKKworfQorCisvKioKKyAqICBpZ2JfcmVhZF9tYnhfcGYgLSBSZWFkIGEgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveCBidWZmZXIgdG8gdGhlIGNhbGxlcidzCisgKiAgbWVtb3J5IGJ1ZmZlci4gIFRoZSBwcmVzdW1wdGlvbiBpcyB0aGF0IHRoZSBjYWxsZXIga25vd3MgdGhhdCB0aGVyZSB3YXMKKyAqICBhIG1lc3NhZ2UgZHVlIHRvIGEgVkYgcmVxdWVzdCBzbyBubyBwb2xsaW5nIGZvciBtZXNzYWdlIGlzIG5lZWRlZC4KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3JlYWRfbWJ4X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgcDJ2X21haWxib3g7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBpOworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCXdyMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpLCBFMTAwMF9QMlZNQUlMQk9YX1BGVSk7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvd25lcnNoaXAgbm93Li4uICovCisJcDJ2X21haWxib3ggPSByZDMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSk7CisJaWYgKCEocDJ2X21haWxib3ggJiBFMTAwMF9QMlZNQUlMQk9YX1BGVSkpIHsKKwkJLyogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwICovCisJCXJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKwkJZ290byBvdXRfbm9fcmVhZDsKKwl9CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQltc2dbaV0gPSBhcnJheV9yZDMyKEUxMDAwX1ZNQk1FTSh2Zl9udW1iZXIpLCBpKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBtZXNzYWdlIGFuZCByZWxlYXNlIGJ1ZmZlciAqLworCXdyMzIoRTEwMDBfUDJWTUFJTEJPWCh2Zl9udW1iZXIpLCBFMTAwMF9QMlZNQUlMQk9YX0FDSyk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfcngrKzsKKworCXJldF92YWwgPSAwOworCitvdXRfbm9fcmVhZDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgZTEwMDBfaW5pdF9tYnhfcGFyYW1zX3BmIC0gc2V0IGluaXRpYWwgdmFsdWVzIGZvciBwZiBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgSW5pdGlhbGl6ZXMgdGhlIGh3LT5tYnggc3RydWN0IHRvIGNvcnJlY3QgdmFsdWVzIGZvciBwZiBtYWlsYm94CisgKi8KK3MzMiBpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpIHsKKwkJbWJ4LT50aW1lb3V0ID0gMDsKKwkJbWJ4LT51c2VjX2RlbGF5ID0gMDsKKworCQltYngtPnNpemUgPSBFMTAwMF9WRk1BSUxCT1hfU0laRTsKKworCQltYngtPm9wcy5yZWFkID0gaWdiX3JlYWRfbWJ4X3BmOworCQltYngtPm9wcy53cml0ZSA9IGlnYl93cml0ZV9tYnhfcGY7CisJCW1ieC0+b3BzLnJlYWRfcG9zdGVkID0gaWdiX3JlYWRfcG9zdGVkX21ieDsKKwkJbWJ4LT5vcHMud3JpdGVfcG9zdGVkID0gaWdiX3dyaXRlX3Bvc3RlZF9tYng7CisJCW1ieC0+b3BzLmNoZWNrX2Zvcl9tc2cgPSBpZ2JfY2hlY2tfZm9yX21zZ19wZjsKKwkJbWJ4LT5vcHMuY2hlY2tfZm9yX2FjayA9IGlnYl9jaGVja19mb3JfYWNrX3BmOworCQltYngtPm9wcy5jaGVja19mb3JfcnN0ID0gaWdiX2NoZWNrX2Zvcl9yc3RfcGY7CisKKwkJbWJ4LT5zdGF0cy5tc2dzX3R4ID0gMDsKKwkJbWJ4LT5zdGF0cy5tc2dzX3J4ID0gMDsKKwkJbWJ4LT5zdGF0cy5yZXFzID0gMDsKKwkJbWJ4LT5zdGF0cy5hY2tzID0gMDsKKwkJbWJ4LT5zdGF0cy5yc3RzID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzk4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0UxMDAwX01CWF9IXworI2RlZmluZSBfRTEwMDBfTUJYX0hfCisKKyNpbmNsdWRlICJlMTAwMF9ody5oIgorCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfU1RTICAgMHgwMDAwMDAwMSAvKiBJbml0aWF0ZSBtZXNzYWdlIHNlbmQgdG8gVkYgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9BQ0sgICAweDAwMDAwMDAyIC8qIEFjayBtZXNzYWdlIHJlY3YnZCBmcm9tIFZGICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfVkZVICAgMHgwMDAwMDAwNCAvKiBWRiBvd25zIHRoZSBtYWlsYm94IGJ1ZmZlciAqLworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX1BGVSAgIDB4MDAwMDAwMDggLyogUEYgb3ducyB0aGUgbWFpbGJveCBidWZmZXIgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9SVkZVICAweDAwMDAwMDEwIC8qIFJlc2V0IFZGVSAtIHVzZWQgd2hlbiBWRiBzdHVjayAqLworCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZSRVFfTUFTSyAweDAwMDAwMEZGIC8qIGJpdHMgZm9yIFZGIG1lc3NhZ2VzICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZSRVFfVkYxICAweDAwMDAwMDAxIC8qIGJpdCBmb3IgVkYgMSBtZXNzYWdlICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZBQ0tfTUFTSyAweDAwRkYwMDAwIC8qIGJpdHMgZm9yIFZGIGFja3MgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklDUl9WRkFDS19WRjEgIDB4MDAwMTAwMDAgLyogYml0IGZvciBWRiAxIGFjayAqLworCisjZGVmaW5lIEUxMDAwX1ZGTUFJTEJPWF9TSVpFICAgMTYgLyogMTYgMzIgYml0IHdvcmRzIC0gNjQgYnl0ZXMgKi8KKworLyogSWYgaXQncyBhIEUxMDAwX1ZGXyogbXNnIHRoZW4gaXQgb3JpZ2luYXRlcyBpbiB0aGUgVkYgYW5kIGlzIHNlbnQgdG8gdGhlCisgKiBQRi4gIFRoZSByZXZlcnNlIGlzIHRydWUgaWYgaXQgaXMgRTEwMDBfUEZfKi4KKyAqIE1lc3NhZ2UgQUNLJ3MgYXJlIHRoZSB2YWx1ZSBvcidkIHdpdGggMHhGMDAwMDAwMAorICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR1RZUEVfQUNLICAgICAgMHg4MDAwMDAwMCAgLyogTWVzc2FnZXMgYmVsb3cgb3InZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBhcmUgdGhlIEFDSyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dUWVBFX05BQ0sgICAgIDB4NDAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgYXJlIHRoZSBOQUNLICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR1RZUEVfQ1RTICAgICAgMHgyMDAwMDAwMCAgLyogSW5kaWNhdGVzIHRoYXQgVkYgaXMgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciB0byBzZW5kIHJlcXVlc3RzICovCisjZGVmaW5lIEUxMDAwX1ZUX01TR0lORk9fU0hJRlQgICAgMTYKKy8qIGJpdHMgMjM6MTYgYXJlIHVzZWQgZm9yIGV4cmEgaW5mbyBmb3IgY2VydGFpbiBtZXNzYWdlcyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dJTkZPX01BU0sgICAgICgweEZGIDw8IEUxMDAwX1ZUX01TR0lORk9fU0hJRlQpCisKKyNkZWZpbmUgRTEwMDBfVkZfUkVTRVQgICAgICAgICAgICAweDAxIC8qIFZGIHJlcXVlc3RzIHJlc2V0ICovCisjZGVmaW5lIEUxMDAwX1ZGX1NFVF9NQUNfQUREUiAgICAgMHgwMiAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUFDIGFkZHIgKi8KKyNkZWZpbmUgRTEwMDBfVkZfU0VUX01VTFRJQ0FTVCAgICAweDAzIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQyBhZGRyICovCisjZGVmaW5lIEUxMDAwX1ZGX1NFVF9WTEFOICAgICAgICAgMHgwNCAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVkxBTiAqLworI2RlZmluZSBFMTAwMF9WRl9TRVRfTFBFICAgICAgICAgIDB4MDUgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZNT0xSLkxQRSAqLworCisjZGVmaW5lIEUxMDAwX1BGX0NPTlRST0xfTVNHICAgICAgMHgwMTAwIC8qIFBGIGNvbnRyb2wgbWVzc2FnZSAqLworCitzMzIgaWdiX3JlYWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGlnYl93cml0ZV9tYngoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaWdiX3JlYWRfcG9zdGVkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpZ2Jfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpZ2JfY2hlY2tfZm9yX21zZyhzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK3MzMiBpZ2JfY2hlY2tfZm9yX2FjayhzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK3MzMiBpZ2JfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK3MzMiBpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKHN0cnVjdCBlMTAwMF9odyAqKTsKKworI2VuZGlmIC8qIF9FMTAwMF9NQlhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYwppbmRleCBhODRlNGU0Li5hODhiZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNDE5LDcgKzQxOSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5hY3F1aXJlX252bShodyk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtNDY4LDcgKzQ2OCw3IEBACiAKIAltc2xlZXAoMTApOwogcmVsZWFzZToKLQlody0+bnZtLm9wcy5yZWxlYXNlX252bShodyk7CisJaHctPm52bS5vcHMucmVsZWFzZShodyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTQ4NywxNCArNDg3LDE0IEBACiAJczMyICByZXRfdmFsOwogCXUxNiBudm1fZGF0YTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX1BCQV9PRkZTRVRfMCwgMSwgJm52bV9kYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX1BCQV9PRkZTRVRfMCwgMSwgJm52bV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCSpwYXJ0X251bSA9ICh1MzIpKG52bV9kYXRhIDw8IDE2KTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX1BCQV9PRkZTRVRfMSwgMSwgJm52bV9kYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX1BCQV9PRkZTRVRfMSwgMSwgJm52bV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJZ290byBvdXQ7CkBAIC01MTUsMjkgKzUxNSwyMyBAQAogICoqLwogczMyIGlnYl9yZWFkX21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0JczMyICByZXRfdmFsID0gMDsKLQl1MTYgb2Zmc2V0LCBudm1fZGF0YSwgaTsKKwl1MzIgcmFyX2hpZ2g7CisJdTMyIHJhcl9sb3c7CisJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkgKz0gMikgewotCQlvZmZzZXQgPSBpID4+IDE7Ci0JCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgb2Zmc2V0LCAxLCAmbnZtX2RhdGEpOwotCQlpZiAocmV0X3ZhbCkgewotCQkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlody0+bWFjLnBlcm1fYWRkcltpXSA9ICh1OCkobnZtX2RhdGEgJiAweEZGKTsKLQkJaHctPm1hYy5wZXJtX2FkZHJbaSsxXSA9ICh1OCkobnZtX2RhdGEgPj4gOCk7Ci0JfQorCXJhcl9oaWdoID0gcmQzMihFMTAwMF9SQUgoMCkpOworCXJhcl9sb3cgPSByZDMyKEUxMDAwX1JBTCgwKSk7CiAKLQkvKiBGbGlwIGxhc3QgYml0IG9mIG1hYyBhZGRyZXNzIGlmIHdlJ3JlIG9uIHNlY29uZCBwb3J0ICovCi0JaWYgKGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzEpCi0JCWh3LT5tYWMucGVybV9hZGRyWzVdIF49IDE7CisJZm9yIChpID0gMDsgaSA8IEUxMDAwX1JBTF9NQUNfQUREUl9MRU47IGkrKykKKwkJaHctPm1hYy5wZXJtX2FkZHJbaV0gPSAodTgpKHJhcl9sb3cgPj4gKGkqOCkpOworCisJZm9yIChpID0gMDsgaSA8IEUxMDAwX1JBSF9NQUNfQUREUl9MRU47IGkrKykKKwkJaHctPm1hYy5wZXJtX2FkZHJbaSs0XSA9ICh1OCkocmFyX2hpZ2ggPj4gKGkqOCkpOwogCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCiAJCWh3LT5tYWMuYWRkcltpXSA9IGh3LT5tYWMucGVybV9hZGRyW2ldOwogCi1vdXQ6Ci0JcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNTU0LDcgKzU0OCw3IEBACiAJdTE2IGksIG52bV9kYXRhOwogCiAJZm9yIChpID0gMDsgaSA8IChOVk1fQ0hFQ0tTVU1fUkVHICsgMSk7IGkrKykgewotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGksIDEsICZudm1fZGF0YSk7CisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBpLCAxLCAmbnZtX2RhdGEpOwogCQlpZiAocmV0X3ZhbCkgewogCQkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTU4Nyw3ICs1ODEsNyBAQAogCXUxNiBpLCBudm1fZGF0YTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVk1fQ0hFQ0tTVU1fUkVHOyBpKyspIHsKLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBpLCAxLCAmbnZtX2RhdGEpOworCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgaSwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2hlY2tzdW0uXG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtNTk1LDcgKzU4OSw3IEBACiAJCWNoZWNrc3VtICs9IG52bV9kYXRhOwogCX0KIAljaGVja3N1bSA9ICh1MTYpIE5WTV9TVU0gLSBjaGVja3N1bTsKLQlyZXRfdmFsID0gaHctPm52bS5vcHMud3JpdGVfbnZtKGh3LCBOVk1fQ0hFQ0tTVU1fUkVHLCAxLCAmY2hlY2tzdW0pOworCXJldF92YWwgPSBody0+bnZtLm9wcy53cml0ZShodywgTlZNX0NIRUNLU1VNX1JFRywgMSwgJmNoZWNrc3VtKTsKIAlpZiAocmV0X3ZhbCkKIAkJaHdfZGJnKCJOVk0gV3JpdGUgRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2hlY2tzdW0uXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IDE3ZmRkYjkuLmRlMmQ0ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImUxMDAwX21hYy5oIgogI2luY2x1ZGUgImUxMDAwX3BoeS5oIgogCi1zdGF0aWMgczMyICBpZ2JfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyB2b2lkIGlnYl9yZWxlYXNlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBzMzIgIGlnYl9hY3F1aXJlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBzMzIgIGlnYl9waHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiAgaWdiX3BoeV9zZXR1cF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAoc3RydWN0IGUxMDAwX2h3ICpodywKIAkJCQkJICAgICAgIHUxNiAqcGh5X2N0cmwpOwpAQCAtNDMsOSArMzksNiBAQAogLyogQ2FibGUgbGVuZ3RoIHRhYmxlcyAqLwogc3RhdGljIGNvbnN0IHUxNiBlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQogCXsgMCwgNTAsIDgwLCAxMTAsIDE0MCwgMTQwLCBFMTAwMF9DQUJMRV9MRU5HVEhfVU5ERUZJTkVEIH07Ci0jZGVmaW5lIE04OEUxMDAwX0NBQkxFX0xFTkdUSF9UQUJMRV9TSVpFIFwKLQkJKHNpemVvZihlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlKSAvIFwKLQkJIHNpemVvZihlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlWzBdKSkKIAogc3RhdGljIGNvbnN0IHUxNiBlMTAwMF9pZ3BfMl9jYWJsZV9sZW5ndGhfdGFibGVbXSA9CiAgICAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCA1LCA4LCAxMSwgMTMsIDE2LCAxOCwgMjEsCkBAIC05MSwxMyArODQsMTMgQEAKIAlzMzIgcmV0X3ZhbCA9IDA7CiAJdTE2IHBoeV9pZDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9JRDEsICZwaHlfaWQpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0lEMSwgJnBoeV9pZCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5LT5pZCA9ICh1MzIpKHBoeV9pZCA8PCAxNik7CiAJdWRlbGF5KDIwKTsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfSUQyLCAmcGh5X2lkKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9JRDIsICZwaHlfaWQpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTE4LDExICsxMTEsMTEgQEAKIHsKIAlzMzIgcmV0X3ZhbDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIDB4QzEpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgMHhDMSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgMCk7CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAwKTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMjU3LDkgKzI1MCwxMiBAQAogICoqLwogczMyIGlnYl9yZWFkX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKLQlzMzIgcmV0X3ZhbDsKKwlzMzIgcmV0X3ZhbCA9IDA7CiAKLQlyZXRfdmFsID0gaWdiX2FjcXVpcmVfcGh5KGh3KTsKKwlpZiAoIShody0+cGh5Lm9wcy5hY3F1aXJlKSkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZShodyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0yNjgsMTYgKzI2NCwxNSBAQAogCQkJCQkJICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAodTE2KW9mZnNldCk7CiAJCWlmIChyZXRfdmFsKSB7Ci0JCQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCQkJaHctPnBoeS5vcHMucmVsZWFzZShodyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCXJldF92YWwgPSBpZ2JfcmVhZF9waHlfcmVnX21kaWMoaHcsCi0JCQkJCSAgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKLQkJCQkJICBkYXRhKTsKKwlyZXRfdmFsID0gaWdiX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAorCQkJCQlkYXRhKTsKIAotCWlnYl9yZWxlYXNlX3BoeShodyk7CisJaHctPnBoeS5vcHMucmVsZWFzZShodyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTI5NCw5ICsyODksMTIgQEAKICAqKi8KIHMzMiBpZ2Jfd3JpdGVfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCiB7Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCi0JcmV0X3ZhbCA9IGlnYl9hY3F1aXJlX3BoeShodyk7CisJaWYgKCEoaHctPnBoeS5vcHMuYWNxdWlyZSkpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMzA1LDE2ICszMDMsMTUgQEAKIAkJCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgKHUxNilvZmZzZXQpOwogCQlpZiAocmV0X3ZhbCkgewotCQkJaWdiX3JlbGVhc2VfcGh5KGh3KTsKKwkJCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlyZXRfdmFsID0gaWdiX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKLQkJCQkJICAgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKKwlyZXRfdmFsID0gaWdiX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKIAkJCQkJICAgZGF0YSk7CiAKLQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0zMzksOCArMzM2LDcgQEAKIAl9CiAKIAkvKiBFbmFibGUgQ1JTIG9uIFRYLiBUaGlzIG11c3QgYmUgc2V0IGZvciBoYWxmLWR1cGxleCBvcGVyYXRpb24uICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0zODMsOCArMzc5LDcgQEAKIAlpZiAocGh5LT5kaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPT0gMSkKIAkJcGh5X2RhdGEgfD0gTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTM5Myw4ICszODgsNyBAQAogCQkgKiBGb3JjZSBUWF9DTEsgaW4gdGhlIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyCiAJCSAqIHRvIDI1TUh6IGNsb2NrLgogCQkgKi8KLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywKLQkJCQkJICAgICBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKIAkJCQkJICAgICAmcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNDEzLDggKzQwNyw3IEBACiAJCQlwaHlfZGF0YSB8PSAoTTg4RTEwMDBfRVBTQ1JfTUFTVEVSX0RPV05TSElGVF8xWCB8CiAJCQkJICAgICBNODhFMTAwMF9FUFNDUl9TTEFWRV9ET1dOU0hJRlRfMVgpOwogCQl9Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKIAkJCQkJICAgICBwaHlfZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC00NDksNyArNDQyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlc2V0X3BoeShodyk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlc2V0KGh3KTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIkVycm9yIHJlc2V0dGluZyB0aGUgUEhZLlxuIik7CiAJCWdvdG8gb3V0OwpAQCAtNDY0LDggKzQ1Nyw4IEBACiAJICovCiAJaWYgKHBoeS0+dHlwZSA9PSBlMTAwMF9waHlfaWdwKSB7CiAJCS8qIGRpc2FibGUgbHBsdSBkMyBkdXJpbmcgZHJpdmVyIGluaXQgKi8KLQkJaWYgKGh3LT5waHkub3BzLnNldF9kM19scGx1X3N0YXRlKQotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnNldF9kM19scGx1X3N0YXRlKGh3LCBmYWxzZSk7CisJCWlmIChwaHktPm9wcy5zZXRfZDNfbHBsdV9zdGF0ZSkKKwkJCXJldF92YWwgPSBwaHktPm9wcy5zZXRfZDNfbHBsdV9zdGF0ZShodywgZmFsc2UpOwogCQlpZiAocmV0X3ZhbCkgewogCQkJaHdfZGJnKCJFcnJvciBEaXNhYmxpbmcgTFBMVSBEM1xuIik7CiAJCQlnb3RvIG91dDsKQEAgLTQ3MywxMyArNDY2LDEzIEBACiAJfQogCiAJLyogZGlzYWJsZSBscGx1IGQwIGR1cmluZyBkcml2ZXIgaW5pdCAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5zZXRfZDBfbHBsdV9zdGF0ZShodywgZmFsc2UpOworCXJldF92YWwgPSBwaHktPm9wcy5zZXRfZDBfbHBsdV9zdGF0ZShodywgZmFsc2UpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZygiRXJyb3IgRGlzYWJsaW5nIExQTFUgRDBcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJLyogQ29uZmlndXJlIG1kaS1tZGl4IHNldHRpbmdzICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTQ5Nyw3ICs0OTAsNyBAQAogCQlkYXRhIHw9IElHUDAxRTEwMDBfUFNDUl9BVVRPX01ESVg7CiAJCWJyZWFrOwogCX0KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCBkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsIGRhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtNTEwLDMzICs1MDMsMzEgQEAKIAkJICovCiAJCWlmIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7CiAJCQkvKiBEaXNhYmxlIFNtYXJ0U3BlZWQgKi8KLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICAmZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCisJCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCQkJCQkgICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7Ci0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsCiAJCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJICAgICBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQkvKiBTZXQgYXV0byBNYXN0ZXIvU2xhdmUgcmVzb2x1dGlvbiBwcm9jZXNzICovCi0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwKLQkJCQkJCQkgICAmZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSAmPSB+Q1JfMTAwMFRfTVNfRU5BQkxFOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLAotCQkJCQkJCSAgICBkYXRhKTsKKwkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZkYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgJmRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCkBAIC01NjAsNyArNTUxLDcgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC02MDksMTIgKzYwMCwxMiBAQAogCSAqIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiBieSBzZXR0aW5nIHRoZSBBdXRvIE5lZyBFbmFibGUgYml0IGFuZAogCSAqIHRoZSBBdXRvIE5lZyBSZXN0YXJ0IGJpdCBpbiB0aGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXIuCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfY3RybCk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9jdHJsKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlwaHlfY3RybCB8PSAoTUlJX0NSX0FVVE9fTkVHX0VOIHwgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUcpOwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC02NTYsMTUgKzY0NywxMyBAQAogCXBoeS0+YXV0b25lZ19hZHZlcnRpc2VkICY9IHBoeS0+YXV0b25lZ19tYXNrOwogCiAJLyogUmVhZCB0aGUgTUlJIEF1dG8tTmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFkZHJlc3MgNCkuICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0FVVE9ORUdfQURWLAotCQkJCQkgICAmbWlpX2F1dG9uZWdfYWR2X3JlZyk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsICZtaWlfYXV0b25lZ19hZHZfcmVnKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlpZiAocGh5LT5hdXRvbmVnX21hc2sgJiBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7CiAJCS8qIFJlYWQgdGhlIE1JSSAxMDAwQmFzZS1UIENvbnRyb2wgUmVnaXN0ZXIgKEFkZHJlc3MgOSkuICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCSAgICBQSFlfMTAwMFRfQ1RSTCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwKIAkJCQkJICAgICZtaWlfMTAwMHRfY3RybF9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNzg1LDE3ICs3NzQsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwKLQkJCQkJICAgIG1paV9hdXRvbmVnX2Fkdl9yZWcpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwgbWlpX2F1dG9uZWdfYWR2X3JlZyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaHdfZGJnKCJBdXRvLU5lZyBBZHZlcnRpc2luZyAleFxuIiwgbWlpX2F1dG9uZWdfYWR2X3JlZyk7CiAKIAlpZiAocGh5LT5hdXRvbmVnX21hc2sgJiBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgICBQSFlfMTAwMFRfQ1RSTCwKLQkJCQkJICAgICAgbWlpXzEwMDB0X2N0cmxfcmVnKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKKwkJCQkJICAgICBQSFlfMTAwMFRfQ1RSTCwKKwkJCQkJICAgICBtaWlfMTAwMHRfY3RybF9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTgxOSwxMyArODA3LDEzIEBACiAJdTE2IHBoeV9kYXRhOwogCWJvb2wgbGluazsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAoaHcsICZwaHlfZGF0YSk7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtODMzLDE2ICs4MjEsMTQgQEAKIAkgKiBDbGVhciBBdXRvLUNyb3Nzb3ZlciB0byBmb3JjZSBNREkgbWFudWFsbHkuICBJR1AgcmVxdWlyZXMgTURJCiAJICogZm9yY2VkIHdoZW5ldmVyIHNwZWVkIGFuZCBkdXBsZXggYXJlIGZvcmNlZC4KIAkgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2RhdGEgJj0gfklHUDAxRTEwMDBfUFNDUl9BVVRPX01ESVg7CiAJcGh5X2RhdGEgJj0gfklHUDAxRTEwMDBfUFNDUl9GT1JDRV9NRElfTURJWDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC04OTcsMjAgKzg4MywxOCBAQAogCSAqIENsZWFyIEF1dG8tQ3Jvc3NvdmVyIHRvIGZvcmNlIE1ESSBtYW51YWxseS4gIE04OEUxMDAwIHJlcXVpcmVzIE1ESQogCSAqIGZvcmNlZCB3aGVuZXZlciBzcGVlZCBhbmQgZHVwbGV4IGFyZSBmb3JjZWQuCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2RhdGEgJj0gfk04OEUxMDAwX1BTQ1JfQVVUT19YX01PREU7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWh3X2RiZygiTTg4RTEwMDAgUFNDUjogJVhcbiIsIHBoeV9kYXRhKTsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05MTksNyArOTAzLDcgQEAKIAkvKiBSZXNldCB0aGUgcGh5IHRvIGNvbW1pdCBjaGFuZ2VzLiAqLwogCXBoeV9kYXRhIHw9IE1JSV9DUl9SRVNFVDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05NDAsNyArOTI0LDcgQEAKIAkJCSAqIFdlIGRpZG4ndCBnZXQgbGluay4KIAkJCSAqIFJlc2V0IHRoZSBEU1AgYW5kIGNyb3NzIG91ciBmaW5nZXJzLgogCQkJICovCi0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsCiAJCQkJCQkgICAgICBNODhFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAgICAweDAwMWQpOwogCQkJaWYgKHJldF92YWwpCkBAIC05NTcsOCArOTQxLDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05NjgsOCArOTUxLDcgQEAKIAkgKiB0aGUgcmVzZXQgdmFsdWUgb2YgMi41TUh6LgogCSAqLwogCXBoeV9kYXRhIHw9IE04OEUxMDAwX0VQU0NSX1RYX0NMS18yNTsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTk3NywxNCArOTU5LDEyIEBACiAJICogSW4gYWRkaXRpb24sIHdlIG11c3QgcmUtZW5hYmxlIENSUyBvbiBUeCBmb3IgYm90aCBoYWxmIGFuZCBmdWxsCiAJICogZHVwbGV4LgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfQVNTRVJUX0NSU19PTl9UWDsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTEwNzEsMTUgKzEwNTEsMTMgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgZGF0YTsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCi0JCQkJCSAgICZkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIWFjdGl2ZSkgewogCQlkYXRhICY9IH5JR1AwMkUxMDAwX1BNX0QzX0xQTFU7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCSAgICAgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CkBAIC0xMDkwLDI3ICsxMDY4LDI3IEBACiAJCSAqIFNtYXJ0U3BlZWQsIHNvIHBlcmZvcm1hbmNlIGlzIG1haW50YWluZWQuCiAJCSAqLwogCQlpZiAocGh5LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vbikgewotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywKIAkJCQkJCSAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29mZikgewotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywKKwkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywKIAkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKQEAgLTExMjAsMjIgKzEwOTgsMTkgQEAKIAkJICAgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IEUxMDAwX0FMTF9OT1RfR0lHKSB8fAogCQkgICAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gRTEwMDBfQUxMXzEwX1NQRUVEKSkgewogCQlkYXRhIHw9IElHUDAyRTEwMDBfUE1fRDNfTFBMVTsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCSAgICAgIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qIFdoZW4gTFBMVSBpcyBlbmFibGVkLCB3ZSBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCSAgICAgJmRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCSAgICAgIGRhdGEpOwogCX0KIApAQCAtMTE3Niw3ICsxMTUxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgb2Zmc2V0LCAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgb2Zmc2V0LCAmcGh5X2RhdGEpOwogCiAJaWYgKCFyZXRfdmFsKQogCQlwaHktPnNwZWVkX2Rvd25ncmFkZWQgPSAocGh5X2RhdGEgJiBtYXNrKSA/IHRydWUgOiBmYWxzZTsKQEAgLTExOTksNyArMTE3NCw3IEBACiAJczMyIHJldF92YWw7CiAJdTE2IGRhdGE7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywgJmRhdGEpOwogCiAJaWYgKCFyZXRfdmFsKQogCQlwaHktPmNhYmxlX3BvbGFyaXR5ID0gKGRhdGEgJiBNODhFMTAwMF9QU1NSX1JFVl9QT0xBUklUWSkKQEAgLTEyMjgsOCArMTIwMyw3IEBACiAJICogUG9sYXJpdHkgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgc3BlZWQgb2YKIAkgKiBvdXIgY29ubmVjdGlvbi4KIAkgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywKLQkJCQkJICAgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTEyNDYsNyArMTIyMCw3IEBACiAJCW1hc2sJPSBJR1AwMUUxMDAwX1BTU1JfUE9MQVJJVFlfUkVWRVJTRUQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgb2Zmc2V0LCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBvZmZzZXQsICZkYXRhKTsKIAogCWlmICghcmV0X3ZhbCkKIAkJcGh5LT5jYWJsZV9wb2xhcml0eSA9IChkYXRhICYgbWFzaykKQEAgLTEyNzEsMTAgKzEyNDUsMTAgQEAKIAogCS8qIEJyZWFrIGFmdGVyIGF1dG9uZWcgY29tcGxldGVzIG9yIFBIWV9BVVRPX05FR19MSU1JVCBleHBpcmVzLiAqLwogCWZvciAoaSA9IFBIWV9BVVRPX05FR19MSU1JVDsgaSA+IDA7IGktLSkgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwogCQlpZiAocGh5X3N0YXR1cyAmIE1JSV9TUl9BVVRPTkVHX0NPTVBMRVRFKQpAQCAtMTMxMCwxMCArMTI4NCwxMCBAQAogCQkgKiB0d2ljZSBkdWUgdG8gdGhlIGxpbmsgYml0IGJlaW5nIHN0aWNreS4gIE5vIGhhcm0gZG9pbmcKIAkJICogaXQgYWNyb3NzIHRoZSBib2FyZC4KIAkJICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CiAJCWlmIChyZXRfdmFsKQogCQkJYnJlYWs7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CiAJCWlmIChyZXRfdmFsKQogCQkJYnJlYWs7CiAJCWlmIChwaHlfc3RhdHVzICYgTUlJX1NSX0xJTktfU1RBVFVTKQpAQCAtMTM1MCw4ICsxMzI0LDcgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2RhdGEsIGluZGV4OwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTM3Miw4ICsxMzQ1LDggQEAKICAqCiAgKiAgVGhlIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgKGFnYykgbm9ybWFsaXplcyB0aGUgYW1wbGl0dWRlIG9mIHRoZQogICogIHJlY2VpdmVkIHNpZ25hbCwgYWRqdXN0aW5nIGZvciB0aGUgYXR0ZW51YXRpb24gcHJvZHVjZWQgYnkgdGhlCi0gKiAgY2FibGUuICBCeSByZWFkaW5nIHRoZSBBR0MgcmVnaXN0ZXJzLCB3aGljaCByZXBlcmVzZW50IHRoZQotICogIGNvYmluYXRpb24gb2YgY291cnNlIGFuZCBmaW5lIGdhaW4gdmFsdWUsIHRoZSB2YWx1ZSBjYW4gYmUgcHV0CisgKiAgY2FibGUuICBCeSByZWFkaW5nIHRoZSBBR0MgcmVnaXN0ZXJzLCB3aGljaCByZXByZXNlbnQgdGhlCisgKiAgY29tYmluYXRpb24gb2YgY29hcnNlIGFuZCBmaW5lIGdhaW4gdmFsdWUsIHRoZSB2YWx1ZSBjYW4gYmUgcHV0CiAgKiAgaW50byBhIGxvb2t1cCB0YWJsZSB0byBvYnRhaW4gdGhlIGFwcHJveGltYXRlIGNhYmxlIGxlbmd0aAogICogIGZvciBlYWNoIGNoYW5uZWwuCiAgKiovCkBAIC0xMzkyLDE0ICsxMzY1LDEzIEBACiAKIAkvKiBSZWFkIHRoZSBBR0MgcmVnaXN0ZXJzIGZvciBhbGwgY2hhbm5lbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSUdQMDJFMTAwMF9QSFlfQ0hBTk5FTF9OVU07IGkrKykgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBhZ2NfcmVnX2FycmF5W2ldLAotCQkJCQkJICAgJnBoeV9kYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBhZ2NfcmVnX2FycmF5W2ldLCAmcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qCiAJCSAqIEdldHRpbmcgYml0cyAxNTo5LCB3aGljaCByZXByZXNlbnQgdGhlIGNvbWJpbmF0aW9uIG9mCi0JCSAqIGNvdXJzZSBhbmQgZmluZSBnYWluIHZhbHVlcy4gIFRoZSByZXN1bHQgaXMgYSBudW1iZXIKKwkJICogY29hcnNlIGFuZCBmaW5lIGdhaW4gdmFsdWVzLiAgVGhlIHJlc3VsdCBpcyBhIG51bWJlcgogCQkgKiB0aGF0IGNhbiBiZSBwdXQgaW50byB0aGUgbG9va3VwIHRhYmxlIHRvIG9idGFpbiB0aGUKIAkJICogYXBwcm94aW1hdGUgY2FibGUgbGVuZ3RoLgogCQkgKi8KQEAgLTE0NTYsNyArMTQyOCw3IEBACiAJdTE2IHBoeV9kYXRhOwogCWJvb2wgbGluazsKIAotCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwlpZiAocGh5LT5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCWh3X2RiZygiUGh5IGluZm8gaXMgb25seSB2YWxpZCBmb3IgY29wcGVyIG1lZGlhXG4iKTsKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfQ09ORklHOwogCQlnb3RvIG91dDsKQEAgLTE0NzIsMzMgKzE0NDQsMjkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5LT5wb2xhcml0eV9jb3JyZWN0aW9uID0gKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTCkKLQkJCQkgICA/IHRydWUKLQkJCQkgICA6IGZhbHNlOworCQkJCSAgID8gdHJ1ZSA6IGZhbHNlOwogCiAJcmV0X3ZhbCA9IGlnYl9jaGVja19wb2xhcml0eV9tODgoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywgJnBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlwaHktPmlzX21kaXggPSAocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX01ESVgpID8gdHJ1ZSA6IGZhbHNlOwogCiAJaWYgKChwaHlfZGF0YSAmIE04OEUxMDAwX1BTU1JfU1BFRUQpID09IE04OEUxMDAwX1BTU1JfMTAwME1CUykgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CisJCXJldF92YWwgPSBwaHktPm9wcy5nZXRfY2FibGVfbGVuZ3RoKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAotCQkJCQkJICAgJnBoeV9kYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLCAmcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xNTUyLDggKzE1MjAsNyBAQAogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfU1RBVFVTLAotCQkJCQkgICAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywgJmRhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTU2MSwxMiArMTUyOCwxMSBAQAogCiAJaWYgKChkYXRhICYgSUdQMDFFMTAwMF9QU1NSX1NQRUVEX01BU0spID09CiAJICAgIElHUDAxRTEwMDBfUFNTUl9TUEVFRF8xMDAwTUJQUykgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CisJCXJldF92YWwgPSBwaHktPm9wcy5nZXRfY2FibGVfbGVuZ3RoKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAotCQkJCQkJICAgJmRhdGEpOworCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIApAQCAtMTU5OSwxMiArMTU2NSwxMiBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfY3RybDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2N0cmwpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2N0cmwgfD0gTUlJX0NSX1JFU0VUOwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xNjM1LDcgKzE2MDEsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaWdiX2FjcXVpcmVfcGh5KGh3KTsKKwlyZXRfdmFsID0gcGh5LT5vcHMuYWNxdWlyZShodyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xNjUwLDc0ICsxNjE2LDE0IEBACiAKIAl1ZGVsYXkoMTUwKTsKIAotCWlnYl9yZWxlYXNlX3BoeShodyk7CisJcGh5LT5vcHMucmVsZWFzZShodyk7CiAKLQlyZXRfdmFsID0gaWdiX2dldF9waHlfY2ZnX2RvbmUoaHcpOworCXJldF92YWwgPSBwaHktPm9wcy5nZXRfY2ZnX2RvbmUoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKLS8qIEludGVybmFsIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0KLS8qKgotICogIGlnYl9nZXRfcGh5X2NmZ19kb25lIC0gR2VuZXJpYyBQSFkgY29uZmlndXJhdGlvbiBkb25lCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqCi0gKiAgUmV0dXJuIHN1Y2Nlc3MgaWYgc2lsaWNvbiBmYW1pbHkgZGlkIG5vdCBpbXBsZW1lbnQgYSBmYW1pbHkgc3BlY2lmaWMKLSAqICBnZXRfY2ZnX2RvbmUgZnVuY3Rpb24uCi0gKiovCi1zdGF0aWMgczMyIGlnYl9nZXRfcGh5X2NmZ19kb25lKHN0cnVjdCBlMTAwMF9odyAqaHcpCi17Ci0JaWYgKGh3LT5waHkub3BzLmdldF9jZmdfZG9uZSkKLQkJcmV0dXJuIGh3LT5waHkub3BzLmdldF9jZmdfZG9uZShodyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgaWdiX3JlbGVhc2VfcGh5IC0gR2VuZXJpYyByZWxlYXNlIFBIWQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFJldHVybiBpZiBzaWxpY29uIGZhbWlseSBkb2VzIG5vdCByZXF1aXJlIGEgc2VtYXBob3JlIHdoZW4gYWNjZXNzaW5nIHRoZQotICogIFBIWS4KLSAqKi8KLXN0YXRpYyB2b2lkIGlnYl9yZWxlYXNlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5yZWxlYXNlX3BoeSkKLQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotfQotCi0vKioKLSAqICBpZ2JfYWNxdWlyZV9waHkgLSBHZW5lcmljIGFjcXVpcmUgUEhZCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqCi0gKiAgUmV0dXJuIHN1Y2Nlc3MgaWYgc2lsaWNvbiBmYW1pbHkgZG9lcyBub3QgcmVxdWlyZSBhIHNlbWFwaG9yZSB3aGVuCi0gKiAgYWNjZXNzaW5nIHRoZSBQSFkuCi0gKiovCi1zdGF0aWMgczMyIGlnYl9hY3F1aXJlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5hY3F1aXJlX3BoeSkKLQkJcmV0dXJuIGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqICBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleCAtIEdlbmVyaWMgZm9yY2UgUEhZIHNwZWVkL2R1cGxleAotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFdoZW4gdGhlIHNpbGljb24gZmFtaWx5IGhhcyBub3QgaW1wbGVtZW50ZWQgYSBmb3JjZWQgc3BlZWQvZHVwbGV4Ci0gKiAgZnVuY3Rpb24gZm9yIHRoZSBQSFksIHNpbXBseSByZXR1cm4gMC4KLSAqKi8KLXMzMiBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5mb3JjZV9zcGVlZF9kdXBsZXgpCi0JCXJldHVybiBody0+cGh5Lm9wcy5mb3JjZV9zcGVlZF9kdXBsZXgoaHcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogIGlnYl9waHlfaW5pdF9zY3JpcHRfaWdwMyAtIEluaXRzIHRoZSBJR1AzIFBIWQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCkBAIC0xNzMwLDc1ICsxNjM2LDc1IEBACiAKIAkvKiBQSFkgaW5pdCBJR1AgMyAqLwogCS8qIEVuYWJsZSByaXNlL2ZhbGwsIDEwLW1vZGUgd29yayBpbiBjbGFzcy1BICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCAweDkwMTgpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRjVCLCAweDkwMTgpOwogCS8qIFJlbW92ZSBhbGwgY2FwcyBmcm9tIFJlcGxpY2EgcGF0aCBmaWx0ZXIgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDJGNTIsIDB4MDAwMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDJGNTIsIDB4MDAwMCk7CiAJLyogQmlhcyB0cmltbWluZyBmb3IgQURDLCBBRkUgYW5kIERyaXZlciAoRGVmYXVsdCkgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDJGQjEsIDB4OEIyNCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDJGQjEsIDB4OEIyNCk7CiAJLyogSW5jcmVhc2UgSHlicmlkIHBvbHkgYmlhcyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MkZCMiwgMHhGOEYwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MkZCMiwgMHhGOEYwKTsKIAkvKiBBZGQgNCUgdG8gVFggYW1wbGl0dWRlIGluIEdpZ2EgbW9kZSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MjAxMCwgMHgxMEIwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MjAxMCwgMHgxMEIwKTsKIAkvKiBEaXNhYmxlIHRyaW1taW5nIChUVFQpICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyMDExLCAweDAwMDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyMDExLCAweDAwMDApOwogCS8qIFBvbHkgREMgY29ycmVjdGlvbiB0byA5NC42JSArIDIlIGZvciBhbGwgY2hhbm5lbHMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwREQsIDB4MjQ5QSk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDIwREQsIDB4MjQ5QSk7CiAJLyogQUJTIERDIGNvcnJlY3Rpb24gdG8gOTUuOSUgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwREUsIDB4MDBEMyk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDIwREUsIDB4MDBEMyk7CiAJLyogQkcgdGVtcCBjdXJ2ZSB0cmltICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyOEI0LCAweDA0Q0UpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyOEI0LCAweDA0Q0UpOwogCS8qIEluY3JlYXNpbmcgQURDIE9QQU1QIHN0YWdlIDEgY3VycmVudHMgdG8gbWF4ICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRjcwLCAweDI5RTQpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRjcwLCAweDI5RTQpOwogCS8qIEZvcmNlIDEwMDAgKCByZXF1aXJlZCBmb3IgZW5hYmxpbmcgUEhZIHJlZ3MgY29uZmlndXJhdGlvbikgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDAwMDAsIDB4MDE0MCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDAwMDAsIDB4MDE0MCk7CiAJLyogU2V0IHVwZF9mcmVxIHRvIDYgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGMzAsIDB4MTYwNik7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGMzAsIDB4MTYwNik7CiAJLyogRGlzYWJsZSBOUERGRSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUYzMSwgMHhCODE0KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUYzMSwgMHhCODE0KTsKIAkvKiBEaXNhYmxlIGFkYXB0aXZlIGZpeGVkIEZGRSAoRGVmYXVsdCkgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGMzUsIDB4MDAyQSk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGMzUsIDB4MDAyQSk7CiAJLyogRW5hYmxlIEZGRSBoeXN0ZXJlc2lzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjNFLCAweDAwNjcpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjNFLCAweDAwNjcpOwogCS8qIEZpeGVkIEZGRSBmb3Igc2hvcnQgY2FibGUgbGVuZ3RocyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY1NCwgMHgwMDY1KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY1NCwgMHgwMDY1KTsKIAkvKiBGaXhlZCBGRkUgZm9yIG1lZGl1bSBjYWJsZSBsZW5ndGhzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjU1LCAweDAwMkEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjU1LCAweDAwMkEpOwogCS8qIEZpeGVkIEZGRSBmb3IgbG9uZyBjYWJsZSBsZW5ndGhzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjU2LCAweDAwMkEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjU2LCAweDAwMkEpOwogCS8qIEVuYWJsZSBBZGFwdGl2ZSBDbGlwIFRocmVzaG9sZCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3MiwgMHgzRkIwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3MiwgMHgzRkIwKTsKIAkvKiBBSFQgcmVzZXQgbGltaXQgdG8gMSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3NiwgMHhDMEZGKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3NiwgMHhDMEZGKTsKIAkvKiBTZXQgQUhUIG1hc3RlciBkZWxheSB0byAxMjcgbXNlYyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3NywgMHgxREVDKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3NywgMHgxREVDKTsKIAkvKiBTZXQgc2NhbiBiaXRzIGZvciBBSFQgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzgsIDB4RjlFRik7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzgsIDB4RjlFRik7CiAJLyogU2V0IEFIVCBQcmVzZXQgYml0cyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3OSwgMHgwMjEwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY3OSwgMHgwMjEwKTsKIAkvKiBDaGFuZ2UgaW50ZWdfZmFjdG9yIG9mIGNoYW5uZWwgQSB0byAzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxODk1LCAweDAwMDMpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxODk1LCAweDAwMDMpOwogCS8qIENoYW5nZSBwcm9wX2ZhY3RvciBvZiBjaGFubmVscyBCQ0QgdG8gOCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MTc5NiwgMHgwMDA4KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MTc5NiwgMHgwMDA4KTsKIAkvKiBDaGFuZ2UgY2dfaWNvdW50ICsgZW5hYmxlIGludGVnYnAgZm9yIGNoYW5uZWxzIEJDRCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MTc5OCwgMHhEMDA4KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MTc5OCwgMHhEMDA4KTsKIAkvKgogCSAqIENoYW5nZSBjZ19pY291bnQgKyBlbmFibGUgaW50ZWdicCArIGNoYW5nZSBwcm9wX2ZhY3Rvcl9tYXN0ZXIKIAkgKiB0byA4IGZvciBjaGFubmVsIEEKIAkgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE4OTgsIDB4RDkxOCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE4OTgsIDB4RDkxOCk7CiAJLyogRGlzYWJsZSBBSFQgaW4gU2xhdmUgbW9kZSBvbiBjaGFubmVsIEEgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE4N0EsIDB4MDgwMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE4N0EsIDB4MDgwMCk7CiAJLyoKIAkgKiBFbmFibGUgTFBMVSBhbmQgZGlzYWJsZSBBTiB0byAxMDAwIGluIG5vbi1EMGEgc3RhdGVzLAogCSAqIEVuYWJsZSBTUEQrQjJCCiAJICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDE5LCAweDAwOEQpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDE5LCAweDAwOEQpOwogCS8qIEVuYWJsZSByZXN0YXJ0IEFOIG9uIGFuMTAwMF9kaXMgY2hhbmdlICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDFCLCAweDIwODApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDFCLCAweDIwODApOwogCS8qIEVuYWJsZSB3aF9maWZvIHJlYWQgY2xvY2sgaW4gMTAvMTAwIG1vZGVzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDE0LCAweDAwNDUpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDE0LCAweDAwNDUpOwogCS8qIFJlc3RhcnQgQU4sIFNwZWVkIHNlbGVjdGlvbiBpcyAxMDAwICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLCAweDEzNDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDAwLCAweDEzNDApOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmgKaW5kZXggOGY4ZmUwYS4uMzIyOGE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQ0LDcgKzQ0LDYgQEAKIHMzMiAgaWdiX2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX2NoZWNrX3Jlc2V0X2Jsb2NrKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfY29wcGVyX2xpbmtfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXMzMiAgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9jb3BwZXJfbGlua19zZXR1cF9pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9jb3BwZXJfbGlua19zZXR1cF9tODgoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCmluZGV4IGJkZjVkODMuLjBiZDc3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTczLDggKzczLDc1IEBACiAjZGVmaW5lIEUxMDAwX1RDUFRJTUVSIDB4MDEwNEMgIC8qIFRDUCBUaW1lciAtIFJXICovCiAjZGVmaW5lIEUxMDAwX0ZDUlRMICAgIDB4MDIxNjAgIC8qIEZsb3cgQ29udHJvbCBSZWNlaXZlIFRocmVzaG9sZCBMb3cgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9GQ1JUSCAgICAweDAyMTY4ICAvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgSGlnaCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX1JERlBDUShfbikgICgweDAyNDMwICsgKDB4NCAqIChfbikpKQogI2RlZmluZSBFMTAwMF9GQ1JUViAgICAweDAyNDYwICAvKiBGbG93IENvbnRyb2wgUmVmcmVzaCBUaW1lciBWYWx1ZSAtIFJXICovCisKKy8qIElFRUUgMTU4OCBUSU1FU1lOQ0ggKi8KKyNkZWZpbmUgRTEwMDBfVFNZTkNUWENUTCAweDBCNjE0CisjZGVmaW5lIEUxMDAwX1RTWU5DVFhDVExfVkFMSUQgKDE8PDApCisjZGVmaW5lIEUxMDAwX1RTWU5DVFhDVExfRU5BQkxFRCAoMTw8NCkKKyNkZWZpbmUgRTEwMDBfVFNZTkNSWENUTCAweDBCNjIwCisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDVExfVkFMSUQgKDE8PDApCisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDVExfRU5BQkxFRCAoMTw8NCkKK2VudW0geworCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9WMiA9IDAsCisJRTEwMDBfVFNZTkNSWENUTF9UWVBFX0w0X1YxID0gKDE8PDEpLAorCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9MNF9WMiA9ICgxPDwyKSwKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfQUxMID0gKDE8PDMpLAorCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9FVkVOVF9WMiA9ICgxPDwzKSB8ICgxPDwxKSwKK307CisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDRkcgMHgwNUY1MAorZW51bSB7CisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfU1lOQ19NRVNTQUdFID0gMDw8MCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9ERUxBWV9SRVFfTUVTU0FHRSA9IDE8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfRk9MTE9XVVBfTUVTU0FHRSA9IDI8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfREVMQVlfUkVTUF9NRVNTQUdFID0gMzw8MCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9NQU5BR0VNRU5UX01FU1NBR0UgPSA0PDwwLAorCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfU1lOQ19NRVNTQUdFID0gMDw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9ERUxBWV9SRVFfTUVTU0FHRSA9IDE8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfUEFUSF9ERUxBWV9SRVFfTUVTU0FHRSA9IDI8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfUEFUSF9ERUxBWV9SRVNQX01FU1NBR0UgPSAzPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX0ZPTExPV1VQX01FU1NBR0UgPSA4PDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX0RFTEFZX1JFU1BfTUVTU0FHRSA9IDk8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfUEFUSF9ERUxBWV9GT0xMT1dVUF9NRVNTQUdFID0gMHhBPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX0FOTk9VTkNFX01FU1NBR0UgPSAweEI8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfU0lHTkFMTElOR19NRVNTQUdFID0gMHhDPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX01BTkFHRU1FTlRfTUVTU0FHRSA9IDB4RDw8OCwKK307CisjZGVmaW5lIEUxMDAwX1NZU1RJTUwgMHgwQjYwMAorI2RlZmluZSBFMTAwMF9TWVNUSU1IIDB4MEI2MDQKKyNkZWZpbmUgRTEwMDBfVElNSU5DQSAweDBCNjA4CisKKyNkZWZpbmUgRTEwMDBfUlhNVFJMICAgICAweDBCNjM0CisjZGVmaW5lIEUxMDAwX1JYU1RNUEwgMHgwQjYyNAorI2RlZmluZSBFMTAwMF9SWFNUTVBIIDB4MEI2MjgKKyNkZWZpbmUgRTEwMDBfUlhTQVRSTCAweDBCNjJDCisjZGVmaW5lIEUxMDAwX1JYU0FUUkggMHgwQjYzMAorCisjZGVmaW5lIEUxMDAwX1RYU1RNUEwgMHgwQjYxOAorI2RlZmluZSBFMTAwMF9UWFNUTVBIIDB4MEI2MUMKKworI2RlZmluZSBFMTAwMF9FVFFGMCAgIDB4MDVDQjAKKyNkZWZpbmUgRTEwMDBfRVRRRjEgICAweDA1Q0I0CisjZGVmaW5lIEUxMDAwX0VUUUYyICAgMHgwNUNCOAorI2RlZmluZSBFMTAwMF9FVFFGMyAgIDB4MDVDQkMKKyNkZWZpbmUgRTEwMDBfRVRRRjQgICAweDA1Q0MwCisjZGVmaW5lIEUxMDAwX0VUUUY1ICAgMHgwNUNDNAorI2RlZmluZSBFMTAwMF9FVFFGNiAgIDB4MDVDQzgKKyNkZWZpbmUgRTEwMDBfRVRRRjcgICAweDA1Q0NDCisKKy8qIEZpbHRlcmluZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRTEwMDBfU0FRRihfbikgKDB4NTk4MCArIDQgKiAoX24pKQorI2RlZmluZSBFMTAwMF9EQVFGKF9uKSAoMHg1OUEwICsgNCAqIChfbikpCisjZGVmaW5lIEUxMDAwX1NQUUYoX24pICgweDU5QzAgKyA0ICogKF9uKSkKKyNkZWZpbmUgRTEwMDBfRlRRRihfbikgKDB4NTlFMCArIDQgKiAoX24pKQorI2RlZmluZSBFMTAwMF9TQVFGMCBFMTAwMF9TQVFGKDApCisjZGVmaW5lIEUxMDAwX0RBUUYwIEUxMDAwX0RBUUYoMCkKKyNkZWZpbmUgRTEwMDBfU1BRRjAgRTEwMDBfU1BRRigwKQorI2RlZmluZSBFMTAwMF9GVFFGMCBFMTAwMF9GVFFGKDApCisjZGVmaW5lIEUxMDAwX1NZTlFGKF9uKSAoMHgwNTVGQyArICg0ICogKF9uKSkpIC8qIFNZTiBQYWNrZXQgUXVldWUgRmx0ciAqLworI2RlZmluZSBFMTAwMF9FVFFGKF9uKSAgKDB4MDVDQjAgKyAoNCAqIChfbikpKSAvKiBFVHlwZSBRdWV1ZSBGbHRyICovCisKIC8qIFNwbGl0IGFuZCBSZXBsaWNhdGlvbiBSWCBDb250cm9sIC0gUlcgKi8KIC8qCiAgKiBDb252ZW5pZW5jZSBtYWNyb3MKQEAgLTExMCw3ICsxNzcsNiBAQAogCQkJCSAgICA6ICgweDBFMDE4ICsgKChfbikgKiAweDQwKSkpCiAjZGVmaW5lIEUxMDAwX1RYRENUTChfbikgICgoX24pIDwgNCA/ICgweDAzODI4ICsgKChfbikgKiAweDEwMCkpIFwKIAkJCQkgICAgOiAoMHgwRTAyOCArICgoX24pICogMHg0MCkpKQotI2RlZmluZSBFMTAwMF9UQVJDKF9uKSAgICAoMHgwMzg0MCArIChfbiA8PCA4KSkKICNkZWZpbmUgRTEwMDBfRENBX1RYQ1RSTChfbikgKDB4MDM4MTQgKyAoX24gPDwgOCkpCiAjZGVmaW5lIEUxMDAwX0RDQV9SWENUUkwoX24pICgweDAyODE0ICsgKF9uIDw8IDgpKQogI2RlZmluZSBFMTAwMF9URFdCQUwoX24pICAoKF9uKSA8IDQgPyAoMHgwMzgzOCArICgoX24pICogMHgxMDApKSBcCkBAIC0yMjYsMTYgKzI5MiwxNCBAQAogI2RlZmluZSBFMTAwMF9SQUgoX2kpICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDQgKyAoKF9pKSAqIDgpKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA1NEU0ICsgKChfaSAtIDE2KSAqIDgpKSkKICNkZWZpbmUgRTEwMDBfVkZUQSAgICAgMHgwNTYwMCAgLyogVkxBTiBGaWx0ZXIgVGFibGUgQXJyYXkgLSBSVyBBcnJheSAqLwotI2RlZmluZSBFMTAwMF9WTURfQ1RMICAweDA1ODFDICAvKiBWTURxIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9WVF9DVEwgICAweDA1ODFDICAvKiBWTURxIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVUMgICAgICAweDA1ODAwICAvKiBXYWtldXAgQ29udHJvbCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1dVRkMgICAgIDB4MDU4MDggIC8qIFdha2V1cCBGaWx0ZXIgQ29udHJvbCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1dVUyAgICAgIDB4MDU4MTAgIC8qIFdha2V1cCBTdGF0dXMgLSBSTyAqLwogI2RlZmluZSBFMTAwMF9NQU5DICAgICAweDA1ODIwICAvKiBNYW5hZ2VtZW50IENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9JUEFWICAgICAweDA1ODM4ICAvKiBJUCBBZGRyZXNzIFZhbGlkIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfV1VQTCAgICAgMHgwNTkwMCAgLyogV2FrZXVwIFBhY2tldCBMZW5ndGggLSBSVyAqLwotI2RlZmluZSBFMTAwMF9IT1NUX0lGICAweDA4ODAwICAvKiBIb3N0IEludGVyZmFjZSAqLwogCi0jZGVmaW5lIEUxMDAwX01BTkMySCAgICAgIDB4MDU4NjAgLyogTWFuYWdlbWVudCBDb250cm9sIFRvIEhvc3QgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9TV19GV19TWU5DICAweDA1QjVDIC8qIFNvZnR3YXJlLUZpcm13YXJlIFN5bmNocm9uaXphdGlvbiAtIFJXICovCiAjZGVmaW5lIEUxMDAwX0NDTUNUTCAgICAgIDB4MDVCNDggLyogQ0NNIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgRTEwMDBfR0lPQ1RMICAgICAgMHgwNUI0NCAvKiBHSU8gQW5hbG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTI0Myw5ICszMDcsNyBAQAogI2RlZmluZSBFMTAwMF9GQUNUUFMgICAgMHgwNUIzMCAvKiBGdW5jdGlvbiBBY3RpdmUgYW5kIFBvd2VyIFN0YXRlIHRvIE1ORyAqLwogI2RlZmluZSBFMTAwMF9TV1NNICAgICAgMHgwNUI1MCAvKiBTVyBTZW1hcGhvcmUgKi8KICNkZWZpbmUgRTEwMDBfRldTTSAgICAgIDB4MDVCNTQgLyogRlcgU2VtYXBob3JlICovCi0jZGVmaW5lIEUxMDAwX0RDQV9JRCAgICAweDA1QjcwIC8qIERDQSBSZXF1ZXN0ZXIgSUQgSW5mb3JtYXRpb24gLSBSTyAqLwogI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTCAgMHgwNUI3NCAvKiBEQ0EgQ29udHJvbCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX0hJQ1IgICAgICAweDA4RjAwIC8qIEhvc3QgSW50ZWZhY2UgQ29udHJvbCAqLwogCiAvKiBSU1MgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEUxMDAwX01SUUMgICAgICAweDA1ODE4IC8qIE11bHRpcGxlIFJlY2VpdmUgQ29udHJvbCAtIFJXICovCkBAIC0yNTQsMTggKzMxNiwyNyBAQAogI2RlZmluZSBFMTAwMF9JTUlSVlAgICAgMHgwNUFDMCAvKiBJbW1lZGlhdGUgSW50ZXJydXB0IFJYIFZMQU4gUHJpb3JpdHkgLSBSVyAqLwogLyogTVNJLVggQWxsb2NhdGlvbiBSZWdpc3RlciAoX2kpIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfTVNJWEJNKF9pKSAgICAoMHgwMTYwMCArICgoX2kpICogNCkpCi0vKiBNU0ktWCBUYWJsZSBlbnRyeSBhZGRyIGxvdyByZWcgMCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX01TSVhUQUREKF9pKSAgKDB4MEMwMDAgKyAoKF9pKSAqIDB4MTApKQotLyogTVNJLVggVGFibGUgZW50cnkgYWRkciB1cHBlciByZWcgMCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX01TSVhUVUFERChfaSkgKDB4MEMwMDQgKyAoKF9pKSAqIDB4MTApKQotLyogTVNJLVggVGFibGUgZW50cnkgbWVzc2FnZSByZWcgMCAtIFJXICovCi0jZGVmaW5lIEUxMDAwX01TSVhUTVNHKF9pKSAgKDB4MEMwMDggKyAoKF9pKSAqIDB4MTApKQotLyogTVNJLVggVGFibGUgZW50cnkgdmVjdG9yIGN0cmwgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVkNUUkwoX2kpICgweDBDMDBDICsgKChfaSkgKiAweDEwKSkKIC8qIFJlZGlyZWN0aW9uIFRhYmxlIC0gUlcgQXJyYXkgKi8KICNkZWZpbmUgRTEwMDBfUkVUQShfaSkgICgweDA1QzAwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgRTEwMDBfUlNTUksoX2kpICgweDA1QzgwICsgKChfaSkgKiA0KSkgLyogUlNTIFJhbmRvbSBLZXkgLSBSVyBBcnJheSAqLwogCisvKiBWVCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklDUiAgIDB4MDBDODAgLyogTWFpbGJveCBWRiBDYXVzZSAtIFJXQyAqLworI2RlZmluZSBFMTAwMF9NQlZGSU1SICAgMHgwMEM4NCAvKiBNYWlsYm94IFZGIGludCBNYXNrIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVkZMUkUgICAgIDB4MDBDODggLyogVkYgUmVnaXN0ZXIgRXZlbnRzIC0gUldDICovCisjZGVmaW5lIEUxMDAwX1ZGUkUgICAgICAweDAwQzhDIC8qIFZGIFJlY2VpdmUgRW5hYmxlcyAqLworI2RlZmluZSBFMTAwMF9WRlRFICAgICAgMHgwMEM5MCAvKiBWRiBUcmFuc21pdCBFbmFibGVzICovCisjZGVmaW5lIEUxMDAwX1FERSAgICAgICAweDAyNDA4IC8qIFF1ZXVlIERyb3AgRW5hYmxlIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRFRYU1dDICAgIDB4MDM1MDAgLyogRE1BIFR4IFN3aXRjaCBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUlBMT0xSICAgIDB4MDVBRjAgLyogUmVwbGljYXRpb24gT2ZmbG9hZCAtIFJXICovCisjZGVmaW5lIEUxMDAwX0lPVlRDTCAgICAweDA1QkJDIC8qIElPViBDb250cm9sIFJlZ2lzdGVyICovCisvKiBUaGVzZSBhY3QgcGVyIFZGIHNvIGFuIGFycmF5IGZyaWVuZGx5IG1hY3JvIGlzIHVzZWQgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWChfbikgICAoMHgwMEMwMCArICg0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZNQk1FTShfbikgICAgICAgKDB4MDA4MDAgKyAoNjQgKiAoX24pKSkKKyNkZWZpbmUgRTEwMDBfVk1PTFIoX24pICAgICAgICAoMHgwNUFEMCArICg0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZMVkYoX24pICAgICAgICAgKDB4MDVEMDAgKyAoNCAqIChfbikpKSAvKiBWTEFOIFZpcnR1YWwgTWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRmlsdGVyIC0gUlcgKi8KKwogI2RlZmluZSB3cjMyKHJlZywgdmFsdWUpICh3cml0ZWwodmFsdWUsIGh3LT5od19hZGRyICsgcmVnKSkKICNkZWZpbmUgcmQzMihyZWcpIChyZWFkbChody0+aHdfYWRkciArIHJlZykpCiAjZGVmaW5lIHdyZmwoKSAoKHZvaWQpcmQzMihFMTAwMF9TVEFUVVMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCmluZGV4IGFlYmVmOGUuLjRlODQ2NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zNCwyNSArMzQsMTUgQEAKICNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF84MjU3NS5oIgogCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY29tcGFyZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KKwogc3RydWN0IGlnYl9hZGFwdGVyOwogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgotI2RlZmluZSBNQVhfTFJPX0FHR1IgICAgICAgICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgTUFYX0xST19ERVNDUklQVE9SUyAgICAgICAgICAgICAgICA4Ci0jZW5kaWYKLQotLyogSW50ZXJydXB0IGRlZmluZXMgKi8KLSNkZWZpbmUgSUdCX01JTl9EWU5fSVRSIDMwMDAKLSNkZWZpbmUgSUdCX01BWF9EWU5fSVRSIDk2MDAwCi0KIC8qICgoMTAwMDAwMDAwMG5zIC8gKDYwMDBpbnRzL3MgKiAxMDI0bnMpKSA8PCAyID0gNjQ4ICovCiAjZGVmaW5lIElHQl9TVEFSVF9JVFIgNjQ4CiAKLSNkZWZpbmUgSUdCX0RZTl9JVFJfUEFDS0VUX1RIUkVTSE9MRCAyCi0jZGVmaW5lIElHQl9EWU5fSVRSX0xFTkdUSF9MT1cgMjAwCi0jZGVmaW5lIElHQl9EWU5fSVRSX0xFTkdUSF9ISUdIIDEwMDAKLQogLyogVFgvUlggZGVzY3JpcHRvciBkZWZpbmVzICovCiAjZGVmaW5lIElHQl9ERUZBVUxUX1RYRCAgICAgICAgICAgICAgICAgIDI1NgogI2RlZmluZSBJR0JfTUlOX1RYRCAgICAgICAgICAgICAgICAgICAgICAgODAKQEAgLTY3LDggKzU3LDIxIEBACiAjZGVmaW5lIElHQl9NSU5fSVRSX1VTRUNTICAgICAgICAgICAgICAgICAxMAogCiAvKiBUcmFuc21pdCBhbmQgcmVjZWl2ZSBxdWV1ZXMgKi8KLSNkZWZpbmUgSUdCX01BWF9SWF9RVUVVRVMgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIElHQl9NQVhfVFhfUVVFVUVTICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJR0JfTUFYX1JYX1FVRVVFUyAgICAgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPiA2ID8gMSA6IDIpIDogNCkKKyNkZWZpbmUgSUdCX01BWF9UWF9RVUVVRVMgICAgIElHQl9NQVhfUlhfUVVFVUVTCisjZGVmaW5lIElHQl9BQlNfTUFYX1RYX1FVRVVFUyAgICAgNAorCisjZGVmaW5lIElHQl9NQVhfVkZfTUNfRU5UUklFUyAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSUdCX01BWF9WRl9GVU5DVElPTlMgICAgICAgICAgICAgICA4CisjZGVmaW5lIElHQl9NQVhfVkZUQV9FTlRSSUVTICAgICAgICAgICAgICAgMTI4CisKK3N0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgeworCXVuc2lnbmVkIGNoYXIgdmZfbWFjX2FkZHJlc3Nlc1tFVEhfQUxFTl07CisJdTE2IHZmX21jX2hhc2hlc1tJR0JfTUFYX1ZGX01DX0VOVFJJRVNdOworCXUxNiBudW1fdmZfbWNfaGFzaGVzOworCWJvb2wgY2xlYXJfdG9fc2VuZDsKK307CiAKIC8qIFJYIGRlc2NyaXB0b3IgY29udHJvbCB0aHJlc2hvbGRzLgogICogUFRIUkVTSCAtIE1BQyB3aWxsIGNvbnNpZGVyIHByZWZldGNoIGlmIGl0IGhhcyBmZXdlciB0aGFuIHRoaXMgbnVtYmVyIG9mCkBAIC05NCwxMiArOTcsOSBAQAogI2RlZmluZSBJR0JfUlhCVUZGRVJfNTEyICAgNTEyCiAjZGVmaW5lIElHQl9SWEJVRkZFUl8xMDI0ICAxMDI0CiAjZGVmaW5lIElHQl9SWEJVRkZFUl8yMDQ4ICAyMDQ4Ci0jZGVmaW5lIElHQl9SWEJVRkZFUl80MDk2ICA0MDk2Ci0jZGVmaW5lIElHQl9SWEJVRkZFUl84MTkyICA4MTkyCiAjZGVmaW5lIElHQl9SWEJVRkZFUl8xNjM4NCAxNjM4NAogCi0vKiBQYWNrZXQgQnVmZmVyIGFsbG9jYXRpb25zICovCi0KKyNkZWZpbmUgTUFYX1NURF9KVU1CT19GUkFNRV9TSVpFIDkyMzQKIAogLyogSG93IG1hbnkgVHggRGVzY3JpcHRvcnMgZG8gd2UgbmVlZCB0byBjYWxsIG5ldGlmX3dha2VfcXVldWUgPyAqLwogI2RlZmluZSBJR0JfVFhfUVVFVUVfV0FLRQkxNgpAQCAtMTc2LDI5ICsxNzYsMTggQEAKIAkJCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCQkJaW50IHNldF9pdHI7CiAJCQlzdHJ1Y3QgaWdiX3JpbmcgKmJ1ZGR5OwotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JCQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQkJCWJvb2wgbHJvX3VzZWQ7Ci0jZW5kaWYKIAkJfTsKIAl9OwogCiAJY2hhciBuYW1lW0lGTkFNU0laICsgNV07CiB9OwogCi0jZGVmaW5lIElHQl9ERVNDX1VOVVNFRChSKSBcCi0JKCgoKFIpLT5uZXh0X3RvX2NsZWFuID4gKFIpLT5uZXh0X3RvX3VzZSkgPyAwIDogKFIpLT5jb3VudCkgKyBcCi0JKFIpLT5uZXh0X3RvX2NsZWFuIC0gKFIpLT5uZXh0X3RvX3VzZSAtIDEpCi0KICNkZWZpbmUgRTEwMDBfUlhfREVTQ19BRFYoUiwgaSkJICAgIFwKIAkoJigoKHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQogI2RlZmluZSBFMTAwMF9UWF9ERVNDX0FEVihSLCBpKQkgICAgXAogCSgmKCgodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCiAjZGVmaW5lIEUxMDAwX1RYX0NUWFRERVNDX0FEVihSLCBpKQkgICAgXAogCSgmKCgoc3RydWN0IGUxMDAwX2Fkdl90eF9jb250ZXh0X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCi0jZGVmaW5lIEUxMDAwX0dFVF9ERVNDKFIsIGksIHR5cGUpCSgmKCgoc3RydWN0IHR5cGUgKikoKFIpLmRlc2MpKVtpXSkpCi0jZGVmaW5lIEUxMDAwX1RYX0RFU0MoUiwgaSkJCUUxMDAwX0dFVF9ERVNDKFIsIGksIGUxMDAwX3R4X2Rlc2MpCi0jZGVmaW5lIEUxMDAwX1JYX0RFU0MoUiwgaSkJCUUxMDAwX0dFVF9ERVNDKFIsIGksIGUxMDAwX3J4X2Rlc2MpCiAKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIApAQCAtMjQ4LDcgKzIzNyw2IEBACiAKIAl1NjQgaHdfY3N1bV9lcnI7CiAJdTY0IGh3X2NzdW1fZ29vZDsKLQl1NjQgcnhfaGRyX3NwbGl0OwogCXUzMiBhbGxvY19yeF9idWZmX2ZhaWxlZDsKIAlib29sIHJ4X2NzdW07CiAJdTMyIGdvcmM7CkBAIC0yNjIsNiArMjUwLDEwIEBACiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOworCXN0cnVjdCBjeWNsZWNvdW50ZXIgY3ljbGVzOworCXN0cnVjdCB0aW1lY291bnRlciBjbG9jazsKKwlzdHJ1Y3QgdGltZWNvbXBhcmUgY29tcGFyZTsKKwlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGh3dHN0YW1wX2NvbmZpZzsKIAogCS8qIHN0cnVjdHMgZGVmaW5lZCBpbiBlMTAwMF9ody5oICovCiAJc3RydWN0IGUxMDAwX2h3IGh3OwpAQCAtMjgzLDI3ICsyNzUsMTcgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdTMyIGVlcHJvbV93b2w7CiAKLQkvKiBmb3IgaW9wb3J0IGZyZWUgKi8KLQlpbnQgYmFyczsKLQlpbnQgbmVlZF9pb3BvcnQ7Ci0KLQlzdHJ1Y3QgaWdiX3JpbmcgKm11bHRpX3R4X3RhYmxlW0lHQl9NQVhfVFhfUVVFVUVTXTsKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCXVuc2lnbmVkIGludCBscm9fbWF4X2FnZ3I7Ci0JdW5zaWduZWQgaW50IGxyb19hZ2dyZWdhdGVkOwotCXVuc2lnbmVkIGludCBscm9fZmx1c2hlZDsKLQl1bnNpZ25lZCBpbnQgbHJvX25vX2Rlc2M7Ci0jZW5kaWYKKwlzdHJ1Y3QgaWdiX3JpbmcgKm11bHRpX3R4X3RhYmxlW0lHQl9BQlNfTUFYX1RYX1FVRVVFU107CiAJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CisJdW5zaWduZWQgaW50IHZmc19hbGxvY2F0ZWRfY291bnQ7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZfZGF0YTsKIH07CiAKICNkZWZpbmUgSUdCX0ZMQUdfSEFTX01TSSAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSUdCX0ZMQUdfTVNJX0VOQUJMRSAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSUdCX0ZMQUdfRENBX0VOQUJMRUQgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSUdCX0ZMQUdfSU5fTkVUUE9MTCAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSUdCX0ZMQUdfUVVBRF9QT1JUX0EgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSUdCX0ZMQUdfTkVFRF9DVFhfSURYICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSUdCX0ZMQUdfRENBX0VOQUJMRUQgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSUdCX0ZMQUdfUVVBRF9QT1JUX0EgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSUdCX0ZMQUdfTkVFRF9DVFhfSURYICAgICAgKDEgPDwgMykKIAogZW51bSBlMTAwMF9zdGF0ZV90IHsKIAlfX0lHQl9URVNUSU5HLApAQCAtMzMzLDI0ICszMTUsMjQgQEAKIAogc3RhdGljIGlubGluZSBzMzIgaWdiX3Jlc2V0X3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCWlmIChody0+cGh5Lm9wcy5yZXNldF9waHkpCi0JCXJldHVybiBody0+cGh5Lm9wcy5yZXNldF9waHkoaHcpOworCWlmIChody0+cGh5Lm9wcy5yZXNldCkKKwkJcmV0dXJuIGh3LT5waHkub3BzLnJlc2V0KGh3KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHMzMiBpZ2JfcmVhZF9waHlfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKLQlpZiAoaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKQotCQlyZXR1cm4gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBvZmZzZXQsIGRhdGEpOworCWlmIChody0+cGh5Lm9wcy5yZWFkX3JlZykKKwkJcmV0dXJuIGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBvZmZzZXQsIGRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgczMyIGlnYl93cml0ZV9waHlfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQogewotCWlmIChody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKQotCQlyZXR1cm4gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKKwlpZiAoaHctPnBoeS5vcHMud3JpdGVfcmVnKQorCQlyZXR1cm4gaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBvZmZzZXQsIGRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IDNjODMxZjEuLmZiMDljOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtODgsMTYgKzg4LDExIEBACiAJeyAicnhfbG9uZ19ieXRlX2NvdW50IiwgSUdCX1NUQVQoc3RhdHMuZ29yYykgfSwKIAl7ICJyeF9jc3VtX29mZmxvYWRfZ29vZCIsIElHQl9TVEFUKGh3X2NzdW1fZ29vZCkgfSwKIAl7ICJyeF9jc3VtX29mZmxvYWRfZXJyb3JzIiwgSUdCX1NUQVQoaHdfY3N1bV9lcnIpIH0sCi0JeyAicnhfaGVhZGVyX3NwbGl0IiwgSUdCX1NUQVQocnhfaGRyX3NwbGl0KSB9LAorCXsgInR4X2RtYV9vdXRfb2Zfc3luYyIsIElHQl9TVEFUKHN0YXRzLmRvb3N5bmMpIH0sCiAJeyAiYWxsb2NfcnhfYnVmZl9mYWlsZWQiLCBJR0JfU1RBVChhbGxvY19yeF9idWZmX2ZhaWxlZCkgfSwKIAl7ICJ0eF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncHRjKSB9LAogCXsgInJ4X3NtYnVzIiwgSUdCX1NUQVQoc3RhdHMubWdwcmMpIH0sCiAJeyAiZHJvcHBlZF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncGRjKSB9LAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JeyAibHJvX2FnZ3JlZ2F0ZWQiLCBJR0JfU1RBVChscm9fYWdncmVnYXRlZCkgfSwKLQl7ICJscm9fZmx1c2hlZCIsIElHQl9TVEFUKGxyb19mbHVzaGVkKSB9LAotCXsgImxyb19ub19kZXNjIiwgSUdCX1NUQVQobHJvX25vX2Rlc2MpIH0sCi0jZW5kaWYKIH07CiAKICNkZWZpbmUgSUdCX1FVRVVFX1NUQVRTX0xFTiBcCkBAIC0yOTMsMTUgKzI4OCwxNSBAQAogCiBzdGF0aWMgdTMyIGlnYl9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXJldHVybiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkgIT0gMDsKKwlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pICE9IDA7CiB9CiAKIHN0YXRpYyBpbnQgaWdiX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCWlmIChkYXRhKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwogCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19DU1VNOworCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMTAsMTUgKzMwNSwxMyBAQAogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAoZGF0YSkKKwlpZiAoZGF0YSkgewogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0KLQlpZiAoZGF0YSkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JZWxzZQorCX0gZWxzZSB7CisJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7CisJfQogCiAJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRTTyBpcyAlc1xuIiwKIAkJIGRhdGEgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKQEAgLTQwNSw3ICszOTgsNyBAQAogCXJlZ3NfYnVmZlszNF0gPSByZDMyKEUxMDAwX1JMUE1MKTsKIAlyZWdzX2J1ZmZbMzVdID0gcmQzMihFMTAwMF9SRkNUTCk7CiAJcmVnc19idWZmWzM2XSA9IHJkMzIoRTEwMDBfTVJRQyk7Ci0JcmVnc19idWZmWzM3XSA9IHJkMzIoRTEwMDBfVk1EX0NUTCk7CisJcmVnc19idWZmWzM3XSA9IHJkMzIoRTEwMDBfVlRfQ1RMKTsKIAogCS8qIFRyYW5zbWl0ICovCiAJcmVnc19idWZmWzM4XSA9IHJkMzIoRTEwMDBfVENUTCk7CkBAIC01OTgsMTIgKzU5MSwxMiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChody0+bnZtLnR5cGUgPT0gZTEwMDBfbnZtX2VlcHJvbV9zcGkpCi0JCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgZmlyc3Rfd29yZCwKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGZpcnN0X3dvcmQsCiAJCQkJCSAgICBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMSwKIAkJCQkJICAgIGVlcHJvbV9idWZmKTsKIAllbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxOyBpKyspIHsKLQkJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgZmlyc3Rfd29yZCArIGksIDEsCisJCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgZmlyc3Rfd29yZCArIGksIDEsCiAJCQkJCQkgICAgJmVlcHJvbV9idWZmW2ldKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWJyZWFrOwpAQCAtNjUwLDE0ICs2NDMsMTQgQEAKIAlpZiAoZWVwcm9tLT5vZmZzZXQgJiAxKSB7CiAJCS8qIG5lZWQgcmVhZC9tb2RpZnkvd3JpdGUgb2YgZmlyc3QgY2hhbmdlZCBFRVBST00gd29yZCAqLwogCQkvKiBvbmx5IHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgd29yZCBpcyBiZWluZyBtb2RpZmllZCAqLwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGZpcnN0X3dvcmQsIDEsCisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBmaXJzdF93b3JkLCAxLAogCQkJCQkgICAgJmVlcHJvbV9idWZmWzBdKTsKIAkJcHRyKys7CiAJfQogCWlmICgoKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4pICYgMSkgJiYgKHJldF92YWwgPT0gMCkpIHsKIAkJLyogbmVlZCByZWFkL21vZGlmeS93cml0ZSBvZiBsYXN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KIAkJLyogb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgd29yZCBpcyBiZWluZyBtb2RpZmllZCAqLwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGxhc3Rfd29yZCwgMSwKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGxhc3Rfd29yZCwgMSwKIAkJCQkgICAmZWVwcm9tX2J1ZmZbbGFzdF93b3JkIC0gZmlyc3Rfd29yZF0pOwogCX0KIApAQCAtNjcwLDcgKzY2Myw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxOyBpKyspCiAJCWVlcHJvbV9idWZmW2ldID0gY3B1X3RvX2xlMTYoZWVwcm9tX2J1ZmZbaV0pOwogCi0JcmV0X3ZhbCA9IGh3LT5udm0ub3BzLndyaXRlX252bShodywgZmlyc3Rfd29yZCwKKwlyZXRfdmFsID0gaHctPm52bS5vcHMud3JpdGUoaHcsIGZpcnN0X3dvcmQsCiAJCQkJICAgICBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMSwgZWVwcm9tX2J1ZmYpOwogCiAJLyogVXBkYXRlIHRoZSBjaGVja3N1bSBvdmVyIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBFRVBST00gaWYgbmVlZGVkCkBAIC02OTQsNyArNjg3LDcgQEAKIAogCS8qIEVFUFJPTSBpbWFnZSB2ZXJzaW9uICMgaXMgcmVwb3J0ZWQgYXMgZmlybXdhcmUgdmVyc2lvbiAjIGZvcgogCSAqIDgyNTc1IGNvbnRyb2xsZXJzICovCi0JYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkX252bSgmYWRhcHRlci0+aHcsIDUsIDEsICZlZXByb21fZGF0YSk7CisJYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkKCZhZGFwdGVyLT5odywgNSwgMSwgJmVlcHJvbV9kYXRhKTsKIAlzcHJpbnRmKGZpcm13YXJlX3ZlcnNpb24sICIlZC4lZC0lZCIsCiAJCShlZXByb21fZGF0YSAmIDB4RjAwMCkgPj4gMTIsCiAJCShlZXByb21fZGF0YSAmIDB4MEZGMCkgPj4gNCwKQEAgLTg2MywyMyArODU2LDI2IEBACiAJeyBFMTAwMF9SREJBTCgwKSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKIAl7IEUxMDAwX1JEQkFIKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAogCXsgRTEwMDBfUkRMRU4oMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCi0JeyBFMTAwMF9SREJBTCg0KSwgIDB4NDAsICA4LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1JEQkFIKDQpLCAgMHg0MCwgIDgsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAotCXsgRTEwMDBfUkRMRU4oNCksICAweDQwLCAgOCwgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCi0JLyogRW5hYmxlIGFsbCBmb3VyIFJYIHF1ZXVlcyBiZWZvcmUgdGVzdGluZy4gKi8KLQl7IEUxMDAwX1JYRENUTCgwKSwgMHgxMDAsIDEsICBXUklURV9OT19URVNULCAwLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFIH0sCisJeyBFMTAwMF9SREJBTCg0KSwgIDB4NDAsIDEyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JEQkFIKDQpLCAgMHg0MCwgMTIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfUkRMRU4oNCksICAweDQwLCAxMiwgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCisJLyogRW5hYmxlIGFsbCBSWCBxdWV1ZXMgYmVmb3JlIHRlc3RpbmcuICovCisJeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCA0LCAgV1JJVEVfTk9fVEVTVCwgMCwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSB9LAorCXsgRTEwMDBfUlhEQ1RMKDQpLCAweDQwLCAxMiwgIFdSSVRFX05PX1RFU1QsIDAsIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUgfSwKIAkvKiBSREggaXMgcmVhZC1vbmx5IGZvciA4MjU3Niwgb25seSB0ZXN0IFJEVC4gKi8KIAl7IEUxMDAwX1JEVCgwKSwJICAgMHgxMDAsIDQsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKKwl7IEUxMDAwX1JEVCg0KSwJICAgMHg0MCwgMTIsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKIAl7IEUxMDAwX1JYRENUTCgwKSwgMHgxMDAsIDQsICBXUklURV9OT19URVNULCAwLCAwIH0sCisJeyBFMTAwMF9SWERDVEwoNCksIDB4NDAsIDEyLCAgV1JJVEVfTk9fVEVTVCwgMCwgMCB9LAogCXsgRTEwMDBfRkNSVEgsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkYwLCAweDAwMDBGRkYwIH0sCiAJeyBFMTAwMF9GQ1RUViwJICAgMHgxMDAsIDEsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKIAl7IEUxMDAwX1RJUEcsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDNGRkZGRkZGLCAweDNGRkZGRkZGIH0sCiAJeyBFMTAwMF9UREJBTCgwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCiAJeyBFMTAwMF9UREJBSCgwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCiAJeyBFMTAwMF9URExFTigwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCi0JeyBFMTAwMF9UREJBTCg0KSwgIDB4NDAsIDgsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1REQkFIKDQpLCAgMHg0MCwgOCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAotCXsgRTEwMDBfVERMRU4oNCksICAweDQwLCA4LCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCisJeyBFMTAwMF9UREJBTCg0KSwgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9UREJBSCg0KSwgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9URExFTig0KSwgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCiAJeyBFMTAwMF9SQ1RMLAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAgfSwKIAl7IEUxMDAwX1JDVEwsIAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIwRkUsIDB4MDAzRkZGRkIgfSwKIAl7IEUxMDAwX1JDVEwsIAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIwRkUsIDB4RkZGRkZGRkYgfSwKQEAgLTkyNiwxMiArOTIyLDEzIEBACiBzdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLAogCQkJICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHBhdCwgdmFsOwogCXUzMiBfdGVzdFtdID0KIAkJezB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkZ9OwogCWZvciAocGF0ID0gMDsgcGF0IDwgQVJSQVlfU0laRShfdGVzdCk7IHBhdCsrKSB7Ci0JCXdyaXRlbCgoX3Rlc3RbcGF0XSAmIHdyaXRlKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpKTsKLQkJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJCXdyMzIocmVnLCAoX3Rlc3RbcGF0XSAmIHdyaXRlKSk7CisJCXZhbCA9IHJkMzIocmVnKTsKIAkJaWYgKHZhbCAhPSAoX3Rlc3RbcGF0XSAmIHdyaXRlICYgbWFzaykpIHsKIAkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgInBhdHRlcm4gdGVzdCByZWcgJTA0WCAiCiAJCQkJImZhaWxlZDogZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsCkBAIC05NDYsOSArOTQzLDEwIEBACiBzdGF0aWMgYm9vbCByZWdfc2V0X2FuZF9jaGVjayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSwKIAkJCSAgICAgIGludCByZWcsIHUzMiBtYXNrLCB1MzIgd3JpdGUpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgdmFsOwotCXdyaXRlbCgod3JpdGUgJiBtYXNrKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpKTsKLQl2YWwgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKTsKKwl3cjMyKHJlZywgd3JpdGUgJiBtYXNrKTsKKwl2YWwgPSByZDMyKHJlZyk7CiAJaWYgKCh3cml0ZSAmIG1hc2spICE9ICh2YWwgJiBtYXNrKSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJzZXQvY2hlY2sgcmVnICUwNFggdGVzdCBmYWlsZWQ6IgogCQkJIiBnb3QgMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwgcmVnLApAQCAtMTAxNCwxMiArMTAxMiwxNCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgdGVzdC0+YXJyYXlfbGVuOyBpKyspIHsKIAkJCXN3aXRjaCAodGVzdC0+dGVzdF90eXBlKSB7CiAJCQljYXNlIFBBVFRFUk5fVEVTVDoKLQkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogdGVzdC0+cmVnX29mZnNldCksCisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKworCQkJCQkJKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKIAkJCQkJCXRlc3QtPm1hc2ssCiAJCQkJCQl0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNFVF9SRUFEX1RFU1Q6Ci0JCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsgKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKKwkJCQlSRUdfU0VUX0FORF9DSEVDSyh0ZXN0LT5yZWcgKworCQkJCQkJKGkgKiB0ZXN0LT5yZWdfb2Zmc2V0KSwKIAkJCQkJCXRlc3QtPm1hc2ssCiAJCQkJCQl0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCSpkYXRhID0gMDsKIAkvKiBSZWFkIGFuZCBhZGQgdXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBFRVBST00gKi8KIAlmb3IgKGkgPSAwOyBpIDwgKE5WTV9DSEVDS1NVTV9SRUcgKyAxKTsgaSsrKSB7Ci0JCWlmICgoYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkX252bSgmYWRhcHRlci0+aHcsIGksIDEsICZ0ZW1wKSkKKwkJaWYgKChhZGFwdGVyLT5ody5udm0ub3BzLnJlYWQoJmFkYXB0ZXItPmh3LCBpLCAxLCAmdGVtcCkpCiAJCSAgICA8IDApIHsKIAkJCSpkYXRhID0gMTsKIAkJCWJyZWFrOwpAQCAtMTA5MSwxNiArMTA5MSwxNyBAQAogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1MzIgbWFzaywgaSA9IDAsIHNoYXJlZF9pbnQgPSB0cnVlOworCXUzMiBtYXNrLCBpY3NfbWFzaywgaSA9IDAsIHNoYXJlZF9pbnQgPSB0cnVlOwogCXUzMiBpcnEgPSBhZGFwdGVyLT5wZGV2LT5pcnE7CiAKIAkqZGF0YSA9IDA7CiAKIAkvKiBIb29rIHVwIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIganVzdCBmb3IgdGhpcyB0ZXN0ICovCi0JaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCiAJCS8qIE5PVEU6IHdlIGRvbid0IHRlc3QgTVNJLVggaW50ZXJydXB0cyBoZXJlLCB5ZXQgKi8KIAkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0hBU19NU0kpIHsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0hBU19NU0kpIHsKIAkJc2hhcmVkX2ludCA9IGZhbHNlOwogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCAmaWdiX3Rlc3RfaW50ciwgMCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CiAJCQkqZGF0YSA9IDE7CkBAIC0xMTE2LDE2ICsxMTE3LDMxIEBACiAJfQogCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwKIAkJKHNoYXJlZF9pbnQgPyAic2hhcmVkIiA6ICJ1bnNoYXJlZCIpKTsKLQogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCiAJd3IzMihFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOwogCW1zbGVlcCgxMCk7CiAKKwkvKiBEZWZpbmUgYWxsIHdyaXRhYmxlIGJpdHMgZm9yIElDUyAqLworCXN3aXRjaChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc1OgorCQlpY3NfbWFzayA9IDB4MzdGNDdFREQ7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NzY6CisJCWljc19tYXNrID0gMHg3N0Q0RkJGRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWNzX21hc2sgPSAweDdGRkZGRkZGOworCQlicmVhazsKKwl9CisKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCi0JZm9yICg7IGkgPCAxMDsgaSsrKSB7CisJZm9yICg7IGkgPCAzMTsgaSsrKSB7CiAJCS8qIEludGVycnVwdCB0byB0ZXN0ICovCiAJCW1hc2sgPSAxIDw8IGk7CiAKKwkJaWYgKCEobWFzayAmIGljc19tYXNrKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICghc2hhcmVkX2ludCkgewogCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGJlIHJlcG9ydGVkIGluCiAJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIHNhbWUKQEAgLTExMzQsOCArMTE1MCwxMiBAQAogCQkJICogdGVzdCBmYWlsZWQuCiAJCQkgKi8KIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKLQkJCXdyMzIoRTEwMDBfSU1DLCB+bWFzayAmIDB4MDAwMDdGRkYpOwotCQkJd3IzMihFMTAwMF9JQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7CisKKwkJCS8qIEZsdXNoIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwkJCXdyMzIoRTEwMDBfSUNSLCB+MCk7CisKKwkJCXdyMzIoRTEwMDBfSU1DLCBtYXNrKTsKKwkJCXdyMzIoRTEwMDBfSUNTLCBtYXNrKTsKIAkJCW1zbGVlcCgxMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKQEAgLTExNTEsNiArMTE3MSwxMCBAQAogCQkgKiB0ZXN0IGZhaWxlZC4KIAkJICovCiAJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKKworCQkvKiBGbHVzaCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCXdyMzIoRTEwMDBfSUNSLCB+MCk7CisKIAkJd3IzMihFMTAwMF9JTVMsIG1hc2spOwogCQl3cjMyKEUxMDAwX0lDUywgbWFzayk7CiAJCW1zbGVlcCgxMCk7CkBAIC0xMTY4LDExICsxMTkyLDE1IEBACiAJCQkgKiB0ZXN0IGZhaWxlZC4KIAkJCSAqLwogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwotCQkJd3IzMihFMTAwMF9JTUMsIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQl3cjMyKEUxMDAwX0lDUywgfm1hc2sgJiAweDAwMDA3RkZGKTsKKworCQkJLyogRmx1c2ggYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQkJd3IzMihFMTAwMF9JQ1IsIH4wKTsKKworCQkJd3IzMihFMTAwMF9JTUMsIH5tYXNrKTsKKwkJCXdyMzIoRTEwMDBfSUNTLCB+bWFzayk7CiAJCQltc2xlZXAoMTApOwogCi0JCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IpIHsKKwkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKIAkJCQkqZGF0YSA9IDU7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMTgwLDcgKzEyMDgsNyBAQAogCX0KIAogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCi0Jd3IzMihFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOworCXdyMzIoRTEwMDBfSU1DLCB+MCk7CiAJbXNsZWVwKDEwKTsKIAogCS8qIFVuaG9vayB0ZXN0IGludGVycnVwdCBoYW5kbGVyICovCkBAIC0xMjQ0LDYgKzEyNzIsNyBAQAogCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50ZXN0X3R4X3Jpbmc7CiAJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nID0gJmFkYXB0ZXItPnRlc3RfcnhfcmluZzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXUzMiByY3RsOwogCWludCBpLCByZXRfdmFsOwogCkBAIC0xMjYwLDcgKzEyODksNyBAQAogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKLQl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpOworCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyk7CiAJdHhfcmluZy0+c2l6ZSA9IEFMSUdOKHR4X3JpbmctPnNpemUsIDQwOTYpOwogCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLAogCQkJCQkgICAgICZ0eF9yaW5nLT5kbWEpOwpAQCAtMTI3NCw3ICsxMzAzLDcgQEAKIAkJCSgodTY0KSB0eF9yaW5nLT5kbWEgJiAweDAwMDAwMDAwRkZGRkZGRkYpKTsKIAl3cjMyKEUxMDAwX1REQkFIKDApLCAoKHU2NCkgdHhfcmluZy0+ZG1hID4+IDMyKSk7CiAJd3IzMihFMTAwMF9URExFTigwKSwKLQkJCXR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKSk7CisJCQl0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYykpOwogCXdyMzIoRTEwMDBfVERIKDApLCAwKTsKIAl3cjMyKEUxMDAwX1REVCgwKSwgMCk7CiAJd3IzMihFMTAwMF9UQ1RMLApAQCAtMTI4MywyNyArMTMxMiwzMSBAQAogCQkJRTEwMDBfQ09MTElTSU9OX0RJU1RBTkNFIDw8IEUxMDAwX0NPTERfU0hJRlQpOwogCiAJZm9yIChpID0gMDsgaSA8IHR4X3JpbmctPmNvdW50OyBpKyspIHsKLQkJc3RydWN0IGUxMDAwX3R4X2Rlc2MgKnR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKKwkJdW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgKnR4X2Rlc2M7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXVuc2lnbmVkIGludCBzaXplID0gMTAyNDsKIAorCQl0eF9kZXNjID0gRTEwMDBfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOwogCQlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKSB7CiAJCQlyZXRfdmFsID0gMzsKIAkJCWdvdG8gZXJyX25vbWVtOwogCQl9CiAJCXNrYl9wdXQoc2tiLCBzaXplKTsKLQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwotCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5sZW5ndGggPSBza2ItPmxlbjsKLQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQl0eF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLmRtYSk7Ci0JCXR4X2Rlc2MtPmxvd2VyLmRhdGEgPSBjcHVfdG9fbGUzMihza2ItPmxlbik7Ci0JCXR4X2Rlc2MtPmxvd2VyLmRhdGEgfD0gY3B1X3RvX2xlMzIoRTEwMDBfVFhEX0NNRF9FT1AgfAotCQkJCQkJICAgRTEwMDBfVFhEX0NNRF9JRkNTIHwKLQkJCQkJCSAgIEUxMDAwX1RYRF9DTURfUlMpOwotCQl0eF9kZXNjLT51cHBlci5kYXRhID0gMDsKKwkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7CisJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBza2ItPmxlbjsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJdHhfZGVzYy0+cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOworCQl0eF9kZXNjLT5yZWFkLm9saW5mb19zdGF0dXMgPSBjcHVfdG9fbGUzMihza2ItPmxlbikgPDwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVDsKKwkJdHhfZGVzYy0+cmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMihza2ItPmxlbik7CisJCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuIHw9IGNwdV90b19sZTMyKEUxMDAwX1RYRF9DTURfRU9QIHwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfVFhEX0NNRF9JRkNTIHwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfVFhEX0NNRF9SUyB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9BRFZUWERfRENNRF9ERVhUKTsKIAl9CiAKIAkvKiBTZXR1cCBSeCBkZXNjcmlwdG9yIHJpbmcgYW5kIFJ4IGJ1ZmZlcnMgKi8KQEAgLTEzMTksNyArMTM1Miw3IEBACiAJCWdvdG8gZXJyX25vbWVtOwogCX0KIAotCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfcnhfZGVzYyk7CisJcnhfcmluZy0+c2l6ZSA9IHJ4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjKTsKIAlyeF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwKIAkJCQkJICAgICAmcnhfcmluZy0+ZG1hKTsKIAlpZiAoIXJ4X3JpbmctPmRlc2MpIHsKQEAgLTEzMzgsMTYgKzEzNzEsMTcgQEAKIAl3cjMyKEUxMDAwX1JESCgwKSwgMCk7CiAJd3IzMihFMTAwMF9SRFQoMCksIDApOwogCXJjdGwgJj0gfihFMTAwMF9SQ1RMX0xCTV9UQ1ZSIHwgRTEwMDBfUkNUTF9MQk1fTUFDKTsKLQlyY3RsID0gRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfQkFNIHwgRTEwMDBfUkNUTF9TWl8yMDQ4IHwKLQkJRTEwMDBfUkNUTF9SRE1UU19IQUxGIHwKKwlyY3RsID0gRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfQkFNIHwgRTEwMDBfUkNUTF9SRE1UU19IQUxGIHwKIAkJKGFkYXB0ZXItPmh3Lm1hYy5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKIAl3cjMyKEUxMDAwX1JDVEwsIHJjdGwpOwotCXdyMzIoRTEwMDBfU1JSQ1RMKDApLCAwKTsKKwl3cjMyKEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpOwogCiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKLQkJc3RydWN0IGUxMDAwX3J4X2Rlc2MgKnJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKKwkJdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2M7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKKwkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAJCXNrYiA9IGFsbG9jX3NrYihJR0JfUlhCVUZGRVJfMjA0OCArIE5FVF9JUF9BTElHTiwKIAkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFza2IpIHsKQEAgLTEzNTUsMTEgKzEzODksMTEgQEAKIAkJCWdvdG8gZXJyX25vbWVtOwogCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQkJcnhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwotCQlyeF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEgPQotCQkJcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBJR0JfUlhCVUZGRVJfMjA0OCwKLQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJcnhfZGVzYy0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChyeF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEpOworCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdCX1JYQlVGRkVSXzIwNDgsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyeF9kZXNjLT5yZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7CiAJCW1lbXNldChza2ItPmRhdGEsIDB4MDAsIHNrYi0+bGVuKTsKIAl9CiAKQEAgLTE0NTgsNyArMTQ5Miw3IEBACiAJCQkgRTEwMDBfQ1RSTF9URkNFIHwKIAkJCSBFMTAwMF9DVFJMX0xSU1QpOwogCQlyZWcgfD0gRTEwMDBfQ1RSTF9TTFUgfAotCQkgICAgICAgRTEwMDBfQ1RSTF9GRDsgCisJCSAgICAgICBFMTAwMF9DVFJMX0ZEOwogCQl3cjMyKEUxMDAwX0NUUkwsIHJlZyk7CiAKIAkJLyogVW5zZXQgc3dpdGNoIGNvbnRyb2wgdG8gc2VyZGVzIGVuZXJneSBkZXRlY3QgKi8KQEAgLTE3NDUsNiArMTc3OSwxNSBAQAogCQkvKiByZXR1cm4gc3VjY2VzcyBmb3Igbm9uIGV4Y2x1ZGVkIGFkYXB0ZXIgcG9ydHMgKi8KIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJCS8qIHF1YWQgcG9ydCBhZGFwdGVycyBvbmx5IHN1cHBvcnQgV29MIG9uIHBvcnQgQSAqLworCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX1FVQURfUE9SVF9BKSkgeworCQkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJLyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIGR1YWwgcG9ydCBjYXJkcyBvbmx5IHN1cHBvcnQgV29MIG9uIHBvcnQgQSBmcm9tIG5vdyBvbgogCQkgKiB1bmxlc3MgaXQgd2FzIGVuYWJsZWQgaW4gdGhlIGVlcHJvbSBmb3IgcG9ydCBCCkBAIC0xODI3LDkgKzE4NzAsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiB0b2dnbGUgTEVEIDQgdGltZXMgcGVyIHNlY29uZCA9IDIgImJsaW5rcyIgcGVyIHNlY29uZCAqLwotI2RlZmluZSBJR0JfSURfSU5URVJWQUwJCShIWi80KQotCiAvKiBiaXQgZGVmaW5lcyBmb3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLwogI2RlZmluZSBJR0JfTEVEX09OCQkwCiAKQEAgLTE5MjEsMTggKzE5NjEsNiBAQAogCWludCBzdGF0X2NvdW50ID0gc2l6ZW9mKHN0cnVjdCBpZ2JfcXVldWVfc3RhdHMpIC8gc2l6ZW9mKHU2NCk7CiAJaW50IGo7CiAJaW50IGk7Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQlpbnQgYWdncmVnYXRlZCA9IDAsIGZsdXNoZWQgPSAwLCBub19kZXNjID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJYWdncmVnYXRlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQkJZmx1c2hlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQkJbm9fZGVzYyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKLQl9Ci0JYWRhcHRlci0+bHJvX2FnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVkOwotCWFkYXB0ZXItPmxyb19mbHVzaGVkID0gZmx1c2hlZDsKLQlhZGFwdGVyLT5scm9fbm9fZGVzYyA9IG5vX2Rlc2M7Ci0jZW5kaWYKIAogCWlnYl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CiAJZm9yIChpID0gMDsgaSA8IElHQl9HTE9CQUxfU1RBVFNfTEVOOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggOWRkMTNhZC4uY2E4NDIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KQEAgLTQ4LDEyICs0OSwxMiBAQAogI2VuZGlmCiAjaW5jbHVkZSAiaWdiLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMi40NS1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMy4xNi1rMiIKIGNoYXIgaWdiX2RyaXZlcl9uYW1lW10gPSAiaWdiIjsKIGNoYXIgaWdiX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjb25zdCBjaGFyIGlnYl9kcml2ZXJfc3RyaW5nW10gPQogCQkJCSJJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIjsKLXN0YXRpYyBjb25zdCBjaGFyIGlnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIjsKK3N0YXRpYyBjb25zdCBjaGFyIGlnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmlnYl9pbmZvX3RibFtdID0gewogCVtib2FyZF84MjU3NV0gPSAmZTEwMDBfODI1NzVfaW5mbywKQEAgLTYxLDggKzYyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZ2JfcGNpX3RibFtdID0gewogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NiksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X05TKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfRklCRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVMpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc1RUJfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVFQl9GSUJFUl9TRVJERVMpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKQEAgLTEwNSw3ICsxMDgsNiBAQAogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X290aGVyKGludCBpcnEsIHZvaWQgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfcngoaW50IGlycSwgdm9pZCAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF90eChpbnQgaXJxLCB2b2lkICopOwotc3RhdGljIGludCBpZ2JfY2xlYW5fcnhfcmluZ19tc2l4KHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogI2lmZGVmIENPTkZJR19JR0JfRENBCiBzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3J4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKik7CiBzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3R4X2RjYShzdHJ1Y3QgaWdiX3JpbmcgKik7CkBAIC0xMTUsOSArMTE3LDYgQEAKIHN0YXRpYyBpbnQgaWdiX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CiBzdGF0aWMgYm9vbCBpZ2JfY2xlYW5fcnhfaXJxX2FkdihzdHJ1Y3QgaWdiX3JpbmcgKiwgaW50ICosIGludCk7CiBzdGF0aWMgdm9pZCBpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYoc3RydWN0IGlnYl9yaW5nICosIGludCk7Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLXN0YXRpYyBpbnQgaWdiX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKiosIHZvaWQgKiosIHU2NCAqLCB2b2lkICopOwotI2VuZGlmCiBzdGF0aWMgaW50IGlnYl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50IGNtZCk7CiBzdGF0aWMgdm9pZCBpZ2JfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIGlnYl9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKQEAgLTEyNSw2ICsxMjQsMTYgQEAKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2KTsKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyBpbnQgaWdiX3Jjdl9tc2dfZnJvbV92ZihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgdTMyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3JhaF9wb29sKHN0cnVjdCBlMTAwMF9odyAqLCBpbnQgLCBpbnQpOworc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIHUxNik7CitzdGF0aWMgdm9pZCBpZ2Jfdm1tX2NvbnRyb2woc3RydWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfdm1vbHIoc3RydWN0IGUxMDAwX2h3ICosIGludCk7CitzdGF0aWMgaW5saW5lIGludCBpZ2Jfc2V0X3ZmX3JscG1sKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIGludCk7CitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50LCB1bnNpZ25lZCBjaGFyICopOworc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICosIHBtX21lc3NhZ2VfdCk7CiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xMzksMTIgKzE0OCwxOCBAQAogCS5wcmlvcml0eQk9IDAKIH07CiAjZW5kaWYKLQogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAvKiBmb3IgbmV0ZHVtcCAvIG5ldCBjb25zb2xlICovCiBzdGF0aWMgdm9pZCBpZ2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKK3N0YXRpYyBzc2l6ZV90IGlnYl9zZXRfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBzaXplX3QpOworc3RhdGljIHNzaXplX3QgaWdiX3Nob3dfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKTsKK0RFVklDRV9BVFRSKG51bV92ZnMsIFNfSVJVR08gfCBTX0lXVVNSLCBpZ2Jfc2hvd19udW1fdmZzLCBpZ2Jfc2V0X251bV92ZnMpOworI2VuZGlmCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpZ2JfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKiwKIAkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90KTsKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGlnYl9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICopOwpAQCAtMTc4LDYgKzE5Myw1NCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCisvKioKKyAqIFNjYWxlIHRoZSBOSUMgY2xvY2sgY3ljbGUgYnkgYSBsYXJnZSBmYWN0b3Igc28gdGhhdAorICogcmVsYXRpdmVseSBzbWFsbCBjbG9jayBjb3JyZWN0aW9ucyBjYW4gYmUgYWRkZWQgb3IKKyAqIHN1YnN0cmFjdGVkIGF0IGVhY2ggY2xvY2sgdGljay4gVGhlIGRyYXdiYWNrcyBvZiBhCisgKiBsYXJnZSBmYWN0b3IgYXJlIGEpIHRoYXQgdGhlIGNsb2NrIHJlZ2lzdGVyIG92ZXJmbG93cworICogbW9yZSBxdWlja2x5IChub3Qgc3VjaCBhIGJpZyBkZWFsKSBhbmQgYikgdGhhdCB0aGUKKyAqIGluY3JlbWVudCBwZXIgdGljayBoYXMgdG8gZml0IGludG8gMjQgYml0cy4KKyAqCisgKiBOb3RlIHRoYXQKKyAqICAgVElNSU5DQSA9IElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTICoKKyAqICAgICAgICAgICAgIElHQl9UU1lOQ19TQ0FMRQorICogICBUSU1JTkNBICs9IFRJTUlOQ0EgKiBhZGp1c3RtZW50IFtwcG1dIC8gMWU5CisgKgorICogVGhlIGJhc2Ugc2NhbGUgZmFjdG9yIGlzIGludGVudGlvbmFsbHkgYSBwb3dlciBvZiB0d28KKyAqIHNvIHRoYXQgdGhlIGRpdmlzaW9uIGluICVzdHJ1Y3QgdGltZWNvdW50ZXIgY2FuIGJlIGRvbmUgd2l0aAorICogYSBzaGlmdC4KKyAqLworI2RlZmluZSBJR0JfVFNZTkNfU0hJRlQgKDE5KQorI2RlZmluZSBJR0JfVFNZTkNfU0NBTEUgKDE8PElHQl9UU1lOQ19TSElGVCkKKworLyoqCisgKiBUaGUgZHVyYXRpb24gb2Ygb25lIGNsb2NrIGN5Y2xlIG9mIHRoZSBOSUMuCisgKgorICogQHRvZG8gVGhpcyBoYXJkLWNvZGVkIHZhbHVlIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG1pZ2h0IGNoYW5nZQorICogaW4gZnV0dXJlIGhhcmR3YXJlIHJldmlzaW9ucy4gQWRkIHJldmlzaW9uIGNoZWNrLgorICovCisjZGVmaW5lIElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTIDE2CisKKyNpZiAoSUdCX1RTWU5DX1NDQUxFICogSUdCX1RTWU5DX0NZQ0xFX1RJTUVfSU5fTkFOT1NFQ09ORFMpID49ICgxPDwyNCkKKyMgZXJyb3IgSUdCX1RTWU5DX1NDQUxFIGFuZC9vciBJR0JfVFNZTkNfQ1lDTEVfVElNRV9JTl9OQU5PU0VDT05EUyBhcmUgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIFRJTUlOQ0EKKyNlbmRpZgorCisvKioKKyAqIGlnYl9yZWFkX2Nsb2NrIC0gcmVhZCByYXcgY3ljbGUgY291bnRlciAodG8gYmUgdXNlZCBieSB0aW1lIGNvdW50ZXIpCisgKi8KK3N0YXRpYyBjeWNsZV90IGlnYl9yZWFkX2Nsb2NrKGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKnRjKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih0Yywgc3RydWN0IGlnYl9hZGFwdGVyLCBjeWNsZXMpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTY0IHN0YW1wOworCisJc3RhbXAgPSAgcmQzMihFMTAwMF9TWVNUSU1MKTsKKwlzdGFtcCB8PSAodTY0KXJkMzIoRTEwMDBfU1lTVElNSCkgPDwgMzJVTEw7CisKKwlyZXR1cm4gc3RhbXA7Cit9CisKICNpZmRlZiBERUJVRwogLyoqCiAgKiBpZ2JfZ2V0X2h3X2Rldl9uYW1lIC0gcmV0dXJuIGRldmljZSBuYW1lIHN0cmluZwpAQCAtMTg4LDkgKzI1MSw0NCBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwogCXJldHVybiBhZGFwdGVyLT5uZXRkZXYtPm5hbWU7CiB9CisKKy8qKgorICogaWdiX2dldF90aW1lX3N0ciAtIGZvcm1hdCBjdXJyZW50IE5JQyBhbmQgc3lzdGVtIHRpbWUgYXMgc3RyaW5nCisgKi8KK3N0YXRpYyBjaGFyICppZ2JfZ2V0X3RpbWVfc3RyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgIGNoYXIgYnVmZmVyWzE2MF0pCit7CisJY3ljbGVfdCBodyA9IGFkYXB0ZXItPmN5Y2xlcy5yZWFkKCZhZGFwdGVyLT5jeWNsZXMpOworCXN0cnVjdCB0aW1lc3BlYyBuaWMgPSBuc190b190aW1lc3BlYyh0aW1lY291bnRlcl9yZWFkKCZhZGFwdGVyLT5jbG9jaykpOworCXN0cnVjdCB0aW1lc3BlYyBzeXM7CisJc3RydWN0IHRpbWVzcGVjIGRlbHRhOworCWdldG5zdGltZW9mZGF5KCZzeXMpOworCisJZGVsdGEgPSB0aW1lc3BlY19zdWIobmljLCBzeXMpOworCisJc3ByaW50ZihidWZmZXIsCisJCSJIVyAlbGx1LCBOSUMgJWxkLiUwOWx1cywgU1lTICVsZC4lMDlsdXMsIE5JQy1TWVMgJWxkcyArICUwOWx1bnMiLAorCQlodywKKwkJKGxvbmcpbmljLnR2X3NlYywgbmljLnR2X25zZWMsCisJCShsb25nKXN5cy50dl9zZWMsIHN5cy50dl9uc2VjLAorCQkobG9uZylkZWx0YS50dl9zZWMsIGRlbHRhLnR2X25zZWMpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KICNlbmRpZgogCiAvKioKKyAqIGlnYl9kZXNjX3VudXNlZCAtIGNhbGN1bGF0ZSBpZiB3ZSBoYXZlIHVudXNlZCBkZXNjcmlwdG9ycworICoqLworc3RhdGljIGludCBpZ2JfZGVzY191bnVzZWQoc3RydWN0IGlnYl9yaW5nICpyaW5nKQoreworCWlmIChyaW5nLT5uZXh0X3RvX2NsZWFuID4gcmluZy0+bmV4dF90b191c2UpCisJCXJldHVybiByaW5nLT5uZXh0X3RvX2NsZWFuIC0gcmluZy0+bmV4dF90b191c2UgLSAxOworCisJcmV0dXJuIHJpbmctPmNvdW50ICsgcmluZy0+bmV4dF90b19jbGVhbiAtIHJpbmctPm5leHRfdG9fdXNlIC0gMTsKK30KKworLyoqCiAgKiBpZ2JfaW5pdF9tb2R1bGUgLSBEcml2ZXIgUmVnaXN0cmF0aW9uIFJvdXRpbmUKICAqCiAgKiBpZ2JfaW5pdF9tb2R1bGUgaXMgdGhlIGZpcnN0IHJvdXRpbmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcwpAQCAtMjQzLDYgKzM0MSw3IEBACiBzdGF0aWMgdm9pZCBpZ2JfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGk7CisJdW5zaWduZWQgaW50IHJiYXNlX29mZnNldCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3NjoKQEAgLTI1Miw5ICszNTEsMTEgQEAKIAkJICogYW5kIGNvbnRpbnVlIGNvbnN1bWluZyBxdWV1ZXMgaW4gdGhlIHNhbWUgc2VxdWVuY2UKIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBRX0lEWF84MjU3NihpKTsKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IHJiYXNlX29mZnNldCArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lEWF84MjU3NihpKTsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IFFfSURYXzgyNTc2KGkpOworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGkpOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc1OgogCWRlZmF1bHQ6CkBAIC0zNTQsNyArNDU1LDcgQEAKIAkJICAgYSB2ZWN0b3IgbnVtYmVyIGFsb25nIHdpdGggYSAidmFsaWQiIGJpdC4gIFNhZGx5LCB0aGUgbGF5b3V0CiAJCSAgIG9mIHRoZSB0YWJsZSBpcyBzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlLiAqLwogCQlpZiAocnhfcXVldWUgPiBJR0JfTjBfUVVFVUUpIHsKLQkJCWluZGV4ID0gKHJ4X3F1ZXVlID4+IDEpOworCQkJaW5kZXggPSAocnhfcXVldWUgPj4gMSkgKyBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OwogCQkJaXZhciA9IGFycmF5X3JkMzIoRTEwMDBfSVZBUjAsIGluZGV4KTsKIAkJCWlmIChyeF9xdWV1ZSAmIDB4MSkgewogCQkJCS8qIHZlY3RvciBnb2VzIGludG8gdGhpcmQgYnl0ZSBvZiByZWdpc3RlciAqLwpAQCAtMzY5LDcgKzQ3MCw3IEBACiAJCQlhcnJheV93cjMyKEUxMDAwX0lWQVIwLCBpbmRleCwgaXZhcik7CiAJCX0KIAkJaWYgKHR4X3F1ZXVlID4gSUdCX04wX1FVRVVFKSB7Ci0JCQlpbmRleCA9ICh0eF9xdWV1ZSA+PiAxKTsKKwkJCWluZGV4ID0gKHR4X3F1ZXVlID4+IDEpICsgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAkJCWl2YXIgPSBhcnJheV9yZDMyKEUxMDAwX0lWQVIwLCBpbmRleCk7CiAJCQlpZiAodHhfcXVldWUgJiAweDEpIHsKIAkJCQkvKiB2ZWN0b3IgZ29lcyBpbnRvIGhpZ2ggYnl0ZSBvZiByZWdpc3RlciAqLwpAQCAtNDA3LDcgKzUwOCw3IEBACiAJCS8qIFR1cm4gb24gTVNJLVggY2FwYWJpbGl0eSBmaXJzdCwgb3Igb3VyIHNldHRpbmdzCiAJCSAqIHdvbid0IHN0aWNrLiAgQW5kIGl0IHdpbGwgdGFrZSBkYXlzIHRvIGRlYnVnLiAqLwogCQl3cjMyKEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwKLQkJCQkgICBFMTAwMF9HUElFX1BCQSB8IEUxMDAwX0dQSUVfRUlBTUUgfCAKKwkJCQkgICBFMTAwMF9HUElFX1BCQSB8IEUxMDAwX0dQSUVfRUlBTUUgfAogIAkJCQkgICBFMTAwMF9HUElFX05TSUNSKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKQEAgLTUwNiw5ICs2MDcsNiBAQAogCQkJZ290byBvdXQ7CiAJCXJpbmctPml0cl9yZWdpc3RlciA9IEUxMDAwX0VJVFIoMCkgKyAodmVjdG9yIDw8IDIpOwogCQlyaW5nLT5pdHJfdmFsID0gYWRhcHRlci0+aXRyOwotCQkvKiBvdmVyd3JpdGUgdGhlIHBvbGwgcm91dGluZSBmb3IgTVNJWCwgd2UndmUgYWxyZWFkeSBkb25lCi0JCSAqIG5ldGlmX25hcGlfYWRkICovCi0JCXJpbmctPm5hcGkucG9sbCA9ICZpZ2JfY2xlYW5fcnhfcmluZ19tc2l4OwogCQl2ZWN0b3IrKzsKIAl9CiAKQEAgLTU0Niw2ICs2NDQsMTEgQEAKIAlpbnQgZXJyOwogCWludCBudW12ZWNzLCBpOwogCisJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMuICovCisJLyogSGF2aW5nIG1vcmUgcXVldWVzIHRoYW4gQ1BVcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuICovCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9SWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1RYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOworCiAJbnVtdmVjcyA9IGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgMTsKIAlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKG51bXZlY3MsIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksCiAJCQkJCUdGUF9LRVJORUwpOwpAQCAtNjg3LDcgKzc5MCwxMCBAQAogCQl3cjMyKEUxMDAwX0VJQUMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCQl3cjMyKEUxMDAwX0VJQU0sIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCQl3cjMyKEUxMDAwX0VJTVMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwotCQl3cjMyKEUxMDAwX0lNUywgRTEwMDBfSU1TX0xTQyk7CisJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJd3IzMihFMTAwMF9NQlZGSU1SLCAweEZGKTsKKwkJd3IzMihFMTAwMF9JTVMsIChFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX1ZNTUIgfAorCQkgICAgICAgICAgICAgICAgIEUxMDAwX0lNU19ET1VUU1lOQykpOwogCX0gZWxzZSB7CiAJCXdyMzIoRTEwMDBfSU1TLCBJTVNfRU5BQkxFX01BU0spOwogCQl3cjMyKEUxMDAwX0lBTSwgSU1TX0VOQUJMRV9NQVNLKTsKQEAgLTc3OCwxMiArODg0LDEyIEBACiAKIAlpZ2JfcnhfZmlmb19mbHVzaF84MjU3NSgmYWRhcHRlci0+aHcpOwogCi0JLyogY2FsbCBJR0JfREVTQ19VTlVTRUQgd2hpY2ggYWx3YXlzIGxlYXZlcworCS8qIGNhbGwgaWdiX2Rlc2NfdW51c2VkIHdoaWNoIGFsd2F5cyBsZWF2ZXMKIAkgKiBhdCBsZWFzdCAxIGRlc2NyaXB0b3IgdW51c2VkIHRvIG1ha2Ugc3VyZQogCSAqIG5leHRfdG9fdXNlICE9IG5leHRfdG9fY2xlYW4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2ldOwotCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYocmluZywgSUdCX0RFU0NfVU5VU0VEKHJpbmcpKTsKKwkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJpbmcsIGlnYl9kZXNjX3VudXNlZChyaW5nKSk7CiAJfQogCiAKQEAgLTgxMSw2ICs5MTcsMTAgQEAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQogCQlpZ2JfY29uZmlndXJlX21zaXgoYWRhcHRlcik7CiAKKwlpZ2Jfdm1tX2NvbnRyb2woYWRhcHRlcik7CisJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgMCk7CisJaWdiX3NldF92bW9scihodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7CisKIAkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwogCXJkMzIoRTEwMDBfSUNSKTsKIAlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKQEAgLTg1Niw2ICs5NjYsMTAgQEAKIAogCW5ldGRldi0+dHhfcXVldWVfbGVuID0gYWRhcHRlci0+dHhfcXVldWVfbGVuOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisKKwkvKiByZWNvcmQgdGhlIHN0YXRzIGJlZm9yZSByZXNldCovCisJaWdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKKwogCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOwogCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gMDsKIApAQCAtODg2LDExICsxMDAwLDE0IEBACiAJLyogUmVwYXJ0aXRpb24gUGJhIGZvciBncmVhdGVyIHRoYW4gOWsgbXR1CiAJICogVG8gdGFrZSBlZmZlY3QgQ1RSTC5SU1QgaXMgcmVxdWlyZWQuCiAJICovCi0JaWYgKG1hYy0+dHlwZSAhPSBlMTAwMF84MjU3NikgewotCXBiYSA9IEUxMDAwX1BCQV8zNEs7Ci0JfQotCWVsc2UgeworCXN3aXRjaCAobWFjLT50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3NjoKIAkJcGJhID0gRTEwMDBfUEJBXzY0SzsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF84MjU3NToKKwlkZWZhdWx0OgorCQlwYmEgPSBFMTAwMF9QQkFfMzRLOworCQlicmVhazsKIAl9CiAKIAlpZiAoKGFkYXB0ZXItPm1heF9mcmFtZV9zaXplID4gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSAmJgpAQCAtOTEyLDcgKzEwMjksNyBAQAogCQkvKiB0aGUgdHggZmlmbyBhbHNvIHN0b3JlcyAxNiBieXRlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHgKIAkJICogYnV0IGRvbid0IGluY2x1ZGUgZXRoZXJuZXQgRkNTIGJlY2F1c2UgaGFyZHdhcmUgYXBwZW5kcyBpdCAqLwogCQltaW5fdHhfc3BhY2UgPSAoYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgKwotCQkJCXNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykgLQorCQkJCXNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYykgLQogCQkJCUVUSF9GQ1NfTEVOKSAqIDI7CiAJCW1pbl90eF9zcGFjZSA9IEFMSUdOKG1pbl90eF9zcGFjZSwgMTAyNCk7CiAJCW1pbl90eF9zcGFjZSA+Pj0gMTA7CkBAIC05NTYsNiArMTA3MywyMCBAQAogCWZjLT5zZW5kX3hvbiA9IDE7CiAJZmMtPnR5cGUgPSBmYy0+b3JpZ2luYWxfdHlwZTsKIAorCS8qIGRpc2FibGUgcmVjZWl2ZSBmb3IgYWxsIFZGcyBhbmQgd2FpdCBvbmUgc2Vjb25kICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDAgOyBpIDwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsgaSsrKQorCQkJYWRhcHRlci0+dmZfZGF0YVtpXS5jbGVhcl90b19zZW5kID0gZmFsc2U7CisKKwkJLyogcGluZyBhbGwgdGhlIGFjdGl2ZSB2ZnMgdG8gbGV0IHRoZW0ga25vdyB3ZSBhcmUgZ29pbmcgZG93biAqLworCQkJaWdiX3BpbmdfYWxsX3ZmcyhhZGFwdGVyKTsKKworCQkvKiBkaXNhYmxlIHRyYW5zbWl0cyBhbmQgcmVjZWl2ZXMgKi8KKwkJd3IzMihFMTAwMF9WRlJFLCAwKTsKKwkJd3IzMihFMTAwMF9WRlRFLCAwKTsKKwl9CisKIAkvKiBBbGxvdyB0aW1lIGZvciBwZW5kaW5nIG1hc3RlciByZXF1ZXN0cyB0byBydW4gKi8KIAlhZGFwdGVyLT5ody5tYWMub3BzLnJlc2V0X2h3KCZhZGFwdGVyLT5odyk7CiAJd3IzMihFMTAwMF9XVUMsIDApOwpAQCAtOTcyLDIxICsxMTAzLDYgQEAKIAlpZ2JfZ2V0X3BoeV9pbmZvKCZhZGFwdGVyLT5odyk7CiB9CiAKLS8qKgotICogaWdiX2lzX25lZWRfaW9wb3J0IC0gZGV0ZXJtaW5lIGlmIGFuIGFkYXB0ZXIgbmVlZHMgaW9wb3J0IHJlc291cmNlcyBvciBub3QKLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiBhbiBhZGFwdGVyIG5lZWRzIGlvcG9ydCByZXNvdXJjZXMKLSAqKi8KLXN0YXRpYyBpbnQgaWdiX2lzX25lZWRfaW9wb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7Ci0JLyogQ3VycmVudGx5IHRoZXJlIGFyZSBubyBhZGFwdGVycyB0aGF0IG5lZWQgaW9wb3J0IHJlc291cmNlcyAqLwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWdiX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuIAkJPSBpZ2Jfb3BlbiwKIAkubmRvX3N0b3AJCT0gaWdiX2Nsb3NlLApAQCAtMTAyNSwyMSArMTE0MSwxMiBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHc7CiAJY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmVpID0gaWdiX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47Ci0JaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKKwlpbnQgZXJyLCBwY2lfdXNpbmdfZGFjOwogCXUxNiBlZXByb21fZGF0YSA9IDA7CiAJdTE2IGVlcHJvbV9hcG1lX21hc2sgPSBJR0JfRUVQUk9NX0FQTUU7CiAJdTMyIHBhcnRfbnVtOwotCWludCBiYXJzLCBuZWVkX2lvcG9ydDsKIAotCS8qIGRvIG5vdCBhbGxvY2F0ZSBpb3BvcnQgYmFycyB3aGVuIG5vdCBuZWVkZWQgKi8KLQluZWVkX2lvcG9ydCA9IGlnYl9pc19uZWVkX2lvcG9ydChwZGV2KTsKLQlpZiAobmVlZF9pb3BvcnQpIHsKLQkJYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfSU8pOwotCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQl9IGVsc2UgewotCQliYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwotCX0KKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTA2MSw3ICsxMTY4LDkgQEAKIAkJfQogCX0KIAotCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYmFycywgaWdiX2RyaXZlcl9uYW1lKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHBjaV9zZWxlY3RfYmFycyhwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVNPVVJDRV9NRU0pLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdiX2RyaXZlcl9uYW1lKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wY2lfcmVnOwogCkBAIC0xMDc2LDcgKzExODUsOCBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJZXJyID0gLUVOT01FTTsKLQluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IGlnYl9hZGFwdGVyKSwgSUdCX01BWF9UWF9RVUVVRVMpOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaWdiX2FkYXB0ZXIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIElHQl9BQlNfTUFYX1RYX1FVRVVFUyk7CiAJaWYgKCFuZXRkZXYpCiAJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OwogCkBAIC0xMDg5LDE1ICsxMTk5LDEzIEBACiAJaHcgPSAmYWRhcHRlci0+aHc7CiAJaHctPmJhY2sgPSBhZGFwdGVyOwogCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFOwotCWFkYXB0ZXItPmJhcnMgPSBiYXJzOwotCWFkYXB0ZXItPm5lZWRfaW9wb3J0ID0gbmVlZF9pb3BvcnQ7CiAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAogCWVyciA9IC1FSU87Ci0JYWRhcHRlci0+aHcuaHdfYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOwotCWlmICghYWRhcHRlci0+aHcuaHdfYWRkcikKKwlody0+aHdfYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghaHctPmh3X2FkZHIpCiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmaWdiX25ldGRldl9vcHM7CkBAIC0xMTI1LDggKzEyMzMsOSBAQAogCS8qIEluaXRpYWxpemUgc2tldy1zcGVjaWZpYyBjb25zdGFudHMgKi8KIAllcnIgPSBlaS0+Z2V0X2ludmFyaWFudHMoaHcpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2h3X2luaXQ7CisJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAllcnIgPSBpZ2Jfc3dfaW5pdChhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zd19pbml0OwpAQCAtMTE1OCwyNyArMTI2NywyNSBAQAogCQkJIlBIWSByZXNldCBpcyBibG9ja2VkIGR1ZSB0byBTT0wvSURFUiBzZXNzaW9uLlxuIik7CiAKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8Ci0JCQkgICBORVRJRl9GX0hXX0NTVU0gfAorCQkJICAgTkVUSUZfRl9JUF9DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9UWCB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fUlggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAorCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLSNlbmRpZgorCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CiAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKIAlhZGFwdGVyLT5lbl9tbmdfcHQgPSBpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUoJmFkYXB0ZXItPmh3KTsKIAogCS8qIGJlZm9yZSByZWFkaW5nIHRoZSBOVk0sIHJlc2V0IHRoZSBjb250cm9sbGVyIHRvIHB1dCB0aGUgZGV2aWNlIGluIGEKQEAgLTEyMDUsMjUgKzEzMTIsMTUgQEAKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIAotCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICZpZ2Jfd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOwotCi0JaW5pdF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIpOwotCWFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLmZ1bmN0aW9uID0gJmlnYl91cGRhdGVfcGh5X2luZm87Ci0JYWRhcHRlci0+cGh5X2luZm9fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgJmlnYl93YXRjaGRvZywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CisJc2V0dXBfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLCAmaWdiX3VwZGF0ZV9waHlfaW5mbywKKwkgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgYWRhcHRlcik7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGlnYl9yZXNldF90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIGlnYl93YXRjaGRvZ190YXNrKTsKIAotCS8qIEluaXRpYWxpemUgbGluayAmIHJpbmcgcHJvcGVydGllcyB0aGF0IGFyZSB1c2VyLWNoYW5nZWFibGUgKi8KLQlhZGFwdGVyLT50eF9yaW5nLT5jb3VudCA9IDI1NjsKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQ7Ci0JYWRhcHRlci0+cnhfcmluZy0+Y291bnQgPSAyNTY7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCA9IGFkYXB0ZXItPnJ4X3JpbmctPmNvdW50OwotCisJLyogSW5pdGlhbGl6ZSBsaW5rIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlci1jaGFuZ2VhYmxlICovCiAJYWRhcHRlci0+ZmNfYXV0b25lZyA9IHRydWU7CiAJaHctPm1hYy5hdXRvbmVnID0gdHJ1ZTsKIAlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IDB4MmY7CkBAIC0xMjMxLDcgKzEzMjgsNyBAQAogCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gZTEwMDBfZmNfZGVmYXVsdDsKIAlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CiAKLQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDM7CisJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBJR0JfREVGQVVMVF9JVFI7CiAJYWRhcHRlci0+aXRyID0gSUdCX1NUQVJUX0lUUjsKIAogCWlnYl92YWxpZGF0ZV9tZGlfc2V0dGluZyhodyk7CkBAIC0xMjQyLDEwICsxMzM5LDEwIEBACiAJICogZW5hYmxlIHRoZSBBQ1BJIE1hZ2ljIFBhY2tldCBmaWx0ZXIKIAkgKi8KIAotCWlmIChody0+YnVzLmZ1bmMgPT0gMCB8fAotCSAgICBody0+ZGV2aWNlX2lkID09IEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUikKLQkJaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSwgMSwKLQkJCQkgICAgICZlZXByb21fZGF0YSk7CisJaWYgKGh3LT5idXMuZnVuYyA9PSAwKQorCQlody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EsIDEsICZlZXByb21fZGF0YSk7CisJZWxzZSBpZiAoaHctPmJ1cy5mdW5jID09IDEpCisJCWh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQiwgMSwgJmVlcHJvbV9kYXRhKTsKIAogCWlmIChlZXByb21fZGF0YSAmIGVlcHJvbV9hcG1lX21hc2spCiAJCWFkYXB0ZXItPmVlcHJvbV93b2wgfD0gRTEwMDBfV1VGQ19NQUc7CkBAIC0xMjY1LDYgKzEzNjIsMTYgQEAKIAkJaWYgKHJkMzIoRTEwMDBfU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCiAJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKIAkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJCS8qIGlmIHF1YWQgcG9ydCBhZGFwdGVyLCBkaXNhYmxlIFdvTCBvbiBhbGwgYnV0IHBvcnQgQSAqLworCQlpZiAoZ2xvYmFsX3F1YWRfcG9ydF9hICE9IDApCisJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKKwkJZWxzZQorCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfUVVBRF9QT1JUX0E7CisJCS8qIFJlc2V0IGZvciBtdWx0aXBsZSBxdWFkIHBvcnQgYWRhcHRlcnMgKi8KKwkJaWYgKCsrZ2xvYmFsX3F1YWRfcG9ydF9hID09IDQpCisJCQlnbG9iYWxfcXVhZF9wb3J0X2EgPSAwOworCQlicmVhazsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3b2wgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGVlcHJvbSBzZXR0aW5ncyAqLwpAQCAtMTI4NywxNyArMTM5NCw4MiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiBzaW5jZSBpb3YgZnVuY3Rpb25hbGl0eSBpc24ndCBjcml0aWNhbCB0byBiYXNlIGRldmljZSBmdW5jdGlvbiB3ZQorCSAqIGNhbiBhY2NlcHQgZmFpbHVyZS4gIElmIGl0IGZhaWxzIHdlIGRvbid0IGFsbG93IGlvdiB0byBiZSBlbmFibGVkICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgeworCQllcnIgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIDApOworCQlpZiAoIWVycikKKwkJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV0ZGV2LT5kZXYsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJmRldl9hdHRyX251bV92ZnMpOworCQlpZiAoZXJyKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgSU9WXG4iKTsKKwl9CisKKyNlbmRpZgogI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpID09IDApIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEQ0EgZW5hYmxlZFxuIik7CiAJCS8qIEFsd2F5cyB1c2UgQ0IyIG1vZGUsIGRpZmZlcmVuY2UgaXMgbWFza2VkCiAJCSAqIGluIHRoZSBDQiBkcml2ZXIuICovCi0JCXdyMzIoRTEwMDBfRENBX0NUUkwsIDIpOworCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9DQjIpOwogCQlpZ2Jfc2V0dXBfZGNhKGFkYXB0ZXIpOwogCX0KICNlbmRpZgogCisJLyoKKwkgKiBJbml0aWFsaXplIGhhcmR3YXJlIHRpbWVyOiB3ZSBrZWVwIGl0IHJ1bm5pbmcganVzdCBpbiBjYXNlCisJICogdGhhdCBzb21lIHByb2dyYW0gbmVlZHMgaXQgbGF0ZXIgb24uCisJICovCisJbWVtc2V0KCZhZGFwdGVyLT5jeWNsZXMsIDAsIHNpemVvZihhZGFwdGVyLT5jeWNsZXMpKTsKKwlhZGFwdGVyLT5jeWNsZXMucmVhZCA9IGlnYl9yZWFkX2Nsb2NrOworCWFkYXB0ZXItPmN5Y2xlcy5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCk7CisJYWRhcHRlci0+Y3ljbGVzLm11bHQgPSAxOworCWFkYXB0ZXItPmN5Y2xlcy5zaGlmdCA9IElHQl9UU1lOQ19TSElGVDsKKwl3cjMyKEUxMDAwX1RJTUlOQ0EsCisJICAgICAoMTw8MjQpIHwKKwkgICAgIElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTICogSUdCX1RTWU5DX1NDQUxFKTsKKyNpZiAwCisJLyoKKwkgKiBBdm9pZCByb2xsb3ZlciB3aGlsZSB3ZSBpbml0aWFsaXplIGJ5IHJlc2V0dGluZyB0aGUgdGltZSBjb3VudGVyLgorCSAqLworCXdyMzIoRTEwMDBfU1lTVElNTCwgMHgwMDAwMDAwMCk7CisJd3IzMihFMTAwMF9TWVNUSU1ILCAweDAwMDAwMDAwKTsKKyNlbHNlCisJLyoKKwkgKiBTZXQgcmVnaXN0ZXJzIHNvIHRoYXQgcm9sbG92ZXIgb2NjdXJzIHNvb24gdG8gdGVzdCB0aGlzLgorCSAqLworCXdyMzIoRTEwMDBfU1lTVElNTCwgMHgwMDAwMDAwMCk7CisJd3IzMihFMTAwMF9TWVNUSU1ILCAweEZGODAwMDAwKTsKKyNlbmRpZgorCXdyZmwoKTsKKwl0aW1lY291bnRlcl9pbml0KCZhZGFwdGVyLT5jbG9jaywKKwkJCSAmYWRhcHRlci0+Y3ljbGVzLAorCQkJIGt0aW1lX3RvX25zKGt0aW1lX2dldF9yZWFsKCkpKTsKKworCS8qCisJICogU3luY2hyb25pemUgb3VyIE5JQyBjbG9jayBhZ2FpbnN0IHN5c3RlbSB3YWxsIGNsb2NrLiBOSUMKKwkgKiB0aW1lIHN0YW1wIHJlYWRpbmcgcmVxdWlyZXMgfjN1cyBwZXIgc2FtcGxlLCBlYWNoIHNhbXBsZQorCSAqIHdhcyBwcmV0dHkgc3RhYmxlIGV2ZW4gdW5kZXIgbG9hZCA9PiBvbmx5IHJlcXVpcmUgMTAKKwkgKiBzYW1wbGVzIGZvciBlYWNoIG9mZnNldCBjb21wYXJpc29uLgorCSAqLworCW1lbXNldCgmYWRhcHRlci0+Y29tcGFyZSwgMCwgc2l6ZW9mKGFkYXB0ZXItPmNvbXBhcmUpKTsKKwlhZGFwdGVyLT5jb21wYXJlLnNvdXJjZSA9ICZhZGFwdGVyLT5jbG9jazsKKwlhZGFwdGVyLT5jb21wYXJlLnRhcmdldCA9IGt0aW1lX2dldF9yZWFsOworCWFkYXB0ZXItPmNvbXBhcmUubnVtX3NhbXBsZXMgPSAxMDsKKwl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIDApOworCisjaWZkZWYgREVCVUcKKwl7CisJCWNoYXIgYnVmZmVyWzE2MF07CisJCXByaW50ayhLRVJOX0RFQlVHCisJCQkiaWdiOiAlczogaHcgJXAgaW5pdGlhbGl6ZWQgdGltZXJcbiIsCisJCQlpZ2JfZ2V0X3RpbWVfc3RyKGFkYXB0ZXIsIGJ1ZmZlciksCisJCQkmYWRhcHRlci0+aHcpOworCX0KKyNlbmRpZgorCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTmV0d29yayBDb25uZWN0aW9uXG4iKTsKIAkvKiBwcmludCBidXMgdHlwZS9zcGVlZC93aWR0aCBpbmZvICovCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiAoUENJZTolczolcykgJXBNXG4iLApAQCAtMTMzMCwxNSArMTUwMiwxNCBAQAogCWlmIChody0+Zmxhc2hfYWRkcmVzcykKIAkJaW91bm1hcChody0+Zmxhc2hfYWRkcmVzcyk7CiAKLQlpZ2JfcmVtb3ZlX2RldmljZShodyk7CiAJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOwogZXJyX3N3X2luaXQ6Ci1lcnJfaHdfaW5pdDoKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiBlcnJfYWxsb2NfZXRoZXJkZXY6Ci0JcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBiYXJzKTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHBjaV9zZWxlY3RfYmFycyhwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVNPVVJDRV9NRU0pKTsKIGVycl9wY2lfcmVnOgogZXJyX2RtYToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0xMzU4LDkgKzE1MjksNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLSNpZmRlZiBDT05GSUdfSUdCX0RDQQogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0jZW5kaWYKIAlpbnQgZXJyOwogCiAJLyogZmx1c2hfc2NoZWR1bGVkIHdvcmsgbWF5IHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRhc2ssIHNvCkBAIC0xMzc2LDcgKzE1NDUsNyBAQAogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRENBIGRpc2FibGVkXG4iKTsKIAkJZGNhX3JlbW92ZV9yZXF1ZXN0ZXIoJnBkZXYtPmRldik7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19EQ0FfRU5BQkxFRDsKLQkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgMSk7CisJCXdyMzIoRTEwMDBfRENBX0NUUkwsIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0RJU0FCTEUpOwogCX0KICNlbmRpZgogCkBAIC0xMzg5LDE1ICsxNTU4LDI5IEBACiAJaWYgKCFpZ2JfY2hlY2tfcmVzZXRfYmxvY2soJmFkYXB0ZXItPmh3KSkKIAkJaWdiX3Jlc2V0X3BoeSgmYWRhcHRlci0+aHcpOwogCi0JaWdiX3JlbW92ZV9kZXZpY2UoJmFkYXB0ZXItPmh3KTsKIAlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CiAKIAlpZ2JfZnJlZV9xdWV1ZXMoYWRhcHRlcik7CiAKLQlpb3VubWFwKGFkYXB0ZXItPmh3Lmh3X2FkZHIpOwotCWlmIChhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKQotCQlpb3VubWFwKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpOwotCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYWRhcHRlci0+YmFycyk7CisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiByZWNsYWltIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gVkZzICovCisJaWYgKGFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJLyogZGlzYWJsZSBpb3YgYW5kIGFsbG93IHRpbWUgZm9yIHRyYW5zYWN0aW9ucyB0byBjbGVhciAqLworCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwkJbXNsZWVwKDUwMCk7CisKKwkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOworCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCW1zbGVlcCgxMDApOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSU9WIERpc2FibGVkXG4iKTsKKwl9CisjZW5kaWYKKwlpb3VubWFwKGh3LT5od19hZGRyKTsKKwlpZiAoaHctPmZsYXNoX2FkZHJlc3MpCisJCWlvdW5tYXAoaHctPmZsYXNoX2FkZHJlc3MpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgcGNpX3NlbGVjdF9iYXJzKHBkZXYsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1JFU09VUkNFX01FTSkpOwogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIApAQCAtMTQzMiwxMSArMTYxNSw2IEBACiAJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CiAJYWRhcHRlci0+bWluX2ZyYW1lX3NpemUgPSBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMuICovCi0JLyogSGF2aW5nIG1vcmUgcXVldWVzIHRoYW4gQ1BVcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuICovCi0JYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9SWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1RYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOwotCiAJLyogVGhpcyBjYWxsIG1heSBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBkZXBlbmRpbmcgb24KIAkgKiBpbnRlcnJ1cHQgbW9kZS4gKi8KIAlpZ2Jfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwpAQCAtMTQ5OSw2ICsxNjc3LDEwIEBACiAJICogY2xlYW5fcnggaGFuZGxlciBiZWZvcmUgd2UgZG8gc28uICAqLwogCWlnYl9jb25maWd1cmUoYWRhcHRlcik7CiAKKwlpZ2Jfdm1tX2NvbnRyb2woYWRhcHRlcik7CisJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgMCk7CisJaWdiX3NldF92bW9scihodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7CisKIAllcnIgPSBpZ2JfcmVxdWVzdF9pcnEoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVxX2lycTsKQEAgLTE1NzQsNyArMTc1Niw2IEBACiAgKgogICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwotCiBpbnQgaWdiX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCiB7CkBAIC0xNTg4LDcgKzE3NjksNyBAQAogCW1lbXNldCh0eF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCi0JdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAogCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLApAQCAtMTYzNSw3ICsxODE2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSUdCX01BWF9UWF9RVUVVRVM7IGkrKykgewogCQlyX2lkeCA9IGkgJSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOwogCQlhZGFwdGVyLT5tdWx0aV90eF90YWJsZVtpXSA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKLQl9CQorCX0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjU0LDEzICsxODM1LDEzIEBACiAJaW50IGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW2ldOwogCQlqID0gcmluZy0+cmVnX2lkeDsKIAkJd3IzMihFMTAwMF9URExFTihqKSwKLQkJCQlyaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykpOworCQkgICAgIHJpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjKSk7CiAJCXRkYmEgPSByaW5nLT5kbWE7CiAJCXdyMzIoRTEwMDBfVERCQUwoaiksCi0JCQkJdGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CisJCSAgICAgdGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CiAJCXdyMzIoRTEwMDBfVERCQUgoaiksIHRkYmEgPj4gMzIpOwogCiAJCXJpbmctPmhlYWQgPSBFMTAwMF9UREgoaik7CkBAIC0xNjgwLDEyICsxODYxLDExIEBACiAJCXdyMzIoRTEwMDBfRENBX1RYQ1RSTChqKSwgdHhjdHJsKTsKIAl9CiAKLQotCi0JLyogVXNlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFR4IEludGVyIFBhY2tldCBHYXAgKElQRykgdGltZXIgKi8KKwkvKiBkaXNhYmxlIHF1ZXVlIDAgdG8gcHJldmVudCB0YWlsIGJ1bXAgdy9vIHJlLWNvbmZpZ3VyYXRpb24gKi8KKwlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJd3IzMihFMTAwMF9UWERDVEwoMCksIDApOwogCiAJLyogUHJvZ3JhbSB0aGUgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlciAqLwotCiAJdGN0bCA9IHJkMzIoRTEwMDBfVENUTCk7CiAJdGN0bCAmPSB+RTEwMDBfVENUTF9DVDsKIAl0Y3RsIHw9IEUxMDAwX1RDVExfUFNQIHwgRTEwMDBfVENUTF9SVExDIHwKQEAgLTE3MDksMjEgKzE4ODksMTIgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwotCiBpbnQgaWdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBzaXplLCBkZXNjX2xlbjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIE1BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JcnhfcmluZy0+bHJvX21nci5scm9fYXJyID0gdm1hbGxvYyhzaXplKTsKLQlpZiAoIXJ4X3JpbmctPmxyb19tZ3IubHJvX2FycikKLQkJZ290byBlcnI7Ci0JbWVtc2V0KHJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciwgMCwgc2l6ZSk7Ci0jZW5kaWYKLQogCXNpemUgPSBzaXplb2Yoc3RydWN0IGlnYl9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CiAJcnhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+YnVmZmVyX2luZm8pCkBAIC0xNzUwLDEwICsxOTIxLDYgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwotI2VuZGlmCiAJdmZyZWUocnhfcmluZy0+YnVmZmVyX2luZm8pOwogCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKIAkJInRoZSByZWNlaXZlIGRlc2NyaXB0b3IgcmluZ1xuIik7CkBAIC0xODAyLDEzICsxOTY5LDEzIEBACiAJcmN0bCAmPSB+KEUxMDAwX1JDVExfTEJNX1RDVlIgfCBFMTAwMF9SQ1RMX0xCTV9NQUMpOwogCiAJcmN0bCB8PSBFMTAwMF9SQ1RMX0VOIHwgRTEwMDBfUkNUTF9CQU0gfCBFMTAwMF9SQ1RMX1JETVRTX0hBTEYgfAotCQkoYWRhcHRlci0+aHcubWFjLm1jX2ZpbHRlcl90eXBlIDw8IEUxMDAwX1JDVExfTU9fU0hJRlQpOworCQkoaHctPm1hYy5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKIAogCS8qCiAJICogZW5hYmxlIHN0cmlwcGluZyBvZiBDUkMuIEl0J3MgdW5saWtlbHkgdGhpcyB3aWxsIGJyZWFrIEJNQwogCSAqIHJlZGlyZWN0aW9uIGFzIGl0IGRpZCB3aXRoIGUxMDAwLiBOZXdlciBmZWF0dXJlcyByZXF1aXJlCiAJICogdGhhdCB0aGUgSFcgc3RyaXBzIHRoZSBDUkMuCi0JKi8KKwkgKi8KIAlyY3RsIHw9IEUxMDAwX1JDVExfU0VDUkM7CiAKIAkvKgpAQCAtMTg1Miw2ICsyMDE5LDMwIEBACiAJCXNycmN0bCB8PSBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRjsKIAl9CiAKKwkvKiBBdHRlbnRpb24hISEgIEZvciBTUi1JT1YgUEYgZHJpdmVyIG9wZXJhdGlvbnMgeW91IG11c3QgZW5hYmxlCisJICogcXVldWUgZHJvcCBmb3IgYWxsIFZGIGFuZCBQRiBxdWV1ZXMgdG8gcHJldmVudCBoZWFkIG9mIGxpbmUgYmxvY2tpbmcKKwkgKiBpZiBhbiB1bi10cnVzdGVkIFZGIGRvZXMgbm90IHByb3ZpZGUgZGVzY3JpcHRvcnMgdG8gaGFyZHdhcmUuCisJICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKKwkJdTMyIHZtb2xyOworCisJCWogPSBhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHg7CisKKwkJLyogc2V0IGFsbCBxdWV1ZSBkcm9wIGVuYWJsZSBiaXRzICovCisJCXdyMzIoRTEwMDBfUURFLCBBTExfUVVFVUVTKTsKKwkJc3JyY3RsIHw9IEUxMDAwX1NSUkNUTF9EUk9QX0VOOworCisJCS8qIGRpc2FibGUgcXVldWUgMCB0byBwcmV2ZW50IHRhaWwgd3JpdGUgdy9vIHJlLWNvbmZpZyAqLworCQl3cjMyKEUxMDAwX1JYRENUTCgwKSwgMCk7CisKKwkJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKGopKTsKKwkJaWYgKHJjdGwgJiBFMTAwMF9SQ1RMX0xQRSkKKwkJCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX0xQRTsKKwkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAwKQorCQkJdm1vbHIgfD0gRTEwMDBfVk1PTFJfUlNTRTsKKwkJd3IzMihFMTAwMF9WTU9MUihqKSwgdm1vbHIpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKIAkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKIAkJd3IzMihFMTAwMF9TUlJDVEwoaiksIHNycmN0bCk7CkBAIC0xODYxLDYgKzIwNTIsNTQgQEAKIH0KIAogLyoqCisgKiBpZ2JfcmxwbWxfc2V0IC0gc2V0IG1heGltdW0gcmVjZWl2ZSBwYWNrZXQgc2l6ZQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIG1heGltdW0gcmVjZWl2YWJsZSBwYWNrZXQgc2l6ZS4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9ybHBtbF9zZXQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBtYXhfZnJhbWVfc2l6ZSA9IGFkYXB0ZXItPm1heF9mcmFtZV9zaXplOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKKworCWlmIChhZGFwdGVyLT52bGdycCkKKwkJbWF4X2ZyYW1lX3NpemUgKz0gVkxBTl9UQUdfU0laRTsKKworCS8qIGlmIHZmcyBhcmUgZW5hYmxlZCB3ZSBzZXQgUkxQTUwgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgcmVxdWVzdAorCSAqIHNpemUgYW5kIHNldCB0aGUgVk1PTFIgUkxQTUwgdG8gdGhlIHNpemUgd2UgbmVlZCAqLworCWlmIChwZl9pZCkgeworCQlpZ2Jfc2V0X3ZmX3JscG1sKGFkYXB0ZXIsIG1heF9mcmFtZV9zaXplLCBwZl9pZCk7CisJCW1heF9mcmFtZV9zaXplID0gTUFYX1NURF9KVU1CT19GUkFNRV9TSVpFICsgVkxBTl9UQUdfU0laRTsKKwl9CisKKwl3cjMyKEUxMDAwX1JMUE1MLCBtYXhfZnJhbWVfc2l6ZSk7Cit9CisKKy8qKgorICogaWdiX2NvbmZpZ3VyZV92dF9kZWZhdWx0X3Bvb2wgLSBDb25maWd1cmUgVlQgZGVmYXVsdCBwb29sCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgcG9vbAorICoqLworc3RhdGljIHZvaWQgaWdiX2NvbmZpZ3VyZV92dF9kZWZhdWx0X3Bvb2woc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKKwl1MzIgdnRjdGw7CisKKwkvKiBub3QgaW4gc3ItaW92IG1vZGUgLSBkbyBub3RoaW5nICovCisJaWYgKCFwZl9pZCkKKwkJcmV0dXJuOworCisJdnRjdGwgPSByZDMyKEUxMDAwX1ZUX0NUTCk7CisJdnRjdGwgJj0gfihFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX01BU0sgfAorCQkgICBFMTAwMF9WVF9DVExfRElTQUJMRV9ERUZfUE9PTCk7CisJdnRjdGwgfD0gcGZfaWQgPDwgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9TSElGVDsKKwl3cjMyKEUxMDAwX1ZUX0NUTCwgdnRjdGwpOworfQorCisvKioKICAqIGlnYl9jb25maWd1cmVfcnggLSBDb25maWd1cmUgcmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCkBAIC0xODcyLDcgKzIxMTEsNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJjdGwsIHJ4Y3N1bTsKIAl1MzIgcnhkY3RsOwotCWludCBpLCBqOworCWludCBpOwogCiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJjdGwgPSByZDMyKEUxMDAwX1JDVEwpOwpAQCAtMTg4NiwxNCArMjEyNSwxNCBAQAogCS8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kCiAJICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwotCQlqID0gcmluZy0+cmVnX2lkeDsKKwkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbaV07CisJCWludCBqID0gcmluZy0+cmVnX2lkeDsKIAkJcmRiYSA9IHJpbmctPmRtYTsKIAkJd3IzMihFMTAwMF9SREJBTChqKSwKLQkJCQlyZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKKwkJICAgICByZGJhICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKTsKIAkJd3IzMihFMTAwMF9SREJBSChqKSwgcmRiYSA+PiAzMik7CiAJCXdyMzIoRTEwMDBfUkRMRU4oaiksCi0JCQkgICAgICAgcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MpKTsKKwkJICAgICByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYykpOwogCiAJCXJpbmctPmhlYWQgPSBFMTAwMF9SREgoaik7CiAJCXJpbmctPnRhaWwgPSBFMTAwMF9SRFQoaik7CkBAIC0xOTA3LDE2ICsyMTQ2LDYgQEAKIAkJcnhkY3RsIHw9IElHQl9SWF9IVEhSRVNIIDw8IDg7CiAJCXJ4ZGN0bCB8PSBJR0JfUlhfV1RIUkVTSCA8PCAxNjsKIAkJd3IzMihFMTAwMF9SWERDVEwoaiksIHJ4ZGN0bCk7Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQkJLyogSW50aXRpYWwgTFJPIFNldHRpbmdzICovCi0JCXJpbmctPmxyb19tZ3IubWF4X2FnZ3IgPSBNQVhfTFJPX0FHR1I7Ci0JCXJpbmctPmxyb19tZ3IubWF4X2Rlc2MgPSBNQVhfTFJPX0RFU0NSSVBUT1JTOwotCQlyaW5nLT5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gaWdiX2dldF9za2JfaGRyOwotCQlyaW5nLT5scm9fbWdyLmZlYXR1cmVzID0gTFJPX0ZfTkFQSSB8IExST19GX0VYVFJBQ1RfVkxBTl9JRDsKLQkJcmluZy0+bHJvX21nci5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLSNlbmRpZgogCX0KIAogCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzID4gMSkgewpAQCAtMTk0MSw3ICsyMTcwLDEwIEBACiAJCQkJd3JpdGVsKHJldGEuZHdvcmQsCiAJCQkJICAgICAgIGh3LT5od19hZGRyICsgRTEwMDBfUkVUQSgwKSArIChqICYgfjMpKTsKIAkJfQotCQltcnFjID0gRTEwMDBfTVJRQ19FTkFCTEVfUlNTXzRROworCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJCW1ycWMgPSBFMTAwMF9NUlFDX0VOQUJMRV9WTURRX1JTU18yUTsKKwkJZWxzZQorCQkJbXJxYyA9IEUxMDAwX01SUUNfRU5BQkxFX1JTU180UTsKIAogCQkvKiBGaWxsIG91dCBoYXNoIGZ1bmN0aW9uIHNlZWRzICovCiAJCWZvciAoaiA9IDA7IGogPCAxMDsgaisrKQpAQCAtMTk2NiwyNyArMjE5OCwyMyBAQAogCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1BDU0Q7CiAJCXdyMzIoRTEwMDBfUlhDU1VNLCByeGNzdW0pOwogCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBtdWx0aS1xdWV1ZSBmb3Igc3ItaW92ICovCisJCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJd3IzMihFMTAwMF9NUlFDLCBFMTAwMF9NUlFDX0VOQUJMRV9WTURRKTsKIAkJLyogRW5hYmxlIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KIAkJcnhjc3VtID0gcmQzMihFMTAwMF9SWENTVU0pOwotCQlpZiAoYWRhcHRlci0+cnhfY3N1bSkgewotCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9UVU9GTDsKKwkJaWYgKGFkYXB0ZXItPnJ4X2NzdW0pCisJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1RVT0ZMIHwgRTEwMDBfUlhDU1VNX0lQUENTRTsKKwkJZWxzZQorCQkJcnhjc3VtICY9IH4oRTEwMDBfUlhDU1VNX1RVT0ZMIHwgRTEwMDBfUlhDU1VNX0lQUENTRSk7CiAKLQkJCS8qIEVuYWJsZSBJUHY0IHBheWxvYWQgY2hlY2tzdW0gZm9yIFVEUCBmcmFnbWVudHMKLQkJCSAqIE11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHBhY2tldC1zcGxpdC4gKi8KLQkJCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKLQkJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX0lQUENTRTsKLQkJfSBlbHNlIHsKLQkJCXJ4Y3N1bSAmPSB+RTEwMDBfUlhDU1VNX1RVT0ZMOwotCQkJLyogZG9uJ3QgbmVlZCB0byBjbGVhciBJUFBDU0UgYXMgaXQgZGVmYXVsdHMgdG8gMCAqLwotCQl9CiAJCXdyMzIoRTEwMDBfUlhDU1VNLCByeGNzdW0pOwogCX0KIAotCWlmIChhZGFwdGVyLT52bGdycCkKLQkJd3IzMihFMTAwMF9STFBNTCwKLQkJCQlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUpOwotCWVsc2UKLQkJd3IzMihFMTAwMF9STFBNTCwgYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpOworCS8qIFNldCB0aGUgZGVmYXVsdCBwb29sIGZvciB0aGUgUEYncyBmaXJzdCBxdWV1ZSAqLworCWlnYl9jb25maWd1cmVfdnRfZGVmYXVsdF9wb29sKGFkYXB0ZXIpOworCisJaWdiX3JscG1sX3NldChhZGFwdGVyKTsKIAogCS8qIEVuYWJsZSBSZWNlaXZlcyAqLwogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CkBAIC0yMDI5LDE0ICsyMjU3LDEwIEBACiBzdGF0aWMgdm9pZCBpZ2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICBzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQlidWZmZXJfaW5mby0+ZG1hLAotCQkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGgsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCX0KKwlidWZmZXJfaW5mby0+ZG1hID0gMDsKIAlpZiAoYnVmZmVyX2luZm8tPnNrYikgeworCQlza2JfZG1hX3VubWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGJ1ZmZlcl9pbmZvLT5za2IsCisJCSAgICAgICAgICAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOwogCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAl9CkBAIC0yMTA1LDExICsyMzI5LDYgQEAKIAl2ZnJlZShyeF9yaW5nLT5idWZmZXJfaW5mbyk7CiAJcnhfcmluZy0+YnVmZmVyX2luZm8gPSBOVUxMOwogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQl2ZnJlZShyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IE5VTEw7Ci0jZW5kaWYgCi0KIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHJ4X3JpbmctPnNpemUsIHJ4X3JpbmctPmRlc2MsIHJ4X3JpbmctPmRtYSk7CiAKIAlyeF9yaW5nLT5kZXNjID0gTlVMTDsKQEAgLTIyMDksMTUgKzI0MjgsMTggQEAKIHN0YXRpYyBpbnQgaWdiX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCW1lbWNweShhZGFwdGVyLT5ody5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGh3LT5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKLQlhZGFwdGVyLT5ody5tYWMub3BzLnJhcl9zZXQoJmFkYXB0ZXItPmh3LCBhZGFwdGVyLT5ody5tYWMuYWRkciwgMCk7CisJaHctPm1hYy5vcHMucmFyX3NldChodywgaHctPm1hYy5hZGRyLCAwKTsKKworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjM3LDcgKzI0NTksNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKLQl1OCAgKm10YV9saXN0OworCXU4ICAqbXRhX2xpc3QgPSBOVUxMOwogCXUzMiByY3RsOwogCWludCBpOwogCkBAIC0yMjU4LDE3ICsyNDgwLDE1IEBACiAJfQogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAKLQlpZiAoIW5ldGRldi0+bWNfY291bnQpIHsKLQkJLyogbm90aGluZyB0byBwcm9ncmFtLCBzbyBjbGVhciBtYyBsaXN0ICovCi0JCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KGh3LCBOVUxMLCAwLCAxLAotCQkJCQkgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKLQkJcmV0dXJuOworCWlmIChuZXRkZXYtPm1jX2NvdW50KSB7CisJCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7CisJCWlmICghbXRhX2xpc3QpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSAgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBtdWx0aWNhc3QgZmlsdGVyIGxpc3RcbiIpOworCQkJcmV0dXJuOworCQl9CiAJfQogCi0JbXRhX2xpc3QgPSBremFsbG9jKG5ldGRldi0+bWNfY291bnQgKiA2LCBHRlBfQVRPTUlDKTsKLQlpZiAoIW10YV9saXN0KQotCQlyZXR1cm47Ci0KIAkvKiBUaGUgc2hhcmVkIGZ1bmN0aW9uIGV4cGVjdHMgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCiAJbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OwogCkBAIC0yMjc4LDggKzI0OTgsMTMgQEAKIAkJbWVtY3B5KG10YV9saXN0ICsgKGkqRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCW1jX3B0ciA9IG1jX3B0ci0+bmV4dDsKIAl9Ci0JaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoaHcsIG10YV9saXN0LCBpLCAxLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKwlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdChodywgbXRhX2xpc3QsIGksCisJICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDEsCisJICAgICAgICAgICAgICAgICAgICAgICAgbWFjLT5yYXJfZW50cnlfY291bnQpOworCisJaWdiX3NldF9tY19saXN0X3Bvb2xzKGFkYXB0ZXIsIGksIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKwlpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIpOworCiAJa2ZyZWUobXRhX2xpc3QpOwogfQogCkBAIC0yMjkyLDYgKzI1MTcsNDYgQEAKIH0KIAogLyoqCisgKiBpZ2JfaGFzX2xpbmsgLSBjaGVjayBzaGFyZWQgY29kZSBmb3IgbGluayBhbmQgZGV0ZXJtaW5lIHVwL2Rvd24KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGRyaXZlciBwcml2YXRlIGluZm8KKyAqKi8KK3N0YXRpYyBib29sIGlnYl9oYXNfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlib29sIGxpbmtfYWN0aXZlID0gZmFsc2U7CisJczMyIHJldF92YWwgPSAwOworCisJLyogZ2V0X2xpbmtfc3RhdHVzIGlzIHNldCBvbiBMU0MgKGxpbmsgc3RhdHVzKSBpbnRlcnJ1cHQgb3IKKwkgKiByeCBzZXF1ZW5jZSBlcnJvciBpbnRlcnJ1cHQuICBnZXRfbGlua19zdGF0dXMgd2lsbCBzdGF5CisJICogZmFsc2UgdW50aWwgdGhlIGUxMDAwX2NoZWNrX2Zvcl9saW5rIGVzdGFibGlzaGVzIGxpbmsKKwkgKiBmb3IgY29wcGVyIGFkYXB0ZXJzIE9OTFkKKwkgKi8KKwlzd2l0Y2ggKGh3LT5waHkubWVkaWFfdHlwZSkgeworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI6CisJCWlmIChody0+bWFjLmdldF9saW5rX3N0YXR1cykgeworCQkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJCWxpbmtfYWN0aXZlID0gIWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzOworCQl9IGVsc2UgeworCQkJbGlua19hY3RpdmUgPSB0cnVlOworCQl9CisJCWJyZWFrOworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9maWJlcjoKKwkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJbGlua19hY3RpdmUgPSAhIShyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpOworCQlicmVhazsKKwljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgorCQlyZXRfdmFsID0gaHctPm1hYy5vcHMuY2hlY2tfZm9yX2xpbmsoaHcpOworCQlsaW5rX2FjdGl2ZSA9IGh3LT5tYWMuc2VyZGVzX2hhc19saW5rOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV91bmtub3duOgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGlua19hY3RpdmU7Cit9CisKKy8qKgogICogaWdiX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCiAgKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCiAgKiovCkBAIC0yMzA3LDM0ICsyNTcyLDE2IEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBpZ2JfYWRhcHRlciwgd2F0Y2hkb2dfdGFzayk7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZhZGFwdGVyLT5ody5tYWM7CiAJdTMyIGxpbms7CiAJdTMyIGVpY3MgPSAwOwotCXMzMiByZXRfdmFsOwogCWludCBpOwogCi0JaWYgKChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpICYmCi0JICAgIChyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpKQorCWxpbmsgPSBpZ2JfaGFzX2xpbmsoYWRhcHRlcik7CisJaWYgKChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpICYmIGxpbmspCiAJCWdvdG8gbGlua191cDsKIAotCXJldF92YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluaygmYWRhcHRlci0+aHcpOwotCWlmICgocmV0X3ZhbCA9PSBFMTAwMF9FUlJfUEhZKSAmJgotCSAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9pZ3BfMykgJiYKLQkgICAgKHJkMzIoRTEwMDBfQ1RSTCkgJgotCSAgICAgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUpKQotCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJICJHaWdhYml0IGhhcyBiZWVuIGRpc2FibGVkLCBkb3duZ3JhZGluZyBzcGVlZFxuIik7Ci0KLQlpZiAoKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKLQkgICAgIShyZDMyKEUxMDAwX1RYQ1cpICYgRTEwMDBfVFhDV19BTkUpKQotCQlsaW5rID0gbWFjLT5zZXJkZXNfaGFzX2xpbms7Ci0JZWxzZQotCQlsaW5rID0gcmQzMihFMTAwMF9TVEFUVVMpICYKLQkJCQkgICAgICBFMTAwMF9TVEFUVVNfTFU7Ci0KIAlpZiAobGluaykgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQkJdTMyIGN0cmw7CkBAIC0yMzczLDYgKzI2MjAsOSBAQAogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7CiAKKwkJCWlnYl9waW5nX2FsbF92ZnMoYWRhcHRlcik7CisKKwkJCS8qIGxpbmsgc3RhdGUgaGFzIGNoYW5nZWQsIHNjaGVkdWxlIHBoeSBpbmZvIHVwZGF0ZSAqLwogCQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2luZm9fdGltZXIsCiAJCQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CkBAIC0yMzg2LDYgKzI2MzYsMTAgQEAKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCisJCQlpZ2JfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOworCisJCQkvKiBsaW5rIHN0YXRlIGhhcyBjaGFuZ2VkLCBzY2hlZHVsZSBwaHkgaW5mbyB1cGRhdGUgKi8KIAkJCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCQltb2RfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLAogCQkJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOwpAQCAtMjM5NSw5ICsyNjQ5LDkgQEAKIGxpbmtfdXA6CiAJaWdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKIAotCW1hYy0+dHhfcGFja2V0X2RlbHRhID0gYWRhcHRlci0+c3RhdHMudHB0IC0gYWRhcHRlci0+dHB0X29sZDsKKwlody0+bWFjLnR4X3BhY2tldF9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLnRwdCAtIGFkYXB0ZXItPnRwdF9vbGQ7CiAJYWRhcHRlci0+dHB0X29sZCA9IGFkYXB0ZXItPnN0YXRzLnRwdDsKLQltYWMtPmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xjX29sZDsKKwlody0+bWFjLmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xjX29sZDsKIAlhZGFwdGVyLT5jb2xjX29sZCA9IGFkYXB0ZXItPnN0YXRzLmNvbGM7CiAKIAlhZGFwdGVyLT5nb3JjID0gYWRhcHRlci0+c3RhdHMuZ29yYyAtIGFkYXB0ZXItPmdvcmNfb2xkOwpAQCAtMjQwOCw3ICsyNjYyLDcgQEAKIAlpZ2JfdXBkYXRlX2FkYXB0aXZlKCZhZGFwdGVyLT5odyk7CiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpICsgMSA8IHR4X3JpbmctPmNvdW50KSB7CisJCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgKyAxIDwgdHhfcmluZy0+Y291bnQpIHsKIAkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAogCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKIAkJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgpAQCAtMjU1NCw3ICsyODA4LDcgQEAKIAkJaWYgKGJ5dGVzID4gMjUwMDApIHsKIAkJCWlmIChwYWNrZXRzID4gMzUpCiAJCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7Ci0JCX0gZWxzZSBpZiAoYnl0ZXMgPCA2MDAwKSB7CisJCX0gZWxzZSBpZiAoYnl0ZXMgPCAxNTAwKSB7CiAJCQlyZXR2YWwgPSBsb3dfbGF0ZW5jeTsKIAkJfQogCQlicmVhazsKQEAgLTI1ODYsMTUgKzI4NDAsMTMgQEAKIAkJCQkJICAgIGFkYXB0ZXItPnR4X2l0ciwKIAkJCQkJICAgIGFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX3BhY2tldHMsCiAJCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9ieXRlcyk7Ci0KIAkJY3VycmVudF9pdHIgPSBtYXgoYWRhcHRlci0+cnhfaXRyLCBhZGFwdGVyLT50eF9pdHIpOwogCX0gZWxzZSB7CiAJCWN1cnJlbnRfaXRyID0gYWRhcHRlci0+cnhfaXRyOwogCX0KIAogCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUgbG93ZXN0X2xhdGVuY3kgc2V0dGluZyAqLwotCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmCi0JICAgIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQorCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQogCQljdXJyZW50X2l0ciA9IGxvd19sYXRlbmN5OwogCiAJc3dpdGNoIChjdXJyZW50X2l0cikgewpAQCAtMjY0Niw2ICsyODk4LDcgQEAKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1ZMQU4JCTB4MDAwMDAwMDIKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1RTTwkJMHgwMDAwMDAwNAogI2RlZmluZSBJR0JfVFhfRkxBR1NfSVBWNAkJMHgwMDAwMDAwOAorI2RlZmluZSBJR0JfVFhfRkxBR1NfVFNUQU1QICAgICAgICAgICAgIDB4MDAwMDAwMTAKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX1ZMQU5fTUFTSwkweGZmZmYwMDAwCiAjZGVmaW5lIElHQl9UWF9GTEFHU19WTEFOX1NISUZUCTE2CiAKQEAgLTI3MTEsNyArMjk2NCw3IEBACiAJbXNzX2w0bGVuX2lkeCA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplIDw8IEUxMDAwX0FEVlRYRF9NU1NfU0hJRlQpOwogCW1zc19sNGxlbl9pZHggfD0gKGw0bGVuIDw8IEUxMDAwX0FEVlRYRF9MNExFTl9TSElGVCk7CiAKLQkvKiBDb250ZXh0IGluZGV4IG11c3QgYmUgdW5pcXVlIHBlciByaW5nLiAqLworCS8qIEZvciA4MjU3NSwgY29udGV4dCBpbmRleCBtdXN0IGJlIHVuaXF1ZSBwZXIgcmluZy4gKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19ORUVEX0NUWF9JRFgpCiAJCW1zc19sNGxlbl9pZHggfD0gdHhfcmluZy0+cXVldWVfaW5kZXggPDwgNDsKIApAQCAtMjc1NiwxMyArMzAwOSwyNCBAQAogCQl0dV9jbWQgfD0gKEUxMDAwX1RYRF9DTURfREVYVCB8IEUxMDAwX0FEVlRYRF9EVFlQX0NUWFQpOwogCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCQlfX2JlMTYgcHJvdG9jb2w7CisKKwkJCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgeworCQkJCWNvbnN0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmhkciA9CisJCQkJICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIqKXNrYi0+ZGF0YTsKKworCQkJCXByb3RvY29sID0gdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwkJCX0gZWxzZSB7CisJCQkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCQkJfQorCisJCQlzd2l0Y2ggKHByb3RvY29sKSB7CisJCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJCQl0dV9jbWQgfD0gRTEwMDBfQURWVFhEX1RVQ01EX0lQVjQ7CiAJCQkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOwogCQkJCWJyZWFrOwotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJCQkvKiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KIAkJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOwpAQCAtMjc4MSw2ICszMDQ1LDggQEAKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfTkVFRF9DVFhfSURYKQogCQkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0KIAkJCQljcHVfdG9fbGUzMih0eF9yaW5nLT5xdWV1ZV9pbmRleCA8PCA0KTsKKwkJZWxzZQorCQkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0gMDsKIAogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKQEAgLTI3OTMsOCArMzA1OSw2IEBACiAKIAkJcmV0dXJuIHRydWU7CiAJfQotCi0KIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI4MDksMjUgKzMwNzMsMzMgQEAKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwogCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCUJVR19PTihsZW4gPj0gSUdCX01BWF9EQVRBX1BFUl9UWEQpOwogCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBsZW47CiAJLyogc2V0IHRpbWVfc3RhbXAgKmJlZm9yZSogZG1hIHRvIGhlbHAgYXZvaWQgYSBwb3NzaWJsZSByYWNlICovCiAJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKLQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwgc2tiLT5kYXRhLCBsZW4sCi0JCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7CisJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtjb3VudF07CiAJY291bnQrKzsKLQlpKys7Ci0JaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCi0JCWkgPSAwOwogCiAJZm9yIChmID0gMDsgZiA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGYrKykgewogCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwogCisJCWkrKzsKKwkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7CiAKQEAgLTI4MzYsMTkgKzMxMDgsMTAgQEAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGxlbjsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJCWZyYWctPnBhZ2UsCi0JCQkJCQlmcmFnLT5wYWdlX29mZnNldCwKLQkJCQkJCWxlbiwKLQkJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbY291bnRdOwogCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CiAJfQogCi0JaSA9ICgoaSA9PSAwKSA/IHR4X3JpbmctPmNvdW50IC0gMSA6IGkgLSAxKTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0yODcxLDYgKzMxMzQsOSBAQAogCWlmICh0eF9mbGFncyAmIElHQl9UWF9GTEFHU19WTEFOKQogCQljbWRfdHlwZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVkxFOwogCisJaWYgKHR4X2ZsYWdzICYgSUdCX1RYX0ZMQUdTX1RTVEFNUCkKKwkJY21kX3R5cGVfbGVuIHw9IEUxMDAwX0FEVlRYRF9NQUNfVFNUQU1QOworCiAJaWYgKHR4X2ZsYWdzICYgSUdCX1RYX0ZMQUdTX1RTTykgewogCQljbWRfdHlwZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVFNFOwogCkBAIC0yOTMzLDcgKzMxOTksNyBAQAogCiAJLyogV2UgbmVlZCB0byBjaGVjayBhZ2FpbiBpbiBhIGNhc2UgYW5vdGhlciBDUFUgaGFzIGp1c3QKIAkgKiBtYWRlIHJvb20gYXZhaWxhYmxlLiAqLwotCWlmIChJR0JfREVTQ19VTlVTRUQodHhfcmluZykgPCBzaXplKQorCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgPCBzaXplKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQSByZXByaWV2ZSEgKi8KQEAgLTI5NDUsMTMgKzMyMTEsMTEgQEAKIHN0YXRpYyBpbnQgaWdiX21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKIHsKLQlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IHNpemUpCisJaWYgKGlnYl9kZXNjX3VudXNlZCh0eF9yaW5nKSA+PSBzaXplKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gX19pZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOwogfQogCi0jZGVmaW5lIFRYRF9VU0VfQ09VTlQoUykgKCgoUykgPj4gKElHQl9NQVhfVFhEX1BXUikpICsgMSkKLQogc3RhdGljIGludCBpZ2JfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQpAQCAtMjk1OSwxMSArMzIyMywxMCBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgaW50IGZpcnN0OwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7Ci0JdW5zaWduZWQgaW50IGxlbjsKIAl1OCBoZHJfbGVuID0gMDsKKwlpbnQgY291bnQgPSAwOwogCWludCB0c28gPSAwOwotCi0JbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwl1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4OwogCiAJaWYgKHRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTI5ODQsNyArMzI0NywyMSBAQAogCQkvKiB0aGlzIGlzIGEgaGFyZCBlcnJvciAqLwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCXNrYl9vcnBoYW4oc2tiKTsKKworCS8qCisJICogVE9ETzogY2hlY2sgdGhhdCB0aGVyZSBjdXJyZW50bHkgaXMgbm8gb3RoZXIgcGFja2V0IHdpdGgKKwkgKiB0aW1lIHN0YW1waW5nIGluIHRoZSBxdWV1ZQorCSAqCisJICogV2hlbiBkb2luZyB0aW1lIHN0YW1waW5nLCBrZWVwIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzb2NrZXQKKwkgKiBhIHdoaWxlIGxvbmdlcjogaXQgaXMgc3RpbGwgbmVlZGVkIGJ5IHNrYl9od3RzdGFtcF90eCgpLAorCSAqIGNhbGxlZCBlaXRoZXIgaW4gaWdiX3R4X2h3dHN0YW1wKCkgb3IgYnkgb3VyIGNhbGxlciB3aGVuCisJICogZG9pbmcgc29mdHdhcmUgdGltZSBzdGFtcGluZy4KKwkgKi8KKwlzaHR4ID0gc2tiX3R4KHNrYik7CisJaWYgKHVubGlrZWx5KHNodHgtPmhhcmR3YXJlKSkgeworCQlzaHR4LT5pbl9wcm9ncmVzcyA9IDE7CisJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19UU1RBTVA7CisJfQogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfVkxBTjsKQEAgLTI5OTUsNyArMzI3Miw2IEBACiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19JUFY0OwogCiAJZmlyc3QgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKLQogCXRzbyA9IHNrYl9pc19nc28oc2tiKSA/IGlnYl90c29fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsCiAJCQkJCSAgICAgICZoZHJfbGVuKSA6IDA7CiAKQEAgLTMwMDYsMTggKzMyODIsMjcgQEAKIAogCWlmICh0c28pCiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19UU087Ci0JZWxzZSBpZiAoaWdiX3R4X2NzdW1fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpKQotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCi0JCQkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX0NTVU07CisJZWxzZSBpZiAoaWdiX3R4X2NzdW1fYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpICYmCisJICAgICAgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQorCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfQ1NVTTsKIAotCWlnYl90eF9xdWV1ZV9hZHYoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCi0JCQkgaWdiX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCksCi0JCQkgc2tiLT5sZW4sIGhkcl9sZW4pOworCS8qCisJICogY291bnQgcmVmbGVjdHMgZGVzY3JpcHRvcnMgbWFwcGVkLCBpZiAwIHRoZW4gbWFwcGluZyBlcnJvcgorCSAqIGhhcyBvY2N1cmVkIGFuZCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgZGVzY3JpcHRvciBxdWV1ZQorCSAqLworCWNvdW50ID0gaWdiX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KLQlpZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyA0KTsKKwlpZiAoY291bnQpIHsKKwkJaWdiX3R4X3F1ZXVlX2FkdihhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywgY291bnQsCisJCQkgICAgICAgICBza2ItPmxlbiwgaGRyX2xlbik7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWlnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDQpOworCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBmaXJzdDsKKwl9CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMzAyOCw3ICszMzEzLDcgQEAKIAlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3Jpbmc7CiAKIAlpbnQgcl9pZHggPSAwOwotCXJfaWR4ID0gc2tiLT5xdWV1ZV9tYXBwaW5nICYgKElHQl9NQVhfVFhfUVVFVUVTIC0gMSk7CisJcl9pZHggPSBza2ItPnF1ZXVlX21hcHBpbmcgJiAoSUdCX0FCU19NQVhfVFhfUVVFVUVTIC0gMSk7CiAJdHhfcmluZyA9IGFkYXB0ZXItPm11bHRpX3R4X3RhYmxlW3JfaWR4XTsKIAogCS8qIFRoaXMgZ29lcyBiYWNrIHRvIHRoZSBxdWVzdGlvbiBvZiBob3cgdG8gbG9naWNhbGx5IG1hcCBhIHR4IHF1ZXVlCkBAIC0zMDUwLDggKzMzMzUsOCBAQAogCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCiAJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwotCXdyMzIoRTEwMDBfRUlDUywgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayAmCi0JCX4oRTEwMDBfRUlNU19UQ1BfVElNRVIgfCBFMTAwMF9FSU1TX09USEVSKSk7CisJd3IzMihFMTAwMF9FSUNTLAorCSAgICAgKGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2sgJiB+YWRhcHRlci0+ZWltc19vdGhlcikpOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0zMDY5LDggKzMzNTQsNyBAQAogICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLgogICogVGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IHVwZGF0ZWQgZnJvbSB0aGUgdGltZXIgY2FsbGJhY2suCiAgKiovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotaWdiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZ2JfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtMzA5Niw3ICszMzgwLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0jZGVmaW5lIE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSA5MjM0CiAJaWYgKG1heF9mcmFtZSA+IE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJNVFUgPiA5MjE2IG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTA0LDYgKzMzODcsNyBAQAogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7CisKIAkvKiBpZ2JfZG93biBoYXMgYSBkZXBlbmRlbmN5IG9uIG1heF9mcmFtZV9zaXplICovCiAJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPSBtYXhfZnJhbWU7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKQEAgLTMxMjksNiArMzQxMywxMiBAQAogI2Vsc2UKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IFBBR0VfU0laRSAvIDI7CiAjZW5kaWYKKworCS8qIGlmIHNyLWlvdiBpcyBlbmFibGVkIHdlIG5lZWQgdG8gZm9yY2UgYnVmZmVyIHNpemUgdG8gMUsgb3IgbGFyZ2VyICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgJiYKKwkgICAgKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPCBJR0JfUlhCVUZGRVJfMTAyNCkpCisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBJR0JfUlhCVUZGRVJfMTAyNDsKKwogCS8qIGFkanVzdCBhbGxvY2F0aW9uIGlmIExQRSBwcm90ZWN0cyB1cywgYW5kIHdlIGFyZW4ndCB1c2luZyBTQlAgKi8KIAlpZiAoKG1heF9mcmFtZSA9PSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pIHx8CiAJICAgICAobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKSkKQEAgLTMyNzMsOCArMzU2Myw3IEBACiAJLyogUGh5IFN0YXRzICovCiAJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlpZiAoKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCkgJiYKLQkJICAgKCFpZ2JfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAotCQkJCQkgICAgICAmcGh5X3RtcCkpKSB7CisJCSAgICghaWdiX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV90bXApKSkgewogCQkJcGh5X3RtcCAmPSBQSFlfSURMRV9FUlJPUl9DT1VOVF9NQVNLOwogCQkJYWRhcHRlci0+cGh5X3N0YXRzLmlkbGVfZXJyb3JzICs9IHBoeV90bXA7CiAJCX0KQEAgLTMyODYsNyArMzU3NSw2IEBACiAJYWRhcHRlci0+c3RhdHMubWdwZGMgKz0gcmQzMihFMTAwMF9NR1RQREMpOwogfQogCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF9vdGhlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOwpAQCAtMzI5NSwxNSArMzU4MywyNCBAQAogCXUzMiBpY3IgPSByZDMyKEUxMDAwX0lDUik7CiAKIAkvKiByZWFkaW5nIElDUiBjYXVzZXMgYml0IDMxIG9mIEVJQ1IgdG8gYmUgY2xlYXJlZCAqLwotCWlmICghKGljciAmIEUxMDAwX0lDUl9MU0MpKQotCQlnb3RvIG5vX2xpbmtfaW50ZXJydXB0OwotCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKLQkvKiBndWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KLQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKLQkKLW5vX2xpbmtfaW50ZXJydXB0OgotCXdyMzIoRTEwMDBfSU1TLCBFMTAwMF9JTVNfTFNDKTsKKworCWlmKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgeworCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCisJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKKwl9CisKKwkvKiBDaGVjayBmb3IgYSBtYWlsYm94IGV2ZW50ICovCisJaWYgKGljciAmIEUxMDAwX0lDUl9WTU1CKQorCQlpZ2JfbXNnX3Rhc2soYWRhcHRlcik7CisKKwlpZiAoaWNyICYgRTEwMDBfSUNSX0xTQykgeworCQlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7CisJCS8qIGd1YXJkIGFnYWluc3QgaW50ZXJydXB0IHdoZW4gd2UncmUgZ29pbmcgZG93biAqLworCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJfQorCisJd3IzMihFMTAwMF9JTVMsIEUxMDAwX0lNU19MU0MgfCBFMTAwMF9JTVNfRE9VVFNZTkMgfCBFMTAwMF9JTVNfVk1NQik7CiAJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX290aGVyKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTMzMTksNiArMzYxNiw3IEBACiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWlnYl91cGRhdGVfdHhfZGNhKHR4X3JpbmcpOwogI2VuZGlmCisKIAl0eF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CiAJdHhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CiAKQEAgLTMzMzksMTMgKzM2MzcsMTEgQEAKIAlpZiAoKHJpbmctPmFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykgJiYgcmluZy0+c2V0X2l0cikgewogCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCQljYXNlIGUxMDAwXzgyNTc2OgotCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsCi0JCQkgICAgIHJpbmctPml0cl92YWwgfAorCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsIHJpbmctPml0cl92YWwgfAogCQkJICAgICAweDgwMDAwMDAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsCi0JCQkgICAgIHJpbmctPml0cl92YWwgfAorCQkJd3IzMihyaW5nLT5pdHJfcmVnaXN0ZXIsIHJpbmctPml0cl92YWwgfAogCQkJICAgICAocmluZy0+aXRyX3ZhbCA8PCAxNikpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTMzNjMsOCArMzY1OSw4IEBACiAKIAlpZ2Jfd3JpdGVfaXRyKHJ4X3JpbmcpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnJ4X3JpbmctPm5hcGkpKQotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZyeF9yaW5nLT5uYXBpKSkKKwkJX19uYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKIAogI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKHJ4X3JpbmctPmFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCkBAIC0zMzg2LDExICszNjgyLDExIEBACiAJCWRjYV9yeGN0cmwgPSByZDMyKEUxMDAwX0RDQV9SWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfcnhjdHJsICY9IH5FMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfcnhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV9yeGN0cmwgJj0gfkUxMDAwX0RDQV9SWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV9yeGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV9yeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3J4Y3RybCB8PSBFMTAwMF9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCQlkY2FfcnhjdHJsIHw9IEUxMDAwX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CkBAIC0zNDEzLDExICszNzA5LDExIEBACiAJCWRjYV90eGN0cmwgPSByZDMyKEUxMDAwX0RDQV9UWENUUkwocSkpOwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CiAJCQlkY2FfdHhjdHJsICY9IH5FMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1NzY7Ci0JCQlkY2FfdHhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSkgPDwKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKIAkJCSAgICAgICAgICAgICAgRTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9TSElGVDsKIAkJfSBlbHNlIHsKIAkJCWRjYV90eGN0cmwgJj0gfkUxMDAwX0RDQV9UWENUUkxfQ1BVSURfTUFTSzsKLQkJCWRjYV90eGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJCWRjYV90eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCX0KIAkJZGNhX3R4Y3RybCB8PSBFMTAwMF9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwogCQl3cjMyKEUxMDAwX0RDQV9UWENUUkwocSksIGRjYV90eGN0cmwpOwpAQCAtMzQ1Nyw3ICszNzUzLDcgQEAKIAkJCWJyZWFrOwogCQkvKiBBbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZAogCQkgKiBpbiB0aGUgQ0IgZHJpdmVyLiAqLwotCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCAyKTsKKwkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyKTsKIAkJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKGRldikgPT0gMCkgewogCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGVuYWJsZWRcbiIpOwpAQCAtMzQ3Miw3ICszNzY4LDcgQEAKIAkJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKGRldik7CiAJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRENBIGRpc2FibGVkXG4iKTsKIAkJCWFkYXB0ZXItPmZsYWdzICY9IH5JR0JfRkxBR19EQ0FfRU5BQkxFRDsKLQkJCXdyMzIoRTEwMDBfRENBX0NUUkwsIDEpOworCQkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfRElTQUJMRSk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMzQ5Miw2ICszNzg4LDMyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19JR0JfRENBICovCiAKK3N0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQlwaW5nID0gRTEwMDBfUEZfQ09OVFJPTF9NU0c7CisJCWlmIChhZGFwdGVyLT52Zl9kYXRhW2ldLmNsZWFyX3RvX3NlbmQpCisJCQlwaW5nIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmcGluZywgMSwgaSk7CisJfQorfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICB1MzIgKm1zZ2J1ZiwgdTMyIHZmKQoreworCWludCBuID0gKG1zZ2J1ZlswXSAmIEUxMDAwX1ZUX01TR0lORk9fTUFTSykgPj4gRTEwMDBfVlRfTVNHSU5GT19TSElGVDsKKwl1MTYgKmhhc2hfbGlzdCA9ICh1MTYgKikmbXNnYnVmWzFdOworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmX2RhdGEgPSAmYWRhcHRlci0+dmZfZGF0YVt2Zl07CisJaW50IGk7CisKKwkvKiBvbmx5IHVwIHRvIDMwIGhhc2ggdmFsdWVzIHN1cHBvcnRlZCAqLworCWlmIChuID4gMzApCisJCW4gPSAzMDsKKworCS8qIHNhbHQgYXdheSB0aGUgbnVtYmVyIG9mIG11bHRpIGNhc3QgYWRkcmVzc2VzIGFzc2lnbmVkCisJICogdG8gdGhpcyBWRiBmb3IgbGF0ZXIgdXNlIHRvIHJlc3RvcmUgd2hlbiB0aGUgUEYgbXVsdGkgY2FzdAorCSAqIGxpc3QgY2hhbmdlcworCSAqLworCXZmX2RhdGEtPm51bV92Zl9tY19oYXNoZXMgPSBuOworCisJLyogVkZzIGFyZSBsaW1pdGVkIHRvIHVzaW5nIHRoZSBNVEEgaGFzaCB0YWJsZSBmb3IgdGhlaXIgbXVsdGljYXN0CisJICogYWRkcmVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2ldID0gaGFzaF9saXN0W2ldOzsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpZ2Jfc2V0X211bHRpKGFkYXB0ZXItPm5ldGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlICp2Zl9kYXRhOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykgeworCQl2Zl9kYXRhID0gJmFkYXB0ZXItPnZmX2RhdGFbaV07CisJCWZvciAoaiA9IDA7IGogPCB2Zl9kYXRhLT5udW1fdmZfbWNfaGFzaGVzOyBqKyspCisJCQlpZ2JfbXRhX3NldChodywgdmZfZGF0YS0+dmZfbWNfaGFzaGVzW2pdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9jbGVhcl92Zl92ZnRhKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHBvb2xfbWFzaywgcmVnLCB2aWQ7CisJaW50IGk7CisKKwlwb29sX21hc2sgPSAxIDw8IChFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQgKyB2Zik7CisKKwkvKiBGaW5kIHRoZSB2bGFuIGZpbHRlciBmb3IgdGhpcyBpZCAqLworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9WTFZGX0FSUkFZX1NJWkU7IGkrKykgeworCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCisJCS8qIHJlbW92ZSB0aGUgdmYgZnJvbSB0aGUgcG9vbCAqLworCQlyZWcgJj0gfnBvb2xfbWFzazsKKworCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1BPT0xTRUxfTUFTSykgJiYKKwkJICAgIChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQlyZWcgPSAwOworCQkJdmlkID0gcmVnICYgRTEwMDBfVkxWRl9WTEFOSURfTUFTSzsKKwkJCWlnYl92ZnRhX3NldChodywgdmlkLCBmYWxzZSk7CisJCX0KKworCQl3cjMyKEUxMDAwX1ZMVkYoaSksIHJlZyk7CisJfQorfQorCitzdGF0aWMgczMyIGlnYl92bHZmX3NldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2aWQsIGJvb2wgYWRkLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmVnLCBpOworCisJLyogSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gVkZzIGFyZSBub3QgZW5hYmxlZCAqLworCWlmICghYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJcmV0dXJuIC0xOworCisJLyogRmluZCB0aGUgdmxhbiBmaWx0ZXIgZm9yIHRoaXMgaWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJcmVnID0gcmQzMihFMTAwMF9WTFZGKGkpKTsKKwkJaWYgKChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpICYmCisJCSAgICB2aWQgPT0gKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX01BU0spKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFkZCkgeworCQlpZiAoaSA9PSBFMTAwMF9WTFZGX0FSUkFZX1NJWkUpIHsKKwkJCS8qIERpZCBub3QgZmluZCBhIG1hdGNoaW5nIFZMQU4gSUQgZW50cnkgdGhhdCB3YXMKKwkJCSAqIGVuYWJsZWQuICBTZWFyY2ggZm9yIGEgZnJlZSBmaWx0ZXIgZW50cnksIGkuZS4KKwkJCSAqIG9uZSB3aXRob3V0IHRoZSBlbmFibGUgYml0IHNldAorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJCQlyZWcgPSByZDMyKEUxMDAwX1ZMVkYoaSkpOworCQkJCWlmICghKHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFKSB7CisJCQkvKiBGb3VuZCBhbiBlbmFibGVkL2F2YWlsYWJsZSBlbnRyeSAqLworCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKTsKKworCQkJLyogaWYgIWVuYWJsZWQgd2UgbmVlZCB0byBzZXQgdGhpcyB1cCBpbiB2ZnRhICovCisJCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKSB7CisJCQkJLyogYWRkIFZJRCB0byBmaWx0ZXIgdGFibGUsIGlmIGJpdCBhbHJlYWR5IHNldAorCQkJCSAqIFBGIG11c3QgaGF2ZSBhZGRlZCBpdCBvdXRzaWRlIG9mIHRhYmxlICovCisJCQkJaWYgKGlnYl92ZnRhX3NldChodywgdmlkLCB0cnVlKSkKKwkJCQkJcmVnIHw9IDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArCisJCQkJCQlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KTsKKwkJCQlyZWcgfD0gRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFOworCQkJfQorCQkJcmVnICY9IH5FMTAwMF9WTFZGX1ZMQU5JRF9NQVNLOworCQkJcmVnIHw9IHZpZDsKKworCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaSA8IEUxMDAwX1ZMVkZfQVJSQVlfU0laRSkgeworCQkJLyogcmVtb3ZlIHZmIGZyb20gdGhlIHBvb2wgKi8KKwkJCXJlZyAmPSB+KDEgPDwgKEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCArIHZmKSk7CisJCQkvKiBpZiBwb29sIGlzIGVtcHR5IHRoZW4gcmVtb3ZlIGVudHJ5IGZyb20gdmZ0YSAqLworCQkJaWYgKCEocmVnICYgRTEwMDBfVkxWRl9QT09MU0VMX01BU0spKSB7CisJCQkJcmVnID0gMDsKKwkJCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOworCQkJfQorCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnYnVmLCB1MzIgdmYpCit7CisJaW50IGFkZCA9IChtc2didWZbMF0gJiBFMTAwMF9WVF9NU0dJTkZPX01BU0spID4+IEUxMDAwX1ZUX01TR0lORk9fU0hJRlQ7CisJaW50IHZpZCA9IChtc2didWZbMV0gJiBFMTAwMF9WTFZGX1ZMQU5JRF9NQVNLKTsKKworCXJldHVybiBpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCBhZGQsIHZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9ldmVudChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogZGlzYWJsZSBtYWlsYm94IGZ1bmN0aW9uYWxpdHkgZm9yIHZmICovCisJYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOworCisJLyogcmVzZXQgb2ZmbG9hZHMgdG8gZGVmYXVsdHMgKi8KKwlpZ2Jfc2V0X3Ztb2xyKGh3LCB2Zik7CisKKwkvKiByZXNldCB2bGFucyBmb3IgZGV2aWNlICovCisJaWdiX2NsZWFyX3ZmX3ZmdGEoYWRhcHRlciwgdmYpOworCisJLyogcmVzZXQgbXVsdGljYXN0IHRhYmxlIGFycmF5IGZvciB2ZiAqLworCWFkYXB0ZXItPnZmX2RhdGFbdmZdLm51bV92Zl9tY19oYXNoZXMgPSAwOworCisJLyogRmx1c2ggYW5kIHJlc2V0IHRoZSBtdGEgd2l0aCB0aGUgbmV3IHZhbHVlcyAqLworCWlnYl9zZXRfbXVsdGkoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9tc2coc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1bnNpZ25lZCBjaGFyICp2Zl9tYWMgPSBhZGFwdGVyLT52Zl9kYXRhW3ZmXS52Zl9tYWNfYWRkcmVzc2VzOworCXUzMiByZWcsIG1zZ2J1ZlszXTsKKwl1OCAqYWRkciA9ICh1OCAqKSgmbXNnYnVmWzFdKTsKKworCS8qIHByb2Nlc3MgYWxsIHRoZSBzYW1lIGl0ZW1zIGNsZWFyZWQgaW4gYSBmdW5jdGlvbiBsZXZlbCByZXNldCAqLworCWlnYl92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7CisKKwkvKiBzZXQgdmYgbWFjIGFkZHJlc3MgKi8KKwlpZ2JfcmFyX3NldChodywgdmZfbWFjLCB2ZiArIDEpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCB2ZiArIDEpOworCisJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLworCXJlZyA9IHJkMzIoRTEwMDBfVkZURSk7CisJd3IzMihFMTAwMF9WRlRFLCByZWcgfCAoMSA8PCB2ZikpOworCXJlZyA9IHJkMzIoRTEwMDBfVkZSRSk7CisJd3IzMihFMTAwMF9WRlJFLCByZWcgfCAoMSA8PCB2ZikpOworCisJLyogZW5hYmxlIG1haWxib3ggZnVuY3Rpb25hbGl0eSBmb3IgdmYgKi8KKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gdHJ1ZTsKKworCS8qIHJlcGx5IHRvIHJlc2V0IHdpdGggYWNrIGFuZCB2ZiBtYWMgYWRkcmVzcyAqLworCW1zZ2J1ZlswXSA9IEUxMDAwX1ZGX1JFU0VUIHwgRTEwMDBfVlRfTVNHVFlQRV9BQ0s7CisJbWVtY3B5KGFkZHIsIHZmX21hYywgNik7CisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAzLCB2Zik7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWNfYWRkcihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnLCBpbnQgdmYpCit7CisJCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSAoY2hhciAqKSZtc2dbMV07CisJCWludCBlcnIgPSAtMTsKKworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJCWVyciA9IGlnYl9zZXRfdmZfbWFjKGFkYXB0ZXIsIHZmLCBhZGRyKTsKKworCQlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyB2b2lkIGlnYl9yY3ZfYWNrX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbXNnID0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCisJLyogaWYgZGV2aWNlIGlzbid0IGNsZWFyIHRvIHNlbmQgaXQgc2hvdWxkbid0IGJlIHJlYWRpbmcgZWl0aGVyICovCisJaWYgKCFhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kKQorCQlpZ2Jfd3JpdGVfbWJ4KGh3LCAmbXNnLCAxLCB2Zik7Cit9CisKKworc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2ZjsKKworCWZvciAodmYgPSAwOyB2ZiA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IHZmKyspIHsKKwkJLyogcHJvY2VzcyBhbnkgcmVzZXQgcmVxdWVzdHMgKi8KKwkJaWYgKCFpZ2JfY2hlY2tfZm9yX3JzdChodywgdmYpKSB7CisJCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5jbGVhcl90b19zZW5kID0gZmFsc2U7CisJCQlpZ2JfdmZfcmVzZXRfZXZlbnQoYWRhcHRlciwgdmYpOworCQl9CisKKwkJLyogcHJvY2VzcyBhbnkgbWVzc2FnZXMgcGVuZGluZyAqLworCQlpZiAoIWlnYl9jaGVja19mb3JfbXNnKGh3LCB2ZikpCisJCQlpZ2JfcmN2X21zZ19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBhY2tzICovCisJCWlmICghaWdiX2NoZWNrX2Zvcl9hY2soaHcsIHZmKSkKKwkJCWlnYl9yY3ZfYWNrX2Zyb21fdmYoYWRhcHRlciwgdmYpOworCisJfQorfQorCitzdGF0aWMgaW50IGlnYl9yY3ZfbXNnX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJdTMyIG1ieF9zaXplID0gRTEwMDBfVkZNQUlMQk9YX1NJWkU7CisJdTMyIG1zZ2J1ZlttYnhfc2l6ZV07CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgcmV0dmFsOworCisJcmV0dmFsID0gaWdiX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CisKKwlpZiAocmV0dmFsKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCSAgICAgICAgIkVycm9yIHJlY2VpdmluZyBtZXNzYWdlIGZyb20gVkZcbiIpOworCisJLyogdGhpcyBpcyBhIG1lc3NhZ2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQsIGRvIG5vdGhpbmcgKi8KKwlpZiAobXNnYnVmWzBdICYgKEUxMDAwX1ZUX01TR1RZUEVfQUNLIHwgRTEwMDBfVlRfTVNHVFlQRV9OQUNLKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogdW50aWwgdGhlIHZmIGNvbXBsZXRlcyBhIHJlc2V0IGl0IHNob3VsZCBub3QgYmUKKwkgKiBhbGxvd2VkIHRvIHN0YXJ0IGFueSBjb25maWd1cmF0aW9uLgorCSAqLworCisJaWYgKG1zZ2J1ZlswXSA9PSBFMTAwMF9WRl9SRVNFVCkgeworCQlpZ2JfdmZfcmVzZXRfbXNnKGFkYXB0ZXIsIHZmKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCkgeworCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCQlpZ2Jfd3JpdGVfbWJ4KGh3LCBtc2didWYsIDEsIHZmKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzd2l0Y2ggKChtc2didWZbMF0gJiAweEZGRkYpKSB7CisJY2FzZSBFMTAwMF9WRl9TRVRfTUFDX0FERFI6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfbWFjX2FkZHIoYWRhcHRlciwgbXNnYnVmLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX01VTFRJQ0FTVDoKKwkJcmV0dmFsID0gaWdiX3NldF92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOworCQlicmVhazsKKwljYXNlIEUxMDAwX1ZGX1NFVF9MUEU6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfcmxwbWwoYWRhcHRlciwgbXNnYnVmWzFdLCB2Zik7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfVkZfU0VUX1ZMQU46CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfdmxhbihhZGFwdGVyLCBtc2didWYsIHZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVW5oYW5kbGVkIE1zZyAlMDh4XG4iLCBtc2didWZbMF0pOworCQlyZXR2YWwgPSAtMTsKKwkJYnJlYWs7CisJfQorCisJLyogbm90aWZ5IHRoZSBWRiBvZiB0aGUgcmVzdWx0cyBvZiB3aGF0IGl0IHNlbnQgdXMgKi8KKwlpZiAocmV0dmFsKQorCQltc2didWZbMF0gfD0gRTEwMDBfVlRfTVNHVFlQRV9OQUNLOworCWVsc2UKKwkJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQUNLOworCisJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfQ1RTOworCisJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKioKICAqIGlnYl9pbnRyX21zaSAtIEludGVycnVwdCBIYW5kbGVyCiAgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCkBAIC0zNTA3LDE5ICs0MTE5LDI0IEBACiAKIAlpZ2Jfd3JpdGVfaXRyKGFkYXB0ZXItPnJ4X3JpbmcpOwogCisJaWYoaWNyICYgRTEwMDBfSUNSX0RPVVRTWU5DKSB7CisJCS8qIEhXIGlzIHJlcG9ydGluZyBETUEgaXMgb3V0IG9mIHN5bmMgKi8KKwkJYWRhcHRlci0+c3RhdHMuZG9vc3luYysrOworCX0KKwogCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPnJ4X3JpbmdbMF0ubmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCi0gKiBpZ2JfaW50ciAtIEludGVycnVwdCBIYW5kbGVyCisgKiBpZ2JfaW50ciAtIExlZ2FjeSBJbnRlcnJ1cHQgSGFuZGxlcgogICogQGlycTogaW50ZXJydXB0IG51bWJlcgogICogQGRhdGE6IHBvaW50ZXIgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKiovCkBAIC0zNTMxLDcgKzQxNDgsNiBAQAogCS8qIEludGVycnVwdCBBdXRvLU1hc2suLi51cG9uIHJlYWRpbmcgSUNSLCBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQuICBObwogCSAqIG5lZWQgZm9yIHRoZSBJTUMgd3JpdGUgKi8KIAl1MzIgaWNyID0gcmQzMihFMTAwMF9JQ1IpOwotCXUzMiBlaWNyID0gMDsKIAlpZiAoIWljcikKIAkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KIApAQCAtMzU0Miw3ICs0MTU4LDEwIEBACiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWVpY3IgPSByZDMyKEUxMDAwX0VJQ1IpOworCWlmKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgeworCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCisJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKKwl9CiAKIAlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKQEAgLTM1NTEsMTEgKzQxNzAsMzEgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5yeF9yaW5nWzBdLm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3J4X2lycV9lbmFibGUoc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpIHsKKwkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPT0gMSkKKwkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOworCQllbHNlCisJCQlpZ2JfdXBkYXRlX3JpbmdfaXRyKHJ4X3JpbmcpOworCX0KKworCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQorCQkJd3IzMihFMTAwMF9FSU1TLCByeF9yaW5nLT5laW1zX3ZhbHVlKTsKKwkJZWxzZQorCQkJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQorfQorCiAvKioKICAqIGlnYl9wb2xsIC0gTkFQSSBSeCBwb2xsaW5nIGNhbGxiYWNrCiAgKiBAbmFwaTogbmFwaSBwb2xsaW5nIHN0cnVjdHVyZQpAQCAtMzU2NCw3MCArNDIwMyw2NCBAQAogc3RhdGljIGludCBpZ2JfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBpZ2JfcmluZywgbmFwaSk7Ci0Jc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcnhfcmluZy0+YWRhcHRlcjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWludCB0eF9jbGVhbl9jb21wbGV0ZSwgd29ya19kb25lID0gMDsKLQotCS8qIHRoaXMgcG9sbCByb3V0aW5lIG9ubHkgc3VwcG9ydHMgb25lIHR4IGFuZCBvbmUgcnggcXVldWUgKi8KLSNpZmRlZiBDT05GSUdfSUdCX0RDQQotCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQotCQlpZ2JfdXBkYXRlX3R4X2RjYSgmYWRhcHRlci0+dHhfcmluZ1swXSk7Ci0jZW5kaWYKLQl0eF9jbGVhbl9jb21wbGV0ZSA9IGlnYl9jbGVhbl90eF9pcnEoJmFkYXB0ZXItPnR4X3JpbmdbMF0pOwotCi0jaWZkZWYgQ09ORklHX0lHQl9EQ0EKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKLQkJaWdiX3VwZGF0ZV9yeF9kY2EoJmFkYXB0ZXItPnJ4X3JpbmdbMF0pOwotI2VuZGlmCi0JaWdiX2NsZWFuX3J4X2lycV9hZHYoJmFkYXB0ZXItPnJ4X3JpbmdbMF0sICZ3b3JrX2RvbmUsIGJ1ZGdldCk7Ci0KLQkvKiBJZiBubyBUeCBhbmQgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwotCWlmICgodHhfY2xlYW5fY29tcGxldGUgJiYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkpIHx8Ci0JICAgICFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKLQkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGlnYl9jbGVhbl9yeF9yaW5nX21zaXgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQotewotCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaWdiX3JpbmcsIG5hcGkpOwotCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCWludCB3b3JrX2RvbmUgPSAwOwogCiAjaWZkZWYgQ09ORklHX0lHQl9EQ0EKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKKwlpZiAocnhfcmluZy0+YWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaWdiX3VwZGF0ZV9yeF9kY2EocnhfcmluZyk7CiAjZW5kaWYKIAlpZ2JfY2xlYW5fcnhfaXJxX2FkdihyeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCi0KLQkvKiBJZiBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCi0JaWYgKCh3b3JrX2RvbmUgPT0gMCkgfHwgIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSB7Ci0JCQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9PSAxKQotCQkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOwotCQkJZWxzZQotCQkJCWlnYl91cGRhdGVfcmluZ19pdHIocnhfcmluZyk7Ci0JCX0KLQotCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQl3cjMyKEUxMDAwX0VJTVMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOwotCi0JCXJldHVybiAwOworCWlmIChyeF9yaW5nLT5idWRkeSkgeworI2lmZGVmIENPTkZJR19JR0JfRENBCisJCWlmIChyeF9yaW5nLT5hZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQorCQkJaWdiX3VwZGF0ZV90eF9kY2EocnhfcmluZy0+YnVkZHkpOworI2VuZGlmCisJCWlmICghaWdiX2NsZWFuX3R4X2lycShyeF9yaW5nLT5idWRkeSkpCisJCQl3b3JrX2RvbmUgPSBidWRnZXQ7CiAJfQogCi0JcmV0dXJuIDE7CisJLyogSWYgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWdiX3J4X2lycV9lbmFibGUocnhfcmluZyk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworLyoqCisgKiBpZ2JfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgVFggdGltZSBzdGFtcAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAc2tiOiBwYWNrZXQgdGhhdCB3YXMganVzdCBzZW50CisgKgorICogSWYgd2Ugd2VyZSBhc2tlZCB0byBkbyBoYXJkd2FyZSBzdGFtcGluZyBhbmQgc3VjaCBhIHRpbWUgc3RhbXAgaXMKKyAqIGF2YWlsYWJsZSwgdGhlbiBpdCBtdXN0IGhhdmUgYmVlbiBmb3IgdGhpcyBza2IgaGVyZSBiZWNhdXNlIHdlIG9ubHkKKyAqIGFsbG93IG9ubHkgb25lIHN1Y2ggcGFja2V0IGludG8gdGhlIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBpZ2JfdHhfaHd0c3RhbXAoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHggPSBza2JfdHgoc2tiKTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKHVubGlrZWx5KHNodHgtPmhhcmR3YXJlKSkgeworCQl1MzIgdmFsaWQgPSByZDMyKEUxMDAwX1RTWU5DVFhDVEwpICYgRTEwMDBfVFNZTkNUWENUTF9WQUxJRDsKKwkJaWYgKHZhbGlkKSB7CisJCQl1NjQgcmVndmFsID0gcmQzMihFMTAwMF9UWFNUTVBMKTsKKwkJCXU2NCBuczsKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wczsKKworCQkJbWVtc2V0KCZzaGh3dHN0YW1wcywgMCwgc2l6ZW9mKHNoaHd0c3RhbXBzKSk7CisJCQlyZWd2YWwgfD0gKHU2NClyZDMyKEUxMDAwX1RYU1RNUEgpIDw8IDMyOworCQkJbnMgPSB0aW1lY291bnRlcl9jeWMydGltZSgmYWRhcHRlci0+Y2xvY2ssCisJCQkJCQkgIHJlZ3ZhbCk7CisJCQl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCXNoaHd0c3RhbXBzLmh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOworCQkJc2hod3RzdGFtcHMuc3lzdHN0YW1wID0KKwkJCQl0aW1lY29tcGFyZV90cmFuc2Zvcm0oJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCXNrYl90c3RhbXBfdHgoc2tiLCAmc2hod3RzdGFtcHMpOworCQl9CisJfQogfQogCiAvKioKQEAgLTM2NjgsNiArNDMwMSw4IEBACiAJCQkJCSAgICBza2ItPmxlbjsKIAkJCQl0b3RhbF9wYWNrZXRzICs9IHNlZ3M7CiAJCQkJdG90YWxfYnl0ZXMgKz0gYnl0ZWNvdW50OworCisJCQkJaWdiX3R4X2h3dHN0YW1wKGFkYXB0ZXIsIHNrYik7CiAJCQl9CiAKIAkJCWlnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLCBidWZmZXJfaW5mbyk7CkBAIC0zNjc3LDcgKzQzMTIsNiBAQAogCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCiAJCQkJaSA9IDA7CiAJCX0KLQogCQllb3AgPSB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOwogCQllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOwogCX0KQEAgLTM2ODYsNyArNDMyMCw3IEBACiAKIAlpZiAodW5saWtlbHkoY291bnQgJiYKIAkJICAgICBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKLQkJICAgICBJR0JfREVTQ19VTlVTRUQodHhfcmluZykgPj0gSUdCX1RYX1FVRVVFX1dBS0UpKSB7CisJCSAgICAgaWdiX2Rlc2NfdW51c2VkKHR4X3JpbmcpID49IElHQl9UWF9RVUVVRV9XQUtFKSkgewogCQkvKiBNYWtlIHN1cmUgdGhhdCBhbnlib2R5IHN0b3BwaW5nIHRoZSBxdWV1ZSBhZnRlciB0aGlzCiAJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgogCQkgKi8KQEAgLTM3NDIsNDQgKzQzNzYsMTEgQEAKIAlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCi0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLSAvKioKLSAqIGlnYl9nZXRfc2tiX2hkciAtIGhlbHBlciBmdW5jdGlvbiBmb3IgTFJPIGhlYWRlciBwcm9jZXNzaW5nCi0gKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgYWRkZWQgdG8gTFJPIHBhY2tldAotICogQGlwaGRyOiBwb2ludGVyIHRvIGlwIGhlYWRlciBzdHJ1Y3R1cmUKLSAqIEB0Y3BoOiBwb2ludGVyIHRvIHRjcCBoZWFkZXIgc3RydWN0dXJlCi0gKiBAaGRyX2ZsYWdzOiBwb2ludGVyIHRvIGhlYWRlciBmbGFncwotICogQHByaXY6IHBvaW50ZXIgdG8gdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBmb3IgdGhlIGN1cnJlbnQgc2tfYnVmZgotICoqLwotc3RhdGljIGludCBpZ2JfZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwaGRyLCB2b2lkICoqdGNwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0gcHJpdjsKLQl1MTYgcGt0X3R5cGUgPSByeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5wa3RfaW5mbyAmCi0JICAgICAgICAgICAgICAgKEUxMDAwX1JYREFEVl9QS1RUWVBFX0lQVjQgfCBFMTAwMF9SWERBRFZfUEtUVFlQRV9UQ1ApOwotCi0JLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHZhbGlkIElQdjQgVENQIHBhY2tldCAqLwotCWlmIChwa3RfdHlwZSAhPSAoRTEwMDBfUlhEQURWX1BLVFRZUEVfSVBWNCB8Ci0JICAgICAgICAgICAgICAgICAgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogU2V0IG5ldHdvcmsgaGVhZGVycyAqLwotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2hkcmxlbihza2IpKTsKLQkqaXBoZHIgPSBpcF9oZHIoc2tiKTsKLQkqdGNwaCA9IHRjcF9oZHIoc2tiKTsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCi0JcmV0dXJuIDA7Ci0KLX0KLSNlbmRpZiAvKiBDT05GSUdfSUdCX0xSTyAqLwotCiAvKioKICAqIGlnYl9yZWNlaXZlX3NrYiAtIGhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgcnggaW5kaWNhdGlvbnMKLSAqIEByaW5nOiBwb2ludGVyIHRvIHJlY2VpdmUgcmluZyByZWNldmluZyB0aGlzIHBhY2tldCAKKyAqIEByaW5nOiBwb2ludGVyIHRvIHJlY2VpdmUgcmluZyByZWNldmluZyB0aGlzIHBhY2tldAogICogQHN0YXR1czogZGVzY3JpcHRvciBzdGF0dXMgZmllbGQgYXMgd3JpdHRlbiBieSBoYXJkd2FyZQotICogQHZsYW46IGRlc2NyaXB0b3IgdmxhbiBmaWVsZCBhcyB3cml0dGVuIGJ5IGhhcmR3YXJlIChubyBsZS9iZSBjb252ZXJzaW9uKQorICogQHJ4X2Rlc2M6IHJlY2VpdmUgZGVzY3JpcHRvciBjb250YWluaW5nIHZsYW4gYW5kIHR5cGUgaW5mb3JtYXRpb24uCiAgKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgaW5kaWNhdGVkIHRvIHN0YWNrCiAgKiovCiBzdGF0aWMgdm9pZCBpZ2JfcmVjZWl2ZV9za2Ioc3RydWN0IGlnYl9yaW5nICpyaW5nLCB1OCBzdGF0dXMsCkBAIC0zNzg5LDMxICs0MzkwLDIzIEBACiAJc3RydWN0IGlnYl9hZGFwdGVyICogYWRhcHRlciA9IHJpbmctPmFkYXB0ZXI7CiAJYm9vbCB2bGFuX2V4dHJhY3RlZCA9IChhZGFwdGVyLT52bGdycCAmJiAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApKTsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyAmJgotCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgeworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByaW5nLT5xdWV1ZV9pbmRleCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CiAJCWlmICh2bGFuX2V4dHJhY3RlZCkKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3IsIHNrYiwKLQkJCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT52bGdycCwKLQkJCSAgICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSwKLQkJCSAgICAgICAgICAgICAgICAgICByeF9kZXNjKTsKKwkJCXZsYW5fZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIGFkYXB0ZXItPnZsZ3JwLAorCQkJICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSwKKwkJCSAgICAgICAgICAgICAgICAgc2tiKTsKIAkJZWxzZQotCQkJbHJvX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLHNrYiwgcnhfZGVzYyk7Ci0JCXJpbmctPmxyb191c2VkID0gMTsKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIHNrYik7CiAJfSBlbHNlIHsKLSNlbmRpZgogCQlpZiAodmxhbl9leHRyYWN0ZWQpCiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKIAkJCSAgICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnZsYW4pKTsKIAkJZWxzZQotCiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCiAJfQotI2VuZGlmCiB9CiAKLQogc3RhdGljIGlubGluZSB2b2lkIGlnYl9yeF9jaGVja3N1bV9hZHYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJCSAgICAgICB1MzIgc3RhdHVzX2Vyciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTM4NDEsMTcgKzQ0MzQsMTkgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvICwgKm5leHRfYnVmZmVyOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKIAlib29sIGNsZWFuZWQgPSBmYWxzZTsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOworCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAKQEAgLTM4NTksNyArNDQ1NCwzMCBAQAogCQlpZiAoKndvcmtfZG9uZSA+PSBidWRnZXQpCiAJCQlicmVhazsKIAkJKCp3b3JrX2RvbmUpKys7Ci0JCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCisJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJbmV4dF9yeGQgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CisJCXByZWZldGNoKG5leHRfcnhkKTsKKwkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisKKwkJbGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKKwkJY2xlYW5lZCA9IHRydWU7CisJCWNsZWFuZWRfY291bnQrKzsKKworCQlpZiAoIWFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsKKwkJCQkJICAgTkVUX0lQX0FMSUdOLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCQkJZ290byBzZW5kX3VwOworCQl9CiAKIAkJLyogSFcgd2lsbCBub3QgRE1BIGluIGRhdGEgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIGJ1ZmZlciwgZXZlbgogCQkgKiBpZiBpdCBwYXJzZXMgdGhlIChORlMsIG9mIGNvdXJzZSkgaGVhZGVyIHRvIGJlIGxhcmdlci4gIEluCkBAIC0zODcxLDI2ICs0NDg5LDkgQEAKIAkJaWYgKGhsZW4gPiBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKIAkJCWhsZW4gPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKIAotCQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGgpOwotCQljbGVhbmVkID0gdHJ1ZTsKLQkJY2xlYW5lZF9jb3VudCsrOwotCi0JCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7Ci0JCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7Ci0JCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwotCQlpZiAoIWFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsKLQkJCQkJICAgTkVUX0lQX0FMSUdOLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwotCQkJZ290byBzZW5kX3VwOwotCQl9Ci0KIAkJaWYgKCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSArCi0JCQkJCSAgIE5FVF9JUF9BTElHTiwKKwkJCQkJIGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplICsgTkVUX0lQX0FMSUdOLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBobGVuKTsKIAkJfQpAQCAtMzkxNiwxMyArNDUxNyw2IEBACiAKIAkJCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoOwogCQl9Ci1zZW5kX3VwOgotCQlpKys7Ci0JCWlmIChpID09IHJ4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7Ci0JCW5leHRfcnhkID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwotCQlwcmVmZXRjaChuZXh0X3J4ZCk7Ci0JCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCiAJCWlmICghKHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9FT1ApKSB7CiAJCQlidWZmZXJfaW5mby0+c2tiID0gbmV4dF9idWZmZXItPnNrYjsKQEAgLTM5MzEsNiArNDUyNSw0NyBAQAogCQkJbmV4dF9idWZmZXItPmRtYSA9IDA7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQorc2VuZF91cDoKKwkJLyoKKwkJICogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHRoZSBSWCByZWdpc3RlcnMgY29udGFpbgorCQkgKiB0aGUgdGltZSBzdGFtcC4gTm8gb3RoZXIgcGFja2V0IHdpbGwgYmUgdGltZQorCQkgKiBzdGFtcGVkIHVudGlsIHdlIHJlYWQgdGhlc2UgcmVnaXN0ZXJzLCBzbyByZWFkIHRoZQorCQkgKiByZWdpc3RlcnMgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSBhZ2Fpbi4gQmVjYXVzZQorCQkgKiBvbmx5IG9uZSBwYWNrZXQgY2FuIGJlIHRpbWUgc3RhbXBlZCBhdCBhIHRpbWUsIHdlCisJCSAqIGtub3cgdGhhdCB0aGUgcmVnaXN0ZXIgdmFsdWVzIG11c3QgYmVsb25nIHRvIHRoaXMKKwkJICogb25lIGhlcmUgYW5kIHRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIHRvIGNvbXBhcmUKKwkJICogYW55IG9mIHRoZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgc3RvcmVkIGZvciBpdC4KKwkJICoKKwkJICogSWYgbm90aGluZyB3ZW50IHdyb25nLCB0aGVuIGl0IHNob3VsZCBoYXZlIGEKKwkJICogc2tiX3NoYXJlZF90eCB0aGF0IHdlIGNhbiB0dXJuIGludG8gYQorCQkgKiBza2Jfc2hhcmVkX2h3dHN0YW1wcy4KKwkJICoKKwkJICogVE9ETzogY2FuIHRpbWUgc3RhbXBpbmcgYmUgdHJpZ2dlcmVkICh0aHVzIGxvY2tpbmcKKwkJICogdGhlIHJlZ2lzdGVycykgd2l0aG91dCB0aGUgcGFja2V0IHJlYWNoaW5nIHRoaXMgcG9pbnQKKwkJICogaGVyZT8gSW4gdGhhdCBjYXNlIFJYIHRpbWUgc3RhbXBpbmcgd291bGQgZ2V0IHN0dWNrLgorCQkgKgorCQkgKiBUT0RPOiBpbiAidGltZSBzdGFtcCBhbGwgcGFja2V0cyIgbW9kZSB0aGlzIGJpdCBpcworCQkgKiBub3Qgc2V0LiBOZWVkIGEgZ2xvYmFsIGZsYWcgZm9yIHRoaXMgbW9kZSBhbmQgdGhlbgorCQkgKiBhbHdheXMgcmVhZCB0aGUgcmVnaXN0ZXJzLiBDYW5ub3QgYmUgZG9uZSB3aXRob3V0CisJCSAqIGEgcmFjZSBjb25kaXRpb24uCisJCSAqLworCQlpZiAodW5saWtlbHkoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX1RTKSkgeworCQkJdTY0IHJlZ3ZhbDsKKwkJCXU2NCBuczsKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqc2hod3RzdGFtcHMgPQorCQkJCXNrYl9od3RzdGFtcHMoc2tiKTsKKworCQkJV0FSTighKHJkMzIoRTEwMDBfVFNZTkNSWENUTCkgJiBFMTAwMF9UU1lOQ1JYQ1RMX1ZBTElEKSwKKwkJCSAgICAgImlnYjogbm8gUlggdGltZSBzdGFtcCBhdmFpbGFibGUgZm9yIHRpbWUgc3RhbXBlZCBwYWNrZXQiKTsKKwkJCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfUlhTVE1QTCk7CisJCQlyZWd2YWwgfD0gKHU2NClyZDMyKEUxMDAwX1JYU1RNUEgpIDw8IDMyOworCQkJbnMgPSB0aW1lY291bnRlcl9jeWMydGltZSgmYWRhcHRlci0+Y2xvY2ssIHJlZ3ZhbCk7CisJCQl0aW1lY29tcGFyZV91cGRhdGUoJmFkYXB0ZXItPmNvbXBhcmUsIG5zKTsKKwkJCW1lbXNldChzaGh3dHN0YW1wcywgMCwgc2l6ZW9mKCpzaGh3dHN0YW1wcykpOworCQkJc2hod3RzdGFtcHMtPmh3dHN0YW1wID0gbnNfdG9fa3RpbWUobnMpOworCQkJc2hod3RzdGFtcHMtPnN5c3RzdGFtcCA9CisJCQkJdGltZWNvbXBhcmVfdHJhbnNmb3JtKCZhZGFwdGVyLT5jb21wYXJlLCBucyk7CisJCX0KIAogCQlpZiAoc3RhdGVyciAmIEUxMDAwX1JYREVYVF9FUlJfRlJBTUVfRVJSX01BU0spIHsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CkBAIC0zOTU4LDE5ICs0NTkzLDExIEBACiAJCS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLwogCQlyeF9kZXNjID0gbmV4dF9yeGQ7CiAJCWJ1ZmZlcl9pbmZvID0gbmV4dF9idWZmZXI7Ci0KIAkJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAJfQogCiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7Ci0JY2xlYW5lZF9jb3VudCA9IElHQl9ERVNDX1VOVVNFRChyeF9yaW5nKTsKLQotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaWYgKHJ4X3JpbmctPmxyb191c2VkKSB7Ci0JCWxyb19mbHVzaF9hbGwoJnJ4X3JpbmctPmxyb19tZ3IpOwotCQlyeF9yaW5nLT5scm9fdXNlZCA9IDA7Ci0JfQotI2VuZGlmCisJY2xlYW5lZF9jb3VudCA9IGlnYl9kZXNjX3VudXNlZChyeF9yaW5nKTsKIAogCWlmIChjbGVhbmVkX2NvdW50KQogCQlpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYocnhfcmluZywgY2xlYW5lZF9jb3VudCk7CkBAIC0zOTg0LDcgKzQ2MTEsNiBAQAogCXJldHVybiBjbGVhbmVkOwogfQogCi0KIC8qKgogICogaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2IC0gUmVwbGFjZSB1c2VkIHJlY2VpdmUgYnVmZmVyczsgcGFja2V0IHNwbGl0CiAgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQpAQCAtMzk5OSwxMCArNDYyNSwxNyBAQAogCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBpOworCWludCBidWZzejsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKIAlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAorCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKKwkJYnVmc3ogPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKKwllbHNlCisJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKKwlidWZzeiArPSBORVRfSVBfQUxJR047CisKIAl3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSB7CiAJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAKQEAgLTQwMTgsMjMgKzQ2NTEsMTQgQEAKIAkJCQlidWZmZXJfaW5mby0+cGFnZV9vZmZzZXQgXj0gUEFHRV9TSVpFIC8gMjsKIAkJCX0KIAkJCWJ1ZmZlcl9pbmZvLT5wYWdlX2RtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKHBkZXYsCi0JCQkJCSAgICAgYnVmZmVyX2luZm8tPnBhZ2UsCisJCQkJcGNpX21hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5wYWdlLAogCQkJCQkgICAgIGJ1ZmZlcl9pbmZvLT5wYWdlX29mZnNldCwKIAkJCQkJICAgICBQQUdFX1NJWkUgLyAyLAogCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAogCQlpZiAoIWJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCWludCBidWZzejsKLQotCQkJaWYgKGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKQotCQkJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7Ci0JCQllbHNlCi0JCQkJYnVmc3ogPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOwotCQkJYnVmc3ogKz0gTkVUX0lQX0FMSUdOOwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGJ1ZnN6KTsKLQogCQkJaWYgKCFza2IpIHsKIAkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwogCQkJCWdvdG8gbm9fYnVmZmVyczsKQEAgLTQwNTAsNyArNDY3NCw2IEBACiAJCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAogCQkJCQkJCSAgYnVmc3osCiAJCQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCiAJCX0KIAkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRuJ3QgY2hhbmdlIGJlY2F1c2UKIAkJICogZWFjaCB3cml0ZS1iYWNrIGVyYXNlcyB0aGlzIGluZm8uICovCkBAIC00MTIwLDYgKzQ3NDMsMTYzIEBACiB9CiAKIC8qKgorICogaWdiX2h3dHN0YW1wX2lvY3RsIC0gY29udHJvbCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nCisgKiBAbmV0ZGV2OgorICogQGlmcmVxOgorICogQGNtZDoKKyAqCisgKiBPdXRnb2luZyB0aW1lIHN0YW1waW5nIGNhbiBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZC4gUGxheSBuaWNlIGFuZAorICogZGlzYWJsZSBpdCB3aGVuIHJlcXVlc3RlZCwgYWx0aG91Z2ggaXQgc2hvdWxkbid0IGNhc2UgYW55IG92ZXJoZWFkCisgKiB3aGVuIG5vIHBhY2tldCBuZWVkcyBpdC4gQXQgbW9zdCBvbmUgcGFja2V0IGluIHRoZSBxdWV1ZSBtYXkgYmUKKyAqIG1hcmtlZCBmb3IgdGltZSBzdGFtcGluZywgb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gdGVsbAorICogZm9yIHN1cmUgdG8gd2hpY2ggcGFja2V0IHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIGJlbG9uZ3MuCisgKgorICogSW5jb21pbmcgdGltZSBzdGFtcGluZyBoYXMgdG8gYmUgY29uZmlndXJlZCB2aWEgdGhlIGhhcmR3YXJlCisgKiBmaWx0ZXJzLiBOb3QgYWxsIGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkLCBpbiBwYXJ0aWN1bGFyIGV2ZW50CisgKiB0eXBlIGhhcyB0byBiZSBzcGVjaWZpZWQuIE1hdGNoaW5nIHRoZSBraW5kIG9mIGV2ZW50IHBhY2tldCBpcworICogbm90IHN1cHBvcnRlZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICJhbGwgVjIgZXZlbnRzIHJlZ2FyZGxlc3Mgb2YKKyAqIGxldmVsIDIgb3IgNCIuCisgKgorICoqLworc3RhdGljIGludCBpZ2JfaHd0c3RhbXBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGNvbmZpZzsKKwl1MzIgdHN5bmNfdHhfY3RsX2JpdCA9IEUxMDAwX1RTWU5DVFhDVExfRU5BQkxFRDsKKwl1MzIgdHN5bmNfcnhfY3RsX2JpdCA9IEUxMDAwX1RTWU5DUlhDVExfRU5BQkxFRDsKKwl1MzIgdHN5bmNfcnhfY3RsX3R5cGUgPSAwOworCXUzMiB0c3luY19yeF9jZmcgPSAwOworCWludCBpc19sNCA9IDA7CisJaW50IGlzX2wyID0gMDsKKwlzaG9ydCBwb3J0ID0gMzE5OyAvKiBQVFAgKi8KKwl1MzIgcmVndmFsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjb25maWcsIGlmci0+aWZyX2RhdGEsIHNpemVvZihjb25maWcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgKi8KKwlpZiAoY29uZmlnLmZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY29uZmlnLnR4X3R5cGUpIHsKKwljYXNlIEhXVFNUQU1QX1RYX09GRjoKKwkJdHN5bmNfdHhfY3RsX2JpdCA9IDA7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfVFhfT046CisJCXRzeW5jX3R4X2N0bF9iaXQgPSBFMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCXN3aXRjaCAoY29uZmlnLnJ4X2ZpbHRlcikgeworCWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CisJCXRzeW5jX3J4X2N0bF9iaXQgPSAwOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDoKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6CisJCS8qCisJCSAqIHJlZ2lzdGVyIFRTWU5DUlhDRkcgbXVzdCBiZSBzZXQsIHRoZXJlZm9yZSBpdCBpcyBub3QKKwkJICogcG9zc2libGUgdG8gdGltZSBzdGFtcCBib3RoIFN5bmMgYW5kIERlbGF5X1JlcSBtZXNzYWdlcworCQkgKiA9PiBmYWxsIGJhY2sgdG8gdGltZSBzdGFtcGluZyBhbGwgcGFja2V0cworCQkgKi8KKwkJdHN5bmNfcnhfY3RsX3R5cGUgPSBFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfQUxMOworCQljb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0w0X1YxOworCQl0c3luY19yeF9jZmcgPSBFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9TWU5DX01FU1NBR0U7CisJCWlzX2w0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUToKKwkJdHN5bmNfcnhfY3RsX3R5cGUgPSBFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDRfVjE7CisJCXRzeW5jX3J4X2NmZyA9IEUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX0RFTEFZX1JFUV9NRVNTQUdFOworCQlpc19sNCA9IDE7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOgorCQl0c3luY19yeF9jdGxfdHlwZSA9IEUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9MNF9WMjsKKwkJdHN5bmNfcnhfY2ZnID0gRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfU1lOQ19NRVNTQUdFOworCQlpc19sMiA9IDE7CisJCWlzX2w0ID0gMTsKKwkJY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9TT01FOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfREVMQVlfUkVROgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0wyX0w0X1YyOworCQl0c3luY19yeF9jZmcgPSBFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9ERUxBWV9SRVFfTUVTU0FHRTsKKwkJaXNfbDIgPSAxOworCQlpc19sNCA9IDE7CisJCWNvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfU09NRTsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0VWRU5UX1YyOworCQljb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDsKKwkJaXNfbDIgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwkvKiBlbmFibGUvZGlzYWJsZSBUWCAqLworCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfVFNZTkNUWENUTCk7CisJcmVndmFsID0gKHJlZ3ZhbCAmIH5FMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQpIHwgdHN5bmNfdHhfY3RsX2JpdDsKKwl3cjMyKEUxMDAwX1RTWU5DVFhDVEwsIHJlZ3ZhbCk7CisKKwkvKiBlbmFibGUvZGlzYWJsZSBSWCwgZGVmaW5lIHdoaWNoIFBUUCBwYWNrZXRzIGFyZSB0aW1lIHN0YW1wZWQgKi8KKwlyZWd2YWwgPSByZDMyKEUxMDAwX1RTWU5DUlhDVEwpOworCXJlZ3ZhbCA9IChyZWd2YWwgJiB+RTEwMDBfVFNZTkNSWENUTF9FTkFCTEVEKSB8IHRzeW5jX3J4X2N0bF9iaXQ7CisJcmVndmFsID0gKHJlZ3ZhbCAmIH4weEUpIHwgdHN5bmNfcnhfY3RsX3R5cGU7CisJd3IzMihFMTAwMF9UU1lOQ1JYQ1RMLCByZWd2YWwpOworCXdyMzIoRTEwMDBfVFNZTkNSWENGRywgdHN5bmNfcnhfY2ZnKTsKKworCS8qCisJICogRXRoZXJ0eXBlIEZpbHRlciBRdWV1ZSBGaWx0ZXJbMF1bMTU6MF0gPSAweDg4RjcKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFdGhlcnR5cGUgdG8gZmlsdGVyIG9uKQorCSAqIEV0aGVydHlwZSBGaWx0ZXIgUXVldWUgRmlsdGVyWzBdWzI2XSA9IDB4MSAoRW5hYmxlIGZpbHRlcikKKwkgKiBFdGhlcnR5cGUgRmlsdGVyIFF1ZXVlIEZpbHRlclswXVszMF0gPSAweDEgKEVuYWJsZSBUaW1lc3RhbXBpbmcpCisJICovCisJd3IzMihFMTAwMF9FVFFGMCwgaXNfbDIgPyAweDQ0MDA4OGY3IDogMCk7CisKKwkvKiBMNCBRdWV1ZSBGaWx0ZXJbMF06IG9ubHkgZmlsdGVyIGJ5IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9ydCAqLworCXdyMzIoRTEwMDBfU1BRRjAsIGh0b25zKHBvcnQpKTsKKwl3cjMyKEUxMDAwX0lNSVJFWFQoMCksIGlzX2w0ID8KKwkgICAgICgoMTw8MTIpIHwgKDE8PDE5KSAvKiBieXBhc3Mgc2l6ZSBhbmQgY29udHJvbCBmbGFncyAqLykgOiAwKTsKKwl3cjMyKEUxMDAwX0lNSVIoMCksIGlzX2w0ID8KKwkgICAgIChodG9ucyhwb3J0KQorCSAgICAgIHwgKDA8PDE2KSAvKiBpbW1lZGlhdGUgaW50ZXJydXB0IGRpc2FibGVkICovCisJICAgICAgfCAwIC8qICgxPDwxNykgYml0IGNsZWFyZWQ6IGRvIG5vdCBieXBhc3MKKwkJICAgICBkZXN0aW5hdGlvbiBwb3J0IGNoZWNrICovKQorCQk6IDApOworCXdyMzIoRTEwMDBfRlRRRjAsIGlzX2w0ID8KKwkgICAgICgweDExIC8qIFVEUCAqLworCSAgICAgIHwgKDE8PDE1KSAvKiBWRiBub3QgY29tcGFyZWQgKi8KKwkgICAgICB8ICgxPDwyNykgLyogRW5hYmxlIFRpbWVzdGFtcGluZyAqLworCSAgICAgIHwgKDc8PDI4KSAvKiBvbmx5IHNvdXJjZSBwb3J0IGZpbHRlciBlbmFibGVkLAorCQkJICAgc291cmNlL3RhcmdldCBhZGRyZXNzIGFuZCBwcm90b2NvbAorCQkJICAgbWFza2VkICovKQorCSAgICAgOiAoKDE8PDE1KSB8ICgxNTw8MjgpIC8qIGFsbCBtYXNrIGJpdHMgc2V0ID0gZmlsdGVyIG5vdAorCQkJCSAgICAgIGVuYWJsZWQgKi8pKTsKKworCXdyZmwoKTsKKworCWFkYXB0ZXItPmh3dHN0YW1wX2NvbmZpZyA9IGNvbmZpZzsKKworCS8qIGNsZWFyIFRYL1JYIHRpbWUgc3RhbXAgcmVnaXN0ZXJzLCBqdXN0IHRvIGJlIHN1cmUgKi8KKwlyZWd2YWwgPSByZDMyKEUxMDAwX1RYU1RNUEgpOworCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfUlhTVE1QSCk7CisKKwlyZXR1cm4gY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZjb25maWcsIHNpemVvZihjb25maWcpKSA/CisJCS1FRkFVTFQgOiAwOworfQorCisvKioKICAqIGlnYl9pb2N0bCAtCiAgKiBAbmV0ZGV2OgogICogQGlmcmVxOgpAQCAtNDEzMiw2ICs0OTEyLDggQEAKIAljYXNlIFNJT0NHTUlJUkVHOgogCWNhc2UgU0lPQ1NNSUlSRUc6CiAJCXJldHVybiBpZ2JfbWlpX2lvY3RsKG5ldGRldiwgaWZyLCBjbWQpOworCWNhc2UgU0lPQ1NIV1RTVEFNUDoKKwkJcmV0dXJuIGlnYl9od3RzdGFtcF9pb2N0bChuZXRkZXYsIGlmciwgY21kKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtNDE1OCw4ICs0OTQwLDYgQEAKIAkJcmN0bCAmPSB+RTEwMDBfUkNUTF9DRklFTjsKIAkJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKIAkJaWdiX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKLQkJd3IzMihFMTAwMF9STFBNTCwKLQkJCQlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUpOwogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCiAJCWN0cmwgPSByZDMyKEUxMDAwX0NUUkwpOwpAQCAtNDE3MCwxMCArNDk1MCwxMCBAQAogCQkJaWdiX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBhZGFwdGVyLT5tbmdfdmxhbl9pZCk7CiAJCQlhZGFwdGVyLT5tbmdfdmxhbl9pZCA9IElHQl9NTkdfVkxBTl9OT05FOwogCQl9Ci0JCXdyMzIoRTEwMDBfUkxQTUwsCi0JCQkJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpOwogCX0KIAorCWlnYl9ybHBtbF9zZXQoYWRhcHRlcik7CisKIAlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogfQpAQCAtNDE4MiwyNCArNDk2MiwyNSBAQAogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgdmZ0YSwgaW5kZXg7CisJaW50IHBmX2lkID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAotCWlmICgoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgorCWlmICgoaHctPm1uZ19jb29raWUuc3RhdHVzICYKIAkgICAgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTikgJiYKIAkgICAgKHZpZCA9PSBhZGFwdGVyLT5tbmdfdmxhbl9pZCkpCiAJCXJldHVybjsKLQkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLwotCWluZGV4ID0gKHZpZCA+PiA1KSAmIDB4N0Y7Ci0JdmZ0YSA9IGFycmF5X3JkMzIoRTEwMDBfVkZUQSwgaW5kZXgpOwotCXZmdGEgfD0gKDEgPDwgKHZpZCAmIDB4MUYpKTsKLQlpZ2Jfd3JpdGVfdmZ0YSgmYWRhcHRlci0+aHcsIGluZGV4LCB2ZnRhKTsKKworCS8qIGFkZCB2aWQgdG8gdmx2ZiBpZiBzci1pb3YgaXMgZW5hYmxlZCwKKwkgKiBpZiB0aGF0IGZhaWxzIGFkZCBkaXJlY3RseSB0byBmaWx0ZXIgdGFibGUgKi8KKwlpZiAoaWdiX3ZsdmZfc2V0KGFkYXB0ZXIsIHZpZCwgdHJ1ZSwgcGZfaWQpKQorCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgdHJ1ZSk7CisKIH0KIAogc3RhdGljIHZvaWQgaWdiX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIHZmdGEsIGluZGV4OworCWludCBwZl9pZCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAKIAlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOwpAQCAtNDIxNSwxMSArNDk5NiwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogcmVtb3ZlIFZJRCBmcm9tIGZpbHRlciB0YWJsZSAqLwotCWluZGV4ID0gKHZpZCA+PiA1KSAmIDB4N0Y7Ci0JdmZ0YSA9IGFycmF5X3JkMzIoRTEwMDBfVkZUQSwgaW5kZXgpOwotCXZmdGEgJj0gfigxIDw8ICh2aWQgJiAweDFGKSk7Ci0JaWdiX3dyaXRlX3ZmdGEoJmFkYXB0ZXItPmh3LCBpbmRleCwgdmZ0YSk7CisJLyogcmVtb3ZlIHZpZCBmcm9tIHZsdmYgaWYgc3ItaW92IGlzIGVuYWJsZWQsCisJICogaWYgbm90IGluIHZsdmYgcmVtb3ZlIGZyb20gdmZ0YSAqLworCWlmIChpZ2Jfdmx2Zl9zZXQoYWRhcHRlciwgdmlkLCBmYWxzZSwgcGZfaWQpKQorCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKQEAgLTQyNzYsNyArNTA1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC00MzY4LDEwICs1MTQ3LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCi0JCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWVsc2UKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJpZ2I6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwpAQCAtNDM5Miw2ICs1MTY4LDExIEBACiAJLyogZTEwMDBfcG93ZXJfdXBfcGh5KGFkYXB0ZXIpOyAqLwogCiAJaWdiX3Jlc2V0KGFkYXB0ZXIpOworCisJLyogbGV0IHRoZSBmL3cga25vdyB0aGF0IHRoZSBoL3cgaXMgbm93IHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZQorCSAqIGRyaXZlci4gKi8KKwlpZ2JfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CisKIAl3cjMyKEUxMDAwX1dVUywgfjApOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtNDQwMiwxMCArNTE4Myw2IEBACiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAKLQkvKiBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgvdyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCi0JICogZHJpdmVyLiAqLwotCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKLQogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC00NDI0LDIyICs1MjAxLDI3IEBACiBzdGF0aWMgdm9pZCBpZ2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgaTsKLQlpbnQgd29ya19kb25lID0gMDsKIAotCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKLQlhZGFwdGVyLT5mbGFncyB8PSBJR0JfRkxBR19JTl9ORVRQT0xMOworCWlmICghYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7CisJCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwkJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKKwkJcmV0dXJuOworCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl90eF9pcnEoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbaV07CisJCXdyMzIoRTEwMDBfRUlNQywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisJCWlnYl9jbGVhbl90eF9pcnEodHhfcmluZyk7CisJCXdyMzIoRTEwMDBfRUlNUywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisJfQogCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NsZWFuX3J4X2lycV9hZHYoJmFkYXB0ZXItPnJ4X3JpbmdbaV0sCi0JCQkJICAgICAmd29ya19kb25lLAotCQkJCSAgICAgYWRhcHRlci0+cnhfcmluZ1tpXS5uYXBpLndlaWdodCk7Ci0KLQlhZGFwdGVyLT5mbGFncyAmPSB+SUdCX0ZMQUdfSU5fTkVUUE9MTDsKLQlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2ldOworCQl3cjMyKEUxMDAwX0VJTUMsIHJ4X3JpbmctPmVpbXNfdmFsdWUpOworCQluYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwl9CiB9CiAjZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KIApAQCAtNDQ4MiwxMiArNTI2NCw3IEBACiAJcGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7CiAJaW50IGVycjsKIAotCWlmIChhZGFwdGVyLT5uZWVkX2lvcG9ydCkKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JZWxzZQotCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7Ci0KLQlpZiAoZXJyKSB7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CkBAIC00NTQwLDQgKzUzMTcsMTcyIEBACiAJaWdiX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3NldF92bW9scihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgdmZuKQoreworCXUzMiByZWdfZGF0YTsKKworCXJlZ19kYXRhID0gcmQzMihFMTAwMF9WTU9MUih2Zm4pKTsKKwlyZWdfZGF0YSB8PSBFMTAwMF9WTU9MUl9CQU0gfAkgLyogQWNjZXB0IGJyb2FkY2FzdCAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1JPUEUgfCAgIC8qIEFjY2VwdCBwYWNrZXRzIG1hdGNoZWQgaW4gVVRBICovCisJICAgICAgICAgICAgRTEwMDBfVk1PTFJfUk9NUEUgfCAgLyogQWNjZXB0IHBhY2tldHMgbWF0Y2hlZCBpbiBNVEEgKi8KKwkgICAgICAgICAgICBFMTAwMF9WTU9MUl9BVVBFIHwgICAvKiBBY2NlcHQgdW50YWdnZWQgcGFja2V0cyAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1NUUlZMQU47IC8qIFN0cmlwIHZsYW4gdGFncyAqLworCXdyMzIoRTEwMDBfVk1PTFIodmZuKSwgcmVnX2RhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpZ2Jfc2V0X3ZmX3JscG1sKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmZuKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHZtb2xyOworCisJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKHZmbikpOworCXZtb2xyICY9IH5FMTAwMF9WTU9MUl9STFBNTF9NQVNLOworCXZtb2xyIHw9IHNpemUgfCBFMTAwMF9WTU9MUl9MUEU7CisJd3IzMihFMTAwMF9WTU9MUih2Zm4pLCB2bW9scik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfcmFoX3Bvb2woc3RydWN0IGUxMDAwX2h3ICpodywgaW50IHBvb2wsIGludCBlbnRyeSkKK3sKKwl1MzIgcmVnX2RhdGE7CisKKwlyZWdfZGF0YSA9IHJkMzIoRTEwMDBfUkFIKGVudHJ5KSk7CisJcmVnX2RhdGEgJj0gfkUxMDAwX1JBSF9QT09MX01BU0s7CisJcmVnX2RhdGEgfD0gRTEwMDBfUkFIX1BPT0xfMSA8PCBwb29sOzsKKwl3cjMyKEUxMDAwX1JBSChlbnRyeSksIHJlZ19kYXRhKTsKK30KKworc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIGludCBlbnRyeV9jb3VudCwgdTE2IHRvdGFsX3Jhcl9maWx0ZXJzKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGkgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ICsgMTsKKworCWlmICgoaSArIGVudHJ5X2NvdW50KSA8IHRvdGFsX3Jhcl9maWx0ZXJzKQorCQl0b3RhbF9yYXJfZmlsdGVycyA9IGkgKyBlbnRyeV9jb3VudDsKKworCWZvciAoOyBpIDwgdG90YWxfcmFyX2ZpbHRlcnM7IGkrKykKKwkJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgaSk7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHJhcl9lbnRyeSA9IHZmICsgMTsgLyogVkYgTUFDIGFkZHJlc3NlcyBzdGFydCBhdCBlbnRyeSAxICovCisKKwlpZ2JfcmFyX3NldChodywgbWFjX2FkZHIsIHJhcl9lbnRyeSk7CisKKwltZW1jcHkoYWRhcHRlci0+dmZfZGF0YVt2Zl0udmZfbWFjX2FkZHJlc3NlcywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCByYXJfZW50cnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl92bW1fY29udHJvbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmVnX2RhdGE7CisKKwlpZiAoIWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCXJldHVybjsKKworCS8qIFZGJ3MgbmVlZCBQRiByZXNldCBpbmRpY2F0aW9uIGJlZm9yZSB0aGV5CisJICogY2FuIHNlbmQvcmVjZWl2ZSBtYWlsICovCisJcmVnX2RhdGEgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwlyZWdfZGF0YSB8PSBFMTAwMF9DVFJMX0VYVF9QRlJTVEQ7CisJd3IzMihFMTAwMF9DVFJMX0VYVCwgcmVnX2RhdGEpOworCisJaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKGh3LCB0cnVlKTsKKwlpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYoaHcsIHRydWUpOworfQorCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKK3N0YXRpYyBzc2l6ZV90IGlnYl9zaG93X251bV92ZnMoc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlnYl9zZXRfbnVtX3ZmcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXVuc2lnbmVkIGludCBudW1fdmZzLCBpOworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOworCWludCBlcnI7CisKKwlzc2NhbmYoYnVmLCAiJXUiLCAmbnVtX3Zmcyk7CisKKwlpZiAobnVtX3ZmcyA+IDcpCisJCW51bV92ZnMgPSA3OworCisJLyogdmFsdWUgdW5jaGFuZ2VkIGRvIG5vdGhpbmcgKi8KKwlpZiAobnVtX3ZmcyA9PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQlyZXR1cm4gY291bnQ7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJaWdiX2Nsb3NlKG5ldGRldik7CisKKwlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOworCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOworCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOworCWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPSAwOworCisJLyogcmVjbGFpbSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIFZGcyBzaW5jZSB3ZSBhcmUgY2hhbmdpbmcgY291bnQgKi8KKwlpZiAoYWRhcHRlci0+dmZfZGF0YSkgeworCQkvKiBkaXNhYmxlIGlvdiBhbmQgYWxsb3cgdGltZSBmb3IgdHJhbnNhY3Rpb25zIHRvIGNsZWFyICovCisJCXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOworCQltc2xlZXAoNTAwKTsKKworCQlrZnJlZShhZGFwdGVyLT52Zl9kYXRhKTsKKwkJYWRhcHRlci0+dmZfZGF0YSA9IE5VTEw7CisJCXdyMzIoRTEwMDBfSU9WQ1RMLCBFMTAwMF9JT1ZDVExfUkVVU0VfVkZRKTsKKwkJbXNsZWVwKDEwMCk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJT1YgRGlzYWJsZWRcbiIpOworCX0KKworCWlmIChudW1fdmZzKSB7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBrY2FsbG9jKG51bV92ZnMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghYWRhcHRlci0+dmZfZGF0YSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIFZGIHByaXZhdGUgIgorCQkJCSJkYXRhIC0gSU9WIGVuYWJsZSBmYWlsZWRcbiIpOworCQl9IGVsc2UgeworCQkJZXJyID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTsKKwkJCWlmICghZXJyKSB7CisJCQkJYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCA9IG51bV92ZnM7CisJCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVkIHZmcyBhbGxvY2F0ZWRcbiIsIG51bV92ZnMpOworCQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OyBpKyspIHsKKwkJCQkJcmFuZG9tX2V0aGVyX2FkZHIobWFjX2FkZHIpOworCQkJCQlpZ2Jfc2V0X3ZmX21hYyhhZGFwdGVyLCBpLCBtYWNfYWRkcik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlrZnJlZShhZGFwdGVyLT52Zl9kYXRhKTsKKwkJCQlhZGFwdGVyLT52Zl9kYXRhID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCWlnYl9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWdiX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKTsKKwlpZ2JfcmVzZXQoYWRhcHRlcik7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJaWdiX29wZW4obmV0ZGV2KTsKKworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLwogLyogaWdiX21haW4uYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCmluZGV4IDE3Nzc5ZjkuLmFkMTc5NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKQEAgLTI1OSw2ICsyNTksMjAgQEAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fZnVuY19fKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhbGlfaXJjY19zaXJfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGFsaV9pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGFsaV9pcmNjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhbGlfaXJjY19zaXJfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGFsaV9pcmNjX25ldF9pb2N0bCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWxpX2lyY2NfZmlyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBhbGlfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBhbGlfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYWxpX2lyY2NfZmlyX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBhbGlfaXJjY19uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gYWxpX2lyY2Nfb3BlbiAoaW50IGksIGNoaXBpb190ICppbmYpCiAgKgpAQCAtMzYxLDEwICszNzUsNyBAQAogCXNlbGYtPnR4X2ZpZm8udGFpbCA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdDsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IGFsaV9pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gYWxpX2lyY2NfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gYWxpX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19zaXJfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpAQCAtOTc0LDcgKzk4NSw3IEBACiAJCWFsaV9pcmNjX2Zpcl9jaGFuZ2Vfc3BlZWQoc2VsZiwgYmF1ZCk7CQkJCiAJCQogCQkvKiBJbnN0YWxsIEZJUiB4bWl0IGhhbmRsZXIqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQ7CQkKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmFsaV9pcmNjX2Zpcl9vcHM7CiAJCQkJCiAJCS8qIEVuYWJsZSBJbnRlcnV1cHQgKi8KIAkJc2VsZi0+aWVyID0gSUVSX0VPTTsgLy8gYmVuamFtaW4gMjAwMC8xMS8yMCAwNzoyNFBNCQkJCQkKQEAgLTk4OCw3ICs5OTksNyBAQAogCQlhbGlfaXJjY19zaXJfY2hhbmdlX3NwZWVkKHNlbGYsIGJhdWQpOwogCQkJCQogCQkvKiBJbnN0YWxsIFNJUiB4bWl0IGhhbmRsZXIqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX3Npcl9oYXJkX3htaXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19zaXJfb3BzOwogCX0KIAkKIAkJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKaW5kZXggM2EyMmRjNC4uMDA2YmEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwpAQCAtMTQwMSw2ICsxNDAxLDE0IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXJkYV91c2JfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBpcmRhX3VzYl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBpcmRhX3VzYl9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgID0gaXJkYV91c2JfbmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdCA9IGlyZGFfdXNiX2hhcmRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJPSBpcmRhX3VzYl9uZXRfdGltZW91dCwKK307CisKIC8qCiAgKiBJbml0aWFsaXNlIHRoZSBuZXR3b3JrIHNpZGUgb2YgdGhlIGlyZGEtdXNiIGluc3RhbmNlCiAgKiBDYWxsZWQgd2hlbiBhIG5ldyBVU0IgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCBpbiBpcmRhX3VzYl9wcm9iZSgpCkBAIC0xNDExLDE1ICsxNDE5LDkgQEAKIAogCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWlyZGFfdXNiX2luaXRfcW9zKHNlbGYpOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZpcmRhX3VzYl9uZXRkZXZfb3BzOwogCi0JLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpcmRhX3VzYl9oYXJkX3htaXQ7Ci0JbmV0ZGV2LT50eF90aW1lb3V0CT0gaXJkYV91c2JfbmV0X3RpbWVvdXQ7Ci0JbmV0ZGV2LT53YXRjaGRvZ190aW1lbyAgPSAyNTAqSFovMTAwMDsJLyogMjUwIG1zID4gVVNCIHRpbWVvdXQgKi8KLQluZXRkZXYtPm9wZW4gICAgICAgICAgICA9IGlyZGFfdXNiX25ldF9vcGVuOwotCW5ldGRldi0+c3RvcCAgICAgICAgICAgID0gaXJkYV91c2JfbmV0X2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgICAgICAgID0gaXJkYV91c2JfbmV0X2lvY3RsOworCWlyZGFfdXNiX2luaXRfcW9zKHNlbGYpOwogCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IGI0YTYxNzEuLjlkODEzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTQxOCw2ICs0MTgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtpbmdzdW5fb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGtpbmdzdW5faGFyZF94bWl0LAorCS5uZG9fb3BlbiAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICA9IGtpbmdzdW5fbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgICAgICAgID0ga2luZ3N1bl9uZXRfaW9jdGwsCit9OwogCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCkBAIC01MjAsMTAgKzUyNiw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga2luZ3N1bl9oYXJkX3htaXQ7Ci0JbmV0LT5vcGVuICAgICAgICAgICAgPSBraW5nc3VuX25ldF9vcGVuOwotCW5ldC0+c3RvcCAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCAgICAgICAgPSBraW5nc3VuX25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma2luZ3N1bl9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwppbmRleCA1NTMyMmZiLi5iNmZmZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKQEAgLTY2OCw2ICs2NjgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtzOTU5X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJPSBrczk1OV9oYXJkX3htaXQsCisJLm5kb19vcGVuCT0ga3M5NTlfbmV0X29wZW4sCisJLm5kb19zdG9wCT0ga3M5NTlfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJPSBrczk1OV9uZXRfaW9jdGwsCit9OwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQogICogaW4gdGhlIHN5c3RlbS4gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIG91cnMsIGFuZCBpbgpAQCAtNzgwLDEwICs3ODYsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJmtpbmdzdW4tPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGtzOTU5X2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gPSBrczk1OV9uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBrczk1OV9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCA9IGtzOTU5X25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma3M5NTlfb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggNWIzMjdiMC4uNjRkZjI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC01NjIsNiArNTYyLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBrc2RhenpsZV9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CT0ga3NkYXp6bGVfaGFyZF94bWl0LAorCS5uZG9fb3Blbgk9IGtzZGF6emxlX25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGtzZGF6emxlX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0ga3NkYXp6bGVfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQogICogaW4gdGhlIHN5c3RlbS4gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIG91cnMsIGFuZCBpbgpAQCAtNjg0LDEwICs2OTEsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJmtpbmdzdW4tPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGtzZGF6emxlX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gPSBrc2RhenpsZV9uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBrc2RhenpsZV9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCA9IGtzZGF6emxlX25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma3NkYXp6bGVfb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwppbmRleCA4NWU4OGRhLi5mYWM1MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwpAQCAtODczLDYgKzg3MywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWNzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gbWNzX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IG1jc19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbWNzX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsID0gbWNzX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlIGluIHRoZQogICogc3lzdGVtLiAgTmVlZCB0byB2ZXJpZnkgdGhlIGRldmljZSBhbmQgaWYgaXQgaXMsIHRoZW4gc3RhcnQgaGFuZGxpbmcgaXQuCkBAIC05MTksMTEgKzkyNiw3IEBACiAJLyogU3BlZWQgY2hhbmdlIHdvcmsgaW5pdGlhbGlzYXRpb24qLwogCUlOSVRfV09SSygmbWNzLT53b3JrLCBtY3Nfc3BlZWRfd29yayk7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtY3NfaGFyZF94bWl0OwotCW5kZXYtPm9wZW4gPSBtY3NfbmV0X29wZW47Ci0JbmRldi0+c3RvcCA9IG1jc19uZXRfY2xvc2U7Ci0JbmRldi0+ZG9faW9jdGwgPSBtY3NfbmV0X2lvY3RsOworCW5kZXYtPm5ldGRldl9vcHMgPSAmbWNzX25ldGRldl9vcHM7CiAKIAlpZiAoIWludGYtPmN1cl9hbHRzZXR0aW5nKQogCQlnb3RvIGVycm9yMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwppbmRleCA2MWU1MDljLi40NWZkOWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCkBAIC0zMzEsNiArMzMxLDIwIEBACiAJcG5wX3JlZ2lzdGVyZWQgPSAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zY19pcmNjX3Npcl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gbnNjX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXIsCisJLm5kb19kb19pb2N0bCAgID0gbnNjX2lyY2NfbmV0X2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2NfaXJjY19maXJfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IG5zY19pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG5zY19pcmNjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfZmlyLAorCS5uZG9fZG9faW9jdGwgICA9IG5zY19pcmNjX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBGdW5jdGlvbiBuc2NfaXJjY19vcGVuIChpb2Jhc2UsIGlycSkKICAqCkBAIC00NDEsMTAgKzQ1NSw3IEBACiAJc2VsZi0+dHhfZmlmby50YWlsID0gc2VsZi0+dHhfYnVmZi5oZWFkOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfc2lyOwotCWRldi0+b3BlbiAgICAgICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSBuc2NfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBuc2NfaXJjY19uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5zY19pcmNjX3Npcl9vcHM7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0xMzIwLDEyICsxMzMxLDEyIEBACiAJc3dpdGNoX2JhbmsoaW9iYXNlLCBCQU5LMCk7IAogCWlmIChzcGVlZCA+IDExNTIwMCkgewogCQkvKiBJbnN0YWxsIEZJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfZmlyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbnNjX2lyY2NfZmlyX29wczsKIAkJaWVyID0gSUVSX1NGSUZfSUU7CiAJCW5zY19pcmNjX2RtYV9yZWNlaXZlKHNlbGYpOwogCX0gZWxzZSB7CiAJCS8qIEluc3RhbGwgU0lSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZuc2NfaXJjY19zaXJfb3BzOwogCQlpZXIgPSBJRVJfUlhIRExfSUU7CiAJfQogCS8qIFNldCBvdXIgY3VycmVudCBpbnRlcnJ1cHQgbWFzayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwppbmRleCA1YjU4NjI0Li5kOTQwODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwpAQCAtNzUzLDcgKzc1Myw4IEBACiAJZGV2LT5yeF9idWZmLnRydWVzaXplID0gSVJEQV9TS0JfTUFYX01UVTsgCiAKIAkvKiBCb290c3RyYXAgWmVyb0NvcHkgUnggKi8KLQlkZXYtPnJ4X2J1ZmYuc2tiID0gX19kZXZfYWxsb2Nfc2tiKGRldi0+cnhfYnVmZi50cnVlc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5yeF9idWZmLnNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYtPm5ldGRldiwgZGV2LT5yeF9idWZmLnRydWVzaXplLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2LT5yeF9idWZmLnNrYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlza2JfcmVzZXJ2ZShkZXYtPnJ4X2J1ZmYuc2tiLCAxKTsKQEAgLTc3OSw4ICs3ODAsNyBAQAogCiBzdGF0aWMgdm9pZCBzaXJkZXZfZnJlZV9idWZmZXJzKHN0cnVjdCBzaXJfZGV2ICpkZXYpCiB7Ci0JaWYgKGRldi0+cnhfYnVmZi5za2IpCi0JCWtmcmVlX3NrYihkZXYtPnJ4X2J1ZmYuc2tiKTsKKwlrZnJlZV9za2IoZGV2LT5yeF9idWZmLnNrYik7CiAJa2ZyZWUoZGV2LT50eF9idWZmLmhlYWQpOwogCWRldi0+cnhfYnVmZi5oZWFkID0gZGV2LT50eF9idWZmLmhlYWQgPSBOVUxMOwogCWRldi0+cnhfYnVmZi5za2IgPSBOVUxMOwpAQCAtODY1LDYgKzg2NSwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNpcmRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CT0gc2lyZGV2X2hhcmRfeG1pdCwKKwkubmRvX29wZW4JPSBzaXJkZXZfb3BlbiwKKwkubmRvX3N0b3AJPSBzaXJkZXZfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IHNpcmRldl9pb2N0bCwKK307CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3Qgc2lyX2RldiAqIHNpcmRldl9nZXRfaW5zdGFuY2UoY29uc3Qgc3RydWN0IHNpcl9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqbmFtZSkKQEAgLTkwOCwxMCArOTE0LDcgQEAKIAlkZXYtPm5ldGRldiA9IG5kZXY7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzaXJkZXZfaGFyZF94bWl0OwotCW5kZXYtPm9wZW4gPSBzaXJkZXZfb3BlbjsKLQluZGV2LT5zdG9wID0gc2lyZGV2X2Nsb3NlOwotCW5kZXYtPmRvX2lvY3RsID0gc2lyZGV2X2lvY3RsOworCW5kZXYtPm5ldGRldl9vcHMgPSAmc2lyZGV2X29wczsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYobmRldikpIHsKIAkJSVJEQV9FUlJPUigiJXMoKSwgcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkIVxuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCBkZDczY2NlLi41OWQ3OTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtNDg2LDYgKzQ4NiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc21zY19pcmNjX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoc2VsZi0+aW8uc3BlZWQgPiAxMTUyMDApCisJCXJldHVybiAJc21zY19pcmNjX2hhcmRfeG1pdF9maXIoc2tiLCBkZXYpOworCWVsc2UKKwkJcmV0dXJuIAlzbXNjX2lyY2NfaGFyZF94bWl0X3Npcihza2IsIGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21zY19pcmNjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gc21zY19pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHNtc2NfaXJjY19uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgID0gc21zY19pcmNjX25ldF9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQgPSBzbXNjX2lyY2NfbmV0X3htaXQsCisjaWYgU01TQ19JUkNDMl9DX05FVF9USU1FT1VUCisJLm5kb190eF90aW1lb3V0CT0gc21zY19pcmNjX3RpbWVvdXQsCisjZW5kaWYKK307CisKIC8qCiAgKiBGdW5jdGlvbiBzbXNjX2lyY2Nfb3BlbiAoZmlyYmFzZSwgc2lyYmFzZSwgZG1hLCBpcnEpCiAgKgpAQCAtNTE5LDE0ICs1MzksMTAgQEAKIAkJZ290byBlcnJfb3V0MTsKIAl9CiAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19oYXJkX3htaXRfc2lyOwogI2lmIFNNU0NfSVJDQzJfQ19ORVRfVElNRU9VVAotCWRldi0+dHhfdGltZW91dAkgICAgID0gc21zY19pcmNjX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyAgPSBIWiAqIDI7ICAvKiBBbGxvdyBlbm91Z2ggdGltZSBmb3Igc3BlZWQgY2hhbmdlICovCiAjZW5kaWYKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IHNtc2NfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IHNtc2NfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBzbXNjX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzbXNjX2lyY2NfbmV0ZGV2X29wczsKIAogCXNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXNlbGYtPm5ldGRldiA9IGRldjsKQEAgLTk5NSw5ICsxMDExLDYgQEAKIAogCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgKi8KIAotCS8qIEluc3RhbGwgRklSIHRyYW5zbWl0IGhhbmRsZXIgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19oYXJkX3htaXRfZmlyOwotCiAJLyogQ2xlYXIgRklGTyAqLwogCW91dGIoaW5iKGZpcl9iYXNlICsgSVJDQ19MQ1JfQSkgfCBJUkNDX0xDUl9BX0ZJRk9fUkVTRVQsIGZpcl9iYXNlICsgSVJDQ19MQ1JfQSk7CiAKQEAgLTE4OTQsNyArMTkwNyw2IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlkZXYgPSBzZWxmLT5uZXRkZXY7CiAJSVJEQV9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybjspOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnNtc2NfaXJjY19oYXJkX3htaXRfc2lyOwogCiAJZmlyX2Jhc2UgPSBzZWxmLT5pby5maXJfYmFzZTsKIAlzaXJfYmFzZSA9IHNlbGYtPmlvLnNpcl9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDhiMTY1OGMuLjhlNWU0NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTEwMDcsNiArMTAwNywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3Rpcl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHN0aXJfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc3Rpcl9uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gc3Rpcl9oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gc3Rpcl9uZXRfaW9jdGwsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCiAgKiBpbiB0aGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb3VycywgYW5kIGluCkBAIC0xMDU0LDEwICsxMDYxLDcgQEAKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZzdGlyLT5xb3MpOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGlyX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gICAgICAgICAgICA9IHN0aXJfbmV0X29wZW47Ci0JbmV0LT5zdG9wICAgICAgICAgICAgPSBzdGlyX25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsICAgICAgICA9IHN0aXJfbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZzdGlyX25ldGRldl9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKaW5kZXggOGIzZTU0NS4uODY0Nzk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwpAQCAtMzEwLDYgKzMxMCwxOSBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJnZpYV9kcml2ZXIpOyAKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2aWFfaXJjY19zaXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXIsCisJLm5kb19vcGVuID0gdmlhX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gdmlhX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgPSB2aWFfaXJjY19uZXRfaW9jdGwsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2aWFfaXJjY19maXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9maXIsCisJLm5kb19vcGVuID0gdmlhX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gdmlhX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgPSB2aWFfaXJjY19uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gdmlhX2lyY2Nfb3BlbiAoaW9iYXNlLCBpcnEpCiAgKgpAQCAtNDI4LDEwICs0NDEsNyBAQAogCXNlbGYtPnR4X2ZpZm8udGFpbCA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X3NpcjsKLQlkZXYtPm9wZW4gPSB2aWFfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB2aWFfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHZpYV9pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdmlhX2lyY2Nfc2lyX29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpCkBAIC03OTgsMTEgKzgwOCwxMSBAQAogCiAJaWYgKHNwZWVkID4gMTE1MjAwKSB7CiAJCS8qIEluc3RhbGwgRklSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9maXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZ2aWFfaXJjY19maXJfb3BzOwogCQl2aWFfaXJjY19kbWFfcmVjZWl2ZShzZWxmKTsKIAl9IGVsc2UgewogCQkvKiBJbnN0YWxsIFNJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfc2lyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmdmlhX2lyY2Nfc2lyX29wczsKIAl9CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCA3MjNjNDU4Li4xMjQzYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtMTU3Myw2ICsxNTczLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxzaV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHZsc2lfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSB2bHNpX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHZsc2lfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHZsc2lfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gdmxzaV90eF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCB2bHNpX2lyZGFfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAl2bHNpX2lyZGFfZGV2X3QgKmlkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTE2MDgsMTEgKzE2MTYsNyBAQAogCW5kZXYtPmZsYWdzIHw9IElGRl9QT1JUU0VMIHwgSUZGX0FVVE9NRURJQTsKIAluZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOwogIAotCW5kZXYtPm9wZW4JICAgICAgPSB2bHNpX29wZW47Ci0JbmRldi0+c3RvcAkgICAgICA9IHZsc2lfY2xvc2U7Ci0JbmRldi0+aGFyZF9zdGFydF94bWl0ID0gdmxzaV9oYXJkX3N0YXJ0X3htaXQ7Ci0JbmRldi0+ZG9faW9jdGwJICAgICAgPSB2bHNpX2lvY3RsOwotCW5kZXYtPnR4X3RpbWVvdXQgICAgICA9IHZsc2lfdHhfdGltZW91dDsKKwluZGV2LT5uZXRkZXZfb3BzID0gJnZsc2lfbmV0ZGV2X29wczsKIAluZGV2LT53YXRjaGRvZ190aW1lbyAgPSA1MDAqSFovMTAwMDsJLyogbWF4LiBhbGxvd2VkIHR1cm4gdGltZSBmb3IgSXJMQVAgKi8KIAogCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCmluZGV4IGRjMGEyZTQuLmQwODgzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKQEAgLTE0MCw2ICsxNDAsMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdzgzOTc3X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gdzgzOTc3YWZfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gdzgzOTc3YWZfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHc4Mzk3N2FmX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSB3ODM5NzdhZl9uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gdzgzOTc3YWZfb3BlbiAoaW9iYXNlLCBpcnEpCiAgKgpAQCAtMjMxLDExICsyMzgsNyBAQAogCXNlbGYtPnJ4X2J1ZmYuZGF0YSA9IHNlbGYtPnJ4X2J1ZmYuaGVhZDsKIAlzZWxmLT5uZXRkZXYgPSBkZXY7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHc4Mzk3N2FmX2hhcmRfeG1pdDsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IHc4Mzk3N2FmX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gdzgzOTc3YWZfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gdzgzOTc3YWZfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcwk9ICZ3ODM5NzdfbmV0ZGV2X29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCmluZGV4IGVlZTI4ZDMuLjRiMGVhNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtODg3LDE5ICs4ODcsMTMgQEAKIGl4Z2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkKLQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwgYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkvKiBva2F5IHRvIGNhbGwga2ZyZWVfc2tiIGhlcmUgaW5zdGVhZCBvZiBrZnJlZV9za2JfYW55IGJlY2F1c2UKLQkgKiB0aGlzIGlzIG5ldmVyIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLwotCWlmIChidWZmZXJfaW5mby0+c2tiKQotCQlkZXZfa2ZyZWVfc2tiKGJ1ZmZlcl9pbmZvLT5za2IpOwotCi0JYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJc2tiX2RtYV91bm1hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBidWZmZXJfaW5mby0+c2tiLAorCQkgICAgICAgICAgICAgIERNQV9UT19ERVZJQ0UpOworCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJfQogCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKIAkvKiB0aGVzZSBmaWVsZHMgbXVzdCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgaW4gdHgKIAkgKiBidWZmZXJfaW5mby0+bGVuZ3RoID0gMDsKQEAgLTEyNzUsMTcgKzEyNjksMjMgQEAKIHsKIAlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCWludCBsZW4gPSBza2ItPmxlbjsKKwlpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBtc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwogCiAJdW5zaWduZWQgaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgZjsKLQotCWxlbiAtPSBza2ItPmRhdGFfbGVuOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBJWEdCX01BWF9EQVRBX1BFUl9UWEQpOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCVdBUk5fT04oYnVmZmVyX2luZm8tPmRtYSAhPSAwKTsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKIAkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCiAJCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAogCQkJCXNpemUsCkBAIC0xMzA3LDcgKzEzMDcsMTEgQEAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwogCQljb3VudCsrOwotCQlpZiAoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMTMxOCw2ICsxMzIyLDEwIEBACiAJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIElYR0JfTUFYX0RBVEFfUEVSX1RYRCk7CiAKQEAgLTEzMjksMjEgKzEzMzcsMTQgQEAKIAogCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCQlwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJZnJhZy0+cGFnZSwKLQkJCQkJZnJhZy0+cGFnZV9vZmZzZXQgKyBvZmZzZXQsCi0JCQkJCXNpemUsCi0JCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAJCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IDA7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCQkJaWYgKCsraSA9PSB0eF9yaW5nLT5jb3VudCkgaSA9IDA7CiAJCX0KIAl9Ci0JaSA9IChpID09IDApID8gdHhfcmluZy0+Y291bnQgLSAxIDogaSAtIDE7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIApAQCAtMTQ0NSw2ICsxNDQ2LDcgQEAKIAl1bnNpZ25lZCBpbnQgZmlyc3Q7CiAJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKIAlpbnQgdmxhbl9pZCA9IDA7CisJaW50IGNvdW50ID0gMDsKIAlpbnQgdHNvOwogCiAJaWYgKHRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKSB7CkBAIC0xNDc5LDEzICsxNDgxLDE5IEBACiAJZWxzZSBpZiAoaXhnYl90eF9jc3VtKGFkYXB0ZXIsIHNrYikpCiAJCXR4X2ZsYWdzIHw9IElYR0JfVFhfRkxBR1NfQ1NVTTsKIAotCWl4Z2JfdHhfcXVldWUoYWRhcHRlciwgaXhnYl90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCksIHZsYW5faWQsCi0JCQl0eF9mbGFncyk7CisJY291bnQgPSBpeGdiX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0KTsKIAotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWlmIChjb3VudCkgeworCQlpeGdiX3R4X3F1ZXVlKGFkYXB0ZXIsIGNvdW50LCB2bGFuX2lkLCB0eF9mbGFncyk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWl4Z2JfbWF5YmVfc3RvcF90eChuZXRkZXYsICZhZGFwdGVyLT50eF9yaW5nLCBERVNDX05FRURFRCk7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsIERFU0NfTkVFREVEKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlhZGFwdGVyLT50eF9yaW5nLmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJYWRhcHRlci0+dHhfcmluZy5uZXh0X3RvX3VzZSA9IGZpcnN0OworCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xNzIxLDE0ICsxNzI5LDE0IEBACiAJCWlmICghdGVzdF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncykpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CiAKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWdpc3RlciBmb3IgcG9sbC4gVGhlIGZsdXNoCiAJCSAgb2YgdGhlIHBvc3RlZCB3cml0ZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgb3V0LgogCQkqLwogCiAJCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1DLCB+MCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xNzQ5LDcgKzE3NTcsNyBAQAogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKIAkJCWl4Z2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CkBAIC0xODE4LDcgKzE4MjYsNyBAQAogCQkvKiBkZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgJiYKIAkJICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgKyBIWikKIAkJICAgJiYgIShJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmCiAJCSAgICAgICAgSVhHQl9TVEFUVVNfVFhPRkYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCmluZGV4IDZlN2VmNzYuLmIzZjgyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKICMgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMyw2ICszMyw3IEBACiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLm8KIAogaXhnYmUtb2JqcyA6PSBpeGdiZV9tYWluLm8gaXhnYmVfY29tbW9uLm8gaXhnYmVfZXRodG9vbC5vIFwKLSAgICAgICAgICAgICAgaXhnYmVfODI1OTgubyBpeGdiZV9waHkubworICAgICAgICAgICAgICBpeGdiZV84MjU5OS5vIGl4Z2JlXzgyNTk4Lm8gaXhnYmVfcGh5Lm8KIAotaXhnYmUtJChDT05GSUdfSVhHQkVfRENCKSArPSAgaXhnYmVfZGNiLm8gaXhnYmVfZGNiXzgyNTk4Lm8gaXhnYmVfZGNiX25sLm8KK2l4Z2JlLSQoQ09ORklHX0lYR0JFX0RDQikgKz0gIGl4Z2JlX2RjYi5vIGl4Z2JlX2RjYl84MjU5OC5vIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2RjYl84MjU5OS5vIGl4Z2JlX2RjYl9ubC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAppbmRleCBlMTEyMDA4Li5jMjY0MzNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KICNpbmNsdWRlIDxsaW51eC9hZXIuaD4KIAogI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKQEAgLTcyLDYgKzcxLDcgQEAKICNkZWZpbmUgSVhHQkVfUlhCVUZGRVJfMTI4ICAgMTI4ICAgIC8qIFVzZWQgZm9yIHBhY2tldCBzcGxpdCAqLwogI2RlZmluZSBJWEdCRV9SWEJVRkZFUl8yNTYgICAyNTYgICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCiAjZGVmaW5lIElYR0JFX1JYQlVGRkVSXzIwNDggIDIwNDgKKyNkZWZpbmUgSVhHQkVfTUFYX1JYQlVGRkVSICAgMTYzODQgIC8qIGxhcmdlc3Qgc2l6ZSBmb3IgYSBzaW5nbGUgZGVzY3JpcHRvciAqLwogCiAjZGVmaW5lIElYR0JFX1JYX0hEUl9TSVpFIElYR0JFX1JYQlVGRkVSXzI1NgogCkBAIC04OCw5ICs4OCw2IEBACiAjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU5fUFJJT19NQVNLICAgMHgwMDAwZTAwMAogI2RlZmluZSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUCTE2CiAKLSNkZWZpbmUgSVhHQkVfTUFYX0xST19ERVNDUklQVE9SUyAgICAgICA4Ci0jZGVmaW5lIElYR0JFX01BWF9MUk9fQUdHUkVHQVRFICAgICAgICAgMzIKLQogLyogd3JhcHBlciBhcm91bmQgYSBwb2ludGVyIHRvIGEgc29ja2V0IGJ1ZmZlciwKICAqIHNvIGEgRE1BIGhhbmRsZSBjYW4gYmUgc3RvcmVkIGFsb25nIHdpdGggdGhlIGJ1ZmZlciAqLwogc3RydWN0IGl4Z2JlX3R4X2J1ZmZlciB7CkBAIC0xNDIsMjEgKzEzOSwyNSBAQAogCS8qIGNwdSBmb3IgdHggcXVldWUgKi8KIAlpbnQgY3B1OwogI2VuZGlmCi0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7Ci0JYm9vbCBscm9fdXNlZDsKIAlzdHJ1Y3QgaXhnYmVfcXVldWVfc3RhdHMgc3RhdHM7Ci0JdTE2IHZfaWR4OyAvKiBtYXBzIGRpcmVjdGx5IHRvIHRoZSBpbmRleCBmb3IgdGhpcyByaW5nIGluIHRoZSBoYXJkd2FyZQotCSAgICAgICAgICAgKiB2ZWN0b3IgYXJyYXksIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGJpdCBpbiBFSUNSCi0JICAgICAgICAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KKwl1NjQgdl9pZHg7IC8qIG1hcHMgZGlyZWN0bHkgdG8gdGhlIGluZGV4IGZvciB0aGlzIHJpbmcgaW4gdGhlIGhhcmR3YXJlCisJICAgICAgICAgICAgKiB2ZWN0b3IgYXJyYXksIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGJpdCBpbiBFSUNSCisJICAgICAgICAgICAgKiBhbmQgZnJpZW5kcyB0aGF0IHJlcHJlc2VudHMgdGhlIHZlY3RvciBmb3IgdGhpcyByaW5nICovCiAKIAogCXUxNiB3b3JrX2xpbWl0OyAgICAgICAgICAgICAgICAvKiBtYXggd29yayBwZXIgaW50ZXJydXB0ICovCiAJdTE2IHJ4X2J1Zl9sZW47CiB9OwogCi0jZGVmaW5lIFJJTkdfRl9EQ0IgIDAKLSNkZWZpbmUgUklOR19GX1ZNRFEgMQotI2RlZmluZSBSSU5HX0ZfUlNTICAyCitlbnVtIGl4Z2JlX3JpbmdfZl9lbnVtIHsKKwlSSU5HX0ZfTk9ORSA9IDAsCisJUklOR19GX0RDQiwKKwlSSU5HX0ZfVk1EUSwKKwlSSU5HX0ZfUlNTLAorCisJUklOR19GX0FSUkFZX1NJWkUgICAgICAvKiBtdXN0IGJlIGxhc3QgaW4gZW51bSBzZXQgKi8KK307CisKICNkZWZpbmUgSVhHQkVfTUFYX0RDQl9JTkRJQ0VTICAgOAogI2RlZmluZSBJWEdCRV9NQVhfUlNTX0lORElDRVMgIDE2CiAjZGVmaW5lIElYR0JFX01BWF9WTURRX0lORElDRVMgMTYKQEAgLTE2NSw4ICsxNjYsOCBAQAogCWludCBtYXNrOwogfTsKIAotI2RlZmluZSBNQVhfUlhfUVVFVUVTIDY0Ci0jZGVmaW5lIE1BWF9UWF9RVUVVRVMgMzIKKyNkZWZpbmUgTUFYX1JYX1FVRVVFUyAxMjgKKyNkZWZpbmUgTUFYX1RYX1FVRVVFUyAxMjgKIAogI2RlZmluZSBNQVhfUlhfUEFDS0VUX0JVRkZFUlMgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gOCA6IDEpCkBAIC0xODgsMTAgKzE4OSwxMSBAQAogfTsKIAogLyogSGVscGVyIG1hY3JvcyB0byBzd2l0Y2ggYmV0d2VlbiBpbnRzL3NlYyBhbmQgd2hhdCB0aGUgcmVnaXN0ZXIgdXNlcy4KLSAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuCisgKiBBbmQgeWVzLCBpdCdzIHRoZSBzYW1lIG1hdGggZ29pbmcgYm90aCB3YXlzLiAgVGhlIGxvd2VzdCB2YWx1ZQorICogc3VwcG9ydGVkIGJ5IGFsbCBvZiB0aGUgaXhnYmUgaGFyZHdhcmUgaXMgOC4KICAqLwogI2RlZmluZSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoX2VpdHIpIFwKLQkoKF9laXRyKSA/ICgxMDAwMDAwMDAwIC8gKChfZWl0cikgKiAyNTYpKSA6IDApCisJKChfZWl0cikgPyAoMTAwMDAwMDAwMCAvICgoX2VpdHIpICogMjU2KSkgOiA4KQogI2RlZmluZSBFSVRSX1JFR19UT19JTlRTX1BFUl9TRUMgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHCiAKICNkZWZpbmUgSVhHQkVfREVTQ19VTlVTRUQoUikgXApAQCAtMjEwLDkgKzIxMiwxNSBAQAogI2RlZmluZSBPVEhFUl9WRUNUT1IgMQogI2RlZmluZSBOT05fUV9WRUNUT1JTIChPVEhFUl9WRUNUT1IpCiAKLSNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTIDE2CisjZGVmaW5lIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTkgNjQKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk5IDY0CisjZGVmaW5lIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTggMTgKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk4IDE2CisKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTIE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OQorI2RlZmluZSBNQVhfTVNJWF9DT1VOVCBNQVhfTVNJWF9WRUNUT1JTXzgyNTk5CisKICNkZWZpbmUgTUlOX01TSVhfUV9WRUNUT1JTIDIKLSNkZWZpbmUgTUFYX01TSVhfQ09VTlQgKE1BWF9NU0lYX1FfVkVDVE9SUyArIE5PTl9RX1ZFQ1RPUlMpCiAjZGVmaW5lIE1JTl9NU0lYX0NPVU5UIChNSU5fTVNJWF9RX1ZFQ1RPUlMgKyBOT05fUV9WRUNUT1JTKQogCiAvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCkBAIC0yMjIsNyArMjMwLDcgQEAKIAl1MTYgYmRfbnVtYmVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciBxX3ZlY3RvcltNQVhfTVNJWF9RX1ZFQ1RPUlNdOwotCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA1XTsKKwljaGFyIG5hbWVbTUFYX01TSVhfQ09VTlRdW0lGTkFNU0laICsgOV07CiAJc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgZGNiX2NmZzsKIAlzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyB0ZW1wX2RjYl9jZmc7CiAJdTggZGNiX3NldF9iaXRtYXA7CkBAIC0yNDcsMTAgKzI1NSwxMiBAQAogCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nOwkvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLwogCWludCBudW1fcnhfcXVldWVzOwogCXU2NCBod19jc3VtX3J4X2Vycm9yOworCXU2NCBod19yeF9ub19kbWFfcmVzb3VyY2VzOwogCXU2NCBod19jc3VtX3J4X2dvb2Q7CiAJdTY0IG5vbl9lb3BfZGVzY3M7CiAJaW50IG51bV9tc2l4X3ZlY3RvcnM7Ci0Jc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbM107CisJaW50IG1heF9tc2l4X3FfdmVjdG9yczsgICAgICAgICAvKiB0cnVlIGNvdW50IG9mIHFfdmVjdG9ycyBmb3IgZGV2aWNlICovCisJc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbUklOR19GX0FSUkFZX1NJWkVdOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAKIAl1NjQgcnhfaGRyX3NwbGl0OwpAQCAtMjc0LDYgKzI4NCw3IEBACiAjZGVmaW5lIElYR0JFX0ZMQUdfRENBX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDExKQogI2RlZmluZSBJWEdCRV9GTEFHX0lNSVJfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMikKICNkZWZpbmUgSVhHQkVfRkxBR19NUV9DQVBBQkxFICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTMpCisjZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE0KQogI2RlZmluZSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNikKICNkZWZpbmUgSVhHQkVfRkxBR19SU1NfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTcpCiAjZGVmaW5lIElYR0JFX0ZMQUdfVk1EUV9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE4KQpAQCAtMjgxLDcgKzI5Miw4IEBACiAjZGVmaW5lIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSAgICAgICAgICAgICAodTMyKSgxIDw8IDIwKQogI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUgICAgICAgICAgICAgKHUzMikoMSA8PCAyMikKICNkZWZpbmUgSVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgMjMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0sgICAgICAgICAgICAgKHUzMikoMSA8PCAyNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0sgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjUpCiAKIC8qIGRlZmF1bHQgdG8gdHJ5aW5nIGZvciBmb3VyIHNlY29uZHMgKi8KICNkZWZpbmUgSVhHQkVfVFJZX0xJTktfVElNRU9VVCAoNCAqIEhaKQpAQCAtMzAxLDkgKzMxMyw2IEBACiAKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogCXU2NCB0eF9idXN5OwotCXU2NCBscm9fYWdncmVnYXRlZDsKLQl1NjQgbHJvX2ZsdXNoZWQ7Ci0JdTY0IGxyb19ub19kZXNjOwogCXVuc2lnbmVkIGludCB0eF9yaW5nX2NvdW50OwogCXVuc2lnbmVkIGludCByeF9yaW5nX2NvdW50OwogCkBAIC0zMTQsNiArMzIzLDEwIEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNmcF90YXNrOwogCXN0cnVjdCB0aW1lcl9saXN0IHNmcF90aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbXVsdGlzcGVlZF9maWJlcl90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZnBfY29uZmlnX21vZHVsZV90YXNrOworCXUzMiB3b2w7CisJdTE2IGVlcHJvbV92ZXJzaW9uOwogfTsKIAogZW51bSBpeGJnZV9zdGF0ZV90IHsKQEAgLTMyNSw5ICszMzgsMTEgQEAKIAogZW51bSBpeGdiZV9ib2FyZHMgewogCWJvYXJkXzgyNTk4LAorCWJvYXJkXzgyNTk5LAogfTsKIAogZXh0ZXJuIHN0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlXzgyNTk4X2luZm87CitleHRlcm4gc3RydWN0IGl4Z2JlX2luZm8gaXhnYmVfODI1OTlfaW5mbzsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiBleHRlcm4gc3RydWN0IGRjYm5sX3J0bmxfb3BzIGRjYm5sX29wczsKIGV4dGVybiBpbnQgaXhnYmVfY29weV9kY2JfY2ZnKHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpzcmNfZGNiX2NmZywKQEAgLTM1Miw1ICszNjcsNiBAQAogZXh0ZXJuIGludCBpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpeGdiZV9uYXBpX2FkZF9hbGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpeGdiZV9uYXBpX2RlbF9hbGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgaXhnYmVfd3JpdGVfZWl0cihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqLCBpbnQsIHUzMik7CiAKICNlbmRpZiAvKiBfSVhHQkVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCmluZGV4IGFkNTY5OWQuLmVkMjY1YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTUwLDYgKzUwLDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqZWVwcm9tX2RhdGEpOwogCiAvKioKKyAqICBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk4IC0gR2V0cyBNU0ktWCB2ZWN0b3IgY291bnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlYWQgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZ2V0IHRoZSBNU0ktWCB2ZWN0b3IgY291bnQgZnJvbQorICogIHRoZSBjYXBhYmlsaXRpZXMgdGFibGUuCisgKiovCitzdGF0aWMgdTE2IGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXUxNiBtc2l4X2NvdW50OworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIElYR0JFX1BDSUVfTVNJWF84MjU5OF9DQVBTLAorCSAgICAgICAgICAgICAgICAgICAgICZtc2l4X2NvdW50KTsKKwltc2l4X2NvdW50ICY9IElYR0JFX1BDSUVfTVNJWF9UQkxfU1pfTUFTSzsKKworCS8qIE1TSS1YIGNvdW50IGlzIHplcm8tYmFzZWQgaW4gSFcsIHNvIGluY3JlbWVudCB0byBnaXZlIHByb3BlciB2YWx1ZSAqLworCW1zaXhfY291bnQrKzsKKworCXJldHVybiBtc2l4X2NvdW50OworfQorCisvKioKICAqLwogc3RhdGljIHMzMiBpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewpAQCAtNTgsNiArNzksOSBAQAogCXMzMiByZXRfdmFsID0gMDsKIAl1MTYgbGlzdF9vZmZzZXQsIGRhdGFfb2Zmc2V0OwogCisJLyogU2V0IHRoZSBidXMgaW5mb3JtYXRpb24gcHJpb3IgdG8gUEhZIGlkZW50aWZpY2F0aW9uICovCisJbWFjLT5vcHMuZ2V0X2J1c19pbmZvKGh3KTsKKwogCS8qIENhbGwgUEhZIGlkZW50aWZ5IHJvdXRpbmUgdG8gZ2V0IHRoZSBwaHkgdHlwZSAqLwogCWl4Z2JlX2lkZW50aWZ5X3BoeV9nZW5lcmljKGh3KTsKIApAQCAtMTA2LDYgKzEzMCw3IEBACiAJbWFjLT5udW1fcmFyX2VudHJpZXMgPSBJWEdCRV84MjU5OF9SQVJfRU5UUklFUzsKIAltYWMtPm1heF9yeF9xdWV1ZXMgPSBJWEdCRV84MjU5OF9NQVhfUlhfUVVFVUVTOwogCW1hYy0+bWF4X3R4X3F1ZXVlcyA9IElYR0JFXzgyNTk4X01BWF9UWF9RVUVVRVM7CisJbWFjLT5tYXhfbXNpeF92ZWN0b3JzID0gaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OChodyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTEyNCwxOCArMTQ5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKQogewogCXMzMiBzdGF0dXMgPSAwOwotCXMzMiBhdXRvY19yZWc7CiAKLQlhdXRvY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOwotCi0JaWYgKGh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQpIHsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEU7Ci0JCWF1dG9jX3JlZyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfYXR0YWNoX3R5cGU7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3Q7Ci0JfQotCi0Jc3dpdGNoIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgeworCS8qCisJICogRGV0ZXJtaW5lIGxpbmsgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBzdG9yZWQgdmFsdWUgb2YgQVVUT0MsCisJICogd2hpY2ggcmVwcmVzZW50cyBFRVBST00gZGVmYXVsdHMuCisJICovCisJc3dpdGNoIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgewogCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU46CiAJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CiAJCSphdXRvbmVnID0gZmFsc2U7CkBAIC0xNTQsOSArMTczLDkgQEAKIAljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfQU46CiAJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOOgogCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047Ci0JCWlmIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQogCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOwotCQlpZiAoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYX1NVUFApCiAJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKIAkJKmF1dG9uZWcgPSB0cnVlOwogCQlicmVhazsKQEAgLTIxMyw2ICsyMzIsMTAgQEAKIAogCS8qIE1lZGlhIHR5cGUgZm9yIEk4MjU5OCBpcyBiYXNlZCBvbiBkZXZpY2UgSUQgKi8KIAlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5ODoKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lOworCQlicmVhazsKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OEFGX0RVQUxfUE9SVDoKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4RUJfQ1g0OgpAQCAtMjM1LDYgKzI1OCwxMDIgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZmNfZW5hYmxlXzgyNTk4IC0gRW5hYmxlIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKKyAqCisgKiAgRW5hYmxlIGZsb3cgY29udHJvbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2V0dGluZ3MuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2ZjX2VuYWJsZV84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIGZjdHJsX3JlZzsKKwl1MzIgcm1jc19yZWc7CisJdTMyIHJlZzsKKworCWZjdHJsX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7CisJZmN0cmxfcmVnICY9IH4oSVhHQkVfRkNUUkxfUkZDRSB8IElYR0JFX0ZDVFJMX1JQRkNFKTsKKworCXJtY3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOworCXJtY3NfcmVnICY9IH4oSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZIHwgSVhHQkVfUk1DU19URkNFXzgwMl8zWCk7CisKKwkvKgorCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZmMuY3VycmVudF9tb2RlIGFyZToKKwkgKiAwOiBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAorCSAqIDE6IFJ4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gcmVjZWl2ZSBwYXVzZSBmcmFtZXMsCisJICogICAgYnV0IG5vdCBzZW5kIHBhdXNlIGZyYW1lcykuCisJICogMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0CisJICogICAgIHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqIDM6IEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiBvdGhlcjogSW52YWxpZC4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKKwljYXNlIGl4Z2JlX2ZjX25vbmU6CisJCS8qIEZsb3cgY29udHJvbCBjb21wbGV0ZWx5IGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiAqLworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgorCQkvKgorCQkgKiBSeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgVHggRmxvdyBjb250cm9sIGlzCisJCSAqIGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiBTaW5jZSB0aGVyZSByZWFsbHkKKwkJICogaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUlgKKwkJICogUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZSBzdXBwb3J0IGJvdGgKKwkJICogc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJ4IFBBVVNFLiAgTGF0ZXIsIHdlIHdpbGwKKwkJICogZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCisJCSAqLworCQlmY3RybF9yZWcgfD0gSVhHQkVfRkNUUkxfUkZDRTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY190eF9wYXVzZToKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuCisJCSAqLworCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX2Z1bGw6CisJCS8qIEZsb3cgY29udHJvbCAoYm90aCBSeCBhbmQgVHgpIGlzIGVuYWJsZWQgYnkgU1cgb3ZlcnJpZGUuICovCisJCWZjdHJsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOworCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlod19kYmcoaHcsICJGbG93IGNvbnRyb2wgcGFyYW0gc2V0IGluY29ycmVjdGx5XG4iKTsKKwkJcmV0X3ZhbCA9IC1JWEdCRV9FUlJfQ09ORklHOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCisJLyogRW5hYmxlIDgwMi4zeCBiYXNlZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RSTCwgZmN0cmxfcmVnKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JNQ1MsIHJtY3NfcmVnKTsKKworCS8qIFNldCB1cCBhbmQgZW5hYmxlIFJ4IGhpZ2gvbG93IHdhdGVyIG1hcmsgdGhyZXNob2xkcywgZW5hYmxlIFhPTi4gKi8KKwlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSAmIGl4Z2JlX2ZjX3R4X3BhdXNlKSB7CisJCWlmIChody0+ZmMuc2VuZF94b24pIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7CisJCX0gZWxzZSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAorCQkJICAgICAgICAgICAgICAgIGh3LT5mYy5sb3dfd2F0ZXIpOworCQl9CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSChwYWNrZXRidWZfbnVtKSwKKwkJICAgICAgICAgICAgICAgIChody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU4pKTsKKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtKSk7CisJaWYgKChwYWNrZXRidWZfbnVtICYgMSkgPT0gMCkKKwkJcmVnID0gKHJlZyAmIDB4RkZGRjAwMDApIHwgaHctPmZjLnBhdXNlX3RpbWU7CisJZWxzZQorCQlyZWcgPSAocmVnICYgMHgwMDAwRkZGRikgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYocGFja2V0YnVmX251bSAvIDIpLCByZWcpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUViwgKGh3LT5mYy5wYXVzZV90aW1lID4+IDEpKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpeGdiZV9zZXR1cF9mY184MjU5OCAtIENvbmZpZ3VyZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQHBhY2tldGJ1Zl9udW06IHBhY2tldCBidWZmZXIgbnVtYmVyICgwLTcpCkBAIC0yNDQsMTEwICszNjMsNjQgQEAKICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfZmNfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pCiB7Ci0JdTMyIGZyY3RsX3JlZzsKLQl1MzIgcm1jc19yZWc7CisJczMyIHJldF92YWwgPSAwOworCWl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQ7CisJYm9vbCBsaW5rX3VwOwogCisJLyogVmFsaWRhdGUgdGhlIHBhY2tldGJ1ZiBjb25maWd1cmF0aW9uICovCiAJaWYgKHBhY2tldGJ1Zl9udW0gPCAwIHx8IHBhY2tldGJ1Zl9udW0gPiA3KSB7CiAJCWh3X2RiZyhodywgIkludmFsaWQgcGFja2V0IGJ1ZmZlciBudW1iZXIgWyVkXSwgZXhwZWN0ZWQgcmFuZ2UgaXMiCiAJCSAgICAgICAgICAiIDAtN1xuIiwgcGFja2V0YnVmX251bSk7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKIAl9CiAKLQlmcmN0bF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOwotCWZyY3RsX3JlZyAmPSB+KElYR0JFX0ZDVFJMX1JGQ0UgfCBJWEdCRV9GQ1RSTF9SUEZDRSk7Ci0KLQlybWNzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKLQlybWNzX3JlZyAmPSB+KElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSB8IElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOwotCiAJLyoKLQkgKiAxMCBnaWcgcGFydHMgZG8gbm90IGhhdmUgYSB3b3JkIGluIHRoZSBFRVBST00gdG8gZGV0ZXJtaW5lIHRoZQotCSAqIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmcsIHNvIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGZ1bGwuCi0JICovCi0JaWYgKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX2RlZmF1bHQpCi0JCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfZnVsbDsKLQotCS8qCi0JICogV2Ugd2FudCB0byBzYXZlIG9mZiB0aGUgb3JpZ2luYWwgRmxvdyBDb250cm9sIGNvbmZpZ3VyYXRpb24ganVzdCBpbgotCSAqIGNhc2Ugd2UgZ2V0IGRpc2Nvbm5lY3RlZCBhbmQgdGhlbiByZWNvbm5lY3RlZCBpbnRvIGEgZGlmZmVyZW50IGh1YgotCSAqIG9yIHN3aXRjaCB3aXRoIGRpZmZlcmVudCBGbG93IENvbnRyb2wgY2FwYWJpbGl0aWVzLgotCSAqLwotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7Ci0KLQkvKgotCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlICJmbG93X2NvbnRyb2wiIHBhcmFtZXRlciBhcmU6Ci0JICogMDogRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKLQkgKiAxOiBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzIGJ1dCBub3QKLQkgKiAgICBzZW5kIHBhdXNlIGZyYW1lcykuCi0JICogMjogVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQgd2UgZG8gbm90Ci0JICogICAgc3VwcG9ydCByZWNlaXZpbmcgcGF1c2UgZnJhbWVzKQotCSAqIDM6IEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KLQkgKiBvdGhlcjogSW52YWxpZC4KLQkgKi8KLQlzd2l0Y2ggKGh3LT5mYy50eXBlKSB7Ci0JY2FzZSBpeGdiZV9mY19ub25lOgotCQlicmVhazsKLQljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgotCQkvKgotCQkgKiBSeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwKLQkJICogYW5kIFR4IEZsb3cgY29udHJvbCBpcyBkaXNhYmxlZC4KLQkJICovCi0JCWZyY3RsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOwotCQlicmVhazsKLQljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgotCQkvKgotCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcyBkaXNhYmxlZCwKLQkJICogYnkgYSBzb2Z0d2FyZSBvdmVyLXJpZGUuCi0JCSAqLwotCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOwotCQlicmVhazsKLQljYXNlIGl4Z2JlX2ZjX2Z1bGw6Ci0JCS8qCi0JCSAqIEZsb3cgY29udHJvbCAoYm90aCBSeCBhbmQgVHgpIGlzIGVuYWJsZWQgYnkgYSBzb2Z0d2FyZQotCQkgKiBvdmVyLXJpZGUuCi0JCSAqLwotCQlmcmN0bF9yZWcgfD0gSVhHQkVfRkNUUkxfUkZDRTsKLQkJcm1jc19yZWcgfD0gSVhHQkVfUk1DU19URkNFXzgwMl8zWDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLiAgVGhlIHZhbHVlIHNob3VsZCBiZSAwLTMuICovCi0JCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmcmN0bF9yZWcpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUk1DUywgcm1jc19yZWcpOwotCi0JLyoKLQkgKiBDaGVjayBmb3IgaW52YWxpZCBzb2Z0d2FyZSBjb25maWd1cmF0aW9uLCB6ZXJvcyBhcmUgY29tcGxldGVseQotCSAqIGludmFsaWQgZm9yIGFsbCBwYXJhbWV0ZXJzIHVzZWQgcGFzdCB0aGlzIHBvaW50LCBhbmQgaWYgd2UgZW5hYmxlCi0JICogZmxvdyBjb250cm9sIHdpdGggemVybyB3YXRlciBtYXJrcywgd2UgYmxhc3QgZmxvdyBjb250cm9sIHBhY2tldHMuCisJICogVmFsaWRhdGUgdGhlIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvbi4gIFplcm8gd2F0ZXIgbWFya3MgYXJlIGludmFsaWQKKwkgKiBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgY29udHJvbGxlciB0byBqdXN0IGJsYXN0IG91dCBmYyBwYWNrZXRzLgogCSAqLwogCWlmICghaHctPmZjLmxvd193YXRlciB8fCAhaHctPmZjLmhpZ2hfd2F0ZXIgfHwgIWh3LT5mYy5wYXVzZV90aW1lKSB7Ci0JCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgaW5jb3JyZWN0bHlcbiIpOwotCQlyZXR1cm4gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCB3YXRlciBtYXJrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIHNldCB1cCB0aGUgUmVjZWl2ZSBUaHJlc2hvbGQgaGlnaCBhbmQgbG93IHdhdGVyCi0JICogbWFya3MgYXMgd2VsbCBhcyAob3B0aW9uYWxseSkgZW5hYmxpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZgotCSAqIFhPTiBmcmFtZXMuCisJICogVmFsaWRhdGUgdGhlIHJlcXVlc3RlZCBtb2RlLiAgU3RyaWN0IElFRUUgbW9kZSBkb2VzIG5vdCBhbGxvdworCSAqIGl4Z2JlX2ZjX3J4X3BhdXNlIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSB0ZXN0aW5nIGFub21hbGllcy4KIAkgKi8KLQlpZiAoaHctPmZjLnR5cGUgJiBpeGdiZV9mY190eF9wYXVzZSkgewotCQlpZiAoaHctPmZjLnNlbmRfeG9uKSB7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAotCQkJICAgICAgICAgICAgICAgIChody0+ZmMubG93X3dhdGVyIHwgSVhHQkVfRkNSVExfWE9ORSkpOwotCQl9IGVsc2UgewotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTChwYWNrZXRidWZfbnVtKSwKLQkJCSAgICAgICAgICAgICAgICBody0+ZmMubG93X3dhdGVyKTsKLQkJfQotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIKHBhY2tldGJ1Zl9udW0pLAotCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyKXxJWEdCRV9GQ1JUSF9GQ0VOKTsKKwlpZiAoaHctPmZjLnN0cmljdF9pZWVlICYmIGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCQlod19kYmcoaHcsICJpeGdiZV9mY19yeF9wYXVzZSBub3QgdmFsaWQgaW4gc3RyaWN0IElFRUUgbW9kZVxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKIAl9CiAKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFRWKDApLCBody0+ZmMucGF1c2VfdGltZSk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUViwgKGh3LT5mYy5wYXVzZV90aW1lID4+IDEpKTsKKwkvKgorCSAqIDEwZ2lnIHBhcnRzIGRvIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgRUVQUk9NIHRvIGRldGVybWluZSB0aGUKKwkgKiBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBmdWxsLgorCSAqLworCWlmIChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKIAotCXJldHVybiAwOworCS8qCisJICogU2F2ZSBvZmYgdGhlIHJlcXVlc3RlZCBmbG93IGNvbnRyb2wgbW9kZSBmb3IgdXNlIGxhdGVyLiAgRGVwZW5kaW5nCisJICogb24gdGhlIGxpbmsgcGFydG5lcidzIGNhcGFiaWxpdGllcywgd2UgbWF5IG9yIG1heSBub3QgdXNlIHRoaXMgbW9kZS4KKwkgKi8KKworCWh3LT5mYy5jdXJyZW50X21vZGUgPSBody0+ZmMucmVxdWVzdGVkX21vZGU7CisKKwkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgYXV0b25lZyBvciBub3QuICovCisJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnNwZWVkLCAmbGlua191cCwgZmFsc2UpOworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQorCQlyZXRfdmFsID0gaXhnYmVfZmNfYXV0b25lZyhodyk7CisKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaXhnYmVfZmNfZW5hYmxlXzgyNTk4KGh3LCBwYWNrZXRidWZfbnVtKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKQEAgLTM2NCwyNyArNDM3LDE3IEBACiAJdTMyIGk7CiAJczMyIHN0YXR1cyA9IDA7CiAKLQlhdXRvY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOwotCi0JaWYgKGh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQpIHsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEU7Ci0JCWF1dG9jX3JlZyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfYXR0YWNoX3R5cGU7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3Q7Ci0KLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2NfcmVnKTsKLQkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwotCQltc2xlZXAoNTApOwotCX0KLQogCS8qIFJlc3RhcnQgbGluayAqLworCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7CiAJYXV0b2NfcmVnIHw9IElYR0JFX0FVVE9DX0FOX1JFU1RBUlQ7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2NfcmVnKTsKIAogCS8qIE9ubHkgcG9sbCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBpZiBzcGVjaWZpZWQgdG8gZG8gc28gKi8KIAlpZiAoaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKLQkJaWYgKGh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOIHx8Ci0JCSAgICBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTikgeworCQlpZiAoKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOKSB7CiAJCQlsaW5rc19yZWcgPSAwOyAvKiBKdXN0IGluIGNhc2UgQXV0b25lZyB0aW1lID0gMCAqLwogCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgewogCQkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CkBAIC00MDQsNyArNDY3LDYgQEAKIAkgKiBjYXNlIHdlIGdldCBkaXNjb25uZWN0ZWQgYW5kIHRoZW4gcmVjb25uZWN0ZWQgaW50byBhIGRpZmZlcmVudCBodWIKIAkgKiBvciBzd2l0Y2ggd2l0aCBkaWZmZXJlbnQgRmxvdyBDb250cm9sIGNhcGFiaWxpdGllcy4KIAkgKi8KLQlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGh3LT5mYy50eXBlOwogCWl4Z2JlX3NldHVwX2ZjXzgyNTk4KGh3LCAwKTsKIAogCS8qIEFkZCBkZWxheSB0byBmaWx0ZXIgb3V0IG5vaXNlcyBkdXJpbmcgaW5pdGlhbCBsaW5rIHNldHVwICovCkBAIC01MDgsMzcgKzU3MCw0MyBAQAogICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCiBzdGF0aWMgczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQogewotCXMzMiBzdGF0dXMgPSAwOworCXMzMiAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgPSAwOworCWl4Z2JlX2xpbmtfc3BlZWQgbGlua19jYXBhYmlsaXRpZXMgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CisJdTMyICAgICAgICAgICAgICBjdXJyX2F1dG9jICAgICAgICA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7CisJdTMyICAgICAgICAgICAgICBhdXRvYyAgICAgICAgICAgICA9IGN1cnJfYXV0b2M7CisJdTMyICAgICAgICAgICAgICBsaW5rX21vZGUgICAgICAgICA9IGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0s7CiAKLQkvKiBJZiBzcGVlZCBpcyAxMEcsIHRoZW4gY2hlY2sgZm9yIENYNCBvciBYQVVJLiAqLwotCWlmICgoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpICYmCi0JICAgICghKGh3LT5tYWMubGlua19hdHRhY2hfdHlwZSAmIElYR0JFX0FVVE9DXzEwR19LWDQpKSkgewotCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU47Ci0JfSBlbHNlIGlmICgoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgJiYgKCFhdXRvbmVnKSkgewotCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjsKLQl9IGVsc2UgaWYgKGF1dG9uZWcpIHsKLQkJLyogQlggbW9kZSAtIEF1dG9uZWdvdGlhdGUgMUcgKi8KLQkJaWYgKCEoaHctPm1hYy5saW5rX2F0dGFjaF90eXBlICYgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRCkpCi0JCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMUdfQU47Ci0JCWVsc2UgLyogS1gvS1g0IG1vZGUgKi8KLQkJCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU47Ci0JfSBlbHNlIHsKKwkvKiBDaGVjayB0byBzZWUgaWYgc3BlZWQgcGFzc2VkIGluIGlzIHN1cHBvcnRlZC4gKi8KKwlpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTgoaHcsICZsaW5rX2NhcGFiaWxpdGllcywgJmF1dG9uZWcpOworCXNwZWVkICY9IGxpbmtfY2FwYWJpbGl0aWVzOworCisJaWYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTikKIAkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisKKwkvKiBTZXQgS1g0L0tYIHN1cHBvcnQgYWNjb3JkaW5nIHRvIHNwZWVkIHJlcXVlc3RlZCAqLworCWVsc2UgaWYgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOIHx8CisJICAgICAgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU4pIHsKKwkJYXV0b2MgJj0gfklYR0JFX0FVVE9DX0tYNF9LWF9TVVBQX01BU0s7CisJCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQorCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1g0X1NVUFA7CisJCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWF9TVVBQOworCQlpZiAoYXV0b2MgIT0gY3Vycl9hdXRvYykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jKTsKIAl9CiAKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUgPSBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU7CiAKLQkJaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCA9IHRydWU7CiAJCS8qCiAJCSAqIFNldHVwIGFuZCByZXN0YXJ0IHRoZSBsaW5rIGJhc2VkIG9uIHRoZSBuZXcgdmFsdWVzIGluCiAJCSAqIGl4Z2JlX2h3IFRoaXMgd2lsbCB3cml0ZSB0aGUgQVVUT0MgcmVnaXN0ZXIgYmFzZWQgb24gdGhlIG5ldwogCQkgKiBzdG9yZWQgdmFsdWVzCiAJCSAqLwotCQlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChodyk7CisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTYxLDEwICs2MjksNiBAQAogCS8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uIG9uIFBIWSAqLwogCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmsoaHcpOwogCi0JLyogU2V0IE1BQyB0byBLWC9LWDQgYXV0b25lZywgd2hpY2ggZGVmYXVsdHMgdG8gUGFyYWxsZWwgZGV0ZWN0aW9uICovCi0JaHctPm1hYy5saW5rX2F0dGFjaF90eXBlID0gKElYR0JFX0FVVE9DXzEwR19LWDQgfCBJWEdCRV9BVVRPQ18xR19LWCk7Ci0JaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTjsKLQogCS8qIFNldCB1cCBNQUMgKi8KIAlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChodyk7CiAKQEAgLTU5MSwxMCArNjU1LDYgQEAKIAlzdGF0dXMgPSBody0+cGh5Lm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBzcGVlZCwgYXV0b25lZywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiAKLQkvKiBTZXQgTUFDIHRvIEtYL0tYNCBhdXRvbmVnLCB3aGljaCBkZWZhdWx0cyB0byBQYXJhbGxlbCBkZXRlY3Rpb24gKi8KLQlody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgPSAoSVhHQkVfQVVUT0NfMTBHX0tYNCB8IElYR0JFX0FVVE9DXzFHX0tYKTsKLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOOwotCiAJLyogU2V0IHVwIE1BQyAqLwogCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKIApAQCAtNjk0LDI0ICs3NTQsMTYgQEAKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dIRUNDUiwgZ2hlY2NyKTsKIAogCS8qCi0JICogQVVUT0MgcmVnaXN0ZXIgd2hpY2ggc3RvcmVzIGxpbmsgc2V0dGluZ3MgZ2V0cyBjbGVhcmVkCi0JICogYW5kIHJlbG9hZGVkIGZyb20gRUVQUk9NIGFmdGVyIHJlc2V0LiBXZSBuZWVkIHRvIHJlc3RvcmUKLQkgKiBvdXIgc3RvcmVkIHZhbHVlIGZyb20gaW5pdCBpbiBjYXNlIFNXIGNoYW5nZWQgdGhlIGF0dGFjaAotCSAqIHR5cGUgb3Igc3BlZWQuICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGFuZCBsaW5rIHNldHRpbmdzCi0JICogaGF2ZSBub3QgYmVlbiBzdG9yZWQsIHN0b3JlIGRlZmF1bHQgc2V0dGluZ3MgZnJvbSBBVVRPQy4KKwkgKiBTdG9yZSB0aGUgb3JpZ2luYWwgQVVUT0MgdmFsdWUgaWYgaXQgaGFzIG5vdCBiZWVuCisJICogc3RvcmVkIG9mZiB5ZXQuICBPdGhlcndpc2UgcmVzdG9yZSB0aGUgc3RvcmVkIG9yaWdpbmFsCisJICogQVVUT0MgdmFsdWUgc2luY2UgdGhlIHJlc2V0IG9wZXJhdGlvbiBzZXRzIGJhY2sgdG8gZGVhdWx0cy4KIAkgKi8KIAlhdXRvYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0JaWYgKGh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQpIHsKLQkJYXV0b2MgJj0gfihJWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEUpOwotCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0xNU19NQVNLKTsKLQkJYXV0b2MgfD0gaHctPm1hYy5saW5rX2F0dGFjaF90eXBlOwotCQlhdXRvYyB8PSBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3Q7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jKTsKLQl9IGVsc2UgewotCQlody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgPQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgKGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX0FUVEFDSF9UWVBFKTsKLQkJaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID0gKGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0spOwotCQlody0+bWFjLmxpbmtfc2V0dGluZ3NfbG9hZGVkID0gdHJ1ZTsKKwlpZiAoaHctPm1hYy5vcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkID09IGZhbHNlKSB7CisJCWh3LT5tYWMub3JpZ19hdXRvYyA9IGF1dG9jOworCQlody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPSB0cnVlOworCX0gZWxzZSBpZiAoYXV0b2MgIT0gaHctPm1hYy5vcmlnX2F1dG9jKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGh3LT5tYWMub3JpZ19hdXRvYyk7CiAJfQogCiAJLyogU3RvcmUgdGhlIHBlcm1hbmVudCBtYWMgYWRkcmVzcyAqLwpAQCAtOTk3LDExICsxMDQ5LDE4IEBACiAgKgogICogIERldGVybWluZXMgcGh5c2ljYWwgbGF5ZXIgY2FwYWJpbGl0aWVzIG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCiAgKiovCi1zdGF0aWMgczMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyB1MzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewotCXMzMiBwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJdTMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKIAogCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCQkvKiBEZWZhdWx0IGRldmljZSBJRCBpcyBtZXp6YW5pbmUgY2FyZCBLWC9LWDQgKi8KKwkJcGh5c2ljYWxfbGF5ZXIgPSAoSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9LWDQgfAorCQkJCSAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfS1gpOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9CWDsKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OEVCX0NYNDoKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9DWDRfRFVBTF9QT1JUOgogCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfQ1g0OwpAQCAtMTA1NSw4ICsxMTE0LDExIEBACiAJLmNsZWFyX2h3X2NudHJzCQk9ICZpeGdiZV9jbGVhcl9od19jbnRyc19nZW5lcmljLAogCS5nZXRfbWVkaWFfdHlwZQkJPSAmaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTgsCiAJLmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIgPSAmaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OCwKKwkuZW5hYmxlX3J4X2RtYSAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMsCiAJLmdldF9tYWNfYWRkcgkJPSAmaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMsCiAJLnN0b3BfYWRhcHRlcgkJPSAmaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMsCisJLmdldF9idXNfaW5mbyAgICAgICAgICAgPSAmaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMsCisJLnNldF9sYW5faWQgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCiAJLnJlYWRfYW5hbG9nX3JlZzgJPSAmaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OCwKIAkud3JpdGVfYW5hbG9nX3JlZzgJPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTgsCiAJLnNldHVwX2xpbmsJCT0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhZTdlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKQEAgLTAsMCArMSwxMjkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSAiaXhnYmUuaCIKKyNpbmNsdWRlICJpeGdiZV9waHkuaCIKKworI2RlZmluZSBJWEdCRV84MjU5OV9NQVhfVFhfUVVFVUVTIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9NQVhfUlhfUVVFVUVTIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9SQVJfRU5UUklFUyAgIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9NQ19UQkxfU0laRSAgIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9WRlRfVEJMX1NJWkUgIDEyOAorCitzMzIgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKTsKK2VudW0gaXhnYmVfbWVkaWFfdHlwZSBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfcmVzZXRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfc2V0X3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOworczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOworczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2aW5kLCBib29sIHZsYW5fb24pOworczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKK3MzMiBpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKK3MzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKTsKK3MzMiBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCB2YWwpOworczMyIGl4Z2JlX3N0YXJ0X2h3X3Jldl8wXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zdGFydF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3UzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworCit2b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCS8qIFNldCB1cCBkdWFsIHNwZWVkIFNGUCsgc3VwcG9ydCAqLworCQltYWMtPm9wcy5zZXR1cF9saW5rID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyOworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyOworCX0gZWxzZSB7CisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5OworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OTsKKwl9Cit9CisKK3MzMiBpeGdiZV9zZXR1cF9zZnBfbW9kdWxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgbGlzdF9vZmZzZXQsIGRhdGFfb2Zmc2V0LCBkYXRhX3ZhbHVlOworCisJaWYgKGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bikgeworCQlpeGdiZV9pbml0X21hY19saW5rX29wc184MjU5OShodyk7CisJCXJldF92YWwgPSBpeGdiZV9nZXRfc2ZwX2luaXRfc2VxdWVuY2Vfb2Zmc2V0cyhodywgJmxpc3Rfb2Zmc2V0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KTsKKworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJZ290byBzZXR1cF9zZnBfb3V0OworCisJCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsICsrZGF0YV9vZmZzZXQsICZkYXRhX3ZhbHVlKTsKKwkJd2hpbGUgKGRhdGFfdmFsdWUgIT0gMHhmZmZmKSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIGRhdGFfdmFsdWUpOworCQkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCQkJaHctPmVlcHJvbS5vcHMucmVhZChodywgKytkYXRhX29mZnNldCwgJmRhdGFfdmFsdWUpOworCQl9CisJCS8qIE5vdyByZXN0YXJ0IERTUCAqLworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIDB4MDAwMDAxMDIpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIDB4MDAwMDBiMWQpOworCQlJWEdCRV9XUklURV9GTFVTSChodyk7CisJfQorCitzZXR1cF9zZnBfb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5IC0gR2V0cyBNU0ktWCB2ZWN0b3IgY291bnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlYWQgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZ2V0IHRoZSBNU0ktWCB2ZWN0b3IgY291bnQgZnJvbQorICogIHRoZSBjYXBhYmlsaXRpZXMgdGFibGUuCisgKiovCit1MzIgaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IG1zaXhfY291bnQ7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJRV9NU0lYXzgyNTk5X0NBUFMsCisJICAgICAgICAgICAgICAgICAgICAgJm1zaXhfY291bnQpOworCW1zaXhfY291bnQgJj0gSVhHQkVfUENJRV9NU0lYX1RCTF9TWl9NQVNLOworCisJLyogTVNJLVggY291bnQgaXMgemVyby1iYXNlZCBpbiBIVywgc28gaW5jcmVtZW50IHRvIGdpdmUgcHJvcGVyIHZhbHVlICovCisJbXNpeF9jb3VudCsrOworCisJcmV0dXJuIG1zaXhfY291bnQ7Cit9CisKK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2ludmFyaWFudHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXN0cnVjdCBpeGdiZV9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJczMyIHJldF92YWw7CisKKwkvKiBTZXQgdGhlIGJ1cyBpbmZvcm1hdGlvbiBwcmlvciB0byBQSFkgaWRlbnRpZmljYXRpb24gKi8KKwltYWMtPm9wcy5nZXRfYnVzX2luZm8oaHcpOworCisJLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIEN1IG9yIFNGSSBwaHkgdHlwZSAqLworCXJldF92YWwgPSBwaHktPm9wcy5pZGVudGlmeShodyk7CisKKwlpZiAocmV0X3ZhbCA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpCisJCWdvdG8gZ2V0X2ludmFyaWFudHNfb3V0OworCisJaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoaHcpOworCisJLyogU2V0dXAgU0ZQIG1vZHVsZSBpZiB0aGVyZSBpcyBvbmUgcHJlc2VudC4gKi8KKwlyZXRfdmFsID0gbWFjLT5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCS8qIElmIGNvcHBlciBtZWRpYSwgb3ZlcndyaXRlIHdpdGggY29wcGVyIGZ1bmN0aW9uIHBvaW50ZXJzICovCisJaWYgKG1hYy0+b3BzLmdldF9tZWRpYV90eXBlKGh3KSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgeworCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5OworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICAgICAgICAgJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5OworCQltYWMtPm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMgPQorCQkgICAgICAgICAgICAgICAgICAmaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OTsKKwl9CisKKwkvKiBQSFkgSW5pdCAqLworCXN3aXRjaCAoaHctPnBoeS50eXBlKSB7CisJY2FzZSBpeGdiZV9waHlfdG46CisJCXBoeS0+b3BzLmNoZWNrX2xpbmsgPSAmaXhnYmVfY2hlY2tfcGh5X2xpbmtfdG54OworCQlwaHktPm9wcy5nZXRfZmlybXdhcmVfdmVyc2lvbiA9CisJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfcGh5X2Zpcm13YXJlX3ZlcnNpb25fdG54OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwltYWMtPm1jZnRfc2l6ZSA9IElYR0JFXzgyNTk5X01DX1RCTF9TSVpFOworCW1hYy0+dmZ0X3NpemUgPSBJWEdCRV84MjU5OV9WRlRfVEJMX1NJWkU7CisJbWFjLT5udW1fcmFyX2VudHJpZXMgPSBJWEdCRV84MjU5OV9SQVJfRU5UUklFUzsKKwltYWMtPm1heF9yeF9xdWV1ZXMgPSBJWEdCRV84MjU5OV9NQVhfUlhfUVVFVUVTOworCW1hYy0+bWF4X3R4X3F1ZXVlcyA9IElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVM7CisJbWFjLT5tYXhfbXNpeF92ZWN0b3JzID0gaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OShodyk7CisKK2dldF9pbnZhcmlhbnRzX291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5IC0gRGV0ZXJtaW5lcyBsaW5rIGNhcGFiaWxpdGllcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAorICogIEBuZWdvdGlhdGlvbjogdHJ1ZSB3aGVuIGF1dG9uZWcgb3IgYXV0b3RyeSBpcyBlbmFibGVkCisgKgorICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgorICoqLworczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmVnb3RpYXRpb24pCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwlzd2l0Y2ggKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU46CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xR19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSOgorCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl8xR19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSToKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tSX1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYX1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU19TR01JSV8xR18xMDBNOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCB8CisJCSAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCX0KKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTkgLSBEZXRlcm1pbmVzIGxpbmsgY2FwYWJpbGl0aWVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogcG9pbnRlciB0byBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IGJvb2xlYW4gYXV0by1uZWdvdGlhdGlvbiB2YWx1ZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBsaW5rIGNhcGFiaWxpdGllcyBieSByZWFkaW5nIHRoZSBBVVRPQyByZWdpc3Rlci4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpCit7CisJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCXUxNiBzcGVlZF9hYmlsaXR5OworCisJKnNwZWVkID0gMDsKKwkqYXV0b25lZyA9IHRydWU7CisKKwlzdGF0dXMgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSVhHQkVfTURJT19QSFlfU1BFRURfQUJJTElUWSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9NRElPX1BNQV9QTURfREVWX1RZUEUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwZWVkX2FiaWxpdHkpOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgSVhHQkVfTURJT19QSFlfU1BFRURfMTBHKQorCQkgICAgKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoc3BlZWRfYWJpbGl0eSAmIElYR0JFX01ESU9fUEhZX1NQRUVEXzFHKQorCQkgICAgKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkgLSBHZXQgbWVkaWEgdHlwZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmV0dXJucyB0aGUgbWVkaWEgdHlwZSAoZmliZXIsIGNvcHBlciwgYmFja3BsYW5lKQorICoqLworZW51bSBpeGdiZV9tZWRpYV90eXBlIGl4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJZW51bSBpeGdiZV9tZWRpYV90eXBlIG1lZGlhX3R5cGU7CisKKwkvKiBEZXRlY3QgaWYgdGhlcmUgaXMgYSBjb3BwZXIgUEhZIGF0dGFjaGVkLiAqLworCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X2N1X3Vua25vd24gfHwKKwkgICAgaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV90bikgeworCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXI7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKwkJLyogRGVmYXVsdCBkZXZpY2UgSUQgaXMgbWV6emFuaW5lIGNhcmQgS1gvS1g0ICovCisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2JhY2twbGFuZTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiBtZWRpYV90eXBlOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OSAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCisgKiAgUmVzdGFydHMgdGhlIGxpbmsuICBQZXJmb3JtcyBhdXRvbmVnb3RpYXRpb24gaWYgbmVlZGVkLgorICoqLworczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGF1dG9jX3JlZzsKKwl1MzIgbGlua3NfcmVnOworCXUzMiBpOworCXMzMiBzdGF0dXMgPSAwOworCisJLyogUmVzdGFydCBsaW5rICovCisJYXV0b2NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOworCisJLyogT25seSBwb2xsIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIGlmIHNwZWNpZmllZCB0byBkbyBzbyAqLworCWlmIChody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgeworCQlpZiAoKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJCSAgICAoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkJbGlua3NfcmVnID0gMDsgLyogSnVzdCBpbiBjYXNlIEF1dG9uZWcgdGltZSA9IDAgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9BVVRPX05FR19USU1FOyBpKyspIHsKKwkJCQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCQkJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19LWF9BTl9DT01QKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCX0KKwkJCWlmICghKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApKSB7CisJCQkJc3RhdHVzID0gSVhHQkVfRVJSX0FVVE9ORUdfTk9UX0NPTVBMRVRFOworCQkJCWh3X2RiZyhodywgIkF1dG9uZWcgZGlkIG5vdCBjb21wbGV0ZS5cbiIpOworCQkJfQorCQl9CisJfQorCisJLyogU2V0IHVwIGZsb3cgY29udHJvbCAqLworCXN0YXR1cyA9IGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMoaHcsIDApOworCisJLyogQWRkIGRlbGF5IHRvIGZpbHRlciBvdXQgbm9pc2VzIGR1cmluZyBpbml0aWFsIGxpbmsgc2V0dXAgKi8KKwltc2xlZXAoNTApOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlciAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCisgKiAgUmVzdGFydHMgdGhlIGxpbmsgZm9yIG11bHRpLXNwZWVkIGZpYmVyIGF0IDFHIHNwZWVkLCBpZiBsaW5rCisgKiAgZmFpbHMgYXQgMTBHLgorICogIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXMgPSAwOworCWl4Z2JlX2xpbmtfc3BlZWQgbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfODI1OTlfQVVUT05FRzsKKwlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LCBsaW5rX3NwZWVkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlciAtIFNldCBNQUMgbGluayBzcGVlZAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1cyA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBwaHlfbGlua19zcGVlZDsKKwlpeGdiZV9saW5rX3NwZWVkIGhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKwl1MzIgc3BlZWRjbnQgPSAwOworCXUzMiBlc2RwX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FU0RQKTsKKwlib29sIGxpbmtfdXAgPSBmYWxzZTsKKwlib29sIG5lZ290aWF0aW9uOworCisJLyogTWFzayBvZmYgcmVxdWVzdGVkIGJ1dCBub24tc3VwcG9ydGVkIHNwZWVkcyAqLworCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJnBoeV9saW5rX3NwZWVkLCAmbmVnb3RpYXRpb24pOworCXNwZWVkICY9IHBoeV9saW5rX3NwZWVkOworCisJLyoKKwkgKiBUcnkgZWFjaCBzcGVlZCBvbmUgYnkgb25lLCBoaWdoZXN0IHByaW9yaXR5IGZpcnN0LiAgV2UgZG8gdGhpcyBpbgorCSAqIHNvZnR3YXJlIGJlY2F1c2UgMTBnYiBmaWJlciBkb2Vzbid0IHN1cHBvcnQgc3BlZWQgYXV0b25lZ290aWF0aW9uLgorCSAqLworCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSB7CisJCXNwZWVkY250Kys7CisJCWhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCisJCS8qIFNldCBoYXJkd2FyZSBTRFAncyAqLworCQllc2RwX3JlZyB8PSAoSVhHQkVfRVNEUF9TRFA1X0RJUiB8IElYR0JFX0VTRFBfU0RQNSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRVNEUCwgZXNkcF9yZWcpOworCisJCWl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KGh3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKworCQltc2xlZXAoNTApOworCisJCS8qIElmIHdlIGhhdmUgbGluaywganVzdCBqdW1wIG91dCAqLworCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmcGh5X2xpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJCWlmIChsaW5rX3VwKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgeworCQlzcGVlZGNudCsrOworCQlpZiAoaGlnaGVzdF9saW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTikKKwkJCWhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisKKwkJLyogU2V0IGhhcmR3YXJlIFNEUCdzICovCisJCWVzZHBfcmVnICY9IH5JWEdCRV9FU0RQX1NEUDU7CisJCWVzZHBfcmVnIHw9IElYR0JFX0VTRFBfU0RQNV9ESVI7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRVNEUCwgZXNkcF9yZWcpOworCisJCWl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KAorCQkJaHcsIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwsIGF1dG9uZWcsCisJCQlhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCisJCW1zbGVlcCg1MCk7CisKKwkJLyogSWYgd2UgaGF2ZSBsaW5rLCBqdXN0IGp1bXAgb3V0ICovCisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZwaHlfbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwkJaWYgKGxpbmtfdXApCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFdlIGRpZG4ndCBnZXQgbGluay4gIENvbmZpZ3VyZSBiYWNrIHRvIHRoZSBoaWdoZXN0IHNwZWVkIHdlIHRyaWVkLAorCSAqIChpZiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSkuICBXZSBjYWxsIG91cnNlbHZlcyBiYWNrIHdpdGgganVzdCB0aGUKKwkgKiBzaW5nbGUgaGlnaGVzdCBzcGVlZCB0aGF0IHRoZSB1c2VyIHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAoc3BlZWRjbnQgPiAxKQorCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdF9saW5rX3NwZWVkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19tYWNfbGlua184MjU5OSAtIERldGVybWluZSBsaW5rIGFuZCBzcGVlZCBzdGF0dXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAbGlua191cDogdHJ1ZSB3aGVuIGxpbmsgaXMgdXAKKyAqICBAbGlua191cF93YWl0X3RvX2NvbXBsZXRlOiBib29sIHVzZWQgdG8gd2FpdCBmb3IgbGluayB1cCBvciBub3QKKyAqCisgKiAgUmVhZHMgdGhlIGxpbmtzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiBsaW5rIGlzIHVwIGFuZCB0aGUgY3VycmVudCBzcGVlZAorICoqLworczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmxpbmtfdXAsIGJvb2wgbGlua191cF93YWl0X3RvX2NvbXBsZXRlKQoreworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisKKwlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCWlmIChsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IElYR0JFX0xJTktfVVBfVElNRTsgaSsrKSB7CisJCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApIHsKKwkJCQkqbGlua191cCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCSpsaW5rX3VwID0gZmFsc2U7CisJCQl9CisJCQltc2xlZXAoMTAwKTsKKwkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApCisJCQkqbGlua191cCA9IHRydWU7CisJCWVsc2UKKwkJCSpsaW5rX3VwID0gZmFsc2U7CisJfQorCisJaWYgKChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19TUEVFRF84MjU5OSkgPT0KKwkgICAgSVhHQkVfTElOS1NfU1BFRURfMTBHXzgyNTk5KQorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwllbHNlIGlmICgobGlua3NfcmVnICYgSVhHQkVfTElOS1NfU1BFRURfODI1OTkpID09CisJICAgICAgICAgSVhHQkVfTElOS1NfU1BFRURfMUdfODI1OTkpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJZWxzZQorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgTUFDIGxpbmsgc3BlZWQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAorICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdHJ1ZSB3aGVuIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaXMgbmVlZGVkCisgKgorICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIGF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwl1MzIgYXV0b2MyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DMik7CisJdTMyIGxpbmtfbW9kZSA9IGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0s7CisJdTMyIHBtYV9wbWRfMWcgPSBhdXRvYyAmIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfTUFTSzsKKwl1MzIgcG1hX3BtZF8xMGdfc2VyaWFsID0gYXV0b2MyICYgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9NQVNLOworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX2NhcGFiaWxpdGllcyA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBzcGVlZCBwYXNzZWQgaW4gaXMgc3VwcG9ydGVkLiAqLworCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmxpbmtfY2FwYWJpbGl0aWVzLCAmYXV0b25lZyk7CisJc3BlZWQgJj0gbGlua19jYXBhYmlsaXRpZXM7CisKKwlpZiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCX0gZWxzZSBpZiAobGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgfHwKKwkgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJICAgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkvKiBTZXQgS1g0L0tYL0tSIHN1cHBvcnQgYWNjb3JkaW5nIHRvIHNwZWVkIHJlcXVlc3RlZCAqLworCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0tYNF9LWF9TVVBQX01BU0sgfCBJWEdCRV9BVVRPQ19LUl9TVVBQKTsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisJCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCisJCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1g0X1NVUFA7CisJCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LUl9TVVBQOworCQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKQorCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1hfU1VQUDsKKwl9IGVsc2UgaWYgKChwbWFfcG1kXzFnID09IElYR0JFX0FVVE9DXzFHX1NGSSkgJiYKKwkgICAgICAgICAgIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU4gfHwKKwkgICAgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzFHX0FOKSkgeworCQkvKiBTd2l0Y2ggZnJvbSAxRyBTRkkgdG8gMTBHIFNGSSBpZiByZXF1ZXN0ZWQgKi8KKwkJaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkgJiYKKwkJICAgIChwbWFfcG1kXzEwZ19zZXJpYWwgPT0gSVhHQkVfQVVUT0MyXzEwR19TRkkpKSB7CisJCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7CisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMTBHX1NFUklBTDsKKwkJfQorCX0gZWxzZSBpZiAoKHBtYV9wbWRfMTBnX3NlcmlhbCA9PSBJWEdCRV9BVVRPQzJfMTBHX1NGSSkgJiYKKwkgICAgICAgICAgIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUwpKSB7CisJCS8qIFN3aXRjaCBmcm9tIDEwRyBTRkkgdG8gMUcgU0ZJIGlmIHJlcXVlc3RlZCAqLworCQlpZiAoKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpICYmCisJCSAgICAocG1hX3BtZF8xZyA9PSBJWEdCRV9BVVRPQ18xR19TRkkpKSB7CisJCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7CisJCQlpZiAoYXV0b25lZykKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMUdfQU47CisJCQllbHNlCisJCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU47CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLyogUmVzdGFydCBsaW5rICovCisJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0FOX1JFU1RBUlQ7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jKTsKKworCQkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCisJCWlmIChhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKKwkJCWlmIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCQkJICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJCQkgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfU0dNSUkpIHsKKwkJCQlsaW5rc19yZWcgPSAwOyAvKkp1c3QgaW4gY2FzZSBBdXRvbmVnIHRpbWU9MCovCisJCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgeworCQkJCQlsaW5rc19yZWcgPQorCQkJCQkgICAgICAgSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKKwkJCQkJaWYgKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApCisJCQkJCQlicmVhazsKKwkJCQkJbXNsZWVwKDEwMCk7CisJCQkJfQorCQkJCWlmICghKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApKSB7CisJCQkJCXN0YXR1cyA9CisJCQkJCSAgICAgICAgSVhHQkVfRVJSX0FVVE9ORUdfTk9UX0NPTVBMRVRFOworCQkJCQlod19kYmcoaHcsICJBdXRvbmVnIGRpZCBub3QgIgorCQkJCQkgICAgICAgImNvbXBsZXRlLlxuIik7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogU2V0IHVwIGZsb3cgY29udHJvbCAqLworCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9mY19nZW5lcmljKGh3LCAwKTsKKworCQkvKiBBZGQgZGVsYXkgdG8gZmlsdGVyIG91dCBub2lzZXMgZHVyaW5nIGluaXRpYWwgbGluayBzZXR1cCAqLworCQltc2xlZXAoNTApOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5IC0gU2V0dXAgY29wcGVyIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlc3RhcnRzIHRoZSBsaW5rIG9uIFBIWSBhbmQgdGhlbiBNQUMuIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1czsKKworCS8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uIG9uIFBIWSAqLworCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmsoaHcpOworCisJLyogU2V0IHVwIE1BQyAqLworCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5IC0gU2V0IHRoZSBQSFkgYXV0b25lZyBhZHZlcnRpc2VkIGZpZWxkCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZAorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgaWYgd2FpdGluZyBpcyBuZWVkZWQgdG8gY29tcGxldGUKKyAqCisgKiAgUmVzdGFydHMgbGluayBvbiBQSFkgYW5kIE1BQyBiYXNlZCBvbiBzZXR0aW5ncyBwYXNzZWQgaW4uCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1czsKKworCS8qIFNldHVwIHRoZSBQSFkgYWNjb3JkaW5nIHRvIGlucHV0IHNwZWVkICovCisJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGlua19zcGVlZChodywgc3BlZWQsIGF1dG9uZWcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCS8qIFNldCB1cCBNQUMgKi8KKwlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OShodyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9yZXNldF9od184MjU5OSAtIFBlcmZvcm0gaGFyZHdhcmUgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlc2V0cyB0aGUgaGFyZHdhcmUgYnkgcmVzZXR0aW5nIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cywgbWFza3MKKyAqICBhbmQgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLCBwZXJmb3JtIGEgUEhZIHJlc2V0LCBhbmQgcGVyZm9ybSBhIGxpbmsgKE1BQykKKyAqICByZXNldC4KKyAqKi8KK3MzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBjdHJsLCBjdHJsX2V4dDsKKwl1MzIgaTsKKwl1MzIgYXV0b2M7CisJdTMyIGF1dG9jMjsKKworCS8qIENhbGwgYWRhcHRlciBzdG9wIHRvIGRpc2FibGUgdHgvcnggYW5kIGNsZWFyIGludGVycnVwdHMgKi8KKwlody0+bWFjLm9wcy5zdG9wX2FkYXB0ZXIoaHcpOworCisJLyogUmVzZXQgUEhZICovCisJaHctPnBoeS5vcHMucmVzZXQoaHcpOworCisJLyoKKwkgKiBQcmV2ZW50IHRoZSBQQ0ktRSBidXMgZnJvbSBmcm9tIGhhbmdpbmcgYnkgZGlzYWJsaW5nIFBDSS1FIG1hc3RlcgorCSAqIGFjY2VzcyBhbmQgdmVyaWZ5IG5vIHBlbmRpbmcgcmVxdWVzdHMgYmVmb3JlIHJlc2V0CisJICovCisJaWYgKGl4Z2JlX2Rpc2FibGVfcGNpZV9tYXN0ZXIoaHcpICE9IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOworCQlod19kYmcoaHcsICJQQ0ktRSBNYXN0ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKKwl9CisKKwkvKgorCSAqIElzc3VlIGdsb2JhbCByZXNldCB0byB0aGUgTUFDLiAgVGhpcyBuZWVkcyB0byBiZSBhIFNXIHJlc2V0LgorCSAqIElmIGxpbmsgcmVzZXQgaXMgdXNlZCwgaXQgbWlnaHQgcmVzZXQgdGhlIE1BQyB3aGVuIG1uZyBpcyB1c2luZyBpdAorCSAqLworCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IElYR0JFX0NUUkxfUlNUKSk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJLyogUG9sbCBmb3IgcmVzZXQgYml0IHRvIHNlbGYtY2xlYXIgaW5kaWNhdGluZyByZXNldCBpcyBjb21wbGV0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXVkZWxheSgxKTsKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJaWYgKCEoY3RybCAmIElYR0JFX0NUUkxfUlNUKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoY3RybCAmIElYR0JFX0NUUkxfUlNUKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CisJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CisJfQorCS8qIENsZWFyIFBGIFJlc2V0IERvbmUgYml0IHNvIFBGL1ZGIE1haWwgT3BzIGNhbiB3b3JrICovCisJY3RybF9leHQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQpOworCWN0cmxfZXh0IHw9IElYR0JFX0NUUkxfRVhUX1BGUlNURDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkxfRVhULCBjdHJsX2V4dCk7CisKKwltc2xlZXAoNTApOworCisKKworCS8qCisJICogU3RvcmUgdGhlIG9yaWdpbmFsIEFVVE9DL0FVVE9DMiB2YWx1ZXMgaWYgdGhleSBoYXZlIG5vdCBiZWVuCisJICogc3RvcmVkIG9mZiB5ZXQuICBPdGhlcndpc2UgcmVzdG9yZSB0aGUgc3RvcmVkIG9yaWdpbmFsCisJICogdmFsdWVzIHNpbmNlIHRoZSByZXNldCBvcGVyYXRpb24gc2V0cyBiYWNrIHRvIGRlZmF1bHRzLgorCSAqLworCWF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwlhdXRvYzIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MyKTsKKwlpZiAoaHctPm1hYy5vcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkID09IGZhbHNlKSB7CisJCWh3LT5tYWMub3JpZ19hdXRvYyA9IGF1dG9jOworCQlody0+bWFjLm9yaWdfYXV0b2MyID0gYXV0b2MyOworCQlody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCWlmIChhdXRvYyAhPSBody0+bWFjLm9yaWdfYXV0b2MpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCAoaHctPm1hYy5vcmlnX2F1dG9jIHwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUKSk7CisKKwkJaWYgKChhdXRvYzIgJiBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSykgIT0KKwkJICAgIChody0+bWFjLm9yaWdfYXV0b2MyICYgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0spKSB7CisJCQlhdXRvYzIgJj0gfklYR0JFX0FVVE9DMl9VUFBFUl9NQVNLOworCQkJYXV0b2MyIHw9IChody0+bWFjLm9yaWdfYXV0b2MyICYKKwkJCSAgICAgICAgICAgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0spOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQzIsIGF1dG9jMik7CisJCX0KKwl9CisKKwkvKiBTdG9yZSB0aGUgcGVybWFuZW50IG1hYyBhZGRyZXNzICovCisJaHctPm1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody0+bWFjLnBlcm1fYWRkcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbGVhcl92bWRxXzgyNTk5IC0gRGlzYXNzb2NpYXRlIGEgVk1EcSBwb29sIGluZGV4IGZyb20gYSByeCBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdAorICogIEByYXI6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlciBpbmRleCB0byBkaXNhc3NvY2lhdGUKKyAqICBAdm1kcTogVk1EcSBwb29sIGluZGV4IHRvIHJlbW92ZSBmcm9tIHRoZSByYXIKKyAqKi8KK3MzMiBpeGdiZV9jbGVhcl92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQoreworCXUzMiBtcHNhcl9sbywgbXBzYXJfaGk7CisJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CisKKwlpZiAocmFyIDwgcmFyX2VudHJpZXMpIHsKKwkJbXBzYXJfbG8gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSk7CisJCW1wc2FyX2hpID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhcikpOworCisJCWlmICghbXBzYXJfbG8gJiYgIW1wc2FyX2hpKQorCQkJZ290byBkb25lOworCisJCWlmICh2bWRxID09IElYR0JFX0NMRUFSX1ZNRFFfQUxMKSB7CisJCQlpZiAobXBzYXJfbG8pIHsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIDApOworCQkJCW1wc2FyX2xvID0gMDsKKwkJCX0KKwkJCWlmIChtcHNhcl9oaSkgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSwgMCk7CisJCQkJbXBzYXJfaGkgPSAwOworCQkJfQorCQl9IGVsc2UgaWYgKHZtZHEgPCAzMikgeworCQkJbXBzYXJfbG8gJj0gfigxIDw8IHZtZHEpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpLCBtcHNhcl9sbyk7CisJCX0gZWxzZSB7CisJCQltcHNhcl9oaSAmPSB+KDEgPDwgKHZtZHEgLSAzMikpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCBtcHNhcl9oaSk7CisJCX0KKworCQkvKiB3YXMgdGhhdCB0aGUgbGFzdCBwb29sIHVzaW5nIHRoaXMgcmFyPyAqLworCQlpZiAobXBzYXJfbG8gPT0gMCAmJiBtcHNhcl9oaSA9PSAwICYmIHJhciAhPSAwKQorCQkJaHctPm1hYy5vcHMuY2xlYXJfcmFyKGh3LCByYXIpOworCX0gZWxzZSB7CisJCWh3X2RiZyhodywgIlJBUiBpbmRleCAlZCBpcyBvdXQgb2YgcmFuZ2UuXG4iLCByYXIpOworCX0KKworZG9uZToKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X3ZtZHFfODI1OTkgLSBBc3NvY2lhdGUgYSBWTURxIHBvb2wgaW5kZXggd2l0aCBhIHJ4IGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0CisgKiAgQHJhcjogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4IHRvIGFzc29jaWF0ZSB3aXRoIGEgVk1EcSBpbmRleAorICogIEB2bWRxOiBWTURxIHBvb2wgaW5kZXgKKyAqKi8KK3MzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSkKK3sKKwl1MzIgbXBzYXI7CisJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CisKKwlpZiAocmFyIDwgcmFyX2VudHJpZXMpIHsKKwkJaWYgKHZtZHEgPCAzMikgeworCQkJbXBzYXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSk7CisJCQltcHNhciB8PSAxIDw8IHZtZHE7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIG1wc2FyKTsKKwkJfSBlbHNlIHsKKwkJCW1wc2FyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhcikpOworCQkJbXBzYXIgfD0gMSA8PCAodm1kcSAtIDMyKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSwgbXBzYXIpOworCQl9CisJfSBlbHNlIHsKKwkJaHdfZGJnKGh3LCAiUkFSIGluZGV4ICVkIGlzIG91dCBvZiByYW5nZS5cbiIsIHJhcik7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfdmZ0YV84MjU5OSAtIFNldCBWTEFOIGZpbHRlciB0YWJsZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAdmxhbjogVkxBTiBpZCB0byB3cml0ZSB0byBWTEFOIGZpbHRlcgorICogIEB2aW5kOiBWTURxIG91dHB1dCBpbmRleCB0aGF0IG1hcHMgcXVldWUgdG8gVkxBTiBpZCBpbiBWRlZGQgorICogIEB2bGFuX29uOiBib29sZWFuIGZsYWcgdG8gdHVybiBvbi9vZmYgVkxBTiBpbiBWRlZGCisgKgorICogIFR1cm4gb24vb2ZmIHNwZWNpZmllZCBWTEFOIGluIHRoZSBWTEFOIGZpbHRlciB0YWJsZS4KKyAqKi8KK3MzMiBpeGdiZV9zZXRfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgdmxhbiwgdTMyIHZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2bGFuX29uKQoreworCXUzMiByZWdpbmRleDsKKwl1MzIgYml0aW5kZXg7CisJdTMyIGJpdHM7CisJdTMyIGZpcnN0X2VtcHR5X3Nsb3Q7CisKKwlpZiAodmxhbiA+IDQwOTUpCisJCXJldHVybiBJWEdCRV9FUlJfUEFSQU07CisKKwkvKgorCSAqIHRoaXMgaXMgYSAyIHBhcnQgb3BlcmF0aW9uIC0gZmlyc3QgdGhlIFZGVEEsIHRoZW4gdGhlCisJICogVkxWRiBhbmQgVkxWRkIgaWYgdmluZCBpcyBzZXQKKwkgKi8KKworCS8qIFBhcnQgMQorCSAqIFRoZSBWRlRBIGlzIGEgYml0c3RyaW5nIG1hZGUgdXAgb2YgMTI4IDMyLWJpdCByZWdpc3RlcnMKKwkgKiB0aGF0IGVuYWJsZSB0aGUgcGFydGljdWxhciBWTEFOIGlkLCBtdWNoIGxpa2UgdGhlIE1UQToKKwkgKiAgICBiaXRzWzExLTVdOiB3aGljaCByZWdpc3RlcgorCSAqICAgIGJpdHNbNC0wXTogIHdoaWNoIGJpdCBpbiB0aGUgcmVnaXN0ZXIKKwkgKi8KKwlyZWdpbmRleCA9ICh2bGFuID4+IDUpICYgMHg3RjsKKwliaXRpbmRleCA9IHZsYW4gJiAweDFGOworCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUQShyZWdpbmRleCkpOworCWlmICh2bGFuX29uKQorCQliaXRzIHw9ICgxIDw8IGJpdGluZGV4KTsKKwllbHNlCisJCWJpdHMgJj0gfigxIDw8IGJpdGluZGV4KTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEocmVnaW5kZXgpLCBiaXRzKTsKKworCisJLyogUGFydCAyCisJICogSWYgdGhlIHZpbmQgaXMgc2V0CisJICogICBFaXRoZXIgdmxhbl9vbgorCSAqICAgICBtYWtlIHN1cmUgdGhlIHZsYW4gaXMgaW4gVkxWRgorCSAqICAgICBzZXQgdGhlIHZpbmQgYml0IGluIHRoZSBtYXRjaGluZyBWTFZGQgorCSAqICAgT3IgIXZsYW5fb24KKwkgKiAgICAgY2xlYXIgdGhlIHBvb2wgYml0IGFuZCBwb3NzaWJseSB0aGUgdmluZAorCSAqLworCWlmICh2aW5kKSB7CisJCS8qIGZpbmQgdGhlIHZsYW5pZCBvciB0aGUgZmlyc3QgZW1wdHkgc2xvdCAqLworCQlmaXJzdF9lbXB0eV9zbG90ID0gMDsKKworCQlmb3IgKHJlZ2luZGV4ID0gMTsgcmVnaW5kZXggPCBJWEdCRV9WTFZGX0VOVFJJRVM7IHJlZ2luZGV4KyspIHsKKwkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCkpOworCQkJaWYgKCFiaXRzICYmICFmaXJzdF9lbXB0eV9zbG90KQorCQkJCWZpcnN0X2VtcHR5X3Nsb3QgPSByZWdpbmRleDsKKwkJCWVsc2UgaWYgKChiaXRzICYgMHgwRkZGKSA9PSB2bGFuKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlZ2luZGV4ID49IElYR0JFX1ZMVkZfRU5UUklFUykgeworCQkJaWYgKGZpcnN0X2VtcHR5X3Nsb3QpCisJCQkJcmVnaW5kZXggPSBmaXJzdF9lbXB0eV9zbG90OworCQkJZWxzZSB7CisJCQkJaHdfZGJnKGh3LCAiTm8gc3BhY2UgaW4gVkxWRi5cbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJaWYgKHZsYW5fb24pIHsKKwkJCS8qIHNldCB0aGUgcG9vbCBiaXQgKi8KKwkJCWlmICh2aW5kIDwgMzIpIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOworCQkJfSBlbHNlIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKKwkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogY2xlYXIgdGhlIHBvb2wgYml0ICovCisJCQlpZiAodmluZCA8IDMyKSB7CisJCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSk7CisJCQliaXRzICY9IH4oMSA8PCB2aW5kKTsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpLCBiaXRzKTsKKwkJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOworCQkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOworCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCX0KKwkJfQorCisJCWlmIChiaXRzKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSwKKwkJCSAgICAgICAgICAgICAgICAoSVhHQkVfVkxWRl9WSUVOIHwgdmxhbikpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLCAwKTsKKwl9CisKK291dDoKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OSAtIENsZWFyIFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDbGVhcnMgdGhlIFZMQU4gZmlsZXIgdGFibGUsIGFuZCB0aGUgVk1EcSBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlcgorICoqLworczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBody0+bWFjLnZmdF9zaXplOyBvZmZzZXQrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRBKG9mZnNldCksIDApOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBJWEdCRV9WTFZGX0VOVFJJRVM7IG9mZnNldCsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRihvZmZzZXQpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGQihvZmZzZXQgKiAyKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRkIoKG9mZnNldCAqIDIpICsgMSksIDApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTkgLSBCbGluayBMRUQgYmFzZWQgb24gaW5kZXguCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpbmRleDogbGVkIG51bWJlciB0byBibGluaworICoqLworczMyIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIGxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9NT0RFX01BU0soaW5kZXgpOworCWxlZF9yZWcgfD0gSVhHQkVfTEVEX0JMSU5LKGluZGV4KTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0xFRENUTCwgbGVkX3JlZyk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX2JsaW5rX2xlZF9zdG9wXzgyNTk5IC0gU3RvcCBibGlua2luZyBMRUQgYmFzZWQgb24gaW5kZXguCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpbmRleDogbGVkIG51bWJlciB0byBzdG9wIGJsaW5raW5nCisgKiovCitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KQoreworCXUzMiBsZWRfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xFRENUTCk7CisKKwlsZWRfcmVnICY9IH5JWEdCRV9MRURfTU9ERV9NQVNLKGluZGV4KTsKKwlsZWRfcmVnICY9IH5JWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRfcmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5IC0gSW5pdGlhbGl6ZSB0aGUgVW5pY2FzdCBUYWJsZSBBcnJheQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqKi8KK3MzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlpbnQgaTsKKwlod19kYmcoaHcsICIgQ2xlYXJpbmcgVVRBXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9VVEEoaSksIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkgLSBSZWFkcyA4IGJpdCBPbWVyIGFuYWxvZyByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVnOiBhbmFsb2cgcmVnaXN0ZXIgdG8gcmVhZAorICogIEB2YWw6IHJlYWQgdmFsdWUKKyAqCisgKiAgUGVyZm9ybXMgcmVhZCBvcGVyYXRpb24gdG8gT21lciBhbmFsb2cgcmVnaXN0ZXIgc3BlY2lmaWVkLgorICoqLworczMyIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggKnZhbCkKK3sKKwl1MzIgIGNvcmVfY3RsOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DT1JFQ1RMLCBJWEdCRV9DT1JFQ1RMX1dSSVRFX0NNRCB8CisJICAgICAgICAgICAgICAgIChyZWcgPDwgOCkpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoMTApOworCWNvcmVfY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NPUkVDVEwpOworCSp2YWwgPSAodTgpY29yZV9jdGw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkgLSBXcml0ZXMgOCBiaXQgT21lciBhbmFsb2cgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHJlZzogYXRsYXMgcmVnaXN0ZXIgdG8gd3JpdGUKKyAqICBAdmFsOiB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBQZXJmb3JtcyB3cml0ZSBvcGVyYXRpb24gdG8gT21lciBhbmFsb2cgcmVnaXN0ZXIgc3BlY2lmaWVkLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCkKK3sKKwl1MzIgIGNvcmVfY3RsOworCisJY29yZV9jdGwgPSAocmVnIDw8IDgpIHwgdmFsOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgY29yZV9jdGwpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoMTApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5IC0gUHJlcGFyZSBoYXJkd2FyZSBmb3IgVHgvUngKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFN0YXJ0cyB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIGdlbmVyaWMgc3RhcnRfaHcgZnVuY3Rpb24uCisgKiAgVGhlbiBwZXJmb3JtcyBkZXZpY2Utc3BlY2lmaWM6CisgKiAgQ2xlYXJzIHRoZSByYXRlIGxpbWl0ZXIgcmVnaXN0ZXJzLgorICoqLworczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHFfbnVtOworCisJaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyhodyk7CisKKwkvKiBDbGVhciB0aGUgcmF0ZSBsaW1pdGVycyAqLworCWZvciAocV9udW0gPSAwOyBxX251bSA8IGh3LT5tYWMubWF4X3R4X3F1ZXVlczsgcV9udW0rKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBxX251bSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUQkNOUkMsIDApOworCX0KKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5IC0gR2V0IHBoeXNpY2FsIGxheWVyIG1vZHVsZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyB0aGUgcGh5c2ljYWwgbGF5ZXIgbW9kdWxlIGZvdW5kIG9uIHRoZSBjdXJyZW50IGFkYXB0ZXIuCisgKiovCitzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9QSFlfQUREUl9JTlZBTElEOworCXN0YXR1cyA9IGl4Z2JlX2lkZW50aWZ5X3BoeV9nZW5lcmljKGh3KTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXN0YXR1cyA9IGl4Z2JlX2lkZW50aWZ5X3NmcF9tb2R1bGVfZ2VuZXJpYyhodyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OSAtIFJldHVybnMgcGh5c2ljYWwgbGF5ZXIgdHlwZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAqKi8KK3UzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKKwl1OCBjb21wX2NvZGVzXzEwZyA9IDA7CisKKwlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OToKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9LWDQ6CisJCS8qIERlZmF1bHQgZGV2aWNlIElEIGlzIG1lenphbmluZSBjYXJkIEtYL0tYNCAqLworCQlwaHlzaWNhbF9sYXllciA9IChJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX0tYNCB8CisJCSAgICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0tYKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgorCQlody0+cGh5Lm9wcy5pZGVudGlmeV9zZnAoaHcpOworCisJCXN3aXRjaCAoaHctPnBoeS5zZnBfdHlwZSkgeworCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1OgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUwOgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUxOgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9TRlBfUExVU19DVTsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NyOgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX1NSOworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfbHI6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfTFI7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwOgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE6CisJCQlody0+cGh5Lm9wcy5yZWFkX2kyY19lZXByb20oaHcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfU0ZGXzEwR0JFX0NPTVBfQ09ERVMsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBfY29kZXNfMTBnKTsKKwkJCWlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKKwkJCQlwaHlzaWNhbF9sYXllciA9CisJCQkJICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfU1I7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKKwkJCQlwaHlzaWNhbF9sYXllciA9CisJCQkJICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfTFI7CisJCQllbHNlCisJCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQlkZWZhdWx0OgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcGh5c2ljYWxfbGF5ZXI7Cit9CisKKy8qKgorICogIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkgLSBFbmFibGUgdGhlIFJ4IERNQSB1bml0IG9uIDgyNTk5CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWd2YWw6IHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlIHRvIFJYQ1RSTAorICoKKyAqICBFbmFibGVzIHRoZSBSeCBETUEgdW5pdCBmb3IgODI1OTkKKyAqKi8KK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWd2YWwpCit7CisjZGVmaW5lIElYR0JFX01BWF9TRUNSWF9QT0xMIDMwCisJaW50IGk7CisJaW50IHNlY3J4cmVnOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciA4MjU5OSBzaWxpY29uIGVycmF0YSB3aGVuIGVuYWJsaW5nIHRoZSBSeCBkYXRhcGF0aC4KKwkgKiBJZiB0cmFmZmljIGlzIGluY29taW5nIGJlZm9yZSB3ZSBlbmFibGUgdGhlIFJ4IHVuaXQsIGl0IGNvdWxkIGhhbmcKKwkgKiB0aGUgUnggRE1BIHVuaXQuICBUaGVyZWZvcmUsIG1ha2Ugc3VyZSB0aGUgc2VjdXJpdHkgZW5naW5lIGlzCisJICogY29tcGxldGVseSBkaXNhYmxlZCBwcmlvciB0byBlbmFibGluZyB0aGUgUnggdW5pdC4KKwkgKi8KKwlzZWNyeHJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwpOworCXNlY3J4cmVnIHw9IElYR0JFX1NFQ1JYQ1RSTF9SWF9ESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwsIHNlY3J4cmVnKTsKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfTUFYX1NFQ1JYX1BPTEw7IGkrKykgeworCQlzZWNyeHJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TRUNSWFNUQVQpOworCQlpZiAoc2VjcnhyZWcgJiBJWEdCRV9TRUNSWFNUQVRfU0VDUlhfUkRZKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXVkZWxheSgxMCk7CisJfQorCisJLyogRm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSAqLworCWlmIChpID49IElYR0JFX01BWF9TRUNSWF9QT0xMKQorCQlod19kYmcoaHcsICJSeCB1bml0IGJlaW5nIGVuYWJsZWQgYmVmb3JlIHNlY3VyaXR5ICIKKwkJICAgICAgICJwYXRoIGZ1bGx5IGRpc2FibGVkLiAgQ29udGludWluZyB3aXRoIGluaXQuXG4iKTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWd2YWwpOworCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCk7CisJc2VjcnhyZWcgJj0gfklYR0JFX1NFQ1JYQ1RSTF9SWF9ESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwsIHNlY3J4cmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBtYWNfb3BzXzgyNTk5ID0geworCS5pbml0X2h3ICAgICAgICAgICAgICAgID0gJml4Z2JlX2luaXRfaHdfZ2VuZXJpYywKKwkucmVzZXRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9od184MjU5OSwKKwkuc3RhcnRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9zdGFydF9od184MjU5OSwKKwkuY2xlYXJfaHdfY250cnMgICAgICAgICA9ICZpeGdiZV9jbGVhcl9od19jbnRyc19nZW5lcmljLAorCS5nZXRfbWVkaWFfdHlwZSAgICAgICAgID0gJml4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5LAorCS5nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyID0gJml4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTksCisJLmVuYWJsZV9yeF9kbWEgICAgICAgICAgPSAmaXhnYmVfZW5hYmxlX3J4X2RtYV84MjU5OSwKKwkuZ2V0X21hY19hZGRyICAgICAgICAgICA9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKKwkuc3RvcF9hZGFwdGVyICAgICAgICAgICA9ICZpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYywKKwkuZ2V0X2J1c19pbmZvICAgICAgICAgICA9ICZpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYywKKwkuc2V0X2xhbl9pZCAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSwKKwkucmVhZF9hbmFsb2dfcmVnOCAgICAgICA9ICZpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5LAorCS53cml0ZV9hbmFsb2dfcmVnOCAgICAgID0gJml4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5LAorCS5zZXR1cF9saW5rICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5LAorCS5zZXR1cF9saW5rX3NwZWVkICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5LAorCS5jaGVja19saW5rICAgICAgICAgICAgID0gJml4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5LAorCS5nZXRfbGlua19jYXBhYmlsaXRpZXMgID0gJml4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OSwKKwkubGVkX29uICAgICAgICAgICAgICAgICA9ICZpeGdiZV9sZWRfb25fZ2VuZXJpYywKKwkubGVkX29mZiAgICAgICAgICAgICAgICA9ICZpeGdiZV9sZWRfb2ZmX2dlbmVyaWMsCisJLmJsaW5rX2xlZF9zdGFydCAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0YXJ0XzgyNTk5LAorCS5ibGlua19sZWRfc3RvcCAgICAgICAgID0gJml4Z2JlX2JsaW5rX2xlZF9zdG9wXzgyNTk5LAorCS5zZXRfcmFyICAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF9yYXJfZ2VuZXJpYywKKwkuY2xlYXJfcmFyICAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl9yYXJfZ2VuZXJpYywKKwkuc2V0X3ZtZHEgICAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfdm1kcV84MjU5OSwKKwkuY2xlYXJfdm1kcSAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl92bWRxXzgyNTk5LAorCS5pbml0X3J4X2FkZHJzICAgICAgICAgID0gJml4Z2JlX2luaXRfcnhfYWRkcnNfZ2VuZXJpYywKKwkudXBkYXRlX3VjX2FkZHJfbGlzdCAgICA9ICZpeGdiZV91cGRhdGVfdWNfYWRkcl9saXN0X2dlbmVyaWMsCisJLnVwZGF0ZV9tY19hZGRyX2xpc3QgICAgPSAmaXhnYmVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLAorCS5lbmFibGVfbWMgICAgICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9tY19nZW5lcmljLAorCS5kaXNhYmxlX21jICAgICAgICAgICAgID0gJml4Z2JlX2Rpc2FibGVfbWNfZ2VuZXJpYywKKwkuY2xlYXJfdmZ0YSAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl92ZnRhXzgyNTk5LAorCS5zZXRfdmZ0YSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92ZnRhXzgyNTk5LAorCS5zZXR1cF9mYyAgICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX2ZjX2dlbmVyaWMsCisJLmluaXRfdXRhX3RhYmxlcyAgICAgICAgPSAmaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5LAorCS5zZXR1cF9zZnAgICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5LAorfTsKKworc3RhdGljIHN0cnVjdCBpeGdiZV9lZXByb21fb3BlcmF0aW9ucyBlZXByb21fb3BzXzgyNTk5ID0geworCS5pbml0X3BhcmFtcyAgICAgICAgICAgID0gJml4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljLAorCS5yZWFkICAgICAgICAgICAgICAgICAgID0gJml4Z2JlX3JlYWRfZWVwcm9tX2dlbmVyaWMsCisJLndyaXRlICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMsCisJLnZhbGlkYXRlX2NoZWNrc3VtICAgICAgPSAmaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCisJLnVwZGF0ZV9jaGVja3N1bSAgICAgICAgPSAmaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAorfTsKKworc3RhdGljIHN0cnVjdCBpeGdiZV9waHlfb3BlcmF0aW9ucyBwaHlfb3BzXzgyNTk5ID0geworCS5pZGVudGlmeSAgICAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OSwKKwkuaWRlbnRpZnlfc2ZwICAgICAgICAgICA9ICZpeGdiZV9pZGVudGlmeV9zZnBfbW9kdWxlX2dlbmVyaWMsCisJLnJlc2V0ICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVzZXRfcGh5X2dlbmVyaWMsCisJLnJlYWRfcmVnICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVhZF9waHlfcmVnX2dlbmVyaWMsCisJLndyaXRlX3JlZyAgICAgICAgICAgICAgPSAmaXhnYmVfd3JpdGVfcGh5X3JlZ19nZW5lcmljLAorCS5zZXR1cF9saW5rICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX3BoeV9saW5rX2dlbmVyaWMsCisJLnNldHVwX2xpbmtfc3BlZWQgICAgICAgPSAmaXhnYmVfc2V0dXBfcGh5X2xpbmtfc3BlZWRfZ2VuZXJpYywKKwkucmVhZF9pMmNfYnl0ZSAgICAgICAgICA9ICZpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMsCisJLndyaXRlX2kyY19ieXRlICAgICAgICAgPSAmaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYywKKwkucmVhZF9pMmNfZWVwcm9tICAgICAgICA9ICZpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYywKKwkud3JpdGVfaTJjX2VlcHJvbSAgICAgICA9ICZpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMsCit9OworCitzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV84MjU5OV9pbmZvID0geworCS5tYWMgICAgICAgICAgICAgICAgICAgID0gaXhnYmVfbWFjXzgyNTk5RUIsCisJLmdldF9pbnZhcmlhbnRzICAgICAgICAgPSAmaXhnYmVfZ2V0X2ludmFyaWFudHNfODI1OTksCisJLm1hY19vcHMgICAgICAgICAgICAgICAgPSAmbWFjX29wc184MjU5OSwKKwkuZWVwcm9tX29wcyAgICAgICAgICAgICA9ICZlZXByb21fb3BzXzgyNTk5LAorCS5waHlfb3BzICAgICAgICAgICAgICAgID0gJnBoeV9vcHNfODI1OTksCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCBmNjdjNjg0Li44Y2ZkM2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKKyNpbmNsdWRlICJpeGdiZS5oIgogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgogCkBAIC04MCw5ICs4MSw2IEBACiAJLyogQ2xlYXIgdGhlIFZMQU4gZmlsdGVyIHRhYmxlICovCiAJaHctPm1hYy5vcHMuY2xlYXJfdmZ0YShodyk7CiAKLQkvKiBTZXQgdXAgbGluayAqLwotCWh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcpOwotCiAJLyogQ2xlYXIgc3RhdGlzdGljcyByZWdpc3RlcnMgKi8KIAlody0+bWFjLm9wcy5jbGVhcl9od19jbnRycyhodyk7CiAKQEAgLTI1NCw2ICsyNTIsODEgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMgLSBHZW5lcmljIHNldCBQQ0kgYnVzIGluZm8KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgdGhlIFBDSSBidXMgaW5mbyAoc3BlZWQsIHdpZHRoLCB0eXBlKSB3aXRoaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdHVyZQorICoqLworczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXUxNiBsaW5rX3N0YXR1czsKKworCWh3LT5idXMudHlwZSA9IGl4Z2JlX2J1c190eXBlX3BjaV9leHByZXNzOworCisJLyogR2V0IHRoZSBuZWdvdGlhdGVkIGxpbmsgd2lkdGggYW5kIHNwZWVkIGZyb20gUENJIGNvbmZpZyBzcGFjZSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIElYR0JFX1BDSV9MSU5LX1NUQVRVUywKKwkgICAgICAgICAgICAgICAgICAgICAmbGlua19zdGF0dXMpOworCisJc3dpdGNoIChsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1dJRFRIKSB7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF8xOgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDE7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfV0lEVEhfMjoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF9wY2llX3gyOworCQlicmVhazsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzQ6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NDsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF84OgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1NQRUVEKSB7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19TUEVFRF8yNTAwOgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkXzI1MDA7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMDoKKwkJaHctPmJ1cy5zcGVlZCA9IGl4Z2JlX2J1c19zcGVlZF81MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkX3Vua25vd247CisJCWJyZWFrOworCX0KKworCW1hYy0+b3BzLnNldF9sYW5faWQoaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llIC0gU2V0IExBTiBpZCBmb3IgUENJZSBtdWx0aXBsZSBwb3J0IGRldmljZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBMQU4gZnVuY3Rpb24gaWQgYnkgcmVhZGluZyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycworICogIGFuZCBzd2FwcyB0aGUgcG9ydCB2YWx1ZSBpZiByZXF1ZXN0ZWQuCisgKiovCit2b2lkIGl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2J1c19pbmZvICpidXMgPSAmaHctPmJ1czsKKwl1MzIgcmVnOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NUQVRVUyk7CisJYnVzLT5mdW5jID0gKHJlZyAmIElYR0JFX1NUQVRVU19MQU5fSUQpID4+IElYR0JFX1NUQVRVU19MQU5fSURfU0hJRlQ7CisJYnVzLT5sYW5faWQgPSBidXMtPmZ1bmM7CisKKwkvKiBjaGVjayBmb3IgYSBwb3J0IHN3YXAgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkFDVFBTKTsKKwlpZiAocmVnICYgSVhHQkVfRkFDVFBTX0xGUykKKwkJYnVzLT5mdW5jIF49IDB4MTsKK30KKworLyoqCiAgKiAgaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMgLSBHZW5lcmljIHN0b3AgVHgvUnggdW5pdHMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMzkzLDYgKzQ2Niw3MyBAQAogfQogCiAvKioKKyAqICBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyAtIFdyaXRlcyAxNiBiaXQgdmFsdWUgdG8gRUVQUk9NCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB3cml0dGVuIHRvCisgKiAgQGRhdGE6IDE2IGJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQorICoKKyAqICBJZiBpeGdiZV9lZXByb21fdXBkYXRlX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCisgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXMzMiBzdGF0dXM7CisJdTggd3JpdGVfb3Bjb2RlID0gSVhHQkVfRUVQUk9NX1dSSVRFX09QQ09ERV9TUEk7CisKKwlody0+ZWVwcm9tLm9wcy5pbml0X3BhcmFtcyhodyk7CisKKwlpZiAob2Zmc2V0ID49IGh3LT5lZXByb20ud29yZF9zaXplKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9FRVBST007CisJCWdvdG8gb3V0OworCX0KKworCS8qIFByZXBhcmUgdGhlIEVFUFJPTSBmb3Igd3JpdGluZyAgKi8KKwlzdGF0dXMgPSBpeGdiZV9hY3F1aXJlX2VlcHJvbShodyk7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaWYgKGl4Z2JlX3JlYWR5X2VlcHJvbShodykgIT0gMCkgeworCQkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOworCQkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJLyogIFNlbmQgdGhlIFdSSVRFIEVOQUJMRSBjb21tYW5kICg4IGJpdCBvcGNvZGUgKSAgKi8KKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBJWEdCRV9FRVBST01fV1JFTl9PUENPREVfU1BJLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfRUVQUk9NX09QQ09ERV9CSVRTKTsKKworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJLyoKKwkJICogU29tZSBTUEkgZWVwcm9tcyB1c2UgdGhlIDh0aCBhZGRyZXNzIGJpdCBlbWJlZGRlZCBpbiB0aGUKKwkJICogb3Bjb2RlCisJCSAqLworCQlpZiAoKGh3LT5lZXByb20uYWRkcmVzc19iaXRzID09IDgpICYmIChvZmZzZXQgPj0gMTI4KSkKKwkJCXdyaXRlX29wY29kZSB8PSBJWEdCRV9FRVBST01fQThfT1BDT0RFX1NQSTsKKworCQkvKiBTZW5kIHRoZSBXcml0ZSBjb21tYW5kICg4LWJpdCBvcGNvZGUgKyBhZGRyKSAqLworCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIHdyaXRlX29wY29kZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyk7CisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgKHUxNikob2Zmc2V0KjIpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMpOworCisJCS8qIFNlbmQgdGhlIGRhdGEgKi8KKwkJZGF0YSA9IChkYXRhID4+IDgpIHwgKGRhdGEgPDwgOCk7CisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgZGF0YSwgMTYpOworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJbXNsZWVwKGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5KTsKKwkJLyogRG9uZSB3aXRoIHdyaXRpbmcgLSByZWxlYXNlIHRoZSBFRVBST00gKi8KKwkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOworCX0KKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMgLSBSZWFkIEVFUFJPTSB3b3JkIHVzaW5nIGJpdC1iYW5nCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSByZWFkCkBAIC01MjEsNyArNjYxLDcgQEAKIHN0YXRpYyBzMzIgaXhnYmVfYWNxdWlyZV9lZXByb20oc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzID0gMDsKLQl1MzIgZWVjOworCXUzMiBlZWMgPSAwOwogCXUzMiBpOwogCiAJaWYgKGl4Z2JlX2FjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgIT0gMCkKQEAgLTE0OTAsNiArMTYzMCwzMjYgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZmNfZW5hYmxlIC0gRW5hYmxlIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKKyAqCisgKiAgRW5hYmxlIGZsb3cgY29udHJvbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2V0dGluZ3MuCisgKiovCitzMzIgaXhnYmVfZmNfZW5hYmxlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgbWZsY25fcmVnOworCXUzMiBmY2NmZ19yZWc7CisJdTMyIHJlZzsKKworCW1mbGNuX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CisJbWZsY25fcmVnICY9IH4oSVhHQkVfTUZMQ05fUkZDRSB8IElYR0JFX01GTENOX1JQRkNFKTsKKworCWZjY2ZnX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7CisJZmNjZmdfcmVnICY9IH4oSVhHQkVfRkNDRkdfVEZDRV84MDJfM1ggfCBJWEdCRV9GQ0NGR19URkNFX1BSSU9SSVRZKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6IEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICogMTogUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dAorCSAqICAgIHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqIDM6IEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiA0OiBQcmlvcml0eSBGbG93IENvbnRyb2wgaXMgZW5hYmxlZC4KKwkgKiBvdGhlcjogSW52YWxpZC4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKKwljYXNlIGl4Z2JlX2ZjX25vbmU6CisJCS8qIEZsb3cgY29udHJvbCBjb21wbGV0ZWx5IGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiAqLworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgorCQkvKgorCQkgKiBSeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgVHggRmxvdyBjb250cm9sIGlzCisJCSAqIGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiBTaW5jZSB0aGVyZSByZWFsbHkKKwkJICogaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUlgKKwkJICogUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZSBzdXBwb3J0IGJvdGgKKwkJICogc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJ4IFBBVVNFLiAgTGF0ZXIsIHdlIHdpbGwKKwkJICogZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCisJCSAqLworCQltZmxjbl9yZWcgfD0gSVhHQkVfTUZMQ05fUkZDRTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY190eF9wYXVzZToKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuCisJCSAqLworCQlmY2NmZ19yZWcgfD0gSVhHQkVfRkNDRkdfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJbWZsY25fcmVnIHw9IElYR0JFX01GTENOX1JGQ0U7CisJCWZjY2ZnX3JlZyB8PSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0RDQgorCWNhc2UgaXhnYmVfZmNfcGZjOgorCQlnb3RvIG91dDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlod19kYmcoaHcsICJGbG93IGNvbnRyb2wgcGFyYW0gc2V0IGluY29ycmVjdGx5XG4iKTsKKwkJcmV0X3ZhbCA9IC1JWEdCRV9FUlJfQ09ORklHOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCisJLyogRW5hYmxlIDgwMi4zeCBiYXNlZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NRkxDTiwgbWZsY25fcmVnKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDQ0ZHLCBmY2NmZ19yZWcpOworCisJLyogU2V0IHVwIGFuZCBlbmFibGUgUnggaGlnaC9sb3cgd2F0ZXIgbWFyayB0aHJlc2hvbGRzLCBlbmFibGUgWE9OLiAqLworCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgaXhnYmVfZmNfdHhfcGF1c2UpIHsKKwkJaWYgKGh3LT5mYy5zZW5kX3hvbikKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgaHctPmZjLmxvd193YXRlcik7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJICAgICAgICAgICAgICAgIChody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU4pKTsKKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtKSk7CisJaWYgKChwYWNrZXRidWZfbnVtICYgMSkgPT0gMCkKKwkJcmVnID0gKHJlZyAmIDB4RkZGRjAwMDApIHwgaHctPmZjLnBhdXNlX3RpbWU7CisJZWxzZQorCQlyZWcgPSAocmVnICYgMHgwMDAwRkZGRikgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYocGFja2V0YnVmX251bSAvIDIpLCByZWcpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUViwgKGh3LT5mYy5wYXVzZV90aW1lID4+IDEpKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9mY19hdXRvbmVnIC0gQ29uZmlndXJlIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgTmVnb3RpYXRlcyBmbG93IGNvbnRyb2wgY2FwYWJpbGl0aWVzIHdpdGggbGluayBwYXJ0bmVyIHVzaW5nIGF1dG9uZWcgYW5kCisgKiAgYXBwbGllcyB0aGUgcmVzdWx0cy4KKyAqKi8KK3MzMiBpeGdiZV9mY19hdXRvbmVnKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBpLCByZWcsIHBjc19hbmFkdl9yZWcsIHBjc19scGFiX3JlZzsKKworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QQ1MxR0FOQSk7CisKKwkvKgorCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZmMuY3VycmVudF9tb2RlIGFyZToKKwkgKiAwOiAgRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKKwkgKiAxOiAgUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICAgYnV0IG5vdCBzZW5kIHBhdXNlIGZyYW1lcykuCisJICogMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0CisJICogICAgIHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqIDM6ICBCb3RoIFJ4IGFuZCBUeCBmbG93IGNvbnRyb2wgKHN5bW1ldHJpYykgYXJlIGVuYWJsZWQuCisJICogNDogIFByaW9yaXR5IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCXJlZyAmPSB+KElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSB8IElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCXJlZyB8PSAoSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFIHwgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY190eF9wYXVzZToKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuCisJCSAqLworCQlyZWcgfD0gKElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CisJCXJlZyAmPSB+KElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSk7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJcmVnIHw9IChJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UgfCBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfRENCCisJY2FzZSBpeGdiZV9mY19wZmM6CisJCWdvdG8gb3V0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1BDUzFHQU5BLCByZWcpOworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QQ1MxR0xDVEwpOworCisJLyogU2V0IFBDUyByZWdpc3RlciBmb3IgYXV0b25lZyAqLworCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBhdXRvbmVnICovCisJcmVnIHw9IElYR0JFX1BDUzFHTENUTF9BTl9FTkFCTEUgfCBJWEdCRV9QQ1MxR0xDVExfQU5fUkVTVEFSVDsKKworCS8qIERpc2FibGUgQU4gdGltZW91dCAqLworCWlmIChody0+ZmMuc3RyaWN0X2llZWUpCisJCXJlZyAmPSB+SVhHQkVfUENTMUdMQ1RMX0FOXzFHX1RJTUVPVVRfRU47CisKKwlod19kYmcoaHcsICJDb25maWd1cmluZyBBdXRvbmVnOyBQQ1NfTENUTCA9IDB4JTA4WFxuIiwgcmVnKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1BDUzFHTENUTCwgcmVnKTsKKworCS8qIFNlZSBpZiBhdXRvbmVnb3RpYXRpb24gaGFzIHN1Y2NlZWRlZCAqLworCWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBGSUJFUl9MSU5LX1VQX0xJTUlUOyBpKyspIHsKKwkJbXNsZWVwKDEwKTsKKwkJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHTFNUQSk7CisJCWlmICgocmVnICYgKElYR0JFX1BDUzFHTFNUQV9MSU5LX09LIHwKKwkJICAgICBJWEdCRV9QQ1MxR0xTVEFfQU5fQ09NUExFVEUpKSA9PQorCQkgICAgKElYR0JFX1BDUzFHTFNUQV9MSU5LX09LIHwKKwkJICAgICBJWEdCRV9QQ1MxR0xTVEFfQU5fQ09NUExFVEUpKSB7CisJCQlpZiAoIShyZWcgJiBJWEdCRV9QQ1MxR0xTVEFfQU5fVElNRURfT1VUKSkKKwkJCQlody0+bWFjLmF1dG9uZWdfc3VjY2VlZGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFody0+bWFjLmF1dG9uZWdfc3VjY2VlZGVkKSB7CisJCS8qIEF1dG9uZWcgZmFpbGVkIHRvIGFjaGlldmUgYSBsaW5rLCBzbyB3ZSB0dXJuIGZjIG9mZiAqLworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gTk9ORS5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFJlYWQgdGhlIEFOIGFkdmVydGlzZW1lbnQgYW5kIExQIGFiaWxpdHkgcmVnaXN0ZXJzIGFuZCByZXNvbHZlCisJICogbG9jYWwgZmxvdyBjb250cm9sIHNldHRpbmdzIGFjY29yZGluZ2x5CisJICovCisJcGNzX2FuYWR2X3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QQ1MxR0FOQSk7CisJcGNzX2xwYWJfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5MUCk7CisJaWYgKChwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSAmJgorCQkocGNzX2xwYWJfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSkgeworCQkvKgorCQkgKiBOb3cgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdXNlciBzZWxlY3RlZCBSeCBPTkxZCisJCSAqIG9mIHBhdXNlIGZyYW1lcy4gIEluIHRoaXMgY2FzZSwgd2UgaGFkIHRvIGFkdmVydGlzZQorCQkgKiBGVUxMIGZsb3cgY29udHJvbCBiZWNhdXNlIHdlIGNvdWxkIG5vdCBhZHZlcnRpc2UgUlgKKwkJICogT05MWS4gSGVuY2UsIHdlIG11c3Qgbm93IGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvCisJCSAqIHR1cm4gT0ZGIHRoZSBUUkFOU01JU1NJT04gb2YgUEFVU0UgZnJhbWVzLgorCQkgKi8KKwkJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19mdWxsKSB7CisJCQlody0+ZmMuY3VycmVudF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKKwkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IEZVTEwuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19yeF9wYXVzZTsKKwkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxuIik7CisJCX0KKwl9IGVsc2UgaWYgKCEocGNzX2FuYWR2X3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpICYmCisJCSAgIChwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCSAgIChwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpKSB7CisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY190eF9wYXVzZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKKwl9IGVsc2UgaWYgKChwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSAmJgorCQkgICAocGNzX2FuYWR2X3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkgJiYKKwkJICAgIShwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCSAgIChwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpKSB7CisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19yeF9wYXVzZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKKwl9IGVsc2UgeworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gTk9ORS5cbiIpOworCX0KKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9mY19nZW5lcmljIC0gU2V0IHVwIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyB1cCBmbG93IGNvbnRyb2wuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBzcGVlZDsKKwlib29sIGxpbmtfdXA7CisKKyNpZmRlZiBDT05GSUdfRENCCisJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19wZmMpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKwkJZ290byBvdXQ7CisJfQorCisjZW5kaWYKKwkvKiBWYWxpZGF0ZSB0aGUgcGFja2V0YnVmIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAocGFja2V0YnVmX251bSA8IDAgfHwgcGFja2V0YnVmX251bSA+IDcpIHsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCBwYWNrZXQgYnVmZmVyIG51bWJlciBbJWRdLCBleHBlY3RlZCByYW5nZSAiCisJCSAgICAgICAiaXMgMC03XG4iLCBwYWNrZXRidWZfbnVtKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVmFsaWRhdGUgdGhlIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvbi4gIFplcm8gd2F0ZXIgbWFya3MgYXJlIGludmFsaWQKKwkgKiBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgY29udHJvbGxlciB0byBqdXN0IGJsYXN0IG91dCBmYyBwYWNrZXRzLgorCSAqLworCWlmICghaHctPmZjLmxvd193YXRlciB8fCAhaHctPmZjLmhpZ2hfd2F0ZXIgfHwgIWh3LT5mYy5wYXVzZV90aW1lKSB7CisJCWh3X2RiZyhodywgIkludmFsaWQgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVmFsaWRhdGUgdGhlIHJlcXVlc3RlZCBtb2RlLiAgU3RyaWN0IElFRUUgbW9kZSBkb2VzIG5vdCBhbGxvdworCSAqIGl4Z2JlX2ZjX3J4X3BhdXNlIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSB0ZXN0aW5nIGFub21hbGllcy4KKwkgKi8KKwlpZiAoaHctPmZjLnN0cmljdF9pZWVlICYmIGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCQlod19kYmcoaHcsICJpeGdiZV9mY19yeF9wYXVzZSBub3QgdmFsaWQgaW4gc3RyaWN0ICIKKwkJICAgICAgICJJRUVFIG1vZGVcbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAxMGdpZyBwYXJ0cyBkbyBub3QgaGF2ZSBhIHdvcmQgaW4gdGhlIEVFUFJPTSB0byBkZXRlcm1pbmUgdGhlCisJICogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gZnVsbC4KKwkgKi8KKwlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX2RlZmF1bHQpCisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CisKKwkvKgorCSAqIFNhdmUgb2ZmIHRoZSByZXF1ZXN0ZWQgZmxvdyBjb250cm9sIG1vZGUgZm9yIHVzZSBsYXRlci4gIERlcGVuZGluZworCSAqIG9uIHRoZSBsaW5rIHBhcnRuZXIncyBjYXBhYmlsaXRpZXMsIHdlIG1heSBvciBtYXkgbm90IHVzZSB0aGlzIG1vZGUuCisJICovCisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBhdXRvbmVnIG9yIG5vdC4gKi8KKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlciAmJiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkpCisJCXJldF92YWwgPSBpeGdiZV9mY19hdXRvbmVnKGh3KTsKKworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9mY19lbmFibGUoaHcsIHBhY2tldGJ1Zl9udW0pOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGl4Z2JlX2Rpc2FibGVfcGNpZV9tYXN0ZXIgLSBEaXNhYmxlIFBDSS1leHByZXNzIG1hc3RlciBhY2Nlc3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMTU5NywzICsyMDU3LDE2IEBACiAJaXhnYmVfcmVsZWFzZV9lZXByb21fc2VtYXBob3JlKGh3KTsKIH0KIAorLyoqCisgKiAgaXhnYmVfZW5hYmxlX3J4X2RtYV9nZW5lcmljIC0gRW5hYmxlIHRoZSBSeCBETUEgdW5pdAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVndmFsOiByZWdpc3RlciB2YWx1ZSB0byB3cml0ZSB0byBSWENUUkwKKyAqCisgKiAgRW5hYmxlcyB0aGUgUnggRE1BIHVuaXQKKyAqKi8KK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKK3sKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1RSTCwgcmVndmFsKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAppbmRleCAxOTJmOGQwLi43ZTk0ZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM3LDEyICszNywxNCBAQAogczMyIGl4Z2JlX3JlYWRfcGJhX251bV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqcGJhX251bSk7CiBzMzIgaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKm1hY19hZGRyKTsKIHMzMiBpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3ZvaWQgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAKIHMzMiBpeGdiZV9sZWRfb25fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOwogczMyIGl4Z2JlX2xlZF9vZmZfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOwogCiBzMzIgaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKTsKIHMzMiBpeGdiZV9yZWFkX2VlcHJvbV9iaXRfYmFuZ19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOwpAQCAtNjEsNiArNjMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGFkZHJfY291bnQsIGl4Z2JlX21jX2FkZHJfaXRyIGZ1bmMpOwogczMyIGl4Z2JlX2VuYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2Rpc2FibGVfbWNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCk7CitzMzIgaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSk7CitzMzIgaXhnYmVfZmNfZW5hYmxlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrdGV0YnVmX251bSk7CitzMzIgaXhnYmVfZmNfYXV0b25lZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIAogczMyIGl4Z2JlX3ZhbGlkYXRlX21hY19hZGRyKHU4ICptYWNfYWRkcik7CiBzMzIgaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1hc2spOwpAQCAtNzIsNiArNzgsMTMgQEAKIAogI2RlZmluZSBJWEdCRV9XUklURV9SRUcoYSwgcmVnLCB2YWx1ZSkgd3JpdGVsKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyAocmVnKSkpCiAKKyNpZm5kZWYgd3JpdGVxCisjZGVmaW5lIHdyaXRlcSh2YWwsIGFkZHIpIHdyaXRlbCgodTMyKSAodmFsKSwgYWRkcik7IFwKKyAgICB3cml0ZWwoKHUzMikgKHZhbCA+PiAzMiksIChhZGRyICsgNCkpOworI2VuZGlmCisKKyNkZWZpbmUgSVhHQkVfV1JJVEVfUkVHNjQoYSwgcmVnLCB2YWx1ZSkgd3JpdGVxKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyAocmVnKSkpCisKICNkZWZpbmUgSVhHQkVfUkVBRF9SRUcoYSwgcmVnKSByZWFkbCgoYSktPmh3X2FkZHIgKyAocmVnKSkKIAogI2RlZmluZSBJWEdCRV9XUklURV9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQsIHZhbHVlKSAoXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwppbmRleCBlMmUyOGFjLi5hMTU2MjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJpeGdiZV90eXBlLmgiCiAjaW5jbHVkZSAiaXhnYmVfZGNiLmgiCiAjaW5jbHVkZSAiaXhnYmVfZGNiXzgyNTk4LmgiCisjaW5jbHVkZSAiaXhnYmVfZGNiXzgyNTk5LmgiCiAKIC8qKgogICogaXhnYmVfZGNiX2NvbmZpZyAtIFN0cnVjdCBjb250YWluaW5nIERDQiBzZXR0aW5ncy4KQEAgLTIxNSw2ICsyMTYsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTgoaHcsIHN0YXRzLCB0Y19jb3VudCk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KGh3LCBzdGF0cywgdGNfY291bnQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIzMiw2ICsyMzUsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9nZXRfcGZjX3N0YXRzXzgyNTk4KGh3LCBzdGF0cywgdGNfY291bnQpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkoaHcsIHN0YXRzLCB0Y19jb3VudCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ4LDYgKzI1Myw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjY0LDYgKzI3MSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4MCw2ICsyODksOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTYsNiArMzA3LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzExLDYgKzMyNCw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OChodyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk5KGh3KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMjcsNiArMzQyLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9od19jb25maWdfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmgKaW5kZXggNzVmNmVmZS4uNjRhOWZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC03NSw2ICs3NSwyNiBAQAogCXByaW9fbGluawogfTsKIAorLyogRENCIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfRENCX1BHX1NVUFBPUlQgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfRENCX1BGQ19TVVBQT1JUICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfRENCX0JDTl9TVVBQT1JUICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfRENCX1VQMlRDX1NVUFBPUlQgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSVhHQkVfRENCX0dTUF9TVVBQT1JUICAgICAgIDB4MDAwMDAwMTAKKworI2RlZmluZSBJWEdCRV9EQ0JfOF9UQ19TVVBQT1JUICAgICAgMHg4MAorCitzdHJ1Y3QgZGNiX3N1cHBvcnQgeworCS8qIERDQiBjYXBhYmlsaXRpZXMgKi8KKwl1MzIgY2FwYWJpbGl0aWVzOworCisJLyogRWFjaCBiaXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBUQ3MgY29uZmlndXJhYmxlIGluIHRoZSBody4KKwkgKiBJZiA4IHRyYWZmaWMgY2xhc3NlcyBjYW4gYmUgY29uZmlndXJlZCwgdGhlIHZhbHVlIGlzIDB4ODAuCisJICovCisJdTggIHRyYWZmaWNfY2xhc3NlczsKKwl1OCAgcGZjX3RyYWZmaWNfY2xhc3NlczsKK307CisKIC8qIFRyYWZmaWMgY2xhc3MgYmFuZHdpZHRoIGFsbG9jYXRpb24gcGVyIGRpcmVjdGlvbiAqLwogc3RydWN0IHRjX2J3X2FsbG9jIHsKIAl1OCBid2dfaWQ7CQkgIC8qIEJhbmR3aWR0aCBHcm91cCAoQldHKSBJRCAqLwpAQCAtMTA4LDM4ICsxMjgsMTggQEAKIAlwYmFfODBfNDggICAgICAvKiBQQkFbMC0zXSBlYWNoIHVzZSA4MEtCLCBQQkFbNC03XSBlYWNoIHVzZSA0OEtCICovCiB9OwogCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgbWFueSB2YWx1ZXMgZW5jb2RlZCBhcyBmaXhlZC1wb2ludAotICogbnVtYmVycywgbWVhbmluZyB0aGF0IHNvbWUgb2YgYml0cyBhcmUgZGVkaWNhdGVkIHRvIHRoZQotICogbWFnbml0dWRlIGFuZCBvdGhlcnMgdG8gdGhlIGZyYWN0aW9uIHBhcnQuIEluIHRoZSBjb21tZW50cwotICogdGhpcyBpcyBzaG93biBhcyBmPW4sIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBiaXRzLgotICogVGhlc2UgZnJhY3Rpb24gYml0cyBhcmUgYWx3YXlzIHRoZSBsb3ctb3JkZXIgYml0cy4gVGhlIHNpemUKLSAqIG9mIHRoZSBtYWduaXR1ZGUgaXMgbm90IHNwZWNpZmllZC4KLSAqLwotc3RydWN0IGJjbl9jb25maWcgewotCXUzMiBycF9hZG1pbl9tb2RlW01BWF9UUkFGRklDX0NMQVNTXTsgLyogQkNOIGVuYWJsZWQsIHBlciBUQyAqLwotCXUzMiBiY25hX29wdGlvblsyXTsgLyogQkNOQSBQb3J0ICsgTUFDIEFkZHIgKi8KLQl1MzIgcnBfdzsgICAgICAgIC8qIERlcml2YXRpdmUgV2VpZ2h0LCBmPTMgKi8KLQl1MzIgcnBfZ2k7ICAgICAgIC8qIEluY3JlYXNlIEdhaW4sIGY9MTIgKi8KLQl1MzIgcnBfZ2Q7ICAgICAgIC8qIERlY3JlYXNlIEdhaW4sIGY9MTIgKi8KLQl1MzIgcnBfcnU7ICAgICAgIC8qIFJhdGUgVW5pdCAqLwotCXUzMiBycF9hbHBoYTsgICAgLyogTWF4IERlY3JlYXNlIEZhY3RvciwgZj0xMiAqLwotCXUzMiBycF9iZXRhOyAgICAgLyogTWF4IEluY3JlYXNlIEZhY3RvciwgZj0xMiAqLwotCXUzMiBycF9yaTsgICAgICAgLyogSW5pdGlhbCBSYXRlICovCi0JdTMyIHJwX3RkOyAgICAgICAvKiBEcmlmdCBJbnRlcnZhbCBUaW1lciAqLwotCXUzMiBycF9yZDsgICAgICAgLyogRHJpZnQgSW5jcmVhc2UgKi8KLQl1MzIgcnBfdG1heDsgICAgIC8qIFNldmVyZSBDb25nZXN0aW9uIEJhY2tvZmYgVGltZXIgUmFuZ2UgKi8KLQl1MzIgcnBfcm1pbjsgICAgIC8qIFNldmVyZSBDb25nZXN0aW9uIFJlc3RhcnQgUmF0ZSAqLwotCXUzMiBycF93cnR0OyAgICAgLyogUlRUIE1vdmluZyBBdmVyYWdlIFdlaWdodCAqLworc3RydWN0IGRjYl9udW1fdGNzIHsKKwl1OCBwZ190Y3M7CisJdTggcGZjX3RjczsKIH07CiAKIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnIHsKLQlzdHJ1Y3QgYmNuX2NvbmZpZyBiY247Ci0KKwlzdHJ1Y3QgZGNiX3N1cHBvcnQgc3VwcG9ydDsKKwlzdHJ1Y3QgZGNiX251bV90Y3MgbnVtX3RjczsKIAlzdHJ1Y3QgdGNfY29uZmlndXJhdGlvbiB0Y19jb25maWdbTUFYX1RSQUZGSUNfQ0xBU1NdOwogCXU4ICAgICBid19wZXJjZW50YWdlWzJdW01BWF9CV19HUk9VUF07IC8qIE9uZSBlYWNoIGZvciBUeC9SeCAqLwotCi0JYm9vbCAgcm91bmRfcm9iaW5fZW5hYmxlOworCWJvb2wgICBwZmNfbW9kZV9lbmFibGU7CisJYm9vbCAgIHJvdW5kX3JvYmluX2VuYWJsZTsKIAogCWVudW0gZGNiX3J4X3BiYV9jZmcgcnhfcGJhX2NmZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYwppbmRleCAyYzA0NmIwLi42MjIwNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTI5OCw3ICsyOTgsNiBAQAogCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKIAlyZWcgJj0gfklYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CiAJLyogY29ycmVjdCB0aGUgcmVwb3J0aW5nIG9mIG91ciBmbG93IGNvbnRyb2wgc3RhdHVzICovCi0JaHctPmZjLnR5cGUgPSBpeGdiZV9mY19ub25lOwogCXJlZyB8PSBJWEdCRV9STUNTX1RGQ0VfUFJJT1JJVFk7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9STUNTLCByZWcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oCmluZGV4IDFlNmEzMTMuLmViYmU1M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBiNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMKQEAgLTAsMCArMSw0NjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKKyNpbmNsdWRlICJpeGdiZV9kY2IuaCIKKyNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTkuaCIKKworLyoqCisgKiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5IC0gUmV0dXJucyBzdGF0dXMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcworICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQHN0YXRzOiBwb2ludGVyIHRvIHN0YXRpc3RpY3Mgc3RydWN0dXJlCisgKiBAdGNfY291bnQ6ICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYndnX2FycmF5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RhdHVzIGRhdGEgZm9yIGVhY2ggb2YgdGhlIFRyYWZmaWMgQ2xhc3NlcyBpbiB1c2UuCisgKi8KK3MzMiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpCit7CisJaW50IHRjOworCisJaWYgKHRjX2NvdW50ID4gTUFYX1RSQUZGSUNfQ0xBU1MpCisJCXJldHVybiBEQ0JfRVJSX1BBUkFNOworCS8qIFN0YXRpc3RpY3MgcGVydGFpbmluZyB0byBlYWNoIHRyYWZmaWMgY2xhc3MgKi8KKwlmb3IgKHRjID0gMDsgdGMgPCB0Y19jb3VudDsgdGMrKykgeworCQkvKiBUcmFuc21pdHRlZCBQYWNrZXRzICovCisJCXN0YXRzLT5xcHRjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBUQyh0YykpOworCQkvKiBUcmFuc21pdHRlZCBCeXRlcyAqLworCQlzdGF0cy0+cWJ0Y1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCVEModGMpKTsKKwkJLyogUmVjZWl2ZWQgUGFja2V0cyAqLworCQlzdGF0cy0+cXByY1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkModGMpKTsKKwkJLyogUmVjZWl2ZWQgQnl0ZXMgKi8KKwkJc3RhdHMtPnFicmNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlJDKHRjKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkgLSBSZXR1cm4gQ0JGQyBzdGF0dXMgZGF0YQorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQHN0YXRzOiBwb2ludGVyIHRvIHN0YXRpc3RpY3Mgc3RydWN0dXJlCisgKiBAdGNfY291bnQ6ICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYndnX2FycmF5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQ0JGQyBzdGF0dXMgZGF0YSBmb3IgZWFjaCBvZiB0aGUgVHJhZmZpYyBDbGFzc2VzLgorICovCitzMzIgaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHRjX2NvdW50KQoreworCWludCB0YzsKKworCWlmICh0Y19jb3VudCA+IE1BWF9UUkFGRklDX0NMQVNTKQorCQlyZXR1cm4gRENCX0VSUl9QQVJBTTsKKwlmb3IgKHRjID0gMDsgdGMgPCB0Y19jb3VudDsgdGMrKykgeworCQkvKiBQcmlvcml0eSBYT0ZGIFRyYW5zbWl0dGVkICovCisJCXN0YXRzLT5weG9mZnR4Y1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BYT0ZGVFhDKHRjKSk7CisJCS8qIFByaW9yaXR5IFhPRkYgUmVjZWl2ZWQgKi8KKwkJc3RhdHMtPnB4b2ZmcnhjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPRkZSWENOVCh0YykpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkgLSBDb25maWd1cmUgRENCIHBhY2tldCBidWZmZXJzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBwYWNrZXQgYnVmZmVycyBmb3IgRENCIG1vZGUuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIHZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNjRLQjsKKwl1OCAgaSA9IDA7CisKKwkvKiBTZXR1cCBSeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCisJc3dpdGNoIChkY2JfY29uZmlnLT5yeF9wYmFfY2ZnKSB7CisJY2FzZSBwYmFfODBfNDg6CisJCS8qIFNldHVwIHRoZSBmaXJzdCBmb3VyIGF0IDgwS0IgKi8KKwkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV84MEtCOworCQlmb3IgKDsgaSA8IDQ7IGkrKykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKKwkJLyogU2V0dXAgdGhlIGxhc3QgZm91ciBhdCA0OEtCLi4uZG9uJ3QgcmUtaW5pdCBpICovCisJCXZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNDhLQjsKKwkJLyogRmFsbCBUaHJvdWdoICovCisJY2FzZSBwYmFfZXF1YWw6CisJZGVmYXVsdDoKKwkJZm9yICg7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKKworCQkvKiBTZXR1cCBUeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCisJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCU0laRShpKSwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCU0laRV8yMEtCKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlRIUkVTSChpKSwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCVEhSRVNIX0RDQik7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5IC0gQ29uZmlnIFJ4IERhdGEgYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgUnggUGFja2V0IEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzdHJ1Y3QgdGNfYndfYWxsb2MgICAgKnA7CisJdTMyICAgIHJlZyAgICAgICAgICAgPSAwOworCXUzMiAgICBjcmVkaXRfcmVmaWxsID0gMDsKKwl1MzIgICAgY3JlZGl0X21heCAgICA9IDA7CisJdTggICAgIGkgICAgICAgICAgICAgPSAwOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCBJWEdCRV9SVFJQQ1NfQVJCRElTKTsKKworCS8qIE1hcCBhbGwgdHJhZmZpYyBjbGFzc2VzIHRvIHRoZWlyIFVQLCAxIHRvIDEgKi8KKwlyZWcgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKQorCQlyZWcgfD0gKGkgPDwgKGkgKiBJWEdCRV9SVFJVUDJUQ19VUF9TSElGVCkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSVVAyVEMsIHJlZyk7CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1JYX0NPTkZJR107CisKKwkJY3JlZGl0X3JlZmlsbCA9IHAtPmRhdGFfY3JlZGl0c19yZWZpbGw7CisJCWNyZWRpdF9tYXggICAgPSBwLT5kYXRhX2NyZWRpdHNfbWF4OworCQlyZWcgPSBjcmVkaXRfcmVmaWxsIHwgKGNyZWRpdF9tYXggPDwgSVhHQkVfUlRSUFQ0Q19NQ0xfU0hJRlQpOworCisJCXJlZyB8PSAodTMyKShwLT5id2dfaWQpIDw8IElYR0JFX1JUUlBUNENfQldHX1NISUZUOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUUlBUNENfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUFQ0QyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBSeCBwYWNrZXQgcGxhbmUgKHJlY3ljbGUgbW9kZTsgV1NQKSBhbmQKKwkgKiBlbmFibGUgYXJiaXRlcgorCSAqLworCXJlZyA9IElYR0JFX1JUUlBDU19SUk0gfCBJWEdCRV9SVFJQQ1NfUkFDOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkgLSBDb25maWcgVHggRGVzYy4gYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgVHggRGVzY3JpcHRvciBBcmJpdGVyIGFuZCBjcmVkaXRzIGZvciBlYWNoIHRyYWZmaWMgY2xhc3MuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXN0cnVjdCB0Y19id19hbGxvYyAqcDsKKwl1MzIgICAgcmVnLCBtYXhfY3JlZGl0czsKKwl1OCAgICAgaTsKKworCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgSVhHQkVfUlRURENTX0FSQkRJUyk7CisKKwkvKiBDbGVhciB0aGUgcGVyLVR4IHF1ZXVlIGNyZWRpdHM7IHdlIHVzZSBwZXItVEMgaW5zdGVhZCAqLworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREVDFDLCAwKTsKKwl9CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1RYX0NPTkZJR107CisJCW1heF9jcmVkaXRzID0gZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLmRlc2NfY3JlZGl0c19tYXg7CisJCXJlZyA9IG1heF9jcmVkaXRzIDw8IElYR0JFX1JUVERUMkNfTUNMX1NISUZUOworCQlyZWcgfD0gcC0+ZGF0YV9jcmVkaXRzX3JlZmlsbDsKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRURFQyQ19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2dyb3VwKQorCQkJcmVnIHw9IElYR0JFX1JUVERUMkNfR1NQOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUVERUMkNfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFQyQyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBUeCBkZXNjcmlwdG9yIHBsYW5lIChyZWN5Y2xlIG1vZGU7IFdTUCkgYW5kCisJICogZW5hYmxlIGFyYml0ZXIKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFREQ1NfVERQQUMgfCBJWEdCRV9SVFREQ1NfVERSTTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcmVnKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5IC0gQ29uZmlnIFR4IERhdGEgYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgVHggUGFja2V0IEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJc3RydWN0IHRjX2J3X2FsbG9jICpwOworCXUzMiByZWc7CisJdTggaTsKKworCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBDUywgSVhHQkVfUlRUUENTX0FSQkRJUyk7CisKKwkvKiBNYXAgYWxsIHRyYWZmaWMgY2xhc3NlcyB0byB0aGVpciBVUCwgMSB0byAxICovCisJcmVnID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKKwkJcmVnIHw9IChpIDw8IChpICogSVhHQkVfUlRUVVAyVENfVVBfU0hJRlQpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFVQMlRDLCByZWcpOworCisJLyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3MgY3JlZGl0cyBhbmQgcHJpb3JpdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgeworCQlwID0gJmRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5wYXRoW0RDQl9UWF9DT05GSUddOworCQlyZWcgPSBwLT5kYXRhX2NyZWRpdHNfcmVmaWxsOworCQlyZWcgfD0gKHUzMikocC0+ZGF0YV9jcmVkaXRzX21heCkgPDwgSVhHQkVfUlRUUFQyQ19NQ0xfU0hJRlQ7CisJCXJlZyB8PSAodTMyKShwLT5id2dfaWQpIDw8IElYR0JFX1JUVFBUMkNfQldHX1NISUZUOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19ncm91cCkKKwkJCXJlZyB8PSBJWEdCRV9SVFRQVDJDX0dTUDsKKworCQlpZiAocC0+cHJpb190eXBlID09IHByaW9fbGluaykKKwkJCXJlZyB8PSBJWEdCRV9SVFRQVDJDX0xTUDsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBUMkMoaSksIHJlZyk7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgVHggcGFja2V0IHBsYW5lIChyZWN5Y2xlIG1vZGU7IFNQOyBhcmIgZGVsYXkpIGFuZAorCSAqIGVuYWJsZSBhcmJpdGVyCisJICovCisJcmVnID0gSVhHQkVfUlRUUENTX1RQUEFDIHwgSVhHQkVfUlRUUENTX1RQUk0gfAorCSAgICAgIChJWEdCRV9SVFRQQ1NfQVJCRF9EQ0IgPDwgSVhHQkVfUlRUUENTX0FSQkRfU0hJRlQpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkgLSBDb25maWd1cmUgcHJpb3JpdHkgZmxvdyBjb250cm9sCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBQcmlvcml0eSBGbG93IENvbnRyb2wgKFBGQykgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJdTMyIGksIHJlZzsKKworCS8qIElmIFBGQyBpcyBkaXNhYmxlZCBnbG9iYWxseSB0aGVuIGZhbGwgYmFjayB0byBMRkMuICovCisJaWYgKCFkY2JfY29uZmlnLT5wZmNfbW9kZV9lbmFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspCisJCQlody0+bWFjLm9wcy5zZXR1cF9mYyhodywgaSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIENvbmZpZ3VyZSBQRkMgVHggdGhyZXNob2xkcyBwZXIgVEMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgeworCQkvKiBDb25maWcgYW5kIHJlbWVtYmVyIFR4ICovCisJCWlmIChkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF9mdWxsIHx8CisJCSAgICBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF90eCkgeworCQkJcmVnID0gaHctPmZjLmhpZ2hfd2F0ZXIgfCBJWEdCRV9GQ1JUSF9GQ0VOOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShpKSwgcmVnKTsKKwkJCXJlZyA9IGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShpKSwgcmVnKTsKKwkJfSBlbHNlIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEhfODI1OTkoaSksIDApOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShpKSwgMCk7CisJCX0KKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IGh3LT5mYy5wYXVzZV90aW1lIHwgKGh3LT5mYy5wYXVzZV90aW1lIDw8IDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgKE1BWF9UUkFGRklDX0NMQVNTIC8gMik7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihpKSwgcmVnKTsKKworCS8qIENvbmZpZ3VyZSBmbG93IGNvbnRyb2wgcmVmcmVzaCB0aHJlc2hvbGQgdmFsdWUgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCBody0+ZmMucGF1c2VfdGltZSAvIDIpOworCisJLyogRW5hYmxlIFRyYW5zbWl0IFBGQyAqLworCXJlZyA9IElYR0JFX0ZDQ0ZHX1RGQ0VfUFJJT1JJVFk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ0NGRywgcmVnKTsKKworCS8qCisJICogRW5hYmxlIFJlY2VpdmUgUEZDCisJICogV2Ugd2lsbCBhbHdheXMgaG9ub3IgWE9GRiBmcmFtZXMgd2UgcmVjZWl2ZSB3aGVuCisJICogd2UgYXJlIGluIFBGQyBtb2RlLgorCSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CisJcmVnICY9IH5JWEdCRV9NRkxDTl9SRkNFOworCXJlZyB8PSBJWEdCRV9NRkxDTl9SUEZDRTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01GTENOLCByZWcpOworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkgLSBDb25maWcgdHJhZmZpYyBjbGFzcyBzdGF0aXN0aWNzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHF1ZXVlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLCBhbGwgcXVldWVzIGJlbG9uZ2luZyB0byBzYW1lIHRyYWZmaWMKKyAqIGNsYXNzIHVzZXMgYSBzaW5nbGUgc2V0IG9mIHF1ZXVlIHN0YXRpc3RpY3MgY291bnRlcnMuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHJlZyA9IDA7CisJdTggIGkgICA9IDA7CisKKwkvKgorCSAqIFJlY2VpdmUgUXVldWVzIHN0YXRzIHNldHRpbmcKKwkgKiAzMiBSUVNNUiByZWdpc3RlcnMsIGVhY2ggY29uZmlndXJpbmcgNCBxdWV1ZXMuCisJICogU2V0IGFsbCAxNiBxdWV1ZXMgb2YgZWFjaCBUQyB0byB0aGUgc2FtZSBzdGF0CisJICogd2l0aCBUQyAnbicgZ29pbmcgdG8gc3RhdCAnbicuCisJICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJcmVnID0gMHgwMTAxMDEwMSAqIChpIC8gNCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlFTTVIoaSksIHJlZyk7CisJfQorCS8qCisJICogVHJhbnNtaXQgUXVldWVzIHN0YXRzIHNldHRpbmcKKwkgKiAzMiBUUVNNIHJlZ2lzdGVycywgZWFjaCBjb250cm9sbGluZyA0IHF1ZXVlcy4KKwkgKiBTZXQgYWxsIHF1ZXVlcyBvZiBlYWNoIFRDIHRvIHRoZSBzYW1lIHN0YXQKKwkgKiB3aXRoIFRDICduJyBnb2luZyB0byBzdGF0ICduJy4KKwkgKiBUeCBxdWV1ZXMgYXJlIGFsbG9jYXRlZCBub24tdW5pZm9ybWx5IHRvIFRDczoKKwkgKiAzMiwgMzIsIDE2LCAxNiwgOCwgOCwgOCwgOC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoaSA8IDgpCisJCQlyZWcgPSAweDAwMDAwMDAwOworCQllbHNlIGlmIChpIDwgMTYpCisJCQlyZWcgPSAweDAxMDEwMTAxOworCQllbHNlIGlmIChpIDwgMjApCisJCQlyZWcgPSAweDAyMDIwMjAyOworCQllbHNlIGlmIChpIDwgMjQpCisJCQlyZWcgPSAweDAzMDMwMzAzOworCQllbHNlIGlmIChpIDwgMjYpCisJCQlyZWcgPSAweDA0MDQwNDA0OworCQllbHNlIGlmIChpIDwgMjgpCisJCQlyZWcgPSAweDA1MDUwNTA1OworCQllbHNlIGlmIChpIDwgMzApCisJCQlyZWcgPSAweDA2MDYwNjA2OworCQllbHNlCisJCQlyZWcgPSAweDA3MDcwNzA3OworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RRU00oaSksIHJlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ184MjU5OSAtIENvbmZpZ3VyZSBnZW5lcmFsIERDQiBwYXJhbWV0ZXJzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBnZW5lcmFsIERDQiBwYXJhbWV0ZXJzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiByZWc7CisJdTMyIHE7CisKKwkvKiBEaXNhYmxlIHRoZSBUeCBkZXNjIGFyYml0ZXIgc28gdGhhdCBNVFFDIGNhbiBiZSBjaGFuZ2VkICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JUVERDUyk7CisJcmVnIHw9IElYR0JFX1JUVERDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJlZyk7CisKKwkvKiBFbmFibGUgRENCIGZvciBSeCB3aXRoIDggVENzICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01SUUMpOworCXN3aXRjaCAocmVnICYgSVhHQkVfTVJRQ19NUlFFX01BU0spIHsKKwljYXNlIDA6CisJY2FzZSBJWEdCRV9NUlFDX1JUNFRDRU46CisJCS8qIFJTUyBkaXNhYmxlZCBjYXNlcyAqLworCQlyZWcgPSAocmVnICYgfklYR0JFX01SUUNfTVJRRV9NQVNLKSB8IElYR0JFX01SUUNfUlQ4VENFTjsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9NUlFDX1JTU0VOOgorCWNhc2UgSVhHQkVfTVJRQ19SVFJTUzRUQ0VOOgorCQkvKiBSU1MgZW5hYmxlZCBjYXNlcyAqLworCQlyZWcgPSAocmVnICYgfklYR0JFX01SUUNfTVJRRV9NQVNLKSB8IElYR0JFX01SUUNfUlRSU1M4VENFTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5zdXBwb3J0ZWQgdmFsdWUsIGFzc3VtZSBzdGFsZSBkYXRhLCBvdmVyd3JpdGUgbm8gUlNTICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVDhUQ0VOOworCX0KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIHJlZyk7CisKKwkvKiBFbmFibGUgRENCIGZvciBUeCB3aXRoIDggVENzICovCisJcmVnID0gSVhHQkVfTVRRQ19SVF9FTkEgfCBJWEdCRV9NVFFDXzhUQ184VFE7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCByZWcpOworCisJLyogRGlzYWJsZSBkcm9wIGZvciBhbGwgcXVldWVzICovCisJZm9yIChxID0gMDsgcSA8IDEyODsgcSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1FERSwgcSA8PCBJWEdCRV9RREVfSURYX1NISUZUKTsKKworCS8qIEVuYWJsZSB0aGUgVHggZGVzYyBhcmJpdGVyICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JUVERDUyk7CisJcmVnICY9IH5JWEdCRV9SVFREQ1NfQVJCRElTOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OSAtIENvbmZpZ3VyZSBhbmQgZW5hYmxlIERDQgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgZGNiIHNldHRpbmdzIGFuZCBlbmFibGUgZGNiIG1vZGUuCisgKi8KK3MzMiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnXzgyNTk5KGh3KTsKKwlpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnX3R4X2RhdGFfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoaHcpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1ZTI4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5oCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9EQ0JfODI1OTlfQ09ORklHX0hfCisjZGVmaW5lIF9EQ0JfODI1OTlfQ09ORklHX0hfCisKKy8qIERDQiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVERQQUMgICAgICAweDAwMDAwMDAxIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBXU1AgLSBXZWlnaHRlZCBTdHJpY3QgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1ZNUEFDICAgICAgMHgwMDAwMDAwMiAvKiAwIFJvdW5kIFJvYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgV1JSIC0gV2VpZ2h0ZWQgUm91bmQgUm9iaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1REUk0gICAgICAgMHgwMDAwMDAxMCAvKiBUcmFuc21pdCBSZWN5Y2xlIE1vZGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBEQ0IgYXJiaXRlciBkaXNhYmxlICovCisjZGVmaW5lIElYR0JFX1JUVERDU19CRFBNICAgICAgIDB4MDA0MDAwMDAgLyogQnlwYXNzIERhdGEgUGlwZSAtIG11c3QgY2xlYXIhICovCisjZGVmaW5lIElYR0JFX1JUVERDU19CUEJGU00gICAgIDB4MDA4MDAwMDAgLyogQnlwYXNzIFBCIEZyZWUgU3BhY2UgLSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsZWFyIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1NQRUVEX0NIRyAgMHg4MDAwMDAwMCAvKiBMaW5rIHNwZWVkIGNoYW5nZSAqLworCisvKiBSZWNlaXZlIFVQMlRDIG1hcHBpbmcgKi8KKyNkZWZpbmUgSVhHQkVfUlRSVVAyVENfVVBfU0hJRlQgMworLyogVHJhbnNtaXQgVVAyVEMgbWFwcGluZyAqLworI2RlZmluZSBJWEdCRV9SVFRVUDJUQ19VUF9TSElGVCAzCisKKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19NQ0xfU0hJRlQgMTIgLyogT2Zmc2V0IHRvIE1heCBDcmVkaXQgTGltaXQgc2V0dGluZyAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRDX0JXR19TSElGVCA5ICAvKiBPZmZzZXQgdG8gQldHIGluZGV4ICovCisjZGVmaW5lIElYR0JFX1JUUlBUNENfR1NQICAgICAgIDB4NDAwMDAwMDAgLyogR1NQIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19MU1AgICAgICAgMHg4MDAwMDAwMCAvKiBMU1AgZW5hYmxlIGJpdCAqLworCisjZGVmaW5lIElYR0JFX1JEUlhDVExfTVBCRU4gICAgIDB4MDAwMDAwMTAgLyogRE1BIGNvbmZpZyBmb3IgbXVsdGlwbGUgcGFja2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnVmZmVycyBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9NQ0VOICAgICAgMHgwMDAwMDA0MCAvKiBETUEgY29uZmlnIGZvciBtdWx0aXBsZSBjb3JlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChSU1MpIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBSVFJQQ1MgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JUUlBDU19SUk0gICAgICAgIDB4MDAwMDAwMDIgLyogUmVjZWl2ZSBSZWN5Y2xlIE1vZGUgZW5hYmxlICovCisvKiBSZWNlaXZlIEFyYml0cmF0aW9uIENvbnRyb2w6IDAgUm91bmQgUm9iaW4sIDEgREZQICovCisjZGVmaW5lIElYR0JFX1JUUlBDU19SQUMgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfUlRSUENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBBcmJpdHJhdGlvbiBkaXNhYmxlIGJpdCAqLworCisvKiBSVFREVDJDIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9SVFREVDJDX01DTF9TSElGVCAxMgorI2RlZmluZSBJWEdCRV9SVFREVDJDX0JXR19TSElGVCA5CisjZGVmaW5lIElYR0JFX1JUVERUMkNfR1NQICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlRURFQyQ19MU1AgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfTUNMX1NISUZUIDEyCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfQldHX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19HU1AgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9SVFRQVDJDX0xTUCAgICAgICAweDgwMDAwMDAwCisKKy8qIFJUVFBDUyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX1RQUEFDICAgICAgMHgwMDAwMDAyMCAvKiAwIFJvdW5kIFJvYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgU1AgLSBTdHJpY3QgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBBcmJpdGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX1RQUk0gICAgICAgMHgwMDAwMDEwMCAvKiBUcmFuc21pdCBSZWN5Y2xlIE1vZGUgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX1JUVFBDU19BUkJEX1NISUZUIDIyCisjZGVmaW5lIElYR0JFX1JUVFBDU19BUkJEX0RDQiAgIDB4NCAgICAgICAgLyogQXJiaXRyYXRpb24gZGVsYXkgaW4gRENCIG1vZGUgKi8KKworI2RlZmluZSBJWEdCRV9UWFBCU0laRV8yMEtCICAgICAweDAwMDA1MDAwIC8qIDIwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9UWFBCU0laRV80MEtCICAgICAweDAwMDBBMDAwIC8qIDQwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV80OEtCICAgICAweDAwMDBDMDAwIC8qIDQ4S0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV82NEtCICAgICAweDAwMDEwMDAwIC8qIDY0S0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV84MEtCICAgICAweDAwMDE0MDAwIC8qIDgwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV8xMjhLQiAgICAweDAwMDIwMDAwIC8qIDEyOEtCIFBhY2tldCBCdWZmZXIgKi8KKworI2RlZmluZSBJWEdCRV9UWFBCVEhSRVNIX0RDQiAgICAweEEgICAgICAgIC8qIFRIUkVTSCB2YWx1ZSBmb3IgRENCIG1vZGUgKi8KKworCisvKiBEQ0IgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIEFQSXMgKi8KKworLyogRENCIFBGQyBmdW5jdGlvbnMgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKTsKK3MzMiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpOworCisvKiBEQ0IgdHJhZmZpYyBjbGFzcyBzdGF0cyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfZGNiX2dldF90Y19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2h3X3N0YXRzICpzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHRjX2NvdW50KTsKKworLyogRENCIGNvbmZpZyBhcmJpdGVycyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CisKKworLyogRENCIGh3IGluaXRpYWxpemF0aW9uICovCitzMzIgaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmNvbmZpZyk7CisKKyNlbmRpZiAvKiBfRENCXzgyNTk5X0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCmluZGV4IDQxMjk5NzY5Li4wYTg3MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgQklUX1BHX1JYCTB4MDQKICNkZWZpbmUgQklUX1BHX1RYCTB4MDgKICNkZWZpbmUgQklUX0JDTiAgICAgICAgIDB4MTAKKyNkZWZpbmUgQklUX0xJTktTUEVFRCAgIDB4ODAKIAogaW50IGl4Z2JlX2NvcHlfZGNiX2NmZyhzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqc3JjX2RjYl9jZmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkc3RfZGNiX2NmZywgaW50IHRjX21heCkKQEAgLTg5LDI1ICs5MCw2IEBACiAJCQlzcmNfZGNiX2NmZy0+dGNfY29uZmlnW2kgLSBEQ0JfUEZDX1VQX0FUVFJfMF0uZGNiX3BmYzsKIAl9CiAKLQlmb3IgKGkgPSBEQ0JfQkNOX0FUVFJfUlBfMDsgaSA8IERDQl9CQ05fQVRUUl9SUF9BTEw7IGkrKykgewotCQlkc3RfZGNiX2NmZy0+YmNuLnJwX2FkbWluX21vZGVbaSAtIERDQl9CQ05fQVRUUl9SUF8wXSA9Ci0JCQlzcmNfZGNiX2NmZy0+YmNuLnJwX2FkbWluX21vZGVbaSAtIERDQl9CQ05fQVRUUl9SUF8wXTsKLQl9Ci0JZHN0X2RjYl9jZmctPmJjbi5iY25hX29wdGlvblswXSA9IHNyY19kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMF07Ci0JZHN0X2RjYl9jZmctPmJjbi5iY25hX29wdGlvblsxXSA9IHNyY19kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMV07Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9hbHBoYSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfYWxwaGE7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9iZXRhID0gc3JjX2RjYl9jZmctPmJjbi5ycF9iZXRhOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfZ2QgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2dkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfZ2kgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2dpOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfdG1heCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfdG1heDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3RkID0gc3JjX2RjYl9jZmctPmJjbi5ycF90ZDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3JtaW4gPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JtaW47Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF93ID0gc3JjX2RjYl9jZmctPmJjbi5ycF93OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcmQgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcnUgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3J1OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfd3J0dCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfd3J0dDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3JpID0gc3JjX2RjYl9jZmctPmJjbi5ycF9yaTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMjAsMTIgKzEwMiw2IEBACiAJcmV0dXJuICEhKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk7CiB9CiAKLXN0YXRpYyB1MTYgaXhnYmVfZGNiX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qIEFsbCB0cmFmZmljIHNob3VsZCBkZWZhdWx0IHRvIGNsYXNzIDAgKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU4IGl4Z2JlX2RjYm5sX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBzdGF0ZSkKIHsKIAl1OCBlcnIgPSAwOwpAQCAtMTUzLDggKzEyOSw4IEBACiAJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwogCQlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKIAkJYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7Ci0JCW5ldGRldi0+c2VsZWN0X3F1ZXVlID0gJml4Z2JlX2RjYl9zZWxlY3RfcXVldWU7CiAKKwkJYWRhcHRlci0+aHcuZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19wZmM7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JTU19FTkFCTEVEOwogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwogCQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CkBAIC0xNjMsNiArMTM5LDcgQEAKIAl9IGVsc2UgewogCQkvKiBUdXJuIG9mZiBEQ0IgKi8KIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQkJYWRhcHRlci0+aHcuZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19kZWZhdWx0OwogCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7CiAJCQlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKQEAgLTE3Miw3ICsxNDksNiBAQAogCQkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CiAJCQlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKIAkJCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOwotCQkJbmV0ZGV2LT5zZWxlY3RfcXVldWUgPSBOVUxMOwogCiAJCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKIAkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CkBAIC00NDQsMTc1ICs0MjAsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZ2V0YmNucnAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW9yaXR5LAotCQkJCSAgdTggKnNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9hZG1pbl9tb2RlW3ByaW9yaXR5XTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRiY25jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGVudW1faW5kZXgsCi0JCQkJICB1MzIgKnNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0Jc3dpdGNoIChlbnVtX2luZGV4KSB7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8wOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CQ05BXzE6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMV07Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0FMUEhBOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FscGhhOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CRVRBOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2JldGE7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dEOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9HSToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9naTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVE1BWDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90bWF4OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9URDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90ZDsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUk1JTjoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ybWluOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3c7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JEOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SVToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ydTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfV1JUVDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93cnR0OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SSToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9yaTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnNldHRpbmcgPSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX3NldGJjbnJwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSwKLQkJCQkgdTggc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldID0gc2V0dGluZzsKLQotCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldICE9Ci0JICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldKQotCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotfQotCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9zZXRiY25jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGVudW1faW5kZXgsCi0JCQkJIHUzMiBzZXR0aW5nKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXN3aXRjaCAoZW51bV9pbmRleCkgewotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdICE9Ci0JCQlhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdICE9Ci0JCQlhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0FMUEhBOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FscGhhID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWxwaGEgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FscGhhKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkVUQToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9iZXRhID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYmV0YSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYmV0YSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dEOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2dkID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2QgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dkKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0k6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2kgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9naSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2kpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9UTUFYOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RtYXggPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90bWF4ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90bWF4KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVEQ6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdGQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90ZCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdGQpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9STUlOOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JtaW4gPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ybWluICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ybWluKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVzoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93ID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdyAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdykKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JEOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JkID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmQgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JkKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUlU6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcnUgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ydSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcnUpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XUlRUOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3dydHQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93cnR0ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93cnR0KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkk6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmkgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yaSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmkpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KIHN0cnVjdCBkY2JubF9ydG5sX29wcyBkY2JubF9vcHMgPSB7CiAJLmdldHN0YXRlCT0gaXhnYmVfZGNibmxfZ2V0X3N0YXRlLAogCS5zZXRzdGF0ZQk9IGl4Z2JlX2RjYm5sX3NldF9zdGF0ZSwKQEAgLTYzMyw5ICs0NDAsNSBAQAogCS5zZXRudW10Y3MJPSBpeGdiZV9kY2JubF9zZXRudW10Y3MsCiAJLmdldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfZ2V0cGZjc3RhdGUsCiAJLnNldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfc2V0cGZjc3RhdGUsCi0JLmdldGJjbmNmZyAgICAgID0gaXhnYmVfZGNibmxfZ2V0YmNuY2ZnLAotCS5nZXRiY25ycCAgICAgICA9IGl4Z2JlX2RjYm5sX2dldGJjbnJwLAotCS5zZXRiY25jZmcgICAgICA9IGl4Z2JlX2RjYm5sX3NldGJjbmNmZywKLQkuc2V0YmNucnAgICAgICAgPSBpeGdiZV9kY2JubF9zZXRiY25ycAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDY3Zjg3YTcuLjE4ZWNiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC04OSw4ICs4OSw3IEBACiAJeyJyeF9oZWFkZXJfc3BsaXQiLCBJWEdCRV9TVEFUKHJ4X2hkcl9zcGxpdCl9LAogCXsiYWxsb2NfcnhfcGFnZV9mYWlsZWQiLCBJWEdCRV9TVEFUKGFsbG9jX3J4X3BhZ2VfZmFpbGVkKX0sCiAJeyJhbGxvY19yeF9idWZmX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpfSwKLQl7Imxyb19hZ2dyZWdhdGVkIiwgSVhHQkVfU1RBVChscm9fYWdncmVnYXRlZCl9LAotCXsibHJvX2ZsdXNoZWQiLCBJWEdCRV9TVEFUKGxyb19mbHVzaGVkKX0sCisJeyJyeF9ub19kbWFfcmVzb3VyY2VzIiwgSVhHQkVfU1RBVChod19yeF9ub19kbWFfcmVzb3VyY2VzKX0sCiB9OwogCiAjZGVmaW5lIElYR0JFX1FVRVVFX1NUQVRTX0xFTiBcCkBAIC0xMzIsNiArMTMxLDI2IEBACiAJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwogCiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCX0gZWxzZSBpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lKSB7CisJCS8qIFNldCBhcyBGSUJSRSB1bnRpbCBTRVJERVMgZGVmaW5lZCBpbiBrZXJuZWwgKi8KKwkJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCVNVUFBPUlRFRF9GSUJSRSk7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWJyZWFrOworCQljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBTVVBQT1JURURfRklCUkUpOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCQlicmVhazsKKwkJfQogCX0gZWxzZSB7CiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfRklCUkU7CiAJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKQEAgLTIwNiwxMyArMjI1LDEzIEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlwYXVzZS0+YXV0b25lZyA9IChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19mdWxsID8gMSA6IDApOworCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfZnVsbCA/IDEgOiAwKTsKIAotCWlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCWlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7Ci0JfSBlbHNlIGlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY190eF9wYXVzZSkgeworCX0gZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY190eF9wYXVzZSkgewogCQlwYXVzZS0+dHhfcGF1c2UgPSAxOwotCX0gZWxzZSBpZiAoaHctPmZjLnR5cGUgPT0gaXhnYmVfZmNfZnVsbCkgeworCX0gZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19mdWxsKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CiAJCXBhdXNlLT50eF9wYXVzZSA9IDE7CiAJfQpAQCAtMjI2LDIyICsyNDUsMTcgQEAKIAogCWlmICgocGF1c2UtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHx8CiAJICAgIChwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKSkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY19mdWxsOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19mdWxsOwogCWVsc2UgaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19yeF9wYXVzZTsKIAllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY190eF9wYXVzZTsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfdHhfcGF1c2U7CiAJZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX25vbmU7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCWVsc2UKLQkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CisJaHctPm1hYy5vcHMuc2V0dXBfZmMoaHcsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTYsNyArNDcwLDcgQEAKIAlyZWdzX2J1ZmZbODI1XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JUDZBVCk7CiAJcmVnc19idWZmWzgyNl0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfV1VQTCk7CiAJcmVnc19idWZmWzgyN10gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfV1VQTSk7Ci0JcmVnc19idWZmWzgyOF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkhGVCk7CisJcmVnc19idWZmWzgyOF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkhGVCgwKSk7CiAKIAlyZWdzX2J1ZmZbODI5XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKIAlyZWdzX2J1ZmZbODMwXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EUE1DUyk7CkBAIC02NjEsMTAgKzY3NSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJY2hhciBmaXJtd2FyZV92ZXJzaW9uWzMyXTsKIAogCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCBpeGdiZV9kcml2ZXJfbmFtZSwgMzIpOwogCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgaXhnYmVfZHJpdmVyX3ZlcnNpb24sIDMyKTsKLQlzdHJuY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCAzMik7CisKKwlzcHJpbnRmKGZpcm13YXJlX3ZlcnNpb24sICIlZC4lZC0lZCIsCisJICAgICAgICAoYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweEYwMDApID4+IDEyLAorCSAgICAgICAgKGFkYXB0ZXItPmVlcHJvbV92ZXJzaW9uICYgMHgwRkYwKSA+PiA0LAorCSAgICAgICAgYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweDAwMEYpOworCisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCBmaXJtd2FyZV92ZXJzaW9uLCAzMik7CiAJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksIDMyKTsKIAlkcnZpbmZvLT5uX3N0YXRzID0gSVhHQkVfU1RBVFNfTEVOOwogCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gaXhnYmVfZ2V0X3JlZ3NfbGVuKG5ldGRldik7CkBAIC04MDgsMTUgKzgyOSw2IEBACiAJaW50IHN0YXRfY291bnQgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1NjQpOwogCWludCBqLCBrOwogCWludCBpOwotCXU2NCBhZ2dyZWdhdGVkID0gMCwgZmx1c2hlZCA9IDAsIG5vX2Rlc2MgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJYWdncmVnYXRlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQkJZmx1c2hlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQkJbm9fZGVzYyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKLQl9Ci0JYWRhcHRlci0+bHJvX2FnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVkOwotCWFkYXB0ZXItPmxyb19mbHVzaGVkID0gZmx1c2hlZDsKLQlhZGFwdGVyLT5scm9fbm9fZGVzYyA9IG5vX2Rlc2M7CiAKIAlpeGdiZV91cGRhdGVfc3RhdHMoYWRhcHRlcik7CiAJZm9yIChpID0gMDsgaSA8IElYR0JFX0dMT0JBTF9TVEFUU19MRU47IGkrKykgewpAQCAtODk3LDEyICs5MDksNTAgQEAKIHN0YXRpYyB2b2lkIGl4Z2JlX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewotCXdvbC0+c3VwcG9ydGVkID0gMDsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwKKwkgICAgICAgICAgICAgICAgIFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOwogCXdvbC0+d29sb3B0cyA9IDA7CiAKKwlpZiAoIWRldmljZV9jYW5fd2FrZXVwKCZhZGFwdGVyLT5wZGV2LT5kZXYpKQorCQlyZXR1cm47CisKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19FWCkKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfVUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIElYR0JFX1dVRkNfTUMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01DQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX0JDKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9CQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19NQUcpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworCiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IGl4Z2JlX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlhZGFwdGVyLT53b2wgPSAwOworCisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX0VYOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKQorCQlhZGFwdGVyLT53b2wgfD0gSVhHQkVfV1VGQ19NQzsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfQkM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX01BRzsKKworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTk2NSw0MCArMTAxNSw0NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBpOwogCiAJaWYgKGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpCiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0ud29ya19saW1pdCA9IGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CiAKIAlpZiAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gMSkgeworCQkvKiBjaGVjayB0aGUgbGltaXRzICovCisJCWlmICgoMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3MgPiBJWEdCRV9NQVhfSU5UX1JBVEUpIHx8CisJCSAgICAoMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3MgPCBJWEdCRV9NSU5fSU5UX1JBVEUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJLyogc3RvcmUgdGhlIHZhbHVlIGluIGludHMvc2Vjb25kICovCiAJCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAxMDAwMDAwL2VjLT5yeF9jb2FsZXNjZV91c2VjczsKIAogCQkvKiBzdGF0aWMgdmFsdWUgb2YgaW50ZXJydXB0IHJhdGUgKi8KIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwotCQkvKiBjbGVhciB0aGUgbG93ZXIgYml0ICovCisJCS8qIGNsZWFyIHRoZSBsb3dlciBiaXQgYXMgaXRzIHVzZWQgZm9yIGR5bmFtaWMgc3RhdGUgKi8KIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgJj0gfjE7CiAJfSBlbHNlIGlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPT0gMSkgewogCQkvKiAxIG1lYW5zIGR5bmFtaWMgbW9kZSAqLwogCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gMjAwMDA7CiAJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMTsKIAl9IGVsc2UgewotCQkvKiBhbnkgb3RoZXIgdmFsdWUgbWVhbnMgZGlzYWJsZSBlaXRyLCB3aGljaCBpcyBiZXN0Ci0JCSAqIHNlcnZlZCBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgcmF0ZSB2ZXJ5IGhpZ2ggKi8KLQkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDMwMDAwMDA7CisJCS8qCisJCSAqIGFueSBvdGhlciB2YWx1ZSBtZWFucyBkaXNhYmxlIGVpdHIsIHdoaWNoIGlzIGJlc3QKKwkJICogc2VydmVkIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCByYXRlIHZlcnkgaGlnaAorCQkgKi8KKwkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IElYR0JFX01BWF9JTlRfUkFURTsKIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAwOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsgaSsrKSB7CiAJCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSAmYWRhcHRlci0+cV92ZWN0b3JbaV07CiAJCWlmIChxX3ZlY3Rvci0+dHhyX2NvdW50ICYmICFxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJLyogdHggdmVjdG9yIGdldHMgaGFsZiB0aGUgcmF0ZSAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSAoYWRhcHRlci0+ZWl0cl9wYXJhbSA+PiAxKTsKIAkJZWxzZQogCQkJLyogcnggb25seSBvciBtaXhlZCAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoaSksCi0JCSAgICAgICAgICAgICAgICBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcocV92ZWN0b3ItPmVpdHIpKTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCBpLAorCQkgICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTAxMiw2ICsxMDY5LDcgQEAKIAkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGl4Z2JlX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MgICAgICAgICAgICAgICA9IGl4Z2JlX2dldF9yZWdzLAogCS5nZXRfd29sICAgICAgICAgICAgICAgID0gaXhnYmVfZ2V0X3dvbCwKKwkuc2V0X3dvbCAgICAgICAgICAgICAgICA9IGl4Z2JlX3NldF93b2wsCiAJLm53YXlfcmVzZXQgICAgICAgICAgICAgPSBpeGdiZV9ud2F5X3Jlc2V0LAogCS5nZXRfbGluayAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4gICAgICAgICA9IGl4Z2JlX2dldF9lZXByb21fbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDVkMzY0YTkuLjc5YWE4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00NywxMiArNDcsMTMgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMy4zMC1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC44LWsyIgogY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047Ci1zdGF0aWMgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4iOworc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppeGdiZV9pbmZvX3RibFtdID0gewogCVtib2FyZF84MjU5OF0gPSAmaXhnYmVfODI1OThfaW5mbywKKwlbYm9hcmRfODI1OTldID0gJml4Z2JlXzgyNTk5X2luZm8sCiB9OwogCiAvKiBpeGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQpAQCAtNjQsNiArNjUsOCBAQAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmVfcGNpX3RibFtdID0geworCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4KSwKKwkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFGX0RVQUxfUE9SVCksCiAJIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThBRl9TSU5HTEVfUE9SVCksCkBAIC04Miw2ICs4NSwxMiBAQAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4RUJfU0ZQX0xPTSksCiAJIGJvYXJkXzgyNTk4IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThfQlgpLAorCSBib2FyZF84MjU5OCB9LAorCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk5X0tYNCksCisJIGJvYXJkXzgyNTk5IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfU0ZQKSwKKwkgYm9hcmRfODI1OTkgfSwKIAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCwgfQpAQCAtMTI1LDE3ICsxMzQsNTMgQEAKIAkgICAgICAgICAgICAgICAgY3RybF9leHQgfCBJWEdCRV9DVFJMX0VYVF9EUlZfTE9BRCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdmFyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgaW50X2FsbG9jX2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbXNpeF92ZWN0b3IpCisvKgorICogaXhnYmVfc2V0X2l2YXIgLSBzZXQgdGhlIElWQVIgcmVnaXN0ZXJzLCBtYXBwaW5nIGludGVycnVwdCBjYXVzZXMgdG8gdmVjdG9ycworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEBkaXJlY3Rpb246IDAgZm9yIFJ4LCAxIGZvciBUeCwgLTEgZm9yIG90aGVyIGNhdXNlcworICogQHF1ZXVlOiBxdWV1ZSB0byBtYXAgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHRvCisgKiBAbXNpeF92ZWN0b3I6IHRoZSB2ZWN0b3IgdG8gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlCisgKgorICovCitzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXZhcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgczggZGlyZWN0aW9uLAorCSAgICAgICAgICAgICAgICAgICB1OCBxdWV1ZSwgdTggbXNpeF92ZWN0b3IpCiB7CiAJdTMyIGl2YXIsIGluZGV4OwotCi0JbXNpeF92ZWN0b3IgfD0gSVhHQkVfSVZBUl9BTExPQ19WQUw7Ci0JaW5kZXggPSAoaW50X2FsbG9jX2VudHJ5ID4+IDIpICYgMHgxRjsKLQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSKGluZGV4KSk7Ci0JaXZhciAmPSB+KDB4RkYgPDwgKDggKiAoaW50X2FsbG9jX2VudHJ5ICYgMHgzKSkpOwotCWl2YXIgfD0gKG1zaXhfdmVjdG9yIDw8ICg4ICogKGludF9hbGxvY19lbnRyeSAmIDB4MykpKTsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSKGluZGV4KSwgaXZhcik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQlpZiAoZGlyZWN0aW9uID09IC0xKQorCQkJZGlyZWN0aW9uID0gMDsKKwkJaW5kZXggPSAoKChkaXJlY3Rpb24gKiA2NCkgKyBxdWV1ZSkgPj4gMikgJiAweDFGOworCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lWQVIoaW5kZXgpKTsKKwkJaXZhciAmPSB+KDB4RkYgPDwgKDggKiAocXVldWUgJiAweDMpKSk7CisJCWl2YXIgfD0gKG1zaXhfdmVjdG9yIDw8ICg4ICogKHF1ZXVlICYgMHgzKSkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0lWQVIoaW5kZXgpLCBpdmFyKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJaWYgKGRpcmVjdGlvbiA9PSAtMSkgeworCQkJLyogb3RoZXIgY2F1c2VzICovCisJCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJCWluZGV4ID0gKChxdWV1ZSAmIDEpICogOCk7CisJCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSX01JU0MpOworCQkJaXZhciAmPSB+KDB4RkYgPDwgaW5kZXgpOworCQkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfSVZBUl9NSVNDLCBpdmFyKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogdHggb3IgcnggY2F1c2VzICovCisJCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJCWluZGV4ID0gKCgxNiAqIChxdWV1ZSAmIDEpKSArICg4ICogZGlyZWN0aW9uKSk7CisJCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lWQVIocXVldWUgPj4gMSkpOworCQkJaXZhciAmPSB+KDB4RkYgPDwgaW5kZXgpOworCQkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JVkFSKHF1ZXVlID4+IDEpLCBpdmFyKTsKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTIwMCwzOSArMjQ1LDM5IEBACiAjZGVmaW5lIERFU0NfTkVFREVEIChUWERfVVNFX0NPVU5UKElYR0JFX01BWF9EQVRBX1BFUl9UWEQpIC8qIHNrYi0+ZGF0YSAqLyArIFwKIAlNQVhfU0tCX0ZSQUdTICogVFhEX1VTRV9DT1VOVChQQUdFX1NJWkUpICsgMSkgLyogZm9yIGNvbnRleHQgKi8KIAotI2RlZmluZSBHRVRfVFhfSEVBRF9GUk9NX1JJTkcocmluZykgKFwKLQkqKHZvbGF0aWxlIHUzMiAqKSBcCi0JKCh1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqKShyaW5nKS0+ZGVzYyArIChyaW5nKS0+Y291bnQpKQogc3RhdGljIHZvaWQgaXhnYmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAogLyoqCiAgKiBpeGdiZV9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHR4X3Jpbmc6IHR4IHJpbmcgdG8gY2xlYW4KKyAqCisgKiByZXR1cm5zIHRydWUgaWYgdHJhbnNtaXQgd29yayBpcyBkb25lCiAgKiovCiBzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl90eF9pcnEoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcpCiB7Ci0JdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2M7Ci0Jc3RydWN0IGl4Z2JlX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBpOwotCXUzMiBoZWFkLCBvbGRoZWFkOwotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MsICplb3BfZGVzYzsKKwlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwl1bnNpZ25lZCBpbnQgaSwgZW9wLCBjb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CiAKLQlybWIoKTsKLQloZWFkID0gR0VUX1RYX0hFQURfRlJPTV9SSU5HKHR4X3JpbmcpOwotCWhlYWQgPSBsZTMyX3RvX2NwdShoZWFkKTsKIAlpID0gdHhfcmluZy0+bmV4dF90b19jbGVhbjsKLQl3aGlsZSAoMSkgewotCQl3aGlsZSAoaSAhPSBoZWFkKSB7CisJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCisJd2hpbGUgKChlb3BfZGVzYy0+d2Iuc3RhdHVzICYgY3B1X3RvX2xlMzIoSVhHQkVfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT53b3JrX2xpbWl0KSkgeworCQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwkJZm9yICggOyAhY2xlYW5lZDsgY291bnQrKykgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CiAJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOwogCQkJc2tiID0gdHhfYnVmZmVyX2luZm8tPnNrYjsKIAotCQkJaWYgKHNrYikgeworCQkJaWYgKGNsZWFuZWQgJiYgc2tiKSB7CiAJCQkJdW5zaWduZWQgaW50IHNlZ3MsIGJ5dGVjb3VudDsKIAogCQkJCS8qIGdzb19zZWdzIGlzIGN1cnJlbnRseSBvbmx5IHZhbGlkIGZvciB0Y3AgKi8KQEAgLTI0NywyMyArMjkyLDE3IEBACiAJCQlpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhfYnVmZmVyX2luZm8pOwogCisJCQl0eF9kZXNjLT53Yi5zdGF0dXMgPSAwOworCiAJCQlpKys7CiAJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKIAkJCQlpID0gMDsKLQotCQkJY291bnQrKzsKLQkJCWlmIChjb3VudCA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlnb3RvIGRvbmVfY2xlYW5pbmc7CiAJCX0KLQkJb2xkaGVhZCA9IGhlYWQ7Ci0JCXJtYigpOwotCQloZWFkID0gR0VUX1RYX0hFQURfRlJPTV9SSU5HKHR4X3JpbmcpOwotCQloZWFkID0gbGUzMl90b19jcHUoaGVhZCk7Ci0JCWlmIChoZWFkID09IG9sZGhlYWQpCi0JCQlnb3RvIGRvbmVfY2xlYW5pbmc7Ci0JfSAvKiB3aGlsZSAoMSkgKi8KIAotZG9uZV9jbGVhbmluZzoKKwkJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwkJZW9wX2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgZW9wKTsKKwl9CisKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKIAogI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKQpAQCAtMjkxLDE3ICszMzAsMTYgQEAKIAl9CiAKIAkvKiByZS1hcm0gdGhlIGludGVycnVwdCAqLwotCWlmICgodG90YWxfcGFja2V0cyA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KSB8fAotCSAgICAoY291bnQgPT0gdHhfcmluZy0+Y291bnQpKQorCWlmIChjb3VudCA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KQogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCB0eF9yaW5nLT52X2lkeCk7CiAKIAl0eF9yaW5nLT50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT50b3RhbF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7Ci0JdHhfcmluZy0+c3RhdHMuYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CiAJdHhfcmluZy0+c3RhdHMucGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOworCXR4X3JpbmctPnN0YXRzLmJ5dGVzICs9IHRvdGFsX2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwotCXJldHVybiAodG90YWxfcGFja2V0cyA/IHRydWUgOiBmYWxzZSk7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPndvcmtfbGltaXQpOwogfQogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQpAQCAtMzE0LDEzICszNTIsMTkgQEAKIAogCWlmIChyeF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSk7Ci0JCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLOwotCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0s7CisJCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJcnhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJcnhjdHJsIHw9IElYR0JFX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CiAJCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19SUk9fRU4pOwogCQlyeGN0cmwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfV1JPX0VOIHwKLQkJCSAgICBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7CisJCSAgICAgICAgICAgIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOKTsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSwgcnhjdHJsKTsKIAkJcnhfcmluZy0+Y3B1ID0gY3B1OwogCX0KQEAgLTMzNiw4ICszODAsMTQgQEAKIAogCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSk7Ci0JCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwotCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7CisJCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQl0eGN0cmwgfD0gSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSwgdHhjdHJsKTsKIAkJdHhfcmluZy0+Y3B1ID0gY3B1OwpAQCAtNDAzLDIzICs0NTMsMjEgQEAKICAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1cAogICogQHJ4X2Rlc2M6IHJ4IGRlc2NyaXB0b3IKICAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX3JlY2VpdmVfc2tiKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorc3RhdGljIHZvaWQgaXhnYmVfcmVjZWl2ZV9za2Ioc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCiB7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmcV92ZWN0b3ItPm5hcGk7CiAJYm9vbCBpc192bGFuID0gKHN0YXR1cyAmIElYR0JFX1JYRF9TVEFUX1ZQKTsKIAl1MTYgdGFnID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbik7CiAKLQlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPICYmCi0JICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHFfdmVjdG9yIC0gJmFkYXB0ZXItPnFfdmVjdG9yWzBdKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKIAkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4gJiYgKHRhZyAhPSAwKSkKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3IsIHNrYiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmxncnAsIHRhZywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfZGVzYyk7CisJCQl2bGFuX2dyb19yZWNlaXZlKG5hcGksIGFkYXB0ZXItPnZsZ3JwLCB0YWcsIHNrYik7CiAJCWVsc2UKLQkJCWxyb19yZWNlaXZlX3NrYigmcmluZy0+bHJvX21nciwgc2tiLCByeF9kZXNjKTsKLQkJcmluZy0+bHJvX3VzZWQgPSB0cnVlOworCQkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCX0gZWxzZSB7CiAJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9ORVRQT0xMKSkgewogCQkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4gJiYgKHRhZyAhPSAwKSkKQEAgLTQ3MCw2ICs1MTgsMTkgQEAKIAlhZGFwdGVyLT5od19jc3VtX3J4X2dvb2QrKzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX3JlbGVhc2VfcnhfZGVzYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywgdTMyIHZhbCkKK3sKKwkvKgorCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93CisJICoga25vdyB0aGVyZSBhcmUgbmV3IGRlc2NyaXB0b3JzIHRvIGZldGNoLiAgKE9ubHkKKwkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAorCSAqIHN1Y2ggYXMgSUEtNjQpLgorCSAqLworCXdtYigpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRUKHJ4X3JpbmctPnJlZ19pZHgpLCB2YWwpOworfQorCiAvKioKICAqIGl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBwYWNrZXQgc3BsaXQKICAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC00ODIsNiArNTQzLDcgQEAKIAl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKIAlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpiaTsKIAl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYnVmc3ogPSByeF9yaW5nLT5yeF9idWZfbGVuICsgTkVUX0lQX0FMSUdOOwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fdXNlOwogCWJpID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOwpAQCAtNTExLDkgKzU3Myw3IEBACiAKIAkJaWYgKCFiaS0+c2tiKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIChyeF9yaW5nLT5yeF9idWZfbGVuICsKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIE5FVF9JUF9BTElHTikpOworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsIGJ1ZnN6KTsKIAogCQkJaWYgKCFza2IpIHsKIAkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwpAQCAtNTI4LDggKzU4OCw3IEBACiAJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAKIAkJCWJpLT5za2IgPSBza2I7Ci0JCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCisJCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBidWZzeiwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9CiAJCS8qIFJlZnJlc2ggdGhlIGRlc2MgZXZlbiBpZiBidWZmZXJfYWRkcnMgZGlkbid0IGNoYW5nZSBiZWNhdXNlCkBAIC01NTMsMTQgKzYxMiw3IEBACiAJCWlmIChpLS0gPT0gMCkKIAkJCWkgPSAocnhfcmluZy0+Y291bnQgLSAxKTsKIAotCQkvKgotCQkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdwotCQkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQotCQkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAotCQkgKiBzdWNoIGFzIElBLTY0KS4KLQkJICovCi0JCXdtYigpOwotCQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOworCQlpeGdiZV9yZWxlYXNlX3J4X2Rlc2MoJmFkYXB0ZXItPmh3LCByeF9yaW5nLCBpKTsKIAl9CiB9CiAKQEAgLTU3NCwxMCArNjI2LDExIEBACiAJcmV0dXJuIHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5wa3RfaW5mbzsKIH0KIAotc3RhdGljIGJvb2wgaXhnYmVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorc3RhdGljIGJvb2wgaXhnYmVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQogeworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGl4Z2JlX3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKQEAgLTY3OCw3ICs3MzEsNyBAQAogCQl0b3RhbF9yeF9wYWNrZXRzKys7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKLQkJaXhnYmVfcmVjZWl2ZV9za2IoYWRhcHRlciwgc2tiLCBzdGF0ZXJyLCByeF9yaW5nLCByeF9kZXNjKTsKKwkJaXhnYmVfcmVjZWl2ZV9za2IocV92ZWN0b3IsIHNrYiwgc3RhdGVyciwgcnhfZGVzYyk7CiAKIG5leHRfZGVzYzoKIAkJcnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yID0gMDsKQEAgLTY5NiwxMSArNzQ5LDYgQEAKIAkJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAJfQogCi0JaWYgKHJ4X3JpbmctPmxyb191c2VkKSB7Ci0JCWxyb19mbHVzaF9hbGwoJnJ4X3JpbmctPmxyb19tZ3IpOwotCQlyeF9yaW5nLT5scm9fdXNlZCA9IGZhbHNlOwotCX0KLQogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCWNsZWFuZWRfY291bnQgPSBJWEdCRV9ERVNDX1VOVVNFRChyeF9yaW5nKTsKIApAQCAtNzMxLDcgKzc3OSw4IEBACiAKIAlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAotCS8qIFBvcHVsYXRlIHRoZSBJVkFSIHRhYmxlIGFuZCBzZXQgdGhlIElUUiB2YWx1ZXMgdG8gdGhlCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgSVZBUiB0YWJsZSBhbmQgc2V0IHRoZSBJVFIgdmFsdWVzIHRvIHRoZQogCSAqIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIuCiAJICovCiAJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CkBAIC03NDIsNyArNzkxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NTIsNyArODAxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NjEsMTUgKzgxMCwyMyBAQAogCQkvKiBpZiB0aGlzIGlzIGEgdHggb25seSB2ZWN0b3IgaGFsdmUgdGhlIGludGVycnVwdCByYXRlICovCiAJCWlmIChxX3ZlY3Rvci0+dHhyX2NvdW50ICYmICFxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJcV92ZWN0b3ItPmVpdHIgPSAoYWRhcHRlci0+ZWl0cl9wYXJhbSA+PiAxKTsKLQkJZWxzZQorCQllbHNlIGlmIChxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJLyogcnggb25seSAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwogCisJCS8qCisJCSAqIHNpbmNlIHRoaXMgaXMgaW5pdGlhbCBzZXQgdXAgZG9uJ3QgbmVlZCB0byBjYWxsCisJCSAqIGl4Z2JlX3dyaXRlX2VpdHIgaGVscGVyCisJCSAqLwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwKIAkJICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOwogCX0KIAotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfT1RIRVJfQ0FVU0VTX0lOREVYLCB2X2lkeCk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAtMSwgSVhHQkVfSVZBUl9PVEhFUl9DQVVTRVNfSU5ERVgsCisJCSAgICAgICAgICAgICAgIHZfaWR4KTsKKwllbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgLTEsIDEsIHZfaWR4KTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgMTk1MCk7CiAKIAkvKiBzZXQgdXAgdG8gYXV0b2NsZWFyIHRpbWVyLCBhbmQgdGhlIHZlY3RvcnMgKi8KQEAgLTg0NSwxMCArOTAyLDM1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBpeGdiZV93cml0ZV9laXRyIC0gd3JpdGUgRUlUUiByZWdpc3RlciBpbiBoYXJkd2FyZSBzcGVjaWZpYyB3YXkKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0CisgKiBAdl9pZHg6IHZlY3RvciBpbmRleCBpbnRvIHFfdmVjdG9yIGFycmF5CisgKiBAaXRyX3JlZzogbmV3IHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gKnJlZ2lzdGVyKiBmb3JtYXQsIG5vdCBpbnRzL3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1hZGUgdG8gYmUgY2FsbGVkIGJ5IGV0aHRvb2wgYW5kIGJ5IHRoZSBkcml2ZXIKKyAqIHdoZW4gaXQgbmVlZHMgdG8gdXBkYXRlIEVJVFIgcmVnaXN0ZXJzIGF0IHJ1bnRpbWUuICBIYXJkd2FyZQorICogc3BlY2lmaWMgcXVpcmtzL2RpZmZlcmVuY2VzIGFyZSB0YWtlbiBjYXJlIG9mIGhlcmUuCisgKi8KK3ZvaWQgaXhnYmVfd3JpdGVfZWl0cihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LCB1MzIgaXRyX3JlZykKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KKwkJaXRyX3JlZyB8PSAoaXRyX3JlZyA8PCAxNik7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKgorCQkgKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW4KKwkJICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0CisJCSAqLworCQlpdHJfcmVnIHw9IElYR0JFX0VJVFJfQ05UX1dESVM7CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcpOworfQorCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyX21zaXgoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIG5ld19pdHI7CiAJdTggY3VycmVudF9pdHIsIHJldF9pdHI7CiAJaW50IGksIHJfaWR4LCB2X2lkeCA9ICgodm9pZCAqKXFfdmVjdG9yIC0gKHZvaWQgKikoYWRhcHRlci0+cV92ZWN0b3IpKSAvCkBAIC05MDMsMTQgKzk4NSwxMyBAQAogCiAJaWYgKG5ld19pdHIgIT0gcV92ZWN0b3ItPmVpdHIpIHsKIAkJdTMyIGl0cl9yZWc7CisKKwkJLyogc2F2ZSB0aGUgYWxnb3JpdGhtIHZhbHVlIGhlcmUsIG5vdCB0aGUgc21vb3RoZWQgb25lICovCisJCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKIAkJLyogZG8gYW4gZXhwb25lbnRpYWwgc21vb3RoaW5nICovCiAJCW5ld19pdHIgPSAoKHFfdmVjdG9yLT5laXRyICogOTApLzEwMCkgKyAoKG5ld19pdHIgKiAxMCkvMTAwKTsKLQkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQlpdHJfcmVnID0gRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKG5ld19pdHIpOwotCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KLQkJRFBSSU5USyhUWF9FUlIsIERFQlVHLCAid3JpdGluZyBlaXRyKCVkKTogJTA4WFxuIiwgdl9pZHgsCi0JCSAgICAgICAgaXRyX3JlZyk7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgaXRyX3JlZyk7CiAJfQogCiAJcmV0dXJuOwpAQCAtOTI4LDYgKzEwMDksMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGl4Z2JlX2NoZWNrX3NmcF9ldmVudChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVpY3IpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMSkgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMSk7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJfSBlbHNlIGlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMikgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMik7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCX0gZWxzZSB7CisJCS8qIEludGVycnVwdCBpc24ndCBmb3IgdXMuLi4gKi8KKwkJcmV0dXJuOworCX0KK30KKwogc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfbHNjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC05NDYsMTMgKzEwNDUsMjUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKKwl1MzIgZWljcjsKKworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgU2lsaWNvbiBlcnJhdGEuICBVc2UgY2xlYXItYnktd3JpdGUgaW5zdGVhZAorCSAqIG9mIGNsZWFyLWJ5LXJlYWQuICBSZWFkaW5nIHdpdGggRUlDUyB3aWxsIHJldHVybiB0aGUKKwkgKiBpbnRlcnJ1cHQgY2F1c2VzIHdpdGhvdXQgY2xlYXJpbmcsIHdoaWNoIGxhdGVyIGJlIGRvbmUKKwkgKiB3aXRoIHRoZSB3cml0ZSB0byBFSUNSLgorCSAqLworCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUlDUyk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBlaWNyKTsKIAogCWlmIChlaWNyICYgSVhHQkVfRUlDUl9MU0MpCiAJCWl4Z2JlX2NoZWNrX2xzYyhhZGFwdGVyKTsKIAotCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTVMsIElYR0JFX0VJTVNfT1RIRVIpOwogCkBAIC0xMDE1LDcgKzExMjYsNyBAQAogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhpcyB2ZWN0b3Igb25seSAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIHJ4X3JpbmctPnZfaWR4KTsKLQluZXRpZl9yeF9zY2hlZHVsZSgmcV92ZWN0b3ItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnFfdmVjdG9yLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEwNTIsMTIgKzExNjMsMTIgQEAKIAkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByeF9yaW5nKTsKICNlbmRpZgogCi0JaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCiAJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHJfbXNpeChxX3ZlY3Rvcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgcnhfcmluZy0+dl9pZHgpOwpAQCAtMTA5NSw3ICsxMjA2LDcgQEAKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKLQkJaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJCWl4Z2JlX2NsZWFuX3J4X2lycShxX3ZlY3RvciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAkJZW5hYmxlX21hc2sgfD0gcnhfcmluZy0+dl9pZHg7CiAJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKIAkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC0xMTA1LDggKzEyMTYsOCBAQAogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKIAkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQogCQkJaXhnYmVfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBlbmFibGVfbWFzayk7CkBAIC0xMjc2LDcgKzEzODcsNiBAQAogCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yOwogCXU4IGN1cnJlbnRfaXRyOwogCXUzMiBuZXdfaXRyID0gcV92ZWN0b3ItPmVpdHI7CkBAIC0xMzExLDM1ICsxNDIxLDE5IEBACiAKIAlpZiAobmV3X2l0ciAhPSBxX3ZlY3Rvci0+ZWl0cikgewogCQl1MzIgaXRyX3JlZzsKKworCQkvKiBzYXZlIHRoZSBhbGdvcml0aG0gdmFsdWUgaGVyZSwgbm90IHRoZSBzbW9vdGhlZCBvbmUgKi8KKwkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KIAkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOwotCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7Ci0JCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoMCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCAwLCBpdHJfcmVnKTsKIAl9CiAKIAlyZXR1cm47CiB9CiAKIC8qKgotICogaXhnYmVfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCB+MCk7Ci0JSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7IGkrKykKLQkJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKLQl9IGVsc2UgewotCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKLQl9Ci19Ci0KLS8qKgogICogaXhnYmVfaXJxX2VuYWJsZSAtIEVuYWJsZSBkZWZhdWx0IGludGVycnVwdCBnZW5lcmF0aW9uIHNldHRpbmdzCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KQEAgLTEzNDksNyArMTQ0MywyMSBAQAogCW1hc2sgPSBJWEdCRV9FSU1TX0VOQUJMRV9NQVNLOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSkKIAkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAxOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQltYXNrIHw9IElYR0JFX0VJTVNfRUNDOworCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMjsKKwl9CisKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBtYXNrKTsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJLyogZW5hYmxlIHRoZSByZXN0IG9mIHRoZSBxdWV1ZSB2ZWN0b3JzICovCisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVNfRVgoMSksCisJCSAgICAgICAgICAgICAgICAoSVhHQkVfRUlNU19SVFhfUVVFVUUgPDwgMTYpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgyKSwKKwkJICAgICAgICAgICAgICAgICgoSVhHQkVfRUlNU19SVFhfUVVFVUUgPDwgMTYpIHwKKwkJICAgICAgICAgICAgICAgICAgSVhHQkVfRUlNU19SVFhfUVVFVUUpKTsKKwl9CiAJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIH0KIApAQCAtMTM2NSw2ICsxNDczLDEyIEBACiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgZWljcjsKIAorCS8qCisJICogV29ya2Fyb3VuZCBmb3Igc2lsaWNvbiBlcnJhdGEuICBNYXNrIHRoZSBpbnRlcnJ1cHRzCisJICogYmVmb3JlIHRoZSByZWFkIG9mIEVJQ1IuCisJICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1DLCBJWEdCRV9JUlFfQ0xFQVJfTUFTSyk7CisKIAkvKiBmb3IgTkFQSSwgdXNpbmcgRUlBTSB0byBhdXRvLW1hc2sgdHgvcnggaW50ZXJydXB0IGJpdHMgb24gcmVhZAogCSAqIHRoZXJlZm9yZSBubyBleHBsaWN0IGludGVycnVwdCBkaXNhYmxlIGlzIG5lY2Vzc2FyeSAqLwogCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUlDUik7CkBAIC0xMzc5LDE1ICsxNDkzLDE4IEBACiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykKIAkJaXhnYmVfY2hlY2tfbHNjKGFkYXB0ZXIpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOworCiAJaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5xX3ZlY3RvclswXS5uYXBpKSkgewogCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX2J5dGVzID0gMDsKIAkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9ieXRlcyA9IDA7CiAJCS8qIHdvdWxkIGRpc2FibGUgaW50ZXJydXB0cyBoZXJlIGJ1dCBFSUFNIGRpc2FibGVkIGl0ICovCi0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTE0NTksNiArMTU3NiwzOSBAQAogfQogCiAvKioKKyAqIGl4Z2JlX2lycV9kaXNhYmxlIC0gTWFzayBvZmYgaW50ZXJydXB0IGdlbmVyYXRpb24gb24gdGhlIE5JQworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfaXJxX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgfjApOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DX0VYKDEpLCB+MCk7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMiksIH4wKTsKKwl9CisJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7IGkrKykKKwkJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKKwl9IGVsc2UgeworCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgbWFzayA9IElYR0JFX0VJTVNfUlRYX1FVRVVFOworCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDEpLCBtYXNrIDw8IDE2KTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgyKSwKKwkJICAgICAgICAgICAgICAgIChtYXNrIDw8IDE2IHwgbWFzaykpOworCX0KKwkvKiBza2lwIHRoZSBmbHVzaCAqLworfQorCisvKioKICAqIGl4Z2JlX2NvbmZpZ3VyZV9tc2lfYW5kX2xlZ2FjeSAtIEluaXRpYWxpemUgUElOIChJTlRBLi4uKSBhbmQgTVNJIGludGVycnVwdHMKICAqCiAgKiovCkBAIC0xNDY5LDggKzE2MTksOCBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUigwKSwKIAkgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGFkYXB0ZXItPmVpdHJfcGFyYW0pKTsKIAotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoMCksIDApOwotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoMCksIDApOworCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIDAsIDApOworCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIDAsIDApOwogCiAJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgMCwgMCk7CiAJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgMCwgMCk7CkBAIC0xNDg2LDcgKzE2MzYsNyBAQAogICoqLwogc3RhdGljIHZvaWQgaXhnYmVfY29uZmlndXJlX3R4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXU2NCB0ZGJhLCB0ZHdiYTsKKwl1NjQgdGRiYTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBpLCBqLCB0ZGxlbiwgdHhjdHJsOwogCkBAIC0xNDk5LDExICsxNjQ5LDYgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREJBTChqKSwKIAkJICAgICAgICAgICAgICAgICh0ZGJhICYgRE1BXzMyQklUX01BU0spKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREJBSChqKSwgKHRkYmEgPj4gMzIpKTsKLQkJdGR3YmEgPSByaW5nLT5kbWEgKwotCQkgICAgICAgIChyaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYykpOwotCQl0ZHdiYSB8PSBJWEdCRV9URFdCQUxfSEVBRF9XQl9FTkFCTEU7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERXQkFMKGopLCB0ZHdiYSAmIERNQV8zMkJJVF9NQVNLKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFdCQUgoaiksICh0ZHdiYSA+PiAzMikpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RETEVOKGopLCB0ZGxlbik7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERIKGopLCAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQoaiksIDApOwpAQCAtMTUxNiwyNiArMTY2MSwyNSBAQAogCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChqKSwgdHhjdHJsKTsKIAl9CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKiBXZSBlbmFibGUgOCB0cmFmZmljIGNsYXNzZXMsIERDQiBvbmx5ICovCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIChJWEdCRV9NVFFDX1JUX0VOQSB8CisJCQkgICAgICAgICAgICAgICAgSVhHQkVfTVRRQ184VENfOFRRKSk7CisJfQogfQogCi0jZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQJMgorI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUIDIKIAogc3RhdGljIHZvaWQgaXhnYmVfY29uZmlndXJlX3NycmN0bChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IGluZGV4KQogewogCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nOwogCXUzMiBzcnJjdGw7Ci0JaW50IHF1ZXVlMDsKKwlpbnQgcXVldWUwID0gMDsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAKLQkvKiBwcm9ncmFtIG9uZSBzcnJjdGwgcmVnaXN0ZXIgcGVyIFZNRHEgaW5kZXggKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1ZNRFFfRU5BQkxFRCkgewotCQlsb25nIHNoaWZ0LCBsZW47Ci0JCW1hc2sgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2s7Ci0JCWxlbiA9IHNpemVvZihhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdLm1hc2spICogODsKLQkJc2hpZnQgPSBmaW5kX2ZpcnN0X2JpdCgmbWFzaywgbGVuKTsKLQkJcXVldWUwID0gaW5kZXggJiBtYXNrOwotCQlpbmRleCA9IChpbmRleCAmIG1hc2spID4+IHNoaWZ0OwotCS8qIHByb2dyYW0gb25lIHNycmN0bCBwZXIgUlNTIHF1ZXVlIHNpbmNlIFJEUlhDVEwuTVZNRU4gaXMgZW5hYmxlZCAqLworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlxdWV1ZTAgPSBpbmRleDsKIAl9IGVsc2UgewogCQltYXNrID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5tYXNrOwogCQlxdWV1ZTAgPSBpbmRleCAmIG1hc2s7CkBAIC0xNTUwLDcgKzE2OTQsMTQgQEAKIAlzcnJjdGwgJj0gfklYR0JFX1NSUkNUTF9CU0laRVBLVF9NQVNLOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7Ci0JCXNycmN0bCB8PSBJWEdCRV9SWEJVRkZFUl8yMDQ4ID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKKwkJdTE2IGJ1ZnN6ID0gSVhHQkVfUlhCVUZGRVJfMjA0ODsKKwkJLyogZ3JvdyB0aGUgYW1vdW50IHdlIGNhbiByZWNlaXZlIG9uIGxhcmdlIHBhZ2UgbWFjaGluZXMgKi8KKwkJaWYgKGJ1ZnN6IDwgKFBBR0VfU0laRSAvIDIpKQorCQkJYnVmc3ogPSAoUEFHRV9TSVpFIC8gMik7CisJCS8qIGNhcCB0aGUgYnVmc3ogYXQgb3VyIGxhcmdlc3QgZGVzY3JpcHRvciBzaXplICovCisJCWJ1ZnN6ID0gbWluKCh1MTYpSVhHQkVfTUFYX1JYQlVGRkVSLCBidWZzeik7CisKKwkJc3JyY3RsIHw9IGJ1ZnN6ID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAkJc3JyY3RsIHw9IElYR0JFX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTOwogCQlzcnJjdGwgfD0gKChJWEdCRV9SWF9IRFJfU0laRSA8PAogCQkgICAgICAgICAgICBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUKSAmCkBAIC0xNTY1LDQwICsxNzE2LDExIEBACiAJCQlzcnJjdGwgfD0gcnhfcmluZy0+cnhfYnVmX2xlbiA+PgogCQkJICAgICAgICAgIElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAl9CisKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9TUlJDVEwoaW5kZXgpLCBzcnJjdGwpOwogfQogCiAvKioKLSAqIGl4Z2JlX2dldF9za2JfaGRyIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBMUk8gaGVhZGVyIHByb2Nlc3NpbmcKLSAqIEBza2I6IHBvaW50ZXIgdG8gc2tfYnVmZiB0byBiZSBhZGRlZCB0byBMUk8gcGFja2V0Ci0gKiBAaXBoZHI6IHBvaW50ZXIgdG8gaXAgaGVhZGVyIHN0cnVjdHVyZQotICogQHRjcGg6IHBvaW50ZXIgdG8gdGNwIGhlYWRlciBzdHJ1Y3R1cmUKLSAqIEBoZHJfZmxhZ3M6IHBvaW50ZXIgdG8gaGVhZGVyIGZsYWdzCi0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhCi0gKiovCi1zdGF0aWMgaW50IGl4Z2JlX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwgdm9pZCAqKnRjcGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0gcHJpdjsKLQotCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBJUHY0IFRDUCBwYWNrZXQgKi8KLQlpZiAoISgoaXhnYmVfZ2V0X3BrdF9pbmZvKHJ4X2Rlc2MpICYgSVhHQkVfUlhEQURWX1BLVFRZUEVfSVBWNCkgJiYKLQkgICAgIChpeGdiZV9nZXRfcGt0X2luZm8ocnhfZGVzYykgJiBJWEdCRV9SWERBRFZfUEtUVFlQRV9UQ1ApKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogU2V0IG5ldHdvcmsgaGVhZGVycyAqLwotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2hkcmxlbihza2IpKTsKLQkqaXBoZHIgPSBpcF9oZHIoc2tiKTsKLQkqdGNwaCA9IHRjcF9oZHIoc2tiKTsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFBBR0VfVVNFX0NPVU5UKFMpICgoKFMpID4+IFBBR0VfU0hJRlQpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoUykgJiAoUEFHRV9TSVpFIC0gMSkpID8gMSA6IDApKQotCi0vKioKICAqIGl4Z2JlX2NvbmZpZ3VyZV9yeCAtIENvbmZpZ3VyZSA4MjU5eCBSZWNlaXZlIFVuaXQgYWZ0ZXIgUmVzZXQKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKQEAgLTE2MTYsOCArMTczOCw3IEBACiAJICAgICAgICAgICAgICAgICAgMHhBNTRGMkJFQywgMHhFQTQ5QUY3QywgMHhFMjE0QUQzRCwgMHhCODU1QUFCRSwKIAkgICAgICAgICAgICAgICAgICAweDZBM0U2N0VBLCAweDE0MzY0RDE3LCAweDNCRUQyMDBEfTsKIAl1MzIgZmN0cmwsIGhscmVnMDsKLQl1MzIgcGFnZXM7Ci0JdTMyIHJldGEgPSAwLCBtcnFjOworCXUzMiByZXRhID0gMCwgbXJxYyA9IDA7CiAJdTMyIHJkcnhjdGw7CiAJaW50IHJ4X2J1Zl9sZW47CiAKQEAgLTE2MjcsNiArMTc0OCwxNCBAQAogCS8qIFNldCB0aGUgUlggYnVmZmVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKIAkJcnhfYnVmX2xlbiA9IElYR0JFX1JYX0hEUl9TSVpFOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQkvKiBQU1JUWVBFIG11c3QgYmUgaW5pdGlhbGl6ZWQgaW4gODI1OTkgKi8KKwkJCXUzMiBwc3J0eXBlID0gSVhHQkVfUFNSVFlQRV9UQ1BIRFIgfAorCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX1VEUEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfSVBWNEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfSVBWNkhEUjsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUFNSVFlQRSgwKSwgcHNydHlwZSk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAobmV0ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKQogCQkJcnhfYnVmX2xlbiA9IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFOwpAQCAtMTYzNyw2ICsxNzY2LDcgQEAKIAlmY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRkNUUkwpOwogCWZjdHJsIHw9IElYR0JFX0ZDVFJMX0JBTTsKIAlmY3RybCB8PSBJWEdCRV9GQ1RSTF9EUEY7IC8qIGRpc2NhcmQgcGF1c2UgZnJhbWVzIHdoZW4gRkMgZW5hYmxlZCAqLworCWZjdHJsIHw9IElYR0JFX0ZDVFJMX1BNQ0Y7CiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRkNUUkwsIGZjdHJsKTsKIAogCWhscmVnMCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ITFJFRzApOwpAQCAtMTY0Niw4ICsxNzc2LDYgQEAKIAkJaGxyZWcwIHw9IElYR0JFX0hMUkVHMF9KVU1CT0VOOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSExSRUcwLCBobHJlZzApOwogCi0JcGFnZXMgPSBQQUdFX1VTRV9DT1VOVChhZGFwdGVyLT5uZXRkZXYtPm10dSk7Ci0KIAlyZGxlbiA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0uY291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MpOwogCS8qIGRpc2FibGUgcmVjZWl2ZXMgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KIAlyeGN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKQEAgLTE2NjYsMzcgKzE3OTQsNDQgQEAKIAkJYWRhcHRlci0+cnhfcmluZ1tpXS5oZWFkID0gSVhHQkVfUkRIKGopOwogCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnRhaWwgPSBJWEdCRV9SRFQoaik7CiAJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucnhfYnVmX2xlbiA9IHJ4X2J1Zl9sZW47Ci0JCS8qIEludGl0aWFsIExSTyBTZXR0aW5ncyAqLwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IubWF4X2FnZ3IgPSBJWEdCRV9NQVhfTFJPX0FHR1JFR0FURTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLm1heF9kZXNjID0gSVhHQkVfTUFYX0xST19ERVNDUklQVE9SUzsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gaXhnYmVfZ2V0X3NrYl9oZHI7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5mZWF0dXJlcyA9IExST19GX0VYVFJBQ1RfVkxBTl9JRDsKLQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX05FVFBPTEwpKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmZlYXR1cmVzIHw9IExST19GX05BUEk7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAkJaXhnYmVfY29uZmlndXJlX3NycmN0bChhZGFwdGVyLCBqKTsKIAl9CiAKLQkvKgotCSAqIEZvciBWTURxIHN1cHBvcnQgb2YgZGlmZmVyZW50IGRlc2NyaXB0b3IgdHlwZXMgb3IKLQkgKiBidWZmZXIgc2l6ZXMgdGhyb3VnaCB0aGUgdXNlIG9mIG11bHRpcGxlIFNSUkNUTAotCSAqIHJlZ2lzdGVycywgUkRSWENUTC5NVk1FTiBtdXN0IGJlIHNldCB0byAxCi0JICoKLQkgKiBhbHNvLCB0aGUgbWFudWFsIGRvZXNuJ3QgbWVudGlvbiBpdCBjbGVhcmx5IGJ1dCBEQ0EgaGludHMKLQkgKiB3aWxsIG9ubHkgdXNlIHF1ZXVlIDAncyB0YWdzIHVubGVzcyB0aGlzIGJpdCBpcyBzZXQuICBTaWRlCi0JICogZWZmZWN0cyBvZiBzZXR0aW5nIHRoaXMgYml0IGFyZSBvbmx5IHRoYXQgU1JSQ1RMIG11c3QgYmUKLQkgKiBmdWxseSBwcm9ncmFtbWVkIFswLi4xNV0KLQkgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJgotCSAgICAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8IElYR0JFX0ZMQUdfVk1EUV9FTkFCTEVEKSkgeworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJLyoKKwkJICogRm9yIFZNRHEgc3VwcG9ydCBvZiBkaWZmZXJlbnQgZGVzY3JpcHRvciB0eXBlcyBvcgorCQkgKiBidWZmZXIgc2l6ZXMgdGhyb3VnaCB0aGUgdXNlIG9mIG11bHRpcGxlIFNSUkNUTAorCQkgKiByZWdpc3RlcnMsIFJEUlhDVEwuTVZNRU4gbXVzdCBiZSBzZXQgdG8gMQorCQkgKgorCQkgKiBhbHNvLCB0aGUgbWFudWFsIGRvZXNuJ3QgbWVudGlvbiBpdCBjbGVhcmx5IGJ1dCBEQ0EgaGludHMKKwkJICogd2lsbCBvbmx5IHVzZSBxdWV1ZSAwJ3MgdGFncyB1bmxlc3MgdGhpcyBiaXQgaXMgc2V0LiAgU2lkZQorCQkgKiBlZmZlY3RzIG9mIHNldHRpbmcgdGhpcyBiaXQgYXJlIG9ubHkgdGhhdCBTUlJDVEwgbXVzdCBiZQorCQkgKiBmdWxseSBwcm9ncmFtbWVkIFswLi4xNV0KKwkJICovCiAJCXJkcnhjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkRSWENUTCk7CiAJCXJkcnhjdGwgfD0gSVhHQkVfUkRSWENUTF9NVk1FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMLCByZHJ4Y3RsKTsKIAl9CiAKKwkvKiBQcm9ncmFtIE1SUUMgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgcXVldWVzICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlpbnQgbWFzayA9IGFkYXB0ZXItPmZsYWdzICYgKAorCQkJCUlYR0JFX0ZMQUdfUlNTX0VOQUJMRUQKKwkJCQl8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQKKwkJCQkpOworCisJCXN3aXRjaCAobWFzaykgeworCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKKwkJCW1ycWMgPSBJWEdCRV9NUlFDX1JTU0VOOworCQkJYnJlYWs7CisJCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgorCQkJbXJxYyA9IElYR0JFX01SUUNfUlQ4VENFTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgewogCQkvKiBGaWxsIG91dCByZWRpcmVjdGlvbiB0YWJsZSAqLwogCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDEyODsgaSsrLCBqKyspIHsKQEAgLTE3MTMsMTkgKzE4NDgsMTcgQEAKIAkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JTU1JLKGkpLCBzZWVkW2ldKTsKIAotCQltcnFjID0gSVhHQkVfTVJRQ19SU1NFTgorCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQkJbXJxYyB8PSBJWEdCRV9NUlFDX1JTU0VOOwogCQkgICAgLyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqLwotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0Ci0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVgKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNgotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X0VYX1VEUDsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCBtcnFjKTsKKwkJbXJxYyB8PSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0CisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9UQ1AKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjYKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQOwogCX0KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIG1ycWMpOwogCiAJcnhjc3VtID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1NVTSk7CiAKQEAgLTE3NDIsNiArMTg3NSwxMiBAQAogCX0KIAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDU1VNLCByeGNzdW0pOworCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlyZHJ4Y3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JEUlhDVEwpOworCQlyZHJ4Y3RsIHw9IElYR0JFX1JEUlhDVExfQ1JDU1RSSVA7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRSWENUTCwgcmRyeGN0bCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKQEAgLTE3NzUsNiArMTkxNCw3IEBACiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXUzMiBjdHJsOworCWludCBpLCBqOwogCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWl4Z2JlX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtMTc4NiwxOCArMTkyNiwyNCBAQAogCSAqIG5vdCBpbiBEQ0IgbW9kZS4KIAkgKi8KIAljdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMKTsKLQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FOwotCWN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47Ci0JSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7Ci0JaXhnYmVfdmxhbl9yeF9hZGRfdmlkKG5ldGRldiwgMCk7Ci0KLQlpZiAoZ3JwKSB7Ci0JCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KLQkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCk7Ci0JCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUU7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKIAkJY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOworCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChqKSk7CisJCQljdHJsIHw9IElYR0JFX1JYRENUTF9WTUU7CisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SWERDVEwoaiksIGN0cmwpOworCQl9CiAJfQorCWl4Z2JlX3ZsYW5fcnhfYWRkX3ZpZChuZXRkZXYsIDApOwogCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWl4Z2JlX2lycV9lbmFibGUoYWRhcHRlcik7CkBAIC0xOTYwLDkgKzIxMDYsMjEgQEAKIAl9CiAJLyogRW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwogCXZsbmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxOQ1RSTCk7Ci0JdmxuY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRSB8IElYR0JFX1ZMTkNUUkxfVkZFOwotCXZsbmN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCXZsbmN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKKwkJdmxuY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKKwl9IGVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQl2bG5jdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQkJdmxuY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwoaikpOworCQkJdmxuY3RybCB8PSBJWEdCRV9SWERDVExfVk1FOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwoaiksIHZsbmN0cmwpOworCQl9CisJfQogCWh3LT5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgMCwgMCwgdHJ1ZSk7CiB9CiAKQEAgLTE5OTMsMTMgKzIxNTEsMTE1IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgLSAxKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9pc19zZnAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzd2l0Y2ggKGh3LT5waHkudHlwZSkgeworCWNhc2UgaXhnYmVfcGh5X3NmcF9hdmFnbzoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfZnRsOgorCWNhc2UgaXhnYmVfcGh5X3NmcF9pbnRlbDoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfdW5rbm93bjoKKwljYXNlIGl4Z2JlX3BoeV90d190eWNvOgorCWNhc2UgaXhnYmVfcGh5X3R3X3Vua25vd246CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2xpbmtfY29uZmlnIC0gc2V0IHVwIFNGUCsgbGluaworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdAorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2ZwX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwkJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgeworCQkJLyoKKwkJCSAqIEluIG11bHRpc3BlZWQgZmliZXIgc2V0dXBzLCB0aGUgZGV2aWNlIG1heSBub3QgaGF2ZQorCQkJICogaGFkIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB3aGVuIHRoZSBkcml2ZXIgbG9hZGVkLgorCQkJICogSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgaW5pdGlhbCBsaW5rIGNvbmZpZ3VyYXRpb24KKwkJCSAqIGNvdWxkbid0IGdldCB0aGUgTUFDIGludG8gMTBHIG9yIDFHIG1vZGUsIHNvIHdlJ2xsCisJCQkgKiBuZXZlciBoYXZlIGEgbGluayBzdGF0dXMgY2hhbmdlIGludGVycnVwdCBmaXJlLgorCQkJICogV2UgbmVlZCB0byB0cnkgYW5kIGZvcmNlIGFuIGF1dG9uZWdvdGlhdGlvbgorCQkJICogc2Vzc2lvbiwgdGhlbiBicmluZyB1cCBsaW5rLgorCQkJICovCisJCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQorCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRGlyZWN0IEF0dGFjaCBDdSBhbmQgbm9uLW11bHRpc3BlZWQgZmliZXIgbW9kdWxlcworCQkJICogc3RpbGwgbmVlZCB0byBiZSBjb25maWd1cmVkIHByb3Blcmx5IHByaW9yIHRvCisJCQkgKiBhdHRlbXB0aW5nIGxpbmsuCisJCQkgKi8KKwkJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0spKQorCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCQl9Cit9CisKKy8qKgorICogaXhnYmVfbm9uX3NmcF9saW5rX2NvbmZpZyAtIHNldCB1cCBub24tU0ZQKyBsaW5rCisgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGF1dG9uZWc7CisJYm9vbCBsaW5rX3VwID0gZmFsc2U7CisJdTMyIHJldCA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCisJaWYgKGh3LT5tYWMub3BzLmNoZWNrX2xpbmspCisJCXJldCA9IGh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZhdXRvbmVnLCAmbGlua191cCwgZmFsc2UpOworCisJaWYgKHJldCkKKwkJZ290byBsaW5rX2NmZ19vdXQ7CisKKwlpZiAoaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKQorCQlyZXQgPSBody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcsICZhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh3LT5tYWMuYXV0b25lZyk7CisJaWYgKHJldCkKKwkJZ290byBsaW5rX2NmZ19vdXQ7CisKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKKwkJcmV0ID0gaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgbGlua191cCk7CitsaW5rX2NmZ19vdXQ6CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBJWEdCRV9NQVhfUlhfREVTQ19QT0xMIDEwCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcnhfZGVzY19xdWV1ZV9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnhyKQoreworCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1tyeHJdLnJlZ19pZHg7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTDsgaysrKSB7CisJCWlmIChJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsCisJCSAgICAgICAgICAgICAgICAgICBJWEdCRV9SWERDVEwoaikpICYgSVhHQkVfUlhEQ1RMX0VOQUJMRSkKKwkJCWJyZWFrOworCQllbHNlCisJCQltc2xlZXAoMSk7CisJfQorCWlmIChrID49IElYR0JFX01BWF9SWF9ERVNDX1BPTEwpIHsKKwkJRFBSSU5USyhEUlYsIEVSUiwgIlJYRENUTC5FTkFCTEUgb24gUnggcXVldWUgJWQgIgorCQkgICAgICAgICJub3Qgc2V0IHdpdGhpbiB0aGUgcG9sbGluZyBwZXJpb2RcbiIsIHJ4cik7CisJfQorCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsICZhZGFwdGVyLT5yeF9yaW5nW3J4cl0sCisJICAgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT5yeF9yaW5nW3J4cl0uY291bnQgLSAxKSk7Cit9CisKIHN0YXRpYyBpbnQgaXhnYmVfdXBfY29tcGxldGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBpLCBqID0gMDsKKwlpbnQgbnVtX3J4X3JpbmdzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwlpbnQgZXJyOwogCWludCBtYXhfZnJhbWUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CiAJdTMyIHR4ZGN0bCwgcnhkY3RsLCBtaGFkZDsKKwl1MzIgZG1hdHhjdGw7CiAJdTMyIGdwaWU7CiAKIAlpeGdiZV9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKQEAgLTIwMzEsNiArMjI5MSwxMyBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dQSUUsIGdwaWUpOwogCX0KIAorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJZ3BpZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUElFKTsKKwkJZ3BpZSB8PSBJWEdCRV9TRFAxX0dQSUVOOworCQlncGllIHw9IElYR0JFX1NEUDJfR1BJRU47CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CisJfQorCiAJbWhhZGQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUhBREQpOwogCWlmIChtYXhfZnJhbWUgIT0gKG1oYWRkID4+IElYR0JFX01IQUREX01GU19TSElGVCkpIHsKIAkJbWhhZGQgJj0gfklYR0JFX01IQUREX01GU19NQVNLOwpAQCAtMjA0NCwxMSArMjMxMSwyMyBAQAogCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJLyogZW5hYmxlIFdUSFJFU0g9OCBkZXNjcmlwdG9ycywgdG8gZW5jb3VyYWdlIGJ1cnN0IHdyaXRlYmFjayAqLwogCQl0eGRjdGwgfD0gKDggPDwgMTYpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwgdHhkY3RsKTsKKwl9CisKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCS8qIERNQVRYQ1RMLkVOIG11c3QgYmUgc2V0IGFmdGVyIGFsbCBUeCBxdWV1ZSBjb25maWcgaXMgZG9uZSAqLworCQlkbWF0eGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCk7CisJCWRtYXR4Y3RsIHw9IElYR0JFX0RNQVRYQ1RMX1RFOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMLCBkbWF0eGN0bCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCXR4ZGN0bCB8PSBJWEdCRV9UWERDVExfRU5BQkxFOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwgdHhkY3RsKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9yeF9yaW5nczsgaSsrKSB7CiAJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CiAJCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwoaikpOwogCQkvKiBlbmFibGUgUFRIUkVTSD0zMiBkZXNjcmlwdG9ycyAoaGFsZiB0aGUgaW50ZXJuYWwgY2FjaGUpCkBAIC0yMDU3LDE5ICsyMzM2LDIyIEBACiAJCXJ4ZGN0bCB8PSAweDAwMjA7CiAJCXJ4ZGN0bCB8PSBJWEdCRV9SWERDVExfRU5BQkxFOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYRENUTChqKSwgcnhkY3RsKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJCWl4Z2JlX3J4X2Rlc2NfcXVldWVfZW5hYmxlKGFkYXB0ZXIsIGkpOwogCX0KIAkvKiBlbmFibGUgYWxsIHJlY2VpdmVzICovCiAJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1RSTCk7Ci0JcnhkY3RsIHw9IChJWEdCRV9SWENUUkxfRE1CWVBTIHwgSVhHQkVfUlhDVFJMX1JYRU4pOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGRjdGwpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCXJ4ZGN0bCB8PSAoSVhHQkVfUlhDVFJMX0RNQllQUyB8IElYR0JFX1JYQ1RSTF9SWEVOKTsKKwllbHNlCisJCXJ4ZGN0bCB8PSBJWEdCRV9SWENUUkxfUlhFTjsKKwlody0+bWFjLm9wcy5lbmFibGVfcnhfZG1hKGh3LCByeGRjdGwpOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpCiAJCWl4Z2JlX2NvbmZpZ3VyZV9tc2l4KGFkYXB0ZXIpOwogCWVsc2UKIAkJaXhnYmVfY29uZmlndXJlX21zaV9hbmRfbGVnYWN5KGFkYXB0ZXIpOwogCi0JaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOwotCiAJY2xlYXJfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAlpeGdiZV9uYXBpX2VuYWJsZV9hbGwoYWRhcHRlcik7CiAKQEAgLTIwNzgsNiArMjM2MCwyOCBAQAogCiAJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAorCS8qCisJICogRm9yIGhvdC1wbHVnZ2FibGUgU0ZQKyBkZXZpY2VzLCBhIG5ldyBTRlArIG1vZHVsZSBtYXkgaGF2ZQorCSAqIGFycml2ZWQgYmVmb3JlIGludGVycnVwdHMgd2VyZSBlbmFibGVkLiAgV2UgbmVlZCB0byBraWNrIG9mZgorCSAqIHRoZSBTRlArIG1vZHVsZSBzZXR1cCBmaXJzdCwgdGhlbiB0cnkgdG8gYnJpbmcgdXAgbGluay4KKwkgKiBJZiB3ZSdyZSBub3QgaG90LXBsdWdnYWJsZSBTRlArLCB3ZSBqdXN0IG5lZWQgdG8gY29uZmlndXJlIGxpbmsKKwkgKiBhbmQgYnJpbmcgaXQgdXAuCisJICovCisJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnkoaHcpOworCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIlBIWSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgTklDICVkXG4iLCBlcnIpOworCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChpeGdiZV9pc19zZnAoaHcpKSB7CisJCWl4Z2JlX3NmcF9saW5rX2NvbmZpZyhhZGFwdGVyKTsKKwl9IGVsc2UgeworCQllcnIgPSBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKGh3KTsKKwkJaWYgKGVycikKKwkJCURQUklOVEsoUFJPQkUsIEVSUiwgImxpbmtfY29uZmlnIEZBSUxFRCAlZFxuIiwgZXJyKTsKKwl9CisKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCkBAIC0yMTA0LDYgKzI0MDgsOCBAQAogCS8qIGhhcmR3YXJlIGhhcyBiZWVuIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCBzb21lIHRoaW5ncyAqLwogCWl4Z2JlX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKKwogCXJldHVybiBpeGdiZV91cF9jb21wbGV0ZShhZGFwdGVyKTsKIH0KIApAQCAtMjE2NSw4ICsyNDcxLDEwIEBACiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCi0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5oZWFkKTsKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOworCWlmIChyeF9yaW5nLT5oZWFkKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPmhlYWQpOworCWlmIChyeF9yaW5nLT50YWlsKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOwogfQogCiAvKioKQEAgLTIxOTcsOCArMjUwNSwxMCBAQAogCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKIAotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7Ci0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKKwlpZiAodHhfcmluZy0+aGVhZCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT5oZWFkKTsKKwlpZiAodHhfcmluZy0+dGFpbCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKIH0KIAogLyoqCkBAIC0yMjYxLDYgKzI1NzEsMTEgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwoaiksCiAJCSAgICAgICAgICAgICAgICAodHhkY3RsICYgfklYR0JFX1RYRENUTF9FTkFCTEUpKTsKIAl9CisJLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRE1BVFhDVEwsCisJCSAgICAgICAgICAgICAgICAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMKSAmCisJCSAgICAgICAgICAgICAgICAgfklYR0JFX0RNQVRYQ1RMX1RFKSk7CiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCkBAIC0yMjk3LDEwICsyNjEyLDEwIEBACiAgKiovCiBzdGF0aWMgaW50IGl4Z2JlX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSBjb250YWluZXJfb2YobmFwaSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IsIG5hcGkpOworCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPQorCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IsIG5hcGkpOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7Ci0JaW50IHR4X2NsZWFuZWQsIHdvcmtfZG9uZSA9IDA7CisJaW50IHR4X2NsZWFuX2NvbXBsZXRlLCB3b3JrX2RvbmUgPSAwOwogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKQEAgLTIzMDksMTkgKzI2MjQsMTkgQEAKIAl9CiAjZW5kaWYKIAotCXR4X2NsZWFuZWQgPSBpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7Ci0JaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJdHhfY2xlYW5fY29tcGxldGUgPSBpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7CisJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCBhZGFwdGVyLT5yeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCi0JaWYgKHR4X2NsZWFuZWQpCisJaWYgKCF0eF9jbGVhbl9jb21wbGV0ZSkKIAkJd29ya19kb25lID0gYnVkZ2V0OwogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHIoYWRhcHRlcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJCWl4Z2JlX2lycV9lbmFibGVfcXVldWVzKGFkYXB0ZXIpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwogfQpAQCAtMjM1Myw2OCArMjY2OCw3NiBAQAogCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGl4Z2JlX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9zZXRfZGNiX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgbnJxID0gMSwgbnRxID0gMTsKLQlpbnQgZmVhdHVyZV9tYXNrID0gMCwgcnNzX2ksIHJzc19tOwotCWludCBkY2JfaSwgZGNiX207CisJYm9vbCByZXQgPSBmYWxzZTsKIAotCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzICovCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgewotCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6Ci0JCWRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7Ci0JCWRjYl9tID0gMDsKLQkJcnNzX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKLQkJcnNzX20gPSAwOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKLQkJZmVhdHVyZV9tYXNrIHw9IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7Ci0KLQkJc3dpdGNoIChhZGFwdGVyLT5mbGFncyAmIGZlYXR1cmVfbWFzaykgewotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEIHwgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQlkY2JfbSA9IDB4NyA8PCAzOwotCQkJcnNzX2kgPSBtaW4oOCwgcnNzX2kpOwotCQkJcnNzX20gPSAweDc7Ci0JCQlucnEgPSBkY2JfaSAqIHJzc19pOwotCQkJbnRxID0gbWluKE1BWF9UWF9RVUVVRVMsIGRjYl9pICogcnNzX2kpOwotCQkJYnJlYWs7Ci0JCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJZGNiX20gPSAweDcgPDwgMzsKLQkJCW5ycSA9IGRjYl9pOwotCQkJbnRxID0gZGNiX2k7Ci0JCQlicmVhazsKLQkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCk6Ci0JCQlyc3NfbSA9IDB4RjsKLQkJCW5ycSA9IHJzc19pOwotCQkJbnRxID0gcnNzX2k7Ci0JCQlicmVhazsKLQkJY2FzZSAwOgotCQlkZWZhdWx0OgotCQkJZGNiX2kgPSAwOwotCQkJZGNiX20gPSAwOwotCQkJcnNzX2kgPSAwOwotCQkJcnNzX20gPSAwOwotCQkJbnJxID0gMTsKLQkJCW50cSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIFNhbml0eSBjaGVjaywgd2Ugc2hvdWxkIG5ldmVyIGhhdmUgemVybyBxdWV1ZXMgKi8KLQkJbnJxID0gKG5ycSA/OjEpOwotCQludHEgPSAobnRxID86MSk7Ci0KLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMgPSBkY2JfaTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLm1hc2sgPSBkY2JfbTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmluZGljZXMgPSByc3NfaTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2sgPSByc3NfbTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbnJxID0gMTsKLQkJbnRxID0gMTsKLQkJYnJlYWs7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0ubWFzayA9IDB4NyA8PCAzOworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOwogCX0KIAotCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBucnE7Ci0JYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IG50cTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qKgorICogaXhnYmVfc2V0X3Jzc19xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgUlNTCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgaXMgb3VyICJiYXNlIiBtdWx0aXF1ZXVlIG1vZGUuICBSU1MgKFJlY2VpdmUgU2lkZSBTY2FsaW5nKSB3aWxsIHRyeQorICogdG8gYWxsb2NhdGUgb25lIFJ4IHF1ZXVlIHBlciBDUFUsIGFuZCBpZiBhdmFpbGFibGUsIG9uZSBUeCBxdWV1ZSBwZXIgQ1BVLgorICoKKyAqKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9zZXRfcnNzX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzayA9IDB4RjsKKwkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9CisJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKKwkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9CisJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKKwkJcmV0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlyZXQgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaXhnYmVfc2V0X251bV9xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgZGV2aWNlLCBmZWF0dXJlIGRlcGVuZGFudAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgcXVldWUgYWxsb2NhdGlvbiByb3V0aW5lLiAgVGhlIG9yZGVyIGhlcmUgaXMgdmVyeQorICogaW1wb3J0YW50LCBzdGFydGluZyB3aXRoIHRoZSAibW9zdCIgbnVtYmVyIG9mIGZlYXR1cmVzIHR1cm5lZCBvbiBhdCBvbmNlLAorICogYW5kIGVuZGluZyB3aXRoIHRoZSBzbWFsbGVzdCBzZXQgb2YgZmVhdHVyZXMuICBUaGlzIHdheSBsYXJnZSBjb21iaW5hdGlvbnMKKyAqIGNhbiBiZSBhbGxvY2F0ZWQgaWYgdGhleSdyZSB0dXJuZWQgb24sIGFuZCBzbWFsbGVyIGNvbWJpbmF0aW9ucyBhcmUgdGhlCisgKiBmYWxsdGhyb3VnaCBjb25kaXRpb25zLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCS8qIFN0YXJ0IHdpdGggYmFzZSBjYXNlICovCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IDE7CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisJaWYgKGl4Z2JlX3NldF9kY2JfcXVldWVzKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKyNlbmRpZgorCWlmIChpeGdiZV9zZXRfcnNzX3F1ZXVlcyhhZGFwdGVyKSkKKwkJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9hY3F1aXJlX21zaXhfdmVjdG9ycyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTI0NjAsNzEgKzI3ODMsMTA0IEBACiAJCWl4Z2JlX3NldF9udW1fcXVldWVzKGFkYXB0ZXIpOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEOyAvKiBXb290ISAqLwotCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gdmVjdG9yczsKKwkJLyoKKwkJICogQWRqdXN0IGZvciBvbmx5IHRoZSB2ZWN0b3JzIHdlJ2xsIHVzZSwgd2hpY2ggaXMgbWluaW11bQorCQkgKiBvZiBtYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTLCBvciB0aGUgbnVtYmVyIG9mCisJCSAqIHZlY3RvcnMgd2Ugd2VyZSBhbGxvY2F0ZWQuCisJCSAqLworCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gbWluKHZlY3RvcnMsCisJCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTKTsKIAl9CiB9CiAKIC8qKgorICogaXhnYmVfY2FjaGVfcmluZ19yc3MgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZyBmb3IgUlNTCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIENhY2hlIHRoZSBkZXNjcmlwdG9yIHJpbmcgb2Zmc2V0cyBmb3IgUlNTIHRvIHRoZSBhc3NpZ25lZCByaW5ncy4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfY2FjaGVfcmluZ19yc3Moc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisvKioKKyAqIGl4Z2JlX2NhY2hlX3JpbmdfZGNiIC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIERDQgorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBDYWNoZSB0aGUgZGVzY3JpcHRvciByaW5nIG9mZnNldHMgZm9yIERDQiB0byB0aGUgYXNzaWduZWQgcmluZ3MuCisgKgorICoqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NhY2hlX3JpbmdfZGNiKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCWJvb2wgcmV0ID0gZmFsc2U7CisJaW50IGRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJLyogdGhlIG51bWJlciBvZiBxdWV1ZXMgaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAzOworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMjsKKwkJCX0KKwkJCXJldCA9IHRydWU7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA0OworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgNDsKKwkJCX0KKwkJCXJldCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBmYWxzZTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyoqCiAgKiBpeGdiZV9jYWNoZV9yaW5nX3JlZ2lzdGVyIC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCiAgKgogICogT25jZSB3ZSBrbm93IHRoZSBmZWF0dXJlLXNldCBlbmFibGVkIGZvciB0aGUgZGV2aWNlLCB3ZSdsbCBjYWNoZQogICogdGhlIHJlZ2lzdGVyIG9mZnNldCB0aGUgZGVzY3JpcHRvciByaW5nIGlzIGFzc2lnbmVkIHRvLgorICoKKyAqIE5vdGUsIHRoZSBvcmRlciB0aGUgdmFyaW91cyBmZWF0dXJlIGNhbGxzIGlzIGltcG9ydGFudC4gIEl0IG11c3Qgc3RhcnQgd2l0aAorICogdGhlICJtb3N0IiBmZWF0dXJlcyBlbmFibGVkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZW4gdHJpY2tsZSBkb3duIHRvIHRoZQorICogbGVhc3QgYW1vdW50IG9mIGZlYXR1cmVzIHR1cm5lZCBvbiBhdCBvbmNlLgogICoqLwogc3RhdGljIHZvaWQgaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgZmVhdHVyZV9tYXNrID0gMCwgcnNzX2k7Ci0JaW50IGksIHR4cl9pZHgsIHJ4cl9pZHg7Ci0JaW50IGRjYl9pOworCS8qIHN0YXJ0IHdpdGggZGVmYXVsdCBjYXNlICovCisJYWRhcHRlci0+cnhfcmluZ1swXS5yZWdfaWR4ID0gMDsKKwlhZGFwdGVyLT50eF9yaW5nWzBdLnJlZ19pZHggPSAwOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7Ci0JY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKLQkJZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKLQkJcnNzX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKLQkJdHhyX2lkeCA9IDA7Ci0JCXJ4cl9pZHggPSAwOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKLQkJZmVhdHVyZV9tYXNrIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7Ci0JCXN3aXRjaCAoYWRhcHRlci0+ZmxhZ3MgJiBmZWF0dXJlX21hc2spIHsKLQkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQlpbnQgajsKLQkJCQkvKiBSeCBmaXJzdCAqLwotCQkJCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBqKyspIHsKLQkJCQkJYWRhcHRlci0+cnhfcmluZ1tyeHJfaWR4XS5yZWdfaWR4ID0KLQkJCQkJCWkgPDwgMyB8IGo7Ci0JCQkJCXJ4cl9pZHgrKzsKLQkJCQl9Ci0JCQkJLyogVHggbm93ICovCi0JCQkJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGorKykgewotCQkJCQlhZGFwdGVyLT50eF9yaW5nW3R4cl9pZHhdLnJlZ19pZHggPQotCQkJCQkJaSA8PCAyIHwgKGogPj4gMSk7Ci0JCQkJCWlmIChqICYgMSkKLQkJCQkJCXR4cl9pZHgrKzsKLQkJCQl9Ci0JCQl9Ci0JCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJLyogdGhlIG51bWJlciBvZiBxdWV1ZXMgaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7Ci0JCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAzOwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMjsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKLQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKLQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKLQkJCWJyZWFrOwotCQljYXNlIDA6Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorCWlmIChpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKSkKKwkJcmV0dXJuOworCisjZW5kaWYKKwlpZiAoaXhnYmVfY2FjaGVfcmluZ19yc3MoYWRhcHRlcikpCisJCXJldHVybjsKIH0KIAogLyoqCkBAIC0yNTMyLDcgKzI4ODgsOCBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCiAgKiBXZSBhbGxvY2F0ZSBvbmUgcmluZyBwZXIgcXVldWUgYXQgcnVuLXRpbWUgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUKLSAqIG51bWJlciBvZiBxdWV1ZXMgYXQgY29tcGlsZS10aW1lLgorICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuICBUaGUgcG9sbGluZ19uZXRkZXYgYXJyYXkgaXMKKyAqIGludGVuZGVkIGZvciBNdWx0aXF1ZXVlLCBidXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIGEgc2luZ2xlIHF1ZXVlLgogICoqLwogc3RhdGljIGludCBpeGdiZV9hbGxvY19xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0yNzExLDcgKzMwNjgsOCBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiZV9hZGFwdGVyICopZGF0YTsKIAotCS8qIERvIHRoZSBzZnBfdGltZXIgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlCisJLyoKKwkgKiBEbyB0aGUgc2ZwX3RpbWVyIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZQogCSAqIGRlbGF5cyB0aGF0IHNmcCsgZGV0ZWN0aW9uIHJlcXVpcmVzCiAJICovCiAJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX3Rhc2spOwpAQCAtMjc4NSw2ICszMTQzLDEwIEBACiAJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmluZGljZXMgPSByc3M7CiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKIAlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyA9IElYR0JFX01BWF9EQ0JfSU5ESUNFUzsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTg7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJLyogQ29uZmlndXJlIERDQiB0cmFmZmljIGNsYXNzZXMgKi8KQEAgLTI4MDUsMjEgKzMxNjcsMTQgQEAKIAkgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMpOwogCiAjZW5kaWYKLQlpZiAoaHctPm1hYy5vcHMuZ2V0X21lZGlhX3R5cGUgJiYKLQkgICAgKGh3LT5tYWMub3BzLmdldF9tZWRpYV90eXBlKGh3KSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikpCi0JCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRTsKIAogCS8qIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBpeGdiZV9mY19ub25lOwotCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfbm9uZTsKKwlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19ub25lOwogCWh3LT5mYy5oaWdoX3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUSDsKIAlody0+ZmMubG93X3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUTDsKIAlody0+ZmMucGF1c2VfdGltZSA9IElYR0JFX0RFRkFVTFRfRkNQQVVTRTsKIAlody0+ZmMuc2VuZF94b24gPSB0cnVlOwogCi0JLyogc2VsZWN0IDEwRyBsaW5rIGJ5IGRlZmF1bHQgKi8KLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU47Ci0KIAkvKiBlbmFibGUgaXRyIGJ5IGRlZmF1bHQgaW4gZHluYW1pYyBtb2RlICovCiAJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAxOwogCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAyMDAwMDsKQEAgLTI4NjYsOCArMzIyMSw3IEBACiAJbWVtc2V0KHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAogCS8qIHJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KLQl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpICsKLQkgICAgICAgICAgICAgICAgc2l6ZW9mKHUzMik7CisJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKIAl0eF9yaW5nLT5zaXplID0gQUxJR04odHhfcmluZy0+c2l6ZSwgNDA5Nik7CiAKIAl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKQEAgLTI5MjYsMTIgKzMyODAsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgc2l6ZTsKIAotCXNpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYykgKiBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKCFyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIsIDAsIHNpemUpOwotCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwogCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKSB7CkBAIC0yOTYwLDggKzMzMDgsNiBAQAogCXJldHVybiAwOwogCiBhbGxvY19mYWlsZWQ6Ci0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0zMDI0LDcgKzMzNzAsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTMwMzksOSArMzM4Niw2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwotCiAJaXhnYmVfY2xlYW5fcnhfcmluZyhhZGFwdGVyLCByeF9yaW5nKTsKIAogCXZmcmVlKHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKTsKQEAgLTMwNjMsNyArMzQwNyw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlmIChhZGFwdGVyLT5yeF9yaW5nW2ldLmRlc2MpCisJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMzEyNiw2ICszNDcxLDggQEAKIAogCWl4Z2JlX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKKwogCWVyciA9IGl4Z2JlX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlcV9pcnE7CkBAIC0zMTgwLDYgKzM1MjcsNyBAQAogLyoqCiAgKiBpeGdiZV9uYXBpX2FkZF9hbGwgLSBwcmVwIG5hcGkgc3RydWN0cyBmb3IgdXNlCiAgKiBAYWRhcHRlcjogcHJpdmF0ZSBzdHJ1Y3QKKyAqCiAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gbmFwaV9hZGQgZWFjaCBwb3NzaWJsZSBxX3ZlY3Rvci0+bmFwaQogICovCiB2b2lkIGl4Z2JlX25hcGlfYWRkX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTMyNTIsNyArMzYwMCw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOwogCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtMzI3MSw2ICszNjE4LDkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsLCBmY3RybDsKKwl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgcmV0dmFsID0gMDsKICNlbmRpZgpAQCAtMzI5MywxMCArMzY0MywzNSBAQAogCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0jZW5kaWYKIAotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKyNlbmRpZgorCWlmICh3dWZjKSB7CisJCWl4Z2JlX3NldF9yeF9tb2RlKG5ldGRldik7CisKKwkJLyogdHVybiBvbiBhbGwtbXVsdGkgbW9kZSBpZiB3YWtlIG9uIG11bHRpY2FzdCBpcyBlbmFibGVkICovCisJCWlmICh3dWZjICYgSVhHQkVfV1VGQ19NQykgeworCQkJZmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJZmN0cmwgfD0gSVhHQkVfRkNUUkxfTVBFOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOworCQl9CisKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJY3RybCB8PSBJWEdCRV9DVFJMX0dJT19ESVM7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTCwgY3RybCk7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9XVUZDLCB3dWZjKTsKKwl9IGVsc2UgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1dVQywgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfV1VGQywgMCk7CisJfQorCisJaWYgKHd1ZmMgJiYgaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJfSBlbHNlIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKwl9CiAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAKQEAgLTMzMjIsNiArMzY5NywxMiBAQAogCXU2NCB0b3RhbF9tcGMgPSAwOwogCXUzMiBpLCBtaXNzZWRfcnggPSAwLCBtcGMsIGJwcmMsIGx4b24sIGx4b2ZmLCB4b25fb2ZmX3RvdDsKIAorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlhZGFwdGVyLT5od19yeF9ub19kbWFfcmVzb3VyY2VzICs9CisJCQkgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCX0KKwogCWFkYXB0ZXItPnN0YXRzLmNyY2VycnMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NSQ0VSUlMpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJLyogZm9yIHBhY2tldCBidWZmZXJzIG5vdCB1c2VkLCB0aGUgcmVnaXN0ZXIgc2hvdWxkIHJlYWQgMCAqLwpAQCAtMzMyOSwzMiArMzcxMCw1NSBAQAogCQltaXNzZWRfcnggKz0gbXBjOwogCQlhZGFwdGVyLT5zdGF0cy5tcGNbaV0gKz0gbXBjOwogCQl0b3RhbF9tcGMgKz0gYWRhcHRlci0+c3RhdHMubXBjW2ldOwotCQlhZGFwdGVyLT5zdGF0cy5ybmJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STkJDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJCWFkYXB0ZXItPnN0YXRzLnJuYmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JOQkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xcHRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFRDKGkpKTsKIAkJYWRhcHRlci0+c3RhdHMucWJ0Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJUQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFwcmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xYnJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlJDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OUlhDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05SWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5xcHJkY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPTlJYQyhpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQyhpKSk7CisJCX0KIAkJYWRhcHRlci0+c3RhdHMucHhvbnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OVFhDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvZmZyeGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWEMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5weG9mZnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlRYQyhpKSk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGVFhDKGkpKTsKIAl9CiAJYWRhcHRlci0+c3RhdHMuZ3ByYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR1BSQyk7CiAJLyogd29yayBhcm91bmQgaGFyZHdhcmUgY291bnRpbmcgaXNzdWUgKi8KIAlhZGFwdGVyLT5zdGF0cy5ncHJjIC09IG1pc3NlZF9yeDsKIAogCS8qIDgyNTk4IGhhcmR3YXJlIG9ubHkgaGFzIGEgMzIgYml0IGNvdW50ZXIgaW4gdGhlIGhpZ2ggcmVnaXN0ZXIgKi8KLQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7Ci0JYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOwotCWFkYXB0ZXItPnN0YXRzLnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDTCk7CisJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7IC8qIHRvIGNsZWFyICovCisJCWFkYXB0ZXItPnN0YXRzLmdvdGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENIKTsgLyogdG8gY2xlYXIgKi8KKwkJYWRhcHRlci0+c3RhdHMudG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOyAvKiB0byBjbGVhciAqLworCQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDTlQpOworCQlhZGFwdGVyLT5zdGF0cy5seG9mZnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPRkZSWENOVCk7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmx4b2ZmcnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsKKwkJYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOworCQlhZGFwdGVyLT5zdGF0cy50b3IgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOworCX0KIAlicHJjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0JQUkMpOwogCWFkYXB0ZXItPnN0YXRzLmJwcmMgKz0gYnByYzsKIAlhZGFwdGVyLT5zdGF0cy5tcHJjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFJDKTsKLQlhZGFwdGVyLT5zdGF0cy5tcHJjIC09IGJwcmM7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJYWRhcHRlci0+c3RhdHMubXByYyAtPSBicHJjOwogCWFkYXB0ZXItPnN0YXRzLnJvYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk9DKTsKIAlhZGFwdGVyLT5zdGF0cy5wcmM2NCArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDNjQpOwogCWFkYXB0ZXItPnN0YXRzLnByYzEyNyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTI3KTsKQEAgLTMzNjMsOCArMzc2Nyw2IEBACiAJYWRhcHRlci0+c3RhdHMucHJjMTAyMyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTAyMyk7CiAJYWRhcHRlci0+c3RhdHMucHJjMTUyMiArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTUyMik7CiAJYWRhcHRlci0+c3RhdHMucmxlYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkxFQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvZmZyeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDKTsKIAlseG9uID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05UWEMpOwogCWFkYXB0ZXItPnN0YXRzLmx4b250eGMgKz0gbHhvbjsKIAlseG9mZiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlRYQyk7CkBAIC0zNDE2LDE3ICszODE4LDU0IEBACiAJLyogRG8gdGhlIHdhdGNoZG9nIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZSBsb3ZlbHkKIAkgKiBkZWxheXMgdGhhdCBzb21lIG9mIHRoZSBuZXdlciBoYXJkd2FyZSByZXF1aXJlcyAqLwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCXU2NCBlaWNzID0gMDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOyBpKyspCisJCQllaWNzIHw9ICgxIDw8IGkpOworCiAJCS8qIENhdXNlIHNvZnR3YXJlIGludGVycnVwdCB0byBlbnN1cmUgcnggcmluZ3MgYXJlIGNsZWFuZWQgKi8KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKLQkJCXUzMiBlaWNzID0KLQkJCSAoMSA8PCAoYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlMpKSAtIDE7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsIGVpY3MpOwotCQl9IGVsc2UgewotCQkJLyogRm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueSBiaXRzIHRoYXQKLQkJCSAqIGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMgb3BlcmF0aW9uIHdvdWxkCi0JCQkgKiBzZXQgKmJvdGgqIEVJTVMgYW5kIEVJQ1MgZm9yIGFueSBiaXQgaW4gRUlBTSAqLwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElYR0JFX0VJQ1NfVENQX1RJTUVSIHwgSVhHQkVfRUlDU19PVEhFUikpOworCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCQljYXNlIGl4Z2JlX21hY184MjU5OEVCOgorCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsICh1MzIpZWljcyk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogZm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueQorCQkJCSAqIGJpdHMgdGhhdCBhcmUgZW5hYmxlZCBmb3IgRUlBTSwgYmVjYXVzZSB0aGlzCisJCQkJICogb3BlcmF0aW9uIHdvdWxkIHNldCAqYm90aCogRUlNUyBhbmQgRUlDUyBmb3IKKwkJCQkgKiBhbnkgYml0IGluIEVJQU0KKwkJCQkgKi8KKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsCisJCQkJICAgICAoSVhHQkVfRUlDU19UQ1BfVElNRVIgfCBJWEdCRV9FSUNTX09USEVSKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCQkJLyoKKwkJCQkgKiBFSUNTKDAuLjE1KSBmaXJzdCAwLTE1IHEgdmVjdG9ycworCQkJCSAqIEVJQ1NbMV0gKDE2Li4zMSkgcSB2ZWN0b3JzIDE2LTMxCisJCQkJICogRUlDU1syXSAoMC4uMzEpIHEgdmVjdG9ycyAzMi02MworCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRikpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDU19FWCgxKSwKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRjAwMDApKTsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1NfRVgoMiksCisJCQkJICAgICAgICAgICAgICAgICh1MzIpKGVpY3MgPj4gMzIpKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBmb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55CisJCQkJICogYml0cyB0aGF0IGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMKKwkJCQkgKiBvcGVyYXRpb24gd291bGQgc2V0ICpib3RoKiBFSU1TIGFuZCBFSUNTIGZvcgorCQkJCSAqIGFueSBiaXQgaW4gRUlBTQorCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgIChJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJLyogUmVzZXQgdGhlIHRpbWVyICovCiAJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsCkBAIC0zNDM3LDYgKzM4NzYsNTUgQEAKIH0KIAogLyoqCisgKiBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGNvbmZpZ3VyZSBtdWx0aXNwZWVkIGZpYmVyCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBhdXRvbmVnOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOworCWlmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpCisJCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKKwkJaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0s7Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIGEgbmV3IFNGUCsgbW9kdWxlCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGVycjsKKworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLOworCWVyciA9IGh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiUEhZIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBOSUMgJWRcbiIsIGVycik7CisJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCXJldHVybjsKKwl9CisJaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCWlmICghYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spCisJCS8qIFRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIERBIFR3aW5heCBjb25uZWN0aW9ucyAqLworCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSzsKK30KKworLyoqCiAgKiBpeGdiZV93YXRjaGRvZ190YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCiAgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCiAgKiovCkBAIC0zNDY2LDEwICszOTU0LDIwIEBACiAKIAlpZiAobGlua191cCkgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJdTMyIGZyY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKLQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotI2RlZmluZSBGTE9XX1JYIChmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpCi0jZGVmaW5lIEZMT1dfVFggKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKQorCQkJYm9vbCBmbG93X3J4LCBmbG93X3R4OworCisJCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQkJdTMyIG1mbGNuID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwkJCQl1MzIgZmNjZmcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNDRkcpOworCQkJCWZsb3dfcnggPSAobWZsY24gJiBJWEdCRV9NRkxDTl9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOworCQkJfSBlbHNlIHsKKwkJCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOworCQkJCWZsb3dfcnggPSAoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKwkJCX0KKwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXhnYmU6ICVzIE5JQyBMaW5rIGlzIFVwICVzLCAiCiAJCQkgICAgICAgIkZsb3cgQ29udHJvbDogJXNcbiIsCiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lLApAQCAtMzQ3Nyw5ICszOTc1LDkgQEAKIAkJCSAgICAgICAgIjEwIEdicHMiIDoKIAkJCSAgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCA/CiAJCQkgICAgICAgICAiMSBHYnBzIiA6ICJ1bmtub3duIHNwZWVkIikpLAotCQkJICAgICAgICgoRkxPV19SWCAmJiBGTE9XX1RYKSA/ICJSWC9UWCIgOgotCQkJICAgICAgICAoRkxPV19SWCA/ICJSWCIgOgotCQkJICAgICAgICAoRkxPV19UWCA/ICJUWCIgOiAiTm9uZSIpKSkpOworCQkJICAgICAgICgoZmxvd19yeCAmJiBmbG93X3R4KSA/ICJSWC9UWCIgOgorCQkJICAgICAgICAoZmxvd19yeCA/ICJSWCIgOgorCQkJICAgICAgICAoZmxvd190eCA/ICJUWCIgOiAiTm9uZSIpKSkpOwogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCX0gZWxzZSB7CkBAIC0zNjE5LDEzICs0MTE3LDEzIEBACiAKIAkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwkJCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQkJCXR5cGVfdHVjbWRfbWxobCB8PSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNDsKIAkJCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJCQl0eXBlX3R1Y21kX21saGwgfD0KIAkJCQkJICAgICAgICBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1RDUDsKIAkJCQlicmVhazsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCQkJLyogWFhYIHdoYXQgYWJvdXQgb3RoZXIgVjYgaGVhZGVycz8/ICovCiAJCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQpAQCAtMzgyMyw2ICs0MzIxLDE2IEBACiAJcmV0dXJuIF9faXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOwogfQogCitzdGF0aWMgdTE2IGl4Z2JlX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpCisJCXJldHVybiAwOyAgLyogQWxsIHRyYWZmaWMgc2hvdWxkIGRlZmF1bHQgdG8gY2xhc3MgMCAqLworCisJcmV0dXJuIHNrYl90eF9oYXNoKGRldiwgc2tiKTsKK30KKwogc3RhdGljIGludCBpeGdiZV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzk0OCwzMCArNDQ1NiwxMSBAQAogfQogI2VuZGlmCiAKLS8qKgotICogaXhnYmVfbGlua19jb25maWcgLSBzZXQgdXAgaW5pdGlhbCBsaW5rIHdpdGggZGVmYXVsdCBzcGVlZCBhbmQgZHVwbGV4Ci0gKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQotICoqLwotc3RhdGljIGludCBpeGdiZV9saW5rX2NvbmZpZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KQotewotCXUzMiBhdXRvbmVnID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0KLQkvKiBtdXN0IGFsd2F5cyBhdXRvbmVnIGZvciBib3RoIDFHIGFuZCAxMEcgbGluayAqLwotCWh3LT5tYWMuYXV0b25lZyA9IHRydWU7Ci0KLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgJiYKLQkgICAgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikpCi0JCWF1dG9uZWcgPSBJWEdCRV9MSU5LX1NQRUVEXzgyNTk4X0FVVE9ORUc7Ci0KLQlyZXR1cm4gaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXhnYmVfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4gCQk9IGl4Z2JlX29wZW4sCiAJLm5kb19zdG9wCQk9IGl4Z2JlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpeGdiZV94bWl0X2ZyYW1lLAorCS5uZG9fc2VsZWN0X3F1ZXVlCT0gaXhnYmVfc2VsZWN0X3F1ZXVlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IGl4Z2JlX2dldF9zdGF0cywKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IGl4Z2JlX3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaXhnYmVfc2V0X3J4X21vZGUsCkBAIC00MDA3LDcgKzQ0OTYsNyBAQAogCWNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppaSA9IGl4Z2JlX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKLQl1MTYgbGlua19zdGF0dXMsIGxpbmtfc3BlZWQsIGxpbmtfd2lkdGg7CisJdTE2IHBtX3ZhbHVlID0gMDsKIAl1MzIgcGFydF9udW0sIGVlYzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDEwNiw2ICs0NTk1LDEzIEBACiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF90YXNrLCBpeGdiZV9zZnBfdGFzayk7CiAKKwkvKiBtdWx0aXNwZWVkIGZpYmVyIGhhcyBpdHMgb3duIHRhc2tsZXQsIGNhbGxlZCBmcm9tIEdQSSBTRFAxIGNvbnRleHQgKi8KKwlJTklUX1dPUksoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzaywgaXhnYmVfbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKworCS8qIGEgbmV3IFNGUCsgbW9kdWxlIGFycml2YWwsIGNhbGxlZCBmcm9tIEdQSSBTRFAyIGNvbnRleHQgKi8KKwlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2ssCisJICAgICAgICAgIGl4Z2JlX3NmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCiAJZXJyID0gaWktPmdldF9pbnZhcmlhbnRzKGh3KTsKIAlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQpIHsKIAkJLyogc3RhcnQgYSBrZXJuZWwgdGhyZWFkIHRvIHdhdGNoIGZvciBhIG1vZHVsZSB0byBhcnJpdmUgKi8KQEAgLTQxNDIsNyArNDYzOCw3IEBACiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTTsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwpAQCAtNDE4NiwyNiArNDY4Miw0MSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKyNkZWZpbmUgSVhHQkVfUENJRV9QTUNTUiAweDQ0CisJCWFkYXB0ZXItPndvbCA9IElYR0JFX1dVRkNfTUFHOworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBJWEdCRV9QQ0lFX1BNQ1NSLCAmcG1fdmFsdWUpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgSVhHQkVfUENJRV9QTUNTUiwKKwkJICAgICAgICAgICAgICAgICAgICAgIChwbV92YWx1ZSB8ICgxIDw8IDgpKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFkYXB0ZXItPndvbCA9IDA7CisJCWJyZWFrOworCX0KKwlkZXZpY2VfaW5pdF93YWtldXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgdHJ1ZSk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGFkYXB0ZXItPndvbCk7CisKIAkvKiBwcmludCBidXMgdHlwZS9zcGVlZC93aWR0aCBpbmZvICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSVhHQkVfUENJX0xJTktfU1RBVFVTLCAmbGlua19zdGF0dXMpOwotCWxpbmtfc3BlZWQgPSBsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1NQRUVEOwotCWxpbmtfd2lkdGggPSBsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1dJRFRIOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIoUENJIEV4cHJlc3M6JXM6JXMpICVwTVxuIiwKLQkgICAgICAgICgobGlua19zcGVlZCA9PSBJWEdCRV9QQ0lfTElOS19TUEVFRF81MDAwKSA/ICI1LjBHYi9zIiA6Ci0JICAgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfUENJX0xJTktfU1BFRURfMjUwMCkgPyAiMi41R2IvcyIgOgotCSAgICAgICAgICJVbmtub3duIiksCi0JICAgICAgICAoKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfOCkgPyAiV2lkdGggeDgiIDoKLQkgICAgICAgICAobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF80KSA/ICJXaWR0aCB4NCIgOgotCSAgICAgICAgIChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzIpID8gIldpZHRoIHgyIiA6Ci0JICAgICAgICAgKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfMSkgPyAiV2lkdGggeDEiIDoKKwkgICAgICAgICgoaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfNTAwMCkgPyAiNS4wR2IvcyI6CisJICAgICAgICAgKGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzI1MDApID8gIjIuNUdiL3MiOiJVbmtub3duIiksCisJICAgICAgICAoKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDgpID8gIldpZHRoIHg4IiA6CisJICAgICAgICAgKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQpID8gIldpZHRoIHg0IiA6CisJICAgICAgICAgKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDEpID8gIldpZHRoIHgxIiA6CiAJICAgICAgICAgIlVua25vd24iKSwKIAkgICAgICAgIG5ldGRldi0+ZGV2X2FkZHIpOwogCWl4Z2JlX3JlYWRfcGJhX251bV9nZW5lcmljKGh3LCAmcGFydF9udW0pOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUM6ICVkLCBQSFk6ICVkLCBQQkEgTm86ICUwNngtJTAzeFxuIiwKLQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwKLQkgICAgICAgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKKwlpZiAoaXhnYmVfaXNfc2ZwKGh3KSAmJiBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX25vdF9wcmVzZW50KQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZCwgUEhZOiAlZCwgU0ZQKzogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAorCQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwgaHctPnBoeS5zZnBfdHlwZSwKKwkJICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZCwgUEhZOiAlZCwgUEJBIE5vOiAlMDZ4LSUwM3hcbiIsCisJCSAgICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLAorCQkgICAgICAgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKIAotCWlmIChsaW5rX3dpZHRoIDw9IElYR0JFX1BDSV9MSU5LX1dJRFRIXzQpIHsKKwlpZiAoaHctPmJ1cy53aWR0aCA8PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NCkgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiUENJLUV4cHJlc3MgYmFuZHdpZHRoIGF2YWlsYWJsZSBmb3IgIgogCQkgICAgICAgICAidGhpcyBjYXJkIGlzIG5vdCBzdWZmaWNpZW50IGZvciBvcHRpbWFsICIKIAkJICAgICAgICAgInBlcmZvcm1hbmNlLlxuIik7CkBAIC00MjEzLDE2ICs0NzI0LDEyIEBACiAJCSAgICAgICAgICJQQ0ktRXhwcmVzcyBzbG90IGlzIHJlcXVpcmVkLlxuIik7CiAJfQogCisJLyogc2F2ZSBvZmYgRUVQUk9NIHZlcnNpb24gbnVtYmVyICovCisJaHctPmVlcHJvbS5vcHMucmVhZChodywgMHgyOSwgJmFkYXB0ZXItPmVlcHJvbV92ZXJzaW9uKTsKKwogCS8qIHJlc2V0IHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MgKi8KIAlody0+bWFjLm9wcy5zdGFydF9odyhodyk7CiAKLQkvKiBsaW5rX2NvbmZpZyBkZXBlbmRzIG9uIHN0YXJ0X2h3IGJlaW5nIGNhbGxlZCBhdCBsZWFzdCBvbmNlICovCi0JZXJyID0gaXhnYmVfbGlua19jb25maWcoaHcpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAic2V0dXBfbGlua19zcGVlZCBGQUlMRUQgJWRcbiIsIGVycik7Ci0JCWdvdG8gZXJyX3JlZ2lzdGVyOwotCX0KLQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKIAlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKQEAgLTQyNTMsNiArNDc2MCw4IEBACiAJY2xlYXJfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSk7CiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnNmcF90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CiAJaW91bm1hcChody0+aHdfYWRkcik7CiBlcnJfaW9yZW1hcDoKIAlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtNDI4OSw2ICs0Nzk4LDggQEAKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQpAQCAtNDM3Miw3ICs0ODgzLDcgQEAKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwotCisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1dVUywgfjApOwogCQlyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCmluZGV4IDVhODY2OWEuLjE0ZTk2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzIsNiArMzIsMTggQEAKICNpbmNsdWRlICJpeGdiZV9jb21tb24uaCIKICNpbmNsdWRlICJpeGdiZV9waHkuaCIKIAorc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0YXJ0KHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0b3Aoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICpkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9nZXRfaTJjX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sICpkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfcmFpc2VfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCk7CitzdGF0aWMgdm9pZCBpeGdiZV9sb3dlcl9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKTsKK3N0YXRpYyBzMzIgaXhnYmVfc2V0X2kyY19kYXRhKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsLCBib29sIGRhdGEpOworc3RhdGljIGJvb2wgaXhnYmVfZ2V0X2kyY19kYXRhKHUzMiAqaTJjY3RsKTsKK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19idXNfY2xlYXIoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzdGF0aWMgYm9vbCBpeGdiZV92YWxpZGF0ZV9waHlfYWRkcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcGh5X2FkZHIpOwogc3RhdGljIGVudW0gaXhnYmVfcGh5X3R5cGUgaXhnYmVfZ2V0X3BoeV90eXBlX2Zyb21faWQodTMyIHBoeV9pZCk7CiBzdGF0aWMgczMyIGl4Z2JlX2dldF9waHlfaWQoc3RydWN0IGl4Z2JlX2h3ICpodyk7CkBAIC01NDMsOCArNTU1LDkgQEAKIAl1OCBpZGVudGlmaWVyID0gMDsKIAl1OCBjb21wX2NvZGVzXzFnID0gMDsKIAl1OCBjb21wX2NvZGVzXzEwZyA9IDA7Ci0JdTggb3VpX2J5dGVzWzRdID0gezAsIDAsIDAsIDB9OworCXU4IG91aV9ieXRlc1szXSA9IHswLCAwLCAwfTsKIAl1OCB0cmFuc21pc3Npb25fbWVkaWEgPSAwOworCXUxNiBlbmZvcmNlX3NmcCA9IDA7CiAKIAlzdGF0dXMgPSBody0+cGh5Lm9wcy5yZWFkX2kyY19lZXByb20oaHcsIElYR0JFX1NGRl9JREVOVElGSUVSLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWRlbnRpZmllcik7CkBAIC01NjQsMTggKzU3Nyw0OCBAQAogCiAJCS8qIElEIE1vZHVsZQogCQkgKiA9PT09PT09PT0KLQkJICogMAlTRlBfREFfQ1UKLQkJICogMQlTRlBfU1IKLQkJICogMglTRlBfTFIKKwkJICogMCAgICBTRlBfREFfQ1UKKwkJICogMSAgICBTRlBfU1IKKwkJICogMiAgICBTRlBfTFIKKwkJICogMyAgICBTRlBfREFfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworCQkgKiA0ICAgIFNGUF9EQV9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCisJCSAqIDUgICAgU0ZQX1NSL0xSX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKwkJICogNiAgICBTRlBfU1IvTFJfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYwogCQkgKi8KLQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfZGFfY3U7Ci0JCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3NyOwotCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9scjsKLQkJZWxzZQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3Vua25vd247CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJiBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9kYV9jdTsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9zcjsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9scjsKKwkJCWVsc2UKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bjsKKwkJfSBlbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJiBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQorCQkJCWlmIChody0+YnVzLmxhbl9pZCA9PSAwKQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUwOworCQkJCWVsc2UKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMTsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQorCQkJCWlmIChody0+YnVzLmxhbl9pZCA9PSAwKQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwOworCQkJCWVsc2UKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMTsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQorCQkJCWlmIChody0+YnVzLmxhbl9pZCA9PSAwKQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwOworCQkJCWVsc2UKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMTsKKwkJCWVsc2UKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bjsKKwkJfQogCiAJCS8qIERldGVybWluZSBQSFkgdmVuZG9yICovCiAJCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3Vua25vd24pIHsKQEAgLTYwNyw2ICs2NTAsOSBAQAogCQkJY2FzZSBJWEdCRV9TRkZfVkVORE9SX09VSV9BVkFHTzoKIAkJCQlody0+cGh5LnR5cGUgPSBpeGdiZV9waHlfc2ZwX2F2YWdvOwogCQkJCWJyZWFrOworCQkJY2FzZSBJWEdCRV9TRkZfVkVORE9SX09VSV9JTlRFTDoKKwkJCQlody0+cGh5LnR5cGUgPSBpeGdiZV9waHlfc2ZwX2ludGVsOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYKIAkJCQkgICAgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKQEAgLTYxNiw3ICs2NjIsMjggQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlzdGF0dXMgPSAwOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCIHx8CisJCSAgICAoaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9zciAmJgorCQkgICAgIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfbHIgJiYKKwkJICAgICBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTAgJiYKKwkJICAgICBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTEpKSB7CisJCQlzdGF0dXMgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKworCQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9QSFlfRU5GT1JDRV9JTlRFTF9TRlBfT0ZGU0VULAorCQkgICAgICAgICAgICAgICAgICAgICZlbmZvcmNlX3NmcCk7CisJCWlmICghKGVuZm9yY2Vfc2ZwICYgSVhHQkVfUEhZX0FMTE9XX0FOWV9TRlApKSB7CisJCQkvKiBNYWtlIHN1cmUgd2UncmUgYSBzdXBwb3J0ZWQgUEhZIHR5cGUgKi8KKwkJCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3NmcF9pbnRlbCkgeworCQkJCXN0YXR1cyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWh3X2RiZyhodywgIlNGUCsgbW9kdWxlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCXN0YXR1cyA9IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IDA7CisJCX0KIAl9CiAKIG91dDoKQEAgLTY1MSw3ICs3MTgsNyBAQAogCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIElYR0JFX1BIWV9JTklUX09GRlNFVF9OTCwgbGlzdF9vZmZzZXQpOwogCiAJaWYgKCghKmxpc3Rfb2Zmc2V0KSB8fCAoKmxpc3Rfb2Zmc2V0ID09IDB4RkZGRikpCi0JCXJldHVybiBJWEdCRV9FUlJfUEhZOworCQlyZXR1cm4gSVhHQkVfRVJSX1NGUF9OT19JTklUX1NFUV9QUkVTRU5UOwogCiAJLyogU2hpZnQgb2Zmc2V0IHRvIGZpcnN0IElEIHdvcmQgKi8KIAkoKmxpc3Rfb2Zmc2V0KSsrOwpAQCAtNjg4LDYgKzc1NSw1MDEgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfcmVhZF9pMmNfZWVwcm9tX2dlbmVyaWMgLSBSZWFkcyA4IGJpdCBFRVBST00gd29yZCBvdmVyIEkyQyBpbnRlcmZhY2UKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBFRVBST00gYnl0ZSBvZmZzZXQgdG8gcmVhZAorICogIEBlZXByb21fZGF0YTogdmFsdWUgcmVhZAorICoKKyAqICBQZXJmb3JtcyBieXRlIHJlYWQgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlLgorICoqLworczMyIGl4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSkKK3sKKwlyZXR1cm4gaHctPnBoeS5vcHMucmVhZF9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfSTJDX0VFUFJPTV9ERVZfQUREUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb21fZGF0YSk7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYyAtIFdyaXRlcyA4IGJpdCBFRVBST00gd29yZCBvdmVyIEkyQyBpbnRlcmZhY2UKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBFRVBST00gYnl0ZSBvZmZzZXQgdG8gd3JpdGUKKyAqICBAZWVwcm9tX2RhdGE6IHZhbHVlIHRvIHdyaXRlCisgKgorICogIFBlcmZvcm1zIGJ5dGUgd3JpdGUgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZWVwcm9tX2RhdGEpCit7CisJcmV0dXJuIGh3LT5waHkub3BzLndyaXRlX2kyY19ieXRlKGh3LCBieXRlX29mZnNldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfSTJDX0VFUFJPTV9ERVZfQUREUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tX2RhdGEpOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMgLSBSZWFkcyA4IGJpdCB3b3JkIG92ZXIgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogYnl0ZSBvZmZzZXQgdG8gcmVhZAorICogIEBkYXRhOiB2YWx1ZSByZWFkCisgKgorICogIFBlcmZvcm1zIGJ5dGUgcmVhZCBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UgYXQKKyAqICBhIHNwZWNpZmllZCBkZWl2Y2UgYWRkcmVzcy4KKyAqKi8KK3MzMiBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRldl9hZGRyLCB1OCAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwl1MzIgbWF4X3JldHJ5ID0gMTsKKwl1MzIgcmV0cnkgPSAwOworCWJvb2wgbmFjayA9IDE7CisKKwlkbyB7CisJCWl4Z2JlX2kyY19zdGFydChodyk7CisKKwkJLyogRGV2aWNlIEFkZHJlc3MgYW5kIHdyaXRlIGluZGljYXRpb24gKi8KKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBkZXZfYWRkcik7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWl4Z2JlX2kyY19zdGFydChodyk7CisKKwkJLyogRGV2aWNlIEFkZHJlc3MgYW5kIHJlYWQgaW5kaWNhdGlvbiAqLworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIChkZXZfYWRkciB8IDB4MSkpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUoaHcsIGRhdGEpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoaHcsIG5hY2spOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJaXhnYmVfaTJjX3N0b3AoaHcpOworCQlicmVhazsKKworZmFpbDoKKwkJaXhnYmVfaTJjX2J1c19jbGVhcihodyk7CisJCXJldHJ5Kys7CisJCWlmIChyZXRyeSA8IG1heF9yZXRyeSkKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHJlYWQgZXJyb3IgLSBSZXRyeWluZy5cbiIpOworCQllbHNlCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSByZWFkIGVycm9yLlxuIik7CisKKwl9IHdoaWxlIChyZXRyeSA8IG1heF9yZXRyeSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljIC0gV3JpdGVzIDggYml0IHdvcmQgb3ZlciBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBieXRlIG9mZnNldCB0byB3cml0ZQorICogIEBkYXRhOiB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBQZXJmb3JtcyBieXRlIHdyaXRlIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZSBhdAorICogIGEgc3BlY2lmaWVkIGRldmljZSBhZGRyZXNzLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2kyY19ieXRlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwl1MzIgbWF4X3JldHJ5ID0gMTsKKwl1MzIgcmV0cnkgPSAwOworCisJZG8geworCQlpeGdiZV9pMmNfc3RhcnQoaHcpOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgZGV2X2FkZHIpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBieXRlX29mZnNldCk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGRhdGEpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJaXhnYmVfaTJjX3N0b3AoaHcpOworCQlicmVhazsKKworZmFpbDoKKwkJaXhnYmVfaTJjX2J1c19jbGVhcihodyk7CisJCXJldHJ5Kys7CisJCWlmIChyZXRyeSA8IG1heF9yZXRyeSkKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHdyaXRlIGVycm9yIC0gUmV0cnlpbmcuXG4iKTsKKwkJZWxzZQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgd3JpdGUgZXJyb3IuXG4iKTsKKwl9IHdoaWxlIChyZXRyeSA8IG1heF9yZXRyeSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9pMmNfc3RhcnQgLSBTZXRzIEkyQyBzdGFydCBjb25kaXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgSTJDIHN0YXJ0IGNvbmRpdGlvbiAoSGlnaCAtPiBMb3cgb24gU0RBIHdoaWxlIFNDTCBpcyBIaWdoKQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0YXJ0KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJLyogU3RhcnQgY29uZGl0aW9uIG11c3QgYmVnaW4gd2l0aCBkYXRhIGFuZCBjbG9jayBoaWdoICovCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAxKTsKKwlpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIFNldHVwIHRpbWUgZm9yIHN0YXJ0IGNvbmRpdGlvbiAoNC43dXMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1NVX1NUQSk7CisKKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDApOworCisJLyogSG9sZCB0aW1lIGZvciBzdGFydCBjb25kaXRpb24gKDR1cykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfSERfU1RBKTsKKworCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCit9CisKKy8qKgorICogIGl4Z2JlX2kyY19zdG9wIC0gU2V0cyBJMkMgc3RvcCBjb25kaXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgSTJDIHN0b3AgY29uZGl0aW9uIChMb3cgLT4gSGlnaCBvbiBTREEgd2hpbGUgU0NMIGlzIEhpZ2gpCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RvcChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCS8qIFN0b3AgY29uZGl0aW9uIG11c3QgYmVnaW4gd2l0aCBkYXRhIGxvdyBhbmQgY2xvY2sgaGlnaCAqLworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMCk7CisJaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBTZXR1cCB0aW1lIGZvciBzdG9wIGNvbmRpdGlvbiAoNHVzKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9TVV9TVE8pOworCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAxKTsKKworCS8qIGJ1cyBmcmVlIHRpbWUgYmV0d2VlbiBzdG9wIGFuZCBzdGFydCAoNC43dXMpKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfQlVGKTsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUgLSBDbG9ja3MgaW4gb25lIGJ5dGUgdmlhIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogZGF0YSBieXRlIHRvIGNsb2NrIGluCisgKgorICogIENsb2NrcyBpbiBvbmUgYnl0ZSBkYXRhIHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwlzMzIgaTsKKwlib29sIGJpdCA9IDA7CisKKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19pbl9pMmNfYml0KGh3LCAmYml0KTsKKwkJKmRhdGEgfD0gYml0IDw8IGk7CisKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlIC0gQ2xvY2tzIG91dCBvbmUgYnl0ZSB2aWEgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiBkYXRhIGJ5dGUgY2xvY2tlZCBvdXQKKyAqCisgKiAgQ2xvY2tzIG91dCBvbmUgYnl0ZSBkYXRhIHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwlzMzIgaTsKKwl1MzIgaTJjY3RsOworCWJvb2wgYml0ID0gMDsKKworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCWJpdCA9IChkYXRhID4+IGkpICYgMHgxOworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChodywgYml0KTsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCQlicmVhazsKKwl9CisKKwkvKiBSZWxlYXNlIFNEQSBsaW5lIChzZXQgaGlnaCkgKi8KKwlpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwlpMmNjdGwgfD0gSVhHQkVfSTJDX0RBVEFfT1VUOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCBpMmNjdGwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2kyY19hY2sgLSBQb2xscyBmb3IgSTJDIEFDSworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2xvY2tzIGluL291dCBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9nZXRfaTJjX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXM7CisJdTMyIGkgPSAwOworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwl1MzIgdGltZW91dCA9IDEwOworCWJvb2wgYWNrID0gMTsKKworCXN0YXR1cyA9IGl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIG91dDsKKworCS8qIE1pbmltdW0gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJLyogUG9sbCBmb3IgQUNLLiAgTm90ZSB0aGF0IEFDSyBpbiBJMkMgc3BlYyBpcworCSAqIHRyYW5zaXRpb24gZnJvbSAxIHRvIDAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCWkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCQlhY2sgPSBpeGdiZV9nZXRfaTJjX2RhdGEoJmkyY2N0bCk7CisKKwkJdWRlbGF5KDEpOworCQlpZiAoYWNrID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoYWNrID09IDEpIHsKKwkJaHdfZGJnKGh3LCAiSTJDIGFjayB3YXMgbm90IHJlY2VpdmVkLlxuIik7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JMkM7CisJfQorCisJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19pbl9pMmNfYml0IC0gQ2xvY2tzIGluIG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiByZWFkIGRhdGEgdmFsdWUKKyAqCisgKiAgQ2xvY2tzIGluIG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzOworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCXN0YXR1cyA9IGl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwlpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwkqZGF0YSA9IGl4Z2JlX2dldF9pMmNfZGF0YSgmaTJjY3RsKTsKKworCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQgLSBDbG9ja3MgaW4vb3V0IG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiBkYXRhIHZhbHVlIHRvIHdyaXRlCisgKgorICogIENsb2NrcyBvdXQgb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBkYXRhKQoreworCXMzMiBzdGF0dXM7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJc3RhdHVzID0gaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCBkYXRhKTsKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJc3RhdHVzID0gaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluaW11bSBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMuCisJCSAqIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBkYXRhIGhvbGQgdGltZS4KKwkJICovCisJCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JMkM7CisJCWh3X2RiZyhodywgIkkyQyBkYXRhIHdhcyBub3Qgc2V0IHRvICVYXG4iLCBkYXRhKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorLyoqCisgKiAgaXhnYmVfcmFpc2VfaTJjX2NsayAtIFJhaXNlcyB0aGUgSTJDIFNDTCBjbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICoKKyAqICBSYWlzZXMgdGhlIEkyQyBjbG9jayBsaW5lICcwJy0+JzEnCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JhaXNlX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwkqaTJjY3RsIHw9IElYR0JFX0kyQ19DTEtfT1VUOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCisJLyogU0NMIHJpc2UgdGltZSAoMTAwMG5zKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9SSVNFKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2xvd2VyX2kyY19jbGsgLSBMb3dlcnMgdGhlIEkyQyBTQ0wgY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqCisgKiAgTG93ZXJzIHRoZSBJMkMgY2xvY2sgbGluZSAnMSctPicwJworICoqLworc3RhdGljIHZvaWQgaXhnYmVfbG93ZXJfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCkKK3sKKworCSppMmNjdGwgJj0gfklYR0JFX0kyQ19DTEtfT1VUOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCisJLyogU0NMIGZhbGwgdGltZSAoMzAwbnMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0ZBTEwpOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfaTJjX2RhdGEgLSBTZXRzIHRoZSBJMkMgZGF0YSBiaXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqICBAZGF0YTogSTJDIGRhdGEgdmFsdWUgKDAgb3IgMSkgdG8gc2V0CisgKgorICogIFNldHMgdGhlIEkyQyBkYXRhIGJpdAorICoqLworc3RhdGljIHMzMiBpeGdiZV9zZXRfaTJjX2RhdGEoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwsIGJvb2wgZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCWlmIChkYXRhKQorCQkqaTJjY3RsIHw9IElYR0JFX0kyQ19EQVRBX09VVDsKKwllbHNlCisJCSppMmNjdGwgJj0gfklYR0JFX0kyQ19EQVRBX09VVDsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCAqaTJjY3RsKTsKKworCS8qIERhdGEgcmlzZS9mYWxsICgxMDAwbnMvMzAwbnMpIGFuZCBzZXQtdXAgdGltZSAoMjUwbnMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1JJU0UgKyBJWEdCRV9JMkNfVF9GQUxMICsgSVhHQkVfSTJDX1RfU1VfREFUQSk7CisKKwkvKiBWZXJpZnkgZGF0YSB3YXMgc2V0IGNvcnJlY3RseSAqLworCSppMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwlpZiAoZGF0YSAhPSBpeGdiZV9nZXRfaTJjX2RhdGEoaTJjY3RsKSkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfSTJDOworCQlod19kYmcoaHcsICJFcnJvciAtIEkyQyBkYXRhIHdhcyBub3Qgc2V0IHRvICVYLlxuIiwgZGF0YSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2kyY19kYXRhIC0gUmVhZHMgdGhlIEkyQyBTREEgZGF0YSBiaXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqCisgKiAgUmV0dXJucyB0aGUgSTJDIGRhdGEgYml0IHZhbHVlCisgKiovCitzdGF0aWMgYm9vbCBpeGdiZV9nZXRfaTJjX2RhdGEodTMyICppMmNjdGwpCit7CisJYm9vbCBkYXRhOworCisJaWYgKCppMmNjdGwgJiBJWEdCRV9JMkNfREFUQV9JTikKKwkJZGF0YSA9IDE7CisJZWxzZQorCQlkYXRhID0gMDsKKworCXJldHVybiBkYXRhOworfQorCisvKioKKyAqICBpeGdiZV9pMmNfYnVzX2NsZWFyIC0gQ2xlYXJzIHRoZSBJMkMgYnVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDbGVhcnMgdGhlIEkyQyBidXMgYnkgc2VuZGluZyBuaW5lIGNsb2NrIHB1bHNlcy4KKyAqICBVc2VkIHdoZW4gZGF0YSBsaW5lIGlzIHN0dWNrIGxvdy4KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19idXNfY2xlYXIoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJdTMyIGk7CisKKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDEpOworCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW4gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCQlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW4gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0Ljd1cyovCisJCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCX0KKworCS8qIFB1dCB0aGUgaTJjIGJ1cyBiYWNrIHRvIGRlZmF1bHQgc3RhdGUgKi8KKwlpeGdiZV9pMmNfc3RvcChodyk7Cit9CisKKy8qKgogICogIGl4Z2JlX2NoZWNrX3BoeV9saW5rX3RueCAtIERldGVybWluZSBsaW5rIGFuZCBzcGVlZCBzdGF0dXMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaAppbmRleCA0M2E5N2JjLi5jYzVmMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTU0LDE0ICs1NCwxNSBAQAogI2RlZmluZSBJWEdCRV9JMkNfRUVQUk9NX1NUQVRVU19JTl9QUk9HUkVTUyAgMHgzCiAKIC8qIEJpdC1zaGlmdCBtYWNyb3MgKi8KLSNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTBfU0hJRlQgICAgMTIKLSNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTFfU0hJRlQgICAgOAotI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMl9TSElGVCAgICA0CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUwX1NISUZUICAgIDI0CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUxX1NISUZUICAgIDE2CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUyX1NISUZUICAgIDgKIAogLyogVmVuZG9yIE9VSXM6IGZvcm1hdCBvZiBPVUkgaXMgMHhbYnl0ZTBdW2J5dGUxXVtieXRlMl1bMDBdICovCiAjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX1RZQ08gICAgIDB4MDA0MDc2MDAKICNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfRlRMICAgICAgMHgwMDkwNjUwMAogI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9BVkFHTyAgICAweDAwMTc2QTAwCisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0lOVEVMICAgIDB4MDAxQjIxMDAKIAogLyogSTJDIFNEQSBhbmQgU0NMIHRpbWluZyBwYXJhbWV0ZXJzIGZvciBzdGFuZGFyZCBtb2RlICovCiAjZGVmaW5lIElYR0JFX0kyQ19UX0hEX1NUQSAgNApAQCAtMTAxLDUgKzEwMiwxMiBAQAogczMyIGl4Z2JlX2dldF9zZnBfaW5pdF9zZXF1ZW5jZV9vZmZzZXRzKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpsaXN0X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGFfb2Zmc2V0KTsKLQorczMyIGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4ICpkYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4IGRhdGEpOworczMyIGl4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSk7CitzMzIgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBlZXByb21fZGF0YSk7CiAjZW5kaWYgLyogX0lYR0JFX1BIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCmluZGV4IGYwMTFjNTcuLjJiMmVjYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIElYR0JFX0lOVEVMX1ZFTkRPUl9JRCAgIDB4ODA4NgogCiAvKiBEZXZpY2UgSURzICovCisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OCAgICAgICAgICAgICAgIDB4MTBCNgorI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThfQlggICAgICAgICAgICAweDE1MDgKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUICAgMHgxMEM2CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUIDB4MTBDNwogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThFQl9TRlBfTE9NICAgICAweDEwREIKQEAgLTQzLDYgKzQ1LDkgQEAKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X0RBX0RVQUxfUE9SVCAgMHgxMEYxCiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OF9TUl9EVUFMX1BPUlRfRU0gICAgICAweDEwRTEKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4RUJfWEZfTFIgICAgICAgMHgxMEY0CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OSAgICAgICAgICAgICAgIDB4MTBEOAorI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0ICAgICAgICAgICAweDEwRjcKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1NGUCAgICAgICAgICAgMHgxMEZCCiAKIC8qIEdlbmVyYWwgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0NUUkwgICAgICAweDAwMDAwCkBAIC01MCw5ICs1NSwxMiBAQAogI2RlZmluZSBJWEdCRV9DVFJMX0VYVCAgMHgwMDAxOAogI2RlZmluZSBJWEdCRV9FU0RQICAgICAgMHgwMDAyMAogI2RlZmluZSBJWEdCRV9FT0RTRFAgICAgMHgwMDAyOAorI2RlZmluZSBJWEdCRV9JMkNDVEwgICAgMHgwMDAyOAogI2RlZmluZSBJWEdCRV9MRURDVEwgICAgMHgwMDIwMAogI2RlZmluZSBJWEdCRV9GUlRJTUVSICAgMHgwMDA0OAogI2RlZmluZSBJWEdCRV9UQ1BUSU1FUiAgMHgwMDA0QworI2RlZmluZSBJWEdCRV9DT1JFU1BBUkUgMHgwMDYwMAorI2RlZmluZSBJWEdCRV9FWFZFVCAgICAgMHgwNTA3OAogCiAvKiBOVk0gUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0VFQyAgICAgICAweDEwMDEwCkBAIC02Niw2ICs3NCwxOSBAQAogI2RlZmluZSBJWEdCRV9GTE9QICAgICAgMHgxMDEzQwogI2RlZmluZSBJWEdCRV9HUkMgICAgICAgMHgxMDIwMAogCisvKiBHZW5lcmFsIFJlY2VpdmUgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9HUkNfTU5HICAweDAwMDAwMDAxIC8qIE1hbmFnZWFiaWxpdHkgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX0dSQ19BUE1FIDB4MDAwMDAwMDIgLyogQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9WUERESUFHMCAgMHgxMDIwNAorI2RlZmluZSBJWEdCRV9WUERESUFHMSAgMHgxMDIwOAorCisvKiBJMkNDVEwgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX0kyQ19DTEtfSU4gICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9JMkNfQ0xLX09VVCAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfSTJDX0RBVEFfSU4gICAweDAwMDAwMDA0CisjZGVmaW5lIElYR0JFX0kyQ19EQVRBX09VVCAgMHgwMDAwMDAwOAorCiAvKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0VJQ1IgICAgICAweDAwODAwCiAjZGVmaW5lIElYR0JFX0VJQ1MgICAgICAweDAwODA4CkBAIC03MywyOCArOTQsNjMgQEAKICNkZWZpbmUgSVhHQkVfRUlNQyAgICAgIDB4MDA4ODgKICNkZWZpbmUgSVhHQkVfRUlBQyAgICAgIDB4MDA4MTAKICNkZWZpbmUgSVhHQkVfRUlBTSAgICAgIDB4MDA4OTAKLSNkZWZpbmUgSVhHQkVfRUlUUihfaSkgICgoKF9pKSA8PSAyMykgPyAoMHgwMDgyMCArICgoX2kpICogNCkpIDogKDB4MDEyMzAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX0VJQ1NfRVgoX2kpICAgKDB4MDBBOTAgKyAoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfRUlNU19FWChfaSkgICAoMHgwMEFBMCArIChfaSkgKiA0KQorI2RlZmluZSBJWEdCRV9FSU1DX0VYKF9pKSAgICgweDAwQUIwICsgKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX0VJQU1fRVgoX2kpICAgKDB4MDBBRDAgKyAoX2kpICogNCkKKy8qCisgKiA4MjU5OCBFSVRSIGlzIDE2IGJpdHMgYnV0IHNldCB0aGUgbGltaXRzIGJhc2VkIG9uIHRoZSBtYXgKKyAqIHN1cHBvcnRlZCBieSBhbGwgaXhnYmUgaGFyZHdhcmUuICA4MjU5OSBFSVRSIGlzIG9ubHkgMTIgYml0cywKKyAqIHdpdGggdGhlIGxvd2VyIDMgYWx3YXlzIHplcm8uCisgKi8KKyNkZWZpbmUgSVhHQkVfTUFYX0lOVF9SQVRFIDQ4ODI4MQorI2RlZmluZSBJWEdCRV9NSU5fSU5UX1JBVEUgOTU2CisjZGVmaW5lIElYR0JFX01BWF9FSVRSICAgICAweDAwMDAwRkY4CisjZGVmaW5lIElYR0JFX01JTl9FSVRSICAgICA4CisjZGVmaW5lIElYR0JFX0VJVFIoX2kpICAoKChfaSkgPD0gMjMpID8gKDB4MDA4MjAgKyAoKF9pKSAqIDQpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTIzMDAgKyAoKChfaSkgLSAyNCkgKiA0KSkpCisjZGVmaW5lIElYR0JFX0VJVFJfSVRSX0lOVF9NQVNLIDB4MDAwMDBGRjgKKyNkZWZpbmUgSVhHQkVfRUlUUl9MTElfTU9EICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBJWEdCRV9FSVRSX0NOVF9XRElTICAgICAweDgwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0lWQVIoX2kpICAoMHgwMDkwMCArICgoX2kpICogNCkpIC8qIDI0IGF0IDB4OTAwLTB4OTYwICovCisjZGVmaW5lIElYR0JFX0lWQVJfTUlTQyAweDAwQTAwIC8qIG1pc2MgTVNJLVggaW50ZXJydXB0IGNhdXNlcyAqLworI2RlZmluZSBJWEdCRV9FSVRSU0VMICAgMHgwMDg5NAogI2RlZmluZSBJWEdCRV9NU0lYVCAgICAgMHgwMDAwMCAvKiBNU0ktWCBUYWJsZS4gMHgwMDAwIC0gMHgwMUMgKi8KICNkZWZpbmUgSVhHQkVfTVNJWFBCQSAgIDB4MDIwMDAgLyogTVNJLVggUGVuZGluZyBiaXQgYXJyYXkgKi8KICNkZWZpbmUgSVhHQkVfUEJBQ0woX2kpICgoKF9pKSA9PSAwKSA/ICgweDExMDY4KSA6ICgweDExMEMwICsgKChfaSkgKiA0KSkpCiAjZGVmaW5lIElYR0JFX0dQSUUgICAgICAweDAwODk4CiAKIC8qIEZsb3cgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfRkNBREJVTCAgIDB4MDMyMTAKKyNkZWZpbmUgSVhHQkVfRkNBREJVSCAgIDB4MDMyMTQKKyNkZWZpbmUgSVhHQkVfRkNBTUFDTCAgIDB4MDQzMjgKKyNkZWZpbmUgSVhHQkVfRkNBTUFDSCAgIDB4MDQzMkMKKyNkZWZpbmUgSVhHQkVfRkNSVEhfODI1OTkoX2kpICgweDAzMjYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9GQ1JUTF84MjU5OShfaSkgKDB4MDMyMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX1BGQ1RPUCAgICAweDAzMDA4CiAjZGVmaW5lIElYR0JFX0ZDVFRWKF9pKSAoMHgwMzIwMCArICgoX2kpICogNCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfRkNSVEwoX2kpICgweDAzMjIwICsgKChfaSkgKiA4KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9GQ1JUSChfaSkgKDB4MDMyNjAgKyAoKF9pKSAqIDgpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0ZDUlRWICAgICAweDAzMkEwCisjZGVmaW5lIElYR0JFX0ZDQ0ZHICAgICAweDAzRDAwCiAjZGVmaW5lIElYR0JFX1RGQ1MgICAgICAweDBDRTAwCiAKIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqLwotI2RlZmluZSBJWEdCRV9SREJBTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDAwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRCQUgoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAwNCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JETEVOKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwOCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMDggKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SREgoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTAgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDEwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRUKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDE4ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAxOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JYRENUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMjggKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDI4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRCQUwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDAwICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMDAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SREJBSChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAwNCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JETEVOKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwOCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDA4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRIKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDEwICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMTAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SRFQoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTggKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAxOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JYRENUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMjggKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMjggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SRERDQyAgICAgIDB4MDJGMjAKKyNkZWZpbmUgSVhHQkVfUlhNRU1XUkFQICAweDAzMTkwCisjZGVmaW5lIElYR0JFX1NUQVJDVFJMICAgMHgwMzAyNAogLyoKICAqIFNwbGl0IGFuZCBSZXBsaWNhdGlvbiBSZWNlaXZlIENvbnRyb2wgUmVnaXN0ZXJzCiAgKiAwMC0xNSA6IDB4MDIxMDAgKyBuKjQKQEAgLTEyNywxMCArMTgzLDE1IEBACiAjZGVmaW5lIElYR0JFX0RSRUNDQ1RMX0RJU0FCTEUgMAogLyogTXVsdGljYXN0IFRhYmxlIEFycmF5IC0gMTI4IGVudHJpZXMgKi8KICNkZWZpbmUgSVhHQkVfTVRBKF9pKSAgICgweDA1MjAwICsgKChfaSkgKiA0KSkKLSNkZWZpbmUgSVhHQkVfUkFMKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwMCArICgoX2kpICogOCkpIDogKDB4MEEyMDAgKyAoKF9pKSAqIDgpKSkKLSNkZWZpbmUgSVhHQkVfUkFIKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwNCArICgoX2kpICogOCkpIDogKDB4MEEyMDQgKyAoKF9pKSAqIDgpKSkKKyNkZWZpbmUgSVhHQkVfUkFMKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwMCArICgoX2kpICogOCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBMjAwICsgKChfaSkgKiA4KSkpCisjZGVmaW5lIElYR0JFX1JBSChfaSkgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDQgKyAoKF9pKSAqIDgpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQTIwNCArICgoX2kpICogOCkpKQorI2RlZmluZSBJWEdCRV9NUFNBUl9MTyhfaSkgKDB4MEE2MDAgKyAoKF9pKSAqIDgpKQorI2RlZmluZSBJWEdCRV9NUFNBUl9ISShfaSkgKDB4MEE2MDQgKyAoKF9pKSAqIDgpKQogLyogUGFja2V0IHNwbGl0IHJlY2VpdmUgdHlwZSAqLwotI2RlZmluZSBJWEdCRV9QU1JUWVBFKF9pKSAgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0ODAgKyAoKF9pKSAqIDQpKSA6ICgweDBFQTAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX1BTUlRZUEUoX2kpICAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQ4MCArICgoX2kpICogNCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEVBMDAgKyAoKF9pKSAqIDQpKSkKIC8qIGFycmF5IG9mIDQwOTYgMS1iaXQgdmxhbiBmaWx0ZXJzICovCiAjZGVmaW5lIElYR0JFX1ZGVEEoX2kpICAoMHgwQTAwMCArICgoX2kpICogNCkpCiAvKmFycmF5IG9mIDQwOTYgNC1iaXQgdmxhbiB2bWRxIGluZGljZXMgKi8KQEAgLTEzOSw2ICsyMDAsMjggQEAKICNkZWZpbmUgSVhHQkVfVkxOQ1RSTCAgIDB4MDUwODgKICNkZWZpbmUgSVhHQkVfTUNTVENUUkwgIDB4MDUwOTAKICNkZWZpbmUgSVhHQkVfTVJRQyAgICAgIDB4MDU4MTgKKyNkZWZpbmUgSVhHQkVfU0FRRihfaSkgICgweDBFMDAwICsgKChfaSkgKiA0KSkgLyogU291cmNlIEFkZHJlc3MgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0RBUUYoX2kpICAoMHgwRTIwMCArICgoX2kpICogNCkpIC8qIERlc3QuIEFkZHJlc3MgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX1NEUFFGKF9pKSAoMHgwRTQwMCArICgoX2kpICogNCkpIC8qIFNyYyBEZXN0LiBBZGRyIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9GVFFGKF9pKSAgKDB4MEU2MDAgKyAoKF9pKSAqIDQpKSAvKiBGaXZlIFR1cGxlIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9FVFFGKF9pKSAgKDB4MDUxMjggKyAoKF9pKSAqIDQpKSAvKiBFVHlwZSBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfRVRRUyhfaSkgICgweDBFQzAwICsgKChfaSkgKiA0KSkgLyogRVR5cGUgUXVldWUgU2VsZWN0ICovCisjZGVmaW5lIElYR0JFX1NZTlFGICAgICAweDBFQzMwIC8qIFNZTiBQYWNrZXQgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX1JRVEMgICAgICAweDBFQzcwCisjZGVmaW5lIElYR0JFX01UUUMgICAgICAweDA4MTIwCisjZGVmaW5lIElYR0JFX1ZMVkYoX2kpICAoMHgwRjEwMCArICgoX2kpICogNCkpICAvKiA2NCBvZiB0aGVzZSAoMC02MykgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRkIoX2kpICgweDBGMjAwICsgKChfaSkgKiA0KSkgIC8qIDEyOCBvZiB0aGVzZSAoMC0xMjcpICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTCAgICAweDA1MUIwCisjZGVmaW5lIElYR0JFX1ZGUkUoX2kpICAoMHgwNTFFMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZGVEUoX2kpICAoMHgwODExMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1FERSAgICAgICAweDJGMDQKKyNkZWZpbmUgSVhHQkVfVk1PTFIoX2kpICgweDBGMDAwICsgKChfaSkgKiA0KSkgLyogNjQgdG90YWwgKi8KKyNkZWZpbmUgSVhHQkVfVVRBKF9pKSAgICgweDBGNDAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1SQ1RMKF9pKSAgICAgICAgKDB4MEY2MDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTVJWTEFOKF9pKSAgICAgICAoMHgwRjYxMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUlZNKF9pKSAgICAgICAgICgweDBGNjMwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfTDM0VF9JTUlSKF9pKSAgICAgICgweDBFODAwICsgKChfaSkgKiA0KSkgLyoxMjggb2YgdGhlc2UgKDAtMTI3KSovCisjZGVmaW5lIElYR0JFX0xMSVRIUkVTSCAweDBFQzkwCiAjZGVmaW5lIElYR0JFX0lNSVIoX2kpICAoMHgwNUE4MCArICgoX2kpICogNCkpICAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0lNSVJFWFQoX2kpICAgICAgICgweDA1QUEwICsgKChfaSkgKiA0KSkgIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfSU1JUlZQICAgIDB4MDVBQzAKQEAgLTE0Niw3ICsyMjksNiBAQAogI2RlZmluZSBJWEdCRV9SRVRBKF9pKSAgKDB4MDVDMDAgKyAoKF9pKSAqIDQpKSAgLyogMzIgb2YgdGhlc2UgKDAtMzEpICovCiAjZGVmaW5lIElYR0JFX1JTU1JLKF9pKSAoMHgwNUM4MCArICgoX2kpICogNCkpICAvKiAxMCBvZiB0aGVzZSAoMC05KSAqLwogCi0KIC8qIFRyYW5zbWl0IERNQSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfVERCQUwoX2kpICgweDA2MDAwICsgKChfaSkgKiAweDQwKSkgLyogMzIgb2YgdGhlc2UgKDAtMzEpKi8KICNkZWZpbmUgSVhHQkVfVERCQUgoX2kpICgweDA2MDA0ICsgKChfaSkgKiAweDQwKSkKQEAgLTE1OCw3ICsyNDAsMjAgQEAKICNkZWZpbmUgSVhHQkVfVERXQkFIKF9pKSAoMHgwNjAzQyArICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIElYR0JFX0RUWENUTCAgICAweDA3RTAwCiAKKyNkZWZpbmUgSVhHQkVfRE1BVFhDVEwgIDB4MDRBODAKKyNkZWZpbmUgSVhHQkVfRFRYTVhTWlJRICAgICAweDA4MTAwCisjZGVmaW5lIElYR0JFX0RUWFRDUEZMR0wgICAgMHgwNEE4OAorI2RlZmluZSBJWEdCRV9EVFhUQ1BGTEdIICAgIDB4MDRBOEMKKyNkZWZpbmUgSVhHQkVfTEJEUlBFTiAgICAgICAweDBDQTAwCisjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0goX2kpICgweDA0OTUwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAwIC0gNyAqLworCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX1RFICAgICAgIDB4MSAvKiBUcmFuc21pdCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfTlMgICAgICAgMHgyIC8qIE5vIFNub29wIExTTyBoZHIgYnVmZmVyICovCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX0dEViAgICAgIDB4OCAvKiBHbG9iYWwgRG91YmxlIFZMQU4gKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfVlRfU0hJRlQgMTYgIC8qIFZMQU4gRXRoZXJUeXBlICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkwoX2kpICAgICgweDA3MjAwICsgKChfaSkgKiA0KSkgLyogMTYgb2YgdGhlc2UgKDAtMTUpICovCisvKiBUeCBEQ0EgQ29udHJvbCByZWdpc3RlciA6IDEyOCBvZiB0aGVzZSAoMC0xMjcpICovCisjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfODI1OTkoX2kpICAoMHgwNjAwQyArICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIElYR0JFX1RJUEcgICAgICAweDBDQjAwCiAjZGVmaW5lIElYR0JFX1RYUEJTSVpFKF9pKSAgICAgICgweDBDQzAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9NTkdUWE1BUCAgMHgwQ0QxMApAQCAtMTc1LDkgKzI3MCw2OSBAQAogCiAjZGVmaW5lIElYR0JFX1dVUEwgICAgICAweDA1OTAwCiAjZGVmaW5lIElYR0JFX1dVUE0gICAgICAweDA1QTAwIC8qIHdha2UgdXAgcGt0IG1lbW9yeSAweDVBMDAtMHg1QTdDICovCi0jZGVmaW5lIElYR0JFX0ZIRlQgICAgICAweDA5MDAwIC8qIEZsZXggaG9zdCBmaWx0ZXIgdGFibGUgOTAwMC05M0ZDICovCisjZGVmaW5lIElYR0JFX0ZIRlQoX24pICAgICAoMHgwOTAwMCArIChfbiAqIDB4MTAwKSkgLyogRmxleCBob3N0IGZpbHRlciB0YWJsZSAqLworI2RlZmluZSBJWEdCRV9GSEZUX0VYVChfbikgKDB4MDk4MDAgKyAoX24gKiAweDEwMCkpIC8qIEV4dCBGbGV4aWJsZSBIb3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRmlsdGVyIFRhYmxlICovCiAKLS8qIE11c2ljIHJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9GTEVYSUJMRV9GSUxURVJfQ09VTlRfTUFYICAgICAgICAgNAorI2RlZmluZSBJWEdCRV9FWFRfRkxFWElCTEVfRklMVEVSX0NPVU5UX01BWCAgICAgMgorCisvKiBFYWNoIEZsZXhpYmxlIEZpbHRlciBpcyBhdCBtb3N0IDEyOCAoMHg4MCkgYnl0ZXMgaW4gbGVuZ3RoICovCisjZGVmaW5lIElYR0JFX0ZMRVhJQkxFX0ZJTFRFUl9TSVpFX01BWCAgMTI4CisjZGVmaW5lIElYR0JFX0ZIRlRfTEVOR1RIX09GRlNFVCAgICAgICAgMHhGQyAgLyogTGVuZ3RoIGJ5dGUgaW4gRkhGVCAqLworI2RlZmluZSBJWEdCRV9GSEZUX0xFTkdUSF9NQVNLICAgICAgICAgIDB4MEZGIC8qIExlbmd0aCBpbiBsb3dlciBieXRlICovCisKKy8qIERlZmluaXRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50IGFuZCB3YWtldXAgcmVnaXN0ZXJzICovCisvKiBXYWtlIFVwIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfV1VDX1BNRV9FTiAgICAgMHgwMDAwMDAwMiAvKiBQTUUgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVQ19QTUVfU1RBVFVTIDB4MDAwMDAwMDQgLyogUE1FIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9XVUNfQURWRDNXVUMgICAweDAwMDAwMDEwIC8qIEQzQ29sZCB3YWtlIHVwIGNhcC4gZW5hYmxlKi8KKworLyogV2FrZSBVcCBGaWx0ZXIgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9XVUZDX0xOS0MgMHgwMDAwMDAwMSAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX01BRyAgMHgwMDAwMDAwMiAvKiBNYWdpYyBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0VYICAgMHgwMDAwMDAwNCAvKiBEaXJlY3RlZCBFeGFjdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfTUMgICAweDAwMDAwMDA4IC8qIERpcmVjdGVkIE11bHRpY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfQkMgICAweDAwMDAwMDEwIC8qIEJyb2FkY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfQVJQICAweDAwMDAwMDIwIC8qIEFSUCBSZXF1ZXN0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfSVBWNCAweDAwMDAwMDQwIC8qIERpcmVjdGVkIElQdjQgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19JUFY2IDB4MDAwMDAwODAgLyogRGlyZWN0ZWQgSVB2NiBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX01ORyAgMHgwMDAwMDEwMCAvKiBEaXJlY3RlZCBNZ210IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisKKyNkZWZpbmUgSVhHQkVfV1VGQ19JR05PUkVfVENPICAgMHgwMDAwODAwMCAvKiBJZ25vcmUgV2FrZU9uIFRDTyBwYWNrZXRzICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMCAweDAwMDEwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDEgMHgwMDAyMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgyIDB4MDAwNDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDIgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMyAweDAwMDgwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAzIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDQgMHgwMDEwMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgNCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFg1IDB4MDAyMDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDUgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYX0ZJTFRFUlMgICAgIDB4MDAwRjAwMDAgLyogTWFzayBmb3IgNCBmbGV4IGZpbHRlcnMgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19FWFRfRkxYX0ZJTFRFUlMgMHgwMDMwMDAwMCAvKiBNYXNrIGZvciBFeHQuIGZsZXggZmlsdGVycyAqLworI2RlZmluZSBJWEdCRV9XVUZDX0FMTF9GSUxURVJTICAgICAweDAwM0YwMEZGIC8qIE1hc2sgZm9yIGFsbCA2IHdha2V1cCBmaWx0ZXJzKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFhfT0ZGU0VUICAgICAgMTYgLyogT2Zmc2V0IHRvIHRoZSBGbGV4aWJsZSBGaWx0ZXJzIGJpdHMgKi8KKworLyogV2FrZSBVcCBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfV1VTX0xOS0MgIElYR0JFX1dVRkNfTE5LQworI2RlZmluZSBJWEdCRV9XVVNfTUFHICAgSVhHQkVfV1VGQ19NQUcKKyNkZWZpbmUgSVhHQkVfV1VTX0VYICAgIElYR0JFX1dVRkNfRVgKKyNkZWZpbmUgSVhHQkVfV1VTX01DICAgIElYR0JFX1dVRkNfTUMKKyNkZWZpbmUgSVhHQkVfV1VTX0JDICAgIElYR0JFX1dVRkNfQkMKKyNkZWZpbmUgSVhHQkVfV1VTX0FSUCAgIElYR0JFX1dVRkNfQVJQCisjZGVmaW5lIElYR0JFX1dVU19JUFY0ICBJWEdCRV9XVUZDX0lQVjQKKyNkZWZpbmUgSVhHQkVfV1VTX0lQVjYgIElYR0JFX1dVRkNfSVBWNgorI2RlZmluZSBJWEdCRV9XVVNfTU5HICAgSVhHQkVfV1VGQ19NTkcKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDAgIElYR0JFX1dVRkNfRkxYMAorI2RlZmluZSBJWEdCRV9XVVNfRkxYMSAgSVhHQkVfV1VGQ19GTFgxCisjZGVmaW5lIElYR0JFX1dVU19GTFgyICBJWEdCRV9XVUZDX0ZMWDIKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDMgIElYR0JFX1dVRkNfRkxYMworI2RlZmluZSBJWEdCRV9XVVNfRkxYNCAgSVhHQkVfV1VGQ19GTFg0CisjZGVmaW5lIElYR0JFX1dVU19GTFg1ICBJWEdCRV9XVUZDX0ZMWDUKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWF9GSUxURVJTICBJWEdCRV9XVUZDX0ZMWF9GSUxURVJTCisKKy8qIFdha2UgVXAgUGFja2V0IExlbmd0aCAqLworI2RlZmluZSBJWEdCRV9XVVBMX0xFTkdUSF9NQVNLIDB4RkZGRgorCisvKiBEQ0IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JNQ1MgICAgICAweDAzRDAwCiAjZGVmaW5lIElYR0JFX0RQTUNTICAgICAweDA3RjQwCiAjZGVmaW5lIElYR0JFX1BEUE1DUyAgICAweDBDRDAwCkBAIC0xOTAsNiArMzQ1LDEyMiBAQAogI2RlZmluZSBJWEdCRV9URFBUMlRDU1IoX2kpICAgICAoMHgwQ0Q0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KIAogCisvKiBTZWN1cml0eSBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9TRUNUWENUUkwgICAgICAgICAweDA4ODAwCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVCAgICAgICAgIDB4MDg4MDQKKyNkZWZpbmUgSVhHQkVfU0VDVFhCVUZGQUYgICAgICAgMHgwODgwOAorI2RlZmluZSBJWEdCRV9TRUNUWE1JTklGRyAgICAgICAweDA4ODEwCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVCAgICAgICAgIDB4MDg4MDQKKyNkZWZpbmUgSVhHQkVfU0VDUlhDVFJMICAgICAgICAgMHgwOEQwMAorI2RlZmluZSBJWEdCRV9TRUNSWFNUQVQgICAgICAgICAweDA4RDA0CisKKy8qIFNlY3VyaXR5IEJpdCBGaWVsZHMgYW5kIE1hc2tzICovCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9TRUNUWF9ESVMgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfVFhfRElTICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NUT1JFX0ZPUldBUkQgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUX1NFQ1RYX1JEWSAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVF9FQ0NfVFhFUlIgICAgICAgMHgwMDAwMDAwMgorCisjZGVmaW5lIElYR0JFX1NFQ1JYQ1RSTF9TRUNSWF9ESVMgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNSWENUUkxfUlhfRElTICAgICAgICAgIDB4MDAwMDAwMDIKKworI2RlZmluZSBJWEdCRV9TRUNSWFNUQVRfU0VDUlhfUkRZICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfU0VDUlhTVEFUX0VDQ19SWEVSUiAgICAgICAweDAwMDAwMDAyCisKKy8qIExpbmtTZWMgKE1hY1NlYykgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0xTRUNUWENBUCAgICAgICAgIDB4MDhBMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQICAgICAgICAgMHgwOEYwMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMICAgICAgICAweDA4QTA0CisjZGVmaW5lIElYR0JFX0xTRUNUWFNDTCAgICAgICAgIDB4MDhBMDggLyogU0NJIExvdyAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhTQ0ggICAgICAgICAweDA4QTBDIC8qIFNDSSBIaWdoICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFNBICAgICAgICAgIDB4MDhBMTAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYUE4wICAgICAgICAgMHgwOEExNAorI2RlZmluZSBJWEdCRV9MU0VDVFhQTjEgICAgICAgICAweDA4QTE4CisjZGVmaW5lIElYR0JFX0xTRUNUWEtFWTAoX24pICAgICgweDA4QTFDICsgKDQgKiAoX24pKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhLRVkxKF9uKSAgICAoMHgwOEEyQyArICg0ICogKF9uKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTCAgICAgICAgMHgwOEYwNAorI2RlZmluZSBJWEdCRV9MU0VDUlhTQ0wgICAgICAgICAweDA4RjA4CisjZGVmaW5lIElYR0JFX0xTRUNSWFNDSCAgICAgICAgIDB4MDhGMEMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYU0EoX2kpICAgICAgKDB4MDhGMTAgKyAoNCAqIChfaSkpKSAvKiAyIG9mIHRoZXNlICgwLTEpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFBOKF9pKSAgICAgICgweDA4RjE4ICsgKDQgKiAoX2kpKSkgLyogMiBvZiB0aGVzZSAoMC0xKSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhLRVkoX24sIF9tKSAoMHgwOEYyMCArICgoMHgxMCAqIChfbikpICsgKDQgKiAoX20pKSkpCisjZGVmaW5lIElYR0JFX0xTRUNUWFVUICAgICAgICAgIDB4MDhBM0MgLyogT3V0UGt0c1VudGFnZ2VkICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFBLVEUgICAgICAgIDB4MDhBNDAgLyogT3V0UGt0c0VuY3J5cHRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhQS1RQICAgICAgICAweDA4QTQ0IC8qIE91dFBrdHNQcm90ZWN0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYT0NURSAgICAgICAgMHgwOEE0OCAvKiBPdXRPY3RldHNFbmNyeXB0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYT0NUUCAgICAgICAgMHgwOEE0QyAvKiBPdXRPY3RldHNQcm90ZWN0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVVQgICAgICAgICAgMHgwOEY0MCAvKiBJblBrdHNVbnRhZ2dlZC9JblBrdHNOb1RhZyAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhPQ1REICAgICAgICAweDA4RjQ0IC8qIEluT2N0ZXRzRGVjcnlwdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE9DVFYgICAgICAgIDB4MDhGNDggLyogSW5PY3RldHNWYWxpZGF0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQkFEICAgICAgICAgMHgwOEY0QyAvKiBJblBrdHNCYWRUYWcgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTk9TQ0kgICAgICAgMHgwOEY1MCAvKiBJblBrdHNOb1NjaSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVTlNDSSAgICAgICAweDA4RjU0IC8qIEluUGt0c1Vua25vd25TY2kgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVU5DSCAgICAgICAgMHgwOEY1OCAvKiBJblBrdHNVbmNoZWNrZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYREVMQVkgICAgICAgMHgwOEY1QyAvKiBJblBrdHNEZWxheWVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWExBVEUgICAgICAgIDB4MDhGNjAgLyogSW5Qa3RzTGF0ZSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhPSyhfbikgICAgICAoMHgwOEY2NCArICgweDA0ICogKF9uKSkpIC8qIEluUGt0c09rICovCisjZGVmaW5lIElYR0JFX0xTRUNSWElOVihfbikgICAgICgweDA4RjZDICsgKDB4MDQgKiAoX24pKSkgLyogSW5Qa3RzSW52YWxpZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhOVihfbikgICAgICAoMHgwOEY3NCArICgweDA0ICogKF9uKSkpIC8qIEluUGt0c05vdFZhbGlkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFVOU0EgICAgICAgIDB4MDhGN0MgLyogSW5Qa3RzVW51c2VkU2EgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTlVTQSAgICAgICAgMHgwOEY4MCAvKiBJblBrdHNOb3RVc2luZ1NhICovCisKKy8qIExpbmtTZWMgKE1hY1NlYykgQml0IEZpZWxkcyBhbmQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ0FQX1NVTV9NQVNLICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIElYR0JFX0xTRUNUWENBUF9TVU1fU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQX1NVTV9NQVNLICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIElYR0JFX0xTRUNSWENBUF9TVU1fU0hJRlQgICAgICAgMTYKKworI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0VOX01BU0sgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9ESVNBQkxFICAgICAgICAweDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BVVRIICAgICAgICAgICAweDEKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BVVRIX0VOQ1JZUFQgICAweDIKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BSVNDSSAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfUE5USFJTSF9NQVNLICAgMHhGRkZGRkYwMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX1JTVl9NQVNLICAgICAgIDB4MDAwMDAwRDgKKworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0VOX01BU0sgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9FTl9TSElGVCAgICAgICAyCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRElTQUJMRSAgICAgICAgMHgwCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfQ0hFQ0sgICAgICAgICAgMHgxCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfU1RSSUNUICAgICAgICAgMHgyCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRFJPUCAgICAgICAgICAgMHgzCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfUExTSCAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX1JQICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9SU1ZfTUFTSyAgICAgICAweEZGRkZGRjMzCisKKy8qIElwU2VjIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9JUFNUWElEWCAgICAgICAgICAweDA4OTAwCisjZGVmaW5lIElYR0JFX0lQU1RYU0FMVCAgICAgICAgIDB4MDg5MDQKKyNkZWZpbmUgSVhHQkVfSVBTVFhLRVkoX2kpICAgICAgKDB4MDg5MDggKyAoNCAqIChfaSkpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0lQU1JYSURYICAgICAgICAgIDB4MDhFMDAKKyNkZWZpbmUgSVhHQkVfSVBTUlhJUEFERFIoX2kpICAgKDB4MDhFMDQgKyAoNCAqIChfaSkpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0lQU1JYU1BJICAgICAgICAgIDB4MDhFMTQKKyNkZWZpbmUgSVhHQkVfSVBTUlhJUElEWCAgICAgICAgMHgwOEUxOAorI2RlZmluZSBJWEdCRV9JUFNSWEtFWShfaSkgICAgICAoMHgwOEUxQyArICg0ICogKF9pKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfSVBTUlhTQUxUICAgICAgICAgMHgwOEUyQworI2RlZmluZSBJWEdCRV9JUFNSWE1PRCAgICAgICAgICAweDA4RTMwCisKKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NUT1JFX0ZPUldBUkRfRU5BQkxFICAgIDB4NAorCisvKiBEQ0IgcmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1JUUlBDUyAgICAgIDB4MDI0MzAKKyNkZWZpbmUgSVhHQkVfUlRURENTICAgICAgMHgwNDkwMAorI2RlZmluZSBJWEdCRV9SVFRQQ1MgICAgICAweDBDRDAwCisjZGVmaW5lIElYR0JFX1JUUlVQMlRDICAgIDB4MDMwMjAKKyNkZWZpbmUgSVhHQkVfUlRUVVAyVEMgICAgMHgwQzgwMAorI2RlZmluZSBJWEdCRV9SVFJQVDRDKF9pKSAoMHgwMjE0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0UyhfaSkgKDB4MDIxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVERUMkMoX2kpICgweDA0OTEwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFREVDJTKF9pKSAoMHgwNDkzMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUFQyQyhfaSkgKDB4MENEMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVFBUMlMoX2kpICgweDBDRDQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFREUVNFTCAgICAweDA0OTA0CisjZGVmaW5lIElYR0JFX1JUVERUMUMgICAgIDB4MDQ5MDgKKyNkZWZpbmUgSVhHQkVfUlRURFQxUyAgICAgMHgwNDkwQworI2RlZmluZSBJWEdCRV9SVFREVEVDQyAgICAweDA0OTkwCisjZGVmaW5lIElYR0JFX1JUVERURUNDX05PX0JDTiAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVhHQkVfUlRUQkNOUkMgICAgMHgwNDk4NAogCiAvKiBTdGF0cyByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfQ1JDRVJSUyAgIDB4MDQwMDAKQEAgLTIwNCw2ICs0NzUsMTEgQEAKICNkZWZpbmUgSVhHQkVfTFhPTlJYQyAgIDB4MENGNjAKICNkZWZpbmUgSVhHQkVfTFhPRkZUWEMgIDB4MDNGNjgKICNkZWZpbmUgSVhHQkVfTFhPRkZSWEMgIDB4MENGNjgKKyNkZWZpbmUgSVhHQkVfTFhPTlJYQ05UIDB4MDQxQTQKKyNkZWZpbmUgSVhHQkVfTFhPRkZSWENOVCAweDA0MUE4CisjZGVmaW5lIElYR0JFX1BYT05SWENOVChfaSkgICAgICgweDA0MTQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9QWE9GRlJYQ05UKF9pKSAgICAoMHgwNDE2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUFhPTjJPRkZDTlQoX2kpICAgKDB4MDMyNDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1BYT05UWEMoX2kpICAgICAgICgweDAzRjAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAzRjAwLTNGMUMqLwogI2RlZmluZSBJWEdCRV9QWE9OUlhDKF9pKSAgICAgICAoMHgwQ0YwMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQ0YwMC1DRjFDKi8KICNkZWZpbmUgSVhHQkVfUFhPRkZUWEMoX2kpICAgICAgKDB4MDNGMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDNGMjAtM0YzQyovCkBAIC0yNDMsMTQgKzUxOSwyMCBAQAogI2RlZmluZSBJWEdCRV9NUFRDICAgICAgMHgwNDBGMAogI2RlZmluZSBJWEdCRV9CUFRDICAgICAgMHgwNDBGNAogI2RlZmluZSBJWEdCRV9YRUMgICAgICAgMHgwNDEyMAorI2RlZmluZSBJWEdCRV9TU1ZQQyAgICAgMHgwODc4MAogCi0jZGVmaW5lIElYR0JFX1JRU01SKF9pKSAoMHgwMjMwMCArICgoX2kpICogNCkpIC8qIDE2IG9mIHRoZXNlICovCi0jZGVmaW5lIElYR0JFX1RRU01SKF9pKSAoKChfaSkgPD0gNykgPyAoMHgwNzMwMCArICgoX2kpICogNCkpIDogKDB4MDg2MDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfUlFTTVIoX2kpICgweDAyMzAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVFFTTVIoX2kpICgoKF9pKSA8PSA3KSA/ICgweDA3MzAwICsgKChfaSkgKiA0KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDg2MDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfVFFTTShfaSkgICgweDA4NjAwICsgKChfaSkgKiA0KSkKIAogI2RlZmluZSBJWEdCRV9RUFJDKF9pKSAoMHgwMTAzMCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1FQVEMoX2kpICgweDA2MDMwICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUUJSQyhfaSkgKDB4MDEwMzQgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9RQlRDKF9pKSAoMHgwNjAzNCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FQUkRDKF9pKSAoMHgwMTQzMCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FCVENfTChfaSkgKDB4MDg3MDAgKyAoKF9pKSAqIDB4OCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FCVENfSChfaSkgKDB4MDg3MDQgKyAoKF9pKSAqIDB4OCkpIC8qIDE2IG9mIHRoZXNlICovCiAKIC8qIE1hbmFnZW1lbnQgKi8KICNkZWZpbmUgSVhHQkVfTUFWVFYoX2kpICgweDA1MDEwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwpAQCAtMjYzLDYgKzU0NSw5IEBACiAjZGVmaW5lIElYR0JFX01NQUwoX2kpICAoMHgwNTkxMCArICgoX2kpICogOCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfTU1BSChfaSkgICgweDA1OTE0ICsgKChfaSkgKiA4KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLwogI2RlZmluZSBJWEdCRV9GVEZUICAgICAgMHgwOTQwMCAvKiAweDk0MDAtMHg5N0ZDICovCisjZGVmaW5lIElYR0JFX01FVEYoX2kpICAoMHgwNTE5MCArICgoX2kpICogNCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfTURFRl9FWFQoX2kpICgweDA1MTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9MU1dGVyAgICAgMHgxNTAxNAogCiAvKiBBUkMgU3Vic3lzdGVtIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9ISUNSICAgICAgMHgxNUYwMApAQCAtMjk1LDE2ICs1ODAsNjUgQEAKICNkZWZpbmUgSVhHQkVfRENBX0lEICAgIDB4MTEwNzAKICNkZWZpbmUgSVhHQkVfRENBX0NUUkwgIDB4MTEwNzQKIAorLyogUENJZSByZWdpc3RlcnMgODI1OTktc3BlY2lmaWMgKi8KKyNkZWZpbmUgSVhHQkVfR0NSX0VYVCAgICAgICAgICAgMHgxMTA1MAorI2RlZmluZSBJWEdCRV9HU0NMXzVfODI1OTkgICAgICAweDExMDMwCisjZGVmaW5lIElYR0JFX0dTQ0xfNl84MjU5OSAgICAgIDB4MTEwMzQKKyNkZWZpbmUgSVhHQkVfR1NDTF83XzgyNTk5ICAgICAgMHgxMTAzOAorI2RlZmluZSBJWEdCRV9HU0NMXzhfODI1OTkgICAgICAweDExMDNDCisjZGVmaW5lIElYR0JFX1BIWUFEUl84MjU5OSAgICAgIDB4MTEwNDAKKyNkZWZpbmUgSVhHQkVfUEhZREFUXzgyNTk5ICAgICAgMHgxMTA0NAorI2RlZmluZSBJWEdCRV9QSFlDVExfODI1OTkgICAgICAweDExMDQ4CisjZGVmaW5lIElYR0JFX1BCQUNMUl84MjU5OSAgICAgIDB4MTEwNjgKKyNkZWZpbmUgSVhHQkVfQ0lBQV84MjU5OSAgICAgICAgMHgxMTA4OAorI2RlZmluZSBJWEdCRV9DSUFEXzgyNTk5ICAgICAgICAweDExMDhDCisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18wXzgyNTk5IDB4MTEwOTAKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzFfODI1OTkgMHgxMTA5NAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMl84MjU5OSAweDExMDk4CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18zXzgyNTk5IDB4MTEwOUMKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzRfODI1OTkgMHgxMTBBMAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNV84MjU5OSAweDExMEE0CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR182XzgyNTk5IDB4MTEwQTgKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzdfODI1OTkgMHgxMTBDMAorI2RlZmluZSBJWEdCRV9JTlRSUFRfQ1NSXzgyNTk5ICAweDExMEIwCisjZGVmaW5lIElYR0JFX0lOVFJQVF9NQVNLXzgyNTk5IDB4MTEwQjgKKyNkZWZpbmUgSVhHQkVfQ0RRX01CUl84MjU5OSAgICAgMHgxMTBCNAorI2RlZmluZSBJWEdCRV9NSVNDX1JFR184MjU5OSAgICAweDExMEYwCisjZGVmaW5lIElYR0JFX0VDQ19DVFJMXzBfODI1OTkgIDB4MTExMDAKKyNkZWZpbmUgSVhHQkVfRUNDX0NUUkxfMV84MjU5OSAgMHgxMTEwNAorI2RlZmluZSBJWEdCRV9FQ0NfU1RBVFVTXzgyNTk5ICAweDExMEUwCisjZGVmaW5lIElYR0JFX0JBUl9DVFJMXzgyNTk5ICAgIDB4MTEwRjQKKworLyogVGltZSBTeW5jIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9UU1lOQ1JYQ1RMIDB4MDUxODggLyogUnggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9UU1lOQ1RYQ1RMIDB4MDhDMDAgLyogVHggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9SWFNUTVBMICAgIDB4MDUxRTggLyogUnggdGltZXN0YW1wIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU1RNUEggICAgMHgwNTFBNCAvKiBSeCB0aW1lc3RhbXAgSGlnaCAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU0FUUkwgICAgMHgwNTFBMCAvKiBSeCB0aW1lc3RhbXAgYXR0cmlidXRlIGxvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU0FUUkggICAgMHgwNTFBOCAvKiBSeCB0aW1lc3RhbXAgYXR0cmlidXRlIGhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9SWE1UUkwgICAgIDB4MDUxMjAgLyogUlggbWVzc2FnZSB0eXBlIHJlZ2lzdGVyIGxvdyAtIFJXICovCisjZGVmaW5lIElYR0JFX1RYU1RNUEwgICAgMHgwOEMwNCAvKiBUeCB0aW1lc3RhbXAgdmFsdWUgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfVFhTVE1QSCAgICAweDA4QzA4IC8qIFR4IHRpbWVzdGFtcCB2YWx1ZSBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfU1lTVElNTCAgICAweDA4QzBDIC8qIFN5c3RlbSB0aW1lIHJlZ2lzdGVyIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1NZU1RJTUggICAgMHgwOEMxMCAvKiBTeXN0ZW0gdGltZSByZWdpc3RlciBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfVElNSU5DQSAgICAweDA4QzE0IC8qIEluY3JlbWVudCBhdHRyaWJ1dGVzIHJlZ2lzdGVyIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfUlhVRFAgICAgICAweDA4QzFDIC8qIFRpbWUgU3luYyBSeCBVRFAgUG9ydCAtIFJXICovCisKIC8qIERpYWdub3N0aWMgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JEU1RBVENUTCAgIDB4MDJDMjAKICNkZWZpbmUgSVhHQkVfUkRTVEFUKF9pKSAgKDB4MDJDMDAgKyAoKF9pKSAqIDQpKSAvKiAweDAyQzAwLTB4MDJDMUMgKi8KICNkZWZpbmUgSVhHQkVfUkRITVBOICAgICAgMHgwMkYwOAogI2RlZmluZSBJWEdCRV9SSUNfRFcoX2kpICAoMHgwMkYxMCArICgoX2kpICogNCkpCiAjZGVmaW5lIElYR0JFX1JEUFJPQkUgICAgIDB4MDJGMjAKKyNkZWZpbmUgSVhHQkVfUkRNQU0gICAgICAgMHgwMkYzMAorI2RlZmluZSBJWEdCRV9SRE1BRCAgICAgICAweDAyRjM0CiAjZGVmaW5lIElYR0JFX1REU1RBVENUTCAgIDB4MDdDMjAKICNkZWZpbmUgSVhHQkVfVERTVEFUKF9pKSAgKDB4MDdDMDAgKyAoKF9pKSAqIDQpKSAvKiAweDA3QzAwIC0gMHgwN0MxQyAqLwogI2RlZmluZSBJWEdCRV9UREhNUE4gICAgICAweDA3RjA4CisjZGVmaW5lIElYR0JFX1RESE1QTjIgICAgIDB4MDgyRkMKKyNkZWZpbmUgSVhHQkVfVFhERVNDSUMgICAgMHgwODJDQwogI2RlZmluZSBJWEdCRV9USUNfRFcoX2kpICAoMHgwN0YxMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1RJQ19EVzIoX2kpICgweDA4MkIwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgSVhHQkVfVERQUk9CRSAgICAgMHgwN0YyMAogI2RlZmluZSBJWEdCRV9UWEJVRkNUUkwgICAweDBDNjAwCiAjZGVmaW5lIElYR0JFX1RYQlVGREFUQTAgIDB4MEM2MTAKQEAgLTMzMiw2ICs2NjYsOCBAQAogI2RlZmluZSBJWEdCRV9UWERBVEFSRFBUUihfaSkgICAoMHgwQzcyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzcyMC1DNzJDKi8KICNkZWZpbmUgSVhHQkVfVFhERVNDUkRQVFIoX2kpICAgKDB4MEM3MzAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEM3MzAtQzczQyovCiAjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwgMHgxMTA2QworI2RlZmluZSBJWEdCRV9QQ0lFRUNDQ1RMMCAweDExMTAwCisjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwxIDB4MTExMDQKICNkZWZpbmUgSVhHQkVfUEJUWEVDQyAgIDB4MEMzMDAKICNkZWZpbmUgSVhHQkVfUEJSWEVDQyAgIDB4MDMzMDAKICNkZWZpbmUgSVhHQkVfR0hFQ0NSICAgIDB4MTEwQjAKQEAgLTM1NywyNCArNjkzLDYxIEBACiAjZGVmaW5lIElYR0JFX01TUldEICAgICAweDA0MjYwCiAjZGVmaW5lIElYR0JFX01MQUREICAgICAweDA0MjY0CiAjZGVmaW5lIElYR0JFX01IQUREICAgICAweDA0MjY4CisjZGVmaW5lIElYR0JFX01BWEZSUyAgICAweDA0MjY4CiAjZGVmaW5lIElYR0JFX1RSRUcgICAgICAweDA0MjZDCiAjZGVmaW5lIElYR0JFX1BDU1MxICAgICAweDA0Mjg4CiAjZGVmaW5lIElYR0JFX1BDU1MyICAgICAweDA0MjhDCiAjZGVmaW5lIElYR0JFX1hQQ1NTICAgICAweDA0MjkwCisjZGVmaW5lIElYR0JFX01GTENOICAgICAweDA0Mjk0CiAjZGVmaW5lIElYR0JFX1NFUkRFU0MgICAweDA0Mjk4CiAjZGVmaW5lIElYR0JFX01BQ1MgICAgICAweDA0MjlDCiAjZGVmaW5lIElYR0JFX0FVVE9DICAgICAweDA0MkEwCiAjZGVmaW5lIElYR0JFX0xJTktTICAgICAweDA0MkE0CisjZGVmaW5lIElYR0JFX0xJTktTMiAgICAweDA0MzI0CiAjZGVmaW5lIElYR0JFX0FVVE9DMiAgICAweDA0MkE4CiAjZGVmaW5lIElYR0JFX0FVVE9DMyAgICAweDA0MkFDCiAjZGVmaW5lIElYR0JFX0FOTFAxICAgICAweDA0MkIwCiAjZGVmaW5lIElYR0JFX0FOTFAyICAgICAweDA0MkI0CiAjZGVmaW5lIElYR0JFX0FUTEFTQ1RMICAweDA0ODAwCisjZGVmaW5lIElYR0JFX01NTkdDICAgICAweDA0MkQwCisjZGVmaW5lIElYR0JFX0FOTFBOUDEgICAweDA0MkQ0CisjZGVmaW5lIElYR0JFX0FOTFBOUDIgICAweDA0MkQ4CisjZGVmaW5lIElYR0JFX0tSUENTRkMgICAweDA0MkUwCisjZGVmaW5lIElYR0JFX0tSUENTUyAgICAweDA0MkU0CisjZGVmaW5lIElYR0JFX0ZFQ1MxICAgICAweDA0MkU4CisjZGVmaW5lIElYR0JFX0ZFQ1MyICAgICAweDA0MkVDCisjZGVmaW5lIElYR0JFX1NNQURBUkNUTCAweDE0RjEwCisjZGVmaW5lIElYR0JFX01QVkMgICAgICAweDA0MzE4CisjZGVmaW5lIElYR0JFX1NHTUlJQyAgICAweDA0MzE0CisKKy8qIE9tZXIgQ09SRUNUTCAqLworI2RlZmluZSBJWEdCRV9DT1JFQ1RMICAgICAgICAgICAweDAxNEYwMAorLyogQkFSQ1RSTCAqLworI2RlZmluZSBJWEdCRV9CQVJDVFJMICAgICAgICAgICAweDExMEY0CisjZGVmaW5lIElYR0JFX0JBUkNUUkxfRkxTSVpFICAgIDB4MDcwMAorI2RlZmluZSBJWEdCRV9CQVJDVFJMX0NTUlNJWkUgICAweDIwMDAKIAogLyogUkRSWENUTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9SRE1UU18xXzIgICAgIDB4MDAwMDAwMDAgLyogUnggRGVzYyBNaW4gVGhyZXNob2xkIFNpemUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9DUkNTVFJJUCAgICAgIDB4MDAwMDAwMDIgLyogQ1JDIFN0cmlwICovCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfTVZNRU4gICAgICAgICAweDAwMDAwMDIwCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfRE1BSURPTkUgICAgICAweDAwMDAwMDA4IC8qIERNQSBpbml0IGN5Y2xlIGRvbmUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9BR0dESVMgICAgICAgIDB4MDAwMTAwMDAgLyogQWdncmVnYXRpb24gZGlzYWJsZSAqLworCisvKiBSUVRDIEJpdCBNYXNrcyBhbmQgU2hpZnRzICovCisjZGVmaW5lIElYR0JFX1JRVENfU0hJRlRfVEMoX2kpICAgICAoKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX1JRVENfVEMwX01BU0sgICAgICAgICAoMHg3IDw8IDApCisjZGVmaW5lIElYR0JFX1JRVENfVEMxX01BU0sgICAgICAgICAoMHg3IDw8IDQpCisjZGVmaW5lIElYR0JFX1JRVENfVEMyX01BU0sgICAgICAgICAoMHg3IDw8IDgpCisjZGVmaW5lIElYR0JFX1JRVENfVEMzX01BU0sgICAgICAgICAoMHg3IDw8IDEyKQorI2RlZmluZSBJWEdCRV9SUVRDX1RDNF9NQVNLICAgICAgICAgKDB4NyA8PCAxNikKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzVfTUFTSyAgICAgICAgICgweDcgPDwgMjApCisjZGVmaW5lIElYR0JFX1JRVENfVEM2X01BU0sgICAgICAgICAoMHg3IDw8IDI0KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDN19NQVNLICAgICAgICAgKDB4NyA8PCAyOCkKKworLyogUFNSVFlQRS5SUVBMIEJpdCBtYXNrcyBhbmQgc2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9SUVBMX01BU0sgICAgIDB4NworI2RlZmluZSBJWEdCRV9QU1JUWVBFX1JRUExfU0hJRlQgICAgMjkKIAogLyogQ1RSTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTF9HSU9fRElTICAgICAgMHgwMDAwMDAwNCAvKiBHbG9iYWwgSU8gTWFzdGVyIERpc2FibGUgYml0ICovCkBAIC0zODksNiArNzYyLDcgQEAKICNkZWZpbmUgSVhHQkVfTUhBRERfTUZTX1NISUZUICAgMTYKIAogLyogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfQ1RSTF9FWFRfUEZSU1REICAgMHgwMDAwNDAwMCAvKiBQaHlzaWNhbCBGdW5jdGlvbiBSZXNldCBEb25lICovCiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUX05TX0RJUyAgIDB4MDAwMTAwMDAgLyogTm8gU25vb3AgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9ST19ESVMgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9EUlZfTE9BRCAweDEwMDAwMDAwIC8qIERyaXZlciBsb2FkZWQgYml0IGZvciBGVyAqLwpAQCAtNDAxLDYgKzc3NSw4IEBACiAjZGVmaW5lIElYR0JFX0RDQV9DVFJMX0RDQV9NT0RFX0NCMiAweDAyIC8qIERDQSBNb2RlIENCMiAqLwogCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTSyAweDAwMDAwMDFGIC8qIFJ4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5ICAweEZGMDAwMDAwIC8qIFJ4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9TSElGVF84MjU5OSAyNCAvKiBSeCBDUFVJRCBTaGlmdCAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOICgxIDw8IDUpIC8qIERDQSBSeCBEZXNjIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0hFQURfRENBX0VOICgxIDw8IDYpIC8qIERDQSBSeCBEZXNjIGhlYWRlciBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9EQVRBX0RDQV9FTiAoMSA8PCA3KSAvKiBEQ0EgUnggRGVzYyBwYXlsb2FkIGVuYWJsZSAqLwpAQCAtNDA5LDYgKzc4NSw4IEBACiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOICgxIDw8IDE1KSAvKiBEQ0EgUnggU3BsaXQgSGVhZGVyIFJPICovCiAKICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLIDB4MDAwMDAwMUYgLyogVHggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1OTkgIDB4RkYwMDAwMDAgLyogVHggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5IDI0IC8qIFR4IENQVUlEIFNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFR4IERlc2MgZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU4gKDEgPDwgMTEpIC8qIFR4IERlc2Mgd3JpdGViYWNrIFJPIGJpdCAqLwogI2RlZmluZSBJWEdCRV9EQ0FfTUFYX1FVRVVFU184MjU5OCAgIDE2IC8qIERDQSByZWdzIG9ubHkgb24gMTYgcXVldWVzICovCkBAIC00NTIsNiArODMwLDggQEAKICNkZWZpbmUgSVhHQkVfQVRMQVNfUEROX1RYXzFHX1FMX0FMTCAgICAweEYwCiAjZGVmaW5lIElYR0JFX0FUTEFTX1BETl9UWF9BTl9RTF9BTEwgICAgMHhGMAogCisvKiBPbWVyIGJpdCBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9DT1JFQ1RMX1dSSVRFX0NNRCAgICAgICAgIDB4MDAwMTAwMDAKIAogLyogRGV2aWNlIFR5cGUgZGVmaW5pdGlvbnMgZm9yIG5ldyBwcm90b2NvbCBNRElPIGNvbW1hbmRzICovCiAjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9ERVZfVFlQRSAgICAgICAgICAgICAgIDB4MQpAQCAtNDc5LDggKzg1OSwxMSBAQAogI2RlZmluZSBJWEdCRV9NRElPX1BIWV9TUEVFRF9BQklMSVRZICAgMHg0IC8qIFNwZWVkIEFiaWxpdHkgUmVnICovCiAjZGVmaW5lIElYR0JFX01ESU9fUEhZX1NQRUVEXzEwRyAgICAgICAweDAwMDEgLyogMTBHIGNhcGFibGUgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QSFlfU1BFRURfMUcgICAgICAgIDB4MDAxMCAvKiAxRyBjYXBhYmxlICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZX0VYVF9BQklMSVRZICAgICAgICAweEIgLyogRXh0IEFiaWxpdHkgUmVnICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZXzEwR0JBU0VUX0FCSUxJVFkgICAweDAwMDQgLyogMTBHQmFzZVQgY2FwYWJsZSAqLworI2RlZmluZSBJWEdCRV9NRElPX1BIWV8xMDAwQkFTRVRfQUJJTElUWSAgMHgwMDIwIC8qIDEwMDBCYXNlVCBjYXBhYmxlICovCiAKLSNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfQUREUiAgICAgMHhDMzBBIC8qIFBIWV9YUyBTREEvU0NMIEFkZHJlc3MgUmVnICovCisjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9TREFfU0NMX0FERFIgICAgIDB4QzMwQSAvKiBQSFlfWFMgU0RBL1NDTCBBZGRyIFJlZyAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9EQVRBICAgICAweEMzMEIgLyogUEhZX1hTIFNEQS9TQ0wgRGF0YSBSZWcgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfU1RBVCAgICAgMHhDMzBDIC8qIFBIWV9YUyBTREEvU0NMIFN0YXR1cyBSZWcgKi8KIApAQCAtNDk1LDcgKzg3OCw3IEBACiAjZGVmaW5lIElYR0JFX1BIWV9SRVZJU0lPTl9NQVNLICAgICAgICAweEZGRkZGRkYwCiAjZGVmaW5lIElYR0JFX01BWF9QSFlfQUREUiAgICAgICAgICAgICAzMgogCi0vKiBQSFkgSURzICovCisvKiBQSFkgSURzKi8KICNkZWZpbmUgVE4xMDEwX1BIWV9JRCAgICAweDAwQTE5NDEwCiAjZGVmaW5lIFROWF9GV19SRVYgICAgICAgMHhCCiAjZGVmaW5lIFFUMjAyMl9QSFlfSUQgICAgMHgwMDQzQTQwMApAQCAtNTE1LDE1ICs4OTgsMjIgQEAKICNkZWZpbmUgSVhHQkVfQ09OVFJPTF9OTCAgICAgICAgIDB4MDAwRgogI2RlZmluZSBJWEdCRV9DT05UUk9MX0VPTF9OTCAgICAgMHgwRkZGCiAjZGVmaW5lIElYR0JFX0NPTlRST0xfU09MX05MICAgICAweDAwMDAKKyNkZWZpbmUgSVhHQkVfUEhZX0VORk9SQ0VfSU5URUxfU0ZQX09GRlNFVCAweDAwMkMKKyNkZWZpbmUgSVhHQkVfUEhZX0FMTE9XX0FOWV9TRlAgICAgICAgICAgICAweDEKIAogLyogR2VuZXJhbCBwdXJwb3NlIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfU0RQMF9HUElFTiAgICAgICAgIDB4MDAwMDAwMDEgLyogU0RQMCAqLwogI2RlZmluZSBJWEdCRV9TRFAxX0dQSUVOICAgICAgICAgMHgwMDAwMDAwMiAvKiBTRFAxICovCisjZGVmaW5lIElYR0JFX1NEUDJfR1BJRU4gICAgICAgICAweDAwMDAwMDA0IC8qIFNEUDIgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9NU0lYX01PREUgICAgIDB4MDAwMDAwMTAgLyogTVNJLVggbW9kZSAqLwogI2RlZmluZSBJWEdCRV9HUElFX09DRCAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBPdGhlciBDbGVhciBEaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfRUlNRU4gICAgICAgICAweDAwMDAwMDQwIC8qIEltbWVkaWF0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfRUlBTUUgICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0dQSUVfUEJBX1NVUFBPUlQgICAweDgwMDAwMDAwCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFX01BU0sgICAweDAwMDBDMDAwIC8qIFZUIE1vZGUgTWFzayAqLworI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV8xNiAgICAgMHgwMDAwNDAwMCAvKiAxNiBWRnMgOCBxdWV1ZXMgcGVyIFZGICovCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFXzMyICAgICAweDAwMDA4MDAwIC8qIDMyIFZGcyA0IHF1ZXVlcyBwZXIgVkYgKi8KKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfNjQgICAgIDB4MDAwMEMwMDAgLyogNjQgVkZzIDIgcXVldWVzIHBlciBWRiAqLwogCiAvKiBUcmFuc21pdCBGbG93IENvbnRyb2wgc3RhdHVzICovCiAjZGVmaW5lIElYR0JFX1RGQ1NfVFhPRkYgICAgICAgICAweDAwMDAwMDAxCkBAIC01NjQsNiArOTU0LDIxIEBACiAjZGVmaW5lIElYR0JFX1ZNRF9DVExfVk1EUV9FTiAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBJWEdCRV9WTURfQ1RMX1ZNRFFfRklMVEVSIDB4MDAwMDAwMDIKIAorLyogVlRfQ1RMIGJpdG1hc2tzICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTF9ESVNfREVGUEwgIDB4MjAwMDAwMDAgLyogZGlzYWJsZSBkZWZhdWx0IHBvb2wgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMX1JFUExFTiAgICAgMHg0MDAwMDAwMCAvKiByZXBsaWNhdGlvbiBlbmFibGVkICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTF9WVF9FTkFCTEUgIDB4MDAwMDAwMDEgIC8qIEVuYWJsZSBWVCBNb2RlICovCisKKy8qIFZNT0xSIGJpdG1hc2tzICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX0FVUEUgICAgICAgIDB4MDEwMDAwMDAgLyogYWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfUk9NUEUgICAgICAgMHgwMjAwMDAwMCAvKiBhY2NlcHQgcGFja2V0cyBpbiBNVEEgdGJsICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX1JPUEUgICAgICAgIDB4MDQwMDAwMDAgLyogYWNjZXB0IHBhY2tldHMgaW4gVUMgdGJsICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX0JBTSAgICAgICAgIDB4MDgwMDAwMDAgLyogYWNjZXB0IGJyb2FkY2FzdCBwYWNrZXRzICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX01QRSAgICAgICAgIDB4MTAwMDAwMDAgLyogbXVsdGljYXN0IHByb21pc2N1b3VzICovCisKKy8qIFZGUkUgYml0bWFzayAqLworI2RlZmluZSBJWEdCRV9WRlJFX0VOQUJMRV9BTEwgICAweEZGRkZGRkZGCisKIC8qIFJESE1QTiBhbmQgVERITVBOIGJpdG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDQUREUiAgICAgICAweDAwN0ZGODAwCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDUkRSRVEgICAgICAweDAwODAwMDAwCkBAIC01NzIsMTMgKzk3NywzOSBAQAogI2RlZmluZSBJWEdCRV9UREhNUE5fVERJQ1JEUkVRICAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBJWEdCRV9UREhNUE5fVERJQ0FERFJfU0hJRlQgMTEKIAorI2RlZmluZSBJWEdCRV9SRE1BTV9NRU1fU0VMX1NISUZUICAgMTMKKyNkZWZpbmUgSVhHQkVfUkRNQU1fRFdPUkRfU0hJRlQgICAgIDkKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREVTQ19DT01QX0ZJRk8gIDEKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREZDX0NNRF9GSUZPICAgIDIKKyNkZWZpbmUgSVhHQkVfUkRNQU1fVENOX1NUQVRVU19SQU0gIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPICAgIDUKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX0NOVF9SQU0gICAgIDYKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX0NOVCAgIDgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTSAgIDB4QQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERVNDX0NPTV9GSUZPX1JBTkdFICAgICAxMzUKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREVTQ19DT01fRklGT19DT1VOVCAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk9fUkFOR0UgICAgICA0OAorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk9fQ09VTlQgICAgICA3CisjZGVmaW5lIElYR0JFX1JETUFNX1RDTl9TVEFUVVNfUkFNX1JBTkdFICAgIDI1NgorI2RlZmluZSBJWEdCRV9SRE1BTV9UQ05fU1RBVFVTX1JBTV9DT1VOVCAgICA5CisjZGVmaW5lIElYR0JFX1JETUFNX1dCX0NPTExfRklGT19SQU5HRSAgICAgIDgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPX0NPVU5UICAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTV9SQU5HRSAgICAgICA2NAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTV9DT1VOVCAgICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9DTlRfUkFOR0UgICAgIDMyCisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9DTlRfQ09VTlQgICAgIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTV9SQU5HRSAgICAgMTI4CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9SQU1fQ09VTlQgICAgIDgKKworI2RlZmluZSBJWEdCRV9UWERFU0NJQ19SRUFEWSAgICAgICAgMHg4MDAwMDAwMAorCiAvKiBSZWNlaXZlIENoZWNrc3VtIENvbnRyb2wgKi8KICNkZWZpbmUgSVhHQkVfUlhDU1VNX0lQUENTRSAgICAgMHgwMDAwMTAwMCAgIC8qIElQIHBheWxvYWQgY2hlY2tzdW0gZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX1JYQ1NVTV9QQ1NEICAgICAgIDB4MDAwMDIwMDAgICAvKiBwYWNrZXQgY2hlY2tzdW0gZGlzYWJsZWQgKi8KIAogLyogRkNSVEwgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX0ZDUlRMX1hPTkUgICAgICAgIDB4ODAwMDAwMDAgIC8qIGJpdCAzMSwgWE9OIGVuYWJsZSAqLwotI2RlZmluZSBJWEdCRV9GQ1JUSF9GQ0VOICAgICAgICAweDgwMDAwMDAwICAvKiBSeCBGbG93IGNvbnRyb2wgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0ZDUlRMX1hPTkUgICAgICAgIDB4ODAwMDAwMDAgIC8qIFhPTiBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNSVEhfRkNFTiAgICAgICAgMHg4MDAwMDAwMCAgLyogUGFja2V0IGJ1ZmZlciBmYyBlbmFibGUgKi8KIAogLyogUEFQIGJpdCBtYXNrcyovCiAjZGVmaW5lIElYR0JFX1BBUF9UWFBBVVNFQ05UX01BU0sgICAweDAwMDBGRkZGIC8qIFBhdXNlIGNvdW50ZXIgbWFzayAqLwpAQCAtNTg4LDE5ICsxMDE5LDI5IEBACiAvKiBSZWNlaXZlIEFyYml0cmF0aW9uIENvbnRyb2w6IDAgUm91bmQgUm9iaW4sIDEgREZQICovCiAjZGVmaW5lIElYR0JFX1JNQ1NfUkFDICAgICAgICAgIDB4MDAwMDAwMDQKICNkZWZpbmUgSVhHQkVfUk1DU19ERlAgICAgICAgICAgSVhHQkVfUk1DU19SQUMgLyogRGVmaWNpdCBGaXhlZCBQcmlvcml0eSBlbmEgKi8KLSNkZWZpbmUgSVhHQkVfUk1DU19URkNFXzgwMl8zWCAgMHgwMDAwMDAwOCAvKiBUeCBQcmlvcml0eSBmbG93IGNvbnRyb2wgZW5hICovCi0jZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSAweDAwMDAwMDEwIC8qIFR4IFByaW9yaXR5IGZsb3cgY29udHJvbCBlbmEgKi8KKyNkZWZpbmUgSVhHQkVfUk1DU19URkNFXzgwMl8zWCAgICAgICAgIDB4MDAwMDAwMDggLyogVHggUHJpb3JpdHkgRkMgZW5hICovCisjZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSAgICAgICAweDAwMDAwMDEwIC8qIFR4IFByaW9yaXR5IEZDIGVuYSAqLwogI2RlZmluZSBJWEdCRV9STUNTX0FSQkRJUyAgICAgICAweDAwMDAwMDQwIC8qIEFyYml0cmF0aW9uIGRpc2FibGUgYml0ICovCiAKKy8qIEZDQ0ZHIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCAgICAgICAgIDB4MDAwMDAwMDggLyogVHggbGluayBGQyBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNDRkdfVEZDRV9QUklPUklUWSAgICAgICAweDAwMDAwMDEwIC8qIFR4IHByaW9yaXR5IEZDIGVuYWJsZSAqLwogCiAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgYml0bWFza3MgKi8KIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFJlYWQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9SVFhfUVVFVUUgICAgMHgwMDAwRkZGRiAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1JfRkxPV19ESVIgICAgIDB4MDAwMTAwMDAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9SWF9NSVNTICAgICAgMHgwMDAyMDAwMCAvKiBQYWNrZXQgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9QQ0kgICAgICAgICAgMHgwMDA0MDAwMCAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1JfTUFJTEJPWCAgICAgIDB4MDAwODAwMDAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9MU0MgICAgICAgICAgMHgwMDEwMDAwMCAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9MSU5LU0VDICAgICAgMHgwMDIwMDAwMCAvKiBQTiBUaHJlc2hvbGQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9NTkcgICAgICAgICAgMHgwMDQwMDAwMCAvKiBNYW5hZ2VhYmlsaXR5IEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0dQSV9TRFAwICAgICAweDAxMDAwMDAwIC8qIEdlbiBQdXJwb3NlIEludGVycnVwdCBvbiBTRFAwICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfR1BJX1NEUDEgICAgIDB4MDIwMDAwMDAgLyogR2VuIFB1cnBvc2UgSW50ZXJydXB0IG9uIFNEUDEgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9HUElfU0RQMiAgICAgMHgwNDAwMDAwMCAvKiBHZW4gUHVycG9zZSBJbnRlcnJ1cHQgb24gU0RQMiAqLworI2RlZmluZSBJWEdCRV9FSUNSX0VDQyAgICAgICAgICAweDEwMDAwMDAwIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1BCVVIgICAgICAgICAweDEwMDAwMDAwIC8qIFBhY2tldCBCdWZmZXIgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0RIRVIgICAgICAgICAweDIwMDAwMDAwIC8qIERlc2NyaXB0b3IgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1RDUF9USU1FUiAgICAweDQwMDAwMDAwIC8qIFRDUCBUaW1lciAqLwpAQCAtNjA4LDEwICsxMDQ5LDE2IEBACiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBTZXQgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0ZMT1dfRElSICAgICBJWEdCRV9FSUNSX0ZMT1dfRElSICAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNTX1JYX01JU1MgICAgICBJWEdCRV9FSUNSX1JYX01JU1MgICAvKiBQa3QgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19QQ0kgICAgICAgICAgSVhHQkVfRUlDUl9QQ0kgICAgICAgLyogUENJIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNTX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0xTQyAgICAgICAgICBJWEdCRV9FSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19NTkcgICAgICAgICAgSVhHQkVfRUlDUl9NTkcgICAgICAgLyogTU5HIEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAwICAgICBJWEdCRV9FSUNSX0dQSV9TRFAwICAvKiBTRFAwIEdlbiBQdXJwb3NlIEludCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAxICAgICBJWEdCRV9FSUNSX0dQSV9TRFAxICAvKiBTRFAxIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAyICAgICBJWEdCRV9FSUNSX0dQSV9TRFAyICAvKiBTRFAyIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0VDQyAgICAgICAgICBJWEdCRV9FSUNSX0VDQyAgICAgICAvKiBFQ0MgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19QQlVSICAgICAgICAgSVhHQkVfRUlDUl9QQlVSICAgICAgLyogUGt0IEJ1ZiBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0RIRVIgICAgICAgICBJWEdCRV9FSUNSX0RIRVIgICAgICAvKiBEZXNjIEhhbmRsZXIgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19UQ1BfVElNRVIgICAgSVhHQkVfRUlDUl9UQ1BfVElNRVIgLyogVENQIFRpbWVyICovCkBAIC02MTksMTAgKzEwNjYsMTYgQEAKIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgU2V0ICovCiAjZGVmaW5lIElYR0JFX0VJTVNfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19GTE9XX0RJUiAgICAgSVhHQkVfRUlDUl9GTE9XX0RJUiAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19SWF9NSVNTICAgICAgSVhHQkVfRUlDUl9SWF9NSVNTICAgLyogUGFja2V0IEJ1ZmZlciBPdmVycnVuICovCisjZGVmaW5lIElYR0JFX0VJTVNfUENJICAgICAgICAgIElYR0JFX0VJQ1JfUENJICAgICAgIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19MU0MgICAgICAgICAgSVhHQkVfRUlDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIElYR0JFX0VJTVNfTU5HICAgICAgICAgIElYR0JFX0VJQ1JfTU5HICAgICAgIC8qIE1ORyBFdmVudCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMCAgICAgSVhHQkVfRUlDUl9HUElfU0RQMCAgLyogU0RQMCBHZW4gUHVycG9zZSBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMSAgICAgSVhHQkVfRUlDUl9HUElfU0RQMSAgLyogU0RQMSBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMiAgICAgSVhHQkVfRUlDUl9HUElfU0RQMiAgLyogU0RQMiBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19FQ0MgICAgICAgICAgSVhHQkVfRUlDUl9FQ0MgICAgICAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJTVNfUEJVUiAgICAgICAgIElYR0JFX0VJQ1JfUEJVUiAgICAgIC8qIFBrdCBCdWYgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19ESEVSICAgICAgICAgSVhHQkVfRUlDUl9ESEVSICAgICAgLyogRGVzY3IgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSU1TX1RDUF9USU1FUiAgICBJWEdCRV9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KQEAgLTYzMCwxMCArMTA4MywxNiBAQAogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgTWFzayBDbGVhciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJTUNfRkxPV19ESVIgICAgIElYR0JFX0VJQ1JfRkxPV19ESVIgIC8qIEZEaXIgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTUNfUlhfTUlTUyAgICAgIElYR0JFX0VJQ1JfUlhfTUlTUyAgIC8qIFBhY2tldCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSU1DX1BDSSAgICAgICAgICBJWEdCRV9FSUNSX1BDSSAgICAgICAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTUNfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfTFNDICAgICAgICAgIElYR0JFX0VJQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBJWEdCRV9FSU1DX01ORyAgICAgICAgICBJWEdCRV9FSUNSX01ORyAgICAgICAvKiBNTkcgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDAgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDAgIC8qIFNEUDAgR2VuIFB1cnBvc2UgSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDEgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDEgIC8qIFNEUDEgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDIgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDIgIC8qIFNEUDIgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTUNfRUNDICAgICAgICAgIElYR0JFX0VJQ1JfRUNDICAgICAgIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1BCVVIgICAgICAgICBJWEdCRV9FSUNSX1BCVVIgICAgICAvKiBQa3QgQnVmIEhhbmRsZXIgRXJyICovCiAjZGVmaW5lIElYR0JFX0VJTUNfREhFUiAgICAgICAgIElYR0JFX0VJQ1JfREhFUiAgICAgIC8qIERlc2MgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19UQ1BfVElNRVIgICAgSVhHQkVfRUlDUl9UQ1BfVElNRVIgLyogVENQIFRpbWVyICovCkBAIC02NTYsNiArMTExNSwzMyBAQAogI2RlZmluZSBJWEdCRV9JTUlSRVhUX0NUUkxfU1lOICAgIDB4MDAwMjAwMDAgIC8qIENoZWNrIFNZTiBiaXQgaW4gaGVhZGVyICovCiAjZGVmaW5lIElYR0JFX0lNSVJFWFRfQ1RSTF9GSU4gICAgMHgwMDA0MDAwMCAgLyogQ2hlY2sgRklOIGJpdCBpbiBoZWFkZXIgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVF9DVFJMX0JQICAgICAweDAwMDgwMDAwICAvKiBCeXBhc3MgY2hlY2sgb2YgY29udHJvbCBiaXRzICovCisjZGVmaW5lIElYR0JFX0lNSVJfU0laRV9CUF84MjU5OSAgMHgwMDAwMTAwMCAvKiBQYWNrZXQgc2l6ZSBieXBhc3MgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1VSR184MjU5OSAweDAwMDAyMDAwIC8qIENoZWNrIFVSRyBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9BQ0tfODI1OTkgMHgwMDAwNDAwMCAvKiBDaGVjayBBQ0sgYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfUFNIXzgyNTk5IDB4MDAwMDgwMDAgLyogQ2hlY2sgUFNIIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1JTVF84MjU5OSAweDAwMDEwMDAwIC8qIENoZWNrIFJTVCBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9TWU5fODI1OTkgMHgwMDAyMDAwMCAvKiBDaGVjayBTWU4gYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfRklOXzgyNTk5IDB4MDAwNDAwMDAgLyogQ2hlY2sgRklOIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX0JQXzgyNTk5ICAweDAwMDgwMDAwIC8qIEJ5cGFzcyBjaGVjayBvZiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9MTElfRU5fODI1OTkgICAweDAwMTAwMDAwIC8qIEVuYWJsZXMgbG93IGxhdGVuY3kgSW50ICovCisjZGVmaW5lIElYR0JFX0lNSVJfUlhfUVVFVUVfTUFTS184MjU5OSAgMHgwMDAwMDA3RiAvKiBSeCBRdWV1ZSBNYXNrICovCisjZGVmaW5lIElYR0JFX0lNSVJfUlhfUVVFVUVfU0hJRlRfODI1OTkgMjEgLyogUnggUXVldWUgU2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUlZQX1BSSU9SSVRZX01BU0sgICAgICAweDAwMDAwMDA3IC8qIFZMQU4gcHJpb3JpdHkgbWFzayAqLworI2RlZmluZSBJWEdCRV9JTUlSVlBfUFJJT1JJVFlfRU4gICAgICAgIDB4MDAwMDAwMDggLyogVkxBTiBwcmlvcml0eSBlbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9NQVhfRlRRRl9GSUxURVJTICAgICAgICAgIDEyOAorI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX01BU0sgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9UQ1AgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfVURQICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX1NDVFAgICAgICAgIDIKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUklPUklUWV9NQVNLICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElYR0JFX0ZUUUZfUFJJT1JJVFlfU0hJRlQgICAgICAgMgorI2RlZmluZSBJWEdCRV9GVFFGX1BPT0xfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX1NISUZUICAgICAgICAgICA4CisjZGVmaW5lIElYR0JFX0ZUUUZfNVRVUExFX01BU0tfTUFTSyAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBJWEdCRV9GVFFGXzVUVVBMRV9NQVNLX1NISUZUICAgIDI1CisjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9NQVNLX0VOICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9GVFFGX1FVRVVFX0VOQUJMRSAgICAgICAgIDB4ODAwMDAwMDAKIAogLyogSW50ZXJydXB0IGNsZWFyIG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfSVJRX0NMRUFSX01BU0sgICAgMHhGRkZGRkZGRgpAQCAtNjc1LDYgKzExNjEsMzEgQEAKIAogI2RlZmluZSBJWEdCRV9JVkFSX0FMTE9DX1ZBTCAgICAweDgwIC8qIEludGVycnVwdCBBbGxvY2F0aW9uIHZhbGlkICovCiAKKy8qIEVUWVBFIFF1ZXVlIEZpbHRlci9TZWxlY3QgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX01BWF9FVFFGX0ZJTFRFUlMgIDgKKyNkZWZpbmUgSVhHQkVfRVRRRl9CQ04gICAgICAgICAgMHgxMDAwMDAwMCAvKiBiaXQgMjggKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl8xNTg4ICAgICAgICAgMHg0MDAwMDAwMCAvKiBiaXQgMzAgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRU4gICAgMHg4MDAwMDAwMCAvKiBiaXQgMzEgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9QT09MX0VOQUJMRSAgICgxIDw8IDI2KSAvKiBiaXQgMjYgKi8KKworI2RlZmluZSBJWEdCRV9FVFFTX1JYX1FVRVVFICAgICAweDAwN0YwMDAwIC8qIGJpdHMgMjI6MTYgKi8KKyNkZWZpbmUgSVhHQkVfRVRRU19SWF9RVUVVRV9TSElGVCAgICAgICAxNgorI2RlZmluZSBJWEdCRV9FVFFTX0xMSSAgICAgICAgICAweDIwMDAwMDAwIC8qIGJpdCAyOSAqLworI2RlZmluZSBJWEdCRV9FVFFTX1FVRVVFX0VOICAgICAweDgwMDAwMDAwIC8qIGJpdCAzMSAqLworCisvKgorICogRVRRRiBmaWx0ZXIgbGlzdDogb25lIHN0YXRpYyBmaWx0ZXIgcGVyIGZpbHRlciBjb25zdW1lci4gVGhpcyBpcworICogICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgZmlsdGVyIGNvbGxpc2lvbnMgbGF0ZXIuIEFkZCBuZXcgZmlsdGVycworICogICAgICAgICAgICAgICAgICAgaGVyZSEhCisgKgorICogQ3VycmVudCBmaWx0ZXJzOgorICogICAgRUFQT0wgODAyLjF4ICgweDg4OGUpOiBGaWx0ZXIgMAorICogICAgQkNOICgweDg5MDQpOiAgICAgICAgICBGaWx0ZXIgMQorICogICAgMTU4OCAoMHg4OGY3KTogICAgICAgICBGaWx0ZXIgMworICovCisjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0VBUE9MICAgICAgICAgIDAKKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfQkNOICAgICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl8xNTg4ICAgICAgICAgICAzCiAvKiBWTEFOIENvbnRyb2wgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfVkVUICAgICAgIDB4MDAwMEZGRkYgIC8qIGJpdHMgMC0xNSAqLwogI2RlZmluZSBJWEdCRV9WTE5DVFJMX0NGSSAgICAgICAweDEwMDAwMDAwICAvKiBiaXQgMjggKi8KQEAgLTY4MiwyMSArMTE5MywyOCBAQAogI2RlZmluZSBJWEdCRV9WTE5DVFJMX1ZGRSAgICAgICAweDQwMDAwMDAwICAvKiBiaXQgMzAgKi8KICNkZWZpbmUgSVhHQkVfVkxOQ1RSTF9WTUUgICAgICAgMHg4MDAwMDAwMCAgLyogYml0IDMxICovCiAKKy8qIFZMQU4gcG9vbCBmaWx0ZXJpbmcgbWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRl9WSUVOICAgICAgICAgMHg4MDAwMDAwMCAgLyogZmlsdGVyIGlzIHZhbGlkICovCisjZGVmaW5lIElYR0JFX1ZMVkZfRU5UUklFUyAgICAgIDY0CiAKICNkZWZpbmUgSVhHQkVfRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUgMHg4MTAwICAvKiA4MDIuMXEgcHJvdG9jb2wgKi8KIAogLyogU1RBVFVTIEJpdCBNYXNrcyAqLwotI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEICAgICAweDAwMDAwMDBDIC8qIExBTiBJRCAqLwotI2RlZmluZSBJWEdCRV9TVEFUVVNfR0lPICAgICAgICAweDAwMDgwMDAwIC8qIEdJTyBNYXN0ZXIgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEICAgICAgICAgMHgwMDAwMDAwQyAvKiBMQU4gSUQgKi8KKyNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRF9TSElGVCAgIDIgICAgICAgICAgLyogTEFOIElEIFNoaWZ0Ki8KKyNkZWZpbmUgSVhHQkVfU1RBVFVTX0dJTyAgICAgICAgICAgIDB4MDAwODAwMDAgLyogR0lPIE1hc3RlciBFbmFibGUgU3RhdHVzICovCiAKICNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRF8wICAgMHgwMDAwMDAwMCAvKiBMQU4gSUQgMCAqLwogI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEXzEgICAweDAwMDAwMDA0IC8qIExBTiBJRCAxICovCiAKIC8qIEVTRFAgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX0VTRFBfU0RQNCAweDAwMDAwMDAxIC8qIFNEUDQgRGF0YSBWYWx1ZSAqLwotI2RlZmluZSBJWEdCRV9FU0RQX1NEUDUgMHgwMDAwMDAwMiAvKiBTRFA1IERhdGEgVmFsdWUgKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFAwIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFAxIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0IDB4MDAwMDAwMTAgLyogU0RQNCBEYXRhIFZhbHVlICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNSAweDAwMDAwMDIwIC8qIFNEUDUgRGF0YSBWYWx1ZSAqLworI2RlZmluZSBJWEdCRV9FU0RQX1NEUDYgMHgwMDAwMDA0MCAvKiBTRFA2IERhdGEgVmFsdWUgKi8KICNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0X0RJUiAgICAgMHgwMDAwMDAwNCAvKiBTRFA0IElPIGRpcmVjdGlvbiAqLwotI2RlZmluZSBJWEdCRV9FU0RQX1NEUDVfRElSICAgICAweDAwMDAwMDA4IC8qIFNEUDUgSU8gZGlyZWN0aW9uICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNV9ESVIgICAgIDB4MDAwMDIwMDAgLyogU0RQNSBJTyBkaXJlY3Rpb24gKi8KIAogLyogTEVEQ1RMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9MRURfSVZSVF9CQVNFICAgICAgMHgwMDAwMDA0MApAQCAtNzE5LDYgKzEyMzcsNyBAQAogI2RlZmluZSBJWEdCRV9MRURfT0ZGICAgICAgICAgICAweEYKIAogLyogQVVUT0MgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX0FVVE9DX0tYNF9LWF9TVVBQX01BU0sgMHhDMDAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19LWDRfU1VQUCAgICAweDgwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0tYX1NVUFAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfUEFVU0UgICAgICAgMHgzMDAwMDAwMApAQCAtNzI3LDkgKzEyNDYsMTcgQEAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUlhfTE9PU0UgMHgwMTAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SWF9EUklGVCAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0FOX1JYX0FMSUdOIDB4MDA3QzAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfRkVDQSAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQ19GRUNSICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DX0tSX1NVUFAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUkVTVEFSVCAgMHgwMDAwMTAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19GTFUgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19TSElGVCAgIDEzCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMICAgICAgKDB4MyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgICAgICAgKDB4NCA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19TR01JSV8xR18xMDBNICAgKDB4NSA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gKDB4NiA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfU0dNSUkgKDB4NyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19NQVNLICAgICAgICAgICAgKDB4NyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOICAgKDB4MCA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTiAgKDB4MSA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCkBAIC03MzgsMTUgKzEyNjUsMjQgQEAKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTiAgICAoMHg2IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0FUVEFDSF9UWVBFICAgICAoMHg3IDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogCi0jZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTUQgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EICAgICAgICAweDAwMDAwMTgwCi0jZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUIDcKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCA5CisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfTUFTSyAgICAweDAwMDAwMjAwCisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQgICA5CisjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX01BU0sgICAweDAwMDAwMTgwCisjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUICA3CiAjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19YQVVJICAgKDB4MCA8PCBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX0tYNCAgICAoMHgxIDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfQ1g0ICAgICgweDIgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0JYICAgICAgKDB4MCA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xR19LWCAgICAgICgweDEgPDwgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfU0ZJICAgICAoMHgwIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0tYX0JYICAgKDB4MSA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQorCisjZGVmaW5lIElYR0JFX0FVVE9DMl9VUFBFUl9NQVNLICAweEZGRkYwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfTUFTSyAgMHgwMDAzMDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUIDE2CisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfS1IgICgweDAgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19YRkkgKDB4MSA8PCBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1NGSSAoMHgyIDw8IElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQpCiAKIC8qIExJTktTIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9MSU5LU19LWF9BTl9DT01QICAweDgwMDAwMDAwCkBAIC03NTYsNiArMTI5Miw3IEBACiAjZGVmaW5lIElYR0JFX0xJTktTX1JYX01PREUgICAgIDB4MDYwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfVFhfTU9ERSAgICAgMHgwMTgwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19YR1hTX0VOICAgICAweDAwNDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NHTUlJX0VOICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfUENTXzFHX0VOICAgMHgwMDIwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU18xR19BTl9FTiAgICAweDAwMTAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX0tYX0FOX0lETEUgIDB4MDAwODAwMDAKQEAgLTc2NSw5ICsxMzAyLDM1IEBACiAjZGVmaW5lIElYR0JFX0xJTktTX1RMX0ZBVUxUICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfU0lHTkFMICAgICAgMHgwMDAwMEYwMAogCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzgyNTk5ICAgICAweDMwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzEwR184MjU5OSAweDMwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzFHXzgyNTk5ICAweDIwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzEwMF84MjU5OSAweDEwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktfVVBfVElNRSAgICAgIDkwIC8qIDkuMCBTZWNvbmRzICovCiAjZGVmaW5lIElYR0JFX0FVVE9fTkVHX1RJTUUgICAgIDQ1IC8qIDQuNSBTZWNvbmRzICovCiAKKyNkZWZpbmUgRklCRVJfTElOS19VUF9MSU1JVCAgICAgNTAKKworLyogUENTMUdMU1RBIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfTElOS19PSyAgICAgICAgIDEKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX1NZTktfT0sgICAgICAgICAweDEwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSAgICAgMHgxMDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fUEFHRV9SWCAgICAgIDB4MjAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX1RJTUVEX09VVCAgICAweDQwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9SRU1PVEVfRkFVTFQgMHg4MDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fRVJST1JfUldTICAgIDB4MTAwMDAwCisKKyNkZWZpbmUgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFICAgICAgICAweDgwCisjZGVmaW5lIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSAgICAgICAgMHgxMDAKKworLyogUENTMUdMQ1RMIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfQU5fMUdfVElNRU9VVF9FTiAgMHgwMDA0MDAwMCAvKiBQQ1MgMUcgYXV0b25lZyB0byBlbiAqLworI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfRkxWX0xJTktfVVAgICAgIDEKKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0ZPUkNFX0xJTksgICAgICAweDIwCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9MT1dfTElOS19MQVRDSCAgMHg0MAorI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfQU5fRU5BQkxFICAgICAgIDB4MTAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0FOX1JFU1RBUlQgICAgICAweDIwMDAwCisKIC8qIFNXIFNlbWFwaG9yZSBSZWdpc3RlciBiaXRtYXNrcyAqLwogI2RlZmluZSBJWEdCRV9TV1NNX1NNQkkgMHgwMDAwMDAwMSAvKiBEcml2ZXIgU2VtYXBob3JlIGJpdCAqLwogI2RlZmluZSBJWEdCRV9TV1NNX1NXRVNNQkkgMHgwMDAwMDAwMiAvKiBGVyBTZW1hcGhvcmUgYml0ICovCkBAIC04MTksNiArMTM4MiwxMSBAQAogI2RlZmluZSBJWEdCRV9GV19QVFIgICAgICAgICAgICAweDBGCiAjZGVmaW5lIElYR0JFX1BCQU5VTTBfUFRSICAgICAgIDB4MTUKICNkZWZpbmUgSVhHQkVfUEJBTlVNMV9QVFIgICAgICAgMHgxNgorI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfODI1OTlfQ0FQUyAgMHg3MgorI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfODI1OThfQ0FQUyAgMHg2MgorCisvKiBNU0ktWCBjYXBhYmlsaXR5IGZpZWxkcyBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfVEJMX1NaX01BU0sgICAgIDB4N0ZGCiAKIC8qIExlZ2FjeSBFRVBST00gd29yZCBvZmZzZXRzICovCiAjZGVmaW5lIElYR0JFX0lTQ1NJX0JPT1RfQ0FQUyAgICAgICAgICAgMHgwMDMzCkBAIC04NjcsNiArMTQzNSw4IEBACiAjZGVmaW5lIElYR0JFX1BDSV9MSU5LX1NQRUVEICAgICAgMHhGCiAjZGVmaW5lIElYR0JFX1BDSV9MSU5LX1NQRUVEXzI1MDAgMHgxCiAjZGVmaW5lIElYR0JFX1BDSV9MSU5LX1NQRUVEXzUwMDAgMHgyCisjZGVmaW5lIElYR0JFX1BDSV9IRUFERVJfVFlQRV9SRUdJU1RFUiAgMHgwRQorI2RlZmluZSBJWEdCRV9QQ0lfSEVBREVSX1RZUEVfTVVMVElGVU5DIDB4ODAKIAogLyogTnVtYmVyIG9mIDEwMCBtaWNyb3NlY29uZHMgd2Ugd2FpdCBmb3IgUENJIEV4cHJlc3MgbWFzdGVyIGRpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfUENJX01BU1RFUl9ESVNBQkxFX1RJTUVPVVQgODAwCkBAIC05MTksNiArMTQ4OSw3IEBACiAjZGVmaW5lIElYR0JFX1JYQ1RSTF9SWEVOICAgICAgIDB4MDAwMDAwMDEgIC8qIEVuYWJsZSBSZWNlaXZlciAqLwogI2RlZmluZSBJWEdCRV9SWENUUkxfRE1CWVBTICAgICAweDAwMDAwMDAyICAvKiBEZXNjcmlwdG9yIE1vbml0b3IgQnlwYXNzICovCiAjZGVmaW5lIElYR0JFX1JYRENUTF9FTkFCTEUgICAgIDB4MDIwMDAwMDAgIC8qIEVuYWJsZSBzcGVjaWZpYyBSeCBRdWV1ZSAqLworI2RlZmluZSBJWEdCRV9SWERDVExfVk1FICAgICAgICAweDQwMDAwMDAwICAvKiBWTEFOIG1vZGUgZW5hYmxlICovCiAKICNkZWZpbmUgSVhHQkVfRkNUUkxfU0JQIDB4MDAwMDAwMDIgLyogU3RvcmUgQmFkIFBhY2tldCAqLwogI2RlZmluZSBJWEdCRV9GQ1RSTF9NUEUgMHgwMDAwMDEwMCAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgRW5hKi8KQEAgLTkyOSw5ICsxNTAwLDIzIEBACiAvKiBSZWNlaXZlIFByaW9yaXR5IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRkNUUkxfUlBGQ0UgMHgwMDAwNDAwMAogI2RlZmluZSBJWEdCRV9GQ1RSTF9SRkNFIDB4MDAwMDgwMDAgLyogUmVjZWl2ZSBGbG93IENvbnRyb2wgRW5hICovCisjZGVmaW5lIElYR0JFX01GTENOX1BNQ0YgICAgICAgIDB4MDAwMDAwMDEgLyogUGFzcyBNQUMgQ29udHJvbCBGcmFtZXMgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fRFBGICAgICAgICAgMHgwMDAwMDAwMiAvKiBEaXNjYXJkIFBhdXNlIEZyYW1lICovCisjZGVmaW5lIElYR0JFX01GTENOX1JQRkNFICAgICAgIDB4MDAwMDAwMDQgLyogUmVjZWl2ZSBQcmlvcml0eSBGQyBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUkZDRSAgICAgICAgMHgwMDAwMDAwOCAvKiBSZWNlaXZlIEZDIEVuYWJsZSAqLwogCiAvKiBNdWx0aXBsZSBSZWNlaXZlIFF1ZXVlIENvbnRyb2wgKi8KICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NFTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLyogUlNTIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NUlFDX01SUUVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGIC8qIEJpdHMgMzowICovCisjZGVmaW5lIElYR0JFX01SUUNfUlQ4VENFTiAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogOCBUQyBubyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVDRUQ0VOICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAvKiA0IFRDIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1JUUlNTOFRDRU4gICAgICAgICAgICAweDAwMDAwMDA0IC8qIDggVEMgdy8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfUlRSU1M0VENFTiAgICAgICAgICAgIDB4MDAwMDAwMDUgLyogNCBUQyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRRU4gICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiBWTURxMiA2NCBwb29scyBubyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlNTMzJFTiAgICAgICAgICAgMHgwMDAwMDAwQSAvKiBWTURxMiAzMiBwb29scyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlNTNjRFTiAgICAgICAgICAgMHgwMDAwMDAwQiAvKiBWTURxMiA2NCBwb29scyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlQ4VENFTiAgICAgICAgICAgMHgwMDAwMDAwQyAvKiBWTURxMi9SVCAxNiBwb29sIDggVEMgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlQ0VENFTiAgICAgICAgICAgMHgwMDAwMDAwRCAvKiBWTURxMi9SVCAzMiBwb29sIDQgVEMgKi8KICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfTUFTSyAgICAgICAgMHhGRkZGMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUCAgICAweDAwMDEwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjQgICAgICAgIDB4MDAwMjAwMDAKQEAgLTk0Miw2ICsxNTI3LDEyIEBACiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQICAgIDB4MDA0MDAwMDAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9VRFAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X0VYX1VEUCAweDAxMDAwMDAwCisjZGVmaW5lIElYR0JFX01SUUNfTDNMNFRYU1dFTiAgICAgICAgICAgIDB4MDAwMDgwMDAKKworLyogUXVldWUgRHJvcCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfUURFX0VOQUJMRSAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9RREVfSURYX01BU0sgICAweDAwMDA3RjAwCisjZGVmaW5lIElYR0JFX1FERV9JRFhfU0hJRlQgICAgICAgICAgIDgKIAogI2RlZmluZSBJWEdCRV9UWERfUE9QVFNfSVhTTSAweDAxICAgICAgIC8qIEluc2VydCBJUCBjaGVja3N1bSAqLwogI2RlZmluZSBJWEdCRV9UWERfUE9QVFNfVFhTTSAweDAyICAgICAgIC8qIEluc2VydCBUQ1AvVURQIGNoZWNrc3VtICovCkBAIC05NTMsMTAgKzE1NDQsMjUgQEAKICNkZWZpbmUgSVhHQkVfVFhEX0NNRF9WTEUgICAgMHg0MDAwMDAwMCAvKiBBZGQgVkxBTiB0YWcgKi8KICNkZWZpbmUgSVhHQkVfVFhEX1NUQVRfREQgICAgMHgwMDAwMDAwMSAvKiBEZXNjcmlwdG9yIERvbmUgKi8KIAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfU1RBVFVTX1NFQ1AgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9JTlZBTElEX1BST1RPQ09MICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0lOVkFMSURfTEVOR1RIICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfRVJST1JfQVVUSF9GQUlMRUQgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9CSVRfTUFTSyAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKy8qIE11bHRpcGxlIFRyYW5zbWl0IFF1ZXVlIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ19SVF9FTkEgICAgICAgMHgxIC8qIERDQiBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ19WVF9FTkEgICAgICAgMHgyIC8qIFZNRFEyIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NVFFDXzY0UV8xUEIgICAgICAweDAgLyogNjQgcXVldWVzIDEgcGFjayBidWZmZXIgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ182NFZGICAgICAgICAgMHg4IC8qIDIgVFggUXVldWVzIHBlciBwb29sIHcvNjRWRidzICovCisjZGVmaW5lIElYR0JFX01UUUNfOFRDXzhUUSAgICAgIDB4QyAvKiA4IFRDIGlmIFJUX0VOQSBvciA4IFRRIGlmIFZUX0VOQSAqLworCiAvKiBSZWNlaXZlIERlc2NyaXB0b3IgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0REICAgICAgIDB4MDEgICAgLyogRGVzY3JpcHRvciBEb25lICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0VPUCAgICAgIDB4MDIgICAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9GTE0gICAgICAweDA0ICAgIC8qIEZEaXIgTWF0Y2ggKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVlAgICAgICAgMHgwOCAgICAvKiBJRUVFIFZMQU4gUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9ORVhUUF9NQVNLICAgMHgwMDBGRkZGMCAvKiBOZXh0IERlc2NyaXB0b3IgSW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX05FWFRQX1NISUZUICAweDAwMDAwMDA0CiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1VEUENTICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MNENTICAgICAweDIwICAgIC8qIEw0IHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9JUENTICAgICAweDQwICAgIC8qIElQIHhzdW0gY2FsY3VsYXRlZCAqLwpAQCAtOTY1LDYgKzE1NzEsMTAgQEAKICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVkVYVCAgICAgMHgyMDAgICAvKiAxc3QgVkxBTiBmb3VuZCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9VRFBWICAgICAweDQwMCAgIC8qIFZhbGlkIFVEUCBjaGVja3N1bSAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9EWU5JTlQgICAweDgwMCAgIC8qIFBrdCBjYXVzZWQgSU5UIHZpYSBEWU5JTlQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTExJTlQgICAgMHg4MDAgICAvKiBQa3QgY2F1c2VkIExvdyBMYXRlbmN5IEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9UUyAgICAgICAweDEwMDAwIC8qIFRpbWUgU3RhbXAgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfU0VDUCAgICAgMHgyMDAwMCAvKiBTZWN1cml0eSBQcm9jZXNzaW5nICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0xCICAgICAgIDB4NDAwMDAgLyogTG9vcGJhY2sgU3RhdHVzICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0FDSyAgICAgIDB4ODAwMCAgLyogQUNLIFBhY2tldCBpbmRpY2F0aW9uICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfQ0UgICAgICAgIDB4MDEgICAgLyogQ1JDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfTEUgICAgICAgIDB4MDIgICAgLyogTGVuZ3RoIEVycm9yICovCkBAIC05NzMsNiArMTU4Myw4IEBACiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfVVNFICAgICAgIDB4MjAgICAgLyogVW5kZXJzaXplIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfVENQRSAgICAgIDB4NDAgICAgLyogVENQL1VEUCBDaGVja3N1bSBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX0lQRSAgICAgICAweDgwICAgIC8qIElQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTUFTSyAgICAgICAgICAgMHhmZmYwMDAwMCAvKiBSREVTQy5FUlJPUlMgbWFzayAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX1NISUZUICAgICAgICAgIDIwICAgICAgICAgLyogUkRFU0MuRVJST1JTIHNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfSEJPICAgIDB4MDA4MDAwMDAgLypIZWFkZXIgQnVmZmVyIE92ZXJmbG93ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfQ0UgICAgIDB4MDEwMDAwMDAgLyogQ1JDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTEUgICAgIDB4MDIwMDAwMDAgLyogTGVuZ3RoIEVycm9yICovCkBAIC05ODcsOSArMTU5OSwyMyBAQAogI2RlZmluZSBJWEdCRV9SWERfQ0ZJX01BU0sgICAgICAweDEwMDAgIC8qIENGSSBpcyBiaXQgMTIgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0NGSV9TSElGVCAgICAgMTIKIAorI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9ERCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0REICAvKiBEb25lICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0VPUCAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfRU9QIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkxNICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9GTE0gLyogRkRpciBNYXRjaCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9WUCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX1ZQICAvKiBJRUVFIFZMQU4gUGt0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX01BU0sgICAgICAgICAgMHgwMDBmZmZmZiAvKiBTdGF0L05FWFRQOiBiaXQgMC0xOSAqLworCisvKiBQU1JUWVBFIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9QU1JUWVBFX1RDUEhEUiAgICAweDAwMDAwMDEwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfVURQSERSICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9JUFY0SERSICAgMHgwMDAwMDEwMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX0lQVjZIRFIgICAweDAwMDAwMjAwCiAKIC8qIFNSUkNUTCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUICAgICAxMCAgICAgLyogc28gbWFueSBLQnMgKi8KKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX1JETVRTX1NISUZUICAgICAgICAyMgorI2RlZmluZSBJWEdCRV9TUlJDVExfUkRNVFNfTUFTSyAgICAgICAgIDB4MDFDMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RST1BfRU4gICAgICAgICAgICAweDEwMDAwMDAwCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRVBLVF9NQVNLICAgICAgMHgwMDAwMDA3RgogI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJfTUFTSyAgICAgIDB4MDAwMDNGMDAKICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0xFR0FDWSAgICAweDAwMDAwMDAwCkBAIC0xMDA0LDYgKzE2MzAsNyBAQAogCiAjZGVmaW5lIElYR0JFX1JYREFEVl9SU1NUWVBFX01BU0sgICAgICAgMHgwMDAwMDAwRgogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLICAgICAgIDB4MDAwMEZGRjAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTUFTS19FWCAgICAweDAwMDFGRkYwCiAjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fTUFTSyAgICAgMHgwMDAwN0ZFMAogI2RlZmluZSBJWEdCRV9SWERBRFZfSERSQlVGTEVOX1NISUZUICAgIDUKICNkZWZpbmUgSVhHQkVfUlhEQURWX1NQTElUSEVBREVSX0VOICAgICAweDAwMDAxMDAwCkBAIC0xMDMxLDYgKzE2NTgsMjAgQEAKICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfVURQICAgICAgICAweDAwMDAwMjAwIC8qIFVEUCBoZHIgcHJlc2VudCAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9TQ1RQICAgICAgIDB4MDAwMDA0MDAgLyogU0NUUCBoZHIgcHJlc2VudCAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9ORlMgICAgICAgIDB4MDAwMDA4MDAgLyogTkZTIGhkciBwcmVzZW50ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0lQU0VDX0VTUCAgMHgwMDAwMTAwMCAvKiBJUFNlYyBFU1AgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfSVBTRUNfQUggICAweDAwMDAyMDAwIC8qIElQU2VjIEFIICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0xJTktTRUMgICAgMHgwMDAwNDAwMCAvKiBMaW5rU2VjIEVuY2FwICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0VUUUYgICAgICAgMHgwMDAwODAwMCAvKiBQS1RUWVBFIGlzIEVUUUYgaW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfRVRRRl9NQVNLICAweDAwMDAwMDcwIC8qIEVUUUYgaGFzIDggaW5kaWNlcyAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9FVFFGX1NISUZUIDQgICAgICAgICAgLyogUmlnaHQtc2hpZnQgNCBiaXRzICovCisKKy8qIFNlY3VyaXR5IFByb2Nlc3NpbmcgYml0IEluZGljYXRpb24gKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19TVEFUVVNfU0VDUCAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9OT19TQV9NQVRDSCAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9SRVBMQVlfRVJST1IgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9CSVRfTUFTSyAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9CQURfU0lHICAgICAgIDB4MTgwMDAwMDAKKwogLyogTWFza3MgdG8gZGV0ZXJtaW5lIGlmIHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQgZHVlIHRvIGZyYW1lIGVycm9ycyAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX0ZSQU1FX0VSUl9NQVNLICggXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SWERfRVJSX0NFIHwgXApAQCAtMTA2MCw2ICsxNzAxLDE0IEBACiAjZGVmaW5lIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIDB4MDAwRCAvKiBQcmlvcml0eSBpbiB1cHBlciAzIG9mIDE2ICovCiAjZGVmaW5lIElYR0JFX1RYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQKIAorLyogTGl0dGxlIEVuZGlhbiBkZWZpbmVzICovCisjaWZuZGVmIF9fbGUzMgorI2RlZmluZSBfX2xlMzIgIHUzMgorI2VuZGlmCisjaWZuZGVmIF9fbGU2NAorI2RlZmluZSBfX2xlNjQgIHU2NAorCisjZW5kaWYKIAogLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIExlZ2FjeSAqLwogc3RydWN0IGl4Z2JlX2xlZ2FjeV90eF9kZXNjIHsKQEAgLTExNDcsNiArMTc5Niw5IEBACiAKIC8qIEFkdiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbmZpZyBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRBTEVOX01BU0sgICAgICAweDAwMDBGRkZGIC8qIERhdGEgYnVmIGxlbmd0aChieXRlcykgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX01BQ19MSU5LU0VDICAgICAgMHgwMDA0MDAwMCAvKiBJbnNlcnQgTGlua1NlYyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfSVBTRUNfU0FfSU5ERVhfTUFTSyAgIDB4MDAwMDAzRkYgLyogSVBTZWMgU0EgaW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0lQU0VDX0VTUF9MRU5fTUFTSyAgICAweDAwMDAwMUZGIC8qIElQU2VjIEVTUCBsZW5ndGggKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfTUFTSyAgMHgwMEYwMDAwMCAvKiBEVFlQIG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfQ1RYVCAgMHgwMDIwMDAwMCAvKiBBZHZhbmNlZCBDb250ZXh0IERlc2MgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfREFUQSAgMHgwMDMwMDAwMCAvKiBBZHZhbmNlZCBEYXRhIERlc2NyaXB0b3IgKi8KQEAgLTExODEsNiArMTgzMyw5IEBACiAjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQICAgMHgwMDAwMDgwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgVENQICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfU0NUUCAgMHgwMDAwMTAwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgU0NUUCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTUtSUkVRICAgIDB4MDAwMDIwMDAgLypSZXEgcmVxdWlyZXMgTWFya2VycyBhbmQgQ1JDKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1BPUFRTX0lQU0VDICAgICAgMHgwMDAwMDQwMCAvKiBJUFNlYyBvZmZsb2FkIHJlcXVlc3QgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0lQU0VDX1RZUEVfRVNQIDB4MDAwMDIwMDAgLyogSVBTZWMgVHlwZSBFU1AgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0lQU0VDX0VOQ1JZUFRfRU4gMHgwMDAwNDAwMC8qIEVTUCBFbmNyeXB0IEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfTDRMRU5fU0hJRlQgICAgIDggIC8qIEFkdiBjdHh0IEw0TEVOIHNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9NU1NfU0hJRlQgICAgICAgMTYgIC8qIEFkdiBjdHh0IE1TUyBzaGlmdCAqLwogCkBAIC0xMTk0LDYgKzE4NDksMTIgQEAKICNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwgMHgwMDgwCiAjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfODI1OThfQVVUT05FRyAoSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKKyNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF84MjU5OV9BVVRPTkVHIChJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisKKyNkZWZpbmUgSVhHQkVfUENJRV9ERVZfQ1RSTF8yIDB4QzgKKyNkZWZpbmUgUENJRV9DT01QTF9UT19WQUxVRSAweDA1CiAKIC8qIFBoeXNpY2FsIGxheWVyIHR5cGUgKi8KIHR5cGVkZWYgdTMyIGl4Z2JlX3BoeXNpY2FsX2xheWVyOwpAQCAtMTIxMCw3ICsxODcxLDYgQEAKICNkZWZpbmUgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfS1ggIDB4MDIwMAogI2RlZmluZSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9CWCAgMHgwNDAwCiAKLQogZW51bSBpeGdiZV9lZXByb21fdHlwZSB7CiAJaXhnYmVfZWVwcm9tX3VuaW5pdGlhbGl6ZWQgPSAwLAogCWl4Z2JlX2VlcHJvbV9zcGksCkBAIC0xMjIwLDEyICsxODgwLDE0IEBACiBlbnVtIGl4Z2JlX21hY190eXBlIHsKIAlpeGdiZV9tYWNfdW5rbm93biA9IDAsCiAJaXhnYmVfbWFjXzgyNTk4RUIsCisJaXhnYmVfbWFjXzgyNTk5RUIsCiAJaXhnYmVfbnVtX21hY3MKIH07CiAKIGVudW0gaXhnYmVfcGh5X3R5cGUgewogCWl4Z2JlX3BoeV91bmtub3duID0gMCwKIAlpeGdiZV9waHlfdG4sCisJaXhnYmVfcGh5X2N1X3Vua25vd24sCiAJaXhnYmVfcGh5X3F0LAogCWl4Z2JlX3BoeV94YXVpLAogCWl4Z2JlX3BoeV9ubCwKQEAgLTEyMzQsMjIgKzE4OTYsMzEgQEAKIAlpeGdiZV9waHlfc2ZwX2F2YWdvLAogCWl4Z2JlX3BoeV9zZnBfZnRsLAogCWl4Z2JlX3BoeV9zZnBfdW5rbm93biwKKwlpeGdiZV9waHlfc2ZwX2ludGVsLAogCWl4Z2JlX3BoeV9nZW5lcmljCiB9OwogCiAvKgogICogU0ZQKyBtb2R1bGUgdHlwZSBJRHM6CiAgKgotICogSUQJTW9kdWxlIFR5cGUKKyAqIElEICAgTW9kdWxlIFR5cGUKICAqID09PT09PT09PT09PT0KLSAqIDAJU0ZQX0RBX0NVCi0gKiAxCVNGUF9TUgotICogMglTRlBfTFIKKyAqIDAgICAgU0ZQX0RBX0NVCisgKiAxICAgIFNGUF9TUgorICogMiAgICBTRlBfTFIKKyAqIDMgICAgU0ZQX0RBX0NVX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKyAqIDQgICAgU0ZQX0RBX0NVX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKKyAqIDUgICAgU0ZQX1NSL0xSX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKyAqIDYgICAgU0ZQX1NSL0xSX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKICAqLwogZW51bSBpeGdiZV9zZnBfdHlwZSB7CiAJaXhnYmVfc2ZwX3R5cGVfZGFfY3UgPSAwLAogCWl4Z2JlX3NmcF90eXBlX3NyID0gMSwKIAlpeGdiZV9zZnBfdHlwZV9sciA9IDIsCisJaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTAgPSAzLAorCWl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUxID0gNCwKKwlpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwID0gNSwKKwlpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxID0gNiwKIAlpeGdiZV9zZnBfdHlwZV9ub3RfcHJlc2VudCA9IDB4RkZGRSwKIAlpeGdiZV9zZnBfdHlwZV91bmtub3duID0gMHhGRkZGCiB9OwpAQCAtMTI2MywxNCArMTkzNCw1MSBAQAogfTsKIAogLyogRmxvdyBDb250cm9sIFNldHRpbmdzICovCi1lbnVtIGl4Z2JlX2ZjX3R5cGUgeworZW51bSBpeGdiZV9mY19tb2RlIHsKIAlpeGdiZV9mY19ub25lID0gMCwKIAlpeGdiZV9mY19yeF9wYXVzZSwKIAlpeGdiZV9mY190eF9wYXVzZSwKIAlpeGdiZV9mY19mdWxsLAorI2lmZGVmIENPTkZJR19EQ0IKKwlpeGdiZV9mY19wZmMsCisjZW5kaWYKIAlpeGdiZV9mY19kZWZhdWx0CiB9OwogCisvKiBQQ0kgYnVzIHR5cGVzICovCitlbnVtIGl4Z2JlX2J1c190eXBlIHsKKwlpeGdiZV9idXNfdHlwZV91bmtub3duID0gMCwKKwlpeGdiZV9idXNfdHlwZV9wY2ksCisJaXhnYmVfYnVzX3R5cGVfcGNpeCwKKwlpeGdiZV9idXNfdHlwZV9wY2lfZXhwcmVzcywKKwlpeGdiZV9idXNfdHlwZV9yZXNlcnZlZAorfTsKKworLyogUENJIGJ1cyBzcGVlZHMgKi8KK2VudW0gaXhnYmVfYnVzX3NwZWVkIHsKKwlpeGdiZV9idXNfc3BlZWRfdW5rbm93biA9IDAsCisJaXhnYmVfYnVzX3NwZWVkXzMzLAorCWl4Z2JlX2J1c19zcGVlZF82NiwKKwlpeGdiZV9idXNfc3BlZWRfMTAwLAorCWl4Z2JlX2J1c19zcGVlZF8xMjAsCisJaXhnYmVfYnVzX3NwZWVkXzEzMywKKwlpeGdiZV9idXNfc3BlZWRfMjUwMCwKKwlpeGdiZV9idXNfc3BlZWRfNTAwMCwKKwlpeGdiZV9idXNfc3BlZWRfcmVzZXJ2ZWQKK307CisKKy8qIFBDSSBidXMgd2lkdGhzICovCitlbnVtIGl4Z2JlX2J1c193aWR0aCB7CisJaXhnYmVfYnVzX3dpZHRoX3Vua25vd24gPSAwLAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3gxLAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3gyLAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3g0ID0gNCwKKwlpeGdiZV9idXNfd2lkdGhfcGNpZV94OCA9IDgsCisJaXhnYmVfYnVzX3dpZHRoXzMyLAorCWl4Z2JlX2J1c193aWR0aF82NCwKKwlpeGdiZV9idXNfd2lkdGhfcmVzZXJ2ZWQKK307CisKIHN0cnVjdCBpeGdiZV9hZGRyX2ZpbHRlcl9pbmZvIHsKIAl1MzIgbnVtX21jX2FkZHJzOwogCXUzMiByYXJfdXNlZF9jb3VudDsKQEAgLTEyODAsNiArMTk4OCwxNiBAQAogCWJvb2wgdXNlcl9zZXRfcHJvbWlzYzsKIH07CiAKKy8qIEJ1cyBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgaXhnYmVfYnVzX2luZm8geworCWVudW0gaXhnYmVfYnVzX3NwZWVkIHNwZWVkOworCWVudW0gaXhnYmVfYnVzX3dpZHRoIHdpZHRoOworCWVudW0gaXhnYmVfYnVzX3R5cGUgdHlwZTsKKworCXUxNiBmdW5jOworCXUxNiBsYW5faWQ7Cit9OworCiAvKiBGbG93IGNvbnRyb2wgcGFyYW1ldGVycyAqLwogc3RydWN0IGl4Z2JlX2ZjX2luZm8gewogCXUzMiBoaWdoX3dhdGVyOyAvKiBGbG93IENvbnRyb2wgSGlnaC13YXRlciAqLwpAQCAtMTI4Nyw4ICsyMDA1LDggQEAKIAl1MTYgcGF1c2VfdGltZTsgLyogRmxvdyBDb250cm9sIFBhdXNlIHRpbWVyICovCiAJYm9vbCBzZW5kX3hvbjsgLyogRmxvdyBjb250cm9sIHNlbmQgWE9OICovCiAJYm9vbCBzdHJpY3RfaWVlZTsgLyogU3RyaWN0IElFRUUgbW9kZSAqLwotCWVudW0gaXhnYmVfZmNfdHlwZSB0eXBlOyAvKiBUeXBlIG9mIGZsb3cgY29udHJvbCAqLwotCWVudW0gaXhnYmVfZmNfdHlwZSBvcmlnaW5hbF90eXBlOworCWVudW0gaXhnYmVfZmNfbW9kZSBjdXJyZW50X21vZGU7IC8qIEZDIG1vZGUgaW4gZWZmZWN0ICovCisJZW51bSBpeGdiZV9mY19tb2RlIHJlcXVlc3RlZF9tb2RlOyAvKiBGQyBtb2RlIHJlcXVlc3RlZCBieSBjYWxsZXIgKi8KIH07CiAKIC8qIFN0YXRpc3RpY3MgY291bnRlcnMgY29sbGVjdGVkIGJ5IHRoZSBNQUMgKi8KQEAgLTEzNDgsNiArMjA2NiwxNCBAQAogCXU2NCBxcHRjWzE2XTsKIAl1NjQgcWJyY1sxNl07CiAJdTY0IHFidGNbMTZdOworCXU2NCBxcHJkY1sxNl07CisJdTY0IHB4b24yb2ZmY1s4XTsKKwl1NjQgZmRpcnVzdGF0X2FkZDsKKwl1NjQgZmRpcnVzdGF0X3JlbW92ZTsKKwl1NjQgZmRpcmZzdGF0X2ZhZGQ7CisJdTY0IGZkaXJmc3RhdF9mcmVtb3ZlOworCXU2NCBmZGlybWF0Y2g7CisJdTY0IGZkaXJtaXNzOwogfTsKIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwpAQCAtMTM3MiwxMiArMjA5OCwxNSBAQAogCXMzMiAoKnN0YXJ0X2h3KShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqY2xlYXJfaHdfY250cnMpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAllbnVtIGl4Z2JlX21lZGlhX3R5cGUgKCpnZXRfbWVkaWFfdHlwZSkoc3RydWN0IGl4Z2JlX2h3ICopOwotCXMzMiAoKmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwl1MzIgKCpnZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqZ2V0X21hY19hZGRyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTggKik7CiAJczMyICgqc3RvcF9hZGFwdGVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqZ2V0X2J1c19pbmZvKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJdm9pZCAoKnNldF9sYW5faWQpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpyZWFkX2FuYWxvZ19yZWc4KShzdHJ1Y3QgaXhnYmVfaHcqLCB1MzIsIHU4Kik7CiAJczMyICgqd3JpdGVfYW5hbG9nX3JlZzgpKHN0cnVjdCBpeGdiZV9odyosIHUzMiwgdTgpOworCXMzMiAoKnNldHVwX3NmcCkoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmVuYWJsZV9yeF9kbWEpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIpOwogCiAJLyogTGluayAqLwogCXMzMiAoKnNldHVwX2xpbmspKHN0cnVjdCBpeGdiZV9odyAqKTsKQEAgLTE0MzMsNyArMjE2Miw3IEBACiBzdHJ1Y3QgaXhnYmVfZWVwcm9tX2luZm8gewogCXN0cnVjdCBpeGdiZV9lZXByb21fb3BlcmF0aW9ucyAgb3BzOwogCWVudW0gaXhnYmVfZWVwcm9tX3R5cGUgICAgICAgICAgdHlwZTsKLQl1MzIJCQkJc2VtYXBob3JlX2RlbGF5OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX2RlbGF5OwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZF9zaXplOwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19iaXRzOwogfTsKQEAgLTE0NDksMTEgKzIxNzgsMTIgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yYXJfZW50cmllczsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF90eF9xdWV1ZXM7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcnhfcXVldWVzOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19hdHRhY2hfdHlwZTsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfbW9kZV9zZWxlY3Q7Ci0JYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3NldHRpbmdzX2xvYWRlZDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9tc2l4X3ZlY3RvcnM7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2F1dG9jOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19hdXRvYzI7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZzsKLQlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfZmFpbGVkOworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ19zdWNjZWVkZWQ7CiB9OwogCiBzdHJ1Y3QgaXhnYmVfcGh5X2luZm8gewpAQCAtMTQ2Nyw2ICsyMTk3LDcgQEAKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2Rpc2FibGU7CiAJaXhnYmVfYXV0b25lZ19hZHZlcnRpc2VkICAgICAgICBhdXRvbmVnX2FkdmVydGlzZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNwZWVkX2ZpYmVyOwogfTsKIAogc3RydWN0IGl4Z2JlX2h3IHsKQEAgLTE0NzcsNiArMjIwOCw3IEBACiAJc3RydWN0IGl4Z2JlX2ZjX2luZm8JCWZjOwogCXN0cnVjdCBpeGdiZV9waHlfaW5mbwkJcGh5OwogCXN0cnVjdCBpeGdiZV9lZXByb21faW5mbwllZXByb207CisJc3RydWN0IGl4Z2JlX2J1c19pbmZvCQlidXM7CiAJdTE2CQkJCWRldmljZV9pZDsKIAl1MTYJCQkJdmVuZG9yX2lkOwogCXUxNgkJCQlzdWJzeXN0ZW1fZGV2aWNlX2lkOwpAQCAtMTUxNSw2ICsyMjQ3LDcgQEAKICNkZWZpbmUgSVhHQkVfRVJSX0kyQyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xOAogI2RlZmluZSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgLTE5CiAjZGVmaW5lIElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQgICAgICAgICAgICAgICAtMjAKKyNkZWZpbmUgSVhHQkVfRVJSX1NGUF9OT19JTklUX1NFUV9QUkVTRU5UICAgICAgIC0yMQogI2RlZmluZSBJWEdCRV9OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogCiAjZW5kaWYgLyogX0lYR0JFX1RZUEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCmluZGV4IDAxNDc0NTcuLmQzYmYyZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCQlicmVhazsKIAl9IHdoaWxlIChpeHAyMDAwX3JlZ19yZWFkKElYUDIwMDBfSVJRX1RIRF9SQVdfU1RBVFVTX0FfMCkgJiAweDAwZmYpOwogCi0JbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9BXzAsIDB4MDBmZik7CiAKIAlyZXR1cm4gcng7CkBAIC0yMDQsNyArMjA0LDcgQEAKIAogCQlpeHAyMDAwX3JlZ193cmIoSVhQMjAwMF9JUlFfVEhEX0VOQUJMRV9DTEVBUl9BXzAsIDB4MDBmZik7CiAJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZpcC0+bmFwaSkpKSB7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZpcC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmlwLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0NSSVQgIml4cDIwMDA6IGlycSB3aGlsZSBwb2xsaW5nISFcbiIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCmluZGV4IDMzNGZmOWUuLjE0MjQ4Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCkBAIC0xMzEsNyArMTMxLDggQEAKIAlpZiAoc29uaWNfZGVidWcgICYmICB2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQogCQlwcmludGsodmVyc2lvbik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogU29uaWMgZXRoZXJuZXQgZm91bmQgYXQgMHglMDhseCwgIiwgbHAtPmRldmljZS0+YnVzX2lkLCBkZXYtPmJhc2VfYWRkcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNvbmljIGV0aGVybmV0IGZvdW5kIGF0IDB4JTA4bHgsICIsCisJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpLCBkZXYtPmJhc2VfYWRkcik7CiAKIAkvKgogCSAqIFB1dCB0aGUgc29uaWMgaW50byBzb2Z0d2FyZSByZXNldCwgdGhlbgpAQCAtMTU2LDcgKzE1Nyw4IEBACiAJaWYgKChscC0+ZGVzY3JpcHRvcnMgPSBkbWFfYWxsb2NfY29oZXJlbnQobHAtPmRldmljZSwKIAkJCQlTSVpFT0ZfU09OSUNfREVTQyAqIFNPTklDX0JVU19TQ0FMRShscC0+ZG1hX2JpdG1vZGUpLAogCQkJCSZscC0+ZGVzY3JpcHRvcnNfbGFkZHIsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkbid0IGFsbG9jIERNQSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzLlxuIiwgbHAtPmRldmljZS0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnMuXG4iLAorCQkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSkpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ptZS5jIGIvZHJpdmVycy9uZXQvam1lLmMKaW5kZXggYTZlMWEzNS4uODYwZGNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvam1lLmMKKysrIGIvZHJpdmVycy9uZXQvam1lLmMKQEAgLTQyOSwxMCArNDI5LDkgQEAKIAogCQlqbWUtPnBoeWxpbmsgPSBwaHlsaW5rOwogCi0JCWdoYyA9IGptZS0+cmVnX2doYyAmIH4oR0hDX1NQRUVEXzEwTSB8Ci0JCQkJCUdIQ19TUEVFRF8xMDBNIHwKLQkJCQkJR0hDX1NQRUVEXzEwMDBNIHwKLQkJCQkJR0hDX0RQWCk7CisJCWdoYyA9IGptZS0+cmVnX2doYyAmIH4oR0hDX1NQRUVEIHwgR0hDX0RQWCB8CisJCQkJR0hDX1RPX0NMS19QQ0lFIHwgR0hDX1RYTUFDX0NMS19QQ0lFIHwKKwkJCQlHSENfVE9fQ0xLX0dQSFkgfCBHSENfVFhNQUNfQ0xLX0dQSFkpOwogCQlzd2l0Y2ggKHBoeWxpbmsgJiBQSFlfTElOS19TUEVFRF9NQVNLKSB7CiAJCWNhc2UgUEhZX0xJTktfU1BFRURfMTBNOgogCQkJZ2hjIHw9IEdIQ19TUEVFRF8xME0gfApAQCAtMTgzNCw3ICsxODMzLDcgQEAKIH0KIAogc3RhdGljIGludAotam1lX2ZpbGxfZmlyc3RfdHhfZGVzYyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkeCkKK2ptZV9maWxsX3R4X2Rlc2Moc3RydWN0IGptZV9hZGFwdGVyICpqbWUsIHN0cnVjdCBza19idWZmICpza2IsIGludCBpZHgpCiB7CiAJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSBqbWUtPnR4cmluZzsKIAlzdHJ1Y3QgdHhkZXNjICp0eGRlc2M7CkBAIC0xODY0LDYgKzE4NjMsNyBAQAogCWlmIChqbWVfdHhfdHNvKHNrYiwgJnR4ZGVzYy0+ZGVzYzEubXNzLCAmZmxhZ3MpKQogCQlqbWVfdHhfY3N1bShqbWUsIHNrYiwgJmZsYWdzKTsKIAlqbWVfdHhfdmxhbihza2IsICZ0eGRlc2MtPmRlc2MxLnZsYW4sICZmbGFncyk7CisJam1lX21hcF90eF9za2Ioam1lLCBza2IsIGlkeCk7CiAJdHhkZXNjLT5kZXNjMS5mbGFncyA9IGZsYWdzOwogCS8qCiAJICogU2V0IHR4IGJ1ZmZlciBpbmZvIGFmdGVyIHRlbGxpbmcgTklDIHRvIHNlbmQKQEAgLTE5MzMsOCArMTkzMyw3IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQlqbWVfbWFwX3R4X3NrYihqbWUsIHNrYiwgaWR4KTsKLQlqbWVfZmlsbF9maXJzdF90eF9kZXNjKGptZSwgc2tiLCBpZHgpOworCWptZV9maWxsX3R4X2Rlc2Moam1lLCBza2IsIGlkeCk7CiAKIAlqd3JpdGUzMihqbWUsIEpNRV9UWENTLCBqbWUtPnJlZ190eGNzIHwKIAkJCQlUWENTX1NFTEVDVF9RVUVVRTAgfApAQCAtMjU5MSw2ICsyNTkwLDE2IEBACiBzdGF0aWMgaW50CiBqbWVfcGNpX2RtYTY0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCAmJgorCSAgICAhcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpCisJCWlmICghcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKKwkJCXJldHVybiAxOworCisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwICYmCisJICAgICFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV80MEJJVF9NQVNLKSkKKwkJaWYgKCFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzQwQklUX01BU0spKQorCQkJcmV0dXJuIDE7CisKIAlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQogCQlpZiAoIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpCiAJCQlyZXR1cm4gMDsKQEAgLTI4NTcsNyArMjg2NiwxMSBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9zaGFkb3c7CiAJfQogCi0JbXNnX3Byb2JlKGptZSwgIkpNQzI1MCBnaWdhYml0JXMgdmVyOiV4IHJldjoleCBtYWNhZGRyOiVwTVxuIiwKKwltc2dfcHJvYmUoam1lLCAiJXMlcyB2ZXI6JXggcmV2OiV4IG1hY2FkZHI6JXBNXG4iLAorCQkoam1lLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCkgPworCQkJIkpNQzI1MCBHaWdhYml0IEV0aGVybmV0IiA6CisJCQkoam1lLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI2MCkgPworCQkJCSJKTUMyNjAgRmFzdCBFdGhlcm5ldCIgOiAiVW5rbm93biIsCiAJCShqbWUtPmZwZ2F2ZXIgIT0gMCkgPyAiIChGUEdBKSIgOiAiIiwKIAkJKGptZS0+ZnBnYXZlciAhPSAwKSA/IGptZS0+ZnBnYXZlciA6IGptZS0+Y2hpcHJldiwKIAkJam1lLT5yZXYsIG5ldGRldi0+ZGV2X2FkZHIpOwpAQCAtMzAwMyw3ICszMDE2LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBqbWVfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSk1pY3JvbiBKTUMyNTAgZ2lnYWJpdCBldGhlcm5ldCAiCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkpNaWNyb24gSk1DMlhYIGV0aGVybmV0ICIKIAkgICAgICAgImRyaXZlciB2ZXJzaW9uICVzXG4iLCBEUlZfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmptZV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmggYi9kcml2ZXJzL25ldC9qbWUuaAppbmRleCA1MTU0NDExLi4wOTk2YTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuaAorKysgYi9kcml2ZXJzL25ldC9qbWUuaApAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBfX0pNRV9IX0lOQ0xVREVEX18KIAogI2RlZmluZSBEUlZfTkFNRQkiam1lIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuNCIKICNkZWZpbmUgUEZYCQlEUlZfTkFNRSAiOiAiCiAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MAkweDAyNTAKQEAgLTM5OCwxNSArMzk4LDE1IEBACiAjZGVmaW5lIEpNRV9OQVBJX1dFSUdIVCh3KSBpbnQgdwogI2RlZmluZSBKTUVfTkFQSV9XRUlHSFRfVkFMKHcpIHcKICNkZWZpbmUgSk1FX05BUElfV0VJR0hUX1NFVCh3LCByKQotI2RlZmluZSBKTUVfUlhfQ09NUExFVEUoZGV2LCBuYXBpcykgbmV0aWZfcnhfY29tcGxldGUobmFwaXMpCisjZGVmaW5lIEpNRV9SWF9DT01QTEVURShkZXYsIG5hcGlzKSBuYXBpX2NvbXBsZXRlKG5hcGlzKQogI2RlZmluZSBKTUVfTkFQSV9FTkFCTEUocHJpdikgbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwogI2RlZmluZSBKTUVfTkFQSV9ESVNBQkxFKHByaXYpIFwKIAlpZiAoIW5hcGlfZGlzYWJsZV9wZW5kaW5nKCZwcml2LT5uYXBpKSkgXAogCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogI2RlZmluZSBKTUVfUlhfU0NIRURVTEVfUFJFUChwcml2KSBcCi0JbmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkKKwluYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpCiAjZGVmaW5lIEpNRV9SWF9TQ0hFRFVMRShwcml2KSBcCi0JX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAogLyoKICAqIEptYWMgQWRhcHRlciBQcml2YXRlIGRhdGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tvcmluYS5jIGIvZHJpdmVycy9uZXQva29yaW5hLmMKaW5kZXggNzUwMTBjYS4uMzhkNjY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva29yaW5hLmMKKysrIGIvZHJpdmVycy9uZXQva29yaW5hLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCQkJCURNQV9TVEFUX0hBTFQgfCBETUFfU1RBVF9FUlIpLAogCQkJCSZscC0+cnhfZG1hX3JlZ3MtPmRtYXNtKTsKIAotCQluZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAKIAkJaWYgKGRtYXMgJiBETUFfU1RBVF9FUlIpCiAJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiVzOiBETUEgZXJyb3JcbiIsIGRldi0+bmFtZSk7CkBAIC00NjgsNyArNDY4LDcgQEAKIAogCXdvcmtfZG9uZSA9IGtvcmluYV9yeChkZXYsIGJ1ZGdldCk7CiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCQl3cml0ZWwocmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pICYKIAkJCX4oRE1BX1NUQVRfRE9ORSB8IERNQV9TVEFUX0hBTFQgfCBETUFfU1RBVF9FUlIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKaW5kZXggZDdhZmI5My4uZDgzZDQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9sYW5jZS5jCkBAIC0zOTEsNyArMzkxLDggQEAKICAgICovCiBzdGF0aWMgaW50IF9faW5pdCBkb19sYW5jZV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCAqcG9ydCwgcmVzdWx0OworCXVuc2lnbmVkIGludCAqcG9ydDsKKwlpbnQgcmVzdWx0OwogCiAJaWYgKGhpZ2hfbWVtb3J5IDw9IHBoeXNfdG9fdmlydCgxNioxMDI0KjEwMjQpKQogCQlsYW5jZV9uZWVkX2lzYV9ib3VuY2VfYnVmZmVycyA9IDA7CkBAIC00NTYsMTMgKzQ1NywxMyBAQAogc3RhdGljIGludCBfX2luaXQgbGFuY2VfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIsIGludCBpcnEsIGludCBvcHRpb25zKQogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscDsKLQlsb25nIGRtYV9jaGFubmVsczsJCQkvKiBNYXJrIHNwdXJpb3VzbHktYnVzeSBETUEgY2hhbm5lbHMgKi8KKwl1bnNpZ25lZCBsb25nIGRtYV9jaGFubmVsczsJLyogTWFyayBzcHVyaW91c2x5LWJ1c3kgRE1BIGNoYW5uZWxzICovCiAJaW50IGksIHJlc2V0X3ZhbCwgbGFuY2VfdmVyc2lvbjsKIAljb25zdCBjaGFyICpjaGlwbmFtZTsKIAkvKiBGbGFncyBmb3Igc3BlY2lmaWMgY2hpcHMgb3IgYm9hcmRzLiAqLwotCXVuc2lnbmVkIGNoYXIgaHBKMjQwNUEgPSAwOwkJLyogSFAgSVNBIGFkYXB0b3IgKi8KLQlpbnQgaHBfYnVpbHRpbiA9IDA7CQkJLyogSFAgb24tYm9hcmQgZXRoZXJuZXQuICovCi0Jc3RhdGljIGludCBkaWRfdmVyc2lvbjsJCQkvKiBBbHJlYWR5IHByaW50ZWQgdmVyc2lvbiBpbmZvLiAqLworCXVuc2lnbmVkIGNoYXIgaHBKMjQwNUEgPSAwOwkvKiBIUCBJU0EgYWRhcHRvciAqLworCWludCBocF9idWlsdGluID0gMDsJCS8qIEhQIG9uLWJvYXJkIGV0aGVybmV0LiAqLworCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247CQkvKiBBbHJlYWR5IHByaW50ZWQgdmVyc2lvbiBpbmZvLiAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IC1FTk9NRU07CiAJdm9pZCBfX2lvbWVtICpiaW9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IGY2YzQ5MzYuLmY1MDUwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5pc19ybWlpKSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkmbWFjYl9oYW5kbGVfbGlua19jaGFuZ2UsIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKTsKIAl9IGVsc2UgewotCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkJJm1hY2JfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAl9CiAKQEAgLTUxMyw3ICs1MTMsNiBAQAogc3RhdGljIGludCBtYWNiX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgbWFjYiwgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJwLT5kZXY7CiAJaW50IHdvcmtfZG9uZTsKIAl1MzIgc3RhdHVzOwogCkBAIC01MjcsNyArNTI2LDcgQEAKIAkJICogdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIGxhc3QgdGltZSwgYW5kIG5vIHBhY2tldHMKIAkJICogaGF2ZSBiZWVuIHJlY2VpdmVkIHNpbmNlLgogCQkgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTM4LDEzICs1MzcsMTMgQEAKIAkJZGV2X3dhcm4oJmJwLT5wZGV2LT5kZXYsCiAJCQkgIk5vIFJYIGJ1ZmZlcnMgY29tcGxldGUsIHN0YXR1cyA9ICUwMmx4XG4iLAogCQkJICh1bnNpZ25lZCBsb25nKXN0YXR1cyk7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlnb3RvIG91dDsKIAl9CiAKIAl3b3JrX2RvbmUgPSBtYWNiX3J4KGJwLCBidWRnZXQpOwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyoKIAkgKiBXZSd2ZSBkb25lIHdoYXQgd2UgY2FuIHRvIGNsZWFuIHRoZSBidWZmZXJzLiBNYWtlIHN1cmUgd2UKQEAgLTU3OSw3ICs1NzgsNyBAQAogCQl9CiAKIAkJaWYgKHN0YXR1cyAmIE1BQ0JfUlhfSU5UX0ZMQUdTKSB7Ci0JCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYnAtPm5hcGkpKSB7CisJCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZicC0+bmFwaSkpIHsKIAkJCQkvKgogCQkJCSAqIFRoZXJlJ3Mgbm8gcG9pbnQgdGFraW5nIGFueSBtb3JlIGludGVycnVwdHMKIAkJCQkgKiB1bnRpbCB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgYnVmZmVycwpAQCAtNTg3LDcgKzU4Niw3IEBACiAJCQkJbWFjYl93cml0ZWwoYnAsIElEUiwgTUFDQl9SWF9JTlRfRkxBR1MpOwogCQkJCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsCiAJCQkJCSJzY2hlZHVsaW5nIFJYIHNvZnRpcnFcbiIpOwotCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJwLT5uYXBpKTsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKIAkJCX0KIAkJfQogCkBAIC0xMDc3LDcgKzEwNzYsNyBAQAogCiAJc3RyY3B5KGluZm8tPmRyaXZlciwgYnAtPnBkZXYtPmRldi5kcml2ZXItPm5hbWUpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCAiJFJldmlzaW9uOiAxLjE0ICQiKTsKLQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGJwLT5wZGV2LT5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZicC0+cGRldi0+ZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFjYl9ldGh0b29sX29wcyA9IHsKQEAgLTEyMzQsOCArMTIzMyw4IEBACiAKIAlwaHlkZXYgPSBicC0+cGh5X2RldjsKIAlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKLQkJIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKKwkJIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLCBkZXYtPm5hbWUsCisJCXBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggMjA1YmIwNS4uNTI3MTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAlpZiAoKGxwLT5kZXNjcmlwdG9ycyA9IGRtYV9hbGxvY19jb2hlcmVudChscC0+ZGV2aWNlLAogCSAgICAgICAgICAgIFNJWkVPRl9TT05JQ19ERVNDICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSksCiAJICAgICAgICAgICAgJmxwLT5kZXNjcmlwdG9yc19sYWRkciwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9ycy5cbiIsCisJCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzM3LDcgKzMzOCw3IEBACiAJCXNvbmljX3ZlcnNpb25fcHJpbnRlZCA9IDE7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiBvbmJvYXJkIC8gY29tbS1zbG90IFNPTklDIGF0IDB4JTA4bHhcbiIsCi0JICAgICAgIGxwLT5kZXZpY2UtPmJ1c19pZCwgZGV2LT5iYXNlX2FkZHIpOworCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgZGV2LT5iYXNlX2FkZHIpOwogCiAJLyogVGhlIFBvd2VyQm9vaydzIFNPTklDIGlzIDE2IGJpdCBhbHdheXMuICovCiAJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9QQjUyMCkgewpAQCAtMzcwLDEwICszNzEsMTAgQEAKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiJXM6IHJldmlzaW9uIDB4JTA0eCwgdXNpbmcgJWQgYml0IERNQSBhbmQgcmVnaXN0ZXIgb2Zmc2V0ICVkXG4iLAotCSAgICAgICBscC0+ZGV2aWNlLT5idXNfaWQsIHNyLCBscC0+ZG1hX2JpdG1vZGU/MzI6MTYsIGxwLT5yZWdfb2Zmc2V0KTsKKwkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSksIHNyLCBscC0+ZG1hX2JpdG1vZGU/MzI6MTYsIGxwLT5yZWdfb2Zmc2V0KTsKIAogI2lmIDAgLyogVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGZpbmQgb3V0IGhvdyBNYWNPUyBjb25maWd1cmVkIHRoZSBjYXJkLiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEQ1I6IDB4JTA0eCwgRENSMjogMHglMDR4XG4iLCBscC0+ZGV2aWNlLT5idXNfaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpLAogCSAgICAgICBTT05JQ19SRUFEKFNPTklDX0RDUikgJiAweGZmZmYsIFNPTklDX1JFQUQoU09OSUNfRENSMikgJiAweGZmZmYpOwogI2VuZGlmCiAKQEAgLTUyNSwxMiArNTI2LDEyIEBACiAJCXNvbmljX3ZlcnNpb25fcHJpbnRlZCA9IDE7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBpbiBzbG90ICVYXG4iLAotCSAgICAgICBscC0+ZGV2aWNlLT5idXNfaWQsIG5kZXYtPmJvYXJkLT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CisJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpLCBuZGV2LT5ib2FyZC0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXZpc2lvbiAweCUwNHgsIHVzaW5nICVkIGJpdCBETUEgYW5kIHJlZ2lzdGVyIG9mZnNldCAlZFxuIiwKLQkgICAgICAgbHAtPmRldmljZS0+YnVzX2lkLCBTT05JQ19SRUFEKFNPTklDX1NSKSwgZG1hX2JpdG1vZGU/MzI6MTYsIHJlZ19vZmZzZXQpOworCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgU09OSUNfUkVBRChTT05JQ19TUiksIGRtYV9iaXRtb2RlPzMyOjE2LCByZWdfb2Zmc2V0KTsKIAogI2lmIDAgLyogVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGZpbmQgb3V0IGhvdyBNYWNPUyBjb25maWd1cmVkIHRoZSBjYXJkLiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEQ1I6IDB4JTA0eCwgRENSMjogMHglMDR4XG4iLCBscC0+ZGV2aWNlLT5idXNfaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpLAogCSAgICAgICBTT05JQ19SRUFEKFNPTklDX0RDUikgJiAweGZmZmYsIFNPTklDX1JFQUQoU09OSUNfRENSMikgJiAweGZmZmYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA3ZTI0YjUwLi43MGQzZWY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwpAQCAtNjAsNiArNjAsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2FkZChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4pCit7CisJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IHZsYW4tPnBvcnQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciA9IHZsYW4tPmRldi0+ZGV2X2FkZHI7CisKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2FkZHJbNV1dKTsKK30KKworc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2RlbChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4pCit7CisJaGxpc3RfZGVsX3JjdSgmdmxhbi0+aGxpc3QpOworCXN5bmNocm9uaXplX3JjdSgpOworfQorCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfY2hhbmdlX2FkZHIoc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCW1hY3ZsYW5faGFzaF9kZWwodmxhbik7CisJLyogTm93IHRoYXQgd2UgYXJlIHVuaGFzaGVkIGl0IGlzIHNhZmUgdG8gY2hhbmdlIHRoZSBkZXZpY2UKKwkgKiBhZGRyZXNzIHdpdGhvdXQgY29uZnVzaW5nIHBhY2tldCBkZWxpdmVyeS4KKwkgKi8KKwltZW1jcHkodmxhbi0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pOworCW1hY3ZsYW5faGFzaF9hZGQodmxhbik7Cit9CisKK3N0YXRpYyBpbnQgbWFjdmxhbl9hZGRyX2J1c3koY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCS8qIFRlc3QgdG8gc2VlIGlmIHRoZSBzcGVjaWZpZWQgbXVsdGljYXN0IGFkZHJlc3MgaXMKKwkgKiBjdXJyZW50bHkgaW4gdXNlIGJ5IHRoZSB1bmRlcmx5aW5nIGRldmljZSBvcgorCSAqIGFub3RoZXIgbWFjdmxhbi4KKwkgKi8KKwlpZiAobWVtY21wKHBvcnQtPmRldi0+ZGV2X2FkZHIsIGFkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gMTsKKworCWlmIChtYWN2bGFuX2hhc2hfbG9va3VwKHBvcnQsIGFkZHIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBtYWN2bGFuX2Jyb2FkY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCkKIHsKQEAgLTE4NCwxMCArMjI1LDEzIEBACiBzdGF0aWMgaW50IG1hY3ZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IHZsYW4tPnBvcnQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gdmxhbi0+bG93ZXJkZXY7CiAJaW50IGVycjsKIAorCWVyciA9IC1FQlVTWTsKKwlpZiAobWFjdmxhbl9hZGRyX2J1c3kodmxhbi0+cG9ydCwgZGV2LT5kZXZfYWRkcikpCisJCWdvdG8gb3V0OworCiAJZXJyID0gZGV2X3VuaWNhc3RfYWRkKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMTk2LDggKzI0MCw3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBkZWxfdW5pY2FzdDsKIAl9Ci0KLQlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2Rldi0+ZGV2X2FkZHJbNV1dKTsKKwltYWN2bGFuX2hhc2hfYWRkKHZsYW4pOwogCXJldHVybiAwOwogCiBkZWxfdW5pY2FzdDoKQEAgLTIxNyw4ICsyNjAsNyBAQAogCiAJZGV2X3VuaWNhc3RfZGVsZXRlKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKLQlobGlzdF9kZWxfcmN1KCZ2bGFuLT5obGlzdCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7CisJbWFjdmxhbl9oYXNoX2RlbCh2bGFuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMyLDE2ICsyNzQsMjEgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKQotCQlnb3RvIG91dDsKKwlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkgeworCQkvKiBKdXN0IGNvcHkgaW4gdGhlIG5ldyBhZGRyZXNzICovCisJCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJLyogUmVoYXNoIGFuZCB1cGRhdGUgdGhlIGRldmljZSBmaWx0ZXJzICovCisJCWlmIChtYWN2bGFuX2FkZHJfYnVzeSh2bGFuLT5wb3J0LCBhZGRyLT5zYV9kYXRhKSkKKwkJCXJldHVybiAtRUJVU1k7CiAKLQllcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlkZXZfdW5pY2FzdF9kZWxldGUobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJaWYgKChlcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKSkpCisJCQlyZXR1cm4gZXJyOwogCi1vdXQ6Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJZGV2X3VuaWNhc3RfZGVsZXRlKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKKwkJbWFjdmxhbl9oYXNoX2NoYW5nZV9hZGRyKHZsYW4sIGFkZHItPnNhX2RhdGEpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYxLDEyICs1MDgsMTMgQEAKIAlpZiAobG93ZXJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBEb24ndCBhbGxvdyBtYWN2bGFucyBvbiB0b3Agb2Ygb3RoZXIgbWFjdmxhbnMgLSBpdHMgbm90IHJlYWxseQotCSAqIHdyb25nLCBidXQgbG9ja2RlcCBjYW4ndCBoYW5kbGUgaXQgYW5kIGl0cyBub3QgdXNlZnVsIGZvciBhbnl0aGluZwotCSAqIHlvdSBjb3VsZG4ndCBkbyBkaXJlY3RseSBvbiB0b3Agb2YgdGhlIHJlYWwgZGV2aWNlLgorCS8qIFdoZW4gY3JlYXRpbmcgbWFjdmxhbnMgb24gdG9wIG9mIG90aGVyIG1hY3ZsYW5zIC0gdXNlCisJICogdGhlIHJlYWwgZGV2aWNlIGFzIHRoZSBsb3dlcmRldi4KIAkgKi8KLQlpZiAobG93ZXJkZXYtPnJ0bmxfbGlua19vcHMgPT0gZGV2LT5ydG5sX2xpbmtfb3BzKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAobG93ZXJkZXYtPnJ0bmxfbGlua19vcHMgPT0gZGV2LT5ydG5sX2xpbmtfb3BzKSB7CisJCXN0cnVjdCBtYWN2bGFuX2RldiAqbG93ZXJ2bGFuID0gbmV0ZGV2X3ByaXYobG93ZXJkZXYpOworCQlsb3dlcmRldiA9IGxvd2Vydmxhbi0+bG93ZXJkZXY7CisJfQogCiAJaWYgKCF0YltJRkxBX01UVV0pCiAJCWRldi0+bXR1ID0gbG93ZXJkZXYtPm10dTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21pcHNuZXQuYyBiL2RyaXZlcnMvbmV0L21pcHNuZXQuYwppbmRleCA0ZTdhNWZhLi42NjQ4MzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taXBzbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvbWlwc25ldC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIHsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbWlwc25ldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCWludCBlcnI7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgbmV0ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG5ldGRldik7CiAKIAluZXRkZXYtPm9wZW4JCQk9IG1pcHNuZXRfb3BlbjsKIAluZXRkZXYtPnN0b3AJCQk9IG1pcHNuZXRfY2xvc2U7CkBAIC0yOTMsMjMgKzI5MywyNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG1pcHNuZXRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtaXBzbmV0X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIHNpemVvZihzdHJ1Y3QgbWlwc25ldF9yZWdzKSk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtaXBzbmV0X2RyaXZlciA9IHsKLQkubmFtZQk9IG1pcHNuZXRfc3RyaW5nLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gbWlwc25ldF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AobWlwc25ldF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1pcHNuZXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IG1pcHNuZXRfc3RyaW5nLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWlwc25ldF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1pcHNuZXRfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X2luaXRfbW9kdWxlKHZvaWQpCkBAIC0zMTksNyArMzIxLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNSVBTTmV0IEV0aGVybmV0IGRyaXZlci4gVmVyc2lvbjogJXMuICIKIAkgICAgICAgIihjKTIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy5cbiIsIE1JUFNORVRfVkVSU0lPTik7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIApAQCAtMzI4LDcgKzMzMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtaXBzbmV0X2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtaXBzbmV0X2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tbHg0L01ha2VmaWxlCmluZGV4IGE3YTk3YmYuLjIxMDQwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIG9iai0kKENPTkZJR19NTFg0X0NPUkUpCQkrPSBtbHg0X2NvcmUubwogCiBtbHg0X2NvcmUteSA6PQlhbGxvYy5vIGNhdGFzLm8gY21kLm8gY3EubyBlcS5vIGZ3Lm8gaWNtLm8gaW50Zi5vIG1haW4ubyBtY2cubyBcCi0JCW1yLm8gcGQubyBwb3J0Lm8gcHJvZmlsZS5vIHFwLm8gcmVzZXQubyBzcnEubworCQltci5vIHBkLm8gcG9ydC5vIHByb2ZpbGUubyBxcC5vIHJlc2V0Lm8gc2Vuc2UubyBzcnEubwogCiBvYmotJChDT05GSUdfTUxYNF9FTikgICAgICAgICAgICAgICArPSBtbHg0X2VuLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jIGIvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCmluZGV4IGYwOTRlZTAuLmFhOTY3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKQEAgLTQyLDcgKzQyLDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2F0YXNfbG9jayk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoY2F0YXNfbGlzdCk7Ci1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNhdGFzX3dxOwogc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBjYXRhc193b3JrOwogCiBzdGF0aWMgaW50IGludGVybmFsX2Vycl9yZXNldCA9IDE7CkBAIC03Nyw3ICs3Niw3IEBACiAJCQlsaXN0X2FkZCgmcHJpdi0+Y2F0YXNfZXJyLmxpc3QsICZjYXRhc19saXN0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYXRhc19sb2NrKTsKIAotCQkJcXVldWVfd29yayhjYXRhc193cSwgJmNhdGFzX3dvcmspOworCQkJcXVldWVfd29yayhtbHg0X3dxLCAmY2F0YXNfd29yayk7CiAJCX0KIAl9IGVsc2UKIAkJbW9kX3RpbWVyKCZwcml2LT5jYXRhc19lcnIudGltZXIsCkBAIC0xNDYsMTggKzE0NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjYXRhc19sb2NrKTsKIH0KIAotaW50IF9faW5pdCBtbHg0X2NhdGFzX2luaXQodm9pZCkKK3ZvaWQgIF9faW5pdCBtbHg0X2NhdGFzX2luaXQodm9pZCkKIHsKIAlJTklUX1dPUksoJmNhdGFzX3dvcmssIGNhdGFzX3Jlc2V0KTsKLQotCWNhdGFzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm1seDRfZXJyIik7Ci0JaWYgKCFjYXRhc193cSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBtbHg0X2NhdGFzX2NsZWFudXAodm9pZCkKLXsKLQlkZXN0cm95X3dvcmtxdWV1ZShjYXRhc193cSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKaW5kZXggYzYxYjBiZC4uYTQxMzBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwpAQCAtNzY4LDYgKzc2OCw3IEBACiAKIAkJc2tiLT5pcF9zdW1tZWQgPSBpcF9zdW1tZWQ7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBjcS0+cmluZyk7CiAKIAkJLyogUHVzaCBpdCB1cCB0aGUgc3RhY2sgKi8KIAkJaWYgKHByaXYtPnZsZ3JwICYmIChiZTMyX3RvX2NwdShjcWUtPnZsYW5fbXlfcXBuKSAmCkBAIC04MTQsNyArODE1LDcgQEAKIAlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoY3EtPmRldik7CiAKIAlpZiAocHJpdi0+cG9ydF91cCkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNxLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3EtPm5hcGkpOwogCWVsc2UKIAkJbWx4NF9lbl9hcm1fY3EocHJpdiwgY3EpOwogfQpAQCAtODM0LDcgKzgzNSw3IEBACiAJCUlOQ19QRVJGX0NPVU5URVIocHJpdi0+cHN0YXRzLm5hcGlfcXVvdGEpOwogCWVsc2UgewogCQkvKiBEb25lIGZvciBub3cgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCW1seDRfZW5fYXJtX2NxKHByaXYsIGNxKTsKIAl9CiAJcmV0dXJuIGRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKaW5kZXggMmMxOWJmZjdjLi44ODMwZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lcS5jCkBAIC0xNjMsNiArMTYzLDcgQEAKIAlpbnQgY3FuOwogCWludCBlcWVzX2ZvdW5kID0gMDsKIAlpbnQgc2V0X2NpID0gMDsKKwlpbnQgcG9ydDsKIAogCXdoaWxlICgoZXFlID0gbmV4dF9lcWVfc3coZXEpKSkgewogCQkvKgpAQCAtMjAzLDExICsyMDQsMTYgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1BPUlRfQ0hBTkdFOgotCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsCi0JCQkJCSAgICBlcWUtPnN1YnR5cGUgPT0gTUxYNF9QT1JUX0NIQU5HRV9TVUJUWVBFX0FDVElWRSA/Ci0JCQkJCSAgICBNTFg0X0RFVl9FVkVOVF9QT1JUX1VQIDoKLQkJCQkJICAgIE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTiwKLQkJCQkJICAgIGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucG9ydF9jaGFuZ2UucG9ydCkgPj4gMjgpOworCQkJcG9ydCA9IGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucG9ydF9jaGFuZ2UucG9ydCkgPj4gMjg7CisJCQlpZiAoZXFlLT5zdWJ0eXBlID09IE1MWDRfUE9SVF9DSEFOR0VfU1VCVFlQRV9ET1dOKSB7CisJCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsIE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTiwKKwkJCQkJCSAgICBwb3J0KTsKKwkJCQltbHg0X3ByaXYoZGV2KS0+c2Vuc2UuZG9fc2Vuc2VfcG9ydFtwb3J0XSA9IDE7CisJCQl9IGVsc2UgeworCQkJCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBNTFg0X0RFVl9FVkVOVF9QT1JUX1VQLAorCQkJCQkJICAgIHBvcnQpOworCQkJCW1seDRfcHJpdihkZXYpLT5zZW5zZS5kb19zZW5zZV9wb3J0W3BvcnRdID0gMDsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX0NRX0VSUk9SOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCA2ZWYyNDkwLi5hNjZmNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtNTEsNiArNTEsOCBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWx4NF93cTsKKwogI2lmZGVmIENPTkZJR19NTFg0X0RFQlVHCiAKIGludCBtbHg0X2RlYnVnX2xldmVsID0gMDsKQEAgLTk4LDI0ICsxMDAsMjMgQEAKIE1PRFVMRV9QQVJNX0RFU0ModXNlX3ByaW8sICJFbmFibGUgc3RlZXJpbmcgYnkgVkxBTiBwcmlvcml0eSBvbiBFVEggcG9ydHMgIgogCQkgICIoMC8xLCBkZWZhdWx0IDApIik7CiAKLXN0YXRpYyBpbnQgbWx4NF9jaGVja19wb3J0X3BhcmFtcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKLQkJCQkgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZSkKK2ludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHMgLSAxOyBpKyspIHsKLQkJaWYgKHBvcnRfdHlwZVtpXSAhPSBwb3J0X3R5cGVbaSsxXSAmJgotCQkgICAgIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgewotCQkJbWx4NF9lcnIoZGV2LCAiT25seSBzYW1lIHBvcnQgdHlwZXMgc3VwcG9ydGVkICIKLQkJCQkgIm9uIHRoaXMgSENBLCBhYm9ydGluZy5cbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwb3J0X3R5cGVbaV0gIT0gcG9ydF90eXBlW2kgKyAxXSkgeworCQkJaWYgKCEoZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfRFBEUCkpIHsKKwkJCQltbHg0X2VycihkZXYsICJPbmx5IHNhbWUgcG9ydCB0eXBlcyBzdXBwb3J0ZWQgIgorCQkJCQkgIm9uIHRoaXMgSENBLCBhYm9ydGluZy5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKHBvcnRfdHlwZVtpXSA9PSBNTFg0X1BPUlRfVFlQRV9FVEggJiYKKwkJCSAgICBwb3J0X3R5cGVbaSArIDFdID09IE1MWDRfUE9SVF9UWVBFX0lCKQorCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCWlmICgocG9ydF90eXBlWzBdID09IE1MWDRfUE9SVF9UWVBFX0VUSCkgJiYKLQkgICAgKHBvcnRfdHlwZVsxXSA9PSBNTFg0X1BPUlRfVFlQRV9JQikpIHsKLQkJbWx4NF9lcnIoZGV2LCAiZXRoLWliIGNvbmZpZ3VyYXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CiAJCWlmICghKHBvcnRfdHlwZVtpXSAmIGRldi0+Y2Fwcy5zdXBwb3J0ZWRfdHlwZVtpKzFdKSkgewpAQCAtMjI1LDYgKzIyNiw5IEBACiAJCQlkZXYtPmNhcHMucG9ydF90eXBlW2ldID0gTUxYNF9QT1JUX1RZUEVfSUI7CiAJCWVsc2UKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbaV0gPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisJCWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID0gZGV2LT5jYXBzLnBvcnRfdHlwZVtpXTsKKwkJbWx4NF9wcml2KGRldiktPnNlbnNlLnNlbnNlX2FsbG93ZWRbaV0gPQorCQkJZGV2LT5jYXBzLnN1cHBvcnRlZF90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE87CiAKIAkJaWYgKGRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPiBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV0pIHsKIAkJCWRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPSBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV07CkBAIC0yNjMsMTQgKzI2NywxNiBAQAogICogQ2hhbmdlIHRoZSBwb3J0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZS4KICAqIEV2ZXJ5IHVzZXIgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGhvbGQgdGhlIHBvcnQgbXV0ZXguCiAgKi8KLXN0YXRpYyBpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKLQkJCQkgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpCitpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IGNoYW5nZSA9IDA7CiAJaW50IHBvcnQ7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgIGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykgeworCQkvKiBDaGFuZ2UgdGhlIHBvcnQgdHlwZSBvbmx5IGlmIHRoZSBuZXcgdHlwZSBpcyBkaWZmZXJlbnQKKwkJICogZnJvbSB0aGUgY3VycmVudCwgYW5kIG5vdCBzZXQgdG8gQXV0byAqLwogCQlpZiAocG9ydF90eXBlc1twb3J0XSAhPSBkZXYtPmNhcHMucG9ydF90eXBlW3BvcnQgKyAxXSkgewogCQkJY2hhbmdlID0gMTsKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbcG9ydCArIDFdID0gcG9ydF90eXBlc1twb3J0XTsKQEAgLTMwMiwxMCArMzA4LDE3IEBACiAJc3RydWN0IG1seDRfcG9ydF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBtbHg0X3BvcnRfaW5mbywKIAkJCQkJCSAgIHBvcnRfYXR0cik7CiAJc3RydWN0IG1seDRfZGV2ICptZGV2ID0gaW5mby0+ZGV2OworCWNoYXIgdHlwZVs4XTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAotCQkgICAgICAgbWRldi0+Y2Fwcy5wb3J0X3R5cGVbaW5mby0+cG9ydF0gPT0gTUxYNF9QT1JUX1RZUEVfSUIgPwotCQkgICAgICAgImliIiA6ICJldGgiKTsKKwlzcHJpbnRmKHR5cGUsICIlcyIsCisJCShtZGV2LT5jYXBzLnBvcnRfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9JQikgPworCQkiaWIiIDogImV0aCIpOworCWlmIChtZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaW5mby0+cG9ydF0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykKKwkJc3ByaW50ZihidWYsICJhdXRvICglcylcbiIsIHR5cGUpOworCWVsc2UKKwkJc3ByaW50ZihidWYsICIlc1xuIiwgdHlwZSk7CisKKwlyZXR1cm4gc3RybGVuKGJ1Zik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF9wb3J0X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMzE3LDYgKzMzMCw3IEBACiAJc3RydWN0IG1seDRfZGV2ICptZGV2ID0gaW5mby0+ZGV2OwogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYobWRldik7CiAJZW51bSBtbHg0X3BvcnRfdHlwZSB0eXBlc1tNTFg0X01BWF9QT1JUU107CisJZW51bSBtbHg0X3BvcnRfdHlwZSBuZXdfdHlwZXNbTUxYNF9NQVhfUE9SVFNdOwogCWludCBpOwogCWludCBlcnIgPSAwOwogCkBAIC0zMjQsMjYgKzMzOCw1NiBAQAogCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0lCOwogCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZXRoXG4iKSkKIAkJaW5mby0+dG1wX3R5cGUgPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisJZWxzZSBpZiAoIXN0cmNtcChidWYsICJhdXRvXG4iKSkKKwkJaW5mby0+dG1wX3R5cGUgPSBNTFg0X1BPUlRfVFlQRV9BVVRPOwogCWVsc2UgewogCQltbHg0X2VycihtZGV2LCAiJXMgaXMgbm90IHN1cHBvcnRlZCBwb3J0IHR5cGVcbiIsIGJ1Zik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCW1seDRfc3RvcF9zZW5zZShtZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKLQkJdHlwZXNbaV0gPSBwcml2LT5wb3J0W2krMV0udG1wX3R5cGUgPyBwcml2LT5wb3J0W2krMV0udG1wX3R5cGUgOgotCQkJCQltZGV2LT5jYXBzLnBvcnRfdHlwZVtpKzFdOworCS8qIFBvc3NpYmxlIHR5cGUgaXMgYWx3YXlzIHRoZSBvbmUgdGhhdCB3YXMgZGVsaXZlcmVkICovCisJbWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2luZm8tPnBvcnRdID0gaW5mby0+dG1wX3R5cGU7CiAKLQllcnIgPSBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKG1kZXYsIHR5cGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykgeworCQl0eXBlc1tpXSA9IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA/IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA6CisJCQkJCW1kZXYtPmNhcHMucG9zc2libGVfdHlwZVtpKzFdOworCQlpZiAodHlwZXNbaV0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykKKwkJCXR5cGVzW2ldID0gbWRldi0+Y2Fwcy5wb3J0X3R5cGVbaSsxXTsKKwl9CisKKwlpZiAoIShtZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfRFBEUCkpIHsKKwkJZm9yIChpID0gMTsgaSA8PSBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CisJCQlpZiAobWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE8pIHsKKwkJCQltZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaV0gPSBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpXTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJfQorCQl9CisJfQorCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkF1dG8gc2Vuc2luZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgSENBLiAiCisJCQkgICAgICAgIlNldCBvbmx5ICdldGgnIG9yICdpYicgZm9yIGJvdGggcG9ydHMgIgorCQkJICAgICAgICIoc2hvdWxkIGJlIHRoZSBzYW1lKVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCW1seDRfZG9fc2Vuc2VfcG9ydHMobWRldiwgbmV3X3R5cGVzLCB0eXBlcyk7CisKKwllcnIgPSBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKG1kZXYsIG5ld190eXBlcyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IG1kZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCi0JCXByaXYtPnBvcnRbaV0udG1wX3R5cGUgPSAwOworCS8qIFdlIGFyZSBhYm91dCB0byBhcHBseSB0aGUgY2hhbmdlcyBhZnRlciB0aGUgY29uZmlndXJhdGlvbgorCSAqIHdhcyB2ZXJpZmllZCwgbm8gbmVlZCB0byByZW1lbWJlciB0aGUgdGVtcG9yYXJ5IHR5cGVzCisJICogYW55IG1vcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKKwkJcHJpdi0+cG9ydFtpICsgMV0udG1wX3R5cGUgPSAwOwogCi0JZXJyID0gbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhtZGV2LCB0eXBlcyk7CisJZXJyID0gbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhtZGV2LCBuZXdfdHlwZXMpOwogCiBvdXQ6CisJbWx4NF9zdGFydF9zZW5zZShtZGV2KTsKIAltdXRleF91bmxvY2soJnByaXYtPnBvcnRfbXV0ZXgpOwogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KQEAgLTExMTcsNiArMTE2MSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcG9ydDsKIAorCW1seDRfc2Vuc2VfaW5pdChkZXYpOworCW1seDRfc3RhcnRfc2Vuc2UoZGV2KTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTgyLDYgKzEyMjksNyBAQAogCWludCBwOwogCiAJaWYgKGRldikgeworCQltbHg0X3N0b3Bfc2Vuc2UoZGV2KTsKIAkJbWx4NF91bnJlZ2lzdGVyX2RldmljZShkZXYpOwogCiAJCWZvciAocCA9IDE7IHAgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcCsrKSB7CkBAIC0xMjMwLDYgKzEyNzgsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjczYykgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBRRFIgUENJZSBnZW4yICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzY4KSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIEVOIDEwR2lnRSAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc1MCkgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBFTiAxMEdpZ0UgUENJZSBnZW4yICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzcyKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCAxMEdpZ0UgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NWEpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UK0dlbjIgMTBHaWdFICovCiAJeyAwLCB9CiB9OwogCkBAIC0xMjY0LDkgKzEzMTQsMTEgQEAKIAlpZiAobWx4NF92ZXJpZnlfcGFyYW1zKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gbWx4NF9jYXRhc19pbml0KCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwltbHg0X2NhdGFzX2luaXQoKTsKKworCW1seDRfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibWx4NCIpOworCWlmICghbWx4NF93cSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtbHg0X2RyaXZlcik7CiAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwpAQCAtMTI3NSw3ICsxMzI3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtbHg0X2NsZWFudXAodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1seDRfZHJpdmVyKTsKLQltbHg0X2NhdGFzX2NsZWFudXAoKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtbHg0X3dxKTsKIH0KIAogbW9kdWxlX2luaXQobWx4NF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKaW5kZXggZTAyMTNiYWQuLjViZDc5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWx4NC9kcml2ZXIuaD4KQEAgLTI3Niw2ICsyNzcsMTMgQEAKIAlzdHJ1Y3QgbWx4NF92bGFuX3RhYmxlCXZsYW5fdGFibGU7CiB9OwogCitzdHJ1Y3QgbWx4NF9zZW5zZSB7CisJc3RydWN0IG1seDRfZGV2CQkqZGV2OworCXU4CQkJZG9fc2Vuc2VfcG9ydFtNTFg0X01BWF9QT1JUUyArIDFdOworCXU4CQkJc2Vuc2VfYWxsb3dlZFtNTFg0X01BWF9QT1JUUyArIDFdOworCXN0cnVjdCBkZWxheWVkX3dvcmsJc2Vuc2VfcG9sbDsKK307CisKIHN0cnVjdCBtbHg0X3ByaXYgewogCXN0cnVjdCBtbHg0X2RldgkJZGV2OwogCkBAIC0zMDUsNiArMzEzLDcgQEAKIAlzdHJ1Y3QgbWx4NF91YXIJCWRyaXZlcl91YXI7CiAJdm9pZCBfX2lvbWVtCSAgICAgICAqa2FyOwogCXN0cnVjdCBtbHg0X3BvcnRfaW5mbwlwb3J0W01MWDRfTUFYX1BPUlRTICsgMV07CisJc3RydWN0IG1seDRfc2Vuc2UgICAgICAgc2Vuc2U7CiAJc3RydWN0IG11dGV4CQlwb3J0X211dGV4OwogfTsKIApAQCAtMzEzLDYgKzMyMiwxMCBAQAogCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWx4NF9wcml2LCBkZXYpOwogfQogCisjZGVmaW5lIE1MWDRfU0VOU0VfUkFOR0UJKEhaICogMykKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptbHg0X3dxOworCiB1MzIgbWx4NF9iaXRtYXBfYWxsb2Moc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXApOwogdm9pZCBtbHg0X2JpdG1hcF9mcmVlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgb2JqKTsKIHUzMiBtbHg0X2JpdG1hcF9hbGxvY19yYW5nZShzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCwgaW50IGNudCwgaW50IGFsaWduKTsKQEAgLTM0Niw4ICszNTksNyBAQAogCiB2b2lkIG1seDRfc3RhcnRfY2F0YXNfcG9sbChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CiB2b2lkIG1seDRfc3RvcF9jYXRhc19wb2xsKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKLWludCBtbHg0X2NhdGFzX2luaXQodm9pZCk7Ci12b2lkIG1seDRfY2F0YXNfY2xlYW51cCh2b2lkKTsKK3ZvaWQgbWx4NF9jYXRhc19pbml0KHZvaWQpOwogaW50IG1seDRfcmVzdGFydF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogaW50IG1seDRfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CkBAIC0zNzksNiArMzkxLDE3IEBACiAKIHZvaWQgbWx4NF9oYW5kbGVfY2F0YXNfZXJyKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIAordm9pZCBtbHg0X2RvX3NlbnNlX3BvcnRzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKnN0eXBlLAorCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKmRlZmF1bHRzKTsKK3ZvaWQgbWx4NF9zdGFydF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfc3RvcF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfc2Vuc2VfaW5pdChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CitpbnQgbWx4NF9jaGVja19wb3J0X3BhcmFtcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZSk7CitpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpOworCiB2b2lkIG1seDRfaW5pdF9tYWNfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X21hY190YWJsZSAqdGFibGUpOwogdm9pZCBtbHg0X2luaXRfdmxhbl90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfdmxhbl90YWJsZSAqdGFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3BvcnQuYyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCmluZGV4IDBhMDU3ZTUuLjdjY2UzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCkBAIC0yOTgsMjAgKzI5OCwxNyBAQAogewogCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OwogCWludCBlcnI7Ci0JdTggaXNfZXRoID0gZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9FVEg7CiAKIAltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOwogCWlmIChJU19FUlIobWFpbGJveCkpCiAJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOwogCiAJbWVtc2V0KG1haWxib3gtPmJ1ZiwgMCwgMjU2KTsKLQlpZiAoaXNfZXRoKSB7Ci0JCSgodTggKikgbWFpbGJveC0+YnVmKVszXSA9IDY7Ci0JCSgoX19iZTE2ICopIG1haWxib3gtPmJ1ZilbNF0gPSBjcHVfdG9fYmUxNigxIDw8IDE1KTsKLQkJKChfX2JlMTYgKikgbWFpbGJveC0+YnVmKVs2XSA9IGNwdV90b19iZTE2KDEgPDwgMTUpOwotCX0gZWxzZQotCQkoKF9fYmUzMiAqKSBtYWlsYm94LT5idWYpWzFdID0gZGV2LT5jYXBzLmliX3BvcnRfZGVmX2NhcFtwb3J0XTsKLQllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgcG9ydCwgaXNfZXRoLCBNTFg0X0NNRF9TRVRfUE9SVCwKKwlpZiAoZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9FVEgpCisJCXJldHVybiAwOworCisJKChfX2JlMzIgKikgbWFpbGJveC0+YnVmKVsxXSA9IGRldi0+Y2Fwcy5pYl9wb3J0X2RlZl9jYXBbcG9ydF07CisJZXJyID0gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIHBvcnQsIDAsIE1MWDRfQ01EX1NFVF9QT1JULAogCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKIAogCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jIGIvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTA4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorCitzdGF0aWMgaW50IG1seDRfU0VOU0VfUE9SVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHBvcnQsCisJCQkgICBlbnVtIG1seDRfcG9ydF90eXBlICp0eXBlKQoreworCXU2NCBvdXRfcGFyYW07CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBtbHg0X2NtZF9pbW0oZGV2LCAwLCAmb3V0X3BhcmFtLCBwb3J0LCAwLAorCQkJICAgTUxYNF9DTURfU0VOU0VfUE9SVCwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIlNlbnNlIGNvbW1hbmQgZmFpbGVkIGZvciBwb3J0OiAlZFxuIiwgcG9ydCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKG91dF9wYXJhbSA+IDIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiU2Vuc2UgcmV0dXJuZWQgaWxsZWdhbCB2YWx1ZTogMHglbGx4XG4iLCBvdXRfcGFyYW0pOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCSp0eXBlID0gb3V0X3BhcmFtOworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfZG9fc2Vuc2VfcG9ydHMoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqc3R5cGUsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqZGVmYXVsdHMpCit7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gJm1seDRfcHJpdihkZXYpLT5zZW5zZTsKKwlpbnQgZXJyOworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKKwkJc3R5cGVbaSAtIDFdID0gMDsKKwkJaWYgKHNlbnNlLT5kb19zZW5zZV9wb3J0W2ldICYmIHNlbnNlLT5zZW5zZV9hbGxvd2VkW2ldICYmCisJCSAgICBkZXYtPmNhcHMucG9zc2libGVfdHlwZVtpXSA9PSBNTFg0X1BPUlRfVFlQRV9BVVRPKSB7CisJCQllcnIgPSBtbHg0X1NFTlNFX1BPUlQoZGV2LCBpLCAmc3R5cGVbaSAtIDFdKTsKKwkJCWlmIChlcnIpCisJCQkJc3R5cGVbaSAtIDFdID0gZGVmYXVsdHNbaSAtIDFdOworCQl9IGVsc2UKKwkJCXN0eXBlW2kgLSAxXSA9IGRlZmF1bHRzW2kgLSAxXTsKKwl9CisKKwkvKgorCSAqIEFkanVzdCBwb3J0IGNvbmZpZ3VyYXRpb246CisJICogSWYgcG9ydCAxIHNlbnNlZCBub3RoaW5nIGFuZCBwb3J0IDIgaXMgSUIsIHNldCBib3RoIGFzIElCCisJICogSWYgcG9ydCAyIHNlbnNlZCBub3RoaW5nIGFuZCBwb3J0IDEgaXMgRXRoLCBzZXQgYm90aCBhcyBFdGgKKwkgKi8KKwlpZiAoc3R5cGVbMF0gPT0gTUxYNF9QT1JUX1RZUEVfRVRIKSB7CisJCWZvciAoaSA9IDE7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCisJCQlzdHlwZVtpXSA9IHN0eXBlW2ldID8gc3R5cGVbaV0gOiBNTFg0X1BPUlRfVFlQRV9FVEg7CisJfQorCWlmIChzdHlwZVtkZXYtPmNhcHMubnVtX3BvcnRzIC0gMV0gPT0gTUxYNF9QT1JUX1RZUEVfSUIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHMgLSAxOyBpKyspCisJCQlzdHlwZVtpXSA9IHN0eXBlW2ldID8gc3R5cGVbaV0gOiBNTFg0X1BPUlRfVFlQRV9JQjsKKwl9CisKKwkvKgorCSAqIElmIHNlbnNlZCBub3RoaW5nLCByZW1haW4gaW4gY3VycmVudCBjb25maWd1cmF0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCisJCXN0eXBlW2ldID0gc3R5cGVbaV0gPyBzdHlwZVtpXSA6IGRlZmF1bHRzW2ldOworCit9CisKK3N0YXRpYyB2b2lkIG1seDRfc2Vuc2VfcG9ydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gY29udGFpbmVyX29mKGRlbGF5LCBzdHJ1Y3QgbWx4NF9zZW5zZSwKKwkJCQkJCXNlbnNlX3BvbGwpOworCXN0cnVjdCBtbHg0X2RldiAqZGV2ID0gc2Vuc2UtPmRldjsKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJZW51bSBtbHg0X3BvcnRfdHlwZSBzdHlwZVtNTFg0X01BWF9QT1JUU107CisKKwltdXRleF9sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKKwltbHg0X2RvX3NlbnNlX3BvcnRzKGRldiwgc3R5cGUsICZkZXYtPmNhcHMucG9ydF90eXBlWzFdKTsKKworCWlmIChtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKGRldiwgc3R5cGUpKQorCQlnb3RvIHNlbnNlX2FnYWluOworCisJaWYgKG1seDRfY2hhbmdlX3BvcnRfdHlwZXMoZGV2LCBzdHlwZSkpCisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBjaGFuZ2UgcG9ydF90eXBlc1xuIik7CisKK3NlbnNlX2FnYWluOgorCW11dGV4X3VubG9jaygmcHJpdi0+cG9ydF9tdXRleCk7CisJcXVldWVfZGVsYXllZF93b3JrKG1seDRfd3EgLCAmc2Vuc2UtPnNlbnNlX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKE1MWDRfU0VOU0VfUkFOR0UpKTsKK30KKwordm9pZCBtbHg0X3N0YXJ0X3NlbnNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSAmcHJpdi0+c2Vuc2U7CisKKwlpZiAoIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkKKwkJcmV0dXJuOworCisJcXVldWVfZGVsYXllZF93b3JrKG1seDRfd3EgLCAmc2Vuc2UtPnNlbnNlX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKE1MWDRfU0VOU0VfUkFOR0UpKTsKK30KKwordm9pZCBtbHg0X3N0b3Bfc2Vuc2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtbHg0X3ByaXYoZGV2KS0+c2Vuc2Uuc2Vuc2VfcG9sbCk7Cit9CisKK3ZvaWQgIG1seDRfc2Vuc2VfaW5pdChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gJnByaXYtPnNlbnNlOworCWludCBwb3J0OworCisJc2Vuc2UtPmRldiA9IGRldjsKKwlmb3IgKHBvcnQgPSAxOyBwb3J0IDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykKKwkJc2Vuc2UtPmRvX3NlbnNlX3BvcnRbcG9ydF0gPSAxOworCisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmc2Vuc2UtPnNlbnNlX3BvbGwsIG1seDRfc2Vuc2VfcG9ydCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCBiMGJjM2JjLi5hNTZkOWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogc3RhdGljIGNoYXIgbXY2NDN4eF9ldGhfZHJpdmVyX25hbWVbXSA9ICJtdjY0M3h4X2V0aCI7CkBAIC0yMjcsNiArMjI4LDEyIEBACiAjZGVmaW5lIFJYX0VOQUJMRV9JTlRFUlJVUFQJCTB4MjAwMDAwMDAKICNkZWZpbmUgUlhfRklSU1RfREVTQwkJCTB4MDgwMDAwMDAKICNkZWZpbmUgUlhfTEFTVF9ERVNDCQkJMHgwNDAwMDAwMAorI2RlZmluZSBSWF9JUF9IRFJfT0sJCQkweDAyMDAwMDAwCisjZGVmaW5lIFJYX1BLVF9JU19JUFY0CQkJMHgwMTAwMDAwMAorI2RlZmluZSBSWF9QS1RfSVNfRVRIRVJORVRWMgkJMHgwMDgwMDAwMAorI2RlZmluZSBSWF9QS1RfTEFZRVI0X1RZUEVfTUFTSwkJMHgwMDYwMDAwMAorI2RlZmluZSBSWF9QS1RfTEFZRVI0X1RZUEVfVENQX0lQVjQJMHgwMDAwMDAwMAorI2RlZmluZSBSWF9QS1RfSVNfVkxBTl9UQUdHRUQJCTB4MDAwODAwMDAKIAogLyogVFggZGVzY3JpcHRvciBjb21tYW5kICovCiAjZGVmaW5lIFRYX0VOQUJMRV9JTlRFUlJVUFQJCTB4MDA4MDAwMDAKQEAgLTI4Niw2ICsyOTMsOSBAQAogI2RlZmluZSBUWF9CV19DT05UUk9MX09MRF9MQVlPVVQJMQogI2RlZmluZSBUWF9CV19DT05UUk9MX05FV19MQVlPVVQJMgogCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIAogLyogcGVyLXBvcnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgbWliX2NvdW50ZXJzIHsKQEAgLTMyMSw2ICszMzEsMTIgQEAKIAl1MzIgbGF0ZV9jb2xsaXNpb247CiB9OwogCitzdHJ1Y3QgbHJvX2NvdW50ZXJzIHsKKwl1MzIgbHJvX2FnZ3JlZ2F0ZWQ7CisJdTMyIGxyb19mbHVzaGVkOworCXUzMiBscm9fbm9fZGVzYzsKK307CisKIHN0cnVjdCByeF9xdWV1ZSB7CiAJaW50IGluZGV4OwogCkBAIC0zMzQsNiArMzUwLDkgQEAKIAlkbWFfYWRkcl90IHJ4X2Rlc2NfZG1hOwogCWludCByeF9kZXNjX2FyZWFfc2l6ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKKworCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOworCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Fycls4XTsKIH07CiAKIHN0cnVjdCB0eF9xdWV1ZSB7CkBAIC0zNjksNiArMzg4LDggQEAKIAlzcGlubG9ja190IG1pYl9jb3VudGVyc19sb2NrOwogCXN0cnVjdCBtaWJfY291bnRlcnMgbWliX2NvdW50ZXJzOwogCisJc3RydWN0IGxyb19jb3VudGVycyBscm9fY291bnRlcnM7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfdGltZW91dF90YXNrOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CkBAIC0zODUsNyArNDA2LDcgQEAKIAkvKgogCSAqIFJYIHN0YXRlLgogCSAqLwotCWludCBkZWZhdWx0X3J4X3Jpbmdfc2l6ZTsKKwlpbnQgcnhfcmluZ19zaXplOwogCXVuc2lnbmVkIGxvbmcgcnhfZGVzY19zcmFtX2FkZHI7CiAJaW50IHJ4X2Rlc2Nfc3JhbV9zaXplOwogCWludCByeHFfY291bnQ7CkBAIC0zOTUsNyArNDE2LDcgQEAKIAkvKgogCSAqIFRYIHN0YXRlLgogCSAqLwotCWludCBkZWZhdWx0X3R4X3Jpbmdfc2l6ZTsKKwlpbnQgdHhfcmluZ19zaXplOwogCXVuc2lnbmVkIGxvbmcgdHhfZGVzY19zcmFtX2FkZHI7CiAJaW50IHR4X2Rlc2Nfc3JhbV9zaXplOwogCWludCB0eHFfY291bnQ7CkBAIC00OTMsMTIgKzUxNCw0MCBAQAogCiAKIC8qIHJ4IG5hcGkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorbXY2NDN4eF9nZXRfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqaXBoZHIsIHZvaWQgKip0Y3BoLAorCQkgICAgICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBjbWRfc3RzID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhpcyBwYWNrZXQgaXMgRXRoZXJuZXQgSUksIGlzIG5vdCBWTEFOCisJICogdGFnZ2VkLCBpcyBJUHY0LCBoYXMgYSB2YWxpZCBJUCBoZWFkZXIsIGFuZCBpcyBUQ1AuCisJICovCisJaWYgKChjbWRfc3RzICYgKFJYX0lQX0hEUl9PSyB8IFJYX1BLVF9JU19JUFY0IHwKKwkJICAgICAgIFJYX1BLVF9JU19FVEhFUk5FVFYyIHwgUlhfUEtUX0xBWUVSNF9UWVBFX01BU0sgfAorCQkgICAgICAgUlhfUEtUX0lTX1ZMQU5fVEFHR0VEKSkgIT0KKwkgICAgKFJYX0lQX0hEUl9PSyB8IFJYX1BLVF9JU19JUFY0IHwKKwkgICAgIFJYX1BLVF9JU19FVEhFUk5FVFYyIHwgUlhfUEtUX0xBWUVSNF9UWVBFX1RDUF9JUFY0KSkKKwkJcmV0dXJuIC0xOworCisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaXBfaGRybGVuKHNrYikpOworCSppcGhkciA9IGlwX2hkcihza2IpOworCSp0Y3BoID0gdGNwX2hkcihza2IpOworCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByeHFfcHJvY2VzcyhzdHJ1Y3QgcnhfcXVldWUgKnJ4cSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSByeHFfdG9fbXAocnhxKTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbXAtPmRldi0+c3RhdHM7CisJaW50IGxyb19mbHVzaF9uZWVkZWQ7CiAJaW50IHJ4OwogCisJbHJvX2ZsdXNoX25lZWRlZCA9IDA7CiAJcnggPSAwOwogCXdoaWxlIChyeCA8IGJ1ZGdldCAmJiByeHEtPnJ4X2Rlc2NfY291bnQpIHsKIAkJc3RydWN0IHJ4X2Rlc2MgKnJ4X2Rlc2M7CkBAIC01NTgsNyArNjA3LDEzIEBACiAJCWlmIChjbWRfc3RzICYgTEFZRVJfNF9DSEVDS1NVTV9PSykKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1wLT5kZXYpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCWlmIChza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyAmJgorCQkgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwkJCWxyb19yZWNlaXZlX3NrYigmcnhxLT5scm9fbWdyLCBza2IsICh2b2lkICopY21kX3N0cyk7CisJCQlscm9fZmx1c2hfbmVlZGVkID0gMTsKKwkJfSBlbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJCWNvbnRpbnVlOwogCkBAIC01NzksNiArNjM0LDkgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAorCWlmIChscm9fZmx1c2hfbmVlZGVkKQorCQlscm9fZmx1c2hfYWxsKCZyeHEtPmxyb19tZ3IpOworCiAJaWYgKHJ4IDwgYnVkZ2V0KQogCQltcC0+d29ya19yeCAmPSB+KDEgPDwgcnhxLT5pbmRleCk7CiAKQEAgLTkwNyw3ICs5NjUsNyBAQAogCiAJCWlmIChza2IgIT0gTlVMTCkgewogCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJm1wLT5yeF9yZWN5Y2xlKSA8Ci0JCQkJCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSAmJgorCQkJCQltcC0+cnhfcmluZ19zaXplICYmCiAJCQkgICAgc2tiX3JlY3ljbGVfY2hlY2soc2tiLCBtcC0+c2tiX3NpemUgKwogCQkJCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpIC0gMSkpCiAJCQkJX19za2JfcXVldWVfaGVhZCgmbXAtPnJ4X3JlY3ljbGUsIHNrYik7CkBAIC0xMTU4LDYgKzEyMTYsMjYgQEAKIAlyZXR1cm4gc3RhdHM7CiB9CiAKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2dyYWJfbHJvX3N0YXRzKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCkKK3sKKwl1MzIgbHJvX2FnZ3JlZ2F0ZWQgPSAwOworCXUzMiBscm9fZmx1c2hlZCA9IDA7CisJdTMyIGxyb19ub19kZXNjID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtcC0+cnhxX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHJ4X3F1ZXVlICpyeHEgPSBtcC0+cnhxICsgaTsKKworCQlscm9fYWdncmVnYXRlZCArPSByeHEtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKKwkJbHJvX2ZsdXNoZWQgKz0gcnhxLT5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7CisJCWxyb19ub19kZXNjICs9IHJ4cS0+bHJvX21nci5zdGF0cy5ub19kZXNjOworCX0KKworCW1wLT5scm9fY291bnRlcnMubHJvX2FnZ3JlZ2F0ZWQgPSBscm9fYWdncmVnYXRlZDsKKwltcC0+bHJvX2NvdW50ZXJzLmxyb19mbHVzaGVkID0gbHJvX2ZsdXNoZWQ7CisJbXAtPmxyb19jb3VudGVycy5scm9fbm9fZGVzYyA9IGxyb19ub19kZXNjOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiBtaWJfcmVhZChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIHJkbChtcCwgTUlCX0NPVU5URVJTKG1wLT5wb3J0X251bSkgKyBvZmZzZXQpOwpAQCAtMTIyMSw2ICsxMjk5LDg1IEBACiB9CiAKIAorLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSGFyZHdhcmUgY29hbGVzY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgaW4gdW5pdHMgb2YgNjQgdF9jbGsKKyAqIGN5Y2xlcy4gIEkuZS46CisgKgorICoJY29hbF9kZWxheV9pbl91c2VjID0gNjQwMDAwMDAgKiByZWdpc3Rlcl92YWx1ZSAvIHRfY2xrX3JhdGUKKyAqCisgKglyZWdpc3Rlcl92YWx1ZSA9IGNvYWxfZGVsYXlfaW5fdXNlYyAqIHRfY2xrX3JhdGUgLyA2NDAwMDAwMAorICoKKyAqIEluIHRoZSAtPnNldCooKSBtZXRob2RzLCB3ZSByb3VuZCB0aGUgY29tcHV0ZWQgcmVnaXN0ZXIgdmFsdWUKKyAqIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3J4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQoreworCXUzMiB2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7CisJdTY0IHRlbXA7CisKKwlpZiAobXAtPnNoYXJlZC0+ZXh0ZW5kZWRfcnhfY29hbF9saW1pdCkKKwkJdGVtcCA9ICgodmFsICYgMHgwMjAwMDAwMCkgPj4gMTApIHwgKCh2YWwgJiAweDAwM2ZmZjgwKSA+PiA3KTsKKwllbHNlCisJCXRlbXAgPSAodmFsICYgMHgwMDNmZmYwMCkgPj4gODsKKworCXRlbXAgKj0gNjQwMDAwMDA7CisJZG9fZGl2KHRlbXAsIG1wLT5zaGFyZWQtPnRfY2xrKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KXRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yeF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IHVzZWMpCit7CisJdTY0IHRlbXA7CisJdTMyIHZhbDsKKworCXRlbXAgPSAodTY0KXVzZWMgKiBtcC0+c2hhcmVkLT50X2NsazsKKwl0ZW1wICs9IDMxOTk5OTk5OworCWRvX2Rpdih0ZW1wLCA2NDAwMDAwMCk7CisKKwl2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7CisJaWYgKG1wLT5zaGFyZWQtPmV4dGVuZGVkX3J4X2NvYWxfbGltaXQpIHsKKwkJaWYgKHRlbXAgPiAweGZmZmYpCisJCQl0ZW1wID0gMHhmZmZmOworCQl2YWwgJj0gfjB4MDIzZmZmODA7CisJCXZhbCB8PSAodGVtcCAmIDB4ODAwMCkgPDwgMTA7CisJCXZhbCB8PSAodGVtcCAmIDB4N2ZmZikgPDwgNzsKKwl9IGVsc2UgeworCQlpZiAodGVtcCA+IDB4M2ZmZikKKwkJCXRlbXAgPSAweDNmZmY7CisJCXZhbCAmPSB+MHgwMDNmZmYwMDsKKwkJdmFsIHw9ICh0ZW1wICYgMHgzZmZmKSA8PCA4OworCX0KKwl3cmxwKG1wLCBTRE1BX0NPTkZJRywgdmFsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdHhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCit7CisJdTY0IHRlbXA7CisKKwl0ZW1wID0gKHJkbHAobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRCkgJiAweDNmZmYwKSA+PiA0OworCXRlbXAgKj0gNjQwMDAwMDA7CisJZG9fZGl2KHRlbXAsIG1wLT5zaGFyZWQtPnRfY2xrKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KXRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90eF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IHVzZWMpCit7CisJdTY0IHRlbXA7CisKKwl0ZW1wID0gKHU2NCl1c2VjICogbXAtPnNoYXJlZC0+dF9jbGs7CisJdGVtcCArPSAzMTk5OTk5OTsKKwlkb19kaXYodGVtcCwgNjQwMDAwMDApOworCisJaWYgKHRlbXAgPiAweDNmZmYpCisJCXRlbXAgPSAweDNmZmY7CisKKwl3cmxwKG1wLCBUWF9GSUZPX1VSR0VOVF9USFJFU0hPTEQsIHRlbXAgPDwgNCk7Cit9CisKKwogLyogZXRodG9vbCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgbXY2NDN4eF9ldGhfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTEyMzcsNiArMTM5NCwxMCBAQAogCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbWliX2NvdW50ZXJzLCBtKSwJCVwKIAkgIC0xLCBvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSwgbWliX2NvdW50ZXJzLm0pIH0KIAorI2RlZmluZSBMUk9TVEFUKG0pCQkJCQkJXAorCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbHJvX2NvdW50ZXJzLCBtKSwJCVwKKwkgIC0xLCBvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSwgbHJvX2NvdW50ZXJzLm0pIH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdjY0M3h4X2V0aF9zdGF0cyBtdjY0M3h4X2V0aF9zdGF0c1tdID0gewogCVNTVEFUKHJ4X3BhY2tldHMpLAogCVNTVEFUKHR4X3BhY2tldHMpLApAQCAtMTI3NiwxMiArMTQzNywxNSBAQAogCU1JQlNUQVQoYmFkX2NyY19ldmVudCksCiAJTUlCU1RBVChjb2xsaXNpb24pLAogCU1JQlNUQVQobGF0ZV9jb2xsaXNpb24pLAorCUxST1NUQVQobHJvX2FnZ3JlZ2F0ZWQpLAorCUxST1NUQVQobHJvX2ZsdXNoZWQpLAorCUxST1NUQVQobHJvX25vX2Rlc2MpLAogfTsKIAogc3RhdGljIGludAotbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQorbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeShzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKIAogCWVyciA9IHBoeV9yZWFkX3N0YXR1cyhtcC0+cGh5KTsKQEAgLTEyOTgsMTAgKzE0NjIsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1tdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5bGVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeWxlc3Moc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKLQlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBwb3J0X3N0YXR1czsKIAogCXBvcnRfc3RhdHVzID0gcmRscChtcCwgUE9SVF9TVEFUVVMpOwpAQCAtMTMzNCwxMCArMTQ5NywyNCBAQAogfQogCiBzdGF0aWMgaW50CittdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChtcC0+cGh5ICE9IE5VTEwpCisJCXJldHVybiBtdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5KG1wLCBjbWQpOworCWVsc2UKKwkJcmV0dXJuIG12NjQzeHhfZXRoX2dldF9zZXR0aW5nc19waHlsZXNzKG1wLCBjbWQpOworfQorCitzdGF0aWMgaW50CiBtdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmIChtcC0+cGh5ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBUaGUgTUFDIGRvZXMgbm90IHN1cHBvcnQgMTAwMGJhc2VUX0hhbGYuCiAJICovCkBAIC0xMzQ2LDEzICsxNTIzLDYgQEAKIAlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChtcC0+cGh5LCBjbWQpOwogfQogCi1zdGF0aWMgaW50Ci1tdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3NfcGh5bGVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKQEAgLTEzNjcsMTIgKzE1MzcsMTAgQEAKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcobXAtPnBoeSk7Ci19CisJaWYgKG1wLT5waHkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfbndheV9yZXNldF9waHlsZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcobXAtPnBoeSk7CiB9CiAKIHN0YXRpYyB1MzIgbXY2NDN4eF9ldGhfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEzODAsNiArMTU0OCw4NiBAQAogCXJldHVybiAhIW5ldGlmX2NhcnJpZXJfb2soZGV2KTsKIH0KIAorc3RhdGljIGludAorbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gZ2V0X3J4X2NvYWwobXApOworCWVjLT50eF9jb2FsZXNjZV91c2VjcyA9IGdldF90eF9jb2FsKG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittdjY0M3h4X2V0aF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzZXRfcnhfY29hbChtcCwgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKKwlzZXRfdHhfY29hbChtcCwgZWMtPnR4X2NvYWxlc2NlX3VzZWNzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXY2NDN4eF9ldGhfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwllci0+cnhfbWF4X3BlbmRpbmcgPSA0MDk2OworCWVyLT50eF9tYXhfcGVuZGluZyA9IDQwOTY7CisJZXItPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOworCWVyLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisKKwllci0+cnhfcGVuZGluZyA9IG1wLT5yeF9yaW5nX3NpemU7CisJZXItPnR4X3BlbmRpbmcgPSBtcC0+dHhfcmluZ19zaXplOworCWVyLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCWVyLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKK30KKworc3RhdGljIGludAorbXY2NDN4eF9ldGhfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoZXItPnJ4X21pbmlfcGVuZGluZyB8fCBlci0+cnhfanVtYm9fcGVuZGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltcC0+cnhfcmluZ19zaXplID0gZXItPnJ4X3BlbmRpbmcgPCA0MDk2ID8gZXItPnJ4X3BlbmRpbmcgOiA0MDk2OworCW1wLT50eF9yaW5nX3NpemUgPSBlci0+dHhfcGVuZGluZyA8IDQwOTYgPyBlci0+dHhfcGVuZGluZyA6IDQwOTY7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW12NjQzeHhfZXRoX3N0b3AoZGV2KTsKKwkJaWYgKG12NjQzeHhfZXRoX29wZW4oZGV2KSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmRldi0+ZGV2LAorCQkJCSAgICJmYXRhbCBlcnJvciBvbiByZS1vcGVuaW5nIGRldmljZSBhZnRlciAiCisJCQkJICAgInJpbmcgcGFyYW0gY2hhbmdlXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIKK212NjQzeHhfZXRoX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAhIShyZGxwKG1wLCBQT1JUX0NPTkZJRykgJiAweDAyMDAwMDAwKTsKK30KKworc3RhdGljIGludAorbXY2NDN4eF9ldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X2NzdW0pCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdybHAobXAsIFBPUlRfQ09ORklHLCByeF9jc3VtID8gMHgwMjAwMDAwMCA6IDB4MDAwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgIHVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSkKIHsKQEAgLTE0MDMsNiArMTY1MSw3IEBACiAKIAltdjY0M3h4X2V0aF9nZXRfc3RhdHMoZGV2KTsKIAltaWJfY291bnRlcnNfdXBkYXRlKG1wKTsKKwltdjY0M3h4X2V0aF9ncmFiX2xyb19zdGF0cyhtcCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdjY0M3h4X2V0aF9zdGF0cyk7IGkrKykgewogCQljb25zdCBzdHJ1Y3QgbXY2NDN4eF9ldGhfc3RhdHMgKnN0YXQ7CkBAIC0xNDM0LDIxICsxNjgzLDE4IEBACiAJLmdldF9kcnZpbmZvCQk9IG12NjQzeHhfZXRoX2dldF9kcnZpbmZvLAogCS5ud2F5X3Jlc2V0CQk9IG12NjQzeHhfZXRoX253YXlfcmVzZXQsCiAJLmdldF9saW5rCQk9IG12NjQzeHhfZXRoX2dldF9saW5rLAorCS5nZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfc2V0X2NvYWxlc2NlLAorCS5nZXRfcmluZ3BhcmFtCQk9IG12NjQzeHhfZXRoX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0JCT0gbXY2NDN4eF9ldGhfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3J4X2NzdW0JCT0gbXY2NDN4eF9ldGhfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IG12NjQzeHhfZXRoX3NldF9yeF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9jc3VtLAogCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfc3RyaW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3NzZXRfY291bnQJCT0gbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRoX2V0aHRvb2xfb3BzX3BoeWxlc3MgPSB7Ci0JLmdldF9zZXR0aW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5bGVzcywKLQkuc2V0X3NldHRpbmdzCQk9IG12NjQzeHhfZXRoX3NldF9zZXR0aW5nc19waHlsZXNzLAotCS5nZXRfZHJ2aW5mbwkJPSBtdjY0M3h4X2V0aF9nZXRfZHJ2aW5mbywKLQkubndheV9yZXNldAkJPSBtdjY0M3h4X2V0aF9ud2F5X3Jlc2V0X3BoeWxlc3MsCi0JLmdldF9saW5rCQk9IG12NjQzeHhfZXRoX2dldF9saW5rLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfc3RyaW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RyaW5ncywKLQkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9zZXRfZmxhZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IG12NjQzeHhfZXRoX2dldF9zc2V0X2NvdW50LAogfTsKIApAQCAtMTYzNyw3ICsxODgzLDcgQEAKIAogCXJ4cS0+aW5kZXggPSBpbmRleDsKIAotCXJ4cS0+cnhfcmluZ19zaXplID0gbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplOworCXJ4cS0+cnhfcmluZ19zaXplID0gbXAtPnJ4X3Jpbmdfc2l6ZTsKIAogCXJ4cS0+cnhfZGVzY19jb3VudCA9IDA7CiAJcnhxLT5yeF9jdXJyX2Rlc2MgPSAwOwpAQCAtMTY4Myw2ICsxOTI5LDE5IEBACiAJCQkJCW5leHRpICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKTsKIAl9CiAKKwlyeHEtPmxyb19tZ3IuZGV2ID0gbXAtPmRldjsKKwltZW1zZXQoJnJ4cS0+bHJvX21nci5zdGF0cywgMCwgc2l6ZW9mKHJ4cS0+bHJvX21nci5zdGF0cykpOworCXJ4cS0+bHJvX21nci5mZWF0dXJlcyA9IExST19GX05BUEk7CisJcnhxLT5scm9fbWdyLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJ4cS0+bHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJ4cS0+bHJvX21nci5tYXhfZGVzYyA9IEFSUkFZX1NJWkUocnhxLT5scm9fYXJyKTsKKwlyeHEtPmxyb19tZ3IubWF4X2FnZ3IgPSAzMjsKKwlyeHEtPmxyb19tZ3IuZnJhZ19hbGlnbl9wYWQgPSAwOworCXJ4cS0+bHJvX21nci5scm9fYXJyID0gcnhxLT5scm9fYXJyOworCXJ4cS0+bHJvX21nci5nZXRfc2tiX2hlYWRlciA9IG12NjQzeHhfZ2V0X3NrYl9oZWFkZXI7CisKKwltZW1zZXQoJnJ4cS0+bHJvX2FyciwgMCwgc2l6ZW9mKHJ4cS0+bHJvX2FycikpOworCiAJcmV0dXJuIDA7CiAKIApAQCAtMTczNyw3ICsxOTk2LDcgQEAKIAogCXR4cS0+aW5kZXggPSBpbmRleDsKIAotCXR4cS0+dHhfcmluZ19zaXplID0gbXAtPmRlZmF1bHRfdHhfcmluZ19zaXplOworCXR4cS0+dHhfcmluZ19zaXplID0gbXAtPnR4X3Jpbmdfc2l6ZTsKIAogCXR4cS0+dHhfZGVzY19jb3VudCA9IDA7CiAJdHhxLT50eF9jdXJyX2Rlc2MgPSAwOwpAQCAtMjA2MSwzNiArMjMyMCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRfcnhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIHVuc2lnbmVkIGludCBkZWxheSkKLXsKLQl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OwotCXUzMiB2YWw7Ci0KLQl2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7Ci0JaWYgKG1wLT5zaGFyZWQtPmV4dGVuZGVkX3J4X2NvYWxfbGltaXQpIHsKLQkJaWYgKGNvYWwgPiAweGZmZmYpCi0JCQljb2FsID0gMHhmZmZmOwotCQl2YWwgJj0gfjB4MDIzZmZmODA7Ci0JCXZhbCB8PSAoY29hbCAmIDB4ODAwMCkgPDwgMTA7Ci0JCXZhbCB8PSAoY29hbCAmIDB4N2ZmZikgPDwgNzsKLQl9IGVsc2UgewotCQlpZiAoY29hbCA+IDB4M2ZmZikKLQkJCWNvYWwgPSAweDNmZmY7Ci0JCXZhbCAmPSB+MHgwMDNmZmYwMDsKLQkJdmFsIHw9IChjb2FsICYgMHgzZmZmKSA8PCA4OwotCX0KLQl3cmxwKG1wLCBTRE1BX0NPTkZJRywgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3R4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCB1bnNpZ25lZCBpbnQgZGVsYXkpCi17Ci0JdW5zaWduZWQgaW50IGNvYWwgPSAoKG1wLT5zaGFyZWQtPnRfY2xrIC8gMTAwMDAwMCkgKiBkZWxheSkgLyA2NDsKLQotCWlmIChjb2FsID4gMHgzZmZmKQotCQljb2FsID0gMHgzZmZmOwotCXdybHAobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRCwgKGNvYWwgJiAweDNmZmYpIDw8IDQpOwotfQotCiBzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9yZWNhbGNfc2tiX3NpemUoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQogewogCWludCBza2Jfc2l6ZTsKQEAgLTIxNTksMTMgKzIzODgsOCBAQAogCQl9CiAJfQogCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQogCXBvcnRfc3RhcnQobXApOwogCi0Jc2V0X3J4X2NvYWwobXAsIDApOwotCXNldF90eF9jb2FsKG1wLCAwKTsKLQogCXdybHAobXAsIElOVF9NQVNLX0VYVCwgSU5UX0VYVF9MSU5LX1BIWSB8IElOVF9FWFRfVFgpOwogCXdybHAobXAsIElOVF9NQVNLLCBJTlRfVFhfRU5EIHwgSU5UX1JYIHwgSU5UX0VYVCk7CiAKQEAgLTI1MzEsMTcgKzI3NTUsMTcgQEAKIAllbHNlCiAJCXVjX2FkZHJfZ2V0KG1wLCBkZXYtPmRldl9hZGRyKTsKIAotCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSA9IERFRkFVTFRfUlhfUVVFVUVfU0laRTsKKwltcC0+cnhfcmluZ19zaXplID0gREVGQVVMVF9SWF9RVUVVRV9TSVpFOwogCWlmIChwZC0+cnhfcXVldWVfc2l6ZSkKLQkJbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplID0gcGQtPnJ4X3F1ZXVlX3NpemU7CisJCW1wLT5yeF9yaW5nX3NpemUgPSBwZC0+cnhfcXVldWVfc2l6ZTsKIAltcC0+cnhfZGVzY19zcmFtX2FkZHIgPSBwZC0+cnhfc3JhbV9hZGRyOwogCW1wLT5yeF9kZXNjX3NyYW1fc2l6ZSA9IHBkLT5yeF9zcmFtX3NpemU7CiAKIAltcC0+cnhxX2NvdW50ID0gcGQtPnJ4X3F1ZXVlX2NvdW50ID8gOiAxOwogCi0JbXAtPmRlZmF1bHRfdHhfcmluZ19zaXplID0gREVGQVVMVF9UWF9RVUVVRV9TSVpFOworCW1wLT50eF9yaW5nX3NpemUgPSBERUZBVUxUX1RYX1FVRVVFX1NJWkU7CiAJaWYgKHBkLT50eF9xdWV1ZV9zaXplKQotCQltcC0+ZGVmYXVsdF90eF9yaW5nX3NpemUgPSBwZC0+dHhfcXVldWVfc2l6ZTsKKwkJbXAtPnR4X3Jpbmdfc2l6ZSA9IHBkLT50eF9xdWV1ZV9zaXplOwogCW1wLT50eF9kZXNjX3NyYW1fYWRkciA9IHBkLT50eF9zcmFtX2FkZHI7CiAJbXAtPnR4X2Rlc2Nfc3JhbV9zaXplID0gcGQtPnR4X3NyYW1fc2l6ZTsKIApAQCAtMjU4OCw3ICsyODEyLDcgQEAKIAogCXBoeV9yZXNldChtcCk7CiAKLQlwaHlfYXR0YWNoKG1wLT5kZXYsIHBoeS0+ZGV2LmJ1c19pZCwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOworCXBoeV9hdHRhY2gobXAtPmRldiwgZGV2X25hbWUoJnBoeS0+ZGV2KSwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOwogCiAJaWYgKHNwZWVkID09IDApIHsKIAkJcGh5LT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CkBAIC0yNjMyLDYgKzI4NTYsMjEgQEAKIAl3cmxwKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MLCBwc2NyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtdjY0M3h4X2V0aF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBtdjY0M3h4X2V0aF9vcGVuLAorCS5uZG9fc3RvcAkJPSBtdjY0M3h4X2V0aF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtdjY0M3h4X2V0aF94bWl0LAorCS5uZG9fc2V0X3J4X21vZGUJPSBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IG12NjQzeHhfZXRoX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG12NjQzeHhfZXRoX2dldF9zdGF0cywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gbXY2NDN4eF9ldGhfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpwZDsKQEAgLTI2NzIsMTIgKzI5MTEsMTAgQEAKIAlpZiAocGQtPnBoeV9hZGRyICE9IE1WNjQzWFhfRVRIX1BIWV9OT05FKQogCQltcC0+cGh5ID0gcGh5X3NjYW4obXAsIHBkLT5waHlfYWRkcik7CiAKLQlpZiAobXAtPnBoeSAhPSBOVUxMKSB7CisJaWYgKG1wLT5waHkgIT0gTlVMTCkKIAkJcGh5X2luaXQobXAsIHBkLT5zcGVlZCwgcGQtPmR1cGxleCk7Ci0JCVNFVF9FVEhUT09MX09QUyhkZXYsICZtdjY0M3h4X2V0aF9ldGh0b29sX29wcyk7Ci0JfSBlbHNlIHsKLQkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm12NjQzeHhfZXRoX2V0aHRvb2xfb3BzX3BoeWxlc3MpOwotCX0KKworCVNFVF9FVEhUT09MX09QUyhkZXYsICZtdjY0M3h4X2V0aF9ldGh0b29sX29wcyk7CiAKIAlpbml0X3BzY3IobXAsIHBkLT5zcGVlZCwgcGQtPmR1cGxleCk7CiAKQEAgLTI3MDUsMTggKzI5NDIsOCBAQAogCUJVR19PTighcmVzKTsKIAlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CiAKLQlkZXYtPmdldF9zdGF0cyA9IG12NjQzeHhfZXRoX2dldF9zdGF0czsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG12NjQzeHhfZXRoX3htaXQ7Ci0JZGV2LT5vcGVuID0gbXY2NDN4eF9ldGhfb3BlbjsKLQlkZXYtPnN0b3AgPSBtdjY0M3h4X2V0aF9zdG9wOwotCWRldi0+c2V0X3J4X21vZGUgPSBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gbXY2NDN4eF9ldGhfaW9jdGw7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gbXY2NDN4eF9ldGhfY2hhbmdlX210dTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0OwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBtdjY0M3h4X2V0aF9uZXRwb2xsOwotI2VuZGlmCisJZGV2LT5uZXRkZXZfb3BzID0gJm12NjQzeHhfZXRoX25ldGRldl9vcHM7CisKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOwogCWRldi0+YmFzZV9hZGRyID0gMDsKIApAQCAtMjcyOCw2ICsyOTU1LDExIEBACiAJaWYgKG1wLT5zaGFyZWQtPndpbl9wcm90ZWN0KQogCQl3cmwobXAsIFdJTkRPV19QUk9URUNUKG1wLT5wb3J0X251bSksIG1wLT5zaGFyZWQtPndpbl9wcm90ZWN0KTsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlzZXRfcnhfY29hbChtcCwgMjUwKTsKKwlzZXRfdHhfY29hbChtcCwgMCk7CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IGU5YzEyOTYuLmFlYTlmZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtMTMyNCw2ICsxMzI0LDcgQEAKIAkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDA7CiAJfQogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHNzIC0gJm1ncC0+c3NbMF0pOwogCiAJaWYgKG1ncC0+Y3N1bV9mbGFnKSB7CiAJCWlmICgoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHx8CkBAIC0xNTE0LDcgKzE1MTUsNyBAQAogCXdvcmtfZG9uZSA9IG15cmkxMGdlX2NsZWFuX3J4X2RvbmUoc3MsIGJ1ZGdldCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlwdXRfYmUzMihodG9ubCgzKSwgc3MtPmlycV9jbGFpbSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNTMyLDcgKzE1MzMsNyBAQAogCS8qIGFuIGludGVycnVwdCBvbiBhIG5vbi16ZXJvIHJlY2VpdmUtb25seSBzbGljZSBpcyBpbXBsaWNpdGx5CiAJICogdmFsaWQgIHNpbmNlIE1TSS1YIGlycXMgYXJlIG5vdCBzaGFyZWQgKi8KIAlpZiAoKG1ncC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPT0gMSkgJiYgKHNzICE9IG1ncC0+c3MpKSB7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZzcy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNzLT5uYXBpKTsKIAkJcmV0dXJuIChJUlFfSEFORExFRCk7CiAJfQogCkBAIC0xNTQzLDcgKzE1NDQsNyBAQAogCS8qIGxvdyBiaXQgaW5kaWNhdGVzIHJlY2VpdmVzIGFyZSBwcmVzZW50LCBzbyBzY2hlZHVsZQogCSAqIG5hcGkgcG9sbCBoYW5kbGVyICovCiAJaWYgKHN0YXRzLT52YWxpZCAmIDEpCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZzcy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNzLT5uYXBpKTsKIAogCWlmICghbWdwLT5tc2lfZW5hYmxlZCAmJiAhbWdwLT5tc2l4X2VuYWJsZWQpIHsKIAkJcHV0X2JlMzIoMCwgbWdwLT5pcnFfZGVhc3NlcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcF9nZW5faGVhZGVyLmgKaW5kZXggY2FhNmNiYi4uNjJhMWNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaAorKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oCkBAIC05LDYgKzksNyBAQAogI2RlZmluZSBNQ1BfVFlQRV9FVEggMHg0NTU0NDgyMAkvKiAiRVRIICIgKi8KICNkZWZpbmUgTUNQX1RZUEVfTUNQMCAweDRkNDM1MDMwCS8qICJNQ1AwIiAqLwogI2RlZmluZSBNQ1BfVFlQRV9ERkxUIDB4MjAyMDIwMjAJLyogIiAgICAiICovCisjZGVmaW5lIE1DUF9UWVBFX0VUSFogMHg0NTU0NDg1YQkvKiAiRVRIWiIgKi8KIAogc3RydWN0IG1jcF9nZW5faGVhZGVyIHsKIAkvKiB0aGUgZmlyc3QgNCBmaWVsZHMgYXJlIGZpbGxlZCBhdCBjb21waWxlIHRpbWUgKi8KQEAgLTQzLDcgKzQ0LDE1IEBACiAJdW5zaWduZWQgbXNpeF90YWJsZV9hZGRyOwkvKiBzdGFydCBhZGRyZXNzIG9mIG1zaXggdGFibGUgaW4gZmlybXdhcmUgKi8KIAl1bnNpZ25lZCBic3NfYWRkcjsJLyogc3RhcnQgb2YgYnNzICovCiAJdW5zaWduZWQgZmVhdHVyZXM7CisJdW5zaWduZWQgZWVfaGRyX2FkZHI7CiAJLyogOCAqLwogfTsKIAorc3RydWN0IHptY3BfaW5mbyB7CisJdW5zaWduZWQgaW5mb19sZW47CisJdW5zaWduZWQgem1jcF9hZGRyOworCXVuc2lnbmVkIHptY3BfbGVuOworCXVuc2lnbmVkIG1jcF9lZGF0YTsKK307CisKICNlbmRpZgkJCQkvKiBfX01ZUkkxMEdFX01DUF9HRU5fSEVBREVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCA4OTllZDA2Li4wODUzNGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYworKysgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAJc3dpdGNoIChldGgtPmhfcHJvdG8pCiAJewogI2lmZGVmIENPTkZJR19JTkVUCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKICAJCXJldHVybiBhcnBfZmluZChldGgtPmhfZGVzdCwgc2tiKTsKICNlbmRpZgogCkBAIC04OTYsNiArODk2LDE3IEBACiAJLmNhY2hlX3VwZGF0ZQk9IG15cmlfaGVhZGVyX2NhY2hlX3VwZGF0ZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXlyaV9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG15cmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gbXlyaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXlyaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbXlyaV9zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBteXJpX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG15cmlfc2J1c19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5ub2RlOwpAQCAtMTA0OCwxMyArMTA1OSw5IEBACiAJc2J1c193cml0ZWwoKDEgPDwgaSksIG1wLT5jcmVncyArIE1ZUklDVFJMX0lSUUxWTCk7CiAKIAltcC0+ZGV2ID0gZGV2OwotCWRldi0+b3BlbiA9ICZteXJpX29wZW47Ci0JZGV2LT5zdG9wID0gJm15cmlfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXlyaV9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZteXJpX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbXlyaV9zZXRfbXVsdGljYXN0OwogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CisJZGV2LT5uZXRkZXZfb3BzID0gJm15cmlfb3BzOwogCiAJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgbm93LiAqLwogCURFVCgoIlJlcXVlc3RpbmcgTVlSSWNvbSBJUlEgbGluZS5cbiIpKTsKQEAgLTEwNjUsNyArMTA3Miw2IEBACiAJfQogCiAJZGV2LT5tdHUJCT0gTVlSSU5FVF9NVFU7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dTsKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJm15cmlfaGVhZGVyX29wczsKIAogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gKEVUSF9ITEVOICsgTVlSSV9QQURfTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCBjNWRlYzU0Li5jOWJmZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0xMjcsNyArMTI3LDcgQEAKICNkZWZpbmUgTkFUU0VNSV9SWF9MSU1JVAkyMDQ2CS8qIG1heGltdW0gc3VwcG9ydGVkIGJ5IGhhcmR3YXJlICovCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogICBLRVJOX0lORk8gRFJWX05BTUUgIiBkcDgzODF4IGRyaXZlciwgdmVyc2lvbiAiCiAgICAgICBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICJcbiIKICAgS0VSTl9JTkZPICIgIG9yaWdpbmFsbHkgYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKQEAgLTIxOTgsMTAgKzIxOTgsMTAgQEAKIAogCXByZWZldGNoKCZucC0+cnhfc2tidWZmW25wLT5jdXJfcnggJSBSWF9SSU5HX1NJWkVdKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpIHsKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWdpc3RlciBmb3IgcG9sbCAqLwogCQluYXRzZW1pX2lycV9kaXNhYmxlKGRldik7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkgICAgICAgCSAgICAgICAiJXM6IElnbm9yaW5nIGludGVycnVwdCwgc3RhdHVzICUjMDh4LCBtYXNrICUjMDh4LlxuIiwKQEAgLTIyNTMsNyArMjI1Myw3IEBACiAJCW5wLT5pbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOwogCX0gd2hpbGUgKG5wLT5pbnRyX3N0YXR1cyk7CiAKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyogUmVlbmFibGUgaW50ZXJydXB0cyBwcm92aWRpbmcgbm90aGluZyBpcyB0cnlpbmcgdG8gc2h1dAogCSAqIHRoZSBjaGlwIGRvd24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBmMDkwZDNiLi5lYjY2ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTYyLDggKzYyLDkgQEAKICNpbmNsdWRlICI4MzkwLmgiCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiIEQuIEJlY2tlci9QLiBHb3J0bWFrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBELiBCZWNrZXIvUC4gR29ydG1ha2VyXG4iOwogCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKICNkZWZpbmUgaW5sX2xlKGFkZHIpICBsZTMyX3RvX2NwdShpbmwoYWRkcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKaW5kZXggOGU3YzRjOS4uY2YwMWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDExICsyMSwxMCBAQAogIyAKICMgQ29udGFjdCBJbmZvcm1hdGlvbjoKICMgICAgaW5mb0BuZXR4ZW4uY29tCi0jIE5ldFhlbiwKLSMgMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotIyBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyMgTmV0WGVuIEluYywKKyMgMTg5MjIgRm9yZ2UgRHJpdmUKKyMgQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAjCi0jIE1ha2VmaWxlIGZvciB0aGUgTmV0WGVuIE5JQyBEcml2ZXIKICMKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCAxZmYwNjZiLi5jNDA4MTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9ORVRYRU5fTklDX0hfCkBAIC02NSw4ICs2Niw4IEBACiAKICNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUFKT1IgNAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiAwCi0jZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMTEKLSNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMTEiCisjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMzAKKyNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMzAiCiAKICNkZWZpbmUgTkVUWEVOX1ZFUlNJT05fQ09ERShhLCBiLCBjKQkoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQogCkBAIC03NywxOSArNzgsMTkgQEAKIAogI2RlZmluZSBQSEFOX1ZFTkRPUl9JRCAweDQwNDAKIAotI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFCVwKLQkoc2l6ZW9mKHN0cnVjdCBzdGF0dXNfZGVzYykqIGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KQotI2RlZmluZSBMUk9fREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihyY3ZEZXNjX3QpICogYWRhcHRlci0+bWF4X2xyb19yeF9kZXNjX2NvdW50KQotI2RlZmluZSBUWF9SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIpICogYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFJDVl9CVUZGU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpCisjZGVmaW5lIFJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogKHJkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bnVtX2Rlc2MpCisjZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3Qgc3RhdHVzX2Rlc2MpICogKHNkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyKSAqIGFkYXB0ZXItPm51bV90eGQpCisjZGVmaW5lIFRYX0RFU0NfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqIGFkYXB0ZXItPm51bV90eGQpCisKICNkZWZpbmUgZmluZF9kaWZmX2Ftb25nKGEsYixyYW5nZSkgKChhKTwoYik/KChiKS0oYSkpOigoYikrKHJhbmdlKS0oYSkpKQogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfU1RBVFVTCQkweDEKICNkZWZpbmUgTkVUWEVOX1JDVl9QUk9EVUNFUl9PRkZTRVQJMAogI2RlZmluZSBORVRYRU5fUkNWX1BFR19EQl9JRAkJMgogI2RlZmluZSBORVRYRU5fSE9TVF9EVU1NWV9ETUFfU0laRSAxMDI0CkBAIC0xODgsMjIgKzE4OSwxMiBAQAogLyogSG9zdCB3cml0ZXMgdGhlIGZvbGxvd2luZyB0byBub3RpZnkgdGhhdCBpdCBoYXMgZG9uZSB0aGUgaW5pdC1oYW5kc2hha2UgKi8KICNkZWZpbmUgUEhBTl9JTklUSUFMSVpFX0FDSwkweGYwMGYKIAotI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMwkvKiBObyBvZiBSY3YgRGVzY3JpcHRvciBjb250ZXh0cyAqLworI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMworI2RlZmluZSBOVU1fU1RTX0RFU0NfUklOR1MJNAogCi0vKiBkZXNjcmlwdG9yIHR5cGVzICovCi0jZGVmaW5lIFJDVl9ERVNDX05PUk1BTAkJMHgwMQotI2RlZmluZSBSQ1ZfREVTQ19KVU1CTwkJMHgwMgotI2RlZmluZSBSQ1ZfREVTQ19MUk8JCTB4MDQKLSNkZWZpbmUgUkNWX0RFU0NfTk9STUFMX0NUWElECTAKLSNkZWZpbmUgUkNWX0RFU0NfSlVNQk9fQ1RYSUQJMQotI2RlZmluZSBSQ1ZfREVTQ19MUk9fQ1RYSUQJMgotCi0jZGVmaW5lIFJDVl9ERVNDX1RZUEUoSUQpIFwKLQkoKElEID09IFJDVl9ERVNDX0pVTUJPX0NUWElEKQlcCi0JCT8gUkNWX0RFU0NfSlVNQk8JXAotCQk6ICgoSUQgPT0gUkNWX0RFU0NfTFJPX0NUWElEKQlcCi0JCQk/IFJDVl9ERVNDX0xSTyA6CVwKLQkJCShSQ1ZfREVTQ19OT1JNQUwpKSkKKyNkZWZpbmUgUkNWX1JJTkdfTk9STUFMCTAKKyNkZWZpbmUgUkNWX1JJTkdfSlVNQk8JMQorI2RlZmluZSBSQ1ZfUklOR19MUk8JMgogCiAjZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlMJCTQwOTYKICNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SUwkJMTYzODQKQEAgLTM1NywxMCArMzQ4LDcgQEAKIAkJX19sZTY0IGFkZHJfYnVmZmVyMTsKIAl9OwogCi0JX19sZTE2IGJ1ZmZlcjFfbGVuZ3RoOwotCV9fbGUxNiBidWZmZXIyX2xlbmd0aDsKLQlfX2xlMTYgYnVmZmVyM19sZW5ndGg7Ci0JX19sZTE2IGJ1ZmZlcjRfbGVuZ3RoOworCV9fbGUxNiBidWZmZXJfbGVuZ3RoWzRdOwogCiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtMzkxLDExICszNzksOCBAQAogI2RlZmluZSBTVEFUVVNfQ0tTVU1fT0sJCSgyKQogCiAvKiBvd25lciBiaXRzIG9mIHN0YXR1c19kZXNjICovCi0jZGVmaW5lIFNUQVRVU19PV05FUl9IT1NUCSgweDEpCi0jZGVmaW5lIFNUQVRVU19PV05FUl9QSEFOVE9NCSgweDIpCi0KLSNkZWZpbmUgTkVUWEVOX1BST1RfSVAJCSgxKQotI2RlZmluZSBORVRYRU5fUFJPVF9VTktOT1dOCSgwKQorI2RlZmluZSBTVEFUVVNfT1dORVJfSE9TVAkoMHgxVUxMIDw8IDU2KQorI2RlZmluZSBTVEFUVVNfT1dORVJfUEhBTlRPTQkoMHgyVUxMIDw8IDU2KQogCiAvKiBOb3RlOiBzaXplb2Yoc3RhdHVzX2Rlc2MpIHNob3VsZCBhbHdheXMgYmUgYSBtdXRsaXBsZSBvZiAyICovCiAKQEAgLTQyMSwxNSArNDA2LDYgQEAKICNkZWZpbmUgbmV0eGVuX2dldF9zdHNfb3Bjb2RlKHN0c19kYXRhKQlcCiAJKCgoc3RzX2RhdGEpID4+IDU4KSAmIDB4MDNGKQogCi0jZGVmaW5lIG5ldHhlbl9nZXRfc3RzX293bmVyKHN0YXR1c19kZXNjKQlcCi0JKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiA1NikgJiAweDAzKQotI2RlZmluZSBuZXR4ZW5fc2V0X3N0c19vd25lcihzdGF0dXNfZGVzYywgdmFsKQl7IFwKLQkoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhID0gXAotCQkoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSAmIFwKLQkJfmNwdV90b19sZTY0KDB4M1VMTCA8PCA1NikpIHwgXAotCQljcHVfdG9fbGU2NCgodTY0KSgodmFsKSAmIDB4MykgPDwgNTYpOyBcCi19Ci0KIHN0cnVjdCBzdGF0dXNfZGVzYyB7CiAJLyogQml0IHBhdHRlcm46IDAtMyBwb3J0LCA0LTcgc3RhdHVzLCA4LTExIHR5cGUsIDEyLTI3IHRvdGFsX2xlbmd0aAogCSAgIDI4LTQzIHJlZmVyZW5jZV9oYW5kbGUsIDQ0LTQ3IHByb3RvY29sLCA0OC01MiBwa3Rfb2Zmc2V0CkBAIC03MTIsNiArNjg4LDE1IEBACiAJTkVUWEVOX0ZJWEVEX1NUQVJUID0gMHgzRjAwMDAJLyogYmFja3VwIG9mIGNyYmluaXQgKi8KIH0gbmV0eGVuX2ZsYXNoX21hcF90OwogCisjZGVmaW5lIE5YX0ZXX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDQwOCkKKyNkZWZpbmUgTlhfRldfU0laRV9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4NDBjKQorI2RlZmluZSBOWF9CSU9TX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDgzYykKKyNkZWZpbmUgTlhfRldfTUFHSUNfT0ZGU0VUCShORVRYRU5fQlJEQ0ZHX1NUQVJUKzB4MTI4KQorI2RlZmluZSBOWF9GV19NSU5fU0laRQkJKDB4M2ZmZmZmKQorI2RlZmluZSBOWF9QMl9NTl9ST01JTUFHRQkwCisjZGVmaW5lIE5YX1AzX0NUX1JPTUlNQUdFCTEKKyNkZWZpbmUgTlhfUDNfTU5fUk9NSU1BR0UJMgorCiAjZGVmaW5lIE5FVFhFTl9VU0VSX1NUQVJUX09MRCBORVRYRU5fUFhFX1NUQVJUCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAKICNkZWZpbmUgTkVUWEVOX0ZMQVNIX1NUQVJUCQkoTkVUWEVOX0NSQklOSVRfU1RBUlQpCkBAIC03MzksNyArNzI0LDcgQEAKICNlbmRpZgogCiAvKiBOdW1iZXIgb2Ygc3RhdHVzIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBwZXIgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSgxMjgpCisjZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSg2NCkKIAogLyoKICAqIG5ldHhlbl9za2JfZnJhZ3t9IGlzIHRvIGNvbnRhaW4gbWFwcGluZyBpbmZvIGZvciBlYWNoIFNHIGxpc3QuIFRoaXMKQEAgLTc4Myw5ICs3NjgsNiBAQAogCXU2NCBkbWE7CiAJdTE2IHJlZl9oYW5kbGU7CiAJdTE2IHN0YXRlOwotCXUzMiBscm9fZXhwZWN0ZWRfZnJhZ3M7Ci0JdTMyIGxyb19jdXJyZW50X2ZyYWdzOwotCXUzMiBscm9fbGVuZ3RoOwogfTsKIAogLyogQm9hcmQgdHlwZXMgKi8KQEAgLTgwMCwyMSArNzgyLDE5IEBACiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTA7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTE7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTI7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9wYWdlX2dyb3VwX2VuZDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQ7CiAJdm9pZCBfX2lvbWVtICpkYl9iYXNlOwogCXVuc2lnbmVkIGxvbmcgZGJfbGVuOwogCXVuc2lnbmVkIGxvbmcgcGNpX2xlbjA7CiAKLQl1OCBjdXRfdGhyb3VnaDsKIAlpbnQgcWRyX3NuX3dpbmRvdzsKIAlpbnQgZGRyX21uX3dpbmRvdzsKIAl1bnNpZ25lZCBsb25nIG1uX3dpbl9jcmI7CiAJdW5zaWduZWQgbG9uZyBtc193aW5fY3JiOwogCisJdTggY3V0X3Rocm91Z2g7CiAJdTggcmV2aXNpb25faWQ7Ci0JdTE2IGJvYXJkX3R5cGU7Ci0Jc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvIGJvYXJkY2ZnOworCXUxNiBwb3J0X3R5cGU7CisJaW50IGJvYXJkX3R5cGU7CiAJdTMyIGxpbmt1cDsKIAkvKiBBZGRyZXNzIG9mIGNtZCByaW5nIGluIFBoYW50b20gKi8KIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmNtZF9kZXNjX2hlYWQ7CkBAIC04MjMsOCArODAzLDYgQEAKIAlpbnQgcGNpX2Z1bmM7CiB9OwogCi0jZGVmaW5lIFJDVl9SSU5HX0xSTwlSQ1ZfREVTQ19MUk8KLQogI2RlZmluZSBNSU5JTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUJNjQJLyogV2l0aCBGQ1MgKi8KICNkZWZpbmUgRVRIRVJORVRfRkNTX1NJWkUJCTQKIApAQCAtODUwLDE2ICs4MjgsMzYgQEAKICAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCiAgKi8KIHN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHsKLQl1MzIgZmxhZ3M7CiAJdTMyIHByb2R1Y2VyOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOwkvKiByZWcgb2Zmc2V0ICovCi0Jc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CS8qIGFkZHJlc3Mgb2YgcnggcmluZyBpbiBQaGFudG9tICovCi0JdTMyIG1heF9yeF9kZXNjX2NvdW50OworCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOworCXUzMiBudW1fZGVzYzsKIAl1MzIgZG1hX3NpemU7CiAJdTMyIHNrYl9zaXplOwotCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWZfYXJyOwkvKiByeCBidWZmZXJzIGZvciByZWNlaXZlICAgKi8KKwl1MzIgZmxhZ3M7CisJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworfTsKKworc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgeworCXUzMiBjb25zdW1lcjsKKwl1MzIgY3JiX3N0c19jb25zdW1lcjsKKwl1MzIgY3JiX2ludHJfbWFzazsKKwl1MzIgbnVtX2Rlc2M7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3RbTlVNX1JDVl9ERVNDX1JJTkdTXTsKKworCXUxNiBjbGVhbl90eDsKKwl1MTYgcG9zdF9yeGQ7CisJaW50IGlycTsKKworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWNoYXIgbmFtZVtJRk5BTVNJWis0XTsKIH07CiAKIC8qCkBAIC04NzQsMTAgKzg3Miw3IEBACiAJdTE2IHZpcnRfcG9ydDsKIAogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHJkc19yaW5nc1tOVU1fUkNWX0RFU0NfUklOR1NdOwotCXUzMiBzdGF0dXNfcnhfY29uc3VtZXI7Ci0JdTMyIGNyYl9zdHNfY29uc3VtZXI7CS8qIHJlZyBvZmZzZXQgKi8KLQlkbWFfYWRkcl90IHJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHI7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpyY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyBzZHNfcmluZ3NbTlVNX1NUU19ERVNDX1JJTkdTXTsKIH07CiAKIC8qIE5ldyBIVyBjb250ZXh0IGNyZWF0aW9uICovCkBAIC0xMjAzLDEzICsxMTk4LDEzIEBACiAjZGVmaW5lIE5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpIFwKIAkoKGFkYXB0ZXIpLT5mbGFncyAmIChORVRYRU5fTklDX01TSV9FTkFCTEVEIHwgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpKQogCi0jZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUgkxCisjZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUglOVU1fU1RTX0RFU0NfUklOR1MKICNkZWZpbmUgTkVUWEVOX01TSVhfVEJMX1NQQUNFCQk4MTkyCiAjZGVmaW5lIE5FVFhFTl9QQ0lfUkVHX01TSVhfVEJMCQkweDQ0CiAKICNkZWZpbmUgTkVUWEVOX0RCX01BUFNJWkVfQllURVMgICAgCTB4MTAwMAogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfV0VJR0hUIDEyMAorI2RlZmluZSBORVRYRU5fTkVUREVWX1dFSUdIVCAxMjgKICNkZWZpbmUgTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMgNzc3CiAjZGVmaW5lIE5FVFhFTl9OSUNfUEVHX1RVTkUgMAogCkBAIC0xMjI0LDcgKzEyMTksNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IHBjaV91c2luZ19kYWM7Ci0Jc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOwogCWludCBtdHU7CiAJaW50IHBvcnRudW07CkBAIC0xMjM2LDcgKzEyMzAsNiBAQAogCW54X21hY19saXN0X3QJKm1hY19saXN0OwogCiAJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHI7Ci0JdTMyCWNyYl9pbnRyX21hc2s7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKQEAgLTEyNDYsMjAgKzEyMzksMjAgQEAKIAl1MzIgY3JiX3dpbjsKIAlyd2xvY2tfdCBhZGFwdGVyX2xvY2s7CiAKLQl1aW50NjRfdCBkbWFfbWFzazsKLQogCXUzMiBjbWRfcHJvZHVjZXI7CiAJX19sZTMyICpjbWRfY29uc3VtZXI7CiAJdTMyIGxhc3RfY21kX2NvbnN1bWVyOwogCXUzMiBjcmJfYWRkcl9jbWRfcHJvZHVjZXI7CiAJdTMyIGNyYl9hZGRyX2NtZF9jb25zdW1lcjsKKwlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7CiAKLQl1MzIgbWF4X3R4X2Rlc2NfY291bnQ7Ci0JdTMyIG1heF9yeF9kZXNjX2NvdW50OwotCXUzMiBtYXhfanVtYm9fcnhfZGVzY19jb3VudDsKLQl1MzIgbWF4X2xyb19yeF9kZXNjX2NvdW50OworCXUzMiBudW1fdHhkOworCXUzMiBudW1fcnhkOworCXUzMiBudW1fanVtYm9fcnhkOworCXUzMiBudW1fbHJvX3J4ZDsKIAogCWludCBtYXhfcmRzX3JpbmdzOworCWludCBtYXhfc2RzX3JpbmdzOwogCiAJdTMyIGZsYWdzOwogCXUzMiBpcnE7CkBAIC0xMjY3LDkgKzEyNjAsOSBAQAogCXUzMiB0ZW1wOwogCiAJdTMyIGZ3X21ham9yOworCXUzMiBmd192ZXJzaW9uOwogCi0JdTggbXNpeF9zdXBwb3J0ZWQ7Ci0JdTggbWF4X3Bvc3NpYmxlX3Jzc19yaW5nczsKKwlpbnQgbXNpeF9zdXBwb3J0ZWQ7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW01TSVhfRU5UUklFU19QRVJfQURBUFRFUl07CiAKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CkBAIC0xMjc5LDcgKzEyNzIsNiBAQAogCXUxNiBzdGF0ZTsKIAl1MTYgbGlua19hdXRvbmVnOwogCWludCByeF9jc3VtOwotCWludCBzdGF0dXM7CiAKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOwkvKiBDb21tYW5kIGJ1ZmZlcnMgZm9yIHhtaXQgKi8KIApAQCAtMTI4Nyw3ICsxMjc5LDcgQEAKIAkgKiBSZWNlaXZlIGluc3RhbmNlcy4gVGhlc2UgY2FuIGJlIGVpdGhlciBvbmUgcGVyIHBvcnQsCiAJICogb3Igb25lIHBlciBwZWcsIGV0Yy4KIAkgKi8KLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eFtNQVhfUkNWX0NUWF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgcmVjdl9jdHg7CiAKIAlpbnQgaXNfdXA7CiAJc3RydWN0IG5ldHhlbl9kdW1teV9kbWEgZHVtbXlfZG1hOwpAQCAtMTM5OCw2ICsxMzkwLDggQEAKIHZvaWQgbmV0eGVuX25pY19yZWFkX3cxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKnZhbHVlKTsKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBpbnQgbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pOwpAQCAtMTQ3MSwxNSArMTQ2NSwxNiBAQAogaW50IG5ldHhlbl9pbml0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjdHgsCi0JCQkgICAgdTMyIHJpbmdpZCk7Cit2b2lkIG5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogaW50IG5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci11MzIgbmV0eGVuX3Byb2Nlc3NfcmN2X3Jpbmcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgY3R4LCBpbnQgbWF4KTsKK2ludCBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpOwogdm9pZCBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmV0eGVuX3AzX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIG5ldHhlbl9wM19mcmVlX21hY19saXN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX3AzX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMik7CiBpbnQgbmV0eGVuX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX2NvbmZpZ19yc3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKIAogaW50IG54X2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSk7CiBpbnQgbmV0eGVuX25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKaW5kZXggNzQ2YmRiNC4uOTIzNDQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOCBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTE0MSw3ICsxNDEsNyBAQAogbnhfZndfY21kX3NldF9tdHUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbXR1KQogewogCXUzMiByY29kZSA9IE5YX1JDT0RFX1NVQ0NFU1M7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4WzBdOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChyZWN2X2N0eC0+c3RhdGUgPT0gTlhfSE9TVF9DVFhfU1RBVEVfQUNUSVZFKQogCQlyY29kZSA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKQEAgLTE2OSw2ICsxNjksNyBAQAogCW54X2NhcmRyc3BfcmRzX3JpbmdfdCAqcHJzcF9yZHM7CiAJbnhfY2FyZHJzcF9zZHNfcmluZ190ICpwcnNwX3NkczsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwogCiAJZG1hX2FkZHJfdCBob3N0cnFfcGh5c19hZGRyLCBjYXJkcnNwX3BoeXNfYWRkcjsKIAl1NjQgcGh5c19hZGRyOwpAQCAtMTc5LDExICsxODAsMTAgQEAKIAogCWludCBlcnI7CiAKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbMF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCi0JLyogb25seSBvbmUgc2RzIHJpbmcgZm9yIG5vdyAqLwogCW5yZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOwotCW5zZHNfcmluZ3MgPSAxOworCW5zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOwogCiAJcnFfc2l6ZSA9CiAJCVNJWkVPRl9IT1NUUlFfUlgobnhfaG9zdHJxX3J4X2N0eF90LCBucmRzX3JpbmdzLCBuc2RzX3JpbmdzKTsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW2ldOwogCiAJCXBycV9yZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJcHJxX3Jkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlwcnFfcmRzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5udW1fZGVzYyk7CiAJCXBycV9yZHNbaV0ucmluZ19raW5kID0gY3B1X3RvX2xlMzIoaSk7CiAJCXBycV9yZHNbaV0uYnVmZl9zaXplID0gY3B1X3RvX2xlNjQocmRzX3JpbmctPmRtYV9zaXplKTsKIAl9CkBAIC0yMzksMTEgKzIzOSwxNCBAQAogCXBycV9zZHMgPSAobnhfaG9zdHJxX3Nkc19yaW5nX3QgKikocHJxLT5kYXRhICsKIAkJCWxlMzJfdG9fY3B1KHBycS0+c2RzX3Jpbmdfb2Zmc2V0KSk7CiAKLQlwcnFfc2RzWzBdLmhvc3RfcGh5c19hZGRyID0KLQkJY3B1X3RvX2xlNjQocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOwotCXBycV9zZHNbMF0ucmluZ19zaXplID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwotCS8qIG9ubHkgb25lIG1zaXggdmVjdG9yIGZvciBub3cgKi8KLQlwcnFfc2RzWzBdLm1zaV9pbmRleCA9IGNwdV90b19sZTE2KDApOworCWZvciAoaSA9IDA7IGkgPCBuc2RzX3JpbmdzOyBpKyspIHsKKworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW2ldOworCisJCXBycV9zZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJcHJxX3Nkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihzZHNfcmluZy0+bnVtX2Rlc2MpOworCQlwcnFfc2RzW2ldLm1zaV9pbmRleCA9IGNwdV90b19sZTE2KGkpOworCX0KIAogCXBoeXNfYWRkciA9IGhvc3RycV9waHlzX2FkZHI7CiAJZXJyID0gbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLApAQCAtMjcyLDExICsyNzUsMTYgQEAKIAogCXByc3Bfc2RzID0gKChueF9jYXJkcnNwX3Nkc19yaW5nX3QgKikKIAkJCSZwcnNwLT5kYXRhW2xlMzJfdG9fY3B1KHByc3AtPnNkc19yaW5nX29mZnNldCldKTsKLQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1swXS5ob3N0X2NvbnN1bWVyX2NyYik7Ci0JcmVjdl9jdHgtPmNyYl9zdHNfY29uc3VtZXIgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CiAKLQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1swXS5pbnRlcnJ1cHRfY3JiKTsKLQlhZGFwdGVyLT5jcmJfaW50cl9tYXNrID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwcnNwLT5udW1fc2RzX3JpbmdzKTsgaSsrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbaV07CisKKwkJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbaV0uaG9zdF9jb25zdW1lcl9jcmIpOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKworCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5pbnRlcnJ1cHRfY3JiKTsKKwkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisJfQogCiAJcmVjdl9jdHgtPnN0YXRlID0gbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOwogCXJlY3ZfY3R4LT5jb250ZXh0X2lkID0gbGUxNl90b19jcHUocHJzcC0+Y29udGV4dF9pZCk7CkBAIC0yOTIsNyArMzAwLDcgQEAKIHN0YXRpYyB2b2lkCiBueF9md19jbWRfZGVzdHJveV9yeF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFswXTsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlpZiAobmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLAogCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLApAQCAtMzYyLDcgKzM3MCw3IEBACiAJcHJxX2Nkcy0+aG9zdF9waHlzX2FkZHIgPQogCQljcHVfdG9fbGU2NChhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAotCXBycV9jZHMtPnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwlwcnFfY2RzLT5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT5udW1fdHhkKTsKIAogCXBoeXNfYWRkciA9IHJxX3BoeXNfYWRkcjsKIAllcnIgPSBuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCkBAIC00ODgsMzAgKzQ5NiwyOCBAQAogewogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7Ci0JaW50IGN0eCwgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IHJpbmc7CiAJaW50IGZ1bmNfaWQgPSBhZGFwdGVyLT5wb3J0bnVtOwogCiAJYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9yaW5nX2FkZHIgPQogCQljcHVfdG9fbGU2NChhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAlhZGFwdGVyLT5jdHhfZGVzYy0+Y21kX3Jpbmdfc2l6ZSA9Ci0JCWNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwkJY3B1X3RvX2xlMzIoYWRhcHRlci0+bnVtX3R4ZCk7CiAKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCi0JCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCi0JCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19hZGRyID0KLQkJCQljcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQotCQkJCWNwdV90b19sZTMyKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7Ci0JCX0KLQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX2FkZHIgPQotCQkJY3B1X3RvX2xlNjQocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOwotCQlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3Jpbmdfc2l6ZSA9Ci0JCQljcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX2FkZHIgPQorCQkJY3B1X3RvX2xlNjQocmRzX3JpbmctPnBoeXNfYWRkcik7CisJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQorCQkJY3B1X3RvX2xlMzIocmRzX3JpbmctPm51bV9kZXNjKTsKIAl9CisJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1swXTsKKwlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3JpbmdfYWRkciA9IGNwdV90b19sZTY0KHNkc19yaW5nLT5waHlzX2FkZHIpOworCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19zaXplID0gY3B1X3RvX2xlMzIoc2RzX3JpbmctPm51bV9kZXNjKTsKIAogCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0NUWF9BRERSX1JFR19MTyhmdW5jX2lkKSwKIAkJCWxvd2VyMzIoYWRhcHRlci0+Y3R4X2Rlc2NfcGh5c19hZGRyKSk7CkBAIC01MzMsOSArNTM5LDEzIEBACiAJdTMyIHN0YXRlID0gMDsKIAl2b2lkICphZGRyOwogCWludCBlcnIgPSAwOwotCWludCBjdHgsIHJpbmc7CisJaW50IHJpbmc7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCWVyciA9IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CkBAIC01NDQsMTIgKzU1NCwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpICsgc2l6ZW9mKHVpbnQzMl90KSwKIAkJCSZhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewotCQlEUFJJTlRLKEVSUiwgImZhaWxlZCB0byBhbGxvY2F0ZSBodyBjb250ZXh0XG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGh3IGNvbnRleHRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4KSk7CkBAIC01NjIsNjEgKzU3Miw1NyBAQAogCQkoX19sZTMyICopKCgoY2hhciAqKWFkZHIpICsgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKIAogCS8qIGNtZCBkZXNjIHJpbmcgKi8KLQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCXNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICoKLQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50LAorCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAorCQkJVFhfREVTQ19SSU5HU0laRShhZGFwdGVyKSwKIAkJCSZody0+Y21kX2Rlc2NfcGh5c19hZGRyKTsKIAogCWlmIChhZGRyID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzYyByaW5nXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2MgcmluZ1xuIiwKKwkJCQluZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlody0+Y21kX2Rlc2NfaGVhZCA9IChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKilhZGRyOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQkvKiByeCBkZXNjIHJpbmcgKi8KLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107Ci0JCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQkJUkNWX0RFU0NfUklOR1NJWkUsCi0JCQkJCSZyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJCWlmIChhZGRyID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCB0byBhbGxvY2F0ZSByeCAiCi0JCQkJCSJkZXNjIHJpbmdbJWRdXG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCByaW5nKTsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyX291dF9mcmVlOwotCQkJfQotCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3QgcmN2X2Rlc2MgKilhZGRyOwotCi0JCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0KLQkJCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW2FkYXB0ZXItPnBvcnRudW1dLgotCQkJCQljcmJfcmN2X3Byb2R1Y2VyW3JpbmddOwotCQl9Ci0KLQkJLyogc3RhdHVzIGRlc2MgcmluZyAqLworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUsCi0JCQkJJnJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKKwkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCisJCQkJJnJkc19yaW5nLT5waHlzX2FkZHIpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCB0byBhbGxvY2F0ZSBzdHMgZGVzYyByaW5nXG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByZHMgcmluZyBbJWRdXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0X2ZyZWU7CiAJCX0KLQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7CisJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKIAogCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJcmVjdl9jdHgtPmNyYl9zdHNfY29uc3VtZXIgPQorCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIgPQogCQkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS4KLQkJCQljcmJfc3RzX2NvbnN1bWVyOworCQkJCWNyYl9yY3ZfcHJvZHVjZXJbcmluZ107CiAJfQogCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCisJCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKKwkJCQkmc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCWlmIChhZGRyID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBzZHMgcmluZyBbJWRdXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKilhZGRyOworCX0KKworCiAJaWYgKGFkYXB0ZXItPmZ3X21ham9yID49IDQpIHsKIAkJYWRhcHRlci0+aW50cl9zY2hlbWUgPSBJTlRSX1NDSEVNRV9QRVJQT1JUOwogCQlhZGFwdGVyLT5tc2lfbW9kZSA9IE1TSV9NT0RFX01VTFRJRlVOQzsKQEAgLTYyOCwxMiArNjM0LDE2IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9IGVsc2UgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzWzBdOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9CisJCQlyZWN2X2NyYl9yZWdpc3RlcnNbYWRhcHRlci0+cG9ydG51bV0uY3JiX3N0c19jb25zdW1lcjsKIAogCQlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAogCQkJCUNSQl9OSUNfQ0FQQUJJTElUSUVTX0ZXKTsKIAkJYWRhcHRlci0+bXNpX21vZGUgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKIAkJCQlDUkJfTklDX01TSV9NT0RFX0ZXKTsKLQkJYWRhcHRlci0+Y3JiX2ludHJfbWFzayA9IHN3X2ludF9tYXNrW2FkYXB0ZXItPnBvcnRudW1dOworCQlyZWN2X2N0eC0+c2RzX3JpbmdzWzBdLmNyYl9pbnRyX21hc2sgPQorCQkJCXN3X2ludF9tYXNrW2FkYXB0ZXItPnBvcnRudW1dOwogCiAJCWVyciA9IG5ldHhlbl9pbml0X29sZF9jdHgoYWRhcHRlcik7CiAJCWlmIChlcnIpIHsKQEAgLTY1NCw3ICs2NjQsOCBAQAogewogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7Ci0JaW50IGN0eCwgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IHJpbmc7CiAKIAlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPj0gNCkgewogCQlueF9md19jbWRfZGVzdHJveV90eF9jdHgoYWRhcHRlcik7CkBAIC02NzMsMzIgKzY4NCwzNCBAQAogCWlmIChhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCAhPSBOVUxMKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQlzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqCi0JCQkJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQsCisJCQkJYWRhcHRlci0+bnVtX3R4ZCwKIAkJCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCwKIAkJCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAkJYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQgPSBOVUxMOwogCX0KIAotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eF07Ci0JCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCi0JCQlpZiAocmRzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7Ci0JCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQkJUkNWX0RFU0NfUklOR1NJWkUsCi0JCQkJCQlyZHNfcmluZy0+ZGVzY19oZWFkLAotCQkJCQkJcmRzX3JpbmctPnBoeXNfYWRkcik7Ci0JCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJaWYgKHJkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQlTVEFUVVNfREVTQ19SSU5HU0laRSwKLQkJCQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkLAotCQkJCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcik7Ci0JCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgPSBOVUxMOworCQkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCisJCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQsCisJCQkJCXJkc19yaW5nLT5waHlzX2FkZHIpOworCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CisJCX0KKwl9CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisKKwkJaWYgKHNkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKKwkJCQlzZHNfcmluZy0+ZGVzY19oZWFkLAorCQkJCXNkc19yaW5nLT5waHlzX2FkZHIpOworCQkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggMDg5NGE3Yi4uYTY3N2ZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogZXRodG9vbCBzdXBwb3J0IGZvciBuZXR4ZW4gbmljCisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQogICoKICAqLwogCkBAIC0xMTgsMTAgKzExNSw5IEBACiBuZXR4ZW5fbmljX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbyA9ICZhZGFwdGVyLT5haHcuYm9hcmRjZmc7CiAKIAkvKiByZWFkIHdoaWNoIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CiAJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CiAJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfApAQCAtMTQwLDcgKzEzNiw3IEBACiAJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOwogCi0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCXUzMiB2YWw7CiAKIAkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fUE9SVF9NT0RFX0FERFIsICZ2YWwsIDQpOwpAQCAtMTcyLDcgKzE2OCw3IEBACiAJZWNtZC0+cGh5X2FkZHJlc3MgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAotCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzVfNEc6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzJHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgpAQCAtMTg4LDcgKzE4NCw3IEBACiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CiAJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfVFA7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwotCQllY21kLT5hdXRvbmVnID0gKGJvYXJkaW5mby0+Ym9hcmRfdHlwZSA9PQorCQllY21kLT5hdXRvbmVnID0gKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09CiAJCQkJIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNCkgPwogCQkgICAgKEFVVE9ORUdfRElTQUJMRSkgOiAoYWRhcHRlci0+bGlua19hdXRvbmVnKTsKIAkJYnJlYWs7CkBAIC0yMTUsNyArMjExLDcgQEAKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAkJYnJlYWs7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwkJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfRklCUkUgfCBTVVBQT1JURURfVFApOwogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KQEAgLTIzMSw3ICsyMjcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIm5ldHhlbi1uaWM6IFVuc3VwcG9ydGVkIGJvYXJkIG1vZGVsICVkXG4iLAotCQkgICAgICAgKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSk7CisJCSAgICAgICAobmV0eGVuX2JyZHR5cGVfdClhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQ1LDcgKzI0MSw3IEBACiAJX191MzIgc3RhdHVzOwogCiAJLyogcmVhZCB3aGljaCBtb2RlICovCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJLyogYXV0b25lZ290aWF0aW9uICovCiAJCWlmIChhZGFwdGVyLT5waHlfd3JpdGUKIAkJICAgICYmIGFkYXB0ZXItPnBoeV93cml0ZShhZGFwdGVyLApAQCAtNDMzLDcgKzQyOSw3IEBACiAJaW50IHZhbDsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWlmIChhZGFwdGVyLT5waHlfcmVhZAogCQkgICAgJiYgYWRhcHRlci0+cGh5X3JlYWQoYWRhcHRlciwKIAkJCQkJIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLApAQCAtNDQzLDcgKzQzOSw3IEBACiAJCQl2YWwgPSBuZXR4ZW5fZ2V0X3BoeV9saW5rKHN0YXR1cyk7CiAJCQlyZXR1cm4gIXZhbDsKIAkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgewogCQl2YWwgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX1hHX1NUQVRFKTsKIAkJcmV0dXJuICh2YWwgPT0gWEdfTElOS19VUCkgPyAwIDogMTsKIAl9CkBAIC00NzMsOTUgKzQ2OSwyMCBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotc3RhdGljIGludAotbmV0eGVuX25pY19zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAotCQkJdTggKiBieXRlcykKLXsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBvZmZzZXQgPSBlZXByb20tPm9mZnNldDsKLQlzdGF0aWMgaW50IGZsYXNoX3N0YXJ0OwotCXN0YXRpYyBpbnQgcmVhZHlfdG9fZmxhc2g7Ci0JaW50IHJldDsKLQotCWlmIChmbGFzaF9zdGFydCA9PSAwKSB7Ci0JCW5ldHhlbl9oYWx0X3BlZ3MoYWRhcHRlcik7Ci0JCXJldCA9IG5ldHhlbl9mbGFzaF91bmxvY2soYWRhcHRlcik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbGFzaCB1bmxvY2sgZmFpbGVkLlxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZsYXNoIHVubG9ja2VkLiBcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY29uZGFyeShhZGFwdGVyKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbGFzaCBlcmFzZSBmYWlsZWQuXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogc2Vjb25kYXJ5IGZsYXNoIGVyYXNlZCBzdWNjZXNzZnVsbHkuXG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWZsYXNoX3N0YXJ0ID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKG9mZnNldCA9PSBORVRYRU5fQk9PVExEX1NUQVJUKSB7Ci0JCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9wcmltYXJ5KGFkYXB0ZXIpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZsYXNoIGVyYXNlIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcmV0ID0gbmV0eGVuX3JvbV9zZShhZGFwdGVyLCBORVRYRU5fVVNFUl9TVEFSVCk7Ci0JCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykKLQkJCXJldHVybiByZXQ7Ci0JCXJldCA9IG5ldHhlbl9yb21fc2UoYWRhcHRlciwgTkVUWEVOX0ZJWEVEX1NUQVJUKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQkJcmV0dXJuIHJldDsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogcHJpbWFyeSBmbGFzaCBlcmFzZWQgc3VjY2Vzc2Z1bGx5XG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0KLQkJcmV0ID0gbmV0eGVuX2JhY2t1cF9jcmJpbml0KGFkYXB0ZXIpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENSQmluaXQgYmFja3VwIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDUkJpbml0IGJhY2t1cCBkb25lLlxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQlyZWFkeV90b19mbGFzaCA9IDE7Ci0JfQotCi0JaWYgKCFyZWFkeV90b19mbGFzaCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIHdyaXRlIHNlcXVlbmNlLCByZXR1cm5pbmcuLi5cbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBvZmZzZXQsIGJ5dGVzLCBlZXByb20tPmxlbik7Ci19Ci0jZW5kaWYgLyogMCAqLwotCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwogCiAJcmluZy0+cnhfcGVuZGluZyA9IDA7CiAJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9SQ1ZfQ1RYOyArK2kpIHsKLQkJcmluZy0+cnhfcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eFtpXS4KLQkJICAgIHJkc19yaW5nc1tSQ1ZfREVTQ19OT1JNQUxfQ1RYSURdLm1heF9yeF9kZXNjX2NvdW50OwotCQlyaW5nLT5yeF9qdW1ib19wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4W2ldLgotCQkgICAgcmRzX3JpbmdzW1JDVl9ERVNDX0pVTUJPX0NUWElEXS5tYXhfcnhfZGVzY19jb3VudDsKLQl9Ci0JcmluZy0+dHhfcGVuZGluZyA9IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OworCXJpbmctPnJ4X3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHguCisJCXJkc19yaW5nc1tSQ1ZfUklOR19OT1JNQUxdLm51bV9kZXNjOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHguCisJCXJkc19yaW5nc1tSQ1ZfUklOR19KVU1CT10ubnVtX2Rlc2M7CisJcmluZy0+dHhfcGVuZGluZyA9IGFkYXB0ZXItPm51bV90eGQ7CiAKLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCiAJCXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKIAllbHNlCiAJCXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7CkBAIC01NzksNyArNTAwLDcgQEAKIAlfX3UzMiB2YWw7CiAJaW50IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9HQkVfUE9SVFMpKQogCQkJcmV0dXJuOwogCQkvKiBnZXQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCkBAIC02MDIsNyArNTIzLDcgQEAKIAkJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKG5ldHhlbl9nYl9nZXRfZ2IzX21hc2sodmFsKSk7CiAJCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm47CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CkBAIC02MTMsNyArNTM0LDcgQEAKIAkJCXBhdXNlLT50eF9wYXVzZSA9ICEobmV0eGVuX3hnX2dldF94ZzFfbWFzayh2YWwpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIiJXM6IFVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpOworCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPmFody5wb3J0X3R5cGUpOwogCX0KIH0KIApAQCAtNjI1LDcgKzU0Niw3IEBACiAJX191MzIgdmFsOwogCWludCBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKIAkvKiByZWFkIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJLyogc2V0IGZsb3cgY29udHJvbCAqLwpAQCAtNjY5LDcgKzU5MCw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJbmV0eGVuX25pY193cml0ZV93MChhZGFwdGVyLCBORVRYRU5fTklVX0dCX1BBVVNFX0NUTCwgdmFsKTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdfUEFVU0VfQ1RMLCAmdmFsKTsKQEAgLTY4OCw3ICs2MDksNyBAQAogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCiAJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSk7CisJCQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODEwLDYgKzczMSw1MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB3b2xfY2ZnID0gMDsKKworCXdvbC0+c3VwcG9ydGVkID0gMDsKKwl3b2wtPndvbG9wdHMgPSAwOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybjsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHX05WKTsKKwlpZiAod29sX2NmZyAmICgxVUwgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCXdvbC0+c3VwcG9ydGVkIHw9IFdBS0VfTUFHSUM7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJaWYgKHdvbF9jZmcgJiAoMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKK30KKworc3RhdGljIGludAorbmV0eGVuX25pY19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB3b2xfY2ZnID0gMDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHX05WKTsKKwlpZiAoISh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCXdvbF9jZmcgfD0gMVVMIDw8IGFkYXB0ZXItPnBvcnRudW07CisJZWxzZQorCQl3b2xfY2ZnICY9IH4oMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pOworCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHLCB3b2xfY2ZnKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU2V0IHRoZSBjb2FsZXNjaW5nIHBhcmFtZXRlcnMuIEN1cnJlbnRseSBvbmx5IG5vcm1hbCBpcyBzdXBwb3J0ZWQuCiAgKiBJZiByeF9jb2FsZXNjZV91c2VjcyA9PSAwIG9yIHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID09IDAgdGhlbiBzZXQgdGhlCkBAIC05MDYsOSArODc0LDYgQEAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gPSBuZXR4ZW5fbmljX2dldF9lZXByb20sCi0jaWYgMAotCS5zZXRfZWVwcm9tID0gbmV0eGVuX25pY19zZXRfZWVwcm9tLAotI2VuZGlmCiAJLmdldF9yaW5ncGFyYW0gPSBuZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBuZXR4ZW5fbmljX3NldF9wYXVzZXBhcmFtLApAQCAtOTE2LDYgKzg4MSw4IEBACiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfdHNvID0gbmV0eGVuX25pY19nZXRfdHNvLAogCS5zZXRfdHNvID0gbmV0eGVuX25pY19zZXRfdHNvLAorCS5nZXRfd29sID0gbmV0eGVuX25pY19nZXRfd29sLAorCS5zZXRfd29sID0gbmV0eGVuX25pY19zZXRfd29sLAogCS5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgPSBuZXR4ZW5fbmljX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG5ldHhlbl9uaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IGU4MGY5ZTMuLjAxNmM2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw5ICsyMiwxMCBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKKyAqCiAgKi8KIAogI2lmbmRlZiBfX05FVFhFTl9OSUNfSERSX0hfCkBAIC0zNjIsMTIgKzM2Myw2IEBACiAjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfTFBDCVwKIAkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0xQQ19DUkJfQUdUX0FEUikKIAotLyoKLSAqIE1BWF9SQ1ZfQ1RYIDogVGhlIG51bWJlciBvZiByZWNlaXZlIGNvbnRleHRzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbgotICogdGhlIHBoYW50b20uCi0gKi8KLSNkZWZpbmUgTUFYX1JDVl9DVFgJCQkxCi0KICNkZWZpbmUgTkVUWEVOX1NSRV9JTlRfU1RBVFVTCQkoTkVUWEVOX0NSQl9TUkUgKyAweDAwMDM0KQogI2RlZmluZSBORVRYRU5fU1JFX1BCSV9BQ1RJVkVfU1RBVFVTCShORVRYRU5fQ1JCX1NSRSArIDB4MDEwMTQpCiAjZGVmaW5lIE5FVFhFTl9TUkVfTDFSRV9DVEwJCShORVRYRU5fQ1JCX1NSRSArIDB4MDMwMDApCkBAIC04NTgsNiArODUzLDEyIEBACiAjZGVmaW5lIE5FVFhFTl9QT1JUX01PREVfQUREUgkJKE5FVFhFTl9DQU1fUkFNKDB4MjQpKQogI2RlZmluZSBORVRYRU5fV09MX1BPUlRfTU9ERQkJKE5FVFhFTl9DQU1fUkFNKDB4MTk4KSkKIAorI2RlZmluZSBORVRYRU5fV09MX0NPTkZJR19OVgkJKE5FVFhFTl9DQU1fUkFNKDB4MTg0KSkKKyNkZWZpbmUgTkVUWEVOX1dPTF9DT05GSUcJCShORVRYRU5fQ0FNX1JBTSgweDE4OCkpCisKKyNkZWZpbmUgTlhfUEVHX1RVTkVfTU5fUFJFU0VOVAkJMHgxCisjZGVmaW5lIE5YX1BFR19UVU5FX0NBUEFCSUxJVFkJCShORVRYRU5fQ0FNX1JBTSgweDAyYykpCisKICNkZWZpbmUgTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwJCSgweDE0KQogCiAjZGVmaW5lCUlTUl9NU0lfSU5UX1RSSUdHRVIoRlVOQykgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX01TSV9GKEZVTkMpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCmluZGV4IDdmZWE3NzAuLjUwMjY4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogU291cmNlIGZpbGUgZm9yIE5JQyByb3V0aW5lcyB0byBhY2Nlc3MgdGhlIFBoYW50b20gaGFyZHdhcmUKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTM1LDcgKzMyLDcgQEAKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCiAjaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgogCi0KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCiAjZGVmaW5lIE1BU0sobikgKCgxVUxMPDwobikpLTEpCkBAIC01MTgsNyArNTE1LDcgQEAKIAkJCSZjbWRfZGVzY19hcnJbaV0sIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApKTsKIAogCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLAotCQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwkJCQlhZGFwdGVyLT5udW1fdHhkKTsKIAkJaSsrOwogCiAJfSB3aGlsZSAoaSAhPSBucl9lbGVtZW50cyk7CkBAIC02NzMsNiArNjcwLDUzIEBACiAJcmV0dXJuIHJ2OwogfQogCisjZGVmaW5lIFJTU19IQVNIVFlQRV9JUF9UQ1AJMHgzCisKK2ludCBuZXR4ZW5fY29uZmlnX3JzcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJbnhfbmljX3JlcV90IHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgaSwgcnY7CisKKwl1NjQga2V5W10gPSB7IDB4YmVhYzAxZmE2YTQyYjczYlVMTCwgMHg4MDMwZjIwYzc3Y2IyZGEzVUxMLAorCQkJMHhhZTdiMzBiNGQwY2EyYmNiVUxMLCAweDQzYTM4ZmIwNDE2NzI1M2RVTEwsCisJCQkweDI1NWIwZWMyNmQ1YTU2ZGFVTEwgfTsKKworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihueF9uaWNfcmVxX3QpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gTlhfTklDX0gyQ19PUENPREVfQ09ORklHX1JTUyB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwkvKgorCSAqIFJTUyByZXF1ZXN0OgorCSAqIGJpdHMgMy0wOiBoYXNoX21ldGhvZAorCSAqICAgICAgNS00OiBoYXNoX3R5cGVfaXB2NAorCSAqCTctNjogaGFzaF90eXBlX2lwdjYKKwkgKgkgIDg6IGVuYWJsZQorCSAqICAgICAgICA5OiB1c2UgaW5kaXJlY3Rpb24gdGFibGUKKwkgKiAgICA0Ny0xMDogcmVzZXJ2ZWQKKwkgKiAgICA2My00ODogaW5kaXJlY3Rpb24gdGFibGUgbWFzaworCSAqLworCXdvcmQgPSAgKCh1NjQpKFJTU19IQVNIVFlQRV9JUF9UQ1AgJiAweDMpIDw8IDQpIHwKKwkJKCh1NjQpKFJTU19IQVNIVFlQRV9JUF9UQ1AgJiAweDMpIDw8IDYpIHwKKwkJKCh1NjQpKGVuYWJsZSAmIDB4MSkgPDwgOCkgfAorCQkoKDB4N1VMTCkgPDwgNDgpOworCXJlcS53b3Jkc1swXSA9IGNwdV90b19sZTY0KHdvcmQpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCXJlcS53b3Jkc1tpKzFdID0gY3B1X3RvX2xlNjQoa2V5W2ldKTsKKworCisJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBjb25maWd1cmUgUlNTXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfQorCisJcmV0dXJuIHJ2OworfQorCiAvKgogICogbmV0eGVuX25pY19jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKICAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQpAQCAtNzA5LDkgKzc1Myw4IEBACiBzdGF0aWMgaW50IG5ldHhlbl9nZXRfZmxhc2hfYmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYmFzZSwKIAkJCQkgIGludCBzaXplLCBfX2xlMzIgKiBidWYpCiB7Ci0JaW50IGksIGFkZHI7CisJaW50IGksIHYsIGFkZHI7CiAJX19sZTMyICpwdHIzMjsKLQl1MzIgdjsKIAogCWFkZHIgPSBiYXNlOwogCXB0cjMyID0gYnVmOwpAQCAtOTE0LDEzICs5NTcsMTIgQEAKIAl1MzIgd2luX3JlYWQ7CiAKIAlhZGFwdGVyLT5jcmJfd2luID0gQ1JCX0hJKCpvZmYpOwotCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAodm9pZCAqKShDUkJfV0lORE9XXzJNICsKLQkJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCkpOworCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIENSQl9XSU5ET1dfMk0pKTsKIAkvKgogCSAqIFJlYWQgYmFjayB2YWx1ZSB0byBtYWtlIHN1cmUgd3JpdGUgaGFzIGdvbmUgdGhyb3VnaCBiZWZvcmUgdHJ5aW5nCiAJICogdG8gdXNlIGl0LgogCSAqLwotCXdpbl9yZWFkID0gcmVhZGwoKHZvaWQgKikoQ1JCX1dJTkRPV18yTSArIGFkYXB0ZXItPmFody5wY2lfYmFzZTApKTsKKwl3aW5fcmVhZCA9IHJlYWRsKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfV0lORE9XXzJNKTsKIAlpZiAod2luX3JlYWQgIT0gYWRhcHRlci0+Y3JiX3dpbikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0dGVuIGNyYndpbiAoMHgleCkgIT0gIgogCQkJCSJSZWFkIGNyYndpbiAoMHgleCksIG9mZj0weCVseFxuIiwKQEAgLTkzMCwyNCArOTcyLDY5IEBACiAJCSh1bG9uZylhZGFwdGVyLT5haHcucGNpX2Jhc2UwOwogfQogCi1pbnQgbmV0eGVuX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludAorbmV0eGVuX2RvX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICpmd25hbWUsCisJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0JaW50IGk7Ci0JdTMyIGRhdGEsIHNpemUgPSAwOwotCXUzMiBmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCXU2NCAqcHRyNjQ7CisJdTMyIGksIGZsYXNoYWRkciwgc2l6ZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpLzQ7CisJaWYgKGZ3KQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZpbGUgJXNcbiIsIGZ3bmFtZSk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZsYXNoXG4iKTsKIAogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJTkVUWEVOX1JPTVVTQl9HTEJfQ0FTX1JTVCwgMSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBmbGFzaGFkZHIsIChpbnQgKikmZGF0YSkgIT0gMCkKLQkJCXJldHVybiAtRUlPOworCWlmIChmdykgeworCQlfX2xlNjQgZGF0YTsKIAotCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDQpOwotCQlmbGFzaGFkZHIgKz0gNDsKKwkJc2l6ZSA9IChORVRYRU5fSU1BR0VfU1RBUlQgLSBORVRYRU5fQk9PVExEX1NUQVJUKSAvIDg7CisKKwkJcHRyNjQgPSAodTY0ICopJmZ3LT5kYXRhW05FVFhFTl9CT09UTERfU1RBUlRdOworCQlmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisJCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDgpOworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKworCQlzaXplID0gKih1MzIgKikmZnctPmRhdGFbTlhfRldfU0laRV9PRkZTRVRdOworCQlzaXplID0gKF9fZm9yY2UgdTMyKWNwdV90b19sZTMyKHNpemUpIC8gODsKKworCQlwdHI2NCA9ICh1NjQgKikmZnctPmRhdGFbTkVUWEVOX0lNQUdFX1NUQVJUXTsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0lNQUdFX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA4KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKwl9IGVsc2UgeworCQl1MzIgZGF0YTsKKworCQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpIC8gNDsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0JPT1RMRF9TVEFSVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCQkJZmxhc2hhZGRyLCAoaW50ICopJmRhdGEpICE9IDApCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA0KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDQ7CisJCX0KIAl9CiAJbXNsZWVwKDEpOwogCkBAIC05NjQsMTIgKzEwNTEsMTM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKmZ3bmFtZSwKKwkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlfX2xlMzIgdmFsOworCXUzMiBtYWpvciwgbWlub3IsIGJ1aWxkLCB2ZXIsIG1pbl92ZXIsIGJpb3M7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaWYgKGZ3LT5zaXplIDwgTlhfRldfTUlOX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfRldfTUFHSUNfT0ZGU0VUXSk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gTkVUWEVOX0JESU5GT19NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSZmdy0+ZGF0YVtOWF9GV19WRVJTSU9OX09GRlNFVF0pOworCW1ham9yID0gKF9fZm9yY2UgdTMyKXZhbCAmIDB4ZmY7CisJbWlub3IgPSAoKF9fZm9yY2UgdTMyKXZhbCA+PiA4KSAmIDB4ZmY7CisJYnVpbGQgPSAoX19mb3JjZSB1MzIpdmFsID4+IDE2OworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCW1pbl92ZXIgPSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIxNik7CisJZWxzZQorCQltaW5fdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpOworCisJdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERShtYWpvciwgbWlub3IsIGJ1aWxkKTsKKworCWlmICgobWFqb3IgPiBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUikgfHwgKHZlciA8IG1pbl92ZXIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCisJCQkJZnduYW1lLCBtYWpvciwgbWlub3IsIGJ1aWxkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfQklPU19WRVJTSU9OX09GRlNFVF0pOworCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIE5YX0JJT1NfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmYmlvcyk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gYmlvcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmlybXdhcmUgYmlvcyBpcyBpbmNvbXBhdGlibGVcbiIsCisJCQkJZnduYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgZmxhc2hlZCBmaXJtd2FyZSBpcyBuZXdlciAqLworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmdmFsKSkKKwkJcmV0dXJuIC1FSU87CisJbWFqb3IgPSAoX19mb3JjZSB1MzIpdmFsICYgMHhmZjsKKwltaW5vciA9ICgoX19mb3JjZSB1MzIpdmFsID4+IDgpICYgMHhmZjsKKwlidWlsZCA9IChfX2ZvcmNlIHUzMil2YWwgPj4gMTY7CisJaWYgKE5FVFhFTl9WRVJTSU9OX0NPREUobWFqb3IsIG1pbm9yLCBidWlsZCkgPiB2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX0NBTV9SQU0oMHgxZmMpLAorCQkJTkVUWEVOX0JESU5GT19NQUdJQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpmd19uYW1lW10gPSB7ICJueHJvbWltZy5iaW4iLCAibngzZndjdC5iaW4iLCAibngzZndtbi5iaW4iIH07CisKK2ludCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGNhcGFiaWxpdHksIGZsYXNoZWRfdmVyOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGZ3X3R5cGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCByYyA9IDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlmd190eXBlID0gTlhfUDJfTU5fUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9IGVsc2UgeworCQlmd190eXBlID0gTlhfUDNfQ1RfUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9CisKK3JlcXVlc3RfbW46CisJY2FwYWJpbGl0eSA9IDA7CisKKwluZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmZmxhc2hlZF92ZXIpOworCWlmIChmbGFzaGVkX3ZlciA+PSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIyMCkpIHsKKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCU5YX1BFR19UVU5FX0NBUEFCSUxJVFksICZjYXBhYmlsaXR5LCA0KTsKKwkJaWYgKGNhcGFiaWxpdHkgJiBOWF9QRUdfVFVORV9NTl9QUkVTRU5UKSB7CisJCQlmd190eXBlID0gTlhfUDNfTU5fUk9NSU1BR0U7CisJCQlnb3RvIHJlcXVlc3RfZnc7CisJCX0KKwl9CisKK3JlcXVlc3RfZnc6CisJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZVtmd190eXBlXSwgJnBkZXYtPmRldik7CisJaWYgKHJjICE9IDApIHsKKwkJaWYgKGZ3X3R5cGUgPT0gTlhfUDNfQ1RfUk9NSU1BR0UpIHsKKwkJCW1zbGVlcCgxKTsKKwkJCWdvdG8gcmVxdWVzdF9tbjsKKwkJfQorCisJCWZ3ID0gTlVMTDsKKwkJZ290byBsb2FkX2Z3OworCX0KKworCXJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKwlpZiAocmMgIT0gMCkgeworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCQlpZiAoZndfdHlwZSA9PSBOWF9QM19DVF9ST01JTUFHRSkgeworCQkJbXNsZWVwKDEpOworCQkJZ290byByZXF1ZXN0X21uOworCQl9CisKKwkJZncgPSBOVUxMOworCX0KKworbG9hZF9mdzoKKwlyYyA9IG5ldHhlbl9kb19sb2FkX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKworCWlmIChmdykKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJjOworfQorCiBpbnQKIG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXVsb25nIG9mZiwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJaWYgKEFERFJfSU5fV0lORE9XMShvZmYpKSB7CiAJCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOwogCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLwpAQCAtOTc3LDM3ICsxMTg3LDEzIEBACiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKIAl9CiAKLQlEUFJJTlRLKElORk8sICJ3cml0aW5nIHRvIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXAiCi0JCSIgZGF0YSAlbGx4IGxlbiAlZFxuIiwKLQkJcGNpX2Jhc2UoYWRhcHRlciwgb2ZmKSwgb2ZmLCBhZGRyLAotCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEsIGxlbik7CiAJaWYgKCFhZGRyKSB7CiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCXdyaXRlYigqKHU4ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHUxNiAqKSBkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJd3JpdGVxKCoodTY0ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuID4+IDMpKTsKKwl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7CiAKLQkJbmV0eGVuX25pY19od19ibG9ja193cml0ZTY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAgKGxlbiA+PiAzKSk7Ci0JCWJyZWFrOwotCX0KIAlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAKQEAgLTEwMjAsNiArMTIwNiw4IEBACiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCisJQlVHX09OKGxlbiAhPSA0KTsKKwogCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewkvKiBXaW5kb3cgMSAqLwogCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKIAl9IGVsc2UgewkJLyogV2luZG93IDAgKi8KQEAgLTEwMjcsMzEgKzEyMTUsMTIgQEAKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCX0KIAotCURQUklOVEsoSU5GTywgInJlYWRpbmcgZnJvbSBiYXNlICVseCBvZmZzZXQgJWxseCBhZGRyICVwXG4iLAotCQlwY2lfYmFzZShhZGFwdGVyLCBvZmYpLCBvZmYsIGFkZHIpOwogCWlmICghYWRkcikgewogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAJCXJldHVybiAxOwogCX0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1OCAqKSBkYXRhID0gcmVhZGIoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJKih1MTYgKikgZGF0YSA9IHJlYWR3KGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSoodTMyICopIGRhdGEgPSByZWFkbChhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHU2NCAqKSBkYXRhID0gcmVhZHEoYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5ldHhlbl9uaWNfaHdfYmxvY2tfcmVhZDY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAobGVuID4+IDMpKTsKLQkJYnJlYWs7Ci0JfQotCURQUklOVEsoSU5GTywgInJlYWQgJWx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgKilkYXRhKTsKKworCSoodTMyICopZGF0YSA9IHJlYWRsKGFkZHIpOwogCiAJaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwpAQCAtMTA2Niw2ICsxMjM1LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgcnY7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJcnYgPSBuZXR4ZW5fbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgJm9mZiwgbGVuKTsKIAogCWlmIChydiA9PSAtMSkgewpAQCAtMTA3OSwzNCArMTI1MCwxMiBAQAogCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCQljcmJfd2luX2xvY2soYWRhcHRlcik7CiAJCW5ldHhlbl9uaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgJm9mZik7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAid3JpdGUgZGF0YSAlbHggdG8gb2Zmc2V0ICVsbHgsIGxlbj0lZFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyAqKWRhdGEsIG9mZiwgbGVuKTsKLQotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQl3cml0ZWIoKih1aW50OF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHVpbnQxNl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHVpbnQzMl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCXdyaXRlcSgqKHVpbnQ2NF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKDEsIElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuPj4zKSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAocnYgPT0gMSkgeworCQl3cml0ZWwoKih1aW50MzJfdCAqKWRhdGEsICh2b2lkIF9faW9tZW0gKilvZmYpOwogCQljcmJfd2luX3VubG9jayhhZGFwdGVyKTsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCX0KKwl9IGVsc2UKKwkJd3JpdGVsKCoodWludDMyX3QgKilkYXRhLCAodm9pZCBfX2lvbWVtICopb2ZmKTsKKwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTE4LDYgKzEyNjcsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCBydjsKIAorCUJVR19PTihsZW4gIT0gNCk7CisKIAlydiA9IG5ldHhlbl9uaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCAmb2ZmLCBsZW4pOwogCiAJaWYgKHJ2ID09IC0xKSB7CkBAIC0xMTMxLDMzICsxMjgyLDExIEBACiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKIAkJbmV0eGVuX25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCAmb2ZmKTsKLQl9Ci0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkIGZyb20gb2Zmc2V0ICVseCwgbGVuPSVkXG4iLCBvZmYsIGxlbik7Ci0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1aW50OF90ICopZGF0YSA9IHJlYWRiKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHVpbnQxNl90ICopZGF0YSA9IHJlYWR3KCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqKHVpbnQzMl90ICopZGF0YSA9IHJlYWRsKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHVpbnQ2NF90ICopZGF0YSA9IHJlYWRxKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOwotCi0JaWYgKHJ2ID09IDEpIHsKKwkJKih1aW50MzJfdCAqKWRhdGEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopb2ZmKTsKIAkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQl9CisJfSBlbHNlCisJCSoodWludDMyX3QgKilkYXRhID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW9mZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTksMTAgKzE1NDgsOSBAQAogCQkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkICphZGRyOworCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOwogCWludCByZXQgPSAwOwogCXU2NCBzdGFydDsKLQl1aW50OF90ICptZW1fcHRyID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7CiAKQEAgLTE0NDIsNyArMTU3MCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlhZGRyID0gKHZvaWQgKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KSk7CisJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCk7CiAJaWYgKCFhZGRyKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCk7CkBAIC0xNDgxLDcgKzE2MDksNiBAQAogCQlicmVhazsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCURQUklOVEsoMSwgSU5GTywgInJlYWQgJWxseFxuIiwgKih1bnNpZ25lZCBsb25nIGxvbmcgKilkYXRhKTsKIAogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwpAQCAtMTQ5MywxMCArMTYyMCw5IEBACiAJCXZvaWQgKmRhdGEsIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKKwl2b2lkIF9faW9tZW0gKmFkZHIsICptZW1fcHRyID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAl1NjQgc3RhcnQ7Ci0JdWludDhfdCAqbWVtX3B0ciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKIAl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwogCkBAIC0xNTE2LDcgKzE2NDIsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JYWRkciA9ICh2b2lkICopKHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCkpOworCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgc3RhcnQpOwogCWlmICghYWRkcikgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDApOwpAQCAtMTU1Myw4ICsxNjc5LDYgQEAKIAkJYnJlYWs7CiAJfQogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQlEUFJJTlRLKDEsIElORk8sICJ3cml0aW5nIGRhdGEgJWxseCB0byBvZmZzZXQgJWxseFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSwgc3RhcnQpOwogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwogCXJldHVybiByZXQ7CkBAIC0xNTY2LDEwICsxNjkwLDExIEBACiBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiwgcmV0ID0gMCwgbG9vcCwgc3pbMl0sIG9mZjA7CiAJdWludDMyX3QgICAgICB0ZW1wOwogCXVpbnQ2NF90ICAgICAgb2ZmOCwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAkvKgogCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCkBAIC0xNTgzLDcgKzE3MDgsNyBAQAogCXN6WzBdID0gKHNpemUgPCAoOCAtIG9mZjApKSA/IHNpemUgOiAoOCAtIG9mZjApOwogCXN6WzFdID0gc2l6ZSAtIHN6WzBdOwogCWxvb3AgPSAoKG9mZjAgKyBzaXplIC0gMSkgPj4gMykgKyAxOwotCW1lbV9jcmIgPSAodW5zaWduZWQgbG9uZylwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKKwltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CiAKIAlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZjAgIT0gMCkpICB7CiAJCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKQEAgLTE2MjEsMjggKzE3NDYsMjkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKIAkJd3JpdGVsKCh1aW50MzJfdCkob2ZmOCArIChpIDw8IDMpKSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPKSk7CiAJCXdyaXRlbCgwLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKIAkJd3JpdGVsKHdvcmRbaV0gJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CiAJCXdyaXRlbCgod29yZFtpXSA+PiAzMikgJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CiAJCXdyaXRlbChNSVVfVEFfQ1RMX0VOQUJMRXxNSVVfVEFfQ1RMX1dSSVRFLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJd3JpdGVsKE1JVV9UQV9DVExfU1RBUlR8TUlVX1RBX0NUTF9FTkFCTEV8TUlVX1RBX0NUTF9XUklURSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkgICAgIChtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoIiVzOiAlcyBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCV9fZnVuY19fLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJcmV0ID0gLTE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY1NywxMCArMTc4MywxMSBAQAogbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiA9IDAsIGssIHN0YXJ0LCBlbmQsIGxvb3AsIHN6WzJdLCBvZmYwWzJdOwogCXVpbnQzMl90ICAgICAgdGVtcDsKIAl1aW50NjRfdCAgICAgIG9mZjgsIHZhbCwgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAogCS8qCkBAIC0xNjc1LDMxICsxODAyLDMyIEBACiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMFswXSkpID8gc2l6ZSA6ICg4IC0gb2ZmMFswXSk7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAJbG9vcCA9ICgob2ZmMFswXSArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0JbWVtX2NyYiA9ICh1bnNpZ25lZCBsb25nKXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewogCQl3cml0ZWwoKHVpbnQzMl90KShvZmY4ICsgKGkgPDwgMykpLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9MTykpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKIAkJd3JpdGVsKDAsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9FTkFCTEUsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9TVEFSVHxNSVVfVEFfQ1RMX0VOQUJMRSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAgKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJICAgICAgKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKIAkJCQlicmVhazsKIAkJfQogCiAJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIEZhaWwgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iLAotCQkJCQlfX2Z1bmNfXywgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTcwNyw3ICsxODM1LDcgQEAKIAkJZW5kICAgPSAob2ZmMFtpXSArIHN6W2ldIC0gMSkgPj4gMjsKIAkJZm9yIChrID0gc3RhcnQ7IGsgPD0gZW5kOyBrKyspIHsKIAkJCXdvcmRbaV0gfD0gKCh1aW50NjRfdCkgcmVhZGwoCi0JCQkJICAgICh2b2lkICopKG1lbV9jcmIgKworCQkJCSAgICAobWVtX2NyYiArCiAJCQkJICAgIE1JVV9URVNUX0FHVF9SRERBVEEoaykpKSA8PCAoMzIqaykpOwogCQl9CiAJfQpAQCAtMTczOSw3ICsxODY3LDYgQEAKIAkJKih1aW50NjRfdCAqKWRhdGEgPSB2YWw7CiAJCWJyZWFrOwogCX0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkICVsbHhcbiIsICoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MzUsOCArMTk2Miw5IEBACiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gd3JpdGUgdGhyb3VnaCBhZ2VudFxuIik7CiAJCQlyZXQgPSAtMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xOTA1LDggKzIwMzMsOSBAQAogCQl9CiAKIAkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE5NDgsNyArMjA3Nyw2IEBACiAJCSoodWludDY0X3QgKilkYXRhID0gdmFsOwogCQlicmVhazsKIAl9Ci0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTgzLDYyICsyMTExLDQ2IEBACiAJcmV0dXJuIHRlbXA7CiB9CiAKLSNpZiAwCi1pbnQKLW5ldHhlbl9uaWNfZXJhc2VfcHhlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAobmV0eGVuX3JvbV9mYXN0X3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9QWEVfU1RBUlQsIDApID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVyYXNlIHB4ZSBmYWlsZWRcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgcnYgPSAwOwotCWludCBhZGRyID0gTkVUWEVOX0JSRENGR19TVEFSVDsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbzsKLQlpbnQgaW5kZXg7Ci0JdTMyICpwdHIzMjsKKwlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYywgaGVhZGVyX3ZlcnNpb247CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYm9hcmRpbmZvID0gJmFkYXB0ZXItPmFody5ib2FyZGNmZzsKLQlwdHIzMiA9ICh1MzIgKikgYm9hcmRpbmZvOworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIG1hZ2ljKTsKKwlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgb2Zmc2V0LCAmbWFnaWMpKQorCQlyZXR1cm4gLUVJTzsKIAotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpemVvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8pIC8gc2l6ZW9mKHUzMik7Ci0JICAgICBpbmRleCsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCBwdHIzMikgPT0gLTEpIHsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCXB0cjMyKys7Ci0JCWFkZHIgKz0gc2l6ZW9mKHUzMik7Ci0JfQotCWlmIChib2FyZGluZm8tPm1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMpIHsKLQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCBjb25maWcuIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPm1hZ2ljLCBORVRYRU5fQkRJTkZPX01BR0lDKTsKLQkJcnYgPSAtMTsKLQl9Ci0JaWYgKGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7Ci0JCXByaW50aygiJXM6IFVua25vd24gYm9hcmQgY29uZmlnIHZlcnNpb24uIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24sIE5FVFhFTl9CRElORk9fVkVSU0lPTik7Ci0JCXJ2ID0gLTE7CisJb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCisJCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgaGVhZGVyX3ZlcnNpb24pOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZoZWFkZXJfdmVyc2lvbikpCisJCXJldHVybiAtRUlPOworCisJaWYgKG1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMgfHwKKwkJCWhlYWRlcl92ZXJzaW9uICE9IE5FVFhFTl9CRElORk9fVkVSU0lPTikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiaW52YWxpZCBib2FyZCBjb25maWcsIG1hZ2ljPSUwOHgsIHZlcnNpb249JTA4eFxuIiwKKwkJCW1hZ2ljLCBoZWFkZXJfdmVyc2lvbik7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChib2FyZGluZm8tPmJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTSkgeworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIGJvYXJkX3R5cGUpOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisKKwlpZiAoYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NKSB7CiAJCXUzMiBncGlvID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLAogCQkJCU5FVFhFTl9ST01VU0JfR0xCX1BBRF9HUElPX0kpOwogCQlpZiAoKGdwaW8gJiAweDgwMDApID09IDApCi0JCQlib2FyZGluZm8tPmJvYXJkX3R5cGUgPSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA7CisJCQlib2FyZF90eXBlID0gTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOwogCX0KIAotCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX0dCRTsKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOwogCQlicmVhazsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKQEAgLTIwNTQsNyArMjE2Niw3IEBACiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfU0ZQX1FUOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1hGUDoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDFfQkQ6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMV9TQjoKQEAgLTIwNjMsMjAgKzIxNzUsMTkgQEAKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRzoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0I6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gTkVUWEVOX05JQ19HQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gKGFkYXB0ZXItPnBvcnRudW0gPCAyKSA/CiAJCQlORVRYRU5fTklDX1hHQkUgOiBORVRYRU5fTklDX0dCRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVW5rbm93bigleClcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPmJvYXJkX3R5cGUpOwotCQlydiA9IC1FTk9ERVY7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVua25vd24gYm9hcmQgdHlwZSAleFxuIiwgYm9hcmRfdHlwZSk7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBydjsKKwlyZXR1cm4gMDsKIH0KIAogLyogTklVIGFjY2VzcyBzZWN0aW9ucyAqLwpAQCAtMjEyMiw3ICsyMjMzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKIAkJCQlORVRYRU5fUE9SVF9NT0RFX0FERFIsICZwb3J0X21vZGUsIDQpOwogCQlpZiAocG9ydF9tb2RlID09IE5FVFhFTl9QT1JUX01PREVfODAyXzNfQVApIHsKQEAgLTIxNzcsMzIgKzIyODgsMjcgQEAKIAl9CiB9CiAKLXZvaWQgbmV0eGVuX25pY19mbGFzaF9wcmludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIG5ldHhlbl9uaWNfZ2V0X2Zpcm13YXJlX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBmd19tYWpvciA9IDA7Ci0JdTMyIGZ3X21pbm9yID0gMDsKLQl1MzIgZndfYnVpbGQgPSAwOworCXUzMiBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkOwogCWNoYXIgYnJkX25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKIAljaGFyIHNlcmlhbF9udW1bMzJdOwotCWludCBpLCBhZGRyOwotCV9fbGUzMiAqcHRyMzI7Ci0KLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmKGFkYXB0ZXItPmFody5ib2FyZGNmZyk7CisJaW50IGksIGFkZHIsIHZhbDsKKwlpbnQgKnB0cjMyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAogCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDA7CiAKLQlwdHIzMiA9ICh1MzIgKikmc2VyaWFsX251bTsKKwlwdHIzMiA9IChpbnQgKikmc2VyaWFsX251bTsKIAlhZGRyID0gTkVUWEVOX1VTRVJfU1RBUlQgKwogCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX25ld191c2VyX2luZm8sIHNlcmlhbF9udW0pOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHB0cjMyKSA9PSAtMSkgewotCQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCB1c2VyYXJlYS5cbiIsCi0JCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ2YWwpID09IC0xKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciByZWFkaW5nIGJvYXJkIGluZm9cbiIpOwogCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKIAkJCXJldHVybjsKIAkJfQotCQlwdHIzMisrOworCQlwdHIzMltpXSA9IGNwdV90b19sZTMyKHZhbCk7CiAJCWFkZHIgKz0gc2l6ZW9mKHUzMik7CiAJfQogCkBAIC0yMjExLDIzICsyMzE3LDQ4IEBACiAJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9TVUIsICZmd19idWlsZCwgNCk7CiAKIAlhZGFwdGVyLT5md19tYWpvciA9IGZ3X21ham9yOworCWFkYXB0ZXItPmZ3X3ZlcnNpb24gPSBORVRYRU5fVkVSU0lPTl9DT0RFKGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwogCiAJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgewotCQlnZXRfYnJkX25hbWVfYnlfdHlwZShib2FyZF9pbmZvLT5ib2FyZF90eXBlLCBicmRfbmFtZSk7CisJCWdldF9icmRfbmFtZV9ieV90eXBlKGFkYXB0ZXItPmFody5ib2FyZF90eXBlLCBicmRfbmFtZSk7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0WGVuICVzIEJvYXJkIFMvTiAlcyAgQ2hpcCByZXYgMHgleFxuIiwKIAkJCQlicmRfbmFtZSwgc2VyaWFsX251bSwgYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0WGVuIEZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWRcbiIsCi0JCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CiAJfQogCi0JaWYgKE5FVFhFTl9WRVJTSU9OX0NPREUoZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCkgPAotCQkJTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpKSB7CisJaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPCBORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKIAkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKIAkJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKIAkJcmV0dXJuOwogCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkXG4iLAorCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmaSwgNCk7CisJCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA9IChpICYgMHg0KSA/IDEgOiAwOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgcnVubmluZyBpbiAlcyBtb2RlXG4iLAorCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPyAiY3V0LXRocm91Z2giIDogImxlZ2FjeSIpOworCX0KIH0KIAoraW50CituZXR4ZW5fbmljX3dvbF9zdXBwb3J0ZWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB3b2xfY2ZnOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAwOworCisJd29sX2NmZyA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1dPTF9DT05GSUdfTlYpOworCWlmICh3b2xfY2ZnICYgKDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkgeworCQl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJCWlmICh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCmluZGV4IGFhZTczN2QuLjA0YjQ3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogU3RydWN0dXJlcywgZW51bXMsIGFuZCBtYWNyb3MgZm9yIHRoZSBNQUMKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTU0LDM3ICs1MSwxMiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2h3X2Jsb2NrX3dyaXRlNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKLQkJCQkJICAgICAgIHU2NCBfX2lvbWVtICogYWRkciwKLQkJCQkJICAgICAgIGludCBudW1fd29yZHMpCi17Ci0JaW50IG51bTsKLQlmb3IgKG51bSA9IDA7IG51bSA8IG51bV93b3JkczsgbnVtKyspIHsKLQkJd3JpdGVxKHJlYWRxKCh2b2lkIF9faW9tZW0gKilkYXRhX3B0ciksIGFkZHIpOwotCQlhZGRyKys7Ci0JCWRhdGFfcHRyKys7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKLQkJCQkJICAgICAgdTY0IF9faW9tZW0gKiBhZGRyLCBpbnQgbnVtX3dvcmRzKQotewotCWludCBudW07Ci0JZm9yIChudW0gPSAwOyBudW0gPCBudW1fd29yZHM7IG51bSsrKSB7Ci0JCXdyaXRlcShyZWFkcSgodm9pZCBfX2lvbWVtICopYWRkciksIGRhdGFfcHRyKTsKLQkJYWRkcisrOwotCQlkYXRhX3B0cisrOwotCX0KLQotfQotCiBzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXI7CiAKICNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFX0JZVEVTICAoTkVUWEVOX1BDSV9NQVBTSVpFIDw8IDIwKQogCiBzdHJ1Y3QgbmV0eGVuX3BvcnQ7CiB2b2lkIG5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBuZXR4ZW5fbmljX2ZsYXNoX3ByaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKIHR5cGVkZWYgdTggbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdFs2XTsKIApAQCAtMTQ4LDMzICsxMjAsNiBAQAogI2RlZmluZSBuZXR4ZW5fZ2JfZ2V0X3NvZnRfcmVzZXQoY29uZmlnX3dvcmQpCVwKIAkJX25ldHhlbl9jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAzMSkKIAotLyoKLSAqIE5JVSBHQiBNQUMgQ29uZmlnIFJlZ2lzdGVyIDEgKGFwcGxpZXMgdG8gR0IwLCBHQjEsIEdCMiwgR0IzKQotICoKLSAqCUJpdCAwCSAgICA6IGR1cGxleCA9PiAxOmZ1bGwgZHVwbGV4IG1vZGUsIDA6aGFsZiBkdXBsZXgKLSAqCUJpdCAxCSAgICA6IGNyY19lbmFibGUgPT4gMTphcHBlbmQgQ1JDIHRvIHhtaXQgZnJhbWVzLCAwOmRvbnQgYXBwZW5kCi0gKglCaXQgMgkgICAgOiBwYWRzaG9ydCA9PiAxOnBhZCBzaG9ydCBmcmFtZXMgYW5kIGFkZCBDUkMsIDA6ZG9udCBwYWQKLSAqCUJpdCA0CSAgICA6IGNoZWNrbGVuZ3RoID0+IDE6Y2hlY2sgZnJhbWVsZW4gd2l0aCBhY3R1YWwsMDpkb250IGNoZWNrCi0gKglCaXQgNQkgICAgOiBodWdlZnJhbWVzID0+IDE6YWxsb3cgb3ZlcnNpemUgeG1pdCBmcmFtZXMsIDA6ZG9udCBhbGxvdwotICoJQml0cyA4LTkgICAgOiBpbnRmbW9kZSA9PiAwMTpuaWJibGUgKDEwLzEwMCksIDEwOmJ5dGUgKDEwMDApCi0gKglCaXRzIDEyLTE1ICA6IHByZWFtYmxlbGVuID0+IHByZWFtYmxlIGZpZWxkIGxlbmd0aCBpbiBieXRlcywgZGVmYXVsdCA3Ci0gKi8KLQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2R1cGxleChjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfY3JjX2VuYWJsZShjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEpCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfcGFkc2hvcnQoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCAyKQotI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2NoZWNrbGVuZ3RoKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNCkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9odWdlZnJhbWVzKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNSkKLSNkZWZpbmUgbmV0eGVuX2diX3NldF9wcmVhbWJsZWxlbihjb25maWdfd29yZCwgdmFsKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9ICgodmFsKSA8PCAxMikgJiAweEYwMDApCi0jZGVmaW5lIG5ldHhlbl9nYl9zZXRfaW50Zm1vZGUoY29uZmlnX3dvcmQsIHZhbCkJCVwKLQkJKChjb25maWdfd29yZCkgfD0gKCh2YWwpIDw8IDgpICYgMHgzMDApCi0KICNkZWZpbmUgbmV0eGVuX2diX2dldF9zdGF0aW9uYWRkcmVzc19sb3coY29uZmlnX3dvcmQpICgoY29uZmlnX3dvcmQpID4+IDE2KQogCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfbWlpX21nbXRfY2xvY2tzZWxlY3QoY29uZmlnX3dvcmQsIHZhbCkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IGZmZDM3YmUuLjA3NTljMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDEyICsyMiw5IEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0Ci0gKgotICoKLSAqIFNvdXJjZSBmaWxlIGZvciBOSUMgcm91dGluZXMgdG8gaW5pdGlhbGl6ZSB0aGUgUGhhbnRvbSBIYXJkd2FyZQorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtNTIsMTcgKzQ5LDkgQEAKIAogI2RlZmluZSBORVRYRU5fTklDX1hETUFfUkVTRVQgMHg4MDAwZmYKIAotc3RhdGljIHZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdWludDMyX3QgY3R4LCB1aW50MzJfdCByaW5naWQpOwotCi0jaWYgMAotc3RhdGljIHZvaWQgbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdW5zaWduZWQgbG9uZyBvZmYsIGludCAqZGF0YSkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKLQl3cml0ZWwoKmRhdGEsIGFkZHIpOwotfQotI2VuZGlmICAvKiAgMCAgKi8KK3N0YXRpYyB2b2lkCituZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogCiBzdGF0aWMgdm9pZCBjcmJfYWRkcl90cmFuc2Zvcm1fc2V0dXAodm9pZCkKIHsKQEAgLTE2MCwyMyArMTQ5LDIxIEBACiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmOwotCWludCBpLCBjdHhpZCwgcmluZzsKKwlpbnQgaSwgcmluZzsKIAotCWZvciAoY3R4aWQgPSAwOyBjdHhpZCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eGlkKSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCWZvciAoaSA9IDA7IGkgPCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQ7ICsraSkgewotCQkJCXJ4X2J1ZiA9ICYocmRzX3JpbmctPnJ4X2J1Zl9hcnJbaV0pOwotCQkJCWlmIChyeF9idWYtPnN0YXRlID09IE5FVFhFTl9CVUZGRVJfRlJFRSkKLQkJCQkJY29udGludWU7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAotCQkJCQkJcnhfYnVmLT5kbWEsCi0JCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsCi0JCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCWlmIChyeF9idWYtPnNrYiAhPSBOVUxMKQotCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7Ci0JCQl9CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlmb3IgKGkgPSAwOyBpIDwgcmRzX3JpbmctPm51bV9kZXNjOyArK2kpIHsKKwkJCXJ4X2J1ZiA9ICYocmRzX3JpbmctPnJ4X2J1Zl9hcnJbaV0pOworCQkJaWYgKHJ4X2J1Zi0+c3RhdGUgPT0gTkVUWEVOX0JVRkZFUl9GUkVFKQorCQkJCWNvbnRpbnVlOworCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAorCQkJCQlyeF9idWYtPmRtYSwKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplLAorCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJaWYgKHJ4X2J1Zi0+c2tiICE9IE5VTEwpCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkocnhfYnVmLT5za2IpOwogCQl9CiAJfQogfQpAQCAtMTg4LDcgKzE3NSw3IEBACiAJaW50IGksIGo7CiAKIAljbWRfYnVmID0gYWRhcHRlci0+Y21kX2J1Zl9hcnI7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4ZDsgaSsrKSB7CiAJCWJ1ZmZyYWcgPSBjbWRfYnVmLT5mcmFnX2FycmF5OwogCQlpZiAoYnVmZnJhZy0+ZG1hKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZyYWctPmRtYSwKQEAgLTIwNCw3ICsxOTEsNiBAQAogCQkJCWJ1ZmZyYWctPmRtYSA9IDBVTEw7CiAJCQl9CiAJCX0KLQkJLyogRnJlZSB0aGUgc2tiIHdlIHJlY2VpdmVkIGluIG5ldHhlbl9uaWNfeG1pdF9mcmFtZSAqLwogCQlpZiAoY21kX2J1Zi0+c2tiKSB7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShjbWRfYnVmLT5za2IpOwogCQkJY21kX2J1Zi0+c2tiID0gTlVMTDsKQEAgLTIxNywxOCArMjAzLDE3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKLQlpbnQgY3R4LCByaW5nOworCWludCByaW5nOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FycikgewotCQkJCXZmcmVlKHJkc19yaW5nLT5yeF9idWZfYXJyKTsKLQkJCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IE5VTEw7Ci0JCQl9CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlpZiAocmRzX3JpbmctPnJ4X2J1Zl9hcnIpIHsKKwkJCXZmcmVlKHJkc19yaW5nLT5yeF9idWZfYXJyKTsKKwkJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gTlVMTDsKIAkJfQogCX0KKwogCWlmIChhZGFwdGVyLT5jbWRfYnVmX2FycikKIAkJdmZyZWUoYWRhcHRlci0+Y21kX2J1Zl9hcnIpOwogCXJldHVybjsKQEAgLTIzOCw5MCArMjIzLDk3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1ZjsKLQlpbnQgY3R4LCByaW5nLCBpLCBudW1fcnhfYnVmczsKKwlpbnQgcmluZywgaSwgbnVtX3J4X2J1ZnM7CiAKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKLQljbWRfYnVmX2FyciA9IChzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKil2bWFsbG9jKFRYX1JJTkdTSVpFKTsKKwljbWRfYnVmX2FyciA9CisJCShzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKil2bWFsbG9jKFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikpOwogCWlmIChjbWRfYnVmX2FyciA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBjbWQgYnVmZmVyIHJpbmdcbiIsCiAJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9SSU5HU0laRSk7CisJbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9CVUZGX1JJTkdTSVpFKGFkYXB0ZXIpKTsKIAlhZGFwdGVyLT5jbWRfYnVmX2FyciA9IGNtZF9idWZfYXJyOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgY3R4KyspIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKLQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewotCQkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKLQkJCXN3aXRjaCAoUkNWX0RFU0NfVFlQRShyaW5nKSkgewotCQkJY2FzZSBSQ1ZfREVTQ19OT1JNQUw6Ci0JCQkJcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50ID0KLQkJCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQ7Ci0JCQkJcmRzX3JpbmctPmZsYWdzID0gUkNWX0RFU0NfTk9STUFMOwotCQkJCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpIHsKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKLQkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJCU5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKLQkJCQl9IGVsc2UgewotCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9ETUFfTUFQX0xFTjsKLQkJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBSQ1ZfREVTQ19KVU1CTzoKLQkJCQlyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQgPQotCQkJCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhfZGVzY19jb3VudDsKLQkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19KVU1CTzsKLQkJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX1AzX1JYX0pVTUJPX0JVRl9NQVhfTEVOOwotCQkJCWVsc2UKLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KLQkJCQkJCU5YX1AyX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwkJc3dpdGNoIChyaW5nKSB7CisJCWNhc2UgUkNWX1JJTkdfTk9STUFMOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX3J4ZDsKKwkJCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpIHsKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU47CiAJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOwotCQkJCWJyZWFrOworCQkJCQlOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU47CisJCQl9IGVsc2UgeworCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFJYX0RNQV9NQVBfTEVOOworCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOworCQkJfQorCQkJYnJlYWs7CiAKLQkJCWNhc2UgUkNWX1JJTkdfTFJPOgotCQkJCXJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCA9Ci0JCQkJCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudDsKLQkJCQlyZHNfcmluZy0+ZmxhZ3MgPSBSQ1ZfREVTQ19MUk87Ci0JCQkJcmRzX3JpbmctPmRtYV9zaXplID0gUlhfTFJPX0RNQV9NQVBfTEVOOwotCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9IE1BWF9SWF9MUk9fQlVGRkVSX0xFTkdUSDsKLQkJCQlicmVhazsKKwkJY2FzZSBSQ1ZfUklOR19KVU1CTzoKKwkJCXJkc19yaW5nLT5udW1fZGVzYyA9IGFkYXB0ZXItPm51bV9qdW1ib19yeGQ7CisJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9QM19SWF9KVU1CT19CVUZfTUFYX0xFTjsKKwkJCWVsc2UKKwkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQlOWF9QMl9SWF9KVU1CT19CVUZfTUFYX0xFTjsKKwkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOworCQkJYnJlYWs7CiAKLQkJCX0KLQkJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCi0JCQkJdm1hbGxvYyhSQ1ZfQlVGRlNJWkUpOwotCQkJaWYgKHJkc19yaW5nLT5yeF9idWZfYXJyID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgotCQkJCQkicnggYnVmZmVyIHJpbmcgJWRcbiIsCi0JCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7Ci0JCQkJLyogZnJlZSB3aGF0ZXZlciB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KLQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQl9Ci0JCQltZW1zZXQocmRzX3JpbmctPnJ4X2J1Zl9hcnIsIDAsIFJDVl9CVUZGU0laRSk7Ci0JCQlJTklUX0xJU1RfSEVBRCgmcmRzX3JpbmctPmZyZWVfbGlzdCk7Ci0JCQkvKgotCQkJICogTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZW0sIHNldCByZWZlcmVuY2UgaGFuZGxlcwotCQkJICogYW5kIHB1dCB0aGVtIGluIHRoZSBxdWV1ZXMuCi0JCQkgKi8KLQkJCW51bV9yeF9idWZzID0gcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50OwotCQkJcnhfYnVmID0gcmRzX3JpbmctPnJ4X2J1Zl9hcnI7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X2J1ZnM7IGkrKykgewotCQkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKLQkJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKLQkJCQlyeF9idWYtPnJlZl9oYW5kbGUgPSBpOwotCQkJCXJ4X2J1Zi0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7Ci0JCQkJcnhfYnVmKys7Ci0JCQl9CisJCWNhc2UgUkNWX1JJTkdfTFJPOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX2xyb19yeGQ7CisJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9MUk9fRE1BX01BUF9MRU47CisJCQlyZHNfcmluZy0+c2tiX3NpemUgPSBNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEg7CisJCQlicmVhazsKKwogCQl9CisJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCisJCQl2bWFsbG9jKFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FyciA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJCSJyeCBidWZmZXIgcmluZyAlZFxuIiwKKwkJCQluZXRkZXYtPm5hbWUsIHJpbmcpOworCQkJLyogZnJlZSB3aGF0ZXZlciB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQltZW1zZXQocmRzX3JpbmctPnJ4X2J1Zl9hcnIsIDAsIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCUlOSVRfTElTVF9IRUFEKCZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJLyoKKwkJICogTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZW0sIHNldCByZWZlcmVuY2UgaGFuZGxlcworCQkgKiBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlcy4KKwkJICovCisJCW51bV9yeF9idWZzID0gcmRzX3JpbmctPm51bV9kZXNjOworCQlyeF9idWYgPSByZHNfcmluZy0+cnhfYnVmX2FycjsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9yeF9idWZzOyBpKyspIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKKwkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkJcnhfYnVmLT5yZWZfaGFuZGxlID0gaTsKKwkJCXJ4X2J1Zi0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7CisJCQlyeF9idWYrKzsKKwkJfQorCQlzcGluX2xvY2tfaW5pdCgmcmRzX3JpbmctPmxvY2spOworCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJc2RzX3JpbmctPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1tyaW5nXS52ZWN0b3I7CisJCXNkc19yaW5nLT5jbGVhbl90eCA9IChyaW5nID09IDApOworCQlzZHNfcmluZy0+cG9zdF9yeGQgPSAocmluZyA9PSAwKTsKKwkJc2RzX3JpbmctPmFkYXB0ZXIgPSBhZGFwdGVyOworCQlzZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fcnhkOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUkNWX0RFU0NfUklOR1M7IGkrKykKKwkJCUlOSVRfTElTVF9IRUFEKCZzZHNfcmluZy0+ZnJlZV9saXN0W2ldKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMzMyw3ICszMjUsNyBAQAogCiB2b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CiAJY2FzZSBORVRYRU5fTklDX0dCRToKIAkJYWRhcHRlci0+ZW5hYmxlX3BoeV9pbnRlcnJ1cHRzID0KIAkJICAgIG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0czsKQEAgLTM5OSw5ICszOTEsNiBAQAogCiBzdGF0aWMgbG9uZyByb21fbWF4X3RpbWVvdXQgPSAxMDA7CiBzdGF0aWMgbG9uZyByb21fbG9ja190aW1lb3V0ID0gMTAwMDA7Ci0jaWYgMAotc3RhdGljIGxvbmcgcm9tX3dyaXRlX3RpbWVvdXQgPSA3MDA7Ci0jZW5kaWYKIAogc3RhdGljIGludCByb21fbG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC00NTIsMzggKzQ0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fd3JlbihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JLyogU2V0IHdyaXRlIGVuYWJsZSBsYXRjaCBpbiBST00gc3RhdHVzIHJlZ2lzdGVyICovCi0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCi0JCQkgICAgIE0yNVBfSU5TVFJfV1JFTik7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0eGVuX3JkY3JicmVnKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgdW5zaWduZWQgaW50IGFkZHIpCi17Ci0JdW5zaWduZWQgaW50IGRhdGEgPSAweGRlYWRkZWFkOwotCWRhdGEgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIGFkZHIpOwotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9kb19yb21fcmRzcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLAotCQkJICAgICBNMjVQX0lOU1RSX1JEU1IpOwotCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBuZXR4ZW5fcmRjcmJyZWcoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fUkRBVEEpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIG5ldHhlbl9yb21fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgdmFsOwpAQCAtNDkzLDQ0ICs0NTAsNiBAQAogCiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50IG5ldHhlbl9yb21fd2lwX3BvbGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWxvbmcgdGltZW91dCA9IDA7Ci0JbG9uZyB3aXAgPSAxOwotCWludCB2YWw7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKLQl3aGlsZSAod2lwICE9IDApIHsKLQkJdmFsID0gbmV0eGVuX2RvX3JvbV9yZHNyKGFkYXB0ZXIpOwotCQl3aXAgPSB2YWwgJiAxOwotCQl0aW1lb3V0Kys7Ci0JCWlmICh0aW1lb3V0ID4gcm9tX21heF90aW1lb3V0KSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fcm9tX2Zhc3Rfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKLQkJCSAgICAgaW50IGRhdGEpCi17Ci0JaWYgKG5ldHhlbl9yb21fd3JlbihhZGFwdGVyKSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX1dEQVRBLCBkYXRhKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDMpOwotCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKLQkJCSAgICAgTTI1UF9JTlNUUl9QUCk7Ci0JaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7Ci0JCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0FCWVRFX0NOVCwgMCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IGRvX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgIGludCBhZGRyLCBpbnQgKnZhbHApCiB7CkBAIC01OTcsMjg0ICs1MTYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiAwCi1pbnQgbmV0eGVuX3JvbV9mYXN0X3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBkYXRhKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKHJvbV9sb2NrKGFkYXB0ZXIpICE9IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXQgPSBkb19yb21fZmFzdF93cml0ZShhZGFwdGVyLCBhZGRyLCBkYXRhKTsKLQluZXR4ZW5fcm9tX3VubG9jayhhZGFwdGVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRvX3JvbV9mYXN0X3dyaXRlX3dvcmRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICBpbnQgYWRkciwgdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgYWRkcmlkeCA9IGFkZHI7Ci0JaW50IHJldCA9IDA7Ci0KLQl3aGlsZSAoYWRkcmlkeCA8IChhZGRyICsgc2l6ZSkpIHsKLQkJaW50IGxhc3RfYXR0ZW1wdCA9IDA7Ci0JCWludCB0aW1lb3V0ID0gMDsKLQkJaW50IGRhdGE7Ci0KLQkJZGF0YSA9IGxlMzJfdG9fY3B1KCgqKF9fbGUzMiopYnl0ZXMpKTsKLQkJcmV0ID0gZG9fcm9tX2Zhc3Rfd3JpdGUoYWRhcHRlciwgYWRkcmlkeCwgZGF0YSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQl3aGlsZSgxKSB7Ci0JCQlpbnQgZGF0YTE7Ci0KLQkJCXJldCA9IGRvX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkcmlkeCwgJmRhdGExKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0KLQkJCWlmIChkYXRhMSA9PSBkYXRhKQotCQkJCWJyZWFrOwotCi0JCQlpZiAodGltZW91dCsrID49IHJvbV93cml0ZV90aW1lb3V0KSB7Ci0JCQkJaWYgKGxhc3RfYXR0ZW1wdCsrIDwgNCkgewotCQkJCQlyZXQgPSBkb19yb21fZmFzdF93cml0ZShhZGFwdGVyLAotCQkJCQkJCQlhZGRyaWR4LCBkYXRhKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiRGF0YSB3cml0ZSBkaWQgbm90ICIKLQkJCQkJICAgInN1Y2NlZWQgYXQgYWRkcmVzcyAweCV4XG4iLCBhZGRyaWR4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJYnl0ZXMgKz0gNDsKLQkJYWRkcmlkeCArPSA0OwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKLQkJCQkJdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IHJvbV9sb2NrKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZG9fcm9tX2Zhc3Rfd3JpdGVfd29yZHMoYWRhcHRlciwgYWRkciwgYnl0ZXMsIHNpemUpOwotCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fcm9tX3dyc3Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZGF0YSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbmV0eGVuX3JvbV93cmVuKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX1dEQVRBLCBkYXRhKTsKLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKLQkJCQkJTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLCAweDEpOwotCi0JcmV0ID0gbmV0eGVuX3dhaXRfcm9tX2RvbmUoYWRhcHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gbmV0eGVuX3JvbV93aXBfcG9sbChhZGFwdGVyKTsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fcm9tX3Jkc3Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByb21fbG9jayhhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5ldHhlbl9kb19yb21fcmRzcihhZGFwdGVyKTsKLQluZXR4ZW5fcm9tX3VubG9jayhhZGFwdGVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgbmV0eGVuX2JhY2t1cF9jcmJpbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgdmFsOwotCWNoYXIgKmJ1ZmZlciA9IGttYWxsb2MoTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFLCBHRlBfS0VSTkVMKTsKLQotCWlmICghYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQkvKiB1bmxvY2sgc2VjdG9yIDYzICovCi0JdmFsID0gbmV0eGVuX3JvbV9yZHNyKGFkYXB0ZXIpOwotCXZhbCA9IHZhbCAmIDB4ZTM7Ci0JcmV0ID0gbmV0eGVuX3JvbV93cnNyKGFkYXB0ZXIsIHZhbCk7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCS8qIGNvcHkgIHNlY3RvciAwIHRvIHNlY3RvciA2MyAqLwotCXJldCA9IG5ldHhlbl9yb21fZmFzdF9yZWFkX3dvcmRzKGFkYXB0ZXIsIE5FVFhFTl9DUkJJTklUX1NUQVJULAotCQkJCQlidWZmZXIsIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRSk7Ci0JaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCXJldCA9IG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBORVRYRU5fRklYRURfU1RBUlQsCi0JCQkJCWJ1ZmZlciwgTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFKTsKLQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JLyogbG9jayBzZWN0b3IgNjMgKi8KLQl2YWwgPSBuZXR4ZW5fcm9tX3Jkc3IoYWRhcHRlcik7Ci0JaWYgKCEodmFsICYgMHg4KSkgewotCQl2YWwgfD0gKDB4MSA8PCAyKTsKLQkJLyogbG9jayBzZWN0b3IgNjMgKi8KLQkJaWYgKG5ldHhlbl9yb21fd3JzcihhZGFwdGVyLCB2YWwpID09IDApIHsKLQkJCXJldCA9IG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Ci0JCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpCi0JCQkJZ290byBvdXRfa2ZyZWU7Ci0KLQkJCS8qIGxvY2sgU1Igd3JpdGVzICovCi0JCQlyZXQgPSBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotCQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQkJCWdvdG8gb3V0X2tmcmVlOwotCQl9Ci0JfQotCi1vdXRfa2ZyZWU6Ci0Ja2ZyZWUoYnVmZmVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9kb19yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQluZXR4ZW5fcm9tX3dyZW4oYWRhcHRlcik7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUREUkVTUywgYWRkcik7Ci0JbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAzKTsKLQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCi0JCQkgICAgIE0yNVBfSU5TVFJfU0UpOwotCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgewotCQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja19lcmFzZWRfZmxhc2goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQlpbnQgaTsKLQlpbnQgdmFsOwotCWludCBjb3VudCA9IDAsIGVyYXNlZF9lcnJvcnMgPSAwOwotCWludCByYW5nZTsKLQotCXJhbmdlID0gKGFkZHIgPT0gTkVUWEVOX1VTRVJfU1RBUlQpID8KLQkJTkVUWEVOX0ZJWEVEX1NUQVJUIDogYWRkciArIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQotCWZvciAoaSA9IGFkZHI7IGkgPCByYW5nZTsgaSArPSA0KSB7Ci0JCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGksICZ2YWwpOwotCQlpZiAodmFsICE9IDB4ZmZmZmZmZmYpCi0JCQllcmFzZWRfZXJyb3JzKys7Ci0JCWNvdW50Kys7Ci0JfQotCi0JaWYgKGVyYXNlZF9lcnJvcnMpCi0JCXByaW50ayhLRVJOX0lORk8gIjB4JXggb3V0IG9mIDB4JXggd29yZHMgZmFpbCB0byBiZSBlcmFzZWQgIgotCQkJImZvciBzZWN0b3IgYWRkcmVzczogJXhcbiIsIGVyYXNlZF9lcnJvcnMsIGNvdW50LCBhZGRyKTsKLX0KLQotaW50IG5ldHhlbl9yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAocm9tX2xvY2soYWRhcHRlcikgIT0gMCkgewotCQlyZXR1cm4gLTE7Ci0JfQotCXJldCA9IG5ldHhlbl9kb19yb21fc2UoYWRhcHRlciwgYWRkcik7Ci0JbmV0eGVuX3JvbV91bmxvY2soYWRhcHRlcik7Ci0JbXNsZWVwKDMwKTsKLQljaGVja19lcmFzZWRfZmxhc2goYWRhcHRlciwgYWRkcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWN0aW9ucyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICAgIGludCBzdGFydCwgaW50IGVuZCkKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLQkJcmV0ID0gbmV0eGVuX3JvbV9zZShhZGFwdGVyLCBpICogTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQlyZXQgPSBuZXR4ZW5fcm9tX3dpcF9wb2xsKGFkYXB0ZXIpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50Ci1uZXR4ZW5fZmxhc2hfZXJhc2Vfc2Vjb25kYXJ5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gRkxBU0hfU1VDQ0VTUzsKLQlpbnQgc3RhcnQsIGVuZDsKLQotCXN0YXJ0ID0gTkVUWEVOX1NFQ09OREFSWV9TVEFSVCAvIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQllbmQgICA9IE5FVFhFTl9VU0VSX1NUQVJUIC8gTkVUWEVOX0ZMQVNIX1NFQ1RPUl9TSVpFOwotCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9zZWN0aW9ucyhhZGFwdGVyLCBzdGFydCwgZW5kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludAotbmV0eGVuX2ZsYXNoX2VyYXNlX3ByaW1hcnkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXQgPSBGTEFTSF9TVUNDRVNTOwotCWludCBzdGFydCwgZW5kOwotCi0Jc3RhcnQgPSBORVRYRU5fUFJJTUFSWV9TVEFSVCAvIE5FVFhFTl9GTEFTSF9TRUNUT1JfU0laRTsKLQllbmQgICA9IE5FVFhFTl9TRUNPTkRBUllfU1RBUlQgLyBORVRYRU5fRkxBU0hfU0VDVE9SX1NJWkU7Ci0JcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY3Rpb25zKGFkYXB0ZXIsIHN0YXJ0LCBlbmQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBuZXR4ZW5faGFsdF9wZWdzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8wICsgMHgzYywgMSk7Ci0JIG5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMSArIDB4M2MsIDEpOwotCSBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzIgKyAweDNjLCAxKTsKLQkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8zICsgMHgzYywgMSk7Ci19Ci0KLWludCBuZXR4ZW5fZmxhc2hfdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IG5ldHhlbl9yb21fd3JzcihhZGFwdGVyLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG5ldHhlbl9yb21fd3JlbihhZGFwdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiAjZGVmaW5lIE5FVFhFTl9CT0FSRFRZUEUJCTB4NDAwOAogI2RlZmluZSBORVRYRU5fQk9BUkROVU0gCQkweDQwMGMKICNkZWZpbmUgTkVUWEVOX0NISVBOVU0JCQkweDQwMTAKQEAgLTExNjgsNiArODA5LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHhlbl9hbGxvY19yeF9za2Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsCisJCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlidWZmZXItPnNrYiA9IGRldl9hbGxvY19za2IocmRzX3JpbmctPnNrYl9zaXplKTsKKwlpZiAoIWJ1ZmZlci0+c2tiKQorCQlyZXR1cm4gMTsKKworCXNrYiA9IGJ1ZmZlci0+c2tiOworCisJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCisJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJYnVmZmVyLT5za2IgPSBOVUxMOworCQlyZXR1cm4gMTsKKwl9CisKKwlidWZmZXItPnNrYiA9IHNrYjsKKwlidWZmZXItPmRtYSA9IGRtYTsKKwlidWZmZXItPnN0YXRlID0gTkVUWEVOX0JVRkZFUl9CVVNZOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0eGVuX3Byb2Nlc3NfcnhidWYoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsIHUxNiBpbmRleCwgdTE2IGNrc3VtKQogewpAQCAtMTE5MiwxNjQgKzg2NywxMjEgQEAKIAlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCWJ1ZmZlci0+c2tiID0gTlVMTDsKLQogbm9fc2tiOgogCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0ZSRUU7Ci0JYnVmZmVyLT5scm9fY3VycmVudF9mcmFncyA9IDA7Ci0JYnVmZmVyLT5scm9fZXhwZWN0ZWRfZnJhZ3MgPSAwOwotCWxpc3RfYWRkX3RhaWwoJmJ1ZmZlci0+bGlzdCwgJnJkc19yaW5nLT5mcmVlX2xpc3QpOwogCXJldHVybiBza2I7CiB9CiAKLS8qCi0gKiBuZXR4ZW5fcHJvY2Vzc19yY3YoKSBzZW5kIHRoZSByZWNlaXZlZCBwYWNrZXQgdG8gdGhlIHByb3RvY29sIHN0YWNrLgotICogYW5kIGlmIHRoZSBudW1iZXIgb2YgcmVjZWl2ZXMgZXhjZWVkcyBSWF9CVUZGRVJTX1JFRklMTCwgdGhlbiB3ZQotICogaW52b2tlIHRoZSByb3V0aW5lIHRvIHNlbmQgbW9yZSByeCBidWZmZXJzIHRvIHRoZSBQaGFudG9tLi4uCi0gKi8KLXN0YXRpYyB2b2lkIG5ldHhlbl9wcm9jZXNzX3JjdihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHhpZCwKLQkJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjLCBzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmZyYWdfZGVzYykKK3N0YXRpYyBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqCituZXR4ZW5fcHJvY2Vzc19yY3Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlpbnQgcmluZywgaW50IGluZGV4LCBpbnQgbGVuZ3RoLCBpbnQgY2tzdW0sIGludCBwa3Rfb2Zmc2V0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTY0IHN0c19kYXRhID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YSk7Ci0JaW50IGluZGV4ID0gbmV0eGVuX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhKTsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXSk7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgbGVuZ3RoID0gbmV0eGVuX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEpOwotCXUzMiBkZXNjX2N0eDsKLQl1MTYgcGt0X29mZnNldCA9IDAsIGNrc3VtOwotCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAotCWRlc2NfY3R4ID0gbmV0eGVuX2dldF9zdHNfdHlwZShzdHNfZGF0YSk7Ci0JaWYgKHVubGlrZWx5KGRlc2NfY3R4ID49IE5VTV9SQ1ZfREVTQ19SSU5HUykpIHsKLQkJcHJpbnRrKCIlczogJXMgQmFkIFJjdiBkZXNjcmlwdG9yIHJpbmdcbiIsCi0JCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQorCWlmICh1bmxpa2VseShpbmRleCA+IHJkc19yaW5nLT5udW1fZGVzYykpCisJCXJldHVybiBOVUxMOwogCi0JcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tkZXNjX2N0eF07Ci0JaWYgKHVubGlrZWx5KGluZGV4ID4gcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KSkgewotCQlEUFJJTlRLKEVSUiwgIkdvdCBhIGJ1ZmZlciBpbmRleDoleCBNYXggaXMgJXhcbiIsCi0JCQlpbmRleCwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKLQkJcmV0dXJuOwotCX0KIAlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOwotCWlmIChkZXNjX2N0eCA9PSBSQ1ZfREVTQ19MUk9fQ1RYSUQpIHsKLQkJYnVmZmVyLT5scm9fY3VycmVudF9mcmFncysrOwotCQlpZiAobmV0eGVuX2dldF9zdHNfZGVzY19scm9fbGFzdF9mcmFnKGRlc2MpKSB7Ci0JCQlidWZmZXItPmxyb19leHBlY3RlZF9mcmFncyA9Ci0JCQkgICAgbmV0eGVuX2dldF9zdHNfZGVzY19scm9fY250KGRlc2MpOwotCQkJYnVmZmVyLT5scm9fbGVuZ3RoID0gbGVuZ3RoOwotCQl9Ci0JCWlmIChidWZmZXItPmxyb19jdXJyZW50X2ZyYWdzICE9IGJ1ZmZlci0+bHJvX2V4cGVjdGVkX2ZyYWdzKSB7Ci0JCQlpZiAoYnVmZmVyLT5scm9fZXhwZWN0ZWRfZnJhZ3MgIT0gMCkgewotCQkJCXByaW50aygiTFJPOiAocmVmaGFuZGxlOiV4KSByZWN2IGZyYWcuICIKLQkJCQkgICAgICAgIndhaXQgZm9yIGxhc3QuIGZsYWdzOiAleCBleHBlY3RlZDolZCAiCi0JCQkJICAgICAgICJoYXZlOiVkXG4iLCBpbmRleCwKLQkJCQkgICAgICAgbmV0eGVuX2dldF9zdHNfZGVzY19scm9fbGFzdF9mcmFnKGRlc2MpLAotCQkJCSAgICAgICBidWZmZXItPmxyb19leHBlY3RlZF9mcmFncywKLQkJCQkgICAgICAgYnVmZmVyLT5scm9fY3VycmVudF9mcmFncyk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlja3N1bSA9IG5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YSk7CiAKIAlza2IgPSBuZXR4ZW5fcHJvY2Vzc19yeGJ1ZihhZGFwdGVyLCByZHNfcmluZywgaW5kZXgsIGNrc3VtKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuOworCQlyZXR1cm4gYnVmZmVyOwogCi0JaWYgKGRlc2NfY3R4ID09IFJDVl9ERVNDX0xST19DVFhJRCkgewotCQkvKiBUcnVlIGxlbmd0aCB3YXMgb25seSBhdmFpbGFibGUgb24gdGhlIGxhc3QgcGt0ICovCi0JCXNrYl9wdXQoc2tiLCBidWZmZXItPmxyb19sZW5ndGgpOwotCX0gZWxzZSB7Ci0JCWlmIChsZW5ndGggPiByZHNfcmluZy0+c2tiX3NpemUpCi0JCQlza2JfcHV0KHNrYiwgcmRzX3JpbmctPnNrYl9zaXplKTsKLQkJZWxzZQotCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CisJaWYgKGxlbmd0aCA+IHJkc19yaW5nLT5za2Jfc2l6ZSkKKwkJc2tiX3B1dChza2IsIHJkc19yaW5nLT5za2Jfc2l6ZSk7CisJZWxzZQorCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAotCQlwa3Rfb2Zmc2V0ID0gbmV0eGVuX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YSk7Ci0JCWlmIChwa3Rfb2Zmc2V0KQotCQkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKLQl9CisKKwlpZiAocGt0X29mZnNldCkKKwkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQkvKgotCSAqIHJ4IGJ1ZmZlciBjaGFpbmluZyBpcyBkaXNhYmxlZCwgd2FsayBhbmQgZnJlZQotCSAqIGFueSBzcHVyaW91cyByeCBidWZmZXIgY2hhaW4uCi0JICovCi0JaWYgKGZyYWdfZGVzYykgewotCQl1MTYgaSwgbnJfZnJhZ3MgPSBkZXNjLT5ucl9mcmFnczsKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgaSsrKSB7Ci0JCQlpbmRleCA9IGxlMTZfdG9fY3B1KGZyYWdfZGVzYy0+ZnJhZ19oYW5kbGVzW2ldKTsKLQkJCXNrYiA9IG5ldHhlbl9wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsCi0JCQkJCXJkc19yaW5nLCBpbmRleCwgY2tzdW0pOwotCQkJaWYgKHNrYikKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4ZHJvcHBlZCsrOwotCX0gZWxzZSB7Ci0JCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJYWRhcHRlci0+c3RhdHMubm9fcmN2Kys7CisJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CiAKLQkJYWRhcHRlci0+c3RhdHMubm9fcmN2Kys7Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4Ynl0ZXMgKz0gbGVuZ3RoOwotCX0KKwlyZXR1cm4gYnVmZmVyOwogfQogCi0vKiBQcm9jZXNzIFJlY2VpdmUgc3RhdHVzIHJpbmcgKi8KLXUzMiBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHhpZCwgaW50IG1heCkKKyNkZWZpbmUgbmV0eGVuX21lcmdlX3J4X2J1ZmZlcnMobGlzdCwgaGVhZCkgXAorCWRvIHsgbGlzdF9zcGxpY2VfdGFpbF9pbml0KGxpc3QsIGhlYWQpOyB9IHdoaWxlICgwKTsKKworaW50CituZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpCiB7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJihhZGFwdGVyLT5yZWN2X2N0eFtjdHhpZF0pOwotCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkID0gcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkOwotCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYywgKmZyYWdfZGVzYzsKLQl1MzIgY29uc3VtZXIgPSByZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyOwotCWludCBjb3VudCA9IDAsIHJpbmc7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2M7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4YnVmOworCisJdTMyIGNvbnN1bWVyID0gc2RzX3JpbmctPmNvbnN1bWVyOworCisJaW50IGNvdW50ID0gMDsKIAl1NjQgc3RzX2RhdGE7Ci0JdTE2IG9wY29kZTsKKwlpbnQgb3Bjb2RlLCByaW5nLCBpbmRleCwgbGVuZ3RoLCBja3N1bSwgcGt0X29mZnNldDsKIAogCXdoaWxlIChjb3VudCA8IG1heCkgewotCQlkZXNjID0gJmRlc2NfaGVhZFtjb25zdW1lcl07Ci0JCWlmICghKG5ldHhlbl9nZXRfc3RzX293bmVyKGRlc2MpICYgU1RBVFVTX09XTkVSX0hPU1QpKSB7Ci0JCQlEUFJJTlRLKEVSUiwgImRlc2MgJXAgb3duZWRieSAleFxuIiwgZGVzYywKLQkJCQluZXR4ZW5fZ2V0X3N0c19vd25lcihkZXNjKSk7Ci0JCQlicmVhazsKLQkJfQotCisJCWRlc2MgPSAmc2RzX3JpbmctPmRlc2NfaGVhZFtjb25zdW1lcl07CiAJCXN0c19kYXRhID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YSk7CisKKwkJaWYgKCEoc3RzX2RhdGEgJiBTVEFUVVNfT1dORVJfSE9TVCkpCisJCQlicmVhazsKKworCQlyaW5nICAgPSBuZXR4ZW5fZ2V0X3N0c190eXBlKHN0c19kYXRhKTsKKwkJaWYgKHJpbmcgPiBSQ1ZfUklOR19KVU1CTykKKwkJCWNvbnRpbnVlOworCiAJCW9wY29kZSA9IG5ldHhlbl9nZXRfc3RzX29wY29kZShzdHNfZGF0YSk7Ci0JCWZyYWdfZGVzYyA9IE5VTEw7Ci0JCWlmIChvcGNvZGUgPT0gTkVUWEVOX05JQ19SWFBLVF9ERVNDKSB7Ci0JCQlpZiAoZGVzYy0+bnJfZnJhZ3MpIHsKLQkJCQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLAotCQkJCQkJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwotCQkJCWZyYWdfZGVzYyA9ICZkZXNjX2hlYWRbY29uc3VtZXJdOwotCQkJCW5ldHhlbl9zZXRfc3RzX293bmVyKGZyYWdfZGVzYywKLQkJCQkJCVNUQVRVU19PV05FUl9QSEFOVE9NKTsKLQkJCX0KLQkJfQogCi0JCW5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCBjdHhpZCwgZGVzYywgZnJhZ19kZXNjKTsKKwkJaW5kZXggID0gbmV0eGVuX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhKTsKKwkJbGVuZ3RoID0gbmV0eGVuX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEpOworCQlja3N1bSAgPSBuZXR4ZW5fZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEpOworCQlwa3Rfb2Zmc2V0ID0gbmV0eGVuX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YSk7CiAKLQkJbmV0eGVuX3NldF9zdHNfb3duZXIoZGVzYywgU1RBVFVTX09XTkVSX1BIQU5UT00pOworCQlyeGJ1ZiA9IG5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCByaW5nLCBpbmRleCwKKwkJCQlsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0KTsKIAotCQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLAotCQkJCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJaWYgKHJ4YnVmKQorCQkJbGlzdF9hZGRfdGFpbCgmcnhidWYtPmxpc3QsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKTsKKworCQlkZXNjLT5zdGF0dXNfZGVzY19kYXRhID0gY3B1X3RvX2xlNjQoU1RBVFVTX09XTkVSX1BIQU5UT00pOworCisJCWNvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoY29uc3VtZXIsIHNkc19yaW5nLT5udW1fZGVzYyk7CiAJCWNvdW50Kys7CiAJfQotCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspCi0JCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnNfbm9kYihhZGFwdGVyLCBjdHhpZCwgcmluZyk7CiAKLQkvKiB1cGRhdGUgdGhlIGNvbnN1bWVyIGluZGV4IGluIHBoYW50b20gKi8KKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9CisJCQkmYWRhcHRlci0+cmVjdl9jdHgucmRzX3JpbmdzW3JpbmddOworCisJCWlmICghbGlzdF9lbXB0eSgmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSkpIHsKKwkJCWxpc3RfZm9yX2VhY2goY3VyLCAmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSkgeworCQkJCXJ4YnVmID0gbGlzdF9lbnRyeShjdXIsCisJCQkJCQlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CisJCQkJbmV0eGVuX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgcnhidWYpOworCQkJfQorCQkJc3Bpbl9sb2NrKCZyZHNfcmluZy0+bG9jayk7CisJCQluZXR4ZW5fbWVyZ2VfcnhfYnVmZmVycygmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSwKKwkJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZyZHNfcmluZy0+bG9jayk7CisJCX0KKworCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoYWRhcHRlciwgcmRzX3JpbmcpOworCX0KKwogCWlmIChjb3VudCkgewotCQlyZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyID0gY29uc3VtZXI7Ci0KLQkJLyogV2luZG93ID0gMSAqLworCQlzZHNfcmluZy0+Y29uc3VtZXIgPSBjb25zdW1lcjsKIAkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCXJlY3ZfY3R4LT5jcmJfc3RzX2NvbnN1bWVyLCBjb25zdW1lcik7CisJCQkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIsIGNvbnN1bWVyKTsKIAl9CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0xMzY2LDcgKzk5OCwxMSBAQAogCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKmZyYWc7CiAJaW50IGRvbmUgPSAwOwogCisJaWYgKCFzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spKQorCQlyZXR1cm4gMTsKKwogCWxhc3RfY29uc3VtZXIgPSBhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcjsKKwliYXJyaWVyKCk7IC8qIGNtZF9jb25zdW1lciBjYW4gY2hhbmdlIHVuZGVybmVhdGggKi8KIAljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7CiAKIAl3aGlsZSAobGFzdF9jb25zdW1lciAhPSBjb25zdW1lcikgewpAQCAtMTM4OSw3ICsxMDI1LDcgQEAKIAkJfQogCiAJCWxhc3RfY29uc3VtZXIgPSBnZXRfbmV4dF9pbmRleChsYXN0X2NvbnN1bWVyLAotCQkJCQkgICAgICAgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCQkJCQkgICAgICAgYWRhcHRlci0+bnVtX3R4ZCk7CiAJCWlmICgrK2NvdW50ID49IE1BWF9TVEFUVVNfSEFORExFKQogCQkJYnJlYWs7CiAJfQpAQCAtMTQxNyw3NSArMTA1Myw1NSBAQAogCSAqIFRoZXJlIGlzIHN0aWxsIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gYW5kIHRoZSBob3N0IGNvdWxkIG1pc3MgYW4KIAkgKiBpbnRlcnJ1cHQuIFRoZSBjYXJkIGhhcyB0byB0YWtlIGNhcmUgb2YgdGhpcy4KIAkgKi8KKwliYXJyaWVyKCk7IC8qIGNtZF9jb25zdW1lciBjYW4gY2hhbmdlIHVuZGVybmVhdGggKi8KIAljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7CiAJZG9uZSA9IChsYXN0X2NvbnN1bWVyID09IGNvbnN1bWVyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiAKIAlyZXR1cm4gKGRvbmUpOwogfQogCi0vKgotICogbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyBwdXRzIGJ1ZmZlciBpbiB0aGUgUGhhbnRvbSBtZW1vcnkKLSAqLwotdm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGN0eCwgdTMyIHJpbmdpZCkKK3ZvaWQKK25ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eF0pOwotCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9IE5VTEw7Ci0JdWludCBwcm9kdWNlcjsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IGNvdW50ID0gMDsKKwlpbnQgcHJvZHVjZXIsIGNvdW50ID0gMDsKIAluZXR4ZW5fY3R4X21zZyBtc2cgPSAwOwotCWRtYV9hZGRyX3QgZG1hOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKLQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmdpZF07Ci0KIAlwcm9kdWNlciA9IHJkc19yaW5nLT5wcm9kdWNlcjsKLQloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CiAKLQkvKiBXZSBjYW4gc3RhcnQgd3JpdGluZyByeCBkZXNjcmlwdG9ycyBpbnRvIHRoZSBwaGFudG9tIG1lbW9yeS4gKi8KKwlzcGluX2xvY2soJnJkc19yaW5nLT5sb2NrKTsKKwloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihyZHNfcmluZy0+c2tiX3NpemUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCWJyZWFrOwotCQl9CisJCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIsIGxpc3QpOwogCi0JCWlmICghYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoKQotCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKLQotCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCi0JCQkJcmRzX3JpbmctPmRtYV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYSkpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlicmVhazsKKwkJaWYgKCFidWZmZXItPnNrYikgeworCQkJaWYgKG5ldHhlbl9hbGxvY19yeF9za2IoYWRhcHRlciwgcmRzX3JpbmcsIGJ1ZmZlcikpCisJCQkJYnJlYWs7CiAJCX0KIAogCQljb3VudCsrOwotCQlidWZmZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAKLQkJYnVmZmVyLT5za2IgPSBza2I7Ci0JCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0JVU1k7Ci0JCWJ1ZmZlci0+ZG1hID0gZG1hOwotCiAJCS8qIG1ha2UgYSByY3YgZGVzY3JpcHRvciAgKi8KIAkJcGRlc2MgPSAmcmRzX3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07Ci0JCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGRtYSk7CisJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKIAkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOwogCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CiAKLQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50KTsKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgcmRzX3JpbmctPm51bV9kZXNjKTsKIAl9Ci0JLyogaWYgd2UgZGlkIGFsbG9jYXRlIGJ1ZmZlcnMsIHRoZW4gd3JpdGUgdGhlIGNvdW50IHRvIFBoYW50b20gKi8KKwlzcGluX3VubG9jaygmcmRzX3JpbmctPmxvY2spOworCiAJaWYgKGNvdW50KSB7CiAJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQkJLyogV2luZG93ID0gMSAqLwogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIsCi0JCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudC0xKSk7CisJCQkJKHByb2R1Y2VyLTEpICYgKHJkc19yaW5nLT5udW1fZGVzYy0xKSk7CiAKIAkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgewogCQkJLyoKQEAgLTE0OTYsOSArMTExMiw4IEBACiAJCQluZXR4ZW5fc2V0X21zZ19wZWdfaWQobXNnLCBORVRYRU5fUkNWX1BFR19EQl9JRCk7CiAJCQluZXR4ZW5fc2V0X21zZ19wcml2aWQobXNnKTsKIAkJCW5ldHhlbl9zZXRfbXNnX2NvdW50KG1zZywKLQkJCQkJICAgICAoKHByb2R1Y2VyIC0KLQkJCQkJICAgICAgIDEpICYgKHJkc19yaW5nLT4KLQkJCQkJCSAgICAgbWF4X3J4X2Rlc2NfY291bnQgLSAxKSkpOworCQkJCQkgICAgICgocHJvZHVjZXIgLSAxKSAmCisJCQkJCSAgICAgIChyZHNfcmluZy0+bnVtX2Rlc2MgLSAxKSkpOwogCQkJbmV0eGVuX3NldF9tc2dfY3R4aWQobXNnLCBhZGFwdGVyLT5wb3J0bnVtKTsKIAkJCW5ldHhlbl9zZXRfbXNnX29wY29kZShtc2csIE5FVFhFTl9SQ1ZfUFJPRFVDRVIocmluZ2lkKSk7CiAJCQl3cml0ZWwobXNnLApAQCAtMTUwOCw2OCArMTEyMyw0OSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJdWludDMyX3QgY3R4LCB1aW50MzJfdCByaW5naWQpCitzdGF0aWMgdm9pZAorbmV0eGVuX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4XSk7Ci0Jc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nID0gTlVMTDsKLQl1MzIgcHJvZHVjZXI7CiAJc3RydWN0IHJjdl9kZXNjICpwZGVzYzsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqYnVmZmVyOwotCWludCBjb3VudCA9IDA7CisJaW50IHByb2R1Y2VyLCBjb3VudCA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQlkbWFfYWRkcl90IGRtYTsKLQotCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ2lkXTsKIAogCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOworCWlmICghc3Bpbl90cnlsb2NrKCZyZHNfcmluZy0+bG9jaykpCisJCXJldHVybjsKKwogCWhlYWQgPSAmcmRzX3JpbmctPmZyZWVfbGlzdDsKLQkvKiBXZSBjYW4gc3RhcnQgd3JpdGluZyByeCBkZXNjcmlwdG9ycyBpbnRvIHRoZSBwaGFudG9tIG1lbW9yeS4gKi8KIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHJkc19yaW5nLT5za2Jfc2l6ZSk7Ci0JCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJYnJlYWs7Ci0JCX0KKwkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciwgbGlzdCk7CiAKLQkJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCi0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCi0JCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKLQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgZG1hKSkgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCWJyZWFrOworCQlpZiAoIWJ1ZmZlci0+c2tiKSB7CisJCQlpZiAobmV0eGVuX2FsbG9jX3J4X3NrYihhZGFwdGVyLCByZHNfcmluZywgYnVmZmVyKSkKKwkJCQlicmVhazsKIAkJfQogCiAJCWNvdW50Kys7Ci0JCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIsIGxpc3QpOwogCQlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKIAotCQlidWZmZXItPnNrYiA9IHNrYjsKLQkJYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfQlVTWTsKLQkJYnVmZmVyLT5kbWEgPSBkbWE7Ci0KIAkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLwogCQlwZGVzYyA9ICZyZHNfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKIAkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOwogCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CiAJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKIAotCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bnVtX2Rlc2MpOwogCX0KIAotCS8qIGlmIHdlIGRpZCBhbGxvY2F0ZSBidWZmZXJzLCB0aGVuIHdyaXRlIHRoZSBjb3VudCB0byBQaGFudG9tICovCiAJaWYgKGNvdW50KSB7CiAJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQkJLyogV2luZG93ID0gMSAqLwogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciwKLQkJCQkocHJvZHVjZXItMSkgJiAocmRzX3JpbmctPm1heF9yeF9kZXNjX2NvdW50LTEpKTsKKwkJCQkocHJvZHVjZXIgLSAxKSAmIChyZHNfcmluZy0+bnVtX2Rlc2MgLSAxKSk7CiAJCQl3bWIoKTsKIAl9CisJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKIH0KIAogdm9pZCBuZXR4ZW5fbmljX2NsZWFyX3N0YXRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCBjMTcyYjZlLi4xYWY0NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiAgTWFpbiBzb3VyY2UgZmlsZSBmb3IgTmV0WGVuIE5JQyBEcml2ZXIgb24gTGludXgKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTk3LDIwICs5NCw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZXR4ZW5fcGNpX3RibCk7CiAKLS8qCi0gKiBJbiBuZXR4ZW5fbmljX2Rvd24oKSwgd2UgbXVzdCB3YWl0IGZvciBhbnkgcGVuZGluZyBjYWxsYmFjayByZXF1ZXN0cyBpbnRvCi0gKiBuZXR4ZW5fd2F0Y2hkb2dfdGFzaygpIHRvIGNvbXBsZXRlOyBlZyBvdGhlcndpc2UgdGhlIHdhdGNoZG9nX3RpbWVyIGNvdWxkIGJlCi0gKiByZWVuYWJsZWQgcmlnaHQgYWZ0ZXIgaXQgaXMgZGVsZXRlZCBpbiBuZXR4ZW5fbmljX2Rvd24oKS4KLSAqIEZMVVNIX1NDSEVEVUxFRF9XT1JLKCkgIGRvZXMgdGhpcyBzeW5jaHJvbml6YXRpb24uCi0gKgotICogTm9ybWFsbHksIHNjaGVkdWxlX3dvcmsoKS9mbHVzaF9zY2hlZHVsZWRfd29yaygpIGNvdWxkIGhhdmUgd29ya2VkLCBidXQKLSAqIG5ldHhlbl9uaWNfY2xvc2UoKSBpcyBpbnZva2VkIHdpdGgga2VybmVsIHJ0bmwgbG9jayBoZWxkLiBuZXRpZl9jYXJyaWVyX29mZigpCi0gKiBjYWxsIGluIG5ldHhlbl9uaWNfY2xvc2UoKSB0cmlnZ2VycyBhIHNjaGVkdWxlX3dvcmsoJmxpbmt3YXRjaF93b3JrKSwgYW5kIGEKLSAqIHN1YnNlcXVlbnQgY2FsbCB0byBmbHVzaF9zY2hlZHVsZWRfd29yaygpIGluIG5ldHhlbl9uaWNfZG93bigpIHdvdWxkIGNhdXNlCi0gKiBsaW5rd2F0Y2hfZXZlbnQoKSB0byBiZSBleGVjdXRlZCB3aGljaCBhbHNvIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHJ0bmwKLSAqIGxvY2sgdGh1cyBjYXVzaW5nIGEgZGVhZGxvY2suCi0gKi8KLQogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR4ZW5fd29ya3E7CiAjZGVmaW5lIFNDSEVEVUxFX1dPUksodHApCXF1ZXVlX3dvcmsobmV0eGVuX3dvcmtxLCB0cCkKICNkZWZpbmUgRkxVU0hfU0NIRURVTEVEX1dPUksoKQlmbHVzaF93b3JrcXVldWUobmV0eGVuX3dvcmtxKQpAQCAtMTUyLDEzMCArMTM1LDE0OCBAQAogCiBzdGF0aWMgc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHJbXSA9IE5YX0xFR0FDWV9JTlRSX0NPTkZJRzsKIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQogewotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgYWRhcHRlci0+Y3JiX2ludHJfbWFzaywgMCk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZW5hYmxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19lbmFibGVfaW50KHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKIHsKLQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIGFkYXB0ZXItPmNyYl9pbnRyX21hc2ssIDB4MSk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAweDEpOwogCiAJaWYgKCFORVRYRU5fSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSkKIAkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAogCQkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywgMHhmYmZmKTsKIH0KIAorc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2FkZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gKG51bV9vbmxpbmVfY3B1cygpID49IDQpID8gNCA6IDI7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gMTsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmc2RzX3JpbmctPm5hcGksCisJCQkJbmV0eGVuX25pY19wb2xsLCBORVRYRU5fTkVUREVWX1dFSUdIVCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25hcGlfZW5hYmxlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQluYXBpX2VuYWJsZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2Rpc2FibGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc2RzX3JpbmcpOworCQluYXBpX2Rpc2FibGUoJnNkc19yaW5nLT5uYXBpKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbnhfc2V0X2RtYV9tYXNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWludDhfdCByZXZpc2lvbl9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IGVycjsKLQl1aW50NjRfdCBtYXNrOworCXVpbnQ2NF90IG1hc2ssIGNtYXNrOwogCi0jaWZkZWYgQ09ORklHX0lBNjQKLQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotI2Vsc2UKLQlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApIHsKLQkJLyogc2hvdWxkIGdvIHRvIERNQV82NEJJVF9NQVNLICovCi0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AzX0EyKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AyX0MxKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM1QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzVCSVRfTUFTSzsKLQl9IGVsc2UgewotCQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotCQltYXNrID0gRE1BXzMyQklUX01BU0s7Ci0JCWdvdG8gc2V0XzMyX2JpdF9tYXNrOwotCX0KKwlhZGFwdGVyLT5wY2lfdXNpbmdfZGFjID0gMDsKIAorCW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKIAkvKgogCSAqIENvbnNpc3RlbnQgRE1BIG1hc2sgaXMgc2V0IHRvIDMyIGJpdCBiZWNhdXNlIGl0IGNhbm5vdCBiZSBzZXQgdG8KIAkgKiAzNSBiaXRzLiBGb3IgUDMgYWxzbyBsZWF2ZSBpdCBhdCAzMiBiaXRzIGZvciBub3cuIE9ubHkgdGhlIHJpbmdzCiAJICogY29tZSBvZmYgdGhpcyBwb29sLgogCSAqLworCWNtYXNrID0gRE1BXzMyQklUX01BU0s7CisKKyNpZm5kZWYgQ09ORklHX0lBNjQKKwlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApCisJCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKKwllbHNlIGlmIChyZXZpc2lvbl9pZCA9PSBOWF9QMl9DMSkKKwkJbWFzayA9IERNQV8zNUJJVF9NQVNLOworI2VuZGlmCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzaykgPT0gMCAmJgotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spID09IDApIHsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIGNtYXNrKSA9PSAwKSB7CiAJCWFkYXB0ZXItPnBjaV91c2luZ19kYWMgPSAxOwogCQlyZXR1cm4gMDsKIAl9Ci1zZXRfMzJfYml0X21hc2s6Ci0jZW5kaWYgLyogQ09ORklHX0lBNjQgKi8KIAotCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmICghZXJyKQotCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmIChlcnIpIHsKLQkJRFBSSU5USyhFUlIsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nOiVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOworfQorCisvKiBVcGRhdGUgYWRkcmVzc2FibGUgcmFuZ2UgaWYgZmlybXdhcmUgc3VwcG9ydHMgaXQgKi8KK3N0YXRpYyBpbnQKK254X3VwZGF0ZV9kbWFfbWFzayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNoYW5nZSwgc2hpZnQsIGVycjsKKwl1aW50NjRfdCBtYXNrLCBvbGRfbWFzazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwljaGFuZ2UgPSAwOworCisJc2hpZnQgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIENSQl9ETUFfU0hJRlQpOworCWlmIChzaGlmdCA+PSAzMikKKwkJcmV0dXJuIDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSAmJiAoc2hpZnQgPiA5KSkKKwkJY2hhbmdlID0gMTsKKwllbHNlIGlmICgoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID09IE5YX1AyX0MxKSAmJiAoc2hpZnQgPD0gNCkpCisJCWNoYW5nZSA9IDE7CisKKwlpZiAoY2hhbmdlKSB7CisJCW9sZF9tYXNrID0gcGRldi0+ZG1hX21hc2s7CisJCW1hc2sgPSAoMVVMTDw8KDMyK3NoaWZ0KSkgLSAxOworCisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzayk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBvbGRfbWFzayk7CiAJfQogCi0JYWRhcHRlci0+cGNpX3VzaW5nX2RhYyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldHhlbl9jaGVja19vcHRpb25zKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19ITUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfWEdfTE9NOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDRfTFA6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19JTUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9QTFVTOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9RVDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19TRlBfQ1Q6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfWEZQOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UOgorCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKKwkJYWRhcHRlci0+bnVtX3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCWVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJCWFkYXB0ZXItPm51bV9yeGQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19ITUVaOgorCWVsc2UKIAkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQlicmVhazsKIAotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfNF9HQjoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0JfTU06Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQkJYnJlYWs7CisJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlNfSE9TVDsKKwlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUzsKKwlhZGFwdGVyLT5udW1fbHJvX3J4ZCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwogCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjM1XzRHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8yRzoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQllbHNlCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBib2FyZCB0eXBlKDB4JXgpXG4iLAotCQkJCWFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1Q7Ci0JYWRhcHRlci0+bWF4X2p1bWJvX3J4X2Rlc2NfY291bnQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOwotCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwotCi0JYWRhcHRlci0+bWF4X3Bvc3NpYmxlX3Jzc19yaW5ncyA9IDE7CiAJcmV0dXJuOwogfQogCkBAIC0zMzYsNyArMzM3LDcgQEAKIHsKIAl1MzIgdmFsLCBkYXRhOwogCi0JdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGU7CisJdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkX3R5cGU7CiAJaWYgKCh2YWwgPT0gTkVUWEVOX0JSRFRZUEVfUDNfSE1FWikgfHwKIAkJKHZhbCA9PSBORVRYRU5fQlJEVFlQRV9QM19YR19MT00pKSB7CiAJCWlmIChwb3J0X21vZGUgPT0gTkVUWEVOX1BPUlRfTU9ERV84MDJfM19BUCkgewpAQCAtNDU0LDQyICs0NTUsNDU4IEBACiAjZW5kaWYKIH07CiAKLS8qCi0gKiBuZXR4ZW5fbmljX3Byb2JlKCkKLSAqCi0gKiBUaGUgTGludXggc3lzdGVtIHdpbGwgaW52b2tlIHRoaXMgYWZ0ZXIgaWRlbnRpZnlpbmcgdGhlIHZlbmRvciBJRCBhbmQKLSAqIGRldmljZSBJZCBpbiB0aGUgcGNpX3RibCBzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuCi0gKgotICogQSBxdWFkIHBvcnQgY2FyZCBoYXMgb25lIG9wZXJhdGlvbmFsIFBDSSBjb25maWcgc3BhY2UsIChmdW5jdGlvbiAwKSwKLSAqIHdoaWNoIGlzIHVzZWQgdG8gYWNjZXNzIGFsbCBmb3VyIHBvcnRzLgotICoKLSAqIFRoaXMgcm91dGluZSB3aWxsIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIsIGFuZCBzZXR1cCB0aGUgZ2xvYmFsIHBhcmFtZXRlcnMKLSAqIGFsb25nIHdpdGggdGhlIHBvcnQncyBzcGVjaWZpYyBzdHJ1Y3R1cmUuCi0gKi8KK3N0YXRpYyB2b2lkCituZXR4ZW5fc2V0dXBfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgKmxlZ2FjeV9pbnRycDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+KE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQgfCBORVRYRU5fTklDX01TSVhfRU5BQkxFRCk7CisJYWRhcHRlci0+aW50cl9zY2hlbWUgPSAtMTsKKwlhZGFwdGVyLT5tc2lfbW9kZSA9IC0xOworCisJaWYgKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkKKwkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody5wY2lfZnVuY107CisJZWxzZQorCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbMF07CisJYWRhcHRlci0+bGVnYWN5X2ludHIuaW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OworCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnID0gbGVnYWN5X2ludHJwLT50Z3Rfc3RhdHVzX3JlZzsKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3RfbWFza19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9tYXNrX3JlZzsKKwlhZGFwdGVyLT5sZWdhY3lfaW50ci5wY2lfaW50X3JlZyA9IGxlZ2FjeV9pbnRycC0+cGNpX2ludF9yZWc7CisKKwluZXR4ZW5fc2V0X21zaXhfYml0KHBkZXYsIDApOworCisJaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7CisKKwkJbmV0eGVuX2luaXRfbXNpeF9lbnRyaWVzKGFkYXB0ZXIpOworCQlpZiAocGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKKwkJCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSkKKwkJCWdvdG8gcmVxdWVzdF9tc2k7CisKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQ7CisJCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMSk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKKworCX0gZWxzZSB7CityZXF1ZXN0X21zaToKKwkJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7CisJCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKKwkJfSBlbHNlCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOworCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOworCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl90ZWFyZG93bl9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQorCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fY2xlYW51cF9wY2lfbWFwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+YWh3LmRiX2Jhc2UgIT0gTlVMTCkKKwkJaW91bm1hcChhZGFwdGVyLT5haHcuZGJfYmFzZSk7CisJaWYgKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgIT0gTlVMTCkKKwkJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKKwlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTEpOworCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UyICE9IE5VTEwpCisJCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMik7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9zZXR1cF9wY2lfbWFwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIwID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIxID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKm1lbV9wdHIyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmRiX3B0ciA9IE5VTEw7CisKKwl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4gPSAwLCBwY2lfbGVuMCA9IDA7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOworCisJaW50IGVyciA9IDA7CisKKwkvKgorCSAqIFNldCB0aGUgQ1JCIHdpbmRvdyB0byBpbnZhbGlkLiBJZiBhbnkgcmVnaXN0ZXIgaW4gd2luZG93IDAgaXMKKwkgKiBhY2Nlc3NlZCBpdCBzaG91bGQgc2V0IHRoZSB3aW5kb3cgdG8gMCBhbmQgdGhlbiByZXNldCBpdCB0byAxLgorCSAqLworCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OworCWFkYXB0ZXItPmFody5xZHJfc25fd2luZG93ID0gLTE7CisJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSAtMTsKKworCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLworCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLworCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCXBjaV9sZW4wID0gMDsKKworCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOworCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOworCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKKwlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKKwlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOworCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKKworCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCisJaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7CisJCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKKwkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlICsgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsCisJCQkJU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7CisJCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQsCisJCQkJVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKKwl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8zMk1CX1NJWkUpIHsKKwkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlLCBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKKwkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCAtCisJCQlTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKKwl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8yTUJfU0laRSkgeworCQlhZGFwdGVyLT5od193cml0ZV93eCA9IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk07CisJCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk07CisJCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzJNOworCQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlID0KKwkJCW5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8yTTsKKwkJYWRhcHRlci0+cGNpX3JlYWRfbm9ybWFsaXplID0gbmV0eGVuX25pY19wY2lfcmVhZF9ub3JtYWxpemVfMk07CisJCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPQorCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfbm9ybWFsaXplXzJNOworCQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk07CisJCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzJNOworCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlID0gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzJNOworCisJCW1lbV9wdHIwID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOworCQlpZiAobWVtX3B0cjAgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBQQ0kgYmFyIDBcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcGNpX2xlbjAgPSBtZW1fbGVuOworCisJCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKKwkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOworCisJCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCisJCQkocGNpX2Z1bmMgKiAweDIwKTsKKwkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOworCQlpZiAocGNpX2Z1bmMgPCA0KQorCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0gKHBjaV9mdW5jICogMHgyMCk7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9CisJCQkJCTB4QTAgKyAoKHBjaV9mdW5jIC0gNCkgKiAweDEwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOworCisJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCA9IG1lbV9wdHIwOworCWFkYXB0ZXItPmFody5wY2lfbGVuMCA9IHBjaV9sZW4wOworCWFkYXB0ZXItPmFody5wY2lfYmFzZTEgPSBtZW1fcHRyMTsKKwlhZGFwdGVyLT5haHcucGNpX2Jhc2UyID0gbWVtX3B0cjI7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJZ290byBza2lwX2Rvb3JiZWxsOworCisJZGJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsJLyogZG9vcmJlbGwgaXMgb24gYmFyIDQgKi8KKwlkYl9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpOworCisJaWYgKGRiX2xlbiA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3JiZWxsIGlzIGRpc2FibGVkXG4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZGJfcHRyID0gaW9yZW1hcChkYl9iYXNlLCBORVRYRU5fREJfTUFQU0laRV9CWVRFUyk7CisJaWYgKCFkYl9wdHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGRvb3JiZWxsIG1hcC4iLAorCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCitza2lwX2Rvb3JiZWxsOgorCWFkYXB0ZXItPmFody5kYl9iYXNlID0gZGJfcHRyOworCWFkYXB0ZXItPmFody5kYl9sZW4gPSBkYl9sZW47CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fc3RhcnRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCB2YWwsIGVyciwgZmlyc3RfYm9vdDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpbnQgZmlyc3RfZHJpdmVyID0gMDsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlpZiAoYWRhcHRlci0+YWh3LnBjaV9mdW5jID09IDApCisJCQlmaXJzdF9kcml2ZXIgPSAxOworCX0gZWxzZSB7CisJCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCisJCQlmaXJzdF9kcml2ZXIgPSAxOworCX0KKworCWlmICghZmlyc3RfZHJpdmVyKQorCQlyZXR1cm4gMDsKKworCWZpcnN0X2Jvb3QgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKKwkJCU5FVFhFTl9DQU1fUkFNKDB4MWZjKSk7CisKKwllcnIgPSBuZXR4ZW5fY2hlY2tfaHdfaW5pdChhZGFwdGVyLCBmaXJzdF9ib290KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIGluIGluaXQgSFcgaW5pdCBzZXF1ZW5jZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgeworCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCisJCQkJCUNSQl9DTURQRUdfU1RBVEUsIDApOworCQluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBDUkJfRE1BX1NISUZULCAweDU1NTU1NTU1KTsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJbmV0eGVuX3NldF9wb3J0X21vZGUoYWRhcHRlcik7CisKKwluZXR4ZW5fbG9hZF9maXJtd2FyZShhZGFwdGVyKTsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisKKwkJLyogSW5pdGlhbGl6ZSBtdWx0aWNhc3QgYWRkciBwb29sIG93bmVycyAqLworCQl2YWwgPSAweDc2NTQ7CisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKKwkJCXZhbCB8PSAweDBmMDAwMDAwOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQlORVRYRU5fTUFDX0FERFJfQ05UTF9SRUcsIHZhbCk7CisKKwl9CisKKwllcnIgPSBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgorCSAqLworCXZhbCA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKKwkJfCAoKF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDw8IDgpKQorCQl8IChfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OKTsKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgdmFsKTsKKworCS8qIEhhbmRzaGFrZSB3aXRoIHRoZSBjYXJkIGJlZm9yZSB3ZSByZWdpc3RlciB0aGUgZGV2aWNlcy4gKi8KKwllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOworCWlmIChlcnIpIHsKKwkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3JlcXVlc3RfaXJxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpcnFfaGFuZGxlcl90IGhhbmRsZXI7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCWludCBlcnIsIHJpbmc7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJaWYgKChhZGFwdGVyLT5tc2lfbW9kZSAhPSBNU0lfTU9ERV9NVUxUSUZVTkMpIHx8CisJCShhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSBJTlRSX1NDSEVNRV9QRVJQT1JUKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBpbnRlcnJ1cHQgc2NoZW1lIGlzICIKKwkJCQkiaW5jb21wYXRpYmxlIHdpdGggZHJpdmVyXG4iLAorCQkJCW5ldGRldi0+bmFtZSk7CisJCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDE7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQloYW5kbGVyID0gbmV0eGVuX21zaXhfaW50cjsKKwllbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCisJCWhhbmRsZXIgPSBuZXR4ZW5fbXNpX2ludHI7CisJZWxzZSB7CisJCWZsYWdzIHw9IElSUUZfU0hBUkVEOworCQloYW5kbGVyID0gbmV0eGVuX2ludHI7CisJfQorCWFkYXB0ZXItPmlycSA9IG5ldGRldi0+aXJxOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlzcHJpbnRmKHNkc19yaW5nLT5uYW1lLCAiJTE2c1slZF0iLCBuZXRkZXYtPm5hbWUsIHJpbmcpOworCQllcnIgPSByZXF1ZXN0X2lycShzZHNfcmluZy0+aXJxLCBoYW5kbGVyLAorCQkJCSAgZmxhZ3MsIHNkc19yaW5nLT5uYW1lLCBzZHNfcmluZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19mcmVlX2lycShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlmcmVlX2lycShzZHNfcmluZy0+aXJxLCBzZHNfcmluZyk7CisJfQorfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3VwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKKwkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5wb3J0bnVtKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkcik7CisKKwluZXR4ZW5fbmljX3NldF9saW5rX3BhcmFtZXRlcnMoYWRhcHRlcik7CisKKwluZXR4ZW5fc2V0X211bHRpY2FzdF9saXN0KG5ldGRldik7CisJaWYgKGFkYXB0ZXItPnNldF9tdHUpCisJCWFkYXB0ZXItPnNldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOworCisJYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisKKwluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA+IDEpCisJCW5ldHhlbl9jb25maWdfcnNzKGFkYXB0ZXIsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2Rvd24oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+c3RvcF9wb3J0KQorCQlhZGFwdGVyLT5zdG9wX3BvcnQoYWRhcHRlcik7CisKKwluZXR4ZW5fcmVsZWFzZV90eF9idWZmZXJzKGFkYXB0ZXIpOworCisJRkxVU0hfU0NIRURVTEVEX1dPUksoKTsKKwlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworfQorCisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfYXR0YWNoKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgZXJyLCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKworCWVyciA9IG5ldHhlbl9pbml0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBpbml0IGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKKwkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDM7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKKworCWVyciA9IG5ldHhlbl9hbGxvY19zd19yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKworCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7CisKKwllcnIgPSBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgaW4gc2V0dGluZyBodyByZXNvdXJjZXNcbiIsCisJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfc3c7CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgeworCQlhZGFwdGVyLT5jcmJfYWRkcl9jbWRfcHJvZHVjZXIgPQorCQkJY3JiX2NtZF9wcm9kdWNlclthZGFwdGVyLT5wb3J0bnVtXTsKKwkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyID0KKwkJCWNyYl9jbWRfY29uc3VtZXJbYWRhcHRlci0+cG9ydG51bV07CisKKwkJbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKGFkYXB0ZXIsIDApOworCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfY29uc3VtZXIoYWRhcHRlciwgMCk7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisJCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmluZywgcmRzX3JpbmcpOworCX0KKworCWVyciA9IG5ldHhlbl9uaWNfcmVxdWVzdF9pcnEoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIHNldHVwIGludGVycnVwdFxuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yeGJ1ZjsKKwl9CisKKwlhZGFwdGVyLT5pc191cCA9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDOworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfcnhidWY6CisJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKKwluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfb3V0X2ZyZWVfc3c6CisJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2RldGFjaChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbmV0eGVuX25pY19mcmVlX2lycShhZGFwdGVyKTsKKworCW5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7CisJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKKworCWFkYXB0ZXItPmlzX3VwID0gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQKIG5ldHhlbl9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIwID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIxID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKm1lbV9wdHIyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOwotCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKLQotCi0JdTggX19pb21lbSAqZGJfcHRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4sIHBjaV9sZW4wID0gMDsKIAlpbnQgaSA9IDAsIGVycjsKLQlpbnQgZmlyc3RfZHJpdmVyLCBmaXJzdF9ib290OwotCXUzMiB2YWw7CiAJaW50IHBjaV9mdW5jX2lkID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOwotCXN0cnVjdCBuZXR4ZW5fbGVnYWN5X2ludHJfc2V0ICpsZWdhY3lfaW50cnA7CiAJdWludDhfdCByZXZpc2lvbl9pZDsKIAotCWlmIChwY2lfZnVuY19pZCA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKLQogCWlmIChwZGV2LT5jbGFzcyAhPSAweDAyMDAwMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiTmV0WGVuIGZ1bmN0aW9uICVkLCBjbGFzcyAleCB3aWxsIG5vdCAiCiAJCQkJImJlIGVuYWJsZWQuXG4iLHBjaV9mdW5jX2lkLCBwZGV2LT5jbGFzcyk7CkBAIC01MzksMTMwICs5NTYsMTQgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7Ci0JYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAtMTsKLQlhZGFwdGVyLT5haHcuZGRyX21uX3dpbmRvdyA9IC0xOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKIAotCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLwotCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLwotCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwotCXBjaV9sZW4wID0gMDsKLQotCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOwotCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKLQlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOwotCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKLQotCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCi0JaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7Ci0JCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlICsgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7Ci0JCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IEZJUlNUX1BBR0VfR1JPVVBfU1RBUlQ7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSBGSVJTVF9QQUdFX0dST1VQX0VORDsKLQl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8zMk1CX1NJWkUpIHsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlLCBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCAtCi0JCQlTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOwotCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzJNQl9TSVpFKSB7Ci0JCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8yTTsKLQkJYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8yTTsKLQkJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk07Ci0JCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPQotCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNOwotCQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8yTTsKLQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZSA9Ci0JCQluZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMk07Ci0JCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTTsKLQkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk07Ci0JCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk07Ci0KLQkJbWVtX3B0cjAgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7Ci0JCWlmIChtZW1fcHRyMCA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFBDSSBiYXIgMFxuIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCXBjaV9sZW4wID0gbWVtX2xlbjsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOwotCi0JCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKLQkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOwotCi0JCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCi0JCQkocGNpX2Z1bmNfaWQgKiAweDIwKTsKLQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOwotCQlpZiAocGNpX2Z1bmNfaWQgPCA0KQotCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0gKHBjaV9mdW5jX2lkICogMHgyMCk7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9Ci0JCQkJCTB4QTAgKyAoKHBjaV9mdW5jX2lkIC0gNCkgKiAweDEwKTsKLQl9IGVsc2UgewotCQllcnIgPSAtRUlPOworCWVyciA9IG5ldHhlbl9zZXR1cF9wY2lfbWFwKGFkYXB0ZXIpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKLQl9Ci0KLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOwotCi0JZGJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsJLyogZG9vcmJlbGwgaXMgb24gYmFyIDQgKi8KLQlkYl9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpOwotCi0JaWYgKGRiX2xlbiA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3JiZWxsIGlzIGRpc2FibGVkXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQl9Ci0JRFBSSU5USyhJTkZPLCAiZG9vcmJlbGwgaW9yZW1hcCBmcm9tICVseCBhIHNpemUgb2YgJWx4XG4iLCBkYl9iYXNlLAotCQlkYl9sZW4pOwotCi0JZGJfcHRyID0gaW9yZW1hcChkYl9iYXNlLCBORVRYRU5fREJfTUFQU0laRV9CWVRFUyk7Ci0JaWYgKCFkYl9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGRvb3JiZWxsIG1hcC4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQl9Ci0JRFBSSU5USyhJTkZPLCAiZG9vcmJlbGwgaW9yZW1hcGVkIGF0ICVwXG4iLCBkYl9wdHIpOwotCi0JYWRhcHRlci0+YWh3LnBjaV9iYXNlMCA9IG1lbV9wdHIwOwotCWFkYXB0ZXItPmFody5wY2lfbGVuMCA9IHBjaV9sZW4wOwotCWFkYXB0ZXItPmFody5maXJzdF9wYWdlX2dyb3VwX3N0YXJ0ID0gZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKLQlhZGFwdGVyLT5haHcuZmlyc3RfcGFnZV9ncm91cF9lbmQgICA9IGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOwotCWFkYXB0ZXItPmFody5wY2lfYmFzZTEgPSBtZW1fcHRyMTsKLQlhZGFwdGVyLT5haHcucGNpX2Jhc2UyID0gbWVtX3B0cjI7Ci0JYWRhcHRlci0+YWh3LmRiX2Jhc2UgPSBkYl9wdHI7Ci0JYWRhcHRlci0+YWh3LmRiX2xlbiA9IGRiX2xlbjsKLQotCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksCi0JCQluZXR4ZW5fbmljX3BvbGwsIE5FVFhFTl9ORVRERVZfV0VJR0hUKTsKLQotCWlmIChyZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkKLQkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW3BjaV9mdW5jX2lkXTsKLQllbHNlCi0JCWxlZ2FjeV9pbnRycCA9ICZsZWdhY3lfaW50clswXTsKLQotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLmludF92ZWNfYml0ID0gbGVnYWN5X2ludHJwLT5pbnRfdmVjX2JpdDsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZyA9IGxlZ2FjeV9pbnRycC0+dGd0X3N0YXR1c19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X21hc2tfcmVnID0gbGVnYWN5X2ludHJwLT50Z3RfbWFza19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIucGNpX2ludF9yZWcgPSBsZWdhY3lfaW50cnAtPnBjaV9pbnRfcmVnOwotCi0JLyogdGhpcyB3aWxsIGJlIHJlYWQgZnJvbSBGVyBsYXRlciAqLwotCWFkYXB0ZXItPmludHJfc2NoZW1lID0gLTE7Ci0JYWRhcHRlci0+bXNpX21vZGUgPSAtMTsKIAogCS8qIFRoaXMgd2lsbCBiZSByZXNldCBmb3IgbWV6eiBjYXJkcyAgKi8KIAlhZGFwdGVyLT5wb3J0bnVtID0gcGNpX2Z1bmNfaWQ7Ci0JYWRhcHRlci0+c3RhdHVzICAgJj0gfk5FVFhFTl9ORVRERVZfU1RBVFVTOwogCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwogCWFkYXB0ZXItPm1jX2VuYWJsZWQgPSAwOwogCWlmIChOWF9JU19SRVZJU0lPTl9QMyhyZXZpc2lvbl9pZCkpCkBAIC02OTAsMTIgKzk5MSw2IEBACiAJCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAJfQogCi0JLyoKLQkgKiBTZXQgdGhlIENSQiB3aW5kb3cgdG8gaW52YWxpZC4gSWYgYW55IHJlZ2lzdGVyIGluIHdpbmRvdyAwIGlzCi0JICogYWNjZXNzZWQgaXQgc2hvdWxkIHNldCB0aGUgd2luZG93IHRvIDAgYW5kIHRoZW4gcmVzZXQgaXQgdG8gMS4KLQkgKi8KLQlhZGFwdGVyLT5jdXJyX3dpbmRvdyA9IDI1NTsKLQogCWlmIChuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpICE9IDApIHsKIAkJcHJpbnRrKCIlczogRXJyb3IgZ2V0dGluZyBib2FyZCBjb25maWcgaW5mby5cbiIsCiAJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CkBAIC03MDYsNyArMTAwMSw3IEBACiAJbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vcHMoYWRhcHRlcik7CiAKIAkvKiBNZXp6IGNhcmRzIGhhdmUgUENJIGZ1bmN0aW9uIDAsMiwzIGVuYWJsZWQgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVo6CiAJCWlmIChwY2lfZnVuY19pZCA+PSAyKQpAQCAtNzE2LDgyICsxMDExLDEzIEBACiAJCWJyZWFrOwogCX0KIAotCS8qCi0JICogVGhpcyBjYWxsIHdpbGwgc2V0dXAgdmFyaW91cyBtYXggcngvdHggY291bnRzLgotCSAqIEl0IG11c3QgYmUgZG9uZSBiZWZvcmUgYW55IGJ1ZmZlci9yaW5nIGFsbG9jYXRpb25zLgotCSAqLwotCW5ldHhlbl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOworCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCWZpcnN0X2RyaXZlciA9IDA7Ci0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlpZiAoYWRhcHRlci0+YWh3LnBjaV9mdW5jID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0KKwlueF91cGRhdGVfZG1hX21hc2soYWRhcHRlcik7CiAKLQlpZiAoZmlyc3RfZHJpdmVyKSB7Ci0JCWZpcnN0X2Jvb3QgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKLQkJCQlORVRYRU5fQ0FNX1JBTSgweDFmYykpOwotCi0JCWVyciA9IG5ldHhlbl9jaGVja19od19pbml0KGFkYXB0ZXIsIGZpcnN0X2Jvb3QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiBpbml0IEhXIGluaXQgc2VxdWVuY2VcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0JCX0KLQotCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKQotCQkJbmV0eGVuX3NldF9wb3J0X21vZGUoYWRhcHRlcik7Ci0KLQkJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgewotCQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCQkJQ1JCX0NNRFBFR19TVEFURSwgMCk7Ci0JCQluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7Ci0JCQltc2xlZXAoMSk7Ci0JCX0KLQkJbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7Ci0KLQkJaWYgKE5YX0lTX1JFVklTSU9OX1AyKHJldmlzaW9uX2lkKSkgewotCi0JCQkvKiBJbml0aWFsaXplIG11bHRpY2FzdCBhZGRyIHBvb2wgb3duZXJzICovCi0JCQl2YWwgPSAweDc2NTQ7Ci0JCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKQotCQkJCXZhbCB8PSAweDBmMDAwMDAwOwotCQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9NQUNfQUREUl9DTlRMX1JFRywgdmFsKTsKLQotCQl9Ci0KLQkJZXJyID0gbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0KLQkJLyoKLQkJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgotCQkgKi8KLQkJaSA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKLQkJCXwgKChfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiA8PCA4KSkKLQkJCXwgKF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04pOwotCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgaSk7Ci0KLQkJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLwotCQllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfb2ZmbG9hZDsKLQotCX0JLyogZmlyc3RfZHJpdmVyICovCi0KLQluZXR4ZW5fbmljX2ZsYXNoX3ByaW50KGFkYXB0ZXIpOwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCi0JCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmdmFsLCA0KTsKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID0gKHZhbCAmIDB4NCkgPyAxIDogMDsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHJ1bm5pbmcgaW4gJXMgbW9kZVxuIiwKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dCB0aHJvdWdoIiA6ICJsZWdhY3kiKTsKLQl9CisJbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhhZGFwdGVyKTsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBmaXJtd2FyZSBnYXZlIHVzIGEgdmlydHVhbC1waHlzaWNhbCBwb3J0IG1hcHBpbmcuCkBAIC04MDQsNDEgKzEwMzAsMTMgQEAKIAkJCWFkYXB0ZXItPnBoeXNpY2FsX3BvcnQgPSBpOwogCX0KIAotCWFkYXB0ZXItPmZsYWdzICY9IH4oTkVUWEVOX05JQ19NU0lfRU5BQkxFRCB8IE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKTsKKwluZXR4ZW5fY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAotCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMCk7CisJbmV0eGVuX3NldHVwX2ludHIoYWRhcHRlcik7CiAKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7Ci0JCWlmICgobWVtX2xlbiAhPSBORVRYRU5fUENJXzEyOE1CX1NJWkUpICYmCi0JCQltZW1fbGVuICE9IE5FVFhFTl9QQ0lfMk1CX1NJWkUpCi0JCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7Ci0JfQorCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIAotCWlmIChhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCkgewotCi0JCW5ldHhlbl9pbml0X21zaXhfZW50cmllcyhhZGFwdGVyKTsKLQotCQlpZiAocGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKLQkJCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSkKLQkJCWdvdG8gcmVxdWVzdF9tc2k7Ci0KLQkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQ7Ci0JCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMSk7Ci0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKLQotCX0gZWxzZSB7Ci1yZXF1ZXN0X21zaToKLQkJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7Ci0JCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOwotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKLQkJfSBlbHNlCi0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOwotCX0KLQotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQotCQluZXRkZXYtPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3I7Ci0JZWxzZQotCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKwluZXR4ZW5fbmFwaV9hZGQoYWRhcHRlciwgbmV0ZGV2KTsKIAogCWVyciA9IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKIAlpZiAoZXJyKQpAQCAtODY3LDcgKzEwNjUsNyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwogCi0Jc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgeworCXN3aXRjaCAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSkgewogCWNhc2UgTkVUWEVOX05JQ19HQkU6CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlczogR2JFIHBvcnQgaW5pdGlhbGl6ZWRcbiIsCiAJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKQEAgLTg4MSwyNSArMTA3OSwxMiBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X2Rpc2FibGVfbXNpOgotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQotCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwluZXR4ZW5fdGVhcmRvd25faW50cihhZGFwdGVyKTsKIAotZXJyX291dF9mcmVlX29mZmxvYWQ6Ci0JaWYgKGZpcnN0X2RyaXZlcikKLQkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKIAogZXJyX291dF9pb3VubWFwOgotCWlmIChkYl9wdHIpCi0JCWlvdW5tYXAoZGJfcHRyKTsKLQotCWlmIChtZW1fcHRyMCkKLQkJaW91bm1hcChtZW1fcHRyMCk7Ci0JaWYgKG1lbV9wdHIxKQotCQlpb3VubWFwKG1lbV9wdHIxKTsKLQlpZiAobWVtX3B0cjIpCi0JCWlvdW5tYXAobWVtX3B0cjIpOworCW5ldHhlbl9jbGVhbnVwX3BjaV9tYXAoYWRhcHRlcik7CiAKIGVycl9vdXRfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTkyNyw5ICsxMTEyLDcgQEAKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCiAJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7Ci0JCW5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKLQkJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKLQkJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKIAogCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJCW5ldHhlbl9wM19mcmVlX21hY19saXN0KGFkYXB0ZXIpOwpAQCAtOTM4LDIwICsxMTIxLDkgQEAKIAlpZiAoYWRhcHRlci0+cG9ydG51bSA9PSAwKQogCQluZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CiAKLQlpZiAoYWRhcHRlci0+aXJxKQotCQlmcmVlX2lycShhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOworCW5ldHhlbl90ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOwogCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaXgocGRldik7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKLQkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwotCi0JaW91bm1hcChhZGFwdGVyLT5haHcuZGJfYmFzZSk7Ci0JaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKLQlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSAhPSBOVUxMKQotCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTEpOwotCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UyICE9IE5VTEwpCi0JCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMik7CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKIAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtOTYwLDEyNSArMTEzMiw5NSBAQAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9CiAKLS8qCi0gKiBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCi0gKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKLSAqLworc3RhdGljIGludAorbmV0eGVuX25pY19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCX0KKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OworCisJZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWVyciA9IG5ldHhlbl9uaWNfYXR0YWNoKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBuZXR4ZW5fbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBuZXR4ZW5fbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnIgPSAwOwotCWludCBjdHgsIHJpbmc7Ci0JaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CiAKIAlpZiAoYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykgewotCQllcnIgPSBuZXR4ZW5faW5pdF9maXJtd2FyZShhZGFwdGVyKTsKLQkJaWYgKGVyciAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBpbml0IGZpcm13YXJlXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAzOwotCQllbHNlCi0JCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKLQotCQllcnIgPSBuZXR4ZW5fYWxsb2Nfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJbmV0eGVuX25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKLQotCQllcnIgPSBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIGh3IHJlc291cmNlc1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3N3OwotCQl9Ci0KLQkJaWYgKChhZGFwdGVyLT5tc2lfbW9kZSAhPSBNU0lfTU9ERV9NVUxUSUZVTkMpIHx8Ci0JCQkoYWRhcHRlci0+aW50cl9zY2hlbWUgIT0gSU5UUl9TQ0hFTUVfUEVSUE9SVCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGludGVycnVwdCBzY2hlbWUgaXMgIgotCQkJCQkiaW5jb21wYXRpYmxlIHdpdGggZHJpdmVyXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOwotCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX2h3OwotCQl9Ci0KLQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgewotCQkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX3Byb2R1Y2VyID0KLQkJCQljcmJfY21kX3Byb2R1Y2VyW2FkYXB0ZXItPnBvcnRudW1dOwotCQkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyID0KLQkJCQljcmJfY21kX2NvbnN1bWVyW2FkYXB0ZXItPnBvcnRudW1dOwotCi0JCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgMCk7Ci0JCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfY29uc3VtZXIoYWRhcHRlciwgMCk7Ci0JCX0KLQotCQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykKLQkJCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIGN0eCwgcmluZyk7Ci0JCX0KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCQloYW5kbGVyID0gbmV0eGVuX21zaXhfaW50cjsKLQkJZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQotCQkJaGFuZGxlciA9IG5ldHhlbl9tc2lfaW50cjsKLQkJZWxzZSB7Ci0JCQlmbGFncyB8PSBJUlFGX1NIQVJFRDsKLQkJCWhhbmRsZXIgPSBuZXR4ZW5faW50cjsKLQkJfQotCQlhZGFwdGVyLT5pcnEgPSBuZXRkZXYtPmlycTsKLQkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBoYW5kbGVyLAotCQkJCSAgZmxhZ3MsIG5ldGRldi0+bmFtZSwgYWRhcHRlcik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmVxdWVzdF9pcnEgZmFpbGVkIHdpdGg6ICVkXG4iLCBlcnIpOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfcnhidWY7Ci0JCX0KLQotCQlhZGFwdGVyLT5pc191cCA9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDOwogCX0KIAotCS8qIERvbmUgaGVyZSBhZ2FpbiBzbyB0aGF0IGV2ZW4gaWYgcGhhbnRvbSBzdyBvdmVyd3JvdGUgaXQsCi0JICogd2Ugc2V0IGl0ICovCi0JZXJyID0gYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5wb3J0bnVtKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfaXJxOwotCX0KLQlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyKTsKLQotCW5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhhZGFwdGVyKTsKLQotCW5ldHhlbl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2KTsKLQlpZiAoYWRhcHRlci0+c2V0X210dSkKLQkJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBuZXRkZXYtPm10dSk7Ci0KLQlhZGFwdGVyLT5haHcubGlua3VwID0gMDsKLQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKLQotCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7CisJZXJyID0gbmV0eGVuX25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF9mcmVlX2lycToKLQlmcmVlX2lycShhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOwotZXJyX291dF9mcmVlX3J4YnVmOgotCW5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7Ci1lcnJfb3V0X2ZyZWVfaHc6Ci0JbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotZXJyX291dF9mcmVlX3N3OgotCW5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9vdXQ6CisJbmV0eGVuX25pY19kZXRhY2goYWRhcHRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA4OSwyMCArMTIzMSw3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0KLQlpZiAoYWRhcHRlci0+c3RvcF9wb3J0KQotCQlhZGFwdGVyLT5zdG9wX3BvcnQoYWRhcHRlcik7Ci0KLQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOwotCi0JbmV0eGVuX3JlbGVhc2VfdHhfYnVmZmVycyhhZGFwdGVyKTsKLQotCUZMVVNIX1NDSEVEVUxFRF9XT1JLKCk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQorCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTE0LDcgKzEyNDMsNyBAQAogCV9fYmUxNiBwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7CiAJdTE2IGZsYWdzID0gMDsKIAotCWlmIChwcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKIAkJc3RydWN0IHZsYW5fZXRoaGRyICp2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CiAJCXByb3RvY29sID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiAJCWZsYWdzID0gRkxBR1NfVkxBTl9UQUdHRUQ7CkBAIC0xMTI3LDIxICsxMjU2LDIxIEBACiAJCWRlc2MtPnRvdGFsX2hkcl9sZW5ndGggPQogCQkJc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKIAotCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSkgPworCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpID8KIAkJCQlUWF9UQ1BfTFNPNiA6IFRYX1RDUF9MU087CiAJCXRzbyA9IHRydWU7CiAKIAl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJdTggbDRwcm90bzsKIAotCQlpZiAocHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkpIHsKKwkJaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgewogCQkJbDRwcm90byA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKIAogCQkJaWYgKGw0cHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQkJb3Bjb2RlID0gVFhfVENQX1BLVDsKIAkJCWVsc2UgaWYobDRwcm90byA9PSBJUFBST1RPX1VEUCkKIAkJCQlvcGNvZGUgPSBUWF9VRFBfUEtUOwotCQl9IGVsc2UgaWYgKHByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNikpIHsKKwkJfSBlbHNlIGlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSkgewogCQkJbDRwcm90byA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CiAKIAkJCWlmIChsNHByb3RvID09IElQUFJPVE9fVENQKQpAQCAtMTE3NCw3ICsxMzAzLDE2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGlubGluZSB2b2lkCituZXR4ZW5fY2xlYXJfY21kZGVzYyh1NjQgKmRlc2MpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGVzY1tpXSA9IDBVTEw7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5ldHhlbl9oYXJkd2FyZV9jb250ZXh0ICpodyA9ICZhZGFwdGVyLT5haHc7CkBAIC0xMTg4LDcgKzEzMjYsNyBAQAogCiAJdTMyIHByb2R1Y2VyLCBjb25zdW1lcjsKIAlpbnQgZnJhZ19jb3VudCwgbm9fb2ZfZGVzYzsKLQl1MzIgbnVtX3R4ZCA9IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OworCXUzMiBudW1fdHhkID0gYWRhcHRlci0+bnVtX3R4ZDsKIAlib29sIGlzX3RzbyA9IGZhbHNlOwogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOwpAQCAtMTIwNyw3ICsxMzQ1LDcgQEAKIAogCS8qIENvcHkgdGhlIGRlc2NyaXB0b3JzIGludG8gdGhlIGhhcmR3YXJlICAgICovCiAJaHdkZXNjID0gJmh3LT5jbWRfZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CisJbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAJLyogVGFrZSBza2ItPmRhdGEgaXRzZWxmICovCiAJcGJ1ZiA9ICZhZGFwdGVyLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07CiAKQEAgLTEyMjYsNyArMTM2NCw3IEBACiAJbmV0eGVuX3NldF90eF9mcmFnc19sZW4oaHdkZXNjLCBmcmFnX2NvdW50LCBza2ItPmxlbik7CiAJbmV0eGVuX3NldF90eF9wb3J0KGh3ZGVzYywgYWRhcHRlci0+cG9ydG51bSk7CiAKLQlod2Rlc2MtPmJ1ZmZlcjFfbGVuZ3RoID0gY3B1X3RvX2xlMTYoZmlyc3Rfc2VnX2xlbik7CisJaHdkZXNjLT5idWZmZXJfbGVuZ3RoWzBdID0gY3B1X3RvX2xlMTYoZmlyc3Rfc2VnX2xlbik7CiAJaHdkZXNjLT5hZGRyX2J1ZmZlcjEgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOwogCiAJZm9yIChpID0gMSwgayA9IDE7IGkgPCBmcmFnX2NvdW50OyBpKyssIGsrKykgewpAQCAtMTIzOSw3ICsxMzc3LDcgQEAKIAkJCWsgPSAwOwogCQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CiAJCQlod2Rlc2MgPSAmaHctPmNtZF9kZXNjX2hlYWRbcHJvZHVjZXJdOwotCQkJbWVtc2V0KGh3ZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkpOworCQkJbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAJCQlwYnVmID0gJmFkYXB0ZXItPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKIAkJCXBidWYtPnNrYiA9IE5VTEw7CiAJCX0KQEAgLTEyNTksMjEgKzEzOTcsMTggQEAKIAkJYnVmZnJhZy0+ZG1hID0gdGVtcF9kbWE7CiAJCWJ1ZmZyYWctPmxlbmd0aCA9IHRlbXBfbGVuOwogCisJCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFtrXSA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJc3dpdGNoIChrKSB7CiAJCWNhc2UgMDoKLQkJCWh3ZGVzYy0+YnVmZmVyMV9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlod2Rlc2MtPmJ1ZmZlcjJfbGVuZ3RoID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOwogCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjIgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CiAJCQlicmVhazsKIAkJY2FzZSAyOgotCQkJaHdkZXNjLT5idWZmZXIzX2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJCWh3ZGVzYy0+YWRkcl9idWZmZXIzID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCWh3ZGVzYy0+YnVmZmVyNF9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyNCA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzg4LDcgKzE1MjMsNyBAQAogCQlsaW5rdXAgPSAodmFsID09IFhHX0xJTktfVVBfUDMpOwogCX0gZWxzZSB7CiAJCXZhbCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOwotCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKQogCQkJbGlua3VwID0gKHZhbCA+PiBwb3J0KSAmIDE7CiAJCWVsc2UgewogCQkJdmFsID0gKHZhbCA+PiBwb3J0KjgpICYgMHhmZjsKQEAgLTE0NTUsMTMgKzE1OTAsMTEgQEAKIAlwcmludGsoS0VSTl9FUlIgIiVzICVzOiB0cmFuc21pdCB0aW1lb3V0LCByZXNldHRpbmcuXG4iLAogCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwogCi0JbmV0eGVuX25pY19kaXNhYmxlX2ludChhZGFwdGVyKTsKLQluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOworCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CiAKIAlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7CisJbmV0eGVuX25hcGlfZW5hYmxlKGFkYXB0ZXIpOwogCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIH0KIApAQCAtMTQ5OSw3ICsxNjMyLDggQEAKIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gZGF0YTsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSBkYXRhOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOwogCXUzMiBzdGF0dXMgPSAwOwogCiAJc3RhdHVzID0gYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKQEAgLTE1MzAsNyArMTY2NCw3IEBACiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KIAlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOworCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKIAogCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnLApAQCAtMTUzOSw2MSArMTY3Myw0OSBAQAogCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUik7CiAJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKIAotCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnNkc19yaW5nLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2lfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKIAogCS8qIGNsZWFyIGludGVycnVwdCAqLwogCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKIAkJCW1zaV90Z3Rfc3RhdHVzW2FkYXB0ZXItPmFody5wY2lfZnVuY10sIDB4ZmZmZmZmZmYpOwogCi0JbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2l4X2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CiAKLQluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgbmFwaSk7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nLCBuYXBpKTsKKworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOworCiAJaW50IHR4X2NvbXBsZXRlOwotCWludCBjdHg7CiAJaW50IHdvcmtfZG9uZTsKIAogCXR4X2NvbXBsZXRlID0gbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcoYWRhcHRlcik7CiAKLQl3b3JrX2RvbmUgPSAwOwotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCS8qCi0JCSAqIEZhaXJuZXNzIGlzc3VlLiBUaGlzIHdpbGwgZ2l2ZSB1bmR1ZSB3ZWlnaHQgdG8gdGhlCi0JCSAqIHJlY2VpdmUgY29udGV4dCAwLgotCQkgKi8KLQotCQkvKgotCQkgKiBUbyBhdm9pZCBzdGFydmF0aW9uLCB3ZSBnaXZlIGVhY2ggb2Ygb3VyIHJlY2VpdmVycywKLQkJICogYSBmcmFjdGlvbiBvZiB0aGUgcXVvdGEuIFNvbWV0aW1lcywgaXQgbWlnaHQgaGFwcGVuIHRoYXQgd2UKLQkJICogaGF2ZSBlbm91Z2ggcXVvdGEgdG8gcHJvY2VzcyBldmVyeSBwYWNrZXQsIGJ1dCBzaW5jZSBhbGwgdGhlCi0JCSAqIHBhY2tldHMgYXJlIG9uIG9uZSBjb250ZXh0LCBpdCBnZXRzIG9ubHkgaGFsZiBvZiB0aGUgcXVvdGEsCi0JCSAqIGFuZCBlbmRzIHVwIG5vdCBwcm9jZXNzaW5nIGl0LgotCQkgKi8KLQkJd29ya19kb25lICs9IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKGFkYXB0ZXIsIGN0eCwKLQkJCQkJCSAgICAgYnVkZ2V0IC8gTUFYX1JDVl9DVFgpOwotCX0KKwl3b3JrX2RvbmUgPSBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzZHNfcmluZywgYnVkZ2V0KTsKIAogCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiB0eF9jb21wbGV0ZSkgewotCQluZXRpZl9yeF9jb21wbGV0ZSgmYWRhcHRlci0+bmFwaSk7Ci0JCW5ldHhlbl9uaWNfZW5hYmxlX2ludChhZGFwdGVyKTsKKwkJbmFwaV9jb21wbGV0ZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNjEzLDEzICsxNzM1LDE3IEBACiAJLm5hbWUgPSBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9IG5ldHhlbl9wY2lfdGJsLAogCS5wcm9iZSA9IG5ldHhlbl9uaWNfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG5ldHhlbl9uaWNfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChuZXR4ZW5fbmljX3JlbW92ZSksCisJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCisJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lCiB9OwogCiAvKiBEcml2ZXIgUmVnaXN0cmF0aW9uIG9uIE5ldFhlbiBjYXJkICAgICovCiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKQogeworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOworCiAJaWYgKChuZXR4ZW5fd29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibmV0eGVuIikpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCmluZGV4IGMzYjljODMuLmQ4NTIwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQgaC93IGJsb2NrLgorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtMjk5LDE0ICsyOTYsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAwCi1pbnQgbmV0eGVuX25pdV94Z2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9BQ1RJVkVfSU5ULCAtMSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiBzdGF0aWMgaW50IG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTQ2NywxMDQgKzQ1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKgotICogbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQgLSBIYW5kbGVzIEdiRSBQSFkgaW50ZXJydXB0cwotICogQHBhcmFtIGVuYWJsZSAwIG1lYW5zIGRvbid0IGVuYWJsZSB0aGUgcG9ydAotICoJCSAxIG1lYW5zIGVuYWJsZSAob3IgcmUtZW5hYmxlKSB0aGUgcG9ydAotICovCi1pbnQgbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQlpbnQgcG9ydCwgbG9uZyBlbmFibGUpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JX191MzIgaW50X3NyYzsKLQotCXByaW50ayhLRVJOX0lORk8gUEZYICJORVRYRU46IEhhbmRsaW5nIFBIWSBpbnRlcnJ1cHQgb24gcG9ydCAlZCIKLQkgICAgICAgIiAoZGV2aWNlIGVuYWJsZSA9ICVkKVxuIiwgKGludClwb3J0LCAoaW50KWVuYWJsZSk7Ci0KLQkvKgotCSAqIFRoZSByZWFkIG9mIHRoZSBQSFkgSU5UIHN0YXR1cyB3aWxsIGNsZWFyIHRoZSBwZW5kaW5nCi0JICogaW50ZXJydXB0IHN0YXR1cwotCSAqLwotCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZChhZGFwdGVyLAotCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX1NUQVRVUywKLQkJCQkgICAgJmludF9zcmMpICE9IDApCi0JCXJlc3VsdCA9IC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQSFkgSW50ZXJydXB0IHNvdXJjZSA9IDB4JXggXG4iLCBpbnRfc3JjKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9qYWJiZXIoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiamFiYmVyIEludGVycnVwdCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wb2xhcml0eV9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBvbGFyaXR5IGNoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZW5lcmd5X2RldGVjdChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJlbmVyZ3kgZGV0ZWN0IFxuIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZG93bnNoaWZ0KGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImRvd25zaGlmdCBcbiIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X21kaV94b3Zlcl9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIm1kaV94b3Zlcl9jaGFuZ2VkICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2ZpZm9fb3Zlcl91bmRlcmZsb3coaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmlmb19vdmVyX3VuZGVyZmxvdyAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9mYWxzZV9jYXJyaWVyKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhbHNlX2NhcnJpZXIgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfc3ltYm9sX2Vycm9yKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInN5bWJvbF9lcnJvciAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9hdXRvbmVnX2NvbXBsZXRlZChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2NvbXBsZXRlZCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wYWdlX3JlY2VpdmVkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBhZ2VfcmVjZWl2ZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZHVwbGV4X2NoYW5nZWQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZHVwbGV4X2NoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfYXV0b25lZ19lcnJvcihpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2Vycm9yICIpOwotCQlpZiAoKG5ldHhlbl9nZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGludF9zcmMpKQotCQkgICAgfHwgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSkgewotCQkJX191MzIgc3RhdHVzOwotCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJICAgICAgICJzcGVlZF9jaGFuZ2VkIG9yIGxpbmsgc3RhdHVzIGNoYW5nZWQiKTsKLQkJCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZAotCQkJICAgIChhZGFwdGVyLAotCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKLQkJCSAgICAgJnN0YXR1cykgPT0gMCkgewotCQkJCWlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDIpIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAwMCBNYnBzXG4iKTsKLQkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X2dtaWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgIHBvcnQsCi0JCQkJCQkJCSAgICAgZW5hYmxlKTsKLQkJCQl9IGVsc2UgaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMSkgewotCQkJCQlwcmludGsKLQkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCi0JCQkJCSAgICAgIiB0byAxMDAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIGlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDApIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1IgcmVhZGluZyAiCi0JCQkJCSAgICAgICAiUEhZIHN0YXR1cy4gSW52YWxpZCBzcGVlZC5cbiIpOwotCQkJCQlyZXN1bHQgPSAtMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIkVSUk9SIHJlYWRpbmcgUEhZIHN0YXR1cy5cbiIpOwotCQkJCXJlc3VsdCA9IC0xOwotCQkJfQotCi0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qCiAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KICAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCkBAIC02NDEsODYgKzUzMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKiBFbmFibGUgYSBHYkUgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9lbmFibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIGludCBwb3J0LCBuZXR4ZW5fbml1X2diZV9pZm1vZGVfdCBtb2RlKQotewotCV9fdTMyIG1hY19jZmcwOwotCV9fdTMyIG1hY19jZmcxOwotCV9fdTMyIG1paV9jZmc7Ci0KLQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9zb2Z0X3Jlc2V0KG1hY19jZmcwKTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9lbmFibGVfdHgobWFjX2NmZzApOwotCW5ldHhlbl9nYl9lbmFibGVfcngobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF9yeF9mbG93Y3RsKG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfdHhfcmVzZXRfcGIobWFjX2NmZzApOwotCW5ldHhlbl9nYl9yeF9yZXNldF9wYihtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3R4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3J4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0KLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzEgPSAwOwotCW5ldHhlbl9nYl9zZXRfcHJlYW1ibGVsZW4obWFjX2NmZzEsIDB4Zik7Ci0JbmV0eGVuX2diX3NldF9kdXBsZXgobWFjX2NmZzEpOwotCW5ldHhlbl9nYl9zZXRfY3JjX2VuYWJsZShtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9wYWRzaG9ydChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9jaGVja2xlbmd0aChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9odWdlZnJhbWVzKG1hY19jZmcxKTsKLQotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfMTBfMTAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDEpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQkvKiBzZXQgbWlpIG1vZGUgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMSk7Ci0KLQl9IGVsc2UgaWYgKG1vZGUgPT0gTkVUWEVOX05JVV8xMDAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDIpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQkJLyogc2V0IGdtaWkgbW9kZSAqLwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfTUlJX01PREUgKwotCQkJCQkgICAgKHBvcnQgPDwgMyksIDApOwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFICsKLQkJCQkJICAgIChwb3J0IDw8IDMpLCAxKTsKLQl9Ci0JbWlpX2NmZyA9IDA7Ci0JbmV0eGVuX2diX3NldF9taWlfbWdtdF9jbG9ja3NlbGVjdChtaWlfY2ZnLCA3KTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT05GSUcocG9ydCksCi0JCQkJICAgJm1paV9jZmcsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQltYWNfY2ZnMCA9IDA7Ci0JbmV0eGVuX2diX2VuYWJsZV90eChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX2VuYWJsZV9yeChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF90eF9mbG93Y3RsKG1hY19jZmcwKTsKLQotCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkgICAmbWFjX2NmZzAsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qIERpc2FibGUgYSBHYkUgaW50ZXJmYWNlICovCiBpbnQgbmV0eGVuX25pdV9kaXNhYmxlX2diZV9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTg2OSwzOSArNjgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KLSAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gKi8KLWludCBuZXR4ZW5fbml1X3hnX21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKQotewotCWludCBwaHkgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCXUzMiBzdGF0aW9uaGlnaDsKLQl1MzIgc3RhdGlvbmxvdzsKLQl1OCB2YWxbOF07Ci0KLQlpZiAoYWRkciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocGh5ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEksCi0JCQkJICAmc3RhdGlvbmhpZ2gsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAotCQkJCSAgJnN0YXRpb25sb3csIDQpKQotCQlyZXR1cm4gLUVJTzsKLQkoKF9fbGUzMiAqKXZhbClbMV0gPSBjcHVfdG9fbGUzMihzdGF0aW9uaGlnaCk7Ci0JKChfX2xlMzIgKil2YWwpWzBdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmxvdyk7Ci0KLQltZW1jcHkoYWRkciwgdmFsICsgMiwgNik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTMyIG1vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAppbmRleCBiMjkzYWRjLi41MDE4MzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9fTklDX1BIQU5fUkVHX0hfCkBAIC05MCw2ICs5MSw3IEBACiAjZGVmaW5lIENSQl9SWF9MUk9fU1RBUlRfTlVNICAgICAgICBORVRYRU5fTklDX1JFRygweGMwKQogI2RlZmluZSBDUkJfTVBPUlRfTU9ERSAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjNCkJLyogTXVsdGlwb3J0IE1vZGUgKi8KICNkZWZpbmUgQ1JCX0NNRF9SSU5HX1NJWkUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzgpCisjZGVmaW5lIENSQl9ETUFfU0hJRlQgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGNjKQogI2RlZmluZSBDUkJfSU5UX1ZFQ1RPUiAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkNCkKICNkZWZpbmUgQ1JCX0NUWF9SRVNFVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZDgpCiAjZGVmaW5lIENSQl9IT1NUX1NUU19QUk9EICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk2NS5jIGIvZHJpdmVycy9uZXQvbmk2NS5jCmluZGV4IDI1NDA1NzIuLmRmNWY4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNjUuYworKysgYi9kcml2ZXJzL25ldC9uaTY1LmMKQEAgLTQ4MSw4ICs0ODEsOSBAQAogCWVsc2UgewogCQlpZihkZXYtPmRtYSA9PSAwKSB7CiAJCS8qICdzdHVjayB0ZXN0JyBmcm9tIGxhbmNlLmMgKi8KLQkJCWxvbmcgZG1hX2NoYW5uZWxzID0gKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKSB8Ci0JCQkJCSAgICAoaW5iKERNQTJfU1RBVF9SRUcpICYgMHhmMCk7CisJCQl1bnNpZ25lZCBsb25nIGRtYV9jaGFubmVscyA9CisJCQkJKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKQorCQkJCXwgKGluYihETUEyX1NUQVRfUkVHKSAmIDB4ZjApOwogCQkJZm9yKGk9MTtpPDU7aSsrKSB7CiAJCQkJaW50IGRtYSA9IGRtYXRhYltpXTsKIAkJCQlpZih0ZXN0X2JpdChkbWEsJmRtYV9jaGFubmVscykgfHwgcmVxdWVzdF9kbWEoZG1hLCJuaTY1MTAiKSkKQEAgLTg5Nyw3ICs4OTgsNiBAQAogCiAJCWlmKGNzcjAgJiBDU1IwX0VSUikKIAkJewotCQkJc3RydWN0IHByaXYgKnAgPSBkZXYtPm1sX3ByaXY7CiAJCQlpZihkZWJ1Z2xldmVsID4gMSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBnZW5lcmFsIGVycm9yOiAlMDR4LlxuIixkZXYtPm5hbWUsY3NyMCk7CiAJCQlpZihjc3IwICYgQ1NSMF9CQUJMKQpAQCAtOTIyLDggKzkyMiw3IEBACiAgaW50IGo7CiAgZm9yKGo9MDtqPFJNRE5VTTtqKyspCiAgewotCXN0cnVjdCBwcml2ICpwID0gZGV2LT5tbF9wcml2OwotCWludCBpLGssbnVtMSxudW0yOworCWludCBpLCBudW0yOwogCWZvcihpPVJNRE5VTS0xO2k+MDtpLS0pIHsKIAkJIG51bTIgPSAocC0+cm1kbnVtICsgaSkgJiAoUk1ETlVNLTEpOwogCQkgaWYoIShwLT5ybWRoZWFkW251bTJdLnUucy5zdGF0dXMgJiBSQ1ZfT1dOKSkKQEAgLTkzMSw2ICs5MzAsNyBAQAogCX0KIAogCWlmKGkpIHsKKwkJaW50IGssIG51bTE7CiAJCWZvcihrPTA7azxSTUROVU07aysrKSB7CiAJCQludW0xID0gKHAtPnJtZG51bSArIGspICYgKFJNRE5VTS0xKTsKIAkJCWlmKCEocC0+cm1kaGVhZFtudW0xXS51LnMuc3RhdHVzICYgUkNWX09XTikpCkBAIC05NDIsNyArOTQyLDYgQEAKIAkJaWYoZGVidWdsZXZlbCA+IDApCiAJCXsKIAkJCWNoYXIgYnVmWzI1Nl0sKmJ1ZjE7Ci0JCQlpbnQgazsKIAkJCWJ1ZjEgPSBidWY7CiAJCQlmb3Ioaz0wO2s8Uk1ETlVNO2srKykgewogCQkJCXNwcmludGYoYnVmMSwiJTAyeCAiLChwLT5ybWRoZWFkW2tdLnUucy5zdGF0dXMpKTsgLyogJiBSQ1ZfT1dOKSApOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAwYzBiNzUyLi41MGMxMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMTExNSw2ICsxMTE1LDEzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzX21paShzdHJ1Y3Qgbml1ICpucCwgaW50ICpsaW5rX3VwX3ApCit7CisJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOworCWludCBlcnI7CisJaW50IGJtc3IsIGFkdmVydCwgY3RybDEwMDAsIHN0YXQxMDAwLCBscGEsIGJtY3IsIGVzdGF0dXM7CisJaW50IHN1cHBvcnRlZCwgYWR2ZXJ0aXNpbmcsIGFjdGl2ZV9zcGVlZCwgYWN0aXZlX2R1cGxleDsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1zciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKwlhZHZlcnQgPSBlcnI7CisKKwllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfTFBBKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJbHBhID0gZXJyOworCisJaWYgKGxpa2VseShibXNyICYgQk1TUl9FU1RBVEVOKSkgeworCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfRVNUQVRVUyk7CisJCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJCXJldHVybiBlcnI7CisJCWVzdGF0dXMgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0NUUkwxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJY3RybDEwMDAgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX1NUQVQxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJc3RhdDEwMDAgPSBlcnI7CisJfSBlbHNlCisJCWVzdGF0dXMgPSBjdHJsMTAwMCA9IHN0YXQxMDAwID0gMDsKKworCXN1cHBvcnRlZCA9IDA7CisJaWYgKGJtc3IgJiBCTVNSX0FORUdDQVBBQkxFKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJaWYgKGJtc3IgJiBCTVNSXzEwSEFMRikKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7CisJaWYgKGJtc3IgJiBCTVNSXzEwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGw7CisJaWYgKGJtc3IgJiBCTVNSXzEwMEhBTEYpCisJCXN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYm1zciAmIEJNU1JfMTAwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RIQUxGKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RGVUxMKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCWxwLT5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7CisKKwlhZHZlcnRpc2luZyA9IDA7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOworCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwlpZiAoY3RybDEwMDAgJiBBRFZFUlRJU0VfMTAwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGY7CisJaWYgKGN0cmwxMDAwICYgQURWRVJUSVNFXzEwMDBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCisJaWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7CisJCWludCBuZWcsIG5lZzEwMDA7CisKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMTsKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOworCisJCW5lZyA9IGFkdmVydCAmIGxwYTsKKwkJbmVnMTAwMCA9IChjdHJsMTAwMCA8PCAyKSAmIHN0YXQxMDAwOworCisJCWlmIChuZWcxMDAwICYgKExQQV8xMDAwRlVMTCB8IExQQV8xMDAwSEFMRikpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChuZWcgJiBMUEFfMTAwKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTAwOworCQllbHNlIGlmIChuZWcgJiAoTFBBXzEwSEFMRiB8IExQQV8xMEZVTEwpKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisJCWVsc2UKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisKKwkJaWYgKChuZWcxMDAwICYgTFBBXzEwMDBGVUxMKSB8fCAobmVnICYgTFBBX0RVUExFWCkpCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UgaWYgKGFjdGl2ZV9zcGVlZCAhPSBTUEVFRF9JTlZBTElEKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9IQUxGOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMDsKKworCQlpZiAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwMCkgJiYgIShibWNyICYgQk1DUl9TUEVFRDEwMCkpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChibWNyICYgQk1DUl9TUEVFRDEwMCkKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZWxzZQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisKKwkJaWYgKGJtY3IgJiBCTUNSX0ZVTExEUExYKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJfQorCisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyA9IGFkdmVydGlzaW5nOworCWxwLT5hY3RpdmVfc3BlZWQgPSBhY3RpdmVfc3BlZWQ7CisJbHAtPmFjdGl2ZV9kdXBsZXggPSBhY3RpdmVfZHVwbGV4OworCSpsaW5rX3VwX3AgPSAhIShibXNyICYgQk1TUl9MU1RBVFVTKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnX3JnbWlpKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKIHsKIAlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CkBAIC0xMTcxLDYgKzEyOTUsMjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKK3sKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwllcnIgPSBsaW5rX3N0YXR1c19taWkobnAsIGxpbmtfdXBfcCk7CisJbHAtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGJjbTg3MDRfcmVzZXQoc3RydWN0IG5pdSAqbnApCiB7CiAJaW50IGVyciwgbGltaXQ7CkBAIC0xNjc2LDM5ICsxODE2LDg4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIFhYWCBjb25maWd1cmFibGUgWFhYICovCi0JLyogWFhYIGZvciBub3cgZG9uJ3QgYWR2ZXJ0aXNlIGhhbGYtZHVwbGV4IG9yIGFzeW0gcGF1c2UuLi4gWFhYICovCi0JYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOwotCWlmIChibXNyICYgQk1TUl8xMEZVTEwpCi0JCWFkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCWlmIChibXNyICYgQk1TUl8xMDBGVUxMKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7Ci0JZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlpZiAobHAtPmF1dG9uZWcpIHsKKwkJdTE2IGN0cmwxMDAwOwogCi0JaWYgKGJtc3IgJiBCTVNSX0VTVEFURU4pIHsKLQkJdTE2IGN0cmwxMDAwID0gMDsKLQotCQlpZiAoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpCi0JCQljdHJsMTAwMCB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7Ci0JCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikpCisJCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKKwkJaWYgKChibXNyICYgQk1TUl8xMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7CisJCWlmICgoYm1zciAmIEJNU1JfMTAwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKSkKKwkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKKwkJZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCisJCWlmIChsaWtlbHkoYm1zciAmIEJNU1JfRVNUQVRFTikpIHsKKwkJCWN0cmwxMDAwID0gMDsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwSEFMRjsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwRlVMTDsKKwkJCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLAorCQkJCQlNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJfSBlbHNlIHsKKwkJLyogIWxwLT5hdXRvbmVnICovCisJCWludCBmdWxsZHB4OworCisJCWlmIChscC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisJCQlmdWxsZHB4ID0gMTsKKwkJfSBlbHNlIGlmIChscC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJZnVsbGRweCA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChscC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJLyogaWYgWC1mdWxsIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLCBvcgorCQkJICAgWC1oYWxmIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLi4uICovCisJCQlpZiAoKGZ1bGxkcHggJiYgIShlc3RhdCAmIEVTVEFUVVNfMTAwMF9URlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDA7CisJCX0gZWxzZSBpZiAobHAtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwRlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwSEFMRikpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOworCQl9IGVsc2UgaWYgKGxwLT5zcGVlZCA9PSBTUEVFRF8xMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTBGVUxMKSkgfHwKKwkJCQkoIWZ1bGxkcHggJiYgIShibXNyICYgQk1TUl8xMEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAogCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgYm1jcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorI2lmIDAKIAllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKwogCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLSNpZiAwCisJYm1zciA9IGVycjsKKwogCXByX2luZm8oUEZYICJQb3J0ICV1IGFmdGVyIE1JSSBpbml0IGJtY3JbJTA0eF0gYm1zclslMDR4XVxuIiwKIAkJbnAtPnBvcnQsIGJtY3IsIGJtc3IpOwogI2VuZGlmCkBAIC0yMDU0LDg3ICsyMjQzLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKLXsKLQlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7Ci0JdTE2IGN1cnJlbnRfc3BlZWQsIGJtc3I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBjdXJyZW50X2R1cGxleDsKLQlpbnQgZXJyLCBsaW5rX3VwOwotCi0JbGlua191cCA9IDA7Ci0JY3VycmVudF9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7Ci0JY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAobnAtPmxpbmtfY29uZmlnLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfRElTQUJMRUQpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWJtc3IgPSBlcnI7Ci0JaWYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpIHsKLQkJdTE2IGFkdiwgbHBhLCBjb21tb24sIGVzdGF0OwotCi0JCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlhZHYgPSBlcnI7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0xQQSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWxwYSA9IGVycjsKLQotCQljb21tb24gPSBhZHYgJiBscGE7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0VTVEFUVVMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQllc3RhdCA9IGVycjsKLQotCQlsaW5rX3VwID0gMTsKLQkJaWYgKGVzdGF0ICYgKEVTVEFUVVNfMTAwMF9URlVMTCB8IEVTVEFUVVNfMTAwMF9USEFMRikpIHsKLQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJaWYgKGVzdGF0ICYgRVNUQVRVU18xMDAwX1RGVUxMKQotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQllbHNlCi0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJfSBlbHNlIHsKLQkJCWlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwQkFTRTQpIHsKLQkJCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTAwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UgaWYgKGNvbW1vbiAmIEFEVkVSVElTRV8xMDBGVUxMKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwSEFMRikgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCX0gZWxzZSBpZiAoY29tbW9uICYgQURWRVJUSVNFXzEwRlVMTCkgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTBIQUxGKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UKLQkJCQlsaW5rX3VwID0gMDsKLQkJfQotCX0KLQlscC0+YWN0aXZlX3NwZWVkID0gY3VycmVudF9zcGVlZDsKLQlscC0+YWN0aXZlX2R1cGxleCA9IGN1cnJlbnRfZHVwbGV4OwotCWVyciA9IDA7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JKmxpbmtfdXBfcCA9IGxpbmtfdXA7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBuaXVfbGlua19zdGF0dXMoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQogewogCWNvbnN0IHN0cnVjdCBuaXVfcGh5X29wcyAqb3BzID0gbnAtPnBoeV9vcHM7CkBAIC0yMjg0LDcgKzIzOTIsNiBAQAogCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnLCB0ZXN0X2NmZ19yZWcsIHBsbF9jZmcsIGk7CiAJdTY0IGN0cmxfdmFsLCB0ZXN0X2NmZ192YWwsIHNpZywgbWFzaywgdmFsOwotCWludCBlcnI7CiAJdTY0IHJlc2V0X3ZhbDsKIAogCXN3aXRjaCAobnAtPnBvcnQpIHsKQEAgLTIzMzcsNiArMjQ0NCw3IEBACiAJLyogSW5pdGlhbGl6ZSBhbGwgNCBsYW5lcyBvZiB0aGUgU0VSREVTLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXUzMiByeHR4X2N0cmwsIGdsdWUwOworCQlpbnQgZXJyOwogCiAJCWVyciA9IGVzcl9yZWFkX3J4dHhfY3RybChucCwgaSwgJnJ4dHhfY3RybCk7CiAJCWlmIChlcnIpCkBAIC0yNDU2LDcgKzI1NjQsNyBAQAogCiAJCWNhc2UgTklVX0ZMQUdTXzEwRzoKIAkJCS8qIDEwRyBjb3BwZXIgKi8KLQkJCXRwID0gJnBoeV90ZW1wbGF0ZV8xZ19jb3BwZXI7CisJCQl0cCA9ICZwaHlfdGVtcGxhdGVfMTBnX2NvcHBlcjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTklVX0ZMQUdTX0ZJQkVSOgpAQCAtMjg3Myw3ICsyOTgxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKIHN0YXRpYyBpbnQgdGNhbV91c2VyX2lwX2NsYXNzX3NldChzdHJ1Y3Qgbml1ICpucCwgdW5zaWduZWQgbG9uZyBjbGFzcywKIAkJCQkgIGludCBpcHY2LCB1NjQgcHJvdG9jb2xfaWQsCiAJCQkJICB1NjQgdG9zX21hc2ssIHU2NCB0b3NfdmFsKQpAQCAtMjkwMSw3ICszMDA4LDYgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgdGNhbV9lYXJseV9pbml0KHN0cnVjdCBuaXUgKm5wKQogewpAQCAtMzE2OCw2ICszMjc0LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEVudHJpZXMgZm9yIHRoZSBwb3J0cyBhcmUgaW50ZXJsZWF2ZWQgaW4gdGhlIFRDQU0gKi8KK3N0YXRpYyB1MTYgdGNhbV9nZXRfaW5kZXgoc3RydWN0IG5pdSAqbnAsIHUxNiBpZHgpCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJaWYgKGlkeCA+PSAobnAtPmNsYXMudGNhbV9zeiAtIDEpKQorCQlpZHggPSAwOworCXJldHVybiAobnAtPmNsYXMudGNhbV90b3AgKyAoKGlkeCsxKSAqIG5wLT5wYXJlbnQtPm51bV9wb3J0cykpOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3NpemUoc3RydWN0IG5pdSAqbnApCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJcmV0dXJuIG5wLT5jbGFzLnRjYW1fc3ogLSAxOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3ZhbGlkX2VudHJ5X2NudChzdHJ1Y3Qgbml1ICpucCkKK3sKKwkvKiBPbmUgZW50cnkgcmVzZXJ2ZWQgZm9yIElQIGZyYWdtZW50IHJ1bGUgKi8KKwlyZXR1cm4gbnAtPmNsYXMudGNhbV92YWxpZF9lbnRyaWVzIC0gMTsKK30KKwogc3RhdGljIHZvaWQgbml1X3J4X3NrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICAgICB1MzIgb2Zmc2V0LCB1MzIgc2l6ZSkKIHsKQEAgLTMzOTAsNiArMzUxNyw3IEBACiAJcnAtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbnAtPmRldik7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJwLT5yeF9jaGFubmVsKTsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJcmV0dXJuIG51bV9yY3I7CkBAIC0zNjY5LDcgKzM3OTcsNyBAQAogCXdvcmtfZG9uZSA9IG5pdV9wb2xsX2NvcmUobnAsIGxwLCBidWRnZXQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJbml1X2xkZ19yZWFybShucCwgbHAsIDEpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwpAQCAtNDA4OCwxMiArNDIxNiwxMiBAQAogc3RhdGljIHZvaWQgbml1X3NjaGVkdWxlX25hcGkoc3RydWN0IG5pdSAqbnAsIHN0cnVjdCBuaXVfbGRnICpscCwKIAkJCSAgICAgIHU2NCB2MCwgdTY0IHYxLCB1NjQgdjIpCiB7Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpKSB7CisJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkpIHsKIAkJbHAtPnYwID0gdjA7CiAJCWxwLT52MSA9IHYxOwogCQlscC0+djIgPSB2MjsKIAkJX19uaXVfZmFzdHBhdGhfaW50ZXJydXB0KG5wLCBscC0+bGRnX251bSwgdjApOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCX0KIH0KIApAQCAtNDg5MCw4ICs1MDE4LDcgQEAKIAlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOwogCWludCBpbmRleCwgZXJyOwogCi0JLyogWFhYIGZpeCB0aGlzIGFsbG9jYXRpb24gc2NoZW1lIFhYWCAqLwotCWluZGV4ID0gY3AtPnRjYW1faW5kZXg7CisJaW5kZXggPSBjcC0+dGNhbV90b3A7CiAJdHAgPSAmcGFyZW50LT50Y2FtW2luZGV4XTsKIAogCS8qIE5vdGUgdGhhdCB0aGUgbm9wb3J0IGJpdCBpcyB0aGUgc2FtZSBpbiBib3RoIGlwdjQgYW5kCkBAIC00OTA4LDYgKzUwMzUsOCBAQAogCWVyciA9IHRjYW1fYXNzb2Nfd3JpdGUobnAsIGluZGV4LCB0cC0+YXNzb2NfZGF0YSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKKwl0cC0+dmFsaWQgPSAxOworCWNwLT50Y2FtX3ZhbGlkX2VudHJpZXMrKzsKIAogCXJldHVybiAwOwogfQpAQCAtNTIxMSwxMCArNTM0MCwxMCBAQAogCWlmIChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfMTBHKSB7CiAJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX1hHTUlJOwogCX0gZWxzZSB7Ci0JCWlmIChscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMCkKLQkJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX01JSTsKLQkJZWxzZQorCQlpZiAobHAtPmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwKQogCQkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfR01JSTsKKwkJZWxzZQorCQkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfTUlJOwogCX0KIAogCW53NjRfbWFjKFhNQUNfQ09ORklHLCB2YWwpOwpAQCAtNjQ0NiwxMSArNjU3NSwxMSBAQAogCiAJaXB2NiA9IGlobCA9IDA7CiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CiAJCWlobCA9IGlwX2hkcihza2IpLT5paGw7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlpcF9wcm90byA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CiAJCWlobCA9ICg0MCA+PiAyKTsKIAkJaXB2NiA9IDE7CkBAIC02NzAyLDE3ICs2ODMxLDI3IEBACiAJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKIAljbWQtPnBoeV9hZGRyZXNzID0gbnAtPnBoeV9hZGRyOwogCWNtZC0+c3VwcG9ydGVkID0gbHAtPnN1cHBvcnRlZDsKLQljbWQtPmFkdmVydGlzaW5nID0gbHAtPmFkdmVydGlzaW5nOwotCWNtZC0+YXV0b25lZyA9IGxwLT5hdXRvbmVnOworCWNtZC0+YWR2ZXJ0aXNpbmcgPSBscC0+YWN0aXZlX2FkdmVydGlzaW5nOworCWNtZC0+YXV0b25lZyA9IGxwLT5hY3RpdmVfYXV0b25lZzsKIAljbWQtPnNwZWVkID0gbHAtPmFjdGl2ZV9zcGVlZDsKIAljbWQtPmR1cGxleCA9IGxwLT5hY3RpdmVfZHVwbGV4OworCWNtZC0+cG9ydCA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfRklCRVIpID8gUE9SVF9GSUJSRSA6IFBPUlRfVFA7CisJY21kLT50cmFuc2NlaXZlciA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfWENWUl9TRVJERVMpID8KKwkJWENWUl9FWFRFUk5BTCA6IFhDVlJfSU5URVJOQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBuaXVfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisKKwlscC0+YWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOworCWxwLT5zcGVlZCA9IGNtZC0+c3BlZWQ7CisJbHAtPmR1cGxleCA9IGNtZC0+ZHVwbGV4OworCWxwLT5hdXRvbmVnID0gY21kLT5hdXRvbmVnOworCXJldHVybiBuaXVfaW5pdF9saW5rKG5wKTsKIH0KIAogc3RhdGljIHUzMiBuaXVfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC02NzI3LDYgKzY4NjYsMTYgQEAKIAlucC0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCitzdGF0aWMgaW50IG5pdV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5wLT5saW5rX2NvbmZpZy5hdXRvbmVnKQorCQlyZXR1cm4gbml1X2luaXRfbGluayhucCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBuaXVfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02Nzc4LDYgKzY5MjcsNzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbml1X2V0aGZsb3dfdG9fbDNwcm90byhpbnQgZmxvd190eXBlLCB1OCAqcGlkKQoreworCXN3aXRjaCAoZmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFRDUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19UQ1A7CisJCWJyZWFrOworCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fVURQOworCQlicmVhazsKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fU0NUUDsKKwkJYnJlYWs7CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fQUg7CisJCWJyZWFrOworCWNhc2UgRVNQX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fRVNQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqcGlkID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pdV9jbGFzc190b19ldGhmbG93KHU2NCBjbGFzcywgaW50ICpmbG93X3R5cGUpCit7CisJc3dpdGNoIChjbGFzcykgeworCWNhc2UgQ0xBU1NfQ09ERV9UQ1BfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFRDUF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVURQX0lQVjQ6CisJCSpmbG93X3R5cGUgPSBVRFBfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OgorCQkqZmxvd190eXBlID0gQUhfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1NDVFBfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFNDVFBfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1RDUF9JUFY2OgorCQkqZmxvd190eXBlID0gVENQX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9VRFBfSVBWNjoKKwkJKmZsb3dfdHlwZSA9IFVEUF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfQUhfRVNQX0lQVjY6CisJCSpmbG93X3R5cGUgPSBBSF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfU0NUUF9JUFY2OgorCQkqZmxvd190eXBlID0gU0NUUF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMToKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMjoKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMzoKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HNDoKKwkJKmZsb3dfdHlwZSA9IElQX1VTRVJfRkxPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgbml1X2V0aGZsb3dfdG9fY2xhc3MoaW50IGZsb3dfdHlwZSwgdTY0ICpjbGFzcykKIHsKIAlzd2l0Y2ggKGZsb3dfdHlwZSkgewpAQCAtNjc4Nyw3ICs3MDA1LDggQEAKIAljYXNlIFVEUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY0OwogCQlicmVhazsKLQljYXNlIEFIX0VTUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OwogCQlicmVhazsKIAljYXNlIFNDVFBfVjRfRkxPVzoKQEAgLTY3OTksNyArNzAxOCw4IEBACiAJY2FzZSBVRFBfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9VRFBfSVBWNjsKIAkJYnJlYWs7Ci0JY2FzZSBBSF9FU1BfVjZfRkxPVzoKKwljYXNlIEFIX1Y2X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNjsKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX1Y2X0ZMT1c6CkBAIC02ODE2LDggKzcwMzYsNiBAQAogewogCXU2NCBldGhmbG93ID0gMDsKIAotCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX1BPUlQpCi0JCWV0aGZsb3cgfD0gUlhIX0RFVl9QT1JUOwogCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX0wyREEpCiAJCWV0aGZsb3cgfD0gUlhIX0wyREE7CiAJaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfVkxBTikKQEAgLTY4NDEsOCArNzA1OSw2IEBACiB7CiAJdTY0IGtleSA9IDA7CiAKLQlpZiAoZXRoZmxvdyAmIFJYSF9ERVZfUE9SVCkKLQkJa2V5IHw9IEZMT1dfS0VZX1BPUlQ7CiAJaWYgKGV0aGZsb3cgJiBSWEhfTDJEQSkKIAkJa2V5IHw9IEZMT1dfS0VZX0wyREE7CiAJaWYgKGV0aGZsb3cgJiBSWEhfVkxBTikKQEAgLTY4NjQsNDEgKzcwODAsMjc5IEBACiAKIH0KIAotc3RhdGljIGludCBuaXVfZ2V0X2hhc2hfb3B0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKQorc3RhdGljIGludCBuaXVfZ2V0X2hhc2hfb3B0cyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKIHsKLQlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTY0IGNsYXNzOwogCi0JY21kLT5kYXRhID0gMDsKKwluZmMtPmRhdGEgPSAwOwogCi0JaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKG5mYy0+Zmxvd190eXBlLCAmY2xhc3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChucC0+cGFyZW50LT50Y2FtX2tleVtjbGFzcyAtIENMQVNTX0NPREVfVVNFUl9QUk9HMV0gJgogCSAgICBUQ0FNX0tFWV9ESVNDKQotCQljbWQtPmRhdGEgPSBSWEhfRElTQ0FSRDsKKwkJbmZjLT5kYXRhID0gUlhIX0RJU0NBUkQ7CiAJZWxzZQotCi0JCWNtZC0+ZGF0YSA9IG5pdV9mbG93a2V5X3RvX2V0aGZsb3cobnAtPnBhcmVudC0+Zmxvd19rZXlbY2xhc3MgLQorCQluZmMtPmRhdGEgPSBuaXVfZmxvd2tleV90b19ldGhmbG93KG5wLT5wYXJlbnQtPmZsb3dfa2V5W2NsYXNzIC0KIAkJCQkJCSAgICAgIENMQVNTX0NPREVfVVNFUl9QUk9HMV0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pdV9zZXRfaGFzaF9vcHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCitzdGF0aWMgdm9pZCBuaXVfZ2V0X2lwNGZzX2Zyb21fdGNhbV9rZXkoc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cCwKKwkJCQkJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3ApCit7CisKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0c3JjID0gKHRwLT5rZXlbM10gJiBUQ0FNX1Y0S0VZM19TQUREUikgPj4KKwkJVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9ICh0cC0+a2V5WzNdICYgVENBTV9WNEtFWTNfREFERFIpID4+CisJCVRDQU1fVjRLRVkzX0RBRERSX1NISUZUOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPSAodHAtPmtleV9tYXNrWzNdICYgVENBTV9WNEtFWTNfU0FERFIpID4+CisJCVRDQU1fVjRLRVkzX1NBRERSX1NISUZUOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QgPSAodHAtPmtleV9tYXNrWzNdICYgVENBTV9WNEtFWTNfREFERFIpID4+CisJCVRDQU1fVjRLRVkzX0RBRERSX1NISUZUOworCisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9CisJCWNwdV90b19iZTMyKGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPQorCQljcHVfdG9fYmUzMihmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ID0KKwkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9CisJCWNwdV90b19iZTMyKGZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QpOworCisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnRvcyA9ICh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfVE9TKSA+PgorCQlUQ0FNX1Y0S0VZMl9UT1NfU0hJRlQ7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnRvcyA9ICh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9UT1MpID4+CisJCVRDQU1fVjRLRVkyX1RPU19TSElGVDsKKworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCSgodHAtPmtleVsyXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSA+PiAxNjsKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJKCh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQkgVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQpICYgMHhmZmZmOworCQlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucHNyYyA9CisJCQkoKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSA+PiAxNjsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJKCh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCSBUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVCkgJiAweGZmZmY7CisKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQljcHVfdG9fYmUxNihmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCWNwdV90b19iZTE2KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjKTsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QpOworCQlicmVhazsKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJZnNwLT5oX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKwkJZnNwLT5tX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCSh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCVRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUOworCisJCWZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSA9CisJCQljcHVfdG9fYmUzMihmc3AtPmhfdS5haF9pcDRfc3BlYy5zcGkpOworCQlmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkgPQorCQkJY3B1X3RvX2JlMzIoZnNwLT5tX3UuYWhfaXA0X3NwZWMuc3BpKTsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCWZzcC0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKwkJZnNwLT5tX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQ7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMpOworCQlmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyA9CisJCQljcHVfdG9fYmUzMihmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLnByb3RvID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUFJPVE8pID4+CisJCQlUQ0FNX1Y0S0VZMl9QUk9UT19TSElGVDsKKwkJZnNwLT5tX3UudXNyX2lwNF9zcGVjLnByb3RvID0KKwkJCSh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QUk9UTykgPj4KKwkJCVRDQU1fVjRLRVkyX1BST1RPX1NISUZUOworCisJCWZzcC0+aF91LnVzcl9pcDRfc3BlYy5pcF92ZXIgPSBFVEhfUlhfTkZDX0lQNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pdV9nZXRfZXRodG9vbF90Y2FtX2VudHJ5KHN0cnVjdCBuaXUgKm5wLAorCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMpCit7CisJc3RydWN0IG5pdV9wYXJlbnQgKnBhcmVudCA9IG5wLT5wYXJlbnQ7CisJc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cDsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCA9ICZuZmMtPmZzOworCXUxNiBpZHg7CisJdTY0IGNsYXNzOworCWludCByZXQgPSAwOworCisJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsICh1MTYpbmZjLT5mcy5sb2NhdGlvbik7CisKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKwlpZiAoIXRwLT52YWxpZCkgeworCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIGVudHJ5IFslZF0gaW52YWxpZCBmb3IgaWR4WyVkXVxuIiwKKwkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgKHUxNiluZmMtPmZzLmxvY2F0aW9uLCBpZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBmaWxsIHRoZSBmbG93IHNwZWMgZW50cnkgKi8KKwljbGFzcyA9ICh0cC0+a2V5WzBdICYgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERSkgPj4KKwkJVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKwlyZXQgPSBuaXVfY2xhc3NfdG9fZXRoZmxvdyhjbGFzcywgJmZzcC0+Zmxvd190eXBlKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgbml1X2NsYXNzX3RvX2V0aGZsb3cgZmFpbGVkXG4iLAorCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGZzcC0+Zmxvd190eXBlID09IEFIX1Y0X0ZMT1cgfHwgZnNwLT5mbG93X3R5cGUgPT0gQUhfVjZfRkxPVykgeworCQl1MzIgcHJvdG8gPSAodHAtPmtleVsyXSAmIFRDQU1fVjRLRVkyX1BST1RPKSA+PgorCQkJVENBTV9WNEtFWTJfUFJPVE9fU0hJRlQ7CisJCWlmIChwcm90byA9PSBJUFBST1RPX0VTUCkgeworCQkJaWYgKGZzcC0+Zmxvd190eXBlID09IEFIX1Y0X0ZMT1cpCisJCQkJZnNwLT5mbG93X3R5cGUgPSBFU1BfVjRfRkxPVzsKKwkJCWVsc2UKKwkJCQlmc3AtPmZsb3dfdHlwZSA9IEVTUF9WNl9GTE9XOworCQl9CisJfQorCisJc3dpdGNoIChmc3AtPmZsb3dfdHlwZSkgeworCWNhc2UgVENQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJbml1X2dldF9pcDRmc19mcm9tX3RjYW1fa2V5KHRwLCBmc3ApOworCQlicmVhazsKKwljYXNlIFRDUF9WNl9GTE9XOgorCWNhc2UgVURQX1Y2X0ZMT1c6CisJY2FzZSBTQ1RQX1Y2X0ZMT1c6CisJY2FzZSBBSF9WNl9GTE9XOgorCWNhc2UgRVNQX1Y2X0ZMT1c6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCW5pdV9nZXRfaXA0ZnNfZnJvbV90Y2FtX2tleSh0cCwgZnNwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHRwLT5hc3NvY19kYXRhICYgVENBTV9BU1NPQ0RBVEFfRElTQykKKwkJZnNwLT5yaW5nX2Nvb2tpZSA9IFJYX0NMU19GTE9XX0RJU0M7CisJZWxzZQorCQlmc3AtPnJpbmdfY29va2llID0gKHRwLT5hc3NvY19kYXRhICYgVENBTV9BU1NPQ0RBVEFfT0ZGU0VUKSA+PgorCQkJVENBTV9BU1NPQ0RBVEFfT0ZGU0VUX1NISUZUOworCisJLyogcHV0IHRoZSB0Y2FtIHNpemUgaGVyZSAqLworCW5mYy0+ZGF0YSA9IHRjYW1fZ2V0X3NpemUobnApOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbml1X2dldF9ldGh0b29sX3RjYW1fYWxsKHN0cnVjdCBuaXUgKm5wLAorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjLAorCQkJCSAgICB1MzIgKnJ1bGVfbG9jcykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCWludCBpLCBpZHgsIGNudDsKKwl1MTYgbl9lbnRyaWVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCS8qIHB1dCB0aGUgdGNhbSBzaXplIGhlcmUgKi8KKwluZmMtPmRhdGEgPSB0Y2FtX2dldF9zaXplKG5wKTsKKworCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCW5fZW50cmllcyA9IG5mYy0+cnVsZV9jbnQ7CisJZm9yIChjbnQgPSAwLCBpID0gMDsgaSA8IG5mYy0+ZGF0YTsgaSsrKSB7CisJCWlkeCA9IHRjYW1fZ2V0X2luZGV4KG5wLCBpKTsKKwkJdHAgPSAmcGFyZW50LT50Y2FtW2lkeF07CisJCWlmICghdHAtPnZhbGlkKQorCQkJY29udGludWU7CisJCXJ1bGVfbG9jc1tjbnRdID0gaTsKKwkJY250Kys7CisJfQorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZiAobl9lbnRyaWVzICE9IGNudCkgeworCQkvKiBwcmludCB3YXJuaW5nLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2dldF9ldGh0b29sX3RjYW1fYWxsLCAiCisJCQkibl9lbnRyaWVzWyVkXSAhPSBjbnRbJWRdISEhXG5cbiIsCisJCQlucC0+cGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgbl9lbnRyaWVzLCBjbnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pdV9nZXRfbmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsCisJCSAgICAgICB2b2lkICpydWxlX2xvY3MpCiB7CiAJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9HUlhGSDoKKwkJcmV0ID0gbml1X2dldF9oYXNoX29wdHMobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhSSU5HUzoKKwkJY21kLT5kYXRhID0gbnAtPm51bV9yeF9yaW5nczsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCQljbWQtPnJ1bGVfY250ID0gdGNhbV9nZXRfdmFsaWRfZW50cnlfY250KG5wKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJCXJldCA9IG5pdV9nZXRfZXRodG9vbF90Y2FtX2VudHJ5KG5wLCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCXJldCA9IG5pdV9nZXRfZXRodG9vbF90Y2FtX2FsbChucCwgY21kLCAodTMyICopcnVsZV9sb2NzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfc2V0X2hhc2hfb3B0cyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKIAl1NjQgY2xhc3M7CiAJdTY0IGZsb3dfa2V5ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKG5mYy0+Zmxvd190eXBlLCAmY2xhc3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjbGFzcyA8IENMQVNTX0NPREVfVVNFUl9QUk9HMSB8fAogCSAgICBjbGFzcyA+IENMQVNTX0NPREVfU0NUUF9JUFY2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjbWQtPmRhdGEgJiBSWEhfRElTQ0FSRCkgeworCWlmIChuZmMtPmRhdGEgJiBSWEhfRElTQ0FSRCkgewogCQluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKIAkJZmxvd19rZXkgPSBucC0+cGFyZW50LT50Y2FtX2tleVtjbGFzcyAtCiAJCQkJCSAgICAgICBDTEFTU19DT0RFX1VTRVJfUFJPRzFdOwpAQCAtNjkyMyw3ICs3Mzc3LDcgQEAKIAkJfQogCX0KIAotCWlmICghbml1X2V0aGZsb3dfdG9fZmxvd2tleShjbWQtPmRhdGEsICZmbG93X2tleSkpCisJaWYgKCFuaXVfZXRoZmxvd190b19mbG93a2V5KG5mYy0+ZGF0YSwgJmZsb3dfa2V5KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKQEAgLTY5MzQsNiArNzM4OCwzMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbml1X2dldF90Y2Fta2V5X2Zyb21faXA0ZnMoc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3AsCisJCQkJICAgICAgIHN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHAsCisJCQkJICAgICAgIGludCBsMl9yZGNfdGFiLCB1NjQgY2xhc3MpCit7CisJdTggcGlkID0gMDsKKwl1MzIgc2lwLCBkaXAsIHNpcG0sIGRpcG0sIHNwaSwgc3BpbTsKKwl1MTYgc3BvcnQsIGRwb3J0LCBzcG0sIGRwbTsKKworCXNpcCA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCXNpcG0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwlkaXAgPSBiZTMyX3RvX2NwdShmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwlkaXBtID0gYmUzMl90b19jcHUoZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisKKwl0cC0+a2V5WzBdID0gY2xhc3MgPDwgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKwl0cC0+a2V5X21hc2tbMF0gPSBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFOworCXRwLT5rZXlbMV0gPSAodTY0KWwyX3JkY190YWIgPDwgVENBTV9WNEtFWTFfTDJSRENOVU1fU0hJRlQ7CisJdHAtPmtleV9tYXNrWzFdID0gVENBTV9WNEtFWTFfTDJSRENOVU07CisKKwl0cC0+a2V5WzNdID0gKHU2NClzaXAgPDwgVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJdHAtPmtleVszXSB8PSBkaXA7CisKKwl0cC0+a2V5X21hc2tbM10gPSAodTY0KXNpcG0gPDwgVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJdHAtPmtleV9tYXNrWzNdIHw9IGRpcG07CisKKwl0cC0+a2V5WzJdIHw9ICgodTY0KWZzcC0+aF91LnRjcF9pcDRfc3BlYy50b3MgPDwKKwkJICAgICAgIFRDQU1fVjRLRVkyX1RPU19TSElGVCk7CisJdHAtPmtleV9tYXNrWzJdIHw9ICgodTY0KWZzcC0+bV91LnRjcF9pcDRfc3BlYy50b3MgPDwKKwkJCSAgICBUQ0FNX1Y0S0VZMl9UT1NfU0hJRlQpOworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCXNwb3J0ID0gYmUxNl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlzcG0gPSBiZTE2X3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCWRwb3J0ID0gYmUxNl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBkc3QpOworCQlkcG0gPSBiZTE2X3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCk7CisKKwkJdHAtPmtleVsyXSB8PSAoKCh1NjQpc3BvcnQgPDwgMTYpIHwgZHBvcnQpOworCQl0cC0+a2V5X21hc2tbMl0gfD0gKCgodTY0KXNwbSA8PCAxNikgfCBkcG0pOworCQluaXVfZXRoZmxvd190b19sM3Byb3RvKGZzcC0+Zmxvd190eXBlLCAmcGlkKTsKKwkJYnJlYWs7CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgRVNQX1Y0X0ZMT1c6CisJCXNwaSA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSk7CisJCXNwaW0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkpOworCisJCXRwLT5rZXlbMl0gfD0gc3BpOworCQl0cC0+a2V5X21hc2tbMl0gfD0gc3BpbTsKKwkJbml1X2V0aGZsb3dfdG9fbDNwcm90byhmc3AtPmZsb3dfdHlwZSwgJnBpZCk7CisJCWJyZWFrOworCWNhc2UgSVBfVVNFUl9GTE9XOgorCQlzcGkgPSBiZTMyX3RvX2NwdShmc3AtPmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisJCXNwaW0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisKKwkJdHAtPmtleVsyXSB8PSBzcGk7CisJCXRwLT5rZXlfbWFza1syXSB8PSBzcGltOworCQlwaWQgPSBmc3AtPmhfdS51c3JfaXA0X3NwZWMucHJvdG87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXRwLT5rZXlbMl0gfD0gKCh1NjQpcGlkIDw8IFRDQU1fVjRLRVkyX1BST1RPX1NISUZUKTsKKwlpZiAocGlkKSB7CisJCXRwLT5rZXlfbWFza1syXSB8PSBUQ0FNX1Y0S0VZMl9QUk9UTzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnkoc3RydWN0IG5pdSAqbnAsCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnNwID0gJm5mYy0+ZnM7CisJc3RydWN0IG5pdV9yZGNfdGFibGVzICpyZGNfdGFibGUgPSAmcGFyZW50LT5yZGNfZ3JvdXBfY2ZnW25wLT5wb3J0XTsKKwlpbnQgbDJfcmRjX3RhYmxlID0gcmRjX3RhYmxlLT5maXJzdF90YWJsZV9udW07CisJdTE2IGlkeDsKKwl1NjQgY2xhc3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyLCByZXQ7CisKKwlyZXQgPSAwOworCisJaWR4ID0gbmZjLT5mcy5sb2NhdGlvbjsKKwlpZiAoaWR4ID49IHRjYW1fZ2V0X3NpemUobnApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmc3AtPmZsb3dfdHlwZSA9PSBJUF9VU0VSX0ZMT1cpIHsKKwkJaW50IGk7CisJCWludCBhZGRfdXNyX2NscyA9IDA7CisJCWludCBpcHY2ID0gMDsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgKnVzcGVjID0gJmZzcC0+aF91LnVzcl9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgKnVtYXNrID0gJmZzcC0+bV91LnVzcl9pcDRfc3BlYzsKKworCQluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTklVX0wzX1BST0dfQ0xTOyBpKyspIHsKKwkJCWlmIChwYXJlbnQtPmwzX2Nsc1tpXSkgeworCQkJCWlmICh1c3BlYy0+cHJvdG8gPT0gcGFyZW50LT5sM19jbHNfcGlkW2ldKSB7CisJCQkJCWNsYXNzID0gcGFyZW50LT5sM19jbHNbaV07CisJCQkJCXBhcmVudC0+bDNfY2xzX3JlZmNudFtpXSsrOworCQkJCQlhZGRfdXNyX2NscyA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogUHJvZ3JhbSBuZXcgdXNlciBJUCBjbGFzcyAqLworCQkJCXN3aXRjaCAoaSkgeworCQkJCWNhc2UgMDoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzM7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzQ7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAodXNwZWMtPmlwX3ZlciA9PSBFVEhfUlhfTkZDX0lQNikKKwkJCQkJaXB2NiA9IDE7CisJCQkJcmV0ID0gdGNhbV91c2VyX2lwX2NsYXNzX3NldChucCwgY2xhc3MsIGlwdjYsCisJCQkJCQkJICAgICB1c3BlYy0+cHJvdG8sCisJCQkJCQkJICAgICB1c3BlYy0+dG9zLAorCQkJCQkJCSAgICAgdW1hc2stPnRvcyk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXQ7CisKKwkJCQlyZXQgPSB0Y2FtX3VzZXJfaXBfY2xhc3NfZW5hYmxlKG5wLCBjbGFzcywgMSk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXQ7CisJCQkJcGFyZW50LT5sM19jbHNbaV0gPSBjbGFzczsKKwkJCQlwYXJlbnQtPmwzX2Nsc19waWRbaV0gPSB1c3BlYy0+cHJvdG87CisJCQkJcGFyZW50LT5sM19jbHNfcmVmY250W2ldKys7CisJCQkJYWRkX3Vzcl9jbHMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghYWRkX3Vzcl9jbHMpIHsKKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCQkiQ291bGQgbm90IGZpbmQvaW5zZXJ0IGNsYXNzIGZvciBwaWQgJWRcbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgdXNwZWMtPnByb3RvKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCX0gZWxzZSB7CisJCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MoZnNwLT5mbG93X3R5cGUsICZjbGFzcykpIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJbml1X2xvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZHggPSB0Y2FtX2dldF9pbmRleChucCwgaWR4KTsKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKworCW1lbXNldCh0cCwgMCwgc2l6ZW9mKCp0cCkpOworCisJLyogZmlsbCBpbiB0aGUgdGNhbSBrZXkgYW5kIG1hc2sgKi8KKwlzd2l0Y2ggKGZzcC0+Zmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFVEUF9WNF9GTE9XOgorCWNhc2UgU0NUUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgorCQluaXVfZ2V0X3RjYW1rZXlfZnJvbV9pcDRmcyhmc3AsIHRwLCBsMl9yZGNfdGFibGUsIGNsYXNzKTsKKwkJYnJlYWs7CisJY2FzZSBUQ1BfVjZfRkxPVzoKKwljYXNlIFVEUF9WNl9GTE9XOgorCWNhc2UgU0NUUF9WNl9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwljYXNlIEVTUF9WNl9GTE9XOgorCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJmbG93ICVkIGZvciBJUHY2IG5vdCBpbXBsZW1lbnRlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgZnNwLT5mbG93X3R5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwljYXNlIElQX1VTRVJfRkxPVzoKKwkJaWYgKGZzcC0+aF91LnVzcl9pcDRfc3BlYy5pcF92ZXIgPT0gRVRIX1JYX05GQ19JUDQpIHsKKwkJCW5pdV9nZXRfdGNhbWtleV9mcm9tX2lwNGZzKGZzcCwgdHAsIGwyX3JkY190YWJsZSwKKwkJCQkJCSAgIGNsYXNzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJ1c3IgZmxvdyBmb3IgSVB2NiBub3QgaW1wbGVtZW50ZWRcblxuIiwKKwkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJVbmtub3duIGZsb3cgdHlwZSAlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgZnNwLT5mbG93X3R5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBmaWxsIGluIHRoZSBhc3NvYyBkYXRhICovCisJaWYgKGZzcC0+cmluZ19jb29raWUgPT0gUlhfQ0xTX0ZMT1dfRElTQykgeworCQl0cC0+YXNzb2NfZGF0YSA9IFRDQU1fQVNTT0NEQVRBX0RJU0M7CisJfSBlbHNlIHsKKwkJaWYgKGZzcC0+cmluZ19jb29raWUgPj0gbnAtPm51bV9yeF9yaW5ncykgeworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJCSJJbnZhbGlkIFJYIHJpbmcgJWxsZFxuXG4iLAorCQkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUsCisJCQkJKGxvbmcgbG9uZykgZnNwLT5yaW5nX2Nvb2tpZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJdHAtPmFzc29jX2RhdGEgPSAoVENBTV9BU1NPQ0RBVEFfVFJFU19VU0VfT0ZGU0VUIHwKKwkJCQkgIChmc3AtPnJpbmdfY29va2llIDw8CisJCQkJICAgVENBTV9BU1NPQ0RBVEFfT0ZGU0VUX1NISUZUKSk7CisJfQorCisJZXJyID0gdGNhbV93cml0ZShucCwgaWR4LCB0cC0+a2V5LCB0cC0+a2V5X21hc2spOworCWlmIChlcnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWVyciA9IHRjYW1fYXNzb2Nfd3JpdGUobnAsIGlkeCwgdHAtPmFzc29jX2RhdGEpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdmFsaWRhdGUgdGhlIGVudHJ5ICovCisJdHAtPnZhbGlkID0gMTsKKwlucC0+Y2xhcy50Y2FtX3ZhbGlkX2VudHJpZXMrKzsKK291dDoKKwluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeShzdHJ1Y3Qgbml1ICpucCwgdTMyIGxvYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXUxNiBpZHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgY2xhc3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAobG9jID49IHRjYW1fZ2V0X3NpemUobnApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsIGxvYyk7CisJdHAgPSAmcGFyZW50LT50Y2FtW2lkeF07CisKKwkvKiBpZiB0aGUgZW50cnkgaXMgb2YgYSB1c2VyIGRlZmluZWQgY2xhc3MsIHRoZW4gdXBkYXRlKi8KKwljbGFzcyA9ICh0cC0+a2V5WzBdICYgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERSkgPj4KKwkJVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKworCWlmIChjbGFzcyA+PSBDTEFTU19DT0RFX1VTRVJfUFJPRzEgJiYgY2xhc3MgPD0gQ0xBU1NfQ09ERV9VU0VSX1BST0c0KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgTklVX0wzX1BST0dfQ0xTOyBpKyspIHsKKwkJCWlmIChwYXJlbnQtPmwzX2Nsc1tpXSA9PSBjbGFzcykgeworCQkJCXBhcmVudC0+bDNfY2xzX3JlZmNudFtpXS0tOworCQkJCWlmICghcGFyZW50LT5sM19jbHNfcmVmY250W2ldKSB7CisJCQkJCS8qIGRpc2FibGUgY2xhc3MgKi8KKwkJCQkJcmV0ID0gdGNhbV91c2VyX2lwX2NsYXNzX2VuYWJsZShucCwKKwkJCQkJCQkJCWNsYXNzLAorCQkJCQkJCQkJMCk7CisJCQkJCWlmIChyZXQpCisJCQkJCQlnb3RvIG91dDsKKwkJCQkJcGFyZW50LT5sM19jbHNbaV0gPSAwOworCQkJCQlwYXJlbnQtPmwzX2Nsc19waWRbaV0gPSAwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBOSVVfTDNfUFJPR19DTFMpIHsKKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2RlbF9ldGh0b29sX3RjYW1fZW50cnksIgorCQkJCSJVc3IgY2xhc3MgMHglbGx4IG5vdCBmb3VuZCBcbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjbGFzcyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXQgPSB0Y2FtX2ZsdXNoKG5wLCBpZHgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogaW52YWxpZGF0ZSB0aGUgZW50cnkgKi8KKwl0cC0+dmFsaWQgPSAwOworCW5wLT5jbGFzLnRjYW1fdmFsaWRfZW50cmllcy0tOworb3V0OgorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5pdV9zZXRfbmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCit7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9TUlhGSDoKKwkJcmV0ID0gbml1X3NldF9oYXNoX29wdHMobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmV0ID0gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDoKKwkJcmV0ID0gbml1X2RlbF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZC0+ZnMubG9jYXRpb24pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljb25zdCBjaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwogfSBuaXVfeG1hY19zdGF0X2tleXNbXSA9IHsKQEAgLTcxNTgsNiArNzkzNyw3IEBACiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSBuaXVfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gbml1X3NldF9tc2dsZXZlbCwKKwkubndheV9yZXNldAkJPSBuaXVfbndheV9yZXNldCwKIAkuZ2V0X2VlcHJvbV9sZW4JCT0gbml1X2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tCQk9IG5pdV9nZXRfZWVwcm9tLAogCS5nZXRfc2V0dGluZ3MJCT0gbml1X2dldF9zZXR0aW5ncywKQEAgLTcxNjYsOCArNzk0Niw4IEBACiAJLmdldF9zdGF0c19jb3VudAk9IG5pdV9nZXRfc3RhdHNfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gbml1X2dldF9ldGh0b29sX3N0YXRzLAogCS5waHlzX2lkCQk9IG5pdV9waHlzX2lkLAotCS5nZXRfcnhoYXNoCQk9IG5pdV9nZXRfaGFzaF9vcHRzLAotCS5zZXRfcnhoYXNoCQk9IG5pdV9zZXRfaGFzaF9vcHRzLAorCS5nZXRfcnhuZmMJCT0gbml1X2dldF9uZmMsCisJLnNldF9yeG5mYwkJPSBuaXVfc2V0X25mYywKIH07CiAKIHN0YXRpYyBpbnQgbml1X2xkZ19hc3NpZ25fbGRuKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50LApAQCAtODIzNyw3ICs5MDE3LDggQEAKIAluaXVkYmcoUFJPQkUsICJuaXVfY2xhc3NpZmllcl9zd3N0YXRlX2luaXQ6IG51bV90Y2FtKCVkKVxuIiwKIAkgICAgICAgbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyk7CiAKLQljcC0+dGNhbV9pbmRleCA9ICh1MTYpIG5wLT5wb3J0OworCWNwLT50Y2FtX3RvcCA9ICh1MTYpIG5wLT5wb3J0OworCWNwLT50Y2FtX3N6ID0gbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyAvIG5wLT5wYXJlbnQtPm51bV9wb3J0czsKIAljcC0+aDFfaW5pdCA9IDB4ZmZmZmZmZmY7CiAJY3AtPmgyX2luaXQgPSAweGZmZmY7CiAKQEAgLTgyNTcsNyArOTAzOCw5IEBACiAJCQkgICBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CiAJCQkgICBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCWxwLT5zcGVlZCA9IGxwLT5hY3RpdmVfc3BlZWQgPSBTUEVFRF9JTlZBTElEOwotCWxwLT5kdXBsZXggPSBscC0+YWN0aXZlX2R1cGxleCA9IERVUExFWF9JTlZBTElEOworCWxwLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwlscC0+YWN0aXZlX2R1cGxleCA9IERVUExFWF9JTlZBTElEOworCWxwLT5hdXRvbmVnID0gMTsKICNpZiAwCiAJbHAtPmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19NQUM7CiAJbHAtPmFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmggYi9kcml2ZXJzL25ldC9uaXUuaAppbmRleCBlMWE3MzkyLi44NzU0ZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuaAorKysgYi9kcml2ZXJzL25ldC9uaXUuaApAQCAtMzAwNCw3ICszMDA0LDkgQEAKIAlzdHJ1Y3Qgbml1X2FsdG1hY19yZGMJYWx0X21hY19tYXBwaW5nc1sxNl07CiAJc3RydWN0IG5pdV92bGFuX3JkYwl2bGFuX21hcHBpbmdzW0VORVRfVkxBTl9UQkxfTlVNX0VOVFJJRVNdOwogCi0JdTE2CQkJdGNhbV9pbmRleDsKKwl1MTYJCQl0Y2FtX3RvcDsKKwl1MTYJCQl0Y2FtX3N6OworCXUxNgkJCXRjYW1fdmFsaWRfZW50cmllczsKIAl1MTYJCQludW1fYWx0X21hY19tYXBwaW5nczsKIAogCXUzMgkJCWgxX2luaXQ7CkBAIC0zMDQwLDYgKzMwNDIsNyBAQAogfTsKIAogc3RydWN0IG5pdV90Y2FtX2VudHJ5IHsKKwl1OAkJCXZhbGlkOwogCXU2NAkJCWtleVs0XTsKIAl1NjQJCQlrZXlfbWFza1s0XTsKIAl1NjQJCQlhc3NvY19kYXRhOwpAQCAtMzEwNywxMCArMzExMCwxNSBAQAogCXN0cnVjdCBwaHlfcHJvYmVfaW5mbwlwaHlfcHJvYmVfaW5mbzsKIAogCXN0cnVjdCBuaXVfdGNhbV9lbnRyeQl0Y2FtW05JVV9UQ0FNX0VOVFJJRVNfTUFYXTsKLQl1NjQJCQlsMl9jbHNbMl07Ci0JdTY0CQkJbDNfY2xzWzRdOworCisjZGVmaW5lCU5JVV9MMl9QUk9HX0NMUwkJMgorI2RlZmluZQlOSVVfTDNfUFJPR19DTFMJCTQKKwl1NjQJCQlsMl9jbHNbTklVX0wyX1BST0dfQ0xTXTsKKwl1NjQJCQlsM19jbHNbTklVX0wzX1BST0dfQ0xTXTsKIAl1NjQJCQl0Y2FtX2tleVsxMl07CiAJdTY0CQkJZmxvd19rZXlbMTJdOworCXUxNgkJCWwzX2Nsc19yZWZjbnRbTklVX0wzX1BST0dfQ0xTXTsKKwl1OAkJCWwzX2Nsc19waWRbTklVX0wzX1BST0dfQ0xTXTsKIH07CiAKIHN0cnVjdCBuaXVfb3BzIHsKQEAgLTMxMzEsMTYgKzMxMzksMTkgQEAKIH07CiAKIHN0cnVjdCBuaXVfbGlua19jb25maWcgeworCXUzMgkJCQlzdXBwb3J0ZWQ7CisKIAkvKiBEZXNjcmliZXMgd2hhdCB3ZSdyZSB0cnlpbmcgdG8gZ2V0LiAqLwogCXUzMgkJCQlhZHZlcnRpc2luZzsKLQl1MzIJCQkJc3VwcG9ydGVkOwogCXUxNgkJCQlzcGVlZDsKIAl1OAkJCQlkdXBsZXg7CiAJdTgJCQkJYXV0b25lZzsKIAogCS8qIERlc2NyaWJlcyB3aGF0IHdlIGFjdHVhbGx5IGhhdmUuICovCisJdTMyCQkJCWFjdGl2ZV9hZHZlcnRpc2luZzsKIAl1MTYJCQkJYWN0aXZlX3NwZWVkOwogCXU4CQkJCWFjdGl2ZV9kdXBsZXg7CisJdTgJCQkJYWN0aXZlX2F1dG9uZWc7CiAjZGVmaW5lIFNQRUVEX0lOVkFMSUQJCTB4ZmZmZgogI2RlZmluZSBEVVBMRVhfSU5WQUxJRAkJMHhmZgogI2RlZmluZSBBVVRPTkVHX0lOVkFMSUQJCTB4ZmYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBlODAyOTRkLi4yMjFiMGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC00MDksNyArNDA5LDcgQEAKIHN0cnVjdCByeF9pbmZvIHsKIAlzcGlubG9ja190CWxvY2s7CiAJaW50CQl1cDsKLQlsb25nCQlpZGxlOworCXVuc2lnbmVkIGxvbmcJaWRsZTsKIAogCXN0cnVjdCBza19idWZmCSpza2JzW05SX1JYX0RFU0NdOwogCkBAIC04MjIsOCArODIyLDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldi0+cnhfaW5mby5za2JzW2ldOwogCQlkZXYtPnJ4X2luZm8uc2tic1tpXSA9IE5VTEw7CiAJCWNsZWFyX3J4X2Rlc2MoZGV2LCBpKTsKLQkJaWYgKHNrYikKLQkJCWtmcmVlX3NrYihza2IpOworCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYyBiL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYwppbmRleCBkMDM0OWU3Li41ZWViNWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAlpZiAoKmNoYW4tPnN0YXR1cyAmIFBBU19TVEFUVVNfRVJST1IpCiAJCXJlZyB8PSBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX0RJTlRDOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJm1hYy0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbWFjLT5uYXBpKTsKIAogCXdyaXRlX2lvYl9yZWcoUEFTX0lPQl9ETUFfUlhDSF9SRVNFVChjaGFuLT5jaG5vKSwgcmVnKTsKIApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAogCW1vZF90aW1lcigmdHhyaW5nLT5jbGVhbl90aW1lciwgamlmZmllcyArIChUWF9DTEVBTl9JTlRFUlZBTCkqMik7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmbWFjLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZtYWMtPm5hcGkpOwogCiAJaWYgKHJlZykKIAkJd3JpdGVfaW9iX3JlZyhQQVNfSU9CX0RNQV9UWENIX1JFU0VUKGNoYW4tPmNobm8pLCByZWcpOwpAQCAtMTYzOSw3ICsxNjM5LDcgQEAKIAlwa3RzID0gcGFzZW1pX21hY19jbGVhbl9yeChyeF9yaW5nKG1hYyksIGJ1ZGdldCk7CiAJaWYgKHBrdHMgPCBidWRnZXQpIHsKIAkJLyogYWxsIGRvbmUsIG5vIG1vcmUgcGFja2V0cyBwcmVzZW50ICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCXBhc2VtaV9tYWNfcmVzdGFydF9yeF9pbnRyKG1hYyk7CiAJCXBhc2VtaV9tYWNfcmVzdGFydF90eF9pbnRyKG1hYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDI0MDRhODMuLjhmMzg3MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC0yNTcsNiArMjU3LDE4IEBACiAJbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAJd2l0aCBDYXJkIFNlcnZpY2VzLgogKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWwzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlbDNfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGVsM19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWwzX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGVsM190eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVsM19nZXRfc3RhdHMsCisJLm5kb19kb19pb2N0bAkJPSBlbDNfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCB0YzU3NF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKQEAgLTI4NCwxOCArMjk2LDkgQEAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAotCS8qIFRoZSBFTDMtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbDNfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9ICZlbDNfZ2V0X3N0YXRzOwotCWRldi0+ZG9faW9jdGwgPSAmZWwzX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZlbDNfbmV0ZGV2X29wczsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLQlkZXYtPm9wZW4gPSAmZWwzX29wZW47Ci0JZGV2LT5zdG9wID0gJmVsM19jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQlkZXYtPnR4X3RpbWVvdXQgPSBlbDNfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgogCiAJcmV0dXJuIHRjNTc0X2NvbmZpZyhsaW5rKTsKIH0gLyogdGM1NzRfYXR0YWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDFlMDFiOGE2Li5jZGY2NjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtMTY5LDYgKzE2OSwxOSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbDNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsM19vcGVuLAorCS5uZG9fc3RvcCAJCT0gZWwzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbDNfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfY29uZmlnCQk9IGVsM19jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gZWwzX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCB0YzU4OV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwOwpAQCAtMTk1LDE3ICsyMDgsOSBAQAogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCi0gICAgLyogVGhlIEVMMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsM19zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZlbDNfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzID0gJmVsM19nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotICAgIGRldi0+b3BlbiA9ICZlbDNfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmZWwzX2Nsb3NlOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IGVsM190eF90aW1lb3V0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZlbDNfbmV0ZGV2X29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgorCiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKICAgICByZXR1cm4gdGM1ODlfY29uZmlnKGxpbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAwYWZhNzIwLi41MDFhOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlICIuLi84MzkwLmgiCiAKQEAgLTkxLDYgKzkyLDEwIEBACiBzdGF0aWMgaW50IGF4bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBheG5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgYXhuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgYXhuZXRfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGlycXJldHVybl90IGVpX2lycV93cmFwcGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBlaV93YXRjaGRvZyh1X2xvbmcgYXJnKTsKQEAgLTEwOCw3ICsxMTMsNiBAQAogCiBzdGF0aWMgdm9pZCBheG5ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAotc3RhdGljIHZvaWQgYXhkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBBWDg4MTkwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0cCk7CiBzdGF0aWMgaW50IGF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTM0LDYgKzEzOCwxOSBAQAogCXJldHVybiBwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4bmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBheG5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBheG5ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGF4bmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBheG5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBheG5ldF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGdldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBheG5ldF9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMTQ2LDE1ICsxNjMsMTcgQEAKIHsKICAgICBheG5ldF9kZXZfdCAqaW5mbzsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworICAgIHN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsOwogCiAgICAgREVCVUcoMCwgImF4bmV0X2F0dGFjaCgpXG4iKTsKIAotICAgIGRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGVpX2RldmljZSkgKyBzaXplb2YoYXhuZXRfZGV2X3QpLAotCQkJImV0aCVkIiwgYXhkZXZfc2V0dXApOwotCisgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlaV9kZXZpY2UpICsgc2l6ZW9mKGF4bmV0X2Rldl90KSk7CiAgICAgaWYgKCFkZXYpCiAJcmV0dXJuIC1FTk9NRU07CiAKKyAgICBlaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisgICAgc3Bpbl9sb2NrX2luaXQoJmVpX2xvY2FsLT5wYWdlX2xvY2spOworCiAgICAgaW5mbyA9IFBSSVYoZGV2KTsKICAgICBpbmZvLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKQEAgLTE2MywxMCArMTgyLDEwIEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgZGV2LT5vcGVuID0gJmF4bmV0X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmF4bmV0X2Nsb3NlOwotICAgIGRldi0+ZG9faW9jdGwgPSAmYXhuZXRfaW9jdGw7CisgICAgZGV2LT5uZXRkZXZfb3BzID0gJmF4bmV0X25ldGRldl9vcHM7CisKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKKyAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogICAgIHJldHVybiBheG5ldF9jb25maWcobGluayk7CiB9IC8qIGF4bmV0X2F0dGFjaCAqLwpAQCAtODYxLDcgKzg4MCw3IEBACiAKICAgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb25fODM5MCA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uXzgzOTBbXSA9IEtFUk5fSU5GTyBcCiAgICAgIjgzOTAuYzp2MS4xMGN2cyA5LzIzLzk0IERvbmFsZCBCZWNrZXIgKGJlY2tlckBzY3lsZC5jb20pXG4iOwogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC05MDUsMTQgKzkyNCwxMiBAQAogLyogSW5kZXggdG8gZnVuY3Rpb25zLiAqLwogc3RhdGljIHZvaWQgZWlfdHhfaW50cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVpX3R4X2VycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGF4bmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWlfcnhfb3ZlcnJ1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogUm91dGluZXMgZ2VuZXJpYyB0byBOUzgzOTAtYmFzZWQgYm9hcmRzLiAqLwogc3RhdGljIHZvaWQgTlM4MzkwX3RyaWdnZXJfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQkJCQkJCQlpbnQgc3RhcnRfcGFnZSk7Ci1zdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBkb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qCkBAIC05NTQsMTUgKzk3MSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQkvKiBUaGUgY2FyZCBJL08gcGFydCBvZiB0aGUgZHJpdmVyIChlLmcuIDNjNTAzKSBjYW4gaG9vayBhIFR4IHRpbWVvdXQKLQkgICAgd3JhcHBlciB0aGF0IGRvZXMgZS5nLiBtZWRpYSBjaGVjayAmIHRoZW4gY2FsbHMgYXhuZXRfdHhfdGltZW91dC4gKi8KLQlpZiAoZGV2LT50eF90aW1lb3V0ID09IE5VTEwpCi0JCSBkZXYtPnR4X3RpbWVvdXQgPSBheG5ldF90eF90aW1lb3V0OwotCWlmIChkZXYtPndhdGNoZG9nX3RpbWVvIDw9IDApCi0JCSBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgotCiAJLyoKIAkgKglHcmFiIHRoZSBwYWdlIGxvY2sgc28gd2Ugb3duIHRoZSByZWdpc3RlciBzZXQsIHRoZW4gY2FsbAogCSAqCXRoZSBpbml0IGZ1bmN0aW9uLgpAQCAtMTcwMSwzMCArMTcwOSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xvY2soZGV2KSwgZmxhZ3MpOwogfQkKIAotLyoqCi0gKiBheGRldl9zZXR1cCAtIGluaXQgcmVzdCBvZiA4MzkwIGRldmljZSBzdHJ1Y3QKLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSB0byBpbml0Ci0gKgotICogSW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgODM5MCBkZXZpY2Ugc3RydWN0dXJlLiAgRG8gTk9UIF9faW5pdAotICogdGhpcywgYXMgaXQgaXMgdXNlZCBieSA4MzkwIGJhc2VkIG1vZHVsYXIgZHJpdmVycyB0b28uCi0gKi8KLQotc3RhdGljIHZvaWQgYXhkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbDsKLQlpZiAoZWlfZGVidWcgPiAxKQotCQlwcmludGsodmVyc2lvbl84MzkwKTsKLSAgICAKLQllaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaW5pdCgmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0gICAgCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYXhuZXRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwk9IGdldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0KLQlldGhlcl9zZXR1cChkZXYpOwotfQotCiAvKiBUaGlzIHBhZ2Ugb2YgZnVuY3Rpb25zIHNob3VsZCBiZSA4MzkwIGdlbmVyaWMgKi8KIC8qIEZvbGxvdyBOYXRpb25hbCBTZW1pJ3MgcmVjb21tZW5kYXRpb25zIGZvciBpbml0aWFsaXppbmcgdGhlICJOSUMiLiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA2OWRjZmJiLi44MWU2NjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTEwMCw3ICsxMDAsNiBAQAogc3RhdGljIGlycXJldHVybl90IGZqbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGZqbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGZqbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZmpuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZmpuX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKQEAgLTExOCw3ICsxMTcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCBub2RlOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIGxvbmcgb3Blbl90aW1lOwogICAgIHVpbnQgdHhfc3RhcnRlZDoxOwogICAgIHVpbnQgdHhfcXVldWU7CkBAIC0yMjksNiArMjI3LDE4IEBACiAjZGVmaW5lIEJBTktfMVUgICAgICAgICAgICAgIDB4MjQgLyogYmFuayAxIChDT05GSUdfMSkgKi8KICNkZWZpbmUgQkFOS18yVSAgICAgICAgICAgICAgMHgyOCAvKiBiYW5rIDIgKENPTkZJR18xKSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZqbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZmpuX29wZW4sCisJLm5kb19zdG9wCQk9IGZqbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZmpuX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGZqbl90eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZyAJPSBmam5fY29uZmlnLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgZm12ajE4eF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwOwpAQCAtMjYwLDE3ICsyNzAsOSBAQAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIC8qIFRoZSBGTVZKMTh4IHNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZmpuX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJmZqbl9jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZmpuX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLSAgICBkZXYtPm9wZW4gPSAmZmpuX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmZqbl9jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBmam5fdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmZmpuX25ldGRldl9vcHM7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCiAgICAgcmV0dXJuIGZtdmoxOHhfY29uZmlnKGxpbmspOwpAQCAtNzkzLDcgKzc5NSw3IEBACiAJZmpuX3J4KGRldik7CiAgICAgfQogICAgIGlmICh0eF9zdGF0ICYgRl9UTVRfUkRZKSB7Ci0JbHAtPnN0YXRzLnR4X3BhY2tldHMgKz0gbHAtPnNlbnQgOworCWRldi0+c3RhdHMudHhfcGFja2V0cyArPSBscC0+c2VudCA7CiAgICAgICAgIGxwLT5zZW50ID0gMCA7CiAJaWYgKGxwLT50eF9xdWV1ZSkgewogCSAgICBvdXRiKERPX1RYIHwgbHAtPnR4X3F1ZXVlLCBpb2FkZHIgKyBUWF9TVEFSVCk7CkBAIC04NDAsNyArODQyLDcgQEAKIAkgICBodG9ucyhpbncoaW9hZGRyICsgNikpLCBodG9ucyhpbncoaW9hZGRyICsgOCkpLAogCSAgIGh0b25zKGludyhpb2FkZHIgKzEwKSksIGh0b25zKGludyhpb2FkZHIgKzEyKSksCiAJICAgaHRvbnMoaW53KGlvYWRkciArMTQpKSk7Ci0gICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAgICAgLyogVG9EbzogV2Ugc2hvdWxkIHRyeSB0byByZXN0YXJ0IHRoZSBhZGFwdG9yLi4uICovCiAgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKICAgICBmam5fcmVzZXQoZGV2KTsKQEAgLTg4MCw3ICs4ODIsNyBAQAogCiAJREVCVUcoNCwgIiVzOiBUcmFuc21pdHRpbmcgYSBwYWNrZXQgb2YgbGVuZ3RoICVsdS5cbiIsCiAJICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylza2ItPmxlbik7Ci0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiBEaXNhYmxlIGJvdGggaW50ZXJydXB0cy4gKi8KIAlvdXR3KDB4MDAwMCwgaW9hZGRyICsgVFhfSU5UUik7CkBAIC0xMDA4LDcgKzEwMTAsNiBAQAogCiBzdGF0aWMgdm9pZCBmam5fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCBib2d1c2NvdW50ID0gMTA7CS8qIDUgLT4gMTA6IGJ5IGFneSAxOTk0MDkyMiAqLwogCkBAIC0xMDI3LDExICsxMDI4LDExIEBACiAJfQogI2VuZGlmCiAJaWYgKChzdGF0dXMgJiAweEYwKSAhPSAweDIwKSB7CS8qIFRoZXJlIHdhcyBhbiBlcnJvci4gKi8KLQkgICAgbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCSAgICBpZiAoc3RhdHVzICYgRl9MRU5fRVJSKSBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCSAgICBpZiAoc3RhdHVzICYgRl9BTEdfRVJSKSBscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX0NSQ19FUlIpIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiBGX09WUl9GTE8pIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCSAgICBpZiAoc3RhdHVzICYgRl9MRU5fRVJSKSBkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkgICAgaWYgKHN0YXR1cyAmIEZfQUxHX0VSUikgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkgICAgaWYgKHN0YXR1cyAmIEZfQ1JDX0VSUikgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJICAgIGlmIChzdGF0dXMgJiBGX09WUl9GTE8pIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAl9IGVsc2UgewogCSAgICB1X3Nob3J0IHBrdF9sZW4gPSBpbncoaW9hZGRyICsgREFUQVBPUlQpOwogCSAgICAvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlci4gKi8KQEAgLTEwNDEsNyArMTA0Miw3IEBACiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFRoZSBGTVYtMTh4IGNsYWltZWQgYSB2ZXJ5ICIKIAkJICAgICAgICJsYXJnZSBwYWNrZXQsIHNpemUgJWQuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlvdXRiKEZfU0tQX1BLVCwgaW9hZGRyICsgUlhfU0tJUCk7Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJYnJlYWs7CiAJICAgIH0KIAkgICAgc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKzIpOwpAQCAtMTA0OSw3ICsxMDUwLDcgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nICIKIAkJICAgICAgICJwYWNrZXQgKGxlbiAlZCkuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlvdXRiKEZfU0tQX1BLVCwgaW9hZGRyICsgUlhfU0tJUCk7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlicmVhazsKIAkgICAgfQogCkBAIC0xMDcwLDggKzEwNzEsOCBAQAogI2VuZGlmCiAKIAkgICAgbmV0aWZfcngoc2tiKTsKLQkgICAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkgICAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJfQogCWlmICgtLWJvZ3VzY291bnQgPD0gMCkKIAkgICAgYnJlYWs7CkBAIC0xMTkxLDE0ICsxMTkyLDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZmpuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHJldHVybiAmbHAtPnN0YXRzOwotfSAvKiBmam5fZ2V0X3N0YXRzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiAvKgogICBTZXQgdGhlIG11bHRpY2FzdC9wcm9taXNjdW91cyBtb2RlIGZvciB0aGlzIGFkYXB0b3IuCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCmluZGV4IGVjN2M1ODguLjAyZWY2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKQEAgLTQzNiw2ICs0MzYsMTkgQEAKIAogc3RhdGljIHZvaWQgbm1jbGFuX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hY2VfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbWFjZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBtYWNlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtYWNlX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IG1hY2VfdHhfdGltZW91dCwKKwkubmRvX3NldF9jb25maWcJCT0gbWFjZV9jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gbWFjZV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG5tY2xhbl9hdHRhY2gKIAlDcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZyBsb2NhbCBkYXRhCkBAIC00NzQsMTcgKzQ4Nyw5IEBACiAKICAgICBscC0+dHhfZnJlZV9mcmFtZXM9QU0yMTUwX01BWF9UWF9GUkFNRVM7CiAKLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZtYWNlX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJm1hY2VfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzID0gJm1hY2VfZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbWFjZV9uZXRkZXZfb3BzOwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwotICAgIGRldi0+b3BlbiA9ICZtYWNlX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJm1hY2VfY2xvc2U7Ci0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCi0gICAgZGV2LT50eF90aW1lb3V0ID0gbWFjZV90eF90aW1lb3V0OwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotI2VuZGlmCiAKICAgICByZXR1cm4gbm1jbGFuX2NvbmZpZyhsaW5rKTsKIH0gLyogbm1jbGFuX2F0dGFjaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCBhNjk5OTQwLi4yZmJmOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlICIuLi84MzkwLmgiCiAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KQEAgLTIzMyw2ICsyMzQsMjMgQEAKIAlyZXR1cm4gKHBjbmV0X2Rldl90ICopKHAgKyBzaXplb2Yoc3RydWN0IGVpX2RldmljZSkpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBjbmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHBjbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHBjbmV0X2Nsb3NlLAorCS5uZG9fc2V0X2NvbmZpZwkJPSBzZXRfY29uZmlnLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlaV9zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsIAkJPSBlaV9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWlfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgCT0gZWlfcG9sbCwKKyNlbmRpZgorfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBwY25ldF9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMjYwLDkgKzI3OCw3IEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgZGV2LT5vcGVuID0gJnBjbmV0X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnBjbmV0X2Nsb3NlOwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZzZXRfY29uZmlnOworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZwY25ldF9uZXRkZXZfb3BzOwogCiAgICAgcmV0dXJuIHBjbmV0X2NvbmZpZyhsaW5rKTsKIH0gLyogcGNuZXRfYXR0YWNoICovCkBAIC02NDAsMTggKzY1NiwxMiBAQAogCiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKLSAgICBpZiAoaW5mby0+ZmxhZ3MgJiAoSVNfREwxMDAxOXxJU19ETDEwMDIyKSkgewotCWRldi0+ZG9faW9jdGwgPSAmZWlfaW9jdGw7CisgICAgaWYgKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpCiAJbWlpX3BoeV9wcm9iZShkZXYpOwotICAgIH0KIAogICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKLSNlbmRpZgotCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgInBjbmV0X2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwogCWxpbmstPmRldl9ub2RlID0gTlVMTDsKQEAgLTExODMsNiArMTE5MywxMCBAQAogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwogICAgIHUxNiAqZGF0YSA9ICh1MTYgKikmcnEtPmlmcl9pZnJ1OwogICAgIHVuc2lnbmVkIGludCBtaWlfYWRkciA9IGRldi0+YmFzZV9hZGRyICsgRExJTktfR1BJTzsKKworICAgIGlmICghKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpKQorCXJldHVybiAtRUlOVkFMOworCiAgICAgc3dpdGNoIChjbWQpIHsKICAgICBjYXNlIFNJT0NHTUlJUEhZOgogCWRhdGFbMF0gPSBpbmZvLT5waHlfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IGZjY2Q1M2UuLjc3NDIzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICBzcGlubG9ja190CQkJbG9jazsKICAgICB1X3Nob3J0CQkJbWFuZmlkOwogICAgIHVfc2hvcnQJCQljYXJkaWQ7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisKICAgICBkZXZfbm9kZV90CQkJbm9kZTsKICAgICBzdHJ1Y3Qgc2tfYnVmZgkJKnNhdmVkX3NrYjsKICAgICBpbnQJCQkJcGFja2V0c193YWl0aW5nOwpAQCAtMjg5LDcgKzI4OSw2IEBACiBzdGF0aWMgaW50IHNtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHNtY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHNtY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc21jX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzOWtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTsKIHN0YXRpYyB2b2lkIHNtY19zZXRfeGN2cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZfcG9ydCk7CkBAIC0zMDEsNiArMzAwLDE5IEBACiBzdGF0aWMgaW50IHNtY19saW5rX29rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gc21jX29wZW4sCisJLm5kb19zdG9wCQk9IHNtY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc21jX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHNtY190eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZyAJPSBzOWtfY29uZmlnLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19kb19pb2N0bAkJPSAmc21jX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICBzbWM5MWM5Ml9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMzM2LDE4ICszNDgsOSBAQAogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAgICAgLyogVGhlIFNNQzkxYzkyLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc21jX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmc21jX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmczlrX2NvbmZpZzsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLSAgICBkZXYtPm9wZW4gPSAmc21jX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnNtY19jbG9zZTsKLSAgICBkZXYtPmRvX2lvY3RsID0gJnNtY19pb2N0bDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmc21jX25ldGRldl9vcHM7CiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzKTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBzbWNfdHhfdGltZW91dDsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgogCiAgICAgc21jLT5taWlfaWYuZGV2ID0gZGV2OwogICAgIHNtYy0+bWlpX2lmLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKQEAgLTEyOTEsNyArMTI5NCw3IEBACiAJcmV0dXJuOwogICAgIH0KIAotICAgIHNtYy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKICAgICAvKiBUaGUgY2FyZCBzaG91bGQgdXNlIHRoZSBqdXN0LWFsbG9jYXRlZCBidWZmZXIuICovCiAgICAgb3V0dyhwYWNrZXRfbm8sIGlvYWRkciArIFBOUl9BUlIpOwogICAgIC8qIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCAqLwpAQCAtMTM0MCw3ICsxMzQzLDcgQEAKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBTTUM5MWM5MiB0cmFuc21pdCB0aW1lZCBvdXQsICIKIAkgICAiVHhfc3RhdHVzICUyLjJ4IHN0YXR1cyAlNC40eC5cbiIsCiAJICAgZGV2LT5uYW1lLCBpbncoaW9hZGRyKSYweGZmLCBpbncoaW9hZGRyICsgMikpOwotICAgIHNtYy0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICBzbWNfcmVzZXQoZGV2KTsKICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKICAgICBzbWMtPnNhdmVkX3NrYiA9IE5VTEw7CkBAIC0xMzYyLDcgKzEzNjUsNyBAQAogCiAgICAgaWYgKHNtYy0+c2F2ZWRfc2tiKSB7CiAJLyogVEhJUyBTSE9VTEQgTkVWRVIgSEFQUEVOLiAqLwotCXNtYy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcm5hbCBlcnJvciAtLSBzZW50IHBhY2tldCB3aGlsZSBidXN5LlxuIiwKIAkgICAgICAgZGV2LT5uYW1lKTsKIAlyZXR1cm4gMTsKQEAgLTEzNzUsNyArMTM3OCw3IEBACiAJcHJpbnRrKEtFUk5fRVJSICIlczogRmFyIHRvbyBiaWcgcGFja2V0IGVycm9yLlxuIiwgZGV2LT5uYW1lKTsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogCXNtYy0+c2F2ZWRfc2tiID0gTlVMTDsKLQlzbWMtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAlyZXR1cm4gMDsJCS8qIERvIG5vdCByZS1xdWV1ZSB0aGlzIHBhY2tldC4gKi8KICAgICB9CiAgICAgLyogQSBwYWNrZXQgaXMgbm93IHdhaXRpbmcuICovCkBAIC0xNDMzLDExICsxNDM2LDExIEBACiAKICAgICB0eF9zdGF0dXMgPSBpbncoaW9hZGRyICsgREFUQV8xKTsKIAotICAgIHNtYy0+c3RhdHMudHhfZXJyb3JzKys7Ci0gICAgaWYgKHR4X3N0YXR1cyAmIFRTX0xPU1RDQVIpIHNtYy0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLSAgICBpZiAodHhfc3RhdHVzICYgVFNfTEFUQ09MKSAgc21jLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKyAgICBpZiAodHhfc3RhdHVzICYgVFNfTE9TVENBUikgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworICAgIGlmICh0eF9zdGF0dXMgJiBUU19MQVRDT0wpICBkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKICAgICBpZiAodHhfc3RhdHVzICYgVFNfMTZDT0wpIHsKLQlzbWMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCXNtYy0+dHhfZXJyKys7CiAgICAgfQogCkBAIC0xNDc0LDEwICsxNDc3LDEwIEBACiAgICAgLyogQ291bGQgYmUgYSBjb3VudGVyIHJvbGwtb3ZlciB3YXJuaW5nOiB1cGRhdGUgc3RhdHMuICovCiAgICAgY2FyZF9zdGF0cyA9IGludyhpb2FkZHIgKyBDT1VOVEVSKTsKICAgICAvKiBzaW5nbGUgY29sbGlzaW9ucyAqLwotICAgIHNtYy0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOworICAgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOwogICAgIGNhcmRfc3RhdHMgPj49IDQ7CiAgICAgLyogbXVsdGlwbGUgY29sbGlzaW9ucyAqLwotICAgIHNtYy0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOworICAgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOwogI2lmIDAgCQkvKiBUaGVzZSBhcmUgZm9yIHdoZW4gbGludXggc3VwcG9ydHMgdGhlc2Ugc3RhdGlzdGljcyAqLwogICAgIGNhcmRfc3RhdHMgPj49IDQ7CQkJLyogZGVmZXJyZWQgKi8KICAgICBjYXJkX3N0YXRzID4+PSA0OwkJCS8qIGV4Y2VzcyBkZWZlcnJlZCAqLwpAQCAtMTU1MSw3ICsxNTU0LDcgQEAKIAlpZiAoc3RhdHVzICYgSU1fVFhfRU1QVFlfSU5UKSB7CiAJICAgIG91dHcoSU1fVFhfRU1QVFlfSU5ULCBpb2FkZHIgKyBJTlRFUlJVUFQpOwogCSAgICBtYXNrICY9IH5JTV9UWF9FTVBUWV9JTlQ7Ci0JICAgIHNtYy0+c3RhdHMudHhfcGFja2V0cyArPSBzbWMtPnBhY2tldHNfd2FpdGluZzsKKwkgICAgZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IHNtYy0+cGFja2V0c193YWl0aW5nOwogCSAgICBzbWMtPnBhY2tldHNfd2FpdGluZyA9IDA7CiAJfQogCWlmIChzdGF0dXMgJiBJTV9BTExPQ19JTlQpIHsKQEAgLTE1NjcsOCArMTU3MCw4IEBACiAJICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CiAJaWYgKHN0YXR1cyAmIElNX1JYX09WUk5fSU5UKSB7Ci0JICAgIHNtYy0+c3RhdHMucnhfZXJyb3JzKys7Ci0JICAgIHNtYy0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCSAgICBpZiAoc21jLT5kdXBsZXgpCiAJCXNtYy0+cnhfb3ZybiA9IDE7IC8qIG5lZWQgTUNfUkVTRVQgb3V0c2lkZSBzbWNfaW50ZXJydXB0ICovCiAJICAgIG91dHcoSU1fUlhfT1ZSTl9JTlQsIGlvYWRkciArIElOVEVSUlVQVCk7CkBAIC0xNjE4LDcgKzE2MjEsNiBAQAogCiBzdGF0aWMgdm9pZCBzbWNfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCByeF9zdGF0dXM7CiAgICAgaW50IHBhY2tldF9sZW5ndGg7CS8qIENhdXRpb246IG5vdCBmcmFtZSBsZW5ndGgsIHJhdGhlciB3b3JkcwpAQCAtMTY0OSw3ICsxNjUxLDcgQEAKIAkKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkgICAgREVCVUcoMSwgIiVzOiBMb3cgbWVtb3J5LCBwYWNrZXQgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSk7Ci0JICAgIHNtYy0+c3RhdHMucnhfZHJvcHBlZCsrOworCSAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkgICAgb3V0dyhNQ19SRUxFQVNFLCBpb2FkZHIgKyBNTVVfQ01EKTsKIAkgICAgcmV0dXJuOwogCX0KQEAgLTE2NjIsMTggKzE2NjQsMTggQEAKIAkKIAluZXRpZl9yeChza2IpOwogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0Jc21jLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0Jc21jLT5zdGF0cy5yeF9ieXRlcyArPSBwYWNrZXRfbGVuZ3RoOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGFja2V0X2xlbmd0aDsKIAlpZiAocnhfc3RhdHVzICYgUlNfTVVMVElDQVNUKQotCSAgICBzbWMtPnN0YXRzLm11bHRpY2FzdCsrOworCSAgICBkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogICAgIH0gZWxzZSB7CiAJLyogZXJyb3IgLi4uICovCi0Jc21jLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQotCWlmIChyeF9zdGF0dXMgJiBSU19BTEdORVJSKSAgc21jLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwlpZiAocnhfc3RhdHVzICYgUlNfQUxHTkVSUikgIGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJaWYgKHJ4X3N0YXR1cyAmIChSU19UT09TSE9SVCB8IFJTX1RPT0xPTkcpKQotCSAgICBzbWMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQlpZiAocnhfc3RhdHVzICYgUlNfQkFEQ1JDKQlzbWMtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJaWYgKHJ4X3N0YXR1cyAmIFJTX0JBRENSQykJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAgICAgfQogICAgIC8qIExldCB0aGUgTU1VIGZyZWUgdGhlIG1lbW9yeSBvZiB0aGlzIHBhY2tldC4gKi8KICAgICBvdXR3KE1DX1JFTEVBU0UsIGlvYWRkciArIE1NVV9DTUQpOwpAQCAtMTY4MSwxNSArMTY4Myw2IEBACiAgICAgcmV0dXJuOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIC8qIE5vdGhpbmcgdG8gdXBkYXRlIC0gdGhlIDkxYzkyIGlzIGEgcHJldHR5IHByaW1hdGl2ZSBjaGlwLiAqLwotICAgIHJldHVybiAmc21jLT5zdGF0czsKLX0KLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBDYWxjdWxhdGUgdmFsdWVzIGZvciB0aGUgaGFyZHdhcmUgbXVsdGljYXN0IGZpbHRlciBoYXNoIHRhYmxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggZmVmN2UxOC4uYTM2ODVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKICAgICBkZXZfbm9kZV90IG5vZGU7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKICAgICBpbnQgY2FyZF90eXBlOwogICAgIGludCBwcm9iZV9wb3J0OwogICAgIGludCBzaWxpY29uOyAvKiBzaWxpY29uIHJldmlzaW9uLiAwPW9sZCBDRTIsIDE9U2NpcHBlciwgND1Nb2hhd2sgKi8KQEAgLTM1NSw3ICszNTUsNiBAQAogc3RhdGljIGludCBkb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyYzJwc190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZG9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X2FkZHJlc3NlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2V0X2NhcmRfdHlwZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgY29uc3Qgdm9pZCAqcyk7CkBAIC01NDYsNiArNTQ1LDE5IEBACiAKIC8qPT09PT09PT09PT09PSBNYWluIGJ1bGsgb2YgZnVuY3Rpb25zCT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGRvX29wZW4sCisJLm5kb19zdG9wCQk9IGRvX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGRvX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHhpcmNfdHhfdGltZW91dCwKKwkubmRvX3NldF9jb25maWcJCT0gZG9fY29uZmlnLAorCS5uZG9fZG9faW9jdGwJCT0gZG9faW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKioqKioqKioqKioqKioqCiAgKiB4aXJjMnBzX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCiAgKiBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKQEAgLTU4MSwxOSArNTkzLDEwIEBACiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCiAgICAgLyogRmlsbCBpbiBjYXJkIHNwZWNpZmljIGVudHJpZXMgKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZkb19zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZkb19jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZG9fZ2V0X3N0YXRzOwotICAgIGRldi0+ZG9faW9jdGwgPSAmZG9faW9jdGw7Ci0gICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotICAgIGRldi0+b3BlbiA9ICZkb19vcGVuOwotICAgIGRldi0+c3RvcCA9ICZkb19zdG9wOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IHhpcmNfdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKKyAgICBkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICAgICBJTklUX1dPUksoJmxvY2FsLT50eF90aW1lb3V0X3Rhc2ssIHhpcmMycHNfdHhfdGltZW91dF90YXNrKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIHhpcmMycHNfY29uZmlnKGxpbmspOwogfSAvKiB4aXJjMnBzX2F0dGFjaCAqLwpAQCAtMTE3Miw3ICsxMTc1LDcgQEAKIAlpZiAoYnl0ZXNfcmN2ZCA+IG1heHJ4X2J5dGVzICYmIChyc3IgJiBQa3RSeE9rKSkgewogCSAgICAvKiB0b28gbWFueSBieXRlcyByZWNlaXZlZCBkdXJpbmcgdGhpcyBpbnQsIGRyb3AgdGhlIHJlc3Qgb2YgdGhlCiAJICAgICAqIHBhY2tldHMgKi8KLQkgICAgbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJICAgIERFQlVHKDIsICIlczogUlggZHJvcCwgdG9vIG11Y2ggZG9uZVxuIiwgZGV2LT5uYW1lKTsKIAl9IGVsc2UgaWYgKHJzciAmIFBrdFJ4T2spIHsKIAkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTExODYsNyArMTE4OSw3IEBACiAJICAgIGlmICghc2tiKSB7CiAJCXByaW50ayhLTk9UX1hJUkMgImxvdyBtZW1vcnksIHBhY2tldCBkcm9wcGVkIChzaXplPSV1KVxuIiwKIAkJICAgICAgIHBrdGxlbik7Ci0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCSAgICB9IGVsc2UgeyAvKiBva2F5IGdldCB0aGUgcGFja2V0ICovCiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJCWlmIChscC0+c2lsaWNvbiA9PSAwICkgeyAvKiB3b3JrIGFyb3VuZCBhIGhhcmR3YXJlIGJ1ZyAqLwpAQCAtMTI0MiwyNCArMTI0NSwyNCBAQAogCQl9CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCW5ldGlmX3J4KHNrYik7Ci0JCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RsZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdGxlbjsKIAkJaWYgKCEocnNyICYgUGh5UGt0KSkKLQkJICAgIGxwLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJICAgIGRldi0+c3RhdHMubXVsdGljYXN0Kys7CiAJICAgIH0KIAl9IGVsc2UgeyAvKiBiYWQgcGFja2V0ICovCiAJICAgIERFQlVHKDUsICJyc3I9JSMwMnhcbiIsIHJzcik7CiAJfQogCWlmIChyc3IgJiBQa3RUb29Mb25nKSB7Ci0JICAgIGxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkgICAgREVCVUcoMywgIiVzOiBQYWNrZXQgdG9vIGxvbmdcbiIsIGRldi0+bmFtZSk7CiAJfQogCWlmIChyc3IgJiBDUkNFcnIpIHsKLQkgICAgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJICAgIERFQlVHKDMsICIlczogQ1JDIGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCX0KIAlpZiAocnNyICYgQWxpZ25FcnIpIHsKLQkgICAgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7IC8qIG9rYXkgPyAqLworCSAgICBkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7IC8qIG9rYXkgPyAqLwogCSAgICBERUJVRygzLCAiJXM6IEFsaWdubWVudCBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKQEAgLTEyNzAsNyArMTI3Myw3IEBACiAJZXRoX3N0YXR1cyA9IEdldEJ5dGUoWElSQ1JFR19FU1IpOwogICAgIH0KICAgICBpZiAocnhfc3RhdHVzICYgMHgxMCkgeyAvKiBSZWNlaXZlIG92ZXJydW4gKi8KLQlscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJUHV0Qnl0ZShYSVJDUkVHX0NSLCBDbGVhclJ4T3ZydW4pOwogCURFQlVHKDMsICJyZWNlaXZlIG92ZXJydW4gY2xlYXJlZFxuIik7CiAgICAgfQpAQCAtMTI4MywxMSArMTI4NiwxMSBAQAogCW5uID0gR2V0Qnl0ZShYSVJDUkVHMF9QVFIpOwogCWxwLT5sYXN0X3B0cl92YWx1ZSA9IG5uOwogCWlmIChubiA8IG4pIC8qIHJvbGxvdmVyICovCi0JICAgIGxwLT5zdGF0cy50eF9wYWNrZXRzICs9IDI1NiAtIG47CisJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cyArPSAyNTYgLSBuOwogCWVsc2UgaWYgKG4gPT0gbm4pIHsgLyogaGFwcGVucyBzb21ldGltZXMgLSBkb24ndCBrbm93IHdoeSAqLwogCSAgICBERUJVRygwLCAiUFRSIG5vdCBjaGFuZ2VkP1xuIik7CiAJfSBlbHNlCi0JICAgIGxwLT5zdGF0cy50eF9wYWNrZXRzICs9IGxwLT5sYXN0X3B0cl92YWx1ZSAtIG47CisJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cyArPSBscC0+bGFzdF9wdHJfdmFsdWUgLSBuOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKICAgICB9CiAgICAgaWYgKHR4X3N0YXR1cyAmIDB4MDAwMikgewkvKiBFeGVjZXNzaXZlIGNvbGxpc3Npb25zICovCkBAIC0xMjk1LDcgKzEyOTgsNyBAQAogCVB1dEJ5dGUoWElSQ1JFR19DUiwgUmVzdGFydFR4KTsgIC8qIHJlc3RhcnQgdHJhbnNtaXR0ZXIgcHJvY2VzcyAqLwogICAgIH0KICAgICBpZiAodHhfc3RhdHVzICYgMHgwMDQwKQotCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAogICAgIC8qIHJlY2FsY3VsYXRlIG91ciB3b3JrIGNodW5rIHNvIHRoYXQgd2UgbGltaXQgdGhlIGR1cmF0aW9uIG9mIHRoaXMKICAgICAgKiBJU1IgdG8gYWJvdXQgMS8xMCBvZiBhIHNlY29uZC4KQEAgLTEzNTMsNyArMTM1Niw3IEBACiB4aXJjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXRcbiIsIGRldi0+bmFtZSk7CiAgICAgc2NoZWR1bGVfd29yaygmbHAtPnR4X3RpbWVvdXRfdGFzayk7CiB9CkBAIC0xNDA5LDIwICsxNDEyLDExIEBACiAKICAgICBkZXZfa2ZyZWVfc2tiIChza2IpOwogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotICAgIGxwLT5zdGF0cy50eF9ieXRlcyArPSBwa3RsZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBwa3RsZW47CiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLWRvX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0gICAgLyoJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBHZXRCeXRlKD8pICovCi0gICAgcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KIC8qKioqKioqKioqKioqKioqCiAgKiBTZXQgYWxsIGFkZHJlc3NlczogVGhpcyBmaXJzdCBvbmUgaXMgdGhlIGluZGl2aWR1YWwgYWRkcmVzcywKICAqIHRoZSBuZXh0IDkgYWRkcmVzc2VzIGFyZSB0YWtlbiBmcm9tIHRoZSBtdWx0aWNhc3QgbGlzdCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCA2NjVhNDI4Li44MDEyNGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0xMzk3LDcgKzEzOTcsNyBAQAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCS8qIGNsZWFyIGludGVycnVwdCBtYXNrcyAqLwogCQl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjMpOwpAQCAtMjU5MiwxNCArMjU5MiwxNCBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjApOwogCQkJLyogdW5saWtlIGZvciB0aGUgbGFuY2UsIHRoZXJlIGlzIG5vIHJlc3RhcnQgbmVlZGVkICovCiAJCX0KLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKIAkJCXUxNiB2YWw7CiAJCQkvKiBzZXQgaW50ZXJydXB0IG1hc2tzICovCiAJCQl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjMpOwogCQkJdmFsIHw9IDB4NWYwMDsKIAkJCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjMsIHZhbCk7CiAJCQltbWlvd2IoKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCQkJYnJlYWs7CiAJCX0KIAkJY3NyMCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKaW5kZXggYWYyOGZmNy4uMzM5ODRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwpAQCAtMjAyLDE2ICsyMDIsMjEgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsKIAlzdHJ1Y3QgbWRpb19ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CiAKIAlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghcGRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGRhdGEtPm1kYyA9IG9mX2dldF9ncGlvKG9mZGV2LT5ub2RlLCAwKTsKLQlwZGF0YS0+bWRpbyA9IG9mX2dldF9ncGlvKG9mZGV2LT5ub2RlLCAxKTsKLQotCWlmIChwZGF0YS0+bWRjIDwgMCB8fCBwZGF0YS0+bWRpbyA8IDApCisJcmV0ID0gb2ZfZ2V0X2dwaW8ob2ZkZXYtPm5vZGUsIDApOworCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9mcmVlOworCXBkYXRhLT5tZGMgPSByZXQ7CisKKwlyZXQgPSBvZl9nZXRfZ3BpbyhvZmRldi0+bm9kZSwgMSk7CisJaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKKwlwZGF0YS0+bWRpbyA9IHJldDsKIAogCXdoaWxlICgobnAgPSBvZl9nZXRfbmV4dF9jaGlsZChvZmRldi0+bm9kZSwgbnApKSkKIAkJaWYgKCFzdHJjbXAobnAtPnR5cGUsICJldGhlcm5ldC1waHkiKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKaW5kZXggODExYTYzNzY5Li5iNzU0MDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC05OCw3ICs5OSw3IEBACiAJYnVzLT5kZXYucGFyZW50ID0gYnVzLT5wYXJlbnQ7CiAJYnVzLT5kZXYuY2xhc3MgPSAmbWRpb19idXNfY2xhc3M7CiAJYnVzLT5kZXYuZ3JvdXBzID0gTlVMTDsKLQlkZXZfc2V0X25hbWUoJmJ1cy0+ZGV2LCBidXMtPmlkKTsKKwlkZXZfc2V0X25hbWUoJmJ1cy0+ZGV2LCAiJXMiLCBidXMtPmlkKTsKIAogCWVyciA9IGRldmljZV9yZWdpc3RlcigmYnVzLT5kZXYpOwogCWlmIChlcnIpIHsKQEAgLTI4NiwzMyArMjg3LDU4IEBACiAJCShwaHlkZXYtPnBoeV9pZCAmIHBoeWRydi0+cGh5X2lkX21hc2spKTsKIH0KIAorc3RhdGljIGJvb2wgbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IHBoeWRldi0+ZGV2LmRyaXZlcjsKKwlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkcnYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwaHlkZXYtPmF0dGFjaGVkX2RldjsKKworCWlmICghZHJ2IHx8ICFwaHlkcnYtPnN1c3BlbmQpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFBIWSBub3QgYXR0YWNoZWQ/IE1heSBzdXNwZW5kLiAqLworCWlmICghbmV0ZGV2KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogRG9uJ3Qgc3VzcGVuZCBQSFkgaWYgdGhlIGF0dGNoZWQgbmV0ZGV2IHBhcmVudCBtYXkgd2FrZXVwLgorCSAqIFRoZSBwYXJlbnQgbWF5IHBvaW50IHRvIGEgUENJIGRldmljZSwgYXMgaW4gdGczIGRyaXZlci4KKwkgKi8KKwlpZiAobmV0ZGV2LT5kZXYucGFyZW50ICYmIGRldmljZV9tYXlfd2FrZXVwKG5ldGRldi0+ZGV2LnBhcmVudCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogQWxzbyBkb24ndCBzdXNwZW5kIFBIWSBpZiB0aGUgbmV0ZGV2IGl0c2VsZiBtYXkgd2FrZXVwLiBUaGlzCisJICogaXMgdGhlIGNhc2UgZm9yIGRldmljZXMgdy9vIHVuZGVybGF5aW5nIHB3ci4gbWdtdC4gYXdhcmUgYnVzLAorCSAqIGUuZy4gU29DIGRldmljZXMuCisJICovCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZuZXRkZXYtPmRldikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiAvKiBTdXNwZW5kIGFuZCByZXN1bWUuICBDb3BpZWQgZnJvbSBwbGF0Zm9ybV9zdXNwZW5kIGFuZAogICogcGxhdGZvcm1fcmVzdW1lCiAgKi8KIHN0YXRpYyBpbnQgbWRpb19idXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwotCXN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYgPSB0b19waHlfZHJpdmVyKGRydik7CisJc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7CiAKLQlpZiAoZHJ2ICYmIHBoeWRydi0+c3VzcGVuZCAmJiAhZGV2aWNlX21heV93YWtldXAocGh5ZGV2LT5kZXYucGFyZW50KSkKLQkJcmV0ID0gcGh5ZHJ2LT5zdXNwZW5kKHBoeWRldik7Ci0KLQlyZXR1cm4gcmV0OworCWlmICghbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHBoeWRldikpCisJCXJldHVybiAwOworCXJldHVybiBwaHlkcnYtPnN1c3BlbmQocGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBtZGlvX2J1c19yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKIHsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIoZHJ2KTsKKwlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKIAotCWlmIChkcnYgJiYgcGh5ZHJ2LT5yZXN1bWUgJiYgIWRldmljZV9tYXlfd2FrZXVwKHBoeWRldi0+ZGV2LnBhcmVudCkpCi0JCXJldCA9IHBoeWRydi0+cmVzdW1lKHBoeWRldik7Ci0KLQlyZXR1cm4gcmV0OworCWlmICghbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHBoeWRldikpCisJCXJldHVybiAwOworCXJldHVybiBwaHlkcnYtPnJlc3VtZShwaHlkZXYpOwogfQogCiBzdHJ1Y3QgYnVzX3R5cGUgbWRpb19idXNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCBlNGVkZTYwLi41OGI3M2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC00MTQsNyArNDE0LDYgQEAKIAogc3RhdGljIHZvaWQgcGh5X2NoYW5nZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcGh5X3N0YXRlX21hY2hpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIHBoeV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogCiAvKioKICAqIHBoeV9zdGFydF9tYWNoaW5lIC0gc3RhcnQgUEhZIHN0YXRlIG1hY2hpbmUgdHJhY2tpbmcKQEAgLTQzNCwxMSArNDMzLDggQEAKIHsKIAlwaHlkZXYtPmFkanVzdF9zdGF0ZSA9IGhhbmRsZXI7CiAKLQlJTklUX1dPUksoJnBoeWRldi0+c3RhdGVfcXVldWUsIHBoeV9zdGF0ZV9tYWNoaW5lKTsKLQlpbml0X3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0JcGh5ZGV2LT5waHlfdGltZXIuZnVuY3Rpb24gPSAmcGh5X3RpbWVyOwotCXBoeWRldi0+cGh5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGh5ZGV2OwotCW1vZF90aW1lcigmcGh5ZGV2LT5waHlfdGltZXIsIGppZmZpZXMgKyBIWik7CisJSU5JVF9ERUxBWUVEX1dPUksoJnBoeWRldi0+c3RhdGVfcXVldWUsIHBoeV9zdGF0ZV9tYWNoaW5lKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsIGppZmZpZXMgKyBIWik7CiB9CiAKIC8qKgpAQCAtNDUxLDggKzQ0Nyw3IEBACiAgKi8KIHZvaWQgcGh5X3N0b3BfbWFjaGluZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWRlbF90aW1lcl9zeW5jKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0JY2FuY2VsX3dvcmtfc3luYygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKIAogCW11dGV4X2xvY2soJnBoeWRldi0+bG9jayk7CiAJaWYgKHBoeWRldi0+c3RhdGUgPiBQSFlfVVApCkBAIC02ODAsMTEgKzY3NSw5IEBACiAJaWYgKGVycikKIAkJZ290byBpcnFfZW5hYmxlX2VycjsKIAotCS8qIFN0b3AgdGltZXIgYW5kIHJ1biB0aGUgc3RhdGUgcXVldWUgbm93LiAgVGhlIHdvcmsgZnVuY3Rpb24gZm9yCi0JICogc3RhdGVfcXVldWUgd2lsbCBzdGFydCB0aGUgdGltZXIgdXAgYWdhaW4uCi0JICovCi0JZGVsX3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0Jc2NoZWR1bGVfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJLyogcmVzY2hlZHVsZSBzdGF0ZSBxdWV1ZSB3b3JrIHRvIHJ1biBhcyBzb29uIGFzIHBvc3NpYmxlICovCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsIDApOwogCiAJcmV0dXJuOwogCkBAIC03NjEsMTQgKzc1NCwxMyBAQAogLyoqCiAgKiBwaHlfc3RhdGVfbWFjaGluZSAtIEhhbmRsZSB0aGUgc3RhdGUgbWFjaGluZQogICogQHdvcms6IHdvcmtfc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSB3b3JrIHRvIGJlIGRvbmUKLSAqCi0gKiBEZXNjcmlwdGlvbjogU2NoZWR1bGVkIGJ5IHRoZSBzdGF0ZV9xdWV1ZSB3b3JrcXVldWUgZWFjaCB0aW1lCi0gKiAgIHBoeV90aW1lciBpcyB0cmlnZ2VyZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHBoeV9zdGF0ZV9tYWNoaW5lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9Ci0JCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKKwkJCWNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKIAlpbnQgbmVlZHNfYW5lZyA9IDA7CiAJaW50IGVyciA9IDA7CiAKQEAgLTk0NiwxNyArOTM4LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcGh5X2Vycm9yKHBoeWRldik7CiAKLQltb2RfdGltZXIoJnBoeWRldi0+cGh5X3RpbWVyLCBqaWZmaWVzICsgUEhZX1NUQVRFX1RJTUUgKiBIWik7Ci19Ci0KLS8qIFBIWSB0aW1lciB3aGljaCBzY2hlZHVsZXMgdGhlIHN0YXRlIG1hY2hpbmUgd29yayAqLwotc3RhdGljIHZvaWQgcGh5X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gKHN0cnVjdCBwaHlfZGV2aWNlICopZGF0YTsKLQotCS8qCi0JICogUEhZIEkvTyBvcGVyYXRpb25zIGNhbiBwb3RlbnRpYWxseSBzbGVlcCBzbyB3ZSBlbnN1cmUgdGhhdAotCSAqIGl0J3MgZG9uZSBmcm9tIGEgcHJvY2VzcyBjb250ZXh0Ci0JICovCi0Jc2NoZWR1bGVfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwaHlkZXYtPnN0YXRlX3F1ZXVlLAorCQkJCWppZmZpZXMgKyBQSFlfU1RBVEVfVElNRSAqIEhaKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCmluZGV4IDEzODcxODcuLjUxMjNiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwpAQCAtMTU5LDYgKzE1OSwzMCBAQAogCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSwgfQogfTsKIAorc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGxhbjg3MTBfZHJpdmVyID0geworCS5waHlfaWQJCT0gMHgwMDA3YzBmMCwgLyogT1VJPTB4MDA4MDBmLCBNb2RlbCM9MHgwZiAqLworCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCisJLm5hbWUJCT0gIlNNU0MgTEFOODcxMC9MQU44NzIwIiwKKworCS5mZWF0dXJlcwk9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UKKwkJCQl8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlKSwKKwkuZmxhZ3MJCT0gUEhZX0hBU19JTlRFUlJVUFQgfCBQSFlfSEFTX01BR0lDQU5FRywKKworCS8qIGJhc2ljIGZ1bmN0aW9ucyAqLworCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmNvbmZpZ19pbml0CT0gc21zY19waHlfY29uZmlnX2luaXQsCisKKwkvKiBJUlEgcmVsYXRlZCAqLworCS5hY2tfaW50ZXJydXB0CT0gc21zY19waHlfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBzbXNjX3BoeV9jb25maWdfaW50ciwKKworCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAorCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLCB9Cit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMTc5LDggKzIwMywxNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyNDsKIAorCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIgKCZsYW44NzEwX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCiAJcmV0dXJuIDA7CiAKK2VycjU6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuOTExeF9pbnRfZHJpdmVyKTsKIGVycjQ6CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcwMF9kcml2ZXIpOwogZXJyMzoKQEAgLTE5Myw2ICsyMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc21zY19leGl0KHZvaWQpCiB7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcxMF9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlciAoJmxhbjkxMXhfaW50X2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcwMF9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlciAoJmxhbjgxODdfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKaW5kZXggNjU2N2ZhYi4uNmRlODM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKQEAgLTE1Nyw2ICsxNTcsNyBAQAogewogCXN0cnVjdCBhc3luY3BwcCAqYXA7CiAJaW50IGVycjsKKwlpbnQgc3BlZWQ7CiAKIAlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTE4Nyw2ICsxODgsOCBAQAogCWFwLT5jaGFuLnByaXZhdGUgPSBhcDsKIAlhcC0+Y2hhbi5vcHMgPSAmYXN5bmNfb3BzOwogCWFwLT5jaGFuLm10dSA9IFBQUF9NUlU7CisJc3BlZWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWFwLT5jaGFuLnNwZWVkID0gc3BlZWQ7CiAJZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwpAQCAtMjMzLDExICsyMzYsOSBAQAogCXRhc2tsZXRfa2lsbCgmYXAtPnRzayk7CiAKIAlwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCZhcC0+Y2hhbik7Ci0JaWYgKGFwLT5ycGt0KQotCQlrZnJlZV9za2IoYXAtPnJwa3QpOworCWtmcmVlX3NrYihhcC0+cnBrdCk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZhcC0+cnF1ZXVlKTsKLQlpZiAoYXAtPnRwa3QpCi0JCWtmcmVlX3NrYihhcC0+dHBrdCk7CisJa2ZyZWVfc2tiKGFwLT50cGt0KTsKIAlrZnJlZShhcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDdiMjcyOGIuLjhlZTkxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtNDksNiArNDksMTAgQEAKICNpbmNsdWRlIDxuZXQvc2xoY192ai5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisKICNkZWZpbmUgUFBQX1ZFUlNJT04JIjIuNC4yIgogCiAvKgpAQCAtMTMxLDYgKzEzNSw3IEBACiAJc3RydWN0IHNvY2tfZmlsdGVyICphY3RpdmVfZmlsdGVyOy8qIGZpbHRlciBmb3IgcGt0cyB0byByZXNldCBpZGxlICovCiAJdW5zaWduZWQgcGFzc19sZW4sIGFjdGl2ZV9sZW47CiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi8KKwlzdHJ1Y3QgbmV0CSpwcHBfbmV0OwkvKiB0aGUgbmV0IHdlIGJlbG9uZyB0byAqLwogfTsKIAogLyoKQEAgLTE1NSwxMiArMTYwLDE0IEBACiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBjaGFuX3NlbTsJLyogcHJvdGVjdHMgYGNoYW4nIGR1cmluZyBjaGFuIGlvY3RsICovCiAJc3BpbmxvY2tfdAlkb3dubDsJCS8qIHByb3RlY3RzIGBjaGFuJywgZmlsZS54cSBkZXF1ZXVlICovCiAJc3RydWN0IHBwcAkqcHBwOwkJLyogcHBwIHVuaXQgd2UncmUgY29ubmVjdGVkIHRvICovCisJc3RydWN0IG5ldAkqY2hhbl9uZXQ7CS8qIHRoZSBuZXQgY2hhbm5lbCBiZWxvbmdzIHRvICovCiAJc3RydWN0IGxpc3RfaGVhZCBjbGlzdDsJCS8qIGxpbmsgaW4gbGlzdCBvZiBjaGFubmVscyBwZXIgdW5pdCAqLwogCXJ3bG9ja190CXVwbDsJCS8qIHByb3RlY3RzIGBwcHAnICovCiAjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTksKIAl1OAkJYXZhaWw7CQkvKiBmbGFnIHVzZWQgaW4gbXVsdGlsaW5rIHN0dWZmICovCiAJdTgJCWhhZF9mcmFnOwkvKiA+PSAxIGZyYWdtZW50cyBoYXZlIGJlZW4gc2VudCAqLwogCXUzMgkJbGFzdHNlcTsJLyogTVA6IGxhc3Qgc2VxdWVuY2UgIyByZWNlaXZlZCAqLworCWludCAgICAgc3BlZWQ7CQkvKiBzcGVlZCBvZiB0aGUgY29ycmVzcG9uZGluZyBwcHAgY2hhbm5lbCovCiAjZW5kaWYgLyogQ09ORklHX1BQUF9NVUxUSUxJTksgKi8KIH07CiAKQEAgLTE3MywyNiArMTgwLDM1IEBACiAgKiBjaGFubmVsLmRvd25sLgogICovCiAKLS8qCi0gKiBhbGxfcHBwX211dGV4IHByb3RlY3RzIHRoZSBhbGxfcHBwX3VuaXRzIG1hcHBpbmcuCi0gKiBJdCBhbHNvIGVuc3VyZXMgdGhhdCBmaW5kaW5nIGEgcHBwIHVuaXQgaW4gdGhlIGFsbF9wcHBfdW5pdHMgbWFwCi0gKiBhbmQgdXBkYXRpbmcgaXRzIGZpbGUucmVmY250IGZpZWxkIGlzIGF0b21pYy4KLSAqLwotc3RhdGljIERFRklORV9NVVRFWChhbGxfcHBwX211dGV4KTsKIHN0YXRpYyBhdG9taWNfdCBwcHBfdW5pdF9jb3VudCA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIERFRklORV9JRFIocHBwX3VuaXRzX2lkcik7Ci0KLS8qCi0gKiBhbGxfY2hhbm5lbHNfbG9jayBwcm90ZWN0cyBhbGxfY2hhbm5lbHMgYW5kIGxhc3RfY2hhbm5lbF9pbmRleCwKLSAqIGFuZCB0aGUgYXRvbWljaXR5IG9mIGZpbmQgYSBjaGFubmVsIGFuZCB1cGRhdGluZyBpdHMgZmlsZS5yZWZjbnQKLSAqIGZpZWxkLgotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFsbF9jaGFubmVsc19sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQoYWxsX2NoYW5uZWxzKTsKLXN0YXRpYyBMSVNUX0hFQUQobmV3X2NoYW5uZWxzKTsKLXN0YXRpYyBpbnQgbGFzdF9jaGFubmVsX2luZGV4Owogc3RhdGljIGF0b21pY190IGNoYW5uZWxfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIAorLyogcGVyLW5ldCBwcml2YXRlIGRhdGEgZm9yIHRoaXMgbW9kdWxlICovCitzdGF0aWMgaW50IHBwcF9uZXRfaWQ7CitzdHJ1Y3QgcHBwX25ldCB7CisJLyogdW5pdHMgdG8gcHBwIG1hcHBpbmcgKi8KKwlzdHJ1Y3QgaWRyIHVuaXRzX2lkcjsKKworCS8qCisJICogYWxsX3BwcF9tdXRleCBwcm90ZWN0cyB0aGUgdW5pdHNfaWRyIG1hcHBpbmcuCisJICogSXQgYWxzbyBlbnN1cmVzIHRoYXQgZmluZGluZyBhIHBwcCB1bml0IGluIHRoZSB1bml0c19pZHIKKwkgKiBtYXAgYW5kIHVwZGF0aW5nIGl0cyBmaWxlLnJlZmNudCBmaWVsZCBpcyBhdG9taWMuCisJICovCisJc3RydWN0IG11dGV4IGFsbF9wcHBfbXV0ZXg7CisKKwkvKiBjaGFubmVscyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWxsX2NoYW5uZWxzOworCXN0cnVjdCBsaXN0X2hlYWQgbmV3X2NoYW5uZWxzOworCWludCBsYXN0X2NoYW5uZWxfaW5kZXg7CisKKwkvKgorCSAqIGFsbF9jaGFubmVsc19sb2NrIHByb3RlY3RzIGFsbF9jaGFubmVscyBhbmQKKwkgKiBsYXN0X2NoYW5uZWxfaW5kZXgsIGFuZCB0aGUgYXRvbWljaXR5IG9mIGZpbmQKKwkgKiBhIGNoYW5uZWwgYW5kIHVwZGF0aW5nIGl0cyBmaWxlLnJlZmNudCBmaWVsZC4KKwkgKi8KKwlzcGlubG9ja190IGFsbF9jaGFubmVsc19sb2NrOworfTsKKwogLyogR2V0IHRoZSBQUFAgcHJvdG9jb2wgbnVtYmVyIGZyb20gYSBza2IgKi8KICNkZWZpbmUgUFBQX1BST1RPKHNrYikJKCgoc2tiKS0+ZGF0YVswXSA8PCA4KSArIChza2IpLT5kYXRhWzFdKQogCkBAIC0yMTYsOCArMjMyLDggQEAKICNkZWZpbmUgc2VxX2FmdGVyKGEsIGIpCQkoKHMzMikoKGEpIC0gKGIpKSA+IDApCiAKIC8qIFByb3RvdHlwZXMuICovCi1zdGF0aWMgaW50IHBwcF91bmF0dGFjaGVkX2lvY3RsKHN0cnVjdCBwcHBfZmlsZSAqcGYsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgcHBwX3VuYXR0YWNoZWRfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHBwX2ZpbGUgKnBmLAorCQkJc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwKTsKIHN0YXRpYyB2b2lkIHBwcF9zZW5kX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHApOwpAQCAtMjQwLDEyICsyNTYsMTIgQEAKIHN0YXRpYyB2b2lkIHBwcF9jY3BfY2xvc2VkKHN0cnVjdCBwcHAgKnBwcCk7CiBzdGF0aWMgc3RydWN0IGNvbXByZXNzb3IgKmZpbmRfY29tcHJlc3NvcihpbnQgdHlwZSk7CiBzdGF0aWMgdm9pZCBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpOwotc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9jcmVhdGVfaW50ZXJmYWNlKGludCB1bml0LCBpbnQgKnJldHApOworc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgaW50IHVuaXQsIGludCAqcmV0cCk7CiBzdGF0aWMgdm9pZCBpbml0X3BwcF9maWxlKHN0cnVjdCBwcHBfZmlsZSAqcGYsIGludCBraW5kKTsKIHN0YXRpYyB2b2lkIHBwcF9zaHV0ZG93bl9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKTsKIHN0YXRpYyB2b2lkIHBwcF9kZXN0cm95X2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApOwotc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9maW5kX3VuaXQoaW50IHVuaXQpOwotc3RhdGljIHN0cnVjdCBjaGFubmVsICpwcHBfZmluZF9jaGFubmVsKGludCB1bml0KTsKK3N0YXRpYyBzdHJ1Y3QgcHBwICpwcHBfZmluZF91bml0KHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpOworc3RhdGljIHN0cnVjdCBjaGFubmVsICpwcHBfZmluZF9jaGFubmVsKHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpOwogc3RhdGljIGludCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KTsKIHN0YXRpYyBpbnQgcHBwX2Rpc2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoKTsKIHN0YXRpYyB2b2lkIHBwcF9kZXN0cm95X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCk7CkBAIC0yNTYsNiArMjcyLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnBwcF9jbGFzczsKIAorLyogcGVyIG5ldC1uYW1lc3BhY2UgZGF0YSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwX25ldCAqcHBwX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJQlVHX09OKCFuZXQpOworCisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCk7Cit9CisKIC8qIFRyYW5zbGF0ZXMgYSBQUFAgcHJvdG9jb2wgbnVtYmVyIHRvIGEgTlAgaW5kZXggKE5QID09IG5ldHdvcmsgcHJvdG9jb2wpICovCiBzdGF0aWMgaW5saW5lIGludCBwcm90b190b19ucGluZGV4KGludCBwcm90bykKIHsKQEAgLTU0NCw3ICs1NjgsOCBAQAogCWludCBfX3VzZXIgKnAgPSBhcmdwOwogCiAJaWYgKCFwZikKLQkJcmV0dXJuIHBwcF91bmF0dGFjaGVkX2lvY3RsKHBmLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldHVybiBwcHBfdW5hdHRhY2hlZF9pb2N0bChjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMsCisJCQkJCXBmLCBmaWxlLCBjbWQsIGFyZyk7CiAKIAlpZiAoY21kID09IFBQUElPQ0RFVEFDSCkgewogCQkvKgpAQCAtNzYzLDEyICs3ODgsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHBwcF91bmF0dGFjaGVkX2lvY3RsKHN0cnVjdCBwcHBfZmlsZSAqcGYsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBwcHBfdW5hdHRhY2hlZF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcHBfZmlsZSAqcGYsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHVuaXQsIGVyciA9IC1FRkFVTFQ7CiAJc3RydWN0IHBwcCAqcHBwOwogCXN0cnVjdCBjaGFubmVsICpjaGFuOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlpbnQgX191c2VyICpwID0gKGludCBfX3VzZXIgKilhcmc7CiAKIAlsb2NrX2tlcm5lbCgpOwpAQCAtNzc3LDcgKzgwMyw3IEBACiAJCS8qIENyZWF0ZSBhIG5ldyBwcHAgdW5pdCAqLwogCQlpZiAoZ2V0X3VzZXIodW5pdCwgcCkpCiAJCQlicmVhazsKLQkJcHBwID0gcHBwX2NyZWF0ZV9pbnRlcmZhY2UodW5pdCwgJmVycik7CisJCXBwcCA9IHBwcF9jcmVhdGVfaW50ZXJmYWNlKG5ldCwgdW5pdCwgJmVycik7CiAJCWlmICghcHBwKQogCQkJYnJlYWs7CiAJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZwcHAtPmZpbGU7CkBAIC03OTIsMjkgKzgxOCwzMSBAQAogCQkvKiBBdHRhY2ggdG8gYW4gZXhpc3RpbmcgcHBwIHVuaXQgKi8KIAkJaWYgKGdldF91c2VyKHVuaXQsIHApKQogCQkJYnJlYWs7Ci0JCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOwogCQllcnIgPSAtRU5YSU87Ci0JCXBwcCA9IHBwcF9maW5kX3VuaXQodW5pdCk7CisJCXBuID0gcHBwX3Blcm5ldChuZXQpOworCQltdXRleF9sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CisJCXBwcCA9IHBwcF9maW5kX3VuaXQocG4sIHVuaXQpOwogCQlpZiAocHBwKSB7CiAJCQlhdG9taWNfaW5jKCZwcHAtPmZpbGUucmVmY250KTsKIAkJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZwcHAtPmZpbGU7CiAJCQllcnIgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgUFBQSU9DQVRUQ0hBTjoKIAkJaWYgKGdldF91c2VyKHVuaXQsIHApKQogCQkJYnJlYWs7Ci0JCXNwaW5fbG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOwogCQllcnIgPSAtRU5YSU87Ci0JCWNoYW4gPSBwcHBfZmluZF9jaGFubmVsKHVuaXQpOworCQlwbiA9IHBwcF9wZXJuZXQobmV0KTsKKwkJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCQljaGFuID0gcHBwX2ZpbmRfY2hhbm5lbChwbiwgdW5pdCk7CiAJCWlmIChjaGFuKSB7CiAJCQlhdG9taWNfaW5jKCZjaGFuLT5maWxlLnJlZmNudCk7CiAJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSAmY2hhbi0+ZmlsZTsKIAkJCWVyciA9IDA7CiAJCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTgzNCw2ICs4NjIsNTEgQEAKIAkucmVsZWFzZQk9IHBwcF9yZWxlYXNlCiB9OwogCitzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHBwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CisJaW50IGVycjsKKworCXBuID0ga3phbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZHJfaW5pdCgmcG4tPnVuaXRzX2lkcik7CisJbXV0ZXhfaW5pdCgmcG4tPmFsbF9wcHBfbXV0ZXgpOworCisJSU5JVF9MSVNUX0hFQUQoJnBuLT5hbGxfY2hhbm5lbHMpOworCUlOSVRfTElTVF9IRUFEKCZwbi0+bmV3X2NoYW5uZWxzKTsKKworCXNwaW5fbG9ja19pbml0KCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCwgcG4pOworCWlmIChlcnIpIHsKKwkJa2ZyZWUocG4pOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcF9uZXQgKnBuOworCisJcG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHBwcF9uZXRfaWQpOworCWlkcl9kZXN0cm95KCZwbi0+dW5pdHNfaWRyKTsKKwkvKgorCSAqIGlmIHNvbWVvbmUgaGFzIGNhY2hlZCBvdXIgbmV0IHRoZW4KKwkgKiBmdXJ0aGVyIG5ldF9nZW5lcmljIGNhbGwgd2lsbCByZXR1cm4gTlVMTAorCSAqLworCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcF9uZXRfaWQsIE5VTEwpOworCWtmcmVlKHBuKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBwcHBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcF9pbml0X25ldCwKKwkuZXhpdCA9IHBwcF9leGl0X25ldCwKK307CisKICNkZWZpbmUgUFBQX01BSk9SCTEwOAogCiAvKiBDYWxsZWQgYXQgYm9vdCB0aW1lIGlmIHBwcCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsCkBAIC04NDMsMjUgKzkxNiwzNiBAQAogCWludCBlcnI7CiAKIAlwcmludGsoS0VSTl9JTkZPICJQUFAgZ2VuZXJpYyBkcml2ZXIgdmVyc2lvbiAiIFBQUF9WRVJTSU9OICJcbiIpOwotCWVyciA9IHJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiLCAmcHBwX2RldmljZV9mb3BzKTsKLQlpZiAoIWVycikgewotCQlwcHBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcHAiKTsKLQkJaWYgKElTX0VSUihwcHBfY2xhc3MpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHBwcF9jbGFzcyk7Ci0JCQlnb3RvIG91dF9jaHJkZXY7Ci0JCX0KLQkJZGV2aWNlX2NyZWF0ZShwcHBfY2xhc3MsIE5VTEwsIE1LREVWKFBQUF9NQUpPUiwgMCksIE5VTEwsCi0JCQkgICAgICAicHBwIik7CisKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmcHBwX25ldF9pZCwgJnBwcF9uZXRfb3BzKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIFBQUCBwZXJuZXQgZGV2aWNlICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OwogCX0KIAotb3V0OgotCWlmIChlcnIpCisJZXJyID0gcmVnaXN0ZXJfY2hyZGV2KFBQUF9NQUpPUiwgInBwcCIsICZwcHBfZGV2aWNlX2ZvcHMpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgUFBQIGRldmljZSAoJWQpXG4iLCBlcnIpOwotCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X25ldDsKKwl9CisKKwlwcHBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcHAiKTsKKwlpZiAoSVNfRVJSKHBwcF9jbGFzcykpIHsKKwkJZXJyID0gUFRSX0VSUihwcHBfY2xhc3MpOworCQlnb3RvIG91dF9jaHJkZXY7CisJfQorCisJLyogbm90IGEgYmlnIGRlYWwgaWYgd2UgZmFpbCBoZXJlIDotKSAqLworCWRldmljZV9jcmVhdGUocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLCBOVUxMLCAicHBwIik7CisKKwlyZXR1cm4gMDsKIAogb3V0X2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiKTsKLQlnb3RvIG91dDsKK291dF9uZXQ6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBfbmV0X2lkLCAmcHBwX25ldF9vcHMpOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC05MDgsNyArOTkyLDcgQEAKIAogIG91dGY6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JKytwcHAtPmRldi0+c3RhdHMudHhfZHJvcHBlZDsKKwkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTY5LDYgKzEwNTMsNyBAQAogCWRldi0+dHhfcXVldWVfbGVuID0gMzsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfUFBQOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlAgfCBJRkZfTVVMVElDQVNUOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIH0KIAogLyoKQEAgLTExNjEsOCArMTI0Niw3IEBACiAJcmV0dXJuOwogCiAgZHJvcDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAkrK3BwcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnM7CiB9CiAKQEAgLTEyMjQsMTM4ICsxMzA4LDE4MSBAQAogICovCiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgbGVuLCBmcmFnc2l6ZTsKLQlpbnQgaSwgYml0cywgaGRybGVuLCBtdHU7Ci0JaW50IGZsZW47Ci0JaW50IG5hdmFpbCwgbmZyZWU7Ci0JaW50IG5iaWdnZXI7CisJaW50CWxlbiwgdG90bGVuOworCWludAlpLCBiaXRzLCBoZHJsZW4sIG10dTsKKwlpbnQJZmxlbjsKKwlpbnQJbmF2YWlsLAluZnJlZSwgbnplcm87CisJaW50CW5iaWdnZXI7CisJaW50CXRvdHNwZWVkOworCWludAl0b3RmcmVlOwogCXVuc2lnbmVkIGNoYXIgKnAsICpxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZzsKIAlzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW47CiAKLQluZnJlZSA9IDA7CS8qICMgY2hhbm5lbHMgd2hpY2ggaGF2ZSBubyBwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KKwl0b3RzcGVlZCA9IDA7IC8qdG90YWwgYml0cmF0ZSBvZiB0aGUgYnVuZGxlKi8KKwluZnJlZSA9CTA7CS8qICMgY2hhbm5lbHMgd2hpY2gJaGF2ZSBubwlwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KIAluYXZhaWwgPSAwOwkvKiB0b3RhbCAjIG9mIHVzYWJsZSBjaGFubmVscyAobm90IGRlcmVnaXN0ZXJlZCkgKi8KKwluemVybyA9CTA7IC8qIG51bWJlciBvZgljaGFubmVscyB3aXRoIHplcm8gc3BlZWQgYXNzb2NpYXRlZCovCisJdG90ZnJlZQk9IDA7IC8qdG90YWwgIyBvZiBjaGFubmVscyBhdmFpbGFibGUgYW5kCisJCQkJICAqaGF2aW5nIG5vIHF1ZXVlZCBwYWNrZXRzIGJlZm9yZQorCQkJCSAgKnN0YXJ0aW5nIHRoZSBmcmFnbWVudGF0aW9uKi8KKwogCWhkcmxlbiA9IChwcHAtPmZsYWdzICYgU0NfTVBfWFNIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjsKLQlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBwcC0+Y2hhbm5lbHMsIGNsaXN0KSB7CisJaSA9CTA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwcHAtPmNoYW5uZWxzLCBjbGlzdCkJewogCQluYXZhaWwgKz0gcGNoLT5hdmFpbCA9IChwY2gtPmNoYW4gIT0gTlVMTCk7Ci0JCWlmIChwY2gtPmF2YWlsKSB7CisJCXBjaC0+c3BlZWQgPSBwY2gtPmNoYW4tPnNwZWVkOworCQlpZiAocGNoLT5hdmFpbCkJewogCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKSB8fAotCQkJICAgICFwY2gtPmhhZF9mcmFnKSB7Ci0JCQkJcGNoLT5hdmFpbCA9IDI7Ci0JCQkJKytuZnJlZTsKLQkJCX0KLQkJCWlmICghcGNoLT5oYWRfZnJhZyAmJiBpIDwgcHBwLT5ueGNoYW4pCi0JCQkJcHBwLT5ueGNoYW4gPSBpOworCQkJCSFwY2gtPmhhZF9mcmFnKQl7CisJCQkJCWlmIChwY2gtPnNwZWVkID09IDApCisJCQkJCQluemVybysrOworCQkJCQllbHNlCisJCQkJCQl0b3RzcGVlZCArPSBwY2gtPnNwZWVkOworCisJCQkJCXBjaC0+YXZhaWwgPSAyOworCQkJCQkrK25mcmVlOworCQkJCQkrK3RvdGZyZWU7CisJCQkJfQorCQkJaWYgKCFwY2gtPmhhZF9mcmFnICYmIGkJPCBwcHAtPm54Y2hhbikKKwkJCQlwcHAtPm54Y2hhbgk9IGk7CiAJCX0KIAkJKytpOwogCX0KLQogCS8qCi0JICogRG9uJ3Qgc3RhcnQgc2VuZGluZyB0aGlzIHBhY2tldCB1bmxlc3MgYXQgbGVhc3QgaGFsZiBvZgotCSAqIHRoZSBjaGFubmVscyBhcmUgZnJlZS4gIFRoaXMgZ2l2ZXMgbXVjaCBiZXR0ZXIgVENQCi0JICogcGVyZm9ybWFuY2UgaWYgd2UgaGF2ZSBhIGxvdCBvZiBjaGFubmVscy4KKwkgKiBEb24ndCBzdGFydCBzZW5kaW5nIHRoaXMJcGFja2V0IHVubGVzcyBhdCBsZWFzdCBoYWxmCW9mCisJICogdGhlIGNoYW5uZWxzCWFyZQlmcmVlLiAgVGhpcwlnaXZlcyBtdWNoIGJldHRlciBUQ1AKKwkgKiBwZXJmb3JtYW5jZSBpZiB3ZSBoYXZlIGEJbG90CW9mIGNoYW5uZWxzLgogCSAqLwotCWlmIChuZnJlZSA9PSAwIHx8IG5mcmVlIDwgbmF2YWlsIC8gMikKLQkJcmV0dXJuIDA7CS8qIGNhbid0IHRha2Ugbm93LCBsZWF2ZSBpdCBpbiB4bWl0X3BlbmRpbmcgKi8KKwlpZiAobmZyZWUgPT0gMCB8fCBuZnJlZQk8IG5hdmFpbCAvIDIpCisJCXJldHVybiAwOyAvKiBjYW4ndCB0YWtlIG5vdywgbGVhdmUgaXQgaW4geG1pdF9wZW5kaW5nCSovCiAKIAkvKiBEbyBwcm90b2NvbCBmaWVsZCBjb21wcmVzc2lvbiAoWFhYIHRoaXMgc2hvdWxkIGJlIG9wdGlvbmFsKSAqLwotCXAgPSBza2ItPmRhdGE7Ci0JbGVuID0gc2tiLT5sZW47CisJcCA9CXNrYi0+ZGF0YTsKKwlsZW4JPSBza2ItPmxlbjsKIAlpZiAoKnAgPT0gMCkgewogCQkrK3A7CiAJCS0tbGVuOwogCX0KIAotCS8qCi0JICogRGVjaWRlIG9uIGZyYWdtZW50IHNpemUuCi0JICogV2UgY3JlYXRlIGEgZnJhZ21lbnQgZm9yIGVhY2ggZnJlZSBjaGFubmVsIHJlZ2FyZGxlc3Mgb2YKLQkgKiBob3cgc21hbGwgdGhleSBhcmUgKGkuZS4gZXZlbiAwIGxlbmd0aCkgaW4gb3JkZXIgdG8gbWluaW1pemUKLQkgKiB0aGUgdGltZSB0aGF0IGl0IHdpbGwgdGFrZSB0byBkZXRlY3Qgd2hlbiBhIGNoYW5uZWwgZHJvcHMKLQkgKiBhIGZyYWdtZW50LgotCSAqLwotCWZyYWdzaXplID0gbGVuOwotCWlmIChuZnJlZSA+IDEpCi0JCWZyYWdzaXplID0gRElWX1JPVU5EX1VQKGZyYWdzaXplLCBuZnJlZSk7Ci0JLyogbmJpZ2dlciBjaGFubmVscyBnZXQgZnJhZ3NpemUgYnl0ZXMsIHRoZSByZXN0IGdldCBmcmFnc2l6ZS0xLAotCSAgIGV4Y2VwdCBpZiBuYmlnZ2VyPT0wLCB0aGVuIHRoZXkgYWxsIGdldCBmcmFnc2l6ZS4gKi8KLQluYmlnZ2VyID0gbGVuICUgbmZyZWU7CisJdG90bGVuID0gbGVuOworCW5iaWdnZXIJPSBsZW4gJQluZnJlZTsKIAotCS8qIHNraXAgdG8gdGhlIGNoYW5uZWwgYWZ0ZXIgdGhlIG9uZSB3ZSBsYXN0IHVzZWQKLQkgICBhbmQgc3RhcnQgYXQgdGhhdCBvbmUgKi8KKwkvKiBza2lwCXRvIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBvbmUgd2UJbGFzdCB1c2VkCisJICAgYW5kIHN0YXJ0IGF0CXRoYXQgb25lICovCiAJbGlzdCA9ICZwcHAtPmNoYW5uZWxzOwotCWZvciAoaSA9IDA7IGkgPCBwcHAtPm54Y2hhbjsgKytpKSB7CisJZm9yCShpID0gMDsJaSA8CXBwcC0+bnhjaGFuOyArK2kpIHsKIAkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCWlmIChsaXN0ID09ICZwcHAtPmNoYW5uZWxzKSB7Ci0JCQlpID0gMDsKKwkJaWYgKGxpc3QgPT0JJnBwcC0+Y2hhbm5lbHMpCXsKKwkJCWkgPQkwOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQkvKiBjcmVhdGUgYSBmcmFnbWVudCBmb3IgZWFjaCBjaGFubmVsICovCisJLyogY3JlYXRlIGEJZnJhZ21lbnQgZm9yIGVhY2ggY2hhbm5lbCAqLwogCWJpdHMgPSBCOwotCXdoaWxlIChuZnJlZSA+IDAgfHwgbGVuID4gMCkgeworCXdoaWxlIChuZnJlZSA+IDAgJiYJbGVuCT4gMCkgewogCQlsaXN0ID0gbGlzdC0+bmV4dDsKLQkJaWYgKGxpc3QgPT0gJnBwcC0+Y2hhbm5lbHMpIHsKLQkJCWkgPSAwOworCQlpZiAobGlzdCA9PQkmcHBwLT5jaGFubmVscykJeworCQkJaSA9CTA7CiAJCQljb250aW51ZTsKIAkJfQotCQlwY2ggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjaGFubmVsLCBjbGlzdCk7CisJCXBjaAk9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGNoYW5uZWwsIGNsaXN0KTsKIAkJKytpOwogCQlpZiAoIXBjaC0+YXZhaWwpCiAJCQljb250aW51ZTsKIAogCQkvKgotCQkgKiBTa2lwIHRoaXMgY2hhbm5lbCBpZiBpdCBoYXMgYSBmcmFnbWVudCBwZW5kaW5nIGFscmVhZHkgYW5kCi0JCSAqIHdlIGhhdmVuJ3QgZ2l2ZW4gYSBmcmFnbWVudCB0byBhbGwgb2YgdGhlIGZyZWUgY2hhbm5lbHMuCisJCSAqIFNraXAJdGhpcyBjaGFubmVsIGlmCWl0IGhhcyBhIGZyYWdtZW50IHBlbmRpbmcgYWxyZWFkeSBhbmQKKwkJICogd2UgaGF2ZW4ndCBnaXZlbglhIGZyYWdtZW50IHRvIGFsbCBvZiB0aGUgZnJlZSBjaGFubmVscy4KIAkJICovCiAJCWlmIChwY2gtPmF2YWlsID09IDEpIHsKLQkJCWlmIChuZnJlZSA+IDApCisJCQlpZiAobmZyZWUgPgkwKQogCQkJCWNvbnRpbnVlOwogCQl9IGVsc2UgewotCQkJLS1uZnJlZTsKIAkJCXBjaC0+YXZhaWwgPSAxOwogCQl9CiAKIAkJLyogY2hlY2sgdGhlIGNoYW5uZWwncyBtdHUgYW5kIHdoZXRoZXIgaXQgaXMgc3RpbGwgYXR0YWNoZWQuICovCiAJCXNwaW5fbG9ja19iaCgmcGNoLT5kb3dubCk7CiAJCWlmIChwY2gtPmNoYW4gPT0gTlVMTCkgewotCQkJLyogY2FuJ3QgdXNlIHRoaXMgY2hhbm5lbCwgaXQncyBiZWluZyBkZXJlZ2lzdGVyZWQgKi8KKwkJCS8qIGNhbid0IHVzZSB0aGlzIGNoYW5uZWwsIGl0J3MJYmVpbmcgZGVyZWdpc3RlcmVkICovCisJCQlpZiAocGNoLT5zcGVlZCA9PSAwKQorCQkJCW56ZXJvLS07CisJCQllbHNlCisJCQkJdG90c3BlZWQgLT0JcGNoLT5zcGVlZDsKKwogCQkJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCQkJcGNoLT5hdmFpbCA9IDA7Ci0JCQlpZiAoLS1uYXZhaWwgPT0gMCkKKwkJCXRvdGxlbiA9IGxlbjsKKwkJCXRvdGZyZWUtLTsKKwkJCW5mcmVlLS07CisJCQlpZiAoLS1uYXZhaWwgPT0JMCkKIAkJCQlicmVhazsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyoKLQkJICogQ3JlYXRlIGEgZnJhZ21lbnQgZm9yIHRoaXMgY2hhbm5lbCBvZgotCQkgKiBtaW4obWF4KG10dSsyLWhkcmxlbiwgNCksIGZyYWdzaXplLCBsZW4pIGJ5dGVzLgotCQkgKiBJZiBtdHUrMi1oZHJsZW4gPCA0LCB0aGF0IGlzIGEgcmlkaWN1bG91c2x5IHNtYWxsCi0JCSAqIE1UVSwgc28gd2UgdXNlIG10dSA9IDIgKyBoZHJsZW4uCisJCSppZiB0aGUgY2hhbm5lbCBzcGVlZCBpcyBub3Qgc2V0IGRpdmlkZQorCQkqdGhlIHBhY2tldAlldmVubHkgYW1vbmcgdGhlIGZyZWUgY2hhbm5lbHM7CisJCSpvdGhlcndpc2UgZGl2aWRlIGl0IGFjY29yZGluZyB0byB0aGUgc3BlZWQKKwkJKm9mIHRoZSBjaGFubmVsIHdlIGFyZSBnb2luZyB0byB0cmFuc21pdCBvbgorCQkqLworCQlpZiAocGNoLT5zcGVlZCA9PSAwKSB7CisJCQlmbGVuID0gdG90bGVuL25mcmVlCTsKKwkJCWlmIChuYmlnZ2VyID4gMCkgeworCQkJCWZsZW4rKzsKKwkJCQluYmlnZ2VyLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQlmbGVuID0gKCgodG90ZnJlZSAtIG56ZXJvKSoodG90bGVuICsgaGRybGVuKnRvdGZyZWUpKSAvCisJCQkJKCh0b3RzcGVlZCp0b3RmcmVlKS9wY2gtPnNwZWVkKSkgLSBoZHJsZW47CisJCQlpZiAobmJpZ2dlciA+IDApIHsKKwkJCQlmbGVuICs9ICgodG90ZnJlZSAtIG56ZXJvKSpwY2gtPnNwZWVkKS90b3RzcGVlZDsKKwkJCQluYmlnZ2VyIC09ICgodG90ZnJlZSAtIG56ZXJvKSpwY2gtPnNwZWVkKS8KKwkJCQkJCQl0b3RzcGVlZDsKKwkJCX0KKwkJfQorCQluZnJlZS0tOworCisJCS8qCisJCSAqY2hlY2sJaWYgd2UgYXJlIG9uIHRoZSBsYXN0IGNoYW5uZWwgb3IKKwkJICp3ZSBleGNlZGVkIHRoZSBsZW5naHQJb2YgdGhlIGRhdGEJdG8KKwkJICpmcmFnbWVudAogCQkgKi8KLQkJaWYgKGZyYWdzaXplID4gbGVuKQotCQkJZnJhZ3NpemUgPSBsZW47Ci0JCWZsZW4gPSBmcmFnc2l6ZTsKLQkJbXR1ID0gcGNoLT5jaGFuLT5tdHUgKyAyIC0gaGRybGVuOwotCQlpZiAobXR1IDwgNCkKLQkJCW10dSA9IDQ7CisJCWlmICgobmZyZWUgPT0gMCkgfHwgKGZsZW4gPiBsZW4pKQorCQkJZmxlbiA9IGxlbjsKKwkJLyoKKwkJICppdCBpcyBub3Qgd29ydGggdG8gdHggb24gc2xvdyBjaGFubmVsczoKKwkJICppbiB0aGF0IGNhc2UgZnJvbSB0aGUgcmVzdWx0aW5nIGZsZW4gYWNjb3JkaW5nIHRvIHRoZQorCQkgKmFib3ZlIGZvcm11bGEgd2lsbCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gemVyby4KKwkJICpTa2lwIHRoZSBjaGFubmVsIGluIHRoaXMgY2FzZQorCQkgKi8KKwkJaWYgKGZsZW4gPD0JMCkgeworCQkJcGNoLT5hdmFpbCA9IDI7CisJCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW10dQk9IHBjaC0+Y2hhbi0+bXR1ICsgMiAtIGhkcmxlbjsKKwkJaWYgKG10dQk8IDQpCisJCQltdHUJPSA0OwogCQlpZiAoZmxlbiA+IG10dSkKIAkJCWZsZW4gPSBtdHU7Ci0JCWlmIChmbGVuID09IGxlbiAmJiBuZnJlZSA9PSAwKQotCQkJYml0cyB8PSBFOwotCQlmcmFnID0gYWxsb2Nfc2tiKGZsZW4gKyBoZHJsZW4gKyAoZmxlbiA9PSAwKSwgR0ZQX0FUT01JQyk7CisJCWlmIChmbGVuID09CWxlbikKKwkJCWJpdHMgfD0JRTsKKwkJZnJhZyA9IGFsbG9jX3NrYihmbGVuICsJaGRybGVuICsgKGZsZW4gPT0gMCksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWZyYWcpCiAJCQlnb3RvIG5vc2tiOwotCQlxID0gc2tiX3B1dChmcmFnLCBmbGVuICsgaGRybGVuKTsKKwkJcSA9CXNrYl9wdXQoZnJhZywgZmxlbiArIGhkcmxlbik7CiAKLQkJLyogbWFrZSB0aGUgTVAgaGVhZGVyICovCisJCS8qIG1ha2UJdGhlCU1QIGhlYWRlciAqLwogCQlxWzBdID0gUFBQX01QID4+IDg7CiAJCXFbMV0gPSBQUFBfTVA7CiAJCWlmIChwcHAtPmZsYWdzICYgU0NfTVBfWFNIT1JUU0VRKSB7Ci0JCQlxWzJdID0gYml0cyArICgocHBwLT5ueHNlcSA+PiA4KSAmIDB4Zik7CisJCQlxWzJdID0gYml0cwkrICgocHBwLT5ueHNlcSA+PiA4KSAmIDB4Zik7CiAJCQlxWzNdID0gcHBwLT5ueHNlcTsKIAkJfSBlbHNlIHsKIAkJCXFbMl0gPSBiaXRzOwpAQCAtMTM2NCw0MyArMTQ5MSwyOCBAQAogCQkJcVs1XSA9IHBwcC0+bnhzZXE7CiAJCX0KIAotCQkvKgotCQkgKiBDb3B5IHRoZSBkYXRhIGluLgotCQkgKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIGEgYnVnIGluIG9sZGVyIHZlcnNpb25zIG9mCi0JCSAqIHRoZSBMaW51eCBQUFAgbXVsdGlsaW5rIHJlY29uc3RydWN0aW9uIGNvZGUgd2hlcmUgaXQKLQkJICogZHJvcHMgMC1sZW5ndGggZnJhZ21lbnRzLiAgVGhlcmVmb3JlIHdlIG1ha2Ugc3VyZSB0aGUKLQkJICogZnJhZ21lbnQgaGFzIGF0IGxlYXN0IG9uZSBieXRlIG9mIGRhdGEuICBBbnkgYnl0ZXMKLQkJICogd2UgYWRkIGluIHRoaXMgc2l0dWF0aW9uIHdpbGwgZW5kIHVwIGFzIHBhZGRpbmcgb24gdGhlCi0JCSAqIGVuZCBvZiB0aGUgcmVjb25zdHJ1Y3RlZCBwYWNrZXQuCi0JCSAqLwotCQlpZiAoZmxlbiA9PSAwKQotCQkJKnNrYl9wdXQoZnJhZywgMSkgPSAwOwotCQllbHNlCi0JCQltZW1jcHkocSArIGhkcmxlbiwgcCwgZmxlbik7CisJCW1lbWNweShxICsgaGRybGVuLCBwLCBmbGVuKTsKIAogCQkvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovCiAJCWNoYW4gPSBwY2gtPmNoYW47Ci0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwY2gtPmZpbGUueHEpIHx8Ci0JCSAgICAhY2hhbi0+b3BzLT5zdGFydF94bWl0KGNoYW4sIGZyYWcpKQorCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKQl8fAorCQkJIWNoYW4tPm9wcy0+c3RhcnRfeG1pdChjaGFuLCBmcmFnKSkKIAkJCXNrYl9xdWV1ZV90YWlsKCZwY2gtPmZpbGUueHEsIGZyYWcpOwotCQlwY2gtPmhhZF9mcmFnID0gMTsKKwkJcGNoLT5oYWRfZnJhZyA9CTE7CiAJCXAgKz0gZmxlbjsKLQkJbGVuIC09IGZsZW47CisJCWxlbgktPSBmbGVuOwogCQkrK3BwcC0+bnhzZXE7CiAJCWJpdHMgPSAwOwogCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7Ci0KLQkJaWYgKC0tbmJpZ2dlciA9PSAwICYmIGZyYWdzaXplID4gMCkKLQkJCS0tZnJhZ3NpemU7CiAJfQotCXBwcC0+bnhjaGFuID0gaTsKKwlwcHAtPm54Y2hhbgk9IGk7CiAKIAlyZXR1cm4gMTsKIAogIG5vc2tiOgogCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAlpZiAocHBwLT5kZWJ1ZyAmIDEpCi0JCXByaW50ayhLRVJOX0VSUiAiUFBQOiBubyBtZW1vcnkgKGZyYWdtZW50KVxuIik7CisJCXByaW50ayhLRVJOX0VSUgkiUFBQOiBubyBtZW1vcnkJKGZyYWdtZW50KVxuIik7CiAJKytwcHAtPmRldi0+c3RhdHMudHhfZXJyb3JzOwogCSsrcHBwLT5ueHNlcTsKIAlyZXR1cm4gMTsJLyogYWJhbmRvbiB0aGUgZnJhbWUgKi8KQEAgLTE5ODYsMTkgKzIwOTgsMjcgQEAKICAqIENoYW5uZWwgaW50ZXJmYWNlLgogICovCiAKLS8qCi0gKiBDcmVhdGUgYSBuZXcsIHVuYXR0YWNoZWQgcHBwIGNoYW5uZWwuCi0gKi8KLWludAotcHBwX3JlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQorLyogQ3JlYXRlIGEgbmV3LCB1bmF0dGFjaGVkIHBwcCBjaGFubmVsLiAqLworaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKK3sKKwlyZXR1cm4gcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgY2hhbik7Cit9CisKKy8qIENyZWF0ZSBhIG5ldywgdW5hdHRhY2hlZCBwcHAgY2hhbm5lbCBmb3Igc3BlY2lmaWVkIG5ldC4gKi8KK2ludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CiAKIAlwY2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhbm5lbCksIEdGUF9LRVJORUwpOwogCWlmICghcGNoKQogCQlyZXR1cm4gLUVOT01FTTsKKworCXBuID0gcHBwX3Blcm5ldChuZXQpOworCiAJcGNoLT5wcHAgPSBOVUxMOwogCXBjaC0+Y2hhbiA9IGNoYW47CisJcGNoLT5jaGFuX25ldCA9IG5ldDsKIAljaGFuLT5wcHAgPSBwY2g7CiAJaW5pdF9wcHBfZmlsZSgmcGNoLT5maWxlLCBDSEFOTkVMKTsKIAlwY2gtPmZpbGUuaGRybGVuID0gY2hhbi0+aGRybGVuOwpAQCAtMjAwOCwxMSArMjEyOCwxMyBAQAogCWluaXRfcndzZW0oJnBjaC0+Y2hhbl9zZW0pOwogCXNwaW5fbG9ja19pbml0KCZwY2gtPmRvd25sKTsKIAlyd2xvY2tfaW5pdCgmcGNoLT51cGwpOwotCXNwaW5fbG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOwotCXBjaC0+ZmlsZS5pbmRleCA9ICsrbGFzdF9jaGFubmVsX2luZGV4OwotCWxpc3RfYWRkKCZwY2gtPmxpc3QsICZuZXdfY2hhbm5lbHMpOworCisJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCXBjaC0+ZmlsZS5pbmRleCA9ICsrcG4tPmxhc3RfY2hhbm5lbF9pbmRleDsKKwlsaXN0X2FkZCgmcGNoLT5saXN0LCAmcG4tPm5ld19jaGFubmVscyk7CiAJYXRvbWljX2luYygmY2hhbm5lbF9jb3VudCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG4tPmFsbF9jaGFubmVsc19sb2NrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMDUzLDkgKzIxNzUsMTEgQEAKIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLT5wcHA7CisJc3RydWN0IHBwcF9uZXQgKnBuOwogCiAJaWYgKCFwY2gpCiAJCXJldHVybjsJCS8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwogCWNoYW4tPnBwcCA9IE5VTEw7CiAKIAkvKgpAQCAtMjA2OCw5ICsyMTkyLDEyIEBACiAJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCXVwX3dyaXRlKCZwY2gtPmNoYW5fc2VtKTsKIAlwcHBfZGlzY29ubmVjdF9jaGFubmVsKHBjaCk7Ci0Jc3Bpbl9sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7CisKKwlwbiA9IHBwcF9wZXJuZXQocGNoLT5jaGFuX25ldCk7CisJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOwogCWxpc3RfZGVsKCZwY2gtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CisKIAlwY2gtPmZpbGUuZGVhZCA9IDE7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwY2gtPmZpbGUucndhaXQpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwY2gtPmZpbGUucmVmY250KSkKQEAgLTIzOTUsOSArMjUyMiwxMCBAQAogICogdW5pdCA9PSAtMSBtZWFucyBhbGxvY2F0ZSBhIG5ldyBudW1iZXIuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHBwICoKLXBwcF9jcmVhdGVfaW50ZXJmYWNlKGludCB1bml0LCBpbnQgKnJldHApCitwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIGludCB1bml0LCBpbnQgKnJldHApCiB7CiAJc3RydWN0IHBwcCAqcHBwOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKQEAgLTI0MDYsNiArMjUzNCw4IEBACiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0MTsKIAorCXBuID0gcHBwX3Blcm5ldChuZXQpOworCiAJcHBwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcHAtPmRldiA9IGRldjsKIAlwcHAtPm1ydSA9IFBQUF9NUlU7CkBAIC0yNDIxLDE3ICsyNTUxLDIzIEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHBwLT5tcnEpOwogI2VuZGlmIC8qIENPTkZJR19QUFBfTVVMVElMSU5LICovCiAKKwkvKgorCSAqIGRydW0gcm9sbDogZG9uJ3QgZm9yZ2V0IHRvIHNldAorCSAqIHRoZSBuZXQgZGV2aWNlIGlzIGJlbG9uZyB0bworCSAqLworCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKKwogCXJldCA9IC1FRVhJU1Q7Ci0JbXV0ZXhfbG9jaygmYWxsX3BwcF9tdXRleCk7CisJbXV0ZXhfbG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCiAJaWYgKHVuaXQgPCAwKSB7Ci0JCXVuaXQgPSB1bml0X2dldCgmcHBwX3VuaXRzX2lkciwgcHBwKTsKKwkJdW5pdCA9IHVuaXRfZ2V0KCZwbi0+dW5pdHNfaWRyLCBwcHApOwogCQlpZiAodW5pdCA8IDApIHsKIAkJCSpyZXRwID0gdW5pdDsKIAkJCWdvdG8gb3V0MjsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICh1bml0X2ZpbmQoJnBwcF91bml0c19pZHIsIHVuaXQpKQorCQlpZiAodW5pdF9maW5kKCZwbi0+dW5pdHNfaWRyLCB1bml0KSkKIAkJCWdvdG8gb3V0MjsgLyogdW5pdCBhbHJlYWR5IGV4aXN0cyAqLwogCQkvKgogCQkgKiBpZiBjYWxsZXIgbmVlZCBhIHNwZWNpZmllZCB1bml0IG51bWJlcgpAQCAtMjQ0Miw3ICsyNTc4LDcgQEAKIAkJICogZmFpciBidXQgYXQgbGVhc3QgcHBwZCB3aWxsIGFzayB1cyB0byBhbGxvY2F0ZQogCQkgKiBuZXcgdW5pdCBpbiB0aGlzIGNhc2Ugc28gdXNlciBpcyBoYXBweSA6KQogCQkgKi8KLQkJdW5pdCA9IHVuaXRfc2V0KCZwcHBfdW5pdHNfaWRyLCBwcHAsIHVuaXQpOworCQl1bml0ID0gdW5pdF9zZXQoJnBuLT51bml0c19pZHIsIHBwcCwgdW5pdCk7CiAJCWlmICh1bml0IDwgMCkKIAkJCWdvdG8gb3V0MjsKIAl9CkBAIC0yNDUzLDIwICsyNTg5LDIyIEBACiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJdW5pdF9wdXQoJnBwcF91bml0c19pZHIsIHVuaXQpOworCQl1bml0X3B1dCgmcG4tPnVuaXRzX2lkciwgdW5pdCk7CiAJCXByaW50ayhLRVJOX0VSUiAiUFBQOiBjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgJXMgKCVkKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIAorCXBwcC0+cHBwX25ldCA9IG5ldDsKKwogCWF0b21pY19pbmMoJnBwcF91bml0X2NvdW50KTsKLQltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCiAJKnJldHAgPSAwOwogCXJldHVybiBwcHA7CiAKIG91dDI6Ci0JbXV0ZXhfdW5sb2NrKCZhbGxfcHBwX211dGV4KTsKKwltdXRleF91bmxvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKIAlmcmVlX25ldGRldihkZXYpOwogb3V0MToKIAkqcmV0cCA9IHJldDsKQEAgLTI0OTIsNyArMjYzMCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBwcHBfc2h1dGRvd25faW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcCkKIHsKLQltdXRleF9sb2NrKCZhbGxfcHBwX211dGV4KTsKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CisKKwlwbiA9IHBwcF9wZXJuZXQocHBwLT5wcHBfbmV0KTsKKwltdXRleF9sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CisKIAkvKiBUaGlzIHdpbGwgY2FsbCBkZXZfY2xvc2UoKSBmb3IgdXMuICovCiAJcHBwX2xvY2socHBwKTsKIAlpZiAoIXBwcC0+Y2xvc2luZykgewpAQCAtMjUwMiwxMSArMjY0NCwxMiBAQAogCX0gZWxzZQogCQlwcHBfdW5sb2NrKHBwcCk7CiAKLQl1bml0X3B1dCgmcHBwX3VuaXRzX2lkciwgcHBwLT5maWxlLmluZGV4KTsKKwl1bml0X3B1dCgmcG4tPnVuaXRzX2lkciwgcHBwLT5maWxlLmluZGV4KTsKIAlwcHAtPmZpbGUuZGVhZCA9IDE7CiAJcHBwLT5vd25lciA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHAtPmZpbGUucndhaXQpOwotCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisKKwltdXRleF91bmxvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKIH0KIAogLyoKQEAgLTI1NDMsOCArMjY4Niw3IEBACiAJcHBwLT5hY3RpdmVfZmlsdGVyID0gTlVMTDsKICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqLwogCi0JaWYgKHBwcC0+eG1pdF9wZW5kaW5nKQotCQlrZnJlZV9za2IocHBwLT54bWl0X3BlbmRpbmcpOworCWtmcmVlX3NrYihwcHAtPnhtaXRfcGVuZGluZyk7CiAKIAlmcmVlX25ldGRldihwcHAtPmRldik7CiB9CkBAIC0yNTU0LDkgKzI2OTYsOSBAQAogICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIGFsbF9wcHBfbXV0ZXguCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHBwICoKLXBwcF9maW5kX3VuaXQoaW50IHVuaXQpCitwcHBfZmluZF91bml0KHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpCiB7Ci0JcmV0dXJuIHVuaXRfZmluZCgmcHBwX3VuaXRzX2lkciwgdW5pdCk7CisJcmV0dXJuIHVuaXRfZmluZCgmcG4tPnVuaXRzX2lkciwgdW5pdCk7CiB9CiAKIC8qCkBAIC0yNTY4LDIwICsyNzEwLDIyIEBACiAgKiB3aGVuIHdlIGhhdmUgYSBsb3Qgb2YgY2hhbm5lbHMgaW4gdXNlLgogICovCiBzdGF0aWMgc3RydWN0IGNoYW5uZWwgKgotcHBwX2ZpbmRfY2hhbm5lbChpbnQgdW5pdCkKK3BwcF9maW5kX2NoYW5uZWwoc3RydWN0IHBwcF9uZXQgKnBuLCBpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgY2hhbm5lbCAqcGNoOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZuZXdfY2hhbm5lbHMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBuLT5uZXdfY2hhbm5lbHMsIGxpc3QpIHsKIAkJaWYgKHBjaC0+ZmlsZS5pbmRleCA9PSB1bml0KSB7Ci0JCQlsaXN0X21vdmUoJnBjaC0+bGlzdCwgJmFsbF9jaGFubmVscyk7CisJCQlsaXN0X21vdmUoJnBjaC0+bGlzdCwgJnBuLT5hbGxfY2hhbm5lbHMpOwogCQkJcmV0dXJuIHBjaDsKIAkJfQogCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJmFsbF9jaGFubmVscywgbGlzdCkgeworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwbi0+YWxsX2NoYW5uZWxzLCBsaXN0KSB7CiAJCWlmIChwY2gtPmZpbGUuaW5kZXggPT0gdW5pdCkKIAkJCXJldHVybiBwY2g7CiAJfQorCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI1OTIsMTEgKzI3MzYsMTQgQEAKIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpCiB7CiAJc3RydWN0IHBwcCAqcHBwOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlpbnQgcmV0ID0gLUVOWElPOwogCWludCBoZHJsZW47CiAKLQltdXRleF9sb2NrKCZhbGxfcHBwX211dGV4KTsKLQlwcHAgPSBwcHBfZmluZF91bml0KHVuaXQpOworCXBuID0gcHBwX3Blcm5ldChwY2gtPmNoYW5fbmV0KTsKKworCW11dGV4X2xvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKKwlwcHAgPSBwcHBfZmluZF91bml0KHBuLCB1bml0KTsKIAlpZiAoIXBwcCkKIAkJZ290byBvdXQ7CiAJd3JpdGVfbG9ja19iaCgmcGNoLT51cGwpOwpAQCAtMjYyMCw3ICsyNzY3LDcgQEAKICBvdXRsOgogCXdyaXRlX3VubG9ja19iaCgmcGNoLT51cGwpOwogIG91dDoKLQltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI2NzcsNyArMjgyNCw3IEBACiAJdW5yZWdpc3Rlcl9jaHJkZXYoUFBQX01BSk9SLCAicHBwIik7CiAJZGV2aWNlX2Rlc3Ryb3kocHBwX2NsYXNzLCBNS0RFVihQUFBfTUFKT1IsIDApKTsKIAljbGFzc19kZXN0cm95KHBwcF9jbGFzcyk7Ci0JaWRyX2Rlc3Ryb3koJnBwcF91bml0c19pZHIpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UocHBwX25ldF9pZCwgJnBwcF9uZXRfb3BzKTsKIH0KIAogLyoKQEAgLTI3NDMsNiArMjg5MCw3IEBACiBtb2R1bGVfaW5pdChwcHBfaW5pdCk7CiBtb2R1bGVfZXhpdChwcHBfY2xlYW51cCk7CiAKK0VYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKTsKIEVYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX2NoYW5uZWwpOwogRVhQT1JUX1NZTUJPTChwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKTsKIEVYUE9SVF9TWU1CT0wocHBwX2NoYW5uZWxfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggMWU4OTJiNy4uZDJmYTJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIHsKIAlzdHJ1Y3Qgc3luY3BwcCAqYXA7CiAJaW50IGVycjsKKwlpbnQgc3BlZWQ7CiAKIAlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIzNCw2ICsyMzUsOCBAQAogCWFwLT5jaGFuLm9wcyA9ICZzeW5jX29wczsKIAlhcC0+Y2hhbi5tdHUgPSBQUFBfTVJVOwogCWFwLT5jaGFuLmhkcmxlbiA9IDI7CS8qIGZvciBBL0MgYnl0ZXMgKi8KKwlzcGVlZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYXAtPmNoYW4uc3BlZWQgPSBzcGVlZDsKIAllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYXAtPmNoYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yODEsOCArMjg0LDcgQEAKIAogCXBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKIAlza2JfcXVldWVfcHVyZ2UoJmFwLT5ycXVldWUpOwotCWlmIChhcC0+dHBrdCkKLQkJa2ZyZWVfc2tiKGFwLT50cGt0KTsKKwlrZnJlZV9za2IoYXAtPnRwa3QpOwogCWtmcmVlKGFwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggYzIyYjMwNS4uZjAwMzFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC03OCwzOCArNzgsNzMgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgUFBQT0VfSEFTSF9CSVRTIDQKLSNkZWZpbmUgUFBQT0VfSEFTSF9TSVpFICgxPDxQUFBPRV9IQVNIX0JJVFMpCi0KLXN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzOworI2RlZmluZSBQUFBPRV9IQVNIX1NJWkUgKDEgPDwgUFBQT0VfSEFTSF9CSVRTKQorI2RlZmluZSBQUFBPRV9IQVNIX01BU0sJKFBQUE9FX0hBU0hfU0laRSAtIDEpCiAKIHN0YXRpYyBpbnQgcHBwb2VfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgaW50IF9fcHBwb2VfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhwcHBvZV9oYXNoX2xvY2spOwotCiBzdGF0aWMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wczsKIAorLyogcGVyLW5ldCBwcml2YXRlIGRhdGEgZm9yIHRoaXMgbW9kdWxlICovCitzdGF0aWMgaW50IHBwcG9lX25ldF9pZDsKK3N0cnVjdCBwcHBvZV9uZXQgeworCS8qCisJICogd2UgY291bGQgdXNlIF9zaW5nbGVfIGhhc2ggdGFibGUgZm9yIGFsbAorCSAqIG5ldHMgYnkgaW5qZWN0aW5nIG5ldCBpZCBpbnRvIHRoZSBoYXNoIGJ1dAorCSAqIGl0IHdvdWxkIGluY3JlYXNlIGhhc2ggY2hhaW5zIGFuZCBhZGQKKwkgKiBhIGZldyBhZGRpdGlvbmFsIG1hdGggY29tcGFyYXRpb25zIG1lc3N5CisJICogYXMgd2VsbCwgbW9yZW92ZXIgaW4gY2FzZSBvZiBTTVAgbGVzcyBsb2NraW5nCisJICogY29udHJvdmVyc3kgaGVyZQorCSAqLworCXN0cnVjdCBwcHBveF9zb2NrICpoYXNoX3RhYmxlW1BQUE9FX0hBU0hfU0laRV07CisJcndsb2NrX3QgaGFzaF9sb2NrOworfTsKKworLyogdG8gZWxpbWluYXRlIGEgcmFjZSBidHcgcHBwb2VfZmx1c2hfZGV2IGFuZCBwcHBvZV9yZWxlYXNlICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZsdXNoX2xvY2spOworCisvKgorICogUFBQb0UgY291bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBzdGFnZXM6CisgKiAxKSBEaXNjb3Zlcnkgc3RhZ2UgKHRvIG9idGFpbiByZW1vdGUgTUFDIGFuZCBTZXNzaW9uIElEKQorICogMikgU2Vzc2lvbiBzdGFnZSAoTUFDIGFuZCBTSUQgYXJlIGtub3duKQorICoKKyAqIEV0aGVybmV0IGZyYW1lcyBoYXZlIGEgc3BlY2lhbCB0YWcgZm9yIHRoaXMgYnV0CisgKiB3ZSB1c2Ugc2ltcGxpZXIgYXBwcm9hY2ggYmFzZWQgb24gc2Vzc2lvbiBpZAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhZ2Vfc2Vzc2lvbihfX2JlMTYgc2lkKQoreworCXJldHVybiBzaWQgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2VfbmV0ICpwcHBvZV9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCUJVR19PTighbmV0KTsKKworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNtcF8yX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIHN0cnVjdCBwcHBvZV9hZGRyICpiKQogewotCXJldHVybiAoYS0+c2lkID09IGItPnNpZCAmJgotCQkobWVtY21wKGEtPnJlbW90ZSwgYi0+cmVtb3RlLCBFVEhfQUxFTikgPT0gMCkpOworCXJldHVybiBhLT5zaWQgPT0gYi0+c2lkICYmICFtZW1jbXAoYS0+cmVtb3RlLCBiLT5yZW1vdGUsIEVUSF9BTEVOKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY21wX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIpCiB7Ci0JcmV0dXJuIChhLT5zaWQgPT0gc2lkICYmCi0JCShtZW1jbXAoYS0+cmVtb3RlLGFkZHIsRVRIX0FMRU4pID09IDApKTsKKwlyZXR1cm4gYS0+c2lkID09IHNpZCAmJiAhbWVtY21wKGEtPnJlbW90ZSwgYWRkciwgRVRIX0FMRU4pOwogfQogCi0jaWYgOCVQUFBPRV9IQVNIX0JJVFMKKyNpZiA4ICUgUFBQT0VfSEFTSF9CSVRTCiAjZXJyb3IgOCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgUFBQT0VfSEFTSF9CSVRTCiAjZW5kaWYKIApAQCAtMTE4LDY5ICsxNTMsNzEgQEAKIAl1bnNpZ25lZCBjaGFyIGhhc2ggPSAwOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMCA7IGkgPCBFVEhfQUxFTiA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQloYXNoIF49IGFkZHJbaV07Ci0JfQotCWZvciAoaSA9IDAgOyBpIDwgc2l6ZW9mKHNpZF90KSo4IDsgaSArPSA4ICl7Ci0JCWhhc2ggXj0gKF9fZm9yY2UgX191MzIpc2lkPj5pOwotCX0KLQlmb3IgKGkgPSA4IDsgKGk+Pj0xKSA+PSBQUFBPRV9IQVNIX0JJVFMgOyApIHsKLQkJaGFzaCBePSBoYXNoPj5pOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpZF90KSAqIDg7IGkgKz0gOCkKKwkJaGFzaCBePSAoX19mb3JjZSBfX3UzMilzaWQgPj4gaTsKKwlmb3IgKGkgPSA4OyAoaSA+Pj0gMSkgPj0gUFBQT0VfSEFTSF9CSVRTOykKKwkJaGFzaCBePSBoYXNoID4+IGk7CiAKLQlyZXR1cm4gaGFzaCAmICggUFBQT0VfSEFTSF9TSVpFIC0gMSApOworCXJldHVybiBoYXNoICYgUFBQT0VfSEFTSF9NQVNLOwogfQogCi0vKiB6ZXJvZWQgYmVjYXVzZSBpdHMgaW4gLmJzcyAqLwotc3RhdGljIHN0cnVjdCBwcHBveF9zb2NrICppdGVtX2hhc2hfdGFibGVbUFBQT0VfSEFTSF9TSVpFXTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgU2V0L2dldC9kZWxldGUvcmVoYXNoIGl0ZW1zICAoaW50ZXJuYWwgdmVyc2lvbnMpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oX19iZTE2IHNpZCwgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJaW50IGhhc2ggPSBoYXNoX2l0ZW0oc2lkLCBhZGRyKTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcmV0OwogCi0JcmV0ID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCXJldCA9IHBuLT5oYXNoX3RhYmxlW2hhc2hdOworCXdoaWxlIChyZXQpIHsKKwkJaWYgKGNtcF9hZGRyKCZyZXQtPnBwcG9lX3BhLCBzaWQsIGFkZHIpICYmCisJCSAgICByZXQtPnBwcG9lX2lmaW5kZXggPT0gaWZpbmRleCkKKwkJCXJldHVybiByZXQ7CiAKLQl3aGlsZSAocmV0ICYmICEoY21wX2FkZHIoJnJldC0+cHBwb2VfcGEsIHNpZCwgYWRkcikgJiYgcmV0LT5wcHBvZV9pZmluZGV4ID09IGlmaW5kZXgpKQogCQlyZXQgPSByZXQtPm5leHQ7CisJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBfX3NldF9pdGVtKHN0cnVjdCBwcHBveF9zb2NrICpwbykKK3N0YXRpYyBpbnQgX19zZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgc3RydWN0IHBwcG94X3NvY2sgKnBvKQogewogCWludCBoYXNoID0gaGFzaF9pdGVtKHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUpOwogCXN0cnVjdCBwcHBveF9zb2NrICpyZXQ7CiAKLQlyZXQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07CisJcmV0ID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CiAJd2hpbGUgKHJldCkgewotCQlpZiAoY21wXzJfYWRkcigmcmV0LT5wcHBvZV9wYSwgJnBvLT5wcHBvZV9wYSkgJiYgcmV0LT5wcHBvZV9pZmluZGV4ID09IHBvLT5wcHBvZV9pZmluZGV4KQorCQlpZiAoY21wXzJfYWRkcigmcmV0LT5wcHBvZV9wYSwgJnBvLT5wcHBvZV9wYSkgJiYKKwkJICAgIHJldC0+cHBwb2VfaWZpbmRleCA9PSBwby0+cHBwb2VfaWZpbmRleCkKIAkJCXJldHVybiAtRUFMUkVBRFk7CiAKIAkJcmV0ID0gcmV0LT5uZXh0OwogCX0KIAotCXBvLT5uZXh0ID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOwotCWl0ZW1faGFzaF90YWJsZVtoYXNoXSA9IHBvOworCXBvLT5uZXh0ID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CisJcG4tPmhhc2hfdGFibGVbaGFzaF0gPSBwbzsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZGVsZXRlX2l0ZW0oX19iZTE2IHNpZCwgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZGVsZXRlX2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJCWNoYXIgKmFkZHIsIGludCBpZmluZGV4KQogewogCWludCBoYXNoID0gaGFzaF9pdGVtKHNpZCwgYWRkcik7CiAJc3RydWN0IHBwcG94X3NvY2sgKnJldCwgKipzcmM7CiAKLQlyZXQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07Ci0Jc3JjID0gJml0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwlyZXQgPSBwbi0+aGFzaF90YWJsZVtoYXNoXTsKKwlzcmMgPSAmcG4tPmhhc2hfdGFibGVbaGFzaF07CiAKIAl3aGlsZSAocmV0KSB7Ci0JCWlmIChjbXBfYWRkcigmcmV0LT5wcHBvZV9wYSwgc2lkLCBhZGRyKSAmJiByZXQtPnBwcG9lX2lmaW5kZXggPT0gaWZpbmRleCkgeworCQlpZiAoY21wX2FkZHIoJnJldC0+cHBwb2VfcGEsIHNpZCwgYWRkcikgJiYKKwkJICAgIHJldC0+cHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7CiAJCQkqc3JjID0gcmV0LT5uZXh0OwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5Nyw0NiArMjM0LDU0IEBACiAgKiAgU2V0L2dldC9kZWxldGUvcmVoYXNoIGl0ZW1zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShfX2JlMTYgc2lkLAotCQkJCQkgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCwKKwkJCQkJdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwogCi0JcmVhZF9sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOwotCXBvID0gX19nZXRfaXRlbShzaWQsIGFkZHIsIGlmaW5kZXgpOworCXJlYWRfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJcG8gPSBfX2dldF9pdGVtKHBuLCBzaWQsIGFkZHIsIGlmaW5kZXgpOwogCWlmIChwbykKIAkJc29ja19ob2xkKHNrX3BwcG94KHBvKSk7Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCiAJcmV0dXJuIHBvOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbV9ieV9hZGRyKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3ApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbV9ieV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3ApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb3hfc29jazsKKwogCWludCBpZmluZGV4OwogCi0JZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKLQlpZighZGV2KQorCWRldiA9IGRldl9nZXRfYnlfbmFtZShuZXQsIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7CisJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOworCiAJaWZpbmRleCA9IGRldi0+aWZpbmRleDsKKwlwbiA9IG5ldF9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkKTsKKwlwcHBveF9zb2NrID0gZ2V0X2l0ZW0ocG4sIHNwLT5zYV9hZGRyLnBwcG9lLnNpZCwKKwkJCQlzcC0+c2FfYWRkci5wcHBvZS5yZW1vdGUsIGlmaW5kZXgpOwogCWRldl9wdXQoZGV2KTsKLQlyZXR1cm4gZ2V0X2l0ZW0oc3AtPnNhX2FkZHIucHBwb2Uuc2lkLCBzcC0+c2FfYWRkci5wcHBvZS5yZW1vdGUsIGlmaW5kZXgpOworCisJcmV0dXJuIHBwcG94X3NvY2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmRlbGV0ZV9pdGVtKF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIsIGludCBpZmluZGV4KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb3hfc29jayAqZGVsZXRlX2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJCWNoYXIgKmFkZHIsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBwcHBveF9zb2NrICpyZXQ7CiAKLQl3cml0ZV9sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOwotCXJldCA9IF9fZGVsZXRlX2l0ZW0oc2lkLCBhZGRyLCBpZmluZGV4KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJcmV0ID0gX19kZWxldGVfaXRlbShwbiwgc2lkLCBhZGRyLCBpZmluZGV4KTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgSGFuZGxlciBmb3IgZGV2aWNlIGV2ZW50cy4KQEAgLTI0NiwyNSArMjkxLDMzIEBACiAKIHN0YXRpYyB2b2lkIHBwcG9lX2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCBoYXNoOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCWludCBpOworCiAJQlVHX09OKGRldiA9PSBOVUxMKTsKIAotCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JZm9yIChoYXNoID0gMDsgaGFzaCA8IFBQUE9FX0hBU0hfU0laRTsgaGFzaCsrKSB7Ci0JCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCWlmICghcG4pIC8qIGFscmVhZHkgZnJlZWQgKi8KKwkJcmV0dXJuOworCisJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IFBQUE9FX0hBU0hfU0laRTsgaSsrKSB7CisJCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCiAJCXdoaWxlIChwbyAhPSBOVUxMKSB7Ci0JCQlzdHJ1Y3Qgc29jayAqc2sgPSBza19wcHBveChwbyk7CisJCQlzdHJ1Y3Qgc29jayAqc2s7CiAJCQlpZiAocG8tPnBwcG9lX2RldiAhPSBkZXYpIHsKIAkJCQlwbyA9IHBvLT5uZXh0OwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJc2sgPSBza19wcHBveChwbyk7CisJCQlzcGluX2xvY2soJmZsdXNoX2xvY2spOwogCQkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CisJCQlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7CiAJCQlkZXZfcHV0KGRldik7CiAKLQogCQkJLyogV2UgYWx3YXlzIGdyYWIgdGhlIHNvY2tldCBsb2NrLCBmb2xsb3dlZCBieSB0aGUKLQkJCSAqIHBwcG9lX2hhc2hfbG9jaywgaW4gdGhhdCBvcmRlci4gIFNpbmNlIHdlIHNob3VsZAorCQkJICogaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkCiAJCQkgKiBob2xkIHRoZSBzb2NrIGxvY2sgd2hpbGUgZG9pbmcgYW55IHVuYmluZGluZywKIAkJCSAqIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgbG9jayB3ZSdyZSBob2xkaW5nLgogCQkJICogSG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgc29jayBzbyBpdCBkb2Vzbid0IGRpc2FwcGVhcgpAQCAtMjczLDcgKzMyNiw3IEBACiAKIAkJCXNvY2tfaG9sZChzayk7CiAKLQkJCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwkJCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlsb2NrX3NvY2soc2spOwogCiAJCQlpZiAoc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgewpAQCAtMjg5LDIwICszNDIsMTcgQEAKIAkJCSAqIFdoaWxlIHRoZSBsb2NrIHdhcyBkcm9wcGVkIHRoZSBjaGFpbiBjb250ZW50cyBtYXkKIAkJCSAqIGhhdmUgY2hhbmdlZC4KIAkJCSAqLwotCQkJd3JpdGVfbG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKLQkJCXBvID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCQkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCQlwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCQl9CiAJfQotCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHBwcG9lX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwdHI7Ci0KLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwdHI7CiAKIAkvKiBPbmx5IGxvb2sgYXQgc29ja2V0cyB0aGF0IGFyZSB1c2luZyB0aGlzIHNwZWNpZmljIGRldmljZS4gKi8KIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0zMjQsMTIgKzM3NCwxMCBAQAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwcG9lX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gcHBwb2VfZGV2aWNlX2V2ZW50LAogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRG8gdGhlIHJlYWwgd29yayBvZiByZWNlaXZpbmcgYSBQUFBvRSBTZXNzaW9uIGZyYW1lLgpAQCAtMzQzLDggKzM5MSw4IEBACiAJaWYgKHNrLT5za19zdGF0ZSAmIFBQUE9YX0JPVU5EKSB7CiAJCXBwcF9pbnB1dCgmcG8tPmNoYW4sIHNrYik7CiAJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgJiBQUFBPWF9SRUxBWSkgewotCQlyZWxheV9wbyA9IGdldF9pdGVtX2J5X2FkZHIoJnBvLT5wcHBvZV9yZWxheSk7Ci0KKwkJcmVsYXlfcG8gPSBnZXRfaXRlbV9ieV9hZGRyKGRldl9uZXQocG8tPnBwcG9lX2RldiksCisJCQkJCQkmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKHJlbGF5X3BvID09IE5VTEwpCiAJCQlnb3RvIGFib3J0X2tmcmVlOwogCkBAIC0zNzMsMjIgKzQyMSwxOCBAQAogICogUmVjZWl2ZSB3cmFwcGVyIGNhbGxlZCBpbiBCSCBjb250ZXh0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcHBwb2VfcmN2KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LAotCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKLQorc3RhdGljIGludCBwcHBvZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CiAJc3RydWN0IHBwcG9lX2hkciAqcGg7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOwogCWludCBsZW47CiAKLQlpZiAoIShza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkpCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCi0JCWdvdG8gZHJvcDsKLQogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSkpCiAJCWdvdG8gZHJvcDsKIApAQCAtNDAyLDcgKzQ0Niw4IEBACiAJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIGxlbikpCiAJCWdvdG8gZHJvcDsKIAotCXBvID0gZ2V0X2l0ZW0ocGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKCFwbykKIAkJZ290byBkcm9wOwogCkBAIC00MjAsMTkgKzQ2NSwxNiBAQAogICogVGhpcyBpcyBzb2xlbHkgZm9yIGRldGVjdGlvbiBvZiBQQURUIGZyYW1lcwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcHBwb2VfZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IHBhY2tldF90eXBlICpwdCwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIGludCBwcHBvZV9kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiAKIHsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CisJc3RydWN0IHBwcG9lX25ldCAqcG47CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKLQkJZ290byBhYm9ydDsKLQotCWlmICghKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSkKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKQpAQCAtNDQyLDcgKzQ4NCw4IEBACiAJaWYgKHBoLT5jb2RlICE9IFBBRFRfQ09ERSkKIAkJZ290byBhYm9ydDsKIAotCXBvID0gZ2V0X2l0ZW0ocGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKHBvKSB7CiAJCXN0cnVjdCBzb2NrICpzayA9IHNrX3BwcG94KHBvKTsKIApAQCAtNDcwLDE3ICs1MTMsMTcgQEAKIAlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7IC8qIExpZXMuLi4gOi0pICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VzX3B0eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfU0VTKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VzX3B0eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBfU0VTKSwKIAkuZnVuYwk9IHBwcG9lX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VkX3B0eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfRElTQyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lZF9wdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX0RJU0MpLAogCS5mdW5jCT0gcHBwb2VfZGlzY19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb3RvIHBwcG9lX3NrX3Byb3RvID0geworc3RhdGljIHN0cnVjdCBwcm90byBwcHBvZV9za19wcm90byBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCSAgPSAiUFBQT0UiLAogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLm9ial9zaXplID0gc2l6ZW9mKHN0cnVjdCBwcHBveF9zb2NrKSwKQEAgLTQ5MywzOCArNTM2LDM3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcHBwb2VfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaykKIHsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCXN0cnVjdCBzb2NrICpzazsKIAogCXNrID0gc2tfYWxsb2MobmV0LCBQRl9QUFBPWCwgR0ZQX0tFUk5FTCwgJnBwcG9lX3NrX3Byb3RvKTsKIAlpZiAoIXNrKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKLQlzb2NrLT5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwotCXNvY2stPm9wcyAgID0gJnBwcG9lX29wczsKKwlzb2NrLT5zdGF0ZQk9IFNTX1VOQ09OTkVDVEVEOworCXNvY2stPm9wcwk9ICZwcHBvZV9vcHM7CiAKLQlzay0+c2tfYmFja2xvZ19yY3YgPSBwcHBvZV9yY3ZfY29yZTsKLQlzay0+c2tfc3RhdGUJICAgPSBQUFBPWF9OT05FOwotCXNrLT5za190eXBlCSAgID0gU09DS19TVFJFQU07Ci0Jc2stPnNrX2ZhbWlseQkgICA9IFBGX1BQUE9YOwotCXNrLT5za19wcm90b2NvbAkgICA9IFBYX1BST1RPX09FOworCXNrLT5za19iYWNrbG9nX3Jjdgk9IHBwcG9lX3Jjdl9jb3JlOworCXNrLT5za19zdGF0ZQkJPSBQUFBPWF9OT05FOworCXNrLT5za190eXBlCQk9IFNPQ0tfU1RSRUFNOworCXNrLT5za19mYW1pbHkJCT0gUEZfUFBQT1g7CisJc2stPnNrX3Byb3RvY29sCQk9IFBYX1BST1RPX09FOwogCi0JZXJyb3IgPSAwOwotb3V0OglyZXR1cm4gZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHBwb2VfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKIAogCWlmICghc2spCiAJCXJldHVybiAwOwogCiAJbG9ja19zb2NrKHNrKTsKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKXsKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiAtRUJBREY7CiAJfQpAQCAtNTM0LDI2ICs1NzYsMzkgQEAKIAkvKiBTaWduYWwgdGhlIGRlYXRoIG9mIHRoZSBzb2NrZXQuICovCiAJc2stPnNrX3N0YXRlID0gUFBQT1hfREVBRDsKIAorCS8qCisJICogcHBwb2VfZmx1c2hfZGV2IGNvdWxkIGxlYWQgdG8gYSByYWNlIHdpdGgKKwkgKiB0aGlzIHJvdXRpbmUgc28gd2UgdXNlIGZsdXNoX2xvY2sgdG8gZWxpbWluYXRlCisJICogc3VjaCBhIGNhc2UgKHdlIG9ubHkgbmVlZCBwZXItbmV0IHNwZWNpZmljIGRhdGEpCisJICovCisJc3Bpbl9sb2NrKCZmbHVzaF9sb2NrKTsKKwlwbyA9IHBwcG94X3NrKHNrKTsKKwlpZiAoIXBvLT5wcHBvZV9kZXYpIHsKKwkJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChwby0+cHBwb2VfZGV2KSk7CisJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOwogCi0JLyogV3JpdGUgbG9jayBvbiBoYXNoIGxvY2sgcHJvdGVjdHMgdGhlIGVudGlyZSAicG8iIHN0cnVjdCBmcm9tCi0JICogY29uY3VycmVudCB1cGRhdGVzIHZpYSBwcHBvZV9mbHVzaF9kZXYuIFRoZSAicG8iIHN0cnVjdCBzaG91bGQKLQkgKiBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGhhc2ggdGFibGUgY29udGVudHMsIHRodXMgcHJvdGVjdGVkCi0JICogYnkgdGhlIGhhc2ggdGFibGUgbG9jayAqLwotCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJLyoKKwkgKiBwcm90ZWN0ICJwbyIgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXMKKwkgKiBvbiBwcHBvZV9mbHVzaF9kZXYKKwkgKi8KKwl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAogCXBvID0gcHBwb3hfc2soc2spOwotCWlmIChwby0+cHBwb2VfcGEuc2lkKSB7Ci0JCV9fZGVsZXRlX2l0ZW0ocG8tPnBwcG9lX3BhLnNpZCwKLQkJCSAgICAgIHBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKLQl9CisJaWYgKHN0YWdlX3Nlc3Npb24ocG8tPnBwcG9lX3BhLnNpZCkpCisJCV9fZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUsCisJCQkJcG8tPnBwcG9lX2lmaW5kZXgpOwogCiAJaWYgKHBvLT5wcHBvZV9kZXYpIHsKIAkJZGV2X3B1dChwby0+cHBwb2VfZGV2KTsKIAkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CiAJfQogCi0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAKK291dDoKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0+c2sgPSBOVUxMOwogCkBAIC01NjQsMTQgKzYxOSwxNCBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgcHBwb2VfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVzZXJ2YWRkciwKIAkJICBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqKSB1c2VydmFkZHI7CisJc3RydWN0IHNvY2thZGRyX3BwcG94ICpzcCA9IChzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKil1c2VydmFkZHI7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHBwcG9lX25ldCAqcG47CiAJaW50IGVycm9yOwogCiAJbG9ja19zb2NrKHNrKTsKQEAgLTU4Miw0NCArNjM3LDQ1IEBACiAKIAkvKiBDaGVjayBmb3IgYWxyZWFkeSBib3VuZCBzb2NrZXRzICovCiAJZXJyb3IgPSAtRUJVU1k7Ci0JaWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpICYmIHNwLT5zYV9hZGRyLnBwcG9lLnNpZCkKKwlpZiAoKHNrLT5za19zdGF0ZSAmIFBQUE9YX0NPTk5FQ1RFRCkgJiYKKwkgICAgIHN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkKIAkJZ290byBlbmQ7CiAKIAkvKiBDaGVjayBmb3IgYWxyZWFkeSBkaXNjb25uZWN0ZWQgc29ja2V0cywgb24gYXR0ZW1wdHMgdG8gZGlzY29ubmVjdCAqLwogCWVycm9yID0gLUVBTFJFQURZOwotCWlmICgoc2stPnNrX3N0YXRlICYgUFBQT1hfREVBRCkgJiYgIXNwLT5zYV9hZGRyLnBwcG9lLnNpZCApCisJaWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9ERUFEKSAmJgorCSAgICAgIXN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkKIAkJZ290byBlbmQ7CiAKIAllcnJvciA9IDA7Ci0JaWYgKHBvLT5wcHBvZV9wYS5zaWQpIHsKKworCS8qIERlbGV0ZSB0aGUgb2xkIGJpbmRpbmcgKi8KKwlpZiAoc3RhZ2Vfc2Vzc2lvbihwby0+cHBwb2VfcGEuc2lkKSkgewogCQlwcHBveF91bmJpbmRfc29jayhzayk7Ci0KLQkJLyogRGVsZXRlIHRoZSBvbGQgYmluZGluZyAqLwotCQlkZWxldGVfaXRlbShwby0+cHBwb2VfcGEuc2lkLHBvLT5wcHBvZV9wYS5yZW1vdGUscG8tPnBwcG9lX2lmaW5kZXgpOwotCi0JCWlmKHBvLT5wcHBvZV9kZXYpCisJCWlmIChwby0+cHBwb2VfZGV2KSB7CisJCQlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KHBvLT5wcHBvZV9kZXYpKTsKKwkJCWRlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLAorCQkJCXBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKIAkJCWRldl9wdXQocG8tPnBwcG9lX2Rldik7Ci0KKwkJfQogCQltZW1zZXQoc2tfcHBwb3gocG8pICsgMSwgMCwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb3hfc29jaykgLSBzaXplb2Yoc3RydWN0IHNvY2spKTsKLQogCQlzay0+c2tfc3RhdGUgPSBQUFBPWF9OT05FOwogCX0KIAotCS8qIERvbid0IHJlLWJpbmQgaWYgc2lkPT0wICovCi0JaWYgKHNwLT5zYV9hZGRyLnBwcG9lLnNpZCAhPSAwKSB7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7Ci0KKwkvKiBSZS1iaW5kIGluIHNlc3Npb24gc3RhZ2Ugb25seSAqLworCWlmIChzdGFnZV9zZXNzaW9uKHNwLT5zYV9hZGRyLnBwcG9lLnNpZCkpIHsKIAkJZXJyb3IgPSAtRU5PREVWOworCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoc29ja19uZXQoc2spLCBzcC0+c2FfYWRkci5wcHBvZS5kZXYpOwogCQlpZiAoIWRldikKIAkJCWdvdG8gZW5kOwogCiAJCXBvLT5wcHBvZV9kZXYgPSBkZXY7CiAJCXBvLT5wcHBvZV9pZmluZGV4ID0gZGV2LT5pZmluZGV4OwotCi0JCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKXsKLQkJCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwkJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTsKKwkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQkJZ290byBlcnJfcHV0OwogCQl9CiAKQEAgLTYyNyw4ICs2ODMsOCBAQAogCQkgICAgICAgJnNwLT5zYV9hZGRyLnBwcG9lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9hZGRyKSk7CiAKLQkJZXJyb3IgPSBfX3NldF9pdGVtKHBvKTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCQllcnJvciA9IF9fc2V0X2l0ZW0ocG4sIHBvKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gZXJyX3B1dDsKIApAQCAtNjM5LDcgKzY5NSw3IEBACiAJCXBvLT5jaGFuLnByaXZhdGUgPSBzazsKIAkJcG8tPmNoYW4ub3BzID0gJnBwcG9lX2NoYW5fb3BzOwogCi0JCWVycm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwkJZXJyb3IgPSBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoZGV2X25ldChkZXYpLCAmcG8tPmNoYW4pOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycl9wdXQ7CiAKQEAgLTY0OCw3ICs3MDQsNyBAQAogCiAJcG8tPm51bSA9IHNwLT5zYV9hZGRyLnBwcG9lLnNpZDsKIAotIGVuZDoKK2VuZDoKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnJvcjsKIGVycl9wdXQ6CkBAIC02NTksNyArNzE1LDYgQEAKIAlnb3RvIGVuZDsKIH0KIAotCiBzdGF0aWMgaW50IHBwcG9lX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKIAkJICBpbnQgKnVzb2NrYWRkcl9sZW4sIGludCBwZWVyKQogewpAQCAtNjc4LDcgKzczMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBwcHBvZV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTY5MCw3ICs3NDQsNiBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NHTVJVOgogCQllcnIgPSAtRU5YSU87Ci0KIAkJaWYgKCEoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVEKSkKIAkJCWJyZWFrOwogCkBAIC02OTgsNyArNzUxLDcgQEAKIAkJaWYgKHB1dF91c2VyKHBvLT5wcHBvZV9kZXYtPm10dSAtCiAJCQkgICAgIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtCiAJCQkgICAgIFBQUF9IRFJMRU4sCi0JCQkgICAgIChpbnQgX191c2VyICopIGFyZykpCisJCQkgICAgIChpbnQgX191c2VyICopYXJnKSkKIAkJCWJyZWFrOwogCQllcnIgPSAwOwogCQlicmVhazsKQEAgLTcwOSw3ICs3NjIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHZhbCwoaW50IF9fdXNlciAqKSBhcmcpKQorCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQlicmVhazsKIAogCQlpZiAodmFsIDwgKHBvLT5wcHBvZV9kZXYtPm10dQpAQCAtNzIyLDcgKzc3NSw3IEBACiAKIAljYXNlIFBQUElPQ1NGTEFHUzoKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpKQogCQkJYnJlYWs7CiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtNzQ5LDEzICs4MDIsMTIgQEAKIAogCQllcnIgPSAtRUlOVkFMOwogCQlpZiAocG8tPnBwcG9lX3JlbGF5LnNhX2ZhbWlseSAhPSBBRl9QUFBPWCB8fAotCQkgICAgcG8tPnBwcG9lX3JlbGF5LnNhX3Byb3RvY29sIT0gUFhfUFJPVE9fT0UpCisJCSAgICBwby0+cHBwb2VfcmVsYXkuc2FfcHJvdG9jb2wgIT0gUFhfUFJPVE9fT0UpCiAJCQlicmVhazsKIAogCQkvKiBDaGVjayB0aGF0IHRoZSBzb2NrZXQgcmVmZXJlbmNlZCBieSB0aGUgYWRkcmVzcwogCQkgICBhY3R1YWxseSBleGlzdHMuICovCi0JCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcigmcG8tPnBwcG9lX3JlbGF5KTsKLQorCQlyZWxheV9wbyA9IGdldF9pdGVtX2J5X2FkZHIoc29ja19uZXQoc2spLCAmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKCFyZWxheV9wbykKIAkJCWJyZWFrOwogCkBAIC03ODEsNyArODMzLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCSAgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbikKIHsKQEAgLTgwOCw3ICs4NTksNyBAQAogCWRldiA9IHBvLT5wcHBvZV9kZXY7CiAKIAllcnJvciA9IC1FTVNHU0laRTsKLSAJaWYgKHRvdGFsX2xlbiA+IChkZXYtPm10dSArIGRldi0+aGFyZF9oZWFkZXJfbGVuKSkKKwlpZiAodG90YWxfbGVuID4gKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQogCQlnb3RvIGVuZDsKIAogCkBAIC04MjYsMTMgKzg3NywxMiBAQAogCXNrYi0+ZGV2ID0gZGV2OwogCiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfU0VTKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX1NFUyk7CiAKLQlwaCA9IChzdHJ1Y3QgcHBwb2VfaGRyICopIHNrYl9wdXQoc2tiLCB0b3RhbF9sZW4gKyBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpOwotCXN0YXJ0ID0gKGNoYXIgKikgJnBoLT50YWdbMF07CisJcGggPSAoc3RydWN0IHBwcG9lX2hkciAqKXNrYl9wdXQoc2tiLCB0b3RhbF9sZW4gKyBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpOworCXN0YXJ0ID0gKGNoYXIgKikmcGgtPnRhZ1swXTsKIAogCWVycm9yID0gbWVtY3B5X2Zyb21pb3ZlYyhzdGFydCwgbS0+bXNnX2lvdiwgdG90YWxfbGVuKTsKLQogCWlmIChlcnJvciA8IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZW5kOwpAQCAtODUzLDcgKzkwMyw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiB4bWl0IGZ1bmN0aW9uIGZvciBpbnRlcm5hbCB1c2UuCkBAIC04ODgsNyArOTM3LDcgQEAKIAlwaC0+c2lkCT0gcG8tPm51bTsKIAlwaC0+bGVuZ3RoID0gaHRvbnMoZGF0YV9sZW4pOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQX1NFUyk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpOwogCXNrYi0+ZGV2ID0gZGV2OwogCiAJZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBFVEhfUF9QUFBfU0VTLApAQCAtOTAzLDcgKzk1Miw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHhtaXQgZnVuY3Rpb24gY2FsbGVkIGJ5IGdlbmVyaWMgUFBQIGRyaXZlcgpAQCAtOTEyLDExICs5NjAsMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopIGNoYW4tPnByaXZhdGU7CisJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi0+cHJpdmF0ZTsKIAlyZXR1cm4gX19wcHBvZV94bWl0KHNrLCBza2IpOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0gewogCS5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCwKIH07CkBAIC05MzUsNyArOTgyLDYgQEAKIAogCXNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyAmIH5NU0dfRE9OVFdBSVQsCiAJCQkJZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnJvcik7Ci0KIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGVuZDsKIApAQCAtOTY4LDQ0ICsxMDE0LDQ3IEBACiAJZGV2X25hbWUgPSBwby0+cHBwb2VfcGEuZGV2OwogCiAJc2VxX3ByaW50ZihzZXEsICIlMDhYICVwTSAlOHNcbiIsCi0JCSAgIHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTsKKwkJcG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOwogb3V0OgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb2VfZ2V0X2lkeChsb2ZmX3QgcG9zKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb2VfZ2V0X2lkeChzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87Ci0JaW50IGkgPSAwOworCWludCBpOwogCi0JZm9yICg7IGkgPCBQUFBPRV9IQVNIX1NJWkU7IGkrKykgewotCQlwbyA9IGl0ZW1faGFzaF90YWJsZVtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgUFBQT0VfSEFTSF9TSVpFOyBpKyspIHsKKwkJcG8gPSBwbi0+aGFzaF90YWJsZVtpXTsKIAkJd2hpbGUgKHBvKSB7CiAJCQlpZiAoIXBvcy0tKQogCQkJCWdvdG8gb3V0OwogCQkJcG8gPSBwby0+bmV4dDsKIAkJfQogCX0KKwogb3V0OgogCXJldHVybiBwbzsKIH0KIAogc3RhdGljIHZvaWQgKnBwcG9lX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi0JX19hY3F1aXJlcyhwcHBvZV9oYXNoX2xvY2spCisJX19hY3F1aXJlcyhwbi0+aGFzaF9sb2NrKQogeworCXN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTsKIAlsb2ZmX3QgbCA9ICpwb3M7CiAKLQlyZWFkX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JcmV0dXJuIGwgPyBwcHBvZV9nZXRfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CisJcmVhZF9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlyZXR1cm4gbCA/IHBwcG9lX2dldF9pZHgocG4sIC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKIHN0YXRpYyB2b2lkICpwcHBvZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CisJc3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKIAogCSsrKnBvczsKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKLQkJcG8gPSBwcHBvZV9nZXRfaWR4KDApOworCQlwbyA9IHBwcG9lX2dldF9pZHgocG4sIDApOwogCQlnb3RvIG91dDsKIAl9CiAJcG8gPSB2OwpAQCAtMTAxNSwyMiArMTA2NCwyNCBAQAogCQlpbnQgaGFzaCA9IGhhc2hfaXRlbShwby0+cHBwb2VfcGEuc2lkLCBwby0+cHBwb2VfcGEucmVtb3RlKTsKIAogCQl3aGlsZSAoKytoYXNoIDwgUFBQT0VfSEFTSF9TSVpFKSB7Ci0JCQlwbyA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwkJCXBvID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CiAJCQlpZiAocG8pCiAJCQkJYnJlYWs7CiAJCX0KIAl9CisKIG91dDoKIAlyZXR1cm4gcG87CiB9CiAKIHN0YXRpYyB2b2lkIHBwcG9lX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotCV9fcmVsZWFzZXMocHBwb2VfaGFzaF9sb2NrKQorCV9fcmVsZWFzZXMocG4tPmhhc2hfbG9jaykKIHsKLQlyZWFkX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7CisJcmVhZF91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CQk9IHBwcG9lX3NlcV9zdGFydCwKIAkubmV4dAkJPSBwcHBvZV9zZXFfbmV4dCwKIAkuc3RvcAkJPSBwcHBvZV9zZXFfc3RvcCwKQEAgLTEwMzksNyArMTA5MCw4IEBACiAKIHN0YXRpYyBpbnQgcHBwb2Vfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcHBvZV9zZXFfb3BzKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmcHBwb2Vfc2VxX29wcywKKwkJCXNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBwcG9lX3NlcV9mb3BzID0gewpAQCAtMTA0Nyw3NCArMTA5OSwxMTUgQEAKIAkub3BlbgkJPSBwcHBvZV9zZXFfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgcHBwb2VfcHJvY19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwotCi0JcCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgInBwcG9lIiwgU19JUlVHTywgJnBwcG9lX3NlcV9mb3BzKTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiAwOwotfQotI2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBwcG9lX3Byb2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHBwb2Vfb3BzID0gewotICAgIC5mYW1pbHkJCT0gQUZfUFBQT1gsCi0gICAgLm93bmVyCQk9IFRISVNfTU9EVUxFLAotICAgIC5yZWxlYXNlCQk9IHBwcG9lX3JlbGVhc2UsCi0gICAgLmJpbmQJCT0gc29ja19ub19iaW5kLAotICAgIC5jb25uZWN0CQk9IHBwcG9lX2Nvbm5lY3QsCi0gICAgLnNvY2tldHBhaXIJCT0gc29ja19ub19zb2NrZXRwYWlyLAotICAgIC5hY2NlcHQJCT0gc29ja19ub19hY2NlcHQsCi0gICAgLmdldG5hbWUJCT0gcHBwb2VfZ2V0bmFtZSwKLSAgICAucG9sbAkJPSBkYXRhZ3JhbV9wb2xsLAotICAgIC5saXN0ZW4JCT0gc29ja19ub19saXN0ZW4sCi0gICAgLnNodXRkb3duCQk9IHNvY2tfbm9fc2h1dGRvd24sCi0gICAgLnNldHNvY2tvcHQJCT0gc29ja19ub19zZXRzb2Nrb3B0LAotICAgIC5nZXRzb2Nrb3B0CQk9IHNvY2tfbm9fZ2V0c29ja29wdCwKLSAgICAuc2VuZG1zZwkJPSBwcHBvZV9zZW5kbXNnLAotICAgIC5yZWN2bXNnCQk9IHBwcG9lX3JlY3Ztc2csCi0gICAgLm1tYXAJCT0gc29ja19ub19tbWFwLAotICAgIC5pb2N0bAkJPSBwcHBveF9pb2N0bCwKKwkuZmFtaWx5CQk9IEFGX1BQUE9YLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQk9IHBwcG9lX3JlbGVhc2UsCisJLmJpbmQJCT0gc29ja19ub19iaW5kLAorCS5jb25uZWN0CT0gcHBwb2VfY29ubmVjdCwKKwkuc29ja2V0cGFpcgk9IHNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0CQk9IHNvY2tfbm9fYWNjZXB0LAorCS5nZXRuYW1lCT0gcHBwb2VfZ2V0bmFtZSwKKwkucG9sbAkJPSBkYXRhZ3JhbV9wb2xsLAorCS5saXN0ZW4JCT0gc29ja19ub19saXN0ZW4sCisJLnNodXRkb3duCT0gc29ja19ub19zaHV0ZG93biwKKwkuc2V0c29ja29wdAk9IHNvY2tfbm9fc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAk9IHNvY2tfbm9fZ2V0c29ja29wdCwKKwkuc2VuZG1zZwk9IHBwcG9lX3NlbmRtc2csCisJLnJlY3Ztc2cJPSBwcHBvZV9yZWN2bXNnLAorCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKKwkuaW9jdGwJCT0gcHBwb3hfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBwcG94X3Byb3RvIHBwcG9lX3Byb3RvID0gewotICAgIC5jcmVhdGUJPSBwcHBvZV9jcmVhdGUsCi0gICAgLmlvY3RsCT0gcHBwb2VfaW9jdGwsCi0gICAgLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLmNyZWF0ZQk9IHBwcG9lX2NyZWF0ZSwKKwkuaW9jdGwJPSBwcHBvZV9pb2N0bCwKKwkub3duZXIJPSBUSElTX01PRFVMRSwKIH07CiAKLQotc3RhdGljIGludCBfX2luaXQgcHBwb2VfaW5pdCh2b2lkKQorc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9lX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpbnQgZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnBwcG9lX3NrX3Byb3RvLCAwKTsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKwlpbnQgZXJyOwogCisJcG4gPSBremFsbG9jKHNpemVvZigqcG4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ3bG9ja19pbml0KCZwbi0+aGFzaF9sb2NrKTsKKworCWVyciA9IG5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCwgcG4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0gCWVyciA9IHJlZ2lzdGVyX3BwcG94X3Byb3RvKFBYX1BST1RPX09FLCAmcHBwb2VfcHJvdG8pOworCXBkZSA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInBwcG9lIiwgU19JUlVHTywgJnBwcG9lX3NlcV9mb3BzKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmICghcGRlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7CisKK291dDoKKwlrZnJlZShwbik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBvZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcG9lX25ldCAqcG47CisKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAicHBwb2UiKTsKKwlwbiA9IG5ldF9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkKTsKKwkvKgorCSAqIGlmIHNvbWVvbmUgaGFzIGNhY2hlZCBvdXIgbmV0IHRoZW4KKwkgKiBmdXJ0aGVyIG5ldF9nZW5lcmljIGNhbGwgd2lsbCByZXR1cm4gTlVMTAorCSAqLworCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCwgTlVMTCk7CisJa2ZyZWUocG4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcG9lX25ldF9vcHMgPSB7CisJLmluaXQgPSBwcHBvZV9pbml0X25ldCwKKwkuZXhpdCA9IHBwcG9lX2V4aXRfbmV0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHBwb2VfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwcm90b19yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8sIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gcmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UsICZwcHBvZV9wcm90byk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcHBvZV9wcm90bzsKIAotCWVyciA9IHBwcG9lX3Byb2NfaW5pdCgpOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOwogCiAJZGV2X2FkZF9wYWNrKCZwcHBvZXNfcHR5cGUpOwogCWRldl9hZGRfcGFjaygmcHBwb2VkX3B0eXBlKTsKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBwcG9lX25vdGlmaWVyKTsKLW91dDoKLQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7CisKIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgogCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UpOwogb3V0X3VucmVnaXN0ZXJfcHBwb2VfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8pOwotCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvZV9leGl0KHZvaWQpCkBAIC0xMTIzLDcgKzEyMTYsNyBAQAogCWRldl9yZW1vdmVfcGFjaygmcHBwb2VzX3B0eXBlKTsKIAlkZXZfcmVtb3ZlX3BhY2soJnBwcG9lZF9wdHlwZSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBwcG9lX25vdGlmaWVyKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgicHBwb2UiLCBpbml0X25ldC5wcm9jX25ldCk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvZV9za19wcm90byk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMgYi9kcml2ZXJzL25ldC9wcHBvbDJ0cC5jCmluZGV4IGYxYTk0NjcuLjViMDdkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2wydHAuYwpAQCAtOTAsNyArOTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KQEAgLTIwNCw2ICsyMDYsNyBAQAogCXN0cnVjdCBzb2NrCQkqc29jazsJCS8qIFBhcmVudCBzb2NrZXQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBLZWVwIGEgbGlzdCBvZiBhbGwgb3BlbgogCQkJCQkJICogcHJlcGFyZWQgc29ja2V0cyAqLworCXN0cnVjdCBuZXQJCSpwcHBvbDJ0cF9uZXQ7CS8qIHRoZSBuZXQgd2UgYmVsb25nIHRvICovCiAKIAlhdG9taWNfdAkJcmVmX2NvdW50OwogfTsKQEAgLTIyNyw4ICsyMzAsMjAgQEAKIHN0YXRpYyBhdG9taWNfdCBwcHBvbDJ0cF9zZXNzaW9uX2NvdW50Owogc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7IHBwcG9sMnRwX3htaXQgLCBOVUxMIH07CiBzdGF0aWMgc3RydWN0IHByb3RvX29wcyBwcHBvbDJ0cF9vcHM7Ci1zdGF0aWMgTElTVF9IRUFEKHBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisvKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBpbnQgcHBwb2wydHBfbmV0X2lkOworc3RydWN0IHBwcG9sMnRwX25ldCB7CisJc3RydWN0IGxpc3RfaGVhZCBwcHBvbDJ0cF90dW5uZWxfbGlzdDsKKwlyd2xvY2tfdCBwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwcHBvbDJ0cF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCUJVR19PTighbmV0KTsKKworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9sMnRwX25ldF9pZCk7Cit9CiAKIC8qIEhlbHBlcnMgdG8gb2J0YWluIHR1bm5lbC9zZXNzaW9uIGNvbnRleHRzIGZyb20gc29ja2V0cy4KICAqLwpAQCAtMzIxLDE4ICszMzYsMTkgQEAKIAogLyogTG9va3VwIGEgdHVubmVsIGJ5IGlkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICpwcHBvbDJ0cF90dW5uZWxfZmluZCh1MTYgdHVubmVsX2lkKQorc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnBwcG9sMnRwX3R1bm5lbF9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTE2IHR1bm5lbF9pZCkKIHsKLQlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWwgPSBOVUxMOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbiA9IHBwcG9sMnRwX3Blcm5ldChuZXQpOwogCi0JcmVhZF9sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1bm5lbCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0LCBsaXN0KSB7CisJcmVhZF9sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dW5uZWwsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHR1bm5lbC0+c3RhdHMudHVubmVsX2lkID09IHR1bm5lbF9pZCkgewotCQkJcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCQkJcmVhZF91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAkJCXJldHVybiB0dW5uZWw7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEyODcsMTAgKzEzMDMsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgcHBwb2wydHBfdHVubmVsX2ZyZWUoc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsKQogeworCXN0cnVjdCBwcHBvbDJ0cF9uZXQgKnBuID0gcHBwb2wydHBfcGVybmV0KHR1bm5lbC0+cHBwb2wydHBfbmV0KTsKKwogCS8qIFJlbW92ZSBmcm9tIHNvY2tldCBsaXN0ICovCi0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOwogCWxpc3RfZGVsX2luaXQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAogCWF0b21pY19kZWMoJnBwcG9sMnRwX3R1bm5lbF9jb3VudCk7CiAJa2ZyZWUodHVubmVsKTsKQEAgLTE0NDQsMTMgKzE0NjIsMTQgQEAKIC8qIEludGVybmFsIGZ1bmN0aW9uIHRvIHByZXBhcmUgYSB0dW5uZWwgKFVEUCkgc29ja2V0IHRvIGhhdmUgUFBQb1gKICAqIHNvY2tldHMgYXR0YWNoZWQgdG8gaXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KGludCBmZCwgdTE2IHR1bm5lbF9pZCwKLQkJCQkJCSAgIGludCAqZXJyb3IpCitzdGF0aWMgc3RydWN0IHNvY2sgKnBwcG9sMnRwX3ByZXBhcmVfdHVubmVsX3NvY2tldChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCWludCBmZCwgdTE2IHR1bm5lbF9pZCwgaW50ICplcnJvcikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CiAJc3RydWN0IHNvY2sgKnJldCA9IE5VTEw7CiAKIAkvKiBHZXQgdGhlIHR1bm5lbCBVRFAgc29ja2V0IGZyb20gdGhlIGZkLCB3aGljaCB3YXMgb3BlbmVkIGJ5CkBAIC0xNTI0LDExICsxNTQzLDE1IEBACiAJLyogTWlzYyBpbml0ICovCiAJcndsb2NrX2luaXQoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAKKwkvKiBUaGUgbmV0IHdlIGJlbG9uZyB0byAqLworCXR1bm5lbC0+cHBwb2wydHBfbmV0ID0gbmV0OworCXBuID0gcHBwb2wydHBfcGVybmV0KG5ldCk7CisKIAkvKiBBZGQgdHVubmVsIHRvIG91ciBsaXN0ICovCiAJSU5JVF9MSVNUX0hFQUQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJnR1bm5lbC0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZCgmdHVubmVsLT5saXN0LCAmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAlhdG9taWNfaW5jKCZwcHBvbDJ0cF90dW5uZWxfY291bnQpOwogCiAJLyogQnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGUgdHVubmVsIGNvbnRleHQgaXMgZGVsZXRlZApAQCAtMTYyOSw3ICsxNjUyLDggQEAKIAkgKiB0dW5uZWwgaWQuCiAJICovCiAJaWYgKChzcC0+cHBwb2wydHAuc19zZXNzaW9uID09IDApICYmIChzcC0+cHBwb2wydHAuZF9zZXNzaW9uID09IDApKSB7Ci0JCXR1bm5lbF9zb2NrID0gcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KHNwLT5wcHBvbDJ0cC5mZCwKKwkJdHVubmVsX3NvY2sgPSBwcHBvbDJ0cF9wcmVwYXJlX3R1bm5lbF9zb2NrZXQoc29ja19uZXQoc2spLAorCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLmZkLAogCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLnNfdHVubmVsLAogCQkJCQkJCSAgICAgJmVycm9yKTsKIAkJaWYgKHR1bm5lbF9zb2NrID09IE5VTEwpCkBAIC0xNjM3LDcgKzE2NjEsNyBAQAogCiAJCXR1bm5lbCA9IHR1bm5lbF9zb2NrLT5za191c2VyX2RhdGE7CiAJfSBlbHNlIHsKLQkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc3AtPnBwcG9sMnRwLnNfdHVubmVsKTsKKwkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc29ja19uZXQoc2spLCBzcC0+cHBwb2wydHAuc190dW5uZWwpOwogCiAJCS8qIEVycm9yIGlmIHdlIGNhbid0IGZpbmQgdGhlIHR1bm5lbCAqLwogCQllcnJvciA9IC1FTk9FTlQ7CkBAIC0xNzI1LDcgKzE3NDksNyBAQAogCXBvLT5jaGFuLm9wcwkgPSAmcHBwb2wydHBfY2hhbl9vcHM7CiAJcG8tPmNoYW4ubXR1CSA9IHNlc3Npb24tPm10dTsKIAotCWVycm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwllcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChzb2NrX25ldChzayksICZwby0+Y2hhbik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVuZF9wdXRfdHVuOwogCkBAIC0yMzQ3LDggKzIzNzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKIHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSB7Ci0Jc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOyAvKiBjdXJyZW50IHR1bm5lbCAqLwotCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOyAvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKKwlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CQkvKiBjdXJyZW50IHR1bm5lbCAqLworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOwkvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpuZXh0X3Nlc3Npb24oc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiAqY3VycikKQEAgLTIzODQsMTcgKzI0MDksMTggQEAKIAlyZXR1cm4gc2Vzc2lvbjsKIH0KIAotc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKm5leHRfdHVubmVsKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCitzdGF0aWMgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqbmV4dF90dW5uZWwoc3RydWN0IHBwcG9sMnRwX25ldCAqcG4sCisJCQkJCSAgIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDsKIAotCXJlYWRfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JaWYgKGxpc3RfaXNfbGFzdCgmY3Vyci0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkgeworCXJlYWRfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCWlmIChsaXN0X2lzX2xhc3QoJmN1cnItPmxpc3QsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QpKSB7CiAJCWdvdG8gb3V0OwogCX0KIAl0dW5uZWwgPSBsaXN0X2VudHJ5KGN1cnItPmxpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiBvdXQ6Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gdHVubmVsOwogfQpAQCAtMjQwMiw2ICsyNDI4LDcgQEAKIHN0YXRpYyB2b2lkICpwcHBvbDJ0cF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKm9mZnMpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IFNFUV9TVEFSVF9UT0tFTjsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbjsKIAlsb2ZmX3QgcG9zID0gKm9mZnM7CiAKIAlpZiAoIXBvcykKQEAgLTI0MDksMTQgKzI0MzYsMTUgQEAKIAogCUJVR19PTihtLT5wcml2YXRlID09IE5VTEwpOwogCXBkID0gbS0+cHJpdmF0ZTsKKwlwbiA9IHBwcG9sMnRwX3Blcm5ldChzZXFfZmlsZV9uZXQobSkpOwogCiAJaWYgKHBkLT50dW5uZWwgPT0gTlVMTCkgewotCQlpZiAoIWxpc3RfZW1wdHkoJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkKLQkJCXBkLT50dW5uZWwgPSBsaXN0X2VudHJ5KHBwcG9sMnRwX3R1bm5lbF9saXN0Lm5leHQsIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwsIGxpc3QpOworCQlpZiAoIWxpc3RfZW1wdHkoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdCkpCisJCQlwZC0+dHVubmVsID0gbGlzdF9lbnRyeShwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiAJfSBlbHNlIHsKIAkJcGQtPnNlc3Npb24gPSBuZXh0X3Nlc3Npb24ocGQtPnR1bm5lbCwgcGQtPnNlc3Npb24pOwogCQlpZiAocGQtPnNlc3Npb24gPT0gTlVMTCkgewotCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBkLT50dW5uZWwpOworCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBuLCBwZC0+dHVubmVsKTsKIAkJfQogCX0KIApAQCAtMjUxNyw3ICsyNTQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0gewogCS5zdGFydAkJPSBwcHBvbDJ0cF9zZXFfc3RhcnQsCiAJLm5leHQJCT0gcHBwb2wydHBfc2VxX25leHQsCiAJLnN0b3AJCT0gcHBwb2wydHBfc2VxX3N0b3AsCkBAIC0yNTMwLDUxICsyNTU4LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzZXFfZmlsZSAqbTsKLQlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkOwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gc2VxX29wZW4oZmlsZSwgJnBwcG9sMnRwX3NlcV9vcHMpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBBbGxvY2F0ZSBhbmQgZmlsbCBvdXIgcHJvY19kYXRhIGZvciBhY2Nlc3MgbGF0ZXIgKi8KLQlyZXQgPSAtRU5PTUVNOwotCW0tPnByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAobS0+cHJpdmF0ZSA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCXBkID0gbS0+cHJpdmF0ZTsKLQlyZXQgPSAwOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmcHBwb2wydHBfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7CiB9CiAKLS8qIENhbGxlZCB3aGVuIC9wcm9jIGZpbGUgYWNjZXNzIGNvbXBsZXRlcy4KLSAqLwotc3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWtmcmVlKG0tPnByaXZhdGUpOwotCW0tPnByaXZhdGUgPSBOVUxMOwotCi0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwcHBvbDJ0cF9wcm9jX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcHBvbDJ0cF9wcm9jOwotCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjA2LDYgKzI2MDEsNTcgQEAKIAkuaW9jdGwJCT0gcHBwb2wydHBfaW9jdGwKIH07CiAKK3N0YXRpYyBfX25ldF9pbml0IGludCBwcHBvbDJ0cF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisJaW50IGVycjsKKworCXBuID0ga3phbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwlyd2xvY2tfaW5pdCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBwbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlwZGUgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJwcHBvbDJ0cCIsIFNfSVJVR08sICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKCFwZGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKKworb3V0OgorCWtmcmVlKHBuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcG9sMnRwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKworCXByb2NfbmV0X3JlbW92ZShuZXQsICJwcHBvbDJ0cCIpOworCXBuID0gbmV0X2dlbmVyaWMobmV0LCBwcHBvbDJ0cF9uZXRfaWQpOworCS8qCisJICogaWYgc29tZW9uZSBoYXMgY2FjaGVkIG91ciBuZXQgdGhlbgorCSAqIGZ1cnRoZXIgbmV0X2dlbmVyaWMgY2FsbCB3aWxsIHJldHVybiBOVUxMCisJICovCisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBOVUxMKTsKKwlrZnJlZShwbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcHBwb2wydHBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcG9sMnRwX2luaXRfbmV0LAorCS5leGl0ID0gcHBwb2wydHBfZXhpdF9uZXQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBwcHBvbDJ0cF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTI2MTcsMjMgKzI2NjMsMTcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG9sMnRwX3Byb3RvOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcHBvbDJ0cF9wcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAicHBwb2wydHAiLCAwLAotCQkJCQkgICAgICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOwotCWlmICghcHBwb2wydHBfcHJvYykgewotCQllcnIgPSAtRU5PTUVNOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBvbDJ0cF9uZXRfaWQsICZwcHBvbDJ0cF9uZXRfb3BzKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCiAJcHJpbnRrKEtFUk5fSU5GTyAiUFBQb0wyVFAga2VybmVsIGRyaXZlciwgJXNcbiIsCiAJICAgICAgIFBQUE9MMlRQX0RSVl9WRVJTSU9OKTsKIAogb3V0OgogCXJldHVybiBlcnI7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgogCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0wyVFApOwotI2VuZGlmCiBvdXRfdW5yZWdpc3Rlcl9wcHBvbDJ0cF9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvbDJ0cF9za19wcm90byk7CiAJZ290byBvdXQ7CkBAIC0yNjQyLDEwICsyNjgyLDYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvbDJ0cF9leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PTDJUUCk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJwcHBvbDJ0cCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNlbmRpZgogCXByb3RvX3VucmVnaXN0ZXIoJnBwcG9sMnRwX3NrX3Byb3RvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb3guYyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKaW5kZXggMDNhZWNjOS4uNGY2ZDMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb3guYworKysgYi9kcml2ZXJzL25ldC9wcHBveC5jCkBAIC0xMDgsOSArMTA4LDYgQEAKIHsKIAlpbnQgcmMgPSAtRVBST1RPVFlQRTsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQogCWlmIChwcm90b2NvbCA8IDAgfHwgcHJvdG9jb2wgPiBQWF9NQVhfUFJPVE8pCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKaW5kZXggNGI1NjRlZC4uMzA5MDBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwpAQCAtNzQ1LDcgKzc0NSw3IEBACiAJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgdG9wIG9mIGJ1ZmZlciAqLwogCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBWTEFOX0hMRU4sIDIgKiBFVEhfQUxFTik7CiAKLQl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKKwl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSk7CiAJdmV0aC0+aF92bGFuX1RDSSA9IGh0b25zKHRhZyk7CiAKIAlyZXR1cm4gc2tiOwpAQCAtMTQwMyw2ICsxNDAzLDE5IEBACiAJCWF0b21pY19kZWMoJmNhcmQtPnR4X3RpbWVvdXRfdGFza19jb3VudGVyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZWxpY19uZXRkZXZpY2Vfb3BzID0geworCS5uZG9fb3BlbiA9IGdlbGljX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IGdlbGljX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogLyoqCiAgKiBnZWxpY19ldGhlcl9zZXR1cF9uZXRkZXZfb3BzIC0gaW5pdGlhbGl6YXRpb24gb2YgbmV0X2RldmljZSBvcGVyYXRpb25zCiAgKiBAbmV0ZGV2OiBuZXRfZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQxMiwyMSArMTQyNSwxMiBAQAogc3RhdGljIHZvaWQgZ2VsaWNfZXRoZXJfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewotCW5ldGRldi0+b3BlbiA9ICZnZWxpY19uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfbmV0X3N0b3A7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZ2VsaWNfbmV0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZ2VsaWNfbmV0X3NldF9tdWx0aTsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSAmZ2VsaWNfbmV0X2NoYW5nZV9tdHU7Ci0JLyogdHggd2F0Y2hkb2cgKi8KLQluZXRkZXYtPnR4X3RpbWVvdXQgPSAmZ2VsaWNfbmV0X3R4X3RpbWVvdXQ7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEdFTElDX05FVF9XQVRDSERPR19USU1FT1VUOwogCS8qIE5BUEkgKi8KIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsIG5hcGksCiAJCSAgICAgICBnZWxpY19uZXRfcG9sbCwgR0VMSUNfTkVUX05BUElfV0VJR0hUKTsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmdlbGljX2V0aGVyX2V0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZWxpY19uZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmdlbGljX25ldGRldmljZV9vcHM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwppbmRleCAzMzVkYTQ4My4uYTVhYzJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTI2OTcsNiArMjY5NywxOSBAQAogCiAvKiAtLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdlbGljX3dsX25ldGRldmljZV9vcHMgPSB7CisJLm5kb19vcGVuID0gZ2VsaWNfd2xfb3BlbiwKKwkubmRvX3N0b3AgPSBnZWxpY193bF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZ2VsaWNfd2xfZ2V0X2xpbmssCkBAIC0yNzExLDIxICsyNzI0LDEyIEBACiAJc3RydWN0IGdlbGljX3dsX2luZm8gKndsOwogCXdsID0gcG9ydF93bChuZXRkZXZfcHJpdihuZXRkZXYpKTsKIAlCVUdfT04oIXdsKTsKLQluZXRkZXYtPm9wZW4gPSAmZ2VsaWNfd2xfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfd2xfc3RvcDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZnZWxpY19uZXRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZnZWxpY19uZXRfc2V0X211bHRpOwotCW5ldGRldi0+Y2hhbmdlX210dSA9ICZnZWxpY19uZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7Ci0JbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwotCS8qIHR4IHdhdGNoZG9nICovCi0JbmV0ZGV2LT50eF90aW1lb3V0ID0gJmdlbGljX25ldF90eF90aW1lb3V0OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBHRUxJQ19ORVRfV0FUQ0hET0dfVElNRU9VVDsKIAogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmZ2VsaWNfd2xfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IGdlbGljX25ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmZ2VsaWNfd2xfbmV0ZGV2aWNlX29wczsKKwluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7CisJbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IDE4OWVjMjkuLjhiMjgyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTIyOTIsNyArMjI5Miw3IEBACiAKIAlpZiAodHhfY2xlYW5lZCArIHJ4X2NsZWFuZWQgIT0gYnVkZ2V0KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfdXBkYXRlX3NtYWxsX2J1ZnFfcHJvZF9pbmRleChxZGV2KTsKIAkJcWxfdXBkYXRlX2xyZ19idWZxX3Byb2RfaW5kZXgocWRldik7CiAJCXdyaXRlbChxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXgsCkBAIC0yMzUxLDggKzIzNTEsOCBAQAogCQlzcGluX3VubG9jaygmcWRldi0+YWRhcHRlcl9sb2NrKTsKIAl9IGVsc2UgaWYgKHZhbHVlICYgSVNQX0lNUl9ESVNBQkxFX0NNUExfSU5UKSB7CiAJCXFsX2Rpc2FibGVfaW50ZXJydXB0cyhxZGV2KTsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZxZGV2LT5uYXBpKSkpIHsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcWRldi0+bmFwaSkpKSB7CisJCQlfX25hcGlfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCBhZmY5YzVmLi5mY2IxNTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtMjgsOCArMjgsOCBAQAogICAgICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUUxHRV9WRU5ET1JfSUQgICAgMHgxMDc3Ci0jZGVmaW5lIFFMR0VfREVWSUNFX0lEICAgIDB4ODAxMgotCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMTIJMHg4MDEyCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMDAJMHg4MDAwCiAjZGVmaW5lIE1BWF9DUFVTIDgKICNkZWZpbmUgTUFYX1RYX1JJTkdTIE1BWF9DUFVTCiAjZGVmaW5lIE1BWF9SWF9SSU5HUyAoKE1BWF9DUFVTICogMikgKyAxKQpAQCAtMTY0LDcgKzE2NCw3IEBACiAJQ1NSX1JQID0gKDEgPDwgMTApLAogCUNTUl9DTURfUEFSTV9TSElGVCA9IDIyLAogCUNTUl9DTURfTk9QID0gMHgwMDAwMDAwMCwKLQlDU1JfQ01EX1NFVF9SU1QgPSAweDEwMDAwMDAsCisJQ1NSX0NNRF9TRVRfUlNUID0gMHgxMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9SU1QgPSAweDIwMDAwMDAwLAogCUNTUl9DTURfU0VUX1BBVVNFID0gMHgzMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9QQVVTRSA9IDB4NDAwMDAwMDAsCkBAIC00MjQsNyArNDI0LDcgQEAKIAlSWF9TWU1CT0xfRVJSID0gMHgwMDAwMDM3MCwKIAlSWF9NQUNfRVJSID0gMHgwMDAwMDM3OCwKIAlSWF9DVExfUEtUUyA9IDB4MDAwMDAzODAsCi0JUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODQsCisJUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODgsCiAJUlhfNjRfUEtUUyA9IDB4MDAwMDAzOTAsCiAJUlhfNjVfVE9fMTI3X1BLVFMgPSAweDAwMDAwMzk4LAogCVJYXzEyOF8yNTVfUEtUUyA9IDB4MDAwMDAzYTAsCkBAIC03MzMsNiArNzMzLDExIEBACiAJQUVOX0xJTktfRE9XTiA9IDB4MDAwMDgwMTIsCiAJQUVOX0lEQ19DTVBMVCA9IDB4MDAwMDgxMDAsCiAJQUVOX0lEQ19SRVEgPSAweDAwMDA4MTAxLAorCUFFTl9JRENfRVhUID0gMHgwMDAwODEwMiwKKwlBRU5fRENCWF9DSEcgPSAweDAwMDA4MTEwLAorCUFFTl9BRU5fTE9TVCA9IDB4MDAwMDgxMjAsCisJQUVOX0FFTl9TRlBfSU4gPSAweDAwMDA4MTMwLAorCUFFTl9BRU5fU0ZQX09VVCA9IDB4MDAwMDgxMzEsCiAJQUVOX0ZXX0lOSVRfRE9ORSA9IDB4MDAwMDg0MDAsCiAJQUVOX0ZXX0lOSVRfRkFJTCA9IDB4MDAwMDg0MDEsCiAKQEAgLTc0Miw0MCArNzQ3LDQ4IEBACiAJTUJfQ01EX01CX1RFU1QgPSAweDAwMDAwMDA2LAogCU1CX0NNRF9DU1VNX1RFU1QgPSAweDAwMDAwMDA3LAkvKiBWZXJpZnkgQ2hlY2tzdW0gKi8KIAlNQl9DTURfQUJPVVRfRlcgPSAweDAwMDAwMDA4LAorCU1CX0NNRF9DT1BZX1JJU0NfUkFNID0gMHgwMDAwMDAwYSwKIAlNQl9DTURfTE9BRF9SSVNDX1JBTSA9IDB4MDAwMDAwMGIsCiAJTUJfQ01EX0RVTVBfUklTQ19SQU0gPSAweDAwMDAwMDBjLAogCU1CX0NNRF9XUklURV9SQU0gPSAweDAwMDAwMDBkLAorCU1CX0NNRF9JTklUX1JJU0NfUkFNID0gMHgwMDAwMDAwZSwKIAlNQl9DTURfUkVBRF9SQU0gPSAweDAwMDAwMDBmLAogCU1CX0NNRF9TVE9QX0ZXID0gMHgwMDAwMDAxNCwKIAlNQl9DTURfTUFLRV9TWVNfRVJSID0gMHgwMDAwMDAyYSwKKwlNQl9DTURfV1JJVEVfU0ZQID0gMHgwMDAwMDAzMCwKKwlNQl9DTURfUkVBRF9TRlAgPSAweDAwMDAwMDMxLAogCU1CX0NNRF9JTklUX0ZXID0gMHgwMDAwMDA2MCwKLQlNQl9DTURfR0VUX0lOSVRfQ0IgPSAweDAwMDAwMDYxLAorCU1CX0NNRF9HRVRfSUZDQiA9IDB4MDAwMDAwNjEsCiAJTUJfQ01EX0dFVF9GV19TVEFURSA9IDB4MDAwMDAwNjksCiAJTUJfQ01EX0lEQ19SRVEgPSAweDAwMDAwMTAwLAkvKiBJbnRlci1Ecml2ZXIgQ29tbXVuaWNhdGlvbiAqLwogCU1CX0NNRF9JRENfQUNLID0gMHgwMDAwMDEwMSwJLyogSW50ZXItRHJpdmVyIENvbW11bmljYXRpb24gKi8KIAlNQl9DTURfU0VUX1dPTF9NT0RFID0gMHgwMDAwMDExMCwJLyogV2FrZSBPbiBMYW4gKi8KLQlNQl9XT0xfRElTQUJMRSA9IDB4MDAwMDAwMDAsCi0JTUJfV09MX01BR0lDX1BLVCA9IDB4MDAwMDAwMDEsCi0JTUJfV09MX0ZMVFIgPSAweDAwMDAwMDAyLAotCU1CX1dPTF9VQ0FTVCA9IDB4MDAwMDAwMDQsCi0JTUJfV09MX01DQVNUID0gMHgwMDAwMDAwOCwKLQlNQl9XT0xfQkNBU1QgPSAweDAwMDAwMDEwLAotCU1CX1dPTF9MSU5LX1VQID0gMHgwMDAwMDAyMCwKLQlNQl9XT0xfTElOS19ET1dOID0gMHgwMDAwMDA0MCwKKwlNQl9XT0xfRElTQUJMRSA9IDAsCisJTUJfV09MX01BR0lDX1BLVCA9ICgxIDw8IDEpLAorCU1CX1dPTF9GTFRSID0gKDEgPDwgMiksCisJTUJfV09MX1VDQVNUID0gKDEgPDwgMyksCisJTUJfV09MX01DQVNUID0gKDEgPDwgNCksCisJTUJfV09MX0JDQVNUID0gKDEgPDwgNSksCisJTUJfV09MX0xJTktfVVAgPSAoMSA8PCA2KSwKKwlNQl9XT0xfTElOS19ET1dOID0gKDEgPDwgNyksCiAJTUJfQ01EX1NFVF9XT0xfRkxUUiA9IDB4MDAwMDAxMTEsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLwotCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLworCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsIC8qIFdha2UgT24gTGFuIEZpbHRlciAqLwogCU1CX0NNRF9TRVRfV09MX01BR0lDID0gMHgwMDAwMDExMywJLyogV2FrZSBPbiBMYW4gTWFnaWMgUGFja2V0ICovCi0JTUJfQ01EX0NMRUFSX1dPTF9NQUdJQyA9IDB4MDAwMDAxMTQsCS8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9DTEVBUl9XT0xfTUFHSUMgPSAweDAwMDAwMTE0LC8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9TRVRfV09MX0lNTUVEID0gMHgwMDAwMDExNSwKIAlNQl9DTURfUE9SVF9SRVNFVCA9IDB4MDAwMDAxMjAsCiAJTUJfQ01EX1NFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjIsCiAJTUJfQ01EX0dFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjMsCi0JTUJfQ01EX1NFVF9BU0lDX1ZPTFRTID0gMHgwMDAwMDEzMCwKLQlNQl9DTURfR0VUX1NOU19EQVRBID0gMHgwMDAwMDEzMSwJLyogVGVtcCBhbmQgVm9sdCBTZW5zZSBkYXRhLiAqLworCU1CX0NNRF9HRVRfTElOS19TVFMgPSAweDAwMDAwMTI0LAogCiAJLyogTWFpbGJveCBDb21tYW5kIFN0YXR1cy4gKi8KIAlNQl9DTURfU1RTX0dPT0QgPSAweDAwMDA0MDAwLAkvKiBTdWNjZXNzLiAqLwogCU1CX0NNRF9TVFNfSU5UUk1EVCA9IDB4MDAwMDEwMDAsCS8qIEludGVybWVkaWF0ZSBDb21wbGV0ZS4gKi8KLQlNQl9DTURfU1RTX0VSUiA9IDB4MDAwMDQwMDUsCS8qIEVycm9yLiAqLworCU1CX0NNRF9TVFNfSU5WTERfQ01EID0gMHgwMDAwNDAwMSwJLyogSW52YWxpZC4gKi8KKwlNQl9DTURfU1RTX1hGQ19FUlIgPSAweDAwMDA0MDAyLAkvKiBJbnRlcmZhY2UgRXJyb3IuICovCisJTUJfQ01EX1NUU19DU1VNX0VSUiA9IDB4MDAwMDQwMDMsCS8qIENzdW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19FUlIgPSAweDAwMDA0MDA1LAkvKiBTeXN0ZW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19QQVJBTV9FUlIgPSAweDAwMDA0MDA2LAkvKiBQYXJhbWV0ZXIgRXJyb3IuICovCiB9OwogCiBzdHJ1Y3QgbWJveF9wYXJhbXMgewpAQCAtNzg1LDcgKzc5OCw3IEBACiAJaW50IG91dF9jb3VudDsKIH07CiAKLXN0cnVjdCBmbGFzaF9wYXJhbXMgeworc3RydWN0IGZsYXNoX3BhcmFtc184MDEyIHsKIAl1OCBkZXZfaWRfc3RyWzRdOwogCV9fbGUxNiBzaXplOwogCV9fbGUxNiBjc3VtOwpAQCAtNzk1LDYgKzgwOCw0MyBAQAogCV9fbGUxNiByZXM7CiB9OwogCisvKiA4MDAwIGRldmljZSdzIGZsYXNoIGlzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICogYXQgYSBkaWZmZXJlbnQgb2Zmc2V0IGluIGZsYXNoLgorICovCisjZGVmaW5lIEZVTkMwX0ZMQVNIX09GRlNFVCAweDE0MDIwMAorI2RlZmluZSBGVU5DMV9GTEFTSF9PRkZTRVQgMHgxNDA2MDAKKworLyogRmxhc2ggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuICovCitzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgeworCXU4IGRldl9pZF9zdHJbNF07CS8qICI4MDAwIiAqLworCV9fbGUxNiB2ZXI7CisJX19sZTE2IHNpemU7CisJX19sZTE2IGNzdW07CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMTYgdG90YWxfc2l6ZTsKKwlfX2xlMTYgZW50cnlfY291bnQ7CisJdTggZGF0YV90eXBlMDsKKwl1OCBkYXRhX3NpemUwOworCXU4IG1hY19hZGRyWzZdOworCXU4IGRhdGFfdHlwZTE7CisJdTggZGF0YV9zaXplMTsKKwl1OCBtYWNfYWRkcjFbNl07CisJdTggZGF0YV90eXBlMjsKKwl1OCBkYXRhX3NpemUyOworCV9fbGUxNiB2bGFuX2lkOworCXU4IGRhdGFfdHlwZTM7CisJdTggZGF0YV9zaXplMzsKKwlfX2xlMTYgbGFzdDsKKwl1OCByZXNlcnZlZDFbNDY0XTsKKwlfX2xlMTYJc3Vic3lzX3Zlbl9pZDsKKwlfX2xlMTYJc3Vic3lzX2Rldl9pZDsKKwl1OCByZXNlcnZlZDJbNF07Cit9OworCit1bmlvbiBmbGFzaF9wYXJhbXMgeworCXN0cnVjdCBmbGFzaF9wYXJhbXNfODAxMiBmbGFzaF9wYXJhbXNfODAxMjsKKwlzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgZmxhc2hfcGFyYW1zXzgwMDA7Cit9OwogCiAvKgogICogZG9vcmJlbGwgc3BhY2UgZm9yIHRoZSByeCByaW5nIGNvbnRleHQKQEAgLTk2OCw2ICsxMDE4LDcgQEAKIAlfX2xlMTYgdmxhbl9pZDsJCS8qIDEyIGJpdHMgKi8KICNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX0MJMHgxMDAwCS8qIFZMQU4gQ0ZJIGJpdCAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfQ09TX1NISUZUCTEyCS8qIGNsYXNzIG9mIHNlcnZpY2UgdmFsdWUgKi8KKyNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX1ZMQU5fTUFTSwkweDBmZmZmCiAKIAlfX2xlMTYgcmVzZXJ2ZWQxOwogCV9fbGUzMiByZXNlcnZlZDJbNl07CkBAIC0xMDMzLDYgKzEwODQsNyBAQAogI2RlZmluZSBRX0xFTl9DUFBfMTYJMHgwMDAxCiAjZGVmaW5lIFFfTEVOX0NQUF8zMgkweDAwMDIKICNkZWZpbmUgUV9MRU5fQ1BQXzY0CTB4MDAwMworI2RlZmluZSBRX0xFTl9DUFBfNTEyCTB4MDAwNgogCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUV9QUklfU0hJRlQJMQogI2RlZmluZSBRX0ZMQUdTX0xDCTB4MTAwMApAQCAtMTMxNCwyNyArMTM2Niw0OSBAQAogCVFMX0RNQTY0ID0gKDEgPDwgNSksCiAJUUxfUFJPTUlTQ1VPVVMgPSAoMSA8PCA2KSwKIAlRTF9BTExNVUxUSSA9ICgxIDw8IDcpLAorCVFMX1BPUlRfQ0ZHID0gKDEgPDwgOCksCisJUUxfQ0FNX1JUX1NFVCA9ICgxIDw8IDkpLAogfTsKIAogLyogbGlua19zdGF0dXMgYml0IGRlZmluaXRpb25zICovCiBlbnVtIHsKLQlMT09QQkFDS19NQVNLID0gMHgwMDAwMDcwMCwKLQlMT09QQkFDS19QQ1MgPSAweDAwMDAwMTAwLAotCUxPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCi0JTE9PUEJBQ0tfRVhUID0gMHgwMDAwMDMwMCwKLQlQQVVTRV9NQVNLID0gMHgwMDAwMDBjMCwKLQlQQVVTRV9TVEQgPSAweDAwMDAwMDQwLAotCVBBVVNFX1BSSSA9IDB4MDAwMDAwODAsCi0JU1BFRURfTUFTSyA9IDB4MDAwMDAwMzgsCi0JU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAotCVNQRUVEXzFHYiA9IDB4MDAwMDAwMDgsCi0JU1BFRURfMTBHYiA9IDB4MDAwMDAwMTAsCi0JTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAotCUxJTktfVFlQRV9YRkkgPSAweDAwMDAwMDAxLAotCUxJTktfVFlQRV9YQVVJID0gMHgwMDAwMDAwMiwKLQlMSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKLQlMSU5LX1RZUEVfWEFVSV9CUCA9IDB4MDAwMDAwMDQsCi0JTElOS19UWVBFXzEwR0JBU0VUID0gMHgwMDAwMDAwNSwKKwlTVFNfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDA3MDAsCisJU1RTX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAxMDAsCisJU1RTX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCisJU1RTX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAzMDAsCisJU1RTX1BBVVNFX01BU0sgPSAweDAwMDAwMGMwLAorCVNUU19QQVVTRV9TVEQgPSAweDAwMDAwMDQwLAorCVNUU19QQVVTRV9QUkkgPSAweDAwMDAwMDgwLAorCVNUU19TUEVFRF9NQVNLID0gMHgwMDAwMDAzOCwKKwlTVFNfU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAorCVNUU19TUEVFRF8xR2IgPSAweDAwMDAwMDA4LAorCVNUU19TUEVFRF8xMEdiID0gMHgwMDAwMDAxMCwKKwlTVFNfTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAorCVNUU19MSU5LX1RZUEVfWEZJID0gMHgwMDAwMDAwMSwKKwlTVFNfTElOS19UWVBFX1hBVUkgPSAweDAwMDAwMDAyLAorCVNUU19MSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKKwlTVFNfTElOS19UWVBFX1hBVUlfQlAgPSAweDAwMDAwMDA0LAorCVNUU19MSU5LX1RZUEVfMTBHQkFTRVQgPSAweDAwMDAwMDA1LAorfTsKKworLyogbGlua19jb25maWcgYml0IGRlZmluaXRpb25zICovCitlbnVtIHsKKwlDRkdfSlVNQk9fRlJBTUVfU0laRSA9IDB4MDAwMTAwMDAsCisJQ0ZHX1BBVVNFX01BU0sgPSAweDAwMDAwMDYwLAorCUNGR19QQVVTRV9TVEQgPSAweDAwMDAwMDIwLAorCUNGR19QQVVTRV9QUkkgPSAweDAwMDAwMDQwLAorCUNGR19EQ0JYID0gMHgwMDAwMDAxMCwKKwlDRkdfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDAwMDcsCisJQ0ZHX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAwMDIsCisJQ0ZHX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAwMDQsCisJQ0ZHX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAwMDYsCisJQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkUgPSAweDAwMDAyNTgwLAorfTsKKworc3RydWN0IG5pY19vcGVyYXRpb25zIHsKKworCWludCAoKmdldF9mbGFzaCkgKHN0cnVjdCBxbF9hZGFwdGVyICopOworCWludCAoKnBvcnRfaW5pdGlhbGl6ZSkgKHN0cnVjdCBxbF9hZGFwdGVyICopOwogfTsKIAogLyoKQEAgLTEzNzcsNiArMTQ1MSw4IEBACiAKIAl1MzIgbWFpbGJveF9pbjsKIAl1MzIgbWFpbGJveF9vdXQ7CisJc3RydWN0IG1ib3hfcGFyYW1zIGlkY19tYmM7CisJc3RydWN0IG11dGV4CW1waV9tdXRleDsKIAogCWludCB0eF9yaW5nX3NpemU7CiAJaW50IHJ4X3Jpbmdfc2l6ZTsKQEAgLTE0MTIsOCArMTQ4OCwxMCBAQAogCXUzMiBwb3J0X2xpbmtfdXA7CiAJdTMyIHBvcnRfaW5pdDsKIAl1MzIgbGlua19zdGF0dXM7CisJdTMyIGxpbmtfY29uZmlnOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKIAotCXN0cnVjdCBmbGFzaF9wYXJhbXMgZmxhc2g7CisJdW5pb24gZmxhc2hfcGFyYW1zIGZsYXNoOwogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnFfd29ya3F1ZXVlOwpAQCAtMTQyMSw2ICsxNDk5LDExIEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBhc2ljX3Jlc2V0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfcmVzZXRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX3BvcnRfY2ZnX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfaWRjX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gaWRlX2NvbXBsZXRpb247CisJc3RydWN0IG5pY19vcGVyYXRpb25zICpuaWNfb3BzOworCXUxNiBkZXZpY2VfaWQ7CiB9OwogCiAvKgpAQCAtMTQ5Myw2ICsxNTc2LDEwIEBACiB1MzIgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7CiB2b2lkIHFsX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgcWxfcmVhZF94Z21hY19yZWc2NChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTY0ICpkYXRhKTsKK3ZvaWQgcWxfbXBpX2lkY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgcWxfbWJfZ2V0X2Z3X3N0YXRlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiAKICNpZiAxCiAjZGVmaW5lIFFMX0FMTF9EVU1QCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKaW5kZXggMzc5Yjg5NS4uNDBhNzBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwpAQCAtODMsNiArODMsMTAgQEAKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWVbM107CisKKwlpID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHFsX2dldF9tYWNfYWRkcl9yZWcocWRldiwgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKQEAgLTExMSwxMiArMTE1LDE2IEBACiAJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGksIHZhbHVlWzFdLCB2YWx1ZVswXSk7CiAJCX0KIAl9CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiB9CiAKIHZvaWQgcWxfZHVtcF9yb3V0aW5nX2VudHJpZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IGk7CiAJdTMyIHZhbHVlOworCWkgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXZhbHVlID0gMDsKIAkJaWYgKHFsX2dldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAmdmFsdWUpKSB7CkBAIC0xMzEsNiArMTM5LDcgQEAKIAkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgaSwgdmFsdWUpOwogCQl9CiAJfQorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIH0KIAogdm9pZCBxbF9kdW1wX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCA5ZDkyMmUyLi5hNTAwNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGw7CiAJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQlpZiAoKHFkZXYtPmxpbmtfc3RhdHVzICYgTElOS19UWVBFX01BU0spID09IExJTktfVFlQRV8xMEdCQVNFVCkgeworCWlmICgocWRldi0+bGlua19zdGF0dXMgJiBTVFNfTElOS19UWVBFX01BU0spID09CisJCQkJU1RTX0xJTktfVFlQRV8xMEdCQVNFVCkgewogCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BdXRvbmVnKTsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDkxMTkxZjcuLjE3MGQzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtNTgsOCArNTgsOCBAQAogICAgIE5FVElGX01TR19JRlVQIHwKICAgICBORVRJRl9NU0dfUlhfRVJSIHwKICAgICBORVRJRl9NU0dfVFhfRVJSIHwKLSAgICBORVRJRl9NU0dfVFhfUVVFVUVEIHwKLSAgICBORVRJRl9NU0dfSU5UUiB8IE5FVElGX01TR19UWF9ET05FIHwgTkVUSUZfTVNHX1JYX1NUQVRVUyB8CisvKiAgTkVUSUZfTVNHX1RYX1FVRVVFRCB8ICovCisvKiAgTkVUSUZfTVNHX0lOVFIgfCBORVRJRl9NU0dfVFhfRE9ORSB8IE5FVElGX01TR19SWF9TVEFUVVMgfCAqLwogLyogTkVUSUZfTVNHX1BLVERBVEEgfCAqLwogICAgIE5FVElGX01TR19IVyB8IE5FVElGX01TR19XT0wgfCAwOwogCkBAIC03NSw3ICs3NSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycV90eXBlLCAiMCA9IE1TSS1YLCAxID0gTVNJLCAyID0gTGVnYWN5LiIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcWxnZV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSURfODAxMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDAwKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KIH07CkBAIC0yNDcsOSArMjQ4LDYgQEAKIAl1MzIgb2Zmc2V0ID0gMDsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUFDX0FERFJfVFlQRV9NVUxUSV9NQUM6CiAJY2FzZSBNQUNfQUREUl9UWVBFX0NBTV9NQUM6CkBAIC0zMDgsNyArMzA2LDYgQEAKIAkJc3RhdHVzID0gLUVQRVJNOwogCX0KIGV4aXQ6Ci0JcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzIxLDkgKzMxOCw2IEBACiAJdTMyIG9mZnNldCA9IDA7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBNQUNfQUREUl9UWVBFX01VTFRJX01BQzoKIAljYXNlIE1BQ19BRERSX1RZUEVfQ0FNX01BQzoKQEAgLTMzNCw3ICszMjgsNyBAQAogCQkJICAgIChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwKIAkJCSAgICAoYWRkcls1XSk7CiAKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIkFkZGluZyAlcyBhZGRyZXNzICVwTSIKIAkJCQkiIGF0IGluZGV4ICVkIGluIHRoZSBDQU0uXG4iLAogCQkJCSgodHlwZSA9PQpAQCAtNDE1LDcgKzQwOSw2IEBACiAJCXN0YXR1cyA9IC1FUEVSTTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQyNiwxMCArNDE5LDYgQEAKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXhpdDsKLQogCXN0YXR1cyA9IHFsX3dhaXRfcmVnX3JkeShxZGV2LCBSVF9JRFgsIFJUX0lEWF9NVywgMCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBleGl0OwpAQCAtNDQxLDcgKzQzMCw2IEBACiAJCWdvdG8gZXhpdDsKIAkqdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgUlRfREFUQSk7CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC00NTMsMTMgKzQ0MSw5IEBACiBzdGF0aWMgaW50IHFsX3NldF9yb3V0aW5nX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGluZGV4LCB1MzIgbWFzaywKIAkJCSAgICAgIGludCBlbmFibGUpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsgLyogUmV0dXJuIGVycm9yIGlmIG5vIG1hc2sgbWF0Y2guICovCiAJdTMyIHZhbHVlID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0KIAlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAogCQkiJXMgJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMgbWFzayAlcyB0aGUgcm91dGluZyByZWcuXG4iLAogCQkoZW5hYmxlID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciKSwKQEAgLTU1NSw3ICs1MzksNiBAQAogCQlxbF93cml0ZTMyKHFkZXYsIFJUX0RBVEEsIGVuYWJsZSA/IG1hc2sgOiAwKTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MDQsNyArNTg3LDYgQEAKIHN0YXRpYyB1MzIgcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpCiB7CiAJdTMyIHZhciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBod19mbGFnczsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHg7CiAKIAkvKiBIVyBkaXNhYmxlcyBmb3IgdXMgaWYgd2UncmUgTVNJWCBtdWx0aSBpbnRlcnJ1cHRzIGFuZApAQCAtNjE0LDE0ICs1OTYsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAljdHggPSBxZGV2LT5pbnRyX2NvbnRleHQgKyBpbnRyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlpZiAoIWF0b21pY19yZWFkKCZjdHgtPmlycV9jbnQpKSB7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9FTiwKIAkJY3R4LT5pbnRyX2Rpc19tYXNrKTsKIAkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CiAJfQogCWF0b21pY19pbmMoJmN0eC0+aXJxX2NudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlyZXR1cm4gdmFyOwogfQogCkBAIC02NDEsNiArNjIzLDI4IEBACiAKIH0KIAorc3RhdGljIGludCBxbF92YWxpZGF0ZV9mbGFzaChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHNpemUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgc3RhdHVzLCBpOworCXUxNiBjc3VtID0gMDsKKwlfX2xlMTYgKmZsYXNoID0gKF9fbGUxNiAqKSZxZGV2LT5mbGFzaDsKKworCXN0YXR1cyA9IHN0cm5jbXAoKGNoYXIgKikmcWRldi0+Zmxhc2gsIHN0ciwgNCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgZmxhc2ggc2lnbmF0dXJlLlxuIik7CisJCXJldHVybglzdGF0dXM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJY3N1bSArPSBsZTE2X3RvX2NwdSgqZmxhc2grKyk7CisKKwlpZiAoY3N1bSkKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkiSW52YWxpZCBmbGFzaCBjaGVja3N1bSwgY3N1bSA9IDB4JS4wNHguXG4iLCBjc3VtKTsKKworCXJldHVybiBjc3VtOworfQorCiBzdGF0aWMgaW50IHFsX3JlYWRfZmxhc2hfd29yZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgaW50IG9mZnNldCwgX19sZTMyICpkYXRhKQogewogCWludCBzdGF0dXMgPSAwOwpAQCAtNjY1LDIzICs2NjksNzUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHFsX2dldF9mbGFzaF9wYXJhbXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCitzdGF0aWMgaW50IHFsX2dldF84MDAwX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwl1MzIgaSwgc2l6ZTsKKwlpbnQgc3RhdHVzOworCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CisJdTMyIG9mZnNldDsKKworCS8qIEdldCBmbGFzaCBvZmZzZXQgZm9yIGZ1bmN0aW9uIGFuZCBhZGp1c3QKKwkgKiBmb3IgZHdvcmQgYWNjZXNzLgorCSAqLworCWlmICghcWRldi0+ZnVuYykKKwkJb2Zmc2V0ID0gRlVOQzBfRkxBU0hfT0ZGU0VUIC8gc2l6ZW9mKHUzMik7CisJZWxzZQorCQlvZmZzZXQgPSBGVU5DMV9GTEFTSF9PRkZTRVQgLyBzaXplb2YodTMyKTsKKworCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MzIpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHArKykgeworCQlzdGF0dXMgPSBxbF9yZWFkX2ZsYXNoX3dvcmQocWRldiwgaStvZmZzZXQsIHApOworCQlpZiAoc3RhdHVzKSB7CisJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkVycm9yIHJlYWRpbmcgZmxhc2guXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMDAiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDAwLm1hY19hZGRyKSkgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShxZGV2LT5uZGV2LT5kZXZfYWRkciwKKwkJcWRldi0+Zmxhc2guZmxhc2hfcGFyYW1zXzgwMDAubWFjX2FkZHIsCisJCXFkZXYtPm5kZXYtPmFkZHJfbGVuKTsKKworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9GTEFTSF9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX2dldF84MDEyX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlpbnQgaTsKIAlpbnQgc3RhdHVzOwogCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CiAJdTMyIG9mZnNldCA9IDA7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MzIpOwogCiAJLyogU2Vjb25kIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBmb2xsb3cgdGhlIGZpcnN0CiAJICogZnVuY3Rpb24ncy4KIAkgKi8KIAlpZiAocWRldi0+ZnVuYykKLQkJb2Zmc2V0ID0gc2l6ZW9mKHFkZXYtPmZsYXNoKSAvIHNpemVvZih1MzIpOworCQlvZmZzZXQgPSBzaXplOwogCiAJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fRkxBU0hfTUFTSykpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihxZGV2LT5mbGFzaCkgLyBzaXplb2YodTMyKTsgaSsrLCBwKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwKyspIHsKIAkJc3RhdHVzID0gcWxfcmVhZF9mbGFzaF93b3JkKHFkZXYsIGkrb2Zmc2V0LCBwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CkBAIC02ODksNiArNzQ1LDI1IEBACiAJCX0KIAogCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMTIiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDEyLm1hY19hZGRyKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KHFkZXYtPm5kZXYtPmRldl9hZGRyLAorCQlxZGV2LT5mbGFzaC5mbGFzaF9wYXJhbXNfODAxMi5tYWNfYWRkciwKKwkJcWRldi0+bmRldi0+YWRkcl9sZW4pOworCiBleGl0OgogCXFsX3NlbV91bmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spOwogCXJldHVybiBzdGF0dXM7CkBAIC03NTksMTMgKzgzNCwyNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgcWxfODAwMF9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdGF0dXMgPSBxbF9tYl9nZXRfZndfc3RhdGUocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCS8qIFdha2UgdXAgYSB3b3JrZXIgdG8gZ2V0L3NldCB0aGUgVFgvUlggZnJhbWUgc2l6ZXMuICovCisJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyogVGFrZSB0aGUgTUFDIENvcmUgb3V0IG9mIHJlc2V0LgogICogRW5hYmxlIHN0YXRpc3RpY3MgY291bnRpbmcuCiAgKiBUYWtlIHRoZSB0cmFuc21pdHRlci9yZWNlaXZlciBvdXQgb2YgcmVzZXQuCiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIGRvbmUgaW4gdGhlIE1QSSBmaXJtd2FyZSBhdCBhCiAgKiBsYXRlciBkYXRlLgogICovCi1zdGF0aWMgaW50IHFsX3BvcnRfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3N0YXRpYyBpbnQgcWxfODAxMl9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIGRhdGE7CkBAIC04ODEsNyArOTY4LDggQEAKIC8qIFByb2Nlc3MgKHJlZmlsbCkgYSBsYXJnZSBidWZmZXIgcXVldWUuICovCiBzdGF0aWMgdm9pZCBxbF91cGRhdGVfbGJxKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKLQlpbnQgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgc3RhcnRfaWR4ID0gY2xlYW5faWR4OwogCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYzsKIAl1NjQgbWFwOwogCWludCBpOwpAQCAtOTI4LDE5ICsxMDE2LDIzIEBACiAJCXJ4X3JpbmctPmxicV9wcm9kX2lkeCArPSAxNjsKIAkJaWYgKHJ4X3JpbmctPmxicV9wcm9kX2lkeCA9PSByeF9yaW5nLT5sYnFfbGVuKQogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKKwkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OworCX0KKworCWlmIChzdGFydF9pZHggIT0gY2xlYW5faWR4KSB7CiAJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKIAkJCSJsYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKIAkJcWxfd3JpdGVfZGJfcmVnKHJ4X3JpbmctPmxicV9wcm9kX2lkeCwKIAkJCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHhfZGJfcmVnKTsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OwogCX0KIH0KIAogLyogUHJvY2VzcyAocmVmaWxsKSBhIHNtYWxsIGJ1ZmZlciBxdWV1ZS4gKi8KIHN0YXRpYyB2b2lkIHFsX3VwZGF0ZV9zYnEoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWludCBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBzdGFydF9pZHggPSBjbGVhbl9pZHg7CiAJc3RydWN0IGJxX2Rlc2MgKnNicV9kZXNjOwogCXU2NCBtYXA7CiAJaW50IGk7CkBAIC05OTAsMTMgKzEwODIsMTUgQEAKIAkJcnhfcmluZy0+c2JxX3Byb2RfaWR4ICs9IDE2OwogCQlpZiAocnhfcmluZy0+c2JxX3Byb2RfaWR4ID09IHJ4X3JpbmctPnNicV9sZW4pCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSAwOworCQlyeF9yaW5nLT5zYnFfZnJlZV9jbnQgLT0gMTY7CisJfQorCisJaWYgKHN0YXJ0X2lkeCAhPSBjbGVhbl9pZHgpIHsKIAkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAogCQkJInNicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHgpOwogCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAogCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwotCi0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCAtPSAxNjsKIAl9CiB9CiAKQEAgLTE0MTIsNiArMTUwNiw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUxNiB2bGFuX2lkID0gKGxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpICYKKwkJCUlCX01BQ19JT0NCX1JTUF9WTEFOX01BU0spCiAKIAlRTF9EVU1QX0lCX01BQ19SU1AoaWJfbWFjX3JzcCk7CiAKQEAgLTE0NjMsMTggKzE1NTksMjYgQEAKIAkJCX0KIAkJfQogCX0KKwogCXFkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlxZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQlpZiAocWRldi0+dmxncnAgJiYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiUGFzc2luZyBhIFZMQU4gcGFja2V0IHVwc3RyZWFtLlxuIik7Ci0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHFkZXYtPnZsZ3JwLAotCQkJCWxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpKTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwKKwkJcnhfcmluZy0+Y3FfaWQgLSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJgorCQkJKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSAmJgorCQkJKHZsYW5faWQgIT0gMCkpCisJCQl2bGFuX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwKKwkJCQl2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBza2IpOwogCX0gZWxzZSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJQYXNzaW5nIGEgbm9ybWFsIHBhY2tldCB1cHN0cmVhbS5cbiIpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQlpZiAocWRldi0+dmxncnAgJiYKKwkJCShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVikgJiYKKwkJCSh2bGFuX2lkICE9IDApKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KIH0KIApAQCAtMTUyMSwxNCArMTYyNSwxMiBAQAogLyogRmlyZSB1cCBhIGhhbmRsZXIgdG8gcmVzZXQgdGhlIE1QSSBwcm9jZXNzb3IuICovCiB2b2lkIHFsX3F1ZXVlX2Z3X2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9yZXNldF93b3JrLCAwKTsKIH0KIAogdm9pZCBxbF9xdWV1ZV9hc2ljX2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwogCS8qIENsZWFyIGFkYXB0ZXIgdXAgYml0IHRvIHNpZ25hbCB0aGUgcmVjb3ZlcnkKQEAgLTE1ODMsNiArMTY4NSw3IEBACiAJc3RydWN0IG9iX21hY19pb2NiX3JzcCAqbmV0X3JzcCA9IE5VTEw7CiAJaW50IGNvdW50ID0gMDsKIAorCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwogCS8qIFdoaWxlIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLiAqLwogCXdoaWxlIChwcm9kICE9IHJ4X3JpbmctPmNuc21yX2lkeCkgewogCkBAIC0xNjA4LDE1ICsxNzExLDE2IEBACiAJCXByb2QgPSBxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpOwogCX0KIAlxbF93cml0ZV9jcV9pZHgocnhfcmluZyk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocWRldi0+bmRldikgJiYgbmV0X3JzcCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbbmV0X3JzcC0+dHhxX2lkeF07CisJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW25ldF9yc3AtPnR4cV9pZHhdOworCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpICYmCisJCQkJCW5ldF9yc3AgIT0gTlVMTCkgewogCQlpZiAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnF1ZXVlX3N0b3BwZWQpICYmCiAJCSAgICAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnR4X2NvdW50KSA+ICh0eF9yaW5nLT53cV9sZW4gLyA0KSkpCiAJCQkvKgogCQkJICogVGhlIHF1ZXVlIGdvdCBzdG9wcGVkIGJlY2F1c2UgdGhlIHR4X3Jpbmcgd2FzIGZ1bGwuCiAJCQkgKiBXYWtlIGl0IHVwLCBiZWNhdXNlIGl0J3Mgbm93IGF0IGxlYXN0IDI1JSBlbXB0eS4KIAkJCSAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShxZGV2LT5uZGV2KTsKKwkJCW5ldGlmX3dha2Vfc3VicXVldWUocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTE2NzcsNyArMTc4MSw3IEBACiAJCXJ4X3JpbmctPmNxX2lkKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIHJ4X3JpbmctPmlycSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNzAzLDE5ICsxODA3LDI5IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgZW5hYmxlX2JpdCA9IE1BQ19BRERSX0U7CisJaW50IHN0YXR1czsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcKIAkgICAgKHFkZXYsICh1OCAqKSAmZW5hYmxlX2JpdCwgTUFDX0FERFJfVFlQRV9WTEFOLCB2aWQpKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgdmxhbiBhZGRyZXNzLlxuIik7CiAJfQogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgcWxfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXUzMiBlbmFibGVfYml0ID0gMDsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnCkBAIC0xNzIzLDYgKzE4MzcsNyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBjbGVhciB2bGFuIGFkZHJlc3MuXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCiB9CiAKQEAgLTE3NjIsNyArMTg3Nyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcWxnZV9tc2l4X3J4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcgPSBkZXZfaWQ7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTg0OCw3ICsxOTYzLDcgQEAKIAkJCQkJCQkgICAgICAmcnhfcmluZy0+cnhfd29yaywKIAkJCQkJCQkgICAgICAwKTsKIAkJCQllbHNlCi0JCQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwkJCQkJbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CiAJCQkJd29ya19kb25lKys7CiAJCQl9CiAJCX0KQEAgLTE5MzcsNyArMjA1Miw3IEBACiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgdHNvOwogCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwotCXUzMiB0eF9yaW5nX2lkeCA9ICh1MzIpIFFMX1RYUV9JRFgocWRldiwgc2tiKTsKKwl1MzIgdHhfcmluZ19pZHggPSAodTMyKSBza2ItPnF1ZXVlX21hcHBpbmc7CiAKIAl0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbdHhfcmluZ19pZHhdOwogCkBAIC0xOTQ4LDcgKzIwNjMsNyBAQAogCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgSU5GTywKIAkJCSIlczogc2h1dHRpbmcgZG93biB0eCBxdWV1ZSAlZCBkdSB0byBsYWNrIG9mIHJlc291cmNlcy5cbiIsCiAJCQlfX2Z1bmNfXywgdHhfcmluZ19pZHgpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHR4X3JpbmctPndxX2lkKTsKIAkJYXRvbWljX2luYygmdHhfcmluZy0+cXVldWVfc3RvcHBlZCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC0yMDI5LDYgKzIxNDQsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgUlggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbWVtc2V0KHFkZXYtPnJ4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhID0KIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwgUEFHRV9TSVpFLAogCQkJCSAmcWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2RtYSk7CkBAIC0yMDM3LDYgKzIxNTMsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgVFggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlnb3RvIGVycl93cXBfc2hfYXJlYTsKIAl9CisJbWVtc2V0KHFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXJldHVybiAwOwogCiBlcnJfd3FwX3NoX2FyZWE6CkBAIC0yMTIxLDQ3ICsyMjM4LDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBBbGxvY2F0ZSBhbmQgbWFwIGEgcGFnZSBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBsYnEuCi0gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2NfbGJxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCi0JCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOwotCXU2NCBtYXA7Ci0JX19sZTY0ICpicSA9IHJ4X3JpbmctPmxicV9iYXNlOwotCi0JZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmxicV9sZW47IGkrKykgewotCQlsYnFfZGVzYyA9ICZyeF9yaW5nLT5sYnFbaV07Ci0JCW1lbXNldChsYnFfZGVzYywgMCwgc2l6ZW9mKGxicV9kZXNjKSk7Ci0JCWxicV9kZXNjLT5hZGRyID0gYnE7Ci0JCWxicV9kZXNjLT5pbmRleCA9IGk7Ci0JCWxicV9kZXNjLT5wLmxicV9wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKHVubGlrZWx5KCFsYnFfZGVzYy0+cC5sYnFfcGFnZSkpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiZmFpbGVkIGFsbG9jX3BhZ2UoKS5cbiIpOwotCQkJZ290byBtZW1fZXJyb3I7Ci0JCX0gZWxzZSB7Ci0JCQltYXAgPSBwY2lfbWFwX3BhZ2UocWRldi0+cGRldiwKLQkJCQkJICAgbGJxX2Rlc2MtPnAubGJxX3BhZ2UsCi0JCQkJCSAgIDAsIFBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCQkiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7Ci0JCQkJZ290byBtZW1fZXJyb3I7Ci0JCQl9Ci0JCQlwY2lfdW5tYXBfYWRkcl9zZXQobGJxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCQlwY2lfdW5tYXBfbGVuX3NldChsYnFfZGVzYywgbWFwbGVuLCBQQUdFX1NJWkUpOwotCQkJKmxicV9kZXNjLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwKTsKLQkJfQotCQlicSsrOwotCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnJvcjoKLQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCXJldHVybiAtRU5PTUVNOwotfQotCiBzdGF0aWMgdm9pZCBxbF9mcmVlX3NicV9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKIAlpbnQgaTsKQEAgLTIxODQsNjMgKzIyNjAsNzIgQEAKIAl9CiB9CiAKLS8qIEFsbG9jYXRlIGFuZCBtYXAgYW4gc2tiIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIHNicS4gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2Nfc2JxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisvKiBGcmVlIGFsbCBsYXJnZSBhbmQgc21hbGwgcnggYnVmZmVycyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBjb21wbGV0aW9uIHF1ZXVlcyBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHFsX2ZyZWVfcnhfYnVmZmVycyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKKworCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOworCQlpZiAocnhfcmluZy0+bGJxKQorCQkJcWxfZnJlZV9sYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKKwkJaWYgKHJ4X3JpbmctPnNicSkKKwkJCXFsX2ZyZWVfc2JxX2J1ZmZlcnMocWRldiwgcnhfcmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07CisJCWlmIChyeF9yaW5nLT50eXBlICE9IFRYX1EpCisJCQlxbF91cGRhdGVfYnVmZmVyX3F1ZXVlcyhxZGV2LCByeF9yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2luaXRfbGJxX3Jpbmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCit7CisJaW50IGk7CisJc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOworCV9fbGU2NCAqYnEgPSByeF9yaW5nLT5sYnFfYmFzZTsKKworCW1lbXNldChyeF9yaW5nLT5sYnEsIDAsIHJ4X3JpbmctPmxicV9sZW4gKiBzaXplb2Yoc3RydWN0IGJxX2Rlc2MpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+bGJxX2xlbjsgaSsrKSB7CisJCWxicV9kZXNjID0gJnJ4X3JpbmctPmxicVtpXTsKKwkJbWVtc2V0KGxicV9kZXNjLCAwLCBzaXplb2YoKmxicV9kZXNjKSk7CisJCWxicV9kZXNjLT5pbmRleCA9IGk7CisJCWxicV9kZXNjLT5hZGRyID0gYnE7CisJCWJxKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9pbml0X3NicV9yaW5nKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewogCWludCBpOwogCXN0cnVjdCBicV9kZXNjICpzYnFfZGVzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXU2NCBtYXA7CiAJX19sZTY0ICpicSA9IHJ4X3JpbmctPnNicV9iYXNlOwogCisJbWVtc2V0KHJ4X3JpbmctPnNicSwgMCwgcnhfcmluZy0+c2JxX2xlbiAqIHNpemVvZihzdHJ1Y3QgYnFfZGVzYykpOwogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5zYnFfbGVuOyBpKyspIHsKIAkJc2JxX2Rlc2MgPSAmcnhfcmluZy0+c2JxW2ldOwotCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZihzYnFfZGVzYykpOworCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZigqc2JxX2Rlc2MpKTsKIAkJc2JxX2Rlc2MtPmluZGV4ID0gaTsKIAkJc2JxX2Rlc2MtPmFkZHIgPSBicTsKLQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LCByeF9yaW5nLT5zYnFfYnVmX3NpemUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJzbWFsbCBidWZmIGFsbG9jIGZhaWxlZCBmb3IgJWQgYnl0ZXMgYXQgaW5kZXggJWQuXG4iLAotCQkJCXJ4X3JpbmctPnNicV9idWZfc2l6ZSwgaSk7Ci0JCQlnb3RvIG1lbV9lcnI7Ci0JCX0KLQkJc2tiX3Jlc2VydmUoc2tiLCBRTEdFX1NCX1BBRCk7Ci0JCXNicV9kZXNjLT5wLnNrYiA9IHNrYjsKLQkJLyoKLQkJICogTWFwIG9ubHkgaGFsZiB0aGUgYnVmZmVyLiBCZWNhdXNlIHRoZQotCQkgKiBvdGhlciBoYWxmIG1heSBnZXQgc29tZSBkYXRhIGNvcGllZCB0byBpdAotCQkgKiB3aGVuIHRoZSBjb21wbGV0aW9uIGFycml2ZXMuCi0JCSAqLwotCQltYXAgPSBwY2lfbWFwX3NpbmdsZShxZGV2LT5wZGV2LAotCQkJCSAgICAgc2tiLT5kYXRhLAotCQkJCSAgICAgcnhfcmluZy0+c2JxX2J1Zl9zaXplIC8gMiwKLQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJQQ0kgbWFwcGluZyBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gbWVtX2VycjsKLQkJfQotCQlwY2lfdW5tYXBfYWRkcl9zZXQoc2JxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCXBjaV91bm1hcF9sZW5fc2V0KHNicV9kZXNjLCBtYXBsZW4sIHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpOwotCQkqc2JxX2Rlc2MtPmFkZHIgPSBjcHVfdG9fbGU2NChtYXApOwogCQlicSsrOwogCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnI6Ci0JcWxfZnJlZV9zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgcWxfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQkJIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF9mcmVlX3NicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCiAJLyogRnJlZSB0aGUgc21hbGwgYnVmZmVyIHF1ZXVlLiAqLwogCWlmIChyeF9yaW5nLT5zYnFfYmFzZSkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCkBAIC0yMzE4LDExICsyNDAzLDcgQEAKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCi0JCWlmIChxbF9hbGxvY19zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIlNtYWxsIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwotCQkJZ290byBlcnJfbWVtOwotCQl9CisJCXFsX2luaXRfc2JxX3JpbmcocWRldiwgcnhfcmluZyk7CiAJfQogCiAJaWYgKHJ4X3JpbmctPmxicV9sZW4pIHsKQEAgLTIzNTAsMTQgKzI0MzEsNyBAQAogCQkJZ290byBlcnJfbWVtOwogCQl9CiAKLQkJLyoKLQkJICogQWxsb2NhdGUgdGhlIGJ1ZmZlcnMuCi0JCSAqLwotCQlpZiAocWxfYWxsb2NfbGJxX2J1ZmZlcnMocWRldiwgcnhfcmluZykpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJMYXJnZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gZXJyX21lbTsKLQkJfQorCQlxbF9pbml0X2xicV9yaW5nKHFkZXYsIHJ4X3JpbmcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjQ1MSw2ICsyNTI1LDcgQEAKIAkgICAgcWRldi0+ZG9vcmJlbGxfYXJlYSArIChEQl9QQUdFX1NJWkUgKiAoMTI4ICsgcnhfcmluZy0+Y3FfaWQpKTsKIAlpbnQgZXJyID0gMDsKIAl1MTYgYnFfbGVuOworCXU2NCB0bXA7CiAKIAkvKiBTZXQgdXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgZm9yIHRoaXMgcmluZy4gKi8KIAlyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcgPSBzaGFkb3dfcmVnOwpAQCAtMjQ5Niw3ICsyNTcxLDggQEAKIAkgICAgRkxBR1NfTEk7CQkvKiBMb2FkIGlycSBkZWxheSB2YWx1ZXMgKi8KIAlpZiAocnhfcmluZy0+bGJxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTEw7CS8qIExvYWQgbGJxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+bGJxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPmxicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+bGJxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9idWZfc2l6ZSA9PSA2NTUzNikgPyAwIDoKQEAgLTI1MDUsMjUgKzI1ODEsMjYgQEAKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9sZW4gPT0gNjU1MzYpID8gMCA6CiAJCQkodTE2KSByeF9yaW5nLT5sYnFfbGVuOwogCQljcWljYi0+bGJxX2xlbiA9IGNwdV90b19sZTE2KGJxX2xlbik7Ci0JCXJ4X3JpbmctPmxicV9wcm9kX2lkeCA9IHJ4X3JpbmctPmxicV9sZW4gLSAxNjsKKwkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKIAkJcnhfcmluZy0+bGJxX2N1cnJfaWR4ID0gMDsKLQkJcnhfcmluZy0+bGJxX2NsZWFuX2lkeCA9IHJ4X3JpbmctPmxicV9wcm9kX2lkeDsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250ID0gMTY7CisJCXJ4X3JpbmctPmxicV9jbGVhbl9pZHggPSAwOworCQlyeF9yaW5nLT5sYnFfZnJlZV9jbnQgPSByeF9yaW5nLT5sYnFfbGVuOwogCX0KIAlpZiAocnhfcmluZy0+c2JxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTFM7CS8qIExvYWQgc2JxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+c2JxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPnNicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+c2JxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJY3FpY2ItPnNicV9idWZfc2l6ZSA9Ci0JCSAgICBjcHVfdG9fbGUxNigoKHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpICsgOCkgJiAweGZmZmZmZmY4KTsKKwkJICAgIGNwdV90b19sZTE2KCh1MTYpKHJ4X3JpbmctPnNicV9idWZfc2l6ZS8yKSk7CiAJCWJxX2xlbiA9IChyeF9yaW5nLT5zYnFfbGVuID09IDY1NTM2KSA/IDAgOgogCQkJKHUxNikgcnhfcmluZy0+c2JxX2xlbjsKIAkJY3FpY2ItPnNicV9sZW4gPSBjcHVfdG9fbGUxNihicV9sZW4pOwotCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSByeF9yaW5nLT5zYnFfbGVuIC0gMTY7CisJCXJ4X3JpbmctPnNicV9wcm9kX2lkeCA9IDA7CiAJCXJ4X3JpbmctPnNicV9jdXJyX2lkeCA9IDA7Ci0JCXJ4X3JpbmctPnNicV9jbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfcHJvZF9pZHg7Ci0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCA9IDE2OworCQlyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gMDsKKwkJcnhfcmluZy0+c2JxX2ZyZWVfY250ID0gcnhfcmluZy0+c2JxX2xlbjsKIAl9CiAJc3dpdGNoIChyeF9yaW5nLT50eXBlKSB7CiAJY2FzZSBUWF9ROgpAQCAtMjU2OSwyNCArMjY0NiwxMyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW52YWxpZCByeF9yaW5nLT50eXBlID0gJWQuXG4iLAogCQkJcnhfcmluZy0+dHlwZSk7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CiAJZXJyID0gcWxfd3JpdGVfY2ZnKHFkZXYsIGNxaWNiLCBzaXplb2Yoc3RydWN0IGNxaWNiKSwKIAkJCSAgIENGR19MQ1EsIHJ4X3JpbmctPmNxX2lkKTsKIAlpZiAoZXJyKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBDUUlDQi5cbiIpOwotCS8qCi0JICogQWR2YW5jZSB0aGUgcHJvZHVjZXIgaW5kZXggZm9yIHRoZSBidWZmZXIgcXVldWVzLgotCSAqLwotCXdtYigpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+bGJxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPmxicV9wcm9kX2lkeF9kYl9yZWcpOwotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI2MzMsNyArMjY5OSw3IEBACiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgdHhfcmluZy5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJTdWNjZXNzZnVsbHkgbG9hZGVkIFdRSUNCLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgV1FJQ0IuXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjc1LDcgKzI3NDEsNyBAQAogCQkgICAgKHFkZXYtPnBkZXYsIHFkZXYtPm1zaV94X2VudHJ5LCBxZGV2LT5yeF9yaW5nX2NvdW50KSkgewogCQkJc2V0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CiAJCQlxZGV2LT5pbnRyX2NvdW50ID0gcWRldi0+cnhfcmluZ19jb3VudDsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKIAkJCQlxZGV2LT5pbnRyX2NvdW50KTsKIAkJCXJldHVybjsKQEAgLTI4MDIsMTEgKzI4NjgsMTEgQEAKIAkJCWlmICh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKIAkJCQlmcmVlX2lycShxZGV2LT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsCiAJCQkJCSAmcWRldi0+cnhfcmluZ1tpXSk7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKKwkJCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgREVCVUcsCiAJCQkJCSJmcmVlaW5nIG1zaXggaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9IGVsc2UgewogCQkJCWZyZWVfaXJxKHFkZXYtPnBkZXYtPmlycSwgJnFkZXYtPnJ4X3JpbmdbMF0pOwotCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBFUlIsCisJCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLAogCQkJCQkiZnJlZWluZyBtc2kgaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9CiAJCX0KQEAgLTI4MzcsNyArMjkwMyw3IEBACiAJCQkJCWkpOwogCQkJCWdvdG8gZXJyX2lycTsKIAkJCX0gZWxzZSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLAorCQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJCSJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcyVzJXMsIHdpdGggbmFtZSAlcy5cbiIsCiAJCQkJCWksCiAJCQkJCXFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PQpAQCAtMjkxMiwxNCArMjk3OCwxNCBAQAogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2Nl9oYXNoX2tleVswXSwgNDApOwogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2NF9oYXNoX2tleVswXSwgMTYpOwogCi0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiSW5pdGlhbGl6aW5nIFJTUy5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJJbml0aWFsaXppbmcgUlNTLlxuIik7CiAKIAlzdGF0dXMgPSBxbF93cml0ZV9jZmcocWRldiwgcmljYiwgc2l6ZW9mKHJpY2IpLCBDRkdfTFIsIDApOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBSSUNCLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgUklDQi5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJTdWNjZXNzZnVsbHkgbG9hZGVkIFJJQ0IuXG4iKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yOTI5LDEzICsyOTk1LDE3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IGk7CiAKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCiAJLyogQ2xlYXIgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSByb3V0aW5nIHRhYmxlLiAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAwLCAwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIENBTSBwYWNrZXRzLlxuIik7Ci0JCQlyZXR1cm4gc3RhdHVzOworCQkJZ290byBleGl0OwogCQl9CiAJfQogCkBAIC0yOTQzLDEzICszMDEzLDEzIEBACiAJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBlcnJvciBwYWNrZXRzLlxuIik7Ci0JCXJldHVybiBzdGF0dXM7CisJCWdvdG8gZXhpdDsKIAl9CiAJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9CQ0FTVF9TTE9ULCBSVF9JRFhfQkNBU1QsIDEpOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgYnJvYWRjYXN0IHBhY2tldHMuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKKwkJZ290byBleGl0OwogCX0KIAkvKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgaW5ib3VuZCBxdWV1ZSwgdGhlbiB0dXJuIG9uIFJTUyBpbiB0aGUKIAkgKiByb3V0aW5nIGJsb2NrLgpAQCAtMjk2MCwxNyArMzAzMCwzOSBAQAogCQlpZiAoc3RhdHVzKSB7CiAJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgTUFUQ0ggUlNTIHBhY2tldHMuXG4iKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0NBTV9ISVRfU0xPVCwKIAkJCQkgICAgUlRfSURYX0NBTV9ISVQsIDEpOwotCWlmIChzdGF0dXMpIHsKKwlpZiAoc3RhdHVzKQogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBDQU0gcGFja2V0cy5cbiIpOworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAorCQkJICAgICBNQUNfQUREUl9UWVBFX0NBTV9NQUMsIHFkZXYtPmZ1bmMgKiBNQVhfQ1EpOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KKworCXN0YXR1cyA9IHFsX3JvdXRlX2luaXRpYWxpemUocWRldik7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zMDM4LDI4ICszMTMwLDI0IEBACiAJCX0KIAl9CiAKLQlzdGF0dXMgPSBxbF9wb3J0X2luaXRpYWxpemUocWRldik7Ci0JaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQorCS8qIEluaXRpYWxpemUgdGhlIHBvcnQgYW5kIHNldCB0aGUgbWF4IGZyYW1lc2l6ZS4gKi8KKwlzdGF0dXMgPSBxZGV2LT5uaWNfb3BzLT5wb3J0X2luaXRpYWxpemUocWRldik7CisgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICBRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7CisgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgfQogCi0Jc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAotCQkJCSAgICAgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jKTsKKwkvKiBTZXQgdXAgdGhlIE1BQyBhZGRyZXNzIGFuZCBmcmFtZSByb3V0aW5nIGZpbHRlci4gKi8KKwlzdGF0dXMgPSBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgbWFjIGFkZHJlc3MuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlzdGF0dXMgPSBxbF9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwotCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkvKiBTdGFydCBOQVBJIGZvciB0aGUgUlNTIHF1ZXVlcy4gKi8KIAlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCisJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCiAJCQlpKTsKIAkJbmFwaV9lbmFibGUoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CiAJfQpAQCAtMzA3MSwzNiArMzE1OSwyMyBAQAogc3RhdGljIGludCBxbF9hZGFwdGVyX3Jlc2V0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewogCXUzMiB2YWx1ZTsKLQlpbnQgbWF4X3dhaXRfdGltZTsKIAlpbnQgc3RhdHVzID0gMDsKLQlpbnQgcmVzZXRDbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsKKwkJbWF4KCh1bnNpZ25lZCBsb25nKTEsIHVzZWNzX3RvX2ppZmZpZXMoMzApKTsKIAotI2RlZmluZSBNQVhfUkVTRVRfQ05UICAgMQotaXNzdWVSZXNldDoKLQlyZXNldENudCsrOwotCVFQUklOVEsocWRldiwgSUZET1dOLCBERUJVRywgIklzc3VlIHNvZnQgcmVzZXQgdG8gY2hpcC5cbiIpOwogCXFsX3dyaXRlMzIocWRldiwgUlNUX0ZPLCAoUlNUX0ZPX0ZSIDw8IDE2KSB8IFJTVF9GT19GUik7Ci0JLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuICovCi0JbWF4X3dhaXRfdGltZSA9IDM7Ci0JUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLCAiV2FpdCAlZCBzZWNvbmRzIGZvciByZXNldCB0byBjb21wbGV0ZS5cbiIsCi0JCW1heF93YWl0X3RpbWUpOworCiAJZG8gewogCQl2YWx1ZSA9IHFsX3JlYWQzMihxZGV2LCBSU1RfRk8pOwogCQlpZiAoKHZhbHVlICYgUlNUX0ZPX0ZSKSA9PSAwKQogCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF9qaWZmaWVzKSk7CiAKLQkJc3NsZWVwKDEpOwotCX0gd2hpbGUgKCgtLW1heF93YWl0X3RpbWUpKTsKIAlpZiAodmFsdWUgJiBSU1RfRk9fRlIpIHsKIAkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKLQkJCSJTdHVjayBpbiBTb2Z0UmVzZXQ6ICBGU0NfU1I6MHglMDh4XG4iLCB2YWx1ZSk7Ci0JCWlmIChyZXNldENudCA8IE1BWF9SRVNFVF9DTlQpCi0JCQlnb3RvIGlzc3VlUmVzZXQ7Ci0JfQotCWlmIChtYXhfd2FpdF90aW1lID09IDApIHsKLQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKIAkJCSJFVElNRU9VVCEhISBlcnJvcmVkIG91dCBvZiByZXNldHRpbmcgdGhlIGNoaXAhXG4iKTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzEyMywxMiArMzE5OCwxMCBAQAogCiBzdGF0aWMgaW50IHFsX2FkYXB0ZXJfZG93bihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CiAJaW50IGksIHN0YXR1cyA9IDA7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwogCiAJLyogRG9uJ3Qga2lsbCB0aGUgcmVzZXQgd29ya2VyIHRocmVhZCBpZiB3ZQogCSAqIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZWNvdmVyeS4KQEAgLTMxMzcsNiArMzIxMCw4IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+YXNpY19yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAKIAkvKiBUaGUgZGVmYXVsdCBxdWV1ZSBhdCBpbmRleCAwIGlzIGFsd2F5cyBwcm9jZXNzZWQgaW4KIAkgKiBhIHdvcmtxdWV1ZS4KQEAgLTMxNzEsNiArMzI0Niw4IEBACiAJZm9yIChpID0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQ7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspCiAJCW5ldGlmX25hcGlfZGVsKCZxZGV2LT5yeF9yaW5nW2ldLm5hcGkpOwogCisJcWxfZnJlZV9yeF9idWZmZXJzKHFkZXYpOworCiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlzdGF0dXMgPSBxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpOwogCWlmIChzdGF0dXMpCkBAIC0zMTg0LDIxICszMjYxLDE5IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCWVyciA9IHFsX2FkYXB0ZXJfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoZXJyKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlVuYWJsZSB0byBpbml0aWFsaXplIGFkYXB0ZXIuXG4iKTsKIAkJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOwogCQlnb3RvIGVycl9pbml0OwogCX0KLQlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CiAJc2V0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOworCXFsX2FsbG9jX3J4X2J1ZmZlcnMocWRldik7CisJaWYgKChxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfaW5pdCkpCisJCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7CiAJcWxfZW5hYmxlX2ludGVycnVwdHMocWRldik7CiAJcWxfZW5hYmxlX2FsbF9jb21wbGV0aW9uX2ludGVycnVwdHMocWRldik7Ci0JaWYgKChxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfaW5pdCkpIHsKLQkJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKLQkJbmV0aWZfc3RhcnRfcXVldWUocWRldi0+bmRldik7Ci0JfQorCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMocWRldi0+bmRldik7CiAKIAlyZXR1cm4gMDsKIGVycl9pbml0OgpAQCAtMzIwNiwyOCArMzI4MSw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBxbF9jeWNsZV9hZGFwdGVyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQotewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBxbF9hZGFwdGVyX2Rvd24ocWRldik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBlcnJvcjsKLQotCXN0YXR1cyA9IHFsX2FkYXB0ZXJfdXAocWRldik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiBzdGF0dXM7Ci1lcnJvcjoKLQlRUFJJTlRLKHFkZXYsIElGVVAsIEFMRVJULAotCQkiRHJpdmVyIHVwL2Rvd24gY3ljbGUgZmFpbGVkLCBjbG9zaW5nIGRldmljZVxuIik7Ci0JcnRubF9sb2NrKCk7Ci0JZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOwotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQogc3RhdGljIHZvaWQgcWxfcmVsZWFzZV9hZGFwdGVyX3Jlc291cmNlcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlxbF9mcmVlX21lbV9yZXNvdXJjZXMocWRldik7CkBAIC0zMzA4LDYgKzMzNjEsNyBAQAogCSAqIGNvbXBsZXRpb24gaGFuZGxlciByeF9yaW5ncy4KIAkgKi8KIAlxZGV2LT5yeF9yaW5nX2NvdW50ID0gcWRldi0+dHhfcmluZ19jb3VudCArIHFkZXYtPnJzc19yaW5nX2NvdW50ICsgMTsKKwluZXRpZl9zZXRfZ3NvX21heF9zaXplKHFkZXYtPm5kZXYsIDY1NTM2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT50eF9yaW5nX2NvdW50OyBpKyspIHsKIAkJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW2ldOwpAQCAtMzQxNCw2ICszNDY4LDggQEAKIAogCWlmIChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDkwMDApIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJDaGFuZ2luZyB0byBqdW1ibyBNVFUuXG4iKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwKKwkJCQkmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmssIDApOwogCX0gZWxzZSBpZiAobmRldi0+bXR1ID09IDkwMDAgJiYgbmV3X210dSA9PSAxNTAwKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiQ2hhbmdpbmcgdG8gbm9ybWFsIE1UVS5cbiIpOwogCX0gZWxzZSBpZiAoKG5kZXYtPm10dSA9PSAxNTAwICYmIG5ld19tdHUgPT0gMTUwMCkgfHwKQEAgLTM0MzYsOCArMzQ5MiwxMSBAQAogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbF9hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7Ci0JaW50IGk7CisJaW50IGksIHN0YXR1czsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybjsKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCS8qCiAJICogU2V0IG9yIGNsZWFyIHByb21pc2N1b3VzIG1vZGUgaWYgYQpAQCAtMzQ5MywxNCArMzU1MiwxOSBAQAogCX0KIAogCWlmIChuZGV2LT5tY19jb3VudCkgeworCQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBleGl0OwogCQlmb3IgKGkgPSAwLCBtY19wdHIgPSBuZGV2LT5tY19saXN0OyBtY19wdHI7CiAJCSAgICAgaSsrLCBtY19wdHIgPSBtY19wdHItPm5leHQpCiAJCQlpZiAocWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgbWNfcHRyLT5kbWlfYWRkciwKIAkJCQkJCU1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpKSkgewogCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKIAkJCQkJIkZhaWxlZCB0byBsb2FkbXVsdGljYXN0IGFkZHJlc3MuXG4iKTsKKwkJCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CisJCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCSAgICAocWRldiwgUlRfSURYX01DQVNUX01BVENIX1NMT1QsIFJUX0lEWF9NQ0FTVF9NQVRDSCwgMSkpIHsKIAkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKQEAgLTM1MTEsMTMgKzM1NzUsMTQgQEAKIAl9CiBleGl0OgogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbnQgcWxnZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwotCWludCByZXQgPSAwOworCWludCBzdGF0dXM7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTM1MjYsMTUgKzM1OTEsMTcgQEAKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCW1lbWNweShuZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmRldi0+YWRkcl9sZW4pOwogCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7Ci0JaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcocWRldiwgKHU4ICopIG5kZXYtPmRldl9hZGRyLAotCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jKSkgey8qIFVuaWNhc3QgKi8KLQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKLQkJcmV0ID0gLTE7Ci0JfQorCXN0YXR1cyA9IHFsX3NldF9tYWNfYWRkcl9yZWcocWRldiwgKHU4ICopIG5kZXYtPmRldl9hZGRyLAorCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jICogTUFYX0NRKTsKIAlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgSFcsIEVSUiwgIkZhaWxlZCB0byBsb2FkIE1BQyBhZGRyZXNzLlxuIik7CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgcWxnZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpAQCAtMzU0Nyw5ICszNjE0LDM3IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIGFzaWNfcmVzZXRfd29yay53b3JrKTsKLQlxbF9jeWNsZV9hZGFwdGVyKHFkZXYpOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9hZGFwdGVyX2Rvd24ocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHFsX2FkYXB0ZXJfdXAocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJvcjsKKworCXJldHVybjsKK2Vycm9yOgorCVFQUklOVEsocWRldiwgSUZVUCwgQUxFUlQsCisJCSJEcml2ZXIgdXAvZG93biBjeWNsZSBmYWlsZWQsIGNsb3NpbmcgZGV2aWNlXG4iKTsKKwlydG5sX2xvY2soKTsKKwlzZXRfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CisJZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOworCXJ0bmxfdW5sb2NrKCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAxMl9uaWNfb3BzID0geworCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMTJfZmxhc2hfcGFyYW1zLAorCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDEyX3BvcnRfaW5pdGlhbGl6ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAwMF9uaWNfb3BzID0geworCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMDBfZmxhc2hfcGFyYW1zLAorCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDAwX3BvcnRfaW5pdGlhbGl6ZSwKK307CisKKwogc3RhdGljIHZvaWQgcWxfZ2V0X2JvYXJkX2luZm8oc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJcWRldi0+ZnVuYyA9CkBAIC0zNTY4LDYgKzM2NjMsMTEgQEAKIAkJcWRldi0+bWFpbGJveF9vdXQgPSBQUk9DX0FERFJfTVBJX1JJU0MgfCBQUk9DX0FERFJfRlVOQzBfTUJPOwogCX0KIAlxZGV2LT5jaGlwX3Jldl9pZCA9IHFsX3JlYWQzMihxZGV2LCBSRVZfSUQpOworCXFkZXYtPmRldmljZV9pZCA9IHFkZXYtPnBkZXYtPmRldmljZTsKKwlpZiAocWRldi0+ZGV2aWNlX2lkID09IFFMR0VfREVWSUNFX0lEXzgwMTIpCisJCXFkZXYtPm5pY19vcHMgPSAmcWxhODAxMl9uaWNfb3BzOworCWVsc2UgaWYgKHFkZXYtPmRldmljZV9pZCA9PSBRTEdFX0RFVklDRV9JRF84MDAwKQorCQlxZGV2LT5uaWNfb3BzID0gJnFsYTgwMDBfbmljX29wczsKIH0KIAogc3RhdGljIHZvaWQgcWxfcmVsZWFzZV9hbGwoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zNjYwLDI0ICszNzYwLDIwIEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlxbF9nZXRfYm9hcmRfaW5mbyhxZGV2KTsKIAlxZGV2LT5uZGV2ID0gbmRldjsKIAlxZGV2LT5wZGV2ID0gcGRldjsKKwlxbF9nZXRfYm9hcmRfaW5mbyhxZGV2KTsKIAlxZGV2LT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIGRlZmF1bHRfbXNnKTsKIAlzcGluX2xvY2tfaW5pdCgmcWRldi0+aHdfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnFkZXYtPnN0YXRzX2xvY2spOwogCiAJLyogbWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwotCWVyciA9IHFsX2dldF9mbGFzaF9wYXJhbXMocWRldik7CisJZXJyID0gcWRldi0+bmljX29wcy0+Z2V0X2ZsYXNoKHFkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBGTEFTSC5cbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLm1hY19hZGRyKSkKLQkJZ290byBlcnJfb3V0OwotCi0JbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBxZGV2LT5mbGFzaC5tYWNfYWRkciwgbmRldi0+YWRkcl9sZW4pOwogCW1lbWNweShuZGV2LT5wZXJtX2FkZHIsIG5kZXYtPmRldl9hZGRyLCBuZGV2LT5hZGRyX2xlbik7CiAKIAkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgcmluZyBzaXplcy4gKi8KQEAgLTM3MDAsNiArMzc5NiwxMCBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmssIHFsX2FzaWNfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9yZXNldF93b3JrLCBxbF9tcGlfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV93b3JrLCBxbF9tcGlfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCBxbF9tcGlfcG9ydF9jZmdfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9pZGNfd29yaywgcWxfbXBpX2lkY193b3JrKTsKKwltdXRleF9pbml0KCZxZGV2LT5tcGlfbXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmcWRldi0+aWRlX2NvbXBsZXRpb24pOwogCiAJaWYgKCFjYXJkc19mb3VuZCkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXNcbiIsIERSVl9TVFJJTkcpOwpAQCAtMzczNyw3ICszODM3LDggQEAKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHFsX2FkYXB0ZXIpKTsKKwluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBxbF9hZGFwdGVyKSwKKwkJCW1pbihNQVhfQ1BVUywgKGludCludW1fb25saW5lX2NwdXMoKSkpOwogCWlmICghbmRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM3NTcsNiArMzg1OCw3IEBACiAJCQkgIHwgTkVUSUZfRl9UU09fRUNOCiAJCQkgIHwgTkVUSUZfRl9IV19WTEFOX1RYCiAJCQkgIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUik7CisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAKIAlpZiAodGVzdF9iaXQoUUxfRE1BNjQsICZxZGV2LT5mbGFncykpCiAJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKQEAgLTM3NzksNyArMzg4MSw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAJcWxfZGlzcGxheV9kZXZfaW5mbyhuZGV2KTsKIAljYXJkc19mb3VuZCsrOwogCXJldHVybiAwOwpAQCAtMzgzMyw3ICszOTM0LDYgQEAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAJcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBmYTMxODkxLi45ZjgxYjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC0xLDYgKzEsMjYgQEAKICNpbmNsdWRlICJxbGdlLmgiCiAKLXN0YXRpYyBpbnQgcWxfcmVhZF9tYm94X3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICpkYXRhKQorc3RhdGljIHZvaWQgcWxfZGlzcGxheV9tYl9zdHMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCQlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IGk7CisJc3RhdGljIGNoYXIgKmVycl9zdHNbXSA9IHsKKwkJIkNvbW1hbmQgQ29tcGxldGUiLAorCQkiQ29tbWFuZCBOb3QgU3VwcG9ydGVkIiwKKwkJIkhvc3QgSW50ZXJmYWNlIEVycm9yIiwKKwkJIkNoZWNrc3VtIEVycm9yIiwKKwkJIlVudXNlZCBDb21wbGV0aW9uIFN0YXR1cyIsCisJCSJUZXN0IEZhaWxlZCIsCisJCSJDb21tYW5kIFBhcmFtZXRlciBFcnJvciJ9OworCisJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAiJXMuXG4iLAorCQllcnJfc3RzW21iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwMDAwZl0pOworCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAibWJveF9vdXRbJWRdID0gMHglLjA4eC5cbiIsCisJCQkJaSwgbWJjcC0+bWJveF9vdXRbaV0pOworfQorCitpbnQgcWxfcmVhZF9tcGlfcmVnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgcmVnLCB1MzIgKmRhdGEpCiB7CiAJaW50IHN0YXR1czsKIAkvKiB3YWl0IGZvciByZWcgdG8gY29tZSByZWFkeSAqLwpAQCAtMTksNiArMzksMzIgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgcWxfd3JpdGVfbXBpX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyIGRhdGEpCit7CisJaW50IHN0YXR1cyA9IDA7CisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgUFJPQ19BRERSLCBQUk9DX0FERFJfUkRZLCBQUk9DX0FERFJfRVJSKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisJLyogd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGRhdGEgcmVnICovCisJcWxfd3JpdGUzMihxZGV2LCBQUk9DX0RBVEEsIGRhdGEpOworCS8qIHRyaWdnZXIgdGhlIHdyaXRlICovCisJcWxfd3JpdGUzMihxZGV2LCBQUk9DX0FERFIsIHJlZyk7CisJLyogd2FpdCBmb3IgcmVnIHRvIGNvbWUgcmVhZHkgKi8KKwlzdGF0dXMgPSBxbF93YWl0X3JlZ19yZHkocWRldiwgUFJPQ19BRERSLCBQUk9DX0FERFJfUkRZLCBQUk9DX0FERFJfRVJSKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBxbF9zb2Z0X3Jlc2V0X21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RhdHVzID0gcWxfd3JpdGVfbXBpX3JlZyhxZGV2LCAweDAwMDAxMDEwLCAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgaW50IHFsX2dldF9tYl9zdHMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKIAlpbnQgaSwgc3RhdHVzOwpAQCAtMjgsNyArNzQsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykgewogCQlzdGF0dXMgPQotCQkgICAgcWxfcmVhZF9tYm94X3JlZyhxZGV2LCBxZGV2LT5tYWlsYm94X291dCArIGksCisJCSAgICBxbF9yZWFkX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9vdXQgKyBpLAogCQkJCSAgICAgJm1iY3AtPm1ib3hfb3V0W2ldKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZhaWxlZCBtYWlsYm94IHJlYWQuXG4iKTsKQEAgLTM5LDYzICs4NSw3NDQgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKiBXYWl0IGZvciBhIHNpbmdsZSBtYWlsYm94IGNvbW1hbmQgdG8gY29tcGxldGUuCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBxbF93YWl0X21ieF9jbWRfY21wbHQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IGNvdW50ID0gNTA7CS8qIFRPRE86IGFyYml0cmFyeSBmb3Igbm93LiAqLworCXUzMiB2YWx1ZTsKKworCWRvIHsKKwkJdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgU1RTKTsKKwkJaWYgKHZhbHVlICYgU1RTX1BJKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheShVREVMQVlfREVMQVkpOyAvKiAxMHVzICovCisJfSB3aGlsZSAoLS1jb3VudCk7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKKy8qIEV4ZWN1dGUgYSBzaW5nbGUgbWFpbGJveCBjb21tYW5kLgorICogQ2FsbGVyIG11c3QgaG9sZCBQUk9DX0FERFIgc2VtYXBob3JlLgorICovCitzdGF0aWMgaW50IHFsX2V4ZWNfbWJfY21kKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IGksIHN0YXR1czsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBwZW5kaW5nLgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KKwkgKi8KKwlpZiAocWxfcmVhZDMyKHFkZXYsIENTUikgJiBDU1JfSFJJKQorCQlyZXR1cm4gLUVJTzsKKworCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUFJPQ19SRUdfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qCisJICogRmlsbCB0aGUgb3V0Ym91bmQgbWFpbGJveGVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5pbl9jb3VudDsgaSsrKSB7CisJCXN0YXR1cyA9IHFsX3dyaXRlX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9pbiArIGksCisJCQkJCQltYmNwLT5tYm94X2luW2ldKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZW5kOworCX0KKwkvKgorCSAqIFdha2UgdXAgdGhlIE1QSSBmaXJtd2FyZS4KKwkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9TRVRfSDJSX0lOVCk7CitlbmQ6CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fUFJPQ19SRUdfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogV2UgYXJlIGJlaW5nIGFza2VkIGJ5IGZpcm13YXJlIHRvIGFjY2VwdAorICogYSBjaGFuZ2UgdG8gdGhlIHBvcnQuICBUaGlzIGlzIG9ubHkKKyAqIGEgY2hhbmdlIHRvIG1heCBmcmFtZSBzaXplcyAoVHgvUngpLCBwYXVzZQorICogcGFyYW10ZXJzLCBvciBsb29wYmFjayBtb2RlLiBXZSB3YWtlIHVwIGEgd29ya2VyCisgKiB0byBoYW5kbGVyIHByb2Nlc3NpbmcgdGhpcyBzaW5jZSBhIG1haWxib3ggY29tbWFuZAorICogd2lsbCBuZWVkIHRvIGJlIHNlbnQgdG8gQUNLIHRoZSByZXF1ZXN0LgorICovCitzdGF0aWMgaW50IHFsX2lkY19yZXFfYWVuKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJnFkZXYtPmlkY19tYmM7CisKKwlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRW50ZXIhXG4iKTsKKwkvKiBHZXQgdGhlIHN0YXR1cyBkYXRhIGFuZCBzdGFydCB1cCBhIHRocmVhZCB0bworCSAqIGhhbmRsZSB0aGUgcmVxdWVzdC4KKwkgKi8KKwltYmNwID0gJnFkZXYtPmlkY19tYmM7CisJbWJjcC0+b3V0X2NvdW50ID0gNDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJDb3VsZCBub3QgcmVhZCBNUEksIHJlc2V0dGluZyBBU0lDIVxuIik7CisJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CisJfSBlbHNlCXsKKwkJLyogQmVnaW4gcG9sbGVkIG1vZGUgZWFybHkgc28KKwkJICogd2UgZG9uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0CisJCSAqIHdoZW4gd2UgbGVhdmUgbXBpX3dvcmtlci4KKwkJICovCisJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhxZGV2LT53b3JrcXVldWUsICZxZGV2LT5tcGlfaWRjX3dvcmssIDApOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBQcm9jZXNzIGFuIGludGVyLWRldmljZSBldmVudCBjb21wbGV0aW9uLgorICogSWYgZ29vZCwgc2lnbmFsIHRoZSBjYWxsZXIncyBjb21wbGV0aW9uLgorICovCitzdGF0aWMgaW50IHFsX2lkY19jbXBsdF9hZW4oc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmcWRldi0+aWRjX21iYzsKKwltYmNwLT5vdXRfY291bnQgPSA0OworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIFJJU0MhXG4iKTsKKwkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CisJfSBlbHNlCisJCS8qIFdha2UgdXAgdGhlIHNsZWVwaW5nIG1waV9pZGNfd29yayB0aHJlYWQgdGhhdCBpcworCQkgKiB3YWl0aW5nIGZvciB0aGlzIGV2ZW50LgorCQkgKi8KKwkJY29tcGxldGUoJnFkZXYtPmlkZV9jb21wbGV0aW9uKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyB2b2lkIHFsX2xpbmtfdXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKKwlpbnQgc3RhdHVzOwogCW1iY3AtPm91dF9jb3VudCA9IDI7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkKLQkJZ290byBleGl0OworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIiVzOiBDb3VsZCBub3QgZ2V0IG1haWxib3ggc3RhdHVzLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQogCiAJcWRldi0+bGlua19zdGF0dXMgPSBtYmNwLT5tYm94X291dFsxXTsKIAlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBVcC5cbiIpOwotCVFQUklOVEsocWRldiwgRFJWLCBJTkZPLCAiTGluayBTdGF0dXMgPSAweCUuMDh4LlxuIiwgbWJjcC0+bWJveF9vdXRbMV0pOwotCWlmICghbmV0aWZfY2Fycmllcl9vayhxZGV2LT5uZGV2KSkgewotCQlRUFJJTlRLKHFkZXYsIExJTkssIElORk8sICJMaW5rIGlzIFVwLlxuIik7Ci0JCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUocWRldi0+bmRldik7CisKKwkvKiBJZiB3ZSdyZSBjb21pbmcgYmFjayBmcm9tIGFuIElEQyBldmVudAorCSAqIHRoZW4gc2V0IHVwIHRoZSBDQU0gYW5kIGZyYW1lIHJvdXRpbmcuCisJICovCisJaWYgKHRlc3RfYml0KFFMX0NBTV9SVF9TRVQsICZxZGV2LT5mbGFncykpIHsKKwkJc3RhdHVzID0gcWxfY2FtX3JvdXRlX2luaXRpYWxpemUocWRldik7CisJCWlmIChzdGF0dXMpIHsKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCWNsZWFyX2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpOwogCX0KLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCi0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1IyUENJX0lOVCk7CisKKwkvKiBRdWV1ZSB1cCBhIHdvcmtlciB0byBjaGVjayB0aGUgZnJhbWUKKwkgKiBzaXplIGluZm9ybWF0aW9uLCBhbmQgZml4IGl0IGlmIGl0J3Mgbm90CisJICogdG8gb3VyIGxpa2luZy4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJRdWV1ZSBQb3J0IENvbmZpZyBXb3JrZXIhXG4iKTsKKwkJc2V0X2JpdChRTF9QT1JUX0NGRywgJnFkZXYtPmZsYWdzKTsKKwkJLyogQmVnaW4gcG9sbGVkIG1vZGUgZWFybHkgc28KKwkJICogd2UgZG9uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0CisJCSAqIHdoZW4gd2UgbGVhdmUgbXBpX3dvcmtlciBkcGMuCisJCSAqLworCQlxbF93cml0ZTMyKHFkZXYsIElOVFJfTUFTSywgKElOVFJfTUFTS19QSSA8PCAxNikpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLAorCQkJCSZxZGV2LT5tcGlfcG9ydF9jZmdfd29yaywgMCk7CisJfQorCisJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcWxfbGlua19kb3duKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CisJaW50IHN0YXR1czsKKwogCW1iY3AtPm91dF9jb3VudCA9IDM7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7Ci0JCWdvdG8gZXhpdDsKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMaW5rIGRvd24gQUVOIGJyb2tlbiFcbiIpOworCisJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7Cit9CisKK3N0YXRpYyBpbnQgcWxfc2ZwX2luKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1czsKKworCW1iY3AtPm91dF9jb3VudCA9IDU7CisKKwlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJTRlAgaW4gQUVOIGJyb2tlbiFcbiIpOworCWVsc2UKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIlNGUCBpbnNlcnRpb24gZGV0ZWN0ZWQuXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcWxfc2ZwX291dChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQoreworCWludCBzdGF0dXM7CisKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIG91dCBBRU4gYnJva2VuIVxuIik7CisJZWxzZQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIHJlbW92YWwgZGV0ZWN0ZWQuXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcWxfYWVuX2xvc3Qoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKK3sKKwlpbnQgc3RhdHVzOworCisJbWJjcC0+b3V0X2NvdW50ID0gNjsKKworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxvc3QgQUVOIGJyb2tlbiFcbiIpOworCWVsc2UgeworCQlpbnQgaTsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxvc3QgQUVOIGRldGVjdGVkLlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJtYm94X291dFslZF0gPSAweCUuMDh4LlxuIiwKKwkJCQkJaSwgbWJjcC0+bWJveF9vdXRbaV0pOworCiAJfQogCi0JaWYgKG5ldGlmX2NhcnJpZXJfb2socWRldi0+bmRldikpIHsKLQkJUVBSSU5USyhxZGV2LCBMSU5LLCBJTkZPLCAiTGluayBpcyBEb3duLlxuIik7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKHFkZXYtPm5kZXYpOwotCX0KLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBEb3duLlxuIik7Ci0JUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkxpbmsgU3RhdHVzID0gMHglLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzFdKTsKLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCi0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1IyUENJX0lOVCk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgcWxfaW5pdF9md19kb25lKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CisJaW50IHN0YXR1czsKKwogCW1iY3AtPm91dF9jb3VudCA9IDI7CiAKLQlpZiAocWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKSkgeworCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7Ci0JCWdvdG8gZXhpdDsKKwl9IGVsc2UgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCisJCQltYmNwLT5tYm94X291dFsxXSk7CisJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOworCQlpZiAoc3RhdHVzKQorCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOwogCX0KLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgaW5pdGlhbGl6ZWQhXG4iKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgc3RhdHVzID0gMHglLjA4eC5cbiIsCi0JCW1iY3AtPm1ib3hfb3V0WzBdKTsKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCi0JCW1iY3AtPm1ib3hfb3V0WzFdKTsKLWV4aXQ6Ci0JLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCit9CisKKy8qIFByb2Nlc3MgYW4gYXN5bmMgZXZlbnQgYW5kIGNsZWFyIGl0IHVubGVzcyBpdCdzIGFuCisgKiBlcnJvciBjb25kaXRpb24uCisgKiAgVGhpcyBjYW4gZ2V0IGNhbGxlZCBpdGVyYXRpdmVseSBmcm9tIHRoZSBtcGlfd29yayB0aHJlYWQKKyAqICB3aGVuIGV2ZW50cyBhcnJpdmUgdmlhIGFuIGludGVycnVwdC4KKyAqICBJdCBhbHNvIGdldHMgY2FsbGVkIHdoZW4gYSBtYWlsYm94IGNvbW1hbmQgaXMgcG9sbGluZyBmb3IKKyAqICBpdCdzIGNvbXBsZXRpb24uICovCitzdGF0aWMgaW50IHFsX21waV9oYW5kbGVyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1czsKKwlpbnQgb3JpZ19jb3VudCA9IG1iY3AtPm91dF9jb3VudDsKKworCS8qIEp1c3QgZ2V0IG1haWxib3ggemVybyBmb3Igbm93LiAqLworCW1iY3AtPm91dF9jb3VudCA9IDE7CisJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOworCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOworCQlnb3RvIGVuZDsKKwl9CisKKwlzd2l0Y2ggKG1iY3AtPm1ib3hfb3V0WzBdKSB7CisKKwkvKiBUaGlzIGNhc2UgaXMgb25seSBhY3RpdmUgd2hlbiB3ZSBhcnJpdmUgaGVyZQorCSAqIGFzIGEgcmVzdWx0IG9mIGlzc3VpbmcgYSBtYWlsYm94IGNvbW1hbmQgdG8KKwkgKiB0aGUgZmlybXdhcmUuCisJICovCisJY2FzZSBNQl9DTURfU1RTX0lOVFJNRFQ6CisJY2FzZSBNQl9DTURfU1RTX0dPT0Q6CisJY2FzZSBNQl9DTURfU1RTX0lOVkxEX0NNRDoKKwljYXNlIE1CX0NNRF9TVFNfWEZDX0VSUjoKKwljYXNlIE1CX0NNRF9TVFNfQ1NVTV9FUlI6CisJY2FzZSBNQl9DTURfU1RTX0VSUjoKKwljYXNlIE1CX0NNRF9TVFNfUEFSQU1fRVJSOgorCQkvKiBXZSBjYW4gb25seSBnZXQgbWFpbGJveCBzdGF0dXMgaWYgd2UncmUgcG9sbGluZyBmcm9tIGFuCisJCSAqIHVuZmluaXNoZWQgY29tbWFuZC4gIEdldCB0aGUgcmVzdCBvZiB0aGUgc3RhdHVzIGRhdGEgYW5kCisJCSAqIHJldHVybiBiYWNrIHRvIHRoZSBjYWxsZXIuCisJCSAqIFdlIG9ubHkgZW5kIHVwIGhlcmUgd2hlbiB3ZSdyZSBwb2xsaW5nIGZvciBhIG1haWxib3gKKwkJICogY29tbWFuZCBjb21wbGV0aW9uLgorCQkgKi8KKwkJbWJjcC0+b3V0X2NvdW50ID0gb3JpZ19jb3VudDsKKwkJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIFdlIGFyZSBiZWluZyBhc2tlZCBieSBmaXJtd2FyZSB0byBhY2NlcHQKKwkgKiBhIGNoYW5nZSB0byB0aGUgcG9ydC4gIFRoaXMgaXMgb25seQorCSAqIGEgY2hhbmdlIHRvIG1heCBmcmFtZSBzaXplcyAoVHgvUngpLCBwYXVzZQorCSAqIHBhcmFtdGVycywgb3IgbG9vcGJhY2sgbW9kZS4KKwkgKi8KKwljYXNlIEFFTl9JRENfUkVROgorCQlzdGF0dXMgPSBxbF9pZGNfcmVxX2FlbihxZGV2KTsKKwkJYnJlYWs7CisKKwkvKiBQcm9jZXNzIGFuZCBpbmJvdW5kIElEQyBldmVudC4KKwkgKiBUaGlzIHdpbGwgaGFwcGVuIHdoZW4gd2UncmUgdHJ5aW5nIHRvCisJICogY2hhbmdlIHR4L3J4IG1heCBmcmFtZSBzaXplLCBjaGFuZ2UgcGF1c2UKKwkgKiBwYXJhbXRlcnMgb3IgbG9vcGJhY2sgbW9kZS4KKwkgKi8KKwljYXNlIEFFTl9JRENfQ01QTFQ6CisJY2FzZSBBRU5fSURDX0VYVDoKKwkJc3RhdHVzID0gcWxfaWRjX2NtcGx0X2FlbihxZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9MSU5LX1VQOgorCQlxbF9saW5rX3VwKHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWNhc2UgQUVOX0xJTktfRE9XTjoKKwkJcWxfbGlua19kb3duKHFkZXYsIG1iY3ApOworCQlicmVhazsKKworCWNhc2UgQUVOX0ZXX0lOSVRfRE9ORToKKwkJLyogSWYgd2UncmUgaW4gcHJvY2VzcyBvbiBleGVjdXRpbmcgdGhlIGZpcm13YXJlLAorCQkgKiB0aGVuIGNvbnZlcnQgdGhlIHN0YXR1cyB0byBub3JtYWwgbWFpbGJveCBzdGF0dXMuCisJCSAqLworCQlpZiAobWJjcC0+bWJveF9pblswXSA9PSBNQl9DTURfRVhfRlcpIHsKKwkJCW1iY3AtPm91dF9jb3VudCA9IG9yaWdfY291bnQ7CisJCQlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOworCQkJbWJjcC0+bWJveF9vdXRbMF0gPSBNQl9DTURfU1RTX0dPT0Q7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCXFsX2luaXRfZndfZG9uZShxZGV2LCBtYmNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9BRU5fU0ZQX0lOOgorCQlxbF9zZnBfaW4ocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJY2FzZSBBRU5fQUVOX1NGUF9PVVQ6CisJCXFsX3NmcF9vdXQocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJLyogVGhpcyBldmVudCBjYW4gYXJyaXZlIGF0IGJvb3QgdGltZSBvciBhZnRlciBhbgorCSAqIE1QSSByZXNldCBpZiB0aGUgZmlybXdhcmUgZmFpbGVkIHRvIGluaXRpYWxpemUuCisJICovCisJY2FzZSBBRU5fRldfSU5JVF9GQUlMOgorCQkvKiBJZiB3ZSdyZSBpbiBwcm9jZXNzIG9uIGV4ZWN1dGluZyB0aGUgZmlybXdhcmUsCisJCSAqIHRoZW4gY29udmVydCB0aGUgc3RhdHVzIHRvIG5vcm1hbCBtYWlsYm94IHN0YXR1cy4KKwkJICovCisJCWlmIChtYmNwLT5tYm94X2luWzBdID09IE1CX0NNRF9FWF9GVykgeworCQkJbWJjcC0+b3V0X2NvdW50ID0gb3JpZ19jb3VudDsKKwkJCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CisJCQltYmNwLT5tYm94X291dFswXSA9IE1CX0NNRF9TVFNfRVJSOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkZpcm13YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9TWVNfRVJSOgorCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIlN5c3RlbSBFcnJvci5cbiIpOworCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwkJc3RhdHVzID0gLUVJTzsKKwkJYnJlYWs7CisKKwljYXNlIEFFTl9BRU5fTE9TVDoKKwkJcWxfYWVuX2xvc3QocWRldiwgbWJjcCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJVbnN1cHBvcnRlZCBBRSAlLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzBdKTsKKwkJLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCisJfQorZW5kOgogCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEV4ZWN1dGUgYSBzaW5nbGUgbWFpbGJveCBjb21tYW5kLgorICogbWJjcCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdTMyLiAgRWFjaAorICogZWxlbWVudCBpbiB0aGUgYXJyYXkgY29udGFpbnMgdGhlIHZhbHVlIGZvciBpdCdzCisgKiByZXNwZWN0aXZlIG1haWxib3ggcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgcWxfbWFpbGJveF9jb21tYW5kKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IHN0YXR1cywgY291bnQ7CisKKwltdXRleF9sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOworCisJLyogQmVnaW4gcG9sbGVkIG1vZGUgZm9yIE1QSSAqLworCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CisKKwkvKiBMb2FkIHRoZSBtYWlsYm94IHJlZ2lzdGVycyBhbmQgd2FrZSB1cCBNUEkgUklTQy4gKi8KKwlzdGF0dXMgPSBxbF9leGVjX21iX2NtZChxZGV2LCBtYmNwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVuZDsKKworCisJLyogSWYgd2UncmUgZ2VuZXJhdGluZyBhIHN5c3RlbSBlcnJvciwgdGhlbiB0aGVyZSdzIG5vdGhpbmcKKwkgKiB0byB3YWl0IGZvci4KKwkgKi8KKwlpZiAobWJjcC0+bWJveF9pblswXSA9PSBNQl9DTURfTUFLRV9TWVNfRVJSKQorCQlnb3RvIGVuZDsKKworCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBXZSBsb29wCisJICogaGVyZSBiZWNhdXNlIHNvbWUgQUVOIG1pZ2h0IGFycml2ZSB3aGlsZQorCSAqIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBtYWlsYm94IGNvbW1hbmQgdG8KKwkgKiBjb21wbGV0ZS4gSWYgbW9yZSB0aGFuIDUgYXJyaXZlIHRoZW4gd2UgY2FuCisJICogYXNzdW1lIHNvbWV0aGluZyBpcyB3cm9uZy4gKi8KKwljb3VudCA9IDU7CisJZG8geworCQkvKiBXYWl0IGZvciB0aGUgaW50ZXJydXB0IHRvIGNvbWUgaW4uICovCisJCXN0YXR1cyA9IHFsX3dhaXRfbWJ4X2NtZF9jbXBsdChxZGV2KTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZW5kOworCisJCS8qIFByb2Nlc3MgdGhlIGV2ZW50LiAgSWYgaXQncyBhbiBBRU4sIGl0CisJCSAqIHdpbGwgYmUgaGFuZGxlZCBpbi1saW5lIG9yIGEgd29ya2VyCisJCSAqIHdpbGwgYmUgc3Bhd25lZC4gSWYgaXQncyBvdXIgY29tcGxldGlvbgorCQkgKiB3ZSB3aWxsIGNhdGNoIGl0IGJlbG93LgorCQkgKi8KKwkJc3RhdHVzID0gcWxfbXBpX2hhbmRsZXIocWRldiwgbWJjcCk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVuZDsKKworCQkvKiBJdCdzIGVpdGhlciB0aGUgY29tcGxldGlvbiBmb3Igb3VyIG1haWxib3gKKwkJICogY29tbWFuZCBjb21wbGV0ZSBvciBhbiBBRU4uICBJZiBpdCdzIG91cgorCQkgKiBjb21wbGV0aW9uIHRoZW4gZ2V0IG91dC4KKwkJICovCisJCWlmICgoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgPT0KKwkJCQkJTUJfQ01EX1NUU19HT09EKSB8fAorCQkJKChtYmNwLT5tYm94X291dFswXSAmIDB4MDAwMGYwMDApID09CisJCQkJCU1CX0NNRF9TVFNfSU5UUk1EVCkpCisJCQlicmVhazsKKwl9IHdoaWxlICgtLWNvdW50KTsKKworCWlmICghY291bnQpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0ZS5cbiIpOworCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBOb3cgd2UgY2FuIGNsZWFyIHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uCisJICogYW5kIGxvb2sgYXQgb3VyIHN0YXR1cy4KKwkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9DTFJfUjJQQ0lfSU5UKTsKKworCWlmICgoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgIT0KKwkJCQkJTUJfQ01EX1NUU19HT09EKSAmJgorCQkoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgIT0KKwkJCQkJTUJfQ01EX1NUU19JTlRSTURUKSkgeworCQlxbF9kaXNwbGF5X21iX3N0cyhxZGV2LCBtYmNwKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOworCS8qIEVuZCBwb2xsZWQgbW9kZSBmb3IgTVBJICovCisJcWxfd3JpdGUzMihxZGV2LCBJTlRSX01BU0ssIChJTlRSX01BU0tfUEkgPDwgMTYpIHwgSU5UUl9NQVNLX1BJKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgZnVuY3Rpb25hbCBzdGF0ZSBmb3IgTVBJIGZpcm13YXJlLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBxbF9tYl9nZXRfZndfc3RhdGUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXMgPSAwOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMTsKKwltYmNwLT5vdXRfY291bnQgPSAyOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9HRVRfRldfU1RBVEU7CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgR2V0IEZpcm13YXJlIFN0YXRlLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCisJLyogSWYgYml0IHplcm8gaXMgc2V0IGluIG1ieCAxIHRoZW4gdGhlIGZpcm13YXJlIGlzCisJICogcnVubmluZywgYnV0IG5vdCBpbml0aWFsaXplZC4gIFRoaXMgc2hvdWxkIG5ldmVyCisJICogaGFwcGVuLgorCSAqLworCWlmIChtYmNwLT5tYm94X291dFsxXSAmIDEpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGaXJtd2FyZSB3YWl0aW5nIGZvciBpbml0aWFsaXphdGlvbi5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFNlbmQgYW5kIEFDSyBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlIHRvCisgKiBsZXQgaXQgY29udGludWUgd2l0aCB0aGUgY2hhbmdlLgorICovCitpbnQgcWxfbWJfaWRjX2FjayhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7CisJaW50IHN0YXR1cyA9IDA7CisKKwltZW1zZXQobWJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtYm94X3BhcmFtcykpOworCisJbWJjcC0+aW5fY291bnQgPSA1OworCW1iY3AtPm91dF9jb3VudCA9IDE7CisKKwltYmNwLT5tYm94X2luWzBdID0gTUJfQ01EX0lEQ19BQ0s7CisJbWJjcC0+bWJveF9pblsxXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbMV07CisJbWJjcC0+bWJveF9pblsyXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbMl07CisJbWJjcC0+bWJveF9pblszXSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbM107CisJbWJjcC0+bWJveF9pbls0XSA9IHFkZXYtPmlkY19tYmMubWJveF9vdXRbNF07CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgSURDIEFDSyBzZW5kLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEdldCBsaW5rIHNldHRpbmdzIGFuZCBtYXhpbXVtIGZyYW1lIHNpemUgc2V0dGluZ3MKKyAqIGZvciB0aGUgY3VycmVudCBwb3J0LgorICogTW9zdCBsaWtlbHkgd2lsbCBibG9jay4KKyAqLworc3RhdGljIGludCBxbF9tYl9zZXRfcG9ydF9jZmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXMgPSAwOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMzsKKwltYmNwLT5vdXRfY291bnQgPSAxOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9TRVRfUE9SVF9DRkc7CisJbWJjcC0+bWJveF9pblsxXSA9IHFkZXYtPmxpbmtfY29uZmlnOworCW1iY3AtPm1ib3hfaW5bMl0gPSBxZGV2LT5tYXhfZnJhbWVfc2l6ZTsKKworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19JTlRSTURUKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiUG9ydCBDb25maWcgc2VudCwgd2FpdCBmb3IgSURDLlxuIik7CisJfSBlbHNlCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgU2V0IFBvcnQgQ29uZmlndXJhdGlvbi5cbiIpOworCQlzdGF0dXMgPSAtRUlPOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBHZXQgbGluayBzZXR0aW5ncyBhbmQgbWF4aW11bSBmcmFtZSBzaXplIHNldHRpbmdzCisgKiBmb3IgdGhlIGN1cnJlbnQgcG9ydC4KKyAqIE1vc3QgbGlrZWx5IHdpbGwgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgcWxfbWJfZ2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzID0gMDsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDE7CisJbWJjcC0+b3V0X2NvdW50ID0gMzsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfR0VUX1BPUlRfQ0ZHOworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmFpbGVkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9IGVsc2UJeworCQlRUFJJTlRLKHFkZXYsIERSViwgREVCVUcsCisJCQkiUGFzc2VkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJcWRldi0+bGlua19jb25maWcgPSBtYmNwLT5tYm94X291dFsxXTsKKwkJcWRldi0+bWF4X2ZyYW1lX3NpemUgPSBtYmNwLT5tYm94X291dFsyXTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogSURDIC0gSW50ZXIgRGV2aWNlIENvbW11bmljYXRpb24uLi4KKyAqIFNvbWUgZmlybXdhcmUgY29tbWFuZHMgcmVxdWlyZSBjb25zZW50IG9mIGFkamFjZW50IEZDT0UKKyAqIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgdGhlIE9LLCBvciBhCisgKiBjb3VudGVyLXJlcXVlc3QgZm9yIGEgbGl0dGxlIG1vcmUgdGltZS5pCisgKiBUaGUgZmlybXdhcmUgd2lsbCBjb21wbGV0ZSB0aGUgcmVxdWVzdCBpZiB0aGUgb3RoZXIKKyAqIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzcG9uZC4KKyAqLworc3RhdGljIGludCBxbF9pZGNfd2FpdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgc3RhdHVzID0gLUVUSU1FRE9VVDsKKwlsb25nIHdhaXRfdGltZSA9IDEgKiBIWjsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmcWRldi0+aWRjX21iYzsKKwlkbyB7CisJCS8qIFdhaXQgaGVyZSBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUKKwkJICogdmlhIHRoZSBJREMgcHJvY2Vzcy4KKwkJICovCisJCXdhaXRfdGltZSA9CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnFkZXYtPmlkZV9jb21wbGV0aW9uLAorCQkJCQkJCXdhaXRfdGltZSk7CisJCWlmICghd2FpdF90aW1lKSB7CisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJCSJJREMgVGltZW91dC5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogTm93IGV4YW1pbmUgdGhlIHJlc3BvbnNlIGZyb20gdGhlIElEQyBwcm9jZXNzLgorCQkgKiBXZSBtaWdodCBoYXZlIGEgZ29vZCBjb21wbGV0aW9uIG9yIGEgcmVxdWVzdCBmb3IKKwkJICogbW9yZSB3YWl0IHRpbWUuCisJCSAqLworCQlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gQUVOX0lEQ19FWFQpIHsKKwkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkJIklEQyBUaW1lIEV4dGVuc2lvbiBmcm9tIGZ1bmN0aW9uLlxuIik7CisJCQl3YWl0X3RpbWUgKz0gKG1iY3AtPm1ib3hfb3V0WzFdID4+IDgpICYgMHgwMDAwMDAwZjsKKwkJfSBlbHNlIGlmIChtYmNwLT5tYm94X291dFswXSA9PSBBRU5fSURDX0NNUExUKSB7CisJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJCSJJREMgU3VjY2Vzcy5cbiIpOworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCQkiSURDOiBJbnZhbGlkIFN0YXRlIDB4JS4wNHguXG4iLAorCQkJCW1iY3AtPm1ib3hfb3V0WzBdKTsKKwkJCXN0YXR1cyA9IC1FSU87CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHdhaXRfdGltZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBBUEkgY2FsbGVkIGluIHdvcmsgdGhyZWFkIGNvbnRleHQgdG8gc2V0IG5ldyBUWC9SWAorICogbWF4aW11bSBmcmFtZSBzaXplIHZhbHVlcyB0byBtYXRjaCBNVFUuCisgKi8KK3N0YXRpYyBpbnQgcWxfc2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisJc3RhdHVzID0gcWxfbWJfc2V0X3BvcnRfY2ZnKHFkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gcWxfaWRjX3dhaXQocWRldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgd29ya2VyIHRocmVhZHMgdGhhdCBwcm9jZXNzCisgKiBldmVudHMgdGhhdCBtYXkgc2xlZXAgd2FpdGluZyBmb3IgY29tcGxldGlvbi4KKyAqLworCisvKiBUaGlzIHRocmVhZCBnZXRzIHRoZSBtYXhpbXVtIFRYIGFuZCBSWCBmcmFtZSBzaXplIHZhbHVlcworICogZnJvbSB0aGUgZmlybXdhcmUgYW5kLCBpZiBuZWNlc3NhcnksIGNoYW5nZXMgdGhlbSB0byBtYXRjaAorICogdGhlIE1UVSBzZXR0aW5nLgorICovCit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxfYWRhcHRlciwgbXBpX3BvcnRfY2ZnX3dvcmsud29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9tYl9nZXRfcG9ydF9jZmcocWRldik7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkJ1ZzogRmFpbGVkIHRvIGdldCBwb3J0IGNvbmZpZyBkYXRhLlxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChuZGV2LT5tdHUgPD0gMjUwMCkKKwkJZ290byBlbmQ7CisJZWxzZSBpZiAocWRldi0+bGlua19jb25maWcgJiBDRkdfSlVNQk9fRlJBTUVfU0laRSAmJgorCQkJcWRldi0+bWF4X2ZyYW1lX3NpemUgPT0KKwkJCUNGR19ERUZBVUxUX01BWF9GUkFNRV9TSVpFKQorCQlnb3RvIGVuZDsKKworCXFkZXYtPmxpbmtfY29uZmlnIHw9CUNGR19KVU1CT19GUkFNRV9TSVpFOworCXFkZXYtPm1heF9mcmFtZV9zaXplID0gQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkU7CisJc3RhdHVzID0gcWxfc2V0X3BvcnRfY2ZnKHFkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IEZhaWxlZCB0byBzZXQgcG9ydCBjb25maWcgZGF0YS5cbiIpOworCQlnb3RvIGVycjsKKwl9CitlbmQ6CisJY2xlYXJfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpOworCXJldHVybjsKK2VycjoKKwlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKKwlnb3RvIGVuZDsKK30KKworLyogUHJvY2VzcyBhbiBpbnRlci1kZXZpY2UgcmVxdWVzdC4gIFRoaXMgaXMgaXNzdWVzIGJ5CisgKiB0aGUgZmlybXdhcmUgaW4gcmVzcG9uc2UgdG8gYW5vdGhlciBmdW5jdGlvbiByZXF1ZXN0aW5nCisgKiBhIGNoYW5nZSB0byB0aGUgcG9ydC4gV2Ugc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSBhIGNoYW5nZQorICogaGFzIGJlZW4gbWFkZSBhbmQgdGhlbiBzZW5kIGEgbWFpbGJveCBjb21tYW5kIEFDS2luZworICogdGhlIGNoYW5nZSByZXF1ZXN0LgorICovCit2b2lkIHFsX21waV9pZGNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9pZGNfd29yay53b3JrKTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZxZGV2LT5pZGNfbWJjOworCXUzMiBhZW47CisKKwlhZW4gPSBtYmNwLT5tYm94X291dFsxXSA+PiAxNjsKKworCXN3aXRjaCAoYWVuKSB7CisJZGVmYXVsdDoKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IFVuaGFuZGxlZCBJREMgYWN0aW9uLlxuIik7CisJCWJyZWFrOworCWNhc2UgTUJfQ01EX1BPUlRfUkVTRVQ6CisJY2FzZSBNQl9DTURfU0VUX1BPUlRfQ0ZHOgorCWNhc2UgTUJfQ01EX1NUT1BfRlc6CisJCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOworCQkvKiBTaWduYWwgdGhlIHJlc3VsdGluZyBsaW5rIHVwIEFFTgorCQkgKiB0aGF0IHRoZSBmcmFtZSByb3V0aW5nIGFuZCBtYWMgYWRkcgorCQkgKiBuZWVkcyB0byBiZSBzZXQuCisJCSAqICovCisJCXNldF9iaXQoUUxfQ0FNX1JUX1NFVCwgJnFkZXYtPmZsYWdzKTsKKwkJc3RhdHVzID0gcWxfbWJfaWRjX2FjayhxZGV2KTsKKwkJaWYgKHN0YXR1cykgeworCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJCdWc6IE5vIHBlbmRpbmcgSURDIVxuIik7CisJCX0KKwl9CiB9CiAKIHZvaWQgcWxfbXBpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTA0LDM3ICs4MzEsMTYgQEAKIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxbF9hZGFwdGVyLCBtcGlfd29yay53b3JrKTsKIAlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOwogCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7Ci0JbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCW11dGV4X2xvY2soJnFkZXYtPm1waV9tdXRleCk7CiAKIAl3aGlsZSAocWxfcmVhZDMyKHFkZXYsIFNUUykgJiBTVFNfUEkpIHsKLQkJaWYgKHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCkpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKLQkJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7Ci0JCX0KLQotCQlzd2l0Y2ggKG1iY3AtPm1ib3hfb3V0WzBdKSB7Ci0JCWNhc2UgQUVOX0xJTktfVVA6Ci0JCQlxbF9saW5rX3VwKHFkZXYsIG1iY3ApOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUVOX0xJTktfRE9XTjoKLQkJCXFsX2xpbmtfZG93bihxZGV2LCBtYmNwKTsKLQkJCWJyZWFrOwotCQljYXNlIEFFTl9GV19JTklUX0RPTkU6Ci0JCQlxbF9pbml0X2Z3X2RvbmUocWRldiwgbWJjcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBNQl9DTURfU1RTX0dPT0Q6Ci0JCQlicmVhazsKLQkJY2FzZSBBRU5fRldfSU5JVF9GQUlMOgotCQljYXNlIEFFTl9TWVNfRVJSOgotCQljYXNlIE1CX0NNRF9TVFNfRVJSOgotCQkJcWxfcXVldWVfZndfZXJyb3IocWRldik7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBDbGVhciB0aGUgTVBJIGZpcm13YXJlIHN0YXR1cy4gKi8KLQkJCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SMlBDSV9JTlQpOwotCQkJYnJlYWs7Ci0JCX0KKwkJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKwkJbWJjcC0+b3V0X2NvdW50ID0gMTsKKwkJcWxfbXBpX2hhbmRsZXIocWRldiwgbWJjcCk7CiAJfQorCisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOwogCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCAwKTsKIH0KIApAQCAtMTQyLDkgKzg0OCw4IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9yZXNldF93b3JrLndvcmspOwotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCSJFbnRlciwgcWRldiA9ICVwLi5cbiIsIHFkZXYpOwotCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX1NFVF9SU1QpOwotCW1zbGVlcCg1MCk7Ci0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1JTVCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfaWRjX3dvcmspOworCXFsX3NvZnRfcmVzZXRfbXBpX3Jpc2MocWRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yNjA0MC5jIGIvZHJpdmVycy9uZXQvcjYwNDAuYwppbmRleCBiMmRjZGI1Li4wYTM3Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yNjA0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKQEAgLTQ5LDEyICs0OSwxMiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicjYwNDAiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIxIgotI2RlZmluZSBEUlZfUkVMREFURQkiMDlKYW4yMDA5IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yMiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjI1TWFyMjAwOSIKIAogLyogUEhZIENISVAgQWRkcmVzcyAqLwogI2RlZmluZSBQSFkxX0FERFIJMQkvKiBGb3IgTUFDMSAqLwotI2RlZmluZSBQSFkyX0FERFIJMgkvKiBGb3IgTUFDMiAqLworI2RlZmluZSBQSFkyX0FERFIJMwkvKiBGb3IgTUFDMiAqLwogI2RlZmluZSBQSFlfTU9ERQkweDMxMDAJLyogUEhZIENISVAgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBQSFlfQ0FQCQkweDAxRTEJLyogUEhZIENISVAgUmVnaXN0ZXIgNCAqLwogCkBAIC00ODQsMTIgKzQ4NCwxMiBAQAogCS8qIEZyZWUgRGVzY3JpcHRvciBtZW1vcnkgKi8KIAlpZiAobHAtPnJ4X3JpbmcpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9ERVNDX1NJWkUsIGxwLT5yeF9yaW5nLCBscC0+cnhfcmluZ19kbWEpOwotCQlscC0+cnhfcmluZyA9IDA7CisJCWxwLT5yeF9yaW5nID0gTlVMTDsKIAl9CiAKIAlpZiAobHAtPnR4X3JpbmcpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBUWF9ERVNDX1NJWkUsIGxwLT50eF9yaW5nLCBscC0+dHhfcmluZ19kbWEpOwotCQlscC0+dHhfcmluZyA9IDA7CisJCWxwLT50eF9yaW5nID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTY3Niw3ICs2NzYsNyBAQAogCXdvcmtfZG9uZSA9IHI2MDQwX3J4KGRldiwgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIEVuYWJsZSBSWCBpbnRlcnJ1cHQgKi8KIAkJaW93cml0ZTE2KGlvcmVhZDE2KGlvYWRkciArIE1JRVIpIHwgUlhfSU5UUywgaW9hZGRyICsgTUlFUik7CiAJfQpAQCAtNzEzLDcgKzcxMyw3IEBACiAKIAkJLyogTWFzayBvZmYgUlggaW50ZXJydXB0ICovCiAJCW1pc3IgJj0gflJYX0lOVFM7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAl9CiAKIAkvKiBUWCBpbnRlcnJ1cHQgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNDNmZWRiOS4uMDZjNTM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0zNTkzLDggKzM1OTMsOCBAQAogCQlSVExfVzE2KEludHJNYXNrLCB0cC0+aW50cl9ldmVudCAmIH50cC0+bmFwaV9ldmVudCk7CiAJCXRwLT5pbnRyX21hc2sgPSB+dHAtPm5hcGlfZXZlbnQ7CiAKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpKQotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCQllbHNlIGlmIChuZXRpZl9tc2dfaW50cih0cCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcnJ1cHQgJTA0eCBpbiBwb2xsXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKQEAgLTM2MTUsNyArMzYxNSw3IEBACiAJcnRsODE2OV90eF9pbnRlcnJ1cHQoZGV2LCB0cCwgaW9hZGRyKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXRwLT5pbnRyX21hc2sgPSAweGZmZmY7CiAJCS8qCiAJCSAqIDIwMDQwNDI2OiB0aGUgYmFycmllciBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgYnV0IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcmlvbmV0LmMgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwppbmRleCBhNmZkMjdhLi5lYzU5ZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yaW9uZXQuYworKysgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwpAQCAtMzYyLDggKzM2Miw3IEBACiAJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUklPTkVUX1JYX1JJTkdfU0laRTsgaSsrKQotCQlpZiAocm5ldC0+cnhfc2tiW2ldKQotCQkJa2ZyZWVfc2tiKHJuZXQtPnJ4X3NrYltpXSk7CisJCWtmcmVlX3NrYihybmV0LT5yeF9za2JbaV0pOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgJnJpb25ldF9wZWVycywgbm9kZSkgewogCQlpZiAocmlvbmV0X2FjdGl2ZVtwZWVyLT5yZGV2LT5kZXN0aWRdKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggZjVjNTdjMC4uMTY4NjhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtMjg1Miw3ICsyODUyLDcgQEAKIAlzMmlvX2Noa19yeF9idWZmZXJzKG5pYywgcmluZyk7CiAKIAlpZiAocGt0c19wcm9jZXNzZWQgPCBidWRnZXRfb3JnKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKlJlIEVuYWJsZSBNU0ktUnggVmVjdG9yKi8KIAkJYWRkciA9ICh1OCBfX2lvbWVtICopJmJhcjAtPnhtc2lfbWFza19yZWc7CiAJCWFkZHIgKz0gNyAtIHJpbmctPnJpbmdfbm87CkBAIC0yODg5LDcgKzI4ODksNyBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChwa3RzX3Byb2Nlc3NlZCA8IGJ1ZGdldF9vcmcpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIFJlIGVuYWJsZSB0aGUgUnggaW50ZXJydXB0cyBmb3IgdGhlIHJpbmcgKi8KIAkJd3JpdGVxKDAsICZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCQlyZWFkbCgmYmFyMC0+cnhfdHJhZmZpY19tYXNrKTsKQEAgLTM4NjIsNyArMzg2Miw3IEBACiAJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5pYy0+cGRldiwgbmljLT5lbnRyaWVzLCBuaWMtPm51bV9lbnRyaWVzKTsKIAkvKiBXZSBmYWlsIGluaXQgaWYgZXJyb3Igb3Igd2UgZ2V0IGxlc3MgdmVjdG9ycyB0aGFuIG1pbiByZXF1aXJlZCAqLwogCWlmIChyZXQpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRW5hYmxpbmcgTVNJWCBmYWlsZWRcbiIsIG5pYy0+ZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBFbmFibGluZyBNU0ktWCBmYWlsZWRcbiIpOwogCQlrZnJlZShuaWMtPmVudHJpZXMpOwogCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkCiAJCQkrPSAobmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOwpAQCAtNDM0Miw3ICs0MzQyLDcgQEAKIAkJdmFsOCA9IChyaW5nLT5yaW5nX25vID09IDApID8gMHg3ZiA6IDB4ZmY7CiAJCXdyaXRlYih2YWw4LCBhZGRyKTsKIAkJdmFsOCA9IHJlYWRiKGFkZHIpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmcmluZy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnJpbmctPm5hcGkpOwogCX0gZWxzZSB7CiAJCXJ4X2ludHJfaGFuZGxlcihyaW5nLCAwKTsKIAkJczJpb19jaGtfcnhfYnVmZmVycyhzcCwgcmluZyk7CkBAIC00Nzg5LDcgKzQ3ODksNyBAQAogCiAJCWlmIChjb25maWctPm5hcGkpIHsKIAkJCWlmIChyZWFzb24gJiBHRU5fSU5UUl9SWFRSQUZGSUMpIHsKLQkJCQluZXRpZl9yeF9zY2hlZHVsZSgmc3AtPm5hcGkpOworCQkJCW5hcGlfc2NoZWR1bGUoJnNwLT5uYXBpKTsKIAkJCQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCQkJCXdyaXRlcShTMklPX01JTlVTX09ORSwgJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKIAkJCQlyZWFkbCgmYmFyMC0+cnhfdHJhZmZpY19pbnQpOwpAQCAtNzIyMCw3ICs3MjIwLDYgQEAKIAogCS8qIEluaXRpYWxpc2UgbmFwaSAqLwogCWlmIChjb25maWctPm5hcGkpIHsKLQkJaW50IGk7CiAJCWlmIChjb25maWctPmludHJfdHlwZSA9PSAgTVNJX1gpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnJ4X3JpbmdfbnVtOyBpKyspCiAJCQkJbmFwaV9lbmFibGUoJnNwLT5tYWNfY29udHJvbC5yaW5nc1tpXS5uYXBpKTsKQEAgLTc1NDIsNiArNzU0MSw3IEBACiAKIAlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKIHNlbmRfdXA6CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJpbmdfbm8pOwogCXF1ZXVlX3J4X2ZyYW1lKHNrYiwgUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpKTsKIGFnZ3JlZ2F0ZToKIAlzcC0+bWFjX2NvbnRyb2wucmluZ3NbcmluZ19ub10ucnhfYnVmc19sZWZ0IC09IDE7CkBAIC04MDA5LDggKzgwMDksNyBAQAogCQlpZiAocmV0KSB7CiAKIAkJCURCR19QUklOVChFUlJfREJHLAotCQkJICAiJXM6IE1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIiwKLQkJCSAgZGV2LT5uYW1lKTsKKwkJCSAgInMyaW86IE1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIik7CiAJCQlzcC0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKaW5kZXggMzFlMzhmYS4uODhkZDJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwpAQCAtMjAzOSw5ICsyMDM5LDkgQEAKIAkJc2JkbWFfdHhfcHJvY2VzcyhzYywmKHNjLT5zYm1fdHhkbWEpLCAwKTsKIAogCWlmIChpc3IgJiAoTV9NQUNfSU5UX0NIQU5ORUwgPDwgU19NQUNfUlhfQ0gwKSkgewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmc2MtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnNjLT5uYXBpKSkgewogCQkJX19yYXdfd3JpdGVxKDAsIHNjLT5zYm1faW1yKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnNjLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmc2MtPm5hcGkpOwogCQkJLyogRGVwZW5kIG9uIHRoZSBleGl0IGZyb20gcG9sbCB0byByZWVuYWJsZSBpbnRyICovCiAJCX0KIAkJZWxzZSB7CkBAIC0yNDc4LDcgKzI0NzgsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXBoeV9kZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9kZXYtPmRldi5idXNfaWQsICZzYm1hY19taWlfcG9sbCwgMCwKKwlwaHlfZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5X2Rldi0+ZGV2KSwgJnNibWFjX21paV9wb2xsLCAwLAogCQkJICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOwogCWlmIChJU19FUlIocGh5X2RldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CkBAIC0yNTAwLDcgKzI1MDAsNyBAQAogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKIAkJZGV2LT5uYW1lLCBwaHlfZGV2LT5kcnYtPm5hbWUsCi0JCXBoeV9kZXYtPmRldi5idXNfaWQsIHBoeV9kZXYtPmlycSk7CisJCWRldl9uYW1lKCZwaHlfZGV2LT5kZXYpLCBwaHlfZGV2LT5pcnEpOwogCiAJc2MtPnBoeV9kZXYgPSBwaHlfZGV2OwogCkBAIC0yNjY3LDcgKzI2NjcsNyBAQAogCXNiZG1hX3R4X3Byb2Nlc3Moc2MsICYoc2MtPnNibV90eGRtYSksIDEpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogI2lmZGVmIENPTkZJR19TQk1BQ19DT0FMRVNDRQogCQlfX3Jhd193cml0ZXEoKChNX01BQ19JTlRfRU9QX0NPVU5UIHwgTV9NQUNfSU5UX0VPUF9USU1FUikgPDwgU19NQUNfVFhfQ0gwKSB8CkBAIC0yNjk3LDcgKzI2OTcsNyBAQAogCXNibV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmICghc2JtX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIG1hcCBkZXZpY2UgcmVnaXN0ZXJzXG4iLAotCQkgICAgICAgcGxkZXYtPmRldi5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoJnBsZGV2LT5kZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfb3V0OwogCX0KQEAgLTI3MDgsNyArMjcwOCw3IEBACiAJICogSWYgd2UgZmluZCBhIHplcm8sIHNraXAgdGhpcyBNQUMuCiAJICovCiAJc2JtYWNfb3JpZ19od2FkZHIgPSBfX3Jhd19yZWFkcShzYm1fYmFzZSArIFJfTUFDX0VUSEVSTkVUX0FERFIpOwotCXByX2RlYnVnKCIlczogJXNjb25maWd1cmluZyBNQUMgYXQgMHglMDhMeFxuIiwgcGxkZXYtPmRldi5idXNfaWQsCisJcHJfZGVidWcoIiVzOiAlc2NvbmZpZ3VyaW5nIE1BQyBhdCAweCUwOEx4XG4iLCBkZXZfbmFtZSgmcGxkZXYtPmRldiksCiAJCSBzYm1hY19vcmlnX2h3YWRkciA/ICIiIDogIm5vdCAiLCAobG9uZyBsb25nKXJlcy0+c3RhcnQpOwogCWlmIChzYm1hY19vcmlnX2h3YWRkciA9PSAwKSB7CiAJCWVyciA9IDA7CkBAIC0yNzIxLDcgKzI3MjEsNyBAQAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc2JtYWNfc29mdGMpKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgZXRoZXJkZXZcbiIsCi0JCSAgICAgICBwbGRldi0+ZGV2LmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZSgmcGxkZXYtPmRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bm1hcDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYzkyMDMxLmMgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKaW5kZXggOGI3NWJlZi4uYzEzY2JmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NjOTIwMzEuYwpAQCAtMTMsNiArMTMsOSBAQAogICogIEJvdGggYXJlIGFsbW9zdCBpZGVudGljYWwgYW5kIHNlZW0gdG8gYmUgYmFzZWQgb24gcGNpLXNrZWxldG9uLmMKICAqCiAgKiAgUmV3cml0dGVuIGZvciAyLjYgYnkgQ2VzYXIgRWR1YXJkbyBCYXJyb3MKKyAqCisgKiAgQSBkYXRhc2hlZXQgZm9yIHRoaXMgY2hpcCBjYW4gYmUgZm91bmQgYXQKKyAqICBodHRwOi8vd3d3LnNpbGFuLmNvbS5jbi9lbmdsaXNoL3Byb2R1Y3RzL3BkZi9TQzkyMDMxQVkucGRmCiAgKi8KIAogLyogTm90ZSBhYm91dCBzZXRfbWFjX2FkZHJlc3M6IEkgZG9uJ3Qga25vdyBob3cgdG8gY2hhbmdlIHRoZSBoYXJkd2FyZQpAQCAtMzEsMTMgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJTEFOCQkweDE5MDQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUxBTl9TQzkyMDMxCTB4MjAzMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJTEFOXzgxMzlECTB4ODEzOQotCiAjZGVmaW5lIFNDOTIwMzFfTkFNRSAic2M5MjAzMSIKLSNkZWZpbmUgU0M5MjAzMV9ERVNDUklQVElPTiAiU2lsYW4gU0M5MjAzMSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciIKLSNkZWZpbmUgU0M5MjAzMV9WRVJTSU9OICIyLjBjIgogCiAvKiBCQVIgMCBpcyBNTUlPLCBCQVIgMSBpcyBQSU8gKi8KICNpZm5kZWYgU0M5MjAzMV9VU0VfQkFSCkBAIC0xMjY0LDcgKzEyNjEsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcHJpdi0+cGRldjsKIAogCXN0cmNweShkcnZpbmZvLT5kcml2ZXIsIFNDOTIwMzFfTkFNRSk7Ci0Jc3RyY3B5KGRydmluZm8tPnZlcnNpb24sIFNDOTIwMzFfVkVSU0lPTik7CiAJc3RyY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShwZGV2KSk7CiB9CiAKQEAgLTE0MjMsNiArMTQxOSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2M5MjAzMV9wcml2ICpwcml2OwogCXUzMiBtYWMwLCBtYWMxOworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHVubGlrZWx5KGVyciA8IDApKQpAQCAtMTQ5Nyw2ICsxNDk0LDE0IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X3JlZ2lzdGVyX25ldGRldjsKIAorI2lmIFNDOTIwMzFfVVNFX0JBUiA9PSAwCisJYmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQ7CisjZWxpZiBTQzkyMDMxX1VTRV9CQVIgPT0gMQorCWJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOworI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNDOTIwMzEgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJCQliYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxKTsKKwogCXJldHVybiAwOwogCiBvdXRfcmVnaXN0ZXJfbmV0ZGV2OgpAQCAtMTU4Niw4ICsxNTkxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIFBDSV9ERVZJQ0VfSURfU0lMQU5fU0M5MjAzMSkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgUENJX0RFVklDRV9JRF9TSUxBTl84MTM5RCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgMHgyMDMxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJTEFOLCAweDgxMzkpIH0sCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZSk7CkBAIC0xNjAzLDcgKzE2MDgsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzYzkyMDMxX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFNDOTIwMzFfREVTQ1JJUFRJT04gIiAiIFNDOTIwMzFfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2M5MjAzMV9wY2lfZHJpdmVyKTsKIH0KIApAQCAtMTYxNyw1ICsxNjIxLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2VzYXIgRWR1YXJkbyBCYXJyb3MgPGNlc2FyYkBjZXNhcmIubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKFNDOTIwMzFfREVTQ1JJUFRJT04pOwotTU9EVUxFX1ZFUlNJT04oU0M5MjAzMV9WRVJTSU9OKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2lsYW4gU0M5MjAzMSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcgYi9kcml2ZXJzL25ldC9zZmMvS2NvbmZpZwppbmRleCBjNTM1NDA4Li4xMmE4Mjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9zZmMvS2NvbmZpZwpAQCAtMiw3ICsyLDYgQEAKIAl0cmlzdGF0ZSAiU29sYXJmbGFyZSBTb2xhcnN0b3JtIFNGQzQwMDAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCiAJc2VsZWN0IE1JSQotCXNlbGVjdCBJTkVUX0xSTwogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBJMkMKIAlzZWxlY3QgSTJDX0FMR09CSVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oIGIvZHJpdmVycy9uZXQvc2ZjL2JpdGZpZWxkLmgKaW5kZXggZDk1YzIxOC4uZDU0ZDg0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JpdGZpZWxkLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2JpdGZpZWxkLmgKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiAvKiBTdGF0aWMgaW5pdGlhbGlzZXIgKi8KICNkZWZpbmUgRUZYX09XT1JEMzIoYSwgYiwgYywgZCkJCQkJCQlcCi0JeyAudTMyID0geyBfX2NvbnN0YW50X2NwdV90b19sZTMyKGEpLCBfX2NvbnN0YW50X2NwdV90b19sZTMyKGIpLCBcCi0JCSAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYyksIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoZCkgfSB9CisJeyAudTMyID0geyBjcHVfdG9fbGUzMihhKSwgY3B1X3RvX2xlMzIoYiksIFwKKwkJICAgY3B1X3RvX2xlMzIoYyksIGNwdV90b19sZTMyKGQpIH0gfQogCiAjZW5kaWYgLyogRUZYX0JJVEZJRUxEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYwppbmRleCA2NDkwMzQ5Li41MTgyYWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jCkBAIC0yNiw3ICsyNiw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IChzdHJ1Y3QgZWZ4X25pYyAqKWNvbnRleHQ7CiAJc3RydWN0IGVmeF9ibGlua2VyICpibCA9ICZlZngtPmJvYXJkX2luZm8uYmxpbmtlcjsKLQllZngtPmJvYXJkX2luZm8uc2V0X2ZhdWx0X2xlZChlZngsIGJsLT5zdGF0ZSk7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQoZWZ4LCBibC0+c3RhdGUpOwogCWJsLT5zdGF0ZSA9ICFibC0+c3RhdGU7CiAJaWYgKGJsLT5yZXN1Ym1pdCkKIAkJbW9kX3RpbWVyKCZibC0+dGltZXIsIGppZmZpZXMgKyBCTElOS19JTlRFUlZBTCk7CkBAIC00OCw3ICs0OCw3IEBACiAJCWJsaW5rZXItPnJlc3VibWl0ID0gZmFsc2U7CiAJCWlmIChibGlua2VyLT50aW1lci5mdW5jdGlvbikKIAkJCWRlbF90aW1lcl9zeW5jKCZibGlua2VyLT50aW1lcik7Ci0JCWVmeC0+Ym9hcmRfaW5mby5zZXRfZmF1bHRfbGVkKGVmeCwgZmFsc2UpOworCQllZngtPmJvYXJkX2luZm8uaW5pdF9sZWRzKGVmeCk7CiAJfQogfQogCkBAIC0xODUsNyArMTg1LDcgQEAKICNkZWZpbmUgU0ZFNDAwMl9SWF9MRUQgICAgKDApCS8qIEdyZWVuICovCiAjZGVmaW5lIFNGRTQwMDJfVFhfTEVEICAgICgxKQkvKiBBbWJlciAqLwogCi1zdGF0aWMgaW50IHNmZTQwMDJfaW5pdF9sZWRzKHN0cnVjdCBlZnhfbmljICplZngpCitzdGF0aWMgdm9pZCBzZmU0MDAyX2luaXRfbGVkcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCS8qIFNldCB0aGUgVFggYW5kIFJYIExFRHMgdG8gcmVmbGVjdCBzdGF0dXMgYW5kIGFjdGl2aXR5LCBhbmQgdGhlCiAJICogZmF1bHQgTEVEIG9mZiAqLwpAQCAtMTk0LDExICsxOTQsOSBAQAogCXhmcF9zZXRfbGVkKGVmeCwgU0ZFNDAwMl9SWF9MRUQsCiAJCSAgICBRVUFLRV9MRURfUlhMSU5LIHwgUVVBS0VfTEVEX0xJTktfQUNUU1RBVCk7CiAJeGZwX3NldF9sZWQoZWZ4LCBTRkU0MDAyX0ZBVUxUX0xFRCwgUVVBS0VfTEVEX09GRik7Ci0JZWZ4LT5ib2FyZF9pbmZvLmJsaW5rZXIubGVkX251bSA9IFNGRTQwMDJfRkFVTFRfTEVEOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZmU0MDAyX2ZhdWx0X2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQorc3RhdGljIHZvaWQgc2ZlNDAwMl9zZXRfaWRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhdGUpCiB7CiAJeGZwX3NldF9sZWQoZWZ4LCBTRkU0MDAyX0ZBVUxUX0xFRCwgc3RhdGUgPyBRVUFLRV9MRURfT04gOgogCQkJUVVBS0VfTEVEX09GRik7CkBAIC0yMjIsNyArMjIwLDY3IEBACiAJCXJldHVybiByYzsKIAllZngtPmJvYXJkX2luZm8ubW9uaXRvciA9IHNmZTQwMDJfY2hlY2tfaHc7CiAJZWZ4LT5ib2FyZF9pbmZvLmluaXRfbGVkcyA9IHNmZTQwMDJfaW5pdF9sZWRzOwotCWVmeC0+Ym9hcmRfaW5mby5zZXRfZmF1bHRfbGVkID0gc2ZlNDAwMl9mYXVsdF9sZWQ7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQgPSBzZmU0MDAyX3NldF9pZF9sZWQ7CisJZWZ4LT5ib2FyZF9pbmZvLmJsaW5rID0gYm9hcmRfYmxpbms7CisJZWZ4LT5ib2FyZF9pbmZvLmZpbmkgPSBlZnhfZmluaV9sbTg3OworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN1cHBvcnQgZm9yIHRoZSBTRk40MTEyRgorICoKKyAqLworc3RhdGljIHU4IHNmbjQxMTJmX2xtODdfY2hhbm5lbCA9IDB4MDM7IC8qIHVzZSBBSU4gbm90IEZBTiBpbnB1dHMgKi8KKworc3RhdGljIGNvbnN0IHU4IHNmbjQxMTJmX2xtODdfcmVnc1tdID0geworCUxNODdfSU5fTElNSVRTKDAsIDB4ODMsIDB4OTEpLAkJLyogMi41VjogIDEuOFYgKy8tIDUlICovCisJTE04N19JTl9MSU1JVFMoMSwgMHg1MSwgMHg1YSksCQkvKiBWY2NwMTogMS4yViArLy0gNSUgKi8KKwlMTTg3X0lOX0xJTUlUUygyLCAweGI2LCAweGNhKSwJCS8qIDMuM1Y6ICAzLjNWICsvLSA1JSAqLworCUxNODdfSU5fTElNSVRTKDQsIDB4YjAsIDB4ZTApLAkJLyogMTJWOiAgIDExLTE0ViAqLworCUxNODdfSU5fTElNSVRTKDUsIDB4NDQsIDB4NGIpLAkJLyogVmNjcDI6IDEuMFYgKy8tIDUlICovCisJTE04N19BSU5fTElNSVRTKDEsIDB4OTEsIDB4YTEpLAkJLyogQUlOMjogIDEuNVYgKy8tIDUlICovCisJTE04N19URU1QX0lOVF9MSU1JVFMoMTAsIDYwKSwJCS8qIGJvYXJkICovCisJTE04N19URU1QX0VYVDFfTElNSVRTKDEwLCA3MCksCQkvKiBGYWxjb24gKi8KKwkwCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNmbjQxMTJmX2h3bW9uX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oImxtODciLCAweDJlKSwKKwkucGxhdGZvcm1fZGF0YQk9ICZzZm40MTEyZl9sbTg3X2NoYW5uZWwsCisJLmlycQkJPSAtMSwKK307CisKKyNkZWZpbmUgU0ZONDExMkZfQUNUX0xFRAkwCisjZGVmaW5lIFNGTjQxMTJGX0xJTktfTEVECTEKKworc3RhdGljIHZvaWQgc2ZuNDExMmZfaW5pdF9sZWRzKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJeGZwX3NldF9sZWQoZWZ4LCBTRk40MTEyRl9BQ1RfTEVELAorCQkgICAgUVVBS0VfTEVEX1JYTElOSyB8IFFVQUtFX0xFRF9MSU5LX0FDVCk7CisJeGZwX3NldF9sZWQoZWZ4LCBTRk40MTEyRl9MSU5LX0xFRCwKKwkJICAgIFFVQUtFX0xFRF9SWExJTksgfCBRVUFLRV9MRURfTElOS19TVEFUKTsKK30KKworc3RhdGljIHZvaWQgc2ZuNDExMmZfc2V0X2lkX2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQoreworCXhmcF9zZXRfbGVkKGVmeCwgU0ZONDExMkZfTElOS19MRUQsCisJCSAgICBzdGF0ZSA/IFFVQUtFX0xFRF9PTiA6IFFVQUtFX0xFRF9PRkYpOworfQorCitzdGF0aWMgaW50IHNmbjQxMTJmX2NoZWNrX2h3KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJLyogTWFzayBvdXQgdW51c2VkIHNlbnNvcnMgKi8KKwlyZXR1cm4gZWZ4X2NoZWNrX2xtODcoZWZ4LCB+MHg0OCk7Cit9CisKK3N0YXRpYyBpbnQgc2ZuNDExMmZfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCWludCByYyA9IGVmeF9pbml0X2xtODcoZWZ4LCAmc2ZuNDExMmZfaHdtb25faW5mbywgc2ZuNDExMmZfbG04N19yZWdzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwllZngtPmJvYXJkX2luZm8ubW9uaXRvciA9IHNmbjQxMTJmX2NoZWNrX2h3OworCWVmeC0+Ym9hcmRfaW5mby5pbml0X2xlZHMgPSBzZm40MTEyZl9pbml0X2xlZHM7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQgPSBzZm40MTEyZl9zZXRfaWRfbGVkOwogCWVmeC0+Ym9hcmRfaW5mby5ibGluayA9IGJvYXJkX2JsaW5rOwogCWVmeC0+Ym9hcmRfaW5mby5maW5pID0gZWZ4X2ZpbmlfbG04NzsKIAlyZXR1cm4gMDsKQEAgLTI0Myw2ICszMDEsOCBAQAogCXsgRUZYX0JPQVJEX1NGRTQwMDIsICJTRkU0MDAyIiwgIlhGUCBhZGFwdGVyIiwgc2ZlNDAwMl9pbml0IH0sCiAJeyBFRlhfQk9BUkRfU0ZONDExMVQsICJTRk40MTExVCIsICIxMDAvMTAwMC8xMEdCQVNFLVQgYWRhcHRlciIsCiAJICBzZm40MTExdF9pbml0IH0sCisJeyBFRlhfQk9BUkRfU0ZONDExMkYsICJTRk40MTEyRiIsICJTRlArIGFkYXB0ZXIiLAorCSAgc2ZuNDExMmZfaW5pdCB9LAogfTsKIAogdm9pZCBlZnhfc2V0X2JvYXJkX2luZm8oc3RydWN0IGVmeF9uaWMgKmVmeCwgdTE2IHJldmlzaW9uX2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmggYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmgKaW5kZXggZDkzYzZjNi4uNDQ5NDJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaApAQCAtMTUsNiArMTUsNyBAQAogCUVGWF9CT0FSRF9TRkU0MDAxID0gMSwKIAlFRlhfQk9BUkRfU0ZFNDAwMiA9IDIsCiAJRUZYX0JPQVJEX1NGTjQxMTFUID0gMHg1MSwKKwlFRlhfQk9BUkRfU0ZONDExMkYgPSAweDUyLAogfTsKIAogZXh0ZXJuIHZvaWQgZWZ4X3NldF9ib2FyZF9pbmZvKHN0cnVjdCBlZnhfbmljICplZngsIHUxNiByZXZpc2lvbl9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCBhYjBlMDliLi42ZWZmOWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC0xMzMsNiArMTMzLDE2IEBACiBtb2R1bGVfcGFyYW0ocGh5X2ZsYXNoX2NmZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGh5X2ZsYXNoX2NmZywgIlNldCBQSFlzIGludG8gcmVmbGFzaCBtb2RlIGluaXRpYWxseSIpOwogCitzdGF0aWMgdW5zaWduZWQgaXJxX2FkYXB0X2xvd190aHJlc2ggPSAxMDAwMDsKK21vZHVsZV9wYXJhbShpcnFfYWRhcHRfbG93X3RocmVzaCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9hZGFwdF9sb3dfdGhyZXNoLAorCQkgIlRocmVzaG9sZCBzY29yZSBmb3IgcmVkdWNpbmcgSVJRIG1vZGVyYXRpb24iKTsKKworc3RhdGljIHVuc2lnbmVkIGlycV9hZGFwdF9oaWdoX3RocmVzaCA9IDIwMDAwOworbW9kdWxlX3BhcmFtKGlycV9hZGFwdF9oaWdoX3RocmVzaCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9hZGFwdF9oaWdoX3RocmVzaCwKKwkJICJUaHJlc2hvbGQgc2NvcmUgZm9yIGluY3JlYXNpbmcgSVJRIG1vZGVyYXRpb24iKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVXRpbGl0eSBmdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKQEAgLTE4Miw3ICsxOTIsNiBAQAogCQljaGFubmVsLT5yeF9wa3QgPSBOVUxMOwogCX0KIAotCWVmeF9mbHVzaF9scm8oY2hhbm5lbCk7CiAJZWZ4X3J4X3N0cmF0ZWd5KGNoYW5uZWwpOwogCiAJZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycygmZWZ4LT5yeF9xdWV1ZVtjaGFubmVsLT5jaGFubmVsXSk7CkBAIC0yMjQsMTIgKzIzMyw0MSBAQAogCXJ4X3BhY2tldHMgPSBlZnhfcHJvY2Vzc19jaGFubmVsKGNoYW5uZWwsIGJ1ZGdldCk7CiAKIAlpZiAocnhfcGFja2V0cyA8IGJ1ZGdldCkgeworCQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OworCisJCWlmIChjaGFubmVsLT51c2VkX2ZsYWdzICYgRUZYX1VTRURfQllfUlggJiYKKwkJICAgIGVmeC0+aXJxX3J4X2FkYXB0aXZlICYmCisJCSAgICB1bmxpa2VseSgrK2NoYW5uZWwtPmlycV9jb3VudCA9PSAxMDAwKSkgeworCQkJdW5zaWduZWQgb2xkX2lycV9tb2RlcmF0aW9uID0gY2hhbm5lbC0+aXJxX21vZGVyYXRpb247CisKKwkJCWlmICh1bmxpa2VseShjaGFubmVsLT5pcnFfbW9kX3Njb3JlIDwKKwkJCQkgICAgIGlycV9hZGFwdF9sb3dfdGhyZXNoKSkgeworCQkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0KKwkJCQkJbWF4X3QoaW50LAorCQkJCQkgICAgICBjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAtCisJCQkJCSAgICAgIEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04sCisJCQkJCSAgICAgIEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04pOworCQkJfSBlbHNlIGlmICh1bmxpa2VseShjaGFubmVsLT5pcnFfbW9kX3Njb3JlID4KKwkJCQkJICAgIGlycV9hZGFwdF9oaWdoX3RocmVzaCkpIHsKKwkJCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9CisJCQkJCW1pbihjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiArCisJCQkJCSAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OLAorCQkJCQkgICAgZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbik7CisJCQl9CisKKwkJCWlmIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAhPSBvbGRfaXJxX21vZGVyYXRpb24pCisJCQkJZmFsY29uX3NldF9pbnRfbW9kZXJhdGlvbihjaGFubmVsKTsKKworCQkJY2hhbm5lbC0+aXJxX2NvdW50ID0gMDsKKwkJCWNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgPSAwOworCQl9CisKIAkJLyogVGhlcmUgaXMgbm8gcmFjZSBoZXJlOyBhbHRob3VnaCBuYXBpX2Rpc2FibGUoKSB3aWxsCi0JCSAqIG9ubHkgd2FpdCBmb3IgbmV0aWZfcnhfY29tcGxldGUoKSwgdGhpcyBpc24ndCBhIHByb2JsZW0KKwkJICogb25seSB3YWl0IGZvciBuYXBpX2NvbXBsZXRlKCksIHRoaXMgaXNuJ3QgYSBwcm9ibGVtCiAJCSAqIHNpbmNlIGVmeF9jaGFubmVsX3Byb2Nlc3NlZCgpIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYKIAkJICogaW50ZXJydXB0cyBoYXZlIGFscmVhZHkgYmVlbiBkaXNhYmxlZC4KIAkJICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllZnhfY2hhbm5lbF9wcm9jZXNzZWQoY2hhbm5lbCk7CiAJfQogCkBAIC01NTgsNiArNTk2LDggQEAKIAogfQogCitzdGF0aWMgdm9pZCBlZnhfZmluaV9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpOworCiAvKiBUaGlzIGNhbGwgcmVpbml0aWFsaXNlcyB0aGUgTUFDIHRvIHBpY2sgdXAgbmV3IFBIWSBzZXR0aW5ncy4gVGhlCiAgKiBjYWxsZXIgbXVzdCBob2xkIHRoZSBtYWNfbG9jayAqLwogdm9pZCBfX2VmeF9yZWNvbmZpZ3VyZV9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpCkBAIC01OTMsOCArNjMzLDggQEAKIAogZmFpbDoKIAlFRlhfRVJSKGVmeCwgImZhaWxlZCB0byByZWNvbmZpZ3VyZSBNQUNcbiIpOwotCWVmeC0+cGh5X29wLT5maW5pKGVmeCk7Ci0JZWZ4LT5wb3J0X2luaXRpYWxpemVkID0gZmFsc2U7CisJZWZ4LT5wb3J0X2VuYWJsZWQgPSBmYWxzZTsKKwllZnhfZmluaV9wb3J0KGVmeCk7CiB9CiAKIC8qIFJlaW5pdGlhbGlzZSB0aGUgTUFDIHRvIHBpY2sgdXAgbmV3IFBIWSBzZXR0aW5ncywgZXZlbiBpZiB0aGUgcG9ydCBpcwpAQCAtOTkwLDcgKzEwMzAsNyBAQAogCWVmeF9zZXRfY2hhbm5lbHMoZWZ4KTsKIAogCS8qIEluaXRpYWxpc2UgdGhlIGludGVycnVwdCBtb2RlcmF0aW9uIHNldHRpbmdzICovCi0JZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF9pcnFfbW9kX3VzZWMsIHJ4X2lycV9tb2RfdXNlYyk7CisJZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF9pcnFfbW9kX3VzZWMsIHJ4X2lycV9tb2RfdXNlYywgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExODcsNyArMTIyNyw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFNldCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBwYXJhbWV0ZXJzICovCi12b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywgaW50IHJ4X3VzZWNzKQordm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsIGludCByeF91c2VjcywKKwkJCSAgICAgYm9vbCByeF9hZGFwdGl2ZSkKIHsKIAlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZTsKIAlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKQEAgLTExOTcsNiArMTIzOCw4IEBACiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpCiAJCXR4X3F1ZXVlLT5jaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IHR4X3VzZWNzOwogCisJZWZ4LT5pcnFfcnhfYWRhcHRpdmUgPSByeF9hZGFwdGl2ZTsKKwllZngtPmlycV9yeF9tb2RlcmF0aW9uID0gcnhfdXNlY3M7CiAJZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpCiAJCXJ4X3F1ZXVlLT5jaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IHJ4X3VzZWNzOwogfQpAQCAtMTI2OSwxOCArMTMxMiwxMSBAQAogc3RhdGljIGludCBlZnhfaW5pdF9uYXBpKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwotCWludCByYzsKIAogCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkgewogCQljaGFubmVsLT5uYXBpX2RldiA9IGVmeC0+bmV0X2RldjsKLQkJcmMgPSBlZnhfbHJvX2luaXQoJmNoYW5uZWwtPmxyb19tZ3IsIGVmeCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZXJyOwogCX0KIAlyZXR1cm4gMDsKLSBlcnI6Ci0JZWZ4X2ZpbmlfbmFwaShlZngpOwotCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgZWZ4X2ZpbmlfbmFwaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtMTI4OCw3ICsxMzI0LDYgQEAKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAKIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKLQkJZWZ4X2xyb19maW5pKCZjaGFubmVsLT5scm9fbWdyKTsKIAkJY2hhbm5lbC0+bmFwaV9kZXYgPSBOVUxMOwogCX0KIH0KQEAgLTE2NzYsNyArMTcxMSw4IEBACiAJCQlyYyA9IGVmeC0+cGh5X29wLT5pbml0KGVmeCk7CiAJCQlpZiAocmMpCiAJCQkJb2sgPSBmYWxzZTsKLQkJfSBlbHNlCisJCX0KKwkJaWYgKCFvaykKIAkJCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOwogCX0KIApAQCAtMTg1Nyw4ICsxODkzLDggQEAKIAogc3RhdGljIHN0cnVjdCBlZnhfYm9hcmQgZWZ4X2R1bW15X2JvYXJkX2luZm8gPSB7CiAJLmluaXQJCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAotCS5pbml0X2xlZHMJPSBlZnhfcG9ydF9kdW1teV9vcF9pbnQsCi0JLnNldF9mYXVsdF9sZWQJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKKwkuaW5pdF9sZWRzCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKKwkuc2V0X2lkX2xlZAk9IGVmeF9wb3J0X2R1bW15X29wX2JsaW5rLAogCS5tb25pdG9yCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAogCS5ibGluawkJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKIAkuZmluaQkJPSBlZnhfcG9ydF9kdW1teV9vcF92b2lkLApAQCAtMjEyMCw3ICsyMTU2LDcgQEAKIAluZXRfZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CiAJCQkgICAgICBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX1RTTyk7CiAJaWYgKGxybykKLQkJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCW5ldF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCS8qIE1hc2sgZm9yIGZlYXR1cmVzIHRoYXQgYWxzbyBhcHBseSB0byBWTEFOIGRldmljZXMgKi8KIAluZXRfZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9TRyB8CiAJCQkJICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCmluZGV4IDU1ZDBmMTMuLmRhMTU3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKQEAgLTUyLDcgKzUyLDcgQEAKIGV4dGVybiB2b2lkIGVmeF9zdXNwZW5kKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIHZvaWQgZWZ4X3Jlc3VtZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywKLQkJCQkgICAgaW50IHJ4X3VzZWNzKTsKKwkJCQkgICAgaW50IHJ4X3VzZWNzLCBib29sIHJ4X2FkYXB0aXZlKTsKIGV4dGVybiBpbnQgZWZ4X3JlcXVlc3RfcG93ZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IG13LCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGVmeF9oZXhfZHVtcChjb25zdCB1OCAqLCB1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiAKQEAgLTgwLDcgKzgwLDcgQEAKIAkJICBjaGFubmVsLT5jaGFubmVsLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAljaGFubmVsLT53b3JrX3BlbmRpbmcgPSB0cnVlOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmNoYW5uZWwtPm5hcGlfc3RyKTsKKwluYXBpX3NjaGVkdWxlKCZjaGFubmVsLT5uYXBpX3N0cik7CiB9CiAKICNlbmRpZiAvKiBFRlhfRUZYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCmluZGV4IDdiNTkyNGMwLi42NDMwOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTUyOSw3ICs1MjksMTQgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAKLQlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmZWZ4LT5taWkpOworCWlmIChlZngtPnBoeV9vcC0+bW1kcyAmIERFVl9QUkVTRU5UX0JJVChNRElPX01NRF9BTikpIHsKKwkJbWRpb19jbGF1c2U0NV9zZXRfZmxhZyhlZngsIGVmeC0+bWlpLnBoeV9pZCwgTURJT19NTURfQU4sCisJCQkJICAgICAgIE1ESU9fTU1EUkVHX0NUUkwxLAorCQkJCSAgICAgICBfX2ZmcyhCTUNSX0FOUkVTVEFSVCksIHRydWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKIHN0YXRpYyB1MzIgZWZ4X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCkBAIC01OTcsNyArNjA0LDYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0Jc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCiAJbWVtc2V0KGNvYWxlc2NlLCAwLCBzaXplb2YoKmNvYWxlc2NlKSk7CkBAIC02MTUsMTQgKzYyMSw4IEBACiAJCX0KIAl9CiAKLQkvKiBGaW5kIGxvd2VzdCBJUlEgbW9kZXJhdGlvbiBhY3Jvc3MgYWxsIHVzZWQgUlggcXVldWVzICovCi0JY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IH4oKHUzMikgMCk7Ci0JZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpIHsKLQkJY2hhbm5lbCA9IHJ4X3F1ZXVlLT5jaGFubmVsOwotCQlpZiAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPCBjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxKQotCQkJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9Ci0JCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb247Ci0JfQorCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBlZngtPmlycV9yeF9hZGFwdGl2ZTsKKwljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID0gZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbjsKIAogCXJldHVybiAwOwogfQpAQCAtNjM2LDEwICs2MzYsOSBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0JdW5zaWduZWQgdHhfdXNlY3MsIHJ4X3VzZWNzOworCXVuc2lnbmVkIHR4X3VzZWNzLCByeF91c2VjcywgYWRhcHRpdmU7CiAKLQlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSB8fAotCSAgICBjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQorCWlmIChjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzIHx8IGNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2VjcykgewpAQCAtNjUwLDYgKzY0OSw3IEBACiAKIAlyeF91c2VjcyA9IGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnE7CiAJdHhfdXNlY3MgPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfaXJxOworCWFkYXB0aXZlID0gY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKIAogCS8qIElmIHRoZSBjaGFubmVsIGlzIHNoYXJlZCBvbmx5IGFsbG93IFJYIHBhcmFtZXRlcnMgdG8gYmUgc2V0ICovCiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpIHsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQl9CiAJfQogCi0JZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF91c2VjcywgcnhfdXNlY3MpOworCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfdXNlY3MsIHJ4X3VzZWNzLCBhZGFwdGl2ZSk7CiAKIAkvKiBSZXNldCBjaGFubmVsIHRvIHBpY2sgdXAgbmV3IG1vZGVyYXRpb24gdmFsdWUuICBOb3RlIHRoYXQKIAkgKiB0aGlzIG1heSBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBpcnFfbW9kZXJhdGlvbiBmaWVsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IGQ1Mzc4ZTYuLjIzYTFiMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTM5LDExICszOSwxNiBAQAogICogQG5leHRfYnVmZmVyX3RhYmxlOiBGaXJzdCBhdmFpbGFibGUgYnVmZmVyIHRhYmxlIGlkCiAgKiBAcGNpX2RldjI6IFRoZSBzZWNvbmRhcnkgUENJIGRldmljZSBpZiBwcmVzZW50CiAgKiBAaTJjX2RhdGE6IE9wZXJhdGlvbnMgYW5kIHN0YXRlIGZvciBJMkMgYml0LWJhc2hpbmcgYWxnb3JpdGhtCisgKiBAaW50X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzIHNlZW4gcmVjZW50bHkKKyAqIEBpbnRfZXJyb3JfZXhwaXJlOiBUaW1lIGF0IHdoaWNoIGVycm9yIGNvdW50IHdpbGwgYmUgZXhwaXJlZAogICovCiBzdHJ1Y3QgZmFsY29uX25pY19kYXRhIHsKIAl1bnNpZ25lZCBuZXh0X2J1ZmZlcl90YWJsZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjI7CiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19kYXRhOworCisJdW5zaWduZWQgaW50X2Vycm9yX2NvdW50OworCXVuc2lnbmVkIGxvbmcgaW50X2Vycm9yX2V4cGlyZTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE5LDggKzEyNCwxMiBAQAogI2RlZmluZSBGQUxDT05fRVZRX1NJWkUgNDA5NgogI2RlZmluZSBGQUxDT05fRVZRX01BU0sgKEZBTENPTl9FVlFfU0laRSAtIDEpCiAKLS8qIE1heCBudW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzLiBBZnRlciB0aGlzIHJlc2V0cyB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KLSNkZWZpbmUgRkFMQ09OX01BWF9JTlRfRVJST1JTIDQKKy8qIElmIEZBTENPTl9NQVhfSU5UX0VSUk9SUyBpbnRlcm5hbCBlcnJvcnMgb2NjdXIgd2l0aGluCisgKiBGQUxDT05fSU5UX0VSUk9SX0VYUElSRSBzZWNvbmRzLCB3ZSBjb25zaWRlciB0aGUgTklDIGJyb2tlbiBhbmQKKyAqIGRpc2FibGUgaXQuCisgKi8KKyNkZWZpbmUgRkFMQ09OX0lOVF9FUlJPUl9FWFBJUkUgMzYwMAorI2RlZmluZSBGQUxDT05fTUFYX0lOVF9FUlJPUlMgNQogCiAvKiBXZSBwb2xsIGZvciBldmVudHMgZXZlcnkgRkxVU0hfSU5URVJWQUwgbXMsIGFuZCBjaGVjayBGTFVTSF9QT0xMX0NPVU5UIHRpbWVzCiAgKi8KQEAgLTE0NiwxMyArMTU1LDYgQEAKIC8qIER1bW15IFNSQU0gc2l6ZSBjb2RlICovCiAjZGVmaW5lIFNSTV9OQl9CU1pfT05DSElQX09OTFkgKC0xKQogCi0vKiBCZSBuaWNlIGlmIHRoZXNlIChvciBlcXVpdi4pIHdlcmUgaW4gbGludXgvcGNpX3JlZ3MuaCwgYnV0IHRoZXkncmUgbm90LiAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfVkFMX0xCTgkxOAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMX0xCTgkyNgotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEX0xCTgk1Ci0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSUQJCTB4M2YwCi0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSURfTEJOCTQKLQogI2RlZmluZSBGQUxDT05fSVNfRFVBTF9GVU5DKGVmeCkJCVwKIAkoZmFsY29uX3JldihlZngpIDwgRkFMQ09OX1JFVl9CMCkKIApAQCAtNzI3LDYgKzcyOSw5IEBACiAJCXR4X2V2X2Rlc2NfcHRyID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfREVTQ19QVFIpOwogCQl0eF9ldl9xX2xhYmVsID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfUV9MQUJFTCk7CiAJCXR4X3F1ZXVlID0gJmVmeC0+dHhfcXVldWVbdHhfZXZfcV9sYWJlbF07CisJCWNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgKz0KKwkJCSh0eF9ldl9kZXNjX3B0ciAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50KSAmCisJCQllZngtPnR5cGUtPnR4ZF9yaW5nX21hc2s7CiAJCWVmeF94bWl0X2RvbmUodHhfcXVldWUsIHR4X2V2X2Rlc2NfcHRyKTsKIAl9IGVsc2UgaWYgKEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX1dRX0ZGX0ZVTEwpKSB7CiAJCS8qIFJld3JpdGUgdGhlIEZJRk8gd3JpdGUgcG9pbnRlciAqLwpAQCAtODk2LDYgKzkwMSw4IEBACiAJCQlkaXNjYXJkID0gdHJ1ZTsKIAl9CiAKKwljaGFubmVsLT5pcnFfbW9kX3Njb3JlICs9IDI7CisKIAkvKiBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0ICovCiAJZWZ4X3J4X3BhY2tldChyeF9xdWV1ZSwgcnhfZXZfZGVzY19wdHIsIHJ4X2V2X2J5dGVfY250LAogCQkgICAgICBjaGVja3N1bW1lZCwgZGlzY2FyZCk7CkBAIC0xMDczLDE0ICsxMDgwLDE1IEBACiAJCSAqIHByb2dyYW0gaXMgYmFzZWQgYXQgMC4gIFNvIGFjdHVhbCBpbnRlcnJ1cHQgbW9kZXJhdGlvbgogCQkgKiBhY2hpZXZlZCBpcyAoKHggKyAxKSAqIHJlcykuCiAJCSAqLwotCQl1bnNpZ25lZCBpbnQgcmVzID0gNTsKLQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLT0gKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uICUgcmVzKTsKLQkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgcmVzKQotCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSByZXM7CisJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC09IChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAlCisJCQkJCSAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OKTsKKwkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTikKKwkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0gRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTjsKIAkJRUZYX1BPUFVMQVRFX0RXT1JEXzIodGltZXJfY21kLAogCQkJCSAgICAgVElNRVJfTU9ERSwgVElNRVJfTU9ERV9JTlRfSExET0ZGLAogCQkJCSAgICAgVElNRVJfVkFMLAotCQkJCSAgICAgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC8gcmVzKSAtIDEpOworCQkJCSAgICAgY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLworCQkJCSAgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiAtIDEpOwogCX0gZWxzZSB7CiAJCUVGWF9QT1BVTEFURV9EV09SRF8yKHRpbWVyX2NtZCwKIAkJCQkgICAgIFRJTUVSX01PREUsIFRJTUVSX01PREVfRElTLApAQCAtMTE4NywzMSArMTE5NSwyOSBAQAogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7Ci0JdW5zaWduZWQgaW50IHJlYWRfcHRyLCBpOworCXVuc2lnbmVkIGludCByZWFkX3B0ciA9IGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cjsKKwl1bnNpZ25lZCBpbnQgZW5kX3B0ciA9IChyZWFkX3B0ciAtIDEpICYgRkFMQ09OX0VWUV9NQVNLOwogCi0JcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7Ci0JZm9yIChpID0gMDsgaSA8IEZBTENPTl9FVlFfU0laRTsgKytpKSB7CisJZG8gewogCQllZnhfcXdvcmRfdCAqZXZlbnQgPSBmYWxjb25fZXZlbnQoY2hhbm5lbCwgcmVhZF9wdHIpOwogCQlpbnQgZXZfY29kZSwgZXZfc3ViX2NvZGUsIGV2X3F1ZXVlOwogCQlib29sIGV2X2ZhaWxlZDsKKwogCQlpZiAoIWZhbGNvbl9ldmVudF9wcmVzZW50KGV2ZW50KSkKIAkJCWJyZWFrOwogCiAJCWV2X2NvZGUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBFVl9DT0RFKTsKLQkJaWYgKGV2X2NvZGUgIT0gRFJJVkVSX0VWX0RFQ09ERSkKLQkJCWNvbnRpbnVlOwotCiAJCWV2X3N1Yl9jb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRFJJVkVSX0VWX1NVQl9DT0RFKTsKLQkJc3dpdGNoIChldl9zdWJfY29kZSkgewotCQljYXNlIFRYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERToKKwkJaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkgICAgZXZfc3ViX2NvZGUgPT0gVFhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfVFhfREVTQ1FfSUQpOwogCQkJaWYgKGV2X3F1ZXVlIDwgRUZYX1RYX1FVRVVFX0NPVU5UKSB7CiAJCQkJdHhfcXVldWUgPSBlZngtPnR4X3F1ZXVlICsgZXZfcXVldWU7CiAJCQkJdHhfcXVldWUtPmZsdXNoZWQgPSB0cnVlOwogCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFOgorCQl9IGVsc2UgaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkJICAgZXZfc3ViX2NvZGUgPT0gUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfUlhfREVTQ1FfSUQpOwogCQkJZXZfZmFpbGVkID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwKQEAgLTEyMjUsMTEgKzEyMzEsMTAgQEAKIAkJCQllbHNlCiAJCQkJCXJ4X3F1ZXVlLT5mbHVzaGVkID0gdHJ1ZTsKIAkJCX0KLQkJCWJyZWFrOwogCQl9CiAKIAkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIEZBTENPTl9FVlFfTUFTSzsKLQl9CisJfSB3aGlsZSAocmVhZF9wdHIgIT0gZW5kX3B0cik7CiB9CiAKIC8qIEhhbmRsZSB0eCBhbmQgcnggZmx1c2hlcyBhdCB0aGUgc2FtZSB0aW1lLCBzaW5jZSB0aGV5IHJ1biBpbgpAQCAtMTM3Nyw3ICsxMzgyLDYgQEAKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOwogCWVmeF9vd29yZF90IGZhdGFsX2ludHI7CiAJaW50IGVycm9yLCBtZW1fcGVycjsKLQlzdGF0aWMgaW50IG5faW50X2Vycm9yczsKIAogCWZhbGNvbl9yZWFkKGVmeCwgJmZhdGFsX2ludHIsIEZBVEFMX0lOVFJfUkVHX0tFUik7CiAJZXJyb3IgPSBFRlhfT1dPUkRfRklFTEQoZmF0YWxfaW50ciwgSU5UX0tFUl9FUlJPUik7CkBAIC0xNDA0LDcgKzE0MDgsMTQgQEAKIAkJcGNpX2NsZWFyX21hc3RlcihuaWNfZGF0YS0+cGNpX2RldjIpOwogCWZhbGNvbl9kaXNhYmxlX2ludGVycnVwdHMoZWZ4KTsKIAotCWlmICgrK25faW50X2Vycm9ycyA8IEZBTENPTl9NQVhfSU5UX0VSUk9SUykgeworCS8qIENvdW50IGVycm9ycyBhbmQgcmVzZXQgb3IgZGlzYWJsZSB0aGUgTklDIGFjY29yZGluZ2x5ICovCisJaWYgKG5pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPT0gMCB8fAorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIG5pY19kYXRhLT5pbnRfZXJyb3JfZXhwaXJlKSkgeworCQluaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50ID0gMDsKKwkJbmljX2RhdGEtPmludF9lcnJvcl9leHBpcmUgPQorCQkJamlmZmllcyArIEZBTENPTl9JTlRfRVJST1JfRVhQSVJFICogSFo7CisJfQorCWlmICgrK25pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPCBGQUxDT05fTUFYX0lOVF9FUlJPUlMpIHsKIAkJRUZYX0VSUihlZngsICJTWVNURU0gRVJST1IgLSByZXNldCBzY2hlZHVsZWRcbiIpOwogCQllZnhfc2NoZWR1bGVfcmVzZXQoZWZ4LCBSRVNFVF9UWVBFX0lOVF9FUlJPUik7CiAJfSBlbHNlIHsKQEAgLTE0MjMsNiArMTQzNCw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGRldl9pZDsKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOworCWlycXJldHVybl90IHJlc3VsdCA9IElSUV9OT05FOwogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKIAllZnhfZHdvcmRfdCByZWc7CiAJdTMyIHF1ZXVlczsKQEAgLTE0MzcsMjMgKzE0NDksMjQgQEAKIAlpZiAodW5saWtlbHkoc3lzZXJyKSkKIAkJcmV0dXJuIGZhbGNvbl9mYXRhbF9pbnRlcnJ1cHQoZWZ4KTsKIAotCWlmIChxdWV1ZXMgPT0gMCkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JZWZ4LT5sYXN0X2lycV9jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKLQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7Ci0KIAkvKiBTY2hlZHVsZSBwcm9jZXNzaW5nIG9mIGFueSBpbnRlcnJ1cHRpbmcgcXVldWVzICovCi0JY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07Ci0Jd2hpbGUgKHF1ZXVlcykgewotCQlpZiAocXVldWVzICYgMHgwMSkKKwllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKKwkJaWYgKChxdWV1ZXMgJiAxKSB8fAorCQkgICAgZmFsY29uX2V2ZW50X3ByZXNlbnQoCisJCQkgICAgZmFsY29uX2V2ZW50KGNoYW5uZWwsIGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cikpKSB7CiAJCQllZnhfc2NoZWR1bGVfY2hhbm5lbChjaGFubmVsKTsKLQkJY2hhbm5lbCsrOworCQkJcmVzdWx0ID0gSVJRX0hBTkRMRUQ7CisJCX0KIAkJcXVldWVzID4+PSAxOwogCX0KIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlpZiAocmVzdWx0ID09IElSUV9IQU5ETEVEKSB7CisJCWVmeC0+bGFzdF9pcnFfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJRUZYX1RSQUNFKGVmeCwgIklSUSAlZCBvbiBDUFUgJWQgc3RhdHVzICIgRUZYX0RXT1JEX0ZNVCAiXG4iLAorCQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC0yMjQ5LDYgKzIyNjIsNyBAQAogCQllZngtPnBoeV9vcCA9ICZmYWxjb25fc2Z0OTAwMV9waHlfb3BzOwogCQlicmVhazsKIAljYXNlIFBIWV9UWVBFX1FUMjAyMkMyOgorCWNhc2UgUEhZX1RZUEVfUVQyMDI1QzoKIAkJZWZ4LT5waHlfb3AgPSAmZmFsY29uX3hmcF9waHlfb3BzOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzExMyw4ICszMTI3LDEwIEBACiAJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWludCByYzsKIAorCS8qIFJlbW92ZSBJMkMgYWRhcHRlciBhbmQgY2xlYXIgaXQgaW4gcHJlcGFyYXRpb24gZm9yIGEgcmV0cnkgKi8KIAlyYyA9IGkyY19kZWxfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAJQlVHX09OKHJjKTsKKwltZW1zZXQoJmVmeC0+aTJjX2FkYXAsIDAsIHNpemVvZihlZngtPmkyY19hZGFwKSk7CiAKIAlmYWxjb25fcmVtb3ZlX3NwaV9kZXZpY2VzKGVmeCk7CiAJZmFsY29uX2ZyZWVfYnVmZmVyKGVmeCwgJmVmeC0+aXJxX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmggYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmgKaW5kZXggNzg2OWMzZC4uNzdmMmUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uaApAQCAtODUsNiArODUsOCBAQAogZXh0ZXJuIHZvaWQgZmFsY29uX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGZhbGNvbl9maW5pX2ludGVycnVwdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAorI2RlZmluZSBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OIDUKKwogLyogR2xvYmFsIFJlc291cmNlcyAqLwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oCmluZGV4IGMxNmRhMzEuLjg4ODMwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2lvLmgKQEAgLTIzOCwxOCArMjM4LDIxIEBACiAvKiBXcml0ZSBkd29yZCB0byBGYWxjb24gcGFnZS1tYXBwZWQgcmVnaXN0ZXIgd2l0aCBhbiBleHRyYSBsb2NrLgogICoKICAqIEFzIGZvciBmYWxjb25fd3JpdGVsX3BhZ2UoKSwgYnV0IGZvciBhIHJlZ2lzdGVyIHRoYXQgc3VmZmVycyBmcm9tCi0gKiBTRkMgYnVnIDMxODEuIFRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVIGNvbGxlY3RvciBjYW5ub3QgYmUKLSAqIGNvbmZ1c2VkLiAqLworICogU0ZDIGJ1ZyAzMTgxLiAgSWYgd3JpdGluZyB0byBwYWdlIDAsIHRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVCisgKiBjb2xsZWN0b3IgY2Fubm90IGJlIGNvbmZ1c2VkLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZmFsY29uX3dyaXRlbF9wYWdlX2xvY2tlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAogCQkJCQkgICAgIGVmeF9kd29yZF90ICp2YWx1ZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOworCWlmIChwYWdlID09IDApCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAJZmFsY29uX3dyaXRlbChlZngsIHZhbHVlLCBGQUxDT05fUEFHRURfUkVHKHBhZ2UsIHJlZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKKwlpZiAocGFnZSA9PSAwKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiB9CiAKICNlbmRpZiAvKiBFRlhfRkFMQ09OX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKaW5kZXggZjllMmY5NS4uOWY1ZWMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKQEAgLTE3LDYgKzE3LDIxIEBACiAjaW5jbHVkZSAiYm9hcmRzLmgiCiAjaW5jbHVkZSAid29ya2Fyb3VuZHMuaCIKIAordW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKQoreworCXVuc2lnbmVkIG91aSA9IDA7CisJaW50IGk7CisKKwkvKiBUaGUgYml0cyBvZiB0aGUgT1VJIGFyZSBkZXNpZ25hdGVkIGEuLngsIHdpdGggYT0wIGFuZCBiIHZhcmlhYmxlLgorCSAqIEluIHRoZSBpZCByZWdpc3RlciBjIGlzIHRoZSBNU0IgYnV0IHRoZSBPVUkgaXMgY29udmVudGlvbmFsbHkKKwkgKiB3cml0dGVuIGFzIGJ5dGVzIGguLmEsIHAuLmksIHguLnEuICBSZW9yZGVyIHRoZSBiaXRzIGFjY29yZGluZ2x5LiAqLworCWZvciAoaSA9IDA7IGkgPCAyMjsgKytpKQorCQlpZiAoaWQgJiAoMSA8PCAoaSArIDEwKSkpCisJCQlvdWkgfD0gMSA8PCAoaSBeIDcpOworCisJcmV0dXJuIG91aTsKK30KKwogaW50IG1kaW9fY2xhdXNlNDVfcmVzZXRfbW1kKHN0cnVjdCBlZnhfbmljICpwb3J0LCBpbnQgbW1kLAogCQkJICAgIGludCBzcGlucywgaW50IHNwaW50aW1lKQogewpAQCAtMTI1LDI0ICsxNDAsMjUgQEAKIGludCBtZGlvX2NsYXVzZTQ1X2NoZWNrX21tZHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCSAgICAgdW5zaWduZWQgaW50IG1tZF9tYXNrLCB1bnNpZ25lZCBpbnQgZmF0YWxfbWFzaykKIHsKKwlpbnQgbW1kID0gMCwgcHJvYmVfbW1kLCBkZXZzMCwgZGV2czE7CiAJdTMyIGRldmljZXM7Ci0JaW50IG1tZCA9IDAsIHByb2JlX21tZDsKIAogCS8qIEhpc3RvcmljYWxseSB3ZSBoYXZlIHByb2JlZCB0aGUgUEhZWFMgdG8gZmluZCBvdXQgd2hhdCBkZXZpY2VzIGFyZQogCSAqIHByZXNlbnQsYnV0IHRoYXQgZG9lc24ndCB3b3JrIHNvIHdlbGwgaWYgdGhlIFBIWVhTIGlzbid0IGV4cGVjdGVkCiAJICogdG8gZXhpc3QsIGlmIHNvIGp1c3QgZmluZCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBzdXBwbGllZC4gKi8KIAlwcm9iZV9tbWQgPSAobW1kX21hc2sgJiBNRElPX01NRFJFR19ERVZTX1BIWVhTKSA/IE1ESU9fTU1EX1BIWVhTIDoKIAkgICAgX19mZnMobW1kX21hc2spOwotCWRldmljZXMgPSAobWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApIHwKLQkJICAgbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpIDw8IDE2KTsKIAogCS8qIENoZWNrIGFsbCB0aGUgZXhwZWN0ZWQgTU1EcyBhcmUgcHJlc2VudCAqLwotCWlmIChkZXZpY2VzIDwgMCkgeworCWRldnMwID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApOworCWRldnMxID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpOworCWlmIChkZXZzMCA8IDAgfHwgZGV2czEgPCAwKSB7CiAJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlYWQgZGV2aWNlcyBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCWRldmljZXMgPSBkZXZzMCB8IChkZXZzMSA8PCAxNik7CiAJaWYgKChkZXZpY2VzICYgbW1kX21hc2spICE9IG1tZF9tYXNrKSB7CiAJCUVGWF9FUlIoZWZ4LCAicmVxdWlyZWQgTU1EcyBub3QgcHJlc2VudDogZ290ICV4LCAiCiAJCQkid2FudGVkICV4XG4iLCBkZXZpY2VzLCBtbWRfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaCBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCmluZGV4IDhiYTQ5NzcuLjcwMTRkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCkBAIC03MCwxMCArNzAsMTAgQEAKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX0xCTgkoMSkKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX1dJRFRICSgxKQogCi0vKiBCaXRzIGluIElEIHJlZyAqLwotI2RlZmluZSBNRElPX0lEX1JFVihfaWQzMikJKF9pZDMyICYgMHhmKQotI2RlZmluZSBNRElPX0lEX01PREVMKF9pZDMyKQkoKF9pZDMyID4+IDQpICYgMHgzZikKLSNkZWZpbmUgTURJT19JRF9PVUkoX2lkMzIpCShfaWQzMiA+PiAxMCkKKy8qIEJpdHMgaW4gY29tYmluZWQgSUQgcmVncyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZGlvX2lkX3Jldih1MzIgaWQpIHsgcmV0dXJuIGlkICYgMHhmOyB9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1kaW9faWRfbW9kZWwodTMyIGlkKSB7IHJldHVybiAoaWQgPj4gNCkgJiAweDNmOyB9CitleHRlcm4gdW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKTsKIAogLyogQml0cyBpbiBNTURSRUdfREVWUzAvMS4gU29tZW9uZSB0aG91Z2h0ZnVsbHkgbGF5ZWQgdGhpbmdzIG91dAogICogc28gdGhlICdiaXQgcHJlc2VudCcgYml0IG51bWJlciBvZiBhbiBNTUQgaXMgdGhlIG51bWJlciBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL210ZC5jIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCmluZGV4IDY2NWNhZmIuLjgyMGMyMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbXRkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgRUZYX0RSSVZFUl9OQU1FICJzZmNfbXRkIgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJzcGkuaCIKKyNpbmNsdWRlICJlZnguaCIKIAogI2RlZmluZSBFRlhfU1BJX1ZFUklGWV9CVUZfTEVOIDE2CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IGUwMTlhZDEuLmUxNjllNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtMjUsMTUgKzI1LDExIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlICJlbnVtLmgiCiAjaW5jbHVkZSAiYml0ZmllbGQuaCIKIAotI2RlZmluZSBFRlhfTUFYX0xST19ERVNDUklQVE9SUyA4Ci0jZGVmaW5lIEVGWF9NQVhfTFJPX0FHR1IgTUFYX1NLQl9GUkFHUwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBCdWlsZCBkZWZpbml0aW9ucwpAQCAtMzQwLDEzICszMzYsMTIgQEAKICAqIEBldmVudHFfcmVhZF9wdHI6IEV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlcgogICogQGxhc3RfZXZlbnRxX3JlYWRfcHRyOiBMYXN0IGV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlciB2YWx1ZS4KICAqIEBldmVudHFfbWFnaWM6IEV2ZW50IHF1ZXVlIG1hZ2ljIHZhbHVlIGZvciBkcml2ZXItZ2VuZXJhdGVkIHRlc3QgZXZlbnRzCi0gKiBAbHJvX21ncjogTFJPIHN0YXRlCisgKiBAaXJxX2NvdW50OiBOdW1iZXIgb2YgSVJRcyBzaW5jZSBsYXN0IGFkYXB0aXZlIG1vZGVyYXRpb24gZGVjaXNpb24KKyAqIEBpcnFfbW9kX3Njb3JlOiBJUlEgbW9kZXJhdGlvbiBzY29yZQogICogQHJ4X2FsbG9jX2xldmVsOiBXYXRlcm1hcmsgYmFzZWQgaGV1cmlzdGljIGNvdW50ZXIgZm9yIHB1c2hpbmcgZGVzY3JpcHRvcnMKICAqCWFuZCBkaWFnbm9zdGljIGNvdW50ZXJzCiAgKiBAcnhfYWxsb2NfcHVzaF9wYWdlczogUlggYWxsb2NhdGlvbiBtZXRob2QgY3VycmVudGx5IGluIHVzZSBmb3IgcHVzaGluZwogICoJZGVzY3JpcHRvcnMKLSAqIEByeF9hbGxvY19wb3BfcGFnZXM6IFJYIGFsbG9jYXRpb24gbWV0aG9kIGN1cnJlbnRseSBpbiB1c2UgZm9yIHBvcHBpbmcKLSAqCWRlc2NyaXB0b3JzCiAgKiBAbl9yeF90b2JlX2Rpc2M6IENvdW50IG9mIFJYX1RPQkVfRElTQyBlcnJvcnMKICAqIEBuX3J4X2lwX2ZyYWdfZXJyOiBDb3VudCBvZiBSWCBJUCBmcmFnbWVudCBlcnJvcnMKICAqIEBuX3J4X2lwX2hkcl9jaGtzdW1fZXJyOiBDb3VudCBvZiBSWCBJUCBoZWFkZXIgY2hlY2tzdW0gZXJyb3JzCkBAIC0zNzEsMTAgKzM2NiwxMSBAQAogCXVuc2lnbmVkIGludCBsYXN0X2V2ZW50cV9yZWFkX3B0cjsKIAl1bnNpZ25lZCBpbnQgZXZlbnRxX21hZ2ljOwogCi0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CisJdW5zaWduZWQgaW50IGlycV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX21vZF9zY29yZTsKKwogCWludCByeF9hbGxvY19sZXZlbDsKIAlpbnQgcnhfYWxsb2NfcHVzaF9wYWdlczsKLQlpbnQgcnhfYWxsb2NfcG9wX3BhZ2VzOwogCiAJdW5zaWduZWQgbl9yeF90b2JlX2Rpc2M7CiAJdW5zaWduZWQgbl9yeF9pcF9mcmFnX2VycjsKQEAgLTM5NCwxMyArMzkwLDExIEBACiAKIC8qKgogICogc3RydWN0IGVmeF9ibGlua2VyIC0gUy9XIExFRCBibGlua2luZyBjb250ZXh0Ci0gKiBAbGVkX251bTogTEVEIElEIChib2FyZC1zcGVjaWZpYyBtZWFuaW5nKQogICogQHN0YXRlOiBDdXJyZW50IHN0YXRlIC0gb24gb3Igb2ZmCiAgKiBAcmVzdWJtaXQ6IFRpbWVyIHJlc3VibWlzc2lvbiBmbGFnCiAgKiBAdGltZXI6IENvbnRyb2wgdGltZXIgZm9yIGJsaW5raW5nCiAgKi8KIHN0cnVjdCBlZnhfYmxpbmtlciB7Ci0JaW50IGxlZF9udW07CiAJYm9vbCBzdGF0ZTsKIAlib29sIHJlc3VibWl0OwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtNDEzLDggKzQwNyw4IEBACiAgKiBAbWFqb3I6IE1ham9yIHJldi4gKCdBJywgJ0InIC4uLikKICAqIEBtaW5vcjogTWlub3IgcmV2LiAoMCwgMSwgLi4uKQogICogQGluaXQ6IEluaXRpYWxpc2F0aW9uIGZ1bmN0aW9uCi0gKiBAaW5pdF9sZWRzOiBTZXRzIHVwIGJvYXJkIExFRHMKLSAqIEBzZXRfZmF1bHRfbGVkOiBUdXJucyB0aGUgZmF1bHQgTEVEIG9uIG9yIG9mZgorICogQGluaXRfbGVkczogU2V0cyB1cCBib2FyZCBMRURzLiBNYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuCisgKiBAc2V0X2lkX2xlZDogVHVybnMgdGhlIGlkZW50aWZpY2F0aW9uIExFRCBvbiBvciBvZmYKICAqIEBibGluazogU3RhcnRzL3N0b3BzIGJsaW5raW5nCiAgKiBAbW9uaXRvcjogQm9hcmQtc3BlY2lmaWMgaGVhbHRoIGNoZWNrIGZ1bmN0aW9uCiAgKiBAZmluaTogQ2xlYW51cCBmdW5jdGlvbgpAQCAtNDMwLDkgKzQyNCw5IEBACiAJLyogQXMgdGhlIExFRHMgYXJlIHR5cGljYWxseSBhdHRhY2hlZCB0byB0aGUgUEhZLCBMRURzCiAJICogaGF2ZSBhIHNlcGFyYXRlIGluaXQgY2FsbGJhY2sgdGhhdCBoYXBwZW5zIGxhdGVyIHRoYW4KIAkgKiBib2FyZCBpbml0LiAqLwotCWludCAoKmluaXRfbGVkcykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJdm9pZCAoKmluaXRfbGVkcykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJdm9pZCAoKnNldF9pZF9sZWQpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKTsKIAlpbnQgKCptb25pdG9yKSAoc3RydWN0IGVmeF9uaWMgKm5pYyk7Ci0Jdm9pZCAoKnNldF9mYXVsdF9sZWQpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKTsKIAl2b2lkICgqYmxpbmspIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXJ0KTsKIAl2b2lkICgqZmluaSkgKHN0cnVjdCBlZnhfbmljICpuaWMpOwogCXN0cnVjdCBlZnhfYmxpbmtlciBibGlua2VyOwpAQCAtNDU5LDYgKzQ1Myw3IEBACiAJUEhZX1RZUEVfUVQyMDIyQzIgPSA0LAogCVBIWV9UWVBFX1BNODM1OCA9IDYsCiAJUEhZX1RZUEVfU0ZUOTAwMUEgPSA4LAorCVBIWV9UWVBFX1FUMjAyNUMgPSA5LAogCVBIWV9UWVBFX1NGVDkwMDFCID0gMTAsCiAJUEhZX1RZUEVfTUFYCS8qIEluc2VydCBhbnkgbmV3IGl0ZW1zIGJlZm9yZSB0aGlzICovCiB9OwpAQCAtNzEzLDYgKzcwOCw4IEBACiAgKiBAbWVtYmFzZTogTWVtb3J5IEJBUiB2YWx1ZQogICogQGJpdV9sb2NrOiBCSVUgKGJ1cyBpbnRlcmZhY2UgdW5pdCkgbG9jawogICogQGludGVycnVwdF9tb2RlOiBJbnRlcnJ1cHQgbW9kZQorICogQGlycV9yeF9hZGFwdGl2ZTogQWRhcHRpdmUgSVJRIG1vZGVyYXRpb24gZW5hYmxlZCBmb3IgUlggZXZlbnQgcXVldWVzCisgKiBAaXJxX3J4X21vZGVyYXRpb246IElSUSBtb2RlcmF0aW9uIHRpbWUgZm9yIFJYIGV2ZW50IHF1ZXVlcwogICogQGkyY19hZGFwOiBJMkMgYWRhcHRlcgogICogQGJvYXJkX2luZm86IEJvYXJkLWxldmVsIGluZm9ybWF0aW9uCiAgKiBAc3RhdGU6IERldmljZSBzdGF0ZSBmbGFnLiBTZXJpYWxpc2VkIGJ5IHRoZSBydG5sX2xvY2suCkBAIC03OTQsNiArNzkxLDggQEAKIAl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CiAJc3BpbmxvY2tfdCBiaXVfbG9jazsKIAllbnVtIGVmeF9pbnRfbW9kZSBpbnRlcnJ1cHRfbW9kZTsKKwlib29sIGlycV9yeF9hZGFwdGl2ZTsKKwl1bnNpZ25lZCBpbnQgaXJxX3J4X21vZGVyYXRpb247CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CiAJc3RydWN0IGVmeF9ib2FyZCBib2FyZF9pbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3BoeS5oIGIvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCmluZGV4IDA3ZTg1NWMuLmMxY2ZmOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9waHkuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvcGh5LmgKQEAgLTE4LDEyICsxOCwxNiBAQAogCiBleHRlcm4gdm9pZCB0ZW54cHJlc3NfcGh5X2JsaW5rKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgYmxpbmspOwogCisvKiBXYWl0IGZvciB0aGUgUEhZIHRvIGJvb3QuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIFBIWSBmYWlsZWQKKyAqIHRvIGJvb3QgZHVlIHRvIGNvcnJ1cHQgZmxhc2gsIG9yIHNvbWUgb3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZS4gKi8KK2V4dGVybiBpbnQgc2Z0OTAwMV93YWl0X2Jvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFeHBvcnRlZCBmdW5jdGlvbnMgZnJvbSB0aGUgZHJpdmVyIGZvciBYRlAgb3B0aWNhbCBQSFlzCisgKiBBTUNDL1F1YWtlIFFUMjB4eCBQSFlzCiAgKi8KIGV4dGVybiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl94ZnBfcGh5X29wczsKIAotLyogVGhlIFFVQUtFIFhGUCBQSFkgcHJvdmlkZXMgdmFyaW91cyBIL1cgY29udHJvbCBzdGF0ZXMgZm9yIExFRHMgKi8KKy8qIFRoZXNlIFBIWXMgcHJvdmlkZSB2YXJpb3VzIEgvVyBjb250cm9sIHN0YXRlcyBmb3IgTEVEcyAqLwogI2RlZmluZSBRVUFLRV9MRURfTElOS19JTlZBTAkoMCkKICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfU1RBVAkoMSkKICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfQUNUCSgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMgYi9kcml2ZXJzL25ldC9zZmMvcnguYwppbmRleCBiOGJhNGJiLi42NmQ3ZmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvcnguYwpAQCAtOTksMTA5ICs5OSw2IEBACiB9CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTGludXggZ2VuZXJpYyBMUk8gaGFuZGxpbmcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi1zdGF0aWMgaW50IGVmeF9scm9fZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwX2hkciwKLQkJCSAgICAgICB2b2lkICoqdGNwdWRwX2hkciwgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsID0gcHJpdjsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQlzdHJ1Y3QgdGNwaGRyICp0aDsKLQotCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7Ci0JaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApIHx8IGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCi0JCWdvdG8gZmFpbDsKLQotCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhICsgaXBoLT5paGwgKiA0KTsKLQotCSp0Y3B1ZHBfaGRyID0gdGg7Ci0JKmlwX2hkciA9IGlwaDsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCi0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0xSTzsKLQlyZXR1cm4gMDsKLWZhaWw6Ci0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX1NLQjsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgZWZ4X2dldF9mcmFnX2hkcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqbWFjX2hkciwKLQkJCSAgICB2b2lkICoqaXBfaGRyLCB2b2lkICoqdGNwdWRwX2hkciwgdTY0ICpoZHJfZmxhZ3MsCi0JCQkgICAgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwgPSBwcml2OwotCXN0cnVjdCBldGhoZHIgKmVoOwotCXN0cnVjdCBpcGhkciAqaXBoOwotCi0JLyogV2Ugc3VwcG9ydCBFdGhlcklJIGFuZCBWTEFOIGVuY2Fwc3VsYXRlZCBJUHY0ICovCi0JZWggPSBwYWdlX2FkZHJlc3MoZnJhZy0+cGFnZSkgKyBmcmFnLT5wYWdlX29mZnNldDsKLQkqbWFjX2hkciA9IGVoOwotCi0JaWYgKGVoLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSkgewotCQlpcGggPSAoc3RydWN0IGlwaGRyICopKGVoICsgMSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopZWg7Ci0JCWlmICh2ZWgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApKQotCQkJZ290byBmYWlsOwotCi0JCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikodmVoICsgMSk7Ci0JfQotCSppcF9oZHIgPSBpcGg7Ci0KLQkvKiBXZSBjYW4gb25seSBkbyBMUk8gb3ZlciBUQ1AgKi8KLQlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKLQkJZ290byBmYWlsOwotCi0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQkqdGNwdWRwX2hkciA9IChzdHJ1Y3QgdGNwaGRyICopKCh1OCAqKSBpcGggKyBpcGgtPmlobCAqIDQpOwotCi0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0xSTzsKLQlyZXR1cm4gMDsKLSBmYWlsOgotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9TS0I7Ci0JcmV0dXJuIC0xOwotfQotCi1pbnQgZWZ4X2xyb19pbml0KHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciwgc3RydWN0IGVmeF9uaWMgKmVmeCkKLXsKLQlzaXplX3QgcyA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIEVGWF9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCXN0cnVjdCBuZXRfbHJvX2Rlc2MgKmxyb19hcnI7Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgTFJPIGRlc2NyaXB0b3JzIHN0cnVjdHVyZSAqLwotCWxyb19hcnIgPSBremFsbG9jKHMsIEdGUF9LRVJORUwpOwotCWlmIChscm9fYXJyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHJvX21nci0+bHJvX2FyciA9IGxyb19hcnI7Ci0JbHJvX21nci0+bWF4X2Rlc2MgPSBFRlhfTUFYX0xST19ERVNDUklQVE9SUzsKLQlscm9fbWdyLT5tYXhfYWdnciA9IEVGWF9NQVhfTFJPX0FHR1I7Ci0JbHJvX21nci0+ZnJhZ19hbGlnbl9wYWQgPSBFRlhfUEFHRV9TS0JfQUxJR047Ci0KLQlscm9fbWdyLT5nZXRfc2tiX2hlYWRlciA9IGVmeF9scm9fZ2V0X3NrYl9oZHI7Ci0JbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gZWZ4X2dldF9mcmFnX2hkcjsKLQlscm9fbWdyLT5kZXYgPSBlZngtPm5ldF9kZXY7Ci0KLQlscm9fbWdyLT5mZWF0dXJlcyA9IExST19GX05BUEk7Ci0KLQkvKiBXZSBjYW4gcGFzcyBwYWNrZXRzIHVwIHdpdGggdGhlIGNoZWNrc3VtIGludGFjdCAqLwotCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCi0JbHJvX21nci0+aXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGVmeF9scm9fZmluaShzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IpCi17Ci0Ja2ZyZWUobHJvX21nci0+bHJvX2Fycik7Ci0JbHJvX21nci0+bHJvX2FyciA9IE5VTEw7Ci19Ci0KIC8qKgogICogZWZ4X2luaXRfcnhfYnVmZmVyX3NrYiAtIGNyZWF0ZSBuZXcgUlggYnVmZmVyIHVzaW5nIHNrYi1iYXNlZCBhbGxvY2F0aW9uCiAgKgpAQCAtNTQ5LDc3ICs0NDYsMzEgQEAKIHN0YXRpYyB2b2lkIGVmeF9yeF9wYWNrZXRfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYpCiB7Ci0Jc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyID0gJmNoYW5uZWwtPmxyb19tZ3I7Ci0Jdm9pZCAqcHJpdiA9IGNoYW5uZWw7CisJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gJmNoYW5uZWwtPm5hcGlfc3RyOwogCiAJLyogUGFzcyB0aGUgc2tiL3BhZ2UgaW50byB0aGUgTFJPIGVuZ2luZSAqLwogCWlmIChyeF9idWYtPnBhZ2UpIHsKLQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCBmcmFnczsKKwkJc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvIGluZm87CiAKLQkJZnJhZ3MucGFnZSA9IHJ4X2J1Zi0+cGFnZTsKLQkJZnJhZ3MucGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpOwotCQlmcmFncy5zaXplID0gcnhfYnVmLT5sZW47CisJCWluZm8uZnJhZ3NbMF0ucGFnZSA9IHJ4X2J1Zi0+cGFnZTsKKwkJaW5mby5mcmFnc1swXS5wYWdlX29mZnNldCA9IGVmeF9yeF9idWZfb2Zmc2V0KHJ4X2J1Zik7CisJCWluZm8uZnJhZ3NbMF0uc2l6ZSA9IHJ4X2J1Zi0+bGVuOworCQlpbmZvLm5yX2ZyYWdzID0gMTsKKwkJaW5mby5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJaW5mby5sZW4gPSByeF9idWYtPmxlbjsKIAotCQlscm9fcmVjZWl2ZV9mcmFncyhscm9fbWdyLCAmZnJhZ3MsIHJ4X2J1Zi0+bGVuLAotCQkJCSAgcnhfYnVmLT5sZW4sIHByaXYsIDApOworCQluYXBpX2dyb19mcmFncyhuYXBpLCAmaW5mbyk7CiAKIAkJRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPnNrYik7CiAJCXJ4X2J1Zi0+cGFnZSA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJRUZYX0JVR19PTl9QQVJBTk9JRCghcnhfYnVmLT5za2IpOwogCi0JCWxyb19yZWNlaXZlX3NrYihscm9fbWdyLCByeF9idWYtPnNrYiwgcHJpdik7CisJCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgcnhfYnVmLT5za2IpOwogCQlyeF9idWYtPnNrYiA9IE5VTEw7CiAJfQogfQogCi0vKiBBbGxvY2F0ZSBhbmQgY29uc3RydWN0IGFuIFNLQiBhcm91bmQgYSBzdHJ1Y3QgcGFnZS4qLwotc3RhdGljIHN0cnVjdCBza19idWZmICplZnhfcnhfbWtfc2tiKHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYsCi0JCQkJICAgICBzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAotCQkJCSAgICAgaW50IGhkcl9sZW4pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8qIEFsbG9jYXRlIGFuIFNLQiB0byBzdG9yZSB0aGUgaGVhZGVycyAqLwotCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZWZ4LT5uZXRfZGV2LCBoZHJfbGVuICsgRUZYX1BBR0VfU0tCX0FMSUdOKTsKLQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7Ci0JCUVGWF9FUlJfUkwoZWZ4LCAiUlggb3V0IG9mIG1lbW9yeSBmb3Igc2tiXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JRUZYX0JVR19PTl9QQVJBTk9JRChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKTsKLQlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+bGVuIDwgaGRyX2xlbik7Ci0KLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCXNrYl9yZXNlcnZlKHNrYiwgRUZYX1BBR0VfU0tCX0FMSUdOKTsKLQotCXNrYi0+bGVuID0gcnhfYnVmLT5sZW47Ci0Jc2tiLT50cnVlc2l6ZSA9IHJ4X2J1Zi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKLQltZW1jcHkoc2tiLT5kYXRhLCByeF9idWYtPmRhdGEsIGhkcl9sZW4pOwotCXNrYi0+dGFpbCArPSBoZHJfbGVuOwotCi0JLyogQXBwZW5kIHRoZSByZW1haW5pbmcgcGFnZSBvbnRvIHRoZSBmcmFnIGxpc3QgKi8KLQlpZiAodW5saWtlbHkocnhfYnVmLT5sZW4gPiBoZHJfbGVuKSkgewotCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsKLQkJZnJhZy0+cGFnZSA9IHJ4X2J1Zi0+cGFnZTsKLQkJZnJhZy0+cGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpICsgaGRyX2xlbjsKLQkJZnJhZy0+c2l6ZSA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDE7Ci0JCXNrYi0+ZGF0YV9sZW4gPSBmcmFnLT5zaXplOwotCX0gZWxzZSB7Ci0JCV9fZnJlZV9wYWdlcyhyeF9idWYtPnBhZ2UsIGVmeC0+cnhfYnVmZmVyX29yZGVyKTsKLQkJc2tiLT5kYXRhX2xlbiA9IDA7Ci0JfQotCi0JLyogT3duZXJzaGlwIGhhcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSByeF9idWYgdG8gc2tiICovCi0JcnhfYnVmLT5wYWdlID0gTlVMTDsKLQotCS8qIE1vdmUgcGFzdCB0aGUgZXRoZXJuZXQgaGVhZGVyICovCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZWZ4LT5uZXRfZGV2KTsKLQotCXJldHVybiBza2I7Ci19Ci0KIHZvaWQgZWZ4X3J4X3BhY2tldChzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSwgdW5zaWduZWQgaW50IGluZGV4LAogCQkgICB1bnNpZ25lZCBpbnQgbGVuLCBib29sIGNoZWNrc3VtbWVkLCBib29sIGRpc2NhcmQpCiB7CkBAIC02ODcsNyArNTM4LDYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JYm9vbCBscm8gPSAhIShlZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pOwogCiAJLyogSWYgd2UncmUgaW4gbG9vcGJhY2sgdGVzdCwgdGhlbiBwYXNzIHRoZSBwYWNrZXQgZGlyZWN0bHkgdG8gdGhlCiAJICogbG9vcGJhY2sgbGF5ZXIsIGFuZCBmcmVlIHRoZSByeF9idWYgaGVyZQpAQCAtNzA5LDQxICs1NTksMjMgQEAKIAkJCQkJCSAgICAgICBlZngtPm5ldF9kZXYpOwogCX0KIAotCS8qIEJvdGggb3VyIGdlbmVyaWMtTFJPIGFuZCBTRkMtU1NSIHN1cHBvcnQgc2tiIGFuZCBwYWdlIGJhc2VkCi0JICogYWxsb2NhdGlvbiwgYnV0IG5laXRoZXIgc3VwcG9ydCBzd2l0Y2hpbmcgZnJvbSBvbmUgdG8gdGhlCi0JICogb3RoZXIgb24gdGhlIGZseS4gSWYgd2Ugc3BvdCB0aGF0IHRoZSBhbGxvY2F0aW9uIG1vZGUgaGFzCi0JICogY2hhbmdlZCwgdGhlbiBmbHVzaCB0aGUgTFJPIHN0YXRlLgotCSAqLwotCWlmICh1bmxpa2VseShjaGFubmVsLT5yeF9hbGxvY19wb3BfcGFnZXMgIT0gKHJ4X2J1Zi0+cGFnZSAhPSBOVUxMKSkpIHsKLQkJZWZ4X2ZsdXNoX2xybyhjaGFubmVsKTsKLQkJY2hhbm5lbC0+cnhfYWxsb2NfcG9wX3BhZ2VzID0gKHJ4X2J1Zi0+cGFnZSAhPSBOVUxMKTsKLQl9Ci0JaWYgKGxpa2VseShjaGVja3N1bW1lZCAmJiBscm8pKSB7CisJaWYgKGxpa2VseShjaGVja3N1bW1lZCB8fCByeF9idWYtPnBhZ2UpKSB7CiAJCWVmeF9yeF9wYWNrZXRfbHJvKGNoYW5uZWwsIHJ4X2J1Zik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQkvKiBGb3JtIGFuIHNrYiBpZiByZXF1aXJlZCAqLwotCWlmIChyeF9idWYtPnBhZ2UpIHsKLQkJaW50IGhkcl9sZW4gPSBtaW4ocnhfYnVmLT5sZW4sIEVGWF9TS0JfSEVBREVSUyk7Ci0JCXNrYiA9IGVmeF9yeF9ta19za2IocnhfYnVmLCBlZngsIGhkcl9sZW4pOwotCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7Ci0JCQllZnhfZnJlZV9yeF9idWZmZXIoZWZ4LCByeF9idWYpOwotCQkJZ290byBkb25lOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogV2Ugbm93IG93biB0aGUgU0tCICovCi0JCXNrYiA9IHJ4X2J1Zi0+c2tiOwotCQlyeF9idWYtPnNrYiA9IE5VTEw7Ci0JfQorCS8qIFdlIG5vdyBvd24gdGhlIFNLQiAqLworCXNrYiA9IHJ4X2J1Zi0+c2tiOworCXJ4X2J1Zi0+c2tiID0gTlVMTDsKIAogCUVGWF9CVUdfT05fUEFSQU5PSUQocnhfYnVmLT5wYWdlKTsKIAlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+c2tiKTsKIAlFRlhfQlVHX09OX1BBUkFOT0lEKCFza2IpOwogCiAJLyogU2V0IHRoZSBTS0IgZmxhZ3MgKi8KLQlpZiAodW5saWtlbHkoIWNoZWNrc3VtbWVkIHx8ICFlZngtPnJ4X2NoZWNrc3VtX2VuYWJsZWQpKQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGNoYW5uZWwtPmNoYW5uZWwpOwogCiAJLyogUGFzcyB0aGUgcGFja2V0IHVwICovCiAJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKQEAgLTc2MCw3ICs1OTIsNyBAQAogCWVudW0gZWZ4X3J4X2FsbG9jX21ldGhvZCBtZXRob2QgPSByeF9hbGxvY19tZXRob2Q7CiAKIAkvKiBPbmx5IG1ha2VzIHNlbnNlIHRvIHVzZSBwYWdlIGJhc2VkIGFsbG9jYXRpb24gaWYgTFJPIGlzIGVuYWJsZWQgKi8KLQlpZiAoIShjaGFubmVsLT5lZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKSB7CisJaWYgKCEoY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSkgewogCQltZXRob2QgPSBSWF9BTExPQ19NRVRIT0RfU0tCOwogCX0gZWxzZSBpZiAobWV0aG9kID09IFJYX0FMTE9DX01FVEhPRF9BVVRPKSB7CiAJCS8qIENvbnN0cmFpbiB0aGUgcnhfYWxsb2NfbGV2ZWwgKi8KQEAgLTg2NSwxMSArNjk3LDYgQEAKIAlyeF9xdWV1ZS0+YnVmZmVyID0gTlVMTDsKIH0KIAotdm9pZCBlZnhfZmx1c2hfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlscm9fZmx1c2hfYWxsKCZjaGFubmVsLT5scm9fbWdyKTsKLX0KLQogCiBtb2R1bGVfcGFyYW0ocnhfYWxsb2NfbWV0aG9kLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9hbGxvY19tZXRob2QsICJBbGxvY2F0aW9uIG1ldGhvZCB1c2VkIGZvciBSWCBidWZmZXJzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcnguaCBiL2RyaXZlcnMvbmV0L3NmYy9yeC5oCmluZGV4IDBlODhhOWQuLjQyZWU3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9yeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5oCkBAIC0xNyw5ICsxNyw2IEBACiB2b2lkIGVmeF9pbml0X3J4X3F1ZXVlKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIHZvaWQgZWZ4X2ZpbmlfcnhfcXVldWUoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUpOwogCi1pbnQgZWZ4X2xyb19pbml0KHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciwgc3RydWN0IGVmeF9uaWMgKmVmeCk7Ci12b2lkIGVmeF9scm9fZmluaShzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IpOwotdm9pZCBlZnhfZmx1c2hfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CiB2b2lkIGVmeF9yeF9zdHJhdGVneShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOwogdm9pZCBlZnhfZmFzdF9wdXNoX3J4X2Rlc2NyaXB0b3JzKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIHZvaWQgZWZ4X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCmluZGV4IGNiMjVhZTUuLjRlYWM1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJlZnguaCIKICNpbmNsdWRlICJwaHkuaCIKQEAgLTM5OCw2ICszOTksNyBAQAogCiBpbnQgc2ZuNDExMXRfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCWludCBpID0gMDsKIAlpbnQgcmM7CiAKIAllZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50ID0KQEAgLTQxNiwxMyArNDE4LDIwIEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfaHdtb247CiAKLQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKLQkJZWZ4X3N0YXRzX2Rpc2FibGUoZWZ4KTsKLQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKLQl9CisJZG8geworCQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKKwkJCS8qIFBIWSBtYXkgbm90IGdlbmVyYXRlIGEgMTU2LjI1IE1IeiBjbG9jayBhbmQgTUFDCisJCQkgKiBzdGF0cyBmZXRjaCB3aWxsIGZhaWwuICovCisJCQllZnhfc3RhdHNfZGlzYWJsZShlZngpOworCQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKKwkJfQorCQlyYyA9IHNmdDkwMDFfd2FpdF9ib290KGVmeCk7CisJCWlmIChyYyA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVmeC0+cGh5X21vZGUgPSBQSFlfTU9ERV9TUEVDSUFMOworCX0gd2hpbGUgKHJjID09IC1FSU5WQUwgJiYgKytpIDwgMik7CiAKLQlyZXR1cm4gMDsKLQorCWRldmljZV9yZW1vdmVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsICZkZXZfYXR0cl9waHlfZmxhc2hfY2ZnKTsKIGZhaWxfaHdtb246CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGVmeC0+Ym9hcmRfaW5mby5od21vbl9jbGllbnQpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwppbmRleCBmMGVmZDI0Li5lNjFkYzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCkBAIC04LDYgKzgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiZWZ4LmgiCiAjaW5jbHVkZSAibWRpb18xMGcuaCIKQEAgLTE1NywxNCArMTU4LDE2IEBACiAjZGVmaW5lIFBDU18xMEdCQVNFVF9CTEtMS19XSURUSCAxCiAKIC8qIEJvb3Qgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIFBDU19CT09UX1NUQVRVU19SRUcJNTMyNDgKLSNkZWZpbmUgUENTX0JPT1RfRkFUQUxfRVJSX0xCTgkoMCkKLSNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfTEJOCSgxKQotI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSAkoMikKLSNkZWZpbmUgUENTX0JPT1RfQ09NUExFVEVfTEJOCSgzKQotCi0jZGVmaW5lIFBDU19CT09UX01BWF9ERUxBWQkoMTAwKQotI2RlZmluZSBQQ1NfQk9PVF9QT0xMX0RFTEFZCSgxMCkKKyNkZWZpbmUgUENTX0JPT1RfU1RBVFVTX1JFRwkJNTMyNDgKKyNkZWZpbmUgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOCTAKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfTEJOCQkxCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX1dJRFRICQkyCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0lOSVQJCTAKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfV0FJVF9NRElPCTEKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfQ0hFQ0tTVU0JMgorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19KVU1QCQkzCisjZGVmaW5lIFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOCTMKKyNkZWZpbmUgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTgk0CiAKIC8qIDEwME0vMUcgUEhZIHJlZ2lzdGVycyAqLwogI2RlZmluZSBHUEhZX1hDT05UUk9MX1JFRwk0OTE1MgpAQCAtMjI5LDQwICsyMzIsNjIgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwaHlfc2hvcnRfcmVhY2gsIDA2NDQsIHNob3dfcGh5X3Nob3J0X3JlYWNoLAogCQkgICBzZXRfcGh5X3Nob3J0X3JlYWNoKTsKIAotLyogQ2hlY2sgdGhhdCB0aGUgQzE2NiBoYXMgYm9vdGVkIHN1Y2Nlc3NmdWxseSAqLwotc3RhdGljIGludCB0ZW54cHJlc3NfcGh5X2NoZWNrKHN0cnVjdCBlZnhfbmljICplZngpCitpbnQgc2Z0OTAwMV93YWl0X2Jvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlpbnQgcGh5X2lkID0gZWZ4LT5taWkucGh5X2lkOwotCWludCBjb3VudCA9IFBDU19CT09UX01BWF9ERUxBWSAvIFBDU19CT09UX1BPTExfREVMQVk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaICsgMTsKIAlpbnQgYm9vdF9zdGF0OwogCi0JLyogV2FpdCBmb3IgdGhlIGJvb3QgdG8gY29tcGxldGUgKG9yIG5vdCkgKi8KLQl3aGlsZSAoY291bnQpIHsKLQkJYm9vdF9zdGF0ID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLAorCWZvciAoOzspIHsKKwkJYm9vdF9zdGF0ID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAogCQkJCQkgICAgICAgTURJT19NTURfUENTLAogCQkJCQkgICAgICAgUENTX0JPT1RfU1RBVFVTX1JFRyk7Ci0JCWlmIChib290X3N0YXQgJiAoMSA8PCBQQ1NfQk9PVF9DT01QTEVURV9MQk4pKQotCQkJYnJlYWs7Ci0JCWNvdW50LS07Ci0JCXVkZWxheShQQ1NfQk9PVF9QT0xMX0RFTEFZKTsKLQl9CisJCWlmIChib290X3N0YXQgPj0gMCkgeworCQkJRUZYX0xPRyhlZngsICJQSFkgYm9vdCBzdGF0dXMgPSAlI3hcbiIsIGJvb3Rfc3RhdCk7CisJCQlzd2l0Y2ggKGJvb3Rfc3RhdCAmCisJCQkJKCgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikgfAorCQkJCSAoMyA8PCBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCQkgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pIHwKKwkJCQkgKDEgPDwgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTikpKSB7CisJCQljYXNlICgoMSA8PCBQQ1NfQk9PVF9GQVRBTF9FUlJPUl9MQk4pIHwKKwkJCSAgICAgIChQQ1NfQk9PVF9QUk9HUkVTU19DSEVDS1NVTSA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikpOgorCQkJY2FzZSAoKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSB8CisJCQkgICAgICAoUENTX0JPT1RfUFJPR1JFU1NfSU5JVCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pKToKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNhc2UgKChQQ1NfQk9PVF9QUk9HUkVTU19XQUlUX01ESU8gPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSk6CisJCQkJcmV0dXJuIChlZngtPnBoeV9tb2RlICYgUEhZX01PREVfU1BFQ0lBTCkgPworCQkJCQkwIDogLUVJTzsKKwkJCWNhc2UgKChQQ1NfQk9PVF9QUk9HUkVTU19KVU1QIDw8CisJCQkgICAgICAgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9DT0RFX1NUQVJURURfTEJOKSk6CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfSlVNUCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4pKToKKwkJCQlyZXR1cm4gKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9TUEVDSUFMKSA/CisJCQkJCS1FSU8gOiAwOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoYm9vdF9zdGF0ICYgKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSkKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAotCWlmICghY291bnQpIHsKLQkJRUZYX0VSUihlZngsICIlczogUEhZIGJvb3QgdGltZWQgb3V0LiBMYXN0IHN0YXR1cyAiCi0JCQkiJXhcbiIsIF9fZnVuY19fLAotCQkJKGJvb3Rfc3RhdCA+PiBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pICYKLQkJCSgoMSA8PCBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSCkgLSAxKSk7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0KKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAotCXJldHVybiAwOworCQltc2xlZXAoNTApOworCX0KIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3NfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7CiAJaW50IHJlZzsKLQlpbnQgcmM7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7CiAJCS8qIEVuYWJsZSAzMTIuNSBNSHogY2xvY2sgKi8KQEAgLTI4NSwxMCArMzEwLDYgQEAKIAkJCQkgICAgICAgZmFsc2UpOwogCX0KIAotCXJjID0gdGVueHByZXNzX3BoeV9jaGVjayhlZngpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQogCS8qIFNldCB0aGUgTEVEcyB1cCBhczogR3JlZW4gPSBMaW5rLCBBbWJlciA9IExpbmsvQWN0LCBSZWQgPSBPZmYgKi8KIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7CiAJCW1kaW9fY2xhdXNlNDVfc2V0X2ZsYWcoZWZ4LCBwaHlfaWQsIE1ESU9fTU1EX1BNQVBNRCwKQEAgLTI5OSw3ICszMjAsNyBAQAogCQkJCSAgICBQTUFfUE1EX0xFRF9PVkVSUl9SRUcsIFBNQV9QTURfTEVEX0RFRkFVTFQpOwogCX0KIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3NfcGh5X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU3MSwxNSArNTkyLDE0IEBACiBzdGF0aWMgdm9pZCB0ZW54cHJlc3NfcGh5X3BvbGwoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgdGVueHByZXNzX3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7Ci0JYm9vbCBjaGFuZ2UgPSBmYWxzZSwgbGlua19vazsKLQl1bnNpZ25lZCBsaW5rX2ZjOworCWJvb2wgY2hhbmdlID0gZmFsc2U7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7Ci0JCWxpbmtfb2sgPSBzZng3MTAxX2xpbmtfb2soZWZ4KTsKKwkJYm9vbCBsaW5rX29rID0gc2Z4NzEwMV9saW5rX29rKGVmeCk7CiAJCWlmIChsaW5rX29rICE9IGVmeC0+bGlua191cCkgewogCQkJY2hhbmdlID0gdHJ1ZTsKIAkJfSBlbHNlIHsKLQkJCWxpbmtfZmMgPSBtZGlvX2NsYXVzZTQ1X2dldF9wYXVzZShlZngpOworCQkJdW5zaWduZWQgaW50IGxpbmtfZmMgPSBtZGlvX2NsYXVzZTQ1X2dldF9wYXVzZShlZngpOwogCQkJaWYgKGxpbmtfZmMgIT0gZWZ4LT5saW5rX2ZjKQogCQkJCWNoYW5nZSA9IHRydWU7CiAJCX0KQEAgLTY3OSwxMiArNjk5LDEwIEBACiB7CiAJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CiAJaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKLQlpbnQgcmMgPSAwLCByYzIsIGksIHJlc19yZWc7CisJaW50IHJjID0gMCwgcmMyLCBpLCBjdHJsX3JlZywgcmVzX3JlZzsKIAotCWlmICghKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkpCi0JCXJldHVybiAwOwotCi0JZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZlY21kKTsKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKQorCQllZngtPnBoeV9vcC0+Z2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOwogCiAJLyogSW5pdGlhbGlzZSBjYWJsZSBkaWFnbm9zdGljIHJlc3VsdHMgdG8gdW5rbm93biBmYWlsdXJlICovCiAJZm9yIChpID0gMTsgaSA8IDk7ICsraSkKQEAgLTY5MiwxOCArNzEwLDIyIEBACiAKIAkvKiBSdW4gY2FibGUgZGlhZ25vc3RpY3M7IHdhaXQgdXAgdG8gNSBzZWNvbmRzIGZvciB0aGVtIHRvIGNvbXBsZXRlLgogCSAqIEEgY2FibGUgZmF1bHQgaXMgbm90IGEgc2VsZi10ZXN0IGZhaWx1cmUsIGJ1dCBhIHRpbWVvdXQgaXMuICovCisJY3RybF9yZWcgPSAoKDEgPDwgQ0RJQUdfQ1RSTF9JTU1FRF9MQk4pIHwKKwkJICAgIChDRElBR19DVFJMX0xFTl9NRVRSRVMgPDwgQ0RJQUdfQ1RSTF9MRU5fVU5JVF9MQk4pKTsKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIEJyZWFrIHRoZSBsaW5rIGluIG9yZGVyIHRvIHJ1biBmdWxsIGRpYWdub3N0aWNzLiAgV2UKKwkJICogbXVzdCByZXNldCB0aGUgUEhZIHRvIHJlc3VtZSBub3JtYWwgc2VydmljZS4gKi8KKwkJY3RybF9yZWcgfD0gKDEgPDwgQ0RJQUdfQ1RSTF9CUktfTElOS19MQk4pOworCX0KIAltZGlvX2NsYXVzZTQ1X3dyaXRlKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCi0JCQkgICAgUE1BX1BNRF9DRElBR19DVFJMX1JFRywKLQkJCSAgICAoMSA8PCBDRElBR19DVFJMX0lNTUVEX0xCTikgfAotCQkJICAgICgxIDw8IENESUFHX0NUUkxfQlJLX0xJTktfTEJOKSB8Ci0JCQkgICAgKENESUFHX0NUUkxfTEVOX01FVFJFUyA8PCBDRElBR19DVFJMX0xFTl9VTklUX0xCTikpOworCQkJICAgIFBNQV9QTURfQ0RJQUdfQ1RSTF9SRUcsIGN0cmxfcmVnKTsKIAlpID0gMDsKIAl3aGlsZSAobWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCiAJCQkJICBQTUFfUE1EX0NESUFHX0NUUkxfUkVHKSAmCiAJICAgICAgICgxIDw8IENESUFHX0NUUkxfSU5fUFJPR19MQk4pKSB7CiAJCWlmICgrK2kgPT0gNTApIHsKIAkJCXJjID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gcmVzZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCQltc2xlZXAoMTAwKTsKIAl9CkBAIC03MjgsMTcgKzc1MCwxOCBAQAogCQkJcmVzdWx0c1s1ICsgaV0gPSBsZW5fcmVnOwogCX0KIAotCS8qIFdlIG11c3QgcmVzZXQgdG8gZXhpdCBjYWJsZSBkaWFnbm9zdGljIG1vZGUuICBUaGUgQklTVCB3aWxsCi0JICogYWxzbyBydW4gd2hlbiB3ZSBkbyB0aGlzLiAqLwotcmVzZXQ6Ci0JcmMyID0gdGVueHByZXNzX3NwZWNpYWxfcmVzZXQoZWZ4KTsKLQlyZXN1bHRzWzBdID0gcmMyID8gLTEgOiAxOwotCWlmICghcmMpCi0JCXJjID0gcmMyOworb3V0OgorCWlmIChmbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKKwkJLyogUmVzZXQsIHJ1bm5pbmcgdGhlIEJJU1QgYW5kIHRoZW4gcmVzdW1pbmcgbm9ybWFsIHNlcnZpY2UuICovCisJCXJjMiA9IHRlbnhwcmVzc19zcGVjaWFsX3Jlc2V0KGVmeCk7CisJCXJlc3VsdHNbMF0gPSByYzIgPyAtMSA6IDE7CisJCWlmICghcmMpCisJCQlyYyA9IHJjMjsKIAotCXJjMiA9IGVmeC0+cGh5X29wLT5zZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7Ci0JaWYgKCFyYykKLQkJcmMgPSByYzI7CisJCXJjMiA9IGVmeC0+cGh5X29wLT5zZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7CisJCWlmICghcmMpCisJCQlyYyA9IHJjMjsKKwl9CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHguYyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCmluZGV4IGRhM2U5ZmYuLmQ2NjgxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCkBAIC0xNjIsNiArMTYyLDE0IEBACiAJLyogR2V0IHNpemUgb2YgdGhlIGluaXRpYWwgZnJhZ21lbnQgKi8KIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCisJLyogUGFkIGlmIG5lY2Vzc2FyeSAqLworCWlmIChFRlhfV09SS0FST1VORF8xNTU5MihlZngpICYmIHNrYi0+bGVuIDw9IDMyKSB7CisJCUVGWF9CVUdfT05fUEFSQU5PSUQoc2tiLT5kYXRhX2xlbik7CisJCWxlbiA9IDMyICsgMTsKKwkJaWYgKHNrYl9wYWQoc2tiLCBsZW4gLSBza2ItPmxlbikpCisJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKwogCWZpbGxfbGV2ZWwgPSB0eF9xdWV1ZS0+aW5zZXJ0X2NvdW50IC0gdHhfcXVldWUtPm9sZF9yZWFkX2NvdW50OwogCXFfc3BhY2UgPSBlZngtPnR5cGUtPnR4ZF9yaW5nX21hc2sgLSAxIC0gZmlsbF9sZXZlbDsKIApAQCAtMzc2LDYgKzM4NCw5IEBACiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwogCisJaWYgKHVubGlrZWx5KGVmeC0+cG9ydF9pbmhpYml0ZWQpKQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisKIAlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQogCQl0eF9xdWV1ZSA9ICZlZngtPnR4X3F1ZXVlW0VGWF9UWF9RVUVVRV9PRkZMT0FEX0NTVU1dOwogCWVsc2UKQEAgLTM5Nyw3ICs0MDgsNyBAQAogCSAqIHNlcGFyYXRlcyB0aGUgdXBkYXRlIG9mIHJlYWRfY291bnQgZnJvbSB0aGUgdGVzdCBvZgogCSAqIHN0b3BwZWQuICovCiAJc21wX21iKCk7Ci0JaWYgKHVubGlrZWx5KHR4X3F1ZXVlLT5zdG9wcGVkKSkgeworCWlmICh1bmxpa2VseSh0eF9xdWV1ZS0+c3RvcHBlZCkgJiYgbGlrZWx5KGVmeC0+cG9ydF9lbmFibGVkKSkgewogCQlmaWxsX2xldmVsID0gdHhfcXVldWUtPmluc2VydF9jb3VudCAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50OwogCQlpZiAoZmlsbF9sZXZlbCA8IEVGWF9ORVRERVZfVFhfVEhSRVNIT0xEKHR4X3F1ZXVlKSkgewogCQkJRUZYX0JVR19PTl9QQVJBTk9JRCghZWZ4X2Rldl9yZWdpc3RlcmVkKGVmeCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmggYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAppbmRleCA3OGRlNjhmLi5jODIxYzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaApAQCAtMzYsNiArMzYsOCBAQAogI2RlZmluZSBFRlhfV09SS0FST1VORF8xMTQ4MiBFRlhfV09SS0FST1VORF9BTFdBWVMKIC8qIEZsdXNoIGV2ZW50cyBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lIHRvIGFwcGVhciAqLwogI2RlZmluZSBFRlhfV09SS0FST1VORF8xMTU1NyBFRlhfV09SS0FST1VORF9BTFdBWVMKKy8qIFRydW5jYXRlZCBJUHY0IHBhY2tldHMgY2FuIGNvbmZ1c2UgdGhlIFRYIHBhY2tldCBwYXJzZXIgKi8KKyNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTU1OTIgRUZYX1dPUktBUk9VTkRfQUxXQVlTCiAKIC8qIFNwdXJpb3VzIHBhcml0eSBlcnJvcnMgaW4gVFNPUlQgYnVmZmVycyAqLwogI2RlZmluZSBFRlhfV09SS0FST1VORF81MTI5IEVGWF9XT1JLQVJPVU5EX0ZBTENPTl9BCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYwppbmRleCAyZDUwYjZlLi5iYjFlZjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKQEAgLTcsOCArNyw4IEBACiAgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqLwogLyoKLSAqIERyaXZlciBmb3IgWEZQIG9wdGljYWwgUEhZcyAocGx1cyBzb21lIHN1cHBvcnQgc3BlY2lmaWMgdG8gdGhlIFF1YWtlIDIwMjIvMzIpCi0gKiBTZWUgd3d3LmFtY2MuY29tIGZvciBkZXRhaWxzIChzZWFyY2ggZm9yIHF0MjAzMikKKyAqIERyaXZlciBmb3IgU0ZQKyBhbmQgWEZQIG9wdGljYWwgUEhZcyBwbHVzIHNvbWUgc3VwcG9ydCBzcGVjaWZpYyB0byB0aGUKKyAqIEFNQ0MgUVQyMHh4IGFkYXB0ZXJzOyBzZWUgd3d3LmFtY2MuY29tIGZvciBkZXRhaWxzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0zMSw2ICszMSwyMSBAQAogLyogUXVha2Utc3BlY2lmaWMgTURJTyByZWdpc3RlcnMgKi8KICNkZWZpbmUgTURJT19RVUFLRV9MRUQwX1JFRwkoMHhEMDA2KQogCisvKiBRVDIwMjVDIG9ubHkgKi8KKyNkZWZpbmUgUENTX0ZXX0hFQVJUQkVBVF9SRUcJMHhkN2VlCisjZGVmaW5lIFBDU19GV19IRUFSVEJfTEJOCTAKKyNkZWZpbmUgUENTX0ZXX0hFQVJUQl9XSURUSAk4CisjZGVmaW5lIFBDU19VQzgwNTFfU1RBVFVTX1JFRwkweGQ3ZmQKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19MQk4JMAorI2RlZmluZSBQQ1NfVUNfU1RBVFVTX1dJRFRICTgKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19GV19TQVZFCTB4MjAKKyNkZWZpbmUgUE1BX1BNRF9GVFhfQ1RSTDJfUkVHCTB4YzMwOQorI2RlZmluZSBQTUFfUE1EX0ZUWF9TVEFUSUNfTEJOCTEzCisjZGVmaW5lIFBNQV9QTURfVkVORDFfUkVHCTB4YzAwMQorI2RlZmluZSBQTUFfUE1EX1ZFTkQxX0xCVFhEX0xCTgkxNQorI2RlZmluZSBQQ1NfVkVORDFfUkVHCSAgIAkweGMwMDAKKyNkZWZpbmUgUENTX1ZFTkQxX0xCVFhEX0xCTgk1CisKIHZvaWQgeGZwX3NldF9sZWQoc3RydWN0IGVmeF9uaWMgKnAsIGludCBsZWQsIGludCBtb2RlKQogewogCWludCBhZGRyID0gTURJT19RVUFLRV9MRUQwX1JFRyArIGxlZDsKQEAgLTQ1LDcgKzYwLDQ5IEBACiAjZGVmaW5lIFhGUF9NQVhfUkVTRVRfVElNRSA1MDAKICNkZWZpbmUgWEZQX1JFU0VUX1dBSVQgMTAKIAotLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIChmb3IgdGhlIFF1YWtlIFBIWSkgYXMgZG9pbmcKK3N0YXRpYyBpbnQgcXQyMDI1Y193YWl0X3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFo7CisJaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKKwlpbnQgcmVnLCBvbGRfY291bnRlciA9IDA7CisKKwkvKiBXYWl0IGZvciBmaXJtd2FyZSBoZWFydGJlYXQgdG8gc3RhcnQgKi8KKwlmb3IgKDs7KSB7CisJCWludCBjb3VudGVyOworCQlyZWcgPSBtZGlvX2NsYXVzZTQ1X3JlYWQoZWZ4LCBwaHlfaWQsIE1ESU9fTU1EX1BDUywKKwkJCQkJIFBDU19GV19IRUFSVEJFQVRfUkVHKTsKKwkJaWYgKHJlZyA8IDApCisJCQlyZXR1cm4gcmVnOworCQljb3VudGVyID0gKChyZWcgPj4gUENTX0ZXX0hFQVJUQl9MQk4pICYKKwkJCSAgICAoKDEgPDwgUENTX0ZXX0hFQVJUQl9XSURUSCkgLSAxKSk7CisJCWlmIChvbGRfY291bnRlciA9PSAwKQorCQkJb2xkX2NvdW50ZXIgPSBjb3VudGVyOworCQllbHNlIGlmIChjb3VudGVyICE9IG9sZF9jb3VudGVyKQorCQkJYnJlYWs7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCW1zbGVlcCgxMCk7CisJfQorCisJLyogV2FpdCBmb3IgZmlybXdhcmUgc3RhdHVzIHRvIGxvb2sgZ29vZCAqLworCWZvciAoOzspIHsKKwkJcmVnID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QQ1MsCisJCQkJCSBQQ1NfVUM4MDUxX1NUQVRVU19SRUcpOworCQlpZiAocmVnIDwgMCkKKwkJCXJldHVybiByZWc7CisJCWlmICgocmVnICYKKwkJICAgICAoKDEgPDwgUENTX1VDX1NUQVRVU19XSURUSCkgLSAxKSA8PCBQQ1NfVUNfU1RBVFVTX0xCTikgPj0KKwkJICAgIFBDU19VQ19TVEFUVVNfRldfU0FWRSkKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQltc2xlZXAoMTAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIChmb3IgdGhlIFF1YWtlIFBIWXMpIGFzIGRvaW5nCiAgKiBhIGNvbXBsZXRlIHNvZnQgcmVzZXQuCiAgKi8KIHN0YXRpYyBpbnQgeGZwX3Jlc2V0X3BoeShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtNTgsNiArMTE1LDEyIEBACiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwogCisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykgeworCQlyYyA9IHF0MjAyNWNfd2FpdF9yZXNldChlZngpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBmYWlsOworCX0KKwogCS8qIFdhaXQgMjUwbXMgZm9yIHRoZSBQSFkgdG8gY29tcGxldGUgYm9vdHVwICovCiAJbXNsZWVwKDI1MCk7CiAKQEAgLTczLDcgKzEzNiw3IEBACiAJcmV0dXJuIHJjOwogCiAgZmFpbDoKLQlFRlhfRVJSKGVmeCwgIlhGUDogcmVzZXQgdGltZWQgb3V0IVxuIik7CisJRUZYX0VSUihlZngsICJQSFkgcmVzZXQgdGltZWQgb3V0XG4iKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTg4LDE1ICsxNTEsMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZWZ4LT5waHlfZGF0YSA9IHBoeV9kYXRhOwogCi0JRUZYX0lORk8oZWZ4LCAiWEZQOiBQSFkgSUQgcmVnICV4IChPVUkgJXggbW9kZWwgJXggcmV2aXNpb24iCi0JCSAiICV4KVxuIiwgZGV2aWQsIE1ESU9fSURfT1VJKGRldmlkKSwgTURJT19JRF9NT0RFTChkZXZpZCksCi0JCSBNRElPX0lEX1JFVihkZXZpZCkpOworCUVGWF9JTkZPKGVmeCwgIlBIWSBJRCByZWcgJXggKE9VSSAlMDZ4IG1vZGVsICUwMnggcmV2aXNpb24gJXgpXG4iLAorCQkgZGV2aWQsIG1kaW9faWRfb3VpKGRldmlkKSwgbWRpb19pZF9tb2RlbChkZXZpZCksCisJCSBtZGlvX2lkX3JldihkZXZpZCkpOwogCiAJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKIAogCXJjID0geGZwX3Jlc2V0X3BoeShlZngpOwogCi0JRUZYX0lORk8oZWZ4LCAiWEZQOiBQSFkgaW5pdCAlcy5cbiIsCisJRUZYX0lORk8oZWZ4LCAiUEhZIGluaXQgJXMuXG4iLAogCQkgcmMgPyAiZmFpbGVkIiA6ICJzdWNjZXNzZnVsIik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwpAQCAtMTMxLDEyICsxOTQsMjggQEAKIHsKIAlzdHJ1Y3QgeGZwX3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7CiAKLQkvKiBSZXNldCB0aGUgUEhZIHdoZW4gbW92aW5nIGZyb20gdHggb2ZmIHRvIHR4IG9uICovCi0JaWYgKCEoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSAmJgotCSAgICAocGh5X2RhdGEtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpKQotCQl4ZnBfcmVzZXRfcGh5KGVmeCk7CisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykgeworCQkvKiBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgcmVnaXN0ZXIgYml0cyB3aGljaCBjYW4KKwkJICogZGlzYWJsZSBUWCAoYW5kIHNhdmUgcG93ZXIpIG9uIGRpcmVjdC1hdHRhY2ggY2FibGVzCisJCSAqIG9yIG9wdGljYWwgdHJhbnNjZWl2ZXJzLCB2YXJ5aW5nIHNvbWV3aGF0IGJldHdlZW4KKwkJICogZmlybXdhcmUgdmVyc2lvbnMuICBPbmx5ICdzdGF0aWMgbW9kZScgYXBwZWFycyB0bworCQkgKiBjb3ZlciBldmVyeXRoaW5nLiAqLworCQltZGlvX2NsYXVzZTQ1X3NldF9mbGFnKAorCQkJZWZ4LCBlZngtPm1paS5waHlfaWQsIE1ESU9fTU1EX1BNQVBNRCwKKwkJCVBNQV9QTURfRlRYX0NUUkwyX1JFRywgUE1BX1BNRF9GVFhfU1RBVElDX0xCTiwKKwkJCWVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9UWF9ESVNBQkxFRCB8fAorCQkJZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX0xPV19QT1dFUiB8fAorCQkJZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1BDUyB8fAorCQkJZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1BNQVBNRCk7CisJfSBlbHNlIHsKKwkJLyogUmVzZXQgdGhlIFBIWSB3aGVuIG1vdmluZyBmcm9tIHR4IG9mZiB0byB0eCBvbiAqLworCQlpZiAoIShlZngtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpICYmCisJCSAgICAocGh5X2RhdGEtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpKQorCQkJeGZwX3Jlc2V0X3BoeShlZngpOwogCi0JbWRpb19jbGF1c2U0NV90cmFuc21pdF9kaXNhYmxlKGVmeCk7CisJCW1kaW9fY2xhdXNlNDVfdHJhbnNtaXRfZGlzYWJsZShlZngpOworCX0KKwogCW1kaW9fY2xhdXNlNDVfcGh5X3JlY29uZmlndXJlKGVmeCk7CiAKIAlwaHlfZGF0YS0+cGh5X21vZGUgPSBlZngtPnBoeV9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCBiZTQ0NjViYy4uOGE3MGRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTgwLDggKzgwLDggQEAKICNkZWZpbmUgU0lTOTAwX01PRFVMRV9OQU1FICJzaXM5MDAiCiAjZGVmaW5lIFNJUzkwMF9EUlZfVkVSU0lPTiAidjEuMDguMTAgQXByLiAyIDIwMDYiCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CiAKIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNDA7CiBzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmggYi9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKaW5kZXggOTQzMjU5MS4uMTc1OGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaApAQCAtNDY3LDUgKzQ2NywyMiBAQAogI2VuZGlmCS8qIERFQlVHX0JSRCAmJiBERUJVRyAqLwogfSA7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmRkaV9hZGRyIGZkZGlfYnJvYWRjYXN0OworCitleHRlcm4gdm9pZCBhbGxfc2VsZWN0aW9uX2NyaXRlcmlhKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIGNhcmRfc3RvcChzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X2JvYXJkKHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKm1hY19hZGRyKTsKK2V4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X3BsYyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gaW50IGluaXRfc210KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CitleHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKK2V4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKK2V4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKK2V4dGVybiBpbnQgcGNtX3N0YXR1c190d2lzdGVkKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzFfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHJlYWRfYWRkcmVzcyhzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOworZXh0ZXJuIHZvaWQgdGltZXJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKKwogI2VuZGlmCS8qIF9TQ01FQ01fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwppbmRleCA0MjE4ZTk3Li5kMzIyZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCkBAIC05NywyMyArOTcsMTUgQEAKIAogZXh0ZXJuIHZvaWQqIG1hY19kcnZfZ2V0X3NwYWNlKHN0cnVjdCBzX3NtYyAqc21jLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCogbWFjX2Rydl9nZXRfZGVzY19tZW0oc3RydWN0IHNfc21jICpzbWMsIHVuc2lnbmVkIGludCBzaXplKTsKLWV4dGVybiB2b2lkIGluaXRfYm9hcmQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqbWFjX2FkZHIpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9maWxsX3J4ZChzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBwbGMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3R4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF90eGQgKnR4ZCk7Ci1leHRlcm4gdm9pZCBwbGMyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKLWV4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKLWV4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKLWV4dGVybiB2b2lkIHRpbWVyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3J4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF9yeGQgKnJ4ZCwKIAkJCQlpbnQgZnJhZ19jb3VudCwgaW50IGxlbik7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3JlcXVldWVfcnhkKHN0cnVjdCBzX3NtYyAqc21jLCAKIAkJCQl2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsCiAJCQkJaW50IGZyYWdfY291bnQpOwotZXh0ZXJuIHZvaWQgaW5pdF9wbGMoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9jbGVhcl9yeGQoc3RydWN0IHNfc21jICpzbWMsCiAJCQkgICAgICB2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsIGludCBmcmFnX2NvdW50KTsKIApAQCAtMTM2LDcgKzEyOCw2IEBACiAJCQkgaW50IGZsYWcpOwogI2VuZGlmCiAKLWV4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gaW50IG1hY19kcnZfcnhfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGxlbiwgaW50IGZjLCBjaGFyICpsb29rX2FoZWFkLAogCQkJICAgaW50IGxhX2xlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCmluZGV4IDc0ZTEyOWYuLmYxZGYyZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwpAQCAtMTk4LDkgKzE5OCw2IEBACiBzdGF0aWMgY29uc3QgaW50IHBsY19pbXNrX2FjdCA9IFBMX1BDTV9DT0RFIHwgUExfVFJBQ0VfUFJPUCB8IFBMX1BDTV9CUkVBSyB8CiAJCQlQTF9QQ01fRU5BQkxFRCB8IFBMX1NFTEZfVEVTVCB8IFBMX0VCVUZfRVJSOwogCi0vKiBleHRlcm5hbCBmdW5jdGlvbnMgKi8KLXZvaWQgYWxsX3NlbGVjdGlvbl9jcml0ZXJpYShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci0KIC8qIGludGVybmFsIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgcGNtX2ZzbShzdHJ1Y3Qgc19zbWMgKnNtYywgc3RydWN0IHNfcGh5ICpwaHksIGludCBjbWQpOwogc3RhdGljIHZvaWQgcGNfcmNvZGVfYWN0aW9ucyhzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGJpdCwgc3RydWN0IHNfcGh5ICpwaHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggOWEwMGU1NS4uZTE0YWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCkBAIC0xMzUsMTQgKzEzNSwxMSBAQAogCiAvLyBFeHRlcm5hbCBmdW5jdGlvbnMgZnJvbSB0aGUgaGFyZHdhcmUgbW9kdWxlCiBleHRlcm4gdV9pbnQgbWFjX2Rydl9jaGVja19zcGFjZSh2b2lkKTsKLWV4dGVybiB2b2lkIHJlYWRfYWRkcmVzcyhzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOwotZXh0ZXJuIHZvaWQgY2FyZF9zdG9wKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiBpbnQgbWFjX2Rydl9pbml0KHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIGh3bV90eF9mcmFnKHN0cnVjdCBzX3NtYyAqc21jLCBjaGFyIGZhciAqIHZpcnQsIHVfbG9uZyBwaHlzLAogCQkJaW50IGxlbiwgaW50IGZyYW1lX3N0YXR1cyk7CiBleHRlcm4gaW50IGh3bV90eF9pbml0KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgZmMsIGludCBmcmFnX2NvdW50LAogCQkgICAgICAgaW50IGZyYW1lX2xlbiwgaW50IGZyYW1lX3N0YXR1cyk7Ci1leHRlcm4gaW50IGluaXRfc210KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CiBleHRlcm4gdm9pZCBmZGRpX2lzcihzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBod21fcnhfZnJhZyhzdHJ1Y3Qgc19zbWMgKnNtYywgY2hhciBmYXIgKiB2aXJ0LCB1X2xvbmcgcGh5cywKIAkJCWludCBsZW4sIGludCBmcmFtZV9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKaW5kZXggODA1MzgzYi4uODNkMTZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCkBAIC01NSwxNiArNTUsNiBAQAogfSA7CiAKIC8qCi0gKiBleHRlcm5hbCB2YXJpYWJsZXMKLSAqLwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmZGRpX2FkZHIgZmRkaV9icm9hZGNhc3QgOwotCi0vKgotICogZXh0ZXJuYWwgZnVuY3Rpb25zCi0gKi8KLWludCBwY21fc3RhdHVzX3R3aXN0ZWQoc3RydWN0IHNfc21jICpzbWMpOwotCi0vKgogICogZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiAjaWZkZWYJTElUVExFX0VORElBTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IGM5ZGJiMDYuLjk1MmQzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTMyMTQsNyArMzIxNCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5od19sb2NrLCBmbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaHctPmludHJfbWFzayB8PSBuYXBpbWFza1tza2dlLT5wb3J0XTsKIAkJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKIAkJc2tnZV9yZWFkMzIoaHcsIEIwX0lNU0spOwpAQCAtMzM3Nyw3ICszMzc3LDcgQEAKIAlpZiAoc3RhdHVzICYgKElTX1hBMV9GfElTX1IxX0YpKSB7CiAJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2WzBdKTsKIAkJaHctPmludHJfbWFzayAmPSB+KElTX1hBMV9GfElTX1IxX0YpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmc2tnZS0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOwogCX0KIAogCWlmIChzdGF0dXMgJiBJU19QQV9UT19UWDEpCkBAIC0zMzk3LDcgKzMzOTcsNyBAQAogCiAJCWlmIChzdGF0dXMgJiAoSVNfWEEyX0Z8SVNfUjJfRikpIHsKIAkJCWh3LT5pbnRyX21hc2sgJj0gfihJU19YQTJfRnxJU19SMl9GKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOwogCQl9CiAKIAkJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1JYMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDk5NDcwM2MuLmQwMWM1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTEwNjgsMTMgKzEwNjgsMTYgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBza3kyX3J4X21hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlLAorc3RhdGljIGludCBza3kyX3J4X21hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlLAogCQkJICAgIHVuc2lnbmVkIHNpemUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJlLT5za2I7CiAJaW50IGk7CiAKIAlyZS0+ZGF0YV9hZGRyID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgcmUtPmRhdGFfYWRkcikpKQorCQlyZXR1cm4gLUVJTzsKKwogCXBjaV91bm1hcF9sZW5fc2V0KHJlLCBkYXRhX3NpemUsIHNpemUpOwogCiAJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKQEAgLTEwODMsNiArMTA4Niw3IEBACiAJCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAogCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAogCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9yeF91bm1hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlKQpAQCAtMTM1NCw3ICsxMzU4LDEyIEBACiAJCWlmICghcmUtPnNrYikKIAkJCWdvdG8gbm9tZW07CiAKLQkJc2t5Ml9yeF9tYXBfc2tiKGh3LT5wZGV2LCByZSwgc2t5Mi0+cnhfZGF0YV9zaXplKTsKKwkJaWYgKHNreTJfcnhfbWFwX3NrYihody0+cGRldiwgcmUsIHNreTItPnJ4X2RhdGFfc2l6ZSkpIHsKKwkJCWRldl9rZnJlZV9za2IocmUtPnNrYik7CisJCQlyZS0+c2tiID0gTlVMTDsKKwkJCWdvdG8gbm9tZW07CisJCX0KKwogCQlza3kyX3J4X3N1Ym1pdChza3kyLCByZSk7CiAJfQogCkBAIC0xNTQ3LDcgKzE1NTYsNyBAQAogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IE5VTEw7CiAJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmU7Ci0JdW5zaWduZWQgaSwgbGVuOworCXVuc2lnbmVkIGksIGxlbiwgZmlyc3Rfc2xvdDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTE2IG1zczsKIAl1OCBjdHJsOwpAQCAtMTU1NSwxMyArMTU2NCwxNyBAQAogIAlpZiAodW5saWtlbHkodHhfYXZhaWwoc2t5MikgPCB0eF9sZV9yZXEoc2tiKSkpCiAgIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCi0JaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9xdWV1ZWQoc2t5MikpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1ZXVlZCwgc2xvdCAldSwgbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBza3kyLT50eF9wcm9kLCBza2ItPmxlbik7Ci0KIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShody0+cGRldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihody0+cGRldiwgbWFwcGluZykpCisJCWdvdG8gbWFwcGluZ19lcnJvcjsKKworCWZpcnN0X3Nsb3QgPSBza3kyLT50eF9wcm9kOworCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNreTIpKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZmlyc3Rfc2xvdCwgc2tiLT5sZW4pOworCiAJLyogU2VuZCBoaWdoIGJpdHMgaWYgbmVlZGVkICovCiAJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKSB7CiAJCWxlID0gZ2V0X3R4X2xlKHNreTIpOwpAQCAtMTY0OCw2ICsxNjYxLDkgQEAKIAkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZShody0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCiAJCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoaHctPnBkZXYsIG1hcHBpbmcpKQorCQkJZ290byBtYXBwaW5nX3Vud2luZDsKKwogCQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpIHsKIAkJCWxlID0gZ2V0X3R4X2xlKHNreTIpOwogCQkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG1hcHBpbmcpKTsKQEAgLTE2NzYsNiArMTY5MiwzNCBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworbWFwcGluZ191bndpbmQ6CisJZm9yIChpID0gZmlyc3Rfc2xvdDsgaSAhPSBza3kyLT50eF9wcm9kOyBpID0gUklOR19ORVhUKGksIFRYX1JJTkdfU0laRSkpIHsKKwkJbGUgPSBza3kyLT50eF9sZSArIGk7CisJCXJlID0gc2t5Mi0+dHhfcmluZyArIGk7CisKKwkJc3dpdGNoKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKKwkJY2FzZSBPUF9MQVJHRVNFTkQ6CisJCWNhc2UgT1BfUEFDS0VUOgorCQkJcGNpX3VubWFwX3NpbmdsZShody0+cGRldiwKKwkJCQkJIHBjaV91bm1hcF9hZGRyKHJlLCBtYXBhZGRyKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJyZWFrOworCQljYXNlIE9QX0JVRkZFUjoKKwkJCXBjaV91bm1hcF9wYWdlKGh3LT5wZGV2LCBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCisJCQkJICAgICAgIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlza3kyLT50eF9wcm9kID0gZmlyc3Rfc2xvdDsKK21hcHBpbmdfZXJyb3I6CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJZGV2X3dhcm4oJmh3LT5wZGV2LT5kZXYsICIlczogdHggbWFwcGluZyBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTIxOTEsNyArMjIzNSwxMSBAQAogCiAJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAlyZS0+c2tiID0gbnNrYjsKLQlza3kyX3J4X21hcF9za2Ioc2t5Mi0+aHctPnBkZXYsIHJlLCBoZHJfc3BhY2UpOworCWlmIChza3kyX3J4X21hcF9za2Ioc2t5Mi0+aHctPnBkZXYsIHJlLCBoZHJfc3BhY2UpKSB7CisJCWRldl9rZnJlZV9za2IobnNrYik7CisJCXJlLT5za2IgPSBza2I7CisJCXJldHVybiBOVUxMOworCX0KIAogCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKQogCQlza2JfcHV0X2ZyYWdzKHNrYiwgaGRyX3NwYWNlLCBsZW5ndGgpOwpAQCAtMjY4NywxMyArMjczNSw2IEBACiAJCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogQnVnL0VycmF0YSB3b3JrYXJvdW5kPwotCSAqIE5lZWQgdG8ga2ljayB0aGUgVFggaXJxIG1vZGVyYXRpb24gdGltZXIuCi0JICovCi0JaWYgKHNreTJfcmVhZDgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCkgPT0gVElNX1NUQVJUKSB7Ci0JCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVE9QKTsKLQkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCwgVElNX1NUQVJUKTsKLQl9CiAJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlza3kyX3JlYWQzMihodywgQjBfWTJfU1BfTElTUik7CiBkb25lOgpAQCAtMzg2NCw2ICszOTA1LDg2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpza3kyX2RlYnVnOwogCisKKy8qCisgKiBSZWFkIGFuZCBwYXJzZSB0aGUgZmlyc3QgcGFydCBvZiBWaXRhbCBQcm9kdWN0IERhdGEKKyAqLworI2RlZmluZSBWUERfU0laRQkxMjgKKyNkZWZpbmUgVlBEX01BR0lDCTB4ODIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2cGRfdGFnIHsKKwljaGFyIHRhZ1syXTsKKwljaGFyICpsYWJlbDsKK30gdnBkX3RhZ3NbXSA9IHsKKwl7ICJQTiIsCSJQYXJ0IE51bWJlciIgfSwKKwl7ICJFQyIsICJFbmdpbmVlcmluZyBMZXZlbCIgfSwKKwl7ICJNTiIsICJNYW51ZmFjdHVyZXIiIH0sCisJeyAiU04iLCAiU2VyaWFsIE51bWJlciIgfSwKKwl7ICJZQSIsICJBc3NldCBUYWciIH0sCisJeyAiVkwiLCAiRmlyc3QgRXJyb3IgTG9nIE1lc3NhZ2UiIH0sCisJeyAiVkYiLCAiU2Vjb25kIEVycm9yIExvZyBNZXNzYWdlIiB9LAorCXsgIlZCIiwgIkJvb3QgQWdlbnQgUk9NIENvbmZpZ3VyYXRpb24iIH0sCisJeyAiVkUiLCAiRUZJIFVOREkgQ29uZmlndXJhdGlvbiIgfSwKK307CisKK3N0YXRpYyB2b2lkIHNreTJfc2hvd192cGQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwlzaXplX3QgdnBkX3NpemU7CisJbG9mZl90IG9mZnM7CisJdTggbGVuOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1MTYgcmVnMjsKKworCXJlZzIgPSBza3kyX3BjaV9yZWFkMTYoaHcsIFBDSV9ERVZfUkVHMik7CisJdnBkX3NpemUgPSAxIDw8ICggKChyZWcyICYgUENJX1ZQRF9ST01fU1opID4+IDE0KSArIDgpOworCisJc2VxX3ByaW50ZihzZXEsICIlcyBQcm9kdWN0IERhdGFcbiIsIHBjaV9uYW1lKGh3LT5wZGV2KSk7CisJYnVmID0ga21hbGxvYyh2cGRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJc2VxX3B1dHMoc2VxLCAibm8gbWVtb3J5IVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGNpX3JlYWRfdnBkKGh3LT5wZGV2LCAwLCB2cGRfc2l6ZSwgYnVmKSA8IDApIHsKKwkJc2VxX3B1dHMoc2VxLCAiVlBEIHJlYWQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGJ1ZlswXSAhPSBWUERfTUFHSUMpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJWUEQgdGFnIG1pc21hdGNoOiAlI3hcbiIsIGJ1ZlswXSk7CisJCWdvdG8gb3V0OworCX0KKwlsZW4gPSBidWZbMV07CisJaWYgKGxlbiA9PSAwIHx8IGxlbiA+IHZwZF9zaXplIC0gNCkgeworCQlzZXFfcHJpbnRmKHNlcSwgIkludmFsaWQgaWQgbGVuZ3RoOiAlZFxuIiwgbGVuKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICIlLipzXG4iLCBsZW4sIGJ1ZiArIDMpOworCW9mZnMgPSBsZW4gKyAzOworCisJd2hpbGUgKG9mZnMgPCB2cGRfc2l6ZSAtIDQpIHsKKwkJaW50IGk7CisKKwkJaWYgKCFtZW1jbXAoIlJXIiwgYnVmICsgb2ZmcywgMikpCS8qIGVuZCBtYXJrZXIgKi8KKwkJCWJyZWFrOworCQlsZW4gPSBidWZbb2ZmcyArIDJdOworCQlpZiAob2ZmcyArIGxlbiArIDMgPj0gdnBkX3NpemUpCisJCQlicmVhazsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2cGRfdGFncyk7IGkrKykgeworCQkJaWYgKCFtZW1jbXAodnBkX3RhZ3NbaV0udGFnLCBidWYgKyBvZmZzLCAyKSkgeworCQkJCXNlcV9wcmludGYoc2VxLCAiICVzOiAlLipzXG4iLAorCQkJCQkgICB2cGRfdGFnc1tpXS5sYWJlbCwgbGVuLCBidWYgKyBvZmZzICsgMyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJb2ZmcyArPSBsZW4gKyAzOworCX0KK291dDoKKwlrZnJlZShidWYpOworfQorCiBzdGF0aWMgaW50IHNreTJfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2VxLT5wcml2YXRlOwpAQCAtMzg3MywxNCArMzk5NCwxOCBAQAogCXVuc2lnbmVkIGlkeCwgbGFzdDsKIAlpbnQgc29wOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047CisJc2t5Ml9zaG93X3ZwZChzZXEsIGh3KTsKIAotCXNlcV9wcmludGYoc2VxLCAiSVJRIHNyYz0leCBtYXNrPSV4IGNvbnRyb2w9JXhcbiIsCisJc2VxX3ByaW50ZihzZXEsICJcbklSUSBzcmM9JXggbWFzaz0leCBjb250cm9sPSV4XG4iLAogCQkgICBza3kyX3JlYWQzMihodywgQjBfSVNSQyksCiAJCSAgIHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKSwKIAkJICAgc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0lDUikpOwogCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJuZXR3b3JrIG5vdCBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CiAJbGFzdCA9IHNreTJfcmVhZDE2KGh3LCBTVEFUX1BVVF9JRFgpOwogCkBAIC00MjA0LDY5ICs0MzI5LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKgotICogUmVhZCBhbmQgcGFyc2UgdGhlIGZpcnN0IHBhcnQgb2YgVml0YWwgUHJvZHVjdCBEYXRhCi0gKi8KLSNkZWZpbmUgVlBEX1NJWkUJMTI4Ci0jZGVmaW5lIFZQRF9NQUdJQwkweDgyCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBza3kyX3ZwZF9pbmZvKHN0cnVjdCBza3kyX2h3ICpodykKLXsKLQlpbnQgY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShody0+cGRldiwgUENJX0NBUF9JRF9WUEQpOwotCWNvbnN0IHU4ICpwOwotCXU4ICp2cGRfYnVmID0gTlVMTDsKLQl1MTYgbGVuOwotCXN0YXRpYyBzdHJ1Y3QgdnBkX3RhZyB7Ci0JCWNoYXIgdGFnWzJdOwotCQljaGFyICpsYWJlbDsKLQl9IHZwZF90YWdzW10gPSB7Ci0JCXsgIlBOIiwJIlBhcnQgTnVtYmVyIiB9LAotCQl7ICJFQyIsICJFbmdpbmVlcmluZyBMZXZlbCIgfSwKLQkJeyAiTU4iLCAiTWFudWZhY3R1cmVyIiB9LAotCX07Ci0KLQlpZiAoIWNhcCkKLQkJZ290byBvdXQ7Ci0KLQl2cGRfYnVmID0ga21hbGxvYyhWUERfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2cGRfYnVmKQotCQlnb3RvIG91dDsKLQotCWlmIChza3kyX3ZwZF9yZWFkKGh3LCBjYXAsIHZwZF9idWYsIDAsIFZQRF9TSVpFKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAodnBkX2J1ZlswXSAhPSBWUERfTUFHSUMpCi0JCWdvdG8gb3V0OwotCWxlbiA9IHZwZF9idWZbMV07Ci0JaWYgKGxlbiA9PSAwIHx8IGxlbiA+IFZQRF9TSVpFIC0gNCkKLQkJZ290byBvdXQ7Ci0JcCA9IHZwZF9idWYgKyAzOwotCWRldl9pbmZvKCZody0+cGRldi0+ZGV2LCAiJS4qc1xuIiwgbGVuLCBwKTsKLQlwICs9IGxlbjsKLQotCXdoaWxlIChwIDwgdnBkX2J1ZiArIFZQRF9TSVpFIC0gNCkgewotCQlpbnQgaTsKLQotCQlpZiAoIW1lbWNtcCgiUlciLCBwLCAyKSkJLyogZW5kIG1hcmtlciAqLwotCQkJYnJlYWs7Ci0KLQkJbGVuID0gcFsyXTsKLQkJaWYgKGxlbiA+IChwIC0gdnBkX2J1ZikgLSA0KQotCQkJYnJlYWs7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBkX3RhZ3MpOyBpKyspIHsKLQkJCWlmICghbWVtY21wKHZwZF90YWdzW2ldLnRhZywgcCwgMikpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICVzOiAlLipzXG4iLAotCQkJCSAgICAgICB2cGRfdGFnc1tpXS5sYWJlbCwgbGVuLCBwICsgMyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcCArPSBsZW4gKyAzOwotCX0KLW91dDoKLQlrZnJlZSh2cGRfYnVmKTsKLX0KLQogLyogVGhpcyBkcml2ZXIgc3VwcG9ydHMgeXVrb24yIGNoaXBzZXQgb25seSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnNreTJfbmFtZSh1OCBjaGlwaWQsIGNoYXIgKmJ1ZiwgaW50IHN6KQogewpAQCAtNDI5NCw2ICs0MzU2LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBza3kyX2h3ICpodzsKIAlpbnQgZXJyLCB1c2luZ19kYWMgPSAwLCB3b2xfZGVmYXVsdDsKKwl1MzIgcmVnOwogCWNoYXIgYnVmMVsxNl07CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTQzMjcsNiArNDM5MCwzNCBAQAogCQl9CiAJfQogCisJLyogR2V0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKwkgKiBOb3RlOiBvbmx5IHJlZ3VsYXIgUENJIGNvbmZpZyBhY2Nlc3Mgb25jZSB0byB0ZXN0IGZvciBIVyBpc3N1ZXMKKwkgKiAgICAgICBvdGhlciBQQ0kgYWNjZXNzIHRocm91Z2ggc2hhcmVkIG1lbW9yeSBmb3Igc3BlZWQgYW5kIHRvCisJICoJIGF2b2lkIE1NQ09ORklHIHByb2JsZW1zLgorCSAqLworCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzIsICZyZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIHJlYWQgY29uZmlnIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJfQorCisJLyogc2l6ZSBvZiBhdmFpbGFibGUgVlBELCBvbmx5IGltcGFjdCBzeXNmcyAqLworCWVyciA9IHBjaV92cGRfdHJ1bmNhdGUocGRldiwgMXVsIDw8ICgoKHJlZyAmIFBDSV9WUERfUk9NX1NaKSA+PiAxNCkgKyA4KSk7CisJaWYgKGVycikKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkNhbid0IHNldCBWUEQgc2l6ZVxuIik7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkvKiBUaGUgc2s5OGxpbiB2ZW5kb3IgZHJpdmVyIHVzZXMgaGFyZHdhcmUgYnl0ZSBzd2FwcGluZyBidXQKKwkgKiB0aGlzIGRyaXZlciB1c2VzIHNvZnR3YXJlIHN3YXBwaW5nLgorCSAqLworCXJlZyAmPSB+UENJX1JFVl9ERVNDOworCWVyciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldixQQ0lfREVWX1JFRzIsIHJlZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQQ0kgd3JpdGUgY29uZmlnIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJfQorI2VuZGlmCisKIAl3b2xfZGVmYXVsdCA9IGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpID8gV0FLRV9NQUdJQyA6IDA7CiAKIAllcnIgPSAtRU5PTUVNOwpAQCAtNDM0NCwxOCArNDQzNSw2IEBACiAJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIAotI2lmZGVmIF9fQklHX0VORElBTgotCS8qIFRoZSBzazk4bGluIHZlbmRvciBkcml2ZXIgdXNlcyBoYXJkd2FyZSBieXRlIHN3YXBwaW5nIGJ1dAotCSAqIHRoaXMgZHJpdmVyIHVzZXMgc29mdHdhcmUgc3dhcHBpbmcuCi0JICovCi0JewotCQl1MzIgcmVnOwotCQlyZWcgPSBza3kyX3BjaV9yZWFkMzIoaHcsIFBDSV9ERVZfUkVHMik7Ci0JCXJlZyAmPSB+UENJX1JFVl9ERVNDOwotCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzIsIHJlZyk7Ci0JfQotI2VuZGlmCi0KIAkvKiByaW5nIGZvciBzdGF0dXMgcmVzcG9uc2VzICovCiAJaHctPnN0X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX0xFX0JZVEVTLCAmaHctPnN0X2RtYSk7CiAJaWYgKCFody0+c3RfbGUpCkBAIC00MzcwLDggKzQ0NDksNiBAQAogCiAJc2t5Ml9yZXNldChodyk7CiAKLQlza3kyX3ZwZF9pbmZvKGh3KTsKLQogCWRldiA9IHNreTJfaW5pdF9uZXRkZXYoaHcsIDAsIHVzaW5nX2RhYywgd29sX2RlZmF1bHQpOwogCWlmICghZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggMjIzY2RlMC4uMjkzNjEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKIHsKIAlzdHJuY3B5KGluZm8tPmRyaXZlciwgQ0FSRE5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIAlzdHJuY3B5KGluZm8tPnZlcnNpb24sIHZlcnNpb24sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYucGFyZW50LT5idXNfaWQsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCiBzdGF0aWMgaW50IHNtYzkxMXhfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggYjIxNWE4ZC4uZmRjYmFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTE2MTQsNyArMTYxNCw3IEBACiB7CiAJc3RybmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybmNweShpbmZvLT52ZXJzaW9uLCB2ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAogc3RhdGljIGludCBzbWNfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE2NDMsNiArMTY0MywxMTcgQEAKIAlscC0+bXNnX2VuYWJsZSA9IGxldmVsOwogfQogCitzdGF0aWMgaW50IHNtY193cml0ZV9lZXByb21fd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgYWRkciwgdTE2IHdvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBsb2FkIHdvcmQgaW50byBHUCByZWdpc3RlciAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMSk7CisJU01DX1NFVF9HUChscCwgd29yZCk7CisJLyogc2V0IHRoZSBhZGRyZXNzIHRvIHB1dCB0aGUgZGF0YSBpbiBFRVBST00gKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCVNNQ19TRVRfUFRSKGxwLCBhZGRyKTsKKwkvKiB0ZWxsIGl0IHRvIHdyaXRlICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9TVE9SRSkpOworCS8qIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLworCWRvIHsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKFNNQ19HRVRfQ1RMKGxwKSAmIENUTF9TVE9SRSk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19yZWFkX2VlcHJvbV93b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBhZGRyLCB1MTYgKndvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBzZXQgdGhlIEVFUFJPTSBhZGRyZXNzIHRvIGdldCB0aGUgZGF0YSBmcm9tICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX1BUUihscCwgYWRkciB8IFBUUl9SRUFEKTsKKwkvKiB0ZWxsIGl0IHRvIGxvYWQgKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOworCVNNQ19TRVRfR1AobHAsIDB4ZmZmZik7CS8qIGluaXQgdG8ga25vd24gKi8KKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9SRUxPQUQpKTsKKwkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwlkbyB7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChTTUNfR0VUX0NUTChscCkgJiBDVExfUkVMT0FEKTsKKwkvKiByZWFkIHdvcmQgZnJvbSBHUCByZWdpc3RlciAqLworCSp3b3JkID0gU01DX0dFVF9HUChscCk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMHgyMyAqIDI7Cit9CisKK3N0YXRpYyBpbnQgc21jX2V0aHRvb2xfZ2V0ZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgaW1heDsKKworCURCRygxLCAiUmVhZGluZyAlZCBieXRlcyBhdCAlZCgweCV4KVxuIiwKKwkJZWVwcm9tLT5sZW4sIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCk7CisJaW1heCA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tLT5sZW47IGkgKz0gMikgeworCQlpbnQgcmV0OworCQl1MTYgd2J1ZjsKKwkJaW50IG9mZnNldCA9IGkgKyBlZXByb20tPm9mZnNldDsKKwkJaWYgKG9mZnNldCA+IGltYXgpCisJCQlicmVhazsKKwkJcmV0ID0gc21jX3JlYWRfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgJndidWYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCQlEQkcoMiwgIlJlYWQgMHgleCBmcm9tIDB4JXhcbiIsIHdidWYsIG9mZnNldCA+PiAxKTsKKwkJZGF0YVtpXSA9ICh3YnVmID4+IDgpICYgMHhmZjsKKwkJZGF0YVtpKzFdID0gd2J1ZiAmIDB4ZmY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX3NldGVlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJaW50IGk7CisJaW50IGltYXg7CisKKwlEQkcoMSwgIldyaXRpbmcgJWQgYnl0ZXMgdG8gJWQoMHgleClcbiIsCisJCQllZXByb20tPmxlbiwgZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+b2Zmc2V0KTsKKwlpbWF4ID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbihkZXYpOworCWZvciAoaSA9IDA7IGkgPCBlZXByb20tPmxlbjsgaSArPSAyKSB7CisJCWludCByZXQ7CisJCXUxNiB3YnVmOworCQlpbnQgb2Zmc2V0ID0gaSArIGVlcHJvbS0+b2Zmc2V0OworCQlpZiAob2Zmc2V0ID4gaW1heCkKKwkJCWJyZWFrOworCQl3YnVmID0gKGRhdGFbaV0gPDwgOCkgfCBkYXRhW2kgKyAxXTsKKwkJREJHKDIsICJXcml0aW5nIDB4JXggdG8gMHgleFxuIiwgd2J1Ziwgb2Zmc2V0ID4+IDEpOworCQlyZXQgPSBzbWNfd3JpdGVfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgd2J1Zik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc21jX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSBzbWNfZXRodG9vbF9nZXRzZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gc21jX2V0aHRvb2xfc2V0c2V0dGluZ3MsCkBAIC0xNjUyLDggKzE3NjMsMjIgQEAKIAkuc2V0X21zZ2xldmVsCT0gc21jX2V0aHRvb2xfc2V0bXNnbGV2ZWwsCiAJLm53YXlfcmVzZXQJPSBzbWNfZXRodG9vbF9ud2F5cmVzZXQsCiAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLS8vCS5nZXRfZWVwcm9tCT0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tLAotLy8JLnNldF9lZXByb20JPSBzbWNfZXRodG9vbF9zZXRlZXByb20sCisJLmdldF9lZXByb21fbGVuID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX2dldGVlcHJvbSwKKwkuc2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX3NldGVlcHJvbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNtY19vcGVuLAorCS5uZG9fc3RvcAkJPSBzbWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNtY19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHNtY190aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc21jX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNtY19wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKIH07CiAKIC8qCkBAIC0xODY1LDE2ICsxOTkwLDkgQEAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldCB2YWx1ZXMuICovCiAJZXRoZXJfc2V0dXAoZGV2KTsKIAotCWRldi0+b3BlbiA9IHNtY19vcGVuOwotCWRldi0+c3RvcCA9IHNtY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtY19oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gc21jX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc21jX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc21jX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZzbWNfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHNtY19wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKIAogCXRhc2tsZXRfaW5pdCgmbHAtPnR4X3Rhc2ssIHNtY19oYXJkd2FyZV9zZW5kX3BrdCwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKIAlJTklUX1dPUksoJmxwLT5waHlfY29uZmlndXJlLCBzbWNfcGh5X2NvbmZpZ3VyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IGM0Y2NkMTIuLmVkOWFlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0xMTQxLDYgKzExNDEsMTYgQEAKIAogI2RlZmluZSBTTUNfR0VUX01JSShscCkJCVNNQ19pbncoaW9hZGRyLCBNSUlfUkVHKGxwKSkKIAorI2RlZmluZSBTTUNfR0VUX0dQKGxwKQkJU01DX2ludyhpb2FkZHIsIEdQX1JFRyhscCkpCisKKyNkZWZpbmUgU01DX1NFVF9HUChscCwgeCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUobHApKQkJCQlcCisJCQlTTUNfb3V0bCgoeCk8PDE2LCBpb2FkZHIsIFNNQ19SRUcobHAsIDgsIDEpKTsJXAorCQllbHNlCQkJCQkJCVwKKwkJCVNNQ19vdXR3KHgsIGlvYWRkciwgR1BfUkVHKGxwKSk7CQlcCisJfSB3aGlsZSAoMCkKKwogI2RlZmluZSBTTUNfU0VUX01JSShscCwgeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgTUlJX1JFRyhscCkpCiAKICNkZWZpbmUgU01DX0dFVF9NSVIobHApCQlTTUNfaW53KGlvYWRkciwgTUlSX1JFRyhscCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwppbmRleCBkMTU5MGFjLi5hZDNjYmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKQEAgLTM2OCw0OCArMzY4LDUzIEBACiAJcmV0dXJuIHJlZzsKIH0KIAotLyogQXV0b2RldGVjdHMgYW5kIGluaXRpYWxpc2VzIGV4dGVybmFsIHBoeSBmb3IgU01TQzkxMTUgYW5kIFNNU0M5MTE3IGZsYXZvcnMuCi0gKiBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgcmV0dXJucyAtRU5PREVWIHRvIHJldmVydCBiYWNrIHRvIGludGVybmFsIHBoeS4KLSAqIFBlcmZvcm1lZCBhdCBpbml0aWFsaXNhdGlvbiBvbmx5LCBzbyBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi1zdGF0aWMgaW50IHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKKy8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkuIEFzc3VtZXMgdHggYW5kIHJ4IGFyZSBzdG9wcGVkLiAqLworc3RhdGljIHZvaWQgc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCiB7CiAJdW5zaWduZWQgaW50IGh3Y2ZnID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEhXX0NGRyk7CiAKLQkvKiBFeHRlcm5hbCBwaHkgaXMgcmVxdWVzdGVkLCBzdXBwb3J0ZWQsIGFuZCBkZXRlY3RlZCAqLwotCWlmIChod2NmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKKwkvKiBEaXNhYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLworCWh3Y2ZnICY9ICh+SFdfQ0ZHX1BIWV9DTEtfU0VMXyk7CisJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0NMS19ESVNfOworCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7CisJdWRlbGF5KDEwKTsJLyogRW5vdWdoIHRpbWUgZm9yIGNsb2NrcyB0byBzdG9wICovCiAKLQkJLyogU3dpdGNoIHRvIGV4dGVybmFsIHBoeS4gQXNzdW1pbmcgdHggYW5kIHJ4IGFyZSBzdG9wcGVkCi0JCSAqIGJlY2F1c2Ugc21zYzkxMXhfcGh5X2luaXRpYWxpc2UgaXMgY2FsbGVkIGJlZm9yZQotCQkgKiBzbXNjOTExeF9yeF9pbml0aWFsaXNlIGFuZCB0eF9pbml0aWFsaXNlLiAqLworCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkgKi8KKwlod2NmZyB8PSBIV19DRkdfRVhUX1BIWV9FTl87CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKIAotCQkvKiBEaXNhYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLwotCQlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOwotCQlod2NmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfQ0xLX0RJU187Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Ci0JCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gc3RvcCAqLworCS8qIEVuYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KKwlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOworCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9FWFRfUEhZXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gcmVzdGFydCAqLwogCi0JCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkgKi8KLQkJaHdjZmcgfD0gSFdfQ0ZHX0VYVF9QSFlfRU5fOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCWh3Y2ZnIHw9IEhXX0NGR19TTUlfU0VMXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworfQogCi0JCS8qIEVuYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KLQkJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKLQkJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0VYVF9QSFlfOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwotCQl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHJlc3RhcnQgKi8KKy8qIEF1dG9kZXRlY3RzIGFuZCBlbmFibGVzIGV4dGVybmFsIHBoeSBpZiBwcmVzZW50IG9uIHN1cHBvcnRlZCBjaGlwcy4KKyAqIGF1dG9kZXRlY3Rpb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3BlY2lmeWluZyBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkKKyAqIG9yIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSBpbiB0aGUgcGxhdGZvcm1fZGF0YSBmbGFncy4gKi8KK3N0YXRpYyB2b2lkIHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaHdjZmcgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSFdfQ0ZHKTsKIAotCQlod2NmZyB8PSBIV19DRkdfU01JX1NFTF87Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Ci0KLQkJU01TQ19UUkFDRShIVywgIlN1Y2Nlc3NmdWxseSBzd2l0Y2hlZCB0byBleHRlcm5hbCBQSFkiKTsKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSkgeworCQlTTVNDX1RSQUNFKEhXLCAiRm9yY2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CisJfSBlbHNlIGlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfRk9SQ0VfRVhURVJOQUxfUEhZKSB7CisJCVNNU0NfVFJBQ0UoSFcsICJGb3JjaW5nIGV4dGVybmFsIFBIWSIpOworCQlzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHBkYXRhKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDE7CisJfSBlbHNlIGlmIChod2NmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKKwkJU01TQ19UUkFDRShIVywgIkhXX0NGRyBFWFRfUEhZX0RFVCBzZXQsIHVzaW5nIGV4dGVybmFsIFBIWSIpOworCQlzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHBkYXRhKTsKIAkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDE7CiAJfSBlbHNlIHsKLQkJU01TQ19XQVJOSU5HKEhXLCAiTm8gZXh0ZXJuYWwgUEhZIGRldGVjdGVkLCAiCi0JCQkiVXNpbmcgaW50ZXJuYWwgUEhZIGluc3RlYWQuIik7Ci0JCS8qIFVzZSBpbnRlcm5hbCBwaHkgKi8KLQkJcmV0dXJuIC1FTk9ERVY7CisJCVNNU0NfVFJBQ0UoSFcsICJIV19DRkcgRVhUX1BIWV9ERVQgY2xlYXIsIHVzaW5nIGludGVybmFsIFBIWSIpOworCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEZldGNoZXMgYSB0eCBzdGF0dXMgb3V0IG9mIHRoZSBzdGF0dXMgZmlmbyAqLwpAQCAtNzY5LDcgKzc3NCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJJnNtc2M5MTF4X3BoeV9hZGp1c3RfbGluaywgMCwgcGRhdGEtPmNvbmZpZy5waHlfaW50ZXJmYWNlKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewpAQCAtNzc4LDcgKzc4Myw4IEBACiAJfQogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsCisJCWRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSB8CkBAIC04MjQsMjIgKzgzMCwxOCBAQAogCiAJcGRhdGEtPm1paV9idXMtPnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKLQogCXN3aXRjaCAocGRhdGEtPmlkcmV2ICYgMHhGRkZGMDAwMCkgewogCWNhc2UgMHgwMTE3MDAwMDoKIAljYXNlIDB4MDExNTAwMDA6CiAJY2FzZSAweDExN0EwMDAwOgogCWNhc2UgMHgxMTVBMDAwMDoKIAkJLyogRXh0ZXJuYWwgUEhZIHN1cHBvcnRlZCwgdHJ5IHRvIGF1dG9kZXRlY3QgKi8KLQkJaWYgKHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHBkYXRhKSA8IDApIHsKLQkJCVNNU0NfVFJBQ0UoSFcsICJObyBleHRlcm5hbCBQSFkgZGV0ZWN0ZWQsICIKLQkJCQkidXNpbmcgaW50ZXJuYWwgUEhZIik7Ci0JCX0KKwkJc21zYzkxMXhfcGh5X2luaXRpYWxpc2VfZXh0ZXJuYWwocGRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlTTVNDX1RSQUNFKEhXLCAiRXh0ZXJuYWwgUEhZIGlzIG5vdCBzdXBwb3J0ZWQsICIKIAkJCSJ1c2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CiAJCWJyZWFrOwogCX0KIApAQCAtODkzLDIyICs4OTUsMjIgQEAKIAkJCVNNU0NfV0FSTklORyhIVywKIAkJCQkiUGFja2V0IHRhZyByZXNlcnZlZCBiaXQgaXMgaGlnaCIpOwogCQl9IGVsc2UgewotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDA4MDAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfRVNfKSkgewogCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQl9IGVsc2UgewogCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gKHR4X3N0YXQgPj4gMTYpOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwMTAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfRVhDRVNTX0NPTF8pKSB7CiAJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IDE2OwogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gMTsKIAkJCX0gZWxzZSB7CiAJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9CiAJCQkJICAgICgodHhfc3RhdCA+PiAzKSAmIDB4Rik7CiAJCQl9Ci0JCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIDB4MDAwMDA4MDApKQorCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfTE9TVF9DQVJSSUVSXykpCiAJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSAxOwotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwMjAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfTEFURV9DT0xfKSkgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJCX0KQEAgLTkyMiwxOSArOTI0LDE3IEBACiB7CiAJaW50IGNyY19lcnIgPSAwOwogCi0JaWYgKHVubGlrZWx5KHJ4c3RhdCAmIDB4MDAwMDgwMDApKSB7CisJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIFJYX1NUU19FU18pKSB7CiAJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWlmICh1bmxpa2VseShyeHN0YXQgJiAweDAwMDAwMDAyKSkgeworCQlpZiAodW5saWtlbHkocnhzdGF0ICYgUlhfU1RTX0NSQ19FUlJfKSkgewogCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQljcmNfZXJyID0gMTsKIAkJfQogCX0KIAlpZiAobGlrZWx5KCFjcmNfZXJyKSkgewotCQlpZiAodW5saWtlbHkoKHJ4c3RhdCAmIDB4MDAwMDEwMjApID09IDB4MDAwMDEwMjApKSB7Ci0JCQkvKiBGcmFtZSB0eXBlIGluZGljYXRlcyBsZW5ndGgsCi0JCQkgKiBhbmQgbGVuZ3RoIGVycm9yIGlzIHNldCAqLworCQlpZiAodW5saWtlbHkoKHJ4c3RhdCAmIFJYX1NUU19GUkFNRV9UWVBFXykgJiYKKwkJCSAgICAgKHJ4c3RhdCAmIFJYX1NUU19MRU5HVEhfRVJSXykpKQogCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCX0KIAkJaWYgKHJ4c3RhdCAmIFJYX1NUU19NQ0FTVF8pCiAJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCX0KQEAgLTk1Myw3ICs5NTMsNyBAQAogCQlkbyB7CiAJCQl1ZGVsYXkoMSk7CiAJCQl2YWwgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgUlhfRFBfQ1RSTCk7Ci0JCX0gd2hpbGUgKC0tdGltZW91dCAmJiAodmFsICYgUlhfRFBfQ1RSTF9SWF9GRldEXykpOworCQl9IHdoaWxlICgodmFsICYgUlhfRFBfQ1RSTF9SWF9GRldEXykgJiYgLS10aW1lb3V0KTsKIAogCQlpZiAodW5saWtlbHkodGltZW91dCA9PSAwKSkKIAkJCVNNU0NfV0FSTklORyhIVywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiCkBAIC05ODQsNyArOTg0LDcgQEAKIAkJCS8qIFdlIHByb2Nlc3NlZCBhbGwgcGFja2V0cyBhdmFpbGFibGUuICBUZWxsIE5BUEkgaXQgY2FuCiAJCQkgKiBzdG9wIHBvbGxpbmcgdGhlbiByZS1lbmFibGUgcnggaW50ZXJydXB0cyAqLwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfU1RTLCBJTlRfU1RTX1JTRkxfKTsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKIAkJCXRlbXAgfD0gSU5UX0VOX1JTRkxfRU5fOwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAogLyogU2V0cyB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzIHRvIGRldl9hZGRyLCBjYWxsZWQgd2l0aCBtYWNfbG9jayBoZWxkICovCiBzdGF0aWMgdm9pZAotc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTggZGV2X2FkZHJbNl0pCitzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3Moc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1OCBkZXZfYWRkcls2XSkKIHsKIAl1MzIgbWFjX2hpZ2gxNiA9IChkZXZfYWRkcls1XSA8PCA4KSB8IGRldl9hZGRyWzRdOwogCXUzMiBtYWNfbG93MzIgPSAoZGV2X2FkZHJbM10gPDwgMjQpIHwgKGRldl9hZGRyWzJdIDw8IDE2KSB8CkBAIC0xMTYwLDggKzExNjAsOCBAQAogCiAJLyogTWFrZSBzdXJlIEVFUFJPTSBoYXMgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgc2V0dGluZyBHUElPX0NGRyAqLwogCXRpbWVvdXQgPSA1MDsKLQl3aGlsZSAoKHRpbWVvdXQtLSkgJiYKLQkgICAgICAgKHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBFMlBfQ01EKSAmIEUyUF9DTURfRVBDX0JVU1lfKSkgeworCXdoaWxlICgoc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEUyUF9DTUQpICYgRTJQX0NNRF9FUENfQlVTWV8pICYmCisJICAgICAgIC0tdGltZW91dCkgewogCQl1ZGVsYXkoMTApOwogCX0KIApAQCAtMTE3NCw3ICsxMTc0LDcgQEAKIAkvKiBUaGUgc29mdCByZXNldCBhYm92ZSBjbGVhcmVkIHRoZSBkZXZpY2UncyBNQUMgYWRkcmVzcywKIAkgKiByZXN0b3JlIGl0IGZyb20gbG9jYWwgY29weSAoc2V0IGluIHByb2JlKSAqLwogCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7Ci0Jc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKIAogCS8qIEluaXRpYWxpc2UgaXJxcywgYnV0IGxlYXZlIGFsbCBzb3VyY2VzIGRpc2FibGVkICovCkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogCW5hcGlfZW5hYmxlKCZwZGF0YS0+bmFwaSk7CiAKIAl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7Ci0JdGVtcCB8PSAoSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1JTRkxfRU5fKTsKKwl0ZW1wIHw9IChJTlRfRU5fVERGQV9FTl8gfCBJTlRfRU5fUlNGTF9FTl8gfCBJTlRfRU5fUlhTVE9QX0lOVF9FTl8pOwogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAogCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CkBAIC0xNDIyLDExICsxNDIyLDYgQEAKIAogCQkJLyogUmVxdWVzdCB0aGUgaGFyZHdhcmUgdG8gc3RvcCwgdGhlbiBwZXJmb3JtIHRoZQogCQkJICogdXBkYXRlIHdoZW4gd2UgZ2V0IGFuIFJYX1NUT1AgaW50ZXJydXB0ICovCi0JCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlhTVE9QX0lOVF8pOwotCQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwotCQkJdGVtcCB8PSBJTlRfRU5fUlhTVE9QX0lOVF9FTl87Ci0JCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7Ci0KIAkJCXRlbXAgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgTUFDX0NSKTsKIAkJCXRlbXAgJj0gfihNQUNfQ1JfUlhFTl8pOwogCQkJc21zYzkxMXhfbWFjX3dyaXRlKHBkYXRhLCBNQUNfQ1IsIHRlbXApOwpAQCAtMTQ2NSwxMSArMTQ2MCw5IEBACiAJCS8qIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgbXVsdGljYXN0IHVwZGF0ZSBzY2hlZHVsZWQgYW5kCiAJCSAqIGl0IGlzIG5vdyBzYWZlIHRvIGNvbXBsZXRlIHRoZSB1cGRhdGUgKi8KIAkJU01TQ19UUkFDRShJTlRSLCAiUlggU3RvcCBpbnRlcnJ1cHQiKTsKLQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwotCQl0ZW1wICY9ICh+SU5UX0VOX1JYU1RPUF9JTlRfRU5fKTsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwogCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlhTVE9QX0lOVF8pOwotCQlzbXNjOTExeF9yeF9tdWx0aWNhc3RfdXBkYXRlX3dvcmthcm91bmQocGRhdGEpOworCQlpZiAocGRhdGEtPm11bHRpY2FzdF91cGRhdGVfcGVuZGluZykKKwkJCXNtc2M5MTF4X3J4X211bHRpY2FzdF91cGRhdGVfd29ya2Fyb3VuZChwZGF0YSk7CiAJCXNlcnZpY2VkID0gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0xNDg5LDE2ICsxNDgyLDE2IEBACiAJfQogCiAJaWYgKGxpa2VseShpbnRzdHMgJiBpbnRlbiAmIElOVF9TVFNfUlNGTF8pKSB7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcGRhdGEtPm5hcGkpKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcGRhdGEtPm5hcGkpKSkgewogCQkJLyogRGlzYWJsZSBSeCBpbnRlcnJ1cHRzICovCiAJCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7CiAJCQl0ZW1wICY9ICh+SU5UX0VOX1JTRkxfRU5fKTsKIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAkJCS8qIFNjaGVkdWxlIGEgTkFQSSBwb2xsICovCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwZGF0YS0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnBkYXRhLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCVNNU0NfV0FSTklORyhSWF9FUlIsCi0JCQkJIm5ldGlmX3J4X3NjaGVkdWxlX3ByZXAgZmFpbGVkIik7CisJCQkJIm5hcGlfc2NoZWR1bGVfcHJlcCBmYWlsZWQiKTsKIAkJfQogCQlzZXJ2aWNlZCA9IElSUV9IQU5ETEVEOwogCX0KQEAgLTE1MTUsNiArMTUwOCwzMSBAQAogfQogI2VuZGlmCQkJCS8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAKK3N0YXRpYyBpbnQgc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJLyogT24gb2xkZXIgaGFyZHdhcmUgcmV2aXNpb25zIHdlIGNhbm5vdCBjaGFuZ2UgdGhlIG1hYyBhZGRyZXNzCisJICogcmVnaXN0ZXJzIHdoaWxlIHJlY2VpdmluZyBkYXRhLiAgTmV3ZXIgZGV2aWNlcyBjYW4gc2FmZWx5IGNoYW5nZQorCSAqIHRoaXMgYXQgYW55IHRpbWUuICovCisJaWYgKHBkYXRhLT5nZW5lcmF0aW9uIDw9IDEgJiYgbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFN0YW5kYXJkIGlvY3RscyBmb3IgbWlpLXRvb2wgKi8KIHN0YXRpYyBpbnQgc21zYzkxMXhfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CkBAIC0xNTQ5LDcgKzE1NjcsNyBAQAogewogCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBTTVNDX0NISVBOQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybGNweShpbmZvLT52ZXJzaW9uLCBTTVNDX0RSVl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLAorCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCkBAIC0xNzQ1LDEyICsxNzYzLDI3IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzbXNjOTExeF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19kb19pb2N0bAkJPSBzbXNjOTExeF9kb19pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gc21zYzkxMXhfc2V0X21hY19hZGRyZXNzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzbXNjOTExeF9wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKIH07CiAKKy8qIGNvcGllcyB0aGUgY3VycmVudCBtYWMgYWRkcmVzcyBmcm9tIGhhcmR3YXJlIHRvIGRldi0+ZGV2X2FkZHIgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXNjOTExeF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgbWFjX2hpZ2gxNiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSSCk7CisJdTMyIG1hY19sb3czMiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSTCk7CisKKwlkZXYtPmRldl9hZGRyWzBdID0gKHU4KShtYWNfbG93MzIpOworCWRldi0+ZGV2X2FkZHJbMV0gPSAodTgpKG1hY19sb3czMiA+PiA4KTsKKwlkZXYtPmRldl9hZGRyWzJdID0gKHU4KShtYWNfbG93MzIgPj4gMTYpOworCWRldi0+ZGV2X2FkZHJbM10gPSAodTgpKG1hY19sb3czMiA+PiAyNCk7CisJZGV2LT5kZXZfYWRkcls0XSA9ICh1OCkobWFjX2hpZ2gxNik7CisJZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkobWFjX2hpZ2gxNiA+PiA4KTsKK30KKwogLyogSW5pdGlhbGl6aW5nIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZXMsIG9ubHkgY2FsbGVkIGZyb20gcHJvYmUgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNtc2M5MTF4X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTE4MzgsNiArMTg3MSwxMiBAQAogCQlTTVNDX1dBUk5JTkcoUFJPQkUsCiAJCQkiVGhpcyBkcml2ZXIgaXMgbm90IGludGVuZGVkIGZvciB0aGlzIGNoaXAgcmV2aXNpb24iKTsKIAorCS8qIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFuIGVlcHJvbSwgd2hlcmUgdGhlIG1hYyBhZGRyZXNzCisJICogaXMgc3RvcmVkIGVsc2V3aGVyZSBhbmQgc2V0IGJ5IHRoZSBib290bG9hZGVyLiAgVGhpcyBzYXZlcyB0aGUKKwkgKiBtYWMgYWRkcmVzcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBkZXZpY2UgKi8KKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MpCisJCXNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3MoZGV2KTsKKwogCS8qIFJlc2V0IHRoZSBMQU45MTF4ICovCiAJaWYgKHNtc2M5MTF4X3NvZnRfcmVzZXQocGRhdGEpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4OTYsMTEgKzE5MzUsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YTsKIAlzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnICpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKmlycV9yZXM7CiAJdW5zaWduZWQgaW50IGludGNmZyA9IDA7Ci0JaW50IHJlc19zaXplOworCWludCByZXNfc2l6ZSwgaXJxX2ZsYWdzOwogCWludCByZXR2YWw7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlwcl9pbmZvKCIlczogRHJpdmVyIHZlcnNpb24gJXMuXG4iLCBTTVNDX0NISVBOQU1FLCBTTVNDX0RSVl9WRVJTSU9OKTsKIApAQCAtMTkyMyw2ICsxOTYxLDE0IEBACiAJfQogCXJlc19zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0OwogCisJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnFfcmVzKSB7CisJCXByX3dhcm5pbmcoIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgaXJxIHJlc291cmNlLlxuIiwKKwkJCVNNU0NfQ0hJUE5BTUUpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dF8wOworCX0KKwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19zaXplLCBTTVNDX0NISVBOQU1FKSkgewogCQlyZXR2YWwgPSAtRUJVU1k7CiAJCWdvdG8gb3V0XzA7CkBAIC0xOTM5LDcgKzE5ODUsOCBAQAogCiAJcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWRldi0+aXJxID0gaXJxX3Jlcy0+c3RhcnQ7CisJaXJxX2ZsYWdzID0gaXJxX3Jlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKIAlwZGF0YS0+aW9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc19zaXplKTsKIAogCS8qIGNvcHkgY29uZmlnIHBhcmFtZXRlcnMgYWNyb3NzIHRvIHBkYXRhICovCkBAIC0xOTcyLDggKzIwMTksOCBAQAogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCAwKTsKIAlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIDB4RkZGRkZGRkYpOwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNtc2M5MTF4X2lycWhhbmRsZXIsIElSUUZfRElTQUJMRUQsCi0JCQkgICAgIGRldi0+bmFtZSwgZGV2KTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc21zYzkxMXhfaXJxaGFuZGxlciwKKwkJCSAgICAgaXJxX2ZsYWdzIHwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCVNNU0NfV0FSTklORyhQUk9CRSwKIAkJCSJVbmFibGUgdG8gY2xhaW0gcmVxdWVzdGVkIGlycTogJWQiLCBkZXYtPmlycSk7CkBAIC0yMDA0LDE5ICsyMDUxLDEyIEBACiAKIAkvKiBDaGVjayBpZiBtYWMgYWRkcmVzcyBoYXMgYmVlbiBzcGVjaWZpZWQgd2hlbiBicmluZ2luZyBpbnRlcmZhY2UgdXAgKi8KIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewotCQlzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCQlTTVNDX1RSQUNFKFBST0JFLCAiTUFDIEFkZHJlc3MgaXMgc3BlY2lmaWVkIGJ5IGNvbmZpZ3VyYXRpb24iKTsKIAl9IGVsc2UgewogCQkvKiBUcnkgcmVhZGluZyBtYWMgYWRkcmVzcyBmcm9tIGRldmljZS4gaWYgRUVQUk9NIGlzIHByZXNlbnQKIAkJICogaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgKi8KLQkJdTMyIG1hY19oaWdoMTYgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgQUREUkgpOwotCQl1MzIgbWFjX2xvdzMyID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJMKTsKLQkJZGV2LT5kZXZfYWRkclswXSA9ICh1OCkobWFjX2xvdzMyKTsKLQkJZGV2LT5kZXZfYWRkclsxXSA9ICh1OCkobWFjX2xvdzMyID4+IDgpOwotCQlkZXYtPmRldl9hZGRyWzJdID0gKHU4KShtYWNfbG93MzIgPj4gMTYpOwotCQlkZXYtPmRldl9hZGRyWzNdID0gKHU4KShtYWNfbG93MzIgPj4gMjQpOwotCQlkZXYtPmRldl9hZGRyWzRdID0gKHU4KShtYWNfaGlnaDE2KTsKLQkJZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkobWFjX2hpZ2gxNiA+PiA4KTsKKwkJc21zYzkxMXhfcmVhZF9tYWNfYWRkcmVzcyhkZXYpOwogCiAJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CiAJCQkvKiBlZXByb20gdmFsdWVzIGFyZSB2YWxpZCAgc28gdXNlIHRoZW0gKi8KQEAgLTIwMjUsNyArMjA2NSw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBlZXByb20gdmFsdWVzIGFyZSBpbnZhbGlkLCBnZW5lcmF0ZSByYW5kb20gTUFDICovCiAJCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKLQkJCXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCQkJU01TQ19UUkFDRShQUk9CRSwKIAkJCQkiTUFDIEFkZHJlc3MgaXMgc2V0IHRvIHJhbmRvbV9ldGhlcl9hZGRyIik7CiAJCX0KQEAgLTIwMzMsOCArMjA3Myw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAKLQlkZXZfaW5mbygmZGV2LT5kZXYsICJNQUMgQWRkcmVzczogJXNcbiIsCi0JCSBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguaCBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKaW5kZXggMmI3NjY1NC4uYjU3MTZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguaAorKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5oCkBAIC04MSwxMiArODEsMTkgQEAKIAogI2RlZmluZSBSWF9TVEFUVVNfRklGTwkJCTB4NDAKICNkZWZpbmUgUlhfU1RTX0VTXwkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUlhfU1RTX0xFTkdUSF9FUlJfCQkweDAwMDAxMDAwCiAjZGVmaW5lIFJYX1NUU19NQ0FTVF8JCQkweDAwMDAwNDAwCisjZGVmaW5lIFJYX1NUU19GUkFNRV9UWVBFXwkJMHgwMDAwMDAyMAorI2RlZmluZSBSWF9TVFNfQ1JDX0VSUl8JCQkweDAwMDAwMDAyCiAKICNkZWZpbmUgUlhfU1RBVFVTX0ZJRk9fUEVFSwkJMHg0NAogCiAjZGVmaW5lIFRYX1NUQVRVU19GSUZPCQkJMHg0OAogI2RlZmluZSBUWF9TVFNfRVNfCQkJMHgwMDAwODAwMAorI2RlZmluZSBUWF9TVFNfTE9TVF9DQVJSSUVSXwkJMHgwMDAwMDgwMAorI2RlZmluZSBUWF9TVFNfTk9fQ0FSUklFUl8JCTB4MDAwMDA0MDAKKyNkZWZpbmUgVFhfU1RTX0xBVEVfQ09MXwkJMHgwMDAwMDIwMAorI2RlZmluZSBUWF9TVFNfRVhDRVNTX0NPTF8JCTB4MDAwMDAxMDAKIAogI2RlZmluZSBUWF9TVEFUVVNfRklGT19QRUVLCQkweDRDCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IDRlMTVhZTAuLjU5NTlhZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCQlzbXNjOTQyMF9wY2lfZmx1c2hfd3JpdGUocGQpOwogCiAJCQlpbnRzX3RvX2NsZWFyIHw9IChETUFDX1NUU19SWF8gfCBETUFDX1NUU19OSVNfKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZwZC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZwZC0+bmFwaSk7CiAJCX0KIAogCQlpZiAoaW50c190b19jbGVhcikKQEAgLTgwNyw3ICs4MDcsNyBAQAogCWlmIChwZC0+cnhfY3N1bSkgewogCQl1MTYgaHdfY3N1bSA9IGdldF91bmFsaWduZWRfbGUxNihza2JfdGFpbF9wb2ludGVyKHNrYikgKwogCQkJTkVUX0lQX0FMSUdOICsgcGFja2V0X2xlbmd0aCArIDQpOwotCQlwdXRfdW5hbGlnbmVkX2xlMTYoY3B1X3RvX2xlMTYoaHdfY3N1bSksICZza2ItPmNzdW0pOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoaHdfY3N1bSwgJnNrYi0+Y3N1bSk7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7CiAJfQogCkBAIC04OTMsNyArODkzLDcgQEAKIAlzbXNjOTQyMF9wY2lfZmx1c2hfd3JpdGUocGQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZSgmcGQtPm5hcGkpOworCQluYXBpX2NvbXBsZXRlKCZwZC0+bmFwaSk7CiAKIAkJLyogcmUtZW5hYmxlIFJYIERNQSBpbnRlcnJ1cHRzICovCiAJCWRtYV9pbnRyX2VuYSA9IHNtc2M5NDIwX3JlZ19yZWFkKHBkLCBETUFDX0lOVFJfRU5BKTsKQEAgLTExNjAsNyArMTE2MCw3IEBACiAJc21zY19pbmZvKFBST0JFLCAiUEhZIGFkZHIgJWQsIHBoeV9pZCAweCUwOFgiLCBwaHlkZXYtPmFkZHIsCiAJCXBoeWRldi0+cGh5X2lkKTsKIAotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJJnNtc2M5NDIwX3BoeV9hZGp1c3RfbGluaywgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKQEAgLTExNjksNyArMTE2OSw3IEBACiAJfQogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggODhkMmM2Ny4uOTBlNjYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAKIAkvKiBpZiBhbGwgcGFja2V0cyBhcmUgaW4gdGhlIHN0YWNrLCBlbmFibGUgaW50ZXJydXB0cyBhbmQgcmV0dXJuIDAgKi8KIAkvKiBpZiBub3QsIHJldHVybiAxICovCiAJaWYgKHBhY2tldHNfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3BpZGVyX25ldF9yeF9pcnFfb24oY2FyZCk7CiAJCWNhcmQtPmlnbm9yZV9yeF9yYW1mdWxsID0gMDsKIAl9CkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogCQkJc3BpZGVyX25ldF9yZWZpbGxfcnhfY2hhaW4oY2FyZCk7CiAJCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCQljYXJkLT5udW1fcnhfaW50cyArKzsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQl9CiAJCXNob3dfZXJyb3IgPSAwOwogCQlicmVhazsKQEAgLTE1NDgsNyArMTU0OCw3IEBACiAJCXNwaWRlcl9uZXRfcmVmaWxsX3J4X2NoYWluKGNhcmQpOwogCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQlzaG93X2Vycm9yID0gMDsKIAkJYnJlYWs7CiAKQEAgLTE1NjIsNyArMTU2Miw3IEBACiAJCXNwaWRlcl9uZXRfcmVmaWxsX3J4X2NoYWluKGNhcmQpOwogCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQlzaG93X2Vycm9yID0gMDsKIAkJYnJlYWs7CiAKQEAgLTE2NTYsMTEgKzE2NTYsMTEgQEAKIAogCWlmIChzdGF0dXNfcmVnICYgU1BJREVSX05FVF9SWElOVCApIHsKIAkJc3BpZGVyX25ldF9yeF9pcnFfb2ZmKGNhcmQpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQljYXJkLT5udW1fcnhfaW50cyArKzsKIAl9CiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX1RYSU5UKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX0xJTktJTlQpCiAJCXNwaWRlcl9uZXRfbGlua19yZXNldChuZXRkZXYpOwpAQCAtMjI1OSw2ICsyMjU5LDIzIEBACiAJY2FyZC0+c3BpZGVyX3N0YXRzLnR4X3RpbWVvdXRzKys7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BpZGVyX25ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNwaWRlcl9uZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gc3BpZGVyX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzcGlkZXJfbmV0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzcGlkZXJfbmV0X3NldF9tdWx0aSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHNwaWRlcl9uZXRfc2V0X21hYywKKwkubmRvX2NoYW5nZV9tdHUJCT0gc3BpZGVyX25ldF9jaGFuZ2VfbXR1LAorCS5uZG9fZG9faW9jdGwJCT0gc3BpZGVyX25ldF9kb19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gc3BpZGVyX25ldF90eF90aW1lb3V0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS8qIEhXIFZMQU4gKi8KKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS8qIHBvbGwgY29udHJvbGxlciAqLworCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gc3BpZGVyX25ldF9wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KK307CisKIC8qKgogICogc3BpZGVyX25ldF9zZXR1cF9uZXRkZXZfb3BzIC0gaW5pdGlhbGl6YXRpb24gb2YgbmV0X2RldmljZSBvcGVyYXRpb25zCiAgKiBAbmV0ZGV2OiBuZXRfZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjI2OCwyMSArMjI4NSw4IEBACiBzdGF0aWMgdm9pZAogc3BpZGVyX25ldF9zZXR1cF9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0JbmV0ZGV2LT5vcGVuID0gJnNwaWRlcl9uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmc3BpZGVyX25ldF9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gJnNwaWRlcl9uZXRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzcGlkZXJfbmV0X3NldF9tdWx0aTsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZzcGlkZXJfbmV0X3NldF9tYWM7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gJnNwaWRlcl9uZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPmRvX2lvY3RsID0gJnNwaWRlcl9uZXRfZG9faW9jdGw7Ci0JLyogdHggd2F0Y2hkb2cgKi8KLQluZXRkZXYtPnR4X3RpbWVvdXQgPSAmc3BpZGVyX25ldF90eF90aW1lb3V0OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZzcGlkZXJfbmV0X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gU1BJREVSX05FVF9XQVRDSERPR19USU1FT1VUOwotCS8qIEhXIFZMQU4gKi8KLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS8qIHBvbGwgY29udHJvbGxlciAqLwotCW5ldGRldi0+cG9sbF9jb250cm9sbGVyID0gJnNwaWRlcl9uZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAJLyogZXRodG9vbCBvcHMgKi8KIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJnNwaWRlcl9uZXRfZXRodG9vbF9vcHM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCBkYTNhNzZiLi5mY2I5NDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogI2RlZmluZSBGSVJNV0FSRV9UWAkiYWRhcHRlYy9zdGFyZmlyZV90eC5iaW4iCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIEtFUk5fSU5GTyAic3RhcmZpcmUuYzp2MS4wMyA3LzI2LzIwMDAgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKIEtFUk5fSU5GTyAiICh1bm9mZmljaWFsIDIuMi8yLjQga2VybmVsIHBvcnQsIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICIpXG4iOwogCkBAIC0xMzQyLDggKzEzNDIsOCBAQAogCQlpZiAoaW50cl9zdGF0dXMgJiAoSW50clJ4RG9uZSB8IEludHJSeEVtcHR5KSkgewogCQkJdTMyIGVuYWJsZTsKIAotCQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpKSB7Ci0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJm5wLT5uYXBpKSkpIHsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAkJCQllbmFibGUgPSByZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAkJCQllbmFibGUgJj0gfihJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpOwogCQkJCXdyaXRlbChlbmFibGUsIGlvYWRkciArIEludHJFbmFibGUpOwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyU3RhdHVzKTsKIAl9IHdoaWxlIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpKTsKIAotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAlpbnRyX3N0YXR1cyB8PSBJbnRyUnhEb25lIHwgSW50clJ4RW1wdHk7CiAJd3JpdGVsKGludHJfc3RhdHVzLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCA3ZjY5YzdmLi41MDE3ZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC0xMDc0LDYgKzEwNzQsMTggQEAKIAkuZ2V0X2xpbmsJCT0gYmlnbWFjX2dldF9saW5rLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiaWdtYWNfb3BzID0geworCS5uZG9fb3BlbgkJPSBiaWdtYWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gYmlnbWFjX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBiaWdtYWNfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBiaWdtYWNfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYmlnbWFjX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGJpZ21hY190eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJpZ21hY19ldGhlcl9pbml0KHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCQkJCSAgICAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpxZWNfb3ApCiB7CkBAIC0xMTg3LDE2ICsxMTk5LDggQEAKIAlicC0+ZGV2ID0gZGV2OwogCiAJLyogU2V0IGxpbmtzIHRvIG91ciBCaWdNQUMgb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMuICovCi0JZGV2LT5vcGVuID0gJmJpZ21hY19vcGVuOwotCWRldi0+c3RvcCA9ICZiaWdtYWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYmlnbWFjX3N0YXJ0X3htaXQ7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZiaWdtYWNfZXRodG9vbF9vcHM7Ci0KLQkvKiBTZXQgbGlua3MgdG8gQmlnTUFDIHN0YXRpc3RpYyBhbmQgbXVsdGktY2FzdCBsb2FkaW5nIGNvZGUuICovCi0JZGV2LT5nZXRfc3RhdHMgPSAmYmlnbWFjX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZiaWdtYWNfc2V0X211bHRpY2FzdDsKLQotCWRldi0+dHhfdGltZW91dCA9ICZiaWdtYWNfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYmlnbWFjX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKIAogCS8qIEZpbmlzaCBuZXQgZGV2aWNlIHJlZ2lzdHJhdGlvbi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IDQzNjk1YjcuLmMzOTliMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtMTA5LDggKzEwOSw5IEBACiAjZW5kaWYKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1bmRhbmNlIEFsdGEgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IGM5Yzc2NTAuLmMwMjQzNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC05MjEsNyArOTIxLDcgQEAKIAkJZ3AtPnN0YXR1cyA9IHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKIAl9IHdoaWxlIChncC0+c3RhdHVzICYgR1JFR19TVEFUX05BUEkpOwogCi0JX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJZ2VtX2VuYWJsZV9pbnRzKGdwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmdwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmdwLT5uYXBpKSkgewogCQl1MzIgZ2VtX3N0YXR1cyA9IHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKIAogCQlpZiAoZ2VtX3N0YXR1cyA9PSAwKSB7CkBAIC05NTQsNyArOTU0LDcgQEAKIAkJfQogCQlncC0+c3RhdHVzID0gZ2VtX3N0YXR1czsKIAkJZ2VtX2Rpc2FibGVfaW50cyhncCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmdwLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZncC0+bmFwaSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCmluZGV4IDE2YzUyOGQuLmFmYzdiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwpAQCAtMTMxMSw2ICsxMzExLDE3IEBACiAJLmdldF9saW5rCQk9IHNwYXJjX2xhbmNlX2dldF9saW5rLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcGFyY19sYW5jZV9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxhbmNlX29wZW4sCisJLm5kb19zdG9wCQk9IGxhbmNlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsYW5jZV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbGFuY2Vfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbGFuY2VfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzcGFyY19sYW5jZV9wcm9iZV9vbmUoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkJCSAgIHN0cnVjdCBvZl9kZXZpY2UgKmxlZG1hLAogCQkJCQkgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpsZWJ1ZmZlcikKQEAgLTE0NjIsMTMgKzE0NzMsOSBAQAogCiAJbHAtPmRldiA9IGRldjsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvcC0+ZGV2KTsKLQlkZXYtPm9wZW4gPSAmbGFuY2Vfb3BlbjsKLQlkZXYtPnN0b3AgPSAmbGFuY2VfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbGFuY2Vfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmbGFuY2VfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZsYW5jZV9zZXRfbXVsdGljYXN0OwogCWRldi0+ZXRodG9vbF9vcHMgPSAmc3BhcmNfbGFuY2VfZXRodG9vbF9vcHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNwYXJjX2xhbmNlX29wczsKIAogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnFlLmMgYi9kcml2ZXJzL25ldC9zdW5xZS5jCmluZGV4IGZlMGMzZjIuLmM2ZWM2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnFlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VucWUuYwpAQCAtODI5LDYgKzgyOSwxNyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFlY19vcHMgPSB7CisJLm5kb19vcGVuCQk9IHFlX29wZW4sCisJLm5kb19zdG9wCQk9IHFlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBxZV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcWVfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gcWVfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBxZWNfZXRoZXJfaW5pdChzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkOwpAQCAtODkzLDE1ICs5MDQsMTEgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9wLT5kZXYpOwogCi0JZGV2LT5vcGVuID0gcWVfb3BlbjsKLQlkZXYtPnN0b3AgPSBxZV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHFlX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBxZV9zZXRfbXVsdGljYXN0OwotCWRldi0+dHhfdGltZW91dCA9IHFlX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7CiAJZGV2LT5pcnEgPSBvcC0+aXJxc1swXTsKIAlkZXYtPmRtYSA9IDA7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZxZV9ldGh0b29sX29wczsKKwlkZXYtPm5ldGRldl9vcHMgPSAmcWVjX29wczsKIAogCXJlcyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW52bmV0LmMgYi9kcml2ZXJzL25ldC9zdW52bmV0LmMKaW5kZXggNjExMjMwZi4uYTgyZmIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3Vudm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnZuZXQuYwpAQCAtMTAxMiw2ICsxMDEyLDE2IEBACiBzdGF0aWMgTElTVF9IRUFEKHZuZXRfbGlzdCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHZuZXRfbGlzdF9tdXRleCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm5ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHZuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdm5ldF9jbG9zZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHZuZXRfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB2bmV0X3NldF9tYWNfYWRkciwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB2bmV0X2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IHZuZXRfc3RhcnRfeG1pdCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgdm5ldCAqIF9fZGV2aW5pdCB2bmV0X25ldyhjb25zdCB1NjQgKmxvY2FsX21hYykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTA0MCwxNSArMTA1MCw5IEBACiAJSU5JVF9MSVNUX0hFQUQoJnZwLT5saXN0KTsKIAl2cC0+bG9jYWxfbWFjID0gKmxvY2FsX21hYzsKIAotCWRldi0+b3BlbiA9IHZuZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB2bmV0X2Nsb3NlOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdm5ldF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHZuZXRfc2V0X21hY19hZGRyOwotCWRldi0+dHhfdGltZW91dCA9IHZuZXRfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdm5ldF9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ2bmV0X2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBWTkVUX1RYX1RJTUVPVVQ7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gdm5ldF9jaGFuZ2VfbXR1OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdm5ldF9zdGFydF94bWl0OwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCmluZGV4IGJjZDBlNjAuLmI1MmExYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYworKysgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKQEAgLTcyNSw3ICs3MjUsNyBAQAogCX0KIAogCS8qIGF0dGFjaCB0aGUgbWFjIHRvIHRoZSBwaHkgKi8KLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkgICAgICZ0Y19oYW5kbGVfbGlua19jaGFuZ2UsIDAsCiAJCQkgICAgIGxwLT5jaGlwdHlwZSA9PSBUQzM1ODE1X1RYNDkzOSA/CiAJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJIDogUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CkBAIC03MzUsNyArNzM1LDcgQEAKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAiCiAJCSIobWlpX2J1czpwaHlfYWRkcj0lcywgaWQ9JXgpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsCisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCXBoeWRldi0+cGh5X2lkKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCkBAIC0xNjA5LDggKzE2MDksOCBAQAogCWlmICghKGRtYWN0bCAmIERNQV9JbnRNYXNrKSkgewogCQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAkJdGNfd3JpdGVsKGRtYWN0bCB8IERNQV9JbnRNYXNrLCAmdHItPkRNQV9DdGwpOwotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKQotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpCisJCQlfX25hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAkJZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnRlcnJ1cHQgdGFrZW4gaW4gcG9sbFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtMTkxOSw3ICsxOTE5LDcgQEAKIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5ETUFfQ3RsKSAmIH5ETUFfSW50TWFzaywgJnRyLT5ETUFfQ3RsKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuYyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCmluZGV4IGE3YTRkYzQuLjdkZWJkMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCkBAIC02Myw3ICs2Myw2IEBACiAgKi8KIAogI2luY2x1ZGUgInRlaHV0aS5oIgotI2luY2x1ZGUgInRlaHV0aV9mdy5oIgogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBiZHhfcGNpX3RibFtdID0gewogCXsweDFGQzksIDB4MzAwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCkBAIC0yNjUsOCArMjY0LDggQEAKIAkJYmR4X2lzcl9leHRyYShwcml2LCBpc3IpOwogCiAJaWYgKGlzciAmIChJUl9SWF9ERVNDXzAgfCBJUl9UWF9GUkVFXzApKSB7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpKSB7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSkgeworCQkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAkJCVJFVChJUlFfSEFORExFRCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBOT1RFOiB3ZSBnZXQgaGVyZSBpZiBpbnRyIGhhcyBzbGlwcGVkIGludG8gd2luZG93CkBAIC0zMDIsNyArMzAxLDcgQEAKIAkJICogZGV2aWNlIGxvY2sgYW5kIGFsbG93IHdhaXRpbmcgdGFza3MgKGVnIHJtbW9kKSB0byBhZHZhbmNlKSAqLwogCQlwcml2LT5uYXBpX3N0b3AgPSAwOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQliZHhfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0zMTgsMjggKzMxNyw0MSBAQAogCiBzdGF0aWMgaW50IGJkeF9md19sb2FkKHN0cnVjdCBiZHhfcHJpdiAqcHJpdikKIHsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAlpbnQgbWFzdGVyLCBpOworCWludCByYzsKIAogCUVOVEVSOwogCW1hc3RlciA9IFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU0VNQVBIT1JFKTsKIAlpZiAoIVJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSAmJiBtYXN0ZXIpIHsKLQkJYmR4X3R4X3B1c2hfZGVzY19zYWZlKHByaXYsIHNfZmlybUxvYWQsIHNpemVvZihzX2Zpcm1Mb2FkKSk7CisJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZncsICJ0ZWh1dGkvZmlybXdhcmUuYmluIiwgJnByaXYtPnBkZXYtPmRldik7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCQliZHhfdHhfcHVzaF9kZXNjX3NhZmUocHJpdiwgKGNoYXIgKilmdy0+ZGF0YSwgZnctPnNpemUpOwogCQltZGVsYXkoMTAwKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7Ci0JCWlmIChSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUykpCi0JCQlicmVhazsKKwkJaWYgKFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSkgeworCQkJcmMgPSAwOworCQkJZ290byBvdXQ7CisJCX0KIAkJbWRlbGF5KDIpOwogCX0KKwlyYyA9IC1FSU87CitvdXQ6CiAJaWYgKG1hc3RlcikKIAkJV1JJVEVfUkVHKHByaXYsIHJlZ0lOSVRfU0VNQVBIT1JFLCAxKTsKKwlpZiAoZncpCisJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JaWYgKGkgPT0gMjAwKSB7CisJaWYgKHJjKSB7CiAJCUVSUigiJXM6IGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKLQkJREJHKCJWUEMgPSAweCV4IFZJQyA9IDB4JXggSU5JVF9TVEFUVVMgPSAweCV4IGk9JWRcbiIsCi0JCSAgICBSRUFEX1JFRyhwcml2LCByZWdWUEMpLAotCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVklDKSwgUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpLCBpKTsKLQkJUkVUKC1FSU8pOworCQlpZiAocmMgPT0gLUVJTykKKwkJCURCRygiVlBDID0gMHgleCBWSUMgPSAweCV4IElOSVRfU1RBVFVTID0gMHgleCBpPSVkXG4iLAorCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZQQyksCisJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVklDKSwKKwkJCSAgICBSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUyksIGkpOworCQlSRVQocmMpOwogCX0gZWxzZSB7CiAJCURCRygiJXM6IGZpcm13YXJlIGxvYWRpbmcgc3VjY2Vzc1xuIiwgcHJpdi0+bmRldi0+bmFtZSk7CiAJCVJFVCgwKTsKQEAgLTYxNywxMyArNjI5LDYgQEAKIAlSRVQocmMpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYmR4X2Zpcm13YXJlX2VuZGlhbmVzcyh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNfZmlybUxvYWQpOyBpKyspCi0JCXNfZmlybUxvYWRbaV0gPSBDUFVfQ0hJUF9TV0FQMzIoc19maXJtTG9hZFtpXSk7Ci19Ci0KIHN0YXRpYyBpbnQgYmR4X3JhbmdlX2NoZWNrKHN0cnVjdCBiZHhfcHJpdiAqcHJpdiwgdTMyIG9mZnNldCkKIHsKIAlyZXR1cm4gKG9mZnNldCA+ICh1MzIpIChCRFhfUkVHU19TSVpFIC8gcHJpdi0+bmljLT5wb3J0X251bSkpID8KQEAgLTI1MDEsNyArMjUwNiw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBiZHhfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlFTlRFUjsKLQliZHhfZmlybXdhcmVfZW5kaWFuZXNzKCk7CiAJaW5pdF90eGRfc2l6ZXMoKTsKIAlwcmludF9kcml2ZXJfaWQoKTsKIAlSRVQocGNpX3JlZ2lzdGVyX2RyaXZlcigmYmR4X3BjaV9kcml2ZXIpKTsKQEAgLTI1MjEsMyArMjUyNSw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKEJEWF9EUlZfREVTQyk7CitNT0RVTEVfRklSTVdBUkUoInRlaHV0aS9maXJtd2FyZS5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKaW5kZXggZWZhZjg0ZC4uZGVjNjdlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmgKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKiBDb21waWxlIFRpbWUgU3dpdGNoZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aV9mdy5oIGIvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNjAzYTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcxMiArMCwwIEBACi0vKgotICogVGVodXRpIE5ldHdvcmtzKFIpIE5ldHdvcmsgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotLyogTG9hZGluZyBGaXJtd2FyZSAqLwotLyogSU5UX01FTSBWZXIgKi8KLXN0YXRpYyB1MzIgc19maXJtTG9hZFtdID0gewotCTB4MDAwZjAwMDIsCi0JMHg0MDcxODAwMCwKLQkweDAwMDAwMDJkLAotCTB4YzAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAxLAotCTB4MDAwMDAwMmQsCi0JMHhjMDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDIsCi0JMHgwMDAwMDAyZCwKLQkweGMxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMywKLQkweDAwMDAwMDJkLAotCTB4YzE4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA0LAotCTB4MDAwMDAwMmQsCi0JMHhjMjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDUsCi0JMHgwMDAwMDAyZCwKLQkweGMyODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNiwKLQkweDAwMDAwMDJkLAotCTB4YzMwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA3LAotCTB4MDAwMDAwMmQsCi0JMHhjMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDgsCi0JMHgwMDAwMDAyZCwKLQkweGM0MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOSwKLQkweDAwMDAwMDJkLAotCTB4YzQ4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBhLAotCTB4MDAwMDAwMmQsCi0JMHhjNTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGIsCi0JMHgwMDAwMDAyZCwKLQkweGM1ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYywKLQkweDAwMDAwMDJkLAotCTB4YzYwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBkLAotCTB4MDAwMDAwMmQsCi0JMHhjNjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGUsCi0JMHgwMDAwMDAyZCwKLQkweGM3MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZiwKLQkweDAwMDAwMDJkLAotCTB4Yzc4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEwLAotCTB4MDAwMDAwMmQsCi0JMHhjODAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTEsCi0JMHgwMDAwMDAyZCwKLQkweGM4ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMiwKLQkweDAwMDAwMDJkLAotCTB4YzkwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEzLAotCTB4MDAwMDAwMmQsCi0JMHhjOTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTQsCi0JMHgwMDAwMDAyZCwKLQkweGNhMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNSwKLQkweDAwMDAwMDJkLAotCTB4Y2E4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE2LAotCTB4MDAwMDAwMmQsCi0JMHhjYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTcsCi0JMHgwMDAwMDAyZCwKLQkweGNiODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOCwKLQkweDAwMDAwMDJkLAotCTB4Y2MwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE5LAotCTB4MDAwMDAwMmQsCi0JMHhjYzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWEsCi0JMHgwMDAwMDAyZCwKLQkweGNkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYiwKLQkweDAwMDAwMDJkLAotCTB4Y2Q4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFjLAotCTB4MDAwMDAwMmQsCi0JMHhjZTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWQsCi0JMHgwMDAwMDAyZCwKLQkweGNlODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZSwKLQkweDAwMDAwMDJkLAotCTB4Y2YwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFmLAotCTB4MDAwMDAwMmQsCi0JMHhjZjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjAsCi0JMHgwMDAwMDAyZCwKLQkweGQwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMSwKLQkweDAwMDAwMDJkLAotCTB4ZDA4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIyLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjMsCi0JMHgwMDAwMDAyZCwKLQkweGQxODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNCwKLQkweDAwMDAwMDJkLAotCTB4ZDIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI1LAotCTB4MDAwMDAwMmQsCi0JMHhkMjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjYsCi0JMHgwMDAwMDAyZCwKLQkweGQzMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNywKLQkweDAwMDAwMDJkLAotCTB4ZDM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI4LAotCTB4MDAwMDAwMmQsCi0JMHhkNDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjksCi0JMHgwMDAwMDAyZCwKLQkweGQ0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYSwKLQkweDAwMDAwMDJkLAotCTB4ZDUwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJiLAotCTB4MDAwMDAwMmQsCi0JMHhkNTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmMsCi0JMHgwMDAwMDAyZCwKLQkweGQ2MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZCwKLQkweDAwMDAwMDJkLAotCTB4ZDY4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJlLAotCTB4MDAwMDAwMmQsCi0JMHhkNzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmYsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMCwKLQkweDAwMDAwMDJkLAotCTB4ZDgwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMxLAotCTB4MDAwMDAwMmQsCi0JMHhkODgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzIsCi0JMHgwMDAwMDAyZCwKLQkweGQ5MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMywKLQkweDAwMDAwMDJkLAotCTB4ZDk4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM0LAotCTB4MDAwMDAwMmQsCi0JMHhkYTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzUsCi0JMHgwMDAwMDAyZCwKLQkweGRhODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNiwKLQkweDAwMDAwMDJkLAotCTB4ZGIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM3LAotCTB4MDAwMDAwMmQsCi0JMHhkYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzgsCi0JMHgwMDAwMDA3YiwKLQkweGRkNjA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNhLAotCTB4MDAwMDAwMmQsCi0JMHhkYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2IsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYywKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY0LAotCTB4MDAwMDAwMmQsCi0JMHhkYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwODA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDNkMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA3MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDczLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzNzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2EsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0YWEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDFlNDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg4LAotCTB4MDAwMDAwM2YsCi0JMHhkNzgwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODksCi0JMHgwMDAwMDAzZiwKLQkweGQ3OTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YSwKLQkweDAwMDAwMDU5LAotCTB4ZDc4MDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhiLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhlLAotCTB4MDAwMDAwMmQsCi0JMHhkN2Q2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGYsCi0JMHgwMDAwMDAxOCwKLQkweDE3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTIsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ZDgwMGI4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MywKLQkweDAwMDAwMDE4LAotCTB4MTdlYjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0YWE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwOTE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDE5ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE5LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwYzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI4LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjksCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMxLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2IsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNkLAotCTB4MDAwMDAwMmQsCi0JMHhkMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2UsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAzNzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZiwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDA0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQwLAotCTB4MDAwMDAwM2YsCi0JMHhkMTg0MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDQsCi0JMHgwMDAwMDAzZiwKLQkweGQxN2ZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNSwKLQkweDAwMDAwMDNmLAotCTB4ZDE3ZmZmODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRjLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDc4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGQsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRmLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTAsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMSwKLQkweDAwMDAwMDU5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU1LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTYsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNywKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxMzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU4LAotCTB4MDAwMDAwOTQsCi0JMHgwMDBiMzEzYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTksCi0JMHgwMDAwMDA5NCwKLQkweDAwMDkzMTNkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYSwKLQkweDAwMDAwMDk0LAotCTB4MDAwNzMxM2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGViLAotCTB4MDAwMDAwOTQsCi0JMHgwMDA1M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWMsCi0JMHgwMDAwMDAwOSwKLQkweGMxZWQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZCwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMGI3ODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjIsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY0LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjUsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY3LAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjgsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZkLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmUsCi0JMHgwMDAwMDAxOCwKLQkweDFkMmQzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZiwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAwLAotCTB4MDAwMDAwMTgsCi0JMHgxZDEzM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDEsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMiwKLQkweDAwMDAwMDE4LAotCTB4MWQxYjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOCwKLQkweDAwMDAwMDA5LAotCTB4YzUyZDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA5LAotCTB4MDAwMDAwMjksCi0JMHhkMjAxMDA2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZSwKLQkweDAwMDAwMDA5LAotCTB4YzIyOTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBmLAotCTB4MDAwMDAwMjksCi0JMHhkMjAwMDA2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE1LAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE4LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTksCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYSwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFiLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWMsCi0JMHgwMDAwMDAxOCwKLQkweDFkMGYzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjIsCi0JMHgwMDAwMDAwOSwKLQkweGM1MmQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMywKLQkweDAwMDAwMDJkLAotCTB4ZDEwODAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI0LAotCTB4MDAwMDAwMDgsCi0JMHgyM2MzM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjUsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNiwKLQkweDAwMDAwMDNmLAotCTB4ZDMwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI3LAotCTB4MDAwMDAwM2YsCi0JMHhkMzA0MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjgsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODE0MDg1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOSwKLQkweDAwMDAwMDNmLAotCTB4ZDRmZmZmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJhLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDc4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmIsCi0JMHgwMDAwMDAzZiwKLQkweGQxZmZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYywKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJkLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzY2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM2LAotCTB4MDAwMDAwNjEsCi0JMHhmNjAwMDQ2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzcsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOCwKLQkweDAwMDAwMDE4LAotCTB4M2Q2YjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM5LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMDU4YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2EsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODEwMTA2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYiwKLQkweDAwMDAwMDJkLAotCTB4ZDIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNjLAotCTB4MDAwMDAwMjEsCi0JMHhkMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2QsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNmLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDAsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQyLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDMsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NCwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ1LAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDYsCi0JMHgwMDAwMDA0OSwKLQkweGQxN2EzM2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NywKLQkweDAwMDAwMDJmLAotCTB4ZDE3MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ4LAotCTB4MDAwMDAwMmYsCi0JMHhkMTYxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDksCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGMsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRlLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUxLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU0LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTUsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU3LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTgsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVhLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWIsCi0JMHgwMDAwMDAyZCwKLQkweGQxNmMwN2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YywKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWUsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYwLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYzLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjQsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjcsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY5LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZjLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmQsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE3ODMzZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZmLAotCTB4MDAwMDAwMmYsCi0JMHhkMTcxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzAsCi0JMHgwMDAwMDAyZiwKLQkweGQxNjEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NCwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc1LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc4LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzksCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2MsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdlLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2YsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgxLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODIsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MywKLQkweDAwMDAwMDJkLAotCTB4ZDE2ODA3ZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg0LAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YywKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThkLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGUsCi0JMHgwMDAwMDAwOCwKLQkweDIyNzkwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZiwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDA2MGMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkwLAotCTB4MDAwMDAwMmYsCi0JMHhkNjgxMDEwNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTEsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkzLAotCTB4MDAwMDAwM2YsCi0JMHhkNTAwMDEwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTQsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NSwKLQkweDAwMDAwMDNmLAotCTB4ZDU4MDAyMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk2LAotCTB4MDAwMDAwM2YsCi0JMHhkNTgwMDIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTcsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OCwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk5LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWEsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM0ZTksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTljLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzU2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWQsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlmLAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTAsCi0JMHgwMDAwMDA0MSwKLQkweGQ1MDAzNTZiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEyLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTMsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNCwKLQkweDAwMDAwMDQ5LAotCTB4ZDY4MDNiMDcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE1LAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTYsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWYsCi0JMHgwMDAwMDA2MSwKLQkweGY2MDAwNDZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIxLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjIsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMywKLQkweDAwMDAwMDQ5LAotCTB4ZDY4MDNiMDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI0LAotCTB4MDAwMDAwNDksCi0JMHhkNTgwM2IwOSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM1ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYywKLQkweDAwMDAwMDQxLAotCTB4ZDYwMDA3ZWMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJkLAotCTB4MDAwMDAwNDEsCi0JMHhkNTgwMDg2YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmUsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZiwKLQkweDAwMDAwMDE4LAotCTB4MzdlZDAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMwLAotCTB4MDAwMDAwM2YsCi0JMHhkNGZmZmY4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzEsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDIwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMiwKLQkweDAwMDAwMDNmLAotCTB4ZDUxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMzLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM2LAotCTB4MDAwMDAwMjEsCi0JMHhkNTAwMDBlYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzcsCi0JMHgwMDAwMDA0OSwKLQkweGRkMGUzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOCwKLQkweDAwMDAwMDM1LAotCTB4ZDEwNDAwN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM5LAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2EsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ZmZmZjgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYiwKLQkweDAwMDAwMDNmLAotCTB4ZDUwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNjLAotCTB4MDAwMDAwM2YsCi0JMHhkNTE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNmLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDAsCi0JMHgwMDAwMDA1MSwKLQkweGY1MDAwMGVhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDMsCi0JMHgwMDAwMDA0OSwKLQkweGRkMGUzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNCwKLQkweDAwMDAwMDM1LAotCTB4ZDEwNDgwN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ1LAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDYsCi0JMHgwMDAwMDAzZiwKLQkweGM3N2Y3ZjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNywKLQkweDAwMDAwMDNmLAotCTB4Yzc3ZjdmMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwNDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDksCi0JMHgwMDAwMDAzZiwKLQkweGQxMDNjMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYSwKLQkweDAwMDAwMDI1LAotCTB4ZGUyMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRiLAotCTB4MDAwMDAwNDksCi0JMHhkZTgwMjc0ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRlLAotCTB4MDAwMDAwMzUsCi0JMHhkMTAwMDBlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGYsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMCwKLQkweDAwMDAwMDE4LAotCTB4MzdmNTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDFkM2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTUsCi0JMHgwMDAwMDA3ZCwKLQkweGM3NjBhNzEzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNiwKLQkweDAwMDAwMDMxLAotCTB4YzA4MDAwNDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU3LAotCTB4MDAwMDAwMzEsCi0JMHhjNDAwMDA0OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTgsCi0JMHgwMDAwMDAzMSwKLQkweGMyODAwMDQ1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjQsCi0JMHgwMDAwMDAyZCwKLQkweGRiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmEsCi0JMHgwMDAwMDAyZCwKLQkweGQzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYTE0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZmLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA1MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYTk1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA4LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA2MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjExLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGIxNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDE4MDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxNjAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEzMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2MsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDUwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2YsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMTkwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIyMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAyODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjMwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYjk3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY1LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE5MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYzE4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZlLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGIxNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2IsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFjMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2UsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYzk5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWM4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBkMWEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGQ5YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWQ4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGUxYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDBmMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTYsCi0JMHgwMDAwMDA3ZCwKLQkweGM3NjBhNzEzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NywKLQkweDAwMDAwMDMxLAotCTB4YzA4MDAwNDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk4LAotCTB4MDAwMDAwMzEsCi0JMHhjNDAwMDA0OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTksCi0JMHgwMDAwMDAzMSwKLQkweGMyODAwMDQ1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YSwKLQkweDAwMDAwMDMxLAotCTB4ZDY4MDAwNmQsCi0vKiBCUkRYX0lOSVRfU0RSQU0gKi8KLQkweDAwMGYwMDBmLAotCTB4MDA3MDAwNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA0MCwKLQkweDAwMDAwMTAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMDA2NCwKLQkweDAwMDAwMDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMjQwMCwKLQkweDAwMDAyODAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMjg4MCwKLQkweDAwMDAwMTgwLAotCTB4MDAwMDAwMDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMTdkLAotCTB4MDAwMDAwMDgsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwOSwKLQkweDAwMDA1MDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLS8qIEJSRFhfSU5JVCAqLwotCTB4MDAwZjAwMGYsCi0JMHgwMDcwMDFmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDQwLAotCTB4MDAwMDAxMDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAwMDY0LAotCTB4MDAwMDAwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAyNDAwLAotCTB4MDAwMDI4MDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAyODgwLAotCTB4MDAwMDAxODAsCi0JMHgwMDAwMDAwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAxN2QsCi0JMHgwMDAwMDAwOCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDA5LAotCTB4MDAwMDUwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotLyogWkVST19JTklUICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzAwMDAwLAotCTB4MDAwMDAwMDEsCi0JMHgwMDAwMDAwMCwKLS8qIFpFUk9fSU5JVCAqLwotCTB4MDAwZjAwMDIsCi0JMHgwMDcwMDAwMCwKLQkweDAwMDAwMDAxLAotCTB4MDAwMDAwMDAsCi0vKiBMb2FkaW5nIG9wZXJhdGlvbmFsIEZpcm13YXJlICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAwLAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDAwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDEsCi0JMHgwMDAwMDAwNCwKLQkweDAxZDEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAzLAotCTB4MDAwMDAwMDQsCi0JMHgwMjg5M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDQsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNSwKLQkweDAwMDAwMDA0LAotCTB4MDI4NTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA2LAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDE4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDcsCi0JMHgwMDAwMDAwNCwKLQkweDAzZmQzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOCwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjgsCi0JMHgwMDAwMDA0OSwKLQkweGMwMDAzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOSwKLQkweDAwMDAwMDQ5LAotCTB4YzA4MDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJhLAotCTB4MDAwMDAwNDksCi0JMHhjMTAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmIsCi0JMHgwMDAwMDA0OSwKLQkweGMxODAzYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYywKLQkweDAwMDAwMDI5LAotCTB4ZGY2MDAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJkLAotCTB4MDAwMDAwNDksCi0JMHhkZjQ0M2I3ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmUsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYwLAotCTB4MDAwMDAwM2YsCi0JMHhkZjAwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjEsCi0JMHgwMDAwMDAyZCwKLQkweGRkZTAwZjgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYzLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0MDE4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjQsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMTUwMDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NSwKLQkweDAwMDAwMDdhLAotCTB4MTAyMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY2LAotCTB4MDAwMDAwN2EsCi0JMHgzMDIwN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjcsCi0JMHgwMDAwMDAyMSwKLQkweGQwMjQwMDYwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDQwMDI4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFiYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YiwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWZiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZjLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZSwKLQkweDAwMDAwMDc5LAotCTB4ZmQyMTAxMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZmLAotCTB4MDAwMDAwN2QsCi0JMHhmZDJiNDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzAsCi0JMHgwMDAwMDA0MCwKLQkweDNkMDAzMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MSwKLQkweDAwMDAwMDQ4LAotCTB4MWQwMDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcyLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQwNTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NCwKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc4LAotCTB4MDAwMDAwMjEsCi0JMHhlMzM3MWY3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzksCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YSwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2MsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdlLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2YsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MCwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgxLAotCTB4MDAwMDAwM2YsCi0JMHhkZjAwMDA4MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTAsCi0JMHgwMDAwMDAyZCwKLQkweGQwMDgwODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMSwKLQkweDAwMDAwMDA4LAotCTB4MjFiNWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEyLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDE4MTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNCwKLQkweDAwMDAwMDdkLAotCTB4ZmQwMTgwODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE1LAotCTB4MDAwMDAwNzksCi0JMHhkMDkwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTYsCi0JMHgwMDAwMDA0OSwKLQkweGQwNTgzYjdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNywKLQkweDAwMDAwMDQ5LAotCTB4ZDIwNDNiMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE4LAotCTB4MDAwMDAwM2QsCi0JMHhkZDQwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTksCi0JMHgwMDAwMDAyNCwKLQkweDMyMDAwMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYSwKLQkweDAwMDAwMDNkLAotCTB4ZGQ3ZmY4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFiLAotCTB4MDAwMDAwMjksCi0JMHhkMDIwMDE3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWMsCi0JMHgwMDAwMDA0OSwKLQkweGQwYTQzYjBlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZCwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQyZmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFlLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMCwKLQkweDAwMDAwMDM4LAotCTB4MzAwMDAxZTAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIxLAotCTB4MDAwMDAwMzksCi0JMHhkMDAwMDE2MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjIsCi0JMHgwMDAwMDA3OSwKLQkweGQxYjEzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMywKLQkweDAwMDAwMDJkLAotCTB4ZGRlMDBmZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI0LAotCTB4MDAwMDAwNDksCi0JMHhkMDgwMzBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjUsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzE3YjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNiwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI3LAotCTB4MDAwMDAwN2QsCi0JMHhmZDM3NDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjgsCi0JMHgwMDAwMDAwOCwKLQkweDAxN2QzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAwMzg3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYywKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTA0MDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJkLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxN2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmUsCi0JMHgwMDAwMDA0OSwKLQkweGQzMDAzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZiwKLQkweDAwMDAwMDc5LAotCTB4ZDM4MWJiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMwLAotCTB4MDAwMDAwN2YsCi0JMHhkMTAxYjI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzEsCi0JMHgwMDAwMDA0OCwKLQkweDUxMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMiwKLQkweDAwMDAwMDNkLAotCTB4ZGQ0MDAwMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMzLAotCTB4MDAwMDAwMDgsCi0JMHgwMTk1MzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzQsCi0JMHgwMDAwMDAyMSwKLQkweGQzMDAwNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNSwKLQkweDAwMDAwMDIwLAotCTB4NTM4MDAwZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDgwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzcsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiMzY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWIzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM5LAotCTB4MDAwMDAwNzUsCi0JMHhmMTAxODY2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2EsCi0JMHgwMDAwMDA3NSwKLQkweGQyMDFiMTY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYiwKLQkweDAwMDAwMDc4LAotCTB4MWQwMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNjLAotCTB4MDAwMDAwMjUsCi0JMHhkZDAwMDFlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2QsCi0JMHgwMDAwMDAwOCwKLQkweDAxYjEzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNmLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMSwKLQkweDAwMDAwMDIxLAotCTB4ZTMzNzlmNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQyLAotCTB4MDAwMDAwNDksCi0JMHhkMzAwM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDMsCi0JMHgwMDAwMDA3OSwKLQkweGQzODFiYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNCwKLQkweDAwMDAwMDdmLAotCTB4ZDEwMWIyN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ1LAotCTB4MDAwMDAwNDgsCi0JMHg1MTAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDYsCi0JMHgwMDAwMDA3NSwKLQkweGQyMDFiMTY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNywKLQkweDAwMDAwMDc4LAotCTB4MWQwMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDksCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFjMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYSwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA4MDgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGMsCi0JMHgwMDAwMDA3OCwKLQkweDNkMDFjMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTgsCi0JMHgwMDAwMDA0OSwKLQkweGQxOGUzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOSwKLQkweDAwMDAwMDJmLAotCTB4ZDE4MTAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVhLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWIsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYywKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVkLAotCTB4MDAwMDAwNDksCi0JMHhkMjA0M2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWUsCi0JMHgwMDAwMDA0OSwKLQkweGQyODQzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYwLAotCTB4MDAwMDAwOTQsCi0JMHgwMDEzNDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjEsCi0JMHgwMDAwMDA5NCwKLQkweDAwMGI0MzYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMiwKLQkweDAwMDAwMDk0LAotCTB4MDAxNTQ4ZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYzLAotCTB4MDAwMDAwOTQsCi0JMHgwMDFiNDk2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjQsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmY0MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY2LAotCTB4MDAwMDAwMWQsCi0JMHhmZDJiODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjcsCi0JMHgwMDAwMDAzMCwKLQkweDMxODM4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOCwKLQkweDAwMDAwMDMwLAotCTB4MTE4MjgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY5LAotCTB4MDAwMDAwMWQsCi0JMHhmZDI1ODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmEsCi0JMHgwMDAwMDAzMCwKLQkweDMxODMwMDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYiwKLQkweDAwMDAwMDMwLAotCTB4MTE4MjAwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZjLAotCTB4MDAwMDAwMmYsCi0JMHhkMTgxMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmQsCi0JMHgwMDAwMDAxZCwKLQkweGZkMDk4MGU1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZSwKLQkweDAwMDAwMDMwLAotCTB4MzE4M2QzNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZmLAotCTB4MDAwMDAwMzAsCi0JMHgxMTgzZDI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDAsCi0JMHgwMDAwMDAyZiwKLQkweGQxODEwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAyLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDMsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNCwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA1LAotCTB4MDAwMDAwMjUsCi0JMHhkMjAwMDI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDYsCi0JMHgwMDAwMDAxOCwKLQkweDdkNzdmZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNywKLQkweDAwMDAwMDQ5LAotCTB4ZGUyMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA4LAotCTB4MDAwMDAwNDksCi0JMHhkZTgwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDksCi0JMHgwMDAwMDAyMSwKLQkweGQxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzFlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMGUzYjc4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZCwKLQkweDAwMDAwMDYxLAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMCwKLQkweDAwMDAwMDM1LAotCTB4ZGQwMDAwZmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTExLAotCTB4MDAwMDAwMTgsCi0JMHgzYjdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE0LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTUsCi0JMHgwMDAwMDAyMSwKLQkweGQxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwNDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE3LAotCTB4MDAwMDAwNjEsCi0JMHhmMTgwMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFhLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYywKLQkweDAwMDAwMDI1LAotCTB4ZDIwMDAyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFkLAotCTB4MDAwMDAwOTgsCi0JMHg2MDVkYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MCwKLQkweDAwMDAwMDQ5LAotCTB4ZDQwODNiMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQxLAotCTB4MDAwMDAwMDksCi0JMHhjMjhiM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDIsCi0JMHgwMDAwMDAzZiwKLQkweGQ0MDAwMzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MywKLQkweDAwMDAwMDA5LAotCTB4YzI4YjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ0LAotCTB4MDAwMDAwNDksCi0JMHhkNDBlM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDUsCi0JMHgwMDAwMDAzZiwKLQkweGQ2NDIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NiwKLQkweDAwMDAwMDJmLAotCTB4ZDI4MTQwODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ3LAotCTB4MDAwMDAwMmQsCi0JMHhkMjg0MDM2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRkLAotCTB4MDAwMDAwMzEsCi0JMHhkMzAzZDI2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGUsCi0JMHgwMDAwMDA0OSwKLQkweGRlNDAzYjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUzLAotCTB4MDAwMDAwNDksCi0JMHhkNTgwM2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTQsCi0JMHgwMDAwMDAyMSwKLQkweGRlNDAwMGU2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU2LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTcsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OCwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU5LAotCTB4MDAwMDAwNDksCi0JMHhkNTAwM2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZSwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVmLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE1NDE2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjAsCi0JMHgwMDAwMDA5NCwKLQkweDAwMjU0NGU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MSwKLQkweDAwMDAwMDk0LAotCTB4MDAyMzQxZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYyLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE3NDU2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjMsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTU0MjY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NCwKLQkweDAwMDAwMDk0LAotCTB4MDAyNzQyZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY1LAotCTB4MDAwMDAwOTQsCi0JMHgwMDJkNDM2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjYsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmQ0NDY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NywKLQkweDAwMDAwMDk0LAotCTB4MDAzMzQzZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY4LAotCTB4MDAwMDAwMDQsCi0JMHgwMzk3M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjksCi0JMHgwMDAwMDAwZCwKLQkweGUzMGRjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YSwKLQkweDAwMDAwMDMwLAotCTB4MzIwMzAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZiLAotCTB4MDAwMDAwMzAsCi0JMHgxMjAyMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmMsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZCwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZlLAotCTB4MDAwMDAwMGQsCi0JMHhlMzNmYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmYsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDQ2MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MCwKLQkweDAwMDAwMDMwLAotCTB4MTIwNDQwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcxLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgyODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzIsCi0JMHgwMDAwMDAzZiwKLQkweGQxODA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MywKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc0LAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0MjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzUsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc3LAotCTB4MDAwMDAwMGQsCi0JMHhlMzYzYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzgsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDMyMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OSwKLQkweDAwMDAwMDMwLAotCTB4MTIwMzAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdhLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgzMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2IsCi0JMHgwMDAwMDA0OSwKLQkweGQyODAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YywKLQkweDAwMDAwMDBkLAotCTB4ZTMwZGMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdkLAotCTB4MDAwMDAwMzAsCi0JMHgzMjAzODA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2UsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDI4MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MTAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjAyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MiwKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgzLAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0MjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODQsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg2LAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODcsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg5LAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YiwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThjLAotCTB4MDAwMDAwOTgsCi0JMHg4MDY5M2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGQsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThmLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTAsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkyLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NCwKLQkweDAwMDAwMDQ5LAotCTB4ZDNjMDNiMzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk1LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTYsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTksCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTliLAotCTB4MDAwMDAwNDksCi0JMHhkM2EwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWMsCi0JMHgwMDAwMDAxOSwKLQkweGRkNjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTllLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWYsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWExLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTIsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAxODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMywKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE0LAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTUsCi0JMHgwMDAwMDA5OCwKLQkweDgwMzczYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNiwKLQkweDAwMDAwMDUxLAotCTB4ZjIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFhLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFkLAotCTB4MDAwMDAwNDksCi0JMHhkMzgwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWUsCi0JMHgwMDAwMDAxOSwKLQkweGRkNmZiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIwLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjEsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMiwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIzLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjQsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNSwKLQkweDAwMDAwMDk4LAotCTB4ODAxNzNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI2LAotCTB4MDAwMDAwNDksCi0JMHhkZTQwM2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI5LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmQsCi0JMHgwMDAwMDAyMSwKLQkweGQyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZSwKLQkweDAwMDAwMDE5LAotCTB4ZDNlZjdiN2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJmLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzYsCi0JMHgwMDAwMDAyZCwKLQkweGRkNTQwMTgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNywKLQkweDAwMDAwMDc5LAotCTB4ZjNlMDgwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM4LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMzY3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzksCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2MsCi0JMHgwMDAwMDA1OSwKLQkweGZkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDFjMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNlLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2YsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQxLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDIsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMywKLQkweDAwMDAwMDMxLAotCTB4ZDQ4Mzg4NmIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ0LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDUsCi0JMHgwMDAwMDA3OSwKLQkweGYxODE5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNiwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ3LAotCTB4MDAwMDAwOTgsCi0JMHg4MDUzYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDgsCi0JMHgwMDAwMDAxOSwKLQkweGRkN2Y3Yjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOSwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMDIwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmYsCi0JMHgwMDAwMDA0OSwKLQkweGQxODQzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMywKLQkweDAwMDAwMDY1LAotCTB4ZjE4MDAyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA0LAotCTB4MDAwMDAwMTgsCi0JMHg3ZDdkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2EyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2ExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzAsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotLyogRklOSVNIIElOSVQgRGVzY3JpcHRvciAqLwotCTB4MDAwZjAwMDIsCi0JMHg4MDcxODdjNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCBkYWJkZjU5Li5mN2VmY2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgSmVmZiBHYXJ6aWsgKGpnYXJ6aWtAcG9ib3guY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA0IFN1biBNaWNyb3N5c3RlbXMgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KICAqCiAgKiBGaXJtd2FyZSBpczoKICAqCURlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZCBzb3VyY2UgY29kZSwKQEAgLTY4LDggKzY4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuOTciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRGVjZW1iZXIgMTAsIDIwMDgiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45OCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJGZWJydWFyeSAyNSwgMjAwOSIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC04NjAsNyArODYwLDcgQEAKIAogc3RhdGljIGludCB0ZzNfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpicCwgaW50IG1paV9pZCwgaW50IHJlZykKIHsKLQlzdHJ1Y3QgdGczICp0cCA9IChzdHJ1Y3QgdGczICopYnAtPnByaXY7CisJc3RydWN0IHRnMyAqdHAgPSBicC0+cHJpdjsKIAl1MzIgdmFsOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19QQVVTRUQpCkBAIC04NzQsNyArODc0LDcgQEAKIAogc3RhdGljIGludCB0ZzNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnAsIGludCBtaWlfaWQsIGludCByZWcsIHUxNiB2YWwpCiB7Ci0Jc3RydWN0IHRnMyAqdHAgPSAoc3RydWN0IHRnMyAqKWJwLT5wcml2OworCXN0cnVjdCB0ZzMgKnRwID0gYnAtPnByaXY7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX1BBVVNFRCkKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC0yMDUwLDggKzIwNTAsNiBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGVfc2lnX3Bvc3RfcmVzZXQoc3RydWN0IHRnMyAqLCBpbnQpOwogc3RhdGljIGludCB0ZzNfaGFsdF9jcHUoc3RydWN0IHRnMyAqLCB1MzIpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICopOwotc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICopOwogCiBzdGF0aWMgdm9pZCB0ZzNfcG93ZXJfZG93bl9waHkoc3RydWN0IHRnMyAqdHAsIGJvb2wgZG9fbG93X3Bvd2VyKQogewpAQCAtMjEwOCw2ICsyMTA2LDE5NCBAQAogfQogCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7CisJCWludCBpOworCisJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkgeworCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX1NFVDEpOworCQkJZm9yIChpID0gMDsgaSA8IDgwMDA7IGkrKykgeworCQkJCWlmICh0cjMyKE5WUkFNX1NXQVJCKSAmIFNXQVJCX0dOVDEpCisJCQkJCWJyZWFrOworCQkJCXVkZWxheSgyMCk7CisJCQl9CisJCQlpZiAoaSA9PSA4MDAwKSB7CisJCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisJCXRwLT5udnJhbV9sb2NrX2NudCsrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqdHApCit7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgeworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID4gMCkKKwkJCXRwLT5udnJhbV9sb2NrX2NudC0tOworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApCisJCQl0dzMyX2YoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKKwl9Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfZW5hYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgeworCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CisKKwkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzIHwgQUNDRVNTX0VOQUJMRSk7CisJfQorfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7CisJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKKworCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgJiB+QUNDRVNTX0VOQUJMRSk7CisJfQorfQorCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKKwkJCQkJdTMyIG9mZnNldCwgdTMyICp2YWwpCit7CisJdTMyIHRtcDsKKwlpbnQgaTsKKworCWlmIChvZmZzZXQgPiBFRVBST01fQUREUl9BRERSX01BU0sgfHwgKG9mZnNldCAlIDQpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpICYgfihFRVBST01fQUREUl9BRERSX01BU0sgfAorCQkJCQlFRVBST01fQUREUl9ERVZJRF9NQVNLIHwKKwkJCQkJRUVQUk9NX0FERFJfUkVBRCk7CisJdHczMihHUkNfRUVQUk9NX0FERFIsCisJICAgICB0bXAgfAorCSAgICAgKDAgPDwgRUVQUk9NX0FERFJfREVWSURfU0hJRlQpIHwKKwkgICAgICgob2Zmc2V0IDw8IEVFUFJPTV9BRERSX0FERFJfU0hJRlQpICYKKwkgICAgICBFRVBST01fQUREUl9BRERSX01BU0spIHwKKwkgICAgIEVFUFJPTV9BRERSX1JFQUQgfCBFRVBST01fQUREUl9TVEFSVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisJCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKKworCQlpZiAodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKwlpZiAoISh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkqdmFsID0gdHIzMihHUkNfRUVQUk9NX0RBVEEpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIE5WUkFNX0NNRF9USU1FT1VUIDEwMDAwCisKK3N0YXRpYyBpbnQgdGczX252cmFtX2V4ZWNfY21kKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbnZyYW1fY21kKQoreworCWludCBpOworCisJdHczMihOVlJBTV9DTUQsIG52cmFtX2NtZCk7CisJZm9yIChpID0gMDsgaSA8IE5WUkFNX0NNRF9USU1FT1VUOyBpKyspIHsKKwkJdWRlbGF5KDEwKTsKKwkJaWYgKHRyMzIoTlZSQU1fQ01EKSAmIE5WUkFNX0NNRF9ET05FKSB7CisJCQl1ZGVsYXkoMTApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBOVlJBTV9DTURfVElNRU9VVCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHRnM19udnJhbV9waHlzX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQoreworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKKwkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCisKKwkJYWRkciA9ICgoYWRkciAvIHRwLT5udnJhbV9wYWdlc2l6ZSkgPDwKKwkJCUFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICsKKwkJICAgICAgIChhZGRyICUgdHAtPm52cmFtX3BhZ2VzaXplKTsKKworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgdTMyIHRnM19udnJhbV9sb2dpY2FsX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQoreworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKKwkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCisKKwkJYWRkciA9ICgoYWRkciA+PiBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAqCisJCQl0cC0+bnZyYW1fcGFnZXNpemUpICsKKwkJICAgICAgIChhZGRyICYgKCgxIDw8IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpIC0gMSkpOworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qIE5PVEU6IERhdGEgcmVhZCBpbiBmcm9tIE5WUkFNIGlzIGJ5dGVzd2FwcGVkIGFjY29yZGluZyB0bworICogdGhlIGJ5dGVzd2FwcGluZyBzZXR0aW5ncyBmb3IgYWxsIG90aGVyIHJlZ2lzdGVyIGFjY2Vzc2VzLgorICogdGczIGRldmljZXMgYXJlIEJFIGRldmljZXMsIHNvIG9uIGEgQkUgbWFjaGluZSwgdGhlIGRhdGEKKyAqIHJldHVybmVkIHdpbGwgYmUgZXhhY3RseSBhcyBpdCBpcyBzZWVuIGluIE5WUkFNLiAgT24gYSBMRQorICogbWFjaGluZSwgdGhlIDMyLWJpdCB2YWx1ZSB3aWxsIGJlIGJ5dGVzd2FwcGVkLgorICovCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSkKKwkJcmV0dXJuIHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCB2YWwpOworCisJb2Zmc2V0ID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKKworCWlmIChvZmZzZXQgPiBOVlJBTV9BRERSX01TSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB0ZzNfbnZyYW1fbG9jayh0cCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHRwKTsKKworCXR3MzIoTlZSQU1fQUREUiwgb2Zmc2V0KTsKKwlyZXQgPSB0ZzNfbnZyYW1fZXhlY19jbWQodHAsIE5WUkFNX0NNRF9SRCB8IE5WUkFNX0NNRF9HTyB8CisJCU5WUkFNX0NNRF9GSVJTVCB8IE5WUkFNX0NNRF9MQVNUIHwgTlZSQU1fQ01EX0RPTkUpOworCisJaWYgKHJldCA9PSAwKQorCQkqdmFsID0gdHIzMihOVlJBTV9SRERBVEEpOworCisJdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHRwKTsKKworCXRnM19udnJhbV91bmxvY2sodHApOworCisJcmV0dXJuIHJldDsKK30KKworLyogRW5zdXJlcyBOVlJBTSBkYXRhIGlzIGluIGJ5dGVzdHJlYW0gZm9ybWF0LiAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9iZTMyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCBfX2JlMzIgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcmVzID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnYpOworCWlmICghcmVzKQorCQkqdmFsID0gY3B1X3RvX2JlMzIodik7CisJcmV0dXJuIHJlczsKK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIF9fdGczX3NldF9tYWNfYWRkcihzdHJ1Y3QgdGczICp0cCwgaW50IHNraXBfbWFjXzEpCiB7CiAJdTMyIGFkZHJfaGlnaCwgYWRkcl9sb3c7CkBAIC00MzM5LDYgKzQ1MjUsMTMgQEAKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB0cC0+ZGV2KTsKKworCQlpZiAobGVuID4gKHRwLT5kZXYtPm10dSArIEVUSF9ITEVOKSAmJgorCQkgICAgc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWdvdG8gbmV4dF9wa3Q7CisJCX0KKwogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJCWlmICh0cC0+dmxncnAgIT0gTlVMTCAmJgogCQkgICAgZGVzYy0+dHlwZV9mbGFncyAmIFJYRF9GTEFHX1ZMQU4pIHsKQEAgLTQ0NjEsNyArNDY1NCw3IEBACiAJCQlzYmxrLT5zdGF0dXMgJj0gflNEX1NUQVRVU19VUERBVEVEOwogCiAJCWlmIChsaWtlbHkoIXRnM19oYXNfd29yayh0cCkpKSB7Ci0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQl0ZzNfcmVzdGFydF9pbnRzKHRwKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00NDcxLDcgKzQ2NjQsNyBAQAogCiB0eF9yZWNvdmVyeToKIAkvKiB3b3JrX2RvbmUgaXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gYnVkZ2V0LiAqLwotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJc2NoZWR1bGVfd29yaygmdHAtPnJlc2V0X3Rhc2spOwogCXJldHVybiB3b3JrX2RvbmU7CiB9CkBAIC00NTIwLDcgKzQ3MTMsNyBAQAogCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CiAKIAlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDU0NSw3ICs0NzM4LDcgQEAKIAkgKi8KIAl0dzMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLCAweDAwMDAwMDAxKTsKIAlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoMSk7CiB9CkBAIC00NTg3LDcgKzQ3ODAsNyBAQAogCXNibGstPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7CiAJaWYgKGxpa2VseSh0ZzNfaGFzX3dvcmsodHApKSkgewogCQlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJLyogTm8gd29yaywgc2hhcmVkIGludGVycnVwdCBwZXJoYXBzPyAgcmUtZW5hYmxlCiAJCSAqIGludGVycnVwdHMsIGFuZCBmbHVzaCB0aGF0IFBDSSB3cml0ZQpAQCAtNDYzMyw3ICs0ODI2LDcgQEAKIAl0dzMyX21haWxib3hfZihNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDEpOwogCWlmICh0ZzNfaXJxX3N5bmModHApKQogCQlnb3RvIG91dDsKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CiAJCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CiAJCS8qIFVwZGF0ZSBsYXN0X3RhZyB0byBtYXJrIHRoYXQgdGhpcyBzdGF0dXMgaGFzIGJlZW4KIAkJICogc2Vlbi4gQmVjYXVzZSBpbnRlcnJ1cHQgbWF5IGJlIHNoYXJlZCwgd2UgbWF5IGJlCkBAIC00NjQxLDcgKzQ4MzQsNyBAQAogCQkgKiBpZiB0ZzNfcG9sbCgpIGlzIG5vdCBzY2hlZHVsZWQuCiAJCSAqLwogCQl0cC0+bGFzdF90YWcgPSBzYmxrLT5zdGF0dXNfdGFnOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCX0KIG91dDoKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKQEAgLTU2MzEsNjIgKzU4MjQsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKLQkJaW50IGk7Ci0KLQkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKSB7Ci0JCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfU0VUMSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgODAwMDsgaSsrKSB7Ci0JCQkJaWYgKHRyMzIoTlZSQU1fU1dBUkIpICYgU1dBUkJfR05UMSkKLQkJCQkJYnJlYWs7Ci0JCQkJdWRlbGF5KDIwKTsKLQkJCX0KLQkJCWlmIChpID09IDgwMDApIHsKLQkJCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCX0KLQkJdHAtPm52cmFtX2xvY2tfY250Kys7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7Ci0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPiAwKQotCQkJdHAtPm52cmFtX2xvY2tfY250LS07Ci0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkKLQkJCXR3MzJfZihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOwotCX0KLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7Ci0JCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKLQotCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKLQl9Ci19Ci0KLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKLQkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCi0JCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyAmIH5BQ0NFU1NfRU5BQkxFKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHRnM19hcGVfc2VuZF9ldmVudChzdHJ1Y3QgdGczICp0cCwgdTMyIGV2ZW50KQogewogCWludCBpOwpAQCAtNjgyNCw3ICs2OTYxLDggQEAKIAlfX3RnM19zZXRfbWFjX2FkZHIodHAsIDApOwogCiAJLyogTVRVICsgZXRoZXJuZXQgaGVhZGVyICsgRkNTICsgb3B0aW9uYWwgVkxBTiB0YWcgKi8KLQl0dzMyKE1BQ19SWF9NVFVfU0laRSwgdHAtPmRldi0+bXR1ICsgRVRIX0hMRU4gKyA4KTsKKwl0dzMyKE1BQ19SWF9NVFVfU0laRSwKKwkgICAgIHRwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU4pOwogCiAJLyogVGhlIHNsb3QgdGltZSBpcyBjaGFuZ2VkIGJ5IHRnM19zZXR1cF9waHkgaWYgd2UKIAkgKiBydW4gYXQgZ2lnYWJpdCB3aXRoIGhhbGYgZHVwbGV4LgpAQCAtODM4NiwxNyArODUyNCwxMyBAQAogCXJldHVybiB0cC0+bnZyYW1fc2l6ZTsKIH0KIAotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9sZShzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19sZTMyICp2YWwpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9zd2FiKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCk7Ci0KIHN0YXRpYyBpbnQgdGczX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0OwogCXU4ICAqcGQ7CiAJdTMyIGksIG9mZnNldCwgbGVuLCBiX29mZnNldCwgYl9jb3VudDsKLQlfX2xlMzIgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtODQxNSw3ICs4NTQ5LDcgQEAKIAkJCS8qIGkuZS4gb2Zmc2V0PTEgbGVuPTIgKi8KIAkJCWJfY291bnQgPSBsZW47CiAJCX0KLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldC1iX29mZnNldCwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldC1iX29mZnNldCwgJnZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQltZW1jcHkoZGF0YSwgKChjaGFyKikmdmFsKSArIGJfb2Zmc2V0LCBiX2NvdW50KTsKQEAgLTg0MjcsNyArODU2MSw3IEBACiAJLyogcmVhZCBieXRlcyB1cHRvIHRoZSBsYXN0IDQgYnl0ZSBib3VuZGFyeSAqLwogCXBkID0gJmRhdGFbZWVwcm9tLT5sZW5dOwogCWZvciAoaSA9IDA7IGkgPCAobGVuIC0gKGxlbiAmIDMpKTsgaSArPSA0KSB7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQgKyBpLCAmdmFsKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0ICsgaSwgJnZhbCk7CiAJCWlmIChyZXQpIHsKIAkJCWVlcHJvbS0+bGVuICs9IGk7CiAJCQlyZXR1cm4gcmV0OwpAQCAtODQ0MSw3ICs4NTc1LDcgQEAKIAkJcGQgPSAmZGF0YVtlZXByb20tPmxlbl07CiAJCWJfY291bnQgPSBsZW4gJiAzOwogCQliX29mZnNldCA9IG9mZnNldCArIGxlbiAtIGJfY291bnQ7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBiX29mZnNldCwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIGJfb2Zmc2V0LCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCW1lbWNweShwZCwgJnZhbCwgYl9jb3VudCk7CkBAIC04NDU4LDcgKzg1OTIsNyBAQAogCWludCByZXQ7CiAJdTMyIG9mZnNldCwgbGVuLCBiX29mZnNldCwgb2RkX2xlbjsKIAl1OCAqYnVmOwotCV9fbGUzMiBzdGFydCwgZW5kOworCV9fYmUzMiBzdGFydCwgZW5kOwogCiAJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTg0NzEsNyArODYwNSw3IEBACiAKIAlpZiAoKGJfb2Zmc2V0ID0gKG9mZnNldCAmIDMpKSkgewogCQkvKiBhZGp1c3RtZW50cyB0byBzdGFydCBvbiByZXF1aXJlZCA0IGJ5dGUgYm91bmRhcnkgKi8KLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldC1iX29mZnNldCwgJnN0YXJ0KTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmc3RhcnQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJbGVuICs9IGJfb2Zmc2V0OwpAQCAtODQ4NSw3ICs4NjE5LDcgQEAKIAkJLyogYWRqdXN0bWVudHMgdG8gZW5kIG9uIHJlcXVpcmVkIDQgYnl0ZSBib3VuZGFyeSAqLwogCQlvZGRfbGVuID0gMTsKIAkJbGVuID0gKGxlbiArIDMpICYgfjM7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQrbGVuLTQsICZlbmQpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQrbGVuLTQsICZlbmQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC04NTQ0LDcgKzg2NzgsNyBAQAogCQljbWQtPmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4OwogCX0KIAljbWQtPnBoeV9hZGRyZXNzID0gUEhZX0FERFI7Ci0JY21kLT50cmFuc2NlaXZlciA9IDA7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJY21kLT5hdXRvbmVnID0gdHAtPmxpbmtfY29uZmlnLmF1dG9uZWc7CiAJY21kLT5tYXh0eHBrdCA9IDA7CiAJY21kLT5tYXhyeHBrdCA9IDA7CkBAIC04NTYxLDI2ICs4Njk1LDU4IEBACiAJCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KHRwLT5tZGlvX2J1cy0+cGh5X21hcFtQSFlfQUREUl0sIGNtZCk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgewotCQkvKiBUaGVzZSBhcmUgdGhlIG9ubHkgdmFsaWQgYWR2ZXJ0aXNlbWVudCBiaXRzIGFsbG93ZWQuICAqLwotCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCi0JCSAgICAoY21kLT5hZHZlcnRpc2luZyAmIH4oQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgQURWRVJUSVNFRF9BdXRvbmVnIHwKLQkJCQkJICBBRFZFUlRJU0VEX0ZJQlJFKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogRmliZXIgY2FuIG9ubHkgZG8gU1BFRURfMTAwMC4gICovCi0JCWVsc2UgaWYgKChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpICYmCi0JCQkgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBDb3BwZXIgY2Fubm90IGZvcmNlIFNQRUVEXzEwMDAuICAqLwotCX0gZWxzZSBpZiAoKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkgJiYKLQkJICAgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkpCisJaWYgKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSAmJgorCSAgICBjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmICgoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSAmJgotCQkgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpCisKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgorCSAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCAmJgorCSAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCXUzMiBtYXNrID0gQURWRVJUSVNFRF9BdXRvbmVnIHwKKwkJCSAgIEFEVkVSVElTRURfUGF1c2UgfAorCQkJICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlOworCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpKQorCQkJbWFzayB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpCisJCQltYXNrIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfVFA7CisJCWVsc2UKKwkJCW1hc2sgfD0gQURWRVJUSVNFRF9GSUJSRTsKKworCQlpZiAoY21kLT5hZHZlcnRpc2luZyAmIH5tYXNrKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWFzayAmPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCk7CisKKwkJY21kLT5hZHZlcnRpc2luZyAmPSBtYXNrOworCX0gZWxzZSB7CisJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpIHsKKwkJCWlmIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgorCQkJICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAogCXRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID0gY21kLT5hdXRvbmVnOwpAQCAtOTAyNSwxMCArOTE5MSwxMCBAQAogc3RhdGljIGludCB0ZzNfdGVzdF9udnJhbShzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgY3N1bSwgbWFnaWM7Ci0JX19sZTMyICpidWY7CisJX19iZTMyICpidWY7CiAJaW50IGksIGosIGssIGVyciA9IDAsIHNpemU7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJm1hZ2ljKSAhPSAwKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKQpAQCAtOTA2MiwxNCArOTIyOCwxNSBAQAogCiAJZXJyID0gLUVJTzsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHNpemU7IGkgKz0gNCwgaisrKSB7Ci0JCWlmICgoZXJyID0gdGczX252cmFtX3JlYWRfbGUodHAsIGksICZidWZbal0pKSAhPSAwKQorCQllcnIgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBpLCAmYnVmW2pdKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA8IHNpemUpCiAJCWdvdG8gb3V0OwogCiAJLyogU2VsZmJvb3QgZm9ybWF0ICovCi0JbWFnaWMgPSBzd2FiMzIobGUzMl90b19jcHUoYnVmWzBdKSk7CisJbWFnaWMgPSBiZTMyX3RvX2NwdShidWZbMF0pOwogCWlmICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0KIAkgICAgVEczX0VFUFJPTV9NQUdJQ19GVykgewogCQl1OCAqYnVmOCA9ICh1OCAqKSBidWYsIGNzdW04ID0gMDsKQEAgLTkwOTgsNyArOTI2NSw3IEBACiAJaWYgKChtYWdpYyAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSA9PQogCSAgICBURzNfRUVQUk9NX01BR0lDX0hXKSB7CiAJCXU4IGRhdGFbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKLQkgICAgICAgCXU4IHBhcml0eVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOworCQl1OCBwYXJpdHlbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKIAkJdTggKmJ1ZjggPSAodTggKikgYnVmOwogCiAJCS8qIFNlcGFyYXRlIHRoZSBwYXJpdHkgYml0cyBhbmQgdGhlIGRhdGEgYnl0ZXMuICAqLwpAQCAtOTE0MSwxMyArOTMwOCwxMyBAQAogCiAJLyogQm9vdHN0cmFwIGNoZWNrc3VtIGF0IG9mZnNldCAweDEwICovCiAJY3N1bSA9IGNhbGNfY3JjKCh1bnNpZ25lZCBjaGFyICopIGJ1ZiwgMHgxMCk7Ci0JaWYoY3N1bSAhPSBsZTMyX3RvX2NwdShidWZbMHgxMC80XSkpCisJaWYgKGNzdW0gIT0gYmUzMl90b19jcHUoYnVmWzB4MTAvNF0pKQogCQlnb3RvIG91dDsKIAogCS8qIE1hbnVmYWN0dXJpbmcgYmxvY2sgc3RhcnRzIGF0IG9mZnNldCAweDc0LCBjaGVja3N1bSBhdCAweGZjICovCiAJY3N1bSA9IGNhbGNfY3JjKCh1bnNpZ25lZCBjaGFyICopICZidWZbMHg3NC80XSwgMHg4OCk7Ci0JaWYgKGNzdW0gIT0gbGUzMl90b19jcHUoYnVmWzB4ZmMvNF0pKQotCQkgZ290byBvdXQ7CisJaWYgKGNzdW0gIT0gYmUzMl90b19jcHUoYnVmWzB4ZmMvNF0pKQorCQlnb3RvIG91dDsKIAogCWVyciA9IDA7CiAKQEAgLTk4NTYsOCArMTAwMjMsMTIgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQl0ZzNfbmV0aWZfc3RvcCh0cCk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJdHAtPnZsZ3JwID0gZ3JwOworCQlyZXR1cm47CisJfQorCisJdGczX25ldGlmX3N0b3AodHApOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKQEAgLTk4NjYsOCArMTAwMzcsNyBAQAogCS8qIFVwZGF0ZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcgYml0IGluIFJYX01PREUgcmVnaXN0ZXIuICovCiAJX190ZzNfc2V0X3J4X21vZGUoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXRnM19uZXRpZl9zdGFydCh0cCk7CisJdGczX25ldGlmX3N0YXJ0KHRwKTsKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiB9CkBAIC05OTc0LDcgKzEwMTQ0LDcgQEAKIAogCXRwLT5udnJhbV9zaXplID0gRUVQUk9NX0NISVBfU0laRTsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmbWFnaWMpICE9IDApCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmbWFnaWMpICE9IDApCiAJCXJldHVybjsKIAogCWlmICgobWFnaWMgIT0gVEczX0VFUFJPTV9NQUdJQykgJiYKQEAgLTk5OTAsNyArMTAxNjAsNyBAQAogCWN1cnNpemUgPSAweDEwOwogCiAJd2hpbGUgKGN1cnNpemUgPCB0cC0+bnZyYW1fc2l6ZSkgewotCQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgY3Vyc2l6ZSwgJnZhbCkgIT0gMCkKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBjdXJzaXplLCAmdmFsKSAhPSAwKQogCQkJcmV0dXJuOwogCiAJCWlmICh2YWwgPT0gbWFnaWMpCkBAIC0xMDAwNiw3ICsxMDE3Niw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmdmFsKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkgIT0gMCkKIAkJcmV0dXJuOwogCiAJLyogU2VsZmJvb3QgZm9ybWF0ICovCkBAIC0xMDAxNyw3ICsxMDE4NywxOCBAQAogCiAJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweGYwLCAmdmFsKSA9PSAwKSB7CiAJCWlmICh2YWwgIT0gMCkgewotCQkJdHAtPm52cmFtX3NpemUgPSAodmFsID4+IDE2KSAqIDEwMjQ7CisJCQkvKiBUaGlzIGlzIGNvbmZ1c2luZy4gIFdlIHdhbnQgdG8gb3BlcmF0ZSBvbiB0aGUKKwkJCSAqIDE2LWJpdCB2YWx1ZSBhdCBvZmZzZXQgMHhmMi4gIFRoZSB0ZzNfbnZyYW1fcmVhZCgpCisJCQkgKiBjYWxsIHdpbGwgcmVhZCBmcm9tIE5WUkFNIGFuZCBieXRlc3dhcCB0aGUgZGF0YQorCQkJICogYWNjb3JkaW5nIHRvIHRoZSBieXRlc3dhcHBpbmcgc2V0dGluZ3MgZm9yIGFsbAorCQkJICogb3RoZXIgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGlzIGVuc3VyZXMgdGhlIGRhdGEgd2UKKwkJCSAqIHdhbnQgd2lsbCBhbHdheXMgcmVzaWRlIGluIHRoZSBsb3dlciAxNi1iaXRzLgorCQkJICogSG93ZXZlciwgdGhlIGRhdGEgaW4gTlZSQU0gaXMgaW4gTEUgZm9ybWF0LCB3aGljaAorCQkJICogbWVhbnMgdGhlIGRhdGEgZnJvbSB0aGUgTlZSQU0gcmVhZCB3aWxsIGFsd2F5cyBiZQorCQkJICogb3Bwb3NpdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIENQVS4gIFRoZSAxNi1iaXQKKwkJCSAqIGJ5dGVzd2FwIHRoZW4gYnJpbmdzIHRoZSBkYXRhIHRvIENQVSBlbmRpYW5uZXNzLgorCQkJICovCisJCQl0cC0+bnZyYW1fc2l6ZSA9IHN3YWIxNigodTE2KSh2YWwgJiAweDAwMDBmZmZmKSkgKiAxMDI0OwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTA0NjgsMTQxICsxMDY0OSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKLQkJCQkJdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JdTMyIHRtcDsKLQlpbnQgaTsKLQotCWlmIChvZmZzZXQgPiBFRVBST01fQUREUl9BRERSX01BU0sgfHwKLQkgICAgKG9mZnNldCAlIDQpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpICYgfihFRVBST01fQUREUl9BRERSX01BU0sgfAotCQkJCQlFRVBST01fQUREUl9ERVZJRF9NQVNLIHwKLQkJCQkJRUVQUk9NX0FERFJfUkVBRCk7Ci0JdHczMihHUkNfRUVQUk9NX0FERFIsCi0JICAgICB0bXAgfAotCSAgICAgKDAgPDwgRUVQUk9NX0FERFJfREVWSURfU0hJRlQpIHwKLQkgICAgICgob2Zmc2V0IDw8IEVFUFJPTV9BRERSX0FERFJfU0hJRlQpICYKLQkgICAgICBFRVBST01fQUREUl9BRERSX01BU0spIHwKLQkgICAgIEVFUFJPTV9BRERSX1JFQUQgfCBFRVBST01fQUREUl9TVEFSVCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0JCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKLQotCQlpZiAodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0KLQlpZiAoISh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkqdmFsID0gdHIzMihHUkNfRUVQUk9NX0RBVEEpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIE5WUkFNX0NNRF9USU1FT1VUIDEwMDAwCi0KLXN0YXRpYyBpbnQgdGczX252cmFtX2V4ZWNfY21kKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbnZyYW1fY21kKQotewotCWludCBpOwotCi0JdHczMihOVlJBTV9DTUQsIG52cmFtX2NtZCk7Ci0JZm9yIChpID0gMDsgaSA8IE5WUkFNX0NNRF9USU1FT1VUOyBpKyspIHsKLQkJdWRlbGF5KDEwKTsKLQkJaWYgKHRyMzIoTlZSQU1fQ01EKSAmIE5WUkFNX0NNRF9ET05FKSB7Ci0JCQl1ZGVsYXkoMTApOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGkgPT0gTlZSQU1fQ01EX1RJTUVPVVQpIHsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgdGczX252cmFtX3BoeXNfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgotCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKLQotCQlhZGRyID0gKChhZGRyIC8gdHAtPm52cmFtX3BhZ2VzaXplKSA8PAotCQkJQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKwotCQkgICAgICAgKGFkZHIgJSB0cC0+bnZyYW1fcGFnZXNpemUpOwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KLXN0YXRpYyB1MzIgdGczX252cmFtX2xvZ2ljYWxfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgotCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKLQotCQlhZGRyID0gKChhZGRyID4+IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICoKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSkgKwotCQkgICAgICAgKGFkZHIgJiAoKDEgPDwgQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgLSAxKSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JaW50IHJldDsKLQotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCi0JCXJldHVybiB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20odHAsIG9mZnNldCwgdmFsKTsKLQotCW9mZnNldCA9IHRnM19udnJhbV9waHlzX2FkZHIodHAsIG9mZnNldCk7Ci0KLQlpZiAob2Zmc2V0ID4gTlZSQU1fQUREUl9NU0spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gdGczX252cmFtX2xvY2sodHApOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl0ZzNfZW5hYmxlX252cmFtX2FjY2Vzcyh0cCk7Ci0KLQl0dzMyKE5WUkFNX0FERFIsIG9mZnNldCk7Ci0JcmV0ID0gdGczX252cmFtX2V4ZWNfY21kKHRwLCBOVlJBTV9DTURfUkQgfCBOVlJBTV9DTURfR08gfAotCQlOVlJBTV9DTURfRklSU1QgfCBOVlJBTV9DTURfTEFTVCB8IE5WUkFNX0NNRF9ET05FKTsKLQotCWlmIChyZXQgPT0gMCkKLQkJKnZhbCA9IHN3YWIzMih0cjMyKE5WUkFNX1JEREFUQSkpOwotCi0JdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHRwKTsKLQotCXRnM19udnJhbV91bmxvY2sodHApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9sZShzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19sZTMyICp2YWwpCi17Ci0JdTMyIHY7Ci0JaW50IHJlcyA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2KTsKLQlpZiAoIXJlcykKLQkJKnZhbCA9IGNwdV90b19sZTMyKHYpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfc3dhYihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JaW50IGVycjsKLQl1MzIgdG1wOwotCi0JZXJyID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnRtcCk7Ci0JKnZhbCA9IHN3YWIzMih0bXApOwotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgdGczX252cmFtX3dyaXRlX2Jsb2NrX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKIAkJCQkgICAgdTMyIG9mZnNldCwgdTMyIGxlbiwgdTggKmJ1ZikKIHsKQEAgLTEwNjExLDEzICsxMDY1NywxMyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7CiAJCXUzMiBhZGRyOwotCQlfX2xlMzIgZGF0YTsKKwkJX19iZTMyIGRhdGE7CiAKIAkJYWRkciA9IG9mZnNldCArIGk7CiAKIAkJbWVtY3B5KCZkYXRhLCBidWYgKyBpLCA0KTsKIAotCQl0dzMyKEdSQ19FRVBST01fREFUQSwgbGUzMl90b19jcHUoZGF0YSkpOworCQl0dzMyKEdSQ19FRVBST01fREFUQSwgYmUzMl90b19jcHUoZGF0YSkpOwogCiAJCXZhbCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKIAkJdHczMihHUkNfRUVQUk9NX0FERFIsIHZhbCB8IEVFUFJPTV9BRERSX0NPTVBMRVRFKTsKQEAgLTEwNjY3LDggKzEwNzEzLDkgQEAKIAkJcGh5X2FkZHIgPSBvZmZzZXQgJiB+cGFnZW1hc2s7CiAKIAkJZm9yIChqID0gMDsgaiA8IHBhZ2VzaXplOyBqICs9IDQpIHsKLQkJCWlmICgocmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIHBoeV9hZGRyICsgaiwKLQkJCQkJCShfX2xlMzIgKikgKHRtcCArIGopKSkpCisJCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBwaHlfYWRkciArIGosCisJCQkJCQkgIChfX2JlMzIgKikgKHRtcCArIGopKTsKKwkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHJldCkKQEAgLTEwNzE1LDcgKzEwNzYyLDcgQEAKIAkJCV9fYmUzMiBkYXRhOwogCiAJCQlkYXRhID0gKigoX19iZTMyICopICh0bXAgKyBqKSk7Ci0JCQkvKiBzd2FiMzIobGUzMl90b19jcHUoZGF0YSkpLCBhY3R1YWxseSAqLworCiAJCQl0dzMyKE5WUkFNX1dSREFUQSwgYmUzMl90b19jcHUoZGF0YSkpOwogCiAJCQl0dzMyKE5WUkFNX0FERFIsIHBoeV9hZGRyICsgaik7CkBAIC0xMTMwMSwyNCArMTEzNDgsMjUgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX3BhcnRubyhzdHJ1Y3QgdGczICp0cCkKIHsKLQl1bnNpZ25lZCBjaGFyIHZwZF9kYXRhWzI1Nl07CisJdW5zaWduZWQgY2hhciB2cGRfZGF0YVsyNTZdOyAgIC8qIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICovCiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIG1hZ2ljOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4MCwgJm1hZ2ljKSkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDB4MCwgJm1hZ2ljKSkKIAkJZ290byBvdXRfbm90X2ZvdW5kOwogCiAJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpIHsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA0KSB7CiAJCQl1MzIgdG1wOwogCi0JCQlpZiAodGczX252cmFtX3JlYWQodHAsIDB4MTAwICsgaSwgJnRtcCkpCisJCQkvKiBUaGUgZGF0YSBpcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCBpbiBOVlJBTS4KKwkJCSAqIFVzZSB0aGUgYmlnLWVuZGlhbiByZWFkIHJvdXRpbmVzIHRvIHByZXNlcnZlCisJCQkgKiB0aGUgYnl0ZSBvcmRlciBhcyBpdCBleGlzdHMgaW4gTlZSQU0uCisJCQkgKi8KKwkJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCAweDEwMCArIGksICZ0bXApKQogCQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKIAotCQkJdnBkX2RhdGFbaSArIDBdID0gKCh0bXAgPj4gIDApICYgMHhmZik7Ci0JCQl2cGRfZGF0YVtpICsgMV0gPSAoKHRtcCA+PiAgOCkgJiAweGZmKTsKLQkJCXZwZF9kYXRhW2kgKyAyXSA9ICgodG1wID4+IDE2KSAmIDB4ZmYpOwotCQkJdnBkX2RhdGFbaSArIDNdID0gKCh0bXAgPj4gMjQpICYgMHhmZik7CisJCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdG1wLCBzaXplb2YodG1wKSk7CiAJCX0KIAl9IGVsc2UgewogCQlpbnQgdnBkX2NhcDsKQEAgLTExMzQ0LDcgKzExMzkyLDcgQEAKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgdnBkX2NhcCArIFBDSV9WUERfREFUQSwKIAkJCQkJICAgICAgJnRtcCk7CiAJCQl2ID0gY3B1X3RvX2xlMzIodG1wKTsKLQkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ2LCA0KTsKKwkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ2LCBzaXplb2YodikpOwogCQl9CiAJfQogCkBAIC0xMTQwNCwxNSArMTE0NTIsNzkgQEAKIHsKIAl1MzIgdmFsOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkgfHwKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkgfHwKIAkgICAgKHZhbCAmIDB4ZmMwMDAwMDApICE9IDB4MGMwMDAwMDAgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgNCwgJnZhbCkgfHwKKwkgICAgdGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZ2YWwpIHx8CiAJICAgIHZhbCAhPSAwKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfYmNfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWwsIG9mZnNldCwgc3RhcnQsIHZlcl9vZmZzZXQ7CisJaW50IGk7CisJYm9vbCBuZXd2ZXIgPSBmYWxzZTsKKworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHhjLCAmb2Zmc2V0KSB8fAorCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgMHg0LCAmc3RhcnQpKQorCQlyZXR1cm47CisKKwlvZmZzZXQgPSB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHRwLCBvZmZzZXQpOworCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpKQorCQlyZXR1cm47CisKKwlpZiAoKHZhbCAmIDB4ZmMwMDAwMDApID09IDB4MGMwMDAwMDApIHsKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA0LCAmdmFsKSkKKwkJCXJldHVybjsKKworCQlpZiAodmFsID09IDApCisJCQluZXd2ZXIgPSB0cnVlOworCX0KKworCWlmIChuZXd2ZXIpIHsKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA4LCAmdmVyX29mZnNldCkpCisJCQlyZXR1cm47CisKKwkJb2Zmc2V0ID0gb2Zmc2V0ICsgdmVyX29mZnNldCAtIHN0YXJ0OworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gNCkgeworCQkJX19iZTMyIHY7CisJCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0ICsgaSwgJnYpKQorCQkJCXJldHVybjsKKworCQkJbWVtY3B5KHRwLT5md192ZXIgKyBpLCAmdiwgc2l6ZW9mKHYpKTsKKwkJfQorCX0gZWxzZSB7CisJCXUzMiBtYWpvciwgbWlub3I7CisKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBURzNfTlZNX1BUUkVWX0JDVkVSLCAmdmVyX29mZnNldCkpCisJCQlyZXR1cm47CisKKwkJbWFqb3IgPSAodmVyX29mZnNldCAmIFRHM19OVk1fQkNWRVJfTUFKTVNLKSA+PgorCQkJVEczX05WTV9CQ1ZFUl9NQUpTRlQ7CisJCW1pbm9yID0gdmVyX29mZnNldCAmIFRHM19OVk1fQkNWRVJfTUlOTVNLOworCQlzbnByaW50ZigmdHAtPmZ3X3ZlclswXSwgMzIsICJ2JWQuJTAyZCIsIG1ham9yLCBtaW5vcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfaHdzYl92ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbCwgbWFqb3IsIG1pbm9yOworCisJLyogVXNlIG5hdGl2ZSBlbmRpYW4gcmVwcmVzZW50YXRpb24gKi8KKwlpZiAodGczX252cmFtX3JlYWQodHAsIFRHM19OVk1fSFdTQl9DRkcxLCAmdmFsKSkKKwkJcmV0dXJuOworCisJbWFqb3IgPSAodmFsICYgVEczX05WTV9IV1NCX0NGRzFfTUFKTVNLKSA+PgorCQlURzNfTlZNX0hXU0JfQ0ZHMV9NQUpTRlQ7CisJbWlub3IgPSAodmFsICYgVEczX05WTV9IV1NCX0NGRzFfTUlOTVNLKSA+PgorCQlURzNfTlZNX0hXU0JfQ0ZHMV9NSU5TRlQ7CisKKwlzbnByaW50ZigmdHAtPmZ3X3ZlclswXSwgMzIsICJzYiB2JWQuJTAyZCIsIG1ham9yLCBtaW5vcik7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9zYl92ZXIoc3RydWN0IHRnMyAqdHAsIHUzMiB2YWwpCiB7CiAJdTMyIG9mZnNldCwgbWFqb3IsIG1pbm9yLCBidWlsZDsKQEAgLTExNDM4LDcgKzExNTUwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQsICZ2YWwpKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKIAkJcmV0dXJuOwogCiAJYnVpbGQgPSAodmFsICYgVEczX0VFUFJPTV9TQl9FREhfQkxEX01BU0spID4+CkBAIC0xMTQ1OCw0OSArMTE1NzAsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9md192ZXIoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfbWdtdGZ3X3ZlcihzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgdmFsLCBvZmZzZXQsIHN0YXJ0OwotCXUzMiB2ZXJfb2Zmc2V0OwotCWludCBpLCBiY250OwotCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZ2YWwpKQotCQlyZXR1cm47Ci0KLQlpZiAodmFsICE9IFRHM19FRVBST01fTUFHSUMpIHsKLQkJaWYgKCh2YWwgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19GVykKLQkJCXRnM19yZWFkX3NiX3Zlcih0cCwgdmFsKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4YywgJm9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgMHg0LCAmc3RhcnQpKQotCQlyZXR1cm47Ci0KLQlvZmZzZXQgPSB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHRwLCBvZmZzZXQpOwotCi0JaWYgKCF0ZzNfZndfaW1nX2lzX3ZhbGlkKHRwLCBvZmZzZXQpIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDgsICZ2ZXJfb2Zmc2V0KSkKLQkJcmV0dXJuOwotCi0Jb2Zmc2V0ID0gb2Zmc2V0ICsgdmVyX29mZnNldCAtIHN0YXJ0OwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7Ci0JCV9fbGUzMiB2OwotCQlpZiAodGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCArIGksICZ2KSkKLQkJCXJldHVybjsKLQotCQltZW1jcHkodHAtPmZ3X3ZlciArIGksICZ2LCA0KTsKLQl9Ci0KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQotCQlyZXR1cm47CisJaW50IGksIHZsZW47CiAKIAlmb3IgKG9mZnNldCA9IFRHM19OVk1fRElSX1NUQVJUOwogCSAgICAgb2Zmc2V0IDwgVEczX05WTV9ESVJfRU5EOwogCSAgICAgb2Zmc2V0ICs9IFRHM19OVk1fRElSRU5UX1NJWkUpIHsKLQkJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkpCisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKIAkJCXJldHVybjsKIAogCQlpZiAoKHZhbCA+PiBURzNfTlZNX0RJUlRZUEVfU0hJRlQpID09IFRHM19OVk1fRElSVFlQRV9BU0ZJTkkpCkBAIC0xMTUxMiwzNiArMTE1OTAsODcgQEAKIAogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKIAkJc3RhcnQgPSAweDA4MDAwMDAwOwotCWVsc2UgaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCAtIDQsICZzdGFydCkpCisJZWxzZSBpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCAtIDQsICZzdGFydCkpCiAJCXJldHVybjsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA0LCAmb2Zmc2V0KSB8fAorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJm9mZnNldCkgfHwKIAkgICAgIXRnM19md19pbWdfaXNfdmFsaWQodHAsIG9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgOCwgJnZhbCkpCisJICAgIHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA4LCAmdmFsKSkKIAkJcmV0dXJuOwogCiAJb2Zmc2V0ICs9IHZhbCAtIHN0YXJ0OwogCi0JYmNudCA9IHN0cmxlbih0cC0+ZndfdmVyKTsKKwl2bGVuID0gc3RybGVuKHRwLT5md192ZXIpOwogCi0JdHAtPmZ3X3ZlcltiY250KytdID0gJywnOwotCXRwLT5md192ZXJbYmNudCsrXSA9ICcgJzsKKwl0cC0+ZndfdmVyW3ZsZW4rK10gPSAnLCc7CisJdHAtPmZ3X3Zlclt2bGVuKytdID0gJyAnOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlfX2xlMzIgdjsKLQkJaWYgKHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQsICZ2KSkKKwkJX19iZTMyIHY7CisJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQsICZ2KSkKIAkJCXJldHVybjsKIAogCQlvZmZzZXQgKz0gc2l6ZW9mKHYpOwogCi0JCWlmIChiY250ID4gVEczX1ZFUl9TSVpFIC0gc2l6ZW9mKHYpKSB7Ci0JCQltZW1jcHkoJnRwLT5md192ZXJbYmNudF0sICZ2LCBURzNfVkVSX1NJWkUgLSBiY250KTsKKwkJaWYgKHZsZW4gPiBURzNfVkVSX1NJWkUgLSBzaXplb2YodikpIHsKKwkJCW1lbWNweSgmdHAtPmZ3X3Zlclt2bGVuXSwgJnYsIFRHM19WRVJfU0laRSAtIHZsZW4pOwogCQkJYnJlYWs7CiAJCX0KIAotCQltZW1jcHkoJnRwLT5md192ZXJbYmNudF0sICZ2LCBzaXplb2YodikpOwotCQliY250ICs9IHNpemVvZih2KTsKKwkJbWVtY3B5KCZ0cC0+ZndfdmVyW3ZsZW5dLCAmdiwgc2l6ZW9mKHYpKTsKKwkJdmxlbiArPSBzaXplb2Yodik7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZGFzaF92ZXIoc3RydWN0IHRnMyAqdHApCit7CisJaW50IHZsZW47CisJdTMyIGFwZWRhdGE7CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHx8CisJICAgICEodHAtPnRnM19mbGFncyAgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKKwkJcmV0dXJuOworCisJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX1NFR19TSUcpOworCWlmIChhcGVkYXRhICE9IEFQRV9TRUdfU0lHX01BR0lDKQorCQlyZXR1cm47CisKKwlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfU1RBVFVTKTsKKwlpZiAoIShhcGVkYXRhICYgQVBFX0ZXX1NUQVRVU19SRUFEWSkpCisJCXJldHVybjsKKworCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9GV19WRVJTSU9OKTsKKworCXZsZW4gPSBzdHJsZW4odHAtPmZ3X3Zlcik7CisKKwlzbnByaW50ZigmdHAtPmZ3X3Zlclt2bGVuXSwgVEczX1ZFUl9TSVpFIC0gdmxlbiwgIiBEQVNIIHYlZC4lZC4lZC4lZCIsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX01BSk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fTUFKU0ZULAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9NSU5NU0spID4+IEFQRV9GV19WRVJTSU9OX01JTlNGVCwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fUkVWTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9SRVZTRlQsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX0JMRE1TSykpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWw7CisKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZ2YWwpKQorCQlyZXR1cm47CisKKwlpZiAodmFsID09IFRHM19FRVBST01fTUFHSUMpCisJCXRnM19yZWFkX2JjX3Zlcih0cCk7CisJZWxzZSBpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfRldfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0ZXKQorCQl0ZzNfcmVhZF9zYl92ZXIodHAsIHZhbCk7CisJZWxzZSBpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0hXKQorCQl0ZzNfcmVhZF9od3NiX3Zlcih0cCk7CisJZWxzZQorCQlyZXR1cm47CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKKwkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQorCQlyZXR1cm47CisKKwl0ZzNfcmVhZF9tZ210ZndfdmVyKHRwKTsKIAogCXRwLT5md192ZXJbVEczX1ZFUl9TSVpFIC0gMV0gPSAwOwogfQpAQCAtMTIzMTIsMTQgKzEyNDQxLDEwIEBACiAJfQogCWlmICghYWRkcl9vaykgewogCQkvKiBOZXh0LCB0cnkgTlZSQU0uICovCi0JCWlmICghdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyAwLCAmaGkpICYmCi0JCSAgICAhdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7Ci0JCQlkZXYtPmRldl9hZGRyWzBdID0gKChoaSA+PiAxNikgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbMV0gPSAoKGhpID4+IDI0KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkclsyXSA9ICgobG8gPj4gIDApICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzNdID0gKChsbyA+PiAgOCkgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbNF0gPSAoKGxvID4+IDE2KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkcls1XSA9ICgobG8gPj4gMjQpICYgMHhmZik7CisJCWlmICghdGczX252cmFtX3JlYWRfYmUzMih0cCwgbWFjX29mZnNldCArIDAsICZoaSkgJiYKKwkJICAgICF0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBtYWNfb2Zmc2V0ICsgNCwgJmxvKSkgeworCQkJbWVtY3B5KCZkZXYtPmRldl9hZGRyWzBdLCAoKGNoYXIgKikmaGkpICsgMiwgMik7CisJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHJbMl0sIChjaGFyICopJmxvLCBzaXplb2YobG8pKTsKIAkJfQogCQkvKiBGaW5hbGx5IGp1c3QgZmV0Y2ggaXQgb3V0IG9mIHRoZSBNQUMgY29udHJvbCByZWdzLiAqLwogCQllbHNlIHsKQEAgLTEzMjAwLDYgKzEzMzI1LDkgQEAKIAkJfQogCiAJCXRnM19hcGVfbG9ja19pbml0KHRwKTsKKworCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpCisJCQl0ZzNfcmVhZF9kYXNoX3Zlcih0cCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggNTA4ZGVmMy4uY2I0YzYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTE3MTksNiArMTcxOSwxMiBAQAogCiAjZGVmaW5lIFRHM19PVFBfREVGQVVMVAkJCTB4Mjg2YzE2NDAKIAorLyogSGFyZHdhcmUgU2VsZmJvb3QgTlZSQU0gbGF5b3V0ICovCisjZGVmaW5lIFRHM19OVk1fSFdTQl9DRkcxCQkweDAwMDAwMDA0CisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NQUpNU0sJMHhmODAwMDAwMAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUFKU0ZUCTI3CisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NSU5NU0sJMHgwN2MwMDAwMAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUlOU0ZUCTIyCiAKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQwkJMHg2Njk5NTVhYQogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDX0ZXCQkweGE1MDAwMDAwCkBAIC0xNzM3LDYgKzE3NDMsMTAgQEAKICNkZWZpbmUgVEczX05WTV9ESVJFTlRfU0laRQkJMHhjCiAjZGVmaW5lIFRHM19OVk1fRElSVFlQRV9TSElGVAkJMjQKICNkZWZpbmUgVEczX05WTV9ESVJUWVBFX0FTRklOSQkJMQorI2RlZmluZSBURzNfTlZNX1BUUkVWX0JDVkVSCQkweDk0CisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUFKTVNLCQkweDAwMDBmZjAwCisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUFKU0ZUCQk4CisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUlOTVNLCQkweDAwMDAwMGZmCiAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVIwX0VESF9PRkYJMHgxMAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjJfRURIX09GRgkweDE0CkBAIC0xOTY3LDYgKzE5NzcsMTQgQEAKIC8qIEFQRSBzaGFyZWQgbWVtb3J5LiAgQWNjZXNzaWJsZSB0aHJvdWdoIEJBUjEgKi8KICNkZWZpbmUgVEczX0FQRV9GV19TVEFUVVMJCTB4NDAwYwogI2RlZmluZSAgQVBFX0ZXX1NUQVRVU19SRUFEWQkJIDB4MDAwMDAxMDAKKyNkZWZpbmUgVEczX0FQRV9GV19WRVJTSU9OCQkweDQwMTgKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSk1TSwkJIDB4ZmYwMDAwMDAKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSlNGVAkJIDI0CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NSU5NU0sJCSAweDAwZmYwMDAwCisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NSU5TRlQJCSAxNgorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fUkVWTVNLCQkgMHgwMDAwZmYwMAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fUkVWU0ZUCQkgOAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fQkxETVNLCQkgMHgwMDAwMDBmZgogI2RlZmluZSBURzNfQVBFX0hPU1RfU0VHX1NJRwkJMHg0MjAwCiAjZGVmaW5lICBBUEVfSE9TVF9TRUdfU0lHX01BR0lDCQkgMHg0ODRmNTM1NAogI2RlZmluZSBURzNfQVBFX0hPU1RfU0VHX0xFTgkJMHg0MjA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCmluZGV4IDQzODUzZTMuLjRhNjVmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCkBAIC0yNzQsNiArMjc0LDE1IEBACiAJCiAJcmV0dXJuIDsgCiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeGxfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0geGxfb3BlbiwKKwkubmRvX3N0b3AJCT0geGxfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHhsX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHhsX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB4bF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHhsX3NldF9tYWNfYWRkcmVzcywKK307CiAgCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB4bF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpIApAQCAtMzM3LDEzICszNDYsNyBAQAogCQlyZXR1cm4gaSA7IAogCX0JCQkJCiAKLQlkZXYtPm9wZW49JnhsX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQ9JnhsX3htaXQ7Ci0JZGV2LT5jaGFuZ2VfbXR1PSZ4bF9jaGFuZ2VfbXR1OwotCWRldi0+c3RvcD0meGxfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bD1OVUxMOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0PSZ4bF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcz0meGxfc2V0X21hY19hZGRyZXNzIDsgCisJZGV2LT5uZXRkZXZfb3BzID0gJnhsX25ldGRldl9vcHM7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LGRldikgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKaW5kZXggYjU2NmQ2ZC4uYjlkYjFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKQEAgLTkyLDYgKzkyLDggQEAKIAlvdXR3KHZhbCwgZGV2LT5iYXNlX2FkZHIgKyByZWcpOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFieXNzX25ldGRldl9vcHM7CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFieXNzX2F0dGFjaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsJCiAJc3RhdGljIGludCB2ZXJzaW9ucHJpbnRlZDsKQEAgLTE1Nyw4ICsxNTksNyBAQAogCiAJbWVtY3B5KHRwLT5Qcm9kdWN0SUQsICJNYWRnZSBQQ0kgMTYvNCBNazIiLCBQUk9EX0lEX1NJWkUgKyAxKTsKIAkJCi0JZGV2LT5vcGVuID0gYWJ5c3Nfb3BlbjsKLQlkZXYtPnN0b3AgPSBhYnlzc19jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYWJ5c3NfbmV0ZGV2X29wczsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CkBAIC00NTAsNiArNDUxLDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFieXNzX2luaXQgKHZvaWQpCiB7CisJYWJ5c3NfbmV0ZGV2X29wcyA9IHRtczM4MHRyX25ldGRldl9vcHM7CisKKwlhYnlzc19uZXRkZXZfb3BzLm5kb19vcGVuID0gYWJ5c3Nfb3BlbjsKKwlhYnlzc19uZXRkZXZfb3BzLm5kb19zdG9wID0gYWJ5c3NfY2xvc2U7CisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYWJ5c3NfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCBmYTdiY2U2ZTAuLjlkODk2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCkBAIC0yMDAsNyArMjAwLDYgQEAKIHN0YXRpYyB2b2lkCWlibXRyX3Jlc2V0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0KnRtcixzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkCXRva19yZXJ1bih1bnNpZ25lZCBsb25nIGRldl9hZGRyKTsKIHN0YXRpYyB2b2lkCWlibXRyX3JlYWRsb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IAluZXRfZGV2aWNlX3N0YXRzICp0b2tfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludAlpYm10cl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwogc3RhdGljIHZvaWQJZmluZF90dXJib19hZGFwdGVycyhpbnQgKmlvbGlzdCk7CiAKQEAgLTgxNiwxOCArODE1LDIxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0cmRldl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB0b2tfb3BlbiwKKwkubmRvX3N0b3AJCT0gdG9rX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB0b2tfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB0b2tfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpYm10cl9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgdHJkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJU0VUX1BBR0UodGktPnNyYl9wYWdlKTsKICAgICAgICAgdGktPm9wZW5fZmFpbHVyZSA9IE5PICAgIDsKLQlkZXYtPm9wZW4gPSB0b2tfb3BlbjsKLQlkZXYtPnN0b3AgPSB0b2tfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB0b2tfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSB0b2tfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdG9rX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBpYm10cl9jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZ0cmRldl9uZXRkZXZfb3BzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDYwLDcgKzE0NjIsNyBAQAogCQkJCQkiJTAyWFxuIiwKIAkJCQkJKGludClyZXRjb2RlLCAoaW50KXJlYWRiKHRpLT5zc2IgKyA2KSk7CiAJCQllbHNlCi0JCQkJdGktPnRyX3N0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIFhNSVRfWElEX0NNRDoKIAkJCURQUklOVEsoInhtaXQgeGlkIHJldF9jb2RlOiAlMDJYXG4iLApAQCAtMTY0Niw3ICsxNjQ4LDcgQEAKIAkJYnJlYWs7CiAJfQogCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKLQl0aS0+dHJfc3RhdHMudHhfYnl0ZXMgKz0gdGktPmN1cnJlbnRfc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSB0aS0+Y3VycmVudF9za2ItPmxlbjsKIAlkZXZfa2ZyZWVfc2tiX2lycSh0aS0+Y3VycmVudF9za2IpOwogCXRpLT5jdXJyZW50X3NrYiA9IE5VTEw7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMTcyMiw3ICsxNzI0LDcgQEAKIAlpZiAocmVhZGIobGxjICsgb2Zmc2V0b2Yoc3RydWN0IHRybGxjLCBsbGMpKSAhPSBVSV9DTUQpIHsKIAkJU0VUX1BBR0UodGktPmFzYl9wYWdlKTsKIAkJd3JpdGViKERBVEFfTE9TVCwgdGktPmFzYiArIFJFVENPREVfT0ZTVCk7Ci0JCXRpLT50cl9zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl3cml0ZWIoUkVTUF9JTl9BU0IsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7CiAJCXJldHVybjsKIAl9CkBAIC0xNzU3LDcgKzE3NTksNyBAQAogCiAJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihza2Jfc2l6ZSkpKSB7CiAJCURQUklOVEsoIm91dCBvZiBtZW1vcnkuIGZyYW1lIGRyb3BwZWQuXG4iKTsKLQkJdGktPnRyX3N0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCVNFVF9QQUdFKHRpLT5hc2JfcGFnZSk7CiAJCXdyaXRlYihEQVRBX0xPU1QsIHRpLT5hc2IgKyBvZmZzZXRvZihzdHJ1Y3QgYXNiX3JlYywgcmV0X2NvZGUpKTsKIAkJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwpAQCAtMTgxMyw4ICsxODE1LDggQEAKIAogCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKIAotCXRpLT50cl9zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQl0aS0+dHJfc3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAlza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsIGRldik7CiAJaWYgKElQdjRfcCkgewpAQCAtMTg3NiwyMSArMTg3OCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogdG9rX2dldF9zdGF0cygpOiAgQmFzaWNhbGx5IGEgc2NhZmZvbGQgcm91dGluZSB3aGljaCB3aWxsIHJldHVybgotICAgdGhlIGFkZHJlc3Mgb2YgdGhlIHRyX3N0YXRpc3RpY3Mgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aAotICAgdGhpcyBkZXZpY2UgLS0gdGhlIHRyLi4uLiBzdHJ1Y3R1cmUgaXMgYW4gZXRobmV0IGxvb2stYWxpa2UKLSAgIHNvIGF0IGxlYXN0IGZvciB0aGlzIGl0ZXJhdGlvbiBtYXkgc3VmZmljZS4gICAqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnRva19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQotCXN0cnVjdCB0b2tfaW5mbyAqdG9raTsKLQl0b2tpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopICZ0b2tpLT50cl9zdGF0czsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgaW50IGlibXRyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSkKIHsKIAlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKaW5kZXggMjM5Yzc1Mi4uZjMwOWI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKQEAgLTIwNyw3ICsyMDcsNiBAQAogc3RhdGljIGludCBzdHJlYW1lcl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHN0cmVhbWVyX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHN0cmVhbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdHJlYW1lcl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN0cmVhbWVyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKIHN0YXRpYyB2b2lkIHN0cmVhbWVyX2FyYl9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN0cmVhbWVyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CkBAIC0yMjIsNiArMjIxLDE4IEBACiAjZW5kaWYKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0cmVhbWVyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHN0cmVhbWVyX29wZW4sCisJLm5kb19zdG9wCQk9IHN0cmVhbWVyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzdHJlYW1lcl94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBzdHJlYW1lcl9jaGFuZ2VfbXR1LAorI2lmIFNUUkVBTUVSX0lPQ1RMCisJLm5kb19kb19pb2N0bAkJPSBzdHJlYW1lcl9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc3RyZWFtZXJfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzdHJlYW1lcl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTMyMSwxOCArMzMyLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdHJlYW1lcl9wcml2LT5zcmJfd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc3RyZWFtZXJfcHJpdi0+dHJiX3dhaXQpOwogCi0JZGV2LT5vcGVuID0gJnN0cmVhbWVyX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc3RyZWFtZXJfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmc3RyZWFtZXJfY2hhbmdlX210dTsKLQlkZXYtPnN0b3AgPSAmc3RyZWFtZXJfY2xvc2U7Ci0jaWYgU1RSRUFNRVJfSU9DVEwKLQlkZXYtPmRvX2lvY3RsID0gJnN0cmVhbWVyX2lvY3RsOwotI2Vsc2UKLQlkZXYtPmRvX2lvY3RsID0gTlVMTDsKLSNlbmRpZgotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnN0cmVhbWVyX3NldF9yeF9tb2RlOwotCWRldi0+Z2V0X3N0YXRzID0gJnN0cmVhbWVyX2dldF9zdGF0czsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5uZXRkZXZfb3BzID0gJnN0cmVhbWVyX25ldGRldl9vcHM7CiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJZGV2LT5iYXNlX2FkZHI9cGlvX3N0YXJ0OwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CkBAIC02MTYsOCArNjE2LDYgQEAKIAlwcmludGsoIlNJU1IgTWFzayA9ICUwNHhcbiIsIHJlYWR3KHN0cmVhbWVyX21taW8gKyBTSVNSX01BU0spKTsKICNlbmRpZgogCWRvIHsKLQkJaW50IGk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IFNSQl9DT01NQU5EX1NJWkU7IGkgKz0gMikgewogCQkJd3JpdGV3KDAsIHN0cmVhbWVyX21taW8gKyBMQVBESU5DKTsKIAkJfQpAQCAtOTM3LDcgKzkzNSw3IEBACiAJCQlpZiAoc2tiID09IE5VTEwpIAogCQkJewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IHBhY2tldCB0byB1cHBlciBsYXllcnMuIFxuIiwJZGV2LT5uYW1lKTsKLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9IGVsc2UgewkvKiB3ZSBhbGxvY2F0ZWQgYW4gc2tiIE9LICovCiAJCQkJaWYgKGJ1ZmZlcl9jbnQgPT0gMSkgewogCQkJCQkvKiByZWxlYXNlIHRoZSBETUEgbWFwcGluZyAqLwpAQCAtMTAwOSw4ICsxMDA3LDggQEAKIAkJCQkJLyogc2VuZCB1cCB0byB0aGUgcHJvdG9jb2wgKi8KIAkJCQkJbmV0aWZfcngoc2tiKTsKIAkJCQl9Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMucnhfcGFja2V0cysrOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIAkJCX0JLyogaWYgc2tiID09IG51bGwgKi8KIAkJfQkJLyogZW5kIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3JzICovCiAKQEAgLTEwNTMsOCArMTA1MSw4IEBACiAJCQkJd2hpbGUoc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1soc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyArIDEpICYgKFNUUkVBTUVSX1RYX1JJTkdfU0laRSAtIDEpXS5zdGF0dXMpIHsKIAkJCQlzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzID0gKHN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMgKyAxKSAmIChTVFJFQU1FUl9UWF9SSU5HX1NJWkUgLSAxKTsKIAkJCQlzdHJlYW1lcl9wcml2LT5mcmVlX3R4X3JpbmdfZW50cmllcysrOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnR4X2J5dGVzICs9IHN0cmVhbWVyX3ByaXYtPnR4X3Jpbmdfc2tiW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLT5sZW47Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19za2Jbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShzdHJlYW1lcl9wcml2LT50eF9yaW5nX3NrYltzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXSk7CiAJCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1tzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS5idWZmZXIgPSAweGRlYWRiZWVmOwogCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3R4X3Jpbmdbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10uc3RhdHVzID0gMDsKQEAgLTE0ODQsMTMgKzE0ODIsNiBAQAogCX0JCQkvKiBzd2l0Y2ggc3JiWzBdICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RyZWFtZXJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHN0cmVhbWVyX3ByaXZhdGUgKnN0cmVhbWVyX3ByaXY7Ci0Jc3RyZWFtZXJfcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgc3RyZWFtZXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkciA9IGFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCmluZGV4IDEzY2NlZTYuLjNjNThkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCkBAIC0yOTksNyArMjk5LDYgQEAKIAlpbnQgdHhfcmluZ19mcmVlLCB0eF9yaW5nX2xhc3Rfc3RhdHVzLCByeF9yaW5nX2xhc3RfcmVjZWl2ZWQsCiAJICAgIGZyZWVfdHhfcmluZ19lbnRyaWVzOwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RyZWFtZXJfc3RhdHM7CiAJX191MTYgc3RyZWFtZXJfbGFuX3N0YXR1czsKIAlfX3U4IHN0cmVhbWVyX3Jpbmdfc3BlZWQ7CiAJX191MTYgcGt0X2J1Zl9zejsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCmluZGV4IDkxN2I0ZDIuLjE5MzMwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwpAQCAtNjkyLDggKzY5Miw2IEBACiAJCiAJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIi0tLS0tLS1cbiIpOwogCWlmIChjdXJjYXJkKSB7Ci0JCXN0cnVjdCBuZXRfbG9jYWwgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJDYXJkIFJldmlzaW9uOiAlZFxuIiwgY3VyY2FyZC0+Y2FyZHJldik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJSQU0gU2l6ZTogJWRrYlxuIiwgY3VyY2FyZC0+cmFtc2l6ZSk7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJDYWJsZSB0eXBlOiAlc1xuIiwgKGN1cmNhcmQtPmNhYmxldHlwZSk/IlNUUC9EQjkiOiJVVFAvUkotNDUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCmluZGV4IGVjYjVjN2MuLmQwNjhhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiBzdGF0aWMgdm9pZCBvbHltcGljX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgb2x5bXBpY19mcmVlbWVtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIDsgIAogc3RhdGljIGlycXJldHVybl90IG9seW1waWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiBvbHltcGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgb2x5bXBpY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikgOyAKIHN0YXRpYyB2b2lkIG9seW1waWNfYXJiX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgb2x5bXBpY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwpAQCAtMTk1LDYgKzE5NCwxNSBAQAogc3RhdGljIHZvaWQgb2x5bXBpY19hc2JfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAKIHN0YXRpYyBpbnQgb2x5bXBpY19wcm9jX2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpIDsgCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb2x5bXBpY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBvbHltcGljX29wZW4sCisJLm5kb19zdG9wCQk9IG9seW1waWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG9seW1waWNfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gb2x5bXBpY19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gb2x5bXBpY19zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG9seW1waWNfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgb2x5bXBpY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2IDsgCkBAIC0yNTMsMTQgKzI2MSw3IEBACiAJCWdvdG8gb3BfZnJlZV9pb21hcDsKIAl9CQkJCQogCi0JZGV2LT5vcGVuPSZvbHltcGljX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQ9Jm9seW1waWNfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHU9Jm9seW1waWNfY2hhbmdlX210dTsKLQlkZXYtPnN0b3A9Jm9seW1waWNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bD1OVUxMOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0PSZvbHltcGljX3NldF9yeF9tb2RlOwotCWRldi0+Z2V0X3N0YXRzPSZvbHltcGljX2dldF9zdGF0cyA7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3M9Jm9seW1waWNfc2V0X21hY19hZGRyZXNzIDsgIAorCWRldi0+bmV0ZGV2X29wcyA9ICZvbHltcGljX25ldGRldl9vcHM7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LGRldikgOyAKQEAgLTY5OCw3ICs2OTksNiBAQAogCWlmIChvbHltcGljX3ByaXYtPm9seW1waWNfbmV0d29ya19tb25pdG9yKSB7IAogCQl1OCBfX2lvbWVtICpvYXQ7CiAJCXU4IF9faW9tZW0gKm9wdDsKLQkJaW50IGk7CiAJCXU4IGFkZHJbNl07CiAJCW9hdCA9IChvbHltcGljX3ByaXYtPm9seW1waWNfbGFwICsgb2x5bXBpY19wcml2LT5vbHltcGljX2FkZHJfdGFibGVfYWRkcik7CiAJCW9wdCA9IChvbHltcGljX3ByaXYtPm9seW1waWNfbGFwICsgb2x5bXBpY19wcml2LT5vbHltcGljX3Bhcm1zX2FkZHIpOwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCQkJfSAKIAkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCArPSBpIDsgCiAJCQkJb2x5bXBpY19wcml2LT5yeF9yaW5nX2xhc3RfcmVjZWl2ZWQgJj0gKE9MWU1QSUNfUlhfUklOR19TSVpFIC0xKSA7IAotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9lcnJvcnMrKzsJIAorCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQl9IGVsc2UgewkKIAkJCQogCQkJCWlmIChidWZmZXJfY250ID09IDEpIHsKQEAgLTc5Niw3ICs3OTYsNyBAQAogCiAJCQkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IHBhY2tldCB0byB1cHBlciBsYXllcnMuIFxuIixkZXYtPm5hbWUpIDsKLQkJCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X2Ryb3BwZWQrKyA7IAorCQkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQkJLyogVXBkYXRlIGNvdW50ZXJzIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHRyYW5zZmVyIHRoZSBmcmFtZSAqLwogCQkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCArPSBpIDsgCiAJCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICY9IChPTFlNUElDX1JYX1JJTkdfU0laRSAtMSkgOyAgCkBAIC04NjIsOCArODYyLDggQEAKIAkJCQkJCXNrYi0+cHJvdG9jb2wgPSB0cl90eXBlX3RyYW5zKHNrYixkZXYpOwogCQkJCQkJbmV0aWZfcngoc2tiKSA7IAogCQkJCQl9IAotCQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMucnhfcGFja2V0cysrIDsgCi0JCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGggOyAKKwkJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKysgOworCQkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCA7CiAJCQkJfSAvKiBpZiBza2IgPT0gbnVsbCAqLwogCQkJfSAvKiBJZiBzdGF0dXMgJiAweDNiICovCiAKQEAgLTk3MSw4ICs5NzEsOCBAQAogCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cysrOwogCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyAmPSAoT0xZTVBJQ19UWF9SSU5HX1NJWkUtMSk7CiAJCQkJb2x5bXBpY19wcml2LT5mcmVlX3R4X3JpbmdfZW50cmllcysrOwotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy50eF9ieXRlcyArPSBvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKLQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMudHhfcGFja2V0cysrIDsgCisJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKyA7CiAJCQkJcGNpX3VubWFwX3NpbmdsZShvbHltcGljX3ByaXYtPnBkZXYsIAogCQkJCQlsZTMyX3RvX2NwdShvbHltcGljX3ByaXYtPm9seW1waWNfdHhfcmluZ1tvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLmJ1ZmZlciksIAogCQkJCQlvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbixQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTEzNDQsMTMgKzEzNDQsNiBAQAogCiB9IAogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiBvbHltcGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvbHltcGljX3ByaXZhdGUgKm9seW1waWNfcHJpdiA7Ci0Jb2x5bXBpY19wcml2PW5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzOyAKLX0KLQogc3RhdGljIGludCBvbHltcGljX3NldF9tYWNfYWRkcmVzcyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikgCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkciA9IGFkZHIgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5oCmluZGV4IDEwZmJiYTAuLjMwNjMxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaApAQCAtMjc1LDcgKzI3NSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnR4X3Jpbmdfc2tiW09MWU1QSUNfVFhfUklOR19TSVpFXSwgKnJ4X3Jpbmdfc2tiW09MWU1QSUNfUlhfUklOR19TSVpFXTsJCiAJaW50IHR4X3JpbmdfZnJlZSwgdHhfcmluZ19sYXN0X3N0YXR1cywgcnhfcmluZ19sYXN0X3JlY2VpdmVkLHJ4X3N0YXR1c19sYXN0X3JlY2VpdmVkLCBmcmVlX3R4X3JpbmdfZW50cmllczsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG9seW1waWNfc3RhdHMgOwogCXUxNiBvbHltcGljX2xhbl9zdGF0dXMgOwogCXU4IG9seW1waWNfcmluZ19zcGVlZCA7CiAJdTE2IHBrdF9idWZfc3ogOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggNTBlYjI5Yy4uOWQ3ZGIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTYxLDcgKzYxLDggQEAKIAogI2luY2x1ZGUgInNtY3RyLmgiICAgICAgICAgICAgICAgLyogT3VyIFN0dWZmICovCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJzbWN0ci5jOiB2MS40IDcvMTIvMDAgYnkganNjaGxzdEBzYW1iYS5vcmdcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CisJS0VSTl9JTkZPICJzbWN0ci5jOiB2MS40IDcvMTIvMDAgYnkganNjaGxzdEBzYW1iYS5vcmdcbiI7CiBzdGF0aWMgY29uc3QgY2hhciBjYXJkbmFtZVtdID0gInNtY3RyIjsKIAogCkBAIC00MzkyLDUyICs0MzkzLDQyIEBACiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjYXNlIFJJTkdfUkVDT1ZFUlk6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmluZyBSZWNvdmVyeVxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFJJTkdfUkVDT1ZFUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgU0lOR0xFX1NUQVRJT046CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU2luZ2xlIFN0YXRpbm9uXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gU0lOR0xFX1NUQVRJT047CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgQ09VTlRFUl9PVkVSRkxPVzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VudGVyIE92ZXJmbG93XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gQ09VTlRFUl9PVkVSRkxPVzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBSRU1PVkVfUkVDRUlWRUQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmVtb3ZlIFJlY2VpdmVkXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gUkVNT1ZFX1JFQ0VJVkVEOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIEFVVE9fUkVNT1ZBTF9FUlJPUjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBBdXRvIFJlbW92ZSBFcnJvclxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IEFVVE9fUkVNT1ZBTF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBMT0JFX1dJUkVfRkFVTFQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTG9iZSBXaXJlIEZhdWx0XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gTE9CRV9XSVJFX0ZBVUxUOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFRSQU5TTUlUX0JFQUNPTjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBUcmFuc21pdCBCZWFjb25cbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBUUkFOU01JVF9CRUFDT047CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgU09GVF9FUlJPUjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBTb2Z0IEVycm9yXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gU09GVF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBIQVJEX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhhcmQgRXJyb3JcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBIQVJEX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFNJR05BTF9MT1NTOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpZ25hbCBMb3NzXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gU0lHTkFMX0xPU1M7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oCmluZGV4IDUyZGY3ZGQuLjZlNTcwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oCkBAIC05NzcsNyArOTc3LDYgQEAKIAlfX3U4CQltb25pdG9yX3N0YXRlX3JlYWR5OwogCV9fdTE2CQlyaW5nX3N0YXR1czsKIAlfX3U4CQlyaW5nX3N0YXR1c19mbGFnczsKLQlfX3U4CQljdXJyZW50X3Jpbmdfc3RhdHVzOwogCV9fdTgJCXN0YXRlOwogCiAJX191OAkJam9pbl9zdGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKaW5kZXggNWJlMzRjMi4uYjExYmI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKQEAgLTIzMzAsNiArMjMzMCwxNyBAQAogCQlETUFfQklESVJFQ1RJT05BTCk7CiB9CiAKK2NvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0bXMzODB0cl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB0bXMzODB0cl9vcGVuLAorCS5uZG9fc3RvcAkJPSB0bXMzODB0cl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdG1zMzgwdHJfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IHRtczM4MHRyX3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gdG1zMzgwdHJfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdG1zMzgwdHJfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdG1zMzgwdHJfc2V0X21hY19hZGRyZXNzLAorfTsKK0VYUE9SVF9TWU1CT0wodG1zMzgwdHJfbmV0ZGV2X29wcyk7CisKIGludCB0bXNkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKnRtc19sb2NhbDsKQEAgLTIzNTMsMTYgKzIzNjQsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJCi0JLyogVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNhcmQgZHJpdmVyIGlmIG5lZWRlZCAqLwotCWRldi0+b3BlbgkJPSB0bXMzODB0cl9vcGVuOwotCWRldi0+c3RvcAkJPSB0bXMzODB0cl9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsCQk9IE5VTEw7IAotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gdG1zMzgwdHJfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IHRtczM4MHRyX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZ0bXMzODB0cl9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWjsKLQlkZXYtPmdldF9zdGF0cwkJPSB0bXMzODB0cl9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmdG1zMzgwdHJfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzCT0gdG1zMzgwdHJfc2V0X21hY19hZGRyZXNzOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCmluZGV4IDdhZjc2ZDcuLjYwYjMwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIC8qIG1vZHVsZSBwcm90b3R5cGVzICovCitleHRlcm4gY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRtczM4MHRyX25ldGRldl9vcHM7CiBpbnQgdG1zMzgwdHJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCB0bXMzODB0cl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGlycXJldHVybl90IHRtczM4MHRyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCmluZGV4IGUyMTUwYjMuLmY5MmZlODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKQEAgLTE1MiwxMyArMTUyLDEzIEBACiAKIAl0cC0+dG1zcHJpdiA9IGNhcmRpbmZvOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJnRtczM4MHRyX25ldGRldl9vcHM7CisKIAlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHRtczM4MHRyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9vdXRfdG1zZGV2OwogCi0JZGV2LT5vcGVuID0gdG1zMzgwdHJfb3BlbjsKLQlkZXYtPnN0b3AgPSB0bXMzODB0cl9jbG9zZTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKaW5kZXggYTlmZDJiMi4uYmI0M2U3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtODg4LDcgKzg4OCw3IEBACiAKIAlpZiAobnVtX3JlY2VpdmVkIDwgYnVkZ2V0KSB7CiAJCWRhdGEtPnJ4cGVuZGluZyA9IDA7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCVRTSV9XUklURShUU0kxMDhfRUNfSU5UTUFTSywKIAkJCQkgICAgIFRTSV9SRUFEKFRTSTEwOF9FQ19JTlRNQVNLKQpAQCAtOTE1LDExICs5MTUsMTEgQEAKIAkgKgogCSAqIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGlzIGNvZGUgcmFjZXMgd2l0aCB0c2kxMDhfcG9sbCgpLCB3aGljaCBtYXNrcwogCSAqIHRoZSBpbnRlcnJ1cHRzIGFmdGVyIHRzaTEwOF9pcnFfb25lKCkgcmVhZCB0aGUgbWFzaywgYnV0IGJlZm9yZQotCSAqIG5ldGlmX3J4X3NjaGVkdWxlIGlzIGNhbGxlZC4gIEl0IGNvdWxkIGFsc28gaGFwcGVuIGR1ZSB0byBjYWxscworCSAqIG5hcGlfc2NoZWR1bGUgaXMgY2FsbGVkLiAgSXQgY291bGQgYWxzbyBoYXBwZW4gZHVlIHRvIGNhbGxzCiAJICogZnJvbSB0c2kxMDhfY2hlY2tfcnhyaW5nKCkuCiAJICovCiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmZGF0YS0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZkYXRhLT5uYXBpKSkgewogCQkvKiBNYXNrLCByYXRoZXIgdGhhbiBhY2ssIHRoZSByZWNlaXZlIGludGVycnVwdHMuICBUaGUgYWNrCiAJCSAqIHdpbGwgaGFwcGVuIGluIHRzaTEwOF9wb2xsKCkuCiAJCSAqLwpAQCAtOTMwLDcgKzkzMCw3IEBACiAJCQkJICAgICB8IFRTSTEwOF9JTlRfUlhUSFJFU0ggfAogCQkJCSAgICAgVFNJMTA4X0lOVF9SWE9WRVJSVU4gfCBUU0kxMDhfSU5UX1JYRVJST1IgfAogCQkJCSAgICAgVFNJMTA4X0lOVF9SWFdBSVQpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZkYXRhLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZkYXRhLT5uYXBpKTsKIAl9IGVsc2UgewogCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJLyogVGhpcyBjYW4gaGFwcGVuIGlmIGFuIGludGVycnVwdCBvY2N1cnMgd2hpbGUgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCA2NDE4Zjc0Li5mOTQ5MWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTQ3OSw3ICs0NzksOCBAQAogCiAjaW5jbHVkZSAiZGU0eDUuaCIKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPSAiZGU0eDUuYzpWMC41NDYgMjAwMS8wMi8yMiBkYXZpZXNAbWFuaWFjLnVsdHJhbmV0LmNvbVxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPICJkZTR4NS5jOlYwLjU0NiAyMDAxLzAyLzIyIGRhdmllc0BtYW5pYWMudWx0cmFuZXQuY29tXG4iOwogCiAjZGVmaW5lIGNfY2hhciBjb25zdCBjaGFyCiAKQEAgLTM5NDEsOCArMzk0Miw4IEBACiAJc3RyY3B5KG5hbWUsICJERTQzNC81Iik7CiAJcmV0dXJuIHN0YXR1czsKICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgYSBERUMgbmFtZSBpbiB0aGUgU1JPTSAqLwotCWludCBpID0gKigoY2hhciAqKSZscC0+c3JvbSArIDE5KSAqIDM7Ci0Jc3RybmNweShuYW1lLCAoY2hhciAqKSZscC0+c3JvbSArIDI2ICsgaSwgOCk7CisJaW50IHRtcCA9ICooKGNoYXIgKikmbHAtPnNyb20gKyAxOSkgKiAzOworCXN0cm5jcHkobmFtZSwgKGNoYXIgKikmbHAtPnNyb20gKyAyNiArIHRtcCwgOCk7CiAgICAgfQogICAgIG5hbWVbOF0gPSAnXDAnOwogICAgIGZvciAoaT0wOyBpPHNpZ2xlbjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKaW5kZXggMmU1Yzk5OS4uZTJjOWQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAJS0VSTl9JTkZPIERSVl9OQU1FICI6IERhdmljb20gRE05eHh4IG5ldCBkcml2ZXIsIHZlcnNpb24gIgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKaW5kZXggNmMzNDI4YS4uYzhkMjIwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKIAlzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogfQogCiBpbnQgdHVsaXBfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCkBAIC0xNDAsNiArMTQwLDcgQEAKICAgICAgICAgICAgICAgIC8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQgaXMgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwogICAgICAgICAgICAgICAgd2hpbGUgKCAhICh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzICYgY3B1X3RvX2xlMzIoRGVzY093bmVkKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgczMyIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOworCQkgICAgICAgc2hvcnQgcGt0X2xlbjsKIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFID09IHRwLT5jdXJfcngpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTEsOCArMTUyLDI4IEBACiAJCSAgICAgICBpZiAoKyt3b3JrX2RvbmUgPj0gYnVkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm90X2RvbmU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4MzgwMDAzMDApICE9IDB4MDMwMCkgeworCQkgICAgICAgLyoKKwkJCSogT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLgorCQkJKiAoTWF5IG5vdCBiZSBjb25zaWRlcmVkIHZhbGlkIHVudGlsIHdlIGhhdmUKKwkJCSogY2hlY2tlZCBzdGF0dXMgZm9yIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cykKKwkJCSovCisJCSAgICAgICBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKKworCQkgICAgICAgLyoKKwkJCSogTWF4aW11bSBwa3RfbGVuIGlzIDE1MTggKDE1MTQgKyB2bGFuIGhlYWRlcikKKwkJCSogQW55dGhpbmcgaGlnaGVyIHRoYW4gdGhpcyBpcyBhbHdheXMgaW52YWxpZAorCQkJKiByZWdhcmRsZXNzIG9mIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cworCQkJKi8KKworCQkgICAgICAgaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkJICAgICAgUnhEZXNjQ1JDRXJyb3IgfAorCQkJCSAgICAgIFJ4RGVzY0NvbGxpc2lvblNlZW4gfAorCQkJCSAgICAgIFJ4RGVzY1J1bnQgfAorCQkJCSAgICAgIFJ4RGVzY0Rlc2NFcnIgfAorCQkJCSAgICAgIFJ4V2hvbGVQa3QpKSAhPSBSeFdob2xlUGt0CisJCQkgICB8fCBwa3RfbGVuID4gMTUxOCkgeworCQkJICAgICAgIGlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJCQkgICAgICBSeFdob2xlUGt0KSkgIT0gUnhXaG9sZVBrdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAweGZmZmYpICE9IDB4N2ZmZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHVsaXBfZGVidWcgPiAxKQpAQCAtMTYxLDMwICsxODIsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICYgUnhEZXNjRmF0YWxFcnIpIHsKKwkJCSAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwODkwKSB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCSAgICAgICBpZiAocGt0X2xlbiA+IDE1MTggfHwKKwkJCQkJICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQorCQkJCQkgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwNCkgdHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwMikgdHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDAwMDEpIHRwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBrdF9sZW4gPiAxNTE4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbiwgcGt0X2xlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfbGVuID0gMTUxODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwa3RfbGVuIDwgdHVsaXBfcnhfY29weWJyZWFrCkBAIC0zMDAsNyArMzE0LDcgQEAKIAogICAgICAgICAgLyogUmVtb3ZlIHVzIGZyb20gcG9sbGluZyBsaXN0IGFuZCBlbmFibGUgUlggaW50ci4gKi8KIAotICAgICAgICAgbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisgICAgICAgICBuYXBpX2NvbXBsZXRlKG5hcGkpOwogICAgICAgICAgaW93cml0ZTMyKHR1bGlwX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMsIHRwLT5iYXNlX2FkZHIrQ1NSNyk7CiAKICAgICAgICAgIC8qIFRoZSBsYXN0IG9wIGhhcHBlbnMgYWZ0ZXIgcG9sbCBjb21wbGV0aW9uLiBXaGljaCBtZWFucyB0aGUgZm9sbG93aW5nOgpAQCAtMzMzLDEwICszNDcsMTAgQEAKIAogICAgICAgICAgLyogVGhpbms6IHRpbWVyX3BlbmRpbmcoKSB3YXMgYW4gZXhwbGljaXQgc2lnbmF0dXJlIG9mIGJ1Zy4KICAgICAgICAgICAqIFRpbWVyIGNhbiBiZSBwZW5kaW5nIG5vdyBidXQgZmlyZWQgYW5kIGNvbXBsZXRlZAotICAgICAgICAgICogYmVmb3JlIHdlIGRpZCBuZXRpZl9yeF9jb21wbGV0ZSgpLiBTZWU/IFdlIHdvdWxkIGxvc2UgaXQuICovCisgICAgICAgICAgKiBiZWZvcmUgd2UgZGlkIG5hcGlfY29tcGxldGUoKS4gU2VlPyBXZSB3b3VsZCBsb3NlIGl0LiAqLwogCiAgICAgICAgICAvKiByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHBvbGxpbmcgbGlzdCAqLwotICAgICAgICAgbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisgICAgICAgICBuYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAgICAgICAgICByZXR1cm4gd29ya19kb25lOwogfQpAQCAtMzU2LDE0ICszNzAsMzUgQEAKIAkvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0IGlzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KIAl3aGlsZSAoICEgKHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duZWQpKSkgewogCQlzMzIgc3RhdHVzID0gbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCXNob3J0IHBrdF9sZW47CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTguOHguXG4iLAogCQkJCSAgIGRldi0+bmFtZSwgZW50cnksIHN0YXR1cyk7CiAJCWlmICgtLXJ4X3dvcmtfbGltaXQgPCAwKQogCQkJYnJlYWs7Ci0JCWlmICgoc3RhdHVzICYgMHgzODAwODMwMCkgIT0gMHgwMzAwKSB7Ci0JCQlpZiAoKHN0YXR1cyAmIDB4MzgwMDAzMDApICE9IDB4MDMwMCkgeworCisJCS8qCisJCSAgT21pdCB0aGUgZm91ciBvY3RldCBDUkMgZnJvbSB0aGUgbGVuZ3RoLgorCQkgIChNYXkgbm90IGJlIGNvbnNpZGVyZWQgdmFsaWQgdW50aWwgd2UgaGF2ZQorCQkgIGNoZWNrZWQgc3RhdHVzIGZvciBSeExlbmd0aE92ZXIyMDQ3IGJpdHMpCisJCSovCisJCXBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OworCQkvKgorCQkgIE1heGltdW0gcGt0X2xlbiBpcyAxNTE4ICgxNTE0ICsgdmxhbiBoZWFkZXIpCisJCSAgQW55dGhpbmcgaGlnaGVyIHRoYW4gdGhpcyBpcyBhbHdheXMgaW52YWxpZAorCQkgIHJlZ2FyZGxlc3Mgb2YgUnhMZW5ndGhPdmVyMjA0NyBiaXRzCisJCSovCisKKwkJaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkgICAgICAgUnhEZXNjQ1JDRXJyb3IgfAorCQkJICAgICAgIFJ4RGVzY0NvbGxpc2lvblNlZW4gfAorCQkJICAgICAgIFJ4RGVzY1J1bnQgfAorCQkJICAgICAgIFJ4RGVzY0Rlc2NFcnIgfAorCQkJICAgICAgIFJ4V2hvbGVQa3QpKSAgICAgICAgIT0gUnhXaG9sZVBrdAorCQkgICAgIHx8IHBrdF9sZW4gPiAxNTE4KSB7CisJCQlpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCSAgICAgUnhXaG9sZVBrdCkpICAgICAgICAgIT0gUnhXaG9sZVBrdCkgewogCQkJCS8qIEluZ29yZSBlYXJsaWVyIGJ1ZmZlcnMuICovCiAJCQkJaWYgKChzdGF0dXMgJiAweGZmZmYpICE9IDB4N2ZmZikgewogCQkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQpAQCAtMzcyLDMxICs0MDcsMjIgQEAKIAkJCQkJCQkgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAJCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJfQotCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBSeERlc2NGYXRhbEVycikgeworCQkJfSBlbHNlIHsKIAkJCQkvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KIAkJCQlpZiAodHVsaXBfZGVidWcgPiAyKQogCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlOC44eC5cbiIsCiAJCQkJCQkgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAJCQkJdHAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KLQkJCQlpZiAoc3RhdHVzICYgMHgwODkwKSB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWlmIChwa3RfbGVuID4gMTUxOCB8fAorCQkJCSAgICAoc3RhdHVzICYgUnhEZXNjUnVudCkpCisJCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIDB4MDAwNCkgdHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiAweDAwMDIpIHRwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIDB4MDAwMSkgdHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQkvKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguICovCi0JCQlzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAKLSNpZm5kZWYgZmluYWxfdmVyc2lvbgotCQkJaWYgKHBrdF9sZW4gPiAxNTE4KSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEJvZ3VzIHBhY2tldCBzaXplIG9mICVkICglI3gpLlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBwa3RfbGVuLCBwa3RfbGVuKTsKLQkJCQlwa3RfbGVuID0gMTUxODsKLQkJCQl0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJfQotI2VuZGlmCi0KIAkJCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9uZyBlbm91Z2ggdG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwogCQkJICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwogCQkJaWYgKHBrdF9sZW4gPCB0dWxpcF9yeF9jb3B5YnJlYWsKQEAgLTUxOSw3ICs1NDUsNyBAQAogCQkJcnhkKys7CiAJCQkvKiBNYXNrIFJYIGludHJzIGFuZCBhZGQgdGhlIGRldmljZSB0byBwb2xsIGxpc3QuICovCiAJCQlpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycyZ+UnhQb2xsSW50LCBpb2FkZHIgKyBDU1I3KTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAKIAkJCWlmICghKGNzcjUmfihBYm5vcm1hbEludHJ8Tm9ybWFsSW50cnxSeFBvbGxJbnR8VFBMbmtQYXNzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYwppbmRleCA5MWNmOWM4Li5kYWRkZmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKQEAgLTY5LDExICs2OSwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5taWlfbG9jaywgZmxhZ3MpOwogCWlmICh0cC0+Y2hpcF9pZCA9PSBMQzgyQzE2OCkgewotCQlpbnQgaSA9IDEwMDA7CiAJCWlvd3JpdGUzMigweDYwMDIwMDAwICsgKHBoeV9pZDw8MjMpICsgKGxvY2F0aW9uPDwxOCksIGlvYWRkciArIDB4QTApOwogCQlpb3JlYWQzMihpb2FkZHIgKyAweEEwKTsKIAkJaW9yZWFkMzIoaW9hZGRyICsgMHhBMCk7Ci0JCXdoaWxlICgtLWkgPiAwKSB7CisJCWZvciAoaSA9IDEwMDA7IGkgPj0gMDsgLS1pKSB7CiAJCQliYXJyaWVyKCk7CiAJCQlpZiAoICEgKChyZXR2YWwgPSBpb3JlYWQzMihpb2FkZHIgKyAweEEwKSkgJiAweDgwMDAwMDAwKSkKIAkJCQlicmVhazsKQEAgLTEzMSwxMyArMTMwLDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPm1paV9sb2NrLCBmbGFncyk7CiAJaWYgKHRwLT5jaGlwX2lkID09IExDODJDMTY4KSB7Ci0JCWludCBpID0gMTAwMDsKIAkJaW93cml0ZTMyKGNtZCwgaW9hZGRyICsgMHhBMCk7Ci0JCWRvIHsKKwkJZm9yIChpID0gMTAwMDsgaSA+PSAwOyAtLWkpIHsKIAkJCWJhcnJpZXIoKTsKIAkJCWlmICggISAoaW9yZWFkMzIoaW9hZGRyICsgMHhBMCkgJiAweDgwMDAwMDAwKSkKIAkJCQlicmVhazsKLQkJfSB3aGlsZSAoLS1pID4gMCk7CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPm1paV9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAppbmRleCAxOWFiYmMzLi4wYWZhMmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKQEAgLTIwMSw4ICsyMDEsMzggQEAKIAlEZXNjU3RhcnRQa3QgPSAweDIwMDAwMDAwLAogCURlc2NFbmRSaW5nICA9IDB4MDIwMDAwMDAsCiAJRGVzY1VzZUxpbmsgID0gMHgwMTAwMDAwMCwKLQlSeERlc2NGYXRhbEVyciA9IDB4MDA4MDAwLAorCisJLyoKKwkgKiBFcnJvciBzdW1tYXJ5IGZsYWcgaXMgbG9naWNhbCBvciBvZiAnQ1JDIEVycm9yJywgJ0NvbGxpc2lvbiBTZWVuJywKKwkgKiAnRnJhbWUgVG9vIExvbmcnLCAnUnVudCcgYW5kICdEZXNjcmlwdG9yIEVycm9yJyBmbGFncyBnZW5lcmF0ZWQKKwkgKiB3aXRoaW4gdHVsaXAgY2hpcC4KKwkgKi8KKwlSeERlc2NFcnJvclN1bW1hcnkgPSAweDgwMDAsCisJUnhEZXNjQ1JDRXJyb3IgPSAweDAwMDIsCisJUnhEZXNjQ29sbGlzaW9uU2VlbiA9IDB4MDA0MCwKKworCS8qCisJICogJ0ZyYW1lIFRvbyBMb25nJyBmbGFnIGlzIHNldCBpZiBwYWNrZXQgbGVuZ3RoIGluY2x1ZGluZyBDUkMgZXhjZWVkcworCSAqIDE1MTguICBIb3dldmVyLCBhIGZ1bGwgc2l6ZWQgVkxBTiB0YWdnZWQgZnJhbWUgaXMgMTUyMiBieXRlcworCSAqIGluY2x1ZGluZyBDUkMuCisJICoKKwkgKiBUaGUgdHVsaXAgY2hpcCBkb2VzIG5vdCBibG9jayBvdmVyc2l6ZWQgZnJhbWVzLCBhbmQgaWYgdGhpcyBmbGFnIGlzCisJICogc2V0IG9uIGEgcmVjZWl2ZSBkZXNjcmlwdG9yIGl0IGRvZXMgbm90IGluZGljYXRlIHRoZSBmcmFtZSBoYXMgYmVlbgorCSAqIHRydW5jYXRlZC4gIFRoZSByZWNlaXZlIGRlc2NyaXB0b3IgYWxzbyBpbmNsdWRlcyB0aGUgYWN0dWFsIGxlbmd0aC4KKwkgKiBUaGVyZWZvcmUgd2UgY2FuIHNhZmV0eSBpZ25vcmUgdGhpcyBmbGFnIGFuZCBjaGVjayB0aGUgbGVuZ3RoCisJICogb3Vyc2VsdmVzLgorCSAqLworCVJ4RGVzY0ZyYW1lVG9vTG9uZyA9IDB4MDA4MCwKKwlSeERlc2NSdW50ID0gMHgwODAwLAorCVJ4RGVzY0Rlc2NFcnIgPSAweDQwMDAsCiAJUnhXaG9sZVBrdCAgID0gMHgwMDAwMDMwMCwKKwkvKgorCSAqIFRvcCB0aHJlZSBiaXRzIG9mIDE0IGJpdCBmcmFtZSBsZW5ndGggKHN0YXR1cyBiaXRzIDI3LTI5KSBzaG91bGQKKwkgKiBuZXZlciBiZSBzZXQgYXMgdGhhdCB3b3VsZCBtYWtlIGZyYW1lIG92ZXIgMjA0NyBieXRlcy4gVGhlIFJlY2VpdmUKKwkgKiBXYXRjaGRvZyBmbGFnIChiaXQgNCkgbWF5IGluZGljYXRlIHRoZSBsZW5ndGggaXMgb3ZlciAyMDQ4IGFuZCB0aGUKKwkgKiBsZW5ndGggZmllbGQgaXMgaW52YWxpZC4KKwkgKi8KKwlSeExlbmd0aE92ZXIyMDQ3ID0gMHgzODAwMDAxMAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKaW5kZXggMDMwZTAyZS4uYzIyN2RiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiAJS0VSTl9JTkZPIERSVl9OQU1FICI6IFVMaSBNNTI2MS9NNTI2MyBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKIAlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCBmNDY3YmY4Li5jNjFhMDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTEzOSw5ICsxMzksMTAgQEAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4qLwogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAoMi40IHBvcnQpICIgRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKLUtFUk5fSU5GTyAiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbFxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2luaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICgyLjQgcG9ydCkgIgorCURSVl9SRUxEQVRFICIgIERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCisJS0VSTl9JTkZPICIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZHJpdmVycy5odG1sXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDA5ZmVhMzEuLmExYjA2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC02Myw2ICs2Myw4IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODcsMjYgKzg5LDEyNyBAQAogCXVuc2lnbmVkIGNoYXIJYWRkcltGTFRfRVhBQ1RfQ09VTlRdW0VUSF9BTEVOXTsKIH07CiAKK3N0cnVjdCB0dW5fZmlsZSB7CisJYXRvbWljX3QgY291bnQ7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OworfTsKKworc3RydWN0IHR1bl9zb2NrOworCiBzdHJ1Y3QgdHVuX3N0cnVjdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKKwlzdHJ1Y3QgdHVuX2ZpbGUJCSp0ZmlsZTsKIAl1bnNpZ25lZCBpbnQgCQlmbGFnczsKLQlpbnQJCQlhdHRhY2hlZDsKIAl1aWRfdAkJCW93bmVyOwogCWdpZF90CQkJZ3JvdXA7CiAKLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWFkcTsKIAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luYzsKIAogCXN0cnVjdCB0YXBfZmlsdGVyICAgICAgIHR4Zmx0OworCXN0cnVjdCBzb2NrCQkqc2s7CisJc3RydWN0IHNvY2tldAkJc29ja2V0OwogCiAjaWZkZWYgVFVOX0RFQlVHCiAJaW50IGRlYnVnOwogI2VuZGlmCiB9OwogCitzdHJ1Y3QgdHVuX3NvY2sgeworCXN0cnVjdCBzb2NrCQlzazsKKwlzdHJ1Y3QgdHVuX3N0cnVjdAkqdHVuOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHVuX3NvY2sgKnR1bl9zayhzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayk7Cit9CisKK3N0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJaW50IGVycjsKKworCUFTU0VSVF9SVE5MKCk7CisKKwkvKiBDaGVjayBwZXJtaXNzaW9ucyAqLworCWlmICgoKHR1bi0+b3duZXIgIT0gLTEgJiYgY3JlZC0+ZXVpZCAhPSB0dW4tPm93bmVyKSB8fAorCSAgICAgKHR1bi0+Z3JvdXAgIT0gLTEgJiYgIWluX2Vncm91cF9wKHR1bi0+Z3JvdXApKSkgJiYKKwkJIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwluZXRpZl90eF9sb2NrX2JoKHR1bi0+ZGV2KTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKHRmaWxlLT50dW4pCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVCVVNZOworCWlmICh0dW4tPnRmaWxlKQorCQlnb3RvIG91dDsKKworCWVyciA9IDA7CisJdGZpbGUtPnR1biA9IHR1bjsKKwl0dW4tPnRmaWxlID0gdGZpbGU7CisJZGV2X2hvbGQodHVuLT5kZXYpOworCWF0b21pY19pbmMoJnRmaWxlLT5jb3VudCk7CisKK291dDoKKwluZXRpZl90eF91bmxvY2tfYmgodHVuLT5kZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQoreworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSB0dW4tPnRmaWxlOworCisJLyogRGV0YWNoIGZyb20gbmV0IGRldmljZSAqLworCW5ldGlmX3R4X2xvY2tfYmgodHVuLT5kZXYpOworCXRmaWxlLT50dW4gPSBOVUxMOworCXR1bi0+dGZpbGUgPSBOVUxMOworCW5ldGlmX3R4X3VubG9ja19iaCh0dW4tPmRldik7CisKKwkvKiBEcm9wIHJlYWQgcXVldWUgKi8KKwlza2JfcXVldWVfcHVyZ2UoJnR1bi0+cmVhZHEpOworCisJLyogRHJvcCB0aGUgZXh0cmEgY291bnQgb24gdGhlIG5ldCBkZXZpY2UgKi8KKwlkZXZfcHV0KHR1bi0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQgdHVuX2RldGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQoreworCXJ0bmxfbG9jaygpOworCV9fdHVuX2RldGFjaCh0dW4pOworCXJ0bmxfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqX190dW5fZ2V0KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IE5VTEw7CisKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmdGZpbGUtPmNvdW50KSkKKwkJdHVuID0gdGZpbGUtPnR1bjsKKworCXJldHVybiB0dW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuX2dldChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gX190dW5fZ2V0KGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHR1bl9wdXQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bikKK3sKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gdHVuLT50ZmlsZTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0ZmlsZS0+Y291bnQpKQorCQl0dW5fZGV0YWNoKHRmaWxlLT50dW4pOworfQorCiAvKiBUQVAgZmlsdGVydGluZyAqLwogc3RhdGljIHZvaWQgYWRkcl9oYXNoX3NldCh1MzIgKm1hc2ssIGNvbnN0IHU4ICphZGRyKQogewpAQCAtMjE5LDEzICszMjIsMjMgQEAKIAogLyogTmV0d29yayBkZXZpY2UgcGFydCBvZiB0aGUgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgdHVuX25ldF9pZDsKLXN0cnVjdCB0dW5fbmV0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHM7CiAKKy8qIE5ldCBkZXZpY2UgZGV0YWNoIGZyb20gZmQuICovCitzdGF0aWMgdm9pZCB0dW5fbmV0X3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSB0dW4tPnRmaWxlOworCisJLyogSW5mb3JtIHRoZSBtZXRob2RzIHRoZXkgbmVlZCB0byBzdG9wIHVzaW5nIHRoZSBkZXYuCisJICovCisJaWYgKHRmaWxlKSB7CisJCXdha2VfdXBfYWxsKCZ0ZmlsZS0+cmVhZF93YWl0KTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnRmaWxlLT5jb3VudCkpCisJCQlfX3R1bl9kZXRhY2godHVuKTsKKwl9Cit9CisKIC8qIE5ldCBkZXZpY2Ugb3Blbi4gKi8KIHN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yNDgsNyArMzYxLDcgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX25ldF94bWl0ICVkXG4iLCB0dW4tPmRldi0+bmFtZSwgc2tiLT5sZW4pOwogCiAJLyogRHJvcCBwYWNrZXQgaWYgaW50ZXJmYWNlIGlzIG5vdCBhdHRhY2hlZCAqLwotCWlmICghdHVuLT5hdHRhY2hlZCkKKwlpZiAoIXR1bi0+dGZpbGUpCiAJCWdvdG8gZHJvcDsKIAogCS8qIERyb3AgaWYgdGhlIGZpbHRlciBkb2VzIG5vdCBsaWtlIGl0LgpAQCAtMjgwLDcgKzM5Myw3IEBACiAJLyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovCiAJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fRkFTWU5DKQogCQlraWxsX2Zhc3luYygmdHVuLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+cmVhZF93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+dGZpbGUtPnJlYWRfd2FpdCk7CiAJcmV0dXJuIDA7CiAKIGRyb3A6CkBAIC0zMTIsNiArNDI1LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHsKKwkubmRvX3VuaW5pdAkJPSB0dW5fbmV0X3VuaW5pdCwKIAkubmRvX29wZW4JCT0gdHVuX25ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCkBAIC0zMTksNiArNDMzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7CisJLm5kb191bmluaXQJCT0gdHVuX25ldF91bmluaXQsCiAJLm5kb19vcGVuCQk9IHR1bl9uZXRfb3BlbiwKIAkubmRvX3N0b3AJCT0gdHVuX25ldF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gdHVuX25ldF94bWl0LApAQCAtMzY1LDg2ICs0ODAsNjYgQEAKIC8qIFBvbGwgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHVuX2Nocl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBtYXNrID0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSB0dW4tPnNrOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAogCWlmICghdHVuKQotCQlyZXR1cm4gLUVCQURGRDsKKwkJcmV0dXJuIFBPTExFUlI7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9wb2xsXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJnR1bi0+cmVhZF93YWl0LCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlsZSwgJnRmaWxlLT5yZWFkX3dhaXQsIHdhaXQpOwogCiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnR1bi0+cmVhZHEpKQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CiAKKwlpZiAoc29ja193cml0ZWFibGUoc2spIHx8CisJICAgICghdGVzdF9hbmRfc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykgJiYKKwkgICAgIHNvY2tfd3JpdGVhYmxlKHNrKSkpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisKKwlpZiAodHVuLT5kZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkKKwkJbWFzayA9IFBPTExFUlI7CisKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIG1hc2s7CiB9CiAKIC8qIHByZXBhZCBpcyB0aGUgYW1vdW50IHRvIHJlc2VydmUgYXQgZnJvbnQuICBsZW4gaXMgbGVuZ3RoIGFmdGVyIHRoYXQuCiAgKiBsaW5lYXIgaXMgYSBoaW50IGFzIHRvIGhvdyBtdWNoIHRvIGNvcHkgKHVzdWFsbHkgaGVhZGVycykuICovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc2l6ZV90IHByZXBhZCwgc2l6ZV90IGxlbiwgc2l6ZV90IGxpbmVhciwKLQkJCQkgICAgIGdmcF90IGdmcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnR1bl9hbGxvY19za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKKwkJCQkJICAgIHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sCisJCQkJCSAgICBzaXplX3QgbGluZWFyLCBpbnQgbm9ibG9jaykKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSB0dW4tPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlza2IgPSBhbGxvY19za2IocHJlcGFkICsgbGVuLCBnZnB8X19HRlBfTk9XQVJOKTsKLQlpZiAoc2tiKSB7Ci0JCXNrYl9yZXNlcnZlKHNrYiwgcHJlcGFkKTsKLQkJc2tiX3B1dChza2IsIGxlbik7Ci0JCXJldHVybiBza2I7Ci0JfQorCWludCBlcnI7CiAKIAkvKiBVbmRlciBhIHBhZ2U/ICBEb24ndCBib3RoZXIgd2l0aCBwYWdlZCBza2IuICovCiAJaWYgKHByZXBhZCArIGxlbiA8IFBBR0VfU0laRSkKLQkJcmV0dXJuIE5VTEw7CisJCWxpbmVhciA9IGxlbjsKIAotCS8qIFN0YXJ0IHdpdGggYSBub3JtYWwgc2tiLCBhbmQgYWRkIHBhZ2VzLiAqLwotCXNrYiA9IGFsbG9jX3NrYihwcmVwYWQgKyBsaW5lYXIsIGdmcCk7CisJc2tiID0gc29ja19hbGxvY19zZW5kX3Bza2Ioc2ssIHByZXBhZCArIGxpbmVhciwgbGVuIC0gbGluZWFyLCBub2Jsb2NrLAorCQkJCSAgICZlcnIpOwogCWlmICghc2tiKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogCXNrYl9yZXNlcnZlKHNrYiwgcHJlcGFkKTsKIAlza2JfcHV0KHNrYiwgbGluZWFyKTsKLQotCWxlbiAtPSBsaW5lYXI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1NLQl9GUkFHUzsgaSsrKSB7Ci0JCXNrYl9mcmFnX3QgKmYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQotCQlmLT5wYWdlID0gYWxsb2NfcGFnZShnZnB8X19HRlBfWkVSTyk7Ci0JCWlmICghZi0+cGFnZSkKLQkJCWJyZWFrOwotCi0JCWYtPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJZi0+c2l6ZSA9IFBBR0VfU0laRTsKLQotCQlza2ItPmRhdGFfbGVuICs9IFBBR0VfU0laRTsKLQkJc2tiLT5sZW4gKz0gUEFHRV9TSVpFOwotCQlza2ItPnRydWVzaXplICs9IFBBR0VfU0laRTsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCi0JCWlmIChsZW4gPCBQQUdFX1NJWkUpIHsKLQkJCWxlbiA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlsZW4gLT0gUEFHRV9TSVpFOwotCX0KLQotCS8qIFRvbyBsYXJnZSwgb3IgYWxsb2MgZmFpbD8gKi8KLQlpZiAodW5saWtlbHkobGVuKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJc2tiID0gTlVMTDsKLQl9CisJc2tiLT5kYXRhX2xlbiA9IGxlbiAtIGxpbmVhcjsKKwlza2ItPmxlbiArPSBsZW4gLSBsaW5lYXI7CiAKIAlyZXR1cm4gc2tiOwogfQogCiAvKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi8KLXN0YXRpYyBfX2lubGluZV9fIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBpb3ZlYyAqaXYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBfX2lubGluZV9fIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCisJCQkJICAgICAgIHN0cnVjdCBpb3ZlYyAqaXYsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgICAgaW50IG5vYmxvY2spCiB7Ci0Jc3RydWN0IHR1bl9waSBwaSA9IHsgMCwgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkgfTsKKwlzdHJ1Y3QgdHVuX3BpIHBpID0geyAwLCBjcHVfdG9fYmUxNihFVEhfUF9JUCkgfTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBsZW4gPSBjb3VudCwgYWxpZ24gPSAwOwogCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciBnc28gPSB7IDAgfTsKQEAgLTQ3NCw5ICs1NjksMTEgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghKHNrYiA9IHR1bl9hbGxvY19za2IoYWxpZ24sIGxlbiwgZ3NvLmhkcl9sZW4sIEdGUF9LRVJORUwpKSkgewotCQl0dW4tPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQlyZXR1cm4gLUVOT01FTTsKKwlza2IgPSB0dW5fYWxsb2Nfc2tiKHR1biwgYWxpZ24sIGxlbiwgZ3NvLmhkcl9sZW4sIG5vYmxvY2spOworCWlmIChJU19FUlIoc2tiKSkgeworCQlpZiAoUFRSX0VSUihza2IpICE9IC1FQUdBSU4pCisJCQl0dW4tPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCX0KIAogCWlmIChza2JfY29weV9kYXRhZ3JhbV9mcm9tX2lvdmVjKHNrYiwgMCwgaXYsIGxlbikpIHsKQEAgLTU2MiwxNCArNjU5LDIwIEBACiBzdGF0aWMgc3NpemVfdCB0dW5fY2hyX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgcG9zKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOworCXNzaXplX3QgcmVzdWx0OwogCiAJaWYgKCF0dW4pCiAJCXJldHVybiAtRUJBREZEOwogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfd3JpdGUgJWxkXG4iLCB0dW4tPmRldi0+bmFtZSwgY291bnQpOwogCi0JcmV0dXJuIHR1bl9nZXRfdXNlcih0dW4sIChzdHJ1Y3QgaW92ZWMgKikgaXYsIGlvdl9sZW5ndGgoaXYsIGNvdW50KSk7CisJcmVzdWx0ID0gdHVuX2dldF91c2VyKHR1biwgKHN0cnVjdCBpb3ZlYyAqKWl2LCBpb3ZfbGVuZ3RoKGl2LCBjb3VudCksCisJCQkgICAgICBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisKKwl0dW5fcHV0KHR1bik7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi8KQEAgLTY0Miw3ICs3NDUsOCBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNzaXplX3QgbGVuLCByZXQgPSAwOwpAQCAtNjUzLDEwICs3NTcsMTIgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9yZWFkXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKIAlsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7Ci0JaWYgKGxlbiA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChsZW4gPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAotCWFkZF93YWl0X3F1ZXVlKCZ0dW4tPnJlYWRfd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZ0ZmlsZS0+cmVhZF93YWl0LCAmd2FpdCk7CiAJd2hpbGUgKGxlbikgewogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIApAQCAtNjcwLDYgKzc3NiwxMCBAQAogCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlicmVhazsKIAkJCX0KKwkJCWlmICh0dW4tPmRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJLyogTm90aGluZyB0byByZWFkLCBsZXQncyBzbGVlcCAqLwogCQkJc2NoZWR1bGUoKTsKQEAgLTY4Myw4ICs3OTMsMTAgQEAKIAl9CiAKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmdHVuLT5yZWFkX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdGZpbGUtPnJlYWRfd2FpdCwgJndhaXQpOwogCitvdXQ6CisJdHVuX3B1dCh0dW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY5Myw1NCArODA1LDc4IEBACiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ0dW4tPnJlYWRxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0dW4tPnJlYWRfd2FpdCk7CiAKIAl0dW4tPm93bmVyID0gLTE7CiAJdHVuLT5ncm91cCA9IC0xOwogCiAJZGV2LT5ldGh0b29sX29wcyA9ICZ0dW5fZXRodG9vbF9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogfQogCi1zdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bl9nZXRfYnlfbmFtZShzdHJ1Y3QgdHVuX25ldCAqdG4sIGNvbnN0IGNoYXIgKm5hbWUpCisvKiBUcml2aWFsIHNldCBvZiBuZXRsaW5rIG9wcyB0byBhbGxvdyBkZWxldGluZyB0dW4gb3IgdGFwCisgKiBkZXZpY2Ugd2l0aCBuZXRsaW5rLgorICovCitzdGF0aWMgaW50IHR1bl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB0dW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKKwkua2luZAkJPSBEUlZfTkFNRSwKKwkucHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCB0dW5fc3RydWN0KSwKKwkuc2V0dXAJCT0gdHVuX3NldHVwLAorCS52YWxpZGF0ZQk9IHR1bl92YWxpZGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIHR1bl9zb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCi0JQVNTRVJUX1JUTkwoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1biwgJnRuLT5kZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoIXN0cm5jbXAodHVuLT5kZXYtPm5hbWUsIG5hbWUsIElGTkFNU0laKSkKLQkJICAgIHJldHVybiB0dW47Ci0JfQorCWlmICghc29ja193cml0ZWFibGUoc2spKQorCQlyZXR1cm47CiAKLQlyZXR1cm4gTlVMTDsKKwlpZiAoc2stPnNrX3NsZWVwICYmIHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNrX3NsZWVwKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoc2stPnNrX3NsZWVwKTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJdHVuID0gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuOworCWtpbGxfZmFzeW5jKCZ0dW4tPmZhc3luYywgU0lHSU8sIFBPTExfT1VUKTsKIH0KIAorc3RhdGljIHZvaWQgdHVuX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQoreworCWRldl9wdXQoY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuLT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHByb3RvIHR1bl9wcm90byA9IHsKKwkubmFtZQkJPSAidHVuIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCB0dW5fc29jayksCit9OworCiBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQogewotCXN0cnVjdCB0dW5fbmV0ICp0bjsKKwlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQpOwotCXR1biA9IHR1bl9nZXRfYnlfbmFtZSh0biwgaWZyLT5pZnJfbmFtZSk7Ci0JaWYgKHR1bikgewotCQlpZiAodHVuLT5hdHRhY2hlZCkKLQkJCXJldHVybiAtRUJVU1k7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnItPmlmcl9uYW1lKTsKKwlpZiAoZGV2KSB7CisJCWlmICgoaWZyLT5pZnJfZmxhZ3MgJiBJRkZfVFVOKSAmJiBkZXYtPm5ldGRldl9vcHMgPT0gJnR1bl9uZXRkZXZfb3BzKQorCQkJdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJZWxzZSBpZiAoKGlmci0+aWZyX2ZsYWdzICYgSUZGX1RBUCkgJiYgZGV2LT5uZXRkZXZfb3BzID09ICZ0YXBfbmV0ZGV2X29wcykKKwkJCXR1biA9IG5ldGRldl9wcml2KGRldik7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIENoZWNrIHBlcm1pc3Npb25zICovCi0JCWlmICgoKHR1bi0+b3duZXIgIT0gLTEgJiYKLQkJICAgICAgY3JlZC0+ZXVpZCAhPSB0dW4tPm93bmVyKSB8fAotCQkgICAgICh0dW4tPmdyb3VwICE9IC0xICYmCi0JCSAgICAgIGNyZWQtPmVnaWQgIT0gdHVuLT5ncm91cCkpICYmCi0JCSAgICAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQorCQllcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9Ci0JZWxzZSBpZiAoX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnItPmlmcl9uYW1lKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJZWxzZSB7CiAJCWNoYXIgKm5hbWU7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtNzcxLDI1ICs5MDcsNDUgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKKwkJZGV2LT5ydG5sX2xpbmtfb3BzID0gJnR1bl9saW5rX29wczsKIAogCQl0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCQl0dW4tPmRldiA9IGRldjsKIAkJdHVuLT5mbGFncyA9IGZsYWdzOwogCQl0dW4tPnR4Zmx0LmNvdW50ID0gMDsKIAorCQllcnIgPSAtRU5PTUVNOworCQlzayA9IHNrX2FsbG9jKG5ldCwgQUZfVU5TUEVDLCBHRlBfS0VSTkVMLCAmdHVuX3Byb3RvKTsKKwkJaWYgKCFzaykKKwkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCisJCS8qIFRoaXMgcmVmIGNvdW50IGlzIGZvciB0dW4tPnNrLiAqLworCQlkZXZfaG9sZChkZXYpOworCQlzb2NrX2luaXRfZGF0YSgmdHVuLT5zb2NrZXQsIHNrKTsKKwkJc2stPnNrX3dyaXRlX3NwYWNlID0gdHVuX3NvY2tfd3JpdGVfc3BhY2U7CisJCXNrLT5za19kZXN0cnVjdCA9IHR1bl9zb2NrX2Rlc3RydWN0OworCQlzay0+c2tfc25kYnVmID0gSU5UX01BWDsKKwkJc2stPnNrX3NsZWVwID0gJnRmaWxlLT5yZWFkX3dhaXQ7CisKKwkJdHVuLT5zayA9IHNrOworCQljb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spLT50dW4gPSB0dW47CisKIAkJdHVuX25ldF9pbml0KGRldik7CiAKIAkJaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKIAkJCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKIAkJCWlmIChlcnIgPCAwKQotCQkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCQkJCWdvdG8gZXJyX2ZyZWVfc2s7CiAJCX0KIAorCQllcnIgPSAtRUlOVkFMOwogCQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCi0JCWxpc3RfYWRkKCZ0dW4tPmxpc3QsICZ0bi0+ZGV2X2xpc3QpOworCQllcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9zZXRfaWZmXG4iLCB0dW4tPmRldi0+bmFtZSk7CkBAIC04MDksMTAgKzk2NSw2IEBACiAJZWxzZQogCQl0dW4tPmZsYWdzICY9IH5UVU5fVk5FVF9IRFI7CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSB0dW47Ci0JdHVuLT5hdHRhY2hlZCA9IDE7Ci0JZ2V0X25ldChkZXZfbmV0KHR1bi0+ZGV2KSk7Ci0KIAkvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW4KIAkgKiB4b2ZmIHN0YXRlLgogCSAqLwpAQCAtODIyLDYgKzk3NCw4IEBACiAJc3RyY3B5KGlmci0+aWZyX25hbWUsIHR1bi0+ZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIAorIGVycl9mcmVlX3NrOgorCXNvY2tfcHV0KHNrKTsKICBlcnJfZnJlZV9kZXY6CiAJZnJlZV9uZXRkZXYoZGV2KTsKICBmYWlsZWQ6CkBAIC04MzAsNyArOTg0LDcgQEAKIAogc3RhdGljIGludCB0dW5fZ2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOwogCiAJaWYgKCF0dW4pCiAJCXJldHVybiAtRUJBREZEOwpAQCAtODU1LDYgKzEwMDksNyBAQAogCWlmICh0dW4tPmZsYWdzICYgVFVOX1ZORVRfSERSKQogCQlpZnItPmlmcl9mbGFncyB8PSBJRkZfVk5FVF9IRFI7CiAKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwMSwzMiArMTA1NiwxNyBAQAogc3RhdGljIGludCB0dW5fY2hyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXZvaWQgX191c2VyKiBhcmdwID0gKHZvaWQgX191c2VyKilhcmc7CiAJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgc25kYnVmOwogCWludCByZXQ7CiAKIAlpZiAoY21kID09IFRVTlNFVElGRiB8fCBfSU9DX1RZUEUoY21kKSA9PSAweDg5KQogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgYXJncCwgc2l6ZW9mIGlmcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChjbWQgPT0gVFVOU0VUSUZGICYmICF0dW4pIHsKLQkJaW50IGVycjsKLQotCQlpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOwotCi0JCXJ0bmxfbG9jaygpOwotCQllcnIgPSB0dW5fc2V0X2lmZihjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMsIGZpbGUsICZpZnIpOwotCQlydG5sX3VubG9jaygpOwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlmciwgc2l6ZW9mKGlmcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChjbWQgPT0gVFVOR0VURkVBVFVSRVMpIHsKIAkJLyogQ3VycmVudGx5IHRoaXMganVzdCBtZWFuczogIndoYXQgSUZGIGZsYWdzIGFyZSB2YWxpZD8iLgogCQkgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5ldmVyIGNoZWNrZWQgZm9yIGludmFsaWQgZmxhZ3Mgb24KQEAgLTkzNiwxOSArMTA3NiwzOSBAQAogCQkJCSh1bnNpZ25lZCBpbnQgX191c2VyKilhcmdwKTsKIAl9CiAKKwl0dW4gPSBfX3R1bl9nZXQodGZpbGUpOworCWlmIChjbWQgPT0gVFVOU0VUSUZGICYmICF0dW4pIHsKKwkJaW50IGVycjsKKworCQlpZnIuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOworCisJCXJ0bmxfbG9jaygpOworCQllcnIgPSB0dW5fc2V0X2lmZih0ZmlsZS0+bmV0LCBmaWxlLCAmaWZyKTsKKwkJcnRubF91bmxvY2soKTsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZnIsIHNpemVvZihpZnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisKKwogCWlmICghdHVuKQogCQlyZXR1cm4gLUVCQURGRDsKIAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX2lvY3RsIGNtZCAlZFxuIiwgdHVuLT5kZXYtPm5hbWUsIGNtZCk7CiAKKwlyZXQgPSAwOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBUVU5HRVRJRkY6CiAJCXJldCA9IHR1bl9nZXRfaWZmKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgZmlsZSwgJmlmcik7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YoaWZyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBUVU5TRVROT0NTVU06CkBAIC0xMDAwLDcgKzExNjAsNyBAQAogCQkJcmV0ID0gMDsKIAkJfQogCQlydG5sX3VubG9jaygpOwotCQlyZXR1cm4gcmV0OworCQlicmVhazsKIAogI2lmZGVmIFRVTl9ERUJVRwogCWNhc2UgVFVOU0VUREVCVUc6CkBAIC0xMDExLDI0ICsxMTcxLDI1IEBACiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSBzZXRfb2ZmbG9hZCh0dW4tPmRldiwgYXJnKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAKIAljYXNlIFRVTlNFVFRYRklMVEVSOgogCQkvKiBDYW4gYmUgc2V0IG9ubHkgZm9yIFRBUHMgKi8KKwkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKCh0dW4tPmZsYWdzICYgVFVOX1RZUEVfTUFTSykgIT0gVFVOX1RBUF9ERVYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gdXBkYXRlX2ZpbHRlcigmdHVuLT50eGZsdCwgKHZvaWQgX191c2VyICopYXJnKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAKIAljYXNlIFNJT0NHSUZIV0FERFI6CiAJCS8qIEdldCBodyBhZGRyZXMgKi8KIAkJbWVtY3B5KGlmci5pZnJfaHdhZGRyLnNhX2RhdGEsIHR1bi0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCQlpZnIuaWZyX2h3YWRkci5zYV9mYW1pbHkgPSB0dW4tPmRldi0+dHlwZTsKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YgaWZyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOwogCiAJY2FzZSBTSU9DU0lGSFdBRERSOgogCQkvKiBTZXQgaHcgYWRkcmVzcyAqLwpAQCAtMTAzOCwxOCArMTE5OSwzNSBAQAogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gZGV2X3NldF9tYWNfYWRkcmVzcyh0dW4tPmRldiwgJmlmci5pZnJfaHdhZGRyKTsKIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisKKwljYXNlIFRVTkdFVFNOREJVRjoKKwkJc25kYnVmID0gdHVuLT5zay0+c2tfc25kYnVmOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZzbmRidWYsIHNpemVvZihzbmRidWYpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBUVU5TRVRTTkRCVUY6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc25kYnVmLCBhcmdwLCBzaXplb2Yoc25kYnVmKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCXR1bi0+c2stPnNrX3NuZGJ1ZiA9IHNuZGJ1ZjsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfTsKIAotCXJldHVybiAwOworCXR1bl9wdXQodHVuKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHR1bl9jaHJfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSB0dW5fZ2V0KGZpbGUpOwogCWludCByZXQ7CiAKIAlpZiAoIXR1bikKQEAgLTEwNzEsNDIgKzEyNDksNTAgQEAKIAlyZXQgPSAwOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKKwl0dW5fcHV0KHR1bik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0dW5fY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogeworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7CiAJY3ljbGVfa2VybmVsX2xvY2soKTsKIAlEQkcxKEtFUk5fSU5GTyAidHVuWDogdHVuX2Nocl9vcGVuXG4iKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJdGZpbGUgPSBrbWFsbG9jKHNpemVvZigqdGZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRmaWxlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhdG9taWNfc2V0KCZ0ZmlsZS0+Y291bnQsIDApOworCXRmaWxlLT50dW4gPSBOVUxMOworCXRmaWxlLT5uZXQgPSBnZXRfbmV0KGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdGZpbGUtPnJlYWRfd2FpdCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdGZpbGU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHVuX2Nocl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CiAKLQlpZiAoIXR1bikKLQkJcmV0dXJuIDA7CiAKLQlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9jbG9zZVxuIiwgdHVuLT5kZXYtPm5hbWUpOworCWlmICh0dW4pIHsKKwkJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfY2xvc2VcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKIAotCXJ0bmxfbG9jaygpOworCQlydG5sX2xvY2soKTsKKwkJX190dW5fZGV0YWNoKHR1bik7CiAKLQkvKiBEZXRhY2ggZnJvbSBuZXQgZGV2aWNlICovCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQl0dW4tPmF0dGFjaGVkID0gMDsKLQlwdXRfbmV0KGRldl9uZXQodHVuLT5kZXYpKTsKKwkJLyogSWYgZGVzaXJlYWJsZSwgdW5yZWdpc3RlciB0aGUgbmV0ZGV2aWNlLiAqLworCQlpZiAoISh0dW4tPmZsYWdzICYgVFVOX1BFUlNJU1QpKSB7CisJCQlzb2NrX3B1dCh0dW4tPnNrKTsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKKwkJfQogCi0JLyogRHJvcCByZWFkIHF1ZXVlICovCi0Jc2tiX3F1ZXVlX3B1cmdlKCZ0dW4tPnJlYWRxKTsKLQotCWlmICghKHR1bi0+ZmxhZ3MgJiBUVU5fUEVSU0lTVCkpIHsKLQkJbGlzdF9kZWwoJnR1bi0+bGlzdCk7Ci0JCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKKwkJcnRubF91bmxvY2soKTsKIAl9CiAKLQlydG5sX3VubG9jaygpOworCXB1dF9uZXQodGZpbGUtPm5ldCk7CisJa2ZyZWUodGZpbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg3LDcgKzEzNzMsNyBAQAogc3RhdGljIHUzMiB0dW5fZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gdHVuLT5hdHRhY2hlZDsKKwlyZXR1cm4gISF0dW4tPnRmaWxlOwogfQogCiBzdGF0aWMgdTMyIHR1bl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTIxNiw0NSArMTQwMiw2IEBACiAJLnNldF9yeF9jc3VtCT0gdHVuX3NldF9yeF9jc3VtCiB9OwogCi1zdGF0aWMgaW50IHR1bl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0Jc3RydWN0IHR1bl9uZXQgKnRuOwotCi0JdG4gPSBrbWFsbG9jKHNpemVvZigqdG4pLCBHRlBfS0VSTkVMKTsKLQlpZiAodG4gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlJTklUX0xJU1RfSEVBRCgmdG4tPmRldl9saXN0KTsKLQotCWlmIChuZXRfYXNzaWduX2dlbmVyaWMobmV0LCB0dW5fbmV0X2lkLCB0bikpIHsKLQkJa2ZyZWUodG4pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdHVuX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlzdHJ1Y3QgdHVuX25ldCAqdG47Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgKm54dDsKLQotCXRuID0gbmV0X2dlbmVyaWMobmV0LCB0dW5fbmV0X2lkKTsKLQotCXJ0bmxfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0dW4sIG54dCwgJnRuLT5kZXZfbGlzdCwgbGlzdCkgewotCQlEQkcoS0VSTl9JTkZPICIlcyBjbGVhbmVkIHVwXG4iLCB0dW4tPmRldi0+bmFtZSk7Ci0JCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLQotCWtmcmVlKHRuKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB0dW5fbmV0X29wcyA9IHsKLQkuaW5pdCA9IHR1bl9pbml0X25ldCwKLQkuZXhpdCA9IHR1bl9leGl0X25ldCwKLX07CiAKIHN0YXRpYyBpbnQgX19pbml0IHR1bl9pbml0KHZvaWQpCiB7CkBAIC0xMjYzLDEwICsxNDEwLDEwIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidHVuOiAlcywgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCXByaW50ayhLRVJOX0lORk8gInR1bjogJXNcbiIsIERSVl9DT1BZUklHSFQpOwogCi0JcmV0ID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnR1bl9uZXRfaWQsICZ0dW5fbmV0X29wcyk7CisJcmV0ID0gcnRubF9saW5rX3JlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0dW46IENhbid0IHJlZ2lzdGVyIHBlcm5ldCBvcHNcbiIpOwotCQlnb3RvIGVycl9wZXJuZXQ7CisJCXByaW50ayhLRVJOX0VSUiAidHVuOiBDYW4ndCByZWdpc3RlciBsaW5rX29wc1xuIik7CisJCWdvdG8gZXJyX2xpbmtvcHM7CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmdHVuX21pc2NkZXYpOwpAQCAtMTI3NCwxOCArMTQyMSwxNyBAQAogCQlwcmludGsoS0VSTl9FUlIgInR1bjogQ2FuJ3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2UgJWRcbiIsIFRVTl9NSU5PUik7CiAJCWdvdG8gZXJyX21pc2M7CiAJfQotCXJldHVybiAwOwotCisJcmV0dXJuICAwOwogZXJyX21pc2M6Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSh0dW5fbmV0X2lkLCAmdHVuX25ldF9vcHMpOwotZXJyX3Blcm5ldDoKKwlydG5sX2xpbmtfdW5yZWdpc3RlcigmdHVuX2xpbmtfb3BzKTsKK2Vycl9saW5rb3BzOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHR1bl9jbGVhbnVwKHZvaWQpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZ0dW5fbWlzY2Rldik7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSh0dW5fbmV0X2lkLCAmdHVuX25ldF9vcHMpOworCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOwogfQogCiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmggYi9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MmQ2OWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi1maXJtd2FyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzc3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDE5OTktMjAwNCAzQ29tIENvcnBvcmF0aW9uLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIG9mIHRoZSAzYzk5MGltZy5oCi0gKiBtaWNyb2NvZGUgc29mdHdhcmUgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBUaGUgbmFtZSBvZiAzQ29tIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSAzQ09NIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBQVVJDSEFTRSBPUiBVU0UgT0YgVEhFIDNjOTkwaW1nLmgKLSAqIE1JQ1JPQ09ERSBTT0ZUV0FSRSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkKLSAqIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTCi0gKiAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkKLSAqIEVNQk9ESUVEIElOIEFOWSBPVEhFUiAzQ09NIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KLSAqIENPTUJJTkFUSU9OIFdJVEggVEhFIDNjOTkwaW1nLmggTUlDUk9DT0RFIFNPRlRXQVJFCi0gKi8KLQotIC8qIHZlciAwMy4wMDEuMDA4ICovCi1zdGF0aWMgY29uc3QgdTggdHlwaG9vbl9maXJtd2FyZV9pbWFnZVtdID0gewotMHg1NCwgMHg1OSwgMHg1MCwgMHg0OCwgMHg0ZiwgMHg0ZiwgMHg0ZSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4Y2IsIDB4OTksIDB4YjEsIDB4ZDQsCi0weDRjLCAweGI4LCAweGQwLCAweDRiLCAweDMyLCAweDAyLCAweGQ0LCAweGVlLCAweDczLCAweDdlLCAweDBiLCAweDEzLAotMHg5YiwgMHhjMCwgMHhhZSwgMHhmNCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHhmYywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MzksIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4ZWEsCi0weDA0LCAweDAwLCAweDAwLCAweGVhLCAweDAzLCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDAwLCAweGVhLAotMHgwMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgzMiwgMHgwMiwgMHgwMCwgMHhlYSwgMHhjNSwgMHgxNCwgMHgwMCwgMHhlYSwKLTB4MDcsIDB4MDAsIDB4MmQsIDB4ZTksIDB4MGUsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4MGYsIDB4ZTEsCi0weGQwLCAweDIwLCAweDlmLCAweGU1LCAweDEyLCAweGZmLCAweDJmLCAweGUxLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAotMHgwMSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwNCwgMHgyMCwgMHg4MSwgMHhlNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHhlMSwKLTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4YTAsIDB4YTAsIDB4ZTEsCi0weDBlLCAweGIwLCAweGEwLCAweGUxLCAweDAwLCAweDAwLCAweGEwLCAweGUzLCAweGE4LCAweDEwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHhhNCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTMsCi0weDAwLCAweDAwLCAweDgxLCAweGU1LCAweGQ3LCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg4OCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkYiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4N2MsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZDIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDc0LCAweGQwLCAweDlmLCAweGU1LCAweGQxLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg2YywgMHhkMCwgMHg5ZiwgMHhlNSwgMHg5YiwgMHgxNCwgMHgwMCwgMHhlYiwgMHhkMywgMHgwMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4NjAsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4NjAsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDYwLCAweDEwLCAweDlmLCAweGU1LCAweDYwLCAweDIwLCAweDlmLCAweGU1LCAweGRiLCAweGZmLCAweGZmLCAweGViLAotMHg1YywgMHgwMCwgMHg5ZiwgMHhlNSwgMHg1YywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHhhMCwgMHhlMywKLTB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4NTQsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NTQsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weGQ0LCAweGZmLCAweGZmLCAweGViLCAweDBhLCAweDAwLCAweGEwLCAweGUxLCAweDBiLCAweGYwLCAweGEwLCAweGUxLAotMHhkMywgMHgxMCwgMHhhMCwgMHhlMywgMHgwMSwgMHhmMCwgMHgyMSwgMHhlMSwgMHhkNCwgMHhmZiwgMHhmZiwgMHhlYiwKLTB4M2MsIDB4YTAsIDB4OWYsIDB4ZTUsIDB4MWEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4YzYsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDE1LCAweDIxLCAweGZmLCAweGZmLCAweDBjLCAweDAwLCAweDEwLCAweDAwLCAweDFjLCAweDAwLCAweDEwLCAweDAwLAotMHgzYywgMHgzOCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzNywgMHgwMCwgMHg4MCwgMHhmYywgMHgzZiwgMHgwMCwgMHg4MCwKLTB4N2MsIDB4MzQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsCi0weGFkLCAweGRlLCAweGFkLCAweGRlLCAweGIwLCAweGJiLCAweDAwLCAweDAwLCAweDI0LCAweGFiLCAweDIwLCAweDQwLAotMHg0OCwgMHgyOSwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhiZCwgMHhiYSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1OCwgMHg1NywgMHgwMCwgMHgwMCwgMHg4NiwgMHg0YiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHhmZiwgMHhmZiwKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NGQsIDB4MDAsIDB4MjQsIDB4MjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDFlLCAweGQwLCAweDM4LCAweDFjLCAweDEwLCAweDQ5LCAweDA0LCAweGYwLCAweDdiLCAweGZkLCAweDI5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHgyOCwgMHgxNSwgMHhkMCwgMHgzOCwgMHgwMSwgMHgwZCwgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4NDEsIDB4NmIsIDB4ODAsIDB4MjksCi0weDBjLCAweGQyLCAweDAxLCAweDMxLCAweDQxLCAweDYzLCAweDI4LCAweDY4LCAweGMxLCAweDY5LCAweGMwLCAweDQ2LAotMHgyOSwgMHg2MCwgMHgzOSwgMHgwNywgMHg0MSwgMHg2MCwgMHgwNCwgMHg2MiwgMHhjNywgMHg2MiwgMHhiMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsCi0weGVlLCAweDA1LCAweDAwLCAweDAwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweDAyLCAweDQ5LCAweDBhLCAweDY4LAotMHhjMCwgMHg0NiwgMHhjMiwgMHg2MSwgMHgwOCwgMHg2MCwgMHg3MCwgMHg0NywKLTB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDAwLCAweDEwLCAweGEwLCAweGUxLAotMHhjMCwgMHgxMCwgMHg4MSwgMHhlMywgMHgwMSwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsCi0weGMwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLAotMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHhjMCwgMHgwMCwgMHhjMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4NDAsIDB4MDAsIDB4ODAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLAotMHg4MCwgMHgwMCwgMHgxMCwgMHhlMywgMHg4MCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsCi0weDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweDEzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHhlMywKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ZTAsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDIwLCAweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDgwLCAweGUwLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHg2NCwgMHgyOCwgMHgwNCwgMHhkMywKLTB4NjQsIDB4MjAsIDB4MzgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDMsIDB4ZTAsIDB4MzgsIDB4NjMsCi0weDA0LCAweDQ5LCAweDA1LCAweGYwLCAweDAxLCAweGZiLCAweDc4LCAweDYzLCAweGI4LCAweDYzLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4OCwgMHgxMywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4YjQsIDB4MTAsIDB4NGIsIDB4MDAsIDB4MjIsIDB4MWYsIDB4NmIsIDB4NjQsIDB4MmYsIDB4MDMsIDB4ZDIsCi0weDA5LCAweDY4LCAweDA5LCAweDY4LCAweDQ5LCAweDA4LCAweDAyLCAweGQyLCAweDEwLCAweDFjLCAweDgwLCAweGJjLAotMHg3MCwgMHg0NywgMHgxOSwgMHgxYywgMHhkYiwgMHg2YiwgMHg0ZiwgMHg2YiwgMHhiYiwgMHg0MiwgMHgwNSwgMHhkMiwKLTB4NDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTgsIDB4MTgsIDB4YzgsIDB4NjMsIDB4ZjEsIDB4ZTcsCi0weDQxLCAweDY4LCAweDA1LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDA0LCAweDQ4LCAweGMxLCAweDZiLAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MywgMHgwMiwgMHgyMCwgMHhlOCwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDE1LCAweDRjLCAweDAwLCAweDIwLCAweDIxLCAweDZiLCAweDY0LCAweDI5LCAweDBiLCAweGQyLCAweGI5LCAweDZlLAotMHg0OSwgMHgwOCwgMHgwOCwgMHhkMywgMHgyMSwgMHg2YywgMHhhMiwgMHg2YiwgMHg5MSwgMHg0MiwgMHgwNywgMHhkMiwKLTB4ZmEsIDB4MWQsIDB4MzksIDB4MzIsIDB4NTIsIDB4OGIsIDB4ODksIDB4MTgsIDB4MjEsIDB4NjQsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLAotMHgzOCwgMHg2YiwgMHgwMiwgMHhmMCwgMHgyZCwgMHhmZSwgMHgzOCwgMHgxYywgMHgwMiwgMHhmMCwgMHhlOCwgMHhmYSwKLTB4MDEsIDB4MjAsIDB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsIDB4YzgsIDB4NzMsIDB4MDUsIDB4NDksCi0weDBhLCAweDZjLCAweDEyLCAweDE4LCAweDBhLCAweDY0LCAweDA0LCAweDQ5LCAweDhhLCAweDZkLCAweDEyLCAweDE4LAotMHg4YSwgMHg2NSwgMHhlNCwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MGEsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDIsIDB4MjMsCi0weDE4LCAweDQwLCAweDA5LCAweDRhLCAweDAwLCAweDIxLCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweGQxLCAweDYzLAotMHgxMSwgMHg2NCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwNiwgMHg0OCwgMHgwNywgMHg2OCwgMHg3YiwgMHgxYywKLTB4MDMsIDB4NjAsIDB4MGEsIDB4MmYsIDB4ZjcsIDB4ZDMsIDB4MDEsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMCwgMHgwYywgMHgxMCwgMHgxOCwgMHgwYSwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MDksIDB4MGMsIDB4NTEsIDB4MTgsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MGMsIDB4MDUsIDB4ZDAsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAwLCAweDBjLCAweDA4LCAweDE4LCAweDAxLCAweDBjLCAweGY5LCAweGQxLAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwKLTB4MTgsIDB4ZDAsIDB4NGYsIDB4MDgsIDB4N2IsIDB4MWUsIDB4MDAsIDB4MmYsCi0weDA2LCAweGQwLCAweDA3LCAweDg4LCAweGJhLCAweDE4LCAweDAyLCAweDMwLCAweDFmLCAweDFjLCAweDAxLCAweDNiLAotMHgwMCwgMHgyZiwgMHhmOCwgMHhkMSwgMHg0OSwgMHgwOCwgMHgwMywgMHhkMywgMHgwMCwgMHg4OCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4ODIsIDB4MTgsIDB4MTAsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDExLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLCAweGY5LCAweGQxLCAweDEwLCAweDA0LCAweDAwLCAweDBjLAotMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4MywgMHg4OSwgMHhjNywgMHg4OSwgMHhmYiwgMHgxOCwKLTB4MDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDAsIDB4N2EsIDB4MDAsIDB4MDIsCi0weGM3LCAweDE4LCAweDM4LCAweDBjLCAweDA1LCAweGQwLCAweDM4LCAweDA0LCAweDAwLCAweDBjLCAweDNiLCAweDBjLAotMHhjNywgMHgxOCwgMHgzOCwgMHgwYywgMHhmOSwgMHhkMSwgMHgwOCwgMHgxYywgMHgxMSwgMHgxYywgMHhmZiwgMHhmNywKLTB4YzgsIDB4ZmYsIDB4MDEsIDB4MWMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjAsIDB4ZmYsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDAyLCAweDIzLCAweDgyLCAweDY4LCAweDFhLCAweDQwLAotMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgwZiwgMHhkMCwgMHgwYSwgMHg0YSwgMHg5MywgMHg2OSwgMHgwMSwgMHgzMywKLTB4OTMsIDB4NjEsIDB4MGEsIDB4NjgsIDB4OGIsIDB4NjgsIDB4OWEsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MWMsIDB4MTgsCi0weDU3LCAweDgxLCAweDA5LCAweDY5LCAweDEwLCAweDFjLCAweGZmLCAweGY3LCAweGFjLCAweGZmLCAweGMwLCAweDQzLAotMHg2MCwgMHg4MSwgMHgzOCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MjMsIDB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDExLCAweGQwLCAweDRhLCAweDY4LCAweDUyLCAweDA5LCAweDBlLCAweGQzLAotMHgwOSwgMHg0YSwgMHgxMywgMHg2YSwgMHgwMSwgMHgzMywgMHgxMywgMHg2MiwgMHhjYiwgMHg2OCwgMHgwMiwgMHg2OCwKLTB4OWMsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4M2EsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsCi0weDAwLCAweGYwLCAweDJlLCAweGY4LCAweDIwLCAweDgyLCAweDM4LCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHg4MCwgMHgyMywKLTB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZDAsIDB4NGEsIDB4NjgsCi0weDkyLCAweDA5LCAweDEyLCAweGQzLCAweDBiLCAweDRhLCAweGQzLCAweDY5LCAweDAxLCAweDMzLCAweGQzLCAweDYxLAotMHhjYiwgMHg2OCwgMHgwMiwgMHg2OCwgMHg5ZiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzYSwKLTB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDEsCi0weDA0LCAweDQ4LCAweGMwLCAweDQ2LCAweGY4LCAweDgwLCAweDIwLCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4YjAsIDB4YjUsIDB4MTQsIDB4MWMsIDB4MDUsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4NjksIDB4YjksIDB4NjgsCi0weDQxLCAweDE4LCAweDM4LCAweDY4LCAweGZmLCAweGY3LCAweDUzLCAweGZmLCAweGMwLCAweDQzLCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzOSwgMHhmZiwgMHgwNCwgMHgxYywgMHhiOCwgMHg2OCwKLTB4NzksIDB4NjksIDB4NDAsIDB4MTgsIDB4NjksIDB4NjgsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4MmEsIDB4NjgsCi0weDEyLCAweDE4LCAweDA5LCAweDFhLCAweDEwLCAweDFjLCAweDAwLCAweGYwLCAweDA1LCAweGY5LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgyNiwgMHhmZiwgMHgwNCwgMHgxYywKLTB4ZTAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweGMwLCAweDA4LCAweDFhLCAweGQzLCAweGI4LCAweDZhLAotMHhmOSwgMHg2YiwgMHg0MCwgMHgxOCwgMHg3OSwgMHg2YywgMHgwMCwgMHhmMCwgMHhlZCwgMHhmOCwgMHhjMCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4NDgsIDB4MDcsIDB4ZDAsIDB4MjAsIDB4MjMsIDB4YjksIDB4NjksCi0weDE5LCAweDQzLCAweGI5LCAweDYxLCAweDAxLCAweDZiLCAweDAxLCAweDMxLCAweDAxLCAweDYzLCAweDA3LCAweGUwLAotMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHhiOSwgMHg2OSwgMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHg0MSwgMHg2YSwKLTB4MDEsIDB4MzEsIDB4NDEsIDB4NjIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweDQxLCAweDA5LAotMHgxYywgMHhkMywgMHhjMCwgMHgwOCwgMHgxYSwgMHhkMywgMHhmOCwgMHgxZCwgMHgzOSwgMHgzMCwgMHgwMCwgMHg3YiwKLTB4MDYsIDB4MjgsIDB4MTUsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4ZjgsIDB4MDEsIDB4MWMsCi0weDBhLCAweDQ4LCAweDA3LCAweGQwLCAweDQwLCAweDIzLCAweGI5LCAweDY5LAotMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywgMHgwNywgMHhlMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4YjksIDB4NjksIDB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4YzEsIDB4NmEsCi0weDAxLCAweDMxLCAweGMxLCAweDYyLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHg4MSwgMHgwOSwKLTB4MmMsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MmEsIDB4ZDMsIDB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4MDAsIDB4N2IsCi0weDExLCAweDI4LCAweDI1LCAweGQxLCAweGI4LCAweDZhLCAweDM5LCAweDZjLCAweDQwLCAweDE4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgwNiwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwNSwgMHgwNCwgMHgyZCwgMHgwYywKLTB4MGYsIDB4NGMsIDB4MTEsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWYsIDB4ZjgsIDB4MDAsIDB4MjgsCi0weDBjLCAweGQwLCAweGE4LCAweDQyLCAweDAyLCAweGQxLCAweDBjLCAweDRiLCAweDk4LCAweDQyLCAweDA3LCAweGQwLAotMHg4MCwgMHgyMywgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywgMHhiOCwgMHg2MSwgMHg2MCwgMHg2YiwgMHgwMSwgMHgzMCwKLTB4NjAsIDB4NjMsIDB4MDcsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsCi0weGI4LCAweDYxLCAweGEwLCAweDZhLCAweDAxLCAweDMwLCAweGEwLCAweDYyLCAweDAwLCAweDIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4ZjAsIDB4YjUsIDB4ZmYsIDB4YjAsIDB4OTksIDB4YjAsIDB4MDQsIDB4MWMsIDB4ZTAsIDB4NmIsIDB4NjEsIDB4NmMsCi0weDA5LCAweDE4LCAweDAzLCAweGFhLCAweDg1LCAweDE4LCAweGEzLCAweDZhLCAweDAwLCAweDIwLCAweDhhLCAweDA4LAotMHgwMSwgMHgzMiwgMHg5NywgMHg5MiwgMHgwNywgMHhkMCwgMHg4MiwgMHgwMCwgMHg5ZiwgMHg1OCwgMHgwMywgMHhhZSwKLTB4YjcsIDB4NTAsIDB4OTcsIDB4OWEsIDB4MDEsIDB4MzAsIDB4ODIsIDB4NDIsIDB4ZjcsIDB4ZDgsIDB4NjAsIDB4NmEsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDA0LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LAotMHgwMiwgMHg5MCwgMHgwMiwgMHhhZiwgMHgzZiwgMHg4OCwgMHgwMywgMHhhOCwgMHhmZiwgMHhmNywgMHg4NywgMHhmZSwKLTB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmQsIDB4ZmUsCi0weDA3LCAweDFjLCAweGUwLCAweDZiLCAweGExLCAweDZjLCAweDQwLCAweDE4LCAweDYxLCAweDZhLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgwOCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwKLTB4MDEsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4YTIsIDB4NmEsCi0weDEyLCAweDE4LCAweDA5LCAweDFhLCAweDEwLCAweDFjLCAweDAwLCAweGYwLCAweDJmLCAweGY4LCAweGMwLCAweDQzLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg1MCwgMHhmZSwgMHgwNywgMHgxYywKLTB4YTgsIDB4ODksIDB4ZTksIDB4ODksIDB4MDgsIDB4MTgsIDB4MjksIDB4OGEsIDB4MDgsIDB4MTgsIDB4NjksIDB4OGEsCi0weDA4LCAweDE4LCAweDY5LCAweDdhLCAweDA5LCAweDAyLCAweDA4LCAweDE4LCAweGExLCAweDZjLCAweDYyLCAweDZjLAotMHg4OSwgMHgxYSwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMSwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDksIDB4MTgsIDB4MDgsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4MDQsCi0weDAwLCAweDBjLCAweDA5LCAweDBjLCAweDQxLCAweDE4LCAweDA4LCAweDBjLCAweGY5LCAweGQxLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgyZiwgMHhmZSwgMHhjMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3ZiwgMHhiMCwKLTB4MTksIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsCi0weDAwLCAweDI5LCAweDJlLCAweGQwLCAweDgzLCAweDA3LCAweDliLCAweDBmLCAweGRjLCAweDAwLCAweDQ3LCAweDE4LAotMHgwNCwgMHgyNSwgMHhlZiwgMHgxYiwgMHhiZiwgMHgwNywgMHhiZiwgMHgwZiwgMHhmZiwgMHgwMCwgMHg4MCwgMHgwOCwKLTB4ODAsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDMsIDB4MzEsIDB4ODksIDB4MDgsIDB4NGQsIDB4MWUsIDB4MDIsIDB4YzgsCi0weGUxLCAweDQwLCAweGExLCAweDQwLCAweDZiLCAweDFlLCAweDAwLCAweDJkLCAweDA5LCAweGQwLCAweDBjLCAweDA0LAotMHgyNCwgMHgwYywgMHhhMiwgMHgxOCwgMHgwOSwgMHgwYywgMHg4YSwgMHgxOCwgMHgwMiwgMHhjOCwgMHgxYywgMHgxYywKLTB4MDEsIDB4M2IsIDB4MDAsIDB4MmMsIDB4ZjUsIDB4ZDEsIDB4YjksIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZjgsIDB4NDAsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDg5LCAweDE4LCAweDAwLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLAotMHgwNSwgMHhkMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMSwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywKLTB4ZjksIDB4ZDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDkwLCAweGI0LCAweDAwLCAweDIwLCAweDAxLCAweDI3LCAweDExLCAweDQ5LCAweDQyLCAweDAwLCAweDEyLCAweDE4LAotMHhkMiwgMHgwMCwgMHg1MywgMHgxOCwgMHg5YywgMHg2OCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDMsIDB4MWIsIDB4MGIsIDB4OGEsIDB4NTgsCi0weDEyLCAweDAzLCAweDEyLCAweDBiLCAweDkzLCAweDQyLCAweDBjLCAweGQxLCAweDAxLCAweDMwLCAweDA0LCAweDI4LAotMHhlYywgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg2YSwgMHgwMSwgMHgwMywgMHgwOSwgMHgwYiwgMHgwNywgMHg0OCwKLTB4MDAsIDB4NmYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZiLCAweGU3LCAweGE4LCAweDAzLCAweDAwLCAweDgwLAotMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5OCwgMHhiNCwgMHgxNCwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4ODMsIDB4MDAsIDB4MTMsIDB4NDgsIDB4YzAsIDB4NTgsIDB4MDcsIDB4MDMsCi0weDNmLCAweDBiLCAweDEyLCAweDQ4LCAweGMwLCAweDU4LCAweDAyLCAweDAzLCAweDEyLCAweDBiLCAweDExLCAweDQ4LAotMHhjMCwgMHg1OCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHgxMCwgMHg0YywgMHhlNCwgMHg1OCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDEsIDB4MjEsCi0weDk4LCAweDQyLCAweDAxLCAweGQxLCAweDA4LCAweDFjLCAweDA5LCAweGUwLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LAotMHgxMCwgMHgxYSwgMHhkYSwgMHgxYiwgMHg4MCwgMHgxOCwgMHgwMCwgMHhlMCwgMHgxOCwgMHgxYSwgMHg4NCwgMHg0MiwKLTB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4OTgsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weDIwLCAweDA0LCAweDAwLCAweDgwLCAweDI4LCAweDA0LCAweDAwLCAweDgwLCAweDA4LCAweDA0LCAweDAwLCAweDgwLAotMHgxOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNCwgMHgxMywgMHgwNCwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzYSwKLTB4ODAsIDB4MDAsIDB4MGIsIDB4MWMsIDB4MTMsIDB4NDksIDB4MGYsIDB4NTgsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsCi0weDBiLCAweDU4LCAweGMwLCAweDQ2LCAweDVhLCAweDYwLCAweDBhLCAweDU4LCAweDA4LCAweDMyLCAweDEwLCAweDRiLAotMHgxYiwgMHg1OCwgMHg5YSwgMHg0MiwgMHgwMSwgMHhkMywgMHgwZiwgMHg0YSwgMHgxMiwgMHg1OCwgMHgwZiwgMHg0YiwKLTB4MWYsIDB4NTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsCi0weDE3LCAweDAzLCAweDNmLCAweDBiLCAweDlmLCAweDQyLCAweDA2LCAweGQxLCAweDBhLCAweDQ4LCAweGMxLCAweDY4LAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MCwgMHgwMSwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwOCwgMHg0YiwKLTB4MWIsIDB4NTgsIDB4YzAsIDB4NDYsIDB4MWEsIDB4NjAsIDB4MGEsIDB4NTAsIDB4MDAsIDB4MjAsIDB4ZjYsIDB4ZTcsCi0weDA4LCAweDA0LCAweDAwLCAweDgwLCAweDI4LCAweDA0LCAweDAwLCAweDgwLCAweDIwLCAweDA0LCAweDAwLCAweDgwLAotMHgxOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4ZmYsIDB4NWYsIDB4MmQsIDB4ZTksIDB4NDgsIDB4ZmUsIDB4ZmYsIDB4ZWIsIDB4MDEsIDB4YjYsIDB4YTAsIDB4ZTMsCi0weDAxLCAweGIxLCAweDhiLCAweGUyLCAweDAyLCAweDhhLCAweGEwLCAweGUzLCAweDAxLCAweDdhLCAweGEwLCAweGUzLAotMHgwMSwgMHhhOSwgMHhhMCwgMHhlMywgMHgwMSwgMHg1NiwgMHhhMCwgMHhlMywgMHhjOCwgMHg2MCwgMHg5ZiwgMHhlNSwKLTB4YzgsIDB4OTAsIDB4OWYsIDB4ZTUsIDB4MTQsIDB4NDAsIDB4OWIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZTMsCi0weDJjLCAweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDBhLCAweDE0LCAweGUzLCAweDExLCAweDAwLCAweDAwLCAweDBhLAotMHgwYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg1MCwgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsCi0weDAxLCAweDBhLCAweGMwLCAweGUzLCAweDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LAotMHgxNCwgMHg3MCwgMHg4NSwgMHhlNSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwYSwgMHgxNCwgMHhlMywKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDIsIDB4MGEsIDB4YzAsIDB4ZTMsCi0weDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LCAweDE0LCAweDgwLCAweDg1LCAweGU1LAotMHgwMSwgMHgwOSwgMHgxNCwgMHhlMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwKLTB4MDEsIDB4MDksIDB4YzAsIDB4ZTMsIDB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweGEwLCAweDg1LCAweGU1LCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDQwLCAweDAwLCAweDAwLCAweDFiLAotMHgwMSwgMHgwMCwgMHgxNCwgMHhlMywgMHg1NCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwYiwgMHgxNCwgMHhlMywKLTB4NjcsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDEsIDB4MGIsIDB4MTQsIDB4ZTMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDE4LCAweDAwLCAweDk5LCAweGU1LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDE4LCAweDAwLCAweDg5LCAweGU1LAotMHhkNSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgxYywgMHgwMCwgMHg5NiwgMHhlNSwgMHgwMSwgMHgwYSwgMHhjMCwgMHhlMywKLTB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsCi0weDE0LCAweDcwLCAweDg1LCAweGU1LCAweGUxLCAweGZmLCAweGZmLCAweGVhLCAweGZmLCAweDVmLCAweGJkLCAweGU4LAotMHgwNCwgMHhmMCwgMHg1ZSwgMHhlMiwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4MTAsIDB4MTAsIDB4MWYsIDB4ZTUsIDB4MTQsIDB4MzAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4YzMsIDB4ZTEsCi0weDE0LCAweDIwLCAweDgxLCAweGU1LCAweDAxLCAweDE2LCAweGEwLCAweGUzLCAweDBjLCAweDIwLCAweDgxLCAweGU1LAotMHgwYiwgMHgxMiwgMHhhMCwgMHhlMywgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHgxOCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4YjAsIDB4MjQsIDB4ZDEsIDB4ZTEsIDB4MDEsIDB4MjAsIDB4ODIsIDB4ZTIsIDB4YjAsIDB4MjQsIDB4YzEsIDB4ZTEsCi0weDNjLCAweDIwLCAweDkxLCAweGU1LCAweDAwLCAweDAwLCAweDgyLCAweGUxLCAweDNjLCAweDAwLCAweDgxLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDEsIDB4MGIsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsCi0weDE0LCAweDAwLCAweDgxLCAweGU1LCAweDAwLCAweDFhLCAweDgxLCAweGUxLCAweDI0LCAweDIwLCAweDkxLCAweGU1LAotMHg3MCwgMHgwMCwgMHgxZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgyMCwgMHg4MCwgMHhlNSwKLTB4MjgsIDB4MTAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTAsIDB4ODAsIDB4ZTUsCi0weDJjLCAweDIwLCAweDkwLCAweGU1LCAweDAxLCAweDIwLCAweDgyLCAweGUyLCAweDJjLCAweDIwLCAweDgwLCAweGU1LAotMHgzZiwgMHgwMCwgMHgwMSwgMHhlMiwgMHgzZiwgMHgwMCwgMHg1MCwgMHhlMywgMHgxZSwgMHhmZiwgMHgyZiwgMHgxMSwKLTB4MTgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4ODEsIDB4ZTIsCi0weDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAyLCAweDE4LCAweGEwLCAweGUzLCAweDBiLCAweDAyLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzMCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsCi0weDAxLCAweDA4LCAweDExLCAweGUzLCAweDBiLCAweDEwLCAweGEwLCAweGUzLCAweDAyLCAweDE5LCAweDgxLCAweGUyLAotMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgyMCwgMHg5MCwgMHhlNSwgMHg0MiwgMHgyOCwgMHhiMCwgMHhlMSwKLTB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZTUsIDB4MDIsIDB4MGMsIDB4MTAsIDB4ZTMsCi0weDAyLCAweDAwLCAweDAwLCAweDBhLCAweDA2LCAweDA3LCAweGEwLCAweGUzLCAweDRjLCAweDExLCAweDgwLCAweGU1LAotMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwYywgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDA2LCAweGEwLCAweGUzLCAweDAxLCAweDAxLCAweDgwLCAweGUyLAotMHgwMCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgwOCwgMHgxMSwgMHhlMywgMHgwYywgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDIsIDB4MTksIDB4ODEsIDB4ZTIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MjAsIDB4OTAsIDB4ZTUsCi0weDQyLCAweDI4LCAweGIwLCAweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDkwLCAweGU1LAotMHgwMiwgMHgwYywgMHgxMCwgMHhlMywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNiwgMHgwNywgMHhhMCwgMHhlMywKLTB4NGMsIDB4MTEsIDB4ODAsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4NGMsIDB4MDAsIDB4MWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweDgwLCAweGU1LCAweGZmLCAweGZmLCAweGZmLCAweGVhLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMiwgMHgxYiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywKLTB4MTQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4MjEsIDB4MWYsIDB4ZTUsCi0weDE0LCAweDMwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweGU1LAotMHgxYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MTQsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsCi0weDFjLCAweDEwLCAweDgyLCAweGU1LCAweDBjLCAweDEwLCAweDgwLCAweGU1LCAweDFjLCAweDEwLCAweDkyLCAweGU1LAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxMCwgMHg4MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4YzAsIDB4MjEsIDB4MWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAxLCAweDE2LCAweGEwLCAweGUzLCAweDE0LCAweDAwLCAweDgyLCAweGU1LCAweDBjLCAweDAwLCAweDgxLCAweGU1LAotMHgxYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDE3LCAweGY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHg5MiwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDksIDB4ZjgsIDB4MDAsIDB4MjgsCi0weDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDg0LCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNCwgMHgwNywgMHg2OCwgMHgzYSwgMHg3OCwgMHhkMiwgMHgwNywKLTB4ZDIsIDB4MGYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4ZmYsIDB4MjIsIDB4MDEsIDB4MzIsCi0weDQyLCAweDYwLCAweDAwLCAweGUwLCAweDQ0LCAweDYwLCAweDNhLCAweDdiLCAweDdiLCAweDdiLCAweDFiLCAweDAyLAotMHgxYSwgMHg0MywgMHg4MSwgMHgyYSwgMHgwOCwgMHhkMSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg0MiwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4MDQsIDB4MjIsIDB4YmYsIDB4MTgsIDB4ODIsIDB4NjAsIDB4MDAsIDB4ZTAsCi0weDg0LCAweDYwLCAweDNhLCAweDdiLCAweDdiLCAweDdiLCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDA4LCAweDJhLAotMHgwNiwgMHhkMSwgMHgwNiwgMHgyMywgMHg0MSwgMHg2OCwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwKLTB4MGUsIDB4MzEsIDB4M2MsIDB4ZTAsIDB4YzEsIDB4MjMsIDB4ZGIsIDB4MDAsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDEsCi0weDQxLCAweDY4LCAweDI0LCAweDRiLCAweDE5LCAweDQzLCAweDNlLCAweGUwLCAweDIzLCAweDRiLCAweDlhLCAweDQyLAotMHgwNCwgMHhkMSwgMHgwMSwgMHgyMywgMHgxYiwgMHgwMywgMHg0MSwgMHg2OCwgMHgxOSwgMHg0MywgMHgzNiwgMHhlMCwKLTB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsCi0weDEyLCAweDBjLCAweDJlLCAweDNhLCAweDFjLCAweDRiLCAweDlhLCAweDQyLCAweDJkLCAweGQ4LCAweDAxLCAweDI1LAotMHg0MiwgMHg2OCwgMHgxNSwgMHg0MywgMHg0NSwgMHg2MCwgMHhiYSwgMHg3YiwgMHhmYiwgMHg3YiwgMHgxYiwgMHgwMiwKLTB4MWEsIDB4NDMsIDB4MTgsIDB4NGIsIDB4OWEsIDB4NDIsIDB4MjIsIDB4ZDEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsCi0weDQ0LCAweGNiLCAweDliLCAweDA3LCAweGRiLCAweDBlLCAweGRhLCAweDQwLCAweDViLCAweDQyLCAweDIwLCAweDMzLAotMHg5ZSwgMHg0MCwgMHgxNiwgMHg0MywgMHgwMywgMHgyZSwgMHgxOCwgMHhkMSwgMHgzOSwgMHg3ZCwgMHg3YiwgMHg3ZCwKLTB4MWIsIDB4MDIsIDB4MTksIDB4NDMsIDB4MDgsIDB4MjksIDB4MDcsIDB4ZDEsIDB4MDQsIDB4MjEsIDB4MjksIDB4NDMsCi0weDQxLCAweDYwLCAweDgxLCAweDY4LCAweDE2LCAweDMxLCAweDgxLCAweDYwLCAweDAxLCAweDIxLCAweDBhLCAweGUwLAotMHhjMSwgMHgyMywgMHhkYiwgMHgwMCwgMHg5OSwgMHg0MiwgMHgwNCwgMHhkMSwgMHgwMSwgMHgyMSwgMHg4OSwgMHgwMywKLTB4MjksIDB4NDMsIDB4NDEsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4ODQsIDB4NjAsIDB4MDAsIDB4MjEsIDB4MDgsIDB4MWMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDgwLCAweDAwLCAweDAwLAotMHhhZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhYSwgMHhhYSwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNCwgMHg0MiwgMHg2OCwKLTB4ZDEsIDB4MDgsIDB4M2YsIDB4ZDMsIDB4MDEsIDB4NjgsIDB4ODMsIDB4NjgsIDB4NTksIDB4MTgsIDB4MDIsIDB4MzksCi0weDhmLCAweDc4LCAweDNmLCAweDA3LCAweDNmLCAweDBmLCAweDA1LCAweDJmLCAweDAzLCAweGQxLCAweGRhLCAweDFkLAotMHgwZCwgMHgzMiwgMHhjMiwgMHg2MCwgMHgwNSwgMHhlMCwgMHhiZiwgMHgwMCwgMHhkYiwgMHgxOSwgMHhjMywgMHg2MCwKLTB4MDgsIDB4MjMsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4OGEsIDB4NzgsIDB4MTIsIDB4MDcsIDB4MTIsIDB4MGYsCi0weDkyLCAweDAwLCAweDAyLCAweDYxLCAweDBhLCAweDc5LCAweDRiLCAweDc5LCAweDFiLCAweDAyLCAweDFhLCAweDQzLAotMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4NDIsIDB4NjEsIDB4Y2EsIDB4N2EsIDB4MDYsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4MTAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDEwLCAweGUwLCAweDExLCAweDJhLCAweDAzLCAweGQxLCAweDIwLCAweDIzLAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwYSwgMHhlMCwgMHgzMywgMHgyYSwgMHgwMywgMHhkMSwgMHg0MCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MzIsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4ODAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweGM5LCAweDdhLCAweGMwLCAweDQ2LCAweDAxLCAweDc2LAotMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwYSwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MCwgMHg0YiwgMHg3OCwKLTB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4OGIsIDB4NzgsIDB4MWIsIDB4MDQsIDB4MWEsIDB4NDMsCi0weDAyLCAweDYwLCAweGM5LCAweDc4LCAweDA5LCAweDA2LCAweDExLCAweDQzLCAweDAxLCAweDYwLCAweDcwLCAweDQ3LAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHg0OCwgMHg2OCwgMHg4MCwgMHgwOSwgMHgyNiwgMHhkMywgMHhiOCwgMHg2YSwKLTB4YzksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDIsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDExLCAweDIzLCAweDliLCAweDAyLCAweDk4LCAweDQyLAotMHgxOCwgMHhkMSwgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjIsIDB4MzgsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4ZGEsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsCi0weDk1LCAweGZkLCAweDAxLCAweDIwLCAweDA3LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDczLCAweDA3LCAweDQ5LAotMHg0YSwgMHg2YywgMHgxMiwgMHgxOCwgMHg0YSwgMHg2NCwgMHgwNiwgMHg0OSwgMHg4YSwgMHg2ZCwgMHgxMiwgMHgxOCwKLTB4OGEsIDB4NjUsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmEsIDB4ZTcsCi0weDE4LCAweDFhLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHg4MSwgMHgwNywgMHgxOSwgMHhkMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDEsIDB4MWQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDIsIDB4MDIsCi0weDEyLCAweDBlLCAweDEyLCAweDA2LCAweDAwLCAweDBhLCAweGZmLCAweDIzLCAweDFiLCAweDA0LCAweDE4LCAweDQwLAotMHgxMCwgMHg0MywgMHgwYSwgMHgwYSwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxMCwgMHg0MywgMHgwOSwgMHgwMiwKLTB4MWIsIDB4MGEsIDB4MTksIDB4NDAsIDB4MDgsIDB4NDMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAxLCAweDA2LCAweDAyLCAweDAyLCAweGZmLCAweDIzLCAweDFiLCAweDA0LAotMHgxYSwgMHg0MCwgMHgxMSwgMHg0MywgMHgwMiwgMHgwYSwgMHgxYiwgMHgwYSwgMHgxYSwgMHg0MCwgMHgxMSwgMHg0MywKLTB4MDAsIDB4MGUsIDB4MDgsIDB4NDMsIDB4ZWQsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MjMsCi0weDgxLCAweDZiLCAweDE5LCAweDQwLCAweDAwLCAweDIyLCAweDAwLCAweDI5LCAweDQ2LCAweGQwLCAweGM3LCAweDFkLAotMHgzOSwgMHgzNywgMHgzOSwgMHg3YiwgMHgzMywgMHgyOSwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOSwgMHgzZiwgMHhkMSwKLTB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGEsIDB4NjUsIDB4YzQsIDB4MWQsIDB4MmQsIDB4MzQsIDB4Y2QsIDB4MWQsCi0weDJkLCAweDM1LCAweDAwLCAweDIyLCAweDkzLCAweDAwLCAweGU2LCAweDU4LCAweGMwLCAweDQ2LCAweGVlLCAweDUwLAotMHgwMSwgMHgzMiwgMHgwNywgMHgyYSwgMHhmOCwgMHhkMywgMHg4MiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0YSwgMHg2MywKLTB4ODIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjIsIDB4N2EsIDB4OGIsIDB4Y2IsIDB4MWQsIDB4MzksIDB4MzMsCi0weDVhLCAweDgzLCAweDQwLCAweDZhLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLCAweDEyLCAweDQ4LCAweDAxLCAweDI3LAotMHg0MiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMCwgMHhkMSwgMHhjMiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgxMywgMHhkMSwKLTB4NDIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsIDB4MDEsIDB4NjEsIDB4YzEsIDB4NjAsIDB4MDEsIDB4NmEsCi0weDAyLCAweDI5LCAweDAyLCAweGQzLCAweDIwLCAweDMwLCAweDA3LCAweDcxLCAweDBjLCAweGUwLCAweDAwLCAweGYwLAotMHgxMywgMHhmOCwgMHgwOSwgMHhlMCwgMHhjMiwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMiwgMHhkMSwgMHgwMSwgMHg2MSwKLTB4YzEsIDB4NjAsIDB4MDMsIDB4ZTAsIDB4MDIsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTEsIDB4NjUsIDB4MDEsIDB4NjEsCi0weDM4LCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDEwLCAweDFjLCAweGZhLCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgxZSwgMHg0OSwgMHgwMCwgMHgyMiwgMHhjYiwgMHg2OCwKLTB4MDAsIDB4MmIsIDB4MzQsIDB4ZDAsIDB4YzgsIDB4MWQsIDB4ZjksIDB4MzAsIDB4ODMsIDB4NjIsIDB4Y2IsIDB4NjgsCi0weDliLCAweDZhLCAweGMwLCAweDQ2LCAweGMzLCAweDYyLCAweGNmLCAweDY5LCAweDdiLCAweDAwLCAweGRmLCAweDE5LAotMHg3ZiwgMHgwMiwgMHgxNywgMHg0YiwgMHhmZiwgMHgxOCwgMHhmZiwgMHgzNywgMHg2NSwgMHgzNywgMHg4MywgMHg2MywKLTB4MDcsIDB4NjMsIDB4Y2IsIDB4MWQsIDB4ZmYsIDB4MzMsIDB4NWEsIDB4MzMsIDB4MWEsIDB4NzIsIDB4Y2IsIDB4NjksCi0weDAwLCAweDJiLCAweDAxLCAweGQwLCAweGNhLCAweDYxLCAweDAxLCAweGUwLCAweDAxLCAweDIzLCAweGNiLCAweDYxLAotMHgwZiwgMHgxYywgMHhjOSwgMHg2OCwgMHg0OSwgMHg2YSwgMHgwOSwgMHg4OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywKLTB4ZjgsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4M2EsIDB4MzAsIDB4NDIsIDB4NjAsIDB4MDIsIDB4ODIsIDB4ODIsIDB4NjAsCi0weGMyLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNlLCAweGZhLCAweDM4LCAweDZhLCAweDAxLCAweDMwLAotMHgzOCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwYSwgMHhmOCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLCAweGY5LCAweDFkLCAweGY5LCAweDMxLAotMHg4OCwgMHg2YSwgMHhjMiwgMHgxZCwgMHgyZCwgMHgzMiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMiwKLTB4MWEsIDB4NDMsIDB4YzgsIDB4NmEsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4ODAsIDB4MTgsCi0weDgyLCAweDc5LCAweGMzLCAweDc5LCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDEzLCAweDAyLCAweDEyLCAweDBhLAotMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHgxYSwgMHg0MywgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwMiwgMHgzOCwKLTB4OTIsIDB4MDQsIDB4OTIsIDB4MGMsIDB4MDAsIDB4MjYsIDB4MjUsIDB4NGQsCi0weGVjLCAweDFkLCAweGZmLCAweDM0LCAweDNhLCAweDM0LCAweDAwLCAweDJhLCAweDA0LCAweGQwLCAweDIwLCAweDhhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOCwgMHg0MywgMHgyYiwgMHhlMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4YzIsIDB4MWQsIDB4MGQsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MzAsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDEwLCAweDQzLCAweDAzLCAweDFjLAotMHhmOCwgMHgxZCwgMHhmZiwgMHgzMCwgMHg0YSwgMHgzMCwgMHg4MiwgMHg3OCwgMHhjOCwgMHg2YiwgMHgxOSwgMHgxYywKLTB4MDIsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZGEsIDB4MjAsIDB4OGEsIDB4ZmYsIDB4MjMsCi0weDAxLCAweDMzLCAweDE4LCAweDQzLCAweDBlLCAweGUwLCAweGY5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLAotMHgwOCwgMHg2MCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxYywgMHhmOCwKLTB4MDAsIDB4MjgsIDB4MTQsIDB4ZDEsIDB4MjAsIDB4OGEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MTgsIDB4NDMsCi0weDIwLCAweDgyLCAweDIxLCAweDhhLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGEyLCAweGZiLCAweGU4LCAweDY4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1NCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4ZTgsIDB4NjAsIDB4MzAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsCi0weGZhLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDA3LCAweDFjLAotMHhmYywgMHgxZCwgMHhmOSwgMHgzNCwgMHhhMCwgMHg2YiwgMHhhNiwgMHg2YSwgMHhjNSwgMHgxZCwgMHgwZCwgMHgzNSwKLTB4MzgsIDB4NDgsIDB4YzAsIDB4NmEsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDIsIDB4MTgsCi0weDAxLCAweDIwLCAweDgwLCAweDA3LCAweDEwLCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHgwMCwgMHg5MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkMCwgMHgxZCwgMHgwNSwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4MzgsIDB4MWMsIDB4MjksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZmEsIDB4YTgsIDB4ODgsCi0weDQxLCAweDA3LCAweDAxLCAweGQwLCAweDAwLCAweDIwLCAweDUxLCAweGUwLCAweDI5LCAweDg5LCAweDA5LCAweDE4LAotMHg2MCwgMHg2YiwgMHg4MSwgMHg0MiwgMHhmOCwgMHhkOCwgMHg2OSwgMHg4OSwgMHhlYSwgMHg4OCwgMHg4OSwgMHgxOCwKLTB4ODEsIDB4NDIsIDB4ZjMsIDB4ZDgsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MjUsIDB4ZDEsIDB4ZTAsIDB4NmEsCi0weGYxLCAweDZiLCAweDQwLCAweDE4LCAweDcxLCAweDZjLCAweGZhLCAweDFkLCAweGNkLCAweDMyLCAweDAxLCAweGYwLAotMHgzMywgMHhmOSwgMHhmYSwgMHgxZCwgMHhmZiwgMHgzMiwgMHgzYSwgMHgzMiwgMHhlMCwgMHg2YSwgMHg1MSwgMHg2OSwKLTB4NDAsIDB4MTgsIDB4YzMsIDB4MWQsIDB4MDMsIDB4MzMsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NWUsIDB4NTgsCi0weGM5LCAweDE5LCAweGZmLCAweDMxLCAweDAxLCAweDMxLCAweDRlLCAweDYxLCAweDAxLCAweDMwLCAweDA0LCAweDI4LAotMHhmNiwgMHhkMywgMHhlMCwgMHg2YSwgMHg1MSwgMHg2OSwgMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwKLTB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4NDMsIDB4MDAsIDB4Y2EsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsCi0weGZhLCAweGQzLCAweDI5LCAweDFjLCAweDExLCAweDRhLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweGFlLCAweGZiLAotMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg2MCwgMHg2YiwgMHgwMiwgMHg0MywgMHgwMSwgMHgyMCwgMHgyMSwgMHg2YiwKLTB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmIsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NjAsIDB4NmIsIDB4MDIsIDB4NDMsCi0weDAwLCAweDIwLCAweGUxLCAweDZhLCAweGZmLCAweGY3LCAweDllLCAweGZiLCAweGExLCAweDZiLCAweDA4LCAweDRhLAotMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHg5OSwgMHhmYiwgMHgwMywgMHgyMCwgMHgwNiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDU0LCAweDAwLCAweDAzLCAweDAwLCAweDE0LCAweDAwLCAweDBmLCAweDAwLAotMHg2YywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg4ZCwgMHhiMCwgMHgwMCwgMHgyMCwgMHhiNSwgMHg0YSwKLTB4ZDUsIDB4MWQsIDB4ZjksIDB4MzUsIDB4NjgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4YjMsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGE4LCAweDZhLCAweGM0LCAweDFkLCAweDJkLCAweDM0LCAweGIxLCAweDQ4LAotMHhjMCwgMHg2YSwgMHhkNywgMHgxZCwgMHhmZiwgMHgzNywgMHgzYSwgMHgzNywgMHgzOSwgMHg2OCwgMHg0YiwgMHgwMCwKLTB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsCi0weDA1LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA4LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOSwgMHg5MCwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwYSwKLTB4MGEsIDB4OTAsIDB4MGEsIDB4OTgsIDB4YTQsIDB4NGUsIDB4MDEsIDB4MjgsIDB4NTksIDB4ZDEsIDB4MjgsIDB4NmIsCi0weGEyLCAweDY4LCAweDgwLCAweDE4LCAweGEyLCAweDRhLCAweDIxLCAweDY5LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMSwgMHhmMCwgMHgyNiwgMHhmOSwgMHgyOCwgMHg2YiwgMHg3OSwgMHg2OSwKLTB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4OTgsIDB4NGIsCi0weGQzLCAweDE4LCAweGZmLCAweDMzLCAweDAxLCAweDMzLCAweDViLCAweDY5LCAweGMwLCAweDQ2LCAweDhiLCAweDUwLAotMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHgzMSwgMHgxYywgMHg4MiwgMHgwMCwKLTB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDQsIDB4YWUsCi0weGIzLCAweDUwLCAweDAxLCAweDMwLCAweDAzLCAweDI4LCAweGY0LCAweGQzLCAweDAwLCAweDIwLCAweDA4LCAweDkwLAotMHg5MCwgMHg0OSwgMHg0MiwgMHgwMCwgMHg4YiwgMHg1YSwgMHhiMiwgMHg1YSwgMHg5MywgMHg0MiwgMHgxMywgMHhkMCwKLTB4OGUsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4YjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweDM4LCAweDhhLCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDcxLCAweGUwLCAweDM4LCAweDhhLAotMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHg2ZCwgMHhlMCwgMHgwMCwgMHhmMCwgMHgxMSwgMHhmOSwgMHgwMSwgMHhmMCwKLTB4NjcsIDB4ZmYsIDB4ZjUsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZTMsIDB4ZDMsIDB4MDgsIDB4OTgsCi0weDAwLCAweDI4LCAweDBjLCAweGQxLCAweGI4LCAweDY4LCAweDQxLCAweDFjLCAweGI5LCAweDYwLCAweDAwLCAweDI4LAotMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHgwMiwgMHhlMCwgMHgzOCwgMHg4YSwKLTB4MDQsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODIsIDB4NzgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4NzgsIDB4NjAsCi0weDYyLCAweGUwLCAweDBhLCAweDk4LCAweDAyLCAweDI4LCAweDVmLCAweGQxLCAweDA5LCAweDk4LCAweDQwLCAweDBjLAotMHg3MywgMHhkMywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywKLTB4MDAsIDB4NjgsIDB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsCi0weDBjLCAweDM4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDAwLCAweDIxLCAweDhhLCAweDAwLCAweDZiLCAweDRiLAotMHhkNiwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNCwgMHhhZSwKLTB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjMsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MWUsCi0weDBjLCAweDkzLCAweDY4LCAweDRhLCAweDE2LCAweDZiLCAweGMwLCAweDQ2LCAweDBiLCAweDk2LCAweDhhLCAweDAwLAotMHgwYywgMHg5YiwgMHg5YiwgMHgxOCwgMHgwYiwgMHg5ZSwgMHg5ZSwgMHgxOSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksCi0weGYxLCAweGQzLCAweDY5LCAweDQ2LCAweDhiLCAweDFjLCAweDA3LCAweDkzLCAweDAwLCAweDIxLCAweDA4LCAweDkxLAotMHgwNCwgMHhhZSwgMHg0YSwgMHgwMCwgMHgwNywgMHg5YiwgMHg5YiwgMHg1YSwgMHhiMiwgMHg1YSwgMHg5MywgMHg0MiwKLTB4MTEsIDB4ZDAsIDB4NTgsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4ZjgsIDB4NjgsCi0weDQxLCAweDFjLCAweGY5LCAweDYwLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDM4LCAweDhhLCAweDIwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMiwgMHhlMCwgMHgzOCwgMHg4YSwgMHg4MCwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg4MiwKLTB4OGYsIDB4ZTcsIDB4MDEsIDB4MzEsIDB4MDYsIDB4MjksIDB4ZTQsIDB4ZDMsIDB4MDgsIDB4OTksIDB4MDAsIDB4MjksCi0weDBkLCAweGQxLCAweGY5LCAweDY4LCAweDRhLCAweDFjLCAweGZhLCAweDYwLCAweDAwLCAweDI5LCAweDA0LCAweGQxLAotMHgzOSwgMHg4YSwgMHgwMiwgMHgyMywgMHgxOSwgMHg0MywgMHgwMywgMHhlMCwgMHgwYywgMHhlMCwgMHgzOSwgMHg4YSwKLTB4MDgsIDB4MjMsIDB4MTksIDB4NDMsIDB4MzksIDB4ODIsIDB4MjksIDB4NmIsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDAxLCAweDM4LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDIwLCAweDc2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgxMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDAsIDB4ZTAsIDB4MTksIDB4ZTAsIDB4MzUsIDB4NDgsIDB4MmEsIDB4NmIsCi0weGMwLCAweDQ2LCAweGVhLCAweDYyLCAweDA0LCAweDI5LCAweDRmLCAweGQxLCAweDAxLCAweDIxLCAweGM2LCAweDFkLAotMHhmZiwgMHgzNiwgMHg1YSwgMHgzNiwgMHgzMSwgMHg3MiwgMHgwYSwgMHg5OSwgMHgwMiwgMHgyOSwgMHgxZSwgMHhkMSwKLTB4MDksIDB4OTksIDB4MDksIDB4MGUsIDB4NDksIDB4MDYsIDB4MWEsIDB4ZDEsIDB4ZTEsIDB4MWQsIDB4MDUsIDB4MzEsCi0weDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDM5LCAweDFhLCAweGUwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMCwgMHgxZCwgMHgwMSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweGY5LCAweDY4LCAweDRhLCAweDFjLCAweGZhLCAweDYwLCAweDAwLCAweDI5LCAweGJjLCAweGQxLAotMHhiNiwgMHhlNywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhlMSwgMHgxZCwKLTB4MDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4YTEsIDB4NjAsCi0weGU4LCAweDZhLCAweGMwLCAweDQ2LCAweDIwLCAweDYwLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDg4LCAweGZjLAotMHgyMCwgMHg3ZSwgMHgzMywgMHgyOCwgMHgwMSwgMHhkMCwgMHgzMiwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwMSwgMHgyMSwKLTB4MTQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YjksIDB4NjAsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDg1LCAweGY4LCAweDI4LCAweDZiLCAweGE5LCAweDZhLCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDIwLCAweDFjLAotMHhmZiwgMHhmNywgMHhjMCwgMHhmZCwgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwZSwgMHhlMCwgMHgwMCwgMHgyMCwKLTB4MzAsIDB4NzIsIDB4MTEsIDB4ZTAsIDB4MzMsIDB4MjksIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjksIDB4MGQsIDB4ZDEsCi0weDA3LCAweDFjLCAweDAwLCAweGYwLCAweDcxLCAweGY4LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGIwLCAweGZkLAotMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMSwgMHhmMCwgMHg3MCwgMHhmZSwgMHgwZCwgMHhiMCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4ZjYsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg0MCwgMHgwNywgMHgwMCwgMHg4MCwgMHg4MiwgMHgwNywgMHgwMCwgMHg4MCwKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MjUsIDB4NDgsCi0weDQxLCAweDY4LCAweDAxLCAweDMxLCAweDQxLCAweDYwLCAweDI0LCAweDRmLCAweGY5LCAweDFkLCAweGY5LCAweDMxLAotMHgwMCwgMHgyNCwgMHg4OCwgMHg2YSwgMHhmYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5NCwgMHg2MSwgMHgwNCwgMHgyMiwKLTB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NjAsIDB4MTAsIDB4MjIsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDlhLCAweDYxLCAweGZhLCAweDFkLCAweGZmLCAweDMyLCAweDVhLCAweDMyLCAweDEzLCAweDdhLCAweDFiLCAweDRhLAotMHgwMCwgMHgyYiwgMHgwYiwgMHhkMCwgMHgxNSwgMHg4YSwgMHgyZSwgMHgwYSwgMHgzNiwgMHgwMiwgMHgzMywgMHgyMywKLTB4MmIsIDB4NDAsIDB4OWIsIDB4MDAsIDB4MWUsIDB4NDMsIDB4Y2MsIDB4MjMsIDB4MmIsIDB4NDAsIDB4OWIsIDB4MDgsCi0weDMzLCAweDQzLCAweDEzLCAweDgyLCAweDEyLCAweDhhLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDgzLAotMHg0YSwgMHg2YiwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MSwgMHgwYSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4ODIsIDB4NjIsIDB4YzQsIDB4NjIsIDB4YzMsIDB4MWQsIDB4MzksIDB4MzMsIDB4NGEsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDVhLCAweDgzLCAweDA0LCAweDIzLCAweDAyLCAweDY4LCAweDFhLCAweDQzLCAweDAyLCAweDYwLCAweDg4LCAweDZhLAotMHgwMSwgMHhmMCwgMHgzMiwgMHhmYSwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1NCwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjgsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhhYywgMHgwNywgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHhjMSwgMHgxZCwgMHhmOSwgMHgzMSwgMHg4YSwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDEsIDB4MWQsIDB4NDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weDBiLCAweDA2LCAweDFiLCAweDBlLCAweDAxLCAweDI3LCAweGMxLCAweDFkLCAweGZmLCAweDMxLCAweDRhLCAweDMxLAotMHgzMywgMHgyYiwgMHgwNSwgMHhkMSwgMHg4YiwgMHg3MCwgMHgwMSwgMHgxYywgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGYsIDB4ZjgsIDB4MDYsIDB4ZTAsIDB4MzIsIDB4MmIsIDB4MDgsIDB4ZDEsIDB4OGIsIDB4NzAsIDB4MDEsIDB4MWMsCi0weDEwLCAweDFjLCAweDAwLCAweGYwLCAweDNjLCAweGY4LCAweDM4LCAweDFjLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg4OCwgMHg3MCwgMHhmOSwgMHhlNywgMHg5MCwgMHhiNCwgMHhjYSwgMHgxZCwKLTB4ZjksIDB4MzIsIDB4MzMsIDB4MjcsIDB4Y2MsIDB4MWQsIDB4ZmYsIDB4MzQsIDB4NGEsIDB4MzQsIDB4ZDMsIDB4NmEsCi0weGMwLCAweDQ2LCAweGE3LCAweDcwLCAweGZmLCAweDMxLCAweDQxLCAweDMxLCAweDA3LCAweDZjLCAweGMwLCAweDQ2LAotMHg0ZiwgMHg2MSwgMHhmYiwgMHgxOCwgMHgzOSwgMHgxYywgMHg5ZiwgMHgxZSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4ZmMsIDB4MWMsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4OWIsIDB4MDAsCi0weDFiLCAweDA0LCAweDFiLCAweDBjLCAweGM5LCAweDE4LCAweDA4LCAweDMxLCAweDAxLCAweDY0LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhiOSwgMHgxYywgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgzNCwgMHgzMCwgMHgwMSwgMHg3NiwKLTB4ZjgsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4YjksIDB4MWQsCi0weDE5LCAweDQzLCAweGQwLCAweDYzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDQzLAotMHhkMCwgMHg2MywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjYSwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4YzUsIDB4MWQsIDB4MmQsIDB4MzUsIDB4MzIsIDB4MjAsIDB4Y2YsIDB4MWQsCi0weGZmLCAweDM3LCAweDRhLCAweDM3LCAweGQzLCAweDZhLCAweGMwLCAweDQ2LCAweGI4LCAweDcwLCAweGNjLCAweDFkLAotMHhmZiwgMHgzNCwgMHgzYSwgMHgzNCwgMHhlOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MSwgMHgxMCwgMHgzMCwKLTB4ZTgsIDB4NjAsIDB4NjAsIDB4NjksIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDM4LCAweDFkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweGI5LCAweDFjLCAweDE5LCAweDQzLAotMHhkMCwgMHg2MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHg0MywgMHhkMCwgMHg2MywKLTB4ZjgsIDB4MWQsIDB4MDMsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4ZmMsIDB4ZmIsIDB4MjAsIDB4NjIsIDB4ZjgsIDB4MWQsCi0weDA3LCAweDMwLCAweGZmLCAweGY3LCAweGY3LCAweGZiLCAweDYwLCAweDYyLCAweDAwLCAweDIwLCAweDI4LCAweDc2LAotMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmNywgMHhiNSwgMHg4MSwgMHhiMCwgMHgwMSwgMHg5OCwKLTB4YzcsIDB4MWQsIDB4ZjksIDB4MzcsIDB4YjgsIDB4NmEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDA1LCAweDM0LCAweDIzLCAweDQzLCAweDFjLCAweDY4LCAweGZmLCAweDIzLCAweGZlLCAweDMzLCAweDIzLCAweDQwLAotMHg3ZiwgMHg2YiwgMHgzZiwgMHgwNCwgMHgzYiwgMHg0MywgMHgwYiwgMHg2MCwgMHgzNCwgMHgzMCwgMHgxYywgMHgxYywKLTB4ODAsIDB4MjMsIDB4MjMsIDB4NDAsIDB4MDEsIDB4OWYsIDB4ZmYsIDB4MzcsIDB4NDEsIDB4MzcsIDB4MDAsIDB4MmIsCi0weDNjLCAweGQwLCAweDBjLCAweDIzLCAweDAwLCAweDkzLCAweDAwLCAweDIzLCAweDlkLCAweDAwLCAweGFlLCAweDE4LAotMHgzNiwgMHg2OSwgMHg2ZCwgMHgxOCwgMHg2ZSwgMHg2MSwgMHgwMSwgMHgzMywgMHgwNSwgMHgyYiwgMHhmNywgMHhkMywKLTB4MDAsIDB4MjMsIDB4OWQsIDB4MDAsIDB4YWUsIDB4MTgsIDB4NzYsIDB4NmEsIDB4NmQsIDB4MTgsIDB4YWUsIDB4NjIsCi0weDAxLCAweDMzLCAweDA1LCAweDJiLCAweGY3LCAweGQzLCAweDAxLCAweDliLCAweGZmLCAweDMzLCAweDUxLCAweDMzLAotMHg5YiwgMHg3OCwgMHgzMywgMHgyYiwgMHgwZSwgMHhkMSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwKLTB4MDEsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGM1LCAweDFkLCAweDBkLCAweDM1LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDE2LCAweGUwLAotMHg3YiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwKLTB4MGQsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4N2QsIDB4NjksIDB4NWQsIDB4MWIsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGM2LCAweDFkLCAweDAxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweGViLCAweDE4LAotMHgwYywgMHgzYiwgMHgwMiwgMHhlMCwgMHgwMCwgMHgyMywgMHgwMCwgMHg5MywgMHg0YiwgMHg4MSwgMHhjYiwgMHg4MCwKLTB4NjMsIDB4MDksIDB4NDksIDB4ZDMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzQsIDB4MWQsIDB4MDUsIDB4MzQsCi0weDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDgxLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhjNCwgMHgxZCwgMHgwZCwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwYywgMHg4OSwgMHgxYiwgMHgxYiwKLTB4MDAsIDB4OWMsIDB4MWMsIDB4MWIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweDIwLCAweDE4LCAweDg4LCAweDgwLCAweDM4LCAweDZhLCAweDA0LCAweDBlLCAweGZmLCAweDIzLAotMHgxYiwgMHgwNCwgMHgwMywgMHg0MCwgMHgxYiwgMHgwYSwgMHgxYywgMHg0MywgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4MDMsIDB4NDAsIDB4MWIsIDB4MDIsIDB4MjMsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4YzgsIDB4NjAsCi0weDc4LCAweDZhLCAweDA3LCAweDBlLCAweGZmLCAweDIzLCAweDFiLCAweDA0LCAweDAzLCAweDQwLCAweDFiLCAweDBhLAotMHgxZiwgMHg0MywgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgwMywgMHg0MCwgMHgxYiwgMHgwMiwgMHgzYiwgMHg0MywKLTB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NjEsIDB4ZDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjMsCi0weDkwLCAweDZiLCAweGMwLCAweDQ2LCAweDA4LCAweDY0LCAweDUwLCAweDZjLCAweGMwLCAweDQ2LCAweDQ4LCAweDY0LAotMHgxMCwgMHg2YywgMHhjMCwgMHg0NiwgMHg4OCwgMHg2NCwgMHhkMCwgMHg2YywgMHhjMCwgMHg0NiwgMHhjOCwgMHg2NCwKLTB4OTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjUsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MGIsIDB4ODEsCi0weDhiLCAweDgwLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHgwZiwgMHg0YSwgMHg5MywgMHg4OSwgMHgwMSwgMHgzMywgMHg5MywgMHg4MSwgMHhjMiwgMHgxZCwgMHhmOSwgMHgzMiwKLTB4MDQsIDB4MjMsIDB4OTAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzMsIDB4NjAsIDB4MTAsIDB4MjMsIDB4ODMsIDB4NjEsCi0weGNiLCAweDBhLCAweDAxLCAweGQzLCAweDE4LCAweDIzLCAweDgzLCAweDYxLCAweGMxLCAweDgzLCAweDUxLCAweDZiLAotMHhjMCwgMHg0NiwgMHhjMSwgMHg4MSwgMHg1MSwgMHg2YiwgMHhjMiwgMHgxZCwgMHgzOSwgMHgzMiwgMHg1MSwgMHg4MywKLTB4MDQsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4ZjgsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHgxYiwgMHg0YywgMHgyMCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgxYiwgMHhkMiwgMHgwMCwgMHgyMCwKLTB4ZTcsIDB4MWQsIDB4MTksIDB4MzcsIDB4MzgsIDB4NzEsIDB4ZTEsIDB4NjgsIDB4ZTAsIDB4MWQsIDB4ZjksIDB4MzAsCi0weDAwLCAweDI5LCAweDE1LCAweGQwLCAweDQyLCAweDZhLCAweDAwLCAweDJhLCAweDEyLCAweGQxLCAweDAxLCAweDI1LAotMHgwYSwgMHhlMCwgMHhmZiwgMHhmNywgMHg4OSwgMHhmYiwgMHgwMCwgMHgyOCwgMHgwOSwgMHhkMSwgMHgyMCwgMHg2YSwKLTB4MDIsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4M2QsIDB4NzEsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsCi0weDM4LCAweDc5LCAweDAwLCAweDI4LCAweGYxLCAweGQwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHg2YSwgMHgwMCwgMHgyOCwgMHhmOSwgMHhkMSwgMHgwMCwgMHgyOSwgMHhmNywgMHhkMSwgMHg2MCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MDQsIDB4ZDAsIDB4MDYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsIDB4YTgsIDB4ZmMsCi0weGVmLCAweGU3LCAweDYwLCAweDY4LCAweDAwLCAweDI4LCAweGVjLCAweGQwLCAweDAwLCAweGYwLCAweDVhLCAweGY4LAotMHhlOSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MjAsIDB4MjMsIDB4YjgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4MDEsIDB4MjQsCi0weDAwLCAweDI1LCAweDAwLCAweDI4LCAweDBiLCAweGQxLCAweDM4LCAweDZhLCAweDAwLCAweDI4LCAweDAzLCAweGQxLAotMHgyOCwgMHgxYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxZiwgMHg0OCwgMHgwMSwgMHg2ZSwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4NjYsIDB4MDMsIDB4ZTAsIDB4NDgsIDB4NjgsIDB4YzQsIDB4MjMsIDB4MTgsIDB4NDAsCi0weDAzLCAweGQxLCAweDM4LCAweDZhLCAweDAwLCAweGYwLCAweDBjLCAweGZjLCAweDJmLCAweGUwLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHgxYywgMHhmYywgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYSwgMHhiOCwgMHg2OCwKLTB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MzgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4ZDEsIDB4ZmIsIDB4YjgsIDB4NjgsCi0weDM5LCAweDZhLCAweGMwLCAweDQ2LCAweDg4LCAweDYwLCAweDM4LCAweDZhLCAweGMwLCAweDQ2LCAweGM1LCAweDYwLAotMHgxMCwgMHg0OCwgMHg0MSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgxMSwgMHhkMSwgMHhjMSwgMHg2OCwgMHgwMCwgMHgyOSwKLTB4MDksIDB4ZDEsIDB4NDEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDEsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsCi0weDgxLCAweDYwLCAweDQxLCAweDYwLCAweDAwLCAweGYwLCAweDE0LCAweGY4LCAweDBiLCAweGUwLCAweDM5LCAweDZhLAotMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHg0MSwgMHg2MCwgMHgwNiwgMHhlMCwgMHgzOSwgMHg2YSwgMHg4MiwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ZDEsIDB4NjAsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4MjAsIDB4MWMsCi0weGJkLCAweGU3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHg5MCwgMHhiNSwgMHgwYiwgMHg0YywgMHg2NywgMHg2OCwgMHgwMCwgMHgyZiwgMHgwZiwgMHhkMCwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGEsIDB4ZDEsIDB4NjAsIDB4NjgsIDB4YzAsIDB4NjgsCi0weGMwLCAweDQ2LCAweDYwLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGMzLCAweGZiLCAweDAwLCAweDIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZmUsIDB4MWQsIDB4NDksIDB4MzYsCi0weDMwLCAweDc4LCAweDQwLCAweDAwLCAweGMwLCAweDE5LCAweDg1LCAweDhiLCAweDMzLCAweDRjLCAweDM0LCAweDRiLAotMHg5ZCwgMHg0MiwgMHgzYywgMHhkMCwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MWQsIDB4ZjksIDB4MzEsIDB4NDgsIDB4ODAsIDB4NmEsIDB4NTgsIDB4MjEsIDB4NjksIDB4NDMsIDB4NDAsIDB4MTgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHgyYywgMHg0ZCwgMHgwMSwgMHgyOCwgMHgxYSwgMHhkMSwgMHgzMCwgMHg3OCwgMHhjMCwgMHgxOSwgMHhjMSwgMHgxZCwKLTB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsIDB4ODAsIDB4MTgsIDB4MDksIDB4N2IsIDB4ZWEsIDB4MWQsCi0weDIxLCAweDMyLCAweDAwLCAweGYwLCAweGUzLCAweGZjLCAweDMwLCAweDc4LCAweGMwLCAweDE5LCAweDIwLCAweDMwLAotMHgwMCwgMHg3OSwgMHgzOSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MjMsIDB4NDIsIDB4MDAsIDB4OGIsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZmEsIDB4ZDMsCi0weGEwLCAweDg4LCAweDQxLCAweDA3LCAweDBiLCAweGQxLCAweDIxLCAweDg5LCAweDA5LCAweDE4LCAweDc4LCAweDY4LAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg4MSwgMHg0MiwgMHgwNCwgMHhkOCwgMHg2MSwgMHg4OSwgMHhlMiwgMHg4OCwKLTB4ODksIDB4MTgsIDB4ODEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDAsIDB4MjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDIxLCAweDFjLCAweDE0LCAweDRhLCAweDAwLCAweDIwLCAweGZlLCAweGY3LCAweDVhLCAweGZmLAotMHgwMSwgMHgyMiwgMHg1MiwgMHgwNCwgMHg3OCwgMHg2OCwgMHgwMiwgMHg0MywKLTB4MDEsIDB4MjAsIDB4MzksIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NTIsIDB4ZmYsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsCi0weDc4LCAweDY4LCAweDAyLCAweDQzLCAweDAwLCAweDIwLCAweDM5LCAweDY4LCAweGZlLCAweGY3LCAweDRhLCAweGZmLAotMHgwYiwgMHg0OSwgMHgwYywgMHg0YSwgMHgwMSwgMHgyMCwgMHhmZSwgMHhmNywgMHg0NSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4ZTksIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4MDIsIDB4MjEsIDB4ZWEsIDB4MWQsIDB4ZjksIDB4MzIsCi0weDUxLCAweDYyLCAweGQ5LCAweGU3LCAweDI4LCAweGFjLCAweDIwLCAweDQwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwKLTB4MTQsIDB4YWMsIDB4MjAsIDB4NDAsIDB4MTQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsCi0weDAwLCAweDIxLCAweDRmLCAweDQ4LCAweGMyLCAweDFkLCAweGY5LCAweDMyLCAweDUxLCAweDYyLCAweDAxLCAweDIxLAotMHhjOSwgMHgwNCwgMHg0ZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgxOSwgMHgzMSwKLTB4NDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4NGEsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsCi0weDliLCAweGZiLCAweDg3LCAweGUwLCAweDQ1LCAweDQ4LCAweDQ3LCAweDY4LCAweGZjLCAweDFkLCAweDQ5LCAweDM0LAotMHgyMSwgMHg3OCwgMHg0OCwgMHgwMCwgMHhjMCwgMHgxOSwgMHg4MCwgMHg4YiwgMHg0NCwgMHg0YSwgMHg5MiwgMHg2YSwKLTB4NTgsIDB4MjMsIDB4NTgsIDB4NDMsIDB4MTUsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZWEsIDB4MWQsCi0weDA1LCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDA4LCAweDM1LCAweDJiLCAweDQzLCAweDFkLCAweDY4LAotMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHgyYiwgMHg0MCwgMHgxYiwgMHgwYSwgMHgzYywgMHg0ZCwgMHgwMSwgMHgyYiwKLTB4MjQsIDB4ZDEsIDB4YzgsIDB4MTksIDB4YzEsIDB4MWQsIDB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsCi0weDgwLCAweDE4LCAweDM5LCAweDRhLCAweDA5LCAweDdiLCAweDAwLCAweGYwLCAweGM1LCAweGZjLCAweDIwLCAweDc4LAotMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwgMHgwMCwgMHg3OSwgMHgzOSwgMHg2OCwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyMCwKLTB4ODIsIDB4MDAsIDB4NTMsIDB4MTksIDB4OWIsIDB4NmUsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzAsCi0weDAzLCAweDI4LCAweGY3LCAweGQzLCAweGNhLCAweDFkLCAweDA1LCAweDMyLCAweDY5LCAweDQ2LCAweDAwLCAweDIwLAotMHg0MywgMHgwMCwgMHhjZCwgMHg1YSwgMHhjMCwgMHg0NiwgMHhkNSwgMHg1MiwgMHgwMSwgMHgzMCwgMHgwNiwgMHgyOCwKLTB4ZjgsIDB4ZDMsIDB4MmQsIDB4ZTAsIDB4MDIsIDB4MmIsIDB4MmIsIDB4ZDEsIDB4MTEsIDB4MGEsIDB4MjksIDB4ZDMsCi0weDAwLCAweDIxLCAweDhhLCAweDAwLCAweDUzLCAweDE5LCAweDliLCAweDZlLCAweDZlLCAweDQ2LCAweGIzLCAweDUwLAotMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmNywgMHhkMywgMHgyMSwgMHg3OCwgMHg0OSwgMHgwMCwgMHhjOSwgMHgxOSwKLTB4MDksIDB4OGYsIDB4M2EsIDB4NjgsIDB4OGIsIDB4MTgsIDB4NmEsIDB4NDYsIDB4MDAsIDB4MjEsIDB4NGQsIDB4MDAsCi0weDU2LCAweDViLCAweGMwLCAweDQ2LCAweDVlLCAweDUzLCAweDAxLCAweDMxLCAweDA2LCAweDI5LCAweGY4LCAweGQzLAotMHgxOSwgMHg0OSwgMHg4YSwgMHg2YSwgMHgxMywgMHgxOCwgMHgxYSwgMHg2ZCwgMHgwMCwgMHg5ZCwgMHg1NSwgMHg0MCwKLTB4MTksIDB4NGEsIDB4ZDYsIDB4NjgsIDB4NzUsIDB4NDAsIDB4MWQsIDB4NjUsIDB4ODksIDB4NmEsIDB4MDgsIDB4MTgsCi0weDQxLCAweDZkLCAweDAyLCAweDliLCAweDU5LCAweDQwLCAweDkyLCAweDY5LCAweDUxLCAweDQwLCAweDQxLCAweDY1LAotMHgyMCwgMHg3OCwgMHg0MSwgMHgxZSwgMHgyMSwgMHg3MCwgMHgwMCwgMHgyOCwgMHgwZCwgMHhkMCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZjQsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MGQsIDB4ZDEsIDB4MDgsIDB4NGEsIDB4NTAsIDB4NjgsCi0weGMwLCAweDY4LCAweGMwLCAweDQ2LCAweDUwLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGE0LCAweGZhLAotMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3MywgMHhmYSwgMHgwMSwgMHhmMCwgMHhkZSwgMHhmYSwKLTB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDM4LCAweDA0LCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHg5NCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4NjksIDB4NGIsIDB4OWYsIDB4NmEsIDB4NTgsIDB4MjMsIDB4NWEsIDB4NDMsCi0weGJhLCAweDE4LCAweGMzLCAweDFkLCAweDQ5LCAweDMzLCAweDFmLCAweDc4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhkNCwgMHgxZCwgMHgwMSwgMHgzNCwgMHgyMywgMHg0MywgMHgxZCwgMHg2OCwgMHg0MywgMHg2OCwgMHgxYywgMHgwNCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4MDUsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weDFjLCAweDQzLCAweDQyLCAweDIzLCAweDFjLCAweDQzLCAweDBjLCAweDYwLCAweGZmLCAweDI2LCAweDM2LCAweDAyLAotMHgyZSwgMHg0MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5ZSwgMHg0MiwgMHg3NCwgMHhkMSwgMHg2YiwgMHgwYywKLTB4MmIsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksCi0weGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDdiLCAweDAwLCAweDFiLCAweDE4LCAweDFiLCAweDhmLCAweDRjLCAweDg5LAotMHgxYiwgMHgxYiwgMHhjYiwgMHg4MCwgMHgwMCwgMHgyNCwgMHhhNiwgMHgwMCwgMHgwMSwgMHg5NiwgMHhiMywgMHgxOCwKLTB4ZGUsIDB4MWQsIDB4MDksIDB4MzYsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weDAxLCAweDllLCAweDc2LCAweDE4LCAweDczLCAweDYxLCAweDAxLCAweDM0LCAweDA1LCAweDJjLCAweGYwLCAweGQzLAotMHgwMCwgMHgyNCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg5NiwgMHhiMywgMHgxOCwgMHhkZSwgMHgxZCwgMHgxZCwgMHgzNiwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDAsIDB4OWUsIDB4NzYsIDB4MTgsCi0weGIzLCAweDYyLCAweDAxLCAweDM0LCAweDA1LCAweDJjLCAweGYwLCAweGQzLCAweDA2LCAweGUwLCAweDAwLCAweDIzLAotMHg0YiwgMHg4MSwgMHhjYiwgMHg4MCwgMHg0MCwgMHgyMywgMHg5YywgMHg0MywgMHgwYywgMHg2MCwgMHgyMywgMHgxYywKLTB4NmIsIDB4MGUsIDB4NGEsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksIDB4MTAsIDB4MzMsCi0weDBiLCAweDgxLCAweDdiLCAweDAwLCAweDFiLCAweDE4LCAweDFiLCAweDhmLCAweDBmLCAweDg5LCAweGRiLCAweDFiLAotMHg4YiwgMHg4MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHgzNSwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDMxLCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDY0LCAweGFiLCAweDBlLAotMHgyMSwgMHhkMiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHgzZCwgMHgzNCwgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsCi0weDM5LCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDhiLCAweDY0LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhkNCwgMHgxZCwgMHg0NSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4Y2IsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4NDEsIDB4MzQsIDB4MjMsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDBiLCAweDY1LCAweDAwLCAweGUwLCAweDBmLCAweGUwLCAweGZiLCAweDFmLAotMHgwMSwgMHgzYiwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHgwNywgMHg2OCwgMHhmZiwgMHgxOCwgMHgwMywgMHg2OSwKLTB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MmMsIDB4ZTAsIDB4MDAsIDB4MjMsCi0weDBiLCAweDgxLCAweDhiLCAweDgwLCAweDI4LCAweGUwLCAweDAwLCAweDIzLCAweDhiLCAweDgwLCAweDBiLCAweDgxLAotMHhjMywgMHgxOSwgMHgyMCwgMHgzMywgMHgxYiwgMHg3YSwgMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHg3YiwgMHgwMCwKLTB4MTgsIDB4MTgsIDB4MDAsIDB4OGUsIDB4YzAsIDB4NDYsIDB4YzgsIDB4ODAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsCi0weGJiLCAweDE4LCAweGRjLCAweDFkLCAweDA5LCAweDM0LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHg3ZiwgMHgxOCwgMHg3YiwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwNSwgMHgyOCwgMHhmMiwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsIDB4YmIsIDB4MTgsIDB4ZGMsIDB4MWQsIDB4MWQsIDB4MzQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDdmLCAweDE4LCAweGJiLCAweDYyLCAweDAxLCAweDMwLAotMHgwNSwgMHgyOCwgMHhmMiwgMHhkMywgMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MWYsIDB4MWMsIDB4M2IsIDB4MGMsIDB4MTgsIDB4ZDIsCi0weDE3LCAweDZkLCAweDExLCAweDRiLCAweGMwLCAweDQ2LCAweGRmLCAweDYwLCAweDUyLCAweDZkLCAweGMwLCAweDQ2LAotMHgxYSwgMHg2MSwgMHhjNywgMHg2MCwgMHgxYSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg2MSwgMHhkOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4ZDgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4NDgsIDB4ODAsIDB4MTgsIDB4NjksCi0weGMwLCAweDQ2LCAweDg4LCAweDgwLCAweDE4LCAweDY5LCAweDAwLCAweDBjLCAweGM4LCAweDgwLCAweDgwLCAweGJjLAotMHg3MCwgMHg0NywgMHg0YSwgMHg4OCwgMHgxMiwgMHgwNCwgMHgwYiwgMHg4OCwgMHgxYSwgMHg0MywgMHhjMiwgMHg2MCwKLTB4OGEsIDB4ODgsIDB4YzksIDB4ODgsIDB4MDksIDB4MDQsIDB4MTEsIDB4NDMsIDB4MDEsIDB4NjEsIDB4ZjIsIDB4ZTcsCi0weDJjLCAweDA3LCAweDAwLCAweDgwLCAweGYxLCAweGI1LCAweDg4LCAweGIwLCAweDAwLCAweDIyLCAweDA4LCAweDk4LAotMHgwMCwgMHg2YSwgMHgwOCwgMHg5YiwgMHg5OSwgMHg2OCwgMHg0OSwgMHgwYSwgMHgwMiwgMHhkMywgMHgwMSwgMHgyNywKLTB4ZmYsIDB4MDMsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4OGIsIDB4MDAsIDB4MmIsIDB4MTksIDB4ZDAsCi0weGEzLCAweDQ5LCAweDg5LCAweDZhLCAweDFjLCAweDFjLCAweDU4LCAweDIzLCAweDYzLCAweDQzLCAweGM5LCAweDE4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1OCwgMHgzOSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDcsIDB4ZTAsCi0weDQxLCAweDhiLCAweDAwLCAweDI5LCAweDAyLCAweGQwLCAweDBjLCAweDIzLAotMHgxZiwgMHg0MywgMHgwMSwgMHhlMCwgMHgwNCwgMHgyMywgMHgxZiwgMHg0MywgMHg4MywgMHg4YSwgMHgwMCwgMHgyYiwKLTB4MTgsIDB4ZDAsIDB4OTUsIDB4NDksIDB4ODksIDB4NmEsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsIDB4NjMsIDB4NDMsCi0weGM5LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDU4LCAweDM5LCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMiwgMHgyOSwgMHgwMSwgMHhkMSwgMHgwZiwgMHg0MywgMHgwNywgMHhlMCwKLTB4YzEsIDB4OGEsIDB4MDAsIDB4MjksIDB4MDIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDIzLCAweDFmLCAweDQzLCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweDA3LCAweDkxLCAweDRiLCAweDg5LAotMHgwYywgMHg4OSwgMHgxYywgMHgxOSwgMHgyNCwgMHgwNCwgMHgyNCwgMHgwYywgMHgwOCwgMHg5ZCwgMHgyZCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4OTUsIDB4YzksIDB4ODgsIDB4N2QsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4MWEsIDB4MWMsCi0weGMzLCAweDFkLCAweDE5LCAweDMzLCAweDFhLCAweDcyLCAweDA3LCAweDlhLCAweDkyLCAweDg5LCAweGMwLCAweDQ2LAotMHgxYSwgMHg3MywgMHgwNywgMHg5YSwgMHgxMiwgMHg4OSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg4NiwgMHgwNCwgMHg4NywKLTB4ODIsIDB4OGEsIDB4MDEsIDB4M2EsIDB4ODIsIDB4ODMsIDB4MDEsIDB4MjIsIDB4MTksIDB4NzEsIDB4MDgsIDB4OWIsCi0weDFiLCAweDY4LCAweDViLCAweDE4LCAweDViLCAweDc4LCAweDliLCAweDAwLCAweDFiLCAweDA0LCAweDFiLCAweDBjLAotMHgwOCwgMHgzMywgMHg1OSwgMHgxOCwgMHhiYiwgMHgwOCwgMHg0NywgMHhkMywgMHgwNywgMHg5YiwgMHg1YiwgMHg4OSwKLTB4ODUsIDB4MTgsIDB4MDYsIDB4OTUsIDB4MjAsIDB4MzUsIDB4MmIsIDB4NzIsIDB4MDcsIDB4OWIsIDB4OWIsIDB4ODksCi0weGMwLCAweDQ2LCAweDJiLCAweDczLCAweDA3LCAweDliLCAweDFiLCAweDg5LCAweDJlLCAweDFjLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgwNSwgMHg5NSwgMHgyYiwgMHg4NiwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMCwgMHhjMywgMHg4YSwKLTB4MDAsIDB4ZTAsIDB4ODMsIDB4OGEsIDB4MDEsIDB4M2IsIDB4MDUsIDB4OWQsIDB4YzAsIDB4NDYsIDB4YWIsIDB4ODMsCi0weDMxLCAweDcxLCAweDY1LCAweDRiLCAweDlkLCAweDZhLCAweDA1LCAweDliLCAweDllLCAweDhiLCAweDU4LCAweDIzLAotMHg3MywgMHg0MywgMHhlYiwgMHgxOCwgMHhkZCwgMHgxZCwgMHgwMSwgMHgzNSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsIDB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDEsIDB4ZDEsIDB4MDgsIDB4MzEsCi0weDAwLCAweGUwLCAweDEwLCAweDMxLCAweDgxLCAweDIzLCAweDViLCAweDAyLCAweDFkLCAweDQwLCAweDlkLCAweDQyLAotMHgwMywgMHhkMSwgMHhlMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwNSwgMHg5YiwKLTB4YzAsIDB4NDYsIDB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsCi0weDliLCAweDdiLCAweDA2LCAweDlkLCAweDQwLCAweDM1LCAweDJiLCAweDcwLCAweDJiLCAweDc4LCAweDAyLCAweDMzLAotMHhlMywgMHgxYSwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwMSwgMHgzMiwgMHhiYiwgMHgwOCwgMHg5YiwgMHgwNywKLTB4NmQsIDB4ZDAsIDB4ODMsIDB4MTgsIDB4MjAsIDB4MzMsIDB4MDQsIDB4OTMsIDB4MTksIDB4NzIsIDB4MDEsIDB4OWIsCi0weDVkLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA3LAotMHgxYiwgMHgwZiwgMHg5YiwgMHgwMCwgMHgwNCwgMHg5ZSwgMHhjMCwgMHg0NiwgMHgzMywgMHg3MywgMHgwMCwgMHg5NSwKLTB4MmIsIDB4NzgsIDB4MWIsIDB4MDcsIDB4MWIsIDB4MGYsIDB4OWIsIDB4MDAsIDB4MDQsIDB4OWQsIDB4YzAsIDB4NDYsCi0weDJiLCAweDczLCAweDAwLCAweDlkLCAweGViLCAweDc4LCAweGFkLCAweDc4LCAweDFiLCAweDAyLCAweDFkLCAweDQzLAotMHgyYiwgMHgwMiwgMHgyZCwgMHgwYSwgMHgyZCwgMHgwNiwgMHgyZCwgMHgwZSwgMHgyYiwgMHg0MywgMHg1NSwgMHgwMCwKLTB4MmQsIDB4MTgsIDB4MmIsIDB4ODYsIDB4MDQsIDB4OWIsIDB4YzAsIDB4NDYsIDB4NTksIDB4NzIsIDB4MDQsIDB4OWIsCi0weDFiLCAweDdiLCAweDJlLCAweDFjLCAweDA0LCAweDlkLCAweGMwLCAweDQ2LCAweDZiLCAweDczLCAweDMzLCAweDhlLAotMHhjMCwgMHg0NiwgMHg3MywgMHg4NiwgMHgwMCwgMHg5ZCwgMHgyYiwgMHg3OCwgMHgxYiwgMHgwNywgMHgxYiwgMHgwZiwKLTB4OWIsIDB4MDAsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4NTksIDB4MTgsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NDAsCi0weDBlLCAweGQwLCAweDM0LCAweDg3LCAweDAzLCAweDhiLCAweDAxLCAweDNiLCAweGIzLCAweDgzLCAweDEzLCAweDFjLAotMHgxYiwgMHgxOCwgMHgyMCwgMHgzMywgMHgxOSwgMHg3MSwgMHgwMSwgMHg5YiwgMHg1YiwgMHgxOCwgMHg1YiwgMHg3OCwKLTB4OWIsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDgsIDB4MzEsIDB4MDEsIDB4MzIsIDB4M2IsIDB4MDksIDB4MzcsIDB4ZDMsCi0weDAwLCAweDJkLCAweDAxLCAweGQwLCAweDQzLCAweDhiLCAweDAwLCAweGUwLCAweDAzLCAweDhiLCAweDU1LCAweDAwLAotMHgyZCwgMHgxOCwgMHgwMSwgMHgzYiwgMHhhYiwgMHg4MywgMHg4MywgMHgxOCwgMHgwMywgMHg5MywgMHgyMCwgMHgzMywKLTB4MTksIDB4NzEsIDB4MjAsIDB4NGIsIDB4OWQsIDB4NmEsIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MDIsIDB4OTMsCi0weDllLCAweDhiLCAweDU4LCAweDIzLCAweDczLCAweDQzLCAweGViLCAweDE4LCAweGRkLCAweDFkLCAweDAxLCAweDM1LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwKLTB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4MTUsIDB4ZTAsCi0weDEwLCAweDMxLCAweDgxLCAweDIzLCAweDViLCAweDAyLCAweDFkLCAweDQwLCAweDlkLCAweDQyLCAweDAzLCAweGQxLAotMHhlMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHgwMiwgMHg5YiwgMHhjMCwgMHg0NiwKLTB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsIDB4OWIsIDB4N2IsCi0weDAzLCAweDljLCAweDQwLCAweDM0LCAweDIzLCAweDcwLCAweDAxLCAweDMyLCAweDA3LCAweDliLCAweGMwLCAweDQ2LAotMHhkOSwgMHg4MCwgMHg1MSwgMHgxZSwgMHhjMywgMHgxZCwgMHg0OSwgMHgzMywgMHgxOSwgMHg3MCwgMHgwNywgMHg2MSwKLTB4MDQsIDB4MmEsIDB4MDYsIDB4ZDIsIDB4MDYsIDB4NDksIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4OTksIDB4ODMsCi0weDAxLCAweDMyLCAweDA0LCAweDJhLCAweGY5LCAweGQzLCAweDA5LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NDgsIDB4MDEsIDB4NjgsCi0weDAxLCAweDMxLCAweDAxLCAweDYwLCAweDM4LCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDc4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5MCwgMHhiOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwZCwgMHg0OCwKLTB4NDEsIDB4NjgsIDB4YzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDRmLCAweGY4LCAweGI4LCAweDY4LCAweDQwLCAweDA5LCAweDA2LCAweGQzLCAweDEwLCAweDIzLCAweDAyLCAweDk4LAotMHgxOCwgMHg0MywgMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMiwgMHhmMCwgMHhlMSwgMHhmZiwgMHg2OCwgMHg0NiwKLTB4MDIsIDB4ZjAsIDB4OWEsIDB4ZmUsIDB4MGMsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDhjLCAweGIwLAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OCwgMHgwNSwgMHg0YiwgMHgxOSwgMHg0MywKLTB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4MmYsIDB4ZjgsIDB4NjgsIDB4NDYsIDB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmUsCi0weDBjLCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAotMHgwMiwgMHg2YSwgMHgwMywgMHg2OCwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MCwgMHg0MCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NTAsIDB4NjAsIDB4NDAsIDB4MzIsIDB4NDgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTAsIDB4ODAsIDB4YzgsIDB4NjgsCi0weGMwLCAweDQ2LCAweGQwLCAweDgwLCAweDQ4LCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDgxLCAweDg4LCAweDY4LAotMHhjMCwgMHg0NiwgMHg1MCwgMHg4MSwgMHgwOCwgMHg3ZSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg3MywgMHgwOCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4OTAsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDQsIDB4NDksIDB4MDgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDAwLCAweGQxLCAweDcwLCAweDQ3LCAweGMyLCAweDY4LCAweGMwLCAweDQ2LCAweDBhLCAweDYwLCAweGZhLCAweGU3LAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0OSwgMHgwYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhjMiwgMHg2MCwKLTB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsCi0weDEyLCAweDRmLCAweDdjLCAweDdmLCAweDAxLCAweDM0LCAweDdjLCAweDc3LCAweDAzLCAweDIzLCAweGZjLCAweDFkLAotMHgxOSwgMHgzNCwgMHgzOCwgMHg2MiwgMHg3OSwgMHg2MiwgMHgyMywgMHg3MiwgMHgwZSwgMHg0YywgMHgyNSwgMHg2OCwKLTB4NmIsIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MjMsIDB4NjgsIDB4MWIsIDB4MGMsIDB4MTAsIDB4ZDEsIDB4MjQsIDB4NjgsCi0weGEzLCAweDBhLCAweDBkLCAweGQzLCAweDAxLCAweDIzLCAweDBhLCAweDRmLCAweGMwLCAweDQ2LCAweGZiLCAweDYyLAotMHgwOSwgMHg0ZiwgMHgwYSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhkZiwgMHg2MCwgMHg5OSwgMHg2MCwgMHg1OCwgMHg2MCwKLTB4MTAsIDB4MWMsIDB4MTgsIDB4NjAsIDB4MDEsIDB4MzIsIDB4ZmIsIDB4ZTcsIDB4MTAsIDB4MWMsIDB4MzgsIDB4NjQsCi0weDAxLCAweDMyLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMiwgMHg4MSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4ZjAsIDB4YjUsIDB4NDcsIDB4NGYsIDB4MzgsIDB4NjgsIDB4NDcsIDB4NGUsIDB4NDcsIDB4NGQsIDB4MDcsIDB4MjMsCi0weDViLCAweDAyLCAweGVjLCAweDE4LCAweDAwLCAweDI4LCAweDFkLCAweGQxLCAweDIwLCAweDZiLCAweDAxLCAweDMwLAotMHgyMCwgMHg2MywgMHg0NCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg0MywgMHg0OCwgMHg0MSwgMHg2OSwKLTB4MDAsIDB4MjksIDB4MTMsIDB4ZDAsIDB4YzEsIDB4MWQsIDB4NjksIDB4MzEsIDB4MDksIDB4N2IsIDB4MDAsIDB4MjksCi0weDBlLCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAxLCAweDZkLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHhjMCwgMHg0NiwgMHg4MSwgMHg2MSwgMHhjMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHgwNCwgMHhkMCwgMHhmMSwgMHg2YywKLTB4MDEsIDB4MzEsIDB4ZjEsIDB4NjQsIDB4MDEsIDB4ZjAsIDB4NTAsIDB4ZmUsCi0weDM4LCAweDY4LCAweDAxLCAweDI4LCAweDE3LCAweGQxLCAweDM3LCAweDQ4LCAweDQxLCAweDY5LCAweDAwLCAweDI5LAotMHgxMywgMHhkMCwgMHhjMSwgMHgxZCwgMHg2OSwgMHgzMSwgMHgwOSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwZSwgMHhkMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDEsIDB4NmQsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4YzAsIDB4NDYsCi0weDgxLCAweDYxLCAweGMyLCAweDY5LCAweDkxLCAweDQyLCAweDA0LCAweGQwLCAweGYxLCAweDZjLCAweDAxLCAweDMxLAotMHhmMSwgMHg2NCwgMHgwMSwgMHhmMCwgMHgzNSwgMHhmZSwgMHgzOCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgyZiwgMHhkMSwKLTB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZWUsIDB4MTgsIDB4NzAsIDB4N2IsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsCi0weDAwLCAweDIwLCAweDcwLCAweDczLCAweDAwLCAweGYwLCAweDRhLCAweGZkLCAweDMwLCAweDdiLCAweDAwLCAweDI4LAotMHgwMiwgMHhkMCwgMHg3OCwgMHg2OCwgMHgwMiwgMHhmMCwgMHhhYSwgMHhmZiwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwKLTB4ZTgsIDB4MTgsIDB4YzAsIDB4OGIsIDB4MDQsIDB4MjYsIDB4MDYsIDB4NDAsIDB4ZTAsIDB4NmEsIDB4YjAsIDB4NDIsCi0weDE0LCAweGQwLCAweGY4LCAweDY4LCAweDAxLCAweDMwLCAweGY4LCAweDYwLCAweDE5LCAweDI4LCAweDExLCAweGQzLAotMHgxYiwgMHg0OCwgMHgwMSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgwZCwgMHhkMSwgMHhmZiwgMHgzMCwgMHg0MSwgMHgzMCwKLTB4NDAsIDB4NzgsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4YjgsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmYsCi0weDAwLCAweDIwLCAweGY4LCAweDYwLCAweGU2LCAweDYyLCAweDAxLCAweGUwLCAweDAwLCAweDIwLCAweGY4LCAweDYwLAotMHgzOCwgMHg2OCwgMHgwMywgMHgyOCwgMHgwYiwgMHhkMSwgMHhlYywgMHgxZCwgMHg3OSwgMHgzNCwgMHhlMCwgMHg2YiwKLTB4ODAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MDcsIDB4ZmMsIDB4MDIsIDB4MjMsCi0weGUwLCAweDZiLCAweDk4LCAweDQzLCAweGUwLCAweDYzLCAweDM4LCAweDY4LCAweDAxLCAweDMwLCAweDM4LCAweDYwLAotMHgwMywgMHgyOCwgMHgwMSwgMHhkOSwgMHgwMCwgMHgyMCwgMHgzOCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLAotMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNCwgMHgxZCwgMHg0OCwKLTB4ODQsIDB4OGEsIDB4MWQsIDB4NGEsIDB4MTMsIDB4OGEsIDB4YzEsIDB4MWQsIDB4MDksIDB4MzEsIDB4MDEsIDB4MjcsCi0weDljLCAweDQyLCAweDAzLCAweGQxLCAweDQzLCAweDhhLCAweDU0LCAweDhhLCAweGEzLCAweDQyLCAweDEwLCAweGQwLAotMHgwYiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgwZCwgMHhkMCwgMHg0YiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgwYSwgMHhkMCwKLTB4NDQsIDB4OGIsIDB4OTMsIDB4OGEsIDB4OWMsIDB4NDIsIDB4MDQsIDB4ZGMsIDB4MTMsIDB4NGIsIDB4YzAsIDB4NDYsCi0weDVmLCAweDYwLCAweDk3LCAweDgyLCAweDAxLCAweGUwLCAweDAxLCAweDMzLCAweDkzLCAweDgyLCAweGMzLCAweDhiLAotMHg1YywgMHgxYywgMHhjNCwgMHg4MywgMHg4NCwgMHg4YiwgMHhhMywgMHg0MiwgMHgwZSwgMHhkYiwgMHg4NCwgMHg4YSwKLTB4MDUsIDB4OGIsIDB4MDAsIDB4MjMsIDB4YWMsIDB4NDIsIDB4MDUsIDB4ZGEsIDB4NDQsIDB4OGEsIDB4YzUsIDB4OGEsCi0weGFjLCAweDQyLCAweDAxLCAweGRhLCAweDRiLCAweDcwLCAweDAwLCAweGUwLCAweDRmLCAweDcwLCAweDQzLCAweDgyLAotMHg4MywgMHg4MiwgMHhjMywgMHg4MywgMHg0MSwgMHg4YSwgMHhjMCwgMHg0NiwgMHg1MSwgMHg4MiwgMHg4MCwgMHg4YSwKLTB4YzAsIDB4NDYsIDB4MTAsIDB4ODIsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDNjLCAweDA0LCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAweGY3LCAweGI1LCAweDkxLCAweGIwLAotMHg2YiwgMHg0NiwgMHg4NCwgMHgxZSwgMHgxMiwgMHg5OSwgMHgxNCwgMHgyOSwgMHgxYSwgMHhkOSwgMHgwMCwgMHgyMCwKLTB4ODEsIDB4MDAsIDB4NjcsIDB4NTgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDEwLCAweDI4LCAweGY2LCAweGQzLCAweDAwLCAweDIxLCAweDA1LCAweDIwLCAweDg3LCAweDAwLAotMHhkNiwgMHg1OSwgMHg0ZiwgMHgxYywgMHgzZCwgMHgwNiwgMHgyZCwgMHgwZSwgMHgwZiwgMHgxYywgMHhiZiwgMHgwMCwKLTB4ZGUsIDB4NTEsIDB4MjksIDB4MWMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsCi0weGYxLCAweGQzLCAweDA5LCAweGUwLCAweDAwLCAweDIwLCAweDgxLCAweDAwLCAweDYzLCAweDU4LCAweGMwLCAweDQ2LAotMHg1MywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNiwgMHgyOCwgMHhmNiwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4NzIsIDB4NjAsIDB4NzIsIDB4YTAsIDB4NzIsIDB4MjAsIDB4NzMsCi0weDYwLCAweDczLCAweDEyLCAweDk5LCAweDE0LCAweDI5LCAweDM3LCAweGQ5LCAweDY5LCAweDQ2LCAweDhlLCAweDFjLAotMHg5MSwgMHg3OCwgMHgwOSwgMHgwNywgMHgwOSwgMHgwZiwgMHg4OSwgMHgwMCwgMHgxNCwgMHgzOSwgMHgwZCwgMHgwNiwKLTB4MmQsIDB4MTYsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmQsIDB4MWIsIDB4ZGQsIDB4ZjAsIDB4MTksIDB4MTAsIDB4YTksCi0weDAwLCAweGYwLCAweDNkLCAweGY4LCAweDAwLCAweDI4LCAweDBlLCAweGQwLAotMHgwMCwgMHgyMCwgMHgxMCwgMHhhOSwgMHgwOSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwOSwgMHhkZCwgMHgwMCwgMHgyMiwKLTB4MzksIDB4MTgsIDB4NzIsIDB4NTQsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YTksCi0weDA5LCAweDc4LCAweDg4LCAweDQyLCAweGY2LCAweGRiLCAweDEwLCAweGE4LCAweDAwLCAweDc4LCAweDM4LCAweDE4LAotMHgwNywgMHgwNiwgMHgzZiwgMHgwZSwgMHhhZiwgMHg0MiwgMHhlMywgMHhkYiwgMHg2OCwgMHg0NiwgMHhlMiwgMHgxZCwKLTB4MGQsIDB4MzIsIDB4MDAsIDB4MjEsIDB4YWIsIDB4MDgsIDB4NWYsIDB4MWMsIDB4MDgsIDB4ZDAsIDB4OGIsIDB4MDAsCi0weGM0LCAweDU4LCAweGMwLCAweDQ2LCAweGQ0LCAweDUwLCAweDAxLCAweDMxLCAweDA5LCAweDA2LCAweDA5LCAweDBlLAotMHg4ZiwgMHg0MiwgMHhmNiwgMHhkOCwgMHgxNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4OTAsIDB4YjQsIDB4ODcsIDB4MWUsIDB4MDAsIDB4MjAsIDB4ODksIDB4MDgsIDB4NGIsIDB4MWMsIDB4MDgsIDB4ZDAsCi0weDgxLCAweDAwLCAweDU0LCAweDU4LCAweGMwLCAweDQ2LCAweDdjLCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHg4MywgMHg0MiwgMHhmNiwgMHhkOCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwKLTB4MDIsIDB4NzgsIDB4ZDIsIDB4MDYsIDB4ZDIsIDB4MGUsIDB4MDAsIDB4MjMsIDB4MDEsIDB4MjcsIDB4MDEsIDB4MmEsCi0weDAxLCAweGRjLCAweDBmLCAweDcwLCAweDExLCAweGUwLCAweDQwLCAweDc4LCAweGMwLCAweDQ2LCAweDA4LCAweDcwLAotMHgxNCwgMHgyYSwgMHgwNCwgMHhkMSwgMHgwOCwgMHg0OCwgMHgwMSwgMHg3YSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg3MiwKLTB4MDcsIDB4ZTAsIDB4MDIsIDB4MmEsIDB4MDUsIDB4ZDAsIDB4MDUsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4MDYsIDB4MmEsCi0weDAxLCAweGQwLCAweDE1LCAweDJhLCAweDAyLCAweGQxLCAweDE4LCAweDFjLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHgzOCwgMHgxYywgMHhmYiwgMHhlNywgMHhlMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHgwZiwgMHg0OCwKLTB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksIDB4NDEsIDB4NjEsCi0weGQxLCAweDYwLCAweDAwLCAweDIxLCAweGExLCAweDIyLCAweDUyLCAweDAzLCAweDkxLCAweDYxLCAweDE5LCAweDFjLAotMHgwOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4ODAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NjEsIDB4ZmUsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDA0LCAweDQ4LCAweDQxLCAweDg4LCAweDAxLCAweDMxLCAweDQxLCAweDgwLCAweGY4LCAweGU3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhlMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODYsIDB4YjAsIDB4OTUsIDB4NGEsIDB4ZDAsIDB4NjgsCi0weGQ3LCAweDFkLCAweDc5LCAweDM3LCAweDAxLCAweDI4LCAweDA5LCAweGQxLCAweDM4LCAweDg5LCAweDAwLCAweDI4LAotMHgwNiwgMHhkMSwgMHhkMCwgMHg2ZiwgMHgwMiwgMHgyMywgMHgwMSwgMHg2OCwgMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MTQsIDB4MjAsIDB4MzgsIDB4ODEsIDB4OGUsIDB4NGMsIDB4NjEsIDB4NmEsIDB4OGUsIDB4NDgsIDB4YzMsIDB4NmIsCi0weDU5LCAweDE4LCAweGMxLCAweDYzLCAweGEwLCAweDZhLCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGQ0LCAweDE4LAotMHhhMCwgMHg2MiwgMHgyMSwgMHg2YSwgMHgwOSwgMHgwMywgMHgwOSwgMHgwYiwgMHg4MSwgMHg0MiwgMHgwNSwgMHhkMSwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsIDB4ODcsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTAsCi0weGJiLCAweDhhLCAweDU4LCAweDFjLCAweGI4LCAweDgyLCAweDNkLCAweDhiLCAweDAxLCAweDIwLCAweDAwLCAweDIxLAotMHhhYiwgMHg0MiwgMHgwNCwgMHhkYiwgMHhkMywgMHgxZCwgMHg4OSwgMHgzMywgMHg1OCwgMHg3MCwgMHhiOSwgMHg4MiwKLTB4ZjksIDB4ODMsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MDUsIDB4OTMsIDB4NWIsIDB4NjksCi0weDBmLCAweDJiLCAweDczLCAweGQyLCAweDAwLCAweDIxLCAweDdjLCAweDRmLCAweGMwLCAweDQ2LCAweDM5LCAweDYxLAotMHgyMSwgMHg2YSwgMHg4YSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg0YiwgMHg2OCwgMHgxZSwgMHgwYywKLTB4MzYsIDB4MDQsIDB4ZmQsIDB4MWYsIDB4MDksIDB4M2QsIDB4MDAsIDB4MmUsIDB4MDUsIDB4ZDEsIDB4M2IsIDB4MmEsCi0weDAzLCAweGQzLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDlhLCAweDQyLCAweDAxLCAweGQ5LCAweGE4LCAweDczLAotMHhjOCwgMHhlMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsIDB4MDMsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDc5LCAweDgyLCAweDQ5LCAweDA5LCAweDA1LCAweDMxLCAweDA5LCAweDA2LCAweDA5LCAweDBlLAotMHg2OSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5NiwgMHg2OSwgMHg0OCwgMHg0MywgMHg2YSwgMHhjMCwgMHg0NiwKLTB4MDEsIDB4OTMsIDB4ODMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTMsIDB4YzIsIDB4MWQsIDB4MTEsIDB4MzIsCi0weDgwLCAweDY5LCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDkyLCAweDY4LCAweGIzLCAweDA3LCAweDFhLCAweDQzLAotMHgxMiwgMHg2OCwgMHg5MCwgMHg0MiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MGQsIDB4ZTAsIDB4OTAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4OWIsIDB4MTgsIDB4MWEsIDB4MDEsIDB4OWIsCi0weGQyLCAweDFhLCAweDgyLCAweDE4LCAweDAwLCAweGUwLCAweDEyLCAweDFhLCAweDAxLCAweDIwLCAweDA5LCAweDAxLAotMHg5MSwgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyOCwgMHg2NSwgMHhkMSwgMHg1MSwgMHg0OSwKLTB4MjAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NjIsIDB4ZDAsIDB4MDUsIDB4OTksIDB4NDgsIDB4NjksIDB4MDEsIDB4MzAsCi0weDQ4LCAweDYxLCAweDAyLCAweDIwLCAweDIxLCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHhhNywgMHhmYywgMHg3OCwgMHg2MywgMHhiZSwgMHg2MCwgMHg0OSwgMHg0OSwgMHgyMiwgMHg2YSwgMHhhMywgMHg2YiwKLTB4ZDMsIDB4MTgsIDB4NjYsIDB4NmIsIDB4YjMsIDB4NDIsIDB4MDAsIDB4ZDksIDB4MjIsIDB4NmIsIDB4YzAsIDB4NDYsCi0weGJhLCAweDYyLCAweGJhLCAweDZhLCAweDBjLCAweDMyLCAweGZhLCAweDYyLCAweDAwLCAweDIyLCAweGZhLCAweDYxLAotMHgwMywgMHhhYSwgMHg1MiwgMHg4OCwgMHhkMiwgMHgwOSwgMHgwMywgMHhkMywgMHgwMSwgMHgyMiwgMHgwMCwgMHhlMCwKLTB4N2IsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjIsIDB4N2EsIDB4NjAsIDB4N2EsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDAyLCAweDYwLCAweDc4LCAweDhhLCAweDQxLCAweDRlLCAweDYwLCAweDI4LCAweDA0LCAweGRjLCAweGIwLCAweDgzLAotMHg3OCwgMHg4YSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MywgMHgwOCwgMHhlMCwgMHg2MCwgMHgyMCwgMHhiMCwgMHg4MywKLTB4NzksIDB4OGEsIDB4ZjgsIDB4NmEsIDB4NDIsIDB4MTgsIDB4NjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDgsCi0weGYxLCAweDgzLCAweDAwLCAweDIyLCAweDNhLCAweDYzLCAweDA1LCAweGUwLCAweDIxLCAweDZiLCAweGMwLCAweDQ2LAotMHgzOSwgMHg2MywgMHg2MSwgMHg2YiwgMHgwOCwgMHgxYSwgMHhmMCwgMHg4MywgMHgyZCwgMHg0OSwgMHg3OCwgMHg2YiwKLTB4NDIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YmEsIDB4NjAsIDB4ODIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NjAsCi0weDAyLCAweDY5LCAweGMwLCAweDQ2LCAweDdhLCAweDYxLCAweDQwLCAweDY5LCAweGMwLCAweDQ2LCAweGI4LCAweDYxLAotMHgyZSwgMHg0YiwgMHhjOCwgMHgxOCwgMHgwNCwgMHg5MCwgMHgwMCwgMHhmMCwgMHgzNywgMHhmOSwgMHgwNCwgMHg5OCwKLTB4MDAsIDB4ZjAsIDB4ODgsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4ZjYsIDB4ZmEsIDB4NzgsIDB4OGEsIDB4ZjEsIDB4OGIsCi0weDg4LCAweDQyLCAweDA0LCAweGQxLCAweGY5LCAweDZhLCAweDA4LCAweDE4LCAweDA0LCAweGUwLCAweDM4LCAweGUwLAotMHgzMiwgMHhlMCwgMHgzYSwgMHg2YiwgMHgxMCwgMHgxOCwgMHg0MCwgMHgxYSwgMHg4MSwgMHgwNywgMHgwMiwgMHhkMCwKLTB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDQsIDB4MzAsIDB4NjEsIDB4NmIsIDB4MDksIDB4MWEsIDB4YTIsIDB4NmIsCi0weDkxLCAweDQyLCAweDAwLCAweGQyLCAweDIwLCAweDZiLCAweGMwLCAweDQ2LCAweDIwLCAweDYyLCAweGU4LCAweDdiLAotMHgwMCwgMHgyOCwgMHgwOCwgMHhkMCwgMHgwMCwgMHgyMiwgMHhlYSwgMHg3MywgMHgwNSwgMHg5OSwgMHg0OCwgMHg2OSwKLTB4MDEsIDB4MzgsIDB4NDgsIDB4NjEsIDB4NzgsIDB4NmIsIDB4MDAsIDB4ZjAsIDB4NzMsIDB4ZmEsIDB4MTgsIDB4NDgsCi0weDgwLCAweDZhLCAweDgwLCAweDA2LCAweDgwLCAweDBlLCAweDAxLCAweDI4LCAweDBhLCAweGQxLCAweDIwLCAweDZhLAotMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHgwYiwgMHg0YywgMHhhMSwgMHg2YSwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMCwKLTB4MDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsCi0weDA4LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDA2LCAweGUwLCAweGUwLCAweDY4LCAweDAwLCAweDI4LAotMHgwMSwgMHhkMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHhmYSwgMHgwMSwgMHgyMCwgMHhhOCwgMHg3MywgMHhlZCwgMHhlNywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDFhLCAweDAwLCAweDgwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYSwgMHgwMCwgMHg4MCwgMHhjNCwgMHgwYiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NzgsIDB4NmEsIDB4NDAsIDB4ODksCi0weGZmLCAweDIxLCAweDAxLCAweDMxLCAweDAxLCAweDQwLCAweDEwLCAweDQ4LCAweDAyLCAweGQxLCAweDgxLCAweDZjLAotMHgwMSwgMHgzMSwgMHg4MSwgMHg2NCwgMHg3OSwgMHg2YSwgMHg0OSwgMHg4OSwgMHg0OSwgMHgwYiwgMHgwMiwgMHhkMiwKLTB4NDEsIDB4NmMsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjQsIDB4MGIsIDB4NDgsIDB4NDEsIDB4NmEsIDB4MDEsIDB4MzEsCi0weDQxLCAweDYyLCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDQ4LCAweDYyLCAweDM4LCAweDZiLAotMHgwMCwgMHhmMCwgMHhmOCwgMHhmYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiMywgMHhmOCwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NzMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDE4LCAweDFhLCAweDAwLCAweDgwLAotMHhmOCwgMHhiNSwgMHgwNywgMHgxYywgMHgwMCwgMHgyMiwgMHhmOSwgMHgxZCwgMHg2MSwgMHgzMSwgMHgwZCwgMHgxYywKLTB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4NDAsIDB4ODksCi0weDAzLCAweDBjLCAweDAxLCAweGQyLCAweDQwLCAweDBhLCAweDAzLCAweGQyLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhjMSwgMHhmZiwgMHg2NywgMHhlMCwgMHgzNSwgMHg0OCwgMHhjMCwgMHg2YiwgMHgwMCwgMHgwOSwgMHgxZiwgMHhkMywKLTB4MDgsIDB4NzgsIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NDMsIDB4MDAsIDB4Y2MsIDB4NWEsCi0weDMxLCAweDRlLCAweDllLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweDFiLCAweDg4LAotMHg5YywgMHg0MiwgMHgwZSwgMHhkMCwgMHhiOCwgMHg2OSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MSwKLTB4ZjgsIDB4NjgsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDI3LCAweGY5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDc0LCAweGY4LCAweDQ2LCAweGUwLCAweDAxLCAweDMwLAotMHgwMywgMHgyOCwgMHhlMywgMHhkYiwgMHgwMiwgMHgyMCwgMHg0MywgMHgwMCwgMHg1YywgMHgxOCwgMHhlNCwgMHg4OCwKLTB4MjIsIDB4NGUsIDB4OWUsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4MWIsIDB4ODgsCi0weDljLCAweDQyLCAweDAzLCAweGQxLCAweDAxLCAweDIzLCAweDAxLCAweDM4LCAweGQ4LCAweDQyLCAweGYwLCAweGRjLAotMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwgMHhjNCwgMHhkMCwgMHgxYiwgMHg0ZSwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4ZjAsIDB4MTgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MjQsIDB4ZDAsIDB4N2QsIDB4NjMsIDB4MDAsIDB4OTgsCi0weDQwLCAweDg5LCAweDAwLCAweDBjLCAweDFmLCAweGQyLCAweDAwLCAweDI0LCAweDJkLCAweDIzLCAweDliLCAweDAxLAotMHhmMCwgMHgxOCwgMHhjMCwgMHg2YiwgMHgzNSwgMHgxYywgMHgwMCwgMHgyOCwgMHgxNywgMHhkMCwgMHhmZSwgMHgxZCwKLTB4MmQsIDB4MzYsIDB4YTIsIDB4MDAsIDB4NTIsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsCi0weGQyLCAweDZiLCAweDM4LCAweDFjLCAweDMxLCAweDFjLCAweDAyLCAweGYwLCAweDdiLCAweGZjLCAweDAxLCAweDI4LAotMHgwZSwgMHhkMCwgMHgwMSwgMHgzNCwgMHhhMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwKLTB4YzAsIDB4MTgsIDB4YzAsIDB4NmIsIDB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MmEsCi0weDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA4LCAweGY4LCAweGY4LCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NjksIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjEsCi0weGY4LCAweDY4LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDc4LCAweDZhLCAweDQwLCAweDg5LAotMHgwMSwgMHgwYywgMHgwZSwgMHhkMiwgMHg0MCwgMHgwYSwgMHgwYywgMHhkMywgMHgzOCwgMHg2OCwgMHg0MCwgMHgwOCwKLTB4MDIsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGMsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGJiLCAweGY4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA4LCAweGY4LCAweDAyLCAweGUwLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgzMCwgMHhmZiwgMHgwMSwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDEsIDB4MjEsIDB4MDAsIDB4NmIsIDB4NDAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weGIwLCAweGI0LCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweDA5LCAweDhiLCAweDg5LCAweDA4LCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg4NCwgMHg2YSwgMHhjMiwgMHgxZCwgMHg2MSwgMHgzMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyOSwKLTB4MGMsIDB4ZGQsIDB4ODcsIDB4MDAsIDB4M2QsIDB4MTksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweGQzLCAweDUxLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHg4OCwgMHg0MiwgMHhmMiwgMHhkYiwgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHhhMCwgMHhiMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsIDB4MjEsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDBiLCAweDkxLCAweGMxLCAweDFkLCAweDUzLCAweDMxLCAweDE5LCAweDQzLCAweDFmLCAweDkxLAotMHgwOSwgMHg2OCwgMHgwMSwgMHhhZiwgMHhmYSwgMHgxZCwgMHgzOSwgMHgzMiwgMHgxZSwgMHg5MiwgMHgxNywgMHhhYiwKLTB4NTksIDB4ODAsIDB4M2EsIDB4NDksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGEsIDB4NmEsIDB4MTMsIDB4NDMsCi0weGNjLCAweDFkLCAweDExLCAweDM0LCAweDg5LCAweDY5LCAweDA5LCAweDAzLCAweDA5LCAweDBiLCAweDIyLCAweDY5LAotMHhlNSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxZCwgMHg5NSwgMHhmYywgMHgxZCwgMHgzOSwgMHgzNCwgMHg2NCwgMHg4YiwKLTB4NjQsIDB4MDksIDB4MDUsIDB4MzQsIDB4MjQsIDB4MDYsIDB4MjQsIDB4MGUsIDB4MWMsIDB4OTQsIDB4NTYsIDB4MWEsCi0weDFiLCAweDk2LCAweDFjLCAweDljLCAweDJlLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDAxLCAweDI2LAotMHgxZCwgMHg5ZCwgMHgxYSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwMSwgMHhkMSwgMHgzMiwgMHgxYywgMHgwYiwgMHhlMCwKLTB4OTEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4NTIsIDB4MWIsIDB4MWIsIDB4OWUsIDB4YjUsIDB4MTgsIDB4MDAsIDB4ZTAsCi0weDU1LCAweDFhLCAweDAxLCAweDIyLCAweDI0LCAweDAxLCAweGFjLCAweDQyLAotMHgwMCwgMHhkMywgMHgwMCwgMHgyMiwgMHgwMSwgMHgyYSwgMHhlNiwgMHhkMSwgMHg5MSwgMHgwNywgMHgwMSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4OTMsIDB4MDcsIDB4MDEsIDB4MWQsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDc5LCAweDYwLCAweGMxLCAweDFkLCAweDAxLCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MCwgMHgxZiwgMHg5OSwgMHgwOSwgMHg2OCwgMHgxZSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4NTEsIDB4ODMsIDB4YzEsIDB4MWQsIDB4MWQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDM4LCAweDYzLCAweDc5LCAweDYyLCAweGMxLCAweDFkLCAweDExLCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MSwgMHhjMSwgMHgxZCwgMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YzEsIDB4MWQsIDB4MTcsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDgzLCAweDBlLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LAotMHhjMCwgMHg0NiwgMHhmOCwgMHg4MSwgMHgzOCwgMHg2OCwgMHg0MCwgMHgwOCwgMHgwMiwgMHhkMywgMHgzOCwgMHgxYywKLTB4MDIsIDB4ZjAsIDB4NWMsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweDU4LCAweGZmLCAweDIwLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHhmOCwgMHhiNSwgMHgwNywgMHgxYywKLTB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4NDEsIDB4OGIsIDB4MzksIDB4NGEsIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZGQsCi0weDQyLCAweDgzLCAweDQyLCAweDhiLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDAxLCAweDIwLCAweDNhLCAweDFkLAotMHgwNiwgMHhjYSwgMHhiYiwgMHg2YSwgMHgwMiwgMHhmMCwgMHgwZSwgMHhmZiwgMHgzMywgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MzMsIDB4NGUsIDB4MzAsIDB4NmEsIDB4MzMsIDB4NGMsIDB4ZTEsIDB4NmQsIDB4NDEsIDB4MTgsCi0weDM4LCAweDZiLCAweGMzLCAweDFkLCAweDA1LCAweDMzLCAweDAxLCAweDIwLCAweDcyLCAweDZhLCAweDAyLCAweGYwLAotMHhmYiwgMHhmZSwgMHhlMCwgMHg2ZCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgyNSwgMHhiMSwgMHg2YSwgMHg4MSwgMHg0MiwKLTB4MDEsIDB4ZDgsIDB4ZTUsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4ZTAsIDB4NjUsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsCi0weDIwLCAweDFjLCAweGUxLCAweDZkLCAweGU0LCAweDE4LCAweDIyLCAweDY4LCAweDkyLCAweDAwLCAweDI3LCAweDRiLAotMHhjMCwgMHg0NiwgMHg5OSwgMHg1MCwgMHgyNiwgMHg0OCwgMHhjMSwgMHg2YiwgMHg0YSwgMHgwOCwgMHgwNSwgMHhkMywKLTB4NDksIDB4MDgsIDB4NDksIDB4MDAsIDB4YzEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZDYsIDB4ZmYsCi0weDIyLCAweDRhLCAweDFmLCAweDQ4LCAweGMxLCAweDFkLCAweDg5LCAweDMxLCAweDBiLCAweDc4LCAweDAwLCAweDJiLAotMHgwMiwgMHhkMCwgMHg0OSwgMHg3OCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkMSwgMHgxZSwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MjAsIDB4NjgsIDB4ODAsIDB4MDAsIDB4MTksIDB4NGIsIDB4YzMsIDB4MTgsIDB4MDUsIDB4Y2UsCi0weGMxLCAweDFkLCAweDExLCAweDMxLCAweDAxLCAweDIwLCAweDAyLCAweGYwLCAweGM3LCAweGZlLCAweDE0LCAweDQ4LAotMHgyMSwgMHg2OCwgMHgwMSwgMHgzMSwgMHgyMSwgMHg2MCwgMHgxNywgMHgyOSwgMHgwMCwgMHhkMywgMHgyNSwgMHg2MCwKLTB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGQsIDB4NjUsIDB4NzksIDB4NmEsIDB4M2EsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDUxLCAweDYyLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDY4LCAweDAwLCAweDI5LAotMHgwMywgMHhkMSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg4MSwgMHg2MCwgMHgwNCwgMHhlMCwgMHgzOSwgMHg2YiwKLTB4YzIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjUsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsCi0weGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGVhLCAweDA1LCAweDAwLCAweDAwLAotMHgxOCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4NDQsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsCi0weDA0LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGI1LCAweDExLCAweDRlLCAweGZmLCAweDI1LCAweDAxLCAweDM1LAotMHgxMCwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzNSwgMHg2MCwgMHg3OCwgMHg2OSwgMHgwMSwgMHgzOCwgMHg3OCwgMHg2MSwKLTB4YmMsIDB4NjgsIDB4MDAsIDB4MmMsIDB4MTAsIDB4ZDAsIDB4MjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjAsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDIxLCAweGY4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDA0LCAweGZhLAotMHgwOCwgMHg0OCwgMHg4MCwgMHg2YSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwNywgMHhlOSwgMHhkMSwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4NDgsIDB4YzEsIDB4NzksIDB4MDEsIDB4MzEsIDB4YzEsIDB4NzEsCi0weGY3LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDFiLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4MDEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDM4LCAweDY4LCAweGMwLCAweDA4LAotMHgwOSwgMHhkMywgMHgxZCwgMHg0OCwgMHgwMSwgMHg2YSwgMHgwMSwgMHgzOSwgMHgwMSwgMHg2MiwgMHgyMCwgMHgzMCwKLTB4MDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZmUsIDB4ZjcsIDB4ZTksIDB4ZmQsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweGY4LCAweDFkLCAweDFkLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDE2LCAweDRjLAotMHg2MSwgMHg2YSwgMHg4MSwgMHg0MiwgMHgyMSwgMHhkMSwgMHgwMSwgMHgxYywgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjksIDB4MWEsIDB4ZDEsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZjgsCi0weDYwLCAweDYyLCAweDYwLCAweDZhLCAweDIxLCAweDZhLCAweDg4LCAweDQyLCAweDA1LCAweGQwLCAweDAxLCAweDIxLAotMHg4OSwgMHgwNywgMHgwMSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHhmMiwgMHhkMCwgMHg1MSwgMHgyMSwKLTB4ODksIDB4MDMsIDB4NjIsIDB4NmEsIDB4MjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4NjAsIDB4NmIsCi0weGEyLCAweDZiLCAweDgwLCAweDFhLCAweDA0LCAweDM4LCAweGM4LCAweDYwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3OSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmNywgMHhlNywKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGMxLCAweDFkLCAweDAxLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLAotMHgwOCwgMHgxOCwgMHgwZCwgMHgzMCwgMHg4MSwgMHgwNywgMHgwMiwgMHhkMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwKLTB4MDQsIDB4MzAsIDB4MDQsIDB4NDksIDB4OGEsIDB4NmIsIDB4MTIsIDB4MTgsIDB4NGIsIDB4NmIsIDB4OWEsIDB4NDIsCi0weDAwLCAweGQ5LCAweDA4LCAweDZiLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwNCwgMHg0OCwgMHhjMCwgMHg2OCwgMHgxMCwgMHgyOCwgMHgwMSwgMHhkMywgMHgwMCwgMHhmMCwKLTB4MDUsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsCi0weDg4LCAweGI1LCAweDBjLCAweDRmLCAweDM4LCAweDc5LCAweDAwLCAweDI4LCAweDExLCAweGQxLCAweDBiLCAweDQ5LAotMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhmNSwgMHhmZCwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMCwgMHgwMSwgMHgyMCwKLTB4MzgsIDB4NzEsIDB4MDgsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDcsIDB4NDgsIDB4NDIsIDB4NjgsCi0weDA3LCAweDRiLCAweDAxLCAweDY4LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweGRmLCAweGZkLCAweDg4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHhmNSwgMHgyYywgMHhmZiwgMHhmZiwKLTB4MTAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDkwLCAweGI1LCAweDAxLCAweDIwLCAweDQwLCAweDAyLCAweDEwLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLAotMHgwZiwgMHg0ZiwgMHgxMCwgMHgyMSwgMHhmOCwgMHgxZCwgMHgzZCwgMHgzMCwgMHgwMiwgMHhmMCwgMHg0YywgMHhmYywKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZmMsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsCi0weDAwLCAweGYwLCAweDE0LCAweGY4LCAweDAwLCAweDIwLCAweGM5LCAweDIzLCAweDFiLCAweDAxLCAweGY5LCAweDE4LAotMHgwOCwgMHg3MSwgMHhlMCwgMHg2OCwgMHgxMCwgMHgyOCwgMHgwNCwgMHhkMywgMHgwMSwgMHgyMCwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4NDgsIDB4NzMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDM3LCAweDQ4LAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMSwgMHgxOCwgMHhjOSwgMHg2OCwgMHgzNSwgMHg0ZCwgMHgxMCwgMHgyOSwKLTB4MDAsIDB4ZDksIDB4MTAsIDB4MjEsIDB4NjksIDB4NjIsIDB4MzIsIDB4NDgsIDB4YzEsIDB4NmMsIDB4MDAsIDB4NmUsCi0weDgxLCAweDQyLCAweDA3LCAweGQ5LCAweDA4LCAweDFhLCAweDA3LCAweDA5LCAweDAwLCAweDI0LCAweDY4LCAweDZhLAotMHhiOCwgMHg0MiwgMHgxMiwgMHhkMiwgMHgwNywgMHgxYywgMHgxMCwgMHhlMCwgMHg4MSwgMHg0MiwgMHgyYSwgMHhkMiwKLTB4MmMsIDB4NGEsIDB4NTIsIDB4NmIsIDB4MTAsIDB4MWEsIDB4MDcsIDB4MDksIDB4NjgsIDB4NmEsIDB4YjgsIDB4NDIsCi0weDA1LCAweGQ5LCAweDBjLCAweDA5LCAweDM5LCAweDE5LCAweDg4LCAweDQyLCAweDAzLCAweGQyLCAweGM0LCAweDFiLAotMHgwMSwgMHhlMCwgMHgwMCwgMHgyNCwgMHgwNywgMHgxYywgMHgzZSwgMHgxOSwgMHgzMCwgMHgwMSwgMHgyNSwgMHg0OSwKLTB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4M2QsIDB4ZDAsIDB4MjMsIDB4NDgsIDB4MDAsIDB4MmMsCi0weDFhLCAweGQxLCAweDFlLCAweDQ5LCAweDNhLCAweDAxLCAweDZmLCAweDYyLCAweDA5LCAweDZlLCAweDhjLCAweDE4LAotMHgxZCwgMHg0ZCwgMHg2YiwgMHg2YiwgMHhhMywgMHg0MiwgMHgwMCwgMHhkOCwgMHhlNCwgMHgxYSwgMHgxZSwgMHg0YiwKLTB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4ZWEsIDB4NmEsIDB4NTEsIDB4MTgsCi0weDJhLCAweDZiLCAweDAzLCAweDFjLCAweDIwLCAweGUwLCAweDFiLCAweDQ4LCAweDAxLCAweDZiLCAweDAxLCAweDMxLAotMHgwMSwgMHg2MywgMHgwMCwgMHgyMCwgMHg2OCwgMHg2MiwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MTAsIDB4NDksIDB4MjQsIDB4MDEsIDB4M2YsIDB4MDEsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4M2EsIDB4NDMsCi0weDZlLCAweDYyLCAweDAwLCAweDkyLCAweDBlLCAweDRkLCAweGVhLCAweDZhLCAweDA5LCAweDZlLCAweDUxLCAweDE4LAotMHgwMywgMHgxYywgMHgwNiwgMHgxYywgMHgwMCwgMHgyMCwgMHgyYSwgMHg2YiwgMHgwMiwgMHhmMCwgMHg0YSwgMHhmZCwKLTB4MGMsIDB4NGEsIDB4MjIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YmIsIDB4MTksIDB4ZTksIDB4NmEsIDB4MmEsIDB4NmIsCi0weDAwLCAweDIwLCAweDAyLCAweGYwLCAweDQxLCAweGZkLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LCAweDA0LCAweDY2LAotMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwMSwgMHgyMCwgMHhkYSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NWQsIDB4MmUsIDB4ZmYsIDB4ZmYsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDM2LCAweDAyLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwNCwgMHg0OCwgMHgwMSwgMHg2ZSwgMHgwNCwgMHg0YSwgMHg4MCwgMHgzMCwgMHhkMSwgMHg2MCwgMHgwMiwgMHgyMywKLTB4YzEsIDB4NmIsIDB4MTksIDB4NDMsIDB4YzEsIDB4NjMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDAxLCAweDIwLCAweDgwLCAweDAyLAotMHgxYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHgyNywgMHgxYiwgMHg0ZSwgMHgzMywgMHgyMywKLTB4OWIsIDB4MDEsIDB4ZjUsIDB4MTgsIDB4NjgsIDB4NmEsIDB4MDAsIDB4MjgsIDB4MWQsIDB4ZDksIDB4MTksIDB4NGMsCi0weDY4LCAweDQ2LCAweDEwLCAweDIxLCAweDAyLCAweGYwLCAweDkwLCAweGZiLCAweDY4LCAweDQ2LCAweDAwLCAweGYwLAotMHgzMywgMHhmOCwgMHgwMCwgMHgyOCwgMHgwNCwgMHhkMCwgMHgxNSwgMHg0OSwgMHg0OCwgMHg2OSwgMHgwMSwgMHgzMCwKLTB4NDgsIDB4NjEsIDB4MGEsIDB4ZTAsIDB4MTMsIDB4NDksIDB4NjAsIDB4N2IsIDB4MDEsIDB4MzAsIDB4NjAsIDB4NzMsCi0weDg4LCAweDc5LCAweDAxLCAweDMwLCAweDg4LCAweDcxLCAweDExLCAweDQ4LCAweDAwLCAweDY4LCAweDAyLCAweGYwLAotMHg2NSwgMHhmOSwgMHg2OCwgMHg2YSwgMHgwMSwgMHgzNywgMHhiOCwgMHg0MiwgMHhlMiwgMHhkOCwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MjEsCi0weDgxLCAweDczLCAweGZmLCAweGY3LCAweDA1LCAweGZiLCAweGZmLCAweGY3LCAweGUzLCAweGZlLCAweDA0LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDU4LCAweDA0LCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDE3LCAweDRmLAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOSwgMHgxOCwgMHgwMCwgMHgyMiwgMHhjYiwgMHg2OCwgMHgwMCwgMHgyYiwKLTB4MjMsIDB4ZDAsIDB4MDEsIDB4M2IsIDB4Y2IsIDB4NjAsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZmYsIDB4MTgsCi0weGJiLCAweDY5LCAweDFjLCAweDZkLCAweGMwLCAweDQ2LCAweGJjLCAweDYxLCAweDA0LCAweDY4LCAweGMwLCAweDQ2LAotMHg1YywgMHg2MCwgMHg0NCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5YywgMHg2MCwgMHg4NCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4MWMsIDB4NjEsIDB4YzAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTgsIDB4NjEsIDB4MWEsIDB4NjUsIDB4MDgsIDB4NjksCi0weDQyLCAweDFjLCAweDBhLCAweDYxLCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweDM4LCAweDZhLCAweGMwLCAweDQ2LAotMHgwMywgMHg2NSwgMHgwMCwgMHhlMCwgMHhmYiwgMHg2MSwgMHgzYiwgMHg2MiwgMHgxOCwgMHgxYywgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDBhLCAweDRhLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQxLCAweDE4LCAweGM4LCAweDY5LCAweDE5LCAweDIzLAotMHhkYiwgMHgwMSwgMHhkMiwgMHgxOCwgMHgxMywgMHg2OSwgMHgwMCwgMHgyYiwgMHgwNiwgMHhkMCwgMHgwMSwgMHgzYiwKLTB4MTMsIDB4NjEsIDB4Y2EsIDB4NjksIDB4MTIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4Y2EsIDB4NjEsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIxLCAweDExLCAweDYxLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwNiwgMHg0YSwgMHgxMSwgMHg2OSwgMHg0YiwgMHgxYywgMHgxMywgMHg2MSwgMHg0MCwgMHgzMiwgMHgwMCwgMHgyOSwKLTB4MDEsIDB4ZDAsIDB4ZDEsIDB4NjksIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4ZDAsIDB4NjEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDA2LCAweDRhLCAweGQxLCAweDY4LAotMHg0YiwgMHgxYywgMHhkMywgMHg2MCwgMHg0MCwgMHgzMiwgMHgwMCwgMHgyOSwgMHgwMSwgMHhkMCwgMHg5MSwgMHg2OSwKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4OTAsIDB4NjEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGU4LCAweDFhLCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDAwLCAweDIxLAotMHgwZiwgMHg0YSwgMHg5NywgMHg4OSwgMHg5MiwgMHg2YSwgMHg0YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHg5YiwgMHg4YSwKLTB4MDAsIDB4MmIsIDB4MTIsIDB4ZDAsIDB4YmIsIDB4NDIsIDB4MTAsIDB4ZGMsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsCi0weDYzLCAweDQzLCAweGQzLCAweDE4LCAweGRjLCAweDFmLCAweDQ5LCAweDNjLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMywgMHgyYiwgMHgwMiwgMHhkMCwKLTB4MDAsIDB4MjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksIDB4ZTQsIDB4ZDMsCi0weDAxLCAweDIwLCAweGY4LCAweGU3LCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweGY3LCAweGI1LCAweDg2LCAweGIwLAotMHgzZCwgMHg0YSwgMHgwNywgMHgxYywgMHhkMSwgMHg2OSwgMHg4ZiwgMHg0MCwgMHgwMywgMHgxYywgMHgxNCwgMHg2YSwKLTB4ZTMsIDB4NDAsIDB4NWYsIDB4NDAsIDB4MDcsIDB4OWUsIDB4OGUsIDB4NDAsIDB4NzcsIDB4NDAsIDB4Y2YsIDB4NDAsCi0weDk0LCAweDY5LCAweGMwLCAweDQ2LCAweDA1LCAweDk0LCAweDAzLCAweDFjLCAweGEzLCAweDQwLCAweDAwLCAweDI1LAotMHgxNCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5NCwgMHgwMCwgMHgyYywgMHg1ZCwgMHhkOSwgMHgxYywgMHgxYywKLTB4MzIsIDB4NGUsIDB4MjYsIDB4NDMsIDB4OTQsIDB4NjksIDB4ZTYsIDB4NDAsIDB4MzMsIDB4MWMsIDB4MDMsIDB4OTYsCi0weDUzLCAweDZhLCAweGMwLCAweDQ2LCAweDAyLCAweDkzLCAweGQyLCAweDZhLCAweGMwLCAweDQ2LCAweDAxLCAweDkyLAotMHhiYiwgMHgwMCwgMHgwMiwgMHg5YSwgMHhkMiwgMHg1OCwgMHgxMywgMHgxYywgMHgwNSwgMHg5YywgMHhlMywgMHg0MCwKLTB4MDMsIDB4OWMsIDB4YTMsIDB4NDIsIDB4M2UsIDB4ZDEsIDB4OGEsIDB4NDAsIDB4Y2EsIDB4NDAsIDB4MTQsIDB4MWMsCi0weDYzLCAweDAwLCAweDFiLCAweDE5LCAweDViLCAweDAxLCAweDAxLCAweDlhLCAweGQyLCAweDE4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHgwMSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwKLTB4MWIsIDB4MGUsIDB4MDMsIDB4MmIsIDB4MmMsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsCi0weDUxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA3LCAweDllLCAweDFlLCAweDQwLCAweDAwLCAweDk2LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhkNiwgMHgxZCwgMHg0OSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwKLTB4ODMsIDB4NDIsIDB4MWIsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4NGQsIDB4MzYsCi0weDMzLCAweDQzLCAweDFiLCAweDY4LCAweDAwLCAweDllLCAweGIzLCAweDQyLCAweDEyLCAweGQxLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgwOCwgMHg5YiwKLTB4MzIsIDB4MmIsIDB4MDQsIDB4ZDEsIDB4MDIsIDB4MmEsIDB4MDcsIDB4ZDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MTQsCi0weDBmLCAweGUwLCAweDA4LCAweDliLCAweDMzLCAweDJiLCAweDAxLCAweGQxLCAweDAxLCAweDJhLCAweGY3LCAweGQwLAotMHgwNCwgMHg5YSwgMHgwMSwgMHgzNywgMHg5NywgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyNywgMHgwNCwgMHg5YSwKLTB4MDEsIDB4MzUsIDB4YWEsIDB4NDIsIDB4YWUsIDB4ZDgsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDksIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgyNywgMHg0ZCwgMHg2OCwgMHg2OSwgMHgwMCwgMHgyOCwKLTB4MDYsIDB4ZDAsIDB4MjYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4MmIsIDB4ZjgsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIzLCAweDRjLCAweDAwLCAweDI2LCAweGEwLCAweDY4LCAweDIzLCAweDRmLAotMHgwMCwgMHgyOCwgMHgxNiwgMHhkMCwgMHgwZiwgMHhlMCwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMiwgMHhkMywKLTB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4MGYsIDB4ZTAsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsIDB4ZGUsIDB4ZmUsCi0weDAwLCAweDI4LCAweGVhLCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAxLCAweGQzLCAweDAxLCAweDIwLAotMHgzOCwgMHg3MSwgMHhlOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwKLTB4ZTksIDB4ZDAsIDB4NjgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NjAsCi0weGZlLCAweGY3LCAweGJjLCAweGZiLCAweDAwLCAweDI4LCAweGQ2LCAweGQxLCAweDY4LCAweDY4LCAweDAwLCAweDI4LAotMHhmNiwgMHhkMSwgMHgxMSwgMHhlMCwgMHgwMCwgMHgyOCwgMHhkMCwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4Y2EsIDB4ZTcsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsCi0weGI5LCAweGZlLCAweDAwLCAweDI4LCAweGM1LCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAxLCAweGQzLAotMHgwMSwgMHgyMCwgMHgzOCwgMHg3MSwgMHhlOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhiZCwgMHhkMCwgMHgzOCwgMHg3OSwKLTB4MDAsIDB4MjgsIDB4ZTcsIDB4ZDAsIDB4YjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDVjLCAweDA0LCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweDhjLCAweDA2LCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MWQsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweDAxLCAweGYwLCAweDlkLCAweGZjLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDQxLCAweDY4LAotMHgxOSwgMHg0MCwgMHgwYywgMHgwZiwgMHg2MSwgMHgwMSwgMHgwOSwgMHgxYiwgMHg4OSwgMHgwMCwgMHgxOCwgMHg0YSwKLTB4OGYsIDB4MTgsIDB4MDEsIDB4MjEsIDB4MzksIDB4ODAsIDB4ODEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjUsCi0weDQxLCAweDZhLCAweGMwLCAweDQ2LCAweDc5LCAweDY3LCAweGI5LCAweDZjLCAweGZhLCAweDZjLCAweDg5LCAweDE4LAotMHhiOSwgMHg2NCwgMHgwMCwgMHgyMSwgMHhmOSwgMHg2NCwgMHhiYSwgMHg2YiwgMHgzYiwgMHg2ZCwgMHhkMiwgMHgxOCwKLTB4YmEsIDB4NjMsIDB4MzksIDB4NjUsIDB4NDIsIDB4NmEsIDB4MjAsIDB4MzIsIDB4NTEsIDB4NzEsIDB4NzksIDB4NmQsCi0weDdhLCAweDZmLCAweGQyLCAweDZkLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGZjLCAweGY3LCAweGNhLCAweGZmLAotMHgyMCwgMHgwMSwgMHgwOSwgMHg0OSwgMHg0MCwgMHgxOCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4NzgsIDB4NmYsIDB4MDEsIDB4ZjAsIDB4YzYsIDB4ZmIsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg0MCwgMHgyMCwKLTB4MTIsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4NTksIDB4ZmMsIDB4MDcsIDB4MWMsCi0weDQwLCAweDY4LCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLCAweDA2LCAweDBmLCAweDcwLCAweDAxLAotMHg4MCwgMHgxYiwgMHg4MCwgMHgwMCwgMHgwYywgMHg0OSwgMHg0NCwgMHgxOCwgMHhiOCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4NjAsIDB4NjUsIDB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjcsIDB4ODAsIDB4NmYsIDB4MDUsIDB4MWQsCi0weGU1LCAweDYzLCAweGI5LCAweDY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDg5LCAweGY5LCAweDM4LCAweDFjLAotMHgyMSwgMHgxYywgMHgzMiwgMHgxYywgMHgyYiwgMHgxYywgMHgwMCwgMHhmMCwgMHgyMCwgMHhmOCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDRiLCAweDZmLCAweDliLCAweDZmLCAweDFmLCAweDFkLCAweGNmLCAweDYzLCAweDA1LCAweDY4LAotMHgwMCwgMHgyMywgMHg4NCwgMHg2OSwgMHhhNCwgMHgwOCwgMHgwOCwgMHhkMCwgMHg5YywgMHgwMCwgMHgyZSwgMHg1OSwKLTB4YzAsIDB4NDYsIDB4M2UsIDB4NTEsIDB4ODQsIDB4NjksIDB4YTQsIDB4MDgsIDB4MDEsIDB4MzMsIDB4OWMsIDB4NDIsCi0weGY2LCAweGQ4LCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweDAzLCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHhmZiwgMHhiNSwgMHg4MSwgMHhiMCwgMHgwNCwgMHgxYywgMHgxZCwgMHgxYywgMHgwZiwgMHgxYywKLTB4NDYsIDB4NDgsIDB4MDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjEsIDB4ZjksIDB4MWQsIDB4NTEsIDB4MzEsCi0weGJkLCAweDY1LCAweDAwLCAweDkxLCAweDIwLCAweDFjLCAweGZkLCAweGY3LCAweDVkLCAweGZjLCAweGY4LCAweDZkLAotMHg0MCwgMHgwOSwgMHgzNiwgMHhkMiwgMHhiOCwgMHg2ZCwgMHgwNiwgMHg3YiwgMHg0MywgMHg3YiwgMHgxYiwgMHgwMiwKLTB4MWUsIDB4NDMsIDB4MTcsIDB4MjEsIDB4NDksIDB4MDIsIDB4MDEsIDB4NzMsIDB4MGIsIDB4MGEsIDB4NDMsIDB4NzMsCi0weDAwLCAweDk5LCAweDIwLCAweDFjLCAweGZkLCAweGY3LCAweDRjLCAweGZjLCAweGI4LCAweDZkLCAweGMwLCAweDQ2LAotMHgwNiwgMHg3MywgMHgzMywgMHgwYSwgMHg0MywgMHg3MywgMHhmOCwgMHg2ZCwgMHg0MCwgMHgwOSwgMHgyMCwgMHhkMiwKLTB4NjAsIDB4NjgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDMsIDB4OTgsIDB4MDEsIDB4ZjAsIDB4Y2MsIDB4ZmMsCi0weDYwLCAweDY4LCAweDMyLCAweDRiLCAweDE4LCAweDQzLCAweDYwLCAweDYwLCAweDIwLCAweDFjLCAweDAxLCAweGYwLAotMHgzNSwgMHhmZCwgMHgwMCwgMHgyNSwgMHg3ZCwgMHg2MCwgMHhiZCwgMHg2MCwgMHgzZCwgMHg2NCwgMHg3ZCwgMHg2NCwKLTB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzEsIDB4ZmYsIDB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDM4LCAweDgwLCAweDdkLCAweDYyLCAweDI5LCAweDQ4LCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweDM4LCAweDFjLAotMHgwMCwgMHhmMCwgMHhhMCwgMHhmYiwgMHg0NCwgMHhlMCwgMHgyMCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjQsIDB4NjAsIDB4NjgsCi0weDAyLCAweDA0LCAweDEyLCAweDBjLCAweDc4LCAweDZlLCAweDAxLCAweDI2LCAweGMxLCAweDFkLCAweDBkLCAweDMxLAotMHg4YSwgMHg0MiwgMHgwMiwgMHhkMiwgMHgzYSwgMHg2NCwgMHgwOCwgMHgxYywgMHgwZSwgMHhlMCwgMHg0MSwgMHgxOSwKLTB4ODksIDB4ODksIDB4ZjAsIDB4MjMsIDB4MTksIDB4NDAsIDB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsCi0weGY4LCAweDYwLCAweGY5LCAweDYxLCAweDYxLCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDgxLCAweDQyLAotMHgxNiwgMHhkMiwgMHgzOSwgMHg2NCwgMHg2MywgMHg2OCwgMHgxOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg0MCwgMHgxYSwKLTB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODIsIDB4MDAsIDB4YTAsIDB4NjEsCi0weDIwLCAweDY4LCAweDA5LCAweDE4LCAweDliLCAweDE4LCAweDYzLCAweDYwLCAweGMzLCAweDFmLCAweDA1LCAweDNiLAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmYSwgMHg3ZSwgMHg4MCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4YmYsIDB4ZmIsIDB4MGIsIDB4ZTAsIDB4YjksIDB4NjgsIDB4MDgsIDB4MWEsIDB4MDAsIDB4MjUsIDB4NzgsIDB4NjIsCi0weGJkLCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDNjLCAweGZjLCAweDIwLCAweDFjLCAweDM5LCAweDFjLAotMHgwMCwgMHhmMCwgMHg2NCwgMHhmOCwgMHgwNSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsCi0weGYwLCAweGI1LCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDZjLCAweGY5LCAweDZiLCAweDBkLCAweDE4LAotMHgyMSwgMHg2OCwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhhMiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgwYiwgMHhkOSwKLTB4ODIsIDB4MDAsIDB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weGMwLCAweDQ2LCAweGFiLCAweDUwLCAweGEyLCAweDY5LCAweDAxLCAweDMwLCAweDgyLCAweDQyLCAweGYzLCAweGQ4LAotMHg3OCwgMHg2ZSwgMHhmOSwgMHg2YiwgMHgwOSwgMHgxOCwgMHg4OSwgMHg4OSwgMHhmMCwgMHgyMywgMHgxOSwgMHg0MCwKLTB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsIDB4ZjgsIDB4NjAsIDB4ZjksIDB4NjEsIDB4MjAsIDB4NjgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAxLCAweDY4LCAweDc4LCAweDZjLAotMHhmYywgMHhmNywgMHg5NSwgMHhmZiwgMHg3OCwgMHg2NCwgMHg2MCwgMHg2OCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4ZjgsIDB4NjgsIDB4ODEsIDB4NDIsIDB4MTksIDB4ZDIsIDB4MzksIDB4NjQsIDB4NjMsIDB4NjgsIDB4MTksIDB4MDQsCi0weDA5LCAweDBjLCAweDQwLCAweDFhLCAweDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgyLCAweDAwLCAweGEwLCAweDYxLAotMHgyMCwgMHg2OCwgMHgwOSwgMHgxOCwgMHg5YiwgMHgxOCwgMHg2MywgMHg2MCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4ZmEsIDB4MDEsIDB4MjAsIDB4NzgsIDB4ODAsIDB4MjAsIDB4MWMsCi0weDAwLCAweGYwLCAweDVlLCAweGZiLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGI5LCAweDY4LAotMHgwOCwgMHgxYSwgMHg3OCwgMHg2MiwgMHgwMCwgMHgyMCwgMHhiOCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZDksIDB4ZmIsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4ZjgsIDB4ZWYsIDB4ZTcsCi0weGYwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDhlLCAweDQ4LCAweDQxLCAweDY5LAotMHgwMSwgMHgzMSwgMHg0MSwgMHg2MSwgMHgwMywgMHgyMCwgMHgwMCwgMHgwNywgMHg2MSwgMHg2OCwgMHgwOCwgMHg0MCwKLTB4MDYsIDB4MGYsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4NjgsIDB4MTEsIDB4MTgsIDB4ZmIsIDB4NjgsCi0weGQyLCAweDFhLCAweDdiLCAweDY4LCAweDlkLCAweDFhLCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDM4LCAweDFjLAotMHgyYSwgMHgxYywgMHgwMCwgMHhmMCwgMHgyNiwgMHhmYSwgMHgwMCwgMHgyMCwgMHg3OCwgMHg4MCwgMHgyMCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4MmUsIDB4ZmIsIDB4NjAsIDB4NjgsIDB4NDAsIDB4MTksIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weDYwLCAweDYwLCAweDMwLCAweDFjLCAweDAxLCAweGYwLCAweGUwLCAweGZiLCAweDdkLCAweDRlLCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhmMCwgMHgxOCwgMHgwMCwgMHg2OSwgMHgwMCwgMHgyOCwgMHgxOSwgMHhkMCwgMHgwMCwgMHgyNSwKLTB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MTIsIDB4ZDAsCi0weGFhLCAweDAwLCAweDkyLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGQyLCAweDE4LCAweGQyLCAweDY4LAotMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMSwgMHhmMCwgMHgxYywgMHhmZSwgMHgwMSwgMHgzNSwgMHhhOCwgMHgwMCwKLTB4ODAsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsCi0weGVjLCAweGQxLCAweGY4LCAweDZiLCAweDAxLCAweDFmLCAweDhhLCAweDFjLCAweGZhLCAweDYzLCAweGZhLCAweDY4LAotMHg3ZCwgMHg2YywgMHgwMCwgMHhmMCwgMHhiYiwgMHhmOSwgMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTAsIDB4ZmYsIDB4MDMsIDB4OTAsIDB4ZjksIDB4NmIsIDB4M2EsIDB4NmUsCi0weDhlLCAweDE4LCAweDIwLCAweDY4LCAweDEyLCAweDE4LCAweDAxLCAweDkyLCAweDdhLCAweDZlLCAweDhkLCAweDE4LAotMHgxMSwgMHgxOCwgMHgwMiwgMHg5MSwgMHhjOCwgMHgxZCwgMHgwOSwgMHgzMCwgMHhlMCwgMHg2MCwgMHhiMSwgMHg4OCwKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDc4LCAweDYxLCAweDY4LCAweDY4LCAweDAxLCAweDBlLCAweGZmLCAweDIyLCAweDEyLCAweDA0LAotMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwKLTB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDgsIDB4NDMsIDB4MzgsIDB4NjEsIDB4YTgsIDB4ODksCi0weDA5LCAweDIzLCAweDFiLCAweDAyLCAweDE4LCAweDQwLCAweGI4LCAweDYxLAotMHhhOCwgMHg4OSwgMHg5OCwgMHg0MywgMHhhOCwgMHg4MSwgMHhhOCwgMHg4OSwgMHgwMiwgMHg5OSwgMHhjMCwgMHg0NiwKLTB4ODgsIDB4ODEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4ODAsIDB4YjAsIDB4ODAsIDB4NzAsIDB4ODEsIDB4NjgsIDB4NjAsCi0weDI4LCAweDgyLCAweGI5LCAweDZlLCAweDMwLCAweDFjLCAweGZjLCAweGY3LCAweGU4LCAweGZlLCAweDM4LCAweDg2LAotMHhmYSwgMHg2OSwgMHgzMCwgMHgxYywgMHgyOSwgMHgxYywgMHhmYywgMHhmNywgMHgwMywgMHhmZiwgMHg3OCwgMHg4NiwKLTB4M2QsIDB4OGUsIDB4NzgsIDB4OGUsIDB4MDMsIDB4OTksIDB4ZmMsIDB4ZjcsIDB4YzgsIDB4ZmUsIDB4MDAsIDB4OTAsCi0weDYwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDM5LCAweDZlLCAweDQxLCAweDFhLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg3YSwgMHg2ZSwgMHg4MiwgMHgxYSwgMHgxMywgMHgwNCwgMHgxYiwgMHgwYywgMHgxYSwgMHgwMiwKLTB4MWIsIDB4MGEsIDB4MWEsIDB4NDMsIDB4MTYsIDB4MDQsIDB4MzYsIDB4MGMsIDB4YmEsIDB4NjgsIDB4ODIsIDB4NDIsCi0weDAxLCAweGQyLCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweDEwLCAweDFhLCAweGI4LCAweDYwLCAweDA4LCAweDAyLAotMHgwOSwgMHgxMiwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4YTMsIDB4ZmUsCi0weDA1LCAweDFjLCAweDAwLCAweDk4LCAweDMxLCAweDFjLCAweGZjLCAweGY3LCAweDllLCAweGZlLCAweDA2LCAweDFjLAotMHg3OCwgMHg2OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwYSwgMHgwOCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4ODAsIDB4MjgsIDB4MWMsCi0weGZjLCAweGY3LCAweDhmLCAweGZlLCAweDc5LCAweDY5LCAweDAxLCAweDMxLCAweGMwLCAweDQzLCAweDc5LCAweDYxLAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg4MSwgMHgzOCwgMHg2OSwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwKLTB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsCi0weDAyLCAweDQwLCAweDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDAxLCAweDQzLCAweDMwLCAweDFjLAotMHhmYywgMHhmNywgMHg3NywgMHhmZSwgMHgzOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg4OSwgMHgxOCwgMHgzOSwgMHg2MSwKLTB4YjksIDB4NjgsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDEsIDB4MDIsIDB4OTksIDB4ODksIDB4ODksIDB4YmEsIDB4NjksCi0weDExLCAweDQzLCAweDAyLCAweDlhLCAweGMwLCAweDQ2LCAweDkxLCAweDgxLCAweGI5LCAweDY5LCAweGZjLCAweGY3LAotMHg2NiwgMHhmZSwgMHgyMCwgMHg4MiwgMHgwMCwgMHgyMCwgMHg2MCwgMHg4MiwgMHhmOCwgMHg2ZCwgMHg0MSwgMHgwOCwKLTB4MTYsIDB4ZDMsIDB4ODAsIDB4MGEsIDB4MGEsIDB4ZDMsIDB4NjAsIDB4NjgsIDB4MTAsIDB4MzgsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDIxLCAweDY4LCAweGMwLCAweDQ2LAotMHgwOCwgMHg4MiwgMHgwOSwgMHhlMCwgMHg2MCwgMHg2OCwgMHgwYywgMHgzOCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ODgsIDB4ODEsCi0weDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMSwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2ZSwgMHg0ZCwgMHgyOCwgMHg2OSwKLTB4MDEsIDB4MjIsIDB4MDQsIDB4OTksIDB4OGEsIDB4NDAsIDB4OTAsIDB4NDMsIDB4MjgsIDB4NjEsIDB4MDQsIDB4OTgsCi0weDQzLCAweDAxLCAweDE4LCAweDFhLCAweDgwLCAweDAwLCAweDE2LCAweDFjLCAweDY5LCAweDQ5LCAweDQ0LCAweDE4LAotMHhlMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHhhMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMSwKLTB4MDAsIDB4MjYsIDB4MjYsIDB4ZTAsIDB4NjUsIDB4NDgsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjEsCi0weDA0LCAweDk4LCAweGZjLCAweGY3LCAweDA5LCAweGZkLCAweDA3LCAweDFjLCAweDAzLCAweGQxLCAweDI4LCAweDY5LAotMHgzMCwgMHg0MywgMHgyOCwgMHg2MSwgMHhiNSwgMHhlMCwgMHhhMCwgMHg2OCwgMHg2NSwgMHg2OCwgMHhhOCwgMHg0MiwKLTB4MDAsIDB4ZDIsIDB4MDUsIDB4MWMsIDB4YTEsIDB4NmMsIDB4YTksIDB4NDIsIDB4MTYsIDB4ZDIsIDB4NDAsIDB4MWEsCi0weDYyLCAweDZhLCAweDEwLCAweDFhLCAweDAwLCAweDI2LCAweDYwLCAweDYyLCAweGE2LCAweDYwLCAweGE2LCAweDYyLAotMHgyMCwgMHg4OCwgMHg0OCwgMHgyMywgMHgxOCwgMHg0MywgMHgyMCwgMHg4MCwgMHgwZCwgMHgxYywgMHgwOSwgMHhkMSwKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTksIDB4ZmQsIDB4MDMsIDB4MjAsIDB4NjAsIDB4ODAsIDB4NjYsIDB4NjAsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDhkLCAweGY5LCAweDk2LCAweGUwLCAweGUxLCAweDY4LCAweDM4LCAweDY4LAotMHgwOSwgMHgxOCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgyMCwgMHgxYywgMHgwMiwgMHgzOSwgMHgyYSwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4Y2QsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZDcsIDB4ZjksIDB4ZTAsIDB4NjgsCi0weDQ2LCAweDE5LCAweDc4LCAweDY4LCAweDMwLCAweDQzLCAweDc4LCAweDYwLCAweDA0LCAweDk4LCAweDMxLCAweDFjLAotMHgwMSwgMHhmMCwgMHg4OCwgMHhmYSwgMHgyMSwgMHg2ZSwgMHgwMCwgMHg5OCwKLTB4MDgsIDB4MTgsIDB4MDEsIDB4OTAsIDB4NzAsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4NjEsIDB4NmUsCi0weDcxLCAweDFhLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDExLCAweDAyLCAweDEyLCAweDBhLCAweDExLCAweDQzLAotMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMiwgMHg5MSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwYSwgMHgwOCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjAsIDB4OGUsCi0weGZjLCAweGY3LCAweGNiLCAweGZkLCAweDA2LCAweDFjLCAweDYwLCAweDhlLCAweDAyLCAweDk5LCAweGZjLCAweGY3LAotMHhjNiwgMHhmZCwgMHgwMywgMHg5MCwgMHg2MCwgMHg2OSwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwKLTB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDgxLCAweDgwLCAweDMwLCAweDFjLCAweGZjLCAweGY3LCAweGI3LCAweGZkLCAweDYxLCAweDY5LCAweDAxLCAweDMxLAotMHhjMCwgMHg0MywgMHg2MSwgMHg2MSwgMHgwMSwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MSwgMHg2MCwgMHg2ZSwKLTB4MDAsIDB4OTksIDB4NDYsIDB4MTgsIDB4MjAsIDB4NjksIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLAotMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMSwgMHg0MywgMHg3MSwgMHg2MCwgMHgwMywgMHg5OCwKLTB4ZmMsIDB4ZjcsIDB4OWIsIDB4ZmQsIDB4MjEsIDB4NjksIDB4NDksIDB4MTksIDB4MjEsIDB4NjEsIDB4YTEsIDB4NjgsCi0weDQ5LCAweDFiLCAweGExLCAweDYwLCAweDA2LCAweGQxLCAweGIxLCAweDg5LCAweGEyLCAweDY5LCAweDExLCAweDQzLAotMHhiMSwgMHg4MSwgMHhhMSwgMHg2OSwgMHhmYywgMHhmNywgMHg4ZCwgMHhmZCwgMHgzOCwgMHg4MiwgMHg2MSwgMHg2ZSwKLTB4MzgsIDB4NjgsIDB4MDksIDB4MTgsIDB4MGUsIDB4MzEsIDB4ZjksIDB4NjAsIDB4ZTIsIDB4NjgsIDB4MDAsIDB4OTksCi0weDA0LCAweDM4LCAweDAwLCAweGYwLCAweDRjLCAweGY4LCAweDAyLCAweDIwLCAweDc4LCAweDgyLCAweGUwLCAweDZkLAotMHg0MSwgMHgwOCwgMHgxNiwgMHhkMywgMHg4MCwgMHgwYSwgMHgwYSwgMHhkMywgMHg3OCwgMHg2OCwgMHgxMCwgMHgzOCwKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MzksIDB4NjgsCi0weGMwLCAweDQ2LCAweGM4LCAweDgxLCAweDA5LCAweGUwLCAweDc4LCAweDY4LCAweDBjLCAweDM4LCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4ODEsIDB4MDUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhmNywgMHhiNSwgMHgwMywgMHgxYywgMHgwZiwgMHgxYywgMHgwMCwgMHgyMCwgMHgxYywgMHg2OCwgMHgyNiwgMHgwNCwKLTB4MzEsIDB4MWMsIDB4MWQsIDB4MWQsIDB4ZmMsIDB4ZjcsIDB4NTEsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OWEsCi0weGQxLCAweDFjLCAweDg5LCAweDA4LCAweDAxLCAweDM5LCAweDRhLCAweDFlLCAweDAyLCAweDkyLCAweDAwLCAweDI5LAotMHgwZCwgMHhkMCwgMHgyMSwgMHgwYywgMHgxMCwgMHhjZCwgMHgyMiwgMHgwNCwgMHgwYSwgMHg0MywgMHgxMSwgMHgxYywKLTB4MTYsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4NDAsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OTksIDB4NGEsIDB4MWUsCi0weDAyLCAweDkyLCAweDAwLCAweDI5LCAweGYxLCAweGQxLCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg4OSwgMHgwOCwgMHg4OSwgMHgwMCwgMHgwMywgMHgzMiwKLTB4OTMsIDB4MDgsIDB4NWEsIDB4MWUsIDB4MDAsIDB4MmIsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4YzksIDB4MDgsIDB4YzAsCi0weDEzLCAweDFjLCAweDAxLCAweDNhLCAweDAwLCAweDJiLCAweGY5LCAweGQxLCAweDcwLCAweDQ3LCAweGZmLCAweGI1LAotMHg4NiwgMHhiMCwgMHgxNywgMHgxYywgMHgwMCwgMHgyNiwgMHgwNiwgMHg5OCwgMHg4MCwgMHg2YywgMHhjMCwgMHgxYiwKLTB4MDYsIDB4OTksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjQsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MDYsIDB4OTksCi0weDg5LCAweDZiLCAweGMwLCAweDQ2LCAweDAxLCAweDkxLCAweDA2LCAweDk5LCAweDRjLCAweDZiLCAweDY3LCAweGUwLAotMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwgMHg2MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwKLTB4YTEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTEsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsIDB4YjksIDB4NDIsCi0weDA4LCAweGQyLCAweDAyLCAweGFkLCAweDZkLCAweDg4LCAweDAyLCAweGE5LCAweDQ5LCAweDg4LCAweDdmLCAweDFhLAotMHgwMCwgMHgyMSwgMHgwMiwgMHhhYiwgMHg1OSwgMHg4MCwgMHgxOSwgMHhlMCwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwKLTB4YzksIDB4MWIsIDB4MDIsIDB4YWIsIDB4NTksIDB4ODAsIDB4M2QsIDB4MWMsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MjEsCi0weDQ5LCAweDA2LCAweDA3LCAweDliLCAweDlhLCAweDA3LCAweDkyLCAweDBmLCAweDBkLCAweGQwLCAweGViLCAweDA2LAotMHhkYiwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyYiwgMHgwOCwgMHhkMywgMHgxZSwgMHgyYiwgMHgwMiwgMHhkMSwKLTB4MDMsIDB4MmEsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MmEsCi0weDAxLCAweGQzLCAweDAxLCAweDI2LCAweDAwLCAweDIxLCAweDI5LCAweDQzLCAweDAxLCAweDQzLCAweDBhLCAweDFjLAotMHgwMCwgMHg5MSwgMHgwMCwgMHgyMCwgMHgwMywgMHg5OSwgMHgwNCwgMHg5YSwgMHgwNywgMHg5YiwgMHgwMSwgMHhmMCwKLTB4NWIsIDB4ZmYsIDB4MDcsIDB4OTksIDB4NDksIDB4MTksIDB4MDcsIDB4OTEsIDB4MDAsIDB4MmUsIDB4MGEsIDB4ZDAsCi0weDFkLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDFkLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHgwMCwgMHgyMCwgMHgwNywgMHg5YiwgMHgwMSwgMHhmMCwgMHg0YywgMHhmZiwgMHgwMCwgMHgyNiwgMHgwMiwgMHhhOCwKLTB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDAsIDB4MDMsIDB4OTgsIDB4NDAsIDB4MTksIDB4MDMsIDB4OTAsCi0weDAyLCAweDk4LCAweGMwLCAweDQ2LCAweDIwLCAweDYwLCAweDAzLCAweDk4LCAweGMwLCAweDQ2LCAweDYwLCAweDYwLAotMHgwNCwgMHg5OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MCwgMHgwMywgMHhlMCwgMHgwMSwgMHg5OCwgMHgwMSwgMHgzOCwKLTB4MDEsIDB4OTAsIDB4MTAsIDB4MzQsIDB4MDYsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDQsIDB4NjMsIDB4MDEsIDB4OTgsCi0weDA2LCAweDk5LCAweGMwLCAweDQ2LCAweDg4LCAweDYzLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDAyLCAweGQwLAotMHgwMSwgMHg5OSwgMHgwMCwgMHgyOSwgMHg5MiwgMHhkMSwgMHgwOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKLTB4MDYsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDksIDB4OWIsIDB4MDEsIDB4ZjAsCi0weDFmLCAweGZmLCAweDBhLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg1MywgMHgwMiwKLTB4OTAsIDB4YjUsIDB4MGMsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAxLCAweDY4LCAweDM4LCAweDhhLCAweGZjLCAweGY3LCAweDg1LCAweGZjLAotMHhjMCwgMHg0MywgMHhmOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHg3OCwgMHg4YSwgMHgzOSwgMHg2OCwKLTB4MDgsIDB4MWEsIDB4MzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4OGIsIDB4ZjksIDB4MzgsIDB4MWMsCi0weGZjLCAweGY3LCAweDhjLCAweGZiLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDMzLCAweGZlLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwMSwgMHg4OCwgMHg4YSwgMHgwOSwgMHgyMSwgMHhkMywKLTB4Y2EsIDB4MDksIDB4MWYsIDB4ZDIsIDB4OGEsIDB4MDgsIDB4MWQsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4ODAsCi0weDQxLCAweDgwLCAweDQ3LCAweDZmLCAweDQwLCAweDZkLCAweGZhLCAweDFkLCAweDE5LCAweDMyLCAweDUxLCAweDcxLAotMHhmYSwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MCwgMHgzYSwgMHg2ZSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MCwKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjMsIDB4YzEsIDB4NmIsIDB4NDksIDB4MDgsIDB4NDksIDB4MDAsCi0weGMxLCAweDYzLCAweDAxLCAweDIwLCAweDAwLCAweGYwLCAweGNjLCAweGZmLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHg2YiwgMHhmZiwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHgyMywgMHgxOSwgMHg0MywKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4NDksIDB4MDksIDB4ZjYsIDB4ZDIsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjgsCi0weGYzLCAweGU3LCAweDAwLCAweDAwLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgxMCwgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyNCwgMHg1ZSwgMHgxZSwgMHgwMCwgMHgyYiwgMHgxOSwgMHhkMCwKLTB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4NDEsIDB4ODgsIDB4MGMsIDB4MTksIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDc5LCAweDYwLCAweDgxLCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYwLCAweGMxLCAweDY4LAotMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMCwgMHgzNywgMHhlOSwgMHg2YSwgMHg4MSwgMHg0MiwKLTB4MDIsIDB4ZDgsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZWMsIDB4ZmYsIDB4MzEsIDB4MWMsIDB4MDEsIDB4M2UsCi0weDAwLCAweDI5LCAweGU1LCAweGQxLCAweDIwLCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgyMSwgMHhjMSwgMHg2MSwgMHgwNSwgMHg0OSwgMHgwYSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwKLTB4MDgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4NGEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDAsIDB4NjEsIDB4NDgsIDB4NjAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQwLCAweDJjLCAweDAwLCAweDgwLCAweDAzLCAweDQ5LCAweDA4LCAweDY4LAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHhjMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MCwgMHg3MCwgMHg0NywKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4ODEsIDB4NjcsIDB4MDUsIDB4NDksIDB4OGEsIDB4NjgsCi0weDAwLCAweDJhLCAweDAxLCAweGQxLCAweDg4LCAweDYwLCAweDAyLCAweGUwLCAweGNhLCAweDY4LCAweGMwLCAweDQ2LAotMHg5MCwgMHg2NywgMHhjOCwgMHg2MCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4MDMsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4ODIsIDB4NmYsIDB4YzAsIDB4NDYsCi0weDhhLCAweDYwLCAweDcwLCAweDQ3LCAweGQwLCAweDJjLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHg4MCwgMHgyMCwgMHgxMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmZiwgMHhmNywKLTB4ZDUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NDEsIDB4NjgsCi0weDE5LCAweDQwLCAweDBhLCAweDBmLCAweDUxLCAweDAxLCAweDg5LCAweDFhLCAweDg5LCAweDAwLCAweDBkLCAweDRiLAotMHhjOSwgMHgxOCwgMHg0YiwgMHg4OCwgMHgwMCwgMHgyYiwgMHgwNCwgMHhkMSwgMHgxMSwgMHgxYywgMHhmZiwgMHhmNywKLTB4M2IsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4ZmYsIDB4ZjcsCi0weDA1LCAweGZjLCAweGY4LCAweGU3LCAweDAyLCAweDJiLCAweGY2LCAweGQxLCAweGZmLCAweGY3LCAweDRlLCAweGZiLAotMHhmMywgMHhlNywgMHgwNCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHhlZSwgMHhlNywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAwLCAweGI1LCAweDIwLCAweDIwLCAweDBkLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGZmLCAweGY3LAotMHhiZiwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwgMHgwMSwgMHg4OCwgMHgyMCwgMHgyMywgMHgxOSwgMHg0MywKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4MTAsIDB4MjMsIDB4OTksIDB4NDMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsCi0weDA5LCAweDBhLCAweDAxLCAweGQzLCAweGZmLCAweGY3LCAweDJlLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMywgMHg0OCwgMHgwMSwgMHg2ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2NSwgMHhmOCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4OTgsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDIyLCAweDQ4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDIyLCAweDQ4LCAweGMzLCAweDFkLCAweDQxLCAweDMzLAotMHg0MSwgMHg2ZCwgMHg4MiwgMHg2ZCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg5YywgMHg2OCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OTgsIDB4NDIsIDB4MDAsIDB4ZDEsCi0weDBjLCAweGUwLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDEwLCAweDFhLCAweDU5LCAweDFhLCAweDQxLCAweDE4LAotMHgwMCwgMHhlMCwgMHgxOSwgMHgxYSwgMHgwMSwgMHgyMCwgMHgxMCwgMHgyOSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsIDB4NzgsIDB4NmEsIDB4ZjksIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsCi0weGI4LCAweDZhLCAweGY5LCAweDZhLCAweGMwLCAweDQ2LCAweDQ4LCAweDYwLCAweDEwLCAweDRhLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5MiwgMHhmYiwgMHg2YSwgMHgwZiwgMHg0OCwgMHg0MiwgMHg2ZCwgMHgwMywgMHgyMCwgMHgzOSwgMHg2YSwKLTB4MDEsIDB4ZjAsIDB4ZTIsIDB4ZmQsIDB4MzgsIDB4ODgsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsCi0weDM4LCAweDg4LCAweDQwLCAweDIzLCAweDk4LCAweDQzLCAweDM4LCAweDgwLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHg1NSwgMHhmZiwgMHg5OCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsIDB4ZjcsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDA4LCAweDAwLCAweDExLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHhiMCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgyYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwKLTB4ZmQsIDB4ZmUsIDB4MDcsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsCi0weDA1LCAweDBmLCAweDY4LCAweDAxLCAweDQwLCAweDFiLCAweDgwLCAweDAwLCAweDI2LCAweDQ5LCAweDQ0LCAweDE4LAotMHgyMCwgMHg4OCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywgMHgyMCwgMHg4MCwgMHgyMCwgMHg4OCwgMHg0MSwgMHgwOCwKLTB4MzQsIDB4ZDMsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YTAsIDB4NmMsIDB4ZTEsIDB4NmMsCi0weDQwLCAweDE4LCAweGEwLCAweDY0LCAweDAwLCAweDIwLCAweGUwLCAweDY0LCAweGExLCAweDZiLCAweDIyLCAweDZkLAotMHg4OSwgMHgxOCwgMHhhMSwgMHg2MywgMHgyMCwgMHg2NSwgMHhiOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NSwKLTB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NzgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4NzgsIDB4NjAsIDB4NjEsIDB4NjgsCi0weDM2LCAweDMxLCAweDk0LCAweDI5LCAweDA0LCAweGQ4LCAweDM4LCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYwLAotMHgzOCwgMHgyMCwgMHgwMywgMHhlMCwgMHg5NCwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MCwgMHg5NCwgMHgyMCwKLTB4YjgsIDB4NjEsIDB4MzksIDB4NjgsIDB4NzgsIDB4NjgsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4MWMsCi0weGNiLCAweDFmLCAweDA1LCAweDNiLCAweGZmLCAweGY3LCAweGQ3LCAweGZkLCAweDAyLCAweDIwLCAweDYwLCAweDgwLAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkZiwgMHhmZSwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MDcsIDB4ZmEsIDB4MjgsIDB4MDEsIDB4MDYsIDB4NDksIDB4NDAsIDB4MTgsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDQxLCAweDZiLCAweDAxLCAweDM5LCAweDQxLCAweDYzLAotMHhlZiwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDAsIDB4MjcsCi0weDBmLCAweDRjLCAweDBkLCAweGUwLCAweDQyLCAweDZiLCAweDAxLCAweDNhLCAweDQyLCAweDYzLCAweDAwLCAweDJhLAotMHgwNSwgMHhkYywgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0MiwgMHg2MywgMHhjMCwgMHg2YSwgMHgwMSwgMHhmMCwKLTB4YzYsIDB4ZjksIDB4MDEsIDB4MzcsIDB4MGIsIDB4MmYsIDB4MDcsIDB4ZDIsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MTksCi0weDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDZhLCAweDAwLCAweDI5LCAweGU5LCAweGQxLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDEwLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDMxLCAweGMxLCAweDYwLCAweDBmLCAweDQ5LCAweGM4LCAweDY4LAotMHgwMSwgMHgyOCwgMHgxNywgMHhkMSwgMHhjOCwgMHgxZCwgMHg3OSwgMHgzMCwgMHgwMiwgMHg4OSwgMHgwMCwgMHgyYSwKLTB4MTIsIDB4ZDAsIDB4MDEsIDB4M2EsIDB4MDIsIDB4ODEsIDB4MDIsIDB4ODksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsCi0weDQyLCAweDg5LCAweDAwLCAweDJhLCAweDA4LCAweGQxLCAweGM5LCAweDZmLCAweDAyLCAweDIzLCAweDBhLCAweDY4LAotMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MSwgMHgwMSwgMHgyMSwgMHgwMCwgMHhlMCwKLTB4MDAsIDB4MjEsIDB4NDEsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDA3LCAweDFjLCAweDAxLCAweDIzLCAweGY4LCAweDFkLAotMHg2OSwgMHgzMCwgMHgwMywgMHg3MywgMHgxZSwgMHg0OCwgMHhjMiwgMHgxZCwgMHg3OSwgMHgzMiwgMHg1NCwgMHg4YSwKLTB4NjEsIDB4MWMsIDB4NTEsIDB4ODIsIDB4ZDUsIDB4OGEsIDB4MDAsIDB4MjEsIDB4YWMsIDB4NDIsIDB4MDQsIDB4ZGIsCi0weGM0LCAweDFkLCAweDg5LCAweDM0LCAweDYzLCAweDcwLCAweDUxLCAweDgyLCAweGQxLCAweDgzLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgzYSwgMHg2ZCwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiYSwgMHg2MSwKLTB4ZmIsIDB4NjksIDB4OWEsIDB4NDIsIDB4MDYsIDB4ZDEsIDB4ZjgsIDB4NmMsIDB4MTIsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc5LCAweDYxLCAweDQxLCAweDY5LAotMHhmYSwgMHg2YywgMHg5MSwgMHg0MywgMHg0MSwgMHg2MSwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHhjMSwgMHg2MCwKLTB4MzgsIDB4NjksIDB4MDIsIDB4MjgsIDB4ZjEsIDB4ZDAsIDB4YjgsIDB4NjksIDB4ZjksIDB4NjksIDB4NDEsIDB4MWEsCi0weDAxLCAweGQ1LCAweDc4LCAweDZkLCAweDQxLCAweDE4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBlLCAweGY4LAotMHhmOSwgMHg2OSwgMHgwOSwgMHgxOCwgMHhmOSwgMHg2MSwgMHg3OCwgMHg2ZCwgMHg4MSwgMHg0MiwgMHhlMiwgMHhkMywKLTB4MDgsIDB4MWEsIDB4ZjgsIDB4NjEsIDB4ZGYsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweGY4LCAweGI1LCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweGZmLCAweDIzLAotMHgyMSwgMHgzMywgMHg5ZiwgMHg0MiwgMHgwMSwgMHhkOSwgMHhmZiwgMHgyNywgMHgyMSwgMHgzNywgMHhlMSwgMHg2ZSwKLTB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4Y2IsIDB4ZmMsIDB4MmQsIDB4NGQsIDB4MDAsIDB4MjgsIDB4MTMsIDB4ZDEsCi0weGUwLCAweDFkLCAweDQ5LCAweDMwLCAweDAxLCAweDdhLCAweDAxLCAweDIzLCAweDE5LCAweDQzLCAweDAxLCAweDcyLAotMHgyOSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgyOSwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4YjAsIDB4ZmMsIDB4MDAsIDB4MjAsIDB4ZjgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIwLCAweDY5LCAweDAxLCAweDMwLCAweDIwLCAweDYxLCAweDIzLCAweDQ5LAotMHhjOCwgMHgxZCwgMHhiOSwgMHgzMCwgMHgwMiwgMHg2YiwgMHg5MiwgMHgwMCwgMHg1MSwgMHgxOCwgMHhjMCwgMHgzMSwKLTB4MGYsIDB4NjEsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODksIDB4MDcsIDB4ODksIDB4MGYsIDB4MDEsIDB4NjMsCi0weDIwLCAweDZiLCAweGMyLCAweDE5LCAweDYxLCAweDZkLCAweDhhLCAweDQyLCAweDAzLCAweGQ4LCAweDIzLCAweDIyLAotMHgxMiwgMHgwNSwgMHgzYSwgMHg0MywgMHgwNSwgMHhlMCwgMHgwOSwgMHgxYSwgMHg3ZSwgMHgxYSwgMHgwNywgMHhkMSwKLTB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsIDB4MDksIDB4MTgsCi0weGEyLCAweDZlLCAweDEwLCAweGUwLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDBhLCAweDQzLCAweDAwLCAweDkyLAotMHg2MSwgMHg2ZSwgMHgwOSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhhMiwgMHg2ZSwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwKLTB4N2QsIDB4ZmMsIDB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MzIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsCi0weGEyLCAweDZlLCAweDAwLCAweDIwLCAweDJiLCAweDFjLCAweDAxLCAweGYwLCAweDczLCAweGZjLCAweDIwLCAweDZiLAotMHhjMCwgMHgxOSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg2MSwgMHg2ZCwgMHg4MSwgMHg0MiwgMHgwMCwgMHhkOCwKLTB4NDAsIDB4MWEsIDB4MjAsIDB4NjMsIDB4MzgsIDB4MWMsIDB4YjgsIDB4ZTcsCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDA0LCAweDAwLCAweDFiLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHhjMCwgMHgwMywgMHgwZCwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MGMsIDB4NDksIDB4YzgsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDIsIDB4N2EsCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDAzLCAweGQwLCAweDA3LCAweDcyLCAweDA4LCAweDFjLCAweGZmLCAweGY3LAotMHgzNywgMHhmZiwgMHgwOCwgMHg0OSwgMHhjOCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMiwgMHg3YSwgMHgwMCwgMHgyYSwKLTB4MDMsIDB4ZDAsIDB4MDcsIDB4NzIsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MmQsIDB4ZmYsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLAotMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMCwgMHgyMCwgMHgxOCwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4ZjgsIDB4NjAsIDB4MTYsIDB4NDgsCi0weGM0LCAweDFkLCAweGI5LCAweDM0LCAweDYxLCAweDZiLCAweDg5LCAweDAwLCAweDA5LCAweDE4LCAweGMwLCAweDMxLAotMHgwOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg5MiwgMHgwMCwgMHhkMiwgMHgxOSwgMHg1MSwgMHg2NCwgMHg2MSwgMHg2YiwKLTB4ODksIDB4MDAsIDB4MDgsIDB4MTgsIDB4YzAsIDB4MzAsIDB4MDEsIDB4NjksIDB4NzgsIDB4NjgsIDB4ODAsIDB4MDAsCi0weGMwLCAweDE5LCAweGMwLCAweDZiLCAweDAxLCAweGYwLCAweGEyLCAweGZhLCAweDAxLCAweDIzLCAweDc4LCAweDY4LAotMHg1OCwgMHg0MCwgMHg3OCwgMHg2MCwgMHg2MCwgMHg2YiwgMHgwMSwgMHgzMCwgMHg4MCwgMHgwNywgMHg4MCwgMHgwZiwKLTB4NjAsIDB4NjMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsIDB4NDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA3LCAweGY4LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MzksIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NjgsCi0weDgwLCAweDA5LCAweDAxLCAweGQzLCAweDAyLCAweDIwLCAweDAwLCAweGUwLCAweDc4LCAweDZmLCAweGZjLCAweGY3LAotMHg1OSwgMHhmOCwgMHgwNCwgMHgxYywgMHgwNiwgMHhkMSwgMHgwMSwgMHgyMCwgMHhmOSwgMHgxZCwgMHgxOSwgMHgzMSwKLTB4MDgsIDB4NzEsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjgsIDB4NmMsIDB4MmYsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGJhLCAweDZhLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweDAwLCAweGYwLAotMHg1OSwgMHhmOCwgMHg2NywgMHg2MiwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MGIsIDB4ZmQsIDB4ZWMsIDB4ZTcsIDB4ZjksIDB4NmQsIDB4MDksIDB4NjgsIDB4MDksIDB4MTgsIDB4MDksIDB4MDksCi0weDA5LCAweDAxLCAweDdhLCAweDZkLCAweDhhLCAweDQyLCAweDAwLCAweGQ4LCAweDg5LCAweDFhLCAweGExLCAweDYyLAotMHhiOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0YSwgMHg2YywgMHgwMCwgMHgyYSwgMHgwNywgMHhkMCwKLTB4NGEsIDB4NmMsIDB4MTIsIDB4MWEsIDB4NGEsIDB4NjQsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4YjksIDB4NmEsCi0weDA4LCAweDE4LCAweGI4LCAweDYyLCAweDM4LCAweDY4LCAweGI5LCAweDZhLCAweDgwLCAweDAwLCAweGMwLCAweDE5LAotMHg0MiwgMHg2YiwgMHg5MSwgMHg0MiwgMHgwZSwgMHhkMywgMHgwMCwgMHgyMSwgMHg0MSwgMHg2NCwgMHhiOCwgMHg2YSwKLTB4MzksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4NDksIDB4NmIsIDB4NDAsIDB4MWEsIDB4YjgsIDB4NjIsCi0weGI5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweGM5LCAweDZiLCAweDQwLCAweDE4LCAweGI4LCAweDYyLAotMHhiOCwgMHg2OCwgMHg4MSwgMHgwMCwgMHhjOSwgMHgxOSwgMHg0OSwgMHg2YywgMHgwMCwgMHgyOSwgMHhiOCwgMHhkMSwKLTB4YjksIDB4NmEsIDB4ZmEsIDB4NmIsIDB4OTEsIDB4NDIsIDB4YjQsIDB4ZDAsIDB4M2EsIDB4NmMsIDB4OTEsIDB4NDIsCi0weGIxLCAweGQwLCAweDAxLCAweDIzLCAweDU4LCAweDQwLCAweGI4LCAweDYwLCAweDgwLCAweDAwLCAweGMwLCAweDE5LAotMHhjMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHhmOCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwKLTB4MDEsIDB4MzgsIDB4ZjgsIDB4NjAsIDB4MzgsIDB4NjksIDB4MDAsIDB4MjgsIDB4YTEsIDB4ZDAsIDB4MDEsIDB4MzgsCi0weDM4LCAweDYxLCAweDllLCAweGU3LCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHhmNywgMHhiNSwgMHg5MCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyMCwgMHgwNSwgMHg5MCwKLTB4MDIsIDB4OTAsIDB4MDAsIDB4MjIsIDB4MDEsIDB4OTIsIDB4ZjksIDB4NDgsIDB4YzAsIDB4NmEsIDB4YzAsIDB4NDYsCi0weGE4LCAweDYxLCAweGEwLCAweDY4LCAweDgxLCAweDAwLCAweDA5LCAweDE5LCAweDQ5LCAweDZiLCAweGMwLCAweDQ2LAotMHgyMCwgMHg2MCwgMHhlMSwgMHg2MiwgMHgxMiwgMHg5YSwgMHhkMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhOCwgMHg2MCwKLTB4MTIsIDB4OWEsIDB4NTEsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MGMsIDB4OTEsIDB4ZjAsIDB4NDgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweGQ3LCAweDFkLCAweDA5LCAweDM3LCAweGUwLCAweDZhLAotMHhjMSwgMHgxYiwgMHgwOSwgMHgwOSwgMHhlMywgMHgxZCwgMHgxOSwgMHgzMywgMHgwYywgMHg5YSwgMHhjMCwgMHg0NiwKLTB4MGYsIDB4OTMsIDB4ZWIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MGUsIDB4OTMsIDB4OTEsIDB4NDIsIDB4MDEsIDB4ZDMsCi0weGI4LCAweDQyLCAweDIxLCAweGQ4LCAweGUxLCAweDY4LCAweDAyLCAweDI5LCAweDFlLCAweGQyLCAweDAxLCAweDIwLAotMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MSwgMHgwMCwgMHgyMCwgMHgwMywgMHg5OSwgMHgwMSwgMHhmMCwKLTB4NTcsIDB4ZmIsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsIDB4MDEsIDB4MzAsCi0weGQ4LCAweDYzLCAweDAxLCAweDIwLCAweDgwLCAweDA2LCAweDAwLCAweDI3LCAweDY4LCAweDYwLCAweGFmLCAweDYxLAotMHhkZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHhkZCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4ZGMsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4M2EsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4NWMsIDB4ZTMsCi0weGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDdiLCAweGZjLCAweDA3LCAweDFjLAotMHhkNywgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMCwgMHgyOCwgMHg2NCwgMHhkMCwgMHgzOCwgMHg3OCwgMHg0MCwgMHgwNywKLTB4NDAsIDB4MGYsIDB4MDMsIDB4MjgsIDB4NjAsIDB4ZDEsIDB4MDUsIDB4OTgsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDA1LCAweDkwLCAweDM4LCAweDc4LCAweGYwLCAweDIzLCAweDE4LCAweDQwLCAweDU4LCAweGQxLAotMHhlMCwgMHg2YSwgMHhjMCwgMHgxYiwgMHgwMCwgMHgwOSwgMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHgwMiwgMHhkMiwKLTB4ZTAsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MDUsIDB4ZDMsIDB4Y2IsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4ZjAsCi0weDgzLCAweGZmLCAweDA2LCAweDFjLCAweDA2LCAweGQxLCAweDAzLCAweDliLCAweDI4LCAweDFjLCAweDM5LCAweDFjLAotMHgyMiwgMHgxYywgMHgwMCwgMHhmMCwgMHg4YiwgMHhmYywgMHgxNiwgMHhlMSwgMHgyZSwgMHg2MiwgMHhmOCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4YjgsIDB4ODksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4YzEsIDB4NDksCi0weGM5LCAweDY4LCAweDAwLCAweGYwLCAweDcwLCAweGZmLCAweGY4LCAweDg5LCAweDAwLCAweDI4LCAweDAzLCAweGQwLAotMHhiZCwgMHg0OSwgMHhjOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg2OSwgMHhmZiwgMHg3YSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NzIsIDB4NjEsIDB4YjksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjEsIDB4NjEsIDB4MzAsIDB4MWMsIDB4YjgsIDB4NDksCi0weDA5LCAweDY4LCAweDAwLCAweGYwLCAweDVlLCAweGZmLCAweDAwLCAweDI4LCAweDE3LCAweGQxLCAweDMwLCAweDFjLAotMHhiNCwgMHg0OSwgMHg0OSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg1NywgMHhmZiwgMHgxMCwgMHgzNywgMHhlMCwgMHg2YSwKLTB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjcsIDB4ZmMsIDB4MDcsIDB4MWMsCi0weDY4LCAweDY4LCAweGFmLCAweDRiLCAweDE4LCAweDQzLCAweDY4LCAweDYwLCAweDAwLCAweDIwLCAweGE4LCAweDYxLAotMHhhYywgMHgyMywgMHhhOCwgMHg2OCwgMHg5OCwgMHg0MywgMHhhOCwgMHg2MCwgMHhiMCwgMHhlMCwgMHhhOCwgMHg2OSwKLTB4YTgsIDB4MjgsIDB4MDEsIDB4ZDIsIDB4YTgsIDB4MjAsIDB4YTgsIDB4NjEsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsCi0weGI4LCAweDQyLCAweDZjLCAweGQ4LCAweDljLCAweGUwLCAweGE1LCAweGUwLCAweGE0LCAweGUwLCAweDEwLCAweDI4LAotMHg2OCwgMHhkMSwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg2OCwgMHg2OCwgMHgxOCwgMHg0MCwgMHgwMSwgMHgwZiwKLTB4NDgsIDB4MDEsIDB4NDAsIDB4MWEsIDB4ODAsIDB4MDAsIDB4YTAsIDB4NGEsIDB4ODIsIDB4MTgsIDB4MDEsIDB4OTIsCi0weDc4LCAweDg4LCAweDQyLCAweDBiLCAweDMxLCAweGQzLCAweDgyLCAweDBiLCAweDJmLCAweGQzLCAweDlkLCAweDQ4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwMiwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg4MCwKLTB4NzgsIDB4ODgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsCi0weGI4LCAweDY4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYwLCAweDc4LCAweDY4LCAweDAxLCAweDlhLAotMHhjMCwgMHg0NiwgMHgxMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2NCwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4OGYsIDB4NDksIDB4NDAsIDB4MTgsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYzLCAweDAxLCAweDlhLCAweDUwLCAweDY4LCAweDM2LCAweDMwLAotMHg5NCwgMHgyOCwgMHgwMSwgMHhkOCwgMHgzOCwgMHgyMCwgMHgwMCwgMHhlMCwgMHg5NCwgMHgyMCwgMHhhOCwgMHg2MSwKLTB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MjgsIDB4ZDgsIDB4NTgsIDB4ZTAsIDB4N2EsIDB4ODgsCi0weDkyLCAweDBiLCAweDAzLCAweGQzLCAweDg1LCAweDQ4LCAweGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDIzLCAweGUwLAotMHgwMSwgMHgyMiwgMHgxMiwgMHgwMywgMHgwMiwgMHg0MCwgMHg4MywgMHg0YiwgMHgxZCwgMHhkMCwgMHgwMywgMHg5MywKLTB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsIDB4YjgsIDB4NjgsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYwLCAweDc4LCAweDY4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LAotMHgxMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKLTB4OTAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4NzUsIDB4NDksCi0weDQwLCAweDE4LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYzLCAweDAyLCAweGUwLCAweDMzLCAweGUwLAotMHgyYSwgMHhlMCwgMHgwMywgMHg5MywgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MSwKLTB4MTIsIDB4OWEsIDB4NTAsIDB4NzgsIDB4MDUsIDB4OTksIDB4NDMsIDB4MWEsIDB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsCi0weGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDkyLCAweGZiLAotMHgwNywgMHgxYywgMHgwMSwgMHg5YSwgMHg1MCwgMHg2YiwgMHg5MSwgMHg2YiwgMHgwOSwgMHgwMSwgMHg0MCwgMHgxOCwKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4N2QsIDB4ZmIsIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweGQwLCAweDY0LCAweDAxLCAweDlhLCAweDBiLCAweDliLCAweGMwLCAweDQ2LCAweDEzLCAweDY1LAotMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg2OCwgMHg2OCwgMHgxOCwgMHg0MywgMHg2OCwgMHg2MCwgMHgwMCwgMHgyMCwKLTB4YTgsIDB4NjEsIDB4MGQsIDB4ZTAsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsCi0weDIwLCAweDFjLCAweDAwLCAweGYwLCAweDcxLCAweGZiLCAweDA3LCAweDFjLCAweDM4LCAweDc4LCAweDQwLCAweDA3LAotMHg0MCwgMHgwZiwgMHgwMywgMHgyOCwgMHgwMCwgMHhkMSwgMHhmOCwgMHhlNiwgMHhhOCwgMHg2OSwgMHgwMywgMHg5OSwKLTB4MDEsIDB4ZjAsIDB4MjYsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MmEsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsCi0weDAwLCAweGYwLCAweDc5LCAweGZiLCAweGE4LCAweDY4LCAweDgwLCAweDA5LCAweDA0LCAweGQzLCAweDMwLCAweDFjLAotMHg0OSwgMHg0OSwgMHg0OSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg4MSwgMHhmZSwgMHg0MSwgMHg0OSwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4ZjAsIDB4MTQsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsCi0weDAxLCAweDMwLCAweGQ4LCAweDYzLCAweDExLCAweGUwLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LAotMHg0OCwgMHg3MSwgMHg4MCwgMHgwNiwgMHgwMCwgMHgyNywgMHg2OCwgMHg2MCwgMHhhZiwgMHg2MSwgMHgzYSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MzksIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MzksIDB4NGIsCi0weDAwLCAweDIwLCAweDAxLCAweGYwLCAweGYzLCAweGY5LCAweDAwLCAweDIwLCAweDE1LCAweGUyLCAweDA1LCAweDk4LAotMHgwYywgMHg5OSwgMHgwOCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwYywgMHg5MCwgMHgwYiwgMHg5MCwKLTB4MGMsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsCi0weDQ4LCAweDcxLCAweDI4LCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkwLCAweDAwLCAweDI2LCAweDAwLCAweDIwLAotMHgwOCwgMHg5MCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg5MiwgMHgwYywgMHg5OCwgMHgwMSwgMHgzOCwgMHgwZCwgMHg5MCwKLTB4YTMsIDB4ZTAsIDB4NzgsIDB4ODgsIDB4OGEsIDB4MWIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4OTAsIDB4NDIsCi0weDA1LCAweGRkLCAweDA3LCAweDkyLCAweDgwLCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweDkwLAotMHgwMCwgMHhlMCwgMHgwNywgMHg5MCwgMHgwOCwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwNywgMHhkMSwgMHgwZCwgMHg5OCwKLTB4MGEsIDB4OWEsIDB4OTAsIDB4NDIsIDB4MDcsIDB4ZGQsIDB4MDcsIDB4OTgsIDB4MzAsIDB4MTgsIDB4ODgsIDB4NDIsCi0weDAzLCAweGQ4LCAweDAxLCAweDIwLCAweDQwLCAweDA1LCAweDA2LCAweDkwLCAweDFjLCAweGUwLCAweDExLCAweDIwLAotMHg0MCwgMHgwNSwgMHgwNiwgMHg5MCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMSwKLTB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDYsIDB4OTAsIDB4YjEsIDB4MDcsIDB4ODksIDB4MGYsIDB4MGYsIDB4ZDAsCi0weDA3LCAweDk4LCAweGMwLCAweDA2LCAweGMwLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDI4LCAweDA5LCAweGRiLAotMHgxZSwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMywgMHgyOSwgMHgwNSwgMHhkMSwgMHgwMSwgMHhlMCwgMHgwMiwgMHgyOSwKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MDIsIDB4OTAsIDB4ZGUsIDB4ZTcsIDB4MGEsIDB4OWEsIDB4MDAsIDB4MmEsCi0weDA0LCAweGQxLCAweDAxLCAweDIzLCAweGRiLCAweDA1LCAweDA2LCAweDk4LCAweDE4LCAweDQzLCAweDA2LCAweDkwLAotMHgwNywgMHg5OCwgMHgwNiwgMHg5OSwgMHgwOCwgMHg0MywgMHgwMiwgMHgxYywgMHgwMCwgMHg5MCwgMHgwNCwgMHg5OCwKLTB4ODMsIDB4MTksIDB4MWQsIDB4ZTAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDEsIDB4NDksIDB4ZmYsIDB4ZmYsCi0weDI4LCAweDBmLCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDEyLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHg2MCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NTUsIDB4MzIsIDB4ZmYsIDB4ZmYsCi0weGFjLCAweDVlLCAweDIxLCAweDQwLCAweDBkLCAweDNkLCAweGZmLCAweGZmLCAweGNkLCAweDMxLCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4NmIsIDB4ZjksIDB4MDcsIDB4OTgsIDB4MzYsIDB4MTgsIDB4MDIsIDB4OTgsCi0weDAwLCAweDI4LCAweDE2LCAweGQwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDA0LCAweGQxLAotMHgwOSwgMHgyMywgMHg1YiwgMHgwNCwgMHgwNiwgMHg5OCwgMHgxOCwgMHg0MywgMHgwNiwgMHg5MCwgMHgwNiwgMHg5OCwKLTB4YzIsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4YzEsIDB4NDgsCi0weDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLCAweDAxLCAweGYwLCAweDUxLCAweGY5LCAweDAwLCAweDIwLAotMHgwMiwgMHg5MCwgMHgwOCwgMHg5OCwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMSwgMHgwYiwgMHg5YiwgMHgwMSwgMHgzYiwKLTB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MGMsIDB4ZDgsIDB4MjAsIDB4MWMsCi0weDAwLCAweGYwLCAweDhhLCAweGZhLCAweDA3LCAweDFjLCAweDA3LCAweGUwLCAweDc4LCAweDY4LCAweDA3LCAweDlhLAotMHg4MCwgMHgxOCwgMHg3OCwgMHg2MCwgMHg3OCwgMHg4OCwgMHgwNywgMHg5YSwgMHg4MCwgMHgxYSwgMHg3OCwgMHg4MCwKLTB4MGEsIDB4OWEsIDB4NTAsIDB4MWMsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGEsIDB4OTIsIDB4MGMsIDB4OTgsCi0weDBhLCAweDlhLCAweDgyLCAweDQyLCAweDAzLCAweGRhLCAweGE5LCAweDY5LCAweGIxLCAweDQyLCAweDAwLCAweGQ5LAotMHg1MywgMHhlNywgMHhhOCwgMHg2OSwgMHhiMCwgMHg0MiwgMHg2YiwgMHhkMSwgMHhhOCwgMHg2OCwgMHgwMSwgMHgwOSwKLTB4NjksIDB4ZDIsIDB4MDgsIDB4OWEsIDB4MDAsIDB4MmEsIDB4NTYsIDB4ZDAsIDB4MGMsIDB4OTksIDB4MGEsIDB4OWEsCi0weDhhLCAweDQyLCAweDNlLCAweGRiLCAweGIxLCAweDA3LCAweDg5LCAweDBmLCAweDBjLCAweGQwLCAweDA4LCAweDlhLAotMHhkMiwgMHgwNiwgMHhkMiwgMHgwZSwgMHgwYiwgMHhkMCwgMHgxZSwgMHgyYSwgMHgwNiwgMHhkYiwgMHgxZSwgMHgyYSwKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDAsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDIsCi0weDAyLCAweDk5LCAweDAwLCAweDI5LCAweDIxLCAweGQwLCAweDA4LCAweDlhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHgwMCwgMHgyMCwgMHgzYSwgMHgxZCwgMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwKLTB4MDEsIDB4ZjksIDB4MDgsIDB4OTgsIDB4MzYsIDB4MTgsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsCi0weDAyLCAweGQwLCAweDAxLCAweDIwLCAweDQwLCAweDA2LCAweDAwLCAweGUwLCAweDkyLCAweDQ4LCAweDAxLCAweDIyLAotMHgwMiwgMHg0MywgMHgwMCwgMHg5MiwgMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHg4ZSwgMHg0OCwgMHgwMSwgMHg2ZCwKLTB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZWMsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4OTAsCi0weDE1LCAweGUwLCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQwLCAweDAxLCAweDIwLCAweDQwLCAweDA2LAotMHgwMCwgMHhlMCwgMHg4OCwgMHg0OCwgMHgwOCwgMHg5YSwgMHgwMiwgMHg0MywgMHgwMCwgMHhlMCwgMHgwOCwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsCi0weDA2LCAweGNhLCAweDAxLCAweGYwLCAweGQ1LCAweGY4LCAweDA4LCAweDk4LCAweDM2LCAweDE4LCAweDEwLCAweDM3LAotMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgxNCwgMHhmYSwKLTB4MDcsIDB4MWMsIDB4NjgsIDB4NjgsIDB4ODAsIDB4MGUsIDB4NmIsIDB4ZDIsIDB4MGEsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDA5LCAweDkwLCAweDBjLCAweDk5LCAweDg4LCAweDQyLCAweDVjLCAweGRhLCAweDBkLCAweDk4LCAweDA5LCAweDk5LAotMHg4OCwgMHg0MiwgMHgwMywgMHhkMCwgMHg3YSwgMHg4OCwgMHgxZSwgMHhlMCwgMHg1ZiwgMHhlMCwgMHg1ZSwgMHhlMCwKLTB4NzgsIDB4ODgsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDYsIDB4MDIsIDB4NDMsIDB4YTksIDB4NjgsIDB4OGMsIDB4MjMsCi0weDE5LCAweDQwLCAweDAyLCAweGQxLCAweDA5LCAweDIzLCAweDViLCAweDA0LCAweDFhLCAweDQzLCAweGIxLCAweDA3LAotMHg4OSwgMHgwZiwgMHgwZSwgMHhkMCwgMHhjMywgMHgwNiwgMHhkYiwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyYiwKLTB4MDksIDB4ZGIsIDB4MWUsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MDEsIDB4ZTAsCi0weDAyLCAweDI5LCAweDAyLCAweGQzLCAweDAxLCAweDIxLCAweDAyLCAweDkxLCAweDAyLCAweDFjLCAweDA5LCAweDk4LAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwNSwgMHgxYSwgMHg0MywgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsCi0weDhmLCAweGY4LCAweDc4LCAweDg4LCAweDg2LCAweDE5LCAweDEwLCAweDM3LCAweDAyLCAweDk4LCAweDAwLCAweDI4LAotMHgxNCwgMHhkMCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwKLTB4NDAsIDB4MDYsIDB4MDAsIDB4ZTAsIDB4NTcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weDA0LCAweDk4LCAweDgzLCAweDE5LCAweDUzLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLAotMHgwMSwgMHhmMCwgMHg3NiwgMHhmOCwgMHgwMCwgMHgyMCwgMHgwMiwgMHg5MCwgMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwKLTB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDksIDB4OTgsCi0weDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA5LCAweDkwLAotMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHhhMiwgMHhkYiwgMHg2OCwgMHg2OCwgMHgzMCwgMHg0MywgMHgwMSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NjgsIDB4NjAsIDB4ZTgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmEsIDB4MjgsIDB4ZTAsCi0weDI3LCAweGUwLCAweGE4LCAweDY4LCAweDAwLCAweDA5LCAweDE0LCAweGQzLCAweDY4LCAweDY4LCAweDgwLCAweDBlLAotMHgxNSwgMHhkMiwgMHgwMSwgMHg5YSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHgwMSwgMHg5YSwgMHg1MCwgMHg2YiwKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODksIDB4ZjksIDB4MDEsIDB4OWEsCi0weGMwLCAweDQ2LCAweDkwLCAweDY0LCAweDAxLCAweDlhLCAweDBiLCAweDliLCAweGMwLCAweDQ2LCAweDkzLCAweDYzLAotMHgwMywgMHhlMCwgMHhlOCwgMHg2YSwgMHgzMSwgMHgxYywgMHgwMCwgMHhmMCwgMHg1ZCwgMHhmYSwgMHg2OCwgMHg2OCwKLTB4MzAsIDB4NDMsIDB4NjgsIDB4NjAsIDB4YTgsIDB4NjksIDB4YjAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDgwLCAweDFiLCAweDAwLCAweGYwLCAweGVlLCAweGY5LCAweGFlLCAweDYxLCAweGE4LCAweDY4LAotMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwYiwgMHhkMCwgMHgyZiwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MmEsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCi0weDAwLCAweDIwLCAweDAxLCAweGYwLCAweDIzLCAweGY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDIwLCAweDZkLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwgMHhlMSwgMHg2OSwgMHg4MSwgMHg0MiwKLTB4MTIsIDB4ZDAsIDB4MjIsIDB4NjksIDB4MDIsIDB4MmEsIDB4MGYsIDB4ZDIsIDB4NDEsIDB4MWEsIDB4MDEsIDB4ZDUsCi0weDYwLCAweDZkLCAweDQxLCAweDE4LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDNmLCAweGZiLCAweGUxLCAweDY5LAotMHg0MCwgMHgxOCwgMHhlMCwgMHg2MSwgMHg2MSwgMHg2ZCwgMHg4OCwgMHg0MiwgMHgyNCwgMHhkMywgMHg0MCwgMHgxYSwKLTB4ZTAsIDB4NjEsIDB4MjEsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MWYsIDB4ZDEsIDB4MjAsIDB4NjksIDB4MDIsIDB4MjgsCi0weDFjLCAweGQyLCAweDAxLCAweDIwLCAweDYwLCAweDYxLCAweDE4LCAweDQ4LCAweDQxLCAweDY5LCAweGUyLCAweDZjLAotMHgwYSwgMHg0MywgMHg0MiwgMHg2MSwgMHg4MSwgMHg2OSwgMHhlMywgMHg2YywgMHg5OSwgMHg0MywgMHg4MSwgMHg2MSwKLTB4MDEsIDB4MjEsIDB4MDksIDB4MDUsIDB4Y2EsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjEsCi0weDhiLCAweDAyLCAweDIwLCAweDZkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLAotMHhlMSwgMHg2OSwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHhjYywgMHhmYSwKLTB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZjksIDB4MGMsIDB4OTgsIDB4MDUsIDB4OTksIDB4NDAsIDB4MTgsCi0weDAwLCAweDAxLCAweDEwLCAweDMwLCAweDY4LCAweDYxLCAweDEzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MTIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4NTIsIDB4MDIsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDQwLCAweDIwLCAweDJkLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLAotMHgwMywgMHhmOSwgMHgwNywgMHgxYywgMHg4MSwgMHg2OSwgMHg0NCwgMHg2YSwgMHhhMCwgMHg2ZiwgMHgwMCwgMHhmMCwKLTB4NDUsIDB4ZmUsIDB4MDAsIDB4MjAsIDB4ZTEsIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4NzksIDB4NjgsCi0weGM5LCAweDBlLCAweDA5LCAweGQzLCAweGY4LCAweDZhLCAweDAwLCAweDAxLCAweDI0LCAweDQ5LCAweDQwLCAweDE4LAotMHgyNCwgMHg0YiwgMHhjMCwgMHgxOCwgMHgwMSwgMHg2OCwgMHgwMSwgMHgzOSwgMHgwMSwgMHg2MCwgMHgzNiwgMHhlMCwKLTB4ZTEsIDB4NmQsIDB4MDksIDB4NjgsIDB4MjIsIDB4NmUsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4MjAsIDB4NGUsCi0weGY1LCAweDFkLCAweDc5LCAweDM1LCAweDAxLCAweDIzLCAweGU5LCAweDZiLCAweDE5LCAweDQzLCAweGU5LCAweDYzLAotMHhiOSwgMHg2YSwgMHhlMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhiOSwgMHg2YSwgMHgyMiwgMHg2ZSwKLTB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4NjEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YTksIDB4NmIsCi0weDAxLCAweDMxLCAweGE5LCAweDYzLCAweDA4LCAweDI5LCAweDA3LCAweGQzLCAweGE4LCAweDYzLCAweDAxLCAweDIwLAotMHgwMCwgMHhmMCwgMHg4NiwgMHhmOCwgMHhlOCwgMHg2YiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHhlOCwgMHg2MywKLTB4NzgsIDB4NjgsIDB4ODEsIDB4MGUsIDB4MGYsIDB4ZDIsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjEsIDB4MTgsCi0weGM5LCAweDY4LCAweDAwLCAweDI5LCAweDA2LCAweGQwLCAweDAwLCAweDA4LCAweDA0LCAweGQyLCAweDIwLCAweDFjLAotMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHg0MywgMHhmOCwgMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MDUsIDB4ZmEsIDB4MzgsIDB4MWMsIDB4ZmIsIDB4ZjcsIDB4MDYsIDB4ZmMsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDBiLCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhiNCwgMHgwYywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsCi0weDAxLCAweDc5LCAweDAwLCAweDI5LCAweDA0LCAweGQwLCAweDAwLCAweDIxLCAweDAxLCAweDcxLCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHg1NiwgMHhmYiwgMHhmOCwgMHg2OCwgMHgwMiwgMHgyOCwgMHgwZCwgMHhkMCwgMHhiOCwgMHg2OCwKLTB4ODAsIDB4MDAsIDB4YzIsIDB4MTksIDB4NTAsIDB4NmMsIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDAsIDB4YjgsIDB4NmEsCi0weDQxLCAweDc4LCAweDA5LCAweDAxLCAweDEwLCAweDMxLCAweDUyLCAweDZiLCAweDEwLCAweDFhLCAweDg4LCAweDQyLAotMHgwNSwgMHhkMywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0MiwgMHhmYiwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MjgsIDB4ZmEsIDB4ZjgsIDB4ZTcsIDB4NzgsIDB4NjgsCi0weDgwLCAweDAwLCAweGMwLCAweDE5LCAweGMwLCAweDZiLCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweGYxLCAweGU3LAotMHhiMCwgMHhiNSwgMHg4NywgMHhiMCwgMHgwZiwgMHgxYywgMHg4MCwgMHg2ZiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwKLTB4MDAsIDB4MjQsIDB4MTMsIDB4NGQsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZTgsIDB4MTgsIDB4ODAsIDB4NjksCi0weDAwLCAweDI4LCAweDE3LCAweGQwLCAweDY5LCAweDQ2LCAweGEyLCAweDAwLCAweDUyLCAweDE5LCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhkMiwgMHgxOCwgMHg5MiwgMHg2OSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5MiwgMHhmYiwKLTB4MDAsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MDEsIDB4MzQsIDB4YTAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGMwLCAweDE4LCAweDgwLCAweDY5LCAweDAwLCAweDI4LCAweGVhLCAweGQxLCAweDAxLCAweGUwLAotMHgwMSwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5ZCwgMHhmOSwgMHgwNywgMHhiMCwKLTB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGI4LCAweGI1LCAweGMyLCAweDA3LCAweGQyLCAweDBmLCAweDE2LCAweDRjLCAweDE2LCAweDQ5LCAweDAxLCAweGQwLAotMHgwOCwgMHgyMiwgMHgwOCwgMHhlMCwgMHg4MiwgMHgwOCwgMHgwNSwgMHhkMywgMHgwYywgMHgyMiwgMHhhNCwgMHgxOCwKLTB4MGIsIDB4NjgsIDB4ZGYsIDB4MWQsIDB4MTUsIDB4MzcsIDB4MDMsIDB4ZTAsIDB4MWMsIDB4MjIsIDB4MGIsIDB4NjgsCi0weGRmLCAweDFkLCAweDA5LCAweDM3LCAweDBmLCAweDRiLCAweDFkLCAweDc4LCAweDAwLCAweDJkLCAweDEzLCAweGQwLAotMHg1YiwgMHg3OCwgMHgwMCwgMHgyYiwgMHgxMCwgMHhkMCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHgxYSwgMHg0MywKLTB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4NWIsIDB4MDgsIDB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NGEsIDB4NjgsCi0weDAxLCAweDIwLCAweDM5LCAweDFjLCAweDIzLCAweDFjLCAweDAwLCAweGYwLCAweGRmLCAweGZlLCAweGI4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMywgMHgyMywgMHgxYiwgMHgwNiwgMHgxYSwgMHg0MywgMHhmMSwgMHhlNywKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4ZjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDIxLCAweGMxLCAweDYxLCAweDA1LCAweDQ5LCAweDhhLCAweDY4LCAweDAwLCAweDJhLCAweDAxLCAweGQxLAotMHg4OCwgMHg2MCwgMHgwMiwgMHhlMCwgMHhjYSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMCwgMHg2MSwgMHhjOCwgMHg2MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDMsIDB4NDksIDB4ODgsIDB4NjgsCi0weDAwLCAweDI4LCAweDAyLCAweGQwLCAweGMyLCAweDY5LCAweGMwLCAweDQ2LCAweDhhLCAweDYwLCAweDcwLCAweDQ3LAotMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgxYywgMHgwMSwgMHgyMywgMHg4OCwgMHg2OCwgMHg1OCwgMHg0MCwKLTB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4M2EsIDB4Y2EsIDB4NjAsIDB4MGEsIDB4NjksIDB4MDEsIDB4M2EsCi0weDgwLCAweDAwLCAweDBhLCAweDYxLCAweDQyLCAweDE4LCAweGQwLCAweDZiLCAweDUzLCAweDZiLCAweGMwLCAweDQ2LAotMHhjYiwgMHg2MiwgMHgwYiwgMHg2OCwgMHg5YiwgMHgwMCwgMHg1OSwgMHgxOCwgMHg0OSwgMHg2YywgMHg1MywgMHg2YywKLTB4YzksIDB4MTgsIDB4NTEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4OGEsIDB4NjgsIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsCi0weGQzLCAweDZiLCAweDgzLCAweDQyLCAweDE3LCAweGQxLCAweGQwLCAweDFkLCAweDNkLCAweDMwLCAweDBhLCAweDY4LAotMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHg2YywgMHgwMywgMHg2OCwgMHg5YSwgMHgxYSwgMHgwMiwgMHg2MCwKLTB4MDEsIDB4MjMsIDB4ODgsIDB4NjgsIDB4NTgsIDB4NDAsIDB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4MzIsCi0weGNhLCAweDYwLCAweDBhLCAweDY5LCAweDAxLCAweDMyLCAweDgwLCAweDAwLCAweDQwLCAweDE4LCAweDBhLCAweDYxLAotMHg0MCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHg3MCwgMHg0NywgMHhiOCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MWQsIDB4MWMsIDB4MTcsIDB4MWMsIDB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDksIDB4ZmYsCi0weDAwLCAweDIwLCAweDI5LCAweDFjLCAweDAwLCAweGYwLCAweDdjLCAweGZlLCAweDAxLCAweDIwLCAweGY5LCAweDFkLAotMHgxOSwgMHgzMSwgMHg0OCwgMHg3MSwgMHg4MCwgMHgwNiwgMHg2MCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhhMCwgMHg2MSwKLTB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDYsIDB4NDgsCi0weDAxLCAweDZkLCAweDQyLCAweDZkLCAweDA1LCAweDRiLCAweDAwLCAweDIwLCAweDAwLCAweGYwLCAweDYyLCAweGZlLAotMHhiOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHgwMiwKLTB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDYsIDB4NDksIDB4MGEsIDB4NjgsCi0weDEwLCAweDE4LCAweDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LAotMHgwMywgMHg0OSwgMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsCi0weDA2LCAweDQ5LCAweDBhLCAweDY4LCAweDEwLCAweDE4LCAweDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLAotMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMywgMHg0OSwgMHgwYSwgMHg3OSwgMHgwMSwgMHgzMiwgMHgwYSwgMHg3MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDA2LCAweDQ5LCAweDBhLCAweDY4LCAweDEwLCAweDE4LAotMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgwMywgMHg0OSwKLTB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsIDB4NzAsIDB4NDcsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAyLCAweDQ4LCAweDQxLCAweDc5LCAweDAxLCAweDMxLCAweDQxLCAweDcxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg5MCwgMHhiNCwgMHg4MiwgMHgwMCwKLTB4MTcsIDB4NGIsIDB4OWEsIDB4NTgsIDB4OGIsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODksIDB4MDgsIDB4MGIsIDB4MWQsCi0weDAxLCAweGUwLCAweDg5LCAweDA4LCAweGNiLCAweDFjLCAweDExLCAweDY5LCAweGQ3LCAweDY4LCAweDEyLCAweDRjLAotMHg4MCwgMHgwMCwgMHgyMCwgMHg1OCwgMHg0MCwgMHg2OCwgMHhiOSwgMHg0MiwgMHgwMywgMHhkMSwgMHg4MSwgMHg0MiwKLTB4MTksIDB4ZDksIDB4MTEsIDB4NjgsIDB4MTcsIDB4ZTAsIDB4MDAsIDB4MjQsIDB4YjksIDB4NDIsIDB4MDksIDB4ZDksCi0weDgxLCAweDQyLCAweDEyLCAweGQ5LCAweDExLCAweDY4LCAweDc4LCAweDFhLCAweDAwLCAweGQ1LCAweDAzLCAweDMwLAotMHg4MCwgMHgxMCwgMHg5OCwgMHg0MiwgMHgwYiwgMHhkOCwgMHgwNywgMHhlMCwgMHg4MSwgMHg0MiwgMHgwNSwgMHhkOCwKLTB4NzgsIDB4MWEsIDB4MDAsIDB4ZDUsIDB4MDMsIDB4MzAsIDB4ODAsIDB4MTAsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDgsCi0weDIwLCAweDFjLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweGM4LCAweDFkLCAweDA1LCAweDMwLCAweGZhLCAweGU3LAotMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4MCwgMHgwMCwgMHgwZiwgMHg0YSwgMHgxNywgMHg1OCwKLTB4ODgsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODgsIDB4MDgsIDB4MDQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4ODgsIDB4MDgsCi0weDAzLCAweDMwLCAweDM5LCAweDY5LCAweDdhLCAweDY4LCAweDkxLCAweDQyLCAweDA5LCAweGQ5LCAweDM5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgzOSwgMHg2MSwgMHhmOSwgMHg2OCwgMHg3YSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwMiwgMHhkOSwKLTB4MzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4ODEsIDB4MDAsIDB4MzgsIDB4NjksIDB4MDAsIDB4ZjAsCi0weGQxLCAweGZkLCAweDM4LCAweDYxLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwMywgMHgyMSwgMHgwOSwgMHgwNywgMHgwMSwgMHg0MCwKLTB4MGMsIDB4MGYsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjIsIDB4OTIsIDB4MDcsIDB4MDIsIDB4NDAsCi0weGEzLCAweDAwLCAweDFjLCAweDRmLCAweGZmLCAweDU4LCAweDg5LCAweDA3LCAweDg5LCAweDBmLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHg4MCwgMHgwOCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgyYSwKLTB4MDEsIDB4ZDAsIDB4MDIsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MzAsIDB4ZjksIDB4NjgsIDB4N2EsIDB4NjgsCi0weDkxLCAweDQyLCAweDAyLCAweGQ5LCAweDM5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDgxLCAweDAwLAotMHhmOCwgMHg2OCwgMHgwMCwgMHhmMCwgMHhhNSwgMHhmZCwgMHhmOCwgMHg2MCwgMHgwZiwgMHg0OCwgMHgwMCwgMHg2OSwKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MjAsIDB4MWMsCi0weGZlLCAweGY3LCAweGNhLCAweGZjLCAweDBiLCAweDQ5LCAweGM4LCAweDFkLCAweDE5LCAweDMwLCAweDAzLCAweDc5LAotMHgwMCwgMHgyMiwgMHgwMCwgMHgyYiwgMHgwNSwgMHhkMSwgMHgwOSwgMHg0OSwgMHhjOCwgMHgxZCwgMHgxOSwgMHgzMCwKLTB4MDMsIDB4NzksIDB4MDAsIDB4MmIsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4NzEsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDc5LCAweGY5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDcwLCAweDA0LCAweDAwLCAweDgwLAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MmIsIDB4NDksIDB4MDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDEsIDB4NDEsIDB4NjgsCi0weDI5LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDgxLCAweDY4LAotMHg0OSwgMHgwOCwgMHgwMiwgMHhkMywgMHgwOSwgMHgyMSwgMHgwOSwgMHgwNCwgMHgwMSwgMHhlMCwgMHgwZCwgMHgyMSwKLTB4MDksIDB4MDQsIDB4MGMsIDB4YzgsIDB4MDgsIDB4MzgsIDB4MTksIDB4NDMsIDB4ODcsIDB4NjgsIDB4YmIsIDB4MGEsCi0weDAzLCAweGQzLCAweDQzLCAweDY4LCAweDViLCAweDA4LCAweDAwLCAweGQzLCAweDAxLCAweDMxLCAweDQwLCAweDY4LAotMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwgMHgwNywgMHgwZiwgMHhmOCwgMHgwMCwgMHgxZCwgMHg0YywKLTB4MDAsIDB4MTksIDB4MjMsIDB4NjgsIDB4YzAsIDB4MTgsIDB4NTAsIDB4MzAsIDB4MDAsIDB4NzksIDB4MDEsIDB4MjgsCi0weDEwLCAweGQxLCAweDYwLCAweDY4LCAweDAxLCAweDI4LCAweDBkLCAweGQwLCAweDEwLCAweDFjLCAweDAwLCAweGYwLAotMHg3MSwgMHhmOCwgMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDM4LCAweDAxLCAweDAwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDAzLCAweDZiLAotMHg1ZCwgMHgxYywgMHgwNSwgMHg2MywgMHhiZCwgMHgwMiwgMHgyZCwgMHgxOSwgMHhkYiwgMHgwMCwgMHhlYiwgMHgxOCwKLTB4ODAsIDB4MzMsIDB4MTksIDB4NjMsIDB4ZGEsIDB4NjIsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsCi0weDAxLCAweDIxLCAweGI5LCAweDQwLCAweDIyLCAweDY4LCAweDExLCAweDQzLCAweDIxLCAweDYwLCAweDAxLCAweDZiLAotMHg4MCwgMHgyOSwgMHhlMiwgMHhkMywgMHgwMCwgMHgyMSwgMHgwMSwgMHg2MywgMHhkZiwgMHhlNywgMHgwMCwgMHgwMCwKLTB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweDFmLCAweDRlLCAweDcwLCAweDY4LCAweDAwLCAweDI4LCAweDM2LCAweGQxLCAweDAwLCAweDI0LAotMHhiMSwgMHg2OCwgMHg0OCwgMHgxYywgMHhjOSwgMHgwMCwgMHg4OSwgMHgxOSwgMHhiMCwgMHg2MCwgMHgzMiwgMHg2OCwKLTB4ODksIDB4MTgsIDB4NjAsIDB4MzEsIDB4MGQsIDB4N2IsIDB4MDgsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4YjQsIDB4NjAsCi0weDI4LCAweDAxLCAweDgwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDg3LCAweDZiLAotMHgwMCwgMHgyZiwgMHgyMSwgMHhkMCwgMHhjMSwgMHg2YSwgMHg0YiwgMHgxYywgMHhhYSwgMHgwMiwgMHg5MiwgMHgxOSwKLTB4YzksIDB4MDAsIDB4NTEsIDB4MTgsIDB4ODAsIDB4MzEsIDB4YzMsIDB4NjIsIDB4Y2EsIDB4NmEsIDB4MDksIDB4NmIsCi0weDAxLCAweDNmLCAweDg3LCAweDYzLCAweDgwLCAweDJiLCAweDAwLCAweGQzLCAweGM0LCAweDYyLCAweDAwLCAweDJmLAotMHgwNiwgMHhkMSwgMHgwMSwgMHgyNywgMHhhZiwgMHg0MCwgMHgzYiwgMHgxYywgMHhkYiwgMHg0MywgMHgzNywgMHg2OCwKLTB4M2IsIDB4NDAsIDB4MzMsIDB4NjAsIDB4NDMsIDB4NmIsIDB4MDEsIDB4M2IsIDB4NDMsIDB4NjMsIDB4MTAsIDB4MWMsCi0weDM3LCAweDFjLCAweDAwLCAweGYwLCAweDA5LCAweGY4LCAweDc4LCAweDY4LCAweDAwLCAweDI4LCAweGM5LCAweGQwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4Y2QsIDB4MGYsIDB4ZWQsIDB4MDcsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MjcsIDB4MmUsIDB4NGIsCi0weDJlLCAweDRhLCAweDAwLCAweDJkLCAweDFkLCAweGQwLCAweGQ4LCAweDZhLCAweDAxLCAweDMwLCAweGQ4LCAweDYyLAotMHgxMCwgMHgxYywgMHg1MiwgMHg2OSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHgwMiwgMHg2OSwgMHg1MywgMHgxYywKLTB4OTIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MDMsIDB4NjEsIDB4OTEsIDB4NjEsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsCi0weDQxLCAweDYxLCAweDAyLCAweDY5LCAweDBmLCAweDJhLCAweDAwLCAweGQzLCAweDA3LCAweDYxLCAweDBmLCAweDI5LAotMHgwMCwgMHhkMywgMHg0NCwgMHg2MCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4ZWUsIDB4ZmUsIDB4ZjgsIDB4ZTcsIDB4MTUsIDB4NjksIDB4NmUsIDB4MWMsIDB4YWQsIDB4MDAsCi0weGFkLCAweDE4LCAweDE2LCAweDYxLCAweGE5LCAweDYxLCAweDU1LCAweDY5LCAweDAxLCAweDM1LCAweDU1LCAweDYxLAotMHgxNiwgMHg2OSwgMHgwZiwgMHgyZSwgMHgwMCwgMHhkMywgMHgxNywgMHg2MSwgMHgwZiwgMHgyZCwgMHgwMCwgMHhkMywKLTB4NTQsIDB4NjAsIDB4OGMsIDB4MDIsIDB4YTQsIDB4MGEsIDB4MTYsIDB4NGYsIDB4M2EsIDB4NmYsIDB4ZmQsIDB4NjgsCi0weGY5LCAweDFkLCAweDc5LCAweDMxLCAweDAxLCAweDJkLCAweDBjLCAweGQxLCAweGRiLCAweDZkLCAweDViLCAweDA4LAotMHgwOSwgMHhkMywgMHgwYiwgMHg4OSwgMHgwMCwgMHgyYiwgMHgwNiwgMHhkMSwgMHhmZCwgMHg2ZiwgMHgwMywgMHgzYiwKLTB4MmUsIDB4NjgsIDB4MzMsIDB4NDAsIDB4MmIsIDB4NjAsIDB4MTQsIDB4MjMsIDB4MGIsIDB4ODEsIDB4MTAsIDB4NjAsCi0weDgwLCAweDA3LCAweDgwLCAweDBhLCAweDIwLCAweDQzLCAweDAzLCAweDA0LCAweDAwLCAweGQwLCAweDAxLCAweDM4LAotMHg1MCwgMHg2MCwgMHgwOSwgMHg2YSwgMHgwOCwgMHgzMiwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkOCwgMHgwNywgMHg0YSwKLTB4MDAsIDB4MGQsIDB4MDIsIDB4ZDMsIDB4NTEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4ODIsIDB4NjEsIDB4M2EsIDB4NjcsCi0weGJlLCAweGU3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwKLTB4YjAsIDB4YjUsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MTYsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDE1LCAweDRjLCAweDAwLCAweDI1LCAweDY3LCAweDY5LCAweDAwLCAweDJmLAotMHgxNiwgMHhkMCwgMHhlMCwgMHg2OCwgMHg0MSwgMHgxYywgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhlMSwgMHg2MCwKLTB4ODAsIDB4NjksIDB4MDEsIDB4M2YsIDB4ZmYsIDB4ZjcsIDB4OTQsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MGYsIDB4MjgsCi0weDAwLCAweGQzLCAweGU1LCAweDYwLCAweGUwLCAweDY4LCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDgwLCAweDY5LAotMHgwMCwgMHgwOCwgMHgwMSwgMHhkMywgMHgwMCwgMHgyZiwgMHhlYSwgMHhkMSwgMHg2NywgMHg2MSwgMHgwMywgMHhlMCwKLTB4MDgsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4NjUsIDB4NjAsIDB4MjAsIDB4NjgsCi0weDAwLCAweDI4LCAweDAxLCAweGQwLCAweGZmLCAweGY3LCAweDI2LCAweGZmLCAweGIwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MTAsIDB4MjMsCi0weDgyLCAweDY4LCAweDEzLCAweDQwLCAweDAwLCAweDIxLCAweDAwLCAweDJiLCAweDE1LCAweGQwLCAweDBjLCAweDRiLAotMHgxYSwgMHg0MCwgMHgxMiwgMHgwMSwgMHg4MSwgMHgyNCwgMHgxNCwgMHg0MywgMHgwMiwgMHg2OCwgMHgxNSwgMHg2OCwKLTB4MTMsIDB4MWQsIDB4ODAsIDB4Y2IsIDB4MWIsIDB4NjgsIDB4MDQsIDB4M2EsIDB4MDIsIDB4NjAsIDB4MjAsIDB4YzIsCi0weDgwLCAweGMyLCAweDA4LCAweGMyLCAweDE0LCAweDYwLCAweDQyLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwNCwgMHgzMiwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHgwOCwgMHgxYywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDAsIDB4ZjAsIDB4ZmYsIDB4MGYsIDB4ZjAsIDB4YjQsIDB4ODIsIDB4NjgsIDB4NTMsIDB4MDksIDB4MzQsIDB4ZDMsCi0weDFiLCAweDRiLCAweDFhLCAweDQwLCAweDEyLCAweDAxLCAweDgxLCAweDI2LCAweDE2LCAweDQzLCAweDAzLCAweDY4LAotMHgxZCwgMHg2OCwgMHgxZiwgMHgxZCwgMHgxMCwgMHhjZiwgMHgzZiwgMHg2OCwgMHgwNCwgMHgzYiwgMHgwMywgMHg2MCwKLTB4MjAsIDB4YzMsIDB4MTAsIDB4YzMsIDB4ODAsIDB4YzMsIDB4MWUsIDB4NjAsIDB4NDMsIDB4NjgsIDB4MWYsIDB4MWQsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDNiLCAweDQzLCAweDQzLCAweDYwLCAweGNiLCAweDZiLCAweDE4LCAweDFmLAotMHhjOCwgMHg2MywgMHg4MCwgMHhjYiwgMHg4MCwgMHhjMCwgMHgxYywgMHg2OCwgMHgxZiwgMHgxZCwgMHgwMywgMHgxZCwKLTB4MDQsIDB4NjAsIDB4MzgsIDB4MWMsIDB4M2YsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MWYsIDB4NjAsIDB4MWYsIDB4MWQsCi0weDQzLCAweDY4LCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDgxLCAweDIzLCAweDIzLCAweDQzLCAweDNiLCAweDYwLAotMHg0MCwgMHg2OCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwNCwgMHgxMCwgMHg0MywgMHg3OCwgMHg2MCwgMHgwOCwgMHg2ZSwKLTB4MDQsIDB4MzAsIDB4MDgsIDB4NjYsIDB4NDgsIDB4NmUsIDB4MDQsIDB4MzAsIDB4NDgsIDB4NjYsIDB4MDAsIDB4MjAsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweGYwLCAweGZmLCAweDBmLCAweDgwLCAweGI0LCAweDgxLCAweDZhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHhjYSwgMHgxZCwgMHgwNSwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwKLTB4Y2YsIDB4MWQsIDB4MDEsIDB4MzcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjAsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDBmLCAweDFkLCAweDNiLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LAotMHg4YiwgMHg2MCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgwYywgMHhjMSwKLTB4MDIsIDB4NjIsIDB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjIsIDB4MDQsIDB4MjMsIDB4ODEsIDB4NjksCi0weDE5LCAweDQzLCAweDgxLCAweDYxLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDkxLCAweDYxLCAweDgxLCAweDZhLAotMHgwNCwgMHgzMSwgMHg4MSwgMHg2MiwgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2MiwgMHhjMSwgMHgxZCwKLTB4MzksIDB4MzEsIDB4NGEsIDB4OGIsIDB4MDQsIDB4M2EsIDB4NGEsIDB4ODMsIDB4NDksIDB4OGIsIDB4MDIsIDB4NmIsCi0weDQwLCAweDMyLCAweDUxLCAweDgzLCAweGMxLCAweDg5LCAweDA0LCAweDM5LCAweGMxLCAweDgxLCAweGMxLCAweDY4LAotMHgwMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjMSwgMHg2MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4MjAsIDB4NDcsIDB4MjgsIDB4NDcsCi0weDMwLCAweDQ3LCAweDM4LCAweDQ3LCAweDMwLCAweDQwLCAweDJkLCAweGU5LCAweDBjLCAweGMwLCAweDlkLCAweGU1LAotMHgwYywgMHg0OCwgMHhhMCwgMHhlMSwgMHgyNCwgMHg0OCwgMHhiMCwgMHhlMSwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDEsIDB4YzAsIDB4NGMsIDB4ZTIsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4NjQsIDB4NTEsIDB4OWYsIDB4ZTUsCi0weDk0LCAweDUwLCAweDIwLCAweGUwLCAweDAwLCAweDUwLCAweDkwLCAweGU1LCAweDE0LCAweDQwLCAweDkwLCAweGU1LAotMHgwMCwgMHgzMCwgMHg4NSwgMHhlNSwgMHgwNCwgMHhjMCwgMHg4NSwgMHhlNSwgMHgwOCwgMHgxMCwgMHg4NSwgMHhlNSwKLTB4MGMsIDB4MjAsIDB4ODUsIDB4ZTUsIDB4MTAsIDB4MTAsIDB4OTAsIDB4ZTUsCi0weDEwLCAweDUwLCAweDg1LCAweGUyLCAweDAxLCAweDAwLCAweDU1LCAweGUxLCAweDBjLCAweDUwLCAweDkwLCAweDU1LAotMHgwNCwgMHgwMCwgMHg1NSwgMHhlMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNCwgMHgxMCwgMHg5MCwgMHhlNSwKLTB4MDAsIDB4NTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCi0weDMwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDMwLCAweDkzLCAweGU1LAotMHgwOCwgMHgyMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgzMSwgMHg4MywgMHhlMywgMHgwMiwgMHgzNiwgMHg4MywgMHhlMywKLTB4MDMsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTQsIDB4MzAsIDB4ODAsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4MWEsCi0weDAxLCAweDAwLCAweGEwLCAweGUzLCAweGY0LCAweGZmLCAweGZmLCAweGVhLCAweDAxLCAweDA2LCAweDFjLCAweGUzLAotMHhmMSwgMHhmZiwgMHhmZiwgMHgwYSwgMHhlYywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMiwgMHhjNiwgMHhjYywgMHhlMywKLTB4NTQsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4ZTQsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4NTAsIDB4MTAsIDB4OTEsIDB4ZTUsCi0weGQ5LCAweGZmLCAweGZmLCAweGVhLCAweGYwLCAweDQ3LCAweDJkLCAweGU5LCAweDIwLCAweGMwLCAweDlkLCAweGU1LAotMHgwYywgMHg2OCwgMHhhMCwgMHhlMSwgMHgyNiwgMHg2OCwgMHhiMCwgMHhlMSwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4YjgsIDB4NTAsIDB4OWYsIDB4ZTUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZTAsCi0weDA1LCAweDAwLCAweDgwLCAweGUwLCAweDA4LCAweDQwLCAweDkwLCAweGU1LCAweDA0LCAweDgwLCAweDkwLCAweGU1LAotMHgwMCwgMHg3MCwgMHhhMCwgMHhlMywgMHgxZiwgMHhjMCwgMHhhMCwgMHhlMywgMHgwMiwgMHhjNCwgMHg4YywgMHhlMywKLTB4MDAsIDB4NTAsIDB4OTAsIDB4ZTUsIDB4MTAsIDB4OTAsIDB4OTAsIDB4ZTUsIDB4MTQsIDB4YTAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDMwLCAweDg1LCAweGU1LCAweDA0LCAweGMwLCAweDg1LCAweGU1LCAweDA4LCAweDEwLCAweDg1LCAweGU1LAotMHgwYywgMHgyMCwgMHg4NSwgMHhlNSwgMHgxMCwgMHg1MCwgMHg4NSwgMHhlMiwgMHgwOSwgMHgwMCwgMHg1NSwgMHhlMSwKLTB4MGMsIDB4NTAsIDB4OTAsIDB4NTUsIDB4MGEsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDAzLCAweDcwLCAweDE3LCAweGUyLCAweDIwLCAweDEwLCAweDgxLCAweGUyLCAweDIwLCAweDMwLCAweDgzLCAweGUyLAotMHgwYSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHg2MCwgMHg5NiwgMHhlMiwgMHgwMSwgMHg3MCwgMHg4NywgMHhlMiwKLTB4MDksIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjAsIDB4NjAsIDB4NDYsIDB4ZTIsIDB4MjAsIDB4MDAsIDB4NTYsIDB4ZTMsCi0weGVjLCAweGZmLCAweGZmLCAweGNhLCAweDAwLCAweDcwLCAweGEwLCAweGUzLCAweDAxLCAweGMwLCAweDQ2LCAweGUyLAotMHgwMiwgMHhjNCwgMHg4YywgMHhlMywgMHgwMCwgMHg2MCwgMHhhMCwgMHhlMywgMHhlNywgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4NTAsIDB4ODgsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDUwLCAweDgwLCAweGU1LCAweDAxLCAweDAwLCAweGEwLCAweGUxLCAweGYwLCAweDQ3LCAweGJkLCAweGU4LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHhhMCwgMHg5NCwgMHhlNSwgMHgwYSwgMHgwMCwgMHg1NSwgMHhlMSwKLTB4MTQsIDB4YTAsIDB4ODAsIDB4ZTUsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weGY1LCAweGZmLCAweGZmLCAweGVhLCAweGE4LCAweDAzLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHgwMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHg2OCwgMHg4MiwgMHg5ZiwgMHhlNSwgMHgwYiwgMHg5MiwgMHhhMCwgMHhlMywKLTB4NjQsIDB4YTIsIDB4OWYsIDB4ZTUsIDB4NTgsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsCi0weDU0LCAweGIwLCAweDlhLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDNmLCAweDQwLCAweDJkLCAweGU5LAotMHgwMCwgMHgwMCwgMHg0ZiwgMHhlMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgxMiwgMHgwMCwgMHg1MCwgMHhlMywKLTB4NTQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDA0LCAweDUwLCAweGEwLCAweGUzLCAweDAwLCAweDQwLCAweDk5LCAweGU1LAotMHgwOSwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHg1MywgMHgwMCwgMHgwMCwgMHgxYiwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MjAsIDB4MDAsIDB4MTQsIDB4ZTMsCi0weDU5LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDA3LCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLAotMHgwMSwgMHgwNiwgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwOCwgMHgwMCwgMHgxNCwgMHhlMywKLTB4NDUsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDUsIDB4MTQsIDB4ZTMsIDB4NGEsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAyLCAweDA4LCAweDE0LCAweGUzLCAweDRiLCAweDAwLCAweDAwLCAweDFiLCAweGU1LCAweDBlLCAweDE0LCAweGUzLAotMHgwNywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNCwgMHgyMCwgMHg5OCwgMHhlNSwgMHgwYywgMHgxMCwgMHg5OCwgMHhlNSwKLTB4MDQsIDB4MzAsIDB4NTIsIDB4ZTIsIDB4M2MsIDB4MzAsIDB4YTAsIDB4YjMsIDB4MDQsIDB4MzAsIDB4ODgsIDB4ZTUsCi0weDAyLCAweDAwLCAweDkxLCAweGU3LCAweDBmLCAweGUwLCAweGEwLCAweGUxLAotMHgxMCwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMSwgMHg1MCwgMHg1NSwgMHhlMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MGMsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDFiLCAweGZmLCAweDJmLCAweDExLCAweDA4LCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLAotMHgwYiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHgwYywgMHgxNCwgMHhlMywgMHg5OCwgMHgwMSwgMHg5ZiwgMHgxNSwKLTB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MTQsIDB4ZTMsCi0weDhjLCAweDAxLCAweDlmLCAweDE1LCAweDBmLCAweGUwLCAweGEwLCAweDExLCAweDEwLCAweGZmLCAweDJmLCAweDExLAotMHgwMSwgMHgwOSwgMHgxNCwgMHhlMywgMHg4MCwgMHgwMSwgMHg5ZiwgMHgxNSwgMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwKLTB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsCi0weDE2LCAweDAwLCAweDAwLCAweDBhLCAweDU0LCAweGUwLCAweDhmLCAweGUyLCAweDA0LCAweDAwLCAweDE0LCAweGUzLAotMHg0MCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMiwgMHgwYSwgMHgxNCwgMHhlMywKLTB4NDQsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDksIDB4MTQsIDB4ZTMsCi0weDQ4LCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDAyLCAweDE0LCAweGUzLAotMHg0YywgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwNCwgMHgxNCwgMHhlMywKLTB4NTAsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsCi0weDIxLCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDBlLCAweDAwLCAweDAwLCAweDFiLAotMHgxMCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MDQsIDB4NTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ZTIsCi0weDFiLCAweGZmLCAweDJmLCAweDExLCAweDNmLCAweDQwLCAweGJkLCAweGU4LCAweDA0LCAweGYwLCAweDVlLCAweGUyLAotMHhjMCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHg2MSwgMHhlMSwgMHhmYSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MTgsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDU0LCAweGIwLCAweDlhLCAweGU1LCAweDFjLCAweDEwLCAweDlhLCAweGU1LCAweDE0LCAweDAwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyMCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MjQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDI4LCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAweDJjLCAweDEwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzMCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MzQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDM4LCAweGUwLCAweDlhLCAweGU1LCAweDNjLCAweDEwLCAweDlhLCAweGU1LCAweDE4LCAweDAwLCAweDlhLCAweGU1LAotMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzOCwgMHhlMCwgMHg5YSwgMHhlNSwgMHgzYywgMHgxMCwgMHg5YSwgMHhlNSwKLTB4MTQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NjQsIDB4MjAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDMwLCAweDkyLCAweGU1LCAweDAwLCAweDMwLCAweDUzLCAweGUwLCAweDBhLCAweDAwLCAweDAwLCAweGJhLAotMHgwMCwgMHgzMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgwMCwgMHg5MiwgMHhlNSwgMHgwOCwgMHgzMCwgMHg5MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4OTEsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MTAsIDB4ODAsIDB4ZTcsCi0weDA0LCAweDMwLCAweDUzLCAweGUyLCAweDNjLCAweDMwLCAweGEwLCAweGIzLCAweDA4LCAweDMwLCAweDgyLCAweGU1LAotMHgwMSwgMHgwMCwgMHhhMCwgMHhlMywgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzYywgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDAwLCAweDAwLCAweGEwLCAweGUzLCAweGY4LCAweGZmLCAweGZmLCAweGVhLCAweDEwLCAweDAwLCAweDlmLCAweGU1LAotMHgwOCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwNCwgMHgxMCwgMHg1MSwgMHhlMiwgMHgzYywgMHgxMCwgMHhhMCwgMHhiMywKLTB4MDgsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weGNjLCAweDA0LCAweDAwLCAweDgwLCAweDcxLCAweDJiLCAweGZmLCAweGZmLCAweGQxLCAweDNkLCAweGZmLCAweGZmLAotMHhjOSwgMHgyYiwgMHhmZiwgMHhmZiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHhjOSwgMHgxYywgMHg4OSwgMHgwOCwKLTB4ODksIDB4MDAsIDB4MDEsIDB4MjMsIDB4ODUsIDB4NGEsIDB4NWIsIDB4MDcsIDB4MTgsIDB4NDMsIDB4MTMsIDB4NjgsCi0weDViLCAweDE4LCAweDEzLCAweDYwLCAweDAwLCAweDFmLCAweDgxLCAweGEzLCAweDViLCAweDFhLCAweDE4LCAweDQ3LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsCi0weDk4LCAweDAwLCAweDlmLCAweGU1LCAweDk4LCAweDEwLCAweDlmLCAweGU1LCAweDAxLCAweDIwLCAweDQwLCAweGUwLAotMHg5NCwgMHgzMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsCi0weDAwLCAweDAwLCAweDAwLCAweDBhLCAweGY4LCAweGZmLCAweGZmLCAweGVhLCAweDc4LCAweDAwLCAweDlmLCAweGU1LAotMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwgMHg3NCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg3NCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsCi0weDAzLCAweDAwLCAweDUwLCAweGUxLCAweDAzLCAweDAwLCAweDAwLCAweDFhLCAweDA0LCAweDEwLCAweDgxLCAweGUyLAotMHgwNCwgMHgyMCwgMHg1MiwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4NTAsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsIDB4NGMsIDB4MDAsIDB4OWYsIDB4ZTUsCi0weDRjLCAweDEwLCAweDlmLCAweGU1LCAweDAxLCAweDIwLCAweDQwLCAweGUwLCAweDJjLCAweDMwLCAweDlmLCAweGU1LAotMHgwMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwKLTB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0weGY4LCAweGZmLCAweGZmLCAweGVhLCAweDI4LCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweDgwLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg3YywgMHgzNCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwKLTB4YWQsIDB4ZGUsIDB4YWQsIDB4ZGUsIDB4YzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MzcsIDB4MDAsIDB4ODAsCi0weDgwLCAweDM0LCAweDAwLCAweDgwLCAweGM0LCAweDA0LCAweDAwLCAweDgwLCAweGZjLCAweDNmLCAweDAwLCAweDgwLAotMHg0MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhjOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzEsIDB4ZWEsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MzksIDB4ZmUsIDB4ZmYsIDB4ZWEsCi0weDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDYzLCAweGZlLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLAotMHgxYiwgMHhmZiwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YiwgMHhlYSwgMHhmZiwgMHhlYSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDI4LCAweDA0LCAweDAwLCAweDAwLCAweGY4LCAweDNkLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLAotMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwYiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4ZmYsIDB4MDYsIDB4NTQsCi0weDAzLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDA0LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhhMSwgMHgwNSwgMHhmZiwgMHhmZiwgMHgwNCwgMHhmZiwgMHgwNywgMHg1NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKLTB4YjUsIDB4MDQsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDUsIDB4ZmYsIDB4ZmYsCi0weDA1LCAweGZmLCAweDA1LCAweDU0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDA0LCAweGZmLCAweGZmLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwNSwgMHhmZiwgMHhmZiwgMHgwMSwgMHhmZiwgMHgwNCwgMHgwMCwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTgsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDYxLCAweDBlLCAweGZmLCAweGZmLCAweDAyLCAweGZmLCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhhMSwgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDBkLCAweGZmLCAweGZmLCAweDA2LCAweDAwLCAweGZmLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg1MCwgMHhmZiwgMHhmZiwgMHg4MSwgMHg1MCwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NDgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NzUsIDB4MjEsIDB4NDAsIDB4MWIsIDB4NzUsIDB4MjEsIDB4NDAsCi0weDMxLCAweDc1LCAweDIxLCAweDQwLCAweDQ5LCAweDc1LCAweDIxLCAweDQwLAotMHg1NSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg2MywgMHg3NSwgMHgyMSwgMHg0MCwgMHg3ZCwgMHg3NSwgMHgyMSwgMHg0MCwKLTB4YTksIDB4NzUsIDB4MjEsIDB4NDAsIDB4NmQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzUsIDB4NzYsIDB4MjEsIDB4NDAsCi0weGQzLCAweDc2LCAweDIxLCAweDQwLCAweGRkLCAweDc2LCAweDIxLCAweDQwLCAweGU3LCAweDc2LCAweDIxLCAweDQwLAotMHg5OSwgMHg3NywgMHgyMSwgMHg0MCwgMHhhNywgMHg3NywgMHgyMSwgMHg0MCwgMHhiNSwgMHg3NywgMHgyMSwgMHg0MCwKLTB4NjEsIDB4NzgsIDB4MjEsIDB4NDAsIDB4NWYsIDB4N2MsIDB4MjEsIDB4NDAsIDB4ZTksIDB4N2MsIDB4MjEsIDB4NDAsCi0weDg5LCAweDdkLCAweDIxLCAweDQwLCAweGJkLCAweDdlLCAweDIxLCAweDQwLCAweGM5LCAweDdlLCAweDIxLCAweDQwLAotMHgyOSwgMHg3ZiwgMHgyMSwgMHg0MCwgMHg4ZCwgMHg3ZiwgMHgyMSwgMHg0MCwgMHhiOSwgMHg3ZiwgMHgyMSwgMHg0MCwKLTB4ZGQsIDB4N2YsIDB4MjEsIDB4NDAsIDB4MWQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4NDUsIDB4ODAsIDB4MjEsIDB4NDAsCi0weDhkLCAweDgwLCAweDIxLCAweDQwLCAweDlkLCAweDgwLCAweDIxLCAweDQwLCAweGM1LCAweDgwLCAweDIxLCAweDQwLAotMHhkNSwgMHg4MCwgMHgyMSwgMHg0MCwgMHgxZCwgMHg4MSwgMHgyMSwgMHg0MCwgMHg1YiwgMHg4MSwgMHgyMSwgMHg0MCwKLTB4YjEsIDB4ODEsIDB4MjEsIDB4NDAsIDB4MTEsIDB4ODIsIDB4MjEsIDB4NDAsIDB4MWIsIDB4ODIsIDB4MjEsIDB4NDAsCi0weDFmLCAweDgyLCAweDIxLCAweDQwLCAweDhkLCAweDgyLCAweDIxLCAweDQwLCAweGQ5LCAweDgyLCAweDIxLCAweDQwLAotMHgzMSwgMHg4MywgMHgyMSwgMHg0MCwgMHg2ZCwgMHg4MywgMHgyMSwgMHg0MCwgMHhkMSwgMHg4MywgMHgyMSwgMHg0MCwKLTB4MDksIDB4ODQsIDB4MjEsIDB4NDAsIDB4MTksIDB4ODQsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODQsIDB4MjEsIDB4NDAsCi0weDYxLCAweDg0LCAweDIxLCAweDQwLCAweDc1LCAweDg0LCAweDIxLCAweDQwLCAweDlkLCAweDg0LCAweDIxLCAweDQwLAotMHhhNywgMHg4NCwgMHgyMSwgMHg0MCwgMHhiMSwgMHg4NCwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4NSwgMHgyMSwgMHg0MCwKLTB4NDUsIDB4ODUsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODUsIDB4MjEsIDB4NDAsIDB4YzUsIDB4ODUsIDB4MjEsIDB4NDAsCi0weGNmLCAweDg1LCAweDIxLCAweDQwLCAweGQ5LCAweDg1LCAweDIxLCAweDQwLCAweGUzLCAweDg1LCAweDIxLCAweDQwLAotMHhlZCwgMHg4NSwgMHgyMSwgMHg0MCwgMHhmNywgMHg4NSwgMHgyMSwgMHg0MCwgMHgwMSwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4MGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MTUsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MDEsIDB4ODksIDB4MjEsIDB4NDAsCi0weDFmLCAweDg2LCAweDIxLCAweDQwLCAweDI5LCAweDg2LCAweDIxLCAweDQwLCAweDMzLCAweDg2LCAweDIxLCAweDQwLAotMHgzZCwgMHg4NiwgMHgyMSwgMHg0MCwgMHg2NSwgMHg4NiwgMHgyMSwgMHg0MCwgMHg2ZiwgMHg4NiwgMHgyMSwgMHg0MCwKLTB4ZDEsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZTUsIDB4ODYsIDB4MjEsIDB4NDAsCi0weGVmLCAweDg2LCAweDIxLCAweDQwLCAweGY5LCAweDg2LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHgwMywgMHg4NywgMHgyMSwgMHg0MCwgMHg2OSwgMHg4NywgMHgyMSwgMHg0MCwgMHhiNSwgMHg4NywgMHgyMSwgMHg0MCwKLTB4ZjksIDB4ODcsIDB4MjEsIDB4NDAsIDB4MDksIDB4ODgsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDU1LCAweDg4LCAweDIxLCAweDQwLCAweDU5LCAweDg4LCAweDIxLCAweDQwLCAweDVkLCAweDg4LCAweDIxLCAweDQwLAotMHhiNSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhkZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHhlOSwgMHg4OCwgMHgyMSwgMHg0MCwKLTB4ZWQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjEsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4ODgsIDB4MjEsIDB4NDAsCi0weGY5LCAweDg4LCAweDIxLCAweDQwLCAweGZkLCAweDg4LCAweDIxLCAweDQwLCAweDJkLCAweDg1LCAweDIxLCAweDQwLAotMHg4OSwgMHg4NSwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4MGQsIDB4ODksIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4ZTEsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4NmIsIDB4NzgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4N2IsIDB4MjEsIDB4NDAsIDB4MzEsIDB4N2MsIDB4MjEsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg1OCwgMHgwMSwgMHgxOCwgMHg0MCwKLTB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDAxLCAweDE4LCAweDQwLCAweDY4LCAweDAxLCAweDE4LCAweDQwLAotMHgyNCwgMHg4MywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NzgsIDB4MDEsIDB4MTgsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgxOCwgMHg0MCwKLTB4ODgsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsIDB4MjQsIDB4YWIsIDB4MjAsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwOCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwYywgMHgwMCwgMHgxMiwgMHgwMCwKLTB4MWMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsCi0weGE0LCAweGE4LCAweDIwLCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhkMSwgMHhhOCwgMHgyMSwgMHg0MCwgMHgyZCwgMHhhYSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4ODksIDB4NzAsIDB4MjEsIDB4NDAsIDB4YzksIDB4YTEsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1NywgMHg4OSwgMHgyMSwgMHg0MCwgMHhkMSwgMHhhOCwgMHgyMSwgMHg0MCwgMHhjNSwgMHgyZiwgMHhmZiwgMHhmZiwKLTB4MDUsIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4MjAsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YTcsIDB4MjEsIDB4NDAsCi0weDM0LCAweDJlLCAweDAwLCAweDgwLCAweDQ4LCAweDJlLCAweDAwLCAweDgwLCAweDVjLCAweDJlLCAweDAwLCAweDgwLAotMHgzMCwgMHgzMywgMHgzYSwgMHgzMSwgMHgzMSwgMHgzYSwgMHgzMSwgMHgzMSwgMHgwMCwgMHgzMCwgMHgzNywgMHgyZiwKLTB4MzIsIDB4MzMsIDB4MmYsIDB4MzAsIDB4MzEsIDB4MDAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MzUsCi0weDM2LCAweDM5LCAweDAwLCAweDQzLCAweDZmLCAweDcwLCAweDc5LCAweDcyLCAweDY5LCAweDY3LCAweDY4LCAweDc0LAotMHgyMCwgMHgyOCwgMHg2MywgMHgyOSwgMHgyMCwgMHgzMiwgMHgzMCwgMHgzMCwgMHgzMSwgMHgyMCwgMHgzMywgMHg0MywKLTB4NmYsIDB4NmQsIDB4MjAsIDB4NDMsIDB4NmYsIDB4NzIsIDB4NzAsIDB4NmYsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjksCi0weDZmLCAweDZlLCAweDBhLCAweDAwLCAweDA4LCAweDEwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg1MywgMHhmZiwgMHhmZiwKLTB4MjcsIDB4ZjAsIDB4N2QsIDB4ZmQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ZGEsIDB4MGUsIDB4ODIsIDB4MDAsCi0weDAxLCAweDQwLCAweDY0LCAweDA0LCAweDY0LCAweDJkLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLAotMHg2OSwgMHgzZSwgMHhmZiwgMHhmZiwgMHhjOSwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhkNSwgMHgyNCwgMHhmZiwgMHhmZiwKLTB4YzksIDB4M2IsIDB4ZmYsIDB4ZmYsIDB4MjksIDB4M2MsIDB4ZmYsIDB4ZmYsIDB4MTksIDB4MWEsIDB4ZmYsIDB4ZmYsCi0weDY1LCAweDExLCAweGZmLCAweGZmLCAweGNjLCAweDUzLCAweGZmLCAweGZmLCAweDIxLCAweDQwLCAweGZmLCAweGZmLAotMHg4OSwgMHg3MCwgMHgyMSwgMHg0MCwgMHg0OSwgMHg3MiwgMHgyMSwgMHg0MCwgMHhkOSwgMHgzZiwgMHhmZiwgMHhmZiwKLTB4MjEsIDB4OWEsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MjQsIDB4ZmYsIDB4ZmYsIDB4NjQsIDB4NTMsIDB4ZmYsIDB4ZmYsCi0weDhjLCAweDUzLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg4MCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4YjAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MGUsIDB4MDAsIDB4MDAsCi0weDAwLCAweDZlLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHhlZCwgMHg4OSwgMHgyMSwgMHg0MCwgMHg4YiwgMHg4OSwgMHgyMSwgMHg0MCwgMHhhNSwgMHg4YywgMHgyMSwgMHg0MCwKLTB4MDUsIDB4OGQsIDB4MjEsIDB4NDAsIDB4Y2QsIDB4OGQsIDB4MjEsIDB4NDAsIDB4OGIsIDB4OGIsIDB4MjEsIDB4NDAsCi0weGE5LCAweDhlLCAweDIxLCAweDQwLCAweDE1LCAweDhmLCAweDIxLCAweDQwLCAweDY5LCAweDhiLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwgMHhjMSwgMHhiZCwgMHgyMSwgMHg0MCwgMHgyZCwgMHhiZSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MjAsIDB4MGEsIDB4NGEsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZDEsIDB4MTgsIDB4MmQsIDB4MjMsCi0weDliLCAweDAxLCAweGQzLCAweDE4LCAweDg4LCAweDYxLCAweGQ4LCAweDYwLCAweGQ4LCAweDYzLCAweDgwLCAweDMyLAotMHhjOCwgMHg2MCwgMHgwOCwgMHg2MSwgMHg0OCwgMHg2MSwgMHhkMCwgMHg2MiwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NjAsIDB4ODgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGZlLCAweDAzLCAweDAwLCAweDAwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDBjLCAweDFjLCAweDA1LCAweDFjLAotMHgwMCwgMHgyMywgMHgwMCwgMHg5MywgMHhmZiwgMHhmNywgMHhkZSwgMHhmZiwgMHg2OCwgMHg0OSwgMHgwYiwgMHgyMywKLTB4MWIsIDB4MDIsIDB4Y2YsIDB4MTgsIDB4NzgsIDB4NjgsIDB4MjgsIDB4NDAsCi0weDAwLCAweDIyLCAweGY4LCAweDYwLCAweDNhLCAweDYxLCAweGJhLCAweDY4LCAweDIyLCAweDQwLCAweDdhLCAweDYxLAotMHgwYywgMHgxYywgMHg0MSwgMHgwOSwgMHgwMywgMHhkMiwgMHg1MSwgMHgwOSwgMHgwMSwgMHhkMiwgMHg4MCwgMHgwYSwKLTB4MDIsIDB4ZDMsIDB4NjAsIDB4NDgsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4ZjksIDB4NjgsCi0weDQ5LCAweDA5LCAweDAzLCAweGQyLCAweDc5LCAweDY5LCAweDQ5LCAweDA5LCAweDAwLCAweGQyLCAweDAwLCAweDIwLAotMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwMywgMHhmMCwgMHhkNCwgMHhmYSwgMHhmOCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4NzAsIDB4ZDAsIDB4MDAsIDB4MjMsIDB4MDIsIDB4OTMsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NGEsIDB4MDEsIDB4MjMsCi0weDE4LCAweDQzLCAweGY4LCAweDYwLCAweDAwLCAweDIwLCAweGQ1LCAweDFkLCAweDc5LCAweDM1LCAweDAzLCAweDk1LAotMHgwMSwgMHgyNCwgMHgwMCwgMHgyMSwgMHg0ZiwgMHg0ZCwgMHhmYSwgMHg2OCwgMHgyMiwgMHg0MCwgMHgzOSwgMHhkMCwKLTB4OGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4OTIsIDB4MDAsIDB4NGUsIDB4NGIsIDB4OWIsIDB4NWMsIDB4MWUsIDB4MWMsCi0weDgzLCAweDQyLCAweDA0LCAweGQwLCAweDRiLCAweDRiLCAweGQzLCAweDE4LCAweDViLCAweDc4LCAweDgzLCAweDQyLAotMHgyYywgMHhkMSwgMHg0OSwgMHg0YiwgMHhkMiwgMHgxOCwgMHhkMywgMHg3OCwgMHgwMywgMHg5ZCwgMHhlZCwgMHg2YSwKLTB4YWIsIDB4NDIsIDB4MDIsIDB4ZDksIDB4MDMsIDB4OWQsIDB4YzAsIDB4NDYsIDB4ZWIsIDB4NjIsIDB4NTMsIDB4NjgsCi0weDViLCAweDA4LCAweDAxLCAweGQzLCAweDAxLCAweDIzLCAweDAwLCAweDkzLCAweDg2LCAweDQyLCAweDBhLCAweGQxLAotMHg5NSwgMHg2OCwgMHgwMiwgMHg5YiwgMHg1ZSwgMHgxYywgMHgwMiwgMHg5NiwgMHg5YiwgMHgwMCwgMHgzYywgMHg0ZSwKLTB4OWUsIDB4MTksIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjMsIDB4MTgsIDB4OWQsIDB4NjEsIDB4NTMsIDB4NzgsCi0weDgzLCAweDQyLCAweDBkLCAweGQxLCAweGQyLCAweDY4LCAweDAxLCAweDliLCAweDVkLCAweDFjLCAweDAxLCAweDk1LAotMHg5YiwgMHgwMCwgMHgzNSwgMHg0ZCwgMHg1ZCwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwKLTB4ZGEsIDB4NjAsIDB4M2EsIDB4NjksIDB4MDEsIDB4MzIsIDB4M2EsIDB4NjEsIDB4NjQsIDB4MDAsIDB4MDEsIDB4MzEsCi0weDBiLCAweDI5LCAweGJkLCAweGQzLCAweDAxLCAweDMwLCAweDA5LCAweDI4LCAweGI4LCAweGQzLCAweDAwLCAweDIwLAotMHgwMiwgMHg5YiwgMHg5OSwgMHgwMCwgMHgyYiwgMHg0YSwgMHg4OSwgMHgxOCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwKLTB4YzksIDB4MTgsIDB4ODgsIDB4NjEsIDB4MDEsIDB4OWIsIDB4OTksIDB4MDAsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsCi0weDliLCAweDAxLCAweGM5LCAweDE4LCAweGM4LCAweDYwLCAweDAwLCAweDliLCAweDAwLCAweDJiLCAweDBjLCAweGQxLAotMHg4MSwgMHgwMCwgMHg4OSwgMHgxOCwgMHgwYiwgMHgyMywgMHgxYiwgMHgwMiwgMHhjOSwgMHgxOCwgMHhjYiwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4OGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDgsIDB4ZTAsCi0weDA3LCAweGUwLCAweDAzLCAweDlkLCAweGU4LCAweDZhLCAweDMwLCAweDI4LCAweDAzLCAweGQyLCAweDMwLCAweDIwLAotMHgwMywgMHg5ZCwgMHhjMCwgMHg0NiwgMHhlOCwgMHg2MiwgMHgxOSwgMHg0YSwgMHg3OCwgMHg2OSwgMHgwMCwgMHgyOCwKLTB4MmEsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjEsIDB4MDAsIDB4MjAsCi0weDAxLCAweDI0LCAweDAwLCAweDIyLCAweDEzLCAweDRlLCAweDdiLCAweDY5LCAweDIzLCAweDQwLCAweDEwLCAweGQwLAotMHg5MywgMHgwMCwgMHg5YiwgMHgxOCwgMHg5YiwgMHgwMCwgMHgxMiwgMHg0ZCwgMHg1YiwgMHgxOSwgMHg5ZCwgMHg3OCwKLTB4ODUsIDB4NDIsIDB4MDgsIDB4ZDEsIDB4MWQsIDB4NjksIDB4MGIsIDB4MWMsIDB4OWIsIDB4MDAsIDB4OWUsIDB4MTksCi0weDJkLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweGRkLCAweDYzLCAweDAxLCAweDMxLCAweDY0LCAweDAwLAotMHgwMSwgMHgzMiwgMHgwYiwgMHgyYSwgMHhlNiwgMHhkMywgMHgwMSwgMHgzMCwgMHgwOSwgMHgyOCwgMHhlMSwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODksIDB4MDAsIDB4MDQsIDB4NGEsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGM5LCAweDE4LCAweGM4LCAweDYzLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgzMCwgMHg1MywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsCi0weDE4LCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LAotMHgxMCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwKLTB4MDgsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzgsIDB4NTIsIDB4ZmYsIDB4ZmYsCi0weDg4LCAweDUxLCAweGZmLCAweGZmLCAweGQ1LCAweGIwLCAweDIxLCAweDQwLCAweGYwLCAweGI1LCAweDA0LCAweDIwLAotMHgxYSwgMHg0OSwgMHgwMSwgMHgyNSwgMHgwOCwgMHg2MCwgMHgxYSwgMHg0ZiwgMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwKLTB4ZjgsIDB4MTgsIDB4MDUsIDB4NzMsIDB4MTgsIDB4NDgsIDB4NDEsIDB4NmIsIDB4MmMsIDB4MDUsIDB4MDAsIDB4MjAsCi0weDdhLCAweDZlLCAweDE3LCAweDRiLCAweDhhLCAweDQyLCAweDFkLCAweGQwLAotMHgxOSwgMHg3YiwgMHgwMCwgMHgyOSwgMHgxNywgMHhkMSwgMHhkOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwKLTB4NDksIDB4NzgsIDB4MWUsIDB4MWMsIDB4MDAsIDB4MjksIDB4MTAsIDB4ZDEsIDB4YjAsIDB4NjAsIDB4MTAsIDB4MjAsCi0weDcwLCAweDYwLCAweDEwLCAweDRhLCAweDEwLCAweDQ5LCAweGZmLCAweGY3LCAweGMzLCAweGZmLCAweDAwLCAweDI4LAotMHgwNywgMHhkMCwgMHgzNSwgMHg3MywgMHgwNCwgMHgyMywgMHhiOCwgMHg2OSwgMHgxOCwgMHg0MywgMHhiOCwgMHg2MSwKLTB4MjAsIDB4NjEsIDB4MDAsIDB4ZjAsIDB4MTcsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDE4LCAweDczLCAweDA0LCAweDIzLCAweGI4LCAweDY5LCAweDk4LCAweDQzLCAweGI4LCAweDYxLCAweDIwLCAweDYxLAotMHhmNSwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weDdkLCAweDcxLCAweDIxLCAweDQwLCAweGY4LCAweGI1LCAweDE1LCAweDRmLCAweDM5LCAweDZjLCAweDE1LCAweDQ4LAotMHg0MCwgMHg2ZSwgMHgwYywgMHgxYSwgMHgxNCwgMHg0ZSwgMHg3MSwgMHg2OCwgMHgxNCwgMHg0ZCwgMHhhMSwgMHg0MiwKLTB4MDYsIDB4ZDgsIDB4MTQsIDB4NGEsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YjksIDB4NmIsIDB4MDksIDB4MTgsCi0weGZhLCAweDZiLCAweDExLCAweGUwLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDIyLCAweDQzLCAweDAwLCAweDkyLAotMHhiOSwgMHg2YiwgMHgwOSwgMHgxOCwgMHgwMCwgMHgyMCwgMHhmYSwgMHg2YiwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywKLTB4OGQsIDB4ZmYsIDB4NzAsIDB4NjgsIDB4MDAsIDB4MWIsIDB4MGEsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsCi0weGI5LCAweDZiLCAweGZhLCAweDZiLCAweDAwLCAweDIwLCAweDJiLCAweDFjLCAweGZmLCAweGY3LCAweDgyLCAweGZmLAotMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsCi0weDAwLCAweDAwLCAweDM3LCAweDAyLCAweGYwLCAweGI1LCAweDJiLCAweDRmLCAweGI4LCAweDY4LCAweDc5LCAweDY4LAotMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwgMHgyOSwgMHg0YSwgMHhmZiwgMHhmNywgMHg2MywgMHhmZiwgMHgwMSwgMHgyMCwKLTB4YzAsIDB4MDIsIDB4MjgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YjksIDB4NjgsIDB4MzgsIDB4MWMsCi0weDI2LCAweDRkLCAweDAwLCAweDI0LCAweDI2LCAweDRlLCAweGVmLCAweDFkLCAweDc5LCAweDM3LCAweDAwLCAweDI5LAotMHgzMSwgMHhkMSwgMHgzMSwgMHg2OCwgMHgwYSwgMHg3OCwgMHgxMiwgMHgwYSwgMHgwMywgMHhkMiwgMHgwNCwgMHg3MywKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MGMsIDB4ZDEsCi0weDA1LCAweDFjLCAweDQwLCAweDY4LCAweDAwLCAweGYwLCAweDNlLCAweGY5LCAweDMwLCAweDY4LCAweDAwLCAweGYwLAotMHg2NywgMHhmOCwgMHgwMCwgMHgyOCwgMHgyNiwgMHhkMSwgMHgyYywgMHg3MywgMHhmZiwgMHhmNywgMHg1OCwgMHhmZiwKLTB4MjIsIDB4ZTAsIDB4MDksIDB4MDEsIDB4MDcsIDB4MWMsIDB4NDEsIDB4NjAsIDB4MDgsIDB4MWMsIDB4MTcsIDB4NGEsCi0weDE3LCAweDQ5LCAweGZmLCAweGY3LCAweDM1LCAweGZmLCAweDAwLCAweDI4LCAweDA3LCAweGQxLCAweDNjLCAweDczLAotMHgwNCwgMHgyMywgMHhhOCwgMHg2OSwgMHg5OCwgMHg0MywgMHg5OSwgMHgwNCwgMHhhOCwgMHg2MSwgMHgwOCwgMHg2MSwKLTB4ZGEsIDB4ZTcsIDB4MTAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MTAsIDB4MjAsIDB4YjgsIDB4NjAsCi0weGZmLCAweGY3LCAweDgyLCAweGZmLCAweGQyLCAweGU3LCAweDA1LCAweDFjLCAweDQwLCAweDY4LCAweDAwLCAweGYwLAotMHgxNywgMHhmOSwgMHgzMCwgMHg2OCwgMHgwMCwgMHhmMCwgMHg0MCwgMHhmOCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhkMCwKLTB4MDIsIDB4MjMsIDB4ZjgsIDB4NmIsIDB4MTgsIDB4NDMsIDB4ZjgsIDB4NjMsIDB4YzQsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDI4LCAweDA1LCAweDAwLCAweDgwLCAweGE1LCAweDU1LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMCwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4N2QsIDB4NzEsIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDMsIDB4MTAsIDB4NDksCi0weDAwLCAweDI3LCAweDA4LCAweDYwLCAweDBmLCAweDRjLCAweGUwLCAweDFkLCAweGZmLCAweDMwLCAweDNhLCAweDMwLAotMHg0NywgMHg3MCwgMHhlMCwgMHg2OSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg2OSwgMHgwMCwgMHhmMCwKLTB4ZDcsIDB4ZjgsIDB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZTcsIDB4NjEsIDB4MDEsIDB4ZTAsCi0weDAxLCAweDIwLCAweGUwLCAweDYxLCAweDA3LCAweDQ4LCAweDAyLCAweDIzLCAweGMxLCAweDZiLCAweDE5LCAweDQzLAotMHhjMSwgMHg2MywgMHgyNywgMHg3MywgMHhmZiwgMHhmNywgMHgwMCwgMHhmZiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weGU4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDc4LCAweDg4LAotMHg2ZCwgMHgyOCwgMHgwMywgMHhkYiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZjcsIDB4ZjgsIDB4MTcsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MGQsIDB4NDksIDB4MDksIDB4NTgsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweGNiLCAweGZlLCAweDAwLCAweDI4LCAweDBmLCAweGQxLCAweDM5LCAweDc4LCAweGM5LCAweDA5LAotMHgwYywgMHhkMywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZiwgMHhmOCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhlOCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHgwMiwgMHgxYywgMHg0MSwgMHg0YiwKLTB4ZGQsIDB4MWQsIDB4ZmYsIDB4MzUsIDB4M2EsIDB4MzUsIDB4MmYsIDB4NzgsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDAsCi0weDAwLCAweDI3LCAweDAwLCAweGUwLCAweDAxLCAweDI3LCAweDJmLCAweDcwLCAweDJmLCAweDc4LCAweGZiLCAweDAwLAotMHhkYiwgMHgxOSwgMHg1YiwgMHgwMSwgMHgzYSwgMHg0ZiwgMHhkYywgMHgxOSwgMHg0MCwgMHg3OCwgMHgwMCwgMHgwMSwKLTB4YzcsIDB4MWQsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjAsIDB4ODMsIDB4MDAsIDB4ZDYsIDB4NTgsIDB4YzAsIDB4NDYsCi0weGU2LCAweDUwLCAweDAxLCAweDMwLCAweDA0LCAweDI4LCAweGY4LCAweGQzLCAweDAwLCAweDI5LCAweDBmLCAweGQwLAotMHgwMCwgMHgyMiwgMHhiYiwgMHgwOCwgMHgwMSwgMHg5MywgMHg4MywgMHg0MiwgMHgwYiwgMHhkOSwgMHgxMywgMHgxYywKLTB4OWIsIDB4MDAsIDB4Y2IsIDB4NTgsIDB4ODYsIDB4MDAsIDB4YTMsIDB4NTEsIDB4MDEsIDB4OWIsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMyLCAweDgzLCAweDQyLCAweGY1LCAweGQ4LCAweDAwLCAweGUwLCAweDEwLCAweDI3LCAweDJiLCAweDQ4LAotMHgwMiwgMHg2ZCwgMHg4MCwgMHg2ZSwgMHgyYSwgMHg0OSwgMHg4MiwgMHg0MiwgMHgwMywgMHhkOCwgMHg4MiwgMHgxYSwKLTB4Y2IsIDB4NmMsIDB4OWEsIDB4MWEsIDB4MDAsIDB4ZTAsIDB4MTIsIDB4MWEsIDB4YmEsIDB4NDIsIDB4MDUsIDB4ZDgsCi0weDI2LCAweDQ4LCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLCAweDAxLCAweDIwLCAweDM3LCAweGUwLAotMHhjMywgMHgxOSwgMHhjYSwgMHg2YywgMHg5MywgMHg0MiwgMHgwOCwgMHhkOCwgMHgyMiwgMHg0YSwgMHgzYSwgMHg0MywKLTB4MDAsIDB4OTIsIDB4MGEsIDB4MWMsIDB4NDksIDB4NmMsIDB4MDksIDB4MTgsIDB4OTIsIDB4NmMsIDB4MjMsIDB4MWMsCi0weDEyLCAweGUwLCAweDE2LCAweDFhLCAweDAwLCAweDk2LCAweDFiLCAweDQ5LCAweDQ5LCAweDZjLCAweDA5LCAweDE4LAotMHgxOSwgMHg0OCwgMHg4MiwgMHg2YywgMHgwMywgMHgyMCwgMHgyMywgMHgxYywgMHhmZiwgMHhmNywgMHg1ZSwgMHhmZSwKLTB4YjgsIDB4MWIsIDB4MTgsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YTMsIDB4MTksIDB4MTQsIDB4NDgsCi0weDgyLCAweDZjLCAweDQxLCAweDZjLCAweDAzLCAweDIwLCAweGZmLCAweGY3LCAweDUzLCAweGZlLCAweDAxLCAweDIwLAotMHgwZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg2OCwgMHg3MCwgMHg4YSwgMHg2OSwgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwKLTB4MTcsIDB4NjEsIDB4OGEsIDB4NjksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MjcsIDB4OGYsIDB4NjEsCi0weDAwLCAweGUwLCAweDg4LCAweDYxLCAweDBjLCAweDQ4LCAweDAyLCAweDIzLCAweGMxLCAweDZiLCAweDE5LCAweDQzLAotMHhjMSwgMHg2MywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0ZiwgMHg3MywKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weDUwLCAweGJhLCAweDIwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMiwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDksIDB4OGEsIDB4NmUsIDB4MTAsIDB4MTgsIDB4MDcsIDB4NGEsCi0weGQyLCAweDZjLCAweDEzLCAweDA0LCAweDFiLCAweDBjLCAweDgzLCAweDQyLCAweDAwLCAweGQ4LCAweDgwLCAweDFhLAotMHg4OCwgMHg2NiwgMHg4OCwgMHg2ZSwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwgMHg3MCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsCi0weDA2LCAweDQ5LCAweDRhLCAweDZlLCAweDEwLCAweDE4LCAweDA2LCAweDRhLCAweDEyLCAweDZjLCAweDgyLCAweDQyLAotMHgwMCwgMHhkOCwgMHg4MCwgMHgxYSwgMHg0OCwgMHg2NiwgMHg0OCwgMHg2ZSwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweDA1LCAweDIyLCAweDBhLCAweDYwLCAweDgyLCAweDg4LCAweGMwLCAweDQ2LAotMHg4YSwgMHg4MCwgMHgwMCwgMHgyMiwgMHg0YSwgMHg3MCwgMHg0MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MCwKLTB4Y2EsIDB4ODAsIDB4OGEsIDB4NjAsIDB4Y2EsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDUsIDB4MjIsIDB4MDIsIDB4NjAsCi0weDAwLCAweDIyLCAweDgyLCAweDgwLCAweDQyLCAweDcwLCAweDQxLCAweDgwLCAweGMyLCAweDgwLCAweDgyLCAweDYwLAotMHhjMiwgMHg2MCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHgwZSwgMHg0OCwKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsIDB4NjksIDB4NDYsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweGRkLCAweGZmLCAweDM4LCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMSwgMHgyNywgMHhkZiwgMHg4MCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4MTEsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MzgsIDB4MWMsCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjMSwgMHg4OCwgMHgwOSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4OTEsIDB4ODEsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4YmQsIDB4ZmYsIDB4MDEsIDB4MjAsCi0weDQwLCAweDAyLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LAotMHhmNSwgMHhmZSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzMsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAxLCAweDIwLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDcxLCAweGExLCAweDIxLAotMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MjAsIDB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzEsIDB4ZmYsIDB4MjEsIDB4YTEsIDB4MjIsCi0weDUyLCAweDAzLCAweDAxLCAweDMxLCAweDkxLCAweDYwLCAweDcwLCAweDQ3LCAweDI4LCAweDBmLCAweDAwLCAweDgwLAotMHgwMiwgMHgyMCwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsCi0weDcwLCAweDQ3LCAweGMwLCAweDg4LCAweGMwLCAweDA2LCAweGMwLCAweDBlLCAweGExLCAweDIxLCAweDQ5LCAweDAzLAotMHg0OCwgMHg2MSwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDgsIDB4NDksIDB4MGYsIDB4NmIsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDcxLCAweGZmLCAweGY4LCAweDA2LCAweGMwLCAweDBlLCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHhhOSwgMHhmZSwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDgwLCAweGI1LCAweDg1LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHg1YiwgMHhmZiwgMHhmOCwgMHg4OCwgMHgwNCwgMHhhOSwgMHgwMywgMHhmMCwgMHhjOSwgMHhmZiwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGYsIDB4ZDAsIDB4MDEsIDB4YTgsCi0weDQwLCAweDg4LCAweDgwLCAweDA4LCAweDAzLCAweDM4LCAweDgwLCAweDA4LCAweDAxLCAweDMwLCAweDA0LCAweDNiLAotMHg1OCwgMHg3MCwgMHgwNCwgMHg5OCwgMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwgMHg0MCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDUsIDB4ZTAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDA0LCAweDk4LCAweGMxLCAweDFkLCAweDAxLCAweDMxLAotMHg2OCwgMHg0NiwgMHhmZiwgMHhmNywgMHg3NSwgMHhmZSwgMHgwMSwgMHgyMCwgMHgwNSwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTQsIDB4NGYsIDB4MzksIDB4N2IsCi0weDAwLCAweDI5LCAweDIwLCAweGQxLCAweGY5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLCAweDQ5LCAweDc4LAotMHgwMCwgMHgyOSwgMHgxYSwgMHhkMSwgMHgxMCwgMHg0OSwgMHgwNSwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwOCwgMHgyMiwKLTB4MDAsIDB4YWIsIDB4NWEsIDB4ODAsIDB4OTgsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MDAsIDB4YWIsIDB4NTgsIDB4NzAsCi0weDAwLCAweDI0LCAweGRjLCAweDgwLCAweDA4LCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDQ4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgwMSwgMHgyMCwgMHgzOCwgMHg3MywgMHg2OCwgMHg0NiwgMHgwOCwgMHgzMSwKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDAsIDB4M2MsIDB4NzMsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZjksIDB4ZmUsIDB4YmEsIDB4NjgsIDB4MGQsIDB4NGMsIDB4MGUsIDB4NDgsCi0weDAwLCAweDJhLCAweDA1LCAweGQxLCAweDBkLCAweDQ5LCAweGZmLCAweGY3LCAweGU0LCAweGZjLCAweDAwLCAweDI4LAotMHgwYywgMHhkYSwgMHgwNSwgMHhlMCwgMHhiOSwgMHg4OCwgMHgwYiwgMHg0YiwgMHhmZiwgMHhmNywgMHhkZiwgMHhmYywKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZGEsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweDIyLCAweGZlLCAweDAwLCAweDIwLCAweDA0LCAweGIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4MGQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NTksIDB4YmQsIDB4MjEsIDB4NDAsCi0weDAwLCAweGI1LCAweGMwLCAweDg4LCAweDAzLCAweGYwLCAweDJlLCAweGZmLCAweDAwLCAweDIwLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhlMiwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZGQsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weDAxLCAweDFjLCAweDAyLCAweDIwLCAweDAwLCAweGYwLCAweDAyLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhiMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHgwOCwgMHgxYywgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4YjUsIDB4ZmUsIDB4MjEsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4YTQsIDB4ZmMsIDB4MDQsIDB4MWMsIDB4MjAsIDB4NGEsCi0weDAwLCAweDIxLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGEwLCAweGZjLCAweDAwLCAweDI4LCAweDI3LCAweGQwLAotMHgwNCwgMHhhOSwgMHgxZCwgMHg0YSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg5OSwgMHhmYywgMHgwNCwgMHhhOCwKLTB4MDAsIDB4MjMsIDB4MDEsIDB4MmYsIDB4MDYsIDB4ZDEsIDB4MGMsIDB4YWEsIDB4MDIsIDB4MzIsIDB4MDAsIDB4MjEsCi0weDEzLCAweDYwLCAweDAxLCAweDMxLCAweDEwLCAweDI5LCAweGZiLCAweGQzLCAweDAxLCAweDY4LCAweDA0LCAweDI5LAotMHgwNCwgMHhkOSwgMHg4OSwgMHgwOCwgMHgwMywgMHgzOSwgMHg4OSwgMHgwOCwgMHgwMSwgMHgzMSwgMHgwMCwgMHhlMCwKLTB4MTksIDB4MWMsIDB4MDAsIDB4YWIsIDB4NTksIDB4NzAsIDB4MDYsIDB4YTksIDB4MDksIDB4NzgsIDB4YzAsIDB4NDYsCi0weGQ5LCAweDgwLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDA3LCAweDk4LCAweGMwLCAweDQ2LAotMHgwMywgMHg5MCwgMHgwNCwgMHgzMywgMHgwOCwgMHhhZCwgMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmUsIDB4ZmMsIDB4NjgsIDB4NDYsCi0weDI5LCAweDFjLCAweGZmLCAweGY3LCAweGI3LCAweGZkLCAweDAxLCAweDIwLCAweDQ2LCAweGIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg1OSwgMHhiMSwgMHgyMSwgMHg0MCwKLTB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsCi0weDAyLCAweDIwLCAweDAwLCAweGYwLCAweDEwLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHgwMSwgMHgxYywgMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHhhMiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGYwLCAweGI1LCAweGM3LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDFjLAotMHgwMSwgMHhhOSwgMHhmZiwgMHhmNywgMHg0ZCwgMHhmZSwgMHgyMSwgMHg0OCwgMHhmZiwgMHhmNywgMHgzYywgMHhmYywKLTB4MDAsIDB4OTAsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MDEsIDB4YmEsIDB4NjgsIDB4MDQsIDB4MzAsIDB4ZmMsIDB4MmEsCi0weDI1LCAweGQ4LCAweGZmLCAweDIzLCAweDA5LCAweDMzLCAweDk4LCAweDQyLCAweDIxLCAweGQ4LCAweDE5LCAweDJjLAotMHgxZiwgMHhkOCwgMHhmZCwgMHg4OCwgMHhmOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MCwgMHhmOSwgMHgxZCwKLTB4MDksIDB4MzEsIDB4MDYsIDB4YWIsIDB4MDAsIDB4MjAsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZGQsCi0weDQwLCAweGM5LCAweDQwLCAweGMzLCAweDQwLCAweGM5LCAweDQwLCAweGMzLCAweDQwLCAweGM5LCAweDQwLCAweGMzLAotMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg3OCwKLTB4ODYsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MjAsIDB4MWMsIDB4MDUsIDB4YTksIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDIxLCAweGZjLCAweDAwLCAweDI4LCAweDA1LCAweGQwLCAweDAxLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMSwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNywgMHg0OSwgMHgwMCwgMHg5OCwgMHhmZiwgMHhmNywKLTB4MDYsIDB4ZmMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4NGYsIDB4ZmQsIDB4MDEsIDB4MjAsCi0weDQ3LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLAotMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHgxYiwgMHhmZSwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4ZmMsIDB4ODgsIDB4MjUsIDB4NGQsCi0weDY4LCAweDY4LCAweDAxLCAweDMwLCAweDY5LCAweDQ2LCAweDY4LCAweDYwLCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhmNSwgMHhmZCwgMHgxMCwgMHgyYywgMHgwOCwgMHhkMywgMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MTcsIDB4ZTAsCi0weDc4LCAweDc4LCAweDgyLCAweDAwLCAweGZiLCAweDFkLCAweDA5LCAweDMzLCAweDAwLCAweDIwLCAweGI5LCAweDY4LAotMHgwMCwgMHgyYSwgMHgxNSwgMHhkOSwgMHg0MCwgMHhjYiwgMHgwZiwgMHgxYywKLTB4MDEsIDB4MzEsIDB4YmUsIDB4NDIsIDB4MGQsIDB4ZDAsIDB4MDAsIDB4YWEsIDB4MTIsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDFhLCAweDQzLCAweDAwLCAweGFiLCAweDFhLCAweDcwLCAweDA0LCAweDIyLCAweGRhLCAweDgwLCAweDAyLCAweDkwLAotMHgwMywgMHg5MSwgMHgwNCwgMHgzMywgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgxNSwgMHhlMCwgMHgwMSwgMHgzMCwKLTB4OTAsIDB4NDIsIDB4ZTksIDB4ZDMsIDB4MDAsIDB4YWIsIDB4NWMsIDB4NzAsIDB4MDIsIDB4OTQsIDB4NjksIDB4NjgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkxLCAweGEyLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweDMzLCAweDAwLCAweDJhLAotMHgwNSwgMHhkOSwgMHgwZiwgMHgxYywgMHg4MCwgMHhjMywgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMSwgMHg5MCwgMHg0MiwKLTB4ZjksIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmMsIDB4MDEsIDB4MjAsCi0weDQ2LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDljLCAweDAzLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgyMywgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMSwgMHg0MiwgMHgwOSwgMHgwMCwgMHhkMywKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MjcsIDB4M2EsIDB4MWMsIDB4NDMsIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4MjIsCi0weDExLCAweDQzLCAweDFlLCAweDRhLCAweDIwLCAweDI0LCAweGQzLCAweDY4LCAweDAxLCAweDJiLCAweDJlLCAweGQxLAotMHg4MCwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgwYywgMHg0MywgMHgyMCwgMHgxYywgMHgxYiwgMHgyMywKLTB4ZGIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4OGIsIDB4MDksIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDQsIDB4MjcsCi0weDM4LCAweDQzLCAweGQxLCAweDZmLCAweDA5LCAweDY4LCAweDA5LCAweDBhLCAweDA3LCAweGQyLCAweGQxLCAweDFkLAotMHg3OSwgMHgzMSwgMHgwOSwgMHg2OCwgMHgwOSwgMHg2OCwgMHgwOSwgMHgwYSwgMHgwMSwgMHhkMywgMHgwOCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4NzksIDB4MDMsIDB4MjksCi0weDAyLCAweGQxLCAweGZmLCAweDIzLCAweDAxLCAweDMzLCAweDE4LCAweDQzLCAweDBiLCAweDQ5LCAweDA5LCAweDZhLAotMHgxMCwgMHgyMiwgMHg0YiwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMiwgMHgxMCwgMHg0MywgMHg4OSwgMHgwNywKLTB4ODksIDB4MGYsIDB4ODksIDB4MDEsIDB4MDgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MGMsCi0weDAwLCAweGQyLCAweDAwLCAweDI0LCAweDBjLCAweDQzLCAweDIwLCAweDFjLCAweGVjLCAweGU3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwKLTB4ZjAsIDB4YjUsIDB4M2EsIDB4NGMsIDB4MjAsIDB4MWMsIDB4MDQsIDB4ZjAsIDB4MDcsIDB4ZmEsIDB4MzksIDB4NDgsCi0weGUzLCAweDIzLCAweDFiLCAweDAxLCAweGM3LCAweDE4LCAweGI5LCAweDc5LCAweDM3LCAweDRlLCAweGM1LCAweDFkLAotMHg3OSwgMHgzNSwgMHgwNiwgMHgyOSwgMHg2MiwgMHhkMiwgMHgwMiwgMHhhMywgMHg1YiwgMHg1YywgMHg1YiwgMHgwMCwKLTB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsIDB4MDMsIDB4MGUsIDB4MWUsIDB4MzcsIDB4NGUsIDB4NTUsIDB4MDEsIDB4MjAsCi0weGI4LCAweDcxLCAweDAwLCAweDIwLCAweGIwLCAweDYwLCAweGZmLCAweGY3LCAweDk1LCAweGZmLCAweDA1LCAweDIzLAotMHg5OCwgMHg0MywgMHgwMCwgMHhmMCwgMHg2ZiwgMHhmOCwgMHgwYywgMHhlMCwgMHhmZiwgMHhmNywgMHg4ZSwgMHhmZiwKLTB4YzAsIDB4MDgsIDB4MDYsIDB4ZDMsIDB4YjAsIDB4NjgsIDB4NDEsIDB4MWMsIDB4YjEsIDB4NjAsIDB4MGEsIDB4MjgsCi0weDAzLCAweGQ5LCAweDA0LCAweDIwLCAweDAwLCAweGUwLCAweDAyLCAweDIwLCAweGI4LCAweDcxLCAweDY0LCAweDIyLAotMHgyMCwgMHgxYywgMHgyYiwgMHhlMCwgMHgwNiwgMHgxYywgMHhjMCwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MjAsIDB4YjgsIDB4NzEsIDB4MjAsIDB4MWMsIDB4MjAsIDB4NGEsCi0weDAwLCAweDIxLCAweDA0LCAweGYwLCAweDk5LCAweGY5LCAweGYwLCAweDZmLCAweDA0LCAweDIzLCAweDAxLCAweDY4LAotMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgyOCwgMHg2OCwgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4MjEsIDB4YjksIDB4NzEsIDB4MjksIDB4NjgsCi0weDA0LCAweDIzLCAweDBhLCAweDY4LCAweDlhLCAweDQzLCAweDBhLCAweDYwLCAweGMwLCAweDZmLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmZiwgMHhmNywgMHg1YSwgMHhmZiwgMHgwOCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MjAsIDB4MWMsIDB4MTAsIDB4NGEsIDB4MDAsIDB4MjEsIDB4MDQsIDB4ZjAsCi0weDc3LCAweGY5LCAweGU1LCAweGU3LCAweGZmLCAweGY3LCAweDRlLCAweGZmLCAweDA0LCAweDIzLCAweDE4LCAweDQzLAotMHgwMCwgMHhmMCwgMHgyOCwgMHhmOCwgMHhkZSwgMHhlNywgMHgwMCwgMHgyMCwgMHgyOSwgMHg2OCwgMHg2MCwgMHgyMywKLTB4MGEsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmEsIDB4ZDUsIDB4ZTcsCi0weDA2LCAweDIwLCAweGI4LCAweDcxLCAweGQyLCAweGU3LCAweDAwLCAweDAwLCAweGE5LCAweDc5LCAweDIxLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5YywgMHgwMywgMHgwMCwgMHg4MCwgMHgzMCwgMHg3NSwgMHgwMCwgMHgwMCwKLTB4MTAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MjAsCi0weDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDcxLCAweDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLAotMHgwNCwgMHhmMCwgMHg0ZSwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4YTksIDB4NzksIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MzEsIDB4NDgsIDB4MDAsIDB4NjgsCi0weDc5LCAweDA4LCAweDAzLCAweGQzLCAweDEwLCAweDIzLCAweDAxLCAweDFjLCAweDk5LCAweDQzLCAweDAxLCAweGUwLAotMHgxMCwgMHgyMSwgMHgwMSwgMHg0MywgMHgyZCwgMHg0YywgMHhlMiwgMHg2OCwgMHgwMSwgMHgyYSwgMHgwNSwgMHhkMSwKLTB4MjIsIDB4NzksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTksIDB4NDMsCi0weDgxLCAweDQyLCAweDAyLCAweGQwLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweDAxLCAweDYwLCAweGUwLCAweDY4LAotMHgwMSwgMHgyOCwgMHgyMCwgMHhkMSwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlMCwgMHgxOCwgMHg4MCwgMHg4YiwKLTB4ZjksIDB4MDgsIDB4MDQsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4MDEsIDB4MWMsIDB4OTksIDB4NDMsCi0weDAxLCAweGUwLCAweDAxLCAweDIxLCAweGM5LCAweDAyLCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHgxYSwgMHhmYiwgMHgzOCwgMHgwOSwgMHgwNywgMHhkMywgMHhlMCwgMHg2ZiwgMHg4MCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZTAsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MDAsIDB4ZTAsCi0weGUwLCAweDZmLCAweDgwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDE1LCAweDQ4LAotMHgwMSwgMHg2YSwgMHg3OCwgMHgwOSwgMHgwMywgMHhkMywgMHhmZiwgMHgyMCwgMHgwMSwgMHgzMCwgMHgwOCwgMHg0MywKLTB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDgsIDB4MWMsIDB4MDEsIDB4MzMsIDB4OTgsIDB4NDMsIDB4ODAsIDB4MDgsCi0weDgwLCAweDAwLCAweGJhLCAweDA5LCAweDkyLCAweDA3LCAweDkyLCAweDBmLCAweDEwLCAweDQzLCAweDg4LCAweDQyLAotMHgwMiwgMHhkMCwgMHgwYywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwgMHhlMSwgMHg2OCwgMHgwMSwgMHgyOSwKLTB4MDgsIDB4ZDEsIDB4NzksIDB4MGEsIDB4MDYsIDB4ZDMsIDB4ZmYsIDB4MjMsIDB4MDQsIDB4MzMsIDB4MTgsIDB4NDAsCi0weDAzLCAweDI4LCAweDAxLCAweGQxLCAweGZmLCAweGY3LCAweDhlLCAweGZmLCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsCi0weGIxLCAweGZlLCAweDgwLCAweDA5LCAweDFiLCAweGQyLCAweDBmLCAweDQ4LCAweGUzLCAweDIzLCAweDFiLCAweDAxLAotMHhjMSwgMHgxOCwgMHg0YSwgMHg3OSwgMHgwMCwgMHgyYSwgMHgxNCwgMHhkMSwgMHgwMSwgMHgyMiwgMHg0YSwgMHg3MSwKLTB4MDAsIDB4MjcsIDB4ODAsIDB4MzAsIDB4MDAsIDB4NjgsIDB4NjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsCi0weDAxLCAweDYwLCAweDA4LCAweDQ4LCAweDA2LCAweGUwLCAweDAyLCAweDIwLCAweDAyLCAweGYwLCAweDhjLCAweGZjLAotMHgwNywgMHgyMCwgMHgwMiwgMHhmMCwgMHg1YiwgMHhmYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgzNiwgMHhmYSwKLTB4ZjUsIDB4ZTcsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHgzNywgMHhmYywgMHhmZiwgMHhmNywgMHg4NSwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHgwOCwgMHg0OCwKLTB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDcsIDB4NDgsIDB4MDAsIDB4NmEsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweDY3LCAweGZiLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweDE3LCAweGZjLCAweGY4LCAweDg4LCAweGZmLCAweGY3LCAweDQyLCAweGZmLAotMHhmZiwgMHhmNywgMHg2MiwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGIwLCAweGI1LCAweGM2LCAweGIwLCAweGM3LCAweDg4LCAweDY5LCAweDQ2LCAweGZmLCAweGY3LAotMHgwMSwgMHhmYywgMHgwMSwgMHgyNCwgMHgxYSwgMHg0YiwgMHg5ZiwgMHg0MiwgMHgwYSwgMHhkOSwgMHgwMCwgMHhhOCwKLTB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsCi0weGQ4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDIwLCAweGUwLCAweDE0LCAweDQ4LCAweGZmLCAweGY3LAotMHhlMSwgMHhmOSwgMHgwNSwgMHgxYywgMHgxMywgMHg0YSwgMHgzOCwgMHgxYywgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywKLTB4ZGQsIDB4ZjksIDB4MTIsIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDgsIDB4ZjksIDB4MDEsIDB4MmYsCi0weDA2LCAweGQxLCAweDBjLCAweGE5LCAweDAwLCAweDIwLCAweDAwLCAweDIyLAotMHgwYSwgMHg2MCwgMHgwMSwgMHgzMCwgMHgxMCwgMHgyOCwgMHhmYiwgMHhkMywgMHgxMCwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4NTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDUsIDB4OTgsIDB4YzAsIDB4NDYsCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDA2LCAweGE5LCAweGZmLCAweGY3LCAweDBmLCAweGZiLCAweDIwLCAweDFjLAotMHg0NiwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmZiwgMHgwMSwgMHgwMCwgMHgwMCwKLTB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weGYwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LAotMHhiYiwgMHhmYiwgMHhmYywgMHg4OCwgMHg3OCwgMHg3OCwgMHgwMSwgMHgyNSwgMHgxMCwgMHgyOCwgMHgwMSwgMHhkMSwKLTB4MTksIDB4MmMsIDB4MDksIDB4ZDksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDA0LCAweDMzLCAweDI3LCAweGUwLAotMHhiOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MCwgMHhmOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MCwKLTB4MDYsIDB4YWEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsIDB4MDAsIDB4MjEsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MjgsCi0weDBkLCAweGRkLCAweDAwLCAweDIwLCAweDQwLCAweGNiLCAweDQwLCAweGMyLCAweDAxLCAweDMwLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwNCwgMHgyOCwgMHhmOCwgMHhkYiwgMHg0OCwgMHgxYywgMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4NzgsIDB4NzgsIDB4ODgsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MGIsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4N2UsIDB4ZjksCi0weDA3LCAweDFjLCAweDBhLCAweDRhLCAweDIwLCAweDFjLCAweDA0LCAweGE5LCAweGZmLCAweGY3LCAweDdhLCAweGY5LAotMHgwOCwgMHg0OSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg3NSwgMHhmOSwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmYsIDB4ZjcsIDB4YmUsIDB4ZmEsIDB4MjgsIDB4MWMsIDB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweGM1LCAweGFmLCAweDIxLCAweDQwLAotMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwMCwgMHgyNywKLTB4ZTYsIDB4ODgsIDB4YTIsIDB4NjgsIDB4NDcsIDB4NDksIDB4MDgsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDAsCi0weDAwLCAweDJlLCAweDAxLCAweGQwLCAweDAxLCAweDJlLCAweDAxLCAweGQxLCAweDAxLCAweDI3LCAweDAxLCAweGUwLAotMHgwNCwgMHgyZSwgMHgwMCwgMHhkMSwgMHgwMywgMHgyNiwgMHgwMSwgMHgyNSwgMHg0MSwgMHg0OCwgMHgwNSwgMHgyZSwKLTB4NjYsIDB4ZDIsIDB4MDIsIDB4YTMsIDB4OWIsIDB4NWQsIDB4NWIsIDB4MDAsIDB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsCi0weDAzLCAweDA2LCAweDA4LCAweDBjLCAweDEwLCAweDAwLCAweDA1LCAweDgwLCAweDAwLCAweDIzLCAweDAzLCAweGUwLAotMHgwNSwgMHg4MCwgMHgwNSwgMHhlMCwgMHgwMCwgMHgyMywgMHgwMywgMHg4MCwgMHg0MywgMHg4MCwgMHgwNiwgMHhlMCwKLTB4MDAsIDB4MjMsIDB4MDMsIDB4ODAsIDB4NDUsIDB4ODAsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsCi0weDAzLCAweDgwLCAweGNiLCAweDFkLCAweDc5LCAweDMzLCAweDllLCAweDg5LCAweDAxLCAweDIzLCAweDViLCAweDAyLAotMHg5ZSwgMHg0MiwgMHgwMiwgMHhkYiwgMHhkMiwgMHgwNywgMHhkMiwgMHgwZiwgMHgwMCwgMHhlMCwgMHgwMSwgMHgyMiwKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4ODksIDB4ODgsIDB4ZmYsIDB4MjMsIDB4ZTEsIDB4MzMsCi0weDk5LCAweDQzLCAweDAxLCAweDIzLCAweDE5LCAweDQzLCAweDA2LCAweDg4LCAweGZmLCAweDMzLCAweDllLCAweDQyLAotMHgwZCwgMHhkMSwgMHhmZiwgMHgyMCwgMHhlMSwgMHgzMCwgMHgwOCwgMHg0MywgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MjAsIDB4ZTAsIDB4MDEsIDB4MjEsCi0weDg5LCAweDAyLCAweDAxLCAweDQzLCAweDFjLCAweGUwLCAweDAxLCAweDJlLCAweDBhLCAweGQxLCAweDQwLCAweDg4LAotMHgwMSwgMHgyOCwgMHgwNCwgMHhkMSwgMHg2MCwgMHgyMywgMHgxOSwgMHg0MywgMHgwMCwgMHgyYSwgMHgxMywgMHhkMCwKLTB4MGMsIDB4ZTAsIDB4MjAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MGYsIDB4ZTAsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZDEsCi0weDQwLCAweDg4LCAweDAxLCAweDI4LCAweDA4LCAweGQxLCAweGZmLCAweDIzLCAweDgxLCAweDMzLCAweDE5LCAweDQzLAotMHgwMCwgMHgyYSwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOSwgMHg0MywgMHgwMSwgMHhlMCwKLTB4ODAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDksIDB4MjEsCi0weDQ5LCAweDAyLCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDcwLCAweGY5LCAweDAwLCAweDJmLCAweDAyLCAweGQxLAotMHgwMCwgMHgyMCwgMHgxMiwgMHhlMCwgMHhmZiwgMHhlNywgMHg2OSwgMHg0NiwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZmEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsCi0weDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDA0LCAweDMzLAotMHhmZiwgMHhmNywgMHgyMiwgMHhmYSwgMHgyOCwgMHgxYywgMHgwNCwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDg4LCAweDFjLCAweDAwLCAweDgwLCAweGMwLCAweDg4LCAweDUxLCAweDIxLCAweDg5LCAweDAzLCAweDA4LCAweDYyLAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNSwgMHgxNiwgMHg0ZiwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwKLTB4MDcsIDB4ZDEsIDB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4NDAsIDB4OGEsIDB4ODAsIDB4MjEsCi0weDAxLCAweDQzLCAweDFiLCAweDIwLCAweDA3LCAweGUwLCAweDZkLCAweDIzLCAweDViLCAweDAxLCAweGY4LCAweDE4LAotMHg4MCwgMHg4YiwgMHgwMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMSwgMHg0MywgMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwKLTB4MzMsIDB4ZjksIDB4MDEsIDB4MjAsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4MDgsIDB4ODAsCi0weDQ4LCAweDgwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGY4LCAweDE4LCAweDgwLCAweDhiLCAweDAxLCAweDIzLAotMHgxYiwgMHgwMywgMHg5OCwgMHg0MywgMHg0MSwgMHgyMSwgMHgwOSwgMHgwMiwgMHgwMSwgMHg0MywgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDE3LCAweDRmLCAweGY4LCAweDY4LCAweDAxLCAweDI4LAotMHgwOCwgMHhkMSwgMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg0MCwgMHg4YSwgMHg4MCwgMHgyMywKLTB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MWIsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGY4LCAweDE4LCAweDgwLCAweDhiLCAweDAxLCAweDIzLCAweDViLCAweDAzLCAweDk4LCAweDQzLCAweDAxLCAweDFjLAotMHgxMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHgwMSwgMHhmOSwgMHhmZiwgMHgyMCwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwKLTB4ZjksIDB4MTgsIDB4MDEsIDB4MzAsIDB4MDgsIDB4ODAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjgsIDB4MTgsCi0weDgwLCAweDhiLCAweDQxLCAweDIzLCAweDFiLCAweDAyLCAweDk4LCAweDQzLCAweDA5LCAweDIxLCAweDQ5LCAweDAyLAotMHgwMSwgMHg0MywgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhlZSwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDA4LCAweDQ5LCAweGNmLCAweDZhLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDY5LCAweGZhLCAweGI4LCAweDA1LAotMHg4MCwgMHgwZCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKLTB4YTEsIDB4ZjksIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweDAwLCAweDE0LCAweDQwLCAweGMwLCAweDg4LCAweDlmLCAweDIzLCAweDE4LCAweDQwLCAweDA1LCAweDQ5LAotMHhjOSwgMHg2YSwgMHgxYiwgMHgyMywgMHg1YiwgMHgwMSwgMHgxOSwgMHg0MCwgMHgwOCwgMHg0MywgMHgwMywgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weDQwLCAweDAwLCAweDE0LCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDBkLCAweDQ5LCAweDBmLCAweDZhLAotMHgwMSwgMHgyZiwgMHgwMSwgMHhkMSwgMHhmZiwgMHgwMywgMHgwNywgMHhlMCwgMHgwMiwgMHgyZiwgMHgwMSwgMHhkMSwKLTB4M2YsIDB4MDMsIDB4MDMsIDB4ZTAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4ZmYsIDB4MDIsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDM1LCAweGZhLCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg2ZiwgMHhmOSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NDAsIDB4YzIsIDB4ODgsIDB4YTEsIDB4MjAsCi0weDQwLCAweDAzLCAweDAwLCAweDIxLCAweDAxLCAweDIzLCAweDViLCAweDAzLCAweDlhLCAweDQyLCAweDAxLCAweGQxLAotMHgwMiwgMHgyMiwgMHgwNCwgMHhlMCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg5YSwgMHg0MiwgMHgwMiwgMHhkMSwKLTB4MDEsIDB4MjIsIDB4MDIsIDB4NjIsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4NjIsIDB4MDgsIDB4MWMsIDB4NzAsIDB4NDcsCi0weDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDAyLCAweGYwLCAweDlmLCAweGY4LCAweDY5LCAweDQ2LAotMHgwNCwgMHgxYywgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgwYSwgMHhmYSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwKLTB4MDksIDB4NGYsIDB4ZjgsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweDQwLCAweGY5LCAweGY4LCAweDZkLCAweGMwLCAweDA3LCAweGMwLCAweDBmLCAweDA1LCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4ZTMsIDB4ZjksIDB4MDYsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweDFiLCAweGY5LCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDgwLCAweDAwLCAweDE0LCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweDg3LCAweDY4LAotMHhmZiwgMHhmNywgMHhjNiwgMHhmOSwgMHgyMCwgMHgyZiwgMHgwNywgMHhkMiwgMHg3OCwgMHgwMCwgMHgwYywgMHg0OSwKLTB4NDAsIDB4MTgsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDYsIDB4ZTAsCi0weDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLAotMHgwMiwgMHgyMCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweGMxLCAweDg4LCAweDgyLCAweDY4LAotMHgyMCwgMHgyYSwgMHgwNCwgMHhkMiwgMHgxMCwgMHgxYywgMHgwMiwgMHhmMCwgMHgxNywgMHhmOCwgMHgwMCwgMHgyMCwKLTB4MTAsIDB4ZTAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4OWEsIDB4ZjksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsCi0weDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgwNCwgMHgzMywgMHhmZiwgMHhmNywgMHhjZCwgMHhmOCwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzcsIDB4ODgsCi0weDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDgzLCAweGY5LCAweDEwLCAweDQ4LCAweGZlLCAweGY3LCAweDcyLCAweGZmLAotMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgMHgwMiwgMHhmMCwgMHhmMiwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNiwgMHhkMCwKLTB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MzYsIDB4ZmYsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsCi0weDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDA3LCAweDQ5LCAweDIwLCAweDFjLAotMHhmZSwgMHhmNywgMHg1ZiwgMHhmZiwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHhhOCwgMHhmOCwKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDI0LCAweDAyLCAweGZmLCAweGZmLCAweDNjLCAweDAyLCAweGZmLCAweGZmLCAweGIwLCAweGI1LCAweDg0LCAweGIwLAotMHhjNywgMHg4OCwgMHg2OSwgMHg0NiwgMHg4NCwgMHg2OCwgMHhmZiwgMHhmNywgMHg1NywgMHhmOSwgMHgxMCwgMHg0OCwKLTB4ZmUsIDB4ZjcsIDB4NDYsIDB4ZmYsIDB4MGYsIDB4NGEsIDB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4ZmUsIDB4ZjcsCi0weDQzLCAweGZmLCAweDAwLCAweDI4LCAweDA2LCAweGQwLCAweDBkLCAweDRiLCAweDAyLCAweDIwLCAweDM5LCAweDFjLAotMHgyMiwgMHgxYywgMHhmZSwgMHhmNywgMHgzYywgMHhmZiwgMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4MzIsIDB4ZmYsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZmLCAweGY3LCAweDdiLCAweGY4LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweGIwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHg1OSwgMHhiMSwgMHgyMSwgMHg0MCwKLTB4NTksIDB4YjAsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsCi0weDQzLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LAotMHhjMiwgMHg4OCwgMHgxOSwgMHg0YiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMCwgMHgyYSwgMHgwMywgMHhkMSwKLTB4MTgsIDB4NmIsIDB4MTAsIDB4MjMsIDB4OTgsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MmEsIDB4MDQsIDB4ZDEsCi0weDE4LCAweDZiLCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDQ4LCAweDYxLCAweDFmLCAweGUwLCAweDAyLCAweDJhLAotMHgxZCwgMHhkMSwgMHhjMiwgMHg2OCwgMHg4NywgMHg2OCwgMHgwMCwgMHgyMCwgMHgzYiwgMHgxYywgMHhjMywgMHg0MCwKLTB4ZGIsIDB4MDcsIDB4ZGIsIDB4MGYsIDB4OWIsIDB4MDIsIDB4MDMsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDIwLCAweDI4LCAweGYzLCAweGRiLCAweDAwLCAweDIwLCAweDEzLCAweDFjLAotMHhjMywgMHg0MCwgMHhkYiwgMHgwNywgMHhkYiwgMHgwZiwgMHg5YiwgMHgwMiwgMHhjNywgMHgxZCwgMHgxOSwgMHgzNywKLTB4M2IsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MjAsIDB4MjgsCi0weGYxLCAweGRiLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDQwLAotMHg4MCwgMHhiNCwgMHhjMiwgMHg4OCwgMHg4MSwgMHg2OCwgMHgxMCwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMCwgMHg0MywKLTB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjAsIDB4MGMsIDB4NGIsCi0weGMwLCAweDQ2LCAweDFhLCAweDgwLCAweDBhLCAweDBjLCAweDE3LCAweDAyLAotMHgxMiwgMHgxMiwgMHgzYSwgMHg0MywgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg0MiwgMHg2MCwgMHg1YSwgMHg4MCwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4MDIsIDB4MDksIDB4MGEsIDB4MTEsIDB4NDMsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDgxLCAweDYwLCAweDk5LCAweDgwLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4MTMsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTMsIDB4MDIsIDB4MTIsIDB4MTIsCi0weDEzLCAweDQzLCAweDRhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDFmLCAweDFjLCAweDEzLCAweDAyLAotMHgxMiwgMHgxMiwgMHgxMywgMHg0MywgMHg4OSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwYSwgMHgwMiwKLTB4MDksIDB4MTIsIDB4MTEsIDB4NDMsIDB4MGMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4NjksIDB4NDYsIDB4MWQsIDB4MWMsCi0weGZmLCAweGY3LCAweGFlLCAweGY4LCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDI4LCAweDA0LCAweDIwLCAweDQzLAotMHgwMiwgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhlNSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMxLCAweDg4LCAweDgyLCAweDY4LCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgxMCwgMHgwYywgMHgwMywgMHgwMiwKLTB4MDAsIDB4MTIsIDB4MTgsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4NjEsIDB4MTAsIDB4MDQsCi0weDAwLCAweDBjLCAweDAyLCAweDAyLCAweDAwLCAweDBhLCAweDEwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHg0OCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTYsIDB4NGIsIDB4ZDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsCi0weDBhLCAweDAyLCAweDA5LCAweDEyLCAweDExLCAweDQzLCAweDFhLCAweDY5LCAweDEyLCAweDA0LCAweDEyLCAweDBjLAotMHgxNywgMHgwMiwgMHgxMiwgMHgxMiwgMHgzYSwgMHg0MywgMHg1YiwgMHg2OSwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywKLTB4MWYsIDB4MDIsIDB4MWIsIDB4MTIsIDB4M2IsIDB4NDMsIDB4MWYsIDB4MDQsIDB4M2YsIDB4MGMsIDB4MDUsIDB4MjMsCi0weDAwLCAweDkzLCAweDg0LCAweDg4LCAweDAxLCAweGFiLCAweDFjLCAweDgwLCAweDAwLCAweDI0LCAweDA0LCAweDNiLAotMHg1YywgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkOSwgMHg4MCwgMHgxMCwgMHgwNCwKLTB4MzgsIDB4NDMsIDB4MDIsIDB4OTAsIDB4MDMsIDB4OTQsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCi0weDk1LCAweGZmLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYiwgMHg0OSwgMHg4YSwgMHg2YSwKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsCi0weDA0LCAweDNiLCAweDU5LCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGRhLCAweDgwLAotMHgwMiwgMHg5MSwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHhmZSwgMHhmNywgMHg3OSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYiwgMHg0OSwgMHgwYSwgMHg2YSwKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsCi0weDA0LCAweDNiLCAweDU5LCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGRhLCAweDgwLAotMHgwMiwgMHg5MSwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHhmZSwgMHhmNywgMHg1NSwgMHhmZiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHhiNSwgMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhmZSwgMHhmNywKLTB4ZjQsIDB4ZmQsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzUsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGY3LCAweGZmLCAweDA2LCAweDQ4LAotMHgwMCwgMHg2YiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywKLTB4MmYsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGZkLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmOCwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZjMsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweDEwLCAweDQ4LCAweGZlLCAweGY3LCAweGM2LCAweGZkLAotMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHg4OCwgMHg2MCwgMHgwMCwgMHgyMSwKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NzEsIDB4MGMsIDB4NDgsIDB4MDIsIDB4NjgsIDB4NTIsIDB4MGMsCi0weDA1LCAweGQyLCAweDAyLCAweDY4LCAweDEyLCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLAotMHgwMywgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhjNywgMHg2MCwgMHgwMiwgMHhlMCwgMHgwNywgMHg0OCwKLTB4YzAsIDB4NDYsIDB4MDcsIDB4NjQsIDB4MDgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGQ1LCAweDk0LCAweDIxLCAweDQwLCAweDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMCwKLTB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzIsIDB4MTIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4Y2IsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDg4LCAweDFjLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIwLAotMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg3MiwgMHgxNSwgMHgyMCwgMHhmZiwgMHhmNywgMHhiZiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4ZjAsCi0weGY5LCAweGZmLCAweDAxLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLAotMHgwNywgMHgxYywgMHhmOCwgMHg4OCwgMHgwMiwgMHhmMCwgMHhmZSwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwKLTB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4ODIsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweGJiLCAweGZlLCAweDAxLCAweDIwLAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsCi0weDZkLCAweGZmLCAweDAxLCAweDI3LCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAweDA5LCAweDQ4LCAweDgxLCAweDg5LAotMHgwOSwgMHgwNCwgMHhjMiwgMHg4OSwgMHgxMSwgMHg0MywgMHgwMiwgMHg5MSwgMHg4MSwgMHg4OCwgMHgwOSwgMHgwNCwKLTB4YzAsIDB4ODgsIDB4MDgsIDB4NDMsIDB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCi0weDliLCAweGZlLCAweDM4LCAweDFjLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg2OSwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NjQsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweDVmLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHhmZSwgMHhmNywgMHg1YSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4NTUsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NTAsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDRiLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0NiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NDEsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsCi0weGZlLCAweGY3LCAweDNjLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHgzNywgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHgzMiwgMHhmZiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDgsIDB4YTksIDB4ZmUsIDB4ZjcsCi0weDEzLCAweGZmLCAweDY5LCAweDQ2LCAweDA4LCAweGE4LCAweDAyLCAweGYwLCAweGE5LCAweGZmLCAweDAyLCAweDIwLAotMHgwOCwgMHhhYiwgMHg1OCwgMHg3MCwgMHg2OSwgMHg0NiwgMHgwOCwgMHhhOCwgMHhmZSwgMHhmNywgMHg0OCwgMHhmZSwKLTB4MDEsIDB4MjAsIDB4MGMsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCi0weDE5LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLAotMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHhmOCwgMHhmZSwgMHhmYSwgMHg4OCwgMHgxMiwgMHg0OSwKLTB4MDEsIDB4MjQsIDB4YzgsIDB4MWQsIDB4ODksIDB4MzAsIDB4MDAsIDB4MmEsIDB4MGYsIDB4ZDAsIDB4MDQsIDB4NzAsCi0weDQ0LCAweDcwLCAweGI4LCAweDY4LCAweDAwLCAweDBjLCAweDgwLCAweDMxLCAweGM4LCAweDgyLCAweGI4LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MywgMHhmOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg0OCwgMHg4MywgMHhmOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ODgsIDB4ODMsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjEsCi0weDAxLCAweDcwLCAweDQxLCAweDcwLCAweDA2LCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgxNywgMHhmZSwgMHgyMCwgMHgxYywgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweGUzLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHhmZSwgMHhmNywgMHhkZSwgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4ZDksIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZDQsIDB4ZmUsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGNmLCAweGZlLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywKLTB4ZmUsIDB4ZjcsIDB4YWUsIDB4ZmUsIDB4ZjgsIDB4ODgsIDB4MDMsIDB4MjQsIDB4ZTQsIDB4MDQsIDB4MDQsIDB4NDMsCi0weDAzLCAweDIzLCAweGRiLCAweDA0LCAweDljLCAweDQyLCAweDAyLCAweGQzLCAweDBmLCAweDRiLCAweDljLCAweDQyLAotMHgwNiwgMHhkOSwgMHgwZiwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwKLTB4ZmUsIDB4ZjcsIDB4ZGMsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDcsIDB4MjAsIDB4NDMsIDB4MDAsIDB4NjgsCi0weDAwLCAweDIxLCAweDAwLCAweGFiLCAweDU5LCAweDcwLCAweGZhLCAweDg4LCAweGMwLCAweDQ2LCAweGRhLCAweDgwLAotMHgwMiwgMHg5MCwgMHgwMywgMHg5MSwgMHg2OCwgMHg0NiwgMHgwNCwgMHgzMywgMHhmZSwgMHhmNywgMHhjYywgMHhmZCwKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGUwLCAweDAwLCAweDE4LCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLAotMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZSwgMHhmNywgMHg3YiwgMHhmZSwgMHhmOCwgMHg4OCwKLTB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MTgsIDB4NDMsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4MGEsIDB4NGIsCi0weDk4LCAweDQyLCAweDA4LCAweGQ5LCAweDA5LCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhhYiwgMHhmZCwgMHgwMSwgMHgyMCwgMHgwMywgMHhlMCwgMHhiOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDE4LCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHg4MCwgMHhiNSwgMHg4NiwgMHhiMCwgMHgwMiwgMHhhOSwgMHhmZSwgMHhmNywgMHg1NywgMHhmZSwgMHgwMSwgMHgyNywKLTB4MDIsIDB4YWIsIDB4NWYsIDB4NzAsIDB4MDAsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MGEsIDB4NDgsIDB4NDEsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA0LCAweDkxLCAweDgxLCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkxLCAweGMxLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MCwgMHg2OSwgMHg0NiwKLTB4MDIsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4ODEsIDB4ZmQsIDB4MzgsIDB4MWMsIDB4MDYsIDB4YjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGMxLCAweDY4LAotMHg4MCwgMHg2OCwgMHhmZSwgMHhmNywgMHg0NywgMHhmYiwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsCi0weDY4LCAweDQ2LCAweDUwLCAweDIxLCAweGZlLCAweGY3LCAweDM2LCAweGZlLCAweDAxLCAweGFiLCAweDVjLCAweDgwLAotMHgwMiwgMHg5NywgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHg2MSwgMHhmZCwgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsCi0weDY4LCAweDQ2LCAweDUxLCAweDIxLCAweGZlLCAweGY3LCAweDI0LCAweGZlLCAweDAxLCAweGFiLCAweDVmLCAweDgwLAotMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHg1MCwgMHhmZCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDkwLCAweGI1LCAweDg0LCAweGIwLCAweDAwLCAweDI3LCAweDEyLCAweDQ5LCAweDA5LCAweDY4LCAweDEyLCAweDRhLAotMHgxMiwgMHg2YiwgMHgxMCwgMHgyMywgMHgxYSwgMHg0MCwgMHgwMSwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwMCwgMHhkMCwKLTB4MDEsIDB4MjcsIDB4OGEsIDB4MGMsIDB4MDMsIDB4ZDMsIDB4M2EsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDIsIDB4MjcsCi0weDE3LCAweDQzLCAweGM5LCAweDBjLCAweDAzLCAweGQzLCAweDM5LCAweDA0LCAweDA5LCAweDBjLCAweDA0LCAweDI3LAotMHgwZiwgMHg0MywgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhlYywgMHhmZCwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwKLTB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MjYsIDB4ZmQsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZDcsIDB4ZmQsIDB4MDYsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDBmLCAweGZkLCAweDAxLCAweDIwLAotMHgwNCwgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZGQsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzAsIDB4NDcsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4Y2IsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDgwLCAweGI1LCAweDg1LCAweGIwLCAweDAxLCAweGE5LCAweGZlLCAweGY3LCAweGFiLCAweGZkLCAweDAwLCAweDIwLAotMHgwMSwgMHhhYiwgMHg1OCwgMHg3MCwgMHgwYywgMHg0OSwgMHhjOSwgMHg2OCwgMHgwMSwgMHgyNywgMHgwMSwgMHgyOSwKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTcsIDB4MDEsIDB4ZTAsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTAsCi0weDY4LCAweDQ2LCAweDAxLCAweGYwLCAweDMzLCAweGZkLCAweDAyLCAweGFiLCAweDAwLCAweDk4LCAweGMwLCAweDQ2LAotMHg1OCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgwMSwgMHhhOCwgMHhmZSwgMHhmNywgMHhkMywgMHhmYywgMHgzOCwgMHgxYywKLTB4MDUsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDA0LCAweDQ5LCAweDAwLCAweDIwLCAweDAwLCAweDIyLCAweDBhLCAweDcwLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMSwgMHg2OCwgMHgyOCwgMHhmYSwgMHhkMywgMHg3MCwgMHg0NywgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDAsIDB4MjIsIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDMsIDB4NDAsIDB4MWEsIDB4MDEsIDB4MzIsIDB4ODgsIDB4NDIsCi0weGZiLCAweGQyLCAweDEwLCAweDFjLCAweDcwLCAweDQ3LCAweDg4LCAweDQyLCAweDAyLCAweGQzLCAweDQwLCAweDFhLAotMHg4OCwgMHg0MiwgMHhmYywgMHhkMiwgMHg3MCwgMHg0NywgMHg5MCwgMHhiNCwgMHgwMSwgMHgxYywgMHhmZiwgMHgyNywKLTB4MDQsIDB4MjksIDB4MjcsIDB4ZGEsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NGEsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsCi0weGRiLCAweDAwLCAweGQ0LCAweDU4LCAweDYzLCAweDBjLCAweDFhLCAweGQyLCAweDRiLCAweDAwLCAweDU5LCAweDE4LAotMHhjOSwgMHgwMCwgMHg1NywgMHg1OCwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwgMHhkYiwgMHgwMCwgMHhkNywgMHg1MCwKLTB4ODksIDB4MTgsIDB4OWEsIDB4MTgsIDB4NGYsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NjAsIDB4OGIsIDB4NjgsCi0weGMwLCAweDQ2LCAweDkzLCAweDYwLCAweDBiLCAweDY5LCAweGMwLCAweDQ2LCAweDEzLCAweDYxLCAweDRiLCAweDY5LAotMHhjMCwgMHg0NiwgMHg1MywgMHg2MSwgMHhjOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMSwgMHg2MCwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDQsIDB4MjgsIDB4ZDksIDB4ZGIsCi0weDM4LCAweDFjLCAweGY2LCAweGU3LCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweGY3LCAweGI1LCAweGM0LCAweGIwLAotMHgwNCwgMHgxYywgMHgwMCwgMHgyMCwgMHg0NiwgMHg5YSwgMHgxMSwgMHgyMSwgMHgxMSwgMHg0MCwgMHg2ZSwgMHhkMCwKLTB4MDAsIDB4MjcsIDB4NzksIDB4MDAsIDB4YzksIDB4MTksIDB4YzksIDB4MDAsIDB4NTcsIDB4NGEsIDB4NTEsIDB4NTgsCi0weDQ5LCAweDBjLCAweDAzLCAweGQyLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA0LCAweGUwLAotMHg3OSwgMHgxYywgMHgwZiwgMHgwNiwgMHgzZiwgMHgwZSwgMHgwNCwgMHgyZiwgMHhlZiwgMHhkYiwgMHgwMCwgMHgyOCwKLTB4NWIsIDB4ZDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MjEsCi0weDAwLCAweDIwLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDg4LCAweGZhLCAweDA0LCAweGE5LCAweDAwLCAweDIwLAotMHg4MiwgMHgwMCwgMHg4YSwgMHg1OCwgMHgxMiwgMHgwNiwgMHgxMiwgMHgwZSwgMHhhMiwgMHg0MiwgMHgwMywgMHhkMSwKLTB4NzIsIDB4MWMsIDB4MTYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDEwLCAweDI4LCAweGYwLCAweGRiLCAweDAwLCAweDJlLCAweDNkLCAweGQwLCAweDA0LCAweDJjLAotMHgzZSwgMHhkMSwgMHg4MCwgMHgwMCwgMHgwOCwgMHg1OCwgMHg0MCwgMHgwMSwgMHg4MCwgMHgwZCwgMHgwMCwgMHgyMiwKLTB4MDAsIDB4OTIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmEsCi0weDAwLCAweDIxLCAweDAxLCAweDkxLCAweDAyLCAweGE4LCAweDA1LCAweDk5LCAweDQ5LCAweDBjLCAweDg5LCAweDA1LAotMHgyOSwgMHhkMCwgMHhjMSwgMHg2OCwgMHgwYSwgMHgwNiwgMHgxMiwgMHgwZSwgMHg0NSwgMHg5YiwgMHg5YSwgMHg0MiwKLTB4MTEsIDB4ZDEsIDB4YzAsIDB4NjgsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDUwLCAweGZhLAotMHgwMSwgMHg5OSwgMHgwMiwgMHg5ZCwgMHg0OCwgMHgxYywgMHgwMSwgMHgwNiwKLTB4MDksIDB4MGUsIDB4MDEsIDB4OTEsIDB4MGUsIDB4ZTAsIDB4NDgsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsCi0weDAwLCAweDkyLCAweDEwLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLAotMHgzZiwgMHhmYSwgMHgwMiwgMHhhOCwgMHgwNSwgMHg5OSwgMHg0OSwgMHgwYywgMHg4OSwgMHgwNSwgMHhkOCwgMHhkMSwKLTB4MDEsIDB4OTksIDB4MDAsIDB4MjksIDB4MGYsIDB4ZDEsIDB4ZmYsIDB4MjAsIDB4M2QsIDB4ZTAsIDB4NDAsIDB4ZTAsCi0weDgwLCAweDAwLCAweDA4LCAweDU4LCAweDQwLCAweDAxLCAweDg2LCAweDBkLCAweDAwLCAweDIyLCAweDAwLCAweDkyLAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHgyOCwgMHhmYSwKLTB4MDIsIDB4OWQsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDQsIDB4NDYsIDB4OWEsIDB4MTAsIDB4NDMsIDB4NzksIDB4MDAsCi0weGM5LCAweDE5LCAweGM5LCAweDAwLCAweDE3LCAweDRhLCAweGMwLCAweDQ2LCAweDUwLCAweDUwLCAweDMwLCAweDFjLAotMHg4ZSwgMHgxOCwgMHg3MCwgMHg2MCwgMHgxMCwgMHgyMCwgMHgwNCwgMHgyYywgMHgwMCwgMHhkMCwgMHgwYywgMHgyMCwKLTB4MDQsIDB4MWMsIDB4YjAsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MjAsIDB4MjEsIDB4NDYsIDB4OWEsIDB4MTEsIDB4NDAsCi0weDIwLCAweDI5LCAweDAwLCAweGQwLCAweDI4LCAweDFjLCAweDMwLCAweDYxLCAweDI4LCAweDE5LCAweGZmLCAweDIxLAotMHhmZiwgMHgzMCwgMHgwOCwgMHgzMCwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHgxOSwgMHhmZiwgMHg0MywgMHgwMSwKLTB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NzAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NTAsIDB4MjEsCi0weDQ2LCAweDlhLCAweDExLCAweDQwLCAweDUwLCAweDI5LCAweDAwLCAweGQxLCAweDI4LCAweDFjLCAweGYwLCAweDYwLAotMHgzOCwgMHgxYywgMHg0NywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmZiwgMHgyMCwKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4YjQsIDB4MDAsIDB4MjMsCi0weDAwLCAweDIyLCAweDAwLCAweDI5LCAweDA2LCAweGQ5LCAweDg3LCAweDVjLCAweDdiLCAweDQwLCAweDFiLCAweDA2LAotMHgxYiwgMHgwZSwgMHgwMSwgMHgzMiwgMHg4YSwgMHg0MiwgMHhmOCwgMHhkMywgMHhkOCwgMHg0MywgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDQsIDB4MjgsCi0weDA3LCAweGRhLCAweDQxLCAweDAwLCAweDA5LCAweDE4LCAweGM5LCAweDAwLCAweDQ1LCAweDkxLCAweDQxLCAweDRhLAotMHg1MSwgMHg1OCwgMHg0YiwgMHgwYywgMHgwMiwgMHhkMiwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHg3NiwgMHhlMCwKLTB4MDEsIDB4MjMsIDB4NWIsIDB4MDQsIDB4MTksIDB4NDAsIDB4NDMsIDB4MDAsIDB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsCi0weDNhLCAweDRhLCAweDE0LCAweDE4LCAweDAwLCAweDI5LCAweDYxLCAweGQwLCAweDAwLCAweDIxLCAweDAyLCAweDkxLAotMHgyMCwgMHg2OSwgMHhhMSwgMHg2OCwgMHg0NSwgMHgxOCwgMHgzMCwgMHhkMCwgMHhmZiwgMHgyMSwgMHg2OCwgMHgxZSwKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4Y2QsIDB4ZmUsIDB4NjEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4OTAsCi0weDAxLCAweDk4LCAweDgxLCAweDQyLCAweDAyLCAweGQxLCAweGE2LCAweDY4LCAweGFmLCAweDFiLCAweDA5LCAweGUwLAotMHgwMCwgMHgyNiwgMHhmZiwgMHgyMSwgMHgyOCwgMHgxYywgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhjNywgMHhmZSwKLTB4MDcsIDB4MWMsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4MjcsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsCi0weDAxLCAweDk4LCAweDMxLCAweDFjLCAweDAzLCAweGFhLCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweDllLCAweGY5LAotMHgwMywgMHhhOCwgMHgzOSwgMHgxYywgMHhmZiwgMHhmNywgMHhhYywgMHhmZiwgMHhjMCwgMHg0MywgMHgwMiwgMHg5OSwKLTB4NDgsIDB4NDAsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDIsIDB4OTEsIDB4ZWQsIDB4MWIsIDB4YTAsIDB4NjgsCi0weGE4LCAweDQyLCAweDAwLCAweGQxLCAweDAwLCAweDI1LCAweDAwLCAweDJkLCAweGNlLCAweGQ4LCAweDAyLCAweDk5LAotMHhjZiwgMHg0MywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHg2MCwgMHg2OCwKLTB4MDMsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4ZjksIDB4MjAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsCi0weDA1LCAweDk4LCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDM5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLAotMHgwNSwgMHg5MCwgMHhmZiwgMHgyMywgMHgxYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwNSwgMHg5MCwgMHgwYywgMHgyMSwKLTB4MDMsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmYsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MDUsIDB4OTksCi0weDk5LCAweDQzLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDAwLCAweDAyLCAweDA4LCAweDQzLCAweDA1LCAweDkwLAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHg2MCwgMHg2OCwgMHgwMywgMHhhYSwgMHgwMCwgMHhmMCwgMHhjYSwgMHhmOSwKLTB4MDAsIDB4MjAsIDB4NDUsIDB4OTksIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NTAsIDB4YzEsIDB4NDMsCi0weDYxLCAweDYwLCAweGExLCAweDYwLCAweGUxLCAweDYwLCAweDIxLCAweDYxLCAweDYxLCAweDYxLCAweDQ2LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4YjAsIDB4YjQsIDB4NGMsIDB4NDIsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZGIsCi0weDBjLCAweDFjLCAweDAwLCAweDI3LCAweGZmLCAweDQzLCAweDA0LCAweDI4LCAweDIxLCAweGRhLCAweDEyLCAweDRkLAotMHg0MywgMHgwMCwgMHgxOCwgMHgxOCwgMHhjMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHgwMSwgMHgyYSwgMHgwNSwgMHhkMCwKLTB4MDIsIDB4MmEsIDB4MDksIDB4ZDAsIDB4MDMsIDB4MmEsIDB4MTYsIDB4ZDEsIDB4MDEsIDB4NjksIDB4MGIsIDB4ZTAsCi0weDAwLCAweDI5LCAweDEyLCAweGRiLCAweDAyLCAweDY5LCAweDhhLCAweDQyLCAweDBmLCAweGQzLCAweDA1LCAweGUwLAotMHgwMCwgMHgyOSwgMHgwNywgMHhkYSwgMHhjMSwgMHg2OCwgMHhhMSwgMHg0MiwgMHgwOSwgMHhkMywgMHgwOSwgMHgxYiwKLTB4YzEsIDB4NjAsIDB4YzAsIDB4NjgsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YzEsIDB4NjgsIDB4MDksIDB4MTksCi0weDAyLCAweDY5LCAweDkxLCAweDQyLCAweGY2LCAweGQ5LCAweDM4LCAweDFjLCAweGY2LCAweGU3LCAweDAwLCAweDAwLAotMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgxNywgMHgxYywgMHgwZCwgMHgxYywKLTB4MDAsIDB4MjEsIDB4MDIsIDB4OTEsIDB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZDIsIDB4MDAsIDB4MmMsIDB4NDksCi0weDhiLCAweDU4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDAxLCAweDkzLCAweDAwLCAweDIzLCAweGRiLCAweDQzLAotMHgwNCwgMHgyOCwgMHgwMiwgMHhkYSwgMHgwMSwgMHg5OCwgMHg0MCwgMHgwOCwgMHgwMSwgMHhkMiwgMHgxOCwgMHgxYywKLTB4NDYsIDB4ZTAsIDB4NTQsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4YzIsIDB4MTksIDB4MjEsIDB4NjksIDB4OGEsIDB4NDIsCi0weDAwLCAweGQ5LCAweDBmLCAweDFhLCAweDAwLCAweDJmLCAweDNjLCAweGQ5LCAweGEwLCAweDY4LCAweGUxLCAweDY4LAotMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHgwZCwgMHhmZSwgMHg2MSwgMHg2OCwKLTB4NDYsIDB4MTgsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsCi0weGZmLCAweGY3LCAweDBkLCAweGZlLCAweGMyLCAweDE5LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweDhhLCAweDQyLAotMHgxNCwgMHhkOSwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwYiwgMHgxYSwgMHgwMywgMHg5MywKLTB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZTEsIDB4ZjgsIDB4ZTAsIDB4NjgsCi0weDAzLCAweDliLCAweGMwLCAweDE4LCAweGUwLCAweDYwLCAweDAzLCAweDliLCAweDVkLCAweDE5LCAweGZmLCAweDFhLAotMHgwMiwgMHg5OCwgMHgxOCwgMHgxOCwgMHgwMiwgMHg5MCwgMHgxMCwgMHhlMCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGNkLCAweGY4LCAweGUwLCAweDY4LCAweGMwLCAweDE5LCAweGVkLCAweDE5LCAweGUwLCAweDYwLCAweDAyLCAweDk4LAotMHhjMCwgMHgxOSwgMHgwMiwgMHg5MCwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZiwgMHhjMiwgMHhkOCwgMHgwMiwgMHg5OCwKLTB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsCi0weGYwLCAweGI1LCAweDgzLCAweGIwLCAweDE3LCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDIxLCAweDAxLCAweDkxLAotMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwgMHhkMiwgMHgwMCwgMHgwMiwgMHg5MiwgMHgzMCwgMHg0OSwgMHg4YSwgMHg1OCwKLTB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MDAsIDB4MjQsIDB4ZTQsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MDEsIDB4ZGEsCi0weDUwLCAweDA5LCAweDAxLCAweGQyLCAweDIwLCAweDFjLCAweDUxLCAweGUwLCAweDAyLCAweDlhLCAweDU0LCAweDE4LAotMHhlMCwgMHg2OCwgMHhjMiwgMHgxOSwgMHg2MCwgMHg2OSwgMHg4MiwgMHg0MiwgMHgwMSwgMHhkOSwgMHgyMiwgMHg2OSwKLTB4ODcsIDB4MWEsIDB4MDAsIDB4MmYsIDB4NDUsIDB4ZDksIDB4MjUsIDB4NGUsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsCi0weDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGE3LCAweGZkLCAweDYxLCAweDY4LAotMHg0MCwgMHgxOCwgMHgwMCwgMHg5MCwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwgMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmQsIDB4MDIsIDB4OWEsIDB4YjEsIDB4NTgsIDB4MDEsIDB4MjMsCi0weDViLCAweDA0LCAweDE5LCAweDQzLCAweGIxLCAweDUwLCAweGMxLCAweDE5LCAweGZmLCAweDIyLCAweDA5LCAweDMyLAotMHg5MSwgMHg0MiwgMHgxMywgMHhkOSwgMHgxMywgMHgxYSwgMHgwMSwgMHgxYywgMHgwMCwgMHg5OCwgMHgyYSwgMHgxYywKLTB4MWUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZGYsIDB4ZjgsIDB4ZTAsIDB4NjgsIDB4ODAsIDB4MTksIDB4NzUsIDB4MTksCi0weGUwLCAweDYwLCAweDIxLCAweDY5LCAweDg4LCAweDQyLCAweDAwLCAweGQ5LCAweDIwLCAweDYxLCAweGJmLCAweDFiLAotMHgwMSwgMHg5OCwgMHgzMCwgMHgxOCwgMHgwMSwgMHg5MCwgMHgxMiwgMHhlMCwgMHgwMSwgMHgxYywgMHgwMCwgMHg5ZSwKLTB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2IsIDB4ZjgsIDB4ZTAsIDB4NjgsCi0weGMwLCAweDE5LCAweGVkLCAweDE5LCAweGUwLCAweDYwLCAweDIxLCAweDY5LCAweDg4LCAweDQyLCAweDAwLCAweGQ5LAotMHgyMCwgMHg2MSwgMHgwMSwgMHg5OCwgMHhjMCwgMHgxOSwgMHgwMSwgMHg5MCwgMHgwMCwgMHgyNywgMHgwMCwgMHgyZiwKLTB4YjksIDB4ZDgsIDB4MDEsIDB4OTgsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDQwLCAweGFiLCAweDIwLCAweDQwLCAweGIwLCAweGI1LCAweGMzLCAweGIwLAotMHgwYywgMHgxYywgMHgwMCwgMHgyNywgMHhmYSwgMHg0MywgMHgwNCwgMHgyOCwgMHgwNiwgMHhkYSwgMHg0MSwgMHgwMCwKLTB4MDksIDB4MTgsIDB4YzksIDB4MDAsIDB4MTQsIDB4NDgsIDB4NDUsIDB4NTgsIDB4NmIsIDB4MGMsIDB4MDQsIDB4ZDIsCi0weDEwLCAweDFjLCAweDQzLCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDYyLCAweDA5LAotMHgxYiwgMHhkMywgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgMHgwOCwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwYywgMHgyMywKLTB4MDAsIDB4MjEsIDB4MDEsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4ZjgsIDB4MTEsIDB4MmMsIDB4MGQsIDB4ZDAsCi0weDEyLCAweDJjLCAweDBkLCAweGQwLCAweDEzLCAweDJjLCAweDA1LCAweGQwLCAweDE0LCAweDJjLCAweDBhLCAweGQxLAotMHgwMywgMHg5OCwgMHgwMCwgMHgwNCwgMHgwNywgMHgwZSwgMHgwNiwgMHhlMCwgMHgwMywgMHg5OCwgMHgwNywgMHgwNiwKLTB4M2YsIDB4MGUsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4OWYsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4OWYsIDB4MzgsIDB4MWMsCi0weGRiLCAweGU3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweDAzLCAweDQ5LCAweDAwLCAweDIwLAotMHgwMCwgMHgyMiwgMHgwYSwgMHg1NCwgMHgwMSwgMHgzMCwgMHg2MCwgMHgyOCwgMHhmYiwgMHhkMywgMHg3MCwgMHg0NywKLTB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4MDIsIDB4ZjAsIDB4NmYsIDB4ZmEsIDB4NTcsIDB4MjAsCi0weDAyLCAweGYwLCAweGNjLCAweGY5LCAweDAyLCAweGYwLCAweDQwLCAweGY5LCAweDAwLCAweDBhLCAweGZiLCAweGQzLAotMHgwMiwgMHhmMCwgMHg0ZSwgMHhmYSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwKLTB4MDcsIDB4OWQsIDB4MTQsIDB4MWMsIDB4MWYsIDB4MWMsIDB4MzAsIDB4NGEsIDB4ZDIsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDE2LCAweDY4LCAweDllLCAweDQzLCAweDE2LCAweDYwLCAweDMzLCAweDFjLCAweGZmLCAweDIyLCAweDAxLCAweDMyLAotMHgyYSwgMHg0MCwgMHg0MCwgMHgwMiwgMHgwOCwgMHg0MywgMHgwNSwgMHgwYSwgMHgwNiwgMHgxYywgMHgwMCwgMHgwYywKLTB4MDEsIDB4OTAsIDB4MDAsIDB4MmEsIDB4MjAsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NGIsIDB4ZmEsIDB4NTMsIDB4MjAsCi0weDAyLCAweGYwLCAweGE4LCAweGY5LCAweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDAyLCAweGYwLAotMHhhMywgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHhhMCwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4OWQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4MjMsIDB4ZmEsIDB4ZmYsIDB4ZjcsIDB4YzcsIDB4ZmYsIDB4MDIsIDB4ZjAsCi0weDM3LCAweGZhLCAweDU0LCAweDIwLCAweDAyLCAweGYwLCAweDk0LCAweGY5LCAweDAwLCAweDk4LCAweDAyLCAweGYwLAotMHg5MSwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4ZSwgMHhmOSwgMHgzMCwgMHgxYywgMHgxNCwgMHhlMCwKLTB4MDIsIDB4ZjAsIDB4MmEsIDB4ZmEsIDB4NTIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ODcsIDB4ZjksIDB4MDEsIDB4OTgsCi0weDAyLCAweGYwLCAweDg0LCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDgxLCAweGY5LCAweDMwLCAweDFjLAotMHgwMiwgMHhmMCwgMHg3ZSwgMHhmOSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3YiwgMHhmOSwgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4NzgsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDAsIDB4MjAsCi0weDAyLCAweGYwLCAweDcyLCAweGY5LCAweDAwLCAweDJmLCAweDA1LCAweGQ5LCAweDAyLCAweGYwLCAweGU0LCAweGY4LAotMHgyMCwgMHg3MCwgMHgwMSwgMHgzNCwgMHgwMSwgMHgzZiwgMHhmOSwgMHhkMSwgMHgwMiwgMHhmMCwgMHhmMCwgMHhmOSwKLTB4MDQsIDB4NGEsIDB4ZDAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsCi0weDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgMHgxNCwgMHgxYywgMHgxZiwgMHgxYywgMHg0MiwgMHgwMiwgMHgwYSwgMHg0MywKLTB4MTUsIDB4MWMsIDB4MDEsIDB4MjgsIDB4NTQsIDB4ZDAsIDB4MmMsIDB4NDksIDB4YzgsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLCAweGM4LCAweDZmLCAweDQwLCAweDIzLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMiwgMHhmMCwgMHhlNiwgMHhmOSwgMHg1MywgMHgyMCwgMHgwMiwgMHhmMCwKLTB4NDMsIDB4ZjksIDB4MjgsIDB4MGMsIDB4MDYsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4M2YsIDB4ZjksIDB4MjgsIDB4MGEsCi0weDAxLCAweDkwLCAweDAwLCAweDkwLCAweDAyLCAweGYwLCAweDNhLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLAotMHgzNywgMHhmOSwgMHgwMiwgMHhmMCwgMHhiZCwgMHhmOSwgMHhmZiwgMHhmNywgMHg2MSwgMHhmZiwgMHgwMiwgMHhmMCwKLTB4ZDEsIDB4ZjksIDB4ODQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MmUsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDJiLCAweGY5LCAweDAwLCAweDk4LCAweDAyLCAweGYwLCAweDI4LCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLAotMHgyNSwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwNSwgMHhkOSwgMHgyMCwgMHg3OCwgMHgwMSwgMHgzNCwgMHgwMiwgMHhmMCwKLTB4MWYsIDB4ZjksIDB4MDEsIDB4M2YsIDB4ZjksIDB4ZDEsIDB4MDIsIDB4ZjAsIDB4YTMsIDB4ZjksIDB4MDIsIDB4ZjAsCi0weGI5LCAweGY5LCAweDgzLCAweDIwLCAweDAyLCAweGYwLCAweDE2LCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLAotMHgxMywgMHhmOSwgMHgwMSwgMHg5OCwgMHgwMiwgMHhmMCwgMHgxMCwgMHhmOSwKLTB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4OTMsIDB4ZjksIDB4ZmYsIDB4ZjcsCi0weDM3LCAweGZmLCAweDA3LCAweDQ5LCAweGM4LCAweDZmLCAweDQwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLAotMHgwMiwgMHg2MCwgMHhjOCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDAxLCAweGYwLCAweDhmLCAweGY4LCAweDA2LCAweDRmLAotMHhjMCwgMHg0NiwgMHhmOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHhmMiwgMHhmOCwgMHg3OCwgMHg4MCwgMHgwMSwgMHhmMCwKLTB4YjEsIDB4ZjgsIDB4MzgsIDB4NzEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweGYwLCAweDA1LCAweGY5LCAweDAyLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MGIsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MTEsIDB4ZDEsIDB4YzEsIDB4NmYsIDB4MDIsIDB4MjMsCi0weDBhLCAweDY4LCAweDFhLCAweDQzLCAweDBhLCAweDYwLCAweGMxLCAweDZmLCAweDgwLCAweDIzLCAweDBhLCAweDY4LAotMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMSwgMHgxOCwgMHgwOCwgMHg2OCwgMHg4MiwgMHgyMywgMHgwMiwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDRhLCAweDQ5LCAweGNhLCAweDFkLCAweDlkLCAweDMyLAotMHgwMCwgMHgyMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHhkNywgMHg1MCwgMHgwMSwgMHgzMCwgMHgxNywgMHgyOCwKLTB4ZmEsIDB4ZDMsIDB4NDYsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4YTcsIDB4NTAsIDB4MDEsIDB4MzAsCi0weDIwLCAweDI4LCAweGZhLCAweGQzLCAweDQzLCAweDRhLCAweDAwLCAweDIwLCAweDgzLCAweDAwLCAweGQ3LCAweDUwLAotMHgwMSwgMHgzMCwgMHgyMCwgMHgyOCwgMHhmYSwgMHhkMywgMHhhNywgMHg2MSwgMHg5NywgMHg2MSwgMHg0ZiwgMHg2NSwKLTB4OGYsIDB4NjUsIDB4M2YsIDB4NGQsIDB4YzAsIDB4NDYsIDB4MmYsIDB4NjAsIDB4NmYsIDB4NjAsIDB4YWYsIDB4NjAsCi0weGFmLCAweDYxLCAweGVmLCAweDYwLCAweDJmLCAweDYxLCAweDZmLCAweDYxLCAweDAwLCAweDIwLCAweGMxLCAweDAwLAotMHgwOSwgMHgxOCwgMHg0OSwgMHgwMSwgMHgzNSwgMHg0YiwgMHhjOSwgMHgxOCwgMHg4NiwgMHgwMCwgMHhjYiwgMHgxZCwKLTB4ZjksIDB4MzMsIDB4MzQsIDB4NGMsIDB4MzQsIDB4MTksIDB4ZTMsIDB4NjMsIDB4MTEsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGNiLCAweDE4LCAweDYzLCAweDYzLCAweDBkLCAweDIzLCAweDliLCAweDAxLCAweGNiLCAweDE4LCAweGI0LCAweDE4LAotMHhlMywgMHg2MywgMHgyMywgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg2MSwgMHg2MywgMHgwMSwgMHgzMCwKLTB4MDIsIDB4MjgsIDB4ZTQsIDB4ZGIsIDB4MjksIDB4NDgsIDB4YzEsIDB4MWQsIDB4ZjksIDB4MzEsIDB4MjksIDB4NGMsCi0weGMwLCAweDQ2LCAweGExLCAweDYyLCAweDYxLCAweDZiLCAweDBkLCAweDIzLCAweDliLCAweDAxLCAweGUxLCAweDYyLAotMHhjMSwgMHgxOCwgMHg5MSwgMHg2MiwgMHg1MSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhkMSwgMHg2MiwgMHgwOCwgMHgyMSwKLTB4ZTEsIDB4NjQsIDB4MjUsIDB4NDksIDB4YzAsIDB4NDYsIDB4MjEsIDB4NjUsIDB4MjQsIDB4NDksIDB4MGIsIDB4NjksCi0weGMwLCAweDQ2LCAweDYzLCAweDY1LCAweGMzLCAweDFkLCAweDRkLCAweDMzLCAweGUzLCAweDY1LCAweDI1LCAweDY2LAotMHg4YiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg2MywgMHg2NiwgMHhjYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMywgMHg2NiwKLTB4MWUsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZTMsIDB4NjYsIDB4MjcsIDB4NjcsIDB4MGIsIDB4MjMsIDB4ZGIsIDB4MDEsCi0weGMzLCAweDE4LCAweGEzLCAweDY3LCAweDY3LCAweDY3LCAweDAxLCAweDI2LCAweGUzLCAweDFkLCAweDY5LCAweDMzLAotMHg2NiwgMHg2MSwgMHhlNywgMHg2MSwgMHgxZiwgMHg3MywgMHgwMiwgMHgyMywgMHhkMywgMHg2NCwgMHgxNywgMHg0YiwKLTB4YzAsIDB4NDYsIDB4MTMsIDB4NjUsIDB4Y2IsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTMsIDB4NjUsIDB4YzMsIDB4MWQsCi0weDUxLCAweDMzLCAweGQzLCAweDY1LCAweDJiLCAweDFkLCAweDEzLCAweDY2LCAweDRiLCAweDY5LCAweGMwLCAweDQ2LAotMHg1MywgMHg2NiwgMHg4OSwgMHg2OSwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2NiwgMHgwZiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4ZDEsIDB4NjYsIDB4MTYsIDB4NjcsIDB4MGYsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4OTAsIDB4NjcsCi0weDU2LCAweDY3LCAweGQ3LCAweDYxLCAweGQwLCAweDFkLCAweDY5LCAweDMwLCAweDU2LCAweDYxLCAweDA3LCAweDczLAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MzAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDdjLCAweDI5LCAweDAwLCAweDgwLCAweDAwLCAweDU1LCAweGZmLCAweGZmLCAweDM4LCAweDAxLCAweDE4LCAweDAwLAotMHgxMCwgMHg1NSwgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgxZSwgMHg0YSwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZDcsIDB4MTgsIDB4ZjksIDB4NzMsIDB4MTksIDB4MjMsCi0weGRiLCAweDAxLCAweGQwLCAweDE4LCAweDAxLCAweDI0LCAweGNkLCAweDIzLCAweDFiLCAweDAxLCAweGQzLCAweDE4LAotMHhjMSwgMHg2MSwgMHgxYywgMHg3MCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHg5OSwgMHg2MCwKLTB4YjksIDB4NzMsIDB4NTksIDB4NjEsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MTksIDB4NjAsCi0weDEzLCAweDRiLCAweDUxLCAweDI3LCAweGJmLCAweDAzLCAweDAzLCAweDYzLCAweDNiLCAweDYwLCAweDg0LCAweDY5LAotMHhlNCwgMHgxOCwgMHg0NCwgMHg2MywgMHgwNCwgMHgzYywgMHg3YywgMHg2MCwgMHgwMSwgMHgyNCwgMHhlNCwgMHgwMiwKLTB4ODQsIDB4NjMsIDB4MGUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4YmMsIDB4NjAsIDB4MDQsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDQ0LCAweDYyLCAweDg0LCAweDY5LCAweGU0LCAweDE4LCAweDBiLCAweDRiLCAweGUzLCAweDE4LCAweGZiLCAweDYwLAotMHgwMywgMHg2YiwgMHhjMCwgMHg0NiwgMHg4MywgMHg2MiwgMHg0MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMywgMHg2MiwKLTB4YzEsIDB4NjMsIDB4NTEsIDB4NjQsIDB4OTEsIDB4NjQsIDB4ZDEsIDB4NjUsIDB4ZDEsIDB4NjYsIDB4OTAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHhmYywgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHhmNywgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMiwKLTB4MWIsIDB4NDksIDB4YzksIDB4MjMsIDB4MWIsIDB4MDEsIDB4YzgsIDB4MTgsIDB4MDIsIDB4NzEsIDB4MDEsIDB4MjAsCi0weGJiLCAweDIzLCAweDFiLCAweDAxLCAweGNiLCAweDE4LCAweDU4LCAweDczLCAweDE3LCAweDQ4LCAweDAzLCAweDFjLAotMHgwMCwgMHgyNywgMHhkYywgMHgxZCwgMHhjMSwgMHgzNCwgMHgxYywgMHg2NSwgMHgyMywgMHgxYywgMHgwMSwgMHgzNywKLTB4M2YsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MWEsIDB4NjUsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4Y2YsIDB4MTgsCi0weDMzLCAweDIzLCAweDliLCAweDAxLCAweGNiLCAweDE4LCAweDNhLCAweDYxLCAweDk4LCAweDYxLCAweDQwLCAweDIwLAotMHhmOCwgMHg2MCwgMHhkYSwgMHg2MSwgMHgxYSwgMHg2MiwgMHhjYSwgMHg2NCwgMHgwYSwgMHg2NiwgMHgwYywgMHg0OCwKLTB4YzAsIDB4NDYsIDB4YzIsIDB4NjAsIDB4MGIsIDB4NDgsIDB4MDAsIDB4NmIsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsCi0weGY4LCAweDYzLCAweDBhLCAweDQ4LCAweDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDE5LCAweDgwLCAweDQxLCAweDY4LAotMHhjMCwgMHg0NiwgMHg1OSwgMHg4MCwgMHg4MCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg5OCwgMHg4MCwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YmMsIDB4MjAsIDB4NDAsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLCAweDQwLCAweDAwLCAweDE0LCAweDQwLAotMHgwMCwgMHgyMCwgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MywgMHhjYiwgMHgxZCwgMHhmZiwgMHgzMywKLTB4M2EsIDB4MzMsIDB4ODgsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MTgsIDB4NzAsIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDEwLCAweDY1LCAweDUwLCAweDY2LCAweDkwLCAweDY2LCAweDA4LCAweDcwLCAweDU4LCAweDcwLCAweGJiLCAweDIzLAotMHgxYiwgMHgwMSwgMHhkMSwgMHgxOCwgMHgwOCwgMHg3MywgMHg3MCwgMHg0NywgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4MmYsIDB4NDksIDB4MmYsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDExLCAweDYxLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweGM4LCAweDE4LCAweDUwLCAweDYxLCAweDJkLCAweDQ4LAotMHhjMCwgMHg0NiwgMHgxMCwgMHg2MiwgMHhkYiwgMHgwMCwgMHhjMywgMHgxOCwgMHg1MywgMHg2MiwgMHgwMCwgMHgyMywKLTB4MTMsIDB4NjMsIDB4NTMsIDB4NjMsIDB4MjksIDB4NGEsIDB4MmEsIDB4NGYsIDB4ZDQsIDB4MWQsIDB4ZmYsIDB4MzQsCi0weGZhLCAweDM0LCAweDE0LCAweGM3LCAweDA4LCAweDNmLCAweDNiLCAweDYxLCAweDFjLCAweDFmLCAweDdjLCAweDYxLAotMHgyNiwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MCwgMHhiOCwgMHg2MSwgMHg3OSwgMHg2MSwgMHhmOCwgMHg2MiwKLTB4M2IsIDB4NjMsIDB4N2IsIDB4NjQsIDB4YmEsIDB4NjQsIDB4ZmEsIDB4NjUsIDB4MjIsIDB4NGYsIDB4ZmUsIDB4MWQsCi0weGY5LCAweDM2LCAweDIyLCAweDRkLCAweGVjLCAweDFkLCAweDc5LCAweDM0LCAweDI2LCAweDYyLCAweDUxLCAweDI2LAotMHhiNiwgMHgwMywgMHgzNywgMHg2MSwgMHgyNCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3NCwgMHg2MSwgMHgyZiwgMHg2NywKLTB4MWQsIDB4NGQsIDB4MDksIDB4MjcsIDB4N2YsIDB4MDQsIDB4ZWMsIDB4MWQsIDB4NzUsIDB4MzQsIDB4N2MsIDB4NjAsCi0weDNkLCAweDYwLCAweDFiLCAweDRjLCAweGMwLCAweDQ2LCAweDNjLCAweDYxLCAweGU2LCAweDFkLCAweDc1LCAweDM2LAotMHg3ZSwgMHg2MSwgMHgxOSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHg3YywgMHg2MCwgMHgzZCwgMHg2MCwgMHgwZiwgMHgxYywKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4MjQsIDB4MDEsIDB4MzQsIDB4MWQsIDB4MWMsIDB4OGIsIDB4MDAsIDB4ZmQsIDB4NTAsCi0weDAxLCAweDMxLCAweGExLCAweDQyLCAweGZhLCAweGQzLCAweDAxLCAweDFjLCAweDAwLCAweDIwLCAweDAxLCAweDI3LAotMHhmZiwgMHgwMiwgMHg4MywgMHgwMCwgMHhjZCwgMHg1MCwgMHgwMSwgMHgzMCwgMHhiOCwgMHg0MiwgMHhmYSwgMHhkMywKLTB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NTUsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODAsIDB4MjgsIDB4ZmEsIDB4ZDMsCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDI0LCAweGEzLCAweDIwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgyNCwgMHg4MywgMHgyMCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwKLTB4ODAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE4LCAweDIwLCAweDQwLCAweGE0LCAweGE4LCAweDIwLCAweDQwLAotMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhiOCwgMHhiNSwgMHgyYywgMHg0OCwgMHhmZCwgMHhmNywgMHhiYSwgMHhmZCwKLTB4MDEsIDB4MjAsIDB4MmIsIDB4NDksIDB4MGEsIDB4NjgsIDB4NTIsIDB4MGMsIDB4MDYsIDB4ZDIsIDB4MGEsIDB4NjgsCi0weDEyLCAweDBjLCAweDAyLCAweGQxLCAweDBhLCAweDY4LCAweDkyLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIwLAotMHgwNCwgMHgwNiwgMHgyNCwgMHgwZSwgMHgyNSwgMHg0YSwgMHhkNywgMHgxZCwgMHgwZCwgMHgzNywgMHgwMCwgMHgyMywKLTB4MDAsIDB4MjAsIDB4OWQsIDB4MDAsIDB4NzgsIDB4NTEsIDB4MDEsIDB4MzMsIDB4MDQsIDB4MmIsIDB4ZmEsIDB4ZDMsCi0weDAxLCAweDI3LCAweDNmLCAweDA1LCAweDUwLCAweDYxLCAweGY4LCAweDYwLCAweGQwLCAweDYxLCAweGY4LCAweDYxLAotMHgwMCwgMHgyMywgMHhkYiwgMHg0MywgMHg5MywgMHg2MSwgMHgzYiwgMHg2MSwgMHgxMywgMHg2MiwgMHgzYiwgMHg2MiwKLTB4MDAsIDB4MjcsIDB4MWIsIDB4NGIsIDB4OGQsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4OGQsIDB4NjksCi0weGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDAwLCAweDJjLCAweDBiLCAweGQwLCAweGRkLCAweDZiLCAweGMwLCAweDQ2LAotMHgwMCwgMHg5NSwgMHg5ZCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHg1ZCwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTUsIDB4MWQsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MzcsIDB4NDAsIDB4MmYsCi0weGU4LCAweGQzLCAweDAwLCAweDI3LCAweDZjLCAweDQ2LCAweDAxLCAweDIzLCAweDViLCAweDA3LCAweDFjLCAweDQzLAotMHgwMSwgMHhlMCwgMHgyMCwgMHg2MCwgMHgwMSwgMHgzNywgMHgwZCwgMHg2OCwgMHgyYiwgMHgwOSwgMHgwMiwgMHhkMiwKLTB4ODAsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MmYsIDB4MDMsIDB4ZDMsIDB4MDgsIDB4NDksCi0weDRiLCAweDZlLCAweDAxLCAweDMzLCAweDRiLCAweDY2LCAweGQwLCAweDYyLCAweGI4LCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDkwLCAweGI0LCAweDAwLCAweDIxLCAweDBlLCAweDRmLCAweDBmLCAweDRhLCAweDAwLCAweDIwLCAweDRjLCAweDAxLAotMHg2NCwgMHgxYSwgMHhhNCwgMHgwMCwgMHhhMywgMHgxOCwgMHg1OCwgMHg2MCwgMHg5OCwgMHg2MCwgMHgxOCwgMHg2NCwKLTB4NTgsIDB4NjQsIDB4MTAsIDB4NTMsIDB4NTgsIDB4ODAsIDB4Y2MsIDB4MDAsIDB4ZTQsIDB4MTksIDB4OTgsIDB4NjcsCi0weGRjLCAweDYyLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGVlLCAweGQzLCAweDA2LCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MCwgMHg0OCwgMHg2MCwgMHg4OCwgMHg2MCwgMHhjOCwgMHg2MCwgMHgwOCwgMHg2MSwgMHg5MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YWMsIDB4NjYsIDB4MjEsIDB4NDAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDY0LCAweDIxLCAweDA1LCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDYzLAotMHgwMCwgMHgyMSwgMHhjOSwgMHg0MywgMHg0MSwgMHg2MywgMHg4MSwgMHg2MywgMHgwMCwgMHgyMSwgMHhjMSwgMHg2MywKLTB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjAsCi0weDQwLCAweDAyLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDNjLCAweDIwLCAweDQ4LCAweDYwLAotMHg4OCwgMHg2MCwgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHgwNywgMHg0YSwKLTB4ODcsIDB4MDAsIDB4Y2IsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NTEsIDB4MDEsIDB4MzAsIDB4MTAsIDB4MjgsCi0weGY4LCAweGQzLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU0LCAweDJkLCAweDAwLCAweDgwLAotMHhmNCwgMHgyZCwgMHgwMCwgMHg4MCwgMHg1ZCwgMHg0YywgMHhmZiwgMHhmZiwgMHgxMiwgMHg0OSwgMHgxMywgMHg0OCwKLTB4NjcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2EsIDB4MTgsIDB4MDYsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MTEsIDB4NGIsCi0weGNhLCAweDE4LCAweGMxLCAweDYwLCAweDgyLCAweDYwLCAweDAxLCAweDYxLCAweDBmLCAweDQ5LCAweDEwLCAweDQ4LAotMHhhNywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYSwgMHgxOCwgMHgwNiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgwZSwgMHg0YiwKLTB4Y2EsIDB4MTgsIDB4YzEsIDB4NjAsIDB4ODIsIDB4NjAsIDB4MDEsIDB4NjEsIDB4MGMsIDB4NDgsIDB4MGQsIDB4NDksCi0weDY3LCAweDIzLCAweDliLCAweDAxLCAweGMyLCAweDE4LCAweDA1LCAweGMxLCAweDA4LCAweDM5LCAweDA1LCAweDRiLAotMHhjMiwgMHgxOCwgMHhjOCwgMHg2MCwgMHg4YSwgMHg2MCwgMHgwOCwgMHg2MSwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YWMsIDB4MWUsIDB4MjEsIDB4NDAsIDB4NDgsIDB4MmUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MWYsIDB4MDAsIDB4MDAsCi0weGFjLCAweGVlLCAweDIwLCAweDQwLCAweDM0LCAweDJlLCAweDAwLCAweDgwLCAweGZjLCAweDJmLCAweDAwLCAweDAwLAotMHhhYywgMHgzZSwgMHgyMSwgMHg0MCwgMHg1YywgMHgyZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4NDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4MGEsIDB4MDEsIDB4MTIsIDB4MTksCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGQyLCAweDE4LCAweGQwLCAweDYyLCAweDEwLCAweDYzLCAweDUwLCAweDYzLAotMHg5MCwgMHg2MywgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhmMywgMHhkMywgMHgzYSwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjMsIDB4NDgsIDB4NjMsIDB4ODgsIDB4NjMsIDB4MjAsIDB4NjAsIDB4MDEsIDB4MjEsIDB4ZTMsIDB4MWQsCi0weDU5LCAweDMzLCAweDYwLCAweDYwLCAweDE5LCAweDcxLCAweDE4LCAweDcyLCAweDk4LCAweDcxLCAweDk4LCAweDcyLAotMHg1OSwgMHg3MSwgMHg1OCwgMHg3MiwgMHhkOCwgMHg3MSwgMHhkOCwgMHg3MiwgMHhlMiwgMHgxZCwgMHg0OSwgMHgzMiwKLTB4MTEsIDB4NzMsIDB4MTksIDB4NzAsIDB4OTAsIDB4NzMsIDB4OTgsIDB4NzAsIDB4NTEsIDB4NzMsIDB4NTksIDB4NzAsCi0weGQwLCAweDczLCAweGQ4LCAweDcwLCAweDExLCAweDcxLCAweDExLCAweDcyLCAweDkwLCAweDcxLCAweDkwLCAweDcyLAotMHg1MCwgMHg3MSwgMHg1MCwgMHg3MiwgMHhkMCwgMHg3MSwgMHhkMCwgMHg3MiwgMHgxOCwgMHg3MywgMHgwMiwgMHgyMiwKLTB4ZTcsIDB4MWQsIDB4NjksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YmEsIDB4NzAsIDB4NTgsIDB4NzMsCi0weDc4LCAweDcwLCAweGQ4LCAweDczLCAweGY4LCAweDcwLCAweDM5LCAweDcxLCAweDNhLCAweDcyLCAweGI5LCAweDcxLAotMHhiOSwgMHg3MiwgMHg3OCwgMHg3MSwgMHg3YSwgMHg3MiwgMHhmOSwgMHg3MSwgMHhmOSwgMHg3MiwgMHgzOSwgMHg3MywKLTB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OTksIDB4NzAsIDB4NzgsIDB4NzMsCi0weDVhLCAweDcwLCAweGY5LCAweDczLCAweGQ5LCAweDcwLCAweDFhLCAweDcxLCAweDFhLCAweDcyLCAweDk5LCAweDcxLAotMHg5YSwgMHg3MiwgMHg1OCwgMHg3MSwgMHg1YSwgMHg3MiwgMHhkOSwgMHg3MSwgMHhkYSwgMHg3MiwgMHgxOSwgMHg3MywKLTB4ZTcsIDB4MWQsIDB4ODksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YjksIDB4NzAsIDB4NTgsIDB4NzMsCi0weDdhLCAweDcwLCAweGQ5LCAweDczLCAweGY5LCAweDcwLCAweDM5LCAweDcxLCAweDNhLCAweDcyLCAweGI5LCAweDcxLAotMHhiOSwgMHg3MiwgMHg3OCwgMHg3MSwgMHg3YSwgMHg3MiwgMHhmOSwgMHg3MSwgMHhmOSwgMHg3MiwgMHgzYSwgMHg3MywKLTB4ZTMsIDB4MWQsIDB4OTksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OWEsIDB4NzAsIDB4NzgsIDB4NzMsCi0weDVhLCAweDcwLCAweGY5LCAweDczLCAweGRhLCAweDcwLCAweDE5LCAweDcxLCAweDFhLCAweDcyLCAweDk5LCAweDcxLAotMHg5OSwgMHg3MiwgMHg1OCwgMHg3MSwgMHg1YSwgMHg3MiwgMHhkOSwgMHg3MSwgMHhkOSwgMHg3MiwgMHgyMCwgMHg2MSwKLTB4ZTAsIDB4NjAsIDB4NjAsIDB4NjEsIDB4YTAsIDB4NjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGEwLCAweDFjLCAweDAwLCAweDgwLCAweGU4LCAweDE5LCAweDAwLCAweDgwLCAweDgxLCAweDIwLCAweDAwLCAweDAyLAotMHgwMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHg3MCwgMHg0NywgMHhjMCwgMHgwMCwgMHgxNCwgMHgwMCwKLTB4MDksIDB4NDksIDB4MGEsIDB4NGIsIDB4YzgsIDB4MTgsIDB4MDQsIDB4M2IsIDB4YzksIDB4MTgsIDB4MDgsIDB4NjAsCi0weDAwLCAweDIxLCAweGMyLCAweDFkLCAweDI5LCAweDMyLCAweGMyLCAweDYxLCAweDEwLCAweDFjLCAweDAxLCAweDMxLAotMHgwOCwgMHgyOSwgMHhmOCwgMHhkMywgMHhjMSwgMHgxZiwgMHgyOSwgMHgzOSwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODQsIDB4MDksIDB4MDAsIDB4MDAsCi0weDA2LCAweDQ4LCAweDA3LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDQ4LCAweDgwLCAweDAwLCAweDIwLAotMHg4OCwgMHg4MCwgMHhjOCwgMHg4MCwgMHg4OCwgMHg2MCwgMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwKLTB4ODgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAwLCAweDIxLCAweDA2LCAweDQ4LCAweGMyLCAweDFkLCAweDE5LCAweDMyLAotMHhjMSwgMHg2MCwgMHgwMSwgMHg2MSwgMHhjMSwgMHg2MSwgMHgwMSwgMHg2MiwgMHgxMSwgMHg3MSwgMHhmZiwgMHgzMCwKLTB4MDEsIDB4MzAsIDB4NDEsIDB4NjIsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weDA5LCAweDQ4LCAweDBhLCAweDRiLCAweGMwLCAweDQ2LCAweDE4LCAweDYwLCAweDAwLCAweDIxLCAweGMyLCAweDFkLAotMHg0ZCwgMHgzMiwgMHhjMiwgMHg2MCwgMHgxMCwgMHgxYywgMHgwMSwgMHgzMSwgMHgxNCwgMHgyOSwgMHhmOCwgMHhkMywKLTB4YzEsIDB4MWYsIDB4NGQsIDB4MzksIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjAsIDB4NTgsIDB4NjAsIDB4OTgsIDB4NjAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQ4LCAweDA3LCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwYiwgMHg0OSwgMHgwYiwgMHg0OCwgMHhmZCwgMHhmNywgMHhlYSwgMHhmYiwgMHgwYiwgMHg0OCwKLTB4MDAsIDB4NmEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYyLCAweDA5LCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDA0LCAweGQxLCAweGMwLCAweDZmLAotMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NzUsIDB4OTgsIDB4MjEsIDB4NDAsCi0weGMwLCAweDAwLCAweDE4LCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHhiNSwgMHgwZiwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgwNCwgMHhkMSwgMHhjMCwgMHg2ZiwKLTB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MGIsIDB4NGIsIDB4MGMsIDB4NDgsCi0weDBjLCAweDRhLCAweDAwLCAweDIxLCAweGZkLCAweGY3LCAweGJmLCAweGZiLCAweDBiLCAweDQ4LCAweDQxLCAweDhkLAotMHgwMSwgMHgzMSwgMHg0MSwgMHg4NSwgMHgwMCwgMHgyMSwgMHhjMSwgMHg4NSwgMHgwOSwgMHg0OCwgMHgwMCwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDU5LCAweGJkLCAweDIxLCAweDQwLAotMHg3NSwgMHg5OCwgMHgyMSwgMHg0MCwgMHhiOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MWIsIDB4NGMsCi0weDEwLCAweDI2LCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDA4LCAweGQxLCAweDYwLCAweDg4LCAweDAwLCAweDI4LAotMHgwNSwgMHhkMSwgMHgyMCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMSwgMHgxOSwgMHgyMCwgMHhhMCwgMHg2NywKLTB4MDAsIDB4ZTAsIDB4YTYsIDB4NjcsIDB4MDAsIDB4MjAsIDB4MDcsIDB4MjMsIDB4NWIsIDB4MDIsIDB4ZTUsIDB4MTgsCi0weGMxLCAweDQzLCAweGU4LCAweDYxLCAweDY5LCAweDYyLCAweDU5LCAweDA4LCAweGExLCAweDI3LCAweDdmLCAweDAzLAotMHg3OSwgMHg2MCwgMHgwZiwgMHgyMSwgMHg3OSwgMHg2MCwgMHhlMSwgMHgxZCwgMHhiOSwgMHgzMSwgMHgwOCwgMHg3MSwKLTB4MDEsIDB4MjAsIDB4YjgsIDB4NjAsIDB4NDAsIDB4MDIsIDB4YjgsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4NGMsIDB4ZmEsCi0weDAwLCAweGYwLCAweGYwLCAweGZhLCAweDA0LCAweDIwLCAweGI4LCAweDYwLCAweDA3LCAweDIwLCAweDc4LCAweDYxLAotMHg3ZSwgMHg2MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhlMCwgMHgxOCwgMHhjMCwgMHg4YiwgMHgwNCwgMHgyMywKLTB4MTgsIDB4NDAsIDB4ZTgsIDB4NjIsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI0LCAweDAyLCAweDFjLCAweDAwLCAweDIwLCAweGZmLCAweDIzLAotMHgwMSwgMHgzMywgMHg5YSwgMHg0MiwgMHgwOCwgMHhkMCwgMHgwMSwgMHgyOSwgMHgwMCwgMHhkMSwgMHgwMSwgMHgyMCwKLTB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDFiLCAweDRhLCAweGQ3LCAweDY4LCAweDFhLCAweDRiLCAweDE5LCAweDc5LCAweDFjLCAweDFjLCAweDM3LCAweDIzLAotMHg5YiwgMHgwMSwgMHhlMywgMHgxOCwgMHgwMSwgMHgyZiwgMHgwZCwgMHhkMSwgMHg1NywgMHg4OCwgMHgwMCwgMHgyZiwKLTB4MGEsIDB4ZDEsIDB4MDAsIDB4MjksIDB4MGEsIDB4ZDEsIDB4NTksIDB4OGIsIDB4MGEsIDB4MDksIDB4MDAsIDB4ZDMsCi0weDAyLCAweDIwLCAweDQ5LCAweDA5LCAweGU4LCAweGQzLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweGU1LCAweGU3LAotMHgwMCwgMHgyOSwgMHgwMywgMHhkMCwgMHg5OCwgMHg4YSwgMHg4MCwgMHgwNywgMHg4MCwgMHgwZiwgMHhkZiwgMHhlNywKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4OGEsIDB4ODgsIDB4ZmYsIDB4MjcsIDB4MDEsIDB4MzcsCi0weDE3LCAweDQwLCAweDBhLCAweDQ5LCAweGM5LCAweDg4LCAweDAzLCAweGQwLCAweDRiLCAweDBhLCAweDAxLCAweGQzLAotMHgwMywgMHgyMCwgMHhkMSwgMHhlNywgMHgxMywgMHgwYSwgMHgwMywgMHhkMywgMHgwYiwgMHgwYSwgMHgwMSwgMHhkMywKLTB4MDIsIDB4MjAsIDB4Y2IsIDB4ZTcsIDB4ZDIsIDB4MDksIDB4YzksIDB4ZDMsIDB4YzksIDB4MDksIDB4YzcsIDB4ZDMsCi0weDAxLCAweDIwLCAweGM1LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDA4LCAweDFjLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHhjMSwgMHhiMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNywgMHg1MiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4NTIsIDB4NDgsIDB4NDIsIDB4NjksIDB4NDAsIDB4MGQsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsCi0weDQ4LCAweDYwLCAweDUwLCAweDQ4LCAweGMwLCAweDZhLCAweDUwLCAweDRiLCAweDE4LCAweDQzLCAweDAwLCAweDIxLAotMHgwMywgMHgwMywgMHgxYiwgMHgwYiwgMHg0ZSwgMHg0YywgMHgyNywgMHg2ZiwgMHgzZCwgMHgwMywgMHgyZCwgMHgwYiwKLTB4ZTcsIDB4MWQsIDB4NzksIDB4MzcsIDB4YWIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsCi0weDFiLCAweDZhLCAweGMwLCAweDQ2LCAweDQwLCAweDkzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjYywgMHgwMCwgMHg2ZSwgMHg0NiwgMHgzMywgMHg1MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDYsIDB4MWQsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmMsIDB4NDQsIDB4NjMsIDB4NjAsIDB4MDgsIDB4MzAsCi0weDAxLCAweDMxLCAweDQwLCAweDliLCAweDgzLCAweDQyLCAweDAwLCAweGQ4LCAweDNmLCAweDQ4LCAweDAzLCAweDAzLAotMHgxYiwgMHgwYiwgMHhhYiwgMHg0MiwgMHhlNywgMHhkMSwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyMywgMHgxYiwgMHgwMywKLTB4MTMsIDB4NDAsIDB4M2MsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4NjMsIDB4NmEsIDB4MDEsIDB4MzMsIDB4NjMsIDB4NjIsCi0weDA5LCAweGUwLCAweDEzLCAweDBiLCAweDAzLCAweGQzLCAweDIzLCAweDZhLAotMHgwMSwgMHgzMywgMHgyMywgMHg2MiwgMHgwMywgMHhlMCwgMHgzNywgMHg0YiwgMHg1YywgMHg2ZCwgMHgwMSwgMHgzNCwKLTB4NWMsIDB4NjUsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDAsIDB4MDMsIDB4MWMsIDB4ZGMsIDB4MDAsIDB4MjMsIDB4MWMsCi0weDZiLCAweDQ0LCAweDVjLCAweDY4LCAweDAxLCAweDMwLCAweDIzLCAweDBkLCAweDAxLCAweGQyLCAweDg4LCAweDQyLAotMHhmNSwgMHhkMSwgMHgzMCwgMHg0YywgMHgyNSwgMHg2OCwgMHg2YiwgMHgwYywgMHgwNSwgMHhkMiwgMHgyMywgMHg2OCwKLTB4MWIsIDB4MGMsIDB4MDgsIDB4ZDEsIDB4MjQsIDB4NjgsIDB4YTMsIDB4MGEsIDB4MDUsIDB4ZDMsIDB4MjAsIDB4MjQsCi0weDJiLCAweDRiLCAweGMwLCAweDQ2LCAweDVjLCAweDYyLCAweDAwLCAweDI0LCAweDVjLCAweDYyLCAweDI1LCAweDRiLAotMHgyMywgMHg0YywgMHg1MSwgMHgyNiwgMHhiNiwgMHgwMywgMHgyMywgMHg2NywgMHgzMywgMHg2MSwgMHgzZCwgMHg2YSwKLTB4YzAsIDB4NDYsIDB4NzUsIDB4NjEsIDB4MDIsIDB4MjUsIDB4YTEsIDB4MjYsIDB4NzYsIDB4MDMsIDB4NzUsIDB4NjAsCi0weDAxLCAweDI1LCAweGI1LCAweDYwLCAweGU2LCAweDFkLCAweGI5LCAweDM2LCAweDM1LCAweDcxLCAweDg4LCAweDQyLAotMHgyMSwgMHhkMCwgMHgyNSwgMHgxYywgMHhjMywgMHgwMCwgMHg2YywgMHg0NiwgMHhlNCwgMHg1OCwgMHgyZSwgMHg2ZiwKLTB4NmIsIDB4NDQsIDB4MzQsIDB4NjAsIDB4NWIsIDB4NjgsIDB4MmMsIDB4NmYsIDB4YzAsIDB4NDYsIDB4NjMsIDB4NjAsCi0weDJiLCAweDZmLCAweDA4LCAweDMzLCAweDJiLCAweDY3LCAweDNjLCAweDZhLCAweGEzLCAweDQyLCAweDAyLCAweGQzLAotMHgxMiwgMHg0YiwgMHhjMCwgMHg0NiwgMHgyYiwgMHg2NywgMHgwMywgMHgxYywgMHhkYiwgMHgwMCwgMHg2YiwgMHg0NCwKLTB4NWMsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MjMsIDB4MGQsIDB4MDQsIDB4ZDMsIDB4NTEsIDB4MjQsIDB4YTQsIDB4MDMsCi0weDJiLCAweDZmLCAweGMwLCAweDQ2LCAweGEzLCAweDYxLCAweDg4LCAweDQyLCAweGRlLCAweGQxLCAweDEwLCAweDBiLAotMHgwMywgMHhkMywgMHgwZSwgMHg0OSwgMHgwMSwgMHgyMCwgMHhmZCwgMHhmNywgMHg3NCwgMHhmYSwgMHg0MSwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDAwLCAweDAxLCAweDE0LCAweDQwLCAweDAwLCAweDQwLCAweDE0LCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhNywgMHgyMCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsCi0weGM5LCAweDRmLCAweGZmLCAweGZmLCAweGYwLCAweGI0LCAweDAwLCAweDIxLCAweDAwLCAweDIzLCAweDA3LCAweDIyLAotMHgwNiwgMHgyNCwgMHg0NywgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgwMSwgMHgzMywKLTB4MjAsIDB4MmIsIDB4ZjksIDB4ZDMsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NjEsIDB4MDUsIDB4MjMsIDB4M2IsIDB4NjEsCi0weDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNkLCAweDYxLCAweDNiLCAweDYxLAotMHgzZiwgMHg0ZCwgMHhhYiwgMHg2ZiwgMHhkZSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywKLTB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsCi0weDllLCAweDA4LCAweDAyLCAweDIzLCAweDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLAotMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwgMHg1ZSwgMHgwOCwgMHgwMiwgMHgyMywKLTB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsCi0weDNiLCAweDYxLCAweDAyLCAweDIzLCAweGFlLCAweDZmLCAweDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLAotMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgMHhhYiwgMHg2ZiwgMHg1ZCwgMHgwMCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweGM1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHg4NSwgMHgwOCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDQ1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHgwMiwgMHgyNSwKLTB4MDUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsCi0weDNiLCAweDYxLCAweDQwLCAweDAwLCAweDAyLCAweDIzLCAweDE4LCAweDQwLCAweDA0LCAweDIzLCAweDAzLCAweDQzLAotMHgzYiwgMHg2MSwgMHgwNSwgMHgyMywgMHgxOCwgMHg0MywgMHgzOCwgMHg2MSwgMHgwMCwgMHgyNSwgMHgzZCwgMHg2MSwKLTB4MDEsIDB4MjMsIDB4M2IsIDB4NjEsIDB4M2QsIDB4NjEsIDB4M2IsIDB4NjEsIDB4MDAsIDB4MjAsIDB4M2QsIDB4NjEsCi0weDBkLCAweDRiLCAweDFiLCAweDY5LCAweDQ5LCAweDAwLCAweDFlLCAweDFjLCAweDAyLCAweDIzLCAweDMzLCAweDQwLAotMHgxOSwgMHg0MywgMHgwMSwgMHgyMywgMHgzYiwgMHg2MSwgMHgwMSwgMHgzMCwKLTB4MTAsIDB4MjgsIDB4ZjIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MzgsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MzgsIDB4NjEsCi0weDNjLCAweDYxLCAweDNhLCAweDYxLCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDM4LCAweDYxLCAweDQ4LCAweDA4LAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ZjAsIDB4YjQsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MjMsIDB4MDYsIDB4MjcsCi0weDQ0LCAweDRhLCAweGMwLCAweDQ2LCAweDE3LCAweDYxLCAweDEzLCAweDYxLCAweDAxLCAweDM0LCAweDIwLCAweDJjLAotMHhmOSwgMHhkMywgMHgwNCwgMHgyNiwgMHgxNiwgMHg2MSwgMHgwNSwgMHgyNCwgMHgxNCwgMHg2MSwgMHgxNywgMHg2MSwKLTB4MDcsIDB4MjMsIDB4MTMsIDB4NjEsIDB4MTYsIDB4NjEsIDB4MTQsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MTMsIDB4NjEsCi0weDNjLCAweDRiLCAweDliLCAweDZmLCAweGRkLCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLAotMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgzNywgMHg0YiwgMHg5YiwgMHg2ZiwKLTB4OWQsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsCi0weDI1LCAweDQzLCAweDE1LCAweDYxLCAweDMyLCAweDRiLCAweDliLCAweDZmLCAweDVkLCAweDA4LCAweDAyLCAweDIzLAotMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwKLTB4MmQsIDB4NGIsIDB4OWQsIDB4NmYsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsCi0weDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDI5LCAweDRiLCAweDliLCAweDZmLCAweDVkLCAweDAwLAotMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywKLTB4MTUsIDB4NjEsIDB4YzUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsCi0weDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDg1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLAotMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg0NSwgMHgwOCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsCi0weDE1LCAweDYxLCAweDAyLCAweDI1LCAweDA1LCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLAotMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwMywgMHgxYywKLTB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjAsIDB4NDMsIDB4MTAsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MDcsIDB4MjMsCi0weDEzLCAweDYxLCAweDE2LCAweDYxLCAweDE0LCAweDYxLCAweDRjLCAweDAwLCAweDAwLCAweDIwLCAweDBmLCAweDIxLAotMHgyNSwgMHgxYywgMHhjZCwgMHg0MCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgMHgyYiwgMHg0MywKLTB4MTMsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzksCi0weDEwLCAweDI4LCAweGYxLCAweGQzLCAweDE3LCAweDYxLCAweDA3LCAweDIzLCAweDEzLCAweDYxLCAweDE3LCAweDYxLAotMHgxMywgMHg2MSwgMHgwMywgMHgyMCwgMHgxMCwgMHg2MSwgMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4NGYsIDB4NGQsCi0weDA4LCAweDIxLCAweDAyLCAweDIwLCAweDJhLCAweDFjLCAweGZkLCAweGY3LCAweDI3LCAweGY5LCAweDRkLCAweDRjLAotMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhlNywgMHgxOCwgMHgzOCwgMHg4MCwgMHgxYSwgMHgyMSwgMHgwMiwgMHgyMCwKLTB4MmEsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4MWQsIDB4ZjksIDB4NzgsIDB4ODAsIDB4MjAsIDB4NzksIDB4MDAsIDB4MjgsCi0weDBiLCAweGQwLCAweDAwLCAweDIwLCAweDM4LCAweDgwLCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDEwLCAweGQxLAotMHg0NCwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHgxOCwgMHg0MywgMHg5OSwgMHgwMiwKLTB4MDgsIDB4NjAsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDYsIDB4ZDEsIDB4NjAsIDB4ODgsIDB4MDAsIDB4MjgsCi0weDAzLCAweGQxLCAweGY5LCAweDIxLCAweDEyLCAweDIwLCAweGZmLCAweGY3LCAweDQzLCAweGZmLCAweDAxLCAweDIxLAotMHhjOSwgMHgwMywgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwgMHgwMCwgMHgyNSwgMHg3ZCwgMHgyNiwKLTB4ZjYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MzUsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OWMsIDB4ZmUsCi0weDAwLCAweDBjLCAweDAxLCAweGQzLCAweGI1LCAweDQyLCAweGY3LCAweGQzLCAweDAwLCAweDI1LCAweDA1LCAweGUwLAotMHgwMywgMHgyMSwgMHgwOSwgMHgwMywgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgyYiwgMHhmZiwgMHgwMSwgMHgzNSwKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OGQsIDB4ZmUsIDB4NDAsIDB4MGIsIDB4MDEsIDB4ZDIsIDB4YjUsIDB4NDIsCi0weGYyLCAweGQzLCAweDA0LCAweDIwLCAweGZmLCAweGY3LCAweDg2LCAweGZlLCAweGZmLCAweDIzLCAweGUxLCAweDMzLAotMHg5OCwgMHg0MywgMHgwMSwgMHgyMSwgMHgwMSwgMHg0MywgMHgzOCwgMHg4OCwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywKLTB4OTgsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4MmYsIDB4MjMsIDB4NWIsIDB4MDEsCi0weDE5LCAweDQzLCAweDE2LCAweGUwLCAweDAxLCAweDI4LCAweDA5LCAweGQxLCAweDc4LCAweDg4LCAweDAxLCAweDI4LAotMHgwMywgMHhkMSwgMHgyMywgMHgyMywgMHg1YiwgMHgwMSwgMHgxOSwgMHg0MywgMHgwZCwgMHhlMCwgMHgyMCwgMHgyMywKLTB4MTksIDB4NDMsIDB4MGEsIDB4ZTAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4NzgsIDB4ODgsIDB4MDEsIDB4MjgsCi0weDAzLCAweGQxLCAweDBiLCAweDIzLCAweGRiLCAweDAxLCAweDE5LCAweDQzLCAweDAxLCAweGUwLCAweDgwLCAweDIzLAotMHgxOSwgMHg0MywgMHgwNCwgMHgyMCwgMHhmZiwgMHhmNywgMHhmOCwgMHhmZSwgMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZjMsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsCi0weDAwLCAweDIxLCAweDFiLCAweDIwLCAweGZmLCAweGY3LCAweGVjLCAweGZlLCAweDFhLCAweDIwLCAweGZmLCAweGY3LAotMHg0ZiwgMHhmZSwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMywgMHgwMSwgMHg0MywgMHgxYSwgMHgyMCwgMHhmZiwgMHhmNywKLTB4ZTMsIDB4ZmUsIDB4MDAsIDB4MjcsIDB4MDMsIDB4ZTAsIDB4MDgsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmYsCi0weDA4LCAweGQ5LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDQwLCAweGZlLCAweDc5LCAweDAwLCAweDA5LCAweDE5LAotMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4OCwgMHg4MywgMHgwMSwgMHgzNywgMHgyMCwgMHgyZiwKLTB4ZWYsIDB4ZDMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZWQsIDB4YWYsIDB4MjEsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIwLCAweDEzLCAweDQ4LAotMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDAxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHg4MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4MDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDgxLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMwLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLAotMHgwMSwgMHhiMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwOCwgMHgxNCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwKLTB4NjgsIDB4NGQsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZWYsIDB4MTgsIDB4ZjgsIDB4OGIsIDB4MDQsIDB4MjIsCi0weDAyLCAweDQwLCAweDAyLCAweDkyLCAweDcxLCAweDIzLCAweDViLCAweDAxLCAweGU4LCAweDE4LCAweDAxLCAweDg4LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwgMHg0MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyNCwKLTB4MDMsIDB4ZTAsIDB4MDgsIDB4MmMsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmMsIDB4MDgsIDB4ZDksIDB4MjAsIDB4MWMsCi0weGZmLCAweGY3LCAweGU4LCAweGZkLCAweDYxLCAweDAwLCAweDQ5LCAweDE5LCAweDFiLCAweDIzLCAweGRiLCAweDAxLAotMHhjOSwgMHgxOCwgMHg4OCwgMHg4MywgMHgwMSwgMHgzNCwgMHgyMCwgMHgyYywgMHhlZiwgMHhkMywgMHg1OCwgMHg0YywKLTB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MTUsIDB4ZDAsIDB4NTcsIDB4NGUsIDB4MjAsIDB4MjUsIDB4MDEsIDB4M2QsCi0weDUzLCAweDQ5LCAweGUwLCAweDY5LCAweDMwLCAweDQwLCAweDBiLCAweGQwLCAweDY4LCAweDAwLCAweDQwLCAweDE4LAotMHgzNywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg4YiwgMHgyOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4NjUsIDB4ZmUsIDB4ZTAsIDB4NjksIDB4YjAsIDB4NDMsIDB4ZTAsIDB4NjEsIDB4NzYsIDB4MDgsIDB4MDAsIDB4MmQsCi0weGViLCAweGQxLCAweDAxLCAweDIwLCAweGZmLCAweGY3LCAweGMyLCAweGZkLCAweDQ4LCAweDQ5LCAweGMwLCAweDQ2LAotMHhmOCwgMHg4MywgMHhmOCwgMHg4YiwgMHhjMiwgMHgwOCwgMHgyNSwgMHhkMywgMHhjYSwgMHg2OCwgMHgwMSwgMHgyYSwKLTB4MTMsIDB4ZDEsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MWYsIDB4ZDEsIDB4NDksIDB4ODgsIDB4MDAsIDB4MjksCi0weDFjLCAweGQxLCAweDAxLCAweDk5LCAweDQzLCAweDRhLCAweDAwLCAweDI5LCAweDA1LCAweGQwLCAweDAxLCAweDI5LAotMHgxNiwgMHhkMSwgMHg1MSwgMHg4YiwgMHhjOSwgMHgwOCwgMHgxMywgMHhkMiwgMHgwZiwgMHhlMCwgMHg1MSwgMHg4YiwKLTB4MDksIDB4MDksIDB4MGYsIDB4ZDIsIDB4MGIsIDB4ZTAsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MGIsIDB4ZDEsCi0weDZkLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDhhLCAweDg4LCAweGM5LCAweDg4LCAweDExLCAweDQwLAotMHg0OSwgMHgwOSwgMHgwOSwgMHgwNywgMHgwMiwgMHhkMSwgMHgwNCwgMHgyMywgMHg5OCwgMHg0MywgMHhmOCwgMHg4MywKLTB4ZjgsIDB4OGIsIDB4MDQsIDB4MjEsIDB4MDEsIDB4NDAsIDB4MDIsIDB4OWEsIDB4MWYsIDB4ZDAsIDB4YjksIDB4OGIsCi0weDRhLCAweDBiLCAweDI3LCAweGQzLCAweDgwLCAweDA5LCAweDI1LCAweGQzLCAweGZmLCAweDIzLCAweDAxLCAweDk4LAotMHgwMSwgMHgzMywgMHg5OCwgMHg0MiwgMHgyMCwgMHhkMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyOCwKLTB4MDAsIDB4ZDEsIDB4MDUsIDB4MDIsIDB4MDEsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4MjMsCi0weDViLCAweDAzLCAweDFkLCAweDQzLCAweGE5LCAweDQyLCAweDEzLCAweGQwLAotMHgwMCwgMHgyMCwgMHgyOSwgMHgxYywgMHhmZiwgMHhmNywgMHgxMCwgMHhmZSwgMHhiZCwgMHg4MywgMHgwMCwgMHgyMCwKLTB4YzAsIDB4NDMsIDB4NjAsIDB4NjIsIDB4MGEsIDB4ZTAsIDB4YjgsIDB4OGIsIDB4NDAsIDB4MGIsIDB4MDcsIDB4ZDIsCi0weDA5LCAweDIxLCAweDQ5LCAweDAyLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDAzLCAweGZlLCAweDA5LCAweDIwLAotMHg0MCwgMHgwMiwgMHhiOCwgMHg4MywgMHhmOCwgMHg4YiwgMHhjMCwgMHgwOCwgMHgyZCwgMHhkMywgMHgxZCwgMHg0OCwKLTB4YzcsIDB4NmEsIDB4MDEsIDB4OTgsIDB4MDAsIDB4OTksIDB4ZmYsIDB4ZjcsIDB4NTEsIDB4ZmMsIDB4YzIsIDB4MDcsCi0weGQyLCAweDBmLCAweDFhLCAweDQ5LCAweDAzLCAweGQwLCAweDA0LCAweDIzLCAweGNkLCAweDZkLCAweDJiLCAweDQzLAotMHgwMywgMHhlMCwgMHgwNCwgMHgyMywgMHhjZCwgMHg2ZCwgMHg5ZCwgMHg0MywgMHgyYiwgMHgxYywgMHhjYiwgMHg2NSwKLTB4ODMsIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MDIsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4MmIsIDB4NDMsIDB4MDMsIDB4ZTAsCi0weDAyLCAweDIzLCAweGNkLCAweDZkLCAweDlkLCAweDQzLCAweDJiLCAweDFjLCAweGNiLCAweDY1LCAweDYxLCAweDZhLAotMHg4MSwgMHg0MiwgMHgwYywgMHhkMCwgMHg2MCwgMHg2MiwgMHgwZSwgMHg0OCwgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwKLTB4ZmYsIDB4MjEsIDB4MjEsIDB4MzEsIDB4MzksIDB4NDMsIDB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MjEsIDB4MzMsCi0weDlmLCAweDQzLCAweDM5LCAweDFjLCAweGMxLCAweDYyLCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDE0LCAweDAwLCAweDkwLCAweGI0LCAweDAxLCAweDIyLAotMHgyMCwgMHgyOCwgMHgwZiwgMHhkMiwgMHg0MywgMHgwMCwgMHgwZiwgMHgxYywgMHgwNywgMHg0OSwgMHg1YywgMHgxOCwKLTB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4OWYsIDB4ODMsIDB4ODIsIDB4NDAsIDB4MDcsIDB4MjMsCi0weDViLCAweDAyLCAweGM5LCAweDE4LCAweDEwLCAweDFjLCAweGNhLCAweDY5LCAweDEwLCAweDQzLCAweGM4LCAweDYxLAotMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwYiwgMHg0OCwgMHg0MCwgMHg2OSwKLTB4MGIsIDB4NDksIDB4YzksIDB4OGIsIDB4MDQsIDB4MjIsIDB4MGEsIDB4NDAsIDB4MGEsIDB4NDksIDB4MDYsIDB4ZDAsCi0weDAxLCAweDIzLCAweGRiLCAweDAyLCAweDk4LCAweDQzLCAweDAxLCAweDIzLCAweGNhLCAweDZkLCAweDFhLCAweDQzLAotMHgwNSwgMHhlMCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHgxOCwgMHg0MywgMHhjYSwgMHg2ZCwgMHg1MiwgMHgwOCwKLTB4NTIsIDB4MDAsIDB4Y2EsIDB4NjUsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGU4LCAweDFiLCAweDAwLCAweDgwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLAotMHhmZiwgMHhmNywgMHhkZSwgMHhmZiwgMHgwMSwgMHgxYywgMHgwNSwgMHgyMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4YWIsIDB4MTgsIDB4ODAsIDB4MDQsIDB4M2IsIDB4NTgsIDB4NzAsIDB4MWIsIDB4MjIsIDB4MDAsIDB4YWIsCi0weDVhLCAweDgwLCAweGQ5LCAweDgwLCAweDA1LCAweDQ5LCAweGM5LCAweDZkLCAweGMwLCAweDQ2LCAweDAyLCAweDkxLAotMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZCwgMHhmNywgMHg3OSwgMHhmOCwgMHgwNCwgMHhiMCwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MGYsIDB4NDgsIDB4MDEsIDB4NjgsCi0weDQ5LCAweDBjLCAweDA1LCAweGQyLCAweDAxLCAweDY4LCAweDA5LCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LAotMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgwYiwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMCwgMHgwYywgMHgwMSwgMHhlMCwKLTB4MGEsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDksIDB4NGIsIDB4OTgsIDB4NDIsCi0weDA1LCAweGQwLCAweDAyLCAweDMzLCAweDk4LCAweDQyLCAweDAyLCAweGQwLCAweDA3LCAweDRiLCAweDk4LCAweDQyLAotMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDA0LCAweDk5LCAweDAwLCAweDAwLCAweDA3LCAweDk5LCAweDAwLCAweDAwLCAweDkwLCAweGI0LCAweDAxLCAweDI0LAotMHgyMSwgMHgxYywgMHgxOCwgMHg0OCwgMHgwMiwgMHg2OCwgMHg1MiwgMHgwYywgMHgwNiwgMHhkMiwgMHgwMiwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjEsCi0weDA5LCAweDA2LCAweDA5LCAweDBlLCAweDEyLCAweDRmLCAweDEzLCAweDRhLCAweDAyLCAweGQwLCAweDM4LCAweDY4LAotMHgwMCwgMHgwYywgMHgwMCwgMHhlMCwgMHg5MCwgMHg2YywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMCwgMHg0YiwKLTB4OTgsIDB4NDIsIDB4MDgsIDB4ZDAsIDB4MDIsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MDUsIDB4ZDAsIDB4MGUsIDB4NGIsCi0weDk4LCAweDQyLCAweDAyLCAweGQwLCAweDAyLCAweDNiLCAweDk4LCAweDQyLCAweDBjLCAweGQxLCAweDAwLCAweDI5LAotMHgwMiwgMHhkMCwgMHhmOCwgMHg2YSwgMHgwMCwgMHgwYywgMHgwMCwgMHhlMCwKLTB4ZDAsIDB4NmMsIDB4NDAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MGUsCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHg5OSwgMHgwMCwgMHgwMCwKLTB4MDcsIDB4OTksIDB4MDAsIDB4MDAsIDB4MGMsIDB4NDgsIDB4MDEsIDB4NjgsIDB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsCi0weDAxLCAweDY4LCAweDA5LCAweDBjLCAweDA1LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAyLCAweGQzLAotMHgwOCwgMHg0OCwgMHg4MCwgMHg2OCwgMHgwMSwgMHhlMCwgMHgwOCwgMHg0OCwgMHg0MCwgMHg2YywgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDAsIDB4MjEsIDB4MDMsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4NDAsIDB4MDgsIDB4MDEsIDB4ZDMsCi0weDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDA4LCAweDFjLCAweGZjLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwMSwgMHgyNywKLTB4MWEsIDB4NGMsIDB4MjUsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NzIsIDB4ZmYsIDB4MDMsIDB4MWMsIDB4MTksIDB4NGEsCi0weDAyLCAweDIxLCAweDAxLCAweDI2LCAweDE4LCAweDQ4LCAweDAxLCAweDJiLCAweDFiLCAweGQxLCAweGNiLCAweDA0LAotMHgxZSwgMHg2MCwgMHg1NSwgMHgyMywgMHgwMywgMHg2MCwgMHgwMCwgMHgyMywgMHg0MywgMHg2MCwgMHgwNiwgMHg2OCwKLTB4NTUsIDB4MmUsIDB4MWIsIDB4ZDEsIDB4YWEsIDB4MjYsIDB4MDYsIDB4NjAsIDB4NDMsIDB4NjAsIDB4MDMsIDB4NjgsCi0weGFhLCAweDJiLCAweDE1LCAweGQxLCAweDA5LCAweDIzLCAweDAzLCAweDYwLCAweDA1LCAweDIzLCAweDBmLCAweDRmLAotMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwgMHgwMywgMHgyMywgMHgwZSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwKLTB4MTEsIDB4NjAsIDB4MDcsIDB4NjgsIDB4MDgsIDB4ZTAsIDB4MDgsIDB4MjMsIDB4MjMsIDB4NjAsIDB4MDQsIDB4MjMsCi0weDBhLCAweDRmLCAweGMwLCAweDQ2LCAweDNiLCAweDYwLCAweDExLCAweDYwLCAweDA2LCAweDYwLCAweDI3LCAweDY4LAotMHhjMCwgMHg0NiwgMHgyNSwgMHg2MCwgMHgzOCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NDAsCi0weDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAwLCAweDAwLCAweDI2LCAweDQwLCAweDAwLCAweDAwLCAweDI4LCAweDQwLAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhmZiwgMHhmNywgMHgzMCwgMHhmZiwgMHgwMSwgMHgyOCwgMHgwNSwgMHhkMSwKLTB4MTksIDB4NDgsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDksIDB4NDksIDB4NmIsIDB4MDgsIDB4NDAsIDB4MjIsIDB4ZTAsCi0weDE4LCAweDQ4LCAweDAxLCAweDY4LCAweDQ5LCAweDBjLCAweDA1LCAweGQyLCAweDAxLCAweDY4LCAweDA5LCAweDBjLAotMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgxNCwgMHg0OCwgMHgwMCwgMHg2OCwKLTB4MDAsIDB4MGMsIDB4MDEsIDB4ZTAsIDB4MTMsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsCi0weDEyLCAweDRiLCAweGMwLCAweDE4LCAweDA4LCAweDI4LCAweDBiLCAweGQyLCAweDAxLCAweGEzLCAweDFiLCAweDVjLAotMHg1YiwgMHgwMCwgMHg5ZiwgMHg0NCwgMHgwNSwgMHgwMywgMHgwNywgMHgwMywgMHgwNywgMHgwNywgMHgwNSwgMHgwMywKLTB4MDMsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjEsCi0weDM4LCAweDYwLCAweDgwLCAweDA3LCAweDAwLCAweGQxLCAweDAwLCAweDIxLCAweDA4LCAweDA2LCAweDAwLCAweDBlLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgzNCwgMHg2ZSwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGZlLCAweDY2LCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDgyLCAweGIwLAotMHgwNywgMHgxYywgMHgwMSwgMHgyMCwgMHgwMSwgMHg5MCwgMHhmZiwgMHhmNywgMHhlNywgMHhmZSwgMHgwMSwgMHgyOCwKLTB4MTMsIDB4ZDEsIDB4MzgsIDB4MmYsIDB4MDEsIDB4ZDAsIDB4YTgsIDB4MmYsIDB4MDcsIDB4ZDEsIDB4MDAsIDB4MjYsCi0weGY2LCAweDQzLCAweDM0LCAweDFjLCAweGE4LCAweDJmLCAweDAyLCAweGQxLCAweDMwLCAweDFjLCAweDAwLCAweDk2LAotMHgzNSwgMHgxYywgMHgxMSwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwNiwgMHg2MiwgMHg0NCwgMHg2MiwgMHg4NSwgMHg2MiwKLTB4MDAsIDB4OTksIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjIsIDB4MDAsIDB4MjEsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsCi0weDAxLCAweDYwLCAweDM4LCAweDJmLCAweDAxLCAweGQwLCAweGE4LCAweDJmLCAweDA1LCAweGQxLCAweDAxLCAweDIxLAotMHgwMSwgMHg2MCwgMHhhOCwgMHgyZiwgMHgwMSwgMHhkMSwgMHgwMywgMHgyMSwgMHgwMSwgMHg2MCwgMHgwMSwgMHg5OCwKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MzQsIDB4NmUsIDB4MjEsIDB4NDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgxMiwgMHg0YywgMHgyMSwgMHg2OCwgMHgxMiwgMHg0OCwgMHg4MSwgMHg0MiwgMHgwYiwgMHhkMCwgMHgwMCwgMHgyMywKLTB4MjEsIDB4MWMsIDB4ZTIsIDB4MWQsIDB4YzEsIDB4MzIsIDB4MDAsIDB4ZTAsCi0weDA4LCAweGMxLCAweDkxLCAweDQyLCAweGZjLCAweGQzLCAweDIwLCAweDYwLCAweGM4LCAweDIwLCAweGEwLCAweDgwLAotMHg2NywgMHg3MiwgMHgzOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxOCwgMHhmOCwgMHgyNywgMHg3MiwgMHgwYSwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4ZTAsIDB4NjAsIDB4MDksIDB4MmYsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MjcsIDB4ZTAsIDB4MTksCi0weDAxLCAweDdkLCAweDAxLCAweDMxLCAweDAxLCAweDc1LCAweGUwLCAweDg4LCAweDAxLCAweDMwLCAweGUwLCAweDgwLAotMHgwMSwgMHgyMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4ZWUsIDB4ZmYsIDB4YzAsIDB4ZDAsIDB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4YjQsIDB4MDgsIDB4NGEsCi0weGQxLCAweDFkLCAweDg5LCAweDMxLCAweDBiLCAweDdhLCAweDIwLCAweDJiLCAweDAxLCAweGQzLCAweDAwLCAweDIzLAotMHgwYiwgMHg3MiwgMHgwNywgMHgxYywgMHgwOCwgMHg3YSwgMHg0MywgMHgxYywgMHgwYiwgMHg3MiwgMHg4MCwgMHgxOCwKLTB4OTAsIDB4MzAsIDB4NDcsIDB4NzIsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weDA3LCAweDQ5LCAweDAxLCAweDIyLCAweDEyLCAweDA0LCAweDA4LCAweDY4LCAweDAyLCAweDQwLCAweDAxLCAweDIwLAotMHgwMCwgMHgyYSwgMHgwNiwgMHhkMSwgMHgwYSwgMHg2OCwgMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwOSwgMHg2OCwKLTB4ODksIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDkwLCAweGI1LCAweDA3LCAweDFjLCAweDA5LCAweDRjLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweGZjLCAweGY3LAotMHg5MSwgMHhmZiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwgMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwKLTB4MDEsIDB4ZDEsIDB4MDAsIDB4MGMsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsCi0weGM1LCAweGZlLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGM0LCAweDY2LCAweDIxLCAweDQwLAotMHhmOCwgMHhiNSwgMHgwNywgMHgxYywgMHg3OSwgMHg3YSwgMHg3NiwgMHg0OCwgMHgwMCwgMHgyMywgMHg3NiwgMHg0YywKLTB4MDEsIDB4MjksIDB4NWQsIDB4ZDEsIDB4YTIsIDB4ODgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4YTEsIDB4ODksCi0weDhhLCAweDQyLCAweDc0LCAweGRhLCAweGZhLCAweDdhLCAweDAwLCAweDJhLCAweDE1LCAweGQwLCAweDdhLCAweDZjLAotMHgwMCwgMHgyYSwgMHgxMiwgMHhkMCwgMHg4YSwgMHg0MiwgMHgxMCwgMHhkOCwgMHgwMCwgMHg5YSwgMHg1MSwgMHgxYywKLTB4YTEsIDB4ODAsIDB4YTEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODEsIDB4NzgsIDB4NmMsIDB4NmIsIDB4NGUsCi0weGMwLCAweDQ2LCAweGYwLCAweDgwLCAweGEwLCAweDZhLCAweDU4LCAweDIzLCAweDc5LCAweDZjLCAweDU5LCAweDQzLAotMHg0MCwgMHgxOCwgMHhjMSwgMHgxYSwgMHgyOCwgMHhlMCwgMHgyMiwgMHg4OCwgMHgwMSwgMHgzMiwgMHgxMiwgMHgwNCwKLTB4MTIsIDB4MGMsIDB4MjIsIDB4ODAsIDB4OGEsIDB4NDIsIDB4MDAsIDB4ZGIsIDB4MjMsIDB4ODAsIDB4MDAsIDB4MjIsCi0weDAwLCAweDI5LCAweDY5LCAweGRkLCAweDVmLCAweDRjLCAweGE0LCAweDZhLCAweDVlLCAweDRiLCAweDFkLCAweDg4LAotMHg1OCwgMHgyMywgMHg2YiwgMHg0MywgMHhlMywgMHgxOCwgMHhkZSwgMHgxZCwgMHgwMSwgMHgzNiwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MTUsIDB4ZDEsIDB4NTgsIDB4NDksCi0weDAwLCAweDlhLCAweDAxLCAweDMyLCAweDhhLCAweDgwLCAweDhhLCAweDg4LCAweGMwLCAweDQ2LCAweDQyLCAweDgxLAotMHgwOCwgMHg4OCwgMHgwMSwgMHgzMCwgMHg1NCwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHg1OCwgMHgyMCwKLTB4NjgsIDB4NDMsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzksIDB4ZmIsIDB4ZjAsIDB4ODgsCi0weDAwLCAweDA0LCAweDAwLCAweDE0LCAweDk1LCAweGUwLCAweDRkLCAweDRiLCAweDAxLCAweDM1LCAweDJkLCAweDA0LAotMHgyZCwgMHgwYywgMHgxZCwgMHg4MCwgMHg4ZCwgMHg0MiwgMHgwMSwgMHhkYiwgMHgwMCwgMHgyNSwgMHgxZCwgMHg4MCwKLTB4MDEsIDB4MzIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MTQsIDB4OTEsIDB4NDIsIDB4Y2UsIDB4ZGMsIDB4ODEsIDB4ZTAsCi0weGUxLCAweDg4LCAweGUyLCAweDg5LCAweDkxLCAweDQyLCAweDE4LCAweGRhLCAweGY5LCAweDdhLCAweDAwLCAweDI5LAotMHgyZiwgMHhkMCwgMHg3OSwgMHg2YywgMHg0OSwgMHgwNCwgMHg0OSwgMHgwYywgMHg3OSwgMHg2NCwgMHgyYSwgMHhkMCwKLTB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MjcsIDB4ZDgsIDB4ZTEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZTEsIDB4ODAsCi0weGUxLCAweDg4LCAweGMwLCAweDQ2LCAweDgxLCAweDgxLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDc4LCAweDZjLAotMHgxOCwgMHg0MywgMHgzYSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHgwMCwgMHhlMCwgMHg2MywgMHhlMCwKLTB4ZTAsIDB4NmEsIDB4NzksIDB4NmMsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsCi0weGMxLCAweDFmLCAweDU5LCAweDM5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBmLCAweGZiLCAweGUwLCAweDZhLAotMHg3OSwgMHg2YywgMHg0YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHgwMSwgMHg4MCwgMHgxOCwgMHgwMSwgMHgzOSwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4NjAsIDB4MzgsIDB4MDAsIDB4ZjAsIDB4ODksIDB4ZmIsIDB4YjYsIDB4ZTcsCi0weDRhLCAweGUwLCAweDYxLCAweDg4LCAweDAxLCAweDMxLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg2MSwgMHg4MCwgMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgwMCwgMHhkYiwgMHg2MywgMHg4MCwKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4M2UsIDB4ZGQsIDB4MjQsIDB4NGMsIDB4ZTQsIDB4NmEsIDB4MjMsIDB4NGIsCi0weDVkLCAweDg4LCAweDZiLCAweDAwLCAweDViLCAweDE5LCAweDViLCAweDAxLCAweGUzLCAweDE4LCAweGRlLCAweDFkLAotMHgwMSwgMHgzNiwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNiwKLTB4MjAsIDB4ZDEsIDB4MWMsIDB4NGUsIDB4ZjEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZjEsIDB4ODAsIDB4ZjEsIDB4ODgsCi0weGMwLCAweDQ2LCAweDgxLCAweDgxLCAweDcwLCAweDg4LCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDAxLCAweDMwLAotMHgxOCwgMHg0MywgMHgxNywgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg4MCwgMHg2OCwgMHgwMCwgMHg0MCwgMHgxOSwKLTB4NDAsIDB4MDEsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZmEsIDB4NzEsIDB4ODgsCi0weDRhLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDAxLCAweGYwLCAweDZhLCAweDgwLCAweDE4LCAweDAwLCAweGYwLAotMHg0ZCwgMHhmYiwgMHgwZSwgMHg0OSwgMHhjOCwgMHg4OCwgMHg3OSwgMHhlNywgMHgwYiwgMHg0YiwgMHgwMSwgMHgzNSwKLTB4MmQsIDB4MDQsIDB4MmQsIDB4MGMsIDB4NWQsIDB4ODAsIDB4OTUsIDB4NDIsIDB4MDEsIDB4ZGIsIDB4MDAsIDB4MjUsCi0weDVkLCAweDgwLCAweDAxLCAweDMxLCAweDA5LCAweDA0LCAweDA5LCAweDE0LCAweDhhLCAweDQyLCAweGMyLCAweGRjLAotMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg4MSwgMHgwMCwgMHgyMCwgMHhjMCwgMHg0MywgMHhmOCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGM0LCAweDY2LCAweDIxLCAweDQwLCAweGYwLCAweGI0LCAweDA2LCAweDFjLCAweDAxLCAweDIzLCAweGRiLCAweDAzLAotMHgzMywgMHg0MCwgMHgwMSwgMHgyNCwgMHg0NCwgMHg0ZiwgMHgwMCwgMHgyMCwgMHg0NCwgMHg0YSwgMHg0NSwgMHg0ZCwKLTB4ZDEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDAsIDB4MmIsIDB4NDEsIDB4ZDAsIDB4ZTMsIDB4MDMsIDB4ZjMsIDB4MWEsCi0weDczLCAweGQwLCAweGVlLCAweDg5LCAweDllLCAweDQyLCAweDcxLCAweGQzLCAweGVlLCAweDg4LCAweDAwLCAweDJlLAotMHg2ZCwgMHhkMCwgMHhlZCwgMHg2YSwgMHg1ZSwgMHgxZSwgMHg3MywgMHgwMCwgMHg5YiwgMHgxOSwgMHg1YiwgMHgwMSwKLTB4ZWQsIDB4MTgsIDB4YWUsIDB4NjgsIDB4MzYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsCi0weGNlLCAweDg5LCAweDAxLCAweDM2LCAweGNlLCAweDgxLCAweDQwLCAweDM1LCAweGFkLCAweDhiLCAweGFkLCAweDAwLAotMHgzNSwgMHg0ZSwgMHg3NiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3MCwgMHg1MSwgMHg1NSwgMHg4OSwgMHgwMSwgMHgzNSwKLTB4NTUsIDB4ODEsIDB4MzIsIDB4NGUsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4OTAsIDB4NjAsIDB4ZjIsIDB4NmEsCi0weGQyLCAweDE4LCAweDkwLCAweDYzLCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweGQwLCAweDYzLCAweGYyLCAweDZhLAotMHhkMiwgMHgxOCwgMHgxMCwgMHg2NCwgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHg1MCwgMHg2NCwgMHhmMiwgMHg2YSwKLTB4ZDIsIDB4MTgsIDB4OTAsIDB4NjQsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjQsIDB4ZjAsIDB4ODgsCi0weDAxLCAweDM4LCAweGYwLCAweDgwLCAweGYwLCAweDg4LCAweGMwLCAweDQ2LCAweDg4LCAweDgxLCAweDI0LCAweDQ5LAotMHgwMCwgMHgyOCwgMHgzOSwgMHhkMSwgMHg0ZiwgMHg4MCwgMHgzNywgMHhlMCwgMHgwMCwgMHgyZSwgMHgzOCwgMHhkOSwKLTB4YWIsIDB4ODksIDB4YjMsIDB4NDIsIDB4MzAsIDB4ZDMsIDB4YWIsIDB4ODgsIDB4MDAsIDB4MmIsIDB4MmMsIDB4ZDAsCi0weDUzLCAweDg5LCAweDAxLCAweDMzLCAweDUzLCAweDgxLCAweDJhLCAweDFjLCAweGFkLCAweDZhLCAweDU4LCAweDIzLAotMHgwMSwgMHgzZSwgMHg3MywgMHg0MywgMHhlZCwgMHgxOCwgMHhhZSwgMHg2OCwgMHgzNiwgMHgwNiwgMHgzNiwgMHgwZSwKLTB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsIDB4Y2UsIDB4ODksIDB4MDEsIDB4MzYsIDB4Y2UsIDB4ODEsIDB4YTgsIDB4NjAsCi0weDk1LCAweDZhLCAweGVkLCAweDE4LCAweGE4LCAweDYzLCAweDk1LCAweDZhLCAweGVkLCAweDE4LCAweGU4LCAweDYzLAotMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHgyOCwgMHg2NCwgMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHg2OCwgMHg2NCwKLTB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4YTgsIDB4NjQsIDB4OTUsIDB4NmEsIDB4ZWIsIDB4MTgsIDB4ZDgsIDB4NjQsCi0weDkwLCAweDg4LCAweDAxLCAweDM4LCAweDkwLCAweDgwLCAweDkwLCAweDg4LCAweGMwLCAweDQ2LCAweDQ4LCAweDgxLAotMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgwMSwgMHhlMCwgMHgwNCwgMHhlMCwgMHgwMywgMHhlMCwgMHgxNywgMHg4MCwKLTB4MjAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4Y2EsIDB4ODksIDB4MDEsIDB4MzIsIDB4Y2EsIDB4ODEsCi0weGY5LCAweGU3LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgyMSwgMHg0MSwgMHg2MCwgMHgxMCwgMHg0OSwKLTB4NGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTAsIDB4ZDEsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDAsCi0weGNhLCAweDFkLCAweDE5LCAweDMyLCAweDEyLCAweDc5LCAweDAwLCAweDJhLCAweDA4LCAweGQwLCAweDRhLCAweDY5LAotMHgwMCwgMHgyYSwgMHgwYiwgMHhkMSwgMHg4OCwgMHg2MSwgMHg0OCwgMHg2MSwKLTB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGEsIDB4NjksIDB4MDAsIDB4MmEsCi0weDAyLCAweGQxLCAweDg4LCAweDYxLCAweDQ4LCAweDYxLCAweGY3LCAweGU3LCAweDhhLCAweDY5LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MCwgMHg4OCwgMHg2MSwgMHhmMiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MmEsIDB4NDgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NGMsIDB4ZDAsIDB4MDgsIDB4MjIsCi0weGMxLCAweDY4LCAweDBhLCAweDQwLCAweDAwLCAweDI3LCAweDI3LCAweDRiLCAweGQ5LCAweDFkLCAweGI5LCAweDMxLAotMHgwMCwgMHgyYSwgMHgxMSwgMHhkMCwgMHgwNCwgMHgyMiwgMHgyNSwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MSwKLTB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsCi0weDIzLCAweDRjLCAweGMwLCAweDQ2LCAweGNjLCAweDYyLCAweDIzLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYzLAotMHg0ZiwgMHg2MywgMHgxMiwgMHhlMCwgMHgwNSwgMHgyMiwgMHgyMSwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MSwKLTB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsCi0weDFmLCAweDRjLCAweGMwLCAweDQ2LCAweGNjLCAweDYyLCAweDFmLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYzLAotMHgxZSwgMHg0YywgMHhjMCwgMHg0NiwgMHg0YywgMHg2MywgMHg0MCwgMHgyNCwgMHhjYywgMHg4MiwgMHg0ZiwgMHg4MywKLTB4MWMsIDB4NGYsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZDksIDB4OGMsIDB4MDAsIDB4MDUsIDB4MTksCi0weDZkLCAweDZhLCAweDdkLCAweDQwLCAweGU0LCAweDE4LCAweGZmLCAweDM0LCAweDAxLCAweDM0LCAweDY1LCAweDYyLAotMHgwMSwgMHgzMSwgMHg5MSwgMHg0MiwgMHhmNCwgMHhkMywgMHgxMCwgMHgyOSwgMHgwNywgMHhkMiwgMHg4YSwgMHgwMCwKLTB4ZDIsIDB4MTgsIDB4ZmYsIDB4MzIsIDB4MDEsIDB4MzIsIDB4NTcsIDB4NjIsIDB4MDEsIDB4MzEsIDB4MTAsIDB4MjksCi0weGY3LCAweGQzLCAweDExLCAweDQ5LCAweDAwLCAweGYwLCAweDIyLCAweGY4LCAweGIwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwKLTB4MjgsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0weGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLCAweDIwLCAweDAxLCAweDQwLCAweDAwLAotMHg2NywgMHg0NSwgMHgyMywgMHgwMSwgMHhlZiwgMHhjZCwgMHhhYiwgMHg4OSwgMHg5OCwgMHhiYSwgMHhkYywgMHhmZSwKLTB4MTAsIDB4MzIsIDB4NTQsIDB4NzYsIDB4YzMsIDB4ZDIsIDB4ZTEsIDB4ZjAsIDB4MzYsIDB4MzYsIDB4MzYsIDB4MzYsCi0weDMwLCAweDgwLCAweDIwLCAweDQwLCAweGIwLCAweGI1LCAweDBmLCAweDFjLCAweDE1LCAweDRkLCAweGU5LCAweDFkLAotMHhjOSwgMHgzMSwgMHgxNSwgMHg0YywgMHgyMywgMHgxYywgMHgxNSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywKLTB4NDQsIDB4ZmIsIDB4ZTksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4MWUsIDB4MzEsIDB4MjMsIDB4MWMsIDB4MGQsIDB4MWMsCi0weDExLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDNiLCAweGZiLCAweDI5LCAweDFjLCAweDIzLCAweDFjLAotMHgwZSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywgMHgzNSwgMHhmYiwgMHgzOSwgMHgxYywgMHgyMywgMHgxYywKLTB4MGMsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MmYsIDB4ZmIsIDB4MDAsIDB4MjEsIDB4MGIsIDB4NDgsCi0weGMyLCAweDFkLCAweDE5LCAweDMyLCAweDUxLCAweDcxLCAweDAxLCAweDIxLCAweGZmLCAweDMwLCAweDAxLCAweDMwLAotMHg0MSwgMHg2MiwgMHgwOCwgMHgxYywgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4MjgsIDB4MDAsIDB4MDMsIDB4MDAsCi0weDQwLCAweDAwLCAweDAyLCAweDAwLCAweDE0LCAweDAwLCAweDA3LCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHgzNywgMHg0YSwgMHg1MCwgMHg2OSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MzMsIDB4NGIsIDB4MDEsIDB4MjksCi0weDQ5LCAweGQxLCAweDFmLCAweDY4LCAweDE5LCAweDFjLCAweDMyLCAweDRiLCAweDlmLCAweDQyLCAweDA0LCAweGQxLAotMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMywKLTB4OWYsIDB4MDAsIDB4Y2MsIDB4NTksIDB4NTUsIDB4NjksIDB4ZWYsIDB4MTksIDB4M2MsIDB4NjEsIDB4MDEsIDB4MzMsCi0weDA1LCAweDJiLCAweGY3LCAweGQzLCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDAyLCAweDIzLCAweDE4LCAweDQzLAotMHg1MywgMHg2OSwgMHhjMCwgMHg0NiwgMHg5OCwgMHg2MCwgMHg1MCwgMHg2OSwgMHgwOCwgMHgyMywgMHhjMiwgMHg2OCwKLTB4MTMsIDB4NDAsIDB4MjUsIDB4NGYsIDB4ZmEsIDB4MWQsIDB4YjksIDB4MzIsIDB4MDAsIDB4MmIsIDB4MDIsIDB4ZDAsCi0weDA0LCAweDIzLCAweDIzLCAweDRjLCAweDAxLCAweGUwLCAweDA1LCAweDIzLCAweDIyLCAweDRjLCAweGMwLCAweDQ2LAotMHgxNCwgMHg2MSwgMHg0MCwgMHgyNCwgMHhkNCwgMHg4MiwgMHgwMCwgMHgyNCwgMHg1NCwgMHg4MywgMHgyMCwgMHg0YywKLTB4MDAsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MGMsIDB4ZDksIDB4OTUsIDB4MDAsCi0weDQ2LCAweDE5LCAweDc2LCAweDZhLCAweDY2LCAweDQwLCAweGVkLCAweDE5LCAweGZmLCAweDM1LCAweDAxLCAweDM1LAotMHg2ZSwgMHg2MiwgMHgwMSwgMHgzMiwgMHg5YSwgMHg0MiwgMHhmNCwgMHhkMywgMHgxMCwgMHgyYSwgMHgwNywgMHhkMiwKLTB4OTMsIDB4MDAsIDB4ZGIsIDB4MTksIDB4ZmYsIDB4MzMsIDB4MDEsIDB4MzMsIDB4NWMsIDB4NjIsIDB4MDEsIDB4MzIsCi0weDEwLCAweDJhLCAweGY3LCAweGQzLCAweGZmLCAweGY3LCAweDcwLCAweGZmLCAweGJjLCAweGU3LCAweDAwLCAweDIxLAotMHg4ZiwgMHgwMCwgMHhkYywgMHg1OSwgMHg1NSwgMHg2OSwgMHhlZiwgMHgxOSwgMHg3YywgMHg2MiwgMHgwMSwgMHgzMSwKLTB4MDUsIDB4MjksIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDUxLCAweDY5LCAweGMwLCAweDQ2LCAweDg4LCAweDYwLCAweDUwLCAweDY5LCAweDQwLCAweDY4LCAweGMwLCAweDQ2LAotMHg1MCwgMHg2MSwgMHgwOSwgMHg0OCwgMHhmYywgMHhmNywgMHhhNCwgMHhmYSwgMHhhNCwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MzAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjcsIDB4NDUsIDB4MjMsIDB4MDEsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDI4LCAweDAxLCAweDQwLCAweDAwLCAweDIwLCAweDAxLCAweDQwLCAweDAwLAotMHg1YywgMHg1YywgMHg1YywgMHg1YywgMHgxMSwgMHgzMSwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywKLTB4M2IsIDB4NDgsIDB4M2MsIDB4NGMsIDB4MDgsIDB4MjEsIDB4MjAsIDB4NjAsIDB4YTEsIDB4ODAsIDB4MDAsIDB4MjAsCi0weDIwLCAweDgxLCAweGUxLCAweDgwLCAweDYwLCAweDgxLCAweDM5LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYwLAotMHgzOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MSwgMHgzOCwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MSwKLTB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsIDB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjEsCi0weDM2LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYyLCAweDM2LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYyLAotMHgzNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MiwgMHgzNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MiwKLTB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjMsIDB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjMsCi0weDMzLCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYzLCAweDMzLCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYzLAotMHgzMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2NCwgMHgzMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2NCwKLTB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjQsIDB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjQsCi0weDMwLCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDY1LCAweDMwLCAweDQ5LCAweGM4LCAweDY4LCAweDAyLCAweDA0LAotMHg4OSwgMHg2OSwgMHg0YSwgMHg0MCwgMHhlMywgMHgxZCwgMHg3OSwgMHgzMywgMHgwOSwgMHgwNCwgMHhjOSwgMHg0MywKLTB4YzAsIDB4NDMsIDB4NDgsIDB4NDAsIDB4ZTEsIDB4MWQsIDB4YjksIDB4MzEsIDB4ZGEsIDB4NjMsIDB4MDgsIDB4NjAsCi0weDI5LCAweDRkLCAweDIxLCAweDFjLCAweDJiLCAweDFjLCAweDI5LCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LAotMHgzZSwgMHhmYSwgMHgyOCwgMHg0YSwgMHhlMSwgMHgxZCwgMHhiNSwgMHgzMSwgMHgwMSwgMHgyMCwgMHgyYiwgMHgxYywKLTB4MGUsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzYsIDB4ZmEsIDB4MjQsIDB4NGEsIDB4MDAsIDB4MjAsIDB4MzEsIDB4MWMsCi0weDJiLCAweDFjLCAweGZjLCAweGY3LCAweDMwLCAweGZhLCAweGUxLCAweDFkLCAweDRkLCAweDMxLCAweDJiLCAweDFjLAotMHgyMCwgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgyOSwgMHhmYSwgMHhlMCwgMHgxZCwgMHg1ZCwgMHgzMCwKLTB4MDEsIDB4NjgsIDB4MDAsIDB4MjksIDB4ZmMsIDB4ZDAsIDB4NjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MzgsIDB4NjUsCi0weDIwLCAweDZlLCAweGMwLCAweDQ2LCAweDc4LCAweDY1LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg4MCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHhiOSwgMHgyMCwgMHg0MCwgMHg4MSwgMHg4MSwgMHg0OCwgMHhiZCwKLTB4NzksIDB4NTYsIDB4MjMsIDB4OGMsIDB4OTMsIDB4MGMsIDB4ODIsIDB4OTUsIDB4MWQsIDB4MGUsIDB4MTIsIDB4Y2YsCi0weDliLCAweDNiLCAweGMwLCAweGU5LCAweGU2LCAweDU1LCAweDdjLCAweDgyLCAweDk5LCAweGY2LCAweDc4LCAweDAyLAotMHhkMSwgMHhkNywgMHgyNSwgMHg3MywgMHg3MiwgMHg4YywgMHgzMywgMHgxMCwgMHhmNywgMHgwMywgMHhmMSwgMHg0MiwKLTB4NmMsIDB4OWIsIDB4NGEsIDB4YTcsIDB4ODIsIDB4OGUsIDB4MjMsIDB4YTksIDB4OTAsIDB4YjEsIDB4ODIsIDB4OGUsCi0weGRjLCAweDNmLCAweGZiLCAweDI5LCAweDAwLCAweDYyLCAweDIyLCAweDQ1LCAweDg4LCAweDJiLCAweGYxLCAweDg1LAotMHgxMiwgMHg2MSwgMHhkMSwgMHg3MywgMHg2ZSwgMHhiMSwgMHgxMSwgMHgxNiwgMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwKLTB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4MDAsCi0weDE0LCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweGI1LCAweDBmLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLAotMHgzMywgMHhmOCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0YywgMHhmZiwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwKLTB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgMHgxZiwgMHhmOCwgMHhlMCwgMHg2OCwKLTB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsCi0weGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLCAweDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LAotMHgwOCwgMHg0MywgMHgzOCwgMHg2NSwgMHgyMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NSwgMHg2MCwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4YjgsIDB4NjUsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksIDB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHgxZiwgMHgxOCwgMHhiZiwgMHg2OSwgMHg1YiwgMHgxOCwKLTB4NWYsIDB4NjIsIDB4MDEsIDB4MzIsIDB4MDUsIDB4MmEsIDB4ZjcsIDB4ZDMsIDB4MDcsIDB4N2EsIDB4ZmIsIDB4MDgsCi0weDAzLCAweGQzLCAweDAwLCAweDIzLCAweDkyLCAweDAwLCAweDUyLCAweDE4LCAweDEzLCAweDYyLCAweDA3LCAweDZiLAotMHhjMCwgMHg0NiwgMHg4ZiwgMHg2MywgMHhjNywgMHg2YSwgMHhjMCwgMHg0NiwgMHhjZiwgMHg2MywgMHg4NywgMHg2YiwKLTB4YzAsIDB4NDYsIDB4MGYsIDB4NjQsIDB4NDcsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGYsIDB4NjQsIDB4MDcsIDB4NmMsCi0weGMwLCAweDQ2LCAweDhmLCAweDY0LCAweGMyLCAweDZiLCAweGMwLCAweDQ2LCAweGNhLCAweDY0LCAweGMyLCAweDg4LAotMHhjMCwgMHg0NiwgMHgwYSwgMHg4MCwgMHg4MiwgMHg3YSwgMHgxMiwgMHgwNiwgMHgwMywgMHg3YSwgMHgxYiwgMHgwNCwKLTB4MWEsIDB4NDMsIDB4YzMsIDB4ODgsIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4NDMsIDB4N2EsIDB4ZGIsIDB4MDcsCi0weDFhLCAweDQzLCAweDhhLCAweDYwLCAweDE3LCAweDFjLCAweDgzLCAweDdhLCAweDVhLCAweDA4LCAweDA1LCAweGQzLAotMHgxNCwgMHgyMiwgMHgxYywgMHgxYywgMHhhMywgMHgwOCwgMHgwMiwgMHhkMiwgMHgxNSwgMHgyMiwgMHgwMCwgMHhlMCwKLTB4MDAsIDB4MjIsIDB4MDAsIDB4N2EsIDB4NDMsIDB4MDgsIDB4MTAsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsCi0weDg4LCAweDIwLCAweDEwLCAweDQzLCAweDAxLCAweGUwLCAweDgwLCAweDIwLCAweDEwLCAweDQzLCAweDNhLCAweDBhLAotMHgxMiwgMHgwMiwgMHgwMSwgMHgyMywgMHgxYSwgMHg0MywgMHhjOCwgMHg2MCwgMHg4YSwgMHg2MCwgMHgwOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4NzgsIDB4ZmQsIDB4MDUsIDB4ZTAsIDB4MzgsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsCi0weDE4LCAweDQzLCAweDg4LCAweDYwLCAweGNhLCAweDYwLCAweDAzLCAweDQ4LCAweDAxLCAweDg5LCAweDAxLCAweDMxLAotMHgwMSwgMHg4MSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjQsIDB4MDIsIDB4NmQsIDB4MTQsIDB4NGMsIDB4MTUsIDB4MWMsIDB4ZTcsIDB4NjksIDB4YmQsIDB4NDAsCi0weDEzLCAweDFjLCAweDI2LCAweDZhLCAweGYzLCAweDQwLCAweDVkLCAweDQwLCAweDJlLCAweDFjLCAweDQ1LCAweDZkLAotMHhiZCwgMHg0MCwgMHg2ZSwgMHg0MCwgMHgyYiwgMHgxYywgMHgzNSwgMHgxYywgMHhmZCwgMHg0MCwgMHgyZiwgMHgxYywKLTB4YmIsIDB4MDAsIDB4NjUsIDB4NmEsIDB4ZWIsIDB4NTgsIDB4MDAsIDB4MmIsIDB4MDgsIDB4ZDAsIDB4MjMsIDB4NjksCi0weDAxLCAweDM3LCAweDlmLCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDI3LCAweGJlLCAweDAwLCAweGFlLCAweDU5LAotMHgwMCwgMHgyZSwgMHhmNywgMHhkMSwgMHhhNCwgMHg2OSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg0MywgMHgwNSwgMHg0YiwKLTB4MTksIDB4NDMsIDB4YmEsIDB4MDAsIDB4YTksIDB4NTAsIDB4NDAsIDB4MzAsIDB4ODcsIDB4ODMsIDB4ZjAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMywgMHgwMCwgMHgyOSwgMHgwNSwgMHhkOSwgMHgwNywgMHg3OCwKLTB4N2EsIDB4NDAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzMsIDB4OGIsIDB4NDIsIDB4ZjksIDB4ZDMsIDB4ZDAsIDB4NDMsCi0weDAwLCAweDA2LCAweDAwLCAweDBlLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweDA3LCAweDFjLAotMHgwMCwgMHgyNCwgMHhmZiwgMHgyNiwgMHgwOSwgMHgzNiwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5YSwgMHhmOCwKLTB4MDAsIDB4ZjAsIDB4YjgsIDB4ZjksIDB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzcsIDB4ZmEsIDB4M2QsIDB4NzAsCi0weDI4LCAweDFjLCAweDAxLCAweDM3LCAweDAxLCAweDM0LCAweGI0LCAweDQyLCAweGYxLCAweGQzLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwMCwgMHhmMCwgMHg5MywgMHhmOCwgMHgwMCwgMHhmMCwKLTB4YTcsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZmEsIDB4MzgsIDB4MGEsIDB4ZjYsIDB4ZDMsCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYzLCAweGI1LCAweDgyLCAweGIwLCAweDAyLCAweDk4LAotMHg0MSwgMHgwMiwgMHg1MywgMHgyMCwgMHgwMCwgMHhmMCwgMHg2NCwgMHhmOCwgMHgwMCwgMHhmMCwgMHhhOCwgMHhmYSwKLTB4ZmYsIDB4ZjcsIDB4ZTgsIDB4ZmYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MmUsIDB4MjAsCi0weDAwLCAweDkwLCAweDAwLCAweDI1LCAweDAwLCAweDI3LCAweDAyLCAweDk4LCAweDAxLCAweDI4LCAweDA0LCAweGQxLAotMHgwMCwgMHg5OCwgMHg4NCwgMHg0MiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyNiwKLTB4MDksIDB4ZTAsIDB4MDEsIDB4OTgsIDB4NDEsIDB4MWMsIDB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4NjAsIDB4ZjgsCi0weDAwLCAweGYwLCAweDdlLCAweGY5LCAweDA2LCAweDFjLCAweDAwLCAweGYwLCAweDhkLCAweGZhLCAweGY4LCAweDAwLAotMHg4NiwgMHg0MCwgMHgzNSwgMHg0MywgMHgwMSwgMHgzNCwgMHgwMSwgMHgzNywgMHgwNCwgMHgyZiwgMHhlNiwgMHhkMywKLTB4MDMsIDB4OTksIDB4MjAsIDB4YzEsIDB4MDMsIDB4OTEsIDB4ZmYsIDB4MjMsIDB4MDksIDB4MzMsIDB4OWMsIDB4NDIsCi0weGRkLCAweGQzLCAweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI1LAotMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgwMSwgMHgyYywgMHgyYSwgMHhkMCwgMHgxNiwgMHg0OCwgMHhjMCwgMHg2ZiwKLTB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjYsIDB4MjAsIDB4Y2YsCi0weGIxLCAweDAwLCAweDg0LCAweDIwLCAweDAwLCAweGYwLCAweDI0LCAweGY4LCAweDI4LCAweDFjLCAweDAwLCAweGYwLAotMHhkZiwgMHhmOSwgMHgyOCwgMHgwYSwgMHgwMCwgMHhmMCwgMHhkYywgMHhmOSwgMHgyOCwgMHgwYywgMHgwMCwgMHhmMCwKLTB4ZDksIDB4ZjksIDB4MjgsIDB4MGUsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4ZjksIDB4MDAsIDB4ZjAsIDB4NWMsIDB4ZmEsCi0weDAxLCAweDM2LCAweDQyLCAweDJlLCAweGU5LCAweGQzLCAweDYxLCAweDAyLCAweDgzLCAweDIwLCAweDAwLCAweGYwLAotMHgwZiwgMHhmOCwgMHgwMCwgMHhmMCwgMHg1MywgMHhmYSwgMHhmZiwgMHhmNywgMHg5MywgMHhmZiwgMHgwNCwgMHg0OCwKLTB4YzAsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDFjLAotMHgwZiwgMHgxYywgMHgwMCwgMHhmMCwgMHg1OSwgMHhmYSwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHhiNiwgMHhmOSwKLTB4MzgsIDB4MGMsIDB4MDAsIDB4ZjAsIDB4YjMsIDB4ZjksIDB4MzgsIDB4MGEsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjksCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweGFkLCAweGY5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHgwMSwgMHgxYywgMHg1NCwgMHgyMCwgMHhmZiwgMHhmNywgMHhlNywgMHhmZiwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4ZjAsIDB4YTIsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4MDAsIDB4ZjAsCi0weDNkLCAweGZhLCAweDU3LCAweDIwLCAweDAwLCAweGYwLCAweDlhLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg5MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHhmYSwgMHg2ZiwgMHgyMCwgMHgyMywgMHgxNCwgMHg2OCwgMHg5YywgMHg0MywKLTB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmYsIDB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwOCwgMHg0ZiwgMHhmYSwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MTQsIDB4NjgsIDB4OWMsIDB4NDMsIDB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODcsIDB4ZmYsCi0weGY4LCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MGYsIDB4MWMsIDB4MTgsIDB4NGUsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsCi0weDAxLCAweDYwLCAweDYxLCAweDAyLCAweDUzLCAweDIwLCAweGZmLCAweGY3LCAweGE1LCAweGZmLCAweDAwLCAweGYwLAotMHhlOSwgMHhmOSwgMHhmZiwgMHhmNywgMHgyOSwgMHhmZiwgMHhmOCwgMHgxZCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgyYywKLTB4MDMsIDB4ZDEsIDB4MjIsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4MGYsIDB4ZTAsIDB4NDQsIDB4MWMsCi0weGZmLCAweGY3LCAweGFhLCAweGZmLCAweDAwLCAweGYwLCAweGM4LCAweGY4LCAweDA3LCAweDFjLCAweDAwLCAweGYwLAotMHhkNywgMHhmOSwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHhhMiwgMHhmZiwgMHgwMCwgMHhmMCwgMHhjMCwgMHhmOCwKLTB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZjksIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweDI4LCAweDAyLCAweDM4LCAweDQzLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHhjMiwgMHhiMCwKLTB4MTQsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MmYsIDB4MmYsIDB4ZDAsIDB4NzksIDB4MDIsCi0weDE5LCAweDRlLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLAotMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHg2YiwgMHhmZiwgMHgwMCwgMHhmMCwgMHhhZiwgMHhmOSwgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4ZDYsIDB4ZmUsIDB4NmEsIDB4NDYsIDB4ZTgsIDB4MWQsCi0weDA1LCAweDMwLCAweDE0LCAweDU0LCAweDIxLCAweDBhLCAweDY4LCAweDQ0LCAweDQxLCAweDcwLCAweDY4LCAweDQ2LAotMHgwMCwgMHg5OSwgMHgwYywgMHgzMCwgMHhmZiwgMHhmNywgMHhiYSwgMHhmZSwgMHgwMiwgMHhhYiwgMHgxOCwgMHg3MCwKLTB4MDAsIDB4MjAsIDB4NTgsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsCi0weGZmLCAweGY3LCAweGIyLCAweGZlLCAweDAyLCAweGFiLCAweDU4LCAweDcwLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHgxNSwgMHhmZiwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywKLTB4MDEsIDB4NjAsIDB4NDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZmLCAweGI1LCAweGMyLCAweGIwLCAweDA3LCAweDFjLCAweDAxLCAweDJmLAotMHgwMSwgMHhkMSwgMHgwMSwgMHgyMCwgMHgzNiwgMHhlMCwgMHg2YiwgMHg0NiwgMHgwMCwgMHgyMCwgMHhjNCwgMHg0MywKLTB4MTAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4NDIsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MzAsCi0weDAzLCAweDFjLCAweDAwLCAweDI0LCAweDAwLCAweDJhLCAweDBhLCAweGQ5LCAweDBlLCAweDg4LCAweGMwLCAweDQ2LAotMHgwNiwgMHg3MCwgMHgwZSwgMHg4OCwgMHgzNiwgMHgxMiwgMHg0NiwgMHg3MCwgMHgwMiwgMHgzMCwgMHgwMiwgMHgzMSwKLTB4MDIsIDB4MzQsIDB4OTQsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4OTIsIDB4MTgsIDB4MWMsIDB4MTEsIDB4MWMsCi0weGZmLCAweGY3LCAweDdjLCAweGZlLCAweDA0LCAweDFjLCAweDAwLCAweDIwLCAweDAxLCAweDkwLCAweDAyLCAweGFiLAotMHgxYywgMHg3MCwgMHg1OCwgMHg3MCwgMHg5ZCwgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwgMHhmZiwgMHhmNywKLTB4NzEsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NDUsIDB4OWIsIDB4MWQsIDB4MDYsIDB4MmQsIDB4MGUsCi0weGFjLCAweDQyLCAweDAzLCAweGQxLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDNlLCAweGZmLAotMHgwMSwgMHgyMCwgMHhhYywgMHg0MiwgMHgwMCwgMHhkMSwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjUsIDB4YzIsIDB4YjAsIDB4MGYsIDB4MWMsIDB4NDEsIDB4MDIsCi0weDE0LCAweDRjLCAweGUwLCAweDZmLCAweDIwLCAweDIzLCAweDAyLCAweDY4LCAweDlhLCAweDQzLCAweDAyLCAweDYwLAotMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHhlZiwgMHhmZSwgMHgwMCwgMHhmMCwgMHgzMywgMHhmOSwgMHhmZiwgMHhmNywKLTB4NzMsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NWEsIDB4ZmUsIDB4ZTAsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAyLCAweGFkLCAweDAxLCAweDYwLCAweDZkLCAweDc4LCAweDAwLCAweDI0LAotMHgwMiwgMHhhYiwgMHg1YywgMHg3MCwgMHg2OCwgMHg0NiwgMHgwYywgMHgyMSwgMHhmZiwgMHhmNywgMHgzYywgMHhmZSwKLTB4YTgsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4OTgsIDB4ODcsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MjAsIDB4MWMsCi0weDAwLCAweGUwLCAweDAxLCAweDIwLCAweDQyLCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKLTB4YjQsIDB4MjIsIDB4OWYsIDB4ZTUsIDB4YjQsIDB4MzIsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4ODEsIDB4MDMsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHgwMSwgMHgwMywgMHg4MCwgMHhlMSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHg4MSwgMHgwMiwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAotMHgwMSwgMHgwMiwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LCAweDgxLCAweDAxLCAweDgwLCAweGUxLAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDkzLCAweGU1LCAweDAxLCAweDAxLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDgxLCAweDAwLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDAxLCAweDAwLCAweDgwLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LAotMHhhNCwgMHgyMSwgMHg5ZiwgMHhlNSwgMHhhOCwgMHgzMSwgMHg5ZiwgMHhlNSwgMHhhMCwgMHgxMywgMHhhMCwgMHhlMSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgyMCwgMHgxMywgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHhhMCwgMHgxMiwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDIwLCAweDEyLCAweGEwLCAweGUxLAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweGEwLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDIwLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4YTAsIDB4MTAsIDB4YTAsIDB4ZTEsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4YTAsIDB4MzAsIDB4OWYsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDcwLCAweDMwLCAweDlmLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHgzNCwgMHgyMCwgMHg5ZiwgMHhlNSwKLTB4M2MsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGY4LCAweDAwLCAweDE4LCAweDQwLAotMHgwNCwgMHgwMSwgMHgxOCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhmYywgMHgwMCwgMHgxOCwgMHg0MCwKLTB4ODAsIDB4YjUsIDB4MDAsIDB4ZjAsIDB4MGMsIDB4ZjgsIDB4MDAsIDB4MjcsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDQ3LCAweGY4LCAweDc4LCAweDFjLCAweDA3LCAweDA0LCAweDNmLCAweDBjLCAweDBjLCAweDJmLCAweGY3LCAweGRkLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxZCwgMHg0OCwKLTB4MDIsIDB4NjgsIDB4MWQsIDB4NDksIDB4OGIsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjAsIDB4MDIsIDB4NjYsCi0weDhhLCAweDZhLCAweDQzLCAweDY4LCAweDliLCAweDE4LCAweDQzLCAweDYwLCAweDkzLCAweDQyLCAweDAyLCAweGQyLAotMHg4MiwgMHg2OCwgMHgwMSwgMHgzMiwgMHg4MiwgMHg2MCwgMHhjMiwgMHg2OCwgMHgwYiwgMHg2YSwgMHhkMiwgMHgxOCwKLTB4YzIsIDB4NjAsIDB4NDIsIDB4NjksIDB4Y2IsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4NDIsIDB4NjEsIDB4YzIsIDB4NjksCi0weDhiLCAweDY4LCAweGQyLCAweDE4LCAweGMyLCAweDYxLCAweDAyLCAweDY5LCAweDBiLCAweDY5LCAweGQyLCAweDE4LAotMHgwMiwgMHg2MSwgMHg4MiwgMHg2OSwgMHgwYiwgMHg2OCwgMHhkMiwgMHgxOCwgMHg4MiwgMHg2MSwgMHgwMiwgMHg2YiwKLTB4Y2IsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjMsIDB4NGEsIDB4NmEsIDB4NDMsIDB4NmIsIDB4OWIsIDB4MTgsCi0weDQzLCAweDYzLCAweDkzLCAweDQyLCAweDAyLCAweGQyLCAweDgyLCAweDZiLCAweDAxLCAweDMyLCAweDgyLCAweDYzLAotMHhjMiwgMHg2YiwgMHg0YiwgMHg2OSwgMHhkMiwgMHgxOCwgMHhjMiwgMHg2MywgMHgwMiwgMHg2YywgMHhjOSwgMHg2YSwKLTB4NTEsIDB4MTgsIDB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDA4LCAweDE0LCAweDQwLCAweDg4LCAweGI1LCAweDY5LCAweDQ2LCAweDAwLCAweGYwLCAweDE3LCAweGY4LAotMHg4MSwgMHgwOCwgMHgwYSwgMHhkMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyOSwgMHgwNywgMHhkOSwgMHgwMCwgMHgyMiwKLTB4ODMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODgsIDB4NDIsCi0weGY4LCAweGQzLCAweDg4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweDAwLCAweGYwLAotMHgwNCwgMHhmOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMiwKLTB4MDAsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDIsIDB4MjgsIDB4MGMsIDB4ZDAsCi0weDAzLCAweDI4LCAweDAyLCAweGQxLCAweDA3LCAweDQ4LCAweDFjLCAweDIyLCAweDA4LCAweDYwLCAweDEwLCAweDFjLAotMHg3MCwgMHg0NywgMHgwNiwgMHg0OCwgMHgwNCwgMHhlMCwgMHgwNiwgMHg0OCwgMHg1MCwgMHgyMiwgMHgwOCwgMHg2MCwKLTB4ZjcsIDB4ZTcsIDB4MDUsIDB4NDgsIDB4NjgsIDB4MjIsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDA4LCAweDgzLCAweDIwLCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg4MCwgMHhiNCwgMHgwMywgMHgyMiwgMHhjMiwgMHg4MCwgMHgxNSwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4ODIsIDB4NjAsIDB4MTQsIDB4NGEsIDB4MTIsIDB4ODgsIDB4MDEsIDB4MzIsIDB4YzIsIDB4NjAsCi0weDAwLCAweDIwLCAweDEzLCAweDRhLCAweDEzLCAweDVjLCAweGMwLCAweDQ2LCAweDBiLCAweDcwLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMSwgMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgyMCwgMHgyMiwgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMSwKLTB4MDAsIDB4MjAsIDB4MGUsIDB4NGIsIDB4MWYsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGYsIDB4NzAsIDB4MDEsIDB4MzAsCi0weDAxLCAweDMxLCAweDA4LCAweDI4LCAweGY4LCAweGQzLCAweDBhLCAweDcwLCAweDAxLCAweDMxLCAweDAwLCAweDIwLAotMHgwOSwgMHg0YSwgMHgxMywgMHg1YywgMHhjMCwgMHg0NiwgMHgwYiwgMHg3MCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMSwKLTB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDgsIDB4NzAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDA4LCAweDEwLCAweDAwLCAweDAzLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDA0LCAweDAwLCAweDgwLAotMHg4NSwgMHgwNCwgMHgwMCwgMHg4MCwgMHg4ZSwgMHgwNCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMywKLTB4MGEsIDB4NDgsIDB4YzEsIDB4MWQsIDB4ODksIDB4MzEsIDB4NGIsIDB4NzAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4NzAsCi0weDY0LCAweDIxLCAweDgwLCAweDMwLCAweGMxLCAweDgyLCAweDAxLCAweDgzLCAweDQzLCAweDgzLCAweDdkLCAweDIxLAotMHhjOSwgMHgwMCwgMHg4MSwgMHg4MywgMHhjMiwgMHg4MywgMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKLTB4MDAsIDB4ZjAsIDB4OGUsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGI1LCAweDIyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGUxLCAweGZmLCAweDEzLCAweDQ4LAotMHgwMiwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg4MCwgMHhmYiwgMHgwMSwgMHgyMywgMHhkOCwgMHg0MiwKLTB4MGEsIDB4ZDEsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4Y2EsIDB4ODgsIDB4MDEsIDB4MzIsCi0weGNhLCAweDgwLCAweDgxLCAweDc5LCAweDAxLCAweDMxLCAweDgxLCAweDcxLCAweGZkLCAweGY3LCAweDcwLCAweGY5LAotMHgwYiwgMHg0OCwgMHhjMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwNSwgMHhkMSwgMHgwYSwgMHg0OCwgMHg3ZCwgMHgyMiwKLTB4ZDIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmIsIDB4MDgsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weGUxLCAweGZjLCAweDA4LCAweDQ4LCAweDI4LCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDYwLCAweGZiLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OSwgMHgyMSwgMHhmZiwgMHhmZiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YTUsIDB4N2IsIDB4MjEsIDB4NDAsCi0weDk1LCAweDJjLCAweGZmLCAweGZmLCAweDU5LCAweDAzLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDEwLCAweDIwLAotMHgwZiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwZiwgMHg0YSwgMHgwZiwgMHg0OCwgMHg2NCwgMHgyMSwKLTB4ZmIsIDB4ZjcsIDB4YzYsIDB4ZmMsIDB4MGUsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDEsIDB4NjgsCi0weDBhLCAweDQwLCAweDA4LCAweDIxLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDAyLCAweDY4LCAweDEyLCAweDBjLAotMHgwNywgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwNCwgMHhkMywgMHgwOCwgMHg0OCwgMHhjMCwgMHg0NiwKLTB4YzEsIDB4NjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsCi0weGY5LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGE1LCAweDU1LCAweGZmLCAweGZmLAotMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MjcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsCi0weDAxLCAweDY4LCAweDBhLCAweDQwLCAweDA3LCAweDIxLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDAyLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMywgMHhkMywgMHgyMSwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsCi0weDFmLCAweDQ4LCAweGZiLCAweGY3LCAweDg3LCAweGZjLCAweDFmLCAweDQ4LCAweGMxLCAweDZiLCAweGZmLCAweDI5LAotMHhmYywgMHhkMSwgMHg4MSwgMHg2YiwgMHg0MiwgMHg2YiwgMHgxNiwgMHgxYywgMHgwZiwgMHgxYywgMHgxYywgMHg0YywKLTB4MTAsIDB4MjMsIDB4NjAsIDB4NjksIDB4MTgsIDB4NDMsIDB4NjAsIDB4NjEsIDB4YTEsIDB4NjksIDB4OTksIDB4NDMsCi0weDFkLCAweDA0LCAweGExLCAweDYxLCAweGU4LCAweDYwLCAweGEwLCAweDY5LCAweGMwLCAweDQ2LCAweDI4LCAweDYxLAotMHgxNiwgMHg0YSwgMHgxNywgMHg0OSwgMHg2NCwgMHgyMCwgMHhmYiwgMHhmNywgMHg2ZiwgMHhmYywgMHgxNiwgMHg0YSwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MTUsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MzksIDB4MWMsIDB4MzIsIDB4MWMsCi0weGZiLCAweGY3LCAweDZlLCAweGZjLCAweDEzLCAweDQ4LCAweGMxLCAweDY4LCAweDA4LCAweDI5LCAweGZjLCAweGQxLAotMHgxMiwgMHg0OCwgMHhmYiwgMHhmNywgMHg1ZCwgMHhmYywgMHgxMCwgMHgyMywgMHg2MCwgMHg2OSwgMHg5OCwgMHg0MywKLTB4NjAsIDB4NjEsIDB4ZTgsIDB4NjAsIDB4MDEsIDB4MjAsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsCi0weGM4LCAweDcxLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weGI1LCAweGI2LCAweDIxLCAweDQwLCAweDY0LCAweDAwLCAweDMwLCAweDAyLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHg0MCwgMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZCwgMHhmNywKLTB4MDEsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4MzIsIDB4ZmMsIDB4ZmQsIDB4ZjcsIDB4ZDYsIDB4ZmUsCi0weGZlLCAweGY3LCAweDA0LCAweGY4LCAweGZlLCAweGY3LCAweDE2LCAweGY4LCAweGZlLCAweGY3LCAweDI0LCAweGY4LAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MSwgMHgwMywgMHhmZiwgMHhmZiwgMHg5MCwgMHhiNSwgMHhmZCwgMHhmNywKLTB4NmIsIDB4ZmMsIDB4MzQsIDB4NGYsIDB4MDAsIDB4MjQsIDB4ZjksIDB4NjgsIDB4ZjgsIDB4MWQsIDB4NzksIDB4MzAsCi0weDAxLCAweDI5LCAweDBmLCAweGQxLCAweDMxLCAweDQ5LCAweGMwLCAweDQ2LCAweGY5LCAweDY3LCAweDMxLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwMSwgMHg2MCwgMHgzMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwYywgMHg2MCwgMHg0YywgMHg2MCwKLTB4OGMsIDB4NjAsIDB4Y2MsIDB4NjAsIDB4MGMsIDB4NjEsIDB4NGMsIDB4NjEsIDB4OGMsIDB4NjEsIDB4MDQsIDB4ZTAsCi0weGY5LCAweDFkLCAweDdkLCAweDMxLCAweGY5LCAweDY3LCAweDEyLCAweGMwLCAweDA4LCAweDM4LCAweDAwLCAweDY4LAotMHg2MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDk5LCAweDQzLCAweDAxLCAweDYwLCAweDAwLCAweGYwLCAweDU0LCAweGY4LCAweGZkLCAweGY3LCAweDRlLCAweGZjLAotMHgwMCwgMHhmMCwgMHg1ZSwgMHhmOSwgMHhmZCwgMHhmNywgMHg3MywgMHhmOCwgMHhmZiwgMHhmNywgMHgwYywgMHhmZSwKLTB4ZmQsIDB4ZjcsIDB4MmUsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4YjYsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4YzIsIDB4ZmUsCi0weGZkLCAweGY3LCAweDU0LCAweGZkLCAweGZkLCAweGY3LCAweDBhLCAweGZkLCAweGZkLCAweGY3LCAweDk0LCAweGZkLAotMHgwMCwgMHhmMCwgMHgxYSwgMHhmYSwgMHhmZCwgMHhmNywgMHg5YywgMHhmZiwgMHhmZCwgMHhmNywgMHgwYSwgMHhmZiwKLTB4ZmQsIDB4ZjcsIDB4ZDIsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4M2MsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4ZGMsIDB4ZmEsCi0weGZmLCAweGY3LCAweDljLCAweGZmLCAweDcxLCAweDIzLCAweDViLCAweDAxLAotMHhmOCwgMHgxOCwgMHgwNCwgMHg3MiwgMHg0NCwgMHg3MiwgMHgwNywgMHgyMywgMHg1YiwgMHgwMiwgMHhmOCwgMHgxOCwKLTB4MDQsIDB4NjMsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4YTgsIDB4MjAsIDB4ZmUsIDB4ZjcsCi0weGIxLCAweGZkLCAweDA5LCAweDQ4LCAweGMwLCAweDQ2LCAweDQ0LCAweDYyLCAweDAwLCAweGYwLCAweDE4LCAweGZhLAotMHgwNywgMHg0OCwgMHhmYiwgMHhmNywgMHhiZCwgMHhmYiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MTEsIDB4NDAsCi0weDAwLCAweDAxLCAweDExLCAweDAwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDE1LCAweDhmLCAweDIxLCAweDQwLAotMHgwMCwgMHhiNSwgMHgwNCwgMHg0OCwgMHhmYiwgMHhmNywgMHhhYSwgMHhmYiwgMHhmZCwgMHhmNywgMHg1ZSwgMHhmZiwKLTB4ZmQsIDB4ZjcsIDB4MjQsIDB4ZmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MTUsIDB4OTksIDB4MjEsIDB4NDAsCi0weGZhLCAweDIxLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LCAweDQxLCAweDYyLCAweDQwLCAweDIxLCAweDQxLCAweDYyLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHg0OCwgMHg0MSwgMHg2OSwKLTB4MDcsIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjEsIDB4ODIsIDB4NjksIDB4OWEsIDB4NDMsIDB4ODIsIDB4NjEsCi0weDAxLCAweDIyLCAweDEyLCAweDA1LCAweGQxLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDYxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZSwgMHhhZiwgMHg5YSwgMHgxMCwKLTB4MDAsIDB4YjUsIDB4MDIsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4ODAsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGM4LCAweDU3LCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDI0LCAweDRjLCAweDAxLCAweDIxLCAweDA5LCAweDA0LAotMHgyMCwgMHg2OCwgMHgwMSwgMHg0MCwgMHgwOSwgMHgyMCwgMHgyMiwgMHg0ZSwgMHgyMiwgMHg0ZCwgMHgwMCwgMHgyOSwKLTB4MDUsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDQsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4ODksIDB4MGEsCi0weDAxLCAweGQzLCAweGYwLCAweDYwLCAweDAwLCAweGUwLCAweDI4LCAweDY0LCAweDFkLCAweDQ4LCAweGZiLCAweGY3LAotMHg2NSwgMHhmYiwgMHgxZCwgMHg0ZiwgMHgxZCwgMHg0OSwgMHg4OCwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4OCwgMHg2MSwKLTB4MzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4NzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsCi0weDE5LCAweDQ4LCAweGZiLCAweGY3LCAweDU3LCAweGZiLCAweDE5LCAweDQ4LCAweGZiLCAweGY3LCAweDU0LCAweGZiLAotMHgwMCwgMHgyOCwgMHhmYSwgMHhkMSwgMHgzOCwgMHg3YSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgxNiwgMHg0OCwKLTB4ZmIsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDQsIDB4MjAsIDB4NjgsIDB4MDEsIDB4NDAsCi0weDE0LCAweDIwLCAweDAwLCAweDI5LCAweDA1LCAweGQxLCAweDIxLCAweDY4LCAweDA5LCAweDBjLCAweDA0LCAweGQxLAotMHgyMSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMSwgMHhkMywgMHhmMCwgMHg2MCwgMHgwMSwgMHhlMCwgMHgyOCwgMHg2NCwKLTB4ZmYsIDB4ZTcsIDB4ZmUsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmQsIDB4MGIsIDB4NDgsIDB4ZmIsIDB4ZjcsCi0weDM1LCAweGZiLCAweGZmLCAweGY3LCAweGFmLCAweGZmLCAweGNkLCAweGU3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsCi0weGI1LCAweDA3LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDk5LCAweDlmLCAweDIxLCAweDQwLAotMHgwMCwgMHgyMCwgMHgwNywgMHg0YSwgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNSwgMHg1MCwgMHg2MSwgMHhjOCwgMHg2MCwKLTB4ZDAsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MDMsIDB4NGEsIDB4MDEsIDB4MjEsCi0weGQxLCAweDYzLCAweDU4LCAweDYwLCAweGZjLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHhiNSwgMHhjMCwgMHhiMCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKLTB4MGEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4ZDEsIDB4ZmYsIDB4MDcsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4MjgsIDB4ZDAsCi0weDY5LCAweDQ2LCAweGZmLCAweDIyLCAweDM4LCAweDFjLCAweDAxLCAweDMyLCAweGZkLCAweGY3LCAweDU0LCAweGY5LAotMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHg5OCwgMHg0MiwgMHgxYiwgMHhkMSwgMHgwZCwgMHg5OCwgMHgwMCwgMHgwOSwKLTB4MTgsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4OGQsIDB4ZjgsIDB4MGUsIDB4NDksIDB4MDEsIDB4MjIsCi0weDEyLCAweDA0LCAweDA4LCAweDY4LCAweDAyLCAweDQwLCAweDBkLCAweDQ4LCAweDA1LCAweGQxLCAweDBhLCAweDY4LAotMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwOSwgMHg2OCwgMHg4OSwgMHgwYSwgMHgwMywgMHhkMywgMHgwYSwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsCi0weGZmLCAweGY3LCAweGJjLCAweGZmLCAweDM4LCAweDFjLCAweGZkLCAweGY3LCAweDc0LCAweGY4LCAweDQwLCAweGIwLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDE3LCAweDQ5LCAweDAxLCAweDIyLCAweDEyLCAweDA0LAotMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwNiwgMHgyMCwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwYSwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDksIDB4NjgsIDB4ODksIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MTEsIDB4NDksCi0weGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAyLCAweGUwLCAweDEwLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDY0LAotMHgwMywgMHgyMCwgMHhmZSwgMHhmNywgMHhkMywgMHhmYywgMHhmYiwgMHhmNywgMHgwZCwgMHhmZiwgMHgwMSwgMHgyMywKLTB4MTgsIDB4NDMsIDB4ZmIsIDB4ZjcsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmUsIDB4ZmYsIDB4ZjcsCi0weDlkLCAweGZmLCAweGZmLCAweGY3LCAweDA1LCAweGZlLCAweGZmLCAweGY3LCAweGY1LCAweGZlLCAweGZmLCAweGY3LAotMHgwOSwgMHhmZiwgMHhmZiwgMHhmNywgMHg5YiwgMHhmZCwgMHhmZiwgMHhmNywgMHgyMSwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDQ2LCAweDRhLCAweDAxLCAweDIxLCAweGM5LCAweDAzLAotMHg0NSwgMHg0ZCwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhlYywgMHgxOCwgMHhhMSwgMHg2MSwgMHgyOCwgMHg4OCwKLTB4NDAsIDB4MDQsIDB4NDMsIDB4NGIsIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWEsIDB4MDQsIDB4MjAsIDB4YWYsIDB4NjAsCi0weDQxLCAweDRlLCAweGMwLCAweDQ2LCAweGIwLCAweDYxLCAweDA4LCAweDIwLCAweGM4LCAweDIzLCAweDQzLCAweDQzLAotMHhiYiwgMHg0MiwgMHgyMSwgMHhkOSwgMHg0MSwgMHgwMCwgMHgzZCwgMHg0ZSwgMHhjMCwgMHg0NiwgMHgzMSwgMHg2MSwKLTB4YjYsIDB4NjksIDB4MjAsIDB4MjMsIDB4OWIsIDB4MWIsIDB4M2EsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjMsIDB4NjEsCi0weDEwLCAweDNiLCAweDMzLCAweDYyLCAweDhiLCAweDAwLCAweGZmLCAweDFhLCAweDQwLCAweDA4LCAweDgxLCAweDQyLAotMHgxNywgMHhkMywgMHhiOCwgMHgyMywgMHg0MywgMHg0MywgMHhiYiwgMHg0MiwgMHgwOCwgMHhkOSwgMHg0MSwgMHgxZSwKLTB4MzIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4OTksIDB4ODEsIDB4ZDksIDB4ODEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MzgsCi0weDU4LCAweDYxLCAweDBhLCAweGUwLCAweDAxLCAweDMwLCAweDgxLCAweDQyLCAweGVmLCAweGQyLCAweDA2LCAweGUwLAotMHgyYywgMHg0ZSwgMHhiMywgMHg2OSwgMHgwMSwgMHgzMywgMHhiMywgMHg2MSwgMHg0MCwgMHgwMCwgMHg4OCwgMHg0MiwKLTB4ZDIsIDB4ZDksIDB4MmEsIDB4NDksIDB4MDAsIDB4MjAsIDB4YTMsIDB4NjksIDB4OWIsIDB4MDgsIDB4MDcsIDB4ZDAsCi0weDI4LCAweDRiLCAweDg3LCAweDAwLCAweGNiLCAweDUxLCAweGE3LCAweDY5LCAweGJmLCAweDA4LCAweDAxLCAweDMwLAotMHg4NywgMHg0MiwgMHhmOCwgMHhkOCwgMHgyMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MiwgMHg4YywgMHg4OSwKLTB4NTgsIDB4MjAsIDB4NjAsIDB4NDMsIDB4ODcsIDB4MTgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmMsCi0weDBhLCAweGRkLCAweDU4LCAweDIzLCAweDQzLCAweDQzLCAweDhjLCAweDZhLCAweGUzLCAweDE4LCAweDAxLCAweDMwLAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg5YSwgMHg2MCwgMHg4YiwgMHg4OSwgMHg4MywgMHg0MiwgMHhmNCwgMHhkYywKLTB4Y2YsIDB4NjIsIDB4Y2MsIDB4ODksIDB4NjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4MDEsIDB4YzcsIDB4MTksCi0weDAwLCAweDIwLCAweDAwLCAweDJjLCAweDBiLCAweGRkLCAweDQzLCAweDAwLCAweDFiLCAweDE4LCAweDViLCAweDAxLAotMHhjYywgMHg2YSwgMHhlMywgMHgxOCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg5YSwgMHg2MCwKLTB4Y2IsIDB4ODksIDB4ODMsIDB4NDIsIDB4ZjMsIDB4ZGMsIDB4NGYsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MGIsIDB4NjksCi0weDAwLCAweDJiLCAweDA3LCAweGQ5LCAweDg3LCAweDAwLCAweDRiLCAweDZhLCAweGMwLCAweDQ2LCAweGRhLCAweDUxLAotMHgwYiwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4MywgMHg0MiwgMHhmNywgMHhkOCwgMHg0OSwgMHg2YSwgMHg4MCwgMHgwMCwKLTB4MDgsIDB4MTgsIDB4MDQsIDB4MzgsIDB4MjgsIDB4NjEsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGIwLCAweGJlLCAweDIxLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHhhZCwgMHhkZSwgMHgwMCwKLTB4MGEsIDB4NDgsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksCi0weDQxLCAweDYxLCAweGQxLCAweDYwLCAweDAwLCAweDIxLCAweGExLCAweDIyLCAweDUyLCAweDAzLCAweDkxLCAweDYxLAotMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2MSwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNiwKLTB4NTksIDB4MDUsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDgwLCAweGI0LCAweDAyLCAweDFjLCAweDBiLCAweDQ4LCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMzLCAweDE4LAotMHg5YSwgMHg2MSwgMHgwMSwgMHgyMywgMHgxYiwgMHgwNiwgMHg0MiwgMHg2OSwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MSwKLTB4ODcsIDB4NjksIDB4OWYsIDB4NDMsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDUsCi0weDg3LCAweDYxLCAweGRhLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDE4LCAweDYxLCAweGExLCAweDIwLAotMHg0MCwgMHgwMywgMHg4MSwgMHg2MSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzksIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjgsCi0weDAwLCAweDIwLCAweDA5LCAweDQ5LCAweDAwLCAweDIyLCAweDAzLCAweDAxLCAweDVmLCAweDE4LCAweDMzLCAweDIzLAotMHg5YiwgMHgwMSwgMHhmYiwgMHgxOCwgMHg5YSwgMHg2MiwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhmNiwgMHhkMywKLTB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MzMsIDB4ZjgsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDFkLCAweDNlLCAweGZmLCAweGZmLAotMHgwMCwgMHhiNSwgMHgwMiwgMHg0OCwgMHgwMCwgMHhmMCwgMHgwNCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YTgsIDB4NjEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGYsIDB4NGIsCi0weGExLCAweDIxLCAweDQ5LCAweDAzLCAweDAwLCAweDI4LCAweDBlLCAweGQwLCAweGM4LCAweDYxLCAweDE4LCAweDFjLAotMHg1OSwgMHg2OSwgMHg1MywgMHgwMSwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MSwgMHg4NywgMHg2OSwgMHg5ZiwgMHg0MywKLTB4ODcsIDB4NjEsIDB4ZDEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjEsIDB4ODAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDE4LCAweDFjLCAweDVmLCAweDY5LCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDlmLCAweDQzLAotMHg0NywgMHg2MSwgMHhkNywgMHg2MCwgMHgwMCwgMHgyMCwgMHhjOCwgMHg2MSwgMHhmMywgMHhlNywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDcsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MTcsIDB4NGMsCi0weDAzLCAweDAxLCAweDFkLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LCAweDlkLCAweDZhLAotMHhiZCwgMHg0MiwgMHgwNSwgMHhkMSwgMHgxZCwgMHg2YiwgMHg5NSwgMHg0MiwgMHgwMiwgMHhkMSwgMHhkYiwgMHg2YSwKLTB4OGIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZWUsIDB4ZDMsIDB4MDAsIDB4MjAsCi0weDAzLCAweDAxLCAweDFkLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LCAweDliLCAweDZhLAotMHgwMCwgMHgyYiwgMHgwOSwgMHhkMSwgMHgwMywgMHgwMSwgMHgxYywgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwKLTB4ZTMsIDB4MTgsIDB4MWEsIDB4NjMsIDB4ZDksIDB4NjIsIDB4NWEsIDB4NjMsIDB4OWYsIDB4NjIsIDB4MDIsIDB4ZTAsCi0weDAxLCAweDMwLCAweDBiLCAweDI4LCAweGVhLCAweGQzLCAweDBiLCAweDI4LCAweDAxLCAweGQxLCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHhiMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MDEsIDB4MWMsIDB4MDAsIDB4MjIsIDB4MDEsIDB4MjAsIDB4MTYsIDB4NGYsIDB4MDEsIDB4ZTAsCi0weDAwLCAweDJhLCAweDA3LCAweGQxLCAweDAzLCAweDAxLCAweGRjLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLAotMHhlMywgMHgxOCwgMHg5YiwgMHg2OSwgMHg4YiwgMHg0MiwgMHgxMSwgMHhkMSwgMHgwMiwgMHgwMSwgMHhkMiwgMHgxOSwKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4OTMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OTMsIDB4NjEsCi0weGQzLCAweDZhLCAweGMwLCAweDQ2LCAweGQzLCAweDYxLCAweDEzLCAweDZiLCAweGMwLCAweDQ2LCAweDEzLCAweDYyLAotMHg1MywgMHg2YiwgMHhjMCwgMHg0NiwgMHg1MywgMHg2MiwgMHgwMSwgMHgyMiwgMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwKLTB4ZTAsIDB4ZDMsIDB4MDcsIDB4NGIsIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4OWEsIDB4NjgsIDB4OGEsIDB4NDIsCi0weDAzLCAweGQxLCAweDAwLCAweDIxLCAweDk5LCAweDYwLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLAotMHhjMCwgMHg0MywgMHhmYSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlOCwgMHgxYiwgMHgwMCwgMHg4MCwKLTB4MGIsIDB4MjgsIDB4MTcsIDB4ZGEsIDB4MGMsIDB4NDksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4OGEsIDB4NjksCi0weDEzLCAweDQzLCAweDAxLCAweDIyLCAweDEyLCAweDA1LCAweDhiLCAweDYxLCAweDEzLCAweDYxLCAweDAwLCAweDAxLAotMHg0MCwgMHgxOCwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHgwMywgMHg2YiwgMHhjMCwgMHg0NiwKLTB4NDMsIDB4NjMsIDB4NTMsIDB4MDEsIDB4ODgsIDB4NjksIDB4OTgsIDB4NDMsIDB4ODgsIDB4NjEsIDB4MTAsIDB4NjEsCi0weDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZjLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg5MCwgMHhiNCwgMHgwOCwgMHg0YSwgMHhkMCwgMHg2OSwgMHgwMCwgMHgyMSwgMHgwNywgMHg0ZiwgMHhkMywgMHg2OSwKLTB4ODMsIDB4NDIsIDB4MDIsIDB4ZDksIDB4ZmMsIDB4MWEsIDB4MjAsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4YzAsIDB4MWEsCi0weDA5LCAweDE4LCAweDE4LCAweDFjLCAweGI5LCAweDQyLCAweGY0LCAweGQ5LCAweDkwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMCwgMHgxNCwgMHg0MCwgMHhhOCwgMHg2MSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MDAsIDB4MjQsIDB4MDAsIDB4MmYsIDB4MDQsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmYsIDB4MDEsIDB4MzQsCi0weGJjLCAweDQyLCAweGZhLCAweGQ5LCAweDkwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggM2FmOWE5NS4uOWRkNGY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMTAwLDEwICsxMDAsMTEgQEAKICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInR5cGhvb24iCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAJIjEuNS44IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjA2LzExLzA5IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gCSIxLjUuOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXIgMiwgMjAwOSIKICNkZWZpbmUgUEZYCQkJRFJWX01PRFVMRV9OQU1FICI6ICIKICNkZWZpbmUgRVJSX1BGWAkJCUtFUk5fRVJSIFBGWAorI2RlZmluZSBGSVJNV0FSRV9OQU1FCQkiM2NvbS90eXBob29uLmJpbiIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTI5LDkgKzEzMCw5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJ0eXBob29uLmgiCi0jaW5jbHVkZSAidHlwaG9vbi1maXJtd2FyZS5oIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAgICAgInR5cGhvb24uYzogdmVyc2lvbiAiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKQEAgLTEzOSw2ICsxNDAsNyBAQAogTU9EVUxFX0FVVEhPUigiRGF2aWQgRGlsbG93IDxkYXZlQHRoZWRpbGxvd3Mub3JnPiIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9OQU1FKTsKIE1PRFVMRV9ERVNDUklQVElPTigiM0NvbSBUeXBob29uIEZhbWlseSAoM0M5OTAsIDNDUjk5MCwgYW5kIHZhcmlhbnRzKSIpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9jb3B5YnJlYWssICJQYWNrZXRzIHNtYWxsZXIgdGhhbiB0aGlzIGFyZSBjb3BpZWQgYW5kICIKIAkJCSAgICAgICAidGhlIGJ1ZmZlciBnaXZlbiBiYWNrIHRvIHRoZSBOSUMuIERlZmF1bHQgIgpAQCAtMTM0NCwxNCArMTM0Niw3NCBAQAogCXRwLT50eEhpUmluZy5sYXN0UmVhZCA9IDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnR5cGhvb25fZnc7CisKK3N0YXRpYyBpbnQKK3R5cGhvb25fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgdHlwaG9vbiAqdHApCit7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7CisJY29uc3QgdTggKmltYWdlX2RhdGE7CisJdTMyIG51bVNlY3Rpb25zOworCXUzMiBzZWN0aW9uX2xlbjsKKwl1MzIgcmVtYWluaW5nOworCWludCBlcnI7CisKKwlpZiAodHlwaG9vbl9mdykKKwkJcmV0dXJuIDA7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZ0eXBob29uX2Z3LCBGSVJNV0FSRV9OQU1FLCAmdHAtPnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQkJdHAtPm5hbWUsIEZJUk1XQVJFX05BTUUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWltYWdlX2RhdGEgPSAodTggKikgdHlwaG9vbl9mdy0+ZGF0YTsKKwlyZW1haW5pbmcgPSB0eXBob29uX2Z3LT5zaXplOworCWlmIChyZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIpKQorCQlnb3RvIGludmFsaWRfZnc7CisKKwlmSGRyID0gKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICopIGltYWdlX2RhdGE7CisJaWYgKG1lbWNtcChmSGRyLT50YWcsICJUWVBIT09OIiwgOCkpCisJCWdvdG8gaW52YWxpZF9mdzsKKworCW51bVNlY3Rpb25zID0gbGUzMl90b19jcHUoZkhkci0+bnVtU2VjdGlvbnMpOworCWltYWdlX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyKTsKKwlyZW1haW5pbmcgLT0gc2l6ZW9mKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyKTsKKworCXdoaWxlIChudW1TZWN0aW9ucy0tKSB7CisJCWlmIChyZW1haW5pbmcgPCBzaXplb2Yoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIpKQorCQkJZ290byBpbnZhbGlkX2Z3OworCisJCXNIZHIgPSAoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKKwkJaW1hZ2VfZGF0YSArPSBzaXplb2Yoc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIpOworCQlzZWN0aW9uX2xlbiA9IGxlMzJfdG9fY3B1KHNIZHItPmxlbik7CisKKwkJaWYgKHJlbWFpbmluZyA8IHNlY3Rpb25fbGVuKQorCQkJZ290byBpbnZhbGlkX2Z3OworCisJCWltYWdlX2RhdGEgKz0gc2VjdGlvbl9sZW47CisJCXJlbWFpbmluZyAtPSBzZWN0aW9uX2xlbjsKKwl9CisKKwlyZXR1cm4gMDsKKworaW52YWxpZF9mdzoKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGZpcm13YXJlIGltYWdlXG4iLCB0cC0+bmFtZSk7CisJcmVsZWFzZV9maXJtd2FyZSh0eXBob29uX2Z3KTsKKwl0eXBob29uX2Z3ID0gTlVMTDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIGludAogdHlwaG9vbl9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdHlwaG9vbiAqdHApCiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+aW9hZGRyOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7Ci0Jc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7Ci0Jc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7Ci0JdTggKmltYWdlX2RhdGE7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKmZIZHI7CisJY29uc3Qgc3RydWN0IHR5cGhvb25fc2VjdGlvbl9oZWFkZXIgKnNIZHI7CisJY29uc3QgdTggKmltYWdlX2RhdGE7CiAJdm9pZCAqZHBhZ2U7CiAJZG1hX2FkZHJfdCBkcGFnZV9kbWE7CiAJX19zdW0xNiBjc3VtOwpAQCAtMTM2NSwyMCArMTQyNywxMiBAQAogCWludCBpOwogCWludCBlcnI7CiAKLQllcnIgPSAtRUlOVkFMOwotCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgdHlwaG9vbl9maXJtd2FyZV9pbWFnZTsKLQlpbWFnZV9kYXRhID0gKHU4ICopIGZIZHI7Ci0KLQlpZihtZW1jbXAoZkhkci0+dGFnLCAiVFlQSE9PTiIsIDgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2UhXG4iLCB0cC0+bmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9CisJaW1hZ2VfZGF0YSA9ICh1OCAqKSB0eXBob29uX2Z3LT5kYXRhOworCWZIZHIgPSAoc3RydWN0IHR5cGhvb25fZmlsZV9oZWFkZXIgKikgaW1hZ2VfZGF0YTsKIAogCS8qIENhbm5vdCBqdXN0IG1hcCB0aGUgZmlybXdhcmUgaW1hZ2UgdXNpbmcgcGNpX21hcF9zaW5nbGUoKSBhcwotCSAqIHRoZSBmaXJtd2FyZSBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwvbW9kdWxlIGltYWdlLCBzbyB3ZSBhbGxvY2F0ZQotCSAqIHNvbWUgY29uc2lzdGVudCBtZW1vcnkgdG8gY29weSB0aGUgc2VjdGlvbnMgaW50bywgYXMgaXQgaXMgc2ltcGxlciwKLQkgKiBhbmQgc2hvcnQtbGl2ZWQuIElmIHdlIGV2ZXIgc3BsaXQgb3V0IGFuZCByZXF1aXJlIGEgdXNlcmxhbmQKLQkgKiBmaXJtd2FyZSBsb2FkZXIsIHRoZW4gd2UgY2FuIHJldmlzaXQgdGhpcy4KKwkgKiB0aGUgZmlybXdhcmUgaXMgdm1hbGxvYygpJ2QgYW5kIG1heSBub3QgYmUgcGh5c2ljYWxseSBjb250aWd1b3VzLAorCSAqIHNvIHdlIGFsbG9jYXRlIHNvbWUgY29uc2lzdGVudCBtZW1vcnkgdG8gY29weSB0aGUgc2VjdGlvbnMgaW50by4KIAkgKi8KIAllcnIgPSAtRU5PTUVNOwogCWRwYWdlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgUEFHRV9TSVpFLCAmZHBhZ2VfZG1hKTsKQEAgLTE3ODMsNyArMTgzNyw3IEBACiAJfQogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaW93cml0ZTMyKFRZUEhPT05fSU5UUl9OT05FLAogCQkJCXRwLT5pb2FkZHIgKyBUWVBIT09OX1JFR19JTlRSX01BU0spOwogCQl0eXBob29uX3Bvc3RfcGNpX3dyaXRlcyh0cC0+aW9hZGRyKTsKQEAgLTE4MDYsMTAgKzE4NjAsMTAgQEAKIAogCWlvd3JpdGUzMihpbnRyX3N0YXR1cywgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9TVEFUVVMpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgewogCQlpb3dyaXRlMzIoVFlQSE9PTl9JTlRSX0FMTCwgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9NQVNLKTsKIAkJdHlwaG9vbl9wb3N0X3BjaV93cml0ZXMoaW9hZGRyKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKQEAgLTE5NDQsNyArMTk5OCw3IEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJSU5JVF9DT01NQU5EX05PX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURSk7Ci0JeHBfY21kLnBhcm0xID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfUF84MDIxUSk7CisJeHBfY21kLnBhcm0xID0gY3B1X3RvX2xlMTYoRVRIX1BfODAyMVEpOwogCWVyciA9IHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCk7CiAJaWYoZXJyIDwgMCkKIAkJZ290byBlcnJvcl9vdXQ7CkBAIC0yMDg2LDYgKzIxNDAsMTAgQEAKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlcnI7CiAKKwllcnIgPSB0eXBob29uX3JlcXVlc3RfZmlybXdhcmUodHApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJZXJyID0gdHlwaG9vbl93YWtldXAodHAsIFdhaXRTbGVlcCk7CiAJaWYoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gd2FrZXVwIGRldmljZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTI2MjQsNiArMjY4Miw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIHR5cGhvb25fY2xlYW51cCh2b2lkKQogeworCWlmICh0eXBob29uX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHR5cGhvb25fZncpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdHlwaG9vbl9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmggYi9kcml2ZXJzL25ldC90eXBob29uLmgKaW5kZXggZGQ3MDIyYy4uNjczZmQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uaApAQCAtMTc0LDE4ICsxNzQsMTggQEAKIAkJdTY0IHR4X2FkZHI7CS8qIG9wYXF1ZSBmb3IgaGFyZHdhcmUsIGZvciBUWF9ERVNDICovCiAJfTsKIAlfX2xlMzIgcHJvY2Vzc0ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RYX1BGX05PX0NSQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9TRUdNRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMTApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfSVBTRUMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1BSSU9SSVRZCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9QQURfRlJBTUUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9SRVNFUlZFRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwZTAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDBmZmZmMDAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZjAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfTk9fQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTgljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDIwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fUFJJT1JJVFkJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwODApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfUEFEX0ZSQU1FCQljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1JFU0VSVkVECQljcHVfdG9fbGUzMigweDAwMDAwZTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJY3B1X3RvX2xlMzIoMHgwZmZmZjAwMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlRFUk5BTAkJY3B1X3RvX2xlMzIoMHhmMDAwMDAwMCkKICNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1RBR19TSElGVAkxMgogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTIwMyw4ICsyMDMsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgbXNzX2ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDEwMDApCi0jZGVmaW5lIFRZUEhPT05fVFNPX0xBU1QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgyMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJY3B1X3RvX2xlMTYoMHgxMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19MQVNUCQljcHVfdG9fbGUxNigweDIwMDApCiAJX19sZTMyIHJlc3BBZGRyTG87CiAJX19sZTMyIGJ5dGVzVHg7CiAJX19sZTMyIHN0YXR1czsKQEAgLTIyMiw4ICsyMjIsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgaXBzZWNGbGFnczsKLSNkZWZpbmUgVFlQSE9PTl9JUFNFQ19HRU5fSVYJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0lQU0VDX0dFTl9JVgljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCWNwdV90b19sZTE2KDB4MDAwMSkKIAlfX2xlMzIgc2ExOwogCV9fbGUzMiBzYTI7CiAJX19sZTMyIHJlc2VydmVkOwpAQCAtMjQ4LDQxICsyNDgsNDEgQEAKIAl1MzIgYWRkcjsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRyICovCiAJdTMyIGFkZHJIaTsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRySGkgKi8KIAlfX2xlMzIgcnhTdGF0dXM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9CQURfU1NECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX1JVTlQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX09WRVJTSVpFCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0FMSUdOCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDYpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fVU5LTk9XTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19JUFgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9WTEFOCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwODApCi0jZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VRFBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfSU5URVJOQUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQkFEX1NTRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfUlVOVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9PVkVSU0laRQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQUxJR04JCWNwdV90b19sZTMyKDB4MDAwMDAwMDYpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19VTktOT1dOCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVBYCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX1JYX1ZMQU4JCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFRZUEhPT05fUlhfSVBTRUMJCWNwdV90b19sZTMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0ZBSUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX1JYX1VEUF9DSEtfRkFJTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JUF9DSEtfR09PRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19HT09ECQljcHVfdG9fbGUzMigweDAwMDAwNDAwKQogCV9fbGUxNiBmaWx0ZXJSZXN1bHRzOwotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4N2ZmZikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX01BU0sJCWNwdV90b19sZTE2KDB4N2ZmZikKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJY3B1X3RvX2xlMTYoMHg4MDAwKQogCV9fbGUxNiBpcHNlY1Jlc3VsdHM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfQUhfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0VTUF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfRVNQX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VTktOT1dOX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FU1BfRk9STUFUX0VSUglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9BSF9HT09ECWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfR09PRAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfRVNQX0dPT0QJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0VTUF9GQUlMCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9GQUlMCWNwdV90b19sZTE2KDB4MDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAljcHVfdG9fbGUxNigweDAwODApCisjZGVmaW5lIFRZUEhPT05fUlhfVU5LTk9XTl9TQQkJY3B1X3RvX2xlMTYoMHgwMTAwKQorI2RlZmluZSBUWVBIT09OX1JYX0VTUF9GT1JNQVRfRVJSCWNwdV90b19sZTE2KDB4MDIwMCkKIAlfX2JlMzIgdmxhblRhZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zMTgsMzEgKzMxOCwzMSBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgY21kOwotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9FTkFCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRU5BQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRElTQUJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfU1RBVFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA3KQotI2RlZmluZSBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTMpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMWEpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDFiKQotI2RlZmluZSBUWVBIT09OX0NNRF9HT1RPX1NMRUVQCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDI1KQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjcpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyYikKLSNkZWZpbmUgVFlQSE9PTl9DTURfQ1JFQVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfREVMRVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MykKLSNkZWZpbmUgVFlQSE9PTl9DTURfSVJRX0NPQUxFU0NFX0NUUkwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0VOQUJMRV9XQUtFX0VWRU5UUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0OSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNGYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0hFTExPX1JFU1AJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDU3KQotI2RlZmluZSBUWVBIT09OX0NNRF9IQUxUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA1ZCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDVlKQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfSVBTRUNfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDY3KQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfQ01EX0xWTAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNjkpCisjZGVmaW5lIFRZUEhPT05fQ01EX1RYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX0NNRF9SWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJY3B1X3RvX2xlMTYoMHgwMDA1KQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX1NUQVRTCQljcHVfdG9fbGUxNigweDAwMDcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1hDVlJfU0VMRUNUCQljcHVfdG9fbGUxNigweDAwMTMpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJY3B1X3RvX2xlMTYoMHgwMDFhKQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX01FRElBX1NUQVRVUwljcHVfdG9fbGUxNigweDAwMWIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dPVE9fU0xFRVAJCWNwdV90b19sZTE2KDB4MDAyMykKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAyNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01BQ19BRERSRVNTCWNwdV90b19sZTE2KDB4MDAyNikKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9NQUNfQUREUkVTUwljcHVfdG9fbGUxNigweDAwMjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQljcHVfdG9fbGUxNigweDAwMmIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0NSRUFURV9TQQkJY3B1X3RvX2xlMTYoMHgwMDM0KQorI2RlZmluZSBUWVBIT09OX0NNRF9ERUxFVEVfU0EJCWNwdV90b19sZTE2KDB4MDAzNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwljcHVfdG9fbGUxNigweDAwNDMpCisjZGVmaW5lIFRZUEhPT05fQ01EX0lSUV9DT0FMRVNDRV9DVFJMCWNwdV90b19sZTE2KDB4MDA0NSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTCWNwdV90b19sZTE2KDB4MDA0OSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJY3B1X3RvX2xlMTYoMHgwMDRmKQorI2RlZmluZSBUWVBIT09OX0NNRF9IRUxMT19SRVNQCQljcHVfdG9fbGUxNigweDAwNTcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0hBTFQJCWNwdV90b19sZTE2KDB4MDA1ZCkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCWNwdV90b19sZTE2KDB4MDA1ZSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfR0VUX0lQU0VDX0VOQUJMRQljcHVfdG9fbGUxNigweDAwNjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dFVF9DTURfTFZMCQljcHVfdG9fbGUxNigweDAwNjkpCiAJdTE2IHNlcU5vOwogCV9fbGUxNiBwYXJtMTsKIAlfX2xlMzIgcGFybTI7CkBAIC0zODAsMTEgKzM4MCwxMSBAQAogCiAvKiBUWVBIT09OX0NNRF9TRVRfUlhfRklMVEVSIGZpbHRlciBiaXRzIChjbWQucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfRElSRUNURUQJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfQlJPQURDQVNUCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9QUk9NSVNDT1VTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9ESVJFQ1RFRAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0JST0FEQ0FTVAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX1BST01JU0NPVVMJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAxMCkKIAogLyogVFlQSE9PTl9DTURfUkVBRF9TVEFUUyByZXNwb25zZSBmb3JtYXQKICAqLwpAQCAtNDE2LDQwICs0MTYsNDAgQEAKIAlfX2xlMzIgcnhPdmVyZmxvdzsKIAlfX2xlMzIgcnhGaWx0ZXJlZDsKIAlfX2xlMzIgbGlua1N0YXR1czsKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfR09PRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfQkFECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xMDBNQlBTCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xME1CUFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0ZVTExfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0hBTEZfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fTElOS19CQUQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX0xJTktfMTAwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9MSU5LXzEwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fTElOS19GVUxMX0RVUExFWAljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX0xJTktfSEFMRl9EVVBMRVgJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKIAlfX2xlMzIgdW51c2VkMjsKIAlfX2xlMzIgdW51c2VkMzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVCB4Y3ZyIHZhbHVlcyAocmVzcC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBGVUxMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTAwSEFMRglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fWENWUl9BVVRPTkVHCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCWNwdV90b19sZTE2KDB4MDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwRlVMTAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fWENWUl8xMDBIQUxGCWNwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX1hDVlJfQVVUT05FRwljcHVfdG9fbGUxNigweDAwMDQpCiAKIC8qIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTIChyZXNwLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DUkNfU1RSSVBfRElTQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NPTExJU0lPTl9ERVRFQ1QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDIwKQotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfUE9MQVJJVFlfUkVWCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDQwMCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX05PX0xJTksJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwODAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ1JDX1NUUklQX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ09MTElTSU9OX0RFVEVDVAljcHVfdG9fbGUxNigweDAwMTApCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX1BPTEFSSVRZX1JFVgkJY3B1X3RvX2xlMTYoMHgwNDAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfTk9fTElOSwkJY3B1X3RvX2xlMTYoMHgwODAwKQogCiAvKiBUWVBIT09OX0NNRF9TRVRfTVVMVElDQVNUX0hBU0ggZW5hYmxlIHZhbHVlcyAoY21kLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9ESVNBQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfU0VUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX1NFVAkJY3B1X3RvX2xlMTYoMHgwMDAyKQogCiAvKiBUWVBIT09OX0NNRF9DUkVBVEVfU0EgZGVzY3JpcHRvciBhbmQgc2V0dGluZ3MKICAqLwpAQCAtNDU5LDkgKzQ1OSw5IEBACiAJdTE2IGNtZDsKIAl1MTYgc2VxTm87CiAJdTE2IG1vZGU7Ci0jZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0FICQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0VTUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9BSAkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX1NBX01PREVfRVNQCQljcHVfdG9fbGUxNigweDAwMDIpCiAJdTggIGhhc2hGbGFnczsKICNkZWZpbmUgVFlQSE9PTl9TQV9IQVNIX0VOQUJMRQkJMHgwMQogI2RlZmluZSBUWVBIT09OX1NBX0hBU0hfU0hBMQkJMHgwMgpAQCAtNDkzLDIyICs0OTMsMjIgQEAKIC8qIFRZUEhPT05fQ01EX1NFVF9PRkZMT0FEX1RBU0tTIGJpdHMgKGNtZC5wYXJtMiAoVHgpICYgY21kLnBhcm0zIChSeCkpCiAgKiBUaGlzIGlzIGFsbCBmb3IgSVB2NC4KICAqLwotI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfREhDUF9QUkVWRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1ZMQU4JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfU0VHTUVOVAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0RIQ1BfUFJFVkVOVAljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVkxBTgkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKIAogLyogVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTIGJpdHMgKGNtZC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9MSU5LX0VWRU5UCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9JQ01QX0VDSE8JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwNCkKLSNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA4KQorI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQljcHVfdG9fbGUxNigweDAxKQorI2RlZmluZSBUWVBIT09OX1dBS0VfTElOS19FVkVOVAkJY3B1X3RvX2xlMTYoMHgwMikKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0lDTVBfRUNITwkJY3B1X3RvX2xlMTYoMHgwNCkKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJY3B1X3RvX2xlMTYoMHgwOCkKIAogLyogVGhlc2UgYXJlIHVzZWQgdG8gbG9hZCB0aGUgZmlybXdhcmUgaW1hZ2Ugb24gdGhlIE5JQwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCAxZjYxZTQyLi5hMTEwMzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vdWNjX2Zhc3QuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAogI3VuZGVmIERFQlVHCiAKQEAgLTMyNDksNyArMzI0OSw3IEBACiAJCWhvd21hbnkgKz0gdWNjX2dldGhfcngodWdldGgsIGksIGJ1ZGdldCAtIGhvd21hbnkpOwogCiAJaWYgKGhvd21hbnkgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXNldGJpdHMzMih1Z2V0aC0+dWNjZi0+cF91Y2NtLCBVQ0NFX1JYX0VWRU5UUyk7CiAJfQogCkBAIC0zMjgwLDEwICszMjgwLDEwIEBACiAKIAkvKiBjaGVjayBmb3IgcmVjZWl2ZSBldmVudHMgdGhhdCByZXF1aXJlIHByb2Nlc3NpbmcgKi8KIAlpZiAodWNjZSAmIFVDQ0VfUlhfRVZFTlRTKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ1Z2V0aC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdWdldGgtPm5hcGkpKSB7CiAJCQl1Y2NtICY9IH5VQ0NFX1JYX0VWRU5UUzsKIAkJCW91dF9iZTMyKHVjY2YtPnBfdWNjbSwgdWNjbSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ1Z2V0aC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnVnZXRoLT5uYXBpKTsKIAkJfQogCX0KIApAQCAtMzUwMSw2ICszNTAxLDIwIEBACiAJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdWNjX2dldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdWNjX2dldGhfb3BlbiwKKwkubmRvX3N0b3AJCT0gdWNjX2dldGhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHVjY19nZXRoX3N0YXJ0X3htaXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdWNjX2dldGhfc2V0X211bHRpLAorCS5uZG9fdHhfdGltZW91dAkJPSB1Y2NfZ2V0aF90aW1lb3V0LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB1Y2NfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCB1Y2NfZ2V0aF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlKiBvZmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7CkBAIC0zNjQxLDcgKzM2NTUsNyBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC0xOwogCi0JCXVlY19tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKKwkJZnNsX3BxX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOwogCQlzbnByaW50Zih1Z19pbmZvLT5waHlfYnVzX2lkLCBzaXplb2YodWdfaW5mby0+cGh5X2J1c19pZCksCiAJCQkiJXM6JTAyeCIsIGJ1c19uYW1lLCAqcHJvcCk7CiAJfQpAQCAtMzcxNiwxOSArMzczMCwxMSBAQAogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwogCXVlY19zZXRfZXRodG9vbF9vcHMoZGV2KTsKLQlkZXYtPm9wZW4gPSB1Y2NfZ2V0aF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdWNjX2dldGhfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB1Y2NfZ2V0aF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ1Y2NfZ2V0aF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCUlOSVRfV09SSygmdWdldGgtPnRpbWVvdXRfd29yaywgdWNjX2dldGhfdGltZW91dF93b3JrKTsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZ1Z2V0aC0+bmFwaSwgdWNjX2dldGhfcG9sbCwgVUNDX0dFVEhfREVWX1dFSUdIVCk7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHVjY19uZXRwb2xsOwotI2VuZGlmCi0JZGV2LT5zdG9wID0gdWNjX2dldGhfY2xvc2U7Ci0vLyAgICBkZXYtPmNoYW5nZV9tdHUgPSB1Y2NfZ2V0aF9jaGFuZ2VfbXR1OwogCWRldi0+bXR1ID0gMTUwMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHVjY19nZXRoX3NldF9tdWx0aTsKIAogCXVnZXRoLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcubXNnX2VuYWJsZSwgVUdFVEhfTVNHX0RFRkFVTFQpOwogCXVnZXRoLT5waHlfaW50ZXJmYWNlID0gcGh5X2ludGVyZmFjZTsKQEAgLTM3ODksMTEgKzM3OTUsNiBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSB1ZWNfbWRpb19pbml0KCk7Ci0KLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKG5ldGlmX21zZ19kcnYoJmRlYnVnKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAidWNjX2dldGg6ICIgRFJWX0RFU0MgIlxuIik7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKQEAgLTM4MDIsMTYgKzM4MDMsMTIgQEAKIAogCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWNjX2dldGhfZHJpdmVyKTsKIAotCWlmIChyZXQpCi0JCXVlY19tZGlvX2V4aXQoKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1Y2NfZ2V0aF9leGl0KHZvaWQpCiB7CiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVjY19nZXRoX2RyaXZlcik7Ci0JdWVjX21kaW9fZXhpdCgpOwogfQogCiBtb2R1bGVfaW5pdCh1Y2NfZ2V0aF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCmluZGV4IDYxMWJkZWYuLmUzYTI1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaApAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgPGFzbS91Y2MuaD4KICNpbmNsdWRlIDxhc20vdWNjX2Zhc3QuaD4KIAotI2luY2x1ZGUgInVjY19nZXRoX21paS5oIgotCiAjZGVmaW5lIERSVl9ERVNDICJRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIgogI2RlZmluZSBEUlZfTkFNRSAidWNjX2dldGgiCiAjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEiCkBAIC0xODQsNiArMTgyLDE4IEBACiAjZGVmaW5lIFVDQ0VfUlhfRVZFTlRTICAoVUNDRV9SWEYgfCBVQ0NfR0VUSF9VQ0NFX0JTWSkKICNkZWZpbmUgVUNDRV9UWF9FVkVOVFMJKFVDQ0VfVFhCIHwgVUNDX0dFVEhfVUNDRV9UWEUpCiAKKy8qIFRCSSBkZWZpbmVzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9DUgkJMHgwMAkvKiBDb250cm9sICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9TUgkJMHgwMQkvKiBTdGF0dXMgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOQQkweDA0CS8qIEFOIGFkdmVydGlzZW1lbnQgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOTFBCUEEJMHgwNQkvKiBBTiBsaW5rIHBhcnRuZXIgYmFzZSBwYWdlIGFiaWxpdHkgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FORVgJMHgwNgkvKiBBTiBleHBhbnNpb24gKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOTlBUCTB4MDcJLyogQU4gbmV4dCBwYWdlIHRyYW5zbWl0ICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkxQQU5QCTB4MDgJLyogQU4gbGluayBwYXJ0bmVyIGFiaWxpdHkgbmV4dCBwYWdlICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9FWFNUCTB4MEYJLyogRXh0ZW5kZWQgc3RhdHVzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9KRAkJMHgxMAkvKiBKaXR0ZXIgZGlhZ25vc3RpY3MgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX1RCSUNPTgkweDExCS8qIFRCSSBjb250cm9sICovCisKIC8qIFVDQyBHRVRIIE1BQ0NGRzEgKE1BQyBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIpICovCiAjZGVmaW5lIE1BQ0NGRzFfRkxPV19SWCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCS8qIEZsb3cgQ29udHJvbAogCQkJCQkJCQkgICBSeCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCmluZGV4IDY4YTdmNTQuLmE3NTViZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCiAKIHN0YXRpYyBjaGFyIGh3X3N0YXRfZ3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0gewogCSJ0eC02NC1mcmFtZXMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkYTRlZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMKLSAqCi0gKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgotICoJICAgIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdWNjLmg+Ci0KLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKLSNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgotCi0jZGVmaW5lIERFQlVHCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgdmRiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgLCBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHZkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlKDApCi0jZW5kaWYKLQotI2RlZmluZSBNSUlfRFJWX0RFU0MgIlFFIFVDQyBFdGhlcm5ldCBDb250cm9sbGVyIE1JSSBCdXMiCi0jZGVmaW5lIE1JSV9EUlZfTkFNRSAiZnNsLXVlY19tZGlvIgotCi0vKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGZvciB0aGlzIGRldmljZSB0byB0aGUgcmVnaXN0ZXIgYXQgcmVnbnVtLCAqLwotLyogd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgaXQgcmV0dXJucy4gIEFsbCBQSFkgKi8KLS8qIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgbWFzdGVyIFVFQyBNSUlNIHJlZ3MgKi8KLWludCB1ZWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCi17Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1hZGQsCi0JCSAobWlpX2lkIDw8IE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQpIHwgcmVnbnVtKTsKLQotCS8qIFNldHRpbmcgdXAgdGhlIE1JSSBNYW5nZW1lbnQgQ29udHJvbCBSZWdpc3RlciB3aXRoIHRoZSB2YWx1ZSAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7Ci0KLQkvKiBXYWl0IHRpbGwgTUlJIG1hbmFnZW1lbnQgd3JpdGUgaXMgY29tcGxldGUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpKSAmIE1JSU1JTkRfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogUmVhZHMgZnJvbSByZWdpc3RlciByZWdudW0gaW4gdGhlIFBIWSBmb3IgZGV2aWNlIGRldiwgKi8KLS8qIHJldHVybmluZyB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkgKi8KLS8qIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgVFNFQzEgTUlJTSByZWdzICovCi1pbnQgdWVjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQotewotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQl1MTYgdmFsdWU7Ci0KLQkvKiBTZXR0aW5nIHVwIHRoZSBNSUkgTWFuZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwKLQkJIChtaWlfaWQgPDwgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCkgfCByZWdudW0pOwotCi0JLyogQ2xlYXIgbWlpbWNvbSwgcGVyZm9ybSBhbiBNSUkgbWFuYWdlbWVudCByZWFkIGN5Y2xlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIDApOwotCW91dF9iZTMyKCZyZWdzLT5taWltY29tLCBNSUlNQ09NX1JFQURfQ1lDTEUpOwotCi0JLyogV2FpdCB0aWxsIE1JSSBtYW5hZ2VtZW50IHdyaXRlIGlzIGNvbXBsZXRlICovCi0Jd2hpbGUgKChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSkgJiAoTUlJTUlORF9CVVNZIHwgTUlJTUlORF9OT1RfVkFMSUQpKQotCQljcHVfcmVsYXgoKTsKLQotCS8qIFJlYWQgTUlJIG1hbmFnZW1lbnQgc3RhdHVzICAqLwotCXZhbHVlID0gaW5fYmUzMigmcmVncy0+bWlpbXN0YXQpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKiBSZXNldCB0aGUgTUlJTSByZWdpc3RlcnMsIGFuZCB3YWl0IGZvciB0aGUgYnVzIHRvIGZyZWUgKi8KLXN0YXRpYyBpbnQgdWVjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgdWNjX21paV9tbmcgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0JaW50IHRpbWVvdXQgPSBQSFlfSU5JVF9USU1FT1VUOwotCi0JbXV0ZXhfbG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JLyogUmVzZXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfUkVTRVRfTUFOQUdFTUVOVCk7Ci0KLQkvKiBTZXR1cCB0aGUgTUlJIE1nbXQgY2xvY2sgc3BlZWQgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNmZywgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMTIpOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pCi0JCWNwdV9yZWxheCgpOwotCi0JbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQlpZiAodGltZW91dCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLCBidXMtPm5hbWUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHVlY19tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGUsICp0ZW1wbnAgPSBOVUxMOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMOwotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzOwotCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwotCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0JaW50IGssIGVyciA9IDA7Ci0KLQluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwotCWlmIChOVUxMID09IG5ld19idXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbmV3X2J1cy0+bmFtZSA9ICJVQ0MgRXRoZXJuZXQgQ29udHJvbGxlciBNSUkgQnVzIjsKLQluZXdfYnVzLT5yZWFkID0gJnVlY19tZGlvX3JlYWQ7Ci0JbmV3X2J1cy0+d3JpdGUgPSAmdWVjX21kaW9fd3JpdGU7Ci0JbmV3X2J1cy0+cmVzZXQgPSAmdWVjX21kaW9fcmVzZXQ7Ci0KLQltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOwotCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7Ci0JaWYgKGVycikKLQkJZ290byByZWdfbWFwX2ZhaWw7Ci0KLQl1ZWNfbWRpb19idXNfbmFtZShuZXdfYnVzLT5pZCwgbnApOwotCi0JbmV3X2J1cy0+aXJxID0ga21hbGxvYygzMiAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChOVUxMID09IG5ld19idXMtPmlycSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIHJlZ19tYXBfZmFpbDsKLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykKLQkJbmV3X2J1cy0+aXJxW2tdID0gUEhZX1BPTEw7Ci0KLQl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgewotCQlpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2hpbGQsIDApOwotCQlpZiAoaXJxICE9IE5PX0lSUSkgewotCQkJY29uc3QgdTMyICppZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOwotCQkJbmV3X2J1cy0+aXJxWyppZF0gPSBpcnE7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdGhlIGJhc2UgYWRkcmVzcyAqLwotCXJlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgc2l6ZW9mKHN0cnVjdCB1Y2NfbWlpX21uZykpOwotCi0JaWYgKE5VTEwgPT0gcmVncykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGlvcmVtYXBfZmFpbDsKLQl9Ci0KLQluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7Ci0KLQluZXdfYnVzLT5wYXJlbnQgPSBkZXZpY2U7Ci0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgbmV3X2J1cyk7Ci0KLQkvKiBSZWFkIE1JSSBtYW5hZ2VtZW50IG1hc3RlciBmcm9tIGRldmljZSB0cmVlICovCi0Jd2hpbGUgKCh0ZW1wbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZSh0ZW1wbnAsICJuZXR3b3JrIiwgInVjY19nZXRoIikpCi0JICAgICAgICE9IE5VTEwpIHsKLQkJc3RydWN0IHJlc291cmNlIHRlbXByZXM7Ci0KLQkJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZSh0ZW1wbnAsIDAsICZ0ZW1wcmVzKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0KLQkJLyogaWYgb3VyIG1kaW8gcmVncyBmYWxsIHdpdGhpbiB0aGlzIFVDQyByZWdzIHJhbmdlICovCi0JCWlmICgocmVzLnN0YXJ0ID49IHRlbXByZXMuc3RhcnQpICYmCi0JCSAgICAocmVzLmVuZCA8PSB0ZW1wcmVzLmVuZCkpIHsKLQkJCS8qIHNldCB0aGlzIFVDQyB0byBiZSB0aGUgTUlJIG1hc3RlciAqLwotCQkJY29uc3QgdTMyICppZDsKLQotCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkodGVtcG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOwotCQkJaWYgKCFpZCkgewotCQkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHRlbXBucCwgImRldmljZS1pZCIsIE5VTEwpOwotCQkJCWlmICghaWQpCi0JCQkJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0JCQl9Ci0KLQkJCXVjY19zZXRfcWVfbXV4X21paV9tbmcoKmlkIC0gMSk7Ci0KLQkJCS8qIGFzc2lnbiB0aGUgVEJJIGFuIGFkZHJlc3Mgd2hpY2ggd29uJ3QKLQkJCSAqIGNvbmZsaWN0IHdpdGggdGhlIFBIWXMgKi8KLQkJCW91dF9iZTMyKCZyZWdzLT51dGJpcGFyLCBVVEJJUEFSX0lOSVRfVEJJUEEpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwotCWlmICgwICE9IGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCi0JCSAgICAgICBuZXdfYnVzLT5uYW1lKTsKLQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotYnVzX3JlZ2lzdGVyX2ZhaWw6Ci0JaW91bm1hcChyZWdzKTsKLWlvcmVtYXBfZmFpbDoKLQlrZnJlZShuZXdfYnVzLT5pcnEpOwotcmVnX21hcF9mYWlsOgotCW1kaW9idXNfZnJlZShuZXdfYnVzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdWVjX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQotewotCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwotCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKLQotCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwotCi0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7Ci0KLQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilidXMtPnByaXYpOwotCWJ1cy0+cHJpdiA9IE5VTEw7Ci0JbWRpb2J1c19mcmVlKGJ1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdWVjX21kaW9fbWF0Y2hbXSA9IHsKLQl7Ci0JCS50eXBlID0gIm1kaW8iLAotCQkuY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aF9waHkiLAotCX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iLAotCX0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciB1ZWNfbWRpb19kcml2ZXIgPSB7Ci0JLm5hbWUJPSBNSUlfRFJWX05BTUUsCi0JLnByb2JlCT0gdWVjX21kaW9fcHJvYmUsCi0JLnJlbW92ZQk9IHVlY19tZGlvX3JlbW92ZSwKLQkubWF0Y2hfdGFibGUJPSB1ZWNfbWRpb19tYXRjaCwKLX07Ci0KLWludCBfX2luaXQgdWVjX21kaW9faW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVlY19tZGlvX2RyaXZlcik7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIF9faW5pdCB1Y2NfZ2V0aF9pbml0LCB0aGVyZWZvcmUgY2FuIG5vdCBiZSBfX2V4aXQgKi8KLXZvaWQgdWVjX21kaW9fZXhpdCh2b2lkKQotewotCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZWNfbWRpb19kcml2ZXIpOwotfQotCi12b2lkIHVlY19tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0gICAgICAgIGNvbnN0IHUzMiAqcmVnOwotCi0gICAgICAgIHJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCi0gICAgICAgIHNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCV4IiwgbnAtPm5hbWUsIHJlZyA/ICpyZWcgOiAwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwY2Y4MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmgKLSAqCi0gKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgotICoJICAgIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19VRUNfTUlJX0gKLSNkZWZpbmUgX19VRUNfTUlJX0gKLQotLyogVUNDIEdFVEggTUlJTUNGRyAoTUlJIE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNGR19SRVNFVF9NQU5BR0VNRU5UICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogUmVzZXQKLQkJCQkJCQkJICAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBNSUlNQ0ZHX05PX1BSRUFNQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBQcmVhbWJsZQotCQkJCQkJCQkgICBzdXBwcmVzcyAqLwotI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9TSElGVCAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIGNsb2NrIGRpdmlkZQotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9NQVggICAgICAgICAgICAgICAgMHhmCS8qIG1heCBjbG9jayBkaXZpZGUgKi8KLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV80ICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV82ICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV84ICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMCAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNCAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNiAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yMCAgIDB4MDAwMDAwMDYKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yOCAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8zMiAgIDB4MDAwMDAwMDkKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV80OCAgIDB4MDAwMDAwMGEKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV82NCAgIDB4MDAwMDAwMGIKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV84MCAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMTIgIDB4MDAwMDAwMGQKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNjAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yMjQgIDB4MDAwMDAwMGYKLQotLyogVUNDIEdFVEggTUlJTUNPTSAoTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNPTV9TQ0FOX0NZQ0xFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogU2NhbiBjeWNsZSAqLwotI2RlZmluZSBNSUlNQ09NX1JFQURfQ1lDTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBSZWFkIGN5Y2xlICovCi0KLS8qIFVDQyBHRVRIIE1JSU1BREQgKE1JSSBNYW5hZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQgICAgICAgICAgICAgICAoMzEgLSAyMykJLyogUEhZIEFkZHJlc3MKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLSNkZWZpbmUgTUlJTUFERF9QSFlfUkVHSVNURVJfU0hJRlQgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgUmVnaXN0ZXIKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLQotLyogVUNDIEdFVEggTUlJTUNPTiAoTUlJIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNPTl9QSFlfQ09OVFJPTF9TSElGVCAgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgQ29udHJvbAotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQ09OX1BIWV9TVEFUVVNfU0hJRlQgICAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFBIWSBTdGF0dXMKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLQotLyogVUNDIEdFVEggTUlJTUlORCAoTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9yIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNSU5EX05PVF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBOb3QgdmFsaWQgKi8KLSNkZWZpbmUgTUlJTUlORF9TQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogU2NhbiBpbgotCQkJCQkJCQkgICBwcm9ncmVzcyAqLwotI2RlZmluZSBNSUlNSU5EX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotCi0vKiBJbml0aWFsIFRCSSBQaHlzaWNhbCBBZGRyZXNzICovCi0jZGVmaW5lIFVUQklQQVJfSU5JVF9UQklQQQkJCTB4MWYKLQotc3RydWN0IHVjY19taWlfbW5nIHsKLQl1MzIgbWlpbWNmZzsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gcmVnICovCi0JdTMyIG1paW1jb207CQkvKiBNSUkgbWFuYWdlbWVudCBjb21tYW5kIHJlZyAqLwotCXUzMiBtaWltYWRkOwkJLyogTUlJIG1hbmFnZW1lbnQgYWRkcmVzcyByZWcgKi8KLQl1MzIgbWlpbWNvbjsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnICovCi0JdTMyIG1paW1zdGF0OwkJLyogTUlJIG1hbmFnZW1lbnQgc3RhdHVzIHJlZyAqLwotCXUzMiBtaWltaW5kOwkJLyogTUlJIG1hbmFnZW1lbnQgaW5kaWNhdGlvbiByZWcgKi8KLQl1OCBub3RjYXJlWzI4XTsJCS8qIFNwYWNlIGhvbGRlciAqLwotCXUzMiB1dGJpcGFyOwkJLyogVEJJIHBoeSBhZGRyZXNzIHJlZyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFRCSSAvIE1JSSBTZXQgUmVnaXN0ZXIgKi8KLWVudW0gZW5ldF90YmlfbWlpX3JlZyB7Ci0JRU5FVF9UQklfTUlJX0NSID0gMHgwMCwJLyogQ29udHJvbCAqLwotCUVORVRfVEJJX01JSV9TUiA9IDB4MDEsCS8qIFN0YXR1cyAqLwotCUVORVRfVEJJX01JSV9BTkEgPSAweDA0LAkvKiBBTiBhZHZlcnRpc2VtZW50ICovCi0JRU5FVF9UQklfTUlJX0FOTFBCUEEgPSAweDA1LAkvKiBBTiBsaW5rIHBhcnRuZXIgYmFzZSBwYWdlIGFiaWxpdHkgKi8KLQlFTkVUX1RCSV9NSUlfQU5FWCA9IDB4MDYsCS8qIEFOIGV4cGFuc2lvbiAqLwotCUVORVRfVEJJX01JSV9BTk5QVCA9IDB4MDcsCS8qIEFOIG5leHQgcGFnZSB0cmFuc21pdCAqLwotCUVORVRfVEJJX01JSV9BTkxQQU5QID0gMHgwOCwJLyogQU4gbGluayBwYXJ0bmVyIGFiaWxpdHkgbmV4dCBwYWdlICovCi0JRU5FVF9UQklfTUlJX0VYU1QgPSAweDBGLAkvKiBFeHRlbmRlZCBzdGF0dXMgKi8KLQlFTkVUX1RCSV9NSUlfSkQgPSAweDEwLAkvKiBKaXR0ZXIgZGlhZ25vc3RpY3MgKi8KLQlFTkVUX1RCSV9NSUlfVEJJQ09OID0gMHgxMQkvKiBUQkkgY29udHJvbCAqLwotfTsKLQotaW50IHVlY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7Ci1pbnQgdWVjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBfX2luaXQgdWVjX21kaW9faW5pdCh2b2lkKTsKLXZvaWQgdWVjX21kaW9fZXhpdCh2b2lkKTsKLXZvaWQgdWVjX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCk7Ci0jZW5kaWYJCQkJLyogX19VRUNfTUlJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IDM5NmY4MjEuLjg3YjRhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtODA3LDYgKzgwNywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTcyX3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODgxNzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQgPSAwOwpAQCAtODQ2LDkgKzg1OCw4IEBACiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweDNmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxNzJfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZheDg4MTcyX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODgxNzJfZXRodG9vbF9vcHM7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwpAQCAtODk4LDYgKzkwOSwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODg3NzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQsIGVtYmRfcGh5OwpAQCAtOTYyLDcgKzk4NSw2IEBACiAJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CkBAIC05NzgsNyArMTAwMCw3IEBACiAKIAltc2xlZXAoMTUwKTsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmYXg4ODc3Ml9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCiAJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKQEAgLTExODEsNiArMTIwMywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0LAorCS5uZG9fZG9faW9jdGwgCQk9IGFzaXhfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGF4ODgxNzhfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyBpbnQgYXg4ODE3OF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKQEAgLTEyNDcsMTEgKzEyODEsMTAgQEAKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHhmZjsKIAlkZXYtPm1paS5zdXBwb3J0c19nbWlpID0gMTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsKKworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmF4ODgxNzhfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3OF9ldGh0b29sX29wczsKLQlkZXYtPm5ldC0+Y2hhbmdlX210dSA9ICZheDg4MTc4X2NoYW5nZV9tdHU7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CiAJZGJnKCJQSFlJRD0weCUwOHgiLCBwaHlpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCBjYjdhY2JiLi5iOWRkNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTE2Myw3ICsxNjMsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl1bnNpZ25lZCBpbnQgdHhfcHRyLCB0eF9pZHg7CkBAIC0yNDUsOCArMjQ0LDggQEAKIAkJaWYoIWNhdGMtPmlzX2Y1dTAxMSkgewogCQkJcGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2Kilwa3Rfc3RhcnQpOwogCQkJaWYgKHBrdF9sZW4gPiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCQljYXRjLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI2Miw4ICsyNjEsOCBAQAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBjYXRjLT5uZXRkZXYpOwogCQluZXRpZl9yeChza2IpOwogCi0JCWNhdGMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJY2F0Yy0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCQkvKiBGNVUwMTEgb25seSBkb2VzIG9uZSBwYWNrZXQgcGVyIFJYICovCiAJCWlmIChjYXRjLT5pc19mNXUwMTEpCkBAIC0zODYsNyArMzg1LDcgQEAKIAkJZGJnKCJUeCBSZXNldC4iKTsKIAkJdXJiLT5zdGF0dXMgPSAwOwogCQljYXRjLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzKys7CisJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWNsZWFyX2JpdChUWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOwogCQluZXRpZl93YWtlX3F1ZXVlKGNhdGMtPm5ldGRldik7CiAJCXJldHVybjsKQEAgLTQxMiw3ICs0MTEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBjYXRjX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGludCBjYXRjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ0Myw4ICs0NDIsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyID49IDApIHsKLQkJY2F0Yy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWNhdGMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJfQogCiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtNTg4LDE1ICs1ODcsMTUgQEAKIAlzd2l0Y2ggKGluZGV4KSB7CiAJCWNhc2UgVHhTaW5nbGVDb2xsOgogCQljYXNlIFR4TXVsdGlDb2xsOgotCQkJY2F0Yy0+c3RhdHMuY29sbGlzaW9ucyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBkYXRhIC0gbGFzdDsKIAkJCWJyZWFrOwogCQljYXNlIFR4RXhjZXNzQ29sbDoKLQkJCWNhdGMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwotCQkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJCWNhc2UgUnhGcmFtRXJyOgotCQkJY2F0Yy0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwotCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKIAkJCWJyZWFrOwogCX0KIApAQCAtNjE0LDEyICs2MTMsNiBAQAogCW1vZF90aW1lcigmY2F0Yy0+dGltZXIsIGppZmZpZXMgKyBTVEFUU19VUERBVEUpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNhdGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiAmY2F0Yy0+c3RhdHM7Ci19Ci0KIC8qCiAgKiBSZWNlaXZlIG1vZGVzLiBCcm9hZGNhc3QsIE11bHRpY2FzdCwgUHJvbWlzYy4KICAqLwpAQCAtNzUwLDYgKzc0MywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNhdGNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY2F0Y19vcGVuLAorCS5uZG9fc3RvcAkJPSBjYXRjX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGNhdGNfc3RhcnRfeG1pdCwKKworCS5uZG9fdHhfdGltZW91dAkJPSBjYXRjX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBjYXRjX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIFVTQiBwcm9iZSwgZGlzY29ubmVjdC4KICAqLwpAQCAtNzc0LDEzICs3NzksOCBAQAogCiAJY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQluZXRkZXYtPm9wZW4gPSBjYXRjX29wZW47Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjYXRjX2hhcmRfc3RhcnRfeG1pdDsKLQluZXRkZXYtPnN0b3AgPSBjYXRjX3N0b3A7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBjYXRjX2dldF9zdGF0czsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBjYXRjX3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmNhdGNfbmV0ZGV2X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNhdGNfc2V0X211bHRpY2FzdF9saXN0OwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCiAJY2F0Yy0+dXNiZGV2ID0gdXNiZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDgxNjgyYzYuLjZmYzRmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTQxOSw2ICs0MTksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbTk2MDFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IGRtOTYwMV9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZG05NjAxX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgZG05NjAxX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0OwpAQCAtNDI4LDkgKzQ0MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBkbTk2MDFfaW9jdGw7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+bmV0LT5zZXRfbWFjX2FkZHJlc3MgPSBkbTk2MDFfc2V0X21hY19hZGRyZXNzOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmRtOTYwMV9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZkbTk2MDFfZXRodG9vbF9vcHM7CiAJZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBETV9UWF9PVkVSSEVBRDsKIAlkZXYtPmhhcmRfbXR1ID0gZGV2LT5uZXQtPm10dSArIGRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggZmU5OGFjYS4uY2RlNDIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtOTM2LDggKzkzNiw3IEBACiAJCQlpZiAoIW9kZXYtPnJ4X2J1Zl9taXNzaW5nKSB7CiAJCQkJLyogUGFja2V0IGlzIGNvbXBsZXRlLiBJbmplY3QgaW50byBzdGFjay4gKi8KIAkJCQkvKiBXZSBoYXZlIElQIHBhY2tldCBoZXJlICovCi0JCQkJb2Rldi0+c2tiX3J4X2J1Zi0+cHJvdG9jb2wgPQotCQkJCQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJCQkJb2Rldi0+c2tiX3J4X2J1Zi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9JUCk7CiAJCQkJLyogZG9uJ3QgY2hlY2sgaXQgKi8KIAkJCQlvZGV2LT5za2JfcnhfYnVmLT5pcF9zdW1tZWQgPQogCQkJCQlDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTEyNDcsNyArMTI0Niw3IEBACiAgKiBUaGlzIG5lZWRzIHRvIGJlIGEgdGFza2xldCBvdGhlcndpc2Ugd2Ugd2lsbAogICogZW5kIHVwIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZCBoc29fdW50aHJvdHRsZV90YXNrbGV0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBoc29fdW50aHJvdHRsZV90YXNrbGV0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTI2Niw3ICsxMjY1LDcgQEAKIAl0YXNrbGV0X2hpX3NjaGVkdWxlKCZzZXJpYWwtPnVudGhyb3R0bGVfdGFza2xldCk7CiB9CiAKLXZvaWQgaHNvX3VudGhyb3R0bGVfd29ya2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaHNvX3VudGhyb3R0bGVfd29ya2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhzb19zZXJpYWwsCkBAIC0xNDY1LDkgKzE0NjQsOSBAQAogCiAJcmV0dXJuIGNoYXJzOwogfQotaW50IHRpb2NtZ2V0X3N1Ym1pdF91cmIoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwKLQkJCXN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldCwKLQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCitzdGF0aWMgaW50IHRpb2NtZ2V0X3N1Ym1pdF91cmIoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwKKwkJCSAgICAgICBzdHJ1Y3QgaHNvX3Rpb2NtZ2V0ICp0aW9jbWdldCwKKwkJCSAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQogewogCWludCByZXN1bHQ7CiAKQEAgLTIzNjQsMTIgKzIzNjMsNiBAQAogCXJldHVybiAtMTsKIH0KIAotLyogRnJlZXMgYSBnZW5lcmFsIGhzbyBkZXZpY2UgKi8KLXN0YXRpYyB2b2lkIGhzb19mcmVlX2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKLXsKLQlrZnJlZShoc29fZGV2KTsKLX0KLQogLyogQ3JlYXRlcyBhIGdlbmVyYWwgaHNvIGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBoc29fZGV2aWNlICpoc29fY3JlYXRlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCQkJICAgIGludCBwb3J0X3NwZWMpCkBAIC0yNDMyLDkgKzI0MjUsMTYgQEAKIAkJZnJlZV9uZXRkZXYoaHNvX25ldC0+bmV0KTsKIAl9CiAKLQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJa2ZyZWUoaHNvX2Rldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHNvX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gaHNvX25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGhzb19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gaHNvX25ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCA9IGhzb19uZXRfdHhfdGltZW91dCwKK307CisKIC8qIGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlICovCiBzdGF0aWMgdm9pZCBoc29fbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKQEAgLTI0NDMsMTAgKzI0NDMsNyBAQAogCUQxKCJzaXplb2YgaHNvX25ldCBpcyAlZCIsIChpbnQpc2l6ZW9mKCpoc29fbmV0KSk7CiAKIAkvKiBmaWxsIGluIHRoZSBvdGhlciBmaWVsZHMgKi8KLQluZXQtPm9wZW4gPSBoc29fbmV0X29wZW47Ci0JbmV0LT5zdG9wID0gaHNvX25ldF9jbG9zZTsKLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGhzb19uZXRfc3RhcnRfeG1pdDsKLQluZXQtPnR4X3RpbWVvdXQgPSBoc29fbmV0X3R4X3RpbWVvdXQ7CisJbmV0LT5uZXRkZXZfb3BzID0gJmhzb19uZXRkZXZfb3BzOwogCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBIU09fTkVUX1RYX1RJTUVPVVQ7CiAJbmV0LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUCB8IElGRl9NVUxUSUNBU1Q7CiAJbmV0LT50eXBlID0gQVJQSFJEX05PTkU7CkBAIC0yNjQ2LDcgKzI2NDMsNyBAQAogCX0KIAloc29fZnJlZV90aW9tZ2V0KHNlcmlhbCk7CiAJa2ZyZWUoc2VyaWFsKTsKLQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJa2ZyZWUoaHNvX2Rldik7CiB9CiAKIC8qIENyZWF0ZXMgYSBidWxrIEFUIGNoYW5uZWwgKi8KQEAgLTI3MjcsNyArMjcyNCw3IEBACiBleGl0OgogCWhzb19mcmVlX3Rpb21nZXQoc2VyaWFsKTsKIAlrZnJlZShzZXJpYWwpOwotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjc4Niw3ICsyNzgzLDcgQEAKIAkJa2ZyZWUoc2VyaWFsKTsKIAl9CiAJaWYgKGhzb19kZXYpCi0JCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwkJa2ZyZWUoaHNvX2Rldik7CiAJcmV0dXJuIE5VTEw7CiAKIH0KQEAgLTI5NzksOCArMjk3Niw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmaHNvX2RyaXZlciwgaW50ZXJmYWNlLCBoc29fZGV2KTsKLQogCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlzIGRldmljZSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBoc29fZGV2KTsKIApAQCAtMjk5OCw4ICsyOTkzLDYgQEAKIAogCS8qIHJlbW92ZSByZWZlcmVuY2Ugb2Ygb3VyIHByaXZhdGUgZGF0YSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQotCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmhzb19kcml2ZXIsIGludGVyZmFjZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFzeW5jX2dldF9pbnRmKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCmluZGV4IGNlZDhmMzYuLjdhZTlhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwpAQCAtNDg2LDYgKzQ4NiwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jczc4MzBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IG1jczc4MzBfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtY3M3ODMwX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IG1jczc4MzBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXYtPm5ldDsKQEAgLTQ5NSwxMSArNTA3LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCW5ldC0+ZG9faW9jdGwgPSBtY3M3ODMwX2lvY3RsOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmbWNzNzgzMF9ldGh0b29sX29wczsKLQluZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdDsKKwluZXQtPm5ldGRldl9vcHMgPSAmbWNzNzgzMF9uZXRkZXZfb3BzOwogCW1jczc4MzBfc2V0X211bHRpY2FzdChuZXQpOwotCW5ldC0+c2V0X21hY19hZGRyZXNzID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3M7CiAKIAkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3RhdHVzIGJ5dGUgb24gcnggKi8KIAlkZXYtPnJ4X3VyYl9zaXplID0gRVRIX0ZSQU1FX0xFTiArIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCBiY2Q4NThjLi4xYmYyNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCQkJCXN0cnVjdCBybmRpc19rZWVwYWxpdmVfYyAqbXNnID0gKHZvaWQgKilidWY7CiAKIAkJCQltc2ctPm1zZ190eXBlID0gUk5ESVNfTVNHX0tFRVBBTElWRV9DOwotCQkJCW1zZy0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqbXNnKTsKKwkJCQltc2ctPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKm1zZyk7CiAJCQkJbXNnLT5zdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAkJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAogCQkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXUuZ2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmdldCArIGluX2xlbik7CiAJdS5nZXQtPm9pZCA9IG9pZDsKIAl1LmdldC0+bGVuID0gY3B1X3RvX2xlMzIoaW5fbGVuKTsKLQl1LmdldC0+b2Zmc2V0ID0gY2NwdTIoMjApOworCXUuZ2V0LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigyMCk7CiAKIAlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkgewpAQCAtMjY2LDYgKzI2NiwxNiBAQAogCXJldHVybiAtRURPTTsKIH0KIAorLyogc2FtZSBhcyB1c2JuZXRfbmV0ZGV2X29wcyBidXQgTVRVIGNoYW5nZSBub3QgYWxsb3dlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBpbnQKIGdlbmVyaWNfcm5kaXNfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgZmxhZ3MpCiB7CkBAIC0yOTcsOSArMzA3LDkgQEAKIAkJZ290byBmYWlsOwogCiAJdS5pbml0LT5tc2dfdHlwZSA9IFJORElTX01TR19JTklUOwotCXUuaW5pdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5pbml0KTsKLQl1LmluaXQtPm1ham9yX3ZlcnNpb24gPSBjY3B1MigxKTsKLQl1LmluaXQtPm1pbm9yX3ZlcnNpb24gPSBjY3B1MigwKTsKKwl1LmluaXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuaW5pdCk7CisJdS5pbml0LT5tYWpvcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMSk7CisJdS5pbml0LT5taW5vcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMCk7CiAKIAkvKiBtYXggdHJhbnNmZXIgKGluIHNwZWMpIGlzIDB4NDAwMCBhdCBmdWxsIHNwZWVkLCBidXQgZm9yCiAJICogVFggd2UnbGwgc3RpY2sgdG8gb25lIEV0aGVybmV0IHBhY2tldCBwbHVzIFJORElTIGZyYW1pbmcuCkBAIC0zMjcsNyArMzM3LDggQEAKIAlkZXYtPnJ4X3VyYl9zaXplICY9IH4oZGV2LT5tYXhwYWNrZXQgLSAxKTsKIAl1LmluaXQtPm1heF90cmFuc2Zlcl9zaXplID0gY3B1X3RvX2xlMzIoZGV2LT5yeF91cmJfc2l6ZSk7CiAKLQluZXQtPmNoYW5nZV9tdHUgPSBOVUxMOworCW5ldC0+bmV0ZGV2X29wcyA9ICZybmRpc19uZXRkZXZfb3BzOworCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIAlpZiAodW5saWtlbHkocmV0dmFsIDwgMCkpIHsKIAkJLyogaXQgbWlnaHQgbm90IGV2ZW4gYmUgYW4gUk5ESVMgZGV2aWNlISEgKi8KQEAgLTQwMywxMCArNDE0LDEwIEBACiAJLyogc2V0IGEgbm9uemVybyBmaWx0ZXIgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXJzICovCiAJbWVtc2V0KHUuc2V0LCAwLCBzaXplb2YgKnUuc2V0KTsKIAl1LnNldC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfU0VUOwotCXUuc2V0LT5tc2dfbGVuID0gY2NwdTIoNCArIHNpemVvZiAqdS5zZXQpOworCXUuc2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoNCArIHNpemVvZiAqdS5zZXQpOwogCXUuc2V0LT5vaWQgPSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUjsKLQl1LnNldC0+bGVuID0gY2NwdTIoNCk7Ci0JdS5zZXQtPm9mZnNldCA9IGNjcHUyKChzaXplb2YgKnUuc2V0KSAtIDgpOworCXUuc2V0LT5sZW4gPSBjcHVfdG9fbGUzMig0KTsKKwl1LnNldC0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoKHNpemVvZiAqdS5zZXQpIC0gOCk7CiAJKihfX2xlMzIgKikodS5idWYgKyBzaXplb2YgKnUuc2V0KSA9IFJORElTX0RFRkFVTFRfRklMVEVSOwogCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKQEAgLTQyMyw3ICs0MzQsNyBAQAogaGFsdF9mYWlsX2FuZF9yZWxlYXNlOgogCW1lbXNldCh1LmhhbHQsIDAsIHNpemVvZiAqdS5oYWx0KTsKIAl1LmhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JdS5oYWx0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmhhbHQpOworCXUuaGFsdC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5oYWx0KTsKIAkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopdS5oYWx0LCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIGZhaWxfYW5kX3JlbGVhc2U6CiAJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKQEAgLTQ0OCw3ICs0NTksNyBAQAogCWhhbHQgPSBremFsbG9jKENPTlRST0xfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChoYWx0KSB7CiAJCWhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JCWhhbHQtPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKmhhbHQpOworCQloYWx0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICpoYWx0KTsKIAkJKHZvaWQpIHJuZGlzX2NvbW1hbmQoZGV2LCAodm9pZCAqKWhhbHQsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCQlrZnJlZShoYWx0KTsKIAl9CkBAIC01NDMsNyArNTU0LDcgQEAKIAltZW1zZXQoaGRyLCAwLCBzaXplb2YgKmhkcik7CiAJaGRyLT5tc2dfdHlwZSA9IFJORElTX01TR19QQUNLRVQ7CiAJaGRyLT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCWhkci0+ZGF0YV9vZmZzZXQgPSBjY3B1MihzaXplb2YoKmhkcikgLSA4KTsKKwloZHItPmRhdGFfb2Zmc2V0ID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpoZHIpIC0gOCk7CiAJaGRyLT5kYXRhX2xlbiA9IGNwdV90b19sZTMyKGxlbik7CiAKIAkvKiBGSVhNRSBtYWtlIHRoZSBsYXN0IHBhY2tldCBhbHdheXMgYmUgc2hvcnQgLi4uICovCkBAIC01NjIsOSArNTczLDYgQEAKIAkudHhfZml4dXAgPQlybmRpc190eF9maXh1cCwKIH07CiAKLSN1bmRlZiBjY3B1MgotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGQ4NjY0YmYuLmY5ZmI0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXJiICpyeF91cmIsICp0eF91cmIsICppbnRyX3VyYiwgKmN0cmxfdXJiOwogCXN0cnVjdCBza19idWZmICp0eF9za2IsICpyeF9za2I7CkBAIC00NjMsOCArNDYyLDggQEAKIAlza2JfcHV0KGRldi0+cnhfc2tiLCBwa3RfbGVuKTsKIAlkZXYtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhkZXYtPnJ4X3NrYiwgbmV0ZGV2KTsKIAluZXRpZl9yeChkZXYtPnJ4X3NrYik7Ci0JZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCXNwaW5fbG9jaygmZGV2LT5yeF9wb29sX2xvY2spOwogCXNrYiA9IHB1bGxfc2tiKGRldik7CkBAIC01NzMsMTMgKzU3MiwxMyBAQAogCiAJZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWlmIChkWzBdICYgVFNSX0VSUk9SUykgewotCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChkW0lOVF9UU1JdICYgKFRTUl9FQ09MIHwgVFNSX0pCUikpCi0JCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTENPTCkKLQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTE9TU19DUlMpCi0JCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAl9CiAJLyogUmVwb3J0IGxpbmsgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2sgKi8KIAlpZiAoKGRbSU5UX01TUl0gJiBNU1JfTElOSykgPT0gMCkgewpAQCAtNjk3LDE3ICs2OTYsMTIgQEAKIAlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODE1MF9uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigocnRsODE1MF90ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiVHggdGltZW91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGRldi0+dHhfdXJiKTsKLQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNTBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNzQ3LDEyICs3NDEsMTIgQEAKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwogCQllbHNlIHsKIAkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7Ci0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJCX0KIAl9IGVsc2UgewotCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCX0KIApAQCAtODk3LDYgKzg5MSwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1MF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBydGw4MTUwX29wZW4sCisJLm5kb19zdG9wCQk9IHJ0bDgxNTBfY2xvc2UsCisJLm5kb19kb19pb2N0bAkJPSBydGw4MTUwX2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTUwX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHJ0bDgxNTBfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxNTBfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzLAorCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBydGw4MTUwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTkyMywxNSArOTMwLDggQEAKIAkKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCWRldi0+bmV0ZGV2ID0gbmV0ZGV2OwotCW5ldGRldi0+b3BlbiA9IHJ0bDgxNTBfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBydGw4MTUwX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBydGw4MTUwX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZydGw4MTUwX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUTDgxNTBfVFhfVElNRU9VVDsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTUwX3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBydGw4MTUwX3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTUwX3NldF9tdWx0aWNhc3Q7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBydGw4MTUwX3NldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPmdldF9zdGF0cyA9IHJ0bDgxNTBfbmV0ZGV2X3N0YXRzOwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCWRldi0+aW50cl9pbnRlcnZhbCA9IDEwMDsJLyogMTAwbXMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCA1NTc0YWJlLi5kYzE2NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtNTUsMTEgKzU1LDEwIEBACiAKIHN0cnVjdCB1c2JfY29udGV4dCB7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7Ci0Jc3RydWN0IGNvbXBsZXRpb24gbm90aWZ5OwogCXN0cnVjdCB1c2JuZXQgKmRldjsKIH07CiAKLWludCB0dXJib19tb2RlID0gdHJ1ZTsKK3N0YXRpYyBpbnQgdHVyYm9fbW9kZSA9IHRydWU7CiBtb2R1bGVfcGFyYW0odHVyYm9fbW9kZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR1cmJvX21vZGUsICJFbmFibGUgbXVsdGlwbGUgZnJhbWVzIHBlciBSeCB0cmFuc2FjdGlvbiIpOwogCkBAIC0zMDcsNyArMzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2JfY29udGV4dCAqdXNiX2NvbnRleHQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2NvbnRleHQtPmRldjsKQEAgLTMxNiw4ICszMTUsNiBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlkZXZ3YXJuKGRldiwgImFzeW5jIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIiwgc3RhdHVzKTsKIAotCWNvbXBsZXRlKCZ1c2JfY29udGV4dC0+bm90aWZ5KTsKLQogCWtmcmVlKHVzYl9jb250ZXh0KTsKIAl1c2JfZnJlZV91cmIodXJiKTsKIH0KQEAgLTM0OCwxMSArMzQ1LDEwIEBACiAJdXNiX2NvbnRleHQtPnJlcS53VmFsdWUgPSAwMDsKIAl1c2JfY29udGV4dC0+cmVxLndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKIAl1c2JfY29udGV4dC0+cmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKLQlpbml0X2NvbXBsZXRpb24oJnVzYl9jb250ZXh0LT5ub3RpZnkpOwogCiAJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCBkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAogCQkodm9pZCAqKSZ1c2JfY29udGV4dC0+cmVxLCBkYXRhLCBzaXplLAotCQkodXNiX2NvbXBsZXRlX3Qpc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrLAorCQlzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2ssCiAJCSh2b2lkICopdXNiX2NvbnRleHQpOwogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTEwMTIsNiArMTAwOCwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtc2M5NXh4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gc21zYzk1eHhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0LAorfTsKKwogc3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gTlVMTDsKQEAgLTEwNDIsOSArMTA1MCw4IEBACiAJLyogSW5pdCBhbGwgcmVnaXN0ZXJzICovCiAJcmV0ID0gc21zYzk1eHhfcmVzZXQoZGV2KTsKIAotCWRldi0+bmV0LT5kb19pb2N0bCA9IHNtc2M5NXh4X2lvY3RsOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJnNtc2M5NXh4X25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJnNtc2M5NXh4X2V0aHRvb2xfb3BzOwotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCWRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gU01TQzk1WFhfVFhfT1ZFUkhFQUQ7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYzMyMjg0Zi4uNjU5NjU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCitpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQlsbF9tdHUgPSBuZXdfbXR1ICsgbmV0LT5oYXJkX2hlYWRlcl9sZW47CkBAIC0yNDYsMTQgKzI0Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp1c2JuZXRfZ2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQotewotCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2NoYW5nZV9tdHUpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01NDgsNyArNTQxLDcgQEAKIAogLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CiAKLXN0YXRpYyBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQkJdGVtcDsKQEAgLTU5Miw2ICs1ODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc3RvcCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU5OSw3ICs1OTMsNyBAQAogCiAvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKIAotc3RhdGljIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlyZXR2YWw7CkBAIC02NzQsNiArNjY4LDcgQEAKIGRvbmVfbm9wbToKIAlyZXR1cm4gcmV0dmFsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X29wZW4pOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05MDgsNyArOTAzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCkBAIC05MTcsMTAgKzkxMiwxMSBAQAogCiAJLy8gRklYTUU6IGRldmljZSByZWNvdmVyeSAtLSByZXNldD8KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF90eF90aW1lb3V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGg7CkBAIC0xMDAzLDcgKzk5OSw3IEBACiAJfQogCXJldHVybiByZXR2YWw7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdGFydF94bWl0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTExMCw2ICsxMTA2LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfZGlzY29ubmVjdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdXNibmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTc5LDEzICsxMTg0LDE0IEBACiAJCW5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogI2VuZGlmCiAKLQluZXQtPmNoYW5nZV9tdHUgPSB1c2JuZXRfY2hhbmdlX210dTsKLQluZXQtPmdldF9zdGF0cyA9IHVzYm5ldF9nZXRfc3RhdHM7CisJbmV0LT5uZXRkZXZfb3BzID0gJnVzYm5ldF9uZXRkZXZfb3BzOworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHVzYm5ldF9zdGFydF94bWl0OwogCW5ldC0+b3BlbiA9IHVzYm5ldF9vcGVuOwogCW5ldC0+c3RvcCA9IHVzYm5ldF9zdG9wOwotCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUX0pJRkZJRVM7CiAJbmV0LT50eF90aW1lb3V0ID0gdXNibmV0X3R4X3RpbWVvdXQ7CisjZW5kaWYKKwluZXQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVF9KSUZGSUVTOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmdXNibmV0X2V0aHRvb2xfb3BzOwogCiAJLy8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGJpbmQvaW5pdCBwcm9jZWR1cmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMTI0ZmU3NS4uMDE1ZGIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMTksMTIgKzE5LDE3IEBACiAjZGVmaW5lIERSVl9OQU1FCSJ2ZXRoIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgogCisjZGVmaW5lIE1JTl9NVFUgNjgJCS8qIE1pbiBMMyBNVFUgKi8KKyNkZWZpbmUgTUFYX01UVSA2NTUzNQkJLyogTWF4IEwzIE1UVSAoYXJiaXRyYXJ5KSAqLworI2RlZmluZSBNVFVfUEFEIChFVEhfSExFTiArIDQpICAvKiBNYXggZGlmZmVyZW5jZSBiZXR3ZWVuIEwyIGFuZCBMMyBzaXplIE1UVSAqLworCiBzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgewogCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nCXR4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZwlyeF9ieXRlczsKIAl1bnNpZ25lZCBsb25nCXR4X2J5dGVzOwogCXVuc2lnbmVkIGxvbmcJdHhfZHJvcHBlZDsKKwl1bnNpZ25lZCBsb25nCXJ4X2Ryb3BwZWQ7CiB9OwogCiBzdHJ1Y3QgdmV0aF9wcml2IHsKQEAgLTE0Nyw3ICsxNTIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpyY3YgPSBOVUxMOwogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXYsICpyY3ZfcHJpdjsKLQlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOworCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHMsICpyY3Zfc3RhdHM7CiAJaW50IGxlbmd0aCwgY3B1OwogCiAJc2tiX29ycGhhbihza2IpOwpAQCAtMTU4LDkgKzE2MywxMyBAQAogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0YXRzID0gcGVyX2NwdV9wdHIocHJpdi0+c3RhdHMsIGNwdSk7CisJcmN2X3N0YXRzID0gcGVyX2NwdV9wdHIocmN2X3ByaXYtPnN0YXRzLCBjcHUpOwogCiAJaWYgKCEocmN2LT5mbGFncyAmIElGRl9VUCkpCi0JCWdvdG8gb3V0ZjsKKwkJZ290byB0eF9kcm9wOworCisJaWYgKHNrYi0+bGVuID4gKHJjdi0+bXR1ICsgTVRVX1BBRCkpCisJCWdvdG8gcnhfZHJvcDsKIAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByY3YpOwpAQCAtMTc4LDE3ICsxODcsMjEgQEAKIAlzdGF0cy0+dHhfYnl0ZXMgKz0gbGVuZ3RoOwogCXN0YXRzLT50eF9wYWNrZXRzKys7CiAKLQlzdGF0cyA9IHBlcl9jcHVfcHRyKHJjdl9wcml2LT5zdGF0cywgY3B1KTsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJcmN2X3N0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7CisJcmN2X3N0YXRzLT5yeF9wYWNrZXRzKys7CiAKIAluZXRpZl9yeChza2IpOwogCXJldHVybiAwOwogCi1vdXRmOgordHhfZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCXJldHVybiAwOworCityeF9kcm9wOgorCWtmcmVlX3NrYihza2IpOworCXJjdl9zdGF0cy0+cnhfZHJvcHBlZCsrOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjEwLDYgKzIyMyw3IEBACiAJZGV2X3N0YXRzLT5yeF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9kcm9wcGVkID0gMDsKKwlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKQEAgLTIxOSw2ICsyMzMsNyBAQAogCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHN0YXRzLT5yeF9ieXRlczsKIAkJZGV2X3N0YXRzLT50eF9ieXRlcyArPSBzdGF0cy0+dHhfYnl0ZXM7CiAJCWRldl9zdGF0cy0+dHhfZHJvcHBlZCArPSBzdGF0cy0+dHhfZHJvcHBlZDsKKwkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOwogCX0KIAogCXJldHVybiBkZXZfc3RhdHM7CkBAIC0yNDksNiArMjY0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXNfdmFsaWRfdmV0aF9tdHUoaW50IG5ld19tdHUpCit7CisJcmV0dXJuIChuZXdfbXR1ID49IE1JTl9NVFUgJiYgbmV3X210dSA8PSBNQVhfTVRVKTsKK30KKworc3RhdGljIGludCB2ZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJaWYgKCFpc192YWxpZF92ZXRoX210dShuZXdfbXR1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZldGhfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOwpAQCAtMjc3LDYgKzMwNSw3IEBACiAJLm5kb19vcGVuICAgICAgICAgICAgPSB2ZXRoX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgPSB2ZXRoX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdCAgICAgID0gdmV0aF94bWl0LAorCS5uZG9fY2hhbmdlX210dSAgICAgID0gdmV0aF9jaGFuZ2VfbXR1LAogCS5uZG9fZ2V0X3N0YXRzICAgICAgID0gdmV0aF9nZXRfc3RhdHMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCiB9OwpAQCAtMzAzLDYgKzMzMiwxMCBAQAogCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KKwlpZiAodGJbSUZMQV9NVFVdKSB7CisJCWlmICghaXNfdmFsaWRfdmV0aF9tdHUobmxhX2dldF91MzIodGJbSUZMQV9NVFVdKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggM2I4ZTYzMi4uODgwZWFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTEwOSw4ICsxMDksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4xMC1MSyIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKIAogLyogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gdG8gdXNlIFBDSSBtZW1vcnkgc3BhY2UuIFNvbWUgZWFybHkgdmVyc2lvbnMKICAgIG9mIHRoZSBSaGluZSBtYXkgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEkvTyBzcGFjZSBhY2Nlc3Nlcy4gKi8KQEAgLTU4OSw3ICs1OTAsNyBAQAogCXdvcmtfZG9uZSA9IHJoaW5lX3J4KGRldiwgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJaW93cml0ZTE2KEludHJSeERvbmUgfCBJbnRyUnhFcnIgfCBJbnRyUnhFbXB0eXwgSW50clJ4T3ZlcmZsb3cgfAogCQkJICBJbnRyUnhEcm9wcGVkIHwgSW50clJ4Tm9CdWYgfCBJbnRyVHhBYm9ydGVkIHwKQEAgLTEzMTksNyArMTMyMCw3IEBACiAJCQkJICBJbnRyUENJRXJyIHwgSW50clN0YXRzTWF4IHwgSW50ckxpbmtDaGFuZ2UsCiAJCQkJICBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnJwLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnJwLT5uYXBpKTsKIAkJfQogCiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyVHhFcnJTdW1tYXJ5IHwgSW50clR4RG9uZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggMjlhMzMwOS4uZWE0M2UxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTE4Myw3ICsxODMsNyBAQAogfTsKIAogZW51bSB7Ci0JUlhfSU5URU4gPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKKwlSWF9JTlRFTiA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIHN0cnVjdCByeF9kZXNjIHsKQEAgLTIxMCw3ICsyMTAsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBlbnVtIHsKLQlURF9RVUVVRSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCVREX1FVRVVFID0gY3B1X3RvX2xlMTYoMHg4MDAwKQogfTsKIAogc3RydWN0IHRkX2J1ZiB7CkBAIC0yNDIsNyArMjQyLDcgQEAKIAogZW51bSAgdmVsb2NpdHlfb3duZXIgewogCU9XTkVEX0JZX0hPU1QgPSAwLAotCU9XTkVEX0JZX05JQyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCU9XTkVEX0JZX05JQyA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGU2N2QxNmMuLmE2ZjFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTM3LDEyICszNywxNSBAQAogI2RlZmluZSBNQVhfUEFDS0VUX0xFTiAoRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyBFVEhfREFUQV9MRU4pCiAjZGVmaW5lIEdPT0RfQ09QWV9MRU4JMTI4CiAKKyNkZWZpbmUgVklSVE5FVF9TRU5EX0NPTU1BTkRfU0dfTUFYICAgIDIKKwogc3RydWN0IHZpcnRuZXRfaW5mbwogewogCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwotCXN0cnVjdCB2aXJ0cXVldWUgKnJ2cSwgKnN2cTsKKwlzdHJ1Y3QgdmlydHF1ZXVlICpydnEsICpzdnEsICpjdnE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJLyogVGhlIHNrYiB3ZSBjb3VsZG4ndCBzZW5kIGJlY2F1c2UgYnVmZmVycyB3ZXJlIGZ1bGwuICovCiAJc3RydWN0IHNrX2J1ZmYgKmxhc3RfeG1pdF9za2I7CkBAIC0zNzUsOSArMzc4LDkgQEAKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHJ2cS0+dmRldi0+cHJpdjsKIAkvKiBTY2hlZHVsZSBOQVBJLCBTdXBwcmVzcyBmdXJ0aGVyIGludGVycnVwdHMgaWYgc3VjY2Vzc2Z1bC4gKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHJ2cSk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnZpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CiAJfQogfQogCkBAIC00MDMsMTEgKzQwNiwxMSBAQAogCiAJLyogT3V0IG9mIHBhY2tldHM/ICovCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpZiAodW5saWtlbHkoIXZpLT5ydnEtPnZxX29wcy0+ZW5hYmxlX2NiKHZpLT5ydnEpKQogCQkgICAgJiYgbmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7CiAJCQl2aS0+cnZxLT52cV9vcHMtPmRpc2FibGVfY2IodmktPnJ2cSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKG5hcGkpOwogCQkJZ290byBhZ2FpbjsKIAkJfQogCX0KQEAgLTU2Miw2ICs1NjUsMjIgQEAKIAlnb3RvIGRvbmU7CiB9CiAKK3N0YXRpYyBpbnQgdmlydG5ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2aS0+dmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZXRoX21hY19hZGRyKGRldiwgcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZkZXYtPmNvbmZpZy0+c2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgbWFjKSwKKwkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCB2aXJ0bmV0X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTU4MSwxMyArNjAwLDYwIEBACiAJICogd29uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFueSBvdXRzdGFuZGluZyBwYWNrZXRzCiAJICogbm93LiAgdmlydG5ldF9wb2xsIHdhbnRzIHJlLWVuYWJsZSB0aGUgcXVldWUsIHNvIHdlIGRpc2FibGUgaGVyZS4KIAkgKiBXZSBzeW5jaHJvbml6ZSBhZ2FpbnN0IGludGVycnVwdHMgdmlhIE5BUElfU1RBVEVfU0NIRUQgKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXZpLT5ydnEtPnZxX29wcy0+ZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdmktPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTZW5kIGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHZpcnRxdWV1ZSBhbmQgY2hlY2sgc3RhdHVzLiAgQ29tbWFuZHMKKyAqIHN1cHBvcnRlZCBieSB0aGUgaHlwZXJ2aXNvciwgYXMgaW5kaWNhdGVkIGJ5IGZlYXR1cmUgYml0cywgc2hvdWxkCisgKiBuZXZlciBmYWlsIHVubGVzcyBpbXByb3Blcmx5IGZvcm1hdGVkLgorICovCitzdGF0aWMgYm9vbCB2aXJ0bmV0X3NlbmRfY29tbWFuZChzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgdTggY2xhc3MsIHU4IGNtZCwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpkYXRhLCBpbnQgb3V0LCBpbnQgaW4pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW1ZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCArIDJdOworCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfaGRyIGN0cmw7CisJdmlydGlvX25ldF9jdHJsX2FjayBzdGF0dXMgPSB+MDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQlCVUcoKTsgIC8qIENhbGxlciBzaG91bGQga25vdyBiZXR0ZXIgKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCUJVR19PTihvdXQgKyBpbiA+IFZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCk7CisKKwlvdXQrKzsgLyogQWRkIGhlYWRlciAqLworCWluKys7IC8qIEFkZCByZXR1cm4gc3RhdHVzICovCisKKwljdHJsLmNsYXNzID0gY2xhc3M7CisJY3RybC5jbWQgPSBjbWQ7CisKKwlzZ19pbml0X3RhYmxlKHNnLCBvdXQgKyBpbik7CisKKwlzZ19zZXRfYnVmKCZzZ1swXSwgJmN0cmwsIHNpemVvZihjdHJsKSk7CisJbWVtY3B5KCZzZ1sxXSwgZGF0YSwgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiAob3V0ICsgaW4gLSAyKSk7CisJc2dfc2V0X2J1Zigmc2dbb3V0ICsgaW4gLSAxXSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCisJaWYgKHZpLT5jdnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+Y3ZxLCBzZywgb3V0LCBpbiwgdmkpICE9IDApCisJCUJVRygpOworCisJdmktPmN2cS0+dnFfb3BzLT5raWNrKHZpLT5jdnEpOworCisJLyoKKwkgKiBTcGluIGZvciBhIHJlc3BvbnNlLCB0aGUga2ljayBjYXVzZXMgYW4gaW9wb3J0IHdyaXRlLCB0cmFwcGluZworCSAqIGludG8gdGhlIGh5cGVydmlzb3IsIHNvIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBoYW5kbGVkIGltbWVkaWF0ZWx5LgorCSAqLworCXdoaWxlICghdmktPmN2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5jdnEsICZ0bXApKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiBzdGF0dXMgPT0gVklSVElPX05FVF9PSzsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjA4LDYgKzY3NCw5OSBAQAogCXJldHVybiBldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOworCXU4IHByb21pc2MsIGFsbG11bHRpOworCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfbWFjICptYWNfZGF0YTsKKwlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqYWRkcjsKKwl2b2lkICpidWY7CisJaW50IGk7CisKKwkvKiBXZSBjYW4ndCBkeW5hbWljYWx5IHNldCBuZG9fc2V0X3J4X21vZGUsIHNvIHJldHVybiBncmFjZWZ1bGx5ICovCisJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1JYKSkKKwkJcmV0dXJuOworCisJcHJvbWlzYyA9ICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAhPSAwKTsKKwlhbGxtdWx0aSA9ICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIT0gMCk7CisKKwlzZ19zZXRfYnVmKHNnLCAmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9SWCwKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9SWF9QUk9NSVNDLAorCQkJCSAgc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gJXNhYmxlIHByb21pc2MgbW9kZS5cbiIsCisJCQkgcHJvbWlzYyA/ICJlbiIgOiAiZGlzIik7CisKKwlzZ19zZXRfYnVmKHNnLCAmYWxsbXVsdGksIHNpemVvZihhbGxtdWx0aSkpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1JYLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1JYX0FMTE1VTFRJLAorCQkJCSAgc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gJXNhYmxlIGFsbG11bHRpIG1vZGUuXG4iLAorCQkJIGFsbG11bHRpID8gImVuIiA6ICJkaXMiKTsKKworCS8qIE1BQyBmaWx0ZXIgLSB1c2Ugb25lIGJ1ZmZlciBmb3IgYm90aCBsaXN0cyAqLworCW1hY19kYXRhID0gYnVmID0ga3phbGxvYygoKGRldi0+dWNfY291bnQgKyBkZXYtPm1jX2NvdW50KSAqIEVUSF9BTEVOKSArCisJCQkJICgyICogc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSksIEdGUF9BVE9NSUMpOworCWlmICghYnVmKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3IgTUFDIGFkZHJlc3MgYnVmZmVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFN0b3JlIHRoZSB1bmljYXN0IGxpc3QgYW5kIGNvdW50IGluIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyICovCisJbWFjX2RhdGEtPmVudHJpZXMgPSBkZXYtPnVjX2NvdW50OworCWFkZHIgPSBkZXYtPnVjX2xpc3Q7CisJZm9yIChpID0gMDsgaSA8IGRldi0+dWNfY291bnQ7IGkrKywgYWRkciA9IGFkZHItPm5leHQpCisJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaV1bMF0sIGFkZHItPmRhX2FkZHIsIEVUSF9BTEVOKTsKKworCXNnX3NldF9idWYoJnNnWzBdLCBtYWNfZGF0YSwKKwkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArIChkZXYtPnVjX2NvdW50ICogRVRIX0FMRU4pKTsKKworCS8qIG11bHRpY2FzdCBsaXN0IGFuZCBjb3VudCBmaWxsIHRoZSBlbmQgKi8KKwltYWNfZGF0YSA9ICh2b2lkICopJm1hY19kYXRhLT5tYWNzW2Rldi0+dWNfY291bnRdWzBdOworCisJbWFjX2RhdGEtPmVudHJpZXMgPSBkZXYtPm1jX2NvdW50OworCWFkZHIgPSBkZXYtPm1jX2xpc3Q7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgYWRkciA9IGFkZHItPm5leHQpCisJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaV1bMF0sIGFkZHItPmRhX2FkZHIsIEVUSF9BTEVOKTsKKworCXNnX3NldF9idWYoJnNnWzFdLCBtYWNfZGF0YSwKKwkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArIChkZXYtPm1jX2NvdW50ICogRVRIX0FMRU4pKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9NQUMsCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCwKKwkJCQkgIHNnLCAyLCAwKSkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBNQUMgZml0bGVyIHRhYmxlLlxuIik7CisKKwlrZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCB2aXJuZXRfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCXNnX3NldF9idWYoJnNnLCAmdmlkLCBzaXplb2YodmlkKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfVkxBTiwKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0FERCwgJnNnLCAxLCAwKSkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBWTEFOIElEICVkLlxuIiwgdmlkKTsKK30KKworc3RhdGljIHZvaWQgdmlybmV0X3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJc2dfc2V0X2J1Zigmc2csICZ2aWQsIHNpemVvZih2aWQpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9WTEFOLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1ZMQU5fREVMLCAmc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8ga2lsbCBWTEFOIElEICVkLlxuIiwgdmlkKTsKK30KKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB2aXJ0bmV0X2V0aHRvb2xfb3BzID0gewogCS5zZXRfdHhfY3N1bSA9IHZpcnRuZXRfc2V0X3R4X2NzdW0sCiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLApAQCAtNjMxLDEzICs3OTAsNTEgQEAKIAkubmRvX3N0b3AgICAJICAgICA9IHZpcnRuZXRfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0ICAgICAgPSBzdGFydF94bWl0LAogCS5uZG9fdmFsaWRhdGVfYWRkciAgID0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB2aXJ0bmV0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9yeF9tb2RlICAgICA9IHZpcnRuZXRfc2V0X3J4X21vZGUsCiAJLm5kb19jaGFuZ2VfbXR1CSAgICAgPSB2aXJ0bmV0X2NoYW5nZV9tdHUsCisJLm5kb192bGFuX3J4X2FkZF92aWQgPSB2aXJuZXRfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCA9IHZpcm5ldF92bGFuX3J4X2tpbGxfdmlkLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSB2aXJ0bmV0X25ldHBvbGwsCiAjZW5kaWYKIH07CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKK3sKKwl1MTYgdjsKKworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfU1RBVFVTKSkKKwkJcmV0dXJuOworCisJdmktPnZkZXYtPmNvbmZpZy0+Z2V0KHZpLT52ZGV2LAorCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBzdGF0dXMpLAorCQkJICAgICAgJnYsIHNpemVvZih2KSk7CisKKwkvKiBJZ25vcmUgdW5rbm93biAoZnV0dXJlKSBzdGF0dXMgYml0cyAqLworCXYgJj0gVklSVElPX05FVF9TX0xJTktfVVA7CisKKwlpZiAodmktPnN0YXR1cyA9PSB2KQorCQlyZXR1cm47CisKKwl2aS0+c3RhdHVzID0gdjsKKworCWlmICh2aS0+c3RhdHVzICYgVklSVElPX05FVF9TX0xJTktfVVApIHsKKwkJbmV0aWZfY2Fycmllcl9vbih2aS0+ZGV2KTsKKwkJbmV0aWZfd2FrZV9xdWV1ZSh2aS0+ZGV2KTsKKwl9IGVsc2UgeworCQluZXRpZl9jYXJyaWVyX29mZih2aS0+ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZSh2aS0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRuZXRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSB2ZGV2LT5wcml2OworCisJdmlydG5ldF91cGRhdGVfc3RhdHVzKHZpKTsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCWludCBlcnI7CkBAIC02NzksOCArODc2LDExIEBACiAJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsCiAJCQkJICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIG1hYyksCiAJCQkJICBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKKwkJdmRldi0+Y29uZmlnLT5zZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBtYWMpLAorCQkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisJfQogCiAJLyogU2V0IHVwIG91ciBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAl2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MTYsNiArOTE2LDE3IEBACiAJCWdvdG8gZnJlZV9yZWN2OwogCX0KIAorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQl2aS0+Y3ZxID0gdmRldi0+Y29uZmlnLT5maW5kX3ZxKHZkZXYsIDIsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZpLT5jdnEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZpLT5zdnEpOworCQkJZ290byBmcmVlX3NlbmQ7CisJCX0KKworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOKSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwl9CisKIAkvKiBJbml0aWFsaXplIG91ciBlbXB0eSByZWNlaXZlIGFuZCBzZW5kIHF1ZXVlcy4gKi8KIAlza2JfcXVldWVfaGVhZF9pbml0KCZ2aS0+cmVjdik7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmktPnNlbmQpOwpAQCAtNzI4LDcgKzkzOSw3IEBACiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygidmlydGlvX25ldDogcmVnaXN0ZXJpbmcgZGV2aWNlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZV9zZW5kOworCQlnb3RvIGZyZWVfY3RybDsKIAl9CiAKIAkvKiBMYXN0IG9mIGFsbCwgc2V0IHVwIHNvbWUgcmVjZWl2ZSBidWZmZXJzLiAqLwpAQCAtNzQwLDYgKzk1MSw4IEBACiAJCWdvdG8gdW5yZWdpc3RlcjsKIAl9CiAKKwl2aS0+c3RhdHVzID0gVklSVElPX05FVF9TX0xJTktfVVA7CisJdmlydG5ldF91cGRhdGVfc3RhdHVzKHZpKTsKIAluZXRpZl9jYXJyaWVyX29uKGRldik7CiAKIAlwcl9kZWJ1ZygidmlydG5ldDogcmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsIGRldi0+bmFtZSk7CkBAIC03NDcsNiArOTYwLDkgQEAKIAogdW5yZWdpc3RlcjoKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworZnJlZV9jdHJsOgorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiBmcmVlX3NlbmQ6CiAJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPnN2cSk7CiBmcmVlX3JlY3Y6CkBAIC03NzgsNiArOTk0LDggQEAKIAogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5zdnEpOwogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5ydnEpOworCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYodmktPmRldik7CiAKIAl3aGlsZSAodmktPnBhZ2VzKQpAQCAtNzk3LDcgKzEwMTUsOCBAQAogCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQsIFZJUlRJT19ORVRfRl9IT1NUX1VGTywgVklSVElPX05FVF9GX0hPU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04sIFZJUlRJT19ORVRfRl9HVUVTVF9UU080LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOLCAvKiBXZSBkb24ndCB5ZXQgaGFuZGxlIFVGTyBpbnB1dC4gKi8KLQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGLAorCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYsIFZJUlRJT19ORVRfRl9TVEFUVVMsIFZJUlRJT19ORVRfRl9DVFJMX1ZRLAorCVZJUlRJT19ORVRfRl9DVFJMX1JYLCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOLAogCVZJUlRJT19GX05PVElGWV9PTl9FTVBUWSwKIH07CiAKQEAgLTgwOSw2ICsxMDI4LDcgQEAKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIAkucHJvYmUgPQl2aXJ0bmV0X3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcCh2aXJ0bmV0X3JlbW92ZSksCisJLmNvbmZpZ19jaGFuZ2VkID0gdmlydG5ldF9jb25maWdfY2hhbmdlZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCmluZGV4IGI0Njg5NzkuLjk2OTNiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwpAQCAtMjk2LDcgKzI5NiwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzEwMV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gYzEwMV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGMxMDFfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBjMTAxX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSkKIHsKQEAgLTM2Nyw5ICszNzMsNyBAQAogCWRldi0+bWVtX3N0YXJ0ID0gd2luYmFzZTsKIAlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgQzEwMV9NQVBQRURfUkFNX1NJWkUgLSAxOwogCWRldi0+dHhfcXVldWVfbGVuID0gNTA7Ci0JZGV2LT5kb19pb2N0bCA9IGMxMDFfaW9jdGw7Ci0JZGV2LT5vcGVuID0gYzEwMV9vcGVuOwotCWRldi0+c3RvcCA9IGMxMDFfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzID0gJmMxMDFfb3BzOwogCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJaGRsYy0+eG1pdCA9IHNjYV94bWl0OwogCWNhcmQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCBkODBiNzJlLi42MTU4MWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTQyNyw2ICs0MjcsMTUgQEAKIH0KIG1vZHVsZV9leGl0KGNvc2FfZXhpdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29zYV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gY29zYV9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBjb3NhX25ldF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGNvc2FfbmV0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQsCit9OworCiBzdGF0aWMgaW50IGNvc2FfcHJvYmUoaW50IGJhc2UsIGludCBpcnEsIGludCBkbWEpCiB7CiAJc3RydWN0IGNvc2FfZGF0YSAqY29zYSA9IGNvc2FfY2FyZHMrbnJfY2FyZHM7CkBAIC01NzUsMTAgKzU4NCw3IEBACiAJCX0KIAkJZGV2X3RvX2hkbGMoY2hhbi0+bmV0ZGV2KS0+YXR0YWNoID0gY29zYV9uZXRfYXR0YWNoOwogCQlkZXZfdG9faGRsYyhjaGFuLT5uZXRkZXYpLT54bWl0ID0gY29zYV9uZXRfdHg7Ci0JCWNoYW4tPm5ldGRldi0+b3BlbiA9IGNvc2FfbmV0X29wZW47Ci0JCWNoYW4tPm5ldGRldi0+c3RvcCA9IGNvc2FfbmV0X2Nsb3NlOwotCQljaGFuLT5uZXRkZXYtPmRvX2lvY3RsID0gY29zYV9uZXRfaW9jdGw7Ci0JCWNoYW4tPm5ldGRldi0+dHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQ7CisJCWNoYW4tPm5ldGRldi0+bmV0ZGV2X29wcyA9ICZjb3NhX29wczsKIAkJY2hhbi0+bmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJCWNoYW4tPm5ldGRldi0+YmFzZV9hZGRyID0gY2hhbi0+Y29zYS0+ZGF0YXJlZzsKIAkJY2hhbi0+bmV0ZGV2LT5pcnEgPSBjaGFuLT5jb3NhLT5pcnE7CkBAIC03MjUsOCArNzMxLDcgQEAKIAkgKiBXZSBjYW4gc2FmZWx5IGZhbGwgYmFjayB0byBub24tZG1hLWFibGUgbWVtb3J5LCBiZWNhdXNlIHdlIGhhdmUKIAkgKiB0aGUgY29zYS0+Ym91bmNlYnVmIHByZS1hbGxvY2F0ZWQuCiAJICovCi0JaWYgKGNoYW4tPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CiAJY2hhbi0+cnhfc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAlpZiAoY2hhbi0+cnhfc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwKQEAgLTk5Myw4ICs5OTgsOCBAQAogc3RhdGljIGludCBjb3NhX2Zhc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogICAgICAgICBpbnQgcG9ydCA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIGludCBydiA9IGZhc3luY19oZWxwZXIoaW5vZGUsIGZpbGUsIG9uLCAmZmFzeW5jW3BvcnRdKTsKLSAgICAgICAgcmV0dXJuIHJ2IDwgMCA/IHJ2IDogMDsKKworCXJldHVybiBmYXN5bmNfaGVscGVyKGlub2RlLCBmaWxlLCBvbiwgJmZhc3luY1twb3J0XSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwppbmRleCA1ZmE1MjkyLi4zNWRlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwpAQCAtMzU1LDEyICszNTUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsYmFjayB0byBpbml0aWFsaXplIGRldmljZSAqLwotc3RhdGljIHZvaWQgY3ljeF94MjVfY2hhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWRldi0+aW5pdCA9IGN5Y3hfbmV0ZGV2aWNlX2luaXQ7Ci19Ci0KIC8qIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCiAgKiBoYW5kbGVkLgpAQCAtNDc2LDYgKzQ3MCwyNyBAQAogCS5yZWJ1aWxkID0gY3ljeF9uZXRkZXZpY2VfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN5Y3hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJPSBjeWN4X25ldGRldmljZV9pbml0LAorCS5uZG9fb3Blbgk9IGN5Y3hfbmV0ZGV2aWNlX29wZW4sCisJLm5kb19zdG9wCT0gY3ljeF9uZXRkZXZpY2Vfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJPSBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHMsCit9OworCitzdGF0aWMgdm9pZCBjeWN4X3gyNV9jaGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLworCWRldi0+bmV0ZGV2X29wcwkJPSAmY3ljeF9uZXRkZXZfb3BzOworCWRldi0+aGVhZGVyX29wcwkJPSAmY3ljeF9oZWFkZXJfb3BzOworCisJLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZGV2LT5tdHUJCT0gQ1lDWF9YMjVfQ0hBTl9NVFU7CisJZGV2LT50eXBlCQk9IEFSUEhSRF9IV1gyNTsJLyogQVJQIGgvdyB0eXBlICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwkJLyogbWVkaWEgaGVhZGVyIGxlbmd0aCAqLworCWRldi0+YWRkcl9sZW4JCT0gMDsJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCit9CisKIC8qIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCiAgKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawpAQCAtNDg3LDIwICs1MDIsNiBAQAogCXN0cnVjdCBjeWN4X2RldmljZSAqY2FyZCA9IGNoYW4tPmNhcmQ7CiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiA9ICZjYXJkLT53YW5kZXY7CiAKLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9IGN5Y3hfbmV0ZGV2aWNlX29wZW47Ci0JZGV2LT5zdG9wCQk9IGN5Y3hfbmV0ZGV2aWNlX3N0b3A7Ci0JZGV2LT5oZWFkZXJfb3BzCQk9ICZjeWN4X2hlYWRlcl9vcHM7Ci0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHM7Ci0KLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPm10dQkJPSBDWUNYX1gyNV9DSEFOX01UVTsKLQlkZXYtPnR5cGUJCT0gQVJQSFJEX0hXWDI1OwkvKiBBUlAgaC93IHR5cGUgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CQkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0JZGV2LT5hZGRyX2xlbgkJPSAwOwkJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KLQogCWlmICghY2hhbi0+c3ZjKQogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGNoYW4tPmxjbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IGEyOTdlM2UuLmU4ZDE1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBpbnZhbGlkIGRhdGEgbm8gaGVhZGVyXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlpZiAoaGRyLT5jb250cm9sICE9IEZSQURfSV9VSSkKIAl7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgaGVhZGVyIGZsYWcgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPmNvbnRyb2wpOwotCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAllbHNlCiAJCXN3aXRjaChoZHItPklQX05MUElEKQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKIAkJCQlpZiAoaGRyLT5OTFBJRCAhPSBGUkFEX1BfU05BUCkKIAkJCQl7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVuc3VwcG9ydGVkIE5MUElEIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5OTFBJRCk7Ci0JCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkgCiAJCQkJaWYgKGhkci0+T1VJWzBdICsgaGRyLT5PVUlbMV0gKyBoZHItPk9VSVsyXSAhPSAwKQogCQkJCXsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgb3JnYW5pemF0aW9uYWxseSB1bmlxdWUgaWRlbnRpZmllciAweCUwMlgtJTAyWC0lMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPk9VSVswXSwgaGRyLT5PVUlbMV0sIGhkci0+T1VJWzJdKTsKLQkJCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogCQkJY2FzZSBGUkFEX1BfUTkzMzoKIAkJCWNhc2UgRlJBRF9QX0NMTlA6CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgTkxQSUQgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgcGFkIGJ5dGUgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwkJCQkKIAkJfQogCkBAIC0xNzgsOSArMTc4LDkgQEAKIAkJLyogd2UndmUgc2V0IHVwIHRoZSBwcm90b2NvbCwgc28gZGlzY2FyZCB0aGUgaGVhZGVyICovCiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9wdWxsKHNrYiwgaGVhZGVyKTsKLQkJZGxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKLQkJZGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIAllbHNlCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTIwMCwxOSArMjAwLDE5IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCi0JcmV0ID0gZGxwLT5zbGF2ZS0+aGFyZF9zdGFydF94bWl0KHNrYiwgZGxwLT5zbGF2ZSk7CisJcmV0ID0gZGxwLT5zbGF2ZS0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkbHAtPnNsYXZlKTsKIAlzd2l0Y2ggKHJldCkKIAl7CiAJCWNhc2UgRExDSV9SRVRfT0s6Ci0JCQlkbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQkJY2FzZSBETENJX1JFVF9FUlI6Ci0JCQlkbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJCWNhc2UgRExDSV9SRVRfRFJPUDoKLQkJCWRscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXQgPSAxOwogCQkJYnJlYWs7CiAJfQpAQCAtMjk1LDExICsyOTUsOSBAQAogCiBzdGF0aWMgaW50IGRsY2lfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOworCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigoKmRscC0+c2xhdmUtPmNoYW5nZV9tdHUpKGRscC0+c2xhdmUsIG5ld19tdHUpKTsKKwlyZXR1cm4gZGV2X3NldF9tdHUoZGxwLT5zbGF2ZSwgbmV3X210dSk7CiB9CiAKIHN0YXRpYyBpbnQgZGxjaV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNDIsMTUgKzM0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGxjaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOwotCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigmZGxwLT5zdGF0cyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGxjaV9hZGQoc3RydWN0IGRsY2lfYWRkICpkbGNpKQogewogCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXIsICpzbGF2ZTsKQEAgLTQ4OCwxOCArNDc3LDIxIEBACiAJLmNyZWF0ZQk9IGRsY2lfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbGNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gZGxjaV9vcGVuLAorCS5uZG9fc3RvcAk9IGRsY2lfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGRsY2lfZGV2X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQsCisJLm5kb19jaGFuZ2VfbXR1CT0gZGxjaV9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgZGxjaV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJZGV2LT5mbGFncwkJPSAwOwotCWRldi0+b3BlbgkJPSBkbGNpX29wZW47Ci0JZGV2LT5zdG9wCQk9IGRsY2lfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bAkJPSBkbGNpX2Rldl9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQ7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZkbGNpX2hlYWRlcl9vcHM7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gZGxjaV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IGRsY2lfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmRsY2lfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAKIAlkbHAtPnJlY2VpdmUJCT0gZGxjaV9yZWNlaXZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCA4ODgwMjVkLi44ZmFjZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtODgzLDYgKzg4MywxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNjYzRfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGRzY2M0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZHNjYzRfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBkc2NjNF9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCBkc2NjNF9mb3VuZDEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCXN0cnVjdCBkc2NjNF9wY2lfcHJpdiAqcHByaXY7CkBAIC05MTYsMTMgKzkyNSw4IEBACiAJCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZCk7CiAKIAkgICAgICAgIGQtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsKLQkJZC0+aW5pdCA9IE5VTEw7CiAJICAgICAgICBkLT5pcnEgPSBwZGV2LT5pcnE7Ci0JICAgICAgICBkLT5vcGVuID0gZHNjYzRfb3BlbjsKLQkgICAgICAgIGQtPnN0b3AgPSBkc2NjNF9jbG9zZTsKLQkJZC0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLQkgICAgICAgIGQtPmRvX2lvY3RsID0gZHNjYzRfaW9jdGw7Ci0JCWQtPnR4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0OworCQlkLT5uZXRkZXZfb3BzID0gJmRzY2M0X29wczsKIAkJZC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCQlTRVRfTkVUREVWX0RFVihkLCAmcGRldi0+ZGV2KTsKIApAQCAtMTA0OCw3ICsxMDUyLDcgQEAKIAlzdHJ1Y3QgZHNjYzRfcGNpX3ByaXYgKnBwcml2OwogCWludCByZXQgPSAtRUFHQUlOOwogCi0JaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSB8fCAhZGV2LT5oYXJkX3N0YXJ0X3htaXQpCisJaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSkKIAkJZ290byBlcnI7CiAKIAlpZiAoKHJldCA9IGhkbGNfb3BlbihkZXYpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDQ4YTJjOWQuLjAwOTQ1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMjQyNCw2ICsyNDI0LDE1IEBACiAJICAgICAgIHR5cGVfc3RyaW5nc1tjYXJkLT50eXBlXSwgY2FyZC0+aXJxLCBjYXJkLT5ucG9ydHMpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZzdF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gZnN0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZnN0X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gZnN0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGZzdF90eF90aW1lb3V0LAorfTsKKwogLyoKICAqICAgICAgSW5pdGlhbGlzZSBjYXJkIHdoZW4gZGV0ZWN0ZWQuCiAgKiAgICAgIFJldHVybnMgMCB0byBpbmRpY2F0ZSBzdWNjZXNzLCBvciBlcnJubyBvdGhlcndpc2UuCkBAIC0yNTY1LDEyICsyNTc0LDkgQEAKICAgICAgICAgICAgICAgICBkZXYtPmJhc2VfYWRkciAgID0gY2FyZC0+cGNpX2NvbmY7CiAgICAgICAgICAgICAgICAgZGV2LT5pcnEgICAgICAgICA9IGNhcmQtPmlycTsKIAotICAgICAgICAgICAgICAgIGRldi0+dHhfcXVldWVfbGVuICAgICAgICAgID0gRlNUX1RYX1FVRVVFX0xFTjsKLSAgICAgICAgICAgICAgICBkZXYtPm9wZW4gICAgICAgICAgICAgICAgICA9IGZzdF9vcGVuOwotICAgICAgICAgICAgICAgIGRldi0+c3RvcCAgICAgICAgICAgICAgICAgID0gZnN0X2Nsb3NlOwotICAgICAgICAgICAgICAgIGRldi0+ZG9faW9jdGwgICAgICAgICAgICAgID0gZnN0X2lvY3RsOwotICAgICAgICAgICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gICAgICAgID0gRlNUX1RYX1RJTUVPVVQ7Ci0gICAgICAgICAgICAgICAgZGV2LT50eF90aW1lb3V0ICAgICAgICAgICAgPSBmc3RfdHhfdGltZW91dDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmZzdF9vcHM7CisJCWRldi0+dHhfcXVldWVfbGVuID0gRlNUX1RYX1FVRVVFX0xFTjsKKwkJZGV2LT53YXRjaGRvZ190aW1lbyA9IEZTVF9UWF9USU1FT1VUOwogICAgICAgICAgICAgICAgIGhkbGMtPmF0dGFjaCA9IGZzdF9hdHRhY2g7CiAgICAgICAgICAgICAgICAgaGRsYy0+eG1pdCAgID0gZnN0X3N0YXJ0X3htaXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKaW5kZXggMDhiMzUzNi4uNDk3YjAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJcmVjZWl2ZWQgPSBzY2FfcnhfZG9uZShwb3J0LCBidWRnZXQpOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllbmFibGVfaW50cihwb3J0KTsKIAl9CiAKQEAgLTM1OSw3ICszNTksNyBAQAogCQlpZiAocG9ydCAmJiAoaXNyMCAmIChpID8gMHgwODAwMjIwMCA6IDB4MDAwODAwMjIpKSkgewogCQkJaGFuZGxlZCA9IDE7CiAJCQlkaXNhYmxlX2ludHIocG9ydCk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKaW5kZXggMWYyYTE0MC4uNzU5NmVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCkBAIC00NCw3ICs0NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byAqZmlyc3RfcHJvdG87CiAKLXN0YXRpYyBpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoraW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBIRExDX01BWF9NVFUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUyLDE1ICs1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhkbGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQotCi0KLQogc3RhdGljIGludCBoZGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CkBAIC03NSw3ICs2NiwxNSBAQAogCXJldHVybiBoZGxjLT5wcm90by0+bmV0aWZfcngoc2tiKTsKIH0KIAoraW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAorCWlmIChoZGxjLT5wcm90by0+eG1pdCkKKwkJcmV0dXJuIGhkbGMtPnByb3RvLT54bWl0KHNrYiwgZGV2KTsKKworCXJldHVybiBoZGxjLT54bWl0KHNrYiwgZGV2KTsgLyogY2FsbCBoYXJkd2FyZSBkcml2ZXIgZGlyZWN0bHkgKi8KK30KIAogc3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEwMiwxMSArMTAxLDExIEBACiAJaGRsY19kZXZpY2UgKmhkbGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb247Ci0gCisKIAlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0JaWYgKGRldi0+Z2V0X3N0YXRzICE9IGhkbGNfZ2V0X3N0YXRzKQorCWlmICghKGRldi0+cHJpdl9mbGFncyAmIElGRl9XQU5fSERMQykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsgLyogbm90IGFuIEhETEMgZGV2aWNlICovCiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX0NIQU5HRSkKQEAgLTIzMywxNSArMjMyLDEzIEBACiAJLyogUmUtaW5pdCBhbGwgdmFyaWFibGVzIGNoYW5nZWQgYnkgSERMQyBwcm90b2NvbCBkcml2ZXJzLAogCSAqIGluY2x1ZGluZyBldGhlcl9zZXR1cCgpIGNhbGxlZCBmcm9tIGhkbGNfcmF3X2V0aC5jLgogCSAqLwotCWRldi0+Z2V0X3N0YXRzCQkgPSBoZGxjX2dldF9zdGF0czsKIAlkZXYtPmZsYWdzCQkgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5wcml2X2ZsYWdzCQkgPSBJRkZfV0FOX0hETEM7CiAJZGV2LT5tdHUJCSA9IEhETENfTUFYX01UVTsKIAlkZXYtPnR5cGUJCSA9IEFSUEhSRF9SQVdIRExDOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCSA9IDE2OwogCWRldi0+YWRkcl9sZW4JCSA9IDA7CiAJZGV2LT5oZWFkZXJfb3BzCQkgPSAmaGRsY19udWxsX29wczsKLQotCWRldi0+Y2hhbmdlX210dQkJID0gaGRsY19jaGFuZ2VfbXR1OwogfQogCiBzdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzksNiArMzM2LDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigiSERMQyBzdXBwb3J0IG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCitFWFBPUlRfU1lNQk9MKGhkbGNfY2hhbmdlX210dSk7CitFWFBPUlRfU1lNQk9MKGhkbGNfc3RhcnRfeG1pdCk7CiBFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7CiBFWFBPUlRfU1lNQk9MKGhkbGNfY2xvc2UpOwogRVhQT1JUX1NZTUJPTChoZGxjX2lvY3RsKTsKQEAgLTM0OSw4ICszNDgsOCBAQAogRVhQT1JUX1NZTUJPTChhdHRhY2hfaGRsY19wcm90b2NvbCk7CiBFWFBPUlRfU1lNQk9MKGRldGFjaF9oZGxjX3Byb3RvY29sKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBoZGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaGRsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyksCiAJLmZ1bmMgPSBoZGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCmluZGV4IDQ0ZTY0YjE1Li5jZjVmZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCWRhdGEtPnR5cGUgPSBodG9ubCh0eXBlKTsKIAlkYXRhLT5wYXIxID0gcGFyMTsKIAlkYXRhLT5wYXIyID0gcGFyMjsKLQlkYXRhLT5yZWwgPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRik7CisJZGF0YS0+cmVsID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAkvKiB3ZSB3aWxsIG5lZWQgZG9fZGl2IGhlcmUgaWYgMTAwMCAlIEhaICE9IDAgKi8KIAlkYXRhLT50aW1lID0gaHRvbmwoKGppZmZpZXMgLSBJTklUSUFMX0pJRkZJRVMpICogKDEwMDAgLyBIWikpOwogCkBAIC0xMzYsMjAgKzEzNiwyMCBAQAogCXN0cnVjdCBoZGxjX2hlYWRlciAqZGF0YSA9IChzdHJ1Y3QgaGRsY19oZWFkZXIqKXNrYi0+ZGF0YTsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKQotCQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKTsKKwkJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0hETEMpOwogCiAJaWYgKGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fTVVMVElDQVNUICYmCiAJICAgIGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fVU5JQ0FTVCkKLQkJcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyk7CisJCXJldHVybiBjcHVfdG9fYmUxNihFVEhfUF9IRExDKTsKIAogCXN3aXRjaChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBYKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGRhdGEtPnByb3RvY29sOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpOworCQlyZXR1cm4gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyk7CiAJfQogfQogCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJY2FzZSBDSVNDT19BRERSX1JFUTogLyogU3RvbGVuIGZyb20gc3luY3BwcC5jIDotKSAqLwogCQkJaW5fZGV2ID0gZGV2LT5pcF9wdHI7CiAJCQlhZGRyID0gMDsKLQkJCW1hc2sgPSBfX2NvbnN0YW50X2h0b25sKH4wKTsgLyogaXMgdGhlIG1hc2sgY29ycmVjdD8gKi8KKwkJCW1hc2sgPSB+Y3B1X3RvX2JlMzIoMCk7IC8qIGlzIHRoZSBtYXNrIGNvcnJlY3Q/ICovCiAKIAkJCWlmIChpbl9kZXYgIT0gTlVMTCkgewogCQkJCXN0cnVjdCBpbl9pZmFkZHIgKippZmFwID0gJmluX2Rldi0+aWZhX2xpc3Q7CkBAIC0zODIsNyArMzgyLDYgQEAKIAogCQltZW1jcHkoJnN0YXRlKGhkbGMpLT5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7CiAJCXNwaW5fbG9ja19pbml0KCZzdGF0ZShoZGxjKS0+bG9jayk7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsYy0+eG1pdDsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmNpc2NvX2hlYWRlcl9vcHM7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9DSVNDTzsKIAkJbmV0aWZfZG9ybWFudF9vbihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKaW5kZXggZjFkZGQ3Yy4uODAwNTMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCkBAIC0yNzgsMzEgKzI3OCwzMSBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSAqc2tiX3A7CiAKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgorCWNhc2UgY3B1X3RvX2JlMTYoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9DQ0lUVF9BTlNJX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0lTQ09fTE1JKToKKwljYXNlIGNwdV90b19iZTE2KE5MUElEX0NJU0NPX0xNSSk6CiAJCWhlYWRfbGVuID0gNDsKIAkJc2tiX3B1c2goc2tiLCBoZWFkX2xlbik7CiAJCXNrYi0+ZGF0YVszXSA9IE5MUElEX0NJU0NPX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9JUDsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJaGVhZF9sZW4gPSA0OwogCQlza2JfcHVzaChza2IsIGhlYWRfbGVuKTsKIAkJc2tiLT5kYXRhWzNdID0gTkxQSURfSVBWNjsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOgogCQloZWFkX2xlbiA9IDEwOwogCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBoZWFkX2xlbikgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsCkBAIC00MjYsNyArNDI2LDcgQEAKIAkJCQlza2JfcHV0KHNrYiwgcGFkKTsKIAkJCQltZW1zZXQoc2tiLT5kYXRhICsgbGVuLCAwLCBwYWQpOwogCQkJfQotCQkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOworCQkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8zKTsKIAkJfQogCQlpZiAoIWZyX2hhcmRfaGVhZGVyKCZza2IsIHB2Yy0+ZGxjaSkpIHsKIAkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC00NDQsMTggKzQ0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgaW50IHB2Y19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IEhETENfTUFYX01UVSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWRldi0+bXR1ID0gbmV3X210dTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcl9sb2dfZGxjaV9hY3RpdmUocHZjX2RldmljZSAqcHZjKQogewogCXByaW50ayhLRVJOX0lORk8gIiVzOiBETENJICVkIFslcyVzJXNdJXMgJXNcbiIsCkBAIC01MDgsMTAgKzQ5NiwxMCBAQAogCW1lbXNldChza2ItPmRhdGEsIDAsIGxlbik7CiAJc2tiX3Jlc2VydmUoc2tiLCA0KTsKIAlpZiAobG1pID09IExNSV9DSVNDTykgewotCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhOTFBJRF9DSVNDT19MTUkpOworCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoTkxQSURfQ0lTQ09fTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NJU0NPX0RMQ0kpOwogCX0gZWxzZSB7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NDSVRUX0FOU0lfRExDSSk7CiAJfQogCWRhdGEgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CkBAIC0xMDY4LDYgKzEwNTYsMTQgQEAKIAlkZXYtPmFkZHJfbGVuID0gMjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwdmNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHB2Y19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHB2Y19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gcHZjX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gcHZjX2lvY3RsLAorfTsKKwogc3RhdGljIGludCBmcl9hZGRfcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpmcmFkLCB1bnNpZ25lZCBpbnQgZGxjaSwgaW50IHR5cGUpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKQEAgLTExMDQsMTEgKzExMDAsNyBAQAogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGRsY2kpOwogCQlkbGNpX3RvX3E5MjIoZGV2LT5icm9hZGNhc3QsIGRsY2kpOwogCX0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHB2Y194bWl0OwotCWRldi0+b3BlbiA9IHB2Y19vcGVuOwotCWRldi0+c3RvcCA9IHB2Y19jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gcHZjX2lvY3RsOwotCWRldi0+Y2hhbmdlX210dSA9IHB2Y19jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZwdmNfb3BzOwogCWRldi0+bXR1ID0gSERMQ19NQVhfTVRVOwogCWRldi0+dHhfcXVldWVfbGVuID0gMDsKIAlkZXYtPm1sX3ByaXYgPSBwdmM7CkBAIC0xMjYwLDggKzEyNTIsNiBAQAogCQkJc3RhdGUoaGRsYyktPmRjZV9wdmNfY291bnQgPSAwOwogCQl9CiAJCW1lbWNweSgmc3RhdGUoaGRsYyktPnNldHRpbmdzLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9GUkFEOwogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwppbmRleCA1N2ZlNzE0Li43MmE3Y2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwpAQCAtMTUwLDExICsxNTAsMTEgQEAKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0hETEMpOwogCiAJc3dpdGNoIChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhQSURfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQKToKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSk7CiAJCXJldHVybiBodG9ucyhFVEhfUF9JUCk7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoUElEX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0lQVjYpOwogCkBAIC01NTgsNyArNTU4LDYgQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLQogc3RhdGljIHZvaWQgcHBwX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwcm90byAqcHJvdG8gPSAoc3RydWN0IHByb3RvICopYXJnOwpAQCAtNjc5LDcgKzY3OCw2IEBACiAJCXBwcC0+a2VlcGFsaXZlX2ludGVydmFsID0gMTA7CiAJCXBwcC0+a2VlcGFsaXZlX3RpbWVvdXQgPSA2MDsKIAotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcik7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZwcHBfaGVhZGVyX29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1BQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKaW5kZXggODYxMjMxMS4uMTlmNTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKQEAgLTI3LDExICsyNyw5IEBACiAKIHN0YXRpYyBfX2JlMTYgcmF3X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0lQKTsKIH0KIAotCi0KIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IHJhd190eXBlX3RyYW5zLAogCS5pb2N0bAkJPSByYXdfaW9jdGwsCkBAIC04Niw3ICs4NCw2IEBACiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQltZW1jcHkoaGRsYy0+c3RhdGUsICZuZXdfc2V0dGluZ3MsIHNpemUpOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9SQVdIRExDOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYwppbmRleCBhMTNmYzMyLi40OWU2OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCkBAIC00NSw2ICs0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IGV0aF90eXBlX3RyYW5zLAorCS54bWl0CQk9IGV0aF90eCwKIAkuaW9jdGwJCT0gcmF3X2V0aF9pb2N0bCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKQEAgLTU2LDkgKzU3LDcgQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihyYXdfaGRsY19wcm90byk7CiAJcmF3X2hkbGNfcHJvdG8gbmV3X3NldHRpbmdzOwogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQlpbnQgcmVzdWx0OwotCWludCAoKm9sZF9jaF9tdHUpKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7Ci0JaW50IG9sZF9xbGVuOworCWludCByZXN1bHQsIG9sZF9xbGVuOwogCiAJc3dpdGNoIChpZnItPmlmcl9zZXR0aW5ncy50eXBlKSB7CiAJY2FzZSBJRl9HRVRfUFJPVE86CkBAIC05OSwxMSArOTgsOCBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJbWVtY3B5KGhkbGMtPnN0YXRlLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBldGhfdHg7Ci0JCW9sZF9jaF9tdHUgPSBkZXYtPmNoYW5nZV9tdHU7CiAJCW9sZF9xbGVuID0gZGV2LT50eF9xdWV1ZV9sZW47CiAJCWV0aGVyX3NldHVwKGRldik7Ci0JCWRldi0+Y2hhbmdlX210dSA9IG9sZF9jaF9tdHU7CiAJCWRldi0+dHhfcXVldWVfbGVuID0gb2xkX3FsZW47CiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwppbmRleCBjYmNiZjZmLi5iMWRjMjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJLmNsb3NlCQk9IHgyNV9jbG9zZSwKIAkuaW9jdGwJCT0geDI1X2lvY3RsLAogCS5uZXRpZl9yeAk9IHgyNV9yeCwKKwkueG1pdAkJPSB4MjVfeG1pdCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMjEzLDcgKzIxNCw2IEBACiAKIAkJaWYgKChyZXN1bHQgPSBhdHRhY2hfaGRsY19wcm90b2NvbChkZXYsICZwcm90bywgMCkpKQogCQkJcmV0dXJuIHJlc3VsdDsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB4MjVfeG1pdDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1gyNTsKIAkJbmV0aWZfZG9ybWFudF9vZmYoZGV2KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKaW5kZXggYWY1NGYwYy4uNTY3ZDRmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwpAQCAtMTczLDYgKzE3MywxNCBAQAogICoJRGVzY3JpcHRpb24gYmxvY2sgZm9yIGEgQ29tdHJvbCBIb3N0ZXNzIFNWMTEgY2FyZAogICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGVzc19vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaG9zdGVzc19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhvc3Rlc3NfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBob3N0ZXNzX2lvY3RsLAorfTsKKwogc3RhdGljIHN0cnVjdCB6ODUzMF9kZXYgKnN2MTFfaW5pdChpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCB6ODUzMF9kZXYgKnN2OwpAQCAtMjY3LDkgKzI3NSw3IEBACiAKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT5hdHRhY2ggPSBob3N0ZXNzX2F0dGFjaDsKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT54bWl0ID0gaG9zdGVzc19xdWV1ZV94bWl0OwotCW5ldGRldi0+b3BlbiA9IGhvc3Rlc3Nfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBob3N0ZXNzX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBob3N0ZXNzX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZob3N0ZXNzX29wczsKIAluZXRkZXYtPmJhc2VfYWRkciA9IGlvYmFzZTsKIAluZXRkZXYtPmlycSA9IGlycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKaW5kZXggMGRiZDg1Yi4uM2JmN2QzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYworKysgYi9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCkBAIC02MjIsNyArNjIyLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhzc19oZGxjX3J4X2lycVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCXFtZ3JfZGlzYWJsZV9pcnEocXVldWVfaWRzW3BvcnQtPmlkXS5yeCk7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IGhzc19oZGxjX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpAQCAtNjQ5LDE1ICs2NDksMTUgQEAKIAkJaWYgKChuID0gcXVldWVfZ2V0X2Rlc2MocnhxLCBwb3J0LCAwKSkgPCAwKSB7CiAjaWYgREVCVUdfUlgKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHNzX2hkbGNfcG9sbCIKLQkJCSAgICAgICAiIG5ldGlmX3J4X2NvbXBsZXRlXG4iLCBkZXYtPm5hbWUpOworCQkJICAgICAgICIgbmFwaV9jb21wbGV0ZVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJcW1ncl9lbmFibGVfaXJxKHJ4cSk7CiAJCQlpZiAoIXFtZ3Jfc3RhdF9lbXB0eShyeHEpICYmCi0JCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkgewogI2lmIERFQlVHX1JYCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoc3NfaGRsY19wb2xsIgotCQkJCSAgICAgICAiIG5ldGlmX3J4X3Jlc2NoZWR1bGUgc3VjY2VlZGVkXG4iLAorCQkJCSAgICAgICAiIG5hcGlfcmVzY2hlZHVsZSBzdWNjZWVkZWRcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKIAkJCQlxbWdyX2Rpc2FibGVfaXJxKHJ4cSk7CkBAIC0xMDY5LDcgKzEwNjksNyBAQAogCWhzc19zdGFydF9oZGxjKHBvcnQpOwogCiAJLyogd2UgbWF5IGFscmVhZHkgaGF2ZSBSWCBkYXRhLCBlbmFibGVzIElSUSAqLwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubG9jazoKQEAgLTEyMzAsNiArMTIzMCwxNCBAQAogICogaW5pdGlhbGl6YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzc19oZGxjX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoc3NfaGRsY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhzc19oZGxjX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaHNzX2hkbGNfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBoc3NfaW5pdF9vbmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcG9ydCAqcG9ydDsKQEAgLTEyNTQsOSArMTI2Miw3IEBACiAJaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJaGRsYy0+YXR0YWNoID0gaHNzX2hkbGNfYXR0YWNoOwogCWhkbGMtPnhtaXQgPSBoc3NfaGRsY194bWl0OwotCWRldi0+b3BlbiA9IGhzc19oZGxjX29wZW47Ci0JZGV2LT5zdG9wID0gaHNzX2hkbGNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGhzc19oZGxjX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZoc3NfaGRsY19vcHM7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJcG9ydC0+Y2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKIAlwb3J0LT5jbG9ja19yYXRlID0gMjA0ODAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwppbmRleCA1YjYxYjNlLi4yZGQ3OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCkBAIC01NSw3ICs1NSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpldGhkZXY7CS8qIGxpbmsgdG8gZXRoZXJuZXQgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UJKmF4ZGV2OwkJLyogbGFwYmV0aCBkZXZpY2UgKGxhcGIjKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkJLyogc29tZSBzdGF0aXN0aWNzICovCiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGxhcGJldGhfZGV2aWNlcyk7CkBAIC0xMDcsMTAgKzEwNiw5IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGxhcGJldGgtPmF4ZGV2KSkKIAkJZ290byBkcm9wX3VubG9jazsKIAotCWxhcGJldGgtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQogCWxlbiA9IHNrYi0+ZGF0YVswXSArIHNrYi0+ZGF0YVsxXSAqIDI1NjsKLQlsYXBiZXRoLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAKIAlza2JfcHVsbChza2IsIDIpOwkvKiBSZW1vdmUgdGhlIGxlbmd0aCBieXRlcyAqLwogCXNrYl90cmltKHNrYiwgbGVuKTsJLyogU2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KQEAgLTIxMCw4ICsyMDgsOCBAQAogCSpwdHIrKyA9IHNpemUgJSAyNTY7CiAJKnB0cisrID0gc2l6ZSAvIDI1NjsKIAotCWxhcGJldGgtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlsYXBiZXRoLT5zdGF0cy50eF9ieXRlcyArPSBzaXplOworCW5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy50eF9ieXRlcyArPSBzaXplOwogCiAJc2tiLT5kZXYgPSBkZXYgPSBsYXBiZXRoLT5ldGhkZXY7CiAKQEAgLTI1NSwxNSArMjUzLDYgQEAKIH0KIAogLyoKLSAqCVN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYXBiZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYXBiZXRoZGV2ICpsYXBiZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmxhcGJldGgtPnN0YXRzOwotfQotCi0vKgogICoJU2V0IEFYLjI1IGNhbGxzaWduCiAgKi8KIHN0YXRpYyBpbnQgbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTMxNCwxNCArMzAzLDE3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxhcGJldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IGxhcGJldGhfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGxhcGJldGhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBsYXBiZXRoX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyB2b2lkIGxhcGJldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhcGJldGhfeG1pdDsKLQlkZXYtPm9wZW4JICAgICA9IGxhcGJldGhfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IGxhcGJldGhfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmbGFwYmV0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gbGFwYmV0aF9nZXRfc3RhdHM7CiAJZGV2LT50eXBlICAgICAgICAgICAgPSBBUlBIUkRfWDI1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMzsKIAlkZXYtPm10dSAgICAgICAgICAgICA9IDEwMDA7CkBAIC00MjEsOCArNDEzLDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfREVDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfREVDKSwKIAkuZnVuYyA9IGxhcGJldGhfcmN2LAogfTsKIApAQCAtNDMwLDcgKzQyMiw4IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBsYXBiZXRoX2RldmljZV9ldmVudCwKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGFwYmV0aF9pbml0X2RyaXZlcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IGZlYWMzYjkuLjQ1YjE4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTgwNiw2ICs4MDYsMTYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsbWNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGxtY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGxtY19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGxtY19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBsbWNfZHJpdmVyX3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgID0gbG1jX2dldF9zdGF0cywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxtY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC04NDksMTEgKzg1OSw3IEBACiAJZGV2LT50eXBlID0gQVJQSFJEX0hETEM7CiAJZGV2X3RvX2hkbGMoZGV2KS0+eG1pdCA9IGxtY19zdGFydF94bWl0OwogCWRldl90b19oZGxjKGRldiktPmF0dGFjaCA9IGxtY19hdHRhY2g7Ci0JZGV2LT5vcGVuID0gbG1jX29wZW47Ci0JZGV2LT5zdG9wID0gbG1jX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gbG1jX2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotCWRldi0+dHhfdGltZW91dCA9IGxtY19kcml2ZXJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbG1jX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7IC8qIDEgc2Vjb25kICovCiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJc2MtPmxtY19kZXZpY2UgPSBkZXY7CkBAIC0xMDU5LDkgKzEwNjUsNiBAQAogICAgIGlmICgoZXJyID0gbG1jX3Byb3RvX29wZW4oc2MpKSAhPSAwKQogCSAgICByZXR1cm4gZXJyOwogCi0gICAgZGV2LT5kb19pb2N0bCA9IGxtY19pb2N0bDsKLQotCiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKICAgICBzYy0+ZXh0cmFfc3RhdHMudHhfdGJ1c3kwKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90by5jCmluZGV4IDk0YjRjMjAuLjA0NGE0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfcHJvdG8uYwpAQCAtNTEsMzAgKzUxLDE1IEBACiB2b2lkIGxtY19wcm90b19hdHRhY2gobG1jX3NvZnRjX3QgKnNjKSAvKkZPTEQwMCovCiB7CiAgICAgbG1jX3RyYWNlKHNjLT5sbWNfZGV2aWNlLCAibG1jX3Byb3RvX2F0dGFjaCBpbiIpOwotICAgIHN3aXRjaChzYy0+aWZfdHlwZSl7Ci0gICAgY2FzZSBMTUNfUFBQOgotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7Ci0gICAgICAgICAgICBkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE1DX05FVDoKLSAgICAgICAgeworICAgIGlmIChzYy0+aWZfdHlwZSA9PSBMTUNfTkVUKSB7CiAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7CiAgICAgICAgICAgICAvKgogCSAgICAgKiBUaGV5IHNldCBhIGZldyBiYXNpY3MgYmVjYXVzZSB0aGV5IGRvbid0IHVzZSBIRExDCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGRldi0+ZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UOwotCiAgICAgICAgICAgICBkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CiAgICAgICAgICAgICBkZXYtPmFkZHJfbGVuID0gMDsKICAgICAgICAgfQotICAgIGNhc2UgTE1DX1JBVzogLyogU2V0dXAgdGhlIHRhc2sgcXVldWUsIG1heWJlIHdlIHNob3VsZCBub3RpZnkgc29tZW9uZT8gKi8KLSAgICAgICAgewotICAgICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGxtY190cmFjZShzYy0+bG1jX2RldmljZSwgImxtY19wcm90b19hdHRhY2ggb3V0Iik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggNjk3NzE1YS4uODNkYTU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTMyNCw3ICszMjQsMTMgQEAKIAlrZnJlZShjYXJkKTsKIH0KIAotCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG4yX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBuMl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG4yX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gbjJfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuMl9ydW4odW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBpcnEsCiAJCQkgdW5zaWduZWQgbG9uZyB3aW5iYXNlLCBsb25nIHZhbGlkMCwgbG9uZyB2YWxpZDEpCkBAIC00NjAsOSArNDY2LDcgQEAKIAkJZGV2LT5tZW1fc3RhcnQgPSB3aW5iYXNlOwogCQlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgVVNFX1dJTkRPV1NJWkUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gbjJfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IG4yX29wZW47Ci0JCWRldi0+c3RvcCA9IG4yX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbjJfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCmluZGV4IGYyNDdlNWQuLjYwZWNlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCkBAIC0yODcsNyArMjg3LDEzIEBACiAJa2ZyZWUoY2FyZCk7CiB9CiAKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwYzMwMF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gcGMzMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwYzMwMF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHBjMzAwX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGMzMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtNDQ4LDkgKzQ1NCw3IEBACiAJCWRldi0+bWVtX3N0YXJ0ID0gcmFtcGh5czsKIAkJZGV2LT5tZW1fZW5kID0gcmFtcGh5cyArIHJhbXNpemUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gcGMzMDBfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHBjMzAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjMzAwX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmcGMzMDBfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggMTEwNGQzYS4uZTAzNWQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtMjY1LDcgKzI2NSwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNpMjAwX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBwY2kyMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwY2kyMDBfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBwY2kyMDBfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2kyMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTM5NSw5ICs0MDEsNyBAQAogCQlkZXYtPm1lbV9zdGFydCA9IHJhbXBoeXM7CiAJCWRldi0+bWVtX2VuZCA9IHJhbXBoeXMgKyByYW1zaXplIC0gMTsKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQkJZGV2LT5kb19pb2N0bCA9IHBjaTIwMF9pb2N0bDsKLQkJZGV2LT5vcGVuID0gcGNpMjAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjaTIwMF9jbG9zZTsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnBjaTIwMF9vcHM7CiAJCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSBzY2FfeG1pdDsKIAkJcG9ydC0+c2V0dGluZ3MuY2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCmluZGV4IDBhYTI4ZTEuLmY0MjExZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwpAQCAtNjgsNyArNjgsNiBAQAogLyogZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCiBzdHJ1Y3QgbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKIAogCXNwaW5sb2NrX3QJbG9jazsKQEAgLTExNyw3ICsxMTYsNiBAQAogc3RhdGljIGludCAgc2JuaV9jbG9zZSggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiBzdGF0aWMgaW50ICBzYm5pX2lvY3RsKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50ICk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICpzYm5pX2dldF9zdGF0cyggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIHZvaWQgIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2JuaV9pbnRlcnJ1cHQoIGludCwgdm9pZCAqICk7CkBAIC0yMDgsMTUgKzIwNiwyMSBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzYm5pX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNibmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gc2JuaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc2JuaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fZG9faW9jdGwJCT0gc2JuaV9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHNibmlfZGV2c2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cCggZGV2ICk7Ci0JZGV2LT5vcGVuCQk9ICZzYm5pX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZzYm5pX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gJnNibmlfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmc2JuaV9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwJCT0gJnNibmlfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKIH0KIAogaW50IF9faW5pdCBzYm5pX3Byb2JlKGludCB1bml0KQpAQCAtMjI5LDYgKzIzMyw4IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKKwogCXNwcmludGYoZGV2LT5uYW1lLCAic2JuaSVkIiwgdW5pdCk7CiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIApAQCAtNzIzLDEzICs3MjksMTEgQEAKIAkJCW5sLT53YWl0X2ZyYW1lbm8gPSAwLAogCQkJbmwtPmlucHBvcyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCQktPnN0YXRzLnJ4X2Vycm9ycysrLAotCQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQkJLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlubC0+bWFzdGVyLT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbHNlCi0JCQlubC0+c3RhdHMucnhfZXJyb3JzKyssCi0JCQlubC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkgICAgICAgIGRldi0+c3RhdHMucnhfZXJyb3JzKyssCisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbmRpZgogCQkJLyogbm93IHNraXAgYWxsIGZyYW1lcyB1bnRpbCBpc19maXJzdCAhPSAwICovCiAJfSBlbHNlCkBAIC03NDIsMTMgKzc0NiwxMSBAQAogCQkgKi8KIAkJbmwtPndhaXRfZnJhbWVubyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCSgoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKQotCQkJLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMucnhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICNlbHNlCi0JCW5sLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJbmwtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAjZW5kaWYKIAogCXJldHVybiAgZnJhbWVfb2s7CkBAIC03NTYsMTUgKzc1OCwxNiBAQAogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc2VuZF9jb21wbGV0ZSggc3RydWN0IG5ldF9sb2NhbCAgKm5sICkKK3NlbmRfY29tcGxldGUoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogeworCXN0cnVjdCBuZXRfbG9jYWwgICpubCA9IG5ldGRldl9wcml2KGRldik7CisKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X2J5dGVzCi0JCSs9IG5sLT50eF9idWZfcC0+bGVuOworCW5sLT5tYXN0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlubC0+bWFzdGVyLT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbHNlCi0JbmwtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlubC0+c3RhdHMudHhfYnl0ZXMgKz0gbmwtPnR4X2J1Zl9wLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbmRpZgogCWRldl9rZnJlZV9za2JfaXJxKCBubC0+dHhfYnVmX3AgKTsKIApAQCAtNzkyLDcgKzc5NSw3IEBACiAJCQkJCQkgICBubC0+bWF4ZnJhbWUsCiAJCQkJCQkgICBubC0+dHhfYnVmX3AtPmxlbiAtIG5sLT5vdXRwb3MpOwogCQkJZWxzZQotCQkJCXNlbmRfY29tcGxldGUoIG5sICksCisJCQkJc2VuZF9jb21wbGV0ZSggZGV2ICksCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZSggbmwtPm1hc3RlciApOwogI2Vsc2UKQEAgLTg4MSwxMyArODg0LDExIEBACiAJCWRldl9rZnJlZV9za2JfYW55KCBubC0+dHhfYnVmX3AgKSwKIAkJbmwtPnR4X2J1Zl9wID0gTlVMTCwKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnR4X2Vycm9ycysrLAotCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCS0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMudHhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZWxzZQotCQlubC0+c3RhdHMudHhfZXJyb3JzKyssCi0JCW5sLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrLAorCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZW5kaWYKIAogCW5sLT50eF9mcmFtZW5vCT0gMDsKQEAgLTEwMTcsMTQgKzEwMTgsMTMgQEAKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgbmwtPm1hc3RlciApOwogCW5ldGlmX3J4KCBza2IgKTsKLQkrKygoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKS0+c3RhdHMucnhfcGFja2V0czsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnJ4X2J5dGVzICs9Ci0JCW5sLT5pbnBwb3M7CisJKytubC0+bWFzdGVyLT5zdGF0cy5yeF9wYWNrZXRzOworCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZWxzZQogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyggc2tiLCBkZXYgKTsKIAluZXRpZl9yeCggc2tiICk7Ci0JKytubC0+c3RhdHMucnhfcGFja2V0czsKLQlubC0+c3RhdHMucnhfYnl0ZXMgKz0gbmwtPmlucHBvczsKKwkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZW5kaWYKIAlubC0+cnhfYnVmX3AgPSBOVUxMOwkvKiBwcm90b2NvbCBkcml2ZXIgd2lsbCBjbGVhciB0aGlzIHNrX2J1ZmYgKi8KIH0KQEAgLTExOTcsNyArMTE5Nyw3IEBACiBoYW5kbGVyX2F0dGFjaGVkOgogCiAJc3Bpbl9sb2NrKCAmbmwtPmxvY2sgKTsKLQltZW1zZXQoICZubC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKKwltZW1zZXQoICZkZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpICk7CiAJbWVtc2V0KCAmbmwtPmluX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHNibmlfaW5fc3RhdHMpICk7CiAKIAljYXJkX3N0YXJ0KCBkZXYgKTsKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAKIAkvKiBTdW1tYXJ5IHN0YXRpc3RpY3Mgb2YgTXVsdGlMaW5lIG9wZXJhdGlvbiB3aWxsIGJlIHN0b3JlZAogCSAgIGluIG1hc3RlcidzIGNvdW50ZXJzICovCi0JbWVtc2V0KCAmc25sLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSApOworCW1lbXNldCggJnNsYXZlX2Rldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKIAluZXRpZl9zdG9wX3F1ZXVlKCBzbGF2ZV9kZXYgKTsKIAluZXRpZl93YWtlX3F1ZXVlKCBkZXYgKTsJLyogTm93IHdlIGFyZSBhYmxlIHRvIHRyYW5zbWl0ICovCiAKQEAgLTE0NjQsMTQgKzE0NjQsNiBAQAogCiAjZW5kaWYKIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotc2JuaV9nZXRfc3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICkKLXsKLQlyZXR1cm4gICYoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQKIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgKQogewpAQCAtMTUyMCwxNyArMTUxMiwxOCBAQAogfQogCiB2b2lkCi1jbGVhbnVwX21vZHVsZSggdm9pZCApCitjbGVhbnVwX21vZHVsZSh2b2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwotCWludCAgbnVtOworCWludCBpOwogCi0JZm9yKCBudW0gPSAwOyAgbnVtIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytudW0gKQotCQlpZiggKGRldiA9IHNibmlfY2FyZHNbIG51bSBdKSAhPSBOVUxMICkgewotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoIGRldiApOwotCQkJcmVsZWFzZV9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCBTQk5JX0lPX0VYVEVOVCApOwotCQkJZnJlZV9uZXRkZXYoIGRldiApOworCWZvciAoaSA9IDA7ICBpIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzYm5pX2NhcmRzW2ldOworCQlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU0JOSV9JT19FWFRFTlQpOworCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJfQorCX0KIH0KIAogI2Vsc2UJLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCmluZGV4IDA5NDFhMjYuLjIzYjI2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCkBAIC0xNjksNiArMTY5LDE0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2VhbGV2ZWxfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHNlYWxldmVsX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc2VhbGV2ZWxfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBzZWFsZXZlbF9pb2N0bCwKK307CisKIHN0YXRpYyBpbnQgc2x2bF9zZXR1cChzdHJ1Y3Qgc2x2bF9kZXZpY2UgKnN2LCBpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19oZGxjZGV2KHN2KTsKQEAgLTE3Nyw5ICsxODUsNyBAQAogCiAJZGV2X3RvX2hkbGMoZGV2KS0+YXR0YWNoID0gc2VhbGV2ZWxfYXR0YWNoOwogCWRldl90b19oZGxjKGRldiktPnhtaXQgPSBzZWFsZXZlbF9xdWV1ZV94bWl0OwotCWRldi0+b3BlbiA9IHNlYWxldmVsX29wZW47Ci0JZGV2LT5zdG9wID0gc2VhbGV2ZWxfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHNlYWxldmVsX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzZWFsZXZlbF9vcHM7CiAJZGV2LT5iYXNlX2FkZHIgPSBpb2Jhc2U7CiAJZGV2LT5pcnEgPSBpcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKaW5kZXggNGJmZmI2Ny4uODg3YWNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKQEAgLTU0Nyw2ICs1NDcsMTUgQEAKIAogI2luY2x1ZGUgIndhbnhsZncuaW5jIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdhbnhsX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSB3YW54bF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHdhbnhsX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gd2FueGxfaW9jdGwsCisJLm5kb19nZXRfc3RhdHMgID0gd2FueGxfZ2V0X3N0YXRzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgd2FueGxfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtNzc3LDEyICs3ODYsOSBAQAogCQloZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gd2FueGxfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHdhbnhsX29wZW47Ci0JCWRldi0+c3RvcCA9IHdhbnhsX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmd2FueGxfb3BzOwogCQloZGxjLT5hdHRhY2ggPSB3YW54bF9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSB3YW54bF94bWl0OwotCQlkZXYtPmdldF9zdGF0cyA9IHdhbnhsX2dldF9zdGF0czsKIAkJcG9ydC0+Y2FyZCA9IGNhcmQ7CiAJCXBvcnQtPm5vZGUgPSBpOwogCQlnZXRfc3RhdHVzKHBvcnQpLT5jbG9ja2luZyA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IGU2ZTJjZTMuLmQ2N2UyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCQltZW1jcHkoc2wtPnhidWZmLCBzbC0+eGhlYWQsIHNsLT54bGVmdCk7CiAJCX0gZWxzZSAgewogCQkJc2wtPnhsZWZ0ID0gMDsKLQkJCXNsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIAlzbC0+eGhlYWQgPSBzbC0+eGJ1ZmY7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJCW1lbWNweShzbC0+cmJ1ZmYsIHJidWZmLCBzbC0+cmNvdW50KTsKIAkJfSBlbHNlICB7CiAJCQlzbC0+cmNvdW50ID0gMDsKLQkJCXNsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCQl9CiAJfQpAQCAtMTg4LDE4ICsxODgsMTkgQEAKIAogc3RhdGljIHZvaWQgeDI1X2FzeV9idW1wKHN0cnVjdCB4MjVfYXN5ICpzbCkKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2wtPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBjb3VudDsKIAlpbnQgZXJyOwogCiAJY291bnQgPSBzbC0+cmNvdW50OwotCXNsLT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihjb3VudCsxKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkJc2wtPmRldi0+bmFtZSk7Ci0JCXNsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCXNrYl9wdXNoKHNrYiwgMSk7CS8qIExBUEIgaW50ZXJuYWwgY29udHJvbCAqLwpAQCAtMjExLDcgKzIxMiw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJ4MjVfYXN5OiBkYXRhIHJlY2VpdmVkIGVyciAtICVkXG4iLCBlcnIpOwogCX0gZWxzZSB7CiAJCW5ldGlmX3J4KHNrYik7Ci0JCXNsLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIH0KIApAQCAtMjI2LDcgKzIyNyw3IEBACiAJCWxlbiA9IG10dTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0cnVuY2F0aW5nIG92ZXJzaXplZCB0cmFuc21pdCBwYWNrZXQhXG4iLAogCQkJCQlzbC0+ZGV2LT5uYW1lKTsKLQkJc2wtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJc2wtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl4MjVfYXN5X3VubG9jayhzbCk7CiAJCXJldHVybjsKIAl9CkBAIC0yNjYsNyArMjY3LDcgQEAKIAlpZiAoc2wtPnhsZWZ0IDw9IDApIHsKIAkJLyogTm93IHNlcmlhbCBidWZmZXIgaXMgYWxtb3N0IGZyZWUgJiB3ZSBjYW4gc3RhcnQKIAkJICogdHJhbnNtaXNzaW9uIG9mIGFub3RoZXIgcGFja2V0ICovCi0JCXNsLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXNsLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJY2xlYXJfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKTsKIAkJeDI1X2FzeV91bmxvY2soc2wpOwogCQlyZXR1cm47CkBAIC0zODMsNyArMzg0LDcgQEAKIAkvKiBXZSB3ZXJlIG5vdCBidXN5LCBzbyB3ZSBhcmUgbm93Li4uIDotKSAqLwogCWlmIChza2IgIT0gTlVMTCkgewogCQl4MjVfYXN5X2xvY2soc2wpOwotCQlzbC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXgyNV9hc3lfZW5jYXBzKHNsLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KQEAgLTUzMyw3ICs1MzQsNyBAQAogCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChmcCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpCi0JCQkJc2wtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCXNsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJY3ArKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MDgsMTQgKzYwOSw2IEBACiAJeDI1X2FzeV9mcmVlKHNsKTsKIH0KIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKngyNV9hc3lfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHgyNV9hc3kgKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJnNsLT5zdGF0czsKLX0KLQotCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqCQkJU1RBTkRBUkQgWC4yNSBFTkNBUFNVTEFUSU9OCQkgIAkgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02ODIsNyArNjc1LDcgQEAKIAkJCXNsLT5yYnVmZltzbC0+cmNvdW50KytdID0gczsKIAkJCXJldHVybjsKIAkJfQotCQlzbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJc2wtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCX0KIH0KQEAgLTcxOSw2ICs3MTIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4MjVfYXN5X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0geDI1X2FzeV9vcGVuX2RldiwKKwkubmRvX3N0b3AJPSB4MjVfYXN5X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJPSB4MjVfYXN5X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CT0geDI1X2FzeV9jaGFuZ2VfbXR1LAorfTsKKwogLyogSW5pdGlhbGlzZSB0aGUgWC4yNSBkcml2ZXIuICBDYWxsZWQgYnkgdGhlIGRldmljZSBpbml0IGNvZGUgKi8KIHN0YXRpYyB2b2lkIHgyNV9hc3lfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTczNCwxMyArNzM1LDggQEAKIAkgKi8KIAogCWRldi0+bXR1CQk9IFNMX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0geDI1X2FzeV90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmeDI1X2FzeV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWioyMDsKLQlkZXYtPm9wZW4JCT0geDI1X2FzeV9vcGVuX2RldjsKLQlkZXYtPnN0b3AJCT0geDI1X2FzeV9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgICAgID0geDI1X2FzeV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IHgyNV9hc3lfY2hhbmdlX210dTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CiAJZGV2LT5hZGRyX2xlbgkJPSAwOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfWDI1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaCBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmgKaW5kZXggNDE3NzAyMC4uOGYwZmMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaAorKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5oCkBAIC0yOCwxMCArMjgsNiBAQAogICB1bnNpZ25lZCBjaGFyCQkqeGJ1ZmY7CQkvKiB0cmFuc21pdHRlciBidWZmZXIJCSovCiAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAqeGhlYWQ7ICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IGJ5dGUgdG8gWE1JVCAqLwogICBpbnQgICAgICAgICAgICAgICAgICAgeGxlZnQ7ICAgICAgICAgIC8qIGJ5dGVzIGxlZnQgaW4gWE1JVCBxdWV1ZSAgICAgKi8KLQotICAvKiBYLjI1IGludGVyZmFjZSBzdGF0aXN0aWNzLiAqLwotICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogICBpbnQgICAgICAgICAgICAgICAgICAgYnVmZnNpemU7ICAgICAgIC8qIE1heCBidWZmZXJzIHNpemVzICAgICAgICAgICAgKi8KIAogICB1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEZsYWcgdmFsdWVzLyBtb2RlIGV0YwkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCmluZGV4IDNkMDA5NzEuLmFkNGU3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworKysgYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKQEAgLTE3NzUsNyArMTc3NSw4IEBACiAvKgogICoJTW9kdWxlIHN1cHBvcnQKICAqLwotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiR2VuZXJpYyBaODVDMzAvWjg1MjMwIGludGVyZmFjZSBkcml2ZXIgdjAuMDJcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KKwlLRVJOX0lORk8gIkdlbmVyaWMgWjg1QzMwL1o4NTIzMCBpbnRlcmZhY2UgZHJpdmVyIHYwLjAyXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCB6ODUyMzBfaW5pdF9kcml2ZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZQppbmRleCAxNjk2ZTkzLi41ZDllMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCWRyaXZlci5vCVwKIAlmdy5vCQlcCiAJb3AtcmZraWxsLm8JXAorCXN5c2ZzLm8JCVwKIAluZXRkZXYubwlcCiAJdHgubwkJXAogCXJ4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCmluZGV4IDE1ZDlmNTEuLmIzY2FkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwpAQCAtNTIsNyArNTIsNiBAQAogICoKICAqIGkyNDAwbV9kZXZfaW5pdGFsaXplKCkgICAgICAgQ2FsbGVkIGJ5IGkyNDAwbV9kZXZfc3RhcnQoKQogICogICBpMjQwMG1fc2V0X2luaXRfY29uZmlnKCkKLSAqICAgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKCkKICAqICAgaTI0MDBtX2NtZF9nZXRfc3RhdGUoKQogICogaTI0MDBtX2Rldl9zaHV0ZG93bigpICAgICAgICBDYWxsZWQgYnkgaTI0MDBtX2Rldl9zdG9wKCkKICAqICAgaTI0MDBtLT5idXNfcmVzZXQoKQpAQCAtOTQyLDggKzk0MSw4IEBACiAvKiBGaXJtd2FyZSBpbnRlcmZhY2UgdmVyc2lvbnMgd2Ugc3VwcG9ydCAqLwogZW51bSB7CiAJSTI0MDBNX0hESXZfTUFKT1IgPSA5LAotCUkyNDAwTV9IREl2X01BSk9SXzIgPSA4LAogCUkyNDAwTV9IREl2X01JTk9SID0gMSwKKwlJMjQwME1fSERJdl9NSU5PUl8yID0gMiwKIH07CiAKIApAQCAtOTU5LDYgKzk1OCwxMCBAQAogICogTG9uZyBmdW5jdGlvbiwgYnV0IHF1aXRlIHNpbXBsZTsgZmlyc3QgY2h1bmsgbGF1bmNoZXMgdGhlIGNvbW1hbmQKICAqIGFuZCBkb3VibGUgY2hlY2tzIHRoZSByZXBseSBmb3IgdGhlIHJpZ2h0IFRMVi4gVGhlbiB3ZSBwcm9jZXNzIHRoZQogICogVExWICh3aGVyZSB0aGUgbWVhdCBpcykuCisgKgorICogT25jZSB3ZSBwcm9jZXNzIHRoZSBUTFYgdGhhdCBnaXZlcyB1cyB0aGUgZmlybXdhcmUncyBpbnRlcmZhY2UKKyAqIHZlcnNpb24sIHdlIGVuY29kZSBpdCBhbmQgc2F2ZSBpdCBpbiBpMjQwMG0tPmZ3X3ZlcnNpb24gZm9yIGZ1dHVyZQorICogcmVmZXJlbmNlLgogICovCiBpbnQgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKIHsKQEAgLTEwMDksMjIgKzEwMTIsMjAgQEAKIAltaW5vciA9IGxlMTZfdG9fY3B1KGw0bXYtPm1pbm9yKTsKIAlicmFuY2ggPSBsZTE2X3RvX2NwdShsNG12LT5icmFuY2gpOwogCXJlc3VsdCA9IC1FSU5WQUw7Ci0JaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SCi0JICAgICYmIG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SXzIpIHsKLQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBtYWpvciBmdyBpbnRlcmZhY2UgdmVyc2lvbiAiCisJaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SKSB7CisJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgbWFqb3IgZncgdmVyc2lvbiAiCiAJCQkiJXUuJXUuJXVcbiIsIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKIAkJZ290byBlcnJvcl9iYWRfbWFqb3I7CiAJfQotCWlmIChtYWpvciA9PSBJMjQwME1fSERJdl9NQUpPUl8yKQotCQlkZXZfZXJyKGRldiwgImRlcHJlY2F0ZWQgbWFqb3IgZncgaW50ZXJmYWNlIHZlcnNpb24gIgotCQkJIiV1LiV1LiV1XG4iLCBtYWpvciwgbWlub3IsIGJyYW5jaCk7CiAJcmVzdWx0ID0gMDsKLQlpZiAobWlub3IgIT0gSTI0MDBNX0hESXZfTUlOT1IpCi0JCWRldl93YXJuKGRldiwgInVudGVzdGVkIG1pbm9yIGZ3IGZpcm13YXJlIHZlcnNpb24gJXUuJXUuJXVcbiIsCisJaWYgKG1pbm9yIDwgSTI0MDBNX0hESXZfTUlOT1JfMiAmJiBtaW5vciA+IEkyNDAwTV9IREl2X01JTk9SKQorCQlkZXZfd2FybihkZXYsICJ1bnRlc3RlZCBtaW5vciBmdyB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkJIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKLWVycm9yX2JhZF9tYWpvcjoKKwkvKiBZZXMsIHdlIGlnbm9yZSB0aGUgYnJhbmNoIC0tIHdlIGRvbid0IGhhdmUgdG8gdHJhY2sgaXQgKi8KKwlpMjQwMG0tPmZ3X3ZlcnNpb24gPSBtYWpvciA8PCAxNiB8IG1pbm9yOwogCWRldl9pbmZvKGRldiwgImZpcm13YXJlIGludGVyZmFjZSB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkgbWFqb3IsIG1pbm9yLCBicmFuY2gpOworZXJyb3JfYmFkX21ham9yOgogZXJyb3Jfbm9fdGx2OgogZXJyb3JfY21kX2ZhaWxlZDoKIAlrZnJlZV9za2IoYWNrX3NrYik7CkBAIC0xMjIxLDYgKzEyMjIsNzcgQEAKIAogCiAvKioKKyAqIGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0IC0gU2V0IHRoZSBkZXZpY2UncyBpZGxlIG1vZGUgdGltZW91dAorICoKKyAqIEBpMjQwMG06IGkyNDAwbSBkZXZpY2UgZGVzY3JpcHRvcgorICoKKyAqIEBtc2VjczogbWlsbGlzZWNvbmRzIGZvciB0aGUgdGltZW91dCB0byBlbnRlciBpZGxlIG1vZGUuIEJldHdlZW4KKyAqICAgICAxMDAgdG8gMzAwMDAwICg1bSk7IDAgdG8gZGlzYWJsZS4gSW4gaW5jcmVtZW50cyBvZiAxMDAuCisgKgorICogQWZ0ZXIgdGhpcyBAbXNlY3Mgb2YgdGhlIGxpbmsgYmVpbmcgaWRsZSAobm8gZGF0YSBiZWluZyBzZW50IG9yCisgKiByZWNlaXZlZCksIHRoZSBkZXZpY2Ugd2lsbCBuZWdvdGlhdGUgd2l0aCB0aGUgYmFzZXN0YXRpb24gZW50ZXJpbmcKKyAqIGlkbGUgbW9kZSBmb3Igc2F2aW5nIHBvd2VyLiBUaGUgY29ubmVjdGlvbiBpcyBtYWludGFpbmVkLCBidXQKKyAqIGdldHRpbmcgb3V0IG9mIGl0IChkb25lIGluIHR4LmMpIHdpbGwgcmVxdWlyZSBzb21lIG5lZ290aWF0aW9uLAorICogcG9zc2libGUgY3J5cHRvIHJlLWhhbmRzaGFrZSBhbmQgYSBwb3NzaWJsZSBESENQIHJlLWxlYXNlLgorICoKKyAqIE9ubHkgYXZhaWxhYmxlIGlmIGZ3X3ZlcnNpb24gPj0gMHgwMDA5MDAwMi4KKyAqCisgKiBSZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqLworaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgdW5zaWduZWQgbXNlY3MpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKmFja19za2I7CisJc3RydWN0IHsKKwkJc3RydWN0IGkyNDAwbV9sM2w0X2hkciBoZHI7CisJCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgY2l0OworCX0gKmNtZDsKKwljb25zdCBzdHJ1Y3QgaTI0MDBtX2wzbDRfaGRyICphY2s7CisJc2l6ZV90IGFja19sZW47CisJY2hhciBzdHJlcnJbMzJdOworCisJcmVzdWx0ID0gLUVOT1NZUzsKKwlpZiAoaTI0MDBtX2xlX3YxXzMoaTI0MDBtKSkKKwkJZ290byBlcnJvcl9hbGxvYzsKKwlyZXN1bHQgPSAtRU5PTUVNOworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCWdvdG8gZXJyb3JfYWxsb2M7CisJY21kLT5oZHIudHlwZSA9IGNwdV90b19sZTE2KEkyNDAwTV9NVF9HRVRfU1RBVEUpOworCWNtZC0+aGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSAtIHNpemVvZihjbWQtPmhkcikpOworCWNtZC0+aGRyLnZlcnNpb24gPSBjcHVfdG9fbGUxNihJMjQwME1fTDNMNF9WRVJTSU9OKTsKKworCWNtZC0+Y2l0Lmhkci50eXBlID0KKwkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9USU1FT1VUKTsKKwljbWQtPmNpdC5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZC0+Y2l0LnRpbWVvdXQpKTsKKwljbWQtPmNpdC50aW1lb3V0ID0gY3B1X3RvX2xlMzIobXNlY3MpOworCisJYWNrX3NrYiA9IGkyNDAwbV9tc2dfdG9fZGV2KGkyNDAwbSwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChJU19FUlIoYWNrX3NrYikpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaXNzdWUgJ3NldCBpZGxlIHRpbWVvdXQnIGNvbW1hbmQ6ICIKKwkJCSIlbGRcbiIsIFBUUl9FUlIoYWNrX3NrYikpOworCQlyZXN1bHQgPSBQVFJfRVJSKGFja19za2IpOworCQlnb3RvIGVycm9yX21zZ190b19kZXY7CisJfQorCWFjayA9IHdpbWF4X21zZ19kYXRhX2xlbihhY2tfc2tiLCAmYWNrX2xlbik7CisJcmVzdWx0ID0gaTI0MDBtX21zZ19jaGVja19zdGF0dXMoYWNrLCBzdHJlcnIsIHNpemVvZihzdHJlcnIpKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIidzZXQgaWRsZSB0aW1lb3V0JyAoMHglMDR4KSBjb21tYW5kIGZhaWxlZDogIgorCQkJIiVkIC0gJXNcbiIsIEkyNDAwTV9NVF9HRVRfU1RBVEUsIHJlc3VsdCwgc3RyZXJyKTsKKwkJZ290byBlcnJvcl9jbWRfZmFpbGVkOworCX0KKwlyZXN1bHQgPSAwOworCWtmcmVlX3NrYihhY2tfc2tiKTsKK2Vycm9yX2NtZF9mYWlsZWQ6CitlcnJvcl9tc2dfdG9fZGV2OgorCWtmcmVlKGNtZCk7CitlcnJvcl9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgogICogaTI0MDBtX2Rldl9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIG9uY2UgY29tbXVuaWNhdGlvbnMgYXJlIHJlYWR5CiAgKgogICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKQEAgLTEyMzgsMjYgKzEzMTAsNTUgQEAKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV9wYXJhbWV0ZXJzIGlkbGVfcGFyYW1zOworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgaWRsZV90aW1lb3V0OworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kMmhfZGF0YV9mb3JtYXQgZGY7CisJc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2RsX2hvc3RfcmVvcmRlciBkbGhyOwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fdGx2X2hkciAqYXJnc1s5XTsKIAl1bnNpZ25lZCBhcmdjID0gMDsKIAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBVc2VsZXNzIGZvciBub3cuLi5taWdodCBjaGFuZ2UgKi8KKwkvKiBEaXNhYmxlIGlkbGUgbW9kZT8gKGVuYWJsZWQgYnkgZGVmYXVsdCkgKi8KIAlpZiAoaTI0MDBtX2lkbGVfbW9kZV9kaXNhYmxlZCkgewotCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9Ci0JCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19JRExFX1BBUkFNRVRFUlMpOwotCQlpZGxlX3BhcmFtcy5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCi0JCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOwotCQlpZGxlX3BhcmFtcy5pZGxlX3RpbWVvdXQgPSAwOwotCQlpZGxlX3BhcmFtcy5pZGxlX3BhZ2luZ19pbnRlcnZhbCA9IDA7Ci0JCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCWlmIChpMjQwMG1fbGVfdjFfMyhpMjQwMG0pKSB7CisJCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTKTsKKwkJCWlkbGVfcGFyYW1zLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOworCQkJaWRsZV9wYXJhbXMuaWRsZV90aW1lb3V0ID0gMDsKKwkJCWlkbGVfcGFyYW1zLmlkbGVfcGFnaW5nX2ludGVydmFsID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCX0gZWxzZSB7CisJCQlpZGxlX3RpbWVvdXQuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfVElNRU9VVCk7CisJCQlpZGxlX3RpbWVvdXQuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJCXNpemVvZihpZGxlX3RpbWVvdXQpIC0gc2l6ZW9mKGlkbGVfdGltZW91dC5oZHIpKTsKKwkJCWlkbGVfdGltZW91dC50aW1lb3V0ID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3RpbWVvdXQuaGRyOworCQl9CisJfQorCWlmIChpMjQwMG1fZ2VfdjFfNChpMjQwMG0pKSB7CisJCS8qIEVuYWJsZSBleHRlbmRlZCBSWCBkYXRhIGZvcm1hdD8gKi8KKwkJZGYuaGRyLnR5cGUgPQorCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUKTsKKwkJZGYuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJc2l6ZW9mKGRmKSAtIHNpemVvZihkZi5oZHIpKTsKKwkJZGYuZm9ybWF0ID0gMTsKKwkJYXJnc1thcmdjKytdID0gJmRmLmhkcjsKKworCQkvKiBFbmFibGUgUlggZGF0YSByZW9yZGVyaW5nPworCQkgKiAoc3dpdGNoIGZsaXBwZWQgaW4gcnguYzppMjQwMG1fcnhfc2V0dXAoKSBhZnRlciBmdyB1cGxvYWQpICovCisJCWlmIChpMjQwMG0tPnJ4X3Jlb3JkZXIpIHsKKwkJCWRsaHIuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUik7CisJCQlkbGhyLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoZGxocikgLSBzaXplb2YoZGxoci5oZHIpKTsKKwkJCWRsaHIucmVvcmRlciA9IDE7CisJCQlhcmdzW2FyZ2MrK10gPSAmZGxoci5oZHI7CisJCX0KIAl9CiAJcmVzdWx0ID0gaTI0MDBtX3NldF9pbml0X2NvbmZpZyhpMjQwMG0sIGFyZ3MsIGFyZ2MpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yOwotCXJlc3VsdCA9IGkyNDAwbV9maXJtd2FyZV9jaGVjayhpMjQwMG0pOwkvKiBmdyB2ZXJzaW9ucyBvaz8gKi8KLQlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBlcnJvcjsKIAkvKgogCSAqIFVwZGF0ZSBzdGF0ZTogSGVyZSBpdCBqdXN0IGNhbGxzIGEgZ2V0IHN0YXRlOyBwYXJzaW5nIHRoZQogCSAqIHJlc3VsdCAoU3lzdGVtIFN0YXRlIFRMViBhbmQgUkYgU3RhdHVzIFRMViBbZG9uZSBpbiB0aGUgcngKQEAgLTEyNjYsNiArMTM2Nyw4IEBACiAJICovCiAJcmVzdWx0ID0gaTI0MDBtX2NtZF9nZXRfc3RhdGUoaTI0MDBtKTsKIGVycm9yOgorCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBkZXZpY2U6ICVkXG4iLCByZXN1bHQpOwogCWRfZm5lbmQoMywgZGV2LCAiKGkyNDAwbSAlcCkgPSAlZFxuIiwgaTI0MDBtLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmggYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmgKaW5kZXggMzE4M2JhYS4uNDhmYmZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kZWJ1Zy1sZXZlbHMuaApAQCAtMzgsNiArMzgsNyBAQAogCURfU1VCTU9EVUxFX0RFQ0xBUkUobmV0ZGV2KSwKIAlEX1NVQk1PRFVMRV9ERUNMQVJFKHJma2lsbCksCiAJRF9TVUJNT0RVTEVfREVDTEFSRShyeCksCisJRF9TVUJNT0RVTEVfREVDTEFSRShzeXNmcyksCiAJRF9TVUJNT0RVTEVfREVDTEFSRSh0eCksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggZTgwYTBiNi4uMDdhNTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtNDgsNiArNDgsNyBAQAogICogICAgICAgaTI0MDBtX2Rldl9ib290c3RyYXAoKQogICogICAgICAgaTI0MDBtX3R4X3NldHVwKCkKICAqICAgICAgIGkyNDAwbS0+YnVzX2Rldl9zdGFydCgpCisgKiAgICAgICBpMjQwMG1fZmlybXdhcmVfY2hlY2soKQogICogICAgICAgaTI0MDBtX2NoZWNrX21hY19hZGRyKCkKICAqICAgd2ltYXhfZGV2X2FkZCgpCiAgKgpAQCAtNzUsNiArNzYsMTEgQEAKIAkJICJJZiB0cnVlLCB0aGUgZGV2aWNlIHdpbGwgbm90IGVuYWJsZSBpZGxlIG1vZGUgbmVnb3RpYXRpb24gIgogCQkgIndpdGggdGhlIGJhc2Ugc3RhdGlvbiAod2hlbiBjb25uZWN0ZWQpIHRvIHNhdmUgcG93ZXIuIik7CiAKK2ludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsJLyogMCAocnggcmVvcmRlciBlbmFibGVkKSBieSBkZWZhdWx0ICovCittb2R1bGVfcGFyYW1fbmFtZWQocnhfcmVvcmRlcl9kaXNhYmxlZCwgaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X3Jlb3JkZXJfZGlzYWJsZWQsCisJCSAiSWYgdHJ1ZSwgUlggcmVvcmRlcmluZyB3aWxsIGJlIGRpc2FibGVkLiIpOworCiAvKioKICAqIGkyNDAwbV9xdWV1ZV93b3JrIC0gc2NoZWR1bGUgd29yayBvbiBhIGkyNDAwbSdzIHF1ZXVlCiAgKgpAQCAtMzk1LDYgKzQwMSw5IEBACiAJcmVzdWx0ID0gaTI0MDBtX3R4X3NldHVwKGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfdHhfc2V0dXA7CisJcmVzdWx0ID0gaTI0MDBtX3J4X3NldHVwKGkyNDAwbSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3Jfcnhfc2V0dXA7CiAJcmVzdWx0ID0gaTI0MDBtLT5idXNfZGV2X3N0YXJ0KGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYnVzX2Rldl9zdGFydDsKQEAgLTQwNCw2ICs0MTMsOSBAQAogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJZ290byBlcnJvcl9jcmVhdGVfd29ya3F1ZXVlOwogCX0KKwlyZXN1bHQgPSBpMjQwMG1fZmlybXdhcmVfY2hlY2soaTI0MDBtKTsJLyogZncgdmVyc2lvbnMgb2s/ICovCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfZndfY2hlY2s7CiAJLyogQXQgdGhpcyBwb2ludCBpcyBvayB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgKi8KIAlyZXN1bHQgPSBpMjQwMG1fY2hlY2tfbWFjX2FkZHIoaTI0MDBtKTsKIAlpZiAocmVzdWx0IDwgMCkKQEAgLTQyMSwxMCArNDMzLDEzIEBACiAKIGVycm9yX2Rldl9pbml0aWFsaXplOgogZXJyb3JfY2hlY2tfbWFjX2FkZHI6CitlcnJvcl9md19jaGVjazoKIAlkZXN0cm95X3dvcmtxdWV1ZShpMjQwMG0tPndvcmtfcXVldWUpOwogZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZToKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOwogZXJyb3JfYnVzX2Rldl9zdGFydDoKKwlpMjQwMG1fcnhfcmVsZWFzZShpMjQwMG0pOworZXJyb3Jfcnhfc2V0dXA6CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIGVycm9yX3R4X3NldHVwOgogZXJyb3JfYm9vdHN0cmFwOgpAQCAtNDcyLDYgKzQ4Nyw3IEBACiAJaTI0MDBtLT5yZWFkeSA9IDA7CiAJZGVzdHJveV93b3JrcXVldWUoaTI0MDBtLT53b3JrX3F1ZXVlKTsKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOworCWkyNDAwbV9yeF9yZWxlYXNlKGkyNDAwbSk7CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIAl3aW1heF9zdGF0ZV9jaGFuZ2Uod2ltYXhfZGV2LCBXSU1BWF9TVF9ET1dOKTsKIAlkX2ZuZW5kKDMsIGRldiwgIihpMjQwMG0gJXApID0gMFxuIiwgaTI0MDBtKTsKQEAgLTYxMyw3ICs2MjksNyBAQAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKIAogCXNucHJpbnRmKHdpbWF4X2Rldi0+bmFtZSwgc2l6ZW9mKHdpbWF4X2Rldi0+bmFtZSksCi0JCSAiaTI0MDBtLSVzOiVzIiwgZGV2LT5idXMtPm5hbWUsIGRldi0+YnVzX2lkKTsKKwkJICJpMjQwMG0tJXM6JXMiLCBkZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CiAKIAlpMjQwMG0tPmJtX2NtZF9idWYgPSBremFsbG9jKEkyNDAwTV9CTV9DTURfQlVGX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChpMjQwMG0tPmJtX2NtZF9idWYgPT0gTlVMTCkgewpAQCAtNjU3LDYgKzY3MywxMSBAQAogCXdpbWF4X3N0YXRlX2NoYW5nZSh3aW1heF9kZXYsIFdJTUFYX1NUX1VOSU5JVElBTElaRUQpOwogCiAJLyogTm93IHNldHVwIGFsbCB0aGF0IHJlcXVpcmVzIGEgcmVnaXN0ZXJlZCBuZXQgYW5kIHdpbWF4IGRldmljZS4gKi8KKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ldF9kZXYtPmRldi5rb2JqLCAmaTI0MDBtX2Rldl9hdHRyX2dyb3VwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBpMjQwMG0ncyBzeXNmczogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc3lzZnNfc2V0dXA7CisJfQogCXJlc3VsdCA9IGkyNDAwbV9kZWJ1Z2ZzX2FkZChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IHNldHVwIGkyNDAwbSdzIGRlYnVnZnM6ICVkXG4iLCByZXN1bHQpOwpAQCAtNjY2LDYgKzY4Nyw5IEBACiAJcmV0dXJuIHJlc3VsdDsKIAogZXJyb3JfZGVidWdmc19zZXR1cDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CitlcnJvcl9zeXNmc19zZXR1cDoKIAl3aW1heF9kZXZfcm0oJmkyNDAwbS0+d2ltYXhfZGV2KTsKIGVycm9yX3dpbWF4X2Rldl9hZGQ6CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CkBAIC02OTcsNiArNzIxLDggQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYpOwogCiAJaTI0MDBtX2RlYnVnZnNfcm0oaTI0MDBtKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CiAJd2ltYXhfZGV2X3JtKCZpMjQwMG0tPndpbWF4X2Rldik7CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoaTI0MDBtLT53aW1heF9kZXYubmV0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCmluZGV4IDFkODI3MWYuLjY3NWM2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCiAKIHN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0FDS19CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCisJY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9BQ0tfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKIH07CiAKIApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlmIChvZmZzZXQgKyBzZWN0aW9uX3NpemUgPiBiY2ZfbGVuKSB7CiAJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBiYWQgc2VjdGlvbiAjJXp1LCAiCiAJCQkJImVuZCAoQCV6dSkgYmV5b25kIEVPRiAoQCV6dSlcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgc2VjdGlvbiwKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHNlY3Rpb24sCiAJCQkJb2Zmc2V0ICsgc2VjdGlvbl9zaXplLCAgYmNmX2xlbik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcl9zZWN0aW9uX2JleW9uZF9lb2Y7CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCQkgICAgJmFjaywgc2l6ZW9mKGFjayksIEkyNDAwTV9CTV9DTURfUkFXKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IHNlY3Rpb24gIyV6dSAoQCV6dSAlenUgQikgIgotCQkJCSJmYWlsZWQgJWRcbiIsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIHNlY3Rpb24sCisJCQkJImZhaWxlZCAlZFxuIiwgaTI0MDBtLT5md19uYW1lLCBzZWN0aW9uLAogCQkJCW9mZnNldCwgc2l6ZW9mKCpiaCkgKyBkYXRhX3NpemUsIChpbnQpIHJldCk7CiAJCQlnb3RvIGVycm9yX3NlbmQ7CiAJCX0KQEAgLTc3MSw4ICs3NzEsOCBAQAogaW50IGkyNDAwbV9kbmxvYWRfaW5pdF9ub25zaWduZWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQogewogI2RlZmluZSBQT0tFKGEsIGQpIHsJCQkJCVwKLQkuYWRkcmVzcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYSksCQlcCi0JLmRhdGEgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKGQpCQlcCisJLmFkZHJlc3MgPSBjcHVfdG9fbGUzMihhKSwJCVwKKwkuZGF0YSA9IGNwdV90b19sZTMyKGQpCQlcCiB9CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJCV9fbGUzMiBhZGRyZXNzOwpAQCAtODc0LDcgKzg3NCw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogbm9uLXNpZ25lZCBkb3dubG9hZCAiCiAJCQkJImluaXRpYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgcmVzdWx0KTsKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHJlc3VsdCk7CiAJfSBlbHNlIGlmIChpMjQwMG0tPnNib290ID09IDAKIAkJICYmIChtb2R1bGVfaWQgJiBJMjQwME1fQkNGX01PRF9JRF9QT0tFUykpIHsKIAkJLyogbm9uLXNpZ25lZCBib290IHByb2Nlc3Mgd2l0aCBwb2tlcywgbm90aGluZyB0byBkbyAqLwpAQCAtODg2LDcgKzg4Niw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogc2lnbmVkIGJvb3QgZG93bmxvYWQgIgogCQkJCSJpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJlc3VsdCk7CisJCQkJaTI0MDBtLT5md19uYW1lLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtOTE1LDcgKzkxNSw3IEBACiAJaWYgKGJjZl9zaXplIDwgc2l6ZW9mKCpiY2YpKSB7CS8qIGJpZyBlbm91Z2ggaGVhZGVyPyAqLwogCQlkZXZfZXJyKGRldiwgImZpcm13YXJlICVzIHRvbyBzaG9ydDogIgogCQkJIiV6dSBCIHZzICV6dSAoYXQgbGVhc3QpIGV4cGVjdGVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgYmNmX3NpemUsIHNpemVvZigqYmNmKSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplb2YoKmJjZikpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtOTMxLDcgKzkzMSw3IEBACiAJaWYgKGJjZl9zaXplICE9IHNpemUpIHsJCS8qIGFubm95aW5nbHkgcGFyYW5vaWQgKi8KIAkJZGV2X2VycihkZXYsICJmaXJtd2FyZSAlczogYmFkIHNpemUsIGdvdCAiCiAJCQkiJXp1IEIgdnMgJXUgZXhwZWN0ZWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk0Myw3ICs5NDMsNyBAQAogCiAJaWYgKG1vZHVsZV90eXBlICE9IDYpIHsJCS8qIGJ1aWx0IGZvciB0aGUgcmlnaHQgaGFyZHdhcmU/ICovCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzOiB1bmV4cGVjdGVkIG1vZHVsZSB0eXBlIDB4JXg7ICIKLQkJCSJhYm9ydGluZ1xuIiwgaTI0MDBtLT5idXNfZndfbmFtZSwgbW9kdWxlX3R5cGUpOworCQkJImFib3J0aW5nXG4iLCBpMjQwMG0tPmZ3X25hbWUsIG1vZHVsZV90eXBlKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk1MSwxMCArOTUxLDEwIEBACiAJcmVzdWx0ID0gMDsKIAlpZiAobW9kdWxlX3ZlbmRvciAhPSAweDgwODYpCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzPyB1bmV4cGVjdGVkIHZlbmRvciAweCUwNHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBtb2R1bGVfdmVuZG9yKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgbW9kdWxlX3ZlbmRvcik7CiAJaWYgKGRhdGUgPCAweDIwMDgwMzAwKQogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlcz8gYnVpbGQgZGF0ZSB0b28gb2xkICUwOHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBkYXRlKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgZGF0ZSk7CiBlcnJvcjoKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkJZ290byBlcnJvcl9kZXZfcmVib290ZWQ7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJmdyAlczogZG93bmxvYWQgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIHJldCk7CiAJCWdvdG8gZXJyb3JfZG5sb2FkX2JjZjsKIAl9CiAKQEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImZ3ICVzOiAiCiAJCQkiZG93bmxvYWQgZmluYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOworCQkJaTI0MDBtLT5md19uYW1lLCByZXQpOwogCQlnb3RvIGVycm9yX2RubG9hZF9maW5hbGl6ZTsKIAl9CiAKIAlkX3ByaW50ZigyLCBkZXYsICJmdyAlcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcbiIsCi0JCSBpMjQwMG0tPmJ1c19md19uYW1lKTsKKwkJIGkyNDAwbS0+ZndfbmFtZSk7CiAJaTI0MDBtLT5ib290X21vZGUgPSAwOwogZXJyb3JfZG5sb2FkX2ZpbmFsaXplOgogZXJyb3JfZG5sb2FkX2JjZjoKQEAgLTEwNjcsMjggKzEwNjcsNDEgQEAKICAqLwogaW50IGkyNDAwbV9kZXZfYm9vdHN0cmFwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgZW51bSBpMjQwMG1fYnJpIGZsYWdzKQogewotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBpdHIgPSAwOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fYmNmX2hkciAqYmNmOwkvKiBGaXJtd2FyZSBkYXRhICovCisJY29uc3QgY2hhciAqZndfbmFtZTsKIAogCWRfZm5zdGFydCg1LCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBMb2FkIGZpcm13YXJlIGZpbGVzIHRvIG1lbW9yeS4gKi8KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgaTI0MDBtLT5idXNfZndfbmFtZSwgZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiZncgJXM6IHJlcXVlc3QgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7Ci0JCWdvdG8gZXJyb3JfZndfcmVxOwotCX0KLQliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKIAorCS8qIExvYWQgZmlybXdhcmUgZmlsZXMgdG8gbWVtb3J5LiAqLworCWl0ciA9IDA7CisJd2hpbGUoMSkgeworCQlmd19uYW1lID0gaTI0MDBtLT5idXNfZndfbmFtZXNbaXRyXTsKKwkJaWYgKGZ3X25hbWUgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgZmluZCBhIHVzYWJsZSBmaXJtd2FyZSBpbWFnZVxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBlcnJvcl9ub19mdzsKKwkJfQorCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgZGV2KTsKKwkJaWYgKHJldCA9PSAwKQorCQkJYnJlYWs7CQkvKiBnb3QgaXQgKi8KKwkJaWYgKHJldCA8IDApCisJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBjYW5ub3QgbG9hZCBmaWxlOiAlZFxuIiwKKwkJCQlmd19uYW1lLCByZXQpOworCQlpdHIrKzsKKwl9CisKKwliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKKwlpMjQwMG0tPmZ3X25hbWUgPSBmd19uYW1lOwogCXJldCA9IGkyNDAwbV9md19jaGVjayhpMjQwMG0sIGJjZiwgZnctPnNpemUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX2Z3X2JhZDsKIAlyZXQgPSBpMjQwMG1fZndfZG5sb2FkKGkyNDAwbSwgYmNmLCBmdy0+c2l6ZSwgZmxhZ3MpOwogZXJyb3JfZndfYmFkOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotZXJyb3JfZndfcmVxOgorZXJyb3Jfbm9fZnc6CiAJZF9mbmVuZCg1LCBkZXYsICIoaTI0MDBtICVwKSA9ICVkXG4iLCBpMjQwMG0sIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAppbmRleCAzYjlkMjdlYS4uM2FlMmRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaApAQCAtMTU2LDEwICsxNTYsNiBAQAogfTsKIAogCi0vKiBGaXJtd2FyZSB2ZXJzaW9uIHdlIHJlcXVlc3Qgd2hlbiBwdWxsaW5nIHRoZSBmdyBpbWFnZSBmaWxlICovCi0jZGVmaW5lIEkyNDAwTV9GV19WRVJTSU9OICIxLjQiCi0KLQogLyoqCiAgKiBpMjQwMG1fcmVzZXRfdHlwZSAtIG1ldGhvZHMgdG8gcmVzZXQgYSBkZXZpY2UKICAqCkBAIC0xNzgsNiArMTc0LDcgQEAKIH07CiAKIHN0cnVjdCBpMjQwMG1fcmVzZXRfY3R4Oworc3RydWN0IGkyNDAwbV9yb3E7CiAKIC8qKgogICogc3RydWN0IGkyNDAwbSAtIGRlc2NyaXB0b3IgZm9yIGFuIEludGVsIDI0MDBtCkBAIC0yNDIsMTAgKzIzOSwxNCBAQAogICogICAgIFRoZSBjYWxsZXIgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBhCiAgKiAgICAgYmFya2VyIHRoYXQgaW5kaWNhdGVzIHRoZSBkZXZpY2UgZ29pbmcgaW50byByZXNldCBtb2RlLgogICoKLSAqIEBidXNfZndfbmFtZTogW2ZpbGxdIG5hbWUgb2YgdGhlIGZpcm13YXJlIGltYWdlIChpbiBtb3N0IGNhc2VzLAotICogICAgIHRoZXkgYXJlIGFsbCB0aGUgc2FtZSBmb3IgYSBzaW5nbGUgcmVsZWFzZSwgZXhjZXB0IHRoYXQgdGhleQotICogICAgIGhhdmUgdGhlIHR5cGUgb2YgdGhlIGJ1cyBlbWJlZGRlZCBpbiB0aGUgbmFtZSAoZWc6Ci0gKiAgICAgaTI0MDBtLWZ3LVgtVkVSU0lPTi5zYmNmLCB3aGVyZSBYIGlzIHRoZSBidXMgbmFtZSkuCisgKiBAYnVzX2Z3X25hbWVzOiBbZmlsbF0gYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgdGhlCisgKiAgICAgZmlybXdhcmUgaW1hZ2VzIHRvIHRyeSBsb2FkaW5nLiBUaGlzIGlzIG1hZGUgYSBsaXN0IHNvIHdlIGNhbgorICogICAgIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBmaXJtd2FyZSByZWxlYXNlcyAoZWc6IGlmIHdlCisgKiAgICAgY2FuJ3QgZmluZCB0aGUgZGVmYXVsdCB2MS40LCB3ZSB0cnkgdjEuMykuIEluIGdlbmVyYWwsIHRoZSBuYW1lCisgKiAgICAgc2hvdWxkIGJlIGkyNDAwbS1mdy1YLVZFUlNJT04uc2JjZiwgd2hlcmUgWCBpcyB0aGUgYnVzIG5hbWUuCisgKiAgICAgVGhlIGxpc3QgaXMgdHJpZWQgaW4gb3JkZXIgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBsb2FkcyBpcworICogICAgIHVzZWQuIFRoZSBmdyBsb2FkZXIgd2lsbCBzZXQgaTI0MDBtLT5md19uYW1lIHRvIHBvaW50IHRvIHRoZQorICogICAgIGFjdGl2ZSBmaXJtd2FyZSBpbWFnZS4KICAqCiAgKiBAYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOiBbZmlsbF0gU2V0IHRvIHRydWUgaWYgdGhlIGRldmljZSdzIE1BQwogICogICAgIGFkZHJlc3MgcHJvdmlkZWQgaW4gYm9vdCBtb2RlIGlzIGtpbmQgb2YgYnJva2VuIGFuZCBuZWVkcyB0bwpAQCAtMjU3LDYgKzI1OCw5IEBACiAgKiAgICAgZm9yY2UgdGhpcyB0byBiZSB0aGUgZmlyc3QgZmllbGQgc28gdGhhdCB3ZSBjYW4gZ2V0IGZyb20KICAqICAgICBuZXRkZXZfcHJpdigpIHRoZSByaWdodCBwb2ludGVyLgogICoKKyAqIEByeF9yZW9yZGVyOiAxIGlmIFJYIHJlb3JkZXJpbmcgaXMgZW5hYmxlZDsgdGhpcyBjYW4gb25seSBiZQorICogICAgIHNldCBhdCBwcm9iZSB0aW1lLgorICoKICAqIEBzdGF0ZTogZGV2aWNlJ3Mgc3RhdGUgKGFzIHJlcG9ydGVkIGJ5IGl0KQogICoKICAqIEBzdGF0ZV93cTogd2FpdHF1ZXVlIHRoYXQgaXMgd29rZW4gdXAgd2hlbmV2ZXIgdGhlIHN0YXRlIGNoYW5nZXMKQEAgLTMxMyw2ICszMTcsMTIgQEAKICAqCiAgKiBAcnhfc2l6ZV9tYXg6IGJ1Z2dlc3QgUlggbWVzc2FnZSByZWNlaXZlZC4KICAqCisgKiBAcnhfcm9xOiBSWCBSZU9yZGVyIHF1ZXVlcy4gKGZ3ID49IHYxLjQpIFdoZW4gcGFja2V0cyBhcmUgcmVjZWl2ZWQKKyAqICAgICBvdXQgb2Ygb3JkZXIsIHRoZSBkZXZpY2Ugd2lsbCBhc2sgdGhlIGRyaXZlciB0byBob2xkIGNlcnRhaW4KKyAqICAgICBwYWNrZXRzIHVudGlsIHRoZSBvbmVzIHRoYXQgYXJlIHJlY2VpdmVkIG91dCBvZiBvcmRlciBjYW4gYmUKKyAqICAgICBkZWxpdmVyZWQuIFRoZW4gdGhlIGRyaXZlciBjYW4gcmVsZWFzZSB0aGVtIHRvIHRoZSBob3N0LiBTZWUKKyAqICAgICBkcml2ZXJzL25ldC9pMjQwMG0vcnguYyBmb3IgZGV0YWlscy4KKyAqCiAgKiBAaW5pdF9tdXRleDogTXV0ZXggdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlIGRldmljZSBicmluZ3VwCiAgKiAgICAgc2VxdWVuY2U7IHRoaXMgd2F5IGlmIHRoZSBkZXZpY2UgcmVib290cyBpbiB0aGUgbWlkZGxlLCB3ZQogICogICAgIGRvbid0IHRyeSB0byBkbyBhIGJyaW5ndXAgYWdhaW4gd2hpbGUgd2UgYXJlIHRlYXJpbmcgZG93biB0aGUKQEAgLTM2NCw2ICszNzQsMTEgQEAKICAqICAgICBUaGVzZSBoYXZlIHRvIGJlIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCBhIGNoaWxkIG9mCiAgKiAgICAgKHdpbWF4X2Rldi0+ZGVidWdmc19kZW50cnkpIHNvIHRoZXkgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUKICAqICAgICBtb2R1bGUgdW5sb2FkcywgYXMgd2UgZG9uJ3Qga2VlcCBlYWNoIGRlbnRyeS4KKyAqCisgKiBAZndfbmFtZTogbmFtZSBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyAqCisgKiBAZndfdmVyc2lvbjogdmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgaW50ZXJmYWNlLCBNYWpvci5taW5vciwKKyAqICAgICBlbmNvZGVkIGluIHRoZSBoaWdoIHdvcmQgYW5kIGxvdyB3b3JkIChtYWpvciA8PCAxNiB8IG1pbm9yKS4KICAqLwogc3RydWN0IGkyNDAwbSB7CiAJc3RydWN0IHdpbWF4X2RldiB3aW1heF9kZXY7CS8qIEZJUlNUISBTZWUgZG9jICovCkBAIC0zNzIsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBib290X21vZGU6MTsJCS8qIGlzIHRoZSBkZXZpY2UgaW4gYm9vdCBtb2RlPyAqLwogCXVuc2lnbmVkIHNib290OjE7CQkvKiBzaWduZWQgb3IgdW5zaWduZWQgZncgYm9vdCAqLwogCXVuc2lnbmVkIHJlYWR5OjE7CQkvKiBhbGwgcHJvYmluZyBzdGVwcyBkb25lICovCisJdW5zaWduZWQgcnhfcmVvcmRlcjoxOwkJLyogUlggcmVvcmRlciBpcyBlbmFibGVkICovCiAJdTggdHJhY2VfbXNnX2Zyb21fdXNlcjsJCS8qIGVjaG8gcnggbXNncyB0byAndHJhY2UnIHBpcGUgKi8KIAkJCQkJLyogdHlwZWQgdTggc28gZGVidWdmcy91OCBjYW4gdHdlYWsgKi8KIAllbnVtIGkyNDAwbV9zeXN0ZW1fc3RhdGUgc3RhdGU7CkBAIC0zODgsNyArNDA0LDcgQEAKIAkJCQkgICBzaXplX3QsIGludCBmbGFncyk7CiAJc3NpemVfdCAoKmJ1c19ibV93YWl0X2Zvcl9hY2spKHN0cnVjdCBpMjQwMG0gKiwKIAkJCQkgICAgICAgc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciAqLCBzaXplX3QpOwotCWNvbnN0IGNoYXIgKmJ1c19md19uYW1lOworCWNvbnN0IGNoYXIgKipidXNfZndfbmFtZXM7CiAJdW5zaWduZWQgYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOjE7CiAKIAlzcGlubG9ja190IHR4X2xvY2s7CQkvKiBwcm90ZWN0IFRYIHN0YXRlICovCkBAIC00MDAsMTAgKzQxNiwxMSBAQAogCXVuc2lnbmVkIHR4X3BsX251bSwgdHhfcGxfbWF4LCB0eF9wbF9taW4sCiAJCXR4X251bSwgdHhfc2l6ZV9hY2MsIHR4X3NpemVfbWluLCB0eF9zaXplX21heDsKIAotCS8qIFJYIHN0YXRzICovCisJLyogUlggc3R1ZmYgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0IFJYIHN0YXRlICovCiAJdW5zaWduZWQgcnhfcGxfbnVtLCByeF9wbF9tYXgsIHJ4X3BsX21pbiwKIAkJcnhfbnVtLCByeF9zaXplX2FjYywgcnhfc2l6ZV9taW4sIHJ4X3NpemVfbWF4OworCXN0cnVjdCBpMjQwMG1fcm9xICpyeF9yb3E7CS8qIG5vdCB1bmRlciByeF9sb2NrISAqLwogCiAJc3RydWN0IG11dGV4IG1zZ19tdXRleDsJCS8qIHNlcmlhbGl6ZSBjb21tYW5kIGV4ZWN1dGlvbiAqLwogCXN0cnVjdCBjb21wbGV0aW9uIG1zZ19jb21wbGV0aW9uOwpAQCAtNDIxLDYgKzQzOCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKndha2VfdHhfc2tiOwogCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CisJY29uc3QgY2hhciAqZndfbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlybXdhcmUgaW1hZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGZ3X3ZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSAqLwogfTsKIAogCkBAIC00MzUsNiArNDU0LDcgQEAKIAl3aW1heF9kZXZfaW5pdCgmaTI0MDBtLT53aW1heF9kZXYpOwogCiAJaTI0MDBtLT5ib290X21vZGUgPSAxOworCWkyNDAwbS0+cnhfcmVvcmRlciA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaTI0MDBtLT5zdGF0ZV93cSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaTI0MDBtLT50eF9sb2NrKTsKQEAgLTU3OCwxMiArNTk4LDE5IEBACiAgKiBEcml2ZXIgLyBkZXZpY2Ugc2V0dXAgYW5kIGludGVybmFsIGZ1bmN0aW9ucwogICovCiBleHRlcm4gdm9pZCBpMjQwMG1fbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK2V4dGVybiBpbnQgaTI0MDBtX3N5c2ZzX3NldHVwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CiBleHRlcm4gaW50IGkyNDAwbV90eF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOwogZXh0ZXJuIHZvaWQgaTI0MDBtX3dha2VfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBpMjQwMG1fdHhfcmVsZWFzZShzdHJ1Y3QgaTI0MDBtICopOwogCitleHRlcm4gaW50IGkyNDAwbV9yeF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3J4X3JlbGVhc2Uoc3RydWN0IGkyNDAwbSAqKTsKKwogZXh0ZXJuIHZvaWQgaTI0MDBtX25ldF9yeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkLAogCQkJICBjb25zdCB2b2lkICosIGludCk7CitleHRlcm4gdm9pZCBpMjQwMG1fbmV0X2VyeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosCisJCQkgICBlbnVtIGkyNDAwbV9jcyk7CiBlbnVtIGkyNDAwbV9wdDsKIGV4dGVybiBpbnQgaTI0MDBtX3R4KHN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGVudW0gaTI0MDBtX3B0KTsKIApAQCAtNjY0LDE3ICs2OTEsMTcgQEAKIGV4dGVybiB2b2lkIGkyNDAwbV90eF9tc2dfc2VudChzdHJ1Y3QgaTI0MDBtICopOwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9OQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX05CT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpCiB9OwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9TQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1NCT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpCiB9OwogCiAKQEAgLTcyMSw2ICs3NDgsNyBAQAogZXh0ZXJuIGludCBpMjQwMG1fZmlybXdhcmVfY2hlY2soc3RydWN0IGkyNDAwbSAqKTsKIGV4dGVybiBpbnQgaTI0MDBtX3NldF9pbml0X2NvbmZpZyhzdHJ1Y3QgaTI0MDBtICosCiAJCQkJICBjb25zdCBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgKiosIHNpemVfdCk7CitleHRlcm4gaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKiwgdW5zaWduZWQpOwogCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9nZXRfZXBkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgaW50IGVwKQpAQCAtNzMzLDYgKzc2MSwzMiBAQAogZXh0ZXJuIHZvaWQgaTI0MDBtX3JlcG9ydF90bHZfcmZfc3dpdGNoZXNfc3RhdHVzKAogCXN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgc3RydWN0IGkyNDAwbV90bHZfcmZfc3dpdGNoZXNfc3RhdHVzICopOwogCisvKgorICogSGVscGVycyBmb3IgZmlybXdhcmUgYmFja3dhcmRzIGNvbXBhYmlsaXR5CisgKgorICogQXMgd2UgYWltIHRvIHN1cHBvcnQgYXQgbGVhc3QgdGhlIGZpcm13YXJlIHZlcnNpb24gdGhhdCB3YXMKKyAqIHJlbGVhc2VkIHdpdGggdGhlIHByZXZpb3VzIGtlcm5lbC9kcml2ZXIgcmVsZWFzZSwgc29tZSBjb2RlIHdpbGwgYmUKKyAqIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgZGVwZW5kaW5nIG9uIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLiBPbiBlYWNoCisgKiByZWxlYXNlLCB0aGUgY29kZSB0byBzdXBwb3J0IGZ3IHJlbGVhc2VzIHBhc3QgdGhlIGxhc3QgdHdvIG9uZXMKKyAqIHdpbGwgYmUgcHVyZ2VkLgorICoKKyAqIEJ5IG1ha2luZyBpdCBkZXBlbmQgb24gdGhpcyBtYWNyb3MsIGl0IGlzIGVhc2llciB0byBrZWVwIGl0IGEgdGFiCisgKiBvbiB3aGF0IGhhcyB0byBnbyBhbmQgd2hhdCBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9sZV92MV8zKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGxvd2VyIG9yIHYxLjMgKi8KKwlyZXR1cm4gaTI0MDBtLT5md192ZXJzaW9uIDw9IDB4MDAwOTAwMDE7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9nZV92MV80KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGhpZ2hlciBvciB2MS40ICovCisJcmV0dXJuIGkyNDAwbS0+ZndfdmVyc2lvbiA+PSAweDAwMDkwMDAyOworfQorCiAKIC8qCiAgKiBEbyBhIG1pbGxpc2Vjb25kLXNsZWVwIGZvciBhbGxvd2luZyB3aXJlc2hhcmsgdG8gZHVtcCBhbGwgdGhlIGRhdGEKQEAgLTc1MCw2ICs4MDQsNyBAQAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIAogZXh0ZXJuIGludCBpMjQwMG1faWRsZV9tb2RlX2Rpc2FibGVkOworZXh0ZXJuIGludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsKIAogCiAjZW5kaWYgLyogI2lmbmRlZiBfX0kyNDAwTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYwppbmRleCA2M2ZlNzA4Li42YjFmZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCkBAIC0yOCwxMyArMjgsMTIgQEAKICAqIHNwYWNlIGFuZCBmcm9tIHRoZSBvdGhlciBzaWRlLiBUaGUgd29ybGQgaXMgKHNhZGx5KSBjb25maWd1cmVkIHRvCiAgKiB0YWtlIGluIG9ubHkgRXRoZXJuZXQgZGV2aWNlcy4uLgogICoKLSAqIEJlY2F1c2Ugb2YgdGhpcywgY3VycmVudGx5IHRoZXJlIGlzIGFuIGNvcHktZWFjaC1yeGVkLXBhY2tldAotICogb3ZlcmhlYWQgb24gdGhlIFJYIHBhdGguIEVhY2ggSVAgcGFja2V0IGhhcyB0byBiZSByZWFsbG9jYXRlZCB0bwotICogYWRkIGFuIGV0aGVybmV0IGhlYWRlciAoYXMgdGhlcmUgaXMgbm8gc3BhY2UgaW4gd2hhdCB3ZSBnZXQgZnJvbQotICogdGhlIGRldmljZSkuIFRoaXMgaXMgYSBrbm93biBkcmF3YmFjayBhbmQgY29taW5nIHZlcnNpb25zIG9mIHRoZQotICogZGV2aWNlJ3MgZmlybXdhcmUgYXJlIGJlaW5nIGNoYW5nZWQgdG8gYWRkIGhlYWRlciBzcGFjZSB0aGF0IGNhbiBiZQotICogdXNlZCB0byBpbnNlcnQgdGhlIGV0aGVybmV0IGhlYWRlciB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlIGFuZAotICogY29weS4KKyAqIEJlY2F1c2Ugb2YgdGhpcywgd2hlbiB1c2luZyBmaXJtd2FyZXMgPD0gdjEuMywgdGhlcmUgaXMgYW4KKyAqIGNvcHktZWFjaC1yeGVkLXBhY2tldCBvdmVyaGVhZCBvbiB0aGUgUlggcGF0aC4gRWFjaCBJUCBwYWNrZXQgaGFzCisgKiB0byBiZSByZWFsbG9jYXRlZCB0byBhZGQgYW4gZXRoZXJuZXQgaGVhZGVyIChhcyB0aGVyZSBpcyBubyBzcGFjZQorICogaW4gd2hhdCB3ZSBnZXQgZnJvbSB0aGUgZGV2aWNlKS4gVGhpcyBpcyBhIGtub3duIGRyYXdiYWNrIGFuZAorICogZmlybXdhcmVzID49IDEuNCBhZGQgaGVhZGVyIHNwYWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IHRoZQorICogZXRoZXJuZXQgaGVhZGVyIHdpdGhvdXQgaGF2aW5nIHRvIHJlYWxsb2NhdGUgYW5kIGNvcHkuCiAgKgogICogVFggZXJyb3IgaGFuZGxpbmcgaXMgdHJpY2t5OyBiZWNhdXNlIHdlIGhhdmUgdG8gRklGTy9xdWV1ZSB0aGUKICAqIGJ1ZmZlcnMgZm9yIHRyYW5zbWlzc2lvbiAoYXMgdGhlIGhhcmR3YXJlIGxpa2VzIGl0IGFnZ3JlZ2F0ZWQpLCB3ZQpAQCAtNjcsNyArNjYsOSBAQAogICogaTI0MDBtX3R4X3RpbWVvdXQgICAgICBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHRpbWVzIG91dAogICoKICAqIGkyNDAwbV9uZXRfcnggICAgICAgICAgQ2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4gYSBkYXRhIGZyYW1lIGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIChmaXJtd2FyZSA8PSAxLjMpCisgKiBpMjQwMG1fbmV0X2VyeCAgICAgICAgIENhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuIGEgZGF0YSBmcmFtZSBpcworICogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKGZpcm13YXJlID49IDEuNCkuCiAgKiBpMjQwMG1fbmV0ZGV2X3NldHVwICAgIENhbGxlZCB0byBzZXR1cCBhbGwgdGhlIG5ldGRldiBzdHVmZiBmcm9tCiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jX25ldGRldi4KICAqLwpAQCAtMzk2LDMwICszOTcsMTggQEAKICAqIENyZWF0ZSBhIGZha2UgZXRoZXJuZXQgaGVhZGVyCiAgKgogICogRm9yIGVtdWxhdGluZyBhbiBldGhlcm5ldCBkZXZpY2UsIGV2ZXJ5IHJlY2VpdmVkIElQIGhlYWRlciBoYXMgdG8KLSAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLgotICoKLSAqIFdoYXQgd2UgcmVjZWl2ZSBoYXMgKHBvdGVudGlhbGx5KSBtYW55IElQIHBhY2tldHMgY29uY2F0ZW5hdGVkIHdpdGgKLSAqIG5vIEVUSF9ITEVOIGJ5dGVzIHByZWZpeGVkLiBUaHVzIHRoZXJlIGlzIG5vIHNwYWNlIGZvciBhbiBldGgKLSAqIGhlYWRlci4KLSAqCi0gKiBXZSB3b3VsZCBoYXZlIHRvIHJlYWxsb2NhdGUgb3IgZG8gdWdseSBmcmFnbWVudCB0cmlja3MgaW4gb3JkZXIgdG8KLSAqIGFkZCBpdC4KLSAqCi0gKiBCdXQgd2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGhlYWRlciBzcGFjZSBvZiB0aGUgUlggdHJhbnNhY3Rpb24KLSAqICgqbXNnX2hkcikgYXMgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlOyB0aGVuIHdlJ2xsIHBvaW50IGFsbCB0aGUKLSAqIGRhdGEgc2ticyB0aGVyZSwgYXMgdGhleSBzaGFyZSB0aGUgc2FtZSBiYWNraW5nIHN0b3JlLgotICoKLSAqIFdlIG9ubHkgc3VwcG9ydCBJUHY0IGZvciB2MyBmaXJtd2FyZS4KKyAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLiBGYWtlIGl0IHdpdGggdGhlIGdpdmVuCisgKiBwcm90b2NvbC4KICAqLwogc3RhdGljCiB2b2lkIGkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgdm9pZCAqX2V0aF9oZHIpCisJCQkgICAgICAgdm9pZCAqX2V0aF9oZHIsIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGhfaGRyID0gX2V0aF9oZHI7CiAKIAltZW1jcHkoZXRoX2hkci0+aF9kZXN0LCBuZXRfZGV2LT5kZXZfYWRkciwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwogCW1lbXNldChldGhfaGRyLT5oX3NvdXJjZSwgMCwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwotCWV0aF9oZHItPmhfcHJvdG8gPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KEVUSF9QX0lQKTsKKwlldGhfaGRyLT5oX3Byb3RvID0gcHJvdG9jb2w7CiB9CiAKIApAQCAtNDMyLDYgKzQyMSwxMyBAQAogICogQGJ1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEKICAqIEBsZW46IGJ1ZmZlcidzIGxlbmd0aAogICoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG5vdyBmb3IgdGhlIHYxLjMgZmlybXdhcmUuIEl0IHdpbGwgYmUgZGVwcmVjYXRlZAorICogaW4gPj0gMi42LjMxLgorICoKKyAqIE5vdGUgdGhhdCBkdWUgdG8gZmlybXdhcmUgbGltaXRhdGlvbnMsIHdlIGRvbid0IGhhdmUgc3BhY2UgdG8gYWRkCisgKiBhbiBldGhlcm5ldCBoZWFkZXIsIHNvIHdlIG5lZWQgdG8gY29weSBlYWNoIHBhY2tldC4gRmlybXdhcmUKKyAqIHZlcnNpb25zID49IHYxLjQgZml4IHRoaXMgW3NlZSBpMjQwMG1fbmV0X2VyeCgpXS4KKyAqCiAgKiBXZSBqdXN0IGNsb25lIHRoZSBza2IgYW5kIHNldCBpdCB1cCBzbyB0aGF0IGl0J3Mgc2tiLT5kYXRhIHBvaW50ZXIKICAqIHBvaW50cyB0byAiYnVmIiBhbmQgaXQncyBsZW5ndGguCiAgKgpAQCAtNDc4LDcgKzQ3NCw4IEBACiAJCW1lbWNweShza2JfcHV0KHNrYiwgYnVmX2xlbiksIGJ1ZiwgYnVmX2xlbik7CiAJfQogCWkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoaTI0MDBtLT53aW1heF9kZXYubmV0X2RldiwKLQkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOKTsKKwkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAorCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtRVRIX0hMRU4pOwogCXNrYi0+ZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtNDk0LDYgKzQ5MSw3MyBAQAogfQogCiAKKy8qCisgKiBpMjQwMG1fbmV0X2VyeCAtIHBhc3MgYSBuZXR3b3JrIHBhY2tldCB0byB0aGUgc3RhY2sgKGV4dGVuZGVkIHZlcnNpb24pCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2I6IHRoZSBza2Igd2hlcmUgdGhlIHBhY2tldCBpcyAtIHRoZSBza2Igc2hvdWxkIGJlIHNldCB0byBwb2ludAorICogICAgIGF0IHRoZSBJUCBwYWNrZXQ7IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgZXRoZXJuZXQgaGVhZGVycyBpZgorICogICAgIG5lZWRlZC4KKyAqIEBjczogcGFja2V0IHR5cGUKKyAqCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBub3cgZm9yIGZpcm13YXJlID49IHYxLjQuIE5vdGUgaXQgaXMgcXVpdGUKKyAqIHNpbWlsYXIgdG8gaTI0MDBtX25ldF9yeCgpICh1c2VkIG9ubHkgZm9yIHYxLjMgZmlybXdhcmUpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgcnVuIGZyb20gYSB0aHJlYWQgY29udGV4dC4gSG93ZXZlciwgd2UKKyAqIHN0aWxsIHVzZSBuZXRpZl9yeCgpIGluc3RlYWQgb2YgbmV0aWZfcmVjZWl2ZV9za2IoKSBhcyB3YXMKKyAqIHJlY29tbWVuZGVkIGluIHRoZSBtYWlsaW5nIGxpc3QuIFJlYXNvbiBpcyBpbiBzb21lIHN0cmVzcyB0ZXN0cworICogd2hlbiBzZW5kaW5nL3JlY2VpdmluZyBhIGxvdCBvZiBkYXRhIHdlIHNlZW0gdG8gaGl0IGEgc29mdGxvY2sgaW4KKyAqIHRoZSBrZXJuZWwncyBUQ1AgaW1wbGVtZW50YXRpb24gW2Fyb3VkbiB0Y3BfZGVsYXlfdGltZXIoKV0uIFVzaW5nCisgKiBuZXRpZl9yeCgpIHRvb2sgY2FyZSBvZiB0aGUgaXNzdWUuCisgKgorICogVGhpcyBpcywgb2YgY291cnNlLCBzdGlsbCBvcGVuIHRvIGRvIG1vcmUgcmVzZWFyY2ggb24gd2h5IHJ1bm5pbmcKKyAqIHdpdGggbmV0aWZfcmVjZWl2ZV9za2IoKSBoaXRzIHRoaXMgc29mdGxvY2suIEZJWE1FLgorICovCit2b2lkIGkyNDAwbV9uZXRfZXJ4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIGVudW0gaTI0MDBtX2NzIGNzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJaW50IHByb3RvY29sOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFsldV0gY3MgJWQpXG4iLAorCQkgIGkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworCXN3aXRjaChjcykgeworCWNhc2UgSTI0MDBNX0NTX0lQVjRfMDoKKwljYXNlIEkyNDAwTV9DU19JUFY0OgorCQlwcm90b2NvbCA9IEVUSF9QX0lQOworCQlpMjQwMG1fcnhfZmFrZV9ldGhfaGVhZGVyKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYsCisJCQkJCSAgc2tiLT5kYXRhIC0gRVRIX0hMRU4sCisJCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKKwkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgLUVUSF9ITEVOKTsKKwkJc2tiLT5kZXYgPSBpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2OworCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCQluZXRfZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5ldF9kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIkVSWDogQlVHPyBDUyB0eXBlICV1IHVuc3VwcG9ydGVkXG4iLCBjcyk7CisJCWdvdG8gZXJyb3I7CisKKwl9CisJZF9wcmludGYoMywgZGV2LCAiRVJYOiByZWNlaXZpbmcgJWQgYnl0ZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2tcbiIsCisJCSBza2ItPmxlbik7CisJZF9kdW1wKDQsIGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJbmV0aWZfcnhfbmkoc2tiKTsJLyogc2VlIG5vdGVzIGluIGZ1bmN0aW9uIGhlYWRlciAqLworZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYiAlcCBbJXVdIGNzICVkKSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGkyNDAwbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGkyNDAwbV9vcGVuLAorCS5uZG9fc3RvcCA9IGkyNDAwbV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGkyNDAwbV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0ID0gaTI0MDBtX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHUsCit9OworCisKIC8qKgogICogaTI0MDBtX25ldGRldl9zZXR1cCAtIFNldHVwIHNldHVwIEBuZXRfZGV2J3MgaTI0MDBtIHByaXZhdGUgZGF0YQogICoKQEAgLTUxMywxMSArNTc3LDcgQEAKIAkJJiAofklGRl9CUk9BRENBU1QJLyogaTI0MDBtIGlzIFAyUCAqLwogCQkgICAmIH5JRkZfTVVMVElDQVNUKTsKIAluZXRfZGV2LT53YXRjaGRvZ190aW1lbyA9IEkyNDAwTV9UWF9USU1FT1VUOwotCW5ldF9kZXYtPm9wZW4gPSBpMjQwMG1fb3BlbjsKLQluZXRfZGV2LT5zdG9wID0gaTI0MDBtX3N0b3A7Ci0JbmV0X2Rldi0+aGFyZF9zdGFydF94bWl0ID0gaTI0MDBtX2hhcmRfc3RhcnRfeG1pdDsKLQluZXRfZGV2LT5jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHU7Ci0JbmV0X2Rldi0+dHhfdGltZW91dCA9IGkyNDAwbV90eF90aW1lb3V0OworCW5ldF9kZXYtPm5ldGRldl9vcHMgPSAmaTI0MDBtX25ldGRldl9vcHM7CiAJZF9mbmVuZCgzLCBOVUxMLCAiKG5ldF9kZXYgJXApID0gdm9pZFxuIiwgbmV0X2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpMjQwMG1fbmV0ZGV2X3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMKaW5kZXggNjkyMjAyMjcuLjAyNDE5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiAgLSBVc2Ugc2tiX2Nsb25lKCksIGJyZWFrIHVwIHByb2Nlc3NpbmcgaW4gY2h1bmtzCiAgKiAgLSBTcGxpdCB0cmFuc3BvcnQvZGV2aWNlIHNwZWNpZmljCiAgKiAgLSBNYWtlIGJ1ZmZlciBzaXplIGR5bmFtaWMgdG8gZXhlcnQgbGVzcyBtZW1vcnkgcHJlc3N1cmUKLSAqCisgKiAgLSBSWCByZW9yZGVyIHN1cHBvcnQKICAqCiAgKiBUaGlzIGhhbmRsZXMgdGhlIFJYIHBhdGguCiAgKgpAQCAtNjksNiArNjksNTAgQEAKICAqIFNlZSB0eC5jIGZvciBhIGRlZXBlciBkZXNjcmlwdGlvbiBvbiBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZAogICogb3RoZXIgZnVuIGZhY3RzIG9mIGl0LgogICoKKyAqIERBVEEgUEFDS0VUUworICoKKyAqIEluIGZpcm13YXJlcyA8PSB2MS4zLCBkYXRhIHBhY2tldHMgaGF2ZSBubyBoZWFkZXIgZm9yIFJYLCBidXQgdGhleQorICogZG8gZm9yIFRYIChjdXJyZW50bHkgdW51c2VkKS4KKyAqCisgKiBJbiBmaXJtd2FyZSA+PSAxLjQsIFJYIHBhY2tldHMgaGF2ZSBhbiBleHRlbmRlZCBoZWFkZXIgKDE2CisgKiBieXRlcykuIFRoaXMgaGVhZGVyIGNvbnZleXMgaW5mb3JtYXRpb24gZm9yIG1hbmFnZW1lbnQgb2YgaG9zdAorICogcmVvcmRlcmluZyBvZiBwYWNrZXRzICh0aGUgZGV2aWNlIG9mZmxvYWRzIHN0b3JhZ2Ugb2YgdGhlIHBhY2tldHMKKyAqIGZvciByZW9yZGVyaW5nIHRvIHRoZSBob3N0KS4gUmVhZCBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGUgaGVhZGVyIGlzIHVzZWQgYXMgZHVtbXkgc3BhY2UgdG8gZW11bGF0ZSBhbiBldGhlcm5ldCBoZWFkZXIgYW5kCisgKiB0aHVzIGJlIGFibGUgdG8gYWN0IGFzIGFuIGV0aGVybmV0IGRldmljZSB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlLgorICoKKyAqIERBVEEgUlggUkVPUkRFUklORworICoKKyAqIFN0YXJ0aW5nIGluIGZpcm13YXJlIHYxLjQsIHRoZSBkZXZpY2UgY2FuIGRlbGl2ZXIgcGFja2V0cyBmb3IKKyAqIGRlbGl2ZXJ5IHdpdGggc3BlY2lhbCByZW9yZGVyaW5nIGluZm9ybWF0aW9uOyB0aGlzIGFsbG93cyBpdCB0bworICogbW9yZSBlZmZlY3RpdmVseSBkbyBwYWNrZXQgbWFuYWdlbWVudCB3aGVuIHNvbWUgZnJhbWVzIHdlcmUgbG9zdCBpbgorICogdGhlIHJhZGlvIHRyYWZmaWMuCisgKgorICogVGh1cywgZm9yIFJYIHBhY2tldHMgdGhhdCBjb21lIG91dCBvZiBvcmRlciwgdGhlIGRldmljZSBnaXZlcyB0aGUKKyAqIGRyaXZlciBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcXVldWUgdGhlbSBwcm9wZXJseSBhbmQgdGhlbiBhdCBzb21lCisgKiBwb2ludCwgdGhlIHNpZ25hbCB0byBkZWxpdmVyIHRoZSB3aG9sZSAob3IgcGFydCkgb2YgdGhlIHF1ZXVlZAorICogcGFja2V0cyB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gVGhlcmUgYXJlIDE2IHN1Y2ggcXVldWVzLgorICoKKyAqIFRoaXMgb25seSBoYXBwZW5zIHdoZW4gYSBwYWNrZXQgY29tZXMgaW4gd2l0aCB0aGUgIm5lZWQgcmVvcmRlciIKKyAqIGZsYWcgc2V0IGluIHRoZSBSWCBoZWFkZXIuIFdoZW4gc3VjaCBiaXQgaXMgc2V0LCB0aGUgZm9sbG93aW5nCisgKiBvcGVyYXRpb25zIG1pZ2h0IGJlIGluZGljYXRlZDoKKyAqCisgKiAgLSByZXNldCBxdWV1ZTogc2VuZCBhbGwgcXVldWVkIHBhY2tldHMgdG8gdGhlIE9TCisgKgorICogIC0gcXVldWU6IHF1ZXVlIGEgcGFja2V0CisgKgorICogIC0gdXBkYXRlIHdzOiB1cGRhdGUgdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0IGFuZCBkZWxpdmVyIHF1ZXVlZAorICogICAgcGFja2V0cyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhCisgKgorICogIC0gcXVldWUgJiB1cGRhdGUgd3M6IHF1ZXVlIGEgcGFja2V0LCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydCBhbmQKKyAqICAgIGRlbGl2ZXIgcXVldWVkIHBhY2tldHMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYQorICoKKyAqIChkZWxpdmVyeSBjcml0ZXJpYTogdGhlIHBhY2tldCdzIFtub3JtYWxpemVkXSBzZXF1ZW5jZSBudW1iZXIgaXMKKyAqIGxvd2VyIHRoYW4gdGhlIG5ldyBbbm9ybWFsaXplZF0gd2luZG93IHN0YXJ0KS4KKyAqCisgKiBTZWUgdGhlIGkyNDAwbV9yb3FfKigpIGZ1bmN0aW9ucyBmb3IgZGV0YWlscy4KKyAqCiAgKiBST0FETUFQCiAgKgogICogaTI0MDBtX3J4CkBAIC03Niw2ICsxMjAsMTkgQEAKICAqICAgaTI0MDBtX3J4X3BsX2Rlc2NyX2NoZWNrCiAgKiAgIGkyNDAwbV9yeF9wYXlsb2FkCiAgKiAgICAgaTI0MDBtX25ldF9yeAorICogICAgIGkyNDAwbV9yeF9lZGF0YQorICogICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcmVzZXQKKyAqICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWUKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3F1ZXVlCisgKiAgICAgICBpMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWVfdXBkYXRlX3dzCisgKiAgICAgICAgIF9faTI0MDBtX3JvcV9xdWV1ZQorICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKICAqICAgICBpMjQwMG1fcnhfY3RsCiAgKiAgICAgICBpMjQwMG1fbXNnX3NpemVfY2hlY2sKICAqICAgICAgIGkyNDAwbV9yZXBvcnRfaG9va193b3JrICAgIFtpbiBhIHdvcmtxdWV1ZV0KQEAgLTE3Nyw4ICsyMzQsNyBAQAogCXJldHVybjsKIAogZXJyb3Jfd2FpdGVyX2NhbmNlbGxlZDoKLQlpZiAoYWNrX3NrYikKLQkJa2ZyZWVfc2tiKGFja19za2IpOworCWtmcmVlX3NrYihhY2tfc2tiKTsKIGVycm9yX25vX3dhaXRlcjoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMjQwMG0tPnJ4X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CkBAIC0yNjUsOCArMzIxLDYgQEAKIH0KIAogCi0KLQogLyoKICAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYSB0cmFjZQogICoKQEAgLTMxNywzMCArMzcxLDYyOCBAQAogCiAKIC8qCisgKiBSZW9yZGVyIHF1ZXVlIGRhdGEgc3RvcmVkIG9uIHNrYi0+Y2Igd2hpbGUgdGhlIHNrYiBpcyBxdWV1ZWQgaW4gdGhlCisgKiByZW9yZGVyIHF1ZXVlcy4KKyAqLworc3RydWN0IGkyNDAwbV9yb3FfZGF0YSB7CisJdW5zaWduZWQgc247CQkvKiBTZXJpYWwgbnVtYmVyIGZvciB0aGUgc2tiICovCisJZW51bSBpMjQwMG1fY3MgY3M7CS8qIHBhY2tldCB0eXBlIGZvciB0aGUgc2tiICovCit9OworCisKKy8qCisgKiBSZU9yZGVyIFF1ZXVlCisgKgorICogQHdzOiBXaW5kb3cgU3RhcnQ7IHNlcXVlbmNlIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCB3aW5kb3cgc3RhcnQKKyAqICAgICBpcyBmb3IgdGhpcyBxdWV1ZQorICogQHF1ZXVlOiB0aGUgc2tiIHF1ZXVlIGl0c2VsZgorICogQGxvZzogY2lyY3VsYXIgcmluZyBidWZmZXIgdXNlZCB0byBsb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiAgICAgcmVvcmRlciBwcm9jZXNzIGluIHRoaXMgcXVldWUgdGhhdCBjYW4gYmUgZGlzcGxheWVkIGluIGNhc2Ugb2YKKyAqICAgICBlcnJvciB0byBoZWxwIGRpYWdub3NlIGl0LgorICoKKyAqIFRoaXMgaXMgdGhlIGhlYWQgZm9yIGEgbGlzdCBvZiBza2JzLiBJbiB0aGUgc2tiLT5jYiBtZW1iZXIgb2YgdGhlCisgKiBza2Igd2hlbiBxdWV1ZWQgaGVyZSBjb250YWlucyBhICdzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhJyB3ZXJlIHdlCisgKiBzdG9yZSB0aGUgc2VxdWVuY2UgbnVtYmVyIChzbikgYW5kIHRoZSBjcyAocGFja2V0IHR5cGUpIGNvbWluZyBmcm9tCisgKiB0aGUgUlggcGF5bG9hZCBoZWFkZXIgZnJvbSB0aGUgZGV2aWNlLgorICovCitzdHJ1Y3QgaTI0MDBtX3JvcQoreworCXVuc2lnbmVkIHdzOworCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nICpsb2c7Cit9OworCisKK3N0YXRpYwordm9pZCBfX2kyNDAwbV9yb3FfaW5pdChzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXJvcS0+d3MgPSAwOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnJvcS0+cXVldWUpOworfQorCisKK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX2luZGV4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSByb3EgLSAodW5zaWduZWQgbG9uZykgaTI0MDBtLT5yeF9yb3EpCisJCS8gc2l6ZW9mKCpyb3EpOworfQorCisKKy8qCisgKiBOb3JtYWxpemUgYSBzZXF1ZW5jZSBudW1iZXIgYmFzZWQgb24gdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0CisgKgorICogbnNuID0gKHNuIC0gd3MpICUgMjA0OAorICoKKyAqIE5vdGUgdGhhdCBpZiBAc24gPCBAcm9xLT53cywgd2Ugc3RpbGwgbmVlZCBhIHBvc2l0aXZlIG51bWJlcjsgJSdzCisgKiBzaWduIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLCBzbyB3ZSBub3JtYWxpemUgaXQgYnkgYWRkaW5nIDIwNDgKKyAqIHRvIGJyaW5nIGl0IHRvIGJlIHBvc2l0aXZlLgorICovCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV9uc24oc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgdW5zaWduZWQgc24pCit7CisJaW50IHI7CisJciA9ICAoKGludCkgc24gLSAoaW50KSByb3EtPndzKSAlIDIwNDg7CisJaWYgKHIgPCAwKQorCQlyICs9IDIwNDg7CisJcmV0dXJuIHI7Cit9CisKKworLyoKKyAqIENpcmN1bGFyIGJ1ZmZlciB0byBrZWVwIHRoZSBsYXN0IE4gcmVvcmRlciBvcGVyYXRpb25zCisgKgorICogSW4gY2FzZSBzb21ldGhpbmcgZmFpbHMsIGR1bWIgdGhlbiB0byB0cnkgdG8gY29tZSB1cCB3aXRoIHdoYXQKKyAqIGhhcHBlbmVkLgorICovCitlbnVtIHsKKwlJMjQwME1fUk9RX0xPR19MRU5HVEggPSAzMiwKK307CisKK3N0cnVjdCBpMjQwMG1fcm9xX2xvZyB7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5IHsKKwkJZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlOworCQl1bnNpZ25lZCB3cywgY291bnQsIHNuLCBuc24sIG5ld193czsKKwl9IGVudHJ5W0kyNDAwTV9ST1FfTE9HX0xFTkdUSF07CisJdW5zaWduZWQgaW4sIG91dDsKK307CisKKworLyogUHJpbnQgYSBsb2cgZW50cnkgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHVuc2lnbmVkIGluZGV4LAorCQkJCXVuc2lnbmVkIGVfaW5kZXgsCisJCQkJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKworCXN3aXRjaChlLT50eXBlKSB7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJZGV2X2VycihkZXYsICJxIyVkIHJlc2V0ICAgICAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXUiCisJCQkiIC0gbmV3IG53cyAldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24sIGUtPm5ld193cyk7CisJCWJyZWFrOworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQlkZXZfZXJyKGRldiwgInEjJWQgcXVldWUgICAgICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24pOworCQlicmVhazsKKwljYXNlIEkyNDAwTV9ST19UWVBFX1dTOgorCQlkZXZfZXJyKGRldiwgInEjJWQgdXBkYXRlX3dzICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldSIKKwkJCSIgLSBuZXcgbndzICV1XG4iLAorCQkJaW5kZXgsIGUtPndzLCBlLT5jb3VudCwgZS0+c24sIGUtPm5zbiwgZS0+bmV3X3dzKTsKKwkJYnJlYWs7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCWRldl9lcnIoZGV2LCAicSMlZCBxdWV1ZV91cGRhdGVfd3Mgd3MgJXUgY250ICV1IHNuICV1LyV1IgorCQkJIiAtIG5ldyBud3MgJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuLCBlLT5uZXdfd3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInEjJWQgQlVHPyBlbnRyeSAldSAtIHVua25vd24gdHlwZSAldVxuIiwKKwkJCWluZGV4LCBlX2luZGV4LCBlLT50eXBlKTsKKwkJYnJlYWs7CisJfQorfQorCisKK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19hZGQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLAorCQkJc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlLAorCQkJdW5zaWduZWQgd3MsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCBzbiwKKwkJCXVuc2lnbmVkIG5zbiwgdW5zaWduZWQgbmV3X3dzKQoreworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZTsKKwl1bnNpZ25lZCBjbnRfaWR4OworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwkvKiBpZiB3ZSBydW4gb3V0IG9mIHNwYWNlLCB3ZSBlYXQgZnJvbSB0aGUgZW5kICovCisJaWYgKHJvcS0+bG9nLT5pbiAtIHJvcS0+bG9nLT5vdXQgPT0gSTI0MDBNX1JPUV9MT0dfTEVOR1RIKQorCQlyb3EtPmxvZy0+b3V0Kys7CisJY250X2lkeCA9IHJvcS0+bG9nLT5pbisrICUgSTI0MDBNX1JPUV9MT0dfTEVOR1RIOworCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCisJZS0+dHlwZSA9IHR5cGU7CisJZS0+d3MgPSB3czsKKwllLT5jb3VudCA9IGNvdW50OworCWUtPnNuID0gc247CisJZS0+bnNuID0gbnNuOworCWUtPm5ld193cyA9IG5ld193czsKKworCWlmIChkX3Rlc3QoMSkpCisJCWkyNDAwbV9yb3FfbG9nX2VudHJ5X3ByaW50KGkyNDAwbSwgaW5kZXgsIGNudF9pZHgsIGUpOworfQorCisKKy8qIER1bXAgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSBGSUZPIGFuZCByZWluaXRpYWxpemUgaXQgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19kdW1wKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwl1bnNpZ25lZCBjbnQsIGNudF9pZHg7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplOworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwlCVUdfT04ocm9xLT5sb2ctPm91dCA+IHJvcS0+bG9nLT5pbik7CisJZm9yIChjbnQgPSByb3EtPmxvZy0+b3V0OyBjbnQgPCByb3EtPmxvZy0+aW47IGNudCsrKSB7CisJCWNudF9pZHggPSBjbnQgJSBJMjQwME1fUk9RX0xPR19MRU5HVEg7CisJCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCQlpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChpMjQwMG0sIGluZGV4LCBjbnRfaWR4LCBlKTsKKwkJbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCX0KKwlyb3EtPmxvZy0+aW4gPSByb3EtPmxvZy0+b3V0ID0gMDsKK30KKworCisvKgorICogQmFja2JvbmUgZm9yIHRoZSBxdWV1aW5nIG9mIGFuIHNrYiAoYnkgbm9ybWFsaXplZCBzZXF1ZW5jZSBudW1iZXIpCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IHJlb3JkZXIgcXVldWUgd2hlcmUgdG8gYWRkCisgKiBAc2tiOiB0aGUgc2tiIHRvIGFkZAorICogQHNuOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBza2IKKyAqIEBuc246IHRoZSBub3JtYWxpemVkIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgc2tiIChwcmUtY29tcHV0ZWQgYnkgdGhlCisgKiAgICAgY2FsbGVyIGZyb20gdGhlIEBzbiBhbmQgQHJvcS0+d3MpLgorICoKKyAqIFdlIHRyeSBmaXJzdCBhIGNvdXBsZSBvZiBxdWljayBjYXNlczoKKyAqCisgKiAgIC0gdGhlIHF1ZXVlIGlzIGVtcHR5CisgKiAgIC0gdGhlIHNrYiB3b3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgcXVldWUKKyAqCisgKiBUaGVzZSB3aWxsIGJlIHRoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb25zLgorICoKKyAqIElmIHRoZXNlIGZhaWwsIHRoZW4gd2UgaGF2ZSB0byBkbyBhIHNvcnRlZCBpbnNlcnRpb24gaW4gdGhlIHF1ZXVlLAorICogd2hpY2ggaXMgdGhlIHNsb3dlc3QgcGF0aC4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIGFjcXVpcmUgYSByZWZlcmVuY2UgY291bnQgYXMgd2UgYXJlIGdvaW5nIHRvIG93biBpdC4KKyAqLworc3RhdGljCit2b2lkIF9faTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzbiwgdW5zaWduZWQgbnNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHIsICpyb3FfZGF0YTsKKwl1bnNpZ25lZCBuc25faXRyOworCisJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJXUpXG4iLAorCQkgIGkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCisJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpyb3FfZGF0YSkgPiBzaXplb2Yoc2tiLT5jYikpOworCXJvcV9kYXRhLT5zbiA9IHNuOworCWRfcHJpbnRmKDMsIGRldiwgIkVSWDogcm9xICVwIFt3cyAldV0gbnNuICVkIHNuICV1XG4iLAorCQkgcm9xLCByb3EtPndzLCBuc24sIHJvcV9kYXRhLT5zbik7CisKKwkvKiBRdWV1ZXMgd2lsbCBiZSBlbXB0eSBvbiBub3Qtc28tYmFkIGVudmlyb25tZW50cywgc28gdHJ5CisJICogdGhhdCBmaXJzdCAqLworCWlmIChza2JfcXVldWVfZW1wdHkoJnJvcS0+cXVldWUpKSB7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gZmlyc3Qgb25lXG4iLCByb3EpOworCQlfX3NrYl9xdWV1ZV9oZWFkKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm93IHRyeSBhcHBlbmQsIGFzIG1vc3Qgb2YgdGhlIG9wZXJhdGlvbnMgd2lsbCBiZSB0aGF0ICovCisJc2tiX2l0ciA9IHNrYl9wZWVrX3RhaWwoJnJvcS0+cXVldWUpOworCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwlpZiAobnNuID49IG5zbl9pdHIpIHsKKwkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSBhcHBlbmRlZCBhZnRlciAlcCAobnNuICVkIHNuICV1KVxuIiwKKwkJCSByb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCQlfX3NrYl9xdWV1ZV90YWlsKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm9uZSBvZiB0aGUgZmFzdCBwYXRocyBvcHRpb24gd29ya2VkLiBJdGVyYXRlIHRvIGZpbmQgdGhlCisJICogcmlnaHQgc3BvdCB3aGVyZSB0byBpbnNlcnQgdGhlIHBhY2tldDsgd2Uga25vdyB0aGUgcXVldWUgaXMKKwkgKiBub3QgZW1wdHksIHNvIHdlIGFyZSBub3QgdGhlIGZpcnN0IG9uZXM7IHdlIGFsc28ga25vdyB3ZQorCSAqIGFyZSBub3QgZ29pbmcgdG8gYmUgdGhlIGxhc3Qgb25lcy4gVGhlIGxpc3QgaXMgc29ydGVkLCBzbworCSAqIHdlIGhhdmUgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgdGhlIGZpcnN0IGd1eSB3aXRoIGFuIG5zbl9pdHIKKwkgKiBncmVhdGVyIHRoYXQgb3VyIG5zbi4gKi8KKwlza2JfcXVldWVfd2Fsaygmcm9xLT5xdWV1ZSwgc2tiX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPiBuc24pIHsKKwkJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gcXVldWVkIGJlZm9yZSAlcCAiCisJCQkJICIobnNuICVkIHNuICV1KVxuIiwgcm9xLCBza2JfaXRyLCBuc25faXRyLAorCQkJCSByb3FfZGF0YV9pdHItPnNuKTsKKwkJCV9fc2tiX3F1ZXVlX2JlZm9yZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCS8qIElmIHdlIGdldCBoZXJlLCB0aGF0IGlzIFZFUlkgYmFkIC0tIHByaW50IGluZm8gdG8gaGVscAorCSAqIGRpYWdub3NlIGFuZCBjcmFzaCBpdCAqLworCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBmYWlsZWQgdG8gaW5zZXJ0IHBhY2tldFxuIik7CisJZGV2X2VycihkZXYsICJFUlg6IHJvcSAlcCBbd3MgJXVdIHNrYiAlcCBuc24gJWQgc24gJXVcbiIsCisJCXJvcSwgcm9xLT53cywgc2tiLCBuc24sIHJvcV9kYXRhLT5zbik7CisJc2tiX3F1ZXVlX3dhbGsoJnJvcS0+cXVldWUsIHNrYl9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWRldl9lcnIoZGV2LCAiRVJYOiByb3EgJXAgc2tiX2l0ciAlcCBuc24gJWQgc24gJXVcbiIsCisJCQlyb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCX0KKwlCVUcoKTsKK291dDoKKwlkX2ZuZW5kKDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJWQpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBCYWNrYm9uZSBmb3IgdGhlIHVwZGF0ZSB3aW5kb3cgc3RhcnQgb3BlcmF0aW9uCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IFJlb3JkZXIgcXVldWUKKyAqIEBzbjogTmV3IHNlcXVlbmNlIG51bWJlcgorICoKKyAqIFVwZGF0ZXMgdGhlIHdpbmRvdyBzdGFydCBvZiBhIHF1ZXVlOyB3aGVuIGRvaW5nIHNvLCBpdCBtdXN0IGRlbGl2ZXIKKyAqIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFsbCB0aGUgcXVldWVkIHNrYidzIHdob3NlIG5vcm1hbGl6ZWQKKyAqIHNlcXVlbmNlIG51bWJlciBpcyBsb3dlciB0aGFuIHRoZSBuZXcgbm9ybWFsaXplZCB3aW5kb3cgc3RhcnQuCisgKi8KK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXN0cnVjdCBza19idWZmICpza2JfaXRyLCAqdG1wX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHI7CisJdW5zaWduZWQgbmV3X253cywgbnNuX2l0cjsKKworCW5ld19ud3MgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgc24pOworCWlmICh1bmxpa2VseShuZXdfbndzID49IDEwMjQpICYmIGRfdGVzdCgxKSkgeworCQlkZXZfZXJyKGRldiwgIlNXIEJVRz8gX191cGRhdGVfd3MgbmV3X253cyAldSAoc24gJXUgd3MgJXUpXG4iLAorCQkJbmV3X253cywgc24sIHJvcS0+d3MpOworCQlXQVJOX09OKDEpOworCQlpMjQwMG1fcm9xX2xvZ19kdW1wKGkyNDAwbSwgcm9xKTsKKwl9CisJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgdG1wX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPCBuZXdfbndzKSB7CisJCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwICIKKwkJCQkgIihuc24gJXUvJXUgbmV3IG53cyAldSlcbiIsCisJCQkJIHJvcSwgc2tiX2l0ciwgbnNuX2l0ciwgcm9xX2RhdGFfaXRyLT5zbiwKKwkJCQkgbmV3X253cyk7CisJCQlfX3NrYl91bmxpbmsoc2tiX2l0ciwgJnJvcS0+cXVldWUpOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwkJfQorCQllbHNlCisJCQlicmVhazsJLyogcmVzdCBvZiBwYWNrZXRzIGFsbCBuc25faXRyID4gbndzICovCisJfQorCXJvcS0+d3MgPSBzbjsKKwlyZXR1cm4gbmV3X253czsKK30KKworCisvKgorICogUmVzZXQgYSBxdWV1ZQorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICoKKyAqIERlbGl2ZXIgYWxsIHRoZSBwYWNrZXRzIGFuZCByZXNldCB0aGUgd2luZG93LXN0YXJ0IHRvIHplcm8uIE5hbWUgaXMKKyAqIGtpbmQgb2YgbWlzbGVhZGluZy4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfcmVzZXQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0ciwgKnRtcF9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwKVxuIiwgaTI0MDBtLCByb3EpOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUkVTRVQsCisJCQkgICAgIHJvcS0+d3MsIHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpLAorCQkJICAgICB+MCwgfjAsIDApOworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHRtcF9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwIChzbiAldSlcbiIsCisJCQkgcm9xLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJX19za2JfdW5saW5rKHNrYl9pdHIsICZyb3EtPnF1ZXVlKTsKKwkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwl9CisJcm9xLT53cyA9IDA7CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCkgPSB2b2lkXG4iLCBpMjQwMG0sIHJvcSk7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBRdWV1ZSBhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBsYm46IExhc3QgYmxvY2sgbnVtYmVyIG9mIHRoZSBwYWNrZXQgaW4gQHNrYgorICoKKyAqIFRoZSBoYXJkd2FyZSBpcyBhc2tpbmcgdGhlIGRyaXZlciB0byBxdWV1ZSBhIHBhY2tldCBmb3IgbGF0ZXIKKyAqIGRlbGl2ZXJ5IHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCSAgICAgIHN0cnVjdCBza19idWZmICogc2tiLCB1bnNpZ25lZCBsYm4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG5zbiwgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJICBpMjQwMG0sIHJvcSwgc2tiLCBsYm4pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBsYm4pOworCWlmICh1bmxpa2VseShuc24gPj0gMTAyNCkpIHsKKwkJZGV2X2VycihkZXYsICJTVyBCVUc/IHF1ZXVlIG5zbiAlZCAobGJuICV1IHdzICV1KVxuIiwKKwkJCW5zbiwgbGJuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCV9faTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCBsYm4sIG5zbik7CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCQkJCSAgICAgcm9xLT53cywgbGVuLCBsYm4sIG5zbiwgfjApOworCX0KKwlkX2ZuZW5kKDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgbGJuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFVwZGF0ZSB0aGUgd2luZG93IHN0YXJ0IGluIGEgcmVvcmRlciBxdWV1ZSBhbmQgZGVsaXZlciBhbGwgc2ticworICogd2l0aCBhIGxvd2VyIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiBSZW9yZGVyIHF1ZXVlCisgKiBAc246IE5ldyBzZXF1ZW5jZSBudW1iZXIKKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfdXBkYXRlX3dzKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwKKwkJCSAgdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG9sZF93cywgbnNuLCBsZW47CisKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpXG4iLCBpMjQwMG0sIHJvcSwgc24pOworCW9sZF93cyA9IHJvcS0+d3M7CisJbGVuID0gc2tiX3F1ZXVlX2xlbigmcm9xLT5xdWV1ZSk7CisJbnNuID0gX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc24pOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfV1MsCisJCQkgICAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpID0gdm9pZFxuIiwgaTI0MDBtLCByb3EsIHNuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFF1ZXVlIGEgcGFja2V0IGFuZCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBzbjogTGFzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKgorICogTm90ZSB0aGF0IHVubGlrZSBpMjQwMG1fcm9xX3VwZGF0ZV93cygpLCB3aGljaCBzZXRzIHRoZSBuZXcgd2luZG93CisgKiBzdGFydCB0byBAc24sIGluIGhlcmUgd2UnbGwgc2V0IGl0IHRvIEBzbiArIDEuCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJc3RydWN0IHNrX2J1ZmYgKiBza2IsIHVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBuc24sIG9sZF93cywgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSlcbiIsCisJCSAgaTI0MDBtLCByb3EsIHNrYiwgc24pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBzbik7CisJb2xkX3dzID0gcm9xLT53czsKKwlpZiAodW5saWtlbHkobnNuID49IDEwMjQpKSB7CisJCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBxdWV1ZV91cGRhdGVfd3MgbnNuICV1IChzbiAldSB3cyAldSlcbiIsCisJCQluc24sIHNuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCS8qIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgZG9uJ3QgYm90aGVyIGFzIHdlJ2QgcXVldWUKKwkJICogaXQgYW5kIGlubWVkaWF0ZWx5IHVucXVldWUgaXQgLS0ganVzdCBkZWxpdmVyIGl0ICovCisJCWlmIChsZW4gPT0gMCkgeworCQkJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGE7CisJCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2IsIHJvcV9kYXRhLT5jcyk7CisJCX0KKwkJZWxzZSB7CisJCQlfX2kyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJCQlfX2kyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCBzbiArIDEpOworCQl9CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTLAorCQkJCSAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwl9CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24pOworCXJldHVybjsKK30KKworCisvKgorICogUmVjZWl2ZSBhbmQgc2VuZCB1cCBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2tiX3J4OiBza2IgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqIEBzaW5nbGVfbGFzdDogMSBpZiB0aGUgcGF5bG9hZCBpcyB0aGUgb25seSBvbmUgb3IgdGhlIGxhc3Qgb25lIG9mCisgKiAgICAgdGhlIHNrYi4KKyAqIEBwYXlsb2FkOiBwb2ludGVyIHRvIHRoZSBwYWNrZXQncyBkYXRhIGluc2lkZSB0aGUgc2tiCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcGF5bG9hZAorICoKKyAqIFN0YXJ0aW5nIGluIHYxLjQgb2YgdGhlIGkyNDAwbSdzIGZpcm13YXJlLCB0aGUgZGV2aWNlIGNhbiBzZW5kIGRhdGEKKyAqIHBhY2tldHMgdG8gdGhlIGhvc3QgaW4gYW4gZXh0ZW5kZWQgZm9ybWF0IHRoYXQ7IHRoaXMgaW5jdWRlcyBhIDE2CisgKiBieXRlIGhlYWRlciAoc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIpLiBVc2luZyB0aGlzIGhlYWRlcidzIHNwYWNlCisgKiB3ZSBjYW4gZmFrZSBldGhlcm5ldCBoZWFkZXJzIGZvciBldGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uIHdpdGhvdXQKKyAqIGhhdmluZyB0byBjb3B5IHBhY2tldHMgYXJvdW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBzYWlkIHBhdGguCisgKgorICoKKyAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQgdGhhdCByZXF1aXJlcyBubyByZW9yZGVyaW5nCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2Jfcng6IHNrYiB0aGF0IGNvbnRhaW5zIHRoZSBleHRlbmRlZCBkYXRhIHBhY2tldAorICogQHNpbmdsZV9sYXN0OiAxIGlmIHRoZSBwYXlsb2FkIGlzIHRoZSBvbmx5IG9uZSBvciB0aGUgbGFzdCBvbmUgb2YKKyAqICAgICB0aGUgc2tiLgorICogQHBheWxvYWQ6IHBvaW50ZXIgdG8gdGhlIHBhY2tldCdzIGRhdGEgKHBhc3QgdGhlIGFjdHVhbCBleHRlbmRlZAorICogICAgIGRhdGEgcGF5bG9hZCBoZWFkZXIpLgorICogQHNpemU6IHNpemUgb2YgdGhlIHBheWxvYWQKKyAqCisgKiBQYXNzIG92ZXIgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYSBkYXRhIHBhY2tldCB0aGF0IG1pZ2h0IGhhdmUKKyAqIHJlb3JkZXJpbmcgcmVxdWlyZW1lbnRzLgorICoKKyAqIFRoaXMgbmVlZHMgdG8gdGhlIGRlY2lkZSBpZiB0aGUgc2tiIGluIHdoaWNoIHRoZSBwYWNrZXQgaXMKKyAqIGNvbnRhaW5lZCBjYW4gYmUgcmV1c2VkIG9yIGlmIGl0IG5lZWRzIHRvIGJlIGNsb25lZC4gVGhlbiBpdCBoYXMgdG8KKyAqIGJlIHRyaW1tZWQgaW4gdGhlIGVkZ2VzIHNvIHRoYXQgdGhlIGJlZ2lubmluZyBpcyB0aGUgc3BhY2UgZm9yIGV0aAorICogaGVhZGVyIGFuZCB0aGVuIHBhc3MgaXQgdG8gaTI0MDBtX25ldF9lcngoKSBmb3IgdGhlIHN0YWNrCisgKgorICogQXNzdW1lcyB0aGUgY2FsbGVyIGhhcyB2ZXJpZmllZCB0aGUgc2FuaXR5IG9mIHRoZSBwYXlsb2FkIChzaXplLAorICogZXRjKSBhbHJlYWR5LgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3J4X2VkYXRhKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYl9yeCwKKwkJICAgICB1bnNpZ25lZCBzaW5nbGVfbGFzdCwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCWNvbnN0IHN0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyICpoZHIgPSBwYXlsb2FkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWVudW0gaTI0MDBtX2NzIGNzOworCXUzMiByZW9yZGVyOworCXVuc2lnbmVkIHJvX25lZWRlZCwgcm9fdHlwZSwgcm9fY2luLCByb19zbjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xOworCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhOworCisJQlVJTERfQlVHX09OKEVUSF9ITEVOID4gc2l6ZW9mKCpoZHIpKTsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSAgInNpemUgJXp1KVxuIiwgaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBzaXplKTsKKwlpZiAoc2l6ZSA8IHNpemVvZigqaGRyKSkgeworCQlkZXZfZXJyKGRldiwgIkVSWDogSFcgQlVHPyBtZXNzYWdlIHdpdGggc2hvcnQgaGVhZGVyICglenUgIgorCQkJInZzICV6dSBieXRlcyBleHBlY3RlZClcbiIsIHNpemUsIHNpemVvZigqaGRyKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHNpbmdsZV9sYXN0KSB7CisJCXNrYiA9IHNrYl9nZXQoc2tiX3J4KTsKKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBza2IgJXAgcmV1c2luZ1xuIiwgc2tiKTsKKwl9IGVsc2UgeworCQlza2IgPSBza2JfY2xvbmUoc2tiX3J4LCBHRlBfS0VSTkVMKTsKKwkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIkVSWDogbm8gbWVtb3J5IHRvIGNsb25lIHNrYlxuIik7CisJCQluZXRfZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIGVycm9yX3NrYl9jbG9uZTsKKwkJfQorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IHNrYiAlcCBjbG9uZWQgZnJvbSAlcFxuIiwgc2tiLCBza2JfcngpOworCX0KKwkvKiBub3cgd2UgaGF2ZSB0byBwdWxsIGFuZCB0cmltIHNvIHRoYXQgdGhlIHNrYiBwb2ludHMgdG8gdGhlCisJICogYmVnaW5uaW5nIG9mIHRoZSBJUCBwYWNrZXQ7IHRoZSBuZXRkZXYgcGFydCB3aWxsIGFkZCB0aGUKKwkgKiBldGhlcm5ldCBoZWFkZXIgYXMgbmVlZGVkIC0gd2Uga25vdyB0aGVyZSBpcyBlbm91Z2ggc3BhY2UKKwkgKiBiZWNhdXNlIHdlIGNoZWNrZWQgaW4gaTI0MDBtX3J4X2VkYXRhKCkuICovCisJc2tiX3B1bGwoc2tiLCBwYXlsb2FkICsgc2l6ZW9mKCpoZHIpIC0gKHZvaWQgKikgc2tiLT5kYXRhKTsKKwlza2JfdHJpbShza2IsICh2b2lkICopIHNrYl9lbmRfcG9pbnRlcihza2IpIC0gcGF5bG9hZCAtIHNpemVvZigqaGRyKSk7CisKKwlyZW9yZGVyID0gbGUzMl90b19jcHUoaGRyLT5yZW9yZGVyKTsKKwlyb19uZWVkZWQgPSByZW9yZGVyICYgSTI0MDBNX1JPX05FRURFRDsKKwljcyA9IGhkci0+Y3M7CisJaWYgKHJvX25lZWRlZCkgeworCQlyb190eXBlID0gKHJlb3JkZXIgPj4gSTI0MDBNX1JPX1RZUEVfU0hJRlQpICYgSTI0MDBNX1JPX1RZUEU7CisJCXJvX2NpbiA9IChyZW9yZGVyID4+IEkyNDAwTV9ST19DSU5fU0hJRlQpICYgSTI0MDBNX1JPX0NJTjsKKwkJcm9fc24gPSAocmVvcmRlciA+PiBJMjQwME1fUk9fU05fU0hJRlQpICYgSTI0MDBNX1JPX1NOOworCisJCXJvcSA9ICZpMjQwMG0tPnJ4X3JvcVtyb19jaW5dOworCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQlyb3FfZGF0YS0+c24gPSByb19zbjsKKwkJcm9xX2RhdGEtPmNzID0gY3M7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcmVvcmRlciBuZWVkZWQ6ICIKKwkJCSAidHlwZSAldSBjaW4gJXUgW3dzICV1XSBzbiAldS8ldSBsZW4gJXp1QlxuIiwKKwkJCSByb190eXBlLCByb19jaW4sIHJvcS0+d3MsIHJvX3NuLAorCQkJIF9faTI0MDBtX3JvcV9uc24ocm9xLCByb19zbiksIHNpemUpOworCQlkX2R1bXAoMiwgZGV2LCBwYXlsb2FkLCBzaXplKTsKKwkJc3dpdGNoKHJvX3R5cGUpIHsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJCWkyNDAwbV9yb3FfcmVzZXQoaTI0MDBtLCByb3EpOworCQkJa2ZyZWVfc2tiKHNrYik7CS8qIG5vIGRhdGEgaGVyZSAqLworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQkJaTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9XUzoKKwkJCWkyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCByb19zbik7CisJCQlrZnJlZV9za2Ioc2tiKTsJLyogbm8gZGF0YSBoZXJlICovCisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCQlpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoZGV2LCAiSFcgQlVHPyB1bmtub3duIHJlb3JkZXIgdHlwZSAldVxuIiwgcm9fdHlwZSk7CisJCX0KKwl9CisJZWxzZQorCQlpMjQwMG1fbmV0X2VyeChpMjQwMG0sIHNrYiwgY3MpOworZXJyb3Jfc2tiX2Nsb25lOgorZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSJzaXplICV6dSkgPSB2b2lkXG4iLCBpMjQwMG0sIHNrYl9yeCwgc2luZ2xlX2xhc3QsIHBheWxvYWQsIHNpemUpOworCXJldHVybjsKK30KKworCisvKgogICogQWN0IG9uIGEgcmVjZWl2ZWQgcGF5bG9hZAogICoKICAqIEBpMjQwMG06IGRldmljZSBpbnN0YW5jZQogICogQHNrYl9yeDogc2tiIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiB3YXMgcmVjZWl2ZWQKLSAqIEBzaW5nbGU6IDEgaWYgdGhlcmUgaXMgb25seSBvbmUgcGF5bG9hZCwgMCBvdGhlcndpc2UKKyAqIEBzaW5nbGVfbGFzdDogMSB0aGlzIGlzIHRoZSBvbmx5IHBheWxvYWQgb3IgdGhlIGxhc3Qgb25lIChzbyB0aGUKKyAqICAgICBza2IgY2FuIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNsb25lZCkuCiAgKiBAcGxkOiBwYXlsb2FkIGRlc2NyaXB0b3IKICAqIEBwYXlsb2FkOiBwYXlsb2FkIGRhdGEKICAqCiAgKiBVcG9uIHJlY2VwdGlvbiBvZiBhIHBheWxvYWQsIGxvb2sgYXQgaXRzIGd1dHMgaW4gdGhlIHBheWxvYWQKLSAqIGRlc2NyaXB0b3IgYW5kIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggaXQuCisgKiBkZXNjcmlwdG9yIGFuZCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LiBJZiBpdCBpcyBhIHNpbmdsZSBwYXlsb2FkCisgKiBza2Igb3IgaWYgdGhlIGxhc3Qgc2tiIGlzIGEgZGF0YSBwYWNrZXQsIHRoZSBza2Igd2lsbCBiZSByZWZlcmVuY2VkCisgKiBhbmQgbW9kaWZpZWQgKHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBjbG9uZWQpLgogICovCiBzdGF0aWMKIHZvaWQgaTI0MDBtX3J4X3BheWxvYWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3J4LAotCQkgICAgICAgdW5zaWduZWQgc2luZ2xlLCBjb25zdCBzdHJ1Y3QgaTI0MDBtX3BsZCAqcGxkLAorCQkgICAgICAgdW5zaWduZWQgc2luZ2xlX2xhc3QsIGNvbnN0IHN0cnVjdCBpMjQwMG1fcGxkICpwbGQsCiAJCSAgICAgICBjb25zdCB2b2lkICpwYXlsb2FkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzaXplX3QgcGxfc2l6ZSA9IGkyNDAwbV9wbGRfc2l6ZShwbGQpOwogCWVudW0gaTI0MDBtX3B0IHBsX3R5cGUgPSBpMjQwMG1fcGxkX3R5cGUocGxkKTsKIAorCWRfcHJpbnRmKDcsIGRldiwgIlJYOiByZWNlaXZlZCBwYXlsb2FkIHR5cGUgJXUsICV6dSBieXRlc1xuIiwKKwkJIHBsX3R5cGUsIHBsX3NpemUpOworCWRfZHVtcCg4LCBkZXYsIHBheWxvYWQsIHBsX3NpemUpOworCiAJc3dpdGNoIChwbF90eXBlKSB7CiAJY2FzZSBJMjQwME1fUFRfREFUQToKIAkJZF9wcmludGYoMywgZGV2LCAiUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOwotCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGUsIHBheWxvYWQsIHBsX3NpemUpOworCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgSTI0MDBNX1BUX0NUUkw6CiAJCWkyNDAwbV9yeF9jdGwoaTI0MDBtLCBza2JfcngsIHBheWxvYWQsIHBsX3NpemUpOwpAQCAtMzQ4LDYgKzEwMDAsMTAgQEAKIAljYXNlIEkyNDAwTV9QVF9UUkFDRToKIAkJaTI0MDBtX3J4X3RyYWNlKGkyNDAwbSwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOworCWNhc2UgSTI0MDBNX1BUX0VEQVRBOgorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOworCQlpMjQwMG1fcnhfZWRhdGEoaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBwbF9zaXplKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoJLyogQW55dGhpbmcgZWxzZSBzaG91bGRuJ3QgY29tZSB0byB0aGUgaG9zdCAqLwogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2VycihkZXYsICJSWDogSFcgQlVHPyB1bmV4cGVjdGVkIHBheWxvYWQgdHlwZSAldVxuIiwKQEAgLTQ3NSw3ICsxMTMxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX21zZ19oZHIgKm1zZ19oZHI7CiAJc2l6ZV90IHBsX2l0ciwgcGxfc2l6ZSwgc2tiX2xlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG51bV9wbHM7CisJdW5zaWduZWQgbnVtX3Bscywgc2luZ2xlX2xhc3Q7CiAKIAlza2JfbGVuID0gc2tiLT5sZW47CiAJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFtzaXplICV6dV0pXG4iLApAQCAtNTA0LDcgKzExNjAsOCBAQAogCQkJCQkJICBwbF9pdHIsIHNrYi0+bGVuKTsKIAkJaWYgKHJlc3VsdCA8IDApCiAJCQlnb3RvIGVycm9yX3BsX2Rlc2NyX2NoZWNrOwotCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgbnVtX3BscyA9PSAxLCAmbXNnX2hkci0+cGxkW2ldLAorCQlzaW5nbGVfbGFzdCA9IG51bV9wbHMgPT0gMSB8fCBpID09IG51bV9wbHMgLSAxOworCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgc2luZ2xlX2xhc3QsICZtc2dfaGRyLT5wbGRbaV0sCiAJCQkJICBza2ItPmRhdGEgKyBwbF9pdHIpOwogCQlwbF9pdHIgKz0gQUxJR04ocGxfc2l6ZSwgSTI0MDBNX1BMX1BBRCk7CiAJCWNvbmRfcmVzY2hlZCgpOwkJLyogRG9uJ3QgbW9ub3BvbGl6ZSAqLwpAQCAtNTMyLDMgKzExODksNzMgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaTI0MDBtX3J4KTsKKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlCisgKgorICogVGhpcyBzZXRzIHVwIGFsbCB0aGUgUlggcmVvcmRlcmluZyBpbmZyYXN0cnVjdHVyZXMsIHdoaWNoIHdpbGwgbm90CisgKiBiZSB1c2VkIGlmIHJlb3JkZXJpbmcgaXMgbm90IGVuYWJsZWQgb3IgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm90CisgKiBzdXBwb3J0IGl0LiBUaGUgZGV2aWNlIGlzIHRvbGQgdG8gZG8gcmVvcmRlcmluZyBpbgorICogaTI0MDBtX2Rldl9pbml0aWFsaXplKCksIHdoZXJlIGl0IGFsc28gbG9va3MgYXQgdGhlIHZhbHVlIG9mIHRoZQorICogaTI0MDBtLT5yeF9yZW9yZGVyIHN3aXRjaCBiZWZvcmUgdGFraW5nIGEgZGVjaXNzaW9uLgorICoKKyAqIE5vdGUgd2UgYWxsb2NhdGUgdGhlIHJvcSBxdWV1ZXMgaW4gb25lIGNodW5rIGFuZCB0aGUgYWN0dWFsIGxvZ2dpbmcKKyAqIHN1cHBvcnQgZm9yIGl0IChsb2dnaW5nKSBpbiBhbm90aGVyIG9uZSBhbmQgdGhlbiB3ZSBzZXR1cCB0aGUKKyAqIHBvaW50ZXJzIGZyb20gdGhlIGZpcnN0IHRvIHRoZSBsYXN0LgorICovCitpbnQgaTI0MDBtX3J4X3NldHVwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisKKwlpMjQwMG0tPnJ4X3Jlb3JkZXIgPSBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZD8gMCA6IDE7CisJaWYgKGkyNDAwbS0+cnhfcmVvcmRlcikgeworCQl1bnNpZ25lZCBpdHI7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3QgaTI0MDBtX3JvcV9sb2cgKnJkOworCisJCXJlc3VsdCA9IC1FTk9NRU07CisKKwkJc2l6ZSA9IHNpemVvZihpMjQwMG0tPnJ4X3JvcVswXSkgKiAoSTI0MDBNX1JPX0NJTiArIDEpOworCQlpMjQwMG0tPnJ4X3JvcSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpMjQwMG0tPnJ4X3JvcSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIlJYOiBjYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciAiCisJCQkJInJlb3JkZXIgcXVldWVzXG4iLCBzaXplKTsKKwkJCWdvdG8gZXJyb3Jfcm9xX2FsbG9jOworCQl9CisKKwkJc2l6ZSA9IHNpemVvZigqaTI0MDBtLT5yeF9yb3FbMF0ubG9nKSAqIChJMjQwME1fUk9fQ0lOICsgMSk7CisJCXJkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJkID09IE5VTEwpIHsKKwkJCWRldl9lcnIoZGV2LCAiUlg6IGNhbm5vdCBhbGxvY2F0ZSAlenUgYnl0ZXMgZm9yICIKKwkJCQkicmVvcmRlciBxdWV1ZXMgbG9nIGFyZWFzXG4iLCBzaXplKTsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yX3JvcV9sb2dfYWxsb2M7CisJCX0KKworCQlmb3IoaXRyID0gMDsgaXRyIDwgSTI0MDBNX1JPX0NJTiArIDE7IGl0cisrKSB7CisJCQlfX2kyNDAwbV9yb3FfaW5pdCgmaTI0MDBtLT5yeF9yb3FbaXRyXSk7CisJCQlpMjQwMG0tPnJ4X3JvcVtpdHJdLmxvZyA9ICZyZFtpdHJdOworCQl9CisJfQorCXJldHVybiAwOworCitlcnJvcl9yb3FfbG9nX2FsbG9jOgorCWtmcmVlKGkyNDAwbS0+cnhfcm9xKTsKK2Vycm9yX3JvcV9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRlYXIgZG93biB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlICovCit2b2lkIGkyNDAwbV9yeF9yZWxlYXNlKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpZiAoaTI0MDBtLT5yeF9yZW9yZGVyKSB7CisJCXVuc2lnbmVkIGl0cjsKKwkJZm9yKGl0ciA9IDA7IGl0ciA8IEkyNDAwTV9ST19DSU4gKyAxOyBpdHIrKykKKwkJCV9fc2tiX3F1ZXVlX3B1cmdlKCZpMjQwMG0tPnJ4X3JvcVtpdHJdLnF1ZXVlKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3FbMF0ubG9nKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3EpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCmluZGV4IDFiZmEyODMuLjVhYzVlNzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKQEAgLTcwLDggKzcwLDEzIEBACiBzdGF0aWMgaW50IGlvZV90aW1lb3V0ID0gMjsKIG1vZHVsZV9wYXJhbShpb2VfdGltZW91dCwgaW50LCAwKTsKIAotLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tIiBJMjQwME1fRldfVkVSU0lPTiAiLnNiY2YiCisvKiBPdXIgZmlybXdhcmUgZmlsZSBuYW1lIGxpc3QgKi8KK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG1zX2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tMS4zLnNiY2YiCisJSTI0MDBNU19GV19GSUxFX05BTUUsCisJTlVMTAorfTsKKwogCiAvKgogICogRW5hYmxlIHRoZSBTRElPIGZ1bmN0aW9uCkBAIC0yNTUsMTYgKzI2MCwxNiBAQAogCQljb250YWluZXJfb2YoaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtcywgaTI0MDBtKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fV0FSTV9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAogCX07CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fQ09MRF9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAogCX07CiAKIAlpZiAocnQgPT0gSTI0MDBNX1JUX1dBUk0pCkBAIC00MDEsNyArNDA2LDcgQEAKIAlpMjQwMG0tPmJ1c19yZXNldCA9IGkyNDAwbXNfYnVzX3Jlc2V0OwogCWkyNDAwbS0+YnVzX2JtX2NtZF9zZW5kID0gaTI0MDBtc19idXNfYm1fY21kX3NlbmQ7CiAJaTI0MDBtLT5idXNfYm1fd2FpdF9mb3JfYWNrID0gaTI0MDBtc19idXNfYm1fd2FpdF9mb3JfYWNrOwotCWkyNDAwbS0+YnVzX2Z3X25hbWUgPSBJMjQwME1TX0ZXX0ZJTEVfTkFNRTsKKwlpMjQwMG0tPmJ1c19md19uYW1lcyA9IGkyNDAwbXNfYnVzX2Z3X25hbWVzOwogCWkyNDAwbS0+YnVzX2JtX21hY19hZGRyX2ltcGFpcmVkID0gMTsKIAogCXJlc3VsdCA9IGkyNDAwbXNfZW5hYmxlX2Z1bmN0aW9uKGkyNDAwbXMtPmZ1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM3MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIEludGVsIFdpcmVsZXNzIFdpTUFYIENvbm5lY3Rpb24gMjQwMG0KKyAqIFN5c2ZzIGludGVyZmFjZXMgdG8gc2hvdyBkcml2ZXIgYW5kIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24gPGxpbnV4LXdpbWF4QGludGVsLmNvbT4KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSAiaTI0MDBtLmgiCisKKworI2RlZmluZSBEX1NVQk1PRFVMRSBzeXNmcworI2luY2x1ZGUgImRlYnVnLWxldmVscy5oIgorCisKKy8qCisgKiBTZXQgdGhlIGlkbGUgdGltZW91dCAobXNlY3MpCisgKgorICogRklYTUU6IGV2ZW50dWFsbHkgdGhpcyBzaG91bGQgYmUgYSBjb21tb24gV2lNQVggc3RhY2sgbWV0aG9kLCBidXQKKyAqIHdvdWxkIGxpa2UgdG8gd2FpdCB0byBzZWUgaG93IG90aGVyIGRldmljZXMgbWFuYWdlIGl0LgorICovCitzdGF0aWMKK3NzaXplX3QgaTI0MDBtX2lkbGVfdGltZW91dF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IGkyNDAwbSAqaTI0MDBtID0gbmV0X2Rldl90b19pMjQwMG0odG9fbmV0X2RldihkZXYpKTsKKwl1bnNpZ25lZCB2YWw7CisKKwlyZXN1bHQgPSAtRUlOVkFMOworCWlmIChzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWwpICE9IDEpCisJCWdvdG8gZXJyb3Jfbm9fdW5zaWduZWQ7CisJaWYgKHZhbCAhPSAwICYmICh2YWwgPCAxMDAgfHwgdmFsID4gMzAwMDAwIHx8IHZhbCAlIDEwMCAhPSAwKSkgeworCQlkZXZfZXJyKGRldiwgImlkbGVfdGltZW91dDogJXU6IGludmFsaWQgbXNlY3Mgc3BlY2lmaWNhdGlvbjsgIgorCQkJInZhbGlkIHZhbHVlcyBhcmUgMCwgMTAwLTMwMDAwMCBpbiAxMDAgaW5jcmVtZW50c1xuIiwKKwkJCXZhbCk7CisJCWdvdG8gZXJyb3JfYmFkX3ZhbHVlOworCX0KKwlyZXN1bHQgPSBpMjQwMG1fc2V0X2lkbGVfdGltZW91dChpMjQwMG0sIHZhbCk7CisJaWYgKHJlc3VsdCA+PSAwKQorCQlyZXN1bHQgPSBzaXplOworZXJyb3Jfbm9fdW5zaWduZWQ6CitlcnJvcl9iYWRfdmFsdWU6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljCitERVZJQ0VfQVRUUihpMjQwMG1faWRsZV90aW1lb3V0LCBTX0lXVVNSLAorCSAgICBOVUxMLCBpMjQwMG1faWRsZV90aW1lb3V0X3N0b3JlKTsKKworc3RhdGljCitzdHJ1Y3QgYXR0cmlidXRlICppMjQwMG1fZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2kyNDAwbV9pZGxlX3RpbWVvdXQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpMjQwMG1fZGV2X2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogd2Ugd2FudCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IGkyNDAwbV9kZXZfYXR0cnMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCmluZGV4IDk3MDJjMjJiLi42YWRkMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLW5vdGlmLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJZGV2X2VycihkZXYsICJIVyBCVUc/IFVua25vd24vdW5leHBlY3RlZCBkYXRhIGluIG5vdGlmaWNhdGlvbiAiCiAJCQkibWVzc2FnZSAoJXp1IGJ5dGVzKVxuIiwgYnVmX2xlbik7CiAJCXNucHJpbnRmKHByZWZpeCwgc2l6ZW9mKHByZWZpeCksICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpICwgZGV2LT5idXNfaWQpOworCQkJIGRldl9kcml2ZXJfc3RyaW5nKGRldiksIGRldl9uYW1lKGRldikpOwogCQlpZiAoYnVmX2xlbiA+IDY0KSB7CiAJCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgcHJlZml4LCBEVU1QX1BSRUZJWF9PRkZTRVQsCiAJCQkJICAgICAgIDgsIDQsIGJ1ZiwgNjQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCmluZGV4IGM2ZDkzNDYuLmNhNDE1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKQEAgLTczLDcgKzczLDE0IEBACiAKIAogLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXVzYi0iIEkyNDAwTV9GV19WRVJTSU9OICIuc2JjZiIKK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG11X2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80ICJpMjQwMG0tZnctdXNiLTEuNC5zYmNmIgorCUkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzQsCisjZGVmaW5lIEkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzMgImkyNDAwbS1mdy11c2ItMS4zLnNiY2YiCisJSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfMywKKwlOVUxMLAorfTsKKwogCiBzdGF0aWMKIGludCBpMjQwMG11X2J1c19kZXZfc3RhcnQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQpAQCAtMjExLDE2ICsyMTgsMTYgQEAKIAkJY29udGFpbmVyX29mKGkyNDAwbSwgc3RydWN0IGkyNDAwbXUsIGkyNDAwbSk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX1dBUk1fQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKIAl9OwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0NPTERfQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKIAl9OwogCiAJZF9mbnN0YXJ0KDMsIGRldiwgIihpMjQwMG0gJXAgcnQgJXUpXG4iLCBpMjQwMG0sIHJ0KTsKQEAgLTM5NCw3ICs0MDEsNyBAQAogCWkyNDAwbS0+YnVzX3Jlc2V0ID0gaTI0MDBtdV9idXNfcmVzZXQ7CiAJaTI0MDBtLT5idXNfYm1fY21kX3NlbmQgPSBpMjQwMG11X2J1c19ibV9jbWRfc2VuZDsKIAlpMjQwMG0tPmJ1c19ibV93YWl0X2Zvcl9hY2sgPSBpMjQwMG11X2J1c19ibV93YWl0X2Zvcl9hY2s7Ci0JaTI0MDBtLT5idXNfZndfbmFtZSA9IEkyNDAwTVVfRldfRklMRV9OQU1FOworCWkyNDAwbS0+YnVzX2Z3X25hbWVzID0gaTI0MDBtdV9idXNfZndfbmFtZXM7CiAJaTI0MDBtLT5idXNfYm1fbWFjX2FkZHJfaW1wYWlyZWQgPSAwOwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC01OTQsNCArNjAxLDUgQEAKIE1PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIDxsaW51eC13aW1heEBpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIDI0MDBNIFdpTUFYIG5ldHdvcmtpbmcgZm9yIFVTQiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0ZJUk1XQVJFKEkyNDAwTVVfRldfRklMRV9OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80KTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV8zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGU0ZjlmNzQuLjYxMmZmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTUxLDYgKzE1MSwxMiBAQAogCS0tLWhlbHAtLS0KIAkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDgzODUgYW5kIDg2ODYgU0RJTyBkZXZpY2VzLgogCitjb25maWcgTElCRVJUQVNfU1BJCisJdHJpc3RhdGUgIk1hcnZlbGwgTGliZXJ0YXMgODY4NiBTUEkgODAyLjExYi9nIGNhcmRzIgorCWRlcGVuZHMgb24gTElCRVJUQVMgJiYgU1BJICYmIEdFTkVSSUNfR1BJTworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDg2ODYgU1BJIGRldmljZXMuCisKIGNvbmZpZyBMSUJFUlRBU19ERUJVRwogCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIExpYmVydGFzIG1vZHVsZS4iCiAJZGVwZW5kcyBvbiBMSUJFUlRBUwpAQCAtMTg4LDEyNyArMTk0LDYgQEAKIAogCSAgVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHdpbGwgYmUgbmFtZWQgImFpcm8iLgogCi1jb25maWcgSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKLQlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCi0Jc2VsZWN0IFdJUkVMRVNTX0VYVAotCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgQ1JZUFRPCi0Jc2VsZWN0IENSWVBUT19NSUNIQUVMX01JQwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciA4MDIuMTFiIHdpcmVsZXNzIGNhcmRzIGJhc2VkIG9uIHRoZSAiSGVybWVzIiBvcgotCSAgSW50ZXJzaWwgSEZBMzg0eCAoUHJpc20gMikgTUFDIGNvbnRyb2xsZXIuICBUaGlzIGluY2x1ZGVzIHRoZSB2YXN0Ci0JICBtYWpvcml0eSBvZiB0aGUgUENNQ0lBIDgwMi4xMWIgY2FyZHMgKHdoaWNoIGFyZSBuZWFybHkgYWxsIHJlYmFkZ2VzKQotCSAgLSBleGNlcHQgZm9yIHRoZSBDaXNjby9BaXJvbmV0IGNhcmRzLiAgQ2FyZHMgc3VwcG9ydGVkIGluY2x1ZGUgdGhlCi0JICBBcHBsZSBBaXJwb3J0IChub3QgYSBQQ01DSUEgY2FyZCksIFdhdmVsYW5JRUVFL09yaW5vY28sCi0JICBDYWJsZXRyb24vRW50ZXJhU3lzIFJvYW1hYm91dCwgRUxTQSBBaXJMYW5jZXIsIE1FTENPIEJ1ZmZhbG8sIEF2YXlhLAotCSAgSUJNIEhpZ2ggUmF0ZSBXaXJlbGVzcywgRmFycmFsb24gU3l5bGluZSwgU2Ftc3VuZyBNYWdpY0xBTiwgTmV0Z2VhcgotCSAgTUE0MDEsIExpbmtTeXMgV1BDLTExLCBELUxpbmsgRFdMLTY1MCwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbAotCSAgSVBXMjAxMSwgYW5kIFN5bWJvbCBTcGVjdHJ1bTI0IEhpZ2ggUmF0ZSBhbW9uZ3N0IG90aGVycy4KLQotCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgdGhlIGd1dHMgb2YgdGhlIGRyaXZlciwgYnV0IGluIG9yZGVyIHRvCi0JICBhY3R1YWxseSB1c2UgYSBjYXJkIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBCi0JICBIZXJtZXMgY2FyZHMsIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzIG9yIHRoZSBBcHBsZSBBaXJwb3J0IGJlbG93LgotCi0JICBZb3Ugd2lsbCBhbHNvIHZlcnkgbGlrZWx5IGFsc28gbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrcyA6Ci0JICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPgotCi1jb25maWcgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKLQlib29sICJDYWNoZSBIZXJtZXMgZmlybXdhcmUgb24gZHJpdmVyIGluaXRpYWxpc2F0aW9uIgotCWRlcGVuZHMgb24gSEVSTUVTCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgU2F5IFkgdG8gY2FjaGUgYW55IGZpcm13YXJlIHJlcXVpcmVkIGJ5IHRoZSBIZXJtZXMgZHJpdmVycwotCSAgb24gc3RhcnR1cC4gIFRoZSBmaXJtd2FyZSB3aWxsIHJlbWFpbiBjYWNoZWQgdW50aWwgdGhlCi0JICBkcml2ZXIgaXMgdW5sb2FkZWQuICBUaGUgY2FjaGUgdXNlcyA2NEsgb2YgUkFNLgotCi0JICBPdGhlcndpc2UgbG9hZCB0aGUgZmlybXdhcmUgZnJvbSB1c2Vyc3BhY2UgYXMgcmVxdWlyZWQuICBJbgotCSAgdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHVubG9hZGVkIGFuZCByZXN0YXJ0ZWQKLQkgIHdoZW5ldmVyIHRoZSBmaXJtd2FyZSBpcyBjaGFuZ2VkLgotCi0JICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgWS4KLQotY29uZmlnIEFQUExFX0FJUlBPUlQKLQl0cmlzdGF0ZSAiQXBwbGUgQWlycG9ydCBzdXBwb3J0IChidWlsdC1pbikiCi0JZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBIRVJNRVMKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFpcnBvcnQgODAyLjExYiB3aXJlbGVzcyBFdGhlcm5ldCBoYXJkd2FyZQotCSAgYnVpbHQgaW50byB0aGUgTWFjaW50b3NoIGlCb29rIGFuZCBvdGhlciByZWNlbnQgUG93ZXJQQy1iYXNlZAotCSAgTWFjaW50b3NoIG1hY2hpbmVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgTHVjZW50IE9yaW5vY28gY2FyZCB3aXRoIAotCSAgYSBub24tc3RhbmRhcmQgaW50ZXJmYWNlLgotCi0JICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBaXJwb3J0IEV4dHJlbWUgKDgwMi4xMWIvZykuIFVzZQotCSAgdGhlIEJDTTQzeHggZHJpdmVyIGZvciBBaXJwb3J0IEV4dHJlbWUgY2FyZHMuCi0KLWNvbmZpZyBQTFhfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQgKE5ldGdlYXIgTUEzMDEgZXRjLikiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKLQkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQotCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAotCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0Ci0JICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLiAgVGhlIE5ldGdlYXIKLQkgIE1BMzAxIGlzIHN1Y2ggYW4gYWRhcHRvci4KLQotY29uZmlnIFRNRF9IRVJNRVMKLQl0cmlzdGF0ZSAiSGVybWVzIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKLQkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuCi0KLWNvbmZpZyBOT1JURUxfSEVSTUVTCi0JdHJpc3RhdGUgIk5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXJzLCBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuCi0KLWNvbmZpZyBQQ0lfSEVSTUVTCi0JdHJpc3RhdGUgIlByaXNtIDIuNSBQQ0kgODAyLjExYiBhZGFwdG9yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDSSBhbmQgbWluaS1QQ0kgODAyLjExYiB3aXJlbGVzcyBOSUNzIGJhc2VkIG9uCi0JICB0aGUgUHJpc20gMi41IGNoaXBzZXQuICBUaGVzZSBhcmUgdHJ1ZSBQQ0kgY2FyZHMsIG5vdCB0aGUgODAyLjExYgotCSAgUENNQ0lBIGNhcmRzIGJ1bmRsZWQgd2l0aCBQQ0k8LT5QQ01DSUEgYWRhcHRvcnMgd2hpY2ggYXJlIGFsc28KLQkgIGNvbW1vbi4gIFNvbWUgb2YgdGhlIGJ1aWx0LWluIHdpcmVsZXNzIGFkYXB0b3JzIGluIGxhcHRvcHMgYXJlIG9mCi0JICB0aGlzIHZhcmlldHkuCi0KLWNvbmZpZyBQQ01DSUFfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBQQ01DSUEgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciAiSGVybWVzIiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcyBhZGFwdG9ycywgc3VjaAotCSAgYXMgdGhlIEx1Y2VudCBXYXZlbGFuSUVFRS9Pcmlub2NvIGNhcmRzIGFuZCB0aGVpciBPRU0gKENhYmxldHJvbi8KLQkgIEVudGVyYVN5cyBSb2FtQWJvdXQgODAyLjExLCBFTFNBIEFpcmxhbmNlciwgTWVsY28gQnVmZmFsbyBhbmQKLQkgIG90aGVycykuICBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcwotCSAgc3VjaCBhcyB0aGUgTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiAgSXQgc2hvdWxkIGFsc28KLQkgIHdvcmsgb24gU3ltYm9sIGNhcmRzIHN1Y2ggYXMgdGhlIDNDb20gQWlyQ29ubmVjdCBhbmQgRXJpY3Nzb24gV0xBTi4KLQotCSAgWW91IHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrczoKLQkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+LgotCi1jb25maWcgUENNQ0lBX1NQRUNUUlVNCi0JdHJpc3RhdGUgIlN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgUENNQ0lBIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKLQktLS1oZWxwLS0tCi0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbAotCSAgZmlybXdhcmUsIHN1Y2ggYXMgU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaAotCSAgY2FyZHMgYnkgU29ja2V0IENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCi0KLQkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGRvd25sb2FkIG9uIHN0YXJ0dXAuICBVdGlsaXRpZXMKLQkgIGZvciBkb3dubG9hZGluZyBTeW1ib2wgZmlybXdhcmUgYXJlIGF2YWlsYWJsZSBhdAotCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8+Ci0KIGNvbmZpZyBBVE1FTAogICAgICAgdHJpc3RhdGUgIkF0bWVsIGF0NzZjNTB4IGNoaXBzZXQgIDgwMi4xMWIgc3VwcG9ydCIKICAgICAgIGRlcGVuZHMgb24gKFBDSSB8fCBQQ01DSUEpICYmIFdMQU5fODAyMTEKQEAgLTM0Myw2ICsyMjgsMTQgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgY29udGFpbmluZyB0aGUKIAkgIEF0bWVsIGF0NzZjNTAyIGFuZCBhdDc2YzUwNCBjaGlwcy4KIAorY29uZmlnIEFUNzZDNTBYX1VTQgorICAgICAgICB0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MDMvYXQ3NmM1MDUvYXQ3NmM1MDVhIFVTQiBjYXJkcyIKKyAgICAgICAgZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFVTQgorICAgICAgICBzZWxlY3QgRldfTE9BREVSCisgICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBFbmFibGUgc3VwcG9ydCBmb3IgVVNCIFdpcmVsZXNzIGRldmljZXMgdXNpbmcgQXRtZWwgYXQ3NmM1MDMsCisgICAgICAgICAgYXQ3NmM1MDUgb3IgYXQ3NmM1MDVhIGNoaXBzLgorCiBjb25maWcgQUlST19DUwogCXRyaXN0YXRlICJDaXNjby9BaXJvbmV0IDM0WC8zNVgvNDUwMC80ODAwIFBDTUNJQSBjYXJkcyIKIAlkZXBlbmRzIG9uIFBDTUNJQSAmJiAoQlJPS0VOIHx8ICFNMzJSKSAmJiBXTEFOXzgwMjExCkBAIC01ODAsNiArNDczLDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNV0w4SworCXRyaXN0YXRlICJNYXJ2ZWxsIDg4Vzh4eHggUENJL1BDSWUgV2lyZWxlc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFBDSSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSB3aXJlbGVzcyBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbXdsOGsuICBJZiB1bnN1cmUsIHNheSBOLgorCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9LY29uZmlnIgpAQCAtNTkwLDUgKzQ5Miw2IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnIgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGFjNTkwZTFjLi5kNzgwNDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtMjQsNiArMjQsOCBAQAogb2JqLSQoQ09ORklHX1BDSV9BVE1FTCkgICAgICAgICArPSBhdG1lbF9wY2kubyAKIG9iai0kKENPTkZJR19QQ01DSUFfQVRNRUwpICAgICAgKz0gYXRtZWxfY3MubwogCitvYmotJChDT05GSUdfQVQ3NkM1MFhfVVNCKSAgICAgICs9IGF0NzZjNTB4LXVzYi5vCisKIG9iai0kKENPTkZJR19QUklTTTU0KQkJKz0gcHJpc201NC8KIAogb2JqLSQoQ09ORklHX0hPU1RBUCkJCSs9IGhvc3RhcC8KQEAgLTQ2LDYgKzQ4LDggQEAKIAogb2JqLSQoQ09ORklHX0FETTgyMTEpCSs9IGFkbTgyMTEubwogCitvYmotJChDT05GSUdfTVdMOEspCSs9IG13bDhrLm8KKwogb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bHdpZmkvCiBvYmotJChDT05GSUdfUlQyWDAwKQkrPSBydDJ4MDAvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBmYzQzMjJjLi43ZTgwYWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC00OTYsMzkgKzQ5Niw0MSBAQAogICogc28gYWxsIHJpZCBhY2Nlc3Mgc2hvdWxkIHVzZSB0aGUgcmVhZC93cml0ZVhYWFJpZCByb3V0aW5lcy4KICAqLwogCi0vKiBUaGlzIGlzIHJlZHVuZGFudCBmb3IgeDg2IGFyY2hzLCBidXQgaXQgc2VlbXMgbmVjZXNzYXJ5IGZvciBBUk0gKi8KLSNwcmFnbWEgcGFjaygxKQotCiAvKiBUaGlzIHN0cnVjdHVyZSBjYW1lIGZyb20gYW4gZW1haWwgc2VudCB0byBtZSBmcm9tIGFuIGVuZ2luZWVyIGF0CiAgICBhaXJvbmV0IGZvciBpbmNsdXNpb24gaW50byB0aGlzIGRyaXZlciAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgV2VwS2V5UmlkIFdlcEtleVJpZDsKK3N0cnVjdCBXZXBLZXlSaWQgewogCV9fbGUxNiBsZW47CiAJX19sZTE2IGtpbmRleDsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBrbGVuOwogCXU4IGtleVsxNl07Ci19IFdlcEtleVJpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBmcm9tIHRoZSBBaXJvbmV0J3MgUEM0NTAwIERldmVsb3BlcnMgTWFudWFsICovCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkIFNzaWQ7CitzdHJ1Y3QgU3NpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBzc2lkWzMyXTsKLX0gU3NpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkUmlkIFNzaWRSaWQ7CitzdHJ1Y3QgU3NpZFJpZCB7CiAJX19sZTE2IGxlbjsKIAlTc2lkIHNzaWRzWzNdOwotfSBTc2lkUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IE1vZHVsYXRpb25SaWQgTW9kdWxhdGlvblJpZDsKK3N0cnVjdCBNb2R1bGF0aW9uUmlkIHsKICAgICAgICAgX19sZTE2IGxlbjsKICAgICAgICAgX19sZTE2IG1vZHVsYXRpb247CiAjZGVmaW5lIE1PRF9ERUZBVUxUIGNwdV90b19sZTE2KDApCiAjZGVmaW5lIE1PRF9DQ0sgY3B1X3RvX2xlMTYoMSkKICNkZWZpbmUgTU9EX01PSyBjcHVfdG9fbGUxNigyKQotfSBNb2R1bGF0aW9uUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IENvbmZpZ1JpZCBDb25maWdSaWQ7CitzdHJ1Y3QgQ29uZmlnUmlkIHsKIAlfX2xlMTYgbGVuOyAvKiBzaXplb2YoQ29uZmlnUmlkKSAqLwogCV9fbGUxNiBvcG1vZGU7IC8qIG9wZXJhdGluZyBtb2RlICovCiAjZGVmaW5lIE1PREVfU1RBX0lCU1MgY3B1X3RvX2xlMTYoMCkKQEAgLTY0OSw5ICs2NTEsMTAgQEAKICNkZWZpbmUgTUFHSUNfU1RBWV9JTl9DQU0gKDE8PDEwKQogCXU4IG1hZ2ljQ29udHJvbDsKIAlfX2xlMTYgYXV0b1dha2U7Ci19IENvbmZpZ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0dXNSaWQgU3RhdHVzUmlkOworc3RydWN0IFN0YXR1c1JpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBtb2RlOwpAQCAtNzA3LDIxICs3MTAsMjMgQEAKICNkZWZpbmUgU1RBVF9MRUFQRkFJTEVEIDkxCiAjZGVmaW5lIFNUQVRfTEVBUFRJTUVET1VUIDkyCiAjZGVmaW5lIFNUQVRfTEVBUENPTVBMRVRFIDkzCi19IFN0YXR1c1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0c1JpZCBTdGF0c1JpZDsKK3N0cnVjdCBTdGF0c1JpZCB7CiAJX19sZTE2IGxlbjsKIAlfX2xlMTYgc3BhY2VyOwogCV9fbGUzMiB2YWxzWzEwMF07Ci19IFN0YXRzUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLQotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQVBMaXN0UmlkIEFQTGlzdFJpZDsKK3N0cnVjdCBBUExpc3RSaWQgewogCV9fbGUxNiBsZW47CiAJdTggYXBbNF1bRVRIX0FMRU5dOwotfSBBUExpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQ2FwYWJpbGl0eVJpZCBDYXBhYmlsaXR5UmlkOworc3RydWN0IENhcGFiaWxpdHlSaWQgewogCV9fbGUxNiBsZW47CiAJY2hhciBvdWlbM107CiAJY2hhciB6ZXJvOwpAQCAtNzQ4LDE3ICs3NTMsMTggQEAKIAlfX2xlMTYgYm9vdEJsb2NrVmVyOwogCV9fbGUxNiByZXF1aXJlZEhhcmQ7CiAJX19sZTE2IGV4dFNvZnRDYXA7Ci19IENhcGFiaWxpdHlSaWQ7Ci0KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQlNTTGlzdFJpZEV4dHJhIEJTU0xpc3RSaWRFeHRyYTsKK3N0cnVjdCBCU1NMaXN0UmlkRXh0cmEgewogICBfX2xlMTYgdW5rbm93bls0XTsKICAgdTggZml4ZWRbMTJdOyAvKiBXTEFOIG1hbmFnZW1lbnQgZnJhbWUgKi8KICAgdTggaWVwWzYyNF07Ci19IEJTU0xpc3RSaWRFeHRyYTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBCU1NMaXN0UmlkIEJTU0xpc3RSaWQ7CitzdHJ1Y3QgQlNTTGlzdFJpZCB7CiAgIF9fbGUxNiBsZW47CiAgIF9fbGUxNiBpbmRleDsgLyogRmlyc3QgaXMgMCBhbmQgMHhmZmZmIG1lYW5zIGVuZCBvZiBsaXN0ICovCiAjZGVmaW5lIFJBRElPX0ZIIDEgLyogRnJlcXVlbmN5IGhvcHBpbmcgcmFkaW8gdHlwZSAqLwpAQCAtNzg5LDMzICs3OTUsMzcgQEAKIAogICAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwogICBCU1NMaXN0UmlkRXh0cmEgZXh0cmE7Ci19IEJTU0xpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBCU1NMaXN0UmlkIGJzczsKICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfSBCU1NMaXN0RWxlbWVudDsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaUVudHJ5IHRkc1Jzc2lFbnRyeTsKK3N0cnVjdCB0ZHNSc3NpRW50cnkgewogICB1OCByc3NpcGN0OwogICB1OCByc3NpZEJtOwotfSB0ZHNSc3NpRW50cnk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaVJpZCB0ZHNSc3NpUmlkOworc3RydWN0IHRkc1Jzc2lSaWQgewogICB1MTYgbGVuOwogICB0ZHNSc3NpRW50cnkgeFsyNTZdOwotfSB0ZHNSc3NpUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1MTYgbGVuOwotCXUxNiBzdGF0ZTsKLQl1MTYgbXVsdGljYXN0VmFsaWQ7Cit0eXBlZGVmIHN0cnVjdCBNSUNSaWQgTUlDUmlkOworc3RydWN0IE1JQ1JpZCB7CisJX19sZTE2IGxlbjsKKwlfX2xlMTYgc3RhdGU7CisJX19sZTE2IG11bHRpY2FzdFZhbGlkOwogCXU4ICBtdWx0aWNhc3RbMTZdOwotCXUxNiB1bmljYXN0VmFsaWQ7CisJX19sZTE2IHVuaWNhc3RWYWxpZDsKIAl1OCAgdW5pY2FzdFsxNl07Ci19IE1JQ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBNSUNCdWZmZXIgTUlDQnVmZmVyOworc3RydWN0IE1JQ0J1ZmZlciB7CiAJX19iZTE2IHR5cGVsZW47CiAKIAl1bmlvbiB7CkBAIC04MzAsMTUgKzg0MCwxMyBAQAogCX0gdTsKIAlfX2JlMzIgbWljOwogCV9fYmUzMiBzZXE7Ci19IE1JQ0J1ZmZlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTggZGFbRVRIX0FMRU5dOwogCXU4IHNhW0VUSF9BTEVOXTsKIH0gZXRoZXJIZWFkOwogCi0jcHJhZ21hIHBhY2soKQotCiAjZGVmaW5lIFRYQ1RMX1RYT0sgKDE8PDEpIC8qIHJlcG9ydCBpZiB0eCBpcyBvayAqLwogI2RlZmluZSBUWENUTF9UWEVYICgxPDwyKSAvKiByZXBvcnQgaWYgdHggZmFpbHMgKi8KICNkZWZpbmUgVFhDVExfODAyXzMgKDA8PDMpIC8qIDgwMi4zIHBhY2tldCAqLwpAQCAtOTgxLDYgKzk4OSwxNCBAQAogCWRtYV9hZGRyX3QgaG9zdF9hZGRyOwogfSBUeEZpZDsKIAorc3RydWN0IHJ4X2hkciB7CisJX19sZTE2IHN0YXR1cywgbGVuOworCXU4IHJzc2lbMl07CisJdTggcmF0ZTsKKwl1OCBmcmVxOworCV9fbGUxNiB0bXBbNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCAgY3RsOiAxNTsKIAl1bnNpZ25lZCBpbnQgIHJkeTogMTsKQEAgLTEwNzAsMTAgKzEwODYsNiBAQAogCX0KIH07CiAKLS8vIEZyZXF1ZW5jeSBsaXN0IChtYXAgY2hhbm5lbHMgdG8gZnJlcXVlbmNpZXMpCi1zdGF0aWMgY29uc3QgbG9uZyBmcmVxdWVuY3lfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogLy8gQSBmZXcgZGV0YWlscyBuZWVkZWQgZm9yIFdFUCAoV2lyZWxlc3MgRXF1aXZhbGVudCBQcml2YWN5KQogI2RlZmluZSBNQVhfS0VZX1NJWkUgMTMJCQkvLyAxMjggKD8pIGJpdHMKICNkZWZpbmUgTUlOX0tFWV9TSVpFICA1CQkJLy8gNDAgYml0cyBSQzQgLSBXRVAKQEAgLTEwODIsMTIgKzEwOTQsNiBAQAogCXU4CWtleVsxNl07CS8qIDQwLWJpdCBhbmQgMTA0LWJpdCBrZXlzICovCiB9IHdlcF9rZXlfdDsKIAotLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotI2lmbmRlZiBJV19FTkNPREVfTk9LRVkKLSNkZWZpbmUgSVdfRU5DT0RFX05PS0VZICAgICAgICAgMHgwODAwICAvKiBLZXkgaXMgd3JpdGUgb25seSwgc28gbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgSVdfRU5DT0RFX01PREUgIChJV19FTkNPREVfRElTQUJMRUQgfCBJV19FTkNPREVfUkVTVFJJQ1RFRCB8IElXX0VOQ09ERV9PUEVOKQotI2VuZGlmIC8qIElXX0VOQ09ERV9OT0tFWSAqLwotCiAvKiBMaXN0IG9mIFdpcmVsZXNzIEhhbmRsZXJzIChuZXcgQVBJKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglhaXJvX2hhbmRsZXJfZGVmOwogCkBAIC0xMTU1LDcgKzExNjEsNyBAQAogCSAgIHVzZSB0aGUgaGlnaCBiaXQgdG8gbWFyayB3aGV0aGVyIGl0IGlzIGluIHVzZS4gKi8KICNkZWZpbmUgTUFYX0ZJRFMgNgogI2RlZmluZSBNUElfTUFYX0ZJRFMgMQotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOwogCUNvbmZpZ1JpZCBjb25maWc7CiAJY2hhciBrZXlpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCiAJY2hhciBkZWZpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCkBAIC0xMjI5LDYgKzEyMzUsOSBAQAogI2RlZmluZQlQQ0lfU0hBUkVEX0xFTgkJMipNUElfTUFYX0ZJRFMqUEtUU0laRStSSURTSVpFCiAJY2hhcgkJCXByb2NfbmFtZVtJRk5BTVNJWl07CiAKKwlpbnQJCQl3ZXBfY2FwYWJsZTsKKwlpbnQJCQltYXhfd2VwX2lkeDsKKwogCS8qIFdQQS1yZWxhdGVkIHN0dWZmICovCiAJdW5zaWduZWQgaW50IGJzc0xpc3RGaXJzdDsKIAl1bnNpZ25lZCBpbnQgYnNzTGlzdE5leHQ7CkBAIC0xMjg3LDYgKzEyOTYsMjkgQEAKIHN0YXRpYyB2b2lkIGVtbWgzMl9maW5hbChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggZGlnZXN0WzRdKTsKIHN0YXRpYyBpbnQgZmxhc2hwY2hhcihzdHJ1Y3QgYWlyb19pbmZvICphaSxpbnQgYnl0ZSxpbnQgZHdlbGx0aW1lKTsKIAorc3RhdGljIHZvaWQgYWdlX21pY19jb250ZXh0KG1pY2NudHggKmN1ciwgbWljY250eCAqb2xkLCB1OCAqa2V5LCBpbnQga2V5X2xlbiwKKwkJCSAgICBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCS8qIElmIHRoZSBjdXJyZW50IE1JQyBjb250ZXh0IGlzIHZhbGlkIGFuZCBpdHMga2V5IGlzIHRoZSBzYW1lIGFzCisJICogdGhlIE1JQyByZWdpc3RlciwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgorCSAqLworCWlmIChjdXItPnZhbGlkICYmIChtZW1jbXAoY3VyLT5rZXksIGtleSwga2V5X2xlbikgPT0gMCkpCisJCXJldHVybjsKKworCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCisJbWVtY3B5KG9sZCwgY3VyLCBzaXplb2YoKmN1cikpOworCisJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLworCW1lbWNweShjdXItPmtleSwga2V5LCBrZXlfbGVuKTsKKwljdXItPndpbmRvdyAgPSAzMzsgLyogV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZSAqLworCWN1ci0+cnggICAgICA9IDA7ICAvKiBSeCBTZXF1ZW5jZSBudW1iZXJzICovCisJY3VyLT50eCAgICAgID0gMDsgIC8qIFR4IHNlcXVlbmNlIG51bWJlcnMgKi8KKwljdXItPnZhbGlkICAgPSAxOyAgLyogS2V5IGlzIG5vdyB2YWxpZCAqLworCisJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KKwllbW1oMzJfc2V0c2VlZCgmY3VyLT5zZWVkLCBrZXksIGtleV9sZW4sIHRmbSk7Cit9CisKIC8qIG1pY2luaXQgLSBJbml0aWFsaXplIG1pYyBzZWVkICovCiAKIHN0YXRpYyB2b2lkIG1pY2luaXQoc3RydWN0IGFpcm9faW5mbyAqYWkpCkBAIC0xMjk3LDQ5ICsxMzI5LDI2IEBACiAJUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9NSUMsICZtaWNfcmlkLCBzaXplb2YobWljX3JpZCksIDApOwogCXVwKCZhaS0+c2VtKTsKIAotCWFpLT5taWNzdGF0cy5lbmFibGVkID0gKG1pY19yaWQuc3RhdGUgJiAweDAwRkYpID8gMSA6IDA7Ci0KLQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJLyogS2V5IG11c3QgYmUgdmFsaWQgYW5kIGRpZmZlcmVudCAqLwotCQlpZiAobWljX3JpZC5tdWx0aWNhc3RWYWxpZCAmJiAoIWFpLT5tb2RbMF0ubUN0eC52YWxpZCB8fAotCQkgICAgKG1lbWNtcCAoYWktPm1vZFswXS5tQ3R4LmtleSwgbWljX3JpZC5tdWx0aWNhc3QsCi0JCQkgICAgIHNpemVvZihhaS0+bW9kWzBdLm1DdHgua2V5KSkgIT0gMCkpKSB7Ci0JCQkvKiBBZ2UgY3VycmVudCBtaWMgQ29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzFdLm1DdHgsJmFpLT5tb2RbMF0ubUN0eCxzaXplb2YobWljY250eCkpOwotCQkJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzBdLm1DdHgua2V5LG1pY19yaWQubXVsdGljYXN0LHNpemVvZihtaWNfcmlkLm11bHRpY2FzdCkpOwotCQkJYWktPm1vZFswXS5tQ3R4LndpbmRvdyAgPSAzMzsgLy9XaW5kb3cgYWx3YXlzIHBvaW50cyB0byB0aGUgbWlkZGxlCi0JCQlhaS0+bW9kWzBdLm1DdHgucnggICAgICA9IDA7ICAvL1J4IFNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0ubUN0eC50eCAgICAgID0gMDsgIC8vVHggc2VxdWVuY2UgbnVtYmVycwotCQkJYWktPm1vZFswXS5tQ3R4LnZhbGlkICAgPSAxOyAgLy9LZXkgaXMgbm93IHZhbGlkCi0gIAotCQkJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KLQkJCWVtbWgzMl9zZXRzZWVkKCZhaS0+bW9kWzBdLm1DdHguc2VlZCxtaWNfcmlkLm11bHRpY2FzdCxzaXplb2YobWljX3JpZC5tdWx0aWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCi0JCS8qIEtleSBtdXN0IGJlIHZhbGlkIGFuZCBkaWZmZXJlbnQgKi8KLQkJaWYgKG1pY19yaWQudW5pY2FzdFZhbGlkICYmICghYWktPm1vZFswXS51Q3R4LnZhbGlkIHx8IAotCQkgICAgKG1lbWNtcChhaS0+bW9kWzBdLnVDdHgua2V5LCBtaWNfcmlkLnVuaWNhc3QsCi0JCQkgICAgc2l6ZW9mKGFpLT5tb2RbMF0udUN0eC5rZXkpKSAhPSAwKSkpIHsKLQkJCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMV0udUN0eCwmYWktPm1vZFswXS51Q3R4LHNpemVvZihtaWNjbnR4KSk7Ci0JCQkvKiBJbml0aWFsaXplIG5ldyBjb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMF0udUN0eC5rZXksbWljX3JpZC51bmljYXN0LHNpemVvZihtaWNfcmlkLnVuaWNhc3QpKTsKLQkKLQkJCWFpLT5tb2RbMF0udUN0eC53aW5kb3cgID0gMzM7IC8vV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZQotCQkJYWktPm1vZFswXS51Q3R4LnJ4ICAgICAgPSAwOyAgLy9SeCBTZXF1ZW5jZSBudW1iZXJzCi0JCQlhaS0+bW9kWzBdLnVDdHgudHggICAgICA9IDA7ICAvL1R4IHNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0udUN0eC52YWxpZCAgID0gMTsgIC8vS2V5IGlzIG5vdyB2YWxpZAotCQotCQkJLy9HaXZlIGtleSB0byBtaWMgc2VlZAotCQkJZW1taDMyX3NldHNlZWQoJmFpLT5tb2RbMF0udUN0eC5zZWVkLCBtaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCX0gZWxzZSB7Ci0gICAgICAvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwgdXBkYXRlCi0gICAgICAgKiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIHRoZSBrZXkgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgotICAgICAgICovCisJYWktPm1pY3N0YXRzLmVuYWJsZWQgPSAobGUxNl90b19jcHUobWljX3JpZC5zdGF0ZSkgJiAweDAwRkYpID8gMSA6IDA7CisJaWYgKCFhaS0+bWljc3RhdHMuZW5hYmxlZCkgeworCQkvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwKKwkJICogdXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgdGhlIGtleSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCisJCSAqLwogCQlhaS0+bW9kWzBdLnVDdHgudmFsaWQgPSAwOwogCQlhaS0+bW9kWzBdLm1DdHgudmFsaWQgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKG1pY19yaWQubXVsdGljYXN0VmFsaWQpIHsKKwkJYWdlX21pY19jb250ZXh0KCZhaS0+bW9kWzBdLm1DdHgsICZhaS0+bW9kWzFdLm1DdHgsCisJCSAgICAgICAgICAgICAgICBtaWNfcmlkLm11bHRpY2FzdCwgc2l6ZW9mKG1pY19yaWQubXVsdGljYXN0KSwKKwkJICAgICAgICAgICAgICAgIGFpLT50Zm0pOworCX0KKworCWlmIChtaWNfcmlkLnVuaWNhc3RWYWxpZCkgeworCQlhZ2VfbWljX2NvbnRleHQoJmFpLT5tb2RbMF0udUN0eCwgJmFpLT5tb2RbMV0udUN0eCwKKwkJCQltaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLAorCQkJCWFpLT50Zm0pOwogCX0KIH0KIApAQCAtMjYzNywxNyArMjY0NiwyMSBAQAogCS5wYXJzZSA9IHdsbF9oZWFkZXJfcGFyc2UsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm8xMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYWlyb19vcGVuLAorCS5uZG9fc3RvcCAJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gYWlyb19zdGFydF94bWl0MTEsCisJLm5kb19nZXRfc3RhdHMgCQk9IGFpcm9fZ2V0X3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCB3aWZpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFpcm8xMV9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZhaXJvX2hlYWRlcl9vcHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYWlyb19zdGFydF94bWl0MTE7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmYWlyb19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmYWlyb19zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5kb19pb2N0bCA9ICZhaXJvX2lvY3RsOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmYWlyb19jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9ICZhaXJvX29wZW47Ci0JZGV2LT5zdG9wID0gJmFpcm9fY2xvc2U7CiAKIAlkZXYtPnR5cGUgICAgICAgICAgICAgICA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gICAgPSBFVEhfSExFTjsKQEAgLTI3MzAsMjcgKzI3NDMsMzIgQEAKIAkJCSAgICAgICZhaS0+bmV0d29ya19mcmVlX2xpc3QpOwogfQogCi1zdGF0aWMgaW50IGFpcm9fdGVzdF93cGFfY2FwYWJsZShzdHJ1Y3QgYWlyb19pbmZvICphaSkKLXsKLQlpbnQgc3RhdHVzOwotCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhaXJvX29wZW4sCisJLm5kb19zdG9wCQk9IGFpcm9fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGFpcm9fc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBhaXJvX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGFpcm9fc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAotCXN0YXR1cyA9IHJlYWRDYXBhYmlsaXR5UmlkKGFpLCAmY2FwX3JpZCwgMSk7Ci0JaWYgKHN0YXR1cyAhPSBTVUNDRVNTKSByZXR1cm4gMDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXBpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFpcm9fb3BlbiwKKwkubmRvX3N0b3AJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXBpX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gYWlyb19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBhaXJvX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9fc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJCT0gYWlyb19pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYWlyb19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKLQkvKiBPbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTcgb3IgYmV0dGVyIGNhbiBkbyBXUEEgKi8KLQlpZiAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA+IDB4NTMwCi0JICB8fCAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA9PSAweDUzMAotCSAgICAgICYmIGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFN1YlZlcikgPj0gMTcpKSB7Ci0JCWFpcm9fcHJpbnRfaW5mbygiIiwgIldQQSBpcyBzdXBwb3J0ZWQuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIE5vIFdQQSBzdXBwb3J0ICovCi0JYWlyb19wcmludF9pbmZvKCIiLCAiV1BBIHVuc3VwcG9ydGVkIChvbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTciCi0JCSIgYW5kIGdyZWF0ZXIgc3VwcG9ydCBXUEEuICBEZXRlY3RlZCAlcykiLCBjYXBfcmlkLnByb2RWZXIpOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKl9pbml0X2Fpcm9fY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCBpbnQgcG9ydCwKIAkJCQkJICAgaW50IGlzX3BjbWNpYSwgc3RydWN0IHBjaV9kZXYgKnBjaSwKQEAgLTI3NTksNiArMjc3Nyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaTsKIAlpbnQgaSwgcmM7CisJQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwogCiAJLyogQ3JlYXRlIHRoZSBuZXR3b3JrIGRldmljZSBvYmplY3QuICovCiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqYWkpLCAiIiwgZXRoZXJfc2V0dXApOwpAQCAtMjc4OCwyMiArMjgwNywxNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAlhaXJvX25ldHdvcmtzX2luaXRpYWxpemUgKGFpKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKKwogCS8qIFRoZSBBaXJvLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKSB7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXBpX3N0YXJ0X3htaXQ7Ci0JfSBlbHNlCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmFpcm9fc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9ICZhaXJvX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZhaXJvX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZhaXJvX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gJmFpcm9faW9jdGw7CisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKQorCQlkZXYtPm5ldGRldl9vcHMgPSAmbXBpX25ldGRldl9vcHM7CisJZWxzZQorCQlkZXYtPm5ldGRldl9vcHMgPSAmYWlyb19uZXRkZXZfb3BzOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKIAlhaS0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZhaS0+c3B5X2RhdGE7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJmFpLT53aXJlbGVzc19kYXRhOwotCWRldi0+Y2hhbmdlX210dSA9ICZhaXJvX2NoYW5nZV9tdHU7Ci0JZGV2LT5vcGVuID0gJmFpcm9fb3BlbjsKLQlkZXYtPnN0b3AgPSAmYWlyb19jbG9zZTsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHBvcnQ7CiAKQEAgLTI4MjgsNyArMjg0MSw3IEBACiAJfQogCiAJaWYgKHByb2JlKSB7Ci0JCWlmICggc2V0dXBfY2FyZCggYWksIGRldi0+ZGV2X2FkZHIsIDEgKSAhPSBTVUNDRVNTICkgeworCQlpZiAoc2V0dXBfY2FyZChhaSwgZGV2LT5kZXZfYWRkciwgMSkgIT0gU1VDQ0VTUykgewogCQkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiTUFDIGNvdWxkIG5vdCBiZSBlbmFibGVkIiApOwogCQkJcmMgPSAtRUlPOwogCQkJZ290byBlcnJfb3V0X21hcDsKQEAgLTI4MzgsMTggKzI4NTEsNiBAQAogCQlzZXRfYml0KEZMQUdfRkxBU0hJTkcsICZhaS0+ZmxhZ3MpOwogCX0KIAotCS8qIFRlc3QgZm9yIFdQQSBzdXBwb3J0ICovCi0JaWYgKGFpcm9fdGVzdF93cGFfY2FwYWJsZShhaSkpIHsKLQkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKLQkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOwotCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKLQl9IGVsc2UgewotCQlhaS0+YnNzTGlzdEZpcnN0ID0gUklEX0JTU0xJU1RGSVJTVDsKLQkJYWktPmJzc0xpc3ROZXh0ID0gUklEX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKSAtIHNpemVvZihCU1NMaXN0UmlkRXh0cmEpOwotCX0KLQogCXN0cmNweShkZXYtPm5hbWUsICJldGglZCIpOwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKSB7CkBAIC0yODYwLDYgKzI4NjEsNDAgQEAKIAlpZiAoIWFpLT53aWZpZGV2KQogCQlnb3RvIGVycl9vdXRfcmVnOwogCisJcmMgPSByZWFkQ2FwYWJpbGl0eVJpZChhaSwgJmNhcF9yaWQsIDEpOworCWlmIChyYyAhPSBTVUNDRVNTKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X3dpZmk7CisJfQorCS8qIFdFUCBjYXBhYmlsaXR5IGRpc2NvdmVyeSAqLworCWFpLT53ZXBfY2FwYWJsZSA9IChjYXBfcmlkLnNvZnRDYXAgJiBjcHVfdG9fbGUxNigweDAyKSkgPyAxIDogMDsKKwlhaS0+bWF4X3dlcF9pZHggPSAoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkpID8gMyA6IDA7CisKKwlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiRmlybXdhcmUgdmVyc2lvbiAleC4leC4lMDJ4IiwKKwkgICAgICAgICAgICAgICAgKChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4+IDgpICYgMHhGKSwKKwkgICAgICAgICAgICAgICAgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgJiAweEZGKSwKKwkgICAgICAgICAgICAgICAgbGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0U3ViVmVyKSk7CisKKwkvKiBUZXN0IGZvciBXUEEgc3VwcG9ydCAqLworCS8qIE9ubHkgZmlybXdhcmUgdmVyc2lvbnMgNS4zMC4xNyBvciBiZXR0ZXIgY2FuIGRvIFdQQSAqLworCWlmIChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4gMHg1MzAKKwkgfHwgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgPT0gMHg1MzAKKwkgICAgICAmJiBsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRTdWJWZXIpID49IDE3KSkgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSBzdXBwb3J0ZWQuIik7CisKKwkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOworCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOworCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKKwl9IGVsc2UgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSB1bnN1cHBvcnRlZCB3aXRoIGZpcm13YXJlICIKKwkJCSJ2ZXJzaW9ucyBvbGRlciB0aGFuIDUuMzAuMTcuIik7CisKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9CU1NMSVNURklSU1Q7CisJCWFpLT5ic3NMaXN0TmV4dCA9IFJJRF9CU1NMSVNUTkVYVDsKKwkJYWktPmJzc0xpc3RSaWRMZW4gPSBzaXplb2YoQlNTTGlzdFJpZCkgLSBzaXplb2YoQlNTTGlzdFJpZEV4dHJhKTsKKwl9CisKIAlzZXRfYml0KEZMQUdfUkVHSVNURVJFRCwmYWktPmZsYWdzKTsKIAlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiTUFDIGVuYWJsZWQgJXBNIiwgZGV2LT5kZXZfYWRkcik7CiAKQEAgLTMxMjcsMzE0ICszMTYyLDM1NCBAQAogCXJldHVybiAyNDsKIH0KIAorc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfY2lzY29fbWljKHN0cnVjdCBhaXJvX2luZm8gKmFpKQoreworCWlmICh0ZXN0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYWktPmZsYWdzKSkgeworCQlzZXRfYml0KEpPQl9NSUMsICZhaS0+am9icyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWktPnRocl93YWl0KTsKKwl9Cit9CisKKy8qIEFpcm8gU3RhdHVzIGNvZGVzICovCisjZGVmaW5lIFNUQVRfTk9CRUFDT04JMHg4MDAwIC8qIExvc3Mgb2Ygc3luYyAtIG1pc3NlZCBiZWFjb25zICovCisjZGVmaW5lIFNUQVRfTUFYUkVUUklFUwkweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KKyNkZWZpbmUgU1RBVF9NQVhBUkwJMHg4MDAyIC8qIExvc3Mgb2Ygc3luYyAtIGF2ZXJhZ2UgcmV0cnkgbGV2ZWwgZXhjZWVkZWQqLworI2RlZmluZSBTVEFUX0ZPUkNFTE9TUwkweDgwMDMgLyogTG9zcyBvZiBzeW5jIC0gaG9zdCByZXF1ZXN0ICovCisjZGVmaW5lIFNUQVRfVFNGU1lOQwkweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLworI2RlZmluZSBTVEFUX0RFQVVUSAkweDgxMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfRElTQVNTT0MJMHg4MjAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FTU09DX0ZBSUwJMHg4NDAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FVVEhfRkFJTAkweDAzMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfQVNTT0MJMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KKyNkZWZpbmUgU1RBVF9SRUFTU09DICAgIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KKworc3RhdGljIHZvaWQgYWlyb19wcmludF9zdGF0dXMoY29uc3QgY2hhciAqZGV2bmFtZSwgdTE2IHN0YXR1cykKK3sKKwl1OCByZWFzb24gPSBzdGF0dXMgJiAweEZGOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFNUQVRfTk9CRUFDT046CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJsaW5rIGxvc3QgKG1pc3NlZCBiZWFjb25zKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfTUFYUkVUUklFUzoKKwljYXNlIFNUQVRfTUFYQVJMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAibGluayBsb3N0IChtYXggcmV0cmllcykiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0ZPUkNFTE9TUzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAobG9jYWwgY2hvaWNlKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfVFNGU1lOQzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAoVFNGIHN5bmMgbG9zdCkiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0RFQVVUSDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImRlYXV0aGVudGljYXRlZCAocmVhc29uOiAlZCkiLCByZWFzb24pOworCQlicmVhazsKKwljYXNlIFNUQVRfRElTQVNTT0M6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJkaXNhc3NvY2lhdGVkIChyZWFzb246ICVkKSIsIHJlYXNvbik7CisJCWJyZWFrOworCWNhc2UgU1RBVF9BU1NPQ19GQUlMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAiYXNzb2NpYXRpb24gZmFpbGVkIChyZWFzb246ICVkKSIsCisJCQkgICAgICAgcmVhc29uKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0FVVEhfRkFJTDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImF1dGhlbnRpY2F0aW9uIGZhaWxlZCAocmVhc29uOiAlZCkiLAorCQkJICAgICAgIHJlYXNvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfbGluayhzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IHNjYW5fZm9yY2Vsb3NzID0gMDsKKwl1MTYgc3RhdHVzOworCisJLyogR2V0IG5ldyBzdGF0dXMgYW5kIGFja25vd2xlZGdlIHRoZSBsaW5rIGNoYW5nZSAqLworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KElONDUwMChhaSwgTElOS1NUQVQpKTsKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfTElOSyk7CisKKwlpZiAoKHN0YXR1cyA9PSBTVEFUX0ZPUkNFTE9TUykgJiYgKGFpLT5zY2FuX3RpbWVvdXQgPiAwKSkKKwkJc2Nhbl9mb3JjZWxvc3MgPSAxOworCisJYWlyb19wcmludF9zdGF0dXMoYWktPmRldi0+bmFtZSwgc3RhdHVzKTsKKworCWlmICgoc3RhdHVzID09IFNUQVRfQVNTT0MpIHx8IChzdGF0dXMgPT0gU1RBVF9SRUFTU09DKSkgeworCQlpZiAoYXV0b193ZXApCisJCQlhaS0+ZXhwaXJlcyA9IDA7CisJCWlmIChhaS0+bGlzdF9ic3NfdGFzaykKKwkJCXdha2VfdXBfcHJvY2VzcyhhaS0+bGlzdF9ic3NfdGFzayk7CisJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYWktPmZsYWdzKTsKKwkJc2V0X2JpdChGTEFHX1VQREFURV9NVUxUSSwgJmFpLT5mbGFncyk7CisKKwkJaWYgKGRvd25fdHJ5bG9jaygmYWktPnNlbSkgIT0gMCkgeworCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhaS0+am9icyk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFpLT50aHJfd2FpdCk7CisJCX0gZWxzZQorCQkJYWlyb19zZW5kX2V2ZW50KGFpLT5kZXYpOworCX0gZWxzZSBpZiAoIXNjYW5fZm9yY2Vsb3NzKSB7CisJCWlmIChhdXRvX3dlcCAmJiAhYWktPmV4cGlyZXMpIHsKKwkJCWFpLT5leHBpcmVzID0gUlVOX0FUKDMqSFopOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhaS0+dGhyX3dhaXQpOworCQl9CisKKwkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJ1wwJywgRVRIX0FMRU4pOworCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KGFpLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfcngoc3RydWN0IGFpcm9faW5mbyAqYWkpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJX19sZTE2IGZjLCB2LCAqYnVmZmVyLCB0bXBidWZbNF07CisJdTE2IGxlbiwgaGRybGVuID0gMCwgZ2FwLCBmaWQ7CisJc3RydWN0IHJ4X2hkciBoZHI7CisJaW50IHN1Y2Nlc3MgPSAwOworCisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCAmYWktPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKQorCQkJbXBpX3JlY2VpdmVfODAyXzExKGFpKTsKKwkJZWxzZQorCQkJbXBpX3JlY2VpdmVfODAyXzMoYWkpOworCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBSWEZJRCk7CisKKwkvKiBHZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KKwlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKSB7CisJCWJhcF9zZXR1cCAoYWksIGZpZCwgNCwgQkFQMCk7CisJCWJhcF9yZWFkIChhaSwgKF9fbGUxNiopJmhkciwgc2l6ZW9mKGhkciksIEJBUDApOworCQkvKiBCYWQgQ1JDLiBJZ25vcmUgcGFja2V0ICovCisJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCisJCQloZHIubGVuID0gMDsKKwkJaWYgKGFpLT53aWZpZGV2ID09IE5VTEwpCisJCQloZHIubGVuID0gMDsKKwl9IGVsc2UgeworCQliYXBfc2V0dXAoYWksIGZpZCwgMHgzNiwgQkFQMCk7CisJCWJhcF9yZWFkKGFpLCAmaGRyLmxlbiwgMiwgQkFQMCk7CisJfQorCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOworCisJaWYgKGxlbiA+IEFJUk9fREVGX01UVSkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQmFkIHNpemUgJWQiLCBsZW4pOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChsZW4gPT0gMCkKKwkJZ290byBkb25lOworCisJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQliYXBfcmVhZChhaSwgJmZjLCBzaXplb2YgKGZjKSwgQkFQMCk7CisJCWhkcmxlbiA9IGhlYWRlcl9sZW4oZmMpOworCX0gZWxzZQorCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIGhkcmxlbiArIDIgKyAyKTsKKwlpZiAoIXNrYikgeworCQlhaS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBUaGlzIHdheSB0aGUgSVAgaGVhZGVyIGlzIGFsaWduZWQgKi8KKwlidWZmZXIgPSAoX19sZTE2ICopIHNrYl9wdXQoc2tiLCBsZW4gKyBoZHJsZW4pOworCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJYnVmZmVyWzBdID0gZmM7CisJCWJhcF9yZWFkKGFpLCBidWZmZXIgKyAxLCBoZHJsZW4gLSAyLCBCQVAwKTsKKwkJaWYgKGhkcmxlbiA9PSAyNCkKKwkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIDYsIEJBUDApOworCisJCWJhcF9yZWFkKGFpLCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKKwkJZ2FwID0gbGUxNl90b19jcHUodik7CisJCWlmIChnYXApIHsKKwkJCWlmIChnYXAgPD0gOCkgeworCQkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIGdhcCwgQkFQMCk7CisJCQl9IGVsc2UgeworCQkJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJnYXBsZW4gdG9vICIKKwkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKKwkJCX0KKwkJfQorCQliYXBfcmVhZChhaSwgYnVmZmVyICsgaGRybGVuLzIsIGxlbiwgQkFQMCk7CisJfSBlbHNlIHsKKwkJTUlDQnVmZmVyIG1pY2J1ZjsKKworCQliYXBfcmVhZChhaSwgYnVmZmVyLCBFVEhfQUxFTiAqIDIsIEJBUDApOworCQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopICZtaWNidWYsIHNpemVvZiAobWljYnVmKSwgQkFQMCk7CisJCQlpZiAobnRvaHMobWljYnVmLnR5cGVsZW4pID4gMHgwNURDKQorCQkJCWJhcF9zZXR1cChhaSwgZmlkLCAweDQ0LCBCQVAwKTsKKwkJCWVsc2UgeworCQkJCWlmIChsZW4gPD0gc2l6ZW9mIChtaWNidWYpKSB7CisJCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlsZW4gLT0gc2l6ZW9mKG1pY2J1Zik7CisJCQkJc2tiX3RyaW0oc2tiLCBsZW4gKyBoZHJsZW4pOworCQkJfQorCQl9CisKKwkJYmFwX3JlYWQoYWksIGJ1ZmZlciArIEVUSF9BTEVOLCBsZW4sIEJBUDApOworCQlpZiAoZGVjYXBzdWxhdGUoYWksICZtaWNidWYsIChldGhlckhlYWQqKSBidWZmZXIsIGxlbikpCisJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKKwkJZWxzZQorCQkJc3VjY2VzcyA9IDE7CisJfQorCisjaWZkZWYgV0lSRUxFU1NfU1BZCisJaWYgKHN1Y2Nlc3MgJiYgKGFpLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkpIHsKKwkJY2hhciAqc2E7CisJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKKworCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KKwkJaWYgKCF0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJCXNhID0gKGNoYXIgKikgYnVmZmVyICsgNjsKKwkJCWJhcF9zZXR1cChhaSwgZmlkLCA4LCBCQVAwKTsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopIGhkci5yc3NpLCAyLCBCQVAwKTsKKwkJfSBlbHNlCisJCQlzYSA9IChjaGFyICopIGJ1ZmZlciArIDEwOworCQl3c3RhdHMucXVhbCA9IGhkci5yc3NpWzBdOworCQlpZiAoYWktPnJzc2kpCisJCQl3c3RhdHMubGV2ZWwgPSAweDEwMCAtIGFpLT5yc3NpW2hkci5yc3NpWzFdXS5yc3NpZEJtOworCQllbHNlCisJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKKwkJd3N0YXRzLm5vaXNlID0gYWktPndzdGF0cy5xdWFsLm5vaXNlOworCQl3c3RhdHMudXBkYXRlZCA9ICBJV19RVUFMX0xFVkVMX1VQREFURUQKKwkJCQl8IElXX1FVQUxfUVVBTF9VUERBVEVECisJCQkJfCBJV19RVUFMX0RCTTsKKwkJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJCXdpcmVsZXNzX3NweV91cGRhdGUoYWktPmRldiwgc2EsICZ3c3RhdHMpOworCX0KKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KKworZG9uZToKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCisJaWYgKHN1Y2Nlc3MpIHsKKwkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCQkJc2tiLT5kZXYgPSBhaS0+d2lmaWRldjsKKwkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CisJCX0gZWxzZQorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWktPmRldik7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQluZXRpZl9yeChza2IpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfdHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBzdGF0dXMpCit7CisJaW50IGksIGxlbiA9IDAsIGluZGV4ID0gLTE7CisJdTE2IGZpZDsKKworCWlmICh0ZXN0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncykpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIC0xKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWktPmF1eF9sb2NrLCBmbGFncyk7CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhaS0+dHhxKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWktPmF1eF9sb2NrLGZsYWdzKTsKKwkJCW1waV9zZW5kX3BhY2tldChhaS0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2JpdChGTEFHX1BFTkRJTkdfWE1JVCwgJmFpLT5mbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaS0+YXV4X2xvY2ssZmxhZ3MpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShhaS0+ZGV2KTsKKwkJfQorCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhDUFkgfCBFVl9UWEVYQykpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBUWENPTVBMRklEKTsKKworCWZvcihpID0gMDsgaSA8IE1BWF9GSURTOyBpKyspIHsKKwkJaWYgKChhaS0+Zmlkc1tpXSAmIDB4ZmZmZikgPT0gZmlkKSB7CisJCQlsZW4gPSBhaS0+Zmlkc1tpXSA+PiAxNjsKKwkJCWluZGV4ID0gaTsKKwkJfQorCX0KKworCWlmIChpbmRleCAhPSAtMSkgeworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIGluZGV4KTsKKworCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhFWEMpKTsKKworCQkvKiBTZXQgdXAgdG8gYmUgdXNlZCBhZ2FpbiAqLworCQlhaS0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOworCQlpZiAoaW5kZXggPCBNQVhfRklEUyAvIDIpIHsKKwkJCWlmICghdGVzdF9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPmRldik7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPndpZmlkZXYpOworCQl9CisJfSBlbHNlIHsKKwkJT1VUNDUwMChhaSwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIlVuYWxsb2NhdGVkIEZJRCB3YXMgdXNlZCB0byB4bWl0Iik7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0JdTE2IHN0YXR1czsKLQl1MTYgZmlkOwotCXN0cnVjdCBhaXJvX2luZm8gKmFwcml2ID0gZGV2LT5tbF9wcml2OwotCXUxNiBzYXZlZEludGVycnVwdHMgPSAwOworCXUxNiBzdGF0dXMsIHNhdmVkSW50ZXJydXB0cyA9IDA7CisJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGhhbmRsZWQgPSAwOwogCiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlmb3IgKDs7KSB7Ci0JCXN0YXR1cyA9IElONDUwMCggYXByaXYsIEVWU1RBVCApOwotCQlpZiAoICEoc3RhdHVzICYgU1RBVFVTX0lOVFMpIHx8IHN0YXR1cyA9PSAweGZmZmYgKSBicmVhazsKKwkJc3RhdHVzID0gSU40NTAwKGFpLCBFVlNUQVQpOworCQlpZiAoIShzdGF0dXMgJiBTVEFUVVNfSU5UUykgfHwgKHN0YXR1cyA9PSAweGZmZmYpKQorCQkJYnJlYWs7CiAKIAkJaGFuZGxlZCA9IDE7CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9BV0FLRSApIHsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKKwkJaWYgKHN0YXR1cyAmIEVWX0FXQUtFKSB7CisJCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfQVdBS0UpOworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX0FXQUtFKTsKIAkJfQogCiAJCWlmICghc2F2ZWRJbnRlcnJ1cHRzKSB7Ci0JCQlzYXZlZEludGVycnVwdHMgPSBJTjQ1MDAoIGFwcml2LCBFVklOVEVOICk7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZJTlRFTiwgMCApOworCQkJc2F2ZWRJbnRlcnJ1cHRzID0gSU40NTAwKGFpLCBFVklOVEVOKTsKKwkJCU9VVDQ1MDAoYWksIEVWSU5URU4sIDApOwogCQl9CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9NSUMgKSB7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX01JQyApOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJc2V0X2JpdChKT0JfTUlDLCAmYXByaXYtPmpvYnMpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCX0KKwkJaWYgKHN0YXR1cyAmIEVWX01JQykgeworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX01JQyk7CisJCQlhaXJvX2hhbmRsZV9jaXNjb19taWMoYWkpOwogCQl9Ci0JCWlmICggc3RhdHVzICYgRVZfTElOSyApIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQkJCWludCBzY2FuX2ZvcmNlbG9zcyA9IDA7Ci0JCQkvKiBUaGUgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQsIGlmIHlvdSB3YW50IHRvIHB1dCBhCi0JCQkgICBtb25pdG9yIGhvb2sgaW4sIGRvIGl0IGhlcmUuICAoUmVtZW1iZXIgdGhhdAotCQkJICAgaW50ZXJydXB0cyBhcmUgc3RpbGwgZGlzYWJsZWQhKQotCQkJKi8KLQkJCXUxNiBuZXdTdGF0dXMgPSBJTjQ1MDAoYXByaXYsIExJTktTVEFUKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfTElOSyk7Ci0JCQkvKiBIZXJlIGlzIHdoYXQgbmV3U3RhdHVzIG1lYW5zOiAqLwotI2RlZmluZSBOT0JFQUNPTiAweDgwMDAgLyogTG9zcyBvZiBzeW5jIC0gbWlzc2VkIGJlYWNvbnMgKi8KLSNkZWZpbmUgTUFYUkVUUklFUyAweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KLSNkZWZpbmUgTUFYQVJMIDB4ODAwMiAvKiBMb3NzIG9mIHN5bmMgLSBhdmVyYWdlIHJldHJ5IGxldmVsIGV4Y2VlZGVkKi8KLSNkZWZpbmUgRk9SQ0VMT1NTIDB4ODAwMyAvKiBMb3NzIG9mIHN5bmMgLSBob3N0IHJlcXVlc3QgKi8KLSNkZWZpbmUgVFNGU1lOQyAweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLwotI2RlZmluZSBERUFVVEggMHg4MTAwIC8qIERlYXV0aGVudGljYXRpb24gKGxvdyBieXRlIGlzIHJlYXNvbiBjb2RlKSAqLwotI2RlZmluZSBESVNBU1MgMHg4MjAwIC8qIERpc2Fzc29jaWF0aW9uIChsb3cgYnl0ZSBpcyByZWFzb24gY29kZSkgKi8KLSNkZWZpbmUgQVNTRkFJTCAweDg0MDAgLyogQXNzb2NpYXRpb24gZmFpbHVyZSAobG93IGJ5dGUgaXMgcmVhc29uCi0JCQkgIGNvZGUpICovCi0jZGVmaW5lIEFVVEhGQUlMIDB4MDMwMCAvKiBBdXRoZW50aWNhdGlvbiBmYWlsdXJlIChsb3cgYnl0ZSBpcyByZWFzb24KLQkJCSAgIGNvZGUpICovCi0jZGVmaW5lIEFTU09DSUFURUQgMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KLSNkZWZpbmUgUkVBU1NPQ0lBVEVEIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KLSNkZWZpbmUgUkNfUkVTRVJWRUQgMCAvKiBSZXNlcnZlZCByZXR1cm4gY29kZSAqLwotI2RlZmluZSBSQ19OT1JFQVNPTiAxIC8qIFVuc3BlY2lmaWVkIHJlYXNvbiAqLwotI2RlZmluZSBSQ19BVVRISU5WIDIgLyogUHJldmlvdXMgYXV0aGVudGljYXRpb24gaW52YWxpZCAqLwotI2RlZmluZSBSQ19ERUFVVEggMyAvKiBEZWF1dGhlbnRpY2F0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJICAgICAgIGxlYXZpbmcgKi8KLSNkZWZpbmUgUkNfTk9BQ1QgNCAvKiBEaXNhc3NvY2lhdGVkIGR1ZSB0byBpbmFjdGl2aXR5ICovCi0jZGVmaW5lIFJDX01BWExPQUQgNSAvKiBEaXNhc3NvY2lhdGVkIGJlY2F1c2UgQVAgaXMgdW5hYmxlIHRvIGhhbmRsZQotCQkJYWxsIGN1cnJlbnRseSBhc3NvY2lhdGVkIHN0YXRpb25zICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMiA2IC8qIENsYXNzIDIgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXV0aGVudGljYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMyA3IC8qIENsYXNzIDMgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXNzb2NpYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX1NUQVRMRUFWRSA4IC8qIERpc2Fzc29jaWF0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJCSAgbGVhdmluZyBCU1MgKi8KLSNkZWZpbmUgUkNfTk9BVVRIIDkgLyogU3RhdGlvbiByZXF1ZXN0aW5nIChSZSlBc3NvY2lhdGlvbiBpcyBub3QKLQkJICAgICAgIEF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcmVzcG9uZGluZyBzdGF0aW9uICovCi0JCQlpZiAobmV3U3RhdHVzID09IEZPUkNFTE9TUyAmJiBhcHJpdi0+c2Nhbl90aW1lb3V0ID4gMCkKLQkJCQlzY2FuX2ZvcmNlbG9zcyA9IDE7Ci0JCQlpZihuZXdTdGF0dXMgPT0gQVNTT0NJQVRFRCB8fCBuZXdTdGF0dXMgPT0gUkVBU1NPQ0lBVEVEKSB7Ci0JCQkJaWYgKGF1dG9fd2VwKQotCQkJCQlhcHJpdi0+ZXhwaXJlcyA9IDA7Ci0JCQkJaWYgKGFwcml2LT5saXN0X2Jzc190YXNrKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3MoYXByaXYtPmxpc3RfYnNzX3Rhc2spOwotCQkJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYXByaXYtPmZsYWdzKTsKLQkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX01VTFRJLCAmYXByaXYtPmZsYWdzKTsKIAotCQkJCWlmIChkb3duX3RyeWxvY2soJmFwcml2LT5zZW0pICE9IDApIHsKLQkJCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhcHJpdi0+am9icyk7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9IGVsc2UKLQkJCQkJYWlyb19zZW5kX2V2ZW50KGRldik7Ci0JCQl9IGVsc2UgaWYgKCFzY2FuX2ZvcmNlbG9zcykgewotCQkJCWlmIChhdXRvX3dlcCAmJiAhYXByaXYtPmV4cGlyZXMpIHsKLQkJCQkJYXByaXYtPmV4cGlyZXMgPSBSVU5fQVQoMypIWik7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9Ci0KLQkJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsICdcMCcsIEVUSF9BTEVOKTsKLQkJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LE5VTEwpOwotCQkJfQorCQlpZiAoc3RhdHVzICYgRVZfTElOSykgeworCQkJLyogTGluayBzdGF0dXMgY2hhbmdlZCAqLworCQkJYWlyb19oYW5kbGVfbGluayhhaSk7CiAJCX0KIAogCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlY2VpdmUgKi8KLQkJaWYgKCBzdGF0dXMgJiBFVl9SWCAgKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQkJCV9fbGUxNiBmYywgdjsKLQkJCXUxNiBsZW4sIGhkcmxlbiA9IDA7Ci0jcHJhZ21hIHBhY2soMSkKLQkJCXN0cnVjdCB7Ci0JCQkJX19sZTE2IHN0YXR1cywgbGVuOwotCQkJCXU4IHJzc2lbMl07Ci0JCQkJdTggcmF0ZTsKLQkJCQl1OCBmcmVxOwotCQkJCV9fbGUxNiB0bXBbNF07Ci0JCQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCi0JCQl1MTYgZ2FwOwotCQkJX19sZTE2IHRtcGJ1Zls0XTsKLQkJCV9fbGUxNiAqYnVmZmVyOwotCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQltcGlfcmVjZWl2ZV84MDJfMTEoYXByaXYpOwotCQkJCWVsc2UKLQkJCQkJbXBpX3JlY2VpdmVfODAyXzMoYXByaXYpOwotCQkJCU9VVDQ1MDAoYXByaXYsIEVWQUNLLCBFVl9SWCk7Ci0JCQkJZ290byBleGl0cng7Ci0JCQl9Ci0KLQkJCWZpZCA9IElONDUwMCggYXByaXYsIFJYRklEICk7Ci0KLQkJCS8qIEdldCB0aGUgcGFja2V0IGxlbmd0aCAqLwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJhcF9zZXR1cCAoYXByaXYsIGZpZCwgNCwgQkFQMCk7Ci0JCQkJYmFwX3JlYWQgKGFwcml2LCAoX19sZTE2KikmaGRyLCBzaXplb2YoaGRyKSwgQkFQMCk7Ci0JCQkJLyogQmFkIENSQy4gSWdub3JlIHBhY2tldCAqLwotCQkJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCi0JCQkJCWhkci5sZW4gPSAwOwotCQkJCWlmIChhcHJpdi0+d2lmaWRldiA9PSBOVUxMKQotCQkJCQloZHIubGVuID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJYmFwX3NldHVwIChhcHJpdiwgZmlkLCAweDM2LCBCQVAwKTsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZoZHIubGVuLCAyLCBCQVAwKTsKLQkJCX0KLQkJCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOwotCi0JCQlpZiAobGVuID4gQUlST19ERUZfTVRVKSB7Ci0JCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgIkJhZCBzaXplICVkIiwgbGVuKTsKLQkJCQlnb3RvIGJhZHJ4OwotCQkJfQotCQkJaWYgKGxlbiA9PSAwKQotCQkJCWdvdG8gYmFkcng7Ci0KLQkJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZmYywgc2l6ZW9mKGZjKSwgQkFQMCk7Ci0JCQkJaGRybGVuID0gaGVhZGVyX2xlbihmYyk7Ci0JCQl9IGVsc2UKLQkJCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19za2IoIGxlbiArIGhkcmxlbiArIDIgKyAyICk7Ci0JCQlpZiAoICFza2IgKSB7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJZ290byBiYWRyeDsKLQkJCX0KLQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIFRoaXMgd2F5IHRoZSBJUCBoZWFkZXIgaXMgYWxpZ25lZCAqLwotCQkJYnVmZmVyID0gKF9fbGUxNiopc2tiX3B1dCAoc2tiLCBsZW4gKyBoZHJsZW4pOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJ1ZmZlclswXSA9IGZjOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyICsgMSwgaGRybGVuIC0gMiwgQkFQMCk7Ci0JCQkJaWYgKGhkcmxlbiA9PSAyNCkKLQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIDYsIEJBUDApOwotCi0JCQkJYmFwX3JlYWQgKGFwcml2LCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKLQkJCQlnYXAgPSBsZTE2X3RvX2NwdSh2KTsKLQkJCQlpZiAoZ2FwKSB7Ci0JCQkJCWlmIChnYXAgPD0gOCkgewotCQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIGdhcCwgQkFQMCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiZ2FwbGVuIHRvbyAiCi0JCQkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKLQkJCQkJfQotCQkJCX0KLQkJCQliYXBfcmVhZCAoYXByaXYsIGJ1ZmZlciArIGhkcmxlbi8yLCBsZW4sIEJBUDApOwotCQkJfSBlbHNlIHsKLQkJCQlNSUNCdWZmZXIgbWljYnVmOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyLCBFVEhfQUxFTioyLCBCQVAwKTsKLQkJCQlpZiAoYXByaXYtPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJCQkJYmFwX3JlYWQgKGFwcml2LChfX2xlMTYqKSZtaWNidWYsc2l6ZW9mKG1pY2J1ZiksQkFQMCk7Ci0JCQkJCWlmIChudG9ocyhtaWNidWYudHlwZWxlbikgPiAweDA1REMpCi0JCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDB4NDQsIEJBUDApOwotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChsZW4gPD0gc2l6ZW9mKG1pY2J1ZikpCi0JCQkJCQkJZ290byBiYWRtaWM7Ci0KLQkJCQkJCWxlbiAtPSBzaXplb2YobWljYnVmKTsKLQkJCQkJCXNrYl90cmltIChza2IsIGxlbiArIGhkcmxlbik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYmFwX3JlYWQoYXByaXYsYnVmZmVyK0VUSF9BTEVOLGxlbixCQVAwKTsKLQkJCQlpZiAoZGVjYXBzdWxhdGUoYXByaXYsJm1pY2J1ZiwoZXRoZXJIZWFkKilidWZmZXIsbGVuKSkgewotYmFkbWljOgotCQkJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKLWJhZHJ4OgotCQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQkJCQkJZ290byBleGl0cng7Ci0JCQkJfQotCQkJfQotI2lmZGVmIFdJUkVMRVNTX1NQWQotCQkJaWYgKGFwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgewotCQkJCWNoYXIgKnNhOwotCQkJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQkJCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KLQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCQlzYSA9IChjaGFyKilidWZmZXIgKyA2OwotCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDgsIEJBUDApOwotCQkJCQliYXBfcmVhZCAoYXByaXYsIChfX2xlMTYqKWhkci5yc3NpLCAyLCBCQVAwKTsKLQkJCQl9IGVsc2UKLQkJCQkJc2EgPSAoY2hhciopYnVmZmVyICsgMTA7Ci0JCQkJd3N0YXRzLnF1YWwgPSBoZHIucnNzaVswXTsKLQkJCQlpZiAoYXByaXYtPnJzc2kpCi0JCQkJCXdzdGF0cy5sZXZlbCA9IDB4MTAwIC0gYXByaXYtPnJzc2lbaGRyLnJzc2lbMV1dLnJzc2lkQm07Ci0JCQkJZWxzZQotCQkJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKLQkJCQl3c3RhdHMubm9pc2UgPSBhcHJpdi0+d3N0YXRzLnF1YWwubm9pc2U7Ci0JCQkJd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQKLQkJCQkJfCBJV19RVUFMX1FVQUxfVVBEQVRFRAotCQkJCQl8IElXX1FVQUxfREJNOwotCQkJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwotCQkJCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBzYSwgJndzdGF0cyk7Ci0JCQl9Ci0jZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCi0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCQkJc2tiLT5kZXYgPSBhcHJpdi0+d2lmaWRldjsKLQkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwotCQkJfSBlbHNlCi0JCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCi0JCQluZXRpZl9yeCggc2tiICk7Ci0JCX0KLWV4aXRyeDoKKwkJaWYgKHN0YXR1cyAmIEVWX1JYKQorCQkJYWlyb19oYW5kbGVfcngoYWkpOwogCiAJCS8qIENoZWNrIHRvIHNlZSBpZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwotCQlpZiAoICBzdGF0dXMgJiAoIEVWX1RYfEVWX1RYQ1BZfEVWX1RYRVhDICkgKSB7Ci0JCQlpbnQgaTsKLQkJCWludCBsZW4gPSAwOwotCQkJaW50IGluZGV4ID0gLTE7CisJCWlmIChzdGF0dXMgJiAoRVZfVFggfCBFVl9UWENQWSB8IEVWX1RYRVhDKSkKKwkJCWFpcm9faGFuZGxlX3R4KGFpLCBzdGF0dXMpOwogCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIC0xKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXByaXYtPmF1eF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFwcml2LT50eHEpKSB7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwcml2LT5hdXhfbG9jayxmbGFncyk7Ci0JCQkJCW1waV9zZW5kX3BhY2tldCAoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQljbGVhcl9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhcHJpdi0+ZmxhZ3MpOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcHJpdi0+YXV4X2xvY2ssZmxhZ3MpOwotCQkJCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCQkJCX0KLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssCi0JCQkJCXN0YXR1cyAmIChFVl9UWHxFVl9UWENQWXxFVl9UWEVYQykpOwotCQkJCWdvdG8gZXhpdHR4OwotCQkJfQotCi0JCQlmaWQgPSBJTjQ1MDAoYXByaXYsIFRYQ09NUExGSUQpOwotCi0JCQlmb3IoIGkgPSAwOyBpIDwgTUFYX0ZJRFM7IGkrKyApIHsKLQkJCQlpZiAoICggYXByaXYtPmZpZHNbaV0gJiAweGZmZmYgKSA9PSBmaWQgKSB7Ci0JCQkJCWxlbiA9IGFwcml2LT5maWRzW2ldID4+IDE2OwotCQkJCQlpbmRleCA9IGk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIGluZGV4KTsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYRVhDKSk7Ci0JCQkJLyogU2V0IHVwIHRvIGJlIHVzZWQgYWdhaW4gKi8KLQkJCQlhcHJpdi0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOwotCQkJCWlmIChpbmRleCA8IE1BWF9GSURTIC8gMikgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlULCAmYXByaXYtPmZsYWdzKSkKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShhcHJpdi0+d2lmaWRldik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKLQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiVW5hbGxvY2F0ZWQgRklEIHdhcyAiCi0JCQkJCSJ1c2VkIHRvIHhtaXQiICk7Ci0JCQl9Ci0JCX0KLWV4aXR0eDoKLQkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKQotCQkJYWlyb19wcmludF93YXJuKGFwcml2LT5kZXYtPm5hbWUsICJHb3Qgd2VpcmQgc3RhdHVzICV4IiwKKwkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKSB7CisJCQlhaXJvX3ByaW50X3dhcm4oYWktPmRldi0+bmFtZSwgIkdvdCB3ZWlyZCBzdGF0dXMgJXgiLAogCQkJCXN0YXR1cyAmIH5TVEFUVVNfSU5UUyAmIH5JR05PUkVfSU5UUyApOworCQl9CiAJfQogCiAJaWYgKHNhdmVkSW50ZXJydXB0cykKLQkJT1VUNDUwMCggYXByaXYsIEVWSU5URU4sIHNhdmVkSW50ZXJydXB0cyApOworCQlPVVQ0NTAwKGFpLCBFVklOVEVOLCBzYXZlZEludGVycnVwdHMpOwogCi0JLyogZG9uZS4uICovCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKQEAgLTM2MTMsMTggKzM2ODgsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgbGVuLCBoZHJsZW4gPSAwOwogCV9fbGUxNiBmYzsKLSNwcmFnbWEgcGFjaygxKQotCXN0cnVjdCB7Ci0JCV9fbGUxNiBzdGF0dXMsIGxlbjsKLQkJdTggcnNzaVsyXTsKLQkJdTggcmF0ZTsKLQkJdTggZnJlcTsKLQkJX19sZTE2IHRtcFs0XTsKLQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCisJc3RydWN0IHJ4X2hkciBoZHI7CiAJdTE2IGdhcDsKIAl1MTYgKmJ1ZmZlcjsKLQljaGFyICpwdHIgPSBhaS0+cnhmaWRzWzBdLnZpcnR1YWxfaG9zdF9hZGRyKzQ7CisJY2hhciAqcHRyID0gYWktPnJ4Zmlkc1swXS52aXJ0dWFsX2hvc3RfYWRkciArIDQ7CiAKIAltZW1jcHlfZnJvbWlvKCZyeGQsIGFpLT5yeGZpZHNbMF0uY2FyZF9yYW1fb2ZmLCBzaXplb2YocnhkKSk7CiAJbWVtY3B5ICgoY2hhciAqKSZoZHIsIHB0ciwgc2l6ZW9mKGhkcikpOwpAQCAtMzY5MSw2ICszNzU4LDcgQEAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAluZXRpZl9yeCggc2tiICk7CisKIGJhZHJ4OgogCWlmIChyeGQudmFsaWQgPT0gMCkgewogCQlyeGQudmFsaWQgPSAxOwpAQCAtMzcwNSw3ICszNzczLDYgQEAKIAlDbWQgY21kOwogCVJlc3AgcnNwOwogCWludCBzdGF0dXM7Ci0JaW50IGk7CiAJU3NpZFJpZCBteVNzaWQ7CiAJX19sZTE2IGxhc3RpbmRleDsKIAlXZXBLZXlSaWQgd2tyOwpAQCAtMzc0Nyw2ICszODE0LDcgQEAKIAlpZiAobG9jaykKIAkJdXAoJmFpLT5zZW0pOwogCWlmIChhaS0+Y29uZmlnLmxlbiA9PSAwKSB7CisJCWludCBpOwogCQl0ZHNSc3NpUmlkIHJzc2lfcmlkOwogCQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CiAKQEAgLTM3OTQsMTQgKzM4NjIsMTIgQEAKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5zbW9kIGNvbmZpZ3VyZWQKIAkJICAgcmF0ZXMgdG8gYWRkICovCiAJCWlmICggcmF0ZXNbMF0gKSB7Ci0JCQlpbnQgaSA9IDA7CiAJCQltZW1zZXQoYWktPmNvbmZpZy5yYXRlcywwLHNpemVvZihhaS0+Y29uZmlnLnJhdGVzKSk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgOCAmJiByYXRlc1tpXTsgaSsrICkgewogCQkJCWFpLT5jb25maWcucmF0ZXNbaV0gPSByYXRlc1tpXTsKIAkJCX0KIAkJfQogCQlpZiAoIGJhc2ljX3JhdGUgPiAwICkgewotCQkJaW50IGk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkgewogCQkJCWlmICggYWktPmNvbmZpZy5yYXRlc1tpXSA9PSBiYXNpY19yYXRlIHx8CiAJCQkJICAgICAhYWktPmNvbmZpZy5yYXRlcyApIHsKQEAgLTQ2ODYsNyArNDc1Miw3IEBACiAJU3RhdHNSaWQgc3RhdHM7CiAJaW50IGksIGo7CiAJX19sZTMyICp2YWxzID0gc3RhdHMudmFsczsKLQlpbnQgbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKKwlpbnQgbGVuOwogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ2OTcsNiArNDc2Myw3IEBACiAJfQogCiAJcmVhZFN0YXRzUmlkKGFwcml2LCAmc3RhdHMsIHJpZCwgMSk7CisJbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKIAogICAgICAgICBqID0gMDsKIAlmb3IoaT0wOyBzdGF0c0xhYmVsc1tpXSE9KGNoYXIgKiktMSAmJiBpKjQ8bGVuOyBpKyspIHsKQEAgLTUxMzEsNTUgKzUxOTgsOTggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGF0IHRoZSBpbmRleC4gIElmIGluZGV4ID09IDB4ZmZmZgotICogdGhlIGluZGV4IG9mIHRoZSB0cmFuc21pdCBrZXkgaXMgcmV0dXJuZWQuICBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QsCi0gKiAtMSB3aWxsIGJlIHJldHVybmVkLgorLyogUmV0dXJucyB0aGUgV0VQIGtleSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciAtMSBpZiB0aGF0IGtleSBkb2VzCisgKiBub3QgZXhpc3QuICBUaGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gYmUgYXQgbGVhc3QgMTYgYnl0ZXMgaW4gbGVuZ3RoLgogICovCi1zdGF0aWMgaW50IGdldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgpIHsKK3N0YXRpYyBpbnQgZ2V0X3dlcF9rZXkoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgY2hhciAqYnVmLCB1MTYgYnVmbGVuKQorewogCVdlcEtleVJpZCB3a3I7CiAJaW50IHJjOwogCV9fbGUxNiBsYXN0aW5kZXg7CiAKIAlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDEsIDEpOwotCWlmIChyYyA9PSBTVUNDRVNTKSBkbyB7CisJaWYgKHJjICE9IFNVQ0NFU1MpCisJCXJldHVybiAtMTsKKwlkbyB7CiAJCWxhc3RpbmRleCA9IHdrci5raW5kZXg7Ci0JCWlmICh3a3Iua2luZGV4ID09IGNwdV90b19sZTE2KGluZGV4KSkgewotCQkJaWYgKGluZGV4ID09IDB4ZmZmZikgewotCQkJCXJldHVybiB3a3IubWFjWzBdOwotCQkJfQotCQkJcmV0dXJuIGxlMTZfdG9fY3B1KHdrci5rbGVuKTsKKwkJaWYgKGxlMTZfdG9fY3B1KHdrci5raW5kZXgpID09IGluZGV4KSB7CisJCQlpbnQga2xlbiA9IG1pbl90KGludCwgYnVmbGVuLCBsZTE2X3RvX2NwdSh3a3Iua2xlbikpOworCQkJbWVtY3B5KGJ1Ziwgd2tyLmtleSwga2xlbik7CisJCQlyZXR1cm4ga2xlbjsKIAkJfQotCQlyZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJaWYgKHJjICE9IFNVQ0NFU1MpCisJCQlyZXR1cm4gLTE7CiAJfSB3aGlsZSAobGFzdGluZGV4ICE9IHdrci5raW5kZXgpOwogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBzZXRfd2VwX2tleShzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2IGluZGV4LAotCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCB1MTYga2V5bGVuLCBpbnQgcGVybSwgaW50IGxvY2sgKQorc3RhdGljIGludCBnZXRfd2VwX3R4X2lkeChzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwlXZXBLZXlSaWQgd2tyOworCWludCByYzsKKwlfX2xlMTYgbGFzdGluZGV4OworCisJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAxLCAxKTsKKwlpZiAocmMgIT0gU1VDQ0VTUykKKwkJcmV0dXJuIC0xOworCWRvIHsKKwkJbGFzdGluZGV4ID0gd2tyLmtpbmRleDsKKwkJaWYgKHdrci5raW5kZXggPT0gY3B1X3RvX2xlMTYoMHhmZmZmKSkKKwkJCXJldHVybiB3a3IubWFjWzBdOworCQlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDAsIDEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykKKwkJCXJldHVybiAtMTsKKwl9IHdoaWxlIChsYXN0aW5kZXggIT0gd2tyLmtpbmRleCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgICAgIHUxNiBrZXlsZW4sIGludCBwZXJtLCBpbnQgbG9jaykKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXSA9IHsgMHgwMSwgMCwgMCwgMCwgMCwgMCB9OwogCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOwogCi0JbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKIAlpZiAoa2V5bGVuID09IDApIHsKLS8vIFdlIGFyZSBzZWxlY3Rpbmcgd2hpY2gga2V5IHRvIHVzZQotCQl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOwotCQl3a3Iua2luZGV4ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKLQkJd2tyLm1hY1swXSA9IChjaGFyKWluZGV4OwotCQlpZiAocGVybSkgYWktPmRlZmluZGV4ID0gKGNoYXIpaW5kZXg7Ci0JfSBlbHNlIHsKLS8vIFdlIGFyZSBhY3R1YWxseSBzZXR0aW5nIHRoZSBrZXkKLQkJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKLQkJd2tyLmtpbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKLQkJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOwotCQltZW1jcHkoIHdrci5rZXksIGtleSwga2V5bGVuICk7Ci0JCW1lbWNweSggd2tyLm1hYywgbWFjYWRkciwgRVRIX0FMRU4gKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIiVzOiBrZXkgbGVuZ3RoIHRvIHNldCB3YXMgemVybyIsCisJCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CiAJfQogCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOworCW1lbWNweSh3a3Iua2V5LCBrZXksIGtleWxlbik7CisJbWVtY3B5KHdrci5tYWMsIG1hY2FkZHIsIEVUSF9BTEVOKTsKKwogCWlmIChwZXJtKSBkaXNhYmxlX01BQyhhaSwgbG9jayk7Ci0Jd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOworCXJjID0gd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOwogCWlmIChwZXJtKSBlbmFibGVfTUFDKGFpLCBsb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3dlcF90eF9pZHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgaW50IHBlcm0sIGludCBsb2NrKQoreworCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOworCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNigweGZmZmYpOworCXdrci5tYWNbMF0gPSAoY2hhcilpbmRleDsKKworCWlmIChwZXJtKSB7CisJCWFpLT5kZWZpbmRleCA9IChjaGFyKWluZGV4OworCQlkaXNhYmxlX01BQyhhaSwgbG9jayk7CisJfQorCisJcmMgPSB3cml0ZVdlcEtleVJpZChhaSwgJndrciwgcGVybSwgbG9jayk7CisKKwlpZiAocGVybSkKKwkJZW5hYmxlX01BQyhhaSwgbG9jayk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBwcm9jX3dlcGtleV9vbl9jbG9zZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUgKSB7CkBAIC01MTg3LDcgKzUyOTcsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoaW5vZGUpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkcC0+ZGF0YTsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+bWxfcHJpdjsKLQlpbnQgaTsKKwlpbnQgaSwgcmM7CiAJY2hhciBrZXlbMTZdOwogCXUxNiBpbmRleCA9IDA7CiAJaW50IGogPSAwOwpAQCAtNTIwMSw3ICs1MzExLDEyIEBACiAJICAgIChkYXRhLT53YnVmZmVyWzFdID09ICcgJyB8fCBkYXRhLT53YnVmZmVyWzFdID09ICdcbicpKSB7CiAJCWluZGV4ID0gZGF0YS0+d2J1ZmZlclswXSAtICcwJzsKIAkJaWYgKGRhdGEtPndidWZmZXJbMV0gPT0gJ1xuJykgewotCQkJc2V0X3dlcF9rZXkoYWksIGluZGV4LCBOVUxMLCAwLCAxLCAxKTsKKwkJCXJjID0gc2V0X3dlcF90eF9pZHgoYWksIGluZGV4LCAxLCAxKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCAiCisJCQkJICAgICAgICAgICAgICAgIldFUCB0cmFuc21pdCBpbmRleCB0byAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJfQogCQkJcmV0dXJuOwogCQl9CiAJCWogPSAyOwpAQCAtNTIyMCw3ICs1MzM1LDEyIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzZXRfd2VwX2tleShhaSwgaW5kZXgsIGtleSwgaS8zLCAxLCAxKTsKKworCXJjID0gc2V0X3dlcF9rZXkoYWksIGluZGV4LCBrZXksIGkvMywgMSwgMSk7CisJaWYgKHJjIDwgMCkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCBXRVAga2V5IGF0IGluZGV4ICIKKwkJICAgICAgICAgICAgICAgIiVkOiAlZC4iLCBpbmRleCwgcmMpOworCX0KIH0KIAogc3RhdGljIGludCBwcm9jX3dlcGtleV9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSApCkBAIC01NDUxLDEzICs1NTcxLDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBBVVRIX1NIQVJFREtFWToKIAkJCWlmIChhcHJpdi0+a2V5aW5kZXggPCBhdXRvX3dlcCkgewotCQkJCXNldF93ZXBfa2V5KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIE5VTEwsIDAsIDAsIDApOworCQkJCXNldF93ZXBfdHhfaWR4KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIDAsIDApOwogCQkJCWFwcml2LT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX1NIQVJFREtFWTsKIAkJCQlhcHJpdi0+a2V5aW5kZXgrKzsKIAkJCX0gZWxzZSB7CiAJCQkgICAgICAgIC8qIERyb3AgdG8gRU5DUllQVCAqLwogCQkJCWFwcml2LT5rZXlpbmRleCA9IDA7Ci0JCQkJc2V0X3dlcF9rZXkoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgTlVMTCwgMCwgMCwgMCk7CisJCQkJc2V0X3dlcF90eF9pZHgoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgMCwgMCk7CiAJCQkJYXByaXYtPmNvbmZpZy5hdXRoVHlwZSA9IEFVVEhfRU5DUllQVDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTcyNSwxNiArNTg0NSwxMiBAQAogCWludCByYyA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIElmIHNldHRpbmcgYnkgZnJlcXVlbmN5LCBjb252ZXJ0IHRvIGEgY2hhbm5lbCAqLwotCWlmKChmd3JxLT5lID09IDEpICYmCi0JICAgKGZ3cnEtPm0gPj0gKGludCkgMi40MTJlOCkgJiYKLQkgICAoZndycS0+bSA8PSAoaW50KSAyLjQ4N2U4KSkgeworCWlmKGZ3cnEtPmUgPT0gMSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCWludCBjID0gMDsKLQkJd2hpbGUoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQotCQkJYysrOworCiAJCS8qIEhhY2sgdG8gZmFsbCB0aHJvdWdoLi4uICovCiAJCWZ3cnEtPmUgPSAwOwotCQlmd3JxLT5tID0gYyArIDE7CisJCWZ3cnEtPm0gPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZik7CiAJfQogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KIAlpZigoZndycS0+bSA+IDEwMDApIHx8IChmd3JxLT5lID4gMCkpCkBAIC01Nzc4LDcgKzU4OTQsNyBAQAogCiAJY2ggPSBsZTE2X3RvX2NwdShzdGF0dXNfcmlkLmNoYW5uZWwpOwogCWlmKChjaCA+IDApICYmIChjaCA8IDE1KSkgewotCQlmd3JxLT5tID0gZnJlcXVlbmN5X2xpc3RbY2ggLSAxXSAqIDEwMDAwMDsKKwkJZndycS0+bSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaCkgKiAxMDAwMDA7CiAJCWZ3cnEtPmUgPSAxOwogCX0gZWxzZSB7CiAJCWZ3cnEtPm0gPSBjaDsKQEAgLTYyMzQsMTEgKzYzNTAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChDYXBhYmlsaXR5UmlkICpwLCBpbnQgaW5kZXgpCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChzdHJ1Y3QgYWlyb19pbmZvICphaSwgaW50IGluZGV4KQogewotCWlmIChpbmRleCA8IDApCi0JCXJldHVybiAwOwotCXJldHVybiBpbmRleCA8IChwLT5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkgPyA0IDogMSk7CisJcmV0dXJuIChpbmRleCA+PSAwKSAmJiAoaW5kZXggPD0gYWktPm1heF93ZXBfaWR4KTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNjI1MSwxNiArNjM2NSwxMyBAQAogCQkJICAgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KLQlpbnQgcGVybSA9ICggZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CisJaW50IHBlcm0gPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxKTsKIAlfX2xlMTYgY3VycmVudEF1dGhUeXBlID0gbG9jYWwtPmNvbmZpZy5hdXRoVHlwZTsKKwlpbnQgcmMgPSAwOwogCi0JLyogSXMgV0VQIHN1cHBvcnRlZCA/ICovCi0JcmVhZENhcGFiaWxpdHlSaWQobG9jYWwsICZjYXBfcmlkLCAxKTsKLQkvKiBPbGRlciBmaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgdGhpcy4uLgotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9ICovCisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCS8qIEJhc2ljIGNoZWNraW5nOiBkbyB3ZSBoYXZlIGEga2V5IHRvIHNldCA/CkBAIC02MjcyLDE0ICs2MzgzLDIxIEBACiAJaWYgKGR3cnEtPmxlbmd0aCA+IDApIHsKIAkJd2VwX2tleV90IGtleTsKIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JCWludCBjdXJyZW50X2luZGV4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJCWludCBjdXJyZW50X2luZGV4OworCiAJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBrZXkgKi8KIAkJaWYgKGR3cnEtPmxlbmd0aCA+IE1BWF9LRVlfU0laRSkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKworCQljdXJyZW50X2luZGV4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoY3VycmVudF9pbmRleCA8IDApCisJCQljdXJyZW50X2luZGV4ID0gMDsKKwogCQkvKiBDaGVjayB0aGUgaW5kZXggKG5vbmUgLT4gdXNlIGN1cnJlbnQpICovCi0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaW5kZXgpKQogCQkJaW5kZXggPSBjdXJyZW50X2luZGV4OworCiAJCS8qIFNldCB0aGUgbGVuZ3RoICovCiAJCWlmIChkd3JxLT5sZW5ndGggPiBNSU5fS0VZX1NJWkUpCiAJCQlrZXkubGVuID0gTUFYX0tFWV9TSVpFOwpAQCAtNjI5Niw3ICs2NDE0LDEzIEBACiAJCQkvKiBDb3B5IHRoZSBrZXkgaW4gdGhlIGRyaXZlciAqLwogCQkJbWVtY3B5KGtleS5rZXksIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwogCQkJLyogU2VuZCB0aGUga2V5IHRvIHRoZSBjYXJkICovCi0JCQlzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJcmMgPSBzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIGtleSBhdCBpbmRleCAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJCXJldHVybiByYzsKKwkJCX0KIAkJfQogCQkvKiBXRSBzcGVjaWZ5IHRoYXQgaWYgYSB2YWxpZCBrZXkgaXMgc2V0LCBlbmNyeXB0aW9uCiAJCSAqIHNob3VsZCBiZSBlbmFibGVkICh1c2VyIG1heSB0dXJuIGl0IG9mZiBsYXRlcikKQEAgLTYzMDgsMTIgKzY0MzIsMTkgQEAKIAl9IGVsc2UgewogCQkvKiBEbyB3ZSB3YW50IHRvIGp1c3Qgc2V0IHRoZSB0cmFuc21pdCBrZXkgaW5kZXggPyAqLwogCQlpbnQgaW5kZXggPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQkJaWYgKHZhbGlkX2luZGV4KCZjYXBfcmlkLCBpbmRleCkpIHsKLQkJCXNldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgTlVMTCwgMCwgcGVybSwgMSk7Ci0JCX0gZWxzZQorCQlpZiAodmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQkJcmMgPSBzZXRfd2VwX3R4X2lkeChsb2NhbCwgaW5kZXgsIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIHRyYW5zbWl0IGluZGV4IHRvICVkOiAlZC4iLAorCQkJCSAgICAgICAgICAgICAgIGluZGV4LCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQl9IGVsc2UgewogCQkJLyogRG9uJ3QgY29tcGxhaW4gaWYgb25seSBjaGFuZ2UgdGhlIG1vZGUgKi8KIAkJCWlmICghKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpKQogCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCS8qIFJlYWQgdGhlIGZsYWdzICovCiAJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCkBAIC02MzM5LDE0ICs2NDcwLDEzIEBACiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKKwogCS8qIENoZWNrIGVuY3J5cHRpb24gbW9kZSAqLwogCXN3aXRjaChsb2NhbC0+Y29uZmlnLmF1dGhUeXBlKQl7CiAJCWNhc2UgQVVUSF9FTkNSWVBUOgpAQCAtNjM2NSwxNCArNjQ5NSwxNyBAQAogCW1lbXNldChleHRyYSwgMCwgMTYpOwogCiAJLyogV2hpY2gga2V5IGRvIHdlIHdhbnQgPyAtMSAtPiB0eCBpbmRleCAqLwotCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKLQkJaW5kZXggPSBnZXRfd2VwX2tleShsb2NhbCwgMHhmZmZmKTsKLQlkd3JxLT5mbGFncyB8PSBpbmRleCArIDE7Ci0JLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCk7Ci0JaWYgKGR3cnEtPmxlbmd0aCA+IDE2KSB7Ci0JCWR3cnEtPmxlbmd0aD0wOworCWlmICghdmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQlpbmRleCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGluZGV4IDwgMCkKKwkJCWluZGV4ID0gMDsKIAl9CisJZHdycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOworCisJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLworCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBkd3JxLT5sZW5ndGgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzODgsMjggKzY1MjEsMjcgQEAKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CQkvKiBDYXJkIGNhcGFiaWxpdHkgaW5mbyAqLwogCWludCBwZXJtID0gKCBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CiAJX19sZTE2IGN1cnJlbnRBdXRoVHlwZSA9IGxvY2FsLT5jb25maWcuYXV0aFR5cGU7Ci0JaW50IGlkeCwga2V5X2xlbiwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOworCWludCBpZHgsIGtleV9sZW4sIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMSwgcmM7CiAJd2VwX2tleV90IGtleTsKIAotCS8qIElzIFdFUCBzdXBwb3J0ZWQgPyAqLwotCXJlYWRDYXBhYmlsaXR5UmlkKGxvY2FsLCAmY2FwX3JpZCwgMSk7Ci0JLyogT2xkZXIgZmlybXdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXMuLi4KLQlpZighKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDIpKSkgeworCWlmICghbG9jYWwtPndlcF9jYXBhYmxlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfSAqLworCiAJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CiAKIAkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KIAlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CiAJaWYgKGlkeCkgewotCQlpZiAoIXZhbGlkX2luZGV4KCZjYXBfcmlkLCBpZHggLSAxKSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaWR4IC0gMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IGdldF93ZXBfa2V5KGxvY2FsLCAweGZmZmYpOworCX0gZWxzZSB7CisJCWlkeCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGlkeCA8IDApCisJCQlpZHggPSAwOworCX0KIAogCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCiAJCWFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKQEAgLTY0MTgsNyArNjU1MCwxMyBAQAogCQkvKiBPbmx5IHNldCB0cmFuc21pdCBrZXkgaW5kZXggaGVyZSwgYWN0dWFsCiAJCSAqIGtleSBpcyBzZXQgYmVsb3cgaWYgbmVlZGVkLgogCQkgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgTlVMTCwgMCwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF90eF9pZHgobG9jYWwsIGlkeCwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0ICIKKwkJCSAgICAgICAgICAgICAgICJXRVAgdHJhbnNtaXQgaW5kZXggdG8gJWQ6ICVkLiIsCisJCQkgICAgICAgICAgICAgICBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQlzZXRfa2V5ID0gZXh0LT5rZXlfbGVuID4gMCA/IDEgOiAwOwogCX0KIApAQCAtNjQ0NCw3ICs2NTgyLDEyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IFdFUCBrZXkiCisJCQkgICAgICAgICAgICAgICAiIGF0IGluZGV4ICVkOiAlZC4iLCBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCX0KIAogCS8qIFJlYWQgdGhlIGZsYWdzICovCkBAIC02NDc0LDE0ICs2NjE3LDEyIEBACiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KIAlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKQEAgLTY0OTAsMTEgKzY2MzEsMTQgQEAKIAogCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAlpZiAoaWR4KSB7Ci0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGlkeCAtIDEpKQorCQlpZiAoIXZhbGlkX2luZGV4KGxvY2FsLCBpZHggLSAxKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZHgtLTsKLQl9IGVsc2UKLQkJaWR4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJfSBlbHNlIHsKKwkJaWR4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoaWR4IDwgMCkKKwkJCWlkeCA9IDA7CisJfQogCiAJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKIAltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwpAQCAtNjUxNywxMCArNjY2MSw4IEBACiAJbWVtc2V0KGV4dHJhLCAwLCAxNik7CiAJCiAJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWV4dC0+a2V5X2xlbiA9IGdldF93ZXBfa2V5KGxvY2FsLCBpZHgpOwotCWlmIChleHQtPmtleV9sZW4gPiAxNikgewotCQlleHQtPmtleV9sZW49MDsKLQl9CisJZXh0LT5rZXlfbGVuID0gZ2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBleHQtPmtleV9sZW4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02Nzk1LDggKzY5MzcsOCBAQAogCWsgPSAwOwogCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFba10uaSA9IGkgKyAxOyAvKiBMaXN0IGluZGV4ICovCi0JCXJhbmdlLT5mcmVxW2tdLm0gPSBmcmVxdWVuY3lfbGlzdFtpXSAqIDEwMDAwMDsKLQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLworCQlyYW5nZS0+ZnJlcVtrXS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLwogCX0KIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CiAKQEAgLTcwMzEsMTEgKzcxNzMsMTUgQEAKIHsKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MgPSAoc3RydWN0IHNvY2thZGRyICopIGV4dHJhOwotCXN0cnVjdCBpd19xdWFsaXR5IHF1YWxbSVdfTUFYX0FQXTsKKwlzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbDsKIAlCU1NMaXN0UmlkIEJTU0xpc3Q7CiAJaW50IGk7CiAJaW50IGxvc2VTeW5jID0gY2FwYWJsZShDQVBfTkVUX0FETUlOKSA/IDE6IC0xOwogCisJcXVhbCA9IGttYWxsb2MoSVdfTUFYX0FQICogc2l6ZW9mKCpxdWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxdWFsKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWZvciAoaSA9IDA7IGkgPCBJV19NQVhfQVA7IGkrKykgewogCQl1MTYgZEJtOwogCQlpZiAocmVhZEJTU0xpc3RSaWQobG9jYWwsIGxvc2VTeW5jLCAmQlNTTGlzdCkpCkBAIC03MDkwLDYgKzcyMzYsNyBAQAogCX0KIAlkd3JxLT5sZW5ndGggPSBpOwogCisJa2ZyZWUocXVhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxODksMTAgKzczMzYsNyBAQAogCS8qIEFkZCBmcmVxdWVuY3kgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CiAJaXdlLnUuZnJlcS5tID0gbGUxNl90b19jcHUoYnNzLT5kc0NoYW5uZWwpOwotCS8qIGl3ZS51LmZyZXEubSBjb250YWludCB0aGUgY2hhbm5lbCAoc3RhcnRpbmcgMSksIG91ciAKLQkgKiBmcmVxdWVuY3lfbGlzdCBhcnJheSBzdGFydCBhdCBpbmRleCAwLi4uCi0JICovCi0JaXdlLnUuZnJlcS5tID0gZnJlcXVlbmN5X2xpc3RbaXdlLnUuZnJlcS5tIC0gMV0gKiAxMDAwMDA7CisJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGl3ZS51LmZyZXEubSkgKiAxMDAwMDA7CiAJaXdlLnUuZnJlcS5lID0gMTsKIAljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKIAkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggMjc2OTZjMi4uZDA1OTNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtMTYsOCArMTYsOCBAQAogICAgIEluIGFkZGl0aW9uIHRoaXMgbW9kdWxlIHdhcyBkZXJpdmVkIGZyb20gZHVtbXlfY3MuCiAgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIGR1bW15X2NzIGlzIERhdmlkIEEuIEhpbmRzCiAgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKLSAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgCi0gICAgCisgICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjaWZkZWYgX19JTl9QQ01DSUFfUEFDS0FHRV9fCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlICJhaXJvLmgiCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwogc3RhdGljIGNoYXIgKnZlcnNpb24gPSAiJFJldmlzaW9uOiAxLjIgJCI7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWcgPiAobikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOwogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKICNlbmRpZgpAQCAtNjIsOSArNjIsOSBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIE1PRFVMRV9BVVRIT1IoIkJlbmphbWluIFJlZWQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgQ2lzY28vQWlyb25ldCA4MDIuMTEgd2lyZWxlc3MgZXRoZXJuZXQgXAotICAgICAgICAgICAgICAgICAgIGNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkIFwKLQkJICAgd2l0aCB0aGUgYWlybyBtb2R1bGUuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIENpc2NvL0Fpcm9uZXQgODAyLjExIHdpcmVsZXNzIGV0aGVybmV0ICIKKwkJICAgImNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkICIKKwkJICAgIndpdGggdGhlIGFpcm8gbW9kdWxlLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkFpcm9uZXQgNDUwMCwgNDgwMCBhbmQgQ2lzY28gMzQwIFBDTUNJQSBjYXJkcyIpOwogCkBAIC03Niw3ICs3Niw3IEBACiAgICBldmVudCBpcyByZWNlaXZlZC4gIFRoZSBjb25maWcoKSBhbmQgcmVsZWFzZSgpIGVudHJ5IHBvaW50cyBhcmUKICAgIHVzZWQgdG8gY29uZmlndXJlIG9yIHJlbGVhc2UgYSBzb2NrZXQsIGluIHJlc3BvbnNlIHRvIGNhcmQKICAgIGluc2VydGlvbiBhbmQgZWplY3Rpb24gZXZlbnRzLiAgVGhleSBhcmUgaW52b2tlZCBmcm9tIHRoZSBhaXJvX2NzCi0gICBldmVudCBoYW5kbGVyLiAKKyAgIGV2ZW50IGhhbmRsZXIuCiAqLwogCiBzdGF0aWMgaW50IGFpcm9fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKQEAgLTEwMyw4ICsxMDMsOSBAQAogICAgYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KIAogICAgWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlCi0gICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKLSAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KKyAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLAorICAgd2hlcmUgbWlub3IgZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nCisgICBhcnJheSBpbmRleC4KICovCiAKIC8qCkBAIC0xMjIsMjIgKzEyMywyMiBAQAogICAgZGV2aWNlIElPIHJvdXRpbmVzIGNhbiB1c2UgYSBmbGFnIGxpa2UgdGhpcyB0byB0aHJvdHRsZSBJTyB0byBhCiAgICBjYXJkIHRoYXQgaXMgbm90IHJlYWR5IHRvIGFjY2VwdCBpdC4KICovCi0gICAKKwogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlkZXZfbm9kZV90CW5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmV0aF9kZXY7CiB9IGxvY2FsX2luZm9fdDsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIGFpcm9fYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KLSAgCisKICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCiAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBhaXJvX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKQEAgLTE1MCw3ICsxNTEsNyBAQAogCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCXBfZGV2LT5pcnEuSGFuZGxlciA9IE5VTEw7Ci0JCisKIAkvKgogCSAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKIAkgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKQEAgLTE2MCw3ICsxNjEsNyBAQAogCSovCiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotCQorCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpIHsKQEAgLTE3MywxMiArMTc0LDEyIEBACiB9IC8qIGFpcm9fYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAKKwogICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAogICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC0xODcsMjAgKzE4OCwyMCBAQAogCiAJYWlyb19yZWxlYXNlKGxpbmspOwogCi0JaWYgKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgKSB7Ci0JCXN0b3BfYWlyb19jYXJkKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYsIDAgKTsKKwlpZiAoKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldikgeworCQlzdG9wX2Fpcm9fY2FyZCgoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2LCAwKTsKIAl9Ci0JKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKKwkoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKIAogCWtmcmVlKGxpbmstPnByaXYpOwogfSAvKiBhaXJvX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgYWlyb19jb25maWcoKSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCiAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXApAQCAtMzI1LDI2ICszMjYsMjggQEAKIAkqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JCisKIAkvKgogCSAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKIAkgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IAotCQlpbml0X2Fpcm9fY2FyZCggbGluay0+aXJxLkFzc2lnbmVkSVJRLAotCQkJCWxpbmstPmlvLkJhc2VQb3J0MSwgMSwgJmhhbmRsZV90b19kZXYobGluaykgKTsKLQlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgZ290byBjc19mYWlsZWQ7Ci0JCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCisJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9CisJCWluaXRfYWlyb19jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKKwkJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlpZiAoISgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYpCisJCWdvdG8gY3NfZmFpbGVkOworCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCiAJICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KIAkqLwotCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2Rldi0+bmFtZSApOworCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUpOwogCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CiAJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwotCQorCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6ICIsCiAJICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CkBAIC0zNzQsMTEgKzM3NywxMSBAQAogfSAvKiBhaXJvX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIGFpcm9fcmVsZWFzZSgpIHdpbGwgdW5yZWdpc3RlciB0aGUKICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtNDc1LDcgKzQ3OCw3IEBACiAgICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAogICAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwogICAgIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAKKyAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCiAKIG1vZHVsZV9pbml0KGFpcm9fY3NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDJmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwpAQCAtMCwwICsxLDI1MDEgQEAKKy8qCisgKiBhdDc2YzUwMy9hdDc2YzUwNSBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIC0gMjAwMyBPbGl2ZXIgS3VydGgKKyAqIENvcHlyaWdodCAoYykgMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgTmljayBKb25lcworICogQ29weXJpZ2h0IChjKSAyMDA0IEJhbGludCBTZWViZXIgPG4wXzVwNG1fcDEzNDUzQGhvdG1haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQmVybGlvcyBkcml2ZXIgZm9yIFdMQU4gVVNCIGRldmljZXMgYmFzZWQgb24gdGhlCisgKiBBdG1lbCBBVDc2QzUwM0EvNTA1LzUwNUEuCisgKgorICogU29tZSBpd19oYW5kbGVyIGNvZGUgd2FzIHRha2VuIGZyb20gYWlyby5jLCAoQykgMTk5OSBCZW5qYW1pbiBSZWVkCisgKgorICogVE9ETyBsaXN0IGlzIGF0IHRoZSB3aWtpOgorICoKKyAqIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXQ3NmM1MHgtdXNiI1RPRE8KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJhdDc2YzUweC11c2IuaCIKKworLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfTkFNRSAiYXQ3NmM1MHgtdXNiIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4xNyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkF0bWVsIGF0NzZ4IFVTQiBXaXJlbGVzcyBMQU4gRHJpdmVyIgorCisvKiBhdDc2X2RlYnVnIGJpdHMgKi8KKyNkZWZpbmUgREJHX1BST0dSRVNTCQkweDAwMDAwMDAxCS8qIGF1dGhlbnRpY2F0aW9uL2FjY29jaWF0aW9uICovCisjZGVmaW5lIERCR19CU1NfVEFCTEUJCTB4MDAwMDAwMDIJLyogc2hvdyBCU1MgdGFibGUgYWZ0ZXIgc2NhbnMgKi8KKyNkZWZpbmUgREJHX0lPQ1RMCQkweDAwMDAwMDA0CS8qIGlvY3RsIGNhbGxzIC8gc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX01BQ19TVEFURQkJMHgwMDAwMDAwOAkvKiBNQUMgc3RhdGUgdHJhbnNpdGlvbnMgKi8KKyNkZWZpbmUgREJHX1RYX0RBVEEJCTB4MDAwMDAwMTAJLyogdHggaGVhZGVyICovCisjZGVmaW5lIERCR19UWF9EQVRBX0NPTlRFTlQJMHgwMDAwMDAyMAkvKiB0eCBjb250ZW50ICovCisjZGVmaW5lIERCR19UWF9NR01UCQkweDAwMDAwMDQwCS8qIHR4IG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEEJCTB4MDAwMDAwODAJLyogcnggZGF0YSBoZWFkZXIgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEFfQ09OVEVOVAkweDAwMDAwMTAwCS8qIHJ4IGRhdGEgY29udGVudCAqLworI2RlZmluZSBEQkdfUlhfTUdNVAkJMHgwMDAwMDIwMAkvKiByeCBtZ210IGZyYW1lIGhlYWRlcnMgKi8KKyNkZWZpbmUgREJHX1JYX0JFQUNPTgkJMHgwMDAwMDQwMAkvKiByeCBiZWFjb24gKi8KKyNkZWZpbmUgREJHX1JYX0NUUkwJCTB4MDAwMDA4MDAJLyogcnggY29udHJvbCAqLworI2RlZmluZSBEQkdfUlhfTUdNVF9DT05URU5UCTB4MDAwMDEwMDAJLyogcnggbWdtdCBjb250ZW50ICovCisjZGVmaW5lIERCR19SWF9GUkFHUwkJMHgwMDAwMjAwMAkvKiByeCBkYXRhIGZyYWdtZW50IGhhbmRsaW5nICovCisjZGVmaW5lIERCR19ERVZTVEFSVAkJMHgwMDAwNDAwMAkvKiBmdyBkb3dubG9hZCwgZGV2aWNlIHN0YXJ0ICovCisjZGVmaW5lIERCR19VUkIJCQkweDAwMDA4MDAwCS8qIHJ4IHVyYiBzdGF0dXMsIC4uLiAqLworI2RlZmluZSBEQkdfUlhfQVRNRUxfSERSCTB4MDAwMTAwMDAJLyogQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVycyAqLworI2RlZmluZSBEQkdfUFJPQ19FTlRSWQkJMHgwMDAyMDAwMAkvKiBwcm9jZWR1cmUgZW50cmllcy9leGl0cyAqLworI2RlZmluZSBEQkdfUE0JCQkweDAwMDQwMDAwCS8qIHBvd2VyIG1hbmFnZW1lbnQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX0JTU19NQVRDSAkJMHgwMDA4MDAwMAkvKiBCU1MgbWF0Y2ggZmFpbHVyZXMgKi8KKyNkZWZpbmUgREJHX1BBUkFNUwkJMHgwMDEwMDAwMAkvKiBzaG93IGNvbmZpZ3VyZWQgcGFyYW1ldGVycyAqLworI2RlZmluZSBEQkdfV0FJVF9DT01QTEVURQkweDAwMjAwMDAwCS8qIGNvbW1hbmQgY29tcGxldGlvbiAqLworI2RlZmluZSBEQkdfUlhfRlJBR1NfU0tCCTB4MDA0MDAwMDAJLyogc2tiIGhlYWRlciBvZiBSeCBmcmFnbWVudHMgKi8KKyNkZWZpbmUgREJHX0JTU19UQUJMRV9STQkweDAwODAwMDAwCS8qIHB1cmdpbmcgYnNzIHRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgREJHX01PTklUT1JfTU9ERQkweDAxMDAwMDAwCS8qIG1vbml0b3IgbW9kZSAqLworI2RlZmluZSBEQkdfTUlCCQkJMHgwMjAwMDAwMAkvKiBkdW1wIGFsbCBNSUJzIG9uIHN0YXJ0dXAgKi8KKyNkZWZpbmUgREJHX01HTVRfVElNRVIJCTB4MDQwMDAwMDAJLyogZHVtcCBtZ210X3RpbWVyIG9wcyAqLworI2RlZmluZSBEQkdfV0VfRVZFTlRTCQkweDA4MDAwMDAwCS8qIGR1bXAgd2lyZWxlc3MgZXZlbnRzICovCisjZGVmaW5lIERCR19GVwkJCTB4MTAwMDAwMDAJLyogZmlybXdhcmUgZG93bmxvYWQgKi8KKyNkZWZpbmUgREJHX0RGVQkJCTB4MjAwMDAwMDAJLyogZGV2aWNlIGZpcm13YXJlIHVwZ3JhZGUgKi8KKyNkZWZpbmUgREJHX0NNRAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgREJHX01BQzgwMjExCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgREJHX0RFRkFVTFRTCQkwCisKKy8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLworI2RlZmluZSBhdDc2X2RiZyhiaXRzLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkJCQkJIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgZm9ybWF0ICJcbiIgLCBcCisJCQkgICAgICAgIyMgYXJnKTsJCQkJCSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBhdDc2X2RiZ19kdW1wKGJpdHMsIGJ1ZiwgbGVuLCBmb3JtYXQsIGFyZy4uLikJXAorCWRvIHsgXAorCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkgeyBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgXAorCQkJICAgICAgICMjIGFyZyk7CQkJCQkgXAorCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgICAgIFwKKwkJCQkJICAgICBidWYsIGxlbik7CQkJIFwKKwkJfQkJCQkJCQkgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB1aW50IGF0NzZfZGVidWcgPSBEQkdfREVGQVVMVFM7CisKKy8qIFByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggZndfbXV0ZXg7CisKK3N0YXRpYyBzdHJ1Y3QgZndlbnRyeSBmaXJtd2FyZXNbXSA9IHsKKwlbMF0gPSB7ICIiIH0sCisJW0JPQVJEXzUwM19JU0wzODYxXSA9IHsgImF0bWVsX2F0NzZjNTAzLWkzODYxLmJpbiIgfSwKKwlbQk9BUkRfNTAzX0lTTDM4NjNdID0geyAiYXRtZWxfYXQ3NmM1MDMtaTM4NjMuYmluIiB9LAorCVtCT0FSRF81MDNdID0geyAiYXRtZWxfYXQ3NmM1MDMtcmZtZC5iaW4iIH0sCisJW0JPQVJEXzUwM19BQ0NdID0geyAiYXRtZWxfYXQ3NmM1MDMtcmZtZC1hY2MuYmluIiB9LAorCVtCT0FSRF81MDVdID0geyAiYXRtZWxfYXQ3NmM1MDUtcmZtZC5iaW4iIH0sCisJW0JPQVJEXzUwNV8yOTU4XSA9IHsgImF0bWVsX2F0NzZjNTA1LXJmbWQyOTU4LmJpbiIgfSwKKwlbQk9BUkRfNTA1QV0gPSB7ICJhdG1lbF9hdDc2YzUwNWEtcmZtZDI5NTguYmluIiB9LAorCVtCT0FSRF81MDVBTVhdID0geyAiYXRtZWxfYXQ3NmM1MDVhbXgtcmZtZC5iaW4iIH0sCit9OworCisjZGVmaW5lIFVTQl9ERVZJQ0VfREFUQShfX29wcykJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShfX29wcykKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldl90YWJsZVtdID0geworCS8qCisJICogYXQ3NmM1MDMtaTM4NjEKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzLzM4NjEgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjAzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjEvdjIuNiAqLworCXsgVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBOZXRnZWFyIE1BMTAxIHJldi4gQSAqLworCXsgVVNCX0RFVklDRSgweDA4NjQsIDB4NDEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBUZWtyYW0gVTMwMEMgLyBBbGxuZXQgQUxMMDE5MyAqLworCXsgVVNCX0RFVklDRSgweDBiM2IsIDB4MTYxMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBIUCBITjIxMFcgSjc4MDFBICovCisJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgwMTFjKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIFNpdGVjb20vWi1Db20vWnl4ZWwgTTRZLTc1MCAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBEeW5hbGluay9Bc2tleSBXTEwwMTMgKGludGVyc2lsKSAqLworCXsgVVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBFWiBjb25uZWN0IDExTXBicyBXaXJlbGVzcyBVU0IgQWRhcHRlciBTTUMyNjYyVyB2MSAqLworCXsgVVNCX0RFVklDRSgweDBkNWMsIDB4YTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBCZW5RIEFXTDMwMCAqLworCXsgVVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBBZGR0cm9uIEFXVS0xMjAsIENvbXBleCBXTFUxMSAqLworCXsgVVNCX0RFVklDRSgweDA1ZGQsIDB4ZmYzMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBJbnRlbCBBUDMxMCBBbnlQb2ludCBJSSBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHg4MDg2LCAweDAyMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogRHluYWxpbmsgTDExVSAqLworCXsgVVNCX0RFVklDRSgweDBkOGUsIDB4NzEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBBcmVzY29tIFdMLTIxMCwgRkNDIGlkIDA3Si1HTDI0MTFVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDhlLCAweDcxMTApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogSS1PIERBVEEgV04tQjExL1VTQiAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBCVCBWb3lhZ2VyIDEwMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjlhLCAweDA4MjEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyoKKwkgKiBhdDc2YzUwMy1pMzg2MworCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvMzg2MyBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpIH0sCisJLyogU2Ftc3VuZyBTV0wtMjEwMFUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTVkLCAweGEwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpIH0sCisJLyoKKwkgKiBhdDc2YzUwMy1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy9SRk1EIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogRHluYWxpbmsvQXNrZXkgV0xMMDEzIChyZm1kKSAqLworCXsgVVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuNiAqLworCXsgVVNCX0RFVklDRSgweDA3N2IsIDB4MjIxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTmV0d29yayBFdmVyeXdoZXJlIE5XVTExQiAqLworCXsgVVNCX0RFVklDRSgweDA3N2IsIDB4MjIyNyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTmV0Z2VhciBNQTEwMSByZXYuIEIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODY0LCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEQtTGluayBEV0wtMTIwIHJldi4gRSAqLworCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4MzIwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQWN0aW9udGVjIDgwMlVBVDEsIEhXVTAxMTUwLTAxVUsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjY4LCAweDc2MDUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEFpclZhc3QgVy1CdWRkaWUgV04yMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIERpY2sgU21pdGggRWxlY3Ryb25pY3MgWEgxMTUzIDgwMi4xMWIgVVNCIGFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDU3NDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIENOZXQgQ05VU0I2MTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEZpYmVyTGluZSBGTC1XTDIwMFUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEJlblEgQVdMNDAwIFVTQiBzdGljayAqLworCXsgVVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogM0NvbSAzQ1JTSEVXNjk2ICovCisJeyBVU0JfREVWSUNFKDB4MDUwNiwgMHgwYTAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBTaWVtZW5zIFNhbnRpcyBBRFNMIFdMQU4gVVNCIGFkYXB0ZXIgV0xMIDAxMyAqLworCXsgVVNCX0RFVklDRSgweDA2ODEsIDB4MDAxYiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQmVsa2luIEY1RDYwNTAsIHZlcnNpb24gMiAqLworCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDA1MCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogaUJsaXR6eiwgQldVNjEzIChub3QgKkIgb3IgKlNCKSAqLworCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogR2lnYWJ5dGUgR04tV0xCTTEwMSAqLworCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogUGxhbmV4IEdXLVVTMTFTICovCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHgzMjIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBJbnRlcm5hbCBXTEFOIGFkYXB0ZXIgaW4gaDVbNCw1XXh4IHNlcmllcyBpUEFRcyAqLworCXsgVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMTgpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIFVuaWRlbiBQQ1cxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWRkLCAweGZmMzUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qCisJICogYXQ3NmM1MDMtcmZtZC1hY2MKKwkgKi8KKwkvKiBTTUMyNjY0VyAqLworCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4MzUwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfQUNDKSB9LAorCS8qIEJlbGtpbiBGNUQ2MDUwLCBTTUMyNjYyVyB2MiwgU01DMjY2MlctQVIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDVjLCAweGEwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0FDQykgfSwKKwkvKgorCSAqIGF0NzZjNTA1LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDYpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1KSB9LAorCS8qCisJICogYXQ3NmM1MDUtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQsIE92aXNMaW5rIFdMLTExMzBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogRmliZXJsaW5lIEZMLVdMMjQwVSAqLworCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4MDAxNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBDTmV0IENOVVNCLTYxMUcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuOCAqLworCXsgVVNCX0RFVklDRSgweDE5MTUsIDB4MjIzMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBYdGVyYXN5cyBYTi0yMTIyQiwgSUJsaXR6eiBCV1U2MTNCL0JXVTYxM1NCICovCisJeyBVU0JfREVWSUNFKDB4MTJmZCwgMHgxMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIENvcmVnYSBXTEFOIFVTQiBTdGljayAxMSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4NzYxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBNaWNyb3N0YXIgTVNJIEJveCBNUzY5NzggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDEwMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyoKKwkgKiBhdDc2YzUwNWEtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QSBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSkgfSwKKwkvKiBHZW5lcmljIEFUNzZDNTA1QVMgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE3KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpIH0sCisJLyogU2llbWVucyBHaWdhc2V0IFVTQiBXTEFOIEFkYXB0ZXIgMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3MDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSkgfSwKKwkvKgorCSAqIGF0NzZjNTA1YW14LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QU1YIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBTVgpIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2X3RhYmxlKTsKKworLyogU3VwcG9ydGVkIHJhdGVzIG9mIHRoaXMgaGFyZHdhcmUsIGJpdCA3IG1hcmtzIGJhc2ljIHJhdGVzICovCitzdGF0aWMgY29uc3QgdTggaHdfcmF0ZXNbXSA9IHsgMHg4MiwgMHg4NCwgMHgwYiwgMHgxNiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcHJlYW1ibGVzW10gPSB7ICJsb25nIiwgInNob3J0IiwgImF1dG8iIH07CisKKy8qIEZpcm13YXJlIGRvd25sb2FkICovCisvKiBERlUgc3RhdGVzICovCisjZGVmaW5lIFNUQVRFX0lETEUJCQkweDAwCisjZGVmaW5lIFNUQVRFX0RFVEFDSAkJCTB4MDEKKyNkZWZpbmUgU1RBVEVfREZVX0lETEUJCQkweDAyCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DCQkweDAzCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZCQkweDA0CisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9JRExFCQkweDA1CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DCQkweDA2CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVAkJMHgwNworI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVAkweDA4CisjZGVmaW5lIFNUQVRFX0RGVV9VUExPQURfSURMRQkJMHgwOQorI2RlZmluZSBTVEFURV9ERlVfRVJST1IJCQkweDBhCisKKy8qIERGVSBjb21tYW5kcyAqLworI2RlZmluZSBERlVfREVUQUNICQkJMAorI2RlZmluZSBERlVfRE5MT0FECQkJMQorI2RlZmluZSBERlVfVVBMT0FECQkJMgorI2RlZmluZSBERlVfR0VUU1RBVFVTCQkJMworI2RlZmluZSBERlVfQ0xSU1RBVFVTCQkJNAorI2RlZmluZSBERlVfR0VUU1RBVEUJCQk1CisjZGVmaW5lIERGVV9BQk9SVAkJCTYKKworI2RlZmluZSBGV19CTE9DS19TSVpFIDEwMjQKKworc3RydWN0IGRmdV9zdGF0dXMgeworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgcG9sbF90aW1lb3V0WzNdOworCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdHJpbmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzX2ludGVyc2lsKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYxIHx8IGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDNyZm1kKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwMyB8fCBib2FyZCA9PSBCT0FSRF81MDNfQUNDKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDVhKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwNUEgfHwgYm9hcmQgPT0gQk9BUkRfNTA1QU1YKTsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBmaXJzdCAoaW50ZXJuYWwpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRfZndfYmxvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBibG9ja25vLAorCQkJCSAgdm9pZCAqYmxvY2ssIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCBERlVfRE5MT0FELAorCQkJICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIGJsb2Nrbm8sIDAsIGJsb2NrLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworc3RhdGljIGludCBhdDc2X2RmdV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZnVfc3RhdHVzICpzdGF0dXMpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIERGVV9HRVRTVEFUVVMsCisJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAgMCwgMCwgc3RhdHVzLCBzaXplb2Yoc3RydWN0IGRmdV9zdGF0dXMpLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1OCBhdDc2X2RmdV9nZXRfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0dFVFNUQVRFLAorCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgIDAsIDAsIHN0YXRlLCAxLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJcmV0dXJuIHJldDsKK30KKworLyogQ29udmVydCB0aW1lb3V0IGZyb20gdGhlIERGVSBzdGF0dXMgdG8gamlmZmllcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0NzZfZ2V0X3RpbWVvdXQoc3RydWN0IGRmdV9zdGF0dXMgKnMpCit7CisJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoKHMtPnBvbGxfdGltZW91dFsyXSA8PCAxNikKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMV0gPDwgOCkKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMF0pKTsKK30KKworLyogTG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBmcm9tIHRoZSBidWZmZXIuICBJZiBtYW5pZmVzdF9zeW5jX3RpbWVvdXQgPiAwLCB1c2UKKyAqIGl0cyB2YWx1ZSBpbiBqaWZmaWVzIGluIHRoZSBNQU5JRkVTVF9TWU5DIHN0YXRlLiAgKi8KK3N0YXRpYyBpbnQgYXQ3Nl91c2JkZnVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpidWYsIHUzMiBzaXplLAorCQkJCWludCBtYW5pZmVzdF9zeW5jX3RpbWVvdXQpCit7CisJdTggKmJsb2NrOworCXN0cnVjdCBkZnVfc3RhdHVzIGRmdV9zdGF0X2J1ZjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbmVlZF9kZnVfc3RhdGUgPSAxOworCWludCBpc19kb25lID0gMDsKKwl1OCBkZnVfc3RhdGUgPSAwOworCXUzMiBkZnVfdGltZW91dCA9IDA7CisJaW50IGJzaXplID0gMDsKKwlpbnQgYmxvY2tubyA9IDA7CisKKwlhdDc2X2RiZyhEQkdfREZVLCAiJXMoICVwLCAldSwgJWQpIiwgX19mdW5jX18sIGJ1Ziwgc2l6ZSwKKwkJIG1hbmlmZXN0X3N5bmNfdGltZW91dCk7CisKKwlpZiAoIXNpemUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgIkZXIGJ1ZmZlciBsZW5ndGggaW52YWxpZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbyB7CisJCWlmIChuZWVkX2RmdV9zdGF0ZSkgeworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXRlKHVkZXYsICZkZnVfc3RhdGUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiY2Fubm90IGdldCBERlUgc3RhdGU6ICVkXG4iLCByZXQpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJfQorCisJCXN3aXRjaCAoZGZ1X3N0YXRlKSB7CisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX1NZTkM6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0RPV05MT0FEX1NZTkMiKTsKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQlkZnVfc3RhdGUgPSBkZnVfc3RhdF9idWYuc3RhdGU7CisJCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJCX0gZWxzZQorCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJhdDc2X2RmdV9nZXRfc3RhdHVzIHJldHVybmVkICVkXG4iLAorCQkJCQkgICByZXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfQlVTWToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRE9XTkxPQURfQlVTWSIpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAxOworCisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVOiBSZXNldHRpbmcgZGV2aWNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJET1dOTE9BRC4uLiIpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgU1RBVEVfREZVX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIElETEUiKTsKKworCQkJYnNpemUgPSBtaW5fdChpbnQsIHNpemUsIEZXX0JMT0NLX1NJWkUpOworCQkJbWVtY3B5KGJsb2NrLCBidWYsIGJzaXplKTsKKwkJCWF0NzZfZGJnKERCR19ERlUsICJpbnQgZncsIHNpemUgbGVmdCA9ICU1ZCwgIgorCQkJCSAiYnNpemUgPSAlNGQsIGJsb2Nrbm8gPSAlMmQiLCBzaXplLCBic2l6ZSwKKwkJCQkgYmxvY2tubyk7CisJCQlyZXQgPQorCQkJICAgIGF0NzZfbG9hZF9pbnRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJCWJ1ZiArPSBic2l6ZTsKKwkJCXNpemUgLT0gYnNpemU7CisJCQlibG9ja25vKys7CisKKwkJCWlmIChyZXQgIT0gYnNpemUpCisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImF0NzZfbG9hZF9pbnRfZndfYmxvY2sgIgorCQkJCQkgICAicmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DIik7CisKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKworCQkJZGZ1X3N0YXRlID0gZGZ1X3N0YXRfYnVmLnN0YXRlOworCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCisJCQkvKiBvdmVycmlkZSB0aGUgdGltZW91dCBmcm9tIHRoZSBzdGF0dXMgcmVzcG9uc2UsCisJCQkgICBuZWVkZWQgZm9yIEFUNzZDNTA1QSAqLworCQkJaWYgKG1hbmlmZXN0X3N5bmNfdGltZW91dCA+IDApCisJCQkJZGZ1X3RpbWVvdXQgPSBtYW5pZmVzdF9zeW5jX3RpbWVvdXQ7CisKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlU6IFdhaXRpbmcgZm9yIG1hbmlmZXN0IHBoYXNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1Q6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUIik7CisJCQlpc19kb25lID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQiKTsKKwkJCWlzX2RvbmUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfVVBMT0FEX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX1VQTE9BRF9JRExFIik7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9FUlJPUjoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRVJST1IiKTsKKwkJCXJldCA9IC1FUElQRTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIFVOS05PV04gU1RBVEUgKCVkKSIsIGRmdV9zdGF0ZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghaXNfZG9uZSAmJiAocmV0ID49IDApKTsKKworZXhpdDoKKwlrZnJlZShibG9jayk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBIRVgyU1RSX0JVRkZFUlMgNAorI2RlZmluZSBIRVgyU1RSX01BWF9MRU4gNjQKKyNkZWZpbmUgQklOMkhFWCh4KSAoKHgpIDwgMTAgPyAnMCcgKyAoeCkgOiAoeCkgKyAnQScgLSAxMCkKKworLyogQ29udmVydCBiaW5hcnkgZGF0YSBpbnRvIGhleCBzdHJpbmcgKi8KK3N0YXRpYyBjaGFyICpoZXgyc3RyKHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbSEVYMlNUUl9CVUZGRVJTXVszICogSEVYMlNUUl9NQVhfTEVOICsgMV07CisJY2hhciAqcmV0ID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoSEVYMlNUUl9CVUZGRVJTIC0gMSldOworCWNoYXIgKm9idWYgPSByZXQ7CisJdTggKmlidWYgPSBidWY7CisKKwlpZiAobGVuID4gSEVYMlNUUl9NQVhfTEVOKQorCQlsZW4gPSBIRVgyU1RSX01BWF9MRU47CisKKwlpZiAobGVuIDw9IDApIHsKKwkJcmV0WzBdID0gJ1wwJzsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJKm9idWYrKyA9IEJJTjJIRVgoKmlidWYgPj4gNCk7CisJCSpvYnVmKysgPSBCSU4ySEVYKCppYnVmICYgMHhmKTsKKwkJKm9idWYrKyA9ICctJzsKKwkJaWJ1ZisrOworCX0KKwkqKC0tb2J1ZikgPSAnXDAnOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQUMyU1RSX0JVRkZFUlMgNAorCitzdGF0aWMgaW5saW5lIGNoYXIgKm1hYzJzdHIodTggKm1hYykKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbTUFDMlNUUl9CVUZGRVJTXVs2ICogM107CisJY2hhciAqc3RyOworCisJc3RyID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoTUFDMlNUUl9CVUZGRVJTIC0gMSldOworCXNwcmludGYoc3RyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKwlyZXR1cm4gc3RyOworfQorCisvKiBMRUQgdHJpZ2dlciAqLworc3RhdGljIGludCB0eF9hY3Rpdml0eTsKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyBERUZJTkVfVElNRVIobGVkdHJpZ190eF90aW1lciwgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYywgMCwgMCk7CitERUZJTkVfTEVEX1RSSUdHRVIobGVkdHJpZ190eCk7CisKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0YXRpYyBpbnQgdHhfbGFzdGFjdGl2aXR5OworCisJaWYgKHR4X2xhc3RhY3Rpdml0eSAhPSB0eF9hY3Rpdml0eSkgeworCQl0eF9sYXN0YWN0aXZpdHkgPSB0eF9hY3Rpdml0eTsKKwkJbGVkX3RyaWdnZXJfZXZlbnQobGVkdHJpZ190eCwgTEVEX0ZVTEwpOworCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworCX0gZWxzZQorCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX3R4LCBMRURfT0ZGKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KHZvaWQpCit7CisJdHhfYWN0aXZpdHkrKzsKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmxlZHRyaWdfdHhfdGltZXIpKQorCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworfQorCitzdGF0aWMgaW50IGF0NzZfcmVtYXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBhLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgTlVMTCwgMCwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2dldF9vcF9tb2RlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQ7CisJdTggc2F2ZWQ7CisJdTggKm9wX21vZGU7CisKKwlvcF9tb2RlID0ga21hbGxvYygxLCBHRlBfTk9JTyk7CisJaWYgKCFvcF9tb2RlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDAxLCAwLCBvcF9tb2RlLCAxLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXNhdmVkID0gKm9wX21vZGU7CisJa2ZyZWUob3BfbW9kZSk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlIGlmIChyZXQgPCAxKQorCQlyZXR1cm4gLUVJTzsKKwllbHNlCisJCXJldHVybiBzYXZlZDsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBzZWNvbmQgKCJleHRlcm5hbCIpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2xvYWRfZXh0X2Z3X2Jsb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgYmxvY2tubywKKwkJCQkJIHZvaWQgKmJsb2NrLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAgMHgwODAyLCBibG9ja25vLCBibG9jaywgc2l6ZSwKKwkJCSAgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkgIHVuaW9uIGF0NzZfaHdjZmcgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MGEwMiwgMCwKKwkJCSAgICAgICBidWYsIGJ1Zl9zaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKKy8qIEludGVyc2lsIGJvYXJkcyB1c2UgYSBkaWZmZXJlbnQgInZhbHVlIiBmb3IgR2V0SFdDb25maWcgcmVxdWVzdHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZ19pbnRlcnNpbChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICAgdW5pb24gYXQ3Nl9od2NmZyAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwOTAyLCAwLAorCQkJICAgICAgIGJ1ZiwgYnVmX3NpemUsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworLyogR2V0IHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYWRhcHRlciBhbmQgcHV0IGl0IHRvIHRoZSBhcHByb3ByaWF0ZQorICogZmllbGRzIG9mICdwcml2JyAodGhlIEdldEhXQ29uZmlnIHJlcXVlc3QgYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSByZXN1bHQKKyAqIGRlcGVuZHMgb24gdGhlIGJvYXJkIHR5cGUpICovCitzdGF0aWMgaW50IGF0NzZfZ2V0X2h3X2NvbmZpZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJdW5pb24gYXQ3Nl9od2NmZyAqaHdjZmcgPSBrbWFsbG9jKHNpemVvZigqaHdjZmcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaHdjZmcpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGF0NzZfaXNfaW50ZXJzaWwocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnX2ludGVyc2lsKHByaXYtPnVkZXYsIGh3Y2ZnLAorCQkJCQkgICAgICAgc2l6ZW9mKGh3Y2ZnLT5pKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5pLm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPmkucmVndWxhdG9yeV9kb21haW47CisJfSBlbHNlIGlmIChhdDc2X2lzXzUwM3JmbWQocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnKHByaXYtPnVkZXYsIGh3Y2ZnLCBzaXplb2YoaHdjZmctPnIzKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5yMy5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5yMy5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9IGVsc2UgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmcocHJpdi0+dWRldiwgaHdjZmcsIHNpemVvZihod2NmZy0+cjUpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPnI1Lm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPnI1LnJlZ3VsYXRvcnlfZG9tYWluOworCX0KKworZXhpdDoKKwlrZnJlZShod2NmZyk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBnZXQgSFcgQ29uZmlnIChlcnJvciAlZClcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJlZ19kb21haW4gY29uc3QgKmF0NzZfZ2V0X3JlZ19kb21haW4odTE2IGNvZGUpCit7CisJaW50IGk7CisJc3RhdGljIHN0cnVjdCByZWdfZG9tYWluIGNvbnN0IGZkX3RhYltdID0geworCQl7IDB4MTAsICJGQ0MgKFVTQSkiLCAweDdmZiB9LAkvKiBjaCAxLTExICovCisJCXsgMHgyMCwgIklDIChDYW5hZGEpIiwgMHg3ZmYgfSwJLyogY2ggMS0xMSAqLworCQl7IDB4MzAsICJFVFNJIChtb3N0IG9mIEV1cm9wZSkiLCAweDFmZmYgfSwJLyogY2ggMS0xMyAqLworCQl7IDB4MzEsICJTcGFpbiIsIDB4NjAwIH0sCS8qIGNoIDEwLTExICovCisJCXsgMHgzMiwgIkZyYW5jZSIsIDB4MWUwMCB9LAkvKiBjaCAxMC0xMyAqLworCQl7IDB4NDAsICJNS0sgKEphcGFuKSIsIDB4MjAwMCB9LAkvKiBjaCAxNCAqLworCQl7IDB4NDEsICJNS0sxIChKYXBhbikiLCAweDNmZmYgfSwJLyogY2ggMS0xNCAqLworCQl7IDB4NTAsICJJc3JhZWwiLCAweDNmYyB9LAkvKiBjaCAzLTkgKi8KKwkJeyAweDAwLCAiPHVua25vd24+IiwgMHhmZmZmZmZmZiB9CS8qIGNoIDEtMzIgKi8KKwl9OworCisJLyogTGFzdCBlbnRyeSBpcyBmYWxsYmFjayBmb3IgdW5rbm93biBkb21haW4gY29kZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZkX3RhYikgLSAxOyBpKyspCisJCWlmIChjb2RlID09IGZkX3RhYltpXS5jb2RlKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gJmZkX3RhYltpXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfbWliKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1MTYgbWliLCB2b2lkICpidWYsCisJCQkgICAgICAgaW50IGJ1Zl9zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCBtaWIgPDwgOCwgMCwgYnVmLCBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0ID49IDAgJiYgcmV0ICE9IGJ1Zl9zaXplKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gcG9zaXRpdmUgbnVtYmVyIGZvciBzdGF0dXMsIG5lZ2F0aXZlIGZvciBhbiBlcnJvciAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfY21kX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggY21kKQoreworCXU4ICpzdGF0X2J1ZjsKKwlpbnQgcmV0OworCisJc3RhdF9idWYgPSBrbWFsbG9jKDQwLCBHRlBfTk9JTyk7CisJaWYgKCFzdGF0X2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDIyLAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQlVU0JfUkVDSVBfSU5URVJGQUNFLCBjbWQsIDAsIHN0YXRfYnVmLAorCQkJNDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IHN0YXRfYnVmWzVdOworCWtmcmVlKHN0YXRfYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFLRV9DTURfQ0FTRShjKSBjYXNlIChjKTogcmV0dXJuICNjCitzdGF0aWMgY29uc3QgY2hhciAqYXQ3Nl9nZXRfY21kX3N0cmluZyh1OCBjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoY21kX3N0YXR1cykgeworCQlNQUtFX0NNRF9DQVNFKENNRF9TRVRfTUlCKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfR0VUX01JQik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1NDQU4pOworCQlNQUtFX0NNRF9DQVNFKENNRF9KT0lOKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfU1RBUlRfSUJTUyk7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1JBRElPX09OKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfUkFESU9fT0ZGKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfU1RBUlRVUCk7CisJfQorCisJcmV0dXJuICJVTktOT1dOIjsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9jYXJkX2NvbW1hbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGNtZCwgdm9pZCAqYnVmLAorCQkJCSBpbnQgYnVmX3NpemUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXQ3Nl9jb21tYW5kICpjbWRfYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKworCQkJCQkgICAgICAgYnVmX3NpemUsIEdGUF9LRVJORUwpOworCisJaWYgKCFjbWRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZF9idWYtPmNtZCA9IGNtZDsKKwljbWRfYnVmLT5yZXNlcnZlZCA9IDA7CisJY21kX2J1Zi0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zl9zaXplKTsKKwltZW1jcHkoY21kX2J1Zi0+ZGF0YSwgYnVmLCBidWZfc2l6ZSk7CisKKwlhdDc2X2RiZ19kdW1wKERCR19DTUQsIGNtZF9idWYsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jb21tYW5kKSArIGJ1Zl9zaXplLAorCQkgICAgICAiaXNzdWluZyBjb21tYW5kICVzICgweCUwMngpIiwKKwkJICAgICAgYXQ3Nl9nZXRfY21kX3N0cmluZyhjbWQpLCBjbWQpOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDAsIDAsIGNtZF9idWYsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKyBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlrZnJlZShjbWRfYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BS0VfQ01EX1NUQVRVU19DQVNFKGMpCWNhc2UgKGMpOiByZXR1cm4gI2MKK3N0YXRpYyBjb25zdCBjaGFyICphdDc2X2dldF9jbWRfc3RhdHVzX3N0cmluZyh1OCBjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoY21kX3N0YXR1cykgeworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lETEUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0NPTVBMRVRFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19VTktOT1dOKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUik7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRCk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfVElNRV9PVVQpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lOX1BST0dSRVNTKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19IT1NUX0ZBSUxVUkUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1NDQU5fRkFJTEVEKTsKKwl9CisKKwlyZXR1cm4gIlVOS05PV04iOworfQorCisvKiBXYWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGNvbXBsZXRlZCAqLworc3RhdGljIGludCBhdDc2X3dhaXRfY29tcGxldGlvbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgY21kKQoreworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBDTURfQ09NUExFVElPTl9USU1FT1VUOworCisJZG8geworCQlzdGF0dXMgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIGNtZCk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9jbWRfc3RhdHVzIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKworCQlhdDc2X2RiZyhEQkdfV0FJVF9DT01QTEVURSwKKwkJCSAiJXM6IFdhaXRpbmcgb24gY21kICVkLCBzdGF0dXMgPSAlZCAoJXMpIiwKKwkJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCwgc3RhdHVzLAorCQkJIGF0NzZfZ2V0X2NtZF9zdGF0dXNfc3RyaW5nKHN0YXR1cykpOworCisJCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUworCQkgICAgJiYgc3RhdHVzICE9IENNRF9TVEFUVVNfSURMRSkKKwkJCWJyZWFrOworCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDEwKTsJLyogMTAwIG1zICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IGNvbXBsZXRpb24gdGltZW91dCBmb3IgY29tbWFuZCAlZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCk7CisJCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgxKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfbWliKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBzZXRfbWliX2J1ZmZlciAqYnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NFVF9NSUIsIGJ1ZiwKKwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IHNldF9taWJfYnVmZmVyLAorCQkJCQkgICAgIGRhdGEpICsgYnVmLT5zaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TRVRfTUlCKTsKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiBzZXRfbWliOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQgIgorCQkgICAgICAgIndpdGggJWRcbiIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gPCAwIG9uIGVycm9yLCA9PSAwIGlmIG5vIGNvbW1hbmQgc2VudCwgPT0gMSBpZiBjbWQgc2VudCAqLworc3RhdGljIGludCBhdDc2X3NldF9yYWRpbyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisJaW50IGNtZDsKKworCWlmIChwcml2LT5yYWRpb19vbiA9PSBlbmFibGUpCisJCXJldHVybiAwOworCisJY21kID0gZW5hYmxlID8gQ01EX1JBRElPX09OIDogQ01EX1JBRElPX09GRjsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBjbWQsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQoJWQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCwgcmV0KTsKKwllbHNlCisJCXJldCA9IDE7CisKKwlwcml2LT5yYWRpb19vbiA9IGVuYWJsZTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXQgY3VycmVudCBwb3dlciBzYXZlIG1vZGUgKEFUNzZfUE1fT0ZGL0FUNzZfUE1fT04vQVQ3Nl9QTV9TTUFSVCkgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcG1fbW9kZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19NR01UOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX21nbXQsIHBvd2VyX21nbXRfbW9kZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBwcml2LT5wbV9tb2RlOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocG1fbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcHJlYW1ibGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTggdHlwZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCBwcmVhbWJsZV90eXBlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHR5cGU7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwcmVhbWJsZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfZnJhZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIGZyYWdfdGhyZXNob2xkKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KHNpemUpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoZnJhZyB0aHJlc2hvbGQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X3J0cyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIHJ0c190aHJlc2hvbGQpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChydHMpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2F1dG9yYXRlX2ZhbGxiYWNrKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCB0eGF1dG9yYXRlX2ZhbGxiYWNrKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IG9ub2ZmOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoYXV0b3JhdGUgZmFsbGJhY2spIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19hZGRyKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19hZGRyICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfYWRkciksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfQUREUiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19hZGRyKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfQUREUikgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19BRERSOiBtYWNfYWRkciAlcyByZXMgMHgleCAweCV4IiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG1hYzJzdHIobS0+bWFjX2FkZHIpLCBtLT5yZXNbMF0sIG0tPnJlc1sxXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+Z3JvdXBfYWRkcik7IGkrKykKKwkJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX0FERFI6IGdyb3VwIGFkZHIgJWQ6ICVzLCAiCisJCQkgInN0YXR1cyAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaSwKKwkJCSBtYWMyc3RyKG0tPmdyb3VwX2FkZHJbaV0pLCBtLT5ncm91cF9hZGRyX3N0YXR1c1tpXSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY193ZXAoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBrZXlfbGVuOworCXN0cnVjdCBtaWJfbWFjX3dlcCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX3dlcCksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19XRVAsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfd2VwKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfV0VQKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX1dFUDogcHJpdl9pbnZva2VkICV1IGRlZl9rZXlfaWQgJXUgIgorCQkgImtleV9sZW4gJXUgZXhjbF91bmVuY3IgJXUgd2VwX2ljdl9lcnIgJXUgd2VwX2V4Y2x1ZGVkICV1ICIKKwkJICJlbmNyX2xldmVsICV1IGtleSAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG0tPnByaXZhY3lfaW52b2tlZCwgbS0+d2VwX2RlZmF1bHRfa2V5X2lkLAorCQkgbS0+d2VwX2tleV9tYXBwaW5nX2xlbiwgbS0+ZXhjbHVkZV91bmVuY3J5cHRlZCwKKwkJIGxlMzJfdG9fY3B1KG0tPndlcF9pY3ZfZXJyb3JfY291bnQpLAorCQkgbGUzMl90b19jcHUobS0+d2VwX2V4Y2x1ZGVkX2NvdW50KSwgbS0+ZW5jcnlwdGlvbl9sZXZlbCwKKwkJIG0tPndlcF9kZWZhdWx0X2tleV9pZCk7CisKKwlrZXlfbGVuID0gKG0tPmVuY3J5cHRpb25fbGV2ZWwgPT0gMSkgPworCSAgICBXRVBfU01BTExfS0VZX0xFTiA6IFdFUF9MQVJHRV9LRVlfTEVOOworCisJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspCisJCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19XRVA6IGtleSAlZDogJXMiLAorCQkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaSwKKwkJCSBoZXgyc3RyKG0tPndlcF9kZWZhdWx0X2tleXZhbHVlW2ldLCBrZXlfbGVuKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19tZ210KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19tZ210ICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfTUdNVCwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfTUdNVCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19NR01UOiBiZWFjb25fcGVyaW9kICVkIENGUF9tYXhfZHVyYXRpb24gIgorCQkgIiVkIG1lZGl1bV9vY2N1cGFuY3lfbGltaXQgJWQgc3RhdGlvbl9pZCAweCV4IEFUSU1fd2luZG93ICVkICIKKwkJICJDRlBfbW9kZSAlZCBwcml2YWN5X29wdF9pbXBsICVkIERUSU1fcGVyaW9kICVkIENGUF9wZXJpb2QgJWQgIgorCQkgImN1cnJlbnRfYnNzaWQgJXMgY3VycmVudF9lc3NpZCAlcyBjdXJyZW50X2Jzc190eXBlICVkICIKKwkJICJwbV9tb2RlICVkIGlic3NfY2hhbmdlICVkIHJlcyAlZCAiCisJCSAibXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQgJWQgIgorCQkgImludGVybmF0aW9uYWxfcm9hbWluZyAlZCBjb3VudHJ5X3N0cmluZyAlLjNzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUxNl90b19jcHUobS0+YmVhY29uX3BlcmlvZCksCisJCSBsZTE2X3RvX2NwdShtLT5DRlBfbWF4X2R1cmF0aW9uKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1lZGl1bV9vY2N1cGFuY3lfbGltaXQpLAorCQkgbGUxNl90b19jcHUobS0+c3RhdGlvbl9pZCksIGxlMTZfdG9fY3B1KG0tPkFUSU1fd2luZG93KSwKKwkJIG0tPkNGUF9tb2RlLCBtLT5wcml2YWN5X29wdGlvbl9pbXBsZW1lbnRlZCwgbS0+RFRJTV9wZXJpb2QsCisJCSBtLT5DRlBfcGVyaW9kLCBtYWMyc3RyKG0tPmN1cnJlbnRfYnNzaWQpLAorCQkgaGV4MnN0cihtLT5jdXJyZW50X2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBtLT5jdXJyZW50X2Jzc190eXBlLCBtLT5wb3dlcl9tZ210X21vZGUsIG0tPmlic3NfY2hhbmdlLAorCQkgbS0+cmVzLCBtLT5tdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZCwKKwkJIG0tPm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQsIG0tPmNvdW50cnlfc3RyaW5nKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hYyAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9tYWMpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQzogbWF4X3R4X21zZHVfbGlmZXRpbWUgJWQgIgorCQkgIm1heF9yeF9saWZldGltZSAlZCBmcmFnX3RocmVzaG9sZCAlZCBydHNfdGhyZXNob2xkICVkICIKKwkJICJjd21pbiAlZCBjd21heCAlZCBzaG9ydF9yZXRyeV90aW1lICVkIGxvbmdfcmV0cnlfdGltZSAlZCAiCisJCSAic2Nhbl90eXBlICVkIHNjYW5fY2hhbm5lbCAlZCBwcm9iZV9kZWxheSAldSAiCisJCSAibWluX2NoYW5uZWxfdGltZSAlZCBtYXhfY2hhbm5lbF90aW1lICVkIGxpc3Rlbl9pbnQgJWQgIgorCQkgImRlc2lyZWRfc3NpZCAlcyBkZXNpcmVkX2Jzc2lkICVzIGRlc2lyZWRfYnNzdHlwZSAlZCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBsZTMyX3RvX2NwdShtLT5tYXhfdHhfbXNkdV9saWZldGltZSksCisJCSBsZTMyX3RvX2NwdShtLT5tYXhfcnhfbGlmZXRpbWUpLAorCQkgbGUxNl90b19jcHUobS0+ZnJhZ190aHJlc2hvbGQpLCBsZTE2X3RvX2NwdShtLT5ydHNfdGhyZXNob2xkKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmN3bWluKSwgbGUxNl90b19jcHUobS0+Y3dtYXgpLAorCQkgbS0+c2hvcnRfcmV0cnlfdGltZSwgbS0+bG9uZ19yZXRyeV90aW1lLCBtLT5zY2FuX3R5cGUsCisJCSBtLT5zY2FuX2NoYW5uZWwsIGxlMTZfdG9fY3B1KG0tPnByb2JlX2RlbGF5KSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1pbl9jaGFubmVsX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+bWF4X2NoYW5uZWxfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5saXN0ZW5faW50ZXJ2YWwpLAorCQkgaGV4MnN0cihtLT5kZXNpcmVkX3NzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIG1hYzJzdHIobS0+ZGVzaXJlZF9ic3NpZCksIG0tPmRlc2lyZWRfYnNzdHlwZSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX3BoeShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9waHkgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX1BIWSwgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChQSFkpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBQSFk6IGVkX3RocmVzaG9sZCAlZCBzbG90X3RpbWUgJWQgIgorCQkgInNpZnNfdGltZSAlZCBwcmVhbWJsZV9sZW5ndGggJWQgcGxjcF9oZWFkZXJfbGVuZ3RoICVkICIKKwkJICJtcGR1X21heF9sZW5ndGggJWQgY2NhX21vZGVfc3VwcG9ydGVkICVkIG9wZXJhdGlvbl9yYXRlX3NldCAiCisJCSAiMHgleCAweCV4IDB4JXggMHgleCBjaGFubmVsX2lkICVkIGN1cnJlbnRfY2NhX21vZGUgJWQgIgorCQkgInBoeV90eXBlICVkIGN1cnJlbnRfcmVnX2RvbWFpbiAlZCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGxlMzJfdG9fY3B1KG0tPmVkX3RocmVzaG9sZCksCisJCSBsZTE2X3RvX2NwdShtLT5zbG90X3RpbWUpLCBsZTE2X3RvX2NwdShtLT5zaWZzX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+cHJlYW1ibGVfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnBsY3BfaGVhZGVyX2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5tcGR1X21heF9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+Y2NhX21vZGVfc3VwcG9ydGVkKSwgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzBdLAorCQkgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzFdLCBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMl0sCisJCSBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbM10sIG0tPmNoYW5uZWxfaWQsIG0tPmN1cnJlbnRfY2NhX21vZGUsCisJCSBtLT5waHlfdHlwZSwgbS0+Y3VycmVudF9yZWdfZG9tYWluKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbG9jYWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbG9jYWwgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX0xPQ0FMLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9sb2NhbCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTE9DQUwpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBMT0NBTDogYmVhY29uX2VuYWJsZSAlZCAiCisJCSAidHhhdXRvcmF0ZV9mYWxsYmFjayAlZCBzc2lkX3NpemUgJWQgcHJvbWlzY3VvdXNfbW9kZSAlZCAiCisJCSAicHJlYW1ibGVfdHlwZSAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG0tPmJlYWNvbl9lbmFibGUsCisJCSBtLT50eGF1dG9yYXRlX2ZhbGxiYWNrLCBtLT5zc2lkX3NpemUsIG0tPnByb21pc2N1b3VzX21vZGUsCisJCSBtLT5wcmVhbWJsZV90eXBlKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWRvbWFpbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tZG9tYWluICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tZG9tYWluKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTURPTUFJTiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21kb21haW4pKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1ET01BSU4pIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiBjaGFubmVsX2xpc3QgJXMiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgaGV4MnN0cihtLT5jaGFubmVsX2xpc3QsIHNpemVvZihtLT5jaGFubmVsX2xpc3QpKSk7CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiB0eF9wb3dlcmxldmVsICVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIGhleDJzdHIobS0+dHhfcG93ZXJsZXZlbCwgc2l6ZW9mKG0tPnR4X3Bvd2VybGV2ZWwpKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCisvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCitzdGF0aWMgaW50IGF0NzZfc3RhcnRfbW9uaXRvcihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3JlcV9zY2FuIHNjYW47CisJaW50IHJldDsKKworCW1lbXNldCgmc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9zY2FuKSk7CisJbWVtc2V0KHNjYW4uYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKworCXNjYW4uY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJc2Nhbi5zY2FuX3R5cGUgPSBTQ0FOX1RZUEVfUEFTU0lWRTsKKwlzY2FuLmludGVybmF0aW9uYWxfc2NhbiA9IDA7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NDQU4sICZzY2FuLCBzaXplb2Yoc2NhbikpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBDTURfU0NBTik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxjdWxhdGUgcGFkZGluZyBmcm9tIHR4YnVmLT53bGVuZ3RoICh3aGljaCBleGNsdWRlcyB0aGUgVVNCIFRYIGhlYWRlciksCisgICBsaWtlbHkgdG8gY29tcGVuc2F0ZSBhIGZsYXcgaW4gdGhlIEFUNzZDNTAzQSBVU0IgcGFydCAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfY2FsY19wYWRkaW5nKGludCB3bGVuKQoreworCS8qIGFkZCB0aGUgVVNCIFRYIGhlYWRlciAqLworCXdsZW4gKz0gQVQ3Nl9UWF9IRFJMRU47CisKKwl3bGVuID0gd2xlbiAlIDY0OworCisJaWYgKHdsZW4gPCA1MCkKKwkJcmV0dXJuIDUwIC0gd2xlbjsKKworCWlmICh3bGVuID49IDYxKQorCQlyZXR1cm4gNjQgKyA1MCAtIHdsZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKworCXByaXYtPnJ4X3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5yeF90YXNrbGV0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdWJtaXRfcnhfdXJiKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOworCisJaWYgKCFwcml2LT5yeF91cmIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHByaXYtPnJ4X3VyYiBpcyBOVUxMXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghc2tiKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdDc2X3J4X2J1ZmZlcikpOworCQlpZiAoIXNrYikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIHJ4IHNrYnVmZlxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlwcml2LT5yeF9za2IgPSBza2I7CisJfSBlbHNlIHsKKwkJc2tiX3B1c2goc2tiLCBza2JfaGVhZHJvb20oc2tiKSk7CisJCXNrYl90cmltKHNrYiwgMCk7CisJfQorCisJc2l6ZSA9IHNrYl90YWlscm9vbShza2IpOworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnJ4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+cnhfcGlwZSwKKwkJCSAgc2tiX3B1dChza2IsIHNpemUpLCBzaXplLCBhdDc2X3J4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5yeF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0RFVikKKwkJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCQkgInVzYl9zdWJtaXRfdXJiIHJldHVybmVkIC1FTk9ERVYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcngsIHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCX0KKworZXhpdDoKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0RFVikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHN1Ym1pdCByeCB1cmIgLSBwbGVhc2UgdW5sb2FkIHRoZSAiCisJCSAgICAgICAiZHJpdmVyIGFuZC9vciBwb3dlciBjeWNsZSB0aGUgZGV2aWNlXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIERvd25sb2FkIGV4dGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9leHRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBvcF9tb2RlOworCWludCBibG9ja25vID0gMDsKKwlpbnQgYnNpemU7CisJdTggKmJsb2NrOworCXU4ICpidWYgPSBmd2UtPmV4dGZ3OworCWludCBzaXplID0gZndlLT5leHRmd19zaXplOworCisJaWYgKCFidWYgfHwgIXNpemUpCisJCXJldHVybiAtRU5PRU5UOworCisJb3BfbW9kZSA9IGF0NzZfZ2V0X29wX21vZGUodWRldik7CisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAib3Btb2RlICVkIiwgb3BfbW9kZSk7CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNIKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIG9wbW9kZSAlZFxuIiwKKwkJCSAgIG9wX21vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSIpOworCisJLyogZm9yIGZ3ID49IDAuMTAwLCB0aGUgZGV2aWNlIG5lZWRzIGFuIGV4dHJhIGVtcHR5IGJsb2NrICovCisJZG8geworCQlic2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgRldfQkxPQ0tfU0laRSk7CisJCW1lbWNweShibG9jaywgYnVmLCBic2l6ZSk7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCSAiZXh0IGZ3LCBzaXplIGxlZnQgPSAlNWQsIGJzaXplID0gJTRkLCBibG9ja25vID0gJTJkIiwKKwkJCSBzaXplLCBic2l6ZSwgYmxvY2tubyk7CisJCXJldCA9IGF0NzZfbG9hZF9leHRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJaWYgKHJldCAhPSBic2l6ZSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAibG9hZGluZyAlZHRoIGZpcm13YXJlIGJsb2NrIGZhaWxlZDogJWRcbiIsCisJCQkJICAgYmxvY2tubywgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlidWYgKz0gYnNpemU7CisJCXNpemUgLT0gYnNpemU7CisJCWJsb2Nrbm8rKzsKKwl9IHdoaWxlIChic2l6ZSA+IDApOworCisJaWYgKGF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpKSB7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIjIwMCBtcyBkZWxheSBmb3IgNTA1YSIpOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFogLyA1ICsgMSk7CisJfQorCitleGl0OgorCWtmcmVlKGJsb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIERvd25sb2FkIGludGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBuZWVkX3JlbWFwID0gIWF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpOworCisJcmV0ID0gYXQ3Nl91c2JkZnVfZG93bmxvYWQodWRldiwgZndlLT5pbnRmdywgZndlLT5pbnRmd19zaXplLAorCQkJCSAgIG5lZWRfcmVtYXAgPyAwIDogMiAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgaW50ZXJuYWwgZncgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJzZW5kaW5nIFJFTUFQIik7CisKKwkvKiBubyBSRU1BUCBmb3IgNTA1QSAoc2VlIFNGIGRyaXZlcikgKi8KKwlpZiAobmVlZF9yZW1hcCkgeworCQlyZXQgPSBhdDc2X3JlbWFwKHVkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAic2VuZGluZyBSRU1BUCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInNsZWVwaW5nIGZvciAyIHNlY29uZHMiKTsKKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMiAqIEhaICsgMSk7CisJdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyAqY2NmZyA9ICZwcml2LT5jYXJkX2NvbmZpZzsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogc3NpZCAlLipzICglcykgbW9kZSAlcyBjaCAlZCB3ZXAgJXMga2V5ICVkICIKKwkJICJrZXlsZW4gJWQiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHByaXYtPmVzc2lkX3NpemUsCisJCSBwcml2LT5lc3NpZCwgaGV4MnN0cihwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgcHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DID8gImFkaG9jIiA6ICJpbmZyYSIsCisJCSBwcml2LT5jaGFubmVsLCBwcml2LT53ZXBfZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCSBwcml2LT53ZXBfa2V5X2lkLCBwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0pOworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHByZWFtYmxlICVzIHJ0cyAlZCByZXRyeSAlZCBmcmFnICVkICIKKwkJICJ0eHJhdGUgJXMgYXV0aF9tb2RlICVkIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgcHJlYW1ibGVzW3ByaXYtPnByZWFtYmxlX3R5cGVdLCBwcml2LT5ydHNfdGhyZXNob2xkLAorCQkgcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQsIHByaXYtPmZyYWdfdGhyZXNob2xkLAorCQkgcHJpdi0+dHhyYXRlID09IFRYX1JBVEVfMU1CSVQgPyAiMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzJNQklUID8gIjJNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV81XzVNQklUID8gIjUuNU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzExTUJJVCA/ICIxMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFX0FVVE8gPyAiYXV0byIgOiAiPGludmFsaWQ+IiwgcHJpdi0+YXV0aF9tb2RlKTsKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBwbV9tb2RlICVkIHBtX3BlcmlvZCAlZCBhdXRoX21vZGUgJXMgIgorCQkgInNjYW5fdGltZXMgJWQgJWQgc2Nhbl9tb2RlICVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcHJpdi0+cG1fbW9kZSwgcHJpdi0+cG1fcGVyaW9kLAorCQkgcHJpdi0+YXV0aF9tb2RlID09IFdMQU5fQVVUSF9PUEVOID8gIm9wZW4iIDogInNoYXJlZF9zZWNyZXQiLAorCQkgcHJpdi0+c2Nhbl9taW5fdGltZSwgcHJpdi0+c2Nhbl9tYXhfdGltZSwKKwkJIHByaXYtPnNjYW5fbW9kZSA9PSBTQ0FOX1RZUEVfQUNUSVZFID8gImFjdGl2ZSIgOiAicGFzc2l2ZSIpOworCisJbWVtc2V0KGNjZmcsIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWNjZmctPnByb21pc2N1b3VzX21vZGUgPSAwOworCWNjZmctPnNob3J0X3JldHJ5X2xpbWl0ID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CisKKwlpZiAocHJpdi0+d2VwX2VuYWJsZWQpIHsKKwkJaWYgKHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSA+IFdFUF9TTUFMTF9LRVlfTEVOKQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMjsKKwkJZWxzZQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMTsKKworCQkvKiBqYWw6IGFsd2F5cyBleGNsdWRlIHVuZW5jcnlwdGVkIGlmIFdFUCBpcyBhY3RpdmUgKi8KKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7CisJfSBlbHNlIHsKKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CisJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDA7CisJfQorCisJY2NmZy0+cnRzX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHByaXYtPnJ0c190aHJlc2hvbGQpOworCWNjZmctPmZyYWdtZW50YXRpb25fdGhyZXNob2xkID0gY3B1X3RvX2xlMTYocHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCisJbWVtY3B5KGNjZmctPmJhc2ljX3JhdGVfc2V0LCBod19yYXRlcywgNCk7CisJLyogamFsOiByZWFsbHkgbmVlZGVkLCB3ZSBkbyBhIHNldF9taWIgZm9yIGF1dG9yYXRlIGxhdGVyID8/PyAqLworCWNjZmctPmF1dG9fcmF0ZV9mYWxsYmFjayA9IChwcml2LT50eHJhdGUgPT0gVFhfUkFURV9BVVRPID8gMSA6IDApOworCWNjZmctPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCWNjZmctPnByaXZhY3lfaW52b2tlZCA9IHByaXYtPndlcF9lbmFibGVkOworCW1lbWNweShjY2ZnLT5jdXJyZW50X3NzaWQsIHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7CisJY2NmZy0+c3NpZF9sZW4gPSBwcml2LT5lc3NpZF9zaXplOworCisJY2NmZy0+d2VwX2RlZmF1bHRfa2V5X2lkID0gcHJpdi0+d2VwX2tleV9pZDsKKwltZW1jcHkoY2NmZy0+d2VwX2RlZmF1bHRfa2V5X3ZhbHVlLCBwcml2LT53ZXBfa2V5cywKKwkgICAgICAgc2l6ZW9mKHByaXYtPndlcF9rZXlzKSk7CisKKwljY2ZnLT5zaG9ydF9wcmVhbWJsZSA9IHByaXYtPnByZWFtYmxlX3R5cGU7CisJY2NmZy0+YmVhY29uX3BlcmlvZCA9IGNwdV90b19sZTE2KHByaXYtPmJlYWNvbl9wZXJpb2QpOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TVEFSVFVQLCAmcHJpdi0+Y2FyZF9jb25maWcsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfc2V0X2NhcmRfY29tbWFuZCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TVEFSVFVQKTsKKworCS8qIHJlbW92ZSBCU1NJRCBmcm9tIHByZXZpb3VzIHJ1biAqLworCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCisJaWYgKGF0NzZfc2V0X3JhZGlvKHByaXYsIDEpID09IDEpCisJCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9SQURJT19PTik7CisKKwlyZXQgPSBhdDc2X3NldF9wcmVhbWJsZShwcml2LCBwcml2LT5wcmVhbWJsZV90eXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X2ZyYWcocHJpdiwgcHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfcnRzKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfYXV0b3JhdGVfZmFsbGJhY2socHJpdiwKKwkJCQkJIHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFX0FVVE8gPyAxIDogMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGF0NzZfZGVidWcgJiBEQkdfTUlCKSB7CisJCWF0NzZfZHVtcF9taWJfbWFjKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19hZGRyKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19tZ210KHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY193ZXAocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWRvbWFpbihwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9waHkocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbG9jYWwocHJpdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zZXRfcHJvbWlzYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX3NldF9wcm9taXNjKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHByb21pc2N1b3VzX21vZGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gcHJpdi0+cHJvbWlzYyA/IDEgOiAwOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocHJvbWlzY3VvdXNfbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogU3VibWl0IFJ4IHVyYiBiYWNrIHRvIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zdWJtaXRfcngoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19zdWJtaXRfcngpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSAoc3RydWN0IHVyYiAqKXBhcmFtOworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWY7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0geyAwIH07CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkgeworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkZXZpY2UgdW5wbHVnZ2VkIik7CisJCWlmICh1cmIpCisJCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJ1cmIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFwcml2LT5yeF9za2IgfHwgIXByaXYtPnJ4X3NrYi0+ZGF0YSkKKwkJcmV0dXJuOworCisJYnVmID0gKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqKXByaXYtPnJ4X3NrYi0+ZGF0YTsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQorCQkJYXQ3Nl9kYmcoREJHX1VSQiwKKwkJCQkgIiVzICVzOiAtIG5vbnplcm8gUnggYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQkgX19mdW5jX18sIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJCQkgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJYXQ3Nl9kYmcoREJHX1JYX0FUTUVMX0hEUiwKKwkJICIlczogcnggZnJhbWU6IHJhdGUgJWQgcnNzaSAlZCBub2lzZSAlZCBsaW5rICVkIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgYnVmLT5yeF9yYXRlLCBidWYtPnJzc2ksCisJCSBidWYtPm5vaXNlX2xldmVsLCBidWYtPmxpbmtfcXVhbGl0eSk7CisKKwlza2JfcHVsbChwcml2LT5yeF9za2IsIEFUNzZfUlhfSERSTEVOKTsKKwlza2JfdHJpbShwcml2LT5yeF9za2IsIGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCkpOworCWF0NzZfZGJnX2R1bXAoREJHX1JYX0RBVEEsIHByaXYtPnJ4X3NrYi0+ZGF0YSwKKwkJICAgICAgcHJpdi0+cnhfc2tiLT5sZW4sICJSWDogbGVuPSVkIiwgcHJpdi0+cnhfc2tiLT5sZW4pOworCisJcnhfc3RhdHVzLnNpZ25hbCA9IGJ1Zi0+cnNzaTsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiY2FsbGluZyBpZWVlODAyMTFfcnhfaXJxc2FmZSgpOiAlZC8lZCIsCisJCSBwcml2LT5yeF9za2ItPmxlbiwgcHJpdi0+cnhfc2tiLT5kYXRhX2xlbik7CisJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHByaXYtPnJ4X3NrYiwgJnJ4X3N0YXR1cyk7CisKKwkvKiBVc2UgYSBuZXcgc2tiIGZvciB0aGUgbmV4dCByZWNlaXZlICovCisJcHJpdi0+cnhfc2tiID0gTlVMTDsKKworCWF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKK30KKworLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgYW5kIHBhcnNlIGl0ICovCitzdGF0aWMgc3RydWN0IGZ3ZW50cnkgKmF0NzZfbG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICBlbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKnN0cjsKKwlzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKmZ3aDsKKwlzdHJ1Y3QgZndlbnRyeSAqZndlID0gJmZpcm13YXJlc1tib2FyZF90eXBlXTsKKworCW11dGV4X2xvY2soJmZ3X211dGV4KTsKKworCWlmIChmd2UtPmxvYWRlZCkgeworCQlhdDc2X2RiZyhEQkdfRlcsICJyZS11c2luZyBwcmV2aW91c2x5IGxvYWRlZCBmdyIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZG93bmxvYWRpbmcgZmlybXdhcmUgJXMiLCBmd2UtPmZ3bmFtZSk7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndlLT5mdywgZndlLT5md25hbWUsICZ1ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBub3QgZm91bmQhXG4iLAorCQkJICAgZndlLT5md25hbWUpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgInlvdSBtYXkgbmVlZCB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgZnJvbSAiCisJCQkgICAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2F0NzZjNTAzYS9cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZ290IGl0LiIpOworCWZ3aCA9IChzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKikoZndlLT5mdy0+ZGF0YSk7CisKKwlpZiAoZndlLT5mdy0+c2l6ZSA8PSBzaXplb2YoKmZ3aCkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJmaXJtd2FyZSBpcyB0b28gc2hvcnQgKDB4JXp4KVxuIiwgZndlLT5mdy0+c2l6ZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBDUkMgY3VycmVudGx5IG5vdCBjaGVja2VkICovCisJZndlLT5ib2FyZF90eXBlID0gbGUzMl90b19jcHUoZndoLT5ib2FyZF90eXBlKTsKKwlpZiAoZndlLT5ib2FyZF90eXBlICE9IGJvYXJkX3R5cGUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJib2FyZCB0eXBlIG1pc21hdGNoLCByZXF1ZXN0ZWQgJXUsIGdvdCAldVxuIiwKKwkJCSAgIGJvYXJkX3R5cGUsIGZ3ZS0+Ym9hcmRfdHlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmd2UtPmZ3X3ZlcnNpb24ubWFqb3IgPSBmd2gtPm1ham9yOworCWZ3ZS0+ZndfdmVyc2lvbi5taW5vciA9IGZ3aC0+bWlub3I7CisJZndlLT5md192ZXJzaW9uLnBhdGNoID0gZndoLT5wYXRjaDsKKwlmd2UtPmZ3X3ZlcnNpb24uYnVpbGQgPSBmd2gtPmJ1aWxkOworCisJc3RyID0gKGNoYXIgKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPnN0cl9vZmZzZXQpOworCWZ3ZS0+aW50ZncgPSAodTggKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPmludF9md19vZmZzZXQpOworCWZ3ZS0+aW50Zndfc2l6ZSA9IGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbik7CisJZndlLT5leHRmdyA9ICh1OCAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X29mZnNldCk7CisJZndlLT5leHRmd19zaXplID0gbGUzMl90b19jcHUoZndoLT5leHRfZndfbGVuKTsKKworCWZ3ZS0+bG9hZGVkID0gMTsKKworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnVkZXYtPmRldiwKKwkJICAgInVzaW5nIGZpcm13YXJlICVzICh2ZXJzaW9uICVkLiVkLiVkLSVkKVxuIiwKKwkJICAgZndlLT5md25hbWUsIGZ3aC0+bWFqb3IsIGZ3aC0+bWlub3IsIGZ3aC0+cGF0Y2gsIGZ3aC0+YnVpbGQpOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiYm9hcmQgJXUsIGludCAlZDolZCwgZXh0ICVkOiVkIiwgYm9hcmRfdHlwZSwKKwkJIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X29mZnNldCksIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbiksCisJCSBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19vZmZzZXQpLCBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19sZW4pKTsKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJmaXJtd2FyZSBpZCAlcyIsIHN0cik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZmd19tdXRleCk7CisKKwlpZiAoZndlLT5sb2FkZWQpCisJCXJldHVybiBmd2U7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9tYWM4MDIxMV90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHByaXYtPnR4X3NrYik7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCQkvKiBmYWlsLCB1cmIgaGFzIGJlZW4gdW5saW5rZWQgKi8KKwkJLyogRklYTUU6IGFkZCBlcnJvciBtZXNzYWdlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF0NzZfZGJnKERCR19VUkIsICIlcyAtIG5vbnplcm8gdHggc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgcHJpdi0+dHhfc2tiKTsKKworCXByaXYtPnR4X3NrYiA9IE5VTEw7CisKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworfQorCitzdGF0aWMgaW50IGF0NzZfbWFjODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqdHhfYnVmZmVyID0gcHJpdi0+YnVsa19vdXRfYnVmZmVyOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbnQgcGFkZGluZywgc3VibWl0X2xlbiwgcmV0OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCWlmIChwcml2LT50eF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgY2FsbGVkIHdoaWxlIHR4IHVyYiBpcyBwZW5kaW5nXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KCk7CS8qIHRlbGwgbGVkdHJpZ2dlciB3ZSBzZW5kIGEgcGFja2V0ICovCisKKwlXQVJOX09OKHByaXYtPnR4X3NrYiAhPSBOVUxMKTsKKworCXByaXYtPnR4X3NrYiA9IHNrYjsKKwlwYWRkaW5nID0gYXQ3Nl9jYWxjX3BhZGRpbmcoc2tiLT5sZW4pOworCXN1Ym1pdF9sZW4gPSBBVDc2X1RYX0hEUkxFTiArIHNrYi0+bGVuICsgcGFkZGluZzsKKworCS8qIHNldHVwICdBdG1lbCcgaGVhZGVyICovCisJbWVtc2V0KHR4X2J1ZmZlciwgMCwgc2l6ZW9mKCp0eF9idWZmZXIpKTsKKwl0eF9idWZmZXItPnBhZGRpbmcgPSBwYWRkaW5nOworCXR4X2J1ZmZlci0+d2xlbmd0aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKwl0eF9idWZmZXItPnR4X3JhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIGluZm8pLT5od192YWx1ZTsKKwltZW1zZXQodHhfYnVmZmVyLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHR4X2J1ZmZlci0+cmVzZXJ2ZWQpKTsKKwltZW1jcHkodHhfYnVmZmVyLT5wYWNrZXQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJYXQ3Nl9kYmcoREJHX1RYX0RBVEEsICIlcyB0eDogd2xlbiAweCV4IHBhZCAweCV4IHJhdGUgJWQgaGRyIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUxNl90b19jcHUodHhfYnVmZmVyLT53bGVuZ3RoKSwKKwkJIHR4X2J1ZmZlci0+cGFkZGluZywgdHhfYnVmZmVyLT50eF9yYXRlKTsKKworCS8qIHNlbmQgc3R1ZmYgKi8KKwlhdDc2X2RiZ19kdW1wKERCR19UWF9EQVRBX0NPTlRFTlQsIHR4X2J1ZmZlciwgc3VibWl0X2xlbiwKKwkJICAgICAgIiVzKCk6IHR4X2J1ZmZlciAlZCBieXRlczoiLCBfX2Z1bmNfXywgc3VibWl0X2xlbik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+dHhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT50eF9waXBlLCB0eF9idWZmZXIsCisJCQkgIHN1Ym1pdF9sZW4sIGF0NzZfbWFjODAyMTFfdHhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiB0eCBzdWJtaXQgdXJiOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJaWYgKHJldCA9PSAtRUlOVkFMKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiAtRUlOVkFMOiB0eCB1cmIgJXAgaGNwcml2ICVwIGNvbXBsZXRlICVwXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcHJpdi0+dHhfdXJiLAorCQkJICAgICAgIHByaXYtPnR4X3VyYi0+aGNwcml2LCBwcml2LT50eF91cmItPmNvbXBsZXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X21hYzgwMjExX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlyZXQgPSBhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Blbjogc3VibWl0X3J4X3VyYiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCWF0NzZfc3RhcnR1cF9kZXZpY2UocHJpdik7CisKKwlhdDc2X3N0YXJ0X21vbml0b3IocHJpdik7CisKK2Vycm9yOgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdDc2X21hYzgwMjExX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlpZiAoIXByaXYtPmRldmljZV91bnBsdWdnZWQpIHsKKwkJLyogV2UgYXJlIGNhbGxlZCBieSAiaWZjb25maWcgZXRoWCBkb3duIiwgbm90IGJlY2F1c2UgdGhlCisJCSAqIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuICovCisJCWF0NzZfc2V0X3JhZGlvKHByaXYsIDApOworCisJCS8qIFdlIHVubGluayByeF91cmIgYmVjYXVzZSBhdDc2X29wZW4oKSByZS1zdWJtaXRzIGl0LgorCQkgKiBJZiB1bnBsdWdnZWQsIGF0NzZfZGVsZXRlX2RldmljZSgpIHRha2VzIGNhcmUgb2YgaXQuICovCisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworc3RhdGljIGludCBhdDc2X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9qb2luKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfcmVxX2pvaW4gam9pbjsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZqb2luLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKKwltZW1jcHkoam9pbi5lc3NpZCwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX3NpemUpOworCWpvaW4uZXNzaWRfc2l6ZSA9IHByaXYtPmVzc2lkX3NpemU7CisJbWVtY3B5KGpvaW4uYnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJam9pbi5ic3NfdHlwZSA9IElORlJBU1RSVUNUVVJFX01PREU7CisJam9pbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwlqb2luLnRpbWVvdXQgPSBjcHVfdG9fbGUxNigyMDAwKTsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBzZW5kaW5nIENNRF9KT0lOIiwgX19mdW5jX18pOworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfSk9JTiwgJmpvaW4sCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfam9pbikpOworCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9KT0lOKTsKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogQ01EX0pPSU4gcmV0dXJuZWQ6IDB4JTAyeCIsIF9fZnVuY19fLCByZXQpOworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfaHdfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19od19zY2FuLndvcmspOworCWludCByZXQ7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXJldCA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgQ01EX1NDQU4pOworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBDTURfU0NBTiBzdGF0dXMgMHglMDJ4IiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBGSVhNRTogYWRkIG1heGltdW0gdGltZSBmb3Igc2NhbiB0byBjb21wbGV0ZSAqLworCisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKKwkJCQkgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCBmYWxzZSk7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5ic3NpZCkpCisJCWF0NzZfam9pbihwcml2KTsKKworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgaW50IGF0NzZfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGF0NzZfcmVxX3NjYW4gc2NhbjsKKwl1OCAqc3NpZCA9IE5VTEw7CisJaW50IHJldCwgbGVuID0gMDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IiwgX19mdW5jX18pOworCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbikpOworCW1lbXNldChzY2FuLmJzc2lkLCAweEZGLCBFVEhfQUxFTik7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNjYW4uc2Nhbl90eXBlID0gU0NBTl9UWVBFX0FDVElWRTsKKwkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKKwkJbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9IGVsc2UgeworCQlzY2FuLnNjYW5fdHlwZSA9IFNDQU5fVFlQRV9QQVNTSVZFOworCX0KKworCWlmIChsZW4pIHsKKwkJbWVtY3B5KHNjYW4uZXNzaWQsIHNzaWQsIGxlbik7CisJCXNjYW4uZXNzaWRfc2l6ZSA9IGxlbjsKKwl9CisKKwlzY2FuLm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21pbl90aW1lKTsKKwlzY2FuLm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21heF90aW1lKTsKKwlzY2FuLnByb2JlX2RlbGF5ID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9taW5fdGltZSAqIDEwMDApOworCXNjYW4uaW50ZXJuYXRpb25hbF9zY2FuID0gMDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBzZW5kaW5nIENNRF9TQ0FOIiwgX19mdW5jX18pOworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0NBTiwgJnNjYW4sIHNpemVvZihzY2FuKSk7CisKKwlpZiAocmV0IDwgMCkgeworCQllcnIoIkNNRF9TQ0FOIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5kd29ya19od19zY2FuLAorCQkJICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbm5lbCAlZCByYWRpbyAlZCIsCisJCSBfX2Z1bmNfXywgaHctPmNvbmYuY2hhbm5lbC0+aHdfdmFsdWUsCisJCSBody0+Y29uZi5yYWRpb19lbmFibGVkKTsKKwlhdDc2X2RiZ19kdW1wKERCR19NQUM4MDIxMSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOLCAiYnNzaWQ6Iik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcHJpdi0+Y2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpKQorCQlhdDc2X2pvaW4ocHJpdik7CisJZWxzZQorCQlhdDc2X3N0YXJ0X21vbml0b3IocHJpdik7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiIsIF9fZnVuY19fKTsKKwlhdDc2X2RiZ19kdW1wKERCR19NQUM4MDIxMSwgY29uZi0+YnNzaWQsIEVUSF9BTEVOLCAiYnNzaWQ6Iik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJbWVtY3B5KHByaXYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpKQorCQkvKiBtYWM4MDIxMSBpcyBqb2luaW5nIGEgYnNzICovCisJCWF0NzZfam9pbihwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCisvKiBtdXN0IGJlIGF0b21pYyAqLworc3RhdGljIHZvaWQgYXQ3Nl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLCBpbnQgbWNfY291bnQsCisJCQkJICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGZsYWdzOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbmdlZF9mbGFncz0weCUwOHggIgorCQkgInRvdGFsX2ZsYWdzPTB4JTA4eCBtY19jb3VudD0lZCIsCisJCSBfX2Z1bmNfXywgY2hhbmdlZF9mbGFncywgKnRvdGFsX2ZsYWdzLCBtY19jb3VudCk7CisKKwlmbGFncyA9IGNoYW5nZWRfZmxhZ3MgJiBBVDc2X1NVUFBPUlRFRF9GSUxURVJTOworCSp0b3RhbF9mbGFncyA9IEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlM7CisKKwkvKiBCYWlsIG91dCBhZnRlciB1cGRhdGluZyBmbGFncyB0byBwcmV2ZW50IGEgV0FSTl9PTiBpbiBtYWM4MDIxMS4gKi8KKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJLyogRklYTUU6IGFjY2VzcyB0byBwcml2LT5wcm9taXNjIHNob3VsZCBiZSBwcm90ZWN0ZWQgd2l0aAorCSAqIHByaXYtPm10eCwgYnV0IGl0J3MgaW1wb3NzaWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKwkgKiBhdG9taWMgKi8KKworCWlmIChmbGFncyAmJiAhcHJpdi0+cHJvbWlzYykgeworCQkvKiBtYWM4MDIxMSB3YW50cyB1cyB0byBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworCQlwcml2LT5wcm9taXNjID0gMTsKKwl9IGVsc2UgaWYgKCFmbGFncyAmJiBwcml2LT5wcm9taXNjKSB7CisJCS8qIHdlIG5lZWQgdG8gZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCisJCXByaXYtPnByb21pc2MgPSAwOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlxdWV1ZV93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT53b3JrX3NldF9wcm9taXNjKTsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpbnQgaTsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IGNtZCAlZCBrZXktPmFsZyAlZCBrZXktPmtleWlkeCAlZCAiCisJCSAia2V5LT5rZXlsZW4gJWQiLAorCQkgX19mdW5jX18sIGNtZCwga2V5LT5hbGcsIGtleS0+a2V5aWR4LCBrZXktPmtleWxlbik7CisKKwlpZiAoa2V5LT5hbGcgIT0gQUxHX1dFUCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJa2V5LT5od19rZXlfaWR4ID0ga2V5LT5rZXlpZHg7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNFVF9LRVk6CisJCW1lbWNweShwcml2LT53ZXBfa2V5c1trZXktPmtleWlkeF0sIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJCXByaXYtPndlcF9rZXlzX2xlbltrZXktPmtleWlkeF0gPSBrZXktPmtleWxlbjsKKworCQkvKiBGSVhNRTogZmluZCBvdXQgaG93IHRvIGRvIHRoaXMgcHJvcGVybHkgKi8KKwkJcHJpdi0+d2VwX2tleV9pZCA9IGtleS0+a2V5aWR4OworCisJCWJyZWFrOworCWNhc2UgRElTQUJMRV9LRVk6CisJZGVmYXVsdDoKKwkJcHJpdi0+d2VwX2tleXNfbGVuW2tleS0+a2V5aWR4XSA9IDA7CisJCWJyZWFrOworCX0KKworCXByaXYtPndlcF9lbmFibGVkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CisJCWlmIChwcml2LT53ZXBfa2V5c19sZW5baV0gIT0gMCkKKwkJCXByaXYtPndlcF9lbmFibGVkID0gMTsKKwl9CisKKwlhdDc2X3N0YXJ0dXBfZGV2aWNlKHByaXYpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdDc2X29wcyA9IHsKKwkudHggPSBhdDc2X21hYzgwMjExX3R4LAorCS5hZGRfaW50ZXJmYWNlID0gYXQ3Nl9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gYXQ3Nl9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcgPSBhdDc2X2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZSA9IGF0NzZfY29uZmlnX2ludGVyZmFjZSwKKwkuY29uZmlndXJlX2ZpbHRlciA9IGF0NzZfY29uZmlndXJlX2ZpbHRlciwKKwkuc3RhcnQgPSBhdDc2X21hYzgwMjExX3N0YXJ0LAorCS5zdG9wID0gYXQ3Nl9tYWM4MDIxMV9zdG9wLAorCS5od19zY2FuID0gYXQ3Nl9od19zY2FuLAorCS5zZXRfa2V5ID0gYXQ3Nl9zZXRfa2V5LAorfTsKKworLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCitzdGF0aWMgc3RydWN0IGF0NzZfcHJpdiAqYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0NzZfcHJpdiksICZhdDc2X29wcyk7CisJaWYgKCFodykgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogY291bGQgbm90IHJlZ2lzdGVyIgorCQkgICAgICAgIiBpZWVlODAyMTFfaHdcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwcml2ID0gaHctPnByaXY7CisJcHJpdi0+aHcgPSBodzsKKworCXByaXYtPnVkZXYgPSB1ZGV2OworCisJbXV0ZXhfaW5pdCgmcHJpdi0+bXR4KTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfc2V0X3Byb21pc2MsIGF0NzZfd29ya19zZXRfcHJvbWlzYyk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX3N1Ym1pdF9yeCwgYXQ3Nl93b3JrX3N1Ym1pdF9yeCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX2h3X3NjYW4sIGF0NzZfZHdvcmtfaHdfc2Nhbik7CisKKwl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIGF0NzZfcnhfdGFza2xldCwgMCk7CisKKwlwcml2LT5wbV9tb2RlID0gQVQ3Nl9QTV9PRkY7CisJcHJpdi0+cG1fcGVyaW9kID0gMDsKKworCS8qIHVuaXQgdXMgKi8KKwlwcml2LT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDAwMDsKKworCXJldHVybiBwcml2OworfQorCitzdGF0aWMgaW50IGF0NzZfYWxsb2NfdXJicyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50LCAqZXBfaW4sICplcF9vdXQ7CisJaW50IGk7CisJaW50IGJ1ZmZlcl9zaXplOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCWF0NzZfZGJnKERCR19VUkIsICIlczogTnVtRW5kcG9pbnRzICVkICIsIF9fZnVuY19fLAorCQkgaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwllcF9pbiA9IE5VTEw7CisJZXBfb3V0ID0gTlVMTDsKKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlhdDc2X2RiZyhEQkdfVVJCLCAiJXM6ICVkLiBlbmRwb2ludDogYWRkciAweCV4IGF0dHIgMHgleCIsCisJCQkgX19mdW5jX18sIGksIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzLAorCQkJIGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOworCisJCWlmICghZXBfaW4gJiYgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKQorCQkJZXBfaW4gPSBlbmRwb2ludDsKKworCQlpZiAoIWVwX291dCAmJiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKQorCQkJZXBfb3V0ID0gZW5kcG9pbnQ7CisJfQorCisJaWYgKCFlcF9pbiB8fCAhZXBfb3V0KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJidWxrIGVuZHBvaW50cyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwcml2LT5yeF9waXBlID0gdXNiX3JjdmJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX2luLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlwcml2LT50eF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX291dC0+YkVuZHBvaW50QWRkcmVzcyk7CisKKwlwcml2LT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCXByaXYtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5yeF91cmIgfHwgIXByaXYtPnR4X3VyYikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgVVJCXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmZmVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyKSArIE1BWF9QQURESU5HX1NJWkU7CisJcHJpdi0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5idWxrX291dF9idWZmZXIpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0NzZfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IFRYX1JBVEVfMU1CSVQsIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSBUWF9SQVRFXzJNQklULCB9LAorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gVFhfUkFURV81XzVNQklULCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IFRYX1JBVEVfMTFNQklULCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdDc2X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQgfQorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYXQ3Nl9zdXBwb3J0ZWRfYmFuZCA9IHsKKwkuY2hhbm5lbHMgPSBhdDc2X2NoYW5uZWxzLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShhdDc2X2NoYW5uZWxzKSwKKwkuYml0cmF0ZXMgPSBhdDc2X3JhdGVzLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShhdDc2X3JhdGVzKSwKK307CisKKy8qIFJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlIGFuZCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSAqLworc3RhdGljIGludCBhdDc2X2luaXRfbmV3X2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJaW50IHJldDsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyAqLworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiVVNCIGludGVyZmFjZTogJWQgZW5kcG9pbnRzIiwKKwkJIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwlyZXQgPSBhdDc2X2FsbG9jX3VyYnMocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBleGl0OworCisJLyogTUFDIGFkZHJlc3MgKi8KKwlyZXQgPSBhdDc2X2dldF9od19jb25maWcocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBnZXQgTUFDIGFkZHJlc3NcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+ZG9tYWluID0gYXQ3Nl9nZXRfcmVnX2RvbWFpbihwcml2LT5yZWd1bGF0b3J5X2RvbWFpbik7CisKKwlwcml2LT5jaGFubmVsID0gREVGX0NIQU5ORUw7CisJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJcHJpdi0+cnRzX3RocmVzaG9sZCA9IERFRl9SVFNfVEhSRVNIT0xEOworCXByaXYtPmZyYWdfdGhyZXNob2xkID0gREVGX0ZSQUdfVEhSRVNIT0xEOworCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gREVGX1NIT1JUX1JFVFJZX0xJTUlUOworCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfQVVUTzsKKwlwcml2LT5wcmVhbWJsZV90eXBlID0gUFJFQU1CTEVfVFlQRV9MT05HOworCXByaXYtPmJlYWNvbl9wZXJpb2QgPSAxMDA7CisJcHJpdi0+YXV0aF9tb2RlID0gV0xBTl9BVVRIX09QRU47CisJcHJpdi0+c2Nhbl9taW5fdGltZSA9IERFRl9TQ0FOX01JTl9USU1FOworCXByaXYtPnNjYW5fbWF4X3RpbWUgPSBERUZfU0NBTl9NQVhfVElNRTsKKwlwcml2LT5zY2FuX21vZGUgPSBTQ0FOX1RZUEVfQUNUSVZFOworCXByaXYtPmRldmljZV91bnBsdWdnZWQgPSAwOworCisJLyogbWFjODAyMTEgaW5pdGlhbGlzYXRpb24gKi8KKwlwcml2LT5ody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwlwcml2LT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmF0NzZfc3VwcG9ydGVkX2JhbmQ7CisJcHJpdi0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CisJCQkgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOworCXByaXYtPmh3LT5tYXhfc2lnbmFsID0gMTAwOworCisJU0VUX0lFRUU4MDIxMV9ERVYocHJpdi0+aHcsICZpbnRlcmZhY2UtPmRldik7CisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIocHJpdi0+aHcsIHByaXYtPm1hY19hZGRyKTsKKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCByZWdpc3RlciBtYWM4MDIxMSBodyAoc3RhdHVzICVkKSFcbiIsCisJCSAgICAgICByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogVVNCICVzLCBNQUMgJXMsIGZpcm13YXJlICVkLiVkLiVkLSVkXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJICAgICAgIGRldl9uYW1lKCZpbnRlcmZhY2UtPmRldiksIG1hYzJzdHIocHJpdi0+bWFjX2FkZHIpLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLm1ham9yLCBwcml2LT5md192ZXJzaW9uLm1pbm9yLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLnBhdGNoLCBwcml2LT5md192ZXJzaW9uLmJ1aWxkKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVndWxhdG9yeSBkb21haW4gMHglMDJ4OiAlc1xuIiwKKwkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCSAgICAgICBwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiwgcHJpdi0+ZG9tYWluLT5uYW1lKTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCS8qIFRoZSBkZXZpY2UgaXMgZ29uZSwgZG9uJ3QgYm90aGVyIHR1cm5pbmcgaXQgb2ZmICovCisJcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCA9IDE7CisKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOworCisJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfaHdfc2Nhbik7CisJCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsKKwkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCX0KKworCWlmIChwcml2LT50eF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHByaXYtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwcml2LT50eF91cmIpOworCX0KKwlpZiAocHJpdi0+cnhfdXJiKSB7CisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIocHJpdi0+cnhfdXJiKTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiB1bmxpbmtlZCB1cmJzIiwgX19mdW5jX18pOworCisJa2ZyZWUocHJpdi0+YnVsa19vdXRfYnVmZmVyKTsKKworCWRlbF90aW1lcl9zeW5jKCZsZWR0cmlnX3R4X3RpbWVyKTsKKworCWlmIChwcml2LT5yeF9za2IpCisJCWtmcmVlX3NrYihwcml2LT5yeF9za2IpOworCisJdXNiX3B1dF9kZXYocHJpdi0+dWRldik7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBiZWZvcmUgZnJlZWluZyBwcml2L2llZWU4MDIxMV9odyIsCisJCSBfX2Z1bmNfXyk7CisJaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGludCBhdDc2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisJc3RydWN0IGZ3ZW50cnkgKmZ3ZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlpbnQgb3BfbW9kZTsKKwlpbnQgbmVlZF9leHRfZncgPSAwOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd3Y7CisJaW50IGJvYXJkX3R5cGUgPSAoaW50KWlkLT5kcml2ZXJfaW5mbzsKKworCXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCisJLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgKi8KKwlmd2UgPSBhdDc2X2xvYWRfZmlybXdhcmUodWRldiwgYm9hcmRfdHlwZSk7CisJaWYgKCFmd2UpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlvcF9tb2RlID0gYXQ3Nl9nZXRfb3BfbW9kZSh1ZGV2KTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIm9wbW9kZSAlZCIsIG9wX21vZGUpOworCisJLyogd2UgZ2V0IE9QTU9ERV9OT05FIHdpdGggMi40LjIzLCBTTUMyNjYyVy1BUiA/Pz8KKwkgICB3ZSBnZXQgMjA0IHdpdGggMi40LjIzLCBGaWJlcmxpbmUgRkwtV0wyNDB1ICg1MDVBK1JGTUQyOTU4KSA/Pz8gKi8KKworCWlmIChvcF9tb2RlID09IE9QTU9ERV9IV19DT05GSUdfTU9ERSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGhhbmRsZSBhIGRldmljZSBpbiBIV19DT05GSUdfTU9ERVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNICisJICAgICYmIG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSCkgeworCQkvKiBkb3dubG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBwYXJ0ICovCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iKTsKKwkJcmV0ID0gYXQ3Nl9sb2FkX2ludGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iLAorCQkJCSAgIHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJCXVzYl9wdXRfZGV2KHVkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEludGVybmFsIGZpcm13YXJlIGFscmVhZHkgaW5zaWRlIHRoZSBkZXZpY2UuICBHZXQgZmlybXdhcmUKKwkgKiB2ZXJzaW9uIHRvIHRlc3QgaWYgZXh0ZXJuYWwgZmlybXdhcmUgaXMgbG9hZGVkLgorCSAqIFRoaXMgd29ya3Mgb25seSBmb3IgbmV3ZXIgZmlybXdhcmUsIGUuZy4gdGhlIEludGVyc2lsIDAuOTAueAorCSAqIHNheXMgImNvbnRyb2wgdGltZW91dCBvbiBlcDBpbiIgYW5kIHN1YnNlcXVlbnQKKwkgKiBhdDc2X2dldF9vcF9tb2RlKCkgZmFpbCB0b28gOi0oICovCisKKwkvKiBpZiB2ZXJzaW9uID49IDAuMTAwLngueSBvciBkZXZpY2Ugd2l0aCBidWlsdC1pbiBmbGFzaCB3ZSBjYW4KKwkgKiBxdWVyeSB0aGUgZGV2aWNlIGZvciB0aGUgZncgdmVyc2lvbiAqLworCWlmICgoZndlLT5md192ZXJzaW9uLm1ham9yID4gMCB8fCBmd2UtPmZ3X3ZlcnNpb24ubWlub3IgPj0gMTAwKQorCSAgICB8fCAob3BfbW9kZSA9PSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNIKSkgeworCQlyZXQgPSBhdDc2X2dldF9taWIodWRldiwgTUlCX0ZXX1ZFUlNJT04sICZmd3YsIHNpemVvZihmd3YpKTsKKwkJaWYgKHJldCA8IDAgfHwgKGZ3di5tYWpvciB8IGZ3di5taW5vcikgPT0gMCkKKwkJCW5lZWRfZXh0X2Z3ID0gMTsKKwl9IGVsc2UKKwkJLyogTm8gd2F5IHRvIGNoZWNrIGZpcm13YXJlIHZlcnNpb24sIHJlbG9hZCB0byBiZSBzdXJlICovCisJCW5lZWRfZXh0X2Z3ID0gMTsKKworCWlmIChuZWVkX2V4dF9mdykgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZVxuIik7CisKKwkJcmV0ID0gYXQ3Nl9sb2FkX2V4dGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJCS8qIFJlLWNoZWNrIGZpcm13YXJlIHZlcnNpb24gKi8KKwkJcmV0ID0gYXQ3Nl9nZXRfbWliKHVkZXYsIE1JQl9GV19WRVJTSU9OLCAmZnd2LCBzaXplb2YoZnd2KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGdldHRpbmcgZmlybXdhcmUgdmVyc2lvblxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlwcml2ID0gYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHVkZXYpOworCWlmICghcHJpdikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBwcml2KTsKKworCW1lbWNweSgmcHJpdi0+ZndfdmVyc2lvbiwgJmZ3diwgc2l6ZW9mKHN0cnVjdCBtaWJfZndfdmVyc2lvbikpOworCXByaXYtPmJvYXJkX3R5cGUgPSBib2FyZF90eXBlOworCisJcmV0ID0gYXQ3Nl9pbml0X25ld19kZXZpY2UocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJYXQ3Nl9kZWxldGVfZGV2aWNlKHByaXYpOworCisJcmV0dXJuIHJldDsKKworZXJyb3I6CisJdXNiX3B1dF9kZXYodWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJLyogRGlzY29ubmVjdCBhZnRlciBsb2FkaW5nIGludGVybmFsIGZpcm13YXJlICovCisJaWYgKCFwcml2KQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogZGlzY29ubmVjdGluZ1xuIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwlhdDc2X2RlbGV0ZV9kZXZpY2UocHJpdik7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZpbnRlcmZhY2UtPmRldiwgImRpc2Nvbm5lY3RlZFxuIik7Cit9CisKKy8qIFN0cnVjdHVyZSBmb3IgcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0NzZfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLnByb2JlID0gYXQ3Nl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGF0NzZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkZXZfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDc2X21vZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgbG9hZGluZ1xuIik7CisKKwltdXRleF9pbml0KCZmd19tdXRleCk7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhdDc2X2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkgICAgICAgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCAoc3RhdHVzICVkKVxuIiwgcmVzdWx0KTsKKworCWxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSgiYXQ3Nl91c2ItdHgiLCAmbGVkdHJpZ190eCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0NzZfbW9kX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgdW5sb2FkaW5nXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmYXQ3Nl9kcml2ZXIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZpcm13YXJlcyk7IGkrKykgeworCQlpZiAoZmlybXdhcmVzW2ldLmZ3KQorCQkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZXNbaV0uZncpOworCX0KKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShsZWR0cmlnX3R4KTsKK30KKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdDc2X2RlYnVnLCB1aW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbGV2ZWwiKTsKKworbW9kdWxlX2luaXQoYXQ3Nl9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChhdDc2X21vZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiT2xpdmVyIEt1cnRoIDxva3VAbWFzcW1haWwuY3g+Iik7CitNT0RVTEVfQVVUSE9SKCJKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJBbGV4IDxhbGV4QGZvb2dvZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJOaWNrIEpvbmVzIik7CitNT0RVTEVfQVVUSE9SKCJCYWxpbnQgU2VlYmVyIDxuMF81cDRtX3AxMzQ1M0Bob3RtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPiIpOworTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWM1Y2NmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmgKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBPbGl2ZXIgS3VydGgKKyAqCSAgICAgKGMpIDIwMDMsMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKgkgICAgIChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgU291cmNlZm9yZ2UgZHJpdmVyCisgKiByZWxlYXNlZCBhbmQgbWFpbnRhaW5lZCBieSBBdG1lbDoKKyAqCisgKiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hdG1lbHdsYW5kcml2ZXIvCisgKgorICogQWx0aG91Z2ggdGhlIGNvZGUgd2FzIGNvbXBsZXRlbHkgcmUtd3JpdHRlbiwKKyAqIGl0IHdvdWxkIGhhdmUgYmVlbiBpbXBvc3NpYmxlIHdpdGhvdXQgQXRtZWwncyBkZWNpc2lvbiB0bworICogcmVsZWFzZSBhbiBPcGVuIFNvdXJjZSBkcml2ZXIgKHVuZm9ydHVuYXRlbHkgdGhlIGZpcm13YXJlIHdhcworICoga2VwdCBiaW5hcnkgb25seSkuIFRoYW5rcyBmb3IgdGhhdCBkZWNpc2lvbiB0byBBdG1lbCEKKyAqLworCisjaWZuZGVmIF9BVDc2X1VTQl9ICisjZGVmaW5lIF9BVDc2X1VTQl9ICisKKy8qIEJvYXJkIHR5cGVzICovCitlbnVtIGJvYXJkX3R5cGUgeworCUJPQVJEXzUwM19JU0wzODYxID0gMSwKKwlCT0FSRF81MDNfSVNMMzg2MyA9IDIsCisJQk9BUkRfNTAzID0gMywKKwlCT0FSRF81MDNfQUNDID0gNCwKKwlCT0FSRF81MDUgPSA1LAorCUJPQVJEXzUwNV8yOTU4ID0gNiwKKwlCT0FSRF81MDVBID0gNywKKwlCT0FSRF81MDVBTVggPSA4Cit9OworCisjZGVmaW5lIENNRF9TVEFUVVNfSURMRQkJCQkweDAwCisjZGVmaW5lIENNRF9TVEFUVVNfQ09NUExFVEUJCQkweDAxCisjZGVmaW5lIENNRF9TVEFUVVNfVU5LTk9XTgkJCTB4MDIKKyNkZWZpbmUgQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUgkJMHgwMworI2RlZmluZSBDTURfU1RBVFVTX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQJMHgwNAorI2RlZmluZSBDTURfU1RBVFVTX1RJTUVfT1VUCQkJMHgwNworI2RlZmluZSBDTURfU1RBVFVTX0lOX1BST0dSRVNTCQkJMHgwOAorI2RlZmluZSBDTURfU1RBVFVTX0hPU1RfRkFJTFVSRQkJCTB4ZmYKKyNkZWZpbmUgQ01EX1NUQVRVU19TQ0FOX0ZBSUxFRAkJCTB4ZjAKKworLyogYW5zd2VycyB0byBnZXQgb3AgbW9kZSAqLworI2RlZmluZSBPUE1PREVfTk9ORQkJCQkweDAwCisjZGVmaW5lIE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gJCTB4MDEKKyNkZWZpbmUgT1BNT0RFX0hXX0NPTkZJR19NT0RFCQkJMHgwMgorI2RlZmluZSBPUE1PREVfREZVX01PREVfV0lUSF9GTEFTSAkJMHgwMworI2RlZmluZSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNICQkweDA0CisKKyNkZWZpbmUgQ01EX1NFVF9NSUIJCTB4MDEKKyNkZWZpbmUgQ01EX0dFVF9NSUIJCTB4MDIKKyNkZWZpbmUgQ01EX1NDQU4JCTB4MDMKKyNkZWZpbmUgQ01EX0pPSU4JCTB4MDQKKyNkZWZpbmUgQ01EX1NUQVJUX0lCU1MJCTB4MDUKKyNkZWZpbmUgQ01EX1JBRElPX09OCQkweDA2CisjZGVmaW5lIENNRF9SQURJT19PRkYJCTB4MDcKKyNkZWZpbmUgQ01EX1NUQVJUVVAJCTB4MEIKKworI2RlZmluZSBNSUJfTE9DQUwJCTB4MDEKKyNkZWZpbmUgTUlCX01BQ19BRERSCQkweDAyCisjZGVmaW5lIE1JQl9NQUMJCQkweDAzCisjZGVmaW5lIE1JQl9NQUNfTUdNVAkJMHgwNQorI2RlZmluZSBNSUJfTUFDX1dFUAkJMHgwNgorI2RlZmluZSBNSUJfUEhZCQkJMHgwNworI2RlZmluZSBNSUJfRldfVkVSU0lPTgkJMHgwOAorI2RlZmluZSBNSUJfTURPTUFJTgkJMHgwOQorCisjZGVmaW5lIEFESE9DX01PREUJCTEKKyNkZWZpbmUgSU5GUkFTVFJVQ1RVUkVfTU9ERQkyCisKKy8qIHZhbHVlcyBmb3Igc3RydWN0IG1pYl9sb2NhbCwgZmllbGQgcHJlYW1ibGVfdHlwZSAqLworI2RlZmluZSBQUkVBTUJMRV9UWVBFX0xPTkcJMAorI2RlZmluZSBQUkVBTUJMRV9UWVBFX1NIT1JUCTEKKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9BVVRPCTIKKworLyogdmFsdWVzIGZvciB0eF9yYXRlICovCisjZGVmaW5lIFRYX1JBVEVfMU1CSVQJCTAKKyNkZWZpbmUgVFhfUkFURV8yTUJJVAkJMQorI2RlZmluZSBUWF9SQVRFXzVfNU1CSVQgCTIKKyNkZWZpbmUgVFhfUkFURV8xMU1CSVQJCTMKKyNkZWZpbmUgVFhfUkFURV9BVVRPCQk0CisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZXMgKi8KKyNkZWZpbmUgQVQ3Nl9QTV9PRkYJCTEKKyNkZWZpbmUgQVQ3Nl9QTV9PTgkJMgorI2RlZmluZSBBVDc2X1BNX1NNQVJUCQkzCisKK3N0cnVjdCBod2NmZ19yNTA1IHsKKwl1OCBjcjM5X3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQxWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZDJbMTRdOworCXU4IGNyMTVfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDNbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfcmZtZCB7CisJdTggY3IyMF92YWx1ZXNbMTRdOworCXU4IGNyMjFfdmFsdWVzWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCBsb3dfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCBub3JtYWxfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDFbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfaW50ZXJzaWwgeworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBjcjMxX3ZhbHVlc1sxNF07CisJdTggY3I1OF92YWx1ZXNbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZFsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGF0NzZfaHdjZmcgeworCXN0cnVjdCBod2NmZ19pbnRlcnNpbCBpOworCXN0cnVjdCBod2NmZ19yZm1kIHIzOworCXN0cnVjdCBod2NmZ19yNTA1IHI1OworfTsKKworI2RlZmluZSBXRVBfU01BTExfS0VZX0xFTgkoNDAgLyA4KQorI2RlZmluZSBXRVBfTEFSR0VfS0VZX0xFTgkoMTA0IC8gOCkKKyNkZWZpbmUgV0VQX0tFWVMJCSg0KQorCitzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyB7CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwl1OCBwcm9taXNjdW91c19tb2RlOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGVuY3J5cHRpb25fdHlwZTsKKwlfX2xlMTYgcnRzX3RocmVzaG9sZDsKKwlfX2xlMTYgZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQ7CS8qIDI1Ni4uMjM0NiAqLworCXU4IGJhc2ljX3JhdGVfc2V0WzRdOworCXU4IGF1dG9fcmF0ZV9mYWxsYmFjazsJLyogMCwxICovCisJdTggY2hhbm5lbDsKKwl1OCBwcml2YWN5X2ludm9rZWQ7CisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOwkvKiAwLi4zICovCisJdTggY3VycmVudF9zc2lkWzMyXTsKKwl1OCB3ZXBfZGVmYXVsdF9rZXlfdmFsdWVbNF1bV0VQX0xBUkdFX0tFWV9MRU5dOworCXU4IHNzaWRfbGVuOworCXU4IHNob3J0X3ByZWFtYmxlOworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfY29tbWFuZCB7CisJdTggY21kOworCXU4IHJlc2VydmVkOworCV9fbGUxNiBzaXplOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9SWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfcnhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3J4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggcnhfcmF0ZTsKKwl1OCBuZXdic3M7CisJdTggZnJhZ21lbnRhdGlvbjsKKwl1OCByc3NpOworCXU4IGxpbmtfcXVhbGl0eTsKKwl1OCBub2lzZV9sZXZlbDsKKwlfX2xlMzIgcnhfdGltZTsKKwl1OCBwYWNrZXRbSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgVHggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9UWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3R4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggdHhfcmF0ZTsKKwl1OCBwYWRkaW5nOworCXU4IHJlc2VydmVkWzRdOworCXU4IHBhY2tldFtJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGRlZmluZXMgZm9yIHNjYW5fdHlwZSBiZWxvdyAqLworI2RlZmluZSBTQ0FOX1RZUEVfQUNUSVZFCTAKKyNkZWZpbmUgU0NBTl9UWVBFX1BBU1NJVkUJMQorCitzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBzY2FuX3R5cGU7CisJdTggY2hhbm5lbDsKKwlfX2xlMTYgcHJvYmVfZGVsYXk7CisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCBpbnRlcm5hdGlvbmFsX3NjYW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcyB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfam9pbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCV9fbGUxNiB0aW1lb3V0OworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgeworCXU4IHR5cGU7CisJdTggc2l6ZTsKKwl1OCBpbmRleDsKKwl1OCByZXNlcnZlZDsKKwl1bmlvbiB7CisJCXU4IGJ5dGU7CisJCV9fbGUxNiB3b3JkOworCQl1OCBhZGRyW0VUSF9BTEVOXTsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2xvY2FsIHsKKwl1MTYgcmVzZXJ2ZWQwOworCXU4IGJlYWNvbl9lbmFibGU7CisJdTggdHhhdXRvcmF0ZV9mYWxsYmFjazsKKwl1OCByZXNlcnZlZDE7CisJdTggc3NpZF9zaXplOworCXU4IHByb21pc2N1b3VzX21vZGU7CisJdTE2IHJlc2VydmVkMjsKKwl1OCBwcmVhbWJsZV90eXBlOworCXUxNiByZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY19hZGRyIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVzWzJdOwkJLyogPz8/ICovCisJdTggZ3JvdXBfYWRkcls0XVtFVEhfQUxFTl07CisJdTggZ3JvdXBfYWRkcl9zdGF0dXNbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hYyB7CisJX19sZTMyIG1heF90eF9tc2R1X2xpZmV0aW1lOworCV9fbGUzMiBtYXhfcnhfbGlmZXRpbWU7CisJX19sZTE2IGZyYWdfdGhyZXNob2xkOworCV9fbGUxNiBydHNfdGhyZXNob2xkOworCV9fbGUxNiBjd21pbjsKKwlfX2xlMTYgY3dtYXg7CisJdTggc2hvcnRfcmV0cnlfdGltZTsKKwl1OCBsb25nX3JldHJ5X3RpbWU7CisJdTggc2Nhbl90eXBlOwkJLyogYWN0aXZlIG9yIHBhc3NpdmUgKi8KKwl1OCBzY2FuX2NoYW5uZWw7CisJX19sZTE2IHByb2JlX2RlbGF5OwkvKiBkZWxheSBiZWZvcmUgUHJvYmVSZXEgaW4gYWN0aXZlIHNjYW4sIFJPICovCisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBkZXNpcmVkX3NzaWRbMzJdOworCXU4IGRlc2lyZWRfYnNzaWRbRVRIX0FMRU5dOworCXU4IGRlc2lyZWRfYnNzdHlwZTsJLyogYWQtaG9jIG9yIGluZnJhc3RydWN0dXJlICovCisJdTggcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfbWdtdCB7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CisJX19sZTE2IENGUF9tYXhfZHVyYXRpb247CisJX19sZTE2IG1lZGl1bV9vY2N1cGFuY3lfbGltaXQ7CisJX19sZTE2IHN0YXRpb25faWQ7CS8qIGFzc29jIGlkICovCisJX19sZTE2IEFUSU1fd2luZG93OworCXU4IENGUF9tb2RlOworCXU4IHByaXZhY3lfb3B0aW9uX2ltcGxlbWVudGVkOworCXU4IERUSU1fcGVyaW9kOworCXU4IENGUF9wZXJpb2Q7CisJdTggY3VycmVudF9ic3NpZFtFVEhfQUxFTl07CisJdTggY3VycmVudF9lc3NpZFszMl07CisJdTggY3VycmVudF9ic3NfdHlwZTsKKwl1OCBwb3dlcl9tZ210X21vZGU7CisJLyogcmZtZCBhbmQgNTA1ICovCisJdTggaWJzc19jaGFuZ2U7CisJdTggcmVzOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQ7CisJdTggY291bnRyeV9zdHJpbmdbM107CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY193ZXAgeworCXU4IHByaXZhY3lfaW52b2tlZDsJLyogMCBkaXNhYmxlIGVuY3IuLCAxIGVuYWJsZSBlbmNyICovCisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOworCXU4IHdlcF9rZXlfbWFwcGluZ19sZW47CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwlfX2xlMzIgd2VwX2ljdl9lcnJvcl9jb3VudDsKKwlfX2xlMzIgd2VwX2V4Y2x1ZGVkX2NvdW50OworCXU4IHdlcF9kZWZhdWx0X2tleXZhbHVlW1dFUF9LRVlTXVtXRVBfTEFSR0VfS0VZX0xFTl07CisJdTggZW5jcnlwdGlvbl9sZXZlbDsJLyogMSBmb3IgNDBiaXQsIDIgZm9yIDEwNGJpdCBlbmNyeXB0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX3BoeSB7CisJX19sZTMyIGVkX3RocmVzaG9sZDsKKworCV9fbGUxNiBzbG90X3RpbWU7CisJX19sZTE2IHNpZnNfdGltZTsKKwlfX2xlMTYgcHJlYW1ibGVfbGVuZ3RoOworCV9fbGUxNiBwbGNwX2hlYWRlcl9sZW5ndGg7CisJX19sZTE2IG1wZHVfbWF4X2xlbmd0aDsKKwlfX2xlMTYgY2NhX21vZGVfc3VwcG9ydGVkOworCisJdTggb3BlcmF0aW9uX3JhdGVfc2V0WzRdOworCXU4IGNoYW5uZWxfaWQ7CisJdTggY3VycmVudF9jY2FfbW9kZTsKKwl1OCBwaHlfdHlwZTsKKwl1OCBjdXJyZW50X3JlZ19kb21haW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24geworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXU4IHBhdGNoOworCXU4IGJ1aWxkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tZG9tYWluIHsKKwl1OCB0eF9wb3dlcmxldmVsWzE0XTsKKwl1OCBjaGFubmVsX2xpc3RbMTRdOwkvKiAwIGZvciBpbnZhbGlkIGNoYW5uZWxzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgeworCV9fbGUzMiBjcmM7CQkvKiBDUkMzMiBvZiB0aGUgd2hvbGUgaW1hZ2UgKi8KKwlfX2xlMzIgYm9hcmRfdHlwZTsJLyogZmlybXdhcmUgY29tcGF0aWJpbGl0eSBjb2RlICovCisJdTggYnVpbGQ7CQkvKiBmaXJtd2FyZSBidWlsZCBudW1iZXIgKi8KKwl1OCBwYXRjaDsJCS8qIGZpcm13YXJlIHBhdGNoIGxldmVsICovCisJdTggbWlub3I7CQkvKiBmaXJtd2FyZSBtaW5vciB2ZXJzaW9uICovCisJdTggbWFqb3I7CQkvKiBmaXJtd2FyZSBtYWpvciB2ZXJzaW9uICovCisJX19sZTMyIHN0cl9vZmZzZXQ7CS8qIG9mZnNldCBvZiB0aGUgY29weXJpZ2h0IHN0cmluZyAqLworCV9fbGUzMiBpbnRfZndfb2Zmc2V0OwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBvZmZzZXQgKi8KKwlfX2xlMzIgaW50X2Z3X2xlbjsJLyogaW50ZXJuYWwgZmlybXdhcmUgaW1hZ2UgbGVuZ3RoICovCisJX19sZTMyIGV4dF9md19vZmZzZXQ7CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIG9mZnNldCAqLworCV9fbGUzMiBleHRfZndfbGVuOwkvKiBleHRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGEgZGVzY3JpcHRpb24gb2YgYSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgdGhlIGFsbG93ZWQgY2hhbm5lbHMgKi8KK3N0cnVjdCByZWdfZG9tYWluIHsKKwl1MTYgY29kZTsKKwljaGFyIGNvbnN0ICpuYW1lOworCXUzMiBjaGFubmVsX21hcDsJLyogaWYgYml0IE4gaXMgc2V0LCBjaGFubmVsIChOKzEpIGlzIGFsbG93ZWQgKi8KK307CisKKy8qIERhdGEgZm9yIG9uZSBsb2FkZWQgZmlybXdhcmUgZmlsZSAqLworc3RydWN0IGZ3ZW50cnkgeworCWNvbnN0IGNoYXIgKmNvbnN0IGZ3bmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBleHRmd19zaXplOworCWludCBpbnRmd19zaXplOworCS8qIHBvaW50ZXIgdG8gbG9hZGVkIGZpcm13YXJlLCBubyBuZWVkIHRvIGZyZWUgKi8KKwl1OCAqZXh0Znc7CQkvKiBleHRlcm5hbCBmaXJtd2FyZSwgZXh0Zndfc2l6ZSBieXRlcyBsb25nICovCisJdTggKmludGZ3OwkJLyogaW50ZXJuYWwgZmlybXdhcmUsIGludGZ3X3NpemUgYnl0ZXMgbG9uZyAqLworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOwkvKiBib2FyZCB0eXBlICovCisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3X3ZlcnNpb247CisJaW50IGxvYWRlZDsJCS8qIExvYWRlZCBhbmQgcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLworfTsKKworc3RydWN0IGF0NzZfcHJpdiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLworCisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsJLyogc2tidWZmIGZvciByZWNlaXZpbmcgZGF0YSAqLworCXN0cnVjdCBza19idWZmICp0eF9za2I7CS8qIHNrYnVmZiBmb3IgdHJhbnNtaXR0aW5nIGRhdGEgKi8KKwl2b2lkICpidWxrX291dF9idWZmZXI7CS8qIGJ1ZmZlciBmb3Igc2VuZGluZyBkYXRhICovCisKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CS8qIFVSQiBmb3Igc2VuZGluZyBkYXRhICovCisJc3RydWN0IHVyYiAqcnhfdXJiOwkvKiBVUkIgZm9yIHJlY2VpdmluZyBkYXRhICovCisKKwl1bnNpZ25lZCBpbnQgdHhfcGlwZTsJLyogYnVsayBvdXQgcGlwZSAqLworCXVuc2lnbmVkIGludCByeF9waXBlOwkvKiBidWxrIGluIHBpcGUgKi8KKworCXN0cnVjdCBtdXRleCBtdHg7CS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisKKwkvKiB3b3JrIHF1ZXVlcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3NldF9wcm9taXNjOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N1Ym1pdF9yeDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2h3X3NjYW47CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKworCS8qIHRoZSBXRVAgc3R1ZmYgKi8KKwlpbnQgd2VwX2VuYWJsZWQ7CS8qIDEgaWYgV0VQIGlzIGVuYWJsZWQgKi8KKwlpbnQgd2VwX2tleV9pZDsJCS8qIGtleSBpZCB0byBiZSB1c2VkICovCisJdTggd2VwX2tleXNbV0VQX0tFWVNdW1dFUF9MQVJHRV9LRVlfTEVOXTsJLyogV0VQIGtleXMgKi8KKwl1OCB3ZXBfa2V5c19sZW5bV0VQX0tFWVNdOwkvKiBsZW5ndGggb2YgV0VQIGtleXMgKi8KKworCWludCBjaGFubmVsOworCWludCBpd19tb2RlOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJaW50IGVzc2lkX3NpemU7CisJaW50IHJhZGlvX29uOworCWludCBwcm9taXNjOworCisJaW50IHByZWFtYmxlX3R5cGU7CS8qIDAgLSBsb25nLCAxIC0gc2hvcnQsIDIgLSBhdXRvICovCisJaW50IGF1dGhfbW9kZTsJCS8qIGF1dGhlbnRpY2F0aW9uIHR5cGU6IDAgb3BlbiwgMSBzaGFyZWQga2V5ICovCisJaW50IHR4cmF0ZTsJCS8qIDAsMSwyLDMgPSAxLDIsNS41LDExIE1icHMsIDQgaXMgYXV0byAqLworCWludCBmcmFnX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBmcmFnbWVudGF0aW9uIG9mIHR4IHBhY2tldHMgKi8KKwlpbnQgcnRzX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBSVFMgbWVjaGFuaXNtICovCisJaW50IHNob3J0X3JldHJ5X2xpbWl0OworCisJaW50IHNjYW5fbWluX3RpbWU7CS8qIHNjYW4gbWluIGNoYW5uZWwgdGltZSAqLworCWludCBzY2FuX21heF90aW1lOwkvKiBzY2FuIG1heCBjaGFubmVsIHRpbWUgKi8KKwlpbnQgc2Nhbl9tb2RlOwkJLyogU0NBTl9UWVBFX0FDVElWRSwgU0NBTl9UWVBFX1BBU1NJVkUgKi8KKwlpbnQgc2Nhbl9uZWVkX2FueTsJLyogaWYgc2V0LCBuZWVkIHRvIHNjYW4gZm9yIGFueSBFU1NJRCAqLworCisJdTE2IGFzc29jX2lkOwkJLyogY3VycmVudCBhc3NvY2lhdGlvbiBJRCwgaWYgYXNzb2NpYXRlZCAqLworCisJdTggcG1fbW9kZTsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSAqLworCXUzMiBwbV9wZXJpb2Q7CQkvKiBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCBpbiBtaWNyb3NlY29uZHMgKi8KKworCXN0cnVjdCByZWdfZG9tYWluIGNvbnN0ICpkb21haW47CS8qIHJlZyBkb21haW4gZGVzY3JpcHRpb24gKi8KKworCS8qIFRoZXNlIGZpZWxkcyBjb250YWluIEhXIGNvbmZpZyBwcm92aWRlZCBieSB0aGUgZGV2aWNlIChub3QgYWxsIG9mCisJICogdGhlc2UgZmllbGRzIGFyZSB1c2VkIGJ5IGFsbCBib2FyZCB0eXBlcykgKi8KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyBjYXJkX2NvbmZpZzsKKworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd192ZXJzaW9uOworCisJdW5zaWduZWQgaW50IGRldmljZV91bnBsdWdnZWQ6MTsKKwl1bnNpZ25lZCBpbnQgbmV0ZGV2X3JlZ2lzdGVyZWQ6MTsKKwlzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgbWliX2J1ZjsJLyogZ2xvYmFsIGJ1ZmZlciBmb3Igc2V0X21pYiBjYWxscyAqLworCisJaW50IGJlYWNvbl9wZXJpb2Q7CS8qIHBlcmlvZCBvZiBtZ210IGJlYWNvbnMsIEt1cyAqLworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJaW50IG1hYzgwMjExX3JlZ2lzdGVyZWQ7Cit9OworCisjZGVmaW5lIEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlMgRklGX1BST01JU0NfSU5fQlNTCisKKyNkZWZpbmUgU0NBTl9QT0xMX0lOVEVSVkFMCShIWiAvIDQpCisKKyNkZWZpbmUgQ01EX0NPTVBMRVRJT05fVElNRU9VVAkoNSAqIEhaKQorCisjZGVmaW5lIERFRl9SVFNfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX0ZSQUdfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX1NIT1JUX1JFVFJZX0xJTUlUCTgKKyNkZWZpbmUgREVGX0NIQU5ORUwJCTEwCisjZGVmaW5lIERFRl9TQ0FOX01JTl9USU1FCTEwCisjZGVmaW5lIERFRl9TQ0FOX01BWF9USU1FCTEyMAorCisvKiB0aGUgbWF4IHBhZGRpbmcgc2l6ZSBmb3IgdHggaW4gYnl0ZXMgKHNlZSBjYWxjX3BhZGRpbmcpICovCisjZGVmaW5lIE1BWF9QQURESU5HX1NJWkUJNTMKKworI2VuZGlmCQkJCS8qIF9BVDc2X1VTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCmluZGV4IDcxOWNmYWUuLjg0YTc0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCkBAIC0xMCw1ICsxMCw2IEBACiBhdGg1ay15CQkJCSs9IHJlc2V0Lm8KIGF0aDVrLXkJCQkJKz0gYXR0YWNoLm8KIGF0aDVrLXkJCQkJKz0gYmFzZS5vCithdGg1ay15CQkJCSs9IGxlZC5vCiBhdGg1ay0kKENPTkZJR19BVEg1S19ERUJVRykJKz0gZGVidWcubwogb2JqLSQoQ09ORklHX0FUSDVLKQkJKz0gYXRoNWsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKaW5kZXggMTgzZmZjOC4uMGRjMmM3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaApAQCAtMTY1LDkgKzE2NSw2IEBACiAjZGVmaW5lIEFSNUtfSU5JX1ZBTF9YUgkJCTAKICNkZWZpbmUgQVI1S19JTklfVkFMX01BWAkJNQogCi0jZGVmaW5lIEFSNUtfUkY1MTExX0lOSV9SRl9NQVhfQkFOS1MJQVI1S19NQVhfUkZfQkFOS1MKLSNkZWZpbmUgQVI1S19SRjUxMTJfSU5JX1JGX01BWF9CQU5LUwlBUjVLX01BWF9SRl9CQU5LUwotCiAvKiBVc2VkIGZvciBCU1NJRCBldGMgbWFuaXB1bGF0aW9uICovCiAjZGVmaW5lIEFSNUtfTE9XX0lEKF9hKSgJCQkJXAogKF9hKVswXSB8IChfYSlbMV0gPDwgOCB8IChfYSlbMl0gPDwgMTYgfCAoX2EpWzNdIDw8IDI0CVwKQEAgLTIyNSw2ICsyMjIsNyBAQAogI2VuZGlmCiAKIC8qIEluaXRpYWwgdmFsdWVzICovCisjZGVmaW5lCUFSNUtfSU5JVF9DWUNSU1NJX1RIUjEJCQkyCiAjZGVmaW5lIEFSNUtfSU5JVF9UWF9MQVRFTkNZCQkJNTAyCiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDCQkJCTM5CiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDX1RVUkJPCQkJNzkKQEAgLTMxNiw3ICszMTQsNyBAQAogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDI0CTB4OTAgLyogQ29uZG9yICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTMJMHhhNCAvKiBFYWdsZSBsaXRlICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTQJMHhhMCAvKiBFYWdsZSAqLwotI2RlZmluZSBBUjVLX1NSRVZfQVIyNDE1CTB4YjAgLyogQ29icmEgKi8KKyNkZWZpbmUgQVI1S19TUkVWX0FSMjQxNQkweGIwIC8qIFRhbG9uICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTYJMHhjMCAvKiBQQ0ktRSAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDE4CTB4Y2EgLyogUENJLUUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSMjQyNQkweGUwIC8qIFN3YW4gKi8KQEAgLTMzNCw3ICszMzIsNyBAQAogI2RlZmluZQlBUjVLX1NSRVZfUkFEXzIxMTJCCTB4NDYKICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDEzCTB4NTAKICNkZWZpbmUgQVI1S19TUkVWX1JBRF81NDEzCTB4NjAKLSNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAKKyNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAgLyogQ29icmEgU29DICovCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfMjMxNwkweDgwCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfNTQyNAkweGEwIC8qIE1vc3RseSBzYW1lIGFzIDU0MTMgKi8KICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDI1CTB4YTIKQEAgLTM0Miw3ICszNDAsOCBAQAogCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMQkweDMwCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMgkweDQxCi0jZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjExMkIJMHg0MworI2RlZmluZQlBUjVLX1NSRVZfUEhZXzUyMTJBCTB4NDIKKyNkZWZpbmUgQVI1S19TUkVWX1BIWV81MjEyQgkweDQzCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQxMwkweDQ1CiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTQxMwkweDYxCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQyNQkweDcwCkBAIC02NDksNDkgKzY0OCwyMSBAQAogCiBlbnVtIGF0aDVrX3JmZ2FpbiB7CiAJQVI1S19SRkdBSU5fSU5BQ1RJVkUgPSAwLAorCUFSNUtfUkZHQUlOX0FDVElWRSwKIAlBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRCwKIAlBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRSwKIH07CiAKLSNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTExCQk0Ci0jZGVmaW5lIEFSNUtfR0FJTl9DUk5fRklYX0JJVFNfNTExMgkJNwotI2RlZmluZSBBUjVLX0dBSU5fQ1JOX01BWF9GSVhfQklUUwkJQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCi0jZGVmaW5lIEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTgkJMTUKLSNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOCQkyMAotI2RlZmluZSBBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlIJCTUKLSNkZWZpbmUgQVI1S19HQUlOX0NDS19PRkRNX0dBSU5fREVMVEEJCTE1Ci0jZGVmaW5lIEFSNUtfR0FJTl9TVEVQX0NPVU5UCQkJMTAKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1RYX0NMSVAJCQkwCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF85MAkJCTEKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzg0CQkJMgotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fR0FJTl9TRUwJCTMKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX01JWF9PUk4JCQkwCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzgJCQkxCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzcJCQkyCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzYJCQkzCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzIJCQk0Ci0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzEJCQk1Ci0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzAJCQk2Ci0jZGVmaW5lIEFSNUtfR0FJTl9DSEVDS19BREpVU1QoX2cpIAkJXAotCSgoX2cpLT5nX2N1cnJlbnQgPD0gKF9nKS0+Z19sb3cgfHwgKF9nKS0+Z19jdXJyZW50ID49IChfZyktPmdfaGlnaCkKLQotc3RydWN0IGF0aDVrX2dhaW5fb3B0X3N0ZXAgewotCXMxNgkJCQlnb3NfcGFyYW1bQVI1S19HQUlOX0NSTl9NQVhfRklYX0JJVFNdOwotCXMzMgkJCQlnb3NfZ2FpbjsKLX07Ci0KIHN0cnVjdCBhdGg1a19nYWluIHsKLQl1MzIJCQlnX3N0ZXBfaWR4OwotCXUzMgkJCWdfY3VycmVudDsKLQl1MzIJCQlnX3RhcmdldDsKLQl1MzIJCQlnX2xvdzsKLQl1MzIJCQlnX2hpZ2g7Ci0JdTMyCQkJZ19mX2NvcnI7Ci0JdTMyCQkJZ19hY3RpdmU7Ci0JY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0X3N0ZXAJKmdfc3RlcDsKKwl1OAkJCWdfc3RlcF9pZHg7CisJdTgJCQlnX2N1cnJlbnQ7CisJdTgJCQlnX3RhcmdldDsKKwl1OAkJCWdfbG93OworCXU4CQkJZ19oaWdoOworCXU4CQkJZ19mX2NvcnI7CisJdTgJCQlnX3N0YXRlOwogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKipcCiAgIENPTU1PTiBERUZJTklUSU9OUwogXCoqKioqKioqKioqKioqKioqKioqLwpAQCAtMTA1Myw3ICsxMDI0LDYgQEAKIAlib29sCQkJYWhfcnVubmluZzsKIAlib29sCQkJYWhfc2luZ2xlX2NoaXA7CiAJYm9vbAkJCWFoX2NvbWJpbmVkX21pYzsKLQllbnVtIGF0aDVrX3JmZ2FpbglhaF9yZl9nYWluOwogCiAJdTMyCQkJYWhfbWFjX3NyZXY7CiAJdTE2CQkJYWhfbWFjX3ZlcnNpb247CkBAIC0xMDYxLDcgKzEwMzEsNiBAQAogCXUxNgkJCWFoX3BoeV9yZXZpc2lvbjsKIAl1MTYJCQlhaF9yYWRpb181Z2h6X3JldmlzaW9uOwogCXUxNgkJCWFoX3JhZGlvXzJnaHpfcmV2aXNpb247Ci0JdTMyCQkJYWhfcGh5X3NwZW5kaW5nOwogCiAJZW51bSBhdGg1a192ZXJzaW9uCWFoX3ZlcnNpb247CiAJZW51bSBhdGg1a19yYWRpbwlhaF9yYWRpbzsKQEAgLTExMTIsOCArMTA4MSw5IEBACiAJdTMyCQkJYWhfdHhxX2lzcjsKIAl1MzIJCQkqYWhfcmZfYmFua3M7CiAJc2l6ZV90CQkJYWhfcmZfYmFua3Nfc2l6ZTsKKwlzaXplX3QJCQlhaF9yZl9yZWdzX2NvdW50OwogCXN0cnVjdCBhdGg1a19nYWluCWFoX2dhaW47Ci0JdTMyCQkJYWhfb2Zmc2V0W0FSNUtfTUFYX1JGX0JBTktTXTsKKwl1OAkJCWFoX29mZnNldFtBUjVLX01BWF9SRl9CQU5LU107CiAKIAlzdHJ1Y3QgewogCQl1MTYJCXR4cF9wY2RhY1tBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFXTsKQEAgLTExNTksNiArMTEyOSwxMiBAQAogZXh0ZXJuIHN0cnVjdCBhdGg1a19odyAqYXRoNWtfaHdfYXR0YWNoKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU4IG1hY192ZXJzaW9uKTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAorLyogTEVEIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBhdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgYXRoNWtfbGVkX29mZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKKwogLyogUmVzZXQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpOwogZXh0ZXJuIGludCBhdGg1a19od19yZXNldChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBlbnVtIG5sODAyMTFfaWZ0eXBlIG9wX21vZGUsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCk7CkBAIC0xMTg2LDYgKzExNjIsNyBAQAogLyogRUVQUk9NIGFjY2VzcyBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfZWVwcm9tX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2VlcHJvbV9yZWFkX21hYyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCAqbWFjKTsKK2V4dGVybiBib29sIGF0aDVrX2VlcHJvbV9pc19oYjYzKHN0cnVjdCBhdGg1a19odyAqYWgpOwogCiAvKiBQcm90b2NvbCBDb250cm9sIFVuaXQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9vcG1vZGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CkBAIC0xMjA2LDYgKzExODMsNyBAQAogLyogQmVhY29uIGNvbnRyb2wgZnVuY3Rpb25zICovCiBleHRlcm4gdTMyIGF0aDVrX2h3X2dldF90c2YzMihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiB1NjQgYXRoNWtfaHdfZ2V0X3RzZjY0KHN0cnVjdCBhdGg1a19odyAqYWgpOworZXh0ZXJuIHZvaWQgYXRoNWtfaHdfc2V0X3RzZjY0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU2NCB0c2Y2NCk7CiBleHRlcm4gdm9pZCBhdGg1a19od19yZXNldF90c2Yoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gdm9pZCBhdGg1a19od19pbml0X2JlYWNvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgbmV4dF9iZWFjb24sIHUzMiBpbnRlcnZhbCk7CiAjaWYgMApAQCAtMTI2MCwxMCArMTIzOCwxMiBAQAogZXh0ZXJuIGludCBhdGg1a19od193cml0ZV9pbml0dmFscyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtb2RlLCBib29sIGNoYW5nZV9jaGFubmVsKTsKIAogLyogSW5pdGlhbGl6ZSBSRiAqLwotZXh0ZXJuIGludCBhdGg1a19od19yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSk7Ci1leHRlcm4gaW50IGF0aDVrX2h3X3JmZ2FpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgZnJlcSk7Ci1leHRlcm4gZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2V0X3JmX2dhaW4oc3RydWN0IGF0aDVrX2h3ICphaCk7Ci1leHRlcm4gaW50IGF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KHN0cnVjdCBhdGg1a19odyAqYWgpOworZXh0ZXJuIGludCBhdGg1a19od19yZnJlZ3NfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQl1bnNpZ25lZCBpbnQgbW9kZSk7CitleHRlcm4gaW50IGF0aDVrX2h3X3JmZ2Fpbl9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKTsKK2V4dGVybiBlbnVtIGF0aDVrX3JmZ2FpbiBhdGg1a19od19nYWluZl9jYWxpYnJhdGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gaW50IGF0aDVrX2h3X3JmZ2Fpbl9vcHRfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIC8qIFBIWS9SRiBjaGFubmVsIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGJvb2wgYXRoNWtfY2hhbm5lbF9vayhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgZnJlcSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfY2hhbm5lbChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwpAQCAtMTI4NSw2ICsxMjY1LDcgQEAKIAogLyoKICAqIFRyYW5zbGF0ZSB1c2VjIHRvIGh3IGNsb2NrIHVuaXRzCisgKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZQogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg1a19od19odG9jbG9jayh1bnNpZ25lZCBpbnQgdXNlYywgYm9vbCB0dXJibykKIHsKQEAgLTEyOTMsNiArMTI3NCw3IEBACiAKIC8qCiAgKiBUcmFuc2xhdGUgaHcgY2xvY2sgdW5pdHMgdG8gdXNlYworICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfY2xvY2t0b2godW5zaWduZWQgaW50IGNsb2NrLCBib29sIHR1cmJvKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXR0YWNoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwppbmRleCBkZWEzNzhmLi42NTZjYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwpAQCAtMzQsMTQgKzM0LDE0IEBACiBzdGF0aWMgaW50IGF0aDVrX2h3X3Bvc3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAotCWludCBpLCBjOwotCXUxNiBjdXJfcmVnOwotCXUxNiByZWdzWzJdID0ge0FSNUtfU1RBX0lEMCwgQVI1S19QSFkoOCl9OwotCXUzMiB2YXJfcGF0dGVybjsKLQl1MzIgc3RhdGljX3BhdHRlcm5bNF0gPSB7CisJc3RhdGljIGNvbnN0IHUzMiBzdGF0aWNfcGF0dGVybls0XSA9IHsKIAkJMHg1NTU1NTU1NSwJMHhhYWFhYWFhYSwKIAkJMHg2NjY2NjY2NiwJMHg5OTk5OTk5OQogCX07CisJc3RhdGljIGNvbnN0IHUxNiByZWdzWzJdID0geyBBUjVLX1NUQV9JRDAsIEFSNUtfUEhZKDgpIH07CisJaW50IGksIGM7CisJdTE2IGN1cl9yZWc7CisJdTMyIHZhcl9wYXR0ZXJuOwogCXUzMiBpbml0X3ZhbDsKIAl1MzIgY3VyX3ZhbDsKIApAQCAtMTA2LDcgKzEwNiw2IEBACiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCXU4IG1hY1tFVEhfQUxFTl0gPSB7fTsKIAlpbnQgcmV0OwogCXUzMiBzcmV2OwogCkBAIC0xNjksNyArMTY4LDYgQEAKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gZmFsc2U7CiAJCWFoLT5haF9yYWRpb18yZ2h6X3JldmlzaW9uID0gYXRoNWtfaHdfcmFkaW9fcmV2aXNpb24oYWgsCiAJCQkJCQkJQ0hBTk5FTF8yR0haKTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzUxMTI6CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIxMTI6CkBAIC0xNzcsMzggKzE3NSwzMSBAQAogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSBmYWxzZTsKIAkJYWgtPmFoX3JhZGlvXzJnaHpfcmV2aXNpb24gPSBhdGg1a19od19yYWRpb19yZXZpc2lvbihhaCwKIAkJCQkJCQlDSEFOTkVMXzJHSFopOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyOwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjQxMzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MTM7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDEzOgogCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTQxMzsKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMzsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIzMTY6CiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkYyMzE2OwogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjMxNzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTc7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjIzMTc7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDI0OgogCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MjUgfHwKIAkJYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MTcpewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MjU7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNTsKIAkJfSBlbHNlIHsKIAkJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1NDEzOwogCQkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjU0MTM7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIyNywyOSArMjE4LDI1IEBACiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjQyNTsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfMjQyNTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MjU7CiAJCX0gZWxzZSBpZiAoc3JldiA9PSBBUjVLX1NSRVZfQVI1MjEzQSAmJgotCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjExMkIpIHsKKwkJYWgtPmFoX3BoeV9yZXZpc2lvbiA9PSBBUjVLX1NSRVZfUEhZXzUyMTJCKSB7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTExMjsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IGZhbHNlOwotCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIxMTJCOworCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzUxMTJCOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNSA+PiA0KSkgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTY7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIzMTY7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSNTQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfNTQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjU0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzU0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1NDEzOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzI0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyNDEzOwogCQl9IGVsc2UgewogCQkJQVRINUtfRVJSKHNjLCAiQ291bGRuJ3QgaWRlbnRpZnkgcmFkaW8gcmV2aXNpb24uXG4iKTsKIAkJCXJldCA9IC1FTk9ERVY7CkBAIC0zMjQsMTQgKzMxMSwxNCBAQAogCX0KIAogCS8qIE1BQyBhZGRyZXNzIGlzIGNsZWFyZWQgdW50aWwgYWRkX2ludGVyZmFjZSAqLwotCWF0aDVrX2h3X3NldF9sbGFkZHIoYWgsIG1hYyk7CisJYXRoNWtfaHdfc2V0X2xsYWRkcihhaCwgKHU4W0VUSF9BTEVOXSl7fSk7CiAKIAkvKiBTZXQgQlNTSUQgdG8gYmNhc3QgYWRkcmVzczogZmY6ZmY6ZmY6ZmY6ZmY6ZmYgZm9yIG5vdyAqLwogCW1lbXNldChhaC0+YWhfYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKIAlhdGg1a19od19zZXRfYXNzb2NpZChhaCwgYWgtPmFoX2Jzc2lkLCAwKTsKIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKIAotCWF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KGFoKTsKKwlhdGg1a19od19yZmdhaW5fb3B0X2luaXQoYWgpOwogCiAJcmV0dXJuIGFoOwogZXJyX2ZyZWU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKaW5kZXggMWQ3N2VlOS4uY2FkM2NjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYwpAQCAtNzksNyArNzksNyBAQAogCiAKIC8qIEtub3duIFBDSSBpZHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX3BjaV9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMjA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCBlYXJseSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTEgfSwgLyogNTMxMSAtIHRoaXMgaXMgb24gQUhCIGJ1cyAhKi8KQEAgLTEwMyw3ICsxMDMsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aDVrX3BjaV9pZF90YWJsZSk7CiAKIC8qIEtub3duIFNSRVZzICovCi1zdGF0aWMgc3RydWN0IGF0aDVrX3NyZXZfbmFtZSBzcmV2X25hbWVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3NyZXZfbmFtZSBzcmV2X25hbWVzW10gPSB7CiAJeyAiNTIxMCIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjUyMTAgfSwKIAl7ICI1MzExIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTMxMSB9LAogCXsgIjUzMTFBIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTMxMUEgfSwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXsgInh4eHh4IiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1VOS05PV04gfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYXRoNWtfcmF0ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYXRoNWtfcmF0ZXNbXSA9IHsKIAl7IC5iaXRyYXRlID0gMTAsCiAJICAuaHdfdmFsdWUgPSBBVEg1S19SQVRFX0NPREVfMU0sIH0sCiAJeyAuYml0cmF0ZSA9IDIwLApAQCAtMjMyLDEzICsyMzIsMTQgQEAKIAkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCk7CiBzdGF0aWMgaW50IGF0aDVrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCWVudW0gc2V0X2tleV9jbWQgY21kLAotCQljb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiBzdGF0aWMgaW50IGF0aDVrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKTsKIHN0YXRpYyBpbnQgYXRoNWtfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiBzdGF0aWMgdTY0IGF0aDVrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIHZvaWQgYXRoNWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZik7CiBzdGF0aWMgdm9pZCBhdGg1a19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIGludCBhdGg1a19iZWFjb25fdXBkYXRlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCXN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMjQ3LDcgKzI0OCw3IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAogCQl1MzIgY2hhbmdlcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg1a19od19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzID0gewogCS50eCAJCT0gYXRoNWtfdHgsCiAJLnN0YXJ0IAkJPSBhdGg1a19zdGFydCwKIAkuc3RvcCAJCT0gYXRoNWtfc3RvcCwKQEAgLTI2MSw2ICsyNjIsNyBAQAogCS5jb25mX3R4IAk9IE5VTEwsCiAJLmdldF90eF9zdGF0cyAJPSBhdGg1a19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YgCT0gYXRoNWtfZ2V0X3RzZiwKKwkuc2V0X3RzZiAJPSBhdGg1a19zZXRfdHNmLAogCS5yZXNldF90c2YgCT0gYXRoNWtfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gYXRoNWtfYnNzX2luZm9fY2hhbmdlZCwKIH07CkBAIC0zMDgsNiArMzEwLDE5IEBACiAJYmYtPnNrYiA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg1a19yeGJ1Zl9mcmVlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCisJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCit7CisJQlVHX09OKCFiZik7CisJaWYgKCFiZi0+c2tiKQorCQlyZXR1cm47CisJcGNpX3VubWFwX3NpbmdsZShzYy0+cGRldiwgYmYtPnNrYmFkZHIsIHNjLT5yeGJ1ZnNpemUsCisJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWRldl9rZnJlZV9za2JfYW55KGJmLT5za2IpOworCWJmLT5za2IgPSBOVUxMOworfQorCisKIC8qIFF1ZXVlcyBzZXR1cCAqLwogc3RhdGljIHN0cnVjdCAJYXRoNWtfdHhxICphdGg1a190eHFfc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKIAkJCQlpbnQgcXR5cGUsIGludCBzdWJ0eXBlKTsKQEAgLTMzNSw2ICszNTAsNyBAQAogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9zZW5kKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZAlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1NjQgYmNfdHNmKTsKK3N0YXRpYyB2b2lkCWF0aDVrX3Rhc2tsZXRfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGF0aDVrX2V4dGVuZF90c2Yoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIHJzdGFtcCkKIHsKQEAgLTM0NywxOCArMzYzLDEzIEBACiB9CiAKIC8qIEludGVycnVwdCBoYW5kbGluZyAqLwotc3RhdGljIGludCAJYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3Jlc3VtZSk7CitzdGF0aWMgaW50IAlhdGg1a19pbml0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGludCAJYXRoNWtfc3RvcF9sb2NrZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGJvb2wgaXNfc3VzcGVuZCk7CitzdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGlycXJldHVybl90IGF0aDVrX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIAlhdGg1a190YXNrbGV0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIHN0YXRpYyB2b2lkIAlhdGg1a19jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKTsKLS8qIExFRCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQJYXRoNWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIHZvaWQJYXRoNWtfbGVkX2VuYWJsZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKLXN0YXRpYyB2b2lkCWF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgdm9pZAlhdGg1a191bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiAKIC8qCiAgKiBNb2R1bGUgaW5pdC9leGl0IGZ1bmN0aW9ucwpAQCAtNjUzLDggKzY2NCw2IEBACiAKIAlhdGg1a19sZWRfb2ZmKHNjKTsKIAotCWF0aDVrX3N0b3BfaHcoc2MsIHRydWUpOwotCiAJZnJlZV9pcnEocGRldi0+aXJxLCBzYyk7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNjg5LDE0ICs2OTgsOSBAQAogCQlnb3RvIGVycl9ub19pcnE7CiAJfQogCi0JZXJyID0gYXRoNWtfaW5pdChzYywgdHJ1ZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfaXJxOwogCWF0aDVrX2xlZF9lbmFibGUoc2MpOwotCiAJcmV0dXJuIDA7Ci1lcnJfaXJxOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOworCiBlcnJfbm9faXJxOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gZXJyOwpAQCAtNzgxLDYgKzc4NSw3IEBACiAJdGFza2xldF9pbml0KCZzYy0+cnh0cSwgYXRoNWtfdGFza2xldF9yeCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnR4dHEsIGF0aDVrX3Rhc2tsZXRfdHgsICh1bnNpZ25lZCBsb25nKXNjKTsKIAl0YXNrbGV0X2luaXQoJnNjLT5yZXN0cSwgYXRoNWtfdGFza2xldF9yZXNldCwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmJlYWNvbnRxLCBhdGg1a190YXNrbGV0X2JlYWNvbiwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXNldHVwX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCBhdGg1a19jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKIAogCXJldCA9IGF0aDVrX2VlcHJvbV9yZWFkX21hYyhhaCwgbWFjKTsKQEAgLTEwOTAsNyArMTA5NSw4IEBACiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBpbnQgaHdfcml4KQogewotCVdBUk5fT04oaHdfcml4IDwgMCB8fCBod19yaXggPiBBUjVLX01BWF9SQVRFUyk7CisJV0FSTihod19yaXggPCAwIHx8IGh3X3JpeCA+PSBBUjVLX01BWF9SQVRFUywKKwkJCSJod19yaXggb3V0IG9mIGJvdW5kczogJXhcbiIsIGh3X3JpeCk7CiAJcmV0dXJuIHNjLT5yYXRlX2lkeFtzYy0+Y3VyYmFuZC0+YmFuZF1baHdfcml4XTsKIH0KIApAQCAtMTE4OCw2ICsxMTk0LDEwIEBACiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCXVuc2lnbmVkIGludCBtcnJfcmF0ZVszXSwgbXJyX3RyaWVzWzNdOwogCWludCBpLCByZXQ7CisJdTE2IGh3X3JhdGU7CisJdTE2IGN0c19yYXRlID0gMDsKKwl1MTYgZHVyYXRpb24gPSAwOworCXU4IHJjX2ZsYWdzOwogCiAJZmxhZ3MgPSBBUjVLX1RYREVTQ19JTlRSRVEgfCBBUjVLX1RYREVTQ19DTFJETUFTSzsKIApAQCAtMTE5NSwyMCArMTIwNSwzOSBAQAogCWJmLT5za2JhZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAorCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoc2MtPmh3LCBpbmZvKTsKKwogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQogCQlmbGFncyB8PSBBUjVLX1RYREVTQ19OT0FDSzsKIAorCXJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKKwlod19yYXRlID0gKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkgPworCQlyYXRlLT5od192YWx1ZV9zaG9ydCA6IHJhdGUtPmh3X3ZhbHVlOworCiAJcGt0bGVuID0gc2tiLT5sZW47CiAKIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpIHsKIAkJa2V5aWR4ID0gaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CiAJCXBrdGxlbiArPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKIAl9CisJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CisJCWZsYWdzIHw9IEFSNUtfVFhERVNDX1JUU0VOQTsKKwkJY3RzX3JhdGUgPSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZTsKKwkJZHVyYXRpb24gPSBsZTE2X3RvX2NwdShpZWVlODAyMTFfcnRzX2R1cmF0aW9uKHNjLT5odywKKwkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOworCX0KKwlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CisJCWZsYWdzIHw9IEFSNUtfVFhERVNDX0NUU0VOQTsKKwkJY3RzX3JhdGUgPSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZTsKKwkJZHVyYXRpb24gPSBsZTE2X3RvX2NwdShpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uKHNjLT5odywKKwkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOworCX0KIAlyZXQgPSBhaC0+YWhfc2V0dXBfdHhfZGVzYyhhaCwgZHMsIHBrdGxlbiwKIAkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwgQVI1S19QS1RfVFlQRV9OT1JNQUwsCiAJCShzYy0+cG93ZXJfbGV2ZWwgKiAyKSwKLQkJaWVlZTgwMjExX2dldF90eF9yYXRlKHNjLT5odywgaW5mbyktPmh3X3ZhbHVlLAotCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50LCBrZXlpZHgsIDAsIGZsYWdzLCAwLCAwKTsKKwkJaHdfcmF0ZSwKKwkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCwga2V5aWR4LCAwLCBmbGFncywKKwkJY3RzX3JhdGUsIGR1cmF0aW9uKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bm1hcDsKIApAQCAtMTMyNCw3ICsxMzUzLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJmLCAmc2MtPnR4YnVmLCBsaXN0KQogCQlhdGg1a190eGJ1Zl9mcmVlKHNjLCBiZik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShiZiwgJnNjLT5yeGJ1ZiwgbGlzdCkKLQkJYXRoNWtfdHhidWZfZnJlZShzYywgYmYpOworCQlhdGg1a19yeGJ1Zl9mcmVlKHNjLCBiZik7CiAKIAkvKiBGcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYWxsIGRlc2NyaXB0b3JzICovCiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzYy0+ZGVzY19sZW4sIHNjLT5kZXNjLCBzYy0+ZGVzY19kYWRkcik7CkBAIC0xNjY4LDYgKzE2OTcsMzQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDVrX3Rhc2tsZXRfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gKHN0cnVjdCBhdGg1a19zb2Z0YyAqKSBkYXRhOworCisJLyoKKwkgKiBTb2Z0d2FyZSBiZWFjb24gYWxlcnQtLXRpbWUgdG8gc2VuZCBhIGJlYWNvbi4KKwkgKgorCSAqIEluIElCU1MgbW9kZSB3ZSB1c2UgdGhpcyBpbnRlcnJ1cHQganVzdCB0bworCSAqIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgVEJUVCAodGFyZ2V0IGJlYWNvbgorCSAqIHRyYW5zbWlzc2lvbiB0aW1lKSBpbiBvcmRlciB0byBkZXRlY3Qgd2V0aGVyCisJICogYXV0b21hdGljIFRTRiB1cGRhdGVzIGhhcHBlbmVkLgorCSAqLworCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCS8qIFhYWDogb25seSBpZiBWRU9MIHN1cHBwb3J0ZWQgKi8KKwkJdTY0IHRzZiA9IGF0aDVrX2h3X2dldF90c2Y2NChzYy0+YWgpOworCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7CisJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAorCQkJCSJTV0JBIG5leHR0YnR0OiAleCBod190dTogJXggIgorCQkJCSJUU0Y6ICVsbHhcbiIsCisJCQkJc2MtPm5leHR0YnR0LAorCQkJCVRTRl9UT19UVSh0c2YpLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHRzZik7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZzYy0+YmxvY2spOworCQlhdGg1a19iZWFjb25fc2VuZChzYyk7CisJCXNwaW5fdW5sb2NrKCZzYy0+YmxvY2spOworCX0KK30KIAogc3RhdGljIHZvaWQKIGF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMjAwOCw5ICsyMDY1LDggQEAKICAqIGZyYW1lIGNvbnRlbnRzIGFyZSBkb25lIGFzIG5lZWRlZCBhbmQgdGhlIHNsb3QgdGltZSBpcwogICogYWxzbyBhZGp1c3RlZCBiYXNlZCBvbiBjdXJyZW50IHN0YXRlLgogICoKLSAqIHRoaXMgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAoYXRoNWtfaW50cigpKQotICogYnV0IGFsc28gZnJvbSBhdGg1a19iZWFjb25fY29uZmlnKCkgaW4gSUJTUyBtb2RlIHdoaWNoIGluIHR1cm4KLSAqIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHRhc2tsZXQgYW5kIHVzZXIgY29udGV4dAorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBzb2Z0d2FyZSBpcnEgY29udGV4dCAoYmVhY29udHEgb3IgcmVzdHEKKyAqIHRhc2tsZXRzKSBvciB1c2VyIGNvbnRleHQgZnJvbSBhdGg1a19iZWFjb25fY29uZmlnLgogICovCiBzdGF0aWMgdm9pZAogYXRoNWtfYmVhY29uX3NlbmQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKQEAgLTIxNzcsMTAgKzIyMzMsNiBAQAogICoKICAqIEBzYzogc3RydWN0IGF0aDVrX3NvZnRjIHBvaW50ZXIgd2UgYXJlIG9wZXJhdGluZyBvbgogICoKLSAqIFdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSB3ZSB3YW50IHRvIHJlY2VpdmUgYSBCTUlTUyBpbnRlcnJ1cHQgd2hlbiB3ZQotICogc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUCB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGggc28gd2UgY2FuIGxvb2sgZm9yCi0gKiBhbm90aGVyIEFQIHRvIGFzc29jaWF0ZSB3aXRoLgotICoKICAqIEluIElCU1MgbW9kZSB3ZSB1c2UgYSBzZWxmLWxpbmtlZCB0eCBkZXNjcmlwdG9yIGlmIHBvc3NpYmxlLiBXZSBlbmFibGUgU1dCQQogICogaW50ZXJydXB0cyB0byBkZXRlY3QgVFNGIHVwZGF0ZXMgb25seS4KICAqLwpAQCAtMjE4OCwxNCArMjI0MCwxMyBAQAogYXRoNWtfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWF0aDVrX2h3X3NldF9pbXIoYWgsIDApOwogCXNjLT5ibWlzc2NvdW50ID0gMDsKIAlzYy0+aW1hc2sgJj0gfihBUjVLX0lOVF9CTUlTUyB8IEFSNUtfSU5UX1NXQkEpOwogCi0JaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzYy0+aW1hc2sgfD0gQVI1S19JTlRfQk1JU1M7Ci0JfSBlbHNlIGlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKIAkJCXNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCB8fAogCQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQkvKgpAQCAtMjIxMSw5ICsyMjYyLDkgQEAKIAogCQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQkJaWYgKGF0aDVrX2h3X2hhc3Zlb2woYWgpKSB7Ci0JCQkJc3Bpbl9sb2NrKCZzYy0+YmxvY2spOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+YmxvY2ssIGZsYWdzKTsKIAkJCQlhdGg1a19iZWFjb25fc2VuZChzYyk7Ci0JCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmJsb2NrLCBmbGFncyk7CiAJCQl9CiAJCX0gZWxzZQogCQkJYXRoNWtfYmVhY29uX3VwZGF0ZV90aW1lcnMoc2MsIC0xKTsKQEAgLTIyMjgsMTggKzIyNzksMTMgQEAKIFwqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAotYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3Jlc3VtZSkKK2F0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7CiAKLQlpZiAoaXNfcmVzdW1lICYmICF0ZXN0X2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKSkKLQkJZ290byBvdXRfb2s7Ci0KLQlfX2NsZWFyX2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKTsKLQogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJtb2RlICVkXG4iLCBzYy0+b3Btb2RlKTsKIAogCS8qCkBAIC0yMjcxLDE1ICsyMzE3LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IEFSNUtfS0VZVEFCTEVfU0laRTsgaSsrKQogCQlhdGg1a19od19yZXNldF9rZXkoYWgsIGkpOwogCi0JX19zZXRfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpOwotCiAJLyogU2V0IGFjayB0byBiZSBzZW50IGF0IGxvdyBiaXQtcmF0ZXMgKi8KIAlhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChhaCwgZmFsc2UpOwogCiAJbW9kX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhhdGg1a19jYWxpbnRlcnZhbCAqIDEwMDApKSk7CiAKLW91dF9vazoKIAlyZXQgPSAwOwogZG9uZToKIAltbWlvd2IoKTsKQEAgLTIzMzQsNyArMjM3Nyw3IEBACiAgKiBzdG9wIGlzIHByZWVtcHRlZCkuCiAgKi8KIHN0YXRpYyBpbnQKLWF0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19zdXNwZW5kKQorYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCWludCByZXQ7CiAKQEAgLTIzNjUsOCArMjQwOCw2IEBACiAJCX0KIAl9CiAJYXRoNWtfdHhidWZfZnJlZShzYywgc2MtPmJidWYpOwotCWlmICghaXNfc3VzcGVuZCkKLQkJX19jbGVhcl9iaXQoQVRIX1NUQVRfU1RBUlRFRCwgc2MtPnN0YXR1cyk7CiAKIAltbWlvd2IoKTsKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKQEAgLTIzNzUsNiArMjQxNiw3IEBACiAJdGFza2xldF9raWxsKCZzYy0+cnh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+dHh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+cmVzdHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMzkyLDE2ICsyNDM0LDkgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJZG8gewotCQkvKgotCQkgKiBGaWd1cmUgb3V0IHRoZSByZWFzb24ocykgZm9yIHRoZSBpbnRlcnJ1cHQuICBOb3RlCi0JCSAqIHRoYXQgZ2V0X2lzciByZXR1cm5zIGEgcHNldWRvLUlTUiB0aGF0IG1heSBpbmNsdWRlCi0JCSAqIGJpdHMgd2UgaGF2ZW4ndCBleHBsaWNpdGx5IGVuYWJsZWQgc28gd2UgbWFzayB0aGUKLQkJICogdmFsdWUgdG8gaW5zdXJlIHdlIG9ubHkgcHJvY2VzcyBiaXRzIHdlIHJlcXVlc3RlZC4KLQkJICovCiAJCWF0aDVrX2h3X2dldF9pc3IoYWgsICZzdGF0dXMpOwkJLyogTkI6IGNsZWFycyBJUlEgdG9vICovCiAJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfSU5UUiwgInN0YXR1cyAweCV4LzB4JXhcbiIsCiAJCQkJc3RhdHVzLCBzYy0+aW1hc2spOwotCQlzdGF0dXMgJj0gc2MtPmltYXNrOyAvKiBkaXNjYXJkIHVuYXNrZWQgZm9yIGJpdHMgKi8KIAkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIEFSNUtfSU5UX0ZBVEFMKSkgewogCQkJLyoKIAkJCSAqIEZhdGFsIGVycm9ycyBhcmUgdW5yZWNvdmVyYWJsZS4KQEAgLTI0MTIsMzIgKzI0NDcsNyBAQAogCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJlc3RxKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9TV0JBKSB7Ci0JCQkJLyoKLQkJCQkqIFNvZnR3YXJlIGJlYWNvbiBhbGVydC0tdGltZSB0byBzZW5kIGEgYmVhY29uLgotCQkJCSogSGFuZGxlIGJlYWNvbiB0cmFuc21pc3Npb24gZGlyZWN0bHk7IGRlZmVycmluZwotCQkJCSogdGhpcyBpcyB0b28gc2xvdyB0byBtZWV0IHRpbWluZyBjb25zdHJhaW50cwotCQkJCSogdW5kZXIgbG9hZC4KLQkJCQkqCi0JCQkJKiBJbiBJQlNTIG1vZGUgd2UgdXNlIHRoaXMgaW50ZXJydXB0IGp1c3QgdG8KLQkJCQkqIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgVEJUVCAodGFyZ2V0IGJlYWNvbgotCQkJCSogdHJhbnNtaXNzaW9uIHRpbWUpIGluIG9yZGVyIHRvIGRldGVjdCB3ZXRoZXIKLQkJCQkqIGF1dG9tYXRpYyBUU0YgdXBkYXRlcyBoYXBwZW5lZC4KLQkJCQkqLwotCQkJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkJCSAvKiBYWFg6IG9ubHkgaWYgVkVPTCBzdXBwcG9ydGVkICovCi0JCQkJCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoYWgpOwotCQkJCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7Ci0JCQkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAotCQkJCQkJICAiU1dCQSBuZXh0dGJ0dDogJXggaHdfdHU6ICV4ICIKLQkJCQkJCSAgIlRTRjogJWxseFxuIiwKLQkJCQkJCSAgc2MtPm5leHR0YnR0LAotCQkJCQkJICBUU0ZfVE9fVFUodHNmKSwKLQkJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNmKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzcGluX2xvY2soJnNjLT5ibG9jayk7Ci0JCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKLQkJCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7Ci0JCQkJfQorCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5iZWFjb250cSk7CiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfUlhFT0wpIHsKIAkJCQkvKgpAQCAtMjQ1Nyw2ICsyNDY3LDcgQEAKIAkJCQkJfCBBUjVLX0lOVF9UWEVSUiB8IEFSNUtfSU5UX1RYRU9MKSkKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+dHh0cSk7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfQk1JU1MpIHsKKwkJCQkvKiBUT0RPICovCiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfTUlCKSB7CiAJCQkJLyoKQEAgLTI0OTYsNyArMjUwNyw3IEBACiAJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQlzYy0+Y3VyY2hhbi0+aHdfdmFsdWUpOwogCi0JaWYgKGF0aDVrX2h3X2dldF9yZl9nYWluKGFoKSA9PSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRSkgeworCWlmIChhdGg1a19od19nYWluZl9jYWxpYnJhdGUoYWgpID09IEFSNUtfUkZHQUlOX05FRURfQ0hBTkdFKSB7CiAJCS8qCiAJCSAqIFJmZ2FpbiBpcyBvdXQgb2YgYm91bmRzLCByZXNldCB0aGUgY2hpcAogCQkgKiB0byBsb2FkIG5ldyBnYWluIHZhbHVlcy4KQEAgLTI1MTQsMTMwICsyNTI1LDYgQEAKIH0KIAogCi0KLS8qKioqKioqKioqKioqKipcCi0qIExFRCBmdW5jdGlvbnMgKgotXCoqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpIHsKLQkJYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHNjLT5haCwgc2MtPmxlZF9waW4pOwotCQlhdGg1a19sZWRfb2ZmKHNjKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb24oc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlyZXR1cm47Ci0JYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3Bpbiwgc2MtPmxlZF9vbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAotCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKLXsKLQlzdHJ1Y3QgYXRoNWtfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IGF0aDVrX2xlZCwKLQkJbGVkX2Rldik7Ci0KLQlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQotCQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWVsc2UKLQkJYXRoNWtfbGVkX29uKGxlZC0+c2MpOwotfQotCi1zdGF0aWMgaW50Ci1hdGg1a19yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2xlZCAqbGVkLAotCQkgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQotewotCWludCBlcnI7Ci0KLQlsZWQtPnNjID0gc2M7Ci0Jc3RybmNweShsZWQtPm5hbWUsIG5hbWUsIHNpemVvZihsZWQtPm5hbWUpKTsKLQlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKLQlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKLQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQ7Ci0KLQllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnNjLT5wZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOwotCWlmIChlcnIpIHsKLQkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOwotCQlsZWQtPnNjID0gTlVMTDsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19sZWQgKmxlZCkKLXsKLQlpZiAoIWxlZC0+c2MpCi0JCXJldHVybjsKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKLQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWxlZC0+c2MgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOwotCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1hdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCWNoYXIgbmFtZVtBVEg1S19MRURfTUFYX05BTUVfTEVOICsgMV07Ci0KLQkvKgotCSAqIEF1dG8tZW5hYmxlIHNvZnQgbGVkIHByb2Nlc3NpbmcgZm9yIElCTSBjYXJkcyBhbmQgZm9yCi0JICogNTIxMSBtaW5pcGNpIGNhcmRzLgotCSAqLwotCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0gfHwKLQkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTEpIHsKLQkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOwotCQlzYy0+bGVkX3BpbiA9IDA7Ci0JCXNjLT5sZWRfb24gPSAwOyAgLyogYWN0aXZlIGxvdyAqLwotCX0KLQkvKiBFbmFibGUgc29mdGxlZCBvbiBQSU4xIG9uIEhQIENvbXBhcSBuYzZ4eCwgbmM0MDAwICYgbng1MDAwIGxhcHRvcHMgKi8KLQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBBUSkgewotCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7Ci0JCXNjLT5sZWRfcGluID0gMTsKLQkJc2MtPmxlZF9vbiA9IDE7ICAvKiBhY3RpdmUgaGlnaCAqLwotCX0KLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlnb3RvIG91dDsKLQotCWF0aDVrX2xlZF9lbmFibGUoc2MpOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCBuYW1lLAotCQlpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIG5hbWUsCi0JCWllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoaHcpKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKlwKICogTWFjODAyMTEgZnVuY3Rpb25zICoKIFwqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI3NjYsMTIgKzI2NTMsMTIgQEAKIAogc3RhdGljIGludCBhdGg1a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlyZXR1cm4gYXRoNWtfaW5pdChody0+cHJpdiwgZmFsc2UpOworCXJldHVybiBhdGg1a19pbml0KGh3LT5wcml2KTsKIH0KIAogc3RhdGljIHZvaWQgYXRoNWtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlhdGg1a19zdG9wX2h3KGh3LT5wcml2LCBmYWxzZSk7CisJYXRoNWtfc3RvcF9odyhody0+cHJpdik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoNWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTI4NTYsNyArMjc0Myw3IEBACiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKIAlpZiAoc2MtPnZpZiAhPSB2aWYpIHsKQEAgLTI4ODIsOSArMjc2OSw3IEBACiAJCX0KIAkJYXRoNWtfYmVhY29uX3VwZGF0ZShzYywgYmVhY29uKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7CiAKLQlyZXR1cm4gYXRoNWtfcmVzZXRfd2FrZShzYyk7CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTMwMjAsOCArMjkwNSw4IEBACiAKIHN0YXRpYyBpbnQKIGF0aDVrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQljb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCi0JCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKKwkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJaW50IHJldCA9IDA7CkBAIC0zMDQ0LDcgKzI5MjksOCBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNFVF9LRVk6Ci0JCXJldCA9IGF0aDVrX2h3X3NldF9rZXkoc2MtPmFoLCBrZXktPmtleWlkeCwga2V5LCBhZGRyKTsKKwkJcmV0ID0gYXRoNWtfaHdfc2V0X2tleShzYy0+YWgsIGtleS0+a2V5aWR4LCBrZXksCisJCQkJICAgICAgIHN0YSA/IHN0YS0+YWRkciA6IE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXQgdGhlIGtleVxuIik7CiAJCQlnb3RvIHVubG9jazsKQEAgLTMxMDQsNiArMjk5MCwxNCBAQAogfQogCiBzdGF0aWMgdm9pZAorYXRoNWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZikKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisKKwlhdGg1a19od19zZXRfdHNmNjQoc2MtPmFoLCB0c2YpOworfQorCitzdGF0aWMgdm9pZAogYXRoNWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaAppbmRleCBmYWNjNjBkLi4yMGUwZDE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaApAQCAtMTQ4LDggKzE0OCw3IEBACiAJdTgJCQlic3NpZG1hc2tbRVRIX0FMRU5dOwogCiAJdW5zaWduZWQgaW50CQlsZWRfcGluLAkvKiBHUElPIHBpbiBmb3IgZHJpdmluZyBMRUQgKi8KLQkJCQlsZWRfb24sCQkvKiBwaW4gc2V0dGluZyBmb3IgTEVEIG9uICovCi0JCQkJbGVkX29mZjsJLyogb2ZmIHRpbWUgZm9yIGN1cnJlbnQgYmxpbmsgKi8KKwkJCQlsZWRfb247CQkvKiBwaW4gc2V0dGluZyBmb3IgTEVEIG9uICovCiAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcmVzdHE7CQkvKiByZXNldCB0YXNrbGV0ICovCiAKQEAgLTE3MCw2ICsxNjksNyBAQAogCXN0cnVjdCBhdGg1a19sZWQJdHhfbGVkOwkJLyogdHggbGVkICovCiAKIAlzcGlubG9ja190CQlibG9jazsJCS8qIHByb3RlY3RzIGJlYWNvbiAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAliZWFjb250cTsJLyogYmVhY29uIGludHIgdGFza2xldCAqLwogCXN0cnVjdCBhdGg1a19idWYJKmJidWY7CQkvKiBiZWFjb24gYnVmZmVyICovCiAJdW5zaWduZWQgaW50CQliaGFscSwJCS8qIFNXIHEgZm9yIG91dGdvaW5nIGJlYWNvbnMgKi8KIAkJCQlibWlzc2NvdW50LAkvKiBtaXNzZWQgYmVhY29uIHRyYW5zbWl0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jCmluZGV4IDE1MGY1ZWQuLjM2N2E2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2NhcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9jYXBzLmMKQEAgLTg1LDcgKzg1LDggQEAKIAkJLyogRW5hYmxlICA4MDIuMTFiIGlmIGEgMkdIeiBjYXBhYmxlIHJhZGlvICgyMTExLzUxMTIpIGlzCiAJCSAqIGNvbm5lY3RlZCAqLwogCQlpZiAoQVI1S19FRVBST01fSERSXzExQihlZV9oZWFkZXIpIHx8Ci0JCQkJQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpKSB7CisJCSAgICAoQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpICYmCisJCSAgICAgYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTEpKSB7CiAJCQkvKiAyMzEyICovCiAJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV8yZ2h6X21pbiA9IDI0MTI7CiAJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV8yZ2h6X21heCA9IDI3MzI7CkBAIC05NCw3ICs5NSw4IEBACiAJCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUIsCiAJCQkJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKTsKIAotCQkJaWYgKEFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSkKKwkJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFHKGVlX2hlYWRlcikgJiYKKwkJCSAgICBhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMSkKIAkJCQlfX3NldF9iaXQoQVI1S19NT0RFXzExRywKIAkJCQkJCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYwppbmRleCBjY2FlYjVjLi45NzcwYmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmMKQEAgLTgyLDE0ICs4MiwxNCBAQAogLyogZGVidWdmczogcmVnaXN0ZXJzICovCiAKIHN0cnVjdCByZWcgewotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgYWRkcjsKIH07CiAKICNkZWZpbmUgUkVHX1NUUlVDVF9JTklUKHIpIHsgI3IsIHIgfQogCiAvKiBqdXN0IGEgZmV3IHJhbmRvbSByZWdpc3RlcnMsIG1pZ2h0IHdhbnQgdG8gYWRkIG1vcmUgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVnIHJlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnIHJlZ3NbXSA9IHsKIAlSRUdfU1RSVUNUX0lOSVQoQVI1S19DUiksCiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfUlhEUCksCiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfQ0ZHKSwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiBzdGF0aWMgdm9pZCAqcmVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKnBvcyA8IEFSUkFZX1NJWkUocmVncykgPyAmcmVnc1sqcG9zXSA6IE5VTEw7CisJcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gKHZvaWQgKikmcmVnc1sqcG9zXSA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQpAQCAtMTUzLDcgKzE1Myw3IEBACiBzdGF0aWMgdm9pZCAqcmVnX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQogewogCSsrKnBvczsKLQlyZXR1cm4gKnBvcyA8IEFSUkFZX1NJWkUocmVncykgPyAmcmVnc1sqcG9zXSA6IE5VTEw7CisJcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gKHZvaWQgKikmcmVnc1sqcG9zXSA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgcmVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnApCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZWdpc3Rlcl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZWdpc3Rlcl9zZXFfb3BzID0gewogCS5zdGFydCA9IHJlZ19zdGFydCwKIAkubmV4dCAgPSByZWdfbmV4dCwKIAkuc3RvcCAgPSByZWdfc3RvcCwKQEAgLTE5Myw0MyArMTkzLDYgQEAKIH07CiAKIAotLyogZGVidWdmczogVFNGICovCi0KLXN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90c2Yoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzEwMF07Ci0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JTAxNmxseFxuIiwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpYXRoNWtfaHdfZ2V0X3RzZjY0KHNjLT5haCkpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMTkpOwotfQotCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3RzZihzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMjBdOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgbWluKGNvdW50LCBzaXplb2YoYnVmKSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChzdHJuY21wKGJ1ZiwgInJlc2V0IiwgNSkgPT0gMCkgewotCQlhdGg1a19od19yZXNldF90c2Yoc2MtPmFoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZGVidWdmcyByZXNldCBUU0ZcbiIpOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdHNmID0gewotCS5yZWFkID0gcmVhZF9maWxlX3RzZiwKLQkud3JpdGUgPSB3cml0ZV9maWxlX3RzZiwKLQkub3BlbiA9IGF0aDVrX2RlYnVnZnNfb3BlbiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLX07Ci0KLQogLyogZGVidWdmczogYmVhY29ucyAqLwogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfYmVhY29uKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0zMjcsNyArMjkwLDcgQEAKIAogLyogZGVidWdmczogZGVidWcgbGV2ZWwgKi8KIAotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAllbnVtIGF0aDVrX2RlYnVnX2xldmVsIGxldmVsOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqZGVzYzsKQEAgLTQyMyw5ICszODYsNiBAQAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlZ2lzdGVycyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2lzdGVycyIsIFNfSVJVR08sCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfcmVnaXN0ZXJzKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3RzZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRzZiIsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3RzZik7Ci0KIAlzYy0+ZGVidWcuZGVidWdmc19iZWFjb24gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiZWFjb24iLCBTX0lXVVNSIHwgU19JUlVHTywKIAkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc19iZWFjb24pOwogCkBAIC00NDQsNyArNDA0LDYgQEAKIHsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19kZWJ1Zyk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVnaXN0ZXJzKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc190c2YpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbik7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVzZXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuaAppbmRleCBmZmM1MjkzLi42NmY2OWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmgKQEAgLTcyLDcgKzcyLDYgQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19waHlkaXI7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfZGVidWc7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcmVnaXN0ZXJzOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3RzZjsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19iZWFjb247CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcmVzZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwppbmRleCAxY2I3ZWRmLi5hYzQ1Y2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwpAQCAtMTM3LDYgKzEzNywxOCBAQAogCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMCkgewogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMCwgZWVfbWlzYzApOwogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMSwgZWVfbWlzYzEpOworCisJCS8qIFhYWDogRG9uJ3Qga25vdyB3aGljaCB2ZXJzaW9ucyBpbmNsdWRlIHRoZXNlIHR3byAqLworCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMiwgZWVfbWlzYzIpOworCisJCWlmIChlZS0+ZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMykKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0MzLCBlZV9taXNjMyk7CisKKwkJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8wKSB7CisJCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDNCwgZWVfbWlzYzQpOworCQkJQVI1S19FRVBST01fUkVBRF9IRFIoQVI1S19FRVBST01fTUlTQzUsIGVlX21pc2M1KTsKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0M2LCBlZV9taXNjNik7CisJCX0KIAl9CiAKIAlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzNfMykgewpAQCAtMTkyLDcgKzIwNCw3IEBACiAKIAkvKiBHZXQgYW50ZW5uYSBtb2RlcyAqLwogCWFoLT5haF9hbnRlbm5hW21vZGVdWzBdID0KLQkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KSB8IDB4MTsKKwkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KTsKIAlhaC0+YWhfYW50ZW5uYVttb2RlXVtBUjVLX0FOVF9GSVhFRF9BXSA9CiAJICAgICBlZS0+ZWVfYW50X2NvbnRyb2xbbW9kZV1bMV0gCXwKIAkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVsyXSA8PCA2KSAJfApAQCAtMjEzLDcgKzIyNSw4IEBACiB9CiAKIC8qCi0gKiBSZWFkIHN1cHBvcnRlZCBtb2RlcyBmcm9tIGVlcHJvbQorICogUmVhZCBzdXBwb3J0ZWQgbW9kZXMgYW5kIHNvbWUgbW9kZS1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhCisgKiBmcm9tIGVlcHJvbQogICovCiBzdGF0aWMgaW50IGF0aDVrX2VlcHJvbV9yZWFkX21vZGVzKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiAqb2Zmc2V0LAogCQl1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTMxNSw2ICszMjgsOSBAQAogCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA8IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8wKQogCQlnb3RvIGRvbmU7CiAKKwkvKiBOb3RlOiA+PSB2NSBoYXZlIGJnIGZyZXEgcGllcnMgb24gYW5vdGhlciBsb2NhdGlvbgorCSAqIHNvIHRoZXNlIGZyZXEgcGllcnMgYXJlIGlnbm9yZWQgZm9yID49IHY1IChzaG91bGQgYmUgMHhmZgorCSAqIGFueXdheSkgKi8KIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA8IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8xKQpAQCAtNDQyLDcgKzQ1OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLQorLyogUmVhZCBtb2RlLXNwZWNpZmljIGRhdGEgKGV4Y2VwdCBwb3dlciBjYWxpYnJhdGlvbiBkYXRhKSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX2luaXRfbW9kZXMoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKQEAgLTQ4OCwxMiArNTA0LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFVzZWQgdG8gbWF0Y2ggUENEQUMgc3RlcHMgd2l0aCBwb3dlciB2YWx1ZXMgb24gUkY1MTExIGNoaXBzCisgKiAoZWVwcm9tIHZlcnNpb25zIDwgNCkuIEZvciBSRjUxMTEgd2UgaGF2ZSAxMCBwcmUtZGVmaW5lZCBQQ0RBQworICogc3RlcHMgdGhhdCBtYXRjaCB3aXRoIHRoZSBwb3dlciB2YWx1ZXMgd2UgcmVhZCBmcm9tIGVlcHJvbS4gT24KKyAqIG9sZGVyIGVlcHJvbSB2ZXJzaW9ucyAoPCAzLjIpIHRoZXNlIHN0ZXBzIGFyZSBlcXVhbHkgc3BhY2VkIGF0CisgKiAxMCUgb2YgdGhlIHBjZGFjIGN1cnZlIC11bnRpbCB0aGUgY3VydmUgcmVhY2hlcyBpdCdzIG1heGltdW0tCisgKiAoMTAgc3RlcHMgZnJvbSAwIHRvIDEwMCUpIGJ1dCBvbiBuZXdlciBlZXByb20gdmVyc2lvbnMgKD49IDMuMikKKyAqIHRoZXNlIDEwIHN0ZXBzIGFyZSBzcGFjZWQgaW4gYSBkaWZmZXJlbnQgd2F5LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIHRoZSBwY2RhYyBzdGVwcyBiYXNlZCBvbiBlZXByb20gdmVyc2lvbiBhbmQgY3VydmUgbWluL21heCBzbyB0aGF0IHdlCisgKiBjYW4gaGF2ZSAgcGNkYWMvcHdyIHBvaW50cy4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkCiBhdGg1a19nZXRfcGNkYWNfaW50ZXJjZXB0cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtaW4sIHU4IG1heCwgdTggKnZwKQogewotCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNbXSA9CisJc3RhdGljIGNvbnN0IHUxNiBpbnRlcmNlcHRzM1tdID0KIAkJeyAwLCA1LCAxMCwgMjAsIDMwLCA1MCwgNzAsIDg1LCA5MCwgOTUsIDEwMCB9OwotCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNfMltdID0KKwlzdGF0aWMgY29uc3QgdTE2IGludGVyY2VwdHMzXzJbXSA9CiAJCXsgMCwgMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwIH07CiAJY29uc3QgdTE2ICppcDsKIAlpbnQgaTsKQEAgLTUwNywzNyArNTMzLDQ4IEBACiAJCSp2cCsrID0gKGlwW2ldICogbWF4ICsgKDEwMCAtIGlwW2ldKSAqIG1pbikgLyAxMDA7CiB9CiAKKy8qIFJlYWQgdGhlIGZyZXF1ZW5jeSBwaWVycyBmb3IgZWFjaCBtb2RlIChtb3N0bHkgdXNlZCBvbiBuZXdlciBlZXByb21zIHdpdGggMHhmZgorICogZnJlcXVlbmN5IG1hc2spICovCiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfZWVwcm9tX3JlYWRfZnJlcV9saXN0KHN0cnVjdCBhdGg1a19odyAqYWgsIGludCAqb2Zmc2V0LCBpbnQgbWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGMsIHU4ICpjb3VudCkKKwkJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGMsIHVuc2lnbmVkIGludCBtb2RlKQogeworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCWludCBvID0gKm9mZnNldDsKIAlpbnQgaSA9IDA7Ci0JdTggZjEsIGYyOworCXU4IGZyZXExLCBmcmVxMjsKIAlpbnQgcmV0OwogCXUxNiB2YWw7CiAKIAl3aGlsZShpIDwgbWF4KSB7CiAJCUFSNUtfRUVQUk9NX1JFQUQobysrLCB2YWwpOwogCi0JCWYxID0gKHZhbCA+PiA4KSAmIDB4ZmY7Ci0JCWYyID0gdmFsICYgMHhmZjsKKwkJZnJlcTEgPSAodmFsID4+IDgpICYgMHhmZjsKKwkJZnJlcTIgPSB2YWwgJiAweGZmOwogCi0JCWlmIChmMSkKLQkJCXBjW2krK10uZnJlcSA9IGYxOworCQlpZiAoZnJlcTEpIHsKKwkJCXBjW2krK10uZnJlcSA9IGF0aDVrX2VlcHJvbV9iaW4yZnJlcShlZSwKKwkJCQkJZnJlcTEsIG1vZGUpOworCQkJZWUtPmVlX25fcGllcnNbbW9kZV0rKzsKKwkJfQogCi0JCWlmIChmMikKLQkJCXBjW2krK10uZnJlcSA9IGYyOworCQlpZiAoZnJlcTIpIHsKKwkJCXBjW2krK10uZnJlcSA9IGF0aDVrX2VlcHJvbV9iaW4yZnJlcShlZSwKKwkJCQkJZnJlcTIsIG1vZGUpOworCQkJZWUtPmVlX25fcGllcnNbbW9kZV0rKzsKKwkJfQogCi0JCWlmICghZjEgfHwgIWYyKQorCQlpZiAoIWZyZXExIHx8ICFmcmVxMikKIAkJCWJyZWFrOwogCX0KKworCS8qIHJldHVybiBuZXcgb2Zmc2V0ICovCiAJKm9mZnNldCA9IG87Ci0JKmNvdW50ID0gaTsKIAogCXJldHVybiAwOwogfQogCisvKiBSZWFkIGZyZXF1ZW5jeSBwaWVycyBmb3IgODAyLjExYSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX2luaXRfMTFhX3BjYWxfZnJlcShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgb2Zmc2V0KQogewpAQCAtNTUwLDcgKzU4Nyw3IEBACiAJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fM18zKSB7CiAJCWF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChhaCwgJm9mZnNldCwKIAkJCUFSNUtfRUVQUk9NX05fNUdIWl9DSEFOLCBwY2FsLAotCQkJJmVlLT5lZV9uX3BpZXJzW0FSNUtfRUVQUk9NX01PREVfMTFBXSk7CisJCQlBUjVLX0VFUFJPTV9NT0RFXzExQSk7CiAJfSBlbHNlIHsKIAkJbWFzayA9IEFSNUtfRUVQUk9NX0ZSRVFfTShhaC0+YWhfZWVfdmVyc2lvbik7CiAKQEAgLTU3NywyMyArNjE0LDI1IEBACiAKIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKIAkJcGNhbFs5XS5mcmVxIHw9ICh2YWwgPj4gMTApICYgMHgzZjsKLQkJZWUtPmVlX25fcGllcnNbQVI1S19FRVBST01fTU9ERV8xMUFdID0gMTA7Ci0JfQogCi0JZm9yKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkgKz0gMSkgewotCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCS8qIEZpeGVkIG51bWJlciBvZiBwaWVycyAqLworCQllZS0+ZWVfbl9waWVyc1tBUjVLX0VFUFJPTV9NT0RFXzExQV0gPSAxMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkrKykgeworCQkJcGNhbFtpXS5mcmVxID0gYXRoNWtfZWVwcm9tX2JpbjJmcmVxKGVlLAogCQkJCXBjYWxbaV0uZnJlcSwgQVI1S19FRVBST01fTU9ERV8xMUEpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlYWQgZnJlcXVlbmN5IHBpZXJzIGZvciA4MDIuMTFiZyBvbiBlZXByb20gdmVyc2lvbnMgPj0gNSBhbmQgZWVtYXAgPj0gMiAqLwogc3RhdGljIGlubGluZSBpbnQKIGF0aDVrX2VlcHJvbV9pbml0XzExYmdfMjQxMyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjYWw7Ci0JaW50IGk7CiAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6CkBAIC02MDgsMjMgKzY0NywyNSBAQAogCiAJYXRoNWtfZWVwcm9tX3JlYWRfZnJlcV9saXN0KGFoLCAmb2Zmc2V0LAogCQlBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzLCBwY2FsLAotCQkmZWUtPmVlX25fcGllcnNbbW9kZV0pOwotCWZvcihpID0gMDsgaSA8IEFSNUtfRUVQUk9NX05fMkdIWl9DSEFOXzI0MTM7IGkgKz0gMSkgewotCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCi0JCQkJcGNhbFtpXS5mcmVxLCBtb2RlKTsKLQl9CisJCW1vZGUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLQorLyogUmVhZCBwb3dlciBjYWxpYnJhdGlvbiBmb3IgUkY1MTExIGNoaXBzCisgKiBGb3IgUkY1MTExIHdlIGhhdmUgYW4gWFBEIC1lWHRlcm5hbCBQb3dlciBEZXRlY3Rvci0gY3VydmUKKyAqIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbC4gRWFjaCBjdXJ2ZSBoYXMgUENEQUMgc3RlcHMgb24KKyAqIHggYXhpcyBhbmQgcG93ZXIgb24geSBheGlzIGFuZCBsb29rcyBsaWtlIGEgbG9nYXJpdGhtaWMKKyAqIGZ1bmN0aW9uLiBUbyByZWNyZWF0ZSB0aGUgY3VydmUgYW5kIHBhc3MgdGhlIHBvd2VyIHZhbHVlcworICogb24gdGhlIHBjZGFjIHRhYmxlLCB3ZSByZWFkIDEwIHBvaW50cyBoZXJlIGFuZCBpbnRlcnBvbGF0ZSBsYXRlci4KKyAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvXzUxMTEoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpwY2FsOwogCWludCBvZmZzZXQsIHJldDsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAl1MTYgdmFsOwogCiAJb2Zmc2V0ID0gQVI1S19FRVBST01fR1JPVVBTX1NUQVJUKGVlLT5lZV92ZXJzaW9uKTsKQEAgLTcwNCwxNiArNzQ1LDIyIEBACiAKIAkJYXRoNWtfZ2V0X3BjZGFjX2ludGVyY2VwdHMoYWgsIGNkYXRhLT5wY2RhY19taW4sCiAJCQljZGF0YS0+cGNkYWNfbWF4LCBjZGF0YS0+cGNkYWMpOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUjVLX0VFUFJPTV9OX1BDREFDOyBqKyspIHsKLQkJCWNkYXRhLT5wd3Jbal0gPSAodTE2KQotCQkJCShBUjVLX0VFUFJPTV9QT1dFUl9TVEVQICogY2RhdGEtPnB3cltqXSk7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorLyogUmVhZCBwb3dlciBjYWxpYnJhdGlvbiBmb3IgUkY1MTEyIGNoaXBzCisgKiBGb3IgUkY1MTEyIHdlIGhhdmUgNCBYUEQgLWVYdGVybmFsIFBvd2VyIERldGVjdG9yLSBjdXJ2ZXMKKyAqIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbCBvbiAwLCAtNiwgLTEyIGFuZCAtMThkYm0gYnV0IHdlIG9ubHkKKyAqIHVzZSB0aGUgaGlnaGVyICgzKSBhbmQgdGhlIGxvd2VyICgwKSBjdXJ2ZXMuIEVhY2ggY3VydmUgaGFzIFBDREFDCisgKiBzdGVwcyBvbiB4IGF4aXMgYW5kIHBvd2VyIG9uIHkgYXhpcyBhbmQgbG9va3MgbGlrZSBhIGxpbmVhcgorICogZnVuY3Rpb24uIFRvIHJlY3JlYXRlIHRoZSBjdXJ2ZSBhbmQgcGFzcyB0aGUgcG93ZXIgdmFsdWVzCisgKiBvbiB0aGUgcGNkYWMgdGFibGUsIHdlIHJlYWQgNCBwb2ludHMgZm9yIHhwZCAwIGFuZCAzIHBvaW50cworICogZm9yIHhwZCAzIGhlcmUgYW5kIGludGVycG9sYXRlIGxhdGVyLgorICoKKyAqIE5vdGU6IE1hbnkgdmVuZG9ycyBqdXN0IHVzZSB4cGQgMCBzbyB4cGQgMyBpcyB6ZXJvZWQuCisgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb181MTEyKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewpAQCAtNzkwLDcgKzgzNyw3IEBACiAKIAkJLyogUENEQUMgc3RlcHMKIAkJICogY29ycmVzcG9uZGluZyB0byB0aGUgYWJvdmUgcG93ZXIKLQkJICogbWVhc3VyZW1lbnRzIChzdGF0aWMpICovCisJCSAqIG1lYXN1cmVtZW50cyAoZml4ZWQpICovCiAJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194M1swXSA9IDIwOwogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDNbMV0gPSAzNTsKIAkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gzWzJdID0gNjM7CkBAIC04MTQsNiArODYxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEZvciBSRjI0MTMgcG93ZXIgY2FsaWJyYXRpb24gZGF0YSBkb2Vzbid0IHN0YXJ0IG9uIGEgZml4ZWQgbG9jYXRpb24gYW5kCisgKiBpZiBhIG1vZGUgaXMgbm90IHN1cHBvcnRlZCwgaXQncyBzZWN0aW9uIGlzIG1pc3NpbmcgLW5vdCB6ZXJvZWQtLgorICogU28gd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIG9mZnNldCBmb3IgZWFjaCBzZWN0aW9uIGJ5IHVzaW5nCisgKiB0aGVzZSB0d28gZnVuY3Rpb25zICovCisKKy8qIFJldHVybiB0aGUgc2l6ZSBvZiBlYWNoIHNlY3Rpb24gYmFzZWQgb24gdGhlIG1vZGUgYW5kIHRoZSBudW1iZXIgb2YgcGQKKyAqIGdhaW5zIGF2YWlsYWJsZSAobWF4aW11bSA0KS4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKQEAgLTgyNiw2ICs4ODAsOCBAQAogCXJldHVybiBzejsKIH0KIAorLyogUmV0dXJuIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGEgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbW9kZXMgc3VwcG9ydGVkCisgKiBhbmQgZWFjaCBzZWN0aW9uJ3Mgc2l6ZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGF0aDVrX2NhbF9kYXRhX29mZnNldF8yNDEzKHN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUsIGludCBtb2RlKQogewpAQCAtODM0LDExICs4OTAsMTMgQEAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUc6CiAJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFCKGVlLT5lZV9oZWFkZXIpKQotCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLCBBUjVLX0VFUFJPTV9NT0RFXzExQikgKyAyOworCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLCBBUjVLX0VFUFJPTV9NT0RFXzExQikgKworCQkJCQkJCUFSNUtfRUVQUk9NX05fMkdIWl9DSEFOXzI0MTMgLyAyOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgogCQlpZiAoQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKLQkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwgQVI1S19FRVBST01fTU9ERV8xMUEpICsgNTsKKwkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwgQVI1S19FRVBST01fTU9ERV8xMUEpICsKKwkJCQkJCQlBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTiAvIDI7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWJyZWFrOwpAQCAtODQ5LDYgKzkwNywxNyBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKKy8qIFJlYWQgcG93ZXIgY2FsaWJyYXRpb24gZm9yIFJGMjQxMyBjaGlwcworICogRm9yIFJGMjQxMyB3ZSBoYXZlIGEgUEREQUMgdGFibGUgKFBvd2VyIERldGVjdG9yKSBpbnN0ZWFkCisgKiBvZiBhIFBDREFDIGFuZCA0IHBkIGdhaW4gY3VydmVzIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbC4KKyAqIEVhY2ggY3VydmUgaGFzIFBEREFDIHN0ZXBzIG9uIHggYXhpcyBhbmQgcG93ZXIgb24geSBheGlzIGFuZAorICogbG9va3MgbGlrZSBhbiBleHBvbmVudGlhbCBmdW5jdGlvbi4gVG8gcmVjcmVhdGUgdGhlIGN1cnZlcworICogd2UgcmVhZCBoZXJlIHRoZSBwb2ludHMgYW5kIGludGVycG9sYXRlIGxhdGVyLiBOb3RlIHRoYXQKKyAqIGluIG1vc3QgY2FzZXMgb25seSBoaWdoZXIgYW5kIGxvd2VyIGN1cnZlcyBhcmUgdXNlZCAobGlrZQorICogUkY1MTEyKSBidXQgdmVuZG9ycyBoYXZlIHRoZSBvcG9ydHVuaXR5IHRvIGluY2x1ZGUgYWxsIDQKKyAqIGN1cnZlcyBvbiBlZXByb20uIFRoZSBmaW5hbCBjdXJ2ZSAoaGlnaGVyIHBvd2VyKSBoYXMgYW4gZXh0cmEKKyAqIHBvaW50IGZvciBiZXR0ZXIgYWNjdXJhY3kgbGlrZSBSRjUxMTIuCisgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb18yNDEzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewpAQCAtODY4LDYgKzkzNyw3IEBACiAJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gcGRfZ2FpbnM7CiAKIAlvZmZzZXQgPSBhdGg1a19jYWxfZGF0YV9vZmZzZXRfMjQxMyhlZSwgbW9kZSk7CisJZWUtPmVlX25fcGllcnNbbW9kZV0gPSAwOwogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWlmICghQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKQEAgLTExNjMsNiArMTIzMywyMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVhZCBwZXIgY2hhbm5lbCBjYWxpYnJhdGlvbiBpbmZvIGZyb20gRUVQUk9NCisgKgorICogVGhpcyBpbmZvIGlzIHVzZWQgdG8gY2FsaWJyYXRlIHRoZSBiYXNlYmFuZCBwb3dlciB0YWJsZS4gSW1hZ2luZQorICogdGhhdCBmb3IgZWFjaCBjaGFubmVsIHRoZXJlIGlzIGEgcG93ZXIgY3VydmUgdGhhdCdzIGh3IHNwZWNpZmljCisgKiAoZGVwZW5kcyBvbiBhbXBsaWZpZXIgZXRjKSBhbmQgd2UgdHJ5IHRvICJjb3JyZWN0IiB0aGlzIGN1cnZlIHVzaW5nCisgKiBvZmZlc3RzIHdlIHBhc3Mgb24gdG8gcGh5IGNoaXAgKGJhc2ViYW5kIC0+IGJlZm9yZSBhbXBsaWZpZXIpIHNvIHRoYXQKKyAqIGl0IGNhbiB1c2UgYWNjdXJhdGUgcG93ZXIgdmFsdWVzIHdoZW4gc2V0dGluZyB0eCBwb3dlciAodGFrZXMgYW1wbGlmaWVyJ3MKKyAqIHBlcmZvcm1hbmNlIG9uIGVhY2ggY2hhbm5lbCBpbnRvIGFjY291bnQpLgorICoKKyAqIEVFUFJPTSBwcm92aWRlcyB1cyB3aXRoIHRoZSBvZmZzZXRzIGZvciBzb21lIHByZS1jYWxpYnJhdGVkIGNoYW5uZWxzCisgKiBhbmQgd2UgaGF2ZSB0byBpbnRlcnBvbGF0ZSB0byBjcmVhdGUgdGhlIGZ1bGwgdGFibGUgZm9yIHRoZXNlIGNoYW5uZWxzIGFuZAorICogYWxzbyB0aGUgdGFibGUgZm9yIGFueSBjaGFubmVsLgorICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9wY2FsX2luZm8oc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKQEAgLTExOTMsNyArMTI3Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgKi8KKy8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgdXNlZCBmb3IgcmVndWxhdG9yeSBjb250cm9sICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9jdGxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtMTMyOCwxOSArMTQxMiwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKIC8qCiAgKiBSZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIGVlcHJvbQogICovCiBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpCiB7Ci0JdTggbWFjX2RbRVRIX0FMRU5dOworCXU4IG1hY19kW0VUSF9BTEVOXSA9IHt9OwogCXUzMiB0b3RhbCwgb2Zmc2V0OwogCXUxNiBkYXRhOwogCWludCBvY3RldCwgcmV0OwogCi0JbWVtc2V0KG1hYywgMCwgRVRIX0FMRU4pOwotCW1lbXNldChtYWNfZCwgMCwgRVRIX0FMRU4pOwotCiAJcmV0ID0gYXRoNWtfaHdfZWVwcm9tX3JlYWQoYWgsIDB4MjAsICZkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTM1NiwxMSArMTQzOCwyMiBAQAogCQlvY3RldCArPSAyOwogCX0KIAotCW1lbWNweShtYWMsIG1hY19kLCBFVEhfQUxFTik7Ci0KIAlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKKwogCXJldHVybiAwOwogfQogCitib29sIGF0aDVrX2VlcHJvbV9pc19oYjYzKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJdTE2IGRhdGE7CisKKwlhdGg1a19od19lZXByb21fcmVhZChhaCwgQVI1S19FRVBST01fSVNfSEI2MywgJmRhdGEpOworCisJaWYgKChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MjUgPj4gNCkpICYmIGRhdGEpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaAppbmRleCAwOWViN2QwLi4xZGVlYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBBUjVLX0VFUFJPTV9NQUdJQ181MjExCQkweDAwMDAxNDViIC8qIDUyMTEgKi8KICNkZWZpbmUgQVI1S19FRVBST01fTUFHSUNfNTIxMAkJMHgwMDAwMTQ1YSAvKiA1MjEwICovCiAKKyNkZWZpbmUJQVI1S19FRVBST01fSVNfSEI2MwkJMHgwMDBiCS8qIFRhbG9uIGRldGVjdCAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9SRUdfRE9NQUlOCQkweDAwYmYJLyogRUVQUk9NIHJlZ2RvbSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9DSEVDS1NVTQkJMHgwMGMwCS8qIEVFUFJPTSBjaGVja3N1bSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9JTkZPX0JBU0UJCTB4MDBjMAkvKiBFRVBST00gaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ncGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ncGlvLmMKaW5kZXggYjc3MjA1YS4uNjRhMjdlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2dwaW8uYwpAQCAtODMsNyArODMsNyBAQAogaW50IGF0aDVrX2h3X3NldF9ncGlvX2lucHV0KHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBncGlvKQogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLApAQCAtOTksNyArOTksNyBAQAogaW50IGF0aDVrX2h3X3NldF9ncGlvX291dHB1dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChncGlvID4gQVI1S19OVU1fR1BJTykKKwlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKQEAgLTExNSw3ICsxMTUsNyBAQAogdTMyIGF0aDVrX2h3X2dldF9ncGlvKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBncGlvKQogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAweGZmZmZmZmZmOwogCiAJLyogR1BJTyBpbnB1dCBtYWdpYyAqLwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJdTMyIGRhdGE7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAotCWlmIChncGlvID4gQVI1S19OVU1fR1BJTykKKwlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEdQSU8gb3V0cHV0IG1hZ2ljICovCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl1MzIgZGF0YTsKIAogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybjsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYwppbmRleCA0NTBiZDZlLi40NDg4NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMKQEAgLTIsNyArMiw3IEBACiAgKiBJbml0aWFsIHJlZ2lzdGVyIHNldHRpbmdzIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA3IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CkBAIC0zNDAsNyArMzQwLDcgQEAKIAkgKiBjb21tb24gb24gYWxsIGNhcmRzL21vZGVzLgogCSAqIE5vdGU6IFRhYmxlIGlzIHJld3JpdHRlbiBkdXJpbmcKIAkgKiB0eHBvd2VyIHNldHVwIGxhdGVyIHVzaW5nIGNhbGlicmF0aW9uCi0JICogZGF0YSBldGMuIHNvIG5leHQgd3JpdGUgaXMgbm9uLWNvbW1vbgorCSAqIGRhdGEgZXRjLiBzbyBuZXh0IHdyaXRlIGlzIG5vbi1jb21tb24gKi8KIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMSksIDB4MDZmZjA1ZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMiksIDB4MDdmZjA3ZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMyksIDB4MDhmZjA4ZmYgfSwKQEAgLTM3MSw3ICszNzEsNyBAQAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigyOCksIDB4M2FmZjNhZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMjkpLCAweDNhZmYzYWZmIH0sCiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDMwKSwgMHgzYWZmM2FmZiB9LAotCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigzMSksIDB4M2FmZjNhZmYgfSwqLworCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigzMSksIDB4M2FmZjNhZmYgfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1BIWSg2NDIpLCAweDUwM2U0NjQ2IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosIDB4NjQ4MDQxNmMgfSwKQEAgLTM4Niw4NSArMzg2LDg1IEBACiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMQotICogWFhYOiBob3cgYWJvdXQgZyAvIGdUdXJibyA/IFJGNTExMSBzdXBwb3J0cyBpdCwgaG93IGFib3V0IEFSNTIxMSA/Ci0gKiBNYXliZSA1MjExIHN1cHBvcnRzIE9GRE0tb25seSBnIGJ1dCB3ZSBuZWVkIHRvIHRlc3QgaXQgIQorICogNTIxMSBzdXBwb3J0cyBPRkRNLW9ubHkgZyAoZHJhZnQgZykgYnV0IHdlCisgKiBuZWVkIHRvIHRlc3QgaXQgIQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIGFyNTIxMV9pbmlfbW9kZVtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgIGEJICAgICAgYVR1cmJvCSAgYgkJKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDFkIH0gfSwKKwkvKgkgIGEJICAgIGFUdXJibwkgIGIJICBnIChPRkRNKSAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygxKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDIpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMyksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg0KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDUpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNiksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg3KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDgpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0xPVCwKLQkJeyAweDAwMDAwMTY4LCAweDAwMDAwMWUwLCAweDAwMDAwMWI4IH0gfSwKKwkgICB7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjgsIDB4MDAwMDAxNjggfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TSUZTLAotCQl7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAgfSB9LAorCSAgIHsgMHgwMDAwMDIzMCwgMHgwMDAwMDFlMCwgMHgwMDAwMDBiMCwgMHgwMDAwMDIzMCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX0VJRlMsCi0JCXsgMHgwMDAwMGQ5OCwgMHgwMDAwMTE4MCwgMHgwMDAwMWY0OCB9IH0sCisJICAgeyAweDAwMDAwZDk4LCAweDAwMDAxMTgwLCAweDAwMDAxZjQ4LCAweDAwMDAwZDk4IH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfTUlTQywKLQkJeyAweDAwMDBhMGUwLCAweDAwMDE0MDY4LCAweDAwMDA1ODgwIH0gfSwKKwkgICB7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAsIDB4MDAwMGEwZTAgfSB9LAogCXsgQVI1S19USU1FX09VVCwKLQkJeyAweDA0MDAwNDAwLCAweDA4MDAwODAwLCAweDIwMDAzMDAwIH0gfSwKKwkgICB7IDB4MDQwMDA0MDAsIDB4MDgwMDA4MDAsIDB4MjAwMDMwMDAsIDB4MDQwMDA0MDAgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgwZThkOGZhNywgMHgwZThkOGZjZiwgMHgwMTYwOGY5NSB9IH0sCisJICAgeyAweDBlOGQ4ZmE3LCAweDBlOGQ4ZmNmLCAweDAxNjA4Zjk1LCAweDBlOGQ4ZmE3IH0gfSwKIAl7IEFSNUtfUEhZX1RVUkJPLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCiAJeyBBUjVLX1BIWSg4KSwKLQkJeyAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDEwMjAwIH0gfSwKKwkgICB7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAsIDB4MDIwMjAyMDAgfSB9LAogCXsgQVI1S19QSFkoOSksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNyB9IH0sCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwNzA3LCAweDAwMDAwZTBlIH0gfSwKIAl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDEwMDAwIH0gfSwKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAwMDAsIDB4MGEwMjAwMDEgfSB9LAogCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCiAJeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiB9IH0sCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKIAl7IEFSNUtfUEhZKDE3KSwKLQkJeyAweDEzNzIxNjljLCAweDEzNzIxNmE1LCAweDEzNzIxNmE4IH0gfSwKKwkgICB7IDB4MTM3MjE2OWMsIDB4MTM3MjE2YTUsIDB4MTM3MjE2YTgsIDB4MTM3MjE2OWMgfSB9LAogCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOGJhNjcsIDB4MDAxOGJhNjcsIDB4MDAxOGJhNjkgfSB9LAorCSAgIHsgMHgwMDE4YmE2NywgMHgwMDE4YmE2NywgMHgwMDE4YmE2OSwgMHgwMDE4YmE2OSB9IH0sCiAJeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwYzI4YjRlMCwgMHgwYzI4YjRlMCwgMHgwYzI4YjRlMCB9IH0sCisJICAgeyAweDBjMjhiNGUwLCAweDBjMjhiNGUwLCAweDBjMjhiNGUwLCAweDBjMjhiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlYzAwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VjMDBkMmUsIDB4N2U4MDBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzVkNWUsIDB4MzEzNzVkNWUsIDB4MzEzYTVkNWUgfSB9LAorCSAgIHsgMHgzMTM3NWQ1ZSwgMHgzMTM3NWQ1ZSwgMHgzMTNhNWQ1ZSwgMHgzMTM3NWQ1ZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDVEwsCi0JCXsgMHgwMDAwYmQxMCwgMHgwMDAwYmQxMCwgMHgwMDAwYmQzOCB9IH0sCisJICAgeyAweDAwMDBiZDEwLCAweDAwMDBiZDEwLCAweDAwMDBiZDM4LCAweDAwMDBiZDEwIH0gfSwKIAl7IEFSNUtfUEhZX05GLAotCQl7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAorCSAgIHsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjIH0gfSwKKwkgICB7IDB4MDAwMDI3MTAsIDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MsIDB4MDAwMDI3MTAgfSB9LAogCXsgQVI1S19QSFkoNzApLAotCQl7IDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIDB4MDAwMDAwODQgfSB9LAorCSAgIHsgMHgwMDAwMDE5MCwgMHgwMDAwMDE5MCwgMHgwMDAwMDA4NCwgMHgwMDAwMDE5MCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweDZmZTAxMDIwLCAweDZmZTAxMDIwLCAweDZmZTAwOTIwIH0gfSwKLQl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRV81MjExLAotCQl7IDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYgfSB9LAorCSAgIHsgMHg2ZmUwMTAyMCwgMHg2ZmUwMTAyMCwgMHg2ZmUwMDkyMCwgMHg2ZmUwMTAyMCB9IH0sCisJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0UsCisJICAgeyAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmLCAweDA1ZmYxOWZmIH0gfSwKIAl7IEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNCwKLQkJeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwIH0gfSwKKwkgICB7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSB9LAogfTsKIAogLyogSW5pdGlhbCByZWdpc3RlciBzZXR0aW5ncyBmb3IgQVI1MjEyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSBhcjUyMTJfaW5pW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSBhcjUyMTJfaW5pX2NvbW1vbl9zdGFydFtdID0gewogCXsgQVI1S19SWERQLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19SWENGRywJCTB4MDAwMDAwMDUgfSwKIAl7IEFSNUtfTUlCQywJCTB4MDAwMDAwMDAgfSwKQEAgLTQ4NSw5MSArNDg1LDgzIEBACiAJeyBBUjVLX1FVRVVFX1RYRFAoOSksCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfVFhQLAkJMHgwMDAwMDAwMCB9LAotCXsgQVI1S19EQ1VfVFhfRklMVEVSXzBfQkFTRSwJMHgwMDAwMDAwMCB9LAotCS8qIFVua25vd24gdGFibGUgKi8KLQl7IDB4MTA3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMGI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEwZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTEzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMTc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDExYjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTFmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMjM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEyNzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTJiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMmY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEzMzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTM3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxM2I4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEzZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTQzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNDc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE0YjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTRmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNTM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE1NzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTViOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNWY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE2MzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTY3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNmI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE2ZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTczOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNzc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE3YjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTdmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMDNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEwN2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTBiYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMGZjLCAweDAwMDAwMDAwIH0sCi0JeyAweDExM2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTE3YywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMWJjLCAweDAwMDAwMDAwIH0sCi0JeyAweDExZmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTIzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMjdjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEyYmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTJmYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMzNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEzN2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTNiYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxM2ZjLCAweDAwMDAwMDAwIH0sCi0JeyAweDE0M2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTQ3YywgMHgwMDAwMDAwMCB9LAorCS8qIFR4IGZpbHRlciB0YWJsZSAwICgzMiBlbnRyaWVzKSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMCksICAweDAwMDAwMDAwIH0sIC8qIERDVSAwICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMyksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg0KSwgIDB4MDAwMDAwMDAgfSwgLyogRENVIDEgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDUpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoNiksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg3KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDgpLCAgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgMiAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoOSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxMCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDExKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTIpLCAweDAwMDAwMDAwIH0sIC8qIERDVSAzICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxMyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE0KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTUpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxNiksIDB4MDAwMDAwMDAgfSwgLyogRENVIDQgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE3KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTgpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxOSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIwKSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgNSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjEpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyMiksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIzKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjQpLCAweDAwMDAwMDAwIH0sIC8qIERDVSA2ICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyNSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI2KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjcpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyOCksIDB4MDAwMDAwMDAgfSwgLyogRENVIDcgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI5KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMzApLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgzMSksIDB4MDAwMDAwMDAgfSwKKwkvKiBUeCBmaWx0ZXIgdGFibGUgMSAoMTYgZW50cmllcykgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDApLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgyKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDMpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoNCksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg1KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDYpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoNyksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg4KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDkpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTApLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxMSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDEyKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTMpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxNCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDE1KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSX0NMUiwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSX1NFVCwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfVFhfRklMVEVSX0NMUiwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfVFhfRklMVEVSX1NFVCwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19TVEFfSUQxLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CU1NfSUQwLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CU1NfSUQxLAkJMHgwMDAwMDAwMCB9LAotCS8qeyBBUjVLX1JTU0lfVEhSLAkweDAwMDAwMDAwIH0sKi8JLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19CRUFDT05fNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX0NGUF9QRVJJT0RfNTIxMSwgMHgwMDAwMDAwMCB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1RJTUVSMF81MjExLAkweDAwMDAwMDMwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfVElNRVIxXzUyMTEsCTB4MDAwN2ZmZmYgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19USU1FUjJfNTIxMSwJMHgwMWZmZmZmZiB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1RJTUVSM181MjExLAkweDAwMDAwMDMxIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfQ0ZQX0RVUl81MjExLAkweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KKwl7IEFSNUtfQkVBQ09OXzUyMTEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0ZQX1BFUklPRF81MjExLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RJTUVSMF81MjExLAkweDAwMDAwMDMwIH0sCisJeyBBUjVLX1RJTUVSMV81MjExLAkweDAwMDdmZmZmIH0sCisJeyBBUjVLX1RJTUVSMl81MjExLAkweDAxZmZmZmZmIH0sCisJeyBBUjVLX1RJTUVSM181MjExLAkweDAwMDAwMDMxIH0sCisJeyBBUjVLX0NGUF9EVVJfNTIxMSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19SWF9GSUxURVJfNTIxMSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19ESUFHX1NXXzUyMTEsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfQUREQUNfVEVTVCwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19ERUZBVUxUX0FOVEVOTkEsCTB4MDAwMDAwMDAgfSwKLQl7IDB4ODA4MCwgMHgwMDAwMDAwMCB9LAotCS8qeyAweDgwNWMsIDB4ZmZmZmM3ZmYgfSwqLyAvKiBPbGQgdmFsdWUgKi8KLQl7IDB4ODA1YywgMHgwMDBmYzc4ZiB9LAotCXsgQVI1S19OQVZfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBOb3QgZm91bmQgb24gcmVjZW50ICovCi0JeyBBUjVLX1JUU19PS181MjExLAkweDAwMDAwMDAwIH0sCS8qIGR1bXBzIGJ1dCBpdCBtYWtlcyAgKi8KLQl7IEFSNUtfUlRTX0ZBSUxfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBzZW5zZSB0byByZXNldCBjb3VudGVycyAqLwotCXsgQVI1S19BQ0tfRkFJTF81MjExLAkweDAwMDAwMDAwIH0sCS8qIHNpbmNlIHBjdSByZWdpc3RlcnMgKi8KLQl7IEFSNUtfRkNTX0ZBSUxfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBhcmUgc2tpcGVkIGR1cmluZyBjaGFuKi8KLQl7IEFSNUtfQkVBQ09OX0NOVF81MjExLCAweDAwMDAwMDAwIH0sCS8qIGNoYW5nZSAqLworCXsgQVI1S19GUkFNRV9DVExfUU9TTSwgCTB4MDAwZmM3OGYgfSwKIAl7IEFSNUtfWFJNT0RFLAkJMHgyYTgyMzAxYSB9LAogCXsgQVI1S19YUkRFTEFZLAkJMHgwNWRjMDFlMCB9LAogCXsgQVI1S19YUlRJTUVPVVQsCTB4MWY0MDI3MTAgfSwKIAl7IEFSNUtfWFJDSElSUCwJCTB4MDFmNDAwMDAgfSwKIAl7IEFSNUtfWFJTVE9NUCwJCTB4MDAwMDFlMWMgfSwKLQl7IEFSNUtfU0xFRVAwLAkJMHgwMDAyYWFhYSB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1NMRUVQMSwJCTB4MDIwMDU1NTUgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19TTEVFUDIsCQkweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KKwl7IEFSNUtfU0xFRVAwLAkJMHgwMDAyYWFhYSB9LAorCXsgQVI1S19TTEVFUDEsCQkweDAyMDA1NTU1IH0sCisJeyBBUjVLX1NMRUVQMiwJCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfQlNTX0lETTAsCTB4ZmZmZmZmZmYgfSwKIAl7IEFSNUtfQlNTX0lETTEsCTB4MDAwMGZmZmYgfSwKIAl7IEFSNUtfVFhQQywJCTB4MDAwMDAwMDAgfSwKQEAgLTU3Nyw3ICs1NjksOCBAQAogCXsgQVI1S19QUk9GQ05UX1JYLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1BST0ZDTlRfUlhDTFIsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUFJPRkNOVF9DWUNMRSwJMHgwMDAwMDAwMCB9LAotCXsgMHg4MGZjLCAweDAwMDAwMDg4IH0sCisJeyBBUjVLX1FVSUVUX0NUTDEsCTB4MDAwMDAwODggfSwKKwkvKiBJbml0aWFsIHJhdGUgZHVyYXRpb24gdGFibGUgKDMyIGVudHJpZXMgKSovCiAJeyBBUjVLX1JBVEVfRFVSKDApLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1JBVEVfRFVSKDEpLAkweDAwMDAwMDhjIH0sCiAJeyBBUjVLX1JBVEVfRFVSKDIpLAkweDAwMDAwMGU0IH0sCkBAIC02MTAsODgxICs2MDMsNjI1IEBACiAJeyBBUjVLX1JBVEVfRFVSKDI5KSwJMHgwMDAwMDA3ZiB9LAogCXsgQVI1S19SQVRFX0RVUigzMCksCTB4MDAwMDAwYTIgfSwKIAl7IEFSNUtfUkFURV9EVVIoMzEpLAkweDAwMDAwMDAwIH0sCi0JeyAweDgxMDAsIDB4MDAwMTAwMDJ9LAorCXsgQVI1S19RVUlFVF9DVEwyLAkweDAwMDEwMDAyIH0sCiAJeyBBUjVLX1RTRl9QQVJNLAkweDAwMDAwMDAxIH0sCi0JeyAweDgxMDgsIDB4MDAwMDAwYzAgfSwKKwl7IEFSNUtfUU9TX05PQUNLLAkweDAwMDAwMGMwIH0sCiAJeyBBUjVLX1BIWV9FUlJfRklMLAkweDAwMDAwMDAwIH0sCi0JeyAweDgxMTAsIDB4MDAwMDAxNjggfSwKLQl7IDB4ODExNCwgMHgwMDAwMDAwMCB9LAotCS8qIFNvbWUga2luZCBvZiB0YWJsZQotCSAqIGFsc28gbm90aWNlIC4uLjAzPC0wMjwtMDE8LTAwKSAqLwotCXsgMHg4N2MwLCAweDAzMDIwMTAwIH0sCi0JeyAweDg3YzQsIDB4MDcwNjA1MDQgfSwKLQl7IDB4ODdjOCwgMHgwYjBhMDkwOCB9LAotCXsgMHg4N2NjLCAweDBmMGUwZDBjIH0sCi0JeyAweDg3ZDAsIDB4MTMxMjExMTAgfSwKLQl7IDB4ODdkNCwgMHgxNzE2MTUxNCB9LAotCXsgMHg4N2Q4LCAweDFiMWExOTE4IH0sCi0JeyAweDg3ZGMsIDB4MWYxZTFkMWMgfSwKLQkvKiBsb29wID8gKi8KLQl7IDB4ODdlMCwgMHgwMzAyMDEwMCB9LAotCXsgMHg4N2U0LCAweDA3MDYwNTA0IH0sCi0JeyAweDg3ZTgsIDB4MGIwYTA5MDggfSwKLQl7IDB4ODdlYywgMHgwZjBlMGQwYyB9LAotCXsgMHg4N2YwLCAweDEzMTIxMTEwIH0sCi0JeyAweDg3ZjQsIDB4MTcxNjE1MTQgfSwKLQl7IDB4ODdmOCwgMHgxYjFhMTkxOCB9LAotCXsgMHg4N2ZjLCAweDFmMWUxZDFjIH0sCi0JLyogUEhZIHJlZ2lzdGVycyAqLwotCS8qeyBBUjVLX1BIWV9BR0MsIDB4MDAwMDAwMDAgfSwqLwotCXsgQVI1S19QSFkoMyksCTB4YWQ4NDhlMTkgfSwKLQl7IEFSNUtfUEhZKDQpLAkweDdkMjhlMDAwIH0sCi0JeyBBUjVLX1BIWV9USU1JTkdfMywgMHg5YzBhOWY2YiB9LAotCXsgQVI1S19QSFlfQUNULAkweDAwMDAwMDAwIH0sCi0JLyp7IEFSNUtfUEhZKDExKSwgMHgwMDAyMmZmZSB9LCovCi0JLyp7IEFSNUtfUEhZKDE1KSwgMHgwMDAyMDEwMCB9LCovCi0JeyBBUjVLX1BIWSgxNiksCTB4MjA2YTAxN2EgfSwKLQkvKnsgQVI1S19QSFkoMTkpLCAweDEyODQ2MTNjIH0sKi8KLQl7IEFSNUtfUEhZKDIxKSwJMHgwMDAwMDg1OSB9LAotCXsgQVI1S19QSFkoNjQpLAkweDAwMDAwMDAwIH0sCi0JeyBBUjVLX1BIWSg2NSksCTB4MDAwMDAwMDAgfSwKLQl7IEFSNUtfUEhZKDY2KSwJMHgwMDAwMDAwMCB9LAotCXsgQVI1S19QSFkoNjcpLAkweDAwODAwMDAwIH0sCi0JeyBBUjVLX1BIWSg2OCksCTB4MDAwMDAwMDEgfSwKKwl7IEFSNUtfWFJMQVRfVFgsCTB4MDAwMDAxNjggfSwKKwl7IEFSNUtfQUNLU0lGUywJCTB4MDAwMDAwMDAgfSwKKwkvKiBSYXRlIC0+IGRiIHRhYmxlCisJICogbm90aWNlIC4uLjAzPC0wMjwtMDE8LTAwICEgKi8KKwl7IEFSNUtfUkFURTJEQigwKSwJMHgwMzAyMDEwMCB9LAorCXsgQVI1S19SQVRFMkRCKDEpLAkweDA3MDYwNTA0IH0sCisJeyBBUjVLX1JBVEUyREIoMiksCTB4MGIwYTA5MDggfSwKKwl7IEFSNUtfUkFURTJEQigzKSwJMHgwZjBlMGQwYyB9LAorCXsgQVI1S19SQVRFMkRCKDQpLAkweDEzMTIxMTEwIH0sCisJeyBBUjVLX1JBVEUyREIoNSksCTB4MTcxNjE1MTQgfSwKKwl7IEFSNUtfUkFURTJEQig2KSwJMHgxYjFhMTkxOCB9LAorCXsgQVI1S19SQVRFMkRCKDcpLAkweDFmMWUxZDFjIH0sCisJLyogRGIgLT4gUmF0ZSB0YWJsZSAqLworCXsgQVI1S19EQjJSQVRFKDApLAkweDAzMDIwMTAwIH0sCisJeyBBUjVLX0RCMlJBVEUoMSksCTB4MDcwNjA1MDQgfSwKKwl7IEFSNUtfREIyUkFURSgyKSwJMHgwYjBhMDkwOCB9LAorCXsgQVI1S19EQjJSQVRFKDMpLAkweDBmMGUwZDBjIH0sCisJeyBBUjVLX0RCMlJBVEUoNCksCTB4MTMxMjExMTAgfSwKKwl7IEFSNUtfREIyUkFURSg1KSwJMHgxNzE2MTUxNCB9LAorCXsgQVI1S19EQjJSQVRFKDYpLAkweDFiMWExOTE4IH0sCisJeyBBUjVLX0RCMlJBVEUoNyksCTB4MWYxZTFkMWMgfSwKKwkvKiBQSFkgcmVnaXN0ZXJzIChDb21tb24gc2V0dGluZ3MKKwkgKiBmb3IgYWxsIGNoaXBzL21vZGVzKSAqLworCXsgQVI1S19QSFkoMyksCQkweGFkODQ4ZTE5IH0sCisJeyBBUjVLX1BIWSg0KSwJCTB4N2QyOGUwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR18zLAkweDljMGE5ZjZiIH0sCisJeyBBUjVLX1BIWV9BQ1QsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWSgxNiksCQkweDIwNmEwMTdhIH0sCisJeyBBUjVLX1BIWSgyMSksCQkweDAwMDAwODU5IH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS18xLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS18yLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS18zLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS19DVEwsIDB4MDA4MDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FOVF9DVEwsCTB4MDAwMDAwMDEgfSwKIAkvKnsgQVI1S19QSFkoNzEpLCAweDAwMDAwOTJhIH0sKi8gLyogT2xkIHZhbHVlICovCi0JeyBBUjVLX1BIWSg3MSksCTB4MDAwMDBjODAgfSwKLQl7IEFSNUtfUEhZX0lRLAkweDA1MTAwMDAwIH0sCi0JeyBBUjVLX1BIWSg3NCksIDB4MDAwMDAwMDEgfSwKLQl7IEFSNUtfUEhZKDc1KSwgMHgwMDAwMDAwNCB9LAorCXsgQVI1S19QSFlfTUFYX1JYX0xFTiwJMHgwMDAwMGM4MCB9LAorCXsgQVI1S19QSFlfSVEsCQkweDA1MTAwMDAwIH0sCisJeyBBUjVLX1BIWV9XQVJNX1JFU0VULAkweDAwMDAwMDAxIH0sCisJeyBBUjVLX1BIWV9DVEwsCQkweDAwMDAwMDA0IH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUxLCAweDFlMWYyMDIyIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUyLCAweDBhMGIwYzBkIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEVfTUFYLCAweDAwMDAwMDNmIH0sCi0JLyp7IEFSNUtfUEhZKDgwKSwgMHgwMDAwMDAwNCB9LCovCi0JeyBBUjVLX1BIWSg4MiksIDB4OTI4MGIyMTIgfSwKLQl7IEFSNUtfUEhZX1JBREFSLCAweDVkNTBlMTg4IH0sCisJeyBBUjVLX1BIWSg4MiksCQkweDkyODBiMjEyIH0sCisJeyBBUjVLX1BIWV9SQURBUiwJMHg1ZDUwZTE4OCB9LAogCS8qeyBBUjVLX1BIWSg4NiksIDB4MDAwMDAwZmYgfSwqLwotCXsgQVI1S19QSFkoODcpLCAweDAwNGI2YThlIH0sCi0JeyBBUjVLX1BIWSg5MCksCTB4MDAwMDAzY2UgfSwKLQl7IEFSNUtfUEhZKDkyKSwJMHgxOTJmYjUxNSB9LAotCS8qeyBBUjVLX1BIWSg5MyksIDB4MDAwMDAwMDAgfSwqLwotCXsgQVI1S19QSFkoOTQpLAkweDAwMDAwMDAxIH0sCi0JeyBBUjVLX1BIWSg5NSksCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZKDg3KSwJCTB4MDA0YjZhOGUgfSwKKwl7IEFSNUtfUEhZX05GVEhSRVMsCTB4MDAwMDAzY2UgfSwKKwl7IEFSNUtfUEhZX1JFU1RBUlQsCTB4MTkyZmI1MTUgfSwKKwl7IEFSNUtfUEhZKDk0KSwJCTB4MDAwMDAwMDEgfSwKKwl7IEFSNUtfUEhZX1JGQlVTX1JFUSwJMHgwMDAwMDAwMCB9LAogCS8qeyBBUjVLX1BIWSg2NDQpLCAweDAwODBhMzMzIH0sKi8gLyogT2xkIHZhbHVlICovCiAJLyp7IEFSNUtfUEhZKDY0NSksIDB4MDAyMDZjMTAgfSwqLyAvKiBPbGQgdmFsdWUgKi8KLQl7IEFSNUtfUEhZKDY0NCksIDB4MDA4MDYzMzMgfSwKLQl7IEFSNUtfUEhZKDY0NSksIDB4MDAxMDZjMTAgfSwKLQl7IEFSNUtfUEhZKDY0NiksIDB4MDA5YzQwNjAgfSwKLQl7IEFSNUtfUEhZKDY0NyksIDB4MTQ4MzgwMGEgfSwKLQkvKiB7IEFSNUtfUEhZKDY0OCksIDB4MDE4ODMwYzYgfSwqLyAvKiAyNDEzLzI0MjUgKi8KLQl7IEFSNUtfUEhZKDY0OCksIDB4MDE4MzEwNjEgfSwKLQl7IEFSNUtfUEhZKDY0OSksIDB4MDAwMDA0MDAgfSwKKwl7IEFSNUtfUEhZKDY0NCksCTB4MDA4MDYzMzMgfSwKKwl7IEFSNUtfUEhZKDY0NSksCTB4MDAxMDZjMTAgfSwKKwl7IEFSNUtfUEhZKDY0NiksCTB4MDA5YzQwNjAgfSwKKwkvKiB7IEFSNUtfUEhZKDY0NyksIDB4MTQ4MzgwMGEgfSwgKi8KKwkvKiB7IEFSNUtfUEhZKDY0OCksIDB4MDE4MzEwNjEgfSwgKi8gLyogT2xkIHZhbHVlICovCisJeyBBUjVLX1BIWSg2NDgpLAkweDAxODgzMGM2IH0sCisJeyBBUjVLX1BIWSg2NDkpLAkweDAwMDAwNDAwIH0sCiAJLyp7IEFSNUtfUEhZKDY1MCksIDB4MDAwMDAxYjUgfSwqLwotCXsgQVI1S19QSFkoNjUxKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFkoNjUxKSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMywgMHgyMDIwMjAyMCB9LAogCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMiwgMHgyMDIwMjAyMCB9LAogCS8qeyBBUjVLX1BIWSg2NTUpLCAweDEzYzg4OWFmIH0sKi8KLQl7IEFSNUtfUEhZKDY1NiksIDB4Mzg0OTBhMjAgfSwKLQl7IEFSNUtfUEhZKDY1NyksIDB4MDAwMDdiYjYgfSwKLQl7IEFSNUtfUEhZKDY1OCksIDB4MGZmZjNmZmMgfSwKLQkvKnsgQVI1S19QSFlfQ0NLVFhDVEwsIDB4MDAwMDAwMDAgfSwqLworCXsgQVI1S19QSFkoNjU2KSwJMHgzODQ5MGEyMCB9LAorCXsgQVI1S19QSFkoNjU3KSwJMHgwMDAwN2JiNiB9LAorCXsgQVI1S19QSFkoNjU4KSwJMHgwZmZmM2ZmYyB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBBUjUyMTIgKFdyaXR0ZW4gYmVmb3JlIGFyNTIxMl9pbmkpICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIGFyNTIxMl9pbmlfbW9kZV9zdGFydFtdID0gewotCXsgQVI1S19QSFkoNjQwKSwKLQkvKgkgIGEvWFIJICAgICAgYVR1cmJvCSAgYgkgICAgICBnIChEWU4pCSAgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSgwKSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygwKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygyKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDMpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg1KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDYpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNyksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg4KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDkpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX1NJRlMsCi0JCXsgMHgwMDAwMDIzMCwgMHgwMDAwMDFlMCwgMHgwMDAwMDBiMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9IH0sCisJICAgeyAweDAwMDAwMjMwLCAweDAwMDAwMWUwLCAweDAwMDAwMGIwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0xPVCwKLQkJeyAweDAwMDAwMTY4LCAweDAwMDAwMWUwLCAweDAwMDAwMWI4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0gfSwKKwkgICB7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19FSUZTLAotCQl7IDB4MDAwMDBlNjAsIDB4MDAwMDExODAsIDB4MDAwMDFmMWMsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSB9LAorCSAgIHsgMHgwMDAwMGU2MCwgMHgwMDAwMTE4MCwgMHgwMDAwMWYxYywgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX01JU0MsCi0JCXsgMHgwMDAwYTBlMCwgMHgwMDAxNDA2OCwgMHgwMDAwNTg4MCwgMHgwMDAwYjBlMCwgMHgwMDAxNDA2OCB9IH0sCisJICAgeyAweDAwMDBhMGUwLCAweDAwMDE0MDY4LCAweDAwMDA1ODgwLCAweDAwMDBiMGUwLCAweDAwMDE0MDY4IH0gfSwKIAl7IEFSNUtfVElNRV9PVVQsCi0JCXsgMHgwM2U4MDNlOCwgMHgwNmUwMDZlMCwgMHgwNDIwMDQyMCwgMHgwODQwMDg0MCwgMHgwNmUwMDZlMCB9IH0sCisJICAgeyAweDAzZTgwM2U4LCAweDA2ZTAwNmUwLCAweDA0MjAwNDIwLCAweDA4NDAwODQwLCAweDA2ZTAwNmUwIH0gfSwKIAl7IEFSNUtfUEhZX1RVUkJPLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMyB9IH0sCiAJeyBBUjVLX1BIWSg4KSwKLQkJeyAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDEwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0gfSwKLQl7IEFSNUtfUEhZKDkpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDA3MDcsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTcpLAotCQl7IDB4MTM3MjE2MWMsIDB4MTM3MjFjMjUsIDB4MTM3MjE3MjIsIDB4MTM3MjE2YTIsIDB4MTM3MjFjMjUgfSB9LAorCSAgIHsgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwyLAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNywgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9TRVRUTElORywKKwkgICB7IDB4MTM3MjE2MWMsIDB4MTM3MjFjMjUsIDB4MTM3MjE3MjIsIDB4MTM3MjE2YTIsIDB4MTM3MjFjMjUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ1RMLAotCQl7IDB4MDAwMDlkMTAsIDB4MDAwMDlkMTAsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTggfSB9LAorCSAgIHsgMHgwMDAwOWQxMCwgMHgwMDAwOWQxMCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCB9IH0sCiAJeyBBUjVLX1BIWV9ORiwKLQkJeyAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0gfSwKLQl7IEFSNUtfUEhZKDI2KSwKLQkJeyAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwIH0gfSwKKwkgICB7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0hJR0hfVEhSLAorCSAgIHsgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCB9IH0sCiAJeyBBUjVLX1BIWSg3MCksCi0JCXsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiOCwgMHgwMDAwMDA4NCwgMHgwMDAwMDEwOCwgMHgwMDAwMDFiOCB9IH0sCi0JeyBBUjVLX1BIWSg3MyksCi0JCXsgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSB9IH0sCisJICAgeyAweDAwMDAwMWI4LCAweDAwMDAwMWI4LCAweDAwMDAwMDg0LCAweDAwMDAwMTA4LCAweDAwMDAwMWI4IH0gfSwKKwl7IEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsCisJICAgeyAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1IH0gfSwKIAl7IDB4YTIzMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBBUjUyMTIgKyBSRjUxMTEgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIE5ldyBkdW1wIHBlbmRpbmcgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjEyX3JmNTExMV9pbmlfbW9kZV9lbmRbXSA9IHsKLQl7IEFSNUtfUEhZKDY0MCksIC8qIFRoaXMgb25lIGRpZmZlcnMgZnJvbSBhcjUyMTJfaW5pX21vZGVfc3RhcnQgISAqLwotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcgKERZTikJICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDA2LCAweDAwMDAwMDA2IH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmY1MTExX2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkJeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyOGQ4ZmE3LCAweDA5ODgwZmNmLCAweDA0ZTAwZjk1LCAweDEyZTAwZmFiLCAweDA5ODgwZmNmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDEwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMThkYTVhLCAweDAwMThkYTVhLCAweDAwMThjYTY5LCAweDAwMThjYTY5LCAweDAwMThjYTY5IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKKwkgICB7IDB4MTI4ZDhmYTcsIDB4MDk4ODBmY2YsIDB4MDRlMDBmOTUsIDB4MTJlMDBmYWIsIDB4MDk4ODBmY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZGE1YSwgMHgwMDE4ZGE1YSwgMHgwMDE4Y2E2OSwgMHgwMDE4Y2E2OSwgMHgwMDE4Y2E2OSB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTg0ZDJlLCAweDdlZTg0ZDJlLCAweDdlODAwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODRkMmUsIDB4N2VlODRkMmUsIDB4N2U4MDBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzYxNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODAsIDB4MDUwY2IwODAgfSB9LAorCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjE1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODAsIDB4MDUwY2IwODAgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMjcxMCwgMHgwMDAwMjcxMCwgMHgwMDAwMTU3YywgMHgwMDAwMmFmOCwgMHgwMDAwMjcxMCB9IH0sCisJICAgeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjLCAweDAwMDAyYWY4LCAweDAwMDAyNzEwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODBkMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAgfSB9LAorCSAgIHsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHg2NDJjNDE2YSwgMHg2NDJjNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjIH0gfSwKLQl7IEFSNUtfUEhZX1BBUERfUFJPQkUsCi0JCXsgMHgwMDAwNDg4MywgMHgwMDAwNDg4MywgMHgwMDAwNDg4MywgMHgwMDAwNDg4MywgMHgwMDAwNDg4MyB9IH0sCi0JeyBBUjVLX1BIWSg4MCksCi0JCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWSg5MyksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9TUEVORElORywKLQkJeyAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4IH0gfSwKLQl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1IH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmIH0gfSwKKwkgICB7IDB4NjQyYzQxNmEsIDB4NjQyYzQxNmEsIDB4NjQ0MDQxNmEsIDB4NjQ0MDQxNmEsIDB4NjQ0MDQxNmEgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTFfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLCAJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwgCTB4MDAwMjJmZmUgfSwKKwl7IDB4OTgzYywgCQkweDAwMDIwMTAwIH0sCisJeyBBUjVLX1BIWV9HQUlOX09GRlNFVCwJMHgxMjg0NjEzYyB9LAorCXsgQVI1S19QSFlfUEFQRF9QUk9CRSwJMHgwMDAwNDg4MyB9LAorCXsgMHg5OTQwLAkJMHgwMDAwMDAwNCB9LAorCXsgMHg5OTU4LAkJMHgwMDAwMDBmZiB9LAorCXsgMHg5OTc0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfU1BFTkRJTkcsCTB4MDAwMDAwMTggfSwKKwl7IEFSNUtfUEhZX0NDS1RYQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLCAweGQwM2U2Nzg4IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDFiNSB9LAorCXsgMHhhMjNjLAkJMHgxM2M4ODlhZiB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBBUjUyMTIgKyBSRjUxMTIgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIFhYWDogTm8gZHVtcHMgZm9yIHR1cmJvZyB5ZXQsIGJ1dCBpIGZvdW5kIHNldHRpbmdzIGZyb20gb2xkIHZhbHVlcyBzbyBpdCBzaG91bGQgYmUgb2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjEyX3JmNTExMl9pbmlfbW9kZV9lbmRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmY1MTEyX2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgIGEvWFIJICAgICAgYVR1cmJvCSAgYgkgICAgICBnIChEWU4pCSAgZ1R1cmJvICovCi0JCXsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCisJICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFlfR0FJTiwKKwkgICB7IDB4MDAxOGRhNmQsIDB4MDAxOGRhNmQsIDB4MDAxOGNhNzUsIDB4MDAxOGNhNzUsIDB4MDAxOGNhNzUgfSB9LAorCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCSAgIHsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWU4MGQyZSB9IH0sCisJICAgeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlIH0gfSwKLQl7IEFSNUtfUEhZKDI3KSwKLQkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAorCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweGY3YjgxMDIwLCAweGY3YjgxMDIwLCAweGY3YjgwZDEwLCAweGY3YjgxMDEwLCAweGY3YjgxMDEwIH0gfSwKKwkgICB7IDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODBkMTAsIDB4ZjdiODEwMTAsIDB4ZjdiODEwMTAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHg2NDJjMDE0MCwgMHg2NDJjMDE0MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjIH0gfSwKLQl7IEFSNUtfUEhZX1BBUERfUFJPQkUsCi0JCXsgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiB9IH0sCi0JeyBBUjVLX1BIWSg4MCksCi0JCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWSg5MyksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyMjgsCi0JCXsgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiB9IH0sCisJICAgeyAweDY0MmMwMTQwLCAweDY0MmMwMTQwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg3MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1MTEyX2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsCTB4MDAwMjJmZmUgfSwKKwl7IDB4OTgzYywJCTB4MDAwMjAxMDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULAkweDEyODQ2MTNjIH0sCisJeyBBUjVLX1BIWV9QQVBEX1BST0JFLAkweDAwMDA0ODgyIH0sCisJeyAweDk5NDAsCQkweDAwMDAwMDA0IH0sCisJeyAweDk5NTgsCQkweDAwMDAwMGZmIH0sCisJeyAweDk5NzQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDFiNSB9LAorCXsgMHhhMjNjLAkJMHgxM2M4ODlhZiB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBSRjU0MTMvNTQxNCAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogWFhYOiBObyBkdW1wcyBmb3IgdHVyYm9nIHlldCwgc28gdHVyYm9nIGlzIHRoZSBzYW1lIHdpdGggZyBoZXJlIHdpdGggc29tZQotICogbWlub3IgdHdlYWtpbmcgYmFzZWQgb24gZHVtcHMgZnJvbSBvdGhlciBjaGlwcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjU0MTNfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcJCSAgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE4ZmE2MSwgMHgwMDE4ZmE2MSwgMHgwMDFhMWE2MywgMHgwMDFhMWE2MywgMHgwMDFhMWE2MyB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwYzk4YjRlMCwgMHgwYzk4YjRlMCwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCisJICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFlfR0FJTiwKKwkgICB7IDB4MDAxOGZhNjEsIDB4MDAxOGZhNjEsIDB4MDAxYTFhNjMsIDB4MDAxYTFhNjMsIDB4MDAxYTFhNjMgfSB9LAorCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCSAgIHsgMHgwYzk4YjRlMCwgMHgwYzk4YjRlMCwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCisJICAgeyAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKLQl7IEFSNUtfUEhZKDI3KSwKLQkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAorCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKKwkgICB7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHgwMDJlYzFlMCwgMHgwMDJlYzFlMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCisJICAgeyAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAogCXsgMHhhMzAwLAotCQl7IDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSB9LAorCSAgIHsgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCB9IH0sCiAJeyAweGEzMDQsCi0JCXsgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiB9IH0sCisJICAgeyAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyIH0gfSwKIAl7IDB4YTMwOCwKLQkJeyAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2IH0gfSwKKwkgICB7IDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYgfSB9LAogCXsgMHhhMzBjLAotCQl7IDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEgfSB9LAorCSAgIHsgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSB9IH0sCiAJeyAweGEzMTAsCi0JCXsgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiB9IH0sCisJICAgeyAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmIH0gfSwKIAl7IDB4YTMxNCwKLQkJeyAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiIH0gfSwKKwkgICB7IDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIgfSB9LAogCXsgMHhhMzE4LAotCQl7IDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEgfSB9LAorCSAgIHsgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSB9IH0sCiAJeyAweGEzMWMsCi0JCXsgMHg5MGNmODY1YiwgMHg5MGNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiB9IH0sCisJICAgeyAweDkwY2Y4NjViLCAweDkwY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViIH0gfSwKIAl7IDB4YTMyMCwKLQkJeyAweDlkNGY5NzBmLCAweDlkNGY5NzBmLCAweDliNGY5NzBmLCAweDliNGY5NzBmLCAweDliNGY5NzBmIH0gfSwKKwkgICB7IDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYgfSB9LAogCXsgMHhhMzI0LAotCQl7IDB4YTdjZmEzOGYsIDB4YTdjZmEzOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYgfSB9LAorCSAgIHsgMHhhN2NmYTM4ZiwgMHhhN2NmYTM4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiB9IH0sCiAJeyAweGEzMjgsCi0JCXsgMHhiNTVmYWYxZiwgMHhiNTVmYWYxZiwgMHhiMzVmYWYxZiwgMHhiMzVmYWYxZiwgMHhiMzVmYWYxZiB9IH0sCisJICAgeyAweGI1NWZhZjFmLCAweGI1NWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmIH0gfSwKIAl7IDB4YTMyYywKLQkJeyAweGJkZGZiOTlmLCAweGJkZGZiOTlmLCAweGJiZGZiOTlmLCAweGJiZGZiOTlmLCAweGJiZGZiOTlmIH0gfSwKKwkgICB7IDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYgfSB9LAogCXsgMHhhMzMwLAotCQl7IDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YgfSB9LAorCSAgIHsgMHhjYjdmYzUzZiwgMHhjYjdmYzUzZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiB9IH0sCiAJeyAweGEzMzQsCi0JCXsgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwIH0gfSwKLQl7IDB4NDA2OCwKLQkJeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKLQl7IDB4ODA2MCwKLQkJeyAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmIH0gfSwKLQl7IDB4ODA5YywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODBhMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODExOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODExYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODE0MCwKLQkJeyAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5IH0gfSwKLQl7IDB4ODE0NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjIH0gfSwKLQl7IEFSNUtfUEhZX1NDUiwKLQkJeyAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmIH0gfSwKLQl7IEFSNUtfUEhZX1NMTVQsCi0JCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1BIWV9TQ0FMLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19QSFkoODYpLAotCQl7IDB4MDAwODFmZmYsIDB4MDAwODFmZmYsIDB4MDAwODFmZmYsIDB4MDAwODFmZmYsIDB4MDAwODFmZmYgfSB9LAotCXsgQVI1S19QSFkoOTYpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoOTcpLAotCQl7IDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTA0KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjEpLAotCQl7IDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEgfSB9LAotCXsgQVI1S19QSFkoMTIyKSwKLQkJeyAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4IH0gfSwKLQl7IEFSNUtfUEhZKDEyMyksCi0JCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSB9IH0sCi0JeyBBUjVLX1BIWV9TQ0xPQ0ssCi0JCXsgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYyB9IH0sCi0JeyBBUjVLX1BIWV9TREVMQVksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWV9TUEVORElORywKLQkJeyAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0IH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1IH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmIH0gfSwKLQl7IDB4YTI0YywKLQkJeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKLQl7IDB4YTI1MCwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IDB4YTI1NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI1OCwKLQkJeyAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwIH0gfSwKLQl7IDB4YTI1YywKLQkJeyAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxIH0gfSwKLQl7IDB4YTI2MCwKLQkJeyAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxIH0gfSwKLQl7IDB4YTI2NCwKLQkJeyAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExIH0gfSwKLQl7IDB4YTI2OCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI2YywKLQkJeyAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhIH0gfSwKLQl7IDB4YTI3MCwKLQkJeyAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwIH0gfSwKLQl7IDB4YTI3NCwKLQkJeyAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhIH0gfSwKLQl7IDB4YTI3OCwKLQkJeyAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0gfSwKLQl7IDB4YTI3YywKLQkJeyAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlIH0gfSwKLQl7IDB4YTMzOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTMzYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0MCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0OCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM0YywKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1MCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1NCwKLQkJeyAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmIH0gfSwKLQl7IDB4YTM1OCwKLQkJeyAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmIH0gfSwKLQl7IDB4YTM1YywKLQkJeyAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmIH0gfSwKLQl7IDB4YTM2MCwKLQkJeyAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3IH0gfSwKLQl7IDB4YTM2NCwKLQkJeyAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1IH0gfSwKLQl7IDB4YTM2OCwKLQkJeyAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0IH0gfSwKLQl7IDB4YTM2YywKLQkJeyAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzIH0gfSwKLQl7IDB4YTM3MCwKLQkJeyAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzIH0gfSwKLQl7IDB4YTM3NCwKLQkJeyAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzIH0gfSwKLQl7IDB4YTM3OCwKLQkJeyAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyIH0gfSwKLQl7IDB4YTM3YywKLQkJeyAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyIH0gfSwKLQl7IDB4YTM4MCwKLQkJeyAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhIH0gfSwKLQl7IDB4YTM4NCwKLQkJeyAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwIH0gfSwKKwkgICB7IDB4ZDVmZmQxYmYsIDB4ZDVmZmQxYmYsIDB4ZDNmZmQxYmYsIDB4ZDNmZmQxYmYsIDB4ZDNmZmQxYmYgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1NDEzX2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAzZTAgfSwKKwl7IEFSNUtfNTQxNF9DQkNGRywJMHgwMDAwMDAxMCB9LAorCXsgQVI1S19TRVFfTUFTSywJMHgwMDAwMDAwZiB9LAorCXsgMHg4MDljLAkJMHgwMDAwMDAwMCB9LAorCXsgMHg4MGEwLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX0NUTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX1NFTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSVNDX01PREUsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfT0ZETV9GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX0NDS19GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDIsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDJfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19UU0ZfVEhSRVMsCTB4MDAwMDAwMDAgfSwKKwl7IDB4ODE0MCwJCTB4ODAwMDAzZjkgfSwKKwl7IDB4ODE0NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsCTB4MDAwMGEwMDAgfSwKKwl7IDB4OTgzYywJCTB4MDAyMDA0MDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULCAweDEyODQyMzNjIH0sCisJeyBBUjVLX1BIWV9TQ1IsCQkweDAwMDAwMDFmIH0sCisJeyBBUjVLX1BIWV9TTE1ULAkweDAwMDAwMDgwIH0sCisJeyBBUjVLX1BIWV9TQ0FMLAkweDAwMDAwMDBlIH0sCisJeyAweDk5NTgsCQkweDAwMDgxZmZmIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfNywJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzgsCTB4MDI4MDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR18xMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUsIDB4MDAwMDAwMDAgfSwKKwl7IDB4OTllNCwJCTB4YWFhYWFhYWEgfSwKKwl7IDB4OTllOCwJCTB4M2M0NjY0NzggfSwKKwl7IDB4OTllYywJCTB4MDAwMDAwYWEgfSwKKwl7IEFSNUtfUEhZX1NDTE9DSywJMHgwMDAwMDAwYyB9LAorCXsgQVI1S19QSFlfU0RFTEFZLAkweDAwMDAwMGZmIH0sCisJeyBBUjVLX1BIWV9TUEVORElORywJMHgwMDAwMDAxNCB9LAorCXsgQVI1S19QSFlfREFHX0NDS19DVEwsIDB4MDAwMDA5YjUgfSwKKwl7IDB4YTIzYywJCTB4OTNjODg5YWYgfSwKKwl7IEFSNUtfUEhZX0ZBU1RfQURDLAkweDAwMDAwMDAxIH0sCisJeyAweGEyNTAsCQkweDAwMDBhMDAwIH0sCisJeyBBUjVLX1BIWV9CTFVFVE9PVEgsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzEsCTB4MGNjNzUzODAgfSwKKwl7IDB4YTI1YywJCTB4MGYwZjBmMDEgfSwKKwl7IDB4YTI2MCwJCTB4NWY2OTBmMDEgfSwKKwl7IDB4YTI2NCwJCTB4MDA0MThhMTEgfSwKKwl7IDB4YTI2OCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzUsCTB4MGMzMGMxNmEgfSwKKwl7IDB4YTI3MCwgMHgwMDgyMDgyMCB9LAorCXsgMHhhMjc0LCAweDA4MWI3Y2FhIH0sCisJeyAweGEyNzgsIDB4MWNlNzM5Y2UgfSwKKwl7IDB4YTI3YywgMHgwNTE3MDFjZSB9LAorCXsgMHhhMzM4LCAweDAwMDAwMDAwIH0sCisJeyAweGEzM2MsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0MCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQ0LCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDgsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM0YywgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzUwLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTQsIDB4MDAwM2ZmZmYgfSwKKwl7IDB4YTM1OCwgMHg3OWE4YWExZiB9LAorCXsgMHhhMzVjLCAweDA2NmM0MjBmIH0sCisJeyAweGEzNjAsIDB4MGYyODIyMDcgfSwKKwl7IDB4YTM2NCwgMHgxNzYwMTY4NSB9LAorCXsgMHhhMzY4LCAweDFmODAxMTA0IH0sCisJeyAweGEzNmMsIDB4MzdhMDBjMDMgfSwKKwl7IDB4YTM3MCwgMHgzZmM0MDg4MyB9LAorCXsgMHhhMzc0LCAweDU3YzAwODAzIH0sCisJeyAweGEzNzgsIDB4NWZkODA2ODIgfSwKKwl7IDB4YTM3YywgMHg3ZmUwMDQ4MiB9LAorCXsgMHhhMzgwLCAweDdmM2M3YmJhIH0sCisJeyAweGEzODQsIDB4ZjMzMDdmZjAgfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgUkYyNDEzLzI0MTQgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIFhYWDogTm8gZHVtcHMgZm9yIHR1cmJvZyB5ZXQsIHNvIHR1cmJvZyBpcyB0aGUgc2FtZSB3aXRoIGcgaGVyZSB3aXRoIHNvbWUKLSAqIG1pbm9yIHR3ZWFraW5nIGJhc2VkIG9uIGR1bXBzIGZyb20gb3RoZXIgY2hpcHMgKi8KKy8qIFhYWDogYSBtb2RlID8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmYyNDEzX2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgICAgICBiCQlnCSAgICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDA1MDIwMDAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDAwZTAwIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDBhIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMWE2YTY0LCAweDAwMWE2YTY0LCAweDAwMWE2YTY0IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBkZThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAwMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiMGRhLCAweDBjOThiMGRhLCAweDBkZThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlZTgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODBkMmUsIDB4N2VjODBkMmUsIDB4N2U4MDBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzY2NWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM3NjY1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAorCSAgIHsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDAwNDJjMTQwLCAweDAwNDJjMTQwLCAweDAwNDJjMTQwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAgfSB9LAotCXsgMHg4MDYwLAotCQl7IDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYgfSB9LAotCXsgMHg4MTE4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTFjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTIwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTJjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTQwLAotCQl7IDB4ODAwMDAwYTgsIDB4ODAwMDAwYTgsIDB4ODAwMDAwYTggfSB9LAotCXsgMHg4MTQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MgfSB9LAotCXsgQVI1S19QSFlfU0NSLAotCQl7IDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYgfSB9LAotCXsgQVI1S19QSFlfU0xNVCwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUEhZX1NDQUwsCi0JCXsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWSg5NiksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg5NyksCi0JCXsgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMDQpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIwKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMSksCi0JCXsgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSB9IH0sCi0JeyBBUjVLX1BIWSgxMjIpLAotCQl7IDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzggfSB9LAotCXsgQVI1S19QSFkoMTIzKSwKLQkJeyAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhIH0gfSwKLQl7IEFSNUtfUEhZX1NDTE9DSywKLQkJeyAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjIH0gfSwKLQl7IEFSNUtfUEhZX1NERUxBWSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQgfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYgfSB9LAotCXsgMHhhMjRjLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgMHhhMjUwLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgMHhhMjU0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjU4LAotCQl7IDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAgfSB9LAotCXsgMHhhMjVjLAotCQl7IDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEgfSB9LAotCXsgMHhhMjYwLAotCQl7IDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEgfSB9LAotCXsgMHhhMjY0LAotCQl7IDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEgfSB9LAotCXsgMHhhMjY4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjZjLAotCQl7IDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEgfSB9LAotCXsgMHhhMjcwLAotCQl7IDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAgfSB9LAotCXsgMHhhMjc0LAotCQl7IDB4MDAxYjdjYWEsIDB4MDAxYjdjYWEsIDB4MDAxYjdjYWEgfSB9LAotCXsgMHhhMjc4LAotCQl7IDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSB9LAotCXsgMHhhMjdjLAotCQl7IDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UgfSB9LAotCXsgMHhhMzAwLAotCQl7IDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSB9LAotCXsgMHhhMzA0LAotCQl7IDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIgfSB9LAotCXsgMHhhMzA4LAotCQl7IDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYgfSB9LAotCXsgMHhhMzBjLAotCQl7IDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEgfSB9LAotCXsgMHhhMzEwLAotCQl7IDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYgfSB9LAotCXsgMHhhMzE0LAotCQl7IDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIgfSB9LAotCXsgMHhhMzE4LAotCQl7IDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEgfSB9LAotCXsgMHhhMzFjLAotCQl7IDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIgfSB9LAotCXsgMHhhMzIwLAotCQl7IDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYgfSB9LAotCXsgMHhhMzI0LAotCQl7IDB4YTVjZmExOGYsIDB4YTVjZmExOGYsIDB4YTVjZmExOGYgfSB9LAotCXsgMHhhMzI4LAotCQl7IDB4YjU1ZmFmMWYsIDB4YjU1ZmFmMWYsIDB4YjU1ZmFmMWYgfSB9LAotCXsgMHhhMzJjLAotCQl7IDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYgfSB9LAotCXsgMHhhMzMwLAotCQl7IDB4Y2Q3ZmM3M2YsIDB4Y2Q3ZmM3M2YsIDB4Y2Q3ZmM3M2YgfSB9LAotCXsgMHhhMzM0LAotCQl7IDB4ZDVmZmQxYmYsIDB4ZDVmZmQxYmYsIDB4ZDVmZmQxYmYgfSB9LAotCXsgMHhhMzM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ4LAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzRjLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzUwLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzU0LAotCQl7IDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYgfSB9LAotCXsgMHhhMzU4LAotCQl7IDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYgfSB9LAotCXsgMHhhMzVjLAotCQl7IDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYgfSB9LAotCXsgMHhhMzYwLAotCQl7IDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcgfSB9LAotCXsgMHhhMzY0LAotCQl7IDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUgfSB9LAotCXsgMHhhMzY4LAotCQl7IDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQgfSB9LAotCXsgMHhhMzZjLAotCQl7IDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMgfSB9LAotCXsgMHhhMzcwLAotCQl7IDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMgfSB9LAotCXsgMHhhMzc0LAotCQl7IDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMgfSB9LAotCXsgMHhhMzc4LAotCQl7IDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIgfSB9LAotCXsgMHhhMzdjLAotCQl7IDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIgfSB9LAotCXsgMHhhMzgwLAotCQl7IDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEgfSB9LAotCXsgMHhhMzg0LAotCQl7IDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAgfSB9LAorCSAgIHsgMHgwMDJjMDE0MCwgMHgwMDJjMDE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmMjQxM19pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwM2UwIH0sCisJeyBBUjVLX1NFUV9NQVNLLAkweDAwMDAwMDBmIH0sCisJeyBBUjVLX01JQ19RT1NfQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfU0VMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JU0NfTU9ERSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19PRkRNX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0NLX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDFfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMiwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMl9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RTRl9USFJFUywJMHgwMDAwMDAwMCB9LAorCXsgMHg4MTQwLAkJMHg4MDAwMDBhOCB9LAorCXsgMHg4MTQ0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAwYTAwMCB9LAorCXsgMHg5ODNjLAkJMHgwMDIwMDQwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsCTB4MTI4NDIzM2MgfSwKKwl7IEFSNUtfUEhZX1NDUiwJCTB4MDAwMDAwMWYgfSwKKwl7IEFSNUtfUEhZX1NMTVQsCTB4MDAwMDAwODAgfSwKKwl7IEFSNUtfUEhZX1NDQUwsCTB4MDAwMDAwMGUgfSwKKwl7IDB4OTk1OCwJCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR183LAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfOCwJMHgwMjgwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzExLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9IRUFWWV9DTElQX0VOQUJMRSwgMHgwMDAwMDAwMCB9LAorCXsgMHg5OWU0LAkJMHhhYWFhYWFhYSB9LAorCXsgMHg5OWU4LAkJMHgzYzQ2NjQ3OCB9LAorCXsgMHg5OWVjLAkJMHgwMDAwMDBhYSB9LAorCXsgQVI1S19QSFlfU0NMT0NLLAkweDAwMDAwMDBjIH0sCisJeyBBUjVLX1BIWV9TREVMQVksCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1NQRU5ESU5HLAkweDAwMDAwMDE0IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDliNSB9LAorCXsgMHhhMjNjLAkJMHg5M2M4ODlhZiB9LAorCXsgQVI1S19QSFlfRkFTVF9BREMsCTB4MDAwMDAwMDEgfSwKKwl7IDB4YTI1MCwJCTB4MDAwMGEwMDAgfSwKKwl7IEFSNUtfUEhZX0JMVUVUT09USCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHMSwJMHgwY2M3NTM4MCB9LAorCXsgMHhhMjVjLAkJMHgwZjBmMGYwMSB9LAorCXsgMHhhMjYwLAkJMHg1ZjY5MGYwMSB9LAorCXsgMHhhMjY0LAkJMHgwMDQxOGExMSB9LAorCXsgMHhhMjY4LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHNSwJMHgwYzMwYzE2YSB9LAorCXsgMHhhMjcwLCAweDAwODIwODIwIH0sCisJeyAweGEyNzQsIDB4MDAxYjdjYWEgfSwKKwl7IDB4YTI3OCwgMHgxY2U3MzljZSB9LAorCXsgMHhhMjdjLCAweDA1MTcwMWNlIH0sCisJeyAweGEzMDAsIDB4MTgwMTAwMDAgfSwKKwl7IDB4YTMwNCwgMHgzMDAzMjYwMiB9LAorCXsgMHhhMzA4LCAweDQ4MDczZTA2IH0sCisJeyAweGEzMGMsIDB4NTYwYjRjMGEgfSwKKwl7IDB4YTMxMCwgMHg2NDFhNjAwZiB9LAorCXsgMHhhMzE0LCAweDc4NGY2ZTFiIH0sCisJeyAweGEzMTgsIDB4ODY4ZjdjNWEgfSwKKwl7IDB4YTMxYywgMHg4ZWNmODY1YiB9LAorCXsgMHhhMzIwLCAweDlkNGY5NzBmIH0sCisJeyAweGEzMjQsIDB4YTVjZmExOGYgfSwKKwl7IDB4YTMyOCwgMHhiNTVmYWYxZiB9LAorCXsgMHhhMzJjLCAweGJkZGZiOTlmIH0sCisJeyAweGEzMzAsIDB4Y2Q3ZmM3M2YgfSwKKwl7IDB4YTMzNCwgMHhkNWZmZDFiZiB9LAorCXsgMHhhMzM4LCAweDAwMDAwMDAwIH0sCisJeyAweGEzM2MsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0MCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQ0LCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDgsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM0YywgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzUwLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTQsIDB4MDAwM2ZmZmYgfSwKKwl7IDB4YTM1OCwgMHg3OWE4YWExZiB9LAorCXsgMHhhMzVjLCAweDA2NmM0MjBmIH0sCisJeyAweGEzNjAsIDB4MGYyODIyMDcgfSwKKwl7IDB4YTM2NCwgMHgxNzYwMTY4NSB9LAorCXsgMHhhMzY4LCAweDFmODAxMTA0IH0sCisJeyAweGEzNmMsIDB4MzdhMDBjMDMgfSwKKwl7IDB4YTM3MCwgMHgzZmM0MDg4MyB9LAorCXsgMHhhMzc0LCAweDU3YzAwODAzIH0sCisJeyAweGEzNzgsIDB4NWZkODA2ODIgfSwKKwl7IDB4YTM3YywgMHg3ZmUwMDQ4MiB9LAorCXsgMHhhMzgwLCAweDdmM2M3YmJhIH0sCisJeyAweGEzODQsIDB4ZjMzMDdmZjAgfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgUkYyNDI1IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCi0vKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBzbyB0dXJib2cgaXMgdGhlIHNhbWUgd2l0aCBnIGhlcmUgd2l0aCBzb21lCi0gKiBtaW5vciB0d2Vha2luZyBiYXNlZCBvbiBkdW1wcyBmcm9tIG90aGVyIGNoaXBzICovCisvKiBYWFg6IGEgbW9kZSA/ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmMjQyNV9pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICAgICAgIGcJZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCisJICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKIAl7IEFSNUtfUEhZX1RVUkJPLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19QSFkoMTcpLAotCQl7IDB4MTM3MjE0MjIsIDB4MTM3MjE0MjIgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOTlhNjUsIDB4MDAxOTlhNjUgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUEhZX1NFVFRMSU5HLAorCSAgIHsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTQyMiwgMHgxMzcyMWMyNSB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZmE2MSwgMHgwMDE4ZmE2MSwgMHgwMDE5OWE2NSwgMHgwMDE5OWE2NSwgMHgwMDE5OWE2NSB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBjOThiNGUwLCAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKKwkgICB7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAorCSAgIHsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDAwNTJjMTQwLCAweDAwNTJjMTQwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKKwkgICB7IDB4MDAwMDAxNDAsIDB4MDAwMDAxNDAsIDB4MDA1MmMxNDAsIDB4MDA1MmMxNDAsIDB4MDA1MmMxNDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCiAJeyAweGEzMjQsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMyOCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzJjLAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMzAsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMzNCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAgfSB9LAotCXsgMHg4MDYwLAotCQl7IDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYgfSB9LAotCXsgMHg4MDljLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MGEwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTE4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTFjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTIwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTJjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTQwLAotCQl7IDB4ODAwMDAzZjksIDB4ODAwMDAzZjkgfSB9LAotCXsgMHg4MTQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MgfSB9LAotCXsgQVI1S19QSFlfU0NSLAotCQl7IDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYgfSB9LAotCXsgQVI1S19QSFlfU0xNVCwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUEhZX1NDQUwsCi0JCXsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiB9IH0sCi0JeyBBUjVLX1BIWSg5NiksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg5NyksCi0JCXsgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMDQpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTE5KSwKLQkJeyAweGZlYmFkYmU4LCAweGZlYmFkYmU4IH0gfSwKLQl7IEFSNUtfUEhZKDEyMCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjEpLAotCQl7IDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEgfSB9LAotCXsgQVI1S19QSFkoMTIyKSwKLQkJeyAweDNjNDY2NDc4LCAweDNjNDY2NDc4IH0gfSwKLQl7IEFSNUtfUEhZKDEyMyksCi0JCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSB9IH0sCi0JeyBBUjVLX1BIWV9TQ0xPQ0ssCi0JCXsgMHgwMDAwMDAwYywgMHgwMDAwMDAwYyB9IH0sCi0JeyBBUjVLX1BIWV9TREVMQVksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWV9TUEVORElORywKLQkJeyAweDAwMDAwMDE0LCAweDAwMDAwMDE0IH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwOWI1LCAweDAwMDAwOWI1IH0gfSwKLQl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTMsCi0JCXsgMHgyMDIwMjAyMCwgMHgyMDIwMjAyMCB9IH0sCi0JeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEU0LAotCQl7IDB4MjAyMDIwMjAsIDB4MjAyMDIwMjAgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4OTNjODg5YWYsIDB4OTNjODg5YWYgfSB9LAotCXsgMHhhMjRjLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgMHhhMjUwLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgMHhhMjU0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjU4LAotCQl7IDB4MGNjNzUzODAsIDB4MGNjNzUzODAgfSB9LAotCXsgMHhhMjVjLAotCQl7IDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEgfSB9LAotCXsgMHhhMjYwLAotCQl7IDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEgfSB9LAotCXsgMHhhMjY0LAotCQl7IDB4MDA0MThhMTEsIDB4MDA0MThhMTEgfSB9LAotCXsgMHhhMjY4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjZjLAotCQl7IDB4MGMzMGMxNjYsIDB4MGMzMGMxNjYgfSB9LAotCXsgMHhhMjcwLAotCQl7IDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAgfSB9LAotCXsgMHhhMjc0LAotCQl7IDB4MDgxYTNjYWEsIDB4MDgxYTNjYWEgfSB9LAotCXsgMHhhMjc4LAotCQl7IDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSB9LAotCXsgMHhhMjdjLAotCQl7IDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UgfSB9LAotCXsgMHhhMzAwLAotCQl7IDB4MTYwMTAwMDAsIDB4MTYwMTAwMDAgfSB9LAotCXsgMHhhMzA0LAotCQl7IDB4MmMwMzI0MDIsIDB4MmMwMzI0MDIgfSB9LAotCXsgMHhhMzA4LAotCQl7IDB4NDg0MzNlNDIsIDB4NDg0MzNlNDIgfSB9LAotCXsgMHhhMzBjLAotCQl7IDB4NWEwZjUwMGIsIDB4NWEwZjUwMGIgfSB9LAotCXsgMHhhMzEwLAotCQl7IDB4NmM0YjYyNGEsIDB4NmM0YjYyNGEgfSB9LAotCXsgMHhhMzE0LAotCQl7IDB4N2U4Yjc0OGEsIDB4N2U4Yjc0OGEgfSB9LAotCXsgMHhhMzE4LAotCQl7IDB4OTZjZjhjY2IsIDB4OTZjZjhjY2IgfSB9LAotCXsgMHhhMzFjLAotCQl7IDB4YTM0ZjlkMGYsIDB4YTM0ZjlkMGYgfSB9LAotCXsgMHhhMzIwLAotCQl7IDB4YTdjZmE1OGYsIDB4YTdjZmE1OGYgfSB9LAotCXsgMHhhMzQ4LAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzRjLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzUwLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzU0LAotCQl7IDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYgfSB9LAotCXsgMHhhMzU4LAotCQl7IDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYgfSB9LAotCXsgMHhhMzVjLAotCQl7IDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYgfSB9LAotCXsgMHhhMzYwLAotCQl7IDB4MGYyODIyMDcsIDB4MGYyODIyMDcgfSB9LAotCXsgMHhhMzY0LAotCQl7IDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUgfSB9LAotCXsgMHhhMzY4LAotCQl7IDB4MWY4MDExMDQsIDB4MWY4MDExMDQgfSB9LAotCXsgMHhhMzZjLAotCQl7IDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMgfSB9LAotCXsgMHhhMzcwLAotCQl7IDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMgfSB9LAotCXsgMHhhMzc0LAotCQl7IDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMgfSB9LAotCXsgMHhhMzc4LAotCQl7IDB4NWZkODA2ODIsIDB4NWZkODA2ODIgfSB9LAotCXsgMHhhMzdjLAotCQl7IDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIgfSB9LAotCXsgMHhhMzgwLAotCQl7IDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEgfSB9LAotCXsgMHhhMzg0LAotCQl7IDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjI0MjVfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDNlMCB9LAorCXsgQVI1S19TRVFfTUFTSywJMHgwMDAwMDAwZiB9LAorCXsgMHg4MDljLAkJMHgwMDAwMDAwMCB9LAorCXsgMHg4MGEwLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX0NUTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX1NFTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSVNDX01PREUsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfT0ZETV9GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX0NDS19GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDIsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDJfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19UU0ZfVEhSRVMsCTB4MDAwMDAwMDAgfSwKKwl7IDB4ODE0MCwJCTB4ODAwMDAzZjkgfSwKKwl7IDB4ODE0NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsCTB4MDAwMGEwMDAgfSwKKwl7IDB4OTgzYywJCTB4MDAyMDA0MDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULCAweDEyODQyMzNjIH0sCisJeyBBUjVLX1BIWV9TQ1IsCQkweDAwMDAwMDFmIH0sCisJeyBBUjVLX1BIWV9TTE1ULAkweDAwMDAwMDgwIH0sCisJeyBBUjVLX1BIWV9TQ0FMLAkweDAwMDAwMDBlIH0sCisJeyAweDk5NTgsCQkweDAwMDgxZmZmIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfNywJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzgsCTB4MDI4MDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR18xMSwJMHgwMDAwMDAwMCB9LAorCXsgMHg5OWRjLAkJMHhmZWJhZGJlOCB9LAorCXsgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUsIDB4MDAwMDAwMDAgfSwKKwl7IDB4OTllNCwJCTB4YWFhYWFhYWEgfSwKKwl7IDB4OTllOCwJCTB4M2M0NjY0NzggfSwKKwl7IDB4OTllYywJCTB4MDAwMDAwYWEgfSwKKwl7IEFSNUtfUEhZX1NDTE9DSywJMHgwMDAwMDAwYyB9LAorCXsgQVI1S19QSFlfU0RFTEFZLAkweDAwMDAwMGZmIH0sCisJeyBBUjVLX1BIWV9TUEVORElORywJMHgwMDAwMDAxNCB9LAorCXsgQVI1S19QSFlfREFHX0NDS19DVEwsCTB4MDAwMDA5YjUgfSwKKwl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTMsIDB4MjAyMDIwMjAgfSwKKwl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTQsIDB4MjAyMDIwMjAgfSwKKwl7IDB4YTIzYywJCTB4OTNjODg5YWYgfSwKKwl7IEFSNUtfUEhZX0ZBU1RfQURDLAkweDAwMDAwMDAxIH0sCisJeyAweGEyNTAsCQkweDAwMDBhMDAwIH0sCisJeyBBUjVLX1BIWV9CTFVFVE9PVEgsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzEsCTB4MGNjNzUzODAgfSwKKwl7IDB4YTI1YywJCTB4MGYwZjBmMDEgfSwKKwl7IDB4YTI2MCwJCTB4NWY2OTBmMDEgfSwKKwl7IDB4YTI2NCwJCTB4MDA0MThhMTEgfSwKKwl7IDB4YTI2OCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzUsCTB4MGMzMGMxNjYgfSwKKwl7IDB4YTI3MCwgMHgwMDgyMDgyMCB9LAorCXsgMHhhMjc0LCAweDA4MWEzY2FhIH0sCisJeyAweGEyNzgsIDB4MWNlNzM5Y2UgfSwKKwl7IDB4YTI3YywgMHgwNTE3MDFjZSB9LAorCXsgMHhhMzAwLCAweDE2MDEwMDAwIH0sCisJeyAweGEzMDQsIDB4MmMwMzI0MDIgfSwKKwl7IDB4YTMwOCwgMHg0ODQzM2U0MiB9LAorCXsgMHhhMzBjLCAweDVhMGY1MDBiIH0sCisJeyAweGEzMTAsIDB4NmM0YjYyNGEgfSwKKwl7IDB4YTMxNCwgMHg3ZThiNzQ4YSB9LAorCXsgMHhhMzE4LCAweDk2Y2Y4Y2NiIH0sCisJeyAweGEzMWMsIDB4YTM0ZjlkMGYgfSwKKwl7IDB4YTMyMCwgMHhhN2NmYTU4ZiB9LAorCXsgMHhhMzQ4LCAweDNmZmZmZmZmIH0sCisJeyAweGEzNGMsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1MCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzU0LCAweDAwMDNmZmZmIH0sCisJeyAweGEzNTgsIDB4NzlhOGFhMWYgfSwKKwl7IDB4YTM1YywgMHgwNjZjNDIwZiB9LAorCXsgMHhhMzYwLCAweDBmMjgyMjA3IH0sCisJeyAweGEzNjQsIDB4MTc2MDE2ODUgfSwKKwl7IDB4YTM2OCwgMHgxZjgwMTEwNCB9LAorCXsgMHhhMzZjLCAweDM3YTAwYzAzIH0sCisJeyAweGEzNzAsIDB4M2ZjNDA4ODMgfSwKKwl7IDB4YTM3NCwgMHg1N2MwMDgwMyB9LAorCXsgMHhhMzc4LCAweDVmZDgwNjgyIH0sCisJeyAweGEzN2MsIDB4N2ZlMDA0ODIgfSwKKwl7IDB4YTM4MCwgMHg3ZjNjN2JiYSB9LAorCXsgMHhhMzg0LCAweGYzMzA3ZmYwIH0sCiB9OwogCiAvKgpAQCAtMTU2MCw3ICsxMjk3LDcgQEAKIAl7IEFSNUtfQkJfR0FJTig2MyksIDB4MDAwMDAwMTYgfSwKIH07CiAKLS8qIFJGNTExMiBJbml0aWFsIEJhc2VCYW5kIEdhaW4gc2V0dGluZ3MgKFNhbWUgZm9yIFJGNTQxMy81NDE0KSAqLworLyogUkY1MTEyIEluaXRpYWwgQmFzZUJhbmQgR2FpbiBzZXR0aW5ncyAoU2FtZSBmb3IgUkY1NDEzLzU0MTQrKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1MTEyX2luaV9iYmdhaW5bXSA9IHsKIAl7IEFSNUtfQkJfR0FJTigwKSwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CQl9HQUlOKDEpLCAweDAwMDAwMDAxIH0sCkBAIC0xNjkxLDg3ICsxNDI4LDk3IEBACiAJCS8qCiAJCSAqIFdyaXRlIGluaXRpYWwgc2V0dGluZ3MgY29tbW9uIGZvciBhbGwgbW9kZXMKIAkJICovCi0JCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsIEFSUkFZX1NJWkUoYXI1MjEyX2luaSksCi0JCQkJCWFyNTIxMl9pbmksIGNoYW5nZV9jaGFubmVsKTsKKwkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwgQVJSQVlfU0laRShhcjUyMTJfaW5pX2NvbW1vbl9zdGFydCksCisJCQkJYXI1MjEyX2luaV9jb21tb25fc3RhcnQsIGNoYW5nZV9jaGFubmVsKTsKIAogCQkvKiBTZWNvbmQgc2V0IG9mIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgKi8KLQkJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgeworCQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgeworCQljYXNlIEFSNUtfUkY1MTExOgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCi0JCQkJCUFSUkFZX1NJWkUoYXI1MjEyX3JmNTExMV9pbmlfbW9kZV9lbmQpLAotCQkJCQlhcjUyMTJfcmY1MTExX2luaV9tb2RlX2VuZCwgbW9kZSk7CisJCQkJCUFSUkFZX1NJWkUocmY1MTExX2luaV9tb2RlX2VuZCksCisJCQkJCXJmNTExMV9pbmlfbW9kZV9lbmQsIG1vZGUpOworCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmNTExMV9pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmNTExMV9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOwogCiAJCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMV9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTExX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKIAotCQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgeworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19SRjUxMTI6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKLQkJCQkJQVJSQVlfU0laRShhcjUyMTJfcmY1MTEyX2luaV9tb2RlX2VuZCksCi0JCQkJCWFyNTIxMl9yZjUxMTJfaW5pX21vZGVfZW5kLCBtb2RlKTsKKwkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX21vZGVfZW5kKSwKKwkJCQkJcmY1MTEyX2luaV9tb2RlX2VuZCwgbW9kZSk7CisKKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmY1MTEyX2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CiAKIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTJfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOwogCi0JCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGNTQxMzoKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTQxM19pbmlfbW9kZV9lbmQpLAogCQkJCQlyZjU0MTNfaW5pX21vZGVfZW5kLCBtb2RlKTsKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjU0MTNfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjU0MTNfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CiAKLQkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MTMpIHsKLQotCQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkJInVuc3VwcG9ydGVkIGNoYW5uZWwgbW9kZTogJWRcbiIsIG1vZGUpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJbW9kZSA9IG1vZGUgLSAyOwotCi0JCQkvKiBPdmVycmlkZSBhIHNldHRpbmcgZnJvbSBhcjUyMTJfaW5pICovCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDE4ODMwYzYsIEFSNUtfUEhZKDY0OCkpOworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19SRjIzMTY6CisJCWNhc2UgQVI1S19SRjI0MTM6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjI0MTNfaW5pX21vZGVfZW5kKSwKIAkJCQkJcmYyNDEzX2luaV9tb2RlX2VuZCwgbW9kZSk7CiAKLQkJCS8qIEJhc2ViYW5kIGdhaW4gdGFibGUgKi8KKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmYyNDEzX2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmYyNDEzX2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CisKKwkJCS8qIE92ZXJyaWRlIHNldHRpbmdzIGZyb20gcmYyNDEzX2luaV9jb21tb25fZW5kICovCisJCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyMzE2KSB7CisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDA0MDAwLAorCQkJCQkJCUFSNUtfUEhZX0FHQyk7CisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDA4MWI3Y2FhLAorCQkJCQkJCTB4YTI3NCk7CisJCQl9CisKIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTJfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOwotCi0JCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyNDI1KSB7Ci0KLQkJCWlmIChtb2RlIDwgMikgewotCQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsCi0JCQkJCSJ1bnN1cHBvcnRlZCBjaGFubmVsIG1vZGU6ICVkXG4iLCBtb2RlKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJLyogTWFwIGIgdG8gZyAqLwotCQkJaWYgKG1vZGUgPT0gMikKLQkJCQltb2RlID0gMDsKLQkJCWVsc2UKLQkJCQltb2RlID0gbW9kZSAtIDM7Ci0KLQkJCS8qIE92ZXJyaWRlIGEgc2V0dGluZyBmcm9tIGFyNTIxMl9pbmkgKi8KLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMTg4MzBjNiwgQVI1S19QSFkoNjQ4KSk7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGMjMxNzoKKwkJY2FzZSBBUjVLX1JGMjQyNToKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmMjQyNV9pbmlfbW9kZV9lbmQpLAogCQkJCQlyZjI0MjVfaW5pX21vZGVfZW5kLCBtb2RlKTsKIAotCQkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjI0MTNfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjI0MTNfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKKwogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg2ZTEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvbGVkLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBTYW0gTGVmZmxlciwgRXJybm8gQ29uc3VsdGluZworICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA3IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQm9iIENvcGVsYW5kIDxtZUBib2Jjb3BlbGFuZC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93ICgiRGlzY2xhaW1lciIpIGFuZCBhbnkKKyAqICAgIHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbiBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5CisgKiAgICBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJTkdFTUVOVCwgTUVSQ0hBTlRJQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSAiYXRoNWsuaCIKKyNpbmNsdWRlICJiYXNlLmgiCisKKyNkZWZpbmUgQVRIX1NERVZJQ0Uoc3VidixzdWJkKSBcCisJLnZlbmRvciA9IFBDSV9BTllfSUQsIC5kZXZpY2UgPSBQQ0lfQU5ZX0lELCBcCisJLnN1YnZlbmRvciA9IChzdWJ2KSwgLnN1YmRldmljZSA9IChzdWJkKQorCisjZGVmaW5lIEFUSF9MRUQocGluLHBvbGFyaXR5KSAuZHJpdmVyX2RhdGEgPSAoKChwaW4pIDw8IDgpIHwgKHBvbGFyaXR5KSkKKyNkZWZpbmUgQVRIX1BJTihkYXRhKSAoKGRhdGEpID4+IDgpCisjZGVmaW5lIEFUSF9QT0xBUklUWShkYXRhKSAoKGRhdGEpICYgMHhmZikKKworLyogRGV2aWNlcyB3ZSBtYXRjaCBvbiBmb3IgTEVEIGNvbmZpZyBpbmZvICh0eXBpY2FsbHkgbGFwdG9wcykgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19sZWRfZGV2aWNlc1tdID0geworCS8qIElCTS1zcGVjaWZpYyBBUjUyMTIgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTJfSUJNKSwgQVRIX0xFRCgwLCAwKSB9LAorCS8qIEFSNTIxMSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMSksIEFUSF9MRUQoMCwgMCkgfSwKKwkvKiBIUCBDb21wYXEgbmM2eHgsIG5jNDAwMCwgbng2MDAwICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0NPTVBBUSwgUENJX0FOWV9JRCksIEFUSF9MRUQoMSwgMSkgfSwKKwkvKiBBY2VyIEFzcGlyZSBPbmUgQTE1MCAobWF4aW1sZXZpdHNreUBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0ZPWENPTk4sIDB4ZTAwOCksIEFUSF9MRUQoMywgMCkgfSwKKwkvKiBBY2VyIEZlcnJhcmkgNTAwMCAocnVzcy5kaWxsQGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQU1CSVQsIDB4MDQyMiksIEFUSF9MRUQoMSwgMSkgfSwKKwkvKiBFLW1hY2hpbmVzIEU1MTAgKHR1bGlvbUBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FNQklULCAweDA0MjgpLCBBVEhfTEVEKDMsIDApIH0sCisJeyB9Cit9OworCit2b2lkIGF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpZiAodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpIHsKKwkJYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHNjLT5haCwgc2MtPmxlZF9waW4pOworCQlhdGg1a19sZWRfb2ZmKHNjKTsKKwl9Cit9CisKK3ZvaWQgYXRoNWtfbGVkX29uKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJcmV0dXJuOworCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sIHNjLT5sZWRfb24pOworfQorCit2b2lkIGF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQorCQlyZXR1cm47CisJYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3BpbiwgIXNjLT5sZWRfb24pOworfQorCitzdGF0aWMgdm9pZAorYXRoNWtfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhdGg1a19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgYXRoNWtfbGVkLAorCQlsZWRfZGV2KTsKKworCWlmIChicmlnaHRuZXNzID09IExFRF9PRkYpCisJCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7CisJZWxzZQorCQlhdGg1a19sZWRfb24obGVkLT5zYyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0aDVrX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfbGVkICpsZWQsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCWxlZC0+c2MgPSBzYzsKKwlzdHJuY3B5KGxlZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSkpOworCWxlZC0+bGVkX2Rldi5uYW1lID0gbGVkLT5uYW1lOworCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDVrX2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcigmc2MtPnBkZXYtPmRldiwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikgeworCQlBVEg1S19XQVJOKHNjLCAiY291bGQgbm90IHJlZ2lzdGVyIExFRCAlc1xuIiwgbmFtZSk7CisJCWxlZC0+c2MgPSBOVUxMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYXRoNWtfdW5yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX2xlZCAqbGVkKQoreworCWlmICghbGVkLT5zYykKKwkJcmV0dXJuOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmxlZF9kZXYpOworCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7CisJbGVkLT5zYyA9IE5VTEw7Cit9CisKK3ZvaWQgYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOworCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKK30KKworaW50IGF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7CisJY2hhciBuYW1lW0FUSDVLX0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqbWF0Y2g7CisKKwltYXRjaCA9IHBjaV9tYXRjaF9pZCgmYXRoNWtfbGVkX2RldmljZXNbMF0sIHBkZXYpOworCWlmIChtYXRjaCkgeworCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7CisJCXNjLT5sZWRfcGluID0gQVRIX1BJTihtYXRjaC0+ZHJpdmVyX2RhdGEpOworCQlzYy0+bGVkX29uID0gQVRIX1BPTEFSSVRZKG1hdGNoLT5kcml2ZXJfZGF0YSk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJZ290byBvdXQ7CisKKwlhdGg1a19sZWRfZW5hYmxlKHNjKTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0aDVrLSVzOjpyeCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJcmV0ID0gYXRoNWtfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJ4X2xlZCwgbmFtZSwKKwkJaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShodykpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnR4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+dHhfbGVkLCBuYW1lLAorCQlpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGh3KSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYwppbmRleCA3NWViOWY0Li41NTEyMmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYwpAQCAtNjQ2LDYgKzY0NiwyMiBAQAogfQogCiAvKioKKyAqIGF0aDVrX2h3X3NldF90c2Y2NCAtIFNldCBhIG5ldyA2NGJpdCBUU0YKKyAqCisgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CisgKiBAdHNmNjQ6IFRoZSBuZXcgNjRiaXQgVFNGCisgKgorICogU2V0cyB0aGUgbmV3IFRTRgorICovCit2b2lkIGF0aDVrX2h3X3NldF90c2Y2NChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1NjQgdHNmNjQpCit7CisJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKKworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHNmNjQgJiAweGZmZmZmZmZmLCBBUjVLX1RTRl9MMzIpOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKHRzZjY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYsIEFSNUtfVFNGX1UzMik7Cit9CisKKy8qKgogICogYXRoNWtfaHdfcmVzZXRfdHNmIC0gRm9yY2UgYSBUU0YgcmVzZXQKICAqCiAgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CkBAIC0xMDI2LDYgKzEwNDIsOSBAQAogCQkJcmV0dXJuIEFSNUtfS0VZVEFCTEVfVFlQRV80MDsKIAkJZWxzZSBpZiAoa2V5LT5rZXlsZW4gPT0gTEVOX1dFUDEwNCkKIAkJCXJldHVybiBBUjVLX0tFWVRBQkxFX1RZUEVfMTA0OworCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDQxLDcgKzEwNjAsNyBAQAogCV9fbGUzMiBrZXlfdls1XSA9IHt9OwogCV9fbGUzMiBrZXkwID0gMCwga2V5MSA9IDA7CiAJX19sZTMyICpyeG1pYywgKnR4bWljOwotCXUzMiBrZXl0eXBlOworCWludCBrZXl0eXBlOwogCXUxNiBtaWNlbnRyeSA9IGVudHJ5ICsgQVI1S19LRVlUQUJMRV9NSUNfT0ZGU0VUOwogCWJvb2wgaXNfdGtpcDsKIAljb25zdCB1OCAqa2V5X3B0cjsKQEAgLTExMzksNyArMTE1OCw3IEBACiAKIAkvKiBNQUMgbWF5IGJlIE5VTEwgaWYgaXQncyBhIGJyb2FkY2FzdCBrZXkuIEluIHRoaXMgY2FzZSBubyBuZWVkIHRvCiAJICogdG8gY29tcHV0ZSBBUjVLX0xPV19JRCBhbmQgQVI1S19ISUdIX0lEIGFzIHdlIGFscmVhZHkga25vdyBpdC4gKi8KLQlpZiAodW5saWtlbHkobWFjID09IE5VTEwpKSB7CisJaWYgKCFtYWMpIHsKIAkJbG93X2lkID0gMHhmZmZmZmZmZjsKIAkJaGlnaF9pZCA9IDB4ZmZmZiB8IEFSNUtfS0VZVEFCTEVfVkFMSUQ7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKaW5kZXggN2JhMThlMC4uODFmNWJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKQEAgLTIsNyArMiw3IEBACiAgKiBQSFkgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTI2LDExMzggKzI2LDE5MSBAQAogI2luY2x1ZGUgImF0aDVrLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgotCi0vKiBTdHJ1Y3QgdG8gaG9sZCBpbml0aWFsIFJGIHJlZ2lzdGVyIHZhbHVlcyAoUkYgQmFua3MpICovCi1zdHJ1Y3QgYXRoNWtfaW5pX3JmIHsKLQl1OAlyZl9iYW5rOwkvKiBjaGVjayBvdXQgYXRoNWtfcmVnLmggKi8KLQl1MTYJcmZfcmVnaXN0ZXI7CS8qIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLQl1MzIJcmZfdmFsdWVbNV07CS8qIHJlZ2lzdGVyIHZhbHVlIGZvciBkaWZmZXJlbnQgbW9kZXMgKGFib3ZlKSAqLwotfTsKLQotLyoKLSAqIE1vZGUtc3BlY2lmaWMgUkYgR2FpbiB0YWJsZSAoNjRieXRlcykgZm9yIFJGNTExMS81MTEyCi0gKiAoUkY1MTEwIG9ubHkgY29tZXMgd2l0aCBBUjUyMTAgYW5kIG9ubHkgc3VwcG9ydHMgYS90dXJibyBhIG1vZGUgc28gaW5pdGlhbAotICogUkYgR2FpbiB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIEFSNUtfQVI1MjEwX0lOSSkKLSAqLwotc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gewotCXUxNglyZmdfcmVnaXN0ZXI7CS8qIFJGIEdhaW4gcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXUzMglyZmdfdmFsdWVbMl07CS8qIFtmcmVxIChzZWUgYmVsb3cpXSAqLwotfTsKLQotc3RydWN0IGF0aDVrX2dhaW5fb3B0IHsKLQl1MzIJCQlnb19kZWZhdWx0OwotCXUzMgkJCWdvX3N0ZXBzX2NvdW50OwotCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwCWdvX3N0ZXBbQVI1S19HQUlOX1NURVBfQ09VTlRdOwotfTsKLQotLyogUkY1MTExIG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181MTExW10gPSB7Ci0JeyAwLCAweDk4OWMsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMGMwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMGY5LCAweDAwMDQwMGY5LCAweDAwMDQwMGZmLCAweDAwMDQwMGZkLCAweDAwMDQwMGZkIH0gfSwKLQl7IDAsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IDEsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDE0IH0gfSwKLQl7IDMsIDB4OThkOCwKLQkgICAgeyAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMGMwLCAweDAwMzgwMDgwLCAweDAyMzgwMGMwLCAweDAwMzgwMGMwLCAweDAwMzgwMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDIwMDA2LCAweDAwMDIwMDA2LCAweDAwMDAwMDA2LCAweDAwMDIwMDA2LCAweDAwMDIwMDA2IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3IH0gfSwKLQl7IDYsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYxLCAweDAwMDAwMGYxLCAweDAwMDAwMDYxLCAweDAwMDAwMGYxLCAweDAwMDAwMGYxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA5MDRmLCAweDAwMDA5MDRmLCAweDAwMDA5MDRjLCAweDAwMDA5MDRmLCAweDAwMDA5MDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxMjVhLCAweDAwMDAxMjVhLCAweDAwMDAxMjlhLCAweDAwMDAxMjVhLCAweDAwMDAxMjVhIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBmLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTExICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTFbXSA9IHsKLQkvKgkJCSAgICAgIDVHaHoJMkdoegkqLwotCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAxYTksIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAwNDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwNjksIDB4MDAwMDAxNTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMTksIDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNDQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwODQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAxYTUsIDB4MDAwMDAxNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMWU1LCAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAyNSwgMHgwMDAwMDFjOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAxYzgsIDB4MDAwMDAwMTQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMDQyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDA4MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAxNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMTk4LCAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDFkOCwgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMTgsIDB4MDAwMDAwMTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDU4LCAweDAwMDAwMDUyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDA5OCwgMHgwMDAwMDA5MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAxYTQsIDB4MDAwMDAxN2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMWU0LCAweDAwMDAwMWJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAyNCwgMHgwMDAwMDFmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwNjQsIDB4MDAwMDAwMGEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMGE0LCAweDAwMDAwMDRhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDBlNCwgMHgwMDAwMDA4YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAxMGEsIDB4MDAwMDAxNWEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMTRhLCAweDAwMDAwMTlhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDE4YSwgMHgwMDAwMDFkYSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAxY2EsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDBhLCAweDAwMDAwMDRlIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDA0YSwgMHgwMDAwMDA4ZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwOGEsIDB4MDAwMDAxNWUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMWJhLCAweDAwMDAwMTllIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDFmYSwgMHgwMDAwMDFkZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwM2EsIDB4MDAwMDAwMDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDdhLCAweDAwMDAwMDQ5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDE4NiwgMHgwMDAwMDA4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAxYzYsIDB4MDAwMDAxNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDA2LCAweDAwMDAwMWI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDA0NiwgMHgwMDAwMDFmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwODYsIDB4MDAwMDAwMzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAxYmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMWZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDAzZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwN2QgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGJkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTEgPSB7Ci0JNCwKLQk5LAotCXsKLQkJeyB7IDQsIDEsIDEsIDEgfSwgNiB9LAotCQl7IHsgNCwgMCwgMSwgMSB9LCA0IH0sCi0JCXsgeyAzLCAxLCAxLCAxIH0sIDMgfSwKLQkJeyB7IDQsIDAsIDAsIDEgfSwgMSB9LAotCQl7IHsgNCwgMSwgMSwgMCB9LCAwIH0sCi0JCXsgeyA0LCAwLCAxLCAwIH0sIC0yIH0sCi0JCXsgeyAzLCAxLCAxLCAwIH0sIC0zIH0sCi0JCXsgeyA0LCAwLCAwLCAwIH0sIC00IH0sCi0JCXsgeyAyLCAxLCAxLCAwIH0sIC02IH0KLQl9Ci19OwotCi0vKiBSRjUxMTIgbW9kZS1zcGVjaWZpYyBpbml0IHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgcmZyZWdzXzUxMTJbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICBtb2RlIGEvWFIgICBtb2RlIGFUdXJibyBtb2RlIGIgICAgICBtb2RlIGcgICAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYjAsIDB4MDAwMDAwYjAsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTggfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2YzRhNDEsIDB4MDA2YzRhNDEsIDB4MDA2YzRhZjEsIDB4MDA2YzRhNjEsIDB4MDA2YzRhNjEgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MDg5MmEsIDB4MDA1MDg5MmEsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAgfSB9LAotCXsgNiwgMHg5OGQwLAotCSAgICB7IDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAotCXsgNywgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotfTsKLQotLyogUkY1MTEyQSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfNTExMmFbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICBtb2RlIGEvWFIgICBtb2RlIGFUdXJibyBtb2RlIGIgICAgICBtb2RlIGcgICAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDkgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAgfSB9LAotCXsgNiwgMHg5OGQ4LAotCSAgICB7IDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAotCXsgNywgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjExMmFbXSA9IHsKLQl7IDEsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNCwKLQkvKgkgICBtb2RlIGIJbW9kZSBnCSAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MGEwMDAwMDAsIDB4MGEwMDAwMDAsIDB4MGEwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDBjMGMwMDAwLCAweDBjMGMwMDAwLCAweDBjMGMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDA3MDAxOSwgMHgwMDA3MDAxOSwgMHgwMDA3MDAxOSB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYjAyMTg0LCAweDAwYjAyMTg0LCAweDAwYjAyMTg0IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNSwKLQkJeyAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYyB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMSwKLQkJeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLX07Ci0KLS8qIFJGNTQxMy81NDE0IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181NDEzW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTAwMGMwLCAweDAwYTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMGEwLCAweDAwNTEwMGEwLCAweDAwNTEwMGEwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTAwMDZhLCAweDAwNTAwMDZhLCAweDAwNTAwMGRkLCAweDAwNTAwMGRkLCAweDAwNTAwMGRkIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAyYzAwLCAweDAwMDAyYzAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwIH0gfSwKLQl7IDYsIDB4OThjOCwKLQkgICAgeyAweDAwMDAwNDAzLCAweDAwMDAwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIFJGMjQxMy8yNDE0IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc18yNDEzW10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyogCSAgIG1vZGUgYiAgICAgIG1vZGUgZyAgICAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGI1MDAwMCwgMHgwMGI1MDAwMCwgMHgwMGI1MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDlkMDAwMCwgMHgwMDlkMDAwMCwgMHgwMDlkMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDIzMDAxOCwgMHgwMDIzMDAxOCwgMHgwMDIzMDAxOCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMjgwMDUwLCAweDAwMjgwMDUwLCAweDAwMjgwMDUwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDA0MDA3ZiwgMHgwMDA0MDA3ZiwgMHgwMDA0MDA3ZiB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwYzAwMCwgMHgwMDAwYzAwMCwgMHgwMDAwYzAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzUsCi0JCXsgMHgwMDQwMDIzMCwgMHgwMDQwMDIzMCwgMHgwMDQwMDIzMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8yLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotfTsKLQotLyogUkYyNDI1IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc18yNDI1W10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyogCSAgIG1vZGUgZyAgICAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTAwMDAwLCAweDAwMTAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZjgwMDAwLCAweDAwZjgwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwOTEwMDQwLCAweDAwOTEwMDQwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwODEwMDYwLCAweDAwODEwMDYwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzEsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8yLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotfTsKLQotLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjUxMTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTExMltdID0gewotCS8qCQkJICAgICAgNUdoegkyR2h6CSovCi0JeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0NywgMHgwMDAwMDA0NyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4NywgMHgwMDAwMDA4NyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMCwgMHgwMDAwMDFhMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMCwgMHgwMDAwMDFlMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDFhMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFlMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNjEsIDB4MDAwMDAwNjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMTYyLCAweDAwMDAwMTYyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhMiwgMHgwMDAwMDFhMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTIsIDB4MDAwMDAxZTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2MiwgMHgwMDAwMDA2MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxNjMsIDB4MDAwMDAxNjMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMWEzLCAweDAwMDAwMWEzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDFlMywgMHgwMDAwMDFlMyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwMjMsIDB4MDAwMDAwMjMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMDYzLCAweDAwMDAwMDYzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDE4NCwgMHgwMDAwMDE4NCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAxYzQsIDB4MDAwMDAxYzQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFlYSwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAwMmEsIDB4MDAwMDAwNGIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDZhLCAweDAwMDAwMDhiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDFhYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxYWIsIDB4MDAwMDAxZWMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWViLCAweDAwMDAwMDJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAyYiwgMHgwMDAwMDAxMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNmIsIDB4MDAwMDAwNTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMGFiLCAweDAwMDAwMDkyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDFhYywgMHgwMDAwMDE5MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAxZWMsIDB4MDAwMDAxZDMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMDJjLCAweDAwMDAwMDEzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDAzYSwgMHgwMDAwMDA1MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwN2EsIDB4MDAwMDAwOTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGJhLCAweDAwMDAwMTk0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDFiYiwgMHgwMDAwMDFkNCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAxZmIsIDB4MDAwMDAwMTQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMDNiLCAweDAwMDAwMDNhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDA3YiwgMHgwMDAwMDA3YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwYmIsIDB4MDAwMDAwYmEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMWJjLCAweDAwMDAwMWJiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDFmYywgMHgwMDAwMDFmYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwM2MsIDB4MDAwMDAwM2IgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMDdjLCAweDAwMDAwMDdiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBiYywgMHgwMDAwMDBiYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAxYmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMWZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDAzYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwN2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTQxMyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81NDEzW10gPSB7Ci0JLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KLQl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWExLCAweDAwMDAwMTYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWExIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMWUxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMTg4LCAweDAwMDAwMDYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMWM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAwNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDE2OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAxYTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMWU5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDFkMCwgMHgwMDAwMDAyOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwNjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDUwLCAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA5MCwgMHgwMDAwMDFkMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAxYjEsIDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWYxLCAweDAwMDAwMDUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAzMSwgMHgwMDAwMDA5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwNzEsIDB4MDAwMDAxNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWI4LCAweDAwMDAwMWIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDFmOCwgMHgwMDAwMDFmMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMzgsIDB4MDAwMDAwMzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDc4LCAweDAwMDAwMDcxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDE4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwOTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMGQ5LCAweDAwMDAwMTc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDFiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMDM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDA3OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDEzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MTNbXSA9IHsKLQl7IEFSNUtfUkZfR0FJTigwKSwgeyAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwgeyAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwgeyAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwgeyAweDAwMDAwMTgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwgeyAweDAwMDAwMWMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwgeyAweDAwMDAwMDAxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwgeyAweDAwMDAwMDQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwgeyAweDAwMDAwMDgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwgeyAweDAwMDAwMTY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwgeyAweDAwMDAwMWE4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksIHsgMHgwMDAwMDFlOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLCB7IDB4MDAwMDAwMjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwgeyAweDAwMDAwMDY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksIHsgMHgwMDAwMDE4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLCB7IDB4MDAwMDAxYzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwgeyAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksIHsgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLCB7IDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwgeyAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksIHsgMHgwMDAwMDFkMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLCB7IDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwgeyAweDAwMDAwMDUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksIHsgMHgwMDAwMDA5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLCB7IDB4MDAwMDAxOTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwgeyAweDAwMDAwMWQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksIHsgMHgwMDAwMDAxMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLCB7IDB4MDAwMDAwNTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwgeyAweDAwMDAwMDkxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksIHsgMHgwMDAwMDE3OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLCB7IDB4MDAwMDAxYjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwgeyAweDAwMDAwMWY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksIHsgMHgwMDAwMDAzOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLCB7IDB4MDAwMDAwNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwgeyAweDAwMDAwMTk5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksIHsgMHgwMDAwMDFkOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLCB7IDB4MDAwMDAwMTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwgeyAweDAwMDAwMDU5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksIHsgMHgwMDAwMDA5OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLCB7IDB4MDAwMDAwZDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwgeyAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDI1ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MjVbXSA9IHsKLQl7IEFSNUtfUkZfR0FJTigwKSwgeyAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwgeyAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwgeyAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwgeyAweDAwMDAwMTgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwgeyAweDAwMDAwMWMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwgeyAweDAwMDAwMDAxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwgeyAweDAwMDAwMDQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwgeyAweDAwMDAwMDgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwgeyAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwgeyAweDAwMDAwMWM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksIHsgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLCB7IDB4MDAwMDAwNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwgeyAweDAwMDAwMDg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksIHsgMHgwMDAwMDE4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLCB7IDB4MDAwMDAxYzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwgeyAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksIHsgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLCB7IDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwgeyAweDAwMDAwMWIwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksIHsgMHgwMDAwMDFmMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLCB7IDB4MDAwMDAwMzAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwgeyAweDAwMDAwMDcwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksIHsgMHgwMDAwMDE3MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLCB7IDB4MDAwMDAxYjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwgeyAweDAwMDAwMWYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksIHsgMHgwMDAwMDAzMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLCB7IDB4MDAwMDAwNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwgeyAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksIHsgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLCB7IDB4MDAwMDAwMzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwgeyAweDAwMDAwMDc4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksIHsgMHgwMDAwMDBiOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLCB7IDB4MDAwMDAxYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwgeyAweDAwMDAwMWY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksIHsgMHgwMDAwMDAzOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLCB7IDB4MDAwMDAwNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwgeyAweDAwMDAwMGI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwgeyAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTEyID0gewotCTEsCi0JOCwKLQl7Ci0JCXsgeyAzLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDYgfSwKLQkJeyB7IDIsIDAsIDAsIDAsIDAsIDAsIDAgfSwgMCB9LAotCQl7IHsgMSwgMCwgMCwgMCwgMCwgMCwgMCB9LCAtMyB9LAotCQl7IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCAtNiB9LAotCQl7IHsgMCwgMSwgMSwgMCwgMCwgMCwgMCB9LCAtOCB9LAotCQl7IHsgMCwgMSwgMSwgMCwgMSwgMSwgMCB9LCAtMTAgfSwKLQkJeyB7IDAsIDEsIDAsIDEsIDEsIDEsIDAgfSwgLTEzIH0sCi0JCXsgeyAwLCAxLCAwLCAxLCAxLCAwLCAxIH0sIC0xNiB9LAotCX0KLX07CisjaW5jbHVkZSAicmZidWZmZXIuaCIKKyNpbmNsdWRlICJyZmdhaW4uaCIKIAogLyoKICAqIFVzZWQgdG8gbW9kaWZ5IFJGIEJhbmtzIGJlZm9yZSB3cml0aW5nIHRoZW0gdG8gQVI1S19SRl9CVUZGRVIKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGg1a19od19yZnJlZ3Nfb3AodTMyICpyZiwgdTMyIG9mZnNldCwgdTMyIHJlZywgdTMyIGJpdHMsCi0JCXUzMiBmaXJzdCwgdTMyIGNvbCwgYm9vbCBzZXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGF0aDVrX2h3X3JmYl9vcChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCQljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzLAorCQkJCQl1MzIgdmFsLCB1OCByZWdfaWQsIGJvb2wgc2V0KQogewotCXUzMiBtYXNrLCBlbnRyeSwgbGFzdCwgZGF0YSwgc2hpZnQsIHBvc2l0aW9uOwotCXMzMiBsZWZ0OworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmcmVnID0gTlVMTDsKKwl1OCBvZmZzZXQsIGJhbmssIG51bV9iaXRzLCBjb2wsIHBvc2l0aW9uOworCXUxNiBlbnRyeTsKKwl1MzIgbWFzaywgZGF0YSwgbGFzdF9iaXQsIGJpdHNfc2hpZnRlZCwgZmlyc3RfYml0OworCXUzMiAqcmZiOworCXMzMiBiaXRzX2xlZnQ7CiAJaW50IGk7CiAKIAlkYXRhID0gMDsKKwlyZmIgPSBhaC0+YWhfcmZfYmFua3M7CiAKLQlpZiAocmYgPT0gTlVMTCkKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX3JlZ3NfY291bnQ7IGkrKykgeworCQlpZiAocmZfcmVnc1tpXS5pbmRleCA9PSByZWdfaWQpIHsKKwkJCXJmcmVnID0gJnJmX3JlZ3NbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZmIgPT0gTlVMTCB8fCByZnJlZyA9PSBOVUxMKSB7CisJCUFUSDVLX1BSSU5URigiUmYgcmVnaXN0ZXIgbm90IGZvdW5kIVxuIik7CiAJCS8qIHNob3VsZCBub3QgaGFwcGVuICovCiAJCXJldHVybiAwOworCX0KIAotCWlmICghKGNvbCA8PSAzICYmIGJpdHMgPD0gMzIgJiYgZmlyc3QgKyBiaXRzIDw9IDMxOSkpIHsKKwliYW5rID0gcmZyZWctPmJhbms7CisJbnVtX2JpdHMgPSByZnJlZy0+ZmllbGQubGVuOworCWZpcnN0X2JpdCA9IHJmcmVnLT5maWVsZC5wb3M7CisJY29sID0gcmZyZWctPmZpZWxkLmNvbDsKKworCS8qIGZpcnN0X2JpdCBpcyBhbiBvZmZzZXQgZnJvbSBiYW5rJ3MKKwkgKiBzdGFydC4gU2luY2Ugd2UgaGF2ZSBhbGwgYmFua3Mgb24KKwkgKiB0aGUgc2FtZSBhcnJheSwgd2UgdXNlIHRoaXMgb2Zmc2V0CisJICogdG8gbWFyayBlYWNoIGJhbmsncyBzdGFydCAqLworCW9mZnNldCA9IGFoLT5haF9vZmZzZXRbYmFua107CisKKwkvKiBCb3VuZGFyeSBjaGVjayAqLworCWlmICghKGNvbCA8PSAzICYmIG51bV9iaXRzIDw9IDMyICYmIGZpcnN0X2JpdCArIG51bV9iaXRzIDw9IDMxOSkpIHsKIAkJQVRINUtfUFJJTlRGKCJpbnZhbGlkIHZhbHVlcyBhdCBvZmZzZXQgJXVcbiIsIG9mZnNldCk7CiAJCXJldHVybiAwOwogCX0KIAotCWVudHJ5ID0gKChmaXJzdCAtIDEpIC8gOCkgKyBvZmZzZXQ7Ci0JcG9zaXRpb24gPSAoZmlyc3QgLSAxKSAlIDg7CisJZW50cnkgPSAoKGZpcnN0X2JpdCAtIDEpIC8gOCkgKyBvZmZzZXQ7CisJcG9zaXRpb24gPSAoZmlyc3RfYml0IC0gMSkgJSA4OwogCiAJaWYgKHNldCkKLQkJZGF0YSA9IGF0aDVrX2h3X2JpdHN3YXAocmVnLCBiaXRzKTsKKwkJZGF0YSA9IGF0aDVrX2h3X2JpdHN3YXAodmFsLCBudW1fYml0cyk7CiAKLQlmb3IgKGkgPSBzaGlmdCA9IDAsIGxlZnQgPSBiaXRzOyBsZWZ0ID4gMDsgcG9zaXRpb24gPSAwLCBlbnRyeSsrLCBpKyspIHsKLQkJbGFzdCA9IChwb3NpdGlvbiArIGxlZnQgPiA4KSA/IDggOiBwb3NpdGlvbiArIGxlZnQ7Ci0JCW1hc2sgPSAoKCgxIDw8IGxhc3QpIC0gMSkgXiAoKDEgPDwgcG9zaXRpb24pIC0gMSkpIDw8IChjb2wgKiA4KTsKKwlmb3IgKGJpdHNfc2hpZnRlZCA9IDAsIGJpdHNfbGVmdCA9IG51bV9iaXRzOyBiaXRzX2xlZnQgPiAwOworCXBvc2l0aW9uID0gMCwgZW50cnkrKykgeworCisJCWxhc3RfYml0ID0gKHBvc2l0aW9uICsgYml0c19sZWZ0ID4gOCkgPyA4IDoKKwkJCQkJcG9zaXRpb24gKyBiaXRzX2xlZnQ7CisKKwkJbWFzayA9ICgoKDEgPDwgbGFzdF9iaXQpIC0gMSkgXiAoKDEgPDwgcG9zaXRpb24pIC0gMSkpIDw8CisJCQkJCQkJCShjb2wgKiA4KTsKIAogCQlpZiAoc2V0KSB7Ci0JCQlyZltlbnRyeV0gJj0gfm1hc2s7Ci0JCQlyZltlbnRyeV0gfD0gKChkYXRhIDw8IHBvc2l0aW9uKSA8PCAoY29sICogOCkpICYgbWFzazsKKwkJCXJmYltlbnRyeV0gJj0gfm1hc2s7CisJCQlyZmJbZW50cnldIHw9ICgoZGF0YSA8PCBwb3NpdGlvbikgPDwgKGNvbCAqIDgpKSAmIG1hc2s7CiAJCQlkYXRhID4+PSAoOCAtIHBvc2l0aW9uKTsKIAkJfSBlbHNlIHsKLQkJCWRhdGEgPSAoKChyZltlbnRyeV0gJiBtYXNrKSA+PiAoY29sICogOCkpID4+IHBvc2l0aW9uKQotCQkJCTw8IHNoaWZ0OwotCQkJc2hpZnQgKz0gbGFzdCAtIHBvc2l0aW9uOworCQkJZGF0YSB8PSAoKChyZmJbZW50cnldICYgbWFzaykgPj4gKGNvbCAqIDgpKSA+PiBwb3NpdGlvbikKKwkJCQk8PCBiaXRzX3NoaWZ0ZWQ7CisJCQliaXRzX3NoaWZ0ZWQgKz0gbGFzdF9iaXQgLSBwb3NpdGlvbjsKIAkJfQogCi0JCWxlZnQgLT0gOCAtIHBvc2l0aW9uOworCQliaXRzX2xlZnQgLT0gOCAtIHBvc2l0aW9uOwogCX0KIAotCWRhdGEgPSBzZXQgPyAxIDogYXRoNWtfaHdfYml0c3dhcChkYXRhLCBiaXRzKTsKKwlkYXRhID0gc2V0ID8gMSA6IGF0aDVrX2h3X2JpdHN3YXAoZGF0YSwgbnVtX2JpdHMpOwogCiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB1MzIgYXRoNWtfaHdfcmZyZWdzX2dhaW5mX2NvcnIoc3RydWN0IGF0aDVrX2h3ICphaCkKKy8qKioqKioqKioqKioqKioqKioqKioqXAorKiBSRiBHYWluIG9wdGltaXphdGlvbiAqCitcKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgY29kZSBpcyB1c2VkIHRvIG9wdGltaXplIHJmIGdhaW4gb24gZGlmZmVyZW50IGVudmlyb25tZW50cworICogKHRlbXByYXR1cmUgbW9zdGx5KSBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIGEgcG93ZXIgZGV0ZWN0b3IuCisgKgorICogSXQncyBvbmx5IHVzZWQgb24gUkY1MTExIGFuZCBSRjUxMTIsIGxhdGVyIFJGIGNoaXBzIHNlZW0gdG8gaGF2ZQorICogYXV0byBhZGp1c3RtZW50IG9uIGh3IC1ub3RpY2UgdGhleSBoYXZlIGEgbXVjaCBzbWFsbGVyIEJBTksgNyBhbmQKKyAqIG5vIGdhaW4gb3B0aW1pemF0aW9uIGxhZGRlci0uCisgKgorICogRm9yIG1vcmUgaW5mb3MgY2hlY2sgb3V0IHRoaXMgcGF0ZW50IGRvYworICogaHR0cDovL3d3dy5mcmVlcGF0ZW50c29ubGluZS5jb20vNzQwMDY5MS5odG1sCisgKgorICogVGhpcyBwYXBlciBkZXNjcmliZXMgcG93ZXIgZHJvcHMgYXMgc2VlbiBvbiB0aGUgcmVjZWl2ZXIgZHVlIHRvCisgKiBwcm9iZSBwYWNrZXRzCisgKiBodHRwOi8vd3d3LmNucmkuZGl0LmllL3B1YmxpY2F0aW9ucy9JQ1QwOCUyMC0lMjBQcmFjdGljYWwlMjBJc3N1ZXMKKyAqICUyMG9mJTIwUG93ZXIlMjBDb250cm9sLnBkZgorICoKKyAqIEFuZCB0aGlzIGlzIHRoZSBNYWRXaUZpIGJ1ZyBlbnRyeSByZWxhdGVkIHRvIHRoZSBhYm92ZQorICogaHR0cDovL21hZHdpZmktcHJvamVjdC5vcmcvdGlja2V0LzE2NTkKKyAqIHdpdGggdmFyaW91cyBtZWFzdXJlbWVudHMgYW5kIGRpYWdyYW1zCisgKgorICogVE9ETzogRGVhbCB3aXRoIHBvd2VyIGRyb3BzIGR1ZSB0byBwcm9iZXMgYnkgc2V0dGluZyBhbiBhcHJvcHJpYXRlCisgKiB0eCBwb3dlciBvbiB0aGUgcHJvYmUgcGFja2V0cyAhIE1ha2UgdGhpcyBwYXJ0IG9mIHRoZSBjYWxpYnJhdGlvbiBwcm9jZXNzLgorICovCisKKy8qIEluaXRpYWxpemUgYWhfZ2FpbiBkdXJyaW5nIGF0dGFjaCAqLworaW50IGF0aDVrX2h3X3JmZ2Fpbl9vcHRfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCS8qIEluaXRpYWxpemUgdGhlIGdhaW4gb3B0aW1pemF0aW9uIHZhbHVlcyAqLworCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CisJY2FzZSBBUjVLX1JGNTExMToKKwkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMS5nb19kZWZhdWx0OworCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOworCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSAzNTsKKwkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGNTExMjoKKwkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMi5nb19kZWZhdWx0OworCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOworCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSA4NTsKKwkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNjaGVkdWxlIGEgZ2FpbiBwcm9iZSBjaGVjayBvbiB0aGUgbmV4dCB0cmFuc21pdGVkIHBhY2tldC4KKyAqIFRoYXQgbWVhbnMgb3VyIG5leHQgcGFja2V0IGlzIGdvaW5nIHRvIGJlIHNlbnQgd2l0aCBsb3dlcgorICogdHggcG93ZXIgYW5kIGEgUGVhayB0byBBdmVyYWdlIFBvd2VyIERldGVjdG9yIChQQVBEKSB3aWxsIHRyeQorICogdG8gbWVhc3VyZSB0aGUgZ2Fpbi4KKyAqCisgKiBUT0RPOiBVc2UgcHJvcHBlciB0eCBwb3dlciBzZXR0aW5nIGZvciB0aGUgcHJvYmUgcGFja2V0IHNvCisgKiB0aGF0IHdlIGRvbid0IG9ic2VydmUgYSBzZXJpb3VzIHBvd2VyIGRyb3Agb24gdGhlIHJlY2VpdmVyCisgKgorICogWFhYOiAgSG93IGFib3V0IGZvcmNpbmcgYSB0eCBwYWNrZXQgKGJ5cGFzc2luZyBQQ1UgYXJiaXRyYXRvciBldGMpCisgKiBqdXN0IGFmdGVyIHdlIGVuYWJsZSB0aGUgcHJvYmUgc28gdGhhdCB3ZSBkb24ndCBtZXNzIHdpdGgKKyAqIHN0YW5kYXJkIHRyYWZmaWMgPyBNYXliZSBpdCdzIHRpbWUgdG8gdXNlIHN3IGludGVycnVwdHMgYW5kCisgKiBhIHByb2JlIHRhc2tsZXQgISEhCisgKi8KK3N0YXRpYyB2b2lkIGF0aDVrX2h3X3JlcXVlc3RfcmZnYWluX3Byb2JlKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisKKwkvKiBTa2lwIGlmIGdhaW4gY2FsaWJyYXRpb24gaXMgaW5hY3RpdmUgb3IKKwkgKiB3ZSBhbHJlYWR5IGhhbmRsZSBhIHByb2JlIHJlcXVlc3QgKi8KKwlpZiAoYWgtPmFoX2dhaW4uZ19zdGF0ZSAhPSBBUjVLX1JGR0FJTl9BQ1RJVkUpCisJCXJldHVybjsKKworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cG93ZXIudHhwX21heCwKKwkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhQT1dFUikgfAorCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhULCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKKworCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRDsKKworfQorCisvKiBDYWxjdWxhdGUgZ2Fpbl9GIG1lYXN1cmVtZW50IGNvcnJlY3Rpb24KKyAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0ZXAgZm9yIFJGNTExMiByZXYuIDIgKi8KK3N0YXRpYyB1MzIgYXRoNWtfaHdfcmZfZ2FpbmZfY29ycihzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCXUzMiBtaXgsIHN0ZXA7CiAJdTMyICpyZjsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgKmdvOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CisJY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyAqcmZfcmVnczsKKworCS8qIE9ubHkgUkY1MTEyIFJldi4gMiBzdXBwb3J0cyBpdCAqLworCWlmICgoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTEyKSB8fAorCShhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8PSBBUjVLX1NSRVZfUkFEXzUxMTJBKSkKKwkJcmV0dXJuIDA7CisKKwlnbyA9ICZyZmdhaW5fb3B0XzUxMTI7CisJcmZfcmVncyA9IHJmX3JlZ3NfNTExMmE7CisJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMmEpOworCisJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwogCiAJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTExNjUsMTEgKzIxOCwxNSBAQAogCXJmID0gYWgtPmFoX3JmX2JhbmtzOwogCWFoLT5haF9nYWluLmdfZl9jb3JyID0gMDsKIAotCWlmIChhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbN10sIDAsIDEsIDM2LCAwLCBmYWxzZSkgIT0gMSkKKwkvKiBObyBWR0EgKFZhcmlhYmxlIEdhaW4gQW1wbGlmaWVyKSBvdmVycmlkZSwgc2tpcCAqLworCWlmIChhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYVkdBX09WUiwgZmFsc2UpICE9IDEpCiAJCXJldHVybiAwOwogCi0Jc3RlcCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgNCwgMzIsIDAsIGZhbHNlKTsKLQltaXggPSBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19wYXJhbVswXTsKKwkvKiBNaXggZ2FpbiBzdGVwcGluZyAqLworCXN0ZXAgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYR0FJTl9TVEVQLCBmYWxzZSk7CisKKwkvKiBNaXggZ2FpbiBvdmVycmlkZSAqLworCW1peCA9IGdfc3RlcC0+Z29zX3BhcmFtWzBdOwogCiAJc3dpdGNoIChtaXgpIHsKIAljYXNlIDM6CkBAIC0xMTg5LDkgKzI0NiwxNCBAQAogCXJldHVybiBhaC0+YWhfZ2Fpbi5nX2ZfY29ycjsKIH0KIAotc3RhdGljIGJvb2wgYXRoNWtfaHdfcmZyZWdzX2dhaW5fcmVhZGJhY2soc3RydWN0IGF0aDVrX2h3ICphaCkKKy8qIENoZWNrIGlmIGN1cnJlbnQgZ2Fpbl9GIG1lYXN1cmVtZW50IGlzIGluIHRoZSByYW5nZSBvZiBvdXIKKyAqIHBvd2VyIGRldGVjdG9yIHdpbmRvd3MuIElmIHdlIGdldCBhIG1lYXN1cmVtZW50IG91dHNpZGUgcmFuZ2UKKyAqIHdlIGtub3cgaXQncyBub3QgYWNjdXJhdGUgKGRldGVjdG9ycyBjYW4ndCBtZWFzdXJlIGFueXRoaW5nIG91dHNpZGUKKyAqIHRoZWlyIGRldGVjdGlvbiB3aW5kb3cpIHNvIHdlIG11c3QgaWdub3JlIGl0ICovCitzdGF0aWMgYm9vbCBhdGg1a19od19yZl9jaGVja19nYWluZl9yZWFkYmFjayhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewotCXUzMiBzdGVwLCBtaXgsIGxldmVsWzRdOworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmX3JlZ3M7CisJdTMyIHN0ZXAsIG1peF9vdnIsIGxldmVsWzRdOwogCXUzMiAqcmY7CiAKIAlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpCkBAIC0xMjAwLDIzICsyNjIsMzMgQEAKIAlyZiA9IGFoLT5haF9yZl9iYW5rczsKIAogCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHsKLQkJc3RlcCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgNiwgMzcsIDAsCi0JCQkJZmFsc2UpOworCisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTE7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTEpOworCisJCXN0ZXAgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfUkZHQUlOX1NURVAsCisJCQlmYWxzZSk7CisKIAkJbGV2ZWxbMF0gPSAwOwotCQlsZXZlbFsxXSA9IChzdGVwID09IDB4M2YpID8gMHgzMiA6IHN0ZXAgKyA0OwotCQlsZXZlbFsyXSA9IChzdGVwICE9IDB4M2YpID8gMHg0MCA6IGxldmVsWzBdOwotCQlsZXZlbFszXSA9IGxldmVsWzJdICsgMHgzMjsKKwkJbGV2ZWxbMV0gPSAoc3RlcCA9PSA2MykgPyA1MCA6IHN0ZXAgKyA0OworCQlsZXZlbFsyXSA9IChzdGVwICE9IDYzKSA/IDY0IDogbGV2ZWxbMF07CisJCWxldmVsWzNdID0gbGV2ZWxbMl0gKyA1MCA7CiAKIAkJYWgtPmFoX2dhaW4uZ19oaWdoID0gbGV2ZWxbM10gLQotCQkJKHN0ZXAgPT0gMHgzZiA/IEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTiA6IC01KTsKKwkJCShzdGVwID09IDYzID8gQVI1S19HQUlOX0RZTl9BREpVU1RfSElfTUFSR0lOIDogLTUpOwogCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IGxldmVsWzBdICsKLQkJCShzdGVwID09IDB4M2YgPyBBUjVLX0dBSU5fRFlOX0FESlVTVF9MT19NQVJHSU4gOiAwKTsKKwkJCShzdGVwID09IDYzID8gQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOIDogMCk7CiAJfSBlbHNlIHsKLQkJbWl4ID0gYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLCAwLCAxLCAzNiwgMCwKLQkJCQlmYWxzZSk7CisKKwkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMjsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMik7CisKKwkJbWl4X292ciA9IGF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMCwgQVI1S19SRl9NSVhWR0FfT1ZSLAorCQkJZmFsc2UpOworCiAJCWxldmVsWzBdID0gbGV2ZWxbMl0gPSAwOwogCi0JCWlmIChtaXggPT0gMSkgeworCQlpZiAobWl4X292ciA9PSAxKSB7CiAJCQlsZXZlbFsxXSA9IGxldmVsWzNdID0gODM7CiAJCX0gZWxzZSB7CiAJCQlsZXZlbFsxXSA9IGxldmVsWzNdID0gMTA3OwpAQCAtMTIzMCw5ICszMDIsMTIgQEAKIAkJCWFoLT5haF9nYWluLmdfY3VycmVudCA8PSBsZXZlbFszXSk7CiB9CiAKLXN0YXRpYyBzMzIgYXRoNWtfaHdfcmZyZWdzX2dhaW5fYWRqdXN0KHN0cnVjdCBhdGg1a19odyAqYWgpCisvKiBQZXJmb3JtIGdhaW5fRiBhZGp1c3RtZW50IGJ5IGNob29zaW5nIHRoZSByaWdodCBzZXQKKyAqIG9mIHBhcmFtZXRlcnMgZnJvbSByZiBnYWluIG9wdGltaXphdGlvbiBsYWRkZXIgKi8KK3N0YXRpYyBzOCBhdGg1a19od19yZl9nYWluZl9hZGp1c3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgKmdvOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewpAQCAtMTI0NiwzNSArMzIxLDM5IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFoLT5haF9nYWluLmdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKKwlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CiAKIAlpZiAoYWgtPmFoX2dhaW4uZ19jdXJyZW50ID49IGFoLT5haF9nYWluLmdfaGlnaCkgeworCisJCS8qIFJlYWNoZWQgbWF4aW11bSAqLwogCQlpZiAoYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9PSAwKQogCQkJcmV0dXJuIC0xOworCiAJCWZvciAoYWgtPmFoX2dhaW4uZ190YXJnZXQgPSBhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQ7CiAJCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgPj0gIGFoLT5haF9nYWluLmdfaGlnaCAmJgogCQkJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPiAwOwotCQkJCWFoLT5haF9nYWluLmdfc3RlcCA9Ci0JCQkJCSZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XSkKKwkJCQlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCiAJCQlhaC0+YWhfZ2Fpbi5nX3RhcmdldCAtPSAyICoKIAkJCSAgICAoZ28tPmdvX3N0ZXBbLS0oYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCldLmdvc19nYWluIC0KLQkJCSAgICBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19nYWluKTsKKwkJCSAgICBnX3N0ZXAtPmdvc19nYWluKTsKIAogCQlyZXQgPSAxOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKGFoLT5haF9nYWluLmdfY3VycmVudCA8PSBhaC0+YWhfZ2Fpbi5nX2xvdykgeworCisJCS8qIFJlYWNoZWQgbWluaW11bSAqLwogCQlpZiAoYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9PSAoZ28tPmdvX3N0ZXBzX2NvdW50IC0gMSkpCiAJCQlyZXR1cm4gLTI7CisKIAkJZm9yIChhaC0+YWhfZ2Fpbi5nX3RhcmdldCA9IGFoLT5haF9nYWluLmdfY3VycmVudDsKIAkJCQlhaC0+YWhfZ2Fpbi5nX3RhcmdldCA8PSBhaC0+YWhfZ2Fpbi5nX2xvdyAmJgogCQkJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPCBnby0+Z29fc3RlcHNfY291bnQtMTsKLQkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkJCQkmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCisJCQkJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdKQogCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgLT0gMiAqCiAJCQkgICAgKGdvLT5nb19zdGVwWysrYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0uZ29zX2dhaW4gLQotCQkJICAgIGFoLT5haF9nYWluLmdfc3RlcC0+Z29zX2dhaW4pOworCQkJICAgIGdfc3RlcC0+Z29zX2dhaW4pOwogCiAJCXJldCA9IDI7CiAJCWdvdG8gZG9uZTsKQEAgLTEyODksMzUzICszNjgsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogUmVhZCBFRVBST00gQ2FsaWJyYXRpb24gZGF0YSwgbW9kaWZ5IFJGIEJhbmtzIGFuZCBJbml0aWFsaXplIFJGNTExMQotICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExMV9yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSkKKy8qIE1haW4gY2FsbGJhY2sgZm9yIHRoZXJtYWwgcmYgZ2FpbiBjYWxpYnJhdGlvbiBlbmdpbmUKKyAqIENoZWNrIGZvciBhIG5ldyBnYWluIHJlYWRpbmcgYW5kIHNjaGVkdWxlIGFuIGFkanVzdG1lbnQKKyAqIGlmIG5lZWRlZC4KKyAqCisgKiBUT0RPOiBVc2Ugc3cgaW50ZXJydXB0IHRvIHNjaGVkdWxlIHJlc2V0IGlmIGdhaW5fRiBuZWVkcworICogYWRqdXN0bWVudCAqLworZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2FpbmZfY2FsaWJyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CisJdTMyIGRhdGEsIHR5cGU7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0JdTMyICpyZjsKLQljb25zdCB1bnNpZ25lZCBpbnQgcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzUxMTEpOwotCXVuc2lnbmVkIGludCBpOwotCWludCBvYmRiID0gLTEsIGJhbmsgPSAtMTsKLQl1MzIgZWVfbW9kZTsKIAotCUFSNUtfQVNTRVJUX0VOVFJZKG1vZGUsIEFSNUtfTU9ERV9NQVgpOworCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKLQlyZiA9IGFoLT5haF9yZl9iYW5rczsKKwlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwgfHwKKwlhaC0+YWhfZ2Fpbi5nX3N0YXRlID09IEFSNUtfUkZHQUlOX0lOQUNUSVZFKQorCQlyZXR1cm4gQVI1S19SRkdBSU5fSU5BQ1RJVkU7CiAKLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmcmVnc181MTExW2ldLnJmX2JhbmsgPj0gQVI1S19SRjUxMTFfSU5JX1JGX01BWF9CQU5LUykgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBObyBjaGVjayByZXF1ZXN0ZWQsIGVpdGhlciBlbmdpbmUgaXMgaW5hY3RpdmUKKwkgKiBvciBhbiBhZGp1c3RtZW50IGlzIGFscmVhZHkgcmVxdWVzdGVkICovCisJaWYgKGFoLT5haF9nYWluLmdfc3RhdGUgIT0gQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQpCisJCWdvdG8gZG9uZTsKKworCS8qIFJlYWQgdGhlIFBBUEQgKFBlYWsgdG8gQXZlcmFnZSBQb3dlciBEZXRlY3RvcikKKwkgKiByZWdpc3RlciAqLworCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUEFQRF9QUk9CRSk7CisKKwkvKiBObyBwcm9iZSBpcyBzY2hlZHVsZWQsIHJlYWQgZ2Fpbl9GIG1lYXN1cmVtZW50ICovCisJaWYgKCEoZGF0YSAmIEFSNUtfUEhZX1BBUERfUFJPQkVfVFhfTkVYVCkpIHsKKwkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ID0gZGF0YSA+PiBBUjVLX1BIWV9QQVBEX1BST0JFX0dBSU5GX1M7CisJCXR5cGUgPSBBUjVLX1JFR19NUyhkYXRhLCBBUjVLX1BIWV9QQVBEX1BST0JFX1RZUEUpOworCisJCS8qIElmIHR4IHBhY2tldCBpcyBDQ0sgY29ycmVjdCB0aGUgZ2Fpbl9GIG1lYXN1cmVtZW50CisJCSAqIGJ5IGNjayBvZmRtIGdhaW4gZGVsdGEgKi8KKwkJaWYgKHR5cGUgPT0gQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFX0NDSykgeworCQkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpCisJCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ICs9CisJCQkJCWVlLT5lZV9jY2tfb2ZkbV9nYWluX2RlbHRhOworCQkJZWxzZQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCArPQorCQkJCQlBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlI7CiAJCX0KIAotCQlpZiAoYmFuayAhPSByZnJlZ3NfNTExMVtpXS5yZl9iYW5rKSB7Ci0JCQliYW5rID0gcmZyZWdzXzUxMTFbaV0ucmZfYmFuazsKLQkJCWFoLT5haF9vZmZzZXRbYmFua10gPSBpOworCQkvKiBGdXJ0aGVyIGNvcnJlY3QgZ2Fpbl9GIG1lYXN1cmVtZW50IGZvcgorCQkgKiBSRjUxMTJBIHJhZGlvcyAqLworCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJYXRoNWtfaHdfcmZfZ2FpbmZfY29ycihhaCk7CisJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2ZfY29yciA/CisJCQkJKGFoLT5haF9nYWluLmdfY3VycmVudC1haC0+YWhfZ2Fpbi5nX2ZfY29ycikgOgorCQkJCTA7CiAJCX0KIAotCQlyZltpXSA9IHJmcmVnc181MTExW2ldLnJmX3ZhbHVlW21vZGVdOworCQkvKiBDaGVjayBpZiBtZWFzdXJlbWVudCBpcyBvayBhbmQgaWYgd2UgbmVlZAorCQkgKiB0byBhZGp1c3QgZ2Fpbiwgc2NoZWR1bGUgYSBnYWluIGFkanVzdG1lbnQsCisJCSAqIGVsc2Ugc3dpdGNoIGJhY2sgdG8gdGhlIGFjaXZlIHN0YXRlICovCisJCWlmIChhdGg1a19od19yZl9jaGVja19nYWluZl9yZWFkYmFjayhhaCkgJiYKKwkJQVI1S19HQUlOX0NIRUNLX0FESlVTVCgmYWgtPmFoX2dhaW4pICYmCisJCWF0aDVrX2h3X3JmX2dhaW5mX2FkanVzdChhaCkpIHsKKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCX0KIAl9CiAKLQkvKiBNb2RpZnkgYmFuayAwICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQllbHNlCi0JCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7Ci0JCW9iZGIgPSAwOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzBdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMTE5LCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzBdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMTIyLCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW9iZGIgPSAxOwotCS8qIE1vZGlmeSBiYW5rIDYgKi8KLQl9IGVsc2UgewotCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgKi8KLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlvYmRiID0JIGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKLQkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6Ci0JCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgotCQkJIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX3B3ZF84NCwgMSwgNTEsIDMsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX3B3ZF85MCwgMSwgNDUsIDMsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkhZWUtPmVlX3hwZFtlZV9tb2RlXSwgMSwgOTUsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwgNCwgOTYsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLCBvYmRiID49IDAgPwotCQkJZWUtPmVlX29iW2VlX21vZGVdW29iZGJdIDogMCwgMywgMTA0LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwgb2JkYiA+PSAwID8KLQkJCWVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSA6IDAsIDMsIDEwNywgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTW9kaWZ5IGJhbmsgNyAqLwotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwgNiwgMjksIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX3hwZFtlZV9tb2RlXSwgMSwgNCwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogV3JpdGUgUkYgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykgewotCQlBUjVLX1JFR19XQUlUKGkpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmW2ldLCByZnJlZ3NfNTExMVtpXS5yZl9yZWdpc3Rlcik7Ci0JfQotCi0JcmV0dXJuIDA7Citkb25lOgorCXJldHVybiBhaC0+YWhfZ2Fpbi5nX3N0YXRlOwogfQogCi0vKgotICogUmVhZCBFRVBST00gQ2FsaWJyYXRpb24gZGF0YSwgbW9kaWZ5IFJGIEJhbmtzIGFuZCBJbml0aWFsaXplIFJGNTExMgotICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExMl9yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmICpyZl9pbmk7Ci0Jc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0JdTMyICpyZjsKLQl1bnNpZ25lZCBpbnQgcmZfc2l6ZSwgaTsKLQlpbnQgb2JkYiA9IC0xLCBiYW5rID0gLTE7Ci0JdTMyIGVlX21vZGU7Ci0KLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKLQotCXJmID0gYWgtPmFoX3JmX2JhbmtzOwotCi0JaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfMjExMkEKLQkJJiYgIXRlc3RfYml0KEFSNUtfTU9ERV8xMUEsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpKSB7Ci0JCXJmX2luaSA9IHJmcmVnc18yMTEyYTsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzUxMTJhKTsKLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBjaGFubmVsIG1vZGU6ICVpXG4iLAotCQkJCSAgbW9kZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQltb2RlID0gbW9kZSAtIDI7IC8qbm8gYS90dXJib2EgbW9kZXMgZm9yIDIxMTIqLwotCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgewotCQlyZl9pbmkgPSByZnJlZ3NfNTExMmE7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyYSk7Ci0JfSBlbHNlIHsKLQkJcmZfaW5pID0gcmZyZWdzXzUxMTI7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyKTsKLQl9Ci0KLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmX2luaVtpXS5yZl9iYW5rID49IEFSNUtfUkY1MTEyX0lOSV9SRl9NQVhfQkFOS1MpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIGJhbmtcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoYmFuayAhPSByZl9pbmlbaV0ucmZfYmFuaykgewotCQkJYmFuayA9IHJmX2luaVtpXS5yZl9iYW5rOwotCQkJYWgtPmFoX29mZnNldFtiYW5rXSA9IGk7Ci0JCX0KLQotCQlyZltpXSA9IHJmX2luaVtpXS5yZl92YWx1ZVttb2RlXTsKLQl9Ci0KLQkvKiBNb2RpZnkgYmFuayA2ICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKLQkJZWxzZQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQlvYmRiID0gMDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI4NywgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI5MCwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgKi8KLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlvYmRiID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTcyNSA/IDMgOgotCQkgICAgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU1MDAgPyAyIDoKLQkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1MjYwID8gMSA6Ci0JCQkgICAgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID4gNDAwMCA/IDAgOiAtMSkpKTsKLQotCQlpZiAob2JkYiA9PSAtMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMjc5LCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMjgyLCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkgICAgZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwgMiwgMjcwLCAwLCB0cnVlKTsKLQlhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JICAgIGVlLT5lZV94X2dhaW5bZWVfbW9kZV0sIDIsIDI1NywgMCwgdHJ1ZSk7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCWVlLT5lZV94cGRbZWVfbW9kZV0sIDEsIDMwMiwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTW9kaWZ5IGJhbmsgNyAqLwotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwgNiwgMTQsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFdyaXRlIFJGIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcmZbaV0sIHJmX2luaVtpXS5yZl9yZWdpc3Rlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgUkY1NDEzLzU0MTQgYW5kIGZ1dHVyZSBjaGlwcwotICogKHVudGlsIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBzb2x1dGlvbikKLSAqLwotc3RhdGljIGludCBhdGg1a19od19yZjU0MTNfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiAqcmZfaW5pOwotCXUzMiAqcmY7Ci0JdW5zaWduZWQgaW50IHJmX3NpemUsIGk7Ci0JaW50IGJhbmsgPSAtMTsKLQotCUFSNUtfQVNTRVJUX0VOVFJZKG1vZGUsIEFSNUtfTU9ERV9NQVgpOwotCi0JcmYgPSBhaC0+YWhfcmZfYmFua3M7Ci0KLQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewotCWNhc2UgQVI1S19SRjU0MTM6Ci0JCXJmX2luaSA9IHJmcmVnc181NDEzOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTQxMyk7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MTM6Ci0JCXJmX2luaSA9IHJmcmVnc18yNDEzOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQxMyk7Ci0KLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltb2RlID0gbW9kZSAtIDI7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MjU6Ci0JCXJmX2luaSA9IHJmcmVnc18yNDI1OwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQyNSk7Ci0KLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKiBNYXAgYiB0byBnICovCi0JCWlmIChtb2RlID09IDIpCi0JCQltb2RlID0gMDsKLQkJZWxzZQotCQkJbW9kZSA9IG1vZGUgLSAzOwotCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENvcHkgdmFsdWVzIHRvIG1vZGlmeSB0aGVtICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykgewotCQlpZiAocmZfaW5pW2ldLnJmX2JhbmsgPj0gQVI1S19SRjUxMTJfSU5JX1JGX01BWF9CQU5LUykgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChiYW5rICE9IHJmX2luaVtpXS5yZl9iYW5rKSB7Ci0JCQliYW5rID0gcmZfaW5pW2ldLnJmX2Jhbms7Ci0JCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKLQkJfQotCi0JCXJmW2ldID0gcmZfaW5pW2ldLnJmX3ZhbHVlW21vZGVdOwotCX0KLQotCS8qCi0JICogQWZ0ZXIgY29tcGFpcmluZyBkdW1wcyBmcm9tIGRpZmZlcmVudCBjYXJkcwotCSAqIHdlIGdldCB0aGUgc2FtZSBSRl9CVUZGRVIgc2V0dGluZ3MgKGRpZmYgcmV0dXJucwotCSAqIDAgbGluZXMpLiBJdCBzZWVtcyB0aGF0IFJGX0JVRkZFUiBzZXR0aW5ncyBhcmUgc3RhdGljCi0JICogYW5kIGFyZSB3cml0dGVuIHVubW9kaWZpZWQgKG5vIEVFUFJPTSBzdHVmZgotCSAqIGlzIHVzZWQgYmVjYXVzZSBjYWxpYnJhdGlvbiBkYXRhIHdvdWxkIGJlCi0JICogZGlmZmVyZW50IGJldHdlZW4gZGlmZmVyZW50IGNhcmRzIGFuZCB3b3VsZCByZXN1bHQKLQkgKiBkaWZmZXJlbnQgUkZfQlVGRkVSIHNldHRpbmdzKQotCSAqLwotCi0JLyogV3JpdGUgUkYgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZltpXSwgcmZfaW5pW2ldLnJmX3JlZ2lzdGVyKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBSRgotICovCi1pbnQgYXRoNWtfaHdfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JaW50ICgqZnVuYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQpOwotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewotCWNhc2UgQVI1S19SRjUxMTE6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181MTExKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTExMV9yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjUxMTI6Ci0JCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUkFEXzUxMTJBKQotCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzUxMTJhKTsKLQkJZWxzZQotCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzUxMTIpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1MTEyX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGNTQxMzoKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzU0MTMpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQxMzoKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzI0MTMpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQyNToKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzI0MjUpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7Ci0JCS8qIFhYWCBkbyBleHRyYSBjaGVja3M/ICovCi0JCWFoLT5haF9yZl9iYW5rcyA9IGttYWxsb2MoYWgtPmFoX3JmX2JhbmtzX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCi0JcmV0ID0gZnVuYyhhaCwgY2hhbm5lbCwgbW9kZSk7Ci0JaWYgKCFyZXQpCi0JCWFoLT5haF9yZl9nYWluID0gQVI1S19SRkdBSU5fSU5BQ1RJVkU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYXRoNWtfaHdfcmZnYWluKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKQorLyogV3JpdGUgaW5pdGlhbCByZiBnYWluIHRhYmxlIHRvIHNldCB0aGUgUkYgc2Vuc2l0aXZpdHkKKyAqIHRoaXMgb25lIHdvcmtzIG9uIGFsbCBSRiBjaGlwcyBhbmQgaGFzIG5vdGhpbmcgdG8gZG8KKyAqIHdpdGggZ2Fpbl9GIGNhbGlicmF0aW9uICovCitpbnQgYXRoNWtfaHdfcmZnYWluX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpCiB7CiAJY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gKmF0aDVrX3JmZzsKIAl1bnNpZ25lZCBpbnQgaSwgc2l6ZTsKQEAgLTE2NDksMTkgKzQ1MywyMiBAQAogCQlhdGg1a19yZmcgPSByZmdhaW5fNTExMjsKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzUxMTIpOwogCQlicmVhazsKKwljYXNlIEFSNUtfUkYyNDEzOgorCQlhdGg1a19yZmcgPSByZmdhaW5fMjQxMzsKKwkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzI0MTMpOworCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE2OgorCQlhdGg1a19yZmcgPSByZmdhaW5fMjMxNjsKKwkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzIzMTYpOworCQlicmVhazsKIAljYXNlIEFSNUtfUkY1NDEzOgogCQlhdGg1a19yZmcgPSByZmdhaW5fNTQxMzsKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzU0MTMpOwogCQlicmVhazsKLQljYXNlIEFSNUtfUkYyNDEzOgotCQlhdGg1a19yZmcgPSByZmdhaW5fMjQxMzsKLQkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzI0MTMpOwotCQlmcmVxID0gMDsgLyogb25seSAyR2h6ICovCi0JCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTc6CiAJY2FzZSBBUjVLX1JGMjQyNToKIAkJYXRoNWtfcmZnID0gcmZnYWluXzI0MjU7CiAJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yNDI1KTsKLQkJZnJlcSA9IDA7IC8qIG9ubHkgMkdoeiAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2ODQsNzMgKzQ5MSwzMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2V0X3JmX2dhaW4oc3RydWN0IGF0aDVrX2h3ICphaCkKKworCisvKioqKioqKioqKioqKioqKioqKipcCisqIFJGIFJlZ2lzdGVycyBzZXR1cCAqCitcKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqIFNldHVwIFJGIHJlZ2lzdGVycyBieSB3cml0aW5nIHJmIGJ1ZmZlciBvbiBodworICovCitpbnQgYXRoNWtfaHdfcmZyZWdzX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQl1bnNpZ25lZCBpbnQgbW9kZSkKIHsKLQl1MzIgZGF0YSwgdHlwZTsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzOworCWNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgKmluaV9yZmI7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0ICpnbyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0X3N0ZXAgKmdfc3RlcDsKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwl1OCBlZV9tb2RlID0gMDsKKwl1MzIgKnJmYjsKKwlpbnQgaSwgb2JkYiA9IC0xLCBiYW5rID0gLTE7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCi0JaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMIHx8ICFhaC0+YWhfZ2Fpbi5nX2FjdGl2ZSB8fAotCQkJYWgtPmFoX3ZlcnNpb24gPD0gQVI1S19BUjUyMTEpCi0JCXJldHVybiBBUjVLX1JGR0FJTl9JTkFDVElWRTsKLQotCWlmIChhaC0+YWhfcmZfZ2FpbiAhPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRCkKLQkJZ290byBkb25lOwotCi0JZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKLQotCWlmICghKGRhdGEgJiBBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQpKSB7Ci0JCWFoLT5haF9nYWluLmdfY3VycmVudCA9IGRhdGEgPj4gQVI1S19QSFlfUEFQRF9QUk9CRV9HQUlORl9TOwotCQl0eXBlID0gQVI1S19SRUdfTVMoZGF0YSwgQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFKTsKLQotCQlpZiAodHlwZSA9PSBBUjVLX1BIWV9QQVBEX1BST0JFX1RZUEVfQ0NLKQotCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ICs9IEFSNUtfR0FJTl9DQ0tfUFJPQkVfQ09SUjsKLQotCQlpZiAoYWgtPmFoX3JhZGlvID49IEFSNUtfUkY1MTEyKSB7Ci0JCQlhdGg1a19od19yZnJlZ3NfZ2FpbmZfY29ycihhaCk7Ci0JCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPQotCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2ZfY29yciA/Ci0JCQkJKGFoLT5haF9nYWluLmdfY3VycmVudC1haC0+YWhfZ2Fpbi5nX2ZfY29ycikgOgotCQkJCTA7Ci0JCX0KLQotCQlpZiAoYXRoNWtfaHdfcmZyZWdzX2dhaW5fcmVhZGJhY2soYWgpICYmCi0JCQkJQVI1S19HQUlOX0NIRUNLX0FESlVTVCgmYWgtPmFoX2dhaW4pICYmCi0JCQkJYXRoNWtfaHdfcmZyZWdzX2dhaW5fYWRqdXN0KGFoKSkKLQkJCWFoLT5haF9yZl9nYWluID0gQVI1S19SRkdBSU5fTkVFRF9DSEFOR0U7Ci0JfQotCi1kb25lOgotCXJldHVybiBhaC0+YWhfcmZfZ2FpbjsKLX0KLQotaW50IGF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KHN0cnVjdCBhdGg1a19odyAqYWgpCi17Ci0JLyogSW5pdGlhbGl6ZSB0aGUgZ2FpbiBvcHRpbWl6YXRpb24gdmFsdWVzICovCiAJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKIAljYXNlIEFSNUtfUkY1MTExOgotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4ID0gcmZnYWluX29wdF81MTExLmdvX2RlZmF1bHQ7Ci0JCWFoLT5haF9nYWluLmdfc3RlcCA9Ci0JCSAgICAmcmZnYWluX29wdF81MTExLmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07Ci0JCWFoLT5haF9nYWluLmdfbG93ID0gMjA7Ci0JCWFoLT5haF9nYWluLmdfaGlnaCA9IDM1OwotCQlhaC0+YWhfZ2Fpbi5nX2FjdGl2ZSA9IDE7CisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTE7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTEpOworCQlpbmlfcmZiID0gcmZiXzUxMTE7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfNTExMSk7CisJCWdvID0gJnJmZ2Fpbl9vcHRfNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1JGNTExMjoKLQkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMi5nb19kZWZhdWx0OwotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkgICAgJnJmZ2Fpbl9vcHRfNTExMi5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwotCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOwotCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSA4NTsKLQkJYWgtPmFoX2dhaW4uZ19hY3RpdmUgPSAxOworCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMmE7CisJCQlhaC0+YWhfcmZfcmVnc19jb3VudCA9IEFSUkFZX1NJWkUocmZfcmVnc181MTEyYSk7CisJCQlpbmlfcmZiID0gcmZiXzUxMTJhOworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81MTEyYSk7CisJCX0gZWxzZSB7CisJCQlyZl9yZWdzID0gcmZfcmVnc181MTEyOworCQkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMik7CisJCQlpbmlfcmZiID0gcmZiXzUxMTI7CisJCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzUxMTIpOworCQl9CisJCWdvID0gJnJmZ2Fpbl9vcHRfNTExMjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQxMzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQxMzsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQxMyk7CisJCWluaV9yZmIgPSByZmJfMjQxMzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNjoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjMxNjsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjMxNik7CisJCWluaV9yZmIgPSByZmJfMjMxNjsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yMzE2KTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGNTQxMzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfNTQxMzsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTQxMyk7CisJCWluaV9yZmIgPSByZmJfNTQxMzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81NDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQyNTsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQyNSk7CisJCWluaV9yZmIgPSByZmJfMjMxNzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yMzE3KTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQyNToKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQyNTsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQyNSk7CisJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVIyNDE3KSB7CisJCQlpbmlfcmZiID0gcmZiXzI0MjU7CisJCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzI0MjUpOworCQl9IGVsc2UgeworCQkJaW5pX3JmYiA9IHJmYl8yNDE3OworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDE3KTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBJZiBpdCdzIHRoZSBmaXJzdCB0aW1lIHdlIHNldCByZiBidWZmZXIsIGFsbG9jYXRlCisJICogYWgtPmFoX3JmX2JhbmtzIGJhc2VkIG9uIGFoLT5haF9yZl9iYW5rc19zaXplCisJICogd2Ugc2V0IGFib3ZlICovCisJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7CisJCWFoLT5haF9yZl9iYW5rcyA9IGttYWxsb2Moc2l6ZW9mKHUzMikgKiBhaC0+YWhfcmZfYmFua3Nfc2l6ZSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkgeworCQkJQVRINUtfRVJSKGFoLT5haF9zYywgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLworCXJmYiA9IGFoLT5haF9yZl9iYW5rczsKKworCWZvciAoaSA9IDA7IGkgPCBhaC0+YWhfcmZfYmFua3Nfc2l6ZTsgaSsrKSB7CisJCWlmIChpbmlfcmZiW2ldLnJmYl9iYW5rID49IEFSNUtfTUFYX1JGX0JBTktTKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBiYW5rXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogQmFuayBjaGFuZ2VkLCB3cml0ZSBkb3duIHRoZSBvZmZzZXQgKi8KKwkJaWYgKGJhbmsgIT0gaW5pX3JmYltpXS5yZmJfYmFuaykgeworCQkJYmFuayA9IGluaV9yZmJbaV0ucmZiX2Jhbms7CisJCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKKwkJfQorCisJCXJmYltpXSA9IGluaV9yZmJbaV0ucmZiX21vZGVfZGF0YVttb2RlXTsKKwl9CisKKwkvKiBTZXQgT3V0cHV0IGFuZCBEcml2ZXIgYmlhcyBjdXJyZW50IChPQi9EQikgKi8KKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykKKwkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKKwkJZWxzZQorCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOworCisJCS8qIEZvciBSRjUxMVgvUkYyMTFYIGNvbWJpbmF0aW9uIHdlCisJCSAqIHVzZSBiX09CIGFuZCBiX0RCIHBhcmFtZXRlcnMgc3RvcmVkCisJCSAqIGluIGVlcHJvbSBvbiBlZS0+ZWVfb2JbZWVfbW9kZV1bMF0KKwkJICoKKwkJICogRm9yIGFsbCBvdGhlciBjaGlwcyB3ZSB1c2UgT0IvREIgZm9yIDJHaHoKKwkJICogc3RvcmVkIGluIHRoZSBiL2cgbW9kYWwgc2VjdGlvbiBqdXN0IGxpa2UKKwkJICogODAyLjExYSBvbiBlZS0+ZWVfb2JbZWVfbW9kZV1bMV0gKi8KKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpKQorCQkJb2JkYiA9IDA7CisJCWVsc2UKKwkJCW9iZGIgPSAxOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9PQl8yR0haLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSwKKwkJCQkJCUFSNUtfUkZfREJfMkdIWiwgdHJ1ZSk7CisKKwkvKiBSRjUxMTEgYWx3YXlzIG5lZWRzIE9CL0RCIGZvciA1R0h6LCBldmVuIGlmIHdlIHVzZSAyR0h6ICovCisJfSBlbHNlIGlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopIHx8CisJCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSkgeworCisJCS8qIEZvciAxMWEsIFR1cmJvIGFuZCBYUiB3ZSBuZWVkIHRvIGNob29zZQorCQkgKiBPQi9EQiBiYXNlZCBvbiBmcmVxdWVuY3kgcmFuZ2UgKi8KKwkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOworCQlvYmRiID0JIGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKKwkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6CisJCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgorCQkJIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7CisKKwkJaWYgKG9iZGIgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBlZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sCisJCQkJCQlBUjVLX1JGX09CXzVHSFosIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2RiW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9EQl81R0haLCB0cnVlKTsKKwl9CisKKwlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CisKKwkvKiBCYW5rIE1vZGlmaWNhdGlvbnMgKGNoaXAtc3BlY2lmaWMpICovCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgeworCisJCS8qIFNldCBnYWluX0Ygc2V0dGluZ3MgYWNjb3JkaW5nIHRvIGN1cnJlbnQgc3RlcCAqLworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfRlJBTUVfQ1RMLAorCQkJCQlBUjVLX1BIWV9GUkFNRV9DVExfVFhfQ0xJUCwKKwkJCQkJZ19zdGVwLT5nb3NfcGFyYW1bMF0pOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzFdLAorCQkJCQkJCUFSNUtfUkZfUFdEXzkwLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVsyXSwKKwkJCQkJCQlBUjVLX1JGX1BXRF84NCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bM10sCisJCQkJCQlBUjVLX1JGX1JGR0FJTl9TRUwsIHRydWUpOworCisJCQkvKiBXZSBwcm9ncmFtbWVkIGdhaW5fRiBwYXJhbWV0ZXJzLCBzd2l0Y2ggYmFjaworCQkJICogdG8gYWN0aXZlIHN0YXRlICovCisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fQUNUSVZFOworCisJCX0KKworCQkvKiBCYW5rIDYvNyBzZXR1cCAqLworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgIWVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BXRF9YUEQsIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX0dBSU4sIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfR0FJTl9JLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BMT19TRUwsIHRydWUpOworCisJCS8qIFRPRE86IEhhbGYvcXVhcnRlciBjaGFubmVsIHN1cHBvcnQgKi8KKwl9CisKKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB7CisKKwkJLyogU2V0IGdhaW5fRiBzZXR0aW5ncyBhY2NvcmRpbmcgdG8gY3VycmVudCBzdGVwICovCisJCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkgeworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzBdLAorCQkJCQkJQVI1S19SRl9NSVhHQUlOX09WUiwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bMV0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzgsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzJdLAorCQkJCQkJQVI1S19SRl9QV0RfMTM3LCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVszXSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzNiwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bNF0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzIsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzVdLAorCQkJCQkJQVI1S19SRl9QV0RfMTMxLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVs2XSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzMCwgdHJ1ZSk7CisKKwkJCS8qIFdlIHByb2dyYW1tZWQgZ2Fpbl9GIHBhcmFtZXRlcnMsIHN3aXRjaCBiYWNrCisJCQkgKiB0byBhY3RpdmUgc3RhdGUgKi8KKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCX0KKworCQkvKiBCYW5rIDYvNyBzZXR1cCAqLworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX3hwZFtlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX1NFTCwgdHJ1ZSk7CisKKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwgQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJLyogUmV2LiAxIHN1cHBvcnRzIG9ubHkgb25lIHhwZCAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX0dBSU4sIHRydWUpOworCisJCX0gZWxzZSB7CisJCQkvKiBUT0RPOiBTZXQgaGlnaCBhbmQgbG93IGdhaW4gYml0cyAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfUERfR0FJTl9MTywgdHJ1ZSk7CisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsCisJCQkJCQllZS0+ZWVfeF9nYWluW2VlX21vZGVdLAorCQkJCQkJQVI1S19SRl9QRF9HQUlOX0hJLCB0cnVlKTsKKworCQkJLyogTG93ZXIgc3ludGggdm9sdGFnZSBvbiBSZXYgMiAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX0hJR0hfVkNfQ1AsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDIsCisJCQkJCUFSNUtfUkZfTUlEX1ZDX0NQLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX0xPV19WQ19DUCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMiwKKwkJCQkJQVI1S19SRl9QVVNIX1VQLCB0cnVlKTsKKworCQkJLyogRGVjcmVhc2UgcG93ZXIgY29uc3VtcHRpb24gb24gNTIxMysgQmFzZUJhbmQgKi8KKwkJCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1BBRDJHTkQsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9YQjJfTFZMLCB0cnVlKTsKKworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMSwKKwkJCQkJCUFSNUtfUkZfWEI1X0xWTCwgdHJ1ZSk7CisKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1BXRF8xNjcsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9QV0RfMTY2LCB0cnVlKTsKKwkJCX0KKwkJfQorCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfR0FJTl9JLCB0cnVlKTsKKworCQkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgY2hhbm5lbCBzdXBwb3J0ICovCisKKwl9CisKKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzICYmCisJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsIEFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwKKwkJCQkJCQkJCXRydWUpOworCisJCS8qIFNldCBvcHRpbXVtIHZhbHVlIGZvciBlYXJseSByZXZpc2lvbnMgKG9uIHBjaS1lIGNoaXBzKSAqLworCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQgJiYKKwkJYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTQxMykKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgYXRoNWtfaHdfYml0c3dhcCg2LCAzKSwKKwkJCQkJCUFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsIHRydWUpOworCisJfQorCisJLyogV3JpdGUgUkYgYmFua3Mgb24gaHcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX2JhbmtzX3NpemU7IGkrKykgeworCQlBUjVLX1JFR19XQUlUKGkpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmYltpXSwgaW5pX3JmYltpXS5yZmJfY3RybF9yZWdpc3Rlcik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqXAogICBQSFkvUkYgY2hhbm5lbCBmdW5jdGlvbnMKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyNzEsMTMgKzEzMzEsOCBAQAogCSAqIGFzIG9mdGVuIGFzIEkvUSBjYWxpYnJhdGlvbi4qLwogCWF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKLQkvKiBSZXF1ZXN0IFJGIGdhaW4gKi8KLQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhwb3dlci50eHBfbWF4LAotCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWFBPV0VSKSB8Ci0JCQlBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQsIEFSNUtfUEhZX1BBUERfUFJPQkUpOwotCQlhaC0+YWhfcmZfZ2FpbiA9IEFSNUtfUkZHQUlOX1JFQURfUkVRVUVTVEVEOwotCX0KKwkvKiBJbml0aWF0ZSBhIGdhaW5fRiBjYWxpYnJhdGlvbiAqLworCWF0aDVrX2h3X3JlcXVlc3RfcmZnYWluX3Byb2JlKGFoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9xY3UuYwppbmRleCAxYjdiYzUwLi41MDk0YzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9xY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9xY3UuYwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAgKi8KIHUzMiBhdGg1a19od19udW1fdHhfcGVuZGluZyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpCiB7CisJdTMyIHBlbmRpbmc7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBUjVLX0FTU0VSVF9FTlRSWShxdWV1ZSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtKTsKIApAQCAtMTU5LDcgKzE2MCwxNSBAQAogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIEFSNUtfUVVFVUVfU1RBVFVTKHF1ZXVlKSAmIEFSNUtfUUNVX1NUU19GUk1QRU5EQ05UOworCXBlbmRpbmcgPSAoQVI1S19RVUVVRV9TVEFUVVMocXVldWUpICYgQVI1S19RQ1VfU1RTX0ZSTVBFTkRDTlQpOworCisJLyogSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vIGZyYW1lcyBwZW5kaW5nIGV2ZW4gaWYgVFhFCisJICogaXMgc2V0LiBUbyBpbmRpY2F0ZSB0aGF0IHEgaGFzIG5vdCBzdG9wcGVkIHJldHVybgorCSAqIHRydWUgKi8KKwlpZiAoIXBlbmRpbmcgJiYgQVI1S19SRUdfUkVBRF9RKGFoLCBBUjVLX1FDVV9UWEUsIHF1ZXVlKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gcGVuZGluZzsKIH0KIAogLyoKQEAgLTMyNCw4ICszMzMsMTggQEAKIAkJLyoKIAkJICogU2V0IG1pc2MgcmVnaXN0ZXJzCiAJCSAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUUNVX01JU0NfRENVX0VBUkxZLAotCQkJQVI1S19RVUVVRV9NSVNDKHF1ZXVlKSk7CisJCS8qIEVuYWJsZSBEQ1UgZWFybHkgdGVybWluYXRpb24gZm9yIHRoaXMgcXVldWUgKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfTUlTQyhxdWV1ZSksCisJCQkJCUFSNUtfUUNVX01JU0NfRENVX0VBUkxZKTsKKworCQkvKiBFbmFibGUgRENVIHRvIHdhaXQgZm9yIG5leHQgZnJhZ21lbnQgZnJvbSBRQ1UgKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAorCQkJCQlBUjVLX0RDVV9NSVNDX0ZSQUdfV0FJVCk7CisKKwkJLyogT24gTWF1aSBhbmQgU3Bpcml0IHVzZSB0aGUgZ2xvYmFsIHNlcW51bSBvbiBEQ1UgKi8KKwkJaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA8IEFSNUtfU1JFVl9BUjUyMTEpCisJCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9ERlNfTUlTQyhxdWV1ZSksCisJCQkJCQlBUjVLX0RDVV9NSVNDX1NFUU5VTV9DVEwpOwogCiAJCWlmICh0cS0+dHFpX2Nicl9wZXJpb2QpIHsKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9jYnJfcGVyaW9kLApAQCAtMzQxLDcgKzM2MCw4IEBACiAJCQkJCUFSNUtfUUNVX01JU0NfQ0JSX1RIUkVTX0VOQUJMRSk7CiAJCX0KIAotCQlpZiAodHEtPnRxaV9yZWFkeV90aW1lKQorCQlpZiAodHEtPnRxaV9yZWFkeV90aW1lICYmCisJCSh0cS0+dHFpX3R5cGUgIT0gQVI1S19UWF9RVUVVRV9JRF9DQUIpKQogCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTSh0cS0+dHFpX3JlYWR5X3RpbWUsCiAJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19JTlRWQUwpIHwKIAkJCQlBUjVLX1FDVV9SRFlUSU1FQ0ZHX0VOQUJMRSwKQEAgLTM4MywxMyArNDAzLDYgQEAKIAkJCQlBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX1MpIHwKIAkJCQlBUjVLX0RDVV9NSVNDX1BPU1RfRlJfQktPRkZfRElTIHwKIAkJCQlBUjVLX0RDVV9NSVNDX0JDTl9FTkFCTEUpOwotCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19UVU5FX0JFQUNPTl9JTlRFUlZBTCAtCi0JCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCi0JCQkJQVI1S19UVU5FX0RNQV9CRUFDT05fUkVTUCkgLQotCQkJCUFSNUtfVFVORV9BRERJVElPTkFMX1NXQkFfQkFDS09GRikgKiAxMDI0KSB8Ci0JCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCi0JCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CiAJCQlicmVhazsKIAogCQljYXNlIEFSNUtfVFhfUVVFVUVfQ0FCOgpAQCAtMzk4LDYgKzQxMSwxMyBAQAogCQkJCUFSNUtfUUNVX01JU0NfQ0JSRVhQX0RJUyB8CiAJCQkJQVI1S19RQ1VfTUlTQ19DQlJFWFBfQkNOX0RJUyk7CiAKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKChBUjVLX1RVTkVfQkVBQ09OX0lOVEVSVkFMIC0KKwkJCQkoQVI1S19UVU5FX1NXX0JFQUNPTl9SRVNQIC0KKwkJCQlBUjVLX1RVTkVfRE1BX0JFQUNPTl9SRVNQKSAtCisJCQkJQVI1S19UVU5FX0FERElUSU9OQUxfU1dCQV9CQUNLT0ZGKSAqIDEwMjQpIHwKKwkJCQlBUjVLX1FDVV9SRFlUSU1FQ0ZHX0VOQUJMRSwKKwkJCQlBUjVLX1FVRVVFX1JEWVRJTUVDRkcocXVldWUpKTsKKwogCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAogCQkJCShBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX0dMT0JBTCA8PAogCQkJCUFSNUtfRENVX01JU0NfQVJCTE9DS19DVExfUykpOwpAQCAtNDEzLDYgKzQzMyw4IEBACiAJCQlicmVhazsKIAkJfQogCisJCS8qIFRPRE86IEhhbmRsZSBmcmFtZSBjb21wcmVzc2lvbiAqLworCiAJCS8qCiAJCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIHR4IHF1ZXVlCiAJCSAqIGluIHRoZSBzZWNvbmRhcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzCkBAIC00ODMsNiArNTA1LDkgQEAKIAkJICogYnkgc2V0dGluZyBBUjVLX1RYTk9GUk0gdG8gemVybyAqLwogCQlpZiAoYWgtPmFoX3R4cV9pbXJfbm9mcm0gPT0gMCkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19UWE5PRlJNKTsKKworCQkvKiBTZXQgUUNVIG1hc2sgZm9yIHRoaXMgRENVIHRvIHNhdmUgcG93ZXIgKi8KKwkJQVI1S19SRUdfV1JJVEVfUShhaCwgQVI1S19RVUVVRV9RQ1VNQVNLKHF1ZXVlKSwgcXVldWUpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZWcuaAppbmRleCA5MTg5YWIxLi4yZGMwMDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZWcuaApAQCAtMTg3LDYgKzE4Nyw3IEBACiAjZGVmaW5lIEFSNUtfVFhDRkdfRlJNUEFEX0RJUwkJMHgwMDAwMjAwMAkvKiBbNTIxMStdICovCiAjZGVmaW5lIEFSNUtfVFhDRkdfUkRZX0NCUl9ESVMJCTB4MDAwMDQwMDAJLyogUmVhZHkgdGltZSBDQlIgZGlzYWJsZSBbNTIxMStdICovCiAjZGVmaW5lIEFSNUtfVFhDRkdfSlVNQk9fRlJNX01PREUJMHgwMDAwODAwMAkvKiBKdW1ibyBmcmFtZSBtb2RlIFs1MjExK10gKi8KKyNkZWZpbmUJQVI1S19UWENGR19EQ1VfREJMX0JVRl9ESVMJMHgwMDAwODAwMAkvKiBEaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcgb24gRENVICovCiAjZGVmaW5lIEFSNUtfVFhDRkdfRENVX0NBQ0hJTkdfRElTCTB4MDAwMTAwMDAJLyogRGlzYWJsZSBEQ1UgY2FjaGluZyAqLwogCiAvKgpAQCAtNzUzLDcgKzc1NCw3IEBACiAgKi8KICNkZWZpbmUgQVI1S19EQ1VfU0VRTlVNX0JBU0UJCTB4MTE0MAogI2RlZmluZQlBUjVLX0RDVV9TRVFOVU1fTQkJMHgwMDAwMGZmZgotI2RlZmluZQlBUjVLX1FVRVVFX0RGU19TRVFOVU0oX3EpCUFSNUtfUVVFVUVfUkVHKEFSNUtfRENVX1NFUU5VTV9CQVNFLCBfcSkKKyNkZWZpbmUJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKF9xKQlBUjVLX1FVRVVFX1JFRyhBUjVLX0RDVV9TRVFOVU1fQkFTRSwgX3EpCiAKIC8qCiAgKiBEQ1UgZ2xvYmFsIElGUyBTSUZTIHJlZ2lzdGVyCkBAIC04MTEsNiArODEyLDggQEAKIAogLyoKICAqIERDVSB0cmFuc21pdCBmaWx0ZXIgdGFibGUgMCAoMzIgZW50cmllcykKKyAqIGVhY2ggZW50cnkgY29udGFpbnMgYSAzMmJpdCBzbGljZSBvZiB0aGUKKyAqIDEyOGJpdCB0eCBmaWx0ZXIgZm9yIGVhY2ggRENVICg0IHNsaWNlcyBwZXIgRENVKQogICovCiAjZGVmaW5lIEFSNUtfRENVX1RYX0ZJTFRFUl8wX0JBU0UJMHgxMDM4CiAjZGVmaW5lCUFSNUtfRENVX1RYX0ZJTFRFUl8wKF9uKQkoQVI1S19EQ1VfVFhfRklMVEVSXzBfQkFTRSArIChfbiAqIDY0KSkKQEAgLTgxOSw3ICs4MjIsNyBAQAogICogRENVIHRyYW5zbWl0IGZpbHRlciB0YWJsZSAxICgxNiBlbnRyaWVzKQogICovCiAjZGVmaW5lIEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UJMHgxMDNjCi0jZGVmaW5lCUFSNUtfRENVX1RYX0ZJTFRFUl8xKF9uKQkoQVI1S19EQ1VfVFhfRklMVEVSXzFfQkFTRSArICgoX24gLSAzMikgKiA2NCkpCisjZGVmaW5lCUFSNUtfRENVX1RYX0ZJTFRFUl8xKF9uKQkoQVI1S19EQ1VfVFhfRklMVEVSXzFfQkFTRSArIChfbiAqIDY0KSkKIAogLyoKICAqIERDVSBjbGVhciB0cmFuc21pdCBmaWx0ZXIgcmVnaXN0ZXIKQEAgLTE0NDcsNyArMTQ1MCw3IEBACiAJCQkJQVI1S19UU0ZfVTMyXzUyMTAgOiBBUjVLX1RTRl9VMzJfNTIxMSkKIAogLyoKLSAqIExhc3QgYmVhY29uIHRpbWVzdGFtcCByZWdpc3RlcgorICogTGFzdCBiZWFjb24gdGltZXN0YW1wIHJlZ2lzdGVyIChSZWFkIE9ubHkpCiAgKi8KICNkZWZpbmUgQVI1S19MQVNUX1RTVFAJMHg4MDgwCiAKQEAgLTE0NjUsNyArMTQ2OCw3IEBACiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9UUklHX1BUWQkweDAwMDIwMDAwCS8qIFRyaWdnZXIgcG9sYXJpdHkgKi8KICNkZWZpbmUgQVI1S19BRERBQ19URVNUX1JYQ09OVAkJMHgwMDA0MDAwMAkvKiBDb250aW51b3VzIGNhcHR1cmUgKi8KICNkZWZpbmUgQVI1S19BRERBQ19URVNUX0NBUFRVUkUJCTB4MDAwODAwMDAJLyogQmVnaW4gY2FwdHVyZSAqLwotI2RlZmluZSBBUjVLX0FEREFDX1RFU1RfVFNUX0FSTQkJMHgwMDEwMDAwMAkvKiBUZXN0IEFSTSAoQWRhcHRpdmUgUmFkaW8gTW9kZSA/KSAqLworI2RlZmluZSBBUjVLX0FEREFDX1RFU1RfVFNUX0FSTQkJMHgwMDEwMDAwMAkvKiBBUk0gcnggYnVmZmVyIGZvciBjYXB0dXJlICovCiAKIC8qCiAgKiBEZWZhdWx0IGFudGVubmEgcmVnaXN0ZXIgWzUyMTErXQpAQCAtMTY3Nyw3ICsxNjgwLDcgQEAKICAqIFRTRiBwYXJhbWV0ZXIgcmVnaXN0ZXIKICAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNCQkJMHg4MTA0CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19NCQkweDAwMDAwMGZmCS8qIE1hc2sgZm9yIFRTRiBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgQVI1S19UU0ZfUEFSTV9JTkMJCTB4MDAwMDAwZmYJLyogTWFzayBmb3IgVFNGIGluY3JlbWVudCAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19TCQkwCiAKIC8qCkBAIC0xNjg5LDcgKzE2OTIsNyBAQAogI2RlZmluZSBBUjVLX1FPU19OT0FDS19CSVRfT0ZGU0VUCTB4MDAwMDAwNzAJLyogPz8/ICovCiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVRfUwk0CiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUCTB4MDAwMDAxODAJLyogPz8/ICovCi0jZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUX1MJOAorI2RlZmluZSBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVF9TCTcKIAogLyoKICAqIFBIWSBlcnJvciBmaWx0ZXIgcmVnaXN0ZXIKQEAgLTE4NDgsMTUgKzE4NTEsMTQgQEAKICAqIFRTVF8yIChNaXNjIGNvbmZpZyBwYXJhbWV0ZXJzKQogICovCiAjZGVmaW5lCUFSNUtfUEhZX1RTVDIJCQkweDk4MDAJCQkvKiBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJR19TRUwJCTB4MDAwMDAwMDEJLyogVHJpZ2dlciBzZWxlY3QgKD8pIChmaWVsZCA/KSAqLwotI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUcJCTB4MDAwMDAwMTAJLyogVHJpZ2dlciAoPykgKGZpZWxkID8pICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0JVU19NT0RFCQkweDAwMDAwMTAwCS8qIENhcmRidXMgbW9kZSAoPykgKi8KLS8qIGJpdCByZXNlcnZlZCAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUdfU0VMCQkweDAwMDAwMDA3CS8qIFRyaWdnZXIgc2VsZWN0ICg/KSovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJRwkJMHgwMDAwMDAxMAkvKiBUcmlnZ2VyICg/KSAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX0NCVVNfTU9ERQkJMHgwMDAwMDA2MAkvKiBDYXJkYnVzIG1vZGUgKD8pICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0xLMzIJCTB4MDAwMDA0MDAJLyogQ0xLX09VVCBpcyBDTEszMiAoMzJLaHogZXh0ZXJuYWwpICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0hBTkNPUl9EVU1QX0VOCTB4MDAwMDA4MDAJLyogRW5hYmxlIENoYW5jb3IgZHVtcCAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9FVkVOX0NIQU5DT1JfRFVNUAkweDAwMDAxMDAwCS8qIEV2ZW4gQ2hhbmNvciBkdW1wICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1JGU0lMRU5UX0VOCTB4MDAwMDIwMDAJLyogRW5hYmxlIFJGU0lMRU5UICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2gpICovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2ggPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9NSU5JX09CU19FTgkweDAwMDA4MDAwCS8qIEVuYWJsZSBtaW5pIE9CUyAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9SWDJfSVNfUlg1X0lOVgkweDAwMDEwMDAwCS8qIDJHSHogcnggcGF0aCBpcyB0aGUgNUdIeiBwYXRoIGludmVydGVkICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1NMT1dfQ0xLMTYwCTB4MDAwMjAwMDAJLyogU2xvdyBDTEsxNjAgKD8pICovCkBAIC0xOTI2LDggKzE5MjgsOCBAQAogI2RlZmluZQlBUjVLX1BIWV9SRl9DVEwyX1RYRjJUWERfU1RBUlRfUwkwCiAKICNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMMwkJMHg5ODI4CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1BIWV9SRl9DVEwzX1RYRTJYTE5BX09OCTB4MDAwMDAwMGYJLyogVFggZW5kIHRvIFhMTkEgb24gKi8KLSNkZWZpbmUJQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTl9TCTAKKyNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTgkweDAwMDBmZjAwCS8qIFRYIGVuZCB0byBYTE5BIG9uICovCisjZGVmaW5lCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT05fUwk4CiAKICNkZWZpbmUJQVI1S19QSFlfQURDX0NUTAkJCTB4OTgyYwogI2RlZmluZQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PRkYJCTB4MDAwMDAwMDMKQEAgLTE5NjEsNyArMTk2Myw3IEBACiAjZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5HX0FHQwkJMHgwMDAwMDA3ZgkvKiBBR0Mgc2V0dGxpbmcgdGltZSAqLwogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19BR0NfUwkJMAogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gJMHgwMDAwM2Y4MAkvKiBTd2l0Y2ggc2V0dGxpZyB0aW1lICovCi0jZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5LX1NXSVRDSF9TCTcKKyNkZWZpbmUJQVI1S19QSFlfU0VUVExJTkdfU1dJVENIX1MJNwogCiAvKgogICogUEhZIEdhaW4gcmVnaXN0ZXJzCkBAIC0yMDY3LDE0ICsyMDY5LDE0IEBACiAgKiBQSFkgc2xlZXAgcmVnaXN0ZXJzIFs1MTEyK10KICAqLwogI2RlZmluZSBBUjVLX1BIWV9TQ1IJCQkweDk4NzAKLSNkZWZpbmUgQVI1S19QSFlfU0NSXzMyTUhaCQkweDAwMDAwMDFmCiAKICNkZWZpbmUgQVI1S19QSFlfU0xNVAkJCTB4OTg3NAogI2RlZmluZSBBUjVLX1BIWV9TTE1UXzMyTUhaCQkweDAwMDAwMDdmCiAKICNkZWZpbmUgQVI1S19QSFlfU0NBTAkJCTB4OTg3OAogI2RlZmluZSBBUjVLX1BIWV9TQ0FMXzMyTUhaCQkweDAwMDAwMDBlCi0KKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3CTB4MDAwMDAwMGEKKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzCTB4MDAwMDAwMzIKIAogLyoKICAqIFBIWSBQTEwgKFBoYXNlIExvY2tlZCBMb29wKSBjb250cm9sIHJlZ2lzdGVyCkBAIC0yMTAxLDM0ICsyMTAzLDEwIEBACiAvKgogICogUkYgQnVmZmVyIHJlZ2lzdGVyCiAgKgotICogVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBjb250cm9sIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAotICogdGhhdCBob2xkIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCi0gKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KLSAqCi0gKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0Ci0gKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGJ1ZmZlciByZWdpc3RlciBhbmQKLSAqIHRoZW4gd3JpdGUgb24gYW5vdGhlciBzcGVjaWFsIHJlZ2lzdGVyIHRvIG5vdGlmeSBodwotICogdG8gYXBwbHkgdGhlIHNldHRpbmdzLiBUaGlzIGlzIGRvbmUgc28gdGhhdCBjb250cm9sIHJlZ2lzdGVycwotICogY2FuIGJlIGR5bmFtaWNhbHkgcHJvZ3JhbW1lZCBkdXJpbmcgb3BlcmF0aW9uIGFuZCB0aGUgc2V0dGluZ3MKLSAqIGFyZSBhcHBsaWVkIGZhc3RlciBvbiB0aGUgaHcuCi0gKgotICogV2Ugc2VudCBzdWNoIGRhdGEgcGFja2V0cyBkdXJpbmcgcmYgaW5pdGlhbGl6YXRpb24gYW5kIGNoYW5uZWwgY2hhbmdlCi0gKiB0aHJvdWdoIGF0aDVrX2h3X3JmKl9yZnJlZ3MgYW5kIGF0aDVrX2h3X3JmKl9jaGFubmVsIGZ1bmN0aW9ucy4KLSAqCi0gKiBUaGUgZGF0YSBwYWNrZXRzIHdlIHNlbmQgZHVyaW5nIGluaXRpYWxpemFkaW9uIGFyZSBpbnNpZGUgYXRoNWtfaW5pX3JmCi0gKiBzdHJ1Y3QgKHNlZSBhdGg1a19ody5oKSBhbmQgZWFjaCBvbmUgaXMgcmVsYXRlZCB0byBhbiAicmYgcmVnaXN0ZXIgYmFuayIuCi0gKiBXZSB1c2UgKnJmcmVncyBmdW5jdGlvbnMgdG8gbW9kaWZ5IHRoZW0gIGFjb3JkaW5nIHRvIGN1cnJlbnQgb3BlcmF0aW9uCi0gKiBtb2RlIGFuZCBlZXByb20gdmFsdWVzIGFuZCBwYXNzIHRoZW0gYWxsIHRvZ2V0aGVyIHRvIHRoZSBjaGlwLgotICoKICAqIEl0J3Mgb2J2aW91cyBmcm9tIHRoZSBjb2RlIHRoYXQgMHg5ODljIGlzIHRoZSBidWZmZXIgcmVnaXN0ZXIgYnV0CiAgKiBmb3IgdGhlIG90aGVyIHNwZWNpYWwgcmVnaXN0ZXJzIHRoYXQgd2Ugd3JpdGUgdG8gYWZ0ZXIgc2VuZGluZyBlYWNoCiAgKiBwYWNrZXQsIGkgaGF2ZSBubyBpZGVhLiBTbyBpJ2xsIG5hbWUgdGhlbSBCVUZGRVJfQ09OVFJPTF9YIHJlZ2lzdGVycwogICogZm9yIG5vdy4gSXQncyBpbnRlcmVzdGluZyB0aGF0IHRoZXkgYXJlIGFsc28gdXNlZCBmb3Igc29tZSBvdGhlciBvcGVyYXRpb25zLgotICoKLSAqIEFsc28gY2hlY2sgb3V0IGh3LmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgotICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6Ci0gKgotICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCiAgKi8KIAogI2RlZmluZSBBUjVLX1JGX0JVRkZFUgkJCTB4OTg5YwpAQCAtMjE3OCw3ICsyMTU2LDggQEAKICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIFRYL1JYICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9BTlRfQ1RMX1NFQ1RPUkVEX0FOVAkweDAwMDAwMDA0CS8qIFNlY3RvcmVkIEFudGVubmEgKi8KICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9ISVRVTkU1CTB4MDAwMDAwMDgJLyogSGl0dW5lNSAoPykgKi8KLSNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDAxMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDNmMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEVfUwk0CiAKIC8qCiAgKiBQSFkgcmVjZWl2ZXIgZGVsYXkgcmVnaXN0ZXIgWzUxMTErXQpAQCAtMjIxOCw3ICsyMTk3LDcgQEAKICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUgkJCTB4OTkyNAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKi8KICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIGN5Y2xpYyBSU1NJIHRociAxICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMQkweDAwMDAwMGZlCS8qIE1hc2sgZm9yIEN5Y2xpYyBSU1NJIHRocmVzaG9sZCAxICovCi0jZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMV9TCTAKKyNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX1MJMQogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjMJMHgwMDAwMDEwMAkvKiBDeWNsaWMgUlNTSSB0aHJlc2hvbGQgMyAoZmllbGQpICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX1JTU0lfMUFUSFJfRU4JMHgwMDAwODAwMAkvKiBFbmFibGUgMUEgUlNTSSB0aHJlc2hvbGQgKD8pICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfUlNTSV8xQVRIUgkweDAwMDEwMDAwCS8qIDFBIFJTU0kgdGhyZXNob2xkIChmaWVsZCkgKD8pICovCkBAIC0yMjQzLDkgKzIyMjIsNyBAQAogI2RlZmluZQlBUjVLX1BIWV9DVExfTE9XX0ZSRVFfU0xFX0VOCTB4MDAwMDAwODAJLyogRW5hYmxlIGxvdyBmcmVxIHNsZWVwICovCiAKIC8qCi0gKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMSsgKD8pXQotICogSXMgdGhpcyBvbmx5IHByZXNlbnQgaW4gNTIxMiA/Ci0gKiBCZWNhdXNlIGl0J3MgYWx3YXlzIDAgaW4gNTIxMSBpbml0aWFsaXphdGlvbiBjb2RlCisgKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMStdCiAgKi8KICNkZWZpbmUJQVI1S19QSFlfUEFQRF9QUk9CRQkJMHg5OTMwCiAjZGVmaW5lCUFSNUtfUEhZX1BBUERfUFJPQkVfU0hfSElfUEFSCTB4MDAwMDAwMDEKQEAgLTIzMDMsNiArMjI4MCwxNSBAQAogCQkJQVI1S19QSFlfRlJBTUVfQ1RMX1RJTUlOR19FUlIKIAogLyoKKyAqIFBIWSBUeCBQb3dlciBhZGp1c3RtZW50IHJlZ2lzdGVyIFs1MjEyQStdCisgKi8KKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESgkJCTB4OTk0YworI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19HQUlOX0RFTFRBCTB4MDAwMDBmYzAKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfR0FJTl9ERUxUQV9TCTYKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgJMHgwMGZjMDAwMAorI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19QQ0RBQ19JTkRFWF9TCTE4CisKKy8qCiAgKiBQSFkgcmFkYXIgZGV0ZWN0aW9uIHJlZ2lzdGVyIFs1MTExK10KICAqLwogI2RlZmluZQlBUjVLX1BIWV9SQURBUgkJCTB4OTk1NApAQCAtMjM1NSw3ICsyMzQxLDcgQEAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDJfUwkzCiAjZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0ZJTFQxCTB4MDAwMDFmMDAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDFfUwk4Ci0jZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0FEQ19DTElQCTB4MDFmZjMwMDAKKyNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfQURDX0NMSVAJMHgwMWZmZTAwMAogI2RlZmluZSBBUjVLX1BIWV9TSUdNQV9ERUxUQV9BRENfQ0xJUF9TCTEzCiAKIC8qCkBAIC0yMzg3LDIxICsyMzczLDIxIEBACiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNAkweDAwMDAzZmZmCiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNF9TCTAKIAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzkJCQkweDk5OTgKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMAkJMHg5OTljCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCTB4MDAwZmZmZmYKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR185CQkJMHg5OTk4CisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMAkJCTB4OTk5YworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCQkweDAwMGZmZmZmCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCiAKIC8qCiAgKiBTcHVyIG1pdGlnYXRpb24gY29udHJvbAogICovCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFCTB4MDAwZmZmZmYJLyogU3B1ciBkZWx0YSBwaGFzZSAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0VfUwkwCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0ZSRVFfU0RfUwkyMAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX0FHQwkweDQwMDAwMDAwCS8qIFNwdXIgZmlsdGVyIGluIEFHQyBkZXRlY3RvciAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0UJMHgwMDBmZmZmZgkvKiBTcHVyIGRlbHRhIHBoYXNlICovCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFX1MJMAorI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfRlJFUV9TRF9TCTIwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9VU0VfU1BVUl9JTl9BR0MJMHg0MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBBR0MgZGV0ZWN0b3IgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLwogCiAvKgogICogR2FpbiB0YWJsZXMKQEAgLTI0ODMsMTcgKzI0NjksNyBAQAogI2RlZmluZSBBUjVLX1BIWV9TREVMQVkJCQkweDk5ZjQKICNkZWZpbmUgQVI1S19QSFlfU0RFTEFZXzMyTUhaCQkweDAwMDAwMGZmCiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HCQkweDk5ZjgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTQJCTB4MDAwMDAwMTQKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTgJCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyCTB4MDAwMDAwMTQKLS8qICNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyQQkweDAwMDAwMDBlICovCi0vKiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQyNAkweDAwMDAwMDEyICovCi0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNgkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNQkweDAwMDAwMDE0CisKIAogLyoKICAqIFBIWSBQQVBEIEkgKHBvd2VyPykgdGFibGUgKD8pCkBAIC0yNTA1LDExICsyNDgxLDcgQEAKIC8qCiAgKiBQSFkgUENEQUMgVFggcG93ZXIgdGFibGUKICAqLwotI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMQkweGExODAKLSNkZWZpbmUgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFXzI0MTMJMHhhMjgwCi0jZGVmaW5lIEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRQkoYWgtPmFoX3JhZGlvID49IEFSNUtfUkYyNDEzID8gXAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfMjQxMyA6XAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMSkKKyNkZWZpbmUJQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFCTB4YTE4MAogI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCiAKIC8qCkBAIC0yNTkwLDMgKzI1NjIsOSBAQAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1X1BEX0dBSU5fQk9VTkRBUllfM19TCTE2CiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV80CTB4MEZDMDAwMDAKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzRfUwkyMgorCisvKgorICogUEhZIFBEQURDIFR4IHBvd2VyIHRhYmxlCisgKi8KKyNkZWZpbmUgQVI1S19QSFlfUERBRENfVFhQT1dFUl9CQVNFCTB4YTI4MAorI2RlZmluZQlBUjVLX1BIWV9QREFEQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUERBRENfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVzZXQuYwppbmRleCBkYzJkN2Q4Li42ODVkYzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMKQEAgLTI1LDcgKzI1LDggQEAKICAgUmVzZXQgZnVuY3Rpb25zIGFuZCBoZWxwZXJzCiBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4gCQkvKiBUbyBkZXRlcm1pbmUgaWYgYSBjYXJkIGlzIHBjaS1lICovCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CS8qIEZvciBnZXRfYml0bWFza19vcmRlciAqLwogI2luY2x1ZGUgImF0aDVrLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgpAQCAtMzcsMTAgKzM4LDE0IEBACiAgKiBAYWg6IHRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKiBAY2hhbm5lbDogdGhlIGN1cnJlbnRseSBzZXQgY2hhbm5lbCB1cG9uIHJlc2V0CiAgKgotICogV3JpdGUgdGhlIE9GRE0gdGltaW5ncyBmb3IgdGhlIEFSNTIxMiB1cG9uIHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgotICogYXRoNWtfaHdfcmVzZXQoKS4gVGhpcyBzZWVtcyB0byB0dW5lIHRoZSBQTEwgYSBzcGVjaWZpZWQgZnJlcXVlbmN5Ci0gKiBkZXBlbmRpbmcgb24gdGhlIGJhbmR3aWR0aCBvZiB0aGUgY2hhbm5lbC4KKyAqIFdyaXRlIHRoZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCAodXNlZCBvbiBwaWxvdCB0cmFja2luZyA/KSBmb3IgT0ZETQorICogb3BlcmF0aW9uIG9uIHRoZSBBUjUyMTIgdXBvbiByZXNldC4gVGhpcyBpcyBhIGhlbHBlciBmb3IgYXRoNWtfaHdfcmVzZXQoKS4KICAqCisgKiBTaW5jZSBkZWx0YSBzbG9wZSBpcyBmbG9hdGluZyBwb2ludCB3ZSBzcGxpdCBpdCBvbiBpdHMgZXhwb25lbnQgYW5kCisgKiBtYW50aXNzYSBhbmQgcHJvdmlkZSB0aGVzZSB2YWx1ZXMgb24gaHcuCisgKgorICogRm9yIG1vcmUgaW5mb3MgaSB0aGluayB0aGlzIHBhdGVudCBpcyByZWxhdGVkCisgKiBodHRwOi8vd3d3LmZyZWVwYXRlbnRzb25saW5lLmNvbS83MTg0NDk1Lmh0bWwKICAqLwogc3RhdGljIGlubGluZSBpbnQgYXRoNWtfaHdfd3JpdGVfb2ZkbV90aW1pbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQpAQCAtNTMsMjMgKzU4LDM0IEBACiAJCSEoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pKQogCQlCVUcoKTsKIAotCS8qIFNlZW1zIHRoZXJlIGFyZSB0d28gUExMcywgb25lIGZvciBiYXNlYmFuZCBzYW1wbGluZyBhbmQgb25lCi0JICogZm9yIHR1bmluZy4gVHVuaW5nIGJhc2ViYW5kcyBhcmUgNDAgTUh6IG9yIDgwTUh6IHdoZW4gaW4KLQkgKiB0dXJiby4gKi8KLQljbG9jayA9IGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTyA/IDgwIDogNDA7Ci0JY29lZl9zY2FsZWQgPSAoKDUgKiAoY2xvY2sgPDwgMjQpKSAvIDIpIC8KLQljaGFubmVsLT5jZW50ZXJfZnJlcTsKKwkvKiBHZXQgY29lZmZpY2llbnQKKwkgKiBBTEdPOiBjb2VmID0gKDUgKiBjbG9jayAqIGNhcnJpZXJfZnJlcSkgLyAyKQorCSAqIHdlIHNjYWxlIGNvZWYgYnkgc2hpZnRpbmcgY2xvY2sgdmFsdWUgYnkgMjQgZm9yCisJICogYmV0dGVyIHByZWNpc2lvbiBzaW5jZSB3ZSB1c2UgaW50ZWdlcnMgKi8KKwkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZSAqLworCWNsb2NrID0gIGF0aDVrX2h3X2h0b2Nsb2NrKDEsIGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTyk7CiAKLQlmb3IgKGNvZWZfZXhwID0gMzE7IGNvZWZfZXhwID4gMDsgY29lZl9leHAtLSkKLQkJaWYgKChjb2VmX3NjYWxlZCA+PiBjb2VmX2V4cCkgJiAweDEpCi0JCQlicmVhazsKKwljb2VmX3NjYWxlZCA9ICgoNSAqIChjbG9jayA8PCAyNCkpIC8gMikgLyBjaGFubmVsLT5jZW50ZXJfZnJlcTsKIAorCS8qIEdldCBleHBvbmVudAorCSAqIEFMR086IGNvZWZfZXhwID0gMTQgLSBoaWdoZXN0IHNldCBiaXQgcG9zaXRpb24gKi8KKwljb2VmX2V4cCA9IGdldF9iaXRtYXNrX29yZGVyKGNvZWZfc2NhbGVkKTsKKworCS8qIERvZXNuJ3QgbWFrZSBzZW5zZSBpZiBpdCdzIHplcm8qLwogCWlmICghY29lZl9leHApCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogTm90ZTogd2UndmUgc2hpZnRlZCBjb2VmX3NjYWxlZCBieSAyNCAqLwogCWNvZWZfZXhwID0gMTQgLSAoY29lZl9leHAgLSAyNCk7CisKKworCS8qIEdldCBtYW50aXNzYSAoc2lnbmlmaWNhbnQgZGlnaXRzKQorCSAqIEFMR086IGNvZWZfbWFudCA9IGZsb29yKGNvZWZfc2NhbGVkKiAyXmNvZWZfZXhwKzAuNSkgKi8KIAljb2VmX21hbiA9IGNvZWZfc2NhbGVkICsKIAkJKDEgPDwgKDI0IC0gY29lZl9leHAgLSAxKSk7CisKKwkvKiBDYWxjdWxhdGUgZGVsdGEgc2xvcGUgY29lZmZpY2llbnQgZXhwb25lbnQKKwkgKiBhbmQgbWFudGlzc2EgKHJlbW92ZSBzY2FsaW5nKSBhbmQgc2V0IHRoZW0gb24gaHcgKi8KIAlkc19jb2VmX21hbiA9IGNvZWZfbWFuID4+ICgyNCAtIGNvZWZfZXhwKTsKIAlkc19jb2VmX2V4cCA9IGNvZWZfZXhwIC0gMTY7CiAKQEAgLTg2LDIwICsxMDIsMjcgQEAKICAqIGluZGV4IGludG8gcmF0ZXMgZm9yIGNvbnRyb2wgcmF0ZXMsIHdlIGNhbiBzZXQgaXQgdXAgbGlrZSB0aGlzIGJlY2F1c2UKICAqIHRoaXMgaXMgb25seSB1c2VkIGZvciBBUjUyMTIgYW5kIHdlIGtub3cgaXQgc3VwcG9ydHMgRyBtb2RlCiAgKi8KLXN0YXRpYyBpbnQgY29udHJvbF9yYXRlc1tdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY29udHJvbF9yYXRlc1tdID0KIAl7IDAsIDEsIDEsIDEsIDQsIDQsIDYsIDYsIDgsIDgsIDgsIDggfTsKIAogLyoqCi0gKiBhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uIC0gc2V0IHJhdGUgZHVyYXRpb24gZHVyaW5nIGh3IHJlc2V0cworICogYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbiAtIGZpbGwgcmF0ZSBjb2RlIHRvIGR1cmF0aW9uIHRhYmxlCiAgKgogICogQGFoOiB0aGUgJnN0cnVjdCBhdGg1a19odwogICogQG1vZGU6IG9uZSBvZiBlbnVtIGF0aDVrX2RyaXZlcl9tb2RlCiAgKgotICogV3JpdGUgdGhlIHJhdGUgZHVyYXRpb24gdGFibGUgdXBvbiBodyByZXNldC4gVGhpcyBpcyBhIGhlbHBlciBmb3IKLSAqIGF0aDVrX2h3X3Jlc2V0KCkuIEl0IHNlZW1zIGFsbCB0aGlzIGlzIGRvaW5nIGlzIHNldHRpbmcgYW4gQUNLIHRpbWVvdXQgZm9yCi0gKiB0aGUgaGFyZHdhcmUgZm9yIHRoZSBjdXJyZW50IG1vZGUgZm9yIGVhY2ggcmF0ZS4gVGhlIHJhdGVzIHdoaWNoIGFyZSBjYXBhYmxlCi0gKiBvZiBzaG9ydCBwcmVhbWJsZSAoODAyLjExYiByYXRlcyAyTWJwcywgNS41TWJwcywgYW5kIDExTWJwcykgaGF2ZSBhbm90aGVyCi0gKiByZWdpc3RlciBmb3IgdGhlIHNob3J0IHByZWFtYmxlIEFDSyB0aW1lb3V0IGNhbGN1bGF0aW9uLgorICogV3JpdGUgdGhlIHJhdGUgY29kZSB0byBkdXJhdGlvbiB0YWJsZSB1cG9uIGh3IHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgorICogYXRoNWtfaHdfcmVzZXQoKS4gSXQgc2VlbXMgYWxsIHRoaXMgaXMgZG9pbmcgaXMgc2V0dGluZyBhbiBBQ0sgdGltZW91dCBvbgorICogdGhlIGhhcmR3YXJlLCBiYXNlZCBvbiBjdXJyZW50IG1vZGUsIGZvciBlYWNoIHJhdGUuIFRoZSByYXRlcyB3aGljaCBhcmUKKyAqIGNhcGFibGUgb2Ygc2hvcnQgcHJlYW1ibGUgKDgwMi4xMWIgcmF0ZXMgMk1icHMsIDUuNU1icHMsIGFuZCAxMU1icHMpIGhhdmUKKyAqIGRpZmZlcmVudCByYXRlIGNvZGUgc28gd2Ugd3JpdGUgdGhlaXIgdmFsdWUgdHdpY2UgKG9uZSBmb3IgbG9uZyBwcmVhbXBsZQorICogYW5kIG9uZSBmb3Igc2hvcnQpLgorICoKKyAqIE5vdGU6IEJhbmQgZG9lc24ndCBtYXR0ZXIgaGVyZSwgaWYgd2Ugc2V0IHRoZSB2YWx1ZXMgZm9yIE9GRE0gaXQgd29ya3MKKyAqIG9uIGJvdGggYSBhbmQgZyBtb2Rlcy4gU28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgc2V0IHZhbHVlcyBmb3IgYWxsIGcgcmF0ZXMKKyAqIHRoYXQgaW5jbHVkZSBhbGwgT0ZETSBhbmQgQ0NLIHJhdGVzLiBJZiB3ZSBvcGVyYXRlIGluIHR1cmJvIG9yIHhyL2hhbGYvCisgKiBxdWFydGVyIHJhdGUgbW9kZSwgd2UgbmVlZCB0byB1c2UgYW5vdGhlciBzZXQgb2YgYml0cmF0ZXMgKHRoYXQncyB3aHkgd2UKKyAqIG5lZWQgdGhlIG1vZGUgcGFyYW1ldGVyKSBidXQgd2UgZG9uJ3QgaGFuZGxlIHRoZXNlIHByb3ByaWV0YXJ5IG1vZGVzIHlldC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oc3RydWN0IGF0aDVrX2h3ICphaCwKICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTI3NSw3ICsyOTgsOCBAQAogfQogCiAvKgotICogQnJpbmcgdXAgTUFDICsgUEhZIENoaXBzCisgKiBCcmluZyB1cCBNQUMgKyBQSFkgQ2hpcHMgYW5kIHByb2dyYW0gUExMCisgKiBUT0RPOiBIYWxmL1F1YXJ0ZXIgcmF0ZSBzdXBwb3J0CiAgKi8KIGludCBhdGg1a19od19uaWNfd2FrZXVwKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBmbGFncywgYm9vbCBpbml0aWFsKQogewpAQCAtMzMzLDcgKzM1NywxMSBAQAogCQkJfQogCQl9IGVsc2UgaWYgKGZsYWdzICYgQ0hBTk5FTF81R0haKSB7CiAJCQltb2RlIHw9IEFSNUtfUEhZX01PREVfRlJFUV81R0haOwotCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaOworCisJCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKQorCQkJCWNsb2NrIHw9IEFSNUtfUEhZX1BMTF80ME1IWl81NDEzOworCQkJZWxzZQorCQkJCWNsb2NrIHw9IEFSNUtfUEhZX1BMTF80ME1IWjsKIAogCQkJaWYgKGZsYWdzICYgQ0hBTk5FTF9PRkRNKQogCQkJCW1vZGUgfD0gQVI1S19QSFlfTU9ERV9NT0RfT0ZETTsKQEAgLTM5MSwxMCArNDE5LDE0IEBACiAJfQogCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCS8qIC4uLnNldCB0aGUgUEhZIG9wZXJhdGluZyBtb2RlICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgY2xvY2ssIEFSNUtfUEhZX1BMTCk7Ci0JCXVkZWxheSgzMDApOwogCisJCS8qIC4uLnVwZGF0ZSBQTEwgaWYgbmVlZGVkICovCisJCWlmIChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUExMKSAhPSBjbG9jaykgeworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBjbG9jaywgQVI1S19QSFlfUExMKTsKKwkJCXVkZWxheSgzMDApOworCQl9CisKKwkJLyogLi4uc2V0IHRoZSBQSFkgb3BlcmF0aW5nIG1vZGUgKi8KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBtb2RlLCBBUjVLX1BIWV9NT0RFKTsKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0dXJibywgQVI1S19QSFlfVFVSQk8pOwogCX0KQEAgLTQwMywyMiArNDM1LDM5MyBAQAogfQogCiAvKgorICogSWYgdGhlcmUgaXMgYW4gZXh0ZXJuYWwgMzJLSHogY3J5c3RhbCBhdmFpbGFibGUsIHVzZSBpdAorICogYXMgcmVmLiBjbG9jayBpbnN0ZWFkIG9mIDMyLzQwTUh6IGNsb2NrIGFuZCBiYXNlYmFuZCBjbG9ja3MKKyAqIHRvIHNhdmUgcG93ZXIgZHVyaW5nIHNsZWVwIG9yIHJlc3RvcmUgbm9ybWFsIDMyLzQwTUh6CisgKiBvcGVyYXRpb24uCisgKgorICogWFhYOiBXaGVuIG9wZXJhdGluZyBvbiAzMktIeiBjZXJ0YWluIFBIWSByZWdpc3RlcnMgKDI3IC0gMzEsCisgKiAJMTIzIC0gMTI3KSByZXF1aXJlIGRlbGF5IG9uIGFjY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXUzMiBzY2FsLCBzcGVuZGluZywgdXNlYzMyOworCisJLyogT25seSBzZXQgMzJLSHogc2V0dGluZ3MgaWYgd2UgaGF2ZSBhbiBleHRlcm5hbAorCSAqIDMyS0h6IGNyeXN0YWwgcHJlc2VudCAqLworCWlmICgoQVI1S19FRVBST01fSEFTMzJLSFpDUllTVEFMKGVlLT5lZV9taXNjMSkgfHwKKwlBUjVLX0VFUFJPTV9IQVMzMktIWkNSWVNUQUxfT0xEKGVlLT5lZV9taXNjMSkpICYmCisJZW5hYmxlKSB7CisKKwkJLyogMSB1c2VjL2N5Y2xlICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVVNFQ181MjExLCBBUjVLX1VTRUNfMzIsIDEpOworCQkvKiBTZXQgdXAgdHNmIGluY3JlbWVudCBvbiBlYWNoIGN5Y2xlICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFNGX1BBUk0sIEFSNUtfVFNGX1BBUk1fSU5DLCA2MSk7CisKKwkJLyogU2V0IGJhc2ViYW5kIHNsZWVwIGNvbnRyb2wgcmVnaXN0ZXJzCisJCSAqIGFuZCBzbGVlcCBjb250cm9sIHJhdGUgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFmLCBBUjVLX1BIWV9TQ1IpOworCisJCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkKKwkJCXNwZW5kaW5nID0gMHgxNDsKKwkJZWxzZQorCQkJc3BlbmRpbmcgPSAweDE4OworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNwZW5kaW5nLCBBUjVLX1BIWV9TUEVORElORyk7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjYsIEFSNUtfUEhZX1NMTVQpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBkLCBBUjVLX1BIWV9TQ0FMKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwNywgQVI1S19QSFlfU0NMT0NLKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgzZiwgQVI1S19QSFlfU0RFTEFZKTsKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDB4MDIpOworCQl9IGVsc2UgeworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBhLCBBUjVLX1BIWV9TTE1UKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwYywgQVI1S19QSFlfU0NBTCk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDMsIEFSNUtfUEhZX1NDTE9DSyk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjAsIEFSNUtfUEhZX1NERUxBWSk7CisJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19SQVRFLCAweDAzKTsKKwkJfQorCisJCS8qIEVuYWJsZSBzbGVlcCBjbG9jayBvcGVyYXRpb24gKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX0VOKTsKKworCX0gZWxzZSB7CisKKwkJLyogRGlzYWJsZSBzbGVlcCBjbG9jayBvcGVyYXRpb24gYW5kCisJCSAqIHJlc3RvcmUgZGVmYXVsdCBwYXJhbWV0ZXJzICovCisJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfRU4pOworCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDApOworCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgxZiwgQVI1S19QSFlfU0NSKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TTE1UXzMyTUhaLCBBUjVLX1BIWV9TTE1UKTsKKworCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKQorCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFpfMjQxNzsKKwkJZWxzZSBpZiAoYXRoNWtfZWVwcm9tX2lzX2hiNjMoYWgpKQorCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFpfSEI2MzsKKwkJZWxzZQorCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFo7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc2NhbCwgQVI1S19QSFlfU0NBTCk7CisKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TQ0xPQ0tfMzJNSFosIEFSNUtfUEhZX1NDTE9DSyk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0RFTEFZXzMyTUhaLCBBUjVLX1BIWV9TREVMQVkpOworCisJCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkKKwkJCXNwZW5kaW5nID0gMHgxNDsKKwkJZWxzZQorCQkJc3BlbmRpbmcgPSAweDE4OworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNwZW5kaW5nLCBBUjVLX1BIWV9TUEVORElORyk7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpKQorCQkJdXNlYzMyID0gMzk7CisJCWVsc2UKKwkJCXVzZWMzMiA9IDMxOworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1VTRUNfNTIxMSwgQVI1S19VU0VDXzMyLCB1c2VjMzIpOworCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFNGX1BBUk0sIEFSNUtfVFNGX1BBUk1fSU5DLCAxKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgYm9vbCBhdGg1a19od19jaGFuX2hhc19zcHVyX25vaXNlKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCXU4IHJlZmNsa19mcmVxOworCisJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkKKwkJcmVmY2xrX2ZyZXEgPSA0MDsKKwllbHNlCisJCXJlZmNsa19mcmVxID0gMzI7CisKKwlpZiAoKGNoYW5uZWwtPmNlbnRlcl9mcmVxICUgcmVmY2xrX2ZyZXEgIT0gMCkgJiYKKwkoKGNoYW5uZWwtPmNlbnRlcl9mcmVxICUgcmVmY2xrX2ZyZXEgPCAxMCkgfHwKKwkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSA+IDIyKSkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCisvKiBUT0RPOiBIYWxmL1F1YXJ0ZXIgcmF0ZSAqLworc3RhdGljIHZvaWQgYXRoNWtfaHdfdHdlYWtfaW5pdHZhbF9zZXR0aW5ncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKKwkgICAgYWgtPmFoX3BoeV9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUEhZXzUyMTJBKSB7CisKKwkJLyogU2V0dXAgQURDIGNvbnRyb2wgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJCShBUjVLX1JFR19TTSgyLAorCQkJCUFSNUtfUEhZX0FEQ19DVExfSU5CVUZHQUlOX09GRikgfAorCQkJCUFSNUtfUkVHX1NNKDIsCisJCQkJQVI1S19QSFlfQURDX0NUTF9JTkJVRkdBSU5fT04pIHwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMX1BXRF9EQUNfT0ZGIHwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMX1BXRF9BRENfT0ZGKSwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMKTsKKworCisKKwkJLyogRGlzYWJsZSBiYXJrZXIgUlNTSSB0aHJlc2hvbGQgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwKKwkJCQlBUjVLX1BIWV9EQUdfQ0NLX0NUTF9FTl9SU1NJX1RIUik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfREFHX0NDS19DVEwsCisJCQlBUjVLX1BIWV9EQUdfQ0NLX0NUTF9SU1NJX1RIUiwgMik7CisKKwkJLyogU2V0IHRoZSBtdXRlIG1hc2sgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDBmLCBBUjVLX1NFUV9NQVNLKTsKKwl9CisKKwkvKiBDbGVhciBQSFlfQkxVRVRPT1RIIHRvIGFsbG93IFJYX0NMRUFSIGxpbmUgZGVidWcgKi8KKwlpZiAoYWgtPmFoX3BoeV9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUEhZXzUyMTJCKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX0JMVUVUT09USCk7CisKKwkvKiBFbmFibGUgRENVIGRvdWJsZSBidWZmZXJpbmcgKi8KKwlpZiAoYWgtPmFoX3BoeV9yZXZpc2lvbiA+IEFSNUtfU1JFVl9QSFlfNTIxMkIpCisJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19UWENGRywKKwkJCQlBUjVLX1RYQ0ZHX0RDVV9EQkxfQlVGX0RJUyk7CisKKwkvKiBTZXQgREFDL0FEQyBkZWxheXMgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKKwkJdTMyIHNjYWw7CisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3OworCQllbHNlIGlmIChhdGg1a19lZXByb21faXNfaGI2MyhhaCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzOworCQllbHNlCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWjsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzY2FsLCBBUjVLX1BIWV9TQ0FMKTsKKwl9CisKKwkvKiBTZXQgZmFzdCBBREMgKi8KKwlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkgeworCQl1MzIgZmFzdF9hZGMgPSB0cnVlOworCisJCWlmIChjaGFubmVsLT5jZW50ZXJfZnJlcSA9PSAyNDYyIHx8CisJCWNoYW5uZWwtPmNlbnRlcl9mcmVxID09IDI0NjcpCisJCQlmYXN0X2FkYyA9IDA7CisKKwkJLyogT25seSB1cGRhdGUgaWYgbmVlZGVkICovCisJCWlmIChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfRkFTVF9BREMpICE9IGZhc3RfYWRjKQorCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZmFzdF9hZGMsCisJCQkJCQlBUjVLX1BIWV9GQVNUX0FEQyk7CisJfQorCisJLyogRml4IGZvciBmaXJzdCByZXZpc2lvbiBvZiB0aGUgUkY1MTEyIFJGIGNoaXBzZXQgKi8KKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyICYmCisJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8CisJCQlBUjVLX1NSRVZfUkFEXzUxMTJBKSB7CisJCXUzMiBkYXRhOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0NDS1RYQ1RMX1dPUkxELAorCQkJCUFSNUtfUEhZX0NDS1RYQ1RMKTsKKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKQorCQkJZGF0YSA9IDB4ZmZiODEwMjA7CisJCWVsc2UKKwkJCWRhdGEgPSAweGZmYjgwZDIwOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfUEhZX0ZSQU1FX0NUTCk7CisJfQorCisJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjUyMTEpIHsKKwkJdTMyIHVzZWNfcmVnOworCQkvKiA1MzExIGhhcyBkaWZmZXJlbnQgdHgvcnggbGF0ZW5jeSBtYXNrcworCQkgKiBmcm9tIDUyMTEsIHNpbmNlIHdlIGRlYWwgNTMxMSB0aGUgc2FtZQorCQkgKiBhcyA1MjExIHdoZW4gc2V0dGluZyBpbml0dmFscywgc2hpZnQKKwkJICogdmFsdWVzIGhlcmUgdG8gdGhlaXIgcHJvcGVyIGxvY2F0aW9ucyAqLworCQl1c2VjX3JlZyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1VTRUNfNTIxMSk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdXNlY19yZWcgJiAoQVI1S19VU0VDXzEgfAorCQkJCUFSNUtfVVNFQ18zMiB8CisJCQkJQVI1S19VU0VDX1RYX0xBVEVOQ1lfNTIxMSB8CisJCQkJQVI1S19SRUdfU00oMjksCisJCQkJQVI1S19VU0VDX1JYX0xBVEVOQ1lfNTIxMCkpLAorCQkJCUFSNUtfVVNFQ181MjExKTsKKwkJLyogQ2xlYXIgUUNVL0RDVSBjbG9jayBnYXRpbmcgcmVnaXN0ZXIgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAwLCBBUjVLX1FDVURDVV9DTEtHVCk7CisJCS8qIFNldCBEQUMvQURDIGRlbGF5cyAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDgsIEFSNUtfUEhZX1NDQUwpOworCQkvKiBFbmFibGUgUENVIEZJRk8gY29ycnVwdGlvbiBFQ08gKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfRElBR19TV181MjExLAorCQkJCQlBUjVLX0RJQUdfU1dfRUNPX0VOQUJMRSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg1a19od19jb21taXRfZWVwcm9tX3NldHRpbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdTggKmFudCwgdTggZWVfbW9kZSkKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKworCS8qIFNldCBDQ0sgdG8gT0ZETSBwb3dlciBkZWx0YSAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKwkJaW50MTZfdCBjY2tfb2ZkbV9wd3JfZGVsdGE7CisKKwkJLyogQWRqdXN0IHBvd2VyIGRlbHRhIGZvciBjaGFubmVsIDE0ICovCisJCWlmIChjaGFubmVsLT5jZW50ZXJfZnJlcSA9PSAyNDg0KQorCQkJY2NrX29mZG1fcHdyX2RlbHRhID0KKwkJCQkoKGVlLT5lZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YSAtCisJCQkJZWUtPmVlX3NjYWxlZF9jY2tfZGVsdGEpICogMikgLyAxMDsKKwkJZWxzZQorCQkJY2NrX29mZG1fcHdyX2RlbHRhID0KKwkJCQkoZWUtPmVlX2Nja19vZmRtX3Bvd2VyX2RlbHRhICogMikgLyAxMDsKKworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oKGVlLT5lZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YSAqIC0xKSwKKwkJCQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19HQUlOX0RFTFRBKSB8CisJCQlBUjVLX1JFR19TTSgoY2NrX29mZG1fcHdyX2RlbHRhICogLTEpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREpfQ0NLX1BDREFDX0lOREVYKSwKKwkJCQlBUjVLX1BIWV9UWF9QV1JfQURKKTsKKwkJZWxzZQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAwLCBBUjVLX1BIWV9UWF9QV1JfQURKKTsKKwl9CisKKwkvKiBTZXQgYW50ZW5uYSBpZGxlIHN3aXRjaCB0YWJsZSAqLworCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0FOVF9DVEwsCisJCQlBUjVLX1BIWV9BTlRfQ1RMX1NXVEFCTEVfSURMRSwKKwkJCShhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVswXSB8CisJCQlBUjVLX1BIWV9BTlRfQ1RMX1RYUlhfRU4pKTsKKworCS8qIFNldCBhbnRlbm5hIHN3aXRjaCB0YWJsZSAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzBdXSwKKwkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8wKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF9hbnRlbm5hW2VlX21vZGVdW2FudFsxXV0sCisJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMSk7CisKKwkvKiBOb2lzZSBmbG9vciB0aHJlc2hvbGQgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCUFSNUtfUEhZX05GX1NWQUwoZWUtPmVlX25vaXNlX2Zsb29yX3RocltlZV9tb2RlXSksCisJCUFSNUtfUEhZX05GVEhSRVMpOworCisJaWYgKChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pICYmCisJKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8wKSkgeworCQkvKiBTd2l0Y2ggc2V0dGxpbmcgdGltZSAoVHVyYm8pICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX1NFVFRMSU5HLAorCQkJCUFSNUtfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJCQllZS0+ZWVfc3dpdGNoX3NldHRsaW5nX3R1cmJvW2VlX21vZGVdKTsKKworCQkvKiBUeC9SeCBhdHRlbnVhdGlvbiAoVHVyYm8pICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU4sCisJCQkJQVI1S19QSFlfR0FJTl9UWFJYX0FUVEVOLAorCQkJCWVlLT5lZV9hdG5fdHhfcnhfdHVyYm9bZWVfbW9kZV0pOworCisJCS8qIEFEQy9QR0EgZGVzaXJlZCBzaXplIChUdXJibykgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCQkJCUFSNUtfUEhZX0RFU0lSRURfU0laRV9BREMsCisJCQkJZWUtPmVlX2FkY19kZXNpcmVkX3NpemVfdHVyYm9bZWVfbW9kZV0pOworCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkJCQlBUjVLX1BIWV9ERVNJUkVEX1NJWkVfUEdBLAorCQkJCWVlLT5lZV9wZ2FfZGVzaXJlZF9zaXplX3R1cmJvW2VlX21vZGVdKTsKKworCQkvKiBUeC9SeCBtYXJnaW4gKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOXzJHSFosCisJCQkJQVI1S19QSFlfR0FJTl8yR0haX01BUkdJTl9UWFJYLAorCQkJCWVlLT5lZV9tYXJnaW5fdHhfcnhfdHVyYm9bZWVfbW9kZV0pOworCisJfSBlbHNlIHsKKwkJLyogU3dpdGNoIHNldHRsaW5nIHRpbWUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfU0VUVExJTkcsCisJCQkJQVI1S19QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCWVlLT5lZV9zd2l0Y2hfc2V0dGxpbmdbZWVfbW9kZV0pOworCisJCS8qIFR4L1J4IGF0dGVudWF0aW9uICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU4sCisJCQkJQVI1S19QSFlfR0FJTl9UWFJYX0FUVEVOLAorCQkJCWVlLT5lZV9hdG5fdHhfcnhbZWVfbW9kZV0pOworCisJCS8qIEFEQy9QR0EgZGVzaXJlZCBzaXplICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkJCQlBUjVLX1BIWV9ERVNJUkVEX1NJWkVfQURDLAorCQkJCWVlLT5lZV9hZGNfZGVzaXJlZF9zaXplW2VlX21vZGVdKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX1BHQSwKKwkJCQllZS0+ZWVfcGdhX2Rlc2lyZWRfc2l6ZVtlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggbWFyZ2luICovCisJCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMSkKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU5fMkdIWiwKKwkJCQlBUjVLX1BIWV9HQUlOXzJHSFpfTUFSR0lOX1RYUlgsCisJCQkJZWUtPmVlX21hcmdpbl90eF9yeFtlZV9tb2RlXSk7CisJfQorCisJLyogWFBBIGRlbGF5cyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKKwkJKGVlLT5lZV90eF9lbmQyeHBhX2Rpc2FibGVbZWVfbW9kZV0gPDwgMjQpIHwKKwkJKGVlLT5lZV90eF9lbmQyeHBhX2Rpc2FibGVbZWVfbW9kZV0gPDwgMTYpIHwKKwkJKGVlLT5lZV90eF9mcm0yeHBhX2VuYWJsZVtlZV9tb2RlXSA8PCA4KSB8CisJCShlZS0+ZWVfdHhfZnJtMnhwYV9lbmFibGVbZWVfbW9kZV0pLCBBUjVLX1BIWV9SRl9DVEw0KTsKKworCS8qIFhMTkEgZGVsYXkgKi8KKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9SRl9DVEwzLAorCQkJQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTiwKKwkJCWVlLT5lZV90eF9lbmQyeGxuYV9lbmFibGVbZWVfbW9kZV0pOworCisJLyogVGhyZXNoNjQgKEFOSSkgKi8KKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ORiwKKwkJCUFSNUtfUEhZX05GX1RIUkVTSDYyLAorCQkJZWUtPmVlX3Rocl82MltlZV9tb2RlXSk7CisKKworCS8qIEZhbHNlIGRldGVjdCBiYWNrb2ZmIGZvciBjaGFubmVscworCSAqIHRoYXQgaGF2ZSBzcHVyIG5vaXNlLiBXcml0ZSB0aGUgbmV3CisJICogY3ljbGljIHBvd2VyIFJTU0kgdGhyZXNob2xkLiAqLworCWlmIChhdGg1a19od19jaGFuX2hhc19zcHVyX25vaXNlKGFoLCBjaGFubmVsKSkKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwKKwkJCQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjEsCisJCQkJQVI1S19JTklUX0NZQ1JTU0lfVEhSMSArCisJCQkJZWUtPmVlX2ZhbHNlX2RldGVjdFtlZV9tb2RlXSk7CisJZWxzZQorCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9PRkRNX1NFTEZDT1JSLAorCQkJCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMSwKKwkJCQlBUjVLX0lOSVRfQ1lDUlNTSV9USFIxKTsKKworCS8qIEkvUSBjb3JyZWN0aW9uCisJICogVE9ETzogUGVyIGNoYW5uZWwgaS9xIGluZm9zID8gKi8KKwlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19QSFlfSVEsCisJCUFSNUtfUEhZX0lRX0NPUlJfRU5BQkxFIHwKKwkJKGVlLT5lZV9pX2NhbFtlZV9tb2RlXSA8PCBBUjVLX1BIWV9JUV9DT1JSX1FfSV9DT0ZGX1MpIHwKKwkJZWUtPmVlX3FfY2FsW2VlX21vZGVdKTsKKworCS8qIEhlYXZ5IGNsaXBwaW5nIC1kaXNhYmxlIGZvciBub3cgKi8KKwlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl81XzEpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUpOworCisJcmV0dXJuOworfQorCisvKgogICogTWFpbiByZXNldCBmdW5jdGlvbgogICovCiBpbnQgYXRoNWtfaHdfcmVzZXQoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBubDgwMjExX2lmdHlwZSBvcF9tb2RlLAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCkKIHsKLQlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFoLT5haF9zYy0+cGRldjsKLQl1MzIgZGF0YSwgc19zZXEsIHNfYW50LCBzX2xlZFszXSwgZG1hX3NpemU7Ci0JdW5zaWduZWQgaW50IGksIG1vZGUsIGZyZXEsIGVlX21vZGUsIGFudFsyXTsKLQlpbnQgcmV0OworCXUzMiBzX3NlcVsxMF0sIHNfYW50LCBzX2xlZFszXSwgc3RhaWQxX2ZsYWdzLCB0c2ZfdXAsIHRzZl9sbzsKKwl1MzIgcGh5X3RzdDE7CisJdTggbW9kZSwgZnJlcSwgZWVfbW9kZSwgYW50WzJdOworCWludCBpLCByZXQ7CiAKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCi0Jc19zZXEgPSAwOwogCXNfYW50ID0gMDsKIAllZV9tb2RlID0gMDsKKwlzdGFpZDFfZmxhZ3MgPSAwOworCXRzZl91cCA9IDA7CisJdHNmX2xvID0gMDsKIAlmcmVxID0gMDsKIAltb2RlID0gMDsKIApAQCAtNDI3LDQ4ICs4MzAsNiBAQAogCSAqLwogCS8qRENVL0FudGVubmEgc2VsZWN0aW9uIG5vdCBhdmFpbGFibGUgb24gNTIxMCovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCWlmIChjaGFuZ2VfY2hhbm5lbCkgewotCQkJLyogU2VxIG51bWJlciBmb3IgcXVldWUgMCAtZG8gdGhpcyBmb3IgYWxsIHF1ZXVlcyA/ICovCi0JCQlzX3NlcSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLAotCQkJCQlBUjVLX1FVRVVFX0RGU19TRVFOVU0oMCkpOwotCQkJLypEZWZhdWx0IGFudGVubmEqLwotCQkJc19hbnQgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOwotCQl9Ci0JfQotCi0JLypHUElPcyovCi0Jc19sZWRbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYgQVI1S19QQ0lDRkdfTEVEU1RBVEU7Ci0Jc19sZWRbMV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPQ1IpOwotCXNfbGVkWzJdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0RPKTsKLQotCWlmIChjaGFuZ2VfY2hhbm5lbCAmJiBhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKLQkJYXRoNWtfaHdfZ2V0X3JmX2dhaW4oYWgpOwotCi0KLQkvKldha2V1cCB0aGUgZGV2aWNlKi8KLQlyZXQgPSBhdGg1a19od19uaWNfd2FrZXVwKGFoLCBjaGFubmVsLT5od192YWx1ZSwgZmFsc2UpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgb3BlcmF0aW5nIG1vZGUKLQkgKi8KLQlhaC0+YWhfb3BfbW9kZSA9IG9wX21vZGU7Ci0KLQkvKgotCSAqIDUxMTEvNTExMiBTZXR0aW5ncwotCSAqIDUyMTAgb25seSBjb21lcyB3aXRoIFJGNTExMAotCSAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlpZiAoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTExICYmCi0JCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjUxMTIgJiYKLQkJCWFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTQxMyAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkYyNDEzICYmCi0JCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjI0MjUpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsCi0JCQkJImludmFsaWQgcGh5IHJhZGlvOiAldVxuIiwgYWgtPmFoX3JhZGlvKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAKIAkJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKIAkJY2FzZSBDSEFOTkVMX0E6CkBAIC00OTEsOCArODUyLDEyIEBACiAJCQlmcmVxID0gQVI1S19JTklfUkZHQUlOXzVHSFo7CiAJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7CiAJCQlicmVhazsKLQkJLypJcyB0aGlzIG9rIG9uIDUyMTEgdG9vID8qLwogCQljYXNlIENIQU5ORUxfVEc6CisJCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpIHsKKwkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCQkiVHVyYm9HIG1vZGUgbm90IGF2YWlsYWJsZSBvbiA1MjExIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQltb2RlID0gQVI1S19NT0RFXzExR19UVVJCTzsKIAkJCWZyZXEgPSBBUjVLX0lOSV9SRkdBSU5fMkdIWjsKIAkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKQEAgLTUxMywxMSArODc4LDkzIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCS8qIFBIWSBhY2Nlc3MgZW5hYmxlICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0hJRlRfNUdIWiwgQVI1S19QSFkoMCkpOworCQlpZiAoY2hhbmdlX2NoYW5uZWwpIHsKKwkJCS8qCisJCQkgKiBTYXZlIGZyYW1lIHNlcXVlbmNlIGNvdW50CisJCQkgKiBGb3IgcmV2cy4gYWZ0ZXIgT2FodSwgb25seSBzYXZlCisJCQkgKiBzZXEgbnVtIGZvciBEQ1UgMCAoR2xvYmFsIHNlcSBudW0pCisJCQkgKi8KKwkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1MjExKSB7CiAKKwkJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJCQkJc19zZXFbaV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwKKwkJCQkJCUFSNUtfUVVFVUVfRENVX1NFUU5VTShpKSk7CisKKwkJCX0gZWxzZSB7CisJCQkJc19zZXFbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwKKwkJCQkJCUFSNUtfUVVFVUVfRENVX1NFUU5VTSgwKSk7CisJCQl9CisKKwkJCS8qIFRTRiBhY2NlbGVyYXRlcyBvbiBBUjUyMTEgZHVycmluZyByZXNldAorCQkJICogQXMgYSB3b3JrYXJvdW5kIHNhdmUgaXQgaGVyZSBhbmQgcmVzdG9yZQorCQkJICogaXQgbGF0ZXIgc28gdGhhdCBpdCdzIGJhY2sgaW4gdGltZSBhZnRlcgorCQkJICogcmVzZXQuIFRoaXMgd2F5IGl0J2xsIGdldCByZS1zeW5jZWQgb24gdGhlCisJCQkgKiBuZXh0IGJlYWNvbiB3aXRob3V0IGJyZWFraW5nIGFkLWhvYy4KKwkJCSAqCisJCQkgKiBPbiBBUjUyMTIgVFNGIGlzIGFsbW9zdCBwcmVzZXJ2ZWQgYWNyb3NzIGEKKwkJCSAqIHJlc2V0IHNvIGl0IHN0YXlzIGJhY2sgaW4gdGltZSBhbnl3YXkgYW5kCisJCQkgKiB3ZSBkb24ndCBoYXZlIHRvIHNhdmUvcmVzdG9yZSBpdC4KKwkJCSAqCisJCQkgKiBYWFg6IFNpbmNlIHRoaXMgYnJlYWtzIHBvd2VyIHNhdmluZyB3ZSBoYXZlCisJCQkgKiB0byBkaXNhYmxlIHBvd2VyIHNhdmluZyB1bnRpbCB3ZSByZWNlaXZlIHRoZQorCQkJICogbmV4dCBiZWFjb24sIHNvIHdlIGNhbiByZXN5bmMgYmVhY29uIHRpbWVycyAqLworCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjExKSB7CisJCQkJdHNmX3VwID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVFNGX1UzMik7CisJCQkJdHNmX2xvID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVFNGX0wzMik7CisJCQl9CisJCX0KKworCQkvKiBTYXZlIGRlZmF1bHQgYW50ZW5uYSAqLworCQlzX2FudCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0RFRkFVTFRfQU5URU5OQSk7CisKKwkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7CisJCQkvKiBSZXN0b3JlIG5vcm1hbCAzMi80ME1IeiBjbG9jayBvcGVyYXRpb24KKwkJCSAqIHRvIGF2b2lkIHJlZ2lzdGVyIGFjY2VzcyBkZWxheSBvbiBjZXJ0YWluCisJCQkgKiBQSFkgcmVnaXN0ZXJzICovCisJCQlhdGg1a19od19zZXRfc2xlZXBfY2xvY2soYWgsIGZhbHNlKTsKKworCQkJLyogU2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHJmIGJ1ZmZlcgorCQkJICogY2hlY2sgaWYgd2UgaGF2ZSBhbnkgcGVuZGluZyBnYWluX0YKKwkJCSAqIG9wdGltaXphdGlvbiBzZXR0aW5ncyAqLworCQkJaWYgKGNoYW5nZV9jaGFubmVsICYmIGFoLT5haF9yZl9iYW5rcyAhPSBOVUxMKQorCQkJCWF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShhaCk7CisJCX0KIAl9CiAKKwkvKkdQSU9zKi8KKwlzX2xlZFswXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BDSUNGRykgJgorCQkJCQlBUjVLX1BDSUNGR19MRURTVEFURTsKKwlzX2xlZFsxXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0dQSU9DUik7CisJc19sZWRbMl0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPRE8pOworCisJLyogQVI1S19TVEFfSUQxIGZsYWdzLCBvbmx5IHByZXNlcnZlIGFudGVubmEKKwkgKiBzZXR0aW5ncyBhbmQgYWNrL2N0cyByYXRlIG1vZGUgKi8KKwlzdGFpZDFfZmxhZ3MgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TVEFfSUQxKSAmCisJCQkoQVI1S19TVEFfSUQxX0RFRkFVTFRfQU5URU5OQSB8CisJCQlBUjVLX1NUQV9JRDFfREVTQ19BTlRFTk5BIHwKKwkJCUFSNUtfU1RBX0lEMV9SVFNfREVGX0FOVEVOTkEgfAorCQkJQVI1S19TVEFfSUQxX0FDS0NUU182TUIgfAorCQkJQVI1S19TVEFfSUQxX0JBU0VfUkFURV8xMUIgfAorCQkJQVI1S19TVEFfSUQxX1NFTEZHRU5fREVGX0FOVCk7CisKKwkvKiBXYWtldXAgdGhlIGRldmljZSAqLworCXJldCA9IGF0aDVrX2h3X25pY193YWtldXAoYWgsIGNoYW5uZWwtPmh3X3ZhbHVlLCBmYWxzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogSW5pdGlhbGl6ZSBvcGVyYXRpbmcgbW9kZQorCSAqLworCWFoLT5haF9vcF9tb2RlID0gb3BfbW9kZTsKKworCS8qIFBIWSBhY2Nlc3MgZW5hYmxlICovCisJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1MjExKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFosIEFSNUtfUEhZKDApKTsKKwllbHNlCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0hJRlRfNUdIWiB8IDB4NDAsCisJCQkJCQkJQVI1S19QSFkoMCkpOworCisJLyogV3JpdGUgaW5pdGlhbCBzZXR0aW5ncyAqLwogCXJldCA9IGF0aDVrX2h3X3dyaXRlX2luaXR2YWxzKGFoLCBtb2RlLCBjaGFuZ2VfY2hhbm5lbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTUyNiw2NCArOTczLDIzIEBACiAJICogNTIxMS81MjEyIFNwZWNpZmljCiAJICovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisKIAkJLyoKIAkJICogV3JpdGUgaW5pdGlhbCBSRiBnYWluIHNldHRpbmdzCiAJCSAqIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGJvdGggNTExMS81MTEyCiAJCSAqLwotCQlyZXQgPSBhdGg1a19od19yZmdhaW4oYWgsIGZyZXEpOworCQlyZXQgPSBhdGg1a19od19yZmdhaW5faW5pdChhaCwgZnJlcSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCiAJCW1kZWxheSgxKTsKIAogCQkvKgotCQkgKiBXcml0ZSBzb21lIG1vcmUgaW5pdGlhbCByZWdpc3RlciBzZXR0aW5ncyBmb3IgcmV2aXNlZCBjaGlwcworCQkgKiBUd2VhayBpbml0dmFsIHNldHRpbmdzIGZvciByZXZpc2VkCisJCSAqIGNoaXBzZXRzIGFuZCBhZGQgc29tZSBtb3JlIGNvbmZpZworCQkgKiBiaXRzCiAJCSAqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKLQkJICAgIGFoLT5haF9waHlfcmV2aXNpb24gPiAweDQxKSB7Ci0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMmEwMDIsIDB4OTgyYyk7Ci0KLQkJCWlmIChjaGFubmVsLT5od192YWx1ZSA9PSBDSEFOTkVMX0cpCi0JCQkJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjI0MTMpCi0JCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGY4MGQ4MCwKLQkJCQkJCQkJMHg5OTRjKTsKLQkJCQllbHNlIGlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1NDI0KQotCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAzODAxNDAsCi0JCQkJCQkJCTB4OTk0Yyk7Ci0JCQkJZWxzZSBpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSMjQyNSkKLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwZmMwZWMwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJCWVsc2UgLyogMjQyNSAqLwotCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDBmYzBmYzAsCi0JCQkJCQkJCTB4OTk0Yyk7Ci0JCQllbHNlCi0JCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDAwLCAweDk5NGMpOwotCi0JCQkvKiBHb3QgdGhpcyBmcm9tIGxlZ2FjeS1oYWwgKi8KLQkJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgMHhhMjI4LCAweDIwMCk7Ci0KLQkJCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCAweGEyMjgsIDB4ODAwLCAweGZmZmUwM2ZmKTsKLQotCQkJLyogSnVzdCB3cml0ZSAweDliNSA/ICovCi0JCQkvKiBhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDA5YjUsIDB4YTIyOCk7ICovCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMGYsIEFSNUtfU0VRX01BU0spOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDAwLCAweGEyNTQpOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDBlLCBBUjVLX1BIWV9TQ0FMKTsKLQkJfQotCi0JCS8qIEZpeCBmb3IgZmlyc3QgcmV2aXNpb24gb2YgdGhlIFJGNTExMiBSRiBjaGlwc2V0ICovCi0JCWlmIChhaC0+YWhfcmFkaW8gPj0gQVI1S19SRjUxMTIgJiYKLQkJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8Ci0JCQkJQVI1S19TUkVWX1JBRF81MTEyQSkgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9DQ0tUWENUTF9XT1JMRCwKLQkJCQkJQVI1S19QSFlfQ0NLVFhDVEwpOwotCQkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKQotCQkJCWRhdGEgPSAweGZmYjgxMDIwOwotCQkJZWxzZQotCQkJCWRhdGEgPSAweGZmYjgwZDIwOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1BIWV9GUkFNRV9DVEwpOwotCQkJZGF0YSA9IDA7Ci0JCX0KKwkJYXRoNWtfaHdfdHdlYWtfaW5pdHZhbF9zZXR0aW5ncyhhaCwgY2hhbm5lbCk7CiAKIAkJLyoKIAkJICogU2V0IFRYIHBvd2VyIChGSVhNRSkKQEAgLTYwMSwxNSArMTAwNywxMiBAQAogCQkJYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbihhaCwgbW9kZSk7CiAKIAkJLyoKLQkJICogV3JpdGUgUkYgcmVnaXN0ZXJzCisJCSAqIFdyaXRlIFJGIGJ1ZmZlcgogCQkgKi8KLQkJcmV0ID0gYXRoNWtfaHdfcmZyZWdzKGFoLCBjaGFubmVsLCBtb2RlKTsKKwkJcmV0ID0gYXRoNWtfaHdfcmZyZWdzX2luaXQoYWgsIGNoYW5uZWwsIG1vZGUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQkvKgotCQkgKiBDb25maWd1cmUgYWRkaXRpb25hbCByZWdpc3RlcnMKLQkJICovCiAKIAkJLyogV3JpdGUgT0ZETSB0aW1pbmdzIG9uIDUyMTIqLwogCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKQEAgLTYzMSwxNyArMTAzNCw2IEBACiAJCX0KIAogCQkvKgotCQkgKiBTZXQgY2hhbm5lbCBhbmQgY2FsaWJyYXRlIHRoZSBQSFkKLQkJICovCi0JCXJldCA9IGF0aDVrX2h3X2NoYW5uZWwoYWgsIGNoYW5uZWwpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQkvKiBTZXQgYW50ZW5uYSBtb2RlICovCi0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9BTlRfQ1RMLAotCQkJYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bMF0sIDB4ZmZmZmZjMDYpOwotCi0JCS8qCiAJCSAqIEluIGNhc2UgYSBmaXhlZCBhbnRlbm5hIHdhcyBzZXQgYXMgZGVmYXVsdAogCQkgKiB3cml0ZSB0aGUgc2FtZSBzZXR0aW5ncyBvbiBib3RoIEFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEUKIAkJICogcmVnaXN0ZXJzLgpAQCAtNjU2LDU0ICsxMDQ4LDE2IEBACiAJCQlhbnRbMV0gPSBBUjVLX0FOVF9GSVhFRF9COwogCQl9CiAKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVthbnRbMF1dLAotCQkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8wKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVthbnRbMV1dLAotCQkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8xKTsKLQogCQkvKiBDb21taXQgdmFsdWVzIGZyb20gRUVQUk9NICovCi0JCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpCi0JCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9GUkFNRV9DVEwsCi0JCQkgICAgQVI1S19QSFlfRlJBTUVfQ1RMX1RYX0NMSVAsIGVlLT5lZV90eF9jbGlwKTsKLQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCi0JCQlBUjVLX1BIWV9ORl9TVkFMKGVlLT5lZV9ub2lzZV9mbG9vcl90aHJbZWVfbW9kZV0pLAotCQkJQVI1S19QSFlfTkZUSFJFUyk7Ci0KLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX1NFVFRMSU5HLAotCQkJKGVlLT5lZV9zd2l0Y2hfc2V0dGxpbmdbZWVfbW9kZV0gPDwgNykgJiAweDNmODAsCi0JCQkweGZmZmZjMDdmKTsKLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU4sCi0JCQkoZWUtPmVlX2F0bl90eF9yeFtlZV9tb2RlXSA8PCAxMikgJiAweDNmMDAwLAotCQkJMHhmZmZjMGZmZik7Ci0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCi0JCQkoZWUtPmVlX2FkY19kZXNpcmVkX3NpemVbZWVfbW9kZV0gJiAweDAwZmYpIHwKLQkJCSgoZWUtPmVlX3BnYV9kZXNpcmVkX3NpemVbZWVfbW9kZV0gPDwgOCkgJiAweGZmMDApLAotCQkJMHhmZmZmMDAwMCk7Ci0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJKGVlLT5lZV90eF9lbmQyeHBhX2Rpc2FibGVbZWVfbW9kZV0gPDwgMjQpIHwKLQkJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDE2KSB8Ci0JCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdIDw8IDgpIHwKLQkJCShlZS0+ZWVfdHhfZnJtMnhwYV9lbmFibGVbZWVfbW9kZV0pLCBBUjVLX1BIWV9SRl9DVEw0KTsKLQotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfUkZfQ1RMMywKLQkJCWVlLT5lZV90eF9lbmQyeGxuYV9lbmFibGVbZWVfbW9kZV0gPDwgOCwgMHhmZmZmMDBmZik7Ci0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9ORiwKLQkJCShlZS0+ZWVfdGhyXzYyW2VlX21vZGVdIDw8IDEyKSAmIDB4N2YwMDAsIDB4ZmZmODBmZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwgNCwgMHhmZmZmZmYwMSk7Ci0KLQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0lRLAotCQkgICAgQVI1S19QSFlfSVFfQ09SUl9FTkFCTEUgfAotCQkgICAgKGVlLT5lZV9pX2NhbFtlZV9tb2RlXSA8PCBBUjVLX1BIWV9JUV9DT1JSX1FfSV9DT0ZGX1MpIHwKLQkJICAgIGVlLT5lZV9xX2NhbFtlZV9tb2RlXSk7Ci0KLQkJaWYgKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8xKQotCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfR0FJTl8yR0haLAotCQkJCUFSNUtfUEhZX0dBSU5fMkdIWl9NQVJHSU5fVFhSWCwKLQkJCQllZS0+ZWVfbWFyZ2luX3R4X3J4W2VlX21vZGVdKTsKKwkJYXRoNWtfaHdfY29tbWl0X2VlcHJvbV9zZXR0aW5ncyhhaCwgY2hhbm5lbCwgYW50LCBlZV9tb2RlKTsKIAogCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciA1MjEwIHdlIGRvIGFsbCBpbml0aWFsaXphdGlvbiB1c2luZworCQkgKiBpbml0dmFscywgc28gd2UgZG9uJ3QgaGF2ZSB0byBtb2RpZnkKKwkJICogYW55IHNldHRpbmdzICg1MjEwIGFsc28gb25seSBzdXBwb3J0cworCQkgKiBhL2F0dXJibyBtb2RlcykKKwkJICovCiAJCW1kZWxheSgxKTsKIAkJLyogRGlzYWJsZSBwaHkgYW5kIHdhaXQgKi8KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9BQ1RfRElTQUJMRSwgQVI1S19QSFlfQUNUKTsKQEAgLTcxMywxMDAgKzEwNjcsMTU0IEBACiAJLyoKIAkgKiBSZXN0b3JlIHNhdmVkIHZhbHVlcwogCSAqLworCiAJLypEQ1UvQW50ZW5uYSBzZWxlY3Rpb24gbm90IGF2YWlsYWJsZSBvbiA1MjEwKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX3NlcSwgQVI1S19RVUVVRV9ERlNfU0VRTlVNKDApKTsKKworCQlpZiAoY2hhbmdlX2NoYW5uZWwpIHsKKwkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1MjExKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19zZXFbaV0sCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oaSkpOworCQkJfSBlbHNlIHsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfc2VxWzBdLAorCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oMCkpOworCQkJfQorCisKKwkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHNmX3VwLCBBUjVLX1RTRl9VMzIpOworCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHNmX2xvLCBBUjVLX1RTRl9MMzIpOworCQkJfQorCQl9CisKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX2FudCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOwogCX0KKworCS8qIExlZHN0YXRlICovCiAJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLCBzX2xlZFswXSk7CisKKwkvKiBHcGlvIHNldHRpbmdzICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX2xlZFsxXSwgQVI1S19HUElPQ1IpOwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19sZWRbMl0sIEFSNUtfR1BJT0RPKTsKIAorCS8qIFJlc3RvcmUgc3RhX2lkIGZsYWdzIGFuZCBwcmVzZXJ2ZSBvdXIgbWFjIGFkZHJlc3MqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19MT1dfSUQoYWgtPmFoX3N0YV9pZCksCisJCQkJCQlBUjVLX1NUQV9JRDApOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3RhaWQxX2ZsYWdzIHwgQVI1S19ISUdIX0lEKGFoLT5haF9zdGFfaWQpLAorCQkJCQkJQVI1S19TVEFfSUQxKTsKKworCiAJLyoKLQkgKiBNaXNjCisJICogQ29uZmlndXJlIFBDVQogCSAqLworCisJLyogUmVzdG9yZSBic3NpZCBhbmQgYnNzaWQgbWFzayAqLwogCS8qIFhYWDogYWRkIGFoLT5haWQgb25jZSBtYWM4MDIxMSBnaXZlcyB0aGlzIHRvIHVzICovCiAJYXRoNWtfaHdfc2V0X2Fzc29jaWQoYWgsIGFoLT5haF9ic3NpZCwgMCk7CiAKKwkvKiBTZXQgUENVIGNvbmZpZyAqLwogCWF0aDVrX2h3X3NldF9vcG1vZGUoYWgpOwotCS8qUElTUi9TSVNSIE5vdCBhdmFpbGFibGUgb24gNTIxMCovCi0JaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzCisJICogUElTUi9TSVNSIE5vdCBhdmFpbGFibGUgb24gNTIxMCAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGZmZmZmZmZmLCBBUjVLX1BJU1IpOwotCQkvKiBJZiB3ZSBsYXRlciBhbGxvdyB0dW5pbmcgZm9yIHRoaXMsIHN0b3JlIGludG8gc2Mgc3RydWN0dXJlICovCi0JCWRhdGEgPSBBUjVLX1RVTkVfUlNTSV9USFJFUyB8Ci0JCQlBUjVLX1RVTkVfQk1JU1NfVEhSRVMgPDwgQVI1S19SU1NJX1RIUl9CTUlTU19TOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfUlNTSV9USFIpOworCisJLyogU2V0IFJTU0kvQlJTU0kgdGhyZXNob2xkcworCSAqCisJICogTm90ZTogSWYgd2UgZGVjaWRlIHRvIHNldCB0aGlzIHZhbHVlCisJICogZHluYW1pY2FseSwgaGF2ZSBpbiBtaW5kIHRoYXQgd2hlbiBBUjVLX1JTU0lfVEhSCisJICogcmVnaXN0ZXIgaXMgcmVhZCBpdCBtaWdodCByZXR1cm4gMHg0MCBpZiB3ZSBoYXZlbid0CisJICogd3JvdGUgYW55dGhpbmcgdG8gaXQgcGx1cyBCTUlTUyBSU1NJIHRocmVzaG9sZCBpcyB6ZXJvZWQuCisJICogU28gZG9pbmcgYSBzYXZlL3Jlc3RvcmUgcHJvY2VkdXJlIGhlcmUgaXNuJ3QgdGhlIHJpZ2h0CisJICogY2hvaWNlLiBJbnN0ZWFkIHN0b3JlIGl0IG9uIGF0aDVrX2h3ICovCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoQVI1S19UVU5FX1JTU0lfVEhSRVMgfAorCQkJCUFSNUtfVFVORV9CTUlTU19USFJFUyA8PAorCQkJCUFSNUtfUlNTSV9USFJfQk1JU1NfUyksCisJCQkJQVI1S19SU1NJX1RIUik7CisKKwkvKiBNSUMgUW9TIHN1cHBvcnQgKi8KKwlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjI0MTMpIHsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDEwMGFhLCBBUjVLX01JQ19RT1NfQ1RMKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAzMjEwLCBBUjVLX01JQ19RT1NfU0VMKTsKIAl9CiAKLQkvKgotCSAqIFNldCBSeC9UeCBETUEgQ29uZmlndXJhdGlvbgotCSAqCi0JICogU2V0IG1heGltdW0gRE1BIHNpemUgKDUxMikgZXhjZXB0IGZvciBQQ0ktRSBjYXJkcyBzaW5jZQotCSAqIGl0IGNhdXNlcyByeCBvdmVycnVucyBhbmQgdHggZXJyb3JzICh0ZXN0ZWQgb24gNTQyNCBidXQgc2luY2UKLQkgKiByeCBvdmVycnVucyBhbHNvIG9jY3VyIG9uIDU0MTYvNTQxOCB3aXRoIG1hZHdpZmkgd2Ugc2V0IDEyOAotCSAqIGZvciBhbGwgUENJLUUgY2FyZHMgdG8gYmUgc2FmZSkuCi0JICoKLQkgKiBJbiBkdW1wcyB0aGlzIGlzIDEyOCBmb3IgYWxsY2hpcHMuCi0JICoKLQkgKiBYWFg6IG5lZWQgdG8gY2hlY2sgNTIxMCBmb3IgdGhpcwotCSAqIFRPRE86IENoZWNrIG91dCB0eCB0cmlnZXIgbGV2ZWwsIGl0J3MgYWx3YXlzIDY0IG9uIGR1bXBzIGJ1dCBJCi0JICogZ3Vlc3Mgd2UgY2FuIHR3ZWFrIGl0IGFuZCBzZWUgaG93IGl0IGdvZXMgOy0pCi0JICovCi0JZG1hX3NpemUgPSAocGRldi0+aXNfcGNpZSkgPyBBUjVLX0RNQVNJWkVfMTI4QiA6IEFSNUtfRE1BU0laRV81MTJCOwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAotCQkJQVI1S19UWENGR19TRE1BTVIsIGRtYV9zaXplKTsKLQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19SWENGRywKLQkJCUFSNUtfUlhDRkdfU0RNQU1XLCBkbWFfc2l6ZSk7CisJLyogUW9TIE5PQUNLIFBvbGljeSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQlBUjVLX1JFR19TTSgyLCBBUjVLX1FPU19OT0FDS18yQklUX1ZBTFVFUykgfAorCQkJQVI1S19SRUdfU00oNSwgQVI1S19RT1NfTk9BQ0tfQklUX09GRlNFVCkgIHwKKwkJCUFSNUtfUkVHX1NNKDAsIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUKSwKKwkJCUFSNUtfUU9TX05PQUNLKTsKIAl9CiAKKworCS8qCisJICogQ29uZmlndXJlIFBIWQorCSAqLworCisJLyogU2V0IGNoYW5uZWwgb24gUEhZICovCisJcmV0ID0gYXRoNWtfaHdfY2hhbm5lbChhaCwgY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qCiAJICogRW5hYmxlIHRoZSBQSFkgYW5kIHdhaXQgdW50aWwgY29tcGxldGlvbgorCSAqIFRoaXMgaW5jbHVkZXMgQmFzZUJhbmQgYW5kIFN5bnRoZXNpemVyCisJICogYWN0aXZhdGlvbi4KIAkgKi8KIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0FDVF9FTkFCTEUsIEFSNUtfUEhZX0FDVCk7CiAKIAkvKgogCSAqIE9uIDUyMTErIHJlYWQgYWN0aXZhdGlvbiAtPiByeCBkZWxheQogCSAqIGFuZCB1c2UgaXQuCisJICoKKwkgKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZSBzdXBwb3J0CiAJICovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKKwkJdTMyIGRlbGF5OworCQlkZWxheSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9SWF9ERUxBWSkgJgogCQkJQVI1S19QSFlfUlhfREVMQVlfTTsKLQkJZGF0YSA9IChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKSA/Ci0JCQkoKGRhdGEgPDwgMikgLyAyMikgOiAoZGF0YSAvIDEwKTsKKwkJZGVsYXkgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPworCQkJKChkZWxheSA8PCAyKSAvIDIyKSA6IChkZWxheSAvIDEwKTsKIAotCQl1ZGVsYXkoMTAwICsgKDIgKiBkYXRhKSk7Ci0JCWRhdGEgPSAwOworCQl1ZGVsYXkoMTAwICsgKDIgKiBkZWxheSkpOwogCX0gZWxzZSB7CiAJCW1kZWxheSgxKTsKIAl9CiAKIAkvKgotCSAqIFBlcmZvcm0gQURDIHRlc3QgKD8pCisJICogUGVyZm9ybSBBREMgdGVzdCB0byBzZWUgaWYgYmFzZWJhbmQgaXMgcmVhZHkKKwkgKiBTZXQgdHggaG9sZCBhbmQgY2hlY2sgYWRjIHRlc3QgcmVnaXN0ZXIKIAkgKi8KLQlkYXRhID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOworCXBoeV90c3QxID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFNUMV9UWEhPTEQsIEFSNUtfUEhZX1RTVDEpOwogCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgewogCQlpZiAoIShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfQURDX1RFU1QpICYgMHgxMCkpCiAJCQlicmVhazsKIAkJdWRlbGF5KDIwMCk7CiAJfQotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfVFNUMSk7Ci0JZGF0YSA9IDA7CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7CiAKIAkvKgotCSAqIFN0YXJ0IGF1dG9tYXRpYyBnYWluIGNhbGlicmF0aW9uCisJICogU3RhcnQgYXV0b21hdGljIGdhaW4gY29udHJvbCBjYWxpYnJhdGlvbgogCSAqCiAJICogRHVyaW5nIEFHQyBjYWxpYnJhdGlvbiBSWCBwYXRoIGlzIHJlLXJvdXRlZCB0bwotCSAqIGEgc2lnbmFsIGRldGVjdG9yIHNvIHdlIGRvbid0IHJlY2VpdmUgYW55dGhpbmcuCisJICogYSBwb3dlciBkZXRlY3RvciBzbyB3ZSBkb24ndCByZWNlaXZlIGFueXRoaW5nLgogCSAqCiAJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjYWxpYnJhdGUgc29tZSBzdGF0aWMgb2Zmc2V0cwogCSAqIHVzZWQgdG9nZXRoZXIgd2l0aCBvbi10aGUgZmx5IEkvUSBjYWxpYnJhdGlvbiAodGhlCiAJICogb25lIHBlcmZvcm1lZCB2aWEgYXRoNWtfaHdfcGh5X2NhbGlicmF0ZSksIHRoYXQgZG9lc24ndAogCSAqIGludGVycnVwdCByeCBwYXRoLgogCSAqCisJICogV2hpbGUgcnggcGF0aCBpcyByZS1yb3V0ZWQgdG8gdGhlIHBvd2VyIGRldGVjdG9yIHdlIGFsc28KKwkgKiBzdGFydCBhIG5vaXNlIGZsb29yIGNhbGlicmF0aW9uLCB0byBtZWFzdXJlIHRoZQorCSAqIGNhcmQncyBub2lzZSBmbG9vciAodGhlIG5vaXNlIHdlIG1lYXN1cmUgd2hlbiB3ZSBhcmUgbm90CisJICogdHJhbnNtaXRpbmcgb3IgcmVjZWl2aW5nIGFueXRoaW5nKS4KKwkgKgogCSAqIElmIHdlIGFyZSBpbiBhIG5vaXN5IGVudmlyb25tZW50IEFHQyBjYWxpYnJhdGlvbiBtYXkgdGltZQotCSAqIG91dC4KKwkgKiBvdXQgYW5kL29yIG5vaXNlIGZsb29yIGNhbGlicmF0aW9uIG1pZ2h0IHRpbWVvdXQuCiAJICovCiAJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0FHQ0NUTCwKIAkJCQlBUjVLX1BIWV9BR0NDVExfQ0FMKTsKQEAgLTgyOCwzMCArMTIzNiwzNyBAQAogCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCwgMCwgZmFsc2UpKSB7CiAJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJnYWluIGNhbGlicmF0aW9uIHRpbWVvdXQgKCV1TUh6KVxuIiwKIAkJCWNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJLyoKLQkgKiBTdGFydCBub2lzZSBmbG9vciBjYWxpYnJhdGlvbgotCSAqCiAJICogSWYgd2UgcnVuIE5GIGNhbGlicmF0aW9uIGJlZm9yZSBBR0MsIGl0IGFsd2F5cyB0aW1lcyBvdXQuCiAJICogQmluYXJ5IEhBTCBzdGFydHMgTkYgYW5kIEFHQyBjYWxpYnJhdGlvbiBhdCB0aGUgc2FtZSB0aW1lCi0JICogYW5kIG9ubHkgd2FpdHMgZm9yIEFHQyB0byBmaW5pc2guIEkgYmVsaWV2ZSB0aGF0J3Mgd3JvbmcgYmVjYXVzZQotCSAqIGR1cmluZyBORiBjYWxpYnJhdGlvbiwgcnggcGF0aCBpcyBhbHNvIHJvdXRlZCB0byBhIGRldGVjdG9yLCBzbyBpZgotCSAqIGl0IGRvZXNuJ3QgZmluaXNoIHdlIHdvbid0IGhhdmUgUlguCi0JICoKLQkgKiBYWFg6IEZpbmQgYW4gaW50ZXJ2YWwgdGhhdCdzIE9LIGZvciBhbGwgY2FyZHMuLi4KKwkgKiBhbmQgb25seSB3YWl0cyBmb3IgQUdDIHRvIGZpbmlzaC4gQWxzbyBpZiBBR0Mgb3IgTkYgY2FsLgorCSAqIHRpbWVzIG91dCwgcmVzZXQgZG9lc24ndCBmYWlsIG9uIGJpbmFyeSBIQUwuIEkgYmVsaWV2ZQorCSAqIHRoYXQncyB3cm9uZyBiZWNhdXNlIHNpbmNlIHJ4IHBhdGggaXMgcm91dGVkIHRvIGEgZGV0ZWN0b3IsCisJICogaWYgY2FsLiBkb2Vzbid0IGZpbmlzaCB3ZSB3b24ndCBoYXZlIFJYLiBTYW0ncyBIQUwgZm9yIEFSNTIxMC81MjExCisJICogZW5hYmxlcyBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiBhZnRlciBvZmZzZXQgY2FsaWJyYXRpb24gYW5kIGlmIG5vaXNlCisJICogZmxvb3IgY2FsaWJyYXRpb24gZmFpbHMsIHJlc2V0IGZhaWxzLiBJIGJlbGlldmUgdGhhdCdzCisJICogYSBiZXR0ZXIgYXBwcm9hY2gsIHdlIGp1c3QgbmVlZCB0byBmaW5kIGEgcG9sbGluZyBpbnRlcnZhbAorCSAqIHRoYXQgc3VpdHMgYmVzdCwgZXZlbiBpZiByZXNldCBjb250aW51ZXMgd2UgbmVlZCB0byBtYWtlCisJICogc3VyZSB0aGF0IHJ4IHBhdGggaXMgcmVhZHkuCiAJICovCiAJYXRoNWtfaHdfbm9pc2VfZmxvb3JfY2FsaWJyYXRpb24oYWgsIGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAorCisJLyoKKwkgKiBDb25maWd1cmUgUUNVcy9EQ1VzCisJICovCisKKwkvKiBUT0RPOiBIVyBDb21wcmVzc2lvbiBzdXBwb3J0IGZvciBkYXRhIHF1ZXVlcyAqLworCS8qIFRPRE86IEJ1cnN0IHByZWZldGNoIGZvciBkYXRhIHF1ZXVlcyAqLworCiAJLyoKIAkgKiBSZXNldCBxdWV1ZXMgYW5kIHN0YXJ0IGJlYWNvbiB0aW1lcnMgYXQgdGhlIGVuZCBvZiB0aGUgcmVzZXQgcm91dGluZQorCSAqIFRoaXMgYWxzbyBzZXRzIFFDVSBtYXNrIG9uIGVhY2ggRENVIGZvciAxOjEgcWN1IHRvIGRjdSBtYXBwaW5nCisJICogTm90ZTogSWYgd2Ugd2FudCB3ZSBjYW4gYXNzaWduIG11bHRpcGxlIHFjdXMgb24gb25lIGRjdS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtOyBpKyspIHsKLQkJLypObyBRQ1Ugb24gNTIxMCovCi0JCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkKLQkJCUFSNUtfUkVHX1dSSVRFX1EoYWgsIEFSNUtfUVVFVUVfUUNVTUFTSyhpKSwgaSk7Ci0KIAkJcmV0ID0gYXRoNWtfaHdfcmVzZXRfdHhfcXVldWUoYWgsIGkpOwogCQlpZiAocmV0KSB7CiAJCQlBVEg1S19FUlIoYWgtPmFoX3NjLApAQCAtODYwLDE0ICsxMjc1LDQwIEBACiAJCX0KIAl9CiAKKworCS8qCisJICogQ29uZmlndXJlIERNQS9JbnRlcnJ1cHRzCisJICovCisKKwkvKgorCSAqIFNldCBSeC9UeCBETUEgQ29uZmlndXJhdGlvbgorCSAqCisJICogU2V0IHN0YW5kYXJkIERNQSBzaXplICgxMjgpLiBOb3RlIHRoYXQKKwkgKiBhIERNQSBzaXplIG9mIDUxMiBjYXVzZXMgcnggb3ZlcnJ1bnMgYW5kIHR4IGVycm9ycworCSAqIG9uIHBjaS1lIGNhcmRzICh0ZXN0ZWQgb24gNTQyNCBidXQgc2luY2Ugcnggb3ZlcnJ1bnMKKwkgKiBhbHNvIG9jY3VyIG9uIDU0MTYvNTQxOCB3aXRoIG1hZHdpZmkgd2Ugc2V0IDEyOAorCSAqIGZvciBhbGwgUENJLUUgY2FyZHMgdG8gYmUgc2FmZSkuCisJICoKKwkgKiBYWFg6IG5lZWQgdG8gY2hlY2sgNTIxMCBmb3IgdGhpcworCSAqIFRPRE86IENoZWNrIG91dCB0eCB0cmlnZXIgbGV2ZWwsIGl0J3MgYWx3YXlzIDY0IG9uIGR1bXBzIGJ1dCBJCisJICogZ3Vlc3Mgd2UgY2FuIHR3ZWFrIGl0IGFuZCBzZWUgaG93IGl0IGdvZXMgOy0pCisJICovCisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFhDRkcsCisJCQlBUjVLX1RYQ0ZHX1NETUFNUiwgQVI1S19ETUFTSVpFXzEyOEIpOworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1JYQ0ZHLAorCQkJQVI1S19SWENGR19TRE1BTVcsIEFSNUtfRE1BU0laRV8xMjhCKTsKKwl9CisKIAkvKiBQcmUtZW5hYmxlIGludGVycnVwdHMgb24gNTIxMS81MjEyKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCiAJCWF0aDVrX2h3X3NldF9pbXIoYWgsIGFoLT5haF9pbXIpOwogCiAJLyoKLQkgKiBTZXQgUkYga2lsbCBmbGFncyBpZiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSAocmVhZCBmcm9tIHRoZSBFRVBST00pCi0JICogRGlzYWJsZSBncGlvX2ludHIgZm9yIG5vdyBzaW5jZSBpdCByZXN1bHRzIHN5c3RlbSBoYW5nLgotCSAqIFRPRE86IEhhbmRsZSB0aGlzIGluIGF0aDVrX2ludHIKKwkgKiBTZXR1cCBSRktpbGwgaW50ZXJydXB0IGlmIHJma2lsbCBmbGFnIGlzIHNldCBvbiBlZXByb20uCisJICogVE9ETzogVXNlIGdwaW8gcGluIGFuZCBwb2xhcml0eSBpbmZvcyBmcm9tIGVlcHJvbQorCSAqIFRPRE86IEhhbmRsZSB0aGlzIGluIGF0aDVrX2ludHIgYmVjYXVzZSBpdCdsbCByZXN1bHQKKwkgKiAJIGEgbmFzdHkgaW50ZXJydXB0IHN0b3JtLgogCSAqLwogI2lmIDAKIAlpZiAoQVI1S19FRVBST01fSERSX1JGS0lMTChhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb20uZWVfaGVhZGVyKSkgewpAQCAtODgwLDMzICsxMzIxLDEyIEBACiAJfQogI2VuZGlmCiAKLQkvKgotCSAqIFNldCB0aGUgMzJNSHogcmVmZXJlbmNlIGNsb2NrIG9uIDUyMTIgcGh5IGNsb2NrIHNsZWVwIHJlZ2lzdGVyCi0JICoKLQkgKiBUT0RPOiBGaW5kIG91dCBob3cgdG8gc3dpdGNoIHRvIGV4dGVybmFsIDMyS2h6IGNsb2NrIHRvIHNhdmUgcG93ZXIKLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TQ1JfMzJNSFosIEFSNUtfUEhZX1NDUik7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0xNVF8zMk1IWiwgQVI1S19QSFlfU0xNVCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NBTF8zMk1IWiwgQVI1S19QSFlfU0NBTCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NMT0NLXzMyTUhaLCBBUjVLX1BIWV9TQ0xPQ0spOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NERUxBWV8zMk1IWiwgQVI1S19QSFlfU0RFTEFZKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfcGh5X3NwZW5kaW5nLCBBUjVLX1BIWV9TUEVORElORyk7Ci0KLQkJZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1VTRUNfNTIxMSkgJiAweGZmZmZjMDdmIDsKLQkJZGF0YSB8PSAoYWgtPmFoX3BoeV9zcGVuZGluZyA9PSBBUjVLX1BIWV9TUEVORElOR18xOCkgPwotCQkJCQkJMHgwMDAwMGY4MCA6IDB4MDAwMDEzODAgOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfVVNFQ181MjExKTsKLQkJZGF0YSA9IDA7Ci0JfQotCi0JaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAxMDBhYSwgMHg4MTE4KTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAzMjEwLCAweDgxMWMpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwNTIsIDB4ODEwOCk7Ci0JCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSMjQxMykKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwNCwgMHg4MTIwKTsKLQl9CisJLyogRW5hYmxlIDMyS0h6IGNsb2NrIGZ1bmN0aW9uIGZvciBBUjUyMTIrIGNoaXBzCisJICogU2V0IGNsb2NrcyB0byAzMktIeiBvcGVyYXRpb24gYW5kIHVzZSBhbgorCSAqIGV4dGVybmFsIDMyS0h6IGNyeXN0YWwgd2hlbiBzbGVlcGluZyBpZiBvbmUKKwkgKiBleGlzdHMgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpCisJCQlhdGg1a19od19zZXRfc2xlZXBfY2xvY2soYWgsIHRydWUpOwogCiAJLyoKIAkgKiBEaXNhYmxlIGJlYWNvbnMgYW5kIHJlc2V0IHRoZSByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZidWZmZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwYmFmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmYnVmZmVyLmgKQEAgLTAsMCArMSwxMTgxIEBACisvKgorICogUkYgQnVmZmVyIGhhbmRsaW5nIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICovCisKKworLyoKKyAqIFRoZXJlIGFyZSBzb21lIHNwZWNpYWwgcmVnaXN0ZXJzIG9uIHRoZSBSRiBjaGlwCisgKiB0aGF0IGNvbnRyb2wgdmFyaW91cyBvcGVyYXRpb24gc2V0dGluZ3MgcmVsYXRlZCBtb3N0bHkgdG8KKyAqIHRoZSBhbmFsb2cgcGFydHMgKGNoYW5uZWwsIGdhaW4gYWRqdXN0bWVudCBldGMpLgorICoKKyAqIFdlIGRvbid0IHdyaXRlIG9uIHRob3NlIHJlZ2lzdGVycyBkaXJlY3RseSBidXQKKyAqIHdlIHNlbmQgYSBkYXRhIHBhY2tldCBvbiB0aGUgY2hpcCwgdXNpbmcgYSBzcGVjaWFsIHJlZ2lzdGVyLAorICogdGhhdCBob2xkcyBhbGwgdGhlIHNldHRpbmdzIHdlIG5lZWQuIEFmdGVyIHdlICd2ZSBzZW50IHRoZQorICogZGF0YSBwYWNrZXQsIHdlIHdyaXRlIG9uIGFub3RoZXIgc3BlY2lhbCByZWdpc3RlciB0byBub3RpZnkgaHcKKyAqIHRvIGFwcGx5IHRoZSBzZXR0aW5ncy4gVGhpcyBpcyBkb25lIHNvIHRoYXQgY29udHJvbCByZWdpc3RlcnMKKyAqIGNhbiBiZSBkeW5hbWljYWx5IHByb2dyYW1tZWQgZHVyaW5nIG9wZXJhdGlvbiBhbmQgdGhlIHNldHRpbmdzCisgKiBhcmUgYXBwbGllZCBmYXN0ZXIgb24gdGhlIGh3LgorICoKKyAqIFdlIGNhbGwgZWFjaCBkYXRhIHBhY2tldCBhbiAiUkYgQmFuayIgYW5kIGFsbCB0aGUgZGF0YSB3ZSB3cml0ZQorICogKGFsbCBSRiBCYW5rcykgIlJGIEJ1ZmZlciIuIFRoaXMgZmlsZSBob2xkcyBpbml0aWFsIFJGIEJ1ZmZlcgorICogZGF0YSBmb3IgdGhlIGRpZmZlcmVudCBSRiBjaGlwcywgYW5kIHZhcmlvdXMgaW5mbyB0byBtYXRjaCBSRgorICogQnVmZmVyIG9mZnNldHMgd2l0aCBzcGVjaWZpYyBSRiByZWdpc3RlcnMgc28gdGhhdCB3ZSBjYW4gYWNjZXNzCisgKiB0aGVtLiBXZSB0d2VhayB0aGVzZSBzZXR0aW5ncyBvbiByZnJlZ3NfaW5pdCBmdW5jdGlvbi4KKyAqCisgKiBBbHNvIGNoZWNrIG91dCByZWcuaCBhbmQgVS5TLiBQYXRlbnQgNjY3Nzc3OSBCMSAoYWJvdXQgYnVmZmVyCisgKiByZWdpc3RlcnMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzKToKKyAqCisgKiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vcGF0ZW50cz9pZD1xTlVSQUFBQUVCQUoKKyAqLworCisKKy8qCisgKiBTdHJ1Y3QgdG8gaG9sZCBkZWZhdWx0IG1vZGUgc3BlY2lmaWMgUkYKKyAqIHJlZ2lzdGVyIHZhbHVlcyAoUkYgQmFua3MpCisgKi8KK3N0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgeworCXU4CXJmYl9iYW5rOwkJLyogUkYgQmFuayBudW1iZXIgKi8KKwl1MTYJcmZiX2N0cmxfcmVnaXN0ZXI7CS8qIFJGIEJ1ZmZlciBjb250cm9sIHJlZ2lzdGVyICovCisJdTMyCXJmYl9tb2RlX2RhdGFbNV07CS8qIFJGIEJ1ZmZlciBkYXRhIGZvciBlYWNoIG1vZGUgKi8KK307CisKKy8qCisgKiBTdHJ1Y3QgdG8gaG9sZCBSRiBCdWZmZXIgZmllbGQKKyAqIGluZm9zIHVzZWQgdG8gYWNjZXNzIGNlcnRhaW4gUkYKKyAqIGFuYWxvZyByZWdpc3RlcnMKKyAqLworc3RydWN0IGF0aDVrX3JmYl9maWVsZCB7CisJdTgJbGVuOwkvKiBGaWVsZCBsZW5ndGggKi8KKwl1MTYJcG9zOwkvKiBPZmZzZXQgb24gdGhlIHJhdyBwYWNrZXQgKi8KKwl1OAljb2w7CS8qIENvbHVtbiAtdXNlZCBmb3Igc2hpZnRpbmcgKi8KK307CisKKy8qCisgKiBSRiBhbmFsb2cgcmVnaXN0ZXIgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgYXRoNWtfcmZfcmVnIHsKKwl1OAkJCWJhbms7CS8qIFJGIEJ1ZmZlciBCYW5rIG51bWJlciAqLworCXU4CQkJaW5kZXg7CS8qIFJlZ2lzdGVyJ3MgaW5kZXggb24gcmZfcmVnc19pZHggKi8KKwlzdHJ1Y3QgYXRoNWtfcmZiX2ZpZWxkCWZpZWxkOwkvKiBSRiBCdWZmZXIgZmllbGQgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KK307CisKKy8qIE1hcCBSRiByZWdpc3RlcnMgdG8gaW5kZXhlcworICogV2UgZG8gdGhpcyB0byBoYW5kbGUgY29tbW9uIGJpdHMgYW5kIG1ha2Ugb3VyCisgKiBsaWZlIGVhc2llciBieSB1c2luZyBhbiBpbmRleCBmb3IgZWFjaCByZWdpc3RlcgorICogaW5zdGVhZCBvZiBhIGZ1bGwgcmZiX2ZpZWxkICovCitlbnVtIGF0aDVrX3JmX3JlZ3NfaWR4IHsKKwkvKiBCQU5LIDYgKi8KKwlBUjVLX1JGX09CXzJHSFogPSAwLAorCUFSNUtfUkZfT0JfNUdIWiwKKwlBUjVLX1JGX0RCXzJHSFosCisJQVI1S19SRl9EQl81R0haLAorCUFSNUtfUkZfRklYRURfQklBU19BLAorCUFSNUtfUkZfRklYRURfQklBU19CLAorCUFSNUtfUkZfUFdEX1hQRCwKKwlBUjVLX1JGX1hQRF9TRUwsCisJQVI1S19SRl9YUERfR0FJTiwKKwlBUjVLX1JGX1BEX0dBSU5fTE8sCisJQVI1S19SRl9QRF9HQUlOX0hJLAorCUFSNUtfUkZfSElHSF9WQ19DUCwKKwlBUjVLX1JGX01JRF9WQ19DUCwKKwlBUjVLX1JGX0xPV19WQ19DUCwKKwlBUjVLX1JGX1BVU0hfVVAsCisJQVI1S19SRl9QQUQyR05ELAorCUFSNUtfUkZfWEIyX0xWTCwKKwlBUjVLX1JGX1hCNV9MVkwsCisJQVI1S19SRl9QV0RfSUNMT0JVRl8yRywKKwlBUjVLX1JGX1BXRF84NCwKKwlBUjVLX1JGX1BXRF85MCwKKwlBUjVLX1JGX1BXRF8xMzAsCisJQVI1S19SRl9QV0RfMTMxLAorCUFSNUtfUkZfUFdEXzEzMiwKKwlBUjVLX1JGX1BXRF8xMzYsCisJQVI1S19SRl9QV0RfMTM3LAorCUFSNUtfUkZfUFdEXzEzOCwKKwlBUjVLX1JGX1BXRF8xNjYsCisJQVI1S19SRl9QV0RfMTY3LAorCUFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwKKwkvKiBCQU5LIDcgKi8KKwlBUjVLX1JGX0dBSU5fSSwKKwlBUjVLX1JGX1BMT19TRUwsCisJQVI1S19SRl9SRkdBSU5fU0VMLAorCUFSNUtfUkZfUkZHQUlOX1NURVAsCisJQVI1S19SRl9XQUlUX1MsCisJQVI1S19SRl9XQUlUX0ksCisJQVI1S19SRl9NQVhfVElNRSwKKwlBUjVLX1JGX01JWFZHQV9PVlIsCisJQVI1S19SRl9NSVhHQUlOX09WUiwKKwlBUjVLX1JGX01JWEdBSU5fU1RFUCwKKwlBUjVLX1JGX1BEX0RFTEFZX0EsCisJQVI1S19SRl9QRF9ERUxBWV9CLAorCUFSNUtfUkZfUERfREVMQVlfWFIsCisJQVI1S19SRl9QRF9QRVJJT0RfQSwKKwlBUjVLX1JGX1BEX1BFUklPRF9CLAorCUFSNUtfUkZfUERfUEVSSU9EX1hSLAorfTsKKworCisvKioqKioqKioqKioqKioqKioqKlwKKyogUkY1MTExIChTb21icmVybykgKgorXCoqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTFfT0JfMkdIWgkJeyAzLCAxMTksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9EQl8yR0haCQl7IDMsIDEyMiwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTFfT0JfNUdIWgkJeyAzLCAxMDQsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9EQl81R0haCQl7IDMsIDEwNywgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTFfUFdEX1hQRAkJeyAxLCA5NSwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9YUERfR0FJTgkJeyA0LCA5NiwgIDAgfQorCisvKiBBY2Nlc3MgdG8gUFdEIHJlZ2lzdGVycyAqLworI2RlZmluZSBBUjVLX1JGNTExMV9QV0QoX24pCQl7IDEsICgxMzUgLSBfbiksIDMgfQorCisvKiBCQU5LIDcJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkY1MTExX0dBSU5fSQkJeyA2LCAyOSwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9QTE9fU0VMCQl7IDEsIDQsICAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTExX1JGR0FJTl9TRUwJCXsgMSwgMzYsICAwIH0KKyNkZWZpbmUgQVI1S19SRjUxMTFfUkZHQUlOX1NURVAJCXsgNiwgMzcsICAwIH0KKy8qIE9ubHkgb24gQVI1MjEyIEJhc2VCYW5kIGFuZCB1cCAqLworI2RlZmluZQlBUjVLX1JGNTExMV9XQUlUX1MJCXsgNSwgMTksICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfV0FJVF9JCQl7IDUsIDI0LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTExX01BWF9USU1FCQl7IDIsIDQ5LCAgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMVtdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGNTExMV9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTFfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCUFSNUtfUkY1MTExX09CXzVHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzVHSFosCQlBUjVLX1JGNTExMV9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9QV0RfWFBELAkJQVI1S19SRjUxMTFfUFdEX1hQRH0sCisJezYsIEFSNUtfUkZfWFBEX0dBSU4sCQlBUjVLX1JGNTExMV9YUERfR0FJTn0sCisJezYsIEFSNUtfUkZfUFdEXzg0LAkJQVI1S19SRjUxMTFfUFdEKDg0KX0sCisJezYsIEFSNUtfUkZfUFdEXzkwLAkJQVI1S19SRjUxMTFfUFdEKDkwKX0sCisJezcsIEFSNUtfUkZfR0FJTl9JLAkJQVI1S19SRjUxMTFfR0FJTl9JfSwKKwl7NywgQVI1S19SRl9QTE9fU0VMLAkJQVI1S19SRjUxMTFfUExPX1NFTH0sCisJezcsIEFSNUtfUkZfUkZHQUlOX1NFTCwJCUFSNUtfUkY1MTExX1JGR0FJTl9TRUx9LAorCXs3LCBBUjVLX1JGX1JGR0FJTl9TVEVQLAlBUjVLX1JGNTExMV9SRkdBSU5fU1RFUH0sCisJezcsIEFSNUtfUkZfV0FJVF9TLAkJQVI1S19SRjUxMTFfV0FJVF9TfSwKKwl7NywgQVI1S19SRl9XQUlUX0ksCQlBUjVLX1JGNTExMV9XQUlUX0l9LAorCXs3LCBBUjVLX1JGX01BWF9USU1FLAkJQVI1S19SRjUxMTFfTUFYX1RJTUV9Cit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTExW10gPSB7CisJeyAwLCAweDk4OWMsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMGMwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDQwMGY5LCAweDAwMDQwMGY5LCAweDAwMDQwMGZmLCAweDAwMDQwMGZkLCAweDAwMDQwMGZkIH0gfSwKKwl7IDAsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKKwl7IDEsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDE0IH0gfSwKKwl7IDMsIDB4OThkOCwKKwkgICAgeyAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMzgwMGMwLCAweDAwMzgwMDgwLCAweDAyMzgwMGMwLCAweDAwMzgwMGMwLCAweDAwMzgwMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDIwMDA2LCAweDAwMDIwMDA2LCAweDAwMDAwMDA2LCAweDAwMDIwMDA2LCAweDAwMDIwMDA2IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3IH0gfSwKKwl7IDYsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGYxLCAweDAwMDAwMGYxLCAweDAwMDAwMDYxLCAweDAwMDAwMGYxLCAweDAwMDAwMGYxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA5MDRmLCAweDAwMDA5MDRmLCAweDAwMDA5MDRjLCAweDAwMDA5MDRmLCAweDAwMDA5MDRmIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxMjVhLCAweDAwMDAxMjVhLCAweDAwMDAxMjlhLCAweDAwMDAxMjVhLCAweDAwMDAxMjVhIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBmLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGNTExMi9SRjIxMTIgKERlcmJ5KSAqCitcKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNyAoQ29tbW9uKQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMlhfR0FJTl9JCQl7IDYsIDE0LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyWF9NSVhWR0FfT1ZSCQl7IDEsIDM2LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyWF9NSVhHQUlOX09WUgl7IDIsIDM3LCAgMCB9CisjZGVmaW5lIEFSNUtfUkY1MTEyWF9NSVhHQUlOX1NURVAJeyA0LCAzMiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfREVMQVlfQQkJeyA0LCA1OCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfREVMQVlfQgkJeyA0LCA2MiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfREVMQVlfWFIJeyA0LCA2NiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0EJeyA0LCA3MCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0IJeyA0LCA3NCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfUEVSSU9EX1hSCXsgNCwgNzgsICAwIH0KKworLyogUkZYMTEyIChEZXJieSAxKSAqLworCisvKiBCQU5LIDYgCQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMl9PQl8yR0haCQl7IDMsIDI2OSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyX0RCXzJHSFoJCXsgMywgMjcyLCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMl9PQl81R0haCQl7IDMsIDI2MSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyX0RCXzVHSFoJCXsgMywgMjY0LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMl9GSVhFRF9CSUFTX0EJeyAxLCAyNjAsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9GSVhFRF9CSUFTX0IJeyAxLCAyNTksIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyX1hQRF9TRUwJCXsgMSwgMjg0LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJfWFBEX0dBSU4JCXsgMiwgMjUyLCAwIH0KKworLyogQWNjZXNzIHRvIFBXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVI1S19SRjUxMTJfUFdEKF9uKQkJeyAxLCAoMzAyIC0gX24pLCAzIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc181MTEyW10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkY1MTEyX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGNTExMl9EQl8yR0hafSwKKwl7NiwgQVI1S19SRl9PQl81R0haLAkJQVI1S19SRjUxMTJfT0JfNUdIWn0sCisJezYsIEFSNUtfUkZfREJfNUdIWiwJCUFSNUtfUkY1MTEyX0RCXzVHSFp9LAorCXs2LCBBUjVLX1JGX0ZJWEVEX0JJQVNfQSwJQVI1S19SRjUxMTJfRklYRURfQklBU19BfSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0IsCUFSNUtfUkY1MTEyX0ZJWEVEX0JJQVNfQn0sCisJezYsIEFSNUtfUkZfWFBEX1NFTCwJCUFSNUtfUkY1MTEyX1hQRF9TRUx9LAorCXs2LCBBUjVLX1JGX1hQRF9HQUlOLAkJQVI1S19SRjUxMTJfWFBEX0dBSU59LAorCXs2LCBBUjVLX1JGX1BXRF8xMzAsCQlBUjVLX1JGNTExMl9QV0QoMTMwKX0sCisJezYsIEFSNUtfUkZfUFdEXzEzMSwJCUFSNUtfUkY1MTEyX1BXRCgxMzEpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMyLAkJQVI1S19SRjUxMTJfUFdEKDEzMil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzYsCQlBUjVLX1JGNTExMl9QV0QoMTM2KX0sCisJezYsIEFSNUtfUkZfUFdEXzEzNywJCUFSNUtfUkY1MTEyX1BXRCgxMzcpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM4LAkJQVI1S19SRjUxMTJfUFdEKDEzOCl9LAorCXs3LCBBUjVLX1JGX0dBSU5fSSwJCUFSNUtfUkY1MTEyWF9HQUlOX0l9LAorCXs3LCBBUjVLX1JGX01JWFZHQV9PVlIsCQlBUjVLX1JGNTExMlhfTUlYVkdBX09WUn0sCisJezcsIEFSNUtfUkZfTUlYR0FJTl9PVlIsCUFSNUtfUkY1MTEyWF9NSVhHQUlOX09WUn0sCisJezcsIEFSNUtfUkZfTUlYR0FJTl9TVEVQLAlBUjVLX1JGNTExMlhfTUlYR0FJTl9TVEVQfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9BLAkJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0F9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX0IsCQlBUjVLX1JGNTExMlhfUERfREVMQVlfQn0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfWFIsCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9YUn0sCisJezcsIEFSNUtfUkZfUERfUEVSSU9EX0EsCUFSNUtfUkY1MTEyWF9QRF9QRVJJT0RfQX0sCisJezcsIEFSNUtfUkZfUERfUEVSSU9EX0IsCUFSNUtfUkY1MTEyWF9QRF9QRVJJT0RfQn0sCisJezcsIEFSNUtfUkZfUERfUEVSSU9EX1hSLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX1hSfSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzUxMTJbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYjAsIDB4MDAwMDAwYjAsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTggfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2YzRhNDEsIDB4MDA2YzRhNDEsIDB4MDA2YzRhZjEsIDB4MDA2YzRhNjEsIDB4MDA2YzRhNjEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDg5MmEsIDB4MDA1MDg5MmEsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAgfSB9LAorCXsgNiwgMHg5OGQwLAorCSAgICB7IDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAorCXsgNywgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorfTsKKworLyogUkZYMTEyQSAoRGVyYnkgMikgKi8KKworLyogQkFOSyA2CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMkFfT0JfMkdIWgkJeyAzLCAyODcsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfREJfMkdIWgkJeyAzLCAyOTAsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9PQl81R0haCQl7IDMsIDI3OSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9EQl81R0haCQl7IDMsIDI4MiwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJBX0ZJWEVEX0JJQVNfQQl7IDEsIDI3OCwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0IJeyAxLCAyNzcsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9YUERfU0VMCQl7IDEsIDMwMiwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9QREdBSU5MTwkJeyAyLCAyNzAsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfUERHQUlOSEkJCXsgMiwgMjU3LCAwIH0KKworLyogQWNjZXNzIHRvIFBXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVI1S19SRjUxMTJBX1BXRChfbikJCXsgMSwgKDMwNiAtIF9uKSwgMyB9CisKKy8qIFZvbHRhZ2UgcmVndWxhdG9ycyAqLworI2RlZmluZQlBUjVLX1JGNTExMkFfSElHSF9WQ19DUAkJeyAyLCA5MCwgIDIgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfTUlEX1ZDX0NQCQl7IDIsIDkyLCAgMiB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9MT1dfVkNfQ1AJCXsgMiwgOTQsICAyIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX1BVU0hfVVAJCXsgMSwgMjU0LCAgMiB9CisKKy8qIFBvd2VyIGNvbnN1bXB0aW9uICovCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9QQUQyR05ECQl7IDEsIDI4MSwgMSB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9YQjJfTFZMCQl7IDIsIDEsCSAgMyB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9YQjVfTFZMCQl7IDIsIDMsCSAgMyB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMmFbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjUxMTJBX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGNTExMkFfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCUFSNUtfUkY1MTEyQV9PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJQVI1S19SRjUxMTJBX0RCXzVHSFp9LAorCXs2LCBBUjVLX1JGX0ZJWEVEX0JJQVNfQSwJQVI1S19SRjUxMTJBX0ZJWEVEX0JJQVNfQX0sCisJezYsIEFSNUtfUkZfRklYRURfQklBU19CLAlBUjVLX1JGNTExMkFfRklYRURfQklBU19CfSwKKwl7NiwgQVI1S19SRl9YUERfU0VMLAkJQVI1S19SRjUxMTJBX1hQRF9TRUx9LAorCXs2LCBBUjVLX1JGX1BEX0dBSU5fTE8sCQlBUjVLX1JGNTExMkFfUERHQUlOTE99LAorCXs2LCBBUjVLX1JGX1BEX0dBSU5fSEksCQlBUjVLX1JGNTExMkFfUERHQUlOSEl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzAsCQlBUjVLX1JGNTExMkFfUFdEKDEzMCl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzEsCQlBUjVLX1JGNTExMkFfUFdEKDEzMSl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzIsCQlBUjVLX1JGNTExMkFfUFdEKDEzMil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzYsCQlBUjVLX1JGNTExMkFfUFdEKDEzNil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzcsCQlBUjVLX1JGNTExMkFfUFdEKDEzNyl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzgsCQlBUjVLX1JGNTExMkFfUFdEKDEzOCl9LAorCXs2LCBBUjVLX1JGX1BXRF8xNjYsCQlBUjVLX1JGNTExMkFfUFdEKDE2Nil9LAorCXs2LCBBUjVLX1JGX1BXRF8xNjcsCQlBUjVLX1JGNTExMkFfUFdEKDE2Nyl9LAorCXs2LCBBUjVLX1JGX0hJR0hfVkNfQ1AsCQlBUjVLX1JGNTExMkFfSElHSF9WQ19DUH0sCisJezYsIEFSNUtfUkZfTUlEX1ZDX0NQLAkJQVI1S19SRjUxMTJBX01JRF9WQ19DUH0sCisJezYsIEFSNUtfUkZfTE9XX1ZDX0NQLAkJQVI1S19SRjUxMTJBX0xPV19WQ19DUH0sCisJezYsIEFSNUtfUkZfUFVTSF9VUCwJCUFSNUtfUkY1MTEyQV9QVVNIX1VQfSwKKwl7NiwgQVI1S19SRl9QQUQyR05ELAkJQVI1S19SRjUxMTJBX1BBRDJHTkR9LAorCXs2LCBBUjVLX1JGX1hCMl9MVkwsCQlBUjVLX1JGNTExMkFfWEIyX0xWTH0sCisJezYsIEFSNUtfUkZfWEI1X0xWTCwJCUFSNUtfUkY1MTEyQV9YQjVfTFZMfSwKKwl7NywgQVI1S19SRl9HQUlOX0ksCQlBUjVLX1JGNTExMlhfR0FJTl9JfSwKKwl7NywgQVI1S19SRl9NSVhWR0FfT1ZSLAkJQVI1S19SRjUxMTJYX01JWFZHQV9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fT1ZSLAlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fU1RFUCwJQVI1S19SRjUxMTJYX01JWEdBSU5fU1RFUH0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQSwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9BfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9CLAkJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0J9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX1hSLAlBUjVLX1JGNTExMlhfUERfREVMQVlfWFJ9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9BLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0F9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9CLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0J9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9YUiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTEyYVtdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMzA2MDQwOCwgMHgwMzA3MDQwOCwgMHgwMzA2MDQwOCwgMHgwMzA2MDQwOCwgMHgwMzA3MDQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDYwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDExMDAwMCwgMHgwMDExMDAwMCwgMHgwMDExMDAwMCwgMHgwMDExMDAwMCwgMHgwMDExMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCB9IH0sCisJeyA2LCAweDk4ZDgsCisJICAgIHsgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYyB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YyB9IH0sCisJeyA3LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMyB9IH0sCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKlwKKyogUkYyNDEzIChHcmlmZmluKSAqCitcKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYgCQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGMjQxM19PQl8yR0haCQl7IDMsIDE2OCwgMCB9CisjZGVmaW5lCUFSNUtfUkYyNDEzX0RCXzJHSFoJCXsgMywgMTY1LCAwIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc18yNDEzW10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkYyNDEzX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGMjQxM19EQl8yR0hafSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncworICogWFhYOiBhL2FUdXJibyA/Pz8KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzI0MTNbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTggfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyODAwMDAsIDB4MDAyODAwMDAsIDB4MDAyODAwNjAsIDB4MDAyODAwNjAsIDB4MDAyODAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDAwYzAsIDB4MDA1MDAwYzAsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDA0NTgsIDB4MDAwMDA0NTgsIDB4MDAwMDA0NTgsIDB4MDAwMDA0NTgsIDB4MDAwMDA0NTggfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAgfSB9LAorCXsgNiwgMHg5OGQ4LAorCSAgICB7IDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGMjMxNS9SRjIzMTYgKENvYnJhIFNvQykgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQkFOSyA2CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGMjMxNl9PQl8yR0haCQl7IDMsIDE3OCwgMCB9CisjZGVmaW5lCUFSNUtfUkYyMzE2X0RCXzJHSFoJCXsgMywgMTc1LCAwIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc18yMzE2W10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkYyMzE2X09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGMjMxNl9EQl8yR0hafSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzIzMTZbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwODAsIDB4MDBhMDAwODAsIDB4MDBhMDAwODAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMGQsIDB4MDA0MDAwMGQsIDB4MDA0MDAwMGQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTggfSB9LAorCXsgNiwgMHg5OGMwLAorCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGNTQxMy9SRjU0MjQgKEVhZ2xlL0NvbmRvcikgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQkFOSyA2CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTQxM19PQl8yR0haCQl7IDMsIDI0MSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1NDEzX0RCXzJHSFoJCXsgMywgMjM4LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTQxM19PQl81R0haCQl7IDMsIDI0NywgMCB9CisjZGVmaW5lCUFSNUtfUkY1NDEzX0RCXzVHSFoJCXsgMywgMjQ0LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTQxM19QV0RfSUNMT0JVRjJHCXsgMywgMTMxLCAzIH0KKyNkZWZpbmUJQVI1S19SRjU0MTNfREVSQllfQ0hBTl9TRUxfTU9ERQl7IDEsIDI5MSwgMiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTQxM1tdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQkgQVI1S19SRjU0MTNfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCSBBUjVLX1JGNTQxM19EQl8yR0hafSwKKwl7NiwgQVI1S19SRl9PQl81R0haLAkJIEFSNUtfUkY1NDEzX09CXzVHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzVHSFosCQkgQVI1S19SRjU0MTNfREJfNUdIWn0sCisJezYsIEFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsCSBBUjVLX1JGNTQxM19QV0RfSUNMT0JVRjJHfSwKKwl7NiwgQVI1S19SRl9ERVJCWV9DSEFOX1NFTF9NT0RFLCBBUjVLX1JGNTQxM19ERVJCWV9DSEFOX1NFTF9NT0RFfSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzU0MTNbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDAwYzAsIDB4MDBhMDAwYzAsIDB4MDBlMDAwYzAsIDB4MDBlMDAwYzAsIDB4MDBlMDAwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDJjMDAsIDB4MDAwMDJjMDAsIDB4MDAwMDM2MDAsIDB4MDAwMDM2MDAsIDB4MDAwMDJjMDAgfSB9LAorCXsgNiwgMHg5OGM4LAorCSAgICB7IDB4MDAwMDA0MDMsIDB4MDAwMDA0MDMsIDB4MDAwNDA0MDMsIDB4MDAwNDA0MDMsIDB4MDAwNDA0MDMgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGMjQyNS9SRjI0MTcgKFN3YW4vTmFsYSkgKgorKiBBUjIzMTcgKFNwaWRlciBTb0MpICAgICAgICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjI0MjVfT0JfMkdIWgkJeyAzLCAxOTMsIDAgfQorI2RlZmluZQlBUjVLX1JGMjQyNV9EQl8yR0haCQl7IDMsIDE5MCwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjQyNVtdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjQyNV9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjI0MjVfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MKKyAqIFhYWDogYS9hVHVyYm8gPworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjQyNVtdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCisJeyA2LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OworCisvKgorICogVE9ETzogSGFuZGxlIHRoZSBmZXcgZGlmZmVyZW5jZXMgd2l0aCBzd2FuIGR1cmluZworICogYmFuayBtb2RpZmljYXRpb24gYW5kIGdldCByaWQgb2YgdGhpcworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjMxN1tdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAxMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAxMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCB9IH0sCisJeyA2LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OworCisvKgorICogVE9ETzogSGFuZGxlIHRoZSBmZXcgZGlmZmVyZW5jZXMgd2l0aCBzd2FuIGR1cmluZworICogYmFuayBtb2RpZmljYXRpb24gYW5kIGdldCByaWQgb2YgdGhpcworICogWFhYOiBhL2FUdXJibyA/CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yNDE3W10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTAwMDAwLCAweDAwMTAwMDAwLCAweDAwMTAwMDAwLCAweDAwMTAwMDAwLCAweDAwMTAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDIwMDAwLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjgwMDAwLCAweDAwZjgwMDAwLCAweDAwZjgwMDAwLCAweDAwZjgwMDAwLCAweDAwZjgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZTcwMDAwLCAweDAwZTcwMDAwLCAweDgwZTcwMDAwLCAweDgwZTcwMDAwLCAweDAwZTcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTQwMDAwLCAweDAwMTQwMDAwLCAweDAwMTQwMDAwLCAweDAwMTQwMDAwLCAweDAwMTQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTEwMDQwLCAweDAwOTEwMDQwLCAweDAwOTEwMDQwLCAweDAwOTEwMDQwLCAweDAwOTEwMDQwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDcwMDFhLCAweDAwMDcwMDFhLCAweDAyMDcwMDFhLCAweDAyMDcwMDFhLCAweDAwMDcwMDFhIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDEwMDAwLCAweDAwNDEwMDAwLCAweDAwNDEwMDAwLCAweDAwNDEwMDAwLCAweDAwNDEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODEwMDAwLCAweDAwODEwMDAwLCAweDAwODEwMDYwLCAweDAwODEwMDYwLCAweDAwODEwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDIwODAwLCAweDAwMDIwODAwLCAweDAwMDIwODAzLCAweDAwMDIwODAzLCAweDAwMDIwODAzIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxNjYwLCAweDAwMDAxNjYwLCAweDAwMDAxNjYwLCAweDAwMDAxNjYwLCAweDAwMDAxNjYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxNjg4LCAweDAwMDAxNjg4LCAweDAwMDAxNjg4LCAweDAwMDAxNjg4LCAweDAwMDAxNjg4IH0gfSwKKwl7IDYsIDB4OThjNCwKKwkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmdhaW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmZ2Fpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTRkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmdhaW4uaApAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIFJGIEdhaW4gb3B0aW1pemF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDkgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqLworCisvKgorICogTW9kZS1zcGVjaWZpYyBSRiBHYWluIHRhYmxlICg2NGJ5dGVzKSBmb3IgUkY1MTExLzUxMTIKKyAqIChSRjUxMTAgb25seSBjb21lcyB3aXRoIEFSNTIxMCBhbmQgb25seSBzdXBwb3J0cyBhL3R1cmJvIGEgbW9kZSBzbyBpbml0aWFsCisgKiBSRiBHYWluIHZhbHVlcyBhcmUgaW5jbHVkZWQgaW4gQVI1S19BUjUyMTBfSU5JKQorICovCitzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiB7CisJdTE2CXJmZ19yZWdpc3RlcjsJLyogUkYgR2FpbiByZWdpc3RlciBhZGRyZXNzICovCisJdTMyCXJmZ192YWx1ZVsyXTsJLyogW2ZyZXEgKHNlZSBiZWxvdyldICovCit9OworCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTExMSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81MTExW10gPSB7CisJLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMWU5LCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMTUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMTk5LCAweDAwMDAwMTkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDU5LCAweDAwMDAwMDQ0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDg0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMWE1LCAweDAwMDAwMTQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDFlNSwgMHgwMDAwMDE4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMjUsIDB4MDAwMDAxYzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMDE0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDA0MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwODIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMTc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDE5OCwgMHgwMDAwMDFiOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAxZDgsIDB4MDAwMDAxZjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDE4LCAweDAwMDAwMDEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA1OCwgMHgwMDAwMDA1MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwOTgsIDB4MDAwMDAwOTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWE0LCAweDAwMDAwMTdjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDFlNCwgMHgwMDAwMDFiYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMjQsIDB4MDAwMDAxZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDY0LCAweDAwMDAwMDBhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDBhNCwgMHgwMDAwMDA0YSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwZTQsIDB4MDAwMDAwOGEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMTBhLCAweDAwMDAwMTVhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE0YSwgMHgwMDAwMDE5YSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxOGEsIDB4MDAwMDAxZGEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMWNhLCAweDAwMDAwMDBlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwYSwgMHgwMDAwMDA0ZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwNGEsIDB4MDAwMDAwOGUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDhhLCAweDAwMDAwMTVlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDFiYSwgMHgwMDAwMDE5ZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAxZmEsIDB4MDAwMDAxZGUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDNhLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDA3YSwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAxODYsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMWM2LCAweDAwMDAwMTc5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwNiwgMHgwMDAwMDFiOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwNDYsIDB4MDAwMDAxZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDg2LCAweDAwMDAwMDM5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDA3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMWJkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDFmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwM2QgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDdkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBiZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTEyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTJbXSA9IHsKKwkvKgkJCSAgICAgIDVHaHoJMkdoegkqLworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwNDcsIDB4MDAwMDAwNDcgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwODcsIDB4MDAwMDAwODcgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAxYTAsIDB4MDAwMDAxYTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAxZTAsIDB4MDAwMDAxZTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAxZTEsIDB4MDAwMDAxZTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDE2MiwgMHgwMDAwMDE2MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAxYTIsIDB4MDAwMDAxYTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMWUyLCAweDAwMDAwMWUyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwNjIsIDB4MDAwMDAwNjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMTYzLCAweDAwMDAwMTYzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDFhMywgMHgwMDAwMDFhMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAxZTMsIDB4MDAwMDAxZTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDIzLCAweDAwMDAwMDIzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDA2MywgMHgwMDAwMDA2MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAxODQsIDB4MDAwMDAxODQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMWM0LCAweDAwMDAwMWM0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAxZWEsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDJhLCAweDAwMDAwMDRiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDA2YSwgMHgwMDAwMDA4YiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwYWEsIDB4MDAwMDAxYWMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMWFiLCAweDAwMDAwMWVjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDFlYiwgMHgwMDAwMDAyYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMmIsIDB4MDAwMDAwMTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDZiLCAweDAwMDAwMDUyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDBhYiwgMHgwMDAwMDA5MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAxYWMsIDB4MDAwMDAxOTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMWVjLCAweDAwMDAwMWQzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAyYywgMHgwMDAwMDAxMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwM2EsIDB4MDAwMDAwNTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDdhLCAweDAwMDAwMDkzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDBiYSwgMHgwMDAwMDE5NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAxYmIsIDB4MDAwMDAxZDQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMWZiLCAweDAwMDAwMDE0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAzYiwgMHgwMDAwMDAzYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwN2IsIDB4MDAwMDAwN2EgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMGJiLCAweDAwMDAwMGJhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDFiYywgMHgwMDAwMDFiYiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAxZmMsIDB4MDAwMDAxZmIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDNjLCAweDAwMDAwMDNiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDA3YywgMHgwMDAwMDA3YiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwYmMsIDB4MDAwMDAwYmIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMWJjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDFmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwM2MgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMDdjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBiYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorfTsKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjI0MTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fMjQxM1tdID0geworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxNjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWU4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAyOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFjOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQ5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxOTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE5MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDExIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA1MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwOTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxOTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWQ5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAxOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDk5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBkOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorfTsKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBBUjIzMTYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fMjMxNltdID0geworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxNjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWE4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBhOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGU4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDEzMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTcwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorfTsKKworCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTQxMyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81NDEzW10gPSB7CisJLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWExLCAweDAwMDAwMTYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWExIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMWUxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDIxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMTg4LCAweDAwMDAwMDYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMTg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAwNDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDE2OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAxYTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMWU5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDFkMCwgMHgwMDAwMDAyOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwNjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDUwLCAweDAwMDAwMTkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA5MCwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAxYjEsIDB4MDAwMDAwMTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWYxLCAweDAwMDAwMDUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAzMSwgMHgwMDAwMDA5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwNzEsIDB4MDAwMDAxNzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWI4LCAweDAwMDAwMWIxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDFmOCwgMHgwMDAwMDFmMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMzgsIDB4MDAwMDAwMzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDc4LCAweDAwMDAwMDcxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDE4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwOTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMGQ5LCAweDAwMDAwMTc5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDFiOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMDM5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDA3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKK307CisKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjI0MjUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fMjQyNVtdID0geworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxODggfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFjOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQ5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTcxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDM5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorfTsKKworI2RlZmluZSBBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTEJCTQKKyNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCQk3CisjZGVmaW5lIEFSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTCQlBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTIKKyNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfSElfTUFSR0lOCQkxNQorI2RlZmluZSBBUjVLX0dBSU5fRFlOX0FESlVTVF9MT19NQVJHSU4JCTIwCisjZGVmaW5lIEFSNUtfR0FJTl9DQ0tfUFJPQkVfQ09SUgkJNQorI2RlZmluZSBBUjVLX0dBSU5fQ0NLX09GRE1fR0FJTl9ERUxUQQkJMTUKKyNkZWZpbmUgQVI1S19HQUlOX1NURVBfQ09VTlQJCQkxMAorCisvKiBDaGVjayBpZiBvdXIgY3VycmVudCBtZWFzdXJlbWVudCBpcyBpbnNpZGUgb3VyCisgKiBjdXJyZW50IHZhcmlhYmxlIGF0dGVudWF0aW9uIHdpbmRvdyAqLworI2RlZmluZSBBUjVLX0dBSU5fQ0hFQ0tfQURKVVNUKF9nKSAJCVwKKwkoKF9nKS0+Z19jdXJyZW50IDw9IChfZyktPmdfbG93IHx8IChfZyktPmdfY3VycmVudCA+PSAoX2cpLT5nX2hpZ2gpCisKK3N0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwIHsKKwlzOAkJCQlnb3NfcGFyYW1bQVI1S19HQUlOX0NSTl9NQVhfRklYX0JJVFNdOworCXM4CQkJCWdvc19nYWluOworfTsKKworc3RydWN0IGF0aDVrX2dhaW5fb3B0IHsKKwl1OAkJCQlnb19kZWZhdWx0OworCXU4CQkJCWdvX3N0ZXBzX2NvdW50OworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwCWdvX3N0ZXBbQVI1S19HQUlOX1NURVBfQ09VTlRdOworfTsKKworLyoKKyAqIFBhcmFtZXRlcnMgb24gZ29zX3BhcmFtOgorICogMSkgVHggY2xpcCBQSFkgcmVnaXN0ZXIKKyAqIDIpIFBXRCA5MCBSRiByZWdpc3RlcgorICogMykgUFdEIDg0IFJGIHJlZ2lzdGVyCisgKiA0KSBSRkdhaW5TZWwgUkYgcmVnaXN0ZXIKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTEgPSB7CisJNCwKKwk5LAorCXsKKwkJeyB7IDQsIDEsIDEsIDEgfSwgNiB9LAorCQl7IHsgNCwgMCwgMSwgMSB9LCA0IH0sCisJCXsgeyAzLCAxLCAxLCAxIH0sIDMgfSwKKwkJeyB7IDQsIDAsIDAsIDEgfSwgMSB9LAorCQl7IHsgNCwgMSwgMSwgMCB9LCAwIH0sCisJCXsgeyA0LCAwLCAxLCAwIH0sIC0yIH0sCisJCXsgeyAzLCAxLCAxLCAwIH0sIC0zIH0sCisJCXsgeyA0LCAwLCAwLCAwIH0sIC00IH0sCisJCXsgeyAyLCAxLCAxLCAwIH0sIC02IH0KKwl9Cit9OworCisvKgorICogUGFyYW1ldGVycyBvbiBnb3NfcGFyYW06CisgKiAxKSBNaXhnYWluIG92ciBSRiByZWdpc3RlcgorICogMikgUFdEIDEzOCBSRiByZWdpc3RlcgorICogMykgUFdEIDEzNyBSRiByZWdpc3RlcgorICogNCkgUFdEIDEzNiBSRiByZWdpc3RlcgorICogNSkgUFdEIDEzMiBSRiByZWdpc3RlcgorICogNikgUFdEIDEzMSBSRiByZWdpc3RlcgorICogNykgUFdEIDEzMCBSRiByZWdpc3RlcgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0IHJmZ2Fpbl9vcHRfNTExMiA9IHsKKwkxLAorCTgsCisJeworCQl7IHsgMywgMCwgMCwgMCwgMCwgMCwgMCB9LCA2IH0sCisJCXsgeyAyLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDAgfSwKKwkJeyB7IDEsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTMgfSwKKwkJeyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTYgfSwKKwkJeyB7IDAsIDEsIDEsIDAsIDAsIDAsIDAgfSwgLTggfSwKKwkJeyB7IDAsIDEsIDEsIDAsIDEsIDEsIDAgfSwgLTEwIH0sCisJCXsgeyAwLCAxLCAwLCAxLCAxLCAxLCAwIH0sIC0xMyB9LAorCQl7IHsgMCwgMSwgMCwgMSwgMSwgMCwgMSB9LCAtMTYgfSwKKwl9Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL01ha2VmaWxlCmluZGV4IDEyMDlkMTQuLjFhNGQ0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL01ha2VmaWxlCkBAIC05LDggKzksMTEgQEAKIAkJbWFpbi5vIFwKIAkJcmVjdi5vIFwKIAkJeG1pdC5vIFwKKwkJdmlydHVhbC5vIFwKIAkJcmMubwogCithdGg5ay0kKENPTkZJR19QQ0kpICs9IHBjaS5vCithdGg5ay0kKENPTkZJR19BVEhFUk9TX0FSNzFYWCkgKz0gYWhiLm8KIGF0aDlrLSQoQ09ORklHX0FUSDlLX0RFQlVHKSArPSBkZWJ1Zy5vCiAKIG9iai0kKENPTkZJR19BVEg5SykgKz0gYXRoOWsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9haGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGNjN2JiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYWhiLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0aDlrX3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiYXRoOWsuaCIKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX2FoYl9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJKmNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9haGJfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpb3VubWFwKHNjLT5tZW0pOworfQorCitzdGF0aWMgYm9vbCBhdGhfYWhiX2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KTsKKwlzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlwZGF0YSA9IChzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAob2ZmID49IChBUlJBWV9TSVpFKHBkYXRhLT5lZXByb21fZGF0YSkpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIiVzOiBmbGFzaCByZWFkIGZhaWxlZCwgb2Zmc2V0ICUwOHggaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCV9fZnVuY19fLCBvZmYpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBwZGF0YS0+ZWVwcm9tX2RhdGFbb2ZmXTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfYWhiX2J1c19vcHMgID0geworCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9haGJfcmVhZF9jYWNoZXNpemUsCisJLmNsZWFudXAgPSBhdGhfYWhiX2NsZWFudXAsCisKKwkuZWVwcm9tX3JlYWQgPSBhdGhfYWhiX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCByZXQgPSAwOworCXN0cnVjdCBhdGhfaHcgKmFoOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZm91bmRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwltZW0gPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlpcnEgPSByZXMtPnN0YXJ0OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpICsKKwkJCQlzaXplb2Yoc3RydWN0IGF0aF9zb2Z0YyksICZhdGg5a19vcHMpOworCWlmIChodyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJYXBoeSA9IGh3LT5wcml2OworCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgKGFwaHkgKyAxKTsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnByaV93aXBoeSA9IGFwaHk7CisJc2MtPmh3ID0gaHc7CisJc2MtPmRldiA9ICZwZGV2LT5kZXY7CisJc2MtPm1lbSA9IG1lbTsKKwlzYy0+YnVzX29wcyA9ICZhdGhfYWhiX2J1c19vcHM7CisJc2MtPmlycSA9IGlycTsKKworCXJldCA9IGF0aF9hdHRhY2goQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGRldmljZSwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2h3OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9kZXRhY2g7CisJfQorCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4LCAiCisJICAgICAgICJBUiVzIFJGIFJldjoleCwgbWVtPTB4JWx4LCBpcnE9JWRcbiIsCisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKKwkgICAgICAgYXRoX21hY19iYl9uYW1lKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCisJICAgICAgIGF0aF9yZl9uYW1lKChhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2ICYgQVJfUkFESU9fU1JFVl9NQUpPUikpLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5waHlSZXYsCisJICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgaXJxKTsKKworCXJldHVybiAwOworCisgZXJyX2RldGFjaDoKKwlhdGhfZGV0YWNoKHNjKTsKKyBlcnJfZnJlZV9odzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisgZXJyX2lvdW5tYXA6CisJaW91bm1hcChtZW0pOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGhfYWhiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaHcpIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCisJCWF0aF9jbGVhbnVwKHNjKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aF9haGJfZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gYXRoX2FoYl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGF0aF9haGJfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdGg5ayIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgYXRoX2FoYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXRoX2FoYl9kcml2ZXIpOworfQorCit2b2lkIGF0aF9haGJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCmluZGV4IDI1MWUyZDkuLmEzOWViNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCkBAIC0xNCwyMyArMTQsMTkgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X2FuaV9jaGFubmVsX2lkeChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgaW50IGF0aDlrX2h3X2dldF9hbmlfY2hhbm5lbF9pZHgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaHAtPmFoX2FuaSk7IGkrKykgewotCQlpZiAoYWhwLT5haF9hbmlbaV0uYy5jaGFubmVsID09IGNoYW4tPmNoYW5uZWwpCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWgtPmFuaSk7IGkrKykgeworCQlpZiAoYWgtPmFuaVtpXS5jICYmCisJCSAgICBhaC0+YW5pW2ldLmMtPmNoYW5uZWwgPT0gY2hhbi0+Y2hhbm5lbCkKIAkJCXJldHVybiBpOwotCQlpZiAoYWhwLT5haF9hbmlbaV0uYy5jaGFubmVsID09IDApIHsKLQkJCWFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9IGNoYW4tPmNoYW5uZWw7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jLmNoYW5uZWxGbGFncyA9IGNoYW4tPmNoYW5uZWxGbGFnczsKKwkJaWYgKGFoLT5hbmlbaV0uYyA9PSBOVUxMKSB7CisJCQlhaC0+YW5pW2ldLmMgPSBjaGFuOwogCQkJcmV0dXJuIGk7CiAJCX0KIAl9CkBAIC00MSw0MSArMzcsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfYW5pX2NvbnRyb2woc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfYW5pX2NvbnRyb2woc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJIGVudW0gYXRoOWtfYW5pX2NtZCBjbWQsIGludCBwYXJhbSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGUgPSBhaHAtPmFoX2N1cmFuaTsKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAotCXN3aXRjaCAoY21kICYgYWhwLT5haF9hbmlfZnVuY3Rpb24pIHsKKwlzd2l0Y2ggKGNtZCAmIGFoLT5hbmlfZnVuY3Rpb24pIHsKIAljYXNlIEFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTDp7CiAJCXUzMiBsZXZlbCA9IHBhcmFtOwogCi0JCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGFocC0+YWhfdG90YWxTaXplRGVzaXJlZCkpIHsKKwkJaWYgKGxldmVsID49IEFSUkFZX1NJWkUoYWgtPnRvdGFsU2l6ZURlc2lyZWQpKSB7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCiAJCQkJImxldmVsIG91dCBvZiByYW5nZSAoJXUgPiAldSlcbiIsCiAJCQkJbGV2ZWwsCi0JCQkJKHVuc2lnbmVkKUFSUkFZX1NJWkUoYWhwLT5haF90b3RhbFNpemVEZXNpcmVkKSk7CisJCQkJKHVuc2lnbmVkKUFSUkFZX1NJWkUoYWgtPnRvdGFsU2l6ZURlc2lyZWQpKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLAogCQkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfVE9UX0RFUywKLQkJCSAgICAgIGFocC0+YWhfdG90YWxTaXplRGVzaXJlZFtsZXZlbF0pOworCQkJICAgICAgYWgtPnRvdGFsU2l6ZURlc2lyZWRbbGV2ZWxdKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0FHQ19DVEwxLAogCQkJICAgICAgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9MT1csCi0JCQkgICAgICBhaHAtPmFoX2NvYXJzZUxvd1tsZXZlbF0pOworCQkJICAgICAgYWgtPmNvYXJzZV9sb3dbbGV2ZWxdKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0FHQ19DVEwxLAogCQkJICAgICAgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9ISUdILAotCQkJICAgICAgYWhwLT5haF9jb2Fyc2VIaWdoW2xldmVsXSk7CisJCQkgICAgICBhaC0+Y29hcnNlX2hpZ2hbbGV2ZWxdKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZJTkRfU0lHLAogCQkJICAgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlBXUiwKLQkJCSAgICAgIGFocC0+YWhfZmlycHdyW2xldmVsXSk7CisJCQkgICAgICBhaC0+ZmlycHdyW2xldmVsXSk7CiAKIAkJaWYgKGxldmVsID4gYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9uaXVwKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9uaXVwKys7CiAJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9uaWRvd24rKzsKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX25pZG93bisrOwogCQlhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsID0gbGV2ZWw7CiAJCWJyZWFrOwogCX0KQEAgLTEyOSw5ICsxMjQsOSBAQAogCiAJCWlmICghb24gIT0gYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKSB7CiAJCQlpZiAob24pCi0JCQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX29mZG1vbisrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1vbisrOwogCQkJZWxzZQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9vZmRtb2ZmKys7CisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbW9mZisrOwogCQkJYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID0gIW9uOwogCQl9CiAJCWJyZWFrOwpAQCAtMTQ1LDkgKzE0MCw5IEBACiAJCQkgICAgICB3ZWFrU2lnVGhyQ2NrW2hpZ2hdKTsKIAkJaWYgKGhpZ2ggIT0gYW5pU3RhdGUtPmNja1dlYWtTaWdUaHJlc2hvbGQpIHsKIAkJCWlmIChoaWdoKQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2toaWdoKys7CisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfY2NraGlnaCsrOwogCQkJZWxzZQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2tsb3crKzsKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2tsb3crKzsKIAkJCWFuaVN0YXRlLT5jY2tXZWFrU2lnVGhyZXNob2xkID0gaGlnaDsKIAkJfQogCQlicmVhazsKQEAgLTE2Nyw5ICsxNjIsOSBAQAogCQkJICAgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlNURVAsCiAJCQkgICAgICBmaXJzdGVwW2xldmVsXSk7CiAJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3RlcHVwKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwdXArKzsKIAkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQotCQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX3N0ZXBkb3duKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwZG93bisrOwogCQlhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID0gbGV2ZWw7CiAJCWJyZWFrOwogCX0KQEAgLTE5MCw5ICsxODUsOSBAQAogCQkJICAgICAgQVJfUEhZX1RJTUlORzVfQ1lDUFdSX1RIUjEsCiAJCQkgICAgICBjeWNwd3JUaHIxW2xldmVsXSk7CiAJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9zcHVydXArKzsKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX3NwdXJ1cCsrOwogCQllbHNlIGlmIChsZXZlbCA8IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9zcHVyZG93bisrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKIAkJYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsID0gbGV2ZWw7CiAJCWJyZWFrOwogCX0KQEAgLTIyMyw3ICsyMTgsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od191cGRhdGVfbWlic3RhdHMoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgc3RydWN0IGF0aDlrX21pYl9zdGF0cyAqc3RhdHMpCiB7CiAJc3RhdHMtPmFja3Jjdl9iYWQgKz0gUkVHX1JFQUQoYWgsIEFSX0FDS19GQUlMKTsKQEAgLTIzMywxOCArMjI4LDE3IEBACiAJc3RhdHMtPmJlYWNvbnMgKz0gUkVHX1JFQUQoYWgsIEFSX0JFQUNPTl9DTlQpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19hbmlfcmVzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19hbmlfcmVzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCiAJYW5pU3RhdGUtPmxpc3RlblRpbWUgPSAwOwotCWlmIChhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMpIHsKKwlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewogCQlpZiAoYW5pU3RhdGUtPm9mZG1UcmlnSGlnaCA+IEFSX1BIWV9DT1VOVE1BWCkgewogCQkJYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlID0gMDsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKQEAgLTI3MCwyNCArMjY0LDIyIEBACiAJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzEsIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogCi0JCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOwogCX0KIAlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gMDsKIAlhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKLQllbnVtIHdpcmVsZXNzX21vZGUgbW9kZTsKIAlpbnQzMl90IHJzc2k7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCiAJaWYgKGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwgPCBIQUxfTk9JU0VfSU1NVU5FX01BWCkgewogCQlpZiAoYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTCwKQEAgLTMwMywxNCArMjk1LDE0IEBACiAJCX0KIAl9CiAKLQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIDwgSEFMX0ZJUlNUX1NURVBfTUFYKSB7CiAJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwsCiAJCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCArIDEpOwogCQl9CiAJCXJldHVybjsKIAl9Ci0JcnNzaSA9IEJFQUNPTl9SU1NJKGFocCk7CisJcnNzaSA9IEJFQUNPTl9SU1NJKGFoKTsKIAlpZiAocnNzaSA+IGFuaVN0YXRlLT5yc3NpVGhySGlnaCkgewogCQlpZiAoIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikgewogCQkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLApAQCAtMzM2LDggKzMyOCw3IEBACiAJCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCArIDEpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKLQkJbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQlpZiAobW9kZSA9PSBBVEg5S19NT0RFXzExRyB8fCBtb2RlID09IEFUSDlLX01PREVfMTFCKSB7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJCWlmICghYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKQogCQkJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLAogCQkJCSAgICAgQVRIOUtfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OLApAQCAtMzUwLDM5ICszNDEsMzYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2Nja19lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKLQllbnVtIHdpcmVsZXNzX21vZGUgbW9kZTsKIAlpbnQzMl90IHJzc2k7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCWlmIChhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsIDwgSEFMX05PSVNFX0lNTVVORV9NQVgpIHsKIAkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsCiAJCQkJCSBhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsICsgMSkpIHsKIAkJCXJldHVybjsKIAkJfQogCX0KLQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIDwgSEFMX0ZJUlNUX1NURVBfTUFYKSB7CiAJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwsCiAJCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCArIDEpOwogCQl9CiAJCXJldHVybjsKIAl9Ci0JcnNzaSA9IEJFQUNPTl9SU1NJKGFocCk7CisJcnNzaSA9IEJFQUNPTl9SU1NJKGFoKTsKIAlpZiAocnNzaSA+IGFuaVN0YXRlLT5yc3NpVGhyTG93KSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIDwgSEFMX0ZJUlNUX1NURVBfTUFYKQogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAl9IGVsc2UgewotCQltb2RlID0gYXRoOWtfaHdfY2hhbjJ3bW9kZShhaCwgY2hhbik7Ci0JCWlmIChtb2RlID09IEFUSDlLX01PREVfMTFHIHx8IG1vZGUgPT0gQVRIOUtfTU9ERV8xMUIpIHsKKwkJaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewogCQkJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgPiAwKQogCQkJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLAogCQkJCQkgICAgIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLCAwKTsKQEAgLTM5MCwyMiArMzc4LDIxIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfbG93ZXJfaW1tdW5pdHkoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKIAlpbnQzMl90IHJzc2k7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAotCWlmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKIAkJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgPiAwKSB7CiAJCQlpZiAoYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkJIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgLSAxKSkKIAkJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UgewotCQlyc3NpID0gQkVBQ09OX1JTU0koYWhwKTsKKwkJcnNzaSA9IEJFQUNPTl9SU1NJKGFoKTsKIAkJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpIHsKIAkJCS8qIFhYWDogSGFuZGxlIG1lICovCiAJCX0gZWxzZSBpZiAocnNzaSA+IGFuaVN0YXRlLT5yc3NpVGhyTG93KSB7CkBAIC00NDQsOSArNDMxLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQzMl90IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludDMyX3QgYXRoOWtfaHdfYW5pX2dldF9saXN0ZW5fdGltZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJdTMyIHR4RnJhbWVDb3VudCwgcnhGcmFtZUNvdW50LCBjeWNsZUNvdW50OwogCWludDMyX3QgbGlzdGVuVGltZTsKQEAgLTQ1NSwxMSArNDQxLDExIEBACiAJcnhGcmFtZUNvdW50ID0gUkVHX1JFQUQoYWgsIEFSX1JGQ05UKTsKIAljeWNsZUNvdW50ID0gUkVHX1JFQUQoYWgsIEFSX0NDQ05UKTsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCWlmIChhbmlTdGF0ZS0+Y3ljbGVDb3VudCA9PSAwIHx8IGFuaVN0YXRlLT5jeWNsZUNvdW50ID4gY3ljbGVDb3VudCkgewogCiAJCWxpc3RlblRpbWUgPSAwOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbHplcm8rKzsKKwkJYWgtPnN0YXRzLmFzdF9hbmlfbHplcm8rKzsKIAl9IGVsc2UgewogCQlpbnQzMl90IGNjZGVsdGEgPSBjeWNsZUNvdW50IC0gYW5pU3RhdGUtPmN5Y2xlQ291bnQ7CiAJCWludDMyX3QgcmZkZWx0YSA9IHJ4RnJhbWVDb3VudCAtIGFuaVN0YXRlLT5yeEZyYW1lQ291bnQ7CkBAIC00NzMsMjUgKzQ1OSwyNCBAQAogCXJldHVybiBsaXN0ZW5UaW1lOwogfQogCi12b2lkIGF0aDlrX2FuaV9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2FuaV9yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOwogCWludCBpbmRleDsKIAogCWlmICghRE9fQU5JKGFoKSkKIAkJcmV0dXJuOwogCiAJaW5kZXggPSBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KGFoLCBjaGFuKTsKLQlhbmlTdGF0ZSA9ICZhaHAtPmFoX2FuaVtpbmRleF07Ci0JYWhwLT5haF9jdXJhbmkgPSBhbmlTdGF0ZTsKKwlhbmlTdGF0ZSA9ICZhaC0+YW5pW2luZGV4XTsKKwlhaC0+Y3VyYW5pID0gYW5pU3RhdGU7CiAKLQlpZiAoRE9fQU5JKGFoKSAmJiBhaC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04KLQkgICAgJiYgYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChET19BTkkoYWgpICYmIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTgorCSAgICAmJiBhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCSJSZXNldCBBTkkgc3RhdGUgb3Btb2RlICV1XG4iLCBhaC0+YWhfb3Btb2RlKTsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX3Jlc2V0Kys7CisJCQkiUmVzZXQgQU5JIHN0YXRlIG9wbW9kZSAldVxuIiwgYWgtPm9wbW9kZSk7CisJCWFoLT5zdGF0cy5hc3RfYW5pX3Jlc2V0Kys7CiAKIAkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTCwgMCk7CiAJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCwgMCk7CkBAIC01MDQsMTUgKzQ4OSwxNSBAQAogCQlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoYWgpIHwKIAkJCQkgICAgIEFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwogCi0JCWlmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQlhaHAtPmFoX2N1cmFuaS0+b2ZkbVRyaWdIaWdoID0KLQkJCQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19oaWdoOwotCQkJYWhwLT5haF9jdXJhbmktPm9mZG1UcmlnTG93ID0KLQkJCQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19sb3c7Ci0JCQlhaHAtPmFoX2N1cmFuaS0+Y2NrVHJpZ0hpZ2ggPQotCQkJCWFoLT5haF9jb25maWcuY2NrX3RyaWdfaGlnaDsKLQkJCWFocC0+YWhfY3VyYW5pLT5jY2tUcmlnTG93ID0KLQkJCQlhaC0+YWhfY29uZmlnLmNja190cmlnX2xvdzsKKwkJaWYgKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCWFoLT5jdXJhbmktPm9mZG1UcmlnSGlnaCA9CisJCQkJYWgtPmNvbmZpZy5vZmRtX3RyaWdfaGlnaDsKKwkJCWFoLT5jdXJhbmktPm9mZG1UcmlnTG93ID0KKwkJCQlhaC0+Y29uZmlnLm9mZG1fdHJpZ19sb3c7CisJCQlhaC0+Y3VyYW5pLT5jY2tUcmlnSGlnaCA9CisJCQkJYWgtPmNvbmZpZy5jY2tfdHJpZ19oaWdoOworCQkJYWgtPmN1cmFuaS0+Y2NrVHJpZ0xvdyA9CisJCQkJYWgtPmNvbmZpZy5jY2tfdHJpZ19sb3c7CiAJCX0KIAkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOwogCQlyZXR1cm47CkBAIC01MzMsNyArNTE4LDcgQEAKIAlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCAhPSAwKQogCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwsCiAJCQkJICAgICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKTsKLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoYWgsIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKGFoKSAmCiAJCQkJICAgICB+QVRIOUtfUlhfRklMVEVSX1BIWUVSUik7CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKQEAgLTU0NywzMSArNTMyLDMzIEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cywKIAkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCWludDMyX3QgbGlzdGVuVGltZTsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7Ci0JYWhwLT5haF9zdGF0cy5hc3Rfbm9kZXN0YXRzID0gKnN0YXRzOworCWlmICghRE9fQU5JKGFoKSkKKwkJcmV0dXJuOworCisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOworCWFoLT5zdGF0cy5hc3Rfbm9kZXN0YXRzID0gKnN0YXRzOwogCiAJbGlzdGVuVGltZSA9IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoYWgpOwogCWlmIChsaXN0ZW5UaW1lIDwgMCkgewotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbG5lZysrOworCQlhaC0+c3RhdHMuYXN0X2FuaV9sbmVnKys7CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKIAkJcmV0dXJuOwogCX0KIAogCWFuaVN0YXRlLT5saXN0ZW5UaW1lICs9IGxpc3RlblRpbWU7CiAKLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJdTMyIHBoeUNudDEsIHBoeUNudDI7CiAJCXUzMiBvZmRtUGh5RXJyQ250LCBjY2tQaHlFcnJDbnQ7CiAKLQkJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWhwLT5haF9taWJTdGF0cyk7CisJCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CiAKIAkJcGh5Q250MSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzEpOwogCQlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CkBAIC02MDQsMjcgKzU5MSwyNCBAQAogCQl9CiAKIAkJb2ZkbVBoeUVyckNudCA9IHBoeUNudDEgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2U7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9vZmRtZXJycyArPQorCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtZXJycyArPQogCQkJb2ZkbVBoeUVyckNudCAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQ7CiAJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSBvZmRtUGh5RXJyQ250OwogCiAJCWNja1BoeUVyckNudCA9IHBoeUNudDIgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZTsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KKwkJYWgtPnN0YXRzLmFzdF9hbmlfY2NrZXJycyArPQogCQkJY2NrUGh5RXJyQ250IC0gYW5pU3RhdGUtPmNja1BoeUVyckNvdW50OwogCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPSBjY2tQaHlFcnJDbnQ7CiAJfQogCi0JaWYgKCFET19BTkkoYWgpKQotCQlyZXR1cm47Ci0KLQlpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiA1ICogYWhwLT5haF9hbmlQZXJpb2QpIHsKKwlpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiA1ICogYWgtPmFuaXBlcmlvZCkgewogCQlpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA8PSBhbmlTdGF0ZS0+bGlzdGVuVGltZSAqCiAJCSAgICBhbmlTdGF0ZS0+b2ZkbVRyaWdMb3cgLyAxMDAwICYmCiAJCSAgICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPD0gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPmNja1RyaWdMb3cgLyAxMDAwKQogCQkJYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KGFoKTsKIAkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOwotCX0gZWxzZSBpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiBhaHAtPmFoX2FuaVBlcmlvZCkgeworCX0gZWxzZSBpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiBhaC0+YW5pcGVyaW9kKSB7CiAJCWlmIChhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID4gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPm9mZG1UcmlnSGlnaCAvIDEwMDApIHsKIAkJCWF0aDlrX2h3X2FuaV9vZmRtX2Vycl90cmlnZ2VyKGFoKTsKQEAgLTYzOCwyMCArNjIyLDE2IEBACiAJfQogfQogCi1ib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfcGh5Y291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCXJldHVybiBhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMgPyB0cnVlIDogZmFsc2U7CisJcmV0dXJuIGFoLT5oYXNfaHdfcGh5Y291bnRlcnMgPyB0cnVlIDogZmFsc2U7CiB9CiAKLXZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkVuYWJsZSBNSUIgY291bnRlcnNcbiIpOwogCi0JYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWhwLT5haF9taWJTdGF0cyk7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKIAogCVJFR19XUklURShhaCwgQVJfRklMVF9PRkRNLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfQ0NLLCAwKTsKQEAgLTY2MiwyMSArNjQyLDE4IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKIH0KIAotdm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCisvKiBGcmVlemUgdGhlIE1JQiBjb3VudGVycywgZ2V0IHRoZSBzdGF0cyBhbmQgdGhlbiBjbGVhciB0aGVtICovCit2b2lkIGF0aDlrX2h3X2Rpc2FibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJEaXNhYmxlIE1JQiBjb3VudGVyc1xuIik7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfRk1DIHwgQVJfTUlCQ19DTUMpOwotCi0JYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWhwLT5haF9taWJTdGF0cyk7Ci0KKwlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfRk1DKTsKKwlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCVJFR19XUklURShhaCwgQVJfTUlCQywgQVJfTUlCQ19DTUMpOwogCVJFR19XUklURShhaCwgQVJfRklMVF9PRkRNLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfQ0NLLCAwKTsKIH0KIAotdTMyIGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KHN0cnVjdCBhdGhfaGFsICphaCwKK3UzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHUzMiAqcnhjX3BjbnQsCiAJCQkJICB1MzIgKnJ4Zl9wY250LAogCQkJCSAgdTMyICp0eGZfcGNudCkKQEAgLTcyMSwxMCArNjk4LDkgQEAKICAqIGFueSBvZiB0aGUgTUlCIGNvdW50ZXJzIG92ZXJmbG93L3RyaWdnZXIgc28gZG9uJ3QgYXNzdW1lIHdlJ3JlCiAgKiBoZXJlIGJlY2F1c2UgYSBQSFkgZXJyb3IgY291bnRlciB0cmlnZ2VyZWQuCiAgKi8KLXZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIHBoeUNudDEsIHBoeUNudDI7CiAKIAkvKiBSZXNldCB0aGVzZSBjb3VudGVycyByZWdhcmRsZXNzICovCkBAIC03MzQsOCArNzEwLDggQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9TTFBfTUlCX0NUUkwsIEFSX1NMUF9NSUJfQ0xFQVIpOwogCiAJLyogQ2xlYXIgdGhlIG1pYiBjb3VudGVycyBhbmQgc2F2ZSB0aGVtIGluIHRoZSBzdGF0cyAqLwotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOwotCWFocC0+YWhfc3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKKwlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCWFoLT5zdGF0cy5hc3Rfbm9kZXN0YXRzID0gKnN0YXRzOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CkBAIC03NDUsMTcgKzcyMSwxNyBAQAogCXBoeUNudDIgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8yKTsKIAlpZiAoKChwaHlDbnQxICYgQVJfTUlCQ05UX0lOVFJNQVNLKSA9PSBBUl9NSUJDTlRfSU5UUk1BU0spIHx8CiAJICAgICgocGh5Q250MiAmIEFSX01JQkNOVF9JTlRSTUFTSykgPT0gQVJfTUlCQ05UX0lOVFJNQVNLKSkgewotCQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCQl1MzIgb2ZkbVBoeUVyckNudCwgY2NrUGh5RXJyQ250OwogCiAJCS8qIE5COiBvbmx5IHVzZSBhc3RfYW5pXyplcnJzIHdpdGggQUhfUFJJVkFURV9ESUFHICovCiAJCW9mZG1QaHlFcnJDbnQgPSBwaHlDbnQxIC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KKwkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KIAkJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OwogCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gb2ZkbVBoeUVyckNudDsKIAogCQljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KIAkJCWNja1BoeUVyckNudCAtIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OwogCkBAIC03NzQsOSArNzUwLDggQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAljb25zdCBpbnQgdG90YWxTaXplRGVzaXJlZFtdID0geyAtNTUsIC01NSwgLTU1LCAtNTUsIC02MiB9OwpAQCAtNzg1LDY2ICs3NjAsNjMgQEAKIAljb25zdCBpbnQgZmlycHdyW10gPSB7IC03OCwgLTc4LCAtNzgsIC03OCwgLTgwIH07CiAKIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxTaXplRGVzaXJlZFtpXSA9IHRvdGFsU2l6ZURlc2lyZWRbaV07Ci0JCWFocC0+YWhfY29hcnNlSGlnaFtpXSA9IGNvYXJzZUhpZ2hbaV07Ci0JCWFocC0+YWhfY29hcnNlTG93W2ldID0gY29hcnNlTG93W2ldOwotCQlhaHAtPmFoX2ZpcnB3cltpXSA9IGZpcnB3cltpXTsKKwkJYWgtPnRvdGFsU2l6ZURlc2lyZWRbaV0gPSB0b3RhbFNpemVEZXNpcmVkW2ldOworCQlhaC0+Y29hcnNlX2hpZ2hbaV0gPSBjb2Fyc2VIaWdoW2ldOworCQlhaC0+Y29hcnNlX2xvd1tpXSA9IGNvYXJzZUxvd1tpXTsKKwkJYWgtPmZpcnB3cltpXSA9IGZpcnB3cltpXTsKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9hdHRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkF0dGFjaCBBTklcbiIpOwogCi0JYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzID0gMTsKKwlhaC0+aGFzX2h3X3BoeWNvdW50ZXJzID0gMTsKIAotCW1lbXNldChhaHAtPmFoX2FuaSwgMCwgc2l6ZW9mKGFocC0+YWhfYW5pKSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWhwLT5haF9hbmkpOyBpKyspIHsKLQkJYWhwLT5haF9hbmlbaV0ub2ZkbVRyaWdIaWdoID0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOwotCQlhaHAtPmFoX2FuaVtpXS5vZmRtVHJpZ0xvdyA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XOwotCQlhaHAtPmFoX2FuaVtpXS5jY2tUcmlnSGlnaCA9IEFUSDlLX0FOSV9DQ0tfVFJJR19ISUdIOwotCQlhaHAtPmFoX2FuaVtpXS5jY2tUcmlnTG93ID0gQVRIOUtfQU5JX0NDS19UUklHX0xPVzsKLQkJYWhwLT5haF9hbmlbaV0ucnNzaVRockhpZ2ggPSBBVEg5S19BTklfUlNTSV9USFJfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0ucnNzaVRockxvdyA9IEFUSDlLX0FOSV9SU1NJX1RIUl9MT1c7Ci0JCWFocC0+YWhfYW5pW2ldLm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID0KKwltZW1zZXQoYWgtPmFuaSwgMCwgc2l6ZW9mKGFoLT5hbmkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaC0+YW5pKTsgaSsrKSB7CisJCWFoLT5hbmlbaV0ub2ZkbVRyaWdIaWdoID0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOworCQlhaC0+YW5pW2ldLm9mZG1UcmlnTG93ID0gQVRIOUtfQU5JX09GRE1fVFJJR19MT1c7CisJCWFoLT5hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKKwkJYWgtPmFuaVtpXS5jY2tUcmlnTG93ID0gQVRIOUtfQU5JX0NDS19UUklHX0xPVzsKKwkJYWgtPmFuaVtpXS5yc3NpVGhySGlnaCA9IEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIOworCQlhaC0+YW5pW2ldLnJzc2lUaHJMb3cgPSBBVEg5S19BTklfUlNTSV9USFJfTE9XOworCQlhaC0+YW5pW2ldLm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID0KIAkJCSFBVEg5S19BTklfVVNFX09GRE1fV0VBS19TSUc7Ci0JCWFocC0+YWhfYW5pW2ldLmNja1dlYWtTaWdUaHJlc2hvbGQgPQorCQlhaC0+YW5pW2ldLmNja1dlYWtTaWdUaHJlc2hvbGQgPQogCQkJQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFI7Ci0JCWFocC0+YWhfYW5pW2ldLnNwdXJJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTDsKLQkJYWhwLT5haF9hbmlbaV0uZmlyc3RlcExldmVsID0gQVRIOUtfQU5JX0ZJUlNURVBfTFZMOwotCQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7Ci0JCQlhaHAtPmFoX2FuaVtpXS5vZmRtUGh5RXJyQmFzZSA9CisJCWFoLT5hbmlbaV0uc3B1ckltbXVuaXR5TGV2ZWwgPSBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMOworCQlhaC0+YW5pW2ldLmZpcnN0ZXBMZXZlbCA9IEFUSDlLX0FOSV9GSVJTVEVQX0xWTDsKKwkJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKKwkJCWFoLT5hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPQogCQkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKLQkJCWFocC0+YWhfYW5pW2ldLmNja1BoeUVyckJhc2UgPQorCQkJYWgtPmFuaVtpXS5jY2tQaHlFcnJCYXNlID0KIAkJCQlBUl9QSFlfQ09VTlRNQVggLSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKIAkJfQogCX0KLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkJIlNldHRpbmcgT2ZkbUVyckJhc2UgPSAweCUwOHhcbiIsCi0JCQlhaHAtPmFoX2FuaVswXS5vZmRtUGh5RXJyQmFzZSk7CisJCQlhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLCAiU2V0dGluZyBjY2tFcnJCYXNlID0gMHglMDh4XG4iLAotCQkJYWhwLT5haF9hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisJCQlhaC0+YW5pWzBdLmNja1BoeUVyckJhc2UpOwogCi0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhaHAtPmFoX2FuaVswXS5vZmRtUGh5RXJyQmFzZSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCBhaHAtPmFoX2FuaVswXS5jY2tQaHlFcnJCYXNlKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIGFoLT5hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgYWgtPmFuaVswXS5jY2tQaHlFcnJCYXNlKTsKIAkJYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhhaCk7CiAJfQotCWFocC0+YWhfYW5pUGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKLQlpZiAoYWgtPmFoX2NvbmZpZy5lbmFibGVfYW5pKQotCQlhaHAtPmFoX3Byb2NQaHlFcnIgfD0gSEFMX1BST0NFU1NfQU5JOworCWFoLT5hbmlwZXJpb2QgPSBBVEg5S19BTklfUEVSSU9EOworCWlmIChhaC0+Y29uZmlnLmVuYWJsZV9hbmkpCisJCWFoLT5wcm9jX3BoeWVyciB8PSBIQUxfUFJPQ0VTU19BTkk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkRldGFjaCBBTklcbiIpOwogCi0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCWF0aDlrX2h3X2Rpc2FibGVfbWliX2NvdW50ZXJzKGFoKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTU3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEFOSV9ICisjZGVmaW5lIEFOSV9ICisKKyNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCisKKyNkZWZpbmUgRE9fQU5JKGFoKSAoKChhaCktPnByb2NfcGh5ZXJyICYgSEFMX1BST0NFU1NfQU5JKSkKKworI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkJCQkJCQlcCisJKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQorI2RlZmluZSBCRUFDT05fUlNTSShhaHApCQkJCQlcCisJSEFMX0VQX1JORChhaHAtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksCVwKKwkJICAgQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQorCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKKyNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAorI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKKyNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKKyNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCisjZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3CisjZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCisjZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAorI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNworI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICAgIDQKKyNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSEFMX0ZJUlNUX1NURVBfTUFYICAgICAgICAgICAgICAgIDIKKworZW51bSBhdGg5a19hbmlfY21kIHsKKwlBVEg5S19BTklfUFJFU0VOVCA9IDB4MSwKKwlBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwgPSAweDIsCisJQVRIOUtfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OID0gMHg0LAorCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdOQUxfVEhSID0gMHg4LAorCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMID0gMHgxMCwKKwlBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCA9IDB4MjAsCisJQVRIOUtfQU5JX01PREUgPSAweDQwLAorCUFUSDlLX0FOSV9QSFlFUlJfUkVTRVQgPSAweDgwLAorCUFUSDlLX0FOSV9BTEwgPSAweGZmCit9OworCitzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIHsKKwl1MzIgYWNrcmN2X2JhZDsKKwl1MzIgcnRzX2JhZDsKKwl1MzIgcnRzX2dvb2Q7CisJdTMyIGZjc19iYWQ7CisJdTMyIGJlYWNvbnM7Cit9OworCitzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyB7CisJdTMyIG5zX2F2Z2Jyc3NpOworCXUzMiBuc19hdmdyc3NpOworCXUzMiBuc19hdmd0eHJzc2k7CisJdTMyIG5zX2F2Z3R4cmF0ZTsKK307CisKK3N0cnVjdCBhcjU0MTZBbmlTdGF0ZSB7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7CisJdTggbm9pc2VJbW11bml0eUxldmVsOworCXU4IHNwdXJJbW11bml0eUxldmVsOworCXU4IGZpcnN0ZXBMZXZlbDsKKwl1OCBvZmRtV2Vha1NpZ0RldGVjdE9mZjsKKwl1OCBjY2tXZWFrU2lnVGhyZXNob2xkOworCXUzMiBsaXN0ZW5UaW1lOworCXUzMiBvZmRtVHJpZ0hpZ2g7CisJdTMyIG9mZG1UcmlnTG93OworCWludDMyX3QgY2NrVHJpZ0hpZ2g7CisJaW50MzJfdCBjY2tUcmlnTG93OworCWludDMyX3QgcnNzaVRockxvdzsKKwlpbnQzMl90IHJzc2lUaHJIaWdoOworCXUzMiBub2lzZUZsb29yOworCXUzMiB0eEZyYW1lQ291bnQ7CisJdTMyIHJ4RnJhbWVDb3VudDsKKwl1MzIgY3ljbGVDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckNvdW50OworCXUzMiBjY2tQaHlFcnJDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckJhc2U7CisJdTMyIGNja1BoeUVyckJhc2U7CisJaW50MTZfdCBwa3RSc3NpWzJdOworCWludDE2X3Qgb2ZkbUVyclJzc2lbMl07CisJaW50MTZfdCBjY2tFcnJSc3NpWzJdOworfTsKKworc3RydWN0IGFyNTQxNlN0YXRzIHsKKwl1MzIgYXN0X2FuaV9uaXVwOworCXUzMiBhc3RfYW5pX25pZG93bjsKKwl1MzIgYXN0X2FuaV9zcHVydXA7CisJdTMyIGFzdF9hbmlfc3B1cmRvd247CisJdTMyIGFzdF9hbmlfb2ZkbW9uOworCXUzMiBhc3RfYW5pX29mZG1vZmY7CisJdTMyIGFzdF9hbmlfY2NraGlnaDsKKwl1MzIgYXN0X2FuaV9jY2tsb3c7CisJdTMyIGFzdF9hbmlfc3RlcHVwOworCXUzMiBhc3RfYW5pX3N0ZXBkb3duOworCXUzMiBhc3RfYW5pX29mZG1lcnJzOworCXUzMiBhc3RfYW5pX2Nja2VycnM7CisJdTMyIGFzdF9hbmlfcmVzZXQ7CisJdTMyIGFzdF9hbmlfbHplcm87CisJdTMyIGFzdF9hbmlfbG5lZzsKKwlzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIGFzdF9taWJzdGF0czsKKwlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBhc3Rfbm9kZXN0YXRzOworfTsKKyNkZWZpbmUgYWhfbWliU3RhdHMgc3RhdHMuYXN0X21pYnN0YXRzCisKK3ZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9odyAqYWgsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cywKKwkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqcnhjX3BjbnQsCisJCQkJICB1MzIgKnJ4Zl9wY250LCB1MzIgKnR4Zl9wY250KTsKK3ZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworCisjZW5kaWYgLyogQU5JX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCmluZGV4IDY2NTBmNjAuLmI2NGJlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYXRoOWsuaApAQCAtMTcsMTA0MSArMTcsNzQ0IEBACiAjaWZuZGVmIEFUSDlLX0gKICNkZWZpbmUgQVRIOUtfSAogCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KIAotI2RlZmluZSBBVEhFUk9TX1ZFTkRPUl9JRAkweDE2OGMKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInJjLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKIAotI2RlZmluZSBBUjU0MTZfREVWSURfUENJCTB4MDAyMwotI2RlZmluZSBBUjU0MTZfREVWSURfUENJRQkweDAwMjQKLSNkZWZpbmUgQVI5MTYwX0RFVklEX1BDSQkweDAwMjcKLSNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSQkweDAwMjkKLSNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSUUJMHgwMDJhCi0jZGVmaW5lIEFSOTI4NV9ERVZJRF9QQ0lFCTB4MDAyYgorc3RydWN0IGF0aF9ub2RlOwogCi0jZGVmaW5lIEFSNTQxNl9BUjkxMDBfREVWSUQJMHgwMDBiCisvKiBNYWNybyB0byBleHBhbmQgc2NhbGFycyB0byA2NC1iaXQgb2JqZWN0cyAqLwogCi0jZGVmaW5lCUFSX1NVQlZFTkRPUl9JRF9OT0cJMHgwZTExCi0jZGVmaW5lIEFSX1NVQlZFTkRPUl9JRF9ORVdfQQkweDcwNjUKKyNkZWZpbmUJaXRvNjQoeCkgKHNpemVvZih4KSA9PSA4KSA/CQkJXAorCSgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmICgweGZmKSkgOglcCisJKHNpemVvZih4KSA9PSAxNikgPwkJCQlcCisJKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgMHhmZmZmKSA6CVwKKwkoKHNpemVvZih4KSA9PSAzMikgPwkJCQlcCisJICgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmIDB4ZmZmZmZmZmYpIDogXAorCSAodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpCiAKLSNkZWZpbmUgQVRIOUtfVFhFUlJfWFJFVFJZICAgICAgICAgMHgwMQotI2RlZmluZSBBVEg5S19UWEVSUl9GSUxUICAgICAgICAgICAweDAyCi0jZGVmaW5lIEFUSDlLX1RYRVJSX0ZJRk8gICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRIOUtfVFhFUlJfWFRYT1AgICAgICAgICAgMHgwOAotI2RlZmluZSBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEICAweDEwCisvKiBpbmNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLworI2RlZmluZSBJTkNSKF9sLCBfc3opICAgZG8gewkJCVwKKwkJKF9sKSsrOwkJCQlcCisJCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCisJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBBVEg5S19UWF9CQSAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1RYX1BXUk1HTVQgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQVRIOUtfVFhfREVTQ19DRkdfRVJSICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19UWF9EQVRBX1VOREVSUlVOICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1RYX0RFTElNX1VOREVSUlVOICAgIDB4MTAKLSNkZWZpbmUgQVRIOUtfVFhfU1dfQUJPUlRFRCAgICAgICAgMHg0MAotI2RlZmluZSBBVEg5S19UWF9TV19GSUxURVJFRCAgICAgICAweDgwCisvKiBkZWNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLworI2RlZmluZSBERUNSKF9sLCAgX3N6KSAgZG8gewkJCVwKKwkJKF9sKS0tOwkJCQlcCisJCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCisJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBOQkJZICAgIDgKKyNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKIAotc3RydWN0IGF0aF90eF9zdGF0dXMgewotCXUzMiB0c190c3RhbXA7Ci0JdTE2IHRzX3NlcW51bTsKLQl1OCB0c19zdGF0dXM7Ci0JdTggdHNfcmF0ZWNvZGU7Ci0JdTggdHNfcmF0ZWluZGV4OwotCWludDhfdCB0c19yc3NpOwotCXU4IHRzX3Nob3J0cmV0cnk7Ci0JdTggdHNfbG9uZ3JldHJ5OwotCXU4IHRzX3ZpcnRjb2w7Ci0JdTggdHNfYW50ZW5uYTsKLQl1OCB0c19mbGFnczsKLQlpbnQ4X3QgdHNfcnNzaV9jdGwwOwotCWludDhfdCB0c19yc3NpX2N0bDE7Ci0JaW50OF90IHRzX3Jzc2lfY3RsMjsKLQlpbnQ4X3QgdHNfcnNzaV9leHQwOwotCWludDhfdCB0c19yc3NpX2V4dDE7Ci0JaW50OF90IHRzX3Jzc2lfZXh0MjsKLQl1OCBwYWRbM107Ci0JdTMyIGJhX2xvdzsKLQl1MzIgYmFfaGlnaDsKLQl1MzIgZXZtMDsKLQl1MzIgZXZtMTsKLQl1MzIgZXZtMjsKKyNkZWZpbmUgQVNTRVJUKGV4cCkgZG8gewkJCVwKKwkJaWYgKHVubGlrZWx5KCEoZXhwKSkpIHsJCVwKKwkJCUJVRygpOwkJCVwKKwkJfQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBUU0ZfVE9fVFUoX2gsX2wpIFwKKwkoKCgodTMyKShfaCkpIDw8IDIyKSB8ICgoKHUzMikoX2wpKSA+PiAxMCkpCisKKyNkZWZpbmUJQVRIX1RYUV9TRVRVUChzYywgaSkgICAgICAgICgoc2MpLT50eC50eHFzZXR1cCAmICgxPDxpKSkKKworc3RhdGljIGNvbnN0IHU4IGF0aF9iY2FzdF9tYWNbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCitzdHJ1Y3QgYXRoX2NvbmZpZyB7CisJdTMyIGF0aF9hZ2dyX3Byb3Q7CisJdTE2IHR4cG93bGltaXQ7CisJdTggY2FicVJlYWR5dGltZTsKKwl1OCBzd0JlYWNvblByb2Nlc3M7CiB9OwogCi1zdHJ1Y3QgYXRoX3J4X3N0YXR1cyB7Ci0JdTMyIHJzX3RzdGFtcDsKLQl1MTYgcnNfZGF0YWxlbjsKLQl1OCByc19zdGF0dXM7Ci0JdTggcnNfcGh5ZXJyOwotCWludDhfdCByc19yc3NpOwotCXU4IHJzX2tleWl4OwotCXU4IHJzX3JhdGU7Ci0JdTggcnNfYW50ZW5uYTsKLQl1OCByc19tb3JlOwotCWludDhfdCByc19yc3NpX2N0bDA7Ci0JaW50OF90IHJzX3Jzc2lfY3RsMTsKLQlpbnQ4X3QgcnNfcnNzaV9jdGwyOwotCWludDhfdCByc19yc3NpX2V4dDA7Ci0JaW50OF90IHJzX3Jzc2lfZXh0MTsKLQlpbnQ4X3QgcnNfcnNzaV9leHQyOwotCXU4IHJzX2lzYWdncjsKLQl1OCByc19tb3JlYWdncjsKLQl1OCByc19udW1fZGVsaW1zOwotCXU4IHJzX2ZsYWdzOwotCXUzMiBldm0wOwotCXUzMiBldm0xOwotCXUzMiBldm0yOworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXNjcmlwdG9yIE1hbmFnZW1lbnQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9UWEJVRl9SRVNFVChfYmYpIGRvIHsJCQkJXAorCQkoX2JmKS0+YmZfc3RhdHVzID0gMDsJCQkJXAorCQkoX2JmKS0+YmZfbGFzdGJmID0gTlVMTDsJCQlcCisJCShfYmYpLT5iZl9uZXh0ID0gTlVMTDsJCQkJXAorCQltZW1zZXQoJigoX2JmKS0+YmZfc3RhdGUpLCAwLAkJCVwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSkpOwkJXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogZW51bSBidWZmZXJfdHlwZSAtIEJ1ZmZlciB0eXBlIGZsYWdzCisgKgorICogQEJVRl9IVDogU2VuZCB0aGlzIGJ1ZmZlciB1c2luZyBIVCBjYXBhYmlsaXRpZXMKKyAqIEBCVUZfQU1QRFU6IFRoaXMgYnVmZmVyIGlzIGFuIGFtcGR1LCBhcyBwYXJ0IG9mIGFuIGFnZ3JlZ2F0ZSAoZHVyaW5nIFRYKQorICogQEJVRl9BR0dSOiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVmZmVyIGNhbiBiZSBhZ2dyZWdhdGVkCisgKgkodXNlZCBpbiBhZ2dyZWdhdGlvbiBzY2hlZHVsaW5nKQorICogQEJVRl9SRVRSWTogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyByZXRyaWVkCisgKiBAQlVGX1hSRVRSWTogVG8gZGVub3RlIGV4Y2Vzc2l2ZSByZXRyaWVzIG9mIHRoZSBidWZmZXIKKyAqLworZW51bSBidWZmZXJfdHlwZSB7CisJQlVGX0hUCQkJPSBCSVQoMSksCisJQlVGX0FNUERVCQk9IEJJVCgyKSwKKwlCVUZfQUdHUgkJPSBCSVQoMyksCisJQlVGX1JFVFJZCQk9IEJJVCg0KSwKKwlCVUZfWFJFVFJZCQk9IEJJVCg1KSwKIH07CiAKLSNkZWZpbmUgQVRIOUtfUlhFUlJfQ1JDICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1JYRVJSX1BIWSAgICAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19SWEVSUl9GSUZPICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRIOUtfUlhFUlJfREVDUllQVCAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1JYRVJSX01JQyAgICAgICAgICAgMHgxMAotCi0jZGVmaW5lIEFUSDlLX1JYX01PUkUgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBBVEg5S19SWF9NT1JFX0FHR1IgICAgICAgIDB4MDIKLSNkZWZpbmUgQVRIOUtfUlhfR0kgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFUSDlLX1JYXzIwNDAgICAgICAgICAgICAgMHgwOAotI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUFJFICAgIDB4MTAKLSNkZWZpbmUgQVRIOUtfUlhfREVMSU1fQ1JDX1BPU1QgICAweDIwCi0jZGVmaW5lIEFUSDlLX1JYX0RFQ1JZUFRfQlVTWSAgICAgMHg0MAotCi0jZGVmaW5lIEFUSDlLX1JYS0VZSVhfSU5WQUxJRAkoKHU4KS0xKQotI2RlZmluZSBBVEg5S19UWEtFWUlYX0lOVkFMSUQJKCh1MzIpLTEpCi0KLXN0cnVjdCBhdGhfZGVzYyB7Ci0JdTMyIGRzX2xpbms7Ci0JdTMyIGRzX2RhdGE7Ci0JdTMyIGRzX2N0bDA7Ci0JdTMyIGRzX2N0bDE7Ci0JdTMyIGRzX2h3WzIwXTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OwotCQlzdHJ1Y3QgYXRoX3J4X3N0YXR1cyByeDsKLQkJdm9pZCAqc3RhdHM7Ci0JfSBkc191czsKLQl2b2lkICpkc192ZGF0YTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUJZHNfdHhzdGF0CWRzX3VzLnR4Ci0jZGVmaW5lCWRzX3J4c3RhdAlkc191cy5yeAotI2RlZmluZSBkc19zdGF0CQlkc191cy5zdGF0cwotCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19DTFJETUFTSwkJMHgwMDAxCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19OT0FDSwkJMHgwMDAyCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19SVFNFTkEJCTB4MDAwNAotI2RlZmluZSBBVEg5S19UWERFU0NfQ1RTRU5BCQkweDAwMDgKLS8qIEFUSDlLX1RYREVTQ19JTlRSRVEgZm9yY2VzIGEgdHggaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZCBmb3IKLSAqIHRoZSBkZXNjcmlwdG9yIGl0cyBtYXJrZWQgb24uICBXZSB0YWtlIGEgdHggaW50ZXJydXB0IHRvIHJlYXAKLSAqIGRlc2NyaXB0b3JzIHdoZW4gdGhlIGgvdyBoaXRzIGFuIEVPTCBjb25kaXRpb24gb3IKLSAqIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgc3BlY2lmaWNhbGx5IG1hcmtlZCB0byBnZW5lcmF0ZQotICogYW4gaW50ZXJydXB0IHdpdGggdGhpcyBmbGFnLiBEZXNjcmlwdG9ycyBzaG91bGQgYmUKLSAqIG1hcmtlZCBwZXJpb2RpY2FsbHkgdG8gaW5zdXJlIHRpbWVseSByZXBsZW5pc2hpbmcgb2YgdGhlCi0gKiBzdXBwbHkgbmVlZGVkIGZvciBzZW5kaW5nIGZyYW1lcy4gRGVmZXJpbmcgaW50ZXJydXB0cwotICogcmVkdWNlcyBzeXN0ZW0gbG9hZCBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIG1vcmUgY29uY3VycmVudAotICogd29yayB0byBiZSBkb25lIGJ1dCBpZiBkb25lIHRvIGFnZ3Jlc3NpdmVseSBjYW4gY2F1c2UKLSAqIHNlbmRlcnMgdG8gYmFja3VwLiBXaGVuIHRoZSBoYXJkd2FyZSBxdWV1ZSBpcyBsZWZ0IHRvbwotICogbGFyZ2UgcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIG1heSBhbHNvIGJlIHRvbyBvdXQgb2YKLSAqIGRhdGUuIEFuIEFsdGVybmF0aXZlIGZvciB0aGlzIGlzIFRYIGludGVycnVwdCBtaXRpZ2F0aW9uCi0gKiBidXQgdGhpcyBuZWVkcyBtb3JlIHRlc3RpbmcuICovCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19JTlRSRVEJCTB4MDAxMAotI2RlZmluZSBBVEg5S19UWERFU0NfVkVPTAkJMHgwMDIwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfT05MWQkJMHgwMDQwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfQU5EX0NUTAkweDAwODAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX1ZNRgkJMHgwMTAwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19GUkFHX0lTX09OIAkweDAyMDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0NBQgkJMHgwNDAwCi0KLSNkZWZpbmUgQVRIOUtfUlhERVNDX0lOVFJFUQkJMHgwMDIwCi0KLWVudW0gd2lyZWxlc3NfbW9kZSB7Ci0JQVRIOUtfTU9ERV8xMUEgPSAwLAotCUFUSDlLX01PREVfMTFCID0gMiwKLQlBVEg5S19NT0RFXzExRyA9IDMsCi0JQVRIOUtfTU9ERV8xMU5BX0hUMjAgPSA2LAotCUFUSDlLX01PREVfMTFOR19IVDIwID0gNywKLQlBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVMgPSA4LAotCUFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMgPSA5LAotCUFUSDlLX01PREVfMTFOR19IVDQwUExVUyA9IDEwLAotCUFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMgPSAxMSwKLQlBVEg5S19NT0RFX01BWAorc3RydWN0IGF0aF9idWZfc3RhdGUgeworCWludCBiZnNfbmZyYW1lczsKKwl1MTYgYmZzX2FsOworCXUxNiBiZnNfZnJtbGVuOworCWludCBiZnNfc2Vxbm87CisJaW50IGJmc190aWRubzsKKwlpbnQgYmZzX3JldHJpZXM7CisJdTMyIGJmX3R5cGU7CisJdTMyIGJmc19rZXlpeDsKKwllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwogfTsKIAotZW51bSBhdGg5a19od19jYXBzIHsKLQlBVEg5S19IV19DQVBfQ0hBTl9TUFJFQUQJCT0gQklUKDApLAotCUFUSDlLX0hXX0NBUF9NSUNfQUVTQ0NNICAgICAgICAgICAgICAgICA9IEJJVCgxKSwKLQlBVEg5S19IV19DQVBfTUlDX0NLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMiksCi0JQVRIOUtfSFdfQ0FQX01JQ19US0lQICAgICAgICAgICAgICAgICAgID0gQklUKDMpLAotCUFUSDlLX0hXX0NBUF9DSVBIRVJfQUVTQ0NNICAgICAgICAgICAgICA9IEJJVCg0KSwKLQlBVEg5S19IV19DQVBfQ0lQSEVSX0NLSVAgICAgICAgICAgICAgICAgPSBCSVQoNSksCi0JQVRIOUtfSFdfQ0FQX0NJUEhFUl9US0lQICAgICAgICAgICAgICAgID0gQklUKDYpLAotCUFUSDlLX0hXX0NBUF9WRU9MICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCg3KSwKLQlBVEg5S19IV19DQVBfQlNTSURNQVNLICAgICAgICAgICAgICAgICAgPSBCSVQoOCksCi0JQVRIOUtfSFdfQ0FQX01DQVNUX0tFWVNFQVJDSCAgICAgICAgICAgID0gQklUKDkpLAotCUFUSDlLX0hXX0NBUF9DSEFOX0hBTEZSQVRFICAgICAgICAgICAgICA9IEJJVCgxMCksCi0JQVRIOUtfSFdfQ0FQX0NIQU5fUVVBUlRFUlJBVEUgICAgICAgICAgID0gQklUKDExKSwKLQlBVEg5S19IV19DQVBfSFQgICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTIpLAotCUFUSDlLX0hXX0NBUF9HVFQgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMyksCi0JQVRIOUtfSFdfQ0FQX0ZBU1RDQyAgICAgICAgICAgICAgICAgICAgID0gQklUKDE0KSwKLQlBVEg5S19IV19DQVBfUkZTSUxFTlQgICAgICAgICAgICAgICAgICAgPSBCSVQoMTUpLAotCUFUSDlLX0hXX0NBUF9XT1cgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxNiksCi0JQVRIOUtfSFdfQ0FQX0NTVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE3KSwKLQlBVEg5S19IV19DQVBfRU5IQU5DRURQTSAgICAgICAgICAgICAgICAgPSBCSVQoMTgpLAotCUFUSDlLX0hXX0NBUF9BVVRPU0xFRVAgICAgICAgICAgICAgICAgICA9IEJJVCgxOSksCi0JQVRIOUtfSFdfQ0FQXzRLQl9TUExJVFRSQU5TICAgICAgICAgICAgID0gQklUKDIwKSwKLQlBVEg5S19IV19DQVBfV09XX01BVENIUEFUVEVSTl9FWEFDVCAgICAgPSBCSVQoMjEpLAorI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCisjZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCisjZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgorI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCisjZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCisjZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCisjZGVmaW5lIGJmX2tleWl4ICAgICAgICAgICAgICAgIGJmX3N0YXRlLmJmc19rZXlpeAorI2RlZmluZSBiZl9rZXl0eXBlICAgICAgCWJmX3N0YXRlLmJmc19rZXl0eXBlCisjZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCisjZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCisjZGVmaW5lIGJmX2lzYWdncihiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9BR0dSKQorI2RlZmluZSBiZl9pc3JldHJpZWQoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9SRVRSWSkKKyNkZWZpbmUgYmZfaXN4cmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1hSRVRSWSkKKworc3RydWN0IGF0aF9idWYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKKwkJCQkJICAgYW4gYWdncmVnYXRlKSAqLworCXN0cnVjdCBhdGhfYnVmICpiZl9uZXh0OwkvKiBuZXh0IHN1YmZyYW1lIGluIHRoZSBhZ2dyZWdhdGUgKi8KKwl2b2lkICpiZl9tcGR1OwkJCS8qIGVuY2xvc2luZyBmcmFtZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgYXRoX2Rlc2MgKmJmX2Rlc2M7CS8qIHZpcnR1YWwgYWRkciBvZiBkZXNjICovCisJZG1hX2FkZHJfdCBiZl9kYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGVzYyAqLworCWRtYV9hZGRyX3QgYmZfYnVmX2FkZHI7CQkvKiBwaHlzaWNhbCBhZGRyIG9mIGRhdGEgYnVmZmVyICovCisJdTMyIGJmX3N0YXR1czsKKwl1MTYgYmZfZmxhZ3M7CisJc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CisJZG1hX2FkZHJfdCBiZl9kbWFjb250ZXh0OwogfTsKIAotZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgewotCUFUSDlLX0NBUF9DSVBIRVIgPSAwLAotCUFUSDlLX0NBUF9US0lQX01JQywKLQlBVEg5S19DQVBfVEtJUF9TUExJVCwKLQlBVEg5S19DQVBfUEhZQ09VTlRFUlMsCi0JQVRIOUtfQ0FQX0RJVkVSU0lUWSwKLQlBVEg5S19DQVBfVFhQT1csCi0JQVRIOUtfQ0FQX1BIWURJQUcsCi0JQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsCi0JQVRIOUtfQ0FQX1RTRl9BREpVU1QsCi0JQVRIOUtfQ0FQX1dNRV9US0lQTUlDLAotCUFUSDlLX0NBUF9SRlNJTEVOVCwKLQlBVEg5S19DQVBfQU5UX0NGR18yR0haLAotCUFUSDlLX0NBUF9BTlRfQ0ZHXzVHSFoKKyNkZWZpbmUgQVRIX1JYQlVGX1JFU0VUKF9iZikgICAgKChfYmYpLT5iZl9zdGF0dXMgPSAwKQorI2RlZmluZSBBVEhfQlVGU1RBVFVTX1NUQUxFICAgICAweDAwMDAwMDAyCisKK3N0cnVjdCBhdGhfZGVzY2RtYSB7CisJY29uc3QgY2hhciAqZGRfbmFtZTsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRkX2Rlc2M7CisJZG1hX2FkZHJfdCBkZF9kZXNjX3BhZGRyOworCXUzMiBkZF9kZXNjX2xlbjsKKwlzdHJ1Y3QgYXRoX2J1ZiAqZGRfYnVmcHRyOworCWRtYV9hZGRyX3QgZGRfZG1hY29udGV4dDsKIH07CiAKLXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgewotCXUzMiBod19jYXBzOyAvKiBBVEg5S19IV19DQVBfKiBmcm9tIGF0aDlrX2h3X2NhcHMgKi8KLQlERUNMQVJFX0JJVE1BUCh3aXJlbGVzc19tb2RlcywgQVRIOUtfTU9ERV9NQVgpOyAvKiBBVEg5S19NT0RFXyogKi8KLQl1MTYgdG90YWxfcXVldWVzOwotCXUxNiBrZXljYWNoZV9zaXplOwotCXUxNiBsb3dfNWdoel9jaGFuLCBoaWdoXzVnaHpfY2hhbjsKLQl1MTYgbG93XzJnaHpfY2hhbiwgaGlnaF8yZ2h6X2NoYW47Ci0JdTE2IG51bV9tcl9yZXRyaWVzOwotCXUxNiBydHNfYWdncl9saW1pdDsKK2ludCBhdGhfZGVzY2RtYV9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKKwkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgaW50IG5idWYsIGludCBuZGVzYyk7Cit2b2lkIGF0aF9kZXNjZG1hX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CisKKy8qKioqKioqKioqKi8KKy8qIFJYIC8gVFggKi8KKy8qKioqKioqKioqKi8KKworI2RlZmluZSBBVEhfTUFYX0FOVEVOTkEgICAgICAgICAzCisjZGVmaW5lIEFUSF9SWEJVRiAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBXTUVfTlVNX1RJRCAgICAgICAgICAgICAxNgorI2RlZmluZSBBVEhfVFhCVUYgICAgICAgICAgICAgICA1MTIKKyNkZWZpbmUgQVRIX1RYTUFYVFJZICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVRIXzExTl9UWE1BWFRSWSAgICAgICAgMTAKKyNkZWZpbmUgQVRIX01HVF9UWE1BWFRSWSAgICAgICAgNAorI2RlZmluZSBXTUVfQkFfQk1QX1NJWkUgICAgICAgICA2NAorI2RlZmluZSBXTUVfTUFYX0JBICAgICAgICAgICAgICBXTUVfQkFfQk1QX1NJWkUKKyNkZWZpbmUgQVRIX1RJRF9NQVhfQlVGUyAgICAgICAgKDIgKiBXTUVfTUFYX0JBKQorCisjZGVmaW5lIFRJRF9UT19XTUVfQUMoX3RpZCkJCQkJXAorCSgoKChfdGlkKSA9PSAwKSB8fCAoKF90aWQpID09IDMpKSA/IFdNRV9BQ19CRSA6CVwKKwkgKCgoX3RpZCkgPT0gMSkgfHwgKChfdGlkKSA9PSAyKSkgPyBXTUVfQUNfQksgOglcCisJICgoKF90aWQpID09IDQpIHx8ICgoX3RpZCkgPT0gNSkpID8gV01FX0FDX1ZJIDoJXAorCSBXTUVfQUNfVk8pCisKKyNkZWZpbmUgV01FX0FDX0JFICAgMAorI2RlZmluZSBXTUVfQUNfQksgICAxCisjZGVmaW5lIFdNRV9BQ19WSSAgIDIKKyNkZWZpbmUgV01FX0FDX1ZPICAgMworI2RlZmluZSBXTUVfTlVNX0FDICA0CisKKyNkZWZpbmUgQUREQkFfRVhDSEFOR0VfQVRURU1QVFMgICAgMTAKKyNkZWZpbmUgQVRIX0FHR1JfREVMSU1fU1ogICAgICAgICAgNAorI2RlZmluZSBBVEhfQUdHUl9NSU5QTEVOICAgICAgICAgICAyNTYgLyogaW4gYnl0ZXMsIG1pbmltdW0gcGFja2V0IGxlbmd0aCAqLworLyogbnVtYmVyIG9mIGRlbGltaXRlcnMgZm9yIGVuY3J5cHRpb24gcGFkZGluZyAqLworI2RlZmluZSBBVEhfQUdHUl9FTkNSWVBUREVMSU0gICAgICAxMAorLyogbWluaW11bSBoL3cgcWRlcHRoIHRvIGJlIHN1c3RhaW5lZCB0byBtYXhpbWl6ZSBhZ2dyZWdhdGlvbiAqLworI2RlZmluZSBBVEhfQUdHUl9NSU5fUURFUFRIICAgICAgICAyCisjZGVmaW5lIEFUSF9BTVBEVV9TVUJGUkFNRV9ERUZBVUxUIDMyCisjZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9NQVggICAgICAgICg2NCAqIDEwMjQgLSAxKQorI2RlZmluZSBBVEhfQU1QRFVfTElNSVRfREVGQVVMVCAgICBBVEhfQU1QRFVfTElNSVRfTUFYCisKKyNkZWZpbmUgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQgICAgNAorI2RlZmluZSBJRUVFODAyMTFfU0VRX01BWCAgICAgICAgICA0MDk2CisjZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGICAgIDB4OAorI2RlZmluZSBJRUVFODAyMTFfSFRDQVBfTUFYUlhBTVBEVV9GQUNUT1IgMTMKKyNkZWZpbmUgSUVFRTgwMjExX1dFUF9JVkxFTiAgICAgICAgMworI2RlZmluZSBJRUVFODAyMTFfV0VQX0tJRExFTiAgICAgICAxCisjZGVmaW5lIElFRUU4MDIxMV9XRVBfQ1JDTEVOICAgICAgIDQKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9NUERVX0xFTiAgICAgKDM4NDAgKyBGQ1NfTEVOICsJCVwKKwkJCQkgICAgKElFRUU4MDIxMV9XRVBfSVZMRU4gKwlcCisJCQkJICAgICBJRUVFODAyMTFfV0VQX0tJRExFTiArCVwKKwkJCQkgICAgIElFRUU4MDIxMV9XRVBfQ1JDTEVOKSkKKworLyogcmV0dXJuIHdoZXRoZXIgYSBiaXQgYXQgaW5kZXggX24gaW4gYml0bWFwIF9ibSBpcyBzZXQKKyAqIF9zeiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwICAqLworI2RlZmluZSBBVEhfQkFfSVNTRVQoX2JtLCBfbikgICgoKF9uKSA8IChXTUVfQkFfQk1QX1NJWkUpKSAmJgkJXAorCQkJCSgoX2JtKVsoX24pID4+IDVdICYgKDEgPDwgKChfbikgJiAzMSkpKSkKKworLyogcmV0dXJuIGJsb2NrLWFjayBiaXRtYXAgaW5kZXggZ2l2ZW4gc2VxdWVuY2UgYW5kIHN0YXJ0aW5nIHNlcXVlbmNlICovCisjZGVmaW5lIEFUSF9CQV9JTkRFWChfc3QsIF9zZXEpICgoKF9zZXEpIC0gKF9zdCkpICYgKElFRUU4MDIxMV9TRVFfTUFYIC0gMSkpCisKKy8qIHJldHVybnMgZGVsaW1pdGVyIHBhZGRpbmcgcmVxdWlyZWQgZ2l2ZW4gdGhlIHBhY2tldCBsZW5ndGggKi8KKyNkZWZpbmUgQVRIX0FHR1JfR0VUX05ERUxJTShfbGVuKQkJCQkJXAorCSgoKCgoX2xlbikgKyBBVEhfQUdHUl9ERUxJTV9TWikgPCBBVEhfQUdHUl9NSU5QTEVOKSA/ICAgICAgICAgICBcCisJICAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSAtIEFUSF9BR0dSX0RFTElNX1NaKSA6IDApID4+IDIpCisKKyNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCisJKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiA0MDk1KSA8IChfYmF3c3opKQorCisjZGVmaW5lIEFUSF9EU19CQV9TRVEoX2RzKSAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfc2VxbnVtKQorI2RlZmluZSBBVEhfRFNfQkFfQklUTUFQKF9kcykgICAgICAoJihfZHMpLT5kc191cy50eC5iYV9sb3cpCisjZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKKyNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKKworZW51bSBBVEhfQUdHUl9TVEFUVVMgeworCUFUSF9BR0dSX0RPTkUsCisJQVRIX0FHR1JfQkFXX0NMT1NFRCwKKwlBVEhfQUdHUl9MSU1JVEVELAorfTsKKworc3RydWN0IGF0aF90eHEgeworCXUzMiBheHFfcW51bTsKKwl1MzIgKmF4cV9saW5rOworCXN0cnVjdCBsaXN0X2hlYWQgYXhxX3E7CisJc3BpbmxvY2tfdCBheHFfbG9jazsKKwl1MzIgYXhxX2RlcHRoOworCXU4IGF4cV9hZ2dyX2RlcHRoOworCXUzMiBheHFfdG90YWxxdWV1ZWQ7CisJYm9vbCBzdG9wcGVkOworCXN0cnVjdCBhdGhfYnVmICpheHFfbGlua2J1ZjsKKworCS8qIGZpcnN0IGRlc2Mgb2YgdGhlIGxhc3QgZGVzY3JpcHRvciB0aGF0IGNvbnRhaW5zIENUUyAqLworCXN0cnVjdCBhdGhfZGVzYyAqYXhxX2xhc3Rkc1dpdGhDVFM7CisKKwkvKiBmaW5hbCBkZXNjIG9mIHRoZSBnYXRpbmcgZGVzYyB0aGF0IGRldGVybWluZXMgd2hldGhlcgorCSAgIGxhc3Rkc1dpdGhDVFMgaGFzIGJlZW4gRE1BJ2VkIG9yIG5vdCAqLworCXN0cnVjdCBhdGhfZGVzYyAqYXhxX2dhdGluZ2RzOworCisJc3RydWN0IGxpc3RfaGVhZCBheHFfYWNxOworfTsKKworI2RlZmluZSBBR0dSX0NMRUFOVVAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgQUdHUl9BRERCQV9DT01QTEVURSAgQklUKDIpCisjZGVmaW5lIEFHR1JfQUREQkFfUFJPR1JFU1MgIEJJVCgzKQorCitzdHJ1Y3QgYXRoX2F0eF90aWQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1Zl9xOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjOworCXN0cnVjdCBhdGhfYnVmICp0eF9idWZbQVRIX1RJRF9NQVhfQlVGU107CisJdTE2IHNlcV9zdGFydDsKKwl1MTYgc2VxX25leHQ7CisJdTE2IGJhd19zaXplOworCWludCB0aWRubzsKKwlpbnQgYmF3X2hlYWQ7CS8qIGZpcnN0IHVuLWFja2VkIHR4IGJ1ZmZlciAqLworCWludCBiYXdfdGFpbDsJLyogbmV4dCB1bnVzZWQgdHggYnVmZmVyIHNsb3QgKi8KKwlpbnQgc2NoZWQ7CisJaW50IHBhdXNlZDsKKwl1OCBzdGF0ZTsKKwlpbnQgYWRkYmFfZXhjaGFuZ2VhdHRlbXB0czsKK307CisKK3N0cnVjdCBhdGhfYXR4X2FjIHsKKwlpbnQgc2NoZWQ7CisJaW50IHFudW07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgdGlkX3E7Cit9OworCitzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgeworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IGlmX2lkOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOworfTsKKworc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7CisJaW50IHJldHJpZXM7CisJaW50IGZsYWdzOworI2RlZmluZSBBVEhfVFhfRVJST1IgICAgICAgIDB4MDEKKyNkZWZpbmUgQVRIX1RYX1hSRVRSWSAgICAgICAweDAyCisjZGVmaW5lIEFUSF9UWF9CQVIgICAgICAgICAgMHgwNAorfTsKKworLyogQWxsIFJTU0kgdmFsdWVzIGFyZSBub2lzZSBmbG9vciBhZGp1c3RlZCAqLworc3RydWN0IGF0aF90eF9zdGF0IHsKKwlpbnQgcnNzaTsKKwlpbnQgcnNzaWN0bFtBVEhfTUFYX0FOVEVOTkFdOworCWludCByc3NpZXh0bltBVEhfTUFYX0FOVEVOTkFdOworCWludCByYXRlaWVlZTsKKwlpbnQgcmF0ZUticHM7CisJaW50IHJhdGVjb2RlOworCWludCBmbGFnczsKKwl1MzIgYWlydGltZTsJLyogdGltZSBvbiBhaXIgcGVyIGZpbmFsIHR4IHJhdGUgKi8KK307CisKK3N0cnVjdCBhZ2dyX3JpZnNfcGFyYW0geworCWludCBwYXJhbV9tYXhfZnJhbWVzOworCWludCBwYXJhbV9tYXhfbGVuOworCWludCBwYXJhbV9ybDsKKwlpbnQgcGFyYW1fYWw7CisJc3RydWN0IGF0aF9yY19zZXJpZXMgKnBhcmFtX3JjczsKK307CisKK3N0cnVjdCBhdGhfbm9kZSB7CisJc3RydWN0IGF0aF9zb2Z0YyAqYW5fc2M7CisJc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07CisJc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107CisJdTE2IG1heGFtcGR1OworCXU4IG1wZHVkZW5zaXR5OworfTsKKworc3RydWN0IGF0aF90eCB7CisJdTE2IHNlcV9ubzsKKwl1MzIgdHhxc2V0dXA7CisJaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOworCXNwaW5sb2NrX3QgdHhidWZsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7CisJc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOworCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKK307CisKK3N0cnVjdCBhdGhfcnggeworCXU4IGRlZmFudDsKKwl1OCByeG90aGVyYW50OworCXUzMiAqcnhsaW5rOworCWludCBidWZzaXplOworCXVuc2lnbmVkIGludCByeGZpbHRlcjsKKwlzcGlubG9ja190IHJ4Zmx1c2hsb2NrOworCXNwaW5sb2NrX3QgcnhidWZsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcnhidWY7CisJc3RydWN0IGF0aF9kZXNjZG1hIHJ4ZG1hOworfTsKKworaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3UzMiBhdGhfY2FsY3J4ZmlsdGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfcnhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKK3ZvaWQgYXRoX3J4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gpOworc3RydWN0IGF0aF90eHEgKmF0aF90eHFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IHN1YnR5cGUpOwordm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOworaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpOwordm9pZCBhdGhfZHJhaW5fYWxsX3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCk7Cit2b2lkIGF0aF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBib29sIHJldHJ5X3R4KTsKK3ZvaWQgYXRoX3R4X25vZGVfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7Cit2b2lkIGF0aF90eF9ub2RlX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwordm9pZCBhdGhfdHhxX3NjaGVkdWxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKTsKK2ludCBhdGhfdHhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKK2ludCBhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitzdHJ1Y3QgYXRoX3R4cSAqYXRoX3Rlc3RfZ2V0X3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoX3R4cV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtLAorCQkgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcSk7CitpbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCk7Cit2b2lkIGF0aF90eF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOworYm9vbCBhdGhfdHhfYWdncl9jaGVjayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkbm8pOworaW50IGF0aF90eF9hZ2dyX3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICB1MTYgdGlkLCB1MTYgKnNzbik7CitpbnQgYXRoX3R4X2FnZ3Jfc3RvcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7Cit2b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7CisKKy8qKioqKioqKi8KKy8qIFZJRnMgKi8KKy8qKioqKioqKi8KKworc3RydWN0IGF0aF92aWYgeworCWludCBhdl9ic2xvdDsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7CisJc3RydWN0IGF0aF90eF9jb250cm9sIGF2X2J0eGN0bDsKKwl1OCBic3NpZFtFVEhfQUxFTl07IC8qIGN1cnJlbnQgQlNTSUQgZnJvbSBjb25maWdfaW50ZXJmYWNlICovCit9OworCisvKioqKioqKioqKioqKioqKioqKi8KKy8qIEJlYWNvbiBIYW5kbGluZyAqLworLyoqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBSZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgYmVhY29ucyB3ZSBzdGFnZ2VyLCAoaS5lLiByZWdhcmRsZXNzIG9mIHRoZQorICogbnVtYmVyIG9mIEJTU0lEcykgaWYgYSBnaXZlbiBiZWFjb24gZG9lcyBub3QgZ28gb3V0IGV2ZW4gYWZ0ZXIgd2FpdGluZyB0aGlzCisgKiBudW1iZXIgb2YgYmVhY29uIGludGVydmFscywgdGhlIGdhbWUncyB1cC4KKyAqLworI2RlZmluZSBCU1RVQ0tfVEhSRVNIICAgICAgICAgICAJKDkgKiBBVEhfQkNCVUYpCisjZGVmaW5lCUFUSF9CQ0JVRiAgICAgICAgICAgICAgIAkxCisjZGVmaW5lIEFUSF9ERUZBVUxUX0JJTlRWQUwgICAgIAkxMDAgLyogVFUgKi8KKyNkZWZpbmUgQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgCTEwCisjZGVmaW5lIElFRUU4MDIxMV9NU19UT19UVSh4KSAgICAgICAgICAgKCgoeCkgKiAxMDAwKSAvIDEwMjQpCisKK3N0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyB7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsKKwl1MTYgbGlzdGVuX2ludGVydmFsOworCXUxNiBkdGltX3BlcmlvZDsKKwl1MTYgYm1pc3NfdGltZW91dDsKKwl1OCBkdGltX2NvdW50OworfTsKKworc3RydWN0IGF0aF9iZWFjb24geworCWVudW0geworCQlPSywJCS8qIG5vIGNoYW5nZSBuZWVkZWQgKi8KKwkJVVBEQVRFLAkJLyogdXBkYXRlIHBlbmRpbmcgKi8KKwkJQ09NTUlUCQkvKiBiZWFjb24gc2VudCwgY29tbWl0IGNoYW5nZSAqLworCX0gdXBkYXRlc2xvdDsJCS8qIHNsb3QgdGltZSB1cGRhdGUgZnNtICovCisKKwl1MzIgYmVhY29ucTsKKwl1MzIgYm1pc3NjbnQ7CisJdTMyIGFzdF9iZV94bWl0OworCXU2NCBiY190c3RhbXA7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKmJzbG90W0FUSF9CQ0JVRl07CisJc3RydWN0IGF0aF93aXBoeSAqYnNsb3RfYXBoeVtBVEhfQkNCVUZdOworCWludCBzbG90dGltZTsKKwlpbnQgc2xvdHVwZGF0ZTsKKwlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBiZWFjb25fcWk7CisJc3RydWN0IGF0aF9kZXNjZG1hIGJkbWE7CisJc3RydWN0IGF0aF90eHEgKmNhYnE7CisJc3RydWN0IGxpc3RfaGVhZCBiYnVmOworfTsKKwordm9pZCBhdGhfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworaW50IGF0aF9iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2ludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCBhdGhfYmVhY29uX3JldHVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF92aWYgKmF2cCk7CisKKy8qKioqKioqLworLyogQU5JICovCisvKioqKioqKi8KKworI2RlZmluZSBBVEhfU1RBX1NIT1JUX0NBTElOVEVSVkFMIDEwMDAgICAgLyogMSBzZWNvbmQgKi8KKyNkZWZpbmUgQVRIX0FQX1NIT1JUX0NBTElOVEVSVkFMICAxMDAgICAgIC8qIDEwMCBtcyAqLworI2RlZmluZSBBVEhfQU5JX1BPTExJTlRFUlZBTCAgICAgIDEwMCAgICAgLyogMTAwIG1zICovCisjZGVmaW5lIEFUSF9MT05HX0NBTElOVEVSVkFMICAgICAgMzAwMDAgICAvKiAzMCBzZWNvbmRzICovCisjZGVmaW5lIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMICAgMTIwMDAwMCAvKiAyMCBtaW51dGVzICovCisKK3N0cnVjdCBhdGhfYW5pIHsKKwlib29sIGNhbGRvbmU7CisJaW50MTZfdCBub2lzZV9mbG9vcjsKKwl1bnNpZ25lZCBpbnQgbG9uZ2NhbF90aW1lcjsKKwl1bnNpZ25lZCBpbnQgc2hvcnRjYWxfdGltZXI7CisJdW5zaWduZWQgaW50IHJlc2V0Y2FsX3RpbWVyOworCXVuc2lnbmVkIGludCBjaGVja2FuaV90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKi8KKy8qICAgTEVEIENvbnRyb2wgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBVEhfTEVEX1BJTgkxCisjZGVmaW5lIEFUSF9MRURfT05fRFVSQVRJT05fSURMRQkzNTAJLyogaW4gbXNlY3MgKi8KKyNkZWZpbmUgQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRQkyNTAJLyogaW4gbXNlY3MgKi8KKworZW51bSBhdGhfbGVkX3R5cGUgeworCUFUSF9MRURfUkFESU8sCisJQVRIX0xFRF9BU1NPQywKKwlBVEhfTEVEX1RYLAorCUFUSF9MRURfUlgKK307CisKK3N0cnVjdCBhdGhfbGVkIHsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2OworCWVudW0gYXRoX2xlZF90eXBlIGxlZF90eXBlOworCWNoYXIgbmFtZVszMl07CisJYm9vbCByZWdpc3RlcmVkOworfTsKKworLyogUmZraWxsICovCisjZGVmaW5lIEFUSF9SRktJTExfUE9MTF9JTlRFUlZBTAkyMDAwIC8qIG1zZWNzICovCisKK3N0cnVjdCBhdGhfcmZraWxsIHsKKwlzdHJ1Y3QgcmZraWxsICpyZmtpbGw7CisJc3RydWN0IGRlbGF5ZWRfd29yayByZmtpbGxfcG9sbDsKKwljaGFyIHJma2lsbF9uYW1lWzMyXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKi8KKy8qIE1haW4gZHJpdmVyIGNvcmUgKi8KKy8qKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERlZmF1bHQgY2FjaGUgbGluZSBzaXplLCBpbiBieXRlcy4KKyAqIFVzZWQgd2hlbiBQQ0kgZGV2aWNlIG5vdCBmdWxseSBpbml0aWFsaXplZCBieSBib290cm9tL0JJT1MKKyovCisjZGVmaW5lIERFRkFVTFRfQ0FDSEVMSU5FICAgICAgIDMyCisjZGVmaW5lCUFUSF9ERUZBVUxUX05PSVNFX0ZMT09SIC05NQorI2RlZmluZSBBVEhfUkVHQ0xBU1NJRFNfTUFYICAgICAxMAorI2RlZmluZSBBVEhfQ0FCUV9SRUFEWV9USU1FICAgICA4MCAgICAgIC8qICUgb2YgYmVhY29uIGludGVydmFsICovCisjZGVmaW5lIEFUSF9NQVhfU1dfUkVUUklFUyAgICAgIDEwCisjZGVmaW5lIEFUSF9DSEFOX01BWCAgICAgICAgICAgIDI1NQorI2RlZmluZSBJRUVFODAyMTFfV0VQX05LSUQgICAgICA0ICAgICAgIC8qIG51bWJlciBvZiBrZXkgaWRzICovCisKKy8qCisgKiBUaGUga2V5IGNhY2hlIGlzIHVzZWQgZm9yIGgvdyBjaXBoZXIgc3RhdGUgYW5kIGFsc28gZm9yCisgKiB0cmFja2luZyBzdGF0aW9uIHN0YXRlIHN1Y2ggYXMgdGhlIGN1cnJlbnQgdHggYW50ZW5uYS4KKyAqIFdlIGFsc28gc2V0dXAgYSBtYXBwaW5nIHRhYmxlIGJldHdlZW4ga2V5IGNhY2hlIHNsb3QgaW5kaWNlcworICogYW5kIHN0YXRpb24gc3RhdGUgdG8gc2hvcnQtY2lyY3VpdCBub2RlIGxvb2t1cHMgb24gcnguCisgKiBEaWZmZXJlbnQgcGFydHMgaGF2ZSBkaWZmZXJlbnQgc2l6ZSBrZXkgY2FjaGVzLiAgV2UgaGFuZGxlCisgKiB1cCB0byBBVEhfS0VZTUFYIGVudHJpZXMgKGNvdWxkIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHN0YXRlKS4KKyAqLworI2RlZmluZQlBVEhfS0VZTUFYCSAgICAgICAgMTI4ICAgICAvKiBtYXgga2V5IGNhY2hlIHNpemUgd2UgaGFuZGxlICovCisKKyNkZWZpbmUgQVRIX1RYUE9XRVJfTUFYICAgICAgICAgMTAwICAgICAvKiAuNSBkQm0gdW5pdHMgKi8KKyNkZWZpbmUgQVRIX1JTU0lfRFVNTVlfTUFSS0VSICAgMHgxMjcKKyNkZWZpbmUgQVRIX1JBVEVfRFVNTVlfTUFSS0VSICAgMAorCisjZGVmaW5lIFNDX09QX0lOVkFMSUQgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSBTQ19PUF9CRUFDT05TICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgU0NfT1BfUlhBR0dSICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIFNDX09QX1RYQUdHUiAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFICBCSVQoNCkKKyNkZWZpbmUgU0NfT1BfRlVMTF9SRVNFVCAgICAgICAgQklUKDUpCisjZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUICAgIEJJVCg2KQorI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRSAgICBCSVQoNykKKyNkZWZpbmUgU0NfT1BfUlhGTFVTSCAgICAgICAgICAgQklUKDgpCisjZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVEICAgIEJJVCg5KQorI2RlZmluZSBTQ19PUF9SRktJTExfUkVHSVNURVJFRCBCSVQoMTApCisjZGVmaW5lIFNDX09QX1JGS0lMTF9TV19CTE9DS0VEIEJJVCgxMSkKKyNkZWZpbmUgU0NfT1BfUkZLSUxMX0hXX0JMT0NLRUQgQklUKDEyKQorI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04gICBCSVQoMTMpCisjZGVmaW5lIFNDX09QX0xFRF9PTiAgICAgICAgICAgIEJJVCgxNCkKKyNkZWZpbmUgU0NfT1BfU0NBTk5JTkcgICAgICAgICAgQklUKDE1KQorI2RlZmluZSBTQ19PUF9UU0ZfUkVTRVQgICAgICAgICBCSVQoMTYpCisKK3N0cnVjdCBhdGhfYnVzX29wcyB7CisJdm9pZAkJKCpyZWFkX2NhY2hlc2l6ZSkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KTsKKwl2b2lkCQkoKmNsZWFudXApKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKKwlib29sCQkoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKTsKK307CisKK3N0cnVjdCBhdGhfd2lwaHk7CisKK3N0cnVjdCBhdGhfc29mdGMgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXNwaW5sb2NrX3Qgd2lwaHlfbG9jazsgLyogc3BpbmxvY2sgdG8gcHJvdGVjdCBhdGhfd2lwaHkgZGF0YSAqLworCXN0cnVjdCBhdGhfd2lwaHkgKnByaV93aXBoeTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICoqc2VjX3dpcGh5OyAvKiBzZWNvbmRhcnkgd2lwaHlzICh2aXJ0dWFsIHJhZGlvcyk7IG1heQorCQkJCSAgICAgICAqIGhhdmUgTlVMTCBlbnRyaWVzICovCisJaW50IG51bV9zZWNfd2lwaHk7IC8qIG51bWJlciBvZiBzZWNfd2lwaHkgcG9pbnRlcnMgaW4gdGhlIGFycmF5ICovCisJaW50IGNoYW5faWR4OworCWludCBjaGFuX2lzX2h0OworCXN0cnVjdCBhdGhfd2lwaHkgKm5leHRfd2lwaHk7CisJc3RydWN0IHdvcmtfc3RydWN0IGNoYW5fd29yazsKKwlpbnQgd2lwaHlfc2VsZWN0X2ZhaWx1cmVzOworCXVuc2lnbmVkIGxvbmcgd2lwaHlfc2VsZWN0X2ZpcnN0X2ZhaWw7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3aXBoeV93b3JrOworCXVuc2lnbmVkIGxvbmcgd2lwaHlfc2NoZWR1bGVyX2ludDsKKwlpbnQgd2lwaHlfc2NoZWR1bGVyX2luZGV4OworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKKwlzdHJ1Y3QgYXRoX2h3ICpzY19haDsKKwl2b2lkIF9faW9tZW0gKm1lbTsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3Qgc2NfcmVzZXRsb2NrOworCXNwaW5sb2NrX3Qgc2Nfc2VyaWFsX3J3OworCXN0cnVjdCBtdXRleCBtdXRleDsKKworCXU4IGN1cmJzc2lkW0VUSF9BTEVOXTsKKwl1OCBic3NpZG1hc2tbRVRIX0FMRU5dOworCXUzMiBpbnRyc3RhdHVzOworCXUzMiBzY19mbGFnczsgLyogU0NfT1BfKiAqLworCXUxNiBjdXJ0eHBvdzsKKwl1MTYgY3VyYWlkOworCXUxNiBjYWNoZWxzejsKKwl1OCBuYmNudmlmczsKKwl1MTYgbnZpZnM7CiAJdTggdHhfY2hhaW5tYXNrOwogCXU4IHJ4X2NoYWlubWFzazsKLQl1MTYgdHhfdHJpZ2xldmVsX21heDsKLQl1MTYgcmVnX2NhcDsKLQl1OCBudW1fZ3Bpb19waW5zOwotCXU4IG51bV9hbnRjZmdfMmdoejsKLQl1OCBudW1fYW50Y2ZnXzVnaHo7Ci19OwotCi1zdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyB7Ci0JaW50IGRtYV9iZWFjb25fcmVzcG9uc2VfdGltZTsKLQlpbnQgc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWU7Ci0JaW50IGFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmOwotCWludCBhY2tfNm1iOwotCWludCBjd21faWdub3JlX2V4dGNjYTsKLQl1OCBwY2llX3Bvd2Vyc2F2ZV9lbmFibGU7Ci0JdTggcGNpZV9sMXNrcF9lbmFibGU7Ci0JdTggcGNpZV9jbG9ja19yZXE7Ci0JdTMyIHBjaWVfd2FlbjsKLQlpbnQgcGNpZV9wb3dlcl9yZXNldDsKLQl1OCBwY2llX3Jlc3RvcmU7Ci0JdTggYW5hbG9nX3NoaWZ0cmVnOwotCXU4IGh0X2VuYWJsZTsKLQl1MzIgb2ZkbV90cmlnX2xvdzsKLQl1MzIgb2ZkbV90cmlnX2hpZ2g7Ci0JdTMyIGNja190cmlnX2hpZ2g7Ci0JdTMyIGNja190cmlnX2xvdzsKLQl1MzIgZW5hYmxlX2FuaTsKLQl1OCBub2lzZV9pbW11bml0eV9sZXZlbDsKLQl1MzIgb2ZkbV93ZWFrc2lnbmFsX2RldDsKLQl1MzIgY2NrX3dlYWtzaWduYWxfdGhyOwotCXU4IHNwdXJfaW1tdW5pdHlfbGV2ZWw7Ci0JdTggZmlyc3RlcF9sZXZlbDsKLQlpbnQ4X3QgcnNzaV90aHJfaGlnaDsKLQlpbnQ4X3QgcnNzaV90aHJfbG93OwotCXUxNiBkaXZlcnNpdHlfY29udHJvbDsKLQl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKLQlpbnQgc2VyaWFsaXplX3JlZ21vZGU7Ci0JaW50IGludHJfbWl0aWdhdGlvbjsKLSNkZWZpbmUgU1BVUl9ESVNBQkxFICAgICAgICAJMAotI2RlZmluZSBTUFVSX0VOQUJMRV9JT0NUTCAgIAkxCi0jZGVmaW5lIFNQVVJfRU5BQkxFX0VFUFJPTSAgCTIKLSNkZWZpbmUgQVJfRUVQUk9NX01PREFMX1NQVVJTICAgNQotI2RlZmluZSBBUl9TUFVSXzU0MTNfMSAgICAgIAkxNjQwCi0jZGVmaW5lIEFSX1NQVVJfNTQxM18yICAgICAgCTEyMDAKLSNkZWZpbmUgQVJfTk9fU1BVUiAgICAgIAkweDgwMDAKLSNkZWZpbmUgQVJfQkFTRV9GUkVRXzJHSFogICAJMjMwMAotI2RlZmluZSBBUl9CQVNFX0ZSRVFfNUdIWiAgIAk0OTAwCi0jZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDQwIDE5Ci0jZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDIwIDEwCi0JaW50IHNwdXJtb2RlOwotCXUxNiBzcHVyY2hhbnNbQVJfRUVQUk9NX01PREFMX1NQVVJTXVsyXTsKLX07Ci0KLWVudW0gYXRoOWtfdHhfcXVldWUgewotCUFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFID0gMCwKLQlBVEg5S19UWF9RVUVVRV9EQVRBLAotCUFUSDlLX1RYX1FVRVVFX0JFQUNPTiwKLQlBVEg5S19UWF9RVUVVRV9DQUIsCi0JQVRIOUtfVFhfUVVFVUVfVUFQU0QsCi0JQVRIOUtfVFhfUVVFVUVfUFNQT0xMCi19OwotCi0jZGVmaW5lCUFUSDlLX05VTV9UWF9RVUVVRVMgMTAKLQotZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHsKLQlBVEg5S19XTUVfQUNfQksgPSAwLAotCUFUSDlLX1dNRV9BQ19CRSwKLQlBVEg5S19XTUVfQUNfVkksCi0JQVRIOUtfV01FX0FDX1ZPLAotCUFUSDlLX1dNRV9VUFNECi19OwotCi1lbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHsKLQlUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSA9IDB4MDAwMSwKLQlUWFFfRkxBR19UWEVSUklOVF9FTkFCTEUgPSAweDAwMDEsCi0JVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSA9IDB4MDAwMiwKLQlUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUgPSAweDAwMDQsCi0JVFhRX0ZMQUdfVFhVUk5JTlRfRU5BQkxFID0gMHgwMDA4LAotCVRYUV9GTEFHX0JBQ0tPRkZfRElTQUJMRSA9IDB4MDAxMCwKLQlUWFFfRkxBR19DT01QUkVTU0lPTl9FTkFCTEUgPSAweDAwMjAsCi0JVFhRX0ZMQUdfUkRZVElNRV9FWFBfUE9MSUNZX0VOQUJMRSA9IDB4MDA0MCwKLQlUWFFfRkxBR19GUkFHX0JVUlNUX0JBQ0tPRkZfRU5BQkxFID0gMHgwMDgwLAotfTsKLQotI2RlZmluZSBBVEg5S19UWFFfVVNFREVGQVVMVCAoKHUzMikgLTEpCi0KLSNkZWZpbmUgQVRIOUtfREVDT01QX01BU0tfU0laRSAgICAgMTI4Ci0jZGVmaW5lIEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQgIDUwCi0jZGVmaW5lIEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQgIDk2Ci0KLWVudW0gYXRoOWtfcGt0X3R5cGUgewotCUFUSDlLX1BLVF9UWVBFX05PUk1BTCA9IDAsCi0JQVRIOUtfUEtUX1RZUEVfQVRJTSwKLQlBVEg5S19QS1RfVFlQRV9QU1BPTEwsCi0JQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAotCUFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1AsCi0JQVRIOUtfUEtUX1RZUEVfQ0hJUlAsCi0JQVRIOUtfUEtUX1RZUEVfR1JQX1BPTEwsCi19OwotCi1zdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyB7Ci0JdTMyIHRxaV92ZXI7Ci0JZW51bSBhdGg5a190eF9xdWV1ZSB0cWlfdHlwZTsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlX3N1YnR5cGUgdHFpX3N1YnR5cGU7Ci0JZW51bSBhdGg5a190eF9xdWV1ZV9mbGFncyB0cWlfcWZsYWdzOwotCXUzMiB0cWlfcHJpb3JpdHk7Ci0JdTMyIHRxaV9haWZzOwotCXUzMiB0cWlfY3dtaW47Ci0JdTMyIHRxaV9jd21heDsKLQl1MTYgdHFpX3NocmV0cnk7Ci0JdTE2IHRxaV9sZ3JldHJ5OwotCXUzMiB0cWlfY2JyUGVyaW9kOwotCXUzMiB0cWlfY2JyT3ZlcmZsb3dMaW1pdDsKLQl1MzIgdHFpX2J1cnN0VGltZTsKLQl1MzIgdHFpX3JlYWR5VGltZTsKLQl1MzIgdHFpX3BoeXNDb21wQnVmOwotCXUzMiB0cWlfaW50RmxhZ3M7Ci19OwotCi1lbnVtIGF0aDlrX3J4X2ZpbHRlciB7Ci0JQVRIOUtfUlhfRklMVEVSX1VDQVNUID0gMHgwMDAwMDAwMSwKLQlBVEg5S19SWF9GSUxURVJfTUNBU1QgPSAweDAwMDAwMDAyLAotCUFUSDlLX1JYX0ZJTFRFUl9CQ0FTVCA9IDB4MDAwMDAwMDQsCi0JQVRIOUtfUlhfRklMVEVSX0NPTlRST0wgPSAweDAwMDAwMDA4LAotCUFUSDlLX1JYX0ZJTFRFUl9CRUFDT04gPSAweDAwMDAwMDEwLAotCUFUSDlLX1JYX0ZJTFRFUl9QUk9NID0gMHgwMDAwMDAyMCwKLQlBVEg5S19SWF9GSUxURVJfUFJPQkVSRVEgPSAweDAwMDAwMDgwLAotCUFUSDlLX1JYX0ZJTFRFUl9QU1BPTEwgPSAweDAwMDA0MDAwLAotCUFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIgPSAweDAwMDAwMTAwLAotCUFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUiA9IDB4MDAwMDIwMDAsCi19OwotCi1lbnVtIGF0aDlrX2ludCB7Ci0JQVRIOUtfSU5UX1JYID0gMHgwMDAwMDAwMSwKLQlBVEg5S19JTlRfUlhERVNDID0gMHgwMDAwMDAwMiwKLQlBVEg5S19JTlRfUlhOT0ZSTSA9IDB4MDAwMDAwMDgsCi0JQVRIOUtfSU5UX1JYRU9MID0gMHgwMDAwMDAxMCwKLQlBVEg5S19JTlRfUlhPUk4gPSAweDAwMDAwMDIwLAotCUFUSDlLX0lOVF9UWCA9IDB4MDAwMDAwNDAsCi0JQVRIOUtfSU5UX1RYREVTQyA9IDB4MDAwMDAwODAsCi0JQVRIOUtfSU5UX1RJTV9USU1FUiA9IDB4MDAwMDAxMDAsCi0JQVRIOUtfSU5UX1RYVVJOID0gMHgwMDAwMDgwMCwKLQlBVEg5S19JTlRfTUlCID0gMHgwMDAwMTAwMCwKLQlBVEg5S19JTlRfUlhQSFkgPSAweDAwMDA0MDAwLAotCUFUSDlLX0lOVF9SWEtDTSA9IDB4MDAwMDgwMDAsCi0JQVRIOUtfSU5UX1NXQkEgPSAweDAwMDEwMDAwLAotCUFUSDlLX0lOVF9CTUlTUyA9IDB4MDAwNDAwMDAsCi0JQVRIOUtfSU5UX0JOUiA9IDB4MDAxMDAwMDAsCi0JQVRIOUtfSU5UX1RJTSA9IDB4MDAyMDAwMDAsCi0JQVRIOUtfSU5UX0RUSU0gPSAweDAwNDAwMDAwLAotCUFUSDlLX0lOVF9EVElNU1lOQyA9IDB4MDA4MDAwMDAsCi0JQVRIOUtfSU5UX0dQSU8gPSAweDAxMDAwMDAwLAotCUFUSDlLX0lOVF9DQUJFTkQgPSAweDAyMDAwMDAwLAotCUFUSDlLX0lOVF9DU1QgPSAweDEwMDAwMDAwLAotCUFUSDlLX0lOVF9HVFQgPSAweDIwMDAwMDAwLAotCUFUSDlLX0lOVF9GQVRBTCA9IDB4NDAwMDAwMDAsCi0JQVRIOUtfSU5UX0dMT0JBTCA9IDB4ODAwMDAwMDAsCi0JQVRIOUtfSU5UX0JNSVNDID0gQVRIOUtfSU5UX1RJTSB8Ci0JCUFUSDlLX0lOVF9EVElNIHwKLQkJQVRIOUtfSU5UX0RUSU1TWU5DIHwKLQkJQVRIOUtfSU5UX0NBQkVORCwKLQlBVEg5S19JTlRfQ09NTU9OID0gQVRIOUtfSU5UX1JYTk9GUk0gfAotCQlBVEg5S19JTlRfUlhERVNDIHwKLQkJQVRIOUtfSU5UX1JYRU9MIHwKLQkJQVRIOUtfSU5UX1JYT1JOIHwKLQkJQVRIOUtfSU5UX1RYVVJOIHwKLQkJQVRIOUtfSU5UX1RYREVTQyB8Ci0JCUFUSDlLX0lOVF9NSUIgfAotCQlBVEg5S19JTlRfUlhQSFkgfAotCQlBVEg5S19JTlRfUlhLQ00gfAotCQlBVEg5S19JTlRfU1dCQSB8Ci0JCUFUSDlLX0lOVF9CTUlTUyB8Ci0JCUFUSDlLX0lOVF9HUElPLAotCUFUSDlLX0lOVF9OT0NBUkQgPSAweGZmZmZmZmZmCi19OwotCi0jZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgMHgwMDAxCi0jZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfMjA0MCAgICAgMHgwMDAyCi0jZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJICAgMHgwMDA0Ci0KLXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgewotCXUzMiBUcmllczsKLQl1MzIgUmF0ZTsKLQl1MzIgUGt0RHVyYXRpb247Ci0JdTMyIENoU2VsOwotCXUzMiBSYXRlRmxhZ3M7Ci19OwotCi0jZGVmaW5lIENIQU5ORUxfQ1dfSU5UICAgIDB4MDAwMDIKLSNkZWZpbmUgQ0hBTk5FTF9DQ0sgICAgICAgMHgwMDAyMAotI2RlZmluZSBDSEFOTkVMX09GRE0gICAgICAweDAwMDQwCi0jZGVmaW5lIENIQU5ORUxfMkdIWiAgICAgIDB4MDAwODAKLSNkZWZpbmUgQ0hBTk5FTF81R0haICAgICAgMHgwMDEwMAotI2RlZmluZSBDSEFOTkVMX1BBU1NJVkUgICAweDAwMjAwCi0jZGVmaW5lIENIQU5ORUxfRFlOICAgICAgIDB4MDA0MDAKLSNkZWZpbmUgQ0hBTk5FTF9IQUxGICAgICAgMHgwNDAwMAotI2RlZmluZSBDSEFOTkVMX1FVQVJURVIgICAweDA4MDAwCi0jZGVmaW5lIENIQU5ORUxfSFQyMCAgICAgIDB4MTAwMDAKLSNkZWZpbmUgQ0hBTk5FTF9IVDQwUExVUyAgMHgyMDAwMAotI2RlZmluZSBDSEFOTkVMX0hUNDBNSU5VUyAweDQwMDAwCi0KLSNkZWZpbmUgQ0hBTk5FTF9JTlRFUkZFUkVOQ0UgICAgMHgwMQotI2RlZmluZSBDSEFOTkVMX0RGUyAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIENIQU5ORUxfNE1TX0xJTUlUICAgICAgIDB4MDQKLSNkZWZpbmUgQ0hBTk5FTF9ERlNfQ0xFQVIgICAgICAgMHgwOAotI2RlZmluZSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DICAweDEwCi0jZGVmaW5lIENIQU5ORUxfUEVSXzExRF9BREhPQyAgIDB4MjAKLQotI2RlZmluZSBDSEFOTkVMX0EgICAgICAgICAgIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9PRkRNKQotI2RlZmluZSBDSEFOTkVMX0IgICAgICAgICAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9DQ0spCi0jZGVmaW5lIENIQU5ORUxfRyAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX09GRE0pCi0jZGVmaW5lIENIQU5ORUxfR19IVDIwICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUMjApCi0jZGVmaW5lIENIQU5ORUxfQV9IVDIwICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUMjApCi0jZGVmaW5lIENIQU5ORUxfR19IVDQwUExVUyAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBQTFVTKQotI2RlZmluZSBDSEFOTkVMX0dfSFQ0ME1JTlVTIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCi0jZGVmaW5lIENIQU5ORUxfQV9IVDQwUExVUyAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBQTFVTKQotI2RlZmluZSBDSEFOTkVMX0FfSFQ0ME1JTlVTIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCi0jZGVmaW5lIENIQU5ORUxfQUxMCQkJCVwKLQkoQ0hBTk5FTF9PRkRNfAkJCQlcCi0JIENIQU5ORUxfQ0NLfAkJCQlcCi0JIENIQU5ORUxfMkdIWiB8CQkJCVwKLQkgQ0hBTk5FTF81R0haIHwJCQkJXAotCSBDSEFOTkVMX0hUMjAgfAkJCQlcCi0JIENIQU5ORUxfSFQ0MFBMVVMgfAkJCVwKLQkgQ0hBTk5FTF9IVDQwTUlOVVMpCi0KLXN0cnVjdCBhdGg5a19jaGFubmVsIHsKLQl1MTYgY2hhbm5lbDsKLQl1MzIgY2hhbm5lbEZsYWdzOwotCXU4IHByaXZGbGFnczsKLQlpbnQ4X3QgbWF4UmVnVHhQb3dlcjsKLQlpbnQ4X3QgbWF4VHhQb3dlcjsKLQlpbnQ4X3QgbWluVHhQb3dlcjsKLQl1MzIgY2hhbm1vZGU7Ci0JaW50MzJfdCBDYWxWYWxpZDsKLQlib29sIG9uZVRpbWVDYWxzRG9uZTsKLQlpbnQ4X3QgaUNvZmY7Ci0JaW50OF90IHFDb2ZmOwotCWludDE2X3QgcmF3Tm9pc2VGbG9vcjsKLQlpbnQ4X3QgYW50ZW5uYU1heDsKLQl1MzIgcmVnRG1uRmxhZ3M7Ci0JdTMyIGNvbmZvcm1hbmNlVGVzdExpbWl0WzNdOyAvKiAwOjExYSwgMTogMTFiLCAyOjExZyAqLwotI2lmZGVmIEFUSF9ORl9QRVJfQ0hBTgotCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IG5mQ2FsSGlzdFtOVU1fTkZfUkVBRElOR1NdOwotI2VuZGlmCi19OwotCi0jZGVmaW5lIElTX0NIQU5fQShfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BKSA9PSBDSEFOTkVMX0EpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQV9IVDIwKSA9PSBDSEFOTkVMX0FfSFQyMCkgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBQTFVTKSA9PSBDSEFOTkVMX0FfSFQ0MFBMVVMpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQV9IVDQwTUlOVVMpID09IENIQU5ORUxfQV9IVDQwTUlOVVMpKQotI2RlZmluZSBJU19DSEFOX0coX2MpICgoKChfYyktPmNoYW5uZWxGbGFncyAmIChDSEFOTkVMX0cpKSA9PSBDSEFOTkVMX0cpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfR19IVDIwKSA9PSBDSEFOTkVMX0dfSFQyMCkgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBQTFVTKSA9PSBDSEFOTkVMX0dfSFQ0MFBMVVMpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfR19IVDQwTUlOVVMpID09IENIQU5ORUxfR19IVDQwTUlOVVMpKQotI2RlZmluZSBJU19DSEFOX09GRE0oX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9PRkRNKSAhPSAwKQotI2RlZmluZSBJU19DSEFOXzVHSFooX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF81R0haKSAhPSAwKQotI2RlZmluZSBJU19DSEFOXzJHSFooX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF8yR0haKSAhPSAwKQotI2RlZmluZSBJU19DSEFOX1BBU1NJVkUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKSAhPSAwKQotI2RlZmluZSBJU19DSEFOX0hBTEZfUkFURShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0hBTEYpICE9IDApCi0jZGVmaW5lIElTX0NIQU5fUVVBUlRFUl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfUVVBUlRFUikgIT0gMCkKLQotLyogVGhlc2UgbWFjcm9zIGNoZWNrIGNoYW5tb2RlIGFuZCBub3QgY2hhbm5lbEZsYWdzICovCi0jZGVmaW5lIElTX0NIQU5fQihfYykgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQikKLSNkZWZpbmUgSVNfQ0hBTl9IVDIwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDIwKSB8fAlcCi0JCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQyMCkpCi0jZGVmaW5lIElTX0NIQU5fSFQ0MChfYykgKCgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQ0MFBMVVMpIHx8CVwKLQkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpIHx8CVwKLQkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fSFQoX2MpIChJU19DSEFOX0hUMjAoKF9jKSkgfHwgSVNfQ0hBTl9IVDQwKChfYykpKQotCi0jZGVmaW5lIElTX0NIQU5fSU5fUFVCTElDX1NBRkVUWV9CQU5EKF9jKSAoKF9jKSA+IDQ5NDAgJiYgKF9jKSA8IDQ5OTApCi0jZGVmaW5lIElTX0NIQU5fQV81TUhaX1NQQUNFRChfYykJCQlcCi0JKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF81R0haKSAhPSAwKSAmJglcCi0JICgoKF9jKS0+Y2hhbm5lbCAlIDIwKSAhPSAwKSAmJgkJCVwKLQkgKCgoX2MpLT5jaGFubmVsICUgMTApICE9IDApKQotCi1zdHJ1Y3QgYXRoOWtfa2V5dmFsIHsKLQl1OCBrdl90eXBlOwotCXU4IGt2X3BhZDsKLQl1MTYga3ZfbGVuOwotCXU4IGt2X3ZhbFsxNl07Ci0JdTgga3ZfbWljWzhdOwotCXU4IGt2X3R4bWljWzhdOwotfTsKLQotZW51bSBhdGg5a19rZXlfdHlwZSB7Ci0JQVRIOUtfS0VZX1RZUEVfQ0xFQVIsCi0JQVRIOUtfS0VZX1RZUEVfV0VQLAotCUFUSDlLX0tFWV9UWVBFX0FFUywKLQlBVEg5S19LRVlfVFlQRV9US0lQLAotfTsKLQotZW51bSBhdGg5a19jaXBoZXIgewotCUFUSDlLX0NJUEhFUl9XRVAgPSAwLAotCUFUSDlLX0NJUEhFUl9BRVNfT0NCID0gMSwKLQlBVEg5S19DSVBIRVJfQUVTX0NDTSA9IDIsCi0JQVRIOUtfQ0lQSEVSX0NLSVAgPSAzLAotCUFUSDlLX0NJUEhFUl9US0lQID0gNCwKLQlBVEg5S19DSVBIRVJfQ0xSID0gNSwKLQlBVEg5S19DSVBIRVJfTUlDID0gMTI3Ci19OwotCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQ09NUFJFU1NfRElTICAgMHgwMDAxCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQUVTX0RJUyAgICAgICAgMHgwMDAyCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfRkFTVEZSQU1FX0RJUyAgMHgwMDA0Ci0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQlVSU1RfRElTICAgICAgMHgwMDA4Ci0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVICAgICAgICAgMHgwMUYwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVX1MgICAgICAgNAotI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0hFQVZZX0NMSVBfRU4gIDB4MDIwMAotI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVMgICAgIDB4RjAwMAotI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVNfUyAgIDEyCi0KLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0ZDQ19NSURCQU5EICAgMHgwMDQwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOICAgIDB4MDA4MAotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTIgICAgICAgICAweDAxMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQgICAgMHgwMjAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9PREQgICAgIDB4MDQwMAotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSAgICAweDA4MDAKLQotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REX1BSRTRfMCAgMHg0MDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBX1BSRTRfMCAweDgwMDAKLQotI2RlZmluZSBTRF9OT19DVEwgICAgICAgICAgICAgICAweEUwCi0jZGVmaW5lIE5PX0NUTCAgICAgICAgICAgICAgICAgIDB4ZmYKLSNkZWZpbmUgQ1RMX01PREVfTSAgICAgICAgICAgICAgNwotI2RlZmluZSBDVExfMTFBICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIENUTF8xMUIgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQ1RMXzExRyAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBDVExfMkdIVDIwICAgICAgICAgICAgICA1Ci0jZGVmaW5lIENUTF81R0hUMjAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgQ1RMXzJHSFQ0MCAgICAgICAgICAgICAgNwotI2RlZmluZSBDVExfNUdIVDQwICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgQVJfRUVQUk9NX01BQyhpKSAgICAgICAgKDB4MWQrKGkpKQotCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9HUElPX1NFTCAgICAgMHgwMDFjCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9HUElPX1NFTF9TICAgMgotI2RlZmluZSBBUl9FRVBST01fUkZTSUxFTlRfUE9MQVJJVFkgICAgIDB4MDAwMgotI2RlZmluZSBBUl9FRVBST01fUkZTSUxFTlRfUE9MQVJJVFlfUyAgIDEKLQotI2RlZmluZSBDVFJZX0RFQlVHIDB4MWZmCi0jZGVmaW5lCUNUUllfREVGQVVMVCAwCi0KLWVudW0gcmVnX2V4dF9iaXRtYXAgewotCVJFR19FWFRfSkFQQU5fTUlEQkFORCA9IDEsCi0JUkVHX0VYVF9GQ0NfREZTX0hUNDAgPSAyLAotCVJFR19FWFRfSkFQQU5fTk9OREZTX0hUNDAgPSAzLAotCVJFR19FWFRfSkFQQU5fREZTX0hUNDAgPSA0Ci19OwotCi1zdHJ1Y3QgYXRoOWtfY291bnRyeV9lbnRyeSB7Ci0JdTE2IGNvdW50cnlDb2RlOwotCXUxNiByZWdEbW5FbnVtOwotCXUxNiByZWdEbW41RzsKLQl1MTYgcmVnRG1uMkc7Ci0JdTggaXNNdWx0aWRvbWFpbjsKLQl1OCBpc29bM107Ci19OwotCi0jZGVmaW5lIFJFR19XUklURShfYWgsIF9yZWcsIF92YWwpIGF0aDlrX2lvd3JpdGUzMigoX2FoKSwgKF9yZWcpLCAoX3ZhbCkpCi0jZGVmaW5lIFJFR19SRUFEKF9haCwgX3JlZykgYXRoOWtfaW9yZWFkMzIoKF9haCksIChfcmVnKSkKLQotI2RlZmluZSBTTShfdiwgX2YpICAoKChfdikgPDwgX2YjI19TKSAmIF9mKQotI2RlZmluZSBNUyhfdiwgX2YpICAoKChfdikgJiBfZikgPj4gX2YjI19TKQotI2RlZmluZSBSRUdfUk1XKF9hLCBfciwgX3NldCwgX2NscikgICAgXAotCVJFR19XUklURShfYSwgX3IsIChSRUdfUkVBRChfYSwgX3IpICYgfihfY2xyKSkgfCAoX3NldCkpCi0jZGVmaW5lIFJFR19STVdfRklFTEQoX2EsIF9yLCBfZiwgX3YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBcCi0JKFJFR19SRUFEKF9hLCBfcikgJiB+X2YpIHwgKCgoX3YpIDw8IF9mIyNfUykgJiBfZikpCi0jZGVmaW5lIFJFR19TRVRfQklUKF9hLCBfciwgX2YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBSRUdfUkVBRChfYSwgX3IpIHwgX2YpCi0jZGVmaW5lIFJFR19DTFJfQklUKF9hLCBfciwgX2YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBSRUdfUkVBRChfYSwgX3IpICYgfl9mKQotCi0jZGVmaW5lIEFUSDlLX1RYUV9VU0VfTE9DS09VVF9CS09GRl9ESVMgICAweDAwMDAwMDAxCi0KLSNkZWZpbmUgSU5JVF9BSUZTICAgICAgIDIKLSNkZWZpbmUgSU5JVF9DV01JTiAgICAgIDE1Ci0jZGVmaW5lIElOSVRfQ1dNSU5fMTFCICAzMQotI2RlZmluZSBJTklUX0NXTUFYICAgICAgMTAyMwotI2RlZmluZSBJTklUX1NIX1JFVFJZICAgMTAKLSNkZWZpbmUgSU5JVF9MR19SRVRSWSAgIDEwCi0jZGVmaW5lIElOSVRfU1NIX1JFVFJZICAzMgotI2RlZmluZSBJTklUX1NMR19SRVRSWSAgMzIKLQotI2RlZmluZSBXTEFOX0NUUkxfRlJBTUVfU0laRSAoMisyKzYrNCkKLQotI2RlZmluZSBBVEhfQU1QRFVfTElNSVRfTUFYICAgICAgKDY0ICogMTAyNCAtIDEpCi0jZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUICBBVEhfQU1QRFVfTElNSVRfTUFYCi0KLSNkZWZpbmUgSUVFRTgwMjExX1dFUF9JVkxFTiAgICAgIDMKLSNkZWZpbmUgSUVFRTgwMjExX1dFUF9LSURMRU4gICAgIDEKLSNkZWZpbmUgSUVFRTgwMjExX1dFUF9DUkNMRU4gICAgIDQKLSNkZWZpbmUgSUVFRTgwMjExX01BWF9NUERVX0xFTiAgKDM4NDAgKyBGQ1NfTEVOICsJCVwKLQkJCQkgKElFRUU4MDIxMV9XRVBfSVZMRU4gKwkJXAotCQkJCSAgSUVFRTgwMjExX1dFUF9LSURMRU4gKwlcCi0JCQkJICBJRUVFODAyMTFfV0VQX0NSQ0xFTikpCi0jZGVmaW5lIE1BWF9SQVRFX1BPV0VSIDYzCi0KLWVudW0gYXRoOWtfcG93ZXJfbW9kZSB7Ci0JQVRIOUtfUE1fQVdBS0UgPSAwLAotCUFUSDlLX1BNX0ZVTExfU0xFRVAsCi0JQVRIOUtfUE1fTkVUV09SS19TTEVFUCwKLQlBVEg5S19QTV9VTkRFRklORUQKLX07Ci0KLXN0cnVjdCBhdGg5a19taWJfc3RhdHMgewotCXUzMiBhY2tyY3ZfYmFkOwotCXUzMiBydHNfYmFkOwotCXUzMiBydHNfZ29vZDsKLQl1MzIgZmNzX2JhZDsKLQl1MzIgYmVhY29uczsKLX07Ci0KLWVudW0gYXRoOWtfYW50X3NldHRpbmcgewotCUFUSDlLX0FOVF9WQVJJQUJMRSA9IDAsCi0JQVRIOUtfQU5UX0ZJWEVEX0EsCi0JQVRIOUtfQU5UX0ZJWEVEX0IKLX07Ci0KLSNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzYgNgotI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfOSA5Ci0jZGVmaW5lIEFUSDlLX1NMT1RfVElNRV8yMCAyMAotCi1lbnVtIGF0aDlrX2h0X21hY21vZGUgewotCUFUSDlLX0hUX01BQ01PREVfMjAgPSAwLAotCUFUSDlLX0hUX01BQ01PREVfMjA0MCA9IDEsCi19OwotCi1lbnVtIGF0aDlrX2h0X2V4dHByb3RzcGFjaW5nIHsKLQlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yMCA9IDAsCi0JQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUgPSAxLAotfTsKLQotc3RydWN0IGF0aDlrX2h0X2N3bSB7Ci0JZW51bSBhdGg5a19odF9tYWNtb2RlIGh0X21hY21vZGU7CisJdTMyIGtleW1heDsKKwlERUNMQVJFX0JJVE1BUChrZXltYXAsIEFUSF9LRVlNQVgpOworCXU4IHNwbGl0bWljOworCWF0b21pY190IHBzX3VzZWNvdW50OworCWVudW0gYXRoOWtfaW50IGltYXNrOwogCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgaHRfZXh0cHJvdHNwYWNpbmc7Ci19OworCWVudW0gYXRoOWtfaHRfbWFjbW9kZSB0eF9jaGFuX3dpZHRoOwogCi1lbnVtIGF0aDlrX2FuaV9jbWQgewotCUFUSDlLX0FOSV9QUkVTRU5UID0gMHgxLAotCUFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTCA9IDB4MiwKLQlBVEg5S19BTklfT0ZETV9XRUFLX1NJR05BTF9ERVRFQ1RJT04gPSAweDQsCi0JQVRIOUtfQU5JX0NDS19XRUFLX1NJR05BTF9USFIgPSAweDgsCi0JQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwgPSAweDEwLAotCUFUSDlLX0FOSV9TUFVSX0lNTVVOSVRZX0xFVkVMID0gMHgyMCwKLQlBVEg5S19BTklfTU9ERSA9IDB4NDAsCi0JQVRIOUtfQU5JX1BIWUVSUl9SRVNFVCA9IDB4ODAsCi0JQVRIOUtfQU5JX0FMTCA9IDB4ZmYKLX07CisJc3RydWN0IGF0aF9jb25maWcgY29uZmlnOworCXN0cnVjdCBhdGhfcnggcng7CisJc3RydWN0IGF0aF90eCB0eDsKKwlzdHJ1Y3QgYXRoX2JlYWNvbiBiZWFjb247CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FUSF9SQVRFX01BWF07CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpod19yYXRlX3RhYmxlW0FUSDlLX01PREVfTUFYXTsKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmN1cl9yYXRlX3RhYmxlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCi1lbnVtIHsKLQlXTEFOX1JDX1BIWV9PRkRNLAotCVdMQU5fUkNfUEhZX0NDSywKLQlXTEFOX1JDX1BIWV9IVF8yMF9TUywKLQlXTEFOX1JDX1BIWV9IVF8yMF9EUywKLQlXTEFOX1JDX1BIWV9IVF80MF9TUywKLQlXTEFOX1JDX1BIWV9IVF80MF9EUywKLQlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCi0JV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAotCVdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSwKLQlXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksCi0JV0xBTl9SQ19QSFlfTUFYCi19OworCXN0cnVjdCBhdGhfbGVkIHJhZGlvX2xlZDsKKwlzdHJ1Y3QgYXRoX2xlZCBhc3NvY19sZWQ7CisJc3RydWN0IGF0aF9sZWQgdHhfbGVkOworCXN0cnVjdCBhdGhfbGVkIHJ4X2xlZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGF0aF9sZWRfYmxpbmtfd29yazsKKwlpbnQgbGVkX29uX2R1cmF0aW9uOworCWludCBsZWRfb2ZmX2R1cmF0aW9uOworCWludCBsZWRfb25fY250OworCWludCBsZWRfb2ZmX2NudDsKIAotZW51bSBhdGg5a190cF9zY2FsZSB7Ci0JQVRIOUtfVFBfU0NBTEVfTUFYID0gMCwKLQlBVEg5S19UUF9TQ0FMRV81MCwKLQlBVEg5S19UUF9TQ0FMRV8yNSwKLQlBVEg5S19UUF9TQ0FMRV8xMiwKLQlBVEg5S19UUF9TQ0FMRV9NSU4KLX07Ci0KLWVudW0gc2VyX3JlZ19tb2RlIHsKLQlTRVJfUkVHX01PREVfT0ZGID0gMCwKLQlTRVJfUkVHX01PREVfT04gPSAxLAotCVNFUl9SRUdfTU9ERV9BVVRPID0gMiwKLX07Ci0KLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRSAgICAgIAkJLTg1Ci0jZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0hJR0hfVkFMVUUgICAgICAJCS02MgotI2RlZmluZSBBUl9QSFlfQ0NBX01JTl9CQURfVkFMVUUgICAgICAgCQktMTIxCi0jZGVmaW5lIEFSX1BIWV9DQ0FfRklMVEVSV0lORE9XX0xFTkdUSF9JTklUICAgICAzCi0jZGVmaW5lIEFSX1BIWV9DQ0FfRklMVEVSV0lORE9XX0xFTkdUSCAgICAgICAgICA1Ci0KLSNkZWZpbmUgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYICAgICAgICAgICA1Ci0jZGVmaW5lIE5VTV9ORl9SRUFESU5HUyAgICAgICAgICAgICAgICAgNgotCi1zdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCB7Ci0JaW50MTZfdCBuZkNhbEJ1ZmZlcltBVEg5S19ORl9DQUxfSElTVF9NQVhdOwotCXU4IGN1cnJJbmRleDsKLQlpbnQxNl90IHByaXZORjsKLQl1OCBpbnZhbGlkTkZjb3VudDsKLX07Ci0KLXN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgewotCXUzMiBic19uZXh0dGJ0dDsKLQl1MzIgYnNfbmV4dGR0aW07Ci0JdTMyIGJzX2ludHZhbDsKLSNkZWZpbmUgQVRIOUtfQkVBQ09OX1BFUklPRCAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIEFUSDlLX0JFQUNPTl9FTkEgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBBVEg5S19CRUFDT05fUkVTRVRfVFNGICAgIDB4MDEwMDAwMDAKLQl1MzIgYnNfZHRpbXBlcmlvZDsKLQl1MTYgYnNfY2ZwcGVyaW9kOwotCXUxNiBic19jZnBtYXhkdXJhdGlvbjsKLQl1MzIgYnNfY2ZwbmV4dDsKLQl1MTYgYnNfdGltb2Zmc2V0OwotCXUxNiBic19ibWlzc3RocmVzaG9sZDsKLQl1MzIgYnNfc2xlZXBkdXJhdGlvbjsKLX07Ci0KLXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIHsKLQl1MzIgbnNfYXZnYnJzc2k7Ci0JdTMyIG5zX2F2Z3Jzc2k7Ci0JdTMyIG5zX2F2Z3R4cnNzaTsKLQl1MzIgbnNfYXZndHhyYXRlOwotfTsKLQotI2RlZmluZSBBVEg5S19SU1NJX0VQX01VTFRJUExJRVIgICgxPDw3KQotCi0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQgICAgICAgICAgICAgMAotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfUENJRV9BVFRFTlRJT05fTEVEIDEKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfUE9XRVJfTEVEICAgICAyCi0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfTkVUV09SS19MRUQgICAgNQotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfTUFDX1BPV0VSX0xFRCAgICAgIDYKLQotZW51bSB7Ci0JQVRIOUtfUkVTRVRfUE9XRVJfT04sCi0JQVRIOUtfUkVTRVRfV0FSTSwKLQlBVEg5S19SRVNFVF9DT0xELAotfTsKLQotI2RlZmluZSBBSF9VU0VfRUVQUk9NICAgMHgxCi0KLXN0cnVjdCBhdGhfaGFsIHsKLQl1MzIgYWhfbWFnaWM7Ci0JdTE2IGFoX2RldmlkOwotCXUxNiBhaF9zdWJ2ZW5kb3JpZDsKLQl1MzIgYWhfbWFjVmVyc2lvbjsKLQl1MTYgYWhfbWFjUmV2OwotCXUxNiBhaF9waHlSZXY7Ci0JdTE2IGFoX2FuYWxvZzVHaHpSZXY7Ci0JdTE2IGFoX2FuYWxvZzJHaHpSZXY7Ci0KLQl2b2lkIF9faW9tZW0gKmFoX3NoOwotCXN0cnVjdCBhdGhfc29mdGMgKmFoX3NjOwotCi0JZW51bSBubDgwMjExX2lmdHlwZSBhaF9vcG1vZGU7Ci0Jc3RydWN0IGF0aDlrX29wc19jb25maWcgYWhfY29uZmlnOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgYWhfY2FwczsKLQotCXUxNiBhaF9jb3VudHJ5Q29kZTsKLQl1MzIgYWhfZmxhZ3M7Ci0JaW50MTZfdCBhaF9wb3dlckxpbWl0OwotCXUxNiBhaF9tYXhQb3dlckxldmVsOwotCXUzMiBhaF90cFNjYWxlOwotCXUxNiBhaF9jdXJyZW50UkQ7Ci0JdTE2IGFoX2N1cnJlbnRSREV4dDsKLQl1MTYgYWhfY3VycmVudFJESW5Vc2U7Ci0JdTE2IGFoX2N1cnJlbnRSRDVHOwotCXUxNiBhaF9jdXJyZW50UkQyRzsKLQljaGFyIGFoX2lzb1s0XTsKLQotCXN0cnVjdCBhdGg5a19jaGFubmVsIGFoX2NoYW5uZWxzWzE1MF07Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmFoX2N1cmNoYW47Ci0JdTMyIGFoX25jaGFuOwotCi0JYm9vbCBhaF9pc1BjaUV4cHJlc3M7Ci0JdTE2IGFoX3R4VHJpZ0xldmVsOwotCXUxNiBhaF9yZnNpbGVudDsKLQl1MzIgYWhfcmZraWxsX2dwaW87Ci0JdTMyIGFoX3Jma2lsbF9wb2xhcml0eTsKLQotI2lmbmRlZiBBVEhfTkZfUEVSX0NIQU4KLQlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCBuZkNhbEhpc3RbTlVNX05GX1JFQURJTkdTXTsKKwlzdHJ1Y3QgYXRoX3Jma2lsbCByZl9raWxsOworCXN0cnVjdCBhdGhfYW5pIGFuaTsKKwlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBub2Rlc3RhdHM7CisjaWZkZWYgQ09ORklHX0FUSDlLX0RFQlVHCisJc3RydWN0IGF0aDlrX2RlYnVnIGRlYnVnOwogI2VuZGlmCisJc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzOwogfTsKIAotc3RydWN0IGNoYW5fY2VudGVycyB7Ci0JdTE2IHN5bnRoX2NlbnRlcjsKLQl1MTYgY3RsX2NlbnRlcjsKLQl1MTYgZXh0X2NlbnRlcjsKK3N0cnVjdCBhdGhfd2lwaHkgeworCXN0cnVjdCBhdGhfc29mdGMgKnNjOyAvKiBzaGFyZWQgZm9yIGFsbCB2aXJ0dWFsIHdpcGh5cyAqLworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWVudW0gYXRoX3dpcGh5X3N0YXRlIHsKKwkJQVRIX1dJUEhZX0lOQUNUSVZFLAorCQlBVEhfV0lQSFlfQUNUSVZFLAorCQlBVEhfV0lQSFlfUEFVU0lORywKKwkJQVRIX1dJUEhZX1BBVVNFRCwKKwkJQVRIX1dJUEhZX1NDQU4sCisJfSBzdGF0ZTsKKwlpbnQgY2hhbl9pZHg7CisJaW50IGNoYW5faXNfaHQ7CiB9OwogCi1zdHJ1Y3QgYXRoX3JhdGVfdGFibGU7CitpbnQgYXRoX3Jlc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KTsKK2ludCBhdGhfZ2V0X2hhbF9xbnVtKHUxNiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9nZXRfbWFjODAyMTFfcW51bSh1MzIgcXVldWUsIHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfY2FicV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqKTsKIAotLyogSGVscGVycyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0aF9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJc2MtPmJ1c19vcHMtPnJlYWRfY2FjaGVzaXplKHNjLCBjc3opOworfQogCi1lbnVtIHdpcmVsZXNzX21vZGUgYXRoOWtfaHdfY2hhbjJ3bW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotYm9vbCBhdGg5a19od193YWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpOwotdTMyIGF0aDlrX2h3X3JldmVyc2VfYml0cyh1MzIgdmFsLCB1MzIgbik7Ci1ib29sIGF0aDlrX2dldF9jaGFubmVsX2VkZ2VzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgdTE2IGZsYWdzLCB1MTYgKmxvdywKLQkJCSAgICAgdTE2ICpoaWdoKTsKLXUxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgIHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZXMsCi0JCQkgICB1MzIgZnJhbWVMZW4sIHUxNiByYXRlaXgsCi0JCQkgICBib29sIHNob3J0UHJlYW1ibGUpOwotdTMyIGF0aDlrX2h3X21oejJpZWVlKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZyZXEsIHUzMiBmbGFncyk7Ci12b2lkIGF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBzdHJ1Y3QgY2hhbl9jZW50ZXJzICpjZW50ZXJzKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfYnVzX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc2MtPmJ1c19vcHMtPmNsZWFudXAoc2MpOworfQogCi0vKiBBdHRhY2gsIERldGFjaCAqLworZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wczsKIAotY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpOwotdm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKTsKLXN0cnVjdCBhdGhfaGFsICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQl2b2lkIF9faW9tZW0gKm1lbSwgaW50ICplcnJvcik7Ci12b2lkIGF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7CitpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7Cit2b2lkIGF0aF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2NvbnN0IGNoYXIgKmF0aF9tYWNfYmJfbmFtZSh1MzIgbWFjX2JiX3ZlcnNpb24pOworY29uc3QgY2hhciAqYXRoX3JmX25hbWUodTE2IHJmX3ZlcnNpb24pOwordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGF0aDlrX3VwZGF0ZV9pY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4pOwordm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KTsKK2ludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmhjaGFuKTsKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIAotCi0vKiBIVyBSZXNldCAqLwotCi1ib29sIGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCSAgICBlbnVtIGF0aDlrX2h0X21hY21vZGUgbWFjbW9kZSwKLQkJICAgIHU4IHR4Y2hhaW5tYXNrLCB1OCByeGNoYWlubWFzaywKLQkJICAgIGVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgZXh0cHJvdHNwYWNpbmcsCi0JCSAgICBib29sIGJDaGFubmVsQ2hhbmdlLCBpbnQgKnN0YXR1cyk7Ci0KLS8qIEtleSBDYWNoZSBNYW5hZ2VtZW50ICovCi0KLWJvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpOwotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpOwotYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksCi0JCQkJIGNvbnN0IHN0cnVjdCBhdGg5a19rZXl2YWwgKmssCi0JCQkJIGNvbnN0IHU4ICptYWMsIGludCB4b3JLZXkpOwotYm9vbCBhdGg5a19od19rZXlpc3ZhbGlkKHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGVudHJ5KTsKLQotLyogUG93ZXIgTWFuYWdlbWVudCAqLwotCi1ib29sIGF0aDlrX2h3X3NldHBvd2VyKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJICAgICAgIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKTsKLXZvaWQgYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IHJlc3RvcmUpOwotCi0vKiBCZWFjb24gdGltZXJzICovCi0KLXZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwotdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlICpicyk7Ci0vKiBIVyBDYXBhYmlsaXRpZXMgKi8KLQotYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAotCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgKnJlc3VsdCk7Ci1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAotCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpOwotCi0vKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KLQotdm9pZCBhdGg5a19od19jZmdfZ3Bpb19pbnB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKTsKLXUzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKTsKLXZvaWQgYXRoOWtfaHdfY2ZnX291dHB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvLAotCQkJIHUzMiBhaF9zaWduYWxfdHlwZSk7Ci12b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpOwotI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLXZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2hhbCAqYWgpOworI2lmZGVmIENPTkZJR19QQ0kKK2ludCBhdGhfcGNpX2luaXQodm9pZCk7Cit2b2lkIGF0aF9wY2lfZXhpdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhdGhfcGNpX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfcGNpX2V4aXQodm9pZCkge307CiAjZW5kaWYKLWludCBhdGg5a19od19zZWxlY3RfYW50Y29uZmlnKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGNmZyk7Ci11MzIgYXRoOWtfaHdfZ2V0ZGVmYW50ZW5uYShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGFudGVubmEpOwotYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBlbnVtIGF0aDlrX2FudF9zZXR0aW5nIHNldHRpbmdzLAotCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJICAgICAgIHU4ICp0eF9jaGFpbm1hc2ssCi0JCQkgICAgICAgdTggKnJ4X2NoYWlubWFzaywKLQkJCSAgICAgICB1OCAqYW50ZW5uYV9jZmdkKTsKIAotLyogR2VuZXJhbCBPcGVyYXRpb24gKi8KLQotdTMyIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGJpdHMpOwotYm9vbCBhdGg5a19od19waHlfZGlzYWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgbGltaXQpOwotdm9pZCBhdGg5a19od19nZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFjKTsKLWJvb2wgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hYyk7Ci12b2lkIGF0aDlrX2h3X3NldG9wbW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBmaWx0ZXIwLCB1MzIgZmlsdGVyMSk7Ci12b2lkIGF0aDlrX2h3X2dldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4ICptYXNrKTsKLWJvb2wgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hc2spOwotdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKmJzc2lkLCB1MTYgYXNzb2NJZCk7Ci11NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgc2V0dGluZyk7Ci1ib29sIGF0aDlrX2h3X3NldHNsb3R0aW1lKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKTsKLQotLyogUmVndWxhdG9yeSAqLwotCi1ib29sIGF0aDlrX3JlZ2RfaXNfcHVibGljX3NhZmV0eV9za3Uoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXN0cnVjdCBhdGg5a19jaGFubmVsKiBhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIGNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjKTsKLXUzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci11MzIgYXRoOWtfcmVnZF9nZXRfYW50ZW5uYV9hbGxvd2VkKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX3JlZ2RfaW5pdF9jaGFubmVscyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICB1MzIgbWF4Y2hhbnMsIHUzMiAqbmNoYW5zLCB1OCAqcmVnY2xhc3NpZHMsCi0JCQkgICAgICB1MzIgbWF4cmVnaWRzLCB1MzIgKm5yZWdpZHMsIHUxNiBjYywKLQkJCSAgICAgIGJvb2wgZW5hYmxlT3V0ZG9vciwgYm9vbCBlbmFibGVFeHRlbmRlZENoYW5uZWxzKTsKLQotLyogQU5JICovCi0KLXZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzLAotCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXUzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICB1MzIgKnJ4Y19wY250LAotCQkJCSAgdTMyICpyeGZfcGNudCwKLQkJCQkgIHUzMiAqdHhmX3BjbnQpOwotdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKTsKLXZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X2FuaV9hdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotCi0vKiBDYWxpYnJhdGlvbiAqLwotCi12b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSk7Ci12b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotdm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1zMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAotCQkJYm9vbCAqaXNDYWxEb25lKTsKLWJvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotCi0KLS8qIEVFUFJPTSAqLwotCi1pbnQgYXRoOWtfaHdfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJIHUxNiBjZmdDdGwsCi0JCQkgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAotCQkJIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJIHU4IHBvd2VyTGltaXQpOwotdm9pZCBhdGg5a19od19zZXRfYWRkYWMoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3NldF9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgICBpbnQxNl90ICpyYXRlc0FycmF5LAotCQkJCSAgICAgICB1MTYgY2ZnQ3RsLAotCQkJCSAgICAgICB1OCBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCSAgICAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkgICAgICAgdTggcG93ZXJMaW1pdCk7Ci1ib29sIGF0aDlrX2h3X3NldF9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KTsKLWJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWludCBhdGg5a19od19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgIHU4IGluZGV4LCB1MTYgKmNvbmZpZyk7Ci11OCBhdGg5a19od19nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKTsKLXUxNiBhdGg5a19od19lZXByb21fZ2V0X3NwdXJfY2hhbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBpLCBib29sIGlzMkdIeik7Ci1pbnQgYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotCi0vKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KLQotYm9vbCBhdGg5a19od19pbnRycGVuZChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotYm9vbCBhdGg5a19od19nZXRpc3Ioc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2ludCAqbWFza2VkKTsKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X2ludHJnZXQoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19pbnQgaW50cyk7Ci0KLS8qIE1BQyAoUENVL1FDVSkgKi8KLQotdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxLCB1MzIgdHhkcCk7Ci1ib29sIGF0aDlrX2h3X3R4c3RhcnQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci11MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCk7Ci1ib29sIGF0aDlrX2h3X3N0b3B0eGRtYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKLQkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKTsKLXZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKLWludCBhdGg5a19od190eHByb2NkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl90eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCi0JCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJCSAgc3RydWN0IGF0aF9kZXNjICpsYXN0ZHMsCi0JCQkJICB1MzIgZHVyVXBkYXRlRW4sIHUzMiBydHNjdHNSYXRlLAotCQkJCSAgdTMyIHJ0c2N0c0R1cmF0aW9uLAotCQkJCSAgc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbXSwKLQkJCQkgIHUzMiBuc2VyaWVzLCB1MzIgZmxhZ3MpOwotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJdTMyIGFnZ3JMZW4pOwotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9taWRkbGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJCSB1MzIgbnVtRGVsaW1zKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwotdm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwotdm9pZCBhdGg5a19od19zZXQxMW5fYnVyc3RkdXJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pOwotdm9pZCBhdGg5a19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQkgICAgIHUzMiB2bWYpOwotdm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyICp0eHFzKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAotCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Ci1ib29sIGF0aDlrX2h3X2dldF90eHFfcHJvcHMoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcSwKLQkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOwotaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKTsKLWJvb2wgYXRoOWtfaHdfcmVsZWFzZXR4cXVldWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLWludCBhdGg5a19od19yeHByb2NkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpOwotYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpOwotYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaGFsICphaCwgYm9vbCBzZXQpOwotdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByeGRwKTsKLXZvaWQgYXRoOWtfaHdfcnhlbmEoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3N0b3BwY3VyZWN2KHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KKyNpZmRlZiBDT05GSUdfQVRIRVJPU19BUjcxWFgKK2ludCBhdGhfYWhiX2luaXQodm9pZCk7Cit2b2lkIGF0aF9haGJfZXhpdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhdGhfYWhiX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfYWhiX2V4aXQodm9pZCkge307CiAjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3BzX3dha2V1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNjLT5wc191c2Vjb3VudCkgPT0gMSkKKwkJaWYgKHNjLT5zY19haC0+cG93ZXJfbW9kZSAhPSAgQVRIOUtfUE1fQVdBS0UpIHsKKwkJCXNjLT5zY19haC0+cmVzdG9yZV9tb2RlID0gc2MtPnNjX2FoLT5wb3dlcl9tb2RlOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9BV0FLRSk7CisJCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3BzX3Jlc3RvcmUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNjLT5wc191c2Vjb3VudCkpCisJCWlmICgoc2MtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICYmCisJCSAgICAhKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX0JFQUNPTikpCisJCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsCisJCQkJCSAgc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUpOworfQorCisKK3ZvaWQgYXRoOWtfc2V0X2Jzc2lkX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IGF0aDlrX3dpcGh5X2FkZChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoOWtfd2lwaHlfZGVsKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOwordm9pZCBhdGg5a190eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGF0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOworaW50IGF0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CitpbnQgYXRoOWtfd2lwaHlfc2VsZWN0KHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOwordm9pZCBhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1bnNpZ25lZCBpbnQgbXNlY19pbnQpOwordm9pZCBhdGg5a193aXBoeV9jaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2Jvb2wgYXRoOWtfd2lwaHlfc3RhcnRlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCk7Citib29sIGF0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfd2lwaHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisvKgorICogUmVhZCBhbmQgd3JpdGUsIHRoZXkgYm90aCBzaGFyZSB0aGUgc2FtZSBsb2NrLiBXZSBkbyB0aGlzIHRvIHNlcmlhbGl6ZQorICogcmVhZHMgYW5kIHdyaXRlcyBvbiBBdGhlcm9zIDgwMi4xMW4gUENJIGRldmljZXMgb25seS4gVGhpcyBpcyByZXF1aXJlZAorICogYXMgdGhlIEZJRk8gb24gdGhlc2UgZGV2aWNlcyBjYW4gb25seSBhY2NlcHQgc2FuZWx5IDIgcmVxdWVzdHMuIEFmdGVyCisgKiB0aGF0IHRoZSBkZXZpY2UgZ29lcyBiYW5hbmFzLiBTZXJpYWxpemluZyB0aGUgcmVhZHMvd3JpdGVzIHByZXZlbnRzIHRoaXMKKyAqIGZyb20gaGFwcGVuaW5nLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19pb3dyaXRlMzIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWdfb2Zmc2V0LCB1MzIgdmFsKQoreworCWlmIChhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9PTikgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWgtPmFoX3NjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwkJaW93cml0ZTMyKHZhbCwgYWgtPmFoX3NjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWgtPmFoX3NjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwl9IGVsc2UKKwkJaW93cml0ZTMyKHZhbCwgYWgtPmFoX3NjLT5tZW0gKyByZWdfb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoOWtfaW9yZWFkMzIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWdfb2Zmc2V0KQoreworCXUzMiB2YWw7CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCQl2YWwgPSBpb3JlYWQzMihhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCX0gZWxzZQorCQl2YWwgPSBpb3JlYWQzMihhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCXJldHVybiB2YWw7Cit9CisKKyNlbmRpZiAvKiBBVEg5S19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9iZWFjb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jCmluZGV4IDNhYjBiNDMuLjAzOWM3ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jCkBAIC0xNCw3ICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKKworI2RlZmluZSBGVURHRSAyCiAKIC8qCiAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSBjZXJ0YWluIHRyYW5zbWl0IHF1ZXVlIHByb3BlcnRpZXMgZGVwZW5kaW5nIG9uCkBAIC0yMywxMSArMjUsMTEgQEAKICovCiBzdGF0aWMgaW50IGF0aF9iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAKIAlhdGg5a19od19nZXRfdHhxX3Byb3BzKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsICZxaSk7Ci0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIEFsd2F5cyBidXJzdCBvdXQgYmVhY29uIGFuZCBDQUIgdHJhZmZpYy4gKi8KIAkJcWkudHFpX2FpZnMgPSAxOwogCQlxaS50cWlfY3dtaW4gPSAwOwpAQCAtNDQsNDYgKzQ2LDMyIEBACiAJCQkidW5hYmxlIHRvIHVwZGF0ZSBoL3cgYmVhY29uIHF1ZXVlIHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJcmV0dXJuIDE7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGhfYnN0dWNrX3Byb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzdHVjayBiZWFjb247IHJlc2V0dGluZyAoYm1pc3MgY291bnQgJXUpXG4iLAotCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLX0KLQogLyoKICAqICBBc3NvY2lhdGVzIHRoZSBiZWFjb24gZnJhbWUgYnVmZmVyIHdpdGggYSB0cmFuc21pdCBkZXNjcmlwdG9yLiAgV2lsbCBzZXQKICAqICB1cCBhbGwgcmVxdWlyZWQgYW50ZW5uYSBzd2l0Y2ggcGFyYW1ldGVycywgcmF0ZSBjb2RlcywgYW5kIGNoYW5uZWwgZmxhZ3MuCiAgKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KICovCi1zdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICBzdHJ1Y3QgYXRoX3ZhcCAqYXZwLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgc2VyaWVzWzRdOwogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQ7Ci0JaW50IGZsYWdzLCBhbnRlbm5hOwotCXU4IHJpeCwgcmF0ZTsKLQlpbnQgY3RzcmF0ZSA9IDA7Ci0JaW50IGN0c2R1cmF0aW9uID0gMDsKKwlpbnQgZmxhZ3MsIGFudGVubmEsIGN0c3JhdGUgPSAwLCBjdHNkdXJhdGlvbiA9IDA7CisJdTggcmF0ZTsKIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibSAlcCBsZW4gJXVcbiIsIHNrYiwgc2tiLT5sZW4pOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvcnMgKi8KIAlkcyA9IGJmLT5iZl9kZXNjOwotCiAJZmxhZ3MgPSBBVEg5S19UWERFU0NfTk9BQ0s7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKKwlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJZHMtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7IC8qIHNlbGYtbGlua2VkICovCiAJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19WRU9MOwogCQkvKiBMZXQgaGFyZHdhcmUgaGFuZGxlIGFudGVubmEgc3dpdGNoaW5nLiAqLwpAQCAtOTIsNjUgKzgwLDUzIEBACiAJCWRzLT5kc19saW5rID0gMDsKIAkJLyoKIAkJICogU3dpdGNoIGFudGVubmEgZXZlcnkgYmVhY29uLgotCQkgKiBTaG91bGQgb25seSBzd2l0Y2ggZXZlcnkgYmVhY29uIHBlcmlvZCwgbm90IGZvciBldmVyeQotCQkgKiBTV0JBJ3MKLQkJICogWFhYIGFzc3VtZXMgdHdvIGFudGVubmEKKwkJICogU2hvdWxkIG9ubHkgc3dpdGNoIGV2ZXJ5IGJlYWNvbiBwZXJpb2QsIG5vdCBmb3IgZXZlcnkgU1dCQQorCQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYWUKIAkJICovCi0JCWFudGVubmEgPSAoKHNjLT5iZWFjb24uYXN0X2JlX3htaXQgLyBzYy0+c2NfbmJjbnZhcHMpICYgMSA/IDIgOiAxKTsKKwkJYW50ZW5uYSA9ICgoc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCAvIHNjLT5uYmNudmlmcykgJiAxID8gMiA6IDEpOwogCX0KIAogCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwogCi0JLyoKLQkgKiBDYWxjdWxhdGUgcmF0ZSBjb2RlLgotCSAqIFhYWCBldmVyeXRoaW5nIGF0IG1pbiB4bWl0IHJhdGUKLQkgKi8KLQlyaXggPSAwOwogCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCXJhdGUgPSBydC0+aW5mb1swXS5yYXRlY29kZTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCi0JCXJhdGUgfD0gcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJcmF0ZSB8PSBydC0+aW5mb1swXS5zaG9ydF9wcmVhbWJsZTsKIAotCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLAotCQkJICAgICAgIHNrYi0+bGVuICsgRkNTX0xFTiwgICAgIC8qIGZyYW1lIGxlbmd0aCAqLwotCQkJICAgICAgIEFUSDlLX1BLVF9UWVBFX0JFQUNPTiwgIC8qIEF0aGVyb3MgcGFja2V0IHR5cGUgKi8KLQkJCSAgICAgICBNQVhfUkFURV9QT1dFUiwgICAgICAgICAvKiBGSVhNRSAqLwotCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwgIC8qIG5vIGVuY3J5cHRpb24gKi8KLQkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwgICAvKiBubyBlbmNyeXB0aW9uICovCi0JCQkgICAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgLyogbm8gYWNrLAotCQkJCQkJCSAgdmVvbCBmb3IgYmVhY29ucyAqLwotCQkpOworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCisJCQkgICAgICAgQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAorCQkJICAgICAgIE1BWF9SQVRFX1BPV0VSLAorCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwkJCSAgICAgICBmbGFncyk7CiAKIAkvKiBOQjogYmVhY29uJ3MgQnVmTGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgcm91bmR1cChza2ItPmxlbiwgNCksIC8qIGJ1ZmZlciBsZW5ndGggKi8KLQkJCSAgICB0cnVlLCAgICAgICAgICAgICAgICAgLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsICAgICAgICAgICAgICAgICAvKiBsYXN0IHNlZ21lbnQgKi8KLQkJCSAgICBkcyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCQkpOworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLCByb3VuZHVwKHNrYi0+bGVuLCA0KSwKKwkJCSAgICB0cnVlLCB0cnVlLCBkcyk7CiAKIAltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKIAlzZXJpZXNbMF0uVHJpZXMgPSAxOwogCXNlcmllc1swXS5SYXRlID0gcmF0ZTsKLQlzZXJpZXNbMF0uQ2hTZWwgPSBzYy0+c2NfdHhfY2hhaW5tYXNrOworCXNlcmllc1swXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CiAJc2VyaWVzWzBdLlJhdGVGbGFncyA9IChjdHNyYXRlKSA/IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDA7Ci0JYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhhaCwgZHMsIGRzLCAwLAotCQljdHNyYXRlLCBjdHNkdXJhdGlvbiwgc2VyaWVzLCA0LCAwKTsKKwlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgZHMsIDAsIGN0c3JhdGUsIGN0c2R1cmF0aW9uLAorCQkJCSAgICAgc2VyaWVzLCA0LCAwKTsKIH0KIAotLyogR2VuZXJhdGUgYmVhY29uIGZyYW1lIGFuZCBxdWV1ZSBjYWIgZGF0YSBmb3IgYSB2YXAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHN0cnVjdCBhdGhfYnVmICphdGhfYmVhY29uX2dlbmVyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfdmlmICphdnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlpbnQgY2FicV9kZXB0aDsKIAotCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQlBU1NFUlQodmlmKTsKKwlpZiAoYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJY2FicSA9IHNjLT5iZWFjb24uY2FicTsKQEAgLTE2MSwxNiArMTM3LDE5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIFJlbGVhc2UgdGhlIG9sZCBiZWFjb24gZmlyc3QgKi8KKwogCWJmID0gYXZwLT5hdl9iY2J1ZjsKIAlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKIAlpZiAoc2tiKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CiAKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChzYy0+aHcsIHZpZik7CisJLyogR2V0IGEgbmV3IGJlYWNvbiBmcm9tIG1hYzgwMjExICovCisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKIAliZi0+YmZfbXBkdSA9IHNrYjsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtMTg4LDU0ICsxNjcsNDIgQEAKIAl9CiAKIAliZi0+YmZfYnVmX2FkZHIgPSBiZi0+YmZfZG1hY29udGV4dCA9Ci0JCXBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCBza2ItPmRhdGEsCi0JCQkgICAgICAgc2tiLT5sZW4sCi0JCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihzYy0+cGRldiwgYmYtPmJmX2J1Zl9hZGRyKSkpIHsKKwkJZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLAorCQkJICAgICAgIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyKSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJYmYtPmJmX21wZHUgPSBOVUxMOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKLQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBiZWFjb25pbmdcbiIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uaW5nXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHZpZik7CisJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhodywgdmlmKTsKIAogCS8qCiAJICogaWYgdGhlIENBQlEgdHJhZmZpYyBmcm9tIHByZXZpb3VzIERUSU0gaXMgcGVuZGluZyBhbmQgdGhlIGN1cnJlbnQKIAkgKiAgYmVhY29uIGlzIGFsc28gYSBEVElNLgotCSAqICAxKSBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2YXAgbGV0IHRoZSBjYWIgdHJhZmZpYyBjb250aW51ZS4KLQkgKiAgMikgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdmFwIGFuZCB3ZSBhcmUgdXNpbmcgc3RhZ2dlcmVkCisJICogIDEpIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZpZiBsZXQgdGhlIGNhYiB0cmFmZmljIGNvbnRpbnVlLgorCSAqICAyKSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSB2aWYgYW5kIHdlIGFyZSB1c2luZyBzdGFnZ2VyZWQKIAkgKiAgICAgYmVhY29ucywgdGhlbiBkcmFpbiB0aGUgY2FicSBieSBkcm9wcGluZyBhbGwgdGhlIGZyYW1lcyBpbgotCSAqICAgICB0aGUgY2FicSBzbyB0aGF0IHRoZSBjdXJyZW50IHZhcHMgY2FiIHRyYWZmaWMgY2FuIGJlIHNjaGVkdWxlZC4KKwkgKiAgICAgdGhlIGNhYnEgc28gdGhhdCB0aGUgY3VycmVudCB2aWZzIGNhYiB0cmFmZmljIGNhbiBiZSBzY2hlZHVsZWQuCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZjYWJxLT5heHFfbG9jayk7CiAJY2FicV9kZXB0aCA9IGNhYnEtPmF4cV9kZXB0aDsKIAlzcGluX3VubG9ja19iaCgmY2FicS0+YXhxX2xvY2spOwogCiAJaWYgKHNrYiAmJiBjYWJxX2RlcHRoKSB7Ci0JCS8qCi0JCSAqIFVubG9jayB0aGUgY2FicSBsb2NrIGFzIGF0aF90eF9kcmFpbnR4cSBhY3F1aXJlcwotCQkgKiB0aGUgbG9jayBhZ2FpbiB3aGljaCBpcyBhIGNvbW1vbiBmdW5jdGlvbiBhbmQgdGhhdAotCQkgKiBhY3F1aXJlcyB0eHEgbG9jayBpbnNpZGUuCi0JCSAqLwotCQlpZiAoc2MtPnNjX252YXBzID4gMSkgewotCQkJYXRoX3R4X2RyYWludHhxKHNjLCBjYWJxLCBmYWxzZSk7CisJCWlmIChzYy0+bnZpZnMgPiAxKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkiZmx1c2ggcHJldmlvdXMgY2FicSB0cmFmZmljXG4iKTsKKwkJCQkiRmx1c2hpbmcgcHJldmlvdXMgY2FicSB0cmFmZmljXG4iKTsKKwkJCWF0aF9kcmFpbnR4cShzYywgY2FicSwgZmFsc2UpOwogCQl9CiAJfQogCi0JLyogQ29uc3RydWN0IHR4IGRlc2NyaXB0b3IuICovCiAJYXRoX2JlYWNvbl9zZXR1cChzYywgYXZwLCBiZik7CiAKLQkvKgotCSAqIEVuYWJsZSB0aGUgQ0FCIHF1ZXVlIGJlZm9yZSB0aGUgYmVhY29uIHF1ZXVlIHRvCi0JICogaW5zdXJlIGNhYiBmcmFtZXMgYXJlIHRyaWdnZXJlZCBieSB0aGlzIGJlYWNvbi4KLQkgKi8KIAl3aGlsZSAoc2tiKSB7Ci0JCWF0aF90eF9jYWJxKHNjLCBza2IpOwotCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKHNjLT5odywgdmlmKTsKKwkJYXRoX3R4X2NhYnEoaHcsIHNrYik7CisJCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoaHcsIHZpZik7CiAJfQogCiAJcmV0dXJuIGJmOwpAQCAtMjQ1LDI4ICsyMTIsMjIgQEAKICAqIFN0YXJ0dXAgYmVhY29uIHRyYW5zbWlzc2lvbiBmb3IgYWRob2MgbW9kZSB3aGVuIHRoZXkgYXJlIHNlbnQgZW50aXJlbHkKICAqIGJ5IHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgc2VsZi1saW5rZWQgZGVzY3JpcHRvciArIHZlb2wgdHJpY2suCiAqLwotc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9zdGFydF9hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9zdGFydF9hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfdmlmICphdnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQlBU1NFUlQodmlmKTsKLQogCWF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKIAotCWlmIChhdnAtPmF2X2JjYnVmID09IE5VTEwpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJhdnA9JXAgYXZfYmNidWY9JXBcbiIsCi0JCQlhdnAsIGF2cCAhPSBOVUxMID8gYXZwLT5hdl9iY2J1ZiA6IE5VTEwpOworCWlmIChhdnAtPmF2X2JjYnVmID09IE5VTEwpCiAJCXJldHVybjsKLQl9CisKIAliZiA9IGF2cC0+YXZfYmNidWY7CiAJc2tiID0gKHN0cnVjdCBza19idWZmICopIGJmLT5iZl9tcGR1OwogCi0JLyogQ29uc3RydWN0IHR4IGRlc2NyaXB0b3IuICovCiAJYXRoX2JlYWNvbl9zZXR1cChzYywgYXZwLCBiZik7CiAKIAkvKiBOQjogY2FsbGVyIGlzIGtub3duIHRvIGhhdmUgYWxyZWFkeSBzdG9wcGVkIHR4IGRtYSAqLwpAQCAtMjc2LDcgKzIzNyw3IEBACiAJCXNjLT5iZWFjb24uYmVhY29ucSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOwogfQogCi1pbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKQoraW50IGF0aF9iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHFpOwogCkBAIC0yODgsMTggKzI0OSwxNSBAQAogCXJldHVybiBhdGg5a19od19zZXR1cHR4cXVldWUoYWgsIEFUSDlLX1RYX1FVRVVFX0JFQUNPTiwgJnFpKTsKIH0KIAotaW50IGF0aF9iZWFjb25fYWxsb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK2ludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fbGU2NCB0c3RhbXA7CiAKLQl2aWYgPSBzYy0+c2NfdmFwc1tpZl9pZF07Ci0JQVNTRVJUKHZpZik7Ci0KIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKIAkvKiBBbGxvY2F0ZSBhIGJlYWNvbiBkZXNjcmlwdG9yIGlmIHdlIGhhdmVuJ3QgZG9uZSBzby4gKi8KQEAgLTMxMCw1MSArMjY4LDQ2IEBACiAJCQkJCQkgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCQlsaXN0X2RlbCgmYXZwLT5hdl9iY2J1Zi0+bGlzdCk7CiAKLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JCSAgICAhKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkgewogCQkJaW50IHNsb3Q7CiAJCQkvKgotCQkJICogQXNzaWduIHRoZSB2YXAgdG8gYSBiZWFjb24geG1pdCBzbG90LiBBcworCQkJICogQXNzaWduIHRoZSB2aWYgdG8gYSBiZWFjb24geG1pdCBzbG90LiBBcwogCQkJICogYWJvdmUsIHRoaXMgY2Fubm90IGZhaWwgdG8gZmluZCBvbmUuCiAJCQkgKi8KIAkJCWF2cC0+YXZfYnNsb3QgPSAwOwogCQkJZm9yIChzbG90ID0gMDsgc2xvdCA8IEFUSF9CQ0JVRjsgc2xvdCsrKQotCQkJCWlmIChzYy0+YmVhY29uLmJzbG90W3Nsb3RdID09IEFUSF9JRl9JRF9BTlkpIHsKKwkJCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSA9PSBOVUxMKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFhYWCBoYWNrLCBzcGFjZSBvdXQgc2xvdHMgdG8gYmV0dGVyCiAJCQkJCSAqIGRlYWwgd2l0aCBtaXNzZXMKIAkJCQkJICovCiAJCQkJCWlmIChzbG90KzEgPCBBVEhfQkNCVUYgJiYKLQkJCQkJICAgIHNjLT5iZWFjb24uYnNsb3Rbc2xvdCsxXSA9PQotCQkJCQkJQVRIX0lGX0lEX0FOWSkgeworCQkJCQkgICAgc2MtPmJlYWNvbi5ic2xvdFtzbG90KzFdID09IE5VTEwpIHsKIAkJCQkJCWF2cC0+YXZfYnNsb3QgPSBzbG90KzE7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQlhdnAtPmF2X2JzbG90ID0gc2xvdDsKIAkJCQkJLyogTkI6IGtlZXAgbG9va2luZyBmb3IgYSBkb3VibGUgc2xvdCAqLwogCQkJCX0KLQkJCUJVR19PTihzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdICE9IEFUSF9JRl9JRF9BTlkpOwotCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IGlmX2lkOwotCQkJc2MtPnNjX25iY252YXBzKys7CisJCQlCVUdfT04oc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSAhPSBOVUxMKTsKKwkJCXNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gPSB2aWY7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBhcGh5OworCQkJc2MtPm5iY252aWZzKys7CiAJCX0KIAl9CiAKLQkvKiByZWxlYXNlIHRoZSBwcmV2aW91cyBiZWFjb24gZnJhbWUgLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KKwkvKiByZWxlYXNlIHRoZSBwcmV2aW91cyBiZWFjb24gZnJhbWUsIGlmIGl0IGFscmVhZHkgZXhpc3RzLiAqLwogCWJmID0gYXZwLT5hdl9iY2J1ZjsKIAlpZiAoYmYtPmJmX21wZHUgIT0gTlVMTCkgewogCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQkJcGNpX3VubWFwX3NpbmdsZShzYy0+cGRldiwgYmYtPmJmX2RtYWNvbnRleHQsCi0JCQkJIHNrYi0+bGVuLAotCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKKwkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJfQogCi0JLyoKLQkgKiBOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLgotCSAqIEZJWE1FOiBGaWxsIGF2cC0+YXZfYnR4Y3RsLnR4cG93ZXIgYW5kCi0JICogYXZwLT5hdl9idHhjdGwuc2hvcnRQcmVhbWJsZQotCSAqLworCS8qIE5COiB0aGUgYmVhY29uIGRhdGEgYnVmZmVyIG11c3QgYmUgMzItYml0IGFsaWduZWQuICovCiAJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoc2MtPmh3LCB2aWYpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwgImNhbm5vdCBnZXQgc2tiXG4iKTsKQEAgLTM4NCw4ICszMzcsOCBAQAogCQkgKiB0aW1lc3RhbXAgdGhlbiBjb252ZXJ0IHRvIFRTRiB1bml0cyBhbmQgaGFuZGxlCiAJCSAqIGJ5dGUgc3dhcHBpbmcgYmVmb3JlIHdyaXRpbmcgaXQgaW4gdGhlIGZyYW1lLgogCQkgKiBUaGUgaGFyZHdhcmUgd2lsbCB0aGVuIGFkZCB0aGlzIGVhY2ggdGltZSBhIGJlYWNvbgotCQkgKiBmcmFtZSBpcyBzZW50LiAgTm90ZSB0aGF0IHdlIGFsaWduIHZhcCdzIDEuLk4KLQkJICogYW5kIGxlYXZlIHZhcCAwIHVudG91Y2hlZC4gIFRoaXMgbWVhbnMgdmFwIDAKKwkJICogZnJhbWUgaXMgc2VudC4gIE5vdGUgdGhhdCB3ZSBhbGlnbiB2aWYncyAxLi5OCisJCSAqIGFuZCBsZWF2ZSB2aWYgMCB1bnRvdWNoZWQuICBUaGlzIG1lYW5zIHZhcCAwCiAJCSAqIGhhcyBhIHRpbWVzdGFtcCBpbiBvbmUgYmVhY29uIGludGVydmFsIHdoaWxlIHRoZQogCQkgKiBvdGhlcnMgZ2V0IGEgdGltZXN0YW1wIGFsaWduZWQgdG8gdGhlIG5leHQgaW50ZXJ2YWwuCiAJCSAqLwpAQCAtNDAyLDM2ICszNTUsMzUgQEAKIAogCWJmLT5iZl9tcGR1ID0gc2tiOwogCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCSAgICAgICBza2ItPmxlbiwKLQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgeworCQlkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCBza2ItPmRhdGEsCisJCQkgICAgICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJInBjaV9kbWFfbWFwcGluZ19lcnJvcigpIG9uIGJlYWNvbiBhbGxvY1xuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uIGFsbG9jXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYXRoX2JlYWNvbl9yZXR1cm4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmFwICphdnApCit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKQogewogCWlmIChhdnAtPmF2X2JjYnVmICE9IE5VTEwpIHsKIAkJc3RydWN0IGF0aF9idWYgKmJmOwogCiAJCWlmIChhdnAtPmF2X2JzbG90ICE9IC0xKSB7Ci0JCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gQVRIX0lGX0lEX0FOWTsKLQkJCXNjLT5zY19uYmNudmFwcy0tOworCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBOVUxMOworCQkJc2MtPm5iY252aWZzLS07CiAJCX0KIAogCQliZiA9IGF2cC0+YXZfYmNidWY7CiAJCWlmIChiZi0+YmZfbXBkdSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKLQkJCQkJIHNrYi0+bGVuLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0LAorCQkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJfQpAQCAtNDQxLDkyICszOTMsNDUgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGhfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBOVUxMOwotCWludCBzbG90LCBpZl9pZDsKLQl1MzIgYmZhZGRyOwotCXUzMiByeF9jbGVhciA9IDAsIHJ4X2ZyYW1lID0gMCwgdHhfZnJhbWUgPSAwOwotCXUzMiBzaG93X2N5Y2xlcyA9IDA7Ci0JdTMyIGJjID0gMDsgLyogYmVhY29uIGNvdW50ICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCWludCBzbG90OworCXUzMiBiZmFkZHIsIGJjID0gMCwgdHNmdHU7CiAJdTY0IHRzZjsKLQl1MzIgdHNmdHU7CiAJdTE2IGludHZhbDsKIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQlzaG93X2N5Y2xlcyA9IGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KGFoLAotCQkJCQkgICAgJnJ4X2NsZWFyLCAmcnhfZnJhbWUsICZ0eF9mcmFtZSk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgcHJldmlvdXMgYmVhY29uIGhhcyBnb25lIG91dC4gIElmCiAJICogbm90IGRvbid0IHRyeSB0byBwb3N0IGFub3RoZXIsIHNraXAgdGhpcyBwZXJpb2QKIAkgKiBhbmQgd2FpdCBmb3IgdGhlIG5leHQuICBNaXNzZWQgYmVhY29ucyBpbmRpY2F0ZQogCSAqIGEgcHJvYmxlbSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIElmIHdlIG1pc3MgdG9vCiAJICogbWFueSBjb25zZWN1dGl2ZSBiZWFjb25zIHJlc2V0IHRoZSBkZXZpY2UuCi0JICoKLQkgKiBGSVhNRTogQ2xlYW4gdXAgdGhpcyBtZXNzICEhCiAJICovCiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKLQkJLyogWFhYOiBkb3RoIG5lZWRzIHRoZSBjaGFuY2hhbmdlIElFIGNvdW50ZG93biBkZWNyZW1lbnRlZC4KLQkJICogICAgICBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGEgbWFjODAyMTEgY2FsbCB0byBpbmRpY2F0ZQotCQkgKiAgICAgIGEgYmVhY29uIG1pc3Mgc28gYXBwcm9wcmlhdGUgYWN0aW9uIGNvdWxkIGJlIHRha2VuCi0JCSAqICAgICAgKGluIHRoYXQgbGF5ZXIpLgotCQkgKi8KKwogCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKLQkJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJCWlmIChzaG93X2N5Y2xlcykgewotCQkJCQkvKgotCQkJCQkgKiBEaXNwbGF5IGN5Y2xlIGNvdW50ZXIgc3RhdHMgZnJvbSBIVwotCQkJCQkgKiB0byBhaWRlIGluIGRlYnVnIG9mIHN0aWNraW5lc3MuCi0JCQkJCSAqLwotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJidXN5IHRpbWVzOiByeF9jbGVhcj0lZCwgIgotCQkJCQkJInJ4X2ZyYW1lPSVkLCB0eF9mcmFtZT0lZFxuIiwKLQkJCQkJCXJ4X2NsZWFyLCByeF9mcmFtZSwKLQkJCQkJCXR4X2ZyYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJ1bmFibGUgdG8gb2J0YWluICIKLQkJCQkJCSJidXN5IHRpbWVzXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJfQorCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQl9IGVsc2UgaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPj0gQlNUVUNLX1RIUkVTSCkgewotCQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX05PX1JFU0VUKSB7Ci0JCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPT0gQlNUVUNLX1RIUkVTSCkgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSAiCi0JCQkJCQkic3R1Y2tcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7Ci0JCQkJYXRoX2JzdHVja19wcm9jZXNzKHNjKTsKLQkJCX0KKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7CisJCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKIAkJfQorCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCAhPSAwKSB7Ci0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7Ci0JCX0gZWxzZSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkicmVzdW1lIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKLQkJCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJfQorCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOwogCX0KIApAQCAtNTQyLDIxICs0NDcsMjIgQEAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CiAJdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKIAlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCWlmX2lkID0gc2MtPmJlYWNvbi5ic2xvdFsoc2xvdCArIDEpICUgQVRIX0JDQlVGXTsKKwl2aWYgPSBzYy0+YmVhY29uLmJzbG90WyhzbG90ICsgMSkgJSBBVEhfQkNCVUZdOworCWFwaHkgPSBzYy0+YmVhY29uLmJzbG90X2FwaHlbKHNsb3QgKyAxKSAlIEFUSF9CQ0JVRl07CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJInNsb3QgJWQgW3RzZiAlbGx1IHRzZnR1ICV1IGludHZhbCAldV0gaWZfaWQgJWRcbiIsCi0JCXNsb3QsICh1bnNpZ25lZCBsb25nIGxvbmcpdHNmLCB0c2Z0dSwKLQkJaW50dmFsLCBpZl9pZCk7CisJCSJzbG90ICVkIFt0c2YgJWxsdSB0c2Z0dSAldSBpbnR2YWwgJXVdIHZpZiAlcFxuIiwKKwkJc2xvdCwgdHNmLCB0c2Z0dSwgaW50dmFsLCB2aWYpOwogCiAJYmZhZGRyID0gMDsKLQlpZiAoaWZfaWQgIT0gQVRIX0lGX0lEX0FOWSkgewotCQliZiA9IGF0aF9iZWFjb25fZ2VuZXJhdGUoc2MsIGlmX2lkKTsKKwlpZiAodmlmKSB7CisJCWJmID0gYXRoX2JlYWNvbl9nZW5lcmF0ZShhcGh5LT5odywgdmlmKTsKIAkJaWYgKGJmICE9IE5VTEwpIHsKIAkJCWJmYWRkciA9IGJmLT5iZl9kYWRkcjsKIAkJCWJjID0gMTsKIAkJfQogCX0KKwogCS8qCiAJICogSGFuZGxlIHNsb3QgdGltZSBjaGFuZ2Ugd2hlbiBhIG5vbi1FUlAgc3RhdGlvbiBqb2lucy9sZWF2ZXMKIAkgKiBhbiAxMWcgbmV0d29yay4gIFRoZSA4MDIuMTEgbGF5ZXIgbm90aWZpZXMgdXMgdmlhIGNhbGxiYWNrLApAQCAtNTczLDcgKzQ3OSw2IEBACiAJICogICAgIGludGVydmFsIGhhcyBwYXNzZWQuICBXaGVuIGJ1cnN0aW5nIHNsb3QgaXMgYWx3YXlzIGxlZnQKIAkgKiAgICAgc2V0IHRvIEFUSF9CQ0JVRiBzbyB0aGlzIGNoZWNrIGlzIGEgbm9vcC4KIAkgKi8KLQkvKiBYWFggbG9ja2luZyAqLwogCWlmIChzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPT0gVVBEQVRFKSB7CiAJCXNjLT5iZWFjb24udXBkYXRlc2xvdCA9IENPTU1JVDsgLyogY29tbWl0IG5leHQgYmVhY29uICovCiAJCXNjLT5iZWFjb24uc2xvdHVwZGF0ZSA9IHNsb3Q7CkBAIC01OTAsNTIgKzQ5NSwyMjQgQEAKIAkJaWYgKCFhdGg5a19od19zdG9wdHhkbWEoYWgsIHNjLT5iZWFjb24uYmVhY29ucSkpIHsKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkJImJlYWNvbiBxdWV1ZSAldSBkaWQgbm90IHN0b3A/XG4iLCBzYy0+YmVhY29uLmJlYWNvbnEpOwotCQkJLyogTkI6IHRoZSBIQUwgc3RpbGwgc3RvcHMgRE1BLCBzbyBwcm9jZWVkICovCiAJCX0KIAogCQkvKiBOQjogY2FicSB0cmFmZmljIHNob3VsZCBhbHJlYWR5IGJlIHF1ZXVlZCBhbmQgcHJpbWVkICovCiAJCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsIGJmYWRkcik7CiAJCWF0aDlrX2h3X3R4c3RhcnQoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CiAKLQkJc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCArPSBiYzsgICAgIC8qIFhYWCBwZXItdmFwPyAqLworCQlzYy0+YmVhY29uLmFzdF9iZV94bWl0ICs9IGJjOyAgICAgLyogWFhYIHBlci12aWY/ICovCiAJfQogfQogCiAvKgotICogQ29uZmlndXJlIHRoZSBiZWFjb24gYW5kIHNsZWVwIHRpbWVycy4KLSAqCi0gKiBXaGVuIG9wZXJhdGluZyBhcyBhbiBBUCB0aGlzIHJlc2V0cyB0aGUgVFNGIGFuZCBzZXRzCi0gKiB1cCB0aGUgaGFyZHdhcmUgdG8gbm90aWZ5IHVzIHdoZW4gd2UgbmVlZCB0byBpc3N1ZSBiZWFjb25zLgotICoKLSAqIFdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSB0aGlzIHNldHMgdXAgdGhlIGJlYWNvbgotICogdGltZXJzIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IHJlY2VpdmVkCi0gKiBiZWFjb24gYW5kIHRoZSBjdXJyZW50IFRTRiwgY29uZmlndXJlcyBQQ0YgYW5kIERUSU0KLSAqIGhhbmRsaW5nLCBwcm9ncmFtcyB0aGUgc2xlZXAgcmVnaXN0ZXJzIHNvIHRoZSBoYXJkd2FyZQotICogd2lsbCB3YWtldXAgaW4gdGltZSB0byByZWNlaXZlIGJlYWNvbnMsIGFuZCBjb25maWd1cmVzCi0gKiB0aGUgYmVhY29uIG1pc3MgaGFuZGxpbmcgc28gd2UnbGwgcmVjZWl2ZSBhIEJNSVNTCi0gKiBpbnRlcnJ1cHQgd2hlbiB3ZSBzdG9wIHNlZWluZyBiZWFjb25zIGZyb20gdGhlIEFQCi0gKiB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGguCisgKiBGb3IgbXVsdGktYnNzIGFwIHN1cHBvcnQgYmVhY29ucyBhcmUgZWl0aGVyIHN0YWdnZXJlZCBldmVubHkgb3ZlciBOIHNsb3RzIG9yCisgKiBidXJzdCB0b2dldGhlci4gIEZvciB0aGUgZm9ybWVyIGFycmFuZ2UgZm9yIHRoZSBTV0JBIHRvIGJlIGRlbGl2ZXJlZCBmb3IgZWFjaAorICogc2xvdC4gU2xvdHMgdGhhdCBhcmUgbm90IG9jY3VwaWVkIHdpbGwgZ2VuZXJhdGUgbm90aGluZy4KICAqLwotdm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9jb25maWdfYXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZiwKKwkJCQkgc3RydWN0IGF0aF92aWYgKmF2cCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOwotCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOwogCXUzMiBuZXh0dGJ0dCwgaW50dmFsOwogCi0JaWYgKGlmX2lkICE9IEFUSF9JRl9JRF9BTlkpIHsKLQkJdmlmID0gc2MtPnNjX3ZhcHNbaWZfaWRdOwotCQlBU1NFUlQodmlmKTsKLQkJYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwotCQlvcG1vZGUgPSBhdnAtPmF2X29wbW9kZTsKKwkvKiBDb25maWd1cmUgdGhlIHRpbWVycyBvbmx5IHdoZW4gdGhlIFRTRiBoYXMgdG8gYmUgcmVzZXQgKi8KKworCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkpCisJCXJldHVybjsKKworCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKwlpbnR2YWwgLz0gQVRIX0JDQlVGOyAgICAvKiBmb3Igc3RhZ2dlcmVkIGJlYWNvbnMgKi8KKwluZXh0dGJ0dCA9IGludHZhbDsKKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKKworCS8qCisJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kIFNXQkEgaW50ZXJydXB0cyB0bworCSAqIHByZXBhcmUgYmVhY29uIGZyYW1lcy4KKwkgKi8KKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKKwlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7CisJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKKworCS8qIFNldCB0aGUgY29tcHV0ZWQgQVAgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19iZWFjb25pbml0KHNjLT5zY19haCwgbmV4dHRidHQsIGludHZhbCk7CisJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworCisJLyogQ2xlYXIgdGhlIHJlc2V0IFRTRiBmbGFnLCBzbyB0aGF0IHN1YnNlcXVlbnQgYmVhY29uIHVwZGF0aW9uCisJICAgd2lsbCBub3QgcmVzZXQgdGhlIEhXIFRTRi4gKi8KKworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfVFNGX1JFU0VUOworfQorCisvKgorICogVGhpcyBzZXRzIHVwIHRoZSBiZWFjb24gdGltZXJzIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0CisgKiByZWNlaXZlZCBiZWFjb24gYW5kIHRoZSBjdXJyZW50IFRTRiwgY29uZmlndXJlcyBQQ0YgYW5kIERUSU0KKyAqIGhhbmRsaW5nLCBwcm9ncmFtcyB0aGUgc2xlZXAgcmVnaXN0ZXJzIHNvIHRoZSBoYXJkd2FyZSB3aWxsIHdha2V1cCBpbgorICogdGltZSB0byByZWNlaXZlIGJlYWNvbnMsIGFuZCBjb25maWd1cmVzIHRoZSBiZWFjb24gbWlzcyBoYW5kbGluZyBzbworICogd2UnbGwgcmVjZWl2ZSBhIEJNSVNTIGludGVycnVwdCB3aGVuIHdlIHN0b3Agc2VlaW5nIGJlYWNvbnMgZnJvbSB0aGUgQVAKKyAqIHdlJ3ZlIGFzc29jaWF0ZWQgd2l0aC4KKyAqLworc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9jb25maWdfc3RhKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mLAorCQkJCSAgc3RydWN0IGF0aF92aWYgKmF2cCkKK3sKKwlzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIGJzOworCWludCBkdGltcGVyaW9kLCBkdGltY291bnQsIHNsZWVwZHVyYXRpb247CisJaW50IGNmcHBlcmlvZCwgY2ZwY291bnQ7CisJdTMyIG5leHR0YnR0ID0gMCwgaW50dmFsLCB0c2Z0dTsKKwl1NjQgdHNmOworCisJbWVtc2V0KCZicywgMCwgc2l6ZW9mKGJzKSk7CisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKworCS8qCisJICogU2V0dXAgZHRpbSBhbmQgY2ZwIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvCisJICogbGFzdCBiZWFjb24gd2UgcmVjZWl2ZWQgKHdoaWNoIG1heSBiZSBub25lKS4KKwkgKi8KKwlkdGltcGVyaW9kID0gY29uZi0+ZHRpbV9wZXJpb2Q7CisJaWYgKGR0aW1wZXJpb2QgPD0gMCkJCS8qIE5COiAwIGlmIG5vdCBrbm93biAqLworCQlkdGltcGVyaW9kID0gMTsKKwlkdGltY291bnQgPSBjb25mLT5kdGltX2NvdW50OworCWlmIChkdGltY291bnQgPj0gZHRpbXBlcmlvZCkJLyogTkI6IHNhbml0eSBjaGVjayAqLworCQlkdGltY291bnQgPSAwOworCWNmcHBlcmlvZCA9IDE7CQkJLyogTkI6IG5vIFBDRiBzdXBwb3J0IHlldCAqLworCWNmcGNvdW50ID0gMDsKKworCXNsZWVwZHVyYXRpb24gPSBjb25mLT5saXN0ZW5faW50ZXJ2YWwgKiBpbnR2YWw7CisJaWYgKHNsZWVwZHVyYXRpb24gPD0gMCkKKwkJc2xlZXBkdXJhdGlvbiA9IGludHZhbDsKKworCS8qCisJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKKwkgKiBUU0YgYW5kIGNhbGN1bGF0ZSBkdGltK2NmcCBzdGF0ZSBmb3IgdGhlIHJlc3VsdC4KKwkgKi8KKwl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOworCXRzZnR1ID0gVFNGX1RPX1RVKHRzZj4+MzIsIHRzZikgKyBGVURHRTsKKwlkbyB7CisJCW5leHR0YnR0ICs9IGludHZhbDsKKwkJaWYgKC0tZHRpbWNvdW50IDwgMCkgeworCQkJZHRpbWNvdW50ID0gZHRpbXBlcmlvZCAtIDE7CisJCQlpZiAoLS1jZnBjb3VudCA8IDApCisJCQkJY2ZwY291bnQgPSBjZnBwZXJpb2QgLSAxOworCQl9CisJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CisKKwlicy5ic19pbnR2YWwgPSBpbnR2YWw7CisJYnMuYnNfbmV4dHRidHQgPSBuZXh0dGJ0dDsKKwlicy5ic19kdGltcGVyaW9kID0gZHRpbXBlcmlvZCppbnR2YWw7CisJYnMuYnNfbmV4dGR0aW0gPSBicy5ic19uZXh0dGJ0dCArIGR0aW1jb3VudCppbnR2YWw7CisJYnMuYnNfY2ZwcGVyaW9kID0gY2ZwcGVyaW9kKmJzLmJzX2R0aW1wZXJpb2Q7CisJYnMuYnNfY2ZwbmV4dCA9IGJzLmJzX25leHRkdGltICsgY2ZwY291bnQqYnMuYnNfZHRpbXBlcmlvZDsKKwlicy5ic19jZnBtYXhkdXJhdGlvbiA9IDA7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJlYWNvbnMgdG8gbWlzcyogYmVmb3JlIHRha2luZworCSAqIGEgQk1JU1MgaW50ZXJydXB0LiBUaGUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQgaW4gVFUgc28gd2Ugb25seQorCSAqIG5lZWQgY2FsY3VsYXRlIGJhc2VkCW9uIHRoZSBiZWFjb24gaW50ZXJ2YWwuICBOb3RlIHRoYXQgd2UgY2xhbXAgdGhlCisJICogcmVzdWx0IHRvIGF0IG1vc3QgMTUgYmVhY29ucy4KKwkgKi8KKwlpZiAoc2xlZXBkdXJhdGlvbiA+IGludHZhbCkgeworCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IGNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAqCisJCQlBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAvIDI7CiAJfSBlbHNlIHsKLQkJb3Btb2RlID0gc2MtPnNjX2FoLT5haF9vcG1vZGU7CisJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gRElWX1JPVU5EX1VQKGNvbmYtPmJtaXNzX3RpbWVvdXQsIGludHZhbCk7CisJCWlmIChicy5ic19ibWlzc3RocmVzaG9sZCA+IDE1KQorCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSAxNTsKKwkJZWxzZSBpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPD0gMCkKKwkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTsKIAl9CiAKLQltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcpKTsKKwkvKgorCSAqIENhbGN1bGF0ZSBzbGVlcCBkdXJhdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgZ2l2ZW4gaW4gbXMuCisJICogV2UgZW5zdXJlIGEgbXVsdGlwbGUgb2YgdGhlIGJlYWNvbiBwZXJpb2QgaXMgdXNlZC4gQWxzbywgaWYgdGhlIHNsZWVwCisJICogZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcworCSAqIHRvIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiB0aGF0LgorCSAqCisJICogWFhYIGZpeGVkIGF0IDEwMG1zCisJICovCiAKKwlicy5ic19zbGVlcGR1cmF0aW9uID0gcm91bmR1cChJRUVFODAyMTFfTVNfVE9fVFUoMTAwKSwgc2xlZXBkdXJhdGlvbik7CisJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQorCQlicy5ic19zbGVlcGR1cmF0aW9uID0gYnMuYnNfZHRpbXBlcmlvZDsKKworCS8qIFRTRiBvdXQgb2YgcmFuZ2UgdGhyZXNob2xkIGZpeGVkIGF0IDEgc2Vjb25kICovCisJYnMuYnNfdHNmb29yX3RocmVzaG9sZCA9IEFUSDlLX1RTRk9PUl9USFJFU0hPTEQ7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwgInRzZjogJWxsdSB0c2Z0dTogJXVcbiIsIHRzZiwgdHNmdHUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkiYm1pc3M6ICV1IHNsZWVwOiAldSBjZnAtcGVyaW9kOiAldSBtYXhkdXI6ICV1IG5leHQ6ICV1XG4iLAorCQlicy5ic19ibWlzc3RocmVzaG9sZCwgYnMuYnNfc2xlZXBkdXJhdGlvbiwKKwkJYnMuYnNfY2ZwcGVyaW9kLCBicy5ic19jZnBtYXhkdXJhdGlvbiwgYnMuYnNfY2ZwbmV4dCk7CisKKwkvKiBTZXQgdGhlIGNvbXB1dGVkIFNUQSBiZWFjb24gdGltZXJzICovCisKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOworCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhzYy0+c2NfYWgsICZicyk7CisJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgICBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYsCisJCQkJICAgIHN0cnVjdCBhdGhfdmlmICphdnAsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJdTY0IHRzZjsKKwl1MzIgdHNmdHUsIGludHZhbCwgbmV4dHRidHQ7CisKKwlpbnR2YWwgPSBjb25mLT5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EOworCisJLyogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgVFNGICovCisKKwluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOworCWlmIChuZXh0dGJ0dCA9PSAwKQorICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gaW50dmFsOworICAgICAgICBlbHNlIGlmIChpbnR2YWwpCisgICAgICAgICAgICAgICAgbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOworCisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoc2MtPnNjX2FoKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSgodTMyKSh0c2Y+PjMyKSwgKHUzMil0c2YpICsgRlVER0U7CisJZG8geworCQluZXh0dGJ0dCArPSBpbnR2YWw7CisJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCisJCW5leHR0YnR0LCBpbnR2YWwsIGNvbmYtPmJlYWNvbl9pbnRlcnZhbCk7CisKKwkvKgorCSAqIEluIElCU1MgbW9kZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYnV0IG9ubHkgZW5hYmxlIFNXQkEgaW50ZXJydXB0cworCSAqIGlmIHdlIG5lZWQgdG8gbWFudWFsbHkgcHJlcGFyZSBiZWFjb24gZnJhbWVzLiAgT3RoZXJ3aXNlIHdlIHVzZSBhCisJICogc2VsZi1saW5rZWQgdHggZGVzY3JpcHRvciBhbmQgbGV0IHRoZSBoYXJkd2FyZSBkZWFsIHdpdGggdGhpbmdzLgorCSAqLworCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOworCWlmICghKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7CisKKwlhdGhfYmVhY29ucV9jb25maWcoc2MpOworCisJLyogU2V0IHRoZSBjb21wdXRlZCBBREhPQyBiZWFjb24gdGltZXJzICovCisKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOworCWF0aDlrX2h3X2JlYWNvbmluaXQoc2MtPnNjX2FoLCBuZXh0dGJ0dCwgaW50dmFsKTsKKwlzYy0+YmVhY29uLmJtaXNzY250ID0gMDsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CisKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkKKwkJYXRoX2JlYWNvbl9zdGFydF9hZGhvYyhzYywgdmlmKTsKK30KKwordm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKKworCS8qIFNldHVwIHRoZSBiZWFjb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcpKTsKIAljb25mLmJlYWNvbl9pbnRlcnZhbCA9IHNjLT5ody0+Y29uZi5iZWFjb25faW50ID8KIAkJc2MtPmh3LT5jb25mLmJlYWNvbl9pbnQgOiBBVEhfREVGQVVMVF9CSU5UVkFMOwogCWNvbmYubGlzdGVuX2ludGVydmFsID0gMTsKQEAgLTY0MywyMTIgKzcyMCwyNSBAQAogCWNvbmYuZHRpbV9jb3VudCA9IDE7CiAJY29uZi5ibWlzc190aW1lb3V0ID0gQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjb25mLmJlYWNvbl9pbnRlcnZhbDsKIAotCS8qIGV4dHJhY3QgdHN0YW1wIGZyb20gbGFzdCBiZWFjb24gYW5kIGNvbnZlcnQgdG8gVFUgKi8KLQluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOworCWlmICh2aWYpIHsKKwkJc3RydWN0IGF0aF92aWYgKmF2cCA9IChzdHJ1Y3QgYXRoX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CiAKLQkvKiBYWFggY29uZGl0aW9uYWxpemUgbXVsdGktYnNzIHN1cHBvcnQ/ICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qCi0JCSAqIEZvciBtdWx0aS1ic3MgYXAgc3VwcG9ydCBiZWFjb25zIGFyZSBlaXRoZXIgc3RhZ2dlcmVkCi0JCSAqIGV2ZW5seSBvdmVyIE4gc2xvdHMgb3IgYnVyc3QgdG9nZXRoZXIuICBGb3IgdGhlIGZvcm1lcgotCQkgKiBhcnJhbmdlIGZvciB0aGUgU1dCQSB0byBiZSBkZWxpdmVyZWQgZm9yIGVhY2ggc2xvdC4KLQkJICogU2xvdHMgdGhhdCBhcmUgbm90IG9jY3VwaWVkIHdpbGwgZ2VuZXJhdGUgbm90aGluZy4KLQkJICovCi0JCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCi0JCWludHZhbCA9IGNvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKLQkJaW50dmFsIC89IEFUSF9CQ0JVRjsgICAgLyogZm9yIHN0YWdnZXJlZCBiZWFjb25zICovCi0JfSBlbHNlIHsKLQkJaW50dmFsID0gY29uZi5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EOwotCX0KLQotCWlmIChuZXh0dGJ0dCA9PSAwKQkvKiBlLmcuIGZvciBhcCBtb2RlICovCi0JCW5leHR0YnR0ID0gaW50dmFsOwotCWVsc2UgaWYgKGludHZhbCkJLyogTkI6IGNhbiBiZSAwIGZvciBtb25pdG9yIG1vZGUgKi8KLQkJbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJuZXh0dGJ0dCAldSBpbnR2YWwgJXUgKCV1KVxuIiwKLQkJbmV4dHRidHQsIGludHZhbCwgY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JLyogQ2hlY2sgZm9yIE5MODAyMTFfSUZUWVBFX0FQIGFuZCBzY19ub3N0YWJlYWNvbnMgZm9yIFdEUyBjbGllbnQgKi8KLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIGJzOwotCQl1NjQgdHNmOwotCQl1MzIgdHNmdHU7Ci0JCWludCBkdGltcGVyaW9kLCBkdGltY291bnQsIHNsZWVwZHVyYXRpb247Ci0JCWludCBjZnBwZXJpb2QsIGNmcGNvdW50OwotCi0JCS8qCi0JCSAqIFNldHVwIGR0aW0gYW5kIGNmcCBwYXJhbWV0ZXJzIGFjY29yZGluZyB0bwotCQkgKiBsYXN0IGJlYWNvbiB3ZSByZWNlaXZlZCAod2hpY2ggbWF5IGJlIG5vbmUpLgotCQkgKi8KLQkJZHRpbXBlcmlvZCA9IGNvbmYuZHRpbV9wZXJpb2Q7Ci0JCWlmIChkdGltcGVyaW9kIDw9IDApCQkvKiBOQjogMCBpZiBub3Qga25vd24gKi8KLQkJCWR0aW1wZXJpb2QgPSAxOwotCQlkdGltY291bnQgPSBjb25mLmR0aW1fY291bnQ7Ci0JCWlmIChkdGltY291bnQgPj0gZHRpbXBlcmlvZCkJLyogTkI6IHNhbml0eSBjaGVjayAqLwotCQkJZHRpbWNvdW50ID0gMDsKLQkJY2ZwcGVyaW9kID0gMTsJCQkvKiBOQjogbm8gUENGIHN1cHBvcnQgeWV0ICovCi0JCWNmcGNvdW50ID0gMDsKLQotCQlzbGVlcGR1cmF0aW9uID0gY29uZi5saXN0ZW5faW50ZXJ2YWwgKiBpbnR2YWw7Ci0JCWlmIChzbGVlcGR1cmF0aW9uIDw9IDApCi0JCQlzbGVlcGR1cmF0aW9uID0gaW50dmFsOwotCi0jZGVmaW5lIEZVREdFIDIKLQkJLyoKLQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJICogVFNGIGFuZCBjYWxjdWxhdGUgZHRpbStjZnAgc3RhdGUgZm9yIHRoZSByZXN1bHQuCi0JCSAqLwotCQl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7Ci0JCXRzZnR1ID0gVFNGX1RPX1RVKHRzZj4+MzIsIHRzZikgKyBGVURHRTsKLQkJZG8gewotCQkJbmV4dHRidHQgKz0gaW50dmFsOwotCQkJaWYgKC0tZHRpbWNvdW50IDwgMCkgewotCQkJCWR0aW1jb3VudCA9IGR0aW1wZXJpb2QgLSAxOwotCQkJCWlmICgtLWNmcGNvdW50IDwgMCkKLQkJCQkJY2ZwY291bnQgPSBjZnBwZXJpb2QgLSAxOwotCQkJfQotCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLSN1bmRlZiBGVURHRQotCQltZW1zZXQoJmJzLCAwLCBzaXplb2YoYnMpKTsKLQkJYnMuYnNfaW50dmFsID0gaW50dmFsOwotCQlicy5ic19uZXh0dGJ0dCA9IG5leHR0YnR0OwotCQlicy5ic19kdGltcGVyaW9kID0gZHRpbXBlcmlvZCppbnR2YWw7Ci0JCWJzLmJzX25leHRkdGltID0gYnMuYnNfbmV4dHRidHQgKyBkdGltY291bnQqaW50dmFsOwotCQlicy5ic19jZnBwZXJpb2QgPSBjZnBwZXJpb2QqYnMuYnNfZHRpbXBlcmlvZDsKLQkJYnMuYnNfY2ZwbmV4dCA9IGJzLmJzX25leHRkdGltICsgY2ZwY291bnQqYnMuYnNfZHRpbXBlcmlvZDsKLQkJYnMuYnNfY2ZwbWF4ZHVyYXRpb24gPSAwOwotCi0JCS8qCi0JCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJlYWNvbnMgdG8gbWlzcwotCQkgKiBiZWZvcmUgdGFraW5nIGEgQk1JU1MgaW50ZXJydXB0LiAgVGhlIGNvbmZpZ3VyYXRpb24KLQkJICogaXMgc3BlY2lmaWVkIGluIFRVIHNvIHdlIG9ubHkgbmVlZCBjYWxjdWxhdGUgYmFzZWQKLQkJICogb24gdGhlIGJlYWNvbiBpbnRlcnZhbC4gIE5vdGUgdGhhdCB3ZSBjbGFtcCB0aGUKLQkJICogcmVzdWx0IHRvIGF0IG1vc3QgMTUgYmVhY29ucy4KLQkJICovCi0JCWlmIChzbGVlcGR1cmF0aW9uID4gaW50dmFsKSB7Ci0JCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IGNvbmYubGlzdGVuX2ludGVydmFsICoKLQkJCQlBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAvIDI7Ci0JCX0gZWxzZSB7Ci0JCQlicy5ic19ibWlzc3RocmVzaG9sZCA9Ci0JCQkJRElWX1JPVU5EX1VQKGNvbmYuYm1pc3NfdGltZW91dCwgaW50dmFsKTsKLQkJCWlmIChicy5ic19ibWlzc3RocmVzaG9sZCA+IDE1KQotCQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTU7Ci0JCQllbHNlIGlmIChicy5ic19ibWlzc3RocmVzaG9sZCA8PSAwKQotCQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTsKKwkJc3dpdGNoKGF2cC0+YXZfb3Btb2RlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQlhdGhfYmVhY29uX2NvbmZpZ19hcChzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHNjLCAmY29uZiwgYXZwLCB2aWYpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWF0aF9iZWFjb25fY29uZmlnX3N0YShzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAorCQkJCSJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvKgotCQkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uICBUaGUgY29uZmlndXJhdGlvbiBpcwotCQkgKiBnaXZlbiBpbiBtcy4gIFdlIGluc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24KLQkJICogcGVyaW9kIGlzIHVzZWQuICBBbHNvLCBpZiB0aGUgc2xlZXAgZHVyYXRpb24gaXMKLQkJICogZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcwotCQkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KLQkJICoKLQkJICogWFhYIGZpeGVkIGF0IDEwMG1zCi0JCSAqLwotCi0JCWJzLmJzX3NsZWVwZHVyYXRpb24gPSByb3VuZHVwKElFRUU4MDIxMV9NU19UT19UVSgxMDApLAotCQkJCQkgICAgICBzbGVlcGR1cmF0aW9uKTsKLQkJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkidHNmICVsbHUgIgotCQkJInRzZjp0dSAldSAiCi0JCQkiaW50dmFsICV1ICIKLQkJCSJuZXh0dGJ0dCAldSAiCi0JCQkiZHRpbSAldSAiCi0JCQkibmV4dGR0aW0gJXUgIgotCQkJImJtaXNzICV1ICIKLQkJCSJzbGVlcCAldSAiCi0JCQkiY2ZwOnBlcmlvZCAldSAiCi0JCQkibWF4ZHVyICV1ICIKLQkJCSJuZXh0ICV1ICIKLQkJCSJ0aW1vZmZzZXQgJXVcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCQlicy5ic19pbnR2YWwsCi0JCQlicy5ic19uZXh0dGJ0dCwKLQkJCWJzLmJzX2R0aW1wZXJpb2QsCi0JCQlicy5ic19uZXh0ZHRpbSwKLQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkLAotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJCWJzLmJzX2NmcHBlcmlvZCwKLQkJCWJzLmJzX2NmcG1heGR1cmF0aW9uLAotCQkJYnMuYnNfY2ZwbmV4dCwKLQkJCWJzLmJzX3RpbW9mZnNldAotCQkJKTsKLQotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhhaCwgJmJzKTsKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7Ci0JfSBlbHNlIHsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWlmIChuZXh0dGJ0dCA9PSBpbnR2YWwpCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkvKgotCQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJCSAqIFRTRgotCQkJICovCi0jZGVmaW5lIEZVREdFIDIKLQkJCWlmICghKGludHZhbCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpKSB7Ci0JCQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQkJCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLAotCQkJCQkodTMyKXRzZikgKyBGVURHRTsKLQkJCQlkbyB7Ci0JCQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLQkJCX0KLSN1bmRlZiBGVURHRQotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCQkJbmV4dHRidHQsCi0JCQkJaW50dmFsICYgfkFUSDlLX0JFQUNPTl9SRVNFVF9UU0YsCi0JCQkJY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JCQkvKgotCQkJICogSW4gSUJTUyBtb2RlIGVuYWJsZSB0aGUgYmVhY29uIHRpbWVycyBidXQgb25seQotCQkJICogZW5hYmxlIFNXQkEgaW50ZXJydXB0cyBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0JCQkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKLQkJCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUKLQkJCSAqIGRlYWwgd2l0aCB0aGluZ3MuCi0JCQkgKi8KLQkJCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOwotCQkJaWYgKCEoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7Ci0JCQlhdGhfYmVhY29ucV9jb25maWcoc2MpOwotCQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQkvKgotCQkJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kCi0JCQkgKiBTV0JBIGludGVycnVwdHMgdG8gcHJlcGFyZSBiZWFjb24gZnJhbWVzLgotCQkJICovCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKLQkJCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsgICAvKiBiZWFjb24gcHJlcGFyZSAqLwotCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKLQkJfQotCQlhdGg5a19od19iZWFjb25pbml0KGFoLCBuZXh0dGJ0dCwgaW50dmFsKTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOwotCQkvKgotCQkgKiBXaGVuIHVzaW5nIGEgc2VsZi1saW5rZWQgYmVhY29uIGRlc2NyaXB0b3IgaW4KLQkJICogaWJzcyBtb2RlIGxvYWQgaXQgb25jZSBoZXJlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JCSAgICAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIDApOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKIAl9CiB9Ci0KLXZvaWQgYXRoX2JlYWNvbl9zeW5jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCi17Ci0JLyoKLQkgKiBSZXN5bmMgYmVhY29uIHRpbWVycyB1c2luZyB0aGUgdHNmIG9mIHRoZQotCSAqIGJlYWNvbiBmcmFtZSB3ZSBqdXN0IHJlY2VpdmVkLgotCSAqLwotCWF0aF9iZWFjb25fY29uZmlnKHNjLCBpZl9pZCk7Ci0Jc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTlM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuYwppbmRleCAzYzc0NTRmLi5jOTQ0NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmMKQEAgLTE0LDEyICsxNCw3IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotc3RhdGljIGNvbnN0IGludDE2X3QgTk9JU0VfRkxPT1JbXSA9IHsgLTk2LCAtOTMsIC05OCwgLTk2LCAtOTMsIC05NiB9OworI2luY2x1ZGUgImF0aDlrLmgiCiAKIC8qIFdlIGNhbiB0dW5lIHRoaXMgYXMgd2UgZ28gYnkgbW9uaXRvcmluZyByZWFsbHkgbG93IHZhbHVlcyAqLwogI2RlZmluZSBBVEg5S19ORl9UT09fTE9XCS02MApAQCAtMjgsNyArMjMsNyBAQAogICogaXMgaW5jb3JyZWN0IGFuZCB3ZSBzaG91bGQgdXNlIHRoZSBzdGF0aWMgTkYgdmFsdWUuIExhdGVyIHdlIGNhbiB0cnkgdG8KICAqIGZpbmQgb3V0IHdoeSB0aGV5IGFyZSByZXBvcnRpbmcgdGhlc2UgdmFsdWVzICovCiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X25mX2luX3JhbmdlKHN0cnVjdCBhdGhfaGFsICphaCwgczE2IG5mKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfbmZfaW5fcmFuZ2Uoc3RydWN0IGF0aF9odyAqYWgsIHMxNiBuZikKIHsKIAlpZiAobmYgPiBBVEg5S19ORl9UT09fTE9XKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKQEAgLTkxLDcgKzg2LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2RvX2dldG5mKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2RvX2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgaW50MTZfdCBuZmFycmF5W05VTV9ORl9SRUFESU5HU10pCiB7CiAJaW50MTZfdCBuZjsKQEAgLTEwNywyNyArMTAyLDI5IEBACiAJCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAwXSBpcyAlZFxuIiwgbmYpOwogCW5mYXJyYXlbMF0gPSBuZjsKIAotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0NDQSksCi0JCQlBUjkyODBfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKLQllbHNlCi0JCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKLQkJCUFSX1BIWV9DSDFfTUlOQ0NBX1BXUik7CisJaWYgKCFBUl9TUkVWXzkyODUoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLAorCQkJCQlBUjkyODBfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKKwkJZWxzZQorCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOwogCi0JaWYgKG5mICYgMHgxMDApCi0JCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbMV0gPSBuZjsKLQotCWlmICghQVJfU1JFVl85MjgwKGFoKSkgewotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0NDQSksCi0JCQlBUl9QSFlfQ0gyX01JTkNDQV9QV1IpOwogCQlpZiAobmYgJiAweDEwMCkKIAkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7Ci0JCW5mYXJyYXlbMl0gPSBuZjsKKwkJCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKKwkJbmZhcnJheVsxXSA9IG5mOworCisJCWlmICghQVJfU1JFVl85MjgwKGFoKSkgeworCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gyX01JTkNDQV9QV1IpOworCQkJaWYgKG5mICYgMHgxMDApCisJCQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAyXSBpcyAlZFxuIiwgbmYpOworCQkJbmZhcnJheVsyXSA9IG5mOworCQl9CiAJfQogCiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCkBAIC0xNDMsNTggKzE0MCw1MiBAQAogCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMF0gaXMgJWRcbiIsIG5mKTsKIAluZmFycmF5WzNdID0gbmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9FWFRfQ0NBKSwKLQkJCUFSOTI4MF9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKLQllbHNlCi0JCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfRVhUX0NDQSksCi0JCQlBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKKwlpZiAoIUFSX1NSRVZfOTI4NShhaCkpIHsKKwkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAorCQkJCQlBUjkyODBfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7CisJCWVsc2UKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfRVhUX0NDQSksCisJCQkJCUFSX1BIWV9DSDFfRVhUX01JTkNDQV9QV1IpOwogCi0JaWYgKG5mICYgMHgxMDApCi0JCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbNF0gPSBuZjsKLQotCWlmICghQVJfU1JFVl85MjgwKGFoKSkgewotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0VYVF9DQ0EpLAotCQkJQVJfUEhZX0NIMl9FWFRfTUlOQ0NBX1BXUik7CiAJCWlmIChuZiAmIDB4MTAwKQogCQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKLQkJbmZhcnJheVs1XSA9IG5mOworCQkJCSJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOworCQluZmFycmF5WzRdID0gbmY7CisKKwkJaWYgKCFBUl9TUkVWXzkyODAoYWgpKSB7CisJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0VYVF9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gyX0VYVF9NSU5DQ0FfUFdSKTsKKwkJCWlmIChuZiAmIDB4MTAwKQorCQkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKKwkJCW5mYXJyYXlbNV0gPSBuZjsKKwkJfQogCX0KIH0KIAotc3RhdGljIGJvb2wgZ2V0Tm9pc2VGbG9vclRocmVzaChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCitzdGF0aWMgYm9vbCBnZXROb2lzZUZsb29yVGhyZXNoKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQlpbnQxNl90ICpuZnQpCiB7Ci0Jc3dpdGNoIChjaGFuLT5jaGFubW9kZSkgewotCWNhc2UgQ0hBTk5FTF9BOgotCWNhc2UgQ0hBTk5FTF9BX0hUMjA6Ci0JY2FzZSBDSEFOTkVMX0FfSFQ0MFBMVVM6Ci0JY2FzZSBDSEFOTkVMX0FfSFQ0ME1JTlVTOgotCQkqbmZ0ID0gKGludDhfdClhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTkZUSFJFU0hfNSk7CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQkqbmZ0ID0gKGludDhfdClhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX05GVEhSRVNIXzUpOwogCQlicmVhazsKLQljYXNlIENIQU5ORUxfQjoKLQljYXNlIENIQU5ORUxfRzoKLQljYXNlIENIQU5ORUxfR19IVDIwOgotCWNhc2UgQ0hBTk5FTF9HX0hUNDBQTFVTOgotCWNhc2UgQ0hBTk5FTF9HX0hUNDBNSU5VUzoKLQkJKm5mdCA9IChpbnQ4X3QpYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX05GVEhSRVNIXzIpOworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJKm5mdCA9IChpbnQ4X3QpYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF8yKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgZmxhZ3MgMHgleFxuIiwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKKwkJQlVHX09OKDEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldHVwX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldHVwX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgICBzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsKQogewogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCksCkBAIC0yMjgsMTAgKzIxOSw5IEBACiAJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0RPX0NBTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgICBzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAlhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihhaCwgY3VyckNhbCk7CkBAIC0yMzksMjMgKzIyOSwyMSBAQAogCWN1cnJDYWwtPmNhbFN0YXRlID0gQ0FMX1JVTk5JTkc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlhaHAtPmFoX01lYXMwLnNpZ25baV0gPSAwOwotCQlhaHAtPmFoX01lYXMxLnNpZ25baV0gPSAwOwotCQlhaHAtPmFoX01lYXMyLnNpZ25baV0gPSAwOwotCQlhaHAtPmFoX01lYXMzLnNpZ25baV0gPSAwOworCQlhaC0+bWVhczAuc2lnbltpXSA9IDA7CisJCWFoLT5tZWFzMS5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMyLnNpZ25baV0gPSAwOworCQlhaC0+bWVhczMuc2lnbltpXSA9IDA7CiAJfQogCi0JYWhwLT5haF9DYWxTYW1wbGVzID0gMDsKKwlhaC0+Y2FsX3NhbXBsZXMgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19wZXJfY2FsaWJyYXRpb24oc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfcGVyX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgdTggcnhjaGFpbm1hc2ssCiAJCQkJICAgICBzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsLAogCQkJCSAgICAgYm9vbCAqaXNDYWxEb25lKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAkqaXNDYWxEb25lID0gZmFsc2U7CiAKIAlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1JVTk5JTkcpIHsKQEAgLTI2Myw5ICsyNTEsOSBAQAogCQkgICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0RPX0NBTCkpIHsKIAogCQkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsQ29sbGVjdChhaCk7Ci0JCQlhaHAtPmFoX0NhbFNhbXBsZXMrKzsKKwkJCWFoLT5jYWxfc2FtcGxlcysrOwogCi0JCQlpZiAoYWhwLT5haF9DYWxTYW1wbGVzID49IGN1cnJDYWwtPmNhbERhdGEtPmNhbE51bVNhbXBsZXMpIHsKKwkJCWlmIChhaC0+Y2FsX3NhbXBsZXMgPj0gY3VyckNhbC0+Y2FsRGF0YS0+Y2FsTnVtU2FtcGxlcykgewogCQkJCWludCBpLCBudW1DaGFpbnMgPSAwOwogCQkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CiAJCQkJCWlmIChyeGNoYWlubWFzayAmICgxIDw8IGkpKQpAQCAtMjg1LDExMyArMjczLDEwNSBAQAogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorLyogQXNzdW1lcyB5b3UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGNoYW5uZWwgKi8KK3N0YXRpYyBib29sIGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIGVudW0gaGFsX2NhbF90eXBlcyBjYWxUeXBlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0JYm9vbCByZXR2YWwgPSBmYWxzZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKIAotCXN3aXRjaCAoY2FsVHlwZSAmIGFocC0+YWhfc3VwcENhbHMpIHsKLQljYXNlIElRX01JU01BVENIX0NBTDoKLQkJaWYgKCFJU19DSEFOX0IoY2hhbikpCi0JCQlyZXR2YWwgPSB0cnVlOwotCQlicmVhazsKKwlzd2l0Y2ggKGNhbFR5cGUgJiBhaC0+c3VwcF9jYWxzKSB7CisJY2FzZSBJUV9NSVNNQVRDSF9DQUw6IC8qIEJvdGggMiBHSHogYW5kIDUgR0h6IHN1cHBvcnQgT0ZETSAqLworCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFEQ19HQUlOX0NBTDoKIAljYXNlIEFEQ19EQ19DQUw6Ci0JCWlmICghSVNfQ0hBTl9CKGNoYW4pCi0JCSAgICAmJiAhKElTX0NIQU5fMkdIWihjaGFuKSAmJiBJU19DSEFOX0hUMjAoY2hhbikpKQotCQkJcmV0dmFsID0gdHJ1ZTsKKwkJaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWiAmJgorCQkgIGNvbmZfaXNfaHQyMChjb25mKSkKKwkJCXJldHVybiB0cnVlOwogCQlicmVhazsKIAl9Ci0KLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pcWNhbF9jb2xsZWN0KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlhaHAtPmFoX3RvdGFsUG93ZXJNZWFzSVtpXSArPQorCQlhaC0+dG90YWxQb3dlck1lYXNJW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzAoaSkpOwotCQlhaHAtPmFoX3RvdGFsUG93ZXJNZWFzUVtpXSArPQorCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwotCQlhaHAtPmFoX3RvdGFsSXFDb3JyTWVhc1tpXSArPQorCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKLQkJCWFocC0+YWhfQ2FsU2FtcGxlcywgaSwgYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV0sCi0JCQlhaHAtPmFoX3RvdGFsUG93ZXJNZWFzUVtpXSwKLQkJCWFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJCWFoLT5jYWxfc2FtcGxlcywgaSwgYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSwKKwkJCWFoLT50b3RhbFBvd2VyTWVhc1FbaV0sCisJCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2dhaW5jYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF90b3RhbEFkY0lPZGRQaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV0gKz0KIAkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7Ci0JCWFocC0+YWhfdG90YWxBZGNJRXZlblBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0lFdmVuUGhhc2VbaV0gKz0KIAkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMShpKSk7Ci0JCWFocC0+YWhfdG90YWxBZGNRT2RkUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzIoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjUUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNRRXZlblBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzMoaSkpOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIG9kZGk9MHglMDh4OyBldmVuaT0weCUwOHg7ICIKIAkJCSJvZGRxPTB4JTA4eDsgZXZlbnE9MHglMDh4O1xuIiwKLQkJCWFocC0+YWhfQ2FsU2FtcGxlcywgaSwKLQkJCWFocC0+YWhfdG90YWxBZGNJT2RkUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNRT2RkUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjUUV2ZW5QaGFzZVtpXSk7CisJCQlhaC0+Y2FsX3NhbXBsZXMsIGksCisJCQlhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNJRXZlblBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjUUV2ZW5QaGFzZVtpXSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZGNjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZGNjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18wKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzIoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMyhpKSk7CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIiVkOiBDaG4gJWQgb2RkaT0weCUwOHg7IGV2ZW5pPTB4JTA4eDsgIgogCQkJIm9kZHE9MHglMDh4OyBldmVucT0weCUwOHg7XG4iLAotCQkJYWhwLT5haF9DYWxTYW1wbGVzLCBpLAotCQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0pOworCQkJYWgtPmNhbF9zYW1wbGVzLCBpLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pcWNhbGlicmF0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4IG51bUNoYWlucykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2lxY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCBudW1DaGFpbnMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgcG93ZXJNZWFzUSwgcG93ZXJNZWFzSSwgaXFDb3JyTWVhczsKIAl1MzIgcUNvZmZEZW5vbSwgaUNvZmZEZW5vbTsKIAlpbnQzMl90IHFDb2ZmLCBpQ29mZjsKIAlpbnQgaXFDb3JyTmVnLCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bUNoYWluczsgaSsrKSB7Ci0JCXBvd2VyTWVhc0kgPSBhaHAtPmFoX3RvdGFsUG93ZXJNZWFzSVtpXTsKLQkJcG93ZXJNZWFzUSA9IGFocC0+YWhfdG90YWxQb3dlck1lYXNRW2ldOwotCQlpcUNvcnJNZWFzID0gYWhwLT5haF90b3RhbElxQ29yck1lYXNbaV07CisJCXBvd2VyTWVhc0kgPSBhaC0+dG90YWxQb3dlck1lYXNJW2ldOworCQlwb3dlck1lYXNRID0gYWgtPnRvdGFsUG93ZXJNZWFzUVtpXTsKKwkJaXFDb3JyTWVhcyA9IGFoLT50b3RhbElxQ29yck1lYXNbaV07CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIlN0YXJ0aW5nIElRIENhbCBhbmQgQ29ycmVjdGlvbiBmb3IgQ2hhaW4gJWRcbiIsCkBAIC0zOTksNyArMzc5LDcgQEAKIAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCiAJCQkiT3JpZ25hbDogQ2huICVkaXFfY29ycl9tZWFzID0gMHglMDh4XG4iLAotCQkJaSwgYWhwLT5haF90b3RhbElxQ29yck1lYXNbaV0pOworCQkJaSwgYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSk7CiAKIAkJaXFDb3JyTmVnID0gMDsKIApAQCAtNDU3LDE3ICs0MzcsMTYgQEAKIAkJICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4IG51bUNoYWlucykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTggbnVtQ2hhaW5zKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIGlPZGRNZWFzT2Zmc2V0LCBpRXZlbk1lYXNPZmZzZXQsIHFPZGRNZWFzT2Zmc2V0LCBxRXZlbk1lYXNPZmZzZXQ7CiAJdTMyIHFHYWluTWlzbWF0Y2gsIGlHYWluTWlzbWF0Y2gsIHZhbCwgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlpT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNJT2RkUGhhc2VbaV07Ci0JCWlFdmVuTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNJRXZlblBoYXNlW2ldOwotCQlxT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNRT2RkUGhhc2VbaV07Ci0JCXFFdmVuTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNRRXZlblBoYXNlW2ldOworCQlpT2RkTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0lPZGRQaGFzZVtpXTsKKwkJaUV2ZW5NZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjSUV2ZW5QaGFzZVtpXTsKKwkJcU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNRT2RkUGhhc2VbaV07CisJCXFFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY1FFdmVuUGhhc2VbaV07CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIlN0YXJ0aW5nIEFEQyBHYWluIENhbCBmb3IgQ2hhaW4gJWRcbiIsIGkpOwpAQCAtNTE1LDIxICs0OTQsMjAgQEAKIAkJICBBUl9QSFlfTkVXX0FEQ19HQUlOX0NPUlJfRU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4IG51bUNoYWlucykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19kY2NhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHU4IG51bUNoYWlucykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBpT2RkTWVhc09mZnNldCwgaUV2ZW5NZWFzT2Zmc2V0LCB2YWwsIGk7CiAJaW50MzJfdCBxT2RkTWVhc09mZnNldCwgcUV2ZW5NZWFzT2Zmc2V0LCBxRGNNaXNtYXRjaCwgaURjTWlzbWF0Y2g7CiAJY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YSA9Ci0JCWFocC0+YWhfY2FsX2xpc3RfY3Vyci0+Y2FsRGF0YTsKKwkJYWgtPmNhbF9saXN0X2N1cnItPmNhbERhdGE7CiAJdTMyIG51bVNhbXBsZXMgPQogCQkoMSA8PCAoY2FsRGF0YS0+Y2FsQ291bnRNYXggKyA1KSkgKiBjYWxEYXRhLT5jYWxOdW1TYW1wbGVzOwogCiAJZm9yIChpID0gMDsgaSA8IG51bUNoYWluczsgaSsrKSB7Ci0JCWlPZGRNZWFzT2Zmc2V0ID0gYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldOwotCQlpRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldOwotCQlxT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXTsKLQkJcUV2ZW5NZWFzT2Zmc2V0ID0gYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXTsKKwkJaU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXTsKKwkJaUV2ZW5NZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldOworCQlxT2RkTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldOworCQlxRXZlbk1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV07CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIlN0YXJ0aW5nIEFEQyBEQyBPZmZzZXQgQ2FsIGZvciBDaGFpbiAlZFxuIiwgaSk7CkBAIC01NzMsNTMgKzU1MSw0MiBAQAogCQkgIEFSX1BIWV9ORVdfQURDX0RDX09GRlNFVF9DT1JSX0VOQUJMRSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgYm9vbCAqaXNDYWxEb25lKQorLyogVGhpcyBpcyBkb25lIGZvciB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgY2hhbm5lbCAqLworYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9Ci0JCWF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFocC0+YWhfY2FsX2xpc3RfY3VycjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsID0gYWgtPmNhbF9saXN0X2N1cnI7CiAKLQkqaXNDYWxEb25lID0gdHJ1ZTsKKwlpZiAoIWFoLT5jdXJjaGFuKQorCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICghQVJfU1JFVl85MTAwKGFoKSAmJiAhQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChjdXJyQ2FsID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChpY2hhbiA9PSBOVUxMKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgJXUvMHgleDsgbm8gbWFwcGluZ1xuIiwKLQkJCWNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgIT0gQ0FMX0RPTkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIkNhbGlicmF0aW9uIHN0YXRlIGluY29ycmVjdCwgJWRcbiIsCiAJCQljdXJyQ2FsLT5jYWxTdGF0ZSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAJfQogCi0KLQlpZiAoIWF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgY2hhbiwgY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSkpCi0JCXJldHVybjsKKwlpZiAoIWF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSkpCisJCXJldHVybiB0cnVlOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiUmVzZXR0aW5nIENhbCAlZCBzdGF0ZSBmb3IgY2hhbm5lbCAldS8weCV4XG4iLAotCQljdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlLCBjaGFuLT5jaGFubmVsLAotCQljaGFuLT5jaGFubmVsRmxhZ3MpOworCQkiUmVzZXR0aW5nIENhbCAlZCBzdGF0ZSBmb3IgY2hhbm5lbCAldVxuIiwKKwkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSwgY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCi0JaWNoYW4tPkNhbFZhbGlkICY9IH5jdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlOworCWFoLT5jdXJjaGFuLT5DYWxWYWxpZCAmPSB+Y3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZTsKIAljdXJyQ2FsLT5jYWxTdGF0ZSA9IENBTF9XQUlUSU5HOwogCi0JKmlzQ2FsRG9uZSA9IGZhbHNlOworCXJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBhdGg5a19od19zdGFydF9uZmNhbChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCiAJCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRU5BQkxFX05GKTsKQEAgLTYyOCw3ICs1OTUsNyBAQAogCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9ORik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit2b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7CiAJaW50IGksIGo7CkBAIC02NDMsMTYgKzYxMCwxNCBAQAogCX07CiAJdTggY2hhaW5tYXNrOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCisJaWYgKEFSX1NSRVZfOTI4NShhaCkpCisJCWNoYWlubWFzayA9IDB4OTsKKwllbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpKQogCQljaGFpbm1hc2sgPSAweDFCOwogCWVsc2UKIAkJY2hhaW5tYXNrID0gMHgzRjsKIAotI2lmZGVmIEFUSF9ORl9QRVJfQ0hBTgotCWggPSBjaGFuLT5uZkNhbEhpc3Q7Ci0jZWxzZQogCWggPSBhaC0+bmZDYWxIaXN0OwotI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKIAkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7CkBAIC02ODYsMTggKzY1MSwxMyBAQAogCX0KIH0KIAotaW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitpbnQxNl90IGF0aDlrX2h3X2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJaW50MTZfdCBuZiwgbmZUaHJlc2g7CiAJaW50MTZfdCBuZmFycmF5W05VTV9ORl9SRUFESU5HU10gPSB7IDAgfTsKIAlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCAqaDsKLQl1OCBjaGFpbm1hc2s7Ci0KLQlpZiAoQVJfU1JFVl85MjgwKGFoKSkKLQkJY2hhaW5tYXNrID0gMHgxQjsKLQllbHNlCi0JCWNoYWlubWFzayA9IDB4M0Y7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjID0gY2hhbi0+Y2hhbjsKIAogCWNoYW4tPmNoYW5uZWxGbGFncyAmPSAofkNIQU5ORUxfQ1dfSU5UKTsKIAlpZiAoUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgJiBBUl9QSFlfQUdDX0NPTlRST0xfTkYpIHsKQEAgLTcwOSw3ICs2NjksNyBAQAogCX0gZWxzZSB7CiAJCWF0aDlrX2h3X2RvX2dldG5mKGFoLCBuZmFycmF5KTsKIAkJbmYgPSBuZmFycmF5WzBdOwotCQlpZiAoZ2V0Tm9pc2VGbG9vclRocmVzaChhaCwgY2hhbiwgJm5mVGhyZXNoKQorCQlpZiAoZ2V0Tm9pc2VGbG9vclRocmVzaChhaCwgYy0+YmFuZCwgJm5mVGhyZXNoKQogCQkgICAgJiYgbmYgPiBuZlRocmVzaCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJCSJub2lzZSBmbG9vciBmYWlsZWQgZGV0ZWN0ZWQ7ICIKQEAgLTcxOSwxMSArNjc5LDcgQEAKIAkJfQogCX0KIAotI2lmZGVmIEFUSF9ORl9QRVJfQ0hBTgotCWggPSBjaGFuLT5uZkNhbEhpc3Q7Ci0jZWxzZQogCWggPSBhaC0+bmZDYWxIaXN0OwotI2VuZGlmCiAKIAlhdGg5a19od191cGRhdGVfbmZjYWxfaGlzdF9idWZmZXIoaCwgbmZhcnJheSk7CiAJY2hhbi0+cmF3Tm9pc2VGbG9vciA9IGhbMF0ucHJpdk5GOwpAQCAtNzMxLDcgKzY4Nyw3IEBACiAJcmV0dXJuIGNoYW4tPnJhd05vaXNlRmxvb3I7CiB9CiAKLXZvaWQgYXRoOWtfaW5pdF9uZmNhbF9oaXN0X2J1ZmZlcihzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGksIGo7CiAKQEAgLTc0NSwyNiArNzAxLDE2IEBACiAJCQkJQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRTsKIAkJfQogCX0KLQlyZXR1cm47CiB9CiAKLXMxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuOwogCXMxNiBuZjsKIAotCWljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKLQlpZiAoaWNoYW4gPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQlyZXR1cm4gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7Ci0JfQotCWlmIChpY2hhbi0+cmF3Tm9pc2VGbG9vciA9PSAwKSB7Ci0JCWVudW0gd2lyZWxlc3NfbW9kZSBtb2RlID0gYXRoOWtfaHdfY2hhbjJ3bW9kZShhaCwgY2hhbik7Ci0JCW5mID0gTk9JU0VfRkxPT1JbbW9kZV07Ci0JfSBlbHNlCi0JCW5mID0gaWNoYW4tPnJhd05vaXNlRmxvb3I7CisJaWYgKGNoYW4tPnJhd05vaXNlRmxvb3IgPT0gMCkKKwkJbmYgPSAtOTY7CisJZWxzZQorCQluZiA9IGNoYW4tPnJhd05vaXNlRmxvb3I7CiAKIAlpZiAoIWF0aDlrX2h3X25mX2luX3JhbmdlKGFoLCBuZikpCiAJCW5mID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7CkBAIC03NzIsNTMgKzcxOCwzNCBAQAogCXJldHVybiBuZjsKIH0KIAotYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCi0JCQlib29sICppc0NhbERvbmUpCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfdGVtcF9jb21wZW5zYXRpb24oc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsID0gYWhwLT5haF9jYWxfbGlzdF9jdXJyOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7CisJdTMyIHJkZGF0YSwgaTsKKwlpbnQgZGVsdGEsIGN1cnJQREFEQywgcmVndmFsOwogCi0JKmlzQ2FsRG9uZSA9IHRydWU7CisJcmRkYXRhID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNCk7CiAKLQlpZiAoaWNoYW4gPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBubyBtYXBwaW5nXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KKwljdXJyUERBREMgPSBNUyhyZGRhdGEsIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19PVVQpOwogCi0JaWYgKGN1cnJDYWwgJiYKLQkgICAgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9SVU5OSU5HIHx8Ci0JICAgICBjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfV0FJVElORykpIHsKLQkJYXRoOWtfaHdfcGVyX2NhbGlicmF0aW9uKGFoLCBpY2hhbiwgcnhjaGFpbm1hc2ssIGN1cnJDYWwsCi0JCQkJCSBpc0NhbERvbmUpOwotCQlpZiAoKmlzQ2FsRG9uZSkgewotCQkJYWhwLT5haF9jYWxfbGlzdF9jdXJyID0gY3VyckNhbCA9IGN1cnJDYWwtPmNhbE5leHQ7CisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfREFDX0hQV1JfNUcpKQorCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNCkgLyA4OworCWVsc2UKKwkJZGVsdGEgPSAoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQyArIDUpIC8gMTA7CiAKLQkJCWlmIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfV0FJVElORykgewotCQkJCSppc0NhbERvbmUgPSBmYWxzZTsKLQkJCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgY3VyckNhbCk7Ci0JCQl9CisJaWYgKGRlbHRhICE9IGFoLT5QREFEQ2RlbHRhKSB7CisJCWFoLT5QREFEQ2RlbHRhID0gZGVsdGE7CisJCWZvciAoaSA9IDE7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspIHsKKwkJCXJlZ3ZhbCA9IGFoLT5vcmlnaW5hbEdhaW5baV0gLSBkZWx0YTsKKwkJCWlmIChyZWd2YWwgPCAwKQorCQkJCXJlZ3ZhbCA9IDA7CisKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCwKKwkJCQkJQVJfUEhZX1RYX0dBSU4sIHJlZ3ZhbCk7CiAJCX0KIAl9Ci0KLQlpZiAobG9uZ2NhbCkgewotCQlhdGg5a19od19nZXRuZihhaCwgaWNoYW4pOwotCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5haF9jdXJjaGFuKTsKLQkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOwotCi0JCWlmICgoaWNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQ1dfSU5UKSAhPSAwKSB7Ci0JCQljaGFuLT5jaGFubmVsRmxhZ3MgfD0gQ0hBTk5FTF9DV19JTlQ7Ci0JCQlpY2hhbi0+Y2hhbm5lbEZsYWdzICY9IH5DSEFOTkVMX0NXX0lOVDsKLQkJfQotCX0KLQotCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfOTI4NV9wYV9jYWwoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCiAJdTMyIHJlZ1ZhbDsKQEAgLTkxMyw1OSArODQwLDE3MSBAQAogCiB9CiAKLWJvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJdTggcnhjaGFpbm1hc2ssIGJvb2wgbG9uZ2NhbCwKKwkJCWJvb2wgKmlzQ2FsRG9uZSkKK3sKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsID0gYWgtPmNhbF9saXN0X2N1cnI7CisKKwkqaXNDYWxEb25lID0gdHJ1ZTsKKworCWlmIChjdXJyQ2FsICYmCisJICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAorCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7CisJCWF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihhaCwgY2hhbiwgcnhjaGFpbm1hc2ssIGN1cnJDYWwsCisJCQkJCSBpc0NhbERvbmUpOworCQlpZiAoKmlzQ2FsRG9uZSkgeworCQkJYWgtPmNhbF9saXN0X2N1cnIgPSBjdXJyQ2FsID0gY3VyckNhbC0+Y2FsTmV4dDsKKworCQkJaWYgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9XQUlUSU5HKSB7CisJCQkJKmlzQ2FsRG9uZSA9IGZhbHNlOworCQkJCWF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKGFoLCBjdXJyQ2FsKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChsb25nY2FsKSB7CisJCWlmIChBUl9TUkVWXzkyODUoYWgpICYmIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCisJCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CisKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKQorCQkJYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKGFoKTsKKwkJYXRoOWtfaHdfZ2V0bmYoYWgsIGNoYW4pOworCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5jdXJjaGFuKTsKKwkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOworCisJCWlmIChjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0NXX0lOVCkKKwkJCWNoYW4tPmNoYW5uZWxGbGFncyAmPSB+Q0hBTk5FTF9DV19JTlQ7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGFyOTI4NV9jbGMoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCWlmIChjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0hUMjApIHsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfUEFSQUxMRUxfQ0FMX0VOQUJMRSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfVFVSQk8sIEFSX1BIWV9GQ19EWU4yMDQwX0VOKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCSAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwgMCwgQUhfV0FJVF9USU1FT1VUKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAib2Zmc2V0ICIKKwkJCQkiY2FsaWJyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGluICIKKwkJCQkiMW1zOyBub2lzeSA/P1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9UVVJCTywgQVJfUEhZX0ZDX0RZTjIwNDBfRU4pOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9QQVJBTExFTF9DQUxfRU5BQkxFKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSk7CisJfQorCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFKTsKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKwlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwKKwkJCSAgMCwgQUhfV0FJVF9USU1FT1VUKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsICJvZmZzZXQgY2FsaWJyYXRpb24gIgorCQkJCSJmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyBub2lzeSA/P1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBhdGg5a19od19pbml0X2NhbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKKwlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CisJCWlmICghYXI5Mjg1X2NsYyhhaCwgY2hhbikpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOwogCisJCS8qIEtpY2sgb2ZmIHRoZSBjYWwgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCisJCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAorCQkJCUFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOworCisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLCAwLAorCQkJCQlBSF9XQUlUX1RJTUVPVVQpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyAiCisJCQkJIm5vaXN5IGVudmlyb25tZW50P1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwl9CisKKwkvKiBDYWxpYnJhdGUgdGhlIEFHQyAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKLQkJICBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKwkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKKwkJCUFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOwogCi0JaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsIDApKSB7CisJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsCisJCQkJMCwgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCiAJCQkib2Zmc2V0IGNhbGlicmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBpbiAxbXM7ICIKIAkJCSJub2lzeSBlbnZpcm9ubWVudD9cbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwl9CisKKwkvKiBEbyBQQSBDYWxpYnJhdGlvbiAqLwogCWlmIChBUl9TUkVWXzkyODUoYWgpICYmIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCiAJCWF0aDlrX2h3XzkyODVfcGFfY2FsKGFoKTsKIAorCS8qIERvIE5GIENhbGlicmF0aW9uICovCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCi0JCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAotCQkgIEFSX1BIWV9BR0NfQ09OVFJPTF9ORik7CisJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8CisJCQlBUl9QSFlfQUdDX0NPTlRST0xfTkYpOwogCi0JYWhwLT5haF9jYWxfbGlzdCA9IGFocC0+YWhfY2FsX2xpc3RfbGFzdCA9IGFocC0+YWhfY2FsX2xpc3RfY3VyciA9IE5VTEw7CisJYWgtPmNhbF9saXN0ID0gYWgtPmNhbF9saXN0X2xhc3QgPSBhaC0+Y2FsX2xpc3RfY3VyciA9IE5VTEw7CiAKIAlpZiAoQVJfU1JFVl85MTAwKGFoKSB8fCBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19HQUlOX0NBTCkpIHsKLQkJCUlOSVRfQ0FMKCZhaHAtPmFoX2FkY0dhaW5DYWxEYXRhKTsKLQkJCUlOU0VSVF9DQUwoYWhwLCAmYWhwLT5haF9hZGNHYWluQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIEFEQ19HQUlOX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKKwkJCUlOU0VSVF9DQUwoYWgsICZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIEdhaW4gQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CiAJCX0KLQkJaWYgKGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgY2hhbiwgQURDX0RDX0NBTCkpIHsKLQkJCUlOSVRfQ0FMKCZhaHAtPmFoX2FkY0RjQ2FsRGF0YSk7Ci0JCQlJTlNFUlRfQ0FMKGFocCwgJmFocC0+YWhfYWRjRGNDYWxEYXRhKTsKKwkJaWYgKGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgQURDX0RDX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+YWRjZGNfY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmFkY2RjX2NhbGRhdGEpOwogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBEQyBDYWxpYnJhdGlvbi5cbiIpOwogCQl9Ci0JCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIElRX01JU01BVENIX0NBTCkpIHsKLQkJCUlOSVRfQ0FMKCZhaHAtPmFoX2lxQ2FsRGF0YSk7Ci0JCQlJTlNFUlRfQ0FMKGFocCwgJmFocC0+YWhfaXFDYWxEYXRhKTsKKwkJaWYgKGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgSVFfTUlTTUFUQ0hfQ0FMKSkgeworCQkJSU5JVF9DQUwoJmFoLT5pcV9jYWxkYXRhKTsKKwkJCUlOU0VSVF9DQUwoYWgsICZhaC0+aXFfY2FsZGF0YSk7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJImVuYWJsaW5nIElRIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOwogCQl9CiAKLQkJYWhwLT5haF9jYWxfbGlzdF9jdXJyID0gYWhwLT5haF9jYWxfbGlzdDsKKwkJYWgtPmNhbF9saXN0X2N1cnIgPSBhaC0+Y2FsX2xpc3Q7CiAKLQkJaWYgKGFocC0+YWhfY2FsX2xpc3RfY3VycikKLQkJCWF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKGFoLCBhaHAtPmFoX2NhbF9saXN0X2N1cnIpOworCQlpZiAoYWgtPmNhbF9saXN0X2N1cnIpCisJCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgYWgtPmNhbF9saXN0X2N1cnIpOwogCX0KIAotCWljaGFuLT5DYWxWYWxpZCA9IDA7CisJY2hhbi0+Q2FsVmFsaWQgPSAwOwogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU4OWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIENBTElCX0gKKyNkZWZpbmUgQ0FMSUJfSAorCitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19pbml0X2RjX2NhbDsKKworI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKKyNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKKworI2RlZmluZSBOVU1fTkZfUkVBRElOR1MgICAgICAgNgorI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggNQorCitzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgeworCXUzMiAqaWFfYXJyYXk7CisJdTMyIGlhX3Jvd3M7CisJdTMyIGlhX2NvbHVtbnM7Cit9OworCisjZGVmaW5lIElOSVRfSU5JX0FSUkFZKGluaWFycmF5LCBhcnJheSwgcm93cywgY29sdW1ucykgZG8gewlcCisJCShpbmlhcnJheSktPmlhX2FycmF5ID0gKHUzMiAqKShhcnJheSk7CQlcCisJCShpbmlhcnJheSktPmlhX3Jvd3MgPSAocm93cyk7CQkJXAorCQkoaW5pYXJyYXkpLT5pYV9jb2x1bW5zID0gKGNvbHVtbnMpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU5JX1JBKGluaWFycmF5LCByb3csIGNvbHVtbikgXAorCSgoKGluaWFycmF5KS0+aWFfYXJyYXkpWyhyb3cpICoJKChpbmlhcnJheSktPmlhX2NvbHVtbnMpICsgKGNvbHVtbildKQorCisjZGVmaW5lIElOSVRfQ0FMKF9wZXJDYWwpIGRvIHsJCQkJXAorCQkoX3BlckNhbCktPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CVwKKwkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gTlVMTDsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIElOU0VSVF9DQUwoX2FocCwgX3BlckNhbCkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoX2FocCktPmNhbF9saXN0X2xhc3QgPT0gTlVMTCkgewkJCVwKKwkJCShfYWhwKS0+Y2FsX2xpc3QgPQkJCQlcCisJCQkJKF9haHApLT5jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwlcCisJCQkoKF9haHApLT5jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCSgoX2FocCktPmNhbF9saXN0X2xhc3QpLT5jYWxOZXh0ID0gKF9wZXJDYWwpOyBcCisJCQkoX2FocCktPmNhbF9saXN0X2xhc3QgPSAoX3BlckNhbCk7CQlcCisJCQkoX3BlckNhbCktPmNhbE5leHQgPSAoX2FocCktPmNhbF9saXN0OwlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2VudW0gaGFsX2NhbF90eXBlcyB7CisJQURDX0RDX0lOSVRfQ0FMID0gMHgxLAorCUFEQ19HQUlOX0NBTCA9IDB4MiwKKwlBRENfRENfQ0FMID0gMHg0LAorCUlRX01JU01BVENIX0NBTCA9IDB4OAorfTsKKworZW51bSBoYWxfY2FsX3N0YXRlIHsKKwlDQUxfSU5BQ1RJVkUsCisJQ0FMX1dBSVRJTkcsCisJQ0FMX1JVTk5JTkcsCisJQ0FMX0RPTkUKK307CisKKyNkZWZpbmUgTUlOX0NBTF9TQU1QTEVTICAgICAxCisjZGVmaW5lIE1BWF9DQUxfU0FNUExFUyAgICA2NAorI2RlZmluZSBJTklUX0xPR19DT1VOVCAgICAgIDUKKyNkZWZpbmUgUEVSX01JTl9MT0dfQ09VTlQgICAyCisjZGVmaW5lIFBFUl9NQVhfTE9HX0NPVU5UICAxMAorCitzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIHsKKwllbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZTsKKwl1MzIgY2FsTnVtU2FtcGxlczsKKwl1MzIgY2FsQ291bnRNYXg7CisJdm9pZCAoKmNhbENvbGxlY3QpIChzdHJ1Y3QgYXRoX2h3ICopOworCXZvaWQgKCpjYWxQb3N0UHJvYykgKHN0cnVjdCBhdGhfaHcgKiwgdTgpOworfTsKKworc3RydWN0IGhhbF9jYWxfbGlzdCB7CisJY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKKwllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKK307CisKK3N0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKKwlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07CisJdTggY3VyckluZGV4OworCWludDE2X3QgcHJpdk5GOworCXU4IGludmFsaWRORmNvdW50OworfTsKKworYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitpbnQxNl90IGF0aDlrX2h3X2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3MxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Citib29sIGF0aDlrX2h3X2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAorCQkJYm9vbCAqaXNDYWxEb25lKTsKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCisJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CisKKyNlbmRpZiAvKiBDQUxJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOTU2NmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBDT1JFX0gKLSNkZWZpbmUgQ09SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KLQotI2luY2x1ZGUgImF0aDlrLmgiCi0jaW5jbHVkZSAicmMuaCIKLQotc3RydWN0IGF0aF9ub2RlOwotCi0vKiBNYWNybyB0byBleHBhbmQgc2NhbGFycyB0byA2NC1iaXQgb2JqZWN0cyAqLwotCi0jZGVmaW5lCWl0bzY0KHgpIChzaXplb2YoeCkgPT0gOCkgPwkJCVwKLQkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAoMHhmZikpIDoJXAotCShzaXplb2YoeCkgPT0gMTYpID8JCQkJXAotCSgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmIDB4ZmZmZikgOglcCi0JKChzaXplb2YoeCkgPT0gMzIpID8JCQkJXAotCSAoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmZmZmZmKSA6IFwKLQkgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKQotCi0vKiBpbmNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLwotI2RlZmluZSBJTkNSKF9sLCBfc3opICAgZG8gewkJCVwKLQkJKF9sKSsrOwkJCQlcCi0JCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotLyogZGVjcmVtZW50IHdpdGggd3JhcC1hcm91bmQgKi8KLSNkZWZpbmUgREVDUihfbCwgIF9zeikgIGRvIHsJCQlcCi0JCShfbCktLTsJCQkJXAotCQkoX2wpICY9ICgoX3N6KSAtIDEpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQotI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAotCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAotCQkJQlVHKCk7CQkJXAotCQl9CQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAotCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKLQotI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQotCi1zdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0KLWVudW0gQVRIX0RFQlVHIHsKLQlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCi0JQVRIX0RCR19SRUdfSU8JCT0gMHgwMDAwMDAwMiwKLQlBVEhfREJHX1FVRVVFCQk9IDB4MDAwMDAwMDQsCi0JQVRIX0RCR19FRVBST00JCT0gMHgwMDAwMDAwOCwKLQlBVEhfREJHX0NBTElCUkFURQk9IDB4MDAwMDAwMTAsCi0JQVRIX0RCR19DSEFOTkVMCQk9IDB4MDAwMDAwMjAsCi0JQVRIX0RCR19JTlRFUlJVUFQJPSAweDAwMDAwMDQwLAotCUFUSF9EQkdfUkVHVUxBVE9SWQk9IDB4MDAwMDAwODAsCi0JQVRIX0RCR19BTkkJCT0gMHgwMDAwMDEwMCwKLQlBVEhfREJHX1BPV0VSX01HTVQJPSAweDAwMDAwMjAwLAotCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwNDAwLAotCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDEwMDAsCi0JQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMjAwMCwKLQlBVEhfREJHX0tFWUNBQ0hFCT0gMHgwMDAwNDAwMCwKLQlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDgwMDAsCi0JQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgotfTsKLQotI2RlZmluZSBEQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKLQotI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRwotCi0vKioKLSAqIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIC0gQ29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBpbnRlcnJ1cHRzCi0gKiBAdG90YWw6IFRvdGFsIG5vLiBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBzbyBmYXIKLSAqIEByeG9rOiBSWCB3aXRoIG5vIGVycm9ycwotICogQHJ4ZW9sOiBSWCB3aXRoIG5vIG1vcmUgUlhERVNDIGF2YWlsYWJsZQotICogQHJ4b3JuOiBSWCBGSUZPIG92ZXJydW4KLSAqIEB0eG9rOiBUWCBjb21wbGV0ZWQgYXQgdGhlIHJlcXVlc3RlZCByYXRlCi0gKiBAdHh1cm46IFRYIEZJRk8gdW5kZXJydW4KLSAqIEBtaWI6IE1JQiByZWdzIHJlYWNoaW5nIGl0cyB0aHJlc2hvbGQKLSAqIEByeHBoeWVycjogUlggd2l0aCBwaHkgZXJyb3JzCi0gKiBAcnhfa2V5Y2FjaGVfbWlzczogUlggd2l0aCBrZXkgY2FjaGUgbWlzc2VzCi0gKiBAc3diYTogU29mdHdhcmUgQmVhY29uIEFsZXJ0Ci0gKiBAYm1pc3M6IEJlYWNvbiBNaXNzCi0gKiBAYm5yOiBCZWFjb24gTm90IFJlYWR5Ci0gKiBAY3N0OiBDYXJyaWVyIFNlbnNlIFRJbWVvdXQKLSAqIEBndHQ6IEdsb2JhbCBUWCBUaW1lb3V0Ci0gKiBAdGltOiBSWCBiZWFjb24gVElNIG9jY3VycmVuY2UKLSAqIEBjYWJlbmQ6IFJYIEVuZCBvZiBDQUIgdHJhZmZpYwotICogQGR0aW1zeW5jOiBEVElNIHN5bmMgbG9zc2FnZQotICogQGR0aW06IFJYIEJlYWNvbiB3aXRoIERUSU0KLSAqLwotc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgewotCXUzMiB0b3RhbDsKLQl1MzIgcnhvazsKLQl1MzIgcnhlb2w7Ci0JdTMyIHJ4b3JuOwotCXUzMiB0eG9rOwotCXUzMiB0eGVvbDsKLQl1MzIgdHh1cm47Ci0JdTMyIG1pYjsKLQl1MzIgcnhwaHllcnI7Ci0JdTMyIHJ4X2tleWNhY2hlX21pc3M7Ci0JdTMyIHN3YmE7Ci0JdTMyIGJtaXNzOwotCXUzMiBibnI7Ci0JdTMyIGNzdDsKLQl1MzIgZ3R0OwotCXUzMiB0aW07Ci0JdTMyIGNhYmVuZDsKLQl1MzIgZHRpbXN5bmM7Ci0JdTMyIGR0aW07Ci19OwotCi1zdHJ1Y3QgYXRoX3N0YXRzIHsKLQlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7Ci19OwotCi1zdHJ1Y3QgYXRoOWtfZGVidWcgewotCWludCBkZWJ1Z19tYXNrOwotCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKLQlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwotfTsKLQotdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci12b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywKLQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJICAgIGVudW0gYXRoOWtfaW50IHN0YXR1cykKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BVEg5S19ERUJVRyAqLwotCi1zdHJ1Y3QgYXRoX2NvbmZpZyB7Ci0JdTMyIGF0aF9hZ2dyX3Byb3Q7Ci0JdTE2IHR4cG93bGltaXQ7Ci0JdTE2IHR4cG93bGltaXRfb3ZlcnJpZGU7Ci0JdTggY2FicVJlYWR5dGltZTsKLQl1OCBzd0JlYWNvblByb2Nlc3M7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCi0JCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCi0JCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX2xhc3Rmcm0gPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCi0JCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSkpOwlcCi0JfSB3aGlsZSAoMCkKLQotZW51bSBidWZmZXJfdHlwZSB7Ci0JQlVGX0RBVEEJCT0gQklUKDApLAotCUJVRl9BR0dSCQk9IEJJVCgxKSwKLQlCVUZfQU1QRFUJCT0gQklUKDIpLAotCUJVRl9IVAkJCT0gQklUKDMpLAotCUJVRl9SRVRSWQkJPSBCSVQoNCksCi0JQlVGX1hSRVRSWQkJPSBCSVQoNSksCi0JQlVGX1NIT1JUX1BSRUFNQkxFCT0gQklUKDYpLAotCUJVRl9CQVIJCQk9IEJJVCg3KSwKLQlCVUZfUFNQT0xMCQk9IEJJVCg4KSwKLQlCVUZfQUdHUl9CVVJTVAkJPSBCSVQoOSksCi0JQlVGX0NBTENfQUlSVElNRQk9IEJJVCgxMCksCi19OwotCi1zdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7Ci0JaW50IGJmc19uZnJhbWVzOwkJLyogIyBmcmFtZXMgaW4gYWdncmVnYXRlICovCi0JdTE2IGJmc19hbDsJCQkvKiBsZW5ndGggb2YgYWdncmVnYXRlICovCi0JdTE2IGJmc19mcm1sZW47CQkJLyogbGVuZ3RoIG9mIGZyYW1lICovCi0JaW50IGJmc19zZXFubzsJCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KLQlpbnQgYmZzX3RpZG5vOwkJCS8qIHRpZCBvZiB0aGlzIGZyYW1lICovCi0JaW50IGJmc19yZXRyaWVzOwkJLyogY3VycmVudCByZXRyaWVzICovCi0JdTMyIGJmX3R5cGU7CQkJLyogQlVGXyogKGVudW0gYnVmZmVyX3R5cGUpICovCi0JdTMyIGJmc19rZXlpeDsKLQllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwotfTsKLQotI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCi0jZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCi0jZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgotI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCi0jZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCi0jZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCi0jZGVmaW5lIGJmX3JjcyAgICAgICAgICAJYmZfc3RhdGUuYmZzX3JjcwotI2RlZmluZSBiZl9rZXlpeCAgICAgICAgICAgICAgICBiZl9zdGF0ZS5iZnNfa2V5aXgKLSNkZWZpbmUgYmZfa2V5dHlwZSAgICAgIAliZl9zdGF0ZS5iZnNfa2V5dHlwZQotI2RlZmluZSBiZl9pc2RhdGEoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfREFUQSkKLSNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCi0jZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCi0jZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCi0jZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQotI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQotI2RlZmluZSBiZl9pc3NocHJlYW1ibGUoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9TSE9SVF9QUkVBTUJMRSkKLSNkZWZpbmUgYmZfaXNiYXIoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQkFSKQotI2RlZmluZSBiZl9pc3BzcG9sbChiZikgCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9QU1BPTEwpCi0jZGVmaW5lIGJmX2lzYWdncmJ1cnN0KGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQUdHUl9CVVJTVCkKLQotLyoKLSAqIEFic3RyYWN0aW9uIG9mIGEgY29udGlndW91cyBidWZmZXIgdG8gdHJhbnNtaXQvcmVjZWl2ZS4gIFRoZXJlIGlzIG9ubHkKLSAqIGEgc2luZ2xlIGh3IGRlc2NyaXB0b3IgZW5jYXBzdWxhdGVkIGhlcmUuCi0gKi8KLXN0cnVjdCBhdGhfYnVmIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGFzdDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKLQkJCQkJICAgYW4gYWdncmVnYXRlKSAqLwotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ZnJtOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIGZyYW1lICovCi0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLwotCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KLQlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCi0JZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KLQl1MzIgYmZfc3RhdHVzOwotCXUxNiBiZl9mbGFnczsJCQkvKiB0eCBkZXNjcmlwdG9yIGZsYWdzICovCi0Jc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CS8qIGJ1ZmZlciBzdGF0ZSAqLwotCWRtYV9hZGRyX3QgYmZfZG1hY29udGV4dDsKLX07Ci0KLSNkZWZpbmUgQVRIX1JYQlVGX1JFU0VUKF9iZikgICAgKChfYmYpLT5iZl9zdGF0dXMgPSAwKQotCi0vKiBodyBwcm9jZXNzaW5nIGNvbXBsZXRlLCBkZXNjIHByb2Nlc3NlZCBieSBoYWwgKi8KLSNkZWZpbmUgQVRIX0JVRlNUQVRVU19ET05FICAgICAgMHgwMDAwMDAwMQotLyogaHcgcHJvY2Vzc2luZyBjb21wbGV0ZSwgZGVzYyBob2xkIGZvciBodyAqLwotI2RlZmluZSBBVEhfQlVGU1RBVFVTX1NUQUxFICAgICAweDAwMDAwMDAyCi0vKiBSeC1vbmx5OiBPUyBpcyBkb25lIHdpdGggdGhpcyBwYWNrZXQgYW5kIGl0J3Mgb2sgdG8gcXVldWVkIGl0IHRvIGh3ICovCi0jZGVmaW5lIEFUSF9CVUZTVEFUVVNfRlJFRSAgICAgIDB4MDAwMDAwMDQKLQotLyogRE1BIHN0YXRlIGZvciB0eC9yeCBkZXNjcmlwdG9ycyAqLwotCi1zdHJ1Y3QgYXRoX2Rlc2NkbWEgewotCWNvbnN0IGNoYXIgKmRkX25hbWU7Ci0Jc3RydWN0IGF0aF9kZXNjICpkZF9kZXNjOwkvKiBkZXNjcmlwdG9ycyAgKi8KLQlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHIgb2YgZGRfZGVzYyAgKi8KLQl1MzIgZGRfZGVzY19sZW47CQkvKiBzaXplIG9mIGRkX2Rlc2MgICovCi0Jc3RydWN0IGF0aF9idWYgKmRkX2J1ZnB0cjsJLyogYXNzb2NpYXRlZCBidWZmZXJzICovCi0JZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwotfTsKLQotaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAotCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKLXZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKLQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKLQotLyoqKioqKioqKioqLwotLyogUlggLyBUWCAqLwotLyoqKioqKioqKioqLwotCi0jZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKLSNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCi0jZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgotI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMwotI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAotI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0Ci0jZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0Ci0jZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQotI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCi0KLSNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCi0JKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAotCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKLQkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCi0JIFdNRV9BQ19WTykKLQotI2RlZmluZSBXTUVfQUNfQkUgICAwCi0jZGVmaW5lIFdNRV9BQ19CSyAgIDEKLSNkZWZpbmUgV01FX0FDX1ZJICAgMgotI2RlZmluZSBXTUVfQUNfVk8gICAzCi0jZGVmaW5lIFdNRV9OVU1fQUMgIDQKLQotI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAotI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0Ci0jZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCi0jZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCi0vKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCi0jZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKLSNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKLSNkZWZpbmUgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQgICAgNAotI2RlZmluZSBJRUVFODAyMTFfU0VRX01BWCAgICAgICAgICA0MDk2Ci0jZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGICAgIDB4OAotI2RlZmluZSBJRUVFODAyMTFfSFRDQVBfTUFYUlhBTVBEVV9GQUNUT1IgMTMKLQotLyogcmV0dXJuIHdoZXRoZXIgYSBiaXQgYXQgaW5kZXggX24gaW4gYml0bWFwIF9ibSBpcyBzZXQKLSAqIF9zeiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwICAqLwotI2RlZmluZSBBVEhfQkFfSVNTRVQoX2JtLCBfbikgICgoKF9uKSA8IChXTUVfQkFfQk1QX1NJWkUpKSAmJgkJXAotCQkJCSgoX2JtKVsoX24pID4+IDVdICYgKDEgPDwgKChfbikgJiAzMSkpKSkKLQotLyogcmV0dXJuIGJsb2NrLWFjayBiaXRtYXAgaW5kZXggZ2l2ZW4gc2VxdWVuY2UgYW5kIHN0YXJ0aW5nIHNlcXVlbmNlICovCi0jZGVmaW5lIEFUSF9CQV9JTkRFWChfc3QsIF9zZXEpICgoKF9zZXEpIC0gKF9zdCkpICYgKElFRUU4MDIxMV9TRVFfTUFYIC0gMSkpCi0KLS8qIHJldHVybnMgZGVsaW1pdGVyIHBhZGRpbmcgcmVxdWlyZWQgZ2l2ZW4gdGhlIHBhY2tldCBsZW5ndGggKi8KLSNkZWZpbmUgQVRIX0FHR1JfR0VUX05ERUxJTShfbGVuKQkJCQkJXAotCSgoKCgoX2xlbikgKyBBVEhfQUdHUl9ERUxJTV9TWikgPCBBVEhfQUdHUl9NSU5QTEVOKSA/ICAgICAgICAgICBcCi0JICAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSAtIEFUSF9BR0dSX0RFTElNX1NaKSA6IDApID4+IDIpCi0KLSNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCi0JKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiA0MDk1KSA8IChfYmF3c3opKQotCi0jZGVmaW5lIEFUSF9EU19CQV9TRVEoX2RzKSAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfc2VxbnVtKQotI2RlZmluZSBBVEhfRFNfQkFfQklUTUFQKF9kcykgICAgICAoJihfZHMpLT5kc191cy50eC5iYV9sb3cpCi0jZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKLSNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKLQotZW51bSBBVEhfQUdHUl9TVEFUVVMgewotCUFUSF9BR0dSX0RPTkUsCi0JQVRIX0FHR1JfQkFXX0NMT1NFRCwKLQlBVEhfQUdHUl9MSU1JVEVELAotCUFUSF9BR0dSX1NIT1JUUEtULAotCUFUSF9BR0dSXzhLX0xJTUlURUQsCi19OwotCi1zdHJ1Y3QgYXRoX3R4cSB7Ci0JdTMyIGF4cV9xbnVtOwkJCS8qIGhhcmR3YXJlIHEgbnVtYmVyICovCi0JdTMyICpheHFfbGluazsJCQkvKiBsaW5rIHB0ciBpbiBsYXN0IFRYIGRlc2MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9xOwkJLyogdHJhbnNtaXQgcXVldWUgKi8KLQlzcGlubG9ja190IGF4cV9sb2NrOwotCXVuc2lnbmVkIGxvbmcgYXhxX2xvY2tmbGFnczsJLyogaW50ciBzdGF0ZSB3aGVuIG11c3QgY2xpICovCi0JdTMyIGF4cV9kZXB0aDsJCQkvKiBxdWV1ZSBkZXB0aCAqLwotCXU4IGF4cV9hZ2dyX2RlcHRoOwkJLyogYWdncmVnYXRlcyBxdWV1ZWQgKi8KLQl1MzIgYXhxX3RvdGFscXVldWVkOwkJLyogdG90YWwgZXZlciBxdWV1ZWQgKi8KLQlib29sIHN0b3BwZWQ7CQkJLyogSXMgbWFjODAyMTEgcXVldWUgc3RvcHBlZCA/ICovCi0Jc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOwkvKiB2aXJ0dWFsIGFkZHIgb2YgbGFzdCBidWZmZXIqLwotCi0JLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKLQotCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCi0JICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Ci19OwotCi0jZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQotI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKLSNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCi0KLS8qIHBlciBUSUQgYWdncmVnYXRlIHR4IHN0YXRlIGZvciBhIGRlc3RpbmF0aW9uICovCi1zdHJ1Y3QgYXRoX2F0eF90aWQgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHJvdW5kLXJvYmluIHRpZCBlbnRyeSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CQkvKiBwZW5kaW5nIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqdHhfYnVmW0FUSF9USURfTUFYX0JVRlNdOyAvKiBhY3RpdmUgdHggZnJhbWVzICovCi0JdTE2IHNlcV9zdGFydDsKLQl1MTYgc2VxX25leHQ7Ci0JdTE2IGJhd19zaXplOwotCWludCB0aWRubzsKLQlpbnQgYmF3X2hlYWQ7CQkJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCi0JaW50IGJhd190YWlsOwkJCS8qIG5leHQgdW51c2VkIHR4IGJ1ZmZlciBzbG90ICovCi0JaW50IHNjaGVkOwotCWludCBwYXVzZWQ7Ci0JdTggc3RhdGU7Ci0JaW50IGFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHM7Ci19OwotCi0vKiBwZXIgYWNjZXNzLWNhdGVnb3J5IGFnZ3JlZ2F0ZSB0eCBzdGF0ZSBmb3IgYSBkZXN0aW5hdGlvbiAqLwotc3RydWN0IGF0aF9hdHhfYWMgewotCWludCBzY2hlZDsJCQkvKiBkZXN0LWFjIGlzIHNjaGVkdWxlZCAqLwotCWludCBxbnVtOwkJCS8qIEgvVyBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZAotCQkJCQkgICB3aXRoIHRoaXMgQUMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiByb3VuZC1yb2JpbiB0eHEgZW50cnkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRpZF9xOwkJLyogcXVldWUgb2YgVElEcyB3aXRoIGJ1ZmZlcnMgKi8KLX07Ci0KLS8qIHBlci1mcmFtZSB0eCBjb250cm9sIGJsb2NrICovCi1zdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgewotCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JaW50IGlmX2lkOwotfTsKLQotLyogcGVyIGZyYW1lIHR4IHN0YXR1cyBibG9jayAqLwotc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7Ci0JaW50IHJldHJpZXM7CS8qIG51bWJlciBvZiByZXRyaWVzIHRvIHN1Y2Nlc3N1ZnVsbHkKLQkJCSAgIHRyYW5zbWl0IHRoaXMgZnJhbWUgKi8KLQlpbnQgZmxhZ3M7CS8qIHN0YXR1cyBvZiB0cmFuc21pdCAqLwotI2RlZmluZSBBVEhfVFhfRVJST1IgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIX1RYX1hSRVRSWSAgICAgICAweDAyCi0jZGVmaW5lIEFUSF9UWF9CQVIgICAgICAgICAgMHgwNAotfTsKLQotLyogQWxsIFJTU0kgdmFsdWVzIGFyZSBub2lzZSBmbG9vciBhZGp1c3RlZCAqLwotc3RydWN0IGF0aF90eF9zdGF0IHsKLQlpbnQgcnNzaTsKLQlpbnQgcnNzaWN0bFtBVEhfTUFYX0FOVEVOTkFdOwotCWludCByc3NpZXh0bltBVEhfTUFYX0FOVEVOTkFdOwotCWludCByYXRlaWVlZTsKLQlpbnQgcmF0ZUticHM7Ci0JaW50IHJhdGVjb2RlOwotCWludCBmbGFnczsKLQl1MzIgYWlydGltZTsJLyogdGltZSBvbiBhaXIgcGVyIGZpbmFsIHR4IHJhdGUgKi8KLX07Ci0KLXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gewotCWludCBwYXJhbV9tYXhfZnJhbWVzOwotCWludCBwYXJhbV9tYXhfbGVuOwotCWludCBwYXJhbV9ybDsKLQlpbnQgcGFyYW1fYWw7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMgKnBhcmFtX3JjczsKLX07Ci0KLXN0cnVjdCBhdGhfbm9kZSB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYW5fc2M7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07Ci0Jc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107Ci0JdTE2IG1heGFtcGR1OwotCXU4IG1wZHVkZW5zaXR5OwotfTsKLQotc3RydWN0IGF0aF90eCB7Ci0JdTE2IHNlcV9ubzsKLQl1MzIgdHhxc2V0dXA7Ci0JaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOwotCXNwaW5sb2NrX3QgdHhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7Ci0Jc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOwotCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKLX07Ci0KLXN0cnVjdCBhdGhfcnggewotCXU4IGRlZmFudDsKLQl1OCByeG90aGVyYW50OwotCXUzMiAqcnhsaW5rOwotCWludCBidWZzaXplOwotCXVuc2lnbmVkIGludCByeGZpbHRlcjsKLQlzcGlubG9ja190IHJ4Zmx1c2hsb2NrOwotCXNwaW5sb2NrX3QgcnhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgcnhidWY7Ci0Jc3RydWN0IGF0aF9kZXNjZG1hIHJ4ZG1hOwotfTsKLQotaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotdm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXUzMiBhdGhfY2FsY3J4ZmlsdGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfcnhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKLXZvaWQgYXRoX3J4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gpOwotc3RydWN0IGF0aF90eHEgKmF0aF90eHFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IHN1YnR5cGUpOwotdm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpOwotdm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotdm9pZCBhdGhfdHhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Ci12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKLXZvaWQgYXRoX3R4X25vZGVfZnJlZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7Ci12b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpOwotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpOwotc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKLQkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwotdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci11MzIgYXRoX3R4cV9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdTMyIGF0aF90eHFfYWdncl9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIGF0aF90eF9yZXN1bWVfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCk7Ci1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLAlzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLQotLyoqKioqKioqLwotLyogVkFQcyAqLwotLyoqKioqKioqLwotCi0vKgotICogRGVmaW5lIHRoZSBzY2hlbWUgdGhhdCB3ZSBzZWxlY3QgTUFDIGFkZHJlc3MgZm9yIG11bHRpcGxlCi0gKiBCU1Mgb24gdGhlIHNhbWUgcmFkaW8uIFRoZSB2ZXJ5IGZpcnN0IFZBUCB3aWxsIGp1c3QgdXNlIHRoZSBNQUMKLSAqIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NLiBGb3IgdGhlIG5leHQgMyBWQVBzLCB3ZSBzZXQgdGhlCi0gKiBVL0wgYml0IChiaXQgMSkgaW4gTUFDIGFkZHJlc3MsIGFuZCB1c2UgdGhlIG5leHQgdHdvIGJpdHMgYXMgdGhlCi0gKiBpbmRleCBvZiB0aGUgVkFQLgotICovCi0KLSNkZWZpbmUgQVRIX1NFVF9WQVBfQlNTSURfTUFTSyhic3NpZF9tYXNrKSBcCi0JKChic3NpZF9tYXNrKVswXSAmPSB+KCgoQVRIX0JDQlVGLTEpPDwyKXwweDAyKSkKLQotc3RydWN0IGF0aF92YXAgewotCWludCBhdl9ic2xvdDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7Ci0Jc3RydWN0IGF0aF90eF9jb250cm9sIGF2X2J0eGN0bDsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqLwotLyogQmVhY29uIEhhbmRsaW5nICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKLSAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgotICovCi0jZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKLSNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTEKLSNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLwotI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKLSNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKLQotc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTE2IGR0aW1fcGVyaW9kOwotCXUxNiBibWlzc190aW1lb3V0OwotCXU4IGR0aW1fY291bnQ7Ci0JdTggdGltX29mZnNldDsKLQl1bmlvbiB7Ci0JCXU2NCBsYXN0X3RzZjsKLQkJdTggbGFzdF90c3RhbXBbOF07Ci0JfSB1OyAvKiBsYXN0IHJlY2VpdmVkIGJlYWNvbi9wcm9iZSByZXNwb25zZSB0aW1lc3RhbXAgb2YgdGhpcyBCU1MuICovCi19OwotCi1zdHJ1Y3QgYXRoX2JlYWNvbiB7Ci0JZW51bSB7Ci0JCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLwotCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLwotCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCi0JfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KLQotCXUzMiBiZWFjb25xOwotCXUzMiBibWlzc2NudDsKLQl1MzIgYXN0X2JlX3htaXQ7Ci0JdTY0IGJjX3RzdGFtcDsKLQlpbnQgYnNsb3RbQVRIX0JDQlVGXTsKLQlpbnQgc2xvdHRpbWU7Ci0JaW50IHNsb3R1cGRhdGU7Ci0Jc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gYmVhY29uX3FpOwotCXN0cnVjdCBhdGhfZGVzY2RtYSBiZG1hOwotCXN0cnVjdCBhdGhfdHhxICpjYWJxOwotCXN0cnVjdCBsaXN0X2hlYWQgYmJ1ZjsKLX07Ci0KLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7Ci1pbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpOwotdm9pZCBhdGhfYmVhY29uX3JldHVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF92YXAgKmF2cCk7Ci12b2lkIGF0aF9iZWFjb25fc3luYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKTsKLQotLyoqKioqKiovCi0vKiBBTkkgKi8KLS8qKioqKioqLwotCi0vKiBBTkkgdmFsdWVzIGZvciBTVEEgb25seS4KLSAgIEZJWE1FOiBBZGQgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciBBUCBsYXRlciAqLwotCi0jZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgIDEwMCAgICAgLyogMTAwIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIEFOSSBwb2xsICovCi0jZGVmaW5lIEFUSF9TSE9SVF9DQUxJTlRFUlZBTCAgIDEwMDAgICAgLyogMSBzZWNvbmQgYmV0d2VlbiBjYWxpYnJhdGlvbnMgKi8KLSNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgMzAwMDAgICAvKiAzMCBzZWNvbmRzIGJldHdlZW4gY2FsaWJyYXRpb25zICovCi0jZGVmaW5lIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMIDEyMDAwMDAgLyogMjAgbWludXRlcyBiZXR3ZWVuIGNhbGlicmF0aW9ucyAqLwotCi1zdHJ1Y3QgYXRoX2FuaSB7Ci0JYm9vbCBzY19jYWxkb25lOwotCWludDE2X3Qgc2Nfbm9pc2VfZmxvb3I7Ci0JdW5zaWduZWQgaW50IHNjX2xvbmdjYWxfdGltZXI7Ci0JdW5zaWduZWQgaW50IHNjX3Nob3J0Y2FsX3RpbWVyOwotCXVuc2lnbmVkIGludCBzY19yZXNldGNhbF90aW1lcjsKLQl1bnNpZ25lZCBpbnQgc2NfY2hlY2thbmlfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKiovCi0vKiAgIExFRCBDb250cm9sICAgICovCi0vKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX0xFRF9QSU4JMQotCi1lbnVtIGF0aF9sZWRfdHlwZSB7Ci0JQVRIX0xFRF9SQURJTywKLQlBVEhfTEVEX0FTU09DLAotCUFUSF9MRURfVFgsCi0JQVRIX0xFRF9SWAotfTsKLQotc3RydWN0IGF0aF9sZWQgewotCXN0cnVjdCBhdGhfc29mdGMgKnNjOwotCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7Ci0JZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7Ci0JY2hhciBuYW1lWzMyXTsKLQlib29sIHJlZ2lzdGVyZWQ7Ci19OwotCi0vKiBSZmtpbGwgKi8KLSNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KLQotc3RydWN0IGF0aF9yZmtpbGwgewotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOwotCWNoYXIgcmZraWxsX25hbWVbMzJdOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqLwotLyogTWFpbiBkcml2ZXIgY29yZSAqLwotLyoqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgotICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUwotKi8KLSNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKLSNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1Ci0jZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCi0jZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KLSNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKLSNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1Ci0jZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfVkFMICAgICAgMHg3ZgotLyoKLSAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKLSAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgotICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCi0gKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KLSAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKLSAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgotICovCi0jZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KLQotI2RlZmluZSBBVEhfSUZfSURfQU5ZICAgCTB4ZmYKLSNkZWZpbmUgQVRIX1RYUE9XRVJfTUFYICAgICAgICAgMTAwICAgICAvKiAuNSBkQm0gdW5pdHMgKi8KLSNkZWZpbmUgQVRIX1JTU0lfRFVNTVlfTUFSS0VSICAgMHgxMjcKLSNkZWZpbmUgQVRIX1JBVEVfRFVNTVlfTUFSS0VSICAgMAotCi1lbnVtIFBST1RfTU9ERSB7Ci0JUFJPVF9NX05PTkUgPSAwLAotCVBST1RfTV9SVFNDVFMsCi0JUFJPVF9NX0NUU09OTFkKLX07Ci0KLSNkZWZpbmUgU0NfT1BfSU5WQUxJRAkJQklUKDApCi0jZGVmaW5lIFNDX09QX0JFQUNPTlMJCUJJVCgxKQotI2RlZmluZSBTQ19PUF9SWEFHR1IJCUJJVCgyKQotI2RlZmluZSBTQ19PUF9UWEFHR1IJCUJJVCgzKQotI2RlZmluZSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFCUJJVCg0KQotI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUCUJJVCg1KQotI2RlZmluZSBTQ19PUF9OT19SRVNFVAkJQklUKDYpCi0jZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUCUJJVCg3KQotI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRQlCSVQoOCkKLSNkZWZpbmUgU0NfT1BfUlhGTFVTSAkJQklUKDkpCi0jZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVECUJJVCgxMCkKLSNkZWZpbmUgU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQJQklUKDExKQotI2RlZmluZSBTQ19PUF9SRktJTExfU1dfQkxPQ0tFRAlCSVQoMTIpCi0jZGVmaW5lIFNDX09QX1JGS0lMTF9IV19CTE9DS0VECUJJVCgxMykKLQotc3RydWN0IGF0aF9zb2Z0YyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKLQlzdHJ1Y3QgYXRoX2hhbCAqc2NfYWg7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7Ci0Jc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JdTggc2NfY3VyYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNjX215YWRkcltFVEhfQUxFTl07Ci0JdTggc2NfYnNzaWRtYXNrW0VUSF9BTEVOXTsKLQl1MzIgc2NfaW50cnN0YXR1czsKLQl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KLQl1MTYgc2NfY3VydHhwb3c7Ci0JdTE2IHNjX2N1cmFpZDsKLQl1MTYgc2NfY2FjaGVsc3o7Ci0JdTggc2NfbmJjbnZhcHM7Ci0JdTE2IHNjX252YXBzOwotCXU4IHNjX3R4X2NoYWlubWFzazsKLQl1OCBzY19yeF9jaGFpbm1hc2s7Ci0JdTMyIHNjX2tleW1heDsKLQlERUNMQVJFX0JJVE1BUChzY19rZXltYXAsIEFUSF9LRVlNQVgpOwotCXU4IHNjX3NwbGl0bWljOwotCXU4IHNjX3Byb3RyaXg7Ci0JZW51bSBhdGg5a19pbnQgc2NfaW1hc2s7Ci0JZW51bSBQUk9UX01PREUgc2NfcHJvdG1vZGU7Ci0JZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBzY19odF9leHRwcm90c3BhY2luZzsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgdHhfY2hhbl93aWR0aDsKLQotCXN0cnVjdCBhdGhfY29uZmlnIHNjX2NvbmZpZzsKLQlzdHJ1Y3QgYXRoX3J4IHJ4OwotCXN0cnVjdCBhdGhfdHggdHg7Ci0Jc3RydWN0IGF0aF9iZWFjb24gYmVhY29uOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICpzY192YXBzW0FUSF9CQ0JVRl07Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FUSF9SQVRFX01BWF07Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpod19yYXRlX3RhYmxlW0FUSDlLX01PREVfTUFYXTsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmN1cl9yYXRlX3RhYmxlOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tJRUVFODAyMTFfTlVNX0JBTkRTXVtBVEhfQ0hBTl9NQVhdOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCXN0cnVjdCBhdGhfbGVkIHJhZGlvX2xlZDsKLQlzdHJ1Y3QgYXRoX2xlZCBhc3NvY19sZWQ7Ci0Jc3RydWN0IGF0aF9sZWQgdHhfbGVkOwotCXN0cnVjdCBhdGhfbGVkIHJ4X2xlZDsKLQlzdHJ1Y3QgYXRoX3Jma2lsbCByZl9raWxsOwotCXN0cnVjdCBhdGhfYW5pIHNjX2FuaTsKLQlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBzY19oYWxzdGF0czsKLSNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKLQlzdHJ1Y3QgYXRoOWtfZGVidWcgc2NfZGVidWc7Ci0jZW5kaWYKLX07Ci0KLWludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci1pbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwotCi0vKgotICogUmVhZCBhbmQgd3JpdGUsIHRoZXkgYm90aCBzaGFyZSB0aGUgc2FtZSBsb2NrLiBXZSBkbyB0aGlzIHRvIHNlcmlhbGl6ZQotICogcmVhZHMgYW5kIHdyaXRlcyBvbiBBdGhlcm9zIDgwMi4xMW4gUENJIGRldmljZXMgb25seS4gVGhpcyBpcyByZXF1aXJlZAotICogYXMgdGhlIEZJRk8gb24gdGhlc2UgZGV2aWNlcyBjYW4gb25seSBhY2NlcHQgc2FuZWx5IDIgcmVxdWVzdHMuIEFmdGVyCi0gKiB0aGF0IHRoZSBkZXZpY2UgZ29lcyBiYW5hbmFzLiBTZXJpYWxpemluZyB0aGUgcmVhZHMvd3JpdGVzIHByZXZlbnRzIHRoaXMKLSAqIGZyb20gaGFwcGVuaW5nLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19pb3dyaXRlMzIoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcmVnX29mZnNldCwgdTMyIHZhbCkKLXsKLQlpZiAoYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0aDlrX2lvcmVhZDMyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJlZ19vZmZzZXQpCi17Ci0JdTMyIHZhbDsKLQlpZiAoYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotI2VuZGlmIC8qIENPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmMKaW5kZXggYTgwZWQ1Ny4uODI1NzNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jCkBAIC0xNCwxOSArMTQsMjEgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfZGVidWcgPSBEQkdfREVGQVVMVDsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOwogCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRoOWtfZGVidWdmc19yb290OworCiB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJaWYgKCFzYykKIAkJcmV0dXJuOwogCi0JaWYgKHNjLT5zY19kZWJ1Zy5kZWJ1Z19tYXNrICYgZGJnX21hc2spIHsKKwlpZiAoc2MtPmRlYnVnLmRlYnVnX21hc2sgJiBkYmdfbWFzaykgewogCQl2YV9saXN0IGFyZ3M7CiAKIAkJdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTQ2LDcgKzQ4LDcgQEAKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWNoYXIgYnVmWzEwMjRdOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXUzMiB2YWxbQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTXTsKQEAgLTEzMiw0MSArMTM0LDQxIEBACiB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKQogewogCWlmIChzdGF0dXMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfUlgpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvaysrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4b2srKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYRU9MKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYT1JOKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4b3JuKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4rKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RYKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2srKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eG9rKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9UWFVSTikKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50eHVybisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9NSUIpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWFBIWSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeHBoeWVycisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWEtDTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhfa2V5Y2FjaGVfbWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfU1dCQSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5zd2JhKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk1JU1MpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5ibWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk5SKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ1NUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfR1RUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVElNKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ0FCRU5EKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTVNZTkMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSsrOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfaW50ZXJydXB0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0xNzcsNDEgKzE3OSw0MSBAQAogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CisJCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWEVPTCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wpOworCQkiJThzOiAlMTB1XG4iLCAiUlhFT0wiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYT1JOIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeG9ybik7CisJCSIlOHM6ICUxMHVcbiIsICJSWE9STiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4pOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOworCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFhVUk4iLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKTsKKwkJIiU4czogJTEwdVxuIiwgIlRYVVJOIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eHVybik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CisJCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWFBIWSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhwaHllcnIpOworCQkiJThzOiAlMTB1XG4iLCAiUlhQSFkiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKKwkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlNXQkEiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnN3YmEpOworCQkiJThzOiAlMTB1XG4iLCAiU1dCQSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJCTUlTUyIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MpOworCQkiJThzOiAlMTB1XG4iLCAiQk1JU1MiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJtaXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKKwkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKKwkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKKwkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKKwkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKKwkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkRUSU1TWU5DIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYyk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNU1lOQyIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMpOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiRFRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRPVEFMIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCk7CisJCSIlOHM6ICUxMHVcbiIsICJUT1RBTCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwpOwogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQpAQCAtMjIyLDI5ICsyMjQsMzA4IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUKIH07CiAKK3N0YXRpYyB2b2lkIGF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPnN0YXR1cy5yYXRlczsKKwlpbnQgZmluYWxfdHNfaWR4LCBpZHg7CisKKwl0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWZpbmFsX3RzX2lkeCA9IHR4X2luZm9fcHJpdi0+dHgudHNfcmF0ZWluZGV4OworCWlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tmaW5hbF90c19pZHhdLmlkeF0uZG90MTFyYXRlOworCisJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpZHhdLnN1Y2Nlc3MrKzsKK30KKworc3RhdGljIHZvaWQgYXRoX2RlYnVnX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+c3RhdHVzLnJhdGVzOworCWludCBmaW5hbF90c19pZHgsIGlkeDsKKworCXR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisJZmluYWxfdHNfaWR4ID0gdHhfaW5mb19wcml2LT50eC50c19yYXRlaW5kZXg7CisJaWR4ID0gcmF0ZXNbZmluYWxfdHNfaWR4XS5pZHg7CisKKwlzYy0+ZGVidWcuc3RhdHMubGVnYWN5X3Jjc3RhdHNbaWR4XS5zdWNjZXNzKys7Cit9CisKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzYywgc2tiKTsKKwllbHNlCisJCWF0aF9kZWJ1Z19zdGF0X2xlZ2FjeV9yYyhzYywgc2tiKTsKK30KKworLyogRklYTUU6IGxlZ2FjeSByYXRlcywgbGF0ZXIgb24gLi4gKi8KK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKKwkJCSAgICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpIHsKKwkJaW50IGlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyaXhdLmRvdDExcmF0ZTsKKworCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2lkeF0ueHJldHJpZXMgKz0geHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5yZXRyaWVzICs9IHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5wZXIgPSBwZXI7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfMTFuX3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTAyNF07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGkgPSAwOworCisJbGVuICs9IHNwcmludGYoYnVmLCAiJTdzICUxM3MgJThzICU4cyAlNnNcblxuIiwgIlJhdGUiLCAiU3VjY2VzcyIsCisJCSAgICAgICAiUmV0cmllcyIsICJYUmV0cmllcyIsICJQRVIiKTsKKworCWZvciAoaSA9IDA7IGkgPD0gMTU7IGkrKykgeworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkiJTVzJTNkOiAlOHUgJTh1ICU4dSAlOHVcbiIsICJNQ1MiLCBpLAorCQkJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaV0uc3VjY2VzcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnJldHJpZXMsCisJCQkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpXS54cmV0cmllcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnBlcik7CisJfQorCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlpbnQgaSA9IDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWYsICIlN3MgJTEzc1xuXG4iLCAiUmF0ZSIsICJTdWNjZXNzIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTV1OiAlMTJ1XG4iLAorCQkJCXNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRla2JwcyAvIDEwMDAsCisJCQkJc2MtPmRlYnVnLnN0YXRzLmxlZ2FjeV9yY3N0YXRzW2ldLnN1Y2Nlc3MpOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3Jjc3RhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHNjLT5jdXJfcmF0ZV90YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKQorCQlyZXR1cm4gYXRoX3JlYWRfZmlsZV9zdGF0XzExbl9yYyhmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWVsc2UKKwkJcmV0dXJuIGF0aF9yZWFkX2ZpbGVfc3RhdF9sZWdhY3lfcmMoZmlsZSwgdXNlcl9idWYsIGNvdW50ICxwcG9zKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19yY3N0YXQgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfcmNzdGF0LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGF0aF93aXBoeV9zdGF0ZV9zdHIoZW51bSBhdGhfd2lwaHlfc3RhdGUgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgQVRIX1dJUEhZX0lOQUNUSVZFOgorCQlyZXR1cm4gIklOQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9BQ1RJVkU6CisJCXJldHVybiAiQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9QQVVTSU5HOgorCQlyZXR1cm4gIlBBVVNJTkciOworCWNhc2UgQVRIX1dJUEhZX1BBVVNFRDoKKwkJcmV0dXJuICJQQVVTRUQiOworCWNhc2UgQVRIX1dJUEhZX1NDQU46CisJCXJldHVybiAiU0NBTiI7CisJfQorCXJldHVybiAiPyI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV93aXBoeShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzUxMl07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGk7CisJdTggYWRkcltFVEhfQUxFTl07CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJwcmltYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQl3aXBoeV9uYW1lKHNjLT5wcmlfd2lwaHktPmh3LT53aXBoeSksCisJCQlhdGhfd2lwaHlfc3RhdGVfc3RyKHNjLT5wcmlfd2lwaHktPnN0YXRlKSwKKwkJCXNjLT5wcmlfd2lwaHktPmNoYW5faWR4LCBzYy0+cHJpX3dpcGh5LT5jaGFuX2lzX2h0KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkic2Vjb25kYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQkJd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpLAorCQkJCWF0aF93aXBoeV9zdGF0ZV9zdHIoYXBoeS0+c3RhdGUpLAorCQkJCWFwaHktPmNoYW5faWR4LCBhcGh5LT5jaGFuX2lzX2h0KTsKKwl9CisKKwlwdXRfdW5hbGlnbmVkX2xlMzIoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9TVEFfSUQwKSwgYWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KFJFR19SRUFEKHNjLT5zY19haCwgQVJfU1RBX0lEMSkgJiAweGZmZmYsIGFkZHIgKyA0KTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJhZGRyOiAlcE1cbiIsIGFkZHIpOworCXB1dF91bmFsaWduZWRfbGUzMihSRUdfUkVBRChzYy0+c2NfYWgsIEFSX0JTU01TS0wpLCBhZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9CU1NNU0tVKSAmIDB4ZmZmZiwgYWRkciArIDQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJImFkZHJtYXNrOiAlcE1cbiIsIGFkZHIpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3RydWN0IGF0aF93aXBoeSAqIGdldF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlpZiAoc3RyY21wKG5hbWUsIHdpcGh5X25hbWUoc2MtPnByaV93aXBoeS0+aHctPndpcGh5KSkgPT0gMCkKKwkJcmV0dXJuIHNjLT5wcmlfd2lwaHk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5ICYmIHN0cmNtcChuYW1lLCB3aXBoeV9uYW1lKGFwaHktPmh3LT53aXBoeSkpID09IDApCisJCQlyZXR1cm4gYXBoeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVsX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X2RlbChhcGh5KTsKK30KKworc3RhdGljIGludCBwYXVzZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9wYXVzZShhcGh5KTsKK30KKworc3RhdGljIGludCB1bnBhdXNlX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3VucGF1c2UoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3NlbGVjdChhcGh5KTsKK30KKworc3RhdGljIGludCBzY2hlZHVsZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbXNlYykKK3sKKwlhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHNjLCBzaW1wbGVfc3RydG91bChtc2VjLCBOVUxMLCAwKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfd2lwaHkoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZbbGVuIC0gMV0gPSAnXDAnOworCisJaWYgKHN0cm5jbXAoYnVmLCAiYWRkIiwgMykgPT0gMCkgeworCQlpbnQgcmVzID0gYXRoOWtfd2lwaHlfYWRkKHNjKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJkZWw9IiwgNCkgPT0gMCkgeworCQlpbnQgcmVzID0gZGVsX3dpcGh5KHNjLCBidWYgKyA0KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJwYXVzZT0iLCA2KSA9PSAwKSB7CisJCWludCByZXMgPSBwYXVzZV93aXBoeShzYywgYnVmICsgNik7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAidW5wYXVzZT0iLCA4KSA9PSAwKSB7CisJCWludCByZXMgPSB1bnBhdXNlX3dpcGh5KHNjLCBidWYgKyA4KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzZWxlY3Q9IiwgNykgPT0gMCkgeworCQlpbnQgcmVzID0gc2VsZWN0X3dpcGh5KHNjLCBidWYgKyA3KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzY2hlZHVsZT0iLCA5KSA9PSAwKSB7CisJCWludCByZXMgPSBzY2hlZHVsZV93aXBoeShzYywgYnVmICsgOSk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3dpcGh5ID0geworCS5yZWFkID0gcmVhZF9maWxlX3dpcGh5LAorCS53cml0ZSA9IHdyaXRlX2ZpbGVfd2lwaHksCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUKK307CisKKwogaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc2MtPnNjX2RlYnVnLmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKKwlzYy0+ZGVidWcuZGVidWdfbWFzayA9IGF0aDlrX2RlYnVnOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7Ci0JaWYgKCFzYy0+c2NfZGVidWcuZGVidWdmc19yb290KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSA9IGRlYnVnZnNfY3JlYXRlX2Rpcih3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpLAorCQkJCQkJICAgICAgYXRoOWtfZGVidWdmc19yb290KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSkKIAkJZ290byBlcnI7CiAKLQlzYy0+c2NfZGVidWcuZGVidWdmc19waHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSwKLQkJCQkJCSAgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3Jvb3QpOwotCWlmICghc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RtYSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVR08sCisJCQkJICAgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX2RtYSk7CisJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19kbWEpCiAJCWdvdG8gZXJyOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfZG1hID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVHTywKLQkJCQkgICAgICAgc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZG1hKTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2RtYSkKLQkJZ290byBlcnI7Ci0KLQlzYy0+c2NfZGVidWcuZGVidWdmc19pbnRlcnJ1cHQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLAorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsCiAJCQkJCQkgICAgIFNfSVJVR08sCi0JCQkJCQkgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCQkJCSAgICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAogCQkJCQkJICAgICBzYywgJmZvcHNfaW50ZXJydXB0KTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwkJZ290byBlcnI7CisKKwlzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3N0YXQiLAorCQkJCQkJICBTX0lSVUdPLAorCQkJCQkJICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgIHNjLCAmZm9wc19yY3N0YXQpOworCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0KQorCQlnb3RvIGVycjsKKworCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgKKwkJIndpcGh5IiwgU19JUlVHTyB8IFNfSVdVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCSZmb3BzX3dpcGh5KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KQogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOwpAQCAtMjU1LDggKzUzNiwyNCBAQAogCiB2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+c2NfZGVidWcuZGVidWdmc19kbWEpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19kbWEpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Cit9CisKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKQoreworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7CisJaWYgKCFhdGg5a19kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShhdGg5a19kZWJ1Z2ZzX3Jvb3QpOworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjUyNjhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIERFQlVHX0gKKyNkZWZpbmUgREVCVUdfSAorCitlbnVtIEFUSF9ERUJVRyB7CisJQVRIX0RCR19SRVNFVAkJPSAweDAwMDAwMDAxLAorCUFUSF9EQkdfUkVHX0lPCQk9IDB4MDAwMDAwMDIsCisJQVRIX0RCR19RVUVVRQkJPSAweDAwMDAwMDA0LAorCUFUSF9EQkdfRUVQUk9NCQk9IDB4MDAwMDAwMDgsCisJQVRIX0RCR19DQUxJQlJBVEUJPSAweDAwMDAwMDEwLAorCUFUSF9EQkdfQ0hBTk5FTAkJPSAweDAwMDAwMDIwLAorCUFUSF9EQkdfSU5URVJSVVBUCT0gMHgwMDAwMDA0MCwKKwlBVEhfREJHX1JFR1VMQVRPUlkJPSAweDAwMDAwMDgwLAorCUFUSF9EQkdfQU5JCQk9IDB4MDAwMDAxMDAsCisJQVRIX0RCR19QT1dFUl9NR01UCT0gMHgwMDAwMDIwMCwKKwlBVEhfREJHX1hNSVQJCT0gMHgwMDAwMDQwMCwKKwlBVEhfREJHX0JFQUNPTgkJPSAweDAwMDAxMDAwLAorCUFUSF9EQkdfQ09ORklHCQk9IDB4MDAwMDIwMDAsCisJQVRIX0RCR19LRVlDQUNIRQk9IDB4MDAwMDQwMDAsCisJQVRIX0RCR19GQVRBTAkJPSAweDAwMDA4MDAwLAorCUFUSF9EQkdfQU5ZCQk9IDB4ZmZmZmZmZmYKK307CisKKyNkZWZpbmUgREJHX0RFRkFVTFQgKEFUSF9EQkdfRkFUQUwpCisKKyNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKKworLyoqCisgKiBzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyAtIENvbnRhaW5zIHN0YXRpc3RpY3MgYWJvdXQgaW50ZXJydXB0cworICogQHRvdGFsOiBUb3RhbCBuby4gb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQgc28gZmFyCisgKiBAcnhvazogUlggd2l0aCBubyBlcnJvcnMKKyAqIEByeGVvbDogUlggd2l0aCBubyBtb3JlIFJYREVTQyBhdmFpbGFibGUKKyAqIEByeG9ybjogUlggRklGTyBvdmVycnVuCisgKiBAdHhvazogVFggY29tcGxldGVkIGF0IHRoZSByZXF1ZXN0ZWQgcmF0ZQorICogQHR4dXJuOiBUWCBGSUZPIHVuZGVycnVuCisgKiBAbWliOiBNSUIgcmVncyByZWFjaGluZyBpdHMgdGhyZXNob2xkCisgKiBAcnhwaHllcnI6IFJYIHdpdGggcGh5IGVycm9ycworICogQHJ4X2tleWNhY2hlX21pc3M6IFJYIHdpdGgga2V5IGNhY2hlIG1pc3NlcworICogQHN3YmE6IFNvZnR3YXJlIEJlYWNvbiBBbGVydAorICogQGJtaXNzOiBCZWFjb24gTWlzcworICogQGJucjogQmVhY29uIE5vdCBSZWFkeQorICogQGNzdDogQ2FycmllciBTZW5zZSBUSW1lb3V0CisgKiBAZ3R0OiBHbG9iYWwgVFggVGltZW91dAorICogQHRpbTogUlggYmVhY29uIFRJTSBvY2N1cnJlbmNlCisgKiBAY2FiZW5kOiBSWCBFbmQgb2YgQ0FCIHRyYWZmaWMKKyAqIEBkdGltc3luYzogRFRJTSBzeW5jIGxvc3NhZ2UKKyAqIEBkdGltOiBSWCBCZWFjb24gd2l0aCBEVElNCisgKi8KK3N0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIHsKKwl1MzIgdG90YWw7CisJdTMyIHJ4b2s7CisJdTMyIHJ4ZW9sOworCXUzMiByeG9ybjsKKwl1MzIgdHhvazsKKwl1MzIgdHhlb2w7CisJdTMyIHR4dXJuOworCXUzMiBtaWI7CisJdTMyIHJ4cGh5ZXJyOworCXUzMiByeF9rZXljYWNoZV9taXNzOworCXUzMiBzd2JhOworCXUzMiBibWlzczsKKwl1MzIgYm5yOworCXUzMiBjc3Q7CisJdTMyIGd0dDsKKwl1MzIgdGltOworCXUzMiBjYWJlbmQ7CisJdTMyIGR0aW1zeW5jOworCXUzMiBkdGltOworfTsKKworc3RydWN0IGF0aF9sZWdhY3lfcmNfc3RhdHMgeworCXUzMiBzdWNjZXNzOworfTsKKworc3RydWN0IGF0aF8xMW5fcmNfc3RhdHMgeworCXUzMiBzdWNjZXNzOworCXUzMiByZXRyaWVzOworCXUzMiB4cmV0cmllczsKKwl1OCBwZXI7Cit9OworCitzdHJ1Y3QgYXRoX3N0YXRzIHsKKwlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7CisJc3RydWN0IGF0aF9sZWdhY3lfcmNfc3RhdHMgbGVnYWN5X3Jjc3RhdHNbMTJdOwkvKiBtYXgoMTFhLDExYiwxMWcpICovCisJc3RydWN0IGF0aF8xMW5fcmNfc3RhdHMgbl9yY3N0YXRzWzE2XTsJCS8qIDAuLjE1IE1DUyByYXRlcyAqLworfTsKKworc3RydWN0IGF0aDlrX2RlYnVnIHsKKwlpbnQgZGVidWdfbWFzazsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jjc3RhdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3dpcGh5OworCXN0cnVjdCBhdGhfc3RhdHMgc3RhdHM7Cit9OworCit2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKTsKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCk7Cit2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAorCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcik7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssCisJCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfaW50ZXJydXB0KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgZW51bSBhdGg5a19pbnQgc3RhdHVzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKKwkJCQkJICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQVRIOUtfREVCVUcgKi8KKworI2VuZGlmIC8qIERFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKaW5kZXggYWNkNmM1My4uMTgzYzk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKQEAgLTE0LDEyICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICAgdTMyIHJlZywgdTMyIG1hc2ssCiAJCQkJICAgICAgdTMyIHNoaWZ0LCB1MzIgdmFsKQogewpAQCAtMzAsNyArMjcsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCByZWcsIHJlZ1ZhbCk7CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcpCisJaWYgKGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKQogCQl1ZGVsYXkoMTAwKTsKIAogCXJldHVybjsKQEAgLTkxLDYwICs4OCwyNjEgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKQorc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKIHsKLQkodm9pZClSRUdfUkVBRChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYWgtPmFoX3NjOwogCi0JaWYgKCFhdGg5a19od193YWl0KGFoLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1BST1RfQUNDRVNTLCAwKSkgewotCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHNjLT5idXNfb3BzLT5lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkJCSAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkJCSAgIHU4ICpwUmV0VnBkTGlzdCkKK3sKKwl1MTYgaSwgazsKKwl1OCBjdXJyUHdyID0gcHdyTWluOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IChwd3JNYXggLSBwd3JNaW4pIC8gMjsgaSsrKSB7CisJCWF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleChjdXJyUHdyLCBwUHdyTGlzdCwKKwkJCQkJICAgICAgIG51bUludGVyY2VwdHMsICYoaWR4TCksCisJCQkJCSAgICAgICAmKGlkeFIpKTsKKwkJaWYgKGlkeFIgPCAxKQorCQkJaWR4UiA9IDE7CisJCWlmIChpZHhMID09IG51bUludGVyY2VwdHMgLSAxKQorCQkJaWR4TCA9ICh1MTYpIChudW1JbnRlcmNlcHRzIC0gMik7CisJCWlmIChwUHdyTGlzdFtpZHhMXSA9PSBwUHdyTGlzdFtpZHhSXSkKKwkJCWsgPSBwVnBkTGlzdFtpZHhMXTsKKwkJZWxzZQorCQkJayA9ICh1MTYpKCgoY3VyclB3ciAtIHBQd3JMaXN0W2lkeExdKSAqIHBWcGRMaXN0W2lkeFJdICsKKwkJCQkgICAocFB3ckxpc3RbaWR4Ul0gLSBjdXJyUHdyKSAqIHBWcGRMaXN0W2lkeExdKSAvCisJCQkJICAocFB3ckxpc3RbaWR4Ul0gLSBwUHdyTGlzdFtpZHhMXSkpOworCQlwUmV0VnBkTGlzdFtpXSA9ICh1OCkgazsKKwkJY3VyclB3ciArPSAyOwogCX0KIAotCSpkYXRhID0gTVMoUkVHX1JFQUQoYWgsIEFSX0VFUFJPTV9TVEFUVVNfREFUQSksCi0JCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9WQUwpOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZmxhc2hfbWFwKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCisJCQkJICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcE5ld1Bvd2VyLAorCQkJCSAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKIAotCWFocC0+YWhfY2FsX21lbSA9IGlvcmVtYXAoQVI1NDE2X0VFUFJPTV9TVEFSVF9BRERSLCBBUjU0MTZfRUVQUk9NX01BWCk7CisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCWZyZXEgPSAoaXNFeHRUYXJnZXQpID8gY2VudGVycy5leHRfY2VudGVyIDogY2VudGVycy5jdGxfY2VudGVyOwogCi0JaWYgKCFhaHAtPmFoX2NhbF9tZW0pIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImNhbm5vdCByZW1hcCBlZXByb20gcmVnaW9uIFxuIik7Ci0JCXJldHVybiAtRUlPOworCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLAorCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCW1hdGNoSW5kZXggPSAwOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCisJCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKKwkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKKwkJCQltYXRjaEluZGV4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCisJCQkJICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCWxvd0luZGV4ID0gaSAtIDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwogCX0KIAotCXJldHVybiAwOworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9CisJCQkJKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsIGNsbywgY2hpLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7CisJCX0KKwl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2ZsYXNoX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAorCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJdTggcGNkYWMsIGkgPSAwOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCWJvb2wgbWF0Y2g7CisJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCi0JKmRhdGEgPSBpb3JlYWQxNihhaHAtPmFoX2NhbF9tZW0gKyBvZmYpOworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAotCXJldHVybiB0cnVlOworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCisJCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAorCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOworCWlmIChtYXRjaCkgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOworCX0KKworCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKKwkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQorCQlpKys7CisKKwkqcGNkYWNJZHggPSBpOworCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfZ2V0X3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQl1MzIgaW5pdFR4R2FpbiwKKwkJCQlpbnQgdHhQb3dlciwKKwkJCQl1OCAqcFBEQURDVmFsdWVzKQogewotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlyZXR1cm4gYXRoOWtfaHdfZmxhc2hfcmVhZChhaCwgb2ZmLCBkYXRhKTsKLQllbHNlCi0JCXJldHVybiBhdGg5a19od19lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKKwl1MzIgaTsKKwl1MzIgb2Zmc2V0OworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7CisKKwlvZmZzZXQgPSB0eFBvd2VyOworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQorCQlpZiAoaSA8IG9mZnNldCkKKwkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKKwkJZWxzZQorCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfZmlsbF80a19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorCisKKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKKwkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAorCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQoreworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKwlmcmVxID0gaXNIdDQwVGFyZ2V0ID8gY2VudGVycy5zeW50aF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwgSVNfQ0hBTl8yR0haKGNoYW4pKSkgeworCQltYXRjaEluZGV4ID0gMDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgorCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7CisJCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCQkJbWF0Y2hJbmRleCA9IGk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgorCQkJCSAgICAoZnJlcSA+IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCQlsb3dJbmRleCA9IGkgLSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOworCX0KKworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9ICh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLAorCQkJCQkJY2xvLCBjaGksCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4XS50UG93MnhbaV0sCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4ICsgMV0udFBvdzJ4W2ldKTsKKwkJfQorCX0KK30KKworc3RhdGljIHUxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsCisJCQkJICAgICAgIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAorCQkJCSAgICAgICBib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKQoreworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IChpIDwgbnVtX2JhbmRfZWRnZXMpICYmCisJCSAgICAgKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgeworCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwgaXMyR0h6KSkgeworCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBwUmRFZGdlc1Bvd2VyW2ldLnRQb3dlcjsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKChpID4gMCkgJiYKKwkJCSAgIChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBpczJHSHopKSkgeworCQkJaWYgKGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJICAgICAgIGlzMkdIeikgPCBmcmVxICYmCisJCQkgICAgcFJkRWRnZXNQb3dlcltpIC0gMV0uZmxhZykgeworCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KKwkJCQkJcFJkRWRnZXNQb3dlcltpIC0gMV0udFBvd2VyOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdHdpY2VNYXhFZGdlUG93ZXI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIDRLIHNpemVkIGNhcmRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBhdGg5a19od180a19nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfNGtfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAjZGVmaW5lIFNJWkVfRUVQUk9NXzRLIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAl1MTYgKmVlcF9kYXRhOwogCWludCBhZGRyLCBlZXBfc3RhcnRfbG9jID0gMDsKIApAQCAtMTY5LDE3NiArMzY3LDExIEBACiAjdW5kZWYgU0laRV9FRVBST01fNEsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfZmlsbF9kZWZfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLSNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXUxNiAqZWVwX2RhdGE7Ci0JaW50IGFkZHIsIGFyNTQxNl9lZXBfc3RhcnRfbG9jID0gMHgxMDA7Ci0KLQllZXBfZGF0YSA9ICh1MTYgKillZXA7Ci0KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fREVGOyBhZGRyKyspIHsKLQkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgYXI1NDE2X2VlcF9zdGFydF9sb2MsCi0JCQkJCSBlZXBfZGF0YSkpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJZWVwX2RhdGErKzsKLQl9Ci0JcmV0dXJuIHRydWU7Ci0jdW5kZWYgU0laRV9FRVBST01fREVGCi19Ci0KLXN0YXRpYyBib29sICgqYXRoOWtfZmlsbF9lZXByb21bXSkgKHN0cnVjdCBhdGhfaGFsICopID0gewotCWF0aDlrX2h3X2ZpbGxfZGVmX2VlcHJvbSwKLQlhdGg5a19od19maWxsXzRrX2VlcHJvbQotfTsKLQotc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2ZpbGxfZWVwcm9tW2FocC0+YWhfZWVwX21hcF0oYWgpOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2NoZWNrX2RlZl9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICopICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOwotCXUzMiBzdW0gPSAwLCBlbDsKLQlib29sIG5lZWRfc3dhcCA9IGZhbHNlOwotCWludCBpLCBhZGRyLCBzaXplOwotCi0JaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwKLQkJCQkgJm1hZ2ljKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKLQotCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewotCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKLQotCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpOwotCQkJCW5lZWRfc3dhcCA9IHRydWU7Ci0JCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaHAtPmFoX2VlcHJvbSk7Ci0KLQkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc2l6ZSAvIHNpemVvZih1MTYpOyBhZGRyKyspIHsKLQkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7Ci0JCQkJCSplZXBkYXRhID0gdGVtcDsKLQkJCQkJZWVwZGF0YSsrOwotCi0JCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJCSIweCUwNFggICIsICplZXBkYXRhKTsKLQotCQkJCQlpZiAoKChhZGRyICsgMSkgJSA2KSA9PSAwKQotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19FRVBST00sICJcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKLQkJCQkJImVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCX0KLQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKLQkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7Ci0KLQlpZiAobmVlZF9zd2FwKQotCQllbCA9IHN3YWIxNihhaHAtPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCWVsc2UKLQkJZWwgPSBhaHAtPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGg7Ci0KLQlpZiAoZWwgPiBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSkKLQkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpOwotCWVsc2UKLQkJZWwgPSBlbCAvIHNpemVvZih1MTYpOwotCi0JZWVwZGF0YSA9ICh1MTYgKikoJmFocC0+YWhfZWVwcm9tKTsKLQotCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQotCQlzdW0gXj0gKmVlcGRhdGErKzsKLQotCWlmIChuZWVkX3N3YXApIHsKLQkJdTMyIGludGVnZXIsIGo7Ci0JCXUxNiB3b3JkOwotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcgXG4iKTsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7Ci0JCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKLQkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKLQkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7Ci0JCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOwotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7Ci0JCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7Ci0JCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHN1bSAhPSAweGZmZmYgfHwgYXI1NDE2X2dldF9lZXBfdmVyKGFocCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKLQkgICAgYXI1NDE2X2dldF9lZXBfcmV2KGFocCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAotCQkJc3VtLCBhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2NoZWNrXzRrX2VlcHJvbShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKICNkZWZpbmUgRUVQUk9NXzRLX1NJWkUgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KSkKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKikgJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCQkoc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKikgJmFoLT5lZXByb20ubWFwNGs7CiAJdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOwogCXUzMiBzdW0gPSAwLCBlbDsKIAlib29sIG5lZWRfc3dhcCA9IGZhbHNlOwpAQCAtMzYyLDcgKzM5NSw3IEBACiAKIAkJCWlmIChtYWdpYzIgPT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewogCQkJCW5lZWRfc3dhcCA9IHRydWU7Ci0JCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaHAtPmFoX2VlcHJvbSk7CisJCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaC0+ZWVwcm9tKTsKIAogCQkJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBFRVBST01fNEtfU0laRTsgYWRkcisrKSB7CiAJCQkJCXRlbXAgPSBzd2FiMTYoKmVlcGRhdGEpOwpAQCAtMzg5LDE2ICs0MjIsMTYgQEAKIAkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CiAKIAlpZiAobmVlZF9zd2FwKQotCQllbCA9IHN3YWIxNihhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwogCWVsc2UKLQkJZWwgPSBhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKKwkJZWwgPSBhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIubGVuZ3RoOwogCiAJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCiAJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpOwogCWVsc2UKIAkJZWwgPSBlbCAvIHNpemVvZih1MTYpOwogCi0JZWVwZGF0YSA9ICh1MTYgKikoJmFocC0+YWhfZWVwcm9tKTsKKwllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZWw7IGkrKykKIAkJc3VtIF49ICplZXBkYXRhKys7CkBAIC00NDgsMTEgKzQ4MSwxMSBAQAogCQl9CiAJfQogCi0JaWYgKHN1bSAhPSAweGZmZmYgfHwgYXI1NDE2X2dldF9lZXA0a192ZXIoYWhwKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAotCSAgICBhcjU0MTZfZ2V0X2VlcDRrX3JldihhaHApIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCWlmIChzdW0gIT0gMHhmZmZmIHx8IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKKwkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAogCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFyNTQxNl9nZXRfZWVwNGtfdmVyKGFocCkpOworCQkJc3VtLCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NjAsNDggKzQ5Myw1MCBAQAogI3VuZGVmIEVFUFJPTV80S19TSVpFCiB9CiAKLXN0YXRpYyBpbnQgKCphdGg5a19jaGVja19lZXByb21bXSkgKHN0cnVjdCBhdGhfaGFsICopID0gewotCWF0aDlrX2h3X2NoZWNrX2RlZl9lZXByb20sCi0JYXRoOWtfaHdfY2hlY2tfNGtfZWVwcm9tCi19OwotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19od19jaGVja19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUzMiBhdGg5a19od180a19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKIAotCXJldHVybiBhdGg5a19jaGVja19lZXByb21bYWhwLT5haF9lZXBfbWFwXShhaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19maWxsX3ZwZF90YWJsZSh1OCBwd3JNaW4sIHU4IHB3ck1heCwgdTggKnBQd3JMaXN0LAotCQkJCQkgICB1OCAqcFZwZExpc3QsIHUxNiBudW1JbnRlcmNlcHRzLAotCQkJCQkgICB1OCAqcFJldFZwZExpc3QpCi17Ci0JdTE2IGksIGs7Ci0JdTggY3VyclB3ciA9IHB3ck1pbjsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8PSAocHdyTWF4IC0gcHdyTWluKSAvIDI7IGkrKykgewotCQlhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoY3VyclB3ciwgcFB3ckxpc3QsCi0JCQkJCSAgICAgICBudW1JbnRlcmNlcHRzLCAmKGlkeEwpLAotCQkJCQkgICAgICAgJihpZHhSKSk7Ci0JCWlmIChpZHhSIDwgMSkKLQkJCWlkeFIgPSAxOwotCQlpZiAoaWR4TCA9PSBudW1JbnRlcmNlcHRzIC0gMSkKLQkJCWlkeEwgPSAodTE2KSAobnVtSW50ZXJjZXB0cyAtIDIpOwotCQlpZiAocFB3ckxpc3RbaWR4TF0gPT0gcFB3ckxpc3RbaWR4Ul0pCi0JCQlrID0gcFZwZExpc3RbaWR4TF07Ci0JCWVsc2UKLQkJCWsgPSAodTE2KSgoKGN1cnJQd3IgLSBwUHdyTGlzdFtpZHhMXSkgKiBwVnBkTGlzdFtpZHhSXSArCi0JCQkJICAgKHBQd3JMaXN0W2lkeFJdIC0gY3VyclB3cikgKiBwVnBkTGlzdFtpZHhMXSkgLwotCQkJCSAgKHBQd3JMaXN0W2lkeFJdIC0gcFB3ckxpc3RbaWR4TF0pKTsKLQkJcFJldFZwZExpc3RbaV0gPSAodTgpIGs7Ci0JCWN1cnJQd3IgKz0gMjsKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBFRVBfTkZUSFJFU0hfMjoKKwkJcmV0dXJuIHBNb2RhbC0+bm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgQVJfRUVQUk9NX01BQygwKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMSk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107CisJY2FzZSBBUl9FRVBST01fTUFDKDIpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOworCWNhc2UgRUVQX1JFR18wOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKKwljYXNlIEVFUF9SRUdfMToKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07CisJY2FzZSBFRVBfT1BfQ0FQOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKKwljYXNlIEVFUF9PUF9NT0RFOgorCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7CisJY2FzZSBFRVBfUkZfU0lMRU5UOgorCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OworCWNhc2UgRUVQX09CXzI6CisJCXJldHVybiBwTW9kYWwtPm9iXzAxOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWwtPmRiMV8wMTsKKwljYXNlIEVFUF9NSU5PUl9SRVY6CisJCXJldHVybiBwQmFzZS0+dmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0s7CisJY2FzZSBFRVBfVFhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CisJY2FzZSBFRVBfUlhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT5yeE1hc2s7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKIAl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKIAkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKQEAgLTYwNSw3ICs2NDAsNyBAQAogCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CiAJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKIAotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewogCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwogCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKIAkJfSBlbHNlIHsKQEAgLTY0NCw3ICs2NzksNyBAQAogCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKIAkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwogCi0JCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7CisJCWlmICh0Z3RJbmRleCA+PSBtYXhJbmRleCkgewogCQkJd2hpbGUgKChzcyA8PSB0Z3RJbmRleCkgJiYKIAkJCSAgICAgICAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewogCQkJCXRtcFZhbCA9IChpbnQxNl90KSBUTVBfVkFMX1ZQRF9UQUJMRTsKQEAgLTY2OSw0NTEgKzcwNCwyMCBAQAogI3VuZGVmIFRNUF9WQUxfVlBEX1RBQkxFCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxICpwUmF3RGF0YVNldCwKLQkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKLQkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKLQkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAotCQkJCXUxNiBudW1YcGRHYWlucykKLXsKLQlpbnQgaSwgaiwgazsKLQlpbnQxNl90IHNzOwotCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOwotCXN0YXRpYyB1OCB2cGRUYWJsZUxbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZVJbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZUlbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCi0JdTggKnBWcGRMLCAqcFZwZFIsICpwUHdyTCwgKnBQd3JSOwotCXU4IG1pblB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCXU4IG1heFB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCWludDE2X3QgdnBkU3RlcDsKLQlpbnQxNl90IHRtcFZhbDsKLQl1MTYgc2l6ZUN1cnJWcGRUYWJsZSwgbWF4SW5kZXgsIHRndEluZGV4OwotCWJvb2wgbWF0Y2g7Ci0JaW50MTZfdCBtaW5EZWx0YSA9IDA7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKLQkJCQkJCQkgICAgIElTX0NIQU5fMkdIWihjaGFuKSksCi0JCQkJCSAgICAgICBiQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOwotCi0JaWYgKG1hdGNoKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCQltaW5Qd3JUNFtpXSA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXVswXTsKLQkJCW1heFB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzRdOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQlwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnZwZFBkZ1tpXSwKLQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQl2cGRUYWJsZUlbaV0pOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCXBWcGRMID0gcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldOwotCQkJcFB3ckwgPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV07Ci0JCQlwVnBkUiA9IHBSYXdEYXRhU2V0W2lkeFJdLnZwZFBkZ1tpXTsKLQkJCXBQd3JSID0gcFJhd0RhdGFTZXRbaWR4Ul0ucHdyUGRnW2ldOwotCi0JCQltaW5Qd3JUNFtpXSA9IG1heChwUHdyTFswXSwgcFB3clJbMF0pOwotCi0JCQltYXhQd3JUNFtpXSA9Ci0JCQkJbWluKHBQd3JMW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdLAotCQkJCSAgICBwUHdyUltBUjU0MTZfUERfR0FJTl9JQ0VQVFMgLSAxXSk7Ci0KLQotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3ckwsIHBWcGRMLAotCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVMW2ldKTsKLQkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKLQkJCQkJCXBQd3JSLCBwVnBkUiwKLQkJCQkJCUFSNTQxNl9QRF9HQUlOX0lDRVBUUywKLQkJCQkJCXZwZFRhYmxlUltpXSk7Ci0KLQkJCWZvciAoaiA9IDA7IGogPD0gKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMjsgaisrKSB7Ci0JCQkJdnBkVGFibGVJW2ldW2pdID0KLQkJCQkJKHU4KShhdGg5a19od19pbnRlcnBvbGF0ZSgodTE2KQotCQkJCQkgICAgIEZSRVEyRkJJTihjZW50ZXJzLgotCQkJCQkJICAgICAgIHN5bnRoX2NlbnRlciwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFoKLQkJCQkJCSAgICAgICAoY2hhbikpLAotCQkJCQkgICAgIGJDaGFuc1tpZHhMXSwgYkNoYW5zW2lkeFJdLAotCQkJCQkgICAgIHZwZFRhYmxlTFtpXVtqXSwgdnBkVGFibGVSW2ldW2pdKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqcE1pbkNhbFBvd2VyID0gKGludDE2X3QpKG1pblB3clQ0WzBdIC8gMik7Ci0KLQlrID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCWlmIChpID09IChudW1YcGRHYWlucyAtIDEpKQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKG1heFB3clQ0W2ldIC8gMik7Ci0JCWVsc2UKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KLQkJCQkodTE2KSgobWF4UHdyVDRbaV0gKyBtaW5Qd3JUNFtpICsgMV0pIC8gNCk7Ci0KLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJbWluKCh1MTYpQVI1NDE2X01BWF9SQVRFX1BPV0VSLCBwUGRHYWluQm91bmRhcmllc1tpXSk7Ci0KLQkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwotCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKLQkJfSBlbHNlIHsKLQkJCW1pbkRlbHRhID0gMDsKLQkJfQotCi0JCWlmIChpID09IDApIHsKLQkJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQkJCXNzID0gKGludDE2X3QpKDAgLSAobWluUHdyVDRbaV0gLyAyKSk7Ci0JCQllbHNlCi0JCQkJc3MgPSAwOwotCQl9IGVsc2UgewotCQkJc3MgPSAoaW50MTZfdCkoKHBQZEdhaW5Cb3VuZGFyaWVzW2kgLSAxXSAtCi0JCQkJCShtaW5Qd3JUNFtpXSAvIDIpKSAtCi0JCQkJICAgICAgIHRQZEdhaW5PdmVybGFwICsgMSArIG1pbkRlbHRhKTsKLQkJfQotCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVsxXSAtIHZwZFRhYmxlSVtpXVswXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQl3aGlsZSAoKHNzIDwgMCkgJiYgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKLQkJCXRtcFZhbCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMF0gKyBzcyAqIHZwZFN0ZXApOwotCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPCAwKSA/IDAgOiB0bXBWYWwpOwotCQkJc3MrKzsKLQkJfQotCi0JCXNpemVDdXJyVnBkVGFibGUgPSAodTgpICgobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyICsgMSk7Ci0JCXRndEluZGV4ID0gKHU4KShwUGRHYWluQm91bmRhcmllc1tpXSArIHRQZEdhaW5PdmVybGFwIC0KLQkJCQkobWluUHdyVDRbaV0gLyAyKSk7Ci0JCW1heEluZGV4ID0gKHRndEluZGV4IDwgc2l6ZUN1cnJWcGRUYWJsZSkgPwotCQkJdGd0SW5kZXggOiBzaXplQ3VyclZwZFRhYmxlOwotCi0JCXdoaWxlICgoc3MgPCBtYXhJbmRleCkgJiYgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKLQkJCXBQREFEQ1ZhbHVlc1trKytdID0gdnBkVGFibGVJW2ldW3NzKytdOwotCQl9Ci0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdIC0KLQkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQlpZiAodGd0SW5kZXggPiBtYXhJbmRleCkgewotCQkJd2hpbGUgKChzcyA8PSB0Z3RJbmRleCkgJiYKLQkJCSAgICAgICAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewotCQkJCXRtcFZhbCA9IChpbnQxNl90KSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArCi0JCQkJCQkgICAgKHNzIC0gbWF4SW5kZXggKyAxKSAqIHZwZFN0ZXApKTsKLQkJCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA+IDI1NSkgPwotCQkJCQkJCSAyNTUgOiB0bXBWYWwpOwotCQkJCXNzKys7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl3aGlsZSAoaSA8IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLKSB7Ci0JCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gcFBkR2FpbkJvdW5kYXJpZXNbaSAtIDFdOwotCQlpKys7Ci0JfQotCi0Jd2hpbGUgKGsgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUykgewotCQlwUERBRENWYWx1ZXNba10gPSBwUERBRENWYWx1ZXNbayAtIDFdOwotCQlrKys7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcG93SW5mbywKLQkJCQkgICAgICB1MTYgbnVtQ2hhbm5lbHMsCi0JCQkJICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwTmV3UG93ZXIsCi0JCQkJICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzRXh0VGFyZ2V0KQotewotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQl1MTYgY2xvLCBjaGk7Ci0JaW50IGk7Ci0JaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKLQl1MTYgZnJlcTsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQlmcmVxID0gKGlzRXh0VGFyZ2V0KSA/IGNlbnRlcnMuZXh0X2NlbnRlciA6IGNlbnRlcnMuY3RsX2NlbnRlcjsKLQotCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLAotCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCW1hdGNoSW5kZXggPSAwOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCi0JCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKLQkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKLQkJCQltYXRjaEluZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSBpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCi0JCQkJICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgewotCQkJCWxvd0luZGV4ID0gaSAtIDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQotCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwotCX0KLQotCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7Ci0JCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOwotCX0gZWxzZSB7Ci0JCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0JCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7Ci0JCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9Ci0JCQkJKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsIGNsbywgY2hpLAotCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAotCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICpwb3dJbmZvLAotCQkJCSAgICAgICB1MTYgbnVtQ2hhbm5lbHMsCi0JCQkJICAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICpwTmV3UG93ZXIsCi0JCQkJICAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0h0NDBUYXJnZXQpCi17Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCXUxNiBjbG8sIGNoaTsKLQlpbnQgaTsKLQlpbnQgbWF0Y2hJbmRleCA9IC0xLCBsb3dJbmRleCA9IC0xOwotCXUxNiBmcmVxOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCWZyZXEgPSBpc0h0NDBUYXJnZXQgPyBjZW50ZXJzLnN5bnRoX2NlbnRlciA6IGNlbnRlcnMuY3RsX2NlbnRlcjsKLQotCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLCBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCW1hdGNoSW5kZXggPSAwOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCi0JCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKLQkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKLQkJCQltYXRjaEluZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZQotCQkJCWlmICgoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCi0JCQkJICAgIChmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpKSB7Ci0JCQkJCWxvd0luZGV4ID0gaSAtIDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJfQotCQlpZiAoKG1hdGNoSW5kZXggPT0gLTEpICYmIChsb3dJbmRleCA9PSAtMSkpCi0JCQltYXRjaEluZGV4ID0gaSAtIDE7Ci0JfQotCi0JaWYgKG1hdGNoSW5kZXggIT0gLTEpIHsKLQkJKnBOZXdQb3dlciA9IHBvd0luZm9bbWF0Y2hJbmRleF07Ci0JfSBlbHNlIHsKLQkJY2xvID0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bbG93SW5kZXhdLmJDaGFubmVsLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQkJY2hpID0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bbG93SW5kZXggKyAxXS5iQ2hhbm5lbCwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bVJhdGVzOyBpKyspIHsKLQkJCXBOZXdQb3dlci0+dFBvdzJ4W2ldID0gKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsCi0JCQkJCQljbG8sIGNoaSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXhdLnRQb3cyeFtpXSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXggKyAxXS50UG93MnhbaV0pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdTE2IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcih1MTYgZnJlcSwKLQkJCQkgICAgICAgc3RydWN0IGNhbF9jdGxfZWRnZXMgKnBSZEVkZ2VzUG93ZXIsCi0JCQkJICAgICAgIGJvb2wgaXMyR0h6LCBpbnQgbnVtX2JhbmRfZWRnZXMpCi17Ci0JdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgKGkgPCBudW1fYmFuZF9lZGdlcykgJiYKLQkJICAgICAocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7Ci0JCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2ldLmJDaGFubmVsLCBpczJHSHopKSB7Ci0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IHBSZEVkZ2VzUG93ZXJbaV0udFBvd2VyOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKGkgPiAwKSAmJgotCQkJICAgKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgIGlzMkdIeikpKSB7Ci0JCQlpZiAoYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaSAtIDFdLmJDaGFubmVsLAotCQkJCQkgICAgICAgaXMyR0h6KSA8IGZyZXEgJiYKLQkJCSAgICBwUmRFZGdlc1Bvd2VyW2kgLSAxXS5mbGFnKSB7Ci0JCQkJdHdpY2VNYXhFZGdlUG93ZXIgPQotCQkJCQlwUmRFZGdlc1Bvd2VyW2kgLSAxXS50UG93ZXI7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiB0d2ljZU1heEVkZ2VQb3dlcjsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSAqcFJhd0RhdGFzZXQ7Ci0JdTggKnBDYWxCQ2hhbnMgPSBOVUxMOwotCXUxNiBwZEdhaW5PdmVybGFwX3QyOwotCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107Ci0JdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9QRF9HQUlOU19JTl9NQVNLXTsKLQl1MTYgbnVtUGllcnMsIGksIGo7Ci0JaW50MTZfdCB0TWluQ2FsUG93ZXI7Ci0JdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7Ci0JdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X05VTV9QRF9HQUlOU10gPSB7IDAsIDAsIDAsIDAgfTsKLQl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7Ci0JaW50MTZfdCBtb2RhbElkeDsKLQotCW1vZGFsSWR4ID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMSA6IDA7Ci0JeHBkTWFzayA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlclttb2RhbElkeF0ueHBkR2FpbjsKLQotCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJcGRHYWluT3ZlcmxhcF90MiA9Ci0JCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXJbbW9kYWxJZHhdLnBkR2Fpbk92ZXJsYXA7Ci0JfSBlbHNlIHsKLQkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKLQkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7Ci0JfQotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyMkc7Ci0JCW51bVBpZXJzID0gQVI1NDE2X05VTV8yR19DQUxfUElFUlM7Ci0JfSBlbHNlIHsKLQkJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjVHOwotCQludW1QaWVycyA9IEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTOwotCX0KLQotCW51bVhwZEdhaW4gPSAwOwotCi0JZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7Ci0JCWlmICgoeHBkTWFzayA+PiAoQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgLSBpKSkgJiAxKSB7Ci0JCQlpZiAobnVtWHBkR2FpbiA+PSBBUjU0MTZfTlVNX1BEX0dBSU5TKQotCQkJCWJyZWFrOwotCQkJeHBkR2FpblZhbHVlc1tudW1YcGRHYWluXSA9Ci0JCQkJKHUxNikoQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgLSBpKTsKLQkJCW51bVhwZEdhaW4rKzsKLQkJfQotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfTlVNX1BEX0dBSU4sCi0JCSAgICAgIChudW1YcGRHYWluIC0gMSkgJiAweDMpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8xLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzBdKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMiwKLQkJICAgICAgeHBkR2FpblZhbHVlc1sxXSk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzMsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMl0pOwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWhwLT5haF9yeGNoYWlubWFzayA9PSA1IHx8IGFocC0+YWhfdHhjaGFpbm1hc2sgPT0gNSkgJiYKLQkJICAgIChpICE9IDApKSB7Ci0JCQlyZWdDaGFpbk9mZnNldCA9IChpID09IDEpID8gMHgyMDAwIDogMHgxMDAwOwotCQl9IGVsc2UKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKLQotCQlpZiAocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudHhNYXNrICYgKDEgPDwgaSkpIHsKLQkJCWlmIChJU19DSEFOXzJHSFooY2hhbikpCi0JCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1tpXTsKLQkJCWVsc2UKLQkJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTVHW2ldOwotCi0JCQlhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsIGNoYW4sCi0JCQkJCSAgICBwUmF3RGF0YXNldCwgcENhbEJDaGFucywKLQkJCQkJICAgIG51bVBpZXJzLCBwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCi0JCQkJCSAgICBwZGFkY1ZhbHVlcywgbnVtWHBkR2Fpbik7Ci0KLQkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJCVJFR19XUklURShhaCwKLQkJCQkJICBBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgU00ocGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzBdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzEpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1sxXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8yKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMl0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMykKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzNdLAotCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCkpOwotCQkJfQotCi0JCQlyZWdPZmZzZXQgPSBBUl9QSFlfQkFTRSArICg2NzIgPDwgMikgKyByZWdDaGFpbk9mZnNldDsKLQkJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCQkJcmVnMzIgPSAoKHBkYWRjVmFsdWVzWzQgKiBqICsgMF0gJiAweEZGKSA8PCAwKSB8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAxXSAmIDB4RkYpIDw8IDgpIHwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDJdICYgMHhGRikgPDwgMTYpfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgM10gJiAweEZGKSA8PCAyNCk7Ci0JCQkJUkVHX1dSSVRFKGFoLCByZWdPZmZzZXQsIHJlZzMyKTsKLQotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKLQkJCQkJIlBEQURDICglZCwlNHgpOiAlNC40eCAlOC44eFxuIiwKLQkJCQkJaSwgcmVnQ2hhaW5PZmZzZXQsIHJlZ09mZnNldCwKLQkJCQkJcmVnMzIpOwotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKLQkJCQkJIlBEQURDOiBDaGFpbiAlZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfCBQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfFxuIiwKLQkJCQkJaSwgNCAqIGosIHBkYWRjVmFsdWVzWzQgKiBqXSwKLQkJCQkJNCAqIGogKyAxLCBwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAotCQkJCQk0ICogaiArIDIsIHBkYWRjVmFsdWVzWzQgKiBqICsgMl0sCi0JCQkJCTQgKiBqICsgMywKLQkJCQkJcGRhZGNWYWx1ZXNbNCAqIGogKyAzXSk7Ci0KLQkJCQlyZWdPZmZzZXQgKz0gNDsKLQkJCX0KLQkJfQotCX0KLQotCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgKnBSYXdEYXRhc2V0OwogCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKIAl1MTYgcGRHYWluT3ZlcmxhcF90MjsKIAlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOwotCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107CisJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKIAl1MTYgbnVtUGllcnMsIGksIGo7CiAJaW50MTZfdCB0TWluQ2FsUG93ZXI7CiAJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7Ci0JdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X05VTV9QRF9HQUlOU10gPSB7IDAsIDAsIDAsIDAgfTsKKwl1MTYgeHBkR2FpblZhbHVlc1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXSA9IHsgMCwgMCB9OwogCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKIAogCXhwZE1hc2sgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXIueHBkR2FpbjsKQEAgLTExMjgsMTYgKzczMiwxNiBAQAogCX0KIAogCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKLQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOworCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7CiAKIAludW1YcGRHYWluID0gMDsKIAotCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewotCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgewotCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X05VTV9QRF9HQUlOUykKKwlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKKwkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKKwkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9FRVA0S19OVU1fUERfR0FJTlMpCiAJCQkJYnJlYWs7CiAJCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOworCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7CiAJCQludW1YcGRHYWluKys7CiAJCX0KIAl9CkBAIC0xMTQ4LDEyICs3NTIsMTEgQEAKIAkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCiAJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMywgMCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKLQkJICAgIChhaHAtPmFoX3J4Y2hhaW5tYXNrID09IDUgfHwgYWhwLT5haF90eGNoYWlubWFzayA9PSA1KSAmJgorCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCiAJCSAgICAoaSAhPSAwKSkgewogCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKIAkJfSBlbHNlCkBAIC0xMTY4LDcgKzc3MSw3IEBACiAJCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKIAkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKIAotCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewogCQkJCVJFR19XUklURShhaCwgQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAogCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCiAJCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApCkBAIC0xMjE2LDI5OCArODE5LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCQkJICBpbnQxNl90ICpyYXRlc0FycmF5LAotCQkJCQkJICB1MTYgY2ZnQ3RsLAotCQkJCQkJICB1MTYgQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJCSAgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkJICB1MTYgcG93ZXJMaW1pdCkKLXsKLSNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4gICAgIDYgIC8qIDEwKmxvZzEwKDIpKjIgKi8KLSNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTiAgIDEwIC8qIDEwKmxvZzEwKDMpKjIgKi8KLQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KLQkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKLQotCWludCBpOwotCWludDE2X3QgdHdpY2VMYXJnZXN0QW50ZW5uYTsKLQlzdHJ1Y3QgY2FsX2N0bF9kYXRhICpyZXA7Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbSwgdGFyZ2V0UG93ZXJDY2sgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG1FeHQgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMH0gfSwgdGFyZ2V0UG93ZXJDY2tFeHQgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMCB9Ci0JfTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCB0YXJnZXRQb3dlckh0MjAsIHRhcmdldFBvd2VySHQ0MCA9IHsKLQkJMCwgezAsIDAsIDAsIDB9Ci0JfTsKLQl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOwotCXUxNiBjdGxNb2Rlc0ZvcjExYVtdID0KLQkJeyBDVExfMTFBLCBDVExfNUdIVDIwLCBDVExfMTFBX0VYVCwgQ1RMXzVHSFQ0MCB9OwotCXUxNiBjdGxNb2Rlc0ZvcjExZ1tdID0KLQkJeyBDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLCBDVExfMTFCX0VYVCwgQ1RMXzExR19FWFQsCi0JCSAgQ1RMXzJHSFQ0MAotCQl9OwotCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQlpbnQgdHhfY2hhaW5tYXNrOwotCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKLQotCXR4X2NoYWlubWFzayA9IGFocC0+YWhfdHhjaGFpbm1hc2s7Ci0KLQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KAotCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXIKLQkJCVtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMF0sCi0JCXBFZXBEYXRhLT5tb2RhbEhlYWRlcgotCQkJW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFsxXSk7Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KCh1OCl0d2ljZUxhcmdlc3RBbnRlbm5hLAotCQkJCSAgcEVlcERhdGEtPm1vZGFsSGVhZGVyCi0JCQkJICBbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzJdKTsKLQotCXR3aWNlTGFyZ2VzdEFudGVubmEgPSAoaW50MTZfdCltaW4oQW50ZW5uYVJlZHVjdGlvbiAtCi0JCQkJCSAgIHR3aWNlTGFyZ2VzdEFudGVubmEsIDApOwotCi0JbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCi0JaWYgKGFoLT5haF90cFNjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgewotCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KLQkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKGFoLT5haF90cFNjYWxlKV0gKiAyKTsKLQl9Ci0KLQlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOwotCi0Jc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyh0eF9jaGFpbm1hc2spKSB7Ci0JY2FzZSAxOgotCQlicmVhazsKLQljYXNlIDI6Ci0JCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47Ci0JCWJyZWFrOwotCX0KLQotCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOwotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpIC0KLQkJCVNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOwotCQlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFnOwotCi0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJDY2ssIDQsIGZhbHNlKTsKLQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7Ci0JCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAotCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOwotCi0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7Ci0JCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCi0JCQkJQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOwotCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckNja0V4dCwgNCwgdHJ1ZSk7Ci0JCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOwotCQl9Ci0JfSBlbHNlIHsKLQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKSAtCi0JCQlTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MDsKLQkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExYTsKLQotCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1RywKLQkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKLQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1R0hUMjAsCi0JCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7Ci0KLQkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgewotCQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKTsKLQkJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHSFQ0MCwKLQkJCQlBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlMsCi0JCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7Ci0JCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUcsCi0JCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOwotCQl9Ci0JfQotCi0JZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKLQkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8Ci0JCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7Ci0JCWlmIChpc0h0NDBDdGxNb2RlKQotCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwotCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKLQkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7Ci0JCWVsc2UKLQkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQkJaWYgKGFyNTQxNl9nZXRfZWVwX3ZlcihhaHApID09IDE0ICYmIGFyNTQxNl9nZXRfZWVwX3JldihhaHApIDw9IDIpCi0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJIkxPT1AtTW9kZSBjdGxNb2RlICVkIDwgJWQsIGlzSHQ0MEN0bE1vZGUgJWQsICIKLQkJCSJFWFRfQURESVRJVkUgJWRcbiIsCi0JCQljdGxNb2RlLCBudW1DdGxNb2RlcywgaXNIdDQwQ3RsTW9kZSwKLQkJCShwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkpOwotCi0JCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X05VTV9DVExTKSAmJiBwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCQkiICBMT09QLUN0bGlkeCAlZDogY2ZnQ3RsIDB4JTIuMnggIgotCQkJCSJwQ3RsTW9kZSAweCUyLjJ4IGN0bEluZGV4IDB4JTIuMnggIgotCQkJCSJjaGFuICVkXG4iLAotCQkJCWksIGNmZ0N0bCwgcEN0bE1vZGVbY3RsTW9kZV0sCi0JCQkJcEVlcERhdGEtPmN0bEluZGV4W2ldLCBjaGFuLT5jaGFubmVsKTsKLQotCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAotCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpKSB7Ci0JCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7Ci0KLQkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAotCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnModHhfY2hhaW5tYXNrKSAtIDFdLAotCQkJCUlTX0NIQU5fMkdIWihjaGFuKSwgQVI1NDE2X05VTV9CQU5EX0VER0VTKTsKLQotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCi0JCQkJCSIgICAgTUFUQ0gtRUVfSURYICVkOiBjaCAlZCBpczIgJWQgIgotCQkJCQkiMnhNaW5FZGdlICVkIGNoYWlubWFzayAlZCBjaGFpbnMgJWRcbiIsCi0JCQkJCWksIGZyZXEsIElTX0NIQU5fMkdIWihjaGFuKSwKLQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIsIHR4X2NoYWlubWFzaywKLQkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJKHR4X2NoYWlubWFzaykpOwotCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwKLQkJCQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCW1pbkN0bFBvd2VyID0gbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCSIgICAgU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkICIKLQkJCSIyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAotCQkJY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKLQotCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7Ci0JCWNhc2UgQ1RMXzExQjoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUE6Ci0JCWNhc2UgQ1RMXzExRzoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyT2ZkbS50UG93MngpOyBpKyspIHsKLQkJCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF81R0hUMjA6Ci0JCWNhc2UgQ1RMXzJHSFQyMDoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspIHsKLQkJCQl0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUJfRVhUOgotCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdID0gbWluKCh1MTYpCi0JCQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSwKLQkJCQkJbWluQ3RsUG93ZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQV9FWFQ6Ci0JCWNhc2UgQ1RMXzExR19FWFQ6Ci0JCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdID0gbWluKCh1MTYpCi0JCQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0sCi0JCQkJCW1pbkN0bFBvd2VyKTsKLQkJCWJyZWFrOwotCQljYXNlIENUTF81R0hUNDA6Ci0JCWNhc2UgQ1RMXzJHSFQ0MDoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspIHsKLQkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyYXRlc0FycmF5W3JhdGU2bWJdID0gcmF0ZXNBcnJheVtyYXRlOW1iXSA9IHJhdGVzQXJyYXlbcmF0ZTEybWJdID0KLQkJcmF0ZXNBcnJheVtyYXRlMThtYl0gPSByYXRlc0FycmF5W3JhdGUyNG1iXSA9Ci0JCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07Ci0JcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOwotCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107Ci0JcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCi0JCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPQotCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzFdOwotCQlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0KLQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKLQkJOwotCQlyYXRlc0FycmF5W3JhdGUxMXNdID0gcmF0ZXNBcnJheVtyYXRlMTFsXSA9Ci0JCQl0YXJnZXRQb3dlckNjay50UG93MnhbM107Ci0JCTsKLQl9Ci0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7Ci0JCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9Ci0JCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKLQkJfQotCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07Ci0JCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPQotCQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXTsKLQkJfQotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkJCSBpbnQxNl90ICpyYXRlc0FycmF5LAogCQkJCQkJIHUxNiBjZmdDdGwsCkBAIC0xNTE1LDggKzgyNyw3IEBACiAJCQkJCQkgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAogCQkJCQkJIHUxNiBwb3dlckxpbWl0KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKnBFZXBEYXRhID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOwogCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKIAlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9CiAJCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CkBAIC0xNTQ0LDcgKzg1NSw3IEBACiAJaW50IHR4X2NoYWlubWFzazsKIAl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CiAKLQl0eF9jaGFpbm1hc2sgPSBhaHAtPmFoX3R4Y2hhaW5tYXNrOworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKIAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIApAQCAtMTU1NSw5ICs4NjYsOSBAQAogCiAJbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOwogCi0JaWYgKGFoLT5haF90cFNjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgeworCWlmIChhaC0+cmVndWxhdG9yeS50cF9zY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKIAkJbWF4UmVnQWxsb3dlZFBvd2VyIC09Ci0JCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+YWhfdHBTY2FsZSldICogMik7CisJCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+cmVndWxhdG9yeS50cF9zY2FsZSldICogMik7CiAJfQogCiAJc2NhbGVkUG93ZXIgPSBtaW4ocG93ZXJMaW1pdCwgbWF4UmVnQWxsb3dlZFBvd2VyKTsKQEAgLTE2MDUsOCArOTE2LDggQEAKIAkJZWxzZQogCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKIAotCQlpZiAoYXI1NDE2X2dldF9lZXBfdmVyKGFocCkgPT0gMTQgJiYKLQkJCQlhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8PSAyKQorCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQogCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKQEAgLTE3NDMsMTQ4ICsxMDU0LDE0IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSB1MTYgY2ZnQ3RsLAotCQkJIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCSB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCSB1OCBwb3dlckxpbWl0KQorc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICB1MTYgY2ZnQ3RsLAorCQkJCSAgIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICB1OCBwb3dlckxpbWl0KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYocEVlcERhdGEtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07Ci0JaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOwotCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKLQlpbnQgaTsKLQotCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOwotCi0JaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0JfQotCi0JaWYgKCFhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAotCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKLQkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkgICAgICAgcG93ZXJMaW1pdCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0ICIKLQkJCSJ0eCBwb3dlciBwZXIgcmF0ZSB0YWJsZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAiYXRoOWtfaHdfc2V0X3R4cG93ZXI6IHVuYWJsZSB0byBzZXQgcG93ZXIgdGFibGVcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7Ci0JCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl9Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKLQkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiwKLQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF83XSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF82XSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF81XSwgOCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzRdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCi0JCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKLQl9Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9TVUIsCi0JCSAgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IzQ2hhaW4sIDYpCi0JCSAgfCBBVEg5S19QT1dfU00ocE1vZGFsLT5wd3JEZWNyZWFzZUZvcjJDaGFpbiwgMCkpOwotCi0JaSA9IHJhdGU2bWI7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQotCQlpID0gcmF0ZUh0NDBfMDsKLQllbHNlIGlmIChJU19DSEFOX0hUMjAoY2hhbikpCi0JCWkgPSByYXRlSHQyMF8wOwotCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCWFoLT5haF9tYXhQb3dlckxldmVsID0KLQkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7Ci0JZWxzZQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9IHJhdGVzQXJyYXlbaV07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKIAlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwogCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKQEAgLTE5OTYsMzcxICsxMTczLDQzIEBACiAJCWkgPSByYXRlSHQyMF8wOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCWFoLT5haF9tYXhQb3dlckxldmVsID0KKwkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0KIAkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7CiAJZWxzZQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9IHJhdGVzQXJyYXlbaV07CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAoKmF0aDlrX3NldF90eHBvd2VyW10pIChzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICosCi0JCQkJICAgdTE2LCB1OCwgdTgsIHU4KSA9IHsKLQlhdGg5a19od19kZWZfc2V0X3R4cG93ZXIsCi0JYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIKLX07Ci0KLWludCBhdGg5a19od19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX3NldF90eHBvd2VyW2FocC0+YWhfZWVwX21hcF0oYWgsIGNoYW4sIGNmZ0N0bCwKLQkJCXR3aWNlQW50ZW5uYVJlZHVjdGlvbiwgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQlwb3dlckxpbWl0KTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZl9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0jZGVmaW5lIFhQQV9MVkxfRlJFUShjbnQpIChwTW9kYWwtPnhwYUJpYXNMdmxGcmVxW2NudF0pCi0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFocC0+YWhfZWVwcm9tLmRlZjsKLQl1OCBiaWFzbGV2ZWw7Ci0KLQlpZiAoYWgtPmFoX21hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApCi0JCXJldHVybjsKLQotCWlmIChhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCi0JCXJldHVybjsKLQotCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKLQotCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgewotCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7Ci0JfSBlbHNlIHsKLQkJdTE2IHJlc2V0RnJlcUJpbiwgZnJlcUJpbiwgZnJlcUNvdW50ID0gMDsKLQkJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCi0JCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQotCQlyZXNldEZyZXFCaW4gPSBGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKDApICYgMHhmZjsKLQkJYmlhc2xldmVsID0gKHU4KSAoWFBBX0xWTF9GUkVRKDApID4+IDE0KTsKLQotCQlmcmVxQ291bnQrKzsKLQotCQl3aGlsZSAoZnJlcUNvdW50IDwgMykgewotCQkJaWYgKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID09IDB4MCkKLQkJCQlicmVhazsKLQotCQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUShmcmVxQ291bnQpICYgMHhmZjsKLQkJCWlmIChyZXNldEZyZXFCaW4gPj0gZnJlcUJpbikKLQkJCQliaWFzbGV2ZWwgPSAodTgpKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID4+IDE0KTsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQkJCWZyZXFDb3VudCsrOwotCQl9Ci0JfQotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsIDcsIDEpID0gKElOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywKLQkJCQkJNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOwotCX0gZWxzZSB7Ci0JCUlOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywgNiwgMSkgPSAoSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLAotCQkJCQk2LCAxKSAmICh+MHhjMCkpIHwgYmlhc2xldmVsIDw8IDY7Ci0JfQotI3VuZGVmIFhQQV9MVkxfRlJFUQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfYWRkYWMoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOwogCXU4IGJpYXNsZXZlbDsKIAotCWlmIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKKwlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKIAkJcmV0dXJuOwogCi0JaWYgKGFyNTQxNl9nZXRfZWVwX3JldihhaHApIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCiAJCXJldHVybjsKIAogCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwogCiAJaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7CiAJCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKLQkJSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA3LCAxKSA9Ci0JCSAgKElOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywgNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPQorCQkgIChJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOwogCX0KIH0KIAotc3RhdGljIHZvaWQgKCphdGg5a19zZXRfYWRkYWNbXSkgKHN0cnVjdCBhdGhfaGFsICosIHN0cnVjdCBhdGg5a19jaGFubmVsICopID0gewotCWF0aDlrX2h3X3NldF9kZWZfYWRkYWMsCi0JYXRoOWtfaHdfc2V0XzRrX2FkZGFjCi19OwotCi12b2lkIGF0aDlrX2h3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlhdGg5a19zZXRfYWRkYWNbYWhwLT5haF9lZXBfbWFwXShhaCwgY2hhbik7Ci19Ci0KLQotCi0vKiBYWFg6IENsZWFuIG1lIHVwLCBtYWtlIG1lIG1vcmUgbGVnaWJsZSAqLwotc3RhdGljIGJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9kZWZfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCWludCBpLCByZWdDaGFpbk9mZnNldDsKLQl1OCB0eFJ4QXR0ZW5Mb2NhbDsKLQl1MTYgYW50X2NvbmZpZzsKLQotCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKLQotCXR4UnhBdHRlbkxvY2FsID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMjMgOiA0NDsKLQotCWF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4sIDAsICZhbnRfY29uZmlnKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBhbnRfY29uZmlnKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7Ci0JCQlpZiAoaSA+PSAyKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWhwLT5haF9yeGNoYWlubWFzayA9PSA1IHx8IGFocC0+YWhfdHhjaGFpbm1hc2sgPT0gNSkKLQkJICAgICYmIChpICE9IDApKQotCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKLQkJZWxzZQotCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKLQotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsKLQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKLQkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAotCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKLQkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKLQkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKLQotCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKLQkJCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJgotCQkJICAgICBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07Ci0JCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCWJzd01hcmdpbltpXSk7Ci0JCQkJCVJFR19STVdfRklFTEQoYWgsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCXJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCWJzd0F0dGVuW2ldKTsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCXhhdHRlbjJNYXJnaW5baV0pOwotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQlyZWdDaGFpbk9mZnNldCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwKLQkJCQkJCXBNb2RhbC0+Ci0JCQkJCQl4YXR0ZW4yRGJbaV0pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVJFR19XUklURShhaCwKLQkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJICAoUkVHX1JFQUQoYWgsCi0JCQkJCQkJICAgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikKLQkJCQkJCSAgfCBTTShwTW9kYWwtPgotCQkJCQkJICBic3dNYXJnaW5baV0sCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikpOwotCQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJICByZWdDaGFpbk9mZnNldCwKLQkJCQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKLQkJCQkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikKLQkJCQkJCSAgfCBTTShwTW9kYWwtPmJzd0F0dGVuW2ldLAotCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJICAgICAgQVJfUEhZX1JYR0FJTiArCi0JCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLAotCQkJCQkgICAgICB0eFJ4QXR0ZW5Mb2NhbCk7Ci0JCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJICAgICAgQVJfUEhZX1JYR0FJTiArCi0JCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwKLQkJCQkJICAgICAgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0pOwotCQkJfSBlbHNlIHsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCSAgICBBUl9QSFlfUlhHQUlOICsKLQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkgICB+QVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSB8Ci0JCQkJCSAgU00odHhSeEF0dGVuTG9jYWwsCi0JCQkJCSAgICAgQVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSk7Ci0JCQkJUkVHX1dSSVRFKGFoLAotCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikgfAotCQkJCQkgIFNNKHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldLAotCQkJCQkgICAgIEFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0JfUywKLQkJCQkJCSAgcE1vZGFsLT5vYik7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGIpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0IsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQl9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKLQkJfSBlbHNlIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNV9TLAotCQkJCQkJICBwTW9kYWwtPmRiKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjUsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjVfUywKLQkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOwotCQl9Ci0JCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCi0JCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTCwKLQkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MsCi0JCQkJCSAgcE1vZGFsLT54cGFCaWFzTHZsKTsKLQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBUywKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBU19TLAotCQkJCQkgIHBNb2RhbC0+bG9jYWxfYmlhcyk7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIkZvcmNlWFBBb246ICVkXG4iLAotCQkJcE1vZGFsLT5mb3JjZV94cGFvbik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9YUEFfQ0ZHLCBBUl9QSFlfRk9SQ0VfWFBBX0NGRywKLQkJCSAgICAgIHBNb2RhbC0+Zm9yY2VfeHBhb24pOwotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKLQkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLAotCQkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfUEdBLAotCQkJICAgICAgcE1vZGFsLT5wZ2FEZXNpcmVkU2l6ZSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKLQkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pCi0JCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCi0JCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOwotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBMCwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCX0gZWxzZSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSX1BIWV9DQ0FfVEhSRVNINjIsCi0JCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EsCi0JCQkgICAgICBBUl9QSFlfRVhUX0NDQV9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCX0KLQotCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLAotCQkJICAgICAgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJULAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9QQV9PTiwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7Ci0JfQotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKLQkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF80a19ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfNGtfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAlpbnQgcmVnQ2hhaW5PZmZzZXQ7CiAJdTggdHhSeEF0dGVuTG9jYWw7Ci0JdTE2IGFudF9jb25maWcgPSAwOwogCXU4IG9iWzVdLCBkYjFbNV0sIGRiMls1XTsKIAl1OCBhbnRfZGl2X2NvbnRyb2wxLCBhbnRfZGl2X2NvbnRyb2wyOwogCXUzMiByZWdWYWw7CkBAIC0yMzcwLDggKzEyMTksOCBAQAogCiAJdHhSeEF0dGVuTG9jYWwgPSAyMzsKIAotCWF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4sIDAsICZhbnRfY29uZmlnKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBhbnRfY29uZmlnKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLAorCQkgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuKSk7CiAKIAlyZWdDaGFpbk9mZnNldCA9IDA7CiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKQEAgLTI1NDAsMjA3ICsxMzg5LDIzMyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCAoKmF0aDlrX2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzW10pKHN0cnVjdCBhdGhfaGFsICosCi0JCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqKSA9IHsKLQlhdGg5a19od19lZXByb21fc2V0X2RlZl9ib2FyZF92YWx1ZXMsCi0JYXRoOWtfaHdfZWVwcm9tX3NldF80a19ib2FyZF92YWx1ZXMKLX07Ci0KLWJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzW2FocC0+YWhfZWVwX21hcF0oYWgsIGNoYW4pOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF9kZWZfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgIHU4IGluZGV4LCB1MTYgKmNvbmZpZykKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFocC0+YWhfZWVwcm9tLmRlZjsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAoaW5kZXgpIHsKLQljYXNlIDA6Ci0JCSpjb25maWcgPSBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Ci0JCXJldHVybiAwOwotCWNhc2UgMToKLQkJaWYgKHBCYXNlLT52ZXJzaW9uID49IDB4MEUwRCkgewotCQkJaWYgKHBNb2RhbC0+dXNlQW50MSkgewotCQkJCSpjb25maWcgPQotCQkJCSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGMDAwMCkgPj4gMTYpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF80a19lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CiAJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwogCi0Jc3dpdGNoIChpbmRleCkgewotCWNhc2UgMDoKLQkJKmNvbmZpZyA9IHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKIH0KIAotc3RhdGljIGludCAoKmF0aDlrX2dldF9lZXByb21fYW50ZW5uYV9jZmdbXSkoc3RydWN0IGF0aF9oYWwgKiwKLQkJCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqLAotCQkJCQkgICAgIHU4LCB1MTYgKikgPSB7Ci0JYXRoOWtfaHdfZ2V0X2RlZl9lZXByb21fYW50ZW5uYV9jZmcsCi0JYXRoOWtfaHdfZ2V0XzRrX2VlcHJvbV9hbnRlbm5hX2NmZwotfTsKLQotaW50IGF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZ1thaHAtPmFoX2VlcF9tYXBdKGFoLCBjaGFuLAotCQkJCQkJCSAgICAgaW5kZXgsIGNvbmZpZyk7Ci19Ci0KLXN0YXRpYyB1OCBhdGg5a19od19nZXRfNGtfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHU4IGF0aDlrX2h3XzRrX2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKQogewogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdTggYXRoOWtfaHdfZ2V0X2RlZl9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYoZWVwLT5tb2RhbEhlYWRlcltBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPT0gZnJlcV9iYW5kXSk7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCXU4IG51bV9hbnRfY29uZmlnOwotCi0JbnVtX2FudF9jb25maWcgPSAxOwotCi0JaWYgKHBCYXNlLT52ZXJzaW9uID49IDB4MEUwRCkKLQkJaWYgKHBNb2RhbC0+dXNlQW50MSkKLQkJCW51bV9hbnRfY29uZmlnICs9IDE7Ci0KLQlyZXR1cm4gbnVtX2FudF9jb25maWc7Ci19Ci0KLXN0YXRpYyB1OCAoKmF0aDlrX2dldF9udW1fYW50X2NvbmZpZ1tdKShzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kKSA9IHsKLQlhdGg5a19od19nZXRfZGVmX251bV9hbnRfY29uZmlnLAotCWF0aDlrX2h3X2dldF80a19udW1fYW50X2NvbmZpZwotfTsKLQotdTggYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2dldF9udW1fYW50X2NvbmZpZ1thaHAtPmFoX2VlcF9tYXBdKGFoLCBmcmVxX2JhbmQpOwotfQotCi11MTYgYXRoOWtfaHdfZWVwcm9tX2dldF9zcHVyX2NoYW4oc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCitzdGF0aWMgdTE2IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKIHsKICNkZWZpbmUgRUVQX01BUDRLX1NQVVJDSEFOIFwKLQkoYWhwLT5haF9lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQotI2RlZmluZSBFRVBfREVGX1NQVVJDSEFOIFwKLQkoYWhwLT5haF9lZXByb20uZGVmLm1vZGFsSGVhZGVyW2lzMkdIel0uc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJKGFoLT5lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCiAJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCi0JCWksIGlzMkdIeiwgYWgtPmFoX2NvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CiAKLQlzd2l0Y2ggKGFoLT5haF9jb25maWcuc3B1cm1vZGUpIHsKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKIAljYXNlIFNQVVJfRElTQUJMRToKIAkJYnJlYWs7CiAJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKLQkJc3B1cl92YWwgPSBhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006Ci0JCWlmIChhaHAtPmFoX2VlcF9tYXAgPT0gRUVQX01BUF80S0JJVFMpCi0JCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKLQkJZWxzZQotCQkJc3B1cl92YWwgPSBFRVBfREVGX1NQVVJDSEFOOworCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKIAkJYnJlYWs7Ci0KIAl9CiAKIAlyZXR1cm4gc3B1cl92YWw7Ci0jdW5kZWYgRUVQX0RFRl9TUFVSQ0hBTgorCiAjdW5kZWYgRUVQX01BUDRLX1NQVVJDSEFOCiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfZ2V0X2VlcHJvbV80ayhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKK3N0YXRpYyBzdHJ1Y3QgZWVwcm9tX29wcyBlZXBfNGtfb3BzID0geworCS5jaGVja19lZXByb20JCT0gYXRoOWtfaHdfNGtfY2hlY2tfZWVwcm9tLAorCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb20sCisJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2ZpbGxfZWVwcm9tLAorCS5nZXRfZWVwcm9tX3ZlcgkJPSBhdGg5a19od180a19nZXRfZWVwcm9tX3ZlciwKKwkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9yZXYsCisJLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3XzRrX2dldF9udW1fYW50X2NvbmZpZywKKwkuZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZwk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCisJLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od180a19zZXRfYm9hcmRfdmFsdWVzLAorCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfNGtfc2V0X2FkZGFjLAorCS5zZXRfdHhwb3dlcgkJPSBhdGg5a19od180a19zZXRfdHhwb3dlciwKKwkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwKK307CiAKLQlzd2l0Y2ggKHBhcmFtKSB7Ci0JY2FzZSBFRVBfTkZUSFJFU0hfMjoKLQkJcmV0dXJuIHBNb2RhbFsxXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDApOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOwotCWNhc2UgQVJfRUVQUk9NX01BQygxKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMik6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07Ci0JY2FzZSBFRVBfUkVHXzA6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOwotCWNhc2UgRUVQX1JFR18xOgotCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKLQljYXNlIEVFUF9PUF9DQVA6Ci0JCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOwotCWNhc2UgRUVQX09QX01PREU6Ci0JCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKLQljYXNlIEVFUF9SRl9TSUxFTlQ6Ci0JCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbC0+b2JfMDE7Ci0JY2FzZSBFRVBfREJfMjoKLQkJcmV0dXJuIHBNb2RhbC0+ZGIxXzAxOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIG5vbi00SyAoRGVmYXVsdCkgY2FyZHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2dldF9lZXByb21fZGVmKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKyNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQorCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXUxNiAqZWVwX2RhdGE7CisJaW50IGFkZHIsIGFyNTQxNl9lZXBfc3RhcnRfbG9jID0gMHgxMDA7CisKKwllZXBfZGF0YSA9ICh1MTYgKillZXA7CisKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fREVGOyBhZGRyKyspIHsKKwkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgYXI1NDE2X2VlcF9zdGFydF9sb2MsCisJCQkJCSBlZXBfZGF0YSkpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWVwX2RhdGErKzsKKwl9CisJcmV0dXJuIHRydWU7CisjdW5kZWYgU0laRV9FRVBST01fREVGCit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9CisJCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKikgJmFoLT5lZXByb20uZGVmOworCXUxNiAqZWVwZGF0YSwgdGVtcCwgbWFnaWMsIG1hZ2ljMjsKKwl1MzIgc3VtID0gMCwgZWw7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlpbnQgaSwgYWRkciwgc2l6ZTsKKworCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsCisJCQkJICZtYWdpYykpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCSJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisKKwkJaWYgKG1hZ2ljICE9IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCW1hZ2ljMiA9IHN3YWIxNihtYWdpYyk7CisKKwkJCWlmIChtYWdpYzIgPT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgeworCQkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKTsKKwkJCQluZWVkX3N3YXAgPSB0cnVlOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc2l6ZSAvIHNpemVvZih1MTYpOyBhZGRyKyspIHsKKwkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7CisJCQkJCSplZXBkYXRhID0gdGVtcDsKKwkJCQkJZWVwZGF0YSsrOworCisJCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkJCSIweCUwNFggICIsICplZXBkYXRhKTsKKworCQkJCQlpZiAoKChhZGRyICsgMSkgJSA2KSA9PSAwKQorCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCisJCQkJCQkJQVRIX0RCR19FRVBST00sICJcbiIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKKwkJCQkJImVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CisKKwlpZiAobmVlZF9zd2FwKQorCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIubGVuZ3RoOworCisJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCisJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikgLyBzaXplb2YodTE2KTsKKwllbHNlCisJCWVsID0gZWwgLyBzaXplb2YodTE2KTsKKworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJdTMyIGludGVnZXIsIGo7CisJCXUxNiB3b3JkOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcgXG4iKTsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOworCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7CisJCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOworCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7CisJCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKKwkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKKwkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7CisJCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7CisJCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOworCQkJfQorCQl9CisJfQorCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAorCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKKwkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOworI2RlZmluZSBBUjU0MTZfVkVSX01BU0sgKHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKIAlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0gZWVwLT5tb2RhbEhlYWRlcjsKIAlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7CiAKQEAgLTI3NzQsNyArMTY0OSw3IEBACiAJY2FzZSBFRVBfREJfMjoKIAkJcmV0dXJuIHBNb2RhbFsxXS5kYjsKIAljYXNlIEVFUF9NSU5PUl9SRVY6Ci0JCXJldHVybiBwQmFzZS0+dmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0s7CisJCXJldHVybiBBUjU0MTZfVkVSX01BU0s7CiAJY2FzZSBFRVBfVFhfTUFTSzoKIAkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CiAJY2FzZSBFRVBfUlhfTUFTSzoKQEAgLTI3ODMsNDIgKzE2NTgsMTIxMiBAQAogCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7CiAJY2FzZSBFRVBfVFhHQUlOX1RZUEU6CiAJCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKLQorCWNhc2UgRUVQX09MX1BXUkNUUkw6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPm9wZW5Mb29wUHdyQ250bCA/IHRydWUgOiBmYWxzZTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCWNhc2UgRUVQX1JDX0NIQUlOX01BU0s6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPnJjQ2hhaW5NYXNrOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9EQUNfSFBXUl81RzoKKwkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkKKwkJCXJldHVybiBwQmFzZS0+ZGFjSGlQd3JNb2RlXzVHOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9GUkFDX05fNUc6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIpCisJCQlyZXR1cm4gcEJhc2UtPmZyYWNfbl81ZzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQorI3VuZGVmIEFSNTQxNl9WRVJfTUFTSwogfQogCi1zdGF0aWMgdTMyICgqYXRoOWtfZ2V0X2VlcHJvbVtdKShzdHJ1Y3QgYXRoX2hhbCAqLCBlbnVtIGVlcHJvbV9wYXJhbSkgPSB7Ci0JYXRoOWtfaHdfZ2V0X2VlcHJvbV9kZWYsCi0JYXRoOWtfaHdfZ2V0X2VlcHJvbV80aworLyogWFhYOiBDbGVhbiBtZSB1cCwgbWFrZSBtZSBtb3JlIGxlZ2libGUgKi8KK3N0YXRpYyBib29sIGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworI2RlZmluZSBBUjU0MTZfVkVSX01BU0sgKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCWludCBpLCByZWdDaGFpbk9mZnNldDsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCXR4UnhBdHRlbkxvY2FsID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMjMgOiA0NDsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CisJCQlpZiAoaSA+PSAyKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgJiYKKwkJICAgIChhaC0+cnhjaGFpbm1hc2sgPT0gNSB8fCBhaC0+dHhjaGFpbm1hc2sgPT0gNSkKKwkJICAgICYmIChpICE9IDApKQorCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJZWxzZQorCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLAorCQkJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsKKwkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgeworCQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7CisJCQkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoW2ldOworCQkJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCXJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwKKwkJCQkJCXBNb2RhbC0+CisJCQkJCQlic3dNYXJnaW5baV0pOworCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAorCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCisJCQkJCQlyZWdDaGFpbk9mZnNldCwKKwkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwKKwkJCQkJCXBNb2RhbC0+CisJCQkJCQlic3dBdHRlbltpXSk7CisJCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCXJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX01BUkdJTiwKKwkJCQkJCXBNb2RhbC0+CisJCQkJCQl4YXR0ZW4yTWFyZ2luW2ldKTsKKwkJCQkJUkVHX1JNV19GSUVMRChhaCwKKwkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKworCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCisJCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsCisJCQkJCQlwTW9kYWwtPgorCQkJCQkJeGF0dGVuMkRiW2ldKTsKKwkJCQl9IGVsc2UgeworCQkJCQlSRUdfV1JJVEUoYWgsCisJCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKworCQkJCQkJICByZWdDaGFpbk9mZnNldCwKKwkJCQkJCSAgKFJFR19SRUFEKGFoLAorCQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCQkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pCisJCQkJCQkgIHwgU00ocE1vZGFsLT4KKwkJCQkJCSAgYnN3TWFyZ2luW2ldLAorCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pKTsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCQkgIChSRUdfUkVBRChhaCwKKwkJCQkJCQkgICAgQVJfUEhZX0dBSU5fMkdIWiArCisJCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCisJCQkJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pCisJCQkJCQkgIHwgU00ocE1vZGFsLT5ic3dBdHRlbltpXSwKKwkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCSAgICAgIEFSX1BIWV9SWEdBSU4gKworCQkJCQkgICAgICByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwKKwkJCQkJICAgICAgdHhSeEF0dGVuTG9jYWwpOworCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCSAgICAgIEFSX1BIWV9SWEdBSU4gKworCQkJCQkgICAgICByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sCisJCQkJCSAgICAgIHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAoUkVHX1JFQUQoYWgsCisJCQkJCQkgICAgQVJfUEhZX1JYR0FJTiArCisJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCQkJICAgfkFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikgfAorCQkJCQkgIFNNKHR4UnhBdHRlbkxvY2FsLAorCQkJCQkgICAgIEFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikpOworCQkJCVJFR19XUklURShhaCwKKwkJCQkJICBBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJICByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAoUkVHX1JFQUQoYWgsCisJCQkJCQkgICAgQVJfUEhZX0dBSU5fMkdIWiArCisJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pIHwKKwkJCQkJICBTTShwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSwKKwkJCQkJICAgICBBUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQiwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CX1MsCisJCQkJCQkgIHBNb2RhbC0+b2IpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0JfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7CisJCX0gZWxzZSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5kYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1X1MsCisJCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKKwkJfQorCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAorCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkwsCisJCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTF9TLAorCQkJCQkgIHBNb2RhbC0+eHBhQmlhc0x2bCk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVMsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVNfUywKKwkJCQkJICBwTW9kYWwtPmxvY2FsX2JpYXMpOworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sICJGb3JjZVhQQW9uOiAlZFxuIiwKKwkJCXBNb2RhbC0+Zm9yY2VfeHBhb24pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfWFBBX0NGRywgQVJfUEhZX0ZPUkNFX1hQQV9DRkcsCisJCQkgICAgICBwTW9kYWwtPmZvcmNlX3hwYW9uKTsKKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCSAgICAgIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLCBBUl9QSFlfREVTSVJFRF9TWl9BREMsCisJCSAgICAgIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOworCisJaWYgKCFBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKKwkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1BHQSwKKwkJCSAgICAgIHBNb2RhbC0+cGdhRGVzaXJlZFNpemUpOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMNCwKKwkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFBX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKQorCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAorCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsCisJCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9IGVsc2UgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUl9QSFlfQ0NBX1RIUkVTSDYyLAorCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBLAorCQkJICAgICAgQVJfUEhZX0VYVF9DQ0FfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCisJCQkgICAgICBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NLX1RYX0NUUkwsCisJCQkJQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0ssCisJCQkJcE1vZGFsLT5taXNjQml0cyk7CisKKworCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCisJCQkJCWVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOworCQllbHNlIGlmIChlZXAtPmJhc2VFZXBIZWFkZXIuZGFjSGlQd3JNb2RlXzVHKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsIDApOworCQllbHNlCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwKKwkJCQkJZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0xwTW9kZSk7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZSQU1FX0NUTCwgQVJfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLAorCQkJCXBNb2RhbC0+bWlzY0JpdHMgPj4gMik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw5LAorCQkJCUFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSywKKwkJCQllZXAtPmJhc2VFZXBIZWFkZXIuZGVzaXJlZFNjYWxlQ0NLKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyN1bmRlZiBBUjU0MTZfVkVSX01BU0sKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKyNkZWZpbmUgWFBBX0xWTF9GUkVRKGNudCkgKHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbY250XSkKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXU4IGJpYXNsZXZlbDsKKworCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQorCQlyZXR1cm47CisKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCisJCXJldHVybjsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJfSBlbHNlIHsKKwkJdTE2IHJlc2V0RnJlcUJpbiwgZnJlcUJpbiwgZnJlcUNvdW50ID0gMDsKKwkJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCisJCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCQlyZXNldEZyZXFCaW4gPSBGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKDApICYgMHhmZjsKKwkJYmlhc2xldmVsID0gKHU4KSAoWFBBX0xWTF9GUkVRKDApID4+IDE0KTsKKworCQlmcmVxQ291bnQrKzsKKworCQl3aGlsZSAoZnJlcUNvdW50IDwgMykgeworCQkJaWYgKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID09IDB4MCkKKwkJCQlicmVhazsKKworCQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUShmcmVxQ291bnQpICYgMHhmZjsKKwkJCWlmIChyZXNldEZyZXFCaW4gPj0gZnJlcUJpbikKKwkJCQliaWFzbGV2ZWwgPSAodTgpKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID4+IDE0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJCWZyZXFDb3VudCsrOworCQl9CisJfQorCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKKwl9IGVsc2UgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNiwgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTYsIDEpICYgKH4weGMwKSkgfCBiaWFzbGV2ZWwgPDwgNjsKKwl9CisjdW5kZWYgWFBBX0xWTF9GUkVRCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhU2V0LAorCQkJCXU4ICpiQ2hhbnMsIHUxNiBhdmFpbFBpZXJzLAorCQkJCXUxNiB0UGRHYWluT3ZlcmxhcCwgaW50MTZfdCAqcE1pbkNhbFBvd2VyLAorCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCisJCQkJdTE2IG51bVhwZEdhaW5zKQoreworCWludCBpLCBqLCBrOworCWludDE2X3Qgc3M7CisJdTE2IGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7CisJc3RhdGljIHU4IHZwZFRhYmxlTFtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlUltBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlSVtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisKKwl1OCAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7CisJdTggbWluUHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJdTggbWF4UHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJaW50MTZfdCB2cGRTdGVwOworCWludDE2X3QgdG1wVmFsOworCXUxNiBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7CisJYm9vbCBtYXRjaDsKKwlpbnQxNl90IG1pbkRlbHRhID0gMDsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7CisJCWlmIChiQ2hhbnNbbnVtUGllcnNdID09IEFSNTQxNl9CQ0hBTl9VTlVTRUQpCisJCQlicmVhazsKKwl9CisKKwltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAorCQkJCQkJCSAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSwKKwkJCQkJICAgICAgIGJDaGFucywgbnVtUGllcnMsICZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI1NDE2X1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCQl2cGRUYWJsZUxbaV0pOworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAorCQkJCQkJdnBkVGFibGVSW2ldKTsKKworCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKKwkJCQl2cGRUYWJsZUlbaV1bal0gPQorCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCisJCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCisJCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgorCQkJCQkJICAgICAgIChjaGFuKSksCisJCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCisJCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKworCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCisJCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQorCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7CisJCX0gZWxzZSB7CisJCQltaW5EZWx0YSA9IDA7CisJCX0KKworCQlpZiAoaSA9PSAwKSB7CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQkJZWxzZQorCQkJCXNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQorCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisJCX0KKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKKwkJCXNzKys7CisJCX0KKworCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCisJCQkJKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKKworCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQlwUERBRENWYWx1ZXNbaysrXSA9IHZwZFRhYmxlSVtpXVtzcysrXTsKKwkJfQorCisJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSAtCisJCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJaWYgKHRndEluZGV4ID4gbWF4SW5kZXgpIHsKKwkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCisJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKKwkJCQl0bXBWYWwgPSAoaW50MTZfdCkoKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gKworCQkJCQkJICAgIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisJCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KKwkJCQkJCQkgMjU1IDogdG1wVmFsKTsKKwkJCQlzcysrOworCQkJfQorCQl9CisJfQorCisJd2hpbGUgKGkgPCBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSykgeworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IHBQZEdhaW5Cb3VuZGFyaWVzW2kgLSAxXTsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKKwkJaysrOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCit7CisjZGVmaW5lIFNNX1BEX0dBSU4oeCkgU00oMHgzOCwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeCkKKyNkZWZpbmUgU01fUERHQUlOX0IoeCwgeSkgXAorCQlTTSgoZ2FpbkJvdW5kYXJpZXNbeF0pLCBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfIyN5KQorCisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhc2V0OworCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKKwl1MTYgcGRHYWluT3ZlcmxhcF90MjsKKwlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOworCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107CisJdTE2IG51bVBpZXJzLCBpLCBqOworCWludDE2X3QgdE1pbkNhbFBvd2VyOworCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOworCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9OVU1fUERfR0FJTlNdID0geyAwLCAwLCAwLCAwIH07CisJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0OworCWludDE2X3QgbW9kYWxJZHg7CisKKwltb2RhbElkeCA9IElTX0NIQU5fMkdIWihjaGFuKSA/IDEgOiAwOworCXhwZE1hc2sgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXJbbW9kYWxJZHhdLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyW21vZGFsSWR4XS5wZEdhaW5PdmVybGFwOworCX0gZWxzZSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCisJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOworCX0KKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOworCX0gZWxzZSB7CisJCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXI1RzsKKwkJbnVtUGllcnMgPSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUzsKKwl9CisKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgJiYgSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCWFoLT5pbml0UERBREMgPSAoKHN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqKQorCQkJCSBwUmF3RGF0YXNldCktPnZwZFBkZ1swXVswXTsKKwl9CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAorCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07CisJCQllbHNlCisJCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGE1R1tpXTsKKworCisJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQl1OCBwY2RhY0lkeDsKKwkJCQl1OCB0eFBvd2VyOworCisJCQkJYXRoOWtfZ2V0X3R4Z2Fpbl9pbmRleChhaCwgY2hhbiwKKwkJCQkoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopcFJhd0RhdGFzZXQsCisJCQkJcENhbEJDaGFucywgbnVtUGllcnMsICZ0eFBvd2VyLCAmcGNkYWNJZHgpOworCQkJCWF0aDlrX29sY19nZXRfcGRhZGNzKGFoLCBwY2RhY0lkeCwKKwkJCQkJCSAgICAgdHhQb3dlci8yLCBwZGFkY1ZhbHVlcyk7CisJCQl9IGVsc2UgeworCQkJCWF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwKKwkJCQkJCQljaGFuLCBwUmF3RGF0YXNldCwKKwkJCQkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywKKwkJCQkJCQlwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJCSZ0TWluQ2FsUG93ZXIsCisJCQkJCQkJZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkJcGRhZGNWYWx1ZXMsCisJCQkJCQkJbnVtWHBkR2Fpbik7CisJCQl9CisKKwkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CisJCQkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQkJCVJFR19XUklURShhaCwKKwkJCQkJCUFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJCVNNKDB4NiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSB8CisJCQkJCQlTTV9QRF9HQUlOKDEpIHwgU01fUERfR0FJTigyKSB8CisJCQkJCQlTTV9QRF9HQUlOKDMpIHwgU01fUERfR0FJTig0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKXwKKwkJCQkJCVNNX1BER0FJTl9CKDAsIDEpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDEsIDIpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDIsIDMpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDMsIDQpKTsKKwkJCQl9CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8IFBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworCisJcmV0dXJuIHRydWU7CisjdW5kZWYgU01fUERfR0FJTgorI3VuZGVmIFNNX1BER0FJTl9CCit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCQkJICBpbnQxNl90ICpyYXRlc0FycmF5LAorCQkJCQkJICB1MTYgY2ZnQ3RsLAorCQkJCQkJICB1MTYgQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJCSAgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkJICB1MTYgcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4gICAgIDYgIC8qIDEwKmxvZzEwKDIpKjIgKi8KKyNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTiAgIDEwIC8qIDEwKmxvZzEwKDMpKjIgKi8KKworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7CisJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KKwkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKKworCWludCBpOworCWludDE2X3QgdHdpY2VMYXJnZXN0QW50ZW5uYTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhICpyZXA7CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbSwgdGFyZ2V0UG93ZXJDY2sgPSB7CisJCTAsIHsgMCwgMCwgMCwgMH0KKwl9OworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG1FeHQgPSB7CisJCTAsIHsgMCwgMCwgMCwgMH0gfSwgdGFyZ2V0UG93ZXJDY2tFeHQgPSB7CisJCTAsIHsgMCwgMCwgMCwgMCB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCB0YXJnZXRQb3dlckh0MjAsIHRhcmdldFBvd2VySHQ0MCA9IHsKKwkJMCwgezAsIDAsIDAsIDB9CisJfTsKKwl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOworCXUxNiBjdGxNb2Rlc0ZvcjExYVtdID0KKwkJeyBDVExfMTFBLCBDVExfNUdIVDIwLCBDVExfMTFBX0VYVCwgQ1RMXzVHSFQ0MCB9OworCXUxNiBjdGxNb2Rlc0ZvcjExZ1tdID0KKwkJeyBDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLCBDVExfMTFCX0VYVCwgQ1RMXzExR19FWFQsCisJCSAgQ1RMXzJHSFQ0MAorCQl9OworCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlpbnQgdHhfY2hhaW5tYXNrOworCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKKworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBtYXgoCisJCXBFZXBEYXRhLT5tb2RhbEhlYWRlcgorCQkJW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFswXSwKKwkJcEVlcERhdGEtPm1vZGFsSGVhZGVyCisJCQlbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzFdKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBtYXgoKHU4KXR3aWNlTGFyZ2VzdEFudGVubmEsCisJCQkJICBwRWVwRGF0YS0+bW9kYWxIZWFkZXIKKwkJCQkgIFtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMl0pOworCisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbihBbnRlbm5hUmVkdWN0aW9uIC0KKwkJCQkJICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisKKwlpZiAoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7CisJCW1heFJlZ0FsbG93ZWRQb3dlciAtPQorCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUpXSAqIDIpOworCX0KKworCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7CisKKwlzd2l0Y2ggKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKHR4X2NoYWlubWFzaykpIHsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU47CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTjsKKwkJYnJlYWs7CisJfQorCisJc2NhbGVkUG93ZXIgPSBtYXgoKHUxNikwLCBzY2FsZWRQb3dlcik7CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZykgLQorCQkJU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDA7CisJCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7CisKKwkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlckNjaywgNCwgZmFsc2UpOworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKKwkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjAsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7CisKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKTsKKwkJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQ0MCwKKwkJCQlBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7CisJCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyQ2NrRXh0LCA0LCB0cnVlKTsKKwkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyT2ZkbUV4dCwgNCwgdHJ1ZSk7CisJCX0KKwl9IGVsc2UgeworCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWEpIC0KKwkJCVNVQl9OVU1fQ1RMX01PREVTX0FUXzVHXzQwOworCQlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFhOworCisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHLAorCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOworCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHSFQyMCwKKwkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKKworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWEpOworCQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUdIVDQwLAorCQkJCUFSNTQxNl9OVU1fNUdfNDBfVEFSR0VUX1BPV0VSUywKKwkJCQkmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKKwkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1RywKKwkJCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyT2ZkbUV4dCwgNCwgdHJ1ZSk7CisJCX0KKwl9CisKKwlmb3IgKGN0bE1vZGUgPSAwOyBjdGxNb2RlIDwgbnVtQ3RsTW9kZXM7IGN0bE1vZGUrKykgeworCQlib29sIGlzSHQ0MEN0bE1vZGUgPSAocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzVHSFQ0MCkgfHwKKwkJCShwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfMkdIVDQwKTsKKwkJaWYgKGlzSHQ0MEN0bE1vZGUpCisJCQlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CisJCWVsc2UgaWYgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKQorCQkJZnJlcSA9IGNlbnRlcnMuZXh0X2NlbnRlcjsKKwkJZWxzZQorCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKKworCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQorCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCSJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCisJCQkiRVhUX0FERElUSVZFICVkXG4iLAorCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCisJCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKKworCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9OVU1fQ1RMUykgJiYgcEVlcERhdGEtPmN0bEluZGV4W2ldOyBpKyspIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkJIiAgTE9PUC1DdGxpZHggJWQ6IGNmZ0N0bCAweCUyLjJ4ICIKKwkJCQkicEN0bE1vZGUgMHglMi4yeCBjdGxJbmRleCAweCUyLjJ4ICIKKwkJCQkiY2hhbiAlZFxuIiwKKwkJCQlpLCBjZmdDdGwsIHBDdGxNb2RlW2N0bE1vZGVdLAorCQkJCXBFZXBEYXRhLT5jdGxJbmRleFtpXSwgY2hhbi0+Y2hhbm5lbCk7CisKKwkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkgfHwKKwkJCSAgICAoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYgQ1RMX01PREVfTSkgfCBTRF9OT19DVEwpKSkgeworCQkJCXJlcCA9ICYocEVlcERhdGEtPmN0bERhdGFbaV0pOworCisJCQkJdHdpY2VNaW5FZGdlUG93ZXIgPSBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoZnJlcSwKKwkJCQlyZXAtPmN0bEVkZ2VzW2FyNTQxNl9nZXRfbnR4Y2hhaW5zKHR4X2NoYWlubWFzaykgLSAxXSwKKwkJCQlJU19DSEFOXzJHSFooY2hhbiksIEFSNTQxNl9OVU1fQkFORF9FREdFUyk7CisKKwkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAorCQkJCQkiICAgIE1BVENILUVFX0lEWCAlZDogY2ggJWQgaXMyICVkICIKKwkJCQkJIjJ4TWluRWRnZSAlZCBjaGFpbm1hc2sgJWQgY2hhaW5zICVkXG4iLAorCQkJCQlpLCBmcmVxLCBJU19DSEFOXzJHSFooY2hhbiksCisJCQkJCXR3aWNlTWluRWRnZVBvd2VyLCB0eF9jaGFpbm1hc2ssCisJCQkJCWFyNTQxNl9nZXRfbnR4Y2hhaW5zCisJCQkJCSh0eF9jaGFpbm1hc2spKTsKKwkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpIHsKKwkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBtaW4odHdpY2VNYXhFZGdlUG93ZXIsCisJCQkJCQkJCXR3aWNlTWluRWRnZVBvd2VyKTsKKwkJCQl9IGVsc2UgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQltaW5DdGxQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkiICAgIFNFTC1NaW4gY3RsTW9kZSAlZCBwQ3RsTW9kZSAlZCAiCisJCQkiMnhNYXhFZGdlICVkIHNQICVkIG1pbkN0bFB3ciAlZFxuIiwKKwkJCWN0bE1vZGUsIHBDdGxNb2RlW2N0bE1vZGVdLCB0d2ljZU1heEVkZ2VQb3dlciwKKwkJCXNjYWxlZFBvd2VyLCBtaW5DdGxQb3dlcik7CisKKwkJc3dpdGNoIChwQ3RsTW9kZVtjdGxNb2RlXSkgeworCQljYXNlIENUTF8xMUI6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckNjay50UG93MngpOyBpKyspIHsKKwkJCQl0YXJnZXRQb3dlckNjay50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckNjay50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFBOgorCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDIwOgorCQljYXNlIENUTF8yR0hUMjA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFCX0VYVDoKKwkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUFfRVhUOgorCQljYXNlIENUTF8xMUdfRVhUOgorCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDQwOgorCQljYXNlIENUTF8yR0hUNDA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmF0ZXNBcnJheVtyYXRlNm1iXSA9IHJhdGVzQXJyYXlbcmF0ZTltYl0gPSByYXRlc0FycmF5W3JhdGUxMm1iXSA9CisJCXJhdGVzQXJyYXlbcmF0ZTE4bWJdID0gcmF0ZXNBcnJheVtyYXRlMjRtYl0gPQorCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCXJhdGVzQXJyYXlbcmF0ZTM2bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsxXTsKKwlyYXRlc0FycmF5W3JhdGU0OG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMl07CisJcmF0ZXNBcnJheVtyYXRlNTRtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzNdOworCXJhdGVzQXJyYXlbcmF0ZVhyXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKQorCQlyYXRlc0FycmF5W3JhdGVIdDIwXzAgKyBpXSA9IHRhcmdldFBvd2VySHQyMC50UG93MnhbaV07CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlMnNdID0gcmF0ZXNBcnJheVtyYXRlMmxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKKwkJcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9CisJCQl0YXJnZXRQb3dlckNjay50UG93MnhbMl07CisJCTsKKwkJcmF0ZXNBcnJheVtyYXRlMTFzXSA9IHJhdGVzQXJyYXlbcmF0ZTExbF0gPQorCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOworCQk7CisJfQorCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgeworCQkJcmF0ZXNBcnJheVtyYXRlSHQ0MF8wICsgaV0gPQorCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07CisJCX0KKwkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0KKwkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07CisJCX0KKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgUlRfQVJfREVMVEEoeCkgKHJhdGVzQXJyYXlbeF0gLSBjY2tfb2ZkbV9kZWx0YSkKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKHBFZXBEYXRhLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7CisJaW50IGksIGNja19vZmRtX2RlbHRhID0gMDsKKworCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOworCisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJfQorCisJaWYgKCFhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAorCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKKwkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkgICAgICAgcG93ZXJMaW1pdCkpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0ICIKKwkJCSJ0eCBwb3dlciBwZXIgcmF0ZSB0YWJsZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICghYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSAiYXRoOWtfaHdfc2V0X3R4cG93ZXI6IHVuYWJsZSB0byBzZXQgcG93ZXIgdGFibGVcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7CisJCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7CisJCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQorCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKKwkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOworCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJY2NrX29mZG1fZGVsdGEgPSAyOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUycyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUybCksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMWwpLCAwKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKKwkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExcyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMWwpLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81cyksIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNWwpLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOworCQl9CisJfQorCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTcsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzNdICsKKwkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzJdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfN10gKworCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzVdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7CisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlRXh0Q2NrKSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUR1cENjayksIDApKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOworCQl9CisJfQorCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfU1VCLAorCQkgIEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yM0NoYWluLCA2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IyQ2hhaW4sIDApKTsKKworCWkgPSByYXRlNm1iOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJaSA9IHJhdGVIdDQwXzA7CisJZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQorCQlpID0gcmF0ZUh0MjBfMDsKKworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPQorCQkJcmF0ZXNBcnJheVtpXSArIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKKwllbHNlCisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CisKKwlzd2l0Y2goYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSkgeworCWNhc2UgMToKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiSW52YWxpZCBjaGFpbm1hc2sgY29uZmlndXJhdGlvblxuIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggYXRoOWtfaHdfZGVmX2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJJihlZXAtPm1vZGFsSGVhZGVyW0FUSDlLX0hBTF9GUkVRX0JBTkRfMkdIWiA9PSBmcmVxX2JhbmRdKTsKKwlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7CisJdTggbnVtX2FudF9jb25maWc7CisKKwludW1fYW50X2NvbmZpZyA9IDE7CisKKwlpZiAocEJhc2UtPnZlcnNpb24gPj0gMHgwRTBEKQorCQlpZiAocE1vZGFsLT51c2VBbnQxKQorCQkJbnVtX2FudF9jb25maWcgKz0gMTsKKworCXJldHVybiBudW1fYW50X2NvbmZpZzsKK30KKworc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7CisKKwlyZXR1cm4gcE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGOworfQorCitzdGF0aWMgdTE2IGF0aDlrX2h3X2RlZl9nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCit7CisjZGVmaW5lIEVFUF9ERUZfU1BVUkNIQU4gXAorCShhaC0+ZWVwcm9tLmRlZi5tb2RhbEhlYWRlcltpczJHSHpdLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbikKKworCXUxNiBzcHVyX3ZhbCA9IEFSX05PX1NQVVI7CisKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCSJHZXR0aW5nIHNwdXIgaWR4ICVkIGlzMkdoei4gJWQgdmFsICV4XG4iLAorCQlpLCBpczJHSHosIGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel0pOworCisJc3dpdGNoIChhaC0+Y29uZmlnLnNwdXJtb2RlKSB7CisJY2FzZSBTUFVSX0RJU0FCTEU6CisJCWJyZWFrOworCWNhc2UgU1BVUl9FTkFCTEVfSU9DVEw6CisJCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOworCQlicmVhazsKKwljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKKwkJc3B1cl92YWwgPSBFRVBfREVGX1NQVVJDSEFOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3B1cl92YWw7CisKKyN1bmRlZiBFRVBfREVGX1NQVVJDSEFOCit9CisKK3N0YXRpYyBzdHJ1Y3QgZWVwcm9tX29wcyBlZXBfZGVmX29wcyA9IHsKKwkuY2hlY2tfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb20sCisJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbSwKKwkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9yZXYsCisJLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcsCisJLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzLAorCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfZGVmX3NldF9hZGRhYywKKwkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwKIH07CiAKLXUzMiBhdGg5a19od19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCWVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZ2V0X2VlcHJvbVthaHAtPmFoX2VlcF9tYXBdKGFoLCBwYXJhbSk7Ci19Ci0KLWludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBzdGF0dXM7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlhdGg5a19od19mbGFzaF9tYXAoYWgpOworCWlmIChBUl9TUkVWXzkyODUoYWgpKSB7CisJCWFoLT5lZXBfbWFwID0gRUVQX01BUF80S0JJVFM7CisJCWFoLT5lZXBfb3BzID0gJmVlcF80a19vcHM7CisJfSBlbHNlIHsKKwkJYWgtPmVlcF9tYXAgPSBFRVBfTUFQX0RFRkFVTFQ7CisJCWFoLT5lZXBfb3BzID0gJmVlcF9kZWZfb3BzOworCX0KIAotCWlmIChBUl9TUkVWXzkyODUoYWgpKQotCQlhaHAtPmFoX2VlcF9tYXAgPSBFRVBfTUFQXzRLQklUUzsKLQllbHNlCi0JCWFocC0+YWhfZWVwX21hcCA9IEVFUF9NQVBfREVGQVVMVDsKLQotCWlmICghYXRoOWtfaHdfZmlsbF9lZXByb20oYWgpKQorCWlmICghYWgtPmVlcF9vcHMtPmZpbGxfZWVwcm9tKGFoKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlzdGF0dXMgPSBhdGg5a19od19jaGVja19lZXByb20oYWgpOworCXN0YXR1cyA9IGFoLT5lZXBfb3BzLT5jaGVja19lZXByb20oYWgpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmNjEwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgRUVQUk9NX0gKKyNkZWZpbmUgRUVQUk9NX0gKKworI2RlZmluZSBBSF9VU0VfRUVQUk9NICAgMHgxCisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweDVhYTUKKyNlbHNlCisjZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUMgMHhhNTVhCisjZW5kaWYKKworI2RlZmluZSBDVFJZX0RFQlVHICAgMHgxZmYKKyNkZWZpbmUJQ1RSWV9ERUZBVUxUIDAKKworI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0NPTVBSRVNTX0RJUyAgIDB4MDAwMQorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0FFU19ESVMgICAgICAgIDB4MDAwMgorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0ZBU1RGUkFNRV9ESVMgIDB4MDAwNAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0JVUlNUX0RJUyAgICAgIDB4MDAwOAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX01BWFFDVSAgICAgICAgIDB4MDFGMAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX01BWFFDVV9TICAgICAgIDQKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9IRUFWWV9DTElQX0VOICAweDAyMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTICAgICAweEYwMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTX1MgICAxMgorCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORCAgIDB4MDA0MAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiAgICAweDAwODAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19NSURCQU5EICAgIDB4MDIwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REICAgICAweDA0MDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUEgICAgMHgwODAwCisKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERF9QUkU0XzAgIDB4NDAwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQV9QUkU0XzAgMHg4MDAwCisKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQgIDB4MAorI2RlZmluZSBBUjU0MTZfRUVQUk9NX1MgICAgICAgICAgICAgMgorI2RlZmluZSBBUjU0MTZfRUVQUk9NX09GRlNFVCAgICAgICAgMHgyMDAwCisjZGVmaW5lIEFSNTQxNl9FRVBST01fTUFYICAgICAgICAgICAweGFlMAorCisjZGVmaW5lIEFSNTQxNl9FRVBST01fU1RBUlRfQUREUiBcCisJKEFSX1NSRVZfOTEwMChhaCkpID8gMHgxZmZmMTAwMCA6IDB4NTAzZjEyMDAKKworI2RlZmluZSBTRF9OT19DVEwgICAgICAgICAgICAgICAweEUwCisjZGVmaW5lIE5PX0NUTCAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgQ1RMX01PREVfTSAgICAgICAgICAgICAgNworI2RlZmluZSBDVExfMTFBICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENUTF8xMUIgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1RMXzExRyAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDVExfMkdIVDIwICAgICAgICAgICAgICA1CisjZGVmaW5lIENUTF81R0hUMjAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1RMXzJHSFQ0MCAgICAgICAgICAgICAgNworI2RlZmluZSBDVExfNUdIVDQwICAgICAgICAgICAgICA4CisKKyNkZWZpbmUgRVhUX0FERElUSVZFICgweDgwMDApCisjZGVmaW5lIENUTF8xMUFfRVhUIChDVExfMTFBIHwgRVhUX0FERElUSVZFKQorI2RlZmluZSBDVExfMTFHX0VYVCAoQ1RMXzExRyB8IEVYVF9BRERJVElWRSkKKyNkZWZpbmUgQ1RMXzExQl9FWFQgKENUTF8xMUIgfCBFWFRfQURESVRJVkUpCisKKyNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDAgMgorI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MCAzCisKKyNkZWZpbmUgSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTiAgICAgNiAgLyogMTAqbG9nMTAoMikqMiAqLworI2RlZmluZSBJTkNSRUFTRV9NQVhQT1dfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCisKKy8qCisgKiBGb3IgQVI5Mjg1IGFuZCBsYXRlciBjaGlwc2V0cywgdGhlIGZvbGxvd2luZyBiaXRzIGFyZSBub3QgYmVpbmcgcHJvZ3JhbW1lZAorICogaW4gRUVQUk9NIGFuZCBzbyBuZWVkIHRvIGJlIGVuYWJsZWQgYWx3YXlzLgorICoKKyAqIEJpdCAwOiBlbl9mY2NfbWlkCisgKiBCaXQgMTogZW5famFwX21pZAorICogQml0IDI6IGVuX2ZjY19kZnNfaHQ0MAorICogQml0IDM6IGVuX2phcF9odDQwCisgKiBCaXQgNDogZW5famFwX2Rmc19odDQwCisgKi8KKyNkZWZpbmUgQVI5Mjg1X1JERVhUX0RFRkFVTFQgICAgMHgxRgorCisjZGVmaW5lIEFSX0VFUFJPTV9NQUMoaSkJKDB4MWQrKGkpKQorI2RlZmluZSBBVEg5S19QT1dfU00oX3IsIF9zKQkoKChfcikgJiAweDNmKSA8PCAoX3MpKQorI2RlZmluZSBGUkVRMkZCSU4oeCwgeSkJCSgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCisjZGVmaW5lIGF0aDlrX2h3X3VzZV9mbGFzaChfYWgpCSghKF9haC0+YWhfZmxhZ3MgJiBBSF9VU0VfRUVQUk9NKSkKKworI2RlZmluZSBPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJiBcCisJCQkJIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpCisKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWV9TICAgMQorCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEICAgICAgICAweDAwMDEKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX0VOQUJMRURfUyAgICAgIDAKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZICAgICAgIDB4MDAwMgorI2RlZmluZSBFRVBfUkZTSUxFTlRfUE9MQVJJVFlfUyAgICAgMQorI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUwgICAgICAgMHgwMDFjCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9HUElPX1NFTF9TICAgICAyCisKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUNDAgICAgIDB4MDQKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDQwICAgICAweDA4CisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQyMCAgICAgMHgxMAorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjAgICAgIDB4MjAKKworI2RlZmluZSBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSICAgICAgIDB4MQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUiAgICAgICAgICAgICAgIDB4RQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLICAgIDB4MEZGRgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yICAgICAgIDB4MgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zICAgICAgIDB4MworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl83ICAgICAgIDB4NworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl85ICAgICAgIDB4OQorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNiAgICAgIDB4MTAKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcgICAgICAweDExCisjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5ICAgICAgMHgxMworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCAgICAgIDB4MTQKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIgICAgICAweDE2CisKKyNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKKyNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKKyNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0CisjZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1CisjZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgICAgNQorI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgIDYzCisjZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgICAgMTI4CisjZGVmaW5lIEFSNTQxNl9CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0CisjZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMworI2RlZmluZSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAgICAgICAgIC01CisKKy8qIFJ4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGICAgICAwCisjZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRiAgICAgMQorI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl9PUklHICAgICAgICAgICAgIDIKKworLyogVHggZ2FpbiB0eXBlIHZhbHVlcyAqLworI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9PUklHSU5BTCAgICAgICAgIDAKKyNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUiAgICAgICAxCisKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX1NUQVJUX0xPQyAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSUyAgICAgICAgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUyAzCisjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUyAgMworI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9DVExTICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVMgICAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUyAgICAgICAgICAgICAyCisjZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDUKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX01BWF9DSEFJTlMgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAyMgorCitlbnVtIGVlcHJvbV9wYXJhbSB7CisJRUVQX05GVEhSRVNIXzUsCisJRUVQX05GVEhSRVNIXzIsCisJRUVQX01BQ19NU1csCisJRUVQX01BQ19NSUQsCisJRUVQX01BQ19MU1csCisJRUVQX1JFR18wLAorCUVFUF9SRUdfMSwKKwlFRVBfT1BfQ0FQLAorCUVFUF9PUF9NT0RFLAorCUVFUF9SRl9TSUxFTlQsCisJRUVQX09CXzUsCisJRUVQX0RCXzUsCisJRUVQX09CXzIsCisJRUVQX0RCXzIsCisJRUVQX01JTk9SX1JFViwKKwlFRVBfVFhfTUFTSywKKwlFRVBfUlhfTUFTSywKKwlFRVBfUlhHQUlOX1RZUEUsCisJRUVQX1RYR0FJTl9UWVBFLAorCUVFUF9PTF9QV1JDVFJMLAorCUVFUF9SQ19DSEFJTl9NQVNLLAorCUVFUF9EQUNfSFBXUl81RywKKwlFRVBfRlJBQ19OXzVHCit9OworCitlbnVtIGFyNTQxNl9yYXRlcyB7CisJcmF0ZTZtYiwgcmF0ZTltYiwgcmF0ZTEybWIsIHJhdGUxOG1iLAorCXJhdGUyNG1iLCByYXRlMzZtYiwgcmF0ZTQ4bWIsIHJhdGU1NG1iLAorCXJhdGUxbCwgcmF0ZTJsLCByYXRlMnMsIHJhdGU1XzVsLAorCXJhdGU1XzVzLCByYXRlMTFsLCByYXRlMTFzLCByYXRlWHIsCisJcmF0ZUh0MjBfMCwgcmF0ZUh0MjBfMSwgcmF0ZUh0MjBfMiwgcmF0ZUh0MjBfMywKKwlyYXRlSHQyMF80LCByYXRlSHQyMF81LCByYXRlSHQyMF82LCByYXRlSHQyMF83LAorCXJhdGVIdDQwXzAsIHJhdGVIdDQwXzEsIHJhdGVIdDQwXzIsIHJhdGVIdDQwXzMsCisJcmF0ZUh0NDBfNCwgcmF0ZUh0NDBfNSwgcmF0ZUh0NDBfNiwgcmF0ZUh0NDBfNywKKwlyYXRlRHVwQ2NrLCByYXRlRHVwT2ZkbSwgcmF0ZUV4dENjaywgcmF0ZUV4dE9mZG0sCisJQXI1NDE2UmF0ZVNpemUKK307CisKK2VudW0gYXRoOWtfaGFsX2ZyZXFfYmFuZCB7CisJQVRIOUtfSEFMX0ZSRVFfQkFORF81R0haID0gMCwKKwlBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPSAxCit9OworCitzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyIHsKKwl1MTYgbGVuZ3RoOworCXUxNiBjaGVja3N1bTsKKwl1MTYgdmVyc2lvbjsKKwl1OCBvcENhcEZsYWdzOworCXU4IGVlcE1pc2M7CisJdTE2IHJlZ0RtblsyXTsKKwl1OCBtYWNBZGRyWzZdOworCXU4IHJ4TWFzazsKKwl1OCB0eE1hc2s7CisJdTE2IHJmU2lsZW50OworCXUxNiBibHVlVG9vdGhPcHRpb25zOworCXUxNiBkZXZpY2VDYXA7CisJdTMyIGJpbkJ1aWxkTnVtYmVyOworCXU4IGRldmljZVR5cGU7CisJdTggcHdkY2xraW5kOworCXU4IGZ1dHVyZUJhc2VfMVsyXTsKKwl1OCByeEdhaW5UeXBlOworCXU4IGRhY0hpUHdyTW9kZV81RzsKKwl1OCBvcGVuTG9vcFB3ckNudGw7CisJdTggZGFjTHBNb2RlOworCXU4IHR4R2FpblR5cGU7CisJdTggcmNDaGFpbk1hc2s7CisJdTggZGVzaXJlZFNjYWxlQ0NLOworCXU4IHBvd2VyX3RhYmxlX29mZnNldDsKKwl1OCBmcmFjX25fNWc7CisJdTggZnV0dXJlQmFzZV8zWzIxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgeworCXUxNiBsZW5ndGg7CisJdTE2IGNoZWNrc3VtOworCXUxNiB2ZXJzaW9uOworCXU4IG9wQ2FwRmxhZ3M7CisJdTggZWVwTWlzYzsKKwl1MTYgcmVnRG1uWzJdOworCXU4IG1hY0FkZHJbNl07CisJdTggcnhNYXNrOworCXU4IHR4TWFzazsKKwl1MTYgcmZTaWxlbnQ7CisJdTE2IGJsdWVUb290aE9wdGlvbnM7CisJdTE2IGRldmljZUNhcDsKKwl1MzIgYmluQnVpbGROdW1iZXI7CisJdTggZGV2aWNlVHlwZTsKKwl1OCB0eEdhaW5UeXBlOworfSBfX3BhY2tlZDsKKworCitzdHJ1Y3Qgc3B1cl9jaGFuIHsKKwl1MTYgc3B1ckNoYW47CisJdTggc3B1clJhbmdlTG93OworCXU4IHNwdXJSYW5nZUhpZ2g7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciB7CisJdTMyIGFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTMyIGFudEN0cmxDb21tb247CisJdTggYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggc3dpdGNoU2V0dGxpbmc7CisJdTggdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggYWRjRGVzaXJlZFNpemU7CisJdTggcGdhRGVzaXJlZFNpemU7CisJdTggeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggdHhFbmRUb1hwYU9mZjsKKwl1OCB0eEVuZFRvUnhPbjsKKwl1OCB0eEZyYW1lVG9YcGFPbjsKKwl1OCB0aHJlc2g2MjsKKwl1OCBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhwZEdhaW47CisJdTggeHBkOworCXU4IGlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggcGRHYWluT3ZlcmxhcDsKKwl1OCBvYjsKKwl1OCBkYjsKKwl1OCB4cGFCaWFzTHZsOworCXU4IHB3ckRlY3JlYXNlRm9yMkNoYWluOworCXU4IHB3ckRlY3JlYXNlRm9yM0NoYWluOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB4YXR0ZW4yRGJbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IG9iX2NoMTsKKwl1OCBkYl9jaDE7CisJdTggdXNlQW50MToxLAorCSAgICBmb3JjZV94cGFvbjoxLAorCSAgICBsb2NhbF9iaWFzOjEsCisJICAgIGZlbUJhbmRTZWxlY3RVc2VkOjEsIHhsbmFidWZpbjoxLCB4bG5haXNlbDoyLCB4bG5hYnVmbW9kZToxOworCXU4IG1pc2NCaXRzOworCXUxNiB4cGFCaWFzTHZsRnJlcVszXTsKKwl1OCBmdXR1cmVNb2RhbFs2XTsKKworCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wIHsKKwl1OCBwd3JQZGdbMl1bNV07CisJdTggdnBkUGRnWzJdWzVdOworCXU4IHBjZGFjWzJdWzVdOworCXU4IGVtcHR5WzJdWzVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgeworCXUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1MzIgIGFudEN0cmxDb21tb247CisJdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHN3aXRjaFNldHRsaW5nOworCXU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGFkY0Rlc2lyZWRTaXplOworCXU4ICAgcGdhRGVzaXJlZFNpemU7CisJdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHR4RW5kVG9YcGFPZmY7CisJdTggICB0eEVuZFRvUnhPbjsKKwl1OCAgIHR4RnJhbWVUb1hwYU9uOworCXU4ICAgdGhyZXNoNjI7CisJdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgeHBkR2FpbjsKKwl1OCAgIHhwZDsKKwl1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHBkR2Fpbk92ZXJsYXA7CisJdTggICBvYl8wMTsKKwl1OCAgIGRiMV8wMTsKKwl1OCAgIHhwYUJpYXNMdmw7CisJdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7CisJdTggICB0eEZyYW1lVG9QYU9uOworCXU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgc3dTZXR0bGVIdDQwOworCXU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgZGIyXzAxOworCXU4ICAgdmVyc2lvbjsKKwl1MTYgIG9iXzIzNDsKKwl1MTYgIGRiMV8yMzQ7CisJdTE2ICBkYjJfMjM0OworCXU4ICAgZnV0dXJlTW9kYWxbNF07CisKKwlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxIHsKKwl1OCBwd3JQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKKwl1OCB2cGRQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayB7CisJdTggcHdyUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107CisJdTggdnBkUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgeworCXU4IGJDaGFubmVsOworCXU4IHRQb3cyeFs0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCB0UG93MnhbOF07Cit9IF9fcGFja2VkOworCisKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKK3N0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCBmbGFnOjIsIHRQb3dlcjo2OworfSBfX3BhY2tlZDsKKyNlbHNlCitzdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7CisJdTggYkNoYW5uZWw7CisJdTggdFBvd2VyOjYsIGZsYWc6MjsKK30gX19wYWNrZWQ7CisjZW5kaWYKKworc3RydWN0IGNhbF9jdGxfZGF0YSB7CisJc3RydWN0IGNhbF9jdGxfZWRnZXMKKwljdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfY3RsX2RhdGFfNGsgeworCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCisJY3RsRWRnZXNbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgeworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgYmFzZUVlcEhlYWRlcjsKKwl1OCBjdXN0RGF0YVs2NF07CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXJbMl07CisJdTggY2FsRnJlcVBpZXI1R1tBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107CisJdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCisJIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKKwkgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlcjVHW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXI1R0hUMjBbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCSBjYWxUYXJnZXRQb3dlcjVHSFQ0MFtBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKKwkgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKKwl1OCBjdGxJbmRleFtBUjU0MTZfTlVNX0NUTFNdOworCXN0cnVjdCBjYWxfY3RsX2RhdGEgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOworCXU4IHBhZGRpbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayB7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayBiYXNlRWVwSGVhZGVyOworCXU4IGN1c3REYXRhWzIwXTsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciBtb2RhbEhlYWRlcjsKKwl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsKKwljYWxQaWVyRGF0YTJHW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107CisJdTggY3RsSW5kZXhbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIGN0bERhdGFbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwl1OCBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworZW51bSByZWdfZXh0X2JpdG1hcCB7CisJUkVHX0VYVF9KQVBBTl9NSURCQU5EID0gMSwKKwlSRUdfRVhUX0ZDQ19ERlNfSFQ0MCA9IDIsCisJUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCA9IDMsCisJUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCA9IDQKK307CisKK3N0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5IHsKKwl1MTYgY291bnRyeUNvZGU7CisJdTE2IHJlZ0RtbkVudW07CisJdTE2IHJlZ0RtbjVHOworCXUxNiByZWdEbW4yRzsKKwl1OCBpc011bHRpZG9tYWluOworCXU4IGlzb1szXTsKK307CisKK2VudW0gYXRoOWtfZWVwX21hcCB7CisJRUVQX01BUF9ERUZBVUxUID0gMHgwLAorCUVFUF9NQVBfNEtCSVRTLAorCUVFUF9NQVBfTUFYCit9OworCitzdHJ1Y3QgZWVwcm9tX29wcyB7CisJaW50ICgqY2hlY2tfZWVwcm9tKShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTMyICgqZ2V0X2VlcHJvbSkoc3RydWN0IGF0aF9odyAqaHcsIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKTsKKwlib29sICgqZmlsbF9lZXByb20pKHN0cnVjdCBhdGhfaHcgKmh3KTsKKwlpbnQgKCpnZXRfZWVwcm9tX3Zlcikoc3RydWN0IGF0aF9odyAqaHcpOworCWludCAoKmdldF9lZXByb21fcmV2KShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTggKCpnZXRfbnVtX2FudF9jb25maWcpKHN0cnVjdCBhdGhfaHcgKmh3LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworCXUxNiAoKmdldF9lZXByb21fYW50ZW5uYV9jZmcpKHN0cnVjdCBhdGhfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwlib29sICgqc2V0X2JvYXJkX3ZhbHVlcykoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwl2b2lkICgqc2V0X2FkZGFjKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworCWludCAoKnNldF90eHBvd2VyKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICB1MTYgY2ZnQ3RsLCB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCisJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwgdTggcG93ZXJMaW1pdCk7CisJdTE2ICgqZ2V0X3NwdXJfY2hhbm5lbCkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeik7Cit9OworCisjZGVmaW5lIGFyNTQxNl9nZXRfbnR4Y2hhaW5zKF90eGNoYWlubWFzaykJCQlcCisJKCgoX3R4Y2hhaW5tYXNrID4+IDIpICYgMSkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICgoX3R4Y2hhaW5tYXNrID4+IDEpICYgMSkgKyAoX3R4Y2hhaW5tYXNrICYgMSkpCisKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKKworI2VuZGlmIC8qIEVFUFJPTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYwppbmRleCBjMzhhMDBiLi5kNDk0ZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmMKQEAgLTE3LDg4ICsxNyw4MCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKICNpbmNsdWRlICJpbml0dmFscy5oIgogCi1zdGF0aWMgY29uc3QgdTggQ0xPQ0tfUkFURVtdID0geyA0MCwgODAsIDIyLCA0NCwgODgsIDQwIH07CitzdGF0aWMgaW50IGJ0Y29leF9lbmFibGU7Cittb2R1bGVfcGFyYW0oYnRjb2V4X2VuYWJsZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGJ0Y29leF9lbmFibGUsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHN1cHBvcnQiKTsKIAotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX211bHRpX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGlxX2NhbF9zaW5nbGVfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX211bHRpX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19nYWluX2NhbF9zaW5nbGVfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2RjX2NhbF9tdWx0aV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX3NpbmdsZV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfaW5pdF9kY19jYWw7CisjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfQ0NLCQkyMgorI2RlZmluZSBBVEg5S19DTE9DS19SQVRFXzVHSFpfT0ZETQk0MAorI2RlZmluZSBBVEg5S19DTE9DS19SQVRFXzJHSFpfT0ZETQk0NAogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcmVnKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHR5cGUpOwotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB0eXBlKTsKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKTsKLXN0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSwKIAkJCSAgICAgIHUzMiByZWcsIHUzMiB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCBhdGg5a19od185MjgwX3NwdXJfbWl0aWdhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1zdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworc3RhdGljIHZvaWQgYXRoOWtfaHdfOTI4MF9zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitzdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAKIC8qKioqKioqKioqKioqKioqKioqKi8KIC8qIEhlbHBlciBGdW5jdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHUzMiBhdGg5a19od19tYWNfdXNlYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjbGtzKQorc3RhdGljIHUzMiBhdGg5a19od19tYWNfdXNlYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGNsa3MpCiB7Ci0JaWYgKGFoLT5haF9jdXJjaGFuICE9IE5VTEwpCi0JCXJldHVybiBjbGtzIC8gQ0xPQ0tfUkFURVthdGg5a19od19jaGFuMndtb2RlKGFoLCBhaC0+YWhfY3VyY2hhbildOwotCWVsc2UKLQkJcmV0dXJuIGNsa3MgLyBDTE9DS19SQVRFW0FUSDlLX01PREVfMTFCXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKKworCWlmICghYWgtPmN1cmNoYW4pIC8qIHNob3VsZCByZWFsbHkgY2hlY2sgZm9yIENDSyBpbnN0ZWFkICovCisJCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV9DQ0s7CisJaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJcmV0dXJuIGNsa3MgLyBBVEg5S19DTE9DS19SQVRFXzJHSFpfT0ZETTsKKworCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE07CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX3VzZWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgY2xrcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX3VzZWMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBjbGtzKQogewotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAKLQlpZiAoY2hhbiAmJiBJU19DSEFOX0hUNDAoY2hhbikpCisJaWYgKGNvbmZfaXNfaHQ0MChjb25mKSkKIAkJcmV0dXJuIGF0aDlrX2h3X21hY191c2VjKGFoLCBjbGtzKSAvIDI7CiAJZWxzZQogCQlyZXR1cm4gYXRoOWtfaHdfbWFjX3VzZWMoYWgsIGNsa3MpOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY19jbGtzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzZWNzKQorc3RhdGljIHUzMiBhdGg5a19od19tYWNfY2xrcyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzZWNzKQogewotCWlmIChhaC0+YWhfY3VyY2hhbiAhPSBOVUxMKQotCQlyZXR1cm4gdXNlY3MgKiBDTE9DS19SQVRFW2F0aDlrX2h3X2NoYW4yd21vZGUoYWgsCi0JCQlhaC0+YWhfY3VyY2hhbildOwotCWVsc2UKLQkJcmV0dXJuIHVzZWNzICogQ0xPQ0tfUkFURVtBVEg5S19NT0RFXzExQl07CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CisKKwlpZiAoIWFoLT5jdXJjaGFuKSAvKiBzaG91bGQgcmVhbGx5IGNoZWNrIGZvciBDQ0sgaW5zdGVhZCAqLworCQlyZXR1cm4gdXNlY3MgKkFUSDlLX0NMT0NLX1JBVEVfQ0NLOworCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiB1c2VjcyAqQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE07CisJcmV0dXJuIHVzZWNzICpBVEg5S19DTE9DS19SQVRFXzVHSFpfT0ZETTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19tYWNfdG9fY2xrcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1c2VjcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX2Nsa3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1c2VjcykKIHsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCi0JaWYgKGNoYW4gJiYgSVNfQ0hBTl9IVDQwKGNoYW4pKQorCWlmIChjb25mX2lzX2h0NDAoY29uZikpCiAJCXJldHVybiBhdGg5a19od19tYWNfY2xrcyhhaCwgdXNlY3MpICogMjsKIAllbHNlCiAJCXJldHVybiBhdGg5a19od19tYWNfY2xrcyhhaCwgdXNlY3MpOwogfQogCi1lbnVtIHdpcmVsZXNzX21vZGUgYXRoOWtfaHdfY2hhbjJ3bW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0JaWYgKElTX0NIQU5fQihjaGFuKSkKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFCOwotCWlmIChJU19DSEFOX0coY2hhbikpCi0JCXJldHVybiBBVEg5S19NT0RFXzExRzsKLQotCXJldHVybiBBVEg5S19NT0RFXzExQTsKLX0KLQotYm9vbCBhdGg5a19od193YWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCitib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCAoQUhfVElNRU9VVCAvIEFIX1RJTUVfUVVBTlRVTSk7IGkrKykgeworCUJVR19PTih0aW1lb3V0IDwgQUhfVElNRV9RVUFOVFVNKTsKKworCWZvciAoaSA9IDA7IGkgPCAodGltZW91dCAvIEFIX1RJTUVfUVVBTlRVTSk7IGkrKykgewogCQlpZiAoKFJFR19SRUFEKGFoLCByZWcpICYgbWFzaykgPT0gdmFsKQogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTEwNiw4ICs5OCw4IEBACiAJfQogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAotCQkidGltZW91dCBvbiByZWcgMHgleDogMHglMDh4ICYgMHglMDh4ICE9IDB4JTA4eFxuIiwKLQkJcmVnLCBSRUdfUkVBRChhaCwgcmVnKSwgbWFzaywgdmFsKTsKKwkJInRpbWVvdXQgKCVkIHVzKSBvbiByZWcgMHgleDogMHglMDh4ICYgMHglMDh4ICE9IDB4JTA4eFxuIiwKKwkJdGltZW91dCwgcmVnLCBSRUdfUkVBRChhaCwgcmVnKSwgbWFzaywgdmFsKTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEyNCwxMSArMTE2LDExIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotYm9vbCBhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCitib29sIGF0aDlrX2dldF9jaGFubmVsX2VkZ2VzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICB1MTYgZmxhZ3MsIHUxNiAqbG93LAogCQkJICAgICB1MTYgKmhpZ2gpCiB7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCiAJaWYgKGZsYWdzICYgQ0hBTk5FTF81R0haKSB7CiAJCSpsb3cgPSBwQ2FwLT5sb3dfNWdoel9jaGFuOwpAQCAtMTQzLDcgKzEzNSw3IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi11MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCit1MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgIHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZXMsCiAJCQkgICB1MzIgZnJhbWVMZW4sIHUxNiByYXRlaXgsCiAJCQkgICBib29sIHNob3J0UHJlYW1ibGUpCkBAIC0xNjUsMTUgKzE1NywxNSBAQAogCQl0eFRpbWUgPSBDQ0tfU0lGU19USU1FICsgcGh5VGltZSArICgobnVtQml0cyAqIDEwMDApIC8ga2Jwcyk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9SQ19QSFlfT0ZETToKLQkJaWYgKGFoLT5haF9jdXJjaGFuICYmIElTX0NIQU5fUVVBUlRFUl9SQVRFKGFoLT5haF9jdXJjaGFuKSkgeworCQlpZiAoYWgtPmN1cmNoYW4gJiYgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoYWgtPmN1cmNoYW4pKSB7CiAJCQliaXRzUGVyU3ltYm9sID0JKGticHMgKiBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIpIC8gMTAwMDsKIAkJCW51bUJpdHMgPSBPRkRNX1BMQ1BfQklUUyArIChmcmFtZUxlbiA8PCAzKTsKIAkJCW51bVN5bWJvbHMgPSBESVZfUk9VTkRfVVAobnVtQml0cywgYml0c1BlclN5bWJvbCk7CiAJCQl0eFRpbWUgPSBPRkRNX1NJRlNfVElNRV9RVUFSVEVSCiAJCQkJKyBPRkRNX1BSRUFNQkxFX1RJTUVfUVVBUlRFUgogCQkJCSsgKG51bVN5bWJvbHMgKiBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIpOwotCQl9IGVsc2UgaWYgKGFoLT5haF9jdXJjaGFuICYmCi0JCQkgICBJU19DSEFOX0hBTEZfUkFURShhaC0+YWhfY3VyY2hhbikpIHsKKwkJfSBlbHNlIGlmIChhaC0+Y3VyY2hhbiAmJgorCQkJICAgSVNfQ0hBTl9IQUxGX1JBVEUoYWgtPmN1cmNoYW4pKSB7CiAJCQliaXRzUGVyU3ltYm9sID0JKGticHMgKiBPRkRNX1NZTUJPTF9USU1FX0hBTEYpIC8gMTAwMDsKIAkJCW51bUJpdHMgPSBPRkRNX1BMQ1BfQklUUyArIChmcmFtZUxlbiA8PCAzKTsKIAkJCW51bVN5bWJvbHMgPSBESVZfUk9VTkRfVVAobnVtQml0cywgYml0c1BlclN5bWJvbCk7CkBAIC0xOTksNTIgKzE5MSwxMSBAQAogCXJldHVybiB0eFRpbWU7CiB9CiAKLXUzMiBhdGg5a19od19taHoyaWVlZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBmcmVxLCB1MzIgZmxhZ3MpCi17Ci0JaWYgKGZsYWdzICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChmcmVxID09IDI0ODQpCi0JCQlyZXR1cm4gMTQ7Ci0JCWlmIChmcmVxIDwgMjQ4NCkKLQkJCXJldHVybiAoZnJlcSAtIDI0MDcpIC8gNTsKLQkJZWxzZQotCQkJcmV0dXJuIDE1ICsgKChmcmVxIC0gMjUxMikgLyAyMCk7Ci0JfSBlbHNlIGlmIChmbGFncyAmIENIQU5ORUxfNUdIWikgewotCQlpZiAoYXRoOWtfcmVnZF9pc19wdWJsaWNfc2FmZXR5X3NrdShhaCkgJiYKLQkJICAgIElTX0NIQU5fSU5fUFVCTElDX1NBRkVUWV9CQU5EKGZyZXEpKSB7Ci0JCQlyZXR1cm4gKChmcmVxICogMTApICsKLQkJCQkoKChmcmVxICUgNSkgPT0gMikgPyA1IDogMCkgLSA0OTQwMCkgLyA1OwotCQl9IGVsc2UgaWYgKChmbGFncyAmIENIQU5ORUxfQSkgJiYgKGZyZXEgPD0gNTAwMCkpIHsKLQkJCXJldHVybiAoZnJlcSAtIDQwMDApIC8gNTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAoZnJlcSAtIDUwMDApIC8gNTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChmcmVxID09IDI0ODQpCi0JCQlyZXR1cm4gMTQ7Ci0JCWlmIChmcmVxIDwgMjQ4NCkKLQkJCXJldHVybiAoZnJlcSAtIDI0MDcpIC8gNTsKLQkJaWYgKGZyZXEgPCA1MDAwKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc19wdWJsaWNfc2FmZXR5X3NrdShhaCkKLQkJCSAgICAmJiBJU19DSEFOX0lOX1BVQkxJQ19TQUZFVFlfQkFORChmcmVxKSkgewotCQkJCXJldHVybiAoKGZyZXEgKiAxMCkgKwotCQkJCQkoKChmcmVxICUgNSkgPT0KLQkJCQkJICAyKSA/IDUgOiAwKSAtIDQ5NDAwKSAvIDU7Ci0JCQl9IGVsc2UgaWYgKGZyZXEgPiA0OTAwKSB7Ci0JCQkJcmV0dXJuIChmcmVxIC0gNDAwMCkgLyA1OwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gMTUgKyAoKGZyZXEgLSAyNTEyKSAvIDIwKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKGZyZXEgLSA1MDAwKSAvIDU7Ci0JfQotfQotCi12b2lkIGF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICBzdHJ1Y3QgY2hhbl9jZW50ZXJzICpjZW50ZXJzKQogewogCWludDhfdCBleHRvZmY7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAogCWlmICghSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CiAJCWNlbnRlcnMtPmN0bF9jZW50ZXIgPSBjZW50ZXJzLT5leHRfY2VudGVyID0KQEAgLTI2NywxNiArMjE4LDE1IEBACiAJCWNlbnRlcnMtPnN5bnRoX2NlbnRlciAtIChleHRvZmYgKiBIVDQwX0NIQU5ORUxfQ0VOVEVSX1NISUZUKTsKIAljZW50ZXJzLT5leHRfY2VudGVyID0KIAkJY2VudGVycy0+c3ludGhfY2VudGVyICsgKGV4dG9mZiAqCi0JCQkgKChhaHAtPmFoX2V4dHByb3RzcGFjaW5nID09IEFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwKSA/CisJCQkgKChhaC0+ZXh0cHJvdHNwYWNpbmcgPT0gQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjApID8KIAkJCSAgSFQ0MF9DSEFOTkVMX0NFTlRFUl9TSElGVCA6IDE1KSk7Ci0KIH0KIAogLyoqKioqKioqKioqKioqKioqKi8KIC8qIENoaXAgUmV2aXNpb25zICovCiAvKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19yZWFkX3JldmlzaW9ucyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19yZWFkX3JldmlzaW9ucyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgdmFsOwogCkBAIC0yODQsMjEgKzIzNCwyMiBAQAogCiAJaWYgKHZhbCA9PSAweEZGKSB7CiAJCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9TUkVWKTsKLQkJYWgtPmFoX21hY1ZlcnNpb24gPSAodmFsICYgQVJfU1JFVl9WRVJTSU9OMikgPj4gQVJfU1JFVl9UWVBFMl9TOwotCQlhaC0+YWhfbWFjUmV2ID0gTVModmFsLCBBUl9TUkVWX1JFVklTSU9OMik7Ci0JCWFoLT5haF9pc1BjaUV4cHJlc3MgPSAodmFsICYgQVJfU1JFVl9UWVBFMl9IT1NUX01PREUpID8gMCA6IDE7CisJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPQorCQkJKHZhbCAmIEFSX1NSRVZfVkVSU0lPTjIpID4+IEFSX1NSRVZfVFlQRTJfUzsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID0gTVModmFsLCBBUl9TUkVWX1JFVklTSU9OMik7CisJCWFoLT5pc19wY2lleHByZXNzID0gKHZhbCAmIEFSX1NSRVZfVFlQRTJfSE9TVF9NT0RFKSA/IDAgOiAxOwogCX0gZWxzZSB7CiAJCWlmICghQVJfU1JFVl85MTAwKGFoKSkKLQkJCWFoLT5haF9tYWNWZXJzaW9uID0gTVModmFsLCBBUl9TUkVWX1ZFUlNJT04pOworCQkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IE1TKHZhbCwgQVJfU1JFVl9WRVJTSU9OKTsKIAotCQlhaC0+YWhfbWFjUmV2ID0gdmFsICYgQVJfU1JFVl9SRVZJU0lPTjsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID0gdmFsICYgQVJfU1JFVl9SRVZJU0lPTjsKIAotCQlpZiAoYWgtPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkKLQkJCWFoLT5haF9pc1BjaUV4cHJlc3MgPSB0cnVlOworCQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKQorCQkJYWgtPmlzX3BjaWV4cHJlc3MgPSB0cnVlOwogCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19od19nZXRfcmFkaW9yZXYoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19nZXRfcmFkaW9yZXYoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHZhbDsKIAlpbnQgaTsKQEAgLTMxNyw5ICsyNjgsOSBAQAogLyogSFcgQXR0YWNoLCBEZXRhY2gsIEluaXQgUm91dGluZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2Rpc2FibGVwY2llKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2Rpc2FibGVwY2llKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCWlmICghQVJfU1JFVl85MTAwKGFoKSkKKwlpZiAoQVJfU1JFVl85MTAwKGFoKSkKIAkJcmV0dXJuOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmMwMCk7CkBAIC0zMzUsNyArMjg2LDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2NoaXBfdGVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgYm9vbCBhdGg5a19od19jaGlwX3Rlc3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHJlZ0FkZHJbMl0gPSB7IEFSX1NUQV9JRDAsIEFSX1BIWV9CQVNFICsgKDggPDwgMikgfTsKIAl1MzIgcmVnSG9sZFsyXTsKQEAgLTM3Nyw2ICszMjgsNyBAQAogCQlSRUdfV1JJVEUoYWgsIHJlZ0FkZHJbaV0sIHJlZ0hvbGRbaV0pOwogCX0KIAl1ZGVsYXkoMTAwKTsKKwogCXJldHVybiB0cnVlOwogfQogCkBAIC0zODksNiArMzQxLDggQEAKIAkJcmV0dXJuICJBdGhlcm9zIDU0MTgiOwogCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKIAkJcmV0dXJuICJBdGhlcm9zIDkxNjAiOworCWNhc2UgQVI1NDE2X0FSOTEwMF9ERVZJRDoKKwkJcmV0dXJuICJBdGhlcm9zIDkxMDAiOwogCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0lFOgogCQlyZXR1cm4gIkF0aGVyb3MgOTI4MCI7CkBAIC0zOTksNDQgKzM1Myw0NCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmYXVsdHMoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZmF1bHRzKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBpOwogCi0JYWgtPmFoX2NvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAyOwotCWFoLT5haF9jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAxMDsKLQlhaC0+YWhfY29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmID0gMDsKLQlhaC0+YWhfY29uZmlnLmFja182bWIgPSAweDA7Ci0JYWgtPmFoX2NvbmZpZy5jd21faWdub3JlX2V4dGNjYSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV9sMXNrcF9lbmFibGUgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV9wb3dlcl9yZXNldCA9IDB4MTAwOwotCWFoLT5haF9jb25maWcucGNpZV9yZXN0b3JlID0gMDsKLQlhaC0+YWhfY29uZmlnLnBjaWVfd2FlbiA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcgPSAxOwotCWFoLT5haF9jb25maWcuaHRfZW5hYmxlID0gMTsKLQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19sb3cgPSAyMDA7Ci0JYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfaGlnaCA9IDUwMDsKLQlhaC0+YWhfY29uZmlnLmNja190cmlnX2hpZ2ggPSAyMDA7Ci0JYWgtPmFoX2NvbmZpZy5jY2tfdHJpZ19sb3cgPSAxMDA7Ci0JYWgtPmFoX2NvbmZpZy5lbmFibGVfYW5pID0gMTsKLQlhaC0+YWhfY29uZmlnLm5vaXNlX2ltbXVuaXR5X2xldmVsID0gNDsKLQlhaC0+YWhfY29uZmlnLm9mZG1fd2Vha3NpZ25hbF9kZXQgPSAxOwotCWFoLT5haF9jb25maWcuY2NrX3dlYWtzaWduYWxfdGhyID0gMDsKLQlhaC0+YWhfY29uZmlnLnNwdXJfaW1tdW5pdHlfbGV2ZWwgPSAyOwotCWFoLT5haF9jb25maWcuZmlyc3RlcF9sZXZlbCA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5yc3NpX3Rocl9oaWdoID0gNDA7Ci0JYWgtPmFoX2NvbmZpZy5yc3NpX3Rocl9sb3cgPSA3OwotCWFoLT5haF9jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSAwOwotCWFoLT5haF9jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcCA9IDA7CisJYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAyOworCWFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAxMDsKKwlhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmID0gMDsKKwlhaC0+Y29uZmlnLmFja182bWIgPSAweDA7CisJYWgtPmNvbmZpZy5jd21faWdub3JlX2V4dGNjYSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPSAwOworCWFoLT5jb25maWcucGNpZV9sMXNrcF9lbmFibGUgPSAwOworCWFoLT5jb25maWcucGNpZV9jbG9ja19yZXEgPSAwOworCWFoLT5jb25maWcucGNpZV9wb3dlcl9yZXNldCA9IDB4MTAwOworCWFoLT5jb25maWcucGNpZV9yZXN0b3JlID0gMDsKKwlhaC0+Y29uZmlnLnBjaWVfd2FlbiA9IDA7CisJYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcgPSAxOworCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMTsKKwlhaC0+Y29uZmlnLm9mZG1fdHJpZ19sb3cgPSAyMDA7CisJYWgtPmNvbmZpZy5vZmRtX3RyaWdfaGlnaCA9IDUwMDsKKwlhaC0+Y29uZmlnLmNja190cmlnX2hpZ2ggPSAyMDA7CisJYWgtPmNvbmZpZy5jY2tfdHJpZ19sb3cgPSAxMDA7CisJYWgtPmNvbmZpZy5lbmFibGVfYW5pID0gMTsKKwlhaC0+Y29uZmlnLm5vaXNlX2ltbXVuaXR5X2xldmVsID0gNDsKKwlhaC0+Y29uZmlnLm9mZG1fd2Vha3NpZ25hbF9kZXQgPSAxOworCWFoLT5jb25maWcuY2NrX3dlYWtzaWduYWxfdGhyID0gMDsKKwlhaC0+Y29uZmlnLnNwdXJfaW1tdW5pdHlfbGV2ZWwgPSAyOworCWFoLT5jb25maWcuZmlyc3RlcF9sZXZlbCA9IDA7CisJYWgtPmNvbmZpZy5yc3NpX3Rocl9oaWdoID0gNDA7CisJYWgtPmNvbmZpZy5yc3NpX3Rocl9sb3cgPSA3OworCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSAwOworCWFoLT5jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKLQkJYWgtPmFoX2NvbmZpZy5zcHVyY2hhbnNbaV1bMF0gPSBBUl9OT19TUFVSOwotCQlhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVsxXSA9IEFSX05PX1NQVVI7CisJCWFoLT5jb25maWcuc3B1cmNoYW5zW2ldWzBdID0gQVJfTk9fU1BVUjsKKwkJYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1bMV0gPSBBUl9OT19TUFVSOwogCX0KIAotCWFoLT5haF9jb25maWcuaW50cl9taXRpZ2F0aW9uID0gMTsKKwlhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiA9IDE7CiAKIAkvKgogCSAqIFdlIG5lZWQgdGhpcyBmb3IgUENJIGRldmljZXMgb25seSAoQ2FyZGJ1cywgUENJLCBtaW5pUENJKQpAQCAtNDU1LDYyICs0MDksNTQgQEAKIAkgKiBkZXZpY2VzIChsZWdhY3ksIDgwMi4xMWFiZykuCiAJICovCiAJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQotCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0gU0VSX1JFR19NT0RFX0FVVE87CisJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPSBTRVJfUkVHX01PREVfQVVUTzsKIH0KIAotc3RhdGljIHN0cnVjdCBhdGhfaGFsXzU0MTYgKmF0aDlrX2h3X25ld3N0YXRlKHUxNiBkZXZpZCwKLQkJCQkJICAgICAgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJCSAgICAgIHZvaWQgX19pb21lbSAqbWVtLAotCQkJCQkgICAgICBpbnQgKnN0YXR1cykKK3N0YXRpYyBzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19uZXdzdGF0ZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQlpbnQgKnN0YXR1cykKIHsKLQlzdGF0aWMgY29uc3QgdTggZGVmYnNzaWRtYXNrW0VUSF9BTEVOXSA9Ci0JCXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWg7CisJc3RydWN0IGF0aF9odyAqYWg7CiAKLQlhaHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2hhbF81NDE2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGFocCA9PSBOVUxMKSB7CisJYWggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2h3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFoID09IE5VTEwpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzdGF0ZSBibG9ja1xuIik7CiAJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlhaCA9ICZhaHAtPmFoOwogCWFoLT5haF9zYyA9IHNjOwotCWFoLT5haF9zaCA9IG1lbTsKLQlhaC0+YWhfbWFnaWMgPSBBUjU0MTZfTUFHSUM7Ci0JYWgtPmFoX2NvdW50cnlDb2RlID0gQ1RSWV9ERUZBVUxUOwotCWFoLT5haF9kZXZpZCA9IGRldmlkOwotCWFoLT5haF9zdWJ2ZW5kb3JpZCA9IDA7CisJYWgtPmh3X3ZlcnNpb24ubWFnaWMgPSBBUjU0MTZfTUFHSUM7CisJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gQ1RSWV9ERUZBVUxUOworCWFoLT5od192ZXJzaW9uLmRldmlkID0gZGV2aWQ7CisJYWgtPmh3X3ZlcnNpb24uc3VidmVuZG9yaWQgPSAwOwogCiAJYWgtPmFoX2ZsYWdzID0gMDsKIAlpZiAoKGRldmlkID09IEFSNTQxNl9BUjkxMDBfREVWSUQpKQotCQlhaC0+YWhfbWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85MTAwOworCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID0gQVJfU1JFVl9WRVJTSU9OXzkxMDA7CiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKQogCQlhaC0+YWhfZmxhZ3MgPSBBSF9VU0VfRUVQUk9NOwogCi0JYWgtPmFoX3Bvd2VyTGltaXQgPSBNQVhfUkFURV9QT1dFUjsKLQlhaC0+YWhfdHBTY2FsZSA9IEFUSDlLX1RQX1NDQUxFX01BWDsKLQlhaHAtPmFoX2F0aW1XaW5kb3cgPSAwOwotCWFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCA9IGFoLT5haF9jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2w7Ci0JYWhwLT5haF9hbnRlbm5hU3dpdGNoU3dhcCA9Ci0JCWFoLT5haF9jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcDsKLQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzID0gQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7Ci0JYWhwLT5haF9iZWFjb25JbnRlcnZhbCA9IDEwMDsKLQlhaHAtPmFoX2VuYWJsZTMya0h6Q2xvY2sgPSBET05UX1VTRV8zMktIWjsKLQlhaHAtPmFoX3Nsb3R0aW1lID0gKHUzMikgLTE7Ci0JYWhwLT5haF9hY2t0aW1lb3V0ID0gKHUzMikgLTE7Ci0JYWhwLT5haF9jdHN0aW1lb3V0ID0gKHUzMikgLTE7Ci0JYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKLQltZW1jcHkoJmFocC0+YWhfYnNzaWRtYXNrLCBkZWZic3NpZG1hc2ssIEVUSF9BTEVOKTsKKwlhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCA9IE1BWF9SQVRFX1BPV0VSOworCWFoLT5yZWd1bGF0b3J5LnRwX3NjYWxlID0gQVRIOUtfVFBfU0NBTEVfTUFYOworCWFoLT5hdGltX3dpbmRvdyA9IDA7CisJYWgtPmRpdmVyc2l0eV9jb250cm9sID0gYWgtPmNvbmZpZy5kaXZlcnNpdHlfY29udHJvbDsKKwlhaC0+YW50ZW5uYV9zd2l0Y2hfc3dhcCA9CisJCWFoLT5jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcDsKKwlhaC0+c3RhX2lkMV9kZWZhdWx0cyA9IEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOworCWFoLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CisJYWgtPmVuYWJsZV8zMmtIel9jbG9jayA9IERPTlRfVVNFXzMyS0haOworCWFoLT5zbG90dGltZSA9ICh1MzIpIC0xOworCWFoLT5hY2t0aW1lb3V0ID0gKHUzMikgLTE7CisJYWgtPmN0c3RpbWVvdXQgPSAodTMyKSAtMTsKKwlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7CiAKLQlhaHAtPmFoX2dCZWFjb25SYXRlID0gMDsKKwlhaC0+Z2JlYWNvbl9yYXRlID0gMDsKIAotCXJldHVybiBhaHA7CisJcmV0dXJuIGFoOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X3JmYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcmZhdHRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJYm9vbCByZlN0YXR1cyA9IGZhbHNlOwogCWludCBlY29kZSA9IDA7CkBAIC01MjUsNyArNDcxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19yZl9jbGFpbShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X3JmX2NsYWltKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiB2YWw7CiAKQEAgLTU0NSw4OCArNDkxLDg3IEBACiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCiAJCQkiNUcgUmFkaW8gQ2hpcCBSZXYgMHglMDJYIGlzIG5vdCAiCiAJCQkic3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyXG4iLAotCQkJYWgtPmFoX2FuYWxvZzVHaHpSZXYpOworCQkJYWgtPmh3X3ZlcnNpb24uYW5hbG9nNUdoelJldik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlhaC0+YWhfYW5hbG9nNUdoelJldiA9IHZhbDsKKwlhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2ID0gdmFsOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfaW5pdF9tYWNhZGRyKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfaW5pdF9tYWNhZGRyKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiBzdW07CiAJaW50IGk7CiAJdTE2IGVldmFsOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlzdW0gPSAwOwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJZWV2YWwgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBBUl9FRVBST01fTUFDKGkpKTsKKwkJZWV2YWwgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgQVJfRUVQUk9NX01BQyhpKSk7CiAJCXN1bSArPSBlZXZhbDsKLQkJYWhwLT5haF9tYWNhZGRyWzIgKiBpXSA9IGVldmFsID4+IDg7Ci0JCWFocC0+YWhfbWFjYWRkclsyICogaSArIDFdID0gZWV2YWwgJiAweGZmOworCQlhaC0+bWFjYWRkclsyICogaV0gPSBlZXZhbCA+PiA4OworCQlhaC0+bWFjYWRkclsyICogaSArIDFdID0gZWV2YWwgJiAweGZmOwogCX0KIAlpZiAoc3VtID09IDAgfHwgc3VtID09IDB4ZmZmZiAqIDMpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAogCQkJIm1hYyBhZGRyZXNzIHJlYWQgZmFpbGVkOiAlcE1cbiIsCi0JCQlhaHAtPmFoX21hY2FkZHIpOworCQkJYWgtPm1hY2FkZHIpOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfcnhnYWluX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHJ4Z2Fpbl90eXBlOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQlpZiAoYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX01JTk9SX1JFVikgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcpIHsKLQkJcnhnYWluX3R5cGUgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfUlhHQUlOX1RZUEUpOworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX01JTk9SX1JFVikgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcpIHsKKwkJcnhnYWluX3R5cGUgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JYR0FJTl9UWVBFKTsKIAogCQlpZiAocnhnYWluX3R5cGUgPT0gQVI1NDE2X0VFUF9SWEdBSU5fMTNEQl9CQUNLT0ZGKQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5MjgwTW9kZXNfYmFja29mZl8xM2RiX3J4Z2Fpbl85MjgwXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX2JhY2tvZmZfMTNkYl9yeGdhaW5fOTI4MF8yKSwgNik7CiAJCWVsc2UgaWYgKHJ4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfUlhHQUlOXzIzREJfQkFDS09GRikKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX2JhY2tvZmZfMjNkYl9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19iYWNrb2ZmXzIzZGJfcnhnYWluXzkyODBfMiksIDYpOwogCQllbHNlCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1J4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yKSwgNik7Ci0JfSBlbHNlCi0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLAorCX0gZWxzZSB7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yKSwgNik7CisJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3R4Z2Fpbl9pbmkoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiB0eGdhaW5fdHlwZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCi0JaWYgKGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KSB7Ci0JCXR4Z2Fpbl90eXBlID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKTsKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KSB7CisJCXR4Z2Fpbl90eXBlID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWEdBSU5fVFlQRSk7CiAKIAkJaWYgKHR4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfVFhHQUlOX0hJR0hfUE9XRVIpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4MF8yKSwgNik7CiAJCWVsc2UKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzVHhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiksIDYpOwotCX0gZWxzZQotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwKKwl9IGVsc2UgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAogCQlhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiwKIAkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiksIDYpOworCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19od19wb3N0X2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X3Bvc3RfYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBlY29kZTsKIApAQCAtNjU1LDIzOCArNjAwLDIyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2RvX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQkgIHZvaWQgX19pb21lbSAqbWVtLCBpbnQgKnN0YXR1cykKK3N0YXRpYyBzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19kb19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJIGludCAqc3RhdHVzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWg7CisJc3RydWN0IGF0aF9odyAqYWg7CiAJaW50IGVjb2RlOwogCXUzMiBpLCBqOwogCi0JYWhwID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBtZW0sIHN0YXR1cyk7Ci0JaWYgKGFocCA9PSBOVUxMKQorCWFoID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBzdGF0dXMpOworCWlmIChhaCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCWFoID0gJmFocC0+YWg7Ci0KIAlhdGg5a19od19zZXRfZGVmYXVsdHMoYWgpOwogCi0JaWYgKGFoLT5haF9jb25maWcuaW50cl9taXRpZ2F0aW9uICE9IDApCi0JCWFocC0+YWhfaW50ck1pdGlnYXRpb24gPSB0cnVlOworCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiAhPSAwKQorCQlhaC0+aW50cl9taXRpZ2F0aW9uID0gdHJ1ZTsKIAogCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiQ291bGRuJ3QgcmVzZXQgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKIAkJZWNvZGUgPSAtRUlPOwogCQlnb3RvIGJhZDsKIAl9CiAKIAlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CiAJCWVjb2RlID0gLUVJTzsKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKGFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKLQkJaWYgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSB8fAotCQkgICAgKEFSX1NSRVZfOTI4MChhaCkgJiYgIWFoLT5haF9pc1BjaUV4cHJlc3MpKSB7Ci0JCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfQVVUTykgeworCQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kgfHwKKwkJICAgIChBUl9TUkVWXzkyODAoYWgpICYmICFhaC0+aXNfcGNpZXhwcmVzcykpIHsKKwkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQogCQkJCVNFUl9SRUdfTU9ERV9PTjsKIAkJfSBlbHNlIHsKLQkJCWFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQorCQkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9CiAJCQkJU0VSX1JFR19NT0RFX09GRjsKIAkJfQogCX0KIAotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULAotCQkic2VyaWFsaXplX3JlZ21vZGUgaXMgJWRcbiIsCi0JCWFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJzZXJpYWxpemVfcmVnbW9kZSBpcyAlZFxuIiwKKwkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSk7CiAKLQlpZiAoKGFoLT5haF9tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgJiYKLQkgICAgKGFoLT5haF9tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpICYmCi0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgJiYKKwlpZiAoKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSAmJgorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSAmJgorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgJiYKIAkgICAgKCFBUl9TUkVWXzkxMDAoYWgpKSAmJiAoIUFSX1NSRVZfOTI4MChhaCkpICYmICghQVJfU1JFVl85Mjg1KGFoKSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsCiAJCQkiTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBub3Qgc3VwcG9ydGVkIGJ5ICIKLQkJCSJ0aGlzIGRyaXZlclxuIiwgYWgtPmFoX21hY1ZlcnNpb24sIGFoLT5haF9tYWNSZXYpOworCQkJInRoaXMgZHJpdmVyXG4iLCBhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uLAorCQkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2KTsKIAkJZWNvZGUgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBiYWQ7CiAJfQogCiAJaWYgKEFSX1NSRVZfOTEwMChhaCkpIHsKLQkJYWhwLT5haF9pcUNhbERhdGEuY2FsRGF0YSA9ICZpcV9jYWxfbXVsdGlfc2FtcGxlOwotCQlhaHAtPmFoX3N1cHBDYWxzID0gSVFfTUlTTUFUQ0hfQ0FMOwotCQlhaC0+YWhfaXNQY2lFeHByZXNzID0gZmFsc2U7CisJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKKwkJYWgtPnN1cHBfY2FscyA9IElRX01JU01BVENIX0NBTDsKKwkJYWgtPmlzX3BjaWV4cHJlc3MgPSBmYWxzZTsKIAl9Ci0JYWgtPmFoX3BoeVJldiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0hJUF9JRCk7CisJYWgtPmh3X3ZlcnNpb24ucGh5UmV2ID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DSElQX0lEKTsKIAogCWlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7CiAJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCQlhaHAtPmFoX2lxQ2FsRGF0YS5jYWxEYXRhID0gJmlxX2NhbF9zaW5nbGVfc2FtcGxlOwotCQkJYWhwLT5haF9hZGNHYWluQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX3NpbmdsZV9zYW1wbGU7CisJCQlhaC0+YWRjZ2Fpbl9jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZ2Fpbl9jYWxfc2luZ2xlX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjRGNDYWxEYXRhLmNhbERhdGEgPQorCQkJYWgtPmFkY2RjX2NhbGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjRGNDYWxJbml0RGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxpbml0ZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2luaXRfZGNfY2FsOwogCQl9IGVsc2UgewotCQkJYWhwLT5haF9pcUNhbERhdGEuY2FsRGF0YSA9ICZpcV9jYWxfbXVsdGlfc2FtcGxlOwotCQkJYWhwLT5haF9hZGNHYWluQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKKwkJCWFoLT5hZGNnYWluX2NhbGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19nYWluX2NhbF9tdWx0aV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjRGNDYWxJbml0RGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxpbml0ZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2luaXRfZGNfY2FsOwogCQl9Ci0JCWFocC0+YWhfc3VwcENhbHMgPSBBRENfR0FJTl9DQUwgfCBBRENfRENfQ0FMIHwgSVFfTUlTTUFUQ0hfQ0FMOworCQlhaC0+c3VwcF9jYWxzID0gQURDX0dBSU5fQ0FMIHwgQURDX0RDX0NBTCB8IElRX01JU01BVENIX0NBTDsKIAl9CiAKLQlpZiAoQVJfU1JFVl85MTYwKGFoKSkgewotCQlhaC0+YWhfY29uZmlnLmVuYWJsZV9hbmkgPSAxOwotCQlhaHAtPmFoX2FuaV9mdW5jdGlvbiA9IChBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCB8Ci0JCQkJCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMKTsKLQl9IGVsc2UgewotCQlhaHAtPmFoX2FuaV9mdW5jdGlvbiA9IEFUSDlLX0FOSV9BTEw7Ci0JCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCQlhaHAtPmFoX2FuaV9mdW5jdGlvbiAmPQl+QVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMOwotCQl9Ci0JfQorCWFoLT5hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlhaC0+YW5pX2Z1bmN0aW9uICY9IH5BVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw7CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULAogCQkiVGhpcyBNYWMgQ2hpcCBSZXYgMHglMDJ4LiV4IGlzIFxuIiwKLQkJYWgtPmFoX21hY1ZlcnNpb24sIGFoLT5haF9tYWNSZXYpOworCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uLCBhaC0+aHdfdmVyc2lvbi5tYWNSZXYpOwogCiAJaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODVfMV8yLAorCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NV8xXzIpLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjkyODVDb21tb25fOTI4NV8xXzIsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyODVDb21tb25fOTI4NV8xXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODVDb21tb25fOTI4NV8xXzIpLCAyKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywKKwkJaWYgKGFoLT5jb25maWcucGNpZV9jbG9ja19yZXEpIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKIAkJCWFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1XzFfMiwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODVfMV8yKSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODVfMV8yLAogCQkJQVJSQVlfU0laRShhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NV8xXzIpLAogCQkJCSAgMik7CiAJCX0KIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODUsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODUsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODVNb2Rlc185Mjg1KSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODUsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyODVDb21tb25fOTI4NSwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4NUNvbW1vbl85Mjg1KSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NSwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODUpLCAyKTsKIAkJfSBlbHNlIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NSwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODUpLCAyKTsKIAkJfQogCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MF8yLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODBNb2Rlc185MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc185MjgwXzIpLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjkyODBDb21tb25fOTI4MF8yLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODBfMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4MENvbW1vbl85MjgwXzIpLCAyKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywKKwkJaWYgKGFoLT5jb25maWcucGNpZV9jbG9ja19yZXEpIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKIAkJCSAgICAgICBhcjkyODBQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4MFBjaWVQaHlfY2xrcmVxX29mZl9MMV85MjgwKSwyKTsKIAkJfSBlbHNlIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQkgICAgICAgYXI5MjgwUGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4MCksIDIpOwogCQl9Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzQWRkaXRpb25hbCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsCiAJCQkgICAgICAgYXI5MjgwTW9kZXNfZmFzdF9jbG9ja185MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc19mYXN0X2Nsb2NrXzkyODBfMiksIDMpOwogCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4ME1vZGVzXzkyODApLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjkyODBDb21tb25fOTI4MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4MENvbW1vbl85MjgwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwQ29tbW9uXzkyODApLCAyKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZNb2Rlc185MTYwKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjU0MTZDb21tb25fOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkNvbW1vbl85MTYwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhcjU0MTZCYW5rMF85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmswLCBhcjU0MTZCYW5rMF85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazBfOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCQl9SZkdhaW5fOTE2MCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmsxXzkxNjApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMl85MTYwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhcjU0MTZCYW5rM185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmszLCBhcjU0MTZCYW5rM185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazNfOTE2MCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms2XzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNlRQQ185MTYwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhcjU0MTZCYW5rN185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms3LCBhcjU0MTZCYW5rN185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazdfOTE2MCksIDIpOwogCQlpZiAoQVJfU1JFVl85MTYwXzExKGFoKSkgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQWRkYWMsCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUFkZGFjLAogCQkJCSAgICAgICBhcjU0MTZBZGRhY185MTYwMV8xLAogCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkFkZGFjXzkxNjAxXzEpLCAyKTsKIAkJfSBlbHNlIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLCBhcjU0MTZBZGRhY185MTYwLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTE2MCwKIAkJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTYwKSwgMik7CiAJCX0KIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTEwMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZNb2Rlc185MTAwKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjU0MTZDb21tb25fOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkNvbW1vbl85MTAwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhcjU0MTZCYW5rMF85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmswLCBhcjU0MTZCYW5rMF85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazBfOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCQl9SZkdhaW5fOTEwMCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmsxXzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMl85MTAwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhcjU0MTZCYW5rM185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmszLCBhcjU0MTZCYW5rM185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazNfOTEwMCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms2XzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNlRQQ185MTAwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhcjU0MTZCYW5rN185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms3LCBhcjU0MTZCYW5rN185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazdfOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkFkZGFjXzkxMDApLCAyKTsKIAl9IGVsc2UgewotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2RlcywgYXI1NDE2TW9kZXMsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyNTQxNk1vZGVzLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXMpLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjU0MTZDb21tb24sCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjU0MTZDb21tb24sCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb24pLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazAsIGFyNTQxNkJhbmswLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmswLCBhcjU0MTZCYW5rMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsxLCBhcjU0MTZCYW5rMSwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYXI1NDE2QmFuazEsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMSksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMiwgYXI1NDE2QmFuazIsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFyNTQxNkJhbmsyLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazIpLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazMsIGFyNTQxNkJhbmszLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmszLCBhcjU0MTZCYW5rMywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2LCBhcjU0MTZCYW5rNiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNiwgYXI1NDE2QmFuazYsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNiksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNlRQQywgYXI1NDE2QmFuazZUUEMsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUEMpLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazcsIGFyNTQxNkJhbms3LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms3LCBhcjU0MTZCYW5rNywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3KSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLCBhcjU0MTZBZGRhYywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywgYXI1NDE2QWRkYWMsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhYyksIDIpOwogCX0KIAotCWlmIChhaC0+YWhfaXNQY2lFeHByZXNzKQorCWlmIChhaC0+aXNfcGNpZXhwcmVzcykKIAkJYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKGFoLCAwKTsKIAllbHNlCiAJCWF0aDlrX2h3X2Rpc2FibGVwY2llKGFoKTsKQEAgLTg5NSw2ICs4MzEsMjIgQEAKIAlpZiAoZWNvZGUgIT0gMCkKIAkJZ290byBiYWQ7CiAKKwlpZiAoQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCQl1MzIgdHhnYWluX3R5cGUgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKTsKKworCQkvKiB0eGdhaW4gdGFibGUgKi8KKwkJaWYgKHR4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfVFhHQUlOX0hJR0hfUE9XRVIpIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQlhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzIsCisJCQlBUlJBWV9TSVpFKGFyOTI4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85Mjg1XzFfMiksIDYpOworCQl9IGVsc2UgeworCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCWFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzIsCisJCQlBUlJBWV9TSVpFKGFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzIpLCA2KTsKKwkJfQorCisJfQorCiAJLyogcnhnYWluIHRhYmxlICovCiAJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkpCiAJCWF0aDlrX2h3X2luaXRfcnhnYWluX2luaShhaCk7CkBAIC05MDMsNTMgKzg1NSw1NSBAQAogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpKQogCQlhdGg5a19od19pbml0X3R4Z2Fpbl9pbmkoYWgpOwogCi0JaWYgKGFoLT5haF9kZXZpZCA9PSBBUjkyODBfREVWSURfUENJKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaU1vZGVzLmlhX3Jvd3M7IGkrKykgewotCQkJdTMyIHJlZyA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgMCk7CisJaWYgKCFhdGg5a19od19maWxsX2NhcF9pbmZvKGFoKSkgeworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAiZmFpbGVkIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm9cbiIpOworCQllY29kZSA9IC1FSU5WQUw7CisJCWdvdG8gYmFkOworCX0KIAotCQkJZm9yIChqID0gMTsgaiA8IGFocC0+YWhfaW5pTW9kZXMuaWFfY29sdW1uczsgaisrKSB7Ci0JCQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgaik7CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjkyODBfREVWSURfUENJKSAmJgorCSAgICB0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CiAKLQkJCQlJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIGopID0KKwkJLyogRUVQUk9NIEZpeHVwICovCisJCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pTW9kZXMuaWFfcm93czsgaSsrKSB7CisJCQl1MzIgcmVnID0gSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIDApOworCisJCQlmb3IgKGogPSAxOyBqIDwgYWgtPmluaU1vZGVzLmlhX2NvbHVtbnM7IGorKykgeworCQkJCXUzMiB2YWwgPSBJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgaik7CisKKwkJCQlJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgaikgPQogCQkJCQlhdGg5a19od19pbmlfZml4dXAoYWgsCi0JCQkJCQkJICAgJmFocC0+YWhfZWVwcm9tLmRlZiwKKwkJCQkJCQkgICAmYWgtPmVlcHJvbS5kZWYsCiAJCQkJCQkJICAgcmVnLCB2YWwpOwogCQkJfQogCQl9CiAJfQogCi0JaWYgKCFhdGg5a19od19maWxsX2NhcF9pbmZvKGFoKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKLQkJCSJmYWlsZWQgYXRoOWtfaHdfZmlsbF9jYXBfaW5mb1xuIik7Ci0JCWVjb2RlID0gLUVJTlZBTDsKLQkJZ290byBiYWQ7Ci0JfQotCiAJZWNvZGUgPSBhdGg5a19od19pbml0X21hY2FkZHIoYWgpOwogCWlmIChlY29kZSAhPSAwKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULAorCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULAogCQkJImZhaWxlZCBpbml0aWFsaXppbmcgbWFjIGFkZHJlc3NcbiIpOwogCQlnb3RvIGJhZDsKIAl9CiAKIAlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKLQkJYWgtPmFoX3R4VHJpZ0xldmVsID0gKEFSX0ZUUklHXzI1NkIgPj4gQVJfRlRSSUdfUyk7CisJCWFoLT50eF90cmlnX2xldmVsID0gKEFSX0ZUUklHXzI1NkIgPj4gQVJfRlRSSUdfUyk7CiAJZWxzZQotCQlhaC0+YWhfdHhUcmlnTGV2ZWwgPSAoQVJfRlRSSUdfNTEyQiA+PiBBUl9GVFJJR19TKTsKKwkJYWgtPnR4X3RyaWdfbGV2ZWwgPSAoQVJfRlRSSUdfNTEyQiA+PiBBUl9GVFJJR19TKTsKIAogCWF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoYWgpOwogCiAJcmV0dXJuIGFoOwogYmFkOgotCWlmIChhaHApCi0JCWF0aDlrX2h3X2RldGFjaCgoc3RydWN0IGF0aF9oYWwgKikgYWhwKTsKKwlpZiAoYWgpCisJCWF0aDlrX2h3X2RldGFjaChhaCk7CiAJaWYgKHN0YXR1cykKIAkJKnN0YXR1cyA9IGVjb2RlOwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfYmIoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9iYihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIHN5bnRoRGVsYXk7CkBAIC05NjUsNyArOTE5LDcgQEAKIAl1ZGVsYXkoc3ludGhEZWxheSArIEJBU0VfQUNUSVZBVEVfREVMQVkpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3FvcyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3FvcyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX01JQ19RT1NfQ09OVFJPTCwgMHgxMDBhYSk7CiAJUkVHX1dSSVRFKGFoLCBBUl9NSUNfUU9TX1NFTEVDVCwgMHgzMjEwKTsKQEAgLTk4Miw3ICs5MzYsNyBAQAogCVJFR19XUklURShhaCwgQVJfVFhPUF8xMl8xNSwgMHhGRkZGRkZGRik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfcGxsKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfcGxsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIHBsbDsKQEAgLTEwNDMsMjcgKzk5NywyNiBAQAogCQkJCXBsbCB8PSBTTSgweGIsIEFSX1JUQ19QTExfRElWKTsKIAkJfQogCX0KLQlSRUdfV1JJVEUoYWgsICh1MTYpIChBUl9SVENfUExMX0NPTlRST0wpLCBwbGwpOworCVJFR19XUklURShhaCwgQVJfUlRDX1BMTF9DT05UUk9MLCBwbGwpOwogCiAJdWRlbGF5KFJUQ19QTExfU0VUVExFX0RFTEFZKTsKIAogCVJFR19XUklURShhaCwgQVJfUlRDX1NMRUVQX0NMSywgQVJfUlRDX0ZPUkNFX0RFUklWRURfQ0xLKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jaGFpbl9tYXNrcyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2NoYWluX21hc2tzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IHJ4X2NoYWlubWFzaywgdHhfY2hhaW5tYXNrOwogCi0JcnhfY2hhaW5tYXNrID0gYWhwLT5haF9yeGNoYWlubWFzazsKLQl0eF9jaGFpbm1hc2sgPSBhaHAtPmFoX3R4Y2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IGFoLT5yeGNoYWlubWFzazsKKwl0eF9jaGFpbm1hc2sgPSBhaC0+dHhjaGFpbm1hc2s7CiAKIAlzd2l0Y2ggKHJ4X2NoYWlubWFzaykgewogCWNhc2UgMHg1OgogCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FOQUxPR19TV0FQLAogCQkJICAgIEFSX1BIWV9TV0FQX0FMVF9DSEFJTik7CiAJY2FzZSAweDM6Ci0JCWlmICgoKGFoKS0+YWhfbWFjVmVyc2lvbiA8PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpIHsKKwkJaWYgKCgoYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPD0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKSB7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0ssIDB4Nyk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9DQUxfQ0hBSU5NQVNLLCAweDcpOwogCQkJYnJlYWs7CkBAIC0xMDg4LDI4ICsxMDQxLDI2IEBACiAJCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQU5BTE9HX1NXQVApIHwgMHgwMDAwMDAwMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgIGVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlhaHAtPmFoX21hc2tSZWcgPSBBUl9JTVJfVFhFUlIgfAorCWFoLT5tYXNrX3JlZyA9IEFSX0lNUl9UWEVSUiB8CiAJCUFSX0lNUl9UWFVSTiB8CiAJCUFSX0lNUl9SWEVSUiB8CiAJCUFSX0lNUl9SWE9STiB8CiAJCUFSX0lNUl9CQ05NSVNDOwogCi0JaWYgKGFocC0+YWhfaW50ck1pdGlnYXRpb24pCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfUlhJTlRNIHwgQVJfSU1SX1JYTUlOVFI7CisJaWYgKGFoLT5pbnRyX21pdGlnYXRpb24pCisJCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfUlhJTlRNIHwgQVJfSU1SX1JYTUlOVFI7CiAJZWxzZQotCQlhaHAtPmFoX21hc2tSZWcgfD0gQVJfSU1SX1JYT0s7CisJCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfUlhPSzsKIAotCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfVFhPSzsKKwlhaC0+bWFza19yZWcgfD0gQVJfSU1SX1RYT0s7CiAKIAlpZiAob3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlhaHAtPmFoX21hc2tSZWcgfD0gQVJfSU1SX01JQjsKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9NSUI7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0lNUiwgYWhwLT5haF9tYXNrUmVnKTsKKwlSRUdfV1JJVEUoYWgsIEFSX0lNUiwgYWgtPm1hc2tfcmVnKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lNUl9TMiwgUkVHX1JFQUQoYWgsIEFSX0lNUl9TMikgfCBBUl9JTVJfUzJfR1RUKTsKIAogCWlmICghQVJfU1JFVl85MTAwKGFoKSkgewpAQCAtMTExOSw3MiArMTA3MCw2NCBAQAogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9BQ0spKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBhY2sgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaHAtPmFoX2Fja3RpbWVvdXQgPSAodTMyKSAtMTsKKwkJYWgtPmFja3RpbWVvdXQgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1RJTUVfT1VULAogCQkJICAgICAgQVJfVElNRV9PVVRfQUNLLCBhdGg5a19od19tYWNfdG9fY2xrcyhhaCwgdXMpKTsKLQkJYWhwLT5haF9hY2t0aW1lb3V0ID0gdXM7CisJCWFoLT5hY2t0aW1lb3V0ID0gdXM7CiAJCXJldHVybiB0cnVlOwogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9DVFMpKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBjdHMgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaHAtPmFoX2N0c3RpbWVvdXQgPSAodTMyKSAtMTsKKwkJYWgtPmN0c3RpbWVvdXQgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1RJTUVfT1VULAogCQkJICAgICAgQVJfVElNRV9PVVRfQ1RTLCBhdGg5a19od19tYWNfdG9fY2xrcyhhaCwgdXMpKTsKLQkJYWhwLT5haF9jdHN0aW1lb3V0ID0gdXM7CisJCWFoLT5jdHN0aW1lb3V0ID0gdXM7CiAJCXJldHVybiB0cnVlOwogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2dsb2JhbF90eHRpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdHUpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR1KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlpZiAodHUgPiAweEZGRkYpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfWE1JVCwKIAkJCSJiYWQgZ2xvYmFsIHR4IHRpbWVvdXQgJXVcbiIsIHR1KTsKLQkJYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKKwkJYWgtPmdsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfR1RYVE8sIEFSX0dUWFRPX1RJTUVPVVRfTElNSVQsIHR1KTsKLQkJYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgPSB0dTsKKwkJYWgtPmdsb2JhbHR4dGltZW91dCA9IHR1OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3VzZXJfc2V0dGluZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImFoLT5taXNjX21vZGUgMHgleFxuIiwKKwkJYWgtPm1pc2NfbW9kZSk7CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImFocC0+YWhfbWlzY01vZGUgMHgleFxuIiwKLQkJYWhwLT5haF9taXNjTW9kZSk7Ci0KLQlpZiAoYWhwLT5haF9taXNjTW9kZSAhPSAwKQorCWlmIChhaC0+bWlzY19tb2RlICE9IDApCiAJCVJFR19XUklURShhaCwgQVJfUENVX01JU0MsCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9QQ1VfTUlTQykgfCBhaHAtPmFoX21pc2NNb2RlKTsKLQlpZiAoYWhwLT5haF9zbG90dGltZSAhPSAodTMyKSAtMSkKLQkJYXRoOWtfaHdfc2V0c2xvdHRpbWUoYWgsIGFocC0+YWhfc2xvdHRpbWUpOwotCWlmIChhaHAtPmFoX2Fja3RpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWhwLT5haF9hY2t0aW1lb3V0KTsKLQlpZiAoYWhwLT5haF9jdHN0aW1lb3V0ICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoYWgsIGFocC0+YWhfY3RzdGltZW91dCk7Ci0JaWYgKGFocC0+YWhfZ2xvYmFsdHh0aW1lb3V0ICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChhaCwgYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQpOworCQkJICBSRUdfUkVBRChhaCwgQVJfUENVX01JU0MpIHwgYWgtPm1pc2NfbW9kZSk7CisJaWYgKGFoLT5zbG90dGltZSAhPSAodTMyKSAtMSkKKwkJYXRoOWtfaHdfc2V0c2xvdHRpbWUoYWgsIGFoLT5zbG90dGltZSk7CisJaWYgKGFoLT5hY2t0aW1lb3V0ICE9ICh1MzIpIC0xKQorCQlhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoYWgsIGFoLT5hY2t0aW1lb3V0KTsKKwlpZiAoYWgtPmN0c3RpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9jdHNfdGltZW91dChhaCwgYWgtPmN0c3RpbWVvdXQpOworCWlmIChhaC0+Z2xvYmFsdHh0aW1lb3V0ICE9ICh1MzIpIC0xKQorCQlhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChhaCwgYWgtPmdsb2JhbHR4dGltZW91dCk7CiB9CiAKIGNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKQpAQCAtMTE5Myw3ICsxMTM2LDcgQEAKIAkJYXRoOWtfaHdfZGV2bmFtZShkZXZpZCkgOiBOVUxMOwogfQogCi12b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCWF0aDlrX2h3X2FuaV9kZXRhY2goYWgpOwpAQCAtMTIwMywxOSArMTE0NiwxOSBAQAogCWtmcmVlKGFoKTsKIH0KIAotc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCXZvaWQgX19pb21lbSAqbWVtLCBpbnQgKmVycm9yKQorc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqZXJyb3IpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gTlVMTDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IE5VTEw7CiAKIAlzd2l0Y2ggKGRldmlkKSB7CiAJY2FzZSBBUjU0MTZfREVWSURfUENJOgogCWNhc2UgQVI1NDE2X0RFVklEX1BDSUU6CisJY2FzZSBBUjU0MTZfQVI5MTAwX0RFVklEOgogCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0k6CiAJY2FzZSBBUjkyODBfREVWSURfUENJRToKIAljYXNlIEFSOTI4NV9ERVZJRF9QQ0lFOgotCQlhaCA9IGF0aDlrX2h3X2RvX2F0dGFjaChkZXZpZCwgc2MsIG1lbSwgZXJyb3IpOworCQlhaCA9IGF0aDlrX2h3X2RvX2F0dGFjaChkZXZpZCwgc2MsIGVycm9yKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJKmVycm9yID0gLUVOWElPOwpAQCAtMTIyOSw3ICsxMTcyLDcgQEAKIC8qIElOSSAqLwogLyoqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X292ZXJyaWRlX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19vdmVycmlkZV9pbmkoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAkvKgpAQCAtMTI0MCwyMCArMTE4MywyMCBAQAogCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiAKIAotCWlmICghQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgfHwKKwlpZiAoIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgfHwKIAkgICAgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuOwogCiAJUkVHX1dSSVRFKGFoLCAweDk4MDAgKyAoNjUxIDw8IDIpLCAweDExKTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19kZWZfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfZGVmX2luaV9maXh1cChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEsCiAJCQkgICAgICB1MzIgcmVnLCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyKTsKIAotCXN3aXRjaCAoYWgtPmFoX2RldmlkKSB7CisJc3dpdGNoIChhaC0+aHdfdmVyc2lvbi5kZXZpZCkgewogCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKIAkJaWYgKHJlZyA9PSAweDc4OTQpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOWSwKQEAgLTEyODEsMjQgKzEyMjQsMzMgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSwKIAkJCSAgICAgIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JaWYgKGFocC0+YWhfZWVwX21hcCA9PSBFRVBfTUFQXzRLQklUUykKKwlpZiAoYWgtPmVlcF9tYXAgPT0gRUVQX01BUF80S0JJVFMpCiAJCXJldHVybiB2YWx1ZTsKIAllbHNlCiAJCXJldHVybiBhdGg5a19od19kZWZfaW5pX2ZpeHVwKGFoLCBwRWVwRGF0YSwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfcHJvY2Vzc19pbmkoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfb2xjX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKQorCQlhaC0+b3JpZ2luYWxHYWluW2ldID0KKwkJCU1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQpLAorCQkJCQlBUl9QSFlfVFhfR0FJTik7CisJYWgtPlBEQURDZGVsdGEgPSAwOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCWVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKQogewogCWludCBpLCByZWdXcml0ZXMgPSAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgbW9kZXNJbmRleCwgZnJlcUluZGV4OwogCWludCBzdGF0dXM7CiAKQEAgLTEzMzAsNDAgKzEyODIsMzggQEAKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWSgwKSwgMHgwMDAwMDAwNyk7Ci0KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BRENfU0VSSUFMX0NUTCwgQVJfUEhZX1NFTF9FWFRFUk5BTF9SQURJTyk7CisJYWgtPmVlcF9vcHMtPnNldF9hZGRhYyhhaCwgY2hhbik7CiAKLQlhdGg5a19od19zZXRfYWRkYWMoYWgsIGNoYW4pOwotCi0JaWYgKEFSX1NSRVZfNTQxNl9WMjJfT1JfTEFURVIoYWgpKSB7Ci0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgMSwgcmVnV3JpdGVzKTsKKwlpZiAoQVJfU1JFVl81NDE2XzIyX09SX0xBVEVSKGFoKSkgeworCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlBZGRhYywgMSwgcmVnV3JpdGVzKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgdGVtcDsKIAkJdTMyIGFkZGFjU2l6ZSA9Ci0JCQlzaXplb2YodTMyKSAqIGFocC0+YWhfaW5pQWRkYWMuaWFfcm93cyAqCi0JCQlhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnM7CisJCQlzaXplb2YodTMyKSAqIGFoLT5pbmlBZGRhYy5pYV9yb3dzICoKKwkJCWFoLT5pbmlBZGRhYy5pYV9jb2x1bW5zOwogCi0JCW1lbWNweShhaHAtPmFoX2FkZGFjNTQxNl8yMSwKLQkJICAgICAgIGFocC0+YWhfaW5pQWRkYWMuaWFfYXJyYXksIGFkZGFjU2l6ZSk7CisJCW1lbWNweShhaC0+YWRkYWM1NDE2XzIxLAorCQkgICAgICAgYWgtPmluaUFkZGFjLmlhX2FycmF5LCBhZGRhY1NpemUpOwogCi0JCShhaHAtPmFoX2FkZGFjNTQxNl8yMSlbMzEgKiBhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnMgKyAxXSA9IDA7CisJCShhaC0+YWRkYWM1NDE2XzIxKVszMSAqIGFoLT5pbmlBZGRhYy5pYV9jb2x1bW5zICsgMV0gPSAwOwogCi0JCXRlbXAuaWFfYXJyYXkgPSBhaHAtPmFoX2FkZGFjNTQxNl8yMTsKLQkJdGVtcC5pYV9jb2x1bW5zID0gYWhwLT5haF9pbmlBZGRhYy5pYV9jb2x1bW5zOwotCQl0ZW1wLmlhX3Jvd3MgPSBhaHAtPmFoX2luaUFkZGFjLmlhX3Jvd3M7CisJCXRlbXAuaWFfYXJyYXkgPSBhaC0+YWRkYWM1NDE2XzIxOworCQl0ZW1wLmlhX2NvbHVtbnMgPSBhaC0+aW5pQWRkYWMuaWFfY29sdW1uczsKKwkJdGVtcC5pYV9yb3dzID0gYWgtPmluaUFkZGFjLmlhX3Jvd3M7CiAJCVJFR19XUklURV9BUlJBWSgmdGVtcCwgMSwgcmVnV3JpdGVzKTsKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BRENfU0VSSUFMX0NUTCwgQVJfUEhZX1NFTF9JTlRFUk5BTF9BRERBQyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKLQkJdTMyIHJlZyA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgMCk7Ci0JCXUzMiB2YWwgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIG1vZGVzSW5kZXgpOworCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pTW9kZXMuaWFfcm93czsgaSsrKSB7CisJCXUzMiByZWcgPSBJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgMCk7CisJCXUzMiB2YWwgPSBJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgbW9kZXNJbmRleCk7CiAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CiAKIAkJaWYgKHJlZyA+PSAweDc4MDAgJiYgcmVnIDwgMHg3OGEwCi0JCSAgICAmJiBhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZykgeworCQkgICAgJiYgYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcpIHsKIAkJCXVkZWxheSgxMDApOwogCQl9CiAKQEAgLTEzNzEsMTkgKzEzMjEsMjAgQEAKIAl9CiAKIAlpZiAoQVJfU1JFVl85MjgwKGFoKSkKLQkJUkVHX1dSSVRFX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOworCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwgbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQotCQlSRUdfV1JJVEVfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNUeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CisJaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgKEFSX1NSRVZfOTI4NShhaCkgJiYKKwkgICAgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkpCisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JZm9yIChpID0gMDsgaSA8IGFocC0+YWhfaW5pQ29tbW9uLmlhX3Jvd3M7IGkrKykgewotCQl1MzIgcmVnID0gSU5JX1JBKCZhaHAtPmFoX2luaUNvbW1vbiwgaSwgMCk7Ci0JCXUzMiB2YWwgPSBJTklfUkEoJmFocC0+YWhfaW5pQ29tbW9uLCBpLCAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaUNvbW1vbi5pYV9yb3dzOyBpKyspIHsKKwkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaUNvbW1vbiwgaSwgMCk7CisJCXUzMiB2YWwgPSBJTklfUkEoJmFoLT5pbmlDb21tb24sIGksIDEpOwogCiAJCVJFR19XUklURShhaCwgcmVnLCB2YWwpOwogCiAJCWlmIChyZWcgPj0gMHg3ODAwICYmIHJlZyA8IDB4NzhhMAotCQkgICAgJiYgYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcpIHsKKwkJICAgICYmIGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKSB7CiAJCQl1ZGVsYXkoMTAwKTsKIAkJfQogCkBAIC0xMzkzLDcgKzEzNDQsNyBAQAogCWF0aDlrX2h3X3dyaXRlX3JlZ3MoYWgsIG1vZGVzSW5kZXgsIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKIAogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIElTX0NIQU5fQV81TUhaX1NQQUNFRChjaGFuKSkgewotCQlSRUdfV1JJVEVfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNBZGRpdGlvbmFsLCBtb2Rlc0luZGV4LAorCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsIG1vZGVzSW5kZXgsCiAJCQkJcmVnV3JpdGVzKTsKIAl9CiAKQEAgLTE0MDEsMTMgKzEzNTIsMTUgQEAKIAlhdGg5a19od19zZXRfcmVncyhhaCwgY2hhbiwgbWFjbW9kZSk7CiAJYXRoOWtfaHdfaW5pdF9jaGFpbl9tYXNrcyhhaCk7CiAKLQlzdGF0dXMgPSBhdGg5a19od19zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCQkgICAgICBhdGg5a19yZWdkX2dldF9jdGwoYWgsIGNoYW4pLAotCQkJCSAgICAgIGF0aDlrX3JlZ2RfZ2V0X2FudGVubmFfYWxsb3dlZChhaCwKLQkJCQkJCQkJICAgICBjaGFuKSwKLQkJCQkgICAgICBjaGFuLT5tYXhSZWdUeFBvd2VyICogMiwKLQkJCQkgICAgICBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJCSAgKHUzMikgYWgtPmFoX3Bvd2VyTGltaXQpKTsKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpCisJCWF0aDlrX29sY19pbml0KGFoKTsKKworCXN0YXR1cyA9IGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCQkgIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCisJCQkJICBjaGFubmVsLT5tYXhfYW50ZW5uYV9nYWluICogMiwKKwkJCQkgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkJICBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCisJCQkJICAgICAgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKIAkJCSJlcnJvciBpbml0J2luZyB0cmFuc21pdCBwb3dlclxuIik7CkBAIC0xNDI3LDcgKzEzODAsNyBAQAogLyogUmVzZXQgYW5kIENoYW5uZWwgU3dpdGNoaW5nIFJvdXRpbmVzICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JmbW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JmbW9kZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIHJmTW9kZSA9IDA7CiAKQEAgLTE0NDcsMTIgKzE0MDAsMTIgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9NT0RFLCByZk1vZGUpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19tYXJrX3BoeV9pbmFjdGl2ZShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19tYXJrX3BoeV9pbmFjdGl2ZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BQ1RJVkUsIEFSX1BIWV9BQ1RJVkVfRElTKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldF9kbWEoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldF9kbWEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHJlZ3ZhbDsKIApAQCAtMTQ2Miw3ICsxNDE1LDcgQEAKIAlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfVFhDRkcpICYgfkFSX1RYQ0ZHX0RNQVNaX01BU0s7CiAJUkVHX1dSSVRFKGFoLCBBUl9UWENGRywgcmVndmFsIHwgQVJfVFhDRkdfRE1BU1pfMTI4Qik7CiAKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9UWENGRywgQVJfRlRSSUcsIGFoLT5haF90eFRyaWdMZXZlbCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfVFhDRkcsIEFSX0ZUUklHLCBhaC0+dHhfdHJpZ19sZXZlbCk7CiAKIAlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfUlhDRkcpICYgfkFSX1JYQ0ZHX0RNQVNaX01BU0s7CiAJUkVHX1dSSVRFKGFoLCBBUl9SWENGRywgcmVndmFsIHwgQVJfUlhDRkdfRE1BU1pfMTI4Qik7CkBAIC0xNDc4LDcgKzE0MzEsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IG9wbW9kZSkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IG9wbW9kZSkKIHsKIAl1MzIgdmFsOwogCkBAIC0xNTAyLDcgKzE0NTUsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X2dldF9kZWx0YV9zbG9wZV92YWxzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od19nZXRfZGVsdGFfc2xvcGVfdmFscyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSB1MzIgY29lZl9zY2FsZWQsCiAJCQkJCQkgdTMyICpjb2VmX21hbnRpc3NhLAogCQkJCQkJIHUzMiAqY29lZl9leHBvbmVudCkKQEAgLTE1MjEsNyArMTQ3NCw3IEBACiAJKmNvZWZfZXhwb25lbnQgPSBjb2VmX2V4cCAtIDE2OwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlbHRhX3Nsb3BlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIGNvZWZfc2NhbGVkLCBkc19jb2VmX2V4cCwgZHNfY29lZl9tYW47CkBAIC0xNTU1LDExICsxNTA4LDE5IEBACiAJCSAgICAgIEFSX1BIWV9IQUxGR0lfRFNDX0VYUCwgZHNfY29lZl9leHApOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgdHlwZSkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHR5cGUpCiB7CiAJdTMyIHJzdF9mbGFnczsKIAl1MzIgdG1wUmVnOwogCisJaWYgKEFSX1NSRVZfOTEwMChhaCkpIHsKKwkJdTMyIHZhbCA9IFJFR19SRUFEKGFoLCBBUl9SVENfREVSSVZFRF9DTEspOworCQl2YWwgJj0gfkFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0Q7CisJCXZhbCB8PSBTTSgxLCBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9SVENfREVSSVZFRF9DTEssIHZhbCk7CisJCSh2b2lkKVJFR19SRUFEKGFoLCBBUl9SVENfREVSSVZFRF9DTEspOworCX0KKwogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCkBAIC0xNTgyLDExICsxNTQzLDExIEBACiAJCQlyc3RfZmxhZ3MgfD0gQVJfUlRDX1JDX01BQ19DT0xEOwogCX0KIAotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SQyksIHJzdF9mbGFncyk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkMsIHJzdF9mbGFncyk7CiAJdWRlbGF5KDUwKTsKIAotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SQyksIDApOwotCWlmICghYXRoOWtfaHdfd2FpdChhaCwgKHUxNikgKEFSX1JUQ19SQyksIEFSX1JUQ19SQ19NLCAwKSkgeworCVJFR19XUklURShhaCwgQVJfUlRDX1JDLCAwKTsKKwlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1JUQ19SQywgQVJfUlRDX1JDX00sIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCiAJCQkiUlRDIHN0dWNrIGluIE1BQyByZXNldFxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTE2MDMsMTggKzE1NjQsMjAgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3Bvd2VyX29uKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9wb3dlcl9vbihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLCBBUl9SVENfRk9SQ0VfV0FLRV9FTiB8CiAJCSAgQVJfUlRDX0ZPUkNFX1dBS0VfT05fSU5UKTsKIAotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SRVNFVCksIDApOwotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SRVNFVCksIDEpOworCVJFR19XUklURShhaCwgQVJfUlRDX1JFU0VULCAwKTsKKwl1ZGVsYXkoMik7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVTRVQsIDEpOwogCiAJaWYgKCFhdGg5a19od193YWl0KGFoLAogCQkJICAgQVJfUlRDX1NUQVRVUywKIAkJCSAgIEFSX1JUQ19TVEFUVVNfTSwKLQkJCSAgIEFSX1JUQ19TVEFUVVNfT04pKSB7CisJCQkgICBBUl9SVENfU1RBVFVTX09OLAorCQkJICAgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgIlJUQyBub3Qgd2FraW5nIHVwXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE2MjQsNyArMTU4Nyw3IEBACiAJcmV0dXJuIGF0aDlrX2h3X3NldF9yZXNldChhaCwgQVRIOUtfUkVTRVRfV0FSTSk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdHlwZSkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB0eXBlKQogewogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsCiAJCSAgQVJfUlRDX0ZPUkNFX1dBS0VfRU4gfCBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwpAQCAtMTY0MiwxMiArMTYwNSwxMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKQogewogCXUzMiBwaHltb2RlOwogCXUzMiBlbmFibGVEYWNGaWZvID0gMDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCiAJCWVuYWJsZURhY0ZpZm8gPSAoUkVHX1JFQUQoYWgsIEFSX1BIWV9UVVJCTykgJgpAQCAtMTY2Myw3ICsxNjI1LDcgQEAKIAkJICAgIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0MFBMVVMpKQogCQkJcGh5bW9kZSB8PSBBUl9QSFlfRkNfRFlOMjA0MF9QUklfQ0g7CiAKLQkJaWYgKGFocC0+YWhfZXh0cHJvdHNwYWNpbmcgPT0gQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUpCisJCWlmIChhaC0+ZXh0cHJvdHNwYWNpbmcgPT0gQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUpCiAJCQlwaHltb2RlIHw9IEFSX1BIWV9GQ19EWU4yMDQwX0VYVF9DSDsKIAl9CiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVFVSQk8sIHBoeW1vZGUpOwpAQCAtMTY3NCw1NCArMTYzNiwzMCBAQAogCVJFR19XUklURShhaCwgQVJfQ1NULCAweEYgPDwgQVJfQ1NUX1RJTUVPVVRfTElNSVRfUyk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2NoaXBfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF9yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9XQVJNKSkKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9QT1dFUl9PTikpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfV0FSTSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JYWhwLT5haF9jaGlwRnVsbFNsZWVwID0gZmFsc2U7Ci0KKwlhaC0+Y2hpcF9mdWxsc2xlZXAgPSBmYWxzZTsKIAlhdGg5a19od19pbml0X3BsbChhaCwgY2hhbik7Ci0KIAlhdGg5a19od19zZXRfcmZtb2RlKGFoLCBjaGFuKTsKIAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmF0aDlrX2h3X2NoZWNrX2NoYW4oc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmICghKElTX0NIQU5fMkdIWihjaGFuKSBeIElTX0NIQU5fNUdIWihjaGFuKSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgJXUvMHgleDsgbm90IG1hcmtlZCBhcyAiCi0JCQkiMkdIeiBvciA1R0h6XG4iLCBjaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoIUlTX0NIQU5fT0ZETShjaGFuKSAmJgotCSAgICAhSVNfQ0hBTl9CKGNoYW4pICYmCi0JICAgICFJU19DSEFOX0hUMjAoY2hhbikgJiYKLQkgICAgIUlTX0NIQU5fSFQ0MChjaGFuKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBub3QgbWFya2VkIGFzICIKLQkJCSJPRkRNIG9yIENDSyBvciBIVDIwIG9yIEhUNDBQTFVTIG9yIEhUNDBNSU5VU1xuIiwKLQkJCWNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19jaGFubmVsX2NoYW5nZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19jaGFubmVsX2NoYW5nZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKQogeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAJdTMyIHN5bnRoRGVsYXksIHFudW07CiAKIAlmb3IgKHFudW0gPSAwOyBxbnVtIDwgQVJfTlVNX1FDVTsgcW51bSsrKSB7CkBAIC0xNzM0LDcgKzE2NzIsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZCVVNfUkVRLCBBUl9QSFlfUkZCVVNfUkVRX0VOKTsKIAlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9SRkJVU19HUkFOVCwgQVJfUEhZX1JGQlVTX0dSQU5UX0VOLAotCQkJICAgQVJfUEhZX1JGQlVTX0dSQU5UX0VOKSkgeworCQkJICAgQVJfUEhZX1JGQlVTX0dSQU5UX0VOLCBBSF9XQUlUX1RJTUVPVVQpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKIAkJCSJDb3VsZCBub3Qga2lsbCBiYXNlYmFuZCBSWFxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTE3NTYsMTIgKzE2OTQsMTIgQEAKIAkJfQogCX0KIAotCWlmIChhdGg5a19od19zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCQkgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKLQkJCQkgYXRoOWtfcmVnZF9nZXRfYW50ZW5uYV9hbGxvd2VkKGFoLCBjaGFuKSwKLQkJCQkgY2hhbi0+bWF4UmVnVHhQb3dlciAqIDIsCi0JCQkJIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCQkgICAgICh1MzIpIGFoLT5haF9wb3dlckxpbWl0KSkgIT0gMCkgeworCWlmIChhaC0+ZWVwX29wcy0+c2V0X3R4cG93ZXIoYWgsIGNoYW4sCisJCQkgICAgIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCisJCQkgICAgIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAorCQkJICAgICBjaGFubmVsLT5tYXhfcG93ZXIgKiAyLAorCQkJICAgICBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCisJCQkJICh1MzIpIGFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0KSkgIT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCiAJCQkiZXJyb3IgaW5pdCdpbmcgdHJhbnNtaXQgcG93ZXJcbiIpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0xNzkxLDcgKzE3MjksNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od185MjgwX3NwdXJfbWl0aWdhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJaW50IGJiX3NwdXIgPSBBUl9OT19TUFVSOwogCWludCBmcmVxOwpAQCAtMTgyNSw5ICsxNzYzLDkgQEAKIAlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CiAJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwogCi0JYWgtPmFoX2NvbmZpZy5zcHVybW9kZSA9IFNQVVJfRU5BQkxFX0VFUFJPTTsKKwlhaC0+Y29uZmlnLnNwdXJtb2RlID0gU1BVUl9FTkFCTEVfRUVQUk9NOwogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQljdXJfYmJfc3B1ciA9IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKGFoLCBpLCBpczJHSHopOworCQljdXJfYmJfc3B1ciA9IGFoLT5lZXBfb3BzLT5nZXRfc3B1cl9jaGFubmVsKGFoLCBpLCBpczJHSHopOwogCiAJCWlmIChpczJHSHopCiAJCQljdXJfYmJfc3B1ciA9IChjdXJfYmJfc3B1ciAvIDEwKSArIEFSX0JBU0VfRlJFUV8yR0haOwpAQCAtMTkzOCw5ICsxODc2LDkgQEAKIAkJaWYgKChjdXJfdml0X21hc2sgPiBsb3dlcikgJiYgKGN1cl92aXRfbWFzayA8IHVwcGVyKSkgewogCiAJCQkvKiB3b3JrYXJvdW5kIGZvciBnY2MgYnVnICMzNzAxNCAqLwotCQkJdm9sYXRpbGUgaW50IHRtcCA9IGFicyhjdXJfdml0X21hc2sgLSBiaW4pOworCQkJdm9sYXRpbGUgaW50IHRtcF92ID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CiAKLQkJCWlmICh0bXAgPCA3NSkKKwkJCWlmICh0bXBfdiA8IDc1KQogCQkJCW1hc2tfYW10ID0gMTsKIAkJCWVsc2UKIAkJCQltYXNrX2FtdCA9IDA7CkBAIC0yMDQxLDcgKzE5NzksNyBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX01BU0syX1BfNjFfNDUsIHRtcF9tYXNrKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJaW50IGJiX3NwdXIgPSBBUl9OT19TUFVSOwogCWludCBiaW4sIGN1cl9iaW47CkBAIC0yMDcwLDcgKzIwMDgsNyBAQAogCW1lbXNldCgmbWFza19wLCAwLCBzaXplb2YoaW50OF90KSAqIDEyMyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKLQkJY3VyX2JiX3NwdXIgPSBhdGg5a19od19lZXByb21fZ2V0X3NwdXJfY2hhbihhaCwgaSwgaXMyR0h6KTsKKwkJY3VyX2JiX3NwdXIgPSBhaC0+ZWVwX29wcy0+Z2V0X3NwdXJfY2hhbm5lbChhaCwgaSwgaXMyR0h6KTsKIAkJaWYgKEFSX05PX1NQVVIgPT0gY3VyX2JiX3NwdXIpCiAJCQlicmVhazsKIAkJY3VyX2JiX3NwdXIgPSBjdXJfYmJfc3B1ciAtIChjaGFuLT5jaGFubmVsICogMTApOwpAQCAtMjEzOSw5ICsyMDc3LDkgQEAKIAkJaWYgKChjdXJfdml0X21hc2sgPiBsb3dlcikgJiYgKGN1cl92aXRfbWFzayA8IHVwcGVyKSkgewogCiAJCQkvKiB3b3JrYXJvdW5kIGZvciBnY2MgYnVnICMzNzAxNCAqLwotCQkJdm9sYXRpbGUgaW50IHRtcCA9IGFicyhjdXJfdml0X21hc2sgLSBiaW4pOworCQkJdm9sYXRpbGUgaW50IHRtcF92ID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CiAKLQkJCWlmICh0bXAgPCA3NSkKKwkJCWlmICh0bXBfdiA8IDc1KQogCQkJCW1hc2tfYW10ID0gMTsKIAkJCWVsc2UKIAkJCQltYXNrX2FtdCA9IDA7CkBAIC0yMjQyLDU4ICsyMTgwLDQ3IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTUFTSzJfUF82MV80NSwgdG1wX21hc2spOwogfQogCi1ib29sIGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCSAgICBlbnVtIGF0aDlrX2h0X21hY21vZGUgbWFjbW9kZSwKLQkJICAgIHU4IHR4Y2hhaW5tYXNrLCB1OCByeGNoYWlubWFzaywKLQkJICAgIGVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgZXh0cHJvdHNwYWNpbmcsCi0JCSAgICBib29sIGJDaGFubmVsQ2hhbmdlLCBpbnQgKnN0YXR1cykKK2ludCBhdGg5a19od19yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCSAgICBib29sIGJDaGFubmVsQ2hhbmdlKQogewogCXUzMiBzYXZlTGVkU3RhdGU7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY3VyY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYWgtPmFoX3NjOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuID0gYWgtPmN1cmNoYW47CiAJdTMyIHNhdmVEZWZBbnRlbm5hOwogCXUzMiBtYWNTdGFJZDE7Ci0JaW50IGVjb2RlOwotCWludCBpLCByeF9jaGFpbm1hc2s7CisJaW50IGksIHJ4X2NoYWlubWFzaywgcjsKIAotCWFocC0+YWhfZXh0cHJvdHNwYWNpbmcgPSBleHRwcm90c3BhY2luZzsKLQlhaHAtPmFoX3R4Y2hhaW5tYXNrID0gdHhjaGFpbm1hc2s7Ci0JYWhwLT5haF9yeGNoYWlubWFzayA9IHJ4Y2hhaW5tYXNrOworCWFoLT5leHRwcm90c3BhY2luZyA9IHNjLT5odF9leHRwcm90c3BhY2luZzsKKwlhaC0+dHhjaGFpbm1hc2sgPSBzYy0+dHhfY2hhaW5tYXNrOworCWFoLT5yeGNoYWlubWFzayA9IHNjLT5yeF9jaGFpbm1hc2s7CiAKLQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgewotCQlhaHAtPmFoX3R4Y2hhaW5tYXNrICY9IDB4MzsKLQkJYWhwLT5haF9yeGNoYWlubWFzayAmPSAweDM7CisJaWYgKEFSX1NSRVZfOTI4NShhaCkpIHsKKwkJYWgtPnR4Y2hhaW5tYXNrICY9IDB4MTsKKwkJYWgtPnJ4Y2hhaW5tYXNrICY9IDB4MTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKKwkJYWgtPnR4Y2hhaW5tYXNrICY9IDB4MzsKKwkJYWgtPnJ4Y2hhaW5tYXNrICY9IDB4MzsKIAl9CiAKLQlpZiAoYXRoOWtfaHdfY2hlY2tfY2hhbihhaCwgY2hhbikgPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBubyBtYXBwaW5nXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJZWNvZGUgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKLQl9CisJaWYgKCFhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpKQorCQlyZXR1cm4gLUVJTzsKIAogCWlmIChjdXJjaGFuKQogCQlhdGg5a19od19nZXRuZihhaCwgY3VyY2hhbik7CiAKIAlpZiAoYkNoYW5uZWxDaGFuZ2UgJiYKLQkgICAgKGFocC0+YWhfY2hpcEZ1bGxTbGVlcCAhPSB0cnVlKSAmJgotCSAgICAoYWgtPmFoX2N1cmNoYW4gIT0gTlVMTCkgJiYKLQkgICAgKGNoYW4tPmNoYW5uZWwgIT0gYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwpICYmCisJICAgIChhaC0+Y2hpcF9mdWxsc2xlZXAgIT0gdHJ1ZSkgJiYKKwkgICAgKGFoLT5jdXJjaGFuICE9IE5VTEwpICYmCisJICAgIChjaGFuLT5jaGFubmVsICE9IGFoLT5jdXJjaGFuLT5jaGFubmVsKSAmJgogCSAgICAoKGNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQUxMKSA9PQotCSAgICAgKGFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FMTCkpICYmCisJICAgICAoYWgtPmN1cmNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQUxMKSkgJiYKIAkgICAgKCFBUl9TUkVWXzkyODAoYWgpIHx8ICghSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGNoYW4pICYmCi0JCQkJICAgIUlTX0NIQU5fQV81TUhaX1NQQUNFRChhaC0+YWhfY3VyY2hhbikpKSkgeworCQkJCSAgICFJU19DSEFOX0FfNU1IWl9TUEFDRUQoYWgtPmN1cmNoYW4pKSkpIHsKIAotCQlpZiAoYXRoOWtfaHdfY2hhbm5lbF9jaGFuZ2UoYWgsIGNoYW4sIG1hY21vZGUpKSB7Ci0JCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5haF9jdXJjaGFuKTsKKwkJaWYgKGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKGFoLCBjaGFuLCBzYy0+dHhfY2hhbl93aWR0aCkpIHsKKwkJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmN1cmNoYW4pOwogCQkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOwotCQkJcmV0dXJuIHRydWU7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIApAQCAtMjMxMSwyOCArMjIzOCwzMiBAQAogCiAJaWYgKCFhdGg5a19od19jaGlwX3Jlc2V0KGFoLCBjaGFuKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKLQkJZWNvZGUgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKLQkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAotCQkJICAgIEFSX0dQSU9fSlRBR19ESVNBQkxFKTsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLCBBUl9HUElPX0pUQUdfRElTQUJMRSk7CiAKLQkJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykpIHsKLQkJCWlmIChJU19DSEFOXzVHSFooY2hhbikpCi0JCQkJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIDksIDApOwotCQkJZWxzZQotCQkJCWF0aDlrX2h3X3NldF9ncGlvKGFoLCA5LCAxKTsKLQkJfQotCQlhdGg5a19od19jZmdfb3V0cHV0KGFoLCA5LCBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKLQl9CisJciA9IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKGFoLCBjaGFuLCBzYy0+dHhfY2hhbl93aWR0aCk7CisJaWYgKHIpCisJCXJldHVybiByOwogCi0JZWNvZGUgPSBhdGg5a19od19wcm9jZXNzX2luaShhaCwgY2hhbiwgbWFjbW9kZSk7Ci0JaWYgKGVjb2RlICE9IDApIHsKLQkJZWNvZGUgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDsKLQl9CisJLyogU2V0dXAgTUZQIG9wdGlvbnMgZm9yIENDTVAgKi8KKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgeworCQkvKiBNYXNrIFJldHJ5KGIxMSksIFB3ck1ndChiMTIpLCBNb3JlRGF0YShiMTMpIHRvIDAgaW4gbWdtdAorCQkgKiBmcmFtZXMgd2hlbiBjb25zdHJ1Y3RpbmcgQ0NNUCBBQUQuICovCisJCVJFR19STVdfRklFTEQoYWgsIEFSX0FFU19NVVRFX01BU0sxLCBBUl9BRVNfTVVURV9NQVNLMV9GQ19NR01ULAorCQkJICAgICAgMHhjN2ZmKTsKKwkJYWgtPnN3X21nbXRfY3J5cHRvID0gZmFsc2U7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7CisJCS8qIERpc2FibGUgaGFyZHdhcmUgY3J5cHRvIGZvciBtYW5hZ2VtZW50IGZyYW1lcyAqLworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTIsCisJCQkgICAgQVJfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BDVV9NSVNDX01PREUyLAorCQkJICAgIEFSX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUKTsKKwkJYWgtPnN3X21nbXRfY3J5cHRvID0gdHJ1ZTsKKwl9IGVsc2UKKwkJYWgtPnN3X21nbXRfY3J5cHRvID0gdHJ1ZTsKIAogCWlmIChJU19DSEFOX09GRE0oY2hhbikgfHwgSVNfQ0hBTl9IVChjaGFuKSkKIAkJYXRoOWtfaHdfc2V0X2RlbHRhX3Nsb3BlKGFoLCBjaGFuKTsKQEAgLTIzNDIsNjEgKzIyNzMsNTYgQEAKIAllbHNlCiAJCWF0aDlrX2h3X3NwdXJfbWl0aWdhdGUoYWgsIGNoYW4pOwogCi0JaWYgKCFhdGg5a19od19lZXByb21fc2V0X2JvYXJkX3ZhbHVlcyhhaCwgY2hhbikpIHsKKwlpZiAoIWFoLT5lZXBfb3BzLT5zZXRfYm9hcmRfdmFsdWVzKGFoLCBjaGFuKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCiAJCQkiZXJyb3Igc2V0dGluZyBib2FyZCBvcHRpb25zXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoYWgsIGNoYW4pOwogCi0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoYWhwLT5haF9tYWNhZGRyKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9tYWNhZGRyICsgNCkKKwlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaC0+bWFjYWRkcikpOworCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KGFoLT5tYWNhZGRyICsgNCkKIAkJICB8IG1hY1N0YUlkMQogCQkgIHwgQVJfU1RBX0lEMV9SVFNfVVNFX0RFRgotCQkgIHwgKGFoLT5haF9jb25maWcuCisJCSAgfCAoYWgtPmNvbmZpZy4KIAkJICAgICBhY2tfNm1iID8gQVJfU1RBX0lEMV9BQ0tDVFNfNk1CIDogMCkKLQkJICB8IGFocC0+YWhfc3RhSWQxRGVmYXVsdHMpOwotCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPmFoX29wbW9kZSk7CisJCSAgfCBhaC0+c3RhX2lkMV9kZWZhdWx0cyk7CisJYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKGFoLCBhaC0+b3Btb2RlKTsKIAotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7CisJUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShhaCwgQVJfQlNTTVNLVSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5ic3NpZG1hc2sgKyA0KSk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCBzYXZlRGVmQW50ZW5uYSk7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaHAtPmFoX2Jzc2lkKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZCArIDQpIHwKLQkJICAoKGFocC0+YWhfYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKHNjLT5jdXJic3NpZCkpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIAogCVJFR19XUklURShhaCwgQVJfSVNSLCB+MCk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JTU0lfVEhSLCBJTklUX1JTU0lfVEhSKTsKIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmICghKGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChhaCwgY2hhbikpKSB7Ci0JCQllY29kZSA9IC1FSU87Ci0JCQlnb3RvIGJhZDsKLQkJfQorCQlpZiAoIShhdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoYWgsIGNoYW4pKSkKKwkJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7Ci0JCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpIHsKLQkJCWVjb2RlID0gLUVJTzsKLQkJCWdvdG8gYmFkOwotCQl9CisJCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfTlVNX0RDVTsgaSsrKQogCQlSRUdfV1JJVEUoYWgsIEFSX0RRQ1VNQVNLKGkpLCAxIDw8IGkpOwogCi0JYWhwLT5haF9pbnRyVHhxcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBzLnRvdGFsX3F1ZXVlczsgaSsrKQorCWFoLT5pbnRyX3R4cXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhaC0+Y2Fwcy50b3RhbF9xdWV1ZXM7IGkrKykKIAkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBpKTsKIAotCWF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKGFoLCBhaC0+YWhfb3Btb2RlKTsKKwlhdGg5a19od19pbml0X2ludGVycnVwdF9tYXNrcyhhaCwgYWgtPm9wbW9kZSk7CiAJYXRoOWtfaHdfaW5pdF9xb3MoYWgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWlmIChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQlhdGg5a19lbmFibGVfcmZraWxsKGFoKTsKICNlbmRpZgogCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CkBAIC0yNDA4LDcgKzIzMzQsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9PQlMsIDgpOwogCi0JaWYgKGFocC0+YWhfaW50ck1pdGlnYXRpb24pIHsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikgewogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1JJTVQsIEFSX1JJTVRfTEFTVCwgNTAwKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9GSVJTVCwgMjAwMCk7CkBAIC0yNDE2LDEyICsyMzQyLDEwIEBACiAKIAlhdGg5a19od19pbml0X2JiKGFoLCBjaGFuKTsKIAotCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKXsKLQkJZWNvZGUgPSAtRUlPOzsKLQkJZ290byBiYWQ7Ci0JfQorCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKQorCQlyZXR1cm4gLUVJTzs7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IGFoLT5yeGNoYWlubWFzazsKIAlpZiAoKHJ4X2NoYWlubWFzayA9PSAweDUpIHx8IChyeF9jaGFpbm1hc2sgPT0gMHgzKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CkBAIC0yNDQ4LDIyICsyMzcyLDE4IEBACiAjZW5kaWYKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKLWJhZDoKLQlpZiAoc3RhdHVzKQotCQkqc3RhdHVzID0gZWNvZGU7Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWJvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleXJlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpCiB7CiAJdTMyIGtleVR5cGU7CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNDkwLDE3ICsyNDEwLDE3IEBACiAKIAl9CiAKLQlpZiAoYWgtPmFoX2N1cmNoYW4gPT0gTlVMTCkKKwlpZiAoYWgtPmN1cmNoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpCitib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKQogewogCXUzMiBtYWNIaSwgbWFjTG87CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNTI0LDE3ICsyNDQ0LDEzIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGVudHJ5LAorYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKIAkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSkKKwkJCQkgY29uc3QgdTggKm1hYykKIHsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJdTMyIGtleTAsIGtleTEsIGtleTIsIGtleTMsIGtleTQ7CiAJdTMyIGtleVR5cGU7Ci0JdTMyIHhvck1hc2sgPSB4b3JLZXkgPwotCQkoQVRIOUtfS0VZX1hPUiA8PCAyNCB8IEFUSDlLX0tFWV9YT1IgPDwgMTYgfCBBVEg5S19LRVlfWE9SIDw8IDgKLQkJIHwgQVRIOUtfS0VZX1hPUikgOiAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoZW50cnkgPj0gcENhcC0+a2V5Y2FjaGVfc2l6ZSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19LRVlDQUNIRSwKQEAgLTI1NTAsNyArMjQ2Niw3IEBACiAJCWlmICghKHBDYXAtPmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0lQSEVSX0FFU0NDTSkpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJCSJBRVMtQ0NNIG5vdCBzdXBwb3J0ZWQgYnkgbWFjIHJldiAweCV4XG4iLAotCQkJCWFoLT5haF9tYWNSZXYpOworCQkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJa2V5VHlwZSA9IEFSX0tFWVRBQkxFX1RZUEVfQ0NNOwpAQCAtMjU4NiwyNiArMjUwMiw1NyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0Ja2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKSBeIHhvck1hc2s7Ci0Ja2V5MSA9IChnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdmFsICsgNCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXkyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDYpIF4geG9yTWFzazsKLQlrZXkzID0gKGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXk0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDEyKSBeIHhvck1hc2s7CisJa2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKTsKKwlrZXkxID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3ZhbCArIDQpOworCWtleTIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdmFsICsgNik7CisJa2V5MyA9IGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCk7CisJa2V5NCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAxMik7CiAJaWYgKGstPmt2X2xlbiA8PSBMRU5fV0VQMTA0KQogCQlrZXk0ICY9IDB4ZmY7CiAKKwkvKgorCSAqIE5vdGU6IEtleSBjYWNoZSByZWdpc3RlcnMgYWNjZXNzIHNwZWNpYWwgbWVtb3J5IGFyZWEgdGhhdCByZXF1aXJlcworCSAqIHR3byAzMi1iaXQgd3JpdGVzIHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgdmFsdWVzIGluIHRoZSBpbnRlcm5hbAorCSAqIG1lbW9yeS4gQ29uc2VxdWVudGx5LCB0aGUgZXhhY3Qgb3JkZXIgYW5kIHBhaXJzIHVzZWQgaGVyZSBtdXN0IGJlCisJICogbWFpbnRhaW5lZC4KKwkgKi8KKwogCWlmIChrZXlUeXBlID09IEFSX0tFWVRBQkxFX1RZUEVfVEtJUCAmJiBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkpIHsKIAkJdTE2IG1pY2VudHJ5ID0gZW50cnkgKyA2NDsKIAorCQkvKgorCQkgKiBXcml0ZSBpbnZlcnRlZCBrZXlbNDc6MF0gZmlyc3QgdG8gYXZvaWQgTWljaGFlbCBNSUMgZXJyb3JzCisJCSAqIG9uIGZyYW1lcyB0aGF0IGNvdWxkIGJlIHNlbnQgb3IgcmVjZWl2ZWQgYXQgdGhlIHNhbWUgdGltZS4KKwkJICogVGhlIGNvcnJlY3Qga2V5IHdpbGwgYmUgd3JpdHRlbiBpbiB0aGUgZW5kIG9uY2UgZXZlcnl0aGluZworCQkgKiBlbHNlIGlzIHJlYWR5LgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwgfmtleTApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCB+a2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKKworCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCi0JCWlmIChhaHAtPmFoX21pc2NNb2RlICYgQVJfUENVX01JQ19ORVdfTE9DX0VOQSkgeworCQlpZiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpIHsKKwkJCS8qCisJCQkgKiBUS0lQIHVzZXMgdHdvIGtleSBjYWNoZSBlbnRyaWVzOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkKKwkJCSAqIChpZHggPSBtYWluIGluZGV4ICsgNjQpOgorCQkJICoga2V5MCBbMzE6MF0gPSBSWCBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFsxNTowXSA9IFRYIGtleSBbMzE6MTZdCisJCQkgKiBrZXkxIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5MiBbMzE6MF0gPSBSWCBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMTU6MF0gPSBUWCBrZXkgWzE1OjBdCisJCQkgKiBrZXkzIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSBUWCBrZXkgWzYzOjMyXQorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMSwgbWljMiwgbWljMywgbWljNDsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKQEAgLTI2MTMsNTEgKzI1NjAsOTAgQEAKIAkJCW1pYzEgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAyKSAmIDB4ZmZmZjsKIAkJCW1pYzMgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAwKSAmIDB4ZmZmZjsKIAkJCW1pYzQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdHhtaWMgKyA0KTsKKworCQkJLyogV3JpdGUgUlhbMzE6MF0gYW5kIFRYWzMxOjE2XSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKG1pY2VudHJ5KSwgbWljMCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEobWljZW50cnkpLCBtaWMxKTsKKworCQkJLyogV3JpdGUgUlhbNjM6MzJdIGFuZCBUWFsxNTowXSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKG1pY2VudHJ5KSwgbWljMik7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMobWljZW50cnkpLCBtaWMzKTsKKworCQkJLyogV3JpdGUgVFhbNjM6MzJdIGFuZCBrZXlUeXBlKHJlc2VydmVkKSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgbWljNCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOwogCiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVEtJUCB1c2VzIGZvdXIga2V5IGNhY2hlIGVudHJpZXMgKHR3byBmb3IgZ3JvdXAKKwkJCSAqIGtleXMpOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBhcmUgaW4gZGlmZmVyZW50IGtleSBjYWNoZQorCQkJICogZW50cmllcyAoaWR4ID0gbWFpbiBpbmRleCArIDY0IGZvciBUWCBhbmQKKwkJCSAqIG1haW4gaW5kZXggKyAzMiArIDk2IGZvciBSWCk6CisJCQkgKiBrZXkwIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFszMTowXSA9IHJlc2VydmVkCisJCQkgKiBrZXkyIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoKKwkJCSAqIFVwcGVyIGxheWVyIGNvZGUgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gc2VwYXJhdGVseQorCQkJICogZm9yIFRYIGFuZCBSWCBrZXlzIHdoZW4gdGhlc2UgcmVnaXN0ZXJzIG9mZnNldHMgYXJlCisJCQkgKiB1c2VkLgorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMjsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKIAkJCW1pYzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgNCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbMzE6MF0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgMCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbNjM6MzJdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIobWljZW50cnkpLCBtaWMyKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMyhtaWNlbnRyeSksIDApOworCisJCQkvKiBXcml0ZSBUWFs2MzozMl0gYW5kIGtleVR5cGUocmVzZXJ2ZWQpICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTQobWljZW50cnkpLCAwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShtaWNlbnRyeSksCiAJCQkJICBBUl9LRVlUQUJMRV9UWVBFX0NMUik7CiAJCX0KKworCQkvKiBNQUMgYWRkcmVzcyByZWdpc3RlcnMgYXJlIHJlc2VydmVkIGZvciB0aGUgTUlDIGVudHJ5ICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMChtaWNlbnRyeSksIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzEobWljZW50cnkpLCAwKTsKKworCQkvKgorCQkgKiBXcml0ZSB0aGUgY29ycmVjdCAodW4taW52ZXJ0ZWQpIGtleVs0NzowXSBsYXN0IHRvIGVuYWJsZQorCQkgKiBUS0lQIG5vdyB0aGF0IGFsbCBvdGhlciByZWdpc3RlcnMgYXJlIHNldCB3aXRoIGNvcnJlY3QKKwkJICogdmFsdWVzLgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwga2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIGtleTEpOwogCX0gZWxzZSB7CisJCS8qIFdyaXRlIGtleVs0NzowXSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCBrZXkwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwga2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKIAorCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCX0KIAotCWlmIChhaC0+YWhfY3VyY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gdHJ1ZTsKLQogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSkKIHsKLQlpZiAoZW50cnkgPCBhaC0+YWhfY2Fwcy5rZXljYWNoZV9zaXplKSB7CisJaWYgKGVudHJ5IDwgYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZSkgewogCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX0tFWVRBQkxFX01BQzEoZW50cnkpKTsKIAkJaWYgKHZhbCAmIEFSX0tFWVRBQkxFX1ZBTElEKQogCQkJcmV0dXJuIHRydWU7CkBAIC0yNjY5LDcgKzI2NTUsNyBAQAogLyogUG93ZXIgTWFuYWdlbWVudCAoQ2hpcHNldCkgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX3NldF9wb3dlcl9zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgc2V0Q2hpcCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfU1RBX0lEMSwgQVJfU1RBX0lEMV9QV1JfU0FWKTsKIAlpZiAoc2V0Q2hpcCkgewpAQCAtMjY3OCwxNiArMjY2NCwxNiBAQAogCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCBBUl9SQ19BSEIgfCBBUl9SQ19IT1NUSUYpOwogCi0JCVJFR19DTFJfQklUKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwKKwkJUkVHX0NMUl9CSVQoYWgsIChBUl9SVENfUkVTRVQpLAogCQkJICAgIEFSX1JUQ19SRVNFVF9FTik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX25ldHdvcmtfc2xlZXAoc3RydWN0IGF0aF9odyAqYWgsIGludCBzZXRDaGlwKQogewogCVJFR19TRVRfQklUKGFoLCBBUl9TVEFfSUQxLCBBUl9TVEFfSUQxX1BXUl9TQVYpOwogCWlmIChzZXRDaGlwKSB7Ci0JCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAKIAkJaWYgKCEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLApAQCAtMjY5OSw4ICsyNjg1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBpbnQgc2V0Q2hpcCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHNldENoaXApCiB7CiAJdTMyIHZhbDsKIAlpbnQgaTsKQEAgLTI3NDEsMjAgKzI3MjYsMTggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSkKK2Jvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJaW50IHN0YXR1cyA9IHRydWUsIHNldENoaXAgPSB0cnVlOwogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rlc1tdID0gewogCQkiQVdBS0UiLAogCQkiRlVMTC1TTEVFUCIsCiAJCSJORVRXT1JLIFNMRUVQIiwKIAkJIlVOREVGSU5FRCIKIAl9OwotCWludCBzdGF0dXMgPSB0cnVlLCBzZXRDaGlwID0gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsICIlcyAtPiAlcyAoJXMpXG4iLAotCQltb2Rlc1thaHAtPmFoX3Bvd2VyTW9kZV0sIG1vZGVzW21vZGVdLAorCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdLAogCQlzZXRDaGlwID8gInNldCBjaGlwICIgOiAiIik7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTI3NjMsNyArMjc0Niw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfUE1fRlVMTF9TTEVFUDoKIAkJYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKGFoLCBzZXRDaGlwKTsKLQkJYWhwLT5haF9jaGlwRnVsbFNsZWVwID0gdHJ1ZTsKKwkJYWgtPmNoaXBfZnVsbHNsZWVwID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19QTV9ORVRXT1JLX1NMRUVQOgogCQlhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChhaCwgc2V0Q2hpcCk7CkBAIC0yNzczLDQxICsyNzU2LDU3IEBACiAJCQkiVW5rbm93biBwb3dlciBtb2RlICV1XG4iLCBtb2RlKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlhaHAtPmFoX3Bvd2VyTW9kZSA9IG1vZGU7CisJYWgtPnBvd2VyX21vZGUgPSBtb2RlOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSkKKy8qCisgKiBIZWxwZXIgZm9yIEFTUE0gc3VwcG9ydC4KKyAqCisgKiBEaXNhYmxlIFBMTCB3aGVuIGluIEwwcyBhcyB3ZWxsIGFzIHJlY2VpdmVyIGNsb2NrIHdoZW4gaW4gTDEuCisgKiBUaGlzIHBvd2VyIHNhdmluZyBvcHRpb24gbXVzdCBiZSBlbmFibGVkIHRocm91Z2ggdGhlIFNlckRlcy4KKyAqCisgKiBQcm9ncmFtbWluZyB0aGUgU2VyRGVzIG11c3QgZ28gdGhyb3VnaCB0aGUgc2FtZSAyODggYml0IHNlcmlhbCBzaGlmdAorICogcmVnaXN0ZXIgYXMgdGhlIG90aGVyIGFuYWxvZyByZWdpc3RlcnMuICBIZW5jZSB0aGUgOSB3cml0ZXMuCisgKi8KK3ZvaWQgYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcmVzdG9yZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXU4IGk7CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcyAhPSB0cnVlKQorCWlmIChhaC0+aXNfcGNpZXhwcmVzcyAhPSB0cnVlKQogCQlyZXR1cm47CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPT0gMikKKwkvKiBEbyBub3QgdG91Y2ggU2VyRGVzIHJlZ2lzdGVycyAqLworCWlmIChhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9PSAyKQogCQlyZXR1cm47CiAKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIHJlc3RvcmUgZm9yIDExTiAqLwogCWlmIChyZXN0b3JlKQogCQlyZXR1cm47CiAKIAlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlQY2llU2VyZGVzLmlhX3Jvd3M7IGkrKykgewotCQkJUkVHX1dSSVRFKGFoLCBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMCksCi0JCQkJICBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMSkpOworCQkvKgorCQkgKiBBUjkyODAgMi4wIG9yIGxhdGVyIGNoaXBzIHVzZSBTZXJEZXMgdmFsdWVzIGZyb20gdGhlCisJCSAqIGluaXR2YWxzLmggaW5pdGlhbGl6ZWQgZGVwZW5kaW5nIG9uIGNoaXBzZXQgZHVyaW5nCisJCSAqIGF0aDlrX2h3X2RvX2F0dGFjaCgpCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaVBjaWVTZXJkZXMuaWFfcm93czsgaSsrKSB7CisJCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgmYWgtPmluaVBjaWVTZXJkZXMsIGksIDApLAorCQkJCSAgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlcywgaSwgMSkpOwogCQl9Ci0JCXVkZWxheSgxMDAwKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkgJiYKLQkJICAgKGFoLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzEwKSkgeworCQkgICAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmQwMCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjQ5MjQ5MjQpOwogCisJCS8qIFJYIHNodXQgb2ZmIHdoZW4gZWxlY2lkbGUgaXMgYXNzZXJ0ZWQgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhhODAwMDAxOSk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MTMxNjA4MjApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGU1OTgwNTYwKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkKKwkJLyogU2h1dCBvZmYgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLworCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkKIAkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4NDAxZGVmZmMpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDQwMWRlZmZkKTsKQEAgLTI4MTYsNDIgKzI4MTUsNTkgQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhiZTEwNTU1NCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAwNDMwMDcpOwogCisJCS8qIExvYWQgdGhlIG5ldyBzZXR0aW5ncyAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiAKLQkJdWRlbGF5KDEwMDApOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZjMDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDI0OTI0OTI0KTsKKworCQkvKiBSWCBzaHV0IG9mZiB3aGVuIGVsZWNpZGxlIGlzIGFzc2VydGVkICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjgwMDAwMzkpOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDUzMTYwODI0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhlNTk4MDU3OSk7CisKKwkJLyoKKwkJICogSWdub3JlIGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEgc2V0dGluZyBmb3IKKwkJICogcHJlLUFSOTI4MCAxMW4KKwkJICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAxZGVmZmYpOworCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MWFhYWJlNDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGJlMTA1NTU0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgwMDBlMzAwNyk7CisKKwkJLyogTG9hZCB0aGUgbmV3IHNldHRpbmdzICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMyLCAweDAwMDAwMDAwKTsKIAl9CiAKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiBzZXQgYml0IDE5IHRvIGFsbG93IGZvcmNpbmcgb2YgcGNpZSBjb3JlIGludG8gTDEgc3RhdGUgKi8KIAlSRUdfU0VUX0JJVChhaCwgQVJfUENJRV9QTV9DVFJMLCBBUl9QQ0lFX1BNX0NUUkxfRU5BKTsKIAotCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfd2FlbikgewotCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+YWhfY29uZmlnLnBjaWVfd2Flbik7CisJLyogU2V2ZXJhbCBQQ0llIG1hc3NhZ2VzIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3VyICovCisJaWYgKGFoLT5jb25maWcucGNpZV93YWVuKSB7CisJCVJFR19XUklURShhaCwgQVJfV0EsIGFoLT5jb25maWcucGNpZV93YWVuKTsKIAl9IGVsc2UgewogCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKIAkJCVJFR19XUklURShhaCwgQVJfV0EsIEFSOTI4NV9XQV9ERUZBVUxUKTsKKwkJLyoKKwkJICogT24gQVI5MjgwIGNoaXBzIGJpdCAyMiBvZiAweDQwMDQgbmVlZHMgdG8gYmUgc2V0IHRvCisJCSAqIG90aGVyd2lzZSBjYXJkIG1heSBkaXNhcHBlYXIuCisJCSAqLwogCQllbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpKQogCQkJUkVHX1dSSVRFKGFoLCBBUl9XQSwgQVI5MjgwX1dBX0RFRkFVTFQpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBBUl9XQV9ERUZBVUxUKTsKIAl9Ci0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIGhvc3RfaXNyOwogCkBAIC0yODcwLDE0ICsyODg2LDEzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpCitib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgKm1hc2tlZCkKIHsKIAl1MzIgaXNyID0gMDsKIAl1MzIgbWFzazIgPSAwOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAl1MzIgc3luY19jYXVzZSA9IDA7CiAJYm9vbCBmYXRhbF9pbnQgPSBmYWxzZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CiAJCWlmIChSRUdfUkVBRChhaCwgQVJfSU5UUl9BU1lOQ19DQVVTRSkgJiBBUl9JTlRSX01BQ19JUlEpIHsKQEAgLTI5MTUsNiArMjkzMCw4IEBACiAJCQkJbWFzazIgfD0gQVRIOUtfSU5UX0dUVDsKIAkJCWlmIChpc3IyICYgQVJfSVNSX1MyX0NTVCkKIAkJCQltYXNrMiB8PSBBVEg5S19JTlRfQ1NUOworCQkJaWYgKGlzcjIgJiBBUl9JU1JfUzJfVFNGT09SKQorCQkJCW1hc2syIHw9IEFUSDlLX0lOVF9UU0ZPT1I7CiAJCX0KIAogCQlpc3IgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1JBQyk7CkBAIC0yOTI1LDcgKzI5NDIsNyBAQAogCiAJCSptYXNrZWQgPSBpc3IgJiBBVEg5S19JTlRfQ09NTU9OOwogCi0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKSB7CisJCWlmIChhaC0+aW50cl9taXRpZ2F0aW9uKSB7CiAJCQlpZiAoaXNyICYgKEFSX0lTUl9SWE1JTlRSIHwgQVJfSVNSX1JYSU5UTSkpCiAJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7CiAJCX0KQEAgLTI5NDAsMTIgKzI5NTcsMTIgQEAKIAkJCSptYXNrZWQgfD0gQVRIOUtfSU5UX1RYOwogCiAJCQlzMF9zID0gUkVHX1JFQUQoYWgsIEFSX0lTUl9TMF9TKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWE9LKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWERFU0MpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYT0spOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYREVTQyk7CiAKIAkJCXMxX3MgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1MxX1MpOwotCQkJYWhwLT5haF9pbnRyVHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRVJSKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczFfcywgQVJfSVNSX1MxX1FDVV9UWEVPTCk7CisJCQlhaC0+aW50cl90eHFzIHw9IE1TKHMxX3MsIEFSX0lTUl9TMV9RQ1VfVFhFUlIpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRU9MKTsKIAkJfQogCiAJCWlmIChpc3IgJiBBUl9JU1JfUlhPUk4pIHsKQEAgLTMwMDIsMTcgKzMwMTksMTYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitlbnVtIGF0aDlrX2ludCBhdGg5a19od19pbnRyZ2V0KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXJldHVybiBBSDU0MTYoYWgpLT5haF9tYXNrUmVnOworCXJldHVybiBhaC0+bWFza19yZWc7CiB9CiAKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19pbnQgaW50cykKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0JdTMyIG9tYXNrID0gYWhwLT5haF9tYXNrUmVnOworCXUzMiBvbWFzayA9IGFoLT5tYXNrX3JlZzsKIAl1MzIgbWFzaywgbWFzazI7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfSU5URVJSVVBULCAiMHgleCA9PiAweCV4XG4iLCBvbWFzaywgaW50cyk7CiAKQEAgLTMwMzMsMTggKzMwNDksMTggQEAKIAltYXNrMiA9IDA7CiAKIAlpZiAoaW50cyAmIEFUSDlLX0lOVF9UWCkgewotCQlpZiAoYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eG9rX2ludGVycnVwdF9tYXNrKQogCQkJbWFzayB8PSBBUl9JTVJfVFhPSzsKLQkJaWYgKGFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGRlc2NfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWERFU0M7Ci0JCWlmIChhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaykKIAkJCW1hc2sgfD0gQVJfSU1SX1RYRVJSOwotCQlpZiAoYWhwLT5haF90eEVvbEludGVycnVwdE1hc2spCisJCWlmIChhaC0+dHhlb2xfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWEVPTDsKIAl9CiAJaWYgKGludHMgJiBBVEg5S19JTlRfUlgpIHsKIAkJbWFzayB8PSBBUl9JTVJfUlhFUlI7Ci0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKQorCQlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKIAkJCW1hc2sgfD0gQVJfSU1SX1JYTUlOVFIgfCBBUl9JTVJfUlhJTlRNOwogCQllbHNlCiAJCQltYXNrIHw9IEFSX0lNUl9SWE9LIHwgQVJfSU1SX1JYREVTQzsKQEAgLTMwNjEsNyArMzA3Nyw5IEBACiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX0RUSU1TWU5DKQogCQkJbWFzazIgfD0gQVJfSU1SX1MyX0RUSU1TWU5DOwogCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9DQUJFTkQpCi0JCQltYXNrMiB8PSAoQVJfSU1SX1MyX0NBQkVORCk7CisJCQltYXNrMiB8PSBBUl9JTVJfUzJfQ0FCRU5EOworCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9UU0ZPT1IpCisJCQltYXNrMiB8PSBBUl9JTVJfUzJfVFNGT09SOwogCX0KIAogCWlmIChpbnRzICYgKEFUSDlLX0lOVF9HVFQgfCBBVEg5S19JTlRfQ1NUKSkgewpAQCAtMzA4Miw3ICszMTAwLDcgQEAKIAkJCQkJICAgQVJfSU1SX1MyX1RTRk9PUiB8CiAJCQkJCSAgIEFSX0lNUl9TMl9HVFQgfCBBUl9JTVJfUzJfQ1NUKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lNUl9TMiwgbWFzayB8IG1hc2syKTsKLQlhaHAtPmFoX21hc2tSZWcgPSBpbnRzOworCWFoLT5tYXNrX3JlZyA9IGludHM7CiAKIAlpZiAoIShwQ2FwLT5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpIHsKIAkJaWYgKGludHMgJiBBVEg5S19JTlRfVElNX1RJTUVSKQpAQCAtMzExNiwxNCArMzEzNCwxMyBAQAogLyogQmVhY29uIEhhbmRsaW5nICovCiAvKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKK3ZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBmbGFncyA9IDA7CiAKLQlhaHAtPmFoX2JlYWNvbkludGVydmFsID0gYmVhY29uX3BlcmlvZDsKKwlhaC0+YmVhY29uX2ludGVydmFsID0gYmVhY29uX3BlcmlvZDsKIAotCXN3aXRjaCAoYWgtPmFoX29wbW9kZSkgeworCXN3aXRjaCAoYWgtPm9wbW9kZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKG5leHRfYmVhY29uKSk7CkBAIC0zMTM2LDE4ICszMTUzLDE4IEBACiAJCQkgICAgQVJfVFhDRkdfQURIT0NfQkVBQ09OX0FUSU1fVFhfUE9MSUNZKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX05EUF9USU1FUiwKIAkJCSAgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbiArCi0JCQkJICAgICAoYWhwLT5haF9hdGltV2luZG93ID8gYWhwLT4KLQkJCQkgICAgICBhaF9hdGltV2luZG93IDogMSkpKTsKKwkJCQkgICAgIChhaC0+YXRpbV93aW5kb3cgPyBhaC0+CisJCQkJICAgICAgYXRpbV93aW5kb3cgOiAxKSkpOwogCQlmbGFncyB8PSBBUl9ORFBfVElNRVJfRU47CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIFRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBkbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1NXQkEsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBzd19iZWFjb25fcmVzcG9uc2VfdGltZSkpOwogCQlmbGFncyB8PQogCQkJQVJfVEJUVF9USU1FUl9FTiB8IEFSX0RCQV9USU1FUl9FTiB8IEFSX1NXQkFfVElNRVJfRU47CkBAIC0zMTU1LDcgKzMxNzIsNyBAQAogCWRlZmF1bHQ6CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0JFQUNPTiwKIAkJCSIlczogdW5zdXBwb3J0ZWQgb3Btb2RlOiAlZFxuIiwKLQkJCV9fZnVuY19fLCBhaC0+YWhfb3Btb2RlKTsKKwkJCV9fZnVuY19fLCBhaC0+b3Btb2RlKTsKIAkJcmV0dXJuOwogCQlicmVhazsKIAl9CkBAIC0zMTc0LDExICszMTkxLDExIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX1RJTUVSX01PREUsIGZsYWdzKTsKIH0KIAotdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKQogewogCXUzMiBuZXh0VGJ0dCwgYmVhY29uaW50dmFsLCBkdGltcGVyaW9kLCBiZWFjb250aW1lb3V0OwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKGJzLT5ic19uZXh0dGJ0dCkpOwogCkBAIC0zMjMyLDQzICszMjQ5LDQ2IEBACiAJCSAgICBBUl9UQlRUX1RJTUVSX0VOIHwgQVJfVElNX1RJTUVSX0VOIHwKIAkJICAgIEFSX0RUSU1fVElNRVJfRU4pOwogCisJLyogVFNGIE91dCBvZiBSYW5nZSBUaHJlc2hvbGQgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX1RTRk9PUl9USFJFU0hPTEQsIGJzLT5ic190c2Zvb3JfdGhyZXNob2xkKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKiovCiAvKiBIVyBDYXBhYmlsaXRpZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXUxNiBjYXBGaWVsZCA9IDAsIGVldmFsOwogCi0JZWV2YWwgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMCk7CisJYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9IGVldmFsOwogCi0JYWgtPmFoX2N1cnJlbnRSRCA9IGVldmFsOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7CisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCWVldmFsIHw9IEFSOTI4NV9SREVYVF9ERUZBVUxUOworCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7Ci0JYWgtPmFoX2N1cnJlbnRSREV4dCA9IGVldmFsOworCWNhcEZpZWxkID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PUF9DQVApOwogCi0JY2FwRmllbGQgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKLQotCWlmIChhaC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9zdWJ2ZW5kb3JpZCA9PSBBUl9TVUJWRU5ET1JfSURfTkVXX0EpIHsKLQkJaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg2NCB8fCBhaC0+YWhfY3VycmVudFJEID09IDB4NjUpCi0JCQlhaC0+YWhfY3VycmVudFJEICs9IDU7Ci0JCWVsc2UgaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg0MSkKLQkJCWFoLT5haF9jdXJyZW50UkQgPSAweDQzOworCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgeworCQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9PSAweDY0IHx8CisJCSAgICBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID09IDB4NjUpCisJCQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkICs9IDU7CisJCWVsc2UgaWYgKGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPT0gMHg0MSkKKwkJCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSAweDQzOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgYWgtPmFoX2N1cnJlbnRSRCk7CisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkKTsKIAl9CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PUF9NT0RFKTsKKwllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CiAJYml0bWFwX3plcm8ocENhcC0+d2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsKIAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFBLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7Ci0JCWlmIChhaC0+YWhfY29uZmlnLmh0X2VuYWJsZSkgeworCQlpZiAoYWgtPmNvbmZpZy5odF9lbmFibGUpIHsKIAkJCWlmICghKGVldmFsICYgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwKSkKIAkJCQlzZXRfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLAogCQkJCQlwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CkBAIC0zMjg0LDcgKzMzMDQsNyBAQAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExRykgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFCLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CiAJCXNldF9iaXQoQVRIOUtfTU9ERV8xMUcsIHBDYXAtPndpcmVsZXNzX21vZGVzKTsKLQkJaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKSB7CisJCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkgewogCQkJaWYgKCEoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjApKQogCQkJCXNldF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsCiAJCQkJCXBDYXAtPndpcmVsZXNzX21vZGVzKTsKQEAgLTMyOTcsMTggKzMzMTcsMTUgQEAKIAkJfQogCX0KIAotCXBDYXAtPnR4X2NoYWlubWFzayA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKLQlpZiAoKGFoLT5haF9pc1BjaUV4cHJlc3MpCi0JICAgIHx8IChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkpIHsKLQkJcENhcC0+cnhfY2hhaW5tYXNrID0KLQkJCWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKLQl9IGVsc2UgewotCQlwQ2FwLT5yeF9jaGFpbm1hc2sgPQotCQkJKGF0aDlrX2h3X2dwaW9fZ2V0KGFoLCAwKSkgPyAweDUgOiAweDc7Ci0JfQorCXBDYXAtPnR4X2NoYWlubWFzayA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhfTUFTSyk7CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjU0MTZfREVWSURfUENJKSAmJgorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSkKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OworCWVsc2UKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAotCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5haF9tYWNSZXYgPT0gMCkpKQotCQlhaHAtPmFoX21pc2NNb2RlIHw9IEFSX1BDVV9NSUNfTkVXX0xPQ19FTkE7CisJaWYgKCEoQVJfU1JFVl85MjgwKGFoKSAmJiAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IDApKSkKKwkJYWgtPm1pc2NfbW9kZSB8PSBBUl9QQ1VfTUlDX05FV19MT0NfRU5BOwogCiAJcENhcC0+bG93XzJnaHpfY2hhbiA9IDIzMTI7CiAJcENhcC0+aGlnaF8yZ2h6X2NoYW4gPSAyNzMyOwpAQCAtMzMyNiw3ICszMzQzLDcgQEAKIAogCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0NIQU5fU1BSRUFEOwogCi0JaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKQorCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfSFQ7CiAJZWxzZQogCQlwQ2FwLT5od19jYXBzICY9IH5BVEg5S19IV19DQVBfSFQ7CkBAIC0zMzUyLDcgKzMzNjksOSBAQAogCXBDYXAtPm51bV9tcl9yZXRyaWVzID0gNDsKIAlwQ2FwLT50eF90cmlnbGV2ZWxfbWF4ID0gTUFYX1RYX0ZJRk9fVEhSRVNIT0xEOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUjkyODVfTlVNX0dQSU87CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSOTI4WF9OVU1fR1BJTzsKIAllbHNlCiAJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUl9OVU1fR1BJTzsKQEAgLTMzNzUsMjIgKzMzOTQsMjIgQEAKIAlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWFoLT5haF9yZnNpbGVudCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRl9TSUxFTlQpOwotCWlmIChhaC0+YWhfcmZzaWxlbnQgJiBFRVBfUkZTSUxFTlRfRU5BQkxFRCkgewotCQlhaC0+YWhfcmZraWxsX2dwaW8gPQotCQkJTVMoYWgtPmFoX3Jmc2lsZW50LCBFRVBfUkZTSUxFTlRfR1BJT19TRUwpOwotCQlhaC0+YWhfcmZraWxsX3BvbGFyaXR5ID0KLQkJCU1TKGFoLT5haF9yZnNpbGVudCwgRUVQX1JGU0lMRU5UX1BPTEFSSVRZKTsKKwlhaC0+cmZzaWxlbnQgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JGX1NJTEVOVCk7CisJaWYgKGFoLT5yZnNpbGVudCAmIEVFUF9SRlNJTEVOVF9FTkFCTEVEKSB7CisJCWFoLT5yZmtpbGxfZ3BpbyA9CisJCQlNUyhhaC0+cmZzaWxlbnQsIEVFUF9SRlNJTEVOVF9HUElPX1NFTCk7CisJCWFoLT5yZmtpbGxfcG9sYXJpdHkgPQorCQkJTVMoYWgtPnJmc2lsZW50LCBFRVBfUkZTSUxFTlRfUE9MQVJJVFkpOwogCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1JGU0lMRU5UOwogCX0KICNlbmRpZgogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkgfHwKLQkgICAgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKwlpZiAoKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgfHwKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApIHx8CisJICAgIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKIAkJcENhcC0+aHdfY2FwcyAmPSB+QVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKIAllbHNlCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKQEAgLTM0MDAsNyArMzQxOSw3IEBACiAJZWxzZQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUzsKIAotCWlmIChhaC0+YWhfY3VycmVudFJERXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgeworCWlmIChhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCAmICgxIDw8IFJFR19FWFRfSkFQQU5fTUlEQkFORCkpIHsKIAkJcENhcC0+cmVnX2NhcCA9CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSB8CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiB8CkBAIC0zNDE1LDE5ICszNDM0LDIyIEBACiAJcENhcC0+cmVnX2NhcCB8PSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQ7CiAKIAlwQ2FwLT5udW1fYW50Y2ZnXzVnaHogPQotCQlhdGg5a19od19nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CisJCWFoLT5lZXBfb3BzLT5nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CiAJcENhcC0+bnVtX2FudGNmZ18yZ2h6ID0KLQkJYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCQlhaC0+ZWVwX29wcy0+Z2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgYnRjb2V4X2VuYWJsZSkgeworCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9CVF9DT0VYOworCQlhaC0+YnRhY3RpdmVfZ3BpbyA9IDY7CisJCWFoLT53bGFuYWN0aXZlX2dwaW8gPSA1OworCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19nZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgKnJlc3VsdCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFUSDlLX0NBUF9DSVBIRVI6CiAJCXN3aXRjaCAoY2FwYWJpbGl0eSkgewpAQCAtMzQ0NiwyMyArMzQ2OCwxNyBAQAogCQljYXNlIDA6CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJY2FzZSAxOgotCQkJcmV0dXJuIChhaHAtPmFoX3N0YUlkMURlZmF1bHRzICYKKwkJCXJldHVybiAoYWgtPnN0YV9pZDFfZGVmYXVsdHMgJgogCQkJCUFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKSA/IHRydWUgOgogCQkJZmFsc2U7CiAJCX0KIAljYXNlIEFUSDlLX0NBUF9US0lQX1NQTElUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfTUlDX05FV19MT0NfRU5BKSA/CisJCXJldHVybiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpID8KIAkJCWZhbHNlIDogdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9XTUVfVEtJUE1JQzoKLQkJcmV0dXJuIDA7Ci0JY2FzZSBBVEg5S19DQVBfUEhZQ09VTlRFUlM6Ci0JCXJldHVybiBhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMgPyAwIDogLUVOWElPOwogCWNhc2UgQVRIOUtfQ0FQX0RJVkVSU0lUWToKIAkJcmV0dXJuIChSRUdfUkVBRChhaCwgQVJfUEhZX0NDS19ERVRFQ1QpICYKIAkJCUFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpID8KIAkJCXRydWUgOiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9QSFlESUFHOgotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNIOgogCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKIAkJY2FzZSAwOgpAQCAtMzQ3MSw1NyArMzQ4Nyw0OCBAQAogCQkJaWYgKFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKSAmIEFSX1NUQV9JRDFfQURIT0MpIHsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9IGVsc2UgewotCQkJCXJldHVybiAoYWhwLT5haF9zdGFJZDFEZWZhdWx0cyAmCisJCQkJcmV0dXJuIChhaC0+c3RhX2lkMV9kZWZhdWx0cyAmCiAJCQkJCUFSX1NUQV9JRDFfTUNBU1RfS1NSQ0gpID8gdHJ1ZSA6CiAJCQkJCWZhbHNlOwogCQkJfQogCQl9CiAJCXJldHVybiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfVFhfQUREX1RTRikgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX1JGU0lMRU5UOgotCQlpZiAoY2FwYWJpbGl0eSA9PSAzKQotCQkJcmV0dXJuIGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX0FOVF9DRkdfMkdIWjoKLQkJKnJlc3VsdCA9IHBDYXAtPm51bV9hbnRjZmdfMmdoejsKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfQU5UX0NGR181R0haOgotCQkqcmVzdWx0ID0gcENhcC0+bnVtX2FudGNmZ181Z2h6OwotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9UWFBPVzoKIAkJc3dpdGNoIChjYXBhYmlsaXR5KSB7CiAJCWNhc2UgMDoKIAkJCXJldHVybiAwOwogCQljYXNlIDE6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3Bvd2VyTGltaXQ7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQ7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSAyOgotCQkJKnJlc3VsdCA9IGFoLT5haF9tYXhQb3dlckxldmVsOworCQkJKnJlc3VsdCA9IGFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbDsKIAkJCXJldHVybiAwOwogCQljYXNlIDM6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3RwU2NhbGU7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBBVEg5S19DQVBfRFM6CisJCXJldHVybiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkNfQ0hBSU5fTUFTSykgPT0gMSkpCisJCQk/IGZhbHNlIDogdHJ1ZTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQogCi1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgdjsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQVRIOUtfQ0FQX1RLSVBfTUlDOgogCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgfD0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzIHw9CiAJCQkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7CiAJCWVsc2UKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgJj0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzICY9CiAJCQkJfkFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9ESVZFUlNJVFk6CkBAIC0zNTM0LDE1ICszNTQxLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSDoKIAkJaWYgKHNldHRpbmcpCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzIHw9IEFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CisJCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PSBBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwogCQllbHNlCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzICY9IH5BUl9TVEFfSUQxX01DQVNUX0tTUkNIOwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7Ci0JCWVsc2UKLQkJCWFocC0+YWhfbWlzY01vZGUgJj0gfkFSX1BDVV9UWF9BRERfVFNGOworCQkJYWgtPnN0YV9pZDFfZGVmYXVsdHMgJj0gfkFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKQEAgLTM1NTMsNyArMzU1NCw3IEBACiAvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19ncGlvX2NmZ19vdXRwdXRfbXV4KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dwaW9fY2ZnX291dHB1dF9tdXgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSB1MzIgZ3BpbywgdTMyIHR5cGUpCiB7CiAJaW50IGFkZHI7CkBAIC0zNTgxLDExICszNTgyLDExIEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pCit2b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAl1MzIgZ3Bpb19zaGlmdDsKIAotCUFTU0VSVChncGlvIDwgYWgtPmFoX2NhcHMubnVtX2dwaW9fcGlucyk7CisJQVNTRVJUKGdwaW8gPCBhaC0+Y2Fwcy5udW1fZ3Bpb19waW5zKTsKIAogCWdwaW9fc2hpZnQgPSBncGlvIDw8IDE7CiAKQEAgLTM1OTUsMjIgKzM1OTYsMjMgQEAKIAkJKEFSX0dQSU9fT0VfT1VUX0RSViA8PCBncGlvX3NoaWZ0KSk7CiB9CiAKLXUzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKQordTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKLQlpZiAoZ3BpbyA+PSBhaC0+YWhfY2Fwcy5udW1fZ3Bpb19waW5zKQorI2RlZmluZSBNU19SRUdfUkVBRCh4LCB5KSBcCisJKE1TKFJFR19SRUFEKGFoLCBBUl9HUElPX0lOX09VVCksIHgjI19HUElPX0lOX1ZBTCkgJiAoQVJfR1BJT19CSVQoeSkpKQorCisJaWYgKGdwaW8gPj0gYWgtPmNhcHMubnVtX2dwaW9fcGlucykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlyZXR1cm4gKE1TCi0JCQkoUkVHX1JFQUQoYWgsIEFSX0dQSU9fSU5fT1VUKSwKLQkJCSBBUjkyOFhfR1BJT19JTl9WQUwpICYgQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChNUyhSRUdfUkVBRChhaCwgQVJfR1BJT19JTl9PVVQpLCBBUl9HUElPX0lOX1ZBTCkgJgotCQkJQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfQorCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVI5Mjg1LCBncGlvKSAhPSAwOworCWVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCXJldHVybiBNU19SRUdfUkVBRChBUjkyOFgsIGdwaW8pICE9IDA7CisJZWxzZQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVIsIGdwaW8pICE9IDA7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2ZnX291dHB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvLAordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKIAkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpCiB7CiAJdTMyIGdwaW9fc2hpZnQ7CkBAIC0zNjI1LDE0ICszNjI3LDE0IEBACiAJCShBUl9HUElPX09FX09VVF9EUlYgPDwgZ3Bpb19zaGlmdCkpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpCit2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCkKIHsKIAlSRUdfUk1XKGFoLCBBUl9HUElPX0lOX09VVCwgKCh2YWwgJiAxKSA8PCBncGlvKSwKIAkJQVJfR1BJT19CSVQoZ3BpbykpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCiAJCSAgICBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQik7CkBAIC0zNjQwLDUwICszNjQyLDI4IEBACiAJUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMiwKIAkJICAgIEFSX0dQSU9fSU5QVVRfTVVYMl9SRlNJTEVOVCk7CiAKLQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKTsKKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPnJma2lsbF9ncGlvKTsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RFU1QsIFJGU0lMRU5UX0JCKTsKIH0KICNlbmRpZgogCi1pbnQgYXRoOWtfaHdfc2VsZWN0X2FudGNvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjZmcpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOwotCXUxNiBhbnRfY29uZmlnOwotCXUzMiBoYWxOdW1BbnRDb25maWc7Ci0KLQloYWxOdW1BbnRDb25maWcgPSBJU19DSEFOXzJHSFooY2hhbikgPwotCQlwQ2FwLT5udW1fYW50Y2ZnXzJnaHogOiBwQ2FwLT5udW1fYW50Y2ZnXzVnaHo7Ci0KLQlpZiAoY2ZnIDwgaGFsTnVtQW50Q29uZmlnKSB7Ci0JCWlmICghYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwKLQkJCQkJCSAgICAgY2ZnLCAmYW50X2NvbmZpZykpIHsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoKQordTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIFJFR19SRUFEKGFoLCBBUl9ERUZfQU5URU5OQSkgJiAweDc7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBhbnRlbm5hKQordm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYW50ZW5uYSkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCAoYW50ZW5uYSAmIDB4NykpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCiAJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKIAkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAogCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdGF0aWMgdTggdHhfY2hhaW5tYXNrX2NmZywgcnhfY2hhaW5tYXNrX2NmZzsKIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CkBAIC0zNzAwLDcgKzM2ODAsNyBAQAogCQkJKmFudGVubmFfY2ZnZCA9IHRydWU7CiAJCQlicmVhazsKIAkJY2FzZSBBVEg5S19BTlRfRklYRURfQjoKLQkJCWlmIChhaC0+YWhfY2Fwcy50eF9jaGFpbm1hc2sgPgorCQkJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayA+CiAJCQkgICAgQVRIOUtfQU5URU5OQTFfQ0hBSU5NQVNLKSB7CiAJCQkJKnR4X2NoYWlubWFzayA9IEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSzsKIAkJCX0KQEAgLTM3MTYsNyArMzY5Niw3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCWFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCA9IHNldHRpbmdzOworCQlhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wgPSBzZXR0aW5nczsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM3MjYsNyArMzcwNiw3IEBACiAvKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwogLyoqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCkKK3UzMiBhdGg5a19od19nZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgYml0cyA9IFJFR19SRUFEKGFoLCBBUl9SWF9GSUxURVIpOwogCXUzMiBwaHliaXRzID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlIpOwpAQCAtMzczOSw3ICszNzE5LDcgQEAKIAlyZXR1cm4gYml0czsKIH0KIAotdm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBiaXRzKQordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpCiB7CiAJdTMyIHBoeWJpdHM7CiAKQEAgLTM3NTksMTIgKzM3MzksMTIgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19aTEZETUEpOwogfQogCi1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pOwogfQogCi1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzc3Miw4MiArMzc1Miw1NCBAQAogCXJldHVybiBhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9DT0xEKTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGxpbWl0KQorYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAKLQlhaC0+YWhfcG93ZXJMaW1pdCA9IG1pbihsaW1pdCwgKHUzMikgTUFYX1JBVEVfUE9XRVIpOworCWFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0ID0gbWluKGxpbWl0LCAodTMyKSBNQVhfUkFURV9QT1dFUik7CiAKLQlpZiAoYXRoOWtfaHdfc2V0X3R4cG93ZXIoYWgsIGNoYW4sCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2FudGVubmFfYWxsb3dlZChhaCwgY2hhbiksCi0JCQkJIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICAgICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpICE9IDApCisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFjKQordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCW1lbWNweShtYWMsIGFocC0+YWhfbWFjYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhaC0+bWFjYWRkciwgbWFjLCBFVEhfQUxFTik7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hYykKK3ZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9tYWNhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQotCXJldHVybiB0cnVlOworCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPm9wbW9kZSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoYWgsIGFoLT5haF9vcG1vZGUpOwotfQotCi12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQogewogCVJFR19XUklURShhaCwgQVJfTUNBU1RfRklMMCwgZmlsdGVyMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9NQ0FTVF9GSUwxLCBmaWx0ZXIxKTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFzaykKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkobWFzaywgYWhwLT5haF9ic3NpZG1hc2ssIEVUSF9BTEVOKTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShzYy0+c2NfYWgsIEFSX0JTU01TS1UsIGdldF91bmFsaWduZWRfbGUxNihzYy0+YnNzaWRtYXNrICsgNCkpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGNvbnN0IHU4ICptYXNrKQordm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9ic3NpZG1hc2ssIG1hc2ssIEVUSF9BTEVOKTsKLQotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmN1cmJzc2lkKSk7CisJUkVHX1dSSVRFKHNjLT5zY19haCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIH0KIAotdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKmJzc2lkLCB1MTYgYXNzb2NJZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JbWVtY3B5KGFocC0+YWhfYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JYWhwLT5haF9hc3NvY0lkID0gYXNzb2NJZDsKLQotCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWQpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDEsIGdldF91bmFsaWduZWRfbGUxNihhaHAtPmFoX2Jzc2lkICsgNCkgfAotCQkgICgoYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOwotfQotCi11NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9oYWwgKmFoKQordTY0IGF0aDlrX2h3X2dldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXU2NCB0c2Y7CiAKQEAgLTM4NTcsNyArMzgwOSwxMyBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgsIHU2NCB0c2Y2NCkKK3sKKwlSRUdfV1JJVEUoYWgsIEFSX1RTRl9MMzIsIHRzZjY0ICYgMHhmZmZmZmZmZik7CisJUkVHX1dSSVRFKGFoLCBBUl9UU0ZfVTMyLCAodHNmNjQgPj4gMzIpICYgMHhmZmZmZmZmZik7Cit9CisKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBjb3VudDsKIApAQCAtMzg3NCw0MiArMzgzMiw2NSBAQAogCVJFR19XUklURShhaCwgQVJfUkVTRVRfVFNGLCBBUl9SRVNFVF9UU0ZfT05DRSk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKQorYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHNldHRpbmcpCi0JCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CisJCWFoLT5taXNjX21vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CiAJZWxzZQotCQlhaHAtPmFoX21pc2NNb2RlICY9IH5BUl9QQ1VfVFhfQUREX1RTRjsKKwkJYWgtPm1pc2NfbW9kZSAmPSB+QVJfUENVX1RYX0FERF9UU0Y7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1cykKK2Jvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzIDwgQVRIOUtfU0xPVF9USU1FXzkgfHwgdXMgPiBhdGg5a19od19tYWNfdG9fdXNlYyhhaCwgMHhmZmZmKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBzbG90IHRpbWUgJXVcbiIsIHVzKTsKLQkJYWhwLT5haF9zbG90dGltZSA9ICh1MzIpIC0xOworCQlhaC0+c2xvdHRpbWUgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NMT1QsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX3Nsb3R0aW1lID0gdXM7CisJCWFoLT5zbG90dGltZSA9IHVzOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKQordm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2h0X21hY21vZGUgbW9kZSkKIHsKIAl1MzIgbWFjbW9kZTsKIAogCWlmIChtb2RlID09IEFUSDlLX0hUX01BQ01PREVfMjA0MCAmJgotCSAgICAhYWgtPmFoX2NvbmZpZy5jd21faWdub3JlX2V4dGNjYSkKKwkgICAgIWFoLT5jb25maWcuY3dtX2lnbm9yZV9leHRjY2EpCiAJCW1hY21vZGUgPSBBUl8yMDQwX0pPSU5FRF9SWF9DTEVBUjsKIAllbHNlCiAJCW1hY21vZGUgPSAwOwogCiAJUkVHX1dSSVRFKGFoLCBBUl8yMDQwX01PREUsIG1hY21vZGUpOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIEJsdWV0b290aCBDb2V4aXN0ZW5jZSAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwkvKiBjb25uZWN0IGJ0X2FjdGl2ZSB0byBiYXNlYmFuZCAqLworCVJFR19DTFJfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgfAorCQkJIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYpKTsKKworCVJFR19TRVRfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCUFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQik7CisKKwkvKiBTZXQgaW5wdXQgbXV4IGZvciBidF9hY3RpdmUgdG8gZ3BpbyBwaW4gKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCisJCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAorCQkJYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIGdwaW8gcG9ydCBmb3IgaW5wdXQgKi8KKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIEdQSU8gcG9ydCBmb3IgVFhfRlJBTUUgb3V0cHV0ICovCisJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPndsYW5hY3RpdmVfZ3BpbywKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKaW5kZXggOTFkOGY1OTQuLmRjNjgxZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaApAQCAtMTksOTM2ICsxOSw0MyBAQAogCiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLXN0cnVjdCBhcjU0MTZfZGVzYyB7Ci0JdTMyIGRzX2xpbms7Ci0JdTMyIGRzX2RhdGE7Ci0JdTMyIGRzX2N0bDA7Ci0JdTMyIGRzX2N0bDE7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTMyIGN0bDI7Ci0JCQl1MzIgY3RsMzsKLQkJCXUzMiBjdGw0OwotCQkJdTMyIGN0bDU7Ci0JCQl1MzIgY3RsNjsKLQkJCXUzMiBjdGw3OwotCQkJdTMyIGN0bDg7Ci0JCQl1MzIgY3RsOTsKLQkJCXUzMiBjdGwxMDsKLQkJCXUzMiBjdGwxMTsKLQkJCXUzMiBzdGF0dXMwOwotCQkJdTMyIHN0YXR1czE7Ci0JCQl1MzIgc3RhdHVzMjsKLQkJCXUzMiBzdGF0dXMzOwotCQkJdTMyIHN0YXR1czQ7Ci0JCQl1MzIgc3RhdHVzNTsKLQkJCXUzMiBzdGF0dXM2OwotCQkJdTMyIHN0YXR1czc7Ci0JCQl1MzIgc3RhdHVzODsKLQkJCXUzMiBzdGF0dXM5OwotCQl9IHR4OwotCQlzdHJ1Y3QgewotCQkJdTMyIHN0YXR1czA7Ci0JCQl1MzIgc3RhdHVzMTsKLQkJCXUzMiBzdGF0dXMyOwotCQkJdTMyIHN0YXR1czM7Ci0JCQl1MzIgc3RhdHVzNDsKLQkJCXUzMiBzdGF0dXM1OwotCQkJdTMyIHN0YXR1czY7Ci0JCQl1MzIgc3RhdHVzNzsKLQkJCXUzMiBzdGF0dXM4OwotCQl9IHJ4OwotCX0gdTsKLX0gX19wYWNrZWQ7CisjaW5jbHVkZSAibWFjLmgiCisjaW5jbHVkZSAiYW5pLmgiCisjaW5jbHVkZSAiZWVwcm9tLmgiCisjaW5jbHVkZSAiY2FsaWIuaCIKKyNpbmNsdWRlICJyZWdkLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAicGh5LmgiCiAKLSNkZWZpbmUgQVI1NDE2REVTQyhfZHMpICAgICAgICAgKChzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKLSNkZWZpbmUgQVI1NDE2REVTQ19DT05TVChfZHMpICAgKChjb25zdCBzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKyNkZWZpbmUgQVRIRVJPU19WRU5ET1JfSUQJMHgxNjhjCisjZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0kJMHgwMDIzCisjZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0lFCTB4MDAyNAorI2RlZmluZSBBUjkxNjBfREVWSURfUENJCTB4MDAyNworI2RlZmluZSBBUjkyODBfREVWSURfUENJCTB4MDAyOQorI2RlZmluZSBBUjkyODBfREVWSURfUENJRQkweDAwMmEKKyNkZWZpbmUgQVI5Mjg1X0RFVklEX1BDSUUJMHgwMDJiCisjZGVmaW5lIEFSNTQxNl9BUjkxMDBfREVWSUQJMHgwMDBiCisjZGVmaW5lCUFSX1NVQlZFTkRPUl9JRF9OT0cJMHgwZTExCisjZGVmaW5lIEFSX1NVQlZFTkRPUl9JRF9ORVdfQQkweDcwNjUKKyNkZWZpbmUgQVI1NDE2X01BR0lDCQkweDE5NjQxMDE0CiAKLSNkZWZpbmUgZHNfY3RsMiAgICAgdS50eC5jdGwyCi0jZGVmaW5lIGRzX2N0bDMgICAgIHUudHguY3RsMwotI2RlZmluZSBkc19jdGw0ICAgICB1LnR4LmN0bDQKLSNkZWZpbmUgZHNfY3RsNSAgICAgdS50eC5jdGw1Ci0jZGVmaW5lIGRzX2N0bDYgICAgIHUudHguY3RsNgotI2RlZmluZSBkc19jdGw3ICAgICB1LnR4LmN0bDcKLSNkZWZpbmUgZHNfY3RsOCAgICAgdS50eC5jdGw4Ci0jZGVmaW5lIGRzX2N0bDkgICAgIHUudHguY3RsOQotI2RlZmluZSBkc19jdGwxMCAgICB1LnR4LmN0bDEwCi0jZGVmaW5lIGRzX2N0bDExICAgIHUudHguY3RsMTEKKy8qIFJlZ2lzdGVyIHJlYWQvd3JpdGUgcHJpbWl0aXZlcyAqLworI2RlZmluZSBSRUdfV1JJVEUoX2FoLCBfcmVnLCBfdmFsKSBhdGg5a19pb3dyaXRlMzIoKF9haCksIChfcmVnKSwgKF92YWwpKQorI2RlZmluZSBSRUdfUkVBRChfYWgsIF9yZWcpIGF0aDlrX2lvcmVhZDMyKChfYWgpLCAoX3JlZykpCiAKLSNkZWZpbmUgZHNfdHhzdGF0dXMwICAgIHUudHguc3RhdHVzMAotI2RlZmluZSBkc190eHN0YXR1czEgICAgdS50eC5zdGF0dXMxCi0jZGVmaW5lIGRzX3R4c3RhdHVzMiAgICB1LnR4LnN0YXR1czIKLSNkZWZpbmUgZHNfdHhzdGF0dXMzICAgIHUudHguc3RhdHVzMwotI2RlZmluZSBkc190eHN0YXR1czQgICAgdS50eC5zdGF0dXM0Ci0jZGVmaW5lIGRzX3R4c3RhdHVzNSAgICB1LnR4LnN0YXR1czUKLSNkZWZpbmUgZHNfdHhzdGF0dXM2ICAgIHUudHguc3RhdHVzNgotI2RlZmluZSBkc190eHN0YXR1czcgICAgdS50eC5zdGF0dXM3Ci0jZGVmaW5lIGRzX3R4c3RhdHVzOCAgICB1LnR4LnN0YXR1czgKLSNkZWZpbmUgZHNfdHhzdGF0dXM5ICAgIHUudHguc3RhdHVzOQotCi0jZGVmaW5lIGRzX3J4c3RhdHVzMCAgICB1LnJ4LnN0YXR1czAKLSNkZWZpbmUgZHNfcnhzdGF0dXMxICAgIHUucnguc3RhdHVzMQotI2RlZmluZSBkc19yeHN0YXR1czIgICAgdS5yeC5zdGF0dXMyCi0jZGVmaW5lIGRzX3J4c3RhdHVzMyAgICB1LnJ4LnN0YXR1czMKLSNkZWZpbmUgZHNfcnhzdGF0dXM0ICAgIHUucnguc3RhdHVzNAotI2RlZmluZSBkc19yeHN0YXR1czUgICAgdS5yeC5zdGF0dXM1Ci0jZGVmaW5lIGRzX3J4c3RhdHVzNiAgICB1LnJ4LnN0YXR1czYKLSNkZWZpbmUgZHNfcnhzdGF0dXM3ICAgIHUucnguc3RhdHVzNwotI2RlZmluZSBkc19yeHN0YXR1czggICAgdS5yeC5zdGF0dXM4Ci0KLSNkZWZpbmUgQVJfRnJhbWVMZW4gICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1ZpcnRNb3JlRnJhZyAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBBUl9UeEN0bFJzdmQwMCAgICAgIDB4MDAwMGUwMDAKLSNkZWZpbmUgQVJfWG1pdFBvd2VyICAgICAgICAweDAwM2YwMDAwCi0jZGVmaW5lIEFSX1htaXRQb3dlcl9TICAgICAgMTYKLSNkZWZpbmUgQVJfUlRTRW5hYmxlICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIEFSX1ZFT0wgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBBUl9DbHJEZXN0TWFzayAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgQVJfVHhDdGxSc3ZkMDEgICAgICAweDFlMDAwMDAwCi0jZGVmaW5lIEFSX1R4SW50clJlcSAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBBUl9EZXN0SWR4VmFsaWQgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgQVJfQ1RTRW5hYmxlICAgICAgICAweDgwMDAwMDAwCi0KLSNkZWZpbmUgQVJfQnVmTGVuICAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1R4TW9yZSAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBBUl9EZXN0SWR4ICAgICAgICAgIDB4MDAwZmUwMDAKLSNkZWZpbmUgQVJfRGVzdElkeF9TICAgICAgICAxMwotI2RlZmluZSBBUl9GcmFtZVR5cGUgICAgICAgIDB4MDBmMDAwMDAKLSNkZWZpbmUgQVJfRnJhbWVUeXBlX1MgICAgICAyMAotI2RlZmluZSBBUl9Ob0FjayAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgQVJfSW5zZXJ0VFMgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIEFSX0NvcnJ1cHRGQ1MgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBBUl9FeHRPbmx5ICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgQVJfRXh0QW5kQ3RsICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIEFSX01vcmVBZ2dyICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBBUl9Jc0FnZ3IgICAgICAgICAgIDB4NDAwMDAwMDAKLQotI2RlZmluZSBBUl9CdXJzdER1ciAgICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfQnVyc3REdXJfUyAgICAgICAwCi0jZGVmaW5lIEFSX0R1clVwZGF0ZUVuYSAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMCAgIDB4MDAwZjAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczBfUyAxNgotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMSAgIDB4MDBmMDAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczFfUyAyMAotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMiAgIDB4MGYwMDAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczJfUyAyNAotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMyAgIDB4ZjAwMDAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczNfUyAyOAotCi0jZGVmaW5lIEFSX1htaXRSYXRlMCAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9YbWl0UmF0ZTBfUyAgICAgIDAKLSNkZWZpbmUgQVJfWG1pdFJhdGUxICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMV9TICAgICAgOAotI2RlZmluZSBBUl9YbWl0UmF0ZTIgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfWG1pdFJhdGUyX1MgICAgICAxNgotI2RlZmluZSBBUl9YbWl0UmF0ZTMgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfWG1pdFJhdGUzX1MgICAgICAyNAotCi0jZGVmaW5lIEFSX1BhY2tldER1cjAgICAgICAgMHgwMDAwN2ZmZgotI2RlZmluZSBBUl9QYWNrZXREdXIwX1MgICAgIDAKLSNkZWZpbmUgQVJfUlRTQ1RTUXVhbDAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEFSX1BhY2tldER1cjEgICAgICAgMHg3ZmZmMDAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIxX1MgICAgIDE2Ci0jZGVmaW5lIEFSX1JUU0NUU1F1YWwxICAgICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX1BhY2tldER1cjIgICAgICAgMHgwMDAwN2ZmZgotI2RlZmluZSBBUl9QYWNrZXREdXIyX1MgICAgIDAKLSNkZWZpbmUgQVJfUlRTQ1RTUXVhbDIgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEFSX1BhY2tldER1cjMgICAgICAgMHg3ZmZmMDAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIzX1MgICAgIDE2Ci0jZGVmaW5lIEFSX1JUU0NUU1F1YWwzICAgICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX0FnZ3JMZW4gICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBBUl9BZ2dyTGVuX1MgICAgICAgIDAKLSNkZWZpbmUgQVJfVHhDdGxSc3ZkNjAgICAgICAweDAwMDMwMDAwCi0jZGVmaW5lIEFSX1BhZERlbGltICAgICAgICAgMHgwM2ZjMDAwMAotI2RlZmluZSBBUl9QYWREZWxpbV9TICAgICAgIDE4Ci0jZGVmaW5lIEFSX0VuY3JUeXBlICAgICAgICAgMHgwYzAwMDAwMAotI2RlZmluZSBBUl9FbmNyVHlwZV9TICAgICAgIDI2Ci0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDYxICAgICAgMHhmMDAwMDAwMAotCi0jZGVmaW5lIEFSXzIwNDBfMCAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBUl9HSTAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfQ2hhaW5TZWwwICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIEFSX0NoYWluU2VsMF9TICAgICAgMgotI2RlZmluZSBBUl8yMDQwXzEgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfR0kxICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIEFSX0NoYWluU2VsMSAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBBUl9DaGFpblNlbDFfUyAgICAgIDcKLSNkZWZpbmUgQVJfMjA0MF8yICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEFSX0dJMiAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBBUl9DaGFpblNlbDIgICAgICAgIDB4MDAwMDcwMDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwyX1MgICAgICAxMgotI2RlZmluZSBBUl8yMDQwXzMgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgQVJfR0kzICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEFSX0NoYWluU2VsMyAgICAgICAgMHgwMDBlMDAwMAotI2RlZmluZSBBUl9DaGFpblNlbDNfUyAgICAgIDE3Ci0jZGVmaW5lIEFSX1JUU0NUU1JhdGUgICAgICAgMHgwZmYwMDAwMAotI2RlZmluZSBBUl9SVFNDVFNSYXRlX1MgICAgIDIwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDcwICAgICAgMHhmMDAwMDAwMAotCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAwICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9UeFJTU0lBbnQwMF9TICAgIDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDEgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAxX1MgICAgOAotI2RlZmluZSBBUl9UeFJTU0lBbnQwMiAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDJfUyAgICAxNgotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMCAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgQVJfVHhCYVN0YXR1cyAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDAxICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX0ZybVhtaXRPSyAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfRXhjZXNzaXZlUmV0cmllcyAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9GSUZPVW5kZXJydW4gICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEFSX0ZpbHRlcmVkICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQVJfUlRTRmFpbENudCAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBBUl9SVFNGYWlsQ250X1MgICAgICAgICA0Ci0jZGVmaW5lIEFSX0RhdGFGYWlsQ250ICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgQVJfRGF0YUZhaWxDbnRfUyAgICAgICAgOAotI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnQgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIEFSX1ZpcnRSZXRyeUNudF9TICAgICAgIDEyCi0jZGVmaW5lIEFSX1R4RGVsaW1VbmRlcnJ1biAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgQVJfVHhEYXRhVW5kZXJydW4gICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBBUl9EZXNjQ2ZnRXJyICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIEFSX1R4VGltZXJFeHBpcmVkICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMTAgICAgICAgMHhmZmYwMDAwMAotCi0jZGVmaW5lIEFSX1NlbmRUaW1lc3RhbXAgICAgZHNfdHhzdGF0dXMyCi0jZGVmaW5lIEFSX0JhQml0bWFwTG93ICAgICAgZHNfdHhzdGF0dXMzCi0jZGVmaW5lIEFSX0JhQml0bWFwSGlnaCAgICAgZHNfdHhzdGF0dXM0Ci0KLSNkZWZpbmUgQVJfVHhSU1NJQW50MTAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEFSX1R4UlNTSUFudDEwX1MgICAgMAotI2RlZmluZSBBUl9UeFJTU0lBbnQxMSAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTFfUyAgICA4Ci0jZGVmaW5lIEFSX1R4UlNTSUFudDEyICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBBUl9UeFJTU0lBbnQxMl9TICAgIDE2Ci0jZGVmaW5lIEFSX1R4UlNTSUNvbWJpbmVkICAgMHhmZjAwMDAwMAotI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZF9TIDI0Ci0KLSNkZWZpbmUgQVJfVHhFVk0wICAgICAgICAgICBkc190eHN0YXR1czUKLSNkZWZpbmUgQVJfVHhFVk0xICAgICAgICAgICBkc190eHN0YXR1czYKLSNkZWZpbmUgQVJfVHhFVk0yICAgICAgICAgICBkc190eHN0YXR1czcKLQotI2RlZmluZSBBUl9UeERvbmUgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfU2VxTnVtICAgICAgICAgICAweDAwMDAxZmZlCi0jZGVmaW5lIEFSX1NlcU51bV9TICAgICAgICAgMQotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MCAgIDB4MDAwMWUwMDAKLSNkZWZpbmUgQVJfVHhPcEV4Y2VlZGVkICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgxICAgMHgwMDFjMDAwMAotI2RlZmluZSBBUl9GaW5hbFR4SWR4ICAgICAgIDB4MDA2MDAwMDAKLSNkZWZpbmUgQVJfRmluYWxUeElkeF9TICAgICAyMQotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MiAgIDB4MDE4MDAwMDAKLSNkZWZpbmUgQVJfUG93ZXJNZ210ICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgzICAgMHhmYzAwMDAwMAotCi0jZGVmaW5lIEFSX1J4Q1RMUnN2ZDAwICAweGZmZmZmZmZmCi0KLSNkZWZpbmUgQVJfQnVmTGVuICAgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgQVJfUnhDdGxSc3ZkMDAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfUnhJbnRyUmVxICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgQVJfUnhDdGxSc3ZkMDEgIDB4ZmZmZmMwMDAKLQotI2RlZmluZSBBUl9SeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfUnhSU1NJQW50MDBfUyAgICAwCi0jZGVmaW5lIEFSX1J4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMV9TICAgIDgKLSNkZWZpbmUgQVJfUnhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1J4UlNTSUFudDAyX1MgICAgMTYKLSNkZWZpbmUgQVJfUnhSYXRlICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIEFSX1J4UmF0ZV9TICAgICAgICAgMjQKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMDAgICAweGZmMDAwMDAwCi0KLSNkZWZpbmUgQVJfRGF0YUxlbiAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1J4TW9yZSAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBBUl9OdW1EZWxpbSAgICAgICAgIDB4MDAzZmMwMDAKLSNkZWZpbmUgQVJfTnVtRGVsaW1fUyAgICAgICAxNAotI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQxMCAgIDB4ZmY4MDAwMDAKLQotI2RlZmluZSBBUl9SY3ZUaW1lc3RhbXAgICAgIGRzX3J4c3RhdHVzMgotCi0jZGVmaW5lIEFSX0dJICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBUl8yMDQwICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfUGFyYWxsZWw0MCAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEFSX1BhcmFsbGVsNDBfUyAgICAgMgotI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQzMCAgIDB4MDAwMDAwZjgKLSNkZWZpbmUgQVJfUnhBbnRlbm5hCSAgICAweGZmZmZmZjAwCi0jZGVmaW5lIEFSX1J4QW50ZW5uYV9TCSAgICA4Ci0KLSNkZWZpbmUgQVJfUnhSU1NJQW50MTAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEFSX1J4UlNTSUFudDEwX1MgICAgICAgICAgMAotI2RlZmluZSBBUl9SeFJTU0lBbnQxMSAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTFfUyAgICAgICAgICA4Ci0jZGVmaW5lIEFSX1J4UlNTSUFudDEyICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBBUl9SeFJTU0lBbnQxMl9TICAgICAgICAgIDE2Ci0jZGVmaW5lIEFSX1J4UlNTSUNvbWJpbmVkICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZF9TICAgICAgIDI0Ci0KLSNkZWZpbmUgQVJfUnhFVk0wICAgICAgICAgICBkc19yeHN0YXR1czQKLSNkZWZpbmUgQVJfUnhFVk0xICAgICAgICAgICBkc19yeHN0YXR1czUKLSNkZWZpbmUgQVJfUnhFVk0yICAgICAgICAgICBkc19yeHN0YXR1czYKLQotI2RlZmluZSBBUl9SeERvbmUgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfUnhGcmFtZU9LICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX0NSQ0VyciAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9EZWNyeXB0Q1JDRXJyICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQVJfUEhZRXJyICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIEFSX01pY2hhZWxFcnIgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBBUl9QcmVEZWxpbUNSQ0VyciAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkNzAgICAweDAwMDAwMDgwCi0jZGVmaW5lIEFSX1J4S2V5SWR4VmFsaWQgICAgMHgwMDAwMDEwMAotI2RlZmluZSBBUl9LZXlJZHggICAgICAgICAgIDB4MDAwMGZlMDAKLSNkZWZpbmUgQVJfS2V5SWR4X1MgICAgICAgICA5Ci0jZGVmaW5lIEFSX1BIWUVyckNvZGUgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9QSFlFcnJDb2RlX1MgICAgIDgKLSNkZWZpbmUgQVJfUnhNb3JlQWdnciAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEFSX1J4QWdnciAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBBUl9Qb3N0RGVsaW1DUkNFcnIgIDB4MDAwNDAwMDAKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkNzEgICAweDNmZjgwMDAwCi0jZGVmaW5lIEFSX0RlY3J5cHRCdXN5RXJyICAgMHg0MDAwMDAwMAotI2RlZmluZSBBUl9LZXlNaXNzICAgICAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUjU0MTZfTUFHSUMgICAgICAgIDB4MTk2NDEwMTQKLQotI2RlZmluZSBSWFNUQVRVU19SQVRFKGFoLCBhZHMpICAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgPwlcCi0JCQkJIE1TKGFkcy0+ZHNfcnhzdGF0dXMwLCBBUl9SeFJhdGUpIDoJXAotCQkJCSAoYWRzLT5kc19yeHN0YXR1czMgPj4gMikgJiAweEZGKQotCi0jZGVmaW5lIHNldDExblRyaWVzKF9zZXJpZXMsIF9pbmRleCkgXAotCShTTSgoX3NlcmllcylbX2luZGV4XS5UcmllcywgQVJfWG1pdERhdGFUcmllcyMjX2luZGV4KSkKLQotI2RlZmluZSBzZXQxMW5SYXRlKF9zZXJpZXMsIF9pbmRleCkgXAotCShTTSgoX3NlcmllcylbX2luZGV4XS5SYXRlLCBBUl9YbWl0UmF0ZSMjX2luZGV4KSkKLQotI2RlZmluZSBzZXQxMW5Qa3REdXJSVFNDVFMoX3NlcmllcywgX2luZGV4KQkJCQlcCi0JKFNNKChfc2VyaWVzKVtfaW5kZXhdLlBrdER1cmF0aW9uLCBBUl9QYWNrZXREdXIjI19pbmRleCkgfAlcCi0JKChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgID8JXAotCQlBUl9SVFNDVFNRdWFsIyNfaW5kZXggOiAwKSkKLQotI2RlZmluZSBzZXQxMW5SYXRlRmxhZ3MoX3NlcmllcywgX2luZGV4KQkJCQlcCi0JKCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTXzIwNDAgPwkJXAotCSAgQVJfMjA0MF8jI19pbmRleCA6IDApCQkJCQkJXAotCSB8KChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJID8JXAotCSAgIEFSX0dJIyNfaW5kZXggOiAwKQkJCQkJCVwKLQkgfFNNKChfc2VyaWVzKVtfaW5kZXhdLkNoU2VsLCBBUl9DaGFpblNlbCMjX2luZGV4KSkKLQotI2RlZmluZSBBUl9TUkVWXzkxMDAoYWgpICgoYWgtPmFoX21hY1ZlcnNpb24pID09IEFSX1NSRVZfVkVSU0lPTl85MTAwKQotCi0jZGVmaW5lIElOSVRfQ09ORklHX1NUQVRVUyAgMHgwMDAwMDAwMAotI2RlZmluZSBJTklUX1JTU0lfVEhSICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgSU5JVF9CQ09OX0NOVFJMX1JFRyAweDAwMDAwMDAwCi0KLSNkZWZpbmUgTUlOX1RYX0ZJRk9fVEhSRVNIT0xEICAgMHgxCi0jZGVmaW5lIE1BWF9UWF9GSUZPX1RIUkVTSE9MRCAgICgoNDA5NiAvIDY0KSAtIDEpCi0jZGVmaW5lIElOSVRfVFhfRklGT19USFJFU0hPTEQgIE1JTl9UWF9GSUZPX1RIUkVTSE9MRAotCi1zdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgewotCXN0cnVjdCBhdGg5a19jaGFubmVsIGM7Ci0JdTggbm9pc2VJbW11bml0eUxldmVsOwotCXU4IHNwdXJJbW11bml0eUxldmVsOwotCXU4IGZpcnN0ZXBMZXZlbDsKLQl1OCBvZmRtV2Vha1NpZ0RldGVjdE9mZjsKLQl1OCBjY2tXZWFrU2lnVGhyZXNob2xkOwotCXUzMiBsaXN0ZW5UaW1lOwotCXUzMiBvZmRtVHJpZ0hpZ2g7Ci0JdTMyIG9mZG1UcmlnTG93OwotCWludDMyX3QgY2NrVHJpZ0hpZ2g7Ci0JaW50MzJfdCBjY2tUcmlnTG93OwotCWludDMyX3QgcnNzaVRockxvdzsKLQlpbnQzMl90IHJzc2lUaHJIaWdoOwotCXUzMiBub2lzZUZsb29yOwotCXUzMiB0eEZyYW1lQ291bnQ7Ci0JdTMyIHJ4RnJhbWVDb3VudDsKLQl1MzIgY3ljbGVDb3VudDsKLQl1MzIgb2ZkbVBoeUVyckNvdW50OwotCXUzMiBjY2tQaHlFcnJDb3VudDsKLQl1MzIgb2ZkbVBoeUVyckJhc2U7Ci0JdTMyIGNja1BoeUVyckJhc2U7Ci0JaW50MTZfdCBwa3RSc3NpWzJdOwotCWludDE2X3Qgb2ZkbUVyclJzc2lbMl07Ci0JaW50MTZfdCBjY2tFcnJSc3NpWzJdOwotfTsKLQotI2RlZmluZSBIQUxfUFJPQ0VTU19BTkkgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgRE9fQU5JKGFoKSBcCi0JKChBSDU0MTYoYWgpLT5haF9wcm9jUGh5RXJyICYgSEFMX1BST0NFU1NfQU5JKSkKLQotc3RydWN0IGFyNTQxNlN0YXRzIHsKLQl1MzIgYXN0X2FuaV9uaXVwOwotCXUzMiBhc3RfYW5pX25pZG93bjsKLQl1MzIgYXN0X2FuaV9zcHVydXA7Ci0JdTMyIGFzdF9hbmlfc3B1cmRvd247Ci0JdTMyIGFzdF9hbmlfb2ZkbW9uOwotCXUzMiBhc3RfYW5pX29mZG1vZmY7Ci0JdTMyIGFzdF9hbmlfY2NraGlnaDsKLQl1MzIgYXN0X2FuaV9jY2tsb3c7Ci0JdTMyIGFzdF9hbmlfc3RlcHVwOwotCXUzMiBhc3RfYW5pX3N0ZXBkb3duOwotCXUzMiBhc3RfYW5pX29mZG1lcnJzOwotCXUzMiBhc3RfYW5pX2Nja2VycnM7Ci0JdTMyIGFzdF9hbmlfcmVzZXQ7Ci0JdTMyIGFzdF9hbmlfbHplcm87Ci0JdTMyIGFzdF9hbmlfbG5lZzsKLQlzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIGFzdF9taWJzdGF0czsKLQlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBhc3Rfbm9kZXN0YXRzOwotfTsKLQotI2RlZmluZSBBUjU0MTZfT1BGTEFHU18xMUEgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFHICAgICAgICAgICAweDAyCi0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQ0MCAgICAgMHgwNAotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUNDAgICAgIDB4MDgKLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwICAgICAweDEwCi0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fMkdfSFQyMCAgICAgMHgyMAotCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEICAgICAgICAweDAwMDEKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX0VOQUJMRURfUyAgICAgIDAKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZICAgICAgIDB4MDAwMgotI2RlZmluZSBFRVBfUkZTSUxFTlRfUE9MQVJJVFlfUyAgICAgMQotI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUwgICAgICAgMHgwMDFjCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9HUElPX1NFTF9TICAgICAyCi0KLSNkZWZpbmUgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUiAgICAgICAweDEKLSNkZWZpbmUgQVI1NDE2X0VFUF9WRVIgICAgICAgICAgICAgICAweEUKLSNkZWZpbmUgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSyAgICAweDBGRkYKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMiAgICAgICAweDIKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMyAgICAgICAweDMKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNyAgICAgICAweDcKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfOSAgICAgICAweDkKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTYgICAgICAweDEwCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE3ICAgICAgMHgxMQotI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSAgICAgIDB4MTMKLQotI2RlZmluZSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUyAgICAgICAgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV8yR19DQUxfUElFUlMgICAgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUyAgOAotI2RlZmluZSBBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlMgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUyAzCi0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUyAgNAotI2RlZmluZSBBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMgIDQKLSNkZWZpbmUgQVI1NDE2X05VTV9DVExTICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBBUjU0MTZfTlVNX0JBTkRfRURHRVMgICAgICAgICAgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV9QRF9HQUlOUyAgICAgICAgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDUKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUyAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9NQVhfUkFURV9QT1dFUiAgICAgICAgICAgNjMKLSNkZWZpbmUgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgICAgICAgICAxMjgKLSNkZWZpbmUgQVI1NDE2X0JDSEFOX1VOVVNFRCAgICAgICAgICAgICAweEZGCi0jZGVmaW5lIEFSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREIgNjQKLSNkZWZpbmUgQVI1NDE2X01BWF9DSEFJTlMgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICAgICAgICAgLTUKLQotLyogUnggZ2FpbiB0eXBlIHZhbHVlcyAqLwotI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl8yM0RCX0JBQ0tPRkYgICAgIDAKLSNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMTNEQl9CQUNLT0ZGICAgICAxCi0jZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOX09SSUcgICAgICAgICAgICAgMgotCi0vKiBUeCBnYWluIHR5cGUgdmFsdWVzICovCi0jZGVmaW5lIEFSNTQxNl9FRVBfVFhHQUlOX09SSUdJTkFMICAgICAgICAgMAotI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSICAgICAgIDEKLQotI2RlZmluZSBBUjU0MTZfRUVQNEtfU1RBUlRfTE9DICAgICAgICAgNjQKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlMgICAgICAzCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDMKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR180MF9UQVJHRVRfUE9XRVJTICAzCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fQ1RMUyAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9CQU5EX0VER0VTICAgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fUERfR0FJTlMgICAgICAgICAgMgotI2RlZmluZSBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAgICAgIDQKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTICAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19NQVhfQ0hBSU5TICAgICAgICAgICAgMQotCi1lbnVtIGVlcHJvbV9wYXJhbSB7Ci0JRUVQX05GVEhSRVNIXzUsCi0JRUVQX05GVEhSRVNIXzIsCi0JRUVQX01BQ19NU1csCi0JRUVQX01BQ19NSUQsCi0JRUVQX01BQ19MU1csCi0JRUVQX1JFR18wLAotCUVFUF9SRUdfMSwKLQlFRVBfT1BfQ0FQLAotCUVFUF9PUF9NT0RFLAotCUVFUF9SRl9TSUxFTlQsCi0JRUVQX09CXzUsCi0JRUVQX0RCXzUsCi0JRUVQX09CXzIsCi0JRUVQX0RCXzIsCi0JRUVQX01JTk9SX1JFViwKLQlFRVBfVFhfTUFTSywKLQlFRVBfUlhfTUFTSywKLQlFRVBfUlhHQUlOX1RZUEUsCi0JRUVQX1RYR0FJTl9UWVBFLAotfTsKLQotZW51bSBhcjU0MTZfcmF0ZXMgewotCXJhdGU2bWIsIHJhdGU5bWIsIHJhdGUxMm1iLCByYXRlMThtYiwKLQlyYXRlMjRtYiwgcmF0ZTM2bWIsIHJhdGU0OG1iLCByYXRlNTRtYiwKLQlyYXRlMWwsIHJhdGUybCwgcmF0ZTJzLCByYXRlNV81bCwKLQlyYXRlNV81cywgcmF0ZTExbCwgcmF0ZTExcywgcmF0ZVhyLAotCXJhdGVIdDIwXzAsIHJhdGVIdDIwXzEsIHJhdGVIdDIwXzIsIHJhdGVIdDIwXzMsCi0JcmF0ZUh0MjBfNCwgcmF0ZUh0MjBfNSwgcmF0ZUh0MjBfNiwgcmF0ZUh0MjBfNywKLQlyYXRlSHQ0MF8wLCByYXRlSHQ0MF8xLCByYXRlSHQ0MF8yLCByYXRlSHQ0MF8zLAotCXJhdGVIdDQwXzQsIHJhdGVIdDQwXzUsIHJhdGVIdDQwXzYsIHJhdGVIdDQwXzcsCi0JcmF0ZUR1cENjaywgcmF0ZUR1cE9mZG0sIHJhdGVFeHRDY2ssIHJhdGVFeHRPZmRtLAotCUFyNTQxNlJhdGVTaXplCi19OwotCi1lbnVtIGF0aDlrX2hhbF9mcmVxX2JhbmQgewotCUFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWiA9IDAsCi0JQVRIOUtfSEFMX0ZSRVFfQkFORF8yR0haID0gMQotfTsKLQotc3RydWN0IGJhc2VfZWVwX2hlYWRlciB7Ci0JdTE2IGxlbmd0aDsKLQl1MTYgY2hlY2tzdW07Ci0JdTE2IHZlcnNpb247Ci0JdTggb3BDYXBGbGFnczsKLQl1OCBlZXBNaXNjOwotCXUxNiByZWdEbW5bMl07Ci0JdTggbWFjQWRkcls2XTsKLQl1OCByeE1hc2s7Ci0JdTggdHhNYXNrOwotCXUxNiByZlNpbGVudDsKLQl1MTYgYmx1ZVRvb3RoT3B0aW9uczsKLQl1MTYgZGV2aWNlQ2FwOwotCXUzMiBiaW5CdWlsZE51bWJlcjsKLQl1OCBkZXZpY2VUeXBlOwotCXU4IHB3ZGNsa2luZDsKLQl1OCBmdXR1cmVCYXNlXzFbMl07Ci0JdTggcnhHYWluVHlwZTsKLQl1OCBmdXR1cmVCYXNlXzJbM107Ci0JdTggdHhHYWluVHlwZTsKLQl1OCBmdXR1cmVCYXNlXzNbMjVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayB7Ci0JdTE2IGxlbmd0aDsKLQl1MTYgY2hlY2tzdW07Ci0JdTE2IHZlcnNpb247Ci0JdTggb3BDYXBGbGFnczsKLQl1OCBlZXBNaXNjOwotCXUxNiByZWdEbW5bMl07Ci0JdTggbWFjQWRkcls2XTsKLQl1OCByeE1hc2s7Ci0JdTggdHhNYXNrOwotCXUxNiByZlNpbGVudDsKLQl1MTYgYmx1ZVRvb3RoT3B0aW9uczsKLQl1MTYgZGV2aWNlQ2FwOwotCXUzMiBiaW5CdWlsZE51bWJlcjsKLQl1OCBkZXZpY2VUeXBlOwotCXU4IGZ1dHVyZUJhc2VbMV07Ci19IF9fcGFja2VkOwotCi0KLXN0cnVjdCBzcHVyX2NoYW4gewotCXUxNiBzcHVyQ2hhbjsKLQl1OCBzcHVyUmFuZ2VMb3c7Ci0JdTggc3B1clJhbmdlSGlnaDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyIHsKLQl1MzIgYW50Q3RybENoYWluW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1MzIgYW50Q3RybENvbW1vbjsKLQl1OCBhbnRlbm5hR2FpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBzd2l0Y2hTZXR0bGluZzsKLQl1OCB0eFJ4QXR0ZW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggcnhUeE1hcmdpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBhZGNEZXNpcmVkU2l6ZTsKLQl1OCBwZ2FEZXNpcmVkU2l6ZTsKLQl1OCB4bG5hR2FpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCB0eEVuZFRvWHBhT2ZmOwotCXU4IHR4RW5kVG9SeE9uOwotCXU4IHR4RnJhbWVUb1hwYU9uOwotCXU4IHRocmVzaDYyOwotCXU4IG5vaXNlRmxvb3JUaHJlc2hDaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggeHBkR2FpbjsKLQl1OCB4cGQ7Ci0JdTggaXFDYWxJQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IGlxQ2FsUUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBwZEdhaW5PdmVybGFwOwotCXU4IG9iOwotCXU4IGRiOwotCXU4IHhwYUJpYXNMdmw7Ci0JdTggcHdyRGVjcmVhc2VGb3IyQ2hhaW47Ci0JdTggcHdyRGVjcmVhc2VGb3IzQ2hhaW47Ci0JdTggdHhGcmFtZVRvRGF0YVN0YXJ0OwotCXU4IHR4RnJhbWVUb1BhT247Ci0JdTggaHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0JdTggYnN3QXR0ZW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IGJzd01hcmdpbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggc3dTZXR0bGVIdDQwOwotCXU4IHhhdHRlbjJEYltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggeGF0dGVuMk1hcmdpbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggb2JfY2gxOwotCXU4IGRiX2NoMTsKLQl1OCB1c2VBbnQxOjEsCi0JICAgIGZvcmNlX3hwYW9uOjEsCi0JICAgIGxvY2FsX2JpYXM6MSwKLQkgICAgZmVtQmFuZFNlbGVjdFVzZWQ6MSwgeGxuYWJ1ZmluOjEsIHhsbmFpc2VsOjIsIHhsbmFidWZtb2RlOjE7Ci0JdTggZnV0dXJlTW9kYWxhcjkyODA7Ci0JdTE2IHhwYUJpYXNMdmxGcmVxWzNdOwotCXU4IGZ1dHVyZU1vZGFsWzZdOwotCi0Jc3RydWN0IHNwdXJfY2hhbiBzcHVyQ2hhbnNbQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciB7Ci0gICAgdTMyICBhbnRDdHJsQ2hhaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHUzMiAgYW50Q3RybENvbW1vbjsKLSAgICB1OCAgIGFudGVubmFHYWluQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgc3dpdGNoU2V0dGxpbmc7Ci0gICAgdTggICB0eFJ4QXR0ZW5DaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICByeFR4TWFyZ2luQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgYWRjRGVzaXJlZFNpemU7Ci0gICAgdTggICBwZ2FEZXNpcmVkU2l6ZTsKLSAgICB1OCAgIHhsbmFHYWluQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgdHhFbmRUb1hwYU9mZjsKLSAgICB1OCAgIHR4RW5kVG9SeE9uOwotICAgIHU4ICAgdHhGcmFtZVRvWHBhT247Ci0gICAgdTggICB0aHJlc2g2MjsKLSAgICB1OCAgIG5vaXNlRmxvb3JUaHJlc2hDaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICB4cGRHYWluOwotICAgIHU4ICAgeHBkOwotICAgIHU4ICAgaXFDYWxJQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgaXFDYWxRQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgcGRHYWluT3ZlcmxhcDsKLSAgICB1OCAgIG9iXzAxOwotICAgIHU4ICAgZGIxXzAxOwotICAgIHU4ICAgeHBhQmlhc0x2bDsKLSAgICB1OCAgIHR4RnJhbWVUb0RhdGFTdGFydDsKLSAgICB1OCAgIHR4RnJhbWVUb1BhT247Ci0gICAgdTggICBodDQwUG93ZXJJbmNGb3JQZGFkYzsKLSAgICB1OCAgIGJzd0F0dGVuW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGJzd01hcmdpbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICBzd1NldHRsZUh0NDA7Ci0gICAgdTggICB4YXR0ZW4yRGJbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgeGF0dGVuMk1hcmdpbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICBkYjJfMDE7Ci0gICAgdTggICB2ZXJzaW9uOwotICAgIHUxNiAgb2JfMjM0OwotICAgIHUxNiAgZGIxXzIzNDsKLSAgICB1MTYgIGRiMl8yMzQ7Ci0gICAgdTggICBmdXR1cmVNb2RhbFs0XTsKLQotICAgIHN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOwotfSBfX3BhY2tlZDsKLQotCi1zdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgewotCXU4IHB3clBkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwotCXU4IHZwZFBkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrIHsKLQl1OCBwd3JQZGdbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU11bQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTXTsKLQl1OCB2cGRQZGdbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU11bQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB7Ci0JdTggYkNoYW5uZWw7Ci0JdTggdFBvdzJ4WzRdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgewotCXU4IGJDaGFubmVsOwotCXU4IHRQb3cyeFs4XTsKLX0gX19wYWNrZWQ7Ci0KLQotI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAotc3RydWN0IGNhbF9jdGxfZWRnZXMgewotCXU4IGJDaGFubmVsOwotCXU4IGZsYWc6MiwgdFBvd2VyOjY7Ci19IF9fcGFja2VkOwotI2Vsc2UKLXN0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCB0UG93ZXI6NiwgZmxhZzoyOwotfSBfX3BhY2tlZDsKLSNlbmRpZgotCi1zdHJ1Y3QgY2FsX2N0bF9kYXRhIHsKLQlzdHJ1Y3QgY2FsX2N0bF9lZGdlcwotCWN0bEVkZ2VzW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNX0JBTkRfRURHRVNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGNhbF9jdGxfZGF0YV80ayB7Ci0Jc3RydWN0IGNhbF9jdGxfZWRnZXMKLQljdGxFZGdlc1tBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU11bQVI1NDE2X0VFUDRLX05VTV9CQU5EX0VER0VTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiB7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciBiYXNlRWVwSGVhZGVyOwotCXU4IGN1c3REYXRhWzY0XTsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciBtb2RhbEhlYWRlclsyXTsKLQl1OCBjYWxGcmVxUGllcjVHW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKLQl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKLQkgY2FsUGllckRhdGE1R1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV81R19DQUxfUElFUlNdOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcQotCSBjYWxQaWVyRGF0YTJHW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JIGNhbFRhcmdldFBvd2VyNUdbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCSBjYWxUYXJnZXRQb3dlcjVHSFQyMFtBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JIGNhbFRhcmdldFBvd2VyNUdIVDQwW0FSNTQxNl9OVU1fNUdfNDBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JIGNhbFRhcmdldFBvd2VyQ2NrW0FSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlcjJHW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCSBjYWxUYXJnZXRQb3dlcjJHSFQ0MFtBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlNdOwotCXU4IGN0bEluZGV4W0FSNTQxNl9OVU1fQ1RMU107Ci0Jc3RydWN0IGNhbF9jdGxfZGF0YSBjdGxEYXRhW0FSNTQxNl9OVU1fQ1RMU107Ci0JdTggcGFkZGluZzsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrIHsKLQlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyXzRrIGJhc2VFZXBIZWFkZXI7Ci0JdTggY3VzdERhdGFbMjBdOwotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyIG1vZGFsSGVhZGVyOwotCXU4IGNhbEZyZXFQaWVyMkdbQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlNdOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80awotCWNhbFBpZXJEYXRhMkdbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKLQljYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfRUVQNEtfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKLQljYWxUYXJnZXRQb3dlcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQljYWxUYXJnZXRQb3dlcjJHSFQyMFtBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X0VFUDRLX05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKLQl1OCBjdGxJbmRleFtBUjU0MTZfRUVQNEtfTlVNX0NUTFNdOwotCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgY3RsRGF0YVtBUjU0MTZfRUVQNEtfTlVNX0NUTFNdOwotCXU4IHBhZGRpbmc7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgewotCXUzMiAqaWFfYXJyYXk7Ci0JdTMyIGlhX3Jvd3M7Ci0JdTMyIGlhX2NvbHVtbnM7Ci19OwotCi0jZGVmaW5lIElOSVRfSU5JX0FSUkFZKGluaWFycmF5LCBhcnJheSwgcm93cywgY29sdW1ucykgZG8gewlcCi0JCShpbmlhcnJheSktPmlhX2FycmF5ID0gKHUzMiAqKShhcnJheSk7CQlcCi0JCShpbmlhcnJheSktPmlhX3Jvd3MgPSAocm93cyk7CQkJXAotCQkoaW5pYXJyYXkpLT5pYV9jb2x1bW5zID0gKGNvbHVtbnMpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSU5JX1JBKGluaWFycmF5LCByb3csIGNvbHVtbikgXAotCSgoKGluaWFycmF5KS0+aWFfYXJyYXkpWyhyb3cpICoJKChpbmlhcnJheSktPmlhX2NvbHVtbnMpICsgKGNvbHVtbildKQotCi0jZGVmaW5lIElOSVRfQ0FMKF9wZXJDYWwpIGRvIHsJCQkJXAotCQkoX3BlckNhbCktPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CVwKLQkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gTlVMTDsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIElOU0VSVF9DQUwoX2FocCwgX3BlckNhbCkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICgoX2FocCktPmFoX2NhbF9saXN0X2xhc3QgPT0gTlVMTCkgewkJCVwKLQkJCShfYWhwKS0+YWhfY2FsX2xpc3QgPQkJCQlcCi0JCQkJKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwlcCi0JCQkoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJCSgoX2FocCktPmFoX2NhbF9saXN0X2xhc3QpLT5jYWxOZXh0ID0gKF9wZXJDYWwpOyBcCi0JCQkoX2FocCktPmFoX2NhbF9saXN0X2xhc3QgPSAoX3BlckNhbCk7CQlcCi0JCQkoX3BlckNhbCktPmNhbE5leHQgPSAoX2FocCktPmFoX2NhbF9saXN0OwlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLWVudW0gaGFsX2NhbF90eXBlcyB7Ci0JQURDX0RDX0lOSVRfQ0FMID0gMHgxLAotCUFEQ19HQUlOX0NBTCA9IDB4MiwKLQlBRENfRENfQ0FMID0gMHg0LAotCUlRX01JU01BVENIX0NBTCA9IDB4OAotfTsKLQotZW51bSBoYWxfY2FsX3N0YXRlIHsKLQlDQUxfSU5BQ1RJVkUsCi0JQ0FMX1dBSVRJTkcsCi0JQ0FMX1JVTk5JTkcsCi0JQ0FMX0RPTkUKLX07Ci0KLSNkZWZpbmUgTUlOX0NBTF9TQU1QTEVTICAgICAxCi0jZGVmaW5lIE1BWF9DQUxfU0FNUExFUyAgICA2NAotI2RlZmluZSBJTklUX0xPR19DT1VOVCAgICAgIDUKLSNkZWZpbmUgUEVSX01JTl9MT0dfQ09VTlQgICAyCi0jZGVmaW5lIFBFUl9NQVhfTE9HX0NPVU5UICAxMAotCi1zdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIHsKLQllbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZTsKLQl1MzIgY2FsTnVtU2FtcGxlczsKLQl1MzIgY2FsQ291bnRNYXg7Ci0Jdm9pZCAoKmNhbENvbGxlY3QpIChzdHJ1Y3QgYXRoX2hhbCAqKTsKLQl2b2lkICgqY2FsUG9zdFByb2MpIChzdHJ1Y3QgYXRoX2hhbCAqLCB1OCk7Ci19OwotCi1zdHJ1Y3QgaGFsX2NhbF9saXN0IHsKLQljb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhICpjYWxEYXRhOwotCWVudW0gaGFsX2NhbF9zdGF0ZSBjYWxTdGF0ZTsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxOZXh0OwotfTsKLQotLyoKLSAqIEVudW0gdG8gaW5kZW50aWZ5IHRoZSBlZXByb20gbWFwcGluZ3MKLSAqLwotZW51bSBoYWxfZWVwX21hcCB7Ci0JRUVQX01BUF9ERUZBVUxUID0gMHgwLAotCUVFUF9NQVBfNEtCSVRTLAotCUVFUF9NQVBfTUFYCi19OwotCi0KLXN0cnVjdCBhdGhfaGFsXzU0MTYgewotCXN0cnVjdCBhdGhfaGFsIGFoOwotCXVuaW9uIHsKLQkJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmIGRlZjsKLQkJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgbWFwNGs7Ci0JfSBhaF9lZXByb207Ci0Jc3RydWN0IGFyNTQxNlN0YXRzIGFoX3N0YXRzOwotCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIGFoX3R4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKLQl2b2lkIF9faW9tZW0gKmFoX2NhbF9tZW07Ci0KLQl1OCBhaF9tYWNhZGRyW0VUSF9BTEVOXTsKLQl1OCBhaF9ic3NpZFtFVEhfQUxFTl07Ci0JdTggYWhfYnNzaWRtYXNrW0VUSF9BTEVOXTsKLQl1MTYgYWhfYXNzb2NJZDsKLQotCWludDE2X3QgYWhfY3VyY2hhblJhZEluZGV4OwotCXUzMiBhaF9tYXNrUmVnOwotCXUzMiBhaF90eE9rSW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhFcnJJbnRlcnJ1cHRNYXNrOwotCXUzMiBhaF90eERlc2NJbnRlcnJ1cHRNYXNrOwotCXUzMiBhaF90eEVvbEludGVycnVwdE1hc2s7Ci0JdTMyIGFoX3R4VXJuSW50ZXJydXB0TWFzazsKLQlib29sIGFoX2NoaXBGdWxsU2xlZXA7Ci0JdTMyIGFoX2F0aW1XaW5kb3c7Ci0JdTE2IGFoX2FudGVubmFTd2l0Y2hTd2FwOwotCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBhaF9wb3dlck1vZGU7Ci0JZW51bSBhdGg5a19hbnRfc2V0dGluZyBhaF9kaXZlcnNpdHlDb250cm9sOwotCi0JLyogQ2FsaWJyYXRpb24gKi8KLQllbnVtIGhhbF9jYWxfdHlwZXMgYWhfc3VwcENhbHM7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9pcUNhbERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9hZGNHYWluQ2FsRGF0YTsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFoX2FkY0RjQ2FsSW5pdERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9hZGNEY0NhbERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqYWhfY2FsX2xpc3Q7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqYWhfY2FsX2xpc3RfbGFzdDsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0ICphaF9jYWxfbGlzdF9jdXJyOwotI2RlZmluZSBhaF90b3RhbFBvd2VyTWVhc0kgYWhfTWVhczAudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsUG93ZXJNZWFzUSBhaF9NZWFzMS51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxJcUNvcnJNZWFzIGFoX01lYXMyLnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNJT2RkUGhhc2UgIGFoX01lYXMwLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0lFdmVuUGhhc2UgYWhfTWVhczEudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjUU9kZFBoYXNlICBhaF9NZWFzMi51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNRRXZlblBoYXNlIGFoX01lYXMzLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlICBhaF9NZWFzMC5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlIGFoX01lYXMxLnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZSAgYWhfTWVhczIuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZSBhaF9NZWFzMy5zaWduCi0JdW5pb24gewotCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl9IGFoX01lYXMwOwotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMTsKLQl1bmlvbiB7Ci0JCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCX0gYWhfTWVhczI7Ci0JdW5pb24gewotCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl9IGFoX01lYXMzOwotCXUxNiBhaF9DYWxTYW1wbGVzOwotCi0JdTMyIGFoX3N0YUlkMURlZmF1bHRzOwotCXUzMiBhaF9taXNjTW9kZTsKLQllbnVtIHsKLQkJQVVUT18zMktIWiwKLQkJVVNFXzMyS0haLAotCQlET05UX1VTRV8zMktIWiwKLQl9IGFoX2VuYWJsZTMya0h6Q2xvY2s7Ci0KLQkvKiBSRiAqLwotCXUzMiAqYWhfYW5hbG9nQmFuazBEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazFEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazJEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazNEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazZEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazZUUENEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazdEYXRhOwotCXUzMiAqYWhfYWRkYWM1NDE2XzIxOwotCXUzMiAqYWhfYmFuazZUZW1wOwotCi0JaW50MTZfdCBhaF90eFBvd2VySW5kZXhPZmZzZXQ7Ci0JdTMyIGFoX2JlYWNvbkludGVydmFsOwotCXUzMiBhaF9zbG90dGltZTsKLQl1MzIgYWhfYWNrdGltZW91dDsKLQl1MzIgYWhfY3RzdGltZW91dDsKLQl1MzIgYWhfZ2xvYmFsdHh0aW1lb3V0OwotCXU4IGFoX2dCZWFjb25SYXRlOwotCXUzMiBhaF9ncGlvU2VsZWN0OwotCXUzMiBhaF9wb2xhcml0eTsKLQl1MzIgYWhfZ3Bpb0JpdDsKLQotCS8qIEFOSSAqLwotCXUzMiBhaF9wcm9jUGh5RXJyOwotCWJvb2wgYWhfaGFzSHdQaHlDb3VudGVyczsKLQl1MzIgYWhfYW5pUGVyaW9kOwotCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYWhfY3VyYW5pOwotCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSBhaF9hbmlbMjU1XTsKLQlpbnQgYWhfdG90YWxTaXplRGVzaXJlZFs1XTsKLQlpbnQgYWhfY29hcnNlSGlnaFs1XTsKLQlpbnQgYWhfY29hcnNlTG93WzVdOwotCWludCBhaF9maXJwd3JbNV07Ci0JZW51bSBhdGg5a19hbmlfY21kIGFoX2FuaV9mdW5jdGlvbjsKLQotCXUzMiBhaF9pbnRyVHhxczsKLQlib29sIGFoX2ludHJNaXRpZ2F0aW9uOwotCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgYWhfZXh0cHJvdHNwYWNpbmc7Ci0JdTggYWhfdHhjaGFpbm1hc2s7Ci0JdTggYWhfcnhjaGFpbm1hc2s7Ci0KLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pTW9kZXM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUNvbW1vbjsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazA7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJCX1JmR2FpbjsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazE7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmsyOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rMzsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazY7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbms2VFBDOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rNzsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQWRkYWM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaVBjaWVTZXJkZXM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzQWRkaXRpb25hbDsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pTW9kZXNSeEdhaW47Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzVHhHYWluOwotCS8qIFRvIGluZGljYXRlIEVFUFJPTSBtYXBwaW5nIHVzZWQgKi8KLQllbnVtIGhhbF9lZXBfbWFwIGFoX2VlcF9tYXA7Ci19OwotI2RlZmluZSBBSDU0MTYoX2FoKSAoKHN0cnVjdCBhdGhfaGFsXzU0MTYgKikoX2FoKSkKLQotI2RlZmluZSBGUkVRMkZCSU4oeCwgeSkgKCh5KSA/ICgoeCkgLSAyMzAwKSA6ICgoKHgpIC0gNDgwMCkgLyA1KSkKLQotI2RlZmluZSBhcjU0MTZSZkRldGFjaChhaCkgZG8gewkJCQkJXAotCQlpZiAoQUg1NDE2KGFoKS0+YWhfcmZIYWwucmZEZXRhY2ggIT0gTlVMTCkJXAotCQkJQUg1NDE2KGFoKS0+YWhfcmZIYWwucmZEZXRhY2goYWgpOwlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBhdGg5a19od191c2VfZmxhc2goX2FoKQkJCVwKLQkoIShfYWgtPmFoX2ZsYWdzICYgQUhfVVNFX0VFUFJPTSkpCi0KKyNkZWZpbmUgU00oX3YsIF9mKSAgKCgoX3YpIDw8IF9mIyNfUykgJiBfZikKKyNkZWZpbmUgTVMoX3YsIF9mKSAgKCgoX3YpICYgX2YpID4+IF9mIyNfUykKKyNkZWZpbmUgUkVHX1JNVyhfYSwgX3IsIF9zZXQsIF9jbHIpICAgIFwKKwlSRUdfV1JJVEUoX2EsIF9yLCAoUkVHX1JFQUQoX2EsIF9yKSAmIH4oX2NscikpIHwgKF9zZXQpKQorI2RlZmluZSBSRUdfUk1XX0ZJRUxEKF9hLCBfciwgX2YsIF92KSBcCisJUkVHX1dSSVRFKF9hLCBfciwgXAorCShSRUdfUkVBRChfYSwgX3IpICYgfl9mKSB8ICgoKF92KSA8PCBfZiMjX1MpICYgX2YpKQorI2RlZmluZSBSRUdfU0VUX0JJVChfYSwgX3IsIF9mKSBcCisJUkVHX1dSSVRFKF9hLCBfciwgUkVHX1JFQUQoX2EsIF9yKSB8IF9mKQorI2RlZmluZSBSRUdfQ0xSX0JJVChfYSwgX3IsIF9mKSBcCisJUkVHX1dSSVRFKF9hLCBfciwgUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikKIAogI2RlZmluZSBET19ERUxBWSh4KSBkbyB7CQkJXAogCQlpZiAoKCsrKHgpICUgNjQpID09IDApICAgICAgICAgIFwKQEAgLTk2NCwxMTcgKzcxLDU3NyBAQAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQgICAgICAgICAgICAgMAorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfUENJRV9BVFRFTlRJT05fTEVEIDEKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfUE9XRVJfTEVEICAgICAyCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19UWF9GUkFNRSAgICAgICAgICAgMworI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfTUFDX05FVFdPUktfTEVEICAgIDUKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19QT1dFUl9MRUQgICAgICA2CisKKyNkZWZpbmUgQVJfR1BJT0RfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDFGRkYKKyNkZWZpbmUgQVJfR1BJT19CSVQoX2dwaW8pICAgICAgICAgICgxIDw8IChfZ3BpbykpCisKICNkZWZpbmUgQkFTRV9BQ1RJVkFURV9ERUxBWSAgICAgICAgIDEwMAogI2RlZmluZSBSVENfUExMX1NFVFRMRV9ERUxBWSAgICAgICAgMTAwMAogI2RlZmluZSBDT0VGX1NDQUxFX1MgICAgICAgICAgICAgICAgMjQKICNkZWZpbmUgSFQ0MF9DSEFOTkVMX0NFTlRFUl9TSElGVCAgIDEwCiAKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQgIDB4MAorI2RlZmluZSBBVEg5S19BTlRFTk5BMF9DSEFJTk1BU0sgICAgMHgxCisjZGVmaW5lIEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSyAgICAweDIKIAotI2RlZmluZSBBUjU0MTZfRUVQUk9NX1MgICAgICAgICAgICAgMgotI2RlZmluZSBBUjU0MTZfRUVQUk9NX09GRlNFVCAgICAgICAgMHgyMDAwCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fU1RBUlRfQUREUiBcCi0JKEFSX1NSRVZfOTEwMChhaCkpID8gMHgxZmZmMTAwMCA6IDB4NTAzZjEyMDAKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQVggICAgICAgICAgIDB4YWUwCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwX3ZlcihfYWhwKSBcCi0JKCgoX2FocCktPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4RikKLSNkZWZpbmUgYXI1NDE2X2dldF9lZXBfcmV2KF9haHApIFwKLQkoKChfYWhwKS0+YWhfZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpCi0jZGVmaW5lIGFyNTQxNl9nZXRfbnR4Y2hhaW5zKF90eGNoYWlubWFzaykgXAotCSgoKF90eGNoYWlubWFzayA+PiAyKSAmIDEpICsgXAotCQkoKF90eGNoYWlubWFzayA+PiAxKSAmIDEpICsgKF90eGNoYWlubWFzayAmIDEpKQorI2RlZmluZSBBVEg5S19OVU1fRE1BX0RFQlVHX1JFR1MgICAgOAorI2RlZmluZSBBVEg5S19OVU1fUVVFVUVTICAgICAgICAgICAgMTAKIAotLyogRUVQUk9NIDRLIGJpdCBtYXAgZGVmaW5hdGlvbnMgKi8KLSNkZWZpbmUgYXI1NDE2X2dldF9lZXA0a192ZXIoX2FocCkgICBcCi0gICAgKCgoX2FocCktPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGKQotI2RlZmluZSBhcjU0MTZfZ2V0X2VlcDRrX3JldihfYWhwKSAgIFwKLSAgICAoKChfYWhwKS0+YWhfZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRikKKyNkZWZpbmUgTUFYX1JBVEVfUE9XRVIgICAgICAgICAgICAgIDYzCisjZGVmaW5lIEFIX1dBSVRfVElNRU9VVCAgICAgICAgICAgICAxMDAwMDAgLyogKHVzKSAqLworI2RlZmluZSBBSF9USU1FX1FVQU5UVU0gICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVJfS0VZVEFCTEVfU0laRSAgICAgICAgICAgIDEyOAorI2RlZmluZSBQT1dFUl9VUF9USU1FICAgICAgICAgICAgICAgMjAwMDAwCisjZGVmaW5lIFNQVVJfUlNTSV9USFJFU0ggICAgICAgICAgICA0MAogCisjZGVmaW5lIENBQl9USU1FT1VUX1ZBTCAgICAgICAgICAgICAxMAorI2RlZmluZSBCRUFDT05fVElNRU9VVF9WQUwgICAgICAgICAgMTAKKyNkZWZpbmUgTUlOX0JFQUNPTl9USU1FT1VUX1ZBTCAgICAgIDEKKyNkZWZpbmUgU0xFRVBfU0xPUCAgICAgICAgICAgICAgICAgIDMKIAotI2lmZGVmIF9fQklHX0VORElBTgotI2RlZmluZSBBUjU0MTZfRUVQUk9NX01BR0lDIDB4NWFhNQotI2Vsc2UKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweGE1NWEKKyNkZWZpbmUgSU5JVF9DT05GSUdfU1RBVFVTICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU5JVF9SU1NJX1RIUiAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgSU5JVF9CQ09OX0NOVFJMX1JFRyAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBUVV9UT19VU0VDKF90dSkgICAgICAgICAgICAgKChfdHUpIDw8IDEwKQorCitlbnVtIHdpcmVsZXNzX21vZGUgeworCUFUSDlLX01PREVfMTFBID0gMCwKKwlBVEg5S19NT0RFXzExQiA9IDIsCisJQVRIOUtfTU9ERV8xMUcgPSAzLAorCUFUSDlLX01PREVfMTFOQV9IVDIwID0gNiwKKwlBVEg5S19NT0RFXzExTkdfSFQyMCA9IDcsCisJQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTID0gOCwKKwlBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTID0gOSwKKwlBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMgPSAxMCwKKwlBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTID0gMTEsCisJQVRIOUtfTU9ERV9NQVgKK307CisKK2VudW0gYXRoOWtfaHdfY2FwcyB7CisJQVRIOUtfSFdfQ0FQX0NIQU5fU1BSRUFECQk9IEJJVCgwKSwKKwlBVEg5S19IV19DQVBfTUlDX0FFU0NDTSAgICAgICAgICAgICAgICAgPSBCSVQoMSksCisJQVRIOUtfSFdfQ0FQX01JQ19DS0lQICAgICAgICAgICAgICAgICAgID0gQklUKDIpLAorCUFUSDlLX0hXX0NBUF9NSUNfVEtJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgzKSwKKwlBVEg5S19IV19DQVBfQ0lQSEVSX0FFU0NDTSAgICAgICAgICAgICAgPSBCSVQoNCksCisJQVRIOUtfSFdfQ0FQX0NJUEhFUl9DS0lQICAgICAgICAgICAgICAgID0gQklUKDUpLAorCUFUSDlLX0hXX0NBUF9DSVBIRVJfVEtJUCAgICAgICAgICAgICAgICA9IEJJVCg2KSwKKwlBVEg5S19IV19DQVBfVkVPTCAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoNyksCisJQVRIOUtfSFdfQ0FQX0JTU0lETUFTSyAgICAgICAgICAgICAgICAgID0gQklUKDgpLAorCUFUSDlLX0hXX0NBUF9NQ0FTVF9LRVlTRUFSQ0ggICAgICAgICAgICA9IEJJVCg5KSwKKwlBVEg5S19IV19DQVBfQ0hBTl9IQUxGUkFURSAgICAgICAgICAgICAgPSBCSVQoMTApLAorCUFUSDlLX0hXX0NBUF9DSEFOX1FVQVJURVJSQVRFICAgICAgICAgICA9IEJJVCgxMSksCisJQVRIOUtfSFdfQ0FQX0hUICAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEyKSwKKwlBVEg5S19IV19DQVBfR1RUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTMpLAorCUFUSDlLX0hXX0NBUF9GQVNUQ0MgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxNCksCisJQVRIOUtfSFdfQ0FQX1JGU0lMRU5UICAgICAgICAgICAgICAgICAgID0gQklUKDE1KSwKKwlBVEg5S19IV19DQVBfV09XICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTYpLAorCUFUSDlLX0hXX0NBUF9DU1QgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxNyksCisJQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0gICAgICAgICAgICAgICAgID0gQklUKDE4KSwKKwlBVEg5S19IV19DQVBfQVVUT1NMRUVQICAgICAgICAgICAgICAgICAgPSBCSVQoMTkpLAorCUFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUyAgICAgICAgICAgICA9IEJJVCgyMCksCisJQVRIOUtfSFdfQ0FQX1dPV19NQVRDSFBBVFRFUk5fRVhBQ1QgICAgID0gQklUKDIxKSwKKwlBVEg5S19IV19DQVBfQlRfQ09FWAkJCT0gQklUKDIyKQorfTsKKworZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgeworCUFUSDlLX0NBUF9DSVBIRVIgPSAwLAorCUFUSDlLX0NBUF9US0lQX01JQywKKwlBVEg5S19DQVBfVEtJUF9TUExJVCwKKwlBVEg5S19DQVBfRElWRVJTSVRZLAorCUFUSDlLX0NBUF9UWFBPVywKKwlBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKKwlBVEg5S19DQVBfRFMKK307CisKK3N0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgeworCXUzMiBod19jYXBzOyAvKiBBVEg5S19IV19DQVBfKiBmcm9tIGF0aDlrX2h3X2NhcHMgKi8KKwlERUNMQVJFX0JJVE1BUCh3aXJlbGVzc19tb2RlcywgQVRIOUtfTU9ERV9NQVgpOyAvKiBBVEg5S19NT0RFXyogKi8KKwl1MTYgdG90YWxfcXVldWVzOworCXUxNiBrZXljYWNoZV9zaXplOworCXUxNiBsb3dfNWdoel9jaGFuLCBoaWdoXzVnaHpfY2hhbjsKKwl1MTYgbG93XzJnaHpfY2hhbiwgaGlnaF8yZ2h6X2NoYW47CisJdTE2IG51bV9tcl9yZXRyaWVzOworCXUxNiBydHNfYWdncl9saW1pdDsKKwl1OCB0eF9jaGFpbm1hc2s7CisJdTggcnhfY2hhaW5tYXNrOworCXUxNiB0eF90cmlnbGV2ZWxfbWF4OworCXUxNiByZWdfY2FwOworCXU4IG51bV9ncGlvX3BpbnM7CisJdTggbnVtX2FudGNmZ18yZ2h6OworCXU4IG51bV9hbnRjZmdfNWdoejsKK307CisKK3N0cnVjdCBhdGg5a19vcHNfY29uZmlnIHsKKwlpbnQgZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lOworCWludCBzd19iZWFjb25fcmVzcG9uc2VfdGltZTsKKwlpbnQgYWRkaXRpb25hbF9zd2JhX2JhY2tvZmY7CisJaW50IGFja182bWI7CisJaW50IGN3bV9pZ25vcmVfZXh0Y2NhOworCXU4IHBjaWVfcG93ZXJzYXZlX2VuYWJsZTsKKwl1OCBwY2llX2wxc2twX2VuYWJsZTsKKwl1OCBwY2llX2Nsb2NrX3JlcTsKKwl1MzIgcGNpZV93YWVuOworCWludCBwY2llX3Bvd2VyX3Jlc2V0OworCXU4IHBjaWVfcmVzdG9yZTsKKwl1OCBhbmFsb2dfc2hpZnRyZWc7CisJdTggaHRfZW5hYmxlOworCXUzMiBvZmRtX3RyaWdfbG93OworCXUzMiBvZmRtX3RyaWdfaGlnaDsKKwl1MzIgY2NrX3RyaWdfaGlnaDsKKwl1MzIgY2NrX3RyaWdfbG93OworCXUzMiBlbmFibGVfYW5pOworCXU4IG5vaXNlX2ltbXVuaXR5X2xldmVsOworCXUzMiBvZmRtX3dlYWtzaWduYWxfZGV0OworCXUzMiBjY2tfd2Vha3NpZ25hbF90aHI7CisJdTggc3B1cl9pbW11bml0eV9sZXZlbDsKKwl1OCBmaXJzdGVwX2xldmVsOworCWludDhfdCByc3NpX3Rocl9oaWdoOworCWludDhfdCByc3NpX3Rocl9sb3c7CisJdTE2IGRpdmVyc2l0eV9jb250cm9sOworCXUxNiBhbnRlbm5hX3N3aXRjaF9zd2FwOworCWludCBzZXJpYWxpemVfcmVnbW9kZTsKKwlpbnQgaW50cl9taXRpZ2F0aW9uOworI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCisjZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKKyNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgorI2RlZmluZSBBUl9FRVBST01fTU9EQUxfU1BVUlMgICA1CisjZGVmaW5lIEFSX1NQVVJfNTQxM18xICAgICAgCTE2NDAKKyNkZWZpbmUgQVJfU1BVUl81NDEzXzIgICAgICAJMTIwMAorI2RlZmluZSBBUl9OT19TUFVSICAgICAgCTB4ODAwMAorI2RlZmluZSBBUl9CQVNFX0ZSRVFfMkdIWiAgIAkyMzAwCisjZGVmaW5lIEFSX0JBU0VfRlJFUV81R0haICAgCTQ5MDAKKyNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUNDAgMTkKKyNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUMjAgMTAKKwlpbnQgc3B1cm1vZGU7CisJdTE2IHNwdXJjaGFuc1tBUl9FRVBST01fTU9EQUxfU1BVUlNdWzJdOworfTsKKworZW51bSBhdGg5a19pbnQgeworCUFUSDlLX0lOVF9SWCA9IDB4MDAwMDAwMDEsCisJQVRIOUtfSU5UX1JYREVTQyA9IDB4MDAwMDAwMDIsCisJQVRIOUtfSU5UX1JYTk9GUk0gPSAweDAwMDAwMDA4LAorCUFUSDlLX0lOVF9SWEVPTCA9IDB4MDAwMDAwMTAsCisJQVRIOUtfSU5UX1JYT1JOID0gMHgwMDAwMDAyMCwKKwlBVEg5S19JTlRfVFggPSAweDAwMDAwMDQwLAorCUFUSDlLX0lOVF9UWERFU0MgPSAweDAwMDAwMDgwLAorCUFUSDlLX0lOVF9USU1fVElNRVIgPSAweDAwMDAwMTAwLAorCUFUSDlLX0lOVF9UWFVSTiA9IDB4MDAwMDA4MDAsCisJQVRIOUtfSU5UX01JQiA9IDB4MDAwMDEwMDAsCisJQVRIOUtfSU5UX1JYUEhZID0gMHgwMDAwNDAwMCwKKwlBVEg5S19JTlRfUlhLQ00gPSAweDAwMDA4MDAwLAorCUFUSDlLX0lOVF9TV0JBID0gMHgwMDAxMDAwMCwKKwlBVEg5S19JTlRfQk1JU1MgPSAweDAwMDQwMDAwLAorCUFUSDlLX0lOVF9CTlIgPSAweDAwMTAwMDAwLAorCUFUSDlLX0lOVF9USU0gPSAweDAwMjAwMDAwLAorCUFUSDlLX0lOVF9EVElNID0gMHgwMDQwMDAwMCwKKwlBVEg5S19JTlRfRFRJTVNZTkMgPSAweDAwODAwMDAwLAorCUFUSDlLX0lOVF9HUElPID0gMHgwMTAwMDAwMCwKKwlBVEg5S19JTlRfQ0FCRU5EID0gMHgwMjAwMDAwMCwKKwlBVEg5S19JTlRfVFNGT09SID0gMHgwNDAwMDAwMCwKKwlBVEg5S19JTlRfQ1NUID0gMHgxMDAwMDAwMCwKKwlBVEg5S19JTlRfR1RUID0gMHgyMDAwMDAwMCwKKwlBVEg5S19JTlRfRkFUQUwgPSAweDQwMDAwMDAwLAorCUFUSDlLX0lOVF9HTE9CQUwgPSAweDgwMDAwMDAwLAorCUFUSDlLX0lOVF9CTUlTQyA9IEFUSDlLX0lOVF9USU0gfAorCQlBVEg5S19JTlRfRFRJTSB8CisJCUFUSDlLX0lOVF9EVElNU1lOQyB8CisJCUFUSDlLX0lOVF9UU0ZPT1IgfAorCQlBVEg5S19JTlRfQ0FCRU5ELAorCUFUSDlLX0lOVF9DT01NT04gPSBBVEg5S19JTlRfUlhOT0ZSTSB8CisJCUFUSDlLX0lOVF9SWERFU0MgfAorCQlBVEg5S19JTlRfUlhFT0wgfAorCQlBVEg5S19JTlRfUlhPUk4gfAorCQlBVEg5S19JTlRfVFhVUk4gfAorCQlBVEg5S19JTlRfVFhERVNDIHwKKwkJQVRIOUtfSU5UX01JQiB8CisJCUFUSDlLX0lOVF9SWFBIWSB8CisJCUFUSDlLX0lOVF9SWEtDTSB8CisJCUFUSDlLX0lOVF9TV0JBIHwKKwkJQVRIOUtfSU5UX0JNSVNTIHwKKwkJQVRIOUtfSU5UX0dQSU8sCisJQVRIOUtfSU5UX05PQ0FSRCA9IDB4ZmZmZmZmZmYKK307CisKKyNkZWZpbmUgQ0hBTk5FTF9DV19JTlQgICAgMHgwMDAwMgorI2RlZmluZSBDSEFOTkVMX0NDSyAgICAgICAweDAwMDIwCisjZGVmaW5lIENIQU5ORUxfT0ZETSAgICAgIDB4MDAwNDAKKyNkZWZpbmUgQ0hBTk5FTF8yR0haICAgICAgMHgwMDA4MAorI2RlZmluZSBDSEFOTkVMXzVHSFogICAgICAweDAwMTAwCisjZGVmaW5lIENIQU5ORUxfUEFTU0lWRSAgIDB4MDAyMDAKKyNkZWZpbmUgQ0hBTk5FTF9EWU4gICAgICAgMHgwMDQwMAorI2RlZmluZSBDSEFOTkVMX0hBTEYgICAgICAweDA0MDAwCisjZGVmaW5lIENIQU5ORUxfUVVBUlRFUiAgIDB4MDgwMDAKKyNkZWZpbmUgQ0hBTk5FTF9IVDIwICAgICAgMHgxMDAwMAorI2RlZmluZSBDSEFOTkVMX0hUNDBQTFVTICAweDIwMDAwCisjZGVmaW5lIENIQU5ORUxfSFQ0ME1JTlVTIDB4NDAwMDAKKworI2RlZmluZSBDSEFOTkVMX0lOVEVSRkVSRU5DRSAgICAweDAxCisjZGVmaW5lIENIQU5ORUxfREZTICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ0hBTk5FTF80TVNfTElNSVQgICAgICAgMHgwNAorI2RlZmluZSBDSEFOTkVMX0RGU19DTEVBUiAgICAgICAweDA4CisjZGVmaW5lIENIQU5ORUxfRElTQUxMT1dfQURIT0MgIDB4MTAKKyNkZWZpbmUgQ0hBTk5FTF9QRVJfMTFEX0FESE9DICAgMHgyMAorCisjZGVmaW5lIENIQU5ORUxfQSAgICAgICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE0pCisjZGVmaW5lIENIQU5ORUxfQiAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0NDSykKKyNkZWZpbmUgQ0hBTk5FTF9HICAgICAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfT0ZETSkKKyNkZWZpbmUgQ0hBTk5FTF9HX0hUMjAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQyMCkKKyNkZWZpbmUgQ0hBTk5FTF9BX0hUMjAgICAgICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQyMCkKKyNkZWZpbmUgQ0hBTk5FTF9HX0hUNDBQTFVTICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQ0MFBMVVMpCisjZGVmaW5lIENIQU5ORUxfR19IVDQwTUlOVVMgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBNSU5VUykKKyNkZWZpbmUgQ0hBTk5FTF9BX0hUNDBQTFVTICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQ0MFBMVVMpCisjZGVmaW5lIENIQU5ORUxfQV9IVDQwTUlOVVMgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBNSU5VUykKKyNkZWZpbmUgQ0hBTk5FTF9BTEwJCQkJXAorCShDSEFOTkVMX09GRE18CQkJCVwKKwkgQ0hBTk5FTF9DQ0t8CQkJCVwKKwkgQ0hBTk5FTF8yR0haIHwJCQkJXAorCSBDSEFOTkVMXzVHSFogfAkJCQlcCisJIENIQU5ORUxfSFQyMCB8CQkJCVwKKwkgQ0hBTk5FTF9IVDQwUExVUyB8CQkJXAorCSBDSEFOTkVMX0hUNDBNSU5VUykKKworc3RydWN0IGF0aDlrX2NoYW5uZWwgeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwl1MTYgY2hhbm5lbDsKKwl1MzIgY2hhbm5lbEZsYWdzOworCXUzMiBjaGFubW9kZTsKKwlpbnQzMl90IENhbFZhbGlkOworCWJvb2wgb25lVGltZUNhbHNEb25lOworCWludDhfdCBpQ29mZjsKKwlpbnQ4X3QgcUNvZmY7CisJaW50MTZfdCByYXdOb2lzZUZsb29yOworfTsKKworI2RlZmluZSBJU19DSEFOX0EoX2MpICgoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQSkgPT0gQ0hBTk5FTF9BKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQyMCkgPT0gQ0hBTk5FTF9BX0hUMjApIHx8IFwKKyAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQV9IVDQwUExVUykgPT0gQ0hBTk5FTF9BX0hUNDBQTFVTKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0ME1JTlVTKSA9PSBDSEFOTkVMX0FfSFQ0ME1JTlVTKSkKKyNkZWZpbmUgSVNfQ0hBTl9HKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiAoQ0hBTk5FTF9HKSkgPT0gQ0hBTk5FTF9HKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQyMCkgPT0gQ0hBTk5FTF9HX0hUMjApIHx8IFwKKyAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfR19IVDQwUExVUykgPT0gQ0hBTk5FTF9HX0hUNDBQTFVTKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0ME1JTlVTKSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKSkKKyNkZWZpbmUgSVNfQ0hBTl9PRkRNKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfT0ZETSkgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl81R0haKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfNUdIWikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl8yR0haKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfMkdIWikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9QQVNTSVZFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfUEFTU0lWRSkgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9IQUxGX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9IQUxGKSAhPSAwKQorI2RlZmluZSBJU19DSEFOX1FVQVJURVJfUkFURShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1FVQVJURVIpICE9IDApCisjZGVmaW5lIElTX0NIQU5fQV81TUhaX1NQQUNFRChfYykJCQlcCisJKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF81R0haKSAhPSAwKSAmJglcCisJICgoKF9jKS0+Y2hhbm5lbCAlIDIwKSAhPSAwKSAmJgkJCVwKKwkgKCgoX2MpLT5jaGFubmVsICUgMTApICE9IDApKQorCisvKiBUaGVzZSBtYWNyb3MgY2hlY2sgY2hhbm1vZGUgYW5kIG5vdCBjaGFubmVsRmxhZ3MgKi8KKyNkZWZpbmUgSVNfQ0hBTl9CKF9jKSAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9CKQorI2RlZmluZSBJU19DSEFOX0hUMjAoX2MpICgoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUMjApIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKSkKKyNkZWZpbmUgSVNfQ0hBTl9IVDQwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwJXAorCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykgfHwJXAorCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBQTFVTKSB8fAlcCisJCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKSkKKyNkZWZpbmUgSVNfQ0hBTl9IVChfYykgKElTX0NIQU5fSFQyMCgoX2MpKSB8fCBJU19DSEFOX0hUNDAoKF9jKSkpCisKK2VudW0gYXRoOWtfcG93ZXJfbW9kZSB7CisJQVRIOUtfUE1fQVdBS0UgPSAwLAorCUFUSDlLX1BNX0ZVTExfU0xFRVAsCisJQVRIOUtfUE1fTkVUV09SS19TTEVFUCwKKwlBVEg5S19QTV9VTkRFRklORUQKK307CisKK2VudW0gYXRoOWtfYW50X3NldHRpbmcgeworCUFUSDlLX0FOVF9WQVJJQUJMRSA9IDAsCisJQVRIOUtfQU5UX0ZJWEVEX0EsCisJQVRIOUtfQU5UX0ZJWEVEX0IKK307CisKK2VudW0gYXRoOWtfdHBfc2NhbGUgeworCUFUSDlLX1RQX1NDQUxFX01BWCA9IDAsCisJQVRIOUtfVFBfU0NBTEVfNTAsCisJQVRIOUtfVFBfU0NBTEVfMjUsCisJQVRIOUtfVFBfU0NBTEVfMTIsCisJQVRIOUtfVFBfU0NBTEVfTUlOCit9OworCitlbnVtIHNlcl9yZWdfbW9kZSB7CisJU0VSX1JFR19NT0RFX09GRiA9IDAsCisJU0VSX1JFR19NT0RFX09OID0gMSwKKwlTRVJfUkVHX01PREVfQVVUTyA9IDIsCit9OworCitzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIHsKKwl1MzIgYnNfbmV4dHRidHQ7CisJdTMyIGJzX25leHRkdGltOworCXUzMiBic19pbnR2YWw7CisjZGVmaW5lIEFUSDlLX0JFQUNPTl9QRVJJT0QgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBBVEg5S19CRUFDT05fRU5BICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQVRIOUtfQkVBQ09OX1JFU0VUX1RTRiAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFUSDlLX1RTRk9PUl9USFJFU0hPTEQgICAgMHgwMDAwNDI0MCAvKiAxNmsgdXMgKi8KKwl1MzIgYnNfZHRpbXBlcmlvZDsKKwl1MTYgYnNfY2ZwcGVyaW9kOworCXUxNiBic19jZnBtYXhkdXJhdGlvbjsKKwl1MzIgYnNfY2ZwbmV4dDsKKwl1MTYgYnNfdGltb2Zmc2V0OworCXUxNiBic19ibWlzc3RocmVzaG9sZDsKKwl1MzIgYnNfc2xlZXBkdXJhdGlvbjsKKwl1MzIgYnNfdHNmb29yX3RocmVzaG9sZDsKK307CisKK3N0cnVjdCBjaGFuX2NlbnRlcnMgeworCXUxNiBzeW50aF9jZW50ZXI7CisJdTE2IGN0bF9jZW50ZXI7CisJdTE2IGV4dF9jZW50ZXI7Cit9OworCitlbnVtIHsKKwlBVEg5S19SRVNFVF9QT1dFUl9PTiwKKwlBVEg5S19SRVNFVF9XQVJNLAorCUFUSDlLX1JFU0VUX0NPTEQsCit9OworCitzdHJ1Y3QgYXRoOWtfaHdfdmVyc2lvbiB7CisJdTMyIG1hZ2ljOworCXUxNiBkZXZpZDsKKwl1MTYgc3VidmVuZG9yaWQ7CisJdTMyIG1hY1ZlcnNpb247CisJdTE2IG1hY1JldjsKKwl1MTYgcGh5UmV2OworCXUxNiBhbmFsb2c1R2h6UmV2OworCXUxNiBhbmFsb2cyR2h6UmV2OworfTsKKworc3RydWN0IGF0aF9odyB7CisJc3RydWN0IGF0aF9zb2Z0YyAqYWhfc2M7CisJc3RydWN0IGF0aDlrX2h3X3ZlcnNpb24gaHdfdmVyc2lvbjsKKwlzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyBjb25maWc7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyBjYXBzOworCXN0cnVjdCBhdGg5a19yZWd1bGF0b3J5IHJlZ3VsYXRvcnk7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgY2hhbm5lbHNbMzhdOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuOworCisJdW5pb24geworCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgZGVmOworCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayBtYXA0azsKKwl9IGVlcHJvbTsKKwljb25zdCBzdHJ1Y3QgZWVwcm9tX29wcyAqZWVwX29wczsKKwllbnVtIGF0aDlrX2VlcF9tYXAgZWVwX21hcDsKKworCWJvb2wgc3dfbWdtdF9jcnlwdG87CisJYm9vbCBpc19wY2lleHByZXNzOworCXU4IG1hY2FkZHJbRVRIX0FMRU5dOworCXUxNiB0eF90cmlnX2xldmVsOworCXUxNiByZnNpbGVudDsKKwl1MzIgcmZraWxsX2dwaW87CisJdTMyIHJma2lsbF9wb2xhcml0eTsKKwl1MzIgYnRhY3RpdmVfZ3BpbzsKKwl1MzIgd2xhbmFjdGl2ZV9ncGlvOworCXUzMiBhaF9mbGFnczsKKworCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOworCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBwb3dlcl9tb2RlOworCWVudW0gYXRoOWtfcG93ZXJfbW9kZSByZXN0b3JlX21vZGU7CisKKwlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCBuZkNhbEhpc3RbTlVNX05GX1JFQURJTkdTXTsKKwlzdHJ1Y3QgYXI1NDE2U3RhdHMgc3RhdHM7CisJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOworCisJaW50MTZfdCBjdXJjaGFuX3JhZF9pbmRleDsKKwl1MzIgbWFza19yZWc7CisJdTMyIHR4b2tfaW50ZXJydXB0X21hc2s7CisJdTMyIHR4ZXJyX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGRlc2NfaW50ZXJydXB0X21hc2s7CisJdTMyIHR4ZW9sX2ludGVycnVwdF9tYXNrOworCXUzMiB0eHVybl9pbnRlcnJ1cHRfbWFzazsKKwlib29sIGNoaXBfZnVsbHNsZWVwOworCXUzMiBhdGltX3dpbmRvdzsKKwl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKKwllbnVtIGF0aDlrX2FudF9zZXR0aW5nIGRpdmVyc2l0eV9jb250cm9sOworCisJLyogQ2FsaWJyYXRpb24gKi8KKwllbnVtIGhhbF9jYWxfdHlwZXMgc3VwcF9jYWxzOworCXN0cnVjdCBoYWxfY2FsX2xpc3QgaXFfY2FsZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFkY2dhaW5fY2FsZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFkY2RjX2NhbGluaXRkYXRhOworCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWRjZGNfY2FsZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxfbGlzdDsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxfbGlzdF9sYXN0OworCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmNhbF9saXN0X2N1cnI7CisjZGVmaW5lIHRvdGFsUG93ZXJNZWFzSSBtZWFzMC51bnNpZ24KKyNkZWZpbmUgdG90YWxQb3dlck1lYXNRIG1lYXMxLnVuc2lnbgorI2RlZmluZSB0b3RhbElxQ29yck1lYXMgbWVhczIuc2lnbgorI2RlZmluZSB0b3RhbEFkY0lPZGRQaGFzZSAgbWVhczAudW5zaWduCisjZGVmaW5lIHRvdGFsQWRjSUV2ZW5QaGFzZSBtZWFzMS51bnNpZ24KKyNkZWZpbmUgdG90YWxBZGNRT2RkUGhhc2UgIG1lYXMyLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY1FFdmVuUGhhc2UgbWVhczMudW5zaWduCisjZGVmaW5lIHRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2UgIG1lYXMwLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2UgbWVhczEuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlICBtZWFzMi5zaWduCisjZGVmaW5lIHRvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlIG1lYXMzLnNpZ24KKwl1bmlvbiB7CisJCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCX0gbWVhczA7CisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMxOworCXVuaW9uIHsKKwkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJfSBtZWFzMjsKKwl1bmlvbiB7CisJCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCX0gbWVhczM7CisJdTE2IGNhbF9zYW1wbGVzOworCisJdTMyIHN0YV9pZDFfZGVmYXVsdHM7CisJdTMyIG1pc2NfbW9kZTsKKwllbnVtIHsKKwkJQVVUT18zMktIWiwKKwkJVVNFXzMyS0haLAorCQlET05UX1VTRV8zMktIWiwKKwl9IGVuYWJsZV8zMmtIel9jbG9jazsKKworCS8qIFJGICovCisJdTMyICphbmFsb2dCYW5rMERhdGE7CisJdTMyICphbmFsb2dCYW5rMURhdGE7CisJdTMyICphbmFsb2dCYW5rMkRhdGE7CisJdTMyICphbmFsb2dCYW5rM0RhdGE7CisJdTMyICphbmFsb2dCYW5rNkRhdGE7CisJdTMyICphbmFsb2dCYW5rNlRQQ0RhdGE7CisJdTMyICphbmFsb2dCYW5rN0RhdGE7CisJdTMyICphZGRhYzU0MTZfMjE7CisJdTMyICpiYW5rNlRlbXA7CisKKwlpbnQxNl90IHR4cG93ZXJfaW5kZXhvZmZzZXQ7CisJdTMyIGJlYWNvbl9pbnRlcnZhbDsKKwl1MzIgc2xvdHRpbWU7CisJdTMyIGFja3RpbWVvdXQ7CisJdTMyIGN0c3RpbWVvdXQ7CisJdTMyIGdsb2JhbHR4dGltZW91dDsKKwl1OCBnYmVhY29uX3JhdGU7CisKKwkvKiBBTkkgKi8KKwl1MzIgcHJvY19waHllcnI7CisJYm9vbCBoYXNfaHdfcGh5Y291bnRlcnM7CisJdTMyIGFuaXBlcmlvZDsKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmN1cmFuaTsKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgYW5pWzI1NV07CisJaW50IHRvdGFsU2l6ZURlc2lyZWRbNV07CisJaW50IGNvYXJzZV9oaWdoWzVdOworCWludCBjb2Fyc2VfbG93WzVdOworCWludCBmaXJwd3JbNV07CisJZW51bSBhdGg5a19hbmlfY21kIGFuaV9mdW5jdGlvbjsKKworCXUzMiBpbnRyX3R4cXM7CisJYm9vbCBpbnRyX21pdGlnYXRpb247CisJZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZzsKKwl1OCB0eGNoYWlubWFzazsKKwl1OCByeGNoYWlubWFzazsKKworCXUzMiBvcmlnaW5hbEdhaW5bMjJdOworCWludCBpbml0UERBREM7CisJaW50IFBEQURDZGVsdGE7CisKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUNvbW1vbjsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazA7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJCX1JmR2FpbjsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazE7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmsyOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rMzsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazY7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbms2VFBDOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rNzsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQWRkYWM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaVBjaWVTZXJkZXM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzQWRkaXRpb25hbDsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNSeEdhaW47CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzVHhHYWluOworfTsKKworLyogQXR0YWNoLCBEZXRhY2gsIFJlc2V0ICovCitjb25zdCBjaGFyICphdGg5a19od19wcm9iZSh1MTYgdmVuZG9yaWQsIHUxNiBkZXZpZCk7Cit2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7CitzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICplcnJvcik7Cit2b2lkIGF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2ludCBhdGg5a19od19yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCSAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UpOworYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKKwkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyICpyZXN1bHQpOworYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpOworCisvKiBLZXkgQ2FjaGUgTWFuYWdlbWVudCAqLworYm9vbCBhdGg5a19od19rZXlyZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5KTsKK2Jvb2wgYXRoOWtfaHdfa2V5c2V0bWFjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpOworYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKKwkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKKwkJCQkgY29uc3QgdTggKm1hYyk7Citib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSk7CisKKy8qIEdQSU8gLyBSRktJTEwgLyBBbnRlbm5hZSAqLwordm9pZCBhdGg5a19od19jZmdfZ3Bpb19pbnB1dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8pOwordTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3Bpbyk7Cit2b2lkIGF0aDlrX2h3X2NmZ19vdXRwdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBncGlvLAorCQkJIHUzMiBhaF9zaWduYWxfdHlwZSk7Cit2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCk7CisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQordm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaHcgKmFoKTsKICNlbmRpZgordTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYW50ZW5uYSk7Citib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9odyAqYWgsCisJCQkgICAgICAgZW51bSBhdGg5a19hbnRfc2V0dGluZyBzZXR0aW5ncywKKwkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgICB1OCAqdHhfY2hhaW5tYXNrLCB1OCAqcnhfY2hhaW5tYXNrLAorCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpOwogCi0jZGVmaW5lIEFUSDlLX1BPV19TTShfciwgX3MpICAgICAoKChfcikgJiAweDNmKSA8PCAoX3MpKQorLyogR2VuZXJhbCBPcGVyYXRpb24gKi8KK2Jvb2wgYXRoOWtfaHdfd2FpdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwsIHUzMiB0aW1lb3V0KTsKK3UzMiBhdGg5a19od19yZXZlcnNlX2JpdHModTMyIHZhbCwgdTMyIG4pOworYm9vbCBhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGZsYWdzLCB1MTYgKmxvdywgdTE2ICpoaWdoKTsKK3UxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVzLAorCQkJICAgdTMyIGZyYW1lTGVuLCB1MTYgcmF0ZWl4LCBib29sIHNob3J0UHJlYW1ibGUpOwordm9pZCBhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICBzdHJ1Y3QgY2hhbl9jZW50ZXJzICpjZW50ZXJzKTsKK3UzMiBhdGg5a19od19nZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3NldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYml0cyk7Citib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBsaW1pdCk7Cit2b2lkIGF0aDlrX2h3X3NldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgY29uc3QgdTggKm1hYyk7Cit2b2lkIGF0aDlrX2h3X3NldG9wbW9kZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZmlsdGVyMCwgdTMyIGZpbHRlcjEpOwordm9pZCBhdGg5a19od19zZXRic3NpZG1hc2soc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3U2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3NldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoLCB1NjQgdHNmNjQpOwordm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZyk7Citib29sIGF0aDlrX2h3X3NldHNsb3R0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpOwordm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2h0X21hY21vZGUgbW9kZSk7Cit2b2lkIGF0aDlrX2h3X2JlYWNvbmluaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwordm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKTsKK2Jvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCisJCSAgICAgICBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSk7Cit2b2lkIGF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHJlc3RvcmUpOwogCi0jZGVmaW5lIEFUSDlLX0FOVEVOTkEwX0NIQUlOTUFTSyAgICAgICAgMHgxCi0jZGVmaW5lIEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSyAgICAgICAgMHgyCisvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KK2Jvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19nZXRpc3Ioc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpOworZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2h3ICphaCk7CitlbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgaW50cyk7CiAKLSNkZWZpbmUgQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTICAgICAgICA4Ci0jZGVmaW5lIEFUSDlLX05VTV9RVUVVRVMgICAgICAgICAgICAgICAgMTAKLQotI2RlZmluZSBIQUxfTk9JU0VfSU1NVU5FX01BWCAgICAgICAgICAgIDQKLSNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICA3Ci0jZGVmaW5lIEhBTF9GSVJTVF9TVEVQX01BWCAgICAgICAgICAgICAgMgotCi0jZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKLSNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAotI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCi0jZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKLSNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKLSNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKLSNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCi0jZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3Ci0jZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCi0jZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAotI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNwotI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCi0KLSNkZWZpbmUgQVJfR1BJT0RfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAxRkZGCi0jZGVmaW5lIEFSX0dQSU9fQklUKF9ncGlvKSAgICAgICAgICAgICAgKDEgPDwgKF9ncGlvKSkKLQotI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkgXAotCSgoKCh4KSUobXVsKSkgPj0gKChtdWwpLzIpKSA/ICgoeCkgKyAoKG11bCkgLSAxKSkgLyAobXVsKSA6ICh4KS8obXVsKSkKLSNkZWZpbmUgQkVBQ09OX1JTU0koYWhwKSBcCi0JSEFMX0VQX1JORChhaHAtPmFoX3N0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksIFwKLQkJQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQotCi0jZGVmaW5lIGFoX21pYlN0YXRzICAgICBhaF9zdGF0cy5hc3RfbWlic3RhdHMKLQotI2RlZmluZSBBSF9USU1FT1VUICAgICAgICAgMTAwMDAwCi0jZGVmaW5lIEFIX1RJTUVfUVVBTlRVTSAgICAgICAgMTAKLQotI2RlZmluZSBBUl9LRVlUQUJMRV9TSVpFIDEyOAotI2RlZmluZSBQT1dFUl9VUF9USU1FICAgIDIwMDAwMAotCi0jZGVmaW5lIEVYVF9BRERJVElWRSAoMHg4MDAwKQotI2RlZmluZSBDVExfMTFBX0VYVCAoQ1RMXzExQSB8IEVYVF9BRERJVElWRSkKLSNkZWZpbmUgQ1RMXzExR19FWFQgKENUTF8xMUcgfCBFWFRfQURESVRJVkUpCi0jZGVmaW5lIENUTF8xMUJfRVhUIChDVExfMTFCIHwgRVhUX0FERElUSVZFKQotCi0jZGVmaW5lIFNVQl9OVU1fQ1RMX01PREVTX0FUXzVHXzQwIDIKLSNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDAgMwotI2RlZmluZSBTUFVSX1JTU0lfVEhSRVNIIDQwCi0KLSNkZWZpbmUgVFVfVE9fVVNFQyhfdHUpICAgICAgICAgKChfdHUpIDw8IDEwKQotCi0jZGVmaW5lIENBQl9USU1FT1VUX1ZBTCAgICAgICAgIDEwCi0jZGVmaW5lIEJFQUNPTl9USU1FT1VUX1ZBTCAgICAgIDEwCi0jZGVmaW5lIE1JTl9CRUFDT05fVElNRU9VVF9WQUwgICAxCi0jZGVmaW5lIFNMRUVQX1NMT1AgICAgICAgICAgICAgICAzCi0KLSNkZWZpbmUgQ0NLX1NJRlNfVElNRSAgICAgICAgMTAKLSNkZWZpbmUgQ0NLX1BSRUFNQkxFX0JJVFMgICAxNDQKLSNkZWZpbmUgQ0NLX1BMQ1BfQklUUyAgICAgICAgNDgKLQotI2RlZmluZSBPRkRNX1NJRlNfVElNRSAgICAgICAgMTYKLSNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FICAgIDIwCi0jZGVmaW5lIE9GRE1fUExDUF9CSVRTICAgICAgICAyMgotI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FICAgICAgNAotCi0jZGVmaW5lIE9GRE1fU0lGU19USU1FX0hBTEYgICAgIDMyCi0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9IQUxGIDQwCi0jZGVmaW5lIE9GRE1fUExDUF9CSVRTX0hBTEYgICAgIDIyCi0jZGVmaW5lIE9GRE1fU1lNQk9MX1RJTUVfSEFMRiAgIDgKLQotI2RlZmluZSBPRkRNX1NJRlNfVElNRV9RVUFSVEVSICAgICAgNjQKLSNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FX1FVQVJURVIgIDgwCi0jZGVmaW5lIE9GRE1fUExDUF9CSVRTX1FVQVJURVIgICAgICAyMgotI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIgICAgMTYKLQotdTMyIGF0aDlrX2h3X2dldF9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJZW51bSBlZXByb21fcGFyYW0gcGFyYW0pOwordm9pZCBhdGg5a19od19idGNvZXhfZW5hYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaAppbmRleCBmM2NmYTE2Li4xZDYwYzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2luaXR2YWxzLmgKQEAgLTE0LDggKzE0LDcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotLyogQVI1NDE2IHRvIEZvd2wgYXI1MTQ2LmluaSAqLwotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZNb2Rlc185MTAwW11bNl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCkBAIC03OSw3ICs3OCw3IEBACiAgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbl85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbltdWzJdID0gewogICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAogICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LApAQCAtNDU3LDEyICs0NTYsMTIgQEAKICAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazBfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgxZTU3OTVlNSB9LAogICAgIHsgMHgwMDAwOThlMCwgMHgwMjAwODAyMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5fOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5bXVszXSA9IHsKICAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAgfSwKICAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSwKQEAgLTUyOSwyMSArNTI4LDIxIEBACiAgICAgeyAweDAwMDA5YWZjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmsxXzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFbXVsyXSA9IHsKICAgICB7IDB4MDAwMDk4YjAsIDB4MDIxMDg0MjEgfSwKICAgICB7IDB4MDAwMDk4ZWMsIDB4MDAwMDAwMDggfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazJfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMltdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwZTczZmYxNyB9LAogICAgIHsgMHgwMDAwOThlMCwgMHgwMDAwMDQyMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM185MTAwW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmszW11bM10gPSB7CiAgICAgeyAweDAwMDA5OGYwLCAweDAxNDAwMDE4LCAweDAxYzAwMDE4IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZbXVszXSA9IHsKIAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtNTgwLDcgKzU3OSw3IEBACiAgICAgeyAweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2VFBDXzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENbXVszXSA9IHsKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTYxNiwxMyArNjE1LDEzIEBACiAgICAgeyAweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3XzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdbXVsyXSA9IHsKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA1MDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA4MDAgfSwKICAgICB7IDB4MDAwMDk4Y2MsIDB4MDAwMDAwMGUgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY1tdWzJdID0gewogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMyB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LApAQCAtNjU5LDExICs2NTgsMTAgQEAKICAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOThjNCwgIDB4MDAwMDAwMDAgfSwKKyAgICB7MHgwMDAwOThjYywgIDB4MDAwMDAwMDAgfSwKIH07CiAKLS8qIGFyNTQxNiAtIGhvd2wgYXI1NDE2X2hvd2wuaW5pICovCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzW11bNl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzXzkxMDBbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKQEAgLTczNyw3ICs3MzUsNyBAQAogICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZDb21tb25bXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uXzkxMDBbXVsyXSA9IHsKICAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwMTUgfSwKICAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKQEAgLTExMTEsMTIgKzExMDksMTIgQEAKICAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazBfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgxZTU3OTVlNSB9LAogICAgIHsgMHgwMDAwOThlMCwgMHgwMjAwODAyMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5bXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QkJfUmZHYWluXzkxMDBbXVszXSA9IHsKICAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAgfSwKICAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSwKQEAgLTExODMsMjEgKzExODEsMjEgQEAKICAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMX0sCiAgICAgeyAweDAwMDA5OGVjLCAweDAwMDAwMDA4fSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazJbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazJfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwZTczZmYxN30sCiAgICAgeyAweDAwMDA5OGUwLCAweDAwMDAwNDIwfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNfOTEwMFtdWzNdID0gewogICAgIHsgMHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNltdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNl85MTAwW11bM10gPSB7CiAKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTEyMzUsNyArMTIzMyw3IEBACiB9OwogCiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENfOTEwMFtdWzNdID0gewogCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCkBAIC0xMjcyLDEzICsxMjcwLDEzIEBACiAgICAgeyAweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3W11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3XzkxMDBbXVsyXSA9IHsKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA1MDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA4MDAgfSwKICAgICB7IDB4MDAwMDk4Y2MsIDB4MDAwMDAwMGUgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNfOTEwMFtdWzJdID0gewogICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCiAgICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LApAQCAtMTMxMyw3ICsxMzExLDYgQEAKICAgICB7MHgwMDAwOThjYywgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogQVI1NDE2IDkxNjAgU293bCBhcjU0MTZfc293bC5pbmkgKi8KIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNfOTE2MFtdWzZdID0gewogICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LApAQCAtMjU0OSw2ICsyNTQ2LDggQEAKICAgICB7IDB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDggfSwKICAgICB7IDB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDAsIDB4MDZlMDA2ZTAgfSwKICAgICB7IDB4MDAwMDgwMWMsIDB4MTI4ZDgwMjcsIDB4MTI4ZDgwNGYsIDB4MTJlMDAwNTcsIDB4MTJlMDAwMmIsIDB4MDk4ODAwNGYgfSwKKyAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAgfSwKKyAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGEgfSwKICAgICB7IDB4MDAwMDgzMTgsIDB4MDAwMDNlODAsIDB4MDAwMDdkMDAsIDB4MDAwMDY4ODAsIDB4MDAwMDM0NDAsIDB4MDAwMDY4ODAgfSwKICAgICB7IDB4MDAwMDk4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDMgfSwKICAgICB7IDB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSwKQEAgLTI1ODcsNyArMjU4Niw2IEBACiAgICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCiAgICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjUwLCAweDAwMWZmMDAwLCAweDAwMWZmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCi0gICAgeyAweDAwMDBhMjc0LCAweDBhMTljNjUyLCAweDBhMTljNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCiAgICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCiAgICAgeyAweDAwMDBhM2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA3ODk0LCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwIH0sCkBAIC0yNzE5LDcgKzI3MTcsNiBAQAogICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAogICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAogICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCB9LAogICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LApAQCAtMjczNSw3ICsyNzMyLDYgQEAKICAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKICAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMTAgfSwKICAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKQEAgLTI4MTcsNyArMjgxMyw3IEBACiAgICAgeyAweDAwMDA5OTU4LCAweDIxMDhlY2ZmIH0sCiAgICAgeyAweDAwMDA5OTQwLCAweDE0NzUwNjA0IH0sCiAgICAgeyAweDAwMDBjOTVjLCAweDAwNGI2YThlIH0sCi0gICAgeyAweDAwMDA5OTY4LCAweDAwMDAwM2NlIH0sCisgICAgeyAweDAwMDBjOTY4LCAweDAwMDAwM2NlIH0sCiAgICAgeyAweDAwMDA5OTcwLCAweDE5MGZiNTE1IH0sCiAgICAgeyAweDAwMDA5OTc0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5OTc4LCAweDAwMDAwMDAxIH0sCkBAIC0yOTA5LDE2ICsyOTA1LDEyIEBACiAgICAgeyAweDAwMDA3ODBjLCAweDIxMDg0MjEwIH0sCiAgICAgeyAweDAwMDA3ODEwLCAweDZkODAxMzAwIH0sCiAgICAgeyAweDAwMDA3ODE4LCAweDA3ZTQxMDAwIH0sCi0gICAgeyAweDAwMDA3ODFjLCAweDAwMzkyMDAwIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDkyNTkyNDgwIH0sCiAgICAgeyAweDAwMDA3ODI0LCAweDAwMDQwMDAwIH0sCiAgICAgeyAweDAwMDA3ODI4LCAweGRiMDA1MDEyIH0sCiAgICAgeyAweDAwMDA3ODJjLCAweDA0OTI0OTE0IH0sCiAgICAgeyAweDAwMDA3ODMwLCAweDIxMDg0MjEwIH0sCiAgICAgeyAweDAwMDA3ODM0LCAweDZkODAxMzAwIH0sCiAgICAgeyAweDAwMDA3ODNjLCAweDA3ZTQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODQwLCAweDAwMzkyMDAwIH0sCi0gICAgeyAweDAwMDA3ODQ0LCAweDkyNTkyNDgwIH0sCiAgICAgeyAweDAwMDA3ODQ4LCAweDAwMTAwMDAwIH0sCiAgICAgeyAweDAwMDA3ODRjLCAweDc3M2YwNTY3IH0sCiAgICAgeyAweDAwMDA3ODUwLCAweDU0MjE0NTE0IH0sCkBAIC0yOTU0LDcgKzI5NDYsNiBAQAogICAgIHsgMHgwMDAwOTg0NCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMSB9LAogICAgIHsgMHgwMDAwOTkxNCwgMHgwMDAwMDg5OCwgMHgwMDAwMTEzMCB9LAogICAgIHsgMHgwMDAwOTkxOCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNiB9LAotICAgIHsgMHgwMDAwOTk0NCwgMHhkZmJjMTIxMCwgMHhkZmJjMTIxMCB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODBNb2Rlc19iYWNrb2ZmXzIzZGJfcnhnYWluXzkyODBfMltdWzZdID0gewpAQCAtMzM2NiwyMSArMzM1NywyNiBAQAogICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAxNTA0YSwgMHgwMDAxNTA0YSwgMHgwMDAxODIwYSwgMHgwMDAxODIwYSwgMHgwMDAxODIwYSB9LAogICAgIHsgMHgwMDAwYTMxYywgMHgwMDAxOTA0YywgMHgwMDAxOTA0YywgMHgwMDAxYjIxMSwgMHgwMDAxYjIxMSwgMHgwMDAxYjIxMSB9LAogICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAxYzA0ZSwgMHgwMDAxYzA0ZSwgMHgwMDAxZTIxMywgMHgwMDAxZTIxMywgMHgwMDAxZTIxMyB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAyMDA5MiwgMHgwMDAyMDA5MiwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAyNDEwYSwgMHgwMDAyNDEwYSwgMHgwMDAyNTQxMywgMHgwMDAyNTQxMywgMHgwMDAyNTQxMyB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAyNzEwYywgMHgwMDAyNzEwYywgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAyYjE4YiwgMHgwMDAyYjE4YiwgMHgwMDAyYzgxMywgMHgwMDAyYzgxMywgMHgwMDAyYzgxMyB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAyZTFjYywgMHgwMDAyZTFjYywgMHgwMDAzMGExNCwgMHgwMDAzMGExNCwgMHgwMDAzMGExNCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YyB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA1M2ZkNSwgMHgwMDA1M2ZkNSwgMHgwMDA1M2ZkNSB9LAorICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAyMTA5MiwgMHgwMDAyMTA5MiwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSB9LAorICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAyNTEwYSwgMHgwMDAyNTEwYSwgMHgwMDAyNTQxMywgMHgwMDAyNTQxMywgMHgwMDAyNTQxMyB9LAorICAgIHsgMHgwMDAwYTMyYywgMHgwMDAyOTEwYywgMHgwMDAyOTEwYywgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSB9LAorICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAyYzE4YiwgMHgwMDAyYzE4YiwgMHgwMDAyYzgxMywgMHgwMDAyYzgxMywgMHgwMDAyYzgxMyB9LAorICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAyZjFjYywgMHgwMDAyZjFjYywgMHgwMDAzMGExNCwgMHgwMDAzMGExNCwgMHgwMDAzMGExNCB9LAorICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzMjFlYiwgMHgwMDAzMjFlYiwgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCB9LAorICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YyB9LAorICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSB9LAorICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiB9LAorICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiB9LAorICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSB9LAorICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCB9LAorICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA1NWZkNSwgMHgwMDA1NWZkNSwgMHgwMDA1NWZkNSB9LAogICAgIHsgMHgwMDAwNzgxNCwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiB9LAogICAgIHsgMHgwMDAwNzgzOCwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiB9LAorICAgIHsgMHgwMDAwNzgxYywgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCB9LAorICAgIHsgMHgwMDAwNzg0MCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCB9LAorICAgIHsgMHgwMDAwNzgyMCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCB9LAorICAgIHsgMHgwMDAwNzg0NCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCB9LAorICAgIHsgMHgwMDAwYTI3NCwgMHgwYTE5ZTY1MiwgMHgwYTE5ZTY1MiwgMHgwYTFhYTY1MiwgMHgwYTFhYTY1MiwgMHgwYTFhYTY1MiB9LAogICAgIHsgMHgwMDAwYTI3YywgMHgwNTA3MzljZSwgMHgwNTA3MzljZSwgMHgwNTA3MzljZSwgMHgwNTA3MzljZSwgMHgwNTA3MzljZSB9LAogfTsKIApAQCAtMzQwOSw2ICszNDA1LDExIEBACiAgICAgeyAweDAwMDBhMzU0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRiZjQyLCAweDAwMDRiZjQyLCAweDAwMDRiZjQyIH0sCiAgICAgeyAweDAwMDA3ODE0LCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmIH0sCiAgICAgeyAweDAwMDA3ODM4LCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmIH0sCisgICAgeyAweDAwMDA3ODFjLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwIH0sCisgICAgeyAweDAwMDA3ODQwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwIH0sCisgICAgeyAweDAwMDA3ODIwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwIH0sCisgICAgeyAweDAwMDA3ODQ0LCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMTljNjUyLCAweDBhMTljNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCiAgICAgeyAweDAwMDBhMjdjLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlIH0sCiB9OwogCkBAIC00MTIwLDYgKzQxMjEsNyBAQAogICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAogfTsKIAorLyogQVI5Mjg1IHYxXzIgUENJIFJlZ2lzdGVyIFdyaXRlcy4gIENyZWF0ZWQ6IDAzLzA0LzA5ICovCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzXzkyODVfMV8yW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCkBAIC00MTM1LDExICs0MTM3LDExIEBACiAgICAgeyAweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCiAgICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCiAgICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIwMDIwLCAweDAzNzIwMDIwLCAweDAzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAwMDU3LCAweDAwMDAwMDU3LCAweDAwMDAxMDU5IH0sCisgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNjIwLCAweDAzNzIxNjIwLCAweDAzNzIxNmEwIH0sCisgICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCiAgICAgeyAweDAwMDA5ODUwLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyIH0sCiAgICAgeyAweDAwMDA5ODU4LCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzY2MDVlLCAweDMxMzY2MDVlLCAweDMxMzk2MDVlIH0sCisgICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlIH0sCiAgICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCiAgICAgeyAweDAwMDA5ODY0LCAweDAwMDBmZTAwLCAweDAwMDBmZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCiAgICAgeyAweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCkBAIC00MTU0LDI5MSArNDE1NiwyNzIgQEAKICAgICB7IDB4MDAwMDk5YmMsIDB4MDAwMDA2MDAsIDB4MDAwMDA2MDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKICAgICB7IDB4MDAwMDk5YzAsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQgfSwKICAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcgfSwKLSAgICB7IDB4MDAwMDk5YzgsIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjkgfSwKKyAgICB7IDB4MDAwMDk5YzgsIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjkgfSwKICAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzggfSwKICAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQgfSwKICAgICB7IDB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk5ZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODQsIDB4MDAwNjgwODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODgsIDB4MDAwNjgwODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwOGMsIDB4MDAwNjgwOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDAsIDB4MDAwNjgxMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDQsIDB4MDAwNjgxMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDgsIDB4MDAwNjgxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMGMsIDB4MDAwNjgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTQsIDB4MDAwNjgxMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODAsIDB4MDAwNjgxODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODQsIDB4MDAwNjgxODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODgsIDB4MDAwNjgxODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOGMsIDB4MDAwNjgxOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTAsIDB4MDAwNjgxOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTQsIDB4MDAwNjgxOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTAsIDB4MDAwNjgxYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMGMsIDB4MDAwNjgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTgsIDB4MDAwNjgxYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyODQsIDB4MDAwNjgyODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyODgsIDB4MDAwNjgyODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMjAsIDB4MDAwNjgyMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyOTAsIDB4MDAwNjgyOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDAsIDB4MDAwNjgzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDQsIDB4MDAwNjgzMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDgsIDB4MDAwNjgzMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMGMsIDB4MDAwNjgzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzODAsIDB4MDAwNjgzODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzODQsIDB4MDAwNjgzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODQsIDB4MDAwNTgwODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODgsIDB4MDAwNTgwODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwOGMsIDB4MDAwNTgwOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDAsIDB4MDAwNTgxMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDQsIDB4MDAwNTgxMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDgsIDB4MDAwNTgxMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMGMsIDB4MDAwNTgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTAsIDB4MDAwNTgxMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTQsIDB4MDAwNTgxMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODAsIDB4MDAwNTgxODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODQsIDB4MDAwNTgxODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODgsIDB4MDAwNTgxODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOGMsIDB4MDAwNTgxOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTAsIDB4MDAwNTgxOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTQsIDB4MDAwNTgxOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTAsIDB4MDAwNTgxYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMGMsIDB4MDAwNTgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTgsIDB4MDAwNTgxYTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODQsIDB4MDAwNTgyODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODgsIDB4MDAwNTgyODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMjAsIDB4MDAwNTgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyOTAsIDB4MDAwNTgyOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDAsIDB4MDAwNTgzMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDQsIDB4MDAwNTgzMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDgsIDB4MDAwNTgzMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMGMsIDB4MDAwNTgzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODAsIDB4MDAwNTgzODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODQsIDB4MDAwNTgzODQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDAsIDB4MDAwNjg3MDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDQsIDB4MDAwNjg3MDQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDgsIDB4MDAwNjg3MDgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MGMsIDB4MDAwNjg3MGMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODAsIDB4MDAwNjg3ODAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODQsIDB4MDAwNjg3ODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDQsIDB4MDAwNjhiMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDgsIDB4MDAwNjhiMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDgsIDB4MDAwNjhiMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMGMsIDB4MDAwNjhiMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODAsIDB4MDAwNjhiODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODQsIDB4MDAwNjhiODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODgsIDB4MDAwNjhiODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOGMsIDB4MDAwNjhiOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhiOTAsIDB4MDAwYjhiOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODAsIDB4MDAwYjhmODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODgsIDB4MDAwYjhmODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmOGMsIDB4MDAwYjhmOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmOTAsIDB4MDAwYjhmOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMGMsIDB4MDAwYmIzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMTAsIDB4MDAwYmIzMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODQsIDB4MDAwYmIzODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODgsIDB4MDAwYmIzODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMjQsIDB4MDAwYmIzMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmI3MDQsIDB4MDAwYmI3MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk2YTQsIDB4MDAwZjk2YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk2YTgsIDB4MDAwZjk2YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTAsIDB4MDAwZjk3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTQsIDB4MDAwZjk3MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjAsIDB4MDAwZjk3MjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjQsIDB4MDAwZjk3MjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjgsIDB4MDAwZjk3MjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MmMsIDB4MDAwZjk3MmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3YTAsIDB4MDAwZjk3YTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3YTQsIDB4MDAwZjk3YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTgsIDB4MDAwZmI3YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjAsIDB4MDAwZmI3YjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjQsIDB4MDAwZmI3YjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjgsIDB4MDAwZmI3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTUsIDB4MDAwZmI3YTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTksIDB4MDAwZmI3YTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWQsIDB4MDAwZmI3YWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjEsIDB4MDAwZmI3YjEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjUsIDB4MDAwZmI3YjUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjksIDB4MDAwZmI3YjksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzUsIDB4MDAwZmI3YzUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzksIDB4MDAwZmI3YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDEsIDB4MDAwZmI3ZDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDUsIDB4MDAwZmI3ZDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDksIDB4MDAwZmI3ZDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzYsIDB4MDAwZmI3YzYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2EsIDB4MDAwZmI3Y2EsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2UsIDB4MDAwZmI3Y2UsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDIsIDB4MDAwZmI3ZDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDYsIDB4MDAwZmI3ZDYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzMsIDB4MDAwZmI3YzMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzcsIDB4MDAwZmI3YzcsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2IsIDB4MDAwZmI3Y2IsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2YsIDB4MDAwZmI3Y2YsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDcsIDB4MDAwZmI3ZDcsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwMWMsIDB4MDAwNjgwMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwMWMsIDB4MDAwNjgwMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwMWMsIDB4MDAwNjgwMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODAsIDB4MDAwNjgwODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODQsIDB4MDAwNjgwODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODgsIDB4MDAwNjgwODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwOGMsIDB4MDAwNjgwOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDAsIDB4MDAwNjgxMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDQsIDB4MDAwNjgxMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDgsIDB4MDAwNjgxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMGMsIDB4MDAwNjgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODAsIDB4MDAwNjgxODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODQsIDB4MDAwNjgxODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODgsIDB4MDAwNjgxODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOGMsIDB4MDAwNjgxOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTAsIDB4MDAwNjgxOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTQsIDB4MDAwNjgxOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTAsIDB4MDAwNjgxYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMGMsIDB4MDAwNjgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTgsIDB4MDAwNjgxYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYWMsIDB4MDAwNjgxYWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMWMsIDB4MDAwNjgyMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMjQsIDB4MDAwNjgyMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyOTAsIDB4MDAwNjgyOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDAsIDB4MDAwNjgzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDgsIDB4MDAwNjgzMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMGMsIDB4MDAwNjgzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMTAsIDB4MDAwNjgzMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODgsIDB4MDAwNjg3ODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OGMsIDB4MDAwNjg3OGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTAsIDB4MDAwNjg3OTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTQsIDB4MDAwNjg3OTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTgsIDB4MDAwNjg3OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OWMsIDB4MDAwNjg3OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODksIDB4MDAwNjhiODksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOGQsIDB4MDAwNjhiOGQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTEsIDB4MDAwNjhiOTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTUsIDB4MDAwNjhiOTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTksIDB4MDAwNjhiOTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYTUsIDB4MDAwNjhiYTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYTksIDB4MDAwNjhiYTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYWQsIDB4MDAwNjhiYWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhiMGMsIDB4MDAwYjhiMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmMTAsIDB4MDAwYjhmMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmMTQsIDB4MDAwYjhmMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODgsIDB4MDAwYjhmODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODAsIDB4MDAwYmIzODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODQsIDB4MDAwYmIzODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODgsIDB4MDAwYmIzODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzOGMsIDB4MDAwYmIzOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzOTQsIDB4MDAwYmIzOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmI3OTgsIDB4MDAwYmI3OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MGMsIDB4MDAwZjk3MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTAsIDB4MDAwZjk3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTQsIDB4MDAwZjk3MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTgsIDB4MDAwZjk3MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MDUsIDB4MDAwZjk3MDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MDksIDB4MDAwZjk3MDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MGQsIDB4MDAwZjk3MGQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTEsIDB4MDAwZjk3MTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTUsIDB4MDAwZjk3MTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTksIDB4MDAwZjk3MTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTQsIDB4MDAwZmI3YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTgsIDB4MDAwZmI3YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWMsIDB4MDAwZmI3YWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWMsIDB4MDAwZmI3YWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjAsIDB4MDAwZmI3YjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjgsIDB4MDAwZmI3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YmMsIDB4MDAwZmI3YmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTEsIDB4MDAwZmI3YTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTUsIDB4MDAwZmI3YTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTksIDB4MDAwZmI3YTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjEsIDB4MDAwZmI3YjEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjUsIDB4MDAwZmI3YjUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YmQsIDB4MDAwZmI3YmQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzksIDB4MDAwZmI3YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2QsIDB4MDAwZmI3Y2QsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDEsIDB4MDAwZmI3ZDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDksIDB4MDAwZmI3ZDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzIsIDB4MDAwZmI3YzIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzYsIDB4MDAwZmI3YzYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2EsIDB4MDAwZmI3Y2EsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2UsIDB4MDAwZmI3Y2UsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDIsIDB4MDAwZmI3ZDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDYsIDB4MDAwZmI3ZDYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzMsIDB4MDAwZmI3YzMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2IsIDB4MDAwZmI3Y2IsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDQsIDB4MDAwNzhiMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMGMsIDB4MDAwNzhiMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODAsIDB4MDAwNzhiODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODQsIDB4MDAwNzhiODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODgsIDB4MDAwNzhiODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOGMsIDB4MDAwNzhiOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOTAsIDB4MDAwNzhiOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODAsIDB4MDAwY2FmODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODQsIDB4MDAwY2FmODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODgsIDB4MDAwY2FmODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOGMsIDB4MDAwY2FmOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOTAsIDB4MDAwY2FmOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMGMsIDB4MDAwZGIzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMTAsIDB4MDAwZGIzMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODQsIDB4MDAwZGIzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODgsIDB4MDAwZGIzODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMjQsIDB4MDAwZGIzMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MDQsIDB4MDAwZWI3MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTQsIDB4MDAwZWI2YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTgsIDB4MDAwZWI2YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTAsIDB4MDAwZWI3MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTQsIDB4MDAwZWI3MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjAsIDB4MDAwZWI3MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjQsIDB4MDAwZWI3MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjgsIDB4MDAwZWI3MjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MmMsIDB4MDAwZWI3MmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTAsIDB4MDAwZWI3YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTQsIDB4MDAwZWI3YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTgsIDB4MDAwZWI3YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjAsIDB4MDAwZWI3YjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjQsIDB4MDAwZWI3YjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjgsIDB4MDAwZWI3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTUsIDB4MDAwZWI3YTUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTksIDB4MDAwZWI3YTksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YWQsIDB4MDAwZWI3YWQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjEsIDB4MDAwZWI3YjEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjUsIDB4MDAwZWI3YjUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjksIDB4MDAwZWI3YjksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzUsIDB4MDAwZWI3YzUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzksIDB4MDAwZWI3YzksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDEsIDB4MDAwZWI3ZDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDUsIDB4MDAwZWI3ZDUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDksIDB4MDAwZWI3ZDksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzYsIDB4MDAwZWI3YzYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2EsIDB4MDAwZWI3Y2EsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2UsIDB4MDAwZWI3Y2UsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDIsIDB4MDAwZWI3ZDIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDYsIDB4MDAwZWI3ZDYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzMsIDB4MDAwZWI3YzMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzcsIDB4MDAwZWI3YzcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2IsIDB4MDAwZWI3Y2IsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2YsIDB4MDAwZWI3Y2YsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDcsIDB4MDAwZWI3ZDcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODQsIDB4MDAwNTgwODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODgsIDB4MDAwNTgwODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwOGMsIDB4MDAwNTgwOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDAsIDB4MDAwNTgxMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDQsIDB4MDAwNTgxMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDgsIDB4MDAwNTgxMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMGMsIDB4MDAwNTgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTAsIDB4MDAwNTgxMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTQsIDB4MDAwNTgxMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODAsIDB4MDAwNTgxODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODQsIDB4MDAwNTgxODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODgsIDB4MDAwNTgxODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOGMsIDB4MDAwNTgxOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTAsIDB4MDAwNTgxOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTQsIDB4MDAwNTgxOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTAsIDB4MDAwNTgxYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMGMsIDB4MDAwNTgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTgsIDB4MDAwNTgxYTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODQsIDB4MDAwNTgyODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODgsIDB4MDAwNTgyODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMjAsIDB4MDAwNTgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyOTAsIDB4MDAwNTgyOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDAsIDB4MDAwNTgzMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDQsIDB4MDAwNTgzMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDgsIDB4MDAwNTgzMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMGMsIDB4MDAwNTgzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODAsIDB4MDAwNTgzODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODQsIDB4MDAwNTgzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDAsIDB4MDAwNjg3MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDQsIDB4MDAwNjg3MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDgsIDB4MDAwNjg3MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MGMsIDB4MDAwNjg3MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODAsIDB4MDAwNjg3ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODQsIDB4MDAwNjg3ODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDQsIDB4MDAwNzhiMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMGMsIDB4MDAwNzhiMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODAsIDB4MDAwNzhiODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODQsIDB4MDAwNzhiODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODgsIDB4MDAwNzhiODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOGMsIDB4MDAwNzhiOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOTAsIDB4MDAwNzhiOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODAsIDB4MDAwY2FmODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODQsIDB4MDAwY2FmODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODgsIDB4MDAwY2FmODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOGMsIDB4MDAwY2FmOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOTAsIDB4MDAwY2FmOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMGMsIDB4MDAwZGIzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMTAsIDB4MDAwZGIzMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODQsIDB4MDAwZGIzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODgsIDB4MDAwZGIzODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMjQsIDB4MDAwZGIzMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MDQsIDB4MDAwZWI3MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTQsIDB4MDAwZWI2YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTgsIDB4MDAwZWI2YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTAsIDB4MDAwZWI3MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTQsIDB4MDAwZWI3MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjAsIDB4MDAwZWI3MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjQsIDB4MDAwZWI3MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjgsIDB4MDAwZWI3MjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MmMsIDB4MDAwZWI3MmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTAsIDB4MDAwZWI3YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTQsIDB4MDAwZWI3YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTgsIDB4MDAwZWI3YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjAsIDB4MDAwZWI3YjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjQsIDB4MDAwZWI3YjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjgsIDB4MDAwZWI3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTUsIDB4MDAwZWI3YTUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTksIDB4MDAwZWI3YTksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YWQsIDB4MDAwZWI3YWQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjEsIDB4MDAwZWI3YjEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjUsIDB4MDAwZWI3YjUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjksIDB4MDAwZWI3YjksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzUsIDB4MDAwZWI3YzUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzksIDB4MDAwZWI3YzksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDEsIDB4MDAwZWI3ZDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDUsIDB4MDAwZWI3ZDUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDksIDB4MDAwZWI3ZDksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzYsIDB4MDAwZWI3YzYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2EsIDB4MDAwZWI3Y2EsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2UsIDB4MDAwZWI3Y2UsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDIsIDB4MDAwZWI3ZDIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDYsIDB4MDAwZWI3ZDYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzMsIDB4MDAwZWI3YzMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzcsIDB4MDAwZWI3YzcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2IsIDB4MDAwZWI3Y2IsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2YsIDB4MDAwZWI3Y2YsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDcsIDB4MDAwZWI3ZDcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEyMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGEyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWYwMDAgfSwKKyAgICB7IDB4MDAwMGEyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDAgfSwKICAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKICAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEyNTAsIDB4MDAwNGYwMDAsIDB4MDAwNGYwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGE4MWM2NTIsIDB4MGE4MWM2NTIsIDB4MGE4MjA2NTIsIDB4MGE4MjA2NTIsIDB4MGE4MmE2NTIgfSwKLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcyMDEsIDB4MDAwMDcyMDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTA0MDgsIDB4MDAwMTA0MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTg2MGEsIDB4MDAwMTg2MGEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjA4MTgsIDB4MDAwMjA4MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQ4NTgsIDB4MDAwMjQ4NTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjY4NTksIDB4MDAwMjY4NTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjk4NWIsIDB4MDAwMjk4NWIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmI4OWEsIDB4MDAwMmI4OWEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmQ4OWIsIDB4MDAwMmQ4OWIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmY4OWMsIDB4MDAwMmY4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzE4OWQsIDB4MDAwMzE4OWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzM4OWUsIDB4MDAwMzM4OWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUgfSwKIH07CiAKQEAgLTQ1NjgsNyArNDU1MSw3IEBACiAgICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCiAgICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCiAgICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwIH0sCisgICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODEwIH0sCiAgICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCkBAIC00NTg0LDcgKzQ1NjcsNyBAQAogICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAogICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCB9LAorICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIwYSB9LAogICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LApAQCAtNDY3OSw3ICs0NjYyLDcgQEAKICAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKICAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKLSAgICB7IDB4MDAwMDk5YWMsIDB4MmRlZjEwMDAgfSwKKyAgICB7IDB4MDAwMDk5YWMsIDB4MmRlZjA0MDAgfSwKICAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKICAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKICAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKQEAgLTQ2ODgsNyArNDY3MSw3IEBACiAgICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCiAgICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCiAgICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA4LCAweDgwM2U2Nzg4IH0sCisgICAgeyAweDAwMDBhMjA4LCAweDgwM2U2OGM4IH0sCiAgICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCiAgICAgeyAweDAwMDBhMjE0LCAweDAwMjA2YzEwIH0sCiAgICAgeyAweDAwMDBhMjE4LCAweDAwOWM0MDYwIH0sCkBAIC00NzA4LDggKzQ2OTEsNiBAQAogICAgIHsgMHgwMDAwYTI2OCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTI2YywgMHgwZWJhZTllNiB9LAogICAgIHsgMHgwMDAwZDI3MCwgMHgwZDgyMDgyMCB9LAotICAgIHsgMHgwMDAwYTI3OCwgMHgzMThjNjMxOCB9LAotICAgIHsgMHgwMDAwYTI3YywgMHgwNTBjMDMxOCB9LAogICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAogICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAogICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LApAQCAtNDcyNCw4ICs0NzA1LDYgQEAKICAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MzE4YzYzMTggfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAzMTggfSwKICAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKICAgICB7IDB4MDAwMGEzYTAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzYTQsIDB4MDAwMDAwMDAgfSwKQEAgLTQ3NDAsOCArNDcxOSw2IEBACiAgICAgeyAweDAwMDBhM2NjLCAweDIwMjAyMDIwIH0sCiAgICAgeyAweDAwMDBhM2QwLCAweDIwMjAyMDIwIH0sCiAgICAgeyAweDAwMDBhM2Q0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2RjLCAweDMxOGM2MzE4IH0sCi0gICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzE4IH0sCiAgICAgeyAweDAwMDBhM2U0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhM2U4LCAweDE4YzQzNDMzIH0sCiAgICAgeyAweDAwMDBhM2VjLCAweDAwZjcwMDgxIH0sCkBAIC00NzUyLDEzICs0NzI5LDExIEBACiAgICAgeyAweDAwMDA3ODEwLCAweDcxYzBkMzg4IH0sCiAgICAgeyAweDAwMDA3ODE0LCAweDkyNDkzNGE4IH0sCiAgICAgeyAweDAwMDA3ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0IH0sCiAgICAgeyAweDAwMDA3ODI0LCAweDAwZDg2ZmZmIH0sCiAgICAgeyAweDAwMDA3ODI4LCAweDI2ZDI0OTFiIH0sCiAgICAgeyAweDAwMDA3ODJjLCAweDZlMzZkOTdiIH0sCiAgICAgeyAweDAwMDA3ODMwLCAweGVkYjZkOTZlIH0sCiAgICAgeyAweDAwMDA3ODM0LCAweDcxNDAwMDg3IH0sCi0gICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxIH0sCiAgICAgeyAweDAwMDA3ODNjLCAweDAwMDFmZmZlIH0sCiAgICAgeyAweDAwMDA3ODQwLCAweGZmZWIxYTIwIH0sCiAgICAgeyAweDAwMDA3ODQ0LCAweDAwMGMwZGI2IH0sCkBAIC00NzcxLDEwICs0NzQ2LDgxIEBACiAgICAgeyAweDAwMDA3ODYwLCAweDIxMDg0MjEwIH0sCiAgICAgeyAweDAwMDA3ODY0LCAweGY3ZDdmZmRlIH0sCiAgICAgeyAweDAwMDA3ODY4LCAweGMyMDM0MDgwIH0sCi0gICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0IH0sCiAgICAgeyAweDAwMDA3ODcwLCAweDEwMTQyYzAwIH0sCiB9OwogCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA1MjAwLCAweDAwMDA1MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3MjAxLCAweDAwMDA3MjAxLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBiMjQwLCAweDAwMDBiMjQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMjQxLCAweDAwMDBkMjQxLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmNDQwLCAweDAwMDBmNDQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0NjQwLCAweDAwMDE0NjQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4NjgwLCAweDAwMDE4NjgwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5ODQxLCAweDAwMDE5ODQxLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjYTQwLCAweDAwMDFjYTQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFmYTgwLCAweDAwMDFmYTgwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIzYWMwLCAweDAwMDIzYWMwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhYjQwLCAweDAwMDJhYjQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMzZDgyLCAweDAwMDMzZDgyLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAzLCAweGZhYzY4ODAzLCAweGZhYzY4ODAzLCAweGZhYzY4ODAzLCAweGZhYzY4ODAzIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlIH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjJhNjUyLCAweDBhMjJhNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzJbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCwgMHgwMDAwOTIwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDIwOCwgMHgwMDAxMDIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxOTYwOCwgMHgwMDAxOTYwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMjYxOCwgMHgwMDAyMjYxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYTZjOSwgMHgwMDAyYTZjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMTcxMCwgMHgwMDAzMTcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNTcxOCwgMHgwMDAzNTcxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzODc1OCwgMHgwMDAzODc1OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzYzc1YSwgMHgwMDAzYzc1YSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0MDc1YywgMHgwMDA0MDc1YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0NDc1ZSwgMHgwMDA0NDc1ZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0Njc5ZiwgMHgwMDA0Njc5ZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0ODdkZiwgMHgwMDA0ODdkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzgzOCwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSB9LAorICAgIHsgMHgwMDAwNzg2YywgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCB9LAorICAgIHsgMHgwMDAwNzgyMCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCB9LAorICAgIHsgMHgwMDAwYTI3NCwgMHgwYTIxYzY1MiwgMHgwYTIxYzY1MiwgMHgwYTIxYTY1MiwgMHgwYTIxYTY1MiwgMHgwYTIyYTY1MiB9LAorICAgIHsgMHgwMDAwYTI3OCwgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAorICAgIHsgMHgwMDAwYTI3YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YyB9LAorICAgIHsgMHgwMDAwYTM5NCwgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAorICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YyB9LAorICAgIHsgMHgwMDAwYTNkYywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAorICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YyB9LAorfTsKKwogc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NV8xXzJbXVsyXSA9IHsKICAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKICAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMKaW5kZXggYWYzMmQwOS4uZjc1N2JjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMKQEAgLTE0LDQ1ICsxNCw0MCBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF90eHFfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19JTlRFUlJVUFQsCiAJCSJ0eCBvayAweCV4IGVyciAweCV4IGRlc2MgMHgleCBlb2wgMHgleCB1cm4gMHgleFxuIiwKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVyckludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJYWgtPnR4b2tfaW50ZXJydXB0X21hc2ssIGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaywKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzaywgYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrLAorCQlhaC0+dHh1cm5faW50ZXJydXB0X21hc2spOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9JTVJfUzAsCi0JCSAgU00oYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgQVJfSU1SX1MwX1FDVV9UWE9LKQotCQkgIHwgU00oYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOworCQkgIFNNKGFoLT50eG9rX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYT0spCisJCSAgfCBTTShhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOwogCVJFR19XUklURShhaCwgQVJfSU1SX1MxLAotCQkgIFNNKGFocC0+YWhfdHhFcnJJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzFfUUNVX1RYRVJSKQotCQkgIHwgU00oYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKKwkJICBTTShhaC0+dHhlcnJfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFUlIpCisJCSAgfCBTTShhaC0+dHhlb2xfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9JTVJfUzIsCi0JCSAgICAgIEFSX0lNUl9TMl9RQ1VfVFhVUk4sIGFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJICAgICAgQVJfSU1SX1MyX1FDVV9UWFVSTiwgYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrKTsKIH0KIAotdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKQogewogCXJldHVybiBSRUdfUkVBRChhaCwgQVJfUVRYRFAocSkpOwogfQogCi1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEsIHUzMiB0eGRwKQorYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQogewogCVJFR19XUklURShhaCwgQVJfUVRYRFAocSksIHR4ZHApOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInF1ZXVlICV1XG4iLCBxKTsKIApAQCAtNjEsNyArNTYsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi11MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAl1MzIgbnBlbmQ7CiAKQEAgLTc1LDE2ICs3MCwxNSBAQAogCXJldHVybiBucGVuZDsKIH0KIAotYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKK2Jvb2wgYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiB0eGNmZywgY3VyTGV2ZWwsIG5ld0xldmVsOwogCWVudW0gYXRoOWtfaW50IG9tYXNrOwogCi0JaWYgKGFoLT5haF90eFRyaWdMZXZlbCA+PSBNQVhfVFhfRklGT19USFJFU0hPTEQpCisJaWYgKGFoLT50eF90cmlnX2xldmVsID49IE1BWF9UWF9GSUZPX1RIUkVTSE9MRCkKIAkJcmV0dXJuIGZhbHNlOwogCi0Jb21hc2sgPSBhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWhwLT5haF9tYXNrUmVnICYgfkFUSDlLX0lOVF9HTE9CQUwpOworCW9tYXNrID0gYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5tYXNrX3JlZyAmIH5BVEg5S19JTlRfR0xPQkFMKTsKIAogCXR4Y2ZnID0gUkVHX1JFQUQoYWgsIEFSX1RYQ0ZHKTsKIAljdXJMZXZlbCA9IE1TKHR4Y2ZnLCBBUl9GVFJJRyk7CkBAIC0xMDAsMjEgKzk0LDM4IEBACiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgb21hc2spOwogCi0JYWgtPmFoX3R4VHJpZ0xldmVsID0gbmV3TGV2ZWw7CisJYWgtPnR4X3RyaWdfbGV2ZWwgPSBuZXdMZXZlbDsKIAogCXJldHVybiBuZXdMZXZlbCAhPSBjdXJMZXZlbDsKIH0KIAotYm9vbCBhdGg5a19od19zdG9wdHhkbWEoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKKyNkZWZpbmUgQVRIOUtfVFhfU1RPUF9ETUFfVElNRU9VVAk0MDAwICAgIC8qIHVzZWMgKi8KKyNkZWZpbmUgQVRIOUtfVElNRV9RVUFOVFVNCQkxMDAgICAgIC8qIHVzZWMgKi8KKworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CisJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiB0c2ZMb3csIGosIHdhaXQ7CisJdTMyIHdhaXRfdGltZSA9IEFUSDlLX1RYX1NUT1BfRE1BX1RJTUVPVVQgLyBBVEg5S19USU1FX1FVQU5UVU07CisKKwlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbnZhbGlkIHF1ZXVlIG51bSAldVxuIiwgcSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlxaSA9ICZhaC0+dHhxW3FdOworCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAxIDw8IHEpOwogCi0JZm9yICh3YWl0ID0gMTAwMDsgd2FpdCAhPSAwOyB3YWl0LS0pIHsKKwlmb3IgKHdhaXQgPSB3YWl0X3RpbWU7IHdhaXQgIT0gMDsgd2FpdC0tKSB7CiAJCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpID09IDApCiAJCQlicmVhazsKLQkJdWRlbGF5KDEwMCk7CisJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCX0KIAogCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpKSB7CkBAIC0xNDQsOCArMTU1LDcgQEAKIAkJdWRlbGF5KDIwMCk7CiAJCVJFR19DTFJfQklUKGFoLCBBUl9USU1FUl9NT0RFLCBBUl9RVUlFVF9USU1FUl9FTik7CiAKLQkJd2FpdCA9IDEwMDA7Ci0KKwkJd2FpdCA9IHdhaXRfdGltZTsKIAkJd2hpbGUgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgcSkpIHsKIAkJCWlmICgoLS13YWl0KSA9PSAwKSB7CiAJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfWE1JVCwKQEAgLTE1MywxOCArMTYzLDIwIEBACiAJCQkJCSJtc2VjIGFmdGVyIGtpbGxpbmcgbGFzdCBmcmFtZVxuIik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl1ZGVsYXkoMTAwKTsKKwkJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCQl9CiAKIAkJUkVHX0NMUl9CSVQoYWgsIEFSX0RJQUdfU1csIEFSX0RJQUdfRk9SQ0VfQ0hfSURMRV9ISUdIKTsKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAwKTsKLQogCXJldHVybiB3YWl0ICE9IDA7CisKKyN1bmRlZiBBVEg5S19UWF9TVE9QX0RNQV9USU1FT1VUCisjdW5kZWYgQVRIOUtfVElNRV9RVUFOVFVNCiB9CiAKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKIAkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKQogewpAQCAtMTkyLDcgKzIwNCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwogCkBAIC0yMDMsNyArMjE1LDcgQEAKIAlhZHMtPmRzX3R4c3RhdHVzOCA9IGFkcy0+ZHNfdHhzdGF0dXM5ID0gMDsKIH0KIAotaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQoraW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKIApAQCAtMjczLDE5ICsyODUsMTggQEAKIAlkcy0+ZHNfdHhzdGF0LnRzX3Nob3J0cmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfUlRTRmFpbENudCk7CiAJZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfRGF0YUZhaWxDbnQpOwogCWRzLT5kc190eHN0YXQudHNfdmlydGNvbCA9IE1TKGFkcy0+ZHNfdHhzdGF0dXMxLCBBUl9WaXJ0UmV0cnlDbnQpOwotCWRzLT5kc190eHN0YXQudHNfYW50ZW5uYSA9IDE7CisJZHMtPmRzX3R4c3RhdC50c19hbnRlbm5hID0gMDsKIAogCXJldHVybiAwOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl90eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAordm9pZCBhdGg5a19od19zZXQxMW5fdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCiAJCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQl0eFBvd2VyICs9IGFocC0+YWhfdHhQb3dlckluZGV4T2Zmc2V0OworCXR4UG93ZXIgKz0gYWgtPnR4cG93ZXJfaW5kZXhvZmZzZXQ7CiAJaWYgKHR4UG93ZXIgPiA2MykKIAkJdHhQb3dlciA9IDYzOwogCkBAIC0zMTQsNyArMzI1LDcgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKIAkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCiAJCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCkBAIC0zMjUsOSArMzM2LDYgQEAKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmxhc3RfYWRzID0gQVI1NDE2REVTQyhsYXN0ZHMpOwogCXUzMiBkc19jdGwwOwogCi0JKHZvaWQpIG5zZXJpZXM7Ci0JKHZvaWQpIHJ0c2N0c0R1cmF0aW9uOwotCiAJaWYgKGZsYWdzICYgKEFUSDlLX1RYREVTQ19SVFNFTkEgfCBBVEg5S19UWERFU0NfQ1RTRU5BKSkgewogCQlkc19jdGwwID0gYWRzLT5kc19jdGwwOwogCkBAIC0zNzIsNyArMzgwLDcgQEAKIAlsYXN0X2Fkcy0+ZHNfY3RsMyA9IGFkcy0+ZHNfY3RsMzsKIH0KIAotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCXUzMiBhZ2dyTGVuKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zODIsNyArMzkwLDcgQEAKIAlhZHMtPmRzX2N0bDYgfD0gU00oYWdnckxlbiwgQVJfQWdnckxlbik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCSB1MzIgbnVtRGVsaW1zKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zOTYsNyArNDA0LDcgQEAKIAlhZHMtPmRzX2N0bDYgPSBjdGw2OwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKQEAgLTQwNSwxNCArNDEzLDE0IEBACiAJYWRzLT5kc19jdGw2ICY9IH5BUl9QYWREZWxpbTsKIH0KIAotdm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCit2b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKIAlhZHMtPmRzX2N0bDEgJj0gKH5BUl9Jc0FnZ3IgJiB+QVJfTW9yZUFnZ3IpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKQEAgLTQyMSw3ICs0MjksNyBAQAogCWFkcy0+ZHNfY3RsMiB8PSBTTShidXJzdER1cmF0aW9uLCBBUl9CdXJzdER1cik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgICB1MzIgdm1mKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC00MzIsMjAgKzQ0MCwxNyBAQAogCQlhZHMtPmRzX2N0bDAgJj0gfkFSX1ZpcnRNb3JlRnJhZzsKIH0KIAotdm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyICp0eHFzKQordm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgKnR4cXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCSp0eHFzICY9IGFocC0+YWhfaW50clR4cXM7Ci0JYWhwLT5haF9pbnRyVHhxcyAmPSB+KCp0eHFzKTsKKwkqdHhxcyAmPSBhaC0+aW50cl90eHFzOworCWFoLT5pbnRyX3R4cXMgJj0gfigqdHhxcyk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CiAJdTMyIGN3OwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAogCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewpAQCAtNDUzLDcgKzQ1OCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTUwOSwxMSArNTE0LDEwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19nZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CkBAIC01MjEsNyArNTI1LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTQ1LDEyICs1NDksMTEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKK2ludCBhdGg5a19od19zZXR1cHR4cXVldWUoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKIAkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAlpbnQgcTsKIAogCXN3aXRjaCAodHlwZSkgewpAQCAtNTY4LDcgKzU3MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfREFUQToKIAkJZm9yIChxID0gMDsgcSA8IHBDYXAtPnRvdGFsX3F1ZXVlczsgcSsrKQotCQkJaWYgKGFocC0+YWhfdHhxW3FdLnRxaV90eXBlID09CisJCQlpZiAoYWgtPnR4cVtxXS50cWlfdHlwZSA9PQogCQkJICAgIEFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFKQogCQkJCWJyZWFrOwogCQlpZiAocSA9PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKQEAgLTU4NCw3ICs1ODcsNyBAQAogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJxdWV1ZSAldVxuIiwgcSk7CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgIT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsCiAJCQkidHggcXVldWUgJXUgYWxyZWFkeSBhY3RpdmVcbiIsIHEpOwpAQCAtNjExLDE3ICs2MTQsMTYgQEAKIAlyZXR1cm4gcTsKIH0KIAotYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1FVRVVFLCAiaW52YWxpZCBxdWV1ZSBudW0gJXVcbiIsIHEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlICV1XG4iLCBxKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjMwLDIxICs2MzIsMjAgQEAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInJlbGVhc2UgcXVldWUgJXVcbiIsIHEpOwogCiAJcWktPnRxaV90eXBlID0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkU7Ci0JYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVyckludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVvbEludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CisJYWgtPnR4ZXJyX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhlb2xfaW50ZXJydXB0X21hc2sgJj0gfigxIDw8IHEpOworCWFoLT50eHVybl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKGFoLCBxaSk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19yZXNldHR4cXVldWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiBjd01pbiwgY2hhbkN3TWluLCB2YWx1ZTsKIApAQCAtNjUzLDcgKzY1NCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZSAldVxuIiwgcSk7CiAJCXJldHVybiB0cnVlOwpAQCAtNzQxLDkgKzc0Miw5IEBACiAJCQkgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKIAkJCSAgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMCk7CiAJCXZhbHVlID0gKHFpLT50cWlfcmVhZHlUaW1lIC0KLQkJCSAoYWgtPmFoX2NvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSAtCi0JCQkgIGFoLT5haF9jb25maWcuZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lKSAtCi0JCQkgYWgtPmFoX2NvbmZpZy5hZGRpdGlvbmFsX3N3YmFfYmFja29mZikgKiAxMDI0OworCQkJIChhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lIC0KKwkJCSAgYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpIC0KKwkJCSBhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmKSAqIDEwMjQ7CiAJCVJFR19XUklURShhaCwgQVJfUVJEWVRJTUVDRkcocSksCiAJCQkgIHZhbHVlIHwgQVJfUV9SRFlUSU1FQ0ZHX0VOKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKQpAQCAtNzcxLDMxICs3NzIsMzEgQEAKIAl9CiAKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eG9rX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhPa0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhFUlJJTlRfRU5BQkxFKQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RGVzY0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWFVSTklOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlhdGg5a19od19zZXRfdHhxX2ludGVycnVwdHMoYWgsIHFpKTsKIAogCXJldHVybiB0cnVlOwogfQogCi1pbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitpbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjIGFkczsKQEAgLTg2MCwxMSArODYxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSAgdTMyIHNpemUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCWFkcy0+ZHNfY3RsMSA9IHNpemUgJiBBUl9CdWZMZW47CiAJaWYgKGZsYWdzICYgQVRIOUtfUlhERVNDX0lOVFJFUSkKQEAgLTg3Nyw3ICs4NzgsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCkKK2Jvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpCiB7CiAJdTMyIHJlZzsKIApAQCAtODg1LDcgKzg4Niw4IEBACiAJCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJICAgIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAotCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLCAwKSkgeworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLAorCQkJCSAgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJCSAgICAoQVJfRElBR19SWF9ESVMgfAogCQkJCSAgICAgQVJfRElBR19SWF9BQk9SVCkpOwpAQCAtOTA0LDE3ICs5MDYsMTcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByeGRwKQordm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SWERQLCByeGRwKTsKIH0KIAotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCkBAIC05MjMsMjQgKzkyNSw0MSBAQAogCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdG9wcGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfRElBR19TVywgQVJfRElBR19SWF9ESVMpOwogCiAJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwogfQogCi1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCiB7CisjZGVmaW5lIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgMTAwMDAgICAvKiB1c2VjICovCisjZGVmaW5lIEFIX1JYX1RJTUVfUVVBTlRVTSAgICAgMTAwICAgICAvKiB1c2VjICovCisKKwlpbnQgaTsKKwogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRCk7CiAKLQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX0NSLCBBUl9DUl9SWEUsIDApKSB7CisJLyogV2FpdCBmb3IgcnggZW5hYmxlIGJpdCB0byBnbyBsb3cgKi8KKwlmb3IgKGkgPSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNOyBpICE9IDA7IGktLSkgeworCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9DUikgJiBBUl9DUl9SWEUpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KEFIX1RJTUVfUVVBTlRVTSk7CisJfQorCisJaWYgKGkgPT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwKLQkJCSJkbWEgZmFpbGVkIHRvIHN0b3AgaW4gMTBtc1xuIgotCQkJIkFSX0NSPTB4JTA4eFxuQVJfRElBR19TVz0weCUwOHhcbiIsCi0JCQlSRUdfUkVBRChhaCwgQVJfQ1IpLCBSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQkJImRtYSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyAiCisJCQkiQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCisJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwogCX0KKworI3VuZGVmIEFIX1JYX1RJTUVfUVVBTlRVTQorI3VuZGVmIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1ZjY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTUFDX0gKKyNkZWZpbmUgTUFDX0gKKworI2RlZmluZSBSWFNUQVRVU19SQVRFKGFoLCBhZHMpIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpID8JCVwKKwkJCQlNUyhhZHMtPmRzX3J4c3RhdHVzMCwgQVJfUnhSYXRlKSA6CVwKKwkJCQkoYWRzLT5kc19yeHN0YXR1czMgPj4gMikgJiAweEZGKQorCisjZGVmaW5lIHNldDExblRyaWVzKF9zZXJpZXMsIF9pbmRleCkgXAorCShTTSgoX3NlcmllcylbX2luZGV4XS5UcmllcywgQVJfWG1pdERhdGFUcmllcyMjX2luZGV4KSkKKworI2RlZmluZSBzZXQxMW5SYXRlKF9zZXJpZXMsIF9pbmRleCkgXAorCShTTSgoX3NlcmllcylbX2luZGV4XS5SYXRlLCBBUl9YbWl0UmF0ZSMjX2luZGV4KSkKKworI2RlZmluZSBzZXQxMW5Qa3REdXJSVFNDVFMoX3NlcmllcywgX2luZGV4KQkJCQlcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlBrdER1cmF0aW9uLCBBUl9QYWNrZXREdXIjI19pbmRleCkgfAlcCisJICgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgICA/CVwKKwkgIEFSX1JUU0NUU1F1YWwjI19pbmRleCA6IDApKQorCisjZGVmaW5lIHNldDExblJhdGVGbGFncyhfc2VyaWVzLCBfaW5kZXgpCQkJCVwKKwkoKChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfMjA0MCA/CQlcCisJICBBUl8yMDQwXyMjX2luZGV4IDogMCkJCQkJCQlcCisJIHwoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU19IQUxGR0kgPwlcCisJICAgQVJfR0kjI19pbmRleCA6IDApCQkJCQkJXAorCSB8U00oKF9zZXJpZXMpW19pbmRleF0uQ2hTZWwsIEFSX0NoYWluU2VsIyNfaW5kZXgpKQorCisjZGVmaW5lIENDS19TSUZTX1RJTUUgICAgICAgIDEwCisjZGVmaW5lIENDS19QUkVBTUJMRV9CSVRTICAgMTQ0CisjZGVmaW5lIENDS19QTENQX0JJVFMgICAgICAgIDQ4CisKKyNkZWZpbmUgT0ZETV9TSUZTX1RJTUUgICAgICAgIDE2CisjZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRSAgICAyMAorI2RlZmluZSBPRkRNX1BMQ1BfQklUUyAgICAgICAgMjIKKyNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRSAgICAgIDQKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRV9IQUxGICAgICAzMgorI2RlZmluZSBPRkRNX1BSRUFNQkxFX1RJTUVfSEFMRiA0MAorI2RlZmluZSBPRkRNX1BMQ1BfQklUU19IQUxGICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX0hBTEYgICA4CisKKyNkZWZpbmUgT0ZETV9TSUZTX1RJTUVfUVVBUlRFUiAgICAgIDY0CisjZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9RVUFSVEVSICA4MAorI2RlZmluZSBPRkRNX1BMQ1BfQklUU19RVUFSVEVSICAgICAgMjIKKyNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSICAgIDE2CisKKyNkZWZpbmUgSU5JVF9BSUZTICAgICAgIDIKKyNkZWZpbmUgSU5JVF9DV01JTiAgICAgIDE1CisjZGVmaW5lIElOSVRfQ1dNSU5fMTFCICAzMQorI2RlZmluZSBJTklUX0NXTUFYICAgICAgMTAyMworI2RlZmluZSBJTklUX1NIX1JFVFJZICAgMTAKKyNkZWZpbmUgSU5JVF9MR19SRVRSWSAgIDEwCisjZGVmaW5lIElOSVRfU1NIX1JFVFJZICAzMgorI2RlZmluZSBJTklUX1NMR19SRVRSWSAgMzIKKworI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfNiA2CisjZGVmaW5lIEFUSDlLX1NMT1RfVElNRV85IDkKKyNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzIwIDIwCisKKyNkZWZpbmUgQVRIOUtfVFhFUlJfWFJFVFJZICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19UWEVSUl9GSUxUICAgICAgICAgICAweDAyCisjZGVmaW5lIEFUSDlLX1RYRVJSX0ZJRk8gICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRIOUtfVFhFUlJfWFRYT1AgICAgICAgICAgMHgwOAorI2RlZmluZSBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEICAweDEwCisKKyNkZWZpbmUgQVRIOUtfVFhfQkEgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19UWF9QV1JNR01UICAgICAgICAgICAweDAyCisjZGVmaW5lIEFUSDlLX1RYX0RFU0NfQ0ZHX0VSUiAgICAgIDB4MDQKKyNkZWZpbmUgQVRIOUtfVFhfREFUQV9VTkRFUlJVTiAgICAgMHgwOAorI2RlZmluZSBBVEg5S19UWF9ERUxJTV9VTkRFUlJVTiAgICAweDEwCisjZGVmaW5lIEFUSDlLX1RYX1NXX0FCT1JURUQgICAgICAgIDB4NDAKKyNkZWZpbmUgQVRIOUtfVFhfU1dfRklMVEVSRUQgICAgICAgMHg4MAorCisjZGVmaW5lIE1JTl9UWF9GSUZPX1RIUkVTSE9MRCAgIDB4MQorI2RlZmluZSBNQVhfVFhfRklGT19USFJFU0hPTEQgICAoKDQwOTYgLyA2NCkgLSAxKQorI2RlZmluZSBJTklUX1RYX0ZJRk9fVEhSRVNIT0xEICBNSU5fVFhfRklGT19USFJFU0hPTEQKKworc3RydWN0IGF0aF90eF9zdGF0dXMgeworCXUzMiB0c190c3RhbXA7CisJdTE2IHRzX3NlcW51bTsKKwl1OCB0c19zdGF0dXM7CisJdTggdHNfcmF0ZWNvZGU7CisJdTggdHNfcmF0ZWluZGV4OworCWludDhfdCB0c19yc3NpOworCXU4IHRzX3Nob3J0cmV0cnk7CisJdTggdHNfbG9uZ3JldHJ5OworCXU4IHRzX3ZpcnRjb2w7CisJdTggdHNfYW50ZW5uYTsKKwl1OCB0c19mbGFnczsKKwlpbnQ4X3QgdHNfcnNzaV9jdGwwOworCWludDhfdCB0c19yc3NpX2N0bDE7CisJaW50OF90IHRzX3Jzc2lfY3RsMjsKKwlpbnQ4X3QgdHNfcnNzaV9leHQwOworCWludDhfdCB0c19yc3NpX2V4dDE7CisJaW50OF90IHRzX3Jzc2lfZXh0MjsKKwl1OCBwYWRbM107CisJdTMyIGJhX2xvdzsKKwl1MzIgYmFfaGlnaDsKKwl1MzIgZXZtMDsKKwl1MzIgZXZtMTsKKwl1MzIgZXZtMjsKK307CisKK3N0cnVjdCBhdGhfcnhfc3RhdHVzIHsKKwl1MzIgcnNfdHN0YW1wOworCXUxNiByc19kYXRhbGVuOworCXU4IHJzX3N0YXR1czsKKwl1OCByc19waHllcnI7CisJaW50OF90IHJzX3Jzc2k7CisJdTggcnNfa2V5aXg7CisJdTggcnNfcmF0ZTsKKwl1OCByc19hbnRlbm5hOworCXU4IHJzX21vcmU7CisJaW50OF90IHJzX3Jzc2lfY3RsMDsKKwlpbnQ4X3QgcnNfcnNzaV9jdGwxOworCWludDhfdCByc19yc3NpX2N0bDI7CisJaW50OF90IHJzX3Jzc2lfZXh0MDsKKwlpbnQ4X3QgcnNfcnNzaV9leHQxOworCWludDhfdCByc19yc3NpX2V4dDI7CisJdTggcnNfaXNhZ2dyOworCXU4IHJzX21vcmVhZ2dyOworCXU4IHJzX251bV9kZWxpbXM7CisJdTggcnNfZmxhZ3M7CisJdTMyIGV2bTA7CisJdTMyIGV2bTE7CisJdTMyIGV2bTI7Cit9OworCisjZGVmaW5lIEFUSDlLX1JYRVJSX0NSQyAgICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19SWEVSUl9QSFkgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfUlhFUlJfRklGTyAgICAgICAgICAweDA0CisjZGVmaW5lIEFUSDlLX1JYRVJSX0RFQ1JZUFQgICAgICAgMHgwOAorI2RlZmluZSBBVEg5S19SWEVSUl9NSUMgICAgICAgICAgIDB4MTAKKworI2RlZmluZSBBVEg5S19SWF9NT1JFICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQVRIOUtfUlhfTU9SRV9BR0dSICAgICAgICAweDAyCisjZGVmaW5lIEFUSDlLX1JYX0dJICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19SWF8yMDQwICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQVRIOUtfUlhfREVMSU1fQ1JDX1BSRSAgICAweDEwCisjZGVmaW5lIEFUSDlLX1JYX0RFTElNX0NSQ19QT1NUICAgMHgyMAorI2RlZmluZSBBVEg5S19SWF9ERUNSWVBUX0JVU1kgICAgIDB4NDAKKworI2RlZmluZSBBVEg5S19SWEtFWUlYX0lOVkFMSUQJKCh1OCktMSkKKyNkZWZpbmUgQVRIOUtfVFhLRVlJWF9JTlZBTElECSgodTMyKS0xKQorCitzdHJ1Y3QgYXRoX2Rlc2MgeworCXUzMiBkc19saW5rOworCXUzMiBkc19kYXRhOworCXUzMiBkc19jdGwwOworCXUzMiBkc19jdGwxOworCXUzMiBkc19od1syMF07CisJdW5pb24geworCQlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0eDsKKwkJc3RydWN0IGF0aF9yeF9zdGF0dXMgcng7CisJCXZvaWQgKnN0YXRzOworCX0gZHNfdXM7CisJdm9pZCAqZHNfdmRhdGE7Cit9IF9fcGFja2VkOworCisjZGVmaW5lCWRzX3R4c3RhdAlkc191cy50eAorI2RlZmluZQlkc19yeHN0YXQJZHNfdXMucngKKyNkZWZpbmUgZHNfc3RhdAkJZHNfdXMuc3RhdHMKKworI2RlZmluZSBBVEg5S19UWERFU0NfQ0xSRE1BU0sJCTB4MDAwMQorI2RlZmluZSBBVEg5S19UWERFU0NfTk9BQ0sJCTB4MDAwMgorI2RlZmluZSBBVEg5S19UWERFU0NfUlRTRU5BCQkweDAwMDQKKyNkZWZpbmUgQVRIOUtfVFhERVNDX0NUU0VOQQkJMHgwMDA4CisvKiBBVEg5S19UWERFU0NfSU5UUkVRIGZvcmNlcyBhIHR4IGludGVycnVwdCB0byBiZSBnZW5lcmF0ZWQgZm9yCisgKiB0aGUgZGVzY3JpcHRvciBpdHMgbWFya2VkIG9uLiAgV2UgdGFrZSBhIHR4IGludGVycnVwdCB0byByZWFwCisgKiBkZXNjcmlwdG9ycyB3aGVuIHRoZSBoL3cgaGl0cyBhbiBFT0wgY29uZGl0aW9uIG9yCisgKiB3aGVuIHRoZSBkZXNjcmlwdG9yIGlzIHNwZWNpZmljYWxseSBtYXJrZWQgdG8gZ2VuZXJhdGUKKyAqIGFuIGludGVycnVwdCB3aXRoIHRoaXMgZmxhZy4gRGVzY3JpcHRvcnMgc2hvdWxkIGJlCisgKiBtYXJrZWQgcGVyaW9kaWNhbGx5IHRvIGluc3VyZSB0aW1lbHkgcmVwbGVuaXNoaW5nIG9mIHRoZQorICogc3VwcGx5IG5lZWRlZCBmb3Igc2VuZGluZyBmcmFtZXMuIERlZmVyaW5nIGludGVycnVwdHMKKyAqIHJlZHVjZXMgc3lzdGVtIGxvYWQgYW5kIHBvdGVudGlhbGx5IGFsbG93cyBtb3JlIGNvbmN1cnJlbnQKKyAqIHdvcmsgdG8gYmUgZG9uZSBidXQgaWYgZG9uZSB0byBhZ2dyZXNzaXZlbHkgY2FuIGNhdXNlCisgKiBzZW5kZXJzIHRvIGJhY2t1cC4gV2hlbiB0aGUgaGFyZHdhcmUgcXVldWUgaXMgbGVmdCB0b28KKyAqIGxhcmdlIHJhdGUgY29udHJvbCBpbmZvcm1hdGlvbiBtYXkgYWxzbyBiZSB0b28gb3V0IG9mCisgKiBkYXRlLiBBbiBBbHRlcm5hdGl2ZSBmb3IgdGhpcyBpcyBUWCBpbnRlcnJ1cHQgbWl0aWdhdGlvbgorICogYnV0IHRoaXMgbmVlZHMgbW9yZSB0ZXN0aW5nLiAqLworI2RlZmluZSBBVEg5S19UWERFU0NfSU5UUkVRCQkweDAwMTAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX1ZFT0wJCTB4MDAyMAorI2RlZmluZSBBVEg5S19UWERFU0NfRVhUX09OTFkJCTB4MDA0MAorI2RlZmluZSBBVEg5S19UWERFU0NfRVhUX0FORF9DVEwJMHgwMDgwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19WTUYJCTB4MDEwMAorI2RlZmluZSBBVEg5S19UWERFU0NfRlJBR19JU19PTiAJMHgwMjAwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19DQUIJCTB4MDQwMAorCisjZGVmaW5lIEFUSDlLX1JYREVTQ19JTlRSRVEJCTB4MDAyMAorCitzdHJ1Y3QgYXI1NDE2X2Rlc2MgeworCXUzMiBkc19saW5rOworCXUzMiBkc19kYXRhOworCXUzMiBkc19jdGwwOworCXUzMiBkc19jdGwxOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBjdGwyOworCQkJdTMyIGN0bDM7CisJCQl1MzIgY3RsNDsKKwkJCXUzMiBjdGw1OworCQkJdTMyIGN0bDY7CisJCQl1MzIgY3RsNzsKKwkJCXUzMiBjdGw4OworCQkJdTMyIGN0bDk7CisJCQl1MzIgY3RsMTA7CisJCQl1MzIgY3RsMTE7CisJCQl1MzIgc3RhdHVzMDsKKwkJCXUzMiBzdGF0dXMxOworCQkJdTMyIHN0YXR1czI7CisJCQl1MzIgc3RhdHVzMzsKKwkJCXUzMiBzdGF0dXM0OworCQkJdTMyIHN0YXR1czU7CisJCQl1MzIgc3RhdHVzNjsKKwkJCXUzMiBzdGF0dXM3OworCQkJdTMyIHN0YXR1czg7CisJCQl1MzIgc3RhdHVzOTsKKwkJfSB0eDsKKwkJc3RydWN0IHsKKwkJCXUzMiBzdGF0dXMwOworCQkJdTMyIHN0YXR1czE7CisJCQl1MzIgc3RhdHVzMjsKKwkJCXUzMiBzdGF0dXMzOworCQkJdTMyIHN0YXR1czQ7CisJCQl1MzIgc3RhdHVzNTsKKwkJCXUzMiBzdGF0dXM2OworCQkJdTMyIHN0YXR1czc7CisJCQl1MzIgc3RhdHVzODsKKwkJfSByeDsKKwl9IHU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFSNTQxNkRFU0MoX2RzKSAgICAgICAgICgoc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCisjZGVmaW5lIEFSNTQxNkRFU0NfQ09OU1QoX2RzKSAgICgoY29uc3Qgc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCisKKyNkZWZpbmUgZHNfY3RsMiAgICAgdS50eC5jdGwyCisjZGVmaW5lIGRzX2N0bDMgICAgIHUudHguY3RsMworI2RlZmluZSBkc19jdGw0ICAgICB1LnR4LmN0bDQKKyNkZWZpbmUgZHNfY3RsNSAgICAgdS50eC5jdGw1CisjZGVmaW5lIGRzX2N0bDYgICAgIHUudHguY3RsNgorI2RlZmluZSBkc19jdGw3ICAgICB1LnR4LmN0bDcKKyNkZWZpbmUgZHNfY3RsOCAgICAgdS50eC5jdGw4CisjZGVmaW5lIGRzX2N0bDkgICAgIHUudHguY3RsOQorI2RlZmluZSBkc19jdGwxMCAgICB1LnR4LmN0bDEwCisjZGVmaW5lIGRzX2N0bDExICAgIHUudHguY3RsMTEKKworI2RlZmluZSBkc190eHN0YXR1czAgICAgdS50eC5zdGF0dXMwCisjZGVmaW5lIGRzX3R4c3RhdHVzMSAgICB1LnR4LnN0YXR1czEKKyNkZWZpbmUgZHNfdHhzdGF0dXMyICAgIHUudHguc3RhdHVzMgorI2RlZmluZSBkc190eHN0YXR1czMgICAgdS50eC5zdGF0dXMzCisjZGVmaW5lIGRzX3R4c3RhdHVzNCAgICB1LnR4LnN0YXR1czQKKyNkZWZpbmUgZHNfdHhzdGF0dXM1ICAgIHUudHguc3RhdHVzNQorI2RlZmluZSBkc190eHN0YXR1czYgICAgdS50eC5zdGF0dXM2CisjZGVmaW5lIGRzX3R4c3RhdHVzNyAgICB1LnR4LnN0YXR1czcKKyNkZWZpbmUgZHNfdHhzdGF0dXM4ICAgIHUudHguc3RhdHVzOAorI2RlZmluZSBkc190eHN0YXR1czkgICAgdS50eC5zdGF0dXM5CisKKyNkZWZpbmUgZHNfcnhzdGF0dXMwICAgIHUucnguc3RhdHVzMAorI2RlZmluZSBkc19yeHN0YXR1czEgICAgdS5yeC5zdGF0dXMxCisjZGVmaW5lIGRzX3J4c3RhdHVzMiAgICB1LnJ4LnN0YXR1czIKKyNkZWZpbmUgZHNfcnhzdGF0dXMzICAgIHUucnguc3RhdHVzMworI2RlZmluZSBkc19yeHN0YXR1czQgICAgdS5yeC5zdGF0dXM0CisjZGVmaW5lIGRzX3J4c3RhdHVzNSAgICB1LnJ4LnN0YXR1czUKKyNkZWZpbmUgZHNfcnhzdGF0dXM2ICAgIHUucnguc3RhdHVzNgorI2RlZmluZSBkc19yeHN0YXR1czcgICAgdS5yeC5zdGF0dXM3CisjZGVmaW5lIGRzX3J4c3RhdHVzOCAgICB1LnJ4LnN0YXR1czgKKworI2RlZmluZSBBUl9GcmFtZUxlbiAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgQVJfVmlydE1vcmVGcmFnICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDAwICAgICAgMHgwMDAwZTAwMAorI2RlZmluZSBBUl9YbWl0UG93ZXIgICAgICAgIDB4MDAzZjAwMDAKKyNkZWZpbmUgQVJfWG1pdFBvd2VyX1MgICAgICAxNgorI2RlZmluZSBBUl9SVFNFbmFibGUgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQVJfVkVPTCAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEFSX0NsckRlc3RNYXNrICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBUl9UeEN0bFJzdmQwMSAgICAgIDB4MWUwMDAwMDAKKyNkZWZpbmUgQVJfVHhJbnRyUmVxICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEFSX0Rlc3RJZHhWYWxpZCAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9DVFNFbmFibGUgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9CdWZMZW4gICAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgQVJfVHhNb3JlICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX0Rlc3RJZHggICAgICAgICAgMHgwMDBmZTAwMAorI2RlZmluZSBBUl9EZXN0SWR4X1MgICAgICAgIDEzCisjZGVmaW5lIEFSX0ZyYW1lVHlwZSAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBBUl9GcmFtZVR5cGVfUyAgICAgIDIwCisjZGVmaW5lIEFSX05vQWNrICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBUl9JbnNlcnRUUyAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQVJfQ29ycnVwdEZDUyAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEFSX0V4dE9ubHkgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBBUl9FeHRBbmRDdGwgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQVJfTW9yZUFnZ3IgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEFSX0lzQWdnciAgICAgICAgICAgMHg0MDAwMDAwMAorCisjZGVmaW5lIEFSX0J1cnN0RHVyICAgICAgICAgMHgwMDAwN2ZmZgorI2RlZmluZSBBUl9CdXJzdER1cl9TICAgICAgIDAKKyNkZWZpbmUgQVJfRHVyVXBkYXRlRW5hICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwICAgMHgwMDBmMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMF9TIDE2CisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxICAgMHgwMGYwMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMV9TIDIwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyICAgMHgwZjAwMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMl9TIDI0CisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzICAgMHhmMDAwMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzM19TIDI4CisKKyNkZWZpbmUgQVJfWG1pdFJhdGUwICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1htaXRSYXRlMF9TICAgICAgMAorI2RlZmluZSBBUl9YbWl0UmF0ZTEgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfWG1pdFJhdGUxX1MgICAgICA4CisjZGVmaW5lIEFSX1htaXRSYXRlMiAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBBUl9YbWl0UmF0ZTJfUyAgICAgIDE2CisjZGVmaW5lIEFSX1htaXRSYXRlMyAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBBUl9YbWl0UmF0ZTNfUyAgICAgIDI0CisKKyNkZWZpbmUgQVJfUGFja2V0RHVyMCAgICAgICAweDAwMDA3ZmZmCisjZGVmaW5lIEFSX1BhY2tldER1cjBfUyAgICAgMAorI2RlZmluZSBBUl9SVFNDVFNRdWFsMCAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyMSAgICAgICAweDdmZmYwMDAwCisjZGVmaW5lIEFSX1BhY2tldER1cjFfUyAgICAgMTYKKyNkZWZpbmUgQVJfUlRTQ1RTUXVhbDEgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgQVJfUGFja2V0RHVyMiAgICAgICAweDAwMDA3ZmZmCisjZGVmaW5lIEFSX1BhY2tldER1cjJfUyAgICAgMAorI2RlZmluZSBBUl9SVFNDVFNRdWFsMiAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyMyAgICAgICAweDdmZmYwMDAwCisjZGVmaW5lIEFSX1BhY2tldER1cjNfUyAgICAgMTYKKyNkZWZpbmUgQVJfUlRTQ1RTUXVhbDMgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgQVJfQWdnckxlbiAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEFSX0FnZ3JMZW5fUyAgICAgICAgMAorI2RlZmluZSBBUl9UeEN0bFJzdmQ2MCAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgQVJfUGFkRGVsaW0gICAgICAgICAweDAzZmMwMDAwCisjZGVmaW5lIEFSX1BhZERlbGltX1MgICAgICAgMTgKKyNkZWZpbmUgQVJfRW5jclR5cGUgICAgICAgICAweDBjMDAwMDAwCisjZGVmaW5lIEFSX0VuY3JUeXBlX1MgICAgICAgMjYKKyNkZWZpbmUgQVJfVHhDdGxSc3ZkNjEgICAgICAweGYwMDAwMDAwCisKKyNkZWZpbmUgQVJfMjA0MF8wICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX0dJMCAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9DaGFpblNlbDAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgQVJfQ2hhaW5TZWwwX1MgICAgICAyCisjZGVmaW5lIEFSXzIwNDBfMSAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBUl9HSTEgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwxICAgICAgICAweDAwMDAwMzgwCisjZGVmaW5lIEFSX0NoYWluU2VsMV9TICAgICAgNworI2RlZmluZSBBUl8yMDQwXzIgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVJfR0kyICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFSX0NoYWluU2VsMiAgICAgICAgMHgwMDAwNzAwMAorI2RlZmluZSBBUl9DaGFpblNlbDJfUyAgICAgIDEyCisjZGVmaW5lIEFSXzIwNDBfMyAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9HSTMgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwzICAgICAgICAweDAwMGUwMDAwCisjZGVmaW5lIEFSX0NoYWluU2VsM19TICAgICAgMTcKKyNkZWZpbmUgQVJfUlRTQ1RTUmF0ZSAgICAgICAweDBmZjAwMDAwCisjZGVmaW5lIEFSX1JUU0NUU1JhdGVfUyAgICAgMjAKKyNkZWZpbmUgQVJfVHhDdGxSc3ZkNzAgICAgICAweGYwMDAwMDAwCisKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1R4UlNTSUFudDAwX1MgICAgMAorI2RlZmluZSBBUl9UeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDFfUyAgICA4CisjZGVmaW5lIEFSX1R4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBBUl9UeFJTU0lBbnQwMl9TICAgIDE2CisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDAwICAgMHgzZjAwMDAwMAorI2RlZmluZSBBUl9UeEJhU3RhdHVzICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDEgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgQVJfRnJtWG1pdE9LICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9FeGNlc3NpdmVSZXRyaWVzICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX0ZJRk9VbmRlcnJ1biAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfRmlsdGVyZWQgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9SVFNGYWlsQ250ICAgICAgICAgICAweDAwMDAwMGYwCisjZGVmaW5lIEFSX1JUU0ZhaWxDbnRfUyAgICAgICAgIDQKKyNkZWZpbmUgQVJfRGF0YUZhaWxDbnQgICAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBBUl9EYXRhRmFpbENudF9TICAgICAgICA4CisjZGVmaW5lIEFSX1ZpcnRSZXRyeUNudCAgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgQVJfVmlydFJldHJ5Q250X1MgICAgICAgMTIKKyNkZWZpbmUgQVJfVHhEZWxpbVVuZGVycnVuICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9UeERhdGFVbmRlcnJ1biAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFSX0Rlc2NDZmdFcnIgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQVJfVHhUaW1lckV4cGlyZWQgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQxMCAgICAgICAweGZmZjAwMDAwCisKKyNkZWZpbmUgQVJfU2VuZFRpbWVzdGFtcCAgICBkc190eHN0YXR1czIKKyNkZWZpbmUgQVJfQmFCaXRtYXBMb3cgICAgICBkc190eHN0YXR1czMKKyNkZWZpbmUgQVJfQmFCaXRtYXBIaWdoICAgICBkc190eHN0YXR1czQKKworI2RlZmluZSBBUl9UeFJTU0lBbnQxMCAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTBfUyAgICAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDExICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9UeFJTU0lBbnQxMV9TICAgIDgKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTIgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDEyX1MgICAgMTYKKyNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWQgICAweGZmMDAwMDAwCisjZGVmaW5lIEFSX1R4UlNTSUNvbWJpbmVkX1MgMjQKKworI2RlZmluZSBBUl9UeEVWTTAgICAgICAgICAgIGRzX3R4c3RhdHVzNQorI2RlZmluZSBBUl9UeEVWTTEgICAgICAgICAgIGRzX3R4c3RhdHVzNgorI2RlZmluZSBBUl9UeEVWTTIgICAgICAgICAgIGRzX3R4c3RhdHVzNworCisjZGVmaW5lIEFSX1R4RG9uZSAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9TZXFOdW0gICAgICAgICAgIDB4MDAwMDFmZmUKKyNkZWZpbmUgQVJfU2VxTnVtX1MgICAgICAgICAxCisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgwICAgMHgwMDAxZTAwMAorI2RlZmluZSBBUl9UeE9wRXhjZWVkZWQgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODEgICAweDAwMWMwMDAwCisjZGVmaW5lIEFSX0ZpbmFsVHhJZHggICAgICAgMHgwMDYwMDAwMAorI2RlZmluZSBBUl9GaW5hbFR4SWR4X1MgICAgIDIxCisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgyICAgMHgwMTgwMDAwMAorI2RlZmluZSBBUl9Qb3dlck1nbXQgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODMgICAweGZjMDAwMDAwCisKKyNkZWZpbmUgQVJfUnhDVExSc3ZkMDAgIDB4ZmZmZmZmZmYKKworI2RlZmluZSBBUl9CdWZMZW4gICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9SeEN0bFJzdmQwMCAgMHgwMDAwMTAwMAorI2RlZmluZSBBUl9SeEludHJSZXEgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBUl9SeEN0bFJzdmQwMSAgMHhmZmZmYzAwMAorCisjZGVmaW5lIEFSX1J4UlNTSUFudDAwICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9SeFJTU0lBbnQwMF9TICAgIDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDEgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDAxX1MgICAgOAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMiAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDJfUyAgICAxNgorI2RlZmluZSBBUl9SeFJhdGUgICAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfUnhSYXRlX1MgICAgICAgICAyNAorI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQwMCAgIDB4ZmYwMDAwMDAKKworI2RlZmluZSBBUl9EYXRhTGVuICAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgQVJfUnhNb3JlICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX051bURlbGltICAgICAgICAgMHgwMDNmYzAwMAorI2RlZmluZSBBUl9OdW1EZWxpbV9TICAgICAgIDE0CisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDEwICAgMHhmZjgwMDAwMAorCisjZGVmaW5lIEFSX1JjdlRpbWVzdGFtcCAgICAgZHNfcnhzdGF0dXMyCisKKyNkZWZpbmUgQVJfR0kgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSXzIwNDAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9QYXJhbGxlbDQwICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfUGFyYWxsZWw0MF9TICAgICAyCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDMwICAgMHgwMDAwMDBmOAorI2RlZmluZSBBUl9SeEFudGVubmEJICAgIDB4ZmZmZmZmMDAKKyNkZWZpbmUgQVJfUnhBbnRlbm5hX1MJICAgIDgKKworI2RlZmluZSBBUl9SeFJTU0lBbnQxMCAgICAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTBfUyAgICAgICAgICAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDExICAgICAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9SeFJTU0lBbnQxMV9TICAgICAgICAgIDgKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTIgICAgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDEyX1MgICAgICAgICAgMTYKKyNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWQgICAgICAgICAweGZmMDAwMDAwCisjZGVmaW5lIEFSX1J4UlNTSUNvbWJpbmVkX1MgICAgICAgMjQKKworI2RlZmluZSBBUl9SeEVWTTAgICAgICAgICAgIGRzX3J4c3RhdHVzNAorI2RlZmluZSBBUl9SeEVWTTEgICAgICAgICAgIGRzX3J4c3RhdHVzNQorI2RlZmluZSBBUl9SeEVWTTIgICAgICAgICAgIGRzX3J4c3RhdHVzNgorCisjZGVmaW5lIEFSX1J4RG9uZSAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9SeEZyYW1lT0sgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfQ1JDRXJyICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFSX0RlY3J5cHRDUkNFcnIgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9QSFlFcnIgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVJfTWljaGFlbEVyciAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFSX1ByZURlbGltQ1JDRXJyICAgMHgwMDAwMDA0MAorI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQ3MCAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVJfUnhLZXlJZHhWYWxpZCAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFSX0tleUlkeCAgICAgICAgICAgMHgwMDAwZmUwMAorI2RlZmluZSBBUl9LZXlJZHhfUyAgICAgICAgIDkKKyNkZWZpbmUgQVJfUEhZRXJyQ29kZSAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1BIWUVyckNvZGVfUyAgICAgOAorI2RlZmluZSBBUl9SeE1vcmVBZ2dyICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQVJfUnhBZ2dyICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFSX1Bvc3REZWxpbUNSQ0VyciAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQ3MSAgIDB4M2ZmODAwMDAKKyNkZWZpbmUgQVJfRGVjcnlwdEJ1c3lFcnIgICAweDQwMDAwMDAwCisjZGVmaW5lIEFSX0tleU1pc3MgICAgICAgICAgMHg4MDAwMDAwMAorCitlbnVtIGF0aDlrX3R4X3F1ZXVlIHsKKwlBVEg5S19UWF9RVUVVRV9JTkFDVElWRSA9IDAsCisJQVRIOUtfVFhfUVVFVUVfREFUQSwKKwlBVEg5S19UWF9RVUVVRV9CRUFDT04sCisJQVRIOUtfVFhfUVVFVUVfQ0FCLAorCUFUSDlLX1RYX1FVRVVFX1VBUFNELAorCUFUSDlLX1RYX1FVRVVFX1BTUE9MTAorfTsKKworI2RlZmluZQlBVEg5S19OVU1fVFhfUVVFVUVTIDEwCisKK2VudW0gYXRoOWtfdHhfcXVldWVfc3VidHlwZSB7CisJQVRIOUtfV01FX0FDX0JLID0gMCwKKwlBVEg5S19XTUVfQUNfQkUsCisJQVRIOUtfV01FX0FDX1ZJLAorCUFUSDlLX1dNRV9BQ19WTywKKwlBVEg5S19XTUVfVVBTRAorfTsKKworZW51bSBhdGg5a190eF9xdWV1ZV9mbGFncyB7CisJVFhRX0ZMQUdfVFhPS0lOVF9FTkFCTEUgPSAweDAwMDEsCisJVFhRX0ZMQUdfVFhFUlJJTlRfRU5BQkxFID0gMHgwMDAxLAorCVRYUV9GTEFHX1RYREVTQ0lOVF9FTkFCTEUgPSAweDAwMDIsCisJVFhRX0ZMQUdfVFhFT0xJTlRfRU5BQkxFID0gMHgwMDA0LAorCVRYUV9GTEFHX1RYVVJOSU5UX0VOQUJMRSA9IDB4MDAwOCwKKwlUWFFfRkxBR19CQUNLT0ZGX0RJU0FCTEUgPSAweDAwMTAsCisJVFhRX0ZMQUdfQ09NUFJFU1NJT05fRU5BQkxFID0gMHgwMDIwLAorCVRYUV9GTEFHX1JEWVRJTUVfRVhQX1BPTElDWV9FTkFCTEUgPSAweDAwNDAsCisJVFhRX0ZMQUdfRlJBR19CVVJTVF9CQUNLT0ZGX0VOQUJMRSA9IDB4MDA4MCwKK307CisKKyNkZWZpbmUgQVRIOUtfVFhRX1VTRURFRkFVTFQgKCh1MzIpIC0xKQorI2RlZmluZSBBVEg5S19UWFFfVVNFX0xPQ0tPVVRfQktPRkZfRElTIDB4MDAwMDAwMDEKKworI2RlZmluZSBBVEg5S19ERUNPTVBfTUFTS19TSVpFICAgICAxMjgKKyNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORCAgNTAKKyNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCAgOTYKKworZW51bSBhdGg5a19wa3RfdHlwZSB7CisJQVRIOUtfUEtUX1RZUEVfTk9STUFMID0gMCwKKwlBVEg5S19QS1RfVFlQRV9BVElNLAorCUFUSDlLX1BLVF9UWVBFX1BTUE9MTCwKKwlBVEg5S19QS1RfVFlQRV9CRUFDT04sCisJQVRIOUtfUEtUX1RZUEVfUFJPQkVfUkVTUCwKKwlBVEg5S19QS1RfVFlQRV9DSElSUCwKKwlBVEg5S19QS1RfVFlQRV9HUlBfUE9MTCwKK307CisKK3N0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHsKKwl1MzIgdHFpX3ZlcjsKKwllbnVtIGF0aDlrX3R4X3F1ZXVlIHRxaV90eXBlOworCWVudW0gYXRoOWtfdHhfcXVldWVfc3VidHlwZSB0cWlfc3VidHlwZTsKKwllbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHRxaV9xZmxhZ3M7CisJdTMyIHRxaV9wcmlvcml0eTsKKwl1MzIgdHFpX2FpZnM7CisJdTMyIHRxaV9jd21pbjsKKwl1MzIgdHFpX2N3bWF4OworCXUxNiB0cWlfc2hyZXRyeTsKKwl1MTYgdHFpX2xncmV0cnk7CisJdTMyIHRxaV9jYnJQZXJpb2Q7CisJdTMyIHRxaV9jYnJPdmVyZmxvd0xpbWl0OworCXUzMiB0cWlfYnVyc3RUaW1lOworCXUzMiB0cWlfcmVhZHlUaW1lOworCXUzMiB0cWlfcGh5c0NvbXBCdWY7CisJdTMyIHRxaV9pbnRGbGFnczsKK307CisKK2VudW0gYXRoOWtfcnhfZmlsdGVyIHsKKwlBVEg5S19SWF9GSUxURVJfVUNBU1QgPSAweDAwMDAwMDAxLAorCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVCA9IDB4MDAwMDAwMDIsCisJQVRIOUtfUlhfRklMVEVSX0JDQVNUID0gMHgwMDAwMDAwNCwKKwlBVEg5S19SWF9GSUxURVJfQ09OVFJPTCA9IDB4MDAwMDAwMDgsCisJQVRIOUtfUlhfRklMVEVSX0JFQUNPTiA9IDB4MDAwMDAwMTAsCisJQVRIOUtfUlhfRklMVEVSX1BST00gPSAweDAwMDAwMDIwLAorCUFUSDlLX1JYX0ZJTFRFUl9QUk9CRVJFUSA9IDB4MDAwMDAwODAsCisJQVRIOUtfUlhfRklMVEVSX1BIWUVSUiA9IDB4MDAwMDAxMDAsCisJQVRIOUtfUlhfRklMVEVSX01ZQkVBQ09OID0gMHgwMDAwMDIwMCwKKwlBVEg5S19SWF9GSUxURVJfUFNQT0xMID0gMHgwMDAwNDAwMCwKKwlBVEg5S19SWF9GSUxURVJfUEhZUkFEQVIgPSAweDAwMDAyMDAwLAorCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEwgPSAweDAwMDA4MDAwLAorfTsKKworI2RlZmluZSBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgIDB4MDAwMQorI2RlZmluZSBBVEg5S19SQVRFU0VSSUVTXzIwNDAgICAgIDB4MDAwMgorI2RlZmluZSBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSAgIDB4MDAwNAorCitzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHsKKwl1MzIgVHJpZXM7CisJdTMyIFJhdGU7CisJdTMyIFBrdER1cmF0aW9uOworCXUzMiBDaFNlbDsKKwl1MzIgUmF0ZUZsYWdzOworfTsKKworc3RydWN0IGF0aDlrX2tleXZhbCB7CisJdTgga3ZfdHlwZTsKKwl1OCBrdl9wYWQ7CisJdTE2IGt2X2xlbjsKKwl1OCBrdl92YWxbMTZdOyAvKiBUSyAqLworCXU4IGt2X21pY1s4XTsgLyogTWljaGFlbCBNSUMga2V5ICovCisJdTgga3ZfdHhtaWNbOF07IC8qIE1pY2hhZWwgTUlDIFRYIGtleSAodXNlZCBvbmx5IGlmIHRoZSBoYXJkd2FyZQorCQkJICogc3VwcG9ydHMgYm90aCBNSUMga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnk7CisJCQkgKiBpbiB0aGF0IGNhc2UsIGt2X21pYyBpcyB0aGUgUlgga2V5KSAqLworfTsKKworZW51bSBhdGg5a19rZXlfdHlwZSB7CisJQVRIOUtfS0VZX1RZUEVfQ0xFQVIsCisJQVRIOUtfS0VZX1RZUEVfV0VQLAorCUFUSDlLX0tFWV9UWVBFX0FFUywKKwlBVEg5S19LRVlfVFlQRV9US0lQLAorfTsKKworZW51bSBhdGg5a19jaXBoZXIgeworCUFUSDlLX0NJUEhFUl9XRVAgPSAwLAorCUFUSDlLX0NJUEhFUl9BRVNfT0NCID0gMSwKKwlBVEg5S19DSVBIRVJfQUVTX0NDTSA9IDIsCisJQVRIOUtfQ0lQSEVSX0NLSVAgPSAzLAorCUFUSDlLX0NJUEhFUl9US0lQID0gNCwKKwlBVEg5S19DSVBIRVJfQ0xSID0gNSwKKwlBVEg5S19DSVBIRVJfTUlDID0gMTI3Cit9OworCitlbnVtIGF0aDlrX2h0X21hY21vZGUgeworCUFUSDlLX0hUX01BQ01PREVfMjAgPSAwLAorCUFUSDlLX0hUX01BQ01PREVfMjA0MCA9IDEsCit9OworCitlbnVtIGF0aDlrX2h0X2V4dHByb3RzcGFjaW5nIHsKKwlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yMCA9IDAsCisJQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUgPSAxLAorfTsKKworc3RydWN0IGF0aF9odzsKK3N0cnVjdCBhdGg5a19jaGFubmVsOworc3RydWN0IGF0aF9yYXRlX3RhYmxlOworCit1MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK2Jvb2wgYXRoOWtfaHdfcHV0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxLCB1MzIgdHhkcCk7Citib29sIGF0aDlrX2h3X3R4c3RhcnQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK3UzMiBhdGg5a19od19udW10eHBlbmRpbmcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK2Jvb2wgYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCk7Citib29sIGF0aDlrX2h3X3N0b3B0eGRtYShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od19maWxsdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJIHUzMiBzZWdMZW4sIGJvb2wgZmlyc3RTZWcsCisJCQkgYm9vbCBsYXN0U2VnLCBjb25zdCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzMCk7Cit2b2lkIGF0aDlrX2h3X2NsZWFydHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKK2ludCBhdGg5a19od190eHByb2NkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCSAgICB1MzIgcGt0TGVuLCBlbnVtIGF0aDlrX3BrdF90eXBlIHR5cGUsIHUzMiB0eFBvd2VyLAorCQkJICAgIHUzMiBrZXlJeCwgZW51bSBhdGg5a19rZXlfdHlwZSBrZXlUeXBlLCB1MzIgZmxhZ3MpOwordm9pZCBhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSAgc3RydWN0IGF0aF9kZXNjICpsYXN0ZHMsCisJCQkJICB1MzIgZHVyVXBkYXRlRW4sIHUzMiBydHNjdHNSYXRlLAorCQkJCSAgdTMyIHJ0c2N0c0R1cmF0aW9uLAorCQkJCSAgc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbXSwKKwkJCQkgIHUzMiBuc2VyaWVzLCB1MzIgZmxhZ3MpOwordm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCQl1MzIgYWdnckxlbik7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCQkgdTMyIG51bURlbGltcyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwordm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSAgIHUzMiBidXJzdER1cmF0aW9uKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCQkgICAgIHUzMiB2bWYpOwordm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgKnR4cXMpOworYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOworYm9vbCBhdGg5a19od19nZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKKwkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOworaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a190eF9xdWV1ZSB0eXBlLAorCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOworYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od19yZXNldHR4cXVldWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK2ludCBhdGg5a19od19yeHByb2NkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJdTMyIHBhLCBzdHJ1Y3QgYXRoX2Rlc2MgKm5kcywgdTY0IHRzZik7Citib29sIGF0aDlrX2h3X3NldHVwcnhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJICB1MzIgc2l6ZSwgdTMyIGZsYWdzKTsKK2Jvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpOwordm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApOwordm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0YXJ0cGN1cmVjZWl2ZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0b3BwY3VyZWN2KHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOworCisjZW5kaWYgLyogTUFDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYwppbmRleCAzYzA0MDQ0Li44ZGI3NWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCkBAIC0xNSw5ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEFUSF9QQ0lfVkVSU0lPTiAiMC4xIgogCkBAIC0yOCw4NCArMjYsMTI5IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDIzKSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI0KSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI3KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI5KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJBKSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJCKSB9LCAvKiBQQ0ktRSAqLwotCXsgMCB9CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uIik7CisKKy8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLworCisjZGVmaW5lIENIQU4yRyhfZnJlcSwgX2lkeCkgIHsgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworI2RlZmluZSBDSEFONUcoX2ZyZXEsIF9pZHgpIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworLyogU29tZSAyIEdIeiByYWRpb3MgYXJlIGFjdHVhbGx5IHR1bmFibGUgb24gMjMxMi0yNzMyCisgKiBvbiA1IE1IeiBzdGVwcywgd2Ugc3VwcG9ydCB0aGUgY2hhbm5lbHMgd2hpY2ggd2Uga25vdworICogd2UgaGF2ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBhbGwgY2FyZHMgdGhvdWdoIHRvIG1ha2UKKyAqIHRoaXMgc3RhdGljICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGF0aDlrXzJnaHpfY2hhbnRhYmxlW10gPSB7CisJQ0hBTjJHKDI0MTIsIDApLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNywgMSksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyLCAyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcsIDMpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiwgNCksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3LCA1KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIsIDYpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NywgNyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyLCA4KSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcsIDkpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIsIDEwKSwgLyogQ2hhbm5lbCAxMSAqLworCUNIQU4yRygyNDY3LCAxMSksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiwgMTIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQsIDEzKSwgLyogQ2hhbm5lbCAxNCAqLwogfTsKIAotc3RhdGljIHZvaWQgYXRoX2RldGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisvKiBTb21lIDUgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiBYWFhYLVlZWVkKKyAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93CisgKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQorICogdGhpcyBzdGF0aWMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfNWdoel9jaGFudGFibGVbXSA9IHsKKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDEgKi8KKwlDSEFONUcoNTE4MCwgMTQpLCAvKiBDaGFubmVsIDM2ICovCisJQ0hBTjVHKDUyMDAsIDE1KSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwLCAxNiksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCwgMTcpLCAvKiBDaGFubmVsIDQ4ICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAyICovCisJQ0hBTjVHKDUyNjAsIDE4KSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwLCAxOSksIC8qIENoYW5uZWwgNTYgKi8KKwlDSEFONUcoNTMwMCwgMjApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjAsIDIxKSwgLyogQ2hhbm5lbCA2NCAqLworCS8qIF9XZV8gY2FsbCB0aGlzICJNaWRkbGUgYmFuZCIgKi8KKwlDSEFONUcoNTUwMCwgMjIpLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwLCAyMyksIC8qIENoYW5uZWwgMTA0ICovCisJQ0hBTjVHKDU1NDAsIDI0KSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCwgMjUpLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwLCAyNiksIC8qIENoYW5uZWwgMTE2ICovCisJQ0hBTjVHKDU2MDAsIDI3KSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCwgMjgpLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwLCAyOSksIC8qIENoYW5uZWwgMTI4ICovCisJQ0hBTjVHKDU2NjAsIDMwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCwgMzEpLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwLCAzMiksIC8qIENoYW5uZWwgMTQwICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAzICovCisJQ0hBTjVHKDU3NDUsIDMzKSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSwgMzQpLCAvKiBDaGFubmVsIDE1MyAqLworCUNIQU41Ryg1Nzg1LCAzNSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUsIDM2KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSwgMzcpLCAvKiBDaGFubmVsIDE2NSAqLworfTsKIAotLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLwotCi1zdGF0aWMgdm9pZCBidXNfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQorc3RhdGljIHZvaWQgYXRoX2NhY2hlX2NvbmZfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7Ci0JdTggdTh0bXA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShzYy0+cGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgKHU4ICopJnU4dG1wKTsKLQkqY3N6ID0gKGludCl1OHRtcDsKLQotCS8qCi0JICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgotCSAqIHRoZSBib290cm9tIGhhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgYWxsIFBDSSBkZXZpY2VzLgotCSAqIFNvbWV0aW1lcyB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIG5vdCBzZXQKLQkgKi8KLQotCWlmICgqY3N6ID09IDApCi0JCSpjc3ogPSBERUZBVUxUX0NBQ0hFTElORSA+PiAyOyAgIC8qIFVzZSB0aGUgZGVmYXVsdCBzaXplICovCi19Ci0KLXN0YXRpYyB2b2lkIGF0aF9zZXRjdXJtb2RlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIHdpcmVsZXNzX21vZGUgbW9kZSkKLXsKLQlzYy0+Y3VyX3JhdGVfdGFibGUgPSBzYy0+aHdfcmF0ZV90YWJsZVttb2RlXTsKLQkvKgotCSAqIEFsbCBwcm90ZWN0aW9uIGZyYW1lcyBhcmUgdHJhbnNtaXRlZCBhdCAyTWIvcyBmb3IKLQkgKiAxMWcsIG90aGVyd2lzZSBhdCAxTWIvcy4KLQkgKiBYWFggc2VsZWN0IHByb3RlY3Rpb24gcmF0ZSBpbmRleCBmcm9tIHJhdGUgdGFibGUuCi0JICovCi0Jc2MtPnNjX3Byb3RyaXggPSAobW9kZSA9PSBBVEg5S19NT0RFXzExRyA/IDEgOiAwKTsKLX0KLQotc3RhdGljIGVudW0gd2lyZWxlc3NfbW9kZSBhdGhfY2hhbjJtb2RlKHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0EpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQTsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0cpCi0JCXJldHVybiBBVEg5S19NT0RFXzExRzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0IpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQjsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQyMCkKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOQV9IVDIwOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUMjA7Ci0JZWxzZSBpZiAoY2hhbi0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBQTFVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpCi0JCXJldHVybiBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOR19IVDQwUExVUzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzsKLQotCVdBUk5fT04oMSk7IC8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLQotCXJldHVybiBBVEg5S19NT0RFXzExQjsKKwlzd2l0Y2ggKGNvbmYtPmNoYW5uZWwtPmJhbmQpIHsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCWlmIChjb25mX2lzX2h0MjAoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkdfSFQyMF07CisJCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVNdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwUExVU107CisJCWVsc2UKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFHXTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQlpZiAoY29uZl9pc19odDIwKGNvbmYpKQorCQkJc2MtPmN1cl9yYXRlX3RhYmxlID0KKwkJCSAgc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMU5BX0hUMjBdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTXTsKKwkJZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVNdOworCQllbHNlCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExQV07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhdGhfdXBkYXRlX3R4cG93KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1MzIgdHhwb3c7CiAKLQlpZiAoc2MtPnNjX2N1cnR4cG93ICE9IHNjLT5zY19jb25maWcudHhwb3dsaW1pdCkgewotCQlhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KGFoLCBzYy0+c2NfY29uZmlnLnR4cG93bGltaXQpOworCWlmIChzYy0+Y3VydHhwb3cgIT0gc2MtPmNvbmZpZy50eHBvd2xpbWl0KSB7CisJCWF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoYWgsIHNjLT5jb25maWcudHhwb3dsaW1pdCk7CiAJCS8qIHJlYWQgYmFjayBpbiBjYXNlIHZhbHVlIGlzIGNsYW1wZWQgKi8KIAkJYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX1RYUE9XLCAxLCAmdHhwb3cpOwotCQlzYy0+c2NfY3VydHhwb3cgPSB0eHBvdzsKKwkJc2MtPmN1cnR4cG93ID0gdHhwb3c7CiAJfQogfQogCkBAIC0xNzYsMTUwICsyMTksODcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4cmF0ZXM7IGkrKykgewogCQlyYXRlW2ldLmJpdHJhdGUgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVrYnBzIC8gMTAwOwogCQlyYXRlW2ldLmh3X3ZhbHVlID0gcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRlY29kZTsKKwkJaWYgKHJhdGVfdGFibGUtPmluZm9baV0uc2hvcnRfcHJlYW1ibGUpIHsKKwkJCXJhdGVbaV0uaHdfdmFsdWVfc2hvcnQgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVjb2RlIHwKKwkJCQlyYXRlX3RhYmxlLT5pbmZvW2ldLnNob3J0X3ByZWFtYmxlOworCQkJcmF0ZVtpXS5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFOworCQl9CiAJCXNiYW5kLT5uX2JpdHJhdGVzKys7CisKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJSYXRlOiAlMmRNYnBzLCByYXRlY29kZTogJTJkXG4iLAogCQkJcmF0ZVtpXS5iaXRyYXRlIC8gMTAsIHJhdGVbaV0uaHdfdmFsdWUpOwogCX0KIH0KIAotc3RhdGljIGludCBhdGhfc2V0dXBfY2hhbm5lbHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBuY2hhbiwgaSwgYSA9IDAsIGIgPSAwOwotCXU4IHJlZ2NsYXNzaWRzW0FUSF9SRUdDTEFTU0lEU19NQVhdOwotCXUzMiBucmVnY2xhc3MgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRfMmdoejsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kXzVnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzJnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzVnaHo7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7Ci0KLQkvKiBGaWxsIGluIGFoLT5haF9jaGFubmVscyAqLwotCWlmICghYXRoOWtfcmVnZF9pbml0X2NoYW5uZWxzKGFoLCBBVEhfQ0hBTl9NQVgsICh1MzIgKikmbmNoYW4sCi0JCQkJICAgICAgcmVnY2xhc3NpZHMsIEFUSF9SRUdDTEFTU0lEU19NQVgsCi0JCQkJICAgICAgJm5yZWdjbGFzcywgQ1RSWV9ERUZBVUxULCBmYWxzZSwgMSkpIHsKLQkJdTMyIHJkID0gYWgtPmFoX2N1cnJlbnRSRDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gY29sbGVjdCBjaGFubmVsIGxpc3Q7ICIKLQkJCSJyZWdkb21haW4gbGlrZWx5ICV1IGNvdW50cnkgY29kZSAldVxuIiwKLQkJCXJkLCBDVFJZX0RFRkFVTFQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQliYW5kXzJnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQliYW5kXzVnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQljaGFuXzJnaHogPSBzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JY2hhbl81Z2h6ID0gc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCi0JZm9yIChpID0gMDsgaSA8IG5jaGFuOyBpKyspIHsKLQkJYyA9ICZhaC0+YWhfY2hhbm5lbHNbaV07Ci0JCWlmIChJU19DSEFOXzJHSFooYykpIHsKLQkJCWNoYW5fMmdoelthXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQkJCWNoYW5fMmdoelthXS5jZW50ZXJfZnJlcSA9IGMtPmNoYW5uZWw7Ci0JCQljaGFuXzJnaHpbYV0ubWF4X3Bvd2VyID0gYy0+bWF4VHhQb3dlcjsKLQotCQkJaWYgKGMtPnByaXZGbGFncyAmIENIQU5ORUxfRElTQUxMT1dfQURIT0MpCi0JCQkJY2hhbl8yZ2h6W2FdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lCU1M7Ci0JCQlpZiAoYy0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKQotCQkJCWNoYW5fMmdoelthXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47Ci0KLQkJCWJhbmRfMmdoei0+bl9jaGFubmVscyA9ICsrYTsKLQotCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICIyTUh6IGNoYW5uZWw6ICVkLCAiCi0JCQkJImNoYW5uZWxGbGFnczogMHgleFxuIiwKLQkJCQljLT5jaGFubmVsLCBjLT5jaGFubmVsRmxhZ3MpOwotCQl9IGVsc2UgaWYgKElTX0NIQU5fNUdIWihjKSkgewotCQkJY2hhbl81Z2h6W2JdLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwotCQkJY2hhbl81Z2h6W2JdLmNlbnRlcl9mcmVxID0gYy0+Y2hhbm5lbDsKLQkJCWNoYW5fNWdoeltiXS5tYXhfcG93ZXIgPSBjLT5tYXhUeFBvd2VyOwotCi0JCQlpZiAoYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ESVNBTExPV19BREhPQykKLQkJCQljaGFuXzVnaHpbYl0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQkJCWlmIChjLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpCi0JCQkJY2hhbl81Z2h6W2JdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKLQotCQkJYmFuZF81Z2h6LT5uX2NoYW5uZWxzID0gKytiOwotCi0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIjVNSHogY2hhbm5lbDogJWQsICIKLQkJCQkiY2hhbm5lbEZsYWdzOiAweCV4XG4iLAotCQkJCWMtPmNoYW5uZWwsIGMtPmNoYW5uZWxGbGFncyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFNldC9jaGFuZ2UgY2hhbm5lbHMuICBJZiB0aGUgY2hhbm5lbCBpcyByZWFsbHkgYmVpbmcgY2hhbmdlZCwgaXQncyBkb25lCiAgKiBieSByZXNldGluZyB0aGUgY2hpcC4gIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtdXN0IGZpcnN0IGNsZWFudXAgYW55IHBlbmRpbmcKICAqIERNQSwgdGhlbiByZXN0YXJ0IHN0dWZmLgogKi8KLXN0YXRpYyBpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pCitpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpoY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJYm9vbCBmYXN0Y2MgPSB0cnVlLCBzdG9wcGVkOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWw7CisJaW50IHI7CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoaGNoYW4tPmNoYW5uZWwgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsIHx8Ci0JICAgIGhjaGFuLT5jaGFubmVsRmxhZ3MgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MgfHwKLQkgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0NIQUlOTUFTS19VUERBVEUpIHx8Ci0JICAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkgewotCQlpbnQgc3RhdHVzOwotCQkvKgotCQkgKiBUaGlzIGlzIG9ubHkgcGVyZm9ybWVkIGlmIHRoZSBjaGFubmVsIHNldHRpbmdzIGhhdmUKLQkJICogYWN0dWFsbHkgY2hhbmdlZC4KLQkJICoKLQkJICogVG8gc3dpdGNoIGNoYW5uZWxzIGNsZWFyIGFueSBwZW5kaW5nIERNQSBvcGVyYXRpb25zOwotCQkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCi0JCSAqIGhhcmR3YXJlIGF0IHRoZSBuZXcgZnJlcXVlbmN5LCBhbmQgdGhlbiByZS1lbmFibGUKLQkJICogdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhlIGgvdy4KLQkJICovCi0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQkJYXRoX2RyYWludHhxKHNjLCBmYWxzZSk7Ci0JCXN0b3BwZWQgPSBhdGhfc3RvcHJlY3Yoc2MpOworCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKLQkJLyogWFhYOiBkbyBub3QgZmx1c2ggcmVjZWl2ZSBxdWV1ZSBoZXJlLiBXZSBkb24ndCB3YW50Ci0JCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgotCQkgKiBjaGFuZ2luZyBjaGFubmVsLiAqLworCS8qCisJICogVGhpcyBpcyBvbmx5IHBlcmZvcm1lZCBpZiB0aGUgY2hhbm5lbCBzZXR0aW5ncyBoYXZlCisJICogYWN0dWFsbHkgY2hhbmdlZC4KKwkgKgorCSAqIFRvIHN3aXRjaCBjaGFubmVscyBjbGVhciBhbnkgcGVuZGluZyBETUEgb3BlcmF0aW9uczsKKwkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCisJICogaGFyZHdhcmUgYXQgdGhlIG5ldyBmcmVxdWVuY3ksIGFuZCB0aGVuIHJlLWVuYWJsZQorCSAqIHRoZSByZWxldmFudCBiaXRzIG9mIHRoZSBoL3cuCisJICovCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCWF0aF9kcmFpbl9hbGxfdHhxKHNjLCBmYWxzZSk7CisJc3RvcHBlZCA9IGF0aF9zdG9wcmVjdihzYyk7CiAKLQkJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKLQkJCWZhc3RjYyA9IGZhbHNlOworCS8qIFhYWDogZG8gbm90IGZsdXNoIHJlY2VpdmUgcXVldWUgaGVyZS4gV2UgZG9uJ3Qgd2FudAorCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgorCSAqIGNoYW5naW5nIGNoYW5uZWwuICovCiAKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkiKCV1IE1IeikgLT4gKCV1IE1IeiksIGNmbGFnczoleCwgY2hhbndpZHRoOiAlZFxuIiwKLQkJCXNjLT5zY19haC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWhjaGFuLT5jaGFubmVsLCBoY2hhbi0+Y2hhbm5lbEZsYWdzLCBzYy0+dHhfY2hhbl93aWR0aCk7CisJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKKwkJZmFzdGNjID0gZmFsc2U7CiAKLQkJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJaWYgKCFhdGg5a19od19yZXNldChhaCwgaGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsIGZhc3RjYywgJnN0YXR1cykpIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIgotCQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsIGhjaGFuLT5jaGFubmVsLAotCQkJCQkJICBoY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCQloY2hhbi0+Y2hhbm5lbCwgaGNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCSIoJXUgTUh6KSAtPiAoJXUgTUh6KSwgY2hhbndpZHRoOiAlZFxuIiwKKwkJc2MtPnNjX2FoLT5jdXJjaGFuLT5jaGFubmVsLAorCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgc2MtPnR4X2NoYW5fd2lkdGgpOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKworCXIgPSBhdGg5a19od19yZXNldChhaCwgaGNoYW4sIGZhc3RjYyk7CisJaWYgKHIpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSAiCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7Ci0KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0ZVTExfUkVTRVQ7Ci0KLQkJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlhdGhfc2V0Y3VybW9kZShzYywgYXRoX2NoYW4ybW9kZShoY2hhbikpOwotCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7CisJCXJldHVybiByOwogCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CisKKwlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0NIQUlOTUFTS19VUERBVEU7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9GVUxMX1JFU0VUOworCisJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzdGFydCByZWN2IGxvZ2ljXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKKwlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyLDEyMyArMzEyLDEyMiBAQAogICovCiBzdGF0aWMgdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgbG9uZ2NhbCA9IGZhbHNlOwogCWJvb2wgc2hvcnRjYWwgPSBmYWxzZTsKIAlib29sIGFuaWZsYWcgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgdGltZXN0YW1wID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQl1MzIgY2FsX2ludGVydmFsOworCXUzMiBjYWxfaW50ZXJ2YWwsIHNob3J0X2NhbF9pbnRlcnZhbDsKIAotCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCWFoID0gc2MtPnNjX2FoOworCXNob3J0X2NhbF9pbnRlcnZhbCA9IChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSA/CisJCUFUSF9BUF9TSE9SVF9DQUxJTlRFUlZBTCA6IEFUSF9TVEFfU0hPUlRfQ0FMSU5URVJWQUw7CiAKIAkvKgogCSogZG9uJ3QgY2FsaWJyYXRlIHdoZW4gd2UncmUgc2Nhbm5pbmcuCiAJKiB3ZSBhcmUgbW9zdCBsaWtlbHkgbm90IG9uIG91ciBob21lIGNoYW5uZWwuCiAJKi8KLQlpZiAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCXJldHVybjsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCisJCWdvdG8gc2V0X3RpbWVyOwogCiAJLyogTG9uZyBjYWxpYnJhdGlvbiBydW5zIGluZGVwZW5kZW50bHkgb2Ygc2hvcnQgY2FsaWJyYXRpb24uICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2xvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmxvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CiAJCWxvbmdjYWwgPSB0cnVlOwogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOSSwgImxvbmdjYWwgQCVsdVxuIiwgamlmZmllcyk7Ci0JCXNjLT5zY19hbmkuc2NfbG9uZ2NhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5sb25nY2FsX3RpbWVyID0gdGltZXN0YW1wOwogCX0KIAotCS8qIFNob3J0IGNhbGlicmF0aW9uIGFwcGxpZXMgb25seSB3aGlsZSBzY19jYWxkb25lIGlzIGZhbHNlICovCi0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpIHsKLQkJaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX3Nob3J0Y2FsX3RpbWVyKSA+PQotCQkgICAgQVRIX1NIT1JUX0NBTElOVEVSVkFMKSB7CisJLyogU2hvcnQgY2FsaWJyYXRpb24gYXBwbGllcyBvbmx5IHdoaWxlIGNhbGRvbmUgaXMgZmFsc2UgKi8KKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkgeworCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkuc2hvcnRjYWxfdGltZXIpID49IHNob3J0X2NhbF9pbnRlcnZhbCkgewogCQkJc2hvcnRjYWwgPSB0cnVlOwogCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksICJzaG9ydGNhbCBAJWx1XG4iLCBqaWZmaWVzKTsKLQkJCXNjLT5zY19hbmkuc2Nfc2hvcnRjYWxfdGltZXIgPSB0aW1lc3RhbXA7Ci0JCQlzYy0+c2NfYW5pLnNjX3Jlc2V0Y2FsX3RpbWVyID0gdGltZXN0YW1wOworCQkJc2MtPmFuaS5zaG9ydGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkucmVzZXRjYWxfdGltZXIgPSB0aW1lc3RhbXA7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5zY19hbmkuc2NfcmVzZXRjYWxfdGltZXIpID49CisJCWlmICgodGltZXN0YW1wIC0gc2MtPmFuaS5yZXNldGNhbF90aW1lcikgPj0KIAkJICAgIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMKSB7Ci0JCQlhdGg5a19od19yZXNldF9jYWx2YWxpZChhaCwgYWgtPmFoX2N1cmNoYW4sCi0JCQkJCQkmc2MtPnNjX2FuaS5zY19jYWxkb25lKTsKLQkJCWlmIChzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCQkJc2MtPnNjX2FuaS5zY19yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkuY2FsZG9uZSA9IGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKGFoKTsKKwkJCWlmIChzYy0+YW5pLmNhbGRvbmUpCisJCQkJc2MtPmFuaS5yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKIAkJfQogCX0KIAogCS8qIFZlcmlmeSB3aGV0aGVyIHdlIG11c3QgY2hlY2sgQU5JICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2NoZWNrYW5pX3RpbWVyKSA+PQotCSAgIEFUSF9BTklfUE9MTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmNoZWNrYW5pX3RpbWVyKSA+PSBBVEhfQU5JX1BPTExJTlRFUlZBTCkgewogCQlhbmlmbGFnID0gdHJ1ZTsKLQkJc2MtPnNjX2FuaS5zY19jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKIAl9CiAKIAkvKiBTa2lwIGFsbCBwcm9jZXNzaW5nIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KIAlpZiAobG9uZ2NhbCB8fCBzaG9ydGNhbCB8fCBhbmlmbGFnKSB7CiAJCS8qIENhbGwgQU5JIHJvdXRpbmUgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChhbmlmbGFnKQotCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+c2NfaGFsc3RhdHMsCi0JCQkJCSAgICAgYWgtPmFoX2N1cmNoYW4pOworCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+bm9kZXN0YXRzLCBhaC0+Y3VyY2hhbik7CiAKIAkJLyogUGVyZm9ybSBjYWxpYnJhdGlvbiBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGxvbmdjYWwgfHwgc2hvcnRjYWwpIHsKIAkJCWJvb2wgaXNjYWxkb25lID0gZmFsc2U7CiAKLQkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJCQkgICAgICAgc2MtPnNjX3J4X2NoYWlubWFzaywgbG9uZ2NhbCwKKwkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5jdXJjaGFuLAorCQkJCQkgICAgICAgc2MtPnJ4X2NoYWlubWFzaywgbG9uZ2NhbCwKIAkJCQkJICAgICAgICZpc2NhbGRvbmUpKSB7CiAJCQkJaWYgKGxvbmdjYWwpCi0JCQkJCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPQorCQkJCQlzYy0+YW5pLm5vaXNlX2Zsb29yID0KIAkJCQkJCWF0aDlrX2h3X2dldGNoYW5fbm9pc2UoYWgsCi0JCQkJCQkJICAgICAgIGFoLT5haF9jdXJjaGFuKTsKKwkJCQkJCQkgICAgICAgYWgtPmN1cmNoYW4pOwogCiAJCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksCiAJCQkJCSJjYWxpYnJhdGUgY2hhbiAldS8leCBuZjogJWRcbiIsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzLAotCQkJCQlzYy0+c2NfYW5pLnNjX25vaXNlX2Zsb29yKTsKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWwsCisJCQkJCWFoLT5jdXJjaGFuLT5jaGFubmVsRmxhZ3MsCisJCQkJCXNjLT5hbmkubm9pc2VfZmxvb3IpOwogCQkJfSBlbHNlIHsKIAkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOWSwKIAkJCQkJImNhbGlicmF0ZSBjaGFuICV1LyV4IGZhaWxlZFxuIiwKLQkJCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MpOworCQkJCQlhaC0+Y3VyY2hhbi0+Y2hhbm5lbCwKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWxGbGFncyk7CiAJCQl9Ci0JCQlzYy0+c2NfYW5pLnNjX2NhbGRvbmUgPSBpc2NhbGRvbmU7CisJCQlzYy0+YW5pLmNhbGRvbmUgPSBpc2NhbGRvbmU7CiAJCX0KIAl9CiAKK3NldF90aW1lcjoKIAkvKgogCSogU2V0IHRpbWVyIGludGVydmFsIGJhc2VkIG9uIHByZXZpb3VzIHJlc3VsdHMuCiAJKiBUaGUgaW50ZXJ2YWwgbXVzdCBiZSB0aGUgc2hvcnRlc3QgbmVjZXNzYXJ5IHRvIHNhdGlzZnkgQU5JLAogCSogc2hvcnQgY2FsaWJyYXRpb24gYW5kIGxvbmcgY2FsaWJyYXRpb24uCiAJKi8KIAljYWxfaW50ZXJ2YWwgPSBBVEhfTE9OR19DQUxJTlRFUlZBTDsKLQlpZiAoc2MtPnNjX2FoLT5haF9jb25maWcuZW5hYmxlX2FuaSkKKwlpZiAoc2MtPnNjX2FoLT5jb25maWcuZW5hYmxlX2FuaSkKIAkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilBVEhfQU5JX1BPTExJTlRFUlZBTCk7Ci0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCWNhbF9pbnRlcnZhbCA9IG1pbihjYWxfaW50ZXJ2YWwsICh1MzIpQVRIX1NIT1JUX0NBTElOVEVSVkFMKTsKKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkKKwkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilzaG9ydF9jYWxfaW50ZXJ2YWwpOwogCi0JbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhjYWxfaW50ZXJ2YWwpKTsKKwltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGNhbF9pbnRlcnZhbCkpOwogfQogCiAvKgogICogVXBkYXRlIHR4L3J4IGNoYWlubWFzay4gRm9yIGxlZ2FjeSBhc3NvY2lhdGlvbiwKICAqIGhhcmQgY29kZSBjaGFpbm1hc2sgdG8gMXgxLCBmb3IgMTFuIGFzc29jaWF0aW9uLCB1c2UKLSAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbi4KKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiwgZm9yIGJ0IGNvZXhpc3RlbmNlLCB1c2UKKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiBldmVuIGluIGxlZ2FjeSBtb2RlLgogICovCi1zdGF0aWMgdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQordm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQogewogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCWlmIChpc19odCkgewotCQlzYy0+c2NfdHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQkJc2MtPnNjX3J4X2NoYWlubWFzayA9IHNjLT5zY19haC0+YWhfY2Fwcy5yeF9jaGFpbm1hc2s7CisJaWYgKGlzX2h0IHx8CisJICAgIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CVF9DT0VYKSkgeworCQlzYy0+dHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzazsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy5yeF9jaGFpbm1hc2s7CiAJfSBlbHNlIHsKLQkJc2MtPnNjX3R4X2NoYWlubWFzayA9IDE7Ci0JCXNjLT5zY19yeF9jaGFpbm1hc2sgPSAxOworCQlzYy0+dHhfY2hhaW5tYXNrID0gMTsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IDE7CiAJfQogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJ0eCBjaG1hc2s6ICVkLCByeCBjaG1hc2s6ICVkXG4iLAotCQlzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrKTsKKwkJc2MtPnR4X2NoYWlubWFzaywgc2MtPnJ4X2NoYWlubWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9ub2RlX2F0dGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKQEAgLTQ3Niw3ICs0NTUsNyBAQAogc3RhdGljIHZvaWQgYXRoOWtfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7Ci0JdTMyIHN0YXR1cyA9IHNjLT5zY19pbnRyc3RhdHVzOworCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTQ5NiwxMyArNDc1LDEzIEBACiAJfQogCiAJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldikKK2lycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZGV2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAllbnVtIGF0aDlrX2ludCBzdGF0dXM7CiAJYm9vbCBzY2hlZCA9IGZhbHNlOwogCkBAIC01MjcsNyArNTA2LDcgQEAKIAkJICovCiAJCWF0aDlrX2h3X2dldGlzcihhaCwgJnN0YXR1cyk7CS8qIE5COiBjbGVhcnMgSVNSIHRvbyAqLwogCi0JCXN0YXR1cyAmPSBzYy0+c2NfaW1hc2s7CS8qIGRpc2NhcmQgdW5hc2tlZC1mb3IgYml0cyAqLworCQlzdGF0dXMgJj0gc2MtPmltYXNrOwkvKiBkaXNjYXJkIHVuYXNrZWQtZm9yIGJpdHMgKi8KIAogCQkvKgogCQkgKiBJZiB0aGVyZSBhcmUgbm8gc3RhdHVzIGJpdHMgc2V0LCB0aGVuIHRoaXMgaW50ZXJydXB0IHdhcyBub3QKQEAgLTUzNiw3ICs1MTUsOCBAQAogCQlpZiAoIXN0YXR1cykKIAkJCXJldHVybiBJUlFfTk9ORTsKIAotCQlzYy0+c2NfaW50cnN0YXR1cyA9IHN0YXR1czsKKwkJc2MtPmludHJzdGF0dXMgPSBzdGF0dXM7CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKIAkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9GQVRBTCkgewogCQkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTU4Myw0NSArNTYzLDM5IEBACiAJCQkJICogaXQgd2lsbCBjbGVhciB3aGF0ZXZlciBjb25kaXRpb24gY2F1c2VkCiAJCQkJICogdGhlIGludGVycnVwdC4KIAkJCQkgKi8KLQkJCQlhdGg5a19od19wcm9jbWliZXZlbnQoYWgsICZzYy0+c2NfaGFsc3RhdHMpOwotCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCQkJCWF0aDlrX2h3X3Byb2NtaWJldmVudChhaCwgJnNjLT5ub2Rlc3RhdHMpOworCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCQkJfQogCQkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9USU1fVElNRVIpIHsKLQkJCQlpZiAoIShhaC0+YWhfY2Fwcy5od19jYXBzICYKKwkJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCQkgICAgICBBVEg5S19IV19DQVBfQVVUT1NMRUVQKSkgewogCQkJCQkvKiBDbGVhciBSeEFib3J0IGJpdCBzbyB0aGF0IHdlIGNhbgogCQkJCQkgKiByZWNlaXZlIGZyYW1lcyAqLworCQkJCQlhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpOwogCQkJCQlhdGg5a19od19zZXRyeGFib3J0KGFoLCAwKTsKIAkJCQkJc2NoZWQgPSB0cnVlOworCQkJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfV0FJVF9GT1JfQkVBQ09OOwogCQkJCX0KIAkJCX0KKwkJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVFNGT09SKSB7CisJCQkJLyogRklYTUU6IEhhbmRsZSB0aGlzIGludGVycnVwdCBmb3IgcG93ZXIgc2F2ZSAqLworCQkJCXNjaGVkID0gdHJ1ZTsKKwkJCX0KIAkJfQorCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9IHdoaWxlICgwKTsKIAogCWF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzYywgc3RhdHVzKTsKIAogCWlmIChzY2hlZCkgewogCQkvKiB0dXJuIG9mZiBldmVyeSBpbnRlcnJ1cHQgZXhjZXB0IFNXQkEgKi8KLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIChzYy0+c2NfaW1hc2sgJiBBVEg5S19JTlRfU1dCQSkpOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9TV0JBKSk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5pbnRyX3RxKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2dldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNjLT5zY19haC0+YWhfbmNoYW47IGkrKykgewotCQlpZiAoc2MtPnNjX2FoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsID09IGNoYW4tPmNlbnRlcl9mcmVxKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgdTMyIGF0aF9nZXRfZXh0Y2hhbm1vZGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQpAQCAtNjY0LDIwICs2MzgsOSBAQAogCXJldHVybiBjaGFubW9kZTsKIH0KIAotc3RhdGljIGludCBhdGhfa2V5c2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsCi0JICAgICAgIHN0cnVjdCBhdGg5a19rZXl2YWwgKmhrLCBjb25zdCB1OCBtYWNbRVRIX0FMRU5dKQotewotCWJvb2wgc3RhdHVzOwotCi0Jc3RhdHVzID0gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHNjLT5zY19haCwKLQkJa2V5aXgsIGhrLCBtYWMsIGZhbHNlKTsKLQotCXJldHVybiBzdGF0dXMgIT0gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoX3NldGtleV90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsIGNvbnN0IHU4ICprZXksCi0JCQkgICBzdHJ1Y3QgYXRoOWtfa2V5dmFsICpoaywKLQkJCSAgIGNvbnN0IHU4ICphZGRyKQorCQkJICAgc3RydWN0IGF0aDlrX2tleXZhbCAqaGssIGNvbnN0IHU4ICphZGRyLAorCQkJICAgYm9vbCBhdXRoZW50aWNhdG9yKQogewogCWNvbnN0IHU4ICprZXlfcnhtaWM7CiAJY29uc3QgdTggKmtleV90eG1pYzsKQEAgLTY4NiwyNiArNjQ5LDMzIEBACiAJa2V5X3J4bWljID0ga2V5ICsgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVk7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCS8qIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gKi8KLQkJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKLQkJcmV0dXJuIGF0aF9rZXlzZXQoc2MsIGtleWl4LCBoaywgYWRkcik7Ci0JfQotCWlmICghc2MtPnNjX3NwbGl0bWljKSB7CiAJCS8qCi0JCSAqIGRhdGEga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsCi0JCSAqIHRoZSBoYWwgaGFuZGxlcyB0aGUgTUlDIGtleXMgYXQgaW5kZXgrNjQuCisJCSAqIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gLSBvbmx5IHR3byBrZXkgY2FjaGUgZW50cmllcyBhcmUgdXNlZAorCQkgKiByZWdhcmRsZXNzIG9mIHNwbGl0bWljIGNhcGFiaWxpdHkgc2luY2UgZ3JvdXAga2V5IGlzIG9ubHkKKwkJICogdXNlZCBlaXRoZXIgZm9yIFRYIG9yIFJYLgogCQkgKi8KKwkJaWYgKGF1dGhlbnRpY2F0b3IpIHsKKwkJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCQltZW1jcHkoaGstPmt2X3R4bWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQkJbWVtY3B5KGhrLT5rdl90eG1pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQl9CisJCXJldHVybiBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBrZXlpeCwgaGssIGFkZHIpOworCX0KKwlpZiAoIXNjLT5zcGxpdG1pYykgeworCQkvKiBUWCBhbmQgUlgga2V5cyBzaGFyZSB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkuICovCiAJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfcnhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CiAJCW1lbWNweShoay0+a3ZfdHhtaWMsIGtleV90eG1pYywgc2l6ZW9mKGhrLT5rdl90eG1pYykpOwotCQlyZXR1cm4gYXRoX2tleXNldChzYywga2V5aXgsIGhrLCBhZGRyKTsKKwkJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgYWRkcik7CiAJfQotCS8qCi0JICogVFgga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsIFJYIGtleSBhdCArMzIuCi0JICogVGhlIGhhbCBoYW5kbGVzIHRoZSBNSUMga2V5cyBhdCBpbmRleCs2NC4KLQkgKi8KKworCS8qIFNlcGFyYXRlIGtleSBjYWNoZSBlbnRyaWVzIGZvciBUWCBhbmQgUlggKi8KKworCS8qIFRYIGtleSBnb2VzIGF0IGZpcnN0IGluZGV4LCBSWCBrZXkgYXQgKzMyLiAqLwogCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JaWYgKCFhdGhfa2V5c2V0KHNjLCBrZXlpeCwgaGssIE5VTEwpKSB7Ci0JCS8qIFR4bWljIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KKwlpZiAoIWF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgTlVMTCkpIHsKKwkJLyogVFggTUlDIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJTZXR0aW5nIFRYIE1JQyBLZXkgRmFpbGVkXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC03MTMsMjAgKzY4MywyMCBAQAogCiAJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKIAkvKiBYWFggZGVsZXRlIHR4IGtleSBvbiBmYWlsdXJlPyAqLwotCXJldHVybiBhdGhfa2V5c2V0KHNjLCBrZXlpeCArIDMyLCBoaywgYWRkcik7CisJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4ICsgMzIsIGhrLCBhZGRyKTsKIH0KIAogc3RhdGljIGludCBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCWludCBpOwogCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heCAvIDI7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgfHwKLQkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkpCisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heCAvIDI7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgc2MtPmtleW1hcCkgfHwKKwkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQljb250aW51ZTsgLyogQXQgbGVhc3Qgb25lIHBhcnQgb2YgVEtJUCBrZXkgYWxsb2NhdGVkICovCi0JCWlmIChzYy0+c2Nfc3BsaXRtaWMgJiYKLQkJICAgICh0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApIHx8Ci0JCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJaWYgKHNjLT5zcGxpdG1pYyAmJgorCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJY29udGludWU7IC8qIEF0IGxlYXN0IG9uZSBwYXJ0IG9mIFRLSVAga2V5IGFsbG9jYXRlZCAqLwogCiAJCS8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIFRLSVAga2V5ICovCkBAIC03NDAsNTUgKzcxMCw1NSBAQAogCWludCBpOwogCiAJLyogRmlyc3QsIHRyeSB0byBmaW5kIHNsb3RzIHRoYXQgd291bGQgbm90IGJlIGF2YWlsYWJsZSBmb3IgVEtJUC4gKi8KLQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyA0OyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICAodGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+c2Nfa2V5bWFwKSkpCisJaWYgKHNjLT5zcGxpdG1pYykgeworCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gNDsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpOwotCQkJaWYgKCF0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJCWlmICghdGVzdF9iaXQoaSArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyAzMjsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICh0ZXN0X2JpdChpICwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCkpKQorCQkJaWYgKCF0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyAzMiwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSkpCisJCQlpZiAoIXRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpICsgNjQgKyAzMjsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyAyOyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gMjsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSkKIAkJCQlyZXR1cm4gaTsKLQkJCWlmICh0ZXN0X2JpdChpLCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICF0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQkJaWYgKHRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgIXRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKIAkJfQogCX0KIAogCS8qIE5vIHBhcnRpYWxseSB1c2VkIFRLSVAgc2xvdHMsIHBpY2sgYW55IGF2YWlsYWJsZSBzbG90ICovCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heDsgaSsrKSB7CisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heDsgaSsrKSB7CiAJCS8qIERvIG5vdCBhbGxvdyBzbG90cyB0aGF0IGNvdWxkIGJlIG5lZWRlZCBmb3IgVEtJUCBncm91cCBrZXlzCiAJCSAqIHRvIGJlIHVzZWQuIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZSByZW1vdmVkIGlmIHdlIGtub3cgdGhhdAogCQkgKiBUS0lQIHdpbGwgbm90IGJlIHVzZWQuICovCiAJCWlmIChpID49IDY0ICYmIGkgPCA2NCArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7CisJCWlmIChzYy0+c3BsaXRtaWMpIHsKIAkJCWlmIChpID49IDMyICYmIGkgPCAzMiArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChpID49IDY0ICsgMzIgJiYgaSA8IDY0ICsgMzIgKyBJRUVFODAyMTFfV0VQX05LSUQpCiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXRlc3RfYml0KGksIHNjLT5zY19rZXltYXApKQorCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApKQogCQkJcmV0dXJuIGk7IC8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIGtleSAqLwogCX0KIApAQCAtNzk3LDcgKzc2Nyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoX2tleV9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIGNvbnN0IHU4ICphZGRyLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGF0aDlrX2tleXZhbCBoazsKQEAgLTgxOCw3ICs3ODksNyBAQAogCQloay5rdl90eXBlID0gQVRIOUtfQ0lQSEVSX0FFU19DQ007CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJaGsua3ZfbGVuID0ga2V5LT5rZXlsZW47CkBAIC04MjksMTAgKzgwMCwxMCBAQAogCQkgKiBuZWVkIHRvIGNoYW5nZSB3aXRoIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KIAkJaWR4ID0ga2V5LT5rZXlpZHg7CiAJfSBlbHNlIGlmIChrZXktPmtleWlkeCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCQlpZiAoV0FSTl9PTighc3RhKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJbWFjID0gc3RhLT5hZGRyOwogCi0JCW1hYyA9IGFkZHI7Ci0JCXZpZiA9IHNjLT5zY192YXBzWzBdOwogCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCQkvKiBPbmx5IGtleWlkeCAwIHNob3VsZCBiZSB1c2VkIHdpdGggdW5pY2FzdCBrZXksIGJ1dAogCQkJICogYWxsb3cgdGhpcyBmb3IgY2xpZW50IG1vZGUgZm9yIG5vdy4gKi8KQEAgLTg0MCwyOSArODExLDMzIEBACiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FSU87CiAJfSBlbHNlIHsKLQkJbWFjID0gYWRkcjsKKwkJaWYgKFdBUk5fT04oIXN0YSkpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCW1hYyA9IHN0YS0+YWRkcjsKKwogCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApCiAJCQlpZHggPSBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHNjKTsKIAkJZWxzZQogCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3Qoc2MpOwogCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlPOyAvKiBubyBmcmVlIGtleSBjYWNoZSBlbnRyaWVzICovCisJCQlyZXR1cm4gLUVOT1NQQzsgLyogbm8gZnJlZSBrZXkgY2FjaGUgZW50cmllcyAqLwogCX0KIAogCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJcmV0ID0gYXRoX3NldGtleV90a2lwKHNjLCBpZHgsIGtleS0+a2V5LCAmaGssIG1hYyk7CisJCXJldCA9IGF0aF9zZXRrZXlfdGtpcChzYywgaWR4LCBrZXktPmtleSwgJmhrLCBtYWMsCisJCQkJICAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKTsKIAllbHNlCi0JCXJldCA9IGF0aF9rZXlzZXQoc2MsIGlkeCwgJmhrLCBtYWMpOworCQlyZXQgPSBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBpZHgsICZoaywgbWFjKTsKIAogCWlmICghcmV0KQogCQlyZXR1cm4gLUVJTzsKIAotCXNldF9iaXQoaWR4LCBzYy0+c2Nfa2V5bWFwKTsKKwlzZXRfYml0KGlkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnID09IEFMR19US0lQKSB7Ci0JCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCk7CisJCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5rZXltYXApOworCQlpZiAoc2MtPnNwbGl0bWljKSB7CisJCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+a2V5bWFwKTsKKwkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJCX0KIAl9CiAKQEAgLTg3NSwxOCArODUwLDE5IEBACiAJaWYgKGtleS0+aHdfa2V5X2lkeCA8IElFRUU4MDIxMV9XRVBfTktJRCkKIAkJcmV0dXJuOwogCi0JY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPnNjX2tleW1hcCk7CisJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnICE9IEFMR19US0lQKQogCQlyZXR1cm47CiAKLQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCWlmIChzYy0+c2Nfc3BsaXRtaWMpIHsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApOworCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyA2NCwgc2MtPmtleW1hcCk7CisJaWYgKHNjLT5zcGxpdG1pYykgeworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgMzIsIHNjLT5rZXltYXApOworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvKQorc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKIHsKICNkZWZpbmUJQVRIOUtfSFRfQ0FQX01BWFJYQU1QRFVfNjU1MzYgMHgzCS8qIDIgXiAxNiAqLwogI2RlZmluZQlBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfOCAweDYJCS8qIDggdXNlYyAqLwpAQCAtODk5LDEwICs4NzUsMjMgQEAKIAogCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IEFUSDlLX0hUX0NBUF9NQVhSWEFNUERVXzY1NTM2OwogCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfODsKKwogCS8qIHNldCB1cCBzdXBwb3J0ZWQgbWNzIHNldCAqLwogCW1lbXNldCgmaHRfaW5mby0+bWNzLCAwLCBzaXplb2YoaHRfaW5mby0+bWNzKSk7Ci0JaHRfaW5mby0+bWNzLnJ4X21hc2tbMF0gPSAweGZmOwotCWh0X2luZm8tPm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKworCXN3aXRjaChzYy0+cnhfY2hhaW5tYXNrKSB7CisJY2FzZSAxOgorCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCWJyZWFrOworCWNhc2UgMzoKKwljYXNlIDU6CisJY2FzZSA3OgorCWRlZmF1bHQ6CisJCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMV0gPSAweGZmOworCQlicmVhazsKKwl9CisKIAlodF9pbmZvLT5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOwogfQogCkBAIC05MTAsMzYgKzg5OSwzMyBAQAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKIAlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQnNzIEluZm8gQVNTT0MgJWQsIGJzc2lkOiAlcE1cbiIsCi0JCQlic3NfY29uZi0+YWlkLCBzYy0+c2NfY3VyYnNzaWQpOworCQkJYnNzX2NvbmYtPmFpZCwgc2MtPmN1cmJzc2lkKTsKIAogCQkvKiBOZXcgYXNzb2NpYXRpb24sIHN0b3JlIGFpZCAqLwogCQlpZiAoYXZwLT5hdl9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJc2MtPnNjX2N1cmFpZCA9IGJzc19jb25mLT5haWQ7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgc2MtPnNjX2N1cmJzc2lkLAotCQkJCQkgICAgICAgc2MtPnNjX2N1cmFpZCk7CisJCQlzYy0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQl9CiAKIAkJLyogQ29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIDApOwotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7CiAKIAkJLyogUmVzZXQgcnNzaSBzdGF0cyAqLwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7Ci0JCXNjLT5zY19oYWxzdGF0cy5uc19hdmdyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyYXRlID0gQVRIX1JBVEVfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisJCXNjLT5ub2Rlc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3R4cmF0ZSA9IEFUSF9SQVRFX0RVTU1ZX01BUktFUjsKIAogCQkvKiBTdGFydCBBTkkgKi8KLQkJbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLAotCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0FOSV9QT0xMSU5URVJWQUwpKTsKLQorCQltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSF9BTklfUE9MTElOVEVSVkFMKSk7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJCc3MgSW5mbyBESVNTT0NcbiIpOwotCQlzYy0+c2NfY3VyYWlkID0gMDsKKwkJc2MtPmN1cmFpZCA9IDA7CiAJfQogfQogCkBAIC05NDcsNiArOTMzLDMyIEBACiAvKgkgTEVEIGZ1bmN0aW9ucwkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgYXRoX2xlZF9ibGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgYXRoX2xlZF9ibGlua193b3JrLndvcmspOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX0FTU09DSUFURUQpKQorCQlyZXR1cm47CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJCSAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPyAxIDogMCk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+YXRoX2xlZF9ibGlua193b3JrLAorCQkJICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPworCQkJICAgbXNlY3NfdG9famlmZmllcyhzYy0+bGVkX29mZl9kdXJhdGlvbikgOgorCQkJICAgbXNlY3NfdG9famlmZmllcyhzYy0+bGVkX29uX2R1cmF0aW9uKSk7CisKKwlzYy0+bGVkX29uX2R1cmF0aW9uID0KKwkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSk7CisJc2MtPmxlZF9vZmZfZHVyYXRpb24gPQorCQkJbWF4KChBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vZmZfY250KSwgMTApOworCXNjLT5sZWRfb25fY250ID0gc2MtPmxlZF9vZmZfY250ID0gMDsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKQorCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwllbHNlCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Cit9CisKIHN0YXRpYyB2b2lkIGF0aF9sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7CkBAIC05NTYsMTYgKzk2OCwyNyBAQAogCXN3aXRjaCAoYnJpZ2h0bmVzcykgewogCWNhc2UgTEVEX09GRjoKIAkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAotCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQorCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CisJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLAorCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7Ci0JCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCi0JCQkJKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgPyAxIDoKLQkJCQkhIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfQVNTT0NJQVRFRCkpOworCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb2ZmX2NudCsrOworCQl9CiAJCWJyZWFrOwogCWNhc2UgTEVEX0ZVTEw6Ci0JCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpCisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKLQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJCSAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb25fY250Kys7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMDAxLDYgKzEwMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+YXRoX2xlZF9ibGlua193b3JrKTsKIAlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT5hc3NvY19sZWQpOwogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CiAJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKQEAgLTEwMjAsOSArMTA0NCwxMSBAQAogCS8qIExFRCBvZmYsIGFjdGl2ZSBsb3cgKi8KIAlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKIAorCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+YXRoX2xlZF9ibGlua193b3JrLCBhdGhfbGVkX2JsaW5rX3dvcmspOworCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cmFkaW9fbGVkLm5hbWUsIHNpemVvZihzYy0+cmFkaW9fbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cmFkaW9fbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKIAlpZiAocmV0KQpAQCAtMTAzMCw3ICsxMDU2LDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKHNjLT5odyk7CiAJc25wcmludGYoc2MtPmFzc29jX2xlZC5uYW1lLCBzaXplb2Yoc2MtPmFzc29jX2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CisJCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKIAlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPmFzc29jX2xlZCwgdHJpZ2dlcik7CiAJc2MtPmFzc29jX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfQVNTT0M7CiAJaWYgKHJldCkKQEAgLTEwMzgsNyArMTA2NCw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShzYy0+aHcpOwogCXNucHJpbnRmKHNjLT50eF9sZWQubmFtZSwgc2l6ZW9mKHNjLT50eF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnR4Iiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CiAJcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIHRyaWdnZXIpOwogCXNjLT50eF9sZWQubGVkX3R5cGUgPSBBVEhfTEVEX1RYOwogCWlmIChyZXQpCkBAIC0xMDQ2LDcgKzEwNzIsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cnhfbGVkLm5hbWUsIHNpemVvZihzYy0+cnhfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyeCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKIAlpZiAocmV0KQpAQCAtMTA1OCwzMiArMTA4NCwyMiBAQAogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCi0KLS8qKioqKioqKioqKioqKioqKioqLwotLyoJUmZraWxsCSAgICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKKwlpbnQgcjsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLAotCQkJICAgIGZhbHNlLCAmc3RhdHVzKSkgeworCisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCisJaWYgKHIpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIKLQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQlhdGg5a19od19taHoyaWVlZShhaCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIsCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKQEAgLTEwOTUsMTAgKzExMTEsMTAgQEAKIAl9CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIEFUSF9JRl9JRF9BTlkpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIAogCS8qIFJlLUVuYWJsZSAgaW50ZXJydXB0cyAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCiAJLyogRW5hYmxlIExFRCAqLwogCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIEFUSF9MRURfUElOLApAQCAtMTEwNiwxNCArMTEyMiwxNiBAQAogCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBBVEhfTEVEX1BJTiwgMCk7CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlpbnQgc3RhdHVzOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHNjLT5ody0+Y29uZi5jaGFubmVsOworCWludCByOwogCi0KKwlhdGg5a19wc193YWtldXAoc2MpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOwogCiAJLyogRGlzYWJsZSBMRUQgKi8KQEAgLTExMjMsMzggKzExNDEsMzcgQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CiAKLQlhdGhfZHJhaW50eHEoc2MsIGZhbHNlKTsJLyogY2xlYXIgcGVuZGluZyB0eCBmcmFtZXMgKi8KKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwkvKiBjbGVhciBwZW5kaW5nIHR4IGZyYW1lcyAqLwogCWF0aF9zdG9wcmVjdihzYyk7CQkvKiB0dXJuIG9mZiBmcmFtZSByZWN2ICovCiAJYXRoX2ZsdXNocmVjdihzYyk7CQkvKiBmbHVzaCByZWN2IHF1ZXVlICovCiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX3J4X2NoYWlubWFzaywKLQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsCi0JCQkgICAgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCWlmIChyKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgJXUgKCV1TWh6KSAiCi0JCQkiZmxhZ3MgMHgleCBoYWwgc3RhdHVzICV1XG4iLAotCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyksCi0JCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MsIHN0YXR1cyk7CisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKIAlhdGg5a19od19waHlfZGlzYWJsZShhaCk7CiAJYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qCVJma2lsbAkgICAqLworLyoqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyBib29sIGF0aF9pc19yZmtpbGxfc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAotCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKSA9PQotCQkJCSAgYWgtPmFoX3Jma2lsbF9wb2xhcml0eTsKKwlyZXR1cm4gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIGFoLT5yZmtpbGxfZ3BpbykgPT0KKwkJCQkgIGFoLT5yZmtpbGxfcG9sYXJpdHk7CiB9CiAKIC8qIGgvdyByZmtpbGwgcG9sbCBmdW5jdGlvbiAqLwpAQCAtMTIzOCw3ICsxMjU1LDcgQEAKIAl9CiAKIAlzbnByaW50ZihzYy0+cmZfa2lsbC5yZmtpbGxfbmFtZSwgc2l6ZW9mKHNjLT5yZl9raWxsLnJma2lsbF9uYW1lKSwKLQkJImF0aDlrLSVzOnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXNjLT5yZl9raWxsLnJma2lsbC0+bmFtZSA9IHNjLT5yZl9raWxsLnJma2lsbF9uYW1lOwogCXNjLT5yZl9raWxsLnJma2lsbC0+ZGF0YSA9IHNjOwogCXNjLT5yZl9raWxsLnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gYXRoX3N3X3RvZ2dsZV9yYWRpbzsKQEAgLTEyNTEsNyArMTI2OCw3IEBACiAvKiBEZWluaXRpYWxpemUgcmZraWxsICovCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X3Jma2lsbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9SRktJTExfUkVHSVNURVJFRCkgewpAQCAtMTI2Myw3ICsxMjgwLDcgQEAKIAogc3RhdGljIGludCBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JaWYgKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKIAkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAogCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7CiAKQEAgLTEyNzQsMTMgKzEyOTEsNyBAQAogCQkJcmZraWxsX2ZyZWUoc2MtPnJmX2tpbGwucmZraWxsKTsKIAogCQkJLyogRGVpbml0aWFsaXplIHRoZSBkZXZpY2UgKi8KLQkJCWF0aF9kZXRhY2goc2MpOwotCQkJaWYgKHNjLT5wZGV2LT5pcnEpCi0JCQkJZnJlZV9pcnEoc2MtPnBkZXYtPmlycSwgc2MpOwotCQkJcGNpX2lvdW5tYXAoc2MtPnBkZXYsIHNjLT5tZW0pOwotCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHNjLT5wZGV2LCAwKTsKLQkJCXBjaV9kaXNhYmxlX2RldmljZShzYy0+cGRldik7Ci0JCQlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworCQkJYXRoX2NsZWFudXAoc2MpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0gZWxzZSB7CiAJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQ7CkBAIC0xMjkxLDE4ICsxMzAyLDM5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1JGS0lMTCAqLwogCi1zdGF0aWMgdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlhdGhfZGV0YWNoKHNjKTsKKwlmcmVlX2lycShzYy0+aXJxLCBzYyk7CisJYXRoX2J1c19jbGVhbnVwKHNjKTsKKwlrZnJlZShzYy0+c2VjX3dpcGh5KTsKKwlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworfQorCit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJaW50IGkgPSAwOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEFUSCBod1xuIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCiAJYXRoX2RlaW5pdF9yZmtpbGwoc2MpOwogI2VuZGlmCiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKKwljYW5jZWxfd29ya19zeW5jKCZzYy0+Y2hhbl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKIAorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXNjLT5zZWNfd2lwaHlbaV0gPSBOVUxMOworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCWllZWU4MDIxMV9mcmVlX2h3KGFwaHktPmh3KTsKKwl9CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aF9yeF9jbGVhbnVwKHNjKTsKIAlhdGhfdHhfY2xlYW51cChzYyk7CkBAIC0xMzIwLDExICsxMzUyLDEyIEBACiAKIAlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIGludCBhdGhfaW5pdCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IE5VTEw7CisJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwogCWludCBzdGF0dXM7CiAJaW50IGVycm9yID0gMCwgaTsKIAlpbnQgY3N6ID0gMDsKQEAgLTEzMzUsNTUgKzEzNjgsNTIgQEAKIAlpZiAoYXRoOWtfaW5pdF9kZWJ1ZyhzYykgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc2MtPndpcGh5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcmVzZXRsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3NlcmlhbF9ydyk7CiAJbXV0ZXhfaW5pdCgmc2MtPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJnNjLT5pbnRyX3RxLCBhdGg5a190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YmNvbl90YXNrbGV0LCBhdGg5a19iZWFjb25fdGFza2xldCwKKwl0YXNrbGV0X2luaXQoJnNjLT5iY29uX3Rhc2tsZXQsIGF0aF9iZWFjb25fdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylzYyk7CiAKIAkvKgogCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKIAkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCiAJICovCi0JYnVzX3JlYWRfY2FjaGVzaXplKHNjLCAmY3N6KTsKKwlhdGhfcmVhZF9jYWNoZXNpemUoc2MsICZjc3opOwogCS8qIFhYWCBhc3NlcnQgY3N6IGlzIG5vbi16ZXJvICovCi0Jc2MtPnNjX2NhY2hlbHN6ID0gY3N6IDw8IDI7CS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKwlzYy0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCi0JYWggPSBhdGg5a19od19hdHRhY2goZGV2aWQsIHNjLCBzYy0+bWVtLCAmc3RhdHVzKTsKKwlhaCA9IGF0aDlrX2h3X2F0dGFjaChkZXZpZCwgc2MsICZzdGF0dXMpOwogCWlmIChhaCA9PSBOVUxMKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiVW5hYmxlIHRvIGF0dGFjaCBoYXJkd2FyZTsgSEFMIHN0YXR1cyAldVxuIiwgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gYXR0YWNoIGhhcmR3YXJlOyBIQUwgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQllcnJvciA9IC1FTlhJTzsKIAkJZ290byBiYWQ7CiAJfQogCXNjLT5zY19haCA9IGFoOwogCiAJLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KLQlzYy0+c2Nfa2V5bWF4ID0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoc2MtPnNjX2tleW1heCA+IEFUSF9LRVlNQVgpIHsKKwlzYy0+a2V5bWF4ID0gYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKKwlpZiAoc2MtPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgc2MtPnNjX2tleW1heCk7Ci0JCXNjLT5zY19rZXltYXggPSBBVEhfS0VZTUFYOworCQkJQVRIX0tFWU1BWCwgc2MtPmtleW1heCk7CisJCXNjLT5rZXltYXggPSBBVEhfS0VZTUFYOwogCX0KIAogCS8qCiAJICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdAogCSAqIHJlc2V0IHRoZSBjb250ZW50cyBvbiBpbml0aWFsIHBvd2VyIHVwLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzYy0+c2Nfa2V5bWF4OyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNjLT5rZXltYXg7IGkrKykKIAkJYXRoOWtfaHdfa2V5cmVzZXQoYWgsICh1MTYpIGkpOwogCi0JLyogQ29sbGVjdCB0aGUgY2hhbm5lbCBsaXN0IHVzaW5nIHRoZSBkZWZhdWx0IGNvdW50cnkgY29kZSAqLwotCi0JZXJyb3IgPSBhdGhfc2V0dXBfY2hhbm5lbHMoc2MpOwotCWlmIChlcnJvcikKKwlpZiAoYXRoOWtfcmVnZF9pbml0KHNjLT5zY19haCkpCiAJCWdvdG8gYmFkOwogCiAJLyogZGVmYXVsdCB0byBNT05JVE9SIG1vZGUgKi8KLQlzYy0+c2NfYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci0KKwlzYy0+c2NfYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CiAKIAkvKiBTZXR1cCByYXRlIHRhYmxlcyAqLwogCkBAIC0xNDEyLDcgKzE0NDIsNyBAQAogCQlnb3RvIGJhZDI7CiAJfQogCi0Jc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIX0NBQlFfUkVBRFlfVElNRTsKKwlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOwogCWF0aF9jYWJxX3VwZGF0ZShzYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKQEAgLTE0NDksOCArMTQ3OSw4IEBACiAJLyogSW5pdGlhbGl6ZXMgdGhlIG5vaXNlIGZsb29yIHRvIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLgogCSAqIExhdGVyIG9uIHRoaXMgd2lsbCBiZSB1cGRhdGVkIGR1cmluZyBBTkkgcHJvY2Vzc2luZy4gKi8KIAotCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPSBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUjsKLQlzZXR1cF90aW1lcigmc2MtPnNjX2FuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKKwlzYy0+YW5pLm5vaXNlX2Zsb29yID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7CisJc2V0dXBfdGltZXIoJnNjLT5hbmkudGltZXIsIGF0aF9hbmlfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7CiAKIAlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX0NJUEhFUiwKIAkJCQkgICBBVEg5S19DSVBIRVJfVEtJUCwgTlVMTCkpIHsKQEAgLTE0NzYsNjAgKzE1MDYsNjIgQEAKIAkJCQkgICAgICBBVEg5S19DSVBIRVJfTUlDLCBOVUxMKQogCSAgICAmJiBhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfVEtJUF9TUExJVCwKIAkJCQkgICAgICAwLCBOVUxMKSkKLQkJc2MtPnNjX3NwbGl0bWljID0gMTsKKwkJc2MtPnNwbGl0bWljID0gMTsKIAogCS8qIHR1cm4gb24gbWNhc3Qga2V5IHNlYXJjaCBpZiBwb3NzaWJsZSAqLwogCWlmICghYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsIDAsIE5VTEwpKQogCQkodm9pZClhdGg5a19od19zZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMSwKIAkJCQkJICAgICAxLCBOVUxMKTsKIAotCXNjLT5zY19jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKLQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXRfb3ZlcnJpZGUgPSAwOworCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKIAogCS8qIDExbiBDYXBhYmlsaXRpZXMgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSB7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UWEFHR1I7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9SWEFHR1I7CiAJfQogCi0Jc2MtPnNjX3R4X2NoYWlubWFzayA9IGFoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQlzYy0+c2NfcnhfY2hhaW5tYXNrID0gYWgtPmFoX2NhcHMucnhfY2hhaW5tYXNrOworCXNjLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7CisJc2MtPnJ4X2NoYWlubWFzayA9IGFoLT5jYXBzLnJ4X2NoYWlubWFzazsKIAogCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9ESVZFUlNJVFksIDEsIHRydWUsIE5VTEwpOwogCXNjLT5yeC5kZWZhbnQgPSBhdGg5a19od19nZXRkZWZhbnRlbm5hKGFoKTsKIAotCWF0aDlrX2h3X2dldG1hYyhhaCwgc2MtPnNjX215YWRkcik7Ci0JaWYgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKSB7Ci0JCWF0aDlrX2h3X2dldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCUFUSF9TRVRfVkFQX0JTU0lEX01BU0soc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JfQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJbWVtY3B5KHNjLT5ic3NpZG1hc2ssIGF0aF9iY2FzdF9tYWMsIEVUSF9BTEVOKTsKIAogCXNjLT5iZWFjb24uc2xvdHRpbWUgPSBBVEg5S19TTE9UX1RJTUVfOTsJLyogZGVmYXVsdCB0byBzaG9ydCBzbG90IHRpbWUgKi8KIAogCS8qIGluaXRpYWxpemUgYmVhY29uIHNsb3RzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykKLQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IEFUSF9JRl9JRF9BTlk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlzYy0+YmVhY29uLmJzbG90W2ldID0gTlVMTDsKKwkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwl9CiAKIAkvKiBzYXZlIE1JU0MgY29uZmlndXJhdGlvbnMgKi8KLQlzYy0+c2NfY29uZmlnLnN3QmVhY29uUHJvY2VzcyA9IDE7CisJc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MgPSAxOwogCiAJLyogc2V0dXAgY2hhbm5lbHMgYW5kIHJhdGVzICovCiAKLQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0KLQkJc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBhdGg5a18yZ2h6X2NoYW50YWJsZTsKIAlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzID0KIAkJc2MtPnJhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzID0KKwkJQVJSQVlfU0laRShhdGg5a18yZ2h6X2NoYW50YWJsZSk7CiAKLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHNjLT5zY19haC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykpIHsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5jaGFubmVscyA9Ci0JCQlzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW50YWJsZTsKIAkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9CiAJCQlzYy0+cmF0ZXNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiAJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKIAl9CiAKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkKKwkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzYy0+c2NfYWgpOworCiAJcmV0dXJuIDA7CiBiYWQyOgogCS8qIGNsZWFudXAgdHggcXVldWVzICovCkBAIC0xNTQ0LDkgKzE1NzYsNDggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQorCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKworCWh3LT53aXBoeS0+cmVnX25vdGlmaWVyID0gYXRoOWtfcmVnX25vdGlmaWVyOworCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCisJaHctPnF1ZXVlcyA9IDQ7CisJaHctPm1heF9yYXRlcyA9IDQ7CisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisJaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOworCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmlmKTsKKworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7CisKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQorCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworfQorCitpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCWludCBlcnJvciA9IDAsIGk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkF0dGFjaCBBVEggaHdcbiIpOwpAQCAtMTU1NywzNyArMTYyOCwxNiBAQAogCiAJLyogZ2V0IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgYW5kIHNldCBpbiBtYWM4MDIxMSAqLwogCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIHNjLT5zY19teWFkZHIpOworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCUlFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CiAKLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCi0JaHctPnF1ZXVlcyA9IDQ7Ci0JaHctPm1heF9yYXRlcyA9IDQ7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKLQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOwotCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmFwKTsKLQotCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7Ci0KLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfSFQpIHsKLQkJc2V0dXBfaHRfY2FwKCZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7Ci0JCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJCXNldHVwX2h0X2NhcCgmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5odF9jYXApOworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CisJCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJCXNldHVwX2h0X2NhcChzYywgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKIAl9CiAKLQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0JJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpKQotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KLQkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCiAJLyogaW5pdGlhbGl6ZSB0eC9yeCBlbmdpbmUgKi8KIAllcnJvciA9IGF0aF90eF9pbml0KHNjLCBBVEhfVFhCVUYpOwogCWlmIChlcnJvciAhPSAwKQpAQCAtMTU5OSw3ICsxNjQ5LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKIAkvKiBJbml0aWFsemUgaC93IFJma2lsbCAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCiAJCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgYXRoX3Jma2lsbF9wb2xsKTsKIAogCS8qIEluaXRpYWxpemUgcy93IHJma2lsbCAqLwpAQCAtMTYwOCwxMSArMTY1OCwzOSBAQAogCQlnb3RvIGVycm9yX2F0dGFjaDsKICNlbmRpZgogCisJaWYgKGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc2MtPnNjX2FoKSkgeworCQkvKiBBbnl0aGluZyBhcHBsaWVkIGhlcmUgKHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbikgZ2V0cworCQkgKiBzYXZlZCBvbiB0aGUgd2lwaHkgb3JpZ18qIHBhcmFtZXRlcnMgKi8KKwkJcmVnZCA9IGF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzYy0+c2NfYWgpOworCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IGZhbHNlOworCX0gZWxzZSB7CisJCS8qIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbnNlIG9mIENSREEsCisJCSAqIGl0J3Mgb3VyIG93biBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4sIHNpbWlsYXIgdG8KKwkJICogY2ZnODAyMTEncyBidXQgd2UgZW5hYmxlIHBhc3NpdmUgc2Nhbm5pbmcgKi8KKwkJcmVnZCA9IGF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7CisJfQorCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwgcmVnZCk7CisJYXRoOWtfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKGh3LT53aXBoeSk7CisJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKGh3LT53aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUik7CisKKwlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAorCWlmICghYXRoOWtfaXNfd29ybGRfcmVnZChzYy0+c2NfYWgpKSB7CisJCWVycm9yID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwKKwkJCXNjLT5zY19haC0+cmVndWxhdG9yeS5hbHBoYTIpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yX2F0dGFjaDsKKwl9CisKIAkvKiBJbml0aWFsaXplIExFRCBjb250cm9sICovCiAJYXRoX2luaXRfbGVkcyhzYyk7CiAKKwogCXJldHVybiAwOwogCiBlcnJvcl9hdHRhY2g6CkBAIC0xNjI5LDI0ICsxNzA3LDIwIEBACiAKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBzdGF0dXM7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlpbnQgcjsKIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQlhdGhfZHJhaW50eHEoc2MsIHJldHJ5X3R4KTsKKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CiAJYXRoX2ZsdXNocmVjdihzYyk7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19odF9leHRwcm90c3BhY2luZywgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIGZhbHNlKTsKKwlpZiAocikKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IGhhbCBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7Ci0JCWVycm9yID0gLUVJTzsKLQl9CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsIHIpOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKQpAQCAtMTY1NywxNCArMTczMSwxNCBAQAogCSAqIHRoYXQgY2hhbmdlcyB0aGUgY2hhbm5lbCBzbyB1cGRhdGUgYW55IHN0YXRlIHRoYXQKIAkgKiBtaWdodCBjaGFuZ2UgYXMgYSByZXN1bHQuCiAJICovCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoc2MtPnNjX2FoLT5haF9jdXJjaGFuKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCWF0aF91cGRhdGVfdHhwb3coc2MpOwogCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpCi0JCWF0aF9iZWFjb25fY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZKTsJLyogcmVzdGFydCBiZWFjb25zICovCisJCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsJLyogcmVzdGFydCBiZWFjb25zICovCiAKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKIAogCWlmIChyZXRyeV90eCkgewogCQlpbnQgaTsKQEAgLTE2NzcsNyArMTc1MSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHI7CiB9CiAKIC8qCkBAIC0xNzAxLDYgKzE3NzUsNyBAQAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BOiAldSBidWZmZXJzICV1IGRlc2MvYnVmXG4iLAogCQluYW1lLCBuYnVmLCBuZGVzYyk7CiAKKwlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAkvKiBhdGhfZGVzYyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgRFdPUkRzICovCiAJaWYgKChzaXplb2Yoc3RydWN0IGF0aF9kZXNjKSAlIDQpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImF0aF9kZXNjIG5vdCBEV09SRCBhbGlnbmVkXG4iKTsKQEAgLTE3MTcsNyArMTc5Miw3IEBACiAJICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCiAJICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KIAkgKi8KLQlpZiAoIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJdTMyIG5kZXNjX3NraXBwZWQgPQogCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7CiAJCXUzMiBkbWFfbGVuOwpAQCAtMTczMSw5ICsxODA2LDggQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBkZXNjcmlwdG9ycyAqLwotCWRkLT5kZF9kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoc2MtPnBkZXYsCi0JCQkgICAgICBkZC0+ZGRfZGVzY19sZW4sCi0JCQkgICAgICAmZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRkLT5kZF9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwKKwkJCQkJICZkZC0+ZGRfZGVzY19wYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRkLT5kZF9kZXNjID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0xNzQ1LDIwICsxODE5LDE4IEBACiAKIAkvKiBhbGxvY2F0ZSBidWZmZXJzICovCiAJYnNpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9idWYpICogbmJ1ZjsKLQliZiA9IGttYWxsb2MoYnNpemUsIEdGUF9LRVJORUwpOworCWJmID0ga3phbGxvYyhic2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJmID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOwogCX0KLQltZW1zZXQoYmYsIDAsIGJzaXplKTsKIAlkZC0+ZGRfYnVmcHRyID0gYmY7CiAKLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrLCBiZisrLCBkcyArPSBuZGVzYykgewogCQliZi0+YmZfZGVzYyA9IGRzOwogCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CiAKLQkJaWYgKCEoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJgorCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCiAJCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJCS8qCiAJCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKQEAgLTE3NzksOCArMTg1MSw4IEBACiAJfQogCXJldHVybiAwOwogZmFpbDI6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIGZhaWw6CiAJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTc5Myw4ICsxODY1LDggQEAKIAkJCSBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAogCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIAogCUlOSVRfTElTVF9IRUFEKGhlYWQpOwogCWtmcmVlKGRkLT5kZF9idWZwdHIpOwpAQCAtMTg1MSwzMyArMTkyMyw4MSBAQAogCXJldHVybiBxbnVtOwogfQogCisvKiBYWFg6IFJlbW92ZSBtZSBvbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBhdGg5a19jaGFubmVsIGZvciBhbGwKKyAqIHRoaXMgcmVkdW5kYW50IGRhdGEgKi8KK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBody0+Y29uZi5jaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKworCWljaGFuLT5jaGFubmVsID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJaWNoYW4tPmNoYW4gPSBjaGFuOworCisJaWYgKGNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpY2hhbi0+Y2hhbm1vZGUgPSBDSEFOTkVMX0c7CisJCWljaGFuLT5jaGFubmVsRmxhZ3MgPSBDSEFOTkVMXzJHSFogfCBDSEFOTkVMX09GRE07CisJfSBlbHNlIHsKKwkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9BOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF81R0haIHwgQ0hBTk5FTF9PRkRNOworCX0KKworCXNjLT50eF9jaGFuX3dpZHRoID0gQVRIOUtfSFRfTUFDTU9ERV8yMDsKKworCWlmIChjb25mX2lzX2h0KGNvbmYpKSB7CisJCWlmIChjb25mX2lzX2h0NDAoY29uZikpCisJCQlzYy0+dHhfY2hhbl93aWR0aCA9IEFUSDlLX0hUX01BQ01PREVfMjA0MDsKKworCQlpY2hhbi0+Y2hhbm1vZGUgPSBhdGhfZ2V0X2V4dGNoYW5tb2RlKHNjLCBjaGFuLAorCQkJCQkgICAgY29uZi0+Y2hhbm5lbF90eXBlKTsKKwl9Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqLwogLyogbWFjODAyMTEgY2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBhdGg5a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VyY2hhbiA9IGh3LT5jb25mLmNoYW5uZWw7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmluaXRfY2hhbm5lbDsKLQlpbnQgZXJyb3IgPSAwLCBwb3MsIHN0YXR1czsKKwlpbnQgciwgcG9zOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTdGFydGluZyBkcml2ZXIgd2l0aCAiCiAJCSJpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwogCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKworCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgeworCQlpZiAoc2MtPmNoYW5faWR4ID09IGN1cmNoYW4tPmh3X3ZhbHVlKSB7CisJCQkvKgorCQkJICogQWxyZWFkeSBvbiB0aGUgb3BlcmF0aW9uYWwgY2hhbm5lbCwgdGhlIG5ldyB3aXBoeQorCQkJICogY2FuIGJlIG1hcmtlZCBhY3RpdmUuCisJCQkgKi8KKwkJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQW5vdGhlciB3aXBoeSBpcyBvbiBhbm90aGVyIGNoYW5uZWwsIHN0YXJ0IHRoZSBuZXcKKwkJCSAqIHdpcGh5IGluIHBhdXNlZCBzdGF0ZS4KKwkJCSAqLworCQkJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwkJfQorCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9BQ1RJVkU7CisKIAkvKiBzZXR1cCBpbml0aWFsIGNoYW5uZWwgKi8KIAotCXBvcyA9IGF0aF9nZXRfY2hhbm5lbChzYywgY3VyY2hhbik7Ci0JaWYgKHBvcyA9PSAtMSkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCXBvcyA9IGN1cmNoYW4tPmh3X3ZhbHVlOwogCi0Jc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCShjdXJjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8gQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOwotCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc107CisJc2MtPmNoYW5faWR4ID0gcG9zOworCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmNoYW5uZWxzW3Bvc107CisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgaW5pdF9jaGFubmVsKTsKIAogCS8qIFJlc2V0IFNFUkRFUyByZWdpc3RlcnMgKi8KIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc2MtPnNjX2FoLCAwKTsKQEAgLTE4OTAsMTcgKzIwMTAsMTQgQEAKIAkgKiBhbmQgdGhlbiBzZXR1cCBvZiB0aGUgaW50ZXJydXB0IG1hc2suCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KHNjLT5zY19haCwgaW5pdF9jaGFubmVsLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLCBmYWxzZSwgJnN0YXR1cykpIHsKKwlyID0gYXRoOWtfaHdfcmVzZXQoc2MtPnNjX2FoLCBpbml0X2NoYW5uZWwsIGZhbHNlKTsKKwlpZiAocikgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldSAiCi0JCQkiKGZyZXEgJXUgZmxhZ3MgMHgleClcbiIsIHN0YXR1cywKLQkJCWluaXRfY2hhbm5lbC0+Y2hhbm5lbCwgaW5pdF9jaGFubmVsLT5jaGFubmVsRmxhZ3MpOwotCQllcnJvciA9IC1FSU87CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXUgIgorCQkJIihmcmVxICV1IE1IeilcbiIsIHIsCisJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBtdXRleF91bmxvY2s7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIApAQCAtMTkyMCw2NiArMjAzNyw1NiBAQAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJCXIgPSAtRUlPOworCQlnb3RvIG11dGV4X3VubG9jazsKIAl9CiAKIAkvKiBTZXR1cCBvdXIgaW50ciBtYXNrLiAqLwotCXNjLT5zY19pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAorCXNjLT5pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAogCQl8IEFUSDlLX0lOVF9SWEVPTCB8IEFUSDlLX0lOVF9SWE9STgogCQl8IEFUSDlLX0lOVF9GQVRBTCB8IEFUSDlLX0lOVF9HTE9CQUw7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQotCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKIAotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9DU1Q7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0NTVDsKIAotCS8qCi0JICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KLQkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KLQkgKi8KLQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgICAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9NSUI7Ci0JLyoKLQkgKiBTb21lIGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgVElNIElFIGFuZCBmaXJlcyBhbgotCSAqIGludGVycnVwdCB3aGVuIHRoZSBUSU0gYml0IGlzIHNldC4gIEZvciBoYXJkd2FyZQotCSAqIHRoYXQgZG9lcywgaWYgbm90IG92ZXJyaWRkZW4gYnkgY29uZmlndXJhdGlvbiwKLQkgKiBlbmFibGUgdGhlIFRJTSBpbnRlcnJ1cHQgd2hlbiBvcGVyYXRpbmcgYXMgc3RhdGlvbi4KLQkgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0pICYmCi0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgotCSAgICAhc2MtPnNjX2NvbmZpZy5zd0JlYWNvblByb2Nlc3MpCi0JCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfVElNOwotCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoaW5pdF9jaGFubmVsKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfSU5WQUxJRDsKIAogCS8qIERpc2FibGUgQk1JU1MgaW50ZXJydXB0IHdoZW4gd2UncmUgbm90IGFzc29jaWF0ZWQgKi8KLQlzYy0+c2NfaW1hc2sgJj0gfihBVEg5S19JTlRfU1dCQSB8IEFUSDlLX0lOVF9CTUlTUyk7Ci0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+c2NfaW1hc2spOworCXNjLT5pbWFzayAmPSB+KEFUSDlLX0lOVF9TV0JBIHwgQVRIOUtfSU5UX0JNSVNTKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWVycm9yID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKKwlyID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKICNlbmRpZgogCi1lcnJvcjoKLQlyZXR1cm4gZXJyb3I7CittdXRleF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKIAlpbnQgaGRybGVuLCBwYWRzaXplOwogCisJaWYgKGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogVFggaW4gdW5leHBlY3RlZCB3aXBoeSBzdGF0ZSAiCisJCSAgICAgICAiJWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgYXBoeS0+c3RhdGUpOworCQlnb3RvIGV4aXQ7CisJfQorCiAJbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOwogCiAJLyoKQEAgLTIwMTMsNyArMjEyMCw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOwogCi0JaWYgKGF0aF90eF9zdGFydChzYywgc2tiLCAmdHhjdGwpICE9IDApIHsKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjAyNiwzMCArMjEzMywzOCBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9JTkFDVElWRTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQ2xlYW5pbmcgdXBcbiIpOworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJaWYgKGF0aDlrX3dpcGh5X3N0YXJ0ZWQoc2MpKSB7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOyAvKiBhbm90aGVyIHdpcGh5IHN0aWxsIGluIHVzZSAqLworCX0KIAogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKIAogCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpKSB7Ci0JCWF0aF9kcmFpbnR4cShzYywgZmFsc2UpOworCQlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwogCQlhdGhfc3RvcHJlY3Yoc2MpOwogCQlhdGg5a19od19waHlfZGlzYWJsZShzYy0+c2NfYWgpOwogCX0gZWxzZQogCQlzYy0+cngucnhsaW5rID0gTlVMTDsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKICNlbmRpZgogCS8qIGRpc2FibGUgSEFMIGFuZCBwdXQgaC93IHRvIHNsZWVwICovCkBAIC0yMDU4LDEzNiArMjE3MywyMjcgQEAKIAogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCWludCByZXQgPSAwOwogCi0JLyogU3VwcG9ydCBvbmx5IHZhcCBmb3Igbm93ICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAotCWlmIChzYy0+c2NfbnZhcHMpCi0JCXJldHVybiAtRU5PQlVGUzsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spICYmCisJICAgIHNjLT5udmlmcyA+IDApIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KIAogCXN3aXRjaCAoY29uZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKHNjLT5uYmNudmlmcyA+PSBBVEhfQkNCVUYpIHsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBvdXQ7CisJCX0KIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCWlmIChzYy0+bmJjbnZpZnMgPj0gQVRIX0JDQlVGKSB7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FQOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIkludGVyZmFjZSB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCBjb25mLT50eXBlKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CiAJfQogCi0JRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJBdHRhY2ggYSBWQVAgb2YgdHlwZTogJWRcbiIsIGljX29wbW9kZSk7CisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJBdHRhY2ggYSBWSUYgb2YgdHlwZTogJWRcbiIsIGljX29wbW9kZSk7CiAKLQkvKiBTZXQgdGhlIFZBUCBvcG1vZGUgKi8KKwkvKiBTZXQgdGhlIFZJRiBvcG1vZGUgKi8KIAlhdnAtPmF2X29wbW9kZSA9IGljX29wbW9kZTsKIAlhdnAtPmF2X2JzbG90ID0gLTE7CiAKLQlpZiAoaWNfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KHNjLT5zY19haCwgMSk7CisJc2MtPm52aWZzKys7CiAKLQlzYy0+c2NfdmFwc1swXSA9IGNvbmYtPnZpZjsKLQlzYy0+c2NfbnZhcHMrKzsKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKQorCQlhdGg5a19zZXRfYnNzaWRfbWFzayhodyk7CisKKwlpZiAoc2MtPm52aWZzID4gMSkKKwkJZ290byBvdXQ7IC8qIHNraXAgZ2xvYmFsIHNldHRpbmdzIGZvciBzZWNvbmRhcnkgdmlmICovCisKKwlpZiAoaWNfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc2MtPnNjX2FoLCAxKTsKKwkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1RTRl9SRVNFVDsKKwl9CiAKIAkvKiBTZXQgdGhlIGRldmljZSBvcG1vZGUgKi8KLQlzYy0+c2NfYWgtPmFoX29wbW9kZSA9IGljX29wbW9kZTsKKwlzYy0+c2NfYWgtPm9wbW9kZSA9IGljX29wbW9kZTsKKworCS8qCisJICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KKwkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KKwkgKi8KKwlpZiAoKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSB7CisJCWlmIChhdGg5a19od19waHljb3VudGVycyhzYy0+c2NfYWgpKQorCQkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9NSUI7CisJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVFNGT09SOworCX0KKworCS8qCisJICogU29tZSBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIFRJTSBJRSBhbmQgZmlyZXMgYW4KKwkgKiBpbnRlcnJ1cHQgd2hlbiB0aGUgVElNIGJpdCBpcyBzZXQuICBGb3IgaGFyZHdhcmUKKwkgKiB0aGF0IGRvZXMsIGlmIG5vdCBvdmVycmlkZGVuIGJ5IGNvbmZpZ3VyYXRpb24sCisJICogZW5hYmxlIHRoZSBUSU0gaW50ZXJydXB0IHdoZW4gb3BlcmF0aW5nIGFzIHN0YXRpb24uCisJICovCisJaWYgKChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNKSAmJgorCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgorCSAgICAhc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MpCisJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVElNOworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOwogCiAJaWYgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKIAkJLyogVE9ETzogaXMgdGhpcyBhIHN1aXRhYmxlIHBsYWNlIHRvIHN0YXJ0IEFOSSBmb3IgQVAgbW9kZT8gKi8KIAkJLyogU3RhcnQgQU5JICovCi0JCW1vZF90aW1lcigmc2MtPnNjX2FuaS50aW1lciwKKwkJbW9kX3RpbWVyKCZzYy0+YW5pLnRpbWVyLAogCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEhfQU5JX1BPTExJTlRFUlZBTCkpOwogCX0KIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCWludCBpOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEZXRhY2ggSW50ZXJmYWNlXG4iKTsKIAorCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisKIAkvKiBTdG9wIEFOSSAqLwotCWRlbF90aW1lcl9zeW5jKCZzYy0+c2NfYW5pLnRpbWVyKTsKKwlkZWxfdGltZXJfc3luYygmc2MtPmFuaS50aW1lcik7CiAKIAkvKiBSZWNsYWltIGJlYWNvbiByZXNvdXJjZXMgKi8KLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKLQkgICAgc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJYXRoX2JlYWNvbl9yZXR1cm4oc2MsIGF2cCk7CiAJfQogCiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBOVUxMOwotCXNjLT5zY19udmFwcy0tOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspIHsKKwkJaWYgKHNjLT5iZWFjb24uYnNsb3RbaV0gPT0gY29uZi0+dmlmKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHZpZiBoYWQgYWxsb2NhdGVkIGJlYWNvbiAiCisJCQkgICAgICAgInNsb3RcbiIsIF9fZnVuY19fKTsKKwkJCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBOVUxMOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwkJfQorCX0KKworCXNjLT5udmlmcy0tOworCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMIHwKLQkJICAgICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVCkpIHsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZiAoKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9USU1fVElNRVIpID09IDApIHsKKwkJCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfSBlbHNlIHsKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fQVdBS0UpOworCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDApOworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCQlpZiAoc2MtPmltYXNrICYgQVRIOUtfSU5UX1RJTV9USU1FUikgeworCQkJCXNjLT5pbWFzayAmPSB+QVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwotCQlpbnQgcG9zOworCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CisKKwkJYXBoeS0+Y2hhbl9pZHggPSBwb3M7CisJCWFwaHktPmNoYW5faXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCWlmIChhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTiB8fAorCQkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBEbyBub3QgY2hhbmdlIG9wZXJhdGlvbmFsIGNoYW5uZWwgYmFzZWQgb24gYSBwYXVzZWQKKwkJCSAqIHdpcGh5IGNoYW5nZXMuCisJCQkgKi8KKwkJCWdvdG8gc2tpcF9jaGFuX2NoYW5nZTsKKwkJfQogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IGNoYW5uZWw6ICVkIE1IelxuIiwKIAkJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAotCQlwb3MgPSBhdGhfZ2V0X2NoYW5uZWwoc2MsIGN1cmNoYW4pOwotCQlpZiAocG9zID09IC0xKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwKLQkJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCQkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbHkgKi8KKwkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSk7CiAKLQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCQlzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10uY2hhbm1vZGUgPQotCQkJKGN1cmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCQkJQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOworCQlhdGhfdXBkYXRlX2NoYWlubWFzayhzYywgY29uZl9pc19odChjb25mKSk7CiAKLQkJaWYgKGNvbmYtPmh0LmVuYWJsZWQpIHsKLQkJCWlmIChjb25mLT5odC5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTIHx8Ci0JCQkgICAgY29uZi0+aHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpCi0JCQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwNDA7Ci0KLQkJCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCQkJYXRoX2dldF9leHRjaGFubW9kZShzYywgY3VyY2hhbiwKLQkJCQkJCSAgICBjb25mLT5odC5jaGFubmVsX3R5cGUpOwotCQl9Ci0KLQkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIGNvbmYtPmh0LmVuYWJsZWQpOwotCi0JCWlmIChhdGhfc2V0X2NoYW5uZWwoc2MsICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10pIDwgMCkgeworCQlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKIAkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCitza2lwX2NoYW5fY2hhbmdlOgogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQotCQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IDIgKiBjb25mLT5wb3dlcl9sZXZlbDsKKworCS8qCisJICogVGhlIEhXIFRTRiBoYXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgYmVhY29uIGludGVydmFsIGNoYW5nZXMuCisJICogV2Ugc2V0IHRoZSBmbGFnIGhlcmUsIGFuZCBhdGhfYmVhY29uX2NvbmZpZ19hcCgpIHdvdWxkIHRha2UgdGhpcworCSAqIGludG8gYWNjb3VudCB3aGVuIGl0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIHN1YnNlcXVlbnQKKwkgKiBjb25maWdfaW50ZXJmYWNlKCkgY2FsbCAtIHdpdGggSUZDQ19CRUFDT04gaW4gdGhlIGNoYW5nZWQgZmllbGQuCisJICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE5NSwxOSArMjQwMSwyNCBAQAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJdTMyIHJmaWx0ID0gMDsKIAlpbnQgZXJyb3IsIGk7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogVE9ETzogTmVlZCB0byBkZWNpZGUgd2hpY2ggaHcgb3Btb2RlIHRvIHVzZSBmb3IgbXVsdGktaW50ZXJmYWNlCiAJICogY2FzZXMgKi8KIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJICAgIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7Ci0JCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoYWgsIHNjLT5zY19teWFkZHIsIDApOworCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwkJc2MtPmN1cmFpZCA9IDA7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQkvKiBSZXF1ZXN0IGZ1bGwgcmVzZXQgdG8gZ2V0IGh3IG9wbW9kZSBjaGFuZ2VkIHByb3Blcmx5ICovCiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwogCX0KQEAgLTIyMTgsMTcgKzI0MjksMTcgQEAKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQkJLyogU2V0IEJTU0lEICovCi0JCQltZW1jcHkoc2MtPnNjX2N1cmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCQkJc2MtPnNjX2N1cmFpZCA9IDA7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgc2MtPnNjX2N1cmJzc2lkLAotCQkJCQkgICAgICAgc2MtPnNjX2N1cmFpZCk7CisJCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCQkJbWVtY3B5KGF2cC0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQlzYy0+Y3VyYWlkID0gMDsKKwkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCiAJCQkvKiBTZXQgYWdncmVnYXRpb24gcHJvdGVjdGlvbiBtb2RlIHBhcmFtZXRlcnMgKi8KLQkJCXNjLT5zY19jb25maWcuYXRoX2FnZ3JfcHJvdCA9IDA7CisJCQlzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgPSAwOwogCiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKIAkJCQkiUlggZmlsdGVyIDB4JXggYnNzaWQgJXBNIGFpZCAweCV4XG4iLAotCQkJCXJmaWx0LCBzYy0+c2NfY3VyYnNzaWQsIHNjLT5zY19jdXJhaWQpOworCQkJCXJmaWx0LCBzYy0+Y3VyYnNzaWQsIHNjLT5jdXJhaWQpOwogCiAJCQkvKiBuZWVkIHRvIHJlY29uZmlndXJlIHRoZSBiZWFjb24gKi8KIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQkVBQ09OUyA7CkBAIC0yMjM5LDI0ICsyNDUwLDI5IEBACiAJCX0KIAl9CiAKLQlpZiAoKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pICYmCi0JICAgICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAotCSAgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkpKSB7Ci0JCS8qCi0JCSAqIEFsbG9jYXRlIGFuZCBzZXR1cCB0aGUgYmVhY29uIGZyYW1lLgotCQkgKgotCQkgKiBTdG9wIGFueSBwcmV2aW91cyBiZWFjb24gRE1BLiAgVGhpcyBtYXkgYmUKLQkJICogbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBpYnNzIG1lcmdlCi0JCSAqIGNhdXNlcyByZWNvbmZpZ3VyYXRpb247IHdlIG1heSBiZSBjYWxsZWQKLQkJICogd2l0aCBiZWFjb24gdHJhbnNtaXNzaW9uIGFjdGl2ZS4KLQkJICovCi0JCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CisJaWYgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApKSB7CisJCWlmICgoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikgfHwKKwkJICAgIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQgJiYKKwkJICAgICBjb25mLT5lbmFibGVfYmVhY29uKSkgeworCQkJLyoKKwkJCSAqIEFsbG9jYXRlIGFuZCBzZXR1cCB0aGUgYmVhY29uIGZyYW1lLgorCQkJICoKKwkJCSAqIFN0b3AgYW55IHByZXZpb3VzIGJlYWNvbiBETUEuICBUaGlzIG1heSBiZQorCQkJICogbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBpYnNzIG1lcmdlCisJCQkgKiBjYXVzZXMgcmVjb25maWd1cmF0aW9uOyB3ZSBtYXkgYmUgY2FsbGVkCisJCQkgKiB3aXRoIGJlYWNvbiB0cmFuc21pc3Npb24gYWN0aXZlLgorCQkJICovCisJCQlhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCi0JCWVycm9yID0gYXRoX2JlYWNvbl9hbGxvYyhzYywgMCk7Ci0JCWlmIChlcnJvciAhPSAwKQotCQkJcmV0dXJuIGVycm9yOworCQkJZXJyb3IgPSBhdGhfYmVhY29uX2FsbG9jKGFwaHksIHZpZik7CisJCQlpZiAoZXJyb3IgIT0gMCkgeworCQkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CiAKLQkJYXRoX2JlYWNvbl9zeW5jKHNjLCAwKTsKKwkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOworCQl9CiAJfQogCiAJLyogQ2hlY2sgZm9yIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gKi8KQEAgLTIyNjUsMTMgKzI0ODEsMTUgQEAKIAkJCWlmIChhdGg5a19od19rZXlpc3ZhbGlkKHNjLT5zY19haCwgKHUxNilpKSkKIAkJCQlhdGg5a19od19rZXlzZXRtYWMoc2MtPnNjX2FoLAogCQkJCQkJICAgKHUxNilpLAotCQkJCQkJICAgc2MtPnNjX2N1cmJzc2lkKTsKKwkJCQkJCSAgIHNjLT5jdXJic3NpZCk7CiAJfQogCiAJLyogT25seSBsZWdhY3kgSUJTUyBmb3Igbm93ICovCiAJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIDApOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyOTAsNyArMjUwOCw4IEBACiAJCQkJICAgaW50IG1jX2NvdW50LAogCQkJCSAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJdTMyIHJmaWx0OwogCiAJY2hhbmdlZF9mbGFncyAmPSBTVVBQT1JURURfRklMVEVSUzsKQEAgLTIzMDAsMTEgKzI1MTksNiBAQAogCXJmaWx0ID0gYXRoX2NhbGNyeGZpbHRlcihzYyk7CiAJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoc2MtPnNjX2FoLCByZmlsdCk7CiAKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MtPnNjX2FoLCBhdGhfYmNhc3RfbWFjLCAwKTsKLQl9Ci0KIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIlNldCBIVyBSWCBmaWx0ZXI6IDB4JXhcbiIsIHNjLT5yeC5yeGZpbHRlcik7CiB9CiAKQEAgLTIzMTMsNyArMjUyNyw4IEBACiAJCQkgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU1RBX05PVElGWV9BREQ6CkBAIC0yMzI3LDE3ICsyNTQyLDE5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGF0aDlrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgdTE2IHF1ZXVlLAorc3RhdGljIGludCBhdGg5a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHFpOwogCWludCByZXQgPSAwLCBxbnVtOwogCiAJaWYgKHF1ZXVlID49IFdNRV9OVU1fQUMpCiAJCXJldHVybiAwOwogCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwogCXFpLnRxaV9haWZzID0gcGFyYW1zLT5haWZzOwogCXFpLnRxaV9jd21pbiA9IHBhcmFtcy0+Y3dfbWluOwogCXFpLnRxaV9jd21heCA9IHBhcmFtcy0+Y3dfbWF4OwpAQCAtMjM1NCwyOSArMjU3MSwzOSBAQAogCWlmIChyZXQpCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsICJUWFEgVXBkYXRlIGZhaWxlZFxuIik7CiAKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDlrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgY29uc3QgdTggKmxvY2FsX2FkZHIsCi0JCQkgY29uc3QgdTggKmFkZHIsCisJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWludCByZXQgPSAwOwogCisJaWYgKG1vZHBhcmFtX25vaHdjcnlwdCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwgIlNldCBIVyBLZXlcbiIpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNFVF9LRVk6Ci0JCXJldCA9IGF0aF9rZXlfY29uZmlnKHNjLCBhZGRyLCBrZXkpOworCQlyZXQgPSBhdGhfa2V5X2NvbmZpZyhzYywgdmlmLCBzdGEsIGtleSk7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJa2V5LT5od19rZXlfaWR4ID0gcmV0OwogCQkJLyogcHVzaCBJViBhbmQgTWljaGFlbCBNSUMgZ2VuZXJhdGlvbiB0byBzdGFjayAqLwogCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CiAJCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApCiAJCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQzsKKwkJCWlmIChzYy0+c2NfYWgtPnN3X21nbXRfY3J5cHRvICYmIGtleS0+YWxnID09IEFMR19DQ01QKQorCQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQ7CiAJCQlyZXQgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtMjM4Nyw2ICsyNjE0LDkgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzk1LDcgKzI2MjUsMTAgQEAKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJCQkgICB1MzIgY2hhbmdlZCkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQlNTIENoYW5nZWQgUFJFQU1CTEUgJWRcbiIsCkBAIC0yNDIxLDMzICsyNjU0LDUwIEBACiAJCQlic3NfY29uZi0+YXNzb2MpOwogCQlhdGg5a19ic3NfYXNzb2NfaW5mbyhzYywgdmlmLCBic3NfY29uZik7CiAJfQorCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgdTY0IGF0aDlrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJdTY0IHRzZjsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAotCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KGFoKTsKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KHNjLT5zY19haCk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCiAJcmV0dXJuIHRzZjsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZikKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfaHdfc2V0dHNmNjQoc2MtPnNjX2FoLCB0c2YpOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKwogc3RhdGljIHZvaWQgYXRoOWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCi0JYXRoOWtfaHdfcmVzZXRfdHNmKGFoKTsKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX2h3X3Jlc2V0X3RzZihzYy0+c2NfYWgpOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBhdGg5a19hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCSAgICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CkBAIC0yNDgzLDcgKzI3MzMsNDEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzID0geworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCisJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKKwkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfU0NBTjsKKwlhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHNjLCBhcGh5KTsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfU0NBTk5JTkc7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCitzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCiAJLnN0b3AgCQkgICAgPSBhdGg5a19zdG9wLApAQCAtMjQ5Nyw4ICsyNzgxLDExIEBACiAJLmJzc19pbmZvX2NoYW5nZWQgICA9IGF0aDlrX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9rZXkgICAgICAgICAgICA9IGF0aDlrX3NldF9rZXksCiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCisJLnNldF90c2YgCSAgICA9IGF0aDlrX3NldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24sCisJLnN3X3NjYW5fc3RhcnQgICAgICA9IGF0aDlrX3N3X3NjYW5fc3RhcnQsCisJLnN3X3NjYW5fY29tcGxldGUgICA9IGF0aDlrX3N3X3NjYW5fY29tcGxldGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTI1MjcsNyArMjgxNCw3IEBACiAvKgogICogUmV0dXJuIHRoZSBNQUMvQkIgbmFtZS4gIj8/Pz8iIGlzIHJldHVybmVkIGlmIHRoZSBNQUMvQkIgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfbWFjX2JiX25hbWUodTMyIG1hY19iYl92ZXJzaW9uKQogewogCWludCBpOwpAQCAtMjU0NCw3ICsyODMxLDcgQEAKIC8qCiAgKiBSZXR1cm4gdGhlIFJGIG5hbWUuICI/Pz8/IiBpcyByZXR1cm5lZCBpZiB0aGUgUkYgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbikKIHsKIAlpbnQgaTsKQEAgLTI1NTgsMjU0ICsyODQ1LDYyIEBACiAJcmV0dXJuICI/Pz8/IjsKIH0KIAotc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JdTggY3N6OwotCXUzMiB2YWw7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9ICBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBub3QgYXZhaWxhYmxlXG4iKTsKLQkJZ290byBiYWQ7Ci0JfQotCi0JcmV0ID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBjb25zaXN0ZW50ICIKLQkJCSJETUEgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gYmFkOwotCX0KLQotCS8qCi0JICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cwotCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmY3N6KTsKLQlpZiAoY3N6ID09IDApIHsKLQkJLyoKLQkJICogTGludXggMi40LjE4IChhdCBsZWFzdCkgd3JpdGVzIHRoZSBjYWNoZSBsaW5lIHNpemUKLQkJICogcmVnaXN0ZXIgYXMgYSAxNi1iaXQgd2lkZSByZWdpc3RlciB3aGljaCBpcyB3cm9uZy4KLQkJICogV2UgbXVzdCBoYXZlIHRoaXMgc2V0dXAgcHJvcGVybHkgZm9yIHJ4IGJ1ZmZlcgotCQkgKiBETUEgdG8gd29yayBzbyBmb3JjZSBhIHJlYXNvbmFibGUgdmFsdWUgaGVyZSBpZiBpdAotCQkgKiBjb21lcyB1cCB6ZXJvLgotCQkgKi8KLQkJY3N6ID0gTDFfQ0FDSEVfQllURVMgLyBzaXplb2YodTMyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIGNzeik7Ci0JfQotCS8qCi0JICogVGhlIGRlZmF1bHQgc2V0dGluZyBvZiBsYXRlbmN5IHRpbWVyIHlpZWxkcyBwb29yIHJlc3VsdHMsCi0JICogc2V0IGl0IHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IG90aGVyIHN5c3RlbXMuIEl0IG1heSBiZSB3b3J0aAotCSAqIHR3ZWFraW5nIHRoaXMgc2V0dGluZyBtb3JlLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhhOCk7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCS8qCi0JICogRGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAotCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZ2YWwpOwotCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCAiYXRoOWsiKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSBtZW1vcnkgcmVnaW9uIHJlc2VydmUgZXJyb3JcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGJhZDsKLQl9Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0kgbWVtb3J5IG1hcCBlcnJvclxuIikgOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDE7Ci0JfQotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfc29mdGMpLCAmYXRoOWtfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0aF9wY2k6IG5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKLQkJZ290byBiYWQyOwotCX0KLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOwotCi0Jc2MgPSBody0+cHJpdjsKLQlzYy0+aHcgPSBodzsKLQlzYy0+cGRldiA9IHBkZXY7Ci0Jc2MtPm1lbSA9IG1lbTsKLQotCWlmIChhdGhfYXR0YWNoKGlkLT5kZXZpY2UsIHNjKSAhPSAwKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFkMzsKLQl9Ci0KLQkvKiBzZXR1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCi0KLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQl3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDQ7Ci0JfQotCi0JYWggPSBzYy0+c2NfYWg7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKLQkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmFoX21hY1ZlcnNpb24pLAotCSAgICAgICBhaC0+YWhfbWFjUmV2LAotCSAgICAgICBhdGhfcmZfbmFtZSgoYWgtPmFoX2FuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCi0JICAgICAgIGFoLT5haF9waHlSZXYsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgcGRldi0+aXJxKTsKLQotCXJldHVybiAwOwotYmFkNDoKLQlhdGhfZGV0YWNoKHNjKTsKLWJhZDM6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotYmFkMjoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotYmFkMToKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1iYWQ6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGhfZGV0YWNoKHNjKTsKLQlpZiAocGRldi0+aXJxKQotCQlmcmVlX2lycShwZGV2LT5pcnEsIHNjKTsKLQlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IGF0aF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnJmX2tpbGwucmZraWxsX3BvbGwpOwotI2VuZGlmCi0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0JdTMyIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQkvKgotCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KLQkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCi0JICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZQotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCAmdmFsKTsKLQlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgdmFsICYgMHhmZmZmMDBmZik7Ci0KLQkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIEFUSF9MRURfUElOLAotCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCS8qCi0JICogY2hlY2sgdGhlIGgvdyByZmtpbGwgc3RhdGUgb24gcmVzdW1lCi0JICogYW5kIHN0YXJ0IHRoZSByZmtpbGwgcG9sbCB0aW1lcgotCSAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKLQkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGhfcGNpX2lkX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aF9wY2lfZHJpdmVyID0gewotCS5uYW1lICAgICAgID0gImF0aDlrIiwKLQkuaWRfdGFibGUgICA9IGF0aF9wY2lfaWRfdGFibGUsCi0JLnByb2JlICAgICAgPSBhdGhfcGNpX3Byb2JlLAotCS5yZW1vdmUgICAgID0gYXRoX3BjaV9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgICAgPSBhdGhfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZSAgICAgPSBhdGhfcGNpX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRoX3BjaSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXRoOWtfaW5pdCh2b2lkKQogewogCWludCBlcnJvcjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgZGV2X2luZm8sIEFUSF9QQ0lfVkVSU0lPTik7Ci0KIAkvKiBSZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCiAJZXJyb3IgPSBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKGVycm9yICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLAorCQkJImF0aDlrOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sICIKKwkJCSJhbGdvcml0aG06ICVkXG4iLAogCQkJZXJyb3IpOwotCQlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKSA8IDApIHsKKwllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkJImF0aF9wY2k6IE5vIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7Ci0JCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwotCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCQkiYXRoOWs6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyByb290OiAlZFxuIiwKKwkJCWVycm9yKTsKKwkJZ290byBlcnJfcmF0ZV91bnJlZ2lzdGVyOworCX0KKworCWVycm9yID0gYXRoX3BjaV9pbml0KCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhdGg5azogTm8gUENJIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVtb3ZlX3Jvb3Q7CisJfQorCisJZXJyb3IgPSBhdGhfYWhiX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcGNpX2V4aXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChpbml0X2F0aF9wY2kpOwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9hdGhfcGNpKHZvaWQpCi17CisgZXJyX3BjaV9leGl0OgorCWF0aF9wY2lfZXhpdCgpOworCisgZXJyX3JlbW92ZV9yb290OgorCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisgZXJyX3JhdGVfdW5yZWdpc3RlcjoKIAlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKKyBlcnJfb3V0OgorCXJldHVybiBlcnJvcjsKK30KK21vZHVsZV9pbml0KGF0aDlrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfZXhpdCh2b2lkKQoreworCWF0aF9haGJfZXhpdCgpOworCWF0aF9wY2lfZXhpdCgpOworCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisJYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciB1bmxvYWRlZFxuIiwgZGV2X2luZm8pOwogfQotbW9kdWxlX2V4aXQoZXhpdF9hdGhfcGNpKTsKK21vZHVsZV9leGl0KGF0aDlrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTU4YmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoX3BjaV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjMpIH0sIC8qIFBDSSAgICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjQpIH0sIC8qIFBDSS1FICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjcpIH0sIC8qIFBDSSAgICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjkpIH0sIC8qIFBDSSAgICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkEpIH0sIC8qIFBDSS1FICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkIpIH0sIC8qIFBDSS1FICovCisJeyAwIH0KK307CisKKy8qIHJldHVybiBidXMgY2FjaGVzaXplIGluIDRCIHdvcmQgdW5pdHMgKi8KK3N0YXRpYyB2b2lkIGF0aF9wY2lfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQoreworCXU4IHU4dG1wOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUodG9fcGNpX2RldihzYy0+ZGV2KSwgUENJX0NBQ0hFX0xJTkVfU0laRSwKKwkJCSAgICAgKHU4ICopJnU4dG1wKTsKKwkqY3N6ID0gKGludCl1OHRtcDsKKworCS8qCisJICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgorCSAqIHRoZSBib290cm9tIGhhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgYWxsIFBDSSBkZXZpY2VzLgorCSAqIFNvbWV0aW1lcyB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIG5vdCBzZXQKKwkgKi8KKworCWlmICgqY3N6ID09IDApCisJCSpjc3ogPSBERUZBVUxUX0NBQ0hFTElORSA+PiAyOyAgIC8qIFVzZSB0aGUgZGVmYXVsdCBzaXplICovCit9CisKK3N0YXRpYyB2b2lkIGF0aF9wY2lfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoc2MtPmRldik7CisKKwlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOworfQorCitzdGF0aWMgYm9vbCBhdGhfcGNpX2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJKHZvaWQpUkVHX1JFQUQoYWgsIEFSNTQxNl9FRVBST01fT0ZGU0VUICsgKG9mZiA8PCBBUjU0MTZfRUVQUk9NX1MpKTsKKworCWlmICghYXRoOWtfaHdfd2FpdChhaCwKKwkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQSwKKwkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9CVVNZIHwKKwkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9QUk9UX0FDQ0VTUywgMCwKKwkJCSAgIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCSpkYXRhID0gTVMoUkVHX1JFQUQoYWgsIEFSX0VFUFJPTV9TVEFUVVNfREFUQSksCisJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9WQUwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1c19vcHMgYXRoX3BjaV9idXNfb3BzID0geworCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9wY2lfcmVhZF9jYWNoZXNpemUsCisJLmNsZWFudXAgPSBhdGhfcGNpX2NsZWFudXAsCisJLmVlcHJvbV9yZWFkID0gYXRoX3BjaV9lZXByb21fcmVhZCwKK307CisKK3N0YXRpYyBpbnQgYXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXZvaWQgX19pb21lbSAqbWVtOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2M7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJdTggY3N6OworCXUzMiB2YWw7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGF0aF9odyAqYWg7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlnb3RvIGJhZDsKKwl9CisKKwlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIGNvbnNpc3RlbnQgIgorCQkJIkRNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJZ290byBiYWQ7CisJfQorCisJLyoKKwkgKiBDYWNoZSBsaW5lIHNpemUgaXMgdXNlZCB0byBzaXplIGFuZCBhbGlnbiB2YXJpb3VzCisJICogc3RydWN0dXJlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjc3opOworCWlmIChjc3ogPT0gMCkgeworCQkvKgorCQkgKiBMaW51eCAyLjQuMTggKGF0IGxlYXN0KSB3cml0ZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZQorCQkgKiByZWdpc3RlciBhcyBhIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIHdoaWNoIGlzIHdyb25nLgorCQkgKiBXZSBtdXN0IGhhdmUgdGhpcyBzZXR1cCBwcm9wZXJseSBmb3IgcnggYnVmZmVyCisJCSAqIERNQSB0byB3b3JrIHNvIGZvcmNlIGEgcmVhc29uYWJsZSB2YWx1ZSBoZXJlIGlmIGl0CisJCSAqIGNvbWVzIHVwIHplcm8uCisJCSAqLworCQljc3ogPSBMMV9DQUNIRV9CWVRFUyAvIHNpemVvZih1MzIpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY3N6KTsKKwl9CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIGxhdGVuY3kgdGltZXIgeWllbGRzIHBvb3IgcmVzdWx0cywKKwkgKiBzZXQgaXQgdG8gdGhlIHZhbHVlIHVzZWQgYnkgb3RoZXIgc3lzdGVtcy4gSXQgbWF5IGJlIHdvcnRoCisJICogdHdlYWtpbmcgdGhpcyBzZXR0aW5nIG1vcmUuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGE4KTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCisJICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZS4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgJnZhbCk7CisJaWYgKCh2YWwgJiAweDAwMDBmZjAwKSAhPSAwKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsIHZhbCAmIDB4ZmZmZjAwZmYpOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsICJhdGg5ayIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIG1lbW9yeSByZWdpb24gcmVzZXJ2ZSBlcnJvclxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFkOworCX0KKworCW1lbSA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIW1lbSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSSBtZW1vcnkgbWFwIGVycm9yXG4iKSA7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkMTsKKwl9CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aF93aXBoeSkgKworCQkJCXNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdGhfcGNpOiBubyBtZW1vcnkgZm9yIGllZWU4MDIxMV9od1xuIik7CisJCWdvdG8gYmFkMjsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIChhcGh5ICsgMSk7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5wcmlfd2lwaHkgPSBhcGh5OworCXNjLT5odyA9IGh3OworCXNjLT5kZXYgPSAmcGRldi0+ZGV2OworCXNjLT5tZW0gPSBtZW07CisJc2MtPmJ1c19vcHMgPSAmYXRoX3BjaV9idXNfb3BzOworCisJaWYgKGF0aF9hdHRhY2goaWQtPmRldmljZSwgc2MpICE9IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWQzOworCX0KKworCS8qIHNldHVwIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aF9pc3IsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwKKwkJCXdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkNDsKKwl9CisKKwlzYy0+aXJxID0gcGRldi0+aXJxOworCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKKwkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAorCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiksCisJICAgICAgIGFoLT5od192ZXJzaW9uLm1hY1JldiwKKwkgICAgICAgYXRoX3JmX25hbWUoKGFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCisJICAgICAgIGFoLT5od192ZXJzaW9uLnBoeVJldiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpbWVtLCBwZGV2LT5pcnEpOworCisJcmV0dXJuIDA7CitiYWQ0OgorCWF0aF9kZXRhY2goc2MpOworYmFkMzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CitiYWQyOgorCXBjaV9pb3VubWFwKHBkZXYsIG1lbSk7CitiYWQxOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKK2JhZDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhdGhfY2xlYW51cChzYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhdGhfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOworCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCk7CisjZW5kaWYKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCS8qCisJICogU3VzcGVuZC9SZXN1bWUgcmVzZXRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gd2UgaGF2ZSB0bworCSAqIHJlLWRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKKwkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlCisJICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZ2YWwpOworCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKKworCS8qIEVuYWJsZSBMRUQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCisJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCisJLyoKKwkgKiBjaGVjayB0aGUgaC93IHJma2lsbCBzdGF0ZSBvbiByZXN1bWUKKwkgKiBhbmQgc3RhcnQgdGhlIHJma2lsbCBwb2xsIHRpbWVyCisJICovCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aF9wY2lfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRoX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiYXRoOWsiLAorCS5pZF90YWJsZSAgID0gYXRoX3BjaV9pZF90YWJsZSwKKwkucHJvYmUgICAgICA9IGF0aF9wY2lfcHJvYmUsCisJLnJlbW92ZSAgICAgPSBhdGhfcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgICA9IGF0aF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGF0aF9wY2lfcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworfTsKKworaW50IGF0aF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CisKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCmluZGV4IDc2Njk4MmEuLmUxNDk0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCkBAIC0xNCwyMiArMTQsMTcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKIHZvaWQKLWF0aDlrX2h3X3dyaXRlX3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgbW9kZXNJbmRleCwgdTMyIGZyZXFJbmRleCwKK2F0aDlrX2h3X3dyaXRlX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiBtb2Rlc0luZGV4LCB1MzIgZnJlcUluZGV4LAogCQkgICAgaW50IHJlZ1dyaXRlcykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JUkVHX1dSSVRFX0FSUkFZKCZhaHAtPmFoX2luaUJCX1JmR2FpbiwgZnJlcUluZGV4LCByZWdXcml0ZXMpOworCVJFR19XUklURV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgZnJlcUluZGV4LCByZWdXcml0ZXMpOwogfQogCiBib29sCi1hdGg5a19od19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBjaGFubmVsU2VsID0gMDsKIAl1MzIgYk1vZGVTeW50aCA9IDA7CkBAIC05NSwxNSArOTAsMTQgQEAKIAogCVJFR19XUklURShhaCwgQVJfUEhZKDB4MzcpLCByZWczMik7CiAKLQlhaC0+YWhfY3VyY2hhbiA9IGNoYW47Ci0KLQlBSDU0MTYoYWgpLT5haF9jdXJjaGFuUmFkSW5kZXggPSAtMTsKKwlhaC0+Y3VyY2hhbiA9IGNoYW47CisJYWgtPmN1cmNoYW5fcmFkX2luZGV4ID0gLTE7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbAotYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2F0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MTYgYk1vZGUsIGZyYWNNb2RlLCBhTW9kZVJlZlNlbCA9IDA7CkBAIC0xMzgsMjAgKzEzMiwyNyBAQAogCQliTW9kZSA9IDA7CiAJCWZyYWNNb2RlID0gMDsKIAotCQlpZiAoKGZyZXEgJSAyMCkgPT0gMCkgewotCQkJYU1vZGVSZWZTZWwgPSAzOwotCQl9IGVsc2UgaWYgKChmcmVxICUgMTApID09IDApIHsKLQkJCWFNb2RlUmVmU2VsID0gMjsKLQkJfSBlbHNlIHsKKwkJc3dpdGNoKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfRlJBQ19OXzVHKSkgeworCQljYXNlIDA6CisJCQlpZiAoKGZyZXEgJSAyMCkgPT0gMCkgeworCQkJCWFNb2RlUmVmU2VsID0gMzsKKwkJCX0gZWxzZSBpZiAoKGZyZXEgJSAxMCkgPT0gMCkgeworCQkJCWFNb2RlUmVmU2VsID0gMjsKKwkJCX0KKwkJCWlmIChhTW9kZVJlZlNlbCkKKwkJCQlicmVhazsKKwkJY2FzZSAxOgorCQlkZWZhdWx0OgogCQkJYU1vZGVSZWZTZWwgPSAwOwotCiAJCQlmcmFjTW9kZSA9IDE7CiAJCQlyZWZEaXZBID0gMTsKIAkJCWNoYW5uZWxTZWwgPSAoZnJlcSAqIDB4ODAwMCkgLyAxNTsKIAogCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fU1lOVEg5LAogCQkJCSAgICAgIEFSX0FOX1NZTlRIOV9SRUZESVZBLCByZWZEaXZBKTsKKwogCQl9CisKIAkJaWYgKCFmcmFjTW9kZSkgewogCQkJbmRpdiA9IChmcmVxICogKHJlZkRpdkEgPj4gYU1vZGVSZWZTZWwpKSAvIDYwOwogCQkJY2hhbm5lbFNlbCA9IG5kaXYgJiAweDFmZjsKQEAgLTE2Niw5ICsxNjcsOCBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1lOVEhfQ09OVFJPTCwgcmVnMzIpOwogCi0JYWgtPmFoX2N1cmNoYW4gPSBjaGFuOwotCi0JQUg1NDE2KGFoKS0+YWhfY3VyY2hhblJhZEluZGV4ID0gLTE7CisJYWgtPmN1cmNoYW4gPSBjaGFuOworCWFoLT5jdXJjaGFuX3JhZF9pbmRleCA9IC0xOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0yMDEsMTEgKzIwMSw5IEBACiB9CiAKIGJvb2wKLWF0aDlrX2h3X3NldF9yZl9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCithdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCSAgICAgdTE2IG1vZGVzSW5kZXgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCXUzMiBlZXBNaW5vclJldjsKIAl1MzIgb2I1R0h6ID0gMCwgZGI1R0h6ID0gMDsKIAl1MzIgb2IyR0h6ID0gMCwgZGIyR0h6ID0gMDsKQEAgLTIxNCwxNjEgKzIxMiwxNTYgQEAKIAlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuIHRydWU7CiAKLQllZXBNaW5vclJldiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpOworCWVlcE1pbm9yUmV2ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpOwogCi0JUkZfQkFOS19TRVRVUChhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSwgJmFocC0+YWhfaW5pQmFuazAsIDEpOworCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmswRGF0YSwgJmFoLT5pbmlCYW5rMCwgMSk7CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazFEYXRhLCAmYWhwLT5haF9pbmlCYW5rMSwgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazFEYXRhLCAmYWgtPmluaUJhbmsxLCAxKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEsICZhaHAtPmFoX2luaUJhbmsyLCAxKTsKKwlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rMkRhdGEsICZhaC0+aW5pQmFuazIsIDEpOwogCi0JUkZfQkFOS19TRVRVUChhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSwgJmFocC0+YWhfaW5pQmFuazMsCisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazNEYXRhLCAmYWgtPmluaUJhbmszLAogCQkgICAgICBtb2Rlc0luZGV4KTsKIAl7CiAJCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlCYW5rNlRQQy5pYV9yb3dzOyBpKyspIHsKLQkJCWFocC0+YWhfYW5hbG9nQmFuazZEYXRhW2ldID0KLQkJCSAgICBJTklfUkEoJmFocC0+YWhfaW5pQmFuazZUUEMsIGksIG1vZGVzSW5kZXgpOworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaUJhbms2VFBDLmlhX3Jvd3M7IGkrKykgeworCQkJYWgtPmFuYWxvZ0Jhbms2RGF0YVtpXSA9CisJCQkgICAgSU5JX1JBKCZhaC0+aW5pQmFuazZUUEMsIGksIG1vZGVzSW5kZXgpOwogCQl9CiAJfQogCiAJaWYgKGVlcE1pbm9yUmV2ID49IDIpIHsKIAkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQkJb2IyR0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX09CXzIpOwotCQkJZGIyR0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX0RCXzIpOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlvYjJHSHogPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09CXzIpOworCQkJZGIyR0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQl8yKTsKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBvYjJHSHosIDMsIDE5NywgMCk7Ci0JCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBkYjJHSHosIDMsIDE5NCwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlvYjVHSHogPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfT0JfNSk7Ci0JCQlkYjVHSHogPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfREJfNSk7Ci0JCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwkJCW9iNUdIeiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0JfNSk7CisJCQlkYjVHSHogPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0RCXzUpOworCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWgtPmFuYWxvZ0Jhbms2RGF0YSwKIAkJCQkJCSAgIG9iNUdIeiwgMywgMjAzLCAwKTsKLQkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhLAorCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWgtPmFuYWxvZ0Jhbms2RGF0YSwKIAkJCQkJCSAgIGRiNUdIeiwgMywgMjAwLCAwKTsKIAkJfQogCX0KIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEsICZhaHAtPmFoX2luaUJhbms3LCAxKTsKKwlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rN0RhdGEsICZhaC0+aW5pQmFuazcsIDEpOwogCi0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYWgtPmFuYWxvZ0JhbmswRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsxLCBhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYWgtPmFuYWxvZ0JhbmsxRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMiwgYWgtPmFuYWxvZ0JhbmsyRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMywgYWgtPmFuYWxvZ0JhbmszRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rNlRQQywgYWgtPmFuYWxvZ0Jhbms2RGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rNywgYWgtPmFuYWxvZ0Jhbms3RGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZAotYXRoOWtfaHdfcmZkZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQorYXRoOWtfaHdfcmZkZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazBEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazBEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmswRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rMERhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazFEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmsxRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rMURhdGEpOworCQlhaC0+YW5hbG9nQmFuazFEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rMkRhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazJEYXRhKTsKKwkJYWgtPmFuYWxvZ0JhbmsyRGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazNEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazNEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmszRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rM0RhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazZEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0Jhbms2RGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rNkRhdGEpOworCQlhaC0+YW5hbG9nQmFuazZEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazZUUENEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazZUUENEYXRhKTsKKwkJYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazdEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazdEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0Jhbms3RGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rN0RhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hZGRhYzU0MTZfMjEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FkZGFjNTQxNl8yMSk7Ci0JCWFocC0+YWhfYWRkYWM1NDE2XzIxID0gTlVMTDsKKwlpZiAoYWgtPmFkZGFjNTQxNl8yMSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hZGRhYzU0MTZfMjEpOworCQlhaC0+YWRkYWM1NDE2XzIxID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYmFuazZUZW1wICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9iYW5rNlRlbXApOwotCQlhaHAtPmFoX2Jhbms2VGVtcCA9IE5VTEw7CisJaWYgKGFoLT5iYW5rNlRlbXAgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YmFuazZUZW1wKTsKKwkJYWgtPmJhbms2VGVtcCA9IE5VTEw7CiAJfQogfQogCi1ib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgKnN0YXR1cykKK2Jvb2wgYXRoOWtfaHdfaW5pdF9yZihzdHJ1Y3QgYXRoX2h3ICphaCwgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICghQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlhaC0+YW5hbG9nQmFuazBEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbmswLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0JhbmsxRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMS5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rMkRhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazIuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazNEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbmszLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0Jhbms2RGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazZUUEMuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazdEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbms3LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKIAotCQlhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazAuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazEuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazIuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazMuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazYuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazZUUEMuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazcuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCi0JCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSA9PSBOVUxMKSB7CisJCWlmIChhaC0+YW5hbG9nQmFuazBEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rMURhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0JhbmsyRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazNEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rNkRhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazdEYXRhID09IE5VTEwpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAogCQkJCSJDYW5ub3QgYWxsb2NhdGUgUkYgYmFua3NcbiIpOwogCQkJKnN0YXR1cyA9IC1FTk9NRU07CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAotCQlhaHAtPmFoX2FkZGFjNTQxNl8yMSA9CisJCWFoLT5hZGRhYzU0MTZfMjEgPQogCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUFkZGFjLmlhX3Jvd3MgKgotCQkJICAgICBhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnMpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGFocC0+YWhfYWRkYWM1NDE2XzIxID09IE5VTEwpIHsKKwkJCSAgICAgYWgtPmluaUFkZGFjLmlhX3Jvd3MgKgorCQkJICAgICBhaC0+aW5pQWRkYWMuaWFfY29sdW1ucyksIEdGUF9LRVJORUwpOworCQlpZiAoYWgtPmFkZGFjNTQxNl8yMSA9PSBOVUxMKSB7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiQ2Fubm90IGFsbG9jYXRlIGFoX2FkZGFjNTQxNl8yMVxuIik7CisJCQkJIkNhbm5vdCBhbGxvY2F0ZSBhZGRhYzU0MTZfMjFcbiIpOwogCQkJKnN0YXR1cyA9IC1FTk9NRU07CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAotCQlhaHAtPmFoX2Jhbms2VGVtcCA9CisJCWFoLT5iYW5rNlRlbXAgPQogCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGFocC0+YWhfYmFuazZUZW1wID09IE5VTEwpIHsKKwkJCSAgICAgYWgtPmluaUJhbms2LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGFoLT5iYW5rNlRlbXAgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkNhbm5vdCBhbGxvY2F0ZSBhaF9iYW5rNlRlbXBcbiIpOworCQkJCSJDYW5ub3QgYWxsb2NhdGUgYmFuazZUZW1wXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CkBAIC0zNzgsMjQgKzM3MSwyMyBAQAogfQogCiB2b2lkCi1hdGg5a19od19kZWNyZWFzZV9jaGFpbl9wb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCWludCBpLCByZWdXcml0ZXMgPSAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIGJhbms2U2VsTWFzazsKLQl1MzIgKmJhbms2VGVtcCA9IGFocC0+YWhfYmFuazZUZW1wOworCXUzMiAqYmFuazZUZW1wID0gYWgtPmJhbms2VGVtcDsKIAotCXN3aXRjaCAoYWhwLT5haF9kaXZlcnNpdHlDb250cm9sKSB7CisJc3dpdGNoIChhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wpIHsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9BOgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFocC0+Ci0JCSAgICAgYWhfYW50ZW5uYVN3aXRjaFN3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8wIDoKKwkJICAgIChhaC0+CisJCSAgICAgYW50ZW5uYV9zd2l0Y2hfc3dhcCAmIEFOVFNXQVBfQUIpID8gUkVEVUNFX0NIQUlOXzAgOgogCQkgICAgUkVEVUNFX0NIQUlOXzE7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfQU5UX0ZJWEVEX0I6CiAJCWJhbms2U2VsTWFzayA9Ci0JCSAgICAoYWhwLT4KLQkJICAgICBhaF9hbnRlbm5hU3dpdGNoU3dhcCAmIEFOVFNXQVBfQUIpID8gUkVEVUNFX0NIQUlOXzEgOgorCQkgICAgKGFoLT4KKwkJICAgICBhbnRlbm5hX3N3aXRjaF9zd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMSA6CiAJCSAgICBSRURVQ0VfQ0hBSU5fMDsKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19BTlRfVkFSSUFCTEU6CkBAIC00MDYsOCArMzk4LDggQEAKIAkJYnJlYWs7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGFocC0+YWhfaW5pQmFuazYuaWFfcm93czsgaSsrKQotCQliYW5rNlRlbXBbaV0gPSBhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YVtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaUJhbms2LmlhX3Jvd3M7IGkrKykKKwkJYmFuazZUZW1wW2ldID0gYWgtPmFuYWxvZ0Jhbms2RGF0YVtpXTsKIAogCVJFR19XUklURShhaCwgQVJfUEhZX0JBU0UgKyAweEQ4LCBiYW5rNlNlbE1hc2spOwogCkBAIC00MjEsNyArNDEzLDcgQEAKIAlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihiYW5rNlRlbXAsIDEsIDEsIDI0NiwgMCk7CiAJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYmFuazZUZW1wLCAxLCAxLCAyNDcsIDApOwogCi0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2LCBiYW5rNlRlbXAsIHJlZ1dyaXRlcyk7CisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazYsIGJhbms2VGVtcCwgcmVnV3JpdGVzKTsKIAogCVJFR19XUklURShhaCwgQVJfUEhZX0JBU0UgKyAweEQ4LCAweDAwMDAwMDUzKTsKICNpZmRlZiBBTFRFUl9TV0lUQ0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGh5LmgKaW5kZXggM2E0MDZhNS4uMWVhYzhjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGh5LmgKQEAgLTE3LDE5ICsxNywxOSBAQAogI2lmbmRlZiBQSFlfSAogI2RlZmluZSBQSFlfSAogCi1ib29sIGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitib29sIGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwKIAkJCQkgKmNoYW4pOwotYm9vbCBhdGg5a19od19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitib29sIGF0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci12b2lkIGF0aDlrX2h3X3dyaXRlX3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgbW9kZXNJbmRleCwKK3ZvaWQgYXRoOWtfaHdfd3JpdGVfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG1vZGVzSW5kZXgsCiAJCQkgdTMyIGZyZXFJbmRleCwgaW50IHJlZ1dyaXRlcyk7Ci1ib29sIGF0aDlrX2h3X3NldF9yZl9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJICB1MTYgbW9kZXNJbmRleCk7Ci12b2lkIGF0aDlrX2h3X2RlY3JlYXNlX2NoYWluX3Bvd2VyKHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfaW5pdF9yZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgaW50ICpzdGF0dXMpOwogCiAjZGVmaW5lIEFSX1BIWV9CQVNFICAgICAweDk4MDAKQEAgLTM4Nyw2ICszODcsOCBAQAogCiAjZGVmaW5lIEFSX1BIWV9DQ0tfVFhfQ1RSTCAgICAgICAweEEyMDQKICNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMX0pBUEFOIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0sgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFSX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLX1MgICAgICAgMgogCiAjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhBMjA4CiAjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0sgICAgICAgICAgMHgwMDAwMDAzRgpAQCAtNDQ0LDYgKzQ0NiwzMiBAQAogI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMyAgICAweDAwMzAwMDAwCiAjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zX1MgIDIwCiAKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFICAgMHgwMDQwMDAwMAorI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0NBTF9FTkFCTEVfUyAyMgorCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMNCAgICAgICAweGEyNjQKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX1ZBTElEICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19WQUxJRF9TICAgMAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUICAgICAgIDB4MDAwMDAxRkUKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX09VVF9TICAgICAxCisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw2XzAgICAgIDB4YTI3MAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDZfMSAgICAgMHhiMjcwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0VSUl9FU1RfTU9ERSAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREVfUyAgIDI0CisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw3ICAgICAgIDB4YTI3NAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9JTklUX1RYX0dBSU4gICAgIDB4MDFGODAwMDAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfSU5JVF9UWF9HQUlOX1MgICAxOQorCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOSAgICAgICAweGEyN0MKKyNkZWZpbmUgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLICAgICAgICAweDAwMDA3QzAwCisjZGVmaW5lIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDS19TICAgICAgMTAKKworI2RlZmluZSBBUl9QSFlfVFhfR0FJTl9UQkwxICAgICAgMHhhMzAwCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOICAgICAgICAgICAgICAgICAgICAgMHgwMDA3RjAwMAorI2RlZmluZSBBUl9QSFlfVFhfR0FJTl9TICAgICAgICAgICAgICAgICAgIDEyCisKICNkZWZpbmUgQVJfUEhZX1ZJVF9NQVNLMl9NXzQ2XzYxIDB4YTNhMAogI2RlZmluZSBBUl9QSFlfTUFTSzJfTV8zMV80NSAgICAgMHhhM2E0CiAjZGVmaW5lIEFSX1BIWV9NQVNLMl9NXzE2XzMwICAgICAweGEzYTgKQEAgLTQ4NSw2ICs1MTMsMTEgQEAKICNkZWZpbmUgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQgICAgMHgwRkMwMDAwMAogI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNF9TICAyMgogCisvKiBDYXJyaWVyIGxlYWsgY2FsaWJyYXRpb24gY29udHJvbCwgZG8gaXQgYWZ0ZXIgQUdDIGNhbGlicmF0aW9uICovCisjZGVmaW5lIEFSX1BIWV9DTF9DQUxfQ1RMICAgICAgIDB4QTM1OAorI2RlZmluZSBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BIWV9QQVJBTExFTF9DQUxfRU5BQkxFICAgIDB4MDAwMDAwMDEKKwogI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTUgICAweEEzOEMKICNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEU2ICAgMHhBMzkwCiAKQEAgLTUzMCwxMCArNTYzLDggQEAKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBBVEg5S19LRVlfWE9SICAgICAgICAgICAgICAgICAweGFhCi0KICNkZWZpbmUgQVRIOUtfSVNfTUlDX0VOQUJMRUQoYWgpCQkJCQlcCi0JKEFINTQxNihhaCktPmFoX3N0YUlkMURlZmF1bHRzICYgQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEUpCisJKChhaCktPnN0YV9pZDFfZGVmYXVsdHMgJiBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRSkKIAogI2RlZmluZSBBTlRTV0FQX0FCIDB4MDAwMQogI2RlZmluZSBSRURVQ0VfQ0hBSU5fMCAweDAwMDAwMDUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuYwppbmRleCAxYjcxYjkzLi44MzI3MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMKQEAgLTE1LDE2ICsxNSwxNSBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmFfcmF0ZXRhYmxlID0gewogCTQyLAotCXswfSwKIAl7CiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCiAJCQk1NDAwLCAweDBiLCAweDAwLCAxMiwKIAkJCTAsIDIsIDEsIDAsIDAsIDAsIDAsIDAgfSwKLQkJeyBWQUxJRCwJVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KKwkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsICAweDBmLCAweDAwLCAxOCwKIAkJCTAsIDMsIDEsIDEsIDEsIDEsIDEsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDEyMDAwLCAvKiAxMiBNYiAqLwpAQCAtMTU4LDcgKzE1Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmdfcmF0ZXRhYmxlID0gewogCTQ2LAotCXswfSwKIAl7CiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzA2LDcgKzMwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYV9yYXRldGFibGUgPSB7CiAJOCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNjAwMCwgLyogNiBNYiAqLwogCQkJNTQwMCwgMHgwYiwgMHgwMCwgKDB4ODB8MTIpLApAQCAtMzQwLDcgKzMzNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExZ19yYXRldGFibGUgPSB7CiAJMTIsCi0JezB9LAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzg2LDcgKzM4Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYl9yYXRldGFibGUgPSB7CiAJNCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMDAwLCAvKiAxIE1iICovCiAJCQk5MDAsIDB4MWIsICAweDAwLCAoMHg4MHwyKSwKQEAgLTYzNiw4ICs2MzEsNyBAQAogc3RhdGljIHU4IGF0aF9yY19yYXRlZmluZF9odChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCi0JCQkgICAgIGludCBwcm9iZV9hbGxvd2VkLCBpbnQgKmlzX3Byb2JpbmcsCi0JCQkgICAgIGludCBpc19yZXRyeSkKKwkJCSAgICAgaW50ICppc19wcm9iaW5nKQogewogCXUzMiBkdCwgYmVzdF90aHJ1cHV0LCB0aGlzX3RocnVwdXQsIG5vd19tc2VjOwogCXU4IHJhdGUsIG5leHRfcmF0ZSwgYmVzdF9yYXRlLCBtYXhpbmRleCwgbWluaW5kZXg7CkBAIC03MTksMTMgKzcxMyw2IEBACiAJfQogCiAJcmF0ZSA9IGJlc3RfcmF0ZTsKLQotCS8qIGlmIHdlIGFyZSByZXRyeWluZyBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIG51bWJlcgotCSAqIG9mIG1heCByZXRyaWVzLCB1c2UgdGhlIG1pbiByYXRlIGZvciB0aGUgbmV4dCByZXRyeQotCSAqLwotCWlmIChpc19yZXRyeSkKLQkJcmF0ZSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W21pbmluZGV4XTsKLQogCWF0aF9yY19wcml2LT5yc3NpX2xhc3RfbG9va3VwID0gcnNzaV9sYXN0OwogCiAJLyoKQEAgLTczMywxMyArNzIwLDEyIEBACiAJICogbm9uLW1vbm90aWNpdHkgb2YgMTFnJ3MgcmF0ZSB0YWJsZQogCSAqLwogCi0JaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSAmJiBwcm9iZV9hbGxvd2VkKSB7CisJaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSkgewogCQlyYXRlID0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeTsKIAogCQkvKiBQcm9iZSB0aGUgbmV4dCBhbGxvd2VkIHBoeSBzdGF0ZSAqLwotCQkvKiBGSVhNRTpYWFhYIENoZWNrIHRvIG1ha2Ugc3VyZSByYXRNYXggaXMgY2hlY2tlZCBwcm9wZXJseSAqLwogCQlpZiAoYXRoX3JjX2dldF9uZXh0dmFsaWRfdHhyYXRlKHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdiwgcmF0ZSwgJm5leHRfcmF0ZSkgJiYKKwkJCQkJYXRoX3JjX3ByaXYsIHJhdGUsICZuZXh0X3JhdGUpICYmCiAJCSAgICAobm93X21zZWMgLSBhdGhfcmNfcHJpdi0+cHJvYmVfdGltZSA+CiAJCSAgICAgcmF0ZV90YWJsZS0+cHJvYmVfaW50ZXJ2YWwpICYmCiAJCSAgICAoYXRoX3JjX3ByaXYtPmh3X21heHJldHJ5X3BrdGNudCA+PSAxKSkgewpAQCAtNzYxLDE0ICs3NDcsMTcgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgLAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjLAogCQkJCSAgIHU4IHRyaWVzLCB1OCByaXgsIGludCBydHNjdHNlbmFibGUpCiB7CiAJcmF0ZS0+Y291bnQgPSB0cmllczsKIAlyYXRlLT5pZHggPSByaXg7CiAKLQlpZiAocnRzY3RzZW5hYmxlKQorCWlmICh0eHJjLT5zaG9ydF9wcmVhbWJsZSkKKwkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTsKKwlpZiAodHhyYy0+cnRzIHx8IHJ0c2N0c2VuYWJsZSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOwogCWlmIChXTEFOX1JDX1BIWV80MChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKQEAgLTc3OCw2ICs3NjcsNDMgQEAKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3J0c2N0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWludCBpID0gMCwgcml4ID0gMCwgY2l4LCBlbmFibGVfZ19wcm90ZWN0aW9uID0gMDsKKworCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7CisJCQlyaXggPSByYXRlc1tpXS5pZHg7CisJCQlicmVhazsKKwkJfQorCX0KKwljaXggPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0uY3RybF9yYXRlOworCisJLyogQWxsIHByb3RlY3Rpb24gZnJhbWVzIGFyZSB0cmFuc21pdGVkIGF0IDJNYi9zIGZvciA4MDIuMTFnLAorCSAqIG90aGVyd2lzZSB3ZSB0cmFuc21pdCB0aGVtIGF0IDFNYi9zICovCisJaWYgKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgIWNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWVuYWJsZV9nX3Byb3RlY3Rpb24gPSAxOworCisJLyoKKwkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKKwkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KKwkgKi8KKwlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1BST1RFQ1RfRU5BQkxFKSAmJgorCSAgICAhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCisJICAgIChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5ID09IFdMQU5fUkNfUEhZX09GRE0gfHwKKwkgICAgIFdMQU5fUkNfUEhZX0hUKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkpKSkgeworCQlyYXRlc1swXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUOworCQljaXggPSByYXRlX3RhYmxlLT5pbmZvW2VuYWJsZV9nX3Byb3RlY3Rpb25dLmN0cmxfcmF0ZTsKKwl9CisKKwl0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHggPSBjaXg7Cit9CisKIHN0YXRpYyB1OCBhdGhfcmNfcmF0ZV9nZXRpZHgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLApAQCAtODA5LDU0ICs4MzUsNTYgQEAKIAogc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVmaW5kKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKLQkJCSAgICBpbnQgbnVtX3RyaWVzLCBpbnQgbnVtX3JhdGVzLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywgaW50ICppc19wcm9iZSwKLQkJCSAgICBpbnQgaXNfcmV0cnkpCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCiB7Ci0JdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKIAlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKKwlpbnQgaXNfcHJvYmUgPSAwOwogCiAJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQlyaXggPSBhdGhfcmNfcmF0ZWZpbmRfaHQoc2MsIGF0aF9yY19wcml2LCByYXRlX3RhYmxlLCAxLAotCQkJCSBpc19wcm9iZSwgaXNfcmV0cnkpOworCXJpeCA9IGF0aF9yY19yYXRlZmluZF9odChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CiAJbnJpeCA9IHJpeDsKIAotCWlmICgqaXNfcHJvYmUpIHsKKwlpZiAoaXNfcHJvYmUpIHsKIAkJLyogc2V0IG9uZSB0cnkgZm9yIHByb2JlIHJhdGVzLiBGb3IgdGhlCiAJCSAqIHByb2JlcyBkb24ndCBlbmFibGUgcnRzICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCAxLCBucml4LCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgMSwgbnJpeCwgMCk7CiAKLQkJdHJ5X3Blcl9yYXRlID0gKG51bV90cmllcy9udW1fcmF0ZXMpOworCQl0cnlfcGVyX3JhdGUgPSAoQVRIXzExTl9UWE1BWFRSWS80KTsKIAkJLyogR2V0IHRoZSBuZXh0IHRyaWVkL2FsbG93ZWQgcmF0ZS4gTm8gUlRTIGZvciB0aGUgbmV4dCBzZXJpZXMKIAkJICogYWZ0ZXIgdGhlIHByb2JlIHJhdGUKIAkJICovCi0JCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsCi0JCQlhdGhfcmNfcHJpdiwgcmF0ZV90YWJsZSwgbnJpeCwgMSwgMCk7Ci0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKKwkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgdHJ5X3Blcl9yYXRlLCBucml4LCAwKTsKIAl9IGVsc2UgewotCQl0cnlfcGVyX3JhdGUgPSAobnVtX3RyaWVzL251bV9yYXRlcyk7CisJCXRyeV9wZXJfcmF0ZSA9IChBVEhfMTFOX1RYTUFYVFJZLzQpOwogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpKytdLCB0eHJjLAorCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIG90aGVyIHJhdGVzIGZvciBtdWx0aXJhdGUgcmV0cnkgKi8KLQlmb3IgKCA7IGkgPCBudW1fcmF0ZXM7IGkrKykgeworCWZvciAoIDsgaSA8IDQ7IGkrKykgewogCQl1OCB0cnlfbnVtOwogCQl1OCBtaW5fcmF0ZTsKIAotCQl0cnlfbnVtID0gKChpICsgMSkgPT0gbnVtX3JhdGVzKSA/Ci0JCQludW1fdHJpZXMgLSAodHJ5X3Blcl9yYXRlICogaSkgOiB0cnlfcGVyX3JhdGUgOwotCQltaW5fcmF0ZSA9ICgoKGkgKyAxKSA9PSBudW1fcmF0ZXMpICYmIDApOworCQl0cnlfbnVtID0gKChpICsgMSkgPT0gNCkgPworCQkJQVRIXzExTl9UWE1BWFRSWSAtICh0cnlfcGVyX3JhdGUgKiBpKSA6IHRyeV9wZXJfcmF0ZSA7CisJCW1pbl9yYXRlID0gKCgoaSArIDEpID09IDQpICYmIDApOwogCiAJCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsIGF0aF9yY19wcml2LAogCQkJCQkgIHJhdGVfdGFibGUsIG5yaXgsIDEsIG1pbl9yYXRlKTsKIAkJLyogQWxsIG90aGVyIHJhdGVzIGluIHRoZSBzZXJpZXMgaGF2ZSBSVFMgZW5hYmxlZCAqLwotCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsCi0JCQkJICAgICAgICZyYXRlc1tpXSwgdHJ5X251bSwgbnJpeCwgMSk7CisJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2ldLCB0eHJjLAorCQkJCSAgICAgICB0cnlfbnVtLCBucml4LCAxKTsKIAl9CiAKIAkvKgpAQCAtODc1LDcgKzkwMyw3IEBACiAJICogYWJvdmUgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopICYmCi0JICAgIChzYy0+aHctPmNvbmYuaHQuZW5hYmxlZCkpIHsKKwkgICAgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpKSB7CiAJCXU4IGRvdDExcmF0ZSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5kb3QxMXJhdGU7CiAJCXU4IHBoeSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5waHk7CiAJCWlmIChpID09IDQgJiYKQEAgLTg4NSw2ICs5MTMsMjQgQEAKIAkJCXJhdGVzWzNdLmZsYWdzID0gcmF0ZXNbMl0uZmxhZ3M7CiAJCX0KIAl9CisKKwkvKgorCSAqIEZvcmNlIGhhcmR3YXJlIHRvIHVzZSBjb21wdXRlZCBkdXJhdGlvbiBmb3IgbmV4dAorCSAqIGZyYWdtZW50IGJ5IGRpc2FibGluZyBtdWx0aS1yYXRlIHJldHJ5LCB3aGljaAorCSAqIHVwZGF0ZXMgZHVyYXRpb24gYmFzZWQgb24gdGhlIG11bHRpLXJhdGUgZHVyYXRpb24gdGFibGUuCisJICoKKwkgKiBGSVhNRTogRml4IGR1cmF0aW9uCisJICovCisJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKKwkgICAgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSB8fAorCSAgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpKSB7CisJCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7CisJCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7CisJCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOworCX0KKworCS8qIFNldHVwIFJUUy9DVFMgKi8KKwlhdGhfcmNfcmF0ZV9zZXRfcnRzY3RzKHNjLCByYXRlX3RhYmxlLCB0eF9pbmZvKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoX3JjX3VwZGF0ZV9wZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCkBAIC0xMjIxLDYgKzEyNjcsOSBAQAogCQlhdGhfcmNfcHJpdi0+cGVyX2Rvd25fdGltZSA9IG5vd19tc2VjOwogCX0KIAorCWF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc2MsIHR4X3JhdGUsIHhyZXRyaWVzLCByZXRyaWVzLAorCQkJICAgICAgIGF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIpOworCiAjdW5kZWYgQ0hLX1JTU0kKIH0KIApAQCAtMTMzOCwzNiArMTM4NywxOCBAQAogc3RhdGljIHZvaWQgYXRoX3JjX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQogewotCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IE5VTEw7CiAJc3RydWN0IGF0aF9yYXRlc2V0ICpyYXRlc2V0ID0gJmF0aF9yY19wcml2LT5uZWdfcmF0ZXM7CiAJdTggKmh0X21jcyA9ICh1OCAqKSZhdGhfcmNfcHJpdi0+bmVnX2h0X3JhdGVzOwogCXU4IGksIGosIGssIGhpID0gMCwgaHRoaSA9IDA7CiAKLQkvKiBGSVhNRTogQWRob2MgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKLQkJYm9vbCBpc19jd180MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKLQkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKLQkJCQkJCSAgIGlzX2N3XzQwKTsKLQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KLQkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQl9Ci0KIAlpZiAoIXJhdGVfdGFibGUpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlJhdGUgdGFibGUgbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJYXRoX3JjX3ByaXYtPmh0X2NhcCA9IChXTEFOX1JDX0hUX0ZMQUcgfCBXTEFOX1JDX0RTX0ZMQUcpOwotCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCi0JCQlhdGhfcmNfcHJpdi0+aHRfY2FwIHw9IFdMQU5fUkNfNDBfRkxBRzsKLQl9Ci0KIAkvKiBJbml0aWFsIHJhdGUgdGFibGUgc2l6ZS4gV2lsbCBjaGFuZ2UgZGVwZW5kaW5nCiAJICogb24gdGhlIHdvcmtpbmcgcmF0ZSBzZXQgKi8KIAlhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZV9zaXplID0gUkFURV9UQUJMRV9TSVpFOwpAQCAtMTM4Nyw3ICsxNDE4LDcgQEAKIAkJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWlkeFtpXVtqXSA9IDA7CiAJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWNudFtpXSA9IDA7CiAJfQotCWF0aF9yY19wcml2LT5yY19waHlfbW9kZSA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKTsKKwlhdGhfcmNfcHJpdi0+cmNfcGh5X21vZGUgPSBhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHOwogCiAJLyogU2V0IHN0cmVhbSBjYXBhYmlsaXR5ICovCiAJYXRoX3JjX3ByaXYtPnNpbmdsZV9zdHJlYW0gPSAoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykgPyAwIDogMTsKQEAgLTEzOTUsMTYgKzE0MjYsMTYgQEAKIAlpZiAoIXJhdGVzZXQtPnJzX25yYXRlcykgewogCQkvKiBObyB3b3JraW5nIHJhdGUsIGp1c3QgaW5pdGlhbGl6ZSB2YWxpZCByYXRlcyAqLwogCQloaSA9IGF0aF9yY19pbml0X3ZhbGlkcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgIGF0aF9yY19wcml2LT5odF9jYXApOwogCX0gZWxzZSB7CiAJCS8qIFVzZSBpbnRlcnNlY3Rpb24gb2Ygd29ya2luZyByYXRlcyBhbmQgdmFsaWQgcmF0ZXMgKi8KIAkJaGkgPSBhdGhfcmNfc2V0dmFsaWRfcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICByYXRlc2V0LCBhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgcmF0ZXNldCwgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCWlmIChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19IVF9GTEFHKSB7CiAJCQlodGhpID0gYXRoX3JjX3NldHZhbGlkX2h0cmF0ZXMoYXRoX3JjX3ByaXYsCi0JCQkJCQkJICAgcmF0ZV90YWJsZSwKLQkJCQkJCQkgICBodF9tY3MsCi0JCQkJCQkJICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CisJCQkJCQkgICAgICAgcmF0ZV90YWJsZSwKKwkJCQkJCSAgICAgICBodF9tY3MsCisJCQkJCQkgICAgICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCX0KIAkJaGkgPSBBX01BWChoaSwgaHRoaSk7CiAJfQpAQCAtMTQzMiw5ICsxNDYzLDM0IEBACiAJYXRoX3JjX3NvcnRfdmFsaWRyYXRlcyhyYXRlX3RhYmxlLCBhdGhfcmNfcHJpdik7CiAJYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2stNF07CiAJc2MtPmN1cl9yYXRlX3RhYmxlID0gcmF0ZV90YWJsZTsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiUkMgSW5pdGlhbGl6ZWQgd2l0aCBjYXBhYmlsaXRpZXM6IDB4JXhcbiIsCisJCWF0aF9yY19wcml2LT5odF9jYXApOwogfQogCi0vKiBSYXRlIENvbnRyb2wgY2FsbGJhY2tzICovCitzdGF0aWMgdTggYXRoX3JjX2J1aWxkX2h0X2NhcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgaXNfaHQsIGJvb2wgaXNfY3c0MCwKKwkJCSAgICAgICBib29sIGlzX3NnaTQwKQoreworCXU4IGNhcHMgPSAwOworCisJaWYgKGlzX2h0KSB7CisJCWNhcHMgPSBXTEFOX1JDX0hUX0ZMQUc7CisJCWlmIChzYy0+c2NfYWgtPmNhcHMudHhfY2hhaW5tYXNrICE9IDEgJiYKKwkJICAgIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfRFMsIDAsIE5VTEwpKQorCQkJY2FwcyB8PSBXTEFOX1JDX0RTX0ZMQUc7CisJCWlmIChpc19jdzQwKQorCQkJY2FwcyB8PSBXTEFOX1JDXzQwX0ZMQUc7CisJCWlmIChpc19zZ2k0MCkKKwkJCWNhcHMgfD0gV0xBTl9SQ19TR0lfRkxBRzsKKwl9CisKKwlyZXR1cm4gY2FwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWFjODAyMTEgUmF0ZSBDb250cm9sIGNhbGxiYWNrcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBhdGhfdHhfc3RhdHVzKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjcsNyArMTUyMyw3IEBACiAJICovCiAJaWYgKHR4X2luZm9fcHJpdi0+dHgudHNfZmxhZ3MgJgogCSAgICAoQVRIOUtfVFhfREFUQV9VTkRFUlJVTiB8IEFUSDlLX1RYX0RFTElNX1VOREVSUlVOKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfdHhUcmlnTGV2ZWwpID49IGF0aF9yY19wcml2LT50eF90cmlnbGV2ZWxfbWF4KSkgeworCSAgICAoKHNjLT5zY19haC0+dHhfdHJpZ19sZXZlbCkgPj0gYXRoX3JjX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXgpKSB7CiAJCXR4X3N0YXR1cyA9IDE7CiAJCWlzX3VuZGVycnVuID0gMTsKIAl9CkBAIC0xNDgwLDYgKzE1MzYsMjMgQEAKIAkJCSAoaXNfdW5kZXJydW4pID8gQVRIXzExTl9UWE1BWFRSWSA6CiAJCQkgdHhfaW5mb19wcml2LT50eC50c19sb25ncmV0cnkpOwogCisJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYKKwkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQl1OCAqcWMsIHRpZDsKKwkJCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwkJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwkJCWlmKGF0aF90eF9hZ2dyX2NoZWNrKHNjLCBhbiwgdGlkKSkKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzYy0+aHcsIGhkci0+YWRkcjEsIHRpZCk7CisJCX0KKwl9CisKKwlhdGhfZGVidWdfc3RhdF9yYyhzYywgc2tiKTsKIGV4aXQ6CiAJa2ZyZWUodHhfaW5mb19wcml2KTsKIH0KQEAgLTE0OTAsMTEgKzE1NjMsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gdHhyYy0+c2JhbmQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IGlzX3Byb2JlID0gMDsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCiAJLyogbG93ZXN0IHJhdGUgZm9yIG1hbmFnZW1lbnQgYW5kIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzICovCkBAIC0xNTA3LDIzICsxNTc4LDcgQEAKIAl9CiAKIAkvKiBGaW5kIHR4IHJhdGUgZm9yIHVuaWNhc3QgZnJhbWVzICovCi0JYXRoX3JjX3JhdGVmaW5kKHNjLCBhdGhfcmNfcHJpdiwgQVRIXzExTl9UWE1BWFRSWSwgNCwKLQkJCXR4X2luZm8sICZpc19wcm9iZSwgZmFsc2UpOwotCi0JLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCi0JaWYgKGh3LT5jb25mLmh0LmVuYWJsZWQpIHsKLQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCXU4ICpxYywgdGlkOwotCQkJc3RydWN0IGF0aF9ub2RlICphbjsKLQotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCQkJaWYoYXRoX3R4X2FnZ3JfY2hlY2soc2MsIGFuLCB0aWQpKQotCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKGh3LCBoZHItPmFkZHIxLCB0aWQpOwotCQl9Ci0JfQorCWF0aF9yY19yYXRlZmluZChzYywgYXRoX3JjX3ByaXYsIHR4cmMpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9pbml0KHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLApAQCAtMTUzMSw2ICsxNTg2LDggQEAKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CiAJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIGlzX2N3NDAsIGlzX3NnaTQwOwogCWludCBpLCBqID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CkBAIC0xNTUyLDEyICsxNjA5LDcyIEBACiAJCWF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAl9CiAKLQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEpOworCWlzX2N3NDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwlpc19zZ2k0MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCisJLyogQ2hvb3NlIHJhdGUgdGFibGUgZmlyc3QgKi8KKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkgeworCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIGlzX2N3NDApOworCX0gZWxzZSBpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJLyogY3VyX3JhdGVfdGFibGUgd291bGQgYmUgc2V0IG9uIGluaXQgdGhyb3VnaCBjb25maWcoKSAqLworCQlyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOworCX0KKworCWF0aF9yY19wcml2LT5odF9jYXAgPSBhdGhfcmNfYnVpbGRfaHRfY2FwcyhzYywgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkLAorCQkJCQkJICAgaXNfY3c0MCwgaXNfc2dpNDApOworCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9yYXRlX3VwZGF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIG9wZXJfY3c0MCA9IGZhbHNlLCBvcGVyX3NnaTQwOworCWJvb2wgbG9jYWxfY3c0MCA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKwlib29sIGxvY2FsX3NnaTQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKworCS8qIEZJWE1FOiBIYW5kbGUgQVAgbW9kZSBsYXRlciB3aGVuIHdlIHN1cHBvcnQgQ1dNICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuOworCisJCWlmIChzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKKwkJICAgIHNjLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJb3Blcl9jdzQwID0gdHJ1ZTsKKworCQlvcGVyX3NnaTQwID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQl0cnVlIDogZmFsc2U7CisKKwkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIG9wZXJfY3c0MCk7CisJCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsCisJCQkJCQkgICBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQsCisJCQkJCQkgICBvcGVyX2N3NDAsIG9wZXJfc2dpNDApOworCQkJYXRoX3JjX2luaXQoc2MsIHByaXZfc3RhLCBzYmFuZCwgc3RhLCByYXRlX3RhYmxlKTsKKworCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCQkJIk9wZXJhdGluZyBIVCBCYW5kd2lkdGggY2hhbmdlZCB0bzogJWRcbiIsCisJCQkJc2MtPmh3LT5jb25mLmNoYW5uZWxfdHlwZSk7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyB2b2lkICphdGhfcmF0ZV9hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpcikKIHsKLQlyZXR1cm4gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXJldHVybiBhcGh5LT5zYzsKIH0KIAogc3RhdGljIHZvaWQgYXRoX3JhdGVfZnJlZSh2b2lkICpwcml2KQpAQCAtMTU3OCw3ICsxNjk1LDcgQEAKIAl9CiAKIAlyYXRlX3ByaXYtPnJzc2lfZG93bl90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQlyYXRlX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXggPSBzYy0+c2NfYWgtPmFoX2NhcHMudHhfdHJpZ2xldmVsX21heDsKKwlyYXRlX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXggPSBzYy0+c2NfYWgtPmNhcHMudHhfdHJpZ2xldmVsX21heDsKIAogCXJldHVybiByYXRlX3ByaXY7CiB9CkBAIC0xNTk2LDQxICsxNzEzLDEzIEBACiAJLnR4X3N0YXR1cyA9IGF0aF90eF9zdGF0dXMsCiAJLmdldF9yYXRlID0gYXRoX2dldF9yYXRlLAogCS5yYXRlX2luaXQgPSBhdGhfcmF0ZV9pbml0LAorCS5yYXRlX3VwZGF0ZSA9IGF0aF9yYXRlX3VwZGF0ZSwKIAkuYWxsb2MgPSBhdGhfcmF0ZV9hbGxvYywKIAkuZnJlZSA9IGF0aF9yYXRlX2ZyZWUsCiAJLmFsbG9jX3N0YSA9IGF0aF9yYXRlX2FsbG9jX3N0YSwKIAkuZnJlZV9zdGEgPSBhdGhfcmF0ZV9mcmVlX3N0YSwKIH07CiAKLXN0YXRpYyB2b2lkIGF0aF9zZXR1cF9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0JCXJhdGVfdGFibGUtPnJhdGVDb2RlVG9JbmRleFtpXSA9ICh1OCktMTsKLQotCWZvciAoaSA9IDA7IGkgPCByYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7Ci0JCXU4IGNvZGUgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVjb2RlOwotCQl1OCBjaXggPSByYXRlX3RhYmxlLT5pbmZvW2ldLmN0cmxfcmF0ZTsKLQkJdTggc2ggPSByYXRlX3RhYmxlLT5pbmZvW2ldLnNob3J0X3ByZWFtYmxlOwotCi0JCXJhdGVfdGFibGUtPnJhdGVDb2RlVG9JbmRleFtjb2RlXSA9IGk7Ci0JCXJhdGVfdGFibGUtPnJhdGVDb2RlVG9JbmRleFtjb2RlIHwgc2hdID0gaTsKLQotCQlyYXRlX3RhYmxlLT5pbmZvW2ldLmxwQWNrRHVyYXRpb24gPQotCQkJYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICBXTEFOX0NUUkxfRlJBTUVfU0laRSwKLQkJCQkJICAgICAgIGNpeCwKLQkJCQkJICAgICAgIGZhbHNlKTsKLQkJcmF0ZV90YWJsZS0+aW5mb1tpXS5zcEFja0R1cmF0aW9uID0KLQkJCWF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLAotCQkJCQkgICAgICAgV0xBTl9DVFJMX0ZSQU1FX1NJWkUsCi0JCQkJCSAgICAgICBjaXgsCi0JCQkJCSAgICAgICB0cnVlKTsKLQl9Ci19Ci0KIHZvaWQgYXRoX3JhdGVfYXR0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFCXSA9CkBAIC0xNjUxLDEyICsxNzQwLDYgQEAKIAkJJmFyNTQxNl8xMW5nX3JhdGV0YWJsZTsKIAlzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTXSA9CiAJCSZhcjU0MTZfMTFuZ19yYXRldGFibGU7Ci0KLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMWJfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMWFfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMWdfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMW5hX3JhdGV0YWJsZSk7Ci0JYXRoX3NldHVwX3JhdGVfdGFibGUoc2MsICZhcjU0MTZfMTFuZ19yYXRldGFibGUpOwogfQogCiBpbnQgYXRoX3JhdGVfY29udHJvbF9yZWdpc3Rlcih2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmgKaW5kZXggOTdjNjBkMS4uZGI5YjBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5oCkBAIC0xOSwxMyArMTksMTIgQEAKICNpZm5kZWYgUkNfSAogI2RlZmluZSBSQ19ICiAKLSNpbmNsdWRlICJhdGg5ay5oIgotCiBzdHJ1Y3QgYXRoX3NvZnRjOwogCiAjZGVmaW5lIEFUSF9SQVRFX01BWCAgICAgMzAKICNkZWZpbmUgUkFURV9UQUJMRV9TSVpFICA2NAogI2RlZmluZSBNQVhfVFhfUkFURV9QSFkgIDQ4CisjZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQogCiAvKiBWQUxJRF9BTEwgLSB2YWxpZCBmb3IgMjAvNDAvTGVnYWN5LAogICogVkFMSUQgLSBMZWdhY3kgb25seSwKQEAgLTM5LDYgKzM4LDIwIEBACiAjZGVmaW5lIFZBTElEXzIwNDAgKFZBTElEXzIwfFZBTElEXzQwKQogI2RlZmluZSBWQUxJRF9BTEwgIChWQUxJRF8yMDQwfFZBTElEKQogCitlbnVtIHsKKwlXTEFOX1JDX1BIWV9PRkRNLAorCVdMQU5fUkNfUEhZX0NDSywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9EUywKKwlXTEFOX1JDX1BIWV9IVF80MF9TUywKKwlXTEFOX1JDX1BIWV9IVF80MF9EUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCisJV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAorCVdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSwKKwlXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksCisJV0xBTl9SQ19QSFlfTUFYCit9OworCiAjZGVmaW5lIFdMQU5fUkNfUEhZX0RTKF9waHkpICAgKChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTKQkJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKQlcCkBAIC05MCw3ICsxMDMsNiBAQAogICovCiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgewogCWludCByYXRlX2NudDsKLQl1OCByYXRlQ29kZVRvSW5kZXhbMjU2XTsKIAlzdHJ1Y3QgewogCQlpbnQgdmFsaWQ7CiAJCWludCB2YWxpZF9zaW5nbGVfc3RyZWFtOwpAQCAtMTA4LDggKzEyMCw2IEBACiAJCXU4IHNnaV9pbmRleDsKIAkJdTggaHRfaW5kZXg7CiAJCXUzMiBtYXhfNG1zX2ZyYW1lbGVuOwotCQl1MTYgbHBBY2tEdXJhdGlvbjsKLQkJdTE2IHNwQWNrRHVyYXRpb247CiAJfSBpbmZvW1JBVEVfVEFCTEVfU0laRV07CiAJdTMyIHByb2JlX2ludGVydmFsOwogCXUzMiByc3NpX3JlZHVjZV9pbnRlcnZhbDsKQEAgLTE4NCwxMSArMTk0LDE5IEBACiAJc3RydWN0IGF0aF9yYXRlX3NvZnRjICphc2M7CiB9OwogCitlbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgeworCUFUSDlLX05PVF9JTlRFUk5BTCwKKwlBVEg5S19JTlRfUEFVU0UsCisJQVRIOUtfSU5UX1VOUEFVU0UKK307CisKIHN0cnVjdCBhdGhfdHhfaW5mb19wcml2IHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OwogCWludCBuX2ZyYW1lczsKIAlpbnQgbl9iYWRfZnJhbWVzOwogCWJvb2wgdXBkYXRlX3JjOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOwogfTsKIAogI2RlZmluZSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYwppbmRleCA0NjJlMDhjLi4wYmJhMTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVjdi5jCkBAIC0xNCw3ICsxNCwyOCBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2h3ICogYXRoX2dldF92aXJ0X2h3KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+cHJpX3dpcGh5LT5odzsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoaGRyLT5hZGRyMSwgYXBoeS0+aHctPndpcGh5LT5wZXJtX2FkZHIpCisJCSAgICA9PSAwKSB7CisJCQlodyA9IGFwaHktPmh3OworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gaHc7Cit9CiAKIC8qCiAgKiBTZXR1cCBhbmQgbGluayBkZXNjcmlwdG9ycy4KQEAgLTI2LDcgKzQ3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgYXRoX3J4X2J1Zl9saW5rKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfZGVzYyAqZHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtNzksNyArMTAwLDcgQEAKIAlyZXR1cm4gKHRzZiAmIH4weDdmZmYpIHwgcnN0YW1wOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGxlbikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXRoX3J4YnVmX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MzIgbGVuLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUzMiBvZmY7CkBAIC05NywxMSArMTE4LDExIEBACiAJICogVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHdlIG1heSBnZXQgOCBLQiBoZXJlIGZyb20gdGhlCiAJICoga2VybmVsLi4uIGFuZCB0aGF0IGlzIGFjdHVhbGx5IHdoYXQgaXMgb2JzZXJ2ZWQgb24gc29tZQogCSAqIHN5c3RlbXMgOiggKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIHNjLT5zY19jYWNoZWxzeiAtIDEpOworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4gKyBzYy0+Y2FjaGVsc3ogLSAxLCBnZnBfbWFzayk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7Ci0JCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIHNjLT5zY19jYWNoZWxzejsKKwkJb2ZmID0gKCh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEpICUgc2MtPmNhY2hlbHN6OwogCQlpZiAob2ZmICE9IDApCi0JCQlza2JfcmVzZXJ2ZShza2IsIHNjLT5zY19jYWNoZWxzeiAtIG9mZik7CisJCQlza2JfcmVzZXJ2ZShza2IsIHNjLT5jYWNoZWxzeiAtIG9mZik7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJza2J1ZmYgYWxsb2Mgb2Ygc2l6ZSAldSBmYWlsZWRcbiIsIGxlbik7CkBAIC0xMjMsMTAgKzE0NCwxMiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTggcmF0ZWNvZGU7CiAJX19sZTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCW1lbXNldChyeF9zdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykpOworCWh3ID0gYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpOwogCiAJaWYgKGRzLT5kc19yeHN0YXQucnNfbW9yZSkgewogCQkvKgpAQCAtMTM1LDcgKzE1OCw3IEBACiAJCSAqIGRpc2NhcmQgdGhlIGZyYW1lLiBFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBzZWUKIAkJICogZXJyb3IgZnJhbWVzIGluIE1vbml0b3IgbW9kZS4KIAkJICovCi0JCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJCWdvdG8gcnhfbmV4dDsKIAl9IGVsc2UgaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICE9IDApIHsKIAkJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfQ1JDKQpAQCAtMTYxLDcgKzE4NCw3IEBACiAJCSAqIGRlY3J5cHRpb24gYW5kIE1JQyBmYWlsdXJlcy4gRm9yIG1vbml0b3IgbW9kZSwKIAkJICogd2UgYWxzbyBpZ25vcmUgdGhlIENSQyBlcnJvci4KIAkJICovCi0JCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCQlpZiAoZHMtPmRzX3J4c3RhdC5yc19zdGF0dXMgJgogCQkJICAgIH4oQVRIOUtfUlhFUlJfREVDUllQVCB8IEFUSDlLX1JYRVJSX01JQyB8CiAJCQkgICAgICBBVEg5S19SWEVSUl9DUkMpKQpAQCAtMTg2LDcgKzIwOSw2IEBACiAJCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSByYXRlY29kZSAmIDB4N2Y7CiAJfSBlbHNlIHsKIAkJaW50IGkgPSAwLCBjdXJfYmFuZCwgbl9yYXRlczsKLQkJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAKIAkJY3VyX2JhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOwogCQluX3JhdGVzID0gc2MtPnNiYW5kc1tjdXJfYmFuZF0ubl9iaXRyYXRlczsKQEAgLTIwOCw5ICsyMzAsOSBAQAogCX0KIAogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IGF0aF9leHRlbmRfdHNmKHNjLCBkcy0+ZHNfcnhzdGF0LnJzX3RzdGFtcCk7Ci0Jcnhfc3RhdHVzLT5iYW5kID0gc2MtPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0Jcnhfc3RhdHVzLT5mcmVxID0gIHNjLT5ody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKLQlyeF9zdGF0dXMtPm5vaXNlID0gc2MtPnNjX2FuaS5zY19ub2lzZV9mbG9vcjsKKwlyeF9zdGF0dXMtPmJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOworCXJ4X3N0YXR1cy0+ZnJlcSA9IGh3LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCXJ4X3N0YXR1cy0+bm9pc2UgPSBzYy0+YW5pLm5vaXNlX2Zsb29yOwogCXJ4X3N0YXR1cy0+c2lnbmFsID0gcnhfc3RhdHVzLT5ub2lzZSArIGRzLT5kc19yeHN0YXQucnNfcnNzaTsKIAlyeF9zdGF0dXMtPmFudGVubmEgPSBkcy0+ZHNfcnhzdGF0LnJzX2FudGVubmE7CiAKQEAgLTIzMyw3ICsyNTUsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGhfb3Btb2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXUzMiByZmlsdCwgbWZpbHRbMl07CiAKIAkvKiBjb25maWd1cmUgcnggZmlsdGVyICovCkBAIC0yNDEsMTQgKzI2MywxNCBAQAogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCByZmlsdCk7CiAKIAkvKiBjb25maWd1cmUgYnNzaWQgbWFzayAqLwotCWlmIChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKLQkJYXRoOWtfaHdfc2V0YnNzaWRtYXNrKGFoLCBzYy0+c2NfYnNzaWRtYXNrKTsKKwlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCisJCWF0aDlrX2h3X3NldGJzc2lkbWFzayhzYyk7CiAKIAkvKiBjb25maWd1cmUgb3BlcmF0aW9uYWwgbW9kZSAqLwogCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7CiAKIAkvKiBIYW5kbGUgYW55IGxpbmstbGV2ZWwgYWRkcmVzcyBjaGFuZ2UuICovCi0JYXRoOWtfaHdfc2V0bWFjKGFoLCBzYy0+c2NfbXlhZGRyKTsKKwlhdGg5a19od19zZXRtYWMoYWgsIHNjLT5zY19haC0+bWFjYWRkcik7CiAKIAkvKiBjYWxjdWxhdGUgYW5kIGluc3RhbGwgbXVsdGljYXN0IGZpbHRlciAqLwogCW1maWx0WzBdID0gbWZpbHRbMV0gPSB+MDsKQEAgLTI2NywxMSArMjg5LDExIEBACiAJCXNwaW5fbG9ja19pbml0KCZzYy0+cngucnhidWZsb2NrKTsKIAogCQlzYy0+cnguYnVmc2l6ZSA9IHJvdW5kdXAoSUVFRTgwMjExX01BWF9NUERVX0xFTiwKLQkJCQkJICAgbWluKHNjLT5zY19jYWNoZWxzeiwKKwkJCQkJICAgbWluKHNjLT5jYWNoZWxzeiwKIAkJCQkJICAgICAgICh1MTYpNjQpKTsKIAogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgImNhY2hlbHN6ICV1IHJ4YnVmc2l6ZSAldVxuIiwKLQkJCXNjLT5zY19jYWNoZWxzeiwgc2MtPnJ4LmJ1ZnNpemUpOworCQkJc2MtPmNhY2hlbHN6LCBzYy0+cnguYnVmc2l6ZSk7CiAKIAkJLyogSW5pdGlhbGl6ZSByeCBkZXNjcmlwdG9ycyAqLwogCkBAIC0yODQsMjIgKzMwNiwyMiBAQAogCQl9CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShiZiwgJnNjLT5yeC5yeGJ1ZiwgbGlzdCkgewotCQkJc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSk7CisJCQlza2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCWVycm9yID0gLUVOT01FTTsKIAkJCQlicmVhazsKIAkJCX0KIAogCQkJYmYtPmJmX21wZHUgPSBza2I7Ci0JCQliZi0+YmZfYnVmX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwgc2tiLT5kYXRhLAorCQkJYmYtPmJmX2J1Zl9hZGRyID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLAogCQkJCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsCisJCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwKIAkJCQkgIGJmLT5iZl9idWZfYWRkcikpKSB7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWCBpbml0XG4iKTsKKwkJCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlggaW5pdFxuIik7CiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzYwLDI2ICszODIsMzkgQEAKIAkJfCBBVEg5S19SWF9GSUxURVJfTUNBU1Q7CiAKIAkvKiBJZiBub3QgYSBTVEEsIGVuYWJsZSBwcm9jZXNzaW5nIG9mIFByb2JlIFJlcXVlc3RzICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJaWYgKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QUk9CRVJFUTsKIAotCS8qIENhbid0IHNldCBIT1NUQVAgaW50byBwcm9taXNjb3VzIG1vZGUgKi8KLQlpZiAoKChzYy0+c2NfYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgJiYKKwkvKgorCSAqIFNldCBwcm9taXNjdW91cyBtb2RlIHdoZW4gRklGX1BST01JU0NfSU5fQlNTIGlzIGVuYWJsZWQgZm9yIHN0YXRpb24KKwkgKiBtb2RlIGludGVyZmFjZSBvciB3aGVuIGluIG1vbml0b3IgbW9kZS4gQVAgbW9kZSBkb2VzIG5vdCBuZWVkIHRoaXMKKwkgKiBzaW5jZSBpdCByZWNlaXZlcyBhbGwgaW4tQlNTIGZyYW1lcyBhbnl3YXkuCisJICovCisJaWYgKCgoc2MtPnNjX2FoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCiAJICAgICAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX1BST01JU0NfSU5fQlNTKSkgfHwKLQkgICAgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpKSB7CisJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX1BST007Ci0JCS8qID8/PyBUbyBwcmV2ZW50IGZyb20gc2VuZGluZyBBQ0sgKi8KLQkJcmZpbHQgJj0gfkFUSDlLX1JYX0ZJTFRFUl9VQ0FTVDsKLQl9CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX0NPTlRST0wpCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9DT05UUk9MOworCisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgorCSAgICAhKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSkKKwkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX01ZQkVBQ09OOworCWVsc2UKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX0JFQUNPTjsKIAotCS8qIElmIGluIEhPU1RBUCBtb2RlLCB3YW50IHRvIGVuYWJsZSByZWNlcHRpb24gb2YgUFNQT0xMIGZyYW1lcwotCSAgICYgYmVhY29uIGZyYW1lcyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmZpbHQgfD0gKEFUSDlLX1JYX0ZJTFRFUl9CRUFDT04gfCBBVEg5S19SWF9GSUxURVJfUFNQT0xMKTsKKwkvKiBJZiBpbiBIT1NUQVAgbW9kZSwgd2FudCB0byBlbmFibGUgcmVjZXB0aW9uIG9mIFBTUE9MTCBmcmFtZXMgKi8KKwlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QU1BPTEw7CisKKwlpZiAoc2MtPnNlY193aXBoeSkgeworCQkvKiBUT0RPOiBvbmx5IG5lZWRlZCBpZiBtb3JlIHRoYW4gb25lIEJTU0lEIGlzIGluIHVzZSBpbgorCQkgKiBzdGF0aW9uL2FkaG9jIG1vZGUgKi8KKwkJLyogVE9ETzogZm9yIG9sZGVyIGNoaXBzLCBtYXkgbmVlZCB0byBhZGQgQVRIOUtfUlhfRklMVEVSX1BST00KKwkJICovCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEw7CisJfQogCiAJcmV0dXJuIHJmaWx0OwogCkBAIC0zODgsNyArNDIzLDcgQEAKIAogaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfYnVmICpiZiwgKnRiZjsKIAogCXNwaW5fbG9ja19iaCgmc2MtPnJ4LnJ4YnVmbG9jayk7CkBAIC00MTgsMTMgKzQ1MywxMiBAQAogCiBib29sIGF0aF9zdG9wcmVjdihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJYm9vbCBzdG9wcGVkOwogCiAJYXRoOWtfaHdfc3RvcHBjdXJlY3YoYWgpOwogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCAwKTsKIAlzdG9wcGVkID0gYXRoOWtfaHdfc3RvcGRtYXJlY3YoYWgpOwotCW1kZWxheSgzKTsgLyogM21zIGlzIGxvbmcgZW5vdWdoIGZvciAxIGZyYW1lICovCiAJc2MtPnJ4LnJ4bGluayA9IE5VTEw7CiAKIAlyZXR1cm4gc3RvcHBlZDsKQEAgLTQ0OSw3ICs0ODMsNyBAQAogCXN0cnVjdCBhdGhfZGVzYyAqZHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEwsICpyZXF1ZXVlX3NrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IGhkcmxlbiwgcGFkc2l6ZSwgcmV0dmFsOwogCWJvb2wgZGVjcnlwdF9lcnJvciA9IGZhbHNlOwpAQCAtNTI0LDkgKzU1OCw5IEBACiAJCSAqIDEuIGFjY2Vzc2luZyB0aGUgZnJhbWUKIAkJICogMi4gcmVxdWV1ZWluZyB0aGUgc2FtZSBidWZmZXIgdG8gaC93CiAJCSAqLwotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2MtPnBkZXYsIGJmLT5iZl9idWZfYWRkciwKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyLAogCQkJCXNjLT5yeC5idWZzaXplLAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJRE1BX0ZST01fREVWSUNFKTsKIAogCQkvKgogCQkgKiBJZiB3ZSdyZSBhc2tlZCB0byBmbHVzaCByZWNlaXZlIHF1ZXVlLCBkaXJlY3RseQpAQCAtNTQ3LDcgKzU4MSw3IEBACiAKIAkJLyogRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGFuIHNrYiB0byByZXF1ZXVlIG9uY2Ugd2UgYXJlIGRvbmUKIAkJICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBidWZmZXIncyBza2IgKi8KLQkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplKTsKKwkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplLCBHRlBfQVRPTUlDKTsKIAogCQkvKiBJZiB0aGVyZSBpcyBubyBtZW1vcnkgd2UgaWdub3JlIHRoZSBjdXJyZW50IFJYJ2QgZnJhbWUsCiAJCSAqIHRlbGwgaGFyZHdhcmUgaXQgY2FuIGdpdmUgdXMgYSBuZXcgZnJhbWUgdXNpbmcgdGhlIG9sZApAQCAtNTU3LDkgKzU5MSw5IEBACiAJCQlnb3RvIHJlcXVldWU7CiAKIAkJLyogVW5tYXAgdGhlIGZyYW1lICovCi0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9idWZfYWRkciwKKwkJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIsCiAJCQkJIHNjLT5yeC5idWZzaXplLAotCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCXNrYl9wdXQoc2tiLCBkcy0+ZHNfcnhzdGF0LnJzX2RhdGFsZW4pOwogCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQ09OVFJPTCk7CkBAIC01OTAsMjQgKzYyNCw1MiBAQAogCQkJICAgJiYgIWRlY3J5cHRfZXJyb3IgJiYgc2tiLT5sZW4gPj0gaGRybGVuICsgNCkgewogCQkJa2V5aXggPSBza2ItPmRhdGFbaGRybGVuICsgM10gPj4gNjsKIAotCQkJaWYgKHRlc3RfYml0KGtleWl4LCBzYy0+c2Nfa2V5bWFwKSkKKwkJCWlmICh0ZXN0X2JpdChrZXlpeCwgc2MtPmtleW1hcCkpCiAJCQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CiAJCX0KKwkJaWYgKGFoLT5zd19tZ210X2NyeXB0byAmJgorCQkgICAgKHJ4X3N0YXR1cy5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCisJCSAgICBpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkvKiBVc2Ugc29mdHdhcmUgZGVjcnlwdCBmb3IgbWFuYWdlbWVudCBmcmFtZXMuICovCisJCQlyeF9zdGF0dXMuZmxhZyAmPSB+UlhfRkxBR19ERUNSWVBURUQ7CisJCX0KIAogCQkvKiBTZW5kIHRoZSBmcmFtZSB0byBtYWM4MDIxMSAqLwotCQlfX2llZWU4MDIxMV9yeChzYy0+aHcsIHNrYiwgJnJ4X3N0YXR1cyk7CisJCWlmIChoZHItPmFkZHIxWzVdICYgMHgwMSkgeworCQkJaW50IGk7CisJCQkvKgorCQkJICogRGVsaXZlciBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lcyB0byBhbGwgc3VpdGFibGUKKwkJCSAqIHZpcnR1YWwgd2lwaHlzLgorCQkJICovCisJCQkvKiBUT0RPOiBmaWx0ZXIgYmFzZWQgb24gY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJCQlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQkJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQkJCXN0cnVjdCBza19idWZmICpuc2tiOworCQkJCWlmIChhcGh5ID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCQkJCW5za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQkJCWlmIChuc2tiKQorCQkJCQlfX2llZWU4MDIxMV9yeChhcGh5LT5odywgbnNrYiwKKwkJCQkJCSAgICAgICAmcnhfc3RhdHVzKTsKKwkJCX0KKwkJCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCAmcnhfc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERlbGl2ZXIgdW5pY2FzdCBmcmFtZXMgYmFzZWQgb24gcmVjZWl2ZXIgYWRkcmVzcyAqLworCQkJX19pZWVlODAyMTFfcngoYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpLCBza2IsCisJCQkJICAgICAgICZyeF9zdGF0dXMpOworCQl9CiAKIAkJLyogV2Ugd2lsbCBub3cgZ2l2ZSBoYXJkd2FyZSBvdXIgc2hpbnkgbmV3IGFsbG9jYXRlZCBza2IgKi8KIAkJYmYtPmJmX21wZHUgPSByZXF1ZXVlX3NrYjsKLQkJYmYtPmJmX2J1Zl9hZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHJlcXVldWVfc2tiLT5kYXRhLAorCQliZi0+YmZfYnVmX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCByZXF1ZXVlX3NrYi0+ZGF0YSwKIAkJCQkJIHNjLT5yeC5idWZzaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihzYy0+cGRldiwKKwkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LAogCQkJICBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQkJZGV2X2tmcmVlX3NrYl9hbnkocmVxdWV1ZV9za2IpOwogCQkJYmYtPmJmX21wZHUgPSBOVUxMOwogCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkJInBjaV9kbWFfbWFwcGluZ19lcnJvcigpIG9uIFJYXG4iKTsKKwkJCQkiZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWFxuIik7CiAJCQlicmVhazsKIAkJfQogCQliZi0+YmZfZG1hY29udGV4dCA9IGJmLT5iZl9idWZfYWRkcjsKQEAgLTYyMiw2ICs2ODQsMTIgQEAKIAkJfSBlbHNlIHsKIAkJCXNjLT5yeC5yeG90aGVyYW50ID0gMDsKIAkJfQorCisJCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJCQkoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQkVBQ09OKSkgeworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX05FVFdPUktfU0xFRVApOworCQl9CiByZXF1ZXVlOgogCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZzYy0+cngucnhidWYpOwogCQlhdGhfcnhfYnVmX2xpbmsoc2MsIGJmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnLmgKaW5kZXggOWZlZGI0OS4uZDg2ZTkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnLmgKQEAgLTY3LDcgKzY3LDcgQEAKICNkZWZpbmUgQVJfRE1BU0laRV81MTJCICAgICAgMHgwMDAwMDAwNwogCiAjZGVmaW5lIEFSX1RYQ0ZHICAgICAgICAgICAgIDB4MDAzMAotI2RlZmluZSBBUl9UWENGR19ETUFTWl9NQVNLICAweDAwMDAwMDAzCisjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaX01BU0sgIDB4MDAwMDAwMDcKICNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfNEIgICAgMAogI2RlZmluZSBBUl9UWENGR19ETUFTWl84QiAgICAxCiAjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaXzE2QiAgIDIKQEAgLTE1OCwxMyArMTU4LDYgQEAKICNkZWZpbmUgQVJfQ1NUX1RJTUVPVVRfTElNSVQgICAgICAweEZGRkYwMDAwCiAjZGVmaW5lIEFSX0NTVF9USU1FT1VUX0xJTUlUX1MgICAgMTYKIAotI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTEwMCAgICAgICAgICAgICAgICAgIDB4MDE0Ci0KLSNkZWZpbmUgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihfYWgpIFwKLQkoQVJfU1JFVl85MTAwKChfYWgpKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoX2FoKSkKLSNkZWZpbmUgQVJfU1JFVl81NDE2X1YyMl9PUl9MQVRFUihfYWgpIFwKLQkoQVJfU1JFVl85MTAwKChfYWgpKSB8fCBBUl9TUkVWXzU0MTZfMjJfT1JfTEFURVIoX2FoKSkKLQogI2RlZmluZSBBUl9JU1IgICAgICAgICAgICAgICAweDAwODAKICNkZWZpbmUgQVJfSVNSX1JYT0sgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9JU1JfUlhERVNDICAgICAgICAweDAwMDAwMDAyCkBAIC03MzMsNiArNzI2LDcgQEAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl81NDE2XzEwICAgICAgICAgICAgICAgMAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMiAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkxMDAgICAgICAgICAgICAgICAgICAweDE0CiAjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTYwICAgICAgICAJICAgICAgMHg0MAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTAgICAgCSAgICAgIDAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MTYwXzExICAgIAkgICAgICAxCkBAIC03NDUsNDUgKzczOSw2MCBAQAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTEgICAgICAgICAgICAgIDEKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEyICAgICAgICAgICAgICAyCiAKLSNkZWZpbmUgQVJfU1JFVl85MTAwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkpCisjZGVmaW5lIEFSX1NSRVZfNTQxNihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpKQogI2RlZmluZSBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgfHwgXAotCQkoKF9haCktPmFoX21hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjApKQorCSgoKEFSX1NSRVZfNTQxNihfYWgpKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIwKSkgfHwgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkpCiAjZGVmaW5lIEFSX1NSRVZfNTQxNl8yMl9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSB8fCBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMikpCi0jZGVmaW5lIEFSX1NSRVZfOTE2MChfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MTYwKSkKLSNkZWZpbmUgQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQotI2RlZmluZSBBUl9TUkVWXzkxNjBfMTEoX2FoKSBcCi0JKEFSX1NSRVZfOTE2MChfYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMSkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MChfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKLSNkZWZpbmUgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkyODApKQotI2RlZmluZSBBUl9TUkVWXzkyODBfMjAoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkgJiYgXAotCQkoKF9haCktPmFoX21hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjApKQotI2RlZmluZSBBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85MjgwKSB8fCBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkgJiYgXAotCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpKQorCSgoKEFSX1NSRVZfNTQxNihfYWgpKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyKSkgfHwgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkpCiAKLSNkZWZpbmUgQVJfU1JFVl85Mjg1KF9haCkgKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4NSkpCisjZGVmaW5lIEFSX1NSRVZfOTEwMChhaCkgXAorCSgoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbikgPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApCisjZGVmaW5lIEFSX1NSRVZfOTEwMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxMDApKQorCisjZGVmaW5lIEFSX1NSRVZfOTE2MChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQorI2RlZmluZSBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSkKKyNkZWZpbmUgQVJfU1JFVl85MTYwXzExKF9haCkgXAorCShBUl9TUkVWXzkxNjAoX2FoKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MTYwXzExKSkKKyNkZWZpbmUgQVJfU1JFVl85MjgwKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCisjZGVmaW5lIEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkyODApKQorI2RlZmluZSBBUl9TUkVWXzkyODBfMjAoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCisJCSgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzIwKSkKKyNkZWZpbmUgQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85MjgwKSB8fCBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCisJKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjApKSkKKworI2RlZmluZSBBUl9TUkVWXzkyODUoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzEwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkyODUpKQorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4NSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMShfYWgpIFwKLQkoQVJfU1JFVl85MjgwKGFoKSAmJiAoKF9haCktPmFoX21hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTEpKQorCShBUl9TUkVWXzkyODUoYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTEpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCi0JIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpKQorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCisJIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gXAorCQkJICAgICAgIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTIoX2FoKSBcCi0JKEFSX1NSRVZfOTI4MChhaCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEyKSkKKwkoQVJfU1JFVl85Mjg1KGFoKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEyKSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NSkgfHwgXAotCSAoQVJfU1JFVl85Mjg1KGFoKSAmJiAoKF9haCktPmFoX21hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKSkKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NSkgfHwgXAorCSAoQVJfU1JFVl85Mjg1KGFoKSAmJiAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IFwKKwkJCSAgICAgICBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKSkKIAogI2RlZmluZSBBUl9SQURJT19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAgIDB4ZjAKICNkZWZpbmUgQVJfUkFENTEzM19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAweGMwCkBAIC04NzUsMTIgKzg4NCwxNSBAQAogCiAjZGVmaW5lIEFSX05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKICNkZWZpbmUgQVI5MjhYX05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBUjkyODVfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDEyCiAKICNkZWZpbmUgQVJfR1BJT19JTl9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwNDgKICNkZWZpbmUgQVJfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGRkZDMDAwCiAjZGVmaW5lIEFSX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTQKICNkZWZpbmUgQVI5MjhYX0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwMEZGQzAwCiAjZGVmaW5lIEFSOTI4WF9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVI5Mjg1X0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGMDAwCisjZGVmaW5lIEFSOTI4NV9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTIKIAogI2RlZmluZSBBUl9HUElPX09FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0YwogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlYgICAgICAgICAgICAgICAgICAgICAgIDB4MwpAQCAtODk0LDE0ICs5MDYsMjQgQEAKICNkZWZpbmUgQVJfR1BJT19JTlRSX1BPTF9WQUxfUyAgICAgICAgICAgICAgICAgICAwCiAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUwgICAgICAgICAgICAgICAgICAgICAweDQwNTQKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfREVGICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX1BSSU9SSVRZX1MgICAgICAgMgorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9GUkVRVUVOQ1lfREVGICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfRlJFUVVFTkNZX1MgICAgICAzCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9ERUYgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfUyAgICAgICAgIDQKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfUkZTSUxFTlRfREVGICAgICAgICAweDAwMDAwMDgwCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0RFRl9TICAgICAgNworI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkIgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfQUNUSVZFX0JCX1MgICAgICAxMgogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQiAgICAgICAgIDB4MDAwMDgwMDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfUkZTSUxFTlRfQkJfUyAgICAgICAxNQogI2RlZmluZSBBUl9HUElPX1JUQ19SRVNFVF9PVkVSUklERV9FTkFCTEUgICAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgQVJfR1BJT19KVEFHX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCiAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxICAgICAgICAgICAgICAgICAgICAgICAweDQwNTgKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRSAgICAgICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9BQ1RJVkVfUyAgICAgICAgICAgMTYKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDIgICAgICAgICAgICAgICAgICAgICAgIDB4NDA1YwogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfQ0xLMjUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKQEAgLTk0MCw3ICs5NjIsNyBAQAogCiAjZGVmaW5lIEFSX1JUQ19CQVNFICAgICAgICAgICAgIDB4MDAwMjAwMDAKICNkZWZpbmUgQVJfUlRDX1JDIFwKLQkoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwMDApIDogMHg3MDAwCisJKChBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAwMCkgOiAweDcwMDApCiAjZGVmaW5lIEFSX1JUQ19SQ19NCQkweDAwMDAwMDAzCiAjZGVmaW5lIEFSX1JUQ19SQ19NQUNfV0FSTSAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVJfUlRDX1JDX01BQ19DT0xEICAgICAgMHgwMDAwMDAwMgpAQCAtOTQ4LDcgKzk3MCw3IEBACiAjZGVmaW5lIEFSX1JUQ19SQ19XQVJNX1JFU0VUICAgIDB4MDAwMDAwMDgKIAogI2RlZmluZSBBUl9SVENfUExMX0NPTlRST0wgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAxNCkgOiAweDcwMTQKKwkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDE0KSA6IDB4NzAxNCkKIAogI2RlZmluZSBBUl9SVENfUExMX0RJViAgICAgICAgICAweDAwMDAwMDFmCiAjZGVmaW5lIEFSX1JUQ19QTExfRElWX1MgICAgICAgIDAKQEAgLTk1Nyw4ICs5NzksNiBAQAogI2RlZmluZSBBUl9SVENfUExMX0NMS1NFTCAgICAgICAweDAwMDAwMzAwCiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMX1MgICAgIDgKIAotCi0KICNkZWZpbmUgQVJfUlRDX1JFU0VUIFwKIAkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDQwKSA6IDB4NzA0MCkKICNkZWZpbmUgQVJfUlRDX1JFU0VUX0VOCQkoMHgwMDAwMDAwMSkKQEAgLTk5NSw2ICsxMDE1LDEyIEBACiAjZGVmaW5lIEFSX1JUQ19JTlRSX01BU0sgXAogCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwNTgpIDogMHg3MDU4KQogCisvKiBSVENfREVSSVZFRF8qIC0gb25seSBmb3IgQVI5MTAwICovCisKKyNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLICAgICAgICAgICAoQVJfUlRDX0JBU0UgKyAweDAwMzgpCisjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0QgICAgMHgwMDAwZmZmZQorI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EX1MgIDEKKwogI2RlZmluZQlBUl9TRVFfTUFTSwkweDgwNjAKIAogI2RlZmluZSBBUl9BTl9SRjJHMV9DSDAgICAgICAgICAweDc4MTAKQEAgLTEwMjEsNiArMTA0NywxMCBAQAogI2RlZmluZSBBUl9BTl9SRjVHMV9DSDFfREI1ICAgICAweDAwMzgwMDAwCiAjZGVmaW5lIEFSX0FOX1JGNUcxX0NIMV9EQjVfUyAgIDE5CiAKKyNkZWZpbmUgQVJfQU5fVE9QMSAgICAgICAgICAgICAgICAgIDB4Nzg5MAorI2RlZmluZSBBUl9BTl9UT1AxX0RBQ0lQTU9ERQkgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9BTl9UT1AxX0RBQ0lQTU9ERV9TCSAgICAxOAorCiAjZGVmaW5lIEFSX0FOX1RPUDIgICAgICAgICAgICAgICAgICAweDc4OTQKICNkZWZpbmUgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTCAgICAgIDB4QzAwMDAwMDAKICNkZWZpbmUgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTF9TICAgIDMwCkBAIC0xMTgxLDE4ICsxMjExLDcgQEAKICNkZWZpbmUgQVJfQ0ZQX1ZBTCAgICAgICAgICAweDAwMDBGRkZGCiAKICNkZWZpbmUgQVJfUlhfRklMVEVSICAgICAgICAweDgwM0MKLSNkZWZpbmUgQVJfUlhfRklMVEVSX0FMTCAgICAweDAwMDAwMDAwCi0jZGVmaW5lIEFSX1JYX1VDQVNUICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBUl9SWF9NQ0FTVCAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfUlhfQkNBU1QgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEFSX1JYX0NPTlRST0wgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBBUl9SWF9CRUFDT04gICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQVJfUlhfUFJPTSAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIEFSX1JYX1BST0JFX1JFUSAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBBUl9SWF9NWV9CRUFDT04gICAgIDB4MDAwMDAyMDAKICNkZWZpbmUgQVJfUlhfQ09NUFJfQkFSICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEFSX1JYX0NPTVBSX0JBICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBBUl9SWF9VTkNPTV9CQV9CQVIgIDB4MDAwMDEwMDAKIAogI2RlZmluZSBBUl9NQ0FTVF9GSUwwICAgICAgIDB4ODA0MAogI2RlZmluZSBBUl9NQ0FTVF9GSUwxICAgICAgIDB4ODA0NApAQCAtMTIzNiw2ICsxMjU1LDggQEAKIAogI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMSAgICAgICAweDgwNjAKICNkZWZpbmUgQVJfQUVTX01VVEVfTUFTSzFfU0VRICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9GQ19NR01UIDB4RkZGRjAwMDAKKyNkZWZpbmUgQVJfQUVTX01VVEVfTUFTSzFfRkNfTUdNVF9TIDE2CiAKICNkZWZpbmUgQVJfR0FURURfQ0xLUyAgICAgICAweDgwNjQKICNkZWZpbmUgQVJfR0FURURfQ0xLU19UWCAgICAweDAwMDAwMDAyCkBAIC0xMzcwLDggKzEzOTEsOCBAQAogI2RlZmluZSBBUl9QSFlfQ09VTlRNQVggICAgICAgICgzIDw8IDIyKQogI2RlZmluZSBBUl9NSUJDTlRfSU5UUk1BU0sgICAgICgzIDw8IDIyKQogCi0jZGVmaW5lIEFSX1RTRl9USFJFU0hPTEQgICAgICAgMHg4MTNjCi0jZGVmaW5lIEFSX1RTRl9USFJFU0hPTERfVkFMICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUl9UU0ZPT1JfVEhSRVNIT0xEICAgICAgIDB4ODEzYworI2RlZmluZSBBUl9UU0ZPT1JfVEhSRVNIT0xEX1ZBTCAgIDB4MDAwMEZGRkYKIAogI2RlZmluZSBBUl9QSFlfRVJSX0VJRlNfTUFTSyAgIDgxNDQKIApAQCAtMTQ2MCw2ICsxNDgxLDEwIEBACiAjZGVmaW5lIEFSX1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9TSVpFICAgMHg3MDAKICNkZWZpbmUgQVJfOTI4NV9QQ1VfVFhCVUZfQ1RSTF9VU0FCTEVfU0laRSAgIDB4MzgwCiAKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTIgICAgICAgICAgICAgICAweDgzNDQKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUICAgMHgwMDAwMDAwNAorCiAjZGVmaW5lIEFSX0tFWVRBQkxFXzAgICAgICAgICAgIDB4ODgwMAogI2RlZmluZSBBUl9LRVlUQUJMRShfbikgICAgICAgICAoQVJfS0VZVEFCTEVfMCArICgoX24pKjMyKSkKICNkZWZpbmUgQVJfS0VZX0NBQ0hFX1NJWkUgICAgICAgMTI4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMKaW5kZXggNjQwNDNlOS4uYjhmOWI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYwpAQCAtMTYsNjMgKzE2LDM1OSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZ2QuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogI2luY2x1ZGUgInJlZ2RfY29tbW9uLmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfcmVnZF9jaGFuc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotCWNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjYSA9IGE7Ci0JY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNiID0gYjsKKy8qCisgKiBUaGlzIGlzIGEgc2V0IG9mIGNvbW1vbiBydWxlcyB1c2VkIGJ5IG91ciB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMuCisgKiBXZSBoYXZlIDEyIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucy4gVG8gc2F2ZSBzcGFjZSB3ZSBjb25zb2xpZGF0ZQorICogdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiA1IHN0cnVjdHVyZXMgYnkgZnJlcXVlbmN5IGFuZCBjaGFuZ2UKKyAqIHRoZSBmbGFncyBvbiBvdXIgcmVnX25vdGlmaWVyKCkgb24gYSBjYXNlIGJ5IGNhc2UgYmFzaXMuCisgKi8KIAotCXJldHVybiAoY2EtPmNoYW5uZWwgPT0gY2ItPmNoYW5uZWwpID8KLQkgICAgKGNhLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSAtCi0JICAgIChjYi0+Y2hhbm5lbEZsYWdzICYgQ0hBTl9GTEFHUykgOiBjYS0+Y2hhbm5lbCAtIGNiLT5jaGFubmVsOwotfQorLyogT25seSB0aGVzZSBjaGFubmVscyBhbGwgYWxsb3cgYWN0aXZlIHNjYW4gb24gYWxsIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucyAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMDFfMTEJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKQogCi1zdGF0aWMgdm9pZAotYXRoOWtfcmVnZF9zb3J0KHZvaWQgKmEsIHUzMiBuLCB1MzIgc2l6ZSwgYXRoX2hhbF9jbXBfdCAqY21wKQotewotCXU4ICphYSA9IGE7Ci0JdTggKmFpLCAqdDsKKy8qIFdlIGVuYWJsZSBhY3RpdmUgc2NhbiBvbiB0aGVzZSBhIGNhc2UgYnkgY2FzZSBiYXNpcyBieSByZWd1bGF0b3J5IGRvbWFpbiAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMTJfMTMJUkVHX1JVTEUoMjQ2Ny0xMCwgMjQ3MisxMCwgNDAsIDAsIDIwLFwKKwkJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKQorI2RlZmluZSBBVEg5S18yR0haX0NIMTQJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDQwLCAwLCAyMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fT0ZETSkKIAotCWZvciAoYWkgPSBhYSArIHNpemU7IC0tbiA+PSAxOyBhaSArPSBzaXplKQotCQlmb3IgKHQgPSBhaTsgdCA+IGFhOyB0IC09IHNpemUpIHsKLQkJCXU4ICp1ID0gdCAtIHNpemU7Ci0JCQlpZiAoY21wKHUsIHQpIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlzd2FwX2FycmF5KHUsIHQsIHNpemUpOwotCQl9Ci19CisvKiBXZSBhbGxvdyBJQlNTIG9uIHRoZXNlIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzIGJ5IHJlZ3VsYXRvcnkgZG9tYWluICovCisjZGVmaW5lIEFUSDlLXzVHSFpfNTE1MF81MzUwCVJFR19SVUxFKDUxNTAtMTAsIDUzNTArMTAsIDQwLCAwLCAzMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fSUJTUykKKyNkZWZpbmUgQVRIOUtfNUdIWl81NDcwXzU4NTAJUkVHX1JVTEUoNTQ3MC0xMCwgNTg1MCsxMCwgNDAsIDAsIDMwLFwKKwkJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBOTDgwMjExX1JSRl9OT19JQlNTKQorI2RlZmluZSBBVEg5S181R0haXzU3MjVfNTg1MAlSRUdfUlVMRSg1NzI1LTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsXAorCQkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IE5MODAyMTFfUlJGX05PX0lCU1MpCiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXJldHVybiBhaC0+YWhfY3VycmVudFJEICYgfldPUkxEV0lERV9ST0FNSU5HX0ZMQUc7Ci19CisjZGVmaW5lIEFUSDlLXzJHSFpfQUxMCQlBVEg5S18yR0haX0NIMDFfMTEsIFwKKwkJCQlBVEg5S18yR0haX0NIMTJfMTMsIFwKKwkJCQlBVEg5S18yR0haX0NIMTQKIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19jaGFuX2JtX3plcm8odTY0ICpiaXRtYXNrKQotewotCWludCBpOworI2RlZmluZSBBVEg5S181R0haX0FMTAkJQVRIOUtfNUdIWl81MTUwXzUzNTAsIFwKKwkJCQlBVEg5S181R0haXzU0NzBfNTg1MAorLyogVGhpcyBvbmUgc2tpcHMgd2hhdCB3ZSBjYWxsICJtaWQgYmFuZCIgKi8KKyNkZWZpbmUgQVRIOUtfNUdIWl9OT19NSURCQU5ECUFUSDlLXzVHSFpfNTE1MF81MzUwLCBcCisJCQkJQVRIOUtfNUdIWl81NzI1XzU4NTAKIAotCWZvciAoaSA9IDA7IGkgPCBCTUxFTjsgaSsrKSB7Ci0JCWlmIChiaXRtYXNrW2ldICE9IDApCi0JCQlyZXR1cm4gZmFsc2U7CisvKiBDYW4gYmUgdXNlZCBmb3I6CisgKiAweDYwLCAweDYxLCAweDYyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYwXzYxXzYyID0geworCS5uX3JlZ19ydWxlcyA9IDUsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQUxMLAorCQlBVEg5S181R0haX0FMTCwKIAl9Ci0JcmV0dXJuIHRydWU7Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDYzIGFuZCAweDY1ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYzXzY1ID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX05PX01JREJBTkQsCisJfQorfTsKKworLyogQ2FuIGJlIHVzZWQgYnkgMHg2NCBvbmx5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY0ID0geworCS5uX3JlZ19ydWxlcyA9IDMsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfNUdIWl9OT19NSURCQU5ELAorCX0KK307CisKKy8qIENhbiBiZSB1c2VkIGJ5IDB4NjYgYW5kIDB4NjkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBhdGg5a193b3JsZF9yZWdkb21fNjZfNjkgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJQVRIOUtfMkdIWl9DSDAxXzExLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDY3LCAweDZBIGFuZCAweDY4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY3XzY4XzZBID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfd3dyX3NrdSh1MTYgcmVnZCkKK3sKKwlyZXR1cm4gKChyZWdkICYgV09STERfU0tVX01BU0spID09IFdPUkxEX1NLVV9QUkVGSVgpIHx8CisJCShyZWdkID09IFdPUkxEKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9lZXByb21SRChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCAmIH5XT1JMRFdJREVfUk9BTUlOR19GTEFHOworfQorCitib29sIGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuIGlzX3d3cl9za3UoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpKTsKK30KKworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKHZvaWQpCit7CisJLyogdGhpcyBpcyB0aGUgbW9zdCByZXN0cmljdGl2ZSAqLworCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworfQorCitjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfd29ybGRfcmVnZG9tYWluKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjE6CisJY2FzZSAweDYyOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82MF82MV82MjsKKwljYXNlIDB4NjM6CisJY2FzZSAweDY1OgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82M182NTsKKwljYXNlIDB4NjQ6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworCWNhc2UgMHg2NjoKKwljYXNlIDB4Njk6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY2XzY5OworCWNhc2UgMHg2NzoKKwljYXNlIDB4Njg6CisJY2FzZSAweDZBOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82N182OF82QTsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gYXRoOWtfZGVmYXVsdF93b3JsZF9yZWdkb21haW4oKTsKKwl9Cit9CisKKy8qIEZyZXF1ZW5jeSBpcyBvbmUgd2hlcmUgcmFkYXIgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkICovCitzdGF0aWMgYm9vbCBhdGg5a19pc19yYWRhcl9mcmVxKHUxNiBjZW50ZXJfZnJlcSkKK3sKKwlyZXR1cm4gKGNlbnRlcl9mcmVxID49IDUyNjAgJiYgY2VudGVyX2ZyZXEgPD0gNTcwMCk7Cit9CisKKy8qCisgKiBOLkI6IFRoZXNlIGV4Y2VwdGlvbiBydWxlcyBkbyBub3QgYXBwbHkgcmFkYXIgZnJlcXMuCisgKgorICogLSBXZSBlbmFibGUgYWRob2MgKG9yIGJlYWNvbmluZykgaWYgYWxsb3dlZCBieSAxMWQKKyAqIC0gV2UgZW5hYmxlIGFjdGl2ZSBzY2FuIGlmIHRoZSBjaGFubmVsIGlzIGFsbG93ZWQgYnkgMTFkCisgKiAtIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBhIHdlIGRldGVybWluZSB3ZSBoYXZlCisgKiAgIHJlY2VpdmVkIGEgYmVhY29uIG9uIGEgY2hhbm5lbCB3ZSBjYW4gZW5hYmxlIGFjdGl2ZSBzY2FuIGFuZAorICogICBhZGhvYyAob3IgYmVhY29uaW5nKS4KKyAqLworc3RhdGljIHZvaWQgYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGU7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgYmFuZHdpZHRoID0gMDsKKwlpbnQgcjsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKworCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCisJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKGF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSB8fAorCQkJICAgIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikpCisJCQkJY29udGludWU7CisKKwkJCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLAorCQkJCQkmYmFuZHdpZHRoLCAmcmVnX3J1bGUpOworCQkJCWlmIChyKQorCQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJCSAqIElmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCisJCQkJICogd2UgZW5hYmxlIGFkaG9jL2JlYWNvbmluZyBpZiBpdCBhbGxvd3MgdXMgdG8KKwkJCQkgKiB1c2UgaXQuIE5vdGUgdGhhdCB3ZSB3b3VsZCBoYXZlIGRpc2FibGVkIGl0CisJCQkJICogYnkgYXBwbHlpbmcgb3VyIHN0YXRpYyB3b3JsZCByZWdkb21haW4gYnkKKwkJCQkgKiBkZWZhdWx0IGR1cmluZyBpbml0LCBwcmlvciB0byBjYWxsaW5nIG91cgorCQkJCSAqIHJlZ3VsYXRvcnlfaGludCgpLgorCQkJCSAqLworCQkJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmCisJCQkJICAgIE5MODAyMTFfUlJGX05PX0lCU1MpKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJgorCQkJCSAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2gtPmJlYWNvbl9mb3VuZCkKKwkJCQkJY2gtPmZsYWdzICY9IH4oSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8CisJCQkJCSAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKTsKKwkJCX0KKwkJfQorCX0KKworfQorCisvKiBBbGxvd3MgYWN0aXZlIHNjYW4gc2NhbiBvbiBDaCAxMiBhbmQgMTMgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX3JlZ19hcHBseV9hY3RpdmVfc2Nhbl9mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOworCXUzMiBiYW5kd2lkdGggPSAwOworCWludCByOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisKKwkvKgorCSAqIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQgYWx3YXlzIGVuYWJsZSBhY3RpdmUgc2NhbgorCSAqIG9uIHRoZXNlIGNoYW5uZWxzLiBUaGlzIGlzIG9ubHkgZG9uZSBmb3Igc3BlY2lmaWMgcmVndWxhdG9yeSBTS1VzCisJICovCisJaWYgKGluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2lldmVkIGNoZWNrIGl0cyBydWxlIGZvciB0aGlzCisJICogY2hhbm5lbCBmaXJzdCBiZWZvcmUgZW5hYmxpbmcgYWN0aXZlIHNjYW4uIFRoZSBwYXNzaXZlIHNjYW4KKwkgKiB3b3VsZCBoYXZlIGJlZW4gZW5mb3JjZWQgYnkgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBvZiBvdXIKKwkgKiBjdXN0b20gcmVndWxhdG9yeSBkb21haW4uCisJICovCisKKwljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCXIgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEsICZiYW5kd2lkdGgsICZyZWdfcnVsZSk7CisJaWYgKCFyKSB7CisJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTikpCisJCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJCWNoLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KKworCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSwgJmJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKKwlpZiAoIXIpIHsKKwkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJfQorfQorCisvKiBBbHdheXMgYXBwbHkgUmFkYXIvREZTIHJ1bGVzIG9uIGZyZXEgcmFuZ2UgNTI2MCBNSHogLSA1NzAwIE1IeiAqLwordm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlpZiAoIWF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSkKKwkJCWNvbnRpbnVlOworCQkvKiBXZSBhbHdheXMgZW5hYmxlIHJhZGFyIGRldGVjdGlvbi9ERlMgb24gdGhpcworCQkgKiBmcmVxdWVuY3kgcmFuZ2UuIEFkZGl0aW9uYWxseSB3ZSBhbHNvIGFwcGx5IG9uCisJCSAqIHRoaXMgZnJlcXVlbmN5IHJhbmdlOgorCQkgKiAtIElmIFNUQSBtb2RlIGRvZXMgbm90IHlldCBoYXZlIERGUyBzdXBwb3J0cyBkaXNhYmxlCisJCSAqICAgYWN0aXZlIHNjYW5uaW5nCisJCSAqIC0gSWYgYWRob2MgbW9kZSBkb2VzIG5vdCBzdXBwb3J0IERGUyB5ZXQgdGhlbgorCQkgKiAgIGRpc2FibGUgYWRob2MgaW4gdGhlIGZyZXF1ZW5jeS4KKwkJICogLSBJZiBBUCBtb2RlIGRvZXMgbm90IHlldCBzdXBwb3J0IHJhZGFyIGRldGVjdGlvbi9ERlMKKwkJICogICBkbyBub3QgYWxsb3cgQVAgbW9kZQorCQkgKi8KKwkJaWYgKCEoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKQorCQkJY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1JBREFSIHwKKwkJCQkgICAgIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfAorCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KK30KKwordm9pZCBhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjM6CisJY2FzZSAweDY2OgorCWNhc2UgMHg2NzoKKwkJYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncyh3aXBoeSwgaW5pdGlhdG9yKTsKKwkJYnJlYWs7CisJY2FzZSAweDY4OgorCQlhdGg5a19yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCQlhdGg5a19yZWdfYXBwbHlfYWN0aXZlX3NjYW5fZmxhZ3Mod2lwaHksIGluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKK2ludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwkvKiBXZSBhbHdheXMgYXBwbHkgdGhpcyAqLworCWF0aDlrX3JlZ19hcHBseV9yYWRhcl9mbGFncyh3aXBoeSk7CisKKwlzd2l0Y2ggKHJlcXVlc3QtPmluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisJCWlmIChhdGg5a19pc193b3JsZF9yZWdkKHNjLT5zY19haCkpCisJCQlhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Mod2lwaHksIHJlcXVlc3QtPmluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitib29sIGF0aDlrX3JlZ2RfaXNfZWVwcm9tX3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUxNiByZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKIAlpbnQgaTsKIAogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgY291bnRyeSBjb2RlICovCiAJCXUxNiBjYyA9IHJkICYgfkNPVU5UUllfRVJEX0ZMQUc7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykKIAkJCWlmIChhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUgPT0gY2MpCiAJCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgcmVncGFpciB2YWx1ZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKIAkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJkKQogCQkJCXJldHVybiB0cnVlOwpAQCAtODIsMTEzICszNzgsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXUzMiByZWdjYXA7Ci0KLQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCi0JaWYgKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORCkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfY2NvZGVfdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHUxNiBjYykKLXsKLQl1MTYgcmQ7Ci0JaW50IGk7Ci0KLQlpZiAoY2MgPT0gQ1RSWV9ERUZBVUxUKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoY2MgPT0gQ1RSWV9ERUJVRykKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiRUVQUk9NIHJlZ2RvbWFpbiAweCV4XG4iLCByZCk7Ci0KLQlpZiAocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRUVQUk9NIHNldHRpbmcgaXMgY291bnRyeSBjb2RlICV1XG4iLAotCQkJcmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JCXJldHVybiBjYyA9PSAocmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7Ci0JCWlmIChjYyA9PSBhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUpIHsKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCQkJaWYgKChyZCAmIFdPUkxEX1NLVV9NQVNLKSA9PSBXT1JMRF9TS1VfUFJFRklYKQotCQkJCXJldHVybiB0cnVlOwotI2VuZGlmCi0JCQlpZiAoYWxsQ291bnRyaWVzW2ldLnJlZ0RtbkVudW0gPT0gcmQgfHwKLQkJCSAgICByZCA9PSBERUJVR19SRUdfRE1OIHx8IHJkID09IE5PX0VOVU1SRCkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgKmNvdW50cnksCi0JCQkgICBzdHJ1Y3QgcmVnRG9tYWluICpyZDVHSHosCi0JCQkgICB1bnNpZ25lZCBsb25nICptb2Rlc19hbGxvd2VkKQotewotCWJpdG1hcF9jb3B5KG1vZGVzX2FsbG93ZWQsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzLCBBVEg5S19NT0RFX01BWCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFnKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFHLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgIChhdGg5a19yZWdkX2lzX2NoYW5fYm1femVybyhyZDVHSHotPmNoYW4xMWEpKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFBLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkdfSFQyMCwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpCi0JICAgICYmICghY291bnRyeS0+YWxsb3cxMW5nMjApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykKLQkgICAgJiYgKCFjb3VudHJ5LT5hbGxvdzExbmEyMCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQyMCwgbW9kZXNfYWxsb3dlZCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmc0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFuZzQwKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDQwUExVUywgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgICghY291bnRyeS0+YWxsb3cxMW5hNDApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmE0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBtb2Rlc19hbGxvd2VkKTsKLX0KLQotYm9vbCBhdGg5a19yZWdkX2lzX3B1YmxpY19zYWZldHlfc2t1KHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQl1MTYgcmQ7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCXN3aXRjaCAocmQpIHsKLQljYXNlIEZDQzRfRkNDQToKLQljYXNlIChDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDkgfCBDT1VOVFJZX0VSRF9GTEFHKToKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBERUJVR19SRUdfRE1OOgotCWNhc2UgTk9fRU5VTVJEOgotCQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfVU5JVEVEX1NUQVRFU19GQ0M0OSkKLQkJCXJldHVybiB0cnVlOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCisvKiBFRVBST00gY291bnRyeSBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLwogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKIGF0aDlrX3JlZ2RfZmluZF9jb3VudHJ5KHUxNiBjb3VudHJ5Q29kZSkKIHsKQEAgLTIwMSwxMiArMzkxLDIyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCkKKy8qIEVFUFJPTSByZCBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLworc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKK2F0aDlrX3JlZ2RfZmluZF9jb3VudHJ5X2J5X3JkKGludCByZWdkbW4pCiB7Ci0JdTE2IHJkOwogCWludCBpOwogCi0JcmQgPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7CisJCWlmIChhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bSA9PSByZWdkbW4pCisJCQlyZXR1cm4gJmFsbENvdW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybnMgdGhlIG1hcCBvZiB0aGUgRUVQUk9NIHNldCBSRCB0byBhIGNvdW50cnkgY29kZSAqLworc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9kZWZhdWx0X2NvdW50cnkodTE2IHJkKQorewogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKIAkJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKIAkJdTE2IGNjID0gcmQgJiB+Q09VTlRSWV9FUkRfRkxBRzsKQEAgLTIxNiw3OTggKzQxNiwxMDQgQEAKIAkJCXJldHVybiBjYzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKLQkJaWYgKHJlZ0RvbWFpblBhaXJzW2ldLnJlZ0RtbkVudW0gPT0gcmQpIHsKLQkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQyAhPSAwKQotCQkJCXJldHVybiByZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQzsKLQkJCWVsc2UKLQkJCQlpID0gQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7Ci0JCX0KIAlyZXR1cm4gQ1RSWV9ERUZBVUxUOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19yZWdkX2lzX3ZhbGlkX3JlZ19kb21haW4oaW50IHJlZ0RtbiwKLQkJCQkJICAgc3RydWN0IHJlZ0RvbWFpbiAqcmQpCitzdGF0aWMgc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nKgorYXRoOWtfZ2V0X3JlZ3BhaXIoaW50IHJlZ2RtbikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ0RvbWFpbnMpOyBpKyspIHsKLQkJaWYgKHJlZ0RvbWFpbnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCWlmIChyZCAhPSBOVUxMKSB7Ci0JCQkJbWVtY3B5KHJkLCAmcmVnRG9tYWluc1tpXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCByZWdEb21haW4pKTsKLQkJCX0KLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluUGFpcihpbnQgcmVnRG1uUGFpcikKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdEbW5QYWlyID09IE5PX0VOVU1SRCkKLQkJcmV0dXJuIGZhbHNlOworCWlmIChyZWdkbW4gPT0gTk9fRU5VTVJEKQorCQlyZXR1cm4gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykgewotCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW5QYWlyKQotCQkJcmV0dXJuIHRydWU7CisJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJlZ2RtbikKKwkJCXJldHVybiAmcmVnRG9tYWluUGFpcnNbaV07CiAJfQotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCByZWdEbW4sCi0JCQkgICAgICAgdTE2IGNoYW5uZWxGbGFnLCBzdHJ1Y3QgcmVnRG9tYWluICpyZCkKK2ludCBhdGg5a19yZWdkX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaW50IGksIGZvdW5kOwotCXU2NCBmbGFncyA9IE5PX1JFUTsKLQlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ1BhaXIgPSBOVUxMOwotCWludCByZWdPcmc7Ci0KLQlyZWdPcmcgPSByZWdEbW47Ci0JaWYgKHJlZ0RtbiA9PSBDVFJZX0RFRkFVTFQpIHsKLQkJdTE2IHJkbnVtOwotCQlyZG51bSA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCQlpZiAoIShyZG51bSAmIENPVU5UUllfRVJEX0ZMQUcpKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluKHJkbnVtLCBOVUxMKSB8fAotCQkJICAgIGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpblBhaXIocmRudW0pKSB7Ci0JCQkJcmVnRG1uID0gcmRudW07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKHJlZ0RtbiAmIE1VTFRJX0RPTUFJTl9NQVNLKSA9PSAwKSB7Ci0JCWZvciAoaSA9IDAsIGZvdW5kID0gMDsKLQkJICAgICAoaSA8IEFSUkFZX1NJWkUocmVnRG9tYWluUGFpcnMpKSAmJiAoIWZvdW5kKTsgaSsrKSB7Ci0JCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCQlyZWdQYWlyID0gJnJlZ0RvbWFpblBhaXJzW2ldOwotCQkJCWZvdW5kID0gMTsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJGYWlsZWQgdG8gZmluZCByZWcgZG9tYWluIHBhaXIgJXVcbiIsIHJlZ0Rtbik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKCEoY2hhbm5lbEZsYWcgJiBDSEFOTkVMXzJHSFopKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW41R0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczVHSHo7Ci0JCX0KLQkJaWYgKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW4yR0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczJHSHo7Ci0JCX0KLQl9Ci0KLQlmb3VuZCA9IGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpbihyZWdEbW4sIHJkKTsKLQlpZiAoIWZvdW5kKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRmFpbGVkIHRvIGZpbmQgdW5pdGFyeSByZWcgZG9tYWluICV1XG4iLCByZWdEbW4pOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJcmQtPnBzY2FuICY9IHJlZ1BhaXItPnBzY2FuTWFzazsKLQkJaWYgKCgocmVnT3JnICYgTVVMVElfRE9NQUlOX01BU0spID09IDApICYmCi0JCSAgICAoZmxhZ3MgIT0gTk9fUkVRKSkgewotCQkJcmQtPmZsYWdzID0gZmxhZ3M7Ci0JCX0KLQotCQlyZC0+ZmxhZ3MgJj0gKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSA/Ci0JCSAgICBSRUdfRE9NQUlOXzJHSFpfTUFTSyA6IFJFR19ET01BSU5fNUdIWl9NQVNLOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfYml0X3NldChpbnQgYml0LCB1NjQgKmJpdG1hc2spCi17Ci0JaW50IGJ5dGVPZmZzZXQsIGJpdG51bTsKLQl1NjQgdmFsOwotCi0JYnl0ZU9mZnNldCA9IGJpdCAvIDY0OwotCWJpdG51bSA9IGJpdCAtIGJ5dGVPZmZzZXQgKiA2NDsKLQl2YWwgPSAoKHU2NCkgMSkgPDwgYml0bnVtOwotCWlmIChiaXRtYXNrW2J5dGVPZmZzZXRdICYgdmFsKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHU4ICpyZWdjbGFzc2lkcywgdTMyIG1heHJlZ2lkcywKLQkJCSAgIHUzMiAqbnJlZ2lkcywgdTggcmVnY2xhc3NpZCkKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdjbGFzc2lkID09IDApCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXhyZWdpZHM7IGkrKykgewotCQlpZiAocmVnY2xhc3NpZHNbaV0gPT0gcmVnY2xhc3NpZCkKLQkJCXJldHVybjsKLQkJaWYgKHJlZ2NsYXNzaWRzW2ldID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBtYXhyZWdpZHMpCi0JCXJldHVybjsKLQllbHNlIHsKLQkJcmVnY2xhc3NpZHNbaV0gPSByZWdjbGFzc2lkOwotCQkqbnJlZ2lkcyArPSAxOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGVudW0gcmVnX2V4dF9iaXRtYXAgYml0KQotewotCXJldHVybiAoYWgtPmFoX2N1cnJlbnRSREV4dCAmICgxIDw8IGJpdCkpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0KLXN0YXRpYyB2b2lkIGF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucywKLQkJCQkgICAgICBpbnQgbmNoYW5zKQotewotCWludCBpLCBqLCBuZXh0OwotCi0JZm9yIChuZXh0ID0gMDsgbmV4dCA8IG5jaGFuczsgbmV4dCsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fTkZfUkVBRElOR1M7IGkrKykgewotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5jdXJySW5kZXggPSAwOwotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5wcml2TkYgPQotCQkJICAgIEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7Ci0JCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLmludmFsaWRORmNvdW50ID0KLQkJCSAgICBBUl9QSFlfQ0NBX0ZJTFRFUldJTkRPV19MRU5HVEg7Ci0JCQlmb3IgKGogPSAwOyBqIDwgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOyBqKyspIHsKLQkJCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLm5mQ2FsQnVmZmVyW2pdID0KLQkJCQkgICAgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRTsKLQkJCX0KLQkJfQotCX0KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICB1MTYgYykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNTA7IGkrKykgewotCQlpZiAoIWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsKQotCQkJcmV0dXJuIC0xOwotCQllbHNlIGlmIChhaC0+YWhfY2hhbm5lbHNbaV0uY2hhbm5lbCA9PSBjKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgYm9vbAotYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICB1MTYgYywKLQkJICAgICAgIHUxNiBjX2xvLAotCQkgICAgICAgdTE2IGNfaGksCi0JCSAgICAgICB1MTYgbWF4Q2hhbiwKLQkJICAgICAgIHU4IGN0bCwKLQkJICAgICAgIGludCBwb3MsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwKLQkJICAgICAgIHN0cnVjdCBSZWdEbW5GcmVxQmFuZCAqZmJhbmQsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluICpyZCwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBjbW9kZSAqY20sCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW5zLAotCQkgICAgICAgYm9vbCBlbmFibGVFeHRlbmRlZENoYW5uZWxzKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuOwotCWludCByZXQ7Ci0JdTMyIGNoYW5uZWxGbGFncyA9IDA7Ci0JdTggcHJpdkZsYWdzID0gMDsKLQotCWlmICghKGNfbG8gPD0gYyAmJiBjIDw9IGNfaGkpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiYyAldSBvdXQgb2YgcmFuZ2UgWyV1Li4ldV1cbiIsCi0JCQljLCBjX2xvLCBjX2hpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9IQUxGX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9IQUxGUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBoYWxmIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9RVUFSVEVSX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBxdWFydGVyIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKChjICsgZmJhbmQtPmNoYW5uZWxTZXApIC8gMikgPiAobWF4Q2hhbiArIEhBTEZfTUFYQ0hBTkJXKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJImMgJXUgPiBtYXhDaGFuICV1XG4iLCBjLCBtYXhDaGFuKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmICgoZmJhbmQtPnVzZVBhc3NTY2FuICYgSVNfRUNNX0NIQU4pICYmICFlbmFibGVFeHRlbmRlZENoYW5uZWxzKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgZWNtIGNoYW5uZWxcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKChyZC0+ZmxhZ3MgJiBOT19IT1NUQVApICYmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIlNraXBwaW5nIEhPU1RBUCBjaGFubmVsXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9GQ0NfREZTX0hUNDApKSAmJgotCSAgICAoZmJhbmQtPnVzZURmcykgJiYKLQkgICAgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCAhPSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9mY2NfZGZzX2h0NDAgPSAwKVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCSAgICAhKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoYWgsCi0JCQkJCQkgUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCkpICYmCi0JICAgICEoZmJhbmQtPnVzZURmcykgJiYgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCA9PSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9qYXBfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCkpICYmCi0JICAgIChmYmFuZC0+dXNlRGZzKSAmJgotCSAgICAocmQtPmNvbmZvcm1hbmNlVGVzdExpbWl0ID09IE1LSykpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyBIVDQwIGNoYW5uZWwgKGVuX2phcF9kZnNfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIENhbGN1bGF0ZSBjaGFubmVsIGZsYWdzICovCi0KLQljaGFubmVsRmxhZ3MgPSBjbS0+ZmxhZ3M7Ci0KLQlzd2l0Y2ggKGZiYW5kLT5jaGFubmVsQlcpIHsKLQljYXNlIENIQU5ORUxfSEFMRl9CVzoKLQkJY2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfSEFMRjsKLQkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX1FVQVJURVJfQlc6Ci0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1FVQVJURVI7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChmYmFuZC0+dXNlUGFzc1NjYW4gJiByZC0+cHNjYW4pCi0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1BBU1NJVkU7Ci0JZWxzZQotCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQlpZiAoZmJhbmQtPnVzZURmcyAmIHJkLT5kZnNNYXNrKQotCQlwcml2RmxhZ3MgPSBDSEFOTkVMX0RGUzsKLQllbHNlCi0JCXByaXZGbGFncyA9IDA7Ci0JaWYgKHJkLT5mbGFncyAmIExJTUlUX0ZSQU1FXzRNUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfNE1TX0xJTUlUOwotCWlmIChwcml2RmxhZ3MgJiBDSEFOTkVMX0RGUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JaWYgKHJkLT5mbGFncyAmIEFESE9DX1BFUl8xMUQpCi0JCXByaXZGbGFncyB8PSBDSEFOTkVMX1BFUl8xMURfQURIT0M7Ci0KLQlpZiAoY2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKSB7Ci0JCWlmICgoYyA8IDI0MTIpIHx8IChjID4gMjQ2MikpIHsKLQkJCWlmIChyZDVHSHoucmVnRG1uRW51bSA9PSBNS0sxIHx8Ci0JCQkgICAgcmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMikgewotCQkJCXUzMiByZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJCWlmICghKHJlZ2NhcCAmCi0JCQkJICAgICAgKEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQpKSAmJgotCQkJCSAgICBpc1VOSUkxT2RkQ2hhbihjKSkgewotCQkJCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQkJCQl9IGVsc2UgewotCQkJCQlwcml2RmxhZ3MgfD0gQ0hBTk5FTF9ESVNBTExPV19BREhPQzsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaXZGbGFncyB8PSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExQSkgfHwKLQkgICAgKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDIwKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUykpIHsKLQkJaWYgKHJkLT5mbGFncyAmIChBREhPQ19OT18xMUEgfCBESVNBTExPV19BREhPQ18xMUEpKQotCQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JfQotCi0JLyogRmlsbCBpbiBjaGFubmVsIGRldGFpbHMgKi8KLQotCXJldCA9IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KGFoLCBjKTsKLQlpZiAocmV0ID09IC0xKSB7Ci0JCWNoYW4gPSAmYWgtPmFoX2NoYW5uZWxzW3Bvc107Ci0JCWNoYW4tPmNoYW5uZWwgPSBjOwotCQljaGFuLT5tYXhSZWdUeFBvd2VyID0gZmJhbmQtPnBvd2VyRGZzOwotCQljaGFuLT5hbnRlbm5hTWF4ID0gZmJhbmQtPmFudGVubmFNYXg7Ci0JCWNoYW4tPnJlZ0RtbkZsYWdzID0gcmQtPmZsYWdzOwotCQljaGFuLT5tYXhUeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5taW5UeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgPSBjaGFubmVsRmxhZ3M7Ci0JCWNoYW4tPnByaXZGbGFncyA9IHByaXZGbGFnczsKLQl9IGVsc2UgewotCQljaGFuID0gJmFoLT5haF9jaGFubmVsc1tyZXRdOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgfD0gY2hhbm5lbEZsYWdzOwotCQljaGFuLT5wcml2RmxhZ3MgfD0gcHJpdkZsYWdzOwotCX0KLQotCS8qIFNldCBDVExzICovCi0KLQlpZiAoKGNtLT5mbGFncyAmIENIQU5ORUxfQUxMKSA9PSBDSEFOTkVMX0EpCi0JCWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzBdID0gY3RsOwotCWVsc2UgaWYgKChjbS0+ZmxhZ3MgJiBDSEFOTkVMX0FMTCkgPT0gQ0hBTk5FTF9CKQotCQljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXSA9IGN0bDsKLQllbHNlIGlmICgoY20tPmZsYWdzICYgQ0hBTk5FTF9BTEwpID09IENIQU5ORUxfRykKLQkJY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMl0gPSBjdGw7Ci0KLQlyZXR1cm4gKHJldCA9PSAtMSkgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfamFwYW5fY2hlY2soc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGludCBiLAotCQkJCSAgIHN0cnVjdCByZWdEb21haW4gKnJkNUdIeikKLXsKLQlib29sIHNraXBiYW5kID0gZmFsc2U7Ci0JaW50IGk7Ci0JdTMyIHJlZ2NhcDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGpfYmFuZGNoZWNrKTsgaSsrKSB7Ci0JCWlmIChqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCA9PSBiKSB7Ci0JCQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJaWYgKChqX2JhbmRjaGVja1tpXS5lZXByb21mbGFndG9jaGVjayAmIHJlZ2NhcCkgPT0gMCkgewotCQkJCXNraXBiYW5kID0gdHJ1ZTsKLQkJCX0gZWxzZSBpZiAoKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMikgfHwKLQkJCQkgIChyZWdjYXAgJiBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORCkpIHsKLQkJCQlyZDVHSHotPmRmc01hc2sgfD0gREZTX01LSzQ7Ci0JCQkJcmQ1R0h6LT5wc2NhbiB8PSBQU0NBTl9NS0szOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkiU2tpcHBpbmcgJWQgZnJlcSBiYW5kXG4iLCBqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCk7Ci0KLQlyZXR1cm4gc2tpcGJhbmQ7Ci19Ci0KLWJvb2wKLWF0aDlrX3JlZ2RfaW5pdF9jaGFubmVscyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgdTMyIG1heGNoYW5zLAotCQkJIHUzMiAqbmNoYW5zLCB1OCAqcmVnY2xhc3NpZHMsCi0JCQkgdTMyIG1heHJlZ2lkcywgdTMyICpucmVnaWRzLCB1MTYgY2MsCi0JCQkgYm9vbCBlbmFibGVPdXRkb29yLAotCQkJIGJvb2wgZW5hYmxlRXh0ZW5kZWRDaGFubmVscykKLXsKLQl1MTYgbWF4Q2hhbiA9IDcwMDA7CiAJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKLQlzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwgcmQyR0h6OwotCWNvbnN0IHN0cnVjdCBjbW9kZSAqY207Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucyA9ICZhaC0+YWhfY2hhbm5lbHNbMF07Ci0JaW50IG5leHQgPSAwLCBiOwotCXU4IGN0bDsKLQlpbnQgcmVnZG1uOwotCXUxNiBjaGFuU2VwOwotCXVuc2lnbmVkIGxvbmcgKm1vZGVzX2F2YWlsOwotCURFQ0xBUkVfQklUTUFQKG1vZGVzX2FsbG93ZWQsIEFUSDlLX01PREVfTUFYKTsKLQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJjYyAldSAlcyAlc1xuIiwgY2MsCi0JCSBlbmFibGVPdXRkb29yID8gIkVuYWJsZSBvdXRkb29yIiA6ICIiLAotCQkgZW5hYmxlRXh0ZW5kZWRDaGFubmVscyA/ICJFbmFibGUgZWNtIiA6ICIiKTsKLQotCWlmICghYXRoOWtfcmVnZF9pc19jY29kZV92YWxpZChhaCwgY2MpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiSW52YWxpZCBjb3VudHJ5IGNvZGUgJWRcbiIsIGNjKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KKwl1MTYgcmVnZG1uOwogCiAJaWYgKCFhdGg5a19yZWdkX2lzX2VlcHJvbV92YWxpZChhaCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCSJJbnZhbGlkIEVFUFJPTSBjb250ZW50c1xuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KGFoKTsKKwlyZWdkbW4gPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHJlZ2Rtbik7CiAKLQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfREVGQVVMVCkgewotCQlhaC0+YWhfY291bnRyeUNvZGUgPSBjYyAmIENPVU5UUllfQ09ERV9NQVNLOwotCQlpZiAoKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQpICYmCi0JCSAgICAoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpID09IENUUllfREVGQVVMVCkpIHsKLQkJCWFoLT5haF9jb3VudHJ5Q29kZSA9IENUUllfVU5JVEVEX1NUQVRFUzsKLQkJfQotCX0KKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCAmJgorCSAgICByZWdkbW4gPT0gQ1RSWV9ERUZBVUxUKQorCQlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX1VOSVRFRF9TVEFURVM7CiAKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCWlmIChhaC0+YWhfY291bnRyeUNvZGUgPT0gQ1RSWV9ERUZBVUxUKSB7Ci0JCXJlZ2RtbiA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCkgewogCQljb3VudHJ5ID0gTlVMTDsKIAl9IGVsc2UgewotI2VuZGlmCi0JCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeShhaC0+YWhfY291bnRyeUNvZGUpOworCQljb3VudHJ5ID0gYXRoOWtfcmVnZF9maW5kX2NvdW50cnkoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKIAkJaWYgKGNvdW50cnkgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCQkiQ291bnRyeSBpcyBOVUxMISEhISwgY2M9ICVkXG4iLAotCQkJCWFoLT5haF9jb3VudHJ5Q29kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZWxzZSB7CisJCQkJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKIAkJCXJlZ2RtbiA9IGNvdW50cnktPnJlZ0RtbkVudW07Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQkJCWlmICgoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSAmCi0JCQkgICAgICBXT1JMRF9TS1VfTUFTSykgPT0gV09STERfU0tVX1BSRUZJWCkgJiYKLQkJCSAgICAoY2MgPT0gQ1RSWV9VTklURURfU1RBVEVTKSkgewotCQkJCWlmICghaXNXd3JTS1VfTm9NaWRiYW5kKGFoKQotCQkJCSAgICAmJiBhdGg5a19yZWdkX2lzX2ZjY19taWRiYW5kX3N1cHBvcnRlZChhaCkpCi0JCQkJCXJlZ2RtbiA9IEZDQzNfRkNDQTsKLQkJCQllbHNlCi0JCQkJCXJlZ2RtbiA9IEZDQzFfRkNDQTsKLQkJCX0KLSNlbmRpZgotCQl9Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQl9Ci0jZW5kaWYKLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIH5DSEFOTkVMXzJHSFosCi0JCQkJCSAgICAmcmQ1R0h6KSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIkNvdWxkbid0IGZpbmQgdW5pdGFyeSAiCi0JCQkiNUdIeiByZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJYWgtPmFoX2NvdW50cnlDb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIENIQU5ORUxfMkdIWiwKLQkJCQkJICAgICZyZDJHSHopKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiQ291bGRuJ3QgZmluZCB1bml0YXJ5IDJHSHogIgotCQkJInJlZyBkb21haW4gZm9yIGNvdW50cnkgJXVcbiIsCi0JCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKCFpc1d3clNLVShhaCkgJiYgKChyZDVHSHoucmVnRG1uRW51bSA9PSBGQ0MxKSB8fAotCQkJICAgICAgKHJkNUdIei5yZWdEbW5FbnVtID09IEZDQzIpKSkgewotCQlpZiAoYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoYWgpKSB7Ci0JCQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJCQkgICAgRkNDM19GQ0NBLAotCQkJCQkJCSAgICB+Q0hBTk5FTF8yR0haLAotCQkJCQkJCSAgICAmcmQ1R0h6KSkgewotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJCSJDb3VsZG4ndCBmaW5kIHVuaXRhcnkgNUdIeiAiCi0JCQkJCSJyZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQorCWFoLT5yZWd1bGF0b3J5LnJlZ3BhaXIgPSBhdGg5a19nZXRfcmVncGFpcihyZWdkbW4pOworCisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIk5vIHJlZ3VsYXRvcnkgZG9tYWluIHBhaXIgZm91bmQsIGNhbm5vdCBjb250aW51ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJbW9kZXNfYXZhaWwgPSBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlczsKKwlpZiAoIWNvdW50cnkpCisJCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeV9ieV9yZChyZWdkbW4pOworCisJaWYgKGNvdW50cnkpIHsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gY291bnRyeS0+aXNvTmFtZVswXTsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKIAl9IGVsc2UgewotCQlhdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhhaCwgY291bnRyeSwgJnJkNUdIeiwgbW9kZXNfYWxsb3dlZCk7Ci0JCW1vZGVzX2F2YWlsID0gbW9kZXNfYWxsb3dlZDsKLQotCQlpZiAoIWVuYWJsZU91dGRvb3IpCi0JCQltYXhDaGFuID0gY291bnRyeS0+b3V0ZG9vckNoYW5TdGFydDsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gJzAnOworCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMV0gPSAnMCc7CiAJfQogCi0JbmV4dCA9IDA7Ci0KLQlpZiAobWF4Y2hhbnMgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpCi0JCW1heGNoYW5zID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCi0JZm9yIChjbSA9IG1vZGVzOyBjbSA8ICZtb2Rlc1tBUlJBWV9TSVpFKG1vZGVzKV07IGNtKyspIHsKLQkJdTE2IGMsIGNfaGksIGNfbG87Ci0JCXU2NCAqY2hhbm5lbEJNID0gTlVMTDsKLQkJc3RydWN0IHJlZ0RvbWFpbiAqcmQgPSBOVUxMOwotCQlzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgKmZiYW5kID0gTlVMTCwgKmZyZXFzOwotCQlpbnQ4X3QgbG93X2FkaiA9IDAsIGhpX2FkaiA9IDA7Ci0KLQkJaWYgKCF0ZXN0X2JpdChjbS0+bW9kZSwgbW9kZXNfYXZhaWwpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSIhYXZhaWwgbW9kZSAlZCBmbGFncyAweCV4XG4iLAotCQkJCWNtLT5tb2RlLCBjbS0+ZmxhZ3MpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhhaCwgY20tPmZsYWdzLCAmY19sbywgJmNfaGkpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJjaGFubmVscyAweCV4IG5vdCBzdXBwb3J0ZWQgIgotCQkJCSJieSBoYXJkd2FyZVxuIiwgY20tPmZsYWdzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3dpdGNoIChjbS0+bW9kZSkgewotCQljYXNlIEFUSDlLX01PREVfMTFBOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDIwOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDQwUExVUzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOgotCQkJcmQgPSAmcmQ1R0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWE7Ci0JCQlmcmVxcyA9ICZyZWdEbW41R2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIEFUSDlLX01PREVfMTFCOgotCQkJcmQgPSAmcmQyR0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWI7Ci0JCQlmcmVxcyA9ICZyZWdEbW4yR2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCB8IENUTF8xMUI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVEg5S19NT0RFXzExRzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQyMDoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVM6Ci0JCWNhc2UgQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzoKLQkJCXJkID0gJnJkMkdIejsKLQkJCWNoYW5uZWxCTSA9IHJkLT5jaGFuMTFnOwotCQkJZnJlcXMgPSAmcmVnRG1uMkdoejExZ0ZyZXFbMF07Ci0JCQljdGwgPSByZC0+Y29uZm9ybWFuY2VUZXN0TGltaXQgfCBDVExfMTFHOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJVbmtub3duIEhBTCBtb2RlIDB4JXhcbiIsIGNtLT5tb2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGF0aDlrX3JlZ2RfaXNfY2hhbl9ibV96ZXJvKGNoYW5uZWxCTSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwUExVUykgfHwKLQkJICAgIChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMpKSB7Ci0JCQloaV9hZGogPSAtMjA7Ci0JCX0KLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMpIHx8Ci0JCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUykpIHsKLQkJCWxvd19hZGogPSAyMDsKLQkJfQotCi0JCS8qIFhYWDogQWRkIGEgaGVscGVyIGhlcmUgaW5zdGVhZCAqLwotCQlmb3IgKGIgPSAwOyBiIDwgNjQgKiBCTUxFTjsgYisrKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc19iaXRfc2V0KGIsIGNoYW5uZWxCTSkpIHsKLQkJCQlmYmFuZCA9ICZmcmVxc1tiXTsKLQkJCQlpZiAocmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMQotCQkJCSAgICB8fCByZDVHSHoucmVnRG1uRW51bSA9PSBNS0syKSB7Ci0JCQkJCWlmIChhdGg5a19yZWdkX2phcGFuX2NoZWNrKGFoLAotCQkJCQkJCQkgICBiLAotCQkJCQkJCQkgICAmcmQ1R0h6KSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHJlZ2NsYXNzaWRzLAotCQkJCQkJCSAgIG1heHJlZ2lkcywKLQkJCQkJCQkgICBucmVnaWRzLAotCQkJCQkJCSAgIGZiYW5kLT4KLQkJCQkJCQkgICByZWdDbGFzc0lkKTsKLQotCQkJCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmIChyZCA9PSAmcmQ1R0h6KSkgewotCQkJCQljaGFuU2VwID0gNDA7Ci0JCQkJCWlmIChmYmFuZC0+bG93Q2hhbm5lbCA9PSA1MjgwKQotCQkJCQkJbG93X2FkaiArPSAyMDsKLQotCQkJCQlpZiAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTE3MCkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZQotCQkJCQljaGFuU2VwID0gZmJhbmQtPmNoYW5uZWxTZXA7Ci0KLQkJCQlmb3IgKGMgPSBmYmFuZC0+bG93Q2hhbm5lbCArIGxvd19hZGo7Ci0JCQkJICAgICAoKGMgPD0gKGZiYW5kLT5oaWdoQ2hhbm5lbCArIGhpX2FkaikpICYmCi0JCQkJICAgICAgKGMgPj0gKGZiYW5kLT5sb3dDaGFubmVsICsgbG93X2FkaikpKTsKLQkJCQkgICAgIGMgKz0gY2hhblNlcCkgewotCQkJCQlpZiAobmV4dCA+PSBtYXhjaGFucykgewotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCQkJCSJ0b28gbWFueSBjaGFubmVscyAiCi0JCQkJCQkJImZvciBjaGFubmVsIHRhYmxlXG4iKTsKLQkJCQkJCWdvdG8gZG9uZTsKLQkJCQkJfQotCQkJCQlpZiAoYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChhaCwKLQkJCQkJCSAgIGMsIGNfbG8sIGNfaGksCi0JCQkJCQkgICBtYXhDaGFuLCBjdGwsCi0JCQkJCQkgICBuZXh0LAotCQkJCQkJICAgcmQ1R0h6LAotCQkJCQkJICAgZmJhbmQsIHJkLCBjbSwKLQkJCQkJCSAgIGljaGFucywKLQkJCQkJCSAgIGVuYWJsZUV4dGVuZGVkQ2hhbm5lbHMpKQotCQkJCQkJbmV4dCsrOwotCQkJCX0KLQkJCQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCQkJCSAgICAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTI4MCkpIHsKLQkJCQkJbG93X2FkaiAtPSAyMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci1kb25lOgotCWlmIChuZXh0ICE9IDApIHsKLQkJaW50IGk7Ci0KLQkJaWYgKG5leHQgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJInRvbyBtYW55IGNoYW5uZWxzICV1OyB0cnVuY2F0aW5nIHRvICV1XG4iLAotCQkJCW5leHQsIChpbnQpIEFSUkFZX1NJWkUoYWgtPmFoX2NoYW5uZWxzKSk7Ci0JCQluZXh0ID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCQl9Ci0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0JCWF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoaWNoYW5zLCBuZXh0KTsKLSNlbmRpZgotCQlhdGg5a19yZWdkX3NvcnQoaWNoYW5zLCBuZXh0LAotCQkJCXNpemVvZihzdHJ1Y3QgYXRoOWtfY2hhbm5lbCksCi0JCQkJYXRoOWtfcmVnZF9jaGFuc29ydCk7Ci0KLQkJYWgtPmFoX25jaGFuID0gbmV4dDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiQ2hhbm5lbCBsaXN0OlxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZXh0OyBpKyspIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJImNoYW46ICVkIGZsYWdzOiAweCV4XG4iLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsRmxhZ3MpOwotCQl9Ci0JfQotCSpuY2hhbnMgPSBuZXh0OwotCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCi0JYWgtPmFoX2N1cnJlbnRSREluVXNlID0gcmVnZG1uOwotCWFoLT5haF9jdXJyZW50UkQ1RyA9IHJkNUdIei5yZWdEbW5FbnVtOwotCWFoLT5haF9jdXJyZW50UkQyRyA9IHJkMkdIei5yZWdEbW5FbnVtOwotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJYWgtPmFoX2lzb1swXSA9IDA7Ci0JCWFoLT5haF9pc29bMV0gPSAwOwotCX0gZWxzZSB7Ci0JCWFoLT5haF9pc29bMF0gPSBjb3VudHJ5LT5pc29OYW1lWzBdOwotCQlhaC0+YWhfaXNvWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKLQl9Ci0KLQlyZXR1cm4gbmV4dCAhPSAwOwotfQotCi1zdHJ1Y3QgYXRoOWtfY2hhbm5lbCoKLWF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmMpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmJhc2UsICpjYzsKLQotCWludCBmbGFncyA9IGMtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1M7Ci0JaW50IG4sIGxpbTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCSJjaGFubmVsICV1LzB4JXggKDB4JXgpIHJlcXVlc3RlZFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzLCBmbGFncyk7CisJCSJDb3VudHJ5IGFscGhhMiBiZWluZyB1c2VkOiAlYyVjXG4iCisJCSJSZWd1bGF0b3J5LlJlZ3BhaXIgZGV0ZWN0ZWQ6IDB4JTB4XG4iLAorCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMF0sIGFoLT5yZWd1bGF0b3J5LmFscGhhMlsxXSwKKwkJYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSk7CiAKLQljYyA9IGFoLT5haF9jdXJjaGFuOwotCWlmIChjYyAhPSBOVUxMICYmIGNjLT5jaGFubmVsID09IGMtPmNoYW5uZWwgJiYKLQkgICAgKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQlpZiAoKGNjLT5wcml2RmxhZ3MgJiBDSEFOTkVMX0lOVEVSRkVSRU5DRSkgJiYKLQkJICAgIChjYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ERlMpKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWVsc2UKLQkJCXJldHVybiBjYzsKLQl9Ci0KLQliYXNlID0gYWgtPmFoX2NoYW5uZWxzOwotCW4gPSBhaC0+YWhfbmNoYW47Ci0KLQlmb3IgKGxpbSA9IG47IGxpbSAhPSAwOyBsaW0gPj49IDEpIHsKLQkJaW50IGQ7Ci0JCWNjID0gJmJhc2VbbGltID4+IDFdOwotCQlkID0gYy0+Y2hhbm5lbCAtIGNjLT5jaGFubmVsOwotCQlpZiAoZCA9PSAwKSB7Ci0JCQlpZiAoKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQkJCWlmICgoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfSU5URVJGRVJFTkNFKSAmJgotCQkJCSAgICAoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfREZTKSkKLQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gY2M7Ci0JCQl9Ci0JCQlkID0gZmxhZ3MgLSAoY2MtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1MpOwotCQl9Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiY2hhbm5lbCAldS8weCV4IGQgJWRcbiIsCi0JCQljYy0+Y2hhbm5lbCwgY2MtPmNoYW5uZWxGbGFncywgZCk7Ci0JCWlmIChkID4gMCkgewotCQkJYmFzZSA9IGNjICsgMTsKLQkJCWxpbS0tOwotCQl9Ci0JfQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJubyBtYXRjaCBmb3IgJXUvMHgleFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAotdTMyCi1hdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IE5VTEw7Ci0KLQlpY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0JaWYgKCFpY2hhbikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gaWNoYW4tPmFudGVubmFNYXg7Ci19Ci0KLXUzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3UzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBjdGwgPSBOT19DVEw7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuOwogCi0JaWYgKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQgJiYgaXNXd3JTS1UoYWgpKSB7CisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyIHx8CisJICAgIChhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPT0gQ1RSWV9ERUZBVUxUICYmCisJICAgICBpc193d3Jfc2t1KGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSkpKSB7CiAJCWlmIChJU19DSEFOX0IoY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFCOwogCQllbHNlIGlmIChJU19DSEFOX0coY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFHOwogCQllbHNlCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFBOwotCX0gZWxzZSB7Ci0JCWljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKLQkJaWYgKGljaGFuICE9IE5VTEwpIHsKLQkJCS8qIEZJWE1FICovCi0JCQlpZiAoSVNfQ0hBTl9BKGljaGFuKSkKLQkJCQljdGwgPSBpY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMF07Ci0JCQllbHNlIGlmIChJU19DSEFOX0IoaWNoYW4pKQotCQkJCWN0bCA9IGljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXTsKLQkJCWVsc2UgaWYgKElTX0NIQU5fRyhpY2hhbikpCi0JCQkJY3RsID0gaWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzJdOwotCi0JCQlpZiAoSVNfQ0hBTl9HKGNoYW4pICYmIChjdGwgJiAweGYpID09IENUTF8xMUIpCi0JCQkJY3RsID0gKGN0bCAmIH4weGYpIHwgQ1RMXzExRzsKLQkJfQorCQlyZXR1cm4gY3RsOwogCX0KKworCWlmIChJU19DSEFOX0IoY2hhbikpCisJCWN0bCA9IGFoLT5yZWd1bGF0b3J5LnJlZ3BhaXItPnJlZ18yZ2h6X2N0bCB8IENUTF8xMUI7CisJZWxzZSBpZiAoSVNfQ0hBTl9HKGNoYW4pKQorCQljdGwgPSBhaC0+cmVndWxhdG9yeS5yZWdwYWlyLT5yZWdfMmdoel9jdGwgfCBDVExfMTFHOworCWVsc2UKKwkJY3RsID0gYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnXzVnaHpfY3RsIHwgQ1RMXzExQTsKKwogCXJldHVybiBjdGw7CiB9Ci0KLXZvaWQgYXRoOWtfcmVnZF9nZXRfY3VycmVudF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NvdW50cnlfZW50cnkgKmN0cnkpCi17Ci0JdTE2IHJkID0gYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpOwotCi0JY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGZhbHNlOwotCWlmIChyZCA9PSBDVFJZX0RFRkFVTFQpCi0JCWN0cnktPmlzTXVsdGlkb21haW4gPSB0cnVlOwotCWVsc2UgaWYgKCEocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSkKLQkJY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGlzV3dyU0tVKGFoKTsKLQotCWN0cnktPmNvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCWN0cnktPnJlZ0RtbkVudW0gPSBhaC0+YWhfY3VycmVudFJEOwotCWN0cnktPnJlZ0RtbjVHID0gYWgtPmFoX2N1cnJlbnRSRDVHOwotCWN0cnktPnJlZ0RtbjJHID0gYWgtPmFoX2N1cnJlbnRSRDJHOwotCWN0cnktPmlzb1swXSA9IGFoLT5haF9pc29bMF07Ci0JY3RyeS0+aXNvWzFdID0gYWgtPmFoX2lzb1sxXTsKLQljdHJ5LT5pc29bMl0gPSBhaC0+YWhfaXNvWzJdOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oCmluZGV4IDUxMmQ5OTAuLjhmODg1ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmgKQEAgLTE3LDEyNyArMTcsOCBAQAogI2lmbmRlZiBSRUdEX0gKICNkZWZpbmUgUkVHRF9ICiAKLSNpbmNsdWRlICJhdGg5ay5oIgotCi0jZGVmaW5lIEJNTEVOIDIKLSNkZWZpbmUgQk1aRVJPIHsodTY0KSAwLCAodTY0KSAwfQotCi0jZGVmaW5lIEJNKF9mYSwgX2ZiLCBfZmMsIF9mZCwgX2ZlLCBfZmYsIF9mZywgX2ZoLCBfZmksIF9maiwgX2ZrLCBfZmwpIFwKLQl7KCgoKF9mYSA+PSAwKSAmJiAoX2ZhIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmEpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZiID49IDApICYmIChfZmIgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mYikgOiAodTY0KSAwKSB8IFwKLQkoKChfZmMgPj0gMCkgJiYgKF9mYyA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZjKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZCA+PSAwKSAmJiAoX2ZkIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmQpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZlID49IDApICYmIChfZmUgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mZSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmYgPj0gMCkgJiYgKF9mZiA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZmKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZyA+PSAwKSAmJiAoX2ZnIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmcpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZoID49IDApICYmIChfZmggPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9maCkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmkgPj0gMCkgJiYgKF9maSA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maiA+PSAwKSAmJiAoX2ZqIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmopIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZrID49IDApICYmIChfZmsgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9maykgOiAodTY0KSAwKSB8IFwKLQkoKChfZmwgPj0gMCkgJiYgKF9mbCA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZsKSA6ICh1NjQpIDApIHwgXAotCQkJKCgoKF9mYSA+IDYzKSAmJiAoX2ZhIDwgMTI4KSkgPyBcCi0JCQkoKCh1NjQpIDEpIDw8IChfZmEgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZiID4gNjMpICYmIChfZmIgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZiIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYyA+IDYzKSAmJiAoX2ZjIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mYyAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmQgPiA2MykgJiYgKF9mZCA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmQgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZlID4gNjMpICYmIChfZmUgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZlIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZiA+IDYzKSAmJiAoX2ZmIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mZiAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmcgPiA2MykgJiYgKF9mZyA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmcgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZoID4gNjMpICYmIChfZmggPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZoIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maSA+IDYzKSAmJiAoX2ZpIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9maSAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmogPiA2MykgJiYgKF9maiA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmogLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZrID4gNjMpICYmIChfZmsgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZrIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mbCA+IDYzKSAmJiAoX2ZsIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mbCAtIDY0KSkgOiAodTY0KSAwKSkpfQotCi0jZGVmaW5lIERFRl9SRUdETU4gICAgICBGQ0MxX0ZDQ0EKLSNkZWZpbmUgREVGX0RNTl81ICAgICAgIEZDQzEKLSNkZWZpbmUgREVGX0RNTl8yICAgICAgIEZDQ0EKICNkZWZpbmUgQ09VTlRSWV9FUkRfRkxBRyAgICAgICAgMHg4MDAwCiAjZGVmaW5lIFdPUkxEV0lERV9ST0FNSU5HX0ZMQUcgIDB4NDAwMAotI2RlZmluZSBTVVBFUl9ET01BSU5fTUFTSyAgIDB4MGZmZgotI2RlZmluZSBDT1VOVFJZX0NPREVfTUFTSyAgIDB4M2ZmZgotI2RlZmluZSBDRl9JTlRFUkZFUkVOQ0UgICAgIChDSEFOTkVMX0NXX0lOVCB8IENIQU5ORUxfUkFEQVJfSU5UKQotI2RlZmluZSBDSEFOTkVMXzE0ICAgICAgKDI0ODQpCi0jZGVmaW5lIElTXzExR19DSDE0KF9jaCxfY2YpIFwKLSAgICAoKChfY2gpID09IENIQU5ORUxfMTQpICYmICgoX2NmKSA9PSBDSEFOTkVMX0cpKQotCi0jZGVmaW5lIE5PX1BTQ0FOICAgIDB4MFVMTAotI2RlZmluZSBQU0NBTl9GQ0MgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwKLSNkZWZpbmUgUFNDQU5fRkNDX1QgMHgwMDAwMDAwMDAwMDAwMDAyVUxMCi0jZGVmaW5lIFBTQ0FOX0VUU0kgIDB4MDAwMDAwMDAwMDAwMDAwNFVMTAotI2RlZmluZSBQU0NBTl9NS0sxICAweDAwMDAwMDAwMDAwMDAwMDhVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMiAgMHgwMDAwMDAwMDAwMDAwMDEwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0EgIDB4MDAwMDAwMDAwMDAwMDAyMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBX0cgICAgMHgwMDAwMDAwMDAwMDAwMDQwVUxMCi0jZGVmaW5lIFBTQ0FOX0VUU0lBIDB4MDAwMDAwMDAwMDAwMDA4MFVMTAotI2RlZmluZSBQU0NBTl9FVFNJQiAweDAwMDAwMDAwMDAwMDAxMDBVTEwKLSNkZWZpbmUgUFNDQU5fRVRTSUMgMHgwMDAwMDAwMDAwMDAwMjAwVUxMCi0jZGVmaW5lIFBTQ0FOX1dXUiAgIDB4MDAwMDAwMDAwMDAwMDQwMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBMSAweDAwMDAwMDAwMDAwMDA4MDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTFfRyAgIDB4MDAwMDAwMDAwMDAwMTAwMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBMiAweDAwMDAwMDAwMDAwMDIwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTJfRyAgIDB4MDAwMDAwMDAwMDAwNDAwMFVMTAotI2RlZmluZSBQU0NBTl9NS0szICAweDAwMDAwMDAwMDAwMDgwMDBVTEwKLSNkZWZpbmUgUFNDQU5fREVGRVIgMHg3RkZGRkZGRkZGRkZGRkZGVUxMCi0jZGVmaW5lIElTX0VDTV9DSEFOIDB4ODAwMDAwMDAwMDAwMDAwMFVMTAotCi0jZGVmaW5lIGlzV3dyU0tVKF9haCkgXAotCSgoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKChfYWgpKSAmIFdPUkxEX1NLVV9NQVNLKSA9PSBcCi0JCVdPUkxEX1NLVV9QUkVGSVgpIHx8IFwKLQkJKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKF9haCkgPT0gV09STEQpKQotCi0jZGVmaW5lIGlzV3dyU0tVX05vTWlkYmFuZChfYWgpIFwKLQkoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKChfYWgpKSA9PSBXT1IzX1dPUkxEKSB8fCBcCi0JKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKF9haCkgPT0gV09SNF9XT1JMRCkgfHwgXAotCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUjVfRVRTSUMpKQotCi0jZGVmaW5lIGlzVU5JSTFPZGRDaGFuKGNoKSBcCi0JKChjaCA9PSA1MTcwKSB8fCAoY2ggPT0gNTE5MCkgfHwgKGNoID09IDUyMTApIHx8IChjaCA9PSA1MjMwKSkKLQotI2RlZmluZSBJU19IVDQwX01PREUoX21vZGUpCQkJCQlcCi0JKCgoX21vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTICB8fAkJXAotCSAgIF9tb2RlID09IEFUSDlLX01PREVfMTFOR19IVDQwUExVUyAgICB8fAkJXAotCSAgIF9tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMgICB8fAkJXAotCSAgIF9tb2RlID09IEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMpID8gdHJ1ZSA6IGZhbHNlKSkKLQotI2RlZmluZSBDSEFOX0ZMQUdTICAgICAgKENIQU5ORUxfQUxMfENIQU5ORUxfSEFMRnxDSEFOTkVMX1FVQVJURVIpCi0KLSNkZWZpbmUgc3dhcF9hcnJheShfYSwgX2IsIF9zaXplKSB7ICAgICAgICAgICAgICAgICAgIFwKLQl1OCAqcyA9IF9iOyAgICAgICAgICAgICAgICAgICAgICAgXAotCWludCBpID0gX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJdTggdG1wID0gKl9hOyAgICAgICAgICAgICBcCi0JCSpfYSsrID0gKnM7ICAgICAgICAgICAgICAgICAgICAgXAotCQkqcysrID0gdG1wOyAgICAgICAgICAgICAgICAgICAgIFwKLQl9IHdoaWxlICgtLWkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCV9hIC09IF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLQotI2RlZmluZSBIQUxGX01BWENIQU5CVyAgICAgICAgICAxMAogCiAjZGVmaW5lIE1VTFRJX0RPTUFJTl9NQVNLIDB4RkYwMAogCkBAIC0xNDcsODEgKzI4LDI3IEBACiAjZGVmaW5lIENIQU5ORUxfSEFMRl9CVyAgICAgICAgIDEwCiAjZGVmaW5lIENIQU5ORUxfUVVBUlRFUl9CVyAgICAgIDUKIAotdHlwZWRlZiBpbnQgYXRoX2hhbF9jbXBfdChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci0KIHN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyB7CiAJdTE2IHJlZ0RtbkVudW07Ci0JdTE2IHJlZ0RtbjVHSHo7Ci0JdTE2IHJlZ0RtbjJHSHo7Ci0JdTMyIGZsYWdzNUdIejsKLQl1MzIgZmxhZ3MyR0h6OwotCXU2NCBwc2Nhbk1hc2s7Ci0JdTE2IHNpbmdsZUNDOwotfTsKLQotc3RydWN0IGNjbWFwIHsKLQljaGFyIGlzb05hbWVbM107Ci0JdTE2IGNvdW50cnlDb2RlOworCXUxNiByZWdfNWdoel9jdGw7CisJdTE2IHJlZ18yZ2h6X2N0bDsKIH07CiAKIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCB7CiAJdTE2IGNvdW50cnlDb2RlOwogCXUxNiByZWdEbW5FbnVtOwogCWNvbnN0IGNoYXIgKmlzb05hbWU7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlib29sIGFsbG93MTFnOwotCWJvb2wgYWxsb3cxMWFUdXJibzsKLQlib29sIGFsbG93MTFnVHVyYm87Ci0JYm9vbCBhbGxvdzExbmcyMDsKLQlib29sIGFsbG93MTFuZzQwOwotCWJvb2wgYWxsb3cxMW5hMjA7Ci0JYm9vbCBhbGxvdzExbmE0MDsKLQl1MTYgb3V0ZG9vckNoYW5TdGFydDsKIH07CiAKLXN0cnVjdCBSZWdEbW5GcmVxQmFuZCB7Ci0JdTE2IGxvd0NoYW5uZWw7Ci0JdTE2IGhpZ2hDaGFubmVsOwotCXU4IHBvd2VyRGZzOwotCXU4IGFudGVubmFNYXg7Ci0JdTggY2hhbm5lbEJXOwotCXU4IGNoYW5uZWxTZXA7Ci0JdTY0IHVzZURmczsKLQl1NjQgdXNlUGFzc1NjYW47Ci0JdTggcmVnQ2xhc3NJZDsKLX07Ci0KLXN0cnVjdCByZWdEb21haW4gewotCXUxNiByZWdEbW5FbnVtOwotCXU4IGNvbmZvcm1hbmNlVGVzdExpbWl0OwotCXU2NCBkZnNNYXNrOwotCXU2NCBwc2NhbjsKLQl1MzIgZmxhZ3M7Ci0JdTY0IGNoYW4xMWFbQk1MRU5dOwotCXU2NCBjaGFuMTFhX3R1cmJvW0JNTEVOXTsKLQl1NjQgY2hhbjExYV9keW5fdHVyYm9bQk1MRU5dOwotCXU2NCBjaGFuMTFiW0JNTEVOXTsKLQl1NjQgY2hhbjExZ1tCTUxFTl07Ci0JdTY0IGNoYW4xMWdfdHVyYm9bQk1MRU5dOwotfTsKLQotc3RydWN0IGNtb2RlIHsKLQl1MzIgbW9kZTsKLQl1MzIgZmxhZ3M7Ci19OwotCi0jZGVmaW5lIFlFUyB0cnVlCi0jZGVmaW5lIE5PICBmYWxzZQotCi1zdHJ1Y3QgamFwYW5fYmFuZGNoZWNrIHsKLQl1MTYgZnJlcWJhbmRiaXQ7Ci0JdTMyIGVlcHJvbWZsYWd0b2NoZWNrOwotfTsKLQotc3RydWN0IGNvbW1vbl9tb2RlX3Bvd2VyIHsKLQl1MTYgbGNoYW47Ci0JdTE2IGhjaGFuOwotCXU4IHB3cmx2bDsKK3N0cnVjdCBhdGg5a19yZWd1bGF0b3J5IHsKKwljaGFyIGFscGhhMlsyXTsKKwl1MTYgY291bnRyeV9jb2RlOworCXUxNiBtYXhfcG93ZXJfbGV2ZWw7CisJdTMyIHRwX3NjYWxlOworCXUxNiBjdXJyZW50X3JkOworCXUxNiBjdXJyZW50X3JkX2V4dDsKKwlpbnQxNl90IHBvd2VyX2xpbWl0OworCXN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyAqcmVncGFpcjsKIH07CiAKIGVudW0gQ291bnRyeUNvZGUgewpAQCAtNDA2LDcgKzIzMywxNSBAQAogCUNUUllfQkVMR0lVTTIgPSA1MDAyCiB9OwogCi12b2lkIGF0aDlrX3JlZ2RfZ2V0X2N1cnJlbnRfY291bnRyeShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5ICpjdHJ5KTsKK2Jvb2wgYXRoOWtfaXNfd29ybGRfcmVnZChzdHJ1Y3QgYXRoX2h3ICphaCk7Citjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfd29ybGRfcmVnZG9tYWluKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICphdGg5a19kZWZhdWx0X3dvcmxkX3JlZ2RvbWFpbih2b2lkKTsKK3ZvaWQgYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcik7Cit2b2lkIGF0aDlrX3JlZ19hcHBseV9yYWRhcl9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKK2ludCBhdGg5a19yZWdkX2luaXQoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19yZWdkX2lzX2VlcHJvbV92YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXRoOWtfcmVnZF9nZXRfY3RsKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitpbnQgYXRoOWtfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2RfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oCmluZGV4IDZkZjFiM2IuLmI0MWQwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2RfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZF9jb21tb24uaApAQCAtMTUwLDE3NjYgKzE1MCwzMjQgQEAKIAlNS0s5X01LS0MgPSAweEZFLAogCU1LSzlfTUtLQTIgPSAweEZGLAogCi0JQVBMMSA9IDB4MDE1MCwKLQlBUEwyID0gMHgwMjUwLAotCUFQTDMgPSAweDAzNTAsCi0JQVBMNCA9IDB4MDQ1MCwKLQlBUEw1ID0gMHgwNTUwLAotCUFQTDYgPSAweDA2NTAsCi0JQVBMNyA9IDB4MDc1MCwKLQlBUEw4ID0gMHgwODUwLAotCUFQTDkgPSAweDA5NTAsCi0JQVBMMTAgPSAweDEwNTAsCi0KLQlFVFNJMSA9IDB4MDEzMCwKLQlFVFNJMiA9IDB4MDIzMCwKLQlFVFNJMyA9IDB4MDMzMCwKLQlFVFNJNCA9IDB4MDQzMCwKLQlFVFNJNSA9IDB4MDUzMCwKLQlFVFNJNiA9IDB4MDYzMCwKLQlFVFNJQSA9IDB4MEEzMCwKLQlFVFNJQiA9IDB4MEIzMCwKLQlFVFNJQyA9IDB4MEMzMCwKLQotCUZDQzEgPSAweDAxMTAsCi0JRkNDMiA9IDB4MDEyMCwKLQlGQ0MzID0gMHgwMTYwLAotCUZDQzQgPSAweDAxNjUsCi0JRkNDNSA9IDB4MDUxMCwKLQlGQ0M2ID0gMHgwNjEwLAotCUZDQ0EgPSAweDBBMTAsCi0KLQlBUExEID0gMHgwRDUwLAotCi0JTUtLMSA9IDB4MDE0MCwKLQlNS0syID0gMHgwMjQwLAotCU1LSzMgPSAweDAzNDAsCi0JTUtLNCA9IDB4MDQ0MCwKLQlNS0s1ID0gMHgwNTQwLAotCU1LSzYgPSAweDA2NDAsCi0JTUtLNyA9IDB4MDc0MCwKLQlNS0s4ID0gMHgwODQwLAotCU1LSzkgPSAweDA5NDAsCi0JTUtLMTAgPSAweDBCNDAsCi0JTUtLMTEgPSAweDExNDAsCi0JTUtLMTIgPSAweDEyNDAsCi0JTUtLMTMgPSAweDBDNDAsCi0JTUtLMTQgPSAweDE0NDAsCi0JTUtLMTUgPSAweDE1NDAsCi0JTUtLQSA9IDB4MEE0MCwKLQlNS0tDID0gMHgwQTUwLAotCi0JTlVMTDEgPSAweDAxOTgsCiAJV09STEQgPSAweDAxOTksCiAJREVCVUdfUkVHX0RNTiA9IDB4MDFmZiwKIH07CiAKLWVudW0gewotCUZDQyA9IDB4MTAsCi0JTUtLID0gMHg0MCwKLQlFVFNJID0gMHgzMCwKK2VudW0gY3RsX2dyb3VwIHsKKwlDVExfRkNDID0gMHgxMCwKKwlDVExfTUtLID0gMHg0MCwKKwlDVExfRVRTSSA9IDB4MzAsCiB9OwogCi1lbnVtIHsKLQlOT19SRVEgPSAweDAwMDAwMDAwLAotCURJU0FMTE9XX0FESE9DXzExQSA9IDB4MDAwMDAwMDEsCi0JRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgPSAweDAwMDAwMDAyLAotCU5FRURfTkZDID0gMHgwMDAwMDAwNCwKLQotCUFESE9DX1BFUl8xMUQgPSAweDAwMDAwMDA4LAotCUFESE9DX05PXzExQSA9IDB4MDAwMDAwMTAsCi0KLQlQVUJMSUNfU0FGRVRZX0RPTUFJTiA9IDB4MDAwMDAwMjAsCi0JTElNSVRfRlJBTUVfNE1TID0gMHgwMDAwMDA0MCwKLQotCU5PX0hPU1RBUCA9IDB4MDAwMDAwODAsCi0KLQlSRVFfTUFTSyA9IDB4MDAwMDAwRkYsCi19OwotCi0jZGVmaW5lIFJFR19ET01BSU5fMkdIWl9NQVNLICAgIChSRVFfTUFTSyAmIFwKLQkofihBREhPQ19OT18xMUEgfCBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQikpKQotI2RlZmluZSBSRUdfRE9NQUlOXzVHSFpfTUFTSyAgICBSRVFfTUFTSwotCisvKiBSZWdwYWlyIHRvIENUTCBiYW5kIG1hcHBpbmcgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgcmVnRG9tYWluUGFpcnNbXSA9IHsKLQl7Tk9fRU5VTVJELCBERUJVR19SRUdfRE1OLCBERUJVR19SRUdfRE1OLCBOT19SRVEsIE5PX1JFUSwKLQkgUFNDQU5fREVGRVIsIDB9LAotCXtOVUxMMV9XT1JMRCwgTlVMTDEsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtOVUxMMV9FVFNJQiwgTlVMTDEsIEVUU0lCLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtOVUxMMV9FVFNJQywgTlVMTDEsIEVUU0lDLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCS8qIHJlZ3BhaXIsIDUgR0h6IENUTCwgMiBHSHogQ1RMICovCisJe05PX0VOVU1SRCwgREVCVUdfUkVHX0RNTiwgREVCVUdfUkVHX0RNTn0sCisJe05VTEwxX1dPUkxELCBOT19DVEwsIENUTF9FVFNJfSwKKwl7TlVMTDFfRVRTSUIsIE5PX0NUTCwgQ1RMX0VUU0l9LAorCXtOVUxMMV9FVFNJQywgTk9fQ1RMLCBDVExfRVRTSX0sCiAKLQl7RkNDMl9GQ0NBLCBGQ0MyLCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MyX1dPUkxELCBGQ0MyLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDMl9FVFNJQywgRkNDMiwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzNfRkNDQSwgRkNDMywgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDM19XT1JMRCwgRkNDMywgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzRfRkNDQSwgRkNDNCwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtGQ0M1X0ZDQ0EsIEZDQzUsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzZfRkNDQSwgRkNDNiwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNl9XT1JMRCwgRkNDNiwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJe0ZDQzJfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzJfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7RkNDMl9FVFNJQywgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtGQ0MzX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtGQ0MzX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzRfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzVfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzZfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzZfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKIAotCXtFVFNJMV9XT1JMRCwgRVRTSTEsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0VUU0kyX1dPUkxELCBFVFNJMiwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTNfV09STEQsIEVUU0kzLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJNF9XT1JMRCwgRVRTSTQsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0VUU0k1X1dPUkxELCBFVFNJNSwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTZfV09STEQsIEVUU0k2LCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAorCXtFVFNJMV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTJfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0VUU0kzX1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJNF9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTVfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0VUU0k2X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAogCi0Je0VUU0kzX0VUU0lBLCBFVFNJMywgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RlJBTkNFX1JFUywgRVRTSTMsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCS8qIFhYWDogRm9yIEVUU0kzX0VUU0lBLCBXYXMgTk9fQ1RMIG1lYW50IGZvciB0aGUgMiBHSHogYmFuZCA/ICovCisJe0VUU0kzX0VUU0lBLCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtGUkFOQ0VfUkVTLCBDVExfRVRTSSwgQ1RMX0VUU0l9LAogCi0Je0ZDQzFfV09STEQsIEZDQzEsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MxX0ZDQ0EsIEZDQzEsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDFfV09STEQsIEFQTDEsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwyX1dPUkxELCBBUEwyLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMM19XT1JMRCwgQVBMMywgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDRfV09STEQsIEFQTDQsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEw1X1dPUkxELCBBUEw1LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMNl9XT1JMRCwgQVBMNiwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDhfV09STEQsIEFQTDgsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEw5X1dPUkxELCBBUEw5LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKKwl7RkNDMV9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtGQ0MxX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtBUEwxX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDJfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMM19XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEw0X1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDVfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMNl9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7QVBMOF9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7QVBMOV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKIAotCXtBUEwzX0ZDQ0EsIEFQTDMsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDFfRVRTSUMsIEFQTDEsIEVUU0lDLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwyX0VUU0lDLCBBUEwyLCBFVFNJQywgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMl9BUExELCBBUEwyLCBBUExELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsfSwKKwl7QVBMM19GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7QVBMMV9FVFNJQywgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEwyX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDJfQVBMRCwgQ1RMX0ZDQywgTk9fQ1RMfSwKIAotCXtNS0sxX01LS0EsIE1LSzEsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQSwgQ1RSWV9KQVBBTn0sCi0Je01LSzFfTUtLQiwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMX0sCi0Je01LSzFfRkNDQSwgTUtLMSwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEsIENUUllfSkFQQU4yfSwKLQl7TUtLMV9NS0tBMSwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU40fSwKLQl7TUtLMV9NS0tBMiwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU41fSwKLQl7TUtLMV9NS0tDLCBNS0sxLCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjZ9LAorCXtNS0sxX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0sxX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMl9NS0tBLCBNS0syLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMiB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4zfSwKKwl7TUtLMl9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAogCi0Je01LSzNfTUtLQSwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EsIENUUllfSkFQQU4yNX0sCi0Je01LSzNfTUtLQiwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU43fSwKLQl7TUtLM19NS0tBMSwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjI2fSwKLQl7TUtLM19NS0tBMiwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjh9LAotCXtNS0szX01LS0MsIE1LSzMsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjl9LAotCXtNS0szX0ZDQ0EsIE1LSzMsIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjI3fSwKKwl7TUtLNF9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNF9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNF9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAogCi0Je01LSzRfTUtLQSwgTUtLNCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU4zNn0sCi0Je01LSzRfTUtLQiwgTUtLNCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMTB9LAotCXtNS0s0X01LS0ExLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjI4fSwKLQl7TUtLNF9NS0tBMiwgTUtLNCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU4xMX0sCi0Je01LSzRfTUtLQywgTUtLNCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU4xMn0sCi0Je01LSzRfRkNDQSwgTUtLNCwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU4yOX0sCisJe01LSzVfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzVfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s1X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzVfTUtLQiwgTUtLNSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMTN9LAotCXtNS0s1X01LS0EyLCBNS0s1LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjE0fSwKLQl7TUtLNV9NS0tDLCBNS0s1LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjE1fSwKKwl7TUtLNl9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNl9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s2X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s2X0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAogCi0Je01LSzZfTUtLQiwgTUtLNiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLCBDVFJZX0pBUEFOMTZ9LAotCXtNS0s2X01LS0ExLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjMwfSwKLQl7TUtLNl9NS0tBMiwgTUtLNiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU4xN30sCi0Je01LSzZfTUtLQywgTUtLNiwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEsIENUUllfSkFQQU4xOH0sCi0Je01LSzZfRkNDQSwgTUtLNiwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMzF9LAorCXtNS0s3X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s3X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzdfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzdfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLN19NS0tCLCBNS0s3LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMTl9LAotCXtNS0s3X01LS0ExLCBNS0s3LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjMyfSwKLQl7TUtLN19NS0tBMiwgTUtLNywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLAotCSBDVFJZX0pBUEFOMjB9LAotCXtNS0s3X01LS0MsIE1LSzcsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjIxfSwKLQl7TUtLN19GQ0NBLCBNS0s3LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU4zM30sCisJe01LSzhfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzhfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s4X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzhfTUtLQiwgTUtLOCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjIyfSwKLQl7TUtLOF9NS0tBMiwgTUtLOCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLAotCSBDVFJZX0pBUEFOMjN9LAotCXtNS0s4X01LS0MsIE1LSzgsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjI0fSwKKwl7TUtLOV9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOV9GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKKwl7TUtLOV9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzlfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s5X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzlfTUtLQSwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjM0fSwKLQl7TUtLOV9GQ0NBLCBNS0s5LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zN30sCi0Je01LSzlfTUtLQTEsIE1LSzksIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU4zOH0sCi0Je01LSzlfTUtLQTIsIE1LSzksIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU40MH0sCi0Je01LSzlfTUtLQywgTUtLOSwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMzl9LAorCXtNS0sxMF9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTBfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzEwX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTBfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMF9NS0tBLCBNS0sxMCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMzV9LAotCXtNS0sxMF9GQ0NBLCBNS0sxMCwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFONDF9LAotCXtNS0sxMF9NS0tBMSwgTUtLMTAsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU40Mn0sCi0Je01LSzEwX01LS0EyLCBNS0sxMCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQ0fSwKLQl7TUtLMTBfTUtLQywgTUtLMTAsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjQzfSwKKwl7TUtLMTFfTUtLQSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzExX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0sxMV9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzExX01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMTFfTUtLQSwgTUtLMTEsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFONDV9LAotCXtNS0sxMV9GQ0NBLCBNS0sxMSwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU40Nn0sCi0Je01LSzExX01LS0ExLCBNS0sxMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU40N30sCi0Je01LSzExX01LS0EyLCBNS0sxMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU40OX0sCi0Je01LSzExX01LS0MsIE1LSzExLCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjQ4fSwKKwl7TUtLMTJfTUtLQSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzEyX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0sxMl9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzEyX01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMTJfTUtLQSwgTUtLMTIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjUwfSwKLQl7TUtLMTJfRkNDQSwgTUtLMTIsIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjUxfSwKLQl7TUtLMTJfTUtLQTEsIE1LSzEyLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csCi0JIENUUllfSkFQQU41Mn0sCi0Je01LSzEyX01LS0EyLCBNS0sxMiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLAotCSBDVFJZX0pBUEFONTR9LAotCXtNS0sxMl9NS0tDLCBNS0sxMiwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTN9LAorCXtNS0sxM19NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTRfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxNV9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMTNfTUtLQiwgTUtLMTMsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfAotCSBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU41N30sCi0KLQl7TUtLMTRfTUtLQTEsIE1LSzE0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjU4fSwKLQl7TUtLMTVfTUtLQTEsIE1LSzE1LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjU5fSwKLQotCXtXT1IwX1dPUkxELCBXT1IwX1dPUkxELCBXT1IwX1dPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1IxX1dPUkxELCBXT1IxX1dPUkxELCBXT1IxX1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjJfV09STEQsIFdPUjJfV09STEQsIFdPUjJfV09STEQsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SM19XT1JMRCwgV09SM19XT1JMRCwgV09SM19XT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SNF9XT1JMRCwgV09SNF9XT1JMRCwgV09SNF9XT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1I1X0VUU0lDLCBXT1I1X0VUU0lDLCBXT1I1X0VUU0lDLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjAxX1dPUkxELCBXT1IwMV9XT1JMRCwgV09SMDFfV09STEQsIE5PX1JFUSwgTk9fUkVRLAotCSBQU0NBTl9ERUZFUiwgMH0sCi0Je1dPUjAyX1dPUkxELCBXT1IwMl9XT1JMRCwgV09SMDJfV09STEQsIE5PX1JFUSwgTk9fUkVRLAotCSBQU0NBTl9ERUZFUiwgMH0sCi0Je0VVMV9XT1JMRCwgRVUxX1dPUkxELCBFVTFfV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je1dPUjlfV09STEQsIFdPUjlfV09STEQsIFdPUjlfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SQV9XT1JMRCwgV09SQV9XT1JMRCwgV09SQV9XT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1JCX1dPUkxELCBXT1JCX1dPUkxELCBXT1JCX1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCisJe1dPUjBfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1IyX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjNfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SNF9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1I1X0VUU0lDLCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjAxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjAyX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe0VVMV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1I5X1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUkFfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SQl9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAogfTsKIAotI2RlZmluZQlOT19JTlRFUlNFQ1RfUkVRCTB4RkZGRkZGRkYKLSNkZWZpbmUJTk9fVU5JT05fUkVRCQkwCi0KIHN0YXRpYyBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgYWxsQ291bnRyaWVzW10gPSB7Ci0Je0NUUllfREVCVUcsIE5PX0VOVU1SRCwgIkRCIiwgIkRFQlVHIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9ERUZBVUxULCBERUZfUkVHRE1OLCAiTkEiLCAiTk9fQ09VTlRSWV9TRVQiLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0FMQkFOSUEsIE5VTEwxX1dPUkxELCAiQUwiLCAiQUxCQU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLCBOTywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BTEdFUklBLCBOVUxMMV9XT1JMRCwgIkRaIiwgIkFMR0VSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgTk8sCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfQVJHRU5USU5BLCBBUEwzX1dPUkxELCAiQVIiLCAiQVJHRU5USU5BIiwgWUVTLCBOTywgTk8sIFlFUywKLQkgTk8sIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0FSTUVOSUEsIEVUU0k0X1dPUkxELCAiQU0iLCAiQVJNRU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfQVVTVFJBTElBLCBGQ0MyX1dPUkxELCAiQVUiLCAiQVVTVFJBTElBIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUkFMSUEyLCBGQ0M2X1dPUkxELCAiQVUiLCAiQVVTVFJBTElBMiIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQVVTVFJJQSwgRVRTSTFfV09STEQsICJBVCIsICJBVVNUUklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0FaRVJCQUlKQU4sIEVUU0k0X1dPUkxELCAiQVoiLCAiQVpFUkJBSUpBTiIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkFIUkFJTiwgQVBMNl9XT1JMRCwgIkJIIiwgIkJBSFJBSU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9CRUxBUlVTLCBFVFNJMV9XT1JMRCwgIkJZIiwgIkJFTEFSVVMiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkVMR0lVTSwgRVRTSTFfV09STEQsICJCRSIsICJCRUxHSVVNIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JFTEdJVU0yLCBFVFNJNF9XT1JMRCwgIkJMIiwgIkJFTEdJVU0iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkVMSVpFLCBBUEwxX0VUU0lDLCAiQloiLCAiQkVMSVpFIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CT0xJVklBLCBBUEwxX0VUU0lDLCAiQk8iLCAiQk9MVklBIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CT1NOSUFfSEVSWiwgRVRTSTFfV09STEQsICJCQSIsICJCT1NOSUFfSEVSWkdPV0lOQSIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JSQVpJTCwgRkNDM19XT1JMRCwgIkJSIiwgIkJSQVpJTCIsIFlFUywgTk8sIE5PLCBZRVMsIE5PLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9CUlVORUlfREFSVVNTQUxBTSwgQVBMMV9XT1JMRCwgIkJOIiwgIkJSVU5FSSBEQVJVU1NBTEFNIiwKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CVUxHQVJJQSwgRVRTSTZfV09STEQsICJCRyIsICJCVUxHQVJJQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DQU5BREEsIEZDQzJfRkNDQSwgIkNBIiwgIkNBTkFEQSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ0FOQURBMiwgRkNDNl9GQ0NBLCAiQ0EiLCAiQ0FOQURBMiIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ0hJTEUsIEFQTDZfV09STEQsICJDTCIsICJDSElMRSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ0hJTkEsIEFQTDFfV09STEQsICJDTiIsICJDSElOQSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ09MT01CSUEsIEZDQzFfRkNDQSwgIkNPIiwgIkNPTE9NQklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQ09TVEFfUklDQSwgRkNDMV9XT1JMRCwgIkNSIiwgIkNPU1RBIFJJQ0EiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9DUk9BVElBLCBFVFNJM19XT1JMRCwgIkhSIiwgIkNST0FUSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9DWVBSVVMsIEVUU0kxX1dPUkxELCAiQ1kiLCAiQ1lQUlVTIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DWkVDSCwgRVRTSTNfV09STEQsICJDWiIsICJDWkVDSCBSRVBVQkxJQyIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9ERU5NQVJLLCBFVFNJMV9XT1JMRCwgIkRLIiwgIkRFTk1BUksiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRE9NSU5JQ0FOX1JFUFVCTElDLCBGQ0MxX0ZDQ0EsICJETyIsICJET01JTklDQU4gUkVQVUJMSUMiLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0VDVUFET1IsIEZDQzFfV09STEQsICJFQyIsICJFQ1VBRE9SIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9FR1lQVCwgRVRTSTNfV09STEQsICJFRyIsICJFR1lQVCIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VMX1NBTFZBRE9SLCBGQ0MxX1dPUkxELCAiU1YiLCAiRUwgU0FMVkFET1IiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9FU1RPTklBLCBFVFNJMV9XT1JMRCwgIkVFIiwgIkVTVE9OSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRklOTEFORCwgRVRTSTFfV09STEQsICJGSSIsICJGSU5MQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0ZSQU5DRSwgRVRTSTFfV09STEQsICJGUiIsICJGUkFOQ0UiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfR0VPUkdJQSwgRVRTSTRfV09STEQsICJHRSIsICJHRU9SR0lBIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HRVJNQU5ZLCBFVFNJMV9XT1JMRCwgIkRFIiwgIkdFUk1BTlkiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfR1JFRUNFLCBFVFNJMV9XT1JMRCwgIkdSIiwgIkdSRUVDRSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HVUFURU1BTEEsIEZDQzFfRkNDQSwgIkdUIiwgIkdVQVRFTUFMQSIsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSE9ORFVSQVMsIE5VTEwxX1dPUkxELCAiSE4iLCAiSE9ORFVSQVMiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0hPTkdfS09ORywgRkNDMl9XT1JMRCwgIkhLIiwgIkhPTkcgS09ORyIsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSFVOR0FSWSwgRVRTSTFfV09STEQsICJIVSIsICJIVU5HQVJZIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lDRUxBTkQsIEVUU0kxX1dPUkxELCAiSVMiLCAiSUNFTEFORCIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9JTkRJQSwgQVBMNl9XT1JMRCwgIklOIiwgIklORElBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfSU5ET05FU0lBLCBBUEwxX1dPUkxELCAiSUQiLCAiSU5ET05FU0lBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfSVJBTiwgQVBMMV9XT1JMRCwgIklSIiwgIklSQU4iLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIDcwMDB9LAotCXtDVFJZX0lSRUxBTkQsIEVUU0kxX1dPUkxELCAiSUUiLCAiSVJFTEFORCIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9JU1JBRUwsIE5VTEwxX1dPUkxELCAiSUwiLCAiSVNSQUVMIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9JVEFMWSwgRVRTSTFfV09STEQsICJJVCIsICJJVEFMWSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQU1BSUNBLCBFVFNJMV9XT1JMRCwgIkpNIiwgIkpBTUFJQ0EiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCisJe0NUUllfREVCVUcsIE5PX0VOVU1SRCwgIkRCIn0sCisJe0NUUllfREVGQVVMVCwgRkNDMV9GQ0NBLCAiQ08ifSwKKwl7Q1RSWV9BTEJBTklBLCBOVUxMMV9XT1JMRCwgIkFMIn0sCisJe0NUUllfQUxHRVJJQSwgTlVMTDFfV09STEQsICJEWiJ9LAorCXtDVFJZX0FSR0VOVElOQSwgQVBMM19XT1JMRCwgIkFSIn0sCisJe0NUUllfQVJNRU5JQSwgRVRTSTRfV09STEQsICJBTSJ9LAorCXtDVFJZX0FVU1RSQUxJQSwgRkNDMl9XT1JMRCwgIkFVIn0sCisJe0NUUllfQVVTVFJBTElBMiwgRkNDNl9XT1JMRCwgIkFVIn0sCisJe0NUUllfQVVTVFJJQSwgRVRTSTFfV09STEQsICJBVCJ9LAorCXtDVFJZX0FaRVJCQUlKQU4sIEVUU0k0X1dPUkxELCAiQVoifSwKKwl7Q1RSWV9CQUhSQUlOLCBBUEw2X1dPUkxELCAiQkgifSwKKwl7Q1RSWV9CRUxBUlVTLCBFVFNJMV9XT1JMRCwgIkJZIn0sCisJe0NUUllfQkVMR0lVTSwgRVRTSTFfV09STEQsICJCRSJ9LAorCXtDVFJZX0JFTEdJVU0yLCBFVFNJNF9XT1JMRCwgIkJMIn0sCisJe0NUUllfQkVMSVpFLCBBUEwxX0VUU0lDLCAiQloifSwKKwl7Q1RSWV9CT0xJVklBLCBBUEwxX0VUU0lDLCAiQk8ifSwKKwl7Q1RSWV9CT1NOSUFfSEVSWiwgRVRTSTFfV09STEQsICJCQSJ9LAorCXtDVFJZX0JSQVpJTCwgRkNDM19XT1JMRCwgIkJSIn0sCisJe0NUUllfQlJVTkVJX0RBUlVTU0FMQU0sIEFQTDFfV09STEQsICJCTiJ9LAorCXtDVFJZX0JVTEdBUklBLCBFVFNJNl9XT1JMRCwgIkJHIn0sCisJe0NUUllfQ0FOQURBLCBGQ0MyX0ZDQ0EsICJDQSJ9LAorCXtDVFJZX0NBTkFEQTIsIEZDQzZfRkNDQSwgIkNBIn0sCisJe0NUUllfQ0hJTEUsIEFQTDZfV09STEQsICJDTCJ9LAorCXtDVFJZX0NISU5BLCBBUEwxX1dPUkxELCAiQ04ifSwKKwl7Q1RSWV9DT0xPTUJJQSwgRkNDMV9GQ0NBLCAiQ08ifSwKKwl7Q1RSWV9DT1NUQV9SSUNBLCBGQ0MxX1dPUkxELCAiQ1IifSwKKwl7Q1RSWV9DUk9BVElBLCBFVFNJM19XT1JMRCwgIkhSIn0sCisJe0NUUllfQ1lQUlVTLCBFVFNJMV9XT1JMRCwgIkNZIn0sCisJe0NUUllfQ1pFQ0gsIEVUU0kzX1dPUkxELCAiQ1oifSwKKwl7Q1RSWV9ERU5NQVJLLCBFVFNJMV9XT1JMRCwgIkRLIn0sCisJe0NUUllfRE9NSU5JQ0FOX1JFUFVCTElDLCBGQ0MxX0ZDQ0EsICJETyJ9LAorCXtDVFJZX0VDVUFET1IsIEZDQzFfV09STEQsICJFQyJ9LAorCXtDVFJZX0VHWVBULCBFVFNJM19XT1JMRCwgIkVHIn0sCisJe0NUUllfRUxfU0FMVkFET1IsIEZDQzFfV09STEQsICJTViJ9LAorCXtDVFJZX0VTVE9OSUEsIEVUU0kxX1dPUkxELCAiRUUifSwKKwl7Q1RSWV9GSU5MQU5ELCBFVFNJMV9XT1JMRCwgIkZJIn0sCisJe0NUUllfRlJBTkNFLCBFVFNJMV9XT1JMRCwgIkZSIn0sCisJe0NUUllfR0VPUkdJQSwgRVRTSTRfV09STEQsICJHRSJ9LAorCXtDVFJZX0dFUk1BTlksIEVUU0kxX1dPUkxELCAiREUifSwKKwl7Q1RSWV9HUkVFQ0UsIEVUU0kxX1dPUkxELCAiR1IifSwKKwl7Q1RSWV9HVUFURU1BTEEsIEZDQzFfRkNDQSwgIkdUIn0sCisJe0NUUllfSE9ORFVSQVMsIE5VTEwxX1dPUkxELCAiSE4ifSwKKwl7Q1RSWV9IT05HX0tPTkcsIEZDQzJfV09STEQsICJISyJ9LAorCXtDVFJZX0hVTkdBUlksIEVUU0kxX1dPUkxELCAiSFUifSwKKwl7Q1RSWV9JQ0VMQU5ELCBFVFNJMV9XT1JMRCwgIklTIn0sCisJe0NUUllfSU5ESUEsIEFQTDZfV09STEQsICJJTiJ9LAorCXtDVFJZX0lORE9ORVNJQSwgQVBMMV9XT1JMRCwgIklEIn0sCisJe0NUUllfSVJBTiwgQVBMMV9XT1JMRCwgIklSIn0sCisJe0NUUllfSVJFTEFORCwgRVRTSTFfV09STEQsICJJRSJ9LAorCXtDVFJZX0lTUkFFTCwgTlVMTDFfV09STEQsICJJTCJ9LAorCXtDVFJZX0lUQUxZLCBFVFNJMV9XT1JMRCwgIklUIn0sCisJe0NUUllfSkFNQUlDQSwgRVRTSTFfV09STEQsICJKTSJ9LAogCi0Je0NUUllfSkFQQU4sIE1LSzFfTUtLQSwgIkpQIiwgIkpBUEFOIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xLCBNS0sxX01LS0IsICJKUCIsICJKQVBBTjEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIsIE1LSzFfRkNDQSwgIkpQIiwgIkpBUEFOMiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMywgTUtLMl9NS0tBLCAiSlAiLCAiSkFQQU4zIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40LCBNS0sxX01LS0ExLCAiSlAiLCAiSkFQQU40IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41LCBNS0sxX01LS0EyLCAiSlAiLCAiSkFQQU41IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU42LCBNS0sxX01LS0MsICJKUCIsICJKQVBBTjYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKKwl7Q1RSWV9KQVBBTiwgTUtLMV9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjEsIE1LSzFfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4yLCBNS0sxX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMywgTUtLMl9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQsIE1LSzFfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONSwgTUtLMV9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU42LCBNS0sxX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONywgTUtLM19NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjgsIE1LSzNfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOOSwgTUtLM19NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjEwLCBNS0s0X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTEsIE1LSzRfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTIsIE1LSzRfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4xMywgTUtLNV9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE0LCBNS0s1X01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE1LCBNS0s1X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTYsIE1LSzZfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4xNywgTUtLNl9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4xOCwgTUtLNl9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE5LCBNS0s3X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjAsIE1LSzdfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjEsIE1LSzdfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4yMiwgTUtLOF9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIzLCBNS0s4X01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI0LCBNS0s4X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjUsIE1LSzNfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4yNiwgTUtLM19NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU4yNywgTUtLM19GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI4LCBNS0s0X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI5LCBNS0s0X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzAsIE1LSzZfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzEsIE1LSzZfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMiwgTUtLN19NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMywgTUtLN19GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM0LCBNS0s5X01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzUsIE1LSzEwX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzYsIE1LSzRfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNywgTUtLOV9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM4LCBNS0s5X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM5LCBNS0s5X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONDAsIE1LSzlfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFONDEsIE1LSzEwX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONDIsIE1LSzEwX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQzLCBNS0sxMF9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ0LCBNS0sxMF9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU40NSwgTUtLMTFfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU40NiwgTUtLMTFfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU40NywgTUtLMTFfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONDgsIE1LSzExX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONDksIE1LSzExX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUwLCBNS0sxMl9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUxLCBNS0sxMl9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUyLCBNS0sxMl9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU41MywgTUtLMTJfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU41NCwgTUtLMTJfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFONTcsIE1LSzEzX01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFONTgsIE1LSzE0X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjU5LCBNS0sxNV9NS0tBMSwgIkpQIn0sCiAKLQl7Q1RSWV9KQVBBTjcsIE1LSzNfTUtLQiwgIkpQIiwgIkpBUEFONyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOOCwgTUtLM19NS0tBMiwgIkpQIiwgIkpBUEFOOCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOOSwgTUtLM19NS0tDLCAiSlAiLCAiSkFQQU45IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjEwLCBNS0s0X01LS0IsICJKUCIsICJKQVBBTjEwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xMSwgTUtLNF9NS0tBMiwgIkpQIiwgIkpBUEFOMTEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjEyLCBNS0s0X01LS0MsICJKUCIsICJKQVBBTjEyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjEzLCBNS0s1X01LS0IsICJKUCIsICJKQVBBTjEzIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xNCwgTUtLNV9NS0tBMiwgIkpQIiwgIkpBUEFOMTQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE1LCBNS0s1X01LS0MsICJKUCIsICJKQVBBTjE1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjE2LCBNS0s2X01LS0IsICJKUCIsICJKQVBBTjE2IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xNywgTUtLNl9NS0tBMiwgIkpQIiwgIkpBUEFOMTciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE4LCBNS0s2X01LS0MsICJKUCIsICJKQVBBTjE4IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjE5LCBNS0s3X01LS0IsICJKUCIsICJKQVBBTjE5IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yMCwgTUtLN19NS0tBMiwgIkpQIiwgIkpBUEFOMjAiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIxLCBNS0s3X01LS0MsICJKUCIsICJKQVBBTjIxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjIyLCBNS0s4X01LS0IsICJKUCIsICJKQVBBTjIyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yMywgTUtLOF9NS0tBMiwgIkpQIiwgIkpBUEFOMjMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI0LCBNS0s4X01LS0MsICJKUCIsICJKQVBBTjI0IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjI1LCBNS0szX01LS0EsICJKUCIsICJKQVBBTjI1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yNiwgTUtLM19NS0tBMSwgIkpQIiwgIkpBUEFOMjYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI3LCBNS0szX0ZDQ0EsICJKUCIsICJKQVBBTjI3IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yOCwgTUtLNF9NS0tBMSwgIkpQIiwgIkpBUEFOMjgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI5LCBNS0s0X0ZDQ0EsICJKUCIsICJKQVBBTjI5IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zMCwgTUtLNl9NS0tBMSwgIkpQIiwgIkpBUEFOMzAiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMxLCBNS0s2X0ZDQ0EsICJKUCIsICJKQVBBTjMxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zMiwgTUtLN19NS0tBMSwgIkpQIiwgIkpBUEFOMzIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMzLCBNS0s3X0ZDQ0EsICJKUCIsICJKQVBBTjMzIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNCwgTUtLOV9NS0tBLCAiSlAiLCAiSkFQQU4zNCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzUsIE1LSzEwX01LS0EsICJKUCIsICJKQVBBTjM1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNiwgTUtLNF9NS0tBLCAiSlAiLCAiSkFQQU4zNiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzcsIE1LSzlfRkNDQSwgIkpQIiwgIkpBUEFOMzciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM4LCBNS0s5X01LS0ExLCAiSlAiLCAiSkFQQU4zOCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzksIE1LSzlfTUtLQywgIkpQIiwgIkpBUEFOMzkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQwLCBNS0s5X01LS0EyLCAiSlAiLCAiSkFQQU40MCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDEsIE1LSzEwX0ZDQ0EsICJKUCIsICJKQVBBTjQxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40MiwgTUtLMTBfTUtLQTEsICJKUCIsICJKQVBBTjQyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40MywgTUtLMTBfTUtLQywgIkpQIiwgIkpBUEFONDMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ0LCBNS0sxMF9NS0tBMiwgIkpQIiwgIkpBUEFONDQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ1LCBNS0sxMV9NS0tBLCAiSlAiLCAiSkFQQU40NSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDYsIE1LSzExX0ZDQ0EsICJKUCIsICJKQVBBTjQ2IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40NywgTUtLMTFfTUtLQTEsICJKUCIsICJKQVBBTjQ3IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40OCwgTUtLMTFfTUtLQywgIkpQIiwgIkpBUEFONDgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ5LCBNS0sxMV9NS0tBMiwgIkpQIiwgIkpBUEFONDkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUwLCBNS0sxMl9NS0tBLCAiSlAiLCAiSkFQQU41MCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTEsIE1LSzEyX0ZDQ0EsICJKUCIsICJKQVBBTjUxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41MiwgTUtLMTJfTUtLQTEsICJKUCIsICJKQVBBTjUyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41MywgTUtLMTJfTUtLQywgIkpQIiwgIkpBUEFONTMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU0LCBNS0sxMl9NS0tBMiwgIkpQIiwgIkpBUEFONTQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFONTcsIE1LSzEzX01LS0IsICJKUCIsICJKQVBBTjU3IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41OCwgTUtLMTRfTUtLQTEsICJKUCIsICJKQVBBTjU4IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41OSwgTUtLMTVfTUtLQTEsICJKUCIsICJKQVBBTjU5IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KT1JEQU4sIEVUU0kyX1dPUkxELCAiSk8iLCAiSk9SREFOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfS0FaQUtIU1RBTiwgTlVMTDFfV09STEQsICJLWiIsICJLQVpBS0hTVEFOIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9OT1JUSCwgQVBMOV9XT1JMRCwgIktQIiwgIk5PUlRIIEtPUkVBIiwgWUVTLCBOTywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfS09SRUFfUk9DLCBBUEw5X1dPUkxELCAiS1IiLCAiS09SRUEgUkVQVUJMSUMiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfS09SRUFfUk9DMiwgQVBMMl9XT1JMRCwgIksyIiwgIktPUkVBIFJFUFVCTElDMiIsIFlFUywgTk8sIE5PLAotCSBZRVMsIE5PLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MzLCBBUEw5X1dPUkxELCAiSzMiLCAiS09SRUEgUkVQVUJMSUMzIiwgWUVTLCBOTywgTk8sCi0JIFlFUywgTk8sIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0tVV0FJVCwgTlVMTDFfV09STEQsICJLVyIsICJLVVdBSVQiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0xBVFZJQSwgRVRTSTFfV09STEQsICJMViIsICJMQVRWSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTEVCQU5PTiwgTlVMTDFfV09STEQsICJMQiIsICJMRUJBTk9OIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9MSUVDSFRFTlNURUlOLCBFVFNJMV9XT1JMRCwgIkxJIiwgIkxJRUNIVEVOU1RFSU4iLCBZRVMsIE5PLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTElUSFVBTklBLCBFVFNJMV9XT1JMRCwgIkxUIiwgIkxJVEhVQU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MVVhFTUJPVVJHLCBFVFNJMV9XT1JMRCwgIkxVIiwgIkxVWEVNQk9VUkciLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTUFDQVUsIEZDQzJfV09STEQsICJNTyIsICJNQUNBVSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTUFDRURPTklBLCBOVUxMMV9XT1JMRCwgIk1LIiwgIk1BQ0VET05JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfTUFMQVlTSUEsIEFQTDhfV09STEQsICJNWSIsICJNQUxBWVNJQSIsIFlFUywgTk8sIE5PLCBZRVMsIE5PLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9NQUxUQSwgRVRTSTFfV09STEQsICJNVCIsICJNQUxUQSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NRVhJQ08sIEZDQzFfRkNDQSwgIk1YIiwgIk1FWElDTyIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTU9OQUNPLCBFVFNJNF9XT1JMRCwgIk1DIiwgIk1PTkFDTyIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTU9ST0NDTywgTlVMTDFfV09STEQsICJNQSIsICJNT1JPQ0NPIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9ORVBBTCwgQVBMMV9XT1JMRCwgIk5QIiwgIk5FUEFMIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX05FVEhFUkxBTkRTLCBFVFNJMV9XT1JMRCwgIk5MIiwgIk5FVEhFUkxBTkRTIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX05FVEhFUkxBTkRTX0FOVElMTEVTLCBFVFNJMV9XT1JMRCwgIkFOIiwKLQkgIk5FVEhFUkxBTkRTLUFOVElMTEVTIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX05FV19aRUFMQU5ELCBGQ0MyX0VUU0lDLCAiTloiLCAiTkVXIFpFQUxBTkQiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9OT1JXQVksIEVUU0kxX1dPUkxELCAiTk8iLCAiTk9SV0FZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX09NQU4sIEFQTDZfV09STEQsICJPTSIsICJPTUFOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBOTywgNzAwMH0sCi0Je0NUUllfUEFLSVNUQU4sIE5VTEwxX1dPUkxELCAiUEsiLCAiUEFLSVNUQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1BBTkFNQSwgRkNDMV9GQ0NBLCAiUEEiLCAiUEFOQU1BIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9QQVBVQV9ORVdfR1VJTkVBLCBGQ0MxX1dPUkxELCAiUEciLCAiUEFQVUEgTkVXIEdVSU5FQSIsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUEVSVSwgQVBMMV9XT1JMRCwgIlBFIiwgIlBFUlUiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIE5PLCA3MDAwfSwKLQl7Q1RSWV9QSElMSVBQSU5FUywgQVBMMV9XT1JMRCwgIlBIIiwgIlBISUxJUFBJTkVTIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9QT0xBTkQsIEVUU0kxX1dPUkxELCAiUEwiLCAiUE9MQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BPUlRVR0FMLCBFVFNJMV9XT1JMRCwgIlBUIiwgIlBPUlRVR0FMIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BVRVJUT19SSUNPLCBGQ0MxX0ZDQ0EsICJQUiIsICJQVUVSVE8gUklDTyIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUUFUQVIsIE5VTEwxX1dPUkxELCAiUUEiLCAiUUFUQVIiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1JPTUFOSUEsIE5VTEwxX1dPUkxELCAiUk8iLCAiUk9NQU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUlVTU0lBLCBOVUxMMV9XT1JMRCwgIlJVIiwgIlJVU1NJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfU0FVRElfQVJBQklBLCBOVUxMMV9XT1JMRCwgIlNBIiwgIlNBVURJIEFSQUJJQSIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfU0VSQklBX01PTlRFTkVHUk8sIEVUU0kxX1dPUkxELCAiQ1MiLCAiU0VSQklBICYgTU9OVEVORUdSTyIsCi0JIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TSU5HQVBPUkUsIEFQTDZfV09STEQsICJTRyIsICJTSU5HQVBPUkUiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NMT1ZBS0lBLCBFVFNJMV9XT1JMRCwgIlNLIiwgIlNMT1ZBSyBSRVBVQkxJQyIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TTE9WRU5JQSwgRVRTSTFfV09STEQsICJTSSIsICJTTE9WRU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TT1VUSF9BRlJJQ0EsIEZDQzNfV09STEQsICJaQSIsICJTT1VUSCBBRlJJQ0EiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9TUEFJTiwgRVRTSTFfV09STEQsICJFUyIsICJTUEFJTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TUklfTEFOS0EsIEZDQzNfV09STEQsICJMSyIsICJTUkkgTEFOS0EiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9TV0VERU4sIEVUU0kxX1dPUkxELCAiU0UiLCAiU1dFREVOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NXSVRaRVJMQU5ELCBFVFNJMV9XT1JMRCwgIkNIIiwgIlNXSVRaRVJMQU5EIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NZUklBLCBOVUxMMV9XT1JMRCwgIlNZIiwgIlNZUklBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9UQUlXQU4sIEFQTDNfRkNDQSwgIlRXIiwgIlRBSVdBTiIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfVEhBSUxBTkQsIE5VTEwxX1dPUkxELCAiVEgiLCAiVEhBSUxBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1RSSU5JREFEX1lfVE9CQUdPLCBFVFNJNF9XT1JMRCwgIlRUIiwgIlRSSU5JREFEICYgVE9CQUdPIiwKLQkgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfVFVOSVNJQSwgRVRTSTNfV09STEQsICJUTiIsICJUVU5JU0lBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfVFVSS0VZLCBFVFNJM19XT1JMRCwgIlRSIiwgIlRVUktFWSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1VLUkFJTkUsIE5VTEwxX1dPUkxELCAiVUEiLCAiVUtSQUlORSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfVUFFLCBOVUxMMV9XT1JMRCwgIkFFIiwgIlVOSVRFRCBBUkFCIEVNSVJBVEVTIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9VTklURURfS0lOR0RPTSwgRVRTSTFfV09STEQsICJHQiIsICJVTklURUQgS0lOR0RPTSIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9VTklURURfU1RBVEVTLCBGQ0MzX0ZDQ0EsICJVUyIsICJVTklURUQgU1RBVEVTIiwgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA1ODI1fSwKLQl7Q1RSWV9VTklURURfU1RBVEVTX0ZDQzQ5LCBGQ0M0X0ZDQ0EsICJQUyIsCi0JICJVTklURUQgU1RBVEVTIChQVUJMSUMgU0FGRVRZKSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgNzAwMH0sCi0Je0NUUllfVVJVR1VBWSwgQVBMMl9XT1JMRCwgIlVZIiwgIlVSVUdVQVkiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9VWkJFS0lTVEFOLCBGQ0MzX0ZDQ0EsICJVWiIsICJVWkJFS0lTVEFOIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9WRU5FWlVFTEEsIEFQTDJfRVRTSUMsICJWRSIsICJWRU5FWlVFTEEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9WSUVUX05BTSwgTlVMTDFfV09STEQsICJWTiIsICJWSUVUIE5BTSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfWUVNRU4sIE5VTEwxX1dPUkxELCAiWUUiLCAiWUVNRU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1pJTUJBQldFLCBOVUxMMV9XT1JMRCwgIlpXIiwgIlpJTUJBQldFIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfQorCXtDVFJZX0pPUkRBTiwgRVRTSTJfV09STEQsICJKTyJ9LAorCXtDVFJZX0tBWkFLSFNUQU4sIE5VTEwxX1dPUkxELCAiS1oifSwKKwl7Q1RSWV9LT1JFQV9OT1JUSCwgQVBMOV9XT1JMRCwgIktQIn0sCisJe0NUUllfS09SRUFfUk9DLCBBUEw5X1dPUkxELCAiS1IifSwKKwl7Q1RSWV9LT1JFQV9ST0MyLCBBUEwyX1dPUkxELCAiSzIifSwKKwl7Q1RSWV9LT1JFQV9ST0MzLCBBUEw5X1dPUkxELCAiSzMifSwKKwl7Q1RSWV9LVVdBSVQsIE5VTEwxX1dPUkxELCAiS1cifSwKKwl7Q1RSWV9MQVRWSUEsIEVUU0kxX1dPUkxELCAiTFYifSwKKwl7Q1RSWV9MRUJBTk9OLCBOVUxMMV9XT1JMRCwgIkxCIn0sCisJe0NUUllfTElFQ0hURU5TVEVJTiwgRVRTSTFfV09STEQsICJMSSJ9LAorCXtDVFJZX0xJVEhVQU5JQSwgRVRTSTFfV09STEQsICJMVCJ9LAorCXtDVFJZX0xVWEVNQk9VUkcsIEVUU0kxX1dPUkxELCAiTFUifSwKKwl7Q1RSWV9NQUNBVSwgRkNDMl9XT1JMRCwgIk1PIn0sCisJe0NUUllfTUFDRURPTklBLCBOVUxMMV9XT1JMRCwgIk1LIn0sCisJe0NUUllfTUFMQVlTSUEsIEFQTDhfV09STEQsICJNWSJ9LAorCXtDVFJZX01BTFRBLCBFVFNJMV9XT1JMRCwgIk1UIn0sCisJe0NUUllfTUVYSUNPLCBGQ0MxX0ZDQ0EsICJNWCJ9LAorCXtDVFJZX01PTkFDTywgRVRTSTRfV09STEQsICJNQyJ9LAorCXtDVFJZX01PUk9DQ08sIE5VTEwxX1dPUkxELCAiTUEifSwKKwl7Q1RSWV9ORVBBTCwgQVBMMV9XT1JMRCwgIk5QIn0sCisJe0NUUllfTkVUSEVSTEFORFMsIEVUU0kxX1dPUkxELCAiTkwifSwKKwl7Q1RSWV9ORVRIRVJMQU5EU19BTlRJTExFUywgRVRTSTFfV09STEQsICJBTiJ9LAorCXtDVFJZX05FV19aRUFMQU5ELCBGQ0MyX0VUU0lDLCAiTloifSwKKwl7Q1RSWV9OT1JXQVksIEVUU0kxX1dPUkxELCAiTk8ifSwKKwl7Q1RSWV9PTUFOLCBBUEw2X1dPUkxELCAiT00ifSwKKwl7Q1RSWV9QQUtJU1RBTiwgTlVMTDFfV09STEQsICJQSyJ9LAorCXtDVFJZX1BBTkFNQSwgRkNDMV9GQ0NBLCAiUEEifSwKKwl7Q1RSWV9QQVBVQV9ORVdfR1VJTkVBLCBGQ0MxX1dPUkxELCAiUEcifSwKKwl7Q1RSWV9QRVJVLCBBUEwxX1dPUkxELCAiUEUifSwKKwl7Q1RSWV9QSElMSVBQSU5FUywgQVBMMV9XT1JMRCwgIlBIIn0sCisJe0NUUllfUE9MQU5ELCBFVFNJMV9XT1JMRCwgIlBMIn0sCisJe0NUUllfUE9SVFVHQUwsIEVUU0kxX1dPUkxELCAiUFQifSwKKwl7Q1RSWV9QVUVSVE9fUklDTywgRkNDMV9GQ0NBLCAiUFIifSwKKwl7Q1RSWV9RQVRBUiwgTlVMTDFfV09STEQsICJRQSJ9LAorCXtDVFJZX1JPTUFOSUEsIE5VTEwxX1dPUkxELCAiUk8ifSwKKwl7Q1RSWV9SVVNTSUEsIE5VTEwxX1dPUkxELCAiUlUifSwKKwl7Q1RSWV9TQVVESV9BUkFCSUEsIE5VTEwxX1dPUkxELCAiU0EifSwKKwl7Q1RSWV9TRVJCSUFfTU9OVEVORUdSTywgRVRTSTFfV09STEQsICJDUyJ9LAorCXtDVFJZX1NJTkdBUE9SRSwgQVBMNl9XT1JMRCwgIlNHIn0sCisJe0NUUllfU0xPVkFLSUEsIEVUU0kxX1dPUkxELCAiU0sifSwKKwl7Q1RSWV9TTE9WRU5JQSwgRVRTSTFfV09STEQsICJTSSJ9LAorCXtDVFJZX1NPVVRIX0FGUklDQSwgRkNDM19XT1JMRCwgIlpBIn0sCisJe0NUUllfU1BBSU4sIEVUU0kxX1dPUkxELCAiRVMifSwKKwl7Q1RSWV9TUklfTEFOS0EsIEZDQzNfV09STEQsICJMSyJ9LAorCXtDVFJZX1NXRURFTiwgRVRTSTFfV09STEQsICJTRSJ9LAorCXtDVFJZX1NXSVRaRVJMQU5ELCBFVFNJMV9XT1JMRCwgIkNIIn0sCisJe0NUUllfU1lSSUEsIE5VTEwxX1dPUkxELCAiU1kifSwKKwl7Q1RSWV9UQUlXQU4sIEFQTDNfRkNDQSwgIlRXIn0sCisJe0NUUllfVEhBSUxBTkQsIE5VTEwxX1dPUkxELCAiVEgifSwKKwl7Q1RSWV9UUklOSURBRF9ZX1RPQkFHTywgRVRTSTRfV09STEQsICJUVCJ9LAorCXtDVFJZX1RVTklTSUEsIEVUU0kzX1dPUkxELCAiVE4ifSwKKwl7Q1RSWV9UVVJLRVksIEVUU0kzX1dPUkxELCAiVFIifSwKKwl7Q1RSWV9VS1JBSU5FLCBOVUxMMV9XT1JMRCwgIlVBIn0sCisJe0NUUllfVUFFLCBOVUxMMV9XT1JMRCwgIkFFIn0sCisJe0NUUllfVU5JVEVEX0tJTkdET00sIEVUU0kxX1dPUkxELCAiR0IifSwKKwl7Q1RSWV9VTklURURfU1RBVEVTLCBGQ0MzX0ZDQ0EsICJVUyJ9LAorCS8qIFRoaXMgIlBTIiBpcyBmb3IgVVMgcHVibGljIHNhZmV0eSBhY3R1YWxseS4uLiB0byBzdXBwb3J0IHRoaXMgd2UKKwkgKiB3b3VsZCBuZWVkIHRvIGFzc2lnbiBuZXcgc3BlY2lhbCBhbHBoYTIgdG8gQ1JEQSBkYiBhcyB3aXRoIHRoZSB3b3JsZAorCSAqIHJlZ2RvbWFpbiBhbmQgdXNlIGFub3RoZXIgYWxwaGEyICovCisJe0NUUllfVU5JVEVEX1NUQVRFU19GQ0M0OSwgRkNDNF9GQ0NBLCAiUFMifSwKKwl7Q1RSWV9VUlVHVUFZLCBBUEwyX1dPUkxELCAiVVkifSwKKwl7Q1RSWV9VWkJFS0lTVEFOLCBGQ0MzX0ZDQ0EsICJVWiJ9LAorCXtDVFJZX1ZFTkVaVUVMQSwgQVBMMl9FVFNJQywgIlZFIn0sCisJe0NUUllfVklFVF9OQU0sIE5VTEwxX1dPUkxELCAiVk4ifSwKKwl7Q1RSWV9ZRU1FTiwgTlVMTDFfV09STEQsICJZRSJ9LAorCXtDVFJZX1pJTUJBQldFLCBOVUxMMV9XT1JMRCwgIlpXIn0sCiB9OwogCi1lbnVtIHsKLQlOT19ERlMgPSAweDAwMDAwMDAwMDAwMDAwMDBVTEwsCi0JREZTX0ZDQzMgPSAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCi0JREZTX0VUU0kgPSAweDAwMDAwMDAwMDAwMDAwMDJVTEwsCi0JREZTX01LSzQgPSAweDAwMDAwMDAwMDAwMDAwMDRVTEwsCi19OwotCi1lbnVtIHsKLQlGMV80OTE1XzQ5MjUsCi0JRjFfNDkzNV80OTQ1LAotCUYxXzQ5MjBfNDk4MCwKLQlGMV80OTQyXzQ5ODcsCi0JRjFfNDk0NV80OTg1LAotCUYxXzQ5NTBfNDk4MCwKLQlGMV81MDM1XzUwNDAsCi0JRjFfNTA0MF81MDgwLAotCUYxXzUwNTVfNTA1NSwKLQotCUYxXzUxMjBfNTI0MCwKLQotCUYxXzUxNzBfNTIzMCwKLQlGMl81MTcwXzUyMzAsCi0KLQlGMV81MTgwXzUyNDAsCi0JRjJfNTE4MF81MjQwLAotCUYzXzUxODBfNTI0MCwKLQlGNF81MTgwXzUyNDAsCi0JRjVfNTE4MF81MjQwLAotCUY2XzUxODBfNTI0MCwKLQlGN181MTgwXzUyNDAsCi0JRjhfNTE4MF81MjQwLAotCi0JRjFfNTE4MF81MzIwLAotCi0JRjFfNTI0MF81MjgwLAotCi0JRjFfNTI2MF81MjgwLAotCi0JRjFfNTI2MF81MzIwLAotCUYyXzUyNjBfNTMyMCwKLQlGM181MjYwXzUzMjAsCi0JRjRfNTI2MF81MzIwLAotCUY1XzUyNjBfNTMyMCwKLQlGNl81MjYwXzUzMjAsCi0KLQlGMV81MjYwXzU3MDAsCi0KLQlGMV81MjgwXzUzMjAsCi0KLQlGMV81NTAwXzU1ODAsCi0KLQlGMV81NTAwXzU2MjAsCi0KLQlGMV81NTAwXzU3MDAsCi0JRjJfNTUwMF81NzAwLAotCUYzXzU1MDBfNTcwMCwKLQlGNF81NTAwXzU3MDAsCi0JRjVfNTUwMF81NzAwLAotCi0JRjFfNTY2MF81NzAwLAotCi0JRjFfNTc0NV81ODA1LAotCUYyXzU3NDVfNTgwNSwKLQlGM181NzQ1XzU4MDUsCi0KLQlGMV81NzQ1XzU4MjUsCi0JRjJfNTc0NV81ODI1LAotCUYzXzU3NDVfNTgyNSwKLQlGNF81NzQ1XzU4MjUsCi0JRjVfNTc0NV81ODI1LAotCUY2XzU3NDVfNTgyNSwKLQotCVcxXzQ5MjBfNDk4MCwKLQlXMV81MDQwXzUwODAsCi0JVzFfNTE3MF81MjMwLAotCVcxXzUxODBfNTI0MCwKLQlXMV81MjYwXzUzMjAsCi0JVzFfNTc0NV81ODI1LAotCVcxXzU1MDBfNTcwMCwKLQlBX0RFTU9fQUxMX0NIQU5ORUxTCi19OwotCi1zdGF0aWMgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHJlZ0RtbjVHaHpGcmVxW10gPSB7Ci0JezQ5MTUsIDQ5MjUsIDIzLCAwLCAxMCwgNSwgTk9fREZTLCBQU0NBTl9NS0syLCAxNn0sCi0JezQ5MzUsIDQ5NDUsIDIzLCAwLCAxMCwgNSwgTk9fREZTLCBQU0NBTl9NS0syLCAxNn0sCi0JezQ5MjAsIDQ5ODAsIDIzLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMiwgN30sCi0JezQ5NDIsIDQ5ODcsIDI3LCA2LCA1LCA1LCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezQ5NDUsIDQ5ODUsIDMwLCA2LCAxMCwgNSwgTk9fREZTLCBQU0NBTl9GQ0MsIDB9LAotCXs0OTUwLCA0OTgwLCAzMywgNiwgMjAsIDUsIE5PX0RGUywgUFNDQU5fRkNDLCAwfSwKLQl7NTAzNSwgNTA0MCwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDEyfSwKLQl7NTA0MCwgNTA4MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0syLCAyfSwKLQl7NTA1NSwgNTA1NSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDEyfSwKLQotCXs1MTIwLCA1MjQwLCA1LCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezUxNzAsIDUyMzAsIDIzLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzIsIDF9LAotCXs1MTcwLCA1MjMwLCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0syLCAxfSwKLQotCXs1MTgwLCA1MjQwLCAxNSwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAxNywgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAxfSwKLQl7NTE4MCwgNTI0MCwgMTgsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjMsIDYsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MsIDB9LAotCXs1MTgwLCA1MjQwLCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjMsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7NTE4MCwgNTMyMCwgMjAsIDYsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjQwLCA1MjgwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMywgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTI2MCwgNTI4MCwgMjMsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTI2MCwgNTMyMCwgMTgsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTI2MCwgNTMyMCwgMjAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSB8IERGU19NS0s0LAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJIHwgUFNDQU5fTUtLMywgMH0sCi0KLQotCXs1MjYwLCA1MzIwLCAyMCwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAyfSwKLQl7NTI2MCwgNTMyMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAyfSwKLQl7NTI2MCwgNTMyMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAwfSwKLQl7NTI2MCwgNTMyMCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7NTI2MCwgNTcwMCwgNSwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBOT19QU0NBTiwgMH0sCi0KLQl7NTI4MCwgNTMyMCwgMTcsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAwfSwKLQotCXs1NTAwLCA1NTgwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMywgUFNDQU5fRkNDLCAwfSwKLQotCXs1NTAwLCA1NjIwLCAzMCwgNiwgMjAsIDIwLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTUwMCwgNTcwMCwgMjAsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCA0fSwKLQl7NTUwMCwgNTcwMCwgMjcsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezU1MDAsIDU3MDAsIDMwLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1NTAwLCA1NzAwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJIHwgREZTX01LSzQsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9GQ0MsIDB9LAotCXs1NTAwLCA1NzAwLCAzMCwgNiwgMjAsIDIwLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTY2MCwgNTcwMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQywgMH0sCi0KLQl7NTc0NSwgNTgwNSwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MDUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODA1LCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0VUU0ksIDB9LAotCXs1NzQ1LCA1ODI1LCA1LCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODI1LCAxNywgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgyNSwgMjAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODI1LCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAzfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQotCXs0OTIwLCA0OTgwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMH0sCi0JezUwNDAsIDUwODAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTE3MCwgNTIzMCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1MTgwLCA1MjQwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMH0sCi0JezUyNjAsIDUzMjAsIDMwLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgMH0sCi0JezU3NDUsIDU4MjUsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTUwMCwgNTcwMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwfSwKLQl7NDkyMCwgNjEwMCwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi19OwotCi1lbnVtIHsKLQlUMV81MTMwXzU2NTAsCi0JVDFfNTE1MF81NjcwLAotCi0JVDFfNTIwMF81MjAwLAotCVQyXzUyMDBfNTIwMCwKLQlUM181MjAwXzUyMDAsCi0JVDRfNTIwMF81MjAwLAotCVQ1XzUyMDBfNTIwMCwKLQlUNl81MjAwXzUyMDAsCi0JVDdfNTIwMF81MjAwLAotCVQ4XzUyMDBfNTIwMCwKLQotCVQxXzUyMDBfNTI4MCwKLQlUMl81MjAwXzUyODAsCi0JVDNfNTIwMF81MjgwLAotCVQ0XzUyMDBfNTI4MCwKLQlUNV81MjAwXzUyODAsCi0JVDZfNTIwMF81MjgwLAotCi0JVDFfNTIwMF81MjQwLAotCVQxXzUyMTBfNTIxMCwKLQlUMl81MjEwXzUyMTAsCi0JVDNfNTIxMF81MjEwLAotCVQ0XzUyMTBfNTIxMCwKLQlUNV81MjEwXzUyMTAsCi0JVDZfNTIxMF81MjEwLAotCVQ3XzUyMTBfNTIxMCwKLQlUOF81MjEwXzUyMTAsCi0JVDlfNTIxMF81MjEwLAotCVQxMF81MjEwXzUyMTAsCi0JVDFfNTI0MF81MjQwLAotCi0JVDFfNTIxMF81MjUwLAotCVQxXzUyMTBfNTI5MCwKLQlUMl81MjEwXzUyOTAsCi0JVDNfNTIxMF81MjkwLAotCi0JVDFfNTI4MF81MjgwLAotCVQyXzUyODBfNTI4MCwKLQlUMV81MjkwXzUyOTAsCi0JVDJfNTI5MF81MjkwLAotCVQzXzUyOTBfNTI5MCwKLQlUMV81MjUwXzUyOTAsCi0JVDJfNTI1MF81MjkwLAotCVQzXzUyNTBfNTI5MCwKLQlUNF81MjUwXzUyOTAsCi0KLQlUMV81NTQwXzU2NjAsCi0JVDJfNTU0MF81NjYwLAotCVQzXzU1NDBfNTY2MCwKLQlUMV81NzYwXzU4MDAsCi0JVDJfNTc2MF81ODAwLAotCVQzXzU3NjBfNTgwMCwKLQlUNF81NzYwXzU4MDAsCi0JVDVfNTc2MF81ODAwLAotCVQ2XzU3NjBfNTgwMCwKLQlUN181NzYwXzU4MDAsCi0KLQlUMV81NzY1XzU4MDUsCi0JVDJfNTc2NV81ODA1LAotCVQzXzU3NjVfNTgwNSwKLQlUNF81NzY1XzU4MDUsCi0JVDVfNTc2NV81ODA1LAotCVQ2XzU3NjVfNTgwNSwKLQlUN181NzY1XzU4MDUsCi0JVDhfNTc2NV81ODA1LAotCVQ5XzU3NjVfNTgwNSwKLQotCVdUMV81MjEwXzUyNTAsCi0JV1QxXzUyOTBfNTI5MCwKLQlXVDFfNTU0MF81NjYwLAotCVdUMV81NzYwXzU4MDAsCi19OwotCi1lbnVtIHsKLQlGMV8yMzEyXzIzNzIsCi0JRjJfMjMxMl8yMzcyLAotCi0JRjFfMjQxMl8yNDcyLAotCUYyXzI0MTJfMjQ3MiwKLQlGM18yNDEyXzI0NzIsCi0KLQlGMV8yNDEyXzI0NjIsCi0JRjJfMjQxMl8yNDYyLAotCi0JRjFfMjQzMl8yNDQyLAotCi0JRjFfMjQ1N18yNDcyLAotCi0JRjFfMjQ2N18yNDcyLAotCi0JRjFfMjQ4NF8yNDg0LAotCUYyXzI0ODRfMjQ4NCwKLQotCUYxXzI1MTJfMjczMiwKLQotCVcxXzIzMTJfMjM3MiwKLQlXMV8yNDEyXzI0MTIsCi0JVzFfMjQxN18yNDMyLAotCVcxXzI0MzdfMjQ0MiwKLQlXMV8yNDQ3XzI0NTcsCi0JVzFfMjQ2Ml8yNDYyLAotCVcxXzI0NjdfMjQ2NywKLQlXMl8yNDY3XzI0NjcsCi0JVzFfMjQ3Ml8yNDcyLAotCVcyXzI0NzJfMjQ3MiwKLQlXMV8yNDg0XzI0ODQsCi0JVzJfMjQ4NF8yNDg0LAotfTsKLQotc3RhdGljIHN0cnVjdCBSZWdEbW5GcmVxQmFuZCByZWdEbW4yR2h6RnJlcVtdID0gewotCXsyMzEyLCAyMzcyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezIzMTIsIDIzNzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQxMiwgMjQ3MiwgNSwgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSwgMH0sCi0JezI0MTIsIDI0NzIsIDMwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQxMiwgMjQ2MiwgMjcsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EsIDB9LAotCi0JezI0MzIsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQ1NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBLCAwfSwKLQotCXsyNDg0LCAyNDg0LCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLAotCSBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMiwgMH0sCi0KLQl7MjUxMiwgMjczMiwgNSwgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezIzMTIsIDIzNzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0MTIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTcsIDI0MzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MzcsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0NDcsIDI0NTcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0NjIsIDI0NjIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDg0LCAyNDg0LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDg0LCAyNDg0LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi19OwotCi1lbnVtIHsKLQlHMV8yMzEyXzIzNzIsCi0JRzJfMjMxMl8yMzcyLAotCi0JRzFfMjQxMl8yNDcyLAotCUcyXzI0MTJfMjQ3MiwKLQlHM18yNDEyXzI0NzIsCi0KLQlHMV8yNDEyXzI0NjIsCi0JRzJfMjQxMl8yNDYyLAotCi0JRzFfMjQzMl8yNDQyLAotCi0JRzFfMjQ1N18yNDcyLAotCi0JRzFfMjUxMl8yNzMyLAotCi0JRzFfMjQ2N18yNDcyLAotCi0JV0cxXzIzMTJfMjM3MiwKLQlXRzFfMjQxMl8yNDYyLAotCVdHMV8yNDY3XzI0NzIsCi0JV0cyXzI0NjdfMjQ3MiwKLQlHX0RFTU9fQUxMX0NIQU5ORUxTCi19OwotCi1zdGF0aWMgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHJlZ0RtbjJHaHoxMWdGcmVxW10gPSB7Ci0JezIzMTIsIDIzNzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDcyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBX0csIDB9LAotCXsyNDEyLCAyNDcyLCAzMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0MTIsIDI0NjIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0NjIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBX0csIDB9LAotCi0JezI0MzIsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQ1NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNTEyLCAyNzMyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQSwgMH0sCi0KLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyMzEyLCAyNzMyLCAyNywgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotfTsKLQotZW51bSB7Ci0JVDFfMjMxMl8yMzcyLAotCVQxXzI0MzdfMjQzNywKLQlUMl8yNDM3XzI0MzcsCi0JVDNfMjQzN18yNDM3LAotCVQxXzI1MTJfMjczMgotfTsKLQotc3RhdGljIHN0cnVjdCByZWdEb21haW4gcmVnRG9tYWluc1tdID0gewotCi0Je0RFQlVHX1JFR19ETU4sIEZDQywgREZTX0ZDQzMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEFfREVNT19BTExfQ0hBTk5FTFMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzUxMzBfNTY1MCwgVDFfNTE1MF81NjcwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzUyMDBfNTI0MCwgVDFfNTI4MF81MjgwLCBUMV81NTQwXzU2NjAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRjFfMjMxMl8yMzcyLCBGMV8yNDEyXzI0NzIsIEYxXzI0ODRfMjQ4NCwgRjFfMjUxMl8yNzMyLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHX0RFTU9fQUxMX0NIQU5ORUxTLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV8yMzEyXzIzNzIsIFQxXzI0MzdfMjQzNywgVDFfMjUxMl8yNzMyLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7QVBMMSwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEY0XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDIsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMV81NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEwzLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjFfNTI4MF81MzIwLCBGMl81NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTI5MF81MjkwLCBUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw0LCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjRfNTE4MF81MjQwLCBGM181NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIxMF81MjEwLCBUM181NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIwMF81MjAwLCBUM181NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNSwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYyXzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDRfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDYsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9GQ0NfVCB8IFBTQ0FOX0ZDQywgTk9fUkVRLAotCSBCTShGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjNfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTIxMF81MjEwLCBUMV81MjUwXzUyOTAsIFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgVDVfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDcsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLCBOT19SRVEsCi0JIEJNKEYxXzUyODBfNTMyMCwgRjVfNTUwMF81NzAwLCBGM181NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjkwXzUyOTAsIFQ1XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NTQwXzU2NjAsIFQ2XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw4LCBFVFNJLCBOT19ERlMsIE5PX1BTQ0FOLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjZfNTI2MF81MzIwLCBGNF81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDJfNTI5MF81MjkwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTI4MF81MjgwLCBUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMOSwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUzMjAsIEYxXzU1MDBfNTYyMCwgRjNfNTc0NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTI5MF81MjkwLCBUNV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTU0MF81NjYwLCBUNl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMMTAsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE4MF81MzIwLCBGNV81NTAwXzU3MDAsIEYzXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyOTBfNTI5MCwgVDVfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzU1NDBfNTY2MCwgVDZfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0kxLCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGMl81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzUyMDBfNTI4MCwgVDJfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0kyLCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYzXzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0kzLCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNCwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGM181MTgwXzUyNDAsIEYxXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl81MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTUsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTYsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjVfNTE4MF81MjQwLCBGMV81MjYwXzUyODAsIEYzXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMTBfNTI1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDRfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0MxLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjJfNTE4MF81MjQwLCBGNF81MjYwXzUzMjAsIEY1XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMTBfNTIxMCwgVDJfNTI1MF81MjkwLCBUNl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDdfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDMiwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEY2XzUxODBfNTI0MCwgRjVfNTI2MF81MzIwLCBGNl81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIFQzXzUyNTBfNTI5MCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIwMF81MjAwLCBUMV81MjQwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0MzLCBGQ0MsIERGU19GQ0MzLCBQU0NBTl9GQ0MgfCBQU0NBTl9GQ0NfVCwgTk9fUkVRLAotCSBCTShGMl81MTgwXzUyNDAsIEYzXzUyNjBfNTMyMCwgRjFfNTUwMF81NzAwLCBGNV81NzQ1XzU4MjUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMTBfNTIxMCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ0XzUyMDBfNTIwMCwgVDhfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzQsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0ZDQ19ULCBOT19SRVEsCi0JIEJNKEYxXzQ5NDJfNDk4NywgRjFfNDk0NV80OTg1LCBGMV80OTUwXzQ5ODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUOF81MjEwXzUyMTAsIFQ0XzUyNTBfNTI5MCwgVDdfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjQwLCBUMV81MjgwXzUyODAsIFQ5XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzUsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMl81MTgwXzUyNDAsIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUNl81MjEwXzUyMTAsIFQyXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUOF81MjAwXzUyMDAsIFQ3XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0M2LCBGQ0MsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIE5PX1JFUSwKLQkgQk0oRjhfNTE4MF81MjQwLCBGNV81MjYwXzUzMjAsIEYxXzU1MDBfNTU4MCwgRjFfNTY2MF81NzAwLAotCSAgICBGNl81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIxMF81MjEwLCBUM181MjUwXzUyOTAsIFQyXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ3XzUyMDBfNTIwMCwgVDFfNTI0MF81MjQwLCBUMl81MjgwXzUyODAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7TUtLMSwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ3XzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtNS0syLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMiwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLAotCSAgICBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xKSwKLQkgQk0oVDdfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMywgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNF81MTgwXzUyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ5XzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzQsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMTBfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNl81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLNSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTI4MCwgVDNfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLNiwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMl81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUM181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s3LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s4LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNV81MjAwXzUyODAsIFQzXzU1NDBfNTY2MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzksIE1LSywgTk9fREZTLCBQU0NBTl9NS0syIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDlfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTAsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTEsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwKLQkgICAgRjRfNTUwMF81NzAwLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTIsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsCi0JICAgIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMywgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTcwXzUyMzAsIEY3XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzE0LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDQwXzUwODAsIEYxXzUwNTVfNTA1NSwgRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTUsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNDBfNTA4MCwgRjFfNTA1NV81MDU1LCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwKLQkgICAgRjJfNTI2MF81MzIwLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7QVBMRCwgTk9fQ1RMLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYyXzIzMTJfMjM3MiwgRjJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKEcyXzIzMTJfMjM3MiwgRzJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVST30sCi0KLQl7RVRTSUEsIE5PX0NUTCwgTk9fREZTLCBQU0NBTl9FVFNJQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYxXzI0NTdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRzFfMjQ1N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0VUU0lCLCBFVFNJLCBOT19ERlMsIFBTQ0FOX0VUU0lCLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjFfMjQzMl8yNDQyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMV8yNDMyXzI0NDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7RVRTSUMsIEVUU0ksIE5PX0RGUywgUFNDQU5fRVRTSUMsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGM18yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEczXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtGQ0NBLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMV8yNDEyXzI0NjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7TUtLQSwgTUtLLCBOT19ERlMsCi0JIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0cgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0cgfAotCSBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NjIsIEYxXzI0NjdfMjQ3MiwgRjJfMjQ4NF8yNDg0LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRzJfMjQxMl8yNDYyLCBHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtNS0tDLCBNS0ssIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09STEQsIEVUU0ksIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SMF9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgVzFfMjQ4NF8yNDg0LCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwMV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsCi0JIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0MTdfMjQzMiwKLQkgICAgVzFfMjQ0N18yNDU3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SMDJfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLAotCSBBREhPQ19QRVJfMTFELAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsCi0JICAgIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtFVTFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19QRVJfMTFELAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsCi0JICAgIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMl8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMl8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMl8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsCi0JICAgIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjJfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgVzFfMjQ4NF8yNDg0LCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IzX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMl8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1I0X1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLAotCSAgICBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1I1X0VUU0lDLCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjlfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLAotCSAgICBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1JBX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTc0NV81ODI1LCBXMV81NTAwXzU3MDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1JCX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je05VTEwxLCBOT19DVEwsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY21vZGUgbW9kZXNbXSA9IHsKLQl7QVRIOUtfTU9ERV8xMUEsIENIQU5ORUxfQX0sCi0Je0FUSDlLX01PREVfMTFCLCBDSEFOTkVMX0J9LAotCXtBVEg5S19NT0RFXzExRywgQ0hBTk5FTF9HfSwKLQl7QVRIOUtfTU9ERV8xMU5HX0hUMjAsIENIQU5ORUxfR19IVDIwfSwKLQl7QVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTLCBDSEFOTkVMX0dfSFQ0MFBMVVN9LAotCXtBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTLCBDSEFOTkVMX0dfSFQ0ME1JTlVTfSwKLQl7QVRIOUtfTU9ERV8xMU5BX0hUMjAsIENIQU5ORUxfQV9IVDIwfSwKLQl7QVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTLCBDSEFOTkVMX0FfSFQ0MFBMVVN9LAotCXtBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBDSEFOTkVMX0FfSFQ0ME1JTlVTfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgamFwYW5fYmFuZGNoZWNrIGpfYmFuZGNoZWNrW10gPSB7Ci0Je0YxXzUxNzBfNTIzMCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERH0sCi0Je0Y0XzUxODBfNTI0MCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX0VWRU59LAotCXtGMl81MjYwXzUzMjAsIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMn0sCi0Je0Y0XzU1MDBfNTcwMCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkR9Ci19OwotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvdmlydHVhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvdmlydHVhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjQyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMKQEAgLTAsMCArMSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXRoOWsuaCIKKworc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgeworCWludCBjb3VudDsKKwl1OCAqYWRkcjsKK307CisKK3N0YXRpYyB2b2lkIGF0aDlrX3ZpZl9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgKml0ZXJfZGF0YSA9IGRhdGE7CisJdTggKm5idWY7CisKKwluYnVmID0ga3JlYWxsb2MoaXRlcl9kYXRhLT5hZGRyLCAoaXRlcl9kYXRhLT5jb3VudCArIDEpICogRVRIX0FMRU4sCisJCQlHRlBfQVRPTUlDKTsKKwlpZiAobmJ1ZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwltZW1jcHkobmJ1ZiArIGl0ZXJfZGF0YS0+Y291bnQgKiBFVEhfQUxFTiwgbWFjLCBFVEhfQUxFTik7CisJaXRlcl9kYXRhLT5hZGRyID0gbmJ1ZjsKKwlpdGVyX2RhdGEtPmNvdW50Kys7Cit9CisKK3ZvaWQgYXRoOWtfc2V0X2Jzc2lkX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgaXRlcl9kYXRhOworCWludCBpLCBqOworCXU4IG1hc2tbRVRIX0FMRU5dOworCisJLyoKKwkgKiBBZGQgcHJpbWFyeSBNQUMgYWRkcmVzcyBldmVuIGlmIGl0IGlzIG5vdCBpbiBhY3RpdmUgdXNlIHNpbmNlIGl0CisJICogd2lsbCBiZSBjb25maWd1cmVkIHRvIHRoZSBoYXJkd2FyZSBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgYW5kIHRoZQorCSAqIEJTU0lEIG1hc2sgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgYW5vdGhlciBhZGRyZXNzIGlzIGFjdGl2ZS4KKwkgKi8KKwlpdGVyX2RhdGEuYWRkciA9IGttYWxsb2MoRVRIX0FMRU4sIEdGUF9BVE9NSUMpOworCWlmIChpdGVyX2RhdGEuYWRkcikgeworCQltZW1jcHkoaXRlcl9kYXRhLmFkZHIsIHNjLT5zY19haC0+bWFjYWRkciwgRVRIX0FMRU4pOworCQlpdGVyX2RhdGEuY291bnQgPSAxOworCX0gZWxzZQorCQlpdGVyX2RhdGEuY291bnQgPSAwOworCisJLyogR2V0IGxpc3Qgb2YgYWxsIGFjdGl2ZSBNQUMgYWRkcmVzc2VzICovCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKHNjLT5odywgYXRoOWtfdmlmX2l0ZXIsCisJCQkJCQkgICAmaXRlcl9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYygKKwkJCXNjLT5zZWNfd2lwaHlbaV0tPmh3LCBhdGg5a192aWZfaXRlciwgJml0ZXJfZGF0YSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwkvKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIG1hc2sgdG8gY292ZXIgYWxsIGFjdGl2ZSBhZGRyZXNzZXMgKi8KKwltZW1zZXQobWFzaywgMCwgRVRIX0FMRU4pOworCWZvciAoaSA9IDA7IGkgPCBpdGVyX2RhdGEuY291bnQ7IGkrKykgeworCQl1OCAqYTEgPSBpdGVyX2RhdGEuYWRkciArIGkgKiBFVEhfQUxFTjsKKwkJZm9yIChqID0gaSArIDE7IGogPCBpdGVyX2RhdGEuY291bnQ7IGorKykgeworCQkJdTggKmEyID0gaXRlcl9kYXRhLmFkZHIgKyBqICogRVRIX0FMRU47CisJCQltYXNrWzBdIHw9IGExWzBdIF4gYTJbMF07CisJCQltYXNrWzFdIHw9IGExWzFdIF4gYTJbMV07CisJCQltYXNrWzJdIHw9IGExWzJdIF4gYTJbMl07CisJCQltYXNrWzNdIHw9IGExWzNdIF4gYTJbM107CisJCQltYXNrWzRdIHw9IGExWzRdIF4gYTJbNF07CisJCQltYXNrWzVdIHw9IGExWzVdIF4gYTJbNV07CisJCX0KKwl9CisKKwlrZnJlZShpdGVyX2RhdGEuYWRkcik7CisKKwkvKiBJbnZlcnQgdGhlIG1hc2sgYW5kIGNvbmZpZ3VyZSBoYXJkd2FyZSAqLworCXNjLT5ic3NpZG1hc2tbMF0gPSB+bWFza1swXTsKKwlzYy0+YnNzaWRtYXNrWzFdID0gfm1hc2tbMV07CisJc2MtPmJzc2lkbWFza1syXSA9IH5tYXNrWzJdOworCXNjLT5ic3NpZG1hc2tbM10gPSB+bWFza1szXTsKKwlzYy0+YnNzaWRtYXNrWzRdID0gfm1hc2tbNF07CisJc2MtPmJzc2lkbWFza1s1XSA9IH5tYXNrWzVdOworCisJYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHNjKTsKK30KKworaW50IGF0aDlrX3dpcGh5X2FkZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaSwgZXJyb3I7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwl1OCBhZGRyW0VUSF9BTEVOXTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5KSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IHNjLT5udW1fc2VjX3dpcGh5KSB7CisJCS8qIE5vIGVtcHR5IHNsb3QgYXZhaWxhYmxlOyBpbmNyZWFzZSBhcnJheSBsZW5ndGggKi8KKwkJc3RydWN0IGF0aF93aXBoeSAqKm47CisJCW4gPSBrcmVhbGxvYyhzYy0+c2VjX3dpcGh5LAorCQkJICAgICAoc2MtPm51bV9zZWNfd2lwaHkgKyAxKSAqCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5ICopLAorCQkJICAgICBHRlBfQVRPTUlDKTsKKwkJaWYgKG4gPT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW5baV0gPSBOVUxMOworCQlzYy0+c2VjX3dpcGh5ID0gbjsKKwkJc2MtPm51bV9zZWNfd2lwaHkrKzsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgc2MtPmRldik7CisKKwlhcGh5ID0gaHctPnByaXY7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5zZWNfd2lwaHlbaV0gPSBhcGh5OworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwltZW1jcHkoYWRkciwgc2MtPnNjX2FoLT5tYWNhZGRyLCBFVEhfQUxFTik7CisJYWRkclswXSB8PSAweDAyOyAvKiBMb2NhbGx5IG1hbmFnZWQgYWRkcmVzcyAqLworCS8qCisJICogWE9SIHZpcnR1YWwgd2lwaHkgaW5kZXggaW50byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyB0byBnZW5lcmF0ZQorCSAqIGEgZGlmZmVyZW50IE1BQyBhZGRyZXNzIGZvciBlYWNoIHZpcnR1YWwgd2lwaHkuCisJICovCisJYWRkcls1XSBePSBpICYgMHhmZjsKKwlhZGRyWzRdIF49IChpICYgMHhmZjAwKSA+PiA4OworCWFkZHJbM10gXj0gKGkgJiAweGZmMDAwMCkgPj4gMTY7CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgYWRkcik7CisKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CisKKwllcnJvciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CisKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkvKiBNYWtlIHN1cmUgd2lwaHkgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQgKGlmIGVuYWJsZWQpICovCisJCWF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc2MsIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBhdGg5a193aXBoeV9kZWwoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWludCBpOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKGFwaHkgPT0gc2MtPnNlY193aXBoeVtpXSkgeworCQkJc2MtPnNlY193aXBoeVtpXSA9IE5VTEw7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXBoeS0+aHcpOworCQkJaWVlZTgwMjExX2ZyZWVfaHcoYXBoeS0+aHcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBhdGg5a19zZW5kX251bGxmdW5jKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgICAgIGludCBwcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJX19sZTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKworCXNrYiA9IGRldl9hbGxvY19za2IoMjQpOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KGhkciwgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwcykKKwkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShoZHItPmFkZHIxLCBic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIyLCBhcGh5LT5ody0+d2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIzLCBic3NpZCwgRVRIX0FMRU4pOworCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisJaW5mby0+ZmxhZ3MgPSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CisJaW5mby0+Y29udHJvbC52aWYgPSB2aWY7CisJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSAwOworCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPSA0OworCWluZm8tPmNvbnRyb2wucmF0ZXNbMV0uaWR4ID0gLTE7CisKKwltZW1zZXQoJnR4Y3RsLCAwLCBzaXplb2Yoc3RydWN0IGF0aF90eF9jb250cm9sKSk7CisJdHhjdGwudHhxID0gJnNjLT50eC50eHFbc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPXV07CisJdHhjdGwuZnJhbWVfdHlwZSA9IHBzID8gQVRIOUtfSU5UX1BBVVNFIDogQVRIOUtfSU5UX1VOUEFVU0U7CisKKwlpZiAoYXRoX3R4X3N0YXJ0KGFwaHktPmh3LCBza2IsICZ0eGN0bCkgIT0gMCkKKwkJZ290byBleGl0OworCisJcmV0dXJuIDA7CitleGl0OgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgYm9vbCBfX2F0aDlrX3dpcGh5X3BhdXNpbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9QQVVTSU5HKQorCQlyZXR1cm4gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhdGg5a193aXBoeV9wYXVzaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWJvb2wgcmV0OworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYyk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBfX2F0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTikKKwkJcmV0dXJuIHRydWU7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBhdGg5a193aXBoeV9zY2FubmluZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlib29sIHJldDsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3NjYW5uaW5nKHNjKTsKKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19hdGg5a193aXBoeV91bnBhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOworCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fYXRoOWtfd2lwaHlfdW5wYXVzZV9jaChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWlmIChhcGh5ID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoYXBoeS0+Y2hhbl9pZHggIT0gYXBoeS0+c2MtPmNoYW5faWR4KQorCQlyZXR1cm47IC8qIHdpcGh5IG5vdCBvbiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCAqLworCV9fYXRoOWtfd2lwaHlfdW5wYXVzZShhcGh5KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfd2lwaHlfdW5wYXVzZV9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCV9fYXRoOWtfd2lwaHlfdW5wYXVzZV9jaChzYy0+cHJpX3dpcGh5KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykKKwkJX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHNjLT5zZWNfd2lwaHlbaV0pOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLCBjaGFuX3dvcmspOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+bmV4dF93aXBoeTsKKworCWlmIChhcGh5ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogQWxsIHBlbmRpbmcgaW50ZXJmYWNlcyBwYXVzZWQ7IHJlYWR5IHRvIGNoYW5nZQorCSAqIGNoYW5uZWxzLgorCSAqLworCisJLyogQ2hhbmdlIGNoYW5uZWxzICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbGx5ICovCisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBhcGh5LT5odywKKwkJCSAgICAgICZzYy0+c2NfYWgtPmNoYW5uZWxzW3NjLT5jaGFuX2lkeF0pOworCWF0aF91cGRhdGVfY2hhaW5tYXNrKHNjLCBzYy0+Y2hhbl9pc19odCk7CisJaWYgKGF0aF9zZXRfY2hhbm5lbChzYywgYXBoeS0+aHcsCisJCQkgICAgJnNjLT5zY19haC0+Y2hhbm5lbHNbc2MtPmNoYW5faWR4XSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogRmFpbGVkIHRvIHNldCBjaGFubmVsIGZvciBuZXcgIgorCQkgICAgICAgInZpcnR1YWwgd2lwaHlcbiIpOworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJYXRoOWtfd2lwaHlfdW5wYXVzZV9jaGFubmVsKHNjKTsKK30KKworLyoKKyAqIGF0aDlrIHZlcnNpb24gb2YgaWVlZTgwMjExX3R4X3N0YXR1cygpIGZvciBUWCBmcmFtZXMgdGhhdCBhcmUgZ2VuZXJhdGVkCisgKiBpbnRlcm5hbGx5IGluIHRoZSBkcml2ZXIuCisgKi8KK3ZvaWQgYXRoOWtfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCisJaWYgKHR4X2luZm9fcHJpdiAmJiB0eF9pbmZvX3ByaXYtPmZyYW1lX3R5cGUgPT0gQVRIOUtfSU5UX1BBVVNFICYmCisJICAgIGFwaHktPnN0YXRlID09IEFUSF9XSVBIWV9QQVVTSU5HKSB7CisJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogbm8gQUNLIGZvciBwYXVzZSAiCisJCQkgICAgICAgImZyYW1lXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJLyoKKwkJCSAqIFRoZSBBUCBkaWQgbm90IHJlcGx5OyBpZ25vcmUgdGhpcyB0byBhbGxvdyB1cyB0bworCQkJICogY29udGludWUuCisJCQkgKi8KKwkJfQorCQlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJCWlmICghYXRoOWtfd2lwaHlfcGF1c2luZyhhcGh5LT5zYykpIHsKKwkJCS8qCisJCQkgKiBEcm9wIGZyb20gdGFza2xldCB0byB3b3JrIHRvIGFsbG93IG11dGV4IGZvciBjaGFubmVsCisJCQkgKiBjaGFuZ2UuCisJCQkgKi8KKwkJCXF1ZXVlX3dvcmsoYXBoeS0+c2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCQl9CisJfQorCisJa2ZyZWUodHhfaW5mb19wcml2KTsKKwl0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdID0gTlVMTDsKKworCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfbWFya19wYXVzZWQoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwlpZiAoIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpCisJCXF1ZXVlX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+Y2hhbl93b3JrKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfcGF1c2VfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBkYXRhOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKSB2aWYtPmRydl9wcml2OworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWlmICghdmlmLT5ic3NfY29uZi5hc3NvYykgeworCQkJYXRoOWtfbWFya19wYXVzZWQoYXBoeSk7CisJCQlicmVhazsKKwkJfQorCQkvKiBUT0RPOiBjb3VsZCBhdm9pZCB0aGlzIGlmIGFscmVhZHkgaW4gUFMgbW9kZSAqLworCQlpZiAoYXRoOWtfc2VuZF9udWxsZnVuYyhhcGh5LCB2aWYsIGF2cC0+YnNzaWQsIDEpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZW5kIFBTIG51bGxmdW5jXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWF0aDlrX21hcmtfcGF1c2VkKGFwaHkpOworCQl9CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCS8qIEJlYWNvbiB0cmFuc21pc3Npb24gaXMgcGF1c2VkIGJ5IGFwaHktPnN0YXRlIGNoYW5nZSAqLworCQlhdGg5a19tYXJrX3BhdXNlZChhcGh5KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyBpbnQgX19hdGg5a193aXBoeV9wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhhcGh5LT5odyk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0lORzsKKwkvKgorCSAqIFRPRE86IGhhbmRsZSBQQVVTSU5HLT5QQVVTRUQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZQorCSAqIGFjdGl2ZSB2aWZzIChub3cgd2UgZG8gaXQgb24gdGhlIGZpcnN0IHZpZiBnZXR0aW5nIHJlYWR5OyBzaG91bGQgYmUKKwkgKiBvbiB0aGUgbGFzdCkKKwkgKi8KKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoYXBoeS0+aHcsIGF0aDlrX3BhdXNlX2l0ZXIsCisJCQkJCQkgICBhcGh5KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaW50IHJldDsKKwlzcGluX2xvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3BhdXNlKGFwaHkpOworCXNwaW5fdW5sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfdW5wYXVzZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGRhdGE7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopIHZpZi0+ZHJ2X3ByaXY7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKCF2aWYtPmJzc19jb25mLmFzc29jKQorCQkJYnJlYWs7CisJCWF0aDlrX3NlbmRfbnVsbGZ1bmMoYXBoeSwgdmlmLCBhdnAtPmJzc2lkLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJLyogQmVhY29uIHRyYW5zbWlzc2lvbiBpcyByZS1lbmFibGVkIGJ5IGFwaHktPnN0YXRlIGNoYW5nZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoYXBoeS0+aHcsCisJCQkJCQkgICBhdGg5a191bnBhdXNlX2l0ZXIsIGFwaHkpOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoYXBoeS0+aHcpOworCXJldHVybiAwOworfQorCitpbnQgYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWludCByZXQ7CisJc3Bpbl9sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0ID0gX19hdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworCXNwaW5fdW5sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV9tYXJrX2FsbF9wYXVzZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJc2MtPnByaV93aXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpCisJCQlzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fYXRoOWtfd2lwaHlfcGF1c2VfYWxsKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQlfX2F0aDlrX3dpcGh5X3BhdXNlKHNjLT5wcmlfd2lwaHkpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQkJX19hdGg5a193aXBoeV9wYXVzZShzYy0+c2VjX3dpcGh5W2ldKTsKKwl9Cit9CisKK2ludCBhdGg5a193aXBoeV9zZWxlY3Qoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWJvb2wgbm93OworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWYgKF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc2MpKSB7CisJCS8qCisJCSAqIEZvciBub3csIHdlIGFyZSB1c2luZyBtYWM4MDIxMSBzdyBzY2FuIGFuZCBpdCBleHBlY3RzIHRvCisJCSAqIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgY2hhbm5lbCBjaGFuZ2VzLCBzbyBhdm9pZCB3aXBoeQorCQkgKiBzY2hlZHVsaW5nIGR1cmluZyBhIHNjYW4uIFRoaXMgY291bGQgYmUgb3B0aW1pemVkIGlmIHRoZQorCQkgKiBzY2FubmluZyBjb250cm9sIHdlcmUgbW92ZWQgaW50byB0aGUgZHJpdmVyLgorCQkgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpIHsKKwkJaWYgKHNjLT53aXBoeV9zZWxlY3RfZmFpbHVyZXMgPT0gMCkKKwkJCXNjLT53aXBoeV9zZWxlY3RfZmlyc3RfZmFpbCA9IGppZmZpZXM7CisJCXNjLT53aXBoeV9zZWxlY3RfZmFpbHVyZXMrKzsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc2MtPndpcGh5X3NlbGVjdF9maXJzdF9mYWlsICsgSFogLyAyKSkKKwkJeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBQcmV2aW91cyB3aXBoeSBzZWxlY3QgdGltZWQgIgorCQkJICAgICAgICJvdXQ7IGRpc2FibGUvZW5hYmxlIGh3IHRvIHJlY292ZXJcbiIpOworCQkJX19hdGg5a193aXBoeV9tYXJrX2FsbF9wYXVzZWQoc2MpOworCQkJLyoKKwkJCSAqIFRPRE86IHRoaXMgd29ya2Fyb3VuZCB0byBmaXggaGFyZHdhcmUgaXMgdW5saWtlbHkgdG8KKwkJCSAqIGJlIHNwZWNpZmljIHRvIHZpcnR1YWwgd2lwaHkgY2hhbmdlcy4gSXQgY2FuIGhhcHBlbgorCQkJICogb24gbm9ybWFsIGNoYW5uZWwgY2hhbmdlLCB0b28sIGFuZCBhcyBzdWNoLCB0aGlzCisJCQkgKiBzaG91bGQgcmVhbGx5IGJlIG1hZGUgbW9yZSBnZW5lcmljLiBGb3IgZXhhbXBsZSwKKwkJCSAqIHRyaWNrZXIgcmFkaW8gZGlzYWJsZS9lbmFibGUgb24gR1RUIGludGVycnVwdCBidXJzdAorCQkJICogKHNheSwgMTAgR1RUIGludGVycnVwdHMgcmVjZWl2ZWQgd2l0aG91dCBhbnkgVFgKKwkJCSAqIGZyYW1lIGJlaW5nIGNvbXBsZXRlZCkKKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJCWF0aF9yYWRpb19kaXNhYmxlKHNjKTsKKwkJCWF0aF9yYWRpb19lbmFibGUoc2MpOworCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwkJfQorCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwl9CisJc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcyA9IDA7CisKKwkvKiBTdG9yZSB0aGUgbmV3IGNoYW5uZWwgKi8KKwlzYy0+Y2hhbl9pZHggPSBhcGh5LT5jaGFuX2lkeDsKKwlzYy0+Y2hhbl9pc19odCA9IGFwaHktPmNoYW5faXNfaHQ7CisJc2MtPm5leHRfd2lwaHkgPSBhcGh5OworCisJX19hdGg5a193aXBoeV9wYXVzZV9hbGwoc2MpOworCW5vdyA9ICFfX2F0aDlrX3dpcGh5X3BhdXNpbmcoYXBoeS0+c2MpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwlpZiAobm93KSB7CisJCS8qIFJlYWR5IHRvIHJlcXVlc3QgY2hhbm5lbCBjaGFuZ2UgaW1tZWRpYXRlbHkgKi8KKwkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCX0KKworCS8qCisJICogd2lwaHlzIHdpbGwgYmUgdW5wYXVzZWQgaW4gYXRoOWtfdHhfc3RhdHVzKCkgb25jZSBjaGFubmVsIGhhcyBiZWVuCisJICogY2hhbmdlZCBpZiBhbnkgd2lwaHkgbmVlZHMgdGltZSB0byBiZWNvbWUgcGF1c2VkLgorCSAqLworCisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgYXRoOWtfd2lwaHlfc3RhcnRlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybiB0cnVlOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2NoYW4oc3RydWN0IGF0aF93aXBoeSAqYXBoeSwKKwkJCQkgICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCkKK3sKKwlpZiAoc2VsZWN0ZWQtPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKSB7CisJCWlmIChhcGh5ID09IHNlbGVjdGVkKQorCQkJcmV0dXJuOworCQkvKgorCQkgKiBQYXVzZSBhbGwgb3RoZXIgd2lwaHlzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHNjYW4gZXZlbiBpZgorCQkgKiB0aGV5IGFyZSBvbiB0aGUgY3VycmVudCBjaGFubmVsIG5vdy4KKwkJICovCisJfSBlbHNlIGlmIChhcGh5LT5jaGFuX2lkeCA9PSBzZWxlY3RlZC0+Y2hhbl9pZHgpCisJCXJldHVybjsKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGFwaHktPmh3KTsKK30KKwordm9pZCBhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgc3RydWN0IGF0aF93aXBoeSAqc2VsZWN0ZWQpCit7CisJaW50IGk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCWF0aDlrX3dpcGh5X3BhdXNlX2NoYW4oc2MtPnByaV93aXBoeSwgc2VsZWN0ZWQpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQkJYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzYy0+c2VjX3dpcGh5W2ldLCBzZWxlY3RlZCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9zb2Z0YywKKwkJCQkJICAgIHdpcGh5X3dvcmsud29yayk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IE5VTEw7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9PSAwKSB7CisJCS8qIHdpcGh5IHNjaGVkdWxlciBpcyBkaXNhYmxlZCAqLworCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm47CisJfQorCit0cnlfYWdhaW46CisJc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCsrOworCXdoaWxlIChzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4IDw9IHNjLT5udW1fc2VjX3dpcGh5KSB7CisJCWFwaHkgPSBzYy0+c2VjX3dpcGh5W3NjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggLSAxXTsKKwkJaWYgKGFwaHkgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKQorCQkJYnJlYWs7CisKKwkJc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCsrOworCQlhcGh5ID0gTlVMTDsKKwl9CisJaWYgKGFwaHkgPT0gTlVMTCkgeworCQlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4ID0gMDsKKwkJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9JTkFDVElWRSkgeworCQkJaWYgKGZpcnN0KSB7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJCX0KKwkJCS8qIE5vIHdpcGh5IGlzIHJlYWR5IHRvIGJlIHNjaGVkdWxlZCAqLworCQl9IGVsc2UKKwkJCWFwaHkgPSBzYy0+cHJpX3dpcGh5OworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwlpZiAoYXBoeSAmJgorCSAgICBhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfQUNUSVZFICYmIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9TQ0FOICYmCisJICAgIGF0aDlrX3dpcGh5X3NlbGVjdChhcGh5KSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6IEZhaWxlZCB0byBzY2hlZHVsZSB2aXJ0dWFsIHdpcGh5ICIKKwkJICAgICAgICJjaGFuZ2VcbiIpOworCX0KKworCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT53aXBoeV93b3JrLAorCQkJICAgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworfQorCit2b2lkIGF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBtc2VjX2ludCkKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMobXNlY19pbnQpOworCWlmIChzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCkKKwkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPndpcGh5X3dvcmssCisJCQkJICAgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jCmluZGV4IGM5MmYwYzYuLmUzZjM3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEJJVFNfUEVSX0JZVEUgICAgICAgICAgIDgKICNkZWZpbmUgT0ZETV9QTENQX0JJVFMgICAgICAgICAgMjIKQEAgLTU1LDk0ICs1NSwxOSBAQAogCiAjZGVmaW5lIElTX0hUX1JBVEUoX3JhdGUpICAgICAoKF9yYXRlKSAmIDB4ODApCiAKLS8qCi0gKiBJbnNlcnQgYSBjaGFpbiBvZiBhdGhfYnVmIChkZXNjcmlwdG9ycykgb24gYSB0eHEgYW5kCi0gKiBhc3N1bWUgdGhlIGRlc2NyaXB0b3JzIGFyZSBhbHJlYWR5IGNoYWluZWQgdG9nZXRoZXIgYnkgY2FsbGVyLgotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpOwogc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmOworCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZik7CiAKLQkvKgotCSAqIEluc2VydCB0aGUgZnJhbWUgb24gdGhlIG91dGJvdW5kIGxpc3QgYW5kCi0JICogcGFzcyBpdCBvbiB0byB0aGUgaGFyZHdhcmUuCi0JICovCi0KLQlpZiAobGlzdF9lbXB0eShoZWFkKSkKLQkJcmV0dXJuOwotCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQotCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChoZWFkLCAmdHhxLT5heHFfcSk7Ci0JdHhxLT5heHFfZGVwdGgrKzsKLQl0eHEtPmF4cV90b3RhbHF1ZXVlZCsrOwotCXR4cS0+YXhxX2xpbmtidWYgPSBsaXN0X2VudHJ5KHR4cS0+YXhxX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19RVUVVRSwKLQkJInFudW06ICVkLCB0eHEgZGVwdGg6ICVkXG4iLCB0eHEtPmF4cV9xbnVtLCB0eHEtPmF4cV9kZXB0aCk7Ci0KLQlpZiAodHhxLT5heHFfbGluayA9PSBOVUxMKSB7Ci0JCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCB0eHEtPmF4cV9xbnVtLCBiZi0+YmZfZGFkZHIpOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsCi0JCQkiVFhEUFsldV0gPSAlbGx4ICglcClcbiIsCi0JCQl0eHEtPmF4cV9xbnVtLCBpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7Ci0JfSBlbHNlIHsKLQkJKnR4cS0+YXhxX2xpbmsgPSBiZi0+YmZfZGFkZHI7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImxpbmtbJXVdICglcCk9JWxseCAoJXApXG4iLAotCQkJdHhxLT5heHFfcW51bSwgdHhxLT5heHFfbGluaywKLQkJCWl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKLQl9Ci0JdHhxLT5heHFfbGluayA9ICYoYmYtPmJmX2xhc3RiZi0+YmZfZGVzYy0+ZHNfbGluayk7Ci0JYXRoOWtfaHdfdHhzdGFydChhaCwgdHhxLT5heHFfcW51bSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3QgYXRoX3htaXRfc3RhdHVzICp0eF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOwotCWludCBoZHJsZW4sIHBhZHNpemU7Ci0KLQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBjb21wbGV0ZTogc2tiOiAlcFxuIiwgc2tiKTsKLQotCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLIHx8Ci0JICAgIHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQpIHsKLQkJa2ZyZWUodHhfaW5mb19wcml2KTsKLQkJdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IE5VTEw7Ci0JfQotCi0JaWYgKHR4X3N0YXR1cy0+ZmxhZ3MgJiBBVEhfVFhfQkFSKSB7Ci0JCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0s7Ci0JCXR4X3N0YXR1cy0+ZmxhZ3MgJj0gfkFUSF9UWF9CQVI7Ci0JfQotCi0JaWYgKCEodHhfc3RhdHVzLT5mbGFncyAmIChBVEhfVFhfRVJST1IgfCBBVEhfVFhfWFJFVFJZKSkpIHsKLQkJLyogRnJhbWUgd2FzIEFDS2VkICovCi0JCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQl9Ci0KLQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSB0eF9zdGF0dXMtPnJldHJpZXMgKyAxOwotCi0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQlwYWRzaXplID0gaGRybGVuICYgMzsKLQlpZiAocGFkc2l6ZSAmJiBoZHJsZW4gPj0gMjQpIHsKLQkJLyoKLQkJICogUmVtb3ZlIE1BQyBoZWFkZXIgcGFkZGluZyBiZWZvcmUgZ2l2aW5nIHRoZSBmcmFtZSBiYWNrIHRvCi0JCSAqIG1hYzgwMjExLgotCQkgKi8KLQkJbWVtbW92ZShza2ItPmRhdGEgKyBwYWRzaXplLCBza2ItPmRhdGEsIGhkcmxlbik7Ci0JCXNrYl9wdWxsKHNrYiwgcGFkc2l6ZSk7Ci0JfQotCi0JaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKLX0KLQotLyogQ2hlY2sgaWYgaXQncyBva2F5IHRvIHNlbmQgb3V0IGFnZ3JlZ2F0ZXMgKi8KKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBBZ2dyZWdhdGlvbiBsb2dpYyAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBhdGhfYWdncl9xdWVyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkbm8pCiB7CkBAIC0xNTYsMjMyICs4MSwxOSBAQAogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoX2dldF9iZWFjb25jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCwKLQkJCQkgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCi0JLyogZmlsbCBpbiBiZWFjb24gY29uZmlnIGRhdGEgKi8KLQotCWNvbmYtPmJlYWNvbl9pbnRlcnZhbCA9IGh3LT5jb25mLmJlYWNvbl9pbnQ7Ci0JY29uZi0+bGlzdGVuX2ludGVydmFsID0gMTAwOwotCWNvbmYtPmR0aW1fY291bnQgPSAxOwotCWNvbmYtPmJtaXNzX3RpbWVvdXQgPSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAqIGNvbmYtPmxpc3Rlbl9pbnRlcnZhbDsKLX0KLQotLyogQ2FsY3VsYXRlIEF0aGVyb3MgcGFja2V0IHR5cGUgZnJvbSBJRUVFODAyMTEgcGFja2V0IGhlYWRlciAqLwotCi1zdGF0aWMgZW51bSBhdGg5a19wa3RfdHlwZSBnZXRfaHdfcGFja2V0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCWVudW0gYXRoOWtfcGt0X3R5cGUgaHR5cGU7Ci0JX19sZTE2IGZjOwotCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0JFQUNPTjsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpCi0JCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFJPQkVfUkVTUDsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXRpbShmYykpCi0JCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfQVRJTTsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfcHNwb2xsKGZjKSkKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9QU1BPTEw7Ci0JZWxzZQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX05PUk1BTDsKLQotCXJldHVybiBodHlwZTsKLX0KLQotc3RhdGljIGJvb2wgaXNfcGFlKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlfX2xlMTYgZmM7Ci0KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCWlmIChpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpIHx8Ci0JCSAgICAvKiBQb3J0IEFjY2VzcyBFbnRpdHkgKElFRUUgODAyLjFYKSAqLwotCQkgICAgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW50IGdldF9od19jcnlwdG9fa2V5dHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQotCWlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleSkgewotCQlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfV0VQKQotCQkJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX1dFUDsKLQkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9US0lQOwotCQllbHNlIGlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19DQ01QKQotCQkJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0FFUzsKLQl9Ci0KLQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfQ0xFQVI7Ci19Ci0KLS8qIENhbGxlZCBvbmx5IHdoZW4gdHggYWdncmVnYXRpb24gaXMgZW5hYmxlZCBhbmQgSFQgaXMgc3VwcG9ydGVkICovCi0KLXN0YXRpYyB2b2lkIGFzc2lnbl9hZ2dyX3RpZF9zZXFubyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7Ci0JX19sZTE2IGZjOwotCXU4ICpxYzsKLQotCWlmICghdHhfaW5mby0+Y29udHJvbC5zdGEpCi0JCXJldHVybjsKLQotCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXR4X2luZm8tPmNvbnRyb2wuc3RhLT5kcnZfcHJpdjsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0KLQkvKiBHZXQgdGlkbm8gKi8KLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7Ci0JCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7Ci0JCWJmLT5iZl90aWRubyA9IHFjWzBdICYgMHhmOwotCX0KLQotCS8qIEdldCBzZXFubyAqLwotCS8qIEZvciBIVCBjYXBhYmxlIHN0YXRpb25zLCB3ZSBzYXZlIHRpZG5vIGZvciBsYXRlciB1c2UuCi0JICogV2UgYWxzbyBvdmVycmlkZSBzZXFubyBzZXQgYnkgdXBwZXIgbGF5ZXIgd2l0aCB0aGUgb25lCi0JICogaW4gdHggYWdncmVnYXRpb24gc3RhdGUuCi0JICoKLQkgKiBJZiBmcmFnbWVudGF0aW9uIGlzIG9uLCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzCi0JICogbm90IG92ZXJyaWRkZW4sIHNpbmNlIGl0IGhhcyBiZWVuCi0JICogaW5jcmVtZW50ZWQgYnkgdGhlIGZyYWdtZW50YXRpb24gcm91dGluZS4KLQkgKgotCSAqIEZJWE1FOiBjaGVjayBpZiB0aGUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgZXhjZWVkcwotCSAqIElFRUU4MDIxMSBtYXguCi0JICovCi0JdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwotCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0aWQtPnNlcV9uZXh0IDw8Ci0JCQlJRUVFODAyMTFfU0VRX1NFUV9TSElGVCk7Ci0JYmYtPmJmX3NlcW5vID0gdGlkLT5zZXFfbmV4dDsKLQlJTkNSKHRpZC0+c2VxX25leHQsIElFRUU4MDIxMV9TRVFfTUFYKTsKLX0KLQotc3RhdGljIGludCBzZXR1cF90eF9mbGFncyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IGZsYWdzID0gMDsKLQotCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19DTFJETUFTSzsgLyogbmVlZGVkIGZvciBjcnlwdG8gZXJyb3JzICovCi0JZmxhZ3MgfD0gQVRIOUtfVFhERVNDX0lOVFJFUTsKLQotCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQotCQlmbGFncyB8PSBBVEg5S19UWERFU0NfTk9BQ0s7Ci0JaWYgKHR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19SVFNFTkE7Ci0KLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX3R4X2dldF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idWYgKmJmID0gTlVMTDsKLQotCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmc2MtPnR4LnR4YnVmKSkpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCWxpc3RfZGVsKCZiZi0+bGlzdCk7Ci0KLQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQlyZXR1cm4gYmY7Ci19Ci0KLS8qIFRvIGNvbXBsZXRlIGEgY2hhaW4gb2YgYnVmZmVycyBhc3NvY2lhdGVkIGEgZnJhbWUgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsCi0JCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKLQkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5iZl9tcGR1OwotCXN0cnVjdCBhdGhfeG1pdF9zdGF0dXMgdHhfc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIFNldCByZXRyeSBpbmZvcm1hdGlvbi4KLQkgKiBOQjogRG9uJ3QgdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgZGVzY3JpcHRvciwgYmVjYXVzZSB0aGUgZnJhbWUKLQkgKiBjb3VsZCBiZSBzb2Z0d2FyZSByZXRyaWVkLgotCSAqLwotCXR4X3N0YXR1cy5yZXRyaWVzID0gYmYtPmJmX3JldHJpZXM7Ci0JdHhfc3RhdHVzLmZsYWdzID0gMDsKLQotCWlmIChzZW5kYmFyKQotCQl0eF9zdGF0dXMuZmxhZ3MgPSBBVEhfVFhfQkFSOwotCi0JaWYgKCF0eG9rKSB7Ci0JCXR4X3N0YXR1cy5mbGFncyB8PSBBVEhfVFhfRVJST1I7Ci0KLQkJaWYgKGJmX2lzeHJldHJpZWQoYmYpKQotCQkJdHhfc3RhdHVzLmZsYWdzIHw9IEFUSF9UWF9YUkVUUlk7Ci0JfQotCi0JLyogVW5tYXAgdGhpcyBmcmFtZSAqLwotCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsCi0JCQkgYmYtPmJmX2RtYWNvbnRleHQsCi0JCQkgc2tiLT5sZW4sCi0JCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JLyogY29tcGxldGUgdGhpcyBmcmFtZSAqLwotCWF0aF90eF9jb21wbGV0ZShzYywgc2tiLCAmdHhfc3RhdHVzKTsKLQotCS8qCi0JICogUmV0dXJuIHRoZSBsaXN0IG9mIGF0aF9idWYgb2YgdGhpcyBtcGR1IHRvIGZyZWUgcXVldWUKLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOwotCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChiZl9xLCAmc2MtPnR4LnR4YnVmKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+dHgudHhidWZsb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBxdWV1ZSB1cCBhIGRlc3QvYWMgcGFpciBmb3IgdHggc2NoZWR1bGluZwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KIHN0YXRpYyB2b2lkIGF0aF90eF9xdWV1ZV90aWQoc3RydWN0IGF0aF90eHEgKnR4cSwgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF9hdHhfYWMgKmFjID0gdGlkLT5hYzsKIAotCS8qCi0JICogaWYgdGlkIGlzIHBhdXNlZCwgaG9sZCBvZmYKLQkgKi8KIAlpZiAodGlkLT5wYXVzZWQpCiAJCXJldHVybjsKIAotCS8qCi0JICogYWRkIHRpZCB0byBhYyBhdG1vc3Qgb25jZQotCSAqLwogCWlmICh0aWQtPnNjaGVkKQogCQlyZXR1cm47CiAKIAl0aWQtPnNjaGVkID0gdHJ1ZTsKIAlsaXN0X2FkZF90YWlsKCZ0aWQtPmxpc3QsICZhYy0+dGlkX3EpOwogCi0JLyoKLQkgKiBhZGQgbm9kZSBhYyB0byB0eHEgYXRtb3N0IG9uY2UKLQkgKi8KIAlpZiAoYWMtPnNjaGVkKQogCQlyZXR1cm47CiAKQEAgLTM4OSwyMiArMTAxLDE2IEBACiAJbGlzdF9hZGRfdGFpbCgmYWMtPmxpc3QsICZ0eHEtPmF4cV9hY3EpOwogfQogCi0vKiBwYXVzZSBhIHRpZCAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfcGF1c2VfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdGlkLT5hYy0+cW51bV07CiAKIAlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCiAJdGlkLT5wYXVzZWQrKzsKLQogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIH0KIAotLyogcmVzdW1lIGEgdGlkIGFuZCBzY2hlZHVsZSBhZ2dyZWdhdGUgKi8KLQotdm9pZCBhdGhfdHhfcmVzdW1lX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCitzdGF0aWMgdm9pZCBhdGhfdHhfcmVzdW1lX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3RpZC0+YWMtPnFudW1dOwogCkBAIC00MTksMjgwICsxMjUsMTIgQEAKIAlpZiAobGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpCiAJCWdvdG8gdW5sb2NrOwogCi0JLyoKLQkgKiBBZGQgdGhpcyBUSUQgdG8gc2NoZWR1bGVyIGFuZCB0cnkgdG8gc2VuZCBvdXQgYWdncmVnYXRlcwotCSAqLwogCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOwogCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogfQogCi0vKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYmFkIGZyYW1lcyAqLwotCi1zdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJICAgICAgaW50IHR4b2spCi17Ci0Jc3RydWN0IGF0aF9idWYgKmJmX2xhc3QgPSBiZi0+YmZfbGFzdGJmOwotCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZl9sYXN0LT5iZl9kZXNjOwotCXUxNiBzZXFfc3QgPSAwOwotCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07Ci0JaW50IGJhX2luZGV4OwotCWludCBuYmFkID0gMDsKLQlpbnQgaXNhZ2dyID0gMDsKLQotCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzID09IEFUSDlLX1RYX1NXX0FCT1JURUQpCi0JCXJldHVybiAwOwotCi0JaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKLQlpZiAoaXNhZ2dyKSB7Ci0JCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOwotCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7Ci0JfQotCi0Jd2hpbGUgKGJmKSB7Ci0JCWJhX2luZGV4ID0gQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKTsKLQkJaWYgKCF0eG9rIHx8IChpc2FnZ3IgJiYgIUFUSF9CQV9JU1NFVChiYSwgYmFfaW5kZXgpKSkKLQkJCW5iYWQrKzsKLQotCQliZiA9IGJmLT5iZl9uZXh0OwotCX0KLQotCXJldHVybiBuYmFkOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfc2V0X3JldHJ5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCi0JYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1JFVFJZOwotCWJmLT5iZl9yZXRyaWVzKys7Ci0KLQlza2IgPSBiZi0+YmZfbXBkdTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1JFVFJZKTsKLX0KLQotLyogVXBkYXRlIGJsb2NrIGFjayB3aW5kb3cgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X3VwZGF0ZV9iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICAgaW50IHNlcW5vKQotewotCWludCBpbmRleCwgY2luZGV4OwotCi0JaW5kZXggID0gQVRIX0JBX0lOREVYKHRpZC0+c2VxX3N0YXJ0LCBzZXFubyk7Ci0JY2luZGV4ID0gKHRpZC0+YmF3X2hlYWQgKyBpbmRleCkgJiAoQVRIX1RJRF9NQVhfQlVGUyAtIDEpOwotCi0JdGlkLT50eF9idWZbY2luZGV4XSA9IE5VTEw7Ci0KLQl3aGlsZSAodGlkLT5iYXdfaGVhZCAhPSB0aWQtPmJhd190YWlsICYmICF0aWQtPnR4X2J1Zlt0aWQtPmJhd19oZWFkXSkgewotCQlJTkNSKHRpZC0+c2VxX3N0YXJ0LCBJRUVFODAyMTFfU0VRX01BWCk7Ci0JCUlOQ1IodGlkLT5iYXdfaGVhZCwgQVRIX1RJRF9NQVhfQlVGUyk7Ci0JfQotfQotCi0vKgotICogYXRoX3BrdF9kdXIgLSBjb21wdXRlIHBhY2tldCBkdXJhdGlvbiAoTkI6IG5vdCBOQVYpCi0gKgotICogcml4IC0gcmF0ZSBpbmRleAotICogcGt0bGVuIC0gdG90YWwgYnl0ZXMgKGRlbGltcyArIGRhdGEgKyBmY3MgKyBwYWRzICsgcGFkIGRlbGltcykKLSAqIHdpZHRoICAtIDAgZm9yIDIwIE1IeiwgMSBmb3IgNDAgTUh6Ci0gKiBoYWxmX2dpIC0gdG8gdXNlIDR1cyB2L3MgMy42IHVzIGZvciBzeW1ib2wgdGltZQotICovCi1zdGF0aWMgdTMyIGF0aF9wa3RfZHVyYXRpb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHU4IHJpeCwgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJICAgIGludCB3aWR0aCwgaW50IGhhbGZfZ2ksIGJvb2wgc2hvcnRQcmVhbWJsZSkKLXsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBzYy0+Y3VyX3JhdGVfdGFibGU7Ci0JdTMyIG5iaXRzLCBuc3ltYml0cywgZHVyYXRpb24sIG5zeW1ib2xzOwotCXU4IHJjOwotCWludCBzdHJlYW1zLCBwa3RsZW47Ci0KLQlwa3RsZW4gPSBiZl9pc2FnZ3IoYmYpID8gYmYtPmJmX2FsIDogYmYtPmJmX2ZybWxlbjsKLQlyYyA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5yYXRlY29kZTsKLQotCS8qIGZvciBsZWdhY3kgcmF0ZXMsIHVzZSBvbGQgZnVuY3Rpb24gdG8gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKi8KLQlpZiAoIUlTX0hUX1JBVEUocmMpKQotCQlyZXR1cm4gYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsIHBrdGxlbiwKLQkJCQkJICAgICAgcml4LCBzaG9ydFByZWFtYmxlKTsKLQotCS8qIGZpbmQgbnVtYmVyIG9mIHN5bWJvbHM6IFBMQ1AgKyBkYXRhICovCi0JbmJpdHMgPSAocGt0bGVuIDw8IDMpICsgT0ZETV9QTENQX0JJVFM7Ci0JbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07Ci0JbnN5bWJvbHMgPSAobmJpdHMgKyBuc3ltYml0cyAtIDEpIC8gbnN5bWJpdHM7Ci0KLQlpZiAoIWhhbGZfZ2kpCi0JCWR1cmF0aW9uID0gU1lNQk9MX1RJTUUobnN5bWJvbHMpOwotCWVsc2UKLQkJZHVyYXRpb24gPSBTWU1CT0xfVElNRV9IQUxGR0kobnN5bWJvbHMpOwotCi0JLyogYWRkdXAgZHVyYXRpb24gZm9yIGxlZ2FjeS9odCB0cmFpbmluZyBhbmQgc2lnbmFsIGZpZWxkcyAqLwotCXN0cmVhbXMgPSBIVF9SQ18yX1NUUkVBTVMocmMpOwotCWR1cmF0aW9uICs9IExfU1RGICsgTF9MVEYgKyBMX1NJRyArIEhUX1NJRyArIEhUX1NURiArIEhUX0xURihzdHJlYW1zKTsKLQotCXJldHVybiBkdXJhdGlvbjsKLX0KLQotLyogUmF0ZSBtb2R1bGUgZnVuY3Rpb24gdG8gc2V0IHJhdGUgcmVsYXRlZCBmaWVsZHMgaW4gdHggZGVzY3JpcHRvciAqLwotCi1zdGF0aWMgdm9pZCBhdGhfYnVmX3NldF9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCi17Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQ7Ci0Jc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmLT5iZl9kZXNjOwotCXN0cnVjdCBhdGhfZGVzYyAqbGFzdGRzID0gYmYtPmJmX2xhc3RiZi0+YmZfZGVzYzsKLQlzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1s0XTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JaW50IGksIGZsYWdzLCBydHNjdHNlbmEgPSAwOwotCXUzMiBjdHNkdXJhdGlvbiA9IDA7Ci0JdTggcml4ID0gMCwgY2l4LCBjdHNyYXRlID0gMDsKLQlfX2xlMTYgZmM7Ci0KLQltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKLQotCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKLQotCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykgfHwKLQkgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpIHsKLQkJcmF0ZXNbMV0uY291bnQgPSByYXRlc1syXS5jb3VudCA9IHJhdGVzWzNdLmNvdW50ID0gMDsKLQkJcmF0ZXNbMV0uaWR4ID0gcmF0ZXNbMl0uaWR4ID0gcmF0ZXNbM10uaWR4ID0gMDsKLQkJcmF0ZXNbMF0uY291bnQgPSBBVEhfVFhNQVhUUlk7Ci0JfQotCi0JLyogZ2V0IHRoZSBjaXggZm9yIHRoZSBsb3dlc3QgdmFsaWQgcml4ICovCi0JcnQgPSBzYy0+Y3VyX3JhdGVfdGFibGU7Ci0JZm9yIChpID0gMzsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKHJhdGVzW2ldLmNvdW50ICYmIChyYXRlc1tpXS5pZHggPj0gMCkpIHsKLQkJCXJpeCA9IHJhdGVzW2ldLmlkeDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZmxhZ3MgPSAoYmYtPmJmX2ZsYWdzICYgKEFUSDlLX1RYREVTQ19SVFNFTkEgfCBBVEg5S19UWERFU0NfQ1RTRU5BKSk7Ci0JY2l4ID0gcnQtPmluZm9bcml4XS5jdHJsX3JhdGU7Ci0KLQkvKgotCSAqIElmIDgwMi4xMWcgcHJvdGVjdGlvbiBpcyBlbmFibGVkLCBkZXRlcm1pbmUgd2hldGhlciB0byB1c2UgUlRTL0NUUyBvcgotCSAqIGp1c3QgQ1RTLiAgTm90ZSB0aGF0IHRoaXMgaXMgb25seSBkb25lIGZvciBPRkRNL0hUIHVuaWNhc3QgZnJhbWVzLgotCSAqLwotCWlmIChzYy0+c2NfcHJvdG1vZGUgIT0gUFJPVF9NX05PTkUgJiYgIShiZi0+YmZfZmxhZ3MgJiBBVEg5S19UWERFU0NfTk9BQ0spCi0JICAgICYmIChydC0+aW5mb1tyaXhdLnBoeSA9PSBXTEFOX1JDX1BIWV9PRkRNIHx8Ci0JCVdMQU5fUkNfUEhZX0hUKHJ0LT5pbmZvW3JpeF0ucGh5KSkpIHsKLQkJaWYgKHNjLT5zY19wcm90bW9kZSA9PSBQUk9UX01fUlRTQ1RTKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCQllbHNlIGlmIChzYy0+c2NfcHJvdG1vZGUgPT0gUFJPVF9NX0NUU09OTFkpCi0JCQlmbGFncyA9IEFUSDlLX1RYREVTQ19DVFNFTkE7Ci0KLQkJY2l4ID0gcnQtPmluZm9bc2MtPnNjX3Byb3RyaXhdLmN0cmxfcmF0ZTsKLQkJcnRzY3RzZW5hID0gMTsKLQl9Ci0KLQkvKiBGb3IgMTFuLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBlbmFibGUgUlRTIGZvciBodyByZXRyaWVkIGZyYW1lcy4KLQkgKiBXZSBlbmFibGUgdGhlIGdsb2JhbCBmbGFnIGhlcmUgYW5kIGxldCByYXRlIHNlcmllcyBmbGFncyBkZXRlcm1pbmUKLQkgKiB3aGljaCByYXRlcyB3aWxsIGFjdHVhbGx5IHVzZSBSVFMuCi0JICovCi0JaWYgKChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSAmJiBiZl9pc2RhdGEoYmYpKSB7Ci0JCS8qIDgwMi4xMWcgcHJvdGVjdGlvbiBub3QgbmVlZGVkLCB1c2Ugb3VyIGRlZmF1bHQgYmVoYXZpb3IgKi8KLQkJaWYgKCFydHNjdHNlbmEpCi0JCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7Ci0JfQotCi0JLyogU2V0IHByb3RlY3Rpb24gaWYgYWdncmVnYXRlIHByb3RlY3Rpb24gb24gKi8KLQlpZiAoc2MtPnNjX2NvbmZpZy5hdGhfYWdncl9wcm90ICYmCi0JICAgICghYmZfaXNhZ2dyKGJmKSB8fCAoYmZfaXNhZ2dyKGJmKSAmJiBiZi0+YmZfYWwgPCA4MTkyKSkpIHsKLQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCQljaXggPSBydC0+aW5mb1tzYy0+c2NfcHJvdHJpeF0uY3RybF9yYXRlOwotCQlydHNjdHNlbmEgPSAxOwotCX0KLQotCS8qIEZvciBBUjU0MTYgLSBSVFMgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGEgZnJhbWUgbGFyZ2VyIHRoYW4gOEsgKi8KLQlpZiAoYmZfaXNhZ2dyKGJmKSAmJiAoYmYtPmJmX2FsID4gYWgtPmFoX2NhcHMucnRzX2FnZ3JfbGltaXQpKQotCQlmbGFncyAmPSB+KEFUSDlLX1RYREVTQ19SVFNFTkEpOwotCi0JLyoKLQkgKiBDVFMgdHJhbnNtaXQgcmF0ZSBpcyBkZXJpdmVkIGZyb20gdGhlIHRyYW5zbWl0IHJhdGUgYnkgbG9va2luZyBpbiB0aGUKLQkgKiBoL3cgcmF0ZSB0YWJsZS4gIFdlIG11c3QgYWxzbyBmYWN0b3IgaW4gd2hldGhlciBvciBub3QgYSBzaG9ydAotCSAqIHByZWFtYmxlIGlzIHRvIGJlIHVzZWQuIE5COiBjaXggaXMgc2V0IGFib3ZlIHdoZXJlIFJUUy9DVFMgaXMgZW5hYmxlZAotCSAqLwotCWN0c3JhdGUgPSBydC0+aW5mb1tjaXhdLnJhdGVjb2RlIHwKLQkJKGJmX2lzc2hwcmVhbWJsZShiZikgPyBydC0+aW5mb1tjaXhdLnNob3J0X3ByZWFtYmxlIDogMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmICghcmF0ZXNbaV0uY291bnQgfHwgKHJhdGVzW2ldLmlkeCA8IDApKQotCQkJY29udGludWU7Ci0KLQkJcml4ID0gcmF0ZXNbaV0uaWR4OwotCi0JCXNlcmllc1tpXS5SYXRlID0gcnQtPmluZm9bcml4XS5yYXRlY29kZSB8Ci0JCQkoYmZfaXNzaHByZWFtYmxlKGJmKSA/IHJ0LT5pbmZvW3JpeF0uc2hvcnRfcHJlYW1ibGUgOiAwKTsKLQotCQlzZXJpZXNbaV0uVHJpZXMgPSByYXRlc1tpXS5jb3VudDsKLQotCQlzZXJpZXNbaV0uUmF0ZUZsYWdzID0gKAotCQkJKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSA/Ci0JCQkJQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTIDogMCkgfAotCQkJKChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpID8KLQkJCQlBVEg5S19SQVRFU0VSSUVTXzIwNDAgOiAwKSB8Ci0JCQkoKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSA/Ci0JCQkJQVRIOUtfUkFURVNFUklFU19IQUxGR0kgOiAwKTsKLQotCQlzZXJpZXNbaV0uUGt0RHVyYXRpb24gPSBhdGhfcGt0X2R1cmF0aW9uKHNjLCByaXgsIGJmLAotCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpICE9IDAsCi0JCQkgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSwKLQkJCSBiZl9pc3NocHJlYW1ibGUoYmYpKTsKLQotCQlzZXJpZXNbaV0uQ2hTZWwgPSBzYy0+c2NfdHhfY2hhaW5tYXNrOwotCi0JCWlmIChydHNjdHNlbmEpCi0JCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUzsKLQl9Ci0KLQkvKiBzZXQgZHVyX3VwZGF0ZV9lbiBmb3IgbC1zaWcgY29tcHV0YXRpb24gZXhjZXB0IGZvciBQUy1Qb2xsIGZyYW1lcyAqLwotCWF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oYWgsIGRzLCBsYXN0ZHMsICFiZl9pc3BzcG9sbChiZiksCi0JCQkJICAgICBjdHNyYXRlLCBjdHNkdXJhdGlvbiwKLQkJCQkgICAgIHNlcmllcywgNCwgZmxhZ3MpOwotCi0JaWYgKHNjLT5zY19jb25maWcuYXRoX2FnZ3JfcHJvdCAmJiBmbGFncykKLQkJYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oYWgsIGRzLCA4MTkyKTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uIHRvIHNlbmQgYSBub3JtYWwgSFQgKG5vbi1BTVBEVSkgZnJhbWUKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwotc3RhdGljIGludCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJICAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkKQotewotCXN0cnVjdCBhdGhfYnVmICpiZjsKLQotCUJVR19PTihsaXN0X2VtcHR5KGJmX2hlYWQpKTsKLQotCWJmID0gbGlzdF9maXJzdF9lbnRyeShiZl9oZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9BTVBEVTsgLyogcmVndWxhciBIVCBmcmFtZSAqLwotCi0JLyogdXBkYXRlIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciBmb3Igc3Vic2VxdWVudCBBRERCQSByZXF1ZXN0ICovCi0JSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOwotCi0JLyogUXVldWUgdG8gaC93IHdpdGhvdXQgYWdncmVnYXRpb24gKi8KLQliZi0+YmZfbmZyYW1lcyA9IDE7Ci0JYmYtPmJmX2xhc3RiZiA9IGJmLT5iZl9sYXN0ZnJtOyAvKiBvbmUgc2luZ2xlIGZyYW1lICovCi0JYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwotCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgYmZfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZmx1c2ggdGlkJ3Mgc29mdHdhcmUgcXVldWUgYW5kIHNlbmQgZnJhbWVzIGFzIG5vbi1hbXBkdSdzICovCi0KIHN0YXRpYyB2b2lkIGF0aF90eF9mbHVzaF90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0aWQtPmFjLT5xbnVtXTsKQEAgLTcxMyw0NjggKzE1MSwzMCBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpIHsKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAJCUFTU0VSVCghYmZfaXNyZXRyaWVkKGJmKSk7Ci0JCWxpc3RfY3V0X3Bvc2l0aW9uKCZiZl9oZWFkLCAmdGlkLT5idWZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKLQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eHEsIHRpZCwgJmJmX2hlYWQpOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHNjLCB0eHEsIHRpZCwgJmJmX2hlYWQpOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIH0KIAotLyogQ29tcGxldGlvbiByb3V0aW5lIG9mIGFuIGFnZ3JlZ2F0ZSAqLwotCi1zdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYWdncl9yaWZzKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSAgICAgIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkJICAgICAgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCi0JCQkJICAgICAgaW50IHR4b2spCitzdGF0aWMgdm9pZCBhdGhfdHhfdXBkYXRlX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkgICAgICBpbnQgc2Vxbm8pCiB7Ci0Jc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQgPSBOVUxMOwotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ID0gYmYtPmJmX2xhc3RiZjsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzID0gYmZfbGFzdC0+YmZfZGVzYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbmV4dCwgKmJmX2xhc3RxID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQsIGJmX3BlbmRpbmc7Ci0JdTE2IHNlcV9zdCA9IDA7Ci0JdTMyIGJhW1dNRV9CQV9CTVBfU0laRSA+PiA1XTsKLQlpbnQgaXNhZ2dyLCB0eGZhaWwsIHR4cGVuZGluZywgc2VuZGJhciA9IDAsIG5lZWRyZXNldCA9IDA7CisJaW50IGluZGV4LCBjaW5kZXg7CiAKLQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWluZGV4ICA9IEFUSF9CQV9JTkRFWCh0aWQtPnNlcV9zdGFydCwgc2Vxbm8pOworCWNpbmRleCA9ICh0aWQtPmJhd19oZWFkICsgaW5kZXgpICYgKEFUSF9USURfTUFYX0JVRlMgLSAxKTsKIAotCWlmICh0eF9pbmZvLT5jb250cm9sLnN0YSkgewotCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7Ci0JCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKLQl9CisJdGlkLT50eF9idWZbY2luZGV4XSA9IE5VTEw7CiAKLQlpc2FnZ3IgPSBiZl9pc2FnZ3IoYmYpOwotCWlmIChpc2FnZ3IpIHsKLQkJaWYgKHR4b2spIHsKLQkJCWlmIChBVEhfRFNfVFhfQkEoZHMpKSB7Ci0JCQkJLyoKLQkJCQkgKiBleHRyYWN0IHN0YXJ0aW5nIHNlcXVlbmNlIGFuZAotCQkJCSAqIGJsb2NrLWFjayBiaXRtYXAKLQkJCQkgKi8KLQkJCQlzZXFfc3QgPSBBVEhfRFNfQkFfU0VRKGRzKTsKLQkJCQltZW1jcHkoYmEsCi0JCQkJCUFUSF9EU19CQV9CSVRNQVAoZHMpLAotCQkJCQlXTUVfQkFfQk1QX1NJWkUgPj4gMyk7Ci0JCQl9IGVsc2UgewotCQkJCW1lbXNldChiYSwgMCwgV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCi0JCQkJLyoKLQkJCQkgKiBBUjU0MTYgY2FuIGJlY29tZSBkZWFmL211dGUgd2hlbiBCQQotCQkJCSAqIGlzc3VlIGhhcHBlbnMuIENoaXAgbmVlZHMgdG8gYmUgcmVzZXQuCi0JCQkJICogQnV0IEFQIGNvZGUgbWF5IGhhdmUgc3ljaHJvbml6YXRpb24gaXNzdWVzCi0JCQkJICogd2hlbiBwZXJmb3JtIGludGVybmFsIHJlc2V0IGluIHRoaXMgcm91dGluZS4KLQkJCQkgKiBPbmx5IGVuYWJsZSByZXNldCBpbiBTVEEgbW9kZSBmb3Igbm93LgotCQkJCSAqLwotCQkJCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PQotCQkJCQkgICAgTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCQkJbmVlZHJlc2V0ID0gMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW1lbXNldChiYSwgMCwgV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCQl9Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJmJmX3BlbmRpbmcpOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCXdoaWxlIChiZikgewotCQl0eGZhaWwgPSB0eHBlbmRpbmcgPSAwOwotCQliZl9uZXh0ID0gYmYtPmJmX25leHQ7Ci0KLQkJaWYgKEFUSF9CQV9JU1NFVChiYSwgQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKSkpIHsKLQkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24sIHN1YmZyYW1lIGlzCi0JCQkgKiBhY2tlZCBieSBibG9jayBhY2sgKi8KLQkJfSBlbHNlIGlmICghaXNhZ2dyICYmIHR4b2spIHsKLQkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24gKi8KLQkJfSBlbHNlIHsKLQotCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKLQkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKLQkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKLQkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOwotCQkJCQl0eHBlbmRpbmcgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7Ci0JCQkJCXR4ZmFpbCA9IDE7Ci0JCQkJCXNlbmRiYXIgPSAxOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBjbGVhbnVwIGluIHByb2dyZXNzLCBqdXN0IGZhaWwKLQkJCQkgKiB0aGUgdW4tYWNrZWQgc3ViLWZyYW1lcwotCQkJCSAqLwotCQkJCXR4ZmFpbCA9IDE7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICogUmVtb3ZlIGF0aF9idWYncyBvZiB0aGlzIHN1Yi1mcmFtZSBmcm9tIGFnZ3JlZ2F0ZSBxdWV1ZS4KLQkJICovCi0JCWlmIChiZl9uZXh0ID09IE5VTEwpIHsgIC8qIGxhc3Qgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLwotCQkJQVNTRVJUKGJmLT5iZl9sYXN0ZnJtID09IGJmX2xhc3QpOwotCi0JCQkvKgotCQkJICogVGhlIGxhc3QgZGVzY3JpcHRvciBvZiB0aGUgbGFzdCBzdWIgZnJhbWUgY291bGQgYmUKLQkJCSAqIGEgaG9sZGluZyBkZXNjcmlwdG9yIGZvciBoL3cuIElmIHRoYXQncyB0aGUgY2FzZSwKLQkJCSAqIGJmLT5iZl9sYXN0ZnJtIHdvbid0IGJlIGluIHRoZSBiZl9xLgotCQkJICogTWFrZSBzdXJlIHdlIGhhbmRsZSBiZl9xIHByb3Blcmx5IGhlcmUuCi0JCQkgKi8KLQotCQkJaWYgKCFsaXN0X2VtcHR5KGJmX3EpKSB7Ci0JCQkJYmZfbGFzdHEgPSBsaXN0X2VudHJ5KGJmX3EtPnByZXYsCi0JCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCQkJYmZfcSwgJmJmX2xhc3RxLT5saXN0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBYWFg6IGlmIHRoZSBsYXN0IHN1YmZyYW1lIG9ubHkgaGFzIG9uZQotCQkJCSAqIGRlc2NyaXB0b3Igd2hpY2ggaXMgYWxzbyBiZWluZyB1c2VkIGFzCi0JCQkJICogYSBob2xkaW5nIGRlc2NyaXB0b3IuIFRoZW4gdGhlIGF0aF9idWYKLQkJCQkgKiBpcyBub3QgaW4gdGhlIGJmX3EgYXQgYWxsLgotCQkJCSAqLwotCQkJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCUFTU0VSVCghbGlzdF9lbXB0eShiZl9xKSk7Ci0JCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCQliZl9xLCAmYmYtPmJmX2xhc3Rmcm0tPmxpc3QpOwotCQl9Ci0KLQkJaWYgKCF0eHBlbmRpbmcpIHsKLQkJCS8qCi0JCQkgKiBjb21wbGV0ZSB0aGUgYWNrZWQtb25lcy94cmV0cmllZCBvbmVzOyB1cGRhdGUKLQkJCSAqIGJsb2NrLWFjayB3aW5kb3cKLQkJCSAqLwotCQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7Ci0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJCS8qIGNvbXBsZXRlIHRoaXMgc3ViLWZyYW1lICovCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIHJldHJ5IHRoZSB1bi1hY2tlZCBvbmVzCi0JCQkgKi8KLQkJCS8qCi0JCQkgKiBYWFg6IGlmIHRoZSBsYXN0IGRlc2NyaXB0b3IgaXMgaG9sZGluZyBkZXNjcmlwdG9yLAotCQkJICogaW4gb3JkZXIgdG8gcmVxdWV1ZSB0aGUgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUsIHdlCi0JCQkgKiBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IGRlc2NyaXB0b3IgYW5kCi0JCQkgKiBjb3B5IHRoZSBjb250ZW50IG9mIGhvbGRpbmcgZGVzY3JpcHRvciB0byBpdC4KLQkJCSAqLwotCQkJaWYgKGJmLT5iZl9uZXh0ID09IE5VTEwgJiYKLQkJCSAgICBiZl9sYXN0LT5iZl9zdGF0dXMgJiBBVEhfQlVGU1RBVFVTX1NUQUxFKSB7Ci0JCQkJc3RydWN0IGF0aF9idWYgKnRiZjsKLQotCQkJCS8qIGFsbG9jYXRlIG5ldyBkZXNjcmlwdG9yICovCi0JCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJCQlBU1NFUlQoIWxpc3RfZW1wdHkoKCZzYy0+dHgudHhidWYpKSk7Ci0JCQkJdGJmID0gbGlzdF9maXJzdF9lbnRyeSgmc2MtPnR4LnR4YnVmLAotCQkJCQkJc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQkJCWxpc3RfZGVsKCZ0YmYtPmxpc3QpOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQotCQkJCUFUSF9UWEJVRl9SRVNFVCh0YmYpOwotCi0JCQkJLyogY29weSBkZXNjcmlwdG9yIGNvbnRlbnQgKi8KLQkJCQl0YmYtPmJmX21wZHUgPSBiZl9sYXN0LT5iZl9tcGR1OwotCQkJCXRiZi0+YmZfYnVmX2FkZHIgPSBiZl9sYXN0LT5iZl9idWZfYWRkcjsKLQkJCQkqKHRiZi0+YmZfZGVzYykgPSAqKGJmX2xhc3QtPmJmX2Rlc2MpOwotCi0JCQkJLyogbGluayBpdCB0byB0aGUgZnJhbWUgKi8KLQkJCQlpZiAoYmZfbGFzdHEpIHsKLQkJCQkJYmZfbGFzdHEtPmJmX2Rlc2MtPmRzX2xpbmsgPQotCQkJCQkJdGJmLT5iZl9kYWRkcjsKLQkJCQkJYmYtPmJmX2xhc3Rmcm0gPSB0YmY7Ci0JCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwKLQkJCQkJCWJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjKTsKLQkJCQl9IGVsc2UgewotCQkJCQl0YmYtPmJmX3N0YXRlID0gYmZfbGFzdC0+YmZfc3RhdGU7Ci0JCQkJCXRiZi0+YmZfbGFzdGZybSA9IHRiZjsKLQkJCQkJYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc2MtPnNjX2FoLAotCQkJCQkJdGJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjKTsKLQotCQkJCQkvKiBjb3B5IHRoZSBETUEgY29udGV4dCAqLwotCQkJCQl0YmYtPmJmX2RtYWNvbnRleHQgPQotCQkJCQkJYmZfbGFzdC0+YmZfZG1hY29udGV4dDsKLQkJCQl9Ci0JCQkJbGlzdF9hZGRfdGFpbCgmdGJmLT5saXN0LCAmYmZfaGVhZCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogQ2xlYXIgZGVzY3JpcHRvciBzdGF0dXMgd29yZHMgZm9yCi0JCQkJICogc29mdHdhcmUgcmV0cnkKLQkJCQkgKi8KLQkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsCi0JCQkJCQkgICAgIGJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjKTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIFB1dCB0aGlzIGJ1ZmZlciB0byB0aGUgdGVtcG9yYXJ5IHBlbmRpbmcKLQkJCSAqIHF1ZXVlIHRvIHJldGFpbiBvcmRlcmluZwotCQkJICovCi0JCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmJmX2hlYWQsICZiZl9wZW5kaW5nKTsKLQkJfQotCi0JCWJmID0gYmZfbmV4dDsKLQl9Ci0KLQlpZiAodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgewotCQkvKiBjaGVjayB0byBzZWUgaWYgd2UncmUgZG9uZSB3aXRoIGNsZWFuaW5nIHRoZSBoL3cgcXVldWUgKi8KLQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlpZiAodGlkLT5iYXdfaGVhZCA9PSB0aWQtPmJhd190YWlsKSB7Ci0JCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOwotCi0JCQkvKiBzZW5kIGJ1ZmZlcmVkIGZyYW1lcyBhcyBzaW5nbGVzICovCi0JCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0aWQpOwotCQl9IGVsc2UKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBwcmVwZW5kIHVuLWFja2VkIGZyYW1lcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwZW5kaW5nIGZyYW1lIHF1ZXVlCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZiZl9wZW5kaW5nKSkgewotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkvKiBOb3RlOiB3ZSBfcHJlcGVuZF8sIHdlIF9kb19ub3RfIGF0IHRvCi0JCSAqIHRoZSBlbmQgb2YgdGhlIHF1ZXVlICEgKi8KLQkJbGlzdF9zcGxpY2UoJmJmX3BlbmRpbmcsICZ0aWQtPmJ1Zl9xKTsKLQkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQl9Ci0KLQlpZiAobmVlZHJlc2V0KQotCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYXRoX3R4X3JjX3N0YXR1cyhzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHN0cnVjdCBhdGhfZGVzYyAqZHMsIGludCBuYmFkKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7Ci0KLQl0eF9pbmZvX3ByaXYtPnVwZGF0ZV9yYyA9IGZhbHNlOwotCWlmIChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX0ZJTFQpCi0JCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEOwotCi0JaWYgKChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX0ZJTFQpID09IDAgJiYKLQkgICAgKGJmLT5iZl9mbGFncyAmIEFUSDlLX1RYREVTQ19OT0FDSykgPT0gMCkgewotCQlpZiAoYmZfaXNkYXRhKGJmKSkgewotCQkJbWVtY3B5KCZ0eF9pbmZvX3ByaXYtPnR4LCAmZHMtPmRzX3R4c3RhdCwKLQkJCSAgICAgICBzaXplb2YodHhfaW5mb19wcml2LT50eCkpOwotCQkJdHhfaW5mb19wcml2LT5uX2ZyYW1lcyA9IGJmLT5iZl9uZnJhbWVzOwotCQkJdHhfaW5mb19wcml2LT5uX2JhZF9mcmFtZXMgPSBuYmFkOwotCQkJdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSB0cnVlOwotCQl9CisJd2hpbGUgKHRpZC0+YmF3X2hlYWQgIT0gdGlkLT5iYXdfdGFpbCAmJiAhdGlkLT50eF9idWZbdGlkLT5iYXdfaGVhZF0pIHsKKwkJSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOworCQlJTkNSKHRpZC0+YmF3X2hlYWQsIEFUSF9USURfTUFYX0JVRlMpOwogCX0KIH0KIAotLyogUHJvY2VzcyBjb21wbGV0ZWQgeG1pdCBkZXNjcmlwdG9ycyBmcm9tIHRoZSBzcGVjaWZpZWQgcXVldWUgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X3Byb2Nlc3NxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICpsYXN0YmYsICpiZl9oZWxkID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7Ci0Jc3RydWN0IGF0aF9kZXNjICpkczsKLQlpbnQgdHhvaywgbmJhZCA9IDA7Ci0JaW50IHN0YXR1czsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsICJ0eCBxdWV1ZSAlZCAoJXgpLCBsaW5rICVwXG4iLAotCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pLAotCQl0eHEtPmF4cV9saW5rKTsKLQotCWZvciAoOzspIHsKLQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX3EpKSB7Ci0JCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKLQkJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOwotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkJYnJlYWs7Ci0JCX0KLQkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0KLQkJLyoKLQkJICogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGEgQkggZ2V0cyBzY2hlZHVsZWQKLQkJICogYWZ0ZXIgc3cgd3JpdGVzIFR4RSBhbmQgYmVmb3JlIGh3IHJlLWxvYWQgdGhlIGxhc3QKLQkJICogZGVzY3JpcHRvciB0byBnZXQgdGhlIG5ld2x5IGNoYWluZWQgb25lLgotCQkgKiBTb2Z0d2FyZSBtdXN0IGtlZXAgdGhlIGxhc3QgRE9ORSBkZXNjcmlwdG9yIGFzIGEKLQkJICogaG9sZGluZyBkZXNjcmlwdG9yIC0gc29mdHdhcmUgZG9lcyBzbyBieSBtYXJraW5nCi0JCSAqIGl0IHdpdGggdGhlIFNUQUxFIGZsYWcuCi0JCSAqLwotCQliZl9oZWxkID0gTlVMTDsKLQkJaWYgKGJmLT5iZl9zdGF0dXMgJiBBVEhfQlVGU1RBVFVTX1NUQUxFKSB7Ci0JCQliZl9oZWxkID0gYmY7Ci0JCQlpZiAobGlzdF9pc19sYXN0KCZiZl9oZWxkLT5saXN0LCAmdHhxLT5heHFfcSkpIHsKLQkJCQkvKiBGSVhNRToKLQkJCQkgKiBUaGUgaG9sZGluZyBkZXNjcmlwdG9yIGlzIHRoZSBsYXN0Ci0JCQkJICogZGVzY3JpcHRvciBpbiBxdWV1ZS4gSXQncyBzYWZlIHRvIHJlbW92ZQotCQkJCSAqIHRoZSBsYXN0IGhvbGRpbmcgZGVzY3JpcHRvciBpbiBCSCBjb250ZXh0LgotCQkJCSAqLwotCQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogTGV0cyB3b3JrIHdpdGggdGhlIG5leHQgYnVmZmVyIG5vdyAqLwotCQkJCWJmID0gbGlzdF9lbnRyeShiZl9oZWxkLT5saXN0Lm5leHQsCi0JCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJCX0KLQkJfQotCi0JCWxhc3RiZiA9IGJmLT5iZl9sYXN0YmY7Ci0JCWRzID0gbGFzdGJmLT5iZl9kZXNjOyAgICAvKiBOQjogbGFzdCBkZWNyaXB0b3IgKi8KLQotCQlzdGF0dXMgPSBhdGg5a19od190eHByb2NkZXNjKGFoLCBkcyk7Ci0JCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoYmYtPmJmX2Rlc2MgPT0gdHhxLT5heHFfbGFzdGRzV2l0aENUUykKLQkJCXR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMgPSBOVUxMOwotCQlpZiAoZHMgPT0gdHhxLT5heHFfZ2F0aW5nZHMpCi0JCQl0eHEtPmF4cV9nYXRpbmdkcyA9IE5VTEw7Ci0KLQkJLyoKLQkJICogUmVtb3ZlIGF0aF9idWYncyBvZiB0aGUgc2FtZSB0cmFuc21pdCB1bml0IGZyb20gdHhxLAotCQkgKiBob3dldmVyIGxlYXZlIHRoZSBsYXN0IGRlc2NyaXB0b3IgYmFjayBhcyB0aGUgaG9sZGluZwotCQkgKiBkZXNjcmlwdG9yIGZvciBody4KLQkJICovCi0JCWxhc3RiZi0+YmZfc3RhdHVzIHw9IEFUSF9CVUZTVEFUVVNfU1RBTEU7Ci0JCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCQlpZiAoIWxpc3RfaXNfc2luZ3VsYXIoJmxhc3RiZi0+bGlzdCkpCi0JCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCQkmdHhxLT5heHFfcSwgbGFzdGJmLT5saXN0LnByZXYpOwotCi0JCXR4cS0+YXhxX2RlcHRoLS07Ci0KLQkJaWYgKGJmX2lzYWdncihiZikpCi0JCQl0eHEtPmF4cV9hZ2dyX2RlcHRoLS07Ci0KLQkJdHhvayA9IChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyA9PSAwKTsKLQotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJaWYgKGJmX2hlbGQpIHsKLQkJCWxpc3RfZGVsKCZiZl9oZWxkLT5saXN0KTsKLQkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZiZl9oZWxkLT5saXN0LCAmc2MtPnR4LnR4YnVmKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJfQotCi0JCWlmICghYmZfaXNhbXBkdShiZikpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGZyYW1lIGlzIHNlbnQgb3V0IGFzIGEgc2luZ2xlIGZyYW1lLgotCQkJICogVXNlIGhhcmR3YXJlIHJldHJ5IHN0YXR1cyBmb3IgdGhpcyBmcmFtZS4KLQkJCSAqLwotCQkJYmYtPmJmX3JldHJpZXMgPSBkcy0+ZHNfdHhzdGF0LnRzX2xvbmdyZXRyeTsKLQkJCWlmIChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX1hSRVRSWSkKLQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwotCQkJbmJhZCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQluYmFkID0gYXRoX3R4X251bV9iYWRmcm1zKHNjLCBiZiwgdHhvayk7Ci0JCX0KLQotCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCk7Ci0KLQkJLyoKLQkJICogQ29tcGxldGUgdGhpcyB0cmFuc21pdCB1bml0Ci0JCSAqLwotCQlpZiAoYmZfaXNhbXBkdShiZikpCi0JCQlhdGhfdHhfY29tcGxldGVfYWdncl9yaWZzKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgdHhvayk7Ci0JCWVsc2UKLQkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgdHhvaywgMCk7Ci0KLQkJLyogV2FrZSB1cCBtYWM4MDIxMSBxdWV1ZSAqLwotCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmICh0eHEtPnN0b3BwZWQgJiYgYXRoX3R4cV9kZXB0aChzYywgdHhxLT5heHFfcW51bSkgPD0KLQkJCQkoQVRIX1RYQlVGIC0gMjApKSB7Ci0JCQlpbnQgcW51bTsKLQkJCXFudW0gPSBhdGhfZ2V0X21hYzgwMjExX3FudW0odHhxLT5heHFfcW51bSwgc2MpOwotCQkJaWYgKHFudW0gIT0gLTEpIHsKLQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShzYy0+aHcsIHFudW0pOwotCQkJCXR4cS0+c3RvcHBlZCA9IDA7Ci0JCQl9Ci0KLQkJfQotCi0JCS8qCi0JCSAqIHNjaGVkdWxlIGFueSBwZW5kaW5nIHBhY2tldHMgaWYgYWdncmVnYXRpb24gaXMgZW5hYmxlZAotCQkgKi8KLQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikKLQkJCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF90eF9zdG9wZG1hKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQotCSh2b2lkKSBhdGg5a19od19zdG9wdHhkbWEoYWgsIHR4cS0+YXhxX3FudW0pOwotCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgInR4IHF1ZXVlIFsldV0gJXgsIGxpbmsgJXBcbiIsCi0JCXR4cS0+YXhxX3FudW0sIGF0aDlrX2h3X2dldHR4YnVmKGFoLCB0eHEtPmF4cV9xbnVtKSwKLQkJdHhxLT5heHFfbGluayk7Ci19Ci0KLS8qIERyYWluIG9ubHkgdGhlIGRhdGEgcXVldWVzICovCi0KLXN0YXRpYyB2b2lkIGF0aF9kcmFpbl90eGRhdGFxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlpbnQgaSwgc3RhdHVzLCBucGVuZCA9IDA7Ci0KLQlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKLQkJCQlhdGhfdHhfc3RvcGRtYShzYywgJnNjLT50eC50eHFbaV0pOwotCQkJCS8qIFRoZSBUeERNQSBtYXkgbm90IHJlYWxseSBiZSBzdG9wcGVkLgotCQkJCSAqIERvdWJsZSBjaGVjayB0aGUgaGFsIHR4IHBlbmRpbmcgY291bnQgKi8KLQkJCQlucGVuZCArPSBhdGg5a19od19udW10eHBlbmRpbmcoYWgsCi0JCQkJCQkgICAgICAgc2MtPnR4LnR4cVtpXS5heHFfcW51bSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAobnBlbmQpIHsKLQkJLyogVHhETUEgbm90IHN0b3BwZWQsIHJlc2V0IHRoZSBoYWwgKi8KLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVW5hYmxlIHRvIHN0b3AgVHhETUEuIFJlc2V0IEhBTCFcbiIpOwotCi0JCXNwaW5fbG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7Ci0JCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsCi0JCQkJICAgIHNjLT5zY19haC0+YWhfY3VyY2hhbiwKLQkJCQkgICAgc2MtPnR4X2NoYW5fd2lkdGgsCi0JCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkJICAgIHNjLT5zY19odF9leHRwcm90c3BhY2luZywgdHJ1ZSwgJnN0YXR1cykpIHsKLQotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyBoYWwgc3RhdHVzICV1XG4iLAotCQkJCXN0YXR1cyk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKLQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQotCQkJYXRoX3R4X2RyYWludHhxKHNjLCAmc2MtPnR4LnR4cVtpXSwgcmV0cnlfdHgpOwotCX0KLX0KLQotLyogQWRkIGEgc3ViLWZyYW1lIHRvIGJsb2NrIGFjayB3aW5kb3cgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X2FkZHRvX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCitzdGF0aWMgdm9pZCBhdGhfdHhfYWRkdG9fYmF3KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKIAkJCSAgICAgc3RydWN0IGF0aF9idWYgKmJmKQogewogCWludCBpbmRleCwgY2luZGV4OwpAQCAtMTE5Niw1OCArMTk2LDIyNyBAQAogfQogCiAvKgotICogRnVuY3Rpb24gdG8gc2VuZCBhbiBBLU1QRFUKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKKyAqIFRPRE86IEZvciBmcmFtZShzKSB0aGF0IGFyZSBpbiB0aGUgcmV0cnkgc3RhdGUsIHdlIHdpbGwgcmV1c2UgdGhlCisgKiBzZXF1ZW5jZSBudW1iZXIocykgd2l0aG91dCBzZXR0aW5nIHRoZSByZXRyeSBiaXQuIFRoZQorICogYWx0ZXJuYXRpdmUgaXMgdG8gZ2l2ZSB1cCBvbiB0aGVzZSBhbmQgQkFSIHRoZSByZWNlaXZlcidzIHdpbmRvdworICogZm9yd2FyZC4KICAqLwotc3RhdGljIGludCBhdGhfdHhfc2VuZF9hbXBkdShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQsCi0JCQkgICAgIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCitzdGF0aWMgdm9pZCBhdGhfdGlkX2RyYWluKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKKwogewogCXN0cnVjdCBhdGhfYnVmICpiZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7CisJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCi0JQlVHX09OKGxpc3RfZW1wdHkoYmZfaGVhZCkpOworCWZvciAoOzspIHsKKwkJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQorCQkJYnJlYWs7CiAKLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BTVBEVTsKKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOwogCi0JLyoKLQkgKiBEbyBub3QgcXVldWUgdG8gaC93IHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgotCSAqIC0gdGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzIGluIHNvZnR3YXJlIHF1ZXVlCi0JICogLSB0aGUgVElEIGlzIGN1cnJlbnRseSBwYXVzZWQgZm9yIEFEREJBL0JBUiByZXF1ZXN0Ci0JICogLSBzZXFubyBpcyBub3Qgd2l0aGluIGJsb2NrLWFjayB3aW5kb3cKLQkgKiAtIGgvdyBxdWV1ZSBkZXB0aCBleGNlZWRzIGxvdyB3YXRlciBtYXJrCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSB8fCB0aWQtPnBhdXNlZCB8fAotCSAgICAhQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSB8fAotCSAgICB0eGN0bC0+dHhxLT5heHFfZGVwdGggPj0gQVRIX0FHR1JfTUlOX1FERVBUSCkgewotCQkvKgotCQkgKiBBZGQgdGhpcyBmcmFtZSB0byBzb2Z0d2FyZSBxdWV1ZSBmb3Igc2NoZWR1bGluZyBsYXRlcgotCQkgKiBmb3IgYWdncmVnYXRpb24uCi0JCSAqLwotCQlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfaGVhZCwgJnRpZC0+YnVmX3EpOwotCQlhdGhfdHhfcXVldWVfdGlkKHR4Y3RsLT50eHEsIHRpZCk7Ci0JCXJldHVybiAwOworCQlpZiAoYmZfaXNyZXRyaWVkKGJmKSkKKwkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7CisKKwkJc3Bpbl91bmxvY2soJnR4cS0+YXhxX2xvY2spOworCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOworCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOwogCX0KIAotCS8qIEFkZCBzdWItZnJhbWUgdG8gQkFXICovCi0JYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBiZik7Ci0KLQkvKiBRdWV1ZSB0byBoL3cgd2l0aG91dCBhZ2dyZWdhdGlvbiAqLwotCWJmLT5iZl9uZnJhbWVzID0gMTsKLQliZi0+YmZfbGFzdGJmID0gYmYtPmJmX2xhc3Rmcm07IC8qIG9uZSBzaW5nbGUgZnJhbWUgKi8KLQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7Ci0JYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgYmZfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKKwl0aWQtPnNlcV9uZXh0ID0gdGlkLT5zZXFfc3RhcnQ7CisJdGlkLT5iYXdfdGFpbCA9IHRpZC0+YmF3X2hlYWQ7CiB9CiAKLS8qCi0gKiBsb29rcyB1cCB0aGUgcmF0ZQotICogcmV0dXJucyBhZ2dyIGxpbWl0IGJhc2VkIG9uIGxvd2VzdCBvZiB0aGUgcmF0ZXMKLSAqLwotc3RhdGljIHUzMiBhdGhfbG9va3VwX3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCitzdGF0aWMgdm9pZCBhdGhfdHhfc2V0X3JldHJ5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCisJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1JFVFJZOworCWJmLT5iZl9yZXRyaWVzKys7CisKKwlza2IgPSBiZi0+YmZfbXBkdTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1JFVFJZKTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVmKiBhdGhfY2xvbmVfdHhidWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqdGJmOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwlBU1NFUlQoIWxpc3RfZW1wdHkoKCZzYy0+dHgudHhidWYpKSk7CisJdGJmID0gbGlzdF9maXJzdF9lbnRyeSgmc2MtPnR4LnR4YnVmLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJbGlzdF9kZWwoJnRiZi0+bGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJQVRIX1RYQlVGX1JFU0VUKHRiZik7CisKKwl0YmYtPmJmX21wZHUgPSBiZi0+YmZfbXBkdTsKKwl0YmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2J1Zl9hZGRyOworCSoodGJmLT5iZl9kZXNjKSA9ICooYmYtPmJmX2Rlc2MpOworCXRiZi0+YmZfc3RhdGUgPSBiZi0+YmZfc3RhdGU7CisJdGJmLT5iZl9kbWFjb250ZXh0ID0gYmYtPmJmX2RtYWNvbnRleHQ7CisKKwlyZXR1cm4gdGJmOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYWdncihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgc3RydWN0IGF0aF9idWYgKmJmLCBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAorCQkJCSBpbnQgdHhvaykKK3sKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCA9IE5VTEw7CisJc3RydWN0IGF0aF9idWYgKmJmX25leHQsICpiZl9sYXN0ID0gYmYtPmJmX2xhc3RiZjsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzID0gYmZfbGFzdC0+YmZfZGVzYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQsIGJmX3BlbmRpbmc7CisJdTE2IHNlcV9zdCA9IDA7CisJdTMyIGJhW1dNRV9CQV9CTVBfU0laRSA+PiA1XTsKKwlpbnQgaXNhZ2dyLCB0eGZhaWwsIHR4cGVuZGluZywgc2VuZGJhciA9IDAsIG5lZWRyZXNldCA9IDA7CisKKwlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEoc2MtPmh3LCBoZHItPmFkZHIxKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOworCisJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKKwltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKKworCWlmIChpc2FnZ3IgJiYgdHhvaykgeworCQlpZiAoQVRIX0RTX1RYX0JBKGRzKSkgeworCQkJc2VxX3N0ID0gQVRIX0RTX0JBX1NFUShkcyk7CisJCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLAorCQkJICAgICAgIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBBUjU0MTYgY2FuIGJlY29tZSBkZWFmL211dGUgd2hlbiBCQQorCQkJICogaXNzdWUgaGFwcGVucy4gQ2hpcCBuZWVkcyB0byBiZSByZXNldC4KKwkJCSAqIEJ1dCBBUCBjb2RlIG1heSBoYXZlIHN5Y2hyb25pemF0aW9uIGlzc3VlcworCQkJICogd2hlbiBwZXJmb3JtIGludGVybmFsIHJlc2V0IGluIHRoaXMgcm91dGluZS4KKwkJCSAqIE9ubHkgZW5hYmxlIHJlc2V0IGluIFNUQSBtb2RlIGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJCW5lZWRyZXNldCA9IDE7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmYmZfcGVuZGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOworCisJd2hpbGUgKGJmKSB7CisJCXR4ZmFpbCA9IHR4cGVuZGluZyA9IDA7CisJCWJmX25leHQgPSBiZi0+YmZfbmV4dDsKKworCQlpZiAoQVRIX0JBX0lTU0VUKGJhLCBBVEhfQkFfSU5ERVgoc2VxX3N0LCBiZi0+YmZfc2Vxbm8pKSkgeworCQkJLyogdHJhbnNtaXQgY29tcGxldGlvbiwgc3ViZnJhbWUgaXMKKwkJCSAqIGFja2VkIGJ5IGJsb2NrIGFjayAqLworCQl9IGVsc2UgaWYgKCFpc2FnZ3IgJiYgdHhvaykgeworCQkJLyogdHJhbnNtaXQgY29tcGxldGlvbiAqLworCQl9IGVsc2UgeworCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKKwkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKKwkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKKwkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOworCQkJCQl0eHBlbmRpbmcgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJCXR4ZmFpbCA9IDE7CisJCQkJCXNlbmRiYXIgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBjbGVhbnVwIGluIHByb2dyZXNzLCBqdXN0IGZhaWwKKwkJCQkgKiB0aGUgdW4tYWNrZWQgc3ViLWZyYW1lcworCQkJCSAqLworCQkJCXR4ZmFpbCA9IDE7CisJCQl9CisJCX0KKworCQlpZiAoYmZfbmV4dCA9PSBOVUxMKSB7CisJCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CisJCX0gZWxzZSB7CisJCQlBU1NFUlQoIWxpc3RfZW1wdHkoYmZfcSkpOworCQkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCX0KKworCQlpZiAoIXR4cGVuZGluZykgeworCQkJLyoKKwkJCSAqIGNvbXBsZXRlIHRoZSBhY2tlZC1vbmVzL3hyZXRyaWVkIG9uZXM7IHVwZGF0ZQorCQkJICogYmxvY2stYWNrIHdpbmRvdworCQkJICovCisJCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHRpZCwgYmYtPmJmX3NlcW5vKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAhdHhmYWlsLCBzZW5kYmFyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJldHJ5IHRoZSB1bi1hY2tlZCBvbmVzICovCisJCQlpZiAoYmYtPmJmX25leHQgPT0gTlVMTCAmJgorCQkJICAgIGJmX2xhc3QtPmJmX3N0YXR1cyAmIEFUSF9CVUZTVEFUVVNfU1RBTEUpIHsKKwkJCQlzdHJ1Y3QgYXRoX2J1ZiAqdGJmOworCisJCQkJdGJmID0gYXRoX2Nsb25lX3R4YnVmKHNjLCBiZl9sYXN0KTsKKwkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7CisJCQkJbGlzdF9hZGRfdGFpbCgmdGJmLT5saXN0LCAmYmZfaGVhZCk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogQ2xlYXIgZGVzY3JpcHRvciBzdGF0dXMgd29yZHMgZm9yCisJCQkJICogc29mdHdhcmUgcmV0cnkKKwkJCQkgKi8KKwkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFB1dCB0aGlzIGJ1ZmZlciB0byB0aGUgdGVtcG9yYXJ5IHBlbmRpbmcKKwkJCSAqIHF1ZXVlIHRvIHJldGFpbiBvcmRlcmluZworCQkJICovCisJCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmJmX2hlYWQsICZiZl9wZW5kaW5nKTsKKwkJfQorCisJCWJmID0gYmZfbmV4dDsKKwl9CisKKwlpZiAodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgeworCQlpZiAodGlkLT5iYXdfaGVhZCA9PSB0aWQtPmJhd190YWlsKSB7CisJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOworCQkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKKworCQkJLyogc2VuZCBidWZmZXJlZCBmcmFtZXMgYXMgc2luZ2xlcyAqLworCQkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdGlkKTsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHByZXBlbmQgdW4tYWNrZWQgZnJhbWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBlbmRpbmcgZnJhbWUgcXVldWUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmJmX3BlbmRpbmcpKSB7CisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCWxpc3Rfc3BsaWNlKCZiZl9wZW5kaW5nLCAmdGlkLT5idWZfcSk7CisJCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAobmVlZHJlc2V0KQorCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKK30KKworc3RhdGljIHUzMiBhdGhfbG9va3VwX3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKIAkJCSAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKQEAgLTEyNTUsMTUgKzQyNCwxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzOwogCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXY7Ci0JdTMyIG1heF80bXNfZnJhbWVsZW4sIGZyYW1lX2xlbmd0aDsKKwl1MzIgbWF4XzRtc19mcmFtZWxlbiwgZnJtbGVuOwogCXUxNiBhZ2dyX2xpbWl0LCBsZWdhY3kgPSAwLCBtYXhhbXBkdTsKIAlpbnQgaTsKIAogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwogCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOwotCXR4X2luZm9fcHJpdiA9Ci0JCShzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqKXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF07CisJdHhfaW5mb19wcml2ID0gKHN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICopdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXTsKIAogCS8qCiAJICogRmluZCB0aGUgbG93ZXN0IGZyYW1lIGxlbmd0aCBhbW9uZyB0aGUgcmF0ZSBzZXJpZXMgdGhhdCB3aWxsIGhhdmUgYQpAQCAtMTI3OSw5ICs0NDcsOCBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlmcmFtZV9sZW5ndGggPQotCQkJCXJhdGVfdGFibGUtPmluZm9bcmF0ZXNbaV0uaWR4XS5tYXhfNG1zX2ZyYW1lbGVuOwotCQkJbWF4XzRtc19mcmFtZWxlbiA9IG1pbihtYXhfNG1zX2ZyYW1lbGVuLCBmcmFtZV9sZW5ndGgpOworCQkJZnJtbGVuID0gcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tpXS5pZHhdLm1heF80bXNfZnJhbWVsZW47CisJCQltYXhfNG1zX2ZyYW1lbGVuID0gbWluKG1heF80bXNfZnJhbWVsZW4sIGZybWxlbik7CiAJCX0KIAl9CiAKQEAgLTEyOTMsOCArNDYwLDcgQEAKIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRSB8fCBsZWdhY3kpCiAJCXJldHVybiAwOwogCi0JYWdncl9saW1pdCA9IG1pbihtYXhfNG1zX2ZyYW1lbGVuLAotCQkodTMyKUFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUKTsKKwlhZ2dyX2xpbWl0ID0gbWluKG1heF80bXNfZnJhbWVsZW4sICh1MzIpQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQpOwogCiAJLyoKIAkgKiBoL3cgY2FuIGFjY2VwdCBhZ2dyZWdhdGVzIHVwdG8gMTYgYml0IGxlbmd0aHMgKDY1NTM1KS4KQEAgLTEzMDksMTQgKzQ3NSwxMiBAQAogfQogCiAvKgotICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlbGltaXRlcnMgdG8gYmUgYWRkZWQgdG8KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkZWxpbWl0ZXJzIHRvIGJlIGFkZGVkIHRvCiAgKiBtZWV0IHRoZSBtaW5pbXVtIHJlcXVpcmVkIG1wZHVkZW5zaXR5LgotICogY2FsbGVyIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcmF0ZSBpcyAgSFQgcmF0ZSAuCisgKiBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByYXRlIGlzIEhUIHJhdGUgLgogICovCi1zdGF0aWMgaW50IGF0aF9jb21wdXRlX251bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCQkgIHUxNiBmcm1sZW4pCitzdGF0aWMgaW50IGF0aF9jb21wdXRlX251bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmLCB1MTYgZnJtbGVuKQogewogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5iZl9tcGR1OwpAQCAtMTM3MCw5ICs1MzQsNyBAQAogCW5zeW1iaXRzID0gYml0c19wZXJfc3ltYm9sW0hUX1JDXzJfTUNTKHJjKV1bd2lkdGhdOwogCW1pbmxlbiA9IChuc3ltYm9scyAqIG5zeW1iaXRzKSAvIEJJVFNfUEVSX0JZVEU7CiAKLQkvKiBJcyBmcmFtZSBzaG9ydGVyIHRoYW4gcmVxdWlyZWQgbWluaW11bSBsZW5ndGg/ICovCiAJaWYgKGZybWxlbiA8IG1pbmxlbikgewotCQkvKiBHZXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGRlbGltaXRlcnMgcmVxdWlyZWQuICovCiAJCW1pbmRlbGltID0gKG1pbmxlbiAtIGZybWxlbikgLyBBVEhfQUdHUl9ERUxJTV9TWjsKIAkJbmRlbGltID0gbWF4KG1pbmRlbGltLCBuZGVsaW0pOwogCX0KQEAgLTEzODAsMzcgKzU0MiwyMyBAQAogCXJldHVybiBuZGVsaW07CiB9CiAKLS8qCi0gKiBGb3IgYWdncmVnYXRpb24gZnJvbSBzb2Z0d2FyZSBidWZmZXIgcXVldWUuCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KIHN0YXRpYyBlbnVtIEFUSF9BR0dSX1NUQVRVUyBhdGhfdHhfZm9ybV9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKLQkJCQkJc3RydWN0IGF0aF9idWYgKipiZl9sYXN0LAotCQkJCQlzdHJ1Y3QgYWdncl9yaWZzX3BhcmFtICpwYXJhbSwKLQkJCQkJaW50ICpwcmV2X2ZyYW1lcykKKwkJCQkJICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xKQogewogI2RlZmluZSBQQURCWVRFUyhfbGVuKSAoKDQgLSAoKF9sZW4pICUgNCkpICUgNCkKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmYsICpiZl9maXJzdCwgKmJmX3ByZXYgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKLQlpbnQgcmwgPSAwLCBuZnJhbWVzID0gMCwgbmRlbGltOworCXN0cnVjdCBhdGhfYnVmICpiZiwgKmJmX2ZpcnN0LCAqYmZfcHJldiA9IE5VTEw7CisJaW50IHJsID0gMCwgbmZyYW1lcyA9IDAsIG5kZWxpbSwgcHJldl9hbCA9IDA7CiAJdTE2IGFnZ3JfbGltaXQgPSAwLCBhbCA9IDAsIGJwYWQgPSAwLAogCQlhbF9kZWx0YSwgaF9iYXcgPSB0aWQtPmJhd19zaXplIC8gMjsKIAllbnVtIEFUSF9BR0dSX1NUQVRVUyBzdGF0dXMgPSBBVEhfQUdHUl9ET05FOwotCWludCBwcmV2X2FsID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQlCVUdfT04obGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpOwogCiAJYmZfZmlyc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKIAlkbyB7CiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCi0JCS8qCi0JCSAqIGRvIG5vdCBzdGVwIG92ZXIgYmxvY2stYWNrIHdpbmRvdwotCQkgKi8KKwkJLyogZG8gbm90IHN0ZXAgb3ZlciBibG9jay1hY2sgd2luZG93ICovCiAJCWlmICghQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSkgewogCQkJc3RhdHVzID0gQVRIX0FHR1JfQkFXX0NMT1NFRDsKIAkJCWJyZWFrOwpAQCAtMTQyMSwyOSArNTY5LDIzIEBACiAJCQlybCA9IDE7CiAJCX0KIAotCQkvKgotCQkgKiBkbyBub3QgZXhjZWVkIGFnZ3JlZ2F0aW9uIGxpbWl0Ci0JCSAqLworCQkvKiBkbyBub3QgZXhjZWVkIGFnZ3JlZ2F0aW9uIGxpbWl0ICovCiAJCWFsX2RlbHRhID0gQVRIX0FHR1JfREVMSU1fU1ogKyBiZi0+YmZfZnJtbGVuOwogCi0JCWlmIChuZnJhbWVzICYmIChhZ2dyX2xpbWl0IDwKLQkJCShhbCArIGJwYWQgKyBhbF9kZWx0YSArIHByZXZfYWwpKSkgeworCQlpZiAobmZyYW1lcyAmJgorCQkgICAgKGFnZ3JfbGltaXQgPCAoYWwgKyBicGFkICsgYWxfZGVsdGEgKyBwcmV2X2FsKSkpIHsKIAkJCXN0YXR1cyA9IEFUSF9BR0dSX0xJTUlURUQ7CiAJCQlicmVhazsKIAkJfQogCi0JCS8qCi0JCSAqIGRvIG5vdCBleGNlZWQgc3ViZnJhbWUgbGltaXQKLQkJICovCi0JCWlmICgobmZyYW1lcyArICpwcmV2X2ZyYW1lcykgPj0KLQkJICAgIG1pbigoaW50KWhfYmF3LCBBVEhfQU1QRFVfU1VCRlJBTUVfREVGQVVMVCkpIHsKKwkJLyogZG8gbm90IGV4Y2VlZCBzdWJmcmFtZSBsaW1pdCAqLworCQlpZiAobmZyYW1lcyA+PSBtaW4oKGludCloX2JhdywgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQpKSB7CiAJCQlzdGF0dXMgPSBBVEhfQUdHUl9MSU1JVEVEOwogCQkJYnJlYWs7CiAJCX0KKwkJbmZyYW1lcysrOwogCi0JCS8qCi0JCSAqIGFkZCBwYWRkaW5nIGZvciBwcmV2aW91cyBmcmFtZSB0byBhZ2dyZWdhdGlvbiBsZW5ndGgKLQkJICovCisJCS8qIGFkZCBwYWRkaW5nIGZvciBwcmV2aW91cyBmcmFtZSB0byBhZ2dyZWdhdGlvbiBsZW5ndGggKi8KIAkJYWwgKz0gYnBhZCArIGFsX2RlbHRhOwogCiAJCS8qCkBAIC0xNDUxLDY5ICs1OTMsMzUgQEAKIAkJICogZGVuc2l0eSBmb3IgdGhpcyBub2RlLgogCQkgKi8KIAkJbmRlbGltID0gYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzYywgdGlkLCBiZl9maXJzdCwgYmYtPmJmX2ZybWxlbik7Ci0KIAkJYnBhZCA9IFBBREJZVEVTKGFsX2RlbHRhKSArIChuZGVsaW0gPDwgMik7CiAKIAkJYmYtPmJmX25leHQgPSBOVUxMOwotCQliZi0+YmZfbGFzdGZybS0+YmZfZGVzYy0+ZHNfbGluayA9IDA7CisJCWJmLT5iZl9kZXNjLT5kc19saW5rID0gMDsKIAotCQkvKgotCQkgKiB0aGlzIHBhY2tldCBpcyBwYXJ0IG9mIGFuIGFnZ3JlZ2F0ZQotCQkgKiAtIHJlbW92ZSBhbGwgZGVzY3JpcHRvcnMgYmVsb25naW5nIHRvIHRoaXMgZnJhbWUgZnJvbQotCQkgKiAgIHNvZnR3YXJlIHF1ZXVlCi0JCSAqIC0gYWRkIGl0IHRvIGJsb2NrIGFjayB3aW5kb3cKLQkJICogLSBzZXQgdXAgZGVzY3JpcHRvcnMgZm9yIGFnZ3JlZ2F0aW9uCi0JCSAqLwotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7CisJCS8qIGxpbmsgYnVmZmVycyBvZiB0aGlzIGZyYW1lIHRvIHRoZSBhZ2dyZWdhdGUgKi8KIAkJYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBiZik7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YmYsICZiZl9oZWFkLCBsaXN0KSB7Ci0JCQlhdGg5a19od19zZXQxMW5fYWdncl9taWRkbGUoc2MtPnNjX2FoLAotCQkJCXRiZi0+YmZfZGVzYywgbmRlbGltKTsKLQkJfQotCi0JCS8qCi0JCSAqIGxpbmsgYnVmZmVycyBvZiB0aGlzIGZyYW1lIHRvIHRoZSBhZ2dyZWdhdGUKLQkJICovCi0JCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYmZfaGVhZCwgYmZfcSk7Ci0JCW5mcmFtZXMrKzsKLQorCQlhdGg5a19od19zZXQxMW5fYWdncl9taWRkbGUoc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywgbmRlbGltKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCBiZl9xKTsKIAkJaWYgKGJmX3ByZXYpIHsKIAkJCWJmX3ByZXYtPmJmX25leHQgPSBiZjsKLQkJCWJmX3ByZXYtPmJmX2xhc3Rmcm0tPmJmX2Rlc2MtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7CisJCQliZl9wcmV2LT5iZl9kZXNjLT5kc19saW5rID0gYmYtPmJmX2RhZGRyOwogCQl9CiAJCWJmX3ByZXYgPSBiZjsKLQotI2lmZGVmIEFHR1JfTk9TSE9SVAotCQkvKgotCQkgKiB0ZXJtaW5hdGUgYWdncmVnYXRpb24gb24gYSBzbWFsbCBwYWNrZXQgYm91bmRhcnkKLQkJICovCi0JCWlmIChiZi0+YmZfZnJtbGVuIDwgQVRIX0FHR1JfTUlOUExFTikgewotCQkJc3RhdHVzID0gQVRIX0FHR1JfU0hPUlRQS1Q7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCiAJfSB3aGlsZSAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKTsKIAogCWJmX2ZpcnN0LT5iZl9hbCA9IGFsOwogCWJmX2ZpcnN0LT5iZl9uZnJhbWVzID0gbmZyYW1lczsKLQkqYmZfbGFzdCA9IGJmX3ByZXY7CisKIAlyZXR1cm4gc3RhdHVzOwogI3VuZGVmIFBBREJZVEVTCiB9CiAKLS8qCi0gKiBwcm9jZXNzIHBlbmRpbmcgZnJhbWVzIHBvc3NpYmx5IGRvaW5nIGEtbXBkdSBhZ2dyZWdhdGlvbgotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi1zdGF0aWMgdm9pZCBhdGhfdHhfc2NoZWRfYWdncihzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKK3N0YXRpYyB2b2lkIGF0aF90eF9zY2hlZF9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7Ci0Jc3RydWN0IGF0aF9idWYgKmJmLCAqdGJmLCAqYmZfbGFzdCwgKmJmX2xhc3RhZ2dyID0gTlVMTDsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJZW51bSBBVEhfQUdHUl9TVEFUVVMgc3RhdHVzOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfcTsKLQlzdHJ1Y3QgYWdncl9yaWZzX3BhcmFtIHBhcmFtID0gezAsIDAsIDAsIDAsIE5VTEx9OwotCWludCBwcmV2X2ZyYW1lcyA9IDA7CiAKIAlkbyB7CiAJCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKQEAgLTE1MjEsMTIwICs2MjksMTQ5IEBACiAKIAkJSU5JVF9MSVNUX0hFQUQoJmJmX3EpOwogCi0JCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHRpZCwgJmJmX3EsICZiZl9sYXN0YWdnciwgJnBhcmFtLAotCQkJCQkgICZwcmV2X2ZyYW1lcyk7CisJCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHRpZCwgJmJmX3EpOwogCiAJCS8qCi0JCSAqIG5vIGZyYW1lcyBwaWNrZWQgdXAgdG8gYmUgYWdncmVnYXRlZDsgYmxvY2stYWNrCi0JCSAqIHdpbmRvdyBpcyBub3Qgb3BlbgorCQkgKiBubyBmcmFtZXMgcGlja2VkIHVwIHRvIGJlIGFnZ3JlZ2F0ZWQ7CisJCSAqIGJsb2NrLWFjayB3aW5kb3cgaXMgbm90IG9wZW4uCiAJCSAqLwogCQlpZiAobGlzdF9lbXB0eSgmYmZfcSkpCiAJCQlicmVhazsKIAogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJmJmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJYmZfbGFzdCA9IGxpc3RfZW50cnkoYmZfcS5wcmV2LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCWJmLT5iZl9sYXN0YmYgPSBiZl9sYXN0OworCQliZi0+YmZfbGFzdGJmID0gbGlzdF9lbnRyeShiZl9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAotCQkvKgotCQkgKiBpZiBvbmx5IG9uZSBmcmFtZSwgc2VuZCBhcyBub24tYWdncmVnYXRlCi0JCSAqLworCQkvKiBpZiBvbmx5IG9uZSBmcmFtZSwgc2VuZCBhcyBub24tYWdncmVnYXRlICovCiAJCWlmIChiZi0+YmZfbmZyYW1lcyA9PSAxKSB7Ci0JCQlBU1NFUlQoYmYtPmJmX2xhc3Rmcm0gPT0gYmZfbGFzdCk7Ci0KIAkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQUdHUjsKLQkJCS8qCi0JCQkgKiBjbGVhciBhZ2dyIGJpdHMgZm9yIGV2ZXJ5IGRlc2NyaXB0b3IKLQkJCSAqIFhYWCBUT0RPOiBpcyB0aGVyZSBhIHdheSB0byBvcHRpbWl6ZSBpdD8KLQkJCSAqLwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YmYsICZiZl9xLCBsaXN0KSB7Ci0JCQkJYXRoOWtfaHdfY2xyMTFuX2FnZ3Ioc2MtPnNjX2FoLCB0YmYtPmJmX2Rlc2MpOwotCQkJfQotCisJCQlhdGg5a19od19jbHIxMW5fYWdncihzYy0+c2NfYWgsIGJmLT5iZl9kZXNjKTsKIAkJCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKIAkJCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgJmJmX3EpOwogCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBzZXR1cCBmaXJzdCBkZXNjIHdpdGggcmF0ZSBhbmQgYWdnciBpbmZvCi0JCSAqLworCQkvKiBzZXR1cCBmaXJzdCBkZXNjIG9mIGFnZ3JlZ2F0ZSAqLwogCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQUdHUjsKIAkJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwogCQlhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCBiZi0+YmZfYWwpOwogCi0JCS8qCi0JCSAqIGFuY2hvciBsYXN0IGZyYW1lIG9mIGFnZ3JlZ2F0ZSBjb3JyZWN0bHkKLQkJICovCi0JCUFTU0VSVChiZl9sYXN0YWdncik7Ci0JCUFTU0VSVChiZl9sYXN0YWdnci0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQkJdGJmID0gYmZfbGFzdGFnZ3I7Ci0JCWF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc2MtPnNjX2FoLCB0YmYtPmJmX2Rlc2MpOwotCi0JCS8qIFhYWDogV2UgZG9uJ3QgZW50ZXIgaW50byB0aGlzIGxvb3AsIGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgKi8KLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZiZl9xKSAmJiAhbGlzdF9pc19sYXN0KCZ0YmYtPmxpc3QsICZiZl9xKSkgewotCQkJdGJmID0gbGlzdF9lbnRyeSh0YmYtPmxpc3QubmV4dCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0JCX0KKwkJLyogYW5jaG9yIGxhc3QgZGVzYyBvZiBhZ2dyZWdhdGUgKi8KKwkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MpOwogCiAJCXR4cS0+YXhxX2FnZ3JfZGVwdGgrKzsKLQotCQkvKgotCQkgKiBOb3JtYWwgYWdncmVnYXRlLCBxdWV1ZSB0byBoYXJkd2FyZQotCQkgKi8KIAkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCAmYmZfcSk7CiAKIAl9IHdoaWxlICh0eHEtPmF4cV9kZXB0aCA8IEFUSF9BR0dSX01JTl9RREVQVEggJiYKIAkJIHN0YXR1cyAhPSBBVEhfQUdHUl9CQVdfQ0xPU0VEKTsKIH0KIAotLyogQ2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZCAqLwotCi1zdGF0aWMgdm9pZCBhdGhfdGlkX2RyYWluKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKLQoraW50IGF0aF90eF9hZ2dyX3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICB1MTYgdGlkLCB1MTYgKnNzbikKIHsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgeworCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfUFJPR1JFU1M7CisJCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKKwkJKnNzbiA9IHR4dGlkLT5zZXFfc3RhcnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQoreworCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOworCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0eHRpZC0+YWMtPnFudW1dOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7CiAJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCi0JZm9yICg7OykgewotCQlpZiAobGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpCi0JCQlicmVhazsKLQkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJaWYgKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkKKwkJcmV0dXJuIDA7CiAKLQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsICZ0aWQtPmJ1Zl9xLCAmYmYtPmJmX2xhc3Rmcm0tPmxpc3QpOwotCi0JCS8qIHVwZGF0ZSBiYXcgZm9yIHNvZnR3YXJlIHJldHJpZWQgZnJhbWUgKi8KLQkJaWYgKGJmX2lzcmV0cmllZChiZikpCi0JCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOwotCi0JCS8qCi0JCSAqIGRvIG5vdCBpbmRpY2F0ZSBwYWNrZXRzIHdoaWxlIGhvbGRpbmcgdHhxIHNwaW5sb2NrLgotCQkgKiB1bmxvY2sgaXMgaW50ZW50aW9uYWwgaGVyZQotCQkgKi8KLQkJc3Bpbl91bmxvY2soJnR4cS0+YXhxX2xvY2spOwotCi0JCS8qIGNvbXBsZXRlIHRoaXMgc3ViLWZyYW1lICovCi0JCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7Ci0KLQkJc3Bpbl9sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKKwlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX0NPTVBMRVRFKSkgeworCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogVE9ETzogRm9yIGZyYW1lKHMpIHRoYXQgYXJlIGluIHRoZSByZXRyeSBzdGF0ZSwgd2Ugd2lsbCByZXVzZSB0aGUKLQkgKiBzZXF1ZW5jZSBudW1iZXIocykgd2l0aG91dCBzZXR0aW5nIHRoZSByZXRyeSBiaXQuIFRoZQotCSAqIGFsdGVybmF0aXZlIGlzIHRvIGdpdmUgdXAgb24gdGhlc2UgYW5kIEJBUiB0aGUgcmVjZWl2ZXIncyB3aW5kb3cKLQkgKiBmb3J3YXJkLgotCSAqLwotCXRpZC0+c2VxX25leHQgPSB0aWQtPnNlcV9zdGFydDsKLQl0aWQtPmJhd190YWlsID0gdGlkLT5iYXdfaGVhZDsKKwlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7CisKKwkvKiBkcm9wIGFsbCBzb2Z0d2FyZSByZXRyaWVkIGZyYW1lcyBhbmQgbWFyayB0aGlzIFRJRCAqLworCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0eHRpZC0+YnVmX3EpKSB7CisJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdHh0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJCWlmICghYmZfaXNyZXRyaWVkKGJmKSkgeworCQkJLyoKKwkJCSAqIE5COiBpdCdzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQKKwkJCSAqIHNvZnR3YXJlIHJldHJpZWQgZnJhbWUgd2lsbCBhbHdheXMgc3RheQorCQkJICogYXQgdGhlIGhlYWQgb2Ygc29mdHdhcmUgcXVldWUuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOworCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdHh0aWQsIGJmLT5iZl9zZXFubyk7CisJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCWlmICh0eHRpZC0+YmF3X2hlYWQgIT0gdHh0aWQtPmJhd190YWlsKSB7CisJCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0NMRUFOVVA7CisJfSBlbHNlIHsKKwkJdHh0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOworCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJCWF0aF90eF9mbHVzaF90aWQoc2MsIHR4dGlkKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIERyYWluIGFsbCBwZW5kaW5nIGJ1ZmZlcnMKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwordm9pZCBhdGhfdHhfYWdncl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOworCisJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKKworCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpIHsKKwkJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7CisJCXR4dGlkLT5iYXdfc2l6ZSA9CisJCQlJRUVFODAyMTFfTUlOX0FNUERVX0JVRiA8PCBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CisJCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX0NPTVBMRVRFOworCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7CisJCWF0aF90eF9yZXN1bWVfdGlkKHNjLCB0eHRpZCk7CisJfQorfQorCitib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubykKK3sKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKKwkJcmV0dXJuIGZhbHNlOworCisJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKKworCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7CisJCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfUFJPR1JFU1MpICYmCisJCSAgICAodHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPCBBRERCQV9FWENIQU5HRV9BVFRFTVBUUykpIHsKKwkJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzKys7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqLworLyogUXVldWUgTWFuYWdlbWVudCAqLworLyoqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBhdGhfdHhxX2RyYWluX3BlbmRpbmdfYnVmZmVycyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCQkJICBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQogewpAQCAtMTY1MiwyNTEgKzc4OSw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGF0aF90eF9zZXR1cF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0Jc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKLQlpbnQgaGRybGVuOwotCV9fbGUxNiBmYzsKLQotCXR4X2luZm9fcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCp0eF9pbmZvX3ByaXYpLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIXR4X2luZm9fcHJpdikpCi0JCXJldHVybiAtRU5PTUVNOwotCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSB0eF9pbmZvX3ByaXY7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCUFUSF9UWEJVRl9SRVNFVChiZik7Ci0KLQkvKiBGcmFtZSB0eXBlICovCi0KLQliZi0+YmZfZnJtbGVuID0gc2tiLT5sZW4gKyBGQ1NfTEVOIC0gKGhkcmxlbiAmIDMpOwotCi0JaWVlZTgwMjExX2lzX2RhdGEoZmMpID8KLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9EQVRBKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0RBVEEpOwotCWllZWU4MDIxMV9pc19iYWNrX3JlcShmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0JBUikgOgotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9CQVIpOwotCWllZWU4MDIxMV9pc19wc3BvbGwoZmMpID8KLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9QU1BPTEwpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfUFNQT0xMKTsKLQkoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpID8KLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9TSE9SVF9QUkVBTUJMRSkgOgotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9TSE9SVF9QUkVBTUJMRSk7Ci0JKHNjLT5ody0+Y29uZi5odC5lbmFibGVkICYmICFpc19wYWUoc2tiKSAmJgotCSAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0hUKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0hUKTsKLQotCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNjLCBza2IsIHR4Y3RsLT50eHEpOwotCi0JLyogQ3J5cHRvICovCi0KLQliZi0+YmZfa2V5dHlwZSA9IGdldF9od19jcnlwdG9fa2V5dHlwZShza2IpOwotCi0JaWYgKGJmLT5iZl9rZXl0eXBlICE9IEFUSDlLX0tFWV9UWVBFX0NMRUFSKSB7Ci0JCWJmLT5iZl9mcm1sZW4gKz0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47Ci0JCWJmLT5iZl9rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OwotCX0gZWxzZSB7Ci0JCWJmLT5iZl9rZXlpeCA9IEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKLQl9Ci0KLQkvKiBBc3NpZ24gc2Vxbm8sIHRpZG5vICovCi0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSAmJiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKLQkJYXNzaWduX2FnZ3JfdGlkX3NlcW5vKHNrYiwgYmYpOwotCi0JLyogRE1BIHNldHVwICovCi0JYmYtPmJmX21wZHUgPSBza2I7Ci0KLQliZi0+YmZfZG1hY29udGV4dCA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJCSAgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCBiZi0+YmZfZG1hY29udGV4dCkpKSB7Ci0JCWJmLT5iZl9tcGR1ID0gTlVMTDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gVFhcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQliZi0+YmZfYnVmX2FkZHIgPSBiZi0+YmZfZG1hY29udGV4dDsKLQlyZXR1cm4gMDsKLX0KLQotLyogRklYTUU6IHR4IHBvd2VyICovCi1zdGF0aWMgdm9pZCBhdGhfdHhfc3RhcnRfZG1hKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCi0JCQkgICAgIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9ICBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCXN0cnVjdCBhdGhfZGVzYyAqZHM7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBmcm1fdHlwZTsKLQotCWZybV90eXBlID0gZ2V0X2h3X3BhY2tldF90eXBlKHNrYik7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0JbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKLQotCS8qIHNldHVwIGRlc2NyaXB0b3IgKi8KLQotCWRzID0gYmYtPmJmX2Rlc2M7Ci0JZHMtPmRzX2xpbmsgPSAwOwotCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwotCi0JLyogRm9ybXVsYXRlIGZpcnN0IHR4IGRlc2NyaXB0b3Igd2l0aCB0eCBjb250cm9scyAqLwotCi0JYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhhaCwgZHMsIGJmLT5iZl9mcm1sZW4sIGZybV90eXBlLCBNQVhfUkFURV9QT1dFUiwKLQkJCSAgICAgICBiZi0+YmZfa2V5aXgsIGJmLT5iZl9rZXl0eXBlLCBiZi0+YmZfZmxhZ3MpOwotCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgc2tiLT5sZW4sCS8qIHNlZ21lbnQgbGVuZ3RoICovCi0JCQkgICAgdHJ1ZSwJLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsCS8qIGxhc3Qgc2VnbWVudCAqLwotCQkJICAgIGRzKTsJLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCi0JYmYtPmJmX2xhc3Rmcm0gPSBiZjsKLQotCXNwaW5fbG9ja19iaCgmdHhjdGwtPnR4cS0+YXhxX2xvY2spOwotCi0JaWYgKGJmX2lzaHQoYmYpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpICYmCi0JICAgIHR4X2luZm8tPmNvbnRyb2wuc3RhKSB7Ci0JCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXR4X2luZm8tPmNvbnRyb2wuc3RhLT5kcnZfcHJpdjsKLQkJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwotCi0JCWlmIChhdGhfYWdncl9xdWVyeShzYywgYW4sIGJmLT5iZl90aWRubykpIHsKLQkJCS8qCi0JCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQotCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgotCQkJICovCi0JCQlhdGhfdHhfc2VuZF9hbXBkdShzYywgdGlkLCAmYmZfaGVhZCwgdHhjdGwpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFNlbmQgdGhpcyBmcmFtZSBhcyByZWd1bGFyIHdoZW4gQUREQkEKLQkJCSAqIGV4Y2hhbmdlIGlzIG5laXRoZXIgY29tcGxldGUgbm9yIHBlbmRpbmcuCi0JCQkgKi8KLQkJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwKLQkJCQkJICAgdGlkLCAmYmZfaGVhZCk7Ci0JCX0KLQl9IGVsc2UgewotCQliZi0+YmZfbGFzdGJmID0gYmY7Ci0JCWJmLT5iZl9uZnJhbWVzID0gMTsKLQotCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7Ci0JCWF0aF90eF90eHFhZGRidWYoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKLQl9Ci0KLQlzcGluX3VubG9ja19iaCgmdHhjdGwtPnR4cS0+YXhxX2xvY2spOwotfQotCi0vKiBVcG9uIGZhaWx1cmUgY2FsbGVyIHNob3VsZCBmcmVlIHNrYiAqLwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCi17Ci0Jc3RydWN0IGF0aF9idWYgKmJmOwotCWludCByOwotCi0JLyogQ2hlY2sgaWYgYSB0eCBidWZmZXIgaXMgYXZhaWxhYmxlICovCi0KLQliZiA9IGF0aF90eF9nZXRfYnVmZmVyKHNjKTsKLQlpZiAoIWJmKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlRYIGJ1ZmZlcnMgYXJlIGZ1bGxcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JciA9IGF0aF90eF9zZXR1cF9idWZmZXIoc2MsIGJmLCBza2IsIHR4Y3RsKTsKLQlpZiAodW5saWtlbHkocikpIHsKLQkJc3RydWN0IGF0aF90eHEgKnR4cSA9IHR4Y3RsLT50eHE7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlRYIG1lbSBhbGxvYyBmYWlsdXJlXG4iKTsKLQotCQkvKiB1cG9uIGF0aF90eF9wcm9jZXNzcSgpIHRoaXMgVFggcXVldWUgd2lsbCBiZSByZXN1bWVkLCB3ZQotCQkgKiBndWFyYW50ZWUgdGhpcyB3aWxsIGhhcHBlbiBieSBrbm93aW5nIGJlZm9yZWhhbmQgdGhhdAotCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGhhdmUgdG8gcnVuIFRYIGNvbXBsZXRpb25vbiBvbmUgYnVmZmVyCi0JCSAqIG9uIHRoZSBxdWV1ZSAqLwotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAoYXRoX3R4cV9kZXB0aChzYywgdHhxLT5heHFfcW51bSkgPiAxKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShzYy0+aHcsCi0JCQkJc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCQkJdHhxLT5zdG9wcGVkID0gMTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHgudHhidWYpOwotCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJcmV0dXJuIHI7Ci0JfQotCi0JYXRoX3R4X3N0YXJ0X2RtYShzYywgYmYsIHR4Y3RsKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBJbml0aWFsaXplIFRYIHF1ZXVlIGFuZCBoL3cgKi8KLQotaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpCi17Ci0JaW50IGVycm9yID0gMDsKLQotCWRvIHsKLQkJc3Bpbl9sb2NrX2luaXQoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JCS8qIFNldHVwIHR4IGRlc2NyaXB0b3JzICovCi0JCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+dHgudHhkbWEsICZzYy0+dHgudHhidWYsCi0JCQkidHgiLCBuYnVmcywgMSk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzY3JpcHRvcnM6ICVkXG4iLAotCQkJCWVycm9yKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogWFhYIGFsbG9jYXRlIGJlYWNvbiBzdGF0ZSB0b2dldGhlciB3aXRoIHZhcCAqLwotCQllcnJvciA9IGF0aF9kZXNjZG1hX3NldHVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmLAotCQkJCQkgICJiZWFjb24iLCBBVEhfQkNCVUYsIDEpOwotCQlpZiAoZXJyb3IgIT0gMCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIGJlYWNvbiBkZXNjcmlwdG9yczogJWRcbiIsCi0JCQkJZXJyb3IpOwotCQkJYnJlYWs7Ci0JCX0KLQotCX0gd2hpbGUgKDApOwotCi0JaWYgKGVycm9yICE9IDApCi0JCWF0aF90eF9jbGVhbnVwKHNjKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyogUmVjbGFpbSBhbGwgdHggcXVldWUgcmVzb3VyY2VzICovCi0KLWludCBhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQkvKiBjbGVhbnVwIGJlYWNvbiBkZXNjcmlwdG9ycyAqLwotCWlmIChzYy0+YmVhY29uLmJkbWEuZGRfZGVzY19sZW4gIT0gMCkKLQkJYXRoX2Rlc2NkbWFfY2xlYW51cChzYywgJnNjLT5iZWFjb24uYmRtYSwgJnNjLT5iZWFjb24uYmJ1Zik7Ci0KLQkvKiBjbGVhbnVwIHR4IGRlc2NyaXB0b3JzICovCi0JaWYgKHNjLT50eC50eGRtYS5kZF9kZXNjX2xlbiAhPSAwKQotCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBTZXR1cCBhIGgvdyB0cmFuc21pdCBxdWV1ZSAqLwotCiBzdHJ1Y3QgYXRoX3R4cSAqYXRoX3R4cV9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgc3VidHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAJaW50IHFudW07CiAKQEAgLTE5NTksNDMgKzg1NCw3IEBACiAJcmV0dXJuICZzYy0+dHgudHhxW3FudW1dOwogfQogCi0vKiBSZWNsYWltIHJlc291cmNlcyBmb3IgYSBzZXR1cCBxdWV1ZSAqLwotCi12b2lkIGF0aF90eF9jbGVhbnVwcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlhdGg5a19od19yZWxlYXNldHhxdWV1ZShzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pOwotCXNjLT50eC50eHFzZXR1cCAmPSB+KDE8PHR4cS0+YXhxX3FudW0pOwotfQotCi0vKgotICogU2V0dXAgYSBoYXJkd2FyZSBkYXRhIHRyYW5zbWl0IHF1ZXVlIGZvciB0aGUgc3BlY2lmaWVkCi0gKiBhY2Nlc3MgY29udHJvbC4gIFRoZSBoYWwgbWF5IG5vdCBzdXBwb3J0IGFsbCByZXF1ZXN0ZWQKLSAqIHF1ZXVlcyBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEKLSAqIHByZXZpb3VzbHkgc2V0dXAgcXVldWUuICBXZSByZWNvcmQgdGhlIG1hcHBpbmcgZnJvbSBhYydzCi0gKiB0byBoL3cgcXVldWVzIGZvciB1c2UgYnkgYXRoX3R4X3N0YXJ0IGFuZCBhbHNvIHRyYWNrCi0gKiB0aGUgc2V0IG9mIGgvdyBxdWV1ZXMgYmVpbmcgdXNlZCB0byBvcHRpbWl6ZSB3b3JrIGluIHRoZQotICogdHJhbnNtaXQgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHJlbGF0ZWQgcm91dGluZXMuCi0gKi8KLQotaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpCi17Ci0Jc3RydWN0IGF0aF90eHEgKnR4cTsKLQotCWlmIChoYWx0eXBlID49IEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiSEFMIEFDICV1IG91dCBvZiByYW5nZSwgbWF4ICV6dSFcbiIsCi0JCQkgaGFsdHlwZSwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JdHhxID0gYXRoX3R4cV9zZXR1cChzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwgaGFsdHlwZSk7Ci0JaWYgKHR4cSAhPSBOVUxMKSB7Ci0JCXNjLT50eC5od3FfbWFwW2hhbHR5cGVdID0gdHhxLT5heHFfcW51bTsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlCi0JCXJldHVybiAwOwotfQotCi1pbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKQorc3RhdGljIGludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpCiB7CiAJaW50IHFudW07CiAKQEAgLTIwMjEsOCArODgwLDYgQEAKIAlyZXR1cm4gcW51bTsKIH0KIAotLyogR2V0IGEgdHJhbnNtaXQgcXVldWUsIGlmIGF2YWlsYWJsZSAqLwotCiBzdHJ1Y3QgYXRoX3R4cSAqYXRoX3Rlc3RfZ2V0X3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gTlVMTDsKQEAgLTIwMzMsOSArODkwLDggQEAKIAogCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKLQkvKiBUcnkgdG8gYXZvaWQgcnVubmluZyBvdXQgb2YgZGVzY3JpcHRvcnMgKi8KIAlpZiAodHhxLT5heHFfZGVwdGggPj0gKEFUSF9UWEJVRiAtIDIwKSkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsCiAJCQkiVFggcXVldWU6ICVkIGlzIGZ1bGwsIGRlcHRoOiAlZFxuIiwKIAkJCXFudW0sIHR4cS0+YXhxX2RlcHRoKTsKIAkJaWVlZTgwMjExX3N0b3BfcXVldWUoc2MtPmh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CkBAIC0yMDQ5LDEyICs5MDUsMTAgQEAKIAlyZXR1cm4gdHhxOwogfQogCi0vKiBVcGRhdGUgcGFyYW1ldGVycyBmb3IgYSB0cmFuc21pdCBxdWV1ZSAqLwotCiBpbnQgYXRoX3R4cV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtLAogCQkgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWludCBlcnJvciA9IDA7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAKQEAgLTIwODIsNyArOTM2LDcgQEAKIAkJCSJVbmFibGUgdG8gdXBkYXRlIGhhcmR3YXJlIHF1ZXVlICV1IVxuIiwgcW51bSk7CiAJCWVycm9yID0gLUVJTzsKIAl9IGVsc2UgewotCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHFudW0pOyAvKiBwdXNoIHRvIGgvdyAqLworCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHFudW0pOwogCX0KIAogCXJldHVybiBlcnJvcjsKQEAgLTIwOTIsNTUgKzk0NiwzNiBAQAogewogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHFpOwogCWludCBxbnVtID0gc2MtPmJlYWNvbi5jYWJxLT5heHFfcW51bTsKLQlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKIAogCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoc2MtPnNjX2FoLCBxbnVtLCAmcWkpOwogCS8qCiAJICogRW5zdXJlIHRoZSByZWFkeXRpbWUgJSBpcyB3aXRoaW4gdGhlIGJvdW5kcy4KIAkgKi8KLQlpZiAoc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lIDwgQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORCkKLQkJc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORDsKLQllbHNlIGlmIChzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPiBBVEg5S19SRUFEWV9USU1FX0hJX0JPVU5EKQotCQlzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEg5S19SRUFEWV9USU1FX0hJX0JPVU5EOworCWlmIChzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPCBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EKQorCQlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EOworCWVsc2UgaWYgKHNjLT5jb25maWcuY2FicVJlYWR5dGltZSA+IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQpCisJCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQ7CiAKLQlhdGhfZ2V0X2JlYWNvbmNvbmZpZyhzYywgQVRIX0lGX0lEX0FOWSwgJmNvbmYpOwotCXFpLnRxaV9yZWFkeVRpbWUgPQotCQkoY29uZi5iZWFjb25faW50ZXJ2YWwgKiBzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUpIC8gMTAwOworCXFpLnRxaV9yZWFkeVRpbWUgPSAoc2MtPmh3LT5jb25mLmJlYWNvbl9pbnQgKgorCQkJICAgIHNjLT5jb25maWcuY2FicVJlYWR5dGltZSkgLyAxMDA7CiAJYXRoX3R4cV91cGRhdGUoc2MsIHFudW0sICZxaSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogRGVmZXJyZWQgcHJvY2Vzc2luZyBvZiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQotdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlpbnQgaTsKLQl1MzIgcWN1bWFzayA9ICgoMSA8PCBBVEg5S19OVU1fVFhfUVVFVUVTKSAtIDEpOwotCi0JYXRoOWtfaHdfZ2V0dHhpbnRydHhxcyhzYy0+c2NfYWgsICZxY3VtYXNrKTsKLQotCS8qCi0JICogUHJvY2VzcyBlYWNoIGFjdGl2ZSBxdWV1ZS4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSAmJiAocWN1bWFzayAmICgxIDw8IGkpKSkKLQkJCWF0aF90eF9wcm9jZXNzcShzYywgJnNjLT50eC50eHFbaV0pOwotCX0KLX0KLQotdm9pZCBhdGhfdHhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0Jc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCkKKy8qCisgKiBEcmFpbiBhIGdpdmVuIFRYIHF1ZXVlIChjb3VsZCBiZSBCZWFjb24gb3IgRGF0YSkKKyAqCisgKiBUaGlzIGFzc3VtZXMgb3V0cHV0IGhhcyBiZWVuIHN0b3BwZWQgYW5kCisgKiB3ZSBkbyBub3QgbmVlZCB0byBibG9jayBhdGhfdHhfdGFza2xldC4KKyAqLwordm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsIGJvb2wgcmV0cnlfdHgpCiB7CiAJc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKIAogCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAotCS8qCi0JICogTkI6IHRoaXMgYXNzdW1lcyBvdXRwdXQgaGFzIGJlZW4gc3RvcHBlZCBhbmQKLQkgKiAgICAgd2UgZG8gbm90IG5lZWQgdG8gYmxvY2sgYXRoX3R4X3Rhc2tsZXQKLQkgKi8KIAlmb3IgKDs7KSB7CiAJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKQEAgLTIxNzUsNyArMTAxMCw3IEBACiAJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAogCQlpZiAoYmZfaXNhbXBkdShiZikpCi0JCQlhdGhfdHhfY29tcGxldGVfYWdncl9yaWZzKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgMCk7CisJCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsIDApOwogCQllbHNlCiAJCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOwogCX0KQEAgLTIxOTAsMTgxICsxMDI1LDY2IEBACiAJfQogfQogCi0vKiBEcmFpbiB0aGUgdHJhbnNtaXQgcXVldWVzIGFuZCByZWNsYWltIHJlc291cmNlcyAqLwotCi12b2lkIGF0aF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKK3ZvaWQgYXRoX2RyYWluX2FsbF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7Ci0JLyogc3RvcCBiZWFjb24gcXVldWUuIFRoZSBiZWFjb24gd2lsbCBiZSBmcmVlZCB3aGVuCi0JICogd2UgZ28gdG8gSU5JVCBzdGF0ZSAqLwotCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpKSB7Ci0JCSh2b2lkKSBhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJiZWFjb24gcXVldWUgJXhcbiIsCi0JCQlhdGg5a19od19nZXR0eGJ1ZihzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSkpOwotCX0KKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOworCWludCBpLCBucGVuZCA9IDA7CiAKLQlhdGhfZHJhaW5fdHhkYXRhcShzYywgcmV0cnlfdHgpOwotfQorCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKQorCQlyZXR1cm47CiAKLXUzMiBhdGhfdHhxX2RlcHRoKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSkKLXsKLQlyZXR1cm4gc2MtPnR4LnR4cVtxbnVtXS5heHFfZGVwdGg7Ci19CisJLyogU3RvcCBiZWFjb24gcXVldWUgKi8KKwlhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCi11MzIgYXRoX3R4cV9hZ2dyX2RlcHRoKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSkKLXsKLQlyZXR1cm4gc2MtPnR4LnR4cVtxbnVtXS5heHFfYWdncl9kZXB0aDsKLX0KLQotYm9vbCBhdGhfdHhfYWdncl9jaGVjayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkbm8pCi17Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKLQotCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpCi0JCXJldHVybiBmYWxzZTsKLQotCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWRubyk7Ci0KLQlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX0NPTVBMRVRFKSkgewotCQlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX1BST0dSRVNTKSAmJgotCQkgICAgKHR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzIDwgQUREQkFfRVhDSEFOR0VfQVRURU1QVFMpKSB7Ci0JCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cysrOwotCQkJcmV0dXJuIHRydWU7CisJLyogU3RvcCBkYXRhIHF1ZXVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKSB7CisJCQl0eHEgPSAmc2MtPnR4LnR4cVtpXTsKKwkJCWF0aDlrX2h3X3N0b3B0eGRtYShhaCwgdHhxLT5heHFfcW51bSk7CisJCQlucGVuZCArPSBhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHR4cS0+YXhxX3FudW0pOwogCQl9CiAJfQogCi0JcmV0dXJuIGZhbHNlOworCWlmIChucGVuZCkgeworCQlpbnQgcjsKKworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJVbmFibGUgdG8gc3RvcCBUeERNQS4gUmVzZXQgSEFMIVxuIik7CisKKwkJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKwkJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIHRydWUpOworCQlpZiAocikKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICV1XG4iLAorCQkJCXIpOworCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCisJCQlhdGhfZHJhaW50eHEoc2MsICZzYy0+dHgudHhxW2ldLCByZXRyeV90eCk7CisJfQogfQogCi0vKiBTdGFydCBUWCBhZ2dyZWdhdGlvbiAqLwotCi1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQordm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCi0JYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpIHsKLQkJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7Ci0JCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX1BST0dSRVNTOwotCQlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7Ci0JfQotCi0JcmV0dXJuIDA7CisJYXRoOWtfaHdfcmVsZWFzZXR4cXVldWUoc2MtPnNjX2FoLCB0eHEtPmF4cV9xbnVtKTsKKwlzYy0+dHgudHhxc2V0dXAgJj0gfigxPDx0eHEtPmF4cV9xbnVtKTsKIH0KIAotLyogU3RvcCB0eCBhZ2dyZWdhdGlvbiAqLwotCi1pbnQgYXRoX3R4X2FnZ3Jfc3RvcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7Ci0KLQlhdGhfdHhfYWdncl90ZWFyZG93bihzYywgYW4sIHRpZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJlc3VtZSB0eCBhZ2dyZWdhdGlvbiAqLwotCi12b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwotCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgewotCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQkJdHh0aWQtPmJhd19zaXplID0KLQkJCUlFRUU4MDIxMV9NSU5fQU1QRFVfQlVGIDw8IHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCXR4dGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKLQkJYXRoX3R4X3Jlc3VtZV90aWQoc2MsIHR4dGlkKTsKLQl9Ci19Ci0KLS8qCi0gKiBQZXJmb3JtcyB0cmFuc21pdCBzaWRlIGNsZWFudXAgd2hlbiBUSUQgY2hhbmdlcyBmcm9tIGFnZ3JlZ2F0ZWQgdG8KLSAqIHVuYWdncmVnYXRlZC4KLSAqIC0gUGF1c2UgdGhlIFRJRCBhbmQgbWFyayBjbGVhbnVwIGluIHByb2dyZXNzCi0gKiAtIERpc2NhcmQgYWxsIHJldHJ5IGZyYW1lcyBmcm9tIHRoZSBzL3cgcXVldWUuCi0gKi8KLQotdm9pZCBhdGhfdHhfYWdncl90ZWFyZG93bihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkKQotewotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7Ci0Jc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3R4dGlkLT5hYy0+cW51bV07Ci0Jc3RydWN0IGF0aF9idWYgKmJmOwotCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQlpZiAodHh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSAvKiBjbGVhbnVwIGlzIGluIHByb2dyZXNzICovCi0JCXJldHVybjsKLQotCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7Ci0JCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFRJRCBtdXN0IGJlIHBhdXNlZCBmaXJzdCAqLwotCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKLQotCS8qIGRyb3AgYWxsIHNvZnR3YXJlIHJldHJpZWQgZnJhbWVzIGFuZCBtYXJrIHRoaXMgVElEICovCi0Jc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4dGlkLT5idWZfcSkpIHsKLQkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJaWYgKCFiZl9pc3JldHJpZWQoYmYpKSB7Ci0JCQkvKgotCQkJICogTkI6IGl0J3MgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdAotCQkJICogc29mdHdhcmUgcmV0cmllZCBmcmFtZSB3aWxsIGFsd2F5cyBzdGF5Ci0JCQkgKiBhdCB0aGUgaGVhZCBvZiBzb2Z0d2FyZSBxdWV1ZS4KLQkJCSAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkmdHh0aWQtPmJ1Zl9xLCAmYmYtPmJmX2xhc3Rmcm0tPmxpc3QpOwotCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdHh0aWQsIGJmLT5iZl9zZXFubyk7Ci0KLQkJLyogY29tcGxldGUgdGhpcyBzdWItZnJhbWUgKi8KLQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKLQl9Ci0KLQlpZiAodHh0aWQtPmJhd19oZWFkICE9IHR4dGlkLT5iYXdfdGFpbCkgewotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0NMRUFOVVA7Ci0JfSBlbHNlIHsKLQkJdHh0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdHh0aWQpOwotCX0KLX0KLQotLyoKLSAqIFR4IHNjaGVkdWxpbmcgbG9naWMKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwotCiB2b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CiAJc3RydWN0IGF0aF9hdHhfYWMgKmFjOwogCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwogCi0JLyogbm90aGluZyB0byBzY2hlZHVsZSAqLwogCWlmIChsaXN0X2VtcHR5KCZ0eHEtPmF4cV9hY3EpKQogCQlyZXR1cm47Ci0JLyoKLQkgKiBnZXQgdGhlIGZpcnN0IG5vZGUvYWMgcGFpciBvbiB0aGUgcXVldWUKLQkgKi8KKwogCWFjID0gbGlzdF9maXJzdF9lbnRyeSgmdHhxLT5heHFfYWNxLCBzdHJ1Y3QgYXRoX2F0eF9hYywgbGlzdCk7CiAJbGlzdF9kZWwoJmFjLT5saXN0KTsKIAlhYy0+c2NoZWQgPSBmYWxzZTsKIAotCS8qCi0JICogcHJvY2VzcyBhIHNpbmdsZSB0aWQgcGVyIGRlc3RpbmF0aW9uCi0JICovCiAJZG8gewotCQkvKiBub3RoaW5nIHRvIHNjaGVkdWxlICovCiAJCWlmIChsaXN0X2VtcHR5KCZhYy0+dGlkX3EpKQogCQkJcmV0dXJuOwogCkBAIC0yMzcyLDcgKzEwOTIsNyBAQAogCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKIAkJdGlkLT5zY2hlZCA9IGZhbHNlOwogCi0JCWlmICh0aWQtPnBhdXNlZCkgICAgLyogY2hlY2sgbmV4dCB0aWQgdG8ga2VlcCBoL3cgYnVzeSAqLworCQlpZiAodGlkLT5wYXVzZWQpCiAJCQljb250aW51ZTsKIAogCQlpZiAoKHR4cS0+YXhxX2RlcHRoICUgMikgPT0gMCkKQEAgLTIzODUsMTcgKzExMDUsMTAgQEAKIAkJaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKIAkJCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOwogCi0JCS8qIG9ubHkgc2NoZWR1bGUgb25lIFRJRCBhdCBhIHRpbWUgKi8KIAkJYnJlYWs7CiAJfSB3aGlsZSAoIWxpc3RfZW1wdHkoJmFjLT50aWRfcSkpOwogCi0JLyoKLQkgKiBzY2hlZHVsZSBBQyBpZiBtb3JlIFRJRHMgbmVlZCBwcm9jZXNzaW5nCi0JICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhYy0+dGlkX3EpKSB7Ci0JCS8qCi0JCSAqIGFkZCBkZXN0IGFjIHRvIHR4cSBpZiBub3QgYWxyZWFkeSBhZGRlZAotCQkgKi8KIAkJaWYgKCFhYy0+c2NoZWQpIHsKIAkJCWFjLT5zY2hlZCA9IHRydWU7CiAJCQlsaXN0X2FkZF90YWlsKCZhYy0+bGlzdCwgJnR4cS0+YXhxX2FjcSk7CkBAIC0yNDAzLDEwOSArMTExNiw1NzMgQEAKIAl9CiB9CiAKLS8qIEluaXRpYWxpemUgcGVyLW5vZGUgdHJhbnNtaXQgc3RhdGUgKi8KLQotdm9pZCBhdGhfdHhfbm9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQoraW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpCiB7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7Ci0Jc3RydWN0IGF0aF9hdHhfYWMgKmFjOwotCWludCB0aWRubywgYWNubzsKLQotCS8qCi0JICogSW5pdCBwZXIgdGlkIHR4IHN0YXRlCi0JICovCi0JZm9yICh0aWRubyA9IDAsIHRpZCA9ICZhbi0+dGlkW3RpZG5vXTsKLQkgICAgIHRpZG5vIDwgV01FX05VTV9USUQ7Ci0JICAgICB0aWRubysrLCB0aWQrKykgewotCQl0aWQtPmFuICAgICAgICA9IGFuOwotCQl0aWQtPnRpZG5vICAgICA9IHRpZG5vOwotCQl0aWQtPnNlcV9zdGFydCA9IHRpZC0+c2VxX25leHQgPSAwOwotCQl0aWQtPmJhd19zaXplICA9IFdNRV9NQVhfQkE7Ci0JCXRpZC0+YmF3X2hlYWQgID0gdGlkLT5iYXdfdGFpbCA9IDA7Ci0JCXRpZC0+c2NoZWQgICAgID0gZmFsc2U7Ci0JCXRpZC0+cGF1c2VkID0gZmFsc2U7Ci0JCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQkJSU5JVF9MSVNUX0hFQUQoJnRpZC0+YnVmX3EpOwotCi0JCWFjbm8gPSBUSURfVE9fV01FX0FDKHRpZG5vKTsKLQkJdGlkLT5hYyA9ICZhbi0+YWNbYWNub107Ci0KLQkJLyogQUREQkEgc3RhdGUgKi8KLQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKLQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKLQkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQl9Ci0KLQkvKgotCSAqIEluaXQgcGVyIGFjIHR4IHN0YXRlCi0JICovCi0JZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOwotCSAgICAgYWNubyA8IFdNRV9OVU1fQUM7IGFjbm8rKywgYWMrKykgewotCQlhYy0+c2NoZWQgICAgPSBmYWxzZTsKLQkJSU5JVF9MSVNUX0hFQUQoJmFjLT50aWRfcSk7Ci0KLQkJc3dpdGNoIChhY25vKSB7Ci0JCWNhc2UgV01FX0FDX0JFOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKLQkJCWJyZWFrOwotCQljYXNlIFdNRV9BQ19CSzoKLQkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAotCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CSyk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTUVfQUNfVkk6Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVkkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV01FX0FDX1ZPOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX1ZPKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0vKiBDbGVhbnVwdGhlIHBlbmRpbmcgYnVmZmVycyBmb3IgdGhlIG5vZGUuICovCi0KLXZvaWQgYXRoX3R4X25vZGVfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWMsICphY190bXA7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsICp0aWRfdG1wOwogCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgewotCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKLQkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOwogCi0JCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOwotCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWMsCi0JCQkJCWFjX3RtcCwgJnR4cS0+YXhxX2FjcSwgbGlzdCkgewotCQkJCXRpZCA9IGxpc3RfZmlyc3RfZW50cnkoJmFjLT50aWRfcSwKLQkJCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCwgbGlzdCk7Ci0JCQkJaWYgKHRpZCAmJiB0aWQtPmFuICE9IGFuKQotCQkJCQljb250aW51ZTsKLQkJCQlsaXN0X2RlbCgmYWMtPmxpc3QpOwotCQkJCWFjLT5zY2hlZCA9IGZhbHNlOwotCi0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpZCwKLQkJCQkJCXRpZF90bXAsICZhYy0+dGlkX3EsIGxpc3QpIHsKLQkJCQkJbGlzdF9kZWwoJnRpZC0+bGlzdCk7Ci0JCQkJCXRpZC0+c2NoZWQgPSBmYWxzZTsKLQkJCQkJYXRoX3RpZF9kcmFpbihzYywgdHhxLCB0aWQpOwotCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQkJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0NMRUFOVVA7Ci0JCQkJfQotCQkJfQotCi0JCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7Ci0JCX0KKwlpZiAoaGFsdHlwZSA+PSBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKSkgeworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQkJIkhBTCBBQyAldSBvdXQgb2YgcmFuZ2UsIG1heCAlenUhXG4iLAorCQkJIGhhbHR5cGUsIEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKTsKKwkJcmV0dXJuIDA7CiAJfQorCXR4cSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0RBVEEsIGhhbHR5cGUpOworCWlmICh0eHEgIT0gTlVMTCkgeworCQlzYy0+dHguaHdxX21hcFtoYWx0eXBlXSA9IHR4cS0+YXhxX3FudW07CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKIH0KIAotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKKy8qKioqKioqKioqKi8KKy8qIFRYLCBETUEgKi8KKy8qKioqKioqKioqKi8KKworLyoKKyAqIEluc2VydCBhIGNoYWluIG9mIGF0aF9idWYgKGRlc2NyaXB0b3JzKSBvbiBhIHR4cSBhbmQKKyAqIGFzc3VtZSB0aGUgZGVzY3JpcHRvcnMgYXJlIGFscmVhZHkgY2hhaW5lZCB0b2dldGhlciBieSBjYWxsZXIuCisgKi8KK3N0YXRpYyB2b2lkIGF0aF90eF90eHFhZGRidWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9idWYgKmJmOworCisJLyoKKwkgKiBJbnNlcnQgdGhlIGZyYW1lIG9uIHRoZSBvdXRib3VuZCBsaXN0IGFuZAorCSAqIHBhc3MgaXQgb24gdG8gdGhlIGhhcmR3YXJlLgorCSAqLworCisJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCXJldHVybjsKKworCWJmID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoaGVhZCwgJnR4cS0+YXhxX3EpOworCXR4cS0+YXhxX2RlcHRoKys7CisJdHhxLT5heHFfdG90YWxxdWV1ZWQrKzsKKwl0eHEtPmF4cV9saW5rYnVmID0gbGlzdF9lbnRyeSh0eHEtPmF4cV9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsCisJCSJxbnVtOiAlZCwgdHhxIGRlcHRoOiAlZFxuIiwgdHhxLT5heHFfcW51bSwgdHhxLT5heHFfZGVwdGgpOworCisJaWYgKHR4cS0+YXhxX2xpbmsgPT0gTlVMTCkgeworCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSwgYmYtPmJmX2RhZGRyKTsKKwkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULAorCQkJIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAorCQkJdHhxLT5heHFfcW51bSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOworCX0gZWxzZSB7CisJCSp0eHEtPmF4cV9saW5rID0gYmYtPmJmX2RhZGRyOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJsaW5rWyV1XSAoJXApPSVsbHggKCVwKVxuIiwKKwkJCXR4cS0+YXhxX3FudW0sIHR4cS0+YXhxX2xpbmssCisJCQlpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7CisJfQorCXR4cS0+YXhxX2xpbmsgPSAmKGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MtPmRzX2xpbmspOworCWF0aDlrX2h3X3R4c3RhcnQoYWgsIHR4cS0+YXhxX3FudW0pOworfQorCitzdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aF90eF9nZXRfYnVmZmVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfYnVmICpiZiA9IE5VTEw7CisKKwlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJnNjLT50eC50eGJ1ZikpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+dHgudHhidWYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwlsaXN0X2RlbCgmYmYtPmxpc3QpOworCisJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJcmV0dXJuIGJmOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9hbXBkdShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkLAorCQkJICAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BTVBEVTsKKworCS8qCisJICogRG8gbm90IHF1ZXVlIHRvIGgvdyB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKwkgKiAtIHRoZXJlIGFyZSBwZW5kaW5nIGZyYW1lcyBpbiBzb2Z0d2FyZSBxdWV1ZQorCSAqIC0gdGhlIFRJRCBpcyBjdXJyZW50bHkgcGF1c2VkIGZvciBBRERCQS9CQVIgcmVxdWVzdAorCSAqIC0gc2Vxbm8gaXMgbm90IHdpdGhpbiBibG9jay1hY2sgd2luZG93CisJICogLSBoL3cgcXVldWUgZGVwdGggZXhjZWVkcyBsb3cgd2F0ZXIgbWFyaworCSAqLworCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkgfHwgdGlkLT5wYXVzZWQgfHwKKwkgICAgIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGJmLT5iZl9zZXFubykgfHwKKwkgICAgdHhjdGwtPnR4cS0+YXhxX2RlcHRoID49IEFUSF9BR0dSX01JTl9RREVQVEgpIHsKKwkJLyoKKwkJICogQWRkIHRoaXMgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUgZm9yIHNjaGVkdWxpbmcgbGF0ZXIKKwkJICogZm9yIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmdGlkLT5idWZfcSk7CisJCWF0aF90eF9xdWV1ZV90aWQodHhjdGwtPnR4cSwgdGlkKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFkZCBzdWItZnJhbWUgdG8gQkFXICovCisJYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBiZik7CisKKwkvKiBRdWV1ZSB0byBoL3cgd2l0aG91dCBhZ2dyZWdhdGlvbiAqLworCWJmLT5iZl9uZnJhbWVzID0gMTsKKwliZi0+YmZfbGFzdGJmID0gYmY7CisJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOworCWF0aF90eF90eHFhZGRidWYoc2MsIHR4Y3RsLT50eHEsIGJmX2hlYWQpOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9odF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQpCit7CisJc3RydWN0IGF0aF9idWYgKmJmOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwliZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0FNUERVOworCisJLyogdXBkYXRlIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciBmb3Igc3Vic2VxdWVudCBBRERCQSByZXF1ZXN0ICovCisJSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOworCisJYmYtPmJmX25mcmFtZXMgPSAxOworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X3NlbmRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQpCit7CisJc3RydWN0IGF0aF9idWYgKmJmOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwliZi0+YmZfbmZyYW1lcyA9IDE7CisJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOworCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgYmZfaGVhZCk7Cit9CisKK3N0YXRpYyBlbnVtIGF0aDlrX3BrdF90eXBlIGdldF9od19wYWNrZXRfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJZW51bSBhdGg5a19wa3RfdHlwZSBodHlwZTsKKwlfX2xlMTYgZmM7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCisJCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfQkVBQ09OOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGZjKSkKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9QUk9CRV9SRVNQOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19hdGltKGZjKSkKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9BVElNOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wc3BvbGwoZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BTUE9MTDsKKwllbHNlCisJCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfTk9STUFMOworCisJcmV0dXJuIGh0eXBlOworfQorCitzdGF0aWMgYm9vbCBpc19wYWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCV9fbGUxNiBmYzsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgfHwKKwkJICAgIC8qIFBvcnQgQWNjZXNzIEVudGl0eSAoSUVFRSA4MDIuMVgpICovCisJCSAgICAoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCWlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19XRVApCisJCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfV0VQOworCQllbHNlIGlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKQorCQkJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX1RLSVA7CisJCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX0NDTVApCisJCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfQUVTOworCX0KKworCXJldHVybiBBVEg5S19LRVlfVFlQRV9DTEVBUjsKK30KKworc3RhdGljIHZvaWQgYXNzaWduX2FnZ3JfdGlkX3NlcW5vKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKKwlfX2xlMTYgZmM7CisJdTggKnFjOworCisJaWYgKCF0eF9pbmZvLT5jb250cm9sLnN0YSkKKwkJcmV0dXJuOworCisJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCWJmLT5iZl90aWRubyA9IHFjWzBdICYgMHhmOworCX0KKworCS8qCisJICogRm9yIEhUIGNhcGFibGUgc3RhdGlvbnMsIHdlIHNhdmUgdGlkbm8gZm9yIGxhdGVyIHVzZS4KKwkgKiBXZSBhbHNvIG92ZXJyaWRlIHNlcW5vIHNldCBieSB1cHBlciBsYXllciB3aXRoIHRoZSBvbmUKKwkgKiBpbiB0eCBhZ2dyZWdhdGlvbiBzdGF0ZS4KKwkgKgorCSAqIElmIGZyYWdtZW50YXRpb24gaXMgb24sIHRoZSBzZXF1ZW5jZSBudW1iZXIgaXMKKwkgKiBub3Qgb3ZlcnJpZGRlbiwgc2luY2UgaXQgaGFzIGJlZW4KKwkgKiBpbmNyZW1lbnRlZCBieSB0aGUgZnJhZ21lbnRhdGlvbiByb3V0aW5lLgorCSAqCisJICogRklYTUU6IGNoZWNrIGlmIHRoZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBleGNlZWRzCisJICogSUVFRTgwMjExIG1heC4KKwkgKi8KKwl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7CisJaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHRpZC0+c2VxX25leHQgPDwKKwkJCUlFRUU4MDIxMV9TRVFfU0VRX1NISUZUKTsKKwliZi0+YmZfc2Vxbm8gPSB0aWQtPnNlcV9uZXh0OworCUlOQ1IodGlkLT5zZXFfbmV4dCwgSUVFRTgwMjExX1NFUV9NQVgpOworfQorCitzdGF0aWMgaW50IHNldHVwX3R4X2ZsYWdzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbnQgZmxhZ3MgPSAwOworCisJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX0NMUkRNQVNLOyAvKiBuZWVkZWQgZm9yIGNyeXB0byBlcnJvcnMgKi8KKwlmbGFncyB8PSBBVEg5S19UWERFU0NfSU5UUkVROworCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCisJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19OT0FDSzsKKworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIHJpeCAtIHJhdGUgaW5kZXgKKyAqIHBrdGxlbiAtIHRvdGFsIGJ5dGVzIChkZWxpbXMgKyBkYXRhICsgZmNzICsgcGFkcyArIHBhZCBkZWxpbXMpCisgKiB3aWR0aCAgLSAwIGZvciAyMCBNSHosIDEgZm9yIDQwIE1IegorICogaGFsZl9naSAtIHRvIHVzZSA0dXMgdi9zIDMuNiB1cyBmb3Igc3ltYm9sIHRpbWUKKyAqLworc3RhdGljIHUzMiBhdGhfcGt0X2R1cmF0aW9uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1OCByaXgsIHN0cnVjdCBhdGhfYnVmICpiZiwKKwkJCSAgICBpbnQgd2lkdGgsIGludCBoYWxmX2dpLCBib29sIHNob3J0UHJlYW1ibGUpCit7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOworCXUzMiBuYml0cywgbnN5bWJpdHMsIGR1cmF0aW9uLCBuc3ltYm9sczsKKwl1OCByYzsKKwlpbnQgc3RyZWFtcywgcGt0bGVuOworCisJcGt0bGVuID0gYmZfaXNhZ2dyKGJmKSA/IGJmLT5iZl9hbCA6IGJmLT5iZl9mcm1sZW47CisJcmMgPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0ucmF0ZWNvZGU7CisKKwkvKiBmb3IgbGVnYWN5IHJhdGVzLCB1c2Ugb2xkIGZ1bmN0aW9uIHRvIGNvbXB1dGUgcGFja2V0IGR1cmF0aW9uICovCisJaWYgKCFJU19IVF9SQVRFKHJjKSkKKwkJcmV0dXJuIGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLCBwa3RsZW4sCisJCQkJCSAgICAgIHJpeCwgc2hvcnRQcmVhbWJsZSk7CisKKwkvKiBmaW5kIG51bWJlciBvZiBzeW1ib2xzOiBQTENQICsgZGF0YSAqLworCW5iaXRzID0gKHBrdGxlbiA8PCAzKSArIE9GRE1fUExDUF9CSVRTOworCW5zeW1iaXRzID0gYml0c19wZXJfc3ltYm9sW0hUX1JDXzJfTUNTKHJjKV1bd2lkdGhdOworCW5zeW1ib2xzID0gKG5iaXRzICsgbnN5bWJpdHMgLSAxKSAvIG5zeW1iaXRzOworCisJaWYgKCFoYWxmX2dpKQorCQlkdXJhdGlvbiA9IFNZTUJPTF9USU1FKG5zeW1ib2xzKTsKKwllbHNlCisJCWR1cmF0aW9uID0gU1lNQk9MX1RJTUVfSEFMRkdJKG5zeW1ib2xzKTsKKworCS8qIGFkZHVwIGR1cmF0aW9uIGZvciBsZWdhY3kvaHQgdHJhaW5pbmcgYW5kIHNpZ25hbCBmaWVsZHMgKi8KKwlzdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKKwlkdXJhdGlvbiArPSBMX1NURiArIExfTFRGICsgTF9TSUcgKyBIVF9TSUcgKyBIVF9TVEYgKyBIVF9MVEYoc3RyZWFtcyk7CisKKwlyZXR1cm4gZHVyYXRpb247Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOworCXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgc2VyaWVzWzRdOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlpbnQgaSwgZmxhZ3MgPSAwOworCXU4IHJpeCA9IDAsIGN0c3JhdGUgPSAwOworCWJvb2wgaXNfcHNwb2xsOworCisJbWVtc2V0KHNlcmllcywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMpICogNCk7CisKKwlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaXNfcHNwb2xsID0gaWVlZTgwMjExX2lzX3BzcG9sbChoZHItPmZyYW1lX2NvbnRyb2wpOworCisJLyoKKwkgKiBXZSBjaGVjayBpZiBTaG9ydCBQcmVhbWJsZSBpcyBuZWVkZWQgZm9yIHRoZSBDVFMgcmF0ZSBieQorCSAqIGNoZWNraW5nIHRoZSBCU1MncyBnbG9iYWwgZmxhZy4KKwkgKiBCdXQgZm9yIHRoZSByYXRlIHNlcmllcywgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSBpcyB1c2VkLgorCSAqLworCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUkVBTUJMRV9TSE9SVCkKKwkJY3RzcmF0ZSA9IHJ0LT5pbmZvW3R4X2luZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeF0ucmF0ZWNvZGUgfAorCQkJcnQtPmluZm9bdHhfaW5mby0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4XS5zaG9ydF9wcmVhbWJsZTsKKwllbHNlCisJCWN0c3JhdGUgPSBydC0+aW5mb1t0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHhdLnJhdGVjb2RlOworCisJLyoKKwkgKiBBVEg5S19UWERFU0NfUlRTRU5BIGFuZCBBVEg5S19UWERFU0NfQ1RTRU5BIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisJICogQ2hlY2sgdGhlIGZpcnN0IHJhdGUgaW4gdGhlIHNlcmllcyB0byBkZWNpZGUgd2hldGhlciBSVFMvQ1RTCisJICogb3IgQ1RTLXRvLXNlbGYgaGFzIHRvIGJlIHVzZWQuCisJICovCisJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkKKwkJZmxhZ3MgPSBBVEg5S19UWERFU0NfQ1RTRU5BOworCWVsc2UgaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKQorCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7CisKKwkvKiBGSVhNRTogSGFuZGxlIGFnZ3JlZ2F0aW9uIHByb3RlY3Rpb24gKi8KKwlpZiAoc2MtPmNvbmZpZy5hdGhfYWdncl9wcm90ICYmCisJICAgICghYmZfaXNhZ2dyKGJmKSB8fCAoYmZfaXNhZ2dyKGJmKSAmJiBiZi0+YmZfYWwgPCA4MTkyKSkpIHsKKwkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOworCX0KKworCS8qIEZvciBBUjU0MTYgLSBSVFMgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGEgZnJhbWUgbGFyZ2VyIHRoYW4gOEsgKi8KKwlpZiAoYmZfaXNhZ2dyKGJmKSAmJiAoYmYtPmJmX2FsID4gc2MtPnNjX2FoLT5jYXBzLnJ0c19hZ2dyX2xpbWl0KSkKKwkJZmxhZ3MgJj0gfihBVEg5S19UWERFU0NfUlRTRU5BKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKCFyYXRlc1tpXS5jb3VudCB8fCAocmF0ZXNbaV0uaWR4IDwgMCkpCisJCQljb250aW51ZTsKKworCQlyaXggPSByYXRlc1tpXS5pZHg7CisJCXNlcmllc1tpXS5UcmllcyA9IHJhdGVzW2ldLmNvdW50OworCQlzZXJpZXNbaV0uQ2hTZWwgPSBzYy0+dHhfY2hhaW5tYXNrOworCisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCQlzZXJpZXNbaV0uUmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZWNvZGUgfAorCQkJCXJ0LT5pbmZvW3JpeF0uc2hvcnRfcHJlYW1ibGU7CisJCWVsc2UKKwkJCXNlcmllc1tpXS5SYXRlID0gcnQtPmluZm9bcml4XS5yYXRlY29kZTsKKworCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUzsKKwkJaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU18yMDQwOworCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCisJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJOworCisJCXNlcmllc1tpXS5Qa3REdXJhdGlvbiA9IGF0aF9wa3RfZHVyYXRpb24oc2MsIHJpeCwgYmYsCisJCQkgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkgIT0gMCwKKwkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpLAorCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpKTsKKwl9CisKKwkvKiBzZXQgZHVyX3VwZGF0ZV9lbiBmb3IgbC1zaWcgY29tcHV0YXRpb24gZXhjZXB0IGZvciBQUy1Qb2xsIGZyYW1lcyAqLworCWF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywKKwkJCQkgICAgIGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MsCisJCQkJICAgICAhaXNfcHNwb2xsLCBjdHNyYXRlLAorCQkJCSAgICAgMCwgc2VyaWVzLCA0LCBmbGFncyk7CisKKwlpZiAoc2MtPmNvbmZpZy5hdGhfYWdncl9wcm90ICYmIGZsYWdzKQorCQlhdGg5a19od19zZXQxMW5fYnVyc3RkdXJhdGlvbihzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCA4MTkyKTsKK30KKworc3RhdGljIGludCBhdGhfdHhfc2V0dXBfYnVmZmVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXY7CisJaW50IGhkcmxlbjsKKwlfX2xlMTYgZmM7CisKKwl0eF9pbmZvX3ByaXYgPSBremFsbG9jKHNpemVvZigqdHhfaW5mb19wcml2KSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCF0eF9pbmZvX3ByaXYpKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdID0gdHhfaW5mb19wcml2OworCXR4X2luZm9fcHJpdi0+YXBoeSA9IGFwaHk7CisJdHhfaW5mb19wcml2LT5mcmFtZV90eXBlID0gdHhjdGwtPmZyYW1lX3R5cGU7CisJaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCUFUSF9UWEJVRl9SRVNFVChiZik7CisKKwliZi0+YmZfZnJtbGVuID0gc2tiLT5sZW4gKyBGQ1NfTEVOIC0gKGhkcmxlbiAmIDMpOworCisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYgIWlzX3BhZShza2IpKQorCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfSFQ7CisKKwliZi0+YmZfZmxhZ3MgPSBzZXR1cF90eF9mbGFncyhzYywgc2tiLCB0eGN0bC0+dHhxKTsKKworCWJmLT5iZl9rZXl0eXBlID0gZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7CisJaWYgKGJmLT5iZl9rZXl0eXBlICE9IEFUSDlLX0tFWV9UWVBFX0NMRUFSKSB7CisJCWJmLT5iZl9mcm1sZW4gKz0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47CisJCWJmLT5iZl9rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OworCX0gZWxzZSB7CisJCWJmLT5iZl9rZXlpeCA9IEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKKwl9CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSAmJiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKKwkJYXNzaWduX2FnZ3JfdGlkX3NlcW5vKHNrYiwgYmYpOworCisJYmYtPmJmX21wZHUgPSBza2I7CisKKwliZi0+YmZfZG1hY29udGV4dCA9IGRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkJICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCkpKSB7CisJCWJmLT5iZl9tcGR1ID0gTlVMTDsKKwkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCQkiZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBUWFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0OworCXJldHVybiAwOworfQorCisvKiBGSVhNRTogdHggcG93ZXIgKi8KK3N0YXRpYyB2b2lkIGF0aF90eF9zdGFydF9kbWEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKKwkJCSAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCWludCBmcm1fdHlwZTsKKwlfX2xlMTYgZmM7CisKKwlmcm1fdHlwZSA9IGdldF9od19wYWNrZXRfdHlwZShza2IpOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOworCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisKKwlkcyA9IGJmLT5iZl9kZXNjOworCWRzLT5kc19saW5rID0gMDsKKwlkcy0+ZHNfZGF0YSA9IGJmLT5iZl9idWZfYWRkcjsKKworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBiZi0+YmZfZnJtbGVuLCBmcm1fdHlwZSwgTUFYX1JBVEVfUE9XRVIsCisJCQkgICAgICAgYmYtPmJmX2tleWl4LCBiZi0+YmZfa2V5dHlwZSwgYmYtPmJmX2ZsYWdzKTsKKworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLAorCQkJICAgIHNrYi0+bGVuLAkvKiBzZWdtZW50IGxlbmd0aCAqLworCQkJICAgIHRydWUsCS8qIGZpcnN0IHNlZ21lbnQgKi8KKwkJCSAgICB0cnVlLAkvKiBsYXN0IHNlZ21lbnQgKi8KKwkJCSAgICBkcyk7CS8qIGZpcnN0IGRlc2NyaXB0b3IgKi8KKworCXNwaW5fbG9ja19iaCgmdHhjdGwtPnR4cS0+YXhxX2xvY2spOworCisJaWYgKGJmX2lzaHQoYmYpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpICYmCisJICAgIHR4X2luZm8tPmNvbnRyb2wuc3RhKSB7CisJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXR4X2luZm8tPmNvbnRyb2wuc3RhLT5kcnZfcHJpdjsKKwkJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOworCisJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLCAmYmZfaGVhZCk7CisJCQlnb3RvIHR4X2RvbmU7CisJCX0KKworCQlpZiAoYXRoX2FnZ3JfcXVlcnkoc2MsIGFuLCBiZi0+YmZfdGlkbm8pKSB7CisJCQkvKgorCQkJICogVHJ5IGFnZ3JlZ2F0aW9uIGlmIGl0J3MgYSB1bmljYXN0IGRhdGEgZnJhbWUKKwkJCSAqIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgSFQgY2FwYWJsZS4KKwkJCSAqLworCQkJYXRoX3R4X3NlbmRfYW1wZHUoc2MsIHRpZCwgJmJmX2hlYWQsIHR4Y3RsKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBTZW5kIHRoaXMgZnJhbWUgYXMgcmVndWxhciB3aGVuIEFEREJBCisJCQkgKiBleGNoYW5nZSBpcyBuZWl0aGVyIGNvbXBsZXRlIG5vciBwZW5kaW5nLgorCQkJICovCisJCQlhdGhfdHhfc2VuZF9odF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsCisJCQkJCSAgICAgIHRpZCwgJmJmX2hlYWQpOworCQl9CisJfSBlbHNlIHsKKwkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLCAmYmZfaGVhZCk7CisJfQorCit0eF9kb25lOgorCXNwaW5fdW5sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Cit9CisKKy8qIFVwb24gZmFpbHVyZSBjYWxsZXIgc2hvdWxkIGZyZWUgc2tiICovCitpbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJaW50IHI7CisKKwliZiA9IGF0aF90eF9nZXRfYnVmZmVyKHNjKTsKKwlpZiAoIWJmKSB7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlRYIGJ1ZmZlcnMgYXJlIGZ1bGxcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJciA9IGF0aF90eF9zZXR1cF9idWZmZXIoaHcsIGJmLCBza2IsIHR4Y3RsKTsKKwlpZiAodW5saWtlbHkocikpIHsKKwkJc3RydWN0IGF0aF90eHEgKnR4cSA9IHR4Y3RsLT50eHE7CisKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlRYIG1lbSBhbGxvYyBmYWlsdXJlXG4iKTsKKworCQkvKiB1cG9uIGF0aF90eF9wcm9jZXNzcSgpIHRoaXMgVFggcXVldWUgd2lsbCBiZSByZXN1bWVkLCB3ZQorCQkgKiBndWFyYW50ZWUgdGhpcyB3aWxsIGhhcHBlbiBieSBrbm93aW5nIGJlZm9yZWhhbmQgdGhhdAorCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGhhdmUgdG8gcnVuIFRYIGNvbXBsZXRpb25vbiBvbmUgYnVmZmVyCisJCSAqIG9uIHRoZSBxdWV1ZSAqLworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAoc2MtPnR4LnR4cVt0eHEtPmF4cV9xbnVtXS5heHFfZGVwdGggPiAxKSB7CisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShzYy0+aHcsCisJCQkJc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCQkJdHhxLT5zdG9wcGVkID0gMTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHgudHhidWYpOworCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwkJcmV0dXJuIHI7CisJfQorCisJYXRoX3R4X3N0YXJ0X2RtYShzYywgYmYsIHR4Y3RsKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWludCBoZHJsZW4sIHBhZHNpemU7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKQEAgLTI1NDIsNyArMTcxOSw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgQ0FCUSBwYWNrZXQsIHNrYjogJXBcbiIsIHNrYik7CiAKLQlpZiAoYXRoX3R4X3N0YXJ0KHNjLCBza2IsICZ0eGN0bCkgIT0gMCkgeworCWlmIChhdGhfdHhfc3RhcnQoaHcsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIkNBQlEgVFggZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTI1NTEsMyArMTcyOCw0MzcgQEAKIGV4aXQ6CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KKworLyoqKioqKioqKioqKioqKioqLworLyogVFggQ29tcGxldGlvbiAqLworLyoqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgc3RydWN0IGF0aF94bWl0X3N0YXR1cyAqdHhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKTsKKwlpbnQgaGRybGVuLCBwYWRzaXplOworCWludCBmcmFtZV90eXBlID0gQVRIOUtfTk9UX0lOVEVSTkFMOworCisJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggY29tcGxldGU6IHNrYjogJXBcbiIsIHNrYik7CisKKwlpZiAodHhfaW5mb19wcml2KSB7CisJCWh3ID0gdHhfaW5mb19wcml2LT5hcGh5LT5odzsKKwkJZnJhbWVfdHlwZSA9IHR4X2luZm9fcHJpdi0+ZnJhbWVfdHlwZTsKKwl9CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAorCSAgICB0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEKSB7CisJCWtmcmVlKHR4X2luZm9fcHJpdik7CisJCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOworCX0KKworCWlmICh0eF9zdGF0dXMtPmZsYWdzICYgQVRIX1RYX0JBUikgeworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOworCQl0eF9zdGF0dXMtPmZsYWdzICY9IH5BVEhfVFhfQkFSOworCX0KKworCWlmICghKHR4X3N0YXR1cy0+ZmxhZ3MgJiAoQVRIX1RYX0VSUk9SIHwgQVRIX1RYX1hSRVRSWSkpKSB7CisJCS8qIEZyYW1lIHdhcyBBQ0tlZCAqLworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJfQorCisJdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdHhfc3RhdHVzLT5yZXRyaWVzICsgMTsKKworCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJcGFkc2l6ZSA9IGhkcmxlbiAmIDM7CisJaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7CisJCS8qCisJCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bworCQkgKiBtYWM4MDIxMS4KKwkJICovCisJCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIHBhZHNpemUpOworCX0KKworCWlmIChmcmFtZV90eXBlID09IEFUSDlLX05PVF9JTlRFUk5BTCkKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKKwllbHNlCisJCWF0aDlrX3R4X3N0YXR1cyhodywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCisJCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKKwlzdHJ1Y3QgYXRoX3htaXRfc3RhdHVzIHR4X3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBTZXQgcmV0cnkgaW5mb3JtYXRpb24uCisJICogTkI6IERvbid0IHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRlc2NyaXB0b3IsIGJlY2F1c2UgdGhlIGZyYW1lCisJICogY291bGQgYmUgc29mdHdhcmUgcmV0cmllZC4KKwkgKi8KKwl0eF9zdGF0dXMucmV0cmllcyA9IGJmLT5iZl9yZXRyaWVzOworCXR4X3N0YXR1cy5mbGFncyA9IDA7CisKKwlpZiAoc2VuZGJhcikKKwkJdHhfc3RhdHVzLmZsYWdzID0gQVRIX1RYX0JBUjsKKworCWlmICghdHhvaykgeworCQl0eF9zdGF0dXMuZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOworCisJCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKKwkJCXR4X3N0YXR1cy5mbGFncyB8PSBBVEhfVFhfWFJFVFJZOworCX0KKworCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgJnR4X3N0YXR1cyk7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9idWYgKmJmX2xhc3QgPSBiZi0+YmZfbGFzdGJmOworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZl9sYXN0LT5iZl9kZXNjOworCXUxNiBzZXFfc3QgPSAwOworCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07CisJaW50IGJhX2luZGV4OworCWludCBuYmFkID0gMDsKKwlpbnQgaXNhZ2dyID0gMDsKKworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzID09IEFUSDlLX1RYX1NXX0FCT1JURUQpCisJCXJldHVybiAwOworCisJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKKwlpZiAoaXNhZ2dyKSB7CisJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJfQorCisJd2hpbGUgKGJmKSB7CisJCWJhX2luZGV4ID0gQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKTsKKwkJaWYgKCF0eG9rIHx8IChpc2FnZ3IgJiYgIUFUSF9CQV9JU1NFVChiYSwgYmFfaW5kZXgpKSkKKwkJCW5iYWQrKzsKKworCQliZiA9IGJmLT5iZl9uZXh0OworCX0KKworCXJldHVybiBuYmFkOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcmNfc3RhdHVzKHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF9kZXNjICpkcywgaW50IG5iYWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCisJdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSBmYWxzZTsKKwlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKQorCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKKworCWlmICgoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKSA9PSAwICYmCisJICAgIChiZi0+YmZfZmxhZ3MgJiBBVEg5S19UWERFU0NfTk9BQ0spID09IDApIHsKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCW1lbWNweSgmdHhfaW5mb19wcml2LT50eCwgJmRzLT5kc190eHN0YXQsCisJCQkgICAgICAgc2l6ZW9mKHR4X2luZm9fcHJpdi0+dHgpKTsKKwkJCXR4X2luZm9fcHJpdi0+bl9mcmFtZXMgPSBiZi0+YmZfbmZyYW1lczsKKwkJCXR4X2luZm9fcHJpdi0+bl9iYWRfZnJhbWVzID0gbmJhZDsKKwkJCXR4X2luZm9fcHJpdi0+dXBkYXRlX3JjID0gdHJ1ZTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJaW50IHFudW07CisKKwlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCWlmICh0eHEtPnN0b3BwZWQgJiYKKwkgICAgc2MtPnR4LnR4cVt0eHEtPmF4cV9xbnVtXS5heHFfZGVwdGggPD0gKEFUSF9UWEJVRiAtIDIwKSkgeworCQlxbnVtID0gYXRoX2dldF9tYWM4MDIxMV9xbnVtKHR4cS0+YXhxX3FudW0sIHNjKTsKKwkJaWYgKHFudW0gIT0gLTEpIHsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHNjLT5odywgcW51bSk7CisJCQl0eHEtPnN0b3BwZWQgPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X3Byb2Nlc3NxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfYnVmICpiZiwgKmxhc3RiZiwgKmJmX2hlbGQgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOworCWludCB0eG9rLCBuYmFkID0gMDsKKwlpbnQgc3RhdHVzOworCisJRFBSSU5URihzYywgQVRIX0RCR19RVUVVRSwgInR4IHF1ZXVlICVkICgleCksIGxpbmsgJXBcbiIsCisJCXR4cS0+YXhxX3FudW0sIGF0aDlrX2h3X2dldHR4YnVmKHNjLT5zY19haCwgdHhxLT5heHFfcW51bSksCisJCXR4cS0+YXhxX2xpbmspOworCisJZm9yICg7OykgeworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmdHhxLT5heHFfcSkpIHsKKwkJCXR4cS0+YXhxX2xpbmsgPSBOVUxMOworCQkJdHhxLT5heHFfbGlua2J1ZiA9IE5VTEw7CisJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnR4cS0+YXhxX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgYSBCSCBnZXRzIHNjaGVkdWxlZAorCQkgKiBhZnRlciBzdyB3cml0ZXMgVHhFIGFuZCBiZWZvcmUgaHcgcmUtbG9hZCB0aGUgbGFzdAorCQkgKiBkZXNjcmlwdG9yIHRvIGdldCB0aGUgbmV3bHkgY2hhaW5lZCBvbmUuCisJCSAqIFNvZnR3YXJlIG11c3Qga2VlcCB0aGUgbGFzdCBET05FIGRlc2NyaXB0b3IgYXMgYQorCQkgKiBob2xkaW5nIGRlc2NyaXB0b3IgLSBzb2Z0d2FyZSBkb2VzIHNvIGJ5IG1hcmtpbmcKKwkJICogaXQgd2l0aCB0aGUgU1RBTEUgZmxhZy4KKwkJICovCisJCWJmX2hlbGQgPSBOVUxMOworCQlpZiAoYmYtPmJmX3N0YXR1cyAmIEFUSF9CVUZTVEFUVVNfU1RBTEUpIHsKKwkJCWJmX2hlbGQgPSBiZjsKKwkJCWlmIChsaXN0X2lzX2xhc3QoJmJmX2hlbGQtPmxpc3QsICZ0eHEtPmF4cV9xKSkgeworCQkJCXR4cS0+YXhxX2xpbmsgPSBOVUxMOworCQkJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOworCQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQkJCS8qCisJCQkJICogVGhlIGhvbGRpbmcgZGVzY3JpcHRvciBpcyB0aGUgbGFzdAorCQkJCSAqIGRlc2NyaXB0b3IgaW4gcXVldWUuIEl0J3Mgc2FmZSB0byByZW1vdmUKKwkJCQkgKiB0aGUgbGFzdCBob2xkaW5nIGRlc2NyaXB0b3IgaW4gQkggY29udGV4dC4KKwkJCQkgKi8KKwkJCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQkJCWxpc3RfbW92ZV90YWlsKCZiZl9oZWxkLT5saXN0LCAmc2MtPnR4LnR4YnVmKTsKKwkJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJYmYgPSBsaXN0X2VudHJ5KGJmX2hlbGQtPmxpc3QubmV4dCwKKwkJCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwkJCX0KKwkJfQorCisJCWxhc3RiZiA9IGJmLT5iZl9sYXN0YmY7CisJCWRzID0gbGFzdGJmLT5iZl9kZXNjOworCisJCXN0YXR1cyA9IGF0aDlrX2h3X3R4cHJvY2Rlc2MoYWgsIGRzKTsKKwkJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChiZi0+YmZfZGVzYyA9PSB0eHEtPmF4cV9sYXN0ZHNXaXRoQ1RTKQorCQkJdHhxLT5heHFfbGFzdGRzV2l0aENUUyA9IE5VTEw7CisJCWlmIChkcyA9PSB0eHEtPmF4cV9nYXRpbmdkcykKKwkJCXR4cS0+YXhxX2dhdGluZ2RzID0gTlVMTDsKKworCQkvKgorCQkgKiBSZW1vdmUgYXRoX2J1ZidzIG9mIHRoZSBzYW1lIHRyYW5zbWl0IHVuaXQgZnJvbSB0eHEsCisJCSAqIGhvd2V2ZXIgbGVhdmUgdGhlIGxhc3QgZGVzY3JpcHRvciBiYWNrIGFzIHRoZSBob2xkaW5nCisJCSAqIGRlc2NyaXB0b3IgZm9yIGh3LgorCQkgKi8KKwkJbGFzdGJmLT5iZl9zdGF0dXMgfD0gQVRIX0JVRlNUQVRVU19TVEFMRTsKKwkJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOworCQlpZiAoIWxpc3RfaXNfc2luZ3VsYXIoJmxhc3RiZi0+bGlzdCkpCisJCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKKwkJCQkmdHhxLT5heHFfcSwgbGFzdGJmLT5saXN0LnByZXYpOworCisJCXR4cS0+YXhxX2RlcHRoLS07CisJCWlmIChiZl9pc2FnZ3IoYmYpKQorCQkJdHhxLT5heHFfYWdncl9kZXB0aC0tOworCisJCXR4b2sgPSAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQlpZiAoYmZfaGVsZCkgeworCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZiZl9oZWxkLT5saXN0LCAmc2MtPnR4LnR4YnVmKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJfQorCisJCWlmICghYmZfaXNhbXBkdShiZikpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGZyYW1lIGlzIHNlbnQgb3V0IGFzIGEgc2luZ2xlIGZyYW1lLgorCQkJICogVXNlIGhhcmR3YXJlIHJldHJ5IHN0YXR1cyBmb3IgdGhpcyBmcmFtZS4KKwkJCSAqLworCQkJYmYtPmJmX3JldHJpZXMgPSBkcy0+ZHNfdHhzdGF0LnRzX2xvbmdyZXRyeTsKKwkJCWlmIChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX1hSRVRSWSkKKwkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOworCQkJbmJhZCA9IDA7CisJCX0gZWxzZSB7CisJCQluYmFkID0gYXRoX3R4X251bV9iYWRmcm1zKHNjLCBiZiwgdHhvayk7CisJCX0KKworCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCk7CisKKwkJaWYgKGJmX2lzYW1wZHUoYmYpKQorCQkJYXRoX3R4X2NvbXBsZXRlX2FnZ3Ioc2MsIHR4cSwgYmYsICZiZl9oZWFkLCB0eG9rKTsKKwkJZWxzZQorCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCB0eG9rLCAwKTsKKworCQlhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzYywgdHhxKTsKKworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKQorCQkJYXRoX3R4cV9zY2hlZHVsZShzYywgdHhxKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCX0KK30KKworCit2b2lkIGF0aF90eF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXUzMiBxY3VtYXNrID0gKCgxIDw8IEFUSDlLX05VTV9UWF9RVUVVRVMpIC0gMSk7CisKKwlhdGg5a19od19nZXR0eGludHJ0eHFzKHNjLT5zY19haCwgJnFjdW1hc2spOworCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkgJiYgKHFjdW1hc2sgJiAoMSA8PCBpKSkpCisJCQlhdGhfdHhfcHJvY2Vzc3Eoc2MsICZzYy0+dHgudHhxW2ldKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKi8KKy8qIEluaXQsIENsZWFudXAgKi8KKy8qKioqKioqKioqKioqKioqKi8KKworaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpCit7CisJaW50IGVycm9yID0gMDsKKworCWRvIHsKKwkJc3Bpbl9sb2NrX2luaXQoJnNjLT50eC50eGJ1ZmxvY2spOworCisJCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+dHgudHhkbWEsICZzYy0+dHgudHhidWYsCisJCQkidHgiLCBuYnVmcywgMSk7CisJCWlmIChlcnJvciAhPSAwKSB7CisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzY3JpcHRvcnM6ICVkXG4iLAorCQkJCWVycm9yKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyb3IgPSBhdGhfZGVzY2RtYV9zZXR1cChzYywgJnNjLT5iZWFjb24uYmRtYSwgJnNjLT5iZWFjb24uYmJ1ZiwKKwkJCQkJICAiYmVhY29uIiwgQVRIX0JDQlVGLCAxKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSBiZWFjb24gZGVzY3JpcHRvcnM6ICVkXG4iLAorCQkJCWVycm9yKTsKKwkJCWJyZWFrOworCQl9CisKKwl9IHdoaWxlICgwKTsKKworCWlmIChlcnJvciAhPSAwKQorCQlhdGhfdHhfY2xlYW51cChzYyk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAoc2MtPmJlYWNvbi5iZG1hLmRkX2Rlc2NfbGVuICE9IDApCisJCWF0aF9kZXNjZG1hX2NsZWFudXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYpOworCisJaWYgKHNjLT50eC50eGRtYS5kZF9kZXNjX2xlbiAhPSAwKQorCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCit7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjOworCWludCB0aWRubywgYWNubzsKKworCWZvciAodGlkbm8gPSAwLCB0aWQgPSAmYW4tPnRpZFt0aWRub107CisJICAgICB0aWRubyA8IFdNRV9OVU1fVElEOworCSAgICAgdGlkbm8rKywgdGlkKyspIHsKKwkJdGlkLT5hbiAgICAgICAgPSBhbjsKKwkJdGlkLT50aWRubyAgICAgPSB0aWRubzsKKwkJdGlkLT5zZXFfc3RhcnQgPSB0aWQtPnNlcV9uZXh0ID0gMDsKKwkJdGlkLT5iYXdfc2l6ZSAgPSBXTUVfTUFYX0JBOworCQl0aWQtPmJhd19oZWFkICA9IHRpZC0+YmF3X3RhaWwgPSAwOworCQl0aWQtPnNjaGVkICAgICA9IGZhbHNlOworCQl0aWQtPnBhdXNlZCAgICA9IGZhbHNlOworCQl0aWQtPnN0YXRlICY9IH5BR0dSX0NMRUFOVVA7CisJCUlOSVRfTElTVF9IRUFEKCZ0aWQtPmJ1Zl9xKTsKKwkJYWNubyA9IFRJRF9UT19XTUVfQUModGlkbm8pOworCQl0aWQtPmFjID0gJmFuLT5hY1thY25vXTsKKwkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKKwkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwl9CisKKwlmb3IgKGFjbm8gPSAwLCBhYyA9ICZhbi0+YWNbYWNub107CisJICAgICBhY25vIDwgV01FX05VTV9BQzsgYWNubysrLCBhYysrKSB7CisJCWFjLT5zY2hlZCAgICA9IGZhbHNlOworCQlJTklUX0xJU1RfSEVBRCgmYWMtPnRpZF9xKTsKKworCQlzd2l0Y2ggKGFjbm8pIHsKKwkJY2FzZSBXTUVfQUNfQkU6CisJCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKKwkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfQkUpOworCQkJYnJlYWs7CisJCWNhc2UgV01FX0FDX0JLOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JLKTsKKwkJCWJyZWFrOworCQljYXNlIFdNRV9BQ19WSToKKwkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAorCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19WSSk7CisJCQlicmVhazsKKwkJY2FzZSBXTUVfQUNfVk86CisJCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKKwkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVk8pOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgYXRoX3R4X25vZGVfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWMsICphY190bXA7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsICp0aWRfdG1wOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgeworCQkJdHhxID0gJnNjLT50eC50eHFbaV07CisKKwkJCXNwaW5fbG9jaygmdHhxLT5heHFfbG9jayk7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhYywKKwkJCQkJYWNfdG1wLCAmdHhxLT5heHFfYWNxLCBsaXN0KSB7CisJCQkJdGlkID0gbGlzdF9maXJzdF9lbnRyeSgmYWMtPnRpZF9xLAorCQkJCQkJc3RydWN0IGF0aF9hdHhfdGlkLCBsaXN0KTsKKwkJCQlpZiAodGlkICYmIHRpZC0+YW4gIT0gYW4pCisJCQkJCWNvbnRpbnVlOworCQkJCWxpc3RfZGVsKCZhYy0+bGlzdCk7CisJCQkJYWMtPnNjaGVkID0gZmFsc2U7CisKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGlkLAorCQkJCQkJdGlkX3RtcCwgJmFjLT50aWRfcSwgbGlzdCkgeworCQkJCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKKwkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOworCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7CisJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKKwkJCQl9CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDQyMjM2NzIuLjg1N2Q4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtMiw4ICsyLDggQEAKIAogICAgICBEcml2ZXIgZm9yIEF0bWVsIGF0NzZjNTAyIGF0NzZjNTA0IGFuZCBhdDc2YzUwNiB3aXJlbGVzcyBjYXJkcy4KIAotICAgICAgICBDb3B5cmlnaHQgMjAwMC0yMDAxIEFUTUVMIENvcnBvcmF0aW9uLgotICAgICAgICBDb3B5cmlnaHQgMjAwMy0yMDA0IFNpbW9uIEtlbGxleS4KKwlDb3B5cmlnaHQgMjAwMC0yMDAxIEFUTUVMIENvcnBvcmF0aW9uLgorCUNvcHlyaWdodCAyMDAzLTIwMDQgU2ltb24gS2VsbGV5LgogCiAgICAgVGhpcyBjb2RlIHdhcyBkZXZlbG9wZWQgZnJvbSB2ZXJzaW9uIDIuMS4xIG9mIHRoZSBBdG1lbCBkcml2ZXJzLAogICAgIHJlbGVhc2VkIGJ5IEF0bWVsIGNvcnAuIHVuZGVyIHRoZSBHUEwgaW4gRGVjZW1iZXIgMjAwMi4gSXQgYWxzbwpAQCAtODksMTUgKzg5LDE1IEBACiAJY29uc3QgY2hhciAqZndfZmlsZTsKIAljb25zdCBjaGFyICpmd19maWxlX2V4dDsKIH0gZndfdGFibGVbXSA9IHsKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyLCAgICAgICJhdG1lbF9hdDc2YzUwMiIsICAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyRCwgICAgICJhdG1lbF9hdDc2YzUwMmQiLCAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyRSwgICAgICJhdG1lbF9hdDc2YzUwMmUiLCAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sICJhdG1lbF9hdDc2YzUwMl8zY29tIiwgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA0LCAgICAgICJhdG1lbF9hdDc2YzUwNCIsICAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsICJhdG1lbF9hdDc2YzUwNF8yOTU4IiwgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA0QV8yOTU4LCJhdG1lbF9hdDc2YzUwNGFfMjk1OCIsImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA2LCAgICAgICJhdG1lbF9hdDc2YzUwNiIsICAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfTk9ORSwgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEwgfQorCXsgQVRNRUxfRldfVFlQRV81MDIsCQkiYXRtZWxfYXQ3NmM1MDIiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDJELAkJImF0bWVsX2F0NzZjNTAyZCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwMkUsCQkiYXRtZWxfYXQ3NmM1MDJlIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sCSJhdG1lbF9hdDc2YzUwMl8zY29tIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA0LAkJImF0bWVsX2F0NzZjNTA0IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsCSJhdG1lbF9hdDc2YzUwNF8yOTU4IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA0QV8yOTU4LAkiYXRtZWxfYXQ3NmM1MDRhXzI5NTgiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDYsCQkiYXRtZWxfYXQ3NmM1MDYiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV9OT05FLAkJTlVMTCwJCQlOVUxMIH0KIH07CiAKICNkZWZpbmUgTUFYX1NTSURfTEVOR1RIIDMyCkBAIC0xMDYsNjAgKzEwNiw2MCBAQAogI2RlZmluZSBNQVhfQlNTX0VOVFJJRVMJNjQKIAogLyogcmVnaXN0ZXJzICovCi0jZGVmaW5lIEdDUiAgMHgwMCAgICAvLyAgICAgIChTSVIwKSAgR2VuZXJhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0jZGVmaW5lIEJTUiAgMHgwMiAgICAvLyAgICAgIChTSVIxKSAgQmFuayBTd2l0Y2hpbmcgU2VsZWN0IFJlZ2lzdGVyCisjZGVmaW5lIEdDUiAgMHgwMCAgICAvKiAoU0lSMCkgIEdlbmVyYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBCU1IgIDB4MDIgICAgLyogKFNJUjEpICBCYW5rIFN3aXRjaGluZyBTZWxlY3QgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQVIgICAweDA0CiAjZGVmaW5lIERSICAgMHgwOAotI2RlZmluZSBNUjEgIDB4MTIgICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgMQotI2RlZmluZSBNUjIgIDB4MTQgICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgMgotI2RlZmluZSBNUjMgIDB4MTYgICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgMwotI2RlZmluZSBNUjQgIDB4MTggICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgNAorI2RlZmluZSBNUjEgIDB4MTIgICAgLyogTWlycm9yIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTVIyICAweDE0ICAgIC8qIE1pcnJvciBSZWdpc3RlciAyICovCisjZGVmaW5lIE1SMyAgMHgxNiAgICAvKiBNaXJyb3IgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBNUjQgIDB4MTggICAgLyogTWlycm9yIFJlZ2lzdGVyIDQgKi8KIAogI2RlZmluZSBHUFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGMKICNkZWZpbmUgR1BSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBlCiAjZGVmaW5lIEdQUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMAotLy8KLS8vIENvbnN0YW50cyBmb3IgdGhlIEdDUiByZWdpc3Rlci4KLS8vCi0jZGVmaW5lIEdDUl9SRU1BUCAgICAgMHgwNDAwICAgICAgICAgIC8vIFJlbWFwIGludGVybmFsIFNSQU0gdG8gMAotI2RlZmluZSBHQ1JfU1dSRVMgICAgIDB4MDA4MCAgICAgICAgICAvLyBCSVUgcmVzZXQgKEFSTSBhbmQgUEFJIGFyZSBOT1QgcmVzZXQpCi0jZGVmaW5lIEdDUl9DT1JFUyAgICAgMHgwMDYwICAgICAgICAgIC8vIENvcmUgUmVzZXQgKEFSTSBhbmQgUEFJIGFyZSByZXNldCkKLSNkZWZpbmUgR0NSX0VOSU5UICAgICAweDAwMDIgICAgICAgICAgLy8gRW5hYmxlIEludGVycnVwdHMKLSNkZWZpbmUgR0NSX0FDS0lOVCAgICAweDAwMDggICAgICAgICAgLy8gQWNrbm93bGVkZ2UgSW50ZXJydXB0cworLyoKKyAqIENvbnN0YW50cyBmb3IgdGhlIEdDUiByZWdpc3Rlci4KKyAqLworI2RlZmluZSBHQ1JfUkVNQVAgICAgIDB4MDQwMCAgICAgICAgICAvKiBSZW1hcCBpbnRlcm5hbCBTUkFNIHRvIDAgKi8KKyNkZWZpbmUgR0NSX1NXUkVTICAgICAweDAwODAgICAgICAgICAgLyogQklVIHJlc2V0IChBUk0gYW5kIFBBSSBhcmUgTk9UIHJlc2V0KSAqLworI2RlZmluZSBHQ1JfQ09SRVMgICAgIDB4MDA2MCAgICAgICAgICAvKiBDb3JlIFJlc2V0IChBUk0gYW5kIFBBSSBhcmUgcmVzZXQpICovCisjZGVmaW5lIEdDUl9FTklOVCAgICAgMHgwMDAyICAgICAgICAgIC8qIEVuYWJsZSBJbnRlcnJ1cHRzICovCisjZGVmaW5lIEdDUl9BQ0tJTlQgICAgMHgwMDA4ICAgICAgICAgIC8qIEFja25vd2xlZGdlIEludGVycnVwdHMgKi8KIAotI2RlZmluZSBCU1NfU1JBTSAgICAgIDB4MDIwMCAgICAgICAgICAvLyBBTUJBIG1vZHVsZSBzZWxlY3Rpb24gLS0+IFNSQU0KLSNkZWZpbmUgQlNTX0lSQU0gICAgICAweDAxMDAgICAgICAgICAgLy8gQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBJUkFNCi0vLwotLy8gQ29uc3RhbnRzIGZvciB0aGUgTVIgcmVnaXN0ZXJzLgotLy8KLSNkZWZpbmUgTUFDX0lOSVRfQ09NUExFVEUgICAgICAgMHgwMDAxICAgICAgICAvLyBNQUMgaW5pdCBoYXMgYmVlbiBjb21wbGV0ZWQKLSNkZWZpbmUgTUFDX0JPT1RfQ09NUExFVEUgICAgICAgMHgwMDEwICAgICAgICAvLyBNQUMgYm9vdCBoYXMgYmVlbiBjb21wbGV0ZWQKLSNkZWZpbmUgTUFDX0lOSVRfT0sgICAgICAgICAgICAgMHgwMDAyICAgICAgICAvLyBNQUMgYm9vdCBoYXMgYmVlbiBjb21wbGV0ZWQKKyNkZWZpbmUgQlNTX1NSQU0gICAgICAweDAyMDAgICAgICAgICAgLyogQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBTUkFNICovCisjZGVmaW5lIEJTU19JUkFNICAgICAgMHgwMTAwICAgICAgICAgIC8qIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gSVJBTSAqLworLyoKKyAqQ29uc3RhbnRzIGZvciB0aGUgTVIgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE1BQ19JTklUX0NPTVBMRVRFICAgICAgIDB4MDAwMSAgICAgICAgLyogTUFDIGluaXQgaGFzIGJlZW4gY29tcGxldGVkICovCisjZGVmaW5lIE1BQ19CT09UX0NPTVBMRVRFICAgICAgIDB4MDAxMCAgICAgICAgLyogTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkICovCisjZGVmaW5lIE1BQ19JTklUX09LICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgLyogTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkICovCiAKICNkZWZpbmUgTUlCX01BWF9EQVRBX0JZVEVTICAgIDIxMgogI2RlZmluZSBNSUJfSEVBREVSX1NJWkUgICAgICAgNCAgICAvKiBmaXJzdCBmb3VyIGZpZWxkcyAqLwogCiBzdHJ1Y3QgZ2V0X3NldF9taWIgewotICAgICAgICB1OCB0eXBlOwotICAgICAgICB1OCBzaXplOwotICAgICAgICB1OCBpbmRleDsKLSAgICAgICAgdTggcmVzZXJ2ZWQ7Ci0gICAgICAgIHU4IGRhdGFbTUlCX01BWF9EQVRBX0JZVEVTXTsKKwl1OCB0eXBlOworCXU4IHNpemU7CisJdTggaW5kZXg7CisJdTggcmVzZXJ2ZWQ7CisJdTggZGF0YVtNSUJfTUFYX0RBVEFfQllURVNdOwogfTsKIAogc3RydWN0IHJ4X2Rlc2MgewotICAgICAgICB1MzIgICAgICAgICAgTmV4dDsKLSAgICAgICAgdTE2ICAgICAgICAgIE1zZHVQb3M7Ci0gICAgICAgIHUxNiAgICAgICAgICBNc2R1U2l6ZTsKKwl1MzIgICAgICAgICAgTmV4dDsKKwl1MTYgICAgICAgICAgTXNkdVBvczsKKwl1MTYgICAgICAgICAgTXNkdVNpemU7CiAKLSAgICAgICAgdTggICAgICAgICAgIFN0YXRlOwotICAgICAgICB1OCAgICAgICAgICAgU3RhdHVzOwotICAgICAgICB1OCAgICAgICAgICAgUmF0ZTsKLSAgICAgICAgdTggICAgICAgICAgIFJzc2k7Ci0gICAgICAgIHU4ICAgICAgICAgICBMaW5rUXVhbGl0eTsKLSAgICAgICAgdTggICAgICAgICAgIFByZWFtYmxlVHlwZTsKLSAgICAgICAgdTE2ICAgICAgICAgIER1cmF0aW9uOwotICAgICAgICB1MzIgICAgICAgICAgUnhUaW1lOworCXU4ICAgICAgICAgICBTdGF0ZTsKKwl1OCAgICAgICAgICAgU3RhdHVzOworCXU4ICAgICAgICAgICBSYXRlOworCXU4ICAgICAgICAgICBSc3NpOworCXU4ICAgICAgICAgICBMaW5rUXVhbGl0eTsKKwl1OCAgICAgICAgICAgUHJlYW1ibGVUeXBlOworCXUxNiAgICAgICAgICBEdXJhdGlvbjsKKwl1MzIgICAgICAgICAgUnhUaW1lOwogfTsKIAogI2RlZmluZSBSWF9ERVNDX0ZMQUdfVkFMSUQgICAgICAgMHg4MApAQCAtMTkyLDcgKzE5Miw3IEBACiAJdTggICAgICAgIEtleUluZGV4OwogCXU4ICAgICAgICBDaGlwZXJUeXBlOwogCXU4ICAgICAgICBDaGlwcmVMZW5ndGg7Ci0gICAgICAgIHU4ICAgICAgICBSZXNlcnZlZDE7CisJdTggICAgICAgIFJlc2VydmVkMTsKIAogCXU4ICAgICAgICBSZXNlcnZlZDsKIAl1OCAgICAgICAgUGFja2V0VHlwZTsKQEAgLTIxMiw5ICsyMTIsOSBAQAogI2RlZmluZSBUWF9ERVNDX1BBQ0tFVF9UWVBFX09GRlNFVCAgIDE3CiAjZGVmaW5lIFRYX0RFU0NfSE9TVF9MRU5HVEhfT0ZGU0VUICAgMTgKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gSG9zdC1NQUMgaW50ZXJmYWNlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKgorICogSG9zdC1NQUMgaW50ZXJmYWNlCisgKi8KIAogI2RlZmluZSBUWF9TVEFUVVNfU1VDQ0VTUyAgICAgICAweDAwCiAKQEAgLTIyNiwxNCArMjI2LDE0IEBACiAjZGVmaW5lIFRYX1BBQ0tFVF9UWVBFX0RBVEEgICAgIDB4MDEKICNkZWZpbmUgVFhfUEFDS0VUX1RZUEVfTUdNVCAgICAgMHgwMgogCi0jZGVmaW5lIElTUl9FTVBUWSAgICAgICAgICAgICAgIDB4MDAgICAgICAgIC8vIG5vIGJpdHMgc2V0IGluIElTUgotI2RlZmluZSBJU1JfVHhDT01QTEVURSAgICAgICAgICAweDAxICAgICAgICAvLyBwYWNrZXQgdHJhbnNtaXR0ZWQKLSNkZWZpbmUgSVNSX1J4Q09NUExFVEUgICAgICAgICAgMHgwMiAgICAgICAgLy8gcGFja2V0IHJlY2VpdmVkCi0jZGVmaW5lIElTUl9SeEZSQU1FTE9TVCAgICAgICAgIDB4MDQgICAgICAgIC8vIFJ4IEZyYW1lIGxvc3QKLSNkZWZpbmUgSVNSX0ZBVEFMX0VSUk9SICAgICAgICAgMHgwOCAgICAgICAgLy8gRmF0YWwgZXJyb3IKLSNkZWZpbmUgSVNSX0NPTU1BTkRfQ09NUExFVEUgICAgMHgxMCAgICAgICAgLy8gY29tbWFuZCBjb21wbGV0ZWQKLSNkZWZpbmUgSVNSX09VVF9PRl9SQU5HRSAgICAgICAgMHgyMCAgICAgICAgLy8gY29tbWFuZCBjb21wbGV0ZWQKLSNkZWZpbmUgSVNSX0lCU1NfTUVSR0UgICAgICAgICAgMHg0MCAgICAgICAgLy8gKDQuMS4yLjMwKTogSUJTUyBtZXJnZQorI2RlZmluZSBJU1JfRU1QVFkgICAgICAgICAgICAgICAweDAwICAgICAgICAvKiBubyBiaXRzIHNldCBpbiBJU1IgKi8KKyNkZWZpbmUgSVNSX1R4Q09NUExFVEUgICAgICAgICAgMHgwMSAgICAgICAgLyogcGFja2V0IHRyYW5zbWl0dGVkICovCisjZGVmaW5lIElTUl9SeENPTVBMRVRFICAgICAgICAgIDB4MDIgICAgICAgIC8qIHBhY2tldCByZWNlaXZlZCAqLworI2RlZmluZSBJU1JfUnhGUkFNRUxPU1QgICAgICAgICAweDA0ICAgICAgICAvKiBSeCBGcmFtZSBsb3N0ICovCisjZGVmaW5lIElTUl9GQVRBTF9FUlJPUiAgICAgICAgIDB4MDggICAgICAgIC8qIEZhdGFsIGVycm9yICovCisjZGVmaW5lIElTUl9DT01NQU5EX0NPTVBMRVRFICAgIDB4MTAgICAgICAgIC8qIGNvbW1hbmQgY29tcGxldGVkICovCisjZGVmaW5lIElTUl9PVVRfT0ZfUkFOR0UgICAgICAgIDB4MjAgICAgICAgIC8qIGNvbW1hbmQgY29tcGxldGVkICovCisjZGVmaW5lIElTUl9JQlNTX01FUkdFICAgICAgICAgIDB4NDAgICAgICAgIC8qICg0LjEuMi4zMCk6IElCU1MgbWVyZ2UgKi8KICNkZWZpbmUgSVNSX0dFTkVSSUNfSVJRICAgICAgICAgMHg4MAogCiAjZGVmaW5lIExvY2FsX01pYl9UeXBlICAgICAgICAgIDB4MDEKQEAgLTMxMSwyMiArMzExLDIyIEBACiAjZGVmaW5lIE1BWF9FTkNSWVBUSU9OX0tFWVMgNAogI2RlZmluZSBNQVhfRU5DUllQVElPTl9LRVlfU0laRSA0MAogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIDgwMi4xMSByZWxhdGVkIGRlZmluaXRpb25zCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qCisgKiA4MDIuMTEgcmVsYXRlZCBkZWZpbml0aW9ucworICovCiAKLS8vCi0vLyBSZWd1bGF0b3J5IERvbWFpbnMKLS8vCisvKgorICogUmVndWxhdG9yeSBEb21haW5zCisgKi8KIAotI2RlZmluZSBSRUdfRE9NQUlOX0ZDQwkJMHgxMAkvL0NoYW5uZWxzCTEtMTEJVVNBCi0jZGVmaW5lIFJFR19ET01BSU5fRE9DCQkweDIwCS8vQ2hhbm5lbAkxLTExCUNhbmFkYQotI2RlZmluZSBSRUdfRE9NQUlOX0VUU0kJCTB4MzAJLy9DaGFubmVsCTEtMTMJRXVyb3BlIChleCBTcGFpbi9GcmFuY2UpCi0jZGVmaW5lIFJFR19ET01BSU5fU1BBSU4JMHgzMQkvL0NoYW5uZWwJMTAtMTEJU3BhaW4KLSNkZWZpbmUgUkVHX0RPTUFJTl9GUkFOQ0UJMHgzMgkvL0NoYW5uZWwJMTAtMTMJRnJhbmNlCi0jZGVmaW5lIFJFR19ET01BSU5fTUtLCQkweDQwCS8vQ2hhbm5lbAkxNAlKYXBhbgotI2RlZmluZSBSRUdfRE9NQUlOX01LSzEJCTB4NDEJLy9DaGFubmVsCTEtMTQJSmFwYW4oTUtLMSkKLSNkZWZpbmUgUkVHX0RPTUFJTl9JU1JBRUwJMHg1MAkvL0NoYW5uZWwJMy05CUlTUkFFTAorI2RlZmluZSBSRUdfRE9NQUlOX0ZDQwkJMHgxMAkvKiBDaGFubmVscwkxLTExCVVTQQkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0RPQwkJMHgyMAkvKiBDaGFubmVsCTEtMTEJQ2FuYWRhCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fRVRTSQkJMHgzMAkvKiBDaGFubmVsCTEtMTMJRXVyb3BlIChleCBTcGFpbi9GcmFuY2UpCSovCisjZGVmaW5lIFJFR19ET01BSU5fU1BBSU4JMHgzMQkvKiBDaGFubmVsCTEwLTExCVNwYWluCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fRlJBTkNFCTB4MzIJLyogQ2hhbm5lbAkxMC0xMwlGcmFuY2UJCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9NS0sJCTB4NDAJLyogQ2hhbm5lbAkxNAlKYXBhbgkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX01LSzEJCTB4NDEJLyogQ2hhbm5lbAkxLTE0CUphcGFuKE1LSzEpCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9JU1JBRUwJMHg1MAkvKiBDaGFubmVsCTMtOQlJU1JBRUwJCQkJKi8KIAogI2RlZmluZSBCU1NfVFlQRV9BRF9IT0MJCTEKICNkZWZpbmUgQlNTX1RZUEVfSU5GUkFTVFJVQ1RVUkUgMgpAQCAtMzY0LDEzICszNjQsMTMgQEAKICNkZWZpbmUgQ0lQSEVSX1NVSVRFX0NDWCAgICAgIDQKICNkZWZpbmUgQ0lQSEVSX1NVSVRFX1dFUF8xMjggIDUKIAotLy8KLS8vIElGQUNFIE1BQ1JPUyAmIGRlZmluaXRpb25zCi0vLwotLy8KKy8qCisgKiBJRkFDRSBNQUNST1MgJiBkZWZpbml0aW9ucworICovCiAKLS8vIEZ1bmNDdHJsIGZpZWxkOgotLy8KKy8qCisgKiBGdW5jQ3RybCBmaWVsZDoKKyAqLwogI2RlZmluZSBGVU5DX0NUUkxfVHhFTkFCTEUJCTB4MTAKICNkZWZpbmUgRlVOQ19DVFJMX1J4RU5BQkxFCQkweDIwCiAjZGVmaW5lIEZVTkNfQ1RSTF9JTklUX0NPTVBMRVRFCQkweDAxCkBAIC0zNzgsNDggKzM3OCw0OCBAQAogLyogQSBzdHViIGZpcm13YXJlIGltYWdlIHdoaWNoIHJlYWRzIHRoZSBNQUMgYWRkcmVzcyBmcm9tIE5WUkFNIG9uIHRoZSBjYXJkLgogICAgRm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbiBhbmQgc291cmNlIHNlZSB0aGUgZW5kIG9mIHRoaXMgZmlsZS4gKi8KIHN0YXRpYyB1OCBtYWNfcmVhZGVyW10gPSB7Ci0JMHgwNiwweDAwLDB4MDAsMHhlYSwweDA0LDB4MDAsMHgwMCwweGVhLDB4MDMsMHgwMCwweDAwLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHhlYSwKLQkweDAxLDB4MDAsMHgwMCwweGVhLDB4MDAsMHgwMCwweDAwLDB4ZWEsMHhmZiwweGZmLDB4ZmYsMHhlYSwweGZlLDB4ZmYsMHhmZiwweGVhLAotCTB4ZDMsMHgwMCwweGEwLDB4ZTMsMHgwMCwweGYwLDB4MjEsMHhlMSwweDBlLDB4MDQsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsCi0JMHg4MSwweDExLDB4YTAsMHhlMSwweDAwLDB4MTAsMHg4MSwweGUzLDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgxYywweDEwLDB4OTAsMHhlNSwKLQkweDEwLDB4MTAsMHhjMSwweGUzLDB4MWMsMHgxMCwweDgwLDB4ZTUsMHgwMSwweDEwLDB4YTAsMHhlMywweDA4LDB4MTAsMHg4MCwweGU1LAotCTB4MDIsMHgwMywweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywweGIwLDB4MTAsMHhjMCwweGUxLDB4YjQsMHgxMCwweGMwLDB4ZTEsCi0JMHhiOCwweDEwLDB4YzAsMHhlMSwweGJjLDB4MTAsMHhjMCwweGUxLDB4NTYsMHhkYywweGEwLDB4ZTMsMHgyMSwweDAwLDB4MDAsMHhlYiwKLQkweDBhLDB4MDAsMHhhMCwweGUzLDB4MWEsMHgwMCwweDAwLDB4ZWIsMHgxMCwweDAwLDB4MDAsMHhlYiwweDA3LDB4MDAsMHgwMCwweGViLAotCTB4MDIsMHgwMywweGEwLDB4ZTMsMHgwMiwweDE0LDB4YTAsMHhlMywweGI0LDB4MTAsMHhjMCwweGUxLDB4NGMsMHgxMCwweDlmLDB4ZTUsCi0JMHhiYywweDEwLDB4YzAsMHhlMSwweDEwLDB4MTAsMHhhMCwweGUzLDB4YjgsMHgxMCwweGMwLDB4ZTEsMHhmZSwweGZmLDB4ZmYsMHhlYSwKLQkweDAwLDB4NDAsMHgyZCwweGU5LDB4MDAsMHgyMCwweGEwLDB4ZTMsMHgwMiwweDNjLDB4YTAsMHhlMywweDAwLDB4MTAsMHhhMCwweGUzLAotCTB4MjgsMHgwMCwweDlmLDB4ZTUsMHgzNywweDAwLDB4MDAsMHhlYiwweDAwLDB4NDAsMHhiZCwweGU4LDB4MWUsMHhmZiwweDJmLDB4ZTEsCi0JMHgwMCwweDQwLDB4MmQsMHhlOSwweDEyLDB4MmUsMHhhMCwweGUzLDB4MDYsMHgzMCwweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywKLQkweDAyLDB4MDQsMHhhMCwweGUzLDB4MmYsMHgwMCwweDAwLDB4ZWIsMHgwMCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLAotCTB4MDAsMHgwMiwweDAwLDB4MDIsMHg4MCwweDAxLDB4OTAsMHhlMCwweDAxLDB4MDAsMHgwMCwweDBhLDB4MDEsMHgwMCwweDUwLDB4ZTIsCi0JMHhmYywweGZmLDB4ZmYsMHhlYSwweDFlLDB4ZmYsMHgyZiwweGUxLDB4ODAsMHgxMCwweGEwLDB4ZTMsMHhmMywweDA2LDB4YTAsMHhlMywKLQkweDAwLDB4MTAsMHg4MCwweGU1LDB4MDAsMHgxMCwweGEwLDB4ZTMsMHgwMCwweDEwLDB4ODAsMHhlNSwweDAxLDB4MTAsMHhhMCwweGUzLAotCTB4MDQsMHgxMCwweDgwLDB4ZTUsMHgwMCwweDEwLDB4ODAsMHhlNSwweDBlLDB4MzQsMHhhMCwweGUzLDB4MWMsMHgxMCwweDkzLDB4ZTUsCi0JMHgwMiwweDFhLDB4ODEsMHhlMywweDFjLDB4MTAsMHg4MywweGU1LDB4NTgsMHgxMSwweDlmLDB4ZTUsMHgzMCwweDEwLDB4ODAsMHhlNSwKLQkweDU0LDB4MTEsMHg5ZiwweGU1LDB4MzQsMHgxMCwweDgwLDB4ZTUsMHgzOCwweDEwLDB4ODAsMHhlNSwweDNjLDB4MTAsMHg4MCwweGU1LAotCTB4MTAsMHgxMCwweDkwLDB4ZTUsMHgwOCwweDAwLDB4OTAsMHhlNSwweDFlLDB4ZmYsMHgyZiwweGUxLDB4ZjMsMHgxNiwweGEwLDB4ZTMsCi0JMHgwOCwweDAwLDB4OTEsMHhlNSwweDA1LDB4MDAsMHhhMCwweGUzLDB4MGMsMHgwMCwweDgxLDB4ZTUsMHgxMCwweDAwLDB4OTEsMHhlNSwKLQkweDAyLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHhmZiwweDAwLDB4YTAsMHhlMywweDBjLDB4MDAsMHg4MSwweGU1LAotCTB4MTAsMHgwMCwweDkxLDB4ZTUsMHgwMiwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHgwMCwweDkxLDB4ZTUsCi0JMHgxMCwweDAwLDB4OTEsMHhlNSwweDAxLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDAwLDB4OTEsMHhlNSwKLQkweGZmLDB4MDAsMHgwMCwweGUyLDB4MWUsMHhmZiwweDJmLDB4ZTEsMHgzMCwweDQwLDB4MmQsMHhlOSwweDAwLDB4NTAsMHhhMCwweGUxLAotCTB4MDMsMHg0MCwweGEwLDB4ZTEsMHhhMiwweDAyLDB4YTAsMHhlMSwweDA4LDB4MDAsMHgwMCwweGUyLDB4MDMsMHgwMCwweDgwLDB4ZTIsCi0JMHhkOCwweDEwLDB4OWYsMHhlNSwweDAwLDB4MDAsMHhjMSwweGU1LDB4MDEsMHgyMCwweGMxLDB4ZTUsMHhlMiwweGZmLDB4ZmYsMHhlYiwKLQkweDAxLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MWEsMHgxNCwweDAwLDB4YTAsMHhlMywweGM0LDB4ZmYsMHhmZiwweGViLAotCTB4MDQsMHgyMCwweGEwLDB4ZTEsMHgwNSwweDEwLDB4YTAsMHhlMSwweDAyLDB4MDAsMHhhMCwweGUzLDB4MDEsMHgwMCwweDAwLDB4ZWIsCi0JMHgzMCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLDB4NzAsMHg0MCwweDJkLDB4ZTksMHhmMywweDQ2LDB4YTAsMHhlMywKLQkweDAwLDB4MzAsMHhhMCwweGUzLDB4MDAsMHgwMCwweDUwLDB4ZTMsMHgwOCwweDAwLDB4MDAsMHg5YSwweDhjLDB4NTAsMHg5ZiwweGU1LAotCTB4MDMsMHg2MCwweGQ1LDB4ZTcsMHgwYywweDYwLDB4ODQsMHhlNSwweDEwLDB4NjAsMHg5NCwweGU1LDB4MDIsMHgwMCwweDE2LDB4ZTMsCi0JMHhmYywweGZmLDB4ZmYsMHgwYSwweDAxLDB4MzAsMHg4MywweGUyLDB4MDAsMHgwMCwweDUzLDB4ZTEsMHhmNywweGZmLDB4ZmYsMHgzYSwKLQkweGZmLDB4MzAsMHhhMCwweGUzLDB4MGMsMHgzMCwweDg0LDB4ZTUsMHgwOCwweDAwLDB4OTQsMHhlNSwweDEwLDB4MDAsMHg5NCwweGU1LAotCTB4MDEsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgwYSwweDA4LDB4MDAsMHg5NCwweGU1LDB4MDAsMHgwMCwweGEwLDB4ZTMsCi0JMHgwMCwweDAwLDB4NTIsMHhlMywweDBiLDB4MDAsMHgwMCwweDlhLDB4MTAsMHg1MCwweDk0LDB4ZTUsMHgwMiwweDAwLDB4MTUsMHhlMywKLQkweGZjLDB4ZmYsMHhmZiwweDBhLDB4MGMsMHgzMCwweDg0LDB4ZTUsMHgxMCwweDUwLDB4OTQsMHhlNSwweDAxLDB4MDAsMHgxNSwweGUzLAotCTB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDUwLDB4OTQsMHhlNSwweDAxLDB4NTAsMHhjMSwweGU0LDB4MDEsMHgwMCwweDgwLDB4ZTIsCi0JMHgwMiwweDAwLDB4NTAsMHhlMSwweGYzLDB4ZmYsMHhmZiwweDNhLDB4YzgsMHgwMCwweGEwLDB4ZTMsMHg5OCwweGZmLDB4ZmYsMHhlYiwKLQkweDcwLDB4NDAsMHhiZCwweGU4LDB4MWUsMHhmZiwweDJmLDB4ZTEsMHgwMSwweDBjLDB4MDAsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAyLAotCTB4MDAsMHgwMSwweDAwLDB4MDIKKwkweDA2LCAweDAwLCAweDAwLCAweGVhLCAweDA0LCAweDAwLCAweDAwLCAweGVhLCAweDAzLCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDAwLCAweGVhLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCisJMHhkMywgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgwZSwgMHgwNCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKKwkweDgxLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgxLCAweGUzLCAweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDFjLCAweDEwLCAweDkwLCAweGU1LAorCTB4MTAsIDB4MTAsIDB4YzEsIDB4ZTMsIDB4MWMsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDgsIDB4MTAsIDB4ODAsIDB4ZTUsCisJMHgwMiwgMHgwMywgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHhiMCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhiNCwgMHgxMCwgMHhjMCwgMHhlMSwKKwkweGI4LCAweDEwLCAweGMwLCAweGUxLCAweGJjLCAweDEwLCAweGMwLCAweGUxLCAweDU2LCAweGRjLCAweGEwLCAweGUzLCAweDIxLCAweDAwLCAweDAwLCAweGViLAorCTB4MGEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHgwMiwgMHgwMywgMHhhMCwgMHhlMywgMHgwMiwgMHgxNCwgMHhhMCwgMHhlMywgMHhiNCwgMHgxMCwgMHhjMCwgMHhlMSwgMHg0YywgMHgxMCwgMHg5ZiwgMHhlNSwKKwkweGJjLCAweDEwLCAweGMwLCAweGUxLCAweDEwLCAweDEwLCAweGEwLCAweGUzLCAweGI4LCAweDEwLCAweGMwLCAweGUxLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAorCTB4MDAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4MDAsIDB4MjAsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4M2MsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHgyOCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgzNywgMHgwMCwgMHgwMCwgMHhlYiwgMHgwMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKKwkweDAwLCAweDQwLCAweDJkLCAweGU5LCAweDEyLCAweDJlLCAweGEwLCAweGUzLCAweDA2LCAweDMwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorCTB4MDIsIDB4MDQsIDB4YTAsIDB4ZTMsIDB4MmYsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMSwgMHg5MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHgwMCwgMHg1MCwgMHhlMiwKKwkweGZjLCAweGZmLCAweGZmLCAweGVhLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweDEwLCAweGEwLCAweGUzLCAweGYzLCAweDA2LCAweGEwLCAweGUzLAorCTB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHgwNCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwZSwgMHgzNCwgMHhhMCwgMHhlMywgMHgxYywgMHgxMCwgMHg5MywgMHhlNSwKKwkweDAyLCAweDFhLCAweDgxLCAweGUzLCAweDFjLCAweDEwLCAweDgzLCAweGU1LCAweDU4LCAweDExLCAweDlmLCAweGU1LCAweDMwLCAweDEwLCAweDgwLCAweGU1LAorCTB4NTQsIDB4MTEsIDB4OWYsIDB4ZTUsIDB4MzQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MzgsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4M2MsIDB4MTAsIDB4ODAsIDB4ZTUsCisJMHgxMCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwOCwgMHgwMCwgMHg5MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmMywgMHgxNiwgMHhhMCwgMHhlMywKKwkweDA4LCAweDAwLCAweDkxLCAweGU1LCAweDA1LCAweDAwLCAweGEwLCAweGUzLCAweDBjLCAweDAwLCAweDgxLCAweGU1LCAweDEwLCAweDAwLCAweDkxLCAweGU1LAorCTB4MDIsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4ZmYsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MGMsIDB4MDAsIDB4ODEsIDB4ZTUsCisJMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweDEwLCAweDAwLCAweDkxLCAweGU1LCAweDAxLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDA4LCAweDAwLCAweDkxLCAweGU1LAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4MDAsIDB4NTAsIDB4YTAsIDB4ZTEsCisJMHgwMywgMHg0MCwgMHhhMCwgMHhlMSwgMHhhMiwgMHgwMiwgMHhhMCwgMHhlMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMywgMHgwMCwgMHg4MCwgMHhlMiwKKwkweGQ4LCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweGMxLCAweGU1LCAweDAxLCAweDIwLCAweGMxLCAweGU1LCAweGUyLCAweGZmLCAweGZmLCAweGViLAorCTB4MDEsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MTQsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4YzQsIDB4ZmYsIDB4ZmYsIDB4ZWIsCisJMHgwNCwgMHgyMCwgMHhhMCwgMHhlMSwgMHgwNSwgMHgxMCwgMHhhMCwgMHhlMSwgMHgwMiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMSwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweDMwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDcwLCAweDQwLCAweDJkLCAweGU5LCAweGYzLCAweDQ2LCAweGEwLCAweGUzLAorCTB4MDAsIDB4MzAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OWEsIDB4OGMsIDB4NTAsIDB4OWYsIDB4ZTUsCisJMHgwMywgMHg2MCwgMHhkNSwgMHhlNywgMHgwYywgMHg2MCwgMHg4NCwgMHhlNSwgMHgxMCwgMHg2MCwgMHg5NCwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNiwgMHhlMywKKwkweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDAxLCAweDMwLCAweDgzLCAweGUyLCAweDAwLCAweDAwLCAweDUzLCAweGUxLCAweGY3LCAweGZmLCAweGZmLCAweDNhLAorCTB4ZmYsIDB4MzAsIDB4YTAsIDB4ZTMsIDB4MGMsIDB4MzAsIDB4ODQsIDB4ZTUsIDB4MDgsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MTAsIDB4MDAsIDB4OTQsIDB4ZTUsCisJMHgwMSwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHgwMCwgMHg5NCwgMHhlNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKKwkweDAwLCAweDAwLCAweDUyLCAweGUzLCAweDBiLCAweDAwLCAweDAwLCAweDlhLCAweDEwLCAweDUwLCAweDk0LCAweGU1LCAweDAyLCAweDAwLCAweDE1LCAweGUzLAorCTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MGMsIDB4MzAsIDB4ODQsIDB4ZTUsIDB4MTAsIDB4NTAsIDB4OTQsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MTUsIDB4ZTMsCisJMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHg1MCwgMHg5NCwgMHhlNSwgMHgwMSwgMHg1MCwgMHhjMSwgMHhlNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwKKwkweDAyLCAweDAwLCAweDUwLCAweGUxLCAweGYzLCAweGZmLCAweGZmLCAweDNhLCAweGM4LCAweDAwLCAweGEwLCAweGUzLCAweDk4LCAweGZmLCAweGZmLCAweGViLAorCTB4NzAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMgogfTsKIAogc3RydWN0IGF0bWVsX3ByaXZhdGUgewpAQCAtNDMzLDcgKzQzMyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2OwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKLQlzcGlubG9ja190IGlycWxvY2ssIHRpbWVybG9jazsJLy8gc3BpbmxvY2tzCisJc3BpbmxvY2tfdCBpcnFsb2NrLCB0aW1lcmxvY2s7CS8qIHNwaW5sb2NrcyAqLwogCWVudW0geyBCVVNfVFlQRV9QQ0NBUkQsIEJVU19UWVBFX1BDSSB9IGJ1c190eXBlOwogCWVudW0gewogCQlDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0gsCkBAIC01NDEsNyArNTQxLDcgQEAKIAl1OCByeF9idWZbTUFYX1dJUkVMRVNTX0JPRFldOwogfTsKIAotc3RhdGljIHU4IGF0bWVsX2Jhc2ljX3JhdGVzWzRdID0gezB4ODIsMHg4NCwweDBiLDB4MTZ9Oworc3RhdGljIHU4IGF0bWVsX2Jhc2ljX3JhdGVzWzRdID0gezB4ODIsIDB4ODQsIDB4MGIsIDB4MTZ9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAlpbnQgcmVnX2RvbWFpbjsKQEAgLTEyODMsMTcgKzEyODMsMTcgQEAKIAogc3RhdGljIGludCBhdG1lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewotICAgICAgICBpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAyMzEyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgZGV2LT5tdHUgPSBuZXdfbXR1OwotICAgICAgICByZXR1cm4gMDsKKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAyMzEyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF0bWVsX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAKLSAgICAgICAgbWVtY3B5IChkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkgKGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCXJldHVybiBhdG1lbF9vcGVuKGRldik7CiB9CiAKQEAgLTE0MjAsMTAgKzE0MjAsMTcgQEAKIAkJCQkgICAgIHByaXYtPmZpcm13YXJlX2lkKTsKIAogCQlzd2l0Y2ggKHByaXYtPmNhcmRfdHlwZSkgewotCQljYXNlIENBUkRfVFlQRV9QQVJBTExFTF9GTEFTSDogYyA9ICJQYXJhbGxlbCBmbGFzaCI7IGJyZWFrOwotCQljYXNlIENBUkRfVFlQRV9TUElfRkxBU0g6IGMgPSAiU1BJIGZsYXNoXG4iOyBicmVhazsKLQkJY2FzZSBDQVJEX1RZUEVfRUVQUk9NOiBjID0gIkVFUFJPTSI7IGJyZWFrOwotCQlkZWZhdWx0OiBjID0gIjx1bmtub3duPiI7CisJCWNhc2UgQ0FSRF9UWVBFX1BBUkFMTEVMX0ZMQVNIOgorCQkJYyA9ICJQYXJhbGxlbCBmbGFzaCI7CisJCQlicmVhazsKKwkJY2FzZSBDQVJEX1RZUEVfU1BJX0ZMQVNIOgorCQkJYyA9ICJTUEkgZmxhc2hcbiI7CisJCQlicmVhazsKKwkJY2FzZSBDQVJEX1RZUEVfRUVQUk9NOgorCQkJYyA9ICJFRVBST00iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljID0gIjx1bmtub3duPiI7CiAJCX0KIAogCQlyID0gIjx1bmtub3duPiI7CkBAIC0xNDM5LDE2ICsxNDQ2LDMzIEBACiAJCQkgICAgIHByaXYtPnVzZV93cGEgPyAiWWVzIiA6ICJObyIpOwogCX0KIAotCXN3aXRjaChwcml2LT5zdGF0aW9uX3N0YXRlKSB7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1NDQU5OSU5HOiBzID0gIlNjYW5uaW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HOiBzID0gIkpvaW5pbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfQVVUSEVOVElDQVRJTkc6IHMgPSAiQXV0aGVudGljYXRpbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfQVNTT0NJQVRJTkc6IHMgPSAiQXNzb2NpYXRpbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfUkVBRFk6IHMgPSAiUmVhZHkiOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfUkVBU1NPQ0lBVElORzogcyA9ICJSZWFzc29jaWF0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1I6IHMgPSAiTWFuYWdlbWVudCBlcnJvciI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9ET1dOOiBzID0gIkRvd24iOyBicmVhazsKLQlkZWZhdWx0OiBzID0gIjx1bmtub3duPiI7CisJc3dpdGNoIChwcml2LT5zdGF0aW9uX3N0YXRlKSB7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1NDQU5OSU5HOgorCQlzID0gIlNjYW5uaW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HOgorCQlzID0gIkpvaW5pbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfQVVUSEVOVElDQVRJTkc6CisJCXMgPSAiQXV0aGVudGljYXRpbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfQVNTT0NJQVRJTkc6CisJCXMgPSAiQXNzb2NpYXRpbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfUkVBRFk6CisJCXMgPSAiUmVhZHkiOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfUkVBU1NPQ0lBVElORzoKKwkJcyA9ICJSZWFzc29jaWF0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1I6CisJCXMgPSAiTWFuYWdlbWVudCBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9ET1dOOgorCQlzID0gIkRvd24iOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzID0gIjx1bmtub3duPiI7CiAJfQogCiAJcCArPSBzcHJpbnRmKHAsICJDdXJyZW50IHN0YXRlOlx0XHQlc1xuIiwgcyk7CkBAIC0xNDU4LDE2ICsxNDgyLDMwIEBACiBzdGF0aWMgaW50IGF0bWVsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCSAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0gICAgICAgIHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IGRhdGE7CiAJaW50IGxlbiA9IGF0bWVsX3Byb2Nfb3V0cHV0IChwYWdlLCBwcml2KTsKLSAgICAgICAgaWYgKGxlbiA8PSBvZmYrY291bnQpICplb2YgPSAxOwotICAgICAgICAqc3RhcnQgPSBwYWdlICsgb2ZmOwotICAgICAgICBsZW4gLT0gb2ZmOwotICAgICAgICBpZiAobGVuPmNvdW50KSBsZW4gPSBjb3VudDsKLSAgICAgICAgaWYgKGxlbjwwKSBsZW4gPSAwOwotICAgICAgICByZXR1cm4gbGVuOworCWlmIChsZW4gPD0gb2ZmK2NvdW50KQorCQkqZW9mID0gMTsKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCWxlbiAtPSBvZmY7CisJaWYgKGxlbiA+IGNvdW50KQorCQlsZW4gPSBjb3VudDsKKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gMDsKKwlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF0bWVsX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBhdG1lbF9vcGVuLAorCS5uZG9fc3RvcAkJPSBhdG1lbF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgCT0gYXRtZWxfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBhdG1lbF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zdGFydF94bWl0IAk9IHN0YXJ0X3R4LAorCS5uZG9fZG9faW9jdGwgCQk9IGF0bWVsX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0cnVjdCBuZXRfZGV2aWNlICppbml0X2F0bWVsX2NhcmQodW5zaWduZWQgc2hvcnQgaXJxLCB1bnNpZ25lZCBsb25nIHBvcnQsCiAJCQkJICAgY29uc3QgQXRtZWxGV1R5cGUgZndfdHlwZSwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2LApAQCAtMTQ3OSwxMSArMTUxNywxMSBAQAogCWludCByYzsKIAogCS8qIENyZWF0ZSB0aGUgbmV0d29yayBkZXZpY2Ugb2JqZWN0LiAqLwotICAgICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnByaXYpKTsKLSAgICAgICAgaWYgKCFkZXYpIHsKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnByaXYpKTsKKwlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsOiBDb3VsZG4ndCBhbGxvY19ldGhlcmRldlxuIik7CiAJCXJldHVybiBOVUxMOwotICAgICAgICB9CisJfQogCWlmIChkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRtZWw6IENvdWxkbid0IGdldCBuYW1lIVxuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlOwpAQCAtMTU1MiwxMyArMTU5MCw4IEBACiAJcHJpdi0+bWFuYWdlbWVudF90aW1lci5mdW5jdGlvbiA9IGF0bWVsX21hbmFnZW1lbnRfdGltZXI7CiAJcHJpdi0+bWFuYWdlbWVudF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAotCWRldi0+b3BlbiA9IGF0bWVsX29wZW47Ci0JZGV2LT5zdG9wID0gYXRtZWxfY2xvc2U7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gYXRtZWxfY2hhbmdlX210dTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGF0bWVsX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN0YXJ0X3R4OwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJmF0bWVsX2hhbmRsZXJfZGVmOwotCWRldi0+ZG9faW9jdGwgPSBhdG1lbF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXRtZWxfbmV0ZGV2X29wczsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmF0bWVsX2hhbmRsZXJfZGVmOwogCWRldi0+aXJxID0gaXJxOwogCWRldi0+YmFzZV9hZGRyID0gcG9ydDsKIApAQCAtMTU3Nyw3ICsxNjEwLDcgQEAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpCiAJCWdvdG8gZXJyX291dF9yZXM7CiAKLQlpZiAoIXByb2JlX2F0bWVsX2NhcmQoZGV2KSl7CisJaWYgKCFwcm9iZV9hdG1lbF9jYXJkKGRldikpIHsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CkBAIC0xNTk0LDcgKzE2MjcsNyBAQAogCXJldHVybiBkZXY7CiAKIGVycl9vdXRfcmVzOgotCXJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgMzIpOworCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCAzMik7CiBlcnJfb3V0X2lycToKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIGVycl9vdXRfZnJlZToKQEAgLTE2MzIsNyArMTY2NSw3IEBACiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQ2hlY2sgaWYgd2UgYXNrZWQgZm9yIGBhbnknICovCi0JaWYoZHdycS0+ZmxhZ3MgPT0gMCkgeworCWlmIChkd3JxLT5mbGFncyA9PSAwKSB7CiAJCXByaXYtPmNvbm5lY3RfdG9fYW55X0JTUyA9IDE7CiAJfSBlbHNlIHsKIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CkBAIC0xNzY4LDcgKzE4MDEsNyBAQAogCX0KIAlpZiAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7Ci0JaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKKwlpZiAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CiAKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwpAQCAtMTc5Nyw3ICsxODMwLDcgQEAKIAkvKiBDb3B5IHRoZSBrZXkgdG8gdGhlIHVzZXIgYnVmZmVyICovCiAJZHdycS0+bGVuZ3RoID0gcHJpdi0+d2VwX2tleV9sZW5baW5kZXhdOwogCWlmIChkd3JxLT5sZW5ndGggPiAxNikgewotCQlkd3JxLT5sZW5ndGg9MDsKKwkJZHdycS0+bGVuZ3RoID0gMDsKIAl9IGVsc2UgewogCQltZW1zZXQoZXh0cmEsIDAsIDE2KTsKIAkJbWVtY3B5KGV4dHJhLCBwcml2LT53ZXBfa2V5c1tpbmRleF0sIGR3cnEtPmxlbmd0aCk7CkBAIC0yMDEzLDExICsyMDQ2LDIwIEBACiAJCX0gZWxzZSB7CiAJCS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5IHZhbHVlICovCiAJCQlzd2l0Y2ggKHZ3cnEtPnZhbHVlKSB7Ci0JCQljYXNlICAxMDAwMDAwOiBwcml2LT50eF9yYXRlID0gMDsgYnJlYWs7Ci0JCQljYXNlICAyMDAwMDAwOiBwcml2LT50eF9yYXRlID0gMTsgYnJlYWs7Ci0JCQljYXNlICA1NTAwMDAwOiBwcml2LT50eF9yYXRlID0gMjsgYnJlYWs7Ci0JCQljYXNlIDExMDAwMDAwOiBwcml2LT50eF9yYXRlID0gMzsgYnJlYWs7Ci0JCQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKKwkJCWNhc2UgIDEwMDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlICAyMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAgNTUwMDAwMDoKKwkJCQlwcml2LT50eF9yYXRlID0gMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTEwMDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CiAJfQpAQCAtMjA2MiwxMSArMjEwNCwxOSBAQAogCQl2d3JxLT52YWx1ZSA9IDExMDAwMDAwOwogCX0gZWxzZSB7CiAJCXZ3cnEtPmZpeGVkID0gMTsKLQkJc3dpdGNoKHByaXYtPnR4X3JhdGUpIHsKLQkJY2FzZSAwOiB2d3JxLT52YWx1ZSA9ICAxMDAwMDAwOyBicmVhazsKLQkJY2FzZSAxOiB2d3JxLT52YWx1ZSA9ICAyMDAwMDAwOyBicmVhazsKLQkJY2FzZSAyOiB2d3JxLT52YWx1ZSA9ICA1NTAwMDAwOyBicmVhazsKLQkJY2FzZSAzOiB2d3JxLT52YWx1ZSA9IDExMDAwMDAwOyBicmVhazsKKwkJc3dpdGNoIChwcml2LT50eF9yYXRlKSB7CisJCWNhc2UgMDoKKwkJCXZ3cnEtPnZhbHVlID0gIDEwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdndycS0+dmFsdWUgPSAgMjAwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl2d3JxLT52YWx1ZSA9ICA1NTAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXZ3cnEtPnZhbHVlID0gMTEwMDAwMDA7CisJCQlicmVhazsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTIyMDQsOSArMjI1NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBsb25nIGZyZXF1ZW5jeV9saXN0W10gPSB7IDI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCi0JCQkJMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NCB9OwotCiBzdGF0aWMgaW50IGF0bWVsX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHN0cnVjdCBpd19mcmVxICpmd3JxLApAQCAtMjIxNiwxNiArMjI2MywxMiBAQAogCWludCByYyA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIElmIHNldHRpbmcgYnkgZnJlcXVlbmN5LCBjb252ZXJ0IHRvIGEgY2hhbm5lbCAqLwotCWlmICgoZndycS0+ZSA9PSAxKSAmJgotCSAgICAoZndycS0+bSA+PSAoaW50KSAyNDEyMDAwMDApICYmCi0JICAgIChmd3JxLT5tIDw9IChpbnQpIDI0ODcwMDAwMCkpIHsKKwlpZiAoZndycS0+ZSA9PSAxKSB7CiAJCWludCBmID0gZndycS0+bSAvIDEwMDAwMDsKLQkJaW50IGMgPSAwOwotCQl3aGlsZSAoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQotCQkJYysrOworCiAJCS8qIEhhY2sgdG8gZmFsbCB0aHJvdWdoLi4uICovCiAJCWZ3cnEtPmUgPSAwOwotCQlmd3JxLT5tID0gYyArIDE7CisJCWZ3cnEtPm0gPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZik7CiAJfQogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KIAlpZiAoKGZ3cnEtPm0gPiAxMDAwKSB8fCAoZndycS0+ZSA+IDApKQpAQCAtMjM4NCw4ICsyNDI3LDExIEBACiAJaWYgKHJhbmdlLT5udW1fY2hhbm5lbHMgIT0gMCkgewogCQlmb3IgKGsgPSAwLCBpID0gY2hhbm5lbF90YWJsZVtqXS5taW47IGkgPD0gY2hhbm5lbF90YWJsZVtqXS5tYXg7IGkrKykgewogCQkJcmFuZ2UtPmZyZXFba10uaSA9IGk7IC8qIExpc3QgaW5kZXggKi8KLQkJCXJhbmdlLT5mcmVxW2tdLm0gPSBmcmVxdWVuY3lfbGlzdFtpIC0gMV0gKiAxMDAwMDA7Ci0JCQlyYW5nZS0+ZnJlcVtrKytdLmUgPSAxOwkvKiBWYWx1ZXMgaW4gdGFibGUgaW4gTUh6IC0+ICogMTBeNSAqIDEwICovCisKKwkJCS8qIFZhbHVlcyBpbiBNSHogLT4gKiAxMF41ICogMTAgKi8KKwkJCXJhbmdlLT5mcmVxW2tdLm0gPSAoaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkpICoKKwkJCQkJICAgIDEwMDAwMCk7CisJCQlyYW5nZS0+ZnJlcVtrKytdLmUgPSAxOwogCQl9CiAJCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKIAl9CkBAIC0yNTgwLDggKzI2MjYsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGF0bWVsX2hhbmRsZXJfZGVmID0KLXsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgYXRtZWxfaGFuZGxlcl9kZWYgPSB7CiAJLm51bV9zdGFuZGFyZAk9IEFSUkFZX1NJWkUoYXRtZWxfaGFuZGxlciksCiAJLm51bV9wcml2YXRlCT0gQVJSQVlfU0laRShhdG1lbF9wcml2YXRlX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShhdG1lbF9wcml2YXRlX2FyZ3MpLApAQCAtMjgzOCw3ICsyODgzLDcgQEAKIAogCWlmIChwcml2LT53ZXBfaXNfb24gJiYgcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSAhPSAxKQogCQkvKiBubyBXRVAgZm9yIGF1dGhlbnRpY2F0aW9uIGZyYW1lcyB3aXRoIFRyU2VxTm8gMSAqLwotICAgICAgICAgICAgICAgIGhlYWRlci5mcmFtZV9jb250cm9sIHw9ICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCQloZWFkZXIuZnJhbWVfY29udHJvbCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAogCWF1dGguYWxnID0gY3B1X3RvX2xlMTYoc3lzdGVtKTsKIApAQCAtMjk3Myw3ICszMDE4LDcgQEAKIAkJaWYgKG1lbWNtcChic3MsIHByaXYtPkJTU2luZm9baV0uQlNTSUQsIDYpID09IDApCiAJCQlpbmRleCA9IGk7CiAKLSAgICAgICAgLyogSWYgd2UgcHJvY2VzcyBhIHByb2JlIGFuZCBhbiBlbnRyeSBmcm9tIHRoaXMgQlNTIGV4aXN0cworCS8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMKIAkgICB3ZSB3aWxsIHVwZGF0ZSB0aGUgQlNTIGVudHJ5IHdpdGggdGhlIGluZm8gZnJvbSB0aGlzIEJTUy4KIAkgICBJZiB3ZSBwcm9jZXNzIGEgYmVhY29uIHdlIHdpbGwgb25seSB1cGRhdGUgUlNTSSAqLwogCkBAIC0yOTk5LDcgKzMwNDQsNyBAQAogCWlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpCiAJCXByaXYtPkJTU2luZm9baW5kZXhdLkJTU3R5cGUgPSBJV19NT0RFX0FESE9DOwogCWVsc2UgaWYgKGNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID1JV19NT0RFX0lORlJBOworCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID0gSVdfTU9ERV9JTkZSQTsKIAogCXByaXYtPkJTU2luZm9baW5kZXhdLnByZWFtYmxlID0gY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSA/CiAJCVNIT1JUX1BSRUFNQkxFIDogTE9OR19QUkVBTUJMRTsKQEAgLTMwNDYsNyArMzA5MSw3IEBACiAJCX0KIAogCQlpZiAoc2hvdWxkX2Fzc29jaWF0ZSkgewotCQkJaWYocHJpdi0+c3RhdGlvbl93YXNfYXNzb2NpYXRlZCkgeworCQkJaWYgKHByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQpIHsKIAkJCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkcpOwogCQkJCXNlbmRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2LCAxKTsKIAkJCQlyZXR1cm47CkBAIC0zMDY3LDggKzMxMTIsOCBAQAogCQkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7CiAJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgV0xBTl9BVVRIX1NIQVJFRF9LRVksIE5VTEwsIDApOwogCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYgKCAgIHN5c3RlbSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWQotCQkgICAgICAgICAgICYmIHByaXYtPndlcF9pc19vbikgeworCQl9IGVsc2UgaWYgKHN5c3RlbSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWQorCQkJICAgJiYgcHJpdi0+d2VwX2lzX29uKSB7CiAJCQlwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtID0gMHgwMDE7CiAJCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMDsKIAkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBXTEFOX0FVVEhfT1BFTiwgTlVMTCwgMCk7CkBAIC0zMjU2LDExICszMzAxLDExIEBACiAJdTggbWF4X3Jzc2kgPSA0MjsgLyogNTAyLXJtZmQtcmV2ZCBtYXggYnkgZXhwZXJpbWVudCwgZGVmYXVsdCBmb3Igbm93ICovCiAKIAlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQkJY2FzZSBBVE1FTF9GV19UWVBFXzUwMkU6Ci0JCQltYXhfcnNzaSA9IDYzOyAvKiA1MDItcm1mZC1yZXZlIG1heCBieSBleHBlcmltZW50ICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCWNhc2UgQVRNRUxfRldfVFlQRV81MDJFOgorCQltYXhfcnNzaSA9IDYzOyAvKiA1MDItcm1mZC1yZXZlIG1heCBieSBleHBlcmltZW50ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXJzc2kgPSByc3NpICogMTAwIC8gbWF4X3Jzc2k7CkBAIC0zNDc3LDggKzM1MjIsNyBAQAogCSAgICBzdGF0dXMgPT0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUykKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChjb21tYW5kKXsKLQorCXN3aXRjaCAoY29tbWFuZCkgewogCWNhc2UgQ01EX1N0YXJ0OgogCQlpZiAoc3RhdHVzID09IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKIAkJCXByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQgPSBwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQ7CkBAIC0zNzEzLDcgKzM3NTcsNyBAQAogCiAJaWYgKHJjKSB7CiAJCWlmIChkZXYtPmRldl9hZGRyWzBdID09IDB4RkYpIHsKLQkJCXU4IGRlZmF1bHRfbWFjW10gPSB7MHgwMCwweDA0LCAweDI1LCAweDAwLCAweDAwLCAweDAwfTsKKwkJCXU4IGRlZmF1bHRfbWFjW10gPSB7MHgwMCwgMHgwNCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH07CiAJCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6ICoqKiBJbnZhbGlkIE1BQyBhZGRyZXNzLiBVUEdSQURFIEZpcm13YXJlICoqKipcbiIsIGRldi0+bmFtZSk7CiAJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGVmYXVsdF9tYWMsIDYpOwogCQl9CkBAIC0zODA3LDcgKzM4NTEsNyBAQAogCQkJCX0gZWxzZSB7CiAJCQkJCW1pYi5ncm91cF9rZXkgPSBpOwogCQkJCQlwcml2LT5ncm91cF9jaXBoZXJfc3VpdGUgPSBwcml2LT5wYWlyd2lzZV9jaXBoZXJfc3VpdGU7Ci0JCQkJICAgICAgICBtaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTFdID0gMTsKKwkJCQkJbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0xXSA9IDE7CiAJCQkJCW1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMl0gPSBwcml2LT5ncm91cF9jaXBoZXJfc3VpdGU7CiAJCQkJfQogCQkJfQpAQCAtMzkxNyw3ICszOTYxLDcgQEAKIAkJCWxlbiA9IGZ3X2VudHJ5LT5zaXplOwogCQl9CiAKLQkgICAgICAgIGlmIChsZW4gPD0gMHg2MDAwKSB7CisJCWlmIChsZW4gPD0gMHg2MDAwKSB7CiAJCQlhdG1lbF93cml0ZTE2KHByaXYtPmRldiwgQlNSLCBCU1NfSVJBTSk7CiAJCQlhdG1lbF9jb3B5X3RvX2NhcmQocHJpdi0+ZGV2LCAwLCBmdywgbGVuKTsKIAkJCWF0bWVsX3NldF9nY3IocHJpdi0+ZGV2LCBHQ1JfUkVNQVApOwpAQCAtMzk0Niw3ICszOTkwLDcgQEAKIAlwcml2LT51c2Vfd3BhID0gKHByaXYtPmhvc3RfaW5mby5tYWpvcl92ZXJzaW9uID09IDQpOwogCXByaXYtPnJhZGlvX29uX2Jyb2tlbiA9IChwcml2LT5ob3N0X2luZm8ubWFqb3JfdmVyc2lvbiA9PSA1KTsKIAotICAgICAgICAvKiB1bm1hc2sgYWxsIGlycSBzb3VyY2VzICovCisJLyogdW5tYXNrIGFsbCBpcnEgc291cmNlcyAqLwogCWF0bWVsX3dtZW04KHByaXYsIGF0bWVsX2hpKHByaXYsIElGQUNFX0lOVF9NQVNLX09GRlNFVCksIDB4ZmYpOwogCiAJLyogaW50IFR4IHN5c3RlbSBhbmQgZW5hYmxlIFR4ICovCkBAIC0zOTc5LDcgKzQwMjMsNyBAQAogCQkgICAgQ01EX1NUQVRVU19SRUpFQ1RFRF9SQURJT19PRkYpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW5ub3QgdHVybiB0aGUgcmFkaW8gb24uXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCkBAIC00MDAzLDggKzQwNDcsNyBAQAogCWVsc2UKIAkJYnVpbGRfd2VwX21pYihwcml2KTsKIAotCWlmIChvbGRfc3RhdGUgPT0gU1RBVElPTl9TVEFURV9SRUFEWSkKLQl7CisJaWYgKG9sZF9zdGF0ZSA9PSBTVEFUSU9OX1NUQVRFX1JFQURZKSB7CiAJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKQEAgLTQyODEsMjQgKzQzMjQsMjQgQEAKIAkuc2V0IE5WUkFNX0xFTkdUSCwgMHgwMjAwCiAJLnNldCBNQUNfQUREUkVTU19NSUIsIFNSQU1fQkFTRQogCS5zZXQgTUFDX0FERFJFU1NfTEVOR1RILCA2Ci0gICAgICAgIC5zZXQgTUFDX0JPT1RfRkxBRywgMHgxMAorCS5zZXQgTUFDX0JPT1RfRkxBRywgMHgxMAogCS5zZXQgTVIxLCAwCiAJLnNldCBNUjIsIDQKIAkuc2V0IE1SMywgOAogCS5zZXQgTVI0LCAweEMKIFJFU0VUX1ZFQ1RPUjoKLSAgICAgICAgYiBSRVNFVF9IQU5ETEVSCisJYiBSRVNFVF9IQU5ETEVSCiBVTkRFRl9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBTV0lfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogSUFCT1JUX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIERBQk9SVF9WRUNUT1I6CiBSRVNFUlZFRF9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBJUlFfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogRklRX1ZFQ1RPUjoKIAliIEhBTFQxCiBIQUxUMToJYiBIQUxUMQpAQCAtNDMxMCw3ICs0MzUzLDcgQEAKIAlsZHIJcjAsID1TUElfQ0dFTl9CQVNFCiAJbW92CXIxLCAjMAogCW1vdglyMSwgcjEsIGxzbCAjMwotCW9ycglyMSxyMSwgIzAKKwlvcnIJcjEsIHIxLCAjMAogCXN0cglyMSwgW3IwXQogCWxkcglyMSwgW3IwLCAjMjhdCiAJYmljCXIxLCByMSwgIzE2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCmluZGV4IDFmODFkMzYuLmFhYjcxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCkBAIC0xMTAsMTAgKzExMCwxOCBAQAogCWJvb2wgIkJyb2FkY29tIDQzeHggZGVidWdnaW5nIgogCWRlcGVuZHMgb24gQjQzCiAJLS0taGVscC0tLQotCSAgQnJvYWRjb20gNDN4eCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICBCcm9hZGNvbSA0M3h4IGRlYnVnZ2luZy4KIAotCSAgU2F5IFksIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHdoeSB0aGUgZHJpdmVyIGRvZXMgbm90Ci0JICB3b3JrIGZvciB5b3UuCisJICBUaGlzIGFkZHMgYWRkaXRpb25hbCBydW50aW1lIHNhbml0eSBjaGVja3MgYW5kIHN0YXRpc3RpY3MgdG8gdGhlIGRyaXZlci4KKwkgIFRoZXNlIGNoZWNrcyBhbmQgc3RhdGlzdGljcyBtaWdodCBtZSBleHBlbnNpdmUgYW5kIGh1cnQgcnVudGltZSBwZXJmb3JtYW5jZQorCSAgb2YgeW91ciBzeXN0ZW0uCisJICBUaGlzIGFsc28gYWRkcyB0aGUgYjQzIGRlYnVnZnMgaW50ZXJmYWNlLgorCisJICBEbyBub3QgZW5hYmxlIHRoaXMsIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZyB0aGUgZHJpdmVyLgorCisJICBTYXkgTiwgaWYgeW91IGFyZSBhIGRpc3RyaWJ1dG9yIG9yIHVzZXIgYnVpbGRpbmcgYSByZWxlYXNlIGtlcm5lbAorCSAgZm9yIHByb2R1Y3Rpb24gdXNlLgorCSAgT25seSBzYXkgWSwgaWYgeW91IGFyZSBkZWJ1Z2dpbmcgYSBwcm9ibGVtIGluIHRoZSBiNDMgZHJpdmVyIHNvdXJjZWNvZGUuCiAKIGNvbmZpZyBCNDNfRk9SQ0VfUElPCiAJYm9vbCAiRm9yY2UgdXNhZ2Ugb2YgUElPIGluc3RlYWQgb2YgRE1BIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCmluZGV4IDE0YTAyYjMuLjI4MWVmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiBiNDMteQkJCQkrPSBwaHlfYS5vCiBiNDMtJChDT05GSUdfQjQzX05QSFkpCQkrPSBwaHlfbi5vCiBiNDMtJChDT05GSUdfQjQzX1BIWV9MUCkJKz0gcGh5X2xwLm8KK2I0My0kKENPTkZJR19CNDNfUEhZX0xQKQkrPSB0YWJsZXNfbHBwaHkubwogYjQzLXkJCQkJKz0gc3lzZnMubwogYjQzLXkJCQkJKz0geG1pdC5vCiBiNDMteQkJCQkrPSBsby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggYTUzYzM3OC4uYmVhZjE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtMTIwLDYgKzEyMCw5IEBACiAjZGVmaW5lIEI0M19NTUlPX0lGU0NUTAkJCTB4Njg4IC8qIEludGVyZnJhbWUgc3BhY2UgY29udHJvbCAqLwogI2RlZmluZSAgQjQzX01NSU9fSUZTQ1RMX1VTRV9FRENGCTB4MDAwNAogI2RlZmluZSBCNDNfTU1JT19QT1dFUlVQX0RFTEFZCQkweDZBOAorI2RlZmluZSBCNDNfTU1JT19CVENPRVhfQ1RMCQkweDZCNCAvKiBCbHVldG9vdGggQ29leGlzdGVuY2UgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTU1JT19CVENPRVhfU1RBVAkJMHg2QjYgLyogQmx1ZXRvb3RoIENvZXhpc3RlbmNlIFN0YXR1cyAqLworI2RlZmluZSBCNDNfTU1JT19CVENPRVhfVFhDVEwJCTB4NkI4IC8qIEJsdWV0b290aCBDb2V4aXN0ZW5jZSBUcmFuc21pdCBDb250cm9sICovCiAKIC8qIFNQUk9NIGJvYXJkZmxhZ3NfbG8gdmFsdWVzICovCiAjZGVmaW5lIEI0M19CRkxfQlRDT0VYSVNUCQkweDAwMDEJLyogaW1wbGVtZW50cyBCbHVldG9vdGggY29leGlzdGFuY2UgKi8KQEAgLTU0Nyw5ICs1NTAsNiBAQAogCiBzdHJ1Y3QgYjQzX3N0YXRzIHsKIAl1OCBsaW5rX25vaXNlOwotCS8qIFN0b3JlIHRoZSBsYXN0IFRYL1JYIHRpbWVzIGhlcmUgZm9yIHVwZGF0aW5nIHRoZSBsZWRzLiAqLwotCXVuc2lnbmVkIGxvbmcgbGFzdF90eDsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CiB9OwogCiBzdHJ1Y3QgYjQzX2tleSB7CkBAIC02NTUsMTAgKzY1NSwzOSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eHBvd2VyX2FkanVzdF93b3JrOwogfTsKIAorLyogVGhlIHR5cGUgb2YgdGhlIGZpcm13YXJlIGZpbGUuICovCitlbnVtIGI0M19maXJtd2FyZV9maWxlX3R5cGUgeworCUI0M19GV1RZUEVfUFJPUFJJRVRBUlksCisJQjQzX0ZXVFlQRV9PUEVOU09VUkNFLAorCUI0M19OUl9GV1RZUEVTLAorfTsKKworLyogQ29udGV4dCBkYXRhIGZvciBmZXRjaGluZyBmaXJtd2FyZS4gKi8KK3N0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0IHsKKwkvKiBUaGUgZGV2aWNlIHdlIGFyZSByZXF1ZXN0aW5nIHRoZSBmdyBmb3IuICovCisJc3RydWN0IGI0M193bGRldiAqZGV2OworCS8qIFRoZSB0eXBlIG9mIGZpcm13YXJlIHRvIHJlcXVlc3QuICovCisJZW51bSBiNDNfZmlybXdhcmVfZmlsZV90eXBlIHJlcV90eXBlOworCS8qIEVycm9yIG1lc3NhZ2VzIGZvciBlYWNoIGZpcm13YXJlIHR5cGUuICovCisJY2hhciBlcnJvcnNbQjQzX05SX0ZXVFlQRVNdWzEyOF07CisJLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgZmlybXdhcmUgbmFtZS4gKi8KKwljaGFyIGZ3bmFtZVs2NF07CisJLyogQSBmYXRhbCBlcnJvciBvY2N1cmVkIHdoaWxlIHJlcXVlc3RpbmcuIEZpcm13YXJlIHJlcWVzdAorCSAqIGNhbiBub3QgY29udGludWUsIGFzIGFueSBvdGhlciByZXFlc3Qgd2lsbCBhbHNvIGZhaWwuICovCisJaW50IGZhdGFsX2ZhaWx1cmU7Cit9OworCiAvKiBJbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgYSBjYWNoZWQgbWljcm9jb2RlIGZpbGUuICovCiBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgewogCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZGF0YTsKKwkvKiBUeXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlIG5hbWUuIE5vdGUgdGhhdCB0aGlzIGRvZXMgb25seSBpbmRpY2F0ZQorCSAqIHRoZSB0eXBlIGJ5IHRoZSBmaXJtd2FyZSBuYW1lLiBOT1QgdGhlIGZpbGUgY29udGVudHMuCisJICogSWYgeW91IHdhbnQgdG8gY2hlY2sgZm9yIHByb3ByaWV0YXJ5IHZzIG9wZW5zb3VyY2UsIHVzZSAoc3RydWN0IGI0M19maXJtd2FyZSktPm9wZW5zb3VyY2UKKwkgKiBpbnN0ZWFkISBUaGUgKHN0cnVjdCBiNDNfZmlybXdhcmUpLT5vcGVuc291cmNlIGZsYWcgaXMgZGVyaXZlZCBmcm9tIHRoZSBhY3R1YWwgZmlybXdhcmUKKwkgKiBiaW5hcnkgY29kZSwgbm90IGp1c3QgdGhlIGZpbGVuYW1lLgorCSAqLworCWVudW0gYjQzX2Zpcm13YXJlX2ZpbGVfdHlwZSB0eXBlOwogfTsKIAogLyogUG9pbnRlcnMgdG8gdGhlIGZpcm13YXJlIGRhdGEgYW5kIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgaXQuICovCkBAIC02NzcsNyArNzA2LDggQEAKIAkvKiBGaXJtd2FyZSBwYXRjaGxldmVsICovCiAJdTE2IHBhdGNoOwogCi0JLyogU2V0IHRvIHRydWUsIGlmIHdlIGFyZSB1c2luZyBhbiBvcGVuc291cmNlIGZpcm13YXJlLiAqLworCS8qIFNldCB0byB0cnVlLCBpZiB3ZSBhcmUgdXNpbmcgYW4gb3BlbnNvdXJjZSBmaXJtd2FyZS4KKwkgKiBVc2UgdGhpcyB0byBjaGVjayBmb3IgcHJvcHJpZXRhcnkgdnMgb3BlbnNvdXJjZS4gKi8KIAlib29sIG9wZW5zb3VyY2U7CiAJLyogU2V0IHRvIHRydWUsIGlmIHRoZSBjb3JlIG5lZWRzIGEgUENNIGZpcm13YXJlLCBidXQKIAkgKiB3ZSBmYWlsZWQgdG8gbG9hZCBvbmUuIFRoaXMgaXMgYWx3YXlzIGZhbHNlIGZvcgpAQCAtODQ4LDEyICs4NzgsOSBAQAogICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOwogdm9pZCBiNDN3YXJuKHN0cnVjdCBiNDNfd2wgKndsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKLSNpZiBCNDNfREVCVUcKIHZvaWQgYjQzZGJnKHN0cnVjdCBiNDNfd2wgKndsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKLSNlbHNlIC8qIERFQlVHICovCi0jIGRlZmluZSBiNDNkYmcod2wsIGZtdC4uLikgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCi0jZW5kaWYgLyogREVCVUcgKi8KKwogCiAvKiBBIFdBUk5fT04gdmFyaWFudCB0aGF0IHZhbmlzaGVzIHdoZW4gYjQzIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KICAqIFRoaXMgX2Fsc29fIGV2YWx1YXRlcyB0aGUgYXJnIHdpdGggZGVidWdnaW5nIGRpc2FibGVkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKaW5kZXggZTA0ZmM5MS4uNDVlM2Q2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCkBAIC01MSw4ICs1MSw4IEBACiB9OwogCiBzdGF0aWMgaW5saW5lCi1zdHJ1Y3QgYjQzX2Rmc19maWxlICogZm9wc190b19kZnNfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfZGVidWdmc19mb3BzICpkZm9wcykKK3N0cnVjdCBiNDNfZGZzX2ZpbGUgKmZvcHNfdG9fZGZzX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfZGVidWdmc19mb3BzICpkZm9wcykKIHsKIAl2b2lkICpwOwogCkBAIC0zNjcsMzQgKzM2Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHdsLT5pcnFfbG9jayBpcyBsb2NrZWQgKi8KLXN0YXRpYyBzc2l6ZV90IHRzZl9yZWFkX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICAgICBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQotewotCXNzaXplX3QgY291bnQgPSAwOwotCXU2NCB0c2Y7Ci0KLQliNDNfdHNmX3JlYWQoZGV2LCAmdHNmKTsKLQlmYXBwZW5kKCIweCUwOHglMDh4XG4iLAotCQkodW5zaWduZWQgaW50KSgodHNmICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMiksCi0JCSh1bnNpZ25lZCBpbnQpKHRzZiAmIDB4RkZGRkZGRkZVTEwpKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotLyogd2wtPmlycV9sb2NrIGlzIGxvY2tlZCAqLwotc3RhdGljIGludCB0c2Zfd3JpdGVfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXU2NCB0c2Y7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nICopKCZ0c2YpKSAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQliNDNfdHNmX3dyaXRlKGRldiwgdHNmKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3NpemVfdCB0eHN0YXRfcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQljaGFyICpidWYsIHNpemVfdCBidWZzaXplKQogewpAQCAtNjkxLDE1ICs2NjMsMjMgQEAKIEI0M19ERUJVR0ZTX0ZPUFMobW1pbzE2d3JpdGUsIE5VTEwsIG1taW8xNndyaXRlX193cml0ZV9maWxlLCAxKTsKIEI0M19ERUJVR0ZTX0ZPUFMobW1pbzMycmVhZCwgbW1pbzMycmVhZF9fcmVhZF9maWxlLCBtbWlvMzJyZWFkX193cml0ZV9maWxlLCAxKTsKIEI0M19ERUJVR0ZTX0ZPUFMobW1pbzMyd3JpdGUsIE5VTEwsIG1taW8zMndyaXRlX193cml0ZV9maWxlLCAxKTsKLUI0M19ERUJVR0ZTX0ZPUFModHNmLCB0c2ZfcmVhZF9maWxlLCB0c2Zfd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKHR4c3RhdCwgdHhzdGF0X3JlYWRfZmlsZSwgTlVMTCwgMCk7CiBCNDNfREVCVUdGU19GT1BTKHJlc3RhcnQsIE5VTEwsIHJlc3RhcnRfd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKGxvY3RscywgbG9jdGxzX3JlYWRfZmlsZSwgTlVMTCwgMCk7CiAKIAotaW50IGI0M19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGVudW0gYjQzX2R5bmRiZyBmZWF0dXJlKQorYm9vbCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKIHsKLQlyZXR1cm4gISEoZGV2LT5kZnNlbnRyeSAmJiBkZXYtPmRmc2VudHJ5LT5keW5fZGVidWdbZmVhdHVyZV0pOworCWJvb2wgZW5hYmxlZDsKKworCWVuYWJsZWQgPSAoZGV2LT5kZnNlbnRyeSAmJiBkZXYtPmRmc2VudHJ5LT5keW5fZGVidWdbZmVhdHVyZV0pOworCWlmICh1bmxpa2VseShlbmFibGVkKSkgeworCQkvKiBGb3JjZSBmdWxsIGRlYnVnZ2luZyBtZXNzYWdlcywgaWYgdGhlIHVzZXIgZW5hYmxlZAorCQkgKiBzb21lIGR5bmFtaWMgZGVidWdnaW5nIGZlYXR1cmUuICovCisJCWI0M19tb2RwYXJhbV92ZXJib3NlID0gQjQzX1ZFUkJPU0lUWV9NQVg7CisJfQorCisJcmV0dXJuIGVuYWJsZWQ7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19yZW1vdmVfZHluYW1pY19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC04MDUsNyArNzg1LDYgQEAKIAlBRERfRklMRShtbWlvMTZ3cml0ZSwgMDIwMCk7CiAJQUREX0ZJTEUobW1pbzMycmVhZCwgMDYwMCk7CiAJQUREX0ZJTEUobW1pbzMyd3JpdGUsIDAyMDApOwotCUFERF9GSUxFKHRzZiwgMDYwMCk7CiAJQUREX0ZJTEUodHhzdGF0LCAwNDAwKTsKIAlBRERfRklMRShyZXN0YXJ0LCAwMjAwKTsKIAlBRERfRklMRShsb2N0bHMsIDA0MDApOwpAQCAtODM0LDcgKzgxMyw2IEBACiAJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9tbWlvMTZ3cml0ZS5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbW1pbzMycmVhZC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbW1pbzMyd3JpdGUuZGVudHJ5KTsKLQlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX3RzZi5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfdHhzdGF0LmRlbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9yZXN0YXJ0LmRlbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9sb2N0bHMuZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCmluZGV4IDc4ODZjYmUuLmI5ZDRkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaApAQCAtNDYsNyArNDYsNiBAQAogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV9tbWlvMTZ3cml0ZTsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzMycmVhZDsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzMyd3JpdGU7Ci0Jc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3RzZjsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfdHhzdGF0OwogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV90eHBvd2VyX2c7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3Jlc3RhcnQ7CkBAIC03Miw3ICs3MSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZHluX2RlYnVnX2RlbnRyaWVzW19fQjQzX05SX0RZTkRCR107CiB9OwogCi1pbnQgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpOworYm9vbCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSk7CiAKIHZvaWQgYjQzX2RlYnVnZnNfaW5pdCh2b2lkKTsKIHZvaWQgYjQzX2RlYnVnZnNfZXhpdCh2b2lkKTsKQEAgLTgzLDcgKzgyLDcgQEAKIAogI2Vsc2UgLyogQ09ORklHX0I0M19ERUJVRyAqLwogCi1zdGF0aWMgaW5saW5lIGludCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCA2ZDY1YTAyLi4wY2M4MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC00MSw2ICs0MSwxMiBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAKKy8qIFJlcXVpcmVkIG51bWJlciBvZiBUWCBETUEgc2xvdHMgcGVyIFRYIGZyYW1lLgorICogVGhpcyBjdXJyZW50bHkgaXMgMiwgYmVjYXVzZSB3ZSBwdXQgdGhlIGhlYWRlciBhbmQgdGhlIGllZWU4MDIxMSBmcmFtZQorICogaW50byBzZXBhcmF0ZSBzbG90cy4gKi8KKyNkZWZpbmUgVFhfU0xPVFNfUEVSX0ZSQU1FCTIKKworCiAvKiAzMmJpdCBETUEgb3BzLiAqLwogc3RhdGljCiBzdHJ1Y3QgYjQzX2RtYWRlc2NfZ2VuZXJpYyAqb3AzMl9pZHgyZGVzYyhzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcsCkBAIC03NCw4ICs4MCw3IEBACiAJYWRkcmV4dCA9ICh1MzIpIChkbWFhZGRyICYgU1NCX0RNQV9UUkFOU0xBVElPTl9NQVNLKQogCSAgICA+PiBTU0JfRE1BX1RSQU5TTEFUSU9OX1NISUZUOwogCWFkZHIgfD0gc3NiX2RtYV90cmFuc2xhdGlvbihyaW5nLT5kZXYtPmRldik7Ci0JY3RsID0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKLQkgICAgJiBCNDNfRE1BMzJfRENUTF9CWVRFQ05UOworCWN0bCA9IGJ1ZnNpemUgJiBCNDNfRE1BMzJfRENUTF9CWVRFQ05UOwogCWlmIChzbG90ID09IHJpbmctPm5yX3Nsb3RzIC0gMSkKIAkJY3RsIHw9IEI0M19ETUEzMl9EQ1RMX0RUQUJMRUVORDsKIAlpZiAoc3RhcnQpCkBAIC0xNzcsOCArMTgyLDcgQEAKIAkJY3RsMCB8PSBCNDNfRE1BNjRfRENUTDBfRlJBTUVFTkQ7CiAJaWYgKGlycSkKIAkJY3RsMCB8PSBCNDNfRE1BNjRfRENUTDBfSVJROwotCWN0bDEgfD0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKLQkgICAgJiBCNDNfRE1BNjRfRENUTDFfQllURUNOVDsKKwljdGwxIHw9IGJ1ZnNpemUgJiBCNDNfRE1BNjRfRENUTDFfQllURUNOVDsKIAljdGwxIHw9IChhZGRyZXh0IDw8IEI0M19ETUE2NF9EQ1RMMV9BRERSRVhUX1NISUZUKQogCSAgICAmIEI0M19ETUE2NF9EQ1RMMV9BRERSRVhUX01BU0s7CiAKQEAgLTU3NiwxMiArNTgwLDExIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwKIAkJCQkJIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApOwotCX0KLQotCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCkpIHsKLQkJYjQzZXJyKHJpbmctPmRldi0+d2wsICJSWCBETUEgYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIC1FSU87CisJCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCkpIHsKKwkJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiUlggRE1BIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAl9CiAKIAltZXRhLT5za2IgPSBza2I7CkBAIC04MzAsOSArODMzLDYgQEAKIAkJaWYgKHJpbmctPmluZGV4ID09IDApIHsKIAkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCNDNfRE1BMF9SWF9CVUZGRVJTSVpFOwogCQkJcmluZy0+ZnJhbWVvZmZzZXQgPSBCNDNfRE1BMF9SWF9GUkFNRU9GRlNFVDsKLQkJfSBlbHNlIGlmIChyaW5nLT5pbmRleCA9PSAzKSB7Ci0JCQlyaW5nLT5yeF9idWZmZXJzaXplID0gQjQzX0RNQTNfUlhfQlVGRkVSU0laRTsKLQkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQjQzX0RNQTNfUlhfRlJBTUVPRkZTRVQ7CiAJCX0gZWxzZQogCQkJQjQzX1dBUk5fT04oMSk7CiAJfQpAQCAtODQyLDcgKzg0MiwxMCBAQAogI2VuZGlmCiAKIAlpZiAoZm9yX3R4KSB7Ci0JCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhyaW5nLT5ucl9zbG90cywKKwkJLyogQXNzdW1wdGlvbjogQjQzX1RYUklOR19TTE9UUyBjYW4gYmUgZGl2aWRlZCBieSBUWF9TTE9UU19QRVJfRlJBTUUgKi8KKwkJQlVJTERfQlVHX09OKEI0M19UWFJJTkdfU0xPVFMgJSBUWF9TTE9UU19QRVJfRlJBTUUgIT0gMCk7CisKKwkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FLAogCQkJCQkgICAgYjQzX3R4aGRyX3NpemUoZGV2KSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQpAQCAtODU4LDcgKzg2MSw3IEBACiAJCQkJCSAgYjQzX3R4aGRyX3NpemUoZGV2KSwgMSkpIHsKIAkJCS8qIHVnaCByZWFsbG9jICovCiAJCQlrZnJlZShyaW5nLT50eGhkcl9jYWNoZSk7Ci0JCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMsCisJCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUUsCiAJCQkJCQkgICAgYjQzX3R4aGRyX3NpemUoZGV2KSwKIAkJCQkJCSAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQpAQCAtMTE0OSw3ICsxMTUyLDEwIEBACiAJdTE2IGNvb2tpZTsKIAlzaXplX3QgaGRyc2l6ZSA9IGI0M190eGhkcl9zaXplKHJpbmctPmRldik7CiAKLSNkZWZpbmUgU0xPVFNfUEVSX1BBQ0tFVCAgMgorCS8qIEltcG9ydGFudCBub3RlOiBJZiB0aGUgbnVtYmVyIG9mIHVzZWQgRE1BIHNsb3RzIHBlciBUWCBmcmFtZQorCSAqIGlzIGNoYW5nZWQgaGVyZSwgdGhlIFRYX1NMT1RTX1BFUl9GUkFNRSBkZWZpbml0aW9uIGF0IHRoZSB0b3Agb2YKKwkgKiB0aGUgZmlsZSBoYXMgdG8gYmUgdXBkYXRlZCwgdG9vIQorCSAqLwogCiAJb2xkX3RvcF9zbG90ID0gcmluZy0+Y3VycmVudF9zbG90OwogCW9sZF91c2VkX3Nsb3RzID0gcmluZy0+dXNlZF9zbG90czsKQEAgLTExNTksNyArMTE2NSw3IEBACiAJZGVzYyA9IG9wcy0+aWR4MmRlc2MocmluZywgc2xvdCwgJm1ldGFfaGRyKTsKIAltZW1zZXQobWV0YV9oZHIsIDAsIHNpemVvZigqbWV0YV9oZHIpKTsKIAotCWhlYWRlciA9ICYocmluZy0+dHhoZHJfY2FjaGVbc2xvdCAqIGhkcnNpemVdKTsKKwloZWFkZXIgPSAmKHJpbmctPnR4aGRyX2NhY2hlWyhzbG90IC8gVFhfU0xPVFNfUEVSX0ZSQU1FKSAqIGhkcnNpemVdKTsKIAljb29raWUgPSBnZW5lcmF0ZV9jb29raWUocmluZywgc2xvdCk7CiAJZXJyID0gYjQzX2dlbmVyYXRlX3R4aGRyKHJpbmctPmRldiwgaGVhZGVyLAogCQkJCSBza2ItPmRhdGEsIHNrYi0+bGVuLCBpbmZvLCBjb29raWUpOwpAQCAtMTI1NCw4ICsxMjYwLDggQEAKIH0KIAogLyogU3RhdGljIG1hcHBpbmcgb2YgbWFjODAyMTEncyBxdWV1ZXMgKHByaW9yaXRpZXMpIHRvIGI0MyBETUEgcmluZ3MuICovCi1zdGF0aWMgc3RydWN0IGI0M19kbWFyaW5nICogc2VsZWN0X3JpbmdfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJICAgIHU4IHF1ZXVlX3ByaW8pCitzdGF0aWMgc3RydWN0IGI0M19kbWFyaW5nICpzZWxlY3RfcmluZ19ieV9wcmlvcml0eShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICB1OCBxdWV1ZV9wcmlvKQogewogCXN0cnVjdCBiNDNfZG1hcmluZyAqcmluZzsKIApAQCAtMTMwNiwxNyArMTMxMiwxOSBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisKIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwotCWlmICh1bmxpa2VseShmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkpIHsKLQkJYjQzd2FybihkZXYtPndsLCAiRE1BIHF1ZXVlIG92ZXJmbG93XG4iKTsKLQkJZXJyID0gLUVOT1NQQzsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KIAkvKiBDaGVjayBpZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQgaW4gbWFjODAyMTEsCiAJICogYnV0IHdlIGdvdCBjYWxsZWQgbmV2ZXJ0aGVsZXNzLgogCSAqIFRoYXQgd291bGQgYmUgYSBtYWM4MDIxMSBidWcuICovCiAJQjQzX1dBUk5fT04ocmluZy0+c3RvcHBlZCk7CiAKKwlpZiAodW5saWtlbHkoZnJlZV9zbG90cyhyaW5nKSA8IFRYX1NMT1RTX1BFUl9GUkFNRSkpIHsKKwkJYjQzd2FybihkZXYtPndsLCAiRE1BIHF1ZXVlIG92ZXJmbG93XG4iKTsKKwkJZXJyID0gLUVOT1NQQzsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCS8qIEFzc2lnbiB0aGUgcXVldWUgbnVtYmVyIHRvIHRoZSByaW5nIChpZiBub3QgYWxyZWFkeSBkb25lIGJlZm9yZSkKIAkgKiBzbyBUWCBzdGF0dXMgaGFuZGxpbmcgY2FuIHVzZSBpdC4gVGhlIHF1ZXVlIHRvIHJpbmcgbWFwcGluZyBpcwogCSAqIHN0YXRpYywgc28gd2UgZG9uJ3QgbmVlZCB0byBzdG9yZSBpdCBwZXIgZnJhbWUuICovCkBAIC0xMzM1LDcgKzEzNDMsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCXJpbmctPm5yX3R4X3BhY2tldHMrKzsKLQlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBTTE9UU19QRVJfUEFDS0VUKSB8fAorCWlmICgoZnJlZV9zbG90cyhyaW5nKSA8IFRYX1NMT1RTX1BFUl9GUkFNRSkgfHwKIAkgICAgc2hvdWxkX2luamVjdF9vdmVyZmxvdyhyaW5nKSkgewogCQkvKiBUaGlzIFRYIHJpbmcgaXMgZnVsbC4gKi8KIAkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LT53bC0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKQEAgLTE0MTcsOSArMTQyNSw4IEBACiAJCQlicmVhazsKIAkJc2xvdCA9IG5leHRfc2xvdChyaW5nLCBzbG90KTsKIAl9Ci0JZGV2LT5zdGF0cy5sYXN0X3R4ID0gamlmZmllczsKIAlpZiAocmluZy0+c3RvcHBlZCkgewotCQlCNDNfV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCk7CisJCUI0M19XQVJOX09OKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpOwogCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYtPndsLT5odywgcmluZy0+cXVldWVfcHJpbyk7CiAJCXJpbmctPnN0b3BwZWQgPSAwOwogCQlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19ETUFWRVJCT1NFKSkgewpAQCAtMTQ0Miw4ICsxNDQ5LDggQEAKIAkJcmluZyA9IHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KGRldiwgaSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKLQkJc3RhdHNbaV0ubGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFNMT1RTX1BFUl9QQUNLRVQ7Ci0JCXN0YXRzW2ldLmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOworCQlzdGF0c1tpXS5sZW4gPSByaW5nLT51c2VkX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FOworCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FOwogCQlzdGF0c1tpXS5jb3VudCA9IHJpbmctPm5yX3R4X3BhY2tldHM7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKaW5kZXggZDFlYjVjMC4uMDVkZGU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaApAQCAtMSwxNCArMSwxMiBAQAogI2lmbmRlZiBCNDNfRE1BX0hfCiAjZGVmaW5lIEI0M19ETUFfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJiNDMuaCIKIAorCiAvKiBETUEtSW50ZXJydXB0IHJlYXNvbnMuICovCiAjZGVmaW5lIEI0M19ETUFJUlFfRkFUQUxNQVNLCSgoMSA8PCAxMCkgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMikgXAogCQkJCQkgfCAoMSA8PCAxNCkgfCAoMSA8PCAxNSkpCkBAIC0xNjEsMTQgKzE1OSwxMyBAQAogCiAvKiBNaXNjIERNQSBjb25zdGFudHMgKi8KICNkZWZpbmUgQjQzX0RNQV9SSU5HTUVNU0laRQkJUEFHRV9TSVpFCi0jZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCTMwCi0jZGVmaW5lIEI0M19ETUEzX1JYX0ZSQU1FT0ZGU0VUCTAKKyNkZWZpbmUgQjQzX0RNQTBfUlhfRlJBTUVPRkZTRVQJCTMwCiAKIC8qIERNQSBlbmdpbmUgdHVuaW5nIGtub2JzICovCi0jZGVmaW5lIEI0M19UWFJJTkdfU0xPVFMJCTEyOAorI2RlZmluZSBCNDNfVFhSSU5HX1NMT1RTCQkyNTYKICNkZWZpbmUgQjQzX1JYUklOR19TTE9UUwkJNjQKLSNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkoMjMwNCArIDEwMCkKLSNkZWZpbmUgQjQzX0RNQTNfUlhfQlVGRkVSU0laRQkxNgorI2RlZmluZSBCNDNfRE1BMF9SWF9CVUZGRVJTSVpFCQlJRUVFODAyMTFfTUFYX0ZSQU1FX0xFTgorCiAKIHN0cnVjdCBza19idWZmOwogc3RydWN0IGI0M19wcml2YXRlOwpAQCAtMjE1LDcgKzIxMiw3IEBACiAJdm9pZCAqZGVzY2Jhc2U7CiAJLyogTWV0YSBkYXRhIGFib3V0IGFsbCBkZXNjcmlwdG9ycy4gKi8KIAlzdHJ1Y3QgYjQzX2RtYWRlc2NfbWV0YSAqbWV0YTsKLQkvKiBDYWNoZSBvZiBUWCBoZWFkZXJzIGZvciBlYWNoIHNsb3QuCisJLyogQ2FjaGUgb2YgVFggaGVhZGVycyBmb3IgZWFjaCBUWCBmcmFtZS4KIAkgKiBUaGlzIGlzIHRvIGF2b2lkIGFuIGFsbG9jYXRpb24gb24gZWFjaCBUWC4KIAkgKiBUaGlzIGlzIE5VTEwgZm9yIGFuIFJYIHJpbmcuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCmluZGV4IDZhMThhMTQuLjIyZDBmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogCi1zdGF0aWMgc3RydWN0IGI0M19sb19jYWxpYiAqIGI0M19maW5kX2xvX2NhbGliKHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbywKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorc3RhdGljIHN0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19maW5kX2xvX2NhbGliKHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbywKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCiAJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgKiAicGFkX21peF9nYWluIiBpcyB0aGUgUEFEIE1peGVyIEdhaW4uCiAgKi8KIHN0YXRpYyB1MTYgbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgIHUxNiAqIHZhbHVlLCB1MTYgKiBwYWRfbWl4X2dhaW4pCisJCQkJICAgdTE2ICp2YWx1ZSwgdTE2ICpwYWRfbWl4X2dhaW4pCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAl1MTYgcmVnLCB2LCBwYWRtaXg7CkBAIC0yMjUsMTQgKzIyNSwxMiBAQAogCQkJCXJhZGlvX3BjdGxfcmVnID0gdG1wOwogCQl9CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCSAgICAgICYgMHhGRkYwKSB8IHJhZGlvX3BjdGxfcmVnKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgcmFkaW9fcGN0bF9yZWcpOwogCWI0M19ncGh5X3NldF9iYXNlYmFuZF9hdHRlbnVhdGlvbihkZXYsIDIpOwogCiAJcmVnID0gbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoZGV2LCAmbWFzaywgTlVMTCk7CiAJbWFzayA9IH5tYXNrOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgcmVnLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgcmVnKQotCQkJICAmIG1hc2spOworCWI0M19yYWRpb19tYXNrKGRldiwgcmVnLCBtYXNrKTsKIAogCWlmIChoYXNfdHhfbWFnbmlmaWNhdGlvbihwaHkpKSB7CiAJCWludCBpLCBqOwpAQCAtMjQyLDE0ICsyNDAsMTAgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eF9tYWduX3ZhbHVlcyk7IGkrKykgewogCQkJdHhfbWFnbiA9IHR4X21hZ25fdmFsdWVzW2ldOwotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAotCQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgJiAweEZGMEYpIHwgdHhfbWFnbik7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkYwRiwgdHhfbWFnbik7CiAJCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRSh0eF9iaWFzX3ZhbHVlcyk7IGorKykgewogCQkJCXR4X2JpYXMgPSB0eF9iaWFzX3ZhbHVlc1tqXTsKLQkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJCSAgICYgMHhGRkYwKSB8IHR4X2JpYXMpOworCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg1MiwgMHhGRkYwLCB0eF9iaWFzKTsKIAkJCQlmZWVkdGhyb3VnaCA9CiAJCQkJICAgIGxvX21lYXN1cmVfZmVlZHRocm91Z2goZGV2LCAwLCBwZ2EsCiAJCQkJCQkJICAgdHJzd19yeCk7CkBAIC0yNjksOCArMjYzLDcgQEAKIAl9IGVsc2UgewogCQlsby0+dHhfbWFnbiA9IDA7CiAJCWxvLT50eF9iaWFzID0gMDsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkgICYgMHhGRkYwKTsJLyogVFggYmlhcyA9PSAwICovCisJCWI0M19yYWRpb19tYXNrKGRldiwgMHg1MiwgMHhGRkYwKTsJLyogVFggYmlhcyA9PSAwICovCiAJfQogCWxvLT50eGN0bF9tZWFzdXJlZF90aW1lID0gamlmZmllczsKIH0KQEAgLTQwNiwxOCArMzk5LDEwIEBACiAJCXNhdi0+cGh5X2Nja18xNCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MTQpKTsKIAkJc2F2LT5waHlfaHB3cl90c3NpY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0hQV1JfVFNTSUNUTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMKQotCQkJICAgICAgfCAweDEwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSkpCi0JCQkgICAgICB8IDB4NDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9EQUNDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgIHwgMHg0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDE0KSwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MTQpKQotCQkJICAgICAgfCAweDIwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwsIDB4MTAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksIDB4NDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfREFDQ1RMLCAweDQwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSwgMHgyMDApOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IgJiYKIAkgICAgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwICYmIHBoeS0+cmFkaW9fcmV2IDwgNikgewpAQCAtNDM0LDE3ICs0MTksMTAgQEAKIAkJc2F2LT5waHlfY2NrXzNFID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzRSkpOwogCQlzYXYtPnBoeV9jcnMwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DTEFTU0NUTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0xBU1NDVEwpCi0JCQkgICAgICAmIDB4RkZGQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHg3RkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikKLQkJCSAgICAgIHwgMHgwMDAzKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkKLQkJCSAgICAgICYgMHhGRkZDKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DTEFTU0NUTCwgMHhGRkZDKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCAweDdGRkYpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkMpOwogCQlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0cpIHsKIAkJCWlmICgocGh5LT5yZXYgPj0gNykgJiYKIAkJCSAgICAoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkpIHsKQEAgLTU1OCw4ICs1MzYsNyBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg3QSwgc2F2LT5yYWRpb183QSk7CiAJaWYgKCFoYXNfdHhfbWFnbmlmaWNhdGlvbihwaHkpKSB7CiAJCXRtcCA9IHNhdi0+cmFkaW9fNTI7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKQotCQkJCQkgICAgICAmIDB4RkYwRikgfCB0bXApOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkYwRiwgdG1wKTsKIAl9CiAJYjQzX3dyaXRlMTYoZGV2LCAweDNFMiwgc2F2LT5yZWdfM0UyKTsKIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IgJiYKQEAgLTc1NCw5ICs3MzEsOSBAQAogfQogCiBzdGF0aWMKLXN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfY2FsaWJyYXRlX2xvX3NldHRpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKK3N0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19jYWxpYnJhdGVfbG9fc2V0dGluZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwogCXN0cnVjdCBiNDNfcGh5X2cgKmdwaHkgPSBwaHktPmc7CkBAIC03NzgsMTIgKzc1NSw4IEBACiAKIAl0eGN0bF9yZWcgPSBsb190eGN0bF9yZWdpc3Rlcl90YWJsZShkZXYsICZ0eGN0bF92YWx1ZSwgJnBhZF9taXhfZ2Fpbik7CiAKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykgJiAweEZGRjApCi0JCQkgIHwgcmZhdHQtPmF0dCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0eGN0bF9yZWcsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgdHhjdGxfcmVnKSAmIH50eGN0bF92YWx1ZSkKLQkJCSAgfCAocmZhdHQtPndpdGhfcGFkbWl4KSA/IHR4Y3RsX3ZhbHVlIDogMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIHJmYXR0LT5hdHQpOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgdHhjdGxfcmVnLCB+dHhjdGxfdmFsdWUsIChyZmF0dC0+d2l0aF9wYWRtaXggPyB0eGN0bF92YWx1ZSA6MCkpOwogCiAJbWF4X3J4X2dhaW4gPSByZmF0dC0+YXR0ICogMjsKIAltYXhfcnhfZ2FpbiArPSBiYmF0dC0+YXR0IC8gMjsKQEAgLTgyNCw5ICs3OTcsOSBAQAogLyogR2V0IGEgY2FsaWJyYXRlZCBMTyBzZXR0aW5nIGZvciB0aGUgZ2l2ZW4gYXR0ZW51YXRpb24gdmFsdWVzLgogICogTWlnaHQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIHVuZGVyIE9PTSEgKi8KIHN0YXRpYwotc3RydWN0IGI0M19sb19jYWxpYiAqIGI0M19nZXRfY2FsaWJfbG9fc2V0dGluZ3Moc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCi0JCQkJCQljb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKK3N0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19nZXRfY2FsaWJfbG9fc2V0dGluZ3Moc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBkZXYtPnBoeS5nLT5sb19jb250cm9sOwogCXN0cnVjdCBiNDNfbG9fY2FsaWIgKmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCBjNzg4YmFkLi5iNzJlZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTQsNyArNCw3IEBACiAKICAgQ29weXJpZ2h0IChjKSAyMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPgogICBDb3B5cmlnaHQgKGMpIDIwMDUgU3RlZmFubyBCcml2aW8gPHN0ZWZhbm8uYnJpdmlvQHBvbGltaS5pdD4KLSAgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiAgIENvcHlyaWdodCAoYykgMjAwNSBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KICAgQ29weXJpZ2h0IChjKSAyMDA1IEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgogCkBAIC04OCw2ICs4OCwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGJ0Y29leCwgbW9kcGFyYW1fYnRjb2V4LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidGNvZXgsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RhbmNlIChkZWZhdWx0IG9uKSIpOwogCitpbnQgYjQzX21vZHBhcmFtX3ZlcmJvc2UgPSBCNDNfVkVSQk9TSVRZX0RFRkFVTFQ7Cittb2R1bGVfcGFyYW1fbmFtZWQodmVyYm9zZSwgYjQzX21vZHBhcmFtX3ZlcmJvc2UsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJMb2cgbWVzc2FnZSB2ZXJib3NpdHk6IDA9ZXJyb3IsIDE9d2FybiwgMj1pbmZvKGRlZmF1bHQpLCAzPWRlYnVnIik7CisKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzc2JfZGV2aWNlX2lkIGI0M19zc2JfdGJsW10gPSB7CiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCA1KSwKQEAgLTk3LDYgKzEwMSw4IEBACiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMCksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMSksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMyksCisJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxNSksCisJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxNiksCiAJU1NCX0RFVlRBQkxFX0VORAogfTsKIApAQCAtMjk4LDYgKzMwNCw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9JTkZPKQorCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0zMTEsNiArMzE5LDggQEAKIHsKIAl2YV9saXN0IGFyZ3M7CiAKKwlpZiAoYjQzX21vZHBhcmFtX3ZlcmJvc2UgPCBCNDNfVkVSQk9TSVRZX0VSUk9SKQorCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0zMjQsNiArMzM0LDggQEAKIHsKIAl2YV9saXN0IGFyZ3M7CiAKKwlpZiAoYjQzX21vZHBhcmFtX3ZlcmJvc2UgPCBCNDNfVkVSQk9TSVRZX1dBUk4pCisJCXJldHVybjsKIAlpZiAoIWI0M19yYXRlbGltaXQod2wpKQogCQlyZXR1cm47CiAJdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTMzMywxOCArMzQ1LDE4IEBACiAJdmFfZW5kKGFyZ3MpOwogfQogCi0jaWYgQjQzX0RFQlVHCiB2b2lkIGI0M2RiZyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9ERUJVRykKKwkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgImI0My0lcyBkZWJ1ZzogIiwKIAkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iKTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogfQotI2VuZGlmIC8qIERFQlVHICovCiAKIHN0YXRpYyB2b2lkIGI0M19yYW1fd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCB1MzIgdmFsKQogewpAQCAtNTAwLDcgKzUxMiw3IEBACiB9CiAKIC8qIFJlYWQgSG9zdEZsYWdzICovCi11NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqIGRldikKK3U2NCBiNDNfaGZfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJdTY0IHJldDsKIApAQCAtNTI2LDUyICs1MzgsMjAgQEAKIAliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9IT1NURkhJLCBoaSk7CiB9CiAKLXZvaWQgYjQzX3RzZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0ICogdHNmKQordm9pZCBiNDNfdHNmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgKnRzZikKIHsKLQkvKiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwuIEFzIHdlIHJlYWQgdGhlIFRTRiBmcm9tIG11bHRpcGxlCi0JICogcmVnaXN0ZXJzLCB3ZSBzaG91bGQgdGFrZSBjYXJlIG9mIHJlZ2lzdGVyIG92ZXJmbG93cy4KLQkgKiBJbiB0aGVvcnksIHRoZSB3aG9sZSB0c2YgcmVhZCBwcm9jZXNzIHNob3VsZCBiZSBhdG9taWMuCi0JICogV2UgdHJ5IHRvIGJlIGF0b21pYyBoZXJlLCBieSByZXN0YXJpbmcgdGhlIHJlYWQgcHJvY2VzcywKLQkgKiBpZiBhbnkgb2YgdGhlIGhpZ2ggcmVnaXN0ZXJzIGNoYW5nZWQgKG92ZXJmbGV3KS4KLQkgKi8KLQlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDMpIHsKLQkJdTMyIGxvdywgaGlnaCwgaGlnaDI7CisJdTMyIGxvdywgaGlnaDsKIAotCQlkbyB7Ci0JCQloaWdoID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKLQkJCWxvdyA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfTE9XKTsKLQkJCWhpZ2gyID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKLQkJfSB3aGlsZSAodW5saWtlbHkoaGlnaCAhPSBoaWdoMikpOworCUI0M19XQVJOX09OKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8IDMpOwogCi0JCSp0c2YgPSBoaWdoOwotCQkqdHNmIDw8PSAzMjsKLQkJKnRzZiB8PSBsb3c7Ci0JfSBlbHNlIHsKLQkJdTY0IHRtcDsKLQkJdTE2IHYwLCB2MSwgdjIsIHYzOwotCQl1MTYgdGVzdDEsIHRlc3QyLCB0ZXN0MzsKKwkvKiBUaGUgaGFyZHdhcmUgZ3VhcmFudGVlcyB1cyBhbiBhdG9taWMgcmVhZCwgaWYgd2UKKwkgKiByZWFkIHRoZSBsb3cgcmVnaXN0ZXIgZmlyc3QuICovCisJbG93ID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1cpOworCWhpZ2ggPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0hJR0gpOwogCi0JCWRvIHsKLQkJCXYzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8zKTsKLQkJCXYyID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8yKTsKLQkJCXYxID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8xKTsKLQkJCXYwID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8wKTsKLQotCQkJdGVzdDMgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fVFNGXzMpOwotCQkJdGVzdDIgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fVFNGXzIpOwotCQkJdGVzdDEgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fVFNGXzEpOwotCQl9IHdoaWxlICh2MyAhPSB0ZXN0MyB8fCB2MiAhPSB0ZXN0MiB8fCB2MSAhPSB0ZXN0MSk7Ci0KLQkJKnRzZiA9IHYzOwotCQkqdHNmIDw8PSA0ODsKLQkJdG1wID0gdjI7Ci0JCXRtcCA8PD0gMzI7Ci0JCSp0c2YgfD0gdG1wOwotCQl0bXAgPSB2MTsKLQkJdG1wIDw8PSAxNjsKLQkJKnRzZiB8PSB0bXA7Ci0JCSp0c2YgfD0gdjA7Ci0JfQorCSp0c2YgPSBoaWdoOworCSp0c2YgPDw9IDMyOworCSp0c2YgfD0gbG93OwogfQogCiBzdGF0aWMgdm9pZCBiNDNfdGltZV9sb2NrKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTU5OCwzNSArNTc4LDE4IEBACiAKIHN0YXRpYyB2b2lkIGI0M190c2Zfd3JpdGVfbG9ja2VkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0IHRzZikKIHsKLQkvKiBCZSBjYXJlZnVsIHdpdGggdGhlIGluLXByb2dyZXNzIHRpbWVyLgotCSAqIEZpcnN0IHplcm8gb3V0IHRoZSBsb3cgcmVnaXN0ZXIsIHNvIHdlIGhhdmUgYSBmdWxsCi0JICogcmVnaXN0ZXItb3ZlcmZsb3cgZHVyYXRpb24gdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDMpIHsKLQkJdTMyIGxvID0gKHRzZiAmIDB4MDAwMDAwMDBGRkZGRkZGRlVMTCk7Ci0JCXUzMiBoaSA9ICh0c2YgJiAweEZGRkZGRkZGMDAwMDAwMDBVTEwpID4+IDMyOworCXUzMiBsb3csIGhpZ2g7CiAKLQkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfTE9XLCAwKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0hJR0gsIGhpKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVywgbG8pOwotCX0gZWxzZSB7Ci0JCXUxNiB2MCA9ICh0c2YgJiAweDAwMDAwMDAwMDAwMEZGRkZVTEwpOwotCQl1MTYgdjEgPSAodHNmICYgMHgwMDAwMDAwMEZGRkYwMDAwVUxMKSA+PiAxNjsKLQkJdTE2IHYyID0gKHRzZiAmIDB4MDAwMEZGRkYwMDAwMDAwMFVMTCkgPj4gMzI7Ci0JCXUxNiB2MyA9ICh0c2YgJiAweEZGRkYwMDAwMDAwMDAwMDBVTEwpID4+IDQ4OworCUI0M19XQVJOX09OKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8IDMpOwogCi0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzAsIDApOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMywgdjMpOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMiwgdjIpOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMSwgdjEpOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMCwgdjApOwotCX0KKwlsb3cgPSB0c2Y7CisJaGlnaCA9ICh0c2YgPj4gMzIpOworCS8qIFRoZSBoYXJkd2FyZSBndWFyYW50ZWVzIHVzIGFuIGF0b21pYyB3cml0ZSwgaWYgd2UKKwkgKiB3cml0ZSB0aGUgbG93IHJlZ2lzdGVyIGZpcnN0LiAqLworCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVywgbG93KTsKKwltbWlvd2IoKTsKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdILCBoaWdoKTsKKwltbWlvd2IoKTsKIH0KIAogdm9pZCBiNDNfdHNmX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0IHRzZikKQEAgLTYzNyw3ICs2MDAsNyBAQAogfQogCiBzdGF0aWMKLXZvaWQgYjQzX21hY2ZpbHRlcl9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCBjb25zdCB1OCAqIG1hYykKK3ZvaWQgYjQzX21hY2ZpbHRlcl9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCBjb25zdCB1OCAqbWFjKQogewogCXN0YXRpYyBjb25zdCB1OCB6ZXJvX2FkZHJbRVRIX0FMRU5dID0geyAwIH07CiAJdTE2IGRhdGE7CkBAIC04MjcsNyArNzkwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQga2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJICAgICAgdTggaW5kZXgsIHU4IGFsZ29yaXRobSwgY29uc3QgdTggKiBrZXkpCisJCSAgICAgIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sIGNvbnN0IHU4ICprZXkpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIG9mZnNldDsKQEAgLTg0OSw3ICs4MTIsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQga2V5bWFjX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggaW5kZXgsIGNvbnN0IHU4ICogYWRkcikKK3N0YXRpYyB2b2lkIGtleW1hY193cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGluZGV4LCBjb25zdCB1OCAqYWRkcikKIHsKIAl1MzIgYWRkcnRtcFsyXSA9IHsgMCwgMCwgfTsKIAl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OwpAQCAtODk5LDcgKzg2Miw3IEBACiAKIHN0YXRpYyB2b2lkIGRvX2tleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgdTggaW5kZXgsIHU4IGFsZ29yaXRobSwKLQkJCSBjb25zdCB1OCAqIGtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICogbWFjX2FkZHIpCisJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAl1OCBidWZbQjQzX1NFQ19LRVlTSVpFXSA9IHsgMCwgfTsKIAl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OwpAQCAtOTIzLDggKzg4Niw4IEBACiAKIHN0YXRpYyBpbnQgYjQzX2tleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgaW50IGluZGV4LCB1OCBhbGdvcml0aG0sCi0JCQkgY29uc3QgdTggKiBrZXksIHNpemVfdCBrZXlfbGVuLAotCQkJIGNvbnN0IHU4ICogbWFjX2FkZHIsCisJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sCisJCQkgY29uc3QgdTggKm1hY19hZGRyLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYpCiB7CiAJaW50IGk7CkBAIC05MzcsOCArOTAwLDcgQEAKIAkJQjQzX1dBUk5fT04oZGV2LT5rZXlbaV0ua2V5Y29uZiA9PSBrZXljb25mKTsKIAl9CiAJaWYgKGluZGV4IDwgMCkgewotCQkvKiBFaXRoZXIgcGFpcndpc2Uga2V5IG9yIGFkZHJlc3MgaXMgMDA6MDA6MDA6MDA6MDA6MDAKLQkJICogZm9yIHRyYW5zbWl0LW9ubHkga2V5cy4gU2VhcmNoIHRoZSBpbmRleC4gKi8KKwkJLyogUGFpcndpc2Uga2V5LiBHZXQgYW4gZW1wdHkgc2xvdCBmb3IgdGhlIGtleS4gKi8KIAkJaWYgKGI0M19uZXdfa2lkeF9hcGkoZGV2KSkKIAkJCXN0YV9rZXlzX3N0YXJ0ID0gNDsKIAkJZWxzZQpAQCAtOTUxLDcgKzkxMyw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKGluZGV4IDwgMCkgewotCQkJYjQzZXJyKGRldi0+d2wsICJPdXQgb2YgaGFyZHdhcmUga2V5IG1lbW9yeVxuIik7CisJCQliNDN3YXJuKGRldi0+d2wsICJPdXQgb2YgaGFyZHdhcmUga2V5IG1lbW9yeVxuIik7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCX0gZWxzZQpAQCAtMTMyNCw3ICsxMjg2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYjQzX3dyaXRlX3RlbXBsYXRlX2NvbW1vbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgICAgY29uc3QgdTggKiBkYXRhLCB1MTYgc2l6ZSwKKwkJCQkgICAgICBjb25zdCB1OCAqZGF0YSwgdTE2IHNpemUsCiAJCQkJICAgICAgdTE2IHJhbV9vZmZzZXQsCiAJCQkJICAgICAgdTE2IHNobV9zaXplX29mZnNldCwgdTggcmF0ZSkKIHsKQEAgLTE1MTQsOSArMTQ3Niw5IEBACiAgKiAyKSBQYXRjaGluZyBkdXJhdGlvbiBmaWVsZAogICogMykgU3RyaXBwaW5nIFRJTQogICovCi1zdGF0aWMgY29uc3QgdTggKiBiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCSAgdTE2ICpkZXN0X3NpemUsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQorc3RhdGljIGNvbnN0IHU4ICpiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCSB1MTYgKmRlc3Rfc2l6ZSwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKIAljb25zdCB1OCAqc3JjX2RhdGE7CiAJdTggKmRlc3RfZGF0YTsKQEAgLTE5ODIsNyArMTk0NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZG9fcmVsZWFzZV9mdyhzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KQordm9pZCBiNDNfZG9fcmVsZWFzZV9mdyhzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KQogewogCXJlbGVhc2VfZmlybXdhcmUoZnctPmRhdGEpOwogCWZ3LT5kYXRhID0gTlVMTDsKQEAgLTE5OTEsMzEgKzE5NTMsMzAgQEAKIAogc3RhdGljIHZvaWQgYjQzX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWRvX3JlbGVhc2VfZncoJmRldi0+ZncudWNvZGUpOwotCWRvX3JlbGVhc2VfZncoJmRldi0+ZncucGNtKTsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LmluaXR2YWxzKTsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LmluaXR2YWxzX2JhbmQpOworCWI0M19kb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnVjb2RlKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5wY20pOworCWI0M19kb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LmluaXR2YWxzKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFsc19iYW5kKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3ByaW50X2Z3X2hlbHB0ZXh0KHN0cnVjdCBiNDNfd2wgKndsLCBib29sIGVycm9yKQogewotCWNvbnN0IGNoYXIgKnRleHQ7CisJY29uc3QgY2hhciB0ZXh0W10gPQorCQkiWW91IG11c3QgZ28gdG8gIiBcCisJCSJodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2I0MyNkZXZpY2VmaXJtd2FyZSAiIFwKKwkJImFuZCBkb3dubG9hZCB0aGUgY29ycmVjdCBmaXJtd2FyZSBmb3IgdGhpcyBkcml2ZXIgdmVyc2lvbi4gIiBcCisJCSJQbGVhc2UgY2FyZWZ1bGx5IHJlYWQgYWxsIGluc3RydWN0aW9ucyBvbiB0aGlzIHdlYnNpdGUuXG4iOwogCi0JdGV4dCA9ICJZb3UgbXVzdCBnbyB0byAiCi0JICAgICAgICJodHRwOi8vbGludXh3aXJlbGVzcy5vcmcvZW4vdXNlcnMvRHJpdmVycy9iNDMjZGV2aWNlZmlybXdhcmUgIgotCSAgICAgICAiYW5kIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHZlcnNpb24gNCkuXG4iOwogCWlmIChlcnJvcikKIAkJYjQzZXJyKHdsLCB0ZXh0KTsKIAllbHNlCiAJCWI0M3dhcm4od2wsIHRleHQpOwogfQogCi1zdGF0aWMgaW50IGRvX3JlcXVlc3RfZncoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdywKLQkJCSBib29sIHNpbGVudCkKK2ludCBiNDNfZG9fcmVxdWVzdF9mdyhzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4LAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KQogewotCWNoYXIgcGF0aFtzaXplb2YobW9kcGFyYW1fZndwb3N0Zml4KSArIDMyXTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJsb2I7CiAJc3RydWN0IGI0M19md19oZWFkZXIgKmhkcjsKIAl1MzIgc2l6ZTsKQEAgLTIwMjMsMjkgKzE5ODQsNDkgQEAKIAogCWlmICghbmFtZSkgewogCQkvKiBEb24ndCBmZXRjaCBhbnl0aGluZy4gRnJlZSBwb3NzaWJseSBjYWNoZWQgZmlybXdhcmUuICovCi0JCWRvX3JlbGVhc2VfZncoZncpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGtlZXAgaXQgYW55d2F5LCB0byBzYXZlIHNvbWUgaGVhZGFjaGUKKwkJICogb24gc3VzcGVuZC9yZXN1bWUgd2l0aCBtdWx0aWJhbmQgZGV2aWNlcy4gKi8KKwkJYjQzX2RvX3JlbGVhc2VfZncoZncpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGZ3LT5maWxlbmFtZSkgewotCQlpZiAoc3RyY21wKGZ3LT5maWxlbmFtZSwgbmFtZSkgPT0gMCkKKwkJaWYgKChmdy0+dHlwZSA9PSBjdHgtPnJlcV90eXBlKSAmJgorCQkgICAgKHN0cmNtcChmdy0+ZmlsZW5hbWUsIG5hbWUpID09IDApKQogCQkJcmV0dXJuIDA7IC8qIEFscmVhZHkgaGF2ZSB0aGlzIGZ3LiAqLwogCQkvKiBGcmVlIHRoZSBjYWNoZWQgZmlybXdhcmUgZmlyc3QuICovCi0JCWRvX3JlbGVhc2VfZncoZncpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGRvIHRoaXMgbGF0ZXIgYWZ0ZXIgd2Ugc3VjY2Vzc2Z1bGx5CisJCSAqIGdvdCB0aGUgbmV3IGZ3LiBUaGlzIGNvdWxkIHJlZHVjZSBoZWFkYWNoZSB3aXRoIG11bHRpYmFuZCBkZXZpY2VzLgorCQkgKiBXZSBjb3VsZCBhbHNvIHJlZGVzaWduIHRoaXMgdG8gY2FjaGUgdGhlIGZpcm13YXJlIGZvciBhbGwgcG9zc2libGUKKwkJICogYmFuZHMgYWxsIHRoZSB0aW1lLiAqLworCQliNDNfZG9fcmVsZWFzZV9mdyhmdyk7CiAJfQogCi0Jc25wcmludGYocGF0aCwgQVJSQVlfU0laRShwYXRoKSwKLQkJICJiNDMlcy8lcy5mdyIsCi0JCSBtb2RwYXJhbV9md3Bvc3RmaXgsIG5hbWUpOwotCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmJsb2IsIHBhdGgsIGRldi0+ZGV2LT5kZXYpOworCXN3aXRjaCAoY3R4LT5yZXFfdHlwZSkgeworCWNhc2UgQjQzX0ZXVFlQRV9QUk9QUklFVEFSWToKKwkJc25wcmludGYoY3R4LT5md25hbWUsIHNpemVvZihjdHgtPmZ3bmFtZSksCisJCQkgImI0MyVzLyVzLmZ3IiwKKwkJCSBtb2RwYXJhbV9md3Bvc3RmaXgsIG5hbWUpOworCQlicmVhazsKKwljYXNlIEI0M19GV1RZUEVfT1BFTlNPVVJDRToKKwkJc25wcmludGYoY3R4LT5md25hbWUsIHNpemVvZihjdHgtPmZ3bmFtZSksCisJCQkgImI0My1vcGVuJXMvJXMuZnciLAorCQkJIG1vZHBhcmFtX2Z3cG9zdGZpeCwgbmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUI0M19XQVJOX09OKDEpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYmxvYiwgY3R4LT5md25hbWUsIGN0eC0+ZGV2LT5kZXYtPmRldik7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7Ci0JCWlmICghc2lsZW50KSB7Ci0JCQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIG5vdCBmb3VuZFxuIiwKLQkJCSAgICAgICBwYXRoKTsKLQkJfQorCQlzbnByaW50ZihjdHgtPmVycm9yc1tjdHgtPnJlcV90eXBlXSwKKwkJCSBzaXplb2YoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0pLAorCQkJICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBub3QgZm91bmRcbiIsIGN0eC0+ZnduYW1lKTsKIAkJcmV0dXJuIGVycjsKIAl9IGVsc2UgaWYgKGVycikgewotCQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIHJlcXVlc3QgZmFpbGVkIChlcnI9JWQpXG4iLAotCQkgICAgICAgcGF0aCwgZXJyKTsKKwkJc25wcmludGYoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0sCisJCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJCSAiRmlybXdhcmUgZmlsZSBcIiVzXCIgcmVxdWVzdCBmYWlsZWQgKGVycj0lZClcbiIsCisJCQkgY3R4LT5md25hbWUsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChibG9iLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBiNDNfZndfaGVhZGVyKSkKQEAgLTIwNjgsMjAgKzIwNDksMjQgQEAKIAogCWZ3LT5kYXRhID0gYmxvYjsKIAlmdy0+ZmlsZW5hbWUgPSBuYW1lOworCWZ3LT50eXBlID0gY3R4LT5yZXFfdHlwZTsKIAogCXJldHVybiAwOwogCiBlcnJfZm9ybWF0OgotCWI0M2VycihkZXYtPndsLCAiRmlybXdhcmUgZmlsZSBcIiVzXCIgZm9ybWF0IGVycm9yLlxuIiwgcGF0aCk7CisJc25wcmludGYoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0sCisJCSBzaXplb2YoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0pLAorCQkgIkZpcm13YXJlIGZpbGUgXCIlc1wiIGZvcm1hdCBlcnJvci5cbiIsIGN0eC0+ZnduYW1lKTsKIAlyZWxlYXNlX2Zpcm13YXJlKGJsb2IpOwogCiAJcmV0dXJuIC1FUFJPVE87CiB9CiAKLXN0YXRpYyBpbnQgYjQzX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIGludCBiNDNfdHJ5X3JlcXVlc3RfZncoc3RydWN0IGI0M19yZXF1ZXN0X2Z3X2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgYjQzX2Zpcm13YXJlICpmdyA9ICZkZXYtPmZ3OwotCWNvbnN0IHU4IHJldiA9IGRldi0+ZGV2LT5pZC5yZXZpc2lvbjsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBjdHgtPmRldjsKKwlzdHJ1Y3QgYjQzX2Zpcm13YXJlICpmdyA9ICZjdHgtPmRldi0+Znc7CisJY29uc3QgdTggcmV2ID0gY3R4LT5kZXYtPmRldi0+aWQucmV2aXNpb247CiAJY29uc3QgY2hhciAqZmlsZW5hbWU7CiAJdTMyIHRtc2hpZ2g7CiAJaW50IGVycjsKQEAgLTIwOTYsNyArMjA4MSw3IEBACiAJCWZpbGVuYW1lID0gInVjb2RlMTMiOwogCWVsc2UKIAkJZ290byBlcnJfbm9fdWNvZGU7Ci0JZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPnVjb2RlLCAwKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPnVjb2RlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCkBAIC0yMTA4LDcgKzIwOTMsNyBAQAogCWVsc2UKIAkJZ290byBlcnJfbm9fcGNtOwogCWZ3LT5wY21fcmVxdWVzdF9mYWlsZWQgPSAwOwotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5wY20sIDEpOworCWVyciA9IGI0M19kb19yZXF1ZXN0X2Z3KGN0eCwgZmlsZW5hbWUsICZmdy0+cGNtKTsKIAlpZiAoZXJyID09IC1FTk9FTlQpIHsKIAkJLyogV2UgZGlkIG5vdCBmaW5kIGEgUENNIGZpbGU/IE5vdCBmYXRhbCwgYnV0CiAJCSAqIGNvcmUgcmV2IDw9IDEwIG11c3QgZG8gd2l0aG91dCBod2NyeXB0byB0aGVuLiAqLwpAQCAtMjE0NCw3ICsyMTI5LDcgQEAKIAlkZWZhdWx0OgogCQlnb3RvIGVycl9ub19pbml0dmFsczsKIAl9Ci0JZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzLCAwKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCkBAIC0yMTc4LDMwICsyMTYzLDM0IEBACiAJZGVmYXVsdDoKIAkJZ290byBlcnJfbm9faW5pdHZhbHM7CiAJfQotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFsc19iYW5kLCAwKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzX2JhbmQpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2xvYWQ7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2xvYWQ6Ci0JYjQzX3ByaW50X2Z3X2hlbHB0ZXh0KGRldi0+d2wsIDEpOwotCWdvdG8gZXJyb3I7Ci0KIGVycl9ub191Y29kZToKLQllcnIgPSAtRU5PREVWOwotCWI0M2VycihkZXYtPndsLCAiTm8gbWljcm9jb2RlIGF2YWlsYWJsZSBmb3IgY29yZSByZXYgJXVcbiIsIHJldik7CisJZXJyID0gY3R4LT5mYXRhbF9mYWlsdXJlID0gLUVPUE5PVFNVUFA7CisJYjQzZXJyKGRldi0+d2wsICJUaGUgZHJpdmVyIGRvZXMgbm90IGtub3cgd2hpY2ggZmlybXdhcmUgKHVjb2RlKSAiCisJICAgICAgICJpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgKHdsLWNvcmUgcmV2ICV1KVxuIiwgcmV2KTsKIAlnb3RvIGVycm9yOwogCiBlcnJfbm9fcGNtOgotCWVyciA9IC1FTk9ERVY7Ci0JYjQzZXJyKGRldi0+d2wsICJObyBQQ00gYXZhaWxhYmxlIGZvciBjb3JlIHJldiAldVxuIiwgcmV2KTsKKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmUgPSAtRU9QTk9UU1VQUDsKKwliNDNlcnIoZGV2LT53bCwgIlRoZSBkcml2ZXIgZG9lcyBub3Qga25vdyB3aGljaCBmaXJtd2FyZSAoUENNKSAiCisJICAgICAgICJpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgKHdsLWNvcmUgcmV2ICV1KVxuIiwgcmV2KTsKIAlnb3RvIGVycm9yOwogCiBlcnJfbm9faW5pdHZhbHM6Ci0JZXJyID0gLUVOT0RFVjsKLQliNDNlcnIoZGV2LT53bCwgIk5vIEluaXRpYWwgVmFsdWVzIGZpcm13YXJlIGZpbGUgZm9yIFBIWSAldSwgIgotCSAgICAgICAiY29yZSByZXYgJXVcbiIsIGRldi0+cGh5LnR5cGUsIHJldik7CisJZXJyID0gY3R4LT5mYXRhbF9mYWlsdXJlID0gLUVPUE5PVFNVUFA7CisJYjQzZXJyKGRldi0+d2wsICJUaGUgZHJpdmVyIGRvZXMgbm90IGtub3cgd2hpY2ggZmlybXdhcmUgKGluaXR2YWxzKSAiCisJICAgICAgICJpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgKHdsLWNvcmUgcmV2ICV1KVxuIiwgcmV2KTsKKwlnb3RvIGVycm9yOworCitlcnJfbG9hZDoKKwkvKiBXZSBmYWlsZWQgdG8gbG9hZCB0aGlzIGZpcm13YXJlIGltYWdlLiBUaGUgZXJyb3IgbWVzc2FnZQorCSAqIGFscmVhZHkgaXMgaW4gY3R4LT5lcnJvcnMuIFJldHVybiBhbmQgbGV0IG91ciBjYWxsZXIgZGVjaWRlCisJICogd2hhdCB0byBkby4gKi8KIAlnb3RvIGVycm9yOwogCiBlcnJvcjoKQEAgLTIyMDksNiArMjE5OCw0OCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYjQzX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0ICpjdHg7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKwljb25zdCBjaGFyICplcnJtc2c7CisKKwljdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCWN0eC0+ZGV2ID0gZGV2OworCisJY3R4LT5yZXFfdHlwZSA9IEI0M19GV1RZUEVfUFJPUFJJRVRBUlk7CisJZXJyID0gYjQzX3RyeV9yZXF1ZXN0X2Z3KGN0eCk7CisJaWYgKCFlcnIpCisJCWdvdG8gb3V0OyAvKiBTdWNjZXNzZnVsbHkgbG9hZGVkIGl0LiAqLworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWN0eC0+cmVxX3R5cGUgPSBCNDNfRldUWVBFX09QRU5TT1VSQ0U7CisJZXJyID0gYjQzX3RyeV9yZXF1ZXN0X2Z3KGN0eCk7CisJaWYgKCFlcnIpCisJCWdvdG8gb3V0OyAvKiBTdWNjZXNzZnVsbHkgbG9hZGVkIGl0LiAqLworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIENvdWxkIG5vdCBmaW5kIGEgdXNhYmxlIGZpcm13YXJlLiBQcmludCB0aGUgZXJyb3JzLiAqLworCWZvciAoaSA9IDA7IGkgPCBCNDNfTlJfRldUWVBFUzsgaSsrKSB7CisJCWVycm1zZyA9IGN0eC0+ZXJyb3JzW2ldOworCQlpZiAoc3RybGVuKGVycm1zZykpCisJCQliNDNlcnIoZGV2LT53bCwgZXJybXNnKTsKKwl9CisJYjQzX3ByaW50X2Z3X2hlbHB0ZXh0KGRldi0+d2wsIDEpOworCWVyciA9IC1FTk9FTlQ7CisKK291dDoKKwlrZnJlZShjdHgpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYjQzX3VwbG9hZF9taWNyb2NvZGUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCWNvbnN0IHNpemVfdCBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBiNDNfZndfaGVhZGVyKTsKQEAgLTIzMTksOCArMjM1MCwxMSBAQAogCX0KIAogCWlmIChiNDNfaXNfb2xkX3R4aGRyX2Zvcm1hdChkZXYpKSB7CisJCS8qIFdlJ3JlIG92ZXIgdGhlIGRlYWRsaW5lLCBidXQgd2Uga2VlcCBzdXBwb3J0IGZvciBvbGQgZncKKwkJICogdW50aWwgaXQgdHVybnMgb3V0IHRvIGJlIGluIG1ham9yIGNvbmZsaWN0IHdpdGggc29tZXRoaW5nIG5ldy4gKi8KIAkJYjQzd2FybihkZXYtPndsLCAiWW91IGFyZSB1c2luZyBhbiBvbGQgZmlybXdhcmUgaW1hZ2UuICIKLQkJCSJTdXBwb3J0IGZvciBvbGQgZmlybXdhcmUgd2lsbCBiZSByZW1vdmVkIGluIEp1bHkgMjAwOC5cbiIpOworCQkJIlN1cHBvcnQgZm9yIG9sZCBmaXJtd2FyZSB3aWxsIGJlIHJlbW92ZWQgc29vbiAiCisJCQkiKG9mZmljaWFsIGRlYWRsaW5lIHdhcyBKdWx5IDIwMDgpLlxuIik7CiAJCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAwKTsKIAl9CiAKQEAgLTI5NDYsNyArMjk4MCw3IEBACiAJYjQzX2NsZWFyX2tleXMoZGV2KTsKIH0KIAotc3RhdGljIGludCBiNDNfcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqIGRhdGEpCitzdGF0aWMgaW50IGI0M19ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdTMyICpkYXRhKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gKHN0cnVjdCBiNDNfd2wgKilybmctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMyMjEsNiArMzI1NSw0MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IGI0M19vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisJdTY0IHRzZjsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKQorCQliNDNfdHNmX3JlYWQoZGV2LCAmdHNmKTsKKwllbHNlCisJCXRzZiA9IDA7CisKKwlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHRzZjsKK30KKworc3RhdGljIHZvaWQgYjQzX29wX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKQorCQliNDNfdHNmX3dyaXRlKGRldiwgdHNmKTsKKworCXNwaW5fdW5sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIGI0M19wdXRfcGh5X2ludG9fcmVzZXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBzc2JfZGV2aWNlICpzZGV2ID0gZGV2LT5kZXY7CkBAIC0zMjQwLDcgKzMzMTEsNyBAQAogCW1zbGVlcCgxKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBiYW5kX3RvX3N0cmluZyhlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCitzdGF0aWMgY29uc3QgY2hhciAqYmFuZF90b19zdHJpbmcoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXN3aXRjaCAoYmFuZCkgewogCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKQEAgLTM0NDIsNyArMzUxMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYjQzX3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCBicmF0ZXMpCitzdGF0aWMgdm9pZCBiNDNfdXBkYXRlX2Jhc2ljX3JhdGVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGJyYXRlcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CiAJCWRldi0+d2wtPmh3LT53aXBoeS0+YmFuZHNbYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKV07CkBAIC0zNTIwLDIxICszNTkxLDI5IEBACiB9CiAKIHN0YXRpYyBpbnQgYjQzX29wX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGFsZ29yaXRobTsKIAl1OCBpbmRleDsKIAlpbnQgZXJyOworCXN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCiAJaWYgKG1vZHBhcmFtX25vaHdjcnlwdCkKIAkJcmV0dXJuIC1FTk9TUEM7IC8qIFVzZXIgZGlzYWJsZWQgSFctY3J5cHRvICovCiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOworCXdyaXRlX2xvY2soJndsLT50eF9sb2NrKTsKKwkvKiBXaHkgZG8gd2UgbmVlZCBhbGwgdGhpcyBsb2NraW5nIGhlcmU/CisJICogbXV0ZXggICAgIC0+IEV2ZXJ5IGNvbmZpZyBvcGVyYXRpb24gbXVzdCB0YWtlIGl0LgorCSAqIGlycV9sb2NrICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAorCSAqICAgICAgICAgICAgICBpbiB0aGUgSVJRIGhhbmRsZXJzLgorCSAqIHR4X2xvY2sgICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAorCSAqICAgICAgICAgICAgICBpbiB0aGUgVFggaGFuZGxlci4KKwkgKi8KIAogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAllcnIgPSAtRU5PREVWOwpAQCAtMzU1MSw3ICszNjMwLDcgQEAKIAllcnIgPSAtRUlOVkFMOwogCXN3aXRjaCAoa2V5LT5hbGcpIHsKIAljYXNlIEFMR19XRVA6Ci0JCWlmIChrZXktPmtleWxlbiA9PSA1KQorCQlpZiAoa2V5LT5rZXlsZW4gPT0gTEVOX1dFUDQwKQogCQkJYWxnb3JpdGhtID0gQjQzX1NFQ19BTEdPX1dFUDQwOwogCQllbHNlCiAJCQlhbGdvcml0aG0gPSBCNDNfU0VDX0FMR09fV0VQMTA0OwpAQCAtMzU3OCwxNyArMzY1NywxOSBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKLQkJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKSB7Ci0JCQkvKiBhZGRyIGlzIEZGOkZGOkZGOkZGOkZGOkZGIGZvciBkZWZhdWx0IGtleXMgKi8KKwkJaWYgKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpIHsKKwkJCWlmIChXQVJOX09OKCFzdGEpKSB7CisJCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQkJLyogUGFpcndpc2Uga2V5IHdpdGggYW4gYXNzaWduZWQgTUFDIGFkZHJlc3MuICovCisJCQllcnIgPSBiNDNfa2V5X3dyaXRlKGRldiwgLTEsIGFsZ29yaXRobSwKKwkJCQkJICAgIGtleS0+a2V5LCBrZXktPmtleWxlbiwKKwkJCQkJICAgIHN0YS0+YWRkciwga2V5KTsKKwkJfSBlbHNlIHsKKwkJCS8qIEdyb3VwIGtleSAqLwogCQkJZXJyID0gYjQzX2tleV93cml0ZShkZXYsIGluZGV4LCBhbGdvcml0aG0sCiAJCQkJCSAgICBrZXktPmtleSwga2V5LT5rZXlsZW4sIE5VTEwsIGtleSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogZWl0aGVyIHBhaXJ3aXNlIGtleSBvciBhZGRyZXNzIGlzIDAwOjAwOjAwOjAwOjAwOjAwCi0JCQkgKiBmb3IgdHJhbnNtaXQtb25seSBrZXlzCi0JCQkgKi8KLQkJCWVyciA9IGI0M19rZXlfd3JpdGUoZGV2LCAtMSwgYWxnb3JpdGhtLAotCQkJCQkgICAga2V5LT5rZXksIGtleS0+a2V5bGVuLCBhZGRyLCBrZXkpOwogCQl9CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bmxvY2s7CkBAIC0zNjE3LDEwICszNjk4LDExIEBACiAJCWI0M2RiZyh3bCwgIiVzIGhhcmR3YXJlIGJhc2VkIGVuY3J5cHRpb24gZm9yIGtleWlkeDogJWQsICIKIAkJICAgICAgICJtYWM6ICVwTVxuIiwKIAkJICAgICAgIGNtZCA9PSBTRVRfS0VZID8gIlVzaW5nIiA6ICJEaXNhYmxpbmciLCBrZXktPmtleWlkeCwKLQkJICAgICAgIGFkZHIpOworCQkgICAgICAgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkcik7CiAJCWI0M19kdW1wX2tleW1lbW9yeShkZXYpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKwl3cml0ZV91bmxvY2soJndsLT50eF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKQEAgLTM3OTYsNiArMzg3OCwxMiBAQAogCQlicmVhazsKICNpZmRlZiBDT05GSUdfQjQzX05QSFkKIAljYXNlIEI0M19QSFlUWVBFX046CisJCWlmIChwaHlfcmV2ID4gNCkKKwkJCXVuc3VwcG9ydGVkID0gMTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQjQzX1BIWV9MUAorCWNhc2UgQjQzX1BIWVRZUEVfTFA6CiAJCWlmIChwaHlfcmV2ID4gMSkKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7CkBAIC0zODQ5LDcgKzM5MzcsMTEgQEAKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBCNDNfUEhZVFlQRV9OOgotCQlpZiAocmFkaW9fdmVyICE9IDB4MjA1NSkKKwkJaWYgKHJhZGlvX3ZlciAhPSAweDIwNTUgJiYgcmFkaW9fdmVyICE9IDB4MjA1NikKKwkJCXVuc3VwcG9ydGVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfUEhZVFlQRV9MUDoKKwkJaWYgKHJhZGlvX3ZlciAhPSAweDIwNjIpCiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00MDc4LDExICs0MTcwLDIxIEBACiAJCQloZiB8PSBCNDNfSEZfR0RDVzsKIAkJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9QQUNUUkwpCiAJCQloZiB8PSBCNDNfSEZfT0ZETVBBQk9PU1Q7Ci0JfSBlbHNlIGlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgewotCQloZiB8PSBCNDNfSEZfU1lNVzsKLQkJaWYgKHBoeS0+cmV2ID49IDIgJiYgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKQotCQkJaGYgJj0gfkI0M19IRl9HRENXOwogCX0KKwlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKSB7CisJCWlmIChwaHktPnJhZGlvX3JldiA9PSA2KQorCQkJaGYgfD0gQjQzX0hGXzQzMThUU1NJOworCQlpZiAocGh5LT5yYWRpb19yZXYgPCA2KQorCQkJaGYgfD0gQjQzX0hGX1ZDT1JFQ0FMQzsKKwl9CisJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9YVEFMX05PU0xPVykKKwkJaGYgfD0gQjQzX0hGX0RTQ1JROyAvKiBEaXNhYmxlIHNsb3djbG9jayByZXF1ZXN0cyBmcm9tIHVjb2RlLiAqLworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwlpZiAoKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpICYmCisJICAgIChidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpCisJCWhmIHw9IEI0M19IRl9QQ0lTQ1c7IC8qIFBDSSBzbG93IGNsb2NrIHdvcmthcm91bmQuICovCisjZW5kaWYKKwloZiAmPSB+QjQzX0hGX1NLQ0ZQVVA7CiAJYjQzX2hmX3dyaXRlKGRldiwgaGYpOwogCiAJYjQzX3NldF9yZXRyeV9saW1pdHMoZGV2LCBCNDNfREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCwKQEAgLTQxMjEsNyArNDIyMyw3IEBACiAJYjQzX3NldF9zeW50aF9wdV9kZWxheShkZXYsIDEpOwogCWI0M19ibHVldG9vdGhfY29leHRfZW5hYmxlKGRldik7CiAKLQlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsJLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLworCXNzYl9idXNfcG93ZXJ1cChidXMsICEoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1hUQUxfTk9TTE9XKSk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKIAliNDNfc2VjdXJpdHlfaW5pdChkZXYpOwogCWlmICghZGV2LT5zdXNwZW5kX2luX3Byb2dyZXNzKQpAQCAtNDMwNSw2ICs0NDA3LDM0IEBACiAJQjQzX1dBUk5fT04oIXZpZiB8fCB3bC0+dmlmICE9IHZpZik7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKSB7CisJCS8qIERpc2FibGUgQ0ZQIHVwZGF0ZSBkdXJpbmcgc2NhbiBvbiBvdGhlciBjaGFubmVscy4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9TS0NGUFVQKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBiNDNfb3Bfc3dfc2Nhbl9jb21wbGV0ZV9ub3RpZmllcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkgeworCQkvKiBSZS1lbmFibGUgQ0ZQIHVwZGF0ZS4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfU0tDRlBVUCk7CisJfQorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGI0M19od19vcHMgPSB7CiAJLnR4CQkJPSBiNDNfb3BfdHgsCiAJLmNvbmZfdHgJCT0gYjQzX29wX2NvbmZfdHgsCkBAIC00MzE3LDEwICs0NDQ3LDE0IEBACiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKKwkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKKwkuc2V0X3RzZgkJPSBiNDNfb3Bfc2V0X3RzZiwKIAkuc3RhcnQJCQk9IGI0M19vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzX29wX3N0b3AsCiAJLnNldF90aW0JCT0gYjQzX29wX2JlYWNvbl9zZXRfdGltLAogCS5zdGFfbm90aWZ5CQk9IGI0M19vcF9zdGFfbm90aWZ5LAorCS5zd19zY2FuX3N0YXJ0CQk9IGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyLAorCS5zd19zY2FuX2NvbXBsZXRlCT0gYjQzX29wX3N3X3NjYW5fY29tcGxldGVfbm90aWZpZXIsCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtNDQ0Niw2ICs0NTgwLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwkJY2FzZSBCNDNfUEhZVFlQRV9MUDoKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NjU3LDkgKzQ3OTIsMTAgQEAKIAlJTklUX1dPUksoJndsLT50eHBvd2VyX2FkanVzdF93b3JrLCBiNDNfcGh5X3R4cG93ZXJfYWRqdXN0X3dvcmspOwogCiAJc3NiX3NldF9kZXZ0eXBlZGF0YShkZXYsIHdsKTsKLQliNDNpbmZvKHdsLCAiQnJvYWRjb20gJTA0WCBXTEFOIGZvdW5kXG4iLCBkZXYtPmJ1cy0+Y2hpcF9pZCk7CisJYjQzaW5mbyh3bCwgIkJyb2FkY29tICUwNFggV0xBTiBmb3VuZCAoY29yZSByZXZpc2lvbiAldSlcbiIsCisJCWRldi0+YnVzLT5jaGlwX2lkLCBkZXYtPmlkLnJldmlzaW9uKTsKIAllcnIgPSAwOwotICAgICAgb3V0Ogorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCmluZGV4IGY4NzFhMjUuLjQwYWJjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaApAQCAtNDAsNiArNDAsMjQgQEAKIAogCiBleHRlcm4gaW50IGI0M19tb2RwYXJhbV9xb3M7CitleHRlcm4gaW50IGI0M19tb2RwYXJhbV92ZXJib3NlOworCisvKiBMb2dtZXNzYWdlIHZlcmJvc2l0eSBsZXZlbHMuIFVwZGF0ZSB0aGUgYjQzX21vZHBhcmFtX3ZlcmJvc2UgaGVscHRleHQsIGlmCisgKiB5b3UgYWRkIG9yIHJlbW92ZSBsZXZlbHMuICovCitlbnVtIGI0M192ZXJib3NpdHkgeworCUI0M19WRVJCT1NJVFlfRVJST1IsCisJQjQzX1ZFUkJPU0lUWV9XQVJOLAorCUI0M19WRVJCT1NJVFlfSU5GTywKKwlCNDNfVkVSQk9TSVRZX0RFQlVHLAorCV9fQjQzX1ZFUkJPU0lUWV9BRlRFUkxBU1QsIC8qIGtlZXAgbGFzdCAqLworCisJQjQzX1ZFUkJPU0lUWV9NQVggPSBfX0I0M19WRVJCT1NJVFlfQUZURVJMQVNUIC0gMSwKKyNpZiBCNDNfREVCVUcKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0RFQlVHLAorI2Vsc2UKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0lORk8sCisjZW5kaWYKK307CiAKIAogLyogTGlnaHR3ZWlnaHQgZnVuY3Rpb24gdG8gY29udmVydCBhIGZyZXF1ZW5jeSAoaW4gTWh6KSB0byBhIGNoYW5uZWwgbnVtYmVyLiAqLwpAQCAtMTIxLDQgKzEzOSwxMSBAQAogdm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAorCitzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dDsKK2ludCBiNDNfZG9fcmVxdWVzdF9mdyhzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4LAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KTsKK3ZvaWQgYjQzX2RvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdyk7CisKICNlbmRpZiAvKiBCNDNfTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwppbmRleCA3ZmU5ZDE3Li5jODM2YzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwpAQCAtMTIxLDI3ICsxMjEsMTggQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNywgKHI4IDw8IDQpIHwgcjgpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDIwLCAocjggPDwgNCkgfCByOCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjEsIChyOCA8PCA0KSB8IHI4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyMiwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMjIpCi0JCQkJCSYgMHgwMDBGKSB8IChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjIsIDB4MDAwRiwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQSwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQiwgKHI4IDw8IDQpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwOCwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDgpCi0JCQkJCSYgMHgwMEYwKSB8IChyOCA8PCA0KSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjksIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDI5KQotCQkJCQkmIDB4RkYwRikgfCAweDAwQjApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA4LCAweDAwRjAsIChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjksIDB4RkYwRiwgMHgwMEIwKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwgMHgwMEFBKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNiwgMHgwMDg1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzQSwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwM0EpCi0JCQkJCSYgMHhGRjIwKSB8Ci0JCQkgIGZyZXFfcjNBX3ZhbHVlKGZyZXEpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzRCwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzRCkgJiAweDAwRkYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkKLQkJCQkJJiAweEZGN0YpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkgJiAweEZGRUYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDM1LCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkKLQkJCQkJJiAweEZGRUYpIHwgMHgwMDEwKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzQSwgMHhGRjIwLCBmcmVxX3IzQV92YWx1ZShmcmVxKSk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwM0QsIDB4MDBGRik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIDB4RkY3RiwgMHgwMDgwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAzNSwgMHhGRkVGKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkVGLCAweDAwMTApOwogCWI0M19yYWRpb19zZXRfdHhfaXEoZGV2KTsKIAkvL1RPRE86IFRTU0kyZGJtIHdvcmthcm91bmQKIC8vRklYTUUJYjQzX3BoeV94bWl0cG93ZXIoZGV2KTsKQEAgLTE2MCwyMyArMTUxLDIwIEBACiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODIsIDB4MDA4MCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODAsIDB4MDAwMCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwM0YsIDB4MDBEQSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDUpICYgfjB4MDAwOCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAxMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDUsIH4weDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDgxLCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA4MSwgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwMjApOwogCW1zbGVlcCgxKTsJCS8qIGRlbGF5IDQwMHVzZWMgKi8KIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDIwKSB8IDB4MDAxMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIH4weDAwMjAsIDB4MDAxMCk7CiAJbXNsZWVwKDEpOwkJLyogZGVsYXkgNDAwdXNlYyAqLwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA1KSAmIH4weDAwMDgpIHwgMHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4NSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4NSkgJiB+MHgwMDEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNSkgJiB+MHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDQwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDA0MCkgfCAweDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA1LCB+MHgwMDA4LCAweDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDg1LCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAwNSwgfjB4MDAwOCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDgxLCB+MHgwMDQwLCAweDAwNDApOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA1LAogCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDA4KSB8IDB4MDAwOCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MywgMHhEREM2KTsKQEAgLTIyNCwyMiArMjEyLDE2IEBACiAJdTE2IGIsIGN1cnJfcywgYmVzdF9zID0gMHhGRkZGOwogCWludCBpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH5CNDNfUEhZX0NSUzBfRU4pOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksCi0JCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgfCAweDEwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MikpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDksCi0JCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDkpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAxMiwKLQkJKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMTIpICYgMHhGRkZDKSB8IDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCB+QjQzX1BIWV9DUlMwX0VOKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgMHgxMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksIDB4RjBGRiwgMHgwMzAwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDA5LCAweDAwODApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDEyLCAweEZGRkMsIDB4MDAwMik7CiAJYjQzX3dhX2luaXRnYWlucyhkZXYpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCQSksIDB4M0VENSk7CiAJYiA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUFdSRE9XTik7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUFdSRE9XTiwgKGIgJiAweEZGRjgpIHwgMHgwMDA1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwKLQkJYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNCkgfCAweDAwMDQpOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwMDQsIDB4MDAwNCk7CiAJZm9yIChpID0gMHgxMDsgaSA8PSAweDIwOyBpKyspIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGkpOwogCQljdXJyX3MgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09UQUJMRVEpICYgMHgwMEZGOwpAQCAtMjUyLDggKzIzNCw3IEBACiAJCQliZXN0X3MgPSBjdXJyX3M7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BXUkRPV04sIGIpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA0KSAmIDB4RkZGQik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDQsIDB4RkZGQik7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGJlc3Rfcyk7CiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzFfUjEsIDAsIDB4RkZFQyk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI3KSwgMHgxRTgwKTsKQEAgLTI2MSwxNCArMjQyLDEwIEBACiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI1KSwgMHgwRUMwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QjIpLCAweDAwQzApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCOSksIDB4MUZGRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEJCKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEJCKSkgJiAweEYwMDApIHwgMHgwMDUzKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNNjEsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE02MSkgJiAweEZFMUYpIHwgMHgwMTIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpKSAmIDB4MEZGRikgfCAweDMwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCkpICYgMHgwRkZGKSB8IDB4MzAwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpLCAweEYwMDAsIDB4MDA1Myk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNNjEsIDB4RkUxRiwgMHgwMTIwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMyksIDB4MEZGRiwgMHgzMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksIDB4MEZGRiwgMHgzMDAwKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgNiwgMHgwMDE3KTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgaSwgMHgwMDBGKTsKQEAgLTI3Niw4ICsyNTMsNyBAQAogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBFLCAweDAwMTEpOwogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBGLCAweDAwMTMpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgzMyksIDB4NTAzMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSB8IEI0M19QSFlfQ1JTMF9FTik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NSUzAsIEI0M19QSFlfQ1JTMF9FTik7CiB9CiAKIHN0YXRpYyB2b2lkIGhhcmR3YXJlX3BjdGxfaW5pdF9hcGh5KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTMwMCwyNiArMjc2LDIxIEBACiAKIAlpZiAocGh5LT5yZXYgPj0gNikgewogCQlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0EpCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgxMDAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgfjB4MTAwMCk7CiAJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgJiBCNDNfUEhZX0VOQ09SRV9FTikKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VOQ09SRSwKLQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgfCAweDAwMTApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VOQ09SRSwgMHgwMDEwKTsKIAkJZWxzZQotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRU5DT1JFLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRU5DT1JFKSAmIH4weDEwMTApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9FTkNPUkUsIH4weDEwMTApOwogCX0KIAogCWI0M193YV9hbGwoZGV2KTsKIAogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkgewogCQlpZiAocGh5LT5nbW9kZSAmJiAocGh5LT5yZXYgPCAzKSkKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzQsCi0JCQkJYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM0KSB8IDB4MDAwMSk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNCwgMHgwMDAxKTsKIAkJYjQzX3BoeV9yc3NpYWdjKGRldiwgMCk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkgfCBCNDNfUEhZX0NSUzBfRU4pOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ1JTMCwgQjQzX1BIWV9DUlMwX0VOKTsKIAogCQliNDNfcmFkaW9faW5pdDIwNjAoZGV2KTsKIApAQCAtMzM5LDkgKzMxMCw3IEBACiAKIAlpZiAoKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKSAmJgogCSAgICAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4NkUpLAotCQkJCSAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSkKLQkJCQkgICAmIDB4RTAwMCkgfCAweDNDRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSwgMHhFMDAwLCAweDNDRik7CiAJfQogfQogCkBAIC01MjAsMTQgKzQ4OSwxNCBAQAogCQkJcmV0dXJuOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwgMHgwMEMwKTsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTAsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMCkgJiAweEZGRjcpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTEpICYgMHhGRkY3KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDEwLCAweEZGRjcpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwMTEsIDB4RkZGNyk7CiAJCWI0M19yYWRpb19pbml0MjA2MChkZXYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LCAweDAwRkYpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgMHgwMEZCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDEwKSB8IDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMSkgfCAweDAwMDgpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxMCwgMHgwMDA4KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwMTEsIDB4MDAwOCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jCmluZGV4IGNhYWM0YTQ1Li5lN2I5OGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwpAQCAtMjA0LDEzICsyMDQsOSBAQAogCQkJCQkJICYgMHhGRkYwKSB8CiAJCQkgICAgYmFzZWJhbmRfYXR0ZW51YXRpb24pOwogCX0gZWxzZSBpZiAocGh5LT5hbmFsb2cgPiAxKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkZDMykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRkMzLCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkY4NykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRjg3LCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOwogCX0KIH0KIApAQCAtMjUyLDE3ICsyNDgsMTMgQEAKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLAogCQkJCSAgKHJmICYgMHgwMDBGKSB8ICh0eF9jb250cm9sICYgMHgwMDcwKSk7CiAJfSBlbHNlIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpCi0JCQkJCSAgICAgICYgMHhGRkYwKSB8IChyZiAmIDB4MDAwRikpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiB+MHgwMDcwKSB8ICh0eF9jb250cm9sICYKLQkJCQkJCQkgICAgMHgwMDcwKSk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCAocmYgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCB+MHgwMDcwLCAodHhfY29udHJvbCAmIDB4MDA3MCkpOwogCX0KIAlpZiAoaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIHR4X21hZ24gfCB0eF9iaWFzKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiAweEZGRjApIHwgKHR4X2JpYXMgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsICh0eF9iaWFzICYgMHgwMDBGKSk7CiAJfQogCWI0M19sb19nX2FkanVzdChkZXYpOwogfQpAQCAtMzM3LDEyICszMjksOSBAQAogCiAJaWYgKHRoaXJkICE9IC0xKSB7CiAJCXRtcCA9ICgodTE2KSB0aGlyZCA8PCAxNCkgfCAoKHUxNikgdGhpcmQgPDwgNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCB0bXApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEJGQkYpIHwgdG1wKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhCRkJGKSB8IHRtcCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMCwgMHhCRkJGLCB0bXApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgdG1wKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEJGQkYsIHRtcCk7CiAJfQogCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2KTsKIH0KQEAgLTM3MywxMiArMzYyLDkgQEAKIAlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgdGFibGUsIGksIGkgLSBzdGFydCk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCAweDQwNDApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpICYgMHhCRkJGKSB8IDB4NDA0MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikgJiAweEJGQkYpIHwgMHg0MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4QkZCRiwgMHg0MDAwKTsKIAliNDNfZHVtbXlfdHJhbnNtaXNzaW9uKGRldik7CiB9CiAKQEAgLTQ1NCwxMyArNDQwLDExIEBACiAJYmFja3VwWzEwXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwogCWJhY2t1cFsxMV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDQzKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MjksIGI0M19waHlfcmVhZChkZXYsIDB4MDQyOSkgJiAweDdGRkYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMDEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMDEpICYgMHgzRkZGKSB8IDB4NDAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgJiAweEZGRjMpIHwgMHgwMDA0KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgfigweDEgfCAweDIpKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MjksIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDAxLCAweDNGRkYsIDB4NDAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAwQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGRjMsIDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCB+KDB4MSB8IDB4MikpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWJhY2t1cFsxMl0gPSBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMkUpOwogCQliYWNrdXBbMTNdID0gYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJGKTsKQEAgLTQ3NSwxMyArNDU5LDEzIEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODBGLCAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMCwgMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ3OCkgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpIHwgMHgwMDQwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDYwKSB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkgfCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwMTAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDYwLCAweDAwNDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxNCwgMHgwMjAwKTsKIAl9Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDcwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwODApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMzApOwogCiAJdjQ3RiA9IChzMTYpICgoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7CkBAIC01MDEsNDAgKzQ4NSwzMSBAQAogCQlpZiAoc2F2ZWQgPT0gMHhGRkZGKQogCQkJc2F2ZWQgPSA0OwogCX0gZWxzZSB7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwN0YpOworCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3QSwgMHgwMDdGKTsKIAkJaWYgKHBoeS0+cmV2ICE9IDEpIHsJLyogTm90IGluIHNwZWNzLCBidXQgbmVlZGVkIHRvIHByZXZlbnQgUFBDIG1hY2hpbmUgY2hlY2sgKi8KLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE0KSB8IDB4MDAwMSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODE1LAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgxNSkgJiAweEZGRkUpOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTQsIDB4MDAwMSk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTUsIDB4RkZGRSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgfCAweDAwMEMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpIHwgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSB8IDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODExLCAweDAwMEMpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDgxMiwgMHgwMDBDKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODEyLCAweDAwMzApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVBLCAweDA0ODApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU5LCAweDA4MTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCAweDAwMEQpOwogCQlpZiAocGh5LT5yZXYgPT0gMCkgewogCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgMHgwMTIyKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAwQSkKLQkJCQkgICAgICB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAwQSwgMHgyMDAwKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxNCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTQpIHwgMHgwMDA0KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTUsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE1KSAmIDB4RkZGQik7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDgxNCwgMHgwMDA0KTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDgxNSwgMHhGRkZCKTsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDAzLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDAzKSAmIDB4RkY5RikKLQkJCSAgICAgIHwgMHgwMDQwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOworCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCQliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNDMpCi0JCQkJCQkmIDB4MDBGMCkgfCAweDAwMEYpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA0MywgMHgwMEYwLCAweDAwMEYpOwogCQl1ZGVsYXkoMzApOwogCQl2NDdGID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAkJaWYgKHY0N0YgPj0gMHgyMCkKQEAgLTU3Niw3ICs1NTEsNyBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDQzLCBiYWNrdXBbMTFdKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYmFja3VwWzEwXSk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSB8IDB4MSB8IDB4Mik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyOSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDI5KSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0MjksIDB4ODAwMCk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNl0pOwpAQCAtNjA0LDkgKzU3OSw4IEBACiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpCiAJCWI0M19jYWxjX25yc3NpX29mZnNldChkZXYpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpICYgMHg3RkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDdGRkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDgwMiwgMHhGRkZDKTsKIAliYWNrdXBbN10gPSBiNDNfcmVhZDE2KGRldiwgMHgwM0UyKTsKIAliNDNfd3JpdGUxNihkZXYsIDB4MDNFMiwgYjQzX3JlYWQxNihkZXYsIDB4MDNFMikgfCAweDgwMDApOwogCWJhY2t1cFswXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwpAQCAtNjMzLDY2ICs2MDcsNDQgQEAKIAkJY2FzZSA0OgogCQljYXNlIDY6CiAJCWNhc2UgNzoKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KQotCQkJCSAgICAgIHwgMHgwMTAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAxKQotCQkJCSAgICAgIHwgMHgwMDQwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDc4LCAweDAxMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQljYXNlIDU6Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMSkKLQkJCQkgICAgICAmIDB4RkZCRik7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MDEsIDB4RkZCRik7CiAJCQlicmVhazsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNjApCi0JCQkgICAgICB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkKLQkJCSAgICAgIHwgMHgwMjAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNjAsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDE0LCAweDAyMDApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwNzApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAwLCA4LCAwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwRjcpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDdBLCAweDAwRjcpOwogCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSAmIDB4RkZDRikgfAotCQkJICAgICAgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDMwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGQ0YsIDB4MDAxMCk7CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDA4MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMjApOwogCiAJbnJzc2kwID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAlpZiAobnJzc2kwID49IDB4MDAyMCkKIAkJbnJzc2kwIC09IDB4MDA0MDsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSAmIDB4MDA3Rik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwN0EsIDB4MDA3Rik7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMykKLQkJCQkJICAgICYgMHhGRjlGKSB8IDB4MDA0MCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOwogCX0KIAogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQsCiAJCSAgICBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQpCiAJCSAgICB8IDB4MjAwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDBGKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTUsIDB4RjMzMCk7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMjApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMSkgJiAweEZGQ0YpIHwKLQkJCSAgICAgIDB4MDAyMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDgxMiwgMHhGRkNGLCAweDAwMjApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDIwKTsKIAl9CiAKIAliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwpAQCAtNzI2LDEwICs2NzgsOCBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0xPX0NPTlRST0wsIGJhY2t1cFsxM10pOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gMikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODEyLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSAmIDB4RkZDRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpICYgMHhGRkNGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwODEyLCAweEZGQ0YpOworCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTEsIDB4RkZDRik7CiAJfQogCiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGJhY2t1cFswXSk7CkBAIC03NDMsMTEgKzY5Myw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1OSwgYmFja3VwWzVdKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCBiYWNrdXBbNl0pOwogCWI0M19zeW50aF9wdV93b3JrYXJvdW5kKGRldiwgcGh5LT5jaGFubmVsKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpIHwgKDB4MDAwMSB8IDB4MDAwMikpOworCWI0M19waHlfc2V0KGRldiwgMHgwODAyLCAoMHgwMDAxIHwgMHgwMDAyKSk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWlmIChwaHktPnJldiA+PSAzKSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNF0pOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiYWNrdXBbMTVdKTsKQEAgLTc3NCwxMyArNzIyLDkgQEAKIAkJaWYgKHRtcDE2ID49IDB4MjApCiAJCQl0bXAxNiAtPSAweDQwOwogCQlpZiAodG1wMTYgPCAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgICYgMHhGMDAwKSB8IDB4MDlFQik7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEEsIDB4RjAwMCwgMHgwOUVCKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICAgJiAweEYwMDApIHwgMHgwQUVEKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHhGMDAwLCAweDBBRUQpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGdwaHktPmludGVyZm1vZGUgPT0gQjQzX0lOVEVSRk1PREVfTk9OV0xBTikgewpAQCAtODIzLDcgKzc2Nyw3IEBACiAgKiBpbnRlcmZlcmVuY2UgbWl0aWdhdGlvbiBjb2RlLgogICogSXQgaXMgc2F2ZSB0byByZXN0b3JlIHZhbHVlcyBpbiByYW5kb20gb3JkZXIuCiAgKi8KLXN0YXRpYyB2b2lkIF9zdGFja19zYXZlKHUzMiAqIF9zdGFja3B0ciwgc2l6ZV90ICogc3RhY2tpZHgsCitzdGF0aWMgdm9pZCBfc3RhY2tfc2F2ZSh1MzIgKl9zdGFja3B0ciwgc2l6ZV90ICpzdGFja2lkeCwKIAkJCXU4IGlkLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCiB7CiAJdTMyICpzdGFja3B0ciA9ICYoX3N0YWNrcHRyWypzdGFja2lkeF0pOwpAQCAtODM3LDcgKzc4MSw3IEBACiAJQjQzX1dBUk5fT04oKnN0YWNraWR4ID49IEI0M19JTlRFUkZTVEFDS19TSVpFKTsKIH0KIAotc3RhdGljIHUxNiBfc3RhY2tfcmVzdG9yZSh1MzIgKiBzdGFja3B0ciwgdTggaWQsIHUxNiBvZmZzZXQpCitzdGF0aWMgdTE2IF9zdGFja19yZXN0b3JlKHUzMiAqc3RhY2twdHIsIHU4IGlkLCB1MTYgb2Zmc2V0KQogewogCXNpemVfdCBpOwogCkBAIC05MDEsMTEgKzg0NSw4IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBCNDNfSU5URVJGTU9ERV9OT05XTEFOOgogCQlpZiAocGh5LT5yZXYgIT0gMSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSAmIH4weDQwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCB+MHg0MDAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJhZGlvX3N0YWNrc2F2ZSgweDAwNzgpOwpAQCAtOTI0LDI2ICs4NjUsMTkgQEAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0MDYpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDA2LCAweDdFMjgpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfUkFESU9fQklURklFTEQpIHwgMHgxMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgMHgxMDAwKTsKIAogCQlwaHlfc3RhY2tzYXZlKDB4MDRBMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QzBDMCkgfCAweDAwMDgpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QzBDMCwgMHgwMDA4KTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTEpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEMwQzAsIDB4MDYwNSk7CiAJCXBoeV9zdGFja3NhdmUoMHgwNEEyKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhDMEMwKSB8IDB4MDIwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhDMEMwLCAweDAyMDQpOwogCQlwaHlfc3RhY2tzYXZlKDB4MDRBOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTgsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KSAmIDB4QzBDMCkgfCAweDA4MDMpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTgsIDB4QzBDMCwgMHgwODAzKTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QUIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEMwQzAsIDB4MDYwNSk7CiAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTcpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE3LCAweDAwMDIpOwpAQCAtOTk5LDEyICs5MzMsOCBAQAogCQlwaHlfc3RhY2tzYXZlKDB4MDQyQik7CiAJCXBoeV9zdGFja3NhdmUoMHgwNDhDKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQpCi0JCQkgICAgICAmIH4weDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKQotCQkJICAgICAgICYgMHhGRkZDKSB8IDB4MDAwMik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsIH4weDEwMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweEZGRkMsIDB4MDAwMik7CiAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzMywgMHgwODAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMywgMHgyMDI3KTsKQEAgLTEwMTMsOCArOTQzLDcgQEAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQSwgMHgxQ0E4KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQywgMHgyODdBKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEZGQzApIHwgMHgwMDFBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEZGQzAsIDB4MDAxQSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTcsIDB4MDAwRCk7CiAKIAkJaWYgKHBoeS0+cmV2IDwgMikgewpAQCAtMTAyNyw2NSArOTU2LDQxIEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEMxLCAweDAwNTkpOwogCQl9CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkKLQkJCQkJICAgICYgMHhDMEZGKSB8IDB4MTgwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweENGRkYpIHwgMHgxMDAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGMEZGKSB8IDB4MEEwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4Q0ZGRikgfCAweDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFCKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwODAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikKLQkJCQkJICAgICYgMHhGRkNGKSB8IDB4MDAxMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4RkZGMCkgfCAweDAwMDUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweEZGQ0YpIHwgMHgwMDEwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwNTAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwQik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMSwgMHhDMEZGLCAweDE4MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4RkZDMCwgMHgwMDE1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweENGRkYsIDB4MTAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGMEZGLCAweDBBMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4Q0ZGRiwgMHgxMDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEYwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBQiwgMHhGRkNGLCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4RkZGMCwgMHgwMDA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweEZGQ0YsIDB4MDAxMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGRkYwLCAweDAwMDYpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4RjBGRiwgMHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEYwRkYsIDB4MDUwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhGRkYwLCAweDAwMEIpOwogCiAJCWlmIChwaHktPnJldiA+PSAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgJiB+MHg4MDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTUpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTYsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTYpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTcsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTcpCi0JCQkJCQkgICAgJiAweEZFMDApIHwgMHgwMTZEKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDQ4QSwgKHUxNil+MHg4MDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQxNSwgMHg4MDAwLCAweDM2RDgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDE2LCAweDgwMDAsIDB4MzZEOCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0MTcsIDB4RkUwMCwgMHgwMTZEKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICB8IDB4MTAwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDhBKQotCQkJCQkJICAgICYgMHg5RkZGKSB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDQ4QSwgMHgxMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHg5RkZGLCAweDIwMDApOwogCQkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9BQ0lXKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgPj0gMikgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDJCKQotCQkJCSAgICAgIHwgMHgwODAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDA4MDApOwogCQl9Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEMsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEMpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDAyMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEMsIDB4RjBGRiwgMHgwMjAwKTsKIAkJaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUUpCi0JCQkJCQkgICAgJiAweEZGMDApIHwgMHgwMDdGKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUQsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUQpCi0JCQkJCQkgICAgJiAweDAwRkYpIHwgMHgxMzAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBRSwgMHhGRjAwLCAweDAwN0YpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFELCAweDAwRkYsIDB4MTMwMCk7CiAJCX0gZWxzZSBpZiAocGh5LT5yZXYgPj0gNikgewogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgzLCAweDAwN0YpOwogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgyLCAweDAwN0YpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBRCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFEKQotCQkJCSAgICAgICYgMHgwMEZGKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDRBRCwgMHgwMEZGKTsKIAkJfQogCQliNDNfY2FsY19ucnNzaV9zbG9wZShkZXYpOwogCQlicmVhazsKQEAgLTExMDQsMjQgKzEwMDksMTggQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEI0M19JTlRFUkZNT0RFX05PTldMQU46CiAJCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA0MkIsIH4weDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDQwMDApOwogCQkJYnJlYWs7CiAJCX0KIAkJcmFkaW9fc3RhY2tyZXN0b3JlKDB4MDA3OCk7CiAJCWI0M19jYWxjX25yc3NpX3RocmVzaG9sZChkZXYpOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDQwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDJCLCB+MHgwODAwKTsKIAkJaWYgKCFkZXYtPmJhZF9mcmFtZXNfcHJlZW1wdCkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCkKLQkJCQkgICAgICAmIH4oMSA8PCAxMSkpOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgfigxIDw8IDExKSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHg0MDAwKTsKIAkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTApOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMSk7CiAJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEEyKTsKQEAgLTEzODksMTcgKzEyODgsMTAgQEAKIAkJc2F2LnBoeV9jcnMwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKTsKIAkJc2F2LnBoeV9jbGFzc2N0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0xBU1NDVEwpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpCi0JCQkgICAgICB8IDB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwpCi0JCQkgICAgICAmIDB4RkZGQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHg3RkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xBU1NDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKQotCQkJICAgICAgJiAweEZGRkMpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4N0ZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ0xBU1NDVEwsIDB4RkZGQyk7CiAJCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKSB7CiAJCQlzYXYucGh5X2xvX21hc2sgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX01BU0spOwogCQkJc2F2LnBoeV9sb19jdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0NUTCk7CkBAIC0xNDIwLDggKzEzMTIsNyBAQAogCWI0M193cml0ZTE2KGRldiwgMHgzRTIsIGI0M19yZWFkMTYoZGV2LCAweDNFMikgfCAweDgwMDApOwogCiAJc2F2LnBoeV9zeW5jY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9TWU5DQ1RMKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9TWU5DQ1RMLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1NZTkNDVEwpCi0JCSAgICAgICYgMHhGRjdGKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1NZTkNDVEwsIDB4RkY3Rik7CiAJc2F2LnJlZ18zRTYgPSBiNDNfcmVhZDE2KGRldiwgMHgzRTYpOwogCXNhdi5yZWdfM0Y0ID0gYjQzX3JlYWQxNihkZXYsIDB4M0Y0KTsKIApAQCAtMTQyOSw5ICsxMzIwLDcgQEAKIAkJYjQzX3dyaXRlMTYoZGV2LCAweDAzRTYsIDB4MDEyMik7CiAJfSBlbHNlIHsKIAkJaWYgKHBoeS0+YW5hbG9nID49IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDAzKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwMykpCi0JCQkJICAgICAgICYgMHhGRkJGKSB8IDB4NDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgwMyksIDB4RkZCRiwgMHg0MCk7CiAJCX0KIAkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19DSEFOTkVMX0VYVCwKIAkJCSAgICAoYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX0NIQU5ORUxfRVhUKSB8IDB4MjAwMCkpOwpAQCAtMTQ1NCwxNCArMTM0MywxMiBAQAogCQkJCQkJICAgTFBEKDAsIDAsIDEpKSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhCRkEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUxKQotCQkJICB8IDB4MDAwNCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4NTEsIDB4MDAwNCk7CiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDFGKTsKIAl9IGVsc2UgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIDApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkJICAgICAgJiAweEZGRjApIHwgMHgwMDA5KTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIDB4MDAwOSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMCk7CiAKQEAgLTE2MTAsOCArMTQ5Nyw3IEBACiAJdTggb2xkX2NoYW5uZWw7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkgIHwgMHgwMDUwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDUwKTsKIAl9CiAJaWYgKChidXMtPmJvYXJkaW5mby52ZW5kb3IgIT0gU1NCX0JPQVJEVkVORE9SX0JDTSkgJiYKIAkgICAgKGJ1cy0+Ym9hcmRpbmZvLnR5cGUgIT0gU1NCX0JPQVJEX0JVNDMwNikpIHsKQEAgLTE2MjEsMzkgKzE1MDcsMjkgQEAKIAkJCXZhbHVlICs9IDB4MjAyOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzUpICYgMHhGMEZGKQotCQkgICAgICB8IDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDM1LCAweEYwRkYsIDB4MDcwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY3KTsKIAogCWlmIChwaHktPmdtb2RlIHx8IHBoeS0+cmV2ID49IDIpIHsKIAkJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkJICB8IDB4MDAyMCk7Ci0JCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MSwKLQkJCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKQotCQkJCQkgIHwgMHgwMDA0KTsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDAyMCk7CisJCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDUxLCAweDAwMDQpOwogCQl9CiAJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX1JBRElPLCAweDAwMDApOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMUMsIDB4MTg2QSk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTMpICYgMHgwMEZGKSB8IDB4MTkwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM1KSAmIDB4RkZDMCkgfCAweDAwNjQpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDA1RCkgJiAweEZGODApIHwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDEzLCAweDAwRkYsIDB4MTkwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkMwLCAweDAwNjQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwNUQsIDB4RkY4MCwgMHgwMDBBKTsKIAl9CiAKIAlpZiAoZGV2LT5iYWRfZnJhbWVzX3ByZWVtcHQpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX1JBRElPX0JJVEZJRUxEKSB8ICgxIDw8IDExKSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgKDEgPDwgMTEpKTsKIAl9CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewpAQCAtMTY5NSw3ICsxNTcxLDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QiwgMHgwMDdCKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QywgMHgwMEIwKTsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xNzcxLDEyICsxNjQ3LDEwIEBACiAJCXZhbCArPSAweDAyMDI7CiAJfQogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDIwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTEsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKSB8IDB4MDAwNCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDIwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA1MSwgMHgwMDA0KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1QiwgMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDVDLCAwKTsKIAl9CkBAIC0xODAxLDggKzE2NzUsNyBAQAogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUIsIDB4N0IpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUMsIDB4QjApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpICYgMHgwMEY4KSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwN0EsIDB4MDBGOCwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xODE0LDE5ICsxNjg3LDE2IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY4KTsKIAliNDNfc2V0X3R4cG93ZXJfZyhkZXYsICZncGh5LT5iYmF0dCwgJmdwaHktPnJmYXR0LCBncGh5LT50eF9jb250cm9sKTsKIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1RCwgKGI0M19waHlfcmVhZChkZXYsIDB4NUQpCi0JCQkJCSAgJiAweEZGODApIHwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHg1RCwgMHhGRjgwLCAweDAwMDMpOwogCX0KIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gMikKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUQsIDB4MDAwRCk7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gNCkgewogCQliNDNfd3JpdGUxNihkZXYsIDB4M0U0LCA5KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4NjEsIGI0M19waHlfcmVhZChkZXYsIDB4NjEpCi0JCQkgICAgICAmIDB4MEZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIDB4NjEsIDB4MEZGRik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMikgJiAweEZGQzApCi0JCQkgICAgICB8IDB4MDAwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMiwgMHhGRkMwLCAweDAwMDQpOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IpCiAJCUI0M19XQVJOX09OKDEpOwpAQCAtMTg2OCw2MyArMTczOCwzOSBAQAogCWJhY2t1cF9yYWRpb1sxXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKTsKIAliYWNrdXBfcmFkaW9bMl0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApICYgMHgzRkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRywKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRykgfCAweDgwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDAyKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSAmIDB4RkZGRCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMDEpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhGRkZFKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4M0ZGRik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDS0JCQU5EQ0ZHLCAweDgwMDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZGRCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDAxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGRkZFKTsKIAlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSKSB8IDB4MDAwMSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX0FOQUxPR09WRVJWQUwpICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikgfCAweDAwMDIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwKLQkJCQkJICAgQjQzX1BIWV9BTkFMT0dPVkVSVkFMKSAmIDB4RkZGRCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDEpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDIpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRCk7CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDBDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMzApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkgICAgICAgJiAweEZGQ0YpIHwgMHgxMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDBDKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweDAwMEMpOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAzMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZDRiwgMHgxMCk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHg1QSksIDB4MDc4MCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4NTkpLCAweEM4MTApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMHgwMDBEKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDBBKSwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwQSkpIHwgMHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MEEpLCAweDIwMDApOwogCWlmIChwaHktPnJldiAhPSAxKSB7CS8qIE5vdCBpbiBzcGVjcywgYnV0IG5lZWRlZCB0byBwcmV2ZW50IFBQQyBtYWNoaW5lIGNoZWNrICovCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpIHwgMHgwMDA0KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkgJiAweEZGRkIpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDA0KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkIpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgwMyksCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDAzKSkKLQkJICAgICAgICYgMHhGRjlGKSB8IDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MDMpLCAweEZGOUYsIDB4NDApOwogCiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDAwMEYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgMCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCQkgICAgICAmIDB4RkZGMCkgfCAweDkpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgMHg5KTsKIAl9CiAJYjQzX2dwaHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGRldiwgMTEpOwogCkBAIC0xOTM0LDQ1ICsxNzgwLDI4IEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0xPX01BU0ssIDB4ODAyMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTE9fQ1RMLCAwKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDJCKSwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MkIpKQotCQkgICAgICAgJiAweEZGQzApIHwgMHgwMSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkIpLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgyQikpCi0JCSAgICAgICAmIDB4QzBGRikgfCAweDgwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4RkZDMCwgMHgwMSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4QzBGRiwgMHg4MDApOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAxMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhDRkZGKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweENGRkYpOwogCiAJaWYgKGRldi0+ZGV2LT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgewogCQlpZiAocGh5LT5yZXYgPj0gNykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSKQotCQkJCSAgICAgIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICB8IDB4ODAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHg4MDAwKTsKIAkJfQogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDdBKQotCQkJICAmIDB4MDBGNyk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDdBLCAweDAwRjcpOwogCiAJaiA9IDA7CiAJbG9vcF9pX21heCA9IChwaHktPnJhZGlvX3JldiA9PSA4KSA/IDE1IDogOTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9vcF9pX21heDsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CiAJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIGkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICAgJiAweEYwRkYpIHwgKGogPDwgOCkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICAgJiAweDBGRkYpIHwgMHhBMDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICB8IDB4RjAwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGMEZGLCAoaiA8PCA4KSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHgwRkZGLCAweEEwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhGMDAwKTsKIAkJCXVkZWxheSgyMCk7CiAJCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MT19MRUFLQUdFKSA+PSAweERGQykKIAkJCQlnb3RvIGV4aXRfbG9vcDE7CkBAIC0xOTgyLDIwICsxODExLDEyIEBACiAJbG9vcDFfb3V0ZXJfZG9uZSA9IGk7CiAJbG9vcDFfaW5uZXJfZG9uZSA9IGo7CiAJaWYgKGogPj0gOCkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCSAgICAgIHwgMHgzMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4MzApOwogCQl0cnN3X3J4ID0gMHgxQjsKIAkJZm9yIChqID0gaiAtIDg7IGogPCAxNjsgaisrKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkJCSAgICAgICAmIDB4RjBGRikgfCAoaiA8PCA4KSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QR0FDVEwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgICAmIDB4MEZGRikgfCAweEEwMDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgIHwgMHhGMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweEYwRkYsIChqIDw8IDgpKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweDBGRkYsIDB4QTAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweEYwMDApOwogCQkJdWRlbGF5KDIwKTsKIAkJCXRyc3dfcnggLT0gMzsKIAkJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0xFQUtBR0UpID49IDB4REZDKQpAQCAtMjA0NiwzNCArMTg2NywyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDM2LCAweEZFRkYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDB4MDIwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdDKSB8IDB4MDAwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKSB8IDB4RjAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0MsIDB4MDAwMik7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0EsIDB4RjAwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0N0EsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0EpCi0JCQkJCSAgICAmIDB4RkYwRikgfCAweDAwMTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICB8IDB4ODAwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwNEUpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0N0EsIDB4RkYwRiwgMHgwMDEwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNUQsIDB4ODAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzYpCi0JCQkgICAgICB8IDB4MDQwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDA0MDApOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzYsIGI0M19waHlfcmVhZChkZXYsIDB4MDAzNikKLQkJCSAgICAgIHwgMHgwMjAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KQotCQkJICAgICAgfCAweDA0MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEYsIGI0M19waHlfcmVhZChkZXYsIDB4MDA0RikKLQkJCSAgICAgICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA0RSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDA0RSkKLQkJCQkJICAgICYgMHhGRkMwKSB8IDB4MDAxMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNiwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDVELCAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwNEYsIDB4RkZGRSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDdBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKQotCQkJCQkgICAgJiAweEZGMEYpIHwgMHgwMDEwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDdBLCAweEZGMEYsIDB4MDAxMCk7CiAJfQogfQogCkBAIC0yMDg5LDIyICsxOTAwLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkZDMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KSAmIDB4RkYwMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMzYsIDB4RkZDMCwgKGdwaHktPnRndF9pZGxlX3Rzc2kgLSBncGh5LT5jdXJfaWRsZV90c3NpKSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDc4LCAweEZGMDAsIChncGh5LT50Z3RfaWRsZV90c3NpIC0gZ3BoeS0+Y3VyX2lkbGVfdHNzaSkpOwogCWI0M19ncGh5X3Rzc2lfcG93ZXJfbHRfaW5pdChkZXYpOwogCWI0M19ncGh5X2dhaW5fbHRfaW5pdChkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNjAsIGI0M19waHlfcmVhZChkZXYsIDB4MDA2MCkgJiAweEZGQkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDA2MCwgMHhGRkJGKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE0LCAweDAwMDApOwogCiAJQjQzX1dBUk5fT04ocGh5LT5yZXYgPCA2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgIHwgMHgwODAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgICYgMHhGRUZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpCi0JCSAgICAgICYgMHhGRkJGKTsKKwliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwODAwKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0NzgsIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAxLCAweEZGQkYpOwogCiAJYjQzX2dwaHlfZGNfbHRfaW5pdChkZXYsIDEpOwogCkBAIC0yMTM5LDkgKzE5NDUsNyBAQAogCWI0M19oYXJkd2FyZV9wY3RsX2Vhcmx5X2luaXQoZGV2KTsKIAlpZiAoZ3BoeS0+Y3VyX2lkbGVfdHNzaSA9PSAwKSB7CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNzYpCi0JCQkJCSAgICYgMHgwMEY3KSB8IDB4MDA4NCk7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA3NiwgMHgwMEY3LCAweDAwODQpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGI0M19yZmF0dCByZmF0dDsKIAkJCXN0cnVjdCBiNDNfYmJhdHQgYmJhdHQ7CkBAIC0yMTc0LDkgKzE5NzgsNyBAQAogCQkJfQogCQl9CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3NikKLQkJCQkJICAmIDB4RkY3Qik7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3NiwgMHhGRjdCKTsKIAkJfSBlbHNlIHsKIAkJCWI0M19zZXRfdHhwb3dlcl9nKGRldiwgJm9sZF9iYmF0dCwKIAkJCQkJICAmb2xkX3JmYXR0LCBvbGRfdHhfY29udHJvbCk7CkBAIC0yMjIwLDIwICsyMDIyLDE0IEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLCAweDgwMDYpOwogCQl9CiAJCWlmICh0bXAgPT0gNSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweENDKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpKQotCQkJCSAgICAgICAmIDB4MDBGRikgfCAweDFGMDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpLCAweDAwRkYsIDB4MUYwMCk7CiAJCX0KIAl9CiAJaWYgKChwaHktPnJldiA8PSAyICYmIHBoeS0+Z21vZGUpIHx8IHBoeS0+cmV2ID49IDIpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg3RSksIDB4NzgpOwogCWlmIChwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSkpCi0JCQkgICAgICB8IDB4ODApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpKQotCQkJICAgICAgfCAweDQpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfRVhURygweDAxKSwgMHg4MCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLCAweDQpOwogCX0KIAlpZiAoaGFzX2xvb3BiYWNrX2dhaW4ocGh5KSkKIAkJYjQzX2NhbGNfbG9vcGJhY2tfZ2FpbihkZXYpOwpAQCAtMjI1MSwxNSArMjA0NywxMCBAQAogCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzIHwgZ3BoeS0+CiAJCQkJICBsb19jb250cm9sLT50eF9tYWduKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpICYgMHhGRkYwKQotCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsIGdwaHktPmxvX2NvbnRyb2wtPnR4X2JpYXMpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgzNiksCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzNikpCi0JCQkgICAgICAgJiAweDBGRkYpIHwgKGdwaHktPmxvX2NvbnRyb2wtPgotCQkJCQkgICAgdHhfYmlhcyA8PCAxMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NDSygweDM2KSwgMHgwRkZGLCAoZ3BoeS0+bG9fY29udHJvbC0+dHhfYmlhcyA8PCAxMikpOwogCX0KIAlpZiAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyRSksIDB4ODA3NSk7CkBAIC0yMjk4LDExICsyMDg5LDggQEAKIAkgICBidXQgT0ZETSBpcyBsZWdhbCBldmVyeXdoZXJlICovCiAJaWYgKChkZXYtPmRldi0+YnVzLT5jaGlwX2lkID09IDB4NDMwNgogCSAgICAgJiYgZGV2LT5kZXYtPmJ1cy0+Y2hpcF9wYWNrYWdlID09IDIpIHx8IDApIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKQotCQkJICAgICAgJiAweEJGRkYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpKQotCQkJICAgICAgJiAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4QkZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEMzKSwgMHg3RkZGKTsKIAl9CiB9CiAKQEAgLTI1MDQsOSArMjI5Miw4IEBACiAKIAliNDNfcGh5X2xvY2soZGV2KTsKIAliNDNfcmFkaW9fbG9jayhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgJiAweEZGRkMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSAmIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCAweEZGRkMpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfR19DUlMsIDB4N0ZGRik7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAzLCA4LCAxKTsKIAogCXN0YXJ0ID0gKGNoYW5uZWwgLSA1ID4gMCkgPyBjaGFubmVsIC0gNSA6IDE7CkBAIC0yNTE3LDExICsyMzA0LDkgQEAKIAkJCXJldFtpIC0gMV0gPSBiNDNfZ3BoeV9hY2lfZGV0ZWN0KGRldiwgaSk7CiAJfQogCWI0M19zd2l0Y2hfY2hhbm5lbChkZXYsIGNoYW5uZWwpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKSB8IDB4MDAwMyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQwMywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDAzKSAmIDB4RkZGOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpIHwgMHg4MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MDIsIDB4RkZGQywgMHgwMDAzKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MDMsIDB4RkZGOCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoZGV2KTsKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykgewogCQlpZiAoIXJldFtpXSkKQEAgLTI1NjUsOCArMjM1MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4ICogYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgIHMxNiBwYWIwLCBzMTYgcGFiMSwgczE2IHBhYjIpCit1OCAqYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgczE2IHBhYjAsIHMxNiBwYWIxLCBzMTYgcGFiMikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCAqdGFiOwpAQCAtMzE5MSw2ICsyOTc2LDcgQEAKIAkgKiBCYXNlYmFuZCBhdHRlbm51YXRpb24uIFN1YnRyYWN0IGl0LiAqLwogCWJiYXR0X2RlbHRhIC09IDQgKiByZmF0dF9kZWx0YTsKIAorI2lmIEI0M19ERUJVRwogCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX1hNSVRQT1dFUikpIHsKIAkJaW50IGRibSA9IHB3cl9hZGp1c3QgPCAwID8gLXB3cl9hZGp1c3QgOiBwd3JfYWRqdXN0OwogCQliNDNkYmcoZGV2LT53bCwKQEAgLTMxOTksNiArMjk4NSw4IEBACiAJCSAgICAgICAocHdyX2FkanVzdCA8IDAgPyAiLSIgOiAiIiksIFE1Ml9BUkcoZGJtKSwKIAkJICAgICAgIGJiYXR0X2RlbHRhLCByZmF0dF9kZWx0YSk7CiAJfQorI2VuZGlmIC8qIERFQlVHICovCisKIAkvKiBTbyBkbyB3ZSBmaW5hbGx5IG5lZWQgdG8gYWRqdXN0IHNvbWV0aGluZyBpbiBoYXJkd2FyZT8gKi8KIAlpZiAoKHJmYXR0X2RlbHRhID09IDApICYmIChiYmF0dF9kZWx0YSA9PSAwKSkKIAkJZ290byBub19hZGp1c3RtZW50X25lZWRlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYwppbmRleCBjNWQ5ZGMzLi41OGUzMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCkBAIC0zLDcgKzMsNyBAQAogICBCcm9hZGNvbSBCNDMgd2lyZWxlc3MgZHJpdmVyCiAgIElFRUUgODAyLjExZyBMUC1QSFkgZHJpdmVyCiAKLSAgQ29weXJpZ2h0IChjKSAyMDA4IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDggKzIzLDEwIEBACiAqLwogCiAjaW5jbHVkZSAiYjQzLmgiCisjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInBoeV9scC5oIgogI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJ0YWJsZXNfbHBwaHkuaCIKIAogCiBzdGF0aWMgaW50IGI0M19scHBoeV9vcF9hbGxvY2F0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC01Nyw5ICs1OSwzOTQgQEAKIAlkZXYtPnBoeS5scCA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgbHBwaHlfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjBfMV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlCNDNfV0FSTl9PTigxKTsvL1RPRE8gcmV2IDwgMiBub3Qgc3VwcG9ydGVkLCB5ZXQuCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjJwbHVzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHg1MCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfQ1RMLCAweDg4MDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlJWQUwsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjkpLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTCwgMHgxMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMCwgMHhGRjAwLCAweDc4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRENPRkZTRVRUUkFOU0lFTlQsIDB4RjhGRiwgMHgyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVCwgMHhGRjAwLCAweDdGKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENILCAweEZGMEYsIDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QUkVBTUJMRUNPTkZJUk1UTywgMHhGRjAwLCAweDIpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgfjB4NDAwMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4MSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhERiksIDB4RkYwMCwgMHhGNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4REYpLCAweDAwRkYsIDB4RjEwMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9DTElQVEhSRVNILCAweDQ4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSElHQUlOREIsIDB4RkYwMCwgMHg0Nik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RTQpLCAweEZGMDAsIDB4MTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QV1JfVEhSRVNIMSwgMHhGRkYwLCAweDkpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIH4weEYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweDAwRkYsIDB4NTUwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4RjgxRiwgMHhBMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0dBSU5ESVJFQ1RNSVNNQVRDSCwgMHhFMEZGLCAweDMwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0hJR0FJTkRCLCAweDAwRkYsIDB4MkEwMCk7CisJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzI1KSAmJiAoYnVzLT5jaGlwX3JldiA9PSAwKSkgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTE9XR0FJTkRCLCAweDAwRkYsIDB4MjEwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweEZGMDAsIDB4QSk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xPV0dBSU5EQiwgMHgwMEZGLCAweDFFMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVkVSWUxPV0dBSU5EQiwgMHhGRjAwLCAweEQpOworCX0KKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkZFMCwgMHgxRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RkYpLCAweEZGRTAsIDB4Qyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTAwKSwgMHhGRjAwLCAweDE5KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRiksIDB4MDNGRiwgMHgzQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkMxRiwgMHgzRTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEZGKSwgMHhGRkUwLCAweEMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwMCksIDB4MDBGRiwgMHgxOTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHg4M0ZGLCAweDU4MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZGRTAsIDB4MTIpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlOTUlTTUFUQ0gsIDB4MEZGRiwgMHg5MDAwKTsKKworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjE2KDB4MDgsIDB4MTQpLCAwKTsKKwliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDEyKSwgMHg0MCk7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDQwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEYwRkYsIDB4QjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1NZTkNQRUFLQ05ULCAweEZGRjgsIDB4Nik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHg5RDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX01JTlBXUl9MRVZFTCwgMHhGRjAwLCAweEExKTsKKwl9IGVsc2UgLyogNUdIeiAqLworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIH4weDQwKTsKKworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweEZGMDAsIDB4QjMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweDAwRkYsIDB4QUQwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0lOUFVUX1BXUkRCLCAweEZGMDAsIGxwcGh5LT5yeF9wd3Jfb2Zmc2V0KTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRVNFVF9DVEwsIDB4NDQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkVTRVRfQ1RMLCAweDgwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8wLCAweEE5NTQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzEsCisJCSAgICAgIDB4MjAwMCB8ICgodTE2KWxwcGh5LT5yc3NpX2dzIDw8IDEwKSB8CisJCSAgICAgICgodTE2KWxwcGh5LT5yc3NpX3ZjIDw8IDQpIHwgbHBwaHktPnJzc2lfdmYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9iYXNlYmFuZF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlscHBoeV90YWJsZV9pbml0KGRldik7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKQorCQlscHBoeV9iYXNlYmFuZF9yZXYycGx1c19pbml0KGRldik7CisJZWxzZQorCQlscHBoeV9iYXNlYmFuZF9yZXYwXzFfaW5pdChkZXYpOworfQorCitzdHJ1Y3QgYjIwNjJfZnJlcWRhdGEgeworCXUxNiBmcmVxOworCXU4IGRhdGFbNl07Cit9OworCisvKiBJbml0aWFsaXplIHRoZSAyMDYyIHJhZGlvLiAqLworc3RhdGljIHZvaWQgbHBwaHlfMjA2Ml9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbGZyZXEsIHBkaXYsIHRtcCwgcmVmOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSAqZmQgPSBOVUxMOworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSBmcmVxZGF0YV90YWJbXSA9IHsKKwkJeyAuZnJlcSA9IDEyMDAwLCAuZGF0YVswXSA9ICA2LCAuZGF0YVsxXSA9ICA2LCAuZGF0YVsyXSA9ICA2LAorCQkJCSAuZGF0YVszXSA9ICA2LCAuZGF0YVs0XSA9IDEwLCAuZGF0YVs1XSA9ICA2LCB9LAorCQl7IC5mcmVxID0gMTMwMDAsIC5kYXRhWzBdID0gIDQsIC5kYXRhWzFdID0gIDQsIC5kYXRhWzJdID0gIDQsCisJCQkJIC5kYXRhWzNdID0gIDQsIC5kYXRhWzRdID0gMTEsIC5kYXRhWzVdID0gIDcsIH0sCisJCXsgLmZyZXEgPSAxNDQwMCwgLmRhdGFbMF0gPSAgMywgLmRhdGFbMV0gPSAgMywgLmRhdGFbMl0gPSAgMywKKwkJCQkgLmRhdGFbM10gPSAgMywgLmRhdGFbNF0gPSAxMiwgLmRhdGFbNV0gPSAgNywgfSwKKwkJeyAuZnJlcSA9IDE2MjAwLCAuZGF0YVswXSA9ICAzLCAuZGF0YVsxXSA9ICAzLCAuZGF0YVsyXSA9ICAzLAorCQkJCSAuZGF0YVszXSA9ICAzLCAuZGF0YVs0XSA9IDEzLCAuZGF0YVs1XSA9ICA4LCB9LAorCQl7IC5mcmVxID0gMTgwMDAsIC5kYXRhWzBdID0gIDIsIC5kYXRhWzFdID0gIDIsIC5kYXRhWzJdID0gIDIsCisJCQkJIC5kYXRhWzNdID0gIDIsIC5kYXRhWzRdID0gMTQsIC5kYXRhWzVdID0gIDgsIH0sCisJCXsgLmZyZXEgPSAxOTIwMCwgLmRhdGFbMF0gPSAgMSwgLmRhdGFbMV0gPSAgMSwgLmRhdGFbMl0gPSAgMSwKKwkJCQkgLmRhdGFbM10gPSAgMSwgLmRhdGFbNF0gPSAxNCwgLmRhdGFbNV0gPSAgOSwgfSwKKwl9OworCisJYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoZGV2KTsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fVFhfQ1RMMywgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEw0LCAwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX0NUTDUsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDB4NDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDB4MTApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDApOworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA2Ml9OX1RTU0lfQ1RMMCwgMHgxKTsKKwllbHNlCisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfTl9UU1NJX0NUTDAsIH4weDEpOworCisJLyogR2V0IHRoZSBjcnlzdGFsIGZyZXEsIGluIEh6LiAqLworCWNyeXN0YWxmcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKworCUI0M19XQVJOX09OKCEoYnVzLT5jaGlwY28uY2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKSk7CisJQjQzX1dBUk5fT04oY3J5c3RhbGZyZXEgPT0gMCk7CisKKwlpZiAoY3J5c3RhbGZyZXEgPj0gMzAwMDAwMDApIHsKKwkJcGRpdiA9IDE7CisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweEZGRkIpOworCX0gZWxzZSB7CisJCXBkaXYgPSAyOworCQliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweDQpOworCX0KKworCXRtcCA9ICg4MDAwMDAwMDAgKiBwZGl2ICsgY3J5c3RhbGZyZXEpIC8gKDMyMDAwMDAwICogcGRpdik7CisJdG1wID0gKHRtcCAtIDEpICYgMHhGRjsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE4LCB0bXApOworCisJdG1wID0gKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBwZGl2KSAvICgyMDAwMDAwICogcGRpdik7CisJdG1wID0gKCh0bXAgJiAweEZGKSAtIDEpICYgMHhGRkZGOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTksIHRtcCk7CisKKwlyZWYgPSAoMTAwMCAqIHBkaXYgKyAyICogY3J5c3RhbGZyZXEpIC8gKDIwMDAgKiBwZGl2KTsKKwlyZWYgJj0gMHhGRkZGOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYik7IGkrKykgeworCQlpZiAocmVmIDwgZnJlcWRhdGFfdGFiW2ldLmZyZXEpIHsKKwkJCWZkID0gJmZyZXFkYXRhX3RhYltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZmQpCisJCWZkID0gJmZyZXFkYXRhX3RhYltBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYikgLSAxXTsKKwliNDNkYmcoZGV2LT53bCwgImIyMDYyOiBVc2luZyBjcnlzdGFsIHRhYiBlbnRyeSAldSBrSHouXG4iLAorCSAgICAgICBmZC0+ZnJlcSk7IC8qIEZJWE1FOiBLZWVwIHRoaXMgcHJpbnRrIHVudGlsIHRoZSBjb2RlIGlzIGZ1bGx5IGRlYnVnZ2VkLiAqLworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEw4LAorCQkJKCh1MTYpKGZkLT5kYXRhWzFdKSA8PCA0KSB8IGZkLT5kYXRhWzBdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDksCisJCQkoKHUxNikoZmQtPmRhdGFbM10pIDw8IDQpIHwgZmQtPmRhdGFbMl0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTAsIGZkLT5kYXRhWzRdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDExLCBmZC0+ZGF0YVs1XSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIDIwNjMgcmFkaW8uICovCitzdGF0aWMgdm9pZCBscHBoeV8yMDYzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8vVE9ETworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zeW5jX3N0eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JhZGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8qIFRoZSByYWRpbyBpcyBhdHRhY2hlZCB0aHJvdWdoIHRoZSA0d2lyZSBidXMuICovCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweDIpOworCXVkZWxheSgxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweEZGRkQpOworCXVkZWxheSgxKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCWxwcGh5XzIwNjJfaW5pdChkZXYpOworCX0gZWxzZSB7CisJCWxwcGh5XzIwNjNfaW5pdChkZXYpOworCQlscHBoeV9zeW5jX3N0eChkZXYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjApLCAweDVGODApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjEpLCAwKTsKKwkJLy9UT0RPIERvIHNvbWV0aGluZyBvbiB0aGUgYmFja3BsYW5lCisJfQorfQorCisvKiBSZWFkIHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgZnJvbSBoYXJkd2FyZS4gKi8KK3N0YXRpYyB2b2lkIGxwcGh5X3JlYWRfdHhfcGN0bF9tb2RlX2Zyb21faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwljdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTUQpOworCXN3aXRjaCAoY3RsICYgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREUpIHsKKwljYXNlIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjoKKwkJbHBwaHktPnR4cGN0bF9tb2RlID0gQjQzX0xQUEhZX1RYUENUTF9PRkY7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfU1c6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfU1c7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFc6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfSFc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfVU5LTk9XTjsKKwkJQjQzX1dBUk5fT04oMSk7CisJCWJyZWFrOworCX0KK30KKworLyogU2V0IHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgaW4gaGFyZHdhcmUuICovCitzdGF0aWMgdm9pZCBscHBoeV93cml0ZV90eF9wY3RsX21vZGVfdG9faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwlzd2l0Y2ggKGxwcGh5LT50eHBjdGxfbW9kZSkgeworCWNhc2UgQjQzX0xQUEhZX1RYUENUTF9PRkY6CisJCWN0bCA9IEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX0hXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9IVzsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX1NXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9TVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3RsID0gMDsKKwkJQjQzX1dBUk5fT04oMSk7CisJfQorCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLCBjdGwpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgIGVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIG1vZGUpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgb2xkbW9kZTsKKworCW9sZG1vZGUgPSBscHBoeS0+dHhwY3RsX21vZGU7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCWlmIChscHBoeS0+dHhwY3RsX21vZGUgPT0gbW9kZSkKKwkJcmV0dXJuOworCWxwcGh5LT50eHBjdGxfbW9kZSA9IG1vZGU7CisKKwlpZiAob2xkbW9kZSA9PSBCNDNfTFBQSFlfVFhQQ1RMX0hXKSB7CisJCS8vVE9ETyBVcGRhdGUgVFggUG93ZXIgTlBUCisJCS8vVE9ETyBDbGVhciBhbGwgVFggUG93ZXIgb2Zmc2V0cworCX0gZWxzZSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpIHsKKwkJCS8vVE9ETyBSZWNhbGN1bGF0ZSB0YXJnZXQgVFggcG93ZXIKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCQkJMHhGRjgwLCBscHBoeS0+dHNzaV9pZHgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTSwKKwkJCQkJMHg4RkZGLCAoKHUxNilscHBoeS0+dHNzaV9ucHQgPDwgMTYpKTsKKwkJCS8vVE9ETyBTZXQgIlRTU0kgVHJhbnNtaXQgQ291bnQiIHZhcmlhYmxlIHRvIHRvdGFsIHRyYW5zbWl0dGVkIGZyYW1lIGNvdW50CisJCQkvL1RPRE8gRGlzYWJsZSBUWCBnYWluIG92ZXJyaWRlCisJCQlscHBoeS0+dHhfcHdyX2lkeF9vdmVyID0gLTE7CisJCX0KKwl9CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpCisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhEMCksIDB4RkQsIDB4Mik7CisJCWVsc2UKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHhGRCwgMCk7CisJfQorCWxwcGh5X3dyaXRlX3R4X3BjdGxfbW9kZV90b19oYXJkd2FyZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKworCWxwcGh5LT50eF9wd3JfaWR4X292ZXIgPSBpbmRleDsKKwlpZiAobHBwaHktPnR4cGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKQorCQlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfU1cpOworCisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2J0Y29leF9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19CVENPRVhfQ1RMLCAweDMpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQlRDT0VYX1RYQ1RMLCAweEZGKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MzIgKnNhdmVkX3RhYjsKKwljb25zdCB1bnNpZ25lZCBpbnQgc2F2ZWRfdGFiX3NpemUgPSAyNTY7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgdHhwY3RsX21vZGU7CisJczggdHhfcHdyX2lkeF9vdmVyOworCXUxNiB0c3NpX25wdCwgdHNzaV9pZHg7CisKKwlzYXZlZF90YWIgPSBrY2FsbG9jKHNhdmVkX3RhYl9zaXplLCBzaXplb2Yoc2F2ZWRfdGFiWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlZF90YWIpIHsKKwkJYjQzZXJyKGRldi0+d2wsICJQUjQxNTczIGZhaWxlZC4gT3V0IG9mIG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXR4cGN0bF9tb2RlID0gbHBwaHktPnR4cGN0bF9tb2RlOworCXR4X3B3cl9pZHhfb3ZlciA9IGxwcGh5LT50eF9wd3JfaWR4X292ZXI7CisJdHNzaV9ucHQgPSBscHBoeS0+dHNzaV9ucHQ7CisJdHNzaV9pZHggPSBscHBoeS0+dHNzaV9pZHg7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfbHB0YWJfcmVhZF9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTAsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfSBlbHNlIHsKKwkJYjQzX2xwdGFiX3JlYWRfYnVsayhkZXYsIEI0M19MUFRBQjMyKDcsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfQorCS8vVE9ETworCisJa2ZyZWUoc2F2ZWRfdGFiKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfY2FsaWJyYXRpb24oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCWVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHNhdmVkX3BjdGxfbW9kZTsKKworCWI0M19tYWNfc3VzcGVuZChkZXYpOworCisJbHBwaHlfYnRjb2V4X292ZXJyaWRlKGRldik7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXNhdmVkX3BjdGxfbW9kZSA9IGxwcGh5LT50eHBjdGxfbW9kZTsKKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfT0ZGKTsKKwkvL1RPRE8gUGVyZm9ybSB0cmFuc21pdCBwb3dlciB0YWJsZSBJL1EgTE8gY2FsaWJyYXRpb24KKwlpZiAoKGRldi0+cGh5LnJldiA9PSAwKSAmJiAoc2F2ZWRfcGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKSkKKwkJbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKGRldik7CisJLy9UT0RPIElmIGEgZnVsbCBjYWxpYnJhdGlvbiBoYXMgbm90IGJlZW4gcGVyZm9ybWVkIG9uIHRoaXMgY2hhbm5lbCB5ZXQsIHBlcmZvcm0gUEFQRCBUWC1wb3dlciBjYWxpYnJhdGlvbgorCWxwcGh5X3NldF90eF9wb3dlcl9jb250cm9sKGRldiwgc2F2ZWRfcGN0bF9tb2RlKTsKKwkvL1RPRE8gUGVyZm9ybSBJL1EgY2FsaWJyYXRpb24gd2l0aCBhIHNpbmdsZSBjb250cm9sIHZhbHVlIHNldAorCisJYjQzX21hY19lbmFibGUoZGV2KTsKK30KKworLyogSW5pdGlhbGl6ZSBUWCBwb3dlciBjb250cm9sICovCitzdGF0aWMgdm9pZCBscHBoeV90eF9wY3RsX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWlmICgwLypGSVhNRSBIV1BDVEwgY2FwYWJsZSAqLykgeworCQkvL1RPRE8KKwl9IGVsc2UgeyAvKiBUaGlzIGRldmljZSBpcyBvbmx5IHNvZnR3YXJlIFRYIHBvd2VyIGNvbnRyb2wgY2FwYWJsZS4gKi8KKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJLy9UT0RPCisJCX0gZWxzZSB7CisJCQkvL1RPRE8KKwkJfQorCQkvL1RPRE8gc2V0IEJCIG11bHRpcGxpZXIgdG8gMHgwMDk2CisJfQorfQorCitzdGF0aWMgaW50IGI0M19scHBoeV9vcF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwkvKiBUT0RPOiBiYW5kIFNQUk9NICovCisJbHBwaHlfYmFzZWJhbmRfaW5pdChkZXYpOworCWxwcGh5X3JhZGlvX2luaXQoZGV2KTsKKwkvL1RPRE8gY2FsaWJyYXRlIFJDCisJLy9UT0RPIHNldCBjaGFubmVsCisJbHBwaHlfdHhfcGN0bF9pbml0KGRldik7CisJLy9UT0RPIGZ1bGwgY2FsaWIKIAogCXJldHVybiAwOwogfQpAQCAtMTE1LDcgKzUwMiw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjQzX2xwcGh5X29wX2dldF9kZWZhdWx0X2NoYW4oc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCXJldHVybiAxOyAvKiBEZWZhdWx0IHRvIGNoYW5uZWwgMSAqLworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiAxOworCXJldHVybiAzNjsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2xwcGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmgKaW5kZXggYjBiNTM1Ny4uMTgzNzBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuaApAQCAtNCw4ICs0LDI4NSBAQAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBMUC1QSFkgKi8KIAogCisvKiBUaGUgQ0NLIFBIWSByZWdpc3RlciByYW5nZS4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfVkVSU0lPTgkJCUI0M19QSFlfQ0NLKDB4MDApIC8qIEIgUEhZIHZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfQkJDT05GSUcJCQlCNDNfUEhZX0NDSygweDAxKSAvKiBCIFBIWSBCQkNvbmZpZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9SWF9TVEFUMAkJCUI0M19QSFlfQ0NLKDB4MDQpIC8qIEIgUEhZIFJYIFN0YXR1czAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDEJCQlCNDNfUEhZX0NDSygweDA1KSAvKiBCIFBIWSBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NSU19USFJFU0gJCQlCNDNfUEhZX0NDSygweDA2KSAvKiBCIFBIWSBDUlMgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RYRVJST1IJCQlCNDNfUEhZX0NDSygweDA3KSAvKiBCIFBIWSBUeEVycm9yICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NIQU5ORUwJCQlCNDNfUEhZX0NDSygweDA4KSAvKiBCIFBIWSBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1dPUktBUk9VTkQJCQlCNDNfUEhZX0NDSygweDA5KSAvKiBCIFBIWSB3b3JrYXJvdW5kICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RFU1QJCQlCNDNfUEhZX0NDSygweDBBKSAvKiBCIFBIWSBUZXN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0ZPVVJXSVJFX0FERFIJCUI0M19QSFlfQ0NLKDB4MEIpIC8qIEIgUEhZIEZvdXJ3aXJlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfRk9VUldJUkVfREFUQV9ISQkJQjQzX1BIWV9DQ0soMHgwQykgLyogQiBQSFkgRm91cndpcmUgRGF0YSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9GT1VSV0lSRV9EQVRBX0xPCQlCNDNfUEhZX0NDSygweDBEKSAvKiBCIFBIWSBGb3Vyd2lyZSBEYXRhIExvICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0JJU1RfU1RBVAkJCUI0M19QSFlfQ0NLKDB4MEUpIC8qIEIgUEhZIEJpc3QgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9QQV9SQU1QX1RYX1RPCQkJQjQzX1BIWV9DQ0soMHgxMCkgLyogUEEgUmFtcCBUWCBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9TWU5USF9EQ19USU1FUgkJQjQzX1BIWV9DQ0soMHgxMSkgLyogUkYgU3ludGggREMgVGltZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BBX1JBTVBfVFhfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMikgLyogUEEgcmFtcCBUWCBUaW1lIGluICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9GSUxURVJfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMykgLyogUlggRmlsdGVyIFRpbWUgaW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BMTF9DT0VGRl9TCQkJQjQzX1BIWV9DQ0soMHgxOCkgLyogUExMIENvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9QTExfT1VUCQkJQjQzX1BIWV9DQ0soMHgxOSkgLyogUExMIE91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlNTSV9USFJFUwkJCUI0M19QSFlfQ0NLKDB4MjApIC8qIFJTU0kgVGhyZXNob2xkICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19ISAkJCUI0M19QSFlfQ0NLKDB4MjEpIC8qIElRIFRocmVzaG9sZCBISCAqLworI2RlZmluZSBCNDNfTFBQSFlfSVFfVEhSRVNfSAkJCUI0M19QSFlfQ0NLKDB4MjIpIC8qIElRIFRocmVzaG9sZCBIICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19MCQkJQjQzX1BIWV9DQ0soMHgyMykgLyogSVEgVGhyZXNob2xkIEwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1RIUkVTX0xMCQkJQjQzX1BIWV9DQ0soMHgyNCkgLyogSVEgVGhyZXNob2xkIExMICovCisjZGVmaW5lIEI0M19MUFBIWV9BR0NfR0FJTgkJCUI0M19QSFlfQ0NLKDB4MjUpIC8qIEFHQyBHYWluICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFfR0FJTl9SQU5HRQkJQjQzX1BIWV9DQ0soMHgyNikgLyogTE5BIEdhaW4gUmFuZ2UgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0pTU0kJCQkJQjQzX1BIWV9DQ0soMHgyNykgLyogSlNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFNTSV9DVEwJCQlCNDNfUEhZX0NDSygweDI4KSAvKiBUU1NJIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RTU0kJCQkJQjQzX1BIWV9DQ0soMHgyOSkgLyogVFNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9TUwkJCUI0M19QSFlfQ0NLKDB4MkEpIC8qIFRSIExvc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPX0xFQUtBR0UJCQlCNDNfUEhZX0NDSygweDJCKSAvKiBMTyBMZWFrYWdlICovCisjZGVmaW5lIEI0M19MUFBIWV9MT19SU1NJQUNDCQkJQjQzX1BIWV9DQ0soMHgyQykgLyogTE8gUlNTSUFjYyAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9fSVFfTUFHX0FDQwkJCUI0M19QSFlfQ0NLKDB4MkQpIC8qIExPIElRIE1hZyBBY2MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX0RDT0ZGU0VUMQkJCUI0M19QSFlfQ0NLKDB4MkUpIC8qIFRYIERDT2Zmc2V0MSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfRENPRkZTRVQyCQkJQjQzX1BIWV9DQ0soMHgyRikgLyogVFggRENPZmZzZXQyICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DUEVBS0NOVAkJCUI0M19QSFlfQ0NLKDB4MzApIC8qIFN5bmNQZWFrQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRlJFUQkJCUI0M19QSFlfQ0NLKDB4MzEpIC8qIFN5bmNGcmVxICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRElWRVJTSVRZQ1RMCQlCNDNfUEhZX0NDSygweDMyKSAvKiBTeW5jRGl2ZXJzaXR5Q29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUwJCQlCNDNfUEhZX0NDSygweDMzKSAvKiBQZWFrRW5lcmd5TCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUgJCQlCNDNfUEhZX0NDSygweDM0KSAvKiBQZWFrRW5lcmd5SCAqLworI2RlZmluZSBCNDNfTFBQSFlfU1lOQ0NUTAkJCUI0M19QSFlfQ0NLKDB4MzUpIC8qIFN5bmNDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTU1RFUAkJCUI0M19QSFlfQ0NLKDB4MzgpIC8qIERzc3NTdGVwICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTV0FSTVVQCQkJQjQzX1BIWV9DQ0soMHgzOSkgLyogRHNzc1dhcm11cCAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1NJR1BPVwkJCUI0M19QSFlfQ0NLKDB4M0QpIC8qIERzc3NTaWdQb3cgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NGRERFVEVDVEJMT0NLVElNRQkJQjQzX1BIWV9DQ0soMHg0MCkgLyogU2ZkRGV0ZWN0QmxvY2tUSW1lICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRUTwkJCQlCNDNfUEhZX0NDSygweDQxKSAvKiBTRkRUaW1lT3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRDVEwJCQlCNDNfUEhZX0NDSygweDQyKSAvKiBTRkRDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SWERCRwkJCQlCNDNfUEhZX0NDSygweDQzKSAvKiByeERlYnVnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9ERUxBWUNPTVAJCQlCNDNfUEhZX0NDSygweDQ0KSAvKiBSWCBEZWxheUNvbXAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0RST1BPVVRUTwkJCUI0M19QSFlfQ0NLKDB4NDUpIC8qIENSU0Ryb3BvdXRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QU0VVRE9TSE9SVFRPCQkJQjQzX1BIWV9DQ0soMHg0NikgLyogUHNldWRvU2hvcnRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUjM5MzEJCQlCNDNfUEhZX0NDSygweDQ3KSAvKiBQUjM5MzEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NDT0VGRjEJCQlCNDNfUEhZX0NDSygweDQ4KSAvKiBEU1NTQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTQ09FRkYyCQkJQjQzX1BIWV9DQ0soMHg0OSkgLyogRFNTU0NvZWZmMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLQ09FRkYxCQkJQjQzX1BIWV9DQ0soMHg0QSkgLyogQ0NLQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9DQ0tDT0VGRjIJCQlCNDNfUEhZX0NDSygweDRCKSAvKiBDQ0tDb2VmZjIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSQ09SUgkJCUI0M19QSFlfQ0NLKDB4NEMpIC8qIFRSQ29yciAqLworI2RlZmluZSBCNDNfTFBQSFlfQU5HTEVTQ0FMRQkJCUI0M19QSFlfQ0NLKDB4NEQpIC8qIEFuZ2xlU2NhbGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09QVElPTkFMTU9ERVMyCQlCNDNfUEhZX0NDSygweDRGKSAvKiBPcHRpb25hbE1vZGVzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLTE1TU1RFUFNJWkUJCUI0M19QSFlfQ0NLKDB4NTApIC8qIENDS0xNU1N0ZXBTaXplICovCisjZGVmaW5lIEI0M19MUFBIWV9ERkVCWVBBU1MJCQlCNDNfUEhZX0NDSygweDUxKSAvKiBERkVCeXBhc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS1NUQVJUREVMQVlMT05HCQlCNDNfUEhZX0NDSygweDUyKSAvKiBDQ0tTdGFydERlbGF5TG9uZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLU1RBUlRERUxBWVNIT1JUCQlCNDNfUEhZX0NDSygweDUzKSAvKiBDQ0tTdGFydERlbGF5U2hvcnQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BQUk9DQ0hERUxBWQkJCUI0M19QSFlfQ0NLKDB4NTQpIC8qIFBwcm9jQ2hEZWxheSAqLworI2RlZmluZSBCNDNfTFBQSFlfUFBST0NPTk9GRgkJCUI0M19QSFlfQ0NLKDB4NTUpIC8qIFBQcm9jT25PZmYgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQxMAkJQjQzX1BIWV9DQ0soMHg1QikgLyogTE5BR2FpblR3b0JpdDEwICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFHQUlOVFdPQklUMzIJCUI0M19QSFlfQ0NLKDB4NUMpIC8qIExOQUdhaW5Ud29CaXQzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfT1BUSU9OQUxNT0RFUwkJCUI0M19QSFlfQ0NLKDB4NUQpIC8qIE9wdGlvbmFsTW9kZXMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDIJCQlCNDNfUEhZX0NDSygweDVFKSAvKiBCIFBIWSBSWCBTdGF0dXMyICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1JYX1NUQVQzCQkJQjQzX1BIWV9DQ0soMHg1RikgLyogQiBQSFkgUlggU3RhdHVzMyAqLworI2RlZmluZSBCNDNfTFBQSFlfUFdETkRBQ0RFTEFZCQkJQjQzX1BIWV9DQ0soMHg2MykgLyogcHdkbkRhY0RlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRElHSUdBSU5fQ1RMCQlCNDNfUEhZX0NDSygweDY3KSAvKiBGaW5lRGlnaUdhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcyR0FJTlRCTExOQTgJCUI0M19QSFlfQ0NLKDB4NjgpIC8qIExnMkdhaW5UYmxMTkE4ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BMjgJCUI0M19QSFlfQ0NLKDB4NjkpIC8qIExnMkdhaW5UYmxMTkEyOCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTlRCTExOQVRSU1cJCUI0M19QSFlfQ0NLKDB4NkEpIC8qIEdhaW5UYmxMTkFUclN3ICovCisjZGVmaW5lIEI0M19MUFBIWV9QRUFLRU5FUkdZCQkJQjQzX1BIWV9DQ0soMHg2QikgLyogUGVha0VuZXJneSAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcySU5JVEdBSU4JCQlCNDNfUEhZX0NDSygweDZDKSAvKiBsZzJJbml0R2FpbiAqLworI2RlZmluZSBCNDNfTFBQSFlfQkxBTktDT1VOVExOQVBHQQkJQjQzX1BIWV9DQ0soMHg2RCkgLyogQmxhbmtDb3VudExuYVBnYSAqLworI2RlZmluZSBCNDNfTFBQSFlfTE5BR0FJTlRXT0JJVDU0CQlCNDNfUEhZX0NDSygweDZFKSAvKiBMTkFHYWluVHdvQml0NTQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQ3NgkJQjQzX1BIWV9DQ0soMHg2RikgLyogTE5BR2FpblR3b0JpdDc2ICovCisjZGVmaW5lIEI0M19MUFBIWV9KU1NJQ1RMCQkJQjQzX1BIWV9DQ0soMHg3MCkgLyogSlNTSUNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xHMkdBSU5UQkxMTkE0NAkJQjQzX1BIWV9DQ0soMHg3MSkgLyogTGcyR2FpblRibExOQTQ0ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BNjIJCUI0M19QSFlfQ0NLKDB4NzIpIC8qIExnMkdhaW5UYmxMTkE2MiAqLworCisvKiBUaGUgT0ZETSBQSFkgcmVnaXN0ZXIgcmFuZ2UuICovCisjZGVmaW5lIEI0M19MUFBIWV9WRVJTSU9OCQkJQjQzX1BIWV9PRkRNKDB4MDApIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JCQ09ORklHCQkJQjQzX1BIWV9PRkRNKDB4MDEpIC8qIEJCQ29uZmlnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMAkJCUI0M19QSFlfT0ZETSgweDA0KSAvKiBSWCBTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMQkJCUI0M19QSFlfT0ZETSgweDA1KSAvKiBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9FUlJPUgkJCUI0M19QSFlfT0ZETSgweDA3KSAvKiBUWCBFcnJvciAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0hBTk5FTAkJCUI0M19QSFlfT0ZETSgweDA4KSAvKiBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9XT1JLQVJPVU5ECQkJQjQzX1BIWV9PRkRNKDB4MDkpIC8qIHdvcmthcm91bmQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0ZPVVJXSVJFX0FERFIJCQlCNDNfUEhZX09GRE0oMHgwQikgLyogRm91cndpcmUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBSEkJCUI0M19QSFlfT0ZETSgweDBDKSAvKiBGb3Vyd2lyZURhdGFIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBTE8JCUI0M19QSFlfT0ZETSgweDBEKSAvKiBGb3Vyd2lyZURhdGFMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfQklTVFNUQVQwCQkJQjQzX1BIWV9PRkRNKDB4MEUpIC8qIEJpc3RTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9CSVNUU1RBVDEJCQlCNDNfUEhZX09GRE0oMHgwRikgLyogQmlzdFN0YXR1czEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MTApIC8qIGNyc2dhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVBXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxMSkgLyogb2ZkbVBvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1QV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTIpIC8qIG9mZG1Qb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNUFdSX1RIUkVTSDIJCUI0M19QSFlfT0ZETSgweDEzKSAvKiBvZmRtUG93ZXIgVGhyZXNoMiAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1BXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxNCkgLyogZHNzc1Bvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NQV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTUpIC8qIGRzc3NQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwJCQlCNDNfUEhZX09GRE0oMHgxNikgLyogTWluUG93ZXIgTGV2ZWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMAkJQjQzX1BIWV9PRkRNKDB4MTcpIC8qIG9mZG1TeW5jVGhyZXNoMCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gxCQlCNDNfUEhZX09GRE0oMHgxOCkgLyogb2ZkbVN5bmNUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRlJFUUVTVAkJCUI0M19QSFlfT0ZETSgweDE5KSAvKiBGaW5lRnJlcUVzdCAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRUFGVEVSUEtUUlhUTwkJQjQzX1BIWV9PRkRNKDB4MUEpIC8qIElETEVhZnRlclBrdFJYVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfTFRSTl9DVEwJCQlCNDNfUEhZX09GRE0oMHgxQikgLyogTFRSTiBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVAkJQjQzX1BIWV9PRkRNKDB4MUMpIC8qIERDT2Zmc2V0VHJhbnNpZW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUkVBTUJMRUlOVE8JCQlCNDNfUEhZX09GRE0oMHgxRCkgLyogUHJlYW1ibGVJblRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BSRUFNQkxFQ09ORklSTVRPCQlCNDNfUEhZX09GRE0oMHgxRSkgLyogUHJlYW1ibGVDb25maXJtVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xJUFRIUkVTSAkJCUI0M19QSFlfT0ZETSgweDFGKSAvKiBDbGlwVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MjApIC8qIENsaXBDdHJUaHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVElNRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHgyMSkgLyogb2ZkbVN5bmNUaW1lciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9XQUlURk9SUEhZU0VMVE8JCUI0M19QSFlfT0ZETSgweDIyKSAvKiBXYWl0Zm9yUEhZU2VsVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfSElHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyMykgLyogSGlHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPV0dBSU5EQgkJCUI0M19QSFlfT0ZETSgweDI0KSAvKiBMb3dHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyNSkgLyogVmVyeUxvd0dhaW5EQiAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTk1JU01BVENICQkJQjQzX1BIWV9PRkRNKDB4MjYpIC8qIGdhaW5NaXNtYXRjaCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENICQlCNDNfUEhZX09GRE0oMHgyNykgLyogZ2FpbmRpcmVjdE1pc21hdGNoICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMAkJCUI0M19QSFlfT0ZETSgweDI4KSAvKiBQb3dlciBUaHJlc2gwICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMQkJCUI0M19QSFlfT0ZETSgweDI5KSAvKiBQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9ERVRFQ1RPUl9ERUxBWV9BREpVU1QJCUI0M19QSFlfT0ZETSgweDJBKSAvKiBEZXRlY3RvciBEZWxheSBBZGp1c3QgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JFRFVDRURfREVURUNUT1JfREVMQVkJQjQzX1BIWV9PRkRNKDB4MkIpIC8qIFJlZHVjZWQgRGV0ZWN0b3IgRGVsYXkgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RBVEFfVE8JCQlCNDNfUEhZX09GRE0oMHgyQykgLyogZGF0YSBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DT1JSRUxBVE9SX0RJU19ERUxBWQkJQjQzX1BIWV9PRkRNKDB4MkQpIC8qIGNvcnJlbGF0b3IgRGlzIERlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9ESVZFUlNJVFlfR0FJTkJBQ0sJCUI0M19QSFlfT0ZETSgweDJFKSAvKiBEaXZlcnNpdHkgR2FpbkJhY2sgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NfQ09ORklSTV9DTlQJCUI0M19QSFlfT0ZETSgweDJGKSAvKiBEU1NTIENvbmZpcm0gQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ19CTEFOS19JTlQJCQlCNDNfUEhZX09GRE0oMHgzMCkgLyogREMgQmxhbmsgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dBSU5fTUlTTUFUQ0hfTElNSVQJCUI0M19QSFlfT0ZETSgweDMxKSAvKiBnYWluIE1pc21hdGNoIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DUlNfRURfVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MzIpIC8qIGNycyBlZCB0aHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BIQVNFX1NISUZUX0NUTAkJQjQzX1BIWV9PRkRNKDB4MzMpIC8qIHBoYXNlIHNoaWZ0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lOUFVUX1BXUkRCCQkJQjQzX1BIWV9PRkRNKDB4MzQpIC8qIElucHV0IFBvd2VyREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1fU1lOQ19DVEwJCQlCNDNfUEhZX09GRE0oMHgzNSkgLyogb2ZkbSBzeW5jIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzAJCQlCNDNfUEhZX09GRE0oMHgzNikgLyogQWZlIEFEQyBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzEJCQlCNDNfUEhZX09GRE0oMHgzNykgLyogQWZlIEFEQyBDb250cm9sIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzIJCQlCNDNfUEhZX09GRE0oMHgzOCkgLyogQWZlIEFEQyBDb250cm9sIDIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EQUNfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MzkpIC8qIEFmZSBEQUMgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTAkJCUI0M19QSFlfT0ZETSgweDNBKSAvKiBBZmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTF9PVlIJCQlCNDNfUEhZX09GRE0oMHgzQikgLyogQWZlIENvbnRyb2wgT3ZyICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfQ1RMX09WUlZBTAkJQjQzX1BIWV9PRkRNKDB4M0MpIC8qIEFmZSBDb250cm9sIE92clZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzAJCUI0M19QSFlfT0ZETSgweDNEKSAvKiBBZmUgUlNTSSBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xCQlCNDNfUEhZX09GRE0oMHgzRSkgLyogQWZlIFJTU0kgQ29udHJvbCAxICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfUlNTSV9TRUwJCQlCNDNfUEhZX09GRE0oMHgzRikgLyogQWZlIFJTU0kgU2VsICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9USFJFU0gJCQlCNDNfUEhZX09GRE0oMHg0MCkgLyogUmFkYXIgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9CTEFOS19JTlQJCUI0M19QSFlfT0ZETSgweDQxKSAvKiBSYWRhciBibGFuayBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfTUlOX0ZNX0lOVAkJQjQzX1BIWV9PRkRNKDB4NDIpIC8qIFJhZGFyIG1pbiBmbSBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfR0FJTl9UTwkJCUI0M19QSFlfT0ZETSgweDQzKSAvKiBSYWRhciBnYWluIHRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1BVTFNFX1RPCQlCNDNfUEhZX09GRE0oMHg0NCkgLyogUmFkYXIgcHVsc2UgdGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfREVURUNUX0ZNX0NUTAkJQjQzX1BIWV9PRkRNKDB4NDUpIC8qIFJhZGFyIGRldGVjdCBGTSBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9ERVRFQ1RfRU4JCUI0M19QSFlfT0ZETSgweDQ2KSAvKiBSYWRhciBkZXRlY3QgRW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1JEX0RBVEFfUkVHCQlCNDNfUEhZX09GRE0oMHg0NykgLyogUmFkYXIgUmQgRGF0YSBSZWcgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xQX1BIWV9DVEwJCQlCNDNfUEhZX09GRE0oMHg0OCkgLyogTFAgUEhZIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NMQVNTSUZJRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHg0OSkgLyogY2xhc3NpZmllciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SRVNFVF9DVEwJCQlCNDNfUEhZX09GRE0oMHg0QSkgLyogcmVzZXQgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xLRU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NEIpIC8qIENsa0VuIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAJCQlCNDNfUEhZX09GRE0oMHg0QykgLyogUkYgT3ZlcnJpZGUgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAJCUI0M19QSFlfT0ZETSgweDREKSAvKiBSRiBPdmVycmlkZSBWYWwgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzEJCQlCNDNfUEhZX09GRE0oMHg0RSkgLyogVFIgTG9va3VwIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF8yCQkJQjQzX1BIWV9PRkRNKDB4NEYpIC8qIFRSIExvb2t1cCAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJU0VMTE9PS1VQMQkJQjQzX1BIWV9PRkRNKDB4NTApIC8qIFJzc2lTZWxMb29rdXAxICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTUQJCQlCNDNfUEhZX09GRE0oMHg1MSkgLyogaXFsbyBDYWwgQ21kICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTURfTl9OVU0JCUI0M19QSFlfT0ZETSgweDUyKSAvKiBpcWxvIENhbCBDbWQgTiBudW0gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRTE9fQ0FMX0NNRF9HX0NUTAkJQjQzX1BIWV9PRkRNKDB4NTMpIC8qIGlxbG8gQ2FsIENtZCBHIGNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BQ0lOVF9EQkdfUkVHSVNURVIJCUI0M19QSFlfT0ZETSgweDU0KSAvKiBtYWNpbnQgRGVidWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFX0FERFIJCQlCNDNfUEhZX09GRE0oMHg1NSkgLyogVGFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEFCTEVEQVRBTE8JCQlCNDNfUEhZX09GRE0oMHg1NikgLyogVGFibGVkYXRhTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFREFUQUhJCQkJQjQzX1BIWV9PRkRNKDB4NTcpIC8qIFRhYmxlZGF0YUhpICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX0VOQUJMRV9BRERSCQlCNDNfUEhZX09GRE0oMHg1OCkgLyogcGh5IENSUyBFbmFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NTkpIC8qIElkbGV0aW1lIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX0NSU19PTl9MTwkJQjQzX1BIWV9PRkRNKDB4NUEpIC8qIElkbGV0aW1lIENSUyBPbiBMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1JTX09OX0hJCQlCNDNfUEhZX09GRE0oMHg1QikgLyogSWRsZXRpbWUgQ1JTIE9uIEhpICovCisjZGVmaW5lIEI0M19MUFBIWV9JRExFVElNRV9NRUFTX1RJTUVfTE8JCUI0M19QSFlfT0ZETSgweDVDKSAvKiBJZGxldGltZSBNZWFzIFRpbWUgTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX01FQVNfVElNRV9ISQkJQjQzX1BIWV9PRkRNKDB4NUQpIC8qIElkbGV0aW1lIE1lYXMgVGltZSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fVFhfQUREUglCNDNfUEhZX09GRE0oMHg1RSkgLyogUmVzZXQgbGVuIE9mZG0gVFggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fUlhfQUREUglCNDNfUEhZX09GRE0oMHg1RikgLyogUmVzZXQgbGVuIE9mZG0gUlggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVHX0NSU19FTkFCTEUJCUI0M19QSFlfT0ZETSgweDYwKSAvKiByZWcgY3JzIGVuYWJsZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUExDUF9UTVRfU1RSMF9DVFJfTUlOCQlCNDNfUEhZX09GRE0oMHg2MSkgLyogUExDUCBUbXQgU3RyMCBDdHIgTWluICovCisjZGVmaW5lIEI0M19MUFBIWV9QS1RfRlNNX1JFU0VUX0xFTl9WQUwJCUI0M19QSFlfT0ZETSgweDYyKSAvKiBQa3QgZnNtIFJlc2V0IExlbiBWYWx1ZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVBRFNZTTJSRVNFVF9DVEwJCUI0M19QSFlfT0ZETSgweDYzKSAvKiByZWFkc3ltMnJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RDX0ZJTFRFUl9ERUxBWTEJCUI0M19QSFlfT0ZETSgweDY0KSAvKiBEYyBmaWx0ZXIgZGVsYXkxICovCisjZGVmaW5lIEI0M19MUFBIWV9QQUNLRVRfUlhfQUNUSVZFX1RPCQlCNDNfUEhZX09GRE0oMHg2NSkgLyogcGFja2V0IHJ4IEFjdGl2ZSB0aW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9UT1ZBTAkJCUI0M19QSFlfT0ZETSgweDY2KSAvKiBlZCB0aW1lb3V0VmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0hPTERfQ1JTX09OX1ZBTAkJQjQzX1BIWV9PRkRNKDB4NjcpIC8qIGhvbGQgQ1JTIE9uIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNX1RYX1BIWV9DUlNfREVMQVlfVkFMCUI0M19QSFlfT0ZETSgweDY5KSAvKiBvZmRtIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS19UWF9QSFlfQ1JTX0RFTEFZX1ZBTAlCNDNfUEhZX09GRE0oMHg2QSkgLyogY2NrIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0VEX09OX0NPTkZJUk1fVElNRVJfVkFMCUI0M19QSFlfT0ZETSgweDZCKSAvKiBFZCBvbiBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9PRkZTRVRfQ09ORklSTV9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkMpIC8qIEVkIG9mZnNldCBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX09GRlNFVF9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkQpIC8qIHBoeSBDUlMgb2Zmc2V0IFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTAkJQjQzX1BIWV9PRkRNKDB4NzApIC8qIEFEQyBDb21wZW5zYXRpb24gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9HMl9SQlBTS19BRERSCQlCNDNfUEhZX09GRE0oMHg3MSkgLyogbG9nMiBSQlBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1JRUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDcyKSAvKiBsb2cyIFJRUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPRzJfUjE2UUFNX0FERFIJCUI0M19QSFlfT0ZETSgweDczKSAvKiBsb2cyIFIxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1I2NFFBTV9BRERSCQlCNDNfUEhZX09GRE0oMHg3NCkgLyogbG9nMiBSNjRRQU0gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZGU0VUX0JQU0tfQUREUgkJQjQzX1BIWV9PRkRNKDB4NzUpIC8qIG9mZnNldCBCUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRlNFVF9RUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDc2KSAvKiBvZmZzZXQgUVBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfMTZRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzcpIC8qIG9mZnNldCAxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfNjRRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzgpIC8qIG9mZnNldCA2NFFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTEJCQlCNDNfUEhZX09GRE0oMHg3OSkgLyogQWxwaGExICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTIJCQlCNDNfUEhZX09GRE0oMHg3QSkgLyogQWxwaGEyICovCisjZGVmaW5lIEI0M19MUFBIWV9CRVRBMQkJCQlCNDNfUEhZX09GRE0oMHg3QikgLyogQmV0YTEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JFVEEyCQkJCUI0M19QSFlfT0ZETSgweDdDKSAvKiBCZXRhMiAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9PUF9OVU1fQUREUgkJCUI0M19QSFlfT0ZETSgweDdEKSAvKiBMb29wIE51bSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9TVFJfQ09MTE1BWF9TTVBMX0FERFIJCUI0M19QSFlfT0ZETSgweDdFKSAvKiBTdHIgQ29sbG1heCBTYW1wbGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTUFYX1NNUExfQ09BUlNFX0ZJTkVfQUREUglCNDNfUEhZX09GRE0oMHg3RikgLyogTWF4IFNhbXBsZSBDb2Fyc2UvRmluZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9NQVhfU01QTF9DT0FSU0VfU1RSMENUUl9BRERSCUI0M19QSFlfT0ZETSgweDgwKSAvKiBNYXggU2FtcGxlIENvYXJzZS9TdHIwQ3RyIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0VOQUJMRV9XQUlUX1RJTUVfQUREUglCNDNfUEhZX09GRE0oMHg4MSkgLyogSVEgRW5hYmxlIFdhaXQgVGltZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9OVU1fU01QTFNfQUREUgkJQjQzX1BIWV9PRkRNKDB4ODIpIC8qIElRIE51bSBTYW1wbGVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4MykgLyogSVEgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NCkgLyogSVEgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NSkgLyogSVEgSSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NikgLyogSVEgSSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NykgLyogSVEgUSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4OCkgLyogSVEgUSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BWE5VTVNURVBTCQkJQjQzX1BIWV9PRkRNKDB4ODkpIC8qIE1heE51bXN0ZXBzICovCisjZGVmaW5lIEI0M19MUFBIWV9ST1RPUlBIQVNFX0FERFIJCUI0M19QSFlfT0ZETSgweDhBKSAvKiBSb3RvclBoYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FEVkFOQ0VEUkVUQVJEUk9UT1JfQUREUglCNDNfUEhZX09GRE0oMHg4QikgLyogQWR2YW5jZWRSZXRhcmRSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJQURDREVMQVlfQ1RMX0FERFIJCUI0M19QSFlfT0ZETSgweDhEKSAvKiByc3NpQWRjZGVsYXkgQ29udHJvbCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UU1NJU1RBVF9BRERSCQkJQjQzX1BIWV9PRkRNKDB4OEUpIC8qIHRzc2lTdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEVNUFNFTlNFU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg4RikgLyogdGVtcHNlbnNlU3RhdHVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RFTVBTRU5TRV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTApIC8qIHRlbXBzZW5zZSBDb250cm9sIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1dSU1NJU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5MSkgLyogd3Jzc2lzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTVVGQUNUT1JBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTIpIC8qIG11ZmFjdG9yYWRkciAqLworI2RlZmluZSBCNDNfTFBQSFlfU0NSQU1TVEFURV9BRERSCQlCNDNfUEhZX09GRE0oMHg5MykgLyogc2NyYW1zdGF0ZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UWEhPTERPRkZBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTQpIC8qIHR4aG9sZG9mZmFkZHIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BLVEdBSU5WQUxfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTUpIC8qIHBrdGdhaW52YWwgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ09BUlNFRVNUSU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTYpIC8qIENvYXJzZWVzdGltIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NUQVRFX1RSQU5TSVRJT05fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTcpIC8qIHN0YXRlIFRyYW5zaXRpb24gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJOX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5OCkgLyogVFJOIG9mZnNldCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9OVU1fUk9UT1JfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTkpIC8qIE51bSBSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9WSVRFUkJJX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5QSkgLyogVml0ZXJiaSBPZmZzZXQgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfU01QTF9DT0xMRUNUX1dBSVRfQUREUglCNDNfUEhZX09GRE0oMHg5QikgLyogU2FtcGxlIGNvbGxlY3Qgd2FpdCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BX1BIWV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OUMpIC8qIEEgUEhZIENvbnRyb2wgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTlVNX1BBU1NfVEhST1VHSF9BRERSCQlCNDNfUEhZX09GRE0oMHg5RCkgLyogTnVtIFBhc3MgVGhyb3VnaCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9DT01QX0NPRUZGX1MJCUI0M19QSFlfT0ZETSgweDlFKSAvKiBSWCBDb21wIGNvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9DUEFST1RBVEVWQUwJCQlCNDNfUEhZX09GRE0oMHg5RikgLyogY3BhUm90YXRlVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NNUExfUExBWV9DT1VOVAkJQjQzX1BIWV9PRkRNKDB4QTApIC8qIFNhbXBsZSBwbGF5IGNvdW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9TTVBMX1BMQVlfQlVGRkVSX0NUTAkJQjQzX1BIWV9PRkRNKDB4QTEpIC8qIFNhbXBsZSBwbGF5IEJ1ZmZlciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9GT1VSV0lSRV9DVEwJCQlCNDNfUEhZX09GRE0oMHhBMikgLyogZm91cndpcmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ1BBX1RBSUxDT1VOVF9WQUwJCUI0M19QSFlfT0ZETSgweEEzKSAvKiBDUEEgVGFpbENvdW50IFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRAkJQjQzX1BIWV9PRkRNKDB4QTQpIC8qIFRYIFBvd2VyIENvbnRyb2wgQ21kICovCisjZGVmaW5lICBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERQkJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgbW9kZSBtYXNrICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfT0ZGCTB4MDAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworI2RlZmluZSAgIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX1NXCTB4ODAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIFNPRlRXQVJFICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFcJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgSEFSRFdBUkUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTQkJQjQzX1BIWV9PRkRNKDB4QTUpIC8qIFRYIFBvd2VyIENvbnRyb2wgTm51bSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9JRExFVFNTSQkJQjQzX1BIWV9PRkRNKDB4QTYpIC8qIFRYIFBvd2VyIENvbnRyb2wgSWRsZVRzc2kgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfVEFSR0VUUFdSCQlCNDNfUEhZX09GRE0oMHhBNykgLyogVFggUG93ZXIgQ29udHJvbCBUYXJnZXRQb3dlciAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9ERUxUQVBXUl9MSU1JVAlCNDNfUEhZX09GRE0oMHhBOCkgLyogVFggUG93ZXIgQ29udHJvbCBEZWx0YVBvd2VyIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0JBU0VJTkRFWAkJQjQzX1BIWV9PRkRNKDB4QTkpIC8qIFRYIFBvd2VyIENvbnRyb2wgQmFzZUluZGV4ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX1BXUl9JTkRFWAkJQjQzX1BIWV9PRkRNKDB4QUEpIC8qIFRYIFBvd2VyIENvbnRyb2wgUG93ZXIgSW5kZXggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfU1RBVAkJQjQzX1BIWV9PRkRNKDB4QUIpIC8qIFRYIFBvd2VyIENvbnRyb2wgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9MUF9SRl9TSUdOQUxfTFVUCQlCNDNfUEhZX09GRE0oMHhBQykgLyogTFAgUkYgc2lnbmFsIExVVCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlhfUkFESU9fQ1RMX0ZJTFRFUl9TVEFURQlCNDNfUEhZX09GRE0oMHhBRCkgLyogUlggUmFkaW8gQ29udHJvbCBGaWx0ZXIgU3RhdGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX1JBRElPX0NUTAkJCUI0M19QSFlfT0ZETSgweEFFKSAvKiBSWCBSYWRpbyBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9OUlNTSV9TVEFUX0FERFIJCUI0M19QSFlfT0ZETSgweEFGKSAvKiBOUlNTSSBzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMgkJCUI0M19QSFlfT0ZETSgweEIwKSAvKiBSRiBvdmVycmlkZSAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTAkJQjQzX1BIWV9PRkRNKDB4QjEpIC8qIFJGIG92ZXJyaWRlIDIgdmFsICovCisjZGVmaW5lIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMAkJQjQzX1BIWV9PRkRNKDB4QjIpIC8qIFBTIENvbnRyb2wgb3ZlcnJpZGUgdmFsMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUFNfQ1RMX09WRVJSSURFX1ZBTDEJCUI0M19QSFlfT0ZETSgweEIzKSAvKiBQUyBDb250cm9sIG92ZXJyaWRlIHZhbDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BTX0NUTF9PVkVSUklERV9WQUwyCQlCNDNfUEhZX09GRE0oMHhCNCkgLyogUFMgQ29udHJvbCBvdmVycmlkZSB2YWwyICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9HQUlOX0NUTF9PVkVSUklERV9WQUwJQjQzX1BIWV9PRkRNKDB4QjUpIC8qIFRYIGdhaW4gQ29udHJvbCBvdmVycmlkZSB2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTAlCNDNfUEhZX09GRE0oMHhCNikgLyogUlggZ2FpbiBDb250cm9sIG92ZXJyaWRlIHZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlMJCQlCNDNfUEhZX09GRE0oMHhCNykgLyogQUZFIERERlMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EREZTX1BPSU5URVJfSU5JVAkJQjQzX1BIWV9PRkRNKDB4QjgpIC8qIEFGRSBEREZTIHBvaW50ZXIgaW5pdCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlNfSU5DUl9JTklUCQlCNDNfUEhZX09GRE0oMHhCOSkgLyogQUZFIERERlMgaW5jciBpbml0ICovCisjZGVmaW5lIEI0M19MUFBIWV9NUkNOT0lTRVJFRFVDVElPTgkJQjQzX1BIWV9PRkRNKDB4QkEpIC8qIG1yY05vaXNlUmVkdWN0aW9uICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDMJCQlCNDNfUEhZX09GRE0oMHhCQikgLyogVFJMb29rdXAzICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDQJCQlCNDNfUEhZX09GRE0oMHhCQykgLyogVFJMb29rdXA0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9GSUZPX1NUQVQJCUI0M19QSFlfT0ZETSgweEJEKSAvKiBSYWRhciBGSUZPIFN0YXR1cyAqLworI2RlZmluZSBCNDNfTFBQSFlfR1BJT19PVVRFTgkJCUI0M19QSFlfT0ZETSgweEJFKSAvKiBHUElPIE91dCBlbmFibGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dQSU9fU0VMRUNUCQkJQjQzX1BIWV9PRkRNKDB4QkYpIC8qIEdQSU8gU2VsZWN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9HUElPX09VVAkJCUI0M19QSFlfT0ZETSgweEMwKSAvKiBHUElPIE91dCAqLwogCiAKKworLyogUmFkaW8gcmVnaXN0ZXIgYWNjZXNzIGRlY29yYXRvcnMuICovCiAjZGVmaW5lIEI0M19MUF9SQURJTyhyYWRpb19yZWcpCQkJKHJhZGlvX3JlZykKICNkZWZpbmUgQjQzX0xQX05PUlRIKHJhZGlvX3JlZykJCQlCNDNfTFBfUkFESU8ocmFkaW9fcmVnKQogI2RlZmluZSBCNDNfTFBfU09VVEgocmFkaW9fcmVnKQkJCUI0M19MUF9SQURJTygocmFkaW9fcmVnKSB8IDB4NDAwMCkKQEAgLTUyOSw4ICs4MDYsNTggQEAKIAogCiAKK2VudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHsKKwlCNDNfTFBQSFlfVFhQQ1RMX1VOS05PV04gPSAwLAorCUI0M19MUFBIWV9UWFBDVExfT0ZGLAkvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworCUI0M19MUFBIWV9UWFBDVExfU1csCS8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgc2V0IHRvIFNvZnR3YXJlICovCisJQjQzX0xQUEhZX1RYUENUTF9IVywJLyogVFggcG93ZXIgY29udHJvbCBpcyBzZXQgdG8gSGFyZHdhcmUgKi8KK307CisKIHN0cnVjdCBiNDNfcGh5X2xwIHsKLQkvL1RPRE8KKwkvKiBDdXJyZW50IFRYIHBvd2VyIGNvbnRyb2wgbW9kZS4gKi8KKwllbnVtIGI0M19scHBoeV90eHBjdGxfbW9kZSB0eHBjdGxfbW9kZTsKKworCS8qIFRyYW5zbWl0IGlzb2xhdGlvbiBtZWRpdW0gYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9tZWRfYmFuZDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBUcmFuc21pdCBpc29sYXRpb24gbG93IGJhbmQgKi8KKwl1OCB0eF9pc29sYXRpb25fbG93X2JhbmQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVHJhbnNtaXQgaXNvbGF0aW9uIGhpZ2ggYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogUmVjZWl2ZSBwb3dlciBvZmZzZXQgKi8KKwl1OCByeF9wd3Jfb2Zmc2V0OyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVFNTSSB0cmFuc21pdCBjb3VudCAqLworCXUxNiB0c3NpX3R4X2NvdW50OworCS8qIFRTU0kgaW5kZXggKi8KKwl1MTYgdHNzaV9pZHg7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVFNTSSBucHQgKi8KKwl1MTYgdHNzaV9ucHQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBUYXJnZXQgVFggZnJlcXVlbmN5ICovCisJdTE2IHRndF90eF9mcmVxOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVHJhbnNtaXQgcG93ZXIgaW5kZXggb3ZlcnJpZGUgKi8KKwlzOCB0eF9wd3JfaWR4X292ZXI7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBSU1NJIHZmICovCisJdTggcnNzaV92ZjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIHZjICovCisJdTggcnNzaV92YzsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIGdzICovCisJdTggcnNzaV9nczsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFJDIGNhcCAqLworCXU4IHJjX2NhcDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBCWCBhcmNoICovCisJdTggYnhfYXJjaDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIEZ1bGwgY2FsaWJyYXRpb24gY2hhbm5lbCAqLworCXU4IGZ1bGxfY2FsaWJfY2hhbjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFRyYW5zbWl0IGlxbG9jYWwgYmVzdCBjb2VmZnMgKi8KKwlib29sIHR4X2lxbG9jX2Jlc3RfY29lZmZzX3ZhbGlkOworCXU4IHR4X2lxbG9jX2Jlc3RfY29lZmZzWzExXTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IDEwMzZiZWYuLjhjZDk3NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTU1LDggKzU1LDggQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICB1MTYgY29va2llLAorc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgIHUxNiBjb29raWUsCiAJCQkJICAgICAgc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKipwYWNrKQogewogCXN0cnVjdCBiNDNfcGlvICpwaW8gPSAmZGV2LT5waW87CkBAIC0xMzQsOCArMTM0LDggQEAKIAlyZXR1cm4gODsKIH0KIAotc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKiBiNDNfc2V0dXBfcGlvcXVldWVfdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKmI0M19zZXR1cF9waW9xdWV1ZV90eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxOwogCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwOwpAQCAtMTcxLDggKzE3MSw4IEBACiAJcmV0dXJuIHE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICogYjQzX3NldHVwX3Bpb3F1ZXVlX3J4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpiNDNfc2V0dXBfcGlvcXVldWVfcngoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcTsKIApAQCAtMzA4LDggKzMwOCw4IEBACiB9CiAKIC8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgUElPIHF1ZXVlcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCQkgdTggcXVldWVfcHJpbykKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJCXU4IHF1ZXVlX3ByaW8pCiB7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCmluZGV4IDcxMzc1MzcuLmFmYWQ0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLWNoYXIgKiBiNDNfcmZraWxsX2xlZF9uYW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK2NoYXIgKmI0M19yZmtpbGxfbGVkX25hbWUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfcmZraWxsICpyZmsgPSAmKGRldi0+d2wtPnJma2lsbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE3MzRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5jCkBAIC0wLDAgKzEsMzk0IEBACisvKgorCisgIEJyb2FkY29tIEI0MyB3aXJlbGVzcyBkcml2ZXIKKyAgSUVFRSA4MDIuMTFnIExQLVBIWSBhbmQgcmFkaW8gZGV2aWNlIGRhdGEgdGFibGVzCisKKyAgQ29weXJpZ2h0IChjKSAyMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKworI2luY2x1ZGUgImI0My5oIgorI2luY2x1ZGUgInRhYmxlc19scHBoeS5oIgorI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJwaHlfbHAuaCIKKworCisvKiBFbnRyeSBvZiB0aGUgMjA2MiByYWRpbyBpbml0IHRhYmxlICovCitzdHJ1Y3QgYjIwNjJfaW5pdF90YWJfZW50cnkgeworCXUxNiBvZmZzZXQ7CisJdTE2IHZhbHVlX2E7CisJdTE2IHZhbHVlX2c7CisJdTggZmxhZ3M7Cit9OworI2RlZmluZSBCMjA2Ml9GTEFHX0EJMHgwMSAvKiBGbGFnOiBJbml0IGluIEEgbW9kZSAqLworI2RlZmluZSBCMjA2Ml9GTEFHX0cJMHgwMiAvKiBGbGFnOiBJbml0IGluIEcgbW9kZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5IGIyMDYyX2luaXRfdGFiW10gPSB7CisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IDB4MDAwMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0zLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU03LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BETl9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMiwgLnZhbHVlX2EgPSAweDAwMTgsIC52YWx1ZV9nID0gMHgwMDE4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fR0VOX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0lRX0NBTElCLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9MUEYsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0JJQVMwLCAudmFsdWVfYSA9IDB4MDA0MSwgLnZhbHVlX2cgPSAweDAwNDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR05FQV9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUyLCAudmFsdWVfYSA9IDB4MDBERCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwQjUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMUYsIC52YWx1ZV9nID0gMHgwMDFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDksIC52YWx1ZV9nID0gMHgwMDA5LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDIsIC52YWx1ZV9hID0gMHgwMDE4LCAudmFsdWVfZyA9IDB4MDAxOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwzLCAudmFsdWVfYSA9IDB4MDAyNywgLnZhbHVlX2cgPSAweDAwMjcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMjgsIC52YWx1ZV9nID0gMHgwMDI4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDUsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEw2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwwLCAudmFsdWVfYSA9IDB4MDA4MiwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4wLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4xLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMCwgLnZhbHVlX2EgPSAweDAwNDMsIC52YWx1ZV9nID0gMHgwMDQzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DQUxJQjAsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ0FMSUIxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NBTElCMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMkEsIC52YWx1ZV9nID0gMHgwMDJBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMiwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMywgLnZhbHVlX2EgPSAweDAwMjEsIC52YWx1ZV9nID0gMHgwMDIxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNCwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNSwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMiwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMiwgLnZhbHVlX2EgPSAweDAwODQsIC52YWx1ZV9nID0gMHgwMDg0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMiwgLnZhbHVlX2cgPSAweDAwMDIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDcsIC52YWx1ZV9hID0gMHgwMDU4LCAudmFsdWVfZyA9IDB4MDA1OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDgsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTF9BLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzJHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzVHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9UVU5FLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwMUIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BBRCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfUEdBLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9QQURBVVgsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BHQUFVWCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFNTSV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UU1NJX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RTU0lfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ0FMSUJfVFMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDEsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAxNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDBGLCAudmFsdWVfZyA9IDB4MDAwRiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BTRU5TRV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QU0VOU0VfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUFNFTlNFX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RFU1RfQlVGMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JBRElPX0lEX0NPREUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU02LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU05LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTE1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMCwgLnZhbHVlX2EgPSAweDAwRkYsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUERTX0NUTDIsIC52YWx1ZV9hID0gMHgwMDhFLCAudmFsdWVfZyA9IDB4MDA4RSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwwLCAudmFsdWVfYSA9IDB4MDAwNiwgLnZhbHVlX2cgPSAweDAwMDYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwyLCAudmFsdWVfYSA9IDB4MDAxMSwgLnZhbHVlX2cgPSAweDAwMTEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwwLCAudmFsdWVfYSA9IDB4MDBGOCwgLnZhbHVlX2cgPSAweDAwRDgsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEsIC52YWx1ZV9hID0gMHgwMDNDLCAudmFsdWVfZyA9IDB4MDAyNCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMywgLnZhbHVlX2EgPSAweDAwNDEsIC52YWx1ZV9nID0gMHgwMDQxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMOCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEw5LCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMiwgLnZhbHVlX2EgPSAweDAwQUYsIC52YWx1ZV9nID0gMHgwMEFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDEyLCAudmFsdWVfZyA9IDB4MDAxMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw0LCAudmFsdWVfYSA9IDB4MDAwQiwgLnZhbHVlX2cgPSAweDAwMEIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMNSwgLnZhbHVlX2EgPSAweDAwNUYsIC52YWx1ZV9nID0gMHgwMDVGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDA0MCwgLnZhbHVlX2cgPSAweDAwNDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMOCwgLnZhbHVlX2EgPSAweDAwNTIsIC52YWx1ZV9nID0gMHgwMDUyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDksIC52YWx1ZV9hID0gMHgwMDI2LCAudmFsdWVfZyA9IDB4MDAyNiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDExLCAudmFsdWVfYSA9IDB4MDAzNiwgLnZhbHVlX2cgPSAweDAwMzYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTIsIC52YWx1ZV9hID0gMHgwMDU3LCAudmFsdWVfZyA9IDB4MDA1NywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDE0LCAudmFsdWVfYSA9IDB4MDA3NSwgLnZhbHVlX2cgPSAweDAwNzUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTUsIC52YWx1ZV9hID0gMHgwMEI0LCAudmFsdWVfZyA9IDB4MDBCNCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwOTgsIC52YWx1ZV9nID0gMHgwMDk4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDUsIC52YWx1ZV9hID0gMHgwMDQzLCAudmFsdWVfZyA9IDB4MDA0MywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNiwgLnZhbHVlX2EgPSAweDAwNDcsIC52YWx1ZV9nID0gMHgwMDQ3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDAwQywgLnZhbHVlX2cgPSAweDAwMEMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDgsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMEUsIC52YWx1ZV9nID0gMHgwMDBFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMiwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMEEsIC52YWx1ZV9nID0gMHgwMDBBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDE3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOCwgLnZhbHVlX2EgPSAweDAwM0UsIC52YWx1ZV9nID0gMHgwMDNFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOSwgLnZhbHVlX2EgPSAweDAwMTMsIC52YWx1ZV9nID0gMHgwMDEzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjEsIC52YWx1ZV9hID0gMHgwMDYyLCAudmFsdWVfZyA9IDB4MDA2MiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjIsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjMsIC52YWx1ZV9hID0gMHgwMDE2LCAudmFsdWVfZyA9IDB4MDAxNiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjQsIC52YWx1ZV9hID0gMHgwMDVDLCAudmFsdWVfZyA9IDB4MDA1QywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjUsIC52YWx1ZV9hID0gMHgwMDk1LCAudmFsdWVfZyA9IDB4MDA5NSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMwLCAudmFsdWVfYSA9IDB4MDBBMCwgLnZhbHVlX2cgPSAweDAwQTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMxLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMywgLnZhbHVlX2EgPSAweDAwQ0MsIC52YWx1ZV9nID0gMHgwMENDLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzNCwgLnZhbHVlX2EgPSAweDAwMDcsIC52YWx1ZV9nID0gMHgwMDA3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMCwgLnZhbHVlX2EgPSAweDAwMTAsIC52YWx1ZV9nID0gMHgwMDEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ1LCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UNiwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDcsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ4LCAudmFsdWVfYSA9IDB4MDAwRiwgLnZhbHVlX2cgPSAweDAwMEYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTAsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEyLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTMsIC52YWx1ZV9hID0gMHgwMDQ0LCAudmFsdWVfZyA9IDB4MDA0NCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDE1LCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworfTsKKwordm9pZCBiMjA2Ml91cGxvYWRfaW5pdF90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5ICplOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYjIwNjJfaW5pdF90YWIpOyBpKyspIHsKKwkJZSA9ICZiMjA2Ml9pbml0X3RhYltpXTsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJaWYgKCEoZS0+ZmxhZ3MgJiBCMjA2Ml9GTEFHX0cpKQorCQkJCWNvbnRpbnVlOworCQkJYjQzX3JhZGlvX3dyaXRlKGRldiwgZS0+b2Zmc2V0LCBlLT52YWx1ZV9nKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghKGUtPmZsYWdzICYgQjIwNjJfRkxBR19BKSkKKwkJCQljb250aW51ZTsKKwkJCWI0M19yYWRpb193cml0ZShkZXYsIGUtPm9mZnNldCwgZS0+dmFsdWVfYSk7CisJCX0KKwl9Cit9CisKK3UzMiBiNDNfbHB0YWJfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19MUFRBQl9UWVBFTUFTSzsKKwlCNDNfV0FSTl9PTihvZmZzZXQgPiAweEZGRkYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCNDNfTFBUQUJfOEJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTykgJiAweEZGOworCQlicmVhazsKKwljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTyk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzMyQklUOgorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUhJKTsKKwkJdmFsdWUgPDw9IDE2OworCQl2YWx1ZSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKl9kYXRhKQoreworCXUzMiB0eXBlLCB2YWx1ZTsKKwl1OCAqZGF0YSA9IF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZWxlbWVudHM7IGkrKykgeworCQl2YWx1ZSA9IGI0M19scHRhYl9yZWFkKGRldiwgb2Zmc2V0KTsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgQjQzX0xQVEFCXzhCSVQ6CisJCQkqZGF0YSA9IHZhbHVlOworCQkJZGF0YSsrOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQkJKigodTE2ICopZGF0YSkgPSB2YWx1ZTsKKwkJCWRhdGEgKz0gMjsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8zMkJJVDoKKwkJCSooKHUzMiAqKWRhdGEpID0gdmFsdWU7CisJCQlkYXRhICs9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUI0M19XQVJOX09OKDEpOworCQl9CisJCW9mZnNldCsrOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJdTMyIHR5cGU7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCW9mZnNldCAmPSB+QjQzX0xQVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEI0M19MUFRBQl84QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGRkYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8sIHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSwgdmFsdWUgPj4gMTYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUI0M19XQVJOX09OKDEpOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqX2RhdGEpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCWNvbnN0IHU4ICpkYXRhID0gX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19MUFRBQl84QklUOgorCQkJdmFsdWUgPSAqZGF0YTsKKwkJCWRhdGErKzsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJCXZhbHVlID0gKigodTE2ICopZGF0YSk7CisJCQlkYXRhICs9IDI7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOworCQkJZGF0YSArPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJCXZhbHVlID0gMDsKKwkJfQorCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBvZmZzZXQsIHZhbHVlKTsKKwkJb2Zmc2V0Kys7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGQwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBCNDNfVEFCTEVTX0xQUEhZX0hfCisjZGVmaW5lIEI0M19UQUJMRVNfTFBQSFlfSF8KKworCisjZGVmaW5lIEI0M19MUFRBQl9UWVBFTUFTSwkJMHhGMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfOEJJVAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQjQzX0xQVEFCXzE2QklUCQkJMHgyMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfMzJCSVQJCQkweDMwMDAwMDAwCisjZGVmaW5lIEI0M19MUFRBQjgodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzhCSVQpCisjZGVmaW5lIEI0M19MUFRBQjE2KHRhYmxlLCBvZmZzZXQpCSgoKHRhYmxlKSA8PCAxMCkgfCAob2Zmc2V0KSB8IEI0M19MUFRBQl8xNkJJVCkKKyNkZWZpbmUgQjQzX0xQVEFCMzIodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzMyQklUKQorCisvKiBUYWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjJQTFVTCQlCNDNfTFBUQUIzMigweDA3LCAwKSAvKiBUWCBwb3dlciBsb29rdXAgdGFibGUgKHJldiA+PSAyKSAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjBfMQkJQjQzX0xQVEFCMzIoMHhBMCwgMCkgLyogVFggcG93ZXIgbG9va3VwIHRhYmxlIChyZXYgPCAyKSAqLworCit1MzIgYjQzX2xwdGFiX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0KTsKK3ZvaWQgYjQzX2xwdGFiX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKTsKKworLyogQnVsayB0YWJsZSBhY2Nlc3MuIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBidWxrIGRhdGEgaW4KKyAqIGhvc3QgZW5kaWFubmVzcyEgVGhlIHJldHVybmVkIGRhdGEgaXMgX25vdF8gYSBieXRlYXJyYXksIGJ1dCBhbiBhcnJheQorICogY29uc2lzdGluZyBvZiBucl9lbGVtZW50cyBvZiB0aGUgZGF0YSB0eXBlLiAqLwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKmRhdGEpOwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqZGF0YSk7CisKK3ZvaWQgYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKKworCisjZW5kaWYgLyogQjQzX1RBQkxFU19MUFBIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwppbmRleCAwYzBmYjE1Li5lMWUyMGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwpAQCAtNjIsOCArNjIsNyBAQAogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MTkFIUEZDVEwsIDB4MUZGOSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIDB4RkYwRik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLCAweEZGMEYpOwogCWlmIChwaHktPnJldiA8PSAyKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTFBGR0FJTiwgMCwgMHgxRkJGKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwMiwgMHgxRkJGKTsKQEAgLTczLDExICs3Miw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxRCwgMHgwRjQwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDFGLCAweDFDMDApOwogCWlmIChwaHktPnJldiA8PSAzKQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MDQwMCk7CiAJZWxzZSBpZiAocGh5LT5yZXYgPT0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgxQTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MUEwMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwQ0MsIDB4MjEyMSk7CiAJfQogCWlmIChwaHktPnJldiA+PSAzKQpAQCAtODYsNyArODMsNyBAQAogCiBzdGF0aWMgdm9pZCBiNDNfd2FfZGl2aWRlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJCKSAmIH4weDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIDB4MDAyQiwgfjB4MDEwMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA4RSwgMHg1OEMxKTsKIH0KIApAQCAtMjcyLDggKzI2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGI0M193YV9sbXMoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNTUsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCAweDAwNTUpICYgMHhGRkMwKSB8IDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDU1LCAweEZGQzAsIDB4MDAwNCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9taXhlZHNpZ25hbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC0zMTgsMjMgKzMxNCwxOCBAQAogCX0gZWxzZSBpZiAocGh5LT5yZXYgPT0gMikgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzEsIDB4MTg2MSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSU1RIUkVTMiwgMHgwMjcxKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsCi0JCQkJICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVERXRUxMKQotCQkJCSAgfCAweDA4MDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5URFdFTEwsIDB4MDgwMCk7CiAJfSBlbHNlIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTVEhSRVMxLCAweDAwOTgpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzIsIDB4MDA3MCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhDOSksIDB4MDA4MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVERXRUxMLAotCQkJCSAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCkKLQkJCQkgIHwgMHgwODAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOVERXRUxMLCAweDA4MDApOwogCX0KIH0KIAogc3RhdGljIHZvaWQgYjQzX3dhX2Nyc190aHIoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsCi0JCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH4weDAzQzApIHwgMHhEMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NSUzAsIH4weDAzQzAsIDB4RDAwMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9jcnNfYmxhbmsoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzkxLDcyICszODIsNDUgQEAKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzEsIDMsIDI1KTsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDS1NISUZUQklUU19XQSkgJiB+MHhGRjAwKSB8IDB4NTcwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgwMDdGKSB8IDB4MDAwRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgzRjgwKSB8IDB4MkI4MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlRXUlNFVFQpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDdBLAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSkgfCAweDAwMDgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwMDBGKSB8IDB4MDAwOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUDFQMkdBSU4sCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfTjFOMkdBSU4pICYgfjB4MEYwMCkgfCAweDA3MDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwRjAwKSB8IDB4MDEwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsICh1MTYpfjB4RkYwMCwgMHg1NzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQSksIH4weDAwN0YsIDB4MDAwRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpLCB+MHgzRjgwLCAweDJCODApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQU5UV1JTRVRULCAweEYwRkYsIDB4MDMwMCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4N0EsIDB4MDAwOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MDAwRiwgMHgwMDA4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOLCB+MHgwRjAwLCAweDA2MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTjFOMkdBSU4sIH4weDBGMDAsIDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MEYwMCwgMHgwMTAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJCQkgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX04xTjJHQUlOKQotCQkJCSAgICYgfjB4MDAwRikgfCAweDAwMDcpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX04xTjJHQUlOLCB+MHgwMDBGLCAweDAwMDcpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDAwRkYpIHwgMHgwMDIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpKSAmIH4weDAwRkYpIHwgMHgwMDJFKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weEZGMDApIHwgMHgxQTAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weDAwRkYpIHwgMHgwMDI4KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weEZGMDApIHwgMHgyQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCksIH4weDAwRkYsIDB4MDAxQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDk2KSwgfjB4MDBGRiwgMHgwMDFDKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksIH4weDAwRkYsIDB4MDAyMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDgyKSwgfjB4MDBGRiwgMHgwMDJFKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg5NiksICh1MTYpfjB4RkYwMCwgMHgxQTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksIH4weDAwRkYsIDB4MDAyOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLCAodTE2KX4weEZGMDAsIDB4MkMwMCk7CiAJaWYgKHBoeS0+cmV2ID09IDEpIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEVBS19DT1VOVCwgMHgwOTJCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQikpICYgfjB4MDAxRSkgfCAweDAwMDIpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksIH4weDAwMUUsIDB4MDAwMik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLCB+MHgwMDFFKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFGKSwgMHgyODdBKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwpICYgfjB4MDAwRikgfCAweDAwMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwsIH4weDAwMEYsIDB4MDAwNCk7CiAJCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjIpLCAweDI4N0EpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIH4weEYwMDApIHwgMHgzMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwgKHUxNil+MHhGMDAwLCAweDMwMDApOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgpICYgMHg4MDgwKSB8IDB4Nzg3NCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZTUkNISURYLCAweDgwODAsIDB4Nzg3NCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhFKSwgMHgxQzAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlAxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwgfjB4MEYwMCwgMHgwNjAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhCKSwgMHgwMDVFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5UV1JTRVRUKSAmIH4weDAwRkYpIHwgMHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsIH4weDAwRkYsIDB4MDAxRSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4RCksIDB4MDAwMik7CiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MzX1IxLCAwLCAwKTsKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzNfUjEsIDEsIDcpOwpAQCAtNDY5LDEwICs0MzMsOCBAQAogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMywgMywgMjgpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDAwMDMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDEwMDApOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDAwMDMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDEwMDApOwogCX0KIAliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1ZFUlNJT05fT0ZETSk7IC8qIER1bW15IHJlYWQgKi8KIH0KQEAgLTUzOCw4ICs1MDAsNyBAQAogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAyLCAweDAwMDEpOwogCQkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgJiYKIAkJCSAgICAocGh5LT5yZXYgPj0gNykpIHsKLQkJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MTEpLAotCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSkpICYgMHhGN0ZGKTsKKwkJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSksIDB4RjdGRik7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjAsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjEsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjIsIDB4MDAwMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCBlYWU5YjgwLi4wZjUzYzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTUzOCw4ICs1MzgsMTQgQEAKIAljaGFuc3RhdCA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5jaGFubmVsKTsKIAlwaHl0eXBlID0gY2hhbnN0YXQgJiBCNDNfUlhfQ0hBTl9QSFlUWVBFOwogCi0JaWYgKG1hY3N0YXQgJiBCNDNfUlhfTUFDX0ZDU0VSUikKKwlpZiAodW5saWtlbHkobWFjc3RhdCAmIEI0M19SWF9NQUNfRkNTRVJSKSkgewogCQlkZXYtPndsLT5pZWVlX3N0YXRzLmRvdDExRkNTRXJyb3JDb3VudCsrOworCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCX0KKwlpZiAodW5saWtlbHkocGh5c3RhdDAgJiAoQjQzX1JYX1BIWVNUMF9QTENQSENGIHwgQjQzX1JYX1BIWVNUMF9QTENQRlYpKSkKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfUExDUF9DUkM7CisJaWYgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9TSE9SVFBSTUJMKQorCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOwogCWlmIChtYWNzdGF0ICYgQjQzX1JYX01BQ19ERUNFUlIpIHsKIAkJLyogRGVjcnlwdGlvbiB3aXRoIHRoZSBnaXZlbiBrZXkgZmFpbGVkLgogCQkgKiBEcm9wIHRoZSBwYWNrZXQuIFdlIGFsc28gd29uJ3QgYmUgYWJsZSB0byBkZWNyeXB0IGl0IHdpdGgKQEAgLTYwNiw4ICs2MTIsMTIgQEAKIAkJCQkJCXBoeXR5cGUgPT0gQjQzX1BIWVRZUEVfQSk7CiAJZWxzZQogCQlzdGF0dXMucmF0ZV9pZHggPSBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfY2NrKHBsY3ApOwotCWlmICh1bmxpa2VseShzdGF0dXMucmF0ZV9pZHggPT0gLTEpKQotCQlnb3RvIGRyb3A7CisJaWYgKHVubGlrZWx5KHN0YXR1cy5yYXRlX2lkeCA9PSAtMSkpIHsKKwkJLyogUExDUCBzZWVtcyB0byBiZSBjb3JydXB0ZWQuCisJCSAqIERyb3AgdGhlIGZyYW1lLCBpZiB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gY29ycnVwdGVkIGZyYW1lcy4gKi8KKwkJaWYgKCEoZGV2LT53bC0+ZmlsdGVyX2ZsYWdzICYgRklGX1BMQ1BGQUlMKSkKKwkJCWdvdG8gZHJvcDsKKwl9CiAJc3RhdHVzLmFudGVubmEgPSAhIShwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfQU5UKTsKIAogCS8qCkBAIC02NjEsNyArNjcxLDYgQEAKIAkJZ290byBkcm9wOwogCX0KIAotCWRldi0+c3RhdHMubGFzdF9yeCA9IGppZmZpZXM7CiAJaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LT53bC0+aHcsIHNrYiwgJnN0YXR1cyk7CiAKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYwppbmRleCBjYWNiNzg2Li4zZWE1NWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9sZWRzLmMKQEAgLTE0NiwxMiArMTQ2LDEyIEBACiAJY2FzZSBCNDNsZWdhY3lfTEVEX1RSQU5TRkVSOgogCWNhc2UgQjQzbGVnYWN5X0xFRF9BUFRSQU5TRkVSOgogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgImI0M2xlZ2FjeS0lczp0eCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkgImI0M2xlZ2FjeS0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQliNDNsZWdhY3lfcmVnaXN0ZXJfbGVkKGRldiwgJmRldi0+bGVkX3R4LCBuYW1lLAogCQkJCSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGh3KSwKIAkJCQkgbGVkX2luZGV4LCBhY3RpdmVsb3cpOwogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgImI0M2xlZ2FjeS0lczpyeCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkgImI0M2xlZ2FjeS0lczo6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQliNDNsZWdhY3lfcmVnaXN0ZXJfbGVkKGRldiwgJmRldi0+bGVkX3J4LCBuYW1lLAogCQkJCSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSwKIAkJCQkgbGVkX2luZGV4LCBhY3RpdmVsb3cpOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJY2FzZSBCNDNsZWdhY3lfTEVEX1JBRElPX0I6CiAJY2FzZSBCNDNsZWdhY3lfTEVEX01PREVfQkc6CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiYjQzbGVnYWN5LSVzOnJhZGlvIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCSAiYjQzbGVnYWN5LSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CiAJCWI0M2xlZ2FjeV9yZWdpc3Rlcl9sZWQoZGV2LCAmZGV2LT5sZWRfcmFkaW8sIG5hbWUsCiAJCQkJIGI0M2xlZ2FjeV9yZmtpbGxfbGVkX25hbWUoZGV2KSwKIAkJCQkgbGVkX2luZGV4LCBhY3RpdmVsb3cpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJY2FzZSBCNDNsZWdhY3lfTEVEX1dFSVJEOgogCWNhc2UgQjQzbGVnYWN5X0xFRF9BU1NPQzoKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6YXNzb2MiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OmFzc29jIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF9hc3NvYywgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IGZiOTk2YzIuLjg3OWVkYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMjY1MCw3ICsyNjUwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX2Jhc2ljX3JhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwgdTY0IGJyYXRlcykKK3N0YXRpYyB2b2lkIGI0M2xlZ2FjeV91cGRhdGVfYmFzaWNfcmF0ZXMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LCB1MzIgYnJhdGVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KIAkJZGV2LT53bC0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaAppbmRleCAyNDUzZGVhLi5jZTg3MjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCkBAIC0zMSw3ICszMSw3IEBACiB2b2lkIGhvc3RhcF9kdW1wX3R4X2hlYWRlcihjb25zdCBjaGFyICpuYW1lLAogCQkJICAgY29uc3Qgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUgKnR4KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBob3N0YXBfODAyMTFfb3BzOwotaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHUxNiBmYyk7CitpbnQgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oX19sZTE2IGZjKTsKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpob3N0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBob3N0YXBfc2V0dXBfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGxvY2FsX2luZm9fdCAqbG9jYWwsCiAJCSAgICAgIGludCB0eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaAppbmRleCAzYTk0NzRkLi4yZTlmYjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBIT1NUQVBfODAyMTFfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIHN0cnVjdCBob3N0YXBfaWVlZTgwMjExX21nbXQgewogCV9fbGUxNiBmcmFtZV9jb250cm9sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCmluZGV4IDE5YjFiZjAuLjM4MTZkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIAogI2luY2x1ZGUgImhvc3RhcF84MDIxMS5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgpAQCAtMTcsMTAgKzE4LDEwIEBACiB2b2lkIGhvc3RhcF9kdW1wX3J4XzgwMjExKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBzaWduYWw9JWQgbm9pc2U9JWQgcmF0ZT0lZCBsZW49JWQgIgogCSAgICAgICAiamlmZmllcz0lbGRcbiIsCkBAIC0zMCw5ICszMSwxMCBAQAogCWlmIChza2ItPmxlbiA8IDIpCiAJCXJldHVybjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgRkM9MHglMDR4ICh0eXBlPSVkOiVkKSVzJXMiLAotCSAgICAgICBmYywgV0xBTl9GQ19HRVRfVFlQRShmYykgPj4gMiwgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID4+IDQsCisJICAgICAgIGZjLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMiwKKwkgICAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUyA/ICIgW1RvRFNdIiA6ICIiLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgW0Zyb21EU10iIDogIiIpOwogCkBAIC00Miw3ICs0NCw3IEBACiAJfQogCiAJcHJpbnRrKCIgZHVyPTB4JTA0eCBzZXE9MHglMDR4XG4iLCBsZTE2X3RvX2NwdShoZHItPmR1cmF0aW9uX2lkKSwKLQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgICBBMT0lcE0iLCBoZHItPmFkZHIxKTsKIAlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKQEAgLTYzLDcgKzY1LDcgQEAKIAlpbnQgaGRybGVuLCBwaGRybGVuLCBoZWFkX25lZWQsIHRhaWxfbmVlZDsKIAl1MTYgZmM7CiAJaW50IHByaXNtX2hlYWRlciwgcmV0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpmaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmaGRyOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtODQsOCArODYsOCBAQAogCQlwaGRybGVuID0gMDsKIAl9CiAKLQlmaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGZoZHItPmZyYW1lX2N0bCk7CisJZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShmaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmICh0eXBlID09IFBSSVNNMl9SWF9NR01UICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBtYW5hZ2VtZW50IGZyYW1lIHdpdGggaGVhZGVyICIKQEAgLTk0LDcgKzk2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIGV4dHJhIGRhdGE7IGlmIG5vdCwgZXhwYW5kIHNrYgogCSAqIGJ1ZmZlciB0byBiZSBsYXJnZSBlbm91Z2ggZm9yIHRoZSBjaGFuZ2VzICovCkBAIC0xOTMsNyArMTk1LDcgQEAKIAlpZiAocHJpc21faGVhZGVyKQogCQlza2JfcHVsbChza2IsIHBoZHJsZW4pOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8yKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpOwogCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOwogCW5ldGlmX3J4KHNrYik7CiAKQEAgLTIwNSwxMyArMjA3LDExIEBACiBzdGF0aWMgdm9pZCBtb25pdG9yX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCWludCBsZW47CiAKIAlsZW4gPSBwcmlzbTJfcnhfODAyMTEoZGV2LCBza2IsIHJ4X3N0YXRzLCBQUklTTTJfUlhfTU9OSVRPUik7Ci0Jc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7Ci0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogfQogCiAKQEAgLTI0NywyMSArMjQ3LDIxIEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogc3RhdGljIHN0cnVjdCBza19idWZmICoKLXByaXNtMl9mcmFnX2NhY2hlX2dldChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorcHJpc20yX2ZyYWdfY2FjaGVfZ2V0KGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJdTE2IHNjOwogCXVuc2lnbmVkIGludCBmcmFnLCBzZXE7CiAJc3RydWN0IHByaXNtMl9mcmFnX2VudHJ5ICplbnRyeTsKIAotCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKTsKLQlmcmFnID0gV0xBTl9HRVRfU0VRX0ZSQUcoc2MpOwotCXNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpID4+IDQ7CisJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKKwlmcmFnID0gc2MgJiBJRUVFODAyMTFfU0NUTF9GUkFHOworCXNlcSA9IChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKIAogCWlmIChmcmFnID09IDApIHsKIAkJLyogUmVzZXJ2ZSBlbm91Z2ggc3BhY2UgdG8gZml0IG1heGltdW0gZnJhbWUgbGVuZ3RoICovCiAJCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmRldi0+bXR1ICsKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyKSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikgKwogCQkJCSAgICA4IC8qIExMQyAqLyArCiAJCQkJICAgIDIgLyogYWxpZ25tZW50ICovICsKIAkJCQkgICAgOCAvKiBXRVAgKi8gKyBFVEhfQUxFTiAvKiBXRFMgKi8pOwpAQCAtMjk5LDE0ICsyOTksMTQgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCiBzdGF0aWMgaW50IHByaXNtMl9mcmFnX2NhY2hlX2ludmFsaWRhdGUobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAl1MTYgc2M7CiAJdW5zaWduZWQgaW50IHNlcTsKIAlzdHJ1Y3QgcHJpc20yX2ZyYWdfZW50cnkgKmVudHJ5OwogCi0Jc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpOwotCXNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpID4+IDQ7CisJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKKwlzZXEgPSAoc2MgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CiAKIAllbnRyeSA9IHByaXNtMl9mcmFnX2NhY2hlX2ZpbmQobG9jYWwsIHNlcSwgLTEsIGhkci0+YWRkcjIsIGhkci0+YWRkcjEpOwogCkBAIC00NzIsMTAgKzQ3Miw4IEBACiAJCSAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzLCB1MTYgdHlwZSwKIAkJICAgICB1MTYgc3R5cGUpCiB7Ci0JaWYgKGxvY2FsLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKSB7Ci0JCWhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsLCAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikKLQkJCQkgICAgIHNrYi0+ZGF0YSk7Ci0JfQorCWlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikKKwkJaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWwsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGEpOwogCiAJaWYgKGxvY2FsLT5ob3N0YXBkICYmIHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpIHsKIAkJaWYgKHN0eXBlID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04gJiYKQEAgLTU1Miw4ICs1NTAsOCBAQAogCiAKIHN0YXRpYyBpbnQKLWhvc3RhcF9yeF9mcmFtZV93ZHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKLQkJICAgIHUxNiBmYywgc3RydWN0IG5ldF9kZXZpY2UgKip3ZHMpCitob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHUxNiBmYywKKwkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICoqd2RzKQogewogCS8qIEZJWDogaXMgdGhpcyByZWFsbHkgc3VwcG9zZWQgdG8gYWNjZXB0IFdEUyBmcmFtZXMgb25seSBpbiBNYXN0ZXIKIAkgKiBtb2RlPyBXaGF0IGFib3V0IFJlcGVhdGVyIG9yIE1hbmFnZWQgd2l0aCBXRFMgZnJhbWVzPyAqLwpAQCAtNjExLDE0ICs2MDksMTQgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIAl1MTYgZmMsIGV0aGVydHlwZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTggKnBvczsKIAogCWlmIChza2ItPmxlbiA8IDI0KQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAkvKiBjaGVjayB0aGF0IHRoZSBmcmFtZSBpcyB1bmljYXN0IGZyYW1lIHRvIHVzICovCiAJaWYgKChmYyAmIChJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgPT0KQEAgLTY1MSwxNCArNjQ5LDE0IEBACiBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21wZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKGxvY2FsLT50a2lwX2NvdW50ZXJtZWFzdXJlcyAmJgogCSAgICBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwgIlRLSVAiKSA9PSAwKSB7CkBAIC02ODksMTQgKzY4NywxNCBAQAogaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHRfbXNkdShsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICBpbnQga2V5aWR4LCBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWludCByZXMsIGhkcmxlbjsKIAogCWlmIChjcnlwdCA9PSBOVUxMIHx8IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXNkdSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlhdG9taWNfaW5jKCZjcnlwdC0+cmVmY250KTsKIAlyZXMgPSBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUoc2tiLCBrZXlpZHgsIGhkcmxlbiwgY3J5cHQtPnByaXYpOwpAQCAtNzIwLDExICs3MTgsMTAgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc2l6ZV90IGhkcmxlbjsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlLCBzYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqd2RzID0gTlVMTDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGZyYWc7CiAJdTggKnBheWxvYWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOwpAQCAtNzQ3LDE4ICs3NDQsMTcgQEAKIAlkZXYgPSBsb2NhbC0+ZGRldjsKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAlpZiAoc2tiLT5sZW4gPCAxMCkKIAkJZ290byByeF9kcm9wcGVkOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwotCXN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOwotCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKTsKLQlmcmFnID0gV0xBTl9HRVRfU0VRX0ZSQUcoc2MpOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEU7CisJc3R5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJZnJhZyA9IHNjICYgSUVFRTgwMjExX1NDVExfRlJBRzsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogUHV0IHRoaXMgY29kZSBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgZHVwbGljYXRpbmcgaXQgaW4gYWxsCiAJICogUnggcGF0aHMuIC0gSmVhbiBJSSAqLwpAQCAtODY2LDEwICs4NjIsOCBAQAogCiAJaWYgKGhvc3RhcF9yeF9mcmFtZV93ZHMobG9jYWwsIGhkciwgZmMsICZ3ZHMpKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7Ci0JaWYgKHdkcykgeworCWlmICh3ZHMpCiAJCXNrYi0+ZGV2ID0gZGV2ID0gd2RzOwotCQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKLQl9CiAKIAlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIgJiYgIXdkcyAmJgogCSAgICAoZmMgJiAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpID09CkBAIC04NzgsNyArODcyLDYgQEAKIAkgICAgbWVtY21wKGhkci0+YWRkcjIsIGxvY2FsLT5hc3NvY19hcF9hZGRyLCBFVEhfQUxFTikgPT0gMCkgewogCQkvKiBGcmFtZSBmcm9tIEJTU0lEIG9mIHRoZSBBUCBmb3Igd2hpY2ggd2UgYXJlIGEgY2xpZW50ICovCiAJCXNrYi0+ZGV2ID0gZGV2ID0gbG9jYWwtPnN0YWRldjsKLQkJc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7CiAJCWZyb21fYXNzb2NfYXAgPSAxOwogCX0KIApAQCAtOTE4LDcgKzkxMSw3IEBACiAJaWYgKGxvY2FsLT5ob3N0X2RlY3J5cHQgJiYgKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSAmJgogCSAgICAoa2V5aWR4ID0gaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHQobG9jYWwsIHNrYiwgY3J5cHQpKSA8IDApCiAJCWdvdG8gcnhfZHJvcHBlZDsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAkvKiBza2I6IGhkciArIChwb3NzaWJseSBmcmFnbWVudGVkKSBwbGFpbnRleHQgcGF5bG9hZCAqLwogCkBAIC05MzEsNyArOTI0LDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUnggY2Fubm90IGdldCBza2IgZnJvbSAiCiAJCQkgICAgICAgImZyYWdtZW50IGNhY2hlIChtb3JlZnJhZz0lZCBzZXE9JXUgZnJhZz0ldSlcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpICE9IDAsCi0JCQkgICAgICAgV0xBTl9HRVRfU0VRX1NFUShzYykgPj4gNCwgZnJhZyk7CisJCQkgICAgICAgKHNjICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0LCBmcmFnKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCkBAIC05NzIsNyArOTY1LDcgQEAKIAkJLyogdGhpcyB3YXMgdGhlIGxhc3QgZnJhZ21lbnQgYW5kIHRoZSBmcmFtZSB3aWxsIGJlCiAJCSAqIGRlbGl2ZXJlZCwgc28gcmVtb3ZlIHNrYiBmcm9tIGZyYWdtZW50IGNhY2hlICovCiAJCXNrYiA9IGZyYWdfc2tiOwotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCQlwcmlzbTJfZnJhZ19jYWNoZV9pbnZhbGlkYXRlKGxvY2FsLCBoZHIpOwogCX0KIApAQCAtOTgzLDcgKzk3Niw3IEBACiAJICAgIGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0X21zZHUobG9jYWwsIHNrYiwga2V5aWR4LCBjcnlwdCkpCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlpZiAoY3J5cHQgJiYgIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYgIWxvY2FsLT5vcGVuX3dlcCkgewogCQlpZiAobG9jYWwtPmllZWVfODAyXzF4ICYmCiAJCSAgICBob3N0YXBfaXNfZWFwb2xfZnJhbWUobG9jYWwsIHNrYikpIHsKQEAgLTEwNjksOCArMTA2Miw4IEBACiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBFVEhfQUxFTik7CiAJfQogCi0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogCWlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUiAmJiAhd2RzICYmCiAJICAgIGxvY2FsLT5hcC0+YnJpZGdlX3BhY2tldHMpIHsKQEAgLTEwOTQsNyArMTA4Nyw3IEBACiAJaWYgKHNrYjIgIT0gTlVMTCkgewogCQkvKiBzZW5kIHRvIHdpcmVsZXNzIG1lZGlhICovCiAJCXNrYjItPmRldiA9IGRldjsKLQkJc2tiMi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKTsKKwkJc2tiMi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyk7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYjIpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiMik7CiAJCS8qIHNrYjItPm5ldHdvcmtfaGVhZGVyICs9IEVUSF9ITEVOOyAqLwpAQCAtMTExNSw3ICsxMTA4LDcgQEAKICByeF9kcm9wcGVkOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJZ290byByeF9leGl0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKaW5kZXggMDc4YTAxMC4uNjY5MzQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYwpAQCAtMTUsMTAgKzE1LDEwIEBACiAKIHZvaWQgaG9zdGFwX2R1bXBfdHhfODAyMTEoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUWCBsZW49JWQgamlmZmllcz0lbGRcbiIsCiAJICAgICAgIG5hbWUsIHNrYi0+bGVuLCBqaWZmaWVzKTsKQEAgLTI2LDkgKzI2LDEwIEBACiAJaWYgKHNrYi0+bGVuIDwgMikKIAkJcmV0dXJuOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpJXMlcyIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTID8gIiBbRnJvbURTXSIgOiAiIik7CiAKQEAgLTM4LDcgKzM5LDcgQEAKIAl9CiAKIAlwcmludGsoIiBkdXI9MHglMDR4IHNlcT0weCUwNHhcbiIsIGxlMTZfdG9fY3B1KGhkci0+ZHVyYXRpb25faWQpLAotCSAgICAgICBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpKTsKKwkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEExPSVwTSIsIGhkci0+YWRkcjEpOwogCXByaW50aygiIEEyPSVwTSIsIGhkci0+YWRkcjIpOwpAQCAtNTcsNyArNTgsNyBAQAogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwogCWludCBuZWVkX2hlYWRyb29tLCBuZWVkX3RhaWxyb29tID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciBoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyOwogCXUxNiBmYywgZXRoZXJ0eXBlID0gMDsKIAllbnVtIHsKIAkJV0RTX05PID0gMCwgV0RTX09XTl9GUkFNRSwgV0RTX0NPTVBMSUFOVF9GUkFNRQpAQCAtMjAxLDcgKzIwMiw3IEBACiAJCW1lbWNweSgmaGRyLmFkZHIzLCBsb2NhbC0+YnNzaWQsIEVUSF9BTEVOKTsKIAl9CiAKLQloZHIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCWhkci5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCiAJc2tiX3B1bGwoc2tiLCBza2lwX2hlYWRlcl9ieXRlcyk7CiAJbmVlZF9oZWFkcm9vbSA9IGxvY2FsLT5mdW5jLT5uZWVkX3R4X2hlYWRyb29tICsgaGRyX2xlbiArIGVuY2Fwc19sZW47CkBAIC0yNjUsNyArMjY2LDcgQEAKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1MTYgZmM7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yODcsMTAgKzI4OCwxMCBAQAogCW1ldGEtPmlmYWNlID0gaWZhY2U7CiAKIAlpZiAoc2tiLT5sZW4gPj0gSUVFRTgwMjExX0RBVEFfSERSM19MRU4gKyBzaXplb2YocmZjMTA0Ml9oZWFkZXIpICsgMikgewotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQkJaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICYmCi0JCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPT0gSUVFRTgwMjExX1NUWVBFX0RBVEEpIHsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9EQVRBKSB7CiAJCQl1OCAqcG9zID0gJnNrYi0+ZGF0YVtJRUVFODAyMTFfREFUQV9IRFIzX0xFTiArCiAJCQkJCSAgICAgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKV07CiAJCQltZXRhLT5ldGhlcnR5cGUgPSAocG9zWzBdIDw8IDgpIHwgcG9zWzFdOwpAQCAtMzEwLDggKzMxMSw3IEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKLQl1MTYgZmM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgcHJlZml4X2xlbiwgcG9zdGZpeF9sZW4sIGhkcl9sZW4sIHJlczsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAKIAlpZiAobG9jYWwtPnRraXBfY291bnRlcm1lYXN1cmVzICYmCiAJICAgIHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiVEtJUCIpID09IDApIHsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCiAJCQkgICAgICAgIlRYIHBhY2tldCB0byAlcE1cbiIsCkBAIC0zNDksOSArMzQ5LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLSAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaGRyX2xlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWhkcl9sZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogSG9zdC1iYXNlZCBJRUVFIDgwMi4xMSBmcmFnbWVudGF0aW9uIGZvciBUWCBpcyBub3QgeWV0IHN1cHBvcnRlZCwgc28KIAkgKiBjYWxsIGJvdGggTVNEVSBhbmQgTVBEVSBlbmNyeXB0aW9uIGZ1bmN0aW9ucyBmcm9tIGhlcmUuICovCkBAIC0zODQsNyArMzgzLDcgQEAKIAlhcF90eF9yZXQgdHhfcmV0OwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CiAJaW50IG5vX2VuY3J5cHQgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTQyNywxNCArNDI2LDE0IEBACiAJdHhfcmV0ID0gaG9zdGFwX2hhbmRsZV9zdGFfdHgobG9jYWwsICZ0eCk7CiAJc2tiID0gdHguc2tiOwogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0gCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXN3aXRjaCAodHhfcmV0KSB7CiAJY2FzZSBBUF9UWF9DT05USU5VRToKIAkJYnJlYWs7CiAJY2FzZSBBUF9UWF9DT05USU5VRV9OT1RfQVVUSE9SSVpFRDoKIAkJaWYgKGxvY2FsLT5pZWVlXzgwMl8xeCAmJgotCQkgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKKwkJICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkJICAgIG1ldGEtPmV0aGVydHlwZSAhPSBFVEhfUF9QQUUgJiYKIAkJICAgICEobWV0YS0+ZmxhZ3MgJiBIT1NUQVBfVFhfRkxBR1NfV0RTKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIGZyYW1lIHRvIHVuYXV0aG9yaXplZCAiCkBAIC00NjksMTAgKzQ2OCwxMCBAQAogCiAJCS8qIHJlbW92ZSBzcGVjaWFsIHZlcnNpb24gZnJvbSB0aGUgZnJhbWUgaGVhZGVyICovCiAJCWZjICY9IH5JRUVFODAyMTFfRkNUTF9WRVJTOwotCQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCX0KIAotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkgeworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlub19lbmNyeXB0ID0gMTsKIAkJdHguY3J5cHQgPSBOVUxMOwogCX0KQEAgLTQ5Myw5ICs0OTIsOSBAQAogCQkvKiBBZGQgSVNXRVAgZmxhZyBib3RoIGZvciBmaXJtd2FyZSBhbmQgaG9zdCBiYXNlZCBlbmNyeXB0aW9uCiAJCSAqLwogCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7Ci0JCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CiAJfSBlbHNlIGlmIChsb2NhbC0+ZHJvcF91bmVuY3J5cHRlZCAmJgotCQkgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgorCQkgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCSAgIG1ldGEtPmV0aGVydHlwZSAhPSBFVEhfUF9QQUUpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIHVuZW5jcnlwdGVkIFRYIGRhdGEgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCmluZGV4IDA5MDNkYjcuLmEyYTIwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIAogI2luY2x1ZGUgImhvc3RhcF93bGFuLmgiCiAjaW5jbHVkZSAiaG9zdGFwLmgiCkBAIC01ODgsMjggKzU4OSwyNCBAQAogc3RhdGljIHZvaWQgaG9zdGFwX2FwX3R4X2NiKHN0cnVjdCBza19idWZmICpza2IsIGludCBvaywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwotCXUxNiBmYzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAlpZiAoIWFwLT5sb2NhbC0+aG9zdGFwZCB8fCAhYXAtPmxvY2FsLT5hcGRldikgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCiAJLyogUGFzcyB0aGUgVFggY2FsbGJhY2sgZnJhbWUgdG8gdGhlIGhvc3RhcGQ7IHVzZSA4MDIuMTEgaGVhZGVyIHZlcnNpb24KIAkgKiAxIHRvIGluZGljYXRlIGZhaWx1cmUgKG5vIEFDSykgYW5kIDIgc3VjY2VzcyAoZnJhbWUgQUNLZWQpICovCiAKLQlmYyAmPSB+SUVFRTgwMjExX0ZDVExfVkVSUzsKLQlmYyB8PSBvayA/IEJJVCgxKSA6IEJJVCgwKTsKLQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWhkci0+ZnJhbWVfY29udHJvbCAmPSBjcHVfdG9fbGUxNih+SUVFRTgwMjExX0ZDVExfVkVSUyk7CisJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KG9rID8gQklUKDEpIDogQklUKDApKTsKIAogCXNrYi0+ZGV2ID0gYXAtPmxvY2FsLT5hcGRldjsKLQlza2JfcHVsbChza2IsIGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKSk7CisJc2tiX3B1bGwoc2tiLCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpKTsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMik7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKTsKIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAluZXRpZl9yeChza2IpOwogfQpAQCAtNjIxLDggKzYxOCw4IEBACiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXAtPmxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKLQl1MTYgZmMsIGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1czsKIAlfX2xlMTYgKnBvczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CiAJY2hhciAqdHh0ID0gTlVMTDsKQEAgLTYzMiwxMCArNjI5LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpICE9IElFRUU4MDIxMV9GVFlQRV9NR01UIHx8Ci0JICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAhPSBJRUVFODAyMTFfU1RZUEVfQVVUSCB8fAorCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaWYgKCFpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpIHx8CiAJICAgIHNrYi0+bGVuIDwgSUVFRTgwMjExX01HTVRfSERSX0xFTiArIDYpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfYXBfdHhfY2JfYXV0aCByZWNlaXZlZCBpbnZhbGlkICIKIAkJICAgICAgICJmcmFtZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTY5MSw3ICs2ODYsNyBAQAogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFwLT5sb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1MTYgZmMsIHN0YXR1czsKIAlfX2xlMTYgKnBvczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CkBAIC03MDIsMTEgKzY5NywxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgIT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgfHwKLQkgICAgKFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAhPSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCAmJgotCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoZmMpICE9IElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1ApIHx8CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJaWYgKCghaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAgIWllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgfHwKIAkgICAgc2tiLT5sZW4gPCBJRUVFODAyMTFfTUdNVF9IRFJfTEVOICsgNCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3RhcF9hcF90eF9jYl9hc3NvYyByZWNlaXZlZCBpbnZhbGlkICIKIAkJICAgICAgICJmcmFtZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTc1NywxMiArNzUxLDEyIEBACiBzdGF0aWMgdm9pZCBob3N0YXBfYXBfdHhfY2JfcG9sbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKIAkJZ290byBmYWlsOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlpZiAob2spIHsKIAkJc3Bpbl9sb2NrKCZhcC0+c3RhX3RhYmxlX2xvY2spOwogCQlzdGEgPSBhcF9nZXRfc3RhKGFwLCBoZHItPmFkZHIxKTsKQEAgLTkxNyw3ICs5MTEsNyBAQAogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1MTYgZmM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwpAQCAtOTQyLDggKzkzNiw4IEBACiAJfQogCiAJZmMgPSB0eXBlX3N1YnR5cGU7Ci0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2JfcHV0KHNrYiwgaGRybGVuKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihjcHVfdG9fbGUxNih0eXBlX3N1YnR5cGUpKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIGhkcmxlbik7CiAJaWYgKGJvZHkpCiAJCW1lbWNweShza2JfcHV0KHNrYiwgYm9keV9sZW4pLCBib2R5LCBib2R5X2xlbik7CiAKQEAgLTk1NCwxMSArOTQ4LDExIEBACiAKIAogCW1lbWNweShoZHItPmFkZHIxLCBhZGRyLCBFVEhfQUxFTik7IC8qIERBIC8gUkEgKi8KLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9GUk9NRFM7CiAJCW1lbWNweShoZHItPmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7IC8qIEJTU0lEICovCiAJCW1lbWNweShoZHItPmFkZHIzLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7IC8qIFNBICovCi0JfSBlbHNlIGlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKSB7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfY3RsKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJLyogY29udHJvbDpBQ0sgZG9lcyBub3QgaGF2ZSBhZGRyMiBvciBhZGRyMyAqLwogCQltZW1zZXQoaGRyLT5hZGRyMiwgMCwgRVRIX0FMRU4pOwogCQltZW1zZXQoaGRyLT5hZGRyMywgMCwgRVRIX0FMRU4pOwpAQCAtOTY3LDcgKzk2MSw3IEBACiAJCW1lbWNweShoZHItPmFkZHIzLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7IC8qIEJTU0lEICovCiAJfQogCi0JaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7CiAJbWVtc2V0KG1ldGEsIDAsIHNpemVvZigqbWV0YSkpOwpAQCAtMTI4NCwyMiArMTI3OCwyMSBAQAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJc2l6ZV90IGhkcmxlbjsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBsb2NhbC0+YXA7CiAJY2hhciBib2R5WzggKyBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTl0sICpjaGFsbGVuZ2UgPSBOVUxMOwogCWludCBsZW4sIG9sZW47CiAJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKIAlfX2xlMTYgKnBvczsKLQl1MTYgcmVzcCA9IFdMQU5fU1RBVFVTX1NVQ0NFU1MsIGZjOworCXUxNiByZXNwID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CiAJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OwogCWNoYXIgKnR4dCA9ICIiOwogCiAJbGVuID0gc2tiLT5sZW4gLSBJRUVFODAyMTFfTUdNVF9IRFJfTEVOOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlpZiAobGVuIDwgNikgewogCQlQREVCVUcoREVCVUdfQVAsICIlczogaGFuZGxlX2F1dGhlbiAtIHRvbyBzaG9ydCBwYXlsb2FkICIKQEAgLTE0MzUsNyArMTQyOCw3IEBACiAJCQkgICAgY2hhbGxlbmdlID09IE5VTEwgfHwKIAkJCSAgICBtZW1jbXAoc3RhLT51LnN0YS5jaGFsbGVuZ2UsIGNoYWxsZW5nZSwKIAkJCQkgICBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTikgIT0gMCB8fAotCQkJICAgICEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSB7CisJCQkgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJCQl0eHQgPSAiY2hhbGxlbmdlIHJlc3BvbnNlIGluY29ycmVjdCI7CiAJCQkJcmVzcCA9IFdMQU5fU1RBVFVTX0NIQUxMRU5HRV9GQUlMOwogCQkJCWdvdG8gZmFpbDsKQEAgLTE0ODgsNyArMTQ4MSw3IEBACiAJCSAgICAgICAidHJhbnMjPSVkIHN0YXQ9JWQgbGVuPSVkIGZjPSUwNHgpID09PiAlZCAoJXMpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBoZHItPmFkZHIyLAogCQkgICAgICAgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlLCBsZW4sCi0JCSAgICAgICBmYywgcmVzcCwgdHh0KTsKKwkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCksIHJlc3AsIHR4dCk7CiAJfQogfQogCkBAIC0xNDk4LDcgKzE0OTEsNyBAQAogCQkJIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywgaW50IHJlYXNzb2MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJY2hhciBib2R5WzEyXSwgKnAsICpscG9zOwogCWludCBsZW4sIGxlZnQ7CiAJX19sZTE2ICpwb3M7CkBAIC0xNzA3LDcgKzE3MDAsNyBAQAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJY2hhciAqYm9keSA9IChjaGFyICopIChza2ItPmRhdGEgKyBJRUVFODAyMTFfTUdNVF9IRFJfTEVOKTsKIAlpbnQgbGVuOwogCXUxNiByZWFzb25fY29kZTsKQEAgLTE3NDksNyArMTc0Miw3IEBACiAJCQkgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgKmJvZHkgPSBza2ItPmRhdGEgKyBJRUVFODAyMTFfTUdNVF9IRFJfTEVOOwogCWludCBsZW47CiAJdTE2IHJlYXNvbl9jb2RlOwpAQCAtMTc4OCw3ICsxNzgxLDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBhcF9oYW5kbGVfZGF0YV9udWxsZnVuYyhsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogCkBAIC0xODA1LDcgKzE3OTgsNyBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHNjaGVkdWxlZCB0YXNrIGZvciBwZW5kaW5nIEFQIGZyYW1lcy4gKi8KIHN0YXRpYyB2b2lkIGFwX2hhbmRsZV9kcm9wcGVkX2RhdGEobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CkBAIC0xODYzLDcgKzE4NTYsNyBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHNjaGVkdWxlZCB0YXNrIGZvciBwZW5kaW5nIEFQIGZyYW1lcy4gKi8KIHN0YXRpYyB2b2lkIGhhbmRsZV9wc3BvbGwobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwpAQCAtMTg3Miw4ICsxODY1LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJUERFQlVHKERFQlVHX1BTMiwgImhhbmRsZV9wc3BvbGw6IEJTU0lEPSVwTSwgVEE9JXBNIFBXUk1HVD0lZFxuIiwKLQkgICAgICAgaGRyLT5hZGRyMSwgaGRyLT5hZGRyMiwKLQkgICAgICAgISEobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpICYgSUVFRTgwMjExX0ZDVExfUE0pKTsKKwkgICAgICAgaGRyLT5hZGRyMSwgaGRyLT5hZGRyMiwgISFpZWVlODAyMTFfaGFzX3BtKGhkci0+ZnJhbWVfY29udHJvbCkpOwogCiAJaWYgKG1lbWNtcChoZHItPmFkZHIxLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpIHsKIAkJUERFQlVHKERFQlVHX0FQLApAQCAtMTk4NCw3ICsxOTc2LDcgQEAKIHN0YXRpYyB2b2lkIGhhbmRsZV9iZWFjb24obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgKmJvZHkgPSBza2ItPmRhdGEgKyBJRUVFODAyMTFfTUdNVF9IRFJfTEVOOwogCWludCBsZW4sIGxlZnQ7CiAJdTE2IGJlYWNvbl9pbnQsIGNhcGFiaWxpdHk7CkBAIC0yMTQzLDE0ICsyMTM1LDE0IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwogCXUxNiBmYywgdHlwZSwgc3R5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJLyogRklYOiBzaG91bGQgZ2l2ZSBza2ItPmxlbiB0byBoYW5kbGVyIGZ1bmN0aW9ucyBhbmQgY2hlY2sgdGhhdCB0aGUKIAkgKiBidWZmZXIgaXMgbG9uZyBlbm91Z2ggKi8KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKLQlzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKKwlzdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAKICNpZm5kZWYgUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVAogCWlmICghbG9jYWwtPmhvc3RhcGQgJiYgdHlwZSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgewpAQCAtMjI2Miw4ICsyMjU0LDcgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQl1MTYgZmM7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtMjI3MSwxNyArMjI2MiwxNSBAQAogCWlmIChza2ItPmxlbiA8IDE2KQogCQlnb3RvIGRyb3A7CiAKLQlsb2NhbC0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJaWYgKGxvY2FsLT5hcC0+YXBfcG9saWN5ID09IEFQX09USEVSX0FQX1NLSVBfQUxMICYmCi0JICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9NR01UICYmCi0JICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKQorCSAgICBpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCWdvdG8gZHJvcDsKIAotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hPU1RBUCk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0hPU1RBUCk7CiAJaGFuZGxlX2FwX2l0ZW0obG9jYWwsIHNrYiwgcnhfc3RhdHMpOwogCXJldHVybjsKIApAQCAtMjI5NCw3ICsyMjgzLDcgQEAKIHN0YXRpYyB2b2lkIHNjaGVkdWxlX3BhY2tldF9zZW5kKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXRzOwogCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc3RhLT50eF9idWYpKQpAQCAtMjMwNywxMCArMjI5NiwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYl9wdXQoc2tiLCAxNik7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAxNik7CiAKIAkvKiBHZW5lcmF0ZSBhIGZha2UgcHNwb2xsIGZyYW1lIHRvIHN0YXJ0IHBhY2tldCBkZWxpdmVyeSAqLwotCWhkci0+ZnJhbWVfY3RsID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNigKIAkJSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpOwogCW1lbWNweShoZHItPmFkZHIxLCBsb2NhbC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmFkZHIyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKQEAgLTI2ODksNyArMjY3OCw3IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwogCWludCBzZXRfdGltLCByZXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CiAKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKQEAgLTI2OTgsNyArMjY4Nyw3IEBACiAJICAgIG1ldGEtPmlmYWNlLT50eXBlID09IEhPU1RBUF9JTlRFUkZBQ0VfU1RBKQogCQlnb3RvIG91dDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCWlmIChoZHItPmFkZHIxWzBdICYgMHgwMSkgewogCQkvKiBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lIC0gbm8gQVAgcmVsYXRlZCBwcm9jZXNzaW5nICovCkBAIC0yNzUzLDggKzI3NDIsOCBAQAogCiAJaWYgKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX0FERF9NT1JFREFUQSkgewogCQkvKiBpbmRpY2F0ZSB0byBTVEEgdGhhdCBtb3JlIGZyYW1lcyBmb2xsb3cgKi8KLQkJaGRyLT5mcmFtZV9jdGwgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOworCQloZHItPmZyYW1lX2NvbnRyb2wgfD0KKwkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKIAl9CiAKIAlpZiAobWV0YS0+ZmxhZ3MgJiBIT1NUQVBfVFhfRkxBR1NfQlVGRkVSRURfRlJBTUUpIHsKQEAgLTI4MjgsMTAgKzI4MTcsMTAgQEAKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfdHhfZXhjKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7CiAKIAlzcGluX2xvY2soJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwpAQCAtMjg5OCw4ICsyODg3LDggQEAKIAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkuIENhbGxlZCBmb3IgZWFjaCBSWCBmcmFtZSB0byB1cGRhdGUKLSAqIFNUQSBwb3dlciBzYXZpbmcgc3RhdGUuIHB3cm1ndCBpcyBhIGZsYWcgZnJvbSA4MDIuMTEgZnJhbWVfY3RsIGZpZWxkLiAqLwotaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCisgKiBTVEEgcG93ZXIgc2F2aW5nIHN0YXRlLiBwd3JtZ3QgaXMgYSBmbGFnIGZyb20gODAyLjExIGZyYW1lX2NvbnRyb2wgZmllbGQuICovCitpbnQgaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgZmM7CkBAIC0yOTEzLDkgKzI5MDIsMTAgQEAKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIC0xOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCWhvc3RhcF91cGRhdGVfc3RhX3BzMihsb2NhbCwgc3RhLCBmYyAmIElFRUU4MDIxMV9GQ1RMX1BNLAotCQkJICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYyksIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSk7CisJCQkgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFLAorCQkJICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSk7CiAKIAlhdG9taWNfZGVjKCZzdGEtPnVzZXJzKTsKIAlyZXR1cm4gMDsKQEAgLTI5MzIsMTYgKzI5MjIsMTYgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUxNiBmYywgdHlwZSwgc3R5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWYgKGxvY2FsLT5hcCA9PSBOVUxMKQogCQlyZXR1cm4gQVBfUlhfQ09OVElOVUU7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQl0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShmYyk7Ci0Jc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXR5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFOworCXN0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKIAogCXNwaW5fbG9jaygmbG9jYWwtPmFwLT5zdGFfdGFibGVfbG9jayk7CiAJc3RhID0gYXBfZ2V0X3N0YShsb2NhbC0+YXAsIGhkci0+YWRkcjIpOwpAQCAtMzA2NCw3ICszMDU0LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCiBpbnQgaG9zdGFwX2hhbmRsZV9zdGFfY3J5cHRvKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICAgIHN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQsCiAJCQkgICAgIHZvaWQgKipzdGFfcHRyKQogewpAQCAtMzE2Niw3ICszMTU2LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCiBpbnQgaG9zdGFwX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgYXBfZGF0YSAqYXAsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaAppbmRleCBkMzZlNGIxLi42NTVjZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCkBAIC0yMzUsNyArMjM1LDcgQEAKIGFwX3R4X3JldCBob3N0YXBfaGFuZGxlX3N0YV90eChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaG9zdGFwX3R4X2RhdGEgKnR4KTsKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfcmVsZWFzZSh2b2lkICpwdHIpOwogdm9pZCBob3N0YXBfaGFuZGxlX3N0YV90eF9leGMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcik7CitpbnQgaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7CiB0eXBlZGVmIGVudW0gewogCUFQX1JYX0NPTlRJTlVFLCBBUF9SWF9EUk9QLCBBUF9SWF9FWElULCBBUF9SWF9DT05USU5VRV9OT1RfQVVUSE9SSVpFRAogfSBhcF9yeF9yZXQ7CkBAIC0yNDMsMTMgKzI0MywxMyBAQAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzLAogCQkJICAgICAgIGludCB3ZHMpOwotaW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAoraW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0LAogCQkJICAgICB2b2lkICoqc3RhX3B0cik7CiBpbnQgaG9zdGFwX2lzX3N0YV9hc3NvYyhzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7CiBpbnQgaG9zdGFwX2lzX3N0YV9hdXRob3JpemVkKHN0cnVjdCBhcF9kYXRhICphcCwgdTggKnN0YV9hZGRyKTsKIGludCBob3N0YXBfYWRkX3N0YShzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7Ci1pbnQgaG9zdGFwX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgYXBfZGF0YSAqYXAsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCitpbnQgaG9zdGFwX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgYXBfZGF0YSAqYXAsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpOwogdm9pZCBob3N0YXBfdXBkYXRlX3JhdGVzKGxvY2FsX2luZm9fdCAqbG9jYWwpOwogdm9pZCBob3N0YXBfYWRkX3dkc19saW5rcyhsb2NhbF9pbmZvX3QgKmxvY2FsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwppbmRleCAwZjI3MDU5Li4zZGFkMWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKQEAgLTE2ODMsNyArMTY4Miw3IEBACiAKIAlQREVCVUcoREVCVUdfRVhUUkEyLCAicHJpc20yX2dldF90eGZpZF9pZHg6IG5vIHJvb20gaW4gdHhmaWQgYnVmOiAiCiAJICAgICAgICJwYWNrZXQgZHJvcHBlZFxuIik7Ci0JbG9jYWwtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlsb2NhbC0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAKIAlyZXR1cm4gLTE7CiB9CkBAIC0xNzg4LDExICsxNzg3LDkgQEAKIAkJcHJpc20yX3RyYW5zbWl0X2NiLCAobG9uZykgaWR4KTsKIAogCWlmIChyZXMpIHsKLQkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHByaXNtMl90cmFuc21pdDogQ01EQ09ERV9UUkFOU01JVCAiCiAJCSAgICAgICAiZmFpbGVkIChyZXM9JWQpXG4iLCBkZXYtPm5hbWUsIHJlcyk7Ci0JCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwotCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTg0MCw4ICsxODM3LDggQEAKIAloZHJfbGVuID0gMjQ7CiAJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsICZ0eGRlc2MuZnJhbWVfY29udHJvbCwgaGRyX2xlbik7CiAgCWZjID0gbGUxNl90b19jcHUodHhkZXNjLmZyYW1lX2NvbnRyb2wpOwotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgotCSAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpICYmCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKHR4ZGVzYy5mcmFtZV9jb250cm9sKSAmJgorCSAgICBpZWVlODAyMTFfaGFzX2E0KHR4ZGVzYy5mcmFtZV9jb250cm9sKSAmJgogCSAgICBza2ItPmxlbiA+PSAzMCkgewogCQkvKiBBZGRyNCAqLwogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIGhkcl9sZW4sIHR4ZGVzYy5hZGRyNCwKQEAgLTE5NDAsMTIgKzE5MzcsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIAlpbnQgcmVzLCByeF9wZW5kaW5nID0gMDsKIAl1MTYgbGVuLCBoZHJfbGVuLCByeGZpZCwgc3RhdHVzLCBtYWNwb3J0OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAlzdHJ1Y3QgaGZhMzg0eF9yeF9mcmFtZSByeGRlc2M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAKIAlwcmlzbTJfY2FsbGJhY2sobG9jYWwsIFBSSVNNMl9DQUxMQkFDS19SWF9TVEFSVCk7Ci0Jc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7CiAKIAlyeGZpZCA9IHByaXNtMl9yZWFkX2ZpZF9yZWcoZGV2LCBIRkEzODRYX1JYRklEX09GRik7CiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KQEAgLTIwMzIsNyArMjAyNyw3IEBACiAJcmV0dXJuOwogCiAgcnhfZHJvcHBlZDoKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlnb3RvIHJ4X2V4aXQ7CkBAIC0yMDgyLDcgKzIwNzcsNyBAQAogCXN0YXRzLnJhdGUgPSByeGRlc2MtPnJhdGU7CiAKIAkvKiBDb252ZXJ0IFByaXNtMiBSWCBzdHJ1Y3R1cmUgaW50byBJRUVFIDgwMi4xMSBoZWFkZXIgKi8KLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShyeGRlc2MtPmZyYW1lX2NvbnRyb2wpKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCWlmIChoZHJsZW4gPiByeF9oZHJsZW4pCiAJCWhkcmxlbiA9IHJ4X2hkcmxlbjsKIApAQCAtMjIwNCw3ICsyMTk5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZnJhbWVfY29udHJvbCkpOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHR4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CiAJbGVuID0gbGUxNl90b19jcHUodHhkZXNjLT5kYXRhX2xlbik7CiAJc2tiID0gZGV2X2FsbG9jX3NrYihoZHJsZW4gKyBsZW4pOwogCWlmIChza2IgPT0gTlVMTCkgewpAQCAtMjMxNSw4ICsyMzEwLDcgQEAKIAkJaWYgKHNrYi0+bGVuID49IHNpemVvZigqdHhkZXNjKSkgewogCQkJLyogQ29udmVydCBQcmlzbTIgUlggc3RydWN0dXJlIGludG8gSUVFRSA4MDIuMTEgaGVhZGVyCiAJCQkgKi8KLQkJCXUxNiBmYyA9IGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZnJhbWVfY29udHJvbCk7Ci0JCQlpbnQgaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCQkJaW50IGhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHR4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CiAJCQltZW1tb3ZlKHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCp0eGRlc2MpIC0gaGRybGVuKSwKIAkJCQkmdHhkZXNjLT5mcmFtZV9jb250cm9sLCBoZHJsZW4pOwogCkBAIC0yMzM3LDcgKzIzMzEsNyBAQAogCXN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lIHR4ZGVzYzsKIAogCXNob3dfZHVtcCA9IGxvY2FsLT5mcmFtZV9kdW1wICYgUFJJU00yX0RVTVBfVFhFWENfSERSOwotCWxvY2FsLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJcmVzID0gaG9zdGFwX3R4X2NvbXBsX3JlYWQobG9jYWwsIDEsICZ0eGRlc2MsICZwYXlsb2FkKTsKIAlIRkEzODRYX09VVFcoSEZBMzg0WF9FVl9UWEVYQywgSEZBMzg0WF9FVkFDS19PRkYpOwpAQCAtMjM5NCwxMiArMjM4OCwxMiBAQAogCVBERUJVRyhERUJVR19FWFRSQSwgIiAgIHJldHJ5X2NvdW50PSVkIHR4X3JhdGU9JWQgZmM9MHglMDR4ICIKIAkgICAgICAgIiglcyVzJXM6OiVkJXMlcylcbiIsCiAJICAgICAgIHR4ZGVzYy5yZXRyeV9jb3VudCwgdHhkZXNjLnR4X3JhdGUsIGZjLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCA/ICJNZ210IiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMID8gIkN0cmwiIDogIiIsCi0JICAgICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBID8gIkRhdGEiIDogIiIsCi0JICAgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAotCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFRvRFMiIDogIiIsCi0JICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTID8gIiBGcm9tRFMiIDogIiIpOworCSAgICAgICBpZWVlODAyMTFfaXNfbWdtdCh0eGRlc2MuZnJhbWVfY29udHJvbCkgPyAiTWdtdCIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2lzX2N0bCh0eGRlc2MuZnJhbWVfY29udHJvbCkgPyAiQ3RybCIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2lzX2RhdGEodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIkRhdGEiIDogIiIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAorCSAgICAgICBpZWVlODAyMTFfaGFzX3RvZHModHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIiBUb0RTIiA6ICIiLAorCSAgICAgICBpZWVlODAyMTFfaGFzX2Zyb21kcyh0eGRlc2MuZnJhbWVfY29udHJvbCkgPyAiIEZyb21EUyIgOiAiIik7CiAJUERFQlVHKERFQlVHX0VYVFJBLCAiICAgQTE9JXBNIEEyPSVwTSBBMz0lcE0gQTQ9JXBNXG4iLAogCSAgICAgICB0eGRlc2MuYWRkcjEsIHR4ZGVzYy5hZGRyMiwKIAkgICAgICAgdHhkZXNjLmFkZHIzLCB0eGRlc2MuYWRkcjQpOwpAQCAtMzIyOCw3ICszMjIyLDYgQEAKIAogCWhvc3RhcF9zZXR1cF9kZXYoZGV2LCBsb2NhbCwgSE9TVEFQX0lOVEVSRkFDRV9NQVNURVIpOwogCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQ7CiAJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmaG9zdGFwXzgwMjExX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYwppbmRleCA5OWI0Y2Y0Li42ZmExNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYwpAQCAtMSw1ICsxLDYgQEAKIC8qIEhvc3QgQVAgZHJpdmVyIEluZm8gRnJhbWUgcHJvY2Vzc2luZyAocGFydCBvZiBob3N0YXAubyBtb2R1bGUpICovCiAKKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgogI2luY2x1ZGUgImhvc3RhcF9hcC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCmluZGV4IGM0MGZkZjQuLjNmMmJkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKQEAgLTIsNiArMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KIAogI2luY2x1ZGUgImhvc3RhcF93bGFuLmgiCkBAIC0xNjM4LDcgKzE2MzksNyBAQAogCW1lbXNldCgmc2Nhbl9yZXEsIDAsIHNpemVvZihzY2FuX3JlcSkpOwogCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IGNwdV90b19sZTE2KGxvY2FsLT5jaGFubmVsX21hc2sgJgogCQkJCQkgICAgbG9jYWwtPnNjYW5fY2hhbm5lbF9tYXNrKTsKLQlzY2FuX3JlcS50eHJhdGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOworCXNjYW5fcmVxLnR4cmF0ZSA9IGNwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOwogCWlmIChzc2lkKSB7CiAJCWlmIChzc2lkX2xlbiA+IDMyKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjY4LDcgKzE2NjksNyBAQAogCW1lbXNldCgmc2Nhbl9yZXEsIDAsIHNpemVvZihzY2FuX3JlcSkpOwogCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IGNwdV90b19sZTE2KGxvY2FsLT5jaGFubmVsX21hc2sgJgogCQkJCQkgICAgbG9jYWwtPnNjYW5fY2hhbm5lbF9tYXNrKTsKLQlzY2FuX3JlcS50eHJhdGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOworCXNjYW5fcmVxLnR4cmF0ZSA9IGNwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOwogCiAJLyogRklYOgogCSAqIEl0IHNlZW1zIHRvIGJlIGVub3VnaCB0byBzZXQgcm9hbWluZyBtb2RlIGZvciBhIHNob3J0IG1vbWVudCB0bwpAQCAtMjUxNCw3ICsyNTE1LDcgQEAKIAkJdTE2IHJhdGU7CiAKIAkJbWVtc2V0KCZzY2FuX3JlcSwgMCwgc2l6ZW9mKHNjYW5fcmVxKSk7Ci0JCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgzZmZmKTsKKwkJc2Nhbl9yZXEuY2hhbm5lbF9saXN0ID0gY3B1X3RvX2xlMTYoMHgzZmZmKTsKIAkJc3dpdGNoICh2YWx1ZSkgewogCQljYXNlIDE6IHJhdGUgPSBIRkEzODRYX1JBVEVTXzFNQlBTOyBicmVhazsKIAkJY2FzZSAyOiByYXRlID0gSEZBMzg0WF9SQVRFU18yTUJQUzsgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCmluZGV4IDAyYTMxMmMuLjZmZTEyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTU0Myw3ICs1NDIsOCBAQAogCWZjID0gX19sZTE2X3RvX2NwdShyeC0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCkgZHVyPTB4JTA0eCBzZXE9MHglMDR4ICIKIAkgICAgICAgImRhdGFfbGVuPSVkJXMlc1xuIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBfX2xlMTZfdG9fY3B1KHJ4LT5kdXJhdGlvbl9pZCksIF9fbGUxNl90b19jcHUocngtPnNlcV9jdHJsKSwKIAkgICAgICAgX19sZTE2X3RvX2NwdShyeC0+ZGF0YV9sZW4pLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKQEAgLTU3MCw3ICs1NzAsOCBAQAogCWZjID0gX19sZTE2X3RvX2NwdSh0eC0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCkgZHVyPTB4JTA0eCBzZXE9MHglMDR4ICIKIAkgICAgICAgImRhdGFfbGVuPSVkJXMlc1xuIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBfX2xlMTZfdG9fY3B1KHR4LT5kdXJhdGlvbl9pZCksIF9fbGUxNl90b19jcHUodHgtPnNlcV9jdHJsKSwKIAkgICAgICAgX19sZTE2X3RvX2NwdSh0eC0+ZGF0YV9sZW4pLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKQEAgLTU5MywzNyArNTk0LDE2IEBACiB9CiAKIAotaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHUxNiBmYykKK2ludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihfX2xlMTYgZmMpCiB7Ci0JaW50IGhkcmxlbiA9IDI0OworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgJiYgaWVlZTgwMjExX2hhc19hNCAoZmMpKQorCQlyZXR1cm4gMzA7IC8qIEFkZHI0ICovCisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0cyhmYykgfHwgaWVlZTgwMjExX2lzX2FjayhmYykpCisJCXJldHVybiAxMDsKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfY3RsKGZjKSkKKwkJcmV0dXJuIDE2OwogCi0Jc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSkgewotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpKQotCQkJaGRybGVuID0gMzA7IC8qIEFkZHI0ICovCi0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShmYykpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6Ci0JCQloZHJsZW4gPSAxMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaGRybGVuID0gMTY7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaGRybGVuOwotfQotCi0KLXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpob3N0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwotCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmlmYWNlLT5zdGF0czsKKwlyZXR1cm4gMjQ7CiB9CiAKIApAQCAtODM1LDYgKzgxNSw0NiBAQAogfTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwXzgwMjExX29wcyk7CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBob3N0YXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJCT0gaG9zdGFwX2RhdGFfc3RhcnRfeG1pdCwKKworCS5uZG9fb3BlbgkJPSBwcmlzbTJfb3BlbiwKKwkubmRvX3N0b3AJCT0gcHJpc20yX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gaG9zdGFwX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcHJpc20yX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGhvc3RhcF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IHByaXNtMl9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCAJPSBwcmlzbTJfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX21nbXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJCT0gaG9zdGFwX21nbXRfc3RhcnRfeG1pdCwKKworCS5uZG9fb3BlbgkJPSBwcmlzbTJfb3BlbiwKKwkubmRvX3N0b3AJCT0gcHJpc20yX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gaG9zdGFwX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcHJpc20yX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGhvc3RhcF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IHByaXNtMl9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCAJPSBwcmlzbTJfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX21hc3Rlcl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0IAk9IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdCwKKworCS5uZG9fb3BlbgkJPSBwcmlzbTJfb3BlbiwKKwkubmRvX3N0b3AJCT0gcHJpc20yX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gaG9zdGFwX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcHJpc20yX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGhvc3RhcF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IHByaXNtMl9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCAJPSBwcmlzbTJfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHZvaWQgaG9zdGFwX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBsb2NhbF9pbmZvX3QgKmxvY2FsLAogCQkgICAgICBpbnQgdHlwZSkKIHsKQEAgLTg0NCwzNyArODY0LDMxIEBACiAJZXRoZXJfc2V0dXAoZGV2KTsKIAogCS8qIGtlcm5lbCBjYWxsYmFja3MgKi8KLQlkZXYtPmdldF9zdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHM7CiAJaWYgKGlmYWNlKSB7CiAJCS8qIEN1cnJlbnRseSwgd2UgcG9pbnQgdG8gdGhlIHByb3BlciBzcHlfZGF0YSBvbmx5IG9uCiAJCSAqIHRoZSBtYWluX2Rldi4gVGhpcyBjb3VsZCBiZSBmaXhlZC4gSmVhbiBJSSAqLwogCQlpZmFjZS0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZpZmFjZS0+c3B5X2RhdGE7CiAJCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZpZmFjZS0+d2lyZWxlc3NfZGF0YTsKIAl9Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9Ci0JCShzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikgJmhvc3RhcF9pd19oYW5kbGVyX2RlZjsKLQlkZXYtPmRvX2lvY3RsID0gaG9zdGFwX2lvY3RsOwotCWRldi0+b3BlbiA9IHByaXNtMl9vcGVuOwotCWRldi0+c3RvcCA9IHByaXNtMl9jbG9zZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IHByaXNtMl9jaGFuZ2VfbXR1OwotCWRldi0+dHhfdGltZW91dCA9IHByaXNtMl90eF90aW1lb3V0OworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaG9zdGFwX2l3X2hhbmRsZXJfZGVmOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCi0JaWYgKHR5cGUgPT0gSE9TVEFQX0lOVEVSRkFDRV9BUCkgewotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQ7CisJc3dpdGNoKHR5cGUpIHsKKwljYXNlIEhPU1RBUF9JTlRFUkZBQ0VfQVA6CisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbWdtdF9uZXRkZXZfb3BzOwogCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwogCQlkZXYtPmhlYWRlcl9vcHMgPSAmaG9zdGFwXzgwMjExX29wczsKLQl9IGVsc2UgewotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQ7CisJCWJyZWFrOworCWNhc2UgSE9TVEFQX0lOVEVSRkFDRV9NQVNURVI6CisJCWRldi0+dHhfcXVldWVfbGVuID0gMDsJLyogdXNlIG1haW4gcmFkaW8gZGV2aWNlIHF1ZXVlICovCisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbWFzdGVyX29wczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmhvc3RhcF9uZXRkZXZfb3BzOwogCX0KIAogCWRldi0+bXR1ID0gbG9jYWwtPm10dTsKLQlpZiAodHlwZSAhPSBIT1NUQVBfSU5URVJGQUNFX01BU1RFUikgewotCQkvKiB1c2UgbWFpbiByYWRpbyBkZXZpY2UgcXVldWUgKi8KLQkJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwotCX0KKwogCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJnByaXNtMl9ldGh0b29sX29wcyk7CiAKQEAgLTExMjQsNyArMTEzOCw2IEBACiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9kdW1wX3J4X2hlYWRlcik7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9kdW1wX3R4X2hlYWRlcik7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2dldF9zdGF0cyk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9zZXR1cF9kZXYpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0X211bHRpY2FzdF9saXN0X3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9ob3N0YXBkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKaW5kZXggNGQ4ZDUxYTMuLjNkMjM4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCkBAIC02ODQsNyArNjg0LDYgQEAKIAl1MTYgY2hhbm5lbF9tYXNrOyAvKiBtYXNrIG9mIGFsbG93ZWQgY2hhbm5lbHMgKi8KIAl1MTYgc2Nhbl9jaGFubmVsX21hc2s7IC8qIG1hc2sgb2YgY2hhbm5lbHMgdG8gYmUgc2Nhbm5lZCAqLwogCXN0cnVjdCBjb21tX3RhbGxpZXNfc3VtcyBjb21tX3RhbGxpZXM7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwogCWludCBpd19tb2RlOyAvKiBvcGVyYXRpbmcgbW9kZSAoSVdfTU9ERV8qKSAqLwogCWludCBwc2V1ZG9fYWRob2M7IC8qIDA6IElXX01PREVfQURIT0MgaXMgcmVhbCA4MDIuMTEgY29tcGxpYW50IElCU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZwppbmRleCAzZDVjYzQ0Li44NWNjNzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCkBAIC0xNTAsNiArMTUwLDcgQEAKIAogY29uZmlnIExJQklQVwogCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTl84MDIxMQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19BUkM0CkBAIC0xODUsNyArMTg2LDcgQEAKIAkgICUgZWNobyAweDAwMDAwRkZPID4gL3Byb2MvbmV0L2llZWU4MDIxMS9kZWJ1Z19sZXZlbAogCiAJICBGb3IgYSBsaXN0IG9mIHZhbHVlcyB5b3UgY2FuIGFzc2lnbiB0byBkZWJ1Z19sZXZlbCwgeW91Ci0JICBjYW4gbG9vayBhdCB0aGUgYml0IG1hc2sgdmFsdWVzIGluIDxuZXQvaWVlZTgwMjExLmg+CisJICBjYW4gbG9vayBhdCB0aGUgYml0IG1hc2sgdmFsdWVzIGluIGllZWU4MDIxMS5oCiAKIAkgIElmIHlvdSBhcmUgbm90IHRyeWluZyB0byBkZWJ1ZyBvciBkZXZlbG9wIHRoZSBsaWJpcHcKIAkgIGNvbXBvbmVudCwgeW91IG1vc3QgbGlrZWx5IHdhbnQgdG8gc2F5IE4gaGVyZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL25ldC9pZWVlODAyMTEuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaAppbmRleCBhZGI3Y2YzLi43MDc1NWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oCkBAIC01NCw2NSArNTQsMTIgQEAKICNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAyNTZVCiAjZGVmaW5lCU1BWF9GUkFHX1RIUkVTSE9MRCAgICAgMjM0NlUKIAotLyogRnJhbWUgY29udHJvbCBmaWVsZCBjb25zdGFudHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVkVSUwkJMHgwMDAzCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZUWVBFCQkweDAwMGMKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfU1RZUEUJCTB4MDBmMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9UT0RTCQkweDAxMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfRlJPTURTCQkweDAyMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTCTB4MDQwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9SRVRSWQkJMHgwODAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1BNCQkweDEwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEJCTB4MjAwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQJMHg0MDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX09SREVSCQkweDgwMDAKLQotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfTUdNVAkJMHgwMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9DVEwJCTB4MDAwNAotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfREFUQQkJMHgwMDA4Ci0KLS8qIG1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AgCTB4MDAxMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEJMHgwMDIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1AJMHgwMDMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEJMHgwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQCTB4MDA1MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OCQkweDAwODAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FUSU0JCTB4MDA5MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MJMHgwMEEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BVVRICQkweDAwQjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RFQVVUSAkJMHgwMEMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04JCTB4MDBEMAotCi0vKiBjb250cm9sICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QU1BPTEwJCTB4MDBBMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUlRTCQkweDAwQjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NUUwkJMHgwMEMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BQ0sJCTB4MDBEMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQJCTB4MDBFMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0sJMHgwMEYwCi0KLS8qIGRhdGEgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEEJCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRkFDSwkweDAwMTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZQT0xMCTB4MDAyMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRkFDS1BPTEwJMHgwMDMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQwkweDAwNDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGQUNLCQkweDAwNTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGUE9MTAkJMHgwMDYwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDS1BPTEwJMHgwMDcwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSAgICAgICAgMHgwMDgwCi0KLSNkZWZpbmUgSUVFRTgwMjExX1NDVExfRlJBRwkJMHgwMDBGCi0jZGVmaW5lIElFRUU4MDIxMV9TQ1RMX1NFUQkJMHhGRkYwCi0KIC8qIFFPUyBjb250cm9sICovCiAjZGVmaW5lIElFRUU4MDIxMV9RQ1RMX1RJRAkJMHgwMDBGCiAKIC8qIGRlYnVnIG1hY3JvcyAqLwogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIGV4dGVybiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsOwogI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAogZG8geyBpZiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXApAQCAtMTI4LDcgKzc1LDcgQEAKIHsKIAlyZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOgpAQCAtMTUyLDcgKzk5LDcgQEAKICAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaWVlZTgwMjExX2RlYnVnX2xldmVsIGFycmF5LgogICoKICAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pZWVlODAyMTEgdGhlbiB5b3UgZG8gbm90IGhhdmUKLSAqIENPTkZJR19JRUVFODAyMTFfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCisgKiBDT05GSUdfTElCSVBXX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgogICoKICAqLwogCkBAIC0yMTcsMjMgKzE2NCw2IEBACiAjZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkFHKHNlcSkgKChzZXEpICYgSUVFRTgwMjExX1NDVExfRlJBRykKICNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUShzZXEpICAoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQogCi0vKiBBY3Rpb24gY2F0ZWdvcmllcyAtIDgwMi4xMWggKi8KLWVudW0gaWVlZTgwMjExX2FjdGlvbmNhdGVnb3JpZXMgewotCVdMQU5fQUNUSU9OX1NQRUNUUlVNX01HTVQgPSAwLAotCS8qIFJlc2VydmVkIDEtMTI3ICAqLwotCS8qIEVycm9yICAgIDEyOC0yNTUgKi8KLX07Ci0KLS8qIEFjdGlvbiBkZXRhaWxzIC0gODAyLjExaCAqLwotZW51bSBpZWVlODAyMTFfYWN0aW9uZGV0YWlscyB7Ci0JV0xBTl9BQ1RJT05fQ0FURUdPUllfTUVBU1VSRV9SRVFVRVNUID0gMCwKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9NRUFTVVJFX1JFUE9SVCA9IDEsCi0JV0xBTl9BQ1RJT05fQ0FURUdPUllfVFBDX1JFUVVFU1QgPSAyLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX1RQQ19SRVBPUlQgPSAzLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX0NIQU5ORUxfU1dJVENIID0gNCwKLQkvKiA1IC0gMjU1IFJlc2VydmVkICovCi19OwotCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgKDE8PDApCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJICgxPDwxKQogI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0UgKDE8PDIpCkBAIC00MTEsMzcgKzM0MSw2IEBACiAKICNkZWZpbmUgQkVBQ09OX1BST0JFX1NTSURfSURfUE9TSVRJT04gMTIKIAotLyogTWFuYWdlbWVudCBGcmFtZSBJbmZvcm1hdGlvbiBFbGVtZW50IFR5cGVzICovCi1lbnVtIGllZWU4MDIxMV9tZmllIHsKLQlNRklFX1RZUEVfU1NJRCA9IDAsCi0JTUZJRV9UWVBFX1JBVEVTID0gMSwKLQlNRklFX1RZUEVfRkhfU0VUID0gMiwKLQlNRklFX1RZUEVfRFNfU0VUID0gMywKLQlNRklFX1RZUEVfQ0ZfU0VUID0gNCwKLQlNRklFX1RZUEVfVElNID0gNSwKLQlNRklFX1RZUEVfSUJTU19TRVQgPSA2LAotCU1GSUVfVFlQRV9DT1VOVFJZID0gNywKLQlNRklFX1RZUEVfSE9QX1BBUkFNUyA9IDgsCi0JTUZJRV9UWVBFX0hPUF9UQUJMRSA9IDksCi0JTUZJRV9UWVBFX1JFUVVFU1QgPSAxMCwKLQlNRklFX1RZUEVfQ0hBTExFTkdFID0gMTYsCi0JTUZJRV9UWVBFX1BPV0VSX0NPTlNUUkFJTlQgPSAzMiwKLQlNRklFX1RZUEVfUE9XRVJfQ0FQQUJJTElUWSA9IDMzLAotCU1GSUVfVFlQRV9UUENfUkVRVUVTVCA9IDM0LAotCU1GSUVfVFlQRV9UUENfUkVQT1JUID0gMzUsCi0JTUZJRV9UWVBFX1NVUFBfQ0hBTk5FTFMgPSAzNiwKLQlNRklFX1RZUEVfQ1NBID0gMzcsCi0JTUZJRV9UWVBFX01FQVNVUkVfUkVRVUVTVCA9IDM4LAotCU1GSUVfVFlQRV9NRUFTVVJFX1JFUE9SVCA9IDM5LAotCU1GSUVfVFlQRV9RVUlFVCA9IDQwLAotCU1GSUVfVFlQRV9JQlNTX0RGUyA9IDQxLAotCU1GSUVfVFlQRV9FUlBfSU5GTyA9IDQyLAotCU1GSUVfVFlQRV9SU04gPSA0OCwKLQlNRklFX1RZUEVfUkFURVNfRVggPSA1MCwKLQlNRklFX1RZUEVfR0VORVJJQyA9IDIyMSwKLQlNRklFX1RZUEVfUU9TX1BBUkFNRVRFUiA9IDIyMiwKLX07Ci0KIHN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyIHsKIAlfX2xlMTYgZnJhbWVfY3RsOwogCV9fbGUxNiBkdXJhdGlvbl9pZDsKQEAgLTg4Nyw3ICs3ODYsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjOwogCiAJLyogQm9va2tlZXBpbmcgc3RydWN0dXJlcyAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhdHMgaWVlZV9zdGF0czsKIAogCXN0cnVjdCBpZWVlODAyMTFfZ2VvIGdlbzsKQEAgLTExMTgsNiArMTAxNiwxMCBAQAogLyogaWVlZTgwMjExLmMgKi8KIGV4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2KTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOworCitleHRlcm4gdm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwogCiBleHRlcm4gaW50IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKaW5kZXggODIzYzJiZi4uMTE1YjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKQEAgLTE2OTIsNyArMTY5MiwxMyBAQAogCXUzMiBsb2NrOwogCXUzMiBvcmRfbGVuID0gc2l6ZW9mKGxvY2spOwogCi0JLyogUXVpdGUgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCisJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCisJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgeworCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CisJfQorCisJLyogUXVpZXQgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSB7CiAJCUlQV19ERUJVR19JTkZPKCIlczogUmFkaW8gaXMgZGlzYWJsZWQgYnkgTWFudWFsIERpc2FibGUgIgogCQkJICAgICAgICJzd2l0Y2hcbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOwpAQCAtMTkxMCw3ICsxOTE2LDggQEAKIHsKIAogI2RlZmluZSBNQUNfQVNTT0NJQVRJT05fUkVBRF9ERUxBWSAoSFopCi0JaW50IHJldCwgbGVuLCBlc3NpZF9sZW47CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBlc3NpZF9sZW47CiAJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CiAJdTMyIHR4cmF0ZTsKIAl1MzIgY2hhbjsKQEAgLTIzODQsMTMgKzIzOTEsMTQgQEAKICNlbmRpZgogCiAJcHJpdi0+ZmF0YWxfZXJyb3IgPSBJUFcyMTAwX0VSUl9DM19DT1JSVVBUSU9OOwotCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCXByaXYtPm5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpc3Jfcngoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGksCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpcHcyMTAwX3N0YXR1cyAqc3RhdHVzID0gJnByaXYtPnN0YXR1c19xdWV1ZS5kcnZbaV07CiAJc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0ICpwYWNrZXQgPSAmcHJpdi0+cnhfYnVmZmVyc1tpXTsKIApAQCAtMjM5OSwxNCArMjQwNywxNCBAQAogCWlmICh1bmxpa2VseShzdGF0dXMtPmZyYW1lX3NpemUgPiBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLCBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgeworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC0yNDM2LDEwICsyNDQ0LDEwIEBACiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkJSVBXX0RFQlVHX0RST1AoIiVzOiBOb24gY29uc3VtZWQgcGFja2V0OlxuIiwKLQkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJCSAgICAgICBkZXYtPm5hbWUpOwogCQlwcmludGtfYnVmKElQV19ETF9EUk9QLCBwYWNrZXRfZGF0YSwgc3RhdHVzLT5mcmFtZV9zaXplKTsKICNlbmRpZgotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCQkvKiBpZWVlODAyMTFfcnggZmFpbGVkLCBzbyBpdCBkaWRuJ3QgZnJlZSB0aGUgU0tCICovCiAJCWRldl9rZnJlZV9za2JfYW55KHBhY2tldC0+c2tiKTsKQEAgLTI0NTAsNyArMjQ1OCw3IEBACiAJaWYgKHVubGlrZWx5KGlwdzIxMDBfYWxsb2Nfc2tiKHByaXYsIHBhY2tldCkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIgogCQkgICAgICAgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgU0tCIG9udG8gUkJEIHJpbmcgLSBkaXNhYmxpbmcgIgotCQkgICAgICAgImFkYXB0ZXIuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgICJhZGFwdGVyLlxuIiwgZGV2LT5uYW1lKTsKIAkJLyogVE9ETzogc2NoZWR1bGUgYWRhcHRlciBzaHV0ZG93biAqLwogCQlJUFdfREVCVUdfSU5GTygiVE9ETzogU2h1dGRvd24gYWRhcHRlci4uLlxuIik7CiAJfQpAQCAtMjQ2NCw2ICsyNDcyLDcgQEAKIHN0YXRpYyB2b2lkIGlzcl9yeF9tb25pdG9yKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAogCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwogCXN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqcGFja2V0ID0gJnByaXYtPnJ4X2J1ZmZlcnNbaV07CiAKQEAgLTI0ODEsMTUgKzI0OTAsMTUgQEAKIAkJCQlzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLAogCQkJICAgICAgIHNrYl90YWlscm9vbShwYWNrZXQtPnNrYikpOwotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKSB7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IHVwLlxuIik7CiAJCXJldHVybjsKQEAgLTI0OTgsNyArMjUwNyw3IEBACiAJaWYgKHVubGlrZWx5KHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0sgJiYKIAkJICAgICBzdGF0dXMtPmZsYWdzICYgSVBXX1NUQVRVU19GTEFHX0NSQ19FUlJPUikpIHsKIAkJSVBXX0RFQlVHX1JYKCJDUkMgZXJyb3IgaW4gcGFja2V0LiAgRHJvcHBpbmcuXG4iKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI1MjAsNyArMjUyOSw3IEBACiAJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSk7CiAKIAlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkocGFja2V0LT5za2IpOwpAQCAtMjUzMSw3ICsyNTQwLDcgQEAKIAlpZiAodW5saWtlbHkoaXB3MjEwMF9hbGxvY19za2IocHJpdiwgcGFja2V0KSkpIHsKIAkJSVBXX0RFQlVHX1dBUk5JTkcoCiAJCQkiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBTS0Igb250byBSQkQgcmluZyAtIGRpc2FibGluZyAiCi0JCQkiYWRhcHRlci5cbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJImFkYXB0ZXIuXG4iLCBkZXYtPm5hbWUpOwogCQkvKiBUT0RPOiBzY2hlZHVsZSBhZGFwdGVyIHNodXRkb3duICovCiAJCUlQV19ERUJVR19JTkZPKCJUT0RPOiBTaHV0ZG93biBhZGFwdGVyLi4uXG4iKTsKIAl9CkBAIC0zMzMzLDcgKzMzNDIsNyBAQAogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCUlQV19ERUJVR19JTkZPKCJDYW4gbm90IHRyYW5zbWl0IHdoZW4gbm90IGNvbm5lY3RlZC5cbiIpOwotCQlwcml2LT5pZWVlLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlwcml2LT5uZXRfZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQpAQCAtNDA1OCw3ICs0MDY3LDcgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTMyIGNoYW4gPSAwOwogCWNoYXIgKm91dCA9IGJ1ZjsKLQlpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJaW50IHJldDsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQpAQCAtNTgyOSw3ICs1ODM4LDcgQEAKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCXByaXYtPmllZWUtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQpAQCAtNTk5OSw2ICs2MDA4LDE3IEBACiAKIHN0YXRpYyB2b2lkIGlwdzIxMDBfaXJxX3Rhc2tsZXQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3MjEwMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpcHcyMTAwX29wZW4sCisJLm5kb19zdG9wCQk9IGlwdzIxMDBfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGllZWU4MDIxMV94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX2luaXQJCT0gaXB3MjEwMF9uZXRfaW5pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaXB3MjEwMF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaXB3MjEwMF9zZXRfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIExvb2sgaW50byB1c2luZyBuZXRkZXYgZGVzdHJ1Y3RvciB0byBzaHV0ZG93biBpZWVlODAyMTE/ICovCiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXB3MjEwMF9hbGxvY19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCkBAIC02MDIzLDE1ICs2MDQzLDExIEBACiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CiAKLQlkZXYtPm9wZW4gPSBpcHcyMTAwX29wZW47Ci0JZGV2LT5zdG9wID0gaXB3MjEwMF9jbG9zZTsKLQlkZXYtPmluaXQgPSBpcHcyMTAwX25ldF9pbml0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpcHcyMTAwX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZpcHcyMTAwX2V0aHRvb2xfb3BzOwotCWRldi0+dHhfdGltZW91dCA9IGlwdzIxMDBfdHhfdGltZW91dDsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmlwdzIxMDBfd3hfaGFuZGxlcl9kZWY7CiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5pZWVlODAyMTEgPSBwcml2LT5pZWVlOwogCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gaXB3MjEwMF9zZXRfYWRkcmVzczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMyAqIEhaOwogCWRldi0+aXJxID0gMDsKIApAQCAtNjQxNCw2ICs2NDMwLDggQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOwogCisJcHJpdi0+c3VzcGVuZF9hdCA9IGdldF9zZWNvbmRzKCk7CisKIAltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTY0NTcsNiArNjQ3NSw4IEBACiAJICogdGhlIHF1ZXVlIG9mIG5lZWRlZCAqLwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAorCXByaXYtPnN1c3BlbmRfdGltZSA9IGdldF9zZWNvbmRzKCkgLSBwcml2LT5zdXNwZW5kX2F0OworCiAJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpKQogCQlpcHcyMTAwX3VwKHByaXYsIDApOwpAQCAtNzEyMiw3ICs3MTQyLDcgQEAKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgdmFsOwotCWludCBsZW4gPSBzaXplb2YodmFsKTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2l6ZW9mKHZhbCk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfRU5BQkxFRCkgfHwKQEAgLTgyOTcsNyArODMxNyw3IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXB3MjEwMF9wcml2LCB3eF9ldmVudF93b3JrLndvcmspOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQlpbnQgbGVuID0gRVRIX0FMRU47CisJdW5zaWduZWQgaW50IGxlbiA9IEVUSF9BTEVOOwogCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TVE9QUElORykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAppbmRleCBiYmYxZGRjLi5mMTgzZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaApAQCAtMzksOCArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLy8gbmV3IGRyaXZlciBBUEkKIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KLQogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAjZW5kaWYKQEAgLTQ4LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIHN0cnVjdCBpcHcyMTAwX3ByaXY7CiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQ7CiBzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQ7CkBAIC01OTEsNiArNTkxLDEwIEBACiAKIAlpbnQgdXNlcl9yZXF1ZXN0ZWRfc2NhbjsKIAorCS8qIFRyYWNrIHRpbWUgaW4gc3VzcGVuZCAqLworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9hdDsKKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfdGltZTsKKwogCXUzMiBpbnRlcnJ1cHRzOwogCWludCB0eF9pbnRlcnJ1cHRzOwogCWludCByeF9pbnRlcnJ1cHRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCA2MjVmMmNmLi5iMzQ0OTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtMzAxLDg4ICszMDEsMTAyIEBACiB9CiAKIC8qIDgtYml0IGRpcmVjdCB3cml0ZSAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKSB3cml0ZWIoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTgoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgaXB3LT5od19iYXNlICsgb2ZzKTsKK30KIAogLyogOC1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfd3JpdGU4KGlwdywgb2ZzLCB2YWwpIGRvIHsgXAotIElQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKLSB9IHdoaWxlICgwKQorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCisJX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIHdyaXRldygodmFsKSwgKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaXB3X3dyaXRlMTYoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIGlwdy0+aHdfYmFzZSArIG9mcyk7Cit9CiAKIC8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGZvciBsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIFwKLSBJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9kaXJlY3QxNigweCUwOFgsIDB4JTA4WClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikob2ZzKSwgKHUzMikodmFsKSk7IFwKLSBfaXB3X3dyaXRlMTYoaXB3LCBvZnMsIHZhbCkKKyNkZWZpbmUgaXB3X3dyaXRlMTYoaXB3LCBvZnMsIHZhbCkgZG8geyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MTYoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCisJX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpOyBcCit9IHdoaWxlICgwKQogCiAvKiAzMi1iaXQgZGlyZWN0IHdyaXRlIChsb3cgNEspICovCi0jZGVmaW5lIF9pcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSB3cml0ZWwoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTMyKHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1bnNpZ25lZCBsb25nIG9mcywKKwkJdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBpcHctPmh3X2Jhc2UgKyBvZnMpOworfQogCiAvKiAzMi1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSBcCi0gSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MzIoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTMyKGlwdywgb2ZzLCB2YWwpCisjZGVmaW5lIGlwd193cml0ZTMyKGlwdywgb2ZzLCB2YWwpIGRvIHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDMyKDB4JTA4WCwgMHglMDhYKVxuIiwgX19GSUxFX18sIFwKKwkJCV9fTElORV9fLCAodTMyKShvZnMpLCAodTMyKSh2YWwpKTsgXAorCV9pcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKTsgXAorfSB3aGlsZSAoMCkKIAogLyogOC1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd19yZWFkOChpcHcsIG9mcykgcmVhZGIoKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKLQotLyogOC1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotc3RhdGljIGlubGluZSB1OCBfX2lwd19yZWFkOChjaGFyICpmLCB1MzIgbCwgc3RydWN0IGlwd19wcml2ICppcHcsIHUzMiBvZnMpCitzdGF0aWMgaW5saW5lIHU4IF9pcHdfcmVhZDgoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0OCgweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7Ci0JcmV0dXJuIF9pcHdfcmVhZDgoaXB3LCBvZnMpOworCXJldHVybiByZWFkYihpcHctPmh3X2Jhc2UgKyBvZnMpOwogfQogCiAvKiBhbGlhcyB0byA4LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZDgoaXB3LCBvZnMpIF9faXB3X3JlYWQ4KF9fRklMRV9fLCBfX0xJTkVfXywgaXB3LCBvZnMpCisjZGVmaW5lIGlwd19yZWFkOChpcHcsIG9mcykgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0OCgweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCSh1MzIpKG9mcykpOyBcCisJX2lwd19yZWFkOChpcHcsIG9mcyk7IFwKK30pCiAKIC8qIDE2LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3JlYWQxNihpcHcsIG9mcykgcmVhZHcoKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKLQotLyogMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KLXN0YXRpYyBpbmxpbmUgdTE2IF9faXB3X3JlYWQxNihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGlwd19wcml2ICppcHcsIHUzMiBvZnMpCitzdGF0aWMgaW5saW5lIHUxNiBfaXB3X3JlYWQxNihzdHJ1Y3QgaXB3X3ByaXYgKmlwdywgdW5zaWduZWQgbG9uZyBvZnMpCiB7Ci0JSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9kaXJlY3QxNigweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7Ci0JcmV0dXJuIF9pcHdfcmVhZDE2KGlwdywgb2ZzKTsKKwlyZXR1cm4gcmVhZHcoaXB3LT5od19iYXNlICsgb2ZzKTsKIH0KIAogLyogYWxpYXMgdG8gMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd19yZWFkMTYoaXB3LCBvZnMpIF9faXB3X3JlYWQxNihfX0ZJTEVfXywgX19MSU5FX18sIGlwdywgb2ZzKQorI2RlZmluZSBpcHdfcmVhZDE2KGlwdywgb2ZzKSAoeyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9kaXJlY3QxNigweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCSh1MzIpKG9mcykpOyBcCisJX2lwd19yZWFkMTYoaXB3LCBvZnMpOyBcCit9KQogCiAvKiAzMi1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd19yZWFkMzIoaXB3LCBvZnMpIHJlYWRsKChpcHcpLT5od19iYXNlICsgKG9mcykpCi0KLS8qIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi1zdGF0aWMgaW5saW5lIHUzMiBfX2lwd19yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1MzIgX2lwd19yZWFkMzIoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewotCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MzIoMHglMDhYKVxuIiwgZiwgbCwgKHUzMikgKG9mcykpOwotCXJldHVybiBfaXB3X3JlYWQzMihpcHcsIG9mcyk7CisJcmV0dXJuIHJlYWRsKGlwdy0+aHdfYmFzZSArIG9mcyk7CiB9CiAKIC8qIGFsaWFzIHRvIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwotI2RlZmluZSBpcHdfcmVhZDMyKGlwdywgb2ZzKSBfX2lwd19yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBpcHcsIG9mcykKKyNkZWZpbmUgaXB3X3JlYWQzMihpcHcsIG9mcykgKHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MzIoMHglMDhYKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBcCisJCQkodTMyKShvZnMpKTsgXAorCV9pcHdfcmVhZDMyKGlwdywgb2ZzKTsgXAorfSkKIAotLyogbXVsdGktYnl0ZSByZWFkIChhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogc3RhdGljIHZvaWQgX2lwd19yZWFkX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqLCB1MzIsIHU4ICosIGludCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19pcHdfcmVhZF9pbmRpcmVjdChjb25zdCBjaGFyICpmLCBpbnQgbCwKLQkJCQkgICAgICAgc3RydWN0IGlwd19wcml2ICphLCB1MzIgYiwgdTggKiBjLCBpbnQgZCkKLXsKLQlJUFdfREVCVUdfSU8oIiVzICVkOiByZWFkX2luZGlyZWN0KDB4JTA4WCkgJWQgYnl0ZXNcbiIsIGYsIGwsICh1MzIpIChiKSwKLQkJICAgICBkKTsKLQlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCk7Ci19Ci0KIC8qIGFsaWFzIHRvIG11bHRpLWJ5dGUgcmVhZCAoU1JBTS9yZWdzIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCi0jZGVmaW5lIGlwd19yZWFkX2luZGlyZWN0KGEsIGIsIGMsIGQpIF9faXB3X3JlYWRfaW5kaXJlY3QoX19GSUxFX18sIF9fTElORV9fLCBhLCBiLCBjLCBkKQorI2RlZmluZSBpcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKSAoeyBcCisJSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9pbmRpcmVjdCgweCUwOFgpICV1IGJ5dGVzXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKGIpLCAodTMyKShkKSk7IFwKKwlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCk7IFwKK30pCiAKIC8qIGFsaWFzIHRvIG11bHRpLWJ5dGUgcmVhZCAoU1JBTS9yZWdzIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHU4ICogZGF0YSwKIAkJCQlpbnQgbnVtKTsKLSNkZWZpbmUgaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpIFwKLQlJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9pbmRpcmVjdCgweCUwOFgpICVkIGJ5dGVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKGIpLCBkKTsgXAotCV9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCkKKyNkZWZpbmUgaXB3X3dyaXRlX2luZGlyZWN0KGEsIGIsIGMsIGQpIGRvIHsgXAorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2luZGlyZWN0KDB4JTA4WCkgJXUgYnl0ZXNcbiIsIF9fRklMRV9fLCBcCisJCQlfX0xJTkVfXywgKHUzMikoYiksICh1MzIpKGQpKTsgXAorCV9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDMyLWJpdCBpbmRpcmVjdCB3cml0ZSAoYWJvdmUgNEspICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX3JlZzMyKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQpAQCAtNzcxNywyMiArNzczMSwyMyBAQAogCQkJCSAgIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciAqcnhiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5uZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZQogCSAqIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArIElQV19SWF9GUkFNRV9TSVpFKSA+CiAJCSAgICAgc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC03NzU0LDcgKzc3NjksNyBAQAogCQlpcHdfcmVidWlsZF9kZWNyeXB0ZWRfc2tiKHByaXYsIHJ4Yi0+c2tiKTsKIAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCi0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWVsc2UgewkJCS8qIGllZWU4MDIxMV9yeCBzdWNjZWVkZWQsIHNvIGl0IG5vdyBvd25zIHRoZSBTS0IgKi8KIAkJcnhiLT5za2IgPSBOVUxMOwogCQlfX2lwd19sZWRfYWN0aXZpdHlfb24ocHJpdik7CkBAIC03NzY2LDYgKzc3ODEsNyBAQAogCQkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpcHdfcnhfZnJhbWUgKmZyYW1lID0gJnBrdC0+dS5mcmFtZTsKIApAQCAtNzc4MywxOCArNzc5OSwxOCBAQAogCXNob3J0IGxlbiA9IGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5uZXRfZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZQogCSAqIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArIElQV19SWF9GUkFNRV9TSVpFKSA+CiAJCSAgICAgc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSkgewotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC03ODA0LDcgKzc4MjAsNyBAQAogCSAqIHRoYXQgbm93ICovCiAJaWYgKGxlbiA+IElQV19SWF9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcikpIHsKIAkJLyogRklYTUU6IFNob3VsZCBhbGxvYyBiaWdnZXIgc2tiIGluc3RlYWQgKi8KLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYysrOwogCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgdG9vIGxhcmdlIHBhY2tldCBpbiBtb25pdG9yXG4iKTsKIAkJcmV0dXJuOwpAQCAtNzkxMCw3ICs3OTI2LDcgQEAKIAlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHJ4Yi0+c2tiLT5sZW4pOwogCiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcnhiLT5za2IsIHN0YXRzKSkKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJZWxzZSB7CQkJLyogaWVlZTgwMjExX3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CiAJCS8qIG5vIExFRCBkdXJpbmcgY2FwdHVyZSAqLwpAQCAtNzk0Miw2ICs3OTU4LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+cHJvbV9uZXRfZGV2OwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXB3X3J4X2ZyYW1lICpmcmFtZSA9ICZwa3QtPnUuZnJhbWU7CiAJc3RydWN0IGlwd19ydF9oZHIgKmlwd19ydDsKQEAgLTc5NjQsMTcgKzc5ODEsMTcgQEAKIAkJcmV0dXJuOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlwcml2LT5wcm9tX25ldF9kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCWlmICh1bmxpa2VseSgobGVuICsgSVBXX1JYX0ZSQU1FX1NJWkUpID4gc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJcHJpdi0+cHJvbV9wcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhIE9oIG5vIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZSBpbnRlcmZhY2UgaXMgb3BlbiAqLwotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5wcm9tX25ldF9kZXYpKSkgewotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNzk4Myw3ICs4MDAwLDcgQEAKIAkgKiB0aGF0IG5vdyAqLwogCWlmIChsZW4gPiBJUFdfUlhfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSB7CiAJCS8qIEZJWE1FOiBTaG91bGQgYWxsb2MgYmlnZ2VyIHNrYiBpbnN0ZWFkICovCi0JCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHRvbyBsYXJnZSBwYWNrZXQgaW4gbW9uaXRvclxuIik7CiAJCXJldHVybjsKIAl9CkBAIC04MTE1LDcgKzgxMzIsNyBAQAogCUlQV19ERUJVR19SWCgiUnggcGFja2V0IG9mICVkIGJ5dGVzLlxuIiwgc2tiLT5sZW4pOwogCiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+cHJvbV9wcml2LT5pZWVlLCBza2IsIHN0YXRzKSkgewotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KIH0KQEAgLTgyNzIsNyArODI4OSw3IEBACiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAKIAkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjExX1NUQVRTKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjExX1NUQVRTKTsKIAkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihyeGItPnNrYi0+Y2IpKTsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcnhiLT5za2IgPSBOVUxMOwpAQCAtODM5OSw3ICs4NDE2LDcgQEAKIAkJCQkJSVBXX0RFQlVHX0RST1AKIAkJCQkJICAgICgiUmVjZWl2ZWQgcGFja2V0IGlzIHRvbyBzbWFsbC4gIgogCQkJCQkgICAgICJEcm9wcGluZy5cbiIpOwotCQkJCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJcHJpdi0+bmV0X2Rldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMTA0NzAsMTUgKzEwNDg3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwd19uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQotCXByaXYtPmllZWUtPnN0YXRzLnR4X3BhY2tldHMgPSBwcml2LT50eF9wYWNrZXRzOwotCXByaXYtPmllZWUtPnN0YXRzLnJ4X3BhY2tldHMgPSBwcml2LT5yeF9wYWNrZXRzOwotCXJldHVybiAmcHJpdi0+aWVlZS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIGlwd19uZXRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAKQEAgLTExMjI0LDYgKzExMjMyLDEyIEBACiB7CiAJaW50IHJjLCBpLCBqOwogCisJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCisJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgeworCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CisJfQorCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMTUxNSwxMSArMTE1MjksMTQgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXB3X3Byb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuICZwcm9tX3ByaXYtPmllZWUtPnN0YXRzOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcHdfcHJvbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaXB3X3Byb21fb3BlbiwKKwkubmRvX3N0b3AJCT0gaXB3X3Byb21fc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaXB3X3Byb21faGFyZF9zdGFydF94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgaW50IGlwd19wcm9tX2FsbG9jKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKQEAgLTExNTQwLDEwICsxMTU1Nyw3IEBACiAJbWVtY3B5KHByaXYtPnByb21fbmV0X2Rldi0+ZGV2X2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKIAlwcml2LT5wcm9tX25ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCXByaXYtPnByb21fbmV0X2Rldi0+b3BlbiA9IGlwd19wcm9tX29wZW47Ci0JcHJpdi0+cHJvbV9uZXRfZGV2LT5zdG9wID0gaXB3X3Byb21fc3RvcDsKLQlwcml2LT5wcm9tX25ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19wcm9tX2dldF9zdGF0czsKLQlwcml2LT5wcm9tX25ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlwd19wcm9tX2hhcmRfc3RhcnRfeG1pdDsKKwlwcml2LT5wcm9tX25ldF9kZXYtPm5ldGRldl9vcHMgPSAmaXB3X3Byb21fbmV0ZGV2X29wczsKIAogCXByaXYtPnByb21fcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfTU9OSVRPUjsKIAlTRVRfTkVUREVWX0RFVihwcml2LT5wcm9tX25ldF9kZXYsICZwcml2LT5wY2lfZGV2LT5kZXYpOwpAQCAtMTE1NzEsNiArMTE1ODUsMTcgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGlwd19uZXRfaW5pdCwKKwkubmRvX29wZW4JCT0gaXB3X25ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBpcHdfbmV0X3N0b3AsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGlwd19uZXRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgaXB3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMTE2NzIsMTIgKzExNjk3LDcgQEAKIAlwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgPSAtMjA7CiAJcHJpdi0+aWVlZS0+d29yc3RfcnNzaSA9IC04NTsKIAotCW5ldF9kZXYtPm9wZW4gPSBpcHdfbmV0X29wZW47Ci0JbmV0X2Rldi0+c3RvcCA9IGlwd19uZXRfc3RvcDsKLQluZXRfZGV2LT5pbml0ID0gaXB3X25ldF9pbml0OwotCW5ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19uZXRfZ2V0X3N0YXRzOwotCW5ldF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGlwd19uZXRfc2V0X211bHRpY2FzdF9saXN0OwotCW5ldF9kZXYtPnNldF9tYWNfYWRkcmVzcyA9IGlwd19uZXRfc2V0X21hY19hZGRyZXNzOworCW5ldF9kZXYtPm5ldGRldl9vcHMgPSAmaXB3X25ldGRldl9vcHM7CiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5pZWVlLT5zcHlfZGF0YTsKIAluZXRfZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CiAJbmV0X2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaXB3X3d4X2hhbmRsZXJfZGVmOwpAQCAtMTE4MjQsNiArMTE4NDQsOCBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIAorCXByaXYtPnN1c3BlbmRfYXQgPSBnZXRfc2Vjb25kcygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExODU5LDYgKzExODgxLDggQEAKIAkgKiB0aGUgcXVldWUgb2YgbmVlZGVkICovCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCisJcHJpdi0+c3VzcGVuZF90aW1lID0gZ2V0X3NlY29uZHMoKSAtIHByaXYtPnN1c3BlbmRfYXQ7CisKIAkvKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdXAgKi8KIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAppbmRleCAyNzdiMjc0Li4wNWU4Y2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaApAQCAtNDksMTMgKzQ5LDE0IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJpcHcyMjAwIgogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKwogLyogQXV0aGVudGljYXRpb24gIGFuZCBBc3NvY2lhdGlvbiBTdGF0ZXMgKi8KIGVudW0gY29ubmVjdGlvbl9tYW5hZ2VyX2Fzc29jX3N0YXRlcyB7CiAJQ01BU19JTklUID0gMCwKQEAgLTEzNDYsNiArMTM0NywxMCBAQAogCiAJczggdHhfcG93ZXI7CiAKKwkvKiBUcmFjayB0aW1lIGluIHN1c3BlbmQgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX3RpbWU7CisKICNpZmRlZiBDT05GSUdfUE0KIAl1MzIgcG1fc3RhdGVbMTZdOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCmluZGV4IDk2MGFkMTMuLjlkZmJiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCiBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCmluZGV4IGEyZjU2MTYuLjkyYTI2OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OICI4MDIuMTEgZGF0YS9tYW5hZ2VtZW50L2NvbnRyb2wgc3RhY2siCiAjZGVmaW5lIERSVl9OQU1FICAgICAgICAiaWVlZTgwMjExIgpAQCAtMTA1LDYgKzEwNSwyMSBAQAogCWllZWUtPm5ldHdvcmtzID0gTlVMTDsKIH0KIAordm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYWdlX2ppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKGFnZV9zZWNzICogTVNFQ19QRVJfU0VDKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXR3b3JrLCAmaWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCW5ldHdvcmstPmxhc3Rfc2Nhbm5lZCAtPSBhZ2VfamlmZmllczsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbmV0d29ya3NfYWdlKTsKKwogc3RhdGljIHZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2luaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJaW50IGk7CkBAIC0xMTYsMjAgKzEzMSwxNCBAQAogCQkJICAgICAgJmllZWUtPm5ldHdvcmtfZnJlZV9saXN0KTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK2ludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBJRUVFODAyMTFfREFUQV9MRU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYtPm10dSA9IG5ld19tdHU7CiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWVlZTgwMjExX2dlbmVyaWNfZ2V0X3N0YXRzKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmaWVlZS0+c3RhdHM7Ci19CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jaGFuZ2VfbXR1KTsKIAogc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpCiB7CkBAIC0xNDUsMTIgKzE1NCwxMCBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7CisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3htaXQ7CiAJZGV2LT5jaGFuZ2VfbXR1ID0gaWVlZTgwMjExX2NoYW5nZV9tdHU7Ci0KLQkvKiBEcml2ZXJzIGFyZSBmcmVlIHRvIG92ZXJyaWRlIHRoaXMgaWYgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24KLQkgKiBkb2VzIG5vdCBtZWV0IHRoZWlyIG5lZWRzLiAqLwotCWRldi0+Z2V0X3N0YXRzID0gaWVlZTgwMjExX2dlbmVyaWNfZ2V0X3N0YXRzOworI2VuZGlmCiAKIAlpZWVlLT5kZXYgPSBkZXY7CiAKQEAgLTIwNiw3ICsyMTMsNyBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWwgPSAwOwpAQCAtMjM3LDExICsyNDQsMTEgQEAKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgbGVuKTsKIH0KLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCiAJaWVlZTgwMjExX2RlYnVnX2xldmVsID0gZGVidWc7CkBAIC0yNjEsNyArMjY4LDcgQEAKIAllLT5yZWFkX3Byb2MgPSBzaG93X2RlYnVnX2xldmVsOwogCWUtPndyaXRlX3Byb2MgPSBzdG9yZV9kZWJ1Z19sZXZlbDsKIAllLT5kYXRhID0gTlVMTDsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9ERVNDUklQVElPTiAiLCAiIERSVl9WRVJTSU9OICJcbiIpOwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfQ09QWVJJR0hUICJcbiIpOwpAQCAtMjcxLDIwICsyNzgsMjAgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAlpZiAoaWVlZTgwMjExX3Byb2MpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgaWVlZTgwMjExX3Byb2MpOwogCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwogCQlpZWVlODAyMTFfcHJvYyA9IE5VTEw7CiAJfQotI2VuZGlmCQkJCS8qIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiBtb2R1bGVfZXhpdChpZWVlODAyMTFfZXhpdCk7CiBtb2R1bGVfaW5pdChpZWVlODAyMTFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYwppbmRleCA5YzY3ZGZhLi5kYWU0YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKQEAgLTMzLDcgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMzM0LDcgKzMzNSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAlzaXplX3QgaGRybGVuOwogCXUxNiBmYywgdHlwZSwgc3R5cGUsIHNjOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAl1bnNpZ25lZCBpbnQgZnJhZzsKIAl1OCAqcGF5bG9hZDsKIAl1MTYgZXRoZXJ0eXBlOwpAQCAtMzUzLDggKzM1Myw2IEBACiAJaW50IGNhbl9iZV9kZWNyeXB0ZWQgPSAwOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopc2tiLT5kYXRhOwotCXN0YXRzID0gJmllZWUtPnN0YXRzOwotCiAJaWYgKHNrYi0+bGVuIDwgMTApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNLQiBsZW5ndGggPCAxMFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byByeF9kcm9wcGVkOwpAQCAtNDExLDggKzQwOSw4IEBACiAjZW5kaWYKIAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQlzdGF0cy0+cnhfcGFja2V0cysrOwotCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQlpZWVlODAyMTFfbW9uaXRvcl9yeChpZWVlLCBza2IsIHJ4X3N0YXRzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNzY4LDggKzc2Niw4IEBACiAJfQogI2VuZGlmCiAKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAjaWZkZWYgTk9UX1lFVAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSICYmICF3ZHMgJiYgaWVlZS0+YXAtPmJyaWRnZV9wYWNrZXRzKSB7CkBAIC04MTEsNyArODA5LDcgQEAKIAkJCSAqIGluIG91ciBzdGF0cy4gKi8KIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QCiAJCQkgICAgKCJSWDogbmV0aWZfcnggZHJvcHBlZCB0aGUgcGFja2V0XG4iKTsKLQkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIApAQCAtODIzLDcgKzgyMSw3IEBACiAJcmV0dXJuIDE7CiAKICAgICAgIHJ4X2Ryb3BwZWQ6Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAogCS8qIFJldHVybmluZyAwIGluZGljYXRlcyB0byBjYWxsZXIgdGhhdCB3ZSBoYXZlIG5vdCBoYW5kbGVkIHRoZSBTS0ItLQogCSAqIHNvIGl0IGlzIHN0aWxsIGFsbG9jYXRlZCBhbmQgY2FuIGJlIHVzZWQgYWdhaW4gYnkgdW5kZXJseWluZwpAQCAtOTE4LDcgKzkxNiw3IEBACiAKIGRyb3BfZnJlZToKIAlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCWllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwlpZWVlLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlyZXR1cm47CiB9CiAKQEAgLTEwNzksMzcgKzEwNzcsMzcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi0jZGVmaW5lIE1GSUVfU1RSSU5HKHgpIGNhc2UgTUZJRV9UWVBFXyAjI3g6IHJldHVybiAjeAorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKKyNkZWZpbmUgTUZJRV9TVFJJTkcoeCkgY2FzZSBXTEFOX0VJRF8gIyN4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdldF9pbmZvX2VsZW1lbnRfc3RyaW5nKHUxNiBpZCkKIHsKIAlzd2l0Y2ggKGlkKSB7CiAJCU1GSUVfU1RSSU5HKFNTSUQpOwotCQlNRklFX1NUUklORyhSQVRFUyk7Ci0JCU1GSUVfU1RSSU5HKEZIX1NFVCk7Ci0JCU1GSUVfU1RSSU5HKERTX1NFVCk7Ci0JCU1GSUVfU1RSSU5HKENGX1NFVCk7CisJCU1GSUVfU1RSSU5HKFNVUFBfUkFURVMpOworCQlNRklFX1NUUklORyhGSF9QQVJBTVMpOworCQlNRklFX1NUUklORyhEU19QQVJBTVMpOworCQlNRklFX1NUUklORyhDRl9QQVJBTVMpOwogCQlNRklFX1NUUklORyhUSU0pOwotCQlNRklFX1NUUklORyhJQlNTX1NFVCk7CisJCU1GSUVfU1RSSU5HKElCU1NfUEFSQU1TKTsKIAkJTUZJRV9TVFJJTkcoQ09VTlRSWSk7Ci0JCU1GSUVfU1RSSU5HKEhPUF9QQVJBTVMpOwotCQlNRklFX1NUUklORyhIT1BfVEFCTEUpOworCQlNRklFX1NUUklORyhIUF9QQVJBTVMpOworCQlNRklFX1NUUklORyhIUF9UQUJMRSk7CiAJCU1GSUVfU1RSSU5HKFJFUVVFU1QpOwogCQlNRklFX1NUUklORyhDSEFMTEVOR0UpOwotCQlNRklFX1NUUklORyhQT1dFUl9DT05TVFJBSU5UKTsKLQkJTUZJRV9TVFJJTkcoUE9XRVJfQ0FQQUJJTElUWSk7CisJCU1GSUVfU1RSSU5HKFBXUl9DT05TVFJBSU5UKTsKKwkJTUZJRV9TVFJJTkcoUFdSX0NBUEFCSUxJVFkpOwogCQlNRklFX1NUUklORyhUUENfUkVRVUVTVCk7CiAJCU1GSUVfU1RSSU5HKFRQQ19SRVBPUlQpOwotCQlNRklFX1NUUklORyhTVVBQX0NIQU5ORUxTKTsKLQkJTUZJRV9TVFJJTkcoQ1NBKTsKKwkJTUZJRV9TVFJJTkcoU1VQUE9SVEVEX0NIQU5ORUxTKTsKKwkJTUZJRV9TVFJJTkcoQ0hBTk5FTF9TV0lUQ0gpOwogCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUVVFU1QpOwogCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUE9SVCk7CiAJCU1GSUVfU1RSSU5HKFFVSUVUKTsKIAkJTUZJRV9TVFJJTkcoSUJTU19ERlMpOwogCQlNRklFX1NUUklORyhFUlBfSU5GTyk7CiAJCU1GSUVfU1RSSU5HKFJTTik7Ci0JCU1GSUVfU1RSSU5HKFJBVEVTX0VYKTsKKwkJTUZJRV9TVFJJTkcoRVhUX1NVUFBfUkFURVMpOwogCQlNRklFX1NUUklORyhHRU5FUklDKTsKIAkJTUZJRV9TVFJJTkcoUU9TX1BBUkFNRVRFUik7CiAJZGVmYXVsdDoKQEAgLTExMjQsNyArMTEyMiw3IEBACiB7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAl1OCBpOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJY2hhciByYXRlc19zdHJbNjRdOwogCWNoYXIgKnA7CiAjZW5kaWYKQEAgLTExNDQsNyArMTE0Miw3IEBACiAJCX0KIAogCQlzd2l0Y2ggKGluZm9fZWxlbWVudC0+aWQpIHsKLQkJY2FzZSBNRklFX1RZUEVfU1NJRDoKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgogCQkJbmV0d29yay0+c3NpZF9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4sCiAJCQkJCQkodTgpIElXX0VTU0lEX01BWF9TSVpFKTsKIAkJCW1lbWNweShuZXR3b3JrLT5zc2lkLCBpbmZvX2VsZW1lbnQtPmRhdGEsCkBAIC0xMTUzLDIxICsxMTUxLDIxIEBACiAJCQkJbWVtc2V0KG5ldHdvcmstPnNzaWQgKyBuZXR3b3JrLT5zc2lkX2xlbiwgMCwKIAkJCQkgICAgICAgSVdfRVNTSURfTUFYX1NJWkUgLSBuZXR3b3JrLT5zc2lkX2xlbik7CiAKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfU1NJRDogJyVzJyBsZW49JWQuXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX1NTSUQ6ICclcycgbGVuPSVkLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1JBVEVTOgotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKwkJY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCXAgPSByYXRlc19zdHI7CiAjZW5kaWYKIAkJCW5ldHdvcmstPnJhdGVzX2xlbiA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiwKIAkJCQkJCSBNQVhfUkFURVNfTEVOR1RIKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBuZXR3b3JrLT5yYXRlc19sZW47IGkrKykgewogCQkJCW5ldHdvcmstPnJhdGVzW2ldID0gaW5mb19lbGVtZW50LT5kYXRhW2ldOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCQkJcCArPSBzbnByaW50ZihwLCBzaXplb2YocmF0ZXNfc3RyKSAtCiAJCQkJCSAgICAgIChwIC0gcmF0ZXNfc3RyKSwgIiUwMlggIiwKIAkJCQkJICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOwpAQCAtMTE4MiwxOSArMTE4MCwxOSBAQAogCQkJCX0KIAkJCX0KIAotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SQVRFUzogJyVzJyAoJWQpXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9SQVRFU19FWDoKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisJCWNhc2UgV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6CisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCQkJcCA9IHJhdGVzX3N0cjsKICNlbmRpZgogCQkJbmV0d29yay0+cmF0ZXNfZXhfbGVuID0gbWluKGluZm9fZWxlbWVudC0+bGVuLAogCQkJCQkJICAgIE1BWF9SQVRFU19FWF9MRU5HVEgpOwogCQkJZm9yIChpID0gMDsgaSA8IG5ldHdvcmstPnJhdGVzX2V4X2xlbjsgaSsrKSB7CiAJCQkJbmV0d29yay0+cmF0ZXNfZXhbaV0gPSBpbmZvX2VsZW1lbnQtPmRhdGFbaV07Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCQlwICs9IHNucHJpbnRmKHAsIHNpemVvZihyYXRlc19zdHIpIC0KIAkJCQkJICAgICAgKHAgLSByYXRlc19zdHIpLCAiJTAyWCAiLAogCQkJCQkgICAgICBuZXR3b3JrLT5yYXRlc1tpXSk7CkBAIC0xMjA5LDQ5ICsxMjA3LDQ5IEBACiAJCQkJfQogCQkJfQogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX1JBVEVTX0VYOiAnJXMnICglZClcbiIsCisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2V4X2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9EU19TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0RTX1NFVDogJWRcbiIsCisJCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0RTX1BBUkFNUzogJWRcbiIsCiAJCQkJCSAgICAgaW5mb19lbGVtZW50LT5kYXRhWzBdKTsKIAkJCW5ldHdvcmstPmNoYW5uZWwgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9GSF9TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0ZIX1NFVDogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfRkhfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0ZIX1BBUkFNUzogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9DRl9TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0NGX1NFVDogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfQ0ZfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NGX1BBUkFNUzogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9USU06CisJCWNhc2UgV0xBTl9FSURfVElNOgogCQkJbmV0d29yay0+dGltLnRpbV9jb3VudCA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPnRpbS50aW1fcGVyaW9kID0gaW5mb19lbGVtZW50LT5kYXRhWzFdOwotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9USU06IHBhcnRpYWxseSBpZ25vcmVkXG4iKTsKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9USU06IHBhcnRpYWxseSBpZ25vcmVkXG4iKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0VSUF9JTkZPOgorCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgogCQkJbmV0d29yay0+ZXJwX3ZhbHVlID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfRVJQX1ZBTFVFOwogCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9FUlBfU0VUOiAlZFxuIiwKIAkJCQkJICAgICBuZXR3b3JrLT5lcnBfdmFsdWUpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfSUJTU19TRVQ6CisJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CiAJCQluZXR3b3JrLT5hdGltX3dpbmRvdyA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfSUJTU19TRVQ6ICVkXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0lCU1NfUEFSQU1TOiAlZFxuIiwKIAkJCQkJICAgICBuZXR3b3JrLT5hdGltX3dpbmRvdyk7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9DSEFMTEVOR0U6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfQ0hBTExFTkdFOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9HRU5FUklDOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9HRU5FUklDOiAlZCBieXRlc1xuIiwKKwkJY2FzZSBXTEFOX0VJRF9HRU5FUklDOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0dFTkVSSUM6ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCWlmICghaWVlZTgwMjExX3BhcnNlX3Fvc19pbmZvX3BhcmFtX0lFKGluZm9fZWxlbWVudCwKIAkJCQkJCQkgICAgICAgbmV0d29yaykpCkBAIC0xMjY5LDggKzEyNjcsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUlNOOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SU046ICVkIGJ5dGVzXG4iLAorCQljYXNlIFdMQU5fRUlEX1JTTjoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9SU046ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCW5ldHdvcmstPnJzbl9pZV9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4gKyAyLAogCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7CkBAIC0xMjc4LDIyICsxMjc2LDIyIEBACiAJCQkgICAgICAgbmV0d29yay0+cnNuX2llX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9RT1NfUEFSQU1FVEVSOgorCQljYXNlIFdMQU5fRUlEX1FPU19QQVJBTUVURVI6CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiUW9TIEVycm9yIG5lZWQgdG8gcGFyc2UgUU9TX1BBUkFNRVRFUiBJRVxuIik7CiAJCQlicmVhazsKIAkJCS8qIDgwMi4xMWggKi8KLQkJY2FzZSBNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVDoKKwkJY2FzZSBXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVDoKIAkJCW5ldHdvcmstPnBvd2VyX2NvbnN0cmFpbnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19QT1dFUl9DT05TVFJBSU5UOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ1NBOgorCQljYXNlIFdMQU5fRUlEX0NIQU5ORUxfU1dJVENIOgogCQkJbmV0d29yay0+cG93ZXJfY29uc3RyYWludCA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX0NTQTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1FVSUVUOgorCQljYXNlIFdMQU5fRUlEX1FVSUVUOgogCQkJbmV0d29yay0+cXVpZXQuY291bnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5xdWlldC5wZXJpb2QgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CiAJCQluZXR3b3JrLT5xdWlldC5kdXJhdGlvbiA9IGluZm9fZWxlbWVudC0+ZGF0YVsyXTsKQEAgLTEzMDEsNyArMTI5OSw3IEBACiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19RVUlFVDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0lCU1NfREZTOgorCQljYXNlIFdMQU5fRUlEX0lCU1NfREZTOgogCQkJaWYgKG5ldHdvcmstPmlic3NfZGZzKQogCQkJCWJyZWFrOwogCQkJbmV0d29yay0+aWJzc19kZnMgPSBrbWVtZHVwKGluZm9fZWxlbWVudC0+ZGF0YSwKQEAgLTEzMTIsNyArMTMxMCw3IEBACiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19JQlNTX0RGUzsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1RQQ19SRVBPUlQ6CisJCWNhc2UgV0xBTl9FSURfVFBDX1JFUE9SVDoKIAkJCW5ldHdvcmstPnRwY19yZXBvcnQudHJhbnNtaXRfcG93ZXIgPQogCQkJICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPnRwY19yZXBvcnQubGlua19tYXJnaW4gPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CkBAIC0xNTYxLDcgKzE1NTksNyBAQAogCX07CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICp0YXJnZXQ7CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpvbGRlc3QgPSBOVUxMOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmluZm9fZWxlbWVudCA9IGJlYWNvbi0+aW5mb19lbGVtZW50OwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2MTUsNyArMTYxMyw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoKG9sZGVzdCA9PSBOVUxMKSB8fAotCQkgICAgKHRhcmdldC0+bGFzdF9zY2FubmVkIDwgb2xkZXN0LT5sYXN0X3NjYW5uZWQpKQorCQkgICAgdGltZV9iZWZvcmUodGFyZ2V0LT5sYXN0X3NjYW5uZWQsIG9sZGVzdC0+bGFzdF9zY2FubmVkKSkKIAkJCW9sZGVzdCA9IHRhcmdldDsKIAl9CiAKQEAgLTE2MzksNyArMTYzNyw3IEBACiAJCQlsaXN0X2RlbChpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0KTsKIAkJfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmsuc3NpZCwKIAkJCQkJCSBuZXR3b3JrLnNzaWRfbGVuKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCmluZGV4IGY3OGY1N2UuLjY1YTgxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKIAogLyoKIApAQCAtMjYwLDcgKzI2MCw2IEBACiAJaW50IGksIGJ5dGVzX3Blcl9mcmFnLCBucl9mcmFncywgYnl0ZXNfbGFzdF9mcmFnLCBmcmFnX3NpemUsCiAJICAgIHJ0c19yZXF1aXJlZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZpZWVlLT5zdGF0czsKIAlpbnQgZW5jcnlwdCwgaG9zdF9lbmNyeXB0LCBob3N0X2VuY3J5cHRfbXNkdSwgaG9zdF9idWlsZF9pdjsKIAlfX2JlMTYgZXRoZXJfdHlwZTsKIAlpbnQgYnl0ZXMsIGZjLCBoZHJfbGVuOwpAQCAtMzA2LDcgKzMwNSw3IEBACiAKIAlpZiAoIWVuY3J5cHQgJiYgaWVlZS0+aWVlZTgwMl8xeCAmJgogCSAgICBpZWVlLT5kcm9wX3VuZW5jcnlwdGVkICYmIGV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfUEFFKSkgewotCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZ290byBzdWNjZXNzOwogCX0KIApAQCAtNTI2LDggKzUyNSw4IEBACiAJaWYgKHR4YikgewogCQlpbnQgcmV0ID0gKCppZWVlLT5oYXJkX3N0YXJ0X3htaXQpICh0eGIsIGRldiwgcHJpb3JpdHkpOwogCQlpZiAocmV0ID09IDApIHsKLQkJCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JCQlzdGF0cy0+dHhfYnl0ZXMgKz0gdHhiLT5wYXlsb2FkX3NpemU7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gdHhiLT5wYXlsb2FkX3NpemU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC01MzksOCArNTM4LDkgQEAKICAgICAgIGZhaWxlZDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXN0YXRzLT50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfeG1pdCk7CiAKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4Yl9mcmVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCmluZGV4IDMxZWEzYWIuLjNjMDgxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwpAQCAtMzUsMTMgKzM1LDI0IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKwogc3RhdGljIGNvbnN0IGNoYXIgKmllZWU4MDIxMV9tb2Rlc1tdID0gewogCSI/IiwgImEiLCAiYiIsICJhYiIsICJnIiwgImFnIiwgImJnIiwgImFiZyIKIH07CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGVsYXBzZWRfamlmZmllc19tc2Vjcyh1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllczsKKworCWlmIChlbmQgPj0gc3RhcnQpCisJCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCAtIHN0YXJ0KTsKKworCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCArIChNQVhfSklGRllfT0ZGU0VUIC0gc3RhcnQpICsgMSk7Cit9CisKICNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkJICAgICAgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsCkBAIC0yMTUsOCArMjI2LDggQEAKIAlpd2UuY21kID0gSVdFVkNVU1RPTTsKIAlwID0gY3VzdG9tOwogCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4gLSAocCAtIGN1c3RvbSksCi0JCSAgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJICAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSk7CisJCSAgICAgICIgTGFzdCBiZWFjb246ICV1bXMgYWdvIiwKKwkJICAgICAgZWxhcHNlZF9qaWZmaWVzX21zZWNzKG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkpOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKIAlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCiAJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7CkBAIC0yNzYsMTUgKzI4NywxNSBAQAogCQkgICAgdGltZV9hZnRlcihuZXR3b3JrLT5sYXN0X3NjYW5uZWQgKyBpZWVlLT5zY2FuX2FnZSwgamlmZmllcykpCiAJCQlldiA9IGllZWU4MDIxMV90cmFuc2xhdGVfc2NhbihpZWVlLCBldiwgc3RvcCwgbmV0d29yaywKIAkJCQkJCSAgICAgIGluZm8pOwotCQllbHNlCisJCWVsc2UgewogCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCi0JCQkJCSAgICAgIiVwTSknIGR1ZSB0byBhZ2UgKCVkbXMpLlxuIiwKKwkJCQkJICAgICAiJXBNKScgZHVlIHRvIGFnZSAoJXVtcykuXG4iLAogCQkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgbmV0d29yay0+c3NpZCwKIAkJCQkJCQkgbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPmJzc2lkLAotCQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCi0JCQkJCQkJICAgICAgbmV0d29yay0+Ci0JCQkJCQkJICAgICAgbGFzdF9zY2FubmVkKSk7CisJCQkJCSAgICAgZWxhcHNlZF9qaWZmaWVzX21zZWNzKAorCQkJCQkgICAgICAgICAgICAgICBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpKTsKKwkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwppbmRleCA0N2JlZTBlLi44MzA0ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCkBAIC0xLDI2ICsxLDI5IEBACiBjb25maWcgSVdMV0lGSQotCXRyaXN0YXRlCi0KLWNvbmZpZyBJV0xDT1JFCi0JdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpZmkgQ29yZSIKKwl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lmaSIKIAlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBMSUI4MDIxMQotCXNlbGVjdCBJV0xXSUZJCisJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIElXTFdJRklfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTIGlmIElXTFdJRklfTEVEUwogCXNlbGVjdCBSRktJTEwgaWYgSVdMV0lGSV9SRktJTEwKIAogY29uZmlnIElXTFdJRklfTEVEUwotCWJvb2wKLQlkZWZhdWx0IG4KKwlib29sICJFbmFibGUgTEVEIHN1cHBvcnQgaW4gaXdsYWduIGFuZCBpd2wzOTQ1IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBJV0xXSUZJCiAKIGNvbmZpZyBJV0xXSUZJX1JGS0lMTAotCWJvb2xlYW4gIkl3bHdpZmkgUkYga2lsbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVdMQ09SRQorCWJvb2wgIkVuYWJsZSBSRiBraWxsIHN1cHBvcnQgaW4gaXdsYWduIGFuZCBpd2wzOTQ1IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBJV0xXSUZJCisKK2NvbmZpZyBJV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCisJYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bGFnbiBkcml2ZXIiCisJZGVwZW5kcyBvbiBJV0xXSUZJCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2xhZ24gZHJpdmVyLgogCiBjb25maWcgSVdMV0lGSV9ERUJVRwotCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gaXdsYWduIGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTENPUkUKKwlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bGFnbiBhbmQgaXdsMzk0NSBkcml2ZXJzIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciB0aGUgaXdsd2lmaSBkcml2ZXJzCiAKQEAgLTQ0LDE2ICs0NywxNCBAQAogCSAgYW55IHByb2JsZW1zIHlvdSBtYXkgZW5jb3VudGVyLgogCiBjb25maWcgSVdMV0lGSV9ERUJVR0ZTCi0gICAgICAgIGJvb2wgIkl3bHdpZmkgZGVidWdmcyBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIElXTENPUkUgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCisgICAgICAgIGJvb2wgIml3bGFnbiBkZWJ1Z2ZzIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gSVdMV0lGSSAmJiBJV0xXSUZJX0RFQlVHICYmIE1BQzgwMjExX0RFQlVHRlMKICAgICAgICAgLS0taGVscC0tLQogCSAgRW5hYmxlIGNyZWF0aW9uIG9mIGRlYnVnZnMgZmlsZXMgZm9yIHRoZSBpd2x3aWZpIGRyaXZlcnMuCiAKIGNvbmZpZyBJV0xBR04KLQl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04iCi0JZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IElXTENPUkUKKwl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04gKGl3bGFnbikiCisJZGVwZW5kcyBvbiBJV0xXSUZJCiAJLS0taGVscC0tLQogCSAgU2VsZWN0IHRvIGJ1aWxkIHRoZSBkcml2ZXIgc3VwcG9ydGluZyB0aGU6CiAKQEAgLTc2LDE5ICs3Nyw2IEBACiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bGFnbi5rby4KIAotY29uZmlnIElXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2xhZ24gZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMQUdOCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2xhZ24gZHJpdmVyLgotCi1jb25maWcgSVdMQUdOX0xFRFMKLQlib29sICJFbmFibGUgTEVEUyBmZWF0dXJlcyBpbiBpd2xhZ24gZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMQUdOCi0Jc2VsZWN0IElXTFdJRklfTEVEUwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgTEVEUyBmb3IgdGhlIGl3bGFnbiBkcml2ZXJzCi0KIAogY29uZmlnIElXTDQ5NjUKIAlib29sICJJbnRlbCBXaXJlbGVzcyBXaUZpIDQ5NjVBR04iCkBAIC05NywyMCArODUsMTQgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rIDQ5NjVBR04KIAogY29uZmlnIElXTDUwMDAKLQlib29sICJJbnRlbCBXaXJlbGVzcyBXaUZpIDUwMDBBR04iCisJYm9vbCAiSW50ZWwgV2lyZWxlc3MgV2lGaSA1MDAwQUdOOyBJbnRlbCBXaUZpIExpbmsgMTAwMCwgNjAwMCwgYW5kIDYwNTAgU2VyaWVzIgogCWRlcGVuZHMgb24gSVdMQUdOCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNTAwMEFHTiBGYW1pbHkKIAogY29uZmlnIElXTDM5NDUKLQl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDM5NDVBQkcvQkcgTmV0d29yayBDb25uZWN0aW9uIgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBMSUI4MDIxMQotCXNlbGVjdCBJV0xXSUZJCi0Jc2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgSVdMMzk0NV9MRURTCi0Jc2VsZWN0IExFRFNfQ0xBU1MgaWYgSVdMMzk0NV9MRURTCi0Jc2VsZWN0IFJGS0lMTCBpZiBJV0wzOTQ1X1JGS0lMTAorCXRyaXN0YXRlICJJbnRlbCBQUk8vV2lyZWxlc3MgMzk0NUFCRy9CRyBOZXR3b3JrIENvbm5lY3Rpb24gKGl3bDM5NDUpIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0byBidWlsZCB0aGUgZHJpdmVyIHN1cHBvcnRpbmcgdGhlOgogCkBAIC0xMzMsNDUgKzExNSw4IEBACiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bDM5NDUua28uCiAKLWNvbmZpZyBJV0wzOTQ1X1JGS0lMTAotCWJvb2wgIkVuYWJsZSBSRiBraWxsIHN1cHBvcnQgaW4gaXdsMzk0NSBkcml2ZXJzIgotCWRlcGVuZHMgb24gSVdMMzk0NQotCiBjb25maWcgSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2wzOTQ1IGRyaXZlcnMiCisJYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bDM5NDUgZHJpdmVyIgogCWRlcGVuZHMgb24gSVdMMzk0NQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHNwZWN0cnVtIG1lYXN1cmVtZW50IGZvciB0aGUgaXdsMzk0NSBkcml2ZXIuCi0KLWNvbmZpZyBJV0wzOTQ1X0xFRFMKLQlib29sICJFbmFibGUgTEVEUyBmZWF0dXJlcyBpbiBpd2wzOTQ1IGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTDM5NDUKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIExFRFMgZm9yIHRoZSBpd2wzOTQ1IGRyaXZlci4KLQotY29uZmlnIElXTDM5NDVfREVCVUcKLQlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bDM5NDUgZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMMzk0NQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciB0aGUgaXdsMzk0NQotCSAgZHJpdmVyLgotCi0JICBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBrZXJuZWwgbW9kdWxlIGJlaW5nIH4xMDBrIGxhcmdlci4gIFlvdSBjYW4KLQkgIGNvbnRyb2wgd2hpY2ggZGVidWcgb3V0cHV0IGlzIHNlbnQgdG8gdGhlIGtlcm5lbCBsb2cgYnkgc2V0dGluZyB0aGUKLQkgIHZhbHVlIGluCi0KLQkgICAgICAgICAgL3N5cy9idXMvcGNpL2RyaXZlcnMvJHtEUklWRVJ9L2RlYnVnX2xldmVsCi0KLQkgIFRoaXMgZW50cnkgd2lsbCBvbmx5IGV4aXN0IGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuCi0KLQkgIFRvIHNldCBhIHZhbHVlLCBzaW1wbHkgZWNobyBhbiA4LWJ5dGUgaGV4IHZhbHVlIHRvIHRoZSBzYW1lIGZpbGU6Ci0KLQkJICAlIGVjaG8gMHg0M2ZmZiA+IC9zeXMvYnVzL3BjaS9kcml2ZXJzLyR7RFJJVkVSfS9kZWJ1Z19sZXZlbAotCi0JICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgZGVidWcgbWFzayB2YWx1ZXMgaW46Ci0JCSAgZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Zy5oCi0KLQkgIElmIHRoaXMgaXMgeW91ciBmaXJzdCB0aW1lIHVzaW5nIHRoaXMgZHJpdmVyLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUKLQkgIGFzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYXNzaXN0IG90aGVycyBpbiBoZWxwaW5nIHlvdSByZXNvbHZlCi0JICBhbnkgcHJvYmxlbXMgeW91IG1heSBlbmNvdW50ZXIuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCmluZGV4IDBiZTllNmIuLmQ3OWQ5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQpAQCAtMSwyMCArMSwyMSBAQAotb2JqLSQoQ09ORklHX0lXTENPUkUpCSs9IGl3bGNvcmUubworb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bGNvcmUubwogaXdsY29yZS1vYmpzIAkJOj0gaXdsLWNvcmUubyBpd2wtZWVwcm9tLm8gaXdsLWhjbWQubyBpd2wtcG93ZXIubwogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXJ4Lm8gaXdsLXR4Lm8gaXdsLXN0YS5vIGl3bC1jYWxpYi5vCiBpd2xjb3JlLW9ianMgCQkrPSBpd2wtc2Nhbi5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWRlYnVnZnMubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0xFRFMpICs9IGl3bC1sZWQubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX1JGS0lMTCkgKz0gaXdsLXJma2lsbC5vCi1pd2xjb3JlLSQoQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KK2l3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KIAogb2JqLSQoQ09ORklHX0lXTEFHTikJKz0gaXdsYWduLm8KLWl3bGFnbi1vYmpzCQk6PSBpd2wtYWduLm8gaXdsLWFnbi1ycy5vIGl3bC1hZ24taGNtZC1jaGVjay5vCitpd2xhZ24tb2JqcwkJOj0gaXdsLWFnbi5vIGl3bC1hZ24tcnMubwogCiBpd2xhZ24tJChDT05GSUdfSVdMNDk2NSkgKz0gaXdsLTQ5NjUubwogaXdsYWduLSQoQ09ORklHX0lXTDUwMDApICs9IGl3bC01MDAwLm8KK2l3bGFnbi0kKENPTkZJR19JV0w1MDAwKSArPSBpd2wtNjAwMC5vCitpd2xhZ24tJChDT05GSUdfSVdMNTAwMCkgKz0gaXdsLTEwMDAubwogCiBvYmotJChDT05GSUdfSVdMMzk0NSkJKz0gaXdsMzk0NS5vCi1pd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubwotaXdsMzk0NS0kKENPTkZJR19JV0wzOTQ1X0xFRFMpICs9IGl3bC0zOTQ1LWxlZC5vCitpd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubyBpd2wtMzk0NS1sZWQubwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE1MmYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgIml3bC1lZXByb20uaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKKyNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgorCisvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NQVggMgorCisvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCisjZGVmaW5lIElXTDEwMDBfVUNPREVfQVBJX01JTiAxCisKKyNkZWZpbmUgSVdMMTAwMF9GV19QUkUgIml3bHdpZmktMTAwMC0iCisjZGVmaW5lIF9JV0wxMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDEwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKKyNkZWZpbmUgSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmcgPSB7CisJLm5hbWUgPSAiMTAwMCBTZXJpZXMgQkdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0wxMDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDEwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDEwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDUwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAorCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmY0ZWI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29tbWFuZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCi0gKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCi0gKgotICogR1BMIExJQ0VOU0UgU1VNTUFSWQotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAotICogVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqIEJTRCBMSUNFTlNFCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogUGxlYXNlIHVzZSB0aGlzIGZpbGUgKGl3bC0zOTQ1LWNvbW1hbmRzLmgpIG9ubHkgZm9yIHVDb2RlIEFQSSBkZWZpbml0aW9ucy4KLSAqIFBsZWFzZSB1c2UgaXdsLTM5NDUtaHcuaCBmb3IgaGFyZHdhcmUtcmVsYXRlZCBkZWZpbml0aW9ucy4KLSAqIFBsZWFzZSB1c2UgaXdsLTM5NDUuaCBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgotICovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9jb21tYW5kc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9jb21tYW5kc19oX18KLQotLyogdUNvZGUgdmVyc2lvbiBjb250YWlucyA0IHZhbHVlczogTWFqb3IvTWlub3IvQVBJL1NlcmlhbCAqLwotI2RlZmluZSBJV0xfVUNPREVfTUFKT1IodmVyKQkoKCh2ZXIpICYgMHhGRjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIElXTF9VQ09ERV9NSU5PUih2ZXIpCSgoKHZlcikgJiAweDAwRkYwMDAwKSA+PiAxNikKLSNkZWZpbmUgSVdMX1VDT0RFX0FQSSh2ZXIpCSgoKHZlcikgJiAweDAwMDBGRjAwKSA+PiA4KQotI2RlZmluZSBJV0xfVUNPREVfU0VSSUFMKHZlcikJKCh2ZXIpICYgMHgwMDAwMDBGRikKLQotZW51bSB7Ci0JUkVQTFlfQUxJVkUgPSAweDEsCi0JUkVQTFlfRVJST1IgPSAweDIsCi0KLQkvKiBSWE9OIGFuZCBRT1MgY29tbWFuZHMgKi8KLQlSRVBMWV9SWE9OID0gMHgxMCwKLQlSRVBMWV9SWE9OX0FTU09DID0gMHgxMSwKLQlSRVBMWV9RT1NfUEFSQU0gPSAweDEzLAotCVJFUExZX1JYT05fVElNSU5HID0gMHgxNCwKLQotCS8qIE11bHRpLVN0YXRpb24gc3VwcG9ydCAqLwotCVJFUExZX0FERF9TVEEgPSAweDE4LAotCVJFUExZX1JFTU9WRV9TVEEgPSAweDE5LAkvKiBub3QgdXNlZCAqLwotCVJFUExZX1JFTU9WRV9BTExfU1RBID0gMHgxYSwJLyogbm90IHVzZWQgKi8KLQotCS8qIFJYLCBUWCwgTEVEcyAqLwotCVJFUExZXzM5NDVfUlggPSAweDFiLAkJLyogMzk0NSBvbmx5ICovCi0JUkVQTFlfVFggPSAweDFjLAotCVJFUExZX1JBVEVfU0NBTEUgPSAweDQ3LAkvKiAzOTQ1IG9ubHkgKi8KLQlSRVBMWV9MRURTX0NNRCA9IDB4NDgsCi0JUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCA9IDB4NGUsIC8qIDQ5NjUgb25seSAqLwotCi0JLyogODAyLjExaCByZWxhdGVkICovCi0JUkFEQVJfTk9USUZJQ0FUSU9OID0gMHg3MCwJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9RVUlFVF9DTUQgPSAweDcxLAkJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9DSEFOTkVMX1NXSVRDSCA9IDB4NzIsCi0JQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OID0gMHg3MywKLQlSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQgPSAweDc0LAotCVNQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OID0gMHg3NSwKLQotCS8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KLQlQT1dFUl9UQUJMRV9DTUQgPSAweDc3LAotCVBNX1NMRUVQX05PVElGSUNBVElPTiA9IDB4N0EsCi0JUE1fREVCVUdfU1RBVElTVElDX05PVElGSUMgPSAweDdCLAotCi0JLyogU2NhbiBjb21tYW5kcyBhbmQgbm90aWZpY2F0aW9ucyAqLwotCVJFUExZX1NDQU5fQ01EID0gMHg4MCwKLQlSRVBMWV9TQ0FOX0FCT1JUX0NNRCA9IDB4ODEsCi0JU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gPSAweDgyLAotCVNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04gPSAweDgzLAotCVNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gMHg4NCwKLQotCS8qIElCU1MvQVAgY29tbWFuZHMgKi8KLQlCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCwKLQlSRVBMWV9UWF9CRUFDT04gPSAweDkxLAotCVdIT19JU19BV0FLRV9OT1RJRklDQVRJT04gPSAweDk0LAkvKiBub3QgdXNlZCAqLwotCi0JLyogTWlzY2VsbGFuZW91cyBjb21tYW5kcyAqLwotCVFVSUVUX05PVElGSUNBVElPTiA9IDB4OTYsCQkvKiBub3QgdXNlZCAqLwotCVJFUExZX1RYX1BXUl9UQUJMRV9DTUQgPSAweDk3LAotCU1FQVNVUkVfQUJPUlRfTk9USUZJQ0FUSU9OID0gMHg5OSwJLyogbm90IHVzZWQgKi8KLQotCS8qIEJsdWV0b290aCBkZXZpY2UgY29leGlzdGVuY2UgY29uZmlnIGNvbW1hbmQgKi8KLQlSRVBMWV9CVF9DT05GSUcgPSAweDliLAotCi0JLyogU3RhdGlzdGljcyAqLwotCVJFUExZX1NUQVRJU1RJQ1NfQ01EID0gMHg5YywKLQlTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQsCi0KLQkvKiBSRi1LSUxMIGNvbW1hbmRzIGFuZCBub3RpZmljYXRpb25zICovCi0JUkVQTFlfQ0FSRF9TVEFURV9DTUQgPSAweGEwLAotCUNBUkRfU1RBVEVfTk9USUZJQ0FUSU9OID0gMHhhMSwKLQotCS8qIE1pc3NlZCBiZWFjb25zIG5vdGlmaWNhdGlvbiAqLwotCU1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTiA9IDB4YTIsCi0KLQlSRVBMWV9NQVggPSAweGZmCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMCkKLSAqIENvbW1vbmx5IHVzZWQgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnM6Ci0gKiBDb21tYW5kIGhlYWRlciwgdHhwb3dlcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogaXdsMzk0NV9jbWRfaGVhZGVyIGZsYWdzIHZhbHVlICovCi0jZGVmaW5lIElXTF9DTURfRkFJTEVEX01TSyAweDQwCi0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfY21kX2hlYWRlcgotICoKLSAqIFRoaXMgaGVhZGVyIGZvcm1hdCBhcHBlYXJzIGluIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBjb21tYW5kIHNlbnQgZnJvbSB0aGUKLSAqIGRyaXZlciwgYW5kIGVhY2ggcmVzcG9uc2Uvbm90aWZpY2F0aW9uIHJlY2VpdmVkIGZyb20gdUNvZGUuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgewotCXU4IGNtZDsJCS8qIENvbW1hbmQgSUQ6ICBSRVBMWV9SWE9OLCBldGMuICovCi0JdTggZmxhZ3M7CS8qIElXTF9DTURfKiAqLwotCS8qCi0JICogVGhlIGRyaXZlciBzZXRzIHVwIHRoZSBzZXF1ZW5jZSBudW1iZXIgdG8gdmFsdWVzIG9mIGl0cyBjaG9vc2luZy4KLQkgKiB1Q29kZSBkb2VzIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYnV0IHBhc3NlcyBpdCBiYWNrIHRvIHRoZSBkcml2ZXIKLQkgKiB3aGVuIHNlbmRpbmcgdGhlIHJlc3BvbnNlIHRvIGVhY2ggZHJpdmVyLW9yaWdpbmF0ZWQgY29tbWFuZCwgc28KLQkgKiB0aGUgZHJpdmVyIGNhbiBtYXRjaCB0aGUgcmVzcG9uc2UgdG8gdGhlIGNvbW1hbmQuICBTaW5jZSB0aGUgdmFsdWVzCi0JICogZG9uJ3QgZ2V0IHVzZWQgYnkgdUNvZGUsIHRoZSBkcml2ZXIgbWF5IHNldCB1cCBhbiBhcmJpdHJhcnkgZm9ybWF0LgotCSAqCi0JICogVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogIHVDb2RlIHNldHMgYml0IDE1IHdoZW4gaXQgb3JpZ2luYXRlcwotCSAqIHRoZSByZXNwb25zZS9ub3RpZmljYXRpb24sIGkuZS4gd2hlbiB0aGUgcmVzcG9uc2Uvbm90aWZpY2F0aW9uCi0JICogaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGEgY29tbWFuZCBzZW50IGJ5IHRoZSBkcml2ZXIuICBGb3IKLQkgKiBleGFtcGxlLCB1Q29kZSBpc3N1ZXMgUkVQTFlfMzk0NV9SWCB3aGVuIGl0IHNlbmRzIGEgcmVjZWl2ZWQgZnJhbWUKLQkgKiB0byB0aGUgZHJpdmVyOyBpdCBpcyBub3QgYSBkaXJlY3QgcmVzcG9uc2UgdG8gYW55IGRyaXZlciBjb21tYW5kLgotCSAqCi0JICogVGhlIExpbnV4IGRyaXZlciB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotCSAqCi0JICogIDA6NyAgICBpbmRleC9wb3NpdGlvbiB3aXRoaW4gVHggcXVldWUKLQkgKiAgODoxMyAgIFR4IHF1ZXVlIHNlbGVjdGlvbgotCSAqIDE0OjE0ICAgZHJpdmVyIHNldHMgdGhpcyB0byBpbmRpY2F0ZSBjb21tYW5kIGlzIGluIHRoZSAnaHVnZScKLQkgKiAgICAgICAgIHN0b3JhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBidWZmZXJzLCBpLmUuIHNjYW4gY21kCi0JICogMTU6MTUgICB1Q29kZSBzZXRzIHRoaXMgaW4gdUNvZGUtb3JpZ2luYXRlZCByZXNwb25zZS9ub3RpZmljYXRpb24KLQkgKi8KLQlfX2xlMTYgc2VxdWVuY2U7Ci0KLQkvKiBjb21tYW5kIG9yIHJlc3BvbnNlL25vdGlmaWNhdGlvbiBkYXRhIGZvbGxvd3MgaW1tZWRpYXRlbHkgKi8KLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICoKLSAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKLSAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAotICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAotICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCi0gKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCi0gKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgotICoKLSAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7Ci0JdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLwotCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKLQl1OCByYXRlOwkJLyogcGxjcCAqLwotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKLQl1OCByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMGEpCi0gKiBBbGl2ZSBhbmQgRXJyb3IgQ29tbWFuZHMgJiBSZXNwb25zZXM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFVDT0RFX1ZBTElEX09LCWNwdV90b19sZTMyKDB4MSkKLSNkZWZpbmUgSU5JVElBTElaRV9TVUJUWVBFICAgICg5KQotCi0vKgotICogKCJJbml0aWFsaXplIikgUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbiBvbmNlIHRoZSBpbml0aWFsaXphdGlvbgotICogdUNvZGUgaW1hZ2UgaGFzIGNvbXBsZXRlZCBpdHMgd29yaywgYW5kIGlzIHJlYWR5IHRvIGxvYWQgdGhlIHJ1bnRpbWUgaW1hZ2UuCi0gKiBUaGlzIGlzIHRoZSAqZmlyc3QqICJhbGl2ZSIgbm90aWZpY2F0aW9uIHRoYXQgdGhlIGRyaXZlciB3aWxsIHJlY2VpdmUgYWZ0ZXIKLSAqIHJlYm9vdGluZyB1Q29kZTsgdGhlICJpbml0aWFsaXplIiBhbGl2ZSBpcyBpbmRpY2F0ZWQgYnkgc3VidHlwZSBmaWVsZCA9PSA5LgotICoKLSAqIFNlZSBjb21tZW50cyBkb2N1bWVudGluZyAiQlNNIiAoYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUpLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3AgewotCXU4IHVjb2RlX21pbm9yOwotCXU4IHVjb2RlX21ham9yOwotCV9fbGUxNiByZXNlcnZlZDE7Ci0JdTggc3dfcmV2WzhdOwotCXU4IHZlcl90eXBlOwotCXU4IHZlcl9zdWJ0eXBlOwkJCS8qICI5IiBmb3IgaW5pdGlhbGl6ZSBhbGl2ZSAqLwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JX19sZTMyIGxvZ19ldmVudF90YWJsZV9wdHI7Ci0JX19sZTMyIGVycm9yX2V2ZW50X3RhYmxlX3B0cjsKLQlfX2xlMzIgdGltZXN0YW1wOwotCV9fbGUzMiBpc192YWxpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qKgotICogUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImFsaXZlIiBub3RpZmljYXRpb24gb25jZSB0aGUgcnVudGltZSBpbWFnZSBpcyByZWFkeQotICogdG8gcmVjZWl2ZSBjb21tYW5kcyBmcm9tIHRoZSBkcml2ZXIuICBUaGlzIGlzIHRoZSAqc2Vjb25kKiAiYWxpdmUiCi0gKiBub3RpZmljYXRpb24gdGhhdCB0aGUgZHJpdmVyIHdpbGwgcmVjZWl2ZSBhZnRlciByZWJvb3RpbmcgdUNvZGU7Ci0gKiB0aGlzICJhbGl2ZSIgaXMgaW5kaWNhdGVkIGJ5IHN1YnR5cGUgZmllbGQgIT0gOS4KLSAqCi0gKiBTZWUgY29tbWVudHMgZG9jdW1lbnRpbmcgIkJTTSIgKGJvb3RzdHJhcCBzdGF0ZSBtYWNoaW5lKS4KLSAqCi0gKiBUaGlzIHJlc3BvbnNlIGluY2x1ZGVzIHR3byBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgZGV2aWNlJ3MKLSAqIGRhdGEgU1JBTSAoYWNjZXNzIHZpYSBIQlVTX1RBUkdfTUVNXyogcmVncykgdGhhdCBhcmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmc6Ci0gKgotICogMSkgIGxvZ19ldmVudF90YWJsZV9wdHIgaW5kaWNhdGVzIGJhc2Ugb2YgdGhlIGV2ZW50IGxvZy4gIFRoaXMgdHJhY2VzCi0gKiAgICAgYSAyNTYtZW50cnkgaGlzdG9yeSBvZiB1Q29kZSBleGVjdXRpb24gd2l0aGluIGEgY2lyY3VsYXIgYnVmZmVyLgotICoKLSAqIDIpICBlcnJvcl9ldmVudF90YWJsZV9wdHIgaW5kaWNhdGVzIGJhc2Ugb2YgdGhlIGVycm9yIGxvZy4gIFRoaXMgY29udGFpbnMKLSAqICAgICBpbmZvcm1hdGlvbiBhYm91dCBhbnkgdUNvZGUgZXJyb3IgdGhhdCBvY2N1cnMuCi0gKgotICogVGhlIExpbnV4IGRyaXZlciBjYW4gcHJpbnQgYm90aCBsb2dzIHRvIHRoZSBzeXN0ZW0gbG9nIHdoZW4gYSB1Q29kZSBlcnJvcgotICogb2NjdXJzLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9hbGl2ZV9yZXNwIHsKLQl1OCB1Y29kZV9taW5vcjsKLQl1OCB1Y29kZV9tYWpvcjsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN3X3Jldls4XTsKLQl1OCB2ZXJfdHlwZTsKLQl1OCB2ZXJfc3VidHlwZTsJCQkvKiBub3QgIjkiIGZvciBydW50aW1lIGFsaXZlICovCi0JX19sZTE2IHJlc2VydmVkMjsKLQlfX2xlMzIgbG9nX2V2ZW50X3RhYmxlX3B0cjsJLyogU1JBTSBhZGRyZXNzIGZvciBldmVudCBsb2cgKi8KLQlfX2xlMzIgZXJyb3JfZXZlbnRfdGFibGVfcHRyOwkvKiBTUkFNIGFkZHJlc3MgZm9yIGVycm9yIGxvZyAqLwotCV9fbGUzMiB0aW1lc3RhbXA7Ci0JX19sZTMyIGlzX3ZhbGlkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXVuaW9uIHRzZiB7Ci0JdTggYnl0ZVs4XTsKLQlfX2xlMTYgd29yZFs0XTsKLQlfX2xlMzIgZHdbMl07Ci19OwotCi0vKgotICogUkVQTFlfRVJST1IgPSAweDIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2Vycm9yX3Jlc3AgewotCV9fbGUzMiBlcnJvcl90eXBlOwotCXU4IGNtZF9pZDsKLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IGJhZF9jbWRfc2VxX251bTsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotCV9fbGUzMiBlcnJvcl9pbmZvOwotCXVuaW9uIHRzZiB0aW1lc3RhbXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEpCi0gKiBSWE9OIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJ4IGNvbmZpZyBkZWZpbmVzICYgc3RydWN0dXJlCi0gKi8KLS8qIHJ4X2NvbmZpZyBkZXZpY2UgdHlwZXMgICovCi1lbnVtIHsKLQlSWE9OX0RFVl9UWVBFX0FQID0gMSwKLQlSWE9OX0RFVl9UWVBFX0VTUyA9IDMsCi0JUlhPTl9ERVZfVFlQRV9JQlNTID0gNCwKLQlSWE9OX0RFVl9UWVBFX1NOSUZGRVIgPSA2LAotfTsKLQotLyogcnhfY29uZmlnIGZsYWdzICovCi0vKiBiYW5kICYgbW9kdWxhdGlvbiBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgUlhPTl9GTEdfQkFORF8yNEdfTVNLICAgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDApCi0jZGVmaW5lIFJYT05fRkxHX0NDS19NU0sgICAgICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAxKQotLyogYXV0byBkZXRlY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lIFJYT05fRkxHX0FVVE9fREVURUNUX01TSyAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAyKQotLyogVEdnIHByb3RlY3Rpb24gd2hlbiB0eCAqLwotI2RlZmluZSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0sgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMykKLS8qIGNjayBzaG9ydCBzbG90ICYgcHJlYW1ibGUgKi8KLSNkZWZpbmUgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0sgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA0KQotI2RlZmluZSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0sgICAgIGNwdV90b19sZTMyKDEgPDwgNSkKLS8qIGFudGVubmEgc2VsZWN0aW9uICovCi0jZGVmaW5lIFJYT05fRkxHX0RJU19ESVZfTVNLICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA3KQotI2RlZmluZSBSWE9OX0ZMR19BTlRfU0VMX01TSyAgICAgICAgICAgIGNwdV90b19sZTMyKDB4MGYwMCkKLSNkZWZpbmUgUlhPTl9GTEdfQU5UX0FfTVNLICAgICAgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDgpCi0jZGVmaW5lIFJYT05fRkxHX0FOVF9CX01TSyAgICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA5KQotLyogcmFkYXIgZGV0ZWN0aW9uIGVuYWJsZSAqLwotI2RlZmluZSBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLICAgICAgIGNwdV90b19sZTMyKDEgPDwgMTIpCi0jZGVmaW5lIFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0sgICAgY3B1X3RvX2xlMzIoMSA8PCAxMykKLS8qIHJ4IHJlc3BvbnNlIHRvIGhvc3Qgd2l0aCA4LWJ5dGUgVFNGCi0qIChhY2NvcmRpbmcgdG8gT05fQUlSIGRlYXNzZXJ0aW9uKSAqLwotI2RlZmluZSBSWE9OX0ZMR19UU0YySE9TVF9NU0sgICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMTUpCi0KLS8qIHJ4X2NvbmZpZyBmaWx0ZXIgZmxhZ3MgKi8KLS8qIGFjY2VwdCBhbGwgZGF0YSBmcmFtZXMgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDApCi0vKiBwYXNzIGNvbnRyb2wgJiBtYW5hZ2VtZW50IHRvIGhvc3QgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDEpCi0vKiBhY2NlcHQgbXVsdGktY2FzdCAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSyAgICAgIGNwdV90b19sZTMyKDEgPDwgMikKLS8qIGRvbid0IGRlY3J5cHQgdW5pLWNhc3QgZnJhbWVzICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSyAgICAgY3B1X3RvX2xlMzIoMSA8PCAzKQotLyogZG9uJ3QgZGVjcnlwdCBtdWx0aS1jYXN0IGZyYW1lcyAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9ESVNfR1JQX0RFQ1JZUFRfTVNLIGNwdV90b19sZTMyKDEgPDwgNCkKLS8qIFNUQSBpcyBhc3NvY2lhdGVkICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0FTU09DX01TSyAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA1KQotLyogdHJhbnNmZXIgdG8gaG9zdCBub24gYnNzaWQgYmVhY29ucyBpbiBhc3NvY2lhdGVkIHN0YXRlICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLICAgICAgY3B1X3RvX2xlMzIoMSA8PCA2KQotCi0vKioKLSAqIFJFUExZX1JYT04gPSAweDEwIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogUlhPTiB0dW5lcyB0aGUgcmFkaW8gdHVuZXIgdG8gYSBzZXJ2aWNlIGNoYW5uZWwsIGFuZCBzZXRzIHVwIGEgbnVtYmVyCi0gKiBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBSeCwgYnV0IGFsc28gZm9yIFR4IG9wZXJhdGlvbnMuCi0gKgotICogTk9URTogIFdoZW4gdHVuaW5nIHRvIGEgbmV3IGNoYW5uZWwsIGRyaXZlciBtdXN0IHNldCB0aGUKLSAqICAgICAgICBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgdG8gMC4gIFRoaXMgd2lsbCBjbGVhciBzdGF0aW9uLWRlcGVuZGVudAotICogICAgICAgIGluZm8gd2l0aGluIHRoZSBkZXZpY2UsIGluY2x1ZGluZyB0aGUgc3RhdGlvbiB0YWJsZXMsIHR4IHJldHJ5Ci0gKiAgICAgICAgcmF0ZSB0YWJsZXMsIGFuZCB0eHBvd2VyIHRhYmxlcy4gIERyaXZlciBtdXN0IGJ1aWxkIGEgbmV3IHN0YXRpb24KLSAqICAgICAgICB0YWJsZSBhbmQgdHhwb3dlciB0YWJsZSBiZWZvcmUgdHJhbnNtaXR0aW5nIGFueXRoaW5nIG9uIHRoZSBSWE9OCi0gKiAgICAgICAgY2hhbm5lbC4KLSAqCi0gKiBOT1RFOiAgQWxsIFJYT05zIHdpcGUgY2xlYW4gdGhlIGludGVybmFsIHR4cG93ZXIgdGFibGUuICBEcml2ZXIgbXVzdAotICogICAgICAgIGlzc3VlIGEgbmV3IFJFUExZX1RYX1BXUl9UQUJMRV9DTUQgYWZ0ZXIgZWFjaCBSRVBMWV9SWE9OICgweDEwKSwKLSAqICAgICAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgUlhPTl9GSUxURVJfQVNTT0NfTVNLIGlzIHNldC4KLSAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgewotCXU4IG5vZGVfYWRkcls2XTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IGJzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMjsKLQl1OCB3bGFwX2Jzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMzsKLQl1OCBkZXZfdHlwZTsKLQl1OCBhaXJfcHJvcGFnYXRpb247Ci0JX19sZTE2IHJlc2VydmVkNDsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgYXNzb2NfaWQ7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTE2IHJlc2VydmVkNTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfUlhPTl9BU1NPQyA9IDB4MTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgewotCV9fbGUzMiBmbGFnczsKLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwotCXU4IG9mZG1fYmFzaWNfcmF0ZXM7Ci0JdTggY2NrX2Jhc2ljX3JhdGVzOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfUlhPTl9USU1JTkcgPSAweDE0IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgewotCXVuaW9uIHRzZiB0aW1lc3RhbXA7Ci0JX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKLQlfX2xlMTYgYXRpbV93aW5kb3c7Ci0JX19sZTMyIGJlYWNvbl9pbml0X3ZhbDsKLQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7Ci0JdTggYmFuZDsKLQl1OCBleHBlY3RfYmVhY29uOwotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUzMiByeG9uX2ZsYWdzOwotCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKLQlfX2xlMzIgc3dpdGNoX3RpbWU7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIENIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTiA9IDB4NzMgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jc2Ffbm90aWZpY2F0aW9uIHsKLQlfX2xlMTYgYmFuZDsKLQlfX2xlMTYgY2hhbm5lbDsKLQlfX2xlMzIgc3RhdHVzOwkJLyogMCAtIE9LLCAxIC0gZmFpbCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgyKQotICogUXVhbGl0eS1vZi1TZXJ2aWNlIChRT1MpIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBzdHJ1Y3QgaXdsX2FjX3FvcyAtLSBRT1MgdGltaW5nIHBhcmFtcyBmb3IgUkVQTFlfUU9TX1BBUkFNCi0gKiBPbmUgZm9yIGVhY2ggb2YgNCBFRENBIGFjY2VzcyBjYXRlZ29yaWVzIGluIHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kCi0gKgotICogQGN3X21pbjogQ29udGVudGlvbiB3aW5kb3csIHN0YXJ0IHZhbHVlIGluIG51bWJlcnMgb2Ygc2xvdHMuCi0gKiAgICAgICAgICBTaG91bGQgYmUgYSBwb3dlci1vZi0yLCBtaW51cyAxLiAgRGV2aWNlJ3MgZGVmYXVsdCBpcyAweDBmLgotICogQGN3X21heDogQ29udGVudGlvbiB3aW5kb3csIG1heCB2YWx1ZSBpbiBudW1iZXJzIG9mIHNsb3RzLgotICogICAgICAgICAgU2hvdWxkIGJlIGEgcG93ZXItb2YtMiwgbWludXMgMS4gIERldmljZSdzIGRlZmF1bHQgaXMgMHgzZi4KLSAqIEBhaWZzbjogIE51bWJlciBvZiBzbG90cyBpbiBBcmJpdHJhdGlvbiBJbnRlcmZyYW1lIFNwYWNlIChiZWZvcmUKLSAqICAgICAgICAgIHBlcmZvcm1pbmcgcmFuZG9tIGJhY2tvZmYgdGltaW5nIHByaW9yIHRvIFR4KS4gIERldmljZSBkZWZhdWx0IDEuCi0gKiBAZWRjYV90eG9wOiAgTGVuZ3RoIG9mIFR4IG9wcG9ydHVuaXR5LCBpbiB1U2Vjcy4gIERldmljZSBkZWZhdWx0IGlzIDAuCi0gKgotICogRGV2aWNlIHdpbGwgYXV0b21hdGljYWxseSBpbmNyZWFzZSBjb250ZW50aW9uIHdpbmRvdyBieSAoMipDVykgKyAxIGZvciBlYWNoCi0gKiB0cmFuc21pc3Npb24gcmV0cnkuICBEZXZpY2UgdXNlcyBjd19tYXggYXMgYSBiaXQgbWFzaywgQU5EZWQgd2l0aCBuZXcgQ1cKLSAqIHZhbHVlLCB0byBjYXAgdGhlIENXIHZhbHVlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9hY19xb3MgewotCV9fbGUxNiBjd19taW47Ci0JX19sZTE2IGN3X21heDsKLQl1OCBhaWZzbjsKLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IGVkY2FfdHhvcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBRb1MgZmxhZ3MgZGVmaW5lcyAqLwotI2RlZmluZSBRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSwljcHVfdG9fbGUzMigweDAxKQotI2RlZmluZSBRT1NfUEFSQU1fRkxHX1RHTl9NU0sJCWNwdV90b19sZTMyKDB4MDIpCi0jZGVmaW5lIFFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSwljcHVfdG9fbGUzMigweDEwKQotCi0vKiBOdW1iZXIgb2YgQWNjZXNzIENhdGVnb3JpZXMgKEFDKSAoRURDQSksIHF1ZXVlcyAwLi4zICovCi0jZGVmaW5lIEFDX05VTSAgICAgICAgICAgICAgICA0Ci0KLS8qCi0gKiBSRVBMWV9RT1NfUEFSQU0gPSAweDEzIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogVGhpcyBjb21tYW5kIHNldHMgdXAgdGltaW5ncyBmb3IgZWFjaCBvZiB0aGUgNCBwcmlvcml0aXplZCBFRENBIFR4IEZJRk9zCi0gKiAwOiBCYWNrZ3JvdW5kLCAxOiBCZXN0IEVmZm9ydCwgMjogVmlkZW8sIDM6IFZvaWNlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgewotCV9fbGUzMiBxb3NfZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfYWNfcW9zIGFjW0FDX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDMpCi0gKiBBZGQvTW9kaWZ5IFN0YXRpb25zIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBNdWx0aSBzdGF0aW9uIHN1cHBvcnQKLSAqLwotCi0vKiBTcGVjaWFsLCBkZWRpY2F0ZWQgbG9jYXRpb25zIHdpdGhpbiBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCi0jZGVmaW5lCUlXTF9BUF9JRAkJMAotI2RlZmluZSBJV0xfTVVMVElDQVNUX0lECTEKLSNkZWZpbmUJSVdMX1NUQV9JRAkJMgotI2RlZmluZQlJV0wzOTQ1X0JST0FEQ0FTVF9JRAkyNAotI2RlZmluZSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQJMjUKLQotI2RlZmluZQlJV0xfU1RBVElPTl9DT1VOVAkzMiAJLyogTUFYKDM5NDUsNDk2NSkqLwotI2RlZmluZQlJV0xfSU5WQUxJRF9TVEFUSU9OIAkyNTUKLQotI2RlZmluZSBTVEFfRkxHX1RYX1JBVEVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDIpOwotI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKLQotLyogVXNlIGluIG1vZGUgZmllbGQuICAxOiBtb2RpZnkgZXhpc3RpbmcgZW50cnksIDA6IGFkZCBuZXcgc3RhdGlvbiBlbnRyeSAqLwotI2RlZmluZSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLCQkweDAxCi0KLS8qIGtleSBmbGFncyBfX2xlMTYqLwotI2RlZmluZSBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSwljcHVfdG9fbGUxNigweDAwMDcpCi0jZGVmaW5lIFNUQV9LRVlfRkxHX05PX0VOQwljcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFNUQV9LRVlfRkxHX1dFUAkJY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBTVEFfS0VZX0ZMR19DQ01QCWNwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgU1RBX0tFWV9GTEdfVEtJUAljcHVfdG9fbGUxNigweDAwMDMpCi0KLSNkZWZpbmUgU1RBX0tFWV9GTEdfS0VZSURfUE9TCTgKLSNkZWZpbmUgU1RBX0tFWV9GTEdfSU5WQUxJRCAJY3B1X3RvX2xlMTYoMHgwODAwKQotLyogd2VwIGtleSBpcyBlaXRoZXIgZnJvbSBnbG9iYWwga2V5ICgwKSBvciBmcm9tIHN0YXRpb24gaW5mbyBhcnJheSAoMSkgKi8KLSNkZWZpbmUgU1RBX0tFWV9GTEdfV0VQX0tFWV9NQVBfTVNLICBjcHVfdG9fbGUxNigweDAwMDgpCi0KLS8qIHdlcCBrZXkgaW4gU1RBOiA1LWJ5dGVzICgwKSBvciAxMy1ieXRlcyAoMSkgKi8KLSNkZWZpbmUgU1RBX0tFWV9GTEdfS0VZX1NJWkVfTVNLICAgICBjcHVfdG9fbGUxNigweDEwMDApCi0jZGVmaW5lIFNUQV9LRVlfTVVMVElDQVNUX01TSyAgICAgICAgY3B1X3RvX2xlMTYoMHg0MDAwKQotCi0vKiBGbGFncyBpbmRpY2F0ZSB3aGV0aGVyIHRvIG1vZGlmeSB2cy4gZG9uJ3QgY2hhbmdlIHZhcmlvdXMgc3RhdGlvbiBwYXJhbXMgKi8KLSNkZWZpbmUJU1RBX01PRElGWV9LRVlfTUFTSwkJMHgwMQotI2RlZmluZQlTVEFfTU9ESUZZX1RJRF9ESVNBQkxFX1RYCTB4MDIKLSNkZWZpbmUJU1RBX01PRElGWV9UWF9SQVRFX01TSwkJMHgwNAotCi0vKgotICogQW50ZW5uYSBtYXNrczoKLSAqIGJpdDE0OjE1IDAxIEIgaW5hY3RpdmUsIEEgYWN0aXZlCi0gKiAgICAgICAgICAxMCBCIGFjdGl2ZSwgQSBpbmFjdGl2ZQotICogICAgICAgICAgMTEgQm90aCBhY3RpdmUKLSAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfQV9QT1MJMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfUE9TCTE1Ci0jZGVmaW5lIFJBVEVfTUNTX0FOVF9BX01TSwkweDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLCTB4ODAwMAotI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCTB4YzAwMAotCi1zdHJ1Y3QgaXdsMzk0NV9rZXlpbmZvIHsKLQlfX2xlMTYga2V5X2ZsYWdzOwotCXU4IHRraXBfcnhfdHNjX2J5dGUyOwkvKiBUU0NbMl0gZm9yIGtleSBtaXggcGgxIGRldGVjdGlvbiAqLwotCXU4IHJlc2VydmVkMTsKLQlfX2xlMTYgdGtpcF9yeF90dGFrWzVdOwkvKiAxMC1ieXRlIHVuaWNhc3QgVEtJUCBUVEFLICovCi0JdTgga2V5X29mZnNldDsKLQl1OCByZXNlcnZlZDI7Ci0JdTgga2V5WzE2XTsJCS8qIDE2LWJ5dGUgdW5pY2FzdCBkZWNyeXB0aW9uIGtleSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IHN0YV9pZF9tb2RpZnkKLSAqIEBhZGRyW0VUSF9BTEVOXTogc3RhdGlvbidzIE1BQyBhZGRyZXNzCi0gKiBAc3RhX2lkOiBpbmRleCBvZiBzdGF0aW9uIGluIHVDb2RlJ3Mgc3RhdGlvbiB0YWJsZQotICogQG1vZGlmeV9tYXNrOiBTVEFfTU9ESUZZXyosIDE6IG1vZGlmeSwgMDogZG9uJ3QgY2hhbmdlCi0gKgotICogRHJpdmVyIHNlbGVjdHMgdW51c2VkIHRhYmxlIGluZGV4IHdoZW4gYWRkaW5nIG5ldyBzdGF0aW9uLAotICogb3IgdGhlIGluZGV4IHRvIGEgcHJlLWV4aXN0aW5nIHN0YXRpb24gZW50cnkgd2hlbiBtb2RpZnlpbmcgdGhhdCBzdGF0aW9uLgotICogU29tZSBpbmRleGVzIGhhdmUgc3BlY2lhbCBwdXJwb3NlcyAoSVdMX0FQX0lELCBpbmRleCAwLCBpcyBmb3IgQVApLgotICoKLSAqIG1vZGlmeV9tYXNrIGZsYWdzIHNlbGVjdCB3aGljaCBwYXJhbWV0ZXJzIHRvIG1vZGlmeSB2cy4gbGVhdmUgYWxvbmUuCi0gKi8KLXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHsKLQl1OCBhZGRyW0VUSF9BTEVOXTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN0YV9pZDsKLQl1OCBtb2RpZnlfbWFzazsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9BRERfU1RBID0gMHgxOCAoY29tbWFuZCkKLSAqCi0gKiBUaGUgZGV2aWNlIGNvbnRhaW5zIGFuIGludGVybmFsIHRhYmxlIG9mIHBlci1zdGF0aW9uIGluZm9ybWF0aW9uLAotICogd2l0aCBpbmZvIG9uIHNlY3VyaXR5IGtleXMsIGFnZ3JlZ2F0aW9uIHBhcmFtZXRlcnMsIGFuZCBUeCByYXRlcyBmb3IKLSAqIGluaXRpYWwgVHggYXR0ZW1wdCBhbmQgYW55IHJldHJpZXMgKDQ5NjUgdXNlcyBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAotICogMzk0NSB1c2VzIFJFUExZX1JBVEVfU0NBTEUgdG8gc2V0IHVwIHJhdGUgdGFibGVzKS4KLSAqCi0gKiBSRVBMWV9BRERfU1RBIHNldHMgdXAgdGhlIHRhYmxlIGVudHJ5IGZvciBvbmUgc3RhdGlvbiwgZWl0aGVyIGNyZWF0aW5nCi0gKiBhIG5ldyBlbnRyeSwgb3IgbW9kaWZ5aW5nIGEgcHJlLWV4aXN0aW5nIG9uZS4KLSAqCi0gKiBOT1RFOiAgUlhPTiBjb21tYW5kICh3aXRob3V0ICJhc3NvY2lhdGVkIiBiaXQgc2V0KSB3aXBlcyB0aGUgc3RhdGlvbiB0YWJsZQotICogICAgICAgIGNsZWFuLiAgTW92aW5nIGludG8gUkZfS0lMTCBzdGF0ZSBkb2VzIHRoaXMgYWxzby4gIERyaXZlciBtdXN0IHNldCB1cAotICogICAgICAgIG5ldyBzdGF0aW9uIHRhYmxlIGJlZm9yZSB0cmFuc21pdHRpbmcgYW55dGhpbmcgb24gdGhlIFJYT04gY2hhbm5lbAotICogICAgICAgIChleGNlcHQgYWN0aXZlIHNjYW5zIG9yIGFjdGl2ZSBtZWFzdXJlbWVudHM7IHRob3NlIGNvbW1hbmRzIGNhcnJ5Ci0gKiAgICAgICAgdGhlaXIgb3duIHR4cG93ZXIvcmF0ZSBzZXR1cCBkYXRhKS4KLSAqCi0gKiAgICAgICAgV2hlbiBnZXR0aW5nIHN0YXJ0ZWQgb24gYSBuZXcgY2hhbm5lbCwgZHJpdmVyIG11c3Qgc2V0IHVwIHRoZQotICogICAgICAgIElXTF9CUk9BRENBU1RfSUQgZW50cnkgKGxhc3QgZW50cnkgaW4gdGhlIHRhYmxlKS4gIEZvciBhIGNsaWVudAotICogICAgICAgIHN0YXRpb24gaW4gYSBCU1MsIG9uY2UgYW4gQVAgaXMgc2VsZWN0ZWQsIGRyaXZlciBzZXRzIHVwIHRoZSBBUCBTVEEKLSAqICAgICAgICBpbiB0aGUgSVdMX0FQX0lEIGVudHJ5ICgxc3QgZW50cnkgaW4gdGhlIHRhYmxlKS4gIEJST0FEQ0FTVCBhbmQgQVAKLSAqICAgICAgICBhcmUgYWxsIHRoYXQgYXJlIG5lZWRlZCBmb3IgYSBCU1MgY2xpZW50IHN0YXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCi0gKiAgICAgICAgdXNlZCBhcyBBUCwgb3IgaW4gYW4gSUJTUyBuZXR3b3JrLCBkcml2ZXIgbXVzdCBzZXQgdXAgc3RhdGlvbiB0YWJsZQotICogICAgICAgIGVudHJpZXMgZm9yIGFsbCBTVEFzIGluIG5ldHdvcmssIHN0YXJ0aW5nIHdpdGggaW5kZXggSVdMX1NUQV9JRC4KLSAqLwotc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCB7Ci0JdTggbW9kZTsJCS8qIDE6IG1vZGlmeSBleGlzdGluZywgMDogYWRkIG5ldyBzdGF0aW9uICovCi0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IHN0YV9pZF9tb2RpZnkgc3RhOwotCXN0cnVjdCBpd2wzOTQ1X2tleWluZm8ga2V5OwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCi0JX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KLQotCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCi0JICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7Ci0KLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCi0JLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKLQotCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgQUREX1NUQV9TVUNDRVNTX01TSwkJMHgxCi0jZGVmaW5lIEFERF9TVEFfTk9fUk9PTV9JTl9UQUJMRQkweDIKLSNkZWZpbmUgQUREX1NUQV9OT19CTE9DS19BQ0tfUkVTT1VSQ0UJMHg0Ci0vKgotICogUkVQTFlfQUREX1NUQSA9IDB4MTggKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9hZGRfc3RhX3Jlc3AgewotCXU4IHN0YXR1czsJLyogQUREX1NUQV8qICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNCkKLSAqIFJ4IFJlc3BvbnNlczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHsKLQl1OCBwaHlfY291bnQ7Ci0JdTggaWQ7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JX19sZTE2IHNpZ19hdmc7Ci0JX19sZTE2IG5vaXNlX2RpZmY7Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgewotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUxNiBwaHlfZmxhZ3M7Ci0JdTggcmVzZXJ2ZWQxOwotCXU4IHJhdGU7Ci0JX19sZTE2IGxlbjsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUgljcHVfdG9fbGUzMigxIDw8IDApCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XCWNwdV90b19sZTMyKDEgPDwgMSkKLQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLCWNwdV90b19sZTE2KDEgPDwgMCkKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSwkJY3B1X3RvX2xlMTYoMSA8PCAxKQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCWNwdV90b19sZTE2KDEgPDwgMykKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJY3B1X3RvX2xlMTYoMHhmMCkKLQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSwkoMHg3IDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTk9ORQkoMHgwIDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQCSgweDEgPDwgOCkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QCSgweDIgPDwgOCkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQCSgweDMgPDwgOCkKLQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfVFlQRV9NU0sJKDB4MyA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT1RfREVDUllQVAkoMHgwIDw8IDExKQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfT0sJKDB4MyA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQwkoMHgxIDw8IDExKQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0JBRF9LRVlfVFRBSwkoMHgyIDw8IDExKQotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTY0IHRpbWVzdGFtcDsKLQlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCi0gKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCi0gKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCi0gKiBzdGF0cy5waHlfY291bnQKLSAqLwotc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgewotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNSkKLSAqIFR4IENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqIERyaXZlciBtdXN0IHBsYWNlIGVhY2ggUkVQTFlfVFggY29tbWFuZCBpbnRvIG9uZSBvZiB0aGUgcHJpb3JpdGl6ZWQgVHgKLSAqIHF1ZXVlcyBpbiBob3N0IERSQU0sIHNoYXJlZCBiZXR3ZWVuIGRyaXZlciBhbmQgZGV2aWNlLiAgV2hlbiB0aGUgZGV2aWNlJ3MKLSAqIFR4IHNjaGVkdWxlciBhbmQgdUNvZGUgYXJlIHByZXBhcmluZyB0byB0cmFuc21pdCwgdGhlIGRldmljZSBwdWxscyB0aGUKLSAqIFR4IGNvbW1hbmQgb3ZlciB0aGUgUENJIGJ1cyB2aWEgb25lIG9mIHRoZSBkZXZpY2UncyBUeCBETUEgY2hhbm5lbHMsCi0gKiB0byBmaWxsIGFuIGludGVybmFsIEZJRk8gZnJvbSB3aGljaCBkYXRhIHdpbGwgYmUgdHJhbnNtaXR0ZWQuCi0gKgotICogdUNvZGUgaGFuZGxlcyBhbGwgdGltaW5nIGFuZCBwcm90b2NvbCByZWxhdGVkIHRvIGNvbnRyb2wgZnJhbWVzCi0gKiAoUlRTL0NUUy9BQ0spLCBiYXNlZCBvbiBmbGFncyBpbiB0aGUgVHggY29tbWFuZC4KLSAqCi0gKiB1Q29kZSBoYW5kbGVzIHJldHJ5aW5nIFR4IHdoZW4gYW4gQUNLIGlzIGV4cGVjdGVkIGJ1dCBub3QgcmVjZWl2ZWQuCi0gKiBUaGlzIGluY2x1ZGVzIHRyeWluZyBsb3dlciBkYXRhIHJhdGVzIHRoYW4gdGhlIG9uZSByZXF1ZXN0ZWQgaW4gdGhlIFR4Ci0gKiBjb21tYW5kLCBhcyBzZXQgdXAgYnkgdGhlIFJFUExZX1JBVEVfU0NBTEUgKGZvciAzOTQ1KSBvcgotICogUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCAoNDk2NSkuCi0gKgotICogRHJpdmVyIHNldHMgdXAgdHJhbnNtaXQgcG93ZXIgZm9yIHZhcmlvdXMgcmF0ZXMgdmlhIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQuCi0gKiBUaGlzIGNvbW1hbmQgbXVzdCBiZSBleGVjdXRlZCBhZnRlciBldmVyeSBSWE9OIGNvbW1hbmQsIGJlZm9yZSBUeCBjYW4gb2NjdXIuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFJFUExZX1RYIFR4IGZsYWdzIGZpZWxkICovCi0KLS8qIDE6IFVzZSBSZXF1ZXN0LVRvLVNlbmQgcHJvdG9jb2wgYmVmb3JlIHRoaXMgZnJhbWUuCi0gKiBNdXR1YWxseSBleGNsdXNpdmUgdnMuIFRYX0NNRF9GTEdfQ1RTX01TSy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19SVFNfTVNLIGNwdV90b19sZTMyKDEgPDwgMSkKLQotLyogMTogVHJhbnNtaXQgQ2xlYXItVG8tU2VuZCB0byBzZWxmIGJlZm9yZSB0aGlzIGZyYW1lLgotICogRHJpdmVyIHNob3VsZCBzZXQgdGhpcyBmb3IgQVVUSC9ERUFVVEgvQVNTT0MtUkVRL1JFQVNTT0MgbWdtbnQgZnJhbWVzLgotICogTXV0dWFsbHkgZXhjbHVzaXZlIHZzLiBUWF9DTURfRkxHX1JUU19NU0suICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQ1RTX01TSyBjcHVfdG9fbGUzMigxIDw8IDIpCi0KLS8qIDE6IEV4cGVjdCBBQ0sgZnJvbSByZWNlaXZpbmcgc3RhdGlvbgotICogMDogRG9uJ3QgZXhwZWN0IEFDSyAoTUFDIGhlYWRlcidzIGR1cmF0aW9uIGZpZWxkIHMvYiAwKQotICogU2V0IHRoaXMgZm9yIHVuaWNhc3QgZnJhbWVzLCBidXQgbm90IGJyb2FkY2FzdC9tdWx0aWNhc3QuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQUNLX01TSyBjcHVfdG9fbGUzMigxIDw8IDMpCi0KLS8qIDE6IFVzZSByYXRlIHNjYWxlIHRhYmxlIChzZWUgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCkuCi0gKiAgICBUeCBjb21tYW5kJ3MgaW5pdGlhbF9yYXRlX2luZGV4IGluZGljYXRlcyBmaXJzdCByYXRlIHRvIHRyeTsKLSAqICAgIHVDb2RlIHdhbGtzIHRocm91Z2ggdGFibGUgZm9yIGFkZGl0aW9uYWwgVHggYXR0ZW1wdHMuCi0gKiAwOiBVc2UgVHggcmF0ZS9NQ1MgZnJvbSBUeCBjb21tYW5kJ3MgcmF0ZV9uX2ZsYWdzIGZpZWxkLgotICogICAgVGhpcyByYXRlIHdpbGwgYmUgdXNlZCBmb3IgYWxsIFR4IGF0dGVtcHRzOyBpdCB3aWxsIG5vdCBiZSBzY2FsZWQuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfU1RBX1JBVEVfTVNLIGNwdV90b19sZTMyKDEgPDwgNCkKLQotLyogMTogRXhwZWN0IGltbWVkaWF0ZSBibG9jay1hY2suCi0gKiBTZXQgd2hlbiBUeGluZyBhIGJsb2NrLWFjayByZXF1ZXN0IGZyYW1lLiAgQWxzbyBzZXQgVFhfQ01EX0ZMR19BQ0tfTVNLLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0lNTV9CQV9SU1BfTUFTSyAgY3B1X3RvX2xlMzIoMSA8PCA2KQotCi0vKiAxOiBGcmFtZSByZXF1aXJlcyBmdWxsIFR4LU9wIHByb3RlY3Rpb24uCi0gKiBTZXQgdGhpcyBpZiBlaXRoZXIgUlRTIG9yIENUUyBUeCBGbGFnIGdldHMgc2V0LiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0ZVTExfVFhPUF9QUk9UX01TSyBjcHVfdG9fbGUzMigxIDw8IDcpCi0KLS8qIFR4IGFudGVubmEgc2VsZWN0aW9uIGZpZWxkOyB1c2VkIG9ubHkgZm9yIDM5NDUsIHJlc2VydmVkICgwKSBmb3IgNDk2NS4KLSAqIFNldCBmaWVsZCB0byAiMCIgdG8gYWxsb3cgMzk0NSB1Q29kZSB0byBzZWxlY3QgYW50ZW5uYSAobm9ybWFsIHVzYWdlKS4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19BTlRfU0VMX01TSyBjcHVfdG9fbGUzMigweGYwMCkKLSNkZWZpbmUgVFhfQ01EX0ZMR19BTlRfQV9NU0sgY3B1X3RvX2xlMzIoMSA8PCA4KQotI2RlZmluZSBUWF9DTURfRkxHX0FOVF9CX01TSyBjcHVfdG9fbGUzMigxIDw8IDkpCi0KLS8qIDE6IElnbm9yZSBCbHVldG9vdGggcHJpb3JpdHkgZm9yIHRoaXMgZnJhbWUuCi0gKiAwOiBEZWxheSBUeCB1bnRpbCBCbHVldG9vdGggZGV2aWNlIGlzIGRvbmUgKG5vcm1hbCB1c2FnZSkuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQlRfRElTX01TSyBjcHVfdG9fbGUzMigxIDw8IDEyKQotCi0vKiAxOiB1Q29kZSBvdmVycmlkZXMgc2VxdWVuY2UgY29udHJvbCBmaWVsZCBpbiBNQUMgaGVhZGVyLgotICogMDogRHJpdmVyIHByb3ZpZGVzIHNlcXVlbmNlIGNvbnRyb2wgZmllbGQgaW4gTUFDIGhlYWRlci4KLSAqIFNldCB0aGlzIGZvciBtYW5hZ2VtZW50IGZyYW1lcywgbm9uLVFPUyBkYXRhIGZyYW1lcywgbm9uLXVuaWNhc3QgZnJhbWVzLAotICogYW5kIGFsc28gaW4gVHggY29tbWFuZCBlbWJlZGRlZCBpbiBSRVBMWV9TQ0FOX0NNRCBmb3IgYWN0aXZlIHNjYW5zLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX1NFUV9DVExfTVNLIGNwdV90b19sZTMyKDEgPDwgMTMpCi0KLS8qIDE6IFRoaXMgZnJhbWUgaXMgbm9uLWxhc3QgTVBEVTsgbW9yZSBmcmFnbWVudHMgYXJlIGNvbWluZy4KLSAqIDA6IExhc3QgZnJhZ21lbnQsIG9yIG5vdCB1c2luZyBmcmFnbWVudGF0aW9uLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX01PUkVfRlJBR19NU0sgY3B1X3RvX2xlMzIoMSA8PCAxNCkKLQotLyogMTogdUNvZGUgY2FsY3VsYXRlcyBhbmQgaW5zZXJ0cyBUaW1lc3RhbXAgRnVuY3Rpb24gKFRTRikgaW4gb3V0Z29pbmcgZnJhbWUuCi0gKiAwOiBObyBUU0YgcmVxdWlyZWQgaW4gb3V0Z29pbmcgZnJhbWUuCi0gKiBTZXQgdGhpcyBmb3IgdHJhbnNtaXR0aW5nIGJlYWNvbnMgYW5kIHByb2JlIHJlc3BvbnNlcy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19UU0ZfTVNLIGNwdV90b19sZTMyKDEgPDwgMTYpCi0KLS8qIDE6IERyaXZlciBpbnNlcnRlZCAyIGJ5dGVzIHBhZCBhZnRlciB0aGUgTUFDIGhlYWRlciwgZm9yIChyZXF1aXJlZCkgZHdvcmQKLSAqICAgIGFsaWdubWVudCBvZiBmcmFtZSdzIHBheWxvYWQgZGF0YSBmaWVsZC4KLSAqIDA6IE5vIHBhZAotICogU2V0IHRoaXMgZm9yIE1BQyBoZWFkZXJzIHdpdGggMjYgb3IgMzAgYnl0ZXMsIGkuZS4gdGhvc2Ugd2l0aCBRT1Mgb3IgQUREUjQKLSAqIGZpZWxkIChidXQgbm90IGJvdGgpLiAgRHJpdmVyIG11c3QgYWxpZ24gZnJhbWUgZGF0YSAoaS5lLiBkYXRhIGZvbGxvd2luZwotICogTUFDIGhlYWRlcikgdG8gRFdPUkQgYm91bmRhcnkuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfTUhfUEFEX01TSyBjcHVfdG9fbGUzMigxIDw8IDIwKQotCi0vKiBIQ0NBLUFQIC0gZGlzYWJsZSBkdXJhdGlvbiBvdmVyd3JpdGluZy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19EVVJfTVNLIGNwdV90b19sZTMyKDEgPDwgMjUpCi0KLS8qCi0gKiBUWCBjb21tYW5kIHNlY3VyaXR5IGNvbnRyb2wKLSAqLwotI2RlZmluZSBUWF9DTURfU0VDX1dFUCAgCTB4MDEKLSNkZWZpbmUgVFhfQ01EX1NFQ19DQ00gIAkweDAyCi0jZGVmaW5lIFRYX0NNRF9TRUNfVEtJUAkJMHgwMwotI2RlZmluZSBUWF9DTURfU0VDX01TSwkJMHgwMwotI2RlZmluZSBUWF9DTURfU0VDX1NISUZUCTYKLSNkZWZpbmUgVFhfQ01EX1NFQ19LRVkxMjgJMHgwOAotCi0vKgotICogUkVQTFlfVFggPSAweDFjIChjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9jbWQgewotCS8qCi0JICogTVBEVSBieXRlIGNvdW50OgotCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAotCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKLQkgKiArIERhdGEgcGF5bG9hZAotCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCi0JICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAotCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCi0JICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCi0JICovCi0JX19sZTE2IGxlbjsKLQotCS8qCi0JICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCi0JICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgotCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgotCSAqLwotCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKLQotCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCi0KLQl1OCByYXRlOwotCi0JLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCi0JdTggc3RhX2lkOwotCXU4IHRpZF90c3BlYzsKLQl1OCBzZWNfY3RsOwotCXU4IGtleVsxNl07Ci0JdW5pb24gewotCQl1OCBieXRlWzhdOwotCQlfX2xlMTYgd29yZFs0XTsKLQkJX19sZTMyIGR3WzJdOwotCX0gdGtpcF9taWM7Ci0JX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBsaWZlX3RpbWU7Ci0JCV9fbGUzMiBhdHRlbXB0OwotCX0gc3RvcF90aW1lOwotCXU4IHN1cHBfcmF0ZXNbMl07Ci0JdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KLQl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KLQl1bmlvbiB7Ci0JCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OwotCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKLQl9IHRpbWVvdXQ7Ci0KLQkvKgotCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCi0JICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCi0JICovCi0JX19sZTE2IGRyaXZlcl90eG9wOwotCi0JLyoKLQkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKLQkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQotCSAqLwotCXU4IHBheWxvYWRbMF07Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFRYIGNvbW1hbmQgcmVzcG9uc2UgaXMgc2VudCBhZnRlciAqYWxsKiB0cmFuc21pc3Npb24gYXR0ZW1wdHMuCi0gKgotICogTk9URVM6Ci0gKgotICogVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHCi0gKgotICogSWYgdGhlIGZyYWdtZW50IGZsYWcgaW4gdGhlIE1BQyBoZWFkZXIgZm9yIHRoZSBmcmFtZSBiZWluZyB0cmFuc21pdHRlZAotICogaXMgc2V0IGFuZCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgdGltZSB0byB0cmFuc21pdCB0aGUgbmV4dCBmcmFtZSwgdGhlCi0gKiBUWCBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZCB3aXRoICdUWF9TVEFUVVNfRkFJTF9ORVhUX0ZSQUcnLgotICoKLSAqIFRYX1NUQVRVU19GSUZPX1VOREVSUlVOCi0gKgotICogSW5kaWNhdGVzIHRoZSBob3N0IGRpZCBub3QgcHJvdmlkZSBieXRlcyB0byB0aGUgRklGTyBmYXN0IGVub3VnaCB3aGlsZQotICogYSBUWCB3YXMgaW4gcHJvZ3Jlc3MuCi0gKgotICogVFhfU1RBVFVTX0ZBSUxfTUdNTlRfQUJPUlQKLSAqCi0gKiBUaGlzIHN0YXR1cyBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBBQk9SVCBPTiBNR01UIFJYIHBhcmFtZXRlciB3YXMKLSAqIHNldCB0byB0cnVlIHdpdGggdGhlIFRYIGNvbW1hbmQuCi0gKgotICogSWYgdGhlIE1TQiBvZiB0aGUgc3RhdHVzIHBhcmFtZXRlciBpcyBzZXQgdGhlbiBhbiBhYm9ydCBzZXF1ZW5jZSBpcwotICogcmVxdWlyZWQuICBUaGlzIHNlcXVlbmNlIGNvbnNpc3RzIG9mIHRoZSBob3N0IGFjdGl2YXRpbmcgdGhlIFRYIEFib3J0Ci0gKiBjb250cm9sIGxpbmUsIGFuZCB0aGVuIHdhaXRpbmcgZm9yIHRoZSBUWCBBYm9ydCBjb21tYW5kIHJlc3BvbnNlLiAgVGhpcwotICogaW5kaWNhdGVzIHRoYXQgYSB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBpbiBhIHRyYW5zbWl0IHN0YXRlLCBhbmQgdGhhdCB0aGUKLSAqIGNvbW1hbmQgRklGTyBoYXMgYmVlbiBjbGVhcmVkLiAgVGhlIGhvc3QgbXVzdCB0aGVuIGRlYWN0aXZhdGUgdGhlIFRYIEFib3J0Ci0gKiBjb250cm9sIGxpbmUuICBSZWNlaXZpbmcgaXMgc3RpbGwgYWxsb3dlZCBpbiB0aGlzIGNhc2UuCi0gKi8KLWVudW0gewotCVRYX1NUQVRVU19TVUNDRVNTID0gMHgwMSwKLQlUWF9TVEFUVVNfRElSRUNUX0RPTkUgPSAweDAyLAotCVRYX1NUQVRVU19GQUlMX1NIT1JUX0xJTUlUID0gMHg4MiwKLQlUWF9TVEFUVVNfRkFJTF9MT05HX0xJTUlUID0gMHg4MywKLQlUWF9TVEFUVVNfRkFJTF9GSUZPX1VOREVSUlVOID0gMHg4NCwKLQlUWF9TVEFUVVNfRkFJTF9NR01OVF9BQk9SVCA9IDB4ODUsCi0JVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHID0gMHg4NiwKLQlUWF9TVEFUVVNfRkFJTF9MSUZFX0VYUElSRSA9IDB4ODcsCi0JVFhfU1RBVFVTX0ZBSUxfREVTVF9QUyA9IDB4ODgsCi0JVFhfU1RBVFVTX0ZBSUxfQUJPUlRFRCA9IDB4ODksCi0JVFhfU1RBVFVTX0ZBSUxfQlRfUkVUUlkgPSAweDhhLAotCVRYX1NUQVRVU19GQUlMX1NUQV9JTlZBTElEID0gMHg4YiwKLQlUWF9TVEFUVVNfRkFJTF9GUkFHX0RST1BQRUQgPSAweDhjLAotCVRYX1NUQVRVU19GQUlMX1RJRF9ESVNBQkxFID0gMHg4ZCwKLQlUWF9TVEFUVVNfRkFJTF9GUkFNRV9GTFVTSEVEID0gMHg4ZSwKLQlUWF9TVEFUVVNfRkFJTF9JTlNVRkZJQ0lFTlRfQ0ZfUE9MTCA9IDB4OGYsCi0JVFhfU1RBVFVTX0ZBSUxfVFhfTE9DS0VEID0gMHg5MCwKLQlUWF9TVEFUVVNfRkFJTF9OT19CRUFDT05fT05fUkFEQVIgPSAweDkxLAotfTsKLQotI2RlZmluZQlUWF9QQUNLRVRfTU9ERV9SRUdVTEFSCQkweDAwMDAKLSNkZWZpbmUJVFhfUEFDS0VUX01PREVfQlVSU1RfU0VRCTB4MDEwMAotI2RlZmluZQlUWF9QQUNLRVRfTU9ERV9CVVJTVF9GSVJTVAkweDAyMDAKLQotZW51bSB7Ci0JVFhfUE9XRVJfUEFfTk9UX0FDVElWRSA9IDB4MCwKLX07Ci0KLWVudW0gewotCVRYX1NUQVRVU19NU0sgPSAweDAwMDAwMGZmLAkvKiBiaXRzIDA6NyAqLwotCVRYX1NUQVRVU19ERUxBWV9NU0sgPSAweDAwMDAwMDQwLAotCVRYX1NUQVRVU19BQk9SVF9NU0sgPSAweDAwMDAwMDgwLAotCVRYX1BBQ0tFVF9NT0RFX01TSyA9IDB4MDAwMGZmMDAsCS8qIGJpdHMgODoxNSAqLwotCVRYX0ZJRk9fTlVNQkVSX01TSyA9IDB4MDAwNzAwMDAsCS8qIGJpdHMgMTY6MTggKi8KLQlUWF9SRVNFUlZFRCA9IDB4MDA3ODAwMDAsCS8qIGJpdHMgMTk6MjIgKi8KLQlUWF9QT1dFUl9QQV9ERVRFQ1RfTVNLID0gMHg3ZjgwMDAwMCwJLyogYml0cyAyMzozMCAqLwotCVRYX0FCT1JUX1JFUVVJUkVEX01TSyA9IDB4ODAwMDAwMDAsCS8qIGJpdHMgMzE6MzEgKi8KLX07Ci0KLS8qCi0gKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKLQl1OCBmYWlsdXJlX3J0czsKLQl1OCBmYWlsdXJlX2ZyYW1lOwotCXU4IGJ0X2tpbGxfY291bnQ7Ci0JdTggcmF0ZTsKLQlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKLQlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQgPSAweDk3IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQgewotCXU4IGJhbmQ7CQkvKiAwOiA1IEdIeiwgMTogMi40IEdIeiAqLwotCXU4IHJlc2VydmVkOwotCV9fbGUxNiBjaGFubmVsOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHBvd2VyW0lXTF9NQVhfUkFURVNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19pbmZvIHsKLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCXU4IHRyeV9jbnQ7Ci0JdTggbmV4dF9yYXRlX2luZGV4OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKLSAqCi0gKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKLSAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCi0gKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKLSAqIG1hc2tzLCBldGMuCi0gKgotICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAotICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKLSAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgotICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKLQl1OCB0YWJsZV9pZDsKLQl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfQlRfQ09ORklHID0gMHg5YiAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIDM5NDUgYW5kIDQ5NjUgc3VwcG9ydCBoYXJkd2FyZSBoYW5kc2hha2Ugd2l0aCBCbHVldG9vdGggZGV2aWNlIG9uCi0gKiBzYW1lIHBsYXRmb3JtLiAgQmx1ZXRvb3RoIGRldmljZSBhbGVydHMgd2lyZWxlc3MgZGV2aWNlIHdoZW4gaXQgd2lsbCBUeDsKLSAqIHdpcmVsZXNzIGRldmljZSBjYW4gZGVsYXkgb3Iga2lsbCBpdHMgb3duIFR4IHRvIGFjY29tbW9kYXRlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9idF9jbWQgewotCXU4IGZsYWdzOwotCXU4IGxlYWRfdGltZTsKLQl1OCBtYXhfa2lsbDsKLQl1OCByZXNlcnZlZDsKLQlfX2xlMzIga2lsbF9hY2tfbWFzazsKLQlfX2xlMzIga2lsbF9jdHNfbWFzazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNikKLSAqIFNwZWN0cnVtIE1hbmFnZW1lbnQgKDgwMi4xMWgpIENvbW1hbmRzLCBSZXNwb25zZXMsIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU3BlY3RydW0gTWFuYWdlbWVudAotICovCi0jZGVmaW5lIE1FQVNVUkVNRU5UX0ZJTFRFUl9GTEFHIChSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyAgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSyAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0sgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9ESVNfR1JQX0RFQ1JZUFRfTVNLIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgICAgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSykKLQotc3RydWN0IGl3bDM5NDVfbWVhc3VyZV9jaGFubmVsIHsKLQlfX2xlMzIgZHVyYXRpb247CS8qIG1lYXN1cmVtZW50IGR1cmF0aW9uIGluIGV4dGVuZGVkIGJlYWNvbgotCQkJCSAqIGZvcm1hdCAqLwotCXU4IGNoYW5uZWw7CQkvKiBjaGFubmVsIHRvIG1lYXN1cmUgKi8KLQl1OCB0eXBlOwkJLyogc2VlIGVudW0gaXdsMzk0NV9tZWFzdXJlX3R5cGUgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCA9IDB4NzQgKGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX2NtZCB7Ci0JX19sZTE2IGxlbjsJCS8qIG51bWJlciBvZiBieXRlcyBzdGFydGluZyBmcm9tIHRva2VuICovCi0JdTggdG9rZW47CQkvKiB0b2tlbiBpZCAqLwotCXU4IGlkOwkJCS8qIG1lYXN1cmVtZW50IGlkIC0tIDAgb3IgMSAqLwotCXU4IG9yaWdpbjsJCS8qIDAgPSBUR2gsIDEgPSBvdGhlciwgMiA9IFRHayAqLwotCXU4IHBlcmlvZGljOwkJLyogMSA9IHBlcmlvZGljICovCi0JX19sZTE2IHBhdGhfbG9zc190aW1lb3V0OwotCV9fbGUzMiBzdGFydF90aW1lOwkvKiBzdGFydCB0aW1lIGluIGV4dGVuZGVkIGJlYWNvbiBmb3JtYXQgKi8KLQlfX2xlMzIgcmVzZXJ2ZWQyOwotCV9fbGUzMiBmbGFnczsJCS8qIHJ4b24gZmxhZ3MgKi8KLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwkvKiByeG9uIGZpbHRlciBmbGFncyAqLwotCV9fbGUxNiBjaGFubmVsX2NvdW50OwkvKiBtaW5pbXVtIDEsIG1heGltdW0gMTAgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQzOwotCXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVfY2hhbm5lbCBjaGFubmVsc1sxMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCA9IDB4NzQgKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9yZXNwIHsKLQl1OCB0b2tlbjsKLQl1OCBpZDsJCQkvKiBpZCBvZiB0aGUgcHJpb3IgY29tbWFuZCByZXBsYWNlZCwgb3IgMHhmZiAqLwotCV9fbGUxNiBzdGF0dXM7CQkvKiAwIC0gY29tbWFuZCB3aWxsIGJlIGhhbmRsZWQKLQkJCQkgKiAxIC0gY2Fubm90IGhhbmRsZSAoY29uZmxpY3RzIHdpdGggYW5vdGhlcgotCQkJCSAqICAgICBtZWFzdXJlbWVudCkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIGl3bDM5NDVfbWVhc3VyZW1lbnRfc3RhdGUgewotCUlXTF9NRUFTVVJFTUVOVF9TVEFSVCA9IDAsCi0JSVdMX01FQVNVUkVNRU5UX1NUT1AgPSAxLAotfTsKLQotZW51bSBpd2wzOTQ1X21lYXN1cmVtZW50X3N0YXR1cyB7Ci0JSVdMX01FQVNVUkVNRU5UX09LID0gMCwKLQlJV0xfTUVBU1VSRU1FTlRfQ09OQ1VSUkVOVCA9IDEsCi0JSVdMX01FQVNVUkVNRU5UX0NTQV9DT05GTElDVCA9IDIsCi0JSVdMX01FQVNVUkVNRU5UX1RHSF9DT05GTElDVCA9IDMsCi0JLyogNC01IHJlc2VydmVkICovCi0JSVdMX01FQVNVUkVNRU5UX1NUT1BQRUQgPSA2LAotCUlXTF9NRUFTVVJFTUVOVF9USU1FT1VUID0gNywKLQlJV0xfTUVBU1VSRU1FTlRfUEVSSU9ESUNfRkFJTEVEID0gOCwKLX07Ci0KLSNkZWZpbmUgTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTSA4Ci0KLXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2hpc3RvZ3JhbSB7Ci0JX19sZTMyIG9mZG1bTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTV07CS8qIGluIDAuOHVzZWMgY291bnRzICovCi0JX19sZTMyIGNja1tOVU1fRUxFTUVOVFNfSU5fSElTVE9HUkFNXTsJLyogaW4gMXVzZWMgY291bnRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogY2xlYXIgY2hhbm5lbCBhdmFpbGFiaWxpdHkgY291bnRlcnMgKi8KLXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2NjYV9jb3VudGVycyB7Ci0JX19sZTMyIG9mZG07Ci0JX19sZTMyIGNjazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIGl3bDM5NDVfbWVhc3VyZV90eXBlIHsKLQlJV0xfTUVBU1VSRV9CQVNJQyA9ICgxIDw8IDApLAotCUlXTF9NRUFTVVJFX0NIQU5ORUxfTE9BRCA9ICgxIDw8IDEpLAotCUlXTF9NRUFTVVJFX0hJU1RPR1JBTV9SUEkgPSAoMSA8PCAyKSwKLQlJV0xfTUVBU1VSRV9ISVNUT0dSQU1fTk9JU0UgPSAoMSA8PCAzKSwKLQlJV0xfTUVBU1VSRV9GUkFNRSA9ICgxIDw8IDQpLAotCS8qIGJpdHMgNTo2IGFyZSByZXNlcnZlZCAqLwotCUlXTF9NRUFTVVJFX0lETEUgPSAoMSA8PCA3KSwKLX07Ci0KLS8qCi0gKiBTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTiA9IDB4NzUgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9ub3RpZmljYXRpb24gewotCXU4IGlkOwkJCS8qIG1lYXN1cmVtZW50IGlkIC0tIDAgb3IgMSAqLwotCXU4IHRva2VuOwotCXU4IGNoYW5uZWxfaW5kZXg7CS8qIGluZGV4IGluIG1lYXN1cmVtZW50IGNoYW5uZWwgbGlzdCAqLwotCXU4IHN0YXRlOwkJLyogMCAtIHN0YXJ0LCAxIC0gc3RvcCAqLwotCV9fbGUzMiBzdGFydF90aW1lOwkvKiBsb3dlciAzMi1iaXRzIG9mIFRTRiAqLwotCXU4IGJhbmQ7CQkvKiAwIC0gNS4yR0h6LCAxIC0gMi40R0h6ICovCi0JdTggY2hhbm5lbDsKLQl1OCB0eXBlOwkJLyogc2VlIGVudW0gaXdsMzk0NV9tZWFzdXJlbWVudF90eXBlICovCi0JdTggcmVzZXJ2ZWQxOwotCS8qIE5PVEU6ICBjY2Ffb2ZkbSwgY2NhX2NjaywgYmFzaWNfdHlwZSwgYW5kIGhpc3RvZ3JhbSBhcmUgb25seSBvbmx5Ci0JICogdmFsaWQgaWYgYXBwbGljYWJsZSBmb3IgbWVhc3VyZW1lbnQgdHlwZSByZXF1ZXN0ZWQuICovCi0JX19sZTMyIGNjYV9vZmRtOwkvKiBjY2EgZnJhY3Rpb24gdGltZSBpbiA0ME1oeiBjbG9jayBwZXJpb2RzICovCi0JX19sZTMyIGNjYV9jY2s7CQkvKiBjY2EgZnJhY3Rpb24gdGltZSBpbiA0NE1oeiBjbG9jayBwZXJpb2RzICovCi0JX19sZTMyIGNjYV90aW1lOwkvKiBjaGFubmVsIGxvYWQgdGltZSBpbiB1c2VjcyAqLwotCXU4IGJhc2ljX3R5cGU7CQkvKiAwIC0gYnNzLCAxIC0gb2ZkbSBwcmVhbWJsZSwgMiAtCi0JCQkJICogdW5pZGVudGlmaWVkICovCi0JdTggcmVzZXJ2ZWQyWzNdOwotCXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2hpc3RvZ3JhbSBoaXN0b2dyYW07Ci0JX19sZTMyIHN0b3BfdGltZTsJLyogbG93ZXIgMzItYml0cyBvZiBUU0YgKi8KLQlfX2xlMzIgc3RhdHVzOwkJLyogc2VlIGl3bDM5NDVfbWVhc3VyZW1lbnRfc3RhdHVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDcpCi0gKiBQb3dlciBNYW5hZ2VtZW50IENvbW1hbmRzLCBSZXNwb25zZXMsIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIC0gUG93ZXIgVGFibGUgQ29tbWFuZAotICogQGZsYWdzOiBTZWUgYmVsb3c6Ci0gKgotICogUE9XRVJfVEFCTEVfQ01EID0gMHg3NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIFBNIGFsbG93OgotICogICBiaXQgMCAtICcwJyBEcml2ZXIgbm90IGFsbG93IHBvd2VyIG1hbmFnZW1lbnQKLSAqICAgICAgICAgICAnMScgRHJpdmVyIGFsbG93IFBNICh1c2UgcmVzdCBvZiBwYXJhbWV0ZXJzKQotICogdUNvZGUgc2VuZCBzbGVlcCBub3RpZmljYXRpb25zOgotICogICBiaXQgMSAtICcwJyBEb24ndCBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbgotICogICAgICAgICAgICcxJyBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbiAoU0VORF9QTV9OT1RJRklDQVRJT04pCi0gKiBTbGVlcCBvdmVyIERUSU0KLSAqICAgYml0IDIgLSAnMCcgUE0gaGF2ZSB0byB3YWxrIHVwIGV2ZXJ5IERUSU0KLSAqICAgICAgICAgICAnMScgUE0gY291bGQgc2xlZXAgb3ZlciBEVElNIHRpbGwgbGlzdGVuIEludGVydmFsLgotICogUENJIHBvd2VyIG1hbmFnZWQKLSAqICAgYml0IDMgLSAnMCcgKFBDSV9MSU5LX0NUUkwgJiAweDEpCi0gKiAgICAgICAgICAgJzEnICEoUENJX0xJTktfQ1RSTCAmIDB4MSkKLSAqIEZvcmNlIHNsZWVwIE1vZGVzCi0gKiAgIGJpdCAzMS8zMC0gJzAwJyB1c2UgYm90aCBtYWMveHRhbCBzbGVlcHMKLSAqICAgICAgICAgICAgICAnMDEnIGZvcmNlIE1hYyBzbGVlcAotICogICAgICAgICAgICAgICcxMCcgZm9yY2UgeHRhbCBzbGVlcAotICogICAgICAgICAgICAgICcxMScgSWxsZWdhbCBzZXQKLSAqCi0gKiBOT1RFOiBpZiBzbGVlcF9pbnRlcnZhbFtTTEVFUF9JTlRSVkxfVEFCTEVfU0laRS0xXSA+IERUSU0gcGVyaW9kIHRoZW4KLSAqIHVjb2RlIGFzc3VtZSBzbGVlcCBvdmVyIERUSU0gaXMgYWxsb3dlZCBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3YWtldXAKLSAqIGZvciBldmVyeSBEVElNLgotICovCi0jZGVmaW5lIElXTF9QT1dFUl9WRUNfU0laRSA1Ci0KLSNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMzIoMSA8PCAwKQotI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyKQotI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTMyKDEgPDwgMykKLXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKLQlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OwotCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyoKLSAqIFBNX1NMRUVQX05PVElGSUNBVElPTiA9IDB4N0EgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICogMzk0NSBhbmQgNDk2NSBpZGVudGljYWwuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiB7Ci0JdTggcG1fc2xlZXBfbW9kZTsKLQl1OCBwbV93YWtldXBfc3JjOwotCV9fbGUxNiByZXNlcnZlZDsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgYmNvbl90aW1lcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBTbGVlcCBzdGF0ZXMuICAzOTQ1IGFuZCA0OTY1IGlkZW50aWNhbC4gKi8KLWVudW0gewotCUlXTF9QTV9OT19TTEVFUCA9IDAsCi0JSVdMX1BNX1NMUF9NQUMgPSAxLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfVU5BU1NPQ0lBVEUgPSAyLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfQ0FSRF9TVEFURSA9IDMsCi0JSVdMX1BNX1NMUF9QSFkgPSA0LAotCUlXTF9QTV9TTFBfUkVQRU5UID0gNSwKLQlJV0xfUE1fV0FLRVVQX0JZX1RJTUVSID0gNiwKLQlJV0xfUE1fV0FLRVVQX0JZX0RSSVZFUiA9IDcsCi0JSVdMX1BNX1dBS0VVUF9CWV9SRktJTEwgPSA4LAotCS8qIDMgcmVzZXJ2ZWQgKi8KLQlJV0xfUE1fTlVNX09GX01PREVTID0gMTIsCi19OwotCi0vKgotICogUkVQTFlfQ0FSRF9TVEFURV9DTUQgPSAweGEwIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfRElTQUJMRSAweDAwCS8qIFB1dCBjYXJkIHRvIHNsZWVwICovCi0jZGVmaW5lIENBUkRfU1RBVEVfQ01EX0VOQUJMRSAgMHgwMQkvKiBXYWtlIHVwIGNhcmQgKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfSEFMVCAgICAweDAyCS8qIFBvd2VyIGRvd24gcGVybWFuZW50bHkgKi8KLXN0cnVjdCBpd2wzOTQ1X2NhcmRfc3RhdGVfY21kIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogQ0FSRF9TVEFURV9DTURfKiByZXF1ZXN0IG5ldyBwb3dlciBzdGF0ZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBDQVJEX1NUQVRFX05PVElGSUNBVElPTiA9IDB4YTEgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jYXJkX3N0YXRlX25vdGlmIHsKLQlfX2xlMzIgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBIV19DQVJEX0RJU0FCTEVEICAgMHgwMQotI2RlZmluZSBTV19DQVJEX0RJU0FCTEVEICAgMHgwMgotI2RlZmluZSBSRl9DQVJEX0RJU0FCTEVEICAgMHgwNAotI2RlZmluZSBSWE9OX0NBUkRfRElTQUJMRUQgMHgxMAotCi1zdHJ1Y3QgaXdsMzk0NV9jdF9raWxsX2NvbmZpZyB7Ci0JX19sZTMyICAgcmVzZXJ2ZWQ7Ci0JX19sZTMyICAgY3JpdGljYWxfdGVtcGVyYXR1cmVfTTsKLQlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9SOwotfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOCkKLSAqIFNjYW4gQ29tbWFuZHMsIFJlc3BvbnNlcywgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIC0gZW50cnkgaW4gUkVQTFlfU0NBTl9DTUQgY2hhbm5lbCB0YWJsZQotICoKLSAqIE9uZSBmb3IgZWFjaCBjaGFubmVsIGluIHRoZSBzY2FuIGxpc3QuCi0gKiBFYWNoIGNoYW5uZWwgY2FuIGluZGVwZW5kZW50bHkgc2VsZWN0OgotICogMSkgIFNTSUQgZm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucwotICogMikgIFR4cG93ZXIgc2V0dGluZyAoZm9yIHJhdGUgc3BlY2lmaWVkIHdpdGhpbiBUeCBjb21tYW5kKQotICogMykgIEhvdyBsb25nIHRvIHN0YXkgb24tY2hhbm5lbCAoYmVoYXZpb3IgbWF5IGJlIG1vZGlmaWVkIGJ5IHF1aWV0X3RpbWUsCi0gKiAgICAgcXVpZXRfcGxjcF90aCwgZ29vZF9DUkNfdGgpCi0gKgotICogVG8gYXZvaWQgdUNvZGUgZXJyb3JzLCBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZSAoc2VlIGNvbW1lbnRzCi0gKiB1bmRlciBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCBhYm91dCBtYXhfb3V0X3RpbWUgYW5kIHF1aWV0X3RpbWUpOgotICogMSkgIElmIHVzaW5nIHBhc3NpdmVfZHdlbGwgKGkuZS4gcGFzc2l2ZV9kd2VsbCAhPSAwKToKLSAqICAgICBhY3RpdmVfZHdlbGwgPD0gcGFzc2l2ZV9kd2VsbCAoPCBtYXhfb3V0X3RpbWUgaWYgbWF4X291dF90aW1lICE9IDApCi0gKiAyKSAgcXVpZXRfdGltZSA8PSBhY3RpdmVfZHdlbGwKLSAqIDMpICBJZiByZXN0cmljdGluZyBvZmYtY2hhbm5lbCB0aW1lIChpLmUuIG1heF9vdXRfdGltZSAhPTApOgotICogICAgIHBhc3NpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqICAgICBhY3RpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqLwotc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIHsKLQkvKgotCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKLQkgKiAwOjAgMSA9IGFjdGl2ZSwgMCA9IHBhc3NpdmUKLQkgKiAxOjQgU1NJRCBkaXJlY3QgYml0IG1hcDsgaWYgYSBiaXQgaXMgc2V0LCB0aGVuIGNvcnJlc3BvbmRpbmcKLQkgKiAgICAgU1NJRCBJRSBpcyB0cmFuc21pdHRlZCBpbiBwcm9iZSByZXF1ZXN0LgotCSAqIDU6NyByZXNlcnZlZAotCSAqLwotCXU4IHR5cGU7Ci0JdTggY2hhbm5lbDsJLyogYmFuZCBpcyBzZWxlY3RlZCBieSBpd2wzOTQ1X3NjYW5fY21kICJmbGFncyIgZmllbGQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7Ci0JX19sZTE2IGFjdGl2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDUtNTAgKi8KLQlfX2xlMTYgcGFzc2l2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDIwLTUwMCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc3NpZF9pZSAtIGRpcmVjdGVkIHNjYW4gbmV0d29yayBpbmZvcm1hdGlvbiBlbGVtZW50Ci0gKgotICogVXAgdG8gNCBvZiB0aGVzZSBtYXkgYXBwZWFyIGluIFJFUExZX1NDQU5fQ01ELCBzZWxlY3RlZCBieSAidHlwZSIgZmllbGQKLSAqIGluIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbDsgZWFjaCBjaGFubmVsIG1heSBzZWxlY3QgZGlmZmVyZW50IHNzaWRzIGZyb20KLSAqIGFtb25nIHRoZSA0IGVudHJpZXMuICBTU0lEIElFcyBnZXQgdHJhbnNtaXR0ZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBlbnRyeS4KLSAqLwotc3RydWN0IGl3bDM5NDVfc3NpZF9pZSB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IHNzaWRbMzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUFJPQkVfT1BUSU9OX01BWCAgICAgICAgMHg0Ci0jZGVmaW5lIFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEUJY3B1X3RvX2xlMzIoMHhGRkZGRkZGRikKLSNkZWZpbmUgSVdMX0dPT0RfQ1JDX1RICQljcHVfdG9fbGUxNigxKQotI2RlZmluZSBJV0xfTUFYX1NDQU5fU0laRSAxMDI0Ci0KLS8qCi0gKiBSRVBMWV9TQ0FOX0NNRCA9IDB4ODAgKGNvbW1hbmQpCi0gKgotICogVGhlIGhhcmR3YXJlIHNjYW4gY29tbWFuZCBpcyB2ZXJ5IHBvd2VyZnVsOyB0aGUgZHJpdmVyIGNhbiBzZXQgaXQgdXAgdG8KLSAqIG1haW50YWluIChyZWxhdGl2ZWx5KSBub3JtYWwgbmV0d29yayB0cmFmZmljIHdoaWxlIGRvaW5nIGEgc2NhbiBpbiB0aGUKLSAqIGJhY2tncm91bmQuICBUaGUgbWF4X291dF90aW1lIGFuZCBzdXNwZW5kX3RpbWUgY29udHJvbCB0aGUgcmF0aW8gb2YgaG93Ci0gKiBsb25nIHRoZSBkZXZpY2Ugc3RheXMgb24gYW4gYXNzb2NpYXRlZCBuZXR3b3JrIGNoYW5uZWwgKCJzZXJ2aWNlIGNoYW5uZWwiKQotICogdnMuIGhvdyBsb25nIGl0J3MgYXdheSBmcm9tIHRoZSBzZXJ2aWNlIGNoYW5uZWwsIHR1bmVkIHRvIG90aGVyIGNoYW5uZWxzCi0gKiBmb3Igc2Nhbm5pbmcuCi0gKgotICogbWF4X291dF90aW1lIGlzIHRoZSBtYXggdGltZSBvZmYtY2hhbm5lbCAoaW4gdXNlYyksIGFuZCBzdXNwZW5kX3RpbWUKLSAqIGlzIGhvdyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uIiBmb3JtYXQpIHRoYXQgdGhlIHNjYW4gaXMgInN1c3BlbmRlZCIKLSAqIGFmdGVyIHJldHVybmluZyB0byB0aGUgc2VydmljZSBjaGFubmVsLiAgVGhhdCBpcywgc3VzcGVuZF90aW1lIGlzIHRoZQotICogdGltZSB0aGF0IHdlIHN0YXkgb24gdGhlIHNlcnZpY2UgY2hhbm5lbCwgZG9pbmcgbm9ybWFsIHdvcmssIGJldHdlZW4KLSAqIHNjYW4gc2VnbWVudHMuICBUaGUgZHJpdmVyIG1heSBzZXQgdGhlc2UgcGFyYW1ldGVycyBkaWZmZXJlbnRseSB0byBzdXBwb3J0Ci0gKiBzY2FubmluZyB3aGVuIGFzc29jaWF0ZWQgdnMuIG5vdCBhc3NvY2lhdGVkLCBhbmQgbGlnaHQgdnMuIGhlYXZ5IHRyYWZmaWMKLSAqIGxvYWRzIHdoZW4gYXNzb2NpYXRlZC4KLSAqCi0gKiBBZnRlciByZWNlaXZpbmcgdGhpcyBjb21tYW5kLCB0aGUgZGV2aWNlJ3Mgc2NhbiBlbmdpbmUgZG9lcyB0aGUgZm9sbG93aW5nOwotICoKLSAqIDEpICBTZW5kcyBTQ0FOX1NUQVJUIG5vdGlmaWNhdGlvbiB0byBkcml2ZXIKLSAqIDIpICBDaGVja3MgdG8gc2VlIGlmIGl0IGhhcyB0aW1lIHRvIGRvIHNjYW4gZm9yIG9uZSBjaGFubmVsCi0gKiAzKSAgU2VuZHMgTlVMTCBwYWNrZXQsIHdpdGggcG93ZXItc2F2ZSAoUFMpIGJpdCBzZXQgdG8gMSwKLSAqICAgICB0byB0ZWxsIEFQIHRoYXQgd2UncmUgZ29pbmcgb2ZmLWNoYW5uZWwKLSAqIDQpICBUdW5lcyB0byBmaXJzdCBjaGFubmVsIGluIHNjYW4gbGlzdCwgZG9lcyBhY3RpdmUgb3IgcGFzc2l2ZSBzY2FuCi0gKiA1KSAgU2VuZHMgU0NBTl9SRVNVTFQgbm90aWZpY2F0aW9uIHRvIGRyaXZlcgotICogNikgIENoZWNrcyB0byBzZWUgaWYgaXQgaGFzIHRpbWUgdG8gZG8gc2NhbiBvbiAqbmV4dCogY2hhbm5lbCBpbiBsaXN0Ci0gKiA3KSAgUmVwZWF0cyA0LTYgdW50aWwgaXQgbm8gbG9uZ2VyIGhhcyB0aW1lIHRvIHNjYW4gdGhlIG5leHQgY2hhbm5lbAotICogICAgIGJlZm9yZSBtYXhfb3V0X3RpbWUgZXhwaXJlcwotICogOCkgIFJldHVybnMgdG8gc2VydmljZSBjaGFubmVsCi0gKiA5KSAgU2VuZHMgTlVMTCBwYWNrZXQgd2l0aCBQUz0wIHRvIHRlbGwgQVAgdGhhdCB3ZSdyZSBiYWNrCi0gKiAxMCkgU3RheXMgb24gc2VydmljZSBjaGFubmVsIHVudGlsIHN1c3BlbmRfdGltZSBleHBpcmVzCi0gKiAxMSkgUmVwZWF0cyBlbnRpcmUgcHJvY2VzcyAyLTEwIHVudGlsIGxpc3QgaXMgY29tcGxldGUKLSAqIDEyKSBTZW5kcyBTQ0FOX0NPTVBMRVRFIG5vdGlmaWNhdGlvbgotICoKLSAqIEZvciBmYXN0LCBlZmZpY2llbnQgc2NhbnMsIHRoZSBzY2FuIGNvbW1hbmQgYWxzbyBoYXMgc3VwcG9ydCBmb3Igc3RheWluZyBvbgotICogYSBjaGFubmVsIGZvciBqdXN0IGEgc2hvcnQgdGltZSwgaWYgZG9pbmcgYWN0aXZlIHNjYW5uaW5nIGFuZCBnZXR0aW5nIG5vCi0gKiByZXNwb25zZXMgdG8gdGhlIHRyYW5zbWl0dGVkIHByb2JlIHJlcXVlc3QuICBUaGlzIHRpbWUgaXMgY29udHJvbGxlZCBieQotICogcXVpZXRfdGltZSwgYW5kIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBiZWxvdyB3aGljaCBhIGNoYW5uZWwgaXMKLSAqIGNvbnNpZGVyZWQgInF1aWV0IiBpcyBjb250cm9sbGVkIGJ5IHF1aWV0X3BsY3BfdGhyZXNob2xkLgotICoKLSAqIEZvciBhY3RpdmUgc2Nhbm5pbmcgb24gY2hhbm5lbHMgdGhhdCBoYXZlIHJlZ3VsYXRvcnkgcmVzdHJpY3Rpb25zIGFnYWluc3QKLSAqIGJsaW5kbHkgdHJhbnNtaXR0aW5nLCB0aGUgc2NhbiBjYW4gbGlzdGVuIGJlZm9yZSB0cmFuc21pdHRpbmcsIHRvIG1ha2Ugc3VyZQotICogdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGxlZ2l0aW1hdGUgYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwuICBJZiBlbm91Z2gKLSAqIHBhY2tldHMgYXJlIGNsZWFubHkgcmVjZWl2ZWQgb24gdGhlIGNoYW5uZWwgKGNvbnRyb2xsZWQgYnkgZ29vZF9DUkNfdGgsCi0gKiB0eXBpY2FsIHZhbHVlIDEpLCB0aGUgc2NhbiBlbmdpbmUgc3RhcnRzIHRyYW5zbWl0dGluZyBwcm9iZSByZXF1ZXN0cy4KLSAqCi0gKiBEcml2ZXIgbXVzdCB1c2Ugc2VwYXJhdGUgc2NhbiBjb21tYW5kcyBmb3IgMi40IHZzLiA1IEdIeiBiYW5kcy4KLSAqCi0gKiBUbyBhdm9pZCB1Q29kZSBlcnJvcnMsIHNlZSB0aW1pbmcgcmVzdHJpY3Rpb25zIGRlc2NyaWJlZCB1bmRlcgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7Ci0JX19sZTE2IGxlbjsKLQl1OCByZXNlcnZlZDA7Ci0JdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KLQlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKLQkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCi0JX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLwotCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLwotCV9fbGUxNiByZXNlcnZlZDE7Ci0JX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCi0JCQkJICogY2hhbm5lbCAqLwotCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCi0JCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgotCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCi0JCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KLQkJCQkgKi8KLQlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCi0JX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLwotCi0JLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCi0JICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOwotCi0JLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCi0Jc3RydWN0IGl3bDM5NDVfc3NpZF9pZSBkaXJlY3Rfc2NhbltQUk9CRV9PUFRJT05fTUFYXTsKLQotCS8qCi0JICogUHJvYmUgcmVxdWVzdCBmcmFtZSwgZm9sbG93ZWQgYnkgY2hhbm5lbCBsaXN0LgotCSAqCi0JICogU2l6ZSBvZiBwcm9iZSByZXF1ZXN0IGZyYW1lIGlzIHNwZWNpZmllZCBieSBieXRlIGNvdW50IGluIHR4X2NtZC4KLQkgKiBDaGFubmVsIGxpc3QgZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciBwcm9iZSByZXF1ZXN0IGZyYW1lLgotCSAqIE51bWJlciBvZiBjaGFubmVscyBpbiBsaXN0IGlzIHNwZWNpZmllZCBieSBjaGFubmVsX2NvdW50LgotCSAqIEVhY2ggY2hhbm5lbCBpbiBsaXN0IGlzIG9mIHR5cGU6Ci0JICoKLQkgKiBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NoYW5uZWwgY2hhbm5lbHNbMF07Ci0JICoKLQkgKiBOT1RFOiAgT25seSBvbmUgYmFuZCBvZiBjaGFubmVscyBjYW4gYmUgc2Nhbm5lZCBwZXIgcGFzcy4gIFlvdQotCSAqIG11c3Qgbm90IG1peCAyLjRHSHogY2hhbm5lbHMgYW5kIDUuMkdIeiBjaGFubmVscywgYW5kIHlvdSBtdXN0IHdhaXQKLQkgKiBmb3Igb25lIHNjYW4gdG8gY29tcGxldGUgKGkuZS4gcmVjZWl2ZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTikKLQkgKiBiZWZvcmUgcmVxdWVzdGluZyBhbm90aGVyIHNjYW4uCi0JICovCi0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBDYW4gYWJvcnQgd2lsbCBub3RpZnkgYnkgY29tcGxldGUgbm90aWZpY2F0aW9uIHdpdGggYWJvcnQgc3RhdHVzLiAqLwotI2RlZmluZSBDQU5fQUJPUlRfU1RBVFVTCWNwdV90b19sZTMyKDB4MSkKLS8qIGNvbXBsZXRlIG5vdGlmaWNhdGlvbiBzdGF0dXNlcyAqLwotI2RlZmluZSBBQk9SVF9TVEFUVVMgICAgICAgICAgICAweDIKLQotLyoKLSAqIFJFUExZX1NDQU5fQ01EID0gMHg4MCAocmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogMTogb2theSwgMjogY2Fubm90IGZ1bGZpbGwgcmVxdWVzdCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTQ0FOX1NUQVJUX05PVElGSUNBVElPTiA9IDB4ODIgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci0JX19sZTMyIGJlYWNvbl90aW1lcjsKLQl1OCBjaGFubmVsOwotCXU4IGJhbmQ7Ci0JdTggcmVzZXJ2ZWRbMl07Ci0JX19sZTMyIHN0YXR1czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lICBTQ0FOX09XTkVSX1NUQVRVUyAweDE7Ci0jZGVmaW5lICBNRUFTVVJFX09XTkVSX1NUQVRVUyAweDI7Ci0KLSNkZWZpbmUgTlVNQkVSX09GX1NUQVRJU1RJQ1MgMQkvKiBmaXJzdCBfX2xlMzIgaXMgZ29vZCBDUkMgKi8KLS8qCi0gKiBTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OID0gMHg4MyAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiB7Ci0JdTggY2hhbm5lbDsKLQl1OCBiYW5kOwotCXU4IHJlc2VydmVkWzJdOwotCV9fbGUzMiB0c2ZfbG93OwotCV9fbGUzMiB0c2ZfaGlnaDsKLQlfX2xlMzIgc3RhdGlzdGljc1tOVU1CRVJfT0ZfU1RBVElTVElDU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gMHg4NCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gewotCXU4IHNjYW5uZWRfY2hhbm5lbHM7Ci0JdTggc3RhdHVzOwotCXU4IHJlc2VydmVkOwotCXU4IGxhc3RfY2hhbm5lbDsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOSkKLSAqIElCU1MvQVAgQ29tbWFuZHMgYW5kIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogQkVBQ09OX05PVElGSUNBVElPTiA9IDB4OTAgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4OwotCV9fbGUxNiB0aW1faWR4OwotCXU4IHRpbV9zaXplOwotCXU4IHJlc2VydmVkMTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBmcmFtZVswXTsJLyogYmVhY29uIGZyYW1lICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEwKQotICogU3RhdGlzdGljcyBDb21tYW5kcyBhbmQgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSVdMX1RFTVBfQ09OVkVSVCAyNjAKLQotI2RlZmluZSBTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMUyAgOAotI2RlZmluZSBTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMUyAgNAotI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKLQotLyogVXNlZCBmb3IgcGFzc2luZyB0byBkcml2ZXIgbnVtYmVyIG9mIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgcGVyIHJhdGUgKi8KLXN0cnVjdCByYXRlX2hpc3RvZ3JhbSB7Ci0JdW5pb24gewotCQlfX2xlMzIgYVtTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMU107Ci0JCV9fbGUzMiBiW1NVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGdbU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFNdOwotCX0gc3VjY2VzczsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBhW1NVUF9SQVRFXzExQV9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGJbU1VQX1JBVEVfMTFCX01BWF9OVU1fQ0hBTk5FTFNdOwotCQlfX2xlMzIgZ1tTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMU107Ci0JfSBmYWlsZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogc3RhdGlzdGljcyBjb21tYW5kIHJlc3BvbnNlICovCi0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7Ci0JX19sZTMyIGluYV9jbnQ7Ci0JX19sZTMyIGZpbmFfY250OwotCV9fbGUzMiBwbGNwX2VycjsKLQlfX2xlMzIgY3JjMzJfZXJyOwotCV9fbGUzMiBvdmVycnVuX2VycjsKLQlfX2xlMzIgZWFybHlfb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGNyYzMyX2dvb2Q7Ci0JX19sZTMyIGZhbHNlX2FsYXJtX2NudDsKLQlfX2xlMzIgZmluYV9zeW5jX2Vycl9jbnQ7Ci0JX19sZTMyIHNmZF90aW1lb3V0OwotCV9fbGUzMiBmaW5hX3RpbWVvdXQ7Ci0JX19sZTMyIHVucmVzcG9uZGVkX3J0czsKLQlfX2xlMzIgcnhlX2ZyYW1lX2xpbWl0X292ZXJydW47Ci0JX19sZTMyIHNlbnRfYWNrX2NudDsKLQlfX2xlMzIgc2VudF9jdHNfY250OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgewotCV9fbGUzMiBib2d1c19jdHM7CS8qIENUUyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQ1RTICovCi0JX19sZTMyIGJvZ3VzX2FjazsJLyogQUNLIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBBQ0sgKi8KLQlfX2xlMzIgbm9uX2Jzc2lkX2ZyYW1lczsJLyogbnVtYmVyIG9mIGZyYW1lcyB3aXRoIEJTU0lEIHRoYXQKLQkJCQkJICogZG9lc24ndCBiZWxvbmcgdG8gdGhlIFNUQSBCU1NJRCAqLwotCV9fbGUzMiBmaWx0ZXJlZF9mcmFtZXM7CS8qIGNvdW50IGZyYW1lcyB0aGF0IHdlcmUgZHVtcGVkIGluIHRoZQotCQkJCSAqIGZpbHRlcmluZyBwcm9jZXNzICovCi0JX19sZTMyIG5vbl9jaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGJ1dCBub3Qgb24KLQkJCQkJICogb3VyIHNlcnZpbmcgY2hhbm5lbCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4IHsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgb2ZkbTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgY2NrOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc190eCB7Ci0JX19sZTMyIHByZWFtYmxlX2NudDsKLQlfX2xlMzIgcnhfZGV0ZWN0ZWRfY250OwotCV9fbGUzMiBidF9wcmlvX2RlZmVyX2NudDsKLQlfX2xlMzIgYnRfcHJpb19raWxsX2NudDsKLQlfX2xlMzIgZmV3X2J5dGVzX2NudDsKLQlfX2xlMzIgY3RzX3RpbWVvdXQ7Ci0JX19sZTMyIGFja190aW1lb3V0OwotCV9fbGUzMiBleHBlY3RlZF9hY2tfY250OwotCV9fbGUzMiBhY3R1YWxfYWNrX2NudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19kYmcgewotCV9fbGUzMiBidXJzdF9jaGVjazsKLQlfX2xlMzIgYnVyc3RfY291bnQ7Ci0JX19sZTMyIHJlc2VydmVkWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX2RpdiB7Ci0JX19sZTMyIHR4X29uX2E7Ci0JX19sZTMyIHR4X29uX2I7Ci0JX19sZTMyIGV4ZWNfdGltZTsKLQlfX2xlMzIgcHJvYmVfdGltZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsIHsKLQlfX2xlMzIgdGVtcGVyYXR1cmU7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGJnIGRiZzsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgc2xvdHNfb3V0OwotCV9fbGUzMiBzbG90c19pZGxlOwotCV9fbGUzMiB0dGxfdGltZXN0YW1wOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RpdiBkaXY7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NUQVRJU1RJQ1NfQ01EID0gMHg5YywKLSAqIDM5NDUgYW5kIDQ5NjUgaWRlbnRpY2FsLgotICoKLSAqIFRoaXMgY29tbWFuZCB0cmlnZ2VycyBhbiBpbW1lZGlhdGUgcmVzcG9uc2UgY29udGFpbmluZyB1Q29kZSBzdGF0aXN0aWNzLgotICogVGhlIHJlc3BvbnNlIGlzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBTVEFUSVNUSUNTX05PVElGSUNBVElPTiAweDlkLCBiZWxvdy4KLSAqCi0gKiBJZiB0aGUgQ0xFQVJfU1RBVFMgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBjbGVhciBpdHMKLSAqIGludGVybmFsIGNvcHkgb2YgdGhlIHN0YXRpc3RpY3MgKGNvdW50ZXJzKSBhZnRlciBpc3N1aW5nIHRoZSByZXNwb25zZS4KLSAqIFRoaXMgZmxhZyBkb2VzIG5vdCBhZmZlY3QgU1RBVElTVElDU19OT1RJRklDQVRJT05zIGFmdGVyIGJlYWNvbnMgKHNlZSBiZWxvdykuCi0gKgotICogSWYgdGhlIERJU0FCTEVfTk9USUYgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBub3QgaXNzdWUKLSAqIFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OcyBhZnRlciByZWNlaXZlZCBiZWFjb25zIChzZWUgYmVsb3cpLiAgVGhpcyBmbGFnCi0gKiBkb2VzIG5vdCBhZmZlY3QgdGhlIHJlc3BvbnNlIHRvIHRoZSBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljIGl0c2VsZi4KLSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9DTEVBUl9TVEFUUyBjcHVfdG9fbGUzMigweDEpCS8qIHNlZSBhYm92ZSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9ESVNBQkxFX05PVElGIGNwdV90b19sZTMyKDB4MikvKiBzZWUgYWJvdmUgKi8KLXN0cnVjdCBpd2wzOTQ1X3N0YXRpc3RpY3NfY21kIHsKLQlfX2xlMzIgY29uZmlndXJhdGlvbl9mbGFnczsJLyogSVdMX1NUQVRTX0NPTkZfKiAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIEJ5IGRlZmF1bHQsIHVDb2RlIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBiZWFjb24KLSAqIHdoaWxlIGFzc29jaWF0ZWQuICBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsIHNldCBESVNBQkxFX05PVElGIGZsYWcgaW4gdGhlCi0gKiBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljLCBhYm92ZS4KLSAqCi0gKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbnRpbnVlIHRvIGluY3JlbWVudCBiZWFjb24gYWZ0ZXIgYmVhY29uLCBidXQgYXJlCi0gKiBjbGVhcmVkIHdoZW4gY2hhbmdpbmcgY2hhbm5lbHMgb3Igd2hlbiBkcml2ZXIgaXNzdWVzIFJFUExZX1NUQVRJU1RJQ1NfQ01ECi0gKiAweDljIHdpdGggQ0xFQVJfU1RBVFMgYml0IHNldCAoc2VlIGFib3ZlKS4KLSAqCi0gKiB1Q29kZSBhbHNvIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBkdXJpbmcgc2NhbnMuICB1Q29kZSBjbGVhcnMgc3RhdGlzdGljcwotICogYXBwcm9wcmlhdGVseSBzbyB0aGF0IGVhY2ggbm90aWZpY2F0aW9uIGNvbnRhaW5zIHN0YXRpc3RpY3MgZm9yIG9ubHkgdGhlCi0gKiBvbmUgY2hhbm5lbCB0aGF0IGhhcyBqdXN0IGJlZW4gc2Nhbm5lZC4KLSAqLwotI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0sgICAgICAgICBjcHVfdG9fbGUzMigweDIpCi0jZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4OCkKLXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgewotCV9fbGUzMiBmbGFnOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4IHJ4OwotCXN0cnVjdCBzdGF0aXN0aWNzX3R4IHR4OwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qCi0gKiBNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04gPSAweGEyIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotLyogaWYgdWNvZGUgbWlzc2VkIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCBiZWFjb25zIGluIGEgcm93LAotICogdGhlbiB0aGlzIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQuICovCi0jZGVmaW5lIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCAyMAotCi1zdHJ1Y3QgaXdsMzk0NV9taXNzZWRfYmVhY29uX25vdGlmIHsKLQlfX2xlMzIgY29uc2VxdXRpdmVfbWlzc2VkX2JlYWNvbnM7Ci0JX19sZTMyIHRvdGFsX21pc3NlZF9iZWNvbnM7Ci0JX19sZTMyIG51bV9leHBlY3RlZF9iZWFjb25zOwotCV9fbGUzMiBudW1fcmVjdmRfYmVhY29uczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMTEpCi0gKiBSeCBDYWxpYnJhdGlvbiBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgUEhZX0NBTElCUkFURV9ESUZGX0dBSU5fQ01EICg3KQotI2RlZmluZSBIRF9UQUJMRV9TSVpFICAoMTEpCi0KLXN0cnVjdCBpd2wzOTQ1X3NlbnNpdGl2aXR5X2NtZCB7Ci0JX19sZTE2IGNvbnRyb2w7Ci0JX19sZTE2IHRhYmxlW0hEX1RBQkxFX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2wzOTQ1X2NhbGlicmF0aW9uX2NtZCB7Ci0JdTggb3BDb2RlOwotCXU4IGZsYWdzOwotCV9fbGUxNiByZXNlcnZlZDsKLQlzOCBkaWZmX2dhaW5fYTsKLQlzOCBkaWZmX2dhaW5fYjsKLQlzOCBkaWZmX2dhaW5fYzsKLQl1OCByZXNlcnZlZDE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEyKQotICogTWlzY2VsbGFuZW91cyBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBMRURzIENvbW1hbmQgJiBSZXNwb25zZQotICogUkVQTFlfTEVEU19DTUQgPSAweDQ4IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogRm9yIGVhY2ggb2YgMyBwb3NzaWJsZSBMRURzIChBY3Rpdml0eS9MaW5rL1RlY2gsIHNlbGVjdGVkIGJ5ICJpZCIgZmllbGQpLAotICogdGhpcyBjb21tYW5kIHR1cm5zIGl0IG9uIG9yIG9mZiwgb3Igc2V0cyB1cCBhIHBlcmlvZGljIGJsaW5raW5nIGN5Y2xlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9sZWRfY21kIHsKLQlfX2xlMzIgaW50ZXJ2YWw7CS8qICJpbnRlcnZhbCIgaW4gdVNlYyAqLwotCXU4IGlkOwkJCS8qIDE6IEFjdGl2aXR5LCAyOiBMaW5rLCAzOiBUZWNoICovCi0JdTggb2ZmOwkJCS8qICMgaW50ZXJ2YWxzIG9mZiB3aGlsZSBibGlua2luZzsKLQkJCQkgKiAiMCIsIHdpdGggPjAgIm9uIiB2YWx1ZSwgdHVybnMgTEVEIG9uICovCi0JdTggb247CQkJLyogIyBpbnRlcnZhbHMgb24gd2hpbGUgYmxpbmtpbmc7Ci0JCQkJICogIjAiLCByZWdhcmRsZXNzIG9mICJvZmYiLCB0dXJucyBMRUQgb2ZmICovCi0JdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEzKQotICogVW5pb24gb2YgYWxsIGV4cGVjdGVkIG5vdGlmaWNhdGlvbnMvcmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0IHsKLQlfX2xlMzIgbGVuOwotCXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKLQkJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgcnhfZnJhbWU7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgdHhfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIHNwZWN0cnVtX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9jc2Ffbm90aWZpY2F0aW9uIGNzYV9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfZXJyb3JfcmVzcCBlcnJfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfY2FyZF9zdGF0ZV9ub3RpZiBjYXJkX3N0YXRlX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgYmVhY29uX3N0YXR1czsKLQkJc3RydWN0IGl3bDM5NDVfYWRkX3N0YV9yZXNwIGFkZF9zdGE7Ci0JCXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiBzbGVlcF9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fcmVzcCBzcGVjdHJ1bTsKLQkJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0czsKLQkJX19sZTMyIHN0YXR1czsKLQkJdTggcmF3WzBdOwotCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIElXTF9SWF9GUkFNRV9TSVpFICAgICAgICAoNCArIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSkpCi0KLSNlbmRpZgkJCQkvKiBfX2l3bDM5NDVfMzk0NV9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlYjc3OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2l3bDM5NDVfZGVidWdfaF9fCi0jZGVmaW5lIF9faXdsMzk0NV9kZWJ1Z19oX18KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1leHRlcm4gdTMyIGl3bDM5NDVfZGVidWdfbGV2ZWw7Ci0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7IGlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAotICBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAotCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSAmJiBuZXRfcmF0ZWxpbWl0KCkpIFwKLSAgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKLXsKLQlpZiAoIShpd2wzOTQ1X2RlYnVnX2xldmVsICYgbGV2ZWwpKQotCQlyZXR1cm47Ci0KLQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiaXdsIGRhdGE6ICIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCi0JCQlwLCBsZW4sIDEpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUcoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUdfTElNSVQoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKLXsKLX0KLSNlbmRpZgkvKiBDT05GSUdfSVdMMzk0NV9ERUJVRyAqLwotCi0KLQotLyoKLSAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwotICoKLSAqIElmIHlvdSBhcmUgZGVmaW5pbmcgYSBuZXcgZGVidWcgY2xhc3NpZmljYXRpb24sIHNpbXBseSBhZGQgaXQgdG8gdGhlICNkZWZpbmUKLSAqIGxpc3QgaGVyZSBpbiB0aGUgZm9ybSBvZjoKLSAqCi0gKiAjZGVmaW5lIElXTF9ETF94eHh4IFZBTFVFCi0gKgotICogc2hpZnRpbmcgdmFsdWUgdG8gdGhlIGxlZnQgb25lIGJpdCBmcm9tIHRoZSBwcmV2aW91cyBlbnRyeS4gIHh4eHggc2hvdWxkIGJlCi0gKiB0aGUgbmFtZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gKGZvciBleGFtcGxlLCBXRVApCi0gKgotICogWW91IHRoZW4gbmVlZCB0byBlaXRoZXIgYWRkIGEgSVdMX3h4eHhfREVCVUcoKSBtYWNybyBkZWZpbml0aW9uIGZvciB5b3VyCi0gKiBjbGFzc2lmaWNhdGlvbiwgb3IgdXNlIElXTF9ERUJVRyhJV0xfRExfeHh4eCwgLi4uKSB3aGVuZXZlciB5b3Ugd2FudAotICogdG8gc2VuZCBvdXRwdXQgdG8gdGhhdCBjbGFzc2lmaWNhdGlvbi4KLSAqCi0gKiBUbyBhZGQgeW91ciBkZWJ1ZyBsZXZlbCB0byB0aGUgbGlzdCBvZiBsZXZlbHMgc2VlbiB3aGVuIHlvdSBwZXJmb3JtCi0gKgotICogJSBjYXQgL3Byb2MvbmV0L2l3bC9kZWJ1Z19sZXZlbAotICoKLSAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaXdsMzk0NV9kZWJ1Z19sZXZlbHMgYXJyYXkuCi0gKgotICogSWYgeW91IGRvIG5vdCBzZWUgZGVidWdfbGV2ZWwgaW4gL3Byb2MvbmV0L2l3bCB0aGVuIHlvdSBkbyBub3QgaGF2ZQotICogQ09ORklHX0lXTDM5NDVfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCi0gKgotICovCi0KLSNkZWZpbmUgSVdMX0RMX0lORk8gICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSVdMX0RMX01BQzgwMjExICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSVdMX0RMX0hPU1RfQ09NTUFORCAgKDEgPDwgMikKLSNkZWZpbmUgSVdMX0RMX1NUQVRFICAgICAgICAgKDEgPDwgMykKLQotI2RlZmluZSBJV0xfRExfUkFESU8gICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJV0xfRExfUE9XRVIgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJV0xfRExfVEVNUCAgICAgICAgICAoMSA8PCA5KQotCi0jZGVmaW5lIElXTF9ETF9OT1RJRiAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBJV0xfRExfU0NBTiAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSVdMX0RMX0FTU09DICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElXTF9ETF9EUk9QICAgICAgICAgICgxIDw8IDEzKQotCi0jZGVmaW5lIElXTF9ETF9UWFBPV0VSICAgICAgICgxIDw8IDE0KQotCi0jZGVmaW5lIElXTF9ETF9BUCAgICAgICAgICAgICgxIDw8IDE1KQotCi0jZGVmaW5lIElXTF9ETF9GVyAgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBJV0xfRExfUkZfS0lMTCAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgSVdMX0RMX0ZXX0VSUk9SUyAgICAgKDEgPDwgMTgpCi0KLSNkZWZpbmUgSVdMX0RMX0xFRCAgICAgICAgICAgKDEgPDwgMTkpCi0KLSNkZWZpbmUgSVdMX0RMX1JBVEUgICAgICAgICAgKDEgPDwgMjApCi0KLSNkZWZpbmUgSVdMX0RMX0NBTElCICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIElXTF9ETF9XRVAgICAgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBJV0xfRExfVFggICAgICAgICAgICAoMSA8PCAyMykKLSNkZWZpbmUgSVdMX0RMX1JYICAgICAgICAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIElXTF9ETF9JU1IgICAgICAgICAgICgxIDw8IDI1KQotI2RlZmluZSBJV0xfRExfSFQgICAgICAgICAgICAoMSA8PCAyNikKLSNkZWZpbmUgSVdMX0RMX0lPICAgICAgICAgICAgKDEgPDwgMjcpCi0jZGVmaW5lIElXTF9ETF8xMUggICAgICAgICAgICgxIDw8IDI4KQotCi0jZGVmaW5lIElXTF9ETF9TVEFUUyAgICAgICAgICgxIDw8IDI5KQotI2RlZmluZSBJV0xfRExfVFhfUkVQTFkgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSVdMX0RMX1FPUyAgICAgICAgICAgKDEgPDwgMzEpCi0KLSNkZWZpbmUgSVdMX0VSUk9SKGYsIGEuLi4pIHByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAiIGYsICMjIGEpCi0jZGVmaW5lIElXTF9XQVJOSU5HKGYsIGEuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSU5GTyhmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lORk8sIGYsICMjIGEpCi0KLSNkZWZpbmUgSVdMX0RFQlVHX01BQzgwMjExKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX01BQzgwMjExLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVEVNUChmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfVEVNUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NDQU4oZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1NDQU4sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RYKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX1RYLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSVNSKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfSVNSLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTEVEKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTEVELCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfV0VQKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfV0VQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSEMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IT1NUX0NPTU1BTkQsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19DQUxJQihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0NBTElCLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRlcoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9GVywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JGX0tJTEwoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19EUk9QX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FQKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lPKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9SQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTk9USUYoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IVChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hULCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU1RBVFMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9TVEFUUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWF9SRVBMWShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYX1JFUExZLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUU9TKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9RT1MsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQURJTyhmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF9SQURJTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1BPV0VSKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1BPV0VSLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfMTFIKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMXzExSCwgZiwgIyMgYSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjZTI1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZmguaApAQCAtMCwwICsxLDE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9faXdsXzM5NDVfZmhfaF9fCisjZGVmaW5lIF9faXdsXzM5NDVfZmhfaF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBpd2wzOTQ1IEZsb3cgSGFuZGxlciBEZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIEkvTyBhcmVhIGlzIGRpcmVjdGx5IHJlYWQvd3JpdGFibGUgYnkgZHJpdmVyIChlLmcuIExpbnV4IHVzZXMgd3JpdGVsKCkpCisgKiBBZGRyZXNzZXMgYXJlIG9mZnNldHMgZnJvbSBkZXZpY2UncyBQQ0kgaGFyZHdhcmUgYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIEZIMzlfTUVNX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgICgweDA4MDApCisjZGVmaW5lIEZIMzlfTUVNX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgICgweDEwMDApCisKKyNkZWZpbmUgRkgzOV9DQkNDX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDE0MCkKKyNkZWZpbmUgRkgzOV9URkRCX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDE4MCkKKyNkZWZpbmUgRkgzOV9SQ1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDQwMCkKKyNkZWZpbmUgRkgzOV9SU1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDRjMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDUwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDY4MCkKKworLyogVEZEQiAoVHJhbnNtaXQgRnJhbWUgQnVmZmVyIERlc2NyaXB0b3IpICovCisjZGVmaW5lIEZIMzlfVEZEQihfY2gsIGJ1ZikJCQkoRkgzOV9URkRCX1RBQkxFICsgXAorCQkJCQkJICgoX2NoKSAqIDIgKyAoYnVmKSkgKiAweDI4KQorI2RlZmluZSBGSDM5X1RGREJfQ0hOTF9CVUZfQ1RSTF9SRUcoX2NoKQkoRkgzOV9URkRCX1RBQkxFICsgMHg1MCAqIChfY2gpKQorCisvKiBDQkNDIGNoYW5uZWwgaXMgWzAsMl0gKi8KKyNkZWZpbmUgRkgzOV9DQkNDKF9jaCkJCShGSDM5X0NCQ0NfVEFCTEUgKyAoX2NoKSAqIDB4OCkKKyNkZWZpbmUgRkgzOV9DQkNDX0NUUkwoX2NoKQkoRkgzOV9DQkNDKF9jaCkgKyAweDAwKQorI2RlZmluZSBGSDM5X0NCQ0NfQkFTRShfY2gpCShGSDM5X0NCQ0MoX2NoKSArIDB4MDQpCisKKy8qIFJDU1IgY2hhbm5lbCBpcyBbMCwyXSAqLworI2RlZmluZSBGSDM5X1JDU1IoX2NoKQkJCShGSDM5X1JDU1JfVEFCTEUgKyAoX2NoKSAqIDB4NDApCisjZGVmaW5lIEZIMzlfUkNTUl9DT05GSUcoX2NoKQkJKEZIMzlfUkNTUihfY2gpICsgMHgwMCkKKyNkZWZpbmUgRkgzOV9SQ1NSX1JCRF9CQVNFKF9jaCkJCShGSDM5X1JDU1IoX2NoKSArIDB4MDQpCisjZGVmaW5lIEZIMzlfUkNTUl9XUFRSKF9jaCkJCShGSDM5X1JDU1IoX2NoKSArIDB4MjApCisjZGVmaW5lIEZIMzlfUkNTUl9SUFRSX0FERFIoX2NoKQkoRkgzOV9SQ1NSKF9jaCkgKyAweDI0KQorCisjZGVmaW5lIEZIMzlfUlNDU1JfQ0hOTDBfV1BUUgkJKEZIMzlfUkNTUl9XUFRSKDApKQorCisvKiBSU1NSICovCisjZGVmaW5lIEZIMzlfUlNTUl9DVFJMCQkJKEZIMzlfUlNTUl9UQUJMRSArIDB4MDAwKQorI2RlZmluZSBGSDM5X1JTU1JfU1RBVFVTCQkoRkgzOV9SU1NSX1RBQkxFICsgMHgwMDQpCisKKy8qIFRDU1IgKi8KKyNkZWZpbmUgRkgzOV9UQ1NSKF9jaCkJCQkoRkgzOV9UQ1NSX1RBQkxFICsgKF9jaCkgKiAweDIwKQorI2RlZmluZSBGSDM5X1RDU1JfQ09ORklHKF9jaCkJCShGSDM5X1RDU1IoX2NoKSArIDB4MDApCisjZGVmaW5lIEZIMzlfVENTUl9DUkVESVQoX2NoKQkJKEZIMzlfVENTUihfY2gpICsgMHgwNCkKKyNkZWZpbmUgRkgzOV9UQ1NSX0JVRkZfU1RUUyhfY2gpCShGSDM5X1RDU1IoX2NoKSArIDB4MDgpCisKKy8qIFRTU1IgKi8KKyNkZWZpbmUgRkgzOV9UU1NSX0NCQl9CQVNFICAgICAgICAoRkgzOV9UU1NSX1RBQkxFICsgMHgwMDApCisjZGVmaW5lIEZIMzlfVFNTUl9NU0dfQ09ORklHICAgICAgKEZIMzlfVFNTUl9UQUJMRSArIDB4MDA4KQorI2RlZmluZSBGSDM5X1RTU1JfVFhfU1RBVFVTICAgICAgIChGSDM5X1RTU1JfVEFCTEUgKyAweDAxMCkKKworCisvKiBEQk0gKi8KKworI2RlZmluZSBGSDM5X1NSVkNfQ0hOTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNikKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFICAgICAoMjApCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19JUlFfUkJUSCAgICAgICg0KQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOICAgICgweDA4MDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgICAgICAgICgweDgwMDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgICAgICAgICAgICgweDIwMDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NQVhfRlJBR19TSVpFXzEyOAkJKDB4MDEwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUCQkoMHgwMDAwMTAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRkgJCQkoMHgwMDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0RSSVZFUgkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRElTQUJMRV9WQUwJKDB4MDAwMDAwMDApCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwJKDB4MDAwMDAwMDgpCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9JRlRGRAkJKDB4MDAyMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UCQkoMHgwMDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0UJCSgweDAwMDAwMDAwKQorI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1RDU1JfQ0hOTF9UWF9CVUZfU1RTX1JFR19WQUxfVEZEQl9WQUxJRAkJKDB4MDAwMDQwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfQklUX1RGREJfV1BUUgkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9UWFBEX09OCSgweEZGMDAwMDAwKQorI2RlZmluZSBGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX1RYUERfT04JKDB4MDBGRjAwMDApCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9NQVhfRlJBR19TSVpFXzEyOEIJKDB4MDAwMDA0MDApCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04JCSgweDAwMDAwMTAwKQorI2RlZmluZSBGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTgkJKDB4MDAwMDAwODApCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SU1BfV0FJVF9USAkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9SU1BfV0FJVF9USAkJKDB4MDAwMDAwMDUpCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NoKQkoQklUKF9jaCkgPDwgMjQpCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9OT19QRU5EX1JFUShfY2gpCShCSVQoX2NoKSA8PCAxNikKKworI2RlZmluZSBGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKF9jaCkgXAorCShGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2gpIHwgXAorCSBGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NoKSkKKworI2RlZmluZSBGSDM5X1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRQkJCSgweDAxMDAwMDAwKQorCitzdHJ1Y3QgaXdsMzk0NV90ZmRfdGIgeworCV9fbGUzMiBhZGRyOworCV9fbGUzMiBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5NDVfdGZkIHsKKwlfX2xlMzIgY29udHJvbF9mbGFnczsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmRfdGIgdGJzWzRdOworCXU4IF9fcGFkWzI4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKyNlbmRpZiAvKiBfX2l3bF8zOTQ1X2ZoX2hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKaW5kZXggOTRlYTBlNi4uMjA1NjAzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY5LDc3ICs2OSwyNiBAQAogI2lmbmRlZiBfX2l3bF8zOTQ1X2h3X18KICNkZWZpbmUgX19pd2xfMzk0NV9od19fCiAKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisKIC8qCiAgKiB1Q29kZSBxdWV1ZSBtYW5hZ2VtZW50IGRlZmluaXRpb25zIC4uLgogICogUXVldWUgIzQgaXMgdGhlIGNvbW1hbmQgcXVldWUgZm9yIDM5NDUgYW5kIDQ5NjUuCiAgKi8KLSNkZWZpbmUgSVdMX0NNRF9RVUVVRV9OVU0gICAgICAgNAotCi0vKiBUeCByYXRlcyAqLwotI2RlZmluZSBJV0xfQ0NLX1JBVEVTIDQKLSNkZWZpbmUgSVdMX09GRE1fUkFURVMgOAotI2RlZmluZSBJV0xfSFRfUkFURVMgMAotI2RlZmluZSBJV0xfTUFYX1JBVEVTICAoSVdMX0NDS19SQVRFUytJV0xfT0ZETV9SQVRFUytJV0xfSFRfUkFURVMpCisjZGVmaW5lIElXTF9DTURfUVVFVUVfTlVNCTQKIAogLyogVGltZSBjb25zdGFudHMgKi8KICNkZWZpbmUgU0hPUlRfU0xPVF9USU1FIDkKICNkZWZpbmUgTE9OR19TTE9UX1RJTUUgMjAKIAogLyogUlNTSSB0byBkQm0gKi8KLSNkZWZpbmUgSVdMX1JTU0lfT0ZGU0VUCTk1CisjZGVmaW5lIElXTDM5X1JTU0lfT0ZGU0VUCTk1CiAKIC8qCiAgKiBFRVBST00gcmVsYXRlZCBjb25zdGFudHMsIGVudW1zLCBhbmQgc3RydWN0dXJlcy4KICAqLwotCi0vKgotICogRUVQUk9NIGFjY2VzcyB0aW1lIHZhbHVlczoKLSAqCi0gKiBEcml2ZXIgaW5pdGlhdGVzIEVFUFJPTSByZWFkIGJ5IHdyaXRpbmcgYnl0ZSBhZGRyZXNzIDw8IDEgdG8gQ1NSX0VFUFJPTV9SRUcsCi0gKiAgIHRoZW4gY2xlYXJpbmcgKHdpdGggc3Vic2VxdWVudCByZWFkL21vZGlmeS93cml0ZSkgQ1NSX0VFUFJPTV9SRUcgYml0Ci0gKiAgIENTUl9FRVBST01fUkVHX0JJVF9DTUQgKDB4MikuCi0gKiBEcml2ZXIgdGhlbiBwb2xscyBDU1JfRUVQUk9NX1JFRyBmb3IgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0sgKDB4MSkuCi0gKiBXaGVuIHBvbGxpbmcsIHdhaXQgMTAgdVNlYyBiZXR3ZWVuIHBvbGxpbmcgbG9vcHMsIHVwIHRvIGEgbWF4aW11bSA1MDAwIHVTZWMuCi0gKiBEcml2ZXIgcmVhZHMgMTYtYml0IHZhbHVlIGZyb20gYml0cyAzMS0xNiBvZiBDU1JfRUVQUk9NX1JFRy4KLSAqLwotI2RlZmluZSBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUCTUwMDAgLyogdVNlYyAqLwotCi0vKgotICogUmVndWxhdG9yeSBjaGFubmVsIHVzYWdlIGZsYWdzIGluIEVFUFJPTSBzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsLmZsYWdzLgotICoKLSAqIElCU1MgYW5kL29yIEFQIG9wZXJhdGlvbiBpcyBhbGxvd2VkICpvbmx5KiBvbiB0aG9zZSBjaGFubmVscyB3aXRoCi0gKiAoVkFMSUQgJiYgSUJTUyAmJiBBQ1RJVkUgJiYgIVJBREFSKS4gIFRoaXMgcmVzdHJpY3Rpb24gaXMgaW4gcGxhY2UgYmVjYXVzZQotICogUkFEQVIgZGV0ZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIDM5NDUgZHJpdmVyLCBidXQgaXMgYQotICogcmVxdWlyZW1lbnQgZm9yIGVzdGFibGlzaGluZyBhIG5ldyBuZXR3b3JrIGZvciBsZWdhbCBvcGVyYXRpb24gb24gY2hhbm5lbHMKLSAqIHJlcXVpcmluZyBSQURBUiBkZXRlY3Rpb24gb3IgcmVzdHJpY3RpbmcgQUNUSVZFIHNjYW5uaW5nLgotICoKLSAqIE5PVEU6ICAiV0lERSIgZmxhZyBpbmRpY2F0ZXMgdGhhdCAyMCBNSHogY2hhbm5lbCBpcyBzdXBwb3J0ZWQ7Ci0gKiAgICAgICAgMzk0NSBkb2VzIG5vdCBzdXBwb3J0IEZBVCA0MCBNSHotd2lkZSBjaGFubmVscy4KLSAqCi0gKiBOT1RFOiAgVXNpbmcgYSBjaGFubmVsIGluYXBwcm9wcmlhdGVseSB3aWxsIHJlc3VsdCBpbiBhIHVDb2RlIGVycm9yIQotICovCi1lbnVtIHsKLQlFRVBST01fQ0hBTk5FTF9WQUxJRCA9ICgxIDw8IDApLAkvKiB1c2FibGUgZm9yIHRoaXMgU0tVL2dlbyAqLwotCUVFUFJPTV9DSEFOTkVMX0lCU1MgPSAoMSA8PCAxKSwJCS8qIHVzYWJsZSBhcyBhbiBJQlNTIGNoYW5uZWwgKi8KLQkvKiBCaXQgMiBSZXNlcnZlZCAqLwotCUVFUFJPTV9DSEFOTkVMX0FDVElWRSA9ICgxIDw8IDMpLAkvKiBhY3RpdmUgc2Nhbm5pbmcgYWxsb3dlZCAqLwotCUVFUFJPTV9DSEFOTkVMX1JBREFSID0gKDEgPDwgNCksCS8qIHJhZGFyIGRldGVjdGlvbiByZXF1aXJlZCAqLwotCUVFUFJPTV9DSEFOTkVMX1dJREUgPSAoMSA8PCA1KSwJCS8qIDIwIE1IeiBjaGFubmVsIG9rYXkgKi8KLQkvKiBCaXQgNiBSZXNlcnZlZCAod2FzIE5hcnJvdyBDaGFubmVsKSAqLwotCUVFUFJPTV9DSEFOTkVMX0RGUyA9ICgxIDw8IDcpLAkvKiBkeW5hbWljIGZyZXEgc2VsZWN0aW9uIGNhbmRpZGF0ZSAqLwotfTsKLQotLyogU0tVIENhcGFiaWxpdGllcyAqLwotI2RlZmluZSBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBFRVBST01fU0tVX0NBUF9IV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogCi0vKiAqcmVndWxhdG9yeSogY2hhbm5lbCBkYXRhIGZyb20gZWVwcm9tLCBvbmUgZm9yIGVhY2ggY2hhbm5lbCAqLwotc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgewotCXU4IGZsYWdzOwkJLyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCi0JczggbWF4X3Bvd2VyX2F2ZzsJLyogbWF4IHBvd2VyIChkQm0pIG9uIHRoaXMgY2hubCwgbGltaXQgMzEgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiAvKgogICogTWFwcGluZyBvZiBhIFR4IHBvd2VyIGxldmVsLCBhdCBmYWN0b3J5IGNhbGlicmF0aW9uIHRlbXBlcmF0dXJlLAogICogICB0byBhIHJhZGlvL0RTUCBnYWluIHRhYmxlIGluZGV4LgpAQCAtMjMzLDcgKzE4Miw3IEBACiAgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNAogICovCiAJdTE2IGJhbmRfMV9jb3VudDsJLyogYWJzLm9mczogMTk2ICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF8xX2NoYW5uZWxzWzE0XTsgIC8qIGFicy5vZnM6IDE5NiAqLworCXN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgYmFuZF8xX2NoYW5uZWxzWzE0XTsgIC8qIGFicy5vZnM6IDE5OCAqLwogCiAvKgogICogNC45IEdIeiBjaGFubmVscyAxODMsIDE4NCwgMTg1LCAxODcsIDE4OCwgMTg5LCAxOTIsIDE5NiwKQEAgLTI0MSwyOCArMTkwLDI4IEBACiAgKiAoNDkxNS01MDgwTUh6KSAobm9uZSBvZiB0aGVzZSBpcyBldmVyIHN1cHBvcnRlZCkKICAqLwogCXUxNiBiYW5kXzJfY291bnQ7CS8qIGFicy5vZnM6IDIyNiAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGJhbmRfMl9jaGFubmVsc1sxM107ICAvKiBhYnMub2ZzOiAyMjggKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfMl9jaGFubmVsc1sxM107ICAvKiBhYnMub2ZzOiAyMjggKi8KIAogLyoKICAqIDUuMiBHSHogY2hhbm5lbHMgMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAogICogKDUxNzAtNTMyME1IeikKICAqLwogCXUxNiBiYW5kXzNfY291bnQ7CS8qIGFicy5vZnM6IDI1NCAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGJhbmRfM19jaGFubmVsc1sxMl07ICAvKiBhYnMub2ZzOiAyNTYgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfM19jaGFubmVsc1sxMl07ICAvKiBhYnMub2ZzOiAyNTYgKi8KIAogLyoKICAqIDUuNSBHSHogY2hhbm5lbHMgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKICAqICg1NTAwLTU3MDBNSHopCiAgKi8KIAl1MTYgYmFuZF80X2NvdW50OwkvKiBhYnMub2ZzOiAyODAgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzRfY2hhbm5lbHNbMTFdOyAgLyogYWJzLm9mczogMjgyICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzRfY2hhbm5lbHNbMTFdOyAgLyogYWJzLm9mczogMjgyICovCiAKIC8qCiAgKiA1LjcgR0h6IGNoYW5uZWxzIDE0NSwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUKICAqICg1NzI1LTU4MjVNSHopCiAgKi8KIAl1MTYgYmFuZF81X2NvdW50OwkvKiBhYnMub2ZzOiAzMDQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzVfY2hhbm5lbHNbNl07ICAvKiBhYnMub2ZzOiAzMDYgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfNV9jaGFubmVsc1s2XTsgIC8qIGFicy5vZnM6IDMwNiAqLwogCiAJdTggcmVzZXJ2ZWQ5WzE5NF07CiAKQEAgLTI3NiwxMjUgKzIyNSwxNSBAQAogCXU4IHJlc2VydmVkMTZbMTcyXTsJLyogZmlsbCBvdXQgdG8gZnVsbCAxMDI0IGJ5dGUgYmxvY2sgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElXTF9FRVBST01fSU1BR0VfU0laRSAxMDI0CisjZGVmaW5lIElXTDM5NDVfRUVQUk9NX0lNR19TSVpFIDEwMjQKIAogLyogRW5kIG9mIEVFUFJPTSAqLwogCi0KLSNpbmNsdWRlICJpd2wtMzk0NS1jb21tYW5kcy5oIgotCi0jZGVmaW5lIFBDSV9MSU5LX0NUUkwgICAgICAweDBGMAotI2RlZmluZSBQQ0lfUE9XRVJfU09VUkNFICAgMHgwQzgKLSNkZWZpbmUgUENJX1JFR19XVU04ICAgICAgIDB4MEU4Ci0jZGVmaW5lIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUICAgICAgICAgKDB4ODAwMDAwMDApCi0KLS8qPT09IEZIIChkYXRhIEZsb3cgSGFuZGxlcikgPT09Ki8KLSNkZWZpbmUgRkhfQkFTRSAgICAgKDB4ODAwKQotCi0jZGVmaW5lIEZIX0NCQ0NfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4MTQwKQotI2RlZmluZSBGSF9URkRCX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDE4MCkKLSNkZWZpbmUgRkhfUkNTUl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHg0MDApCi0jZGVmaW5lIEZIX1JTU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NGMwKQotI2RlZmluZSBGSF9UQ1NSX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDUwMCkKLSNkZWZpbmUgRkhfVFNTUl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHg2ODApCi0KLS8qIFRGREIgKFRyYW5zbWl0IEZyYW1lIEJ1ZmZlciBEZXNjcmlwdG9yKSAqLwotI2RlZmluZSBGSF9URkRCKF9jaGFubmVsLCBidWYpIFwKLQkoRkhfVEZEQl9UQUJMRSsoKF9jaGFubmVsKSoyKyhidWYpKSoweDI4KQotI2RlZmluZSBBTE1fRkhfVEZEQl9DSE5MX0JVRl9DVFJMX1JFRyhfY2hhbm5lbCkgXAotCShGSF9URkRCX1RBQkxFICsgMHg1MCAqIF9jaGFubmVsKQotLyogQ0JDQyBfY2hhbm5lbCBpcyBbMCwyXSAqLwotI2RlZmluZSBGSF9DQkNDKF9jaGFubmVsKSAgICAgICAgICAgKEZIX0NCQ0NfVEFCTEUrKF9jaGFubmVsKSoweDgpCi0jZGVmaW5lIEZIX0NCQ0NfQ1RSTChfY2hhbm5lbCkgICAgICAoRkhfQ0JDQyhfY2hhbm5lbCkrMHgwMCkKLSNkZWZpbmUgRkhfQ0JDQ19CQVNFKF9jaGFubmVsKSAgICAgIChGSF9DQkNDKF9jaGFubmVsKSsweDA0KQotCi0vKiBSQ1NSIF9jaGFubmVsIGlzIFswLDJdICovCi0jZGVmaW5lIEZIX1JDU1IoX2NoYW5uZWwpICAgICAgICAgICAoRkhfUkNTUl9UQUJMRSsoX2NoYW5uZWwpKjB4NDApCi0jZGVmaW5lIEZIX1JDU1JfQ09ORklHKF9jaGFubmVsKSAgICAoRkhfUkNTUihfY2hhbm5lbCkrMHgwMCkKLSNkZWZpbmUgRkhfUkNTUl9SQkRfQkFTRShfY2hhbm5lbCkgIChGSF9SQ1NSKF9jaGFubmVsKSsweDA0KQotI2RlZmluZSBGSF9SQ1NSX1dQVFIoX2NoYW5uZWwpICAgICAgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MjApCi0jZGVmaW5lIEZIX1JDU1JfUlBUUl9BRERSKF9jaGFubmVsKSAoRkhfUkNTUihfY2hhbm5lbCkrMHgyNCkKLQotI2RlZmluZSBGSF9SU0NTUl9DSE5MMF9XUFRSICAgICAgICAoRkhfUkNTUl9XUFRSKDApKQotCi0vKiBSU1NSICovCi0jZGVmaW5lIEZIX1JTU1JfQ1RSTCAgICAgICAgICAgIChGSF9SU1NSX1RBQkxFKzB4MDAwKQotI2RlZmluZSBGSF9SU1NSX1NUQVRVUyAgICAgICAgICAoRkhfUlNTUl9UQUJMRSsweDAwNCkKLSNkZWZpbmUgRkhfUlNTUl9DSE5MMF9SWF9TVEFUVVNfQ0hOTF9JRExFCSgweDAxMDAwMDAwKQotLyogVENTUiAqLwotI2RlZmluZSBGSF9UQ1NSKF9jaGFubmVsKSAgICAgICAgICAgKEZIX1RDU1JfVEFCTEUrKF9jaGFubmVsKSoweDIwKQotI2RlZmluZSBGSF9UQ1NSX0NPTkZJRyhfY2hhbm5lbCkgICAgKEZIX1RDU1IoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX1RDU1JfQ1JFRElUKF9jaGFubmVsKSAgICAoRkhfVENTUihfY2hhbm5lbCkrMHgwNCkKLSNkZWZpbmUgRkhfVENTUl9CVUZGX1NUVFMoX2NoYW5uZWwpIChGSF9UQ1NSKF9jaGFubmVsKSsweDA4KQotLyogVFNTUiAqLwotI2RlZmluZSBGSF9UU1NSX0NCQl9CQVNFICAgICAgICAoRkhfVFNTUl9UQUJMRSsweDAwMCkKLSNkZWZpbmUgRkhfVFNTUl9NU0dfQ09ORklHICAgICAgKEZIX1RTU1JfVEFCTEUrMHgwMDgpCi0jZGVmaW5lIEZIX1RTU1JfVFhfU1RBVFVTICAgICAgIChGSF9UU1NSX1RBQkxFKzB4MDEwKQotCi0KLS8qIERCTSAqLwotCi0jZGVmaW5lIEFMTV9GSF9TUlZDX0NITkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFICAgICAoMjApCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX0lSUV9SQlRIICAgICAgKDQpCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19CSVRfV1JfU1RUU19FTiAgICAoMHgwODAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JEUkJEX0VOX0VOQUJMRSAgICAgICAgICAgKDB4MjAwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjggICAgICAgICAoMHgwMTAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9JUlFfREVTVF9JTlRfSE9TVCAgICAgICAgICgweDAwMDAxMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0ZIICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRFJJVkVSICAgICAgICAgICAoMHgwMDAwMDAwMSkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEVfVkFMICAgICgweDAwMDAwMDAwKQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwgICAgICgweDAwMDAwMDA4KQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9JRlRGRCAgICAgICAgICAgKDB4MDAyMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9SVENfTk9JTlQgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9QQVVTRSAgICAgICAgICAgICgweDAwMDAwMDAwKQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUgICAgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfVkFMX1RGREJfVkFMSUQgICAgICAgICAgKDB4MDAwMDQwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfQ0hOTF9UWF9CVUZfU1RTX1JFR19CSVRfVEZEQl9XUFRSICAgICAgICAgICAoMHgwMDAwMDAwMSkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiAgICAgICgweEZGMDAwMDAwKQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfVFhQRF9PTiAgICAgICgweDAwRkYwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9NQVhfRlJBR19TSVpFXzEyOEIgICAgKDB4MDAwMDA0MDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1NOT09QX1JEX1RGRF9PTiAgICAgICAoMHgwMDAwMDEwMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTiAgICAgICAoMHgwMDAwMDA4MCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEggICAgICgweDAwMDAwMDIwKQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfUlNQX1dBSVRfVEggICAgICAgICAgICgweDAwMDAwMDA1KQotCi0jZGVmaW5lIEFMTV9UQl9NQVhfQllURVNfQ09VTlQgICAgICAoMHhGRkYwKQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NoYW5uZWwpIFwKLQkoKDFMVSA8PCBfY2hhbm5lbCkgPDwgMjQpCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaGFubmVsKSBcCi0JKCgxTFUgPDwgX2NoYW5uZWwpIDw8IDE2KQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShfY2hhbm5lbCkgXAotCShBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaGFubmVsKSB8IFwKLQkgQUxNX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NoYW5uZWwpKQogI2RlZmluZSBQQ0lfQ0ZHX1JFVl9JRF9CSVRfQkFTSUNfU0tVICAgICAgICAgICAgICAgICgweDQwKQkvKiBiaXQgNiAgICAqLwogI2RlZmluZSBQQ0lfQ0ZHX1JFVl9JRF9CSVRfUlRQICAgICAgICAgICAgICAgICAgICAgICgweDgwKQkvKiBiaXQgNyAgICAqLwogCiAjZGVmaW5lIFRGRF9RVUVVRV9NSU4gICAgICAgICAgIDAKICNkZWZpbmUgVEZEX1FVRVVFX01BWCAgICAgICAgICAgNgotI2RlZmluZSBURkRfUVVFVUVfU0laRV9NQVggICAgICAoMjU2KQogCiAjZGVmaW5lIElXTF9OVU1fU0NBTl9SQVRFUyAgICAgICAgICgyKQogCkBAIC00MTYsMTIgKzI1NSw2IEBACiAjZGVmaW5lIFRGRF9DVExfUEFEX1NFVChuKSAgICAgICAgIChuIDw8IDI4KQogI2RlZmluZSBURkRfQ1RMX1BBRF9HRVQoY3RsKSAgICAgICAoY3RsID4+IDI4KQogCi0jZGVmaW5lIFRGRF9UWF9DTURfU0xPVFMgMjU2Ci0jZGVmaW5lIFRGRF9DTURfU0xPVFMgMzIKLQotI2RlZmluZSBURkRfTUFYX1BBWUxPQURfU0laRSAoc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX21ldGEpKQotCiAvKgogICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKICAqLwpAQCAtNDMwLDQ1ICsyNjMsMzUgQEAKIAogLyogU2l6ZXMgYW5kIGFkZHJlc3NlcyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgbWVtb3J5IChTUkFNKSBpbgogICogMzk0NSdzIGVtYmVkZGVkIHByb2Nlc3Nvci4gIERyaXZlciBhY2Nlc3MgaXMgdmlhIEhCVVNfVEFSR19NRU1fKiByZWdzLiAqLwotI2RlZmluZSBSVENfSU5TVF9MT1dFUl9CT1VORAkJCSgweDAwMDAwMCkKLSNkZWZpbmUgQUxNX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCiAKLSNkZWZpbmUgUlRDX0RBVEFfTE9XRVJfQk9VTkQJCQkoMHg4MDAwMDApCi0jZGVmaW5lIEFMTV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9MT1dFUl9CT1VORAkJKDB4ODAwMDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQogCi0jZGVmaW5lIEFMTV9SVENfSU5TVF9TSVpFIChBTE1fUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgQUxNX1JUQ19EQVRBX1NJWkUgKEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCAtIFJUQ19EQVRBX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0wzOV9SVENfSU5TVF9TSVpFIChJV0wzOV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0wzOV9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMMzlfUlRDX0RBVEFfU0laRSAoSVdMMzlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMMzlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKLSNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgQUxNX1JUQ19JTlNUX1NJWkUKLSNkZWZpbmUgSVdMX01BWF9EQVRBX1NJWkUgQUxNX1JUQ19EQVRBX1NJWkUKKyNkZWZpbmUgSVdMMzlfTUFYX0lOU1RfU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9EQVRBX1NJWkUgSVdMMzlfUlRDX0RBVEFfU0laRQogCiAvKiBTaXplIG9mIHVDb2RlIGluc3RydWN0aW9uIG1lbW9yeSBpbiBib290c3RyYXAgc3RhdGUgbWFjaGluZSAqLwotI2RlZmluZSBJV0xfTUFYX0JTTV9TSVpFIEFMTV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9CU01fU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCiAKICNkZWZpbmUgSVdMMzlfTUFYX05VTV9RVUVVRVMJOAogCiBzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpCiB7Ci0JcmV0dXJuIChhZGRyID49IFJUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgotCSAgICAgICAoYWRkciA8IEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCk7CisJcmV0dXJuIChhZGRyID49IElXTDM5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgorCSAgICAgICAoYWRkciA8IElXTDM5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIAogLyogQmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGl3bDM5NDVfc2hhcmVkIGlzIHByb3ZpZGVkIHRvIEZIX1RTU1JfQ0JCX0JBU0UKICAqIGFuZCAmaXdsMzk0NV9zaGFyZWQucnhfcmVhZF9wdHJbMF0gaXMgcHJvdmlkZWQgdG8gRkhfUkNTUl9SUFRSX0FERFIoMCkgKi8KIHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCB7CiAJX19sZTMyIHR4X2Jhc2VfcHRyWzhdOwotCV9fbGUzMiByeF9yZWFkX3B0clszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWVfZGF0YSB7Ci0JX19sZTMyIGFkZHI7Ci0JX19sZTMyIGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgewotCV9fbGUzMiBjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZV9kYXRhIHBhWzRdOwotCXU4IHJlc2VydmVkWzI4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdGF0aWMgaW5saW5lIHU4IGl3bDM5NDVfaHdfZ2V0X3JhdGUoX19sZTE2IHJhdGVfbl9mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0MGZkNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2l3bDM5NDVfaW9faF9fCi0jZGVmaW5lIF9faXdsMzk0NV9pb19oX18KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJpd2wtMzk0NS1kZWJ1Zy5oIgotCi0vKgotICogSU8sIHJlZ2lzdGVyLCBhbmQgTklDIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogTk9URSBvbiBuYW1pbmcgY29udmVudGlvbiBhbmQgbWFjcm8gdXNhZ2UgZm9yIHRoZXNlCi0gKgotICogQSBzaW5nbGUgXyBwcmVmaXggYmVmb3JlIGEgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgbm8gc3RhdGUKLSAqIGNoZWNrIG9yIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBBIGRvdWJsZSBfXyBwcmVmaXggYmVmb3JlIGFuIGFjY2VzcyBmdW5jdGlvbiBtZWFucyB0aGF0IHN0YXRlIGlzIGNoZWNrZWQKLSAqIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBpcyBwcmludGVkIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogVGhlIG5vbi1wcmVmaXhlZCBuYW1lIGlzIHRoZSAjZGVmaW5lIHRoYXQgbWFwcyB0aGUgY2FsbGVyIGludG8gYQotICogI2RlZmluZSB0aGF0IHByb3ZpZGVzIHRoZSBjYWxsZXIncyBfX0xJTkVfXyB0byB0aGUgZG91YmxlIHByZWZpeCB2ZXJzaW9uLgotICoKLSAqIElmIHlvdSB3aXNoIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGhvdXQgYW55IGRlYnVnIG9yIHN0YXRlIGNoZWNraW5nLAotICogeW91IHNob3VsZCB1c2UgdGhlIHNpbmdsZSBfIHByZWZpeCB2ZXJzaW9uIChhcyBpcyB1c2VkIGJ5IGRlcGVuZGVudCBJTwotICogcm91dGluZXMsIGZvciBleGFtcGxlIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIgY2FsbHMgdGhlIG5vbi1jaGVjayB2ZXJzaW9uIG9mCi0gKiBfaXdsMzk0NV9yZWFkMzIuKQotICoKLSAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgKmV4dHJlbWVseSogdXNlZnVsIGluIHF1aWNrbHkgaXNvbGF0aW5nIGNvZGUgZGVsdGFzCi0gKiB3aGljaCByZXN1bHQgaW4gbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUgSS9PLiAgSW4gY29tYmluYXRpb24gd2l0aAotICogZ2l0LWJpc2VjdCBhbmQgdGhlIElPIGRlYnVnIGxldmVsIHlvdSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljCi0gKiBjb21taXQgd2hpY2ggYnJlYWtzIHRoZSBJTyBzZXF1ZW5jZSB0byB0aGUgaGFyZHdhcmUuCi0gKgotICovCi0KLSNkZWZpbmUgX2l3bDM5NDVfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgaW93cml0ZTMyKCh2YWwpLCAocHJpdiktPmh3X2Jhc2UgKyAob2ZzKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV93cml0ZTMyKGNvbnN0IGNoYXIgKmYsIHUzMiBsLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSB1MzIgb2ZzLCB1MzIgdmFsKQotewotCUlXTF9ERUJVR19JTygid3JpdGUzMigweCUwOFgsIDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCB2YWwsIGYsIGwpOwotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwotfQotI2RlZmluZSBpd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGUzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIG9mcywgdmFsKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBfaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKQotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcykgaW9yZWFkMzIoKHByaXYpLT5od19iYXNlICsgKG9mcykpCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBvZnMpCi17Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCBmLCBsKTsKLQlyZXR1cm4gX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcyk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVhZDMyKHByaXYsIG9mcylfX2l3bDM5NDVfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdiwgb2ZzKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9yZWFkMzIocCwgbykgX2l3bDM5NDVfcmVhZDMyKHAsIG8pCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlkbyB7Ci0JCWlmICgoX2l3bDM5NDVfcmVhZDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gKGJpdHMgJiBtYXNrKSkKLQkJCXJldHVybiBpOwotCQl1ZGVsYXkoMTApOwotCQlpICs9IDEwOwotCX0gd2hpbGUgKGkgPCB0aW1lb3V0KTsKLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIGludCBfX2l3bDM5NDVfcG9sbF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAotCQkgICAgICBhZGRyLCBiaXRzLCBtYXNrLAotCQkgICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcG9sbF9iaXQocHJpdiwgYWRkciwgYml0cywgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2wzOTQ1X3NldF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfc2V0X2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JdTMyIHZhbCA9IF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzazsKLQlJV0xfREVCVUdfSU8oInNldF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIHZhbCk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfc2V0X2JpdChwLCByLCBtKSBfX2l3bDM5NDVfc2V0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXQocCwgciwgbSkgX2l3bDM5NDVfc2V0X2JpdChwLCByLCBtKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9jbGVhcl9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpICYgfm1hc2spOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X2NsZWFyX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKLQlfaXdsMzk0NV93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkgX19pd2wzOTQ1X2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X2NsZWFyX2JpdChwLCByLCBtKSBfaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBfaXdsMzk0NV9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0OwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCS8qIHRoaXMgYml0IHdha2VzIHVwIHRoZSBOSUMgKi8KLQlfaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQlyZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICBDU1JfR1BfQ05UUkxfUkVHX1ZBTF9NQUNfQUNDRVNTX0VOLAotCQkJICAgKENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgfAotCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCksIDUwKTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIk1BQyBpcyBpbiBkZWVwIHNsZWVwIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JYXRvbWljX2luYygmcHJpdi0+cmVzdHJpY3RfcmVmY250KTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0RFQlVHX0lORk8oIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgYXQgIgotCQkJICAgICAgICJsaW5lICVkLlxuIiwgbCk7Ci0KLQlJV0xfREVCVUdfSU8oImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoX19GSUxFX18sIF9fTElORV9fLCBwcml2KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotI2VuZGlmCi0JCV9pd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICAgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlZC5cbiIsIGwpOwotCi0JSVdMX0RFQlVHX0lPKCJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfX2l3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdikKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdikKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHUzMiBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHUzMiBfX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZykKLXsKLQl1MzIgdmFsdWUgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIHJlZyk7Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgJWRcbiIsIGYsIGwpOwotCUlXTF9ERUJVR19JTygicmVhZF9kaXJlY3QzMigweCU0WCkgPSAweCUwOHggLSAlcyAlZCBcbiIsIHJlZywgdmFsdWUsCi0JCSAgICAgZiwgbCk7Ci0JcmV0dXJuIHZhbHVlOwotfQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKSBcCi0JX19pd2wzOTQ1X3JlYWRfZGlyZWN0MzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCByZWcpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIgX2l3bDM5NDVfcmVhZF9kaXJlY3QzMgotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyB2b2lkIF9faXdsMzk0NV93cml0ZV9kaXJlY3QzMih1MzIgbGluZSwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsdWUpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSkgXAotCV9faXdsMzk0NV93cml0ZV9kaXJlY3QzMihfX0xJTkVfXywgcHJpdiwgcmVnLCB2YWx1ZSkKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIgX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV93cml0ZV9yZWdfYnVmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgICB1MzIgcmVnLCB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQl1MzIgY291bnQgPSBzaXplb2YodTMyKTsKLQotCWlmICgocHJpdiAhPSBOVUxMKSAmJiAodmFsdWVzICE9IE5VTEwpKSB7Ci0JCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gY291bnQsIHJlZyArPSBjb3VudCwgdmFsdWVzKyspCi0JCQlfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsICp2YWx1ZXMpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgIHUzMiBhZGRyLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3BvbGxfYml0KHByaXYsIGFkZHIsIG1hc2ssIG1hc2ssIHRpbWVvdXQpOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgICAgdTMyIGFkZHIsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmV0ICA9IF9pd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKLQotCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKLQkJCSAgICAgInRpbWVkb3V0IC0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIGYsIGwpOwotCWVsc2UKLQkJSVdMX0RFQlVHX0lPKCJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYICIKLQkJCSAgICAgIi0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIHJldCwgZiwgbCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bDM5NDVfcmVhZF9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkFERFIsIHJlZyB8ICgzIDw8IDI0KSk7Ci0Jcm1iKCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkRBVCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkX3BycGgodTMyIGxpbmUsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgXAotCV9faXdsMzk0NV9yZWFkX3BycGgoX19MSU5FX18sIHByaXYsIHJlZykKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoIF9pd2wzOTQ1X3JlYWRfcHJwaAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfV0FERFIsCi0JCQkgICAgICAoKGFkZHIgJiAweDAwMDBGRkZGKSB8ICgzIDw8IDI0KSkpOwotCXdtYigpOwotCV9pd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1dEQVQsIHZhbCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfd3JpdGVfcHJwaCh1MzIgbGluZSwgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGVfcHJwaChfX0xJTkVfXywgcHJpdiwgYWRkciwgdmFsKTsKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaCBfaXdsMzk0NV93cml0ZV9wcnBoCi0jZW5kaWYKLQotI2RlZmluZSBfaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgfCBtYXNrKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9zZXRfYml0c19wcnBoKHUzMiBsaW5lLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQl1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSBsaW5lICVkXG4iLCBsaW5lKTsKLQotCV9pd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9faXdsMzk0NV9zZXRfYml0c19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX3BycGggX2l3bDM5NDVfc2V0X2JpdHNfcHJwaAotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoKF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKSkKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCh1MzIgbGluZSwKLQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIGJpdHMsIHUzMiBtYXNrKQotewotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tIGxpbmUgJWRcbiIsIGxpbmUpOwotCV9pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spOwotfQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spIFwKLQlfX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIGJpdHMsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCBfaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9jbGVhcl9iaXRzX3BycGgoc3RydWN0IGl3bDM5NDVfcHJpdgotCQkJCQkJICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZyk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCi17Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBhZGRyKTsKLQlybWIoKTsKLQlyZXR1cm4gaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9XQUREUiwgYWRkcik7Ci0Jd21iKCk7Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtX2J1ZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgYWRkciwKLQkJCQkJICB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCXdtYigpOwotCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gc2l6ZW9mKHUzMiksIHZhbHVlcysrKQotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0RBVCwgKnZhbHVlcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCmluZGV4IDRjNjM4OTAuLmFjMjJmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNCw2ICsyNCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zOCw4ICszOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCisjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKLSNpbmNsdWRlICJpd2wtaGVscGVycy5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewpAQCAtNjcsOCArNzAsOCBAQAogI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkgLypFeGNsdWRlIFNvbGlkIG9uKi8KICNkZWZpbmUgSVdMX1NPTElEX0JMSU5LX0lEWCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkKIAotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2soc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDE7CkBAIC04MCwyNyArODMsMjcgQEAKIH0KIAogLyogU2VuZCBsZWQgY29tbWFuZCAqLwotc3RhdGljIGludCBpd2xfc2VuZF9sZWRfY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDM5NDVfbGVkX2NtZCAqbGVkX2NtZCkKK3N0YXRpYyBpbnQgaXdsX3NlbmRfbGVkX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKQogewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfTEVEU19DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfbGVkX2NtZCksCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9sZWRfY21kKSwKIAkJLmRhdGEgPSBsZWRfY21kLAogCQkubWV0YS5mbGFncyA9IENNRF9BU1lOQywKIAkJLm1ldGEudS5jYWxsYmFjayA9IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjaywKIAl9OwogCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogCiAKIC8qIFNldCBsZWQgb24gY29tbWFuZCAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9wYXR0ZXJuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBpZHgpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAogCX07CkBAIC0xMTQsMTEgKzExNywxMCBAQAogfQogCiAKLSNpZiAxCiAvKiBTZXQgbGVkIG9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkX2NtZCA9IHsKKwlzdHJ1Y3QgaXdsX2xlZF9jbWQgbGVkX2NtZCA9IHsKIAkJLmlkID0gbGVkX2lkLAogCQkub24gPSBJV0xfTEVEX1NPTElELAogCQkub2ZmID0gMCwKQEAgLTEyOCwyNCArMTMwLDIyIEBACiB9CiAKIC8qIFNldCBsZWQgb2ZmIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb2ZmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX29mZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5vbiA9IDAsCiAJCS5vZmYgPSAwLAogCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKIAl9OwotCUlXTF9ERUJVR19MRUQoImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9mZiAlZFxuIiwgbGVkX2lkKTsKIAlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7CiB9Ci0jZW5kaWYKLQogCiAvKgogICogYnJpZ2h0bmVzcyBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yIFR4L1J4IExFRAogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CiAJICAgICF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKQpAQCAtMTY0LDkgKzE2NCw5IEBACiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9sZWQsIGxlZF9kZXYpOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CisJc3RydWN0IGl3bF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCBpd2xfbGVkLCBsZWRfZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWNhc2UgTEVEX0ZVTEw6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMTsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyAgYXNzb2NpYXRlZFxuIik7CisJCQlJV0xfREVCVUdfTEVEKHByaXYsICJNQUMgaXMgIGFzc29jaWF0ZWRcbiIpOwogCQl9CiAJCWlmIChsZWQtPmxlZF9vbikKIAkJCWxlZC0+bGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAljYXNlIExFRF9PRkY6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMDsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKKwkJCUlXTF9ERUJVR19MRUQocHJpdiwgIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKIAkJfQogCQlpZiAobGVkLT5sZWRfb2ZmKQogCQkJbGVkLT5sZWRfb2ZmKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0yMDIsOCArMjAyLDggQEAKIC8qCiAgKiBSZWdpc3RlciBsZWQgY2xhc3Mgd2l0aCB0aGUgc3lzdGVtCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bDM5NDVfbGVkICpsZWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bF9sZWQgKmxlZCwKIAkJCQkgICBlbnVtIGxlZF90eXBlIHR5cGUsIHU4IHNldF9sZWQsCiAJCQkJICAgY2hhciAqdHJpZ2dlcikKIHsKQEAgLTIxOSw3ICsyMTksNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjM0LDcgKzIzNCw3IEBACiAvKgogICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3QgMiBzZWMgVHgvUnggYWN0aXZpdGllcwogICovCi1zdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaW5kZXg7CiAJdTY0IGN1cnJlbnRfdHB0ID0gcHJpdi0+cnh0eHBhY2tldHM7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKIAkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgKiBoYXBwZW4gdmVyeSBmcmVxdWVudCB3ZSBwb3N0cG9uZSBsZWQgY29tbWFuZCB0byBiZSBjYWxsZWQgZnJvbQogICogUkVQTFkgaGFuZGxlciBzbyB3ZSBrbm93IHVjb2RlIGlzIHVwCiAgKi8KLXZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1OCBibGlua19pZHg7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCiAKIC8qIFJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlciAqLwotaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWNoYXIgKnRyaWdnZXI7CiAJaW50IHJldDsKQEAgLTMxNyw3ICszMTcsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOnJhZGlvIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOjpyYWRpbyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9vbjsKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHByaXYsCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczpSWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczo6UlgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6VFgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6OlRYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2wzOTQ1X2xlZF9yZWdpc3Rlcl9sZWQocHJpdiwKQEAgLTM4OSw3ICszODksNyBAQAogCiAKIC8qIHVucmVnaXN0ZXIgbGVkIGNsYXNzICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsMzk0NV9sZWQgKmxlZCwgdTggc2V0X2xlZCkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfbGVkICpsZWQsIHU4IHNldF9sZWQpCiB7CiAJaWYgKCFsZWQtPnJlZ2lzdGVyZWQpCiAJCXJldHVybjsKQEAgLTQwMiw3ICs0MDIsNyBAQAogfQogCiAvKiBVbnJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlcnMgKi8KLXZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOwpAQCAtNDEwLDMgKzQxMCw0IEBACiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10sIDEpOwogfQogCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCmluZGV4IDc0OWFjMDMuLjNiNjU2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNyw0OCArMjcsMjAgQEAKICNpZm5kZWYgSVdMMzk0NV9MRURTX0gKICNkZWZpbmUgSVdMMzk0NV9MRURTX0gKIAotc3RydWN0IGl3bDM5NDVfcHJpdjsKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKLSNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQotI2RlZmluZSBJV0xfTEVEX05BTUVfTEVOIDMxCi0jZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEwMDApCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCi0jZGVmaW5lIElXTF9MRURfQUNUSVZJVFkgICAgICAgKDA8PDEpCi0jZGVmaW5lIElXTF9MRURfTElOSyAgICAgICAgICAgKDE8PDEpCisjaW5jbHVkZSAiaXdsLWxlZC5oIgogCi1lbnVtIGxlZF90eXBlIHsKLQlJV0xfTEVEX1RSR19UWCwKLQlJV0xfTEVEX1RSR19SWCwKLQlJV0xfTEVEX1RSR19BU1NPQywKLQlJV0xfTEVEX1RSR19SQURJTywKLQlJV0xfTEVEX1RSR19NQVgsCi19OwotCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotCi1zdHJ1Y3QgaXdsMzk0NV9sZWQgewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OwotCWNoYXIgbmFtZVszMl07Ci0KLQlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKLQlpbnQgKCpsZWRfb2ZmKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCk7Ci0JaW50ICgqbGVkX3BhdHRlcm4pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAotCQkJICAgIHVuc2lnbmVkIGludCBpZHgpOwotCi0JZW51bSBsZWRfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwotfTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfTEVEUyAqLworc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CiAKKyNlbmRpZiAvKiBJV0xXSUZJX0xFRFMqLwogI2VuZGlmIC8qIElXTDM5NDVfTEVEU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKaW5kZXggMjFjODQxOC4uZjY1YzMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAKICNkZWZpbmUgUlNfTkFNRSAiaXdsLTM5NDUtcnMiCkBAIC01MSw2ICs1Miw3IEBACiAKIHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSB7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlzMzIgKmV4cGVjdGVkX3RwdDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfcGFydGlhbF9mbHVzaDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfZmx1c2g7CkBAIC02Miw3ICs2NCw3IEBACiAJdTggc3RhcnRfcmF0ZTsKIAl1OCBpYnNzX3N0YV9hZGRlZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByYXRlX3NjYWxlX2ZsdXNoOwotCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRdOworCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRfMzk0NV07CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgZGVudHJ5ICpyc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfZmlsZTsKICNlbmRpZgpAQCAtNzEsMTkgKzczLDE5IEBACiAJaW50IGxhc3RfdHhyYXRlX2lkeDsKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfZ1tJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJNywgMTMsIDM1LCA1OCwgMCwgMCwgNzYsIDEwNCwgMTMwLCAxNjgsIDE5MSwgMjAyCiB9OwogCi1zdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCA4MCwgOTMsIDExMywgMTIzLCAxMjUKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYVtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2FbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJMCwgMCwgMCwgMCwgNDAsIDU3LCA3MiwgOTgsIDEyMSwgMTU0LCAxNzcsIDE4NgogfTsKIAotc3RhdGljIHMzMiBpd2wzOTQ1X2V4cGVjdGVkX3RwdF9iW0lXTF9SQVRFX0NPVU5UXSA9IHsKK3N0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYltJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiB9OwogCkBAIC0xMTksMTIgKzEyMSwxMyBAQAogI2RlZmluZSBJV0xfUkFURV9NQVhfV0lORE9XICAgICAgICAgIDYyCiAjZGVmaW5lIElXTF9SQVRFX0ZMVVNIICAgICAgIAkgKDMqSFopCiAjZGVmaW5lIElXTF9SQVRFX1dJTl9GTFVTSCAgICAgICAoSFovMikKLSNkZWZpbmUgSVdMX1JBVEVfSElHSF9USCAgICAgICAgICAxMTUyMAorI2RlZmluZSBJV0wzOV9SQVRFX0hJR0hfVEggICAgICAgICAgMTE1MjAKICNkZWZpbmUgSVdMX1NVQ0NFU1NfVVBfVEgJICAgODk2MAogI2RlZmluZSBJV0xfU1VDQ0VTU19ET1dOX1RICSAgMTA4ODAKICNkZWZpbmUgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEggICAgICAgOAogI2RlZmluZSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCAgICAgICA4CiAjZGVmaW5lIElXTF9SQVRFX0RFQ1JFQVNFX1RIICAgICAgIDE5MjAKKyNkZWZpbmUgSVdMX1JBVEVfUkVUUllfVEgJICAgICAxNQogCiBzdGF0aWMgdTggaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHMzMiByc3NpLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CkBAIC0xNjUsNyArMTY4LDcgQEAKIAl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA9IDA7CiAJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gLTE7CiAJd2luZG93LT5jb3VudGVyID0gMDsKLQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVl9UUFQ7CisJd2luZG93LT5hdmVyYWdlX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOwogCXdpbmRvdy0+c3RhbXAgPSAwOwogfQogCkBAIC0xODEsMjAgKzE4NCwyMSBAQAogCWludCB1bmZsdXNoZWQgPSAwOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJLyoKIAkgKiBGb3IgZWFjaCByYXRlLCBpZiB3ZSBoYXZlIGNvbGxlY3RlZCBkYXRhIG9uIHRoYXQgcmF0ZQogCSAqIGFuZCBpdCBoYXMgYmVlbiBtb3JlIHRoYW4gSVdMX1JBVEVfV0lOX0ZMVVNICiAJICogc2luY2Ugd2UgZmx1c2hlZCwgY2xlYXIgb3V0IHRoZSBnYXRoZXJlZCBzdGF0aXN0aWNzCiAJICovCi0JZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaSsrKSB7CiAJCWlmICghcnNfc3RhLT53aW5baV0uY291bnRlcikKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcnNfc3RhLT53aW5baV0uc3RhbXAgKwogCQkJICAgICAgIElXTF9SQVRFX1dJTl9GTFVTSCkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJmbHVzaGluZyAlZCBzYW1wbGVzIG9mIHJhdGUgIgorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImZsdXNoaW5nICVkIHNhbXBsZXMgb2YgcmF0ZSAiCiAJCQkJICAgICAgICJpbmRleCAlZFxuIiwKIAkJCQkgICAgICAgcnNfc3RhLT53aW5baV0uY291bnRlciwgaSk7CiAJCQlpd2wzOTQ1X2NsZWFyX3dpbmRvdygmcnNfc3RhLT53aW5baV0pOwpAQCAtMjEzLDExICsyMTcsMTIgQEAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmF0ZV9zY2FsZV9mbHVzaCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCWludCB1bmZsdXNoZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHBhY2tldF9jb3VudCwgZHVyYXRpb24sIHBwczsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXVuZmx1c2hlZCA9IGl3bDM5NDVfcmF0ZV9zY2FsZV9mbHVzaF93aW5kb3dzKHJzX3N0YSk7CiAKQEAgLTIzMiw3ICsyMzcsNyBAQAogCQlkdXJhdGlvbiA9CiAJCSAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSByc19zdGEtPmxhc3RfcGFydGlhbF9mbHVzaCk7CiAKLQkJSVdMX0RFQlVHX1JBVEUoIlR4J2QgJWQgcGFja2V0cyBpbiAlZG1zXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAiVHgnZCAlZCBwYWNrZXRzIGluICVkbXNcbiIsCiAJCQkgICAgICAgcGFja2V0X2NvdW50LCBkdXJhdGlvbik7CiAKIAkJLyogRGV0ZXJtaW5lIHBhY2tldHMgcGVyIHNlY29uZCAqLwpAQCAtMjUyLDcgKzI1Nyw3IEBACiAKIAkJcnNfc3RhLT5mbHVzaF90aW1lID0gbXNlY3NfdG9famlmZmllcyhkdXJhdGlvbik7CiAKLQkJSVdMX0RFQlVHX1JBVEUoIm5ldyBmbHVzaCBwZXJpb2Q6ICVkIG1zZWMgYXZlICVkXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAibmV3IGZsdXNoIHBlcmlvZDogJWQgbXNlYyBhdmUgJWRcbiIsCiAJCQkgICAgICAgZHVyYXRpb24sIHBhY2tldF9jb3VudCk7CiAKIAkJbW9kX3RpbWVyKCZyc19zdGEtPnJhdGVfc2NhbGVfZmx1c2gsIGppZmZpZXMgKwpAQCAtMjcwLDcgKzI3NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogLyoqCkBAIC0yODYsNTAgKzI5MSw3MCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJczMyIGZhaWxfY291bnQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJaWYgKCFyZXRyaWVzKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogcmV0cmllcyA9PSAwIC0tIHNob3VsZCBiZSBhdCBsZWFzdCAxXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiByZXRyaWVzID09IDAgLS0gc2hvdWxkIGJlIGF0IGxlYXN0IDFcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwotCXdoaWxlIChyZXRyaWVzLS0pIHsKIAotCQkvKiBJZiB3ZSBoYXZlIGZpbGxlZCB1cCB0aGUgd2luZG93IHRoZW4gc3VidHJhY3Qgb25lIGZyb20gdGhlCi0JCSAqIHN1Y2Nlc3MgY291bnRlciBpZiB0aGUgaGlnaC1iaXQgaXMgY291bnRpbmcgdG93YXJkCi0JCSAqIHN1Y2Nlc3MgKi8KLQkJaWYgKHdpbmRvdy0+Y291bnRlciA9PSBJV0xfUkFURV9NQVhfV0lORE9XKSB7Ci0JCQlpZiAod2luZG93LT5kYXRhICYgKDFVTEwgPDwgKElXTF9SQVRFX01BWF9XSU5ET1cgLSAxKSkpCisJLyoKKwkgKiBLZWVwIHRyYWNrIG9mIG9ubHkgdGhlIGxhdGVzdCA2MiB0eCBmcmFtZSBhdHRlbXB0cyBpbiB0aGlzIHJhdGUncworCSAqIGhpc3Rvcnkgd2luZG93OyBhbnl0aGluZyBvbGRlciBpc24ndCByZWFsbHkgcmVsZXZhbnQgYW55IG1vcmUuCisJICogSWYgd2UgaGF2ZSBmaWxsZWQgdXAgdGhlIHNsaWRpbmcgd2luZG93LCBkcm9wIHRoZSBvbGRlc3QgYXR0ZW1wdDsKKwkgKiBpZiB0aGUgb2xkZXN0IGF0dGVtcHQgKGhpZ2hlc3QgYml0IGluIGJpdG1hcCkgc2hvd3MgInN1Y2Nlc3MiLAorCSAqIHN1YnRyYWN0ICIxIiBmcm9tIHRoZSBzdWNjZXNzIGNvdW50ZXIgKHRoaXMgaXMgdGhlIG1haW4gcmVhc29uCisJICogd2Uga2VlcCB0aGVzZSBiaXRtYXBzISkuCisJICogKi8KKwl3aGlsZSAocmV0cmllcyA+IDApIHsKKwkJaWYgKHdpbmRvdy0+Y291bnRlciA+PSBJV0xfUkFURV9NQVhfV0lORE9XKSB7CisKKwkJCS8qIHJlbW92ZSBlYXJsaWVzdCAqLworCQkJd2luZG93LT5jb3VudGVyID0gSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDE7CisKKwkJCWlmICh3aW5kb3ctPmRhdGEgJiAoMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKSkgeworCQkJCXdpbmRvdy0+ZGF0YSAmPSB+KDFVTEwgPDwgKElXTF9SQVRFX01BWF9XSU5ET1cgLSAxKSk7CiAJCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXItLTsKLQkJfSBlbHNlCi0JCQl3aW5kb3ctPmNvdW50ZXIrKzsKLQotCQkvKiBTbGlkZSB0aGUgd2luZG93IHRvIHRoZSBsZWZ0IG9uZSBiaXQgKi8KLQkJd2luZG93LT5kYXRhID0gKHdpbmRvdy0+ZGF0YSA8PCAxKTsKLQotCQkvKiBJZiB0aGlzIHBhY2tldCB3YXMgYSBzdWNjZXNzIHRoZW4gc2V0IHRoZSBsb3cgYml0IGhpZ2ggKi8KLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyKys7Ci0JCQl3aW5kb3ctPmRhdGEgfD0gMTsKKwkJCX0KIAkJfQogCi0JCS8qIHdpbmRvdy0+Y291bnRlciBjYW4ndCBiZSAwIC0tIGl0IGlzIGVpdGhlciA+MCBvcgotCQkgKiBJV0xfUkFURV9NQVhfV0lORE9XICovCi0JCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IDEyODAwICogd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgLwotCQkgICAgd2luZG93LT5jb3VudGVyOworCQkvKiBJbmNyZW1lbnQgZnJhbWVzLWF0dGVtcHRlZCBjb3VudGVyICovCisJCXdpbmRvdy0+Y291bnRlcisrOwogCi0JCS8qIFRhZyB0aGlzIHdpbmRvdyBhcyBoYXZpbmcgYmVlbiB1cGRhdGVkICovCi0JCXdpbmRvdy0+c3RhbXAgPSBqaWZmaWVzOworCQkvKiBTaGlmdCBiaXRtYXAgYnkgb25lIGZyYW1lICh0aHJvdyBhd2F5IG9sZGVzdCBoaXN0b3J5KSwKKwkJICogT1IgaW4gIjEiLCBhbmQgaW5jcmVtZW50ICJzdWNjZXNzIiBpZiB0aGlzCisJCSAqIGZyYW1lIHdhcyBzdWNjZXNzZnVsLiAqLworCQl3aW5kb3ctPmRhdGEgPDw9IDE7CisJCWlmIChzdWNjZXNzID4gMCkgeworCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIrKzsKKwkJCXdpbmRvdy0+ZGF0YSB8PSAweDE7CisJCQlzdWNjZXNzLS07CisJCX0KIAorCQlyZXRyaWVzLS07CiAJfQogCisJLyogQ2FsY3VsYXRlIGN1cnJlbnQgc3VjY2VzcyByYXRpbywgYXZvaWQgZGl2aWRlLWJ5LTAhICovCisJaWYgKHdpbmRvdy0+Y291bnRlciA+IDApCisJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IDEyOCAqICgxMDAgKiB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcikKKwkJCQkJLyB3aW5kb3ctPmNvdW50ZXI7CisJZWxzZQorCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKKworCS8qIENhbGN1bGF0ZSBhdmVyYWdlIHRocm91Z2hwdXQsIGlmIHdlIGhhdmUgZW5vdWdoIGhpc3RvcnkuICovCiAJaWYgKChmYWlsX2NvdW50ID49IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSB8fAogCSAgICAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPj0gSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKQogCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gKgogCQkJCXJzX3N0YS0+ZXhwZWN0ZWRfdHB0W2luZGV4XSArIDY0KSAvIDEyOCk7CiAJZWxzZQotCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVl9UUFQ7CisJCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKKworCS8qIFRhZyB0aGlzIHdpbmRvdyBhcyBoYXZpbmcgYmVlbiB1cGRhdGVkICovCisJd2luZG93LT5zdGFtcCA9IGppZmZpZXM7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIApAQCAtMzM5LDEwICszNjQsMTAgQEAKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YSA9IHByaXZfc3RhOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKXByaXZfcjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCWludCBpOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJLyogVE9ETzogd2hhdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcmF0ZSBmb3IgU1RBPyBBYm91dCBtaWRkbGU/IE1heWJlIG5vdAogCSAqIHRoZSBsb3dlc3Qgb3IgdGhlIGhpZ2hlc3QgcmF0ZS4uIENvdWxkIGNvbnNpZGVyIHVzaW5nIFJTU0kgZnJvbQpAQCAtMzY1LDcgKzM5MCw3IEBACiAJfQogCiAKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkICpyc19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpcikKQEAgLTM3OSwxMCArNDA0LDExIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCAqcnNfYWxsb2Nfc3RhKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGdmcF90IGdmcCkKK3N0YXRpYyB2b2lkICpyc19hbGxvY19zdGEodm9pZCAqaXdsX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YSA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaXdsX3ByaXY7CiAJaW50IGk7CiAKIAkvKgpAQCAtMzkwLDExICs0MTYsMTEgQEAKIAkgKglhcyB3ZWxsIGp1c3QgcHV0IGFsbCB0aGUgaW5mb3JtYXRpb24gdGhlcmUuCiAJICovCiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAlyc19zdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yc19zdGEpLCBnZnApOwogCWlmICghcnNfc3RhKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogRU5PTUVNXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBFTk9NRU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQwMiw2ICs0MjgsOCBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnJzX3N0YS0+bG9jayk7CiAKKwlyc19zdGEtPnByaXYgPSBwcml2OworCiAJcnNfc3RhLT5zdGFydF9yYXRlID0gSVdMX1JBVEVfSU5WQUxJRDsKIAogCS8qIGRlZmF1bHQgdG8ganVzdCA4MDIuMTFiICovCkBAIC00MTcsMzMgKzQ0NSwzNCBAQAogCXJzX3N0YS0+cmF0ZV9zY2FsZV9mbHVzaC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcnNfc3RhOwogCXJzX3N0YS0+cmF0ZV9zY2FsZV9mbHVzaC5mdW5jdGlvbiA9ICZpd2wzOTQ1X2JnX3JhdGVfc2NhbGVfZmx1c2g7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaSsrKQogCQlpd2wzOTQ1X2NsZWFyX3dpbmRvdygmcnNfc3RhLT53aW5baV0pOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIHJzX3N0YTsKIH0KIAotc3RhdGljIHZvaWQgcnNfZnJlZV9zdGEodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKK3N0YXRpYyB2b2lkIHJzX2ZyZWVfc3RhKHZvaWQgKml3bF9wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJdm9pZCAqcHJpdl9zdGEpCiB7CiAJc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYgKnBzdGEgPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OwogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJcHN0YS0+cnNfc3RhID0gTlVMTDsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAlkZWxfdGltZXJfc3luYygmcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoKTsKIAlrZnJlZShyc19zdGEpOwotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogCiAvKioKICAqIHJzX3R4X3N0YXR1cyAtIFVwZGF0ZSByYXRlIGNvbnRyb2wgdmFsdWVzIGJhc2VkIG9uIFR4IHJlc3VsdHMKICAqCi0gKiBOT1RFOiBVc2VzIGl3bDM5NDVfcHJpdi0+cmV0cnlfcmF0ZSBmb3IgdGhlICMgb2YgcmV0cmllcyBhdHRlbXB0ZWQgYnkKKyAqIE5PVEU6IFVzZXMgaXdsX3ByaXYtPnJldHJ5X3JhdGUgZm9yIHRoZSAjIG9mIHJldHJpZXMgYXR0ZW1wdGVkIGJ5CiAgKiB0aGUgaGFyZHdhcmUgZm9yIGVhY2ggcmF0ZS4KICAqLwogc3RhdGljIHZvaWQgcnNfdHhfc3RhdHVzKHZvaWQgKnByaXZfcmF0ZSwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCkBAIC00NTMsMjIgKzQ4MiwyNSBAQAogCXM4IHJldHJpZXMgPSAwLCBjdXJyZW50X2NvdW50OwogCWludCBzY2FsZV9yYXRlX2luZGV4LCBmaXJzdF9pbmRleCwgbGFzdF9pbmRleDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKXByaXZfcmF0ZTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCi0JcmV0cmllcyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudDsKKwlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKKwkvKiBTYW5pdHkgQ2hlY2sgZm9yIHJldHJpZXMgKi8KKwlpZiAocmV0cmllcyA+IElXTF9SQVRFX1JFVFJZX1RIKQorCQlyZXRyaWVzID0gSVdMX1JBVEVfUkVUUllfVEg7CiAKIAlmaXJzdF9pbmRleCA9IHNiYW5kLT5iaXRyYXRlc1tpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4XS5od192YWx1ZTsKLQlpZiAoKGZpcnN0X2luZGV4IDwgMCkgfHwgKGZpcnN0X2luZGV4ID49IElXTF9SQVRFX0NPVU5UKSkgewotCQlJV0xfREVCVUdfUkFURSgibGVhdmU6IFJhdGUgb3V0IG9mIGJvdW5kczogJWRcbiIsIGZpcnN0X2luZGV4KTsKKwlpZiAoKGZpcnN0X2luZGV4IDwgMCkgfHwgKGZpcnN0X2luZGV4ID49IElXTF9SQVRFX0NPVU5UXzM5NDUpKSB7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogUmF0ZSBvdXQgb2YgYm91bmRzOiAlZFxuIiwgZmlyc3RfaW5kZXgpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCFwcml2X3N0YSkgewotCQlJV0xfREVCVUdfUkFURSgibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogTm8gU1RBIHByaXYgZGF0YSB0byB1cGRhdGUhXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTAyLDcgKzUzNCw3IEBACiAJCWl3bDM5NDVfY29sbGVjdF90eF9kYXRhKHJzX3N0YSwKIAkJCQkgICAgJnJzX3N0YS0+d2luW3NjYWxlX3JhdGVfaW5kZXhdLAogCQkJCSAgICAwLCBjdXJyZW50X2NvdW50LCBzY2FsZV9yYXRlX2luZGV4KTsKLQkJSVdMX0RFQlVHX1JBVEUoIlVwZGF0ZSByYXRlICVkIGZvciAlZCByZXRyaWVzLlxuIiwKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlVwZGF0ZSByYXRlICVkIGZvciAlZCByZXRyaWVzLlxuIiwKIAkJCSAgICAgICBzY2FsZV9yYXRlX2luZGV4LCBjdXJyZW50X2NvdW50KTsKIAogCQlyZXRyaWVzIC09IGN1cnJlbnRfY291bnQ7CkBAIC01MTIsNyArNTQ0LDcgQEAKIAogCiAJLyogVXBkYXRlIHRoZSBsYXN0IGluZGV4IHdpbmRvdyB3aXRoIHN1Y2Nlc3MvZmFpbHVyZSBiYXNlZCBvbiBBQ0sgKi8KLQlJV0xfREVCVUdfUkFURSgiVXBkYXRlIHJhdGUgJWQgd2l0aCAlcy5cbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlVwZGF0ZSByYXRlICVkIHdpdGggJXMuXG4iLAogCQkgICAgICAgbGFzdF9pbmRleCwKIAkJICAgICAgIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykgPwogCQkgICAgICAgInN1Y2Nlc3MiIDogImZhaWx1cmUiKTsKQEAgLTUzNyw3ICs1NjksNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm47CiB9CkBAIC01NDcsNiArNTc5LDcgQEAKIHsKIAl1OCBoaWdoID0gSVdMX1JBVEVfSU5WQUxJRDsKIAl1OCBsb3cgPSBJV0xfUkFURV9JTlZBTElEOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiBfX21heWJlX3VudXNlZCA9IHJzX3N0YS0+cHJpdjsKIAogCS8qIDgwMi4xMUEgd2Fsa3MgdG8gdGhlIG5leHQgbGl0ZXJhbCBhZGphY2VudCByYXRlIGluCiAJICogdGhlIHJhdGUgdGFibGUgKi8KQEAgLTU2NSw3ICs1OTgsOCBAQAogCiAJCS8qIEZpbmQgdGhlIG5leHQgcmF0ZSB0aGF0IGlzIGluIHRoZSByYXRlIG1hc2sgKi8KIAkJaSA9IGluZGV4ICsgMTsKLQkJZm9yIChtYXNrID0gKDEgPDwgaSk7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrLCBtYXNrIDw8PSAxKSB7CisJCWZvciAobWFzayA9ICgxIDw8IGkpOyBpIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsKKwkJICAgICBpKyssIG1hc2sgPDw9IDEpIHsKIAkJCWlmIChyYXRlX21hc2sgJiBtYXNrKSB7CiAJCQkJaGlnaCA9IGk7CiAJCQkJYnJlYWs7CkBAIC01ODUsNyArNjE5LDcgQEAKIAkJCWJyZWFrOwogCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbG93KSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOwogCX0KIAogCWhpZ2ggPSBpbmRleDsKQEAgLTU5OCw3ICs2MzIsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBoaWdoKSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGhpZ2hlciByYXRlOiAlZFxuIiwgaGlnaCk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKIAl9CiAKIAlyZXR1cm4gKGhpZ2ggPDwgOCkgfCBsb3c7CkBAIC02MzEsMTkgKzY2NSwyMCBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YSA9IHByaXZfc3RhOwogCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSAqd2luZG93ID0gTlVMTDsKLQlpbnQgY3VycmVudF90cHQgPSBJV0xfSU5WX1RQVDsKLQlpbnQgbG93X3RwdCA9IElXTF9JTlZfVFBUOwotCWludCBoaWdoX3RwdCA9IElXTF9JTlZfVFBUOworCWludCBjdXJyZW50X3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOworCWludCBsb3dfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CisJaW50IGhpZ2hfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJdTMyIGZhaWxfY291bnQ7CiAJczggc2NhbGVfYWN0aW9uID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJdTE2IGZjOwogCXUxNiByYXRlX21hc2sgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKXByaXZfcjsKKwlzOCBtYXhfcmF0ZV9pZHggPSAtMTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCWlmIChzdGEpCiAJCXJhdGVfbWFzayA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC02NTQsNyArNjg5LDcgQEAKIAlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CiAJICAgICFzdGEgfHwgIXByaXZfc3RhKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogTm8gU1RBIHByaXYgZGF0YSB0byB1cGRhdGUhXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOwogCQlpZiAoIXJhdGVfbWFzaykKIAkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0KIAkJCQkJcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIE5VTEwpOwpAQCAtNjY0LDcgKzY5OSwxNCBAQAogCQlyZXR1cm47CiAJfQogCi0JaW5kZXggPSBtaW4ocnNfc3RhLT5sYXN0X3R4cmF0ZV9pZHggJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CisJLyogZ2V0IHVzZXIgbWF4IHJhdGUgaWYgc2V0ICovCisJbWF4X3JhdGVfaWR4ID0gdHhyYy0+bWF4X3JhdGVfaWR4OworCWlmICgoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgJiYgKG1heF9yYXRlX2lkeCAhPSAtMSkpCisJCW1heF9yYXRlX2lkeCArPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCWlmICgobWF4X3JhdGVfaWR4IDwgMCkgfHwgKG1heF9yYXRlX2lkeCA+PSBJV0xfUkFURV9DT1VOVCkpCisJCW1heF9yYXRlX2lkeCA9IC0xOworCisJaW5kZXggPSBtaW4ocnNfc3RhLT5sYXN0X3R4cmF0ZV9pZHggJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UXzM5NDUgLSAxKTsKIAogCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlyYXRlX21hc2sgPSByYXRlX21hc2sgPDwgSVdMX0ZJUlNUX09GRE1fUkFURTsKQEAgLTY3NCw3ICs3MTYsNyBAQAogCQl1OCBzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBtXG4iLAorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcG1cbiIsCiAJCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQkJc3RhX2lkID0gaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LAogCQkJCSAgICBoZHItPmFkZHIxLCAwLCBDTURfQVNZTkMpOwpAQCAtNjk1LDIxICs3MzcsMzAgQEAKIAkJcnNfc3RhLT5zdGFydF9yYXRlID0gSVdMX1JBVEVfSU5WQUxJRDsKIAl9CiAKKwkvKiBmb3JjZSB1c2VyIG1heCByYXRlIGlmIHNldCBieSB1c2VyICovCisJaWYgKChtYXhfcmF0ZV9pZHggIT0gLTEpICYmIChtYXhfcmF0ZV9pZHggPCBpbmRleCkpIHsKKwkJaWYgKHJhdGVfbWFzayAmICgxIDw8IG1heF9yYXRlX2lkeCkpCisJCQlpbmRleCA9IG1heF9yYXRlX2lkeDsKKwl9CisKIAl3aW5kb3cgPSAmKHJzX3N0YS0+d2luW2luZGV4XSk7CiAKIAlmYWlsX2NvdW50ID0gd2luZG93LT5jb3VudGVyIC0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXI7CiAKLQlpZiAoKChmYWlsX2NvdW50IDw9IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgorCWlmICgoKGZhaWxfY291bnQgPCBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgJiYKIAkgICAgICh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA8IElXTF9SQVRFX01JTl9TVUNDRVNTX1RIKSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7CiAKLQkJSVdMX0RFQlVHX1JBVEUoIkludmFsaWQgYXZlcmFnZV90cHQgb24gcmF0ZSAlZDogIgorCQlJV0xfREVCVUdfUkFURShwcml2LCAiSW52YWxpZCBhdmVyYWdlX3RwdCBvbiByYXRlICVkOiAiCiAJCQkgICAgICAgImNvdW50ZXI6ICVkLCBzdWNjZXNzX2NvdW50ZXI6ICVkLCAiCiAJCQkgICAgICAgImV4cGVjdGVkX3RwdCBpcyAlc05VTExcbiIsCiAJCQkgICAgICAgaW5kZXgsCiAJCQkgICAgICAgd2luZG93LT5jb3VudGVyLAogCQkJICAgICAgIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyLAogCQkJICAgICAgIHJzX3N0YS0+ZXhwZWN0ZWRfdHB0ID8gIm5vdCAiIDogIiIpOworCisJICAgLyogQ2FuJ3QgY2FsY3VsYXRlIHRoaXMgeWV0OyBub3QgZW5vdWdoIGhpc3RvcnkgKi8KKwkJd2luZG93LT5hdmVyYWdlX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOwogCQlnb3RvIG91dDsKIAogCX0KQEAgLTcyMSw2ICs3NzIsMTEgQEAKIAlsb3cgPSBoaWdoX2xvdyAmIDB4ZmY7CiAJaGlnaCA9IChoaWdoX2xvdyA+PiA4KSAmIDB4ZmY7CiAKKwkvKiBJZiB1c2VyIHNldCBtYXggcmF0ZSwgZG9udCBhbGxvdyBoaWdoZXIgdGhhbiB1c2VyIGNvbnN0cmFpbiAqLworCWlmICgobWF4X3JhdGVfaWR4ICE9IC0xKSAmJiAobWF4X3JhdGVfaWR4IDwgaGlnaCkpCisJCWhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOworCisJLyogQ29sbGVjdCBNZWFzdXJlZCB0aHJvdWdocHV0cyBvZiBhZGphY2VudCByYXRlcyAqLwogCWlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJbG93X3RwdCA9IHJzX3N0YS0+d2luW2xvd10uYXZlcmFnZV90cHQ7CiAKQEAgLTcyOSw1NiArNzg1LDc5IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCXNjYWxlX2FjdGlvbiA9IDE7CisJc2NhbGVfYWN0aW9uID0gMDsKIAorCS8qIExvdyBzdWNjZXNzIHJhdGlvICwgbmVlZCB0byBkcm9wIHRoZSByYXRlICovCiAJaWYgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPCBJV0xfUkFURV9ERUNSRUFTRV9USCkgfHwgIWN1cnJlbnRfdHB0KSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyBzdWNjZXNzX3JhdGlvXG4iKTsKIAkJc2NhbGVfYWN0aW9uID0gLTE7Ci0JfSBlbHNlIGlmICgobG93X3RwdCA9PSBJV0xfSU5WX1RQVCkgJiYgKGhpZ2hfdHB0ID09IElXTF9JTlZfVFBUKSkKLQkJc2NhbGVfYWN0aW9uID0gMTsKLQllbHNlIGlmICgobG93X3RwdCAhPSBJV0xfSU5WX1RQVCkgJiYgKGhpZ2hfdHB0ICE9IElXTF9JTlZfVFBUKSAmJgorCisJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzLAorCSAqIHRyeSBpbmNyZWFzZSAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgPT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAgIChoaWdoX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkpIHsKKworCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKQorCQkJc2NhbGVfYWN0aW9uID0gMTsKKwkJZWxzZSBpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCisJCQlzY2FsZV9hY3Rpb24gPSAtMTsKKworCS8qIEJvdGggYWRqYWNlbnQgdGhyb3VnaHB1dHMgYXJlIG1lYXN1cmVkLCBidXQgbmVpdGhlciBvbmUgaGFzCisJICogYmV0dGVyIHRocm91Z2hwdXQ7IHdlJ3JlIHVzaW5nIHRoZSBiZXN0IHJhdGUsIGRvbid0IGNoYW5nZQorCSAqIGl0ISAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAoaGlnaF90cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCiAJCSAobG93X3RwdCA8IGN1cnJlbnRfdHB0KSAmJiAoaGlnaF90cHQgPCBjdXJyZW50X3RwdCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIk5vIGFjdGlvbiAtLSBsb3cgWyVkXSAmIGhpZ2ggWyVkXSA8ICIKKworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTm8gYWN0aW9uIC0tIGxvdyBbJWRdICYgaGlnaCBbJWRdIDwgIgogCQkJICAgICAgICJjdXJyZW50X3RwdCBbJWRdXG4iLAogCQkJICAgICAgIGxvd190cHQsIGhpZ2hfdHB0LCBjdXJyZW50X3RwdCk7CiAJCXNjYWxlX2FjdGlvbiA9IDA7CisKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhdGVzIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCX0gZWxzZSB7Ci0JCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WX1RQVCkgewotCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQpCisJCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgeworCisJCQkvKiBIaWdoIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0LCBJbmNyZWFzZQorCQkJICogcmF0ZSAqLworCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQgJiYKKwkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCWVsc2UgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKKwkJCQlJV0xfREVCVUdfUkFURShwcml2LAorCQkJCSAgICAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAkJCX0KLQkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZfVFBUKSB7CisJCX0gZWxzZSBpZiAobG93X3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgewogCQkJaWYgKGxvd190cHQgPiBjdXJyZW50X3RwdCkgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyB0cHRcbiIpOworCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsCisJCQkJICAgICJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CiAJCQkJc2NhbGVfYWN0aW9uID0gLTE7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSBpZiAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKKwkJCQkvKiBMb3dlciByYXRlIGhhcyBiZXR0ZXIKKwkJCQkgKiB0aHJvdWdocHV0LGRlY3JlYXNlIHJhdGUgKi8KIAkJCQlzY2FsZV9hY3Rpb24gPSAxOworCQkJfQogCQl9CiAJfQogCi0JaWYgKHNjYWxlX2FjdGlvbiA9PSAtMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvID4gSVdMX1NVQ0NFU1NfRE9XTl9USCkKLQkJCXNjYWxlX2FjdGlvbiA9IDA7Ci0JfSBlbHNlIGlmIChzY2FsZV9hY3Rpb24gPT0gMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvIDwgSVdMX1NVQ0NFU1NfVVBfVEgpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJObyBhY3Rpb24gLS0gc3VjY2Vzc19yYXRpbyBbJWRdIDwgIgotCQkJICAgICAgICJTVUNDRVNTIFVQXG4iLCB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8pOwotCQkJc2NhbGVfYWN0aW9uID0gMDsKLQkJfQotCX0KKwkvKiBTYW5pdHkgY2hlY2s7IGFza2VkIGZvciBkZWNyZWFzZSwgYnV0IHN1Y2Nlc3MgcmF0ZSBvciB0aHJvdWdocHV0CisJICogaGFzIGJlZW4gZ29vZCBhdCBvbGQgcmF0ZS4gIERvbid0IGNoYW5nZSBpdC4gKi8KKwlpZiAoKHNjYWxlX2FjdGlvbiA9PSAtMSkgJiYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKSAmJgorCQkgICAgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPiBJV0xfUkFURV9ISUdIX1RIKSB8fAorCQkgICAgIChjdXJyZW50X3RwdCA+ICgxMDAgKiByc19zdGEtPmV4cGVjdGVkX3RwdFtsb3ddKSkpKQorCQlzY2FsZV9hY3Rpb24gPSAwOwogCiAJc3dpdGNoIChzY2FsZV9hY3Rpb24pIHsKIAljYXNlIC0xOgorCisJCS8qIERlY3Jlc2UgcmF0ZSAqLwogCQlpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCiAJCQlpbmRleCA9IGxvdzsKIAkJYnJlYWs7CiAKIAljYXNlIDE6CisJCS8qIEluY3JlYXNlIHJhdGUgKi8KIAkJaWYgKGhpZ2ggIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJCWluZGV4ID0gaGlnaDsKIApAQCAtNzg2LDEwICs4NjUsMTEgQEAKIAogCWNhc2UgMDoKIAlkZWZhdWx0OgorCQkvKiBObyBjaGFuZ2UgKi8KIAkJYnJlYWs7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCiAJCSAgICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gpOwogCiAgb3V0OgpAQCAtODAxLDcgKzg4MSw3IEBACiAJZWxzZQogCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHJzX3N0YS0+bGFzdF90eHJhdGVfaWR4OwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogJWRcbiIsIGluZGV4KTsKIH0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCkBAIC04MTUsMjQgKzg5NSwzMSBAQAogCQkJCQkJICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgajsKKwlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZXNjICs9IHNwcmludGYoYnVmZiArIGRlc2MsICJ0eCBwYWNrZXRzPSVkIGxhc3QgcmF0ZSBpbmRleD0lZFxuIgogCQkJInJhdGU9MHglWCBmbHVzaCB0aW1lICVkXG4iLAogCQkJbHFfc3RhLT50eF9wYWNrZXRzLAogCQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHgsCiAJCQlscV9zdGEtPnN0YXJ0X3JhdGUsIGppZmZpZXNfdG9fbXNlY3MobHFfc3RhLT5mbHVzaF90aW1lKSk7Ci0JZm9yIChqID0gMDsgaiA8IElXTF9SQVRFX0NPVU5UOyBqKyspIHsKKwlmb3IgKGogPSAwOyBqIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaisrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsCiAJCQkJImNvdW50ZXI9JWQgc3VjY2Vzcz0lZCAlJT0lZFxuIiwKIAkJCQlscV9zdGEtPndpbltqXS5jb3VudGVyLAogCQkJCWxxX3N0YS0+d2luW2pdLnN1Y2Nlc3NfY291bnRlciwKIAkJCQlscV9zdGEtPndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfb3BzID0gewpAQCAtODc3LDE4ICs5NjQsMTggQEAKIAogdm9pZCBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczMyIHN0YV9pZCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJczMyIHJzc2kgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YTsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC05MjQsMTEgKzEwMTEsMTEgQEAKIAlpZiAocnNzaSA9PSAwKQogCQlyc3NpID0gSVdMX01JTl9SU1NJX1ZBTDsKIAotCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SQVRFLCAiTmV0d29yayBSU1NJOiAlZFxuIiwgcnNzaSk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIk5ldHdvcmsgUlNTSTogJWRcbiIsIHJzc2kpOwogCiAJcnNfc3RhLT5zdGFydF9yYXRlID0gaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHJzc2ksIHByaXYtPmJhbmQpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCiAJCSAgICAgICAiJWQgKHBsY3AgMHgleClcbiIsIHJzc2ksIHJzX3N0YS0+c3RhcnRfcmF0ZSwKIAkJICAgICAgIGl3bDM5NDVfcmF0ZXNbcnNfc3RhLT5zdGFydF9yYXRlXS5wbGNwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjYxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9yc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9yc19oX18KLQotc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKLQl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLwotCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLwotCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KLQl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLwotCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCi0JdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwotCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLwotCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KLX07Ci0KLS8qCi0gKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLSAqLwotZW51bSB7Ci0JSVdMX1JBVEVfMU1fSU5ERVggPSAwLAotCUlXTF9SQVRFXzJNX0lOREVYLAotCUlXTF9SQVRFXzVNX0lOREVYLAotCUlXTF9SQVRFXzExTV9JTkRFWCwKLQlJV0xfUkFURV82TV9JTkRFWCwKLQlJV0xfUkFURV85TV9JTkRFWCwKLQlJV0xfUkFURV8xMk1fSU5ERVgsCi0JSVdMX1JBVEVfMThNX0lOREVYLAotCUlXTF9SQVRFXzI0TV9JTkRFWCwKLQlJV0xfUkFURV8zNk1fSU5ERVgsCi0JSVdMX1JBVEVfNDhNX0lOREVYLAotCUlXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfUkFURV9DT1VOVCwKLQlJV0xfUkFURV9JTlZNX0lOREVYLAotCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9JTlZNX0lOREVYCi19OwotCi1lbnVtIHsKLQlJV0xfUkFURV82TV9JTkRFWF9UQUJMRSA9IDAsCi0JSVdMX1JBVEVfOU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTJNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzE4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV8yNE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMzZNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzQ4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV81NE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMk1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFX0lOVk1fSU5ERVhfVEFCTEUgPSBJV0xfUkFURV9JTlZNX0lOREVYLAotfTsKLQotZW51bSB7Ci0JSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAotCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKLQlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKLX07Ci0KLS8qICNkZWZpbmUgdnMuIGVudW0gdG8ga2VlcCBmcm9tIGRlZmF1bHRpbmcgdG8gJ2xhcmdlIGludGVnZXInICovCi0jZGVmaW5lCUlXTF9SQVRFXzZNX01BU0sgICAoMSA8PCBJV0xfUkFURV82TV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfOU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzlNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTJNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xOE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMThNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8yNE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMjRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8zNk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMzZNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV80OE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNDhNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV81NE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNTRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xTV9NQVNLICAgKDEgPDwgSVdMX1JBVEVfMU1fSU5ERVgpCi0jZGVmaW5lCUlXTF9SQVRFXzJNX01BU0sgICAoMSA8PCBJV0xfUkFURV8yTV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfNU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzVNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMU1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTFNX0lOREVYKQotCi0vKiAzOTQ1IHVDb2RlIEFQSSB2YWx1ZXMgZm9yIChsZWdhY3kpIGJpdCByYXRlcywgYm90aCBPRkRNIGFuZCBDQ0sgKi8KLWVudW0gewotCUlXTF9SQVRFXzZNX1BMQ1AgPSAxMywKLQlJV0xfUkFURV85TV9QTENQID0gMTUsCi0JSVdMX1JBVEVfMTJNX1BMQ1AgPSA1LAotCUlXTF9SQVRFXzE4TV9QTENQID0gNywKLQlJV0xfUkFURV8yNE1fUExDUCA9IDksCi0JSVdMX1JBVEVfMzZNX1BMQ1AgPSAxMSwKLQlJV0xfUkFURV80OE1fUExDUCA9IDEsCi0JSVdMX1JBVEVfNTRNX1BMQ1AgPSAzLAotCUlXTF9SQVRFXzFNX1BMQ1AgPSAxMCwKLQlJV0xfUkFURV8yTV9QTENQID0gMjAsCi0JSVdMX1JBVEVfNU1fUExDUCA9IDU1LAotCUlXTF9SQVRFXzExTV9QTENQID0gMTEwLAotfTsKLQotLyogTUFDIGhlYWRlciB2YWx1ZXMgZm9yIGJpdCByYXRlcyAqLwotZW51bSB7Ci0JSVdMX1JBVEVfNk1fSUVFRSA9IDEyLAotCUlXTF9SQVRFXzlNX0lFRUUgPSAxOCwKLQlJV0xfUkFURV8xMk1fSUVFRSA9IDI0LAotCUlXTF9SQVRFXzE4TV9JRUVFID0gMzYsCi0JSVdMX1JBVEVfMjRNX0lFRUUgPSA0OCwKLQlJV0xfUkFURV8zNk1fSUVFRSA9IDcyLAotCUlXTF9SQVRFXzQ4TV9JRUVFID0gOTYsCi0JSVdMX1JBVEVfNTRNX0lFRUUgPSAxMDgsCi0JSVdMX1JBVEVfMU1fSUVFRSA9IDIsCi0JSVdMX1JBVEVfMk1fSUVFRSA9IDQsCi0JSVdMX1JBVEVfNU1fSUVFRSA9IDExLAotCUlXTF9SQVRFXzExTV9JRUVFID0gMjIsCi19OwotCi0jZGVmaW5lIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSyAgICBcCi0gICAgICAgKElXTF9SQVRFXzFNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMk1fTUFTSykKLQotI2RlZmluZSBJV0xfQ0NLX1JBVEVTX01BU0sgICAgICAgICAgXAotICAgICAgIChJV0xfQkFTSUNfUkFURVNfTUFTSyAgICAgIHwgXAotCUlXTF9SQVRFXzVNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMTFNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyAgIFwKLQkoSVdMX1JBVEVfNk1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzEyTV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMjRNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fUkFURVNfTUFTSyAgICAgICAgIFwKLSAgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJV0xfUkFURV85TV9NQVNLICAgICAgICAgIHwgXAotCUlXTF9SQVRFXzE4TV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMzZNX01BU0sgICAgICAgICB8IFwKLQlJV0xfUkFURV80OE1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzU0TV9NQVNLKQotCi0jZGVmaW5lIElXTF9CQVNJQ19SQVRFU19NQVNLICAgICAgICAgXAotCShJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAotCSBJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0spCi0KLSNkZWZpbmUgSVdMX1JBVEVTX01BU0sgKCgxIDw8IElXTF9SQVRFX0NPVU5UKSAtIDEpCi0KLSNkZWZpbmUgSVdMX0lOVl9UUFQgICAgLTEKLQotI2RlZmluZSBJV0xfTUlOX1JTU0lfVkFMICAgICAgICAgICAgICAgICAtMTAwCi0jZGVmaW5lIElXTF9NQVhfUlNTSV9WQUwgICAgICAgICAgICAgICAgICAgIDAKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLQotc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQotewotCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKLQotCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCi0JCXJhdGUgPSByYXRlX2luZGV4OwotCXJldHVybiByYXRlOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCi0gKgotICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCi0gKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KLSAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FsbGJhY2tzCi0gKgotICogU2luY2UgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gaXMgaGFyZHdhcmUgc3BlY2lmaWMsIHRoZXJlIGlzIG5vIG5lZWQKLSAqIG9yIHJlYXNvbiB0byBwbGFjZSBpdCBhcyBhIHN0YW5kIGFsb25lIG1vZHVsZS4gIFRoZSBkcml2ZXIgY2FuIGNhbGwKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKiB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICBUaGlzIHNob3VsZCBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gY2FsbGluZwotICogaWVlZTgwMjExX3JlZ2lzdGVyX2h3Ci0gKgotICovCi1leHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcsIGJ1dCBiZWZvcmUKLSAqIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCi0gKi8KLWV4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDQ1Y2ZhMWNmLi5iYTdlNzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM4LDEwICszOCwxNSBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2luY2x1ZGUgIml3bC0zOTQ1LWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1maC5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtMzk0NS5oIgorI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtYWduLXJzLmgiCiAKICNkZWZpbmUgSVdMX0RFQ0xBUkVfUkFURV9JTkZPKHIsIGlwLCBpbiwgcnAsIHJuLCBwcCwgbnApICAgIFwKIAlbSVdMX1JBVEVfIyNyIyNNX0lOREVYXSA9IHsgSVdMX1JBVEVfIyNyIyNNX1BMQ1AsICAgXApAQCAtNjMsNyArNjgsNyBAQAogICogbWFwcyB0byBJV0xfUkFURV9JTlZBTElECiAgKgogICovCi1jb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF0gPSB7Citjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAlJV0xfREVDTEFSRV9SQVRFX0lORk8oMSwgSU5WLCAyLCBJTlYsIDIsIElOViwgMiksICAgIC8qICAxbWJwcyAqLwogCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygyLCAxLCA1LCAxLCA1LCAxLCA1KSwgICAgICAgICAgLyogIDJtYnBzICovCiAJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDUsIDIsIDYsIDIsIDExLCAyLCAxMSksICAgICAgICAvKjUuNW1icHMgKi8KQEAgLTkxLDcgKzk2LDcgQEAKICAqIFVzZSBmb3Igb25seSBzcGVjaWFsIGRlYnVnZ2luZy4gIFRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyIGFzLWlzLAogICogICB5b3UnbGwgbmVlZCB0byBwcm92aWRlIHRoZSBzcGVjaWFsIGJpdHMhIC4uLgogICogICAuLi4gYW5kIHNldCBJV0xfRVZUX0RJU0FCTEUgdG8gMS4gKi8KLXZvaWQgaXdsMzk0NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMTUwLDM0ICsxNTUsMzQgQEAKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZGlzYWJsZV9wdHIgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICg0ICogc2l6ZW9mKHUzMikpKTsKLQlhcnJheV9zaXplID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoNSAqIHNpemVvZih1MzIpKSk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJZGlzYWJsZV9wdHIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkpOworCWFycmF5X3NpemUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDUgKiBzaXplb2YodTMyKSkpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoSVdMX0VWVF9ESVNBQkxFICYmIChhcnJheV9zaXplID09IElXTF9FVlRfRElTQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIHNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgYXQgMHgleFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBzZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIGF0IDB4JXhcbiIsCiAJCQkgICAgICAgZGlzYWJsZV9wdHIpOwotCQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAkJZm9yIChpID0gMDsgaSA8IElXTF9FVlRfRElTQUJMRV9TSVpFOyBpKyspCi0JCQlpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHByaXYsCisJCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwKIAkJCQkJICAgZGlzYWJsZV9wdHIgKyAoaSAqIHNpemVvZih1MzIpKSwKIAkJCQkJICAgZXZ0X2Rpc2FibGVbaV0pOwogCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJTZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIG1heSBiZSBkaXNhYmxlZFxuIik7Ci0JCUlXTF9ERUJVR19JTkZPKCIgIGJ5IHdyaXRpbmcgXCIxXCJzIGludG8gZGlzYWJsZSBiaXRtYXBcbiIpOwotCQlJV0xfREVCVUdfSU5GTygiICBpbiBTUkFNIGF0IDB4JXgsIHNpemUgJWQgdTMyc1xuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgbWF5IGJlIGRpc2FibGVkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiAgYnkgd3JpdGluZyBcIjFcInMgaW50byBkaXNhYmxlIGJpdG1hcFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIgIGluIFNSQU0gYXQgMHgleCwgc2l6ZSAlZCB1MzJzXG4iLAogCQkJICAgICAgIGRpc2FibGVfcHRyLCBhcnJheV9zaXplKTsKIAl9CiAKQEAgLTE5Myw0MCArMTk4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qKgotICogaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyAtIEdldCBhbnRlbm5hIGZsYWdzIGZvciBSWE9OIGNvbW1hbmQKLSAqIEBwcml2OiBlZXByb20gYW5kIGFudGVubmEgZmllbGRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBhbnRlbm5hIGZsYWdzCi0gKgotICogcHJpdi0+ZWVwcm9tICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAotICogcHJpdi0+YW50ZW5uYSBzcGVjaWZpZXMgdGhlIGFudGVubmEgZGl2ZXJzaXR5IG1vZGU6Ci0gKgotICogSVdMX0FOVEVOTkFfRElWRVJTSVRZIC0gTklDIHNlbGVjdHMgYmVzdCBhbnRlbm5hIGJ5IGl0c2VsZgotICogSVdMX0FOVEVOTkFfTUFJTiAgICAgIC0gRm9yY2UgTUFJTiBhbnRlbm5hCi0gKiBJV0xfQU5URU5OQV9BVVggICAgICAgLSBGb3JjZSBBVVggYW50ZW5uYQotICovCi1fX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN3aXRjaCAocHJpdi0+YW50ZW5uYSkgewotCWNhc2UgSVdMX0FOVEVOTkFfRElWRVJTSVRZOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgSVdMX0FOVEVOTkFfTUFJTjoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQV9NU0s7Ci0KLQljYXNlIElXTF9BTlRFTk5BX0FVWDoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7Ci0JfQotCi0JLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KLQlJV0xfRVJST1IoIkJhZCBhbnRlbm5hIHNlbGVjdG9yIHZhbHVlICgweCV4KVxuIiwgcHJpdi0+YW50ZW5uYSk7Ci0JcmV0dXJuIDA7CQkvKiAiZGl2ZXJzaXR5IiBpcyBkZWZhdWx0IGlmIGVycm9yICovCi19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAjZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKml3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpCkBAIC0yNjYsNyArMjM4LDcgQEAKICAqIGZvciBBIGFuZCBCIG1vZGUgd2UgbmVlZCB0byBvdmVycmlnaHQgcHJldgogICogdmFsdWUKICAqLwotaW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCByYXRlKQoraW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHJhdGUpCiB7CiAJaW50IG5leHRfcmF0ZSA9IGl3bDM5NDVfZ2V0X3ByZXZfaWVlZV9yYXRlKHJhdGUpOwogCkBAIC0yNzksNyArMjUxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQlpZiAoIShwcml2LT5zdGFfc3VwcF9yYXRlcyAmIElXTF9PRkRNX1JBVEVTX01BU0spICYmCi0JCSAgICBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCQlpZiAocmF0ZSA9PSBJV0xfUkFURV8xMU1fSU5ERVgpCiAJCQkJbmV4dF9yYXRlID0gSVdMX1JBVEVfNU1fSU5ERVg7CiAJCX0KQEAgLTMwMCwxMiArMjcyLDEyIEBACiAgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gQXMgcmVzdWx0LCBzb21lIGZyZWUgc3BhY2UgZm9ybXMuIElmIHRoZXJlIGlzCiAgKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKKwlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4X2luZm87CiAKIAlCVUdfT04odHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKTsKIApAQCAtMzE1LDEwICsyODcsMTAgQEAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYlswXSk7CiAJCXR4X2luZm8tPnNrYlswXSA9IE5VTEw7Ci0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCX0KIAotCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgorCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyayAmJiAodHhxX2lkID49IDApICYmCiAJCQkodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKSAmJgogCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKIAkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CkBAIC0zMjcsMjIgKzI5OSwyMiBAQAogLyoqCiAgKiBpd2wzOTQ1X3J4X3JlcGx5X3R4IC0gSGFuZGxlIFR4IHJlc3BvbnNlCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfdHgoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3R4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CiAJdTE2IHNlcXVlbmNlID0gbGUxNl90b19jcHUocGt0LT5oZHIuc2VxdWVuY2UpOwogCWludCB0eHFfaWQgPSBTRVFfVE9fUVVFVUUoc2VxdWVuY2UpOwogCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgKnR4X3Jlc3AgPSAodm9pZCAqKSZwa3QtPnUucmF3WzBdOwogCXUzMiAgc3RhdHVzID0gbGUzMl90b19jcHUodHhfcmVzcC0+c3RhdHVzKTsKIAlpbnQgcmF0ZV9pZHg7CiAJaW50IGZhaWw7CiAKLQlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoaXdsMzk0NV94Ml9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCisJaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgeworCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCiAJCQkgIHR4cS0+cS5yZWFkX3B0cik7CkBAIC0zNjYsMTUgKzMzOCwxNSBAQAogCWluZm8tPmZsYWdzIHw9ICgoc3RhdHVzICYgVFhfU1RBVFVTX01TSykgPT0gVFhfU1RBVFVTX1NVQ0NFU1MpID8KIAkJCQlJRUVFODAyMTFfVFhfU1RBVF9BQ0sgOiAwOwogCi0JSVdMX0RFQlVHX1RYKCJUeCBxdWV1ZSAlZCBTdGF0dXMgJXMgKDB4JTA4eCkgcGxjcCByYXRlICVkIHJldHJpZXMgJWRcbiIsCisJSVdMX0RFQlVHX1RYKHByaXYsICJUeCBxdWV1ZSAlZCBTdGF0dXMgJXMgKDB4JTA4eCkgcGxjcCByYXRlICVkIHJldHJpZXMgJWRcbiIsCiAJCQl0eHFfaWQsIGl3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHN0YXR1cyksIHN0YXR1cywKIAkJCXR4X3Jlc3AtPnJhdGUsIHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWUpOwogCi0JSVdMX0RFQlVHX1RYX1JFUExZKCJUeCBxdWV1ZSByZWNsYWltICVkXG4iLCBpbmRleCk7CisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUeCBxdWV1ZSByZWNsYWltICVkXG4iLCBpbmRleCk7CiAJaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwogCiAJaWYgKGl3bF9jaGVja19iaXRzKHN0YXR1cywgVFhfQUJPUlRfUkVRVUlSRURfTVNLKSkKLQkJSVdMX0VSUk9SKCJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CiB9CiAKIApAQCAtMzg3LDE0ICszNTksMTQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3ZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SWCgiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKIAkJICAgICAoaW50KXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKSwKIAkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbikpOwogCi0JbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLCBwa3QtPnUucmF3LCBzaXplb2YocHJpdi0+c3RhdGlzdGljcykpOworCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljc18zOSwgcGt0LT51LnJhdywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3NfMzkpKTsKIAogCWl3bDM5NDVfbGVkX2JhY2tncm91bmQocHJpdik7CiAKQEAgLTQwNiw3ICszNzgsNyBAQAogICogTWlzYy4gaW50ZXJuYWwgc3RhdGUgYW5kIGhlbHBlciBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAogLyoqCiAgKiBpd2wzOTQ1X3JlcG9ydF9mcmFtZSAtIGR1bXAgZnJhbWUgdG8gc3lzbG9nIGR1cmluZyBkZWJ1ZyBzZXNzaW9ucwpAQCAtNDE1LDggKzM4Nyw4IEBACiAgKiBpbmNsdWRpbmcgc2VsZWN0aXZlIGZyYW1lIGR1bXBzLgogICogZ3JvdXAxMDAgcGFyYW1ldGVyIHNlbGVjdHMgd2hldGhlciB0byBzaG93IDEgb3V0IG9mIDEwMCBnb29kIGZyYW1lcy4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0LAorc3RhdGljIHZvaWQgX2l3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKIHsKIAl1MzIgdG9fdXM7CkBAIC01MjQsMTMgKzQ5NiwxMyBAQAogCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCiAJCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLwogCQlpZiAoZGF0YWZyYW1lKQotCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgogCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0lZCwgXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKIAkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgcmF0ZSk7CiAJCWVsc2UgewogCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLwotCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCisJCQlJV0xfREVCVUdfUlgocHJpdiwgIiVzOiAweCUwNHgsIGRzdD0weCUwMngsICIKIAkJCQkgICAgICJzcmM9MHglMDJ4LCByc3NpPSV1LCB0aW09JWx1IHVzZWMsICIKIAkJCQkgICAgICJwaHk9MHglMDJ4LCBjaG5sPSVkXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKQEAgLTU0MCwxOCArNTEyLDI3IEBACiAJCX0KIAl9CiAJaWYgKHByaW50X2R1bXApCi0JCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JYLCBkYXRhLCBsZW5ndGgpOworCQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JYLCBkYXRhLCBsZW5ndGgpOwogfQorCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCit7CisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX1JYKQorCQlfaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHBrdCwgaGVhZGVyLCBncm91cDEwMCk7Cit9CisKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0LAorc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKIHsKIH0KICNlbmRpZgogCiAvKiBUaGlzIGlzIG5lY2Vzc2FyeSBvbmx5IGZvciBhIG51bWJlciBvZiBzdGF0aXN0aWNzLCBzZWUgdGhlIGNhbGxlci4gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2lzX25ldHdvcmtfcGFja2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcikKIHsKIAkvKiBGaWx0ZXIgaW5jb21pbmcgcGFja2V0cyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgdGFyZ2V0ZWQgdG93YXJkCkBAIC01NjgsMTIgKzU0OSwxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YiwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopSVdMX1JYX0RBVEEocGt0KTsKICNlbmRpZgogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciAqcnhfaGRyID0gSVdMX1JYX0hEUihwa3QpOwpAQCAtNTgxLDE1ICs1NjIsMTUgQEAKIAlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShyeF9oZHItPmxlbik7CiAKIAkvKiBXZSByZWNlaXZlZCBkYXRhIGZyb20gdGhlIEhXLCBzbyBzdG9wIHRoZSB3YXRjaGRvZyAqLwotCWlmICh1bmxpa2VseSgobGVuICsgSVdMX1JYX0ZSQU1FX1NJWkUpID4gc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJSVdMX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhXG4iKTsKKwlpZiAodW5saWtlbHkoKGxlbiArIElXTDM5X1JYX0ZSQU1FX1NJWkUpID4gc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KCFwcml2LT5pc19vcGVuKSkgewotCQlJV0xfREVCVUdfRFJPUF9MSU1JVAotCQkgICAgKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVuLlxuIik7CisJCUlXTF9ERUJVR19EUk9QX0xJTUlUKHByaXYsCisJCQkiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC01OTcsMTEgKzU3OCwxMiBAQAogCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgc2tiIHRvIHRoZSBzaXplIG9mIHRoZSBmcmFtZSAqLwogCXNrYl9wdXQocnhiLT5za2IsIGxlMTZfdG9fY3B1KHJ4X2hkci0+bGVuKSk7CiAKLQlpZiAoaXdsMzk0NV9wYXJhbV9od2NyeXB0bykKLQkJaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcocHJpdiwgcnhiLT5za2IsCisJaWYgKCFpd2wzOTQ1X21vZF9wYXJhbXMuc3dfY3J5cHRvKQorCQlpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKHByaXYsCisJCQkJICAgICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4Yi0+c2tiLT5kYXRhLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShyeF9lbmQtPnN0YXR1cyksIHN0YXRzKTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXByaXYtPnJ4dHhwYWNrZXRzICs9IGxlbjsKICNlbmRpZgpAQCAtNjExLDEyICs1OTMsMTIgQEAKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOX0FGVEVSX0FTU09DIChIWio2KQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3J4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzICpyeF9zdGF0cyA9IElXTF9SWF9TVEFUUyhwa3QpOwogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciAqcnhfaGRyID0gSVdMX1JYX0hEUihwa3QpOwogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2VuZCAqcnhfZW5kID0gSVdMX1JYX0VORChwa3QpOwpAQCAtNjQ0LDIyICs2MjYsMjEgQEAKIAkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAogCWlmICgodW5saWtlbHkocnhfc3RhdHMtPnBoeV9jb3VudCA+IDIwKSkpIHsKLQkJSVdMX0RFQlVHX0RST1AKLQkJICAgICgiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogIgotCQkgICAgICIlZC9uIiwgcnhfc3RhdHMtPnBoeV9jb3VudCk7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJkc3Agc2l6ZSBvdXQgb2YgcmFuZ2UgWzAsMjBdOiAlZC9uIiwKKwkJCQlyeF9zdGF0cy0+cGh5X2NvdW50KTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghKHJ4X2VuZC0+c3RhdHVzICYgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUikKIAkgICAgfHwgIShyeF9lbmQtPnN0YXR1cyAmIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XKSkgewotCQlJV0xfREVCVUdfUlgoIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwgcnhfZW5kLT5zdGF0dXMpOworCQlJV0xfREVCVUdfUlgocHJpdiwgIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwgcnhfZW5kLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAKIAogCS8qIENvbnZlcnQgMzk0NSdzIHJzc2kgaW5kaWNhdG9yIHRvIGRCbSAqLwotCXJ4X3N0YXR1cy5zaWduYWwgPSByeF9zdGF0cy0+cnNzaSAtIElXTF9SU1NJX09GRlNFVDsKKwlyeF9zdGF0dXMuc2lnbmFsID0gcnhfc3RhdHMtPnJzc2kgLSBJV0wzOV9SU1NJX09GRlNFVDsKIAogCS8qIFNldCBkZWZhdWx0IG5vaXNlIHZhbHVlIHRvIC0xMjcgKi8KIAlpZiAocHJpdi0+bGFzdF9yeF9ub2lzZSA9PSAwKQpAQCAtNjkxLDcgKzY3Miw3IEBACiAJfQogCiAKLQlJV0xfREVCVUdfU1RBVFMoIlJzc2kgJWQgbm9pc2UgJWQgcXVhbCAlZCBzaWdfYXZnICVkIG5vaXNlX2RpZmYgJWRcbiIsCisJSVdMX0RFQlVHX1NUQVRTKHByaXYsICJSc3NpICVkIG5vaXNlICVkIHF1YWwgJWQgc2lnX2F2ZyAlZCBub2lzZV9kaWZmICVkXG4iLAogCQkJcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMucXVhbCwKIAkJCXJ4X3N0YXRzX3NpZ19hdmcsIHJ4X3N0YXRzX25vaXNlX2RpZmYpOwogCkBAIC02OTksMTcgKzY4MCwxNCBAQAogCiAJbmV0d29ya19wYWNrZXQgPSBpd2wzOTQ1X2lzX25ldHdvcmtfcGFja2V0KHByaXYsIGhlYWRlcik7CiAKLQlJV0xfREVCVUdfU1RBVFNfTElNSVQoIlslY10gJWQgUlNTSTolZCBTaWduYWw6JXUsIE5vaXNlOiV1LCBSYXRlOiV1XG4iLAorCUlXTF9ERUJVR19TVEFUU19MSU1JVChwcml2LCAiWyVjXSAlZCBSU1NJOiVkIFNpZ25hbDoldSwgTm9pc2U6JXUsIFJhdGU6JXVcbiIsCiAJCQkgICAgICBuZXR3b3JrX3BhY2tldCA/ICcqJyA6ICcgJywKIAkJCSAgICAgIGxlMTZfdG9fY3B1KHJ4X2hkci0+Y2hhbm5lbCksCiAJCQkgICAgICByeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMuc2lnbmFsLAogCQkJICAgICAgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMucmF0ZV9pZHgpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfUlgpKQotCQkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KLQkJaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHBrdCwgaGVhZGVyLCAxKTsKLSNlbmRpZgorCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLworCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7CiAKIAlpZiAobmV0d29ya19wYWNrZXQpIHsKIAkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7CkBAIC03MjEsMjQgKzY5OSwzMSBAQAogCWl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEocHJpdiwgcnhiLCAmcnhfc3RhdHVzKTsKIH0KIAotaW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHZvaWQgKnB0ciwKLQkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKQoraW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbiwgdTggcmVzZXQsIHU4IHBhZCkKIHsKIAlpbnQgY291bnQ7Ci0JdTMyIHBhZDsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKnRmZCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKilwdHI7CisJc3RydWN0IGl3bF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZCwgKnRmZF90bXA7CisKKwlxID0gJnR4cS0+cTsKKwl0ZmRfdG1wID0gKHN0cnVjdCBpd2wzOTQ1X3RmZCAqKXR4cS0+dGZkczsKKwl0ZmQgPSAmdGZkX3RtcFtxLT53cml0ZV9wdHJdOworCisJaWYgKHJlc2V0KQorCQltZW1zZXQodGZkLCAwLCBzaXplb2YoKnRmZCkpOwogCiAJY291bnQgPSBURkRfQ1RMX0NPVU5UX0dFVChsZTMyX3RvX2NwdSh0ZmQtPmNvbnRyb2xfZmxhZ3MpKTsKLQlwYWQgPSBURkRfQ1RMX1BBRF9HRVQobGUzMl90b19jcHUodGZkLT5jb250cm9sX2ZsYWdzKSk7CiAKIAlpZiAoKGNvdW50ID49IE5VTV9URkRfQ0hVTktTKSB8fCAoY291bnQgPCAwKSkgewotCQlJV0xfRVJST1IoIkVycm9yIGNhbiBub3Qgc2VuZCBtb3JlIHRoYW4gJWQgY2h1bmtzXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKIAkJCSAgTlVNX1RGRF9DSFVOS1MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl0ZmQtPnBhW2NvdW50XS5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcik7Ci0JdGZkLT5wYVtjb3VudF0ubGVuID0gY3B1X3RvX2xlMzIobGVuKTsKKwl0ZmQtPnRic1tjb3VudF0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOworCXRmZC0+dGJzW2NvdW50XS5sZW4gPSBjcHVfdG9fbGUzMihsZW4pOwogCiAJY291bnQrKzsKIApAQCAtNzUzLDEwICs3MzgsMTEgQEAKICAqCiAgKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBpbmRleGVzCiAgKi8KLWludCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKQordm9pZCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKmJkX3RtcCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKikmdHhxLT5iZFswXTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKmJkID0gJmJkX3RtcFt0eHEtPnEucmVhZF9wdHJdOworCXN0cnVjdCBpd2wzOTQ1X3RmZCAqdGZkX3RtcCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmQgKil0eHEtPnRmZHM7CisJaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOworCXN0cnVjdCBpd2wzOTQ1X3RmZCAqdGZkID0gJnRmZF90bXBbaW5kZXhdOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwogCWludCBpOwogCWludCBjb3VudGVyOwpAQCAtNzY0LDIxICs3NTAsMjggQEAKIAkvKiBjbGFzc2lmeSBiZCAqLwogCWlmICh0eHEtPnEuaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCS8qIG5vdGhpbmcgdG8gY2xlYW51cCBhZnRlciBmb3IgaG9zdCBjb21tYW5kcyAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJLyogc2FuaXR5IGNoZWNrICovCi0JY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KGJkLT5jb250cm9sX2ZsYWdzKSk7CisJY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCWlmIChjb3VudGVyID4gTlVNX1RGRF9DSFVOS1MpIHsKLQkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBjb3VudGVyKTsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgY291bnRlcik7CiAJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAorCS8qIFVubWFwIHR4X2NtZCAqLworCWlmIChjb3VudGVyKQorCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKIAkvKiB1bm1hcCBjaHVua3MgaWYgYW55ICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgY291bnRlcjsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBsZTMyX3RvX2NwdShiZC0+cGFbaV0uYWRkciksCi0JCQkJIGxlMzJfdG9fY3B1KGJkLT5wYVtpXS5sZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmFkZHIpLAorCQkJIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF0pIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSB0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXTsKIAkJCWlmICh0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSkgewpAQCAtNzg4LDEwICs3ODEsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gOwogfQogCi11OCBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKK3U4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIpCiB7CiAJaW50IGksIHN0YXJ0ID0gSVdMX0FQX0lEOwogCWludCByZXQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwpAQCAtODAyLDE4ICs3OTUsMTggQEAKIAkJc3RhcnQgPSBJV0xfU1RBX0lEOwogCiAJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKQotCQlpZiAoKHByaXYtPnN0YXRpb25zW2ldLnVzZWQpICYmCisJZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspCisJCWlmICgocHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCkgJiYKIAkJICAgICghY29tcGFyZV9ldGhlcl9hZGRyCi0JCSAgICAgKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CisJCSAgICAgKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CiAJCQlyZXQgPSBpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCUlXTF9ERUJVR19JTkZPKCJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAogCQkgICAgICAgYWRkciwgcHJpdi0+bnVtX3N0YXRpb25zKTsKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTgyNCwxMiArODE3LDEwIEBACiAgKiBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlIC0gQWRkIHJhdGUgcG9ydGlvbiB0byBUWF9DTUQ6CiAgKgogKi8KLXZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IGh3X3ZhbHVlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CiAJdTE2IHJhdGVfaW5kZXggPSBtaW4oaHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CiAJdTE2IHJhdGVfbWFzazsKQEAgLTgzOCwyNSArODI5LDE1IEBACiAJdTggZGF0YV9yZXRyeV9saW1pdDsKIAlfX2xlMzIgdHhfZmxhZ3M7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAogCXJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnBsY3A7Ci0JdHhfZmxhZ3MgPSBjbWQtPmNtZC50eC50eF9mbGFnczsKKwl0eF9mbGFncyA9IHR4LT50eF9mbGFnczsKIAogCS8qIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBzdGEtPnN1cHBfcmF0ZXMgd2hpbGUKIAkgKiBpbiB0aGlzIHJ1bm5pbmcgY29udGV4dCAqLwogCXJhdGVfbWFzayA9IElXTF9SQVRFU19NQVNLOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSByYXRlOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgotCSAgICAoc3RhX2lkICE9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkKSAmJgotCQkoc3RhX2lkICE9IElXTF9NVUxUSUNBU1RfSUQpKQotCQlwcml2LT5zdGF0aW9uc1tJV0xfU1RBX0lEXS5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzID0gcmF0ZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAodHhfaWQgPj0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCXJ0c19yZXRyeV9saW1pdCA9IDM7CiAJZWxzZQpAQCAtODg4LDI1ICs4NjksMjUgQEAKIAkJfQogCX0KIAotCWNtZC0+Y21kLnR4LnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5kYXRhX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5yYXRlID0gcmF0ZTsKLQljbWQtPmNtZC50eC50eF9mbGFncyA9IHR4X2ZsYWdzOworCXR4LT5ydHNfcmV0cnlfbGltaXQgPSBydHNfcmV0cnlfbGltaXQ7CisJdHgtPmRhdGFfcmV0cnlfbGltaXQgPSBkYXRhX3JldHJ5X2xpbWl0OworCXR4LT5yYXRlID0gcmF0ZTsKKwl0eC0+dHhfZmxhZ3MgPSB0eF9mbGFnczsKIAogCS8qIE9GRE0gKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzBdID0KKwl0eC0+c3VwcF9yYXRlc1swXSA9CiAJICAgKChyYXRlX21hc2sgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CiAKIAkvKiBDQ0sgKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzFdID0gKHJhdGVfbWFzayAmIDB4Rik7CisJdHgtPnN1cHBfcmF0ZXNbMV0gPSAocmF0ZV9tYXNrICYgMHhGKTsKIAotCUlXTF9ERUJVR19SQVRFKCJUeCBzdGEgaWQ6ICVkLCByYXRlOiAlZCAocGxjcCksIGZsYWdzOiAweCU0WCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlR4IHN0YSBpZDogJWQsIHJhdGU6ICVkIChwbGNwKSwgZmxhZ3M6IDB4JTRYICIKIAkJICAgICAgICJjY2svb2ZkbSBtYXNrOiAweCV4LzB4JXhcbiIsIHN0YV9pZCwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnJhdGUsIGxlMzJfdG9fY3B1KGNtZC0+Y21kLnR4LnR4X2ZsYWdzKSwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMV0sIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMF0pOworCQkgICAgICAgdHgtPnJhdGUsIGxlMzJfdG9fY3B1KHR4LT50eF9mbGFncyksCisJCSAgICAgICB0eC0+c3VwcF9yYXRlc1sxXSwgdHgtPnN1cHBfcmF0ZXNbMF0pOwogfQogCi11OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHUxNiB0eF9yYXRlLCB1OCBmbGFncykKK3U4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwogCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgKnN0YXRpb247CkBAIC05MTUsMTM4ICs4OTYsMTMzIEBACiAJCXJldHVybiBJV0xfSU5WQUxJRF9TVEFUSU9OOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CisJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdOwogCiAJc3RhdGlvbi0+c3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfVFhfUkFURV9NU0s7CiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9IGNwdV90b19sZTE2KHR4X3JhdGUpOwotCXN0YXRpb24tPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSB0eF9yYXRlOwogCXN0YXRpb24tPnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAotCWl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmc3RhdGlvbi0+c3RhLCBmbGFncyk7Ci0JSVdMX0RFQlVHX1JBVEUoIlNDQUxFIHN5bmMgc3RhdGlvbiAlZCB0byByYXRlICVkXG4iLAorCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTQ0FMRSBzeW5jIHN0YXRpb24gJWQgdG8gcmF0ZSAlZFxuIiwKIAkJCXN0YV9pZCwgdHhfcmF0ZSk7CiAJcmV0dXJuIHN0YV9pZDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X25pY19zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcHdyX21heCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaXdsX3B3cl9zcmMgc3JjKQogewotCWludCByYzsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghcHdyX21heCkgewotCQl1MzIgdmFsOwotCi0JCXJjID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsCi0JCQkJUENJX1BPV0VSX1NPVVJDRSwgJnZhbCk7Ci0JCWlmICh2YWwgJiBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCkgewotCQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKKwkJaWYgKHBjaV9wbWVfY2FwYWJsZShwcml2LT5wY2lfZGV2LCBQQ0lfRDNjb2xkKSkgeworCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCQlBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJfkFQTUdfUFNfQ1RSTF9NU0tfUFdSX1NSQyk7Ci0JCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKLQkJCWl3bDM5NDVfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCisJCQlpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCiAJCQkJICAgICBDU1JfR1BJT19JTl9WQUxfVkFVWF9QV1JfU1JDLAogCQkJCSAgICAgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiwgNTAwMCk7Ci0JCX0gZWxzZQotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCX0gZWxzZSB7CisJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQl9CiAJfSBlbHNlIHsKLQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUFdSX1NSQ19WTUFJTiwKIAkJCQl+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKIAotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCiAJCQkgICAgIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIsIDUwMDApOwkvKiB1UyAqLwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3J4X2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKK3N0YXRpYyBpbnQgaXdsMzk0NV9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1JCRF9CQVNFKDApLCByeHEtPmRtYV9hZGRyKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfUlBUUl9BRERSKDApLAotCQkJICAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzICsKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkLCByeF9yZWFkX3B0clswXSkpOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUkNTUl9XUFRSKDApLCAwKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfQ09ORklHKDApLAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjggfAotCQkoUlhfUVVFVUVfU0laRV9MT0cgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFKSB8Ci0JCUFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKLQkJKDEgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEgpIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRkgpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUkJEX0JBU0UoMCksIHJ4cS0+ZG1hX2FkZHIpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUlBUUl9BRERSKDApLCByeHEtPnJiX3N0dHNfZG1hKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX1dQVFIoMCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfQ09ORklHKDApLAorCQlGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JEUkJEX0VOX0VOQUJMRSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4IHwKKwkJKFJYX1FVRVVFX1NJWkVfTE9HIDw8IEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19SQkRDX1NJWkUpIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKKwkJKDEgPDwgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX0lSUV9SQlRIKSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCk7CiAKIAkvKiBmYWtlIHJlYWQgdG8gZmx1c2ggYWxsIHByZXYgSS9PICovCi0JaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEZIX1JTU1JfQ1RSTCk7CisJaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgRkgzOV9SU1NSX0NUUkwpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogYnlwYXNzIG1vZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMHgyKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX01PREVfUkVHLCAweDIpOwogCiAJLyogUkEgMCBpcyBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CiAKIAkvKiBhbGwgNiBmaWZvIGFyZSBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEZBQ1RfUkVHLCAweDNmKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRkFDVF9SRUcsIDB4M2YpOwogCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzFfUkVHLCAweDAxMDAwMCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfVFhGNE1GX1JFRywgMHgwMDAwMDQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRjVNRl9SRUcsIDB4MDAwMDA1KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1NCWVBfTU9ERV8xX1JFRywgMHgwMTAwMDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY0TUZfUkVHLCAweDAwMDAwNCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY1TUZfUkVHLCAweDAwMDAwNSk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RTU1JfQ0JCX0JBU0UsCi0JCQkgICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RTU1JfQ0JCX0JBU0UsCisJCQkgICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVFNTUl9NU0dfQ09ORklHLAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4QiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfQ0JCX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UU1NSX01TR19DT05GSUcsCisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCIHwKKwkJRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEggfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDU3LDcgKzEwMzMsNyBAQAogICoKICAqIERlc3Ryb3lzIGFsbCBETUEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtIGFnYWluCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhxX2N0eF9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCWludCB0eHFfaWQsIHNsb3RzX251bTsKQEAgLTEwNzMsMTAgKzEwNDksMTAgQEAKIAlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IFRGRF9RVUVVRV9NQVg7IHR4cV9pZCsrKSB7CiAJCXNsb3RzX251bSA9ICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pID8KIAkJCQlURkRfQ01EX1NMT1RTIDogVEZEX1RYX0NNRF9TTE9UUzsKLQkJcmMgPSBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdLCBzbG90c19udW0sCi0JCQkJdHhxX2lkKTsKKwkJcmMgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKKwkJCQkgICAgICAgdHhxX2lkKTsKIAkJaWYgKHJjKSB7Ci0JCQlJV0xfRVJST1IoIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOworCQkJSVdMX0VSUihwcml2LCAiVHggJWQgcXVldWUgaW5pdCBmYWlsZWRcbiIsIHR4cV9pZCk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQpAQCAtMTA4OCwxMTEgKzEwNjQsMTQwIEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWl3bF9wb3dlcl9pbml0aWFsaXplKHByaXYpOworCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCisJCQkgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfRElTX0wwU19FWElUX1RJTUVSKTsKKworCS8qIGRpc2FibGUgTDBzIHdpdGhvdXQgYWZmZWN0aW5nIEwxIDpkb24ndCB3YWl0IGZvciBJQ0ggTDBzIGJ1ZyBXL0EpICovCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCisJCQkgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfTDFBX05PX0wwU19SWCk7CisKKwkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCisJKiBEMFUqIC0tPiBEMEEqIHN0YXRlICovCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKKworCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogZW5hYmxlIERNQSAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHLCBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAorCQkJCQkJQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKKworCXVkZWxheSgyMCk7CisKKwkvKiBkaXNhYmxlIEwxLUFjdGl2ZSAqLworCWl3bF9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUENJREVWX1NUVF9SRUcsCisJCQkgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcmV2X2lkID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmV2X2lkICYgUENJX0NGR19SRVZfSURfQklUX1JUUCkKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJUUCB0eXBlIFxuIik7CisJZWxzZSBpZiAocmV2X2lkICYgUENJX0NGR19SRVZfSURfQklUX0JBU0lDX1NLVSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NSBSQURJTy1NQiB0eXBlXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NQik7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIjM5NDUgUkFESU8tTU0gdHlwZVxuIik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOworCX0KKworCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBlZXByb20tPnNrdV9jYXApIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNLVSBPUCBtb2RlIGlzIG1yY1xuIik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMpOworCX0gZWxzZQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU0tVIE9QIG1vZGUgaXMgYmFzaWNcbiIpOworCisJaWYgKChlZXByb20tPmJvYXJkX3JldmlzaW9uICYgMHhGMCkgPT0gMHhEMCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NUFCRyByZXZpc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+Ym9hcmRfcmV2aXNpb24pOworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKKwl9IGVsc2UgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NUFCRyByZXZpc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+Ym9hcmRfcmV2aXNpb24pOworCQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfQk9BUkRfVFlQRSk7CisJfQorCisJaWYgKGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbiA8PSAxKSB7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUU19TSUxJQ09OX1RZUEVfQSk7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDYXJkIE0gdHlwZSBBIHZlcnNpb24gaXMgMHglWFxuIiwKKwkJCSAgICAgICBlZXByb20tPmFsbWdvcl9tX3ZlcnNpb24pOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDYXJkIE0gdHlwZSBCIHZlcnNpb24gaXMgMHglWFxuIiwKKwkJCSAgICAgICBlZXByb20tPmFsbWdvcl9tX3ZlcnNpb24pOworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0IpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZWVwcm9tLT5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUpCisJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJTVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKKworCWlmIChlZXByb20tPnNrdV9jYXAgJiBFRVBST01fU0tVX0NBUF9IV19SRl9LSUxMX0VOQUJMRSkKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkhXIFJGIEtJTEwgc3VwcG9ydGVkIGluIEVFUFJPTS5cbiIpOworfQorCitpbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTggcmV2X2lkOwogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCi0JaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1IzOV9BTkFfUExMX0NGR19WQUwpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKLQkJICAgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfTDFBX05PX0wwU19SWCk7Ci0KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQlyYyA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKLQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKLQlpZiAocmMgPCAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAotCQkJCSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAotCQkJCSBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwotCXVkZWxheSgyMCk7Ci0JaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUENJREVWX1NUVF9SRUcsCi0JCQkJICAgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIERldGVybWluZSBIVyB0eXBlICovCiAJcmMgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwcml2LT5wY2lfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXZfaWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCUlXTF9ERUJVR19JTkZPKCJIVyBSZXZpc2lvbiBJRCA9IDB4JVhcbiIsIHJldl9pZCk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkhXIFJldmlzaW9uIElEID0gMHglWFxuIiwgcmV2X2lkKTsKIAotCWl3bDM5NDVfbmljX3NldF9wd3Jfc3JjKHByaXYsIDEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmMgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLnNldF9wd3Jfc3JjKHByaXYsIElXTF9QV1JfU1JDX1ZNQUlOKTsKKwlpZihyYykKKwkJcmV0dXJuIHJjOwogCi0JaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9SVFApCi0JCUlXTF9ERUJVR19JTkZPKCJSVFAgdHlwZSBcbiIpOwotCWVsc2UgaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9CQVNJQ19TS1UpIHsKLQkJSVdMX0RFQlVHX0lORk8oIjM5NDUgUkFESU8tTUIgdHlwZVxuIik7Ci0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOwotCX0KLQotCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBwcml2LT5lZXByb20uc2t1X2NhcCkgewotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMpOwotCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgYmFzaWNcbiIpOwotCi0JaWYgKChwcml2LT5lZXByb20uYm9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOwotCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKLQl9Ci0KLQlpZiAocHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24gPD0gMSkgewotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAotCQkJICAgICAgIHByaXYtPmVlcHJvbS5hbG1nb3JfbV92ZXJzaW9uKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBNIHR5cGUgQiB2ZXJzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24pOwotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9CKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHByaXYtPmVlcHJvbS5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUpCi0JCUlXTF9ERUJVR19SRl9LSUxMKCJTVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKLQotCWlmIChwcml2LT5lZXByb20uc2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQotCQlJV0xfREVCVUdfUkZfS0lMTCgiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5jb25maWcocHJpdik7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgUlggcXVldWUsIG9yIHJlc2V0IGlmIGl0IGlzIGFscmVhZHkgYWxsb2NhdGVkICovCiAJaWYgKCFyeHEtPmJkKSB7Ci0JCXJjID0gaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhwcml2KTsKKwkJcmMgPSBpd2xfcnhfcXVldWVfYWxsb2MocHJpdik7CiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CisJCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZQotCQlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHByaXYsIHJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9yZXNldChwcml2LCByeHEpOwogCiAJaXdsMzk0NV9yeF9yZXBsZW5pc2gocHJpdik7CiAKQEAgLTEyMDIsMTYgKzEyMDcsMTYgQEAKIAogCS8qIExvb2sgYXQgdXNpbmcgdGhpcyBpbnN0ZWFkOgogCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwotCWl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJKi8KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1dQVFIoMCksIHJ4cS0+d3JpdGUgJiB+Nyk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9XUFRSKDApLCByeHEtPndyaXRlICYgfjcpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMjksMTE2ICsxMjM0LDEyMSBAQAogICoKICAqIERlc3Ryb3kgYWxsIFRYIERNQSBxdWV1ZXMgYW5kIHN0cnVjdHVyZXMKICAqLwotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwogCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgVEZEX1FVRVVFX01BWDsgdHhxX2lkKyspCi0JCWl3bDM5NDVfdHhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0pOworCQlpd2xfdHhfcXVldWVfZnJlZShwcml2LCB0eHFfaWQpOwogfQogCi12b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcXVldWU7CisJaW50IHR4cV9pZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwlpZiAoaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWl3bDM5NDVfaHdfdHhxX2N0eF9mcmVlKHByaXYpOwogCQlyZXR1cm47CiAJfQogCiAJLyogc3RvcCBTQ0QgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMCk7CiAKIAkvKiByZXNldCBURkQgcXVldWVzICovCi0JZm9yIChxdWV1ZSA9IFRGRF9RVUVVRV9NSU47IHF1ZXVlIDwgVEZEX1FVRVVFX01BWDsgcXVldWUrKykgewotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RDU1JfQ09ORklHKHF1ZXVlKSwgMHgwKTsKLQkJaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkhfVFNTUl9UWF9TVEFUVVMsCi0JCQkJQUxNX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKHF1ZXVlKSwKKwlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IFRGRF9RVUVVRV9NQVg7IHR4cV9pZCsrKSB7CisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RDU1JfQ09ORklHKHR4cV9pZCksIDB4MCk7CisJCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkgzOV9UU1NSX1RYX1NUQVRVUywKKwkJCQlGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKHR4cV9pZCksCiAJCQkJMTAwMCk7CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKIH0KIAotaW50IGl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfYXBtX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmMgPSAwOwotCXUzMiByZWdfdmFsOworCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogc2V0IHN0b3AgbWFzdGVyIGJpdCAqLwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TVE9QX01BU1RFUik7CisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1RPUF9NQVNURVIpOwogCi0JcmVnX3ZhbCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCk7CisJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfUkVTRVQsCisJCQkgICAgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAotCWlmIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX1BPV0VSX1NBVkUgPT0KLQkgICAgKHJlZ192YWwgJiBDU1JfR1BfQ05UUkxfUkVHX01TS19QT1dFUl9TQVZFX1RZUEUpKQotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBpbiBwb3dlciBzYXZlLCBtYXN0ZXIgaXMgYWxyZWFkeSAiCi0JCQkgICAgICAgInN0b3BwZWRcbiIpOwotCWVsc2UgewotCQlyYyA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9SRVNFVCwKLQkJCQkgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7Ci0JCWlmIChyYyA8IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiByYzsKLQkJfQotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKK291dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JSVdMX0RFQlVHX0lORk8oInN0b3AgbWFzdGVyXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAic3RvcCBtYXN0ZXJcbiIpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9hcG1fc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWl3bDM5NDVfYXBtX3N0b3BfbWFzdGVyKHByaXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKworCXVkZWxheSgxMCk7CisJLyogY2xlYXIgImluaXQgY29tcGxldGUiICBtb3ZlIGFkYXB0ZXIgRDBBKiAtLT4gRDBVIHN0YXRlICovCisJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X2FwbV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpd2wzOTQ1X2h3X25pY19zdG9wX21hc3Rlcihwcml2KTsKKwlpd2wzOTQ1X2FwbV9zdG9wX21hc3Rlcihwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKwl1ZGVsYXkoMTApOwogCi0JaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CisKKwlpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAoIXJjKSB7Ci0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19DVFJMX1JFRywKKwkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsCiAJCQkJCSBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwogCi0JCXVkZWxheSgxMCk7Ci0KLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19SVENfSU5UX01TS19SRUcsIDB4MCk7Ci0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX1JUQ19JTlRfU1RUX1JFRywKKwkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19SVENfSU5UX01TS19SRUcsIDB4MCk7CisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9TVFRfUkVHLAogCQkJCQkweEZGRkZGRkZGKTsKIAogCQkvKiBlbmFibGUgRE1BICovCi0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0VOX1JFRywKIAkJCQkJIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8CiAJCQkJCSBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwogCQl1ZGVsYXkoMTApOwogCi0JCWl3bDM5NDVfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAorCQlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKTsKIAkJdWRlbGF5KDUpOwotCQlpd2wzOTQ1X2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAorCQlpd2xfY2xlYXJfYml0c19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCiAJCQkJQVBNR19QU19DVFJMX1ZBTF9SRVNFVF9SRVEpOwotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAl9CiAKIAkvKiBDbGVhciB0aGUgJ2hvc3QgY29tbWFuZCBhY3RpdmUnIGJpdC4uLiAqLwpAQCAtMTM2NywzMyArMTM3NywzNCBAQAogCXJldHVybiAoKHRlbXBlcmF0dXJlIDwgLTI2MCkgfHwgKHRlbXBlcmF0dXJlID4gMjUpKSA/IDEgOiAwOwogfQogCi1pbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2h3X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcmV0dXJuIGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AyKTsKKwlyZXR1cm4gaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMik7CiB9CiAKIC8qKgogICogaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUKICAqIGdldCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBieSByZWFkaW5nIGZyb20gTklDCiAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ190eHBvd2VyX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ190eHBvd2VyX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWludCB0ZW1wZXJhdHVyZTsKIAogCXRlbXBlcmF0dXJlID0gaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUocHJpdik7CiAKIAkvKiBkcml2ZXIncyBva2F5IHJhbmdlIGlzIC0yNjAgdG8gKzI1LgogCSAqICAgaHVtYW4gcmVhZGFibGUgb2theSByYW5nZSBpcyAwIHRvICsyODUgKi8KLQlJV0xfREVCVUdfSU5GTygiVGVtcGVyYXR1cmU6ICVkXG4iLCB0ZW1wZXJhdHVyZSArIElXTF9URU1QX0NPTlZFUlQpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJUZW1wZXJhdHVyZTogJWRcbiIsIHRlbXBlcmF0dXJlICsgSVdMX1RFTVBfQ09OVkVSVCk7CiAKIAkvKiBoYW5kbGUgaW5zYW5lIHRlbXAgcmVhZGluZyAqLwogCWlmIChpd2wzOTQ1X2h3X3JlZ190ZW1wX291dF9vZl9yYW5nZSh0ZW1wZXJhdHVyZSkpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBiYWQgdGVtcGVyYXR1cmUgdmFsdWUgICVkXG4iLCB0ZW1wZXJhdHVyZSk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIGJhZCB0ZW1wZXJhdHVyZSB2YWx1ZSAgJWRcbiIsIHRlbXBlcmF0dXJlKTsKIAogCQkvKiBpZiByZWFsbHkgcmVhbGx5IGhvdCg/KSwKIAkJICogICBzdWJzdGl0dXRlIHRoZSAzcmQgYmFuZC9ncm91cCdzIHRlbXAgbWVhc3VyZWQgYXQgZmFjdG9yeSAqLwogCQlpZiAocHJpdi0+bGFzdF90ZW1wZXJhdHVyZSA+IDEwMCkKLQkJCXRlbXBlcmF0dXJlID0gcHJpdi0+ZWVwcm9tLmdyb3Vwc1syXS50ZW1wZXJhdHVyZTsKKwkJCXRlbXBlcmF0dXJlID0gZWVwcm9tLT5ncm91cHNbMl0udGVtcGVyYXR1cmU7CiAJCWVsc2UgLyogZWxzZSB1c2UgbW9zdCByZWNlbnQgInNhbmUiIHZhbHVlIGZyb20gZHJpdmVyICovCiAJCQl0ZW1wZXJhdHVyZSA9IHByaXYtPmxhc3RfdGVtcGVyYXR1cmU7CiAJfQpAQCAtMTQxMiw3ICsxNDIzLDcgQEAKICAqIHJlY29yZHMgbmV3IHRlbXBlcmF0dXJlIGluIHR4X21nci0+dGVtcGVyYXR1cmUuCiAgKiByZXBsYWNlcyB0eF9tZ3ItPmxhc3RfdGVtcGVyYXR1cmUgKm9ubHkqIGlmIGNhbGliIG5lZWRlZAogICogICAgKGFzc3VtZXMgY2FsbGVyIHdpbGwgYWN0dWFsbHkgZG8gdGhlIGNhbGlicmF0aW9uISkuICovCi1zdGF0aWMgaW50IGlzX3RlbXBfY2FsaWJfbmVlZGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGlzX3RlbXBfY2FsaWJfbmVlZGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgdGVtcF9kaWZmOwogCkBAIC0xNDIxLDIwICsxNDMyLDIwIEBACiAKIAkvKiBnZXQgYWJzb2x1dGUgdmFsdWUgKi8KIAlpZiAodGVtcF9kaWZmIDwgMCkgewotCQlJV0xfREVCVUdfUE9XRVIoIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCxcbiIsIHRlbXBfZGlmZik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiR2V0dGluZyBjb29sZXIsIGRlbHRhICVkLFxuIiwgdGVtcF9kaWZmKTsKIAkJdGVtcF9kaWZmID0gLXRlbXBfZGlmZjsKIAl9IGVsc2UgaWYgKHRlbXBfZGlmZiA9PSAwKQotCQlJV0xfREVCVUdfUE9XRVIoIlNhbWUgdGVtcCxcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNhbWUgdGVtcCxcbiIpOwogCWVsc2UKLQkJSVdMX0RFQlVHX1BPV0VSKCJHZXR0aW5nIHdhcm1lciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgd2FybWVyLCBkZWx0YSAlZCxcbiIsIHRlbXBfZGlmZik7CiAKIAkvKiBpZiB3ZSBkb24ndCBuZWVkIGNhbGlicmF0aW9uLCAqZG9uJ3QqIHVwZGF0ZSBsYXN0X3RlbXBlcmF0dXJlICovCiAJaWYgKHRlbXBfZGlmZiA8IElXTF9URU1QRVJBVFVSRV9MSU1JVF9USU1FUikgewotCQlJV0xfREVCVUdfUE9XRVIoIlRpbWVkIHRoZXJtYWwgY2FsaWIgbm90IG5lZWRlZFxuIik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGltZWQgdGhlcm1hbCBjYWxpYiBub3QgbmVlZGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX1BPV0VSKCJUaW1lZCB0aGVybWFsIGNhbGliIG5lZWRlZFxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaW1lZCB0aGVybWFsIGNhbGliIG5lZWRlZFxuIik7CiAKIAkvKiBhc3N1bWUgdGhhdCBjYWxsZXIgd2lsbCBhY3R1YWxseSBkbyBjYWxpYiAuLi4KIAkgKiAgIHVwZGF0ZSB0aGUgImxhc3QgdGVtcGVyYXR1cmUiIHZhbHVlICovCkBAIC0xNjI3LDkgKzE2MzgsOSBAQAogICogU2V0IChpbiBvdXIgY2hhbm5lbCBpbmZvIGRhdGFiYXNlKSB0aGUgZGlyZWN0IHNjYW4gVHggcG93ZXIgZm9yIDEgTWJpdCAoQ0NLKQogICogb3IgNiBNYml0IChPRkRNKSByYXRlcy4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfc2V0X3NjYW5fcG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHNjYW5fdGJsX2luZGV4LAorc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfc2V0X3NjYW5fcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgc2Nhbl90YmxfaW5kZXgsCiAJCQkgICAgICAgczMyIHJhdGVfaW5kZXgsIGNvbnN0IHM4ICpjbGlwX3B3cnMsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvLAogCQkJICAgICAgIGludCBiYW5kX2luZGV4KQogewogCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyAqc2Nhbl9wb3dlcl9pbmZvOwpAQCAtMTY0Niw3ICsxNjU3LDcgQEAKIAkvKiBmdXJ0aGVyIGxpbWl0IHRvIHVzZXIncyBtYXggcG93ZXIgcHJlZmVyZW5jZS4KIAkgKiBGSVhNRTogIE90aGVyIHNwZWN0cnVtIG1hbmFnZW1lbnQgcG93ZXIgbGltaXRhdGlvbnMgZG8gbm90CiAJICogICBzZWVtIHRvIGFwcGx5Pz8gKi8KLQlwb3dlciA9IG1pbihwb3dlciwgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KTsKKwlwb3dlciA9IG1pbihwb3dlciwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpOwogCXNjYW5fcG93ZXJfaW5mby0+cmVxdWVzdGVkX3Bvd2VyID0gcG93ZXI7CiAKIAkvKiBmaW5kIGRpZmZlcmVuY2UgYmV0d2VlbiBuZXcgc2NhbiAqcG93ZXIqIGFuZCBjdXJyZW50ICJub3JtYWwiCkBAIC0xNjc4LDMyICsxNjg5LDMyIEBACiB9CiAKIC8qKgotICogaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyIC0gZmlsbCBpbiBUeCBQb3dlciBjb21tYW5kIHdpdGggZ2FpbiBzZXR0aW5ncworICogaXdsMzk0NV9zZW5kX3R4X3Bvd2VyIC0gZmlsbCBpbiBUeCBQb3dlciBjb21tYW5kIHdpdGggZ2FpbiBzZXR0aW5ncwogICoKICAqIENvbmZpZ3VyZXMgcG93ZXIgc2V0dGluZ3MgZm9yIGFsbCByYXRlcyBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbCwKICAqIHVzaW5nIHZhbHVlcyBmcm9tIGNoYW5uZWwgaW5mbyBzdHJ1Y3QsIGFuZCBzZW5kIHRvIE5JQwogICovCi1pbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2VuZF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJhdGVfaWR4LCBpOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOwogCXN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQgdHhwb3dlciA9IHsKIAkJLmNoYW5uZWwgPSBwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsLAogCX07CiAKIAl0eHBvd2VyLmJhbmQgPSAocHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/IDAgOiAxOwotCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwKIAkJCQkgICAgICAgcHJpdi0+YmFuZCwKIAkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwogCWlmICghY2hfaW5mbykgewotCQlJV0xfRVJST1IKLQkJICAgICgiRmFpbGVkIHRvIGdldCBjaGFubmVsIGluZm8gZm9yIGNoYW5uZWwgJWQgWyVkXVxuIiwKLQkJICAgICBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwgcHJpdi0+YmFuZCk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJGYWlsZWQgdG8gZ2V0IGNoYW5uZWwgaW5mbyBmb3IgY2hhbm5lbCAlZCBbJWRdXG4iLAorCQkJbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCksIHByaXYtPmJhbmQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJOb3QgY2FsbGluZyBUWF9QV1JfVEFCTEVfQ01EIG9uICIKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJOb3QgY2FsbGluZyBUWF9QV1JfVEFCTEVfQ01EIG9uICIKIAkJCQkibm9uLVR4IGNoYW5uZWwuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTcxMSwxMiArMTcyMiwxMiBAQAogCS8qIGZpbGwgY21kIHdpdGggcG93ZXIgc2V0dGluZ3MgZm9yIGFsbCByYXRlcyBmb3IgY3VycmVudCBjaGFubmVsICovCiAJLyogRmlsbCBPRkRNIHJhdGUgKi8KIAlmb3IgKHJhdGVfaWR4ID0gSVdMX0ZJUlNUX09GRE1fUkFURSwgaSA9IDA7Ci0JICAgICByYXRlX2lkeCA8PSBJV0xfTEFTVF9PRkRNX1JBVEU7IHJhdGVfaWR4KyssIGkrKykgeworCSAgICAgcmF0ZV9pZHggPD0gSVdMMzlfTEFTVF9PRkRNX1JBVEU7IHJhdGVfaWR4KyssIGkrKykgewogCiAJCXR4cG93ZXIucG93ZXJbaV0udHBjID0gY2hfaW5mby0+cG93ZXJfaW5mb1tpXS50cGM7CiAJCXR4cG93ZXIucG93ZXJbaV0ucmF0ZSA9IGl3bDM5NDVfcmF0ZXNbcmF0ZV9pZHhdLnBsY3A7CiAKLQkJSVdMX0RFQlVHX1BPV0VSKCJjaCAlZDolZCByZiAlZCBkc3AgJTNkIHJhdGUgY29kZSAweCUwMnhcbiIsCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiY2ggJWQ6JWQgcmYgJWQgZHNwICUzZCByYXRlIGNvZGUgMHglMDJ4XG4iLAogCQkJCWxlMTZfdG9fY3B1KHR4cG93ZXIuY2hhbm5lbCksCiAJCQkJdHhwb3dlci5iYW5kLAogCQkJCXR4cG93ZXIucG93ZXJbaV0udHBjLnR4X2dhaW4sCkBAIC0xNzI5LDcgKzE3NDAsNyBAQAogCQl0eHBvd2VyLnBvd2VyW2ldLnRwYyA9IGNoX2luZm8tPnBvd2VyX2luZm9baV0udHBjOwogCQl0eHBvd2VyLnBvd2VyW2ldLnJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaWR4XS5wbGNwOwogCi0JCUlXTF9ERUJVR19QT1dFUigiY2ggJWQ6JWQgcmYgJWQgZHNwICUzZCByYXRlIGNvZGUgMHglMDJ4XG4iLAorCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKIAkJCQlsZTE2X3RvX2NwdSh0eHBvd2VyLmNoYW5uZWwpLAogCQkJCXR4cG93ZXIuYmFuZCwKIAkJCQl0eHBvd2VyLnBvd2VyW2ldLnRwYy50eF9nYWluLApAQCAtMTczNyw4ICsxNzQ4LDkgQEAKIAkJCQl0eHBvd2VyLnBvd2VyW2ldLnJhdGUpOwogCX0KIAotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELAotCQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQpLCAmdHhwb3dlcik7CisJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCwKKwkJCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhwb3dlcnRhYmxlX2NtZCksCisJCQkJJnR4cG93ZXIpOwogCiB9CiAKQEAgLTE3NTgsOCArMTc3MCw4IEBACiAgKgkgcHJvcGVybHkgZmlsbCBvdXQgdGhlIHNjYW4gcG93ZXJzLCBhbmQgYWN0dWFsIGgvdyBnYWluIHNldHRpbmdzLAogICoJIGFuZCBzZW5kIGNoYW5nZXMgdG8gTklDCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfc2V0X25ld19wb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX3NldF9uZXdfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gKnBvd2VyX2luZm87CiAJaW50IHBvd2VyX2NoYW5nZWQgPSAwOwpAQCAtMTc2OCw3ICsxNzgwLDcgQEAKIAlpbnQgcG93ZXI7CiAKIAkvKiBHZXQgdGhpcyBjaG5sZ3JwJ3MgcmF0ZS10by1tYXgvY2xpcC1wb3dlcnMgdGFibGUgKi8KLQljbGlwX3B3cnMgPSBwcml2LT5jbGlwX2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CisJY2xpcF9wd3JzID0gcHJpdi0+Y2xpcDM5X2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CiAKIAkvKiBHZXQgdGhpcyBjaGFubmVsJ3MgcmF0ZS10by1jdXJyZW50LXBvd2VyIHNldHRpbmdzIHRhYmxlICovCiAJcG93ZXJfaW5mbyA9IGNoX2luZm8tPnBvd2VyX2luZm87CkBAIC0xODIxLDcgKzE4MzMsNyBAQAogICoJIGJhc2VkIHN0cmljdGx5IG9uIHJlZ3VsYXRvcnkgKGVlcHJvbSBhbmQgc3BlY3RydW0gbWd0KSBsaW1pdGF0aW9ucwogICoJIChubyBjb25zaWRlcmF0aW9uIGZvciBoL3cgY2xpcHBpbmcgbGltaXRhdGlvbnMpLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9jaF90eHBvd2VyX2xpbWl0KHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKK3N0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfZ2V0X2NoX3R4cG93ZXJfbGltaXQoc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7CiAJczggbWF4X3Bvd2VyOwogCkBAIC0xODQ5LDkgKzE4NjEsMTAgQEAKICAqCiAgKiBJZiBSeE9uIGlzICJhc3NvY2lhdGVkIiwgdGhpcyBzZW5kcyB0aGUgbmV3IFR4cG93ZXIgdG8gTklDIQogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2NvbXBfdHhwb3dlcl90ZW1wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2NvbXBfdHhwb3dlcl90ZW1wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJaW50IGRlbHRhX2luZGV4OwogCWNvbnN0IHM4ICpjbGlwX3B3cnM7IC8qIGFycmF5IG9mIGgvdyBtYXggcG93ZXIgbGV2ZWxzIGZvciBlYWNoIHJhdGUgKi8KIAl1OCBhX2JhbmQ7CkBAIC0xODY3LDcgKzE4ODAsNyBAQAogCQlhX2JhbmQgPSBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKTsKIAogCQkvKiBHZXQgdGhpcyBjaG5sZ3JwJ3MgZmFjdG9yeSBjYWxpYnJhdGlvbiB0ZW1wZXJhdHVyZSAqLwotCQlyZWZfdGVtcCA9IChzMTYpcHJpdi0+ZWVwcm9tLmdyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uCisJCXJlZl90ZW1wID0gKHMxNillZXByb20tPmdyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uCiAJCSAgICB0ZW1wZXJhdHVyZTsKIAogCQkvKiBnZXQgcG93ZXIgaW5kZXggYWRqdXN0bWVudCBiYXNlZCBvbiBjdXJyZW50IGFuZCBmYWN0b3J5CkBAIC0xODkzLDcgKzE5MDYsNyBAQAogCQl9CiAKIAkJLyogR2V0IHRoaXMgY2hubGdycCdzIHJhdGUtdG8tbWF4L2NsaXAtcG93ZXJzIHRhYmxlICovCi0JCWNsaXBfcHdycyA9IHByaXYtPmNsaXBfZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS5jbGlwX3Bvd2VyczsKKwkJY2xpcF9wd3JzID0gcHJpdi0+Y2xpcDM5X2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CiAKIAkJLyogc2V0IHNjYW4gdHggcG93ZXIsIDFNYml0IGZvciBDQ0ssIDZNYml0IGZvciBPRkRNICovCiAJCWZvciAoc2Nhbl90YmxfaW5kZXggPSAwOwpAQCAtMTkwNywyNCArMTkyMCwyNCBAQAogCX0KIAogCS8qIHNlbmQgVHhwb3dlciBjb21tYW5kIGZvciBjdXJyZW50IGNoYW5uZWwgdG8gdWNvZGUgKi8KLQlyZXR1cm4gaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOworCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKHByaXYpOwogfQogCi1pbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgczggcG93ZXIpCitpbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzOCBwb3dlcikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJczggbWF4X3Bvd2VyOwogCXU4IGFfYmFuZDsKIAl1OCBpOwogCi0JaWYgKHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9PSBwb3dlcikgewotCQlJV0xfREVCVUdfUE9XRVIoIlJlcXVlc3RlZCBUeCBwb3dlciBzYW1lIGFzIGN1cnJlbnQgIgorCWlmIChwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9PSBwb3dlcikgeworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlJlcXVlc3RlZCBUeCBwb3dlciBzYW1lIGFzIGN1cnJlbnQgIgogCQkJCSJsaW1pdDogJWRkQm0uXG4iLCBwb3dlcik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiU2V0dGluZyB1cHBlciBsaW1pdCBjbGFtcCB0byAlZGRCbS5cbiIsIHBvd2VyKTsKLQlwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPSBwb3dlcjsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNldHRpbmcgdXBwZXIgbGltaXQgY2xhbXAgdG8gJWRkQm0uXG4iLCBwb3dlcik7CisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBwb3dlcjsKIAogCS8qIHNldCB1cCBuZXcgVHggcG93ZXJzIGZvciBlYWNoIGFuZCBldmVyeSBjaGFubmVsLCAyLjQgYW5kIDUueCAqLwogCkBAIC0xOTUzLDcgKzE5NjYsNyBAQAogfQogCiAvKiB3aWxsIGFkZCAzOTQ1IGNoYW5uZWwgc3dpdGNoIGNtZCBoYW5kbGluZyBsYXRlciAqLwotaW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpCitpbnQgaXdsMzk0NV9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKQogewogCXJldHVybiAwOwogfQpAQCAtMTk2OCw3ICsxOTgxLDcgQEAKICAqICAgICAtLSBzZW5kIG5ldyBzZXQgb2YgZ2FpbiBzZXR0aW5ncyB0byBOSUMKICAqIE5PVEU6ICBUaGlzIHNob3VsZCBjb250aW51ZSB3b3JraW5nLCBldmVuIHdoZW4gd2UncmUgbm90IGFzc29jaWF0ZWQsCiAgKiAgIHNvIHdlIGNhbiBrZWVwIG91ciBpbnRlcm5hbCB0YWJsZSBvZiBzY2FuIHBvd2VycyBjdXJyZW50LiAqLwotdm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfcmVnX3R4cG93ZXJfcGVyaW9kaWMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIFRoaXMgd2lsbCBraWNrIGluIHRoZSAiYnJ1dGUgZm9yY2UiCiAJICogaXdsMzk0NV9od19yZWdfY29tcF90eHBvd2VyX3RlbXAoKSBiZWxvdyAqLwpAQCAtMTk4Nyw3ICsyMDAwLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LAorCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCiAJCQkJCSAgICAgdGhlcm1hbF9wZXJpb2RpYy53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKQEAgLTIwMDksMTAgKzIwMjIsMTEgQEAKICAqCSBvbiBBLWJhbmQsIEVFUFJPTSdzICJncm91cCBmcmVxdWVuY3kiIGVudHJpZXMgcmVwcmVzZW50IHRoZSB0b3AKICAqCSBjaGFubmVsIGluIGVhY2ggZ3JvdXAgMS00LiAgR3JvdXAgNSBBbGwgQi9HIGNoYW5uZWxzIGFyZSBpbiBncm91cCAwLgogICovCi1zdGF0aWMgdTE2IGl3bDM5NDVfaHdfcmVnX2dldF9jaF9ncnBfaW5kZXgoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIHUxNiBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7Ci0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmNoX2dycCA9ICZwcml2LT5lZXByb20uZ3JvdXBzWzBdOworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fdHhwb3dlcl9ncm91cCAqY2hfZ3JwID0gJmVlcHJvbS0+Z3JvdXBzWzBdOwogCXU4IGdyb3VwOwogCXUxNiBncm91cF9pbmRleCA9IDA7CS8qIGJhc2VkIG9uIGZhY3RvcnkgY2FsaWIgZnJlcXVlbmNpZXMgKi8KIAl1OCBncnBfY2hhbm5lbDsKQEAgLTIwMzIsNyArMjA0Niw3IEBACiAJfSBlbHNlCiAJCWdyb3VwX2luZGV4ID0gMDsJLyogMi40IEdIeiwgZ3JvdXAgMCAqLwogCi0JSVdMX0RFQlVHX1BPV0VSKCJDaG5sICVkIG1hcHBlZCB0byBncnAgJWRcbiIsIGNoX2luZm8tPmNoYW5uZWwsCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJDaG5sICVkIG1hcHBlZCB0byBncnAgJWRcbiIsIGNoX2luZm8tPmNoYW5uZWwsCiAJCQlncm91cF9pbmRleCk7CiAJcmV0dXJuIGdyb3VwX2luZGV4OwogfQpAQCAtMjA0MywxMSArMjA1NywxMiBAQAogICogSW50ZXJwb2xhdGUgdG8gZ2V0IG5vbWluYWwgKGkuZS4gYXQgZmFjdG9yeSBjYWxpYnJhdGlvbiB0ZW1wZXJhdHVyZSkgaW5kZXgKICAqICAgaW50byByYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyB0YWJsZSBmb3IgcmVxdWVzdGVkIHBvd2VyLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9tYXRjaGVkX3Bvd2VyX2luZGV4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9tYXRjaGVkX3Bvd2VyX2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgczggcmVxdWVzdGVkX3Bvd2VyLAogCQkJCSAgICAgICBzMzIgc2V0dGluZ19pbmRleCwgczMyICpuZXdfaW5kZXgpCiB7CiAJY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmNobmxfZ3JwID0gTlVMTDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJczMyIGluZGV4MCwgaW5kZXgxOwogCXMzMiBwb3dlciA9IDIgKiByZXF1ZXN0ZWRfcG93ZXI7CiAJczMyIGk7CkBAIC0yMDU2LDcgKzIwNzEsNyBAQAogCXMzMiByZXM7CiAJczMyIGRlbm9taW5hdG9yOwogCi0JY2hubF9ncnAgPSAmcHJpdi0+ZWVwcm9tLmdyb3Vwc1tzZXR0aW5nX2luZGV4XTsKKwljaG5sX2dycCA9ICZlZXByb20tPmdyb3Vwc1tzZXR0aW5nX2luZGV4XTsKIAlzYW1wbGVzID0gY2hubF9ncnAtPnNhbXBsZXM7CiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlpZiAocG93ZXIgPT0gc2FtcGxlc1tpXS5wb3dlcikgewpAQCAtMjA5MSwyMiArMjEwNiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2h3X3JlZ19pbml0X2NoYW5uZWxfZ3JvdXBzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2h3X3JlZ19pbml0X2NoYW5uZWxfZ3JvdXBzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgaTsKIAlzMzIgcmF0ZV9pbmRleDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmdyb3VwOwogCi0JSVdMX0RFQlVHX1BPV0VSKCJJbml0aWFsaXppbmcgZmFjdG9yeSBjYWxpYiBpbmZvIGZyb20gRUVQUk9NXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemluZyBmYWN0b3J5IGNhbGliIGluZm8gZnJvbSBFRVBST01cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9OVU1fVFhfQ0FMSUJfR1JPVVBTOyBpKyspIHsKIAkJczggKmNsaXBfcHdyczsJLyogdGFibGUgb2YgcG93ZXIgbGV2ZWxzIGZvciBlYWNoIHJhdGUgKi8KIAkJczggc2F0dXJfcHdyOwkvKiBzYXR1cmF0aW9uIHBvd2VyIGZvciBlYWNoIGNobmwgZ3JvdXAgKi8KLQkJZ3JvdXAgPSAmcHJpdi0+ZWVwcm9tLmdyb3Vwc1tpXTsKKwkJZ3JvdXAgPSAmZWVwcm9tLT5ncm91cHNbaV07CiAKIAkJLyogc2FuaXR5IGNoZWNrIG9uIGZhY3Rvcnkgc2F0dXJhdGlvbiBwb3dlciB2YWx1ZSAqLwogCQlpZiAoZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIgPCA0MCkgewotCQkJSVdMX1dBUk5JTkcoIkVycm9yOiBzYXR1cmF0aW9uIHBvd2VyIGlzICVkLCAiCisJCQlJV0xfV0FSTihwcml2LCAiRXJyb3I6IHNhdHVyYXRpb24gcG93ZXIgaXMgJWQsICIKIAkJCQkgICAgImxlc3MgdGhhbiBtaW5pbXVtIGV4cGVjdGVkIDQwXG4iLAogCQkJCSAgICBncm91cC0+c2F0dXJhdGlvbl9wb3dlcik7CiAJCQlyZXR1cm47CkBAIC0yMTIxLDcgKzIxMzcsNyBAQAogCQkgKiAgIHBvd2VyIHBlYWtzLCB3aXRob3V0IHRvbyBtdWNoIGRpc3RvcnRpb24gKGNsaXBwaW5nKS4KIAkJICovCiAJCS8qIHdlJ2xsIGZpbGwgaW4gdGhpcyBhcnJheSB3aXRoIGgvdyBtYXggcG93ZXIgbGV2ZWxzICovCi0JCWNsaXBfcHdycyA9IChzOCAqKSBwcml2LT5jbGlwX2dyb3Vwc1tpXS5jbGlwX3Bvd2VyczsKKwkJY2xpcF9wd3JzID0gKHM4ICopIHByaXYtPmNsaXAzOV9ncm91cHNbaV0uY2xpcF9wb3dlcnM7CiAKIAkJLyogZGl2aWRlIGZhY3Rvcnkgc2F0dXJhdGlvbiBwb3dlciBieSAyIHRvIGZpbmQgLTNkQiBsZXZlbCAqLwogCQlzYXR1cl9wd3IgPSAoczgpIChncm91cC0+c2F0dXJhdGlvbl9wb3dlciA+PiAxKTsKQEAgLTIxNzEsMTAgKzIxODcsMTEgQEAKICAqCiAgKiBUaGlzIGRvZXMgKm5vdCogd3JpdGUgdmFsdWVzIHRvIE5JQywganVzdCBzZXRzIHVwIG91ciBpbnRlcm5hbCB0YWJsZS4KICAqLwotaW50IGl3bDM5NDVfdHhwb3dlcl9zZXRfZnJvbV9lZXByb20oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gKnB3cl9pbmZvOworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKIAlpbnQgZGVsdGFfaW5kZXg7CiAJdTggcmF0ZV9pbmRleDsKIAl1OCBzY2FuX3RibF9pbmRleDsKQEAgLTIyMDQsMTUgKzIyMjEsMTUgQEAKIAkJCWl3bDM5NDVfaHdfcmVnX2dldF9jaF9ncnBfaW5kZXgocHJpdiwgY2hfaW5mbyk7CiAKIAkJLyogR2V0IHRoaXMgY2hubGdycCdzIHJhdGUtPm1heC9jbGlwLXBvd2VycyB0YWJsZSAqLwotCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwX2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJCS8qIGNhbGN1bGF0ZSBwb3dlciBpbmRleCAqYWRqdXN0bWVudCogdmFsdWUgYWNjb3JkaW5nIHRvCiAJCSAqICBkaWZmIGJldHdlZW4gY3VycmVudCB0ZW1wZXJhdHVyZSBhbmQgZmFjdG9yeSB0ZW1wZXJhdHVyZSAqLwogCQlkZWx0YV9pbmRleCA9IGl3bDM5NDVfaHdfcmVnX2FkanVzdF9wb3dlcl9ieV90ZW1wKHRlbXBlcmF0dXJlLAotCQkJCXByaXYtPmVlcHJvbS5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgorCQkJCWVlcHJvbS0+Z3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS4KIAkJCQl0ZW1wZXJhdHVyZSk7CiAKLQkJSVdMX0RFQlVHX1BPV0VSKCJEZWx0YSBpbmRleCBmb3IgY2hhbm5lbCAlZDogJWQgWyVkXVxuIiwKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJEZWx0YSBpbmRleCBmb3IgY2hhbm5lbCAlZDogJWQgWyVkXVxuIiwKIAkJCQljaF9pbmZvLT5jaGFubmVsLCBkZWx0YV9pbmRleCwgdGVtcGVyYXR1cmUgKwogCQkJCUlXTF9URU1QX0NPTlZFUlQpOwogCkBAIC0yMjM1LDcgKzIyNTIsNyBAQAogCQkJCQkJCSBjaF9pbmZvLT5ncm91cF9pbmRleCwKIAkJCQkJCQkgJnBvd2VyX2lkeCk7CiAJCQlpZiAocmMpIHsKLQkJCQlJV0xfRVJST1IoIkludmFsaWQgcG93ZXIgaW5kZXhcbiIpOworCQkJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgcG93ZXIgaW5kZXhcbiIpOwogCQkJCXJldHVybiByYzsKIAkJCX0KIAkJCXB3cl9pbmZvLT5iYXNlX3Bvd2VyX2luZGV4ID0gKHU4KSBwb3dlcl9pZHg7CkBAIC0yMjk1LDc1ICsyMzEyLDkwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3J4cV9zdG9wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfQ09ORklHKDApLCAwKTsKLQlyYyA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIX1JTU1JfU1RBVFVTLAotCQkJRkhfUlNTUl9DSE5MMF9SWF9TVEFUVVNfQ0hOTF9JRExFLCAxMDAwKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX0NPTkZJRygwKSwgMCk7CisJcmMgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIMzlfUlNTUl9TVEFUVVMsCisJCQlGSDM5X1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRSwgMTAwMCk7CiAJaWYgKHJjIDwgMCkKLQkJSVdMX0VSUk9SKCJDYW4ndCBzdG9wIFJ4IERNQS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJDYW4ndCBzdG9wIFJ4IERNQS5cbiIpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKQoraW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOwogCi0Jc3RydWN0IGl3bDM5NDVfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQ7CisJc3RydWN0IGl3bDM5NDVfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPnNoYXJlZF92aXJ0OwogCiAJc2hhcmVkX2RhdGEtPnR4X2Jhc2VfcHRyW3R4cV9pZF0gPSBjcHVfdG9fbGUzMigodTMyKXR4cS0+cS5kbWFfYWRkcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9DQkNDX0NUUkwodHhxX2lkKSwgMCk7Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9DQkNDX0JBU0UodHhxX2lkKSwgMCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfQ0JDQ19DVFJMKHR4cV9pZCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X0NCQ0NfQkFTRSh0eHFfaWQpLCAwKTsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVENTUl9DT05GSUcodHhxX2lkKSwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9SVENfTk9JTlQgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9UWEYgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUpOwotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RDU1JfQ09ORklHKHR4cV9pZCksCisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX1JUQ19OT0lOVCB8CisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9UWEYgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9IT1NUX0lGVEZEIHwKKwkJRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRU5BQkxFX1ZBTCB8CisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAkvKiBmYWtlIHJlYWQgdG8gZmx1c2ggYWxsIHByZXYuIHdyaXRlcyAqLwotCWl3bDM5NDVfcmVhZDMyKHByaXYsIEZIX1RTU1JfQ0JCX0JBU0UpOworCWl3bF9yZWFkMzIocHJpdiwgRkgzOV9UU1NSX0NCQl9CQVNFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl3bDM5NDVfaHdfZ2V0X3J4X3JlYWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKKy8qCisgKiBIQ01EIHV0aWxzCisgKi8KK3N0YXRpYyB1MTYgaXdsMzk0NV9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9zaGFyZWQgKnNoYXJlZF9kYXRhID0gcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydDsKKwlzd2l0Y2ggKGNtZF9pZCkgeworCWNhc2UgUkVQTFlfUlhPTjoKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCk7CisJY2FzZSBQT1dFUl9UQUJMRV9DTUQ6CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQpOworCWRlZmF1bHQ6CisJCXJldHVybiBsZW47CisJfQorfQogCi0JcmV0dXJuIGxlMzJfdG9fY3B1KHNoYXJlZF9kYXRhLT5yeF9yZWFkX3B0clswXSk7CitzdGF0aWMgdTE2IGl3bDM5NDVfYnVpbGRfYWRkc3RhX2hjbWQoY29uc3Qgc3RydWN0IGl3bF9hZGRzdGFfY21kICpjbWQsIHU4ICpkYXRhKQoreworCXUxNiBzaXplID0gKHUxNilzaXplb2Yoc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCk7CisJbWVtY3B5KGRhdGEsIGNtZCwgc2l6ZSk7CisJcmV0dXJuIHNpemU7CiB9CiAKIC8qKgogICogaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUgLSBJbml0aWFsaXplIHRoZSBoYXJkd2FyZSByYXRlIGZhbGxiYWNrIHRhYmxlCiAgKi8KLWludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoraW50IGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMsIGksIGluZGV4LCBwcmV2X2luZGV4OwogCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19jbWQgcmF0ZV9jbWQgPSB7CkBAIC0yMzg0LDcgKzI0MTYsNyBAQAogCiAJc3dpdGNoIChwcml2LT5iYW5kKSB7CiAJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgotCQlJV0xfREVCVUdfUkFURSgiU2VsZWN0IEEgbW9kZSByYXRlIHNjYWxlXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdCBBIG1vZGUgcmF0ZSBzY2FsZVxuIik7CiAJCS8qIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIENDSyByYXRlcyBpcyB1c2VkLAogCQkgKiBoYXZlIGl0IGZhbGwgYmFjayB0byB0aGUgNk0gT0ZETSByYXRlICovCiAJCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYX1RBQkxFOwpAQCAtMjQwMiwxMiArMjQzNCwxMiBAQAogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKLQkJSVdMX0RFQlVHX1JBVEUoIlNlbGVjdCBCL0cgbW9kZSByYXRlIHNjYWxlXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdCBCL0cgbW9kZSByYXRlIHNjYWxlXG4iKTsKIAkJLyogSWYgYW4gT0ZETSByYXRlIGlzIHVzZWQsIGhhdmUgaXQgZmFsbCBiYWNrIHRvIHRoZQogCQkgKiAxTSBDQ0sgcmF0ZXMgKi8KIAogCQlpZiAoIShwcml2LT5zdGFfc3VwcF9yYXRlcyAmIElXTF9PRkRNX1JBVEVTX01BU0spICYmCi0JCSAgICBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAKIAkJCWluZGV4ID0gSVdMX0ZJUlNUX0NDS19SQVRFOwogCQkJZm9yIChpID0gSVdMX1JBVEVfNk1fSU5ERVhfVEFCTEU7CkBAIC0yNDI4LDQ3ICsyNDYwLDQ4IEBACiAKIAkvKiBVcGRhdGUgdGhlIHJhdGUgc2NhbGluZyBmb3IgY29udHJvbCBmcmFtZSBUeCAqLwogCXJhdGVfY21kLnRhYmxlX2lkID0gMDsKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCiAJCQkgICAgICAmcmF0ZV9jbWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCiAJLyogVXBkYXRlIHRoZSByYXRlIHNjYWxpbmcgZm9yIGRhdGEgZnJhbWUgVHggKi8KIAlyYXRlX2NtZC50YWJsZV9pZCA9IDE7Ci0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCisJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUkFURV9TQ0FMRSwgc2l6ZW9mKHJhdGVfY21kKSwKIAkJCQkmcmF0ZV9jbWQpOwogfQogCiAvKiBDYWxsZWQgd2hlbiBpbml0aWFsaXppbmcgZHJpdmVyICovCi1pbnQgaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoraW50IGl3bDM5NDVfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JbWVtc2V0KCh2b2lkICopJnByaXYtPmh3X3NldHRpbmcsIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbykpOworCW1lbXNldCgodm9pZCAqKSZwcml2LT5od19wYXJhbXMsIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2h3X3BhcmFtcykpOwogCi0JcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCA9CisJcHJpdi0+c2hhcmVkX3ZpcnQgPQogCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAogCQkJCSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKLQkJCQkgJnByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCQkJCSAmcHJpdi0+c2hhcmVkX3BoeXMpOwogCi0JaWYgKCFwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0KSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOworCWlmICghcHJpdi0+c2hhcmVkX3ZpcnQpIHsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcHJpdi0+aHdfc2V0dGluZy5yeF9idWZfc2l6ZSA9IElXTF9SWF9CVUZfU0laRTsKLQlwcml2LT5od19zZXR0aW5nLm1heF9wa3Rfc2l6ZSA9IDIzNDI7Ci0JcHJpdi0+aHdfc2V0dGluZy50eF9jbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCk7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfcnhxX3NpemUgPSBSWF9RVUVVRV9TSVpFOwotCXByaXYtPmh3X3NldHRpbmcubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKLQlwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9ucyA9IElXTDM5NDVfU1RBVElPTl9DT1VOVDsKLQlwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZCA9IElXTDM5NDVfQlJPQURDQVNUX0lEOworCXByaXYtPmh3X3BhcmFtcy50ZmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90ZmQpOworCXByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSA9IElXTF9SWF9CVUZfU0laRV8zSzsKKwlwcml2LT5od19wYXJhbXMubWF4X3BrdF9zaXplID0gMjM0MjsKKwlwcml2LT5od19wYXJhbXMubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKKwlwcml2LT5od19wYXJhbXMubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKKwlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMMzk0NV9TVEFUSU9OX0NPVU5UOworCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0wzOTQ1X0JST0FEQ0FTVF9JRDsKIAotCXByaXYtPmh3X3NldHRpbmcudHhfYW50X251bSA9IDI7CisJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkgzOV9SU0NTUl9DSE5MMF9XUFRSOworCiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCit1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kICp0eF9iZWFjb25fY21kOwpAQCAtMjQ3Nyw3ICsyNTEwLDcgQEAKIAl0eF9iZWFjb25fY21kID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgKikmZnJhbWUtPnU7CiAJbWVtc2V0KHR4X2JlYWNvbl9jbWQsIDAsIHNpemVvZigqdHhfYmVhY29uX2NtZCkpOwogCi0JdHhfYmVhY29uX2NtZC0+dHguc3RhX2lkID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJdHhfYmVhY29uX2NtZC0+dHguc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAl0eF9iZWFjb25fY21kLT50eC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKIAogCWZyYW1lX3NpemUgPSBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHByaXYsCkBAIC0yNTAxLDM3ICsyNTM0LDI2MiBAQAogCXJldHVybiBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCkgKyBmcmFtZV9zaXplOwogfQogCi12b2lkIGl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1RYXSA9IGl3bDM5NDVfcnhfcmVwbHlfdHg7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfMzk0NV9SWF0gPSBpd2wzOTQ1X3J4X3JlcGx5X3J4OwogfQogCi12b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT50aGVybWFsX3BlcmlvZGljLAogCQkJICBpd2wzOTQ1X2JnX3JlZ190eHBvd2VyX3BlcmlvZGljKTsKIH0KIAotdm9pZCBpd2wzOTQ1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnRoZXJtYWxfcGVyaW9kaWMpOwogfQogCi1zdGF0aWMgc3RydWN0IGl3bF8zOTQ1X2NmZyBpd2wzOTQ1X2JnX2NmZyA9IHsKKy8qIGNoZWNrIGNvbnRlbnRzIG9mIHNwZWNpYWwgYm9vdHN0cmFwIHVDb2RlIFNSQU0gKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfYnNtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKyB7CisJX19sZTMyICppbWFnZSA9IHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOworCXUzMiBsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKKwl1MzIgcmVnOworCXUzMiB2YWw7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gdmVyaWZ5IGJzbVxuIik7CisKKwkvKiB2ZXJpZnkgQlNNIFNSQU0gY29udGVudHMgKi8KKwl2YWwgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7CisJZm9yIChyZWcgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKKwkgICAgIHJlZyA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOworCSAgICAgcmVnICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CisJCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKKwkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CisJCQlJV0xfRVJSKHByaXYsICJCU00gdUNvZGUgdmVyaWZpY2F0aW9uIGZhaWxlZCBhdCAiCisJCQkJICAiYWRkciAweCUwOFgrJXUgKG9mICV1KSwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCisJCQkJICBCU01fU1JBTV9MT1dFUl9CT1VORCwKKwkJCQkgIHJlZyAtIEJTTV9TUkFNX0xPV0VSX0JPVU5ELCBsZW4sCisJCQkJICB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlNNIGJvb3RzdHJhcCB1Q29kZSBpbWFnZSBPS1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRUVQUk9NIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENsZWFyIHRoZSBPV05FUl9NU0ssIHRvIGVzdGFibGlzaCBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUgcnVubmluZyBvbgorICogZW1iZWRkZWQgY29udHJvbGxlcikgYXMgRUVQUk9NIHJlYWRlcjsgZWFjaCByZWFkIGlzIGEgc2VyaWVzIG9mIHB1bHNlcworICogdG8vZnJvbSB0aGUgRUVQUk9NIGNoaXAsIG5vdCBhIHNpbmdsZSBldmVudCwgc28gZXZlbiByZWFkcyBjb3VsZCBjb25mbGljdAorICogaWYgdGhleSB3ZXJlbid0IGFyYml0cmF0ZWQgYnkgc29tZSBvd25lcnNoaXAgbWVjaGFuaXNtLiAgSGVyZSwgdGhlIGRyaXZlcgorICogc2ltcGx5IGNsYWltcyBvd25lcnNoaXAsIHdoaWNoIHNob3VsZCBiZSBzYWZlIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKKyAqIChpLmUuIGJlZm9yZSBsb2FkaW5nIHVDb2RlISkuCisgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCV9pd2xfY2xlYXJfYml0KHByaXYsIENTUl9FRVBST01fR1AsIENTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuOworfQorCisgLyoqCisgICogaXdsMzk0NV9sb2FkX2JzbSAtIExvYWQgYm9vdHN0cmFwIGluc3RydWN0aW9ucworICAqCisgICogQlNNIG9wZXJhdGlvbjoKKyAgKgorICAqIFRoZSBCb290c3RyYXAgU3RhdGUgTWFjaGluZSAoQlNNKSBzdG9yZXMgYSBzaG9ydCBib290c3RyYXAgdUNvZGUgcHJvZ3JhbQorICAqIGluIHNwZWNpYWwgU1JBTSB0aGF0IGRvZXMgbm90IHBvd2VyIGRvd24gZHVyaW5nIFJGS0lMTC4gIFdoZW4gcG93ZXJpbmcgYmFjaworICAqIHVwIGFmdGVyIHBvd2VyLXNhdmluZyBzbGVlcHMgKG9yIGR1cmluZyBpbml0aWFsIHVDb2RlIGxvYWQpLCB0aGUgQlNNIGxvYWRzCisgICogdGhlIGJvb3RzdHJhcCBwcm9ncmFtIGludG8gdGhlIG9uLWJvYXJkIHByb2Nlc3NvciwgYW5kIHN0YXJ0cyBpdC4KKyAgKgorICAqIFRoZSBib290c3RyYXAgcHJvZ3JhbSBsb2FkcyAodmlhIERNQSkgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGZvciBhIG5ldworICAqIHByb2dyYW0gZnJvbSBob3N0IERSQU0gbG9jYXRpb25zIGluZGljYXRlZCBieSB0aGUgaG9zdCBkcml2ZXIgaW4gdGhlCisgICogQlNNX0RSQU1fKiByZWdpc3RlcnMuICBPbmNlIHRoZSBuZXcgcHJvZ3JhbSBpcyBsb2FkZWQsIGl0IHN0YXJ0cworICAqIGF1dG9tYXRpY2FsbHkuCisgICoKKyAgKiBXaGVuIGluaXRpYWxpemluZyB0aGUgTklDLCB0aGUgaG9zdCBkcml2ZXIgcG9pbnRzIHRoZSBCU00gdG8gdGhlCisgICogImluaXRpYWxpemUiIHVDb2RlIGltYWdlLiAgVGhpcyB1Q29kZSBzZXRzIHVwIHNvbWUgaW50ZXJuYWwgZGF0YSwgdGhlbgorICAqIG5vdGlmaWVzIGhvc3QgdmlhICJpbml0aWFsaXplIGFsaXZlIiB0aGF0IGl0IGlzIGNvbXBsZXRlLgorICAqCisgICogVGhlIGhvc3QgdGhlbiByZXBsYWNlcyB0aGUgQlNNX0RSQU1fKiBwb2ludGVyIHZhbHVlcyB0byBwb2ludCB0byB0aGUKKyAgKiBub3JtYWwgcnVudGltZSB1Q29kZSBpbnN0cnVjdGlvbnMgYW5kIGEgYmFja3VwIHVDb2RlIGRhdGEgY2FjaGUgYnVmZmVyCisgICogKGZpbGxlZCBpbml0aWFsbHkgd2l0aCBzdGFydGluZyBkYXRhIHZhbHVlcyBmb3IgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciksCisgICogdGhlbiB0cmlnZ2VycyB0aGUgImluaXRpYWxpemUiIHVDb2RlIHRvIGxvYWQgYW5kIGxhdW5jaCB0aGUgcnVudGltZSB1Q29kZSwKKyAgKiB3aGljaCBiZWdpbnMgbm9ybWFsIG9wZXJhdGlvbi4KKyAgKgorICAqIFdoZW4gZG9pbmcgYSBwb3dlci1zYXZlIHNodXRkb3duLCBydW50aW1lIHVDb2RlIHNhdmVzIGRhdGEgU1JBTSBpbnRvCisgICogdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGluIERSQU0gYmVmb3JlIFNSQU0gaXMgcG93ZXJlZCBkb3duLgorICAqCisgICogV2hlbiBwb3dlcmluZyBiYWNrIHVwLCB0aGUgQlNNIGxvYWRzIHRoZSBib290c3RyYXAgcHJvZ3JhbS4gIFRoaXMgcmVsb2FkcworICAqIHRoZSBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGludG8gU1JBTSwKKyAgKiBhbmQgcmUtbGF1bmNoZXMgdGhlIHJ1bnRpbWUgdUNvZGUgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4KKyAgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9sb2FkX2JzbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJX19sZTMyICppbWFnZSA9IHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOworCXUzMiBsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKKwlkbWFfYWRkcl90IHBpbnN0OworCWRtYV9hZGRyX3QgcGRhdGE7CisJdTMyIGluc3RfbGVuOworCXUzMiBkYXRhX2xlbjsKKwlpbnQgcmM7CisJaW50IGk7CisJdTMyIGRvbmU7CisJdTMyIHJlZ19vZmZzZXQ7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gbG9hZCBic21cbiIpOworCisJLyogbWFrZSBzdXJlIGJvb3RzdHJhcCBwcm9ncmFtIGlzIG5vIGxhcmdlciB0aGFuIEJTTSdzIFNSQU0gc2l6ZSAqLworCWlmIChsZW4gPiBJV0wzOV9NQVhfQlNNX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCisJKiAgIGluIGhvc3QgRFJBTSAuLi4gaG9zdCBEUkFNIHBoeXNpY2FsIGFkZHJlc3MgYml0cyAzMTowIGZvciAzOTQ1LgorCSogTk9URTogIGl3bDM5NDVfaW5pdGlhbGl6ZV9hbGl2ZV9zdGFydCgpIHdpbGwgcmVwbGFjZSB0aGVzZSB2YWx1ZXMsCisJKiAgICAgICAgYWZ0ZXIgdGhlICJpbml0aWFsaXplIiB1Q29kZSBoYXMgcnVuLCB0byBwb2ludCB0bworCSogICAgICAgIHJ1bnRpbWUvcHJvdG9jb2wgaW5zdHJ1Y3Rpb25zIGFuZCBiYWNrdXAgZGF0YSBjYWNoZS4gKi8KKwlwaW5zdCA9IHByaXYtPnVjb2RlX2luaXQucF9hZGRyOworCXBkYXRhID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLnBfYWRkcjsKKwlpbnN0X2xlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOworCWRhdGFfbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKKworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfUFRSX1JFRywgcGluc3QpOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfUFRSX1JFRywgcGRhdGEpOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywgaW5zdF9sZW4pOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywgZGF0YV9sZW4pOworCisJLyogRmlsbCBCU00gbWVtb3J5IHdpdGggYm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLworCWZvciAocmVnX29mZnNldCA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOworCSAgICAgcmVnX29mZnNldCA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOworCSAgICAgcmVnX29mZnNldCArPSBzaXplb2YodTMyKSwgaW1hZ2UrKykKKwkJX2l3bF93cml0ZV9wcnBoKHByaXYsIHJlZ19vZmZzZXQsCisJCQkJCSAgbGUzMl90b19jcHUoKmltYWdlKSk7CisKKwlyYyA9IGl3bDM5NDVfdmVyaWZ5X2JzbShwcml2KTsKKwlpZiAocmMpIHsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIFRlbGwgQlNNIHRvIGNvcHkgZnJvbSBCU00gU1JBTSBpbnRvIGluc3RydWN0aW9uIFNSQU0sIHdoZW4gYXNrZWQgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLAorCQkJCSBJV0wzOV9SVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHLCBsZW4gLyBzaXplb2YodTMyKSk7CisKKwkvKiBMb2FkIGJvb3RzdHJhcCBjb2RlIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSBub3csCisJICogICB0byBwcmVwYXJlIHRvIGxvYWQgImluaXRpYWxpemUiIHVDb2RlICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAorCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKTsKKworCS8qIFdhaXQgZm9yIGxvYWQgb2YgYm9vdHN0cmFwIHVDb2RlIHRvIGZpbmlzaCAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlkb25lID0gaXdsX3JlYWRfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcpOworCQlpZiAoIShkb25lICYgQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKGkgPCAxMDApCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CisJZWxzZSB7CisJCUlXTF9FUlIocHJpdiwgIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBwb3dlciBtYW5hZ2VtZW50IHVuaXQgdHJpZ2dlcnMgaXQKKwkgKiAgIChlLmcuIHdoZW4gcG93ZXJpbmcgYmFjayB1cCBhZnRlciBwb3dlci1zYXZlIHNodXRkb3duKSAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRywKKwkJQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVF9FTik7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsMzk0NV9saWIgPSB7CisJLnR4cV9hdHRhY2hfYnVmX3RvX3RmZCA9IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQsCisJLmxvYWRfdWNvZGUgPSBpd2wzOTQ1X2xvYWRfYnNtLAorCS5hcG1fb3BzID0geworCQkuaW5pdCA9IGl3bDM5NDVfYXBtX2luaXQsCisJCS5yZXNldCA9IGl3bDM5NDVfYXBtX3Jlc2V0LAorCQkuc3RvcCA9IGl3bDM5NDVfYXBtX3N0b3AsCisJCS5jb25maWcgPSBpd2wzOTQ1X25pY19jb25maWcsCisJCS5zZXRfcHdyX3NyYyA9IGl3bDM5NDVfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzFfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzJfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzRfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzVfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCwKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFULAorCQl9LAorCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAorCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKKwkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsMzk0NV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCisJCS5xdWVyeV9hZGRyID0gaXdsY29yZV9lZXByb21fcXVlcnlfYWRkciwKKwl9LAorCS5zZW5kX3R4X3Bvd2VyCT0gaXdsMzk0NV9zZW5kX3R4X3Bvd2VyLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsMzk0NV9oY21kX3V0aWxzID0geworCS5nZXRfaGNtZF9zaXplID0gaXdsMzk0NV9nZXRfaGNtZF9zaXplLAorCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDM5NDVfYnVpbGRfYWRkc3RhX2hjbWQsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsMzk0NV9vcHMgPSB7CisJLmxpYiA9ICZpd2wzOTQ1X2xpYiwKKwkudXRpbHMgPSAmaXdsMzk0NV9oY21kX3V0aWxzLAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfY2ZnIGl3bDM5NDVfYmdfY2ZnID0gewogCS5uYW1lID0gIjM5NDVCRyIsCiAJLmZ3X25hbWVfcHJlID0gSVdMMzk0NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0wzOTQ1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0wzOTQ1X1VDT0RFX0FQSV9NSU4sCiAJLnNrdSA9IElXTF9TS1VfRywKKwkuZWVwcm9tX3NpemUgPSBJV0wzOTQ1X0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV8zOTQ1X0VFUFJPTV9WRVJTSU9OLAorCS5vcHMgPSAmaXdsMzk0NV9vcHMsCisJLm1vZF9wYXJhbXMgPSAmaXdsMzk0NV9tb2RfcGFyYW1zCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF8zOTQ1X2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CitzdGF0aWMgc3RydWN0IGl3bF9jZmcgaXdsMzk0NV9hYmdfY2ZnID0gewogCS5uYW1lID0gIjM5NDVBQkciLAogCS5md19uYW1lX3ByZSA9IElXTDM5NDVfRldfUFJFLAogCS51Y29kZV9hcGlfbWF4ID0gSVdMMzk0NV9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMMzk0NV9VQ09ERV9BUElfTUlOLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HLAorCS5lZXByb21fc2l6ZSA9IElXTDM5NDVfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04sCisJLm9wcyA9ICZpd2wzOTQ1X29wcywKKwkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMKIH07CiAKIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDM5NDVfaHdfY2FyZF9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAppbmRleCAyYzBkZGM1Li5hYjdhYWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQzLDExICs0MywxMyBAQAogLyogSGFyZHdhcmUgc3BlY2lmaWMgZmlsZSBkZWZpbmVzIHRoZSBQQ0kgSURzIHRhYmxlIGZvciB0aGF0IGhhcmR3YXJlIG1vZHVsZSAqLwogZXh0ZXJuIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDM5NDVfaHdfY2FyZF9pZHNbXTsKIAotI2RlZmluZSBEUlZfTkFNRQkiaXdsMzk0NSIKICNpbmNsdWRlICJpd2wtY3NyLmgiCiAjaW5jbHVkZSAiaXdsLXBycGguaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKICNpbmNsdWRlICJpd2wtMzk0NS1ody5oIgotI2luY2x1ZGUgIml3bC0zOTQ1LWRlYnVnLmgiCisjaW5jbHVkZSAiaXdsLWRlYnVnLmgiCisjaW5jbHVkZSAiaXdsLXBvd2VyLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LWxlZC5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwpAQCAtNzQsOCArNzYsNyBAQAogI2RlZmluZSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFICgtMTI3KQogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyBhY2Nlc3NpYmxlIGZyb20gaXdsLSouYyAqLwotZXh0ZXJuIGludCBpd2wzOTQ1X3BhcmFtX2h3Y3J5cHRvOwotZXh0ZXJuIGludCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW07CitleHRlcm4gc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDM5NDVfbW9kX3BhcmFtczsKIAogc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYgewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhOwpAQCAtOTUsNyArOTYsNiBAQAogICogZWxzZSBSVFMgZm9yIGRhdGEvbWFuYWdlbWVudCBmcmFtZXMgd2hlcmUgTVBEVSBpcyBsYXJnZXIKICAqICAgdGhhbiBSVFMgdmFsdWUuCiAgKi8KLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFICAgICAgICAgICAzMDAwVQogI2RlZmluZSBERUZBVUxUX1JUU19USFJFU0hPTEQgICAgIDIzNDdVCiAjZGVmaW5lIE1JTl9SVFNfVEhSRVNIT0xEICAgICAgICAgMFUKICNkZWZpbmUgTUFYX1JUU19USFJFU0hPTEQgICAgICAgICAyMzQ3VQpAQCAtMTA1LDEzNiArMTA1LDcgQEAKICNkZWZpbmUJREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCA3VQogI2RlZmluZQlERUZBVUxUX0xPTkdfUkVUUllfTElNSVQgIDRVCiAKLXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgewotCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi0vKgotICogR2VuZXJpYyBxdWV1ZSBzdHJ1Y3R1cmUKLSAqCi0gKiBDb250YWlucyBjb21tb24gZGF0YSBmb3IgUnggYW5kIFR4IHF1ZXVlcwotICovCi1zdHJ1Y3QgaXdsMzk0NV9xdWV1ZSB7Ci0JaW50IG5fYmQ7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgQkRzIGluIHRoaXMgcXVldWUgKi8KLQlpbnQgd3JpdGVfcHRyOyAgICAgICAvKiAxLXN0IGVtcHR5IGVudHJ5IChpbmRleCkgaG9zdF93Ki8KLQlpbnQgcmVhZF9wdHI7ICAgICAgICAgLyogbGFzdCB1c2VkIGVudHJ5IChpbmRleCkgaG9zdF9yKi8KLQlkbWFfYWRkcl90IGRtYV9hZGRyOyAgIC8qIHBoeXNpY2FsIGFkZHIgZm9yIEJEJ3MgKi8KLQlpbnQgbl93aW5kb3c7CSAgICAgICAvKiBzYWZlIHF1ZXVlIHdpbmRvdyAqLwotCXUzMiBpZDsKLQlpbnQgbG93X21hcms7CSAgICAgICAvKiBsb3cgd2F0ZXJtYXJrLCByZXN1bWUgcXVldWUgaWYgZnJlZQotCQkJCSogc3BhY2UgbW9yZSB0aGFuIHRoaXMgKi8KLQlpbnQgaGlnaF9tYXJrOyAgICAgICAgIC8qIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHF1ZXVlIGlmIGZyZWUKLQkJCQkqIHNwYWNlIGxlc3MgdGhhbiB0aGlzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotaW50IGl3bDM5NDVfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcXVldWUgKnEpOwotaW50IGl3bDM5NDVfeDJfcXVldWVfdXNlZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwgaW50IGkpOwotCi0jZGVmaW5lIE1BWF9OVU1fT0ZfVEJTICAgICAgICAgICgyMCkKLQotLyogT25lIGZvciBlYWNoIFRGRCAqLwotc3RydWN0IGl3bDM5NDVfdHhfaW5mbyB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYltNQVhfTlVNX09GX1RCU107Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlIC0gVHggUXVldWUgZm9yIERNQQotICogQHE6IGdlbmVyaWMgUngvVHggcXVldWUgZGVzY3JpcHRvcgotICogQGJkOiBiYXNlIG9mIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzCi0gKiBAY21kOiBhcnJheSBvZiBjb21tYW5kL1R4IGJ1ZmZlcnMKLSAqIEBkbWFfYWRkcl9jbWQ6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kL3R4IGJ1ZmZlciBhcnJheQotICogQHR4YjogYXJyYXkgb2YgcGVyLVRGRCBkcml2ZXIgZGF0YQotICogQG5lZWRfdXBkYXRlOiBpbmRpY2F0ZXMgbmVlZCB0byB1cGRhdGUgcmVhZC93cml0ZSBpbmRleAotICoKLSAqIEEgVHggcXVldWUgY29uc2lzdHMgb2YgY2lyY3VsYXIgYnVmZmVyIG9mIEJEcyAoYS5rLmEuIFRGRHMsIHRyYW5zbWl0IGZyYW1lCi0gKiBkZXNjcmlwdG9ycykgYW5kIHJlcXVpcmVkIGxvY2tpbmcgc3RydWN0dXJlcy4KLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgewotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlIHE7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZDsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZDsKLQlkbWFfYWRkcl90IGRtYV9hZGRyX2NtZDsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvICp0eGI7Ci0JaW50IG5lZWRfdXBkYXRlOwotCWludCBhY3RpdmU7Ci19OwotCi0jZGVmaW5lIElXTF9OVU1fU0NBTl9SQVRFUyAgICAgICAgICgyKQotCi1zdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3RnZF9pbmZvIHsKLQl1OCB0eXBlOwotCXM4IG1heF9wb3dlcjsKLX07Ci0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdoX2luZm8gewotCXM2NCBsYXN0X3JhZGFyX3RpbWU7Ci19OwotCi0vKiBjdXJyZW50IFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCByYXRlIGZvciBlYWNoIGNoYW5uZWwuCi0gKiByZXF1ZXN0ZWQgcG93ZXIgaXMgbGltaXRlZCBieToKLSAqIC0tIHJlZ3VsYXRvcnkgRUVQUk9NIGxpbWl0cyBmb3IgdGhpcyBjaGFubmVsCi0gKiAtLSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKGNsaXAtcG93ZXJzKQotICogLS0gc3BlY3RydW0gbWFuYWdlbWVudAotICogLS0gdXNlciBwcmVmZXJlbmNlIChlLmcuIGl3Y29uZmlnKQotICogd2hlbiByZXF1ZXN0ZWQgcG93ZXIgaXMgc2V0LCBiYXNlIHBvd2VyIGluZGV4IG11c3QgYWxzbyBiZSBzZXQuICovCi1zdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IGJhc2VfcG93ZXJfaW5kZXg7CS8qIGdhaW4gaW5kZXggZm9yIHBvd2VyIGF0IGZhY3RvcnkgdGVtcC4gKi8KLQlzOCByZXF1ZXN0ZWRfcG93ZXI7CS8qIHBvd2VyIChkQm0pIHJlcXVlc3RlZCBmb3IgdGhpcyBjaG5sL3JhdGUgKi8KLX07Ci0KLS8qIGN1cnJlbnQgc2NhbiBUeCBwb3dlciB2YWx1ZXMgdG8gdXNlLCBvbmUgZm9yIGVhY2ggc2NhbiByYXRlIGZvciBlYWNoCi0gKiBjaGFubmVsLiAqLwotc3RydWN0IGl3bDM5NDVfc2Nhbl9wb3dlcl9pbmZvIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7CS8qIGFjdHVhbCByYWRpbyBhbmQgRFNQIGdhaW4gc2V0dGluZ3MgKi8KLQlzOCBwb3dlcl90YWJsZV9pbmRleDsJLyogYWN0dWFsIChjb21wZW5zdCdkKSBpbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KLQlzOCByZXF1ZXN0ZWRfcG93ZXI7CS8qIHNjYW4gcHdyIChkQm0pIHJlcXVlc3RlZCBmb3IgY2hubC9yYXRlICovCi19OwotCi0vKgotICogT25lIGZvciBlYWNoIGNoYW5uZWwsIGhvbGRzIGFsbCBjaGFubmVsIHNldHVwIGRhdGEKLSAqIFNvbWUgb2YgdGhlIGZpZWxkcyAoZS5nLiBlZXByb20gYW5kIGZsYWdzL21heF9wb3dlcl9hdmcpIGFyZSByZWR1bmRhbnQKLSAqICAgICB3aXRoIG9uZSBhbm90aGVyIQotICovCi0jZGVmaW5lIElXTDQ5NjVfTUFYX1JBVEUgKDMzKQotCi1zdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdkX2luZm8gdGdkOwotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdoX2luZm8gdGdoOwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGVlcHJvbTsJLyogRUVQUk9NIHJlZ3VsYXRvcnkgbGltaXQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBmYXRfZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCBmb3IKLQkJCQkJCSAqIEZBVCBjaGFubmVsICovCi0KLQl1OCBjaGFubmVsOwkgIC8qIGNoYW5uZWwgbnVtYmVyICovCi0JdTggZmxhZ3M7CSAgLyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCi0JczggbWF4X3Bvd2VyX2F2ZzsgLyogKGRCbSkgcmVndWwuIGVlcHJvbSwgbm9ybWFsIFR4LCBhbnkgcmF0ZSAqLwotCXM4IGN1cnJfdHhwb3c7CSAgLyogKGRCbSkgcmVndWxhdG9yeS9zcGVjdHJ1bS91c2VyIChub3QgaC93KSAqLwotCXM4IG1pbl9wb3dlcjsJICAvKiBhbHdheXMgMCAqLwotCXM4IHNjYW5fcG93ZXI7CSAgLyogKGRCbSkgcmVndWwuIGVlcHJvbSwgZGlyZWN0IHNjYW5zLCBhbnkgcmF0ZSAqLwotCi0JdTggZ3JvdXBfaW5kZXg7CSAgLyogMC00LCBtYXBzIGNoYW5uZWwgdG8gZ3JvdXAxLzIvMy80LzUgKi8KLQl1OCBiYW5kX2luZGV4OwkgIC8qIDAtNCwgbWFwcyBjaGFubmVsIHRvIGJhbmQxLzIvMy80LzUgKi8KLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCAibm9ybWFsIiBkYXRhIFR4IHJhdGUuCi0JICogVGhlc2UgaW5jbHVkZSwgaW4gYWRkaXRpb24gdG8gUkYgYW5kIERTUCBnYWluLCBhIGZldyBmaWVsZHMgZm9yCi0JICogICByZW1lbWJlcmluZy9tb2RpZnlpbmcgZ2FpbiBzZXR0aW5ncyAoaW5kZXhlcykuICovCi0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHBvd2VyX2luZm9bSVdMNDk2NV9NQVhfUkFURV07Ci0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCBzY2FuIHJhdGUsIGZvciBkaXJlY3RlZCBzY2Fucy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gc2Nhbl9wd3JfaW5mb1tJV0xfTlVNX1NDQU5fUkFURVNdOwotfTsKLQotc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCB7Ci0JLyogbWF4aW11bSBwb3dlciBsZXZlbCB0byBwcmV2ZW50IGNsaXBwaW5nIGZvciBlYWNoIHJhdGUsIGRlcml2ZWQgYnkKLQkgKiAgIHVzIGZyb20gdGhpcyBiYW5kJ3Mgc2F0dXJhdGlvbiBwb3dlciBpbiBFRVBST00gKi8KLQljb25zdCBzOCBjbGlwX3Bvd2Vyc1tJV0xfTUFYX1JBVEVTXTsKLX07Ci0KLSNpbmNsdWRlICJpd2wtMzk0NS1ycy5oIgorI2luY2x1ZGUgIml3bC1hZ24tcnMuaCIKIAogI2RlZmluZSBJV0xfVFhfRklGT19BQzAJMAogI2RlZmluZSBJV0xfVFhfRklGT19BQzEJMQpAQCAtMjQ3LDMzICsxMTgsNiBAQAogLyogTWluaW11bSBudW1iZXIgb2YgcXVldWVzLiBNQVhfTlVNIGlzIGRlZmluZWQgaW4gaHcgc3BlY2lmaWMgZmlsZXMgKi8KICNkZWZpbmUgSVdMX01JTl9OVU1fUVVFVUVTCTQKIAotLyogUG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyKSBzdHJ1Y3R1cmVzICovCi0KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSB7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgY21kOwotCXU4IG5vX2R0aW07Ci19OwotI2RlZmluZSBJV0xfUE9XRVJfUkFOR0VfMCAgKDApCi0jZGVmaW5lIElXTF9QT1dFUl9SQU5HRV8xICAoMSkKLQotI2RlZmluZSBJV0xfUE9XRVJfTU9ERV9DQU0JMHgwMAkvKiBDb250aW51b3VzbHkgQXdhcmUgTW9kZSwgYWx3YXlzIG9uICovCi0jZGVmaW5lIElXTF9QT1dFUl9JTkRFWF8zCTB4MDMKLSNkZWZpbmUgSVdMX1BPV0VSX0lOREVYXzUJMHgwNQotI2RlZmluZSBJV0xfUE9XRVJfQUMJCTB4MDYKLSNkZWZpbmUgSVdMX1BPV0VSX0JBVFRFUlkJMHgwNwotI2RlZmluZSBJV0xfUE9XRVJfTElNSVQJCTB4MDcKLSNkZWZpbmUgSVdMX1BPV0VSX01BU0sJCTB4MEYKLSNkZWZpbmUgSVdMX1BPV0VSX0VOQUJMRUQJMHgxMAotI2RlZmluZSBJV0xfUE9XRVJfTEVWRUwoeCkJKCh4KSAmIElXTF9QT1dFUl9NQVNLKQotCi1zdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgewotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgcHdyX3JhbmdlXzBbSVdMX1BPV0VSX0FDXTsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgcHdyX3JhbmdlXzFbSVdMX1BPV0VSX0FDXTsKLQl1OCBhY3RpdmVfaW5kZXg7Ci0JdTMyIGR0aW1fdmFsOwotfTsKLQogI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4gICAgICAgICAgICAgIDIzMDQKICNkZWZpbmUgSUVFRTgwMjExXzRBRERSX0xFTiAgICAgICAgICAgICAzMAogI2RlZmluZSBJRUVFODAyMTFfSExFTiAgICAgICAgICAgICAgICAgIChJRUVFODAyMTFfNEFERFJfTEVOKQpAQCAtMjg5LDgxICsxMzMsMTAgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi0jZGVmaW5lIFNFUV9UT19RVUVVRSh4KSAgKCh4ID4+IDgpICYgMHhiZikKLSNkZWZpbmUgUVVFVUVfVE9fU0VRKHgpICAoKHggJiAweGJmKSA8PCA4KQotI2RlZmluZSBTRVFfVE9fSU5ERVgoeCkgKCh1OCkoeCAmIDB4ZmYpKQotI2RlZmluZSBJTkRFWF9UT19TRVEoeCkgKCh1OCkoeCAmIDB4ZmYpKQotI2RlZmluZSBTRVFfSFVHRV9GUkFNRSAgKDB4NDAwMCkKLSNkZWZpbmUgU0VRX1JYX0ZSQU1FICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQogI2RlZmluZSBTRVFfVE9fU04oc2VxKSAoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQogI2RlZmluZSBTTl9UT19TRVEoc3NuKSAoKChzc24pIDw8IDQpICYgSUVFRTgwMjExX1NDVExfU0VRKQogI2RlZmluZSBNQVhfU04gKChJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCiAKLWVudW0gewotCS8qIENNRF9TSVpFX05PUk1BTCA9IDAsICovCi0JQ01EX1NJWkVfSFVHRSA9ICgxIDw8IDApLAotCS8qIENNRF9TWU5DID0gMCwgKi8KLQlDTURfQVNZTkMgPSAoMSA8PCAxKSwKLQkvKiBDTURfTk9fU0tCID0gMCwgKi8KLQlDTURfV0FOVF9TS0IgPSAoMSA8PCAyKSwKLX07Ci0KLXN0cnVjdCBpd2wzOTQ1X2NtZDsKLXN0cnVjdCBpd2wzOTQ1X3ByaXY7Ci0KLXN0cnVjdCBpd2wzOTQ1X2NtZF9tZXRhIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSAqc291cmNlOwotCXVuaW9uIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJaW50ICgqY2FsbGJhY2spKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDM5NDVfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHU7Ci0KLQkvKiBUaGUgQ01EX1NJWkVfSFVHRSBmbGFnIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZAotCSAqIHN0cnVjdHVyZSBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhcmVkIHF1ZXVlIG1lbW9yeS4gKi8KLQl1MzIgZmxhZ3M7Ci0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X2NtZAotICoKLSAqIEZvciBhbGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kIGFuZCB0eCBxdWV1ZXMsIHRoaXMgZXN0YWJsaXNoZXMgdGhlIG92ZXJhbGwKLSAqIHNpemUgb2YgdGhlIGxhcmdlc3QgY29tbWFuZCB3ZSBzZW5kIHRvIHVDb2RlLCBleGNlcHQgZm9yIGEgc2NhbiBjb21tYW5kCi0gKiAod2hpY2ggaXMgcmVsYXRpdmVseSBodWdlOyBzcGFjZSBpcyBhbGxvY2F0ZWQgc2VwYXJhdGVseSkuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfY21kX21ldGEgbWV0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfaGVhZGVyIGhkcjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgYWRkc3RhOwotCQlzdHJ1Y3QgaXdsMzk0NV9sZWRfY21kIGxlZDsKLQkJdTMyIGZsYWdzOwotCQl1OCB2YWw4OwotCQl1MTYgdmFsMTY7Ci0JCXUzMiB2YWwzMjsKLQkJc3RydWN0IGl3bDM5NDVfYnRfY21kIGJ0OwotCQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX3RpbWVfY21kIHJ4b25fdGltZTsKLQkJc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgcG93ZXJ0YWJsZTsKLQkJc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kIHFvc3BhcmFtOwotCQlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHg7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgdHhfYmVhY29uOwotCQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOwotCQl1OCAqaW5kaXJlY3Q7Ci0JCXU4IHBheWxvYWRbMzYwXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBjbWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgewotCXU4IGlkOwotCXUxNiBsZW47Ci0Jc3RydWN0IGl3bDM5NDVfY21kX21ldGEgbWV0YTsKLQljb25zdCB2b2lkICpkYXRhOwotfTsKLQotI2RlZmluZSBURkRfTUFYX1BBWUxPQURfU0laRSAoc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX21ldGEpKQotCiAvKgogICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKICAqLwpAQCAtMzc0LDMzICsxNDcsNiBAQAogI2RlZmluZSBTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMUyAgNAogI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKIAotLyoqCi0gKiBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAtIFJ4IHF1ZXVlCi0gKiBAcHJvY2Vzc2VkOiBJbnRlcm5hbCBpbmRleCB0byBsYXN0IGhhbmRsZWQgUnggcGFja2V0Ci0gKiBAcmVhZDogU2hhcmVkIGluZGV4IHRvIG5ld2VzdCBhdmFpbGFibGUgUnggYnVmZmVyCi0gKiBAd3JpdGU6IFNoYXJlZCBpbmRleCB0byBvbGRlc3Qgd3JpdHRlbiBSeCBwYWNrZXQKLSAqIEBmcmVlX2NvdW50OiBOdW1iZXIgb2YgcHJlLWFsbG9jYXRlZCBidWZmZXJzIGluIHJ4X2ZyZWUKLSAqIEByeF9mcmVlOiBsaXN0IG9mIGZyZWUgU0tCcyBmb3IgdXNlCi0gKiBAcnhfdXNlZDogTGlzdCBvZiBSeCBidWZmZXJzIHdpdGggbm8gU0tCCi0gKiBAbmVlZF91cGRhdGU6IGZsYWcgdG8gaW5kaWNhdGUgd2UgbmVlZCB0byB1cGRhdGUgcmVhZC93cml0ZSBpbmRleAotICoKLSAqIE5PVEU6ICByeF9mcmVlIGFuZCByeF91c2VkIGFyZSB1c2VkIGFzIGEgRklGTyBmb3IgaXdsMzk0NV9yeF9tZW1fYnVmZmVycwotICovCi1zdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSB7Ci0JX19sZTMyICpiZDsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgcG9vbFtSWF9RVUVVRV9TSVpFICsgUlhfRlJFRV9CVUZGRVJTXTsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpxdWV1ZVtSWF9RVUVVRV9TSVpFXTsKLQl1MzIgcHJvY2Vzc2VkOwotCXUzMiByZWFkOwotCXUzMiB3cml0ZTsKLQl1MzIgZnJlZV9jb3VudDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X2ZyZWU7Ci0Jc3RydWN0IGxpc3RfaGVhZCByeF91c2VkOwotCWludCBuZWVkX3VwZGF0ZTsKLQlzcGlubG9ja190IGxvY2s7Ci19OwotCiAjZGVmaW5lIElXTF9TVVBQT1JURURfUkFURVNfSUVfTEVOICAgICAgICAgOAogCiAjZGVmaW5lIFNDQU5fSU5URVJWQUwgMTAwCkBAIC00MzAsODcgKzE3Niw5IEBACiAjZGVmaW5lIElXTF9JTlZBTElEX1JBVEUgICAgIDB4RkYKICNkZWZpbmUgSVdMX0lOVkFMSURfVkFMVUUgICAgLTEKIAotc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgewotCXUxNiBzZXFfbnVtYmVyOwotfTsKLQotc3RydWN0IGl3bDM5NDVfaHdfa2V5IHsKLQllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKLQlpbnQga2V5bGVuOwotCXU4IGtleVszMl07Ci19OwotCi11bmlvbiBpd2wzOTQ1X2h0X3JhdGVfc3VwcCB7Ci0JdTE2IHJhdGVzOwotCXN0cnVjdCB7Ci0JCXU4IHNpc29fcmF0ZTsKLQkJdTggbWltb19yYXRlOwotCX07Ci19OwotCi11bmlvbiBpd2wzOTQ1X3Fvc19jYXBhYml0eSB7Ci0Jc3RydWN0IHsKLQkJdTggZWRjYV9jb3VudDo0OwkvKiBiaXQgMC0zICovCi0JCXU4IHFfYWNrOjE7CQkvKiBiaXQgNCAqLwotCQl1OCBxdWV1ZV9yZXF1ZXN0OjE7CS8qIGJpdCA1ICovCi0JCXU4IHR4b3BfcmVxdWVzdDoxOwkvKiBiaXQgNiAqLwotCQl1OCByZXNlcnZlZDoxOwkJLyogYml0IDcgKi8KLQl9IHFfQVA7Ci0Jc3RydWN0IHsKLQkJdTggYWN2b19BUFNEOjE7CQkvKiBiaXQgMCAqLwotCQl1OCBhY3ZpX0FQU0Q6MTsJCS8qIGJpdCAxICovCi0JCXU4IGFjX2JrX0FQU0Q6MTsJLyogYml0IDIgKi8KLQkJdTggYWNfYmVfQVBTRDoxOwkvKiBiaXQgMyAqLwotCQl1OCBxX2FjazoxOwkJLyogYml0IDQgKi8KLQkJdTggbWF4X2xlbjoyOwkJLyogYml0IDUtNiAqLwotCQl1OCBtb3JlX2RhdGFfYWNrOjE7CS8qIGJpdCA3ICovCi0JfSBxX1NUQTsKLQl1OCB2YWw7Ci19OwotCi0vKiBRb1Mgc3RydWN0dXJlcyAqLwotc3RydWN0IGl3bDM5NDVfcW9zX2luZm8gewotCWludCBxb3NfYWN0aXZlOwotCXVuaW9uIGl3bDM5NDVfcW9zX2NhcGFiaXR5IHFvc19jYXA7Ci0Jc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kIGRlZl9xb3NfcGFybTsKLX07Ci0KICNkZWZpbmUgU1RBX1BTX1NUQVRVU19XQUtFICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19TTEVFUCAgICAgICAgICAgIDEKIAotc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSB7Ci0Jc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCBzdGE7Ci0Jc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgdGlkW01BWF9USURfQ09VTlRdOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXU4IHJhdGU7Ci0JCQl1OCBmbGFnczsKLQkJfSBzOwotCQl1MTYgcmF0ZV9uX2ZsYWdzOwotCX0gY3VycmVudF9yYXRlOwotCXU4IHVzZWQ7Ci0JdTggcHNfc3RhdHVzOwotCXN0cnVjdCBpd2wzOTQ1X2h3X2tleSBrZXlpbmZvOwotfTsKLQotLyogb25lIGZvciBlYWNoIHVDb2RlIGltYWdlIChpbnN0L2RhdGEsIGJvb3QvaW5pdC9ydW50aW1lKSAqLwotc3RydWN0IGZ3X2Rlc2MgewotCXZvaWQgKnZfYWRkcjsJCS8qIGFjY2VzcyBieSBkcml2ZXIgKi8KLQlkbWFfYWRkcl90IHBfYWRkcjsJLyogYWNjZXNzIGJ5IGNhcmQncyBidXNtYXN0ZXIgRE1BICovCi0JdTMyIGxlbjsJCS8qIGJ5dGVzICovCi19OwotCi0vKiB1Q29kZSBmaWxlIGxheW91dCAqLwotc3RydWN0IGl3bDM5NDVfdWNvZGUgewotCV9fbGUzMiB2ZXI7CQkvKiBtYWpvci9taW5vci9BUEkvc2VyaWFsICovCi0JX19sZTMyIGluc3Rfc2l6ZTsJLyogYnl0ZXMgb2YgcnVudGltZSBpbnN0cnVjdGlvbnMgKi8KLQlfX2xlMzIgZGF0YV9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGRhdGEgKi8KLQlfX2xlMzIgaW5pdF9zaXplOwkvKiBieXRlcyBvZiBpbml0aWFsaXphdGlvbiBpbnN0cnVjdGlvbnMgKi8KLQlfX2xlMzIgaW5pdF9kYXRhX3NpemU7CS8qIGJ5dGVzIG9mIGluaXRpYWxpemF0aW9uIGRhdGEgKi8KLQlfX2xlMzIgYm9vdF9zaXplOwkvKiBieXRlcyBvZiBib290c3RyYXAgaW5zdHJ1Y3Rpb25zICovCi0JdTggZGF0YVswXTsJCS8qIGRhdGEgaW4gc2FtZSBvcmRlciBhcyAic2l6ZSIgZWxlbWVudHMgKi8KLX07Ci0KIHN0cnVjdCBpd2wzOTQ1X2lic3Nfc2VxIHsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCXUxNiBzZXFfbnVtOwpAQCAtNTE5LDM0ICsxODcsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLS8qKgotICogc3RydWN0IGl3bDM5NDVfZHJpdmVyX2h3X2luZm8KLSAqIEBtYXhfdHhxX251bTogTWF4ICMgVHggcXVldWVzIHN1cHBvcnRlZAotICogQHR4X2NtZF9sZW46IFNpemUgb2YgVHggY29tbWFuZCAoYnV0IG5vdCBpbmNsdWRpbmcgZnJhbWUgaXRzZWxmKQotICogQHR4X2FudF9udW06IE51bWJlciBvZiBUWCBhbnRlbm5hcwotICogQG1heF9yeHFfc2l6ZTogTWF4ICMgUnggZnJhbWVzIGluIFJ4IHF1ZXVlIChtdXN0IGJlIHBvd2VyLW9mLTIpCi0gKiBAcnhfYnVmX3NpemU6Ci0gKiBAbWF4X3BrdF9zaXplOgotICogQG1heF9yeHFfbG9nOiBMb2ctYmFzZS0yIG9mIG1heF9yeHFfc2l6ZQotICogQG1heF9zdGF0aW9uczoKLSAqIEBiY2FzdF9zdGFfaWQ6Ci0gKiBAc2hhcmVkX3ZpcnQ6IFBvaW50ZXIgdG8gZHJpdmVyL3VDb2RlIHNoYXJlZCBUeCBCeXRlIENvdW50cyBhbmQgUnggc3RhdHVzCi0gKiBAc2hhcmVkX3BoeXM6IFBoeXNpY2FsIFBvaW50ZXIgdG8gVHggQnl0ZSBDb3VudHMgYW5kIFJ4IHN0YXR1cwotICovCi1zdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbyB7Ci0JdTE2IG1heF90eHFfbnVtOwotCXUxNiB0eF9jbWRfbGVuOwotCXUxNiB0eF9hbnRfbnVtOwotCXUxNiBtYXhfcnhxX3NpemU7Ci0JdTMyIHJ4X2J1Zl9zaXplOwotCXUzMiBtYXhfcGt0X3NpemU7Ci0JdTE2IG1heF9yeHFfbG9nOwotCXU4ICBtYXhfc3RhdGlvbnM7Ci0JdTggIGJjYXN0X3N0YV9pZDsKLQl2b2lkICpzaGFyZWRfdmlydDsKLQlkbWFfYWRkcl90IHNoYXJlZF9waHlzOwotfTsKLQogI2RlZmluZSBJV0xfUlhfSERSKHgpICgoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyICopKFwKIAkJICAgICAgIHgtPnUucnhfZnJhbWUuc3RhdHMucGF5bG9hZCArIFwKIAkJICAgICAgIHgtPnUucnhfZnJhbWUuc3RhdHMucGh5X2NvdW50KSkKQEAgLTU2NCw0MCArMjA0LDMwIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZDsKLWV4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitleHRlcm4gaW50IGl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncyk7Ci1leHRlcm4gdTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQsCitleHRlcm4gdTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCwKIAkJCSAgaW50IGlzX2FwLCB1OCBmbGFncyk7Ci1leHRlcm4gaW50IGl3bDM5NDVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfZWVwcm9tX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfcnhfcXVldWVfYWxsb2Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSk7CitleHRlcm4gaW50IGl3bDM5NDVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogZXh0ZXJuIGludCBpd2wzOTQ1X2NhbGNfZGJfZnJvbV9yYXRpbyhpbnQgc2lnX3JhdGlvKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9jYWxjX3NpZ19xdWFsKGludCByc3NpX2RibSwgaW50IG5vaXNlX2RibSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxLCBpbnQgY291bnQsIHUzMiBpZCk7CitleHRlcm4gaW50IGl3bDM5NDVfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwgaW50IGNvdW50LCB1MzIgaWQpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IGlkLCB1MTYgbGVuLAorZXh0ZXJuIHZvaWQgaXdsMzk0NV90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwKIAkJCSAgICBjb25zdCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGl3bDM5NDVfc2VuZF9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgKmNtZCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGl3bDM5NDVfc2VuZF9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgc3RydWN0IGl3bF9ob3N0X2NtZCAqY21kKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsaW50IGxlZnQpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgdTMyIGRlY3J5cHRfcmVzLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7Ci1leHRlcm4gY29uc3QgdTggaXdsMzk0NV9icm9hZGNhc3RfYWRkcltFVEhfQUxFTl07CiAKIC8qCiAgKiBDdXJyZW50bHkgdXNlZCBieSBpd2wtMzk0NS1ycy4uLiBsb29rIGF0IHJlc3RydWN0dXJpbmcgc28gdGhhdCBpdCBkb2Vzbid0CiAgKiBjYWxsIHRoaXMuLi4gdG9kby4uLiBmaXggdGhhdC4KICovCi1leHRlcm4gdTggaXdsMzk0NV9zeW5jX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKK2V4dGVybiB1OCBpd2wzOTQ1X3N5bmNfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCiAJCQkgICB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MTYsMzYgKzI0NiwzNyBAQAogICogaXdsMzk0NV9tYWNfICAgICA8LS0gbWFjODAyMTEgY2FsbGJhY2sKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHZvaWQgKnRmZCwKLQkJCQkJZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkJICAgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbiwKKwkJCQkJICAgIHU4IHJlc2V0LCB1OCBwYWQpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gdW5zaWduZWQgaW50IGl3bDM5NDVfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQkgICAgIGludCBzdGFfaWQsIGludCB0eF9pZCk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgczggcG93ZXIpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4Yik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKioKICAqIGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uIC0gRmluZCBzdGF0aW9uIGlkIGZvciBhIGdpdmVuIEJTU0lECkBAIC02NTUsMzAyICsyODYsMjYgQEAKICAqIG5vdCB5ZXQgYmVlbiBtZXJnZWQgaW50byBhIHNpbmdsZSBjb21tb24gbGF5ZXIgZm9yIG1hbmFnaW5nIHRoZQogICogc3RhdGlvbiB0YWJsZXMuCiAgKi8KLWV4dGVybiB1OCBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOworZXh0ZXJuIHU4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmJzc2lkKTsKIAotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKTsKIAogLyoKICAqIEZvcndhcmQgZGVjbGFyZSBpd2wtMzk0NS5jIGZ1bmN0aW9ucyBmb3IgaXdsLWJhc2UuYwogICovCi1leHRlcm4gX19sZTMyIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MoY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB1OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBzdGFfaWQsCitleHRlcm4gX19sZTMyIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfcmVnX3R4cG93ZXJfcGVyaW9kaWMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLAogCQkgdTE2IHR4X3JhdGUsIHU4IGZsYWdzKTsKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICppd2wzOTQ1X2dldF9jaGFubmVsX2luZm8oCisJY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCitleHRlcm4gaW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHJhdGUpOwogCi1lbnVtIHsKLQlNRUFTVVJFTUVOVF9SRUFEWSA9ICgxIDw8IDApLAotCU1FQVNVUkVNRU5UX0FDVElWRSA9ICgxIDw8IDEpLAotfTsKLQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9SRktJTEwKLXN0cnVjdCBpd2wzOTQ1X3ByaXY7Ci0KLXZvaWQgaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotdm9pZCBpd2wzOTQ1X3Jma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotaW50IGl3bDM5NDVfcmZraWxsX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7fQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfcmZraWxsX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLSNkZWZpbmUgSVdMX01BWF9OVU1fUVVFVUVTIElXTDM5X01BWF9OVU1fUVVFVUVTCi0KLXN0cnVjdCBpd2wzOTQ1X3ByaXYgewotCi0JLyogaWVlZSBkZXZpY2UgdXNlZCBieSBnZW5lcmljIGllZWUgcHJvY2Vzc2luZyBjb2RlICovCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICppZWVlX2NoYW5uZWxzOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqaWVlZV9yYXRlczsKLQlzdHJ1Y3QgaXdsXzM5NDVfY2ZnICpjZmc7IC8qIGRldmljZSBjb25maWd1cmF0aW9uICovCi0KLQkvKiB0ZW1wb3JhcnkgZnJhbWUgc3RvcmFnZSBsaXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBmcmVlX2ZyYW1lczsKLQlpbnQgZnJhbWVzX2NvdW50OwotCi0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBhbGxvY19yeGJfc2tiOwotCi0Jdm9pZCAoKnJ4X2hhbmRsZXJzW1JFUExZX01BWF0pKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4Yik7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQkvKiBzcGVjdHJ1bSBtZWFzdXJlbWVudCByZXBvcnQgY2FjaGluZyAqLwotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKLQl1OCBtZWFzdXJlbWVudF9zdGF0dXM7Ci0jZW5kaWYKLQkvKiB1Y29kZSBiZWFjb24gdGltZSAqLwotCXUzMiB1Y29kZV9iZWFjb25fdGltZTsKLQotCS8qIHdlIGFsbG9jYXRlIGFycmF5IG9mIGl3bDM5NDVfY2hhbm5lbF9pbmZvIGZvciBOSUMncyB2YWxpZCBjaGFubmVscy4KLQkgKiAgICBBY2Nlc3MgdmlhIGNoYW5uZWwgIyB1c2luZyBpbmRpcmVjdCBpbmRleCBhcnJheSAqLwotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hhbm5lbF9pbmZvOwkvKiBjaGFubmVsIGluZm8gYXJyYXkgKi8KLQl1OCBjaGFubmVsX2NvdW50OwkvKiAjIG9mIGNoYW5uZWxzICovCi0KLQkvKiBlYWNoIGNhbGlicmF0aW9uIGNoYW5uZWwgZ3JvdXAgaW4gdGhlIEVFUFJPTSBoYXMgYSBkZXJpdmVkCi0JICogY2xpcCBzZXR0aW5nIGZvciBlYWNoIHJhdGUuICovCi0JY29uc3Qgc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCBjbGlwX2dyb3Vwc1s1XTsKLQotCS8qIHRoZXJtYWwgY2FsaWJyYXRpb24gKi8KLQlzMzIgdGVtcGVyYXR1cmU7CS8qIGRlZ3JlZXMgS2VsdmluICovCi0JczMyIGxhc3RfdGVtcGVyYXR1cmU7Ci0KLQkvKiBTY2FuIHJlbGF0ZWQgdmFyaWFibGVzICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5famlmZmllczsKLQl1bnNpZ25lZCBsb25nIG5leHRfc2Nhbl9qaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydDsKLQl1bnNpZ25lZCBsb25nIHNjYW5fcGFzc19zdGFydDsKLQl1bnNpZ25lZCBsb25nIHNjYW5fc3RhcnRfdHNmOwotCWludCBzY2FuX2JhbmRzOwotCWludCBvbmVfZGlyZWN0X3NjYW47Ci0JdTggZGlyZWN0X3NzaWRfbGVuOwotCXU4IGRpcmVjdF9zc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCAqc2NhbjsKLQotCS8qIHNwaW5sb2NrICovCi0Jc3BpbmxvY2tfdCBsb2NrOwkvKiBwcm90ZWN0IGdlbmVyYWwgc2hhcmVkIGRhdGEgKi8KLQlzcGlubG9ja190IGhjbWRfbG9jazsJLyogcHJvdGVjdCBoY21kICovCi0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JLyogYmFzaWMgcGNpLW5ldHdvcmsgZHJpdmVyIHN0dWZmICovCi0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0KLQkvKiBwY2kgaGFyZHdhcmUgYWRkcmVzcyBzdXBwb3J0ICovCi0Jdm9pZCBfX2lvbWVtICpod19iYXNlOwotCi0JLyogdUNvZGUgaW1hZ2VzLCBzYXZlIHRvIHJlbG9hZCBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KLQl1MzIgdWNvZGVfdmVyOwkJCS8qIHVjb2RlIHZlcnNpb24sIGNvcHkgb2YKLQkJCQkJICAgaXdsMzk0NV91Y29kZS52ZXIgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9jb2RlOwkvKiBydW50aW1lIGluc3QgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9kYXRhOwkvKiBydW50aW1lIGRhdGEgb3JpZ2luYWwgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9kYXRhX2JhY2t1cDsJLyogcnVudGltZSBkYXRhIHNhdmUvcmVzdG9yZSAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2luaXQ7CS8qIGluaXRpYWxpemF0aW9uIGluc3QgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9pbml0X2RhdGE7CS8qIGluaXRpYWxpemF0aW9uIGRhdGEgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9ib290OwkvKiBib290c3RyYXAgaW5zdCAqLwotCi0KLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX3RpbWVfY21kIHJ4b25fdGltaW5nOwotCi0JLyogV2UgZGVjbGFyZSB0aGlzIGNvbnN0IHNvIGl0IGNhbiBvbmx5IGJlCi0JICogY2hhbmdlZCB2aWEgZXhwbGljaXQgY2FzdCB3aXRoaW4gdGhlCi0JICogcm91dGluZXMgdGhhdCBhY3R1YWxseSB1cGRhdGUgdGhlIHBoeXNpY2FsCi0JICogaGFyZHdhcmUgKi8KLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCBhY3RpdmVfcnhvbjsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCBzdGFnaW5nX3J4b247Ci0KLQlpbnQgZXJyb3JfcmVjb3ZlcmluZzsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCByZWNvdmVyeV9yeG9uOwotCi0JLyogMXN0IHJlc3BvbnNlcyBmcm9tIGluaXRpYWxpemUgYW5kIHJ1bnRpbWUgdUNvZGUgaW1hZ2VzLgotCSAqIDQ5NjUncyBpbml0aWFsaXplIGFsaXZlIHJlc3BvbnNlIGNvbnRhaW5zIHNvbWUgY2FsaWJyYXRpb24gZGF0YS4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZV9pbml0OwotCXN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZTsKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1JGS0lMTAotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUwotCXN0cnVjdCBpd2wzOTQ1X2xlZCBsZWRbSVdMX0xFRF9UUkdfTUFYXTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfYmxpbmtfdGltZTsKLQl1OCBsYXN0X2JsaW5rX3JhdGU7Ci0JdTggYWxsb3dfYmxpbmtpbmc7Ci0JdW5zaWduZWQgaW50IHJ4dHhwYWNrZXRzOwotCXU2NCBsZWRfdHB0OwotI2VuZGlmCi0KLQotCXUxNiBhY3RpdmVfcmF0ZTsKLQl1MTYgYWN0aXZlX3JhdGVfYmFzaWM7Ci0KLQl1MzIgc3RhX3N1cHBfcmF0ZXM7Ci0KLQl1OCBjYWxsX3Bvc3RfYXNzb2NfZnJvbV9iZWFjb247Ci0JLyogUmF0ZSBzY2FsaW5nIGRhdGEgKi8KLQlzOCBkYXRhX3JldHJ5X2xpbWl0OwotCXU4IHJldHJ5X3JhdGU7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X2NvbW1hbmRfcXVldWU7Ci0KLQlpbnQgYWN0aXZpdHlfdGltZXJfYWN0aXZlOwotCi0JLyogUnggYW5kIFR4IERNQSBwcm9jZXNzaW5nIHF1ZXVlcyAqLwotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIHJ4cTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSB0eHFbSVdMX01BWF9OVU1fUVVFVUVTXTsKLQotCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwotCi0JaW50IGxhc3RfcnhfcnNzaTsJLyogRnJvbSBSeCBwYWNrZXQgc3RhdGlzaXRpY3MgKi8KLQlpbnQgbGFzdF9yeF9ub2lzZTsJLyogRnJvbSBiZWFjb24gc3RhdGlzdGljcyAqLwotCi0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfbWdyIHBvd2VyX2RhdGE7Ci0KLQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3M7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3N0YXRpc3RpY3NfdGltZTsKLQotCS8qIGNvbnRleHQgaW5mb3JtYXRpb24gKi8KLQl1MTYgcmF0ZXNfbWFzazsKLQotCXUzMiBwb3dlcl9tb2RlOwotCXUzMiBhbnRlbm5hOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1MTYgcnRzX3RocmVzaG9sZDsKLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0KLQkvKnN0YXRpb24gdGFibGUgdmFyaWFibGVzICovCi0Jc3BpbmxvY2tfdCBzdGFfbG9jazsKLQlpbnQgbnVtX3N0YXRpb25zOwotCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgc3RhdGlvbnNbSVdMX1NUQVRJT05fQ09VTlRdOwotCi0JLyogSW5kaWNhdGlvbiBpZiBpZWVlODAyMTFfb3BzLT5vcGVuIGhhcyBiZWVuIGNhbGxlZCAqLwotCXU4IGlzX29wZW47Ci0KLQl1OCBtYWM4MDIxMV9yZWdpc3RlcmVkOwotCi0JLyogUngnZCBwYWNrZXQgdGltaW5nIGluZm9ybWF0aW9uICovCi0JdTMyIGxhc3RfYmVhY29uX3RpbWU7Ci0JdTY0IGxhc3RfdHNmOwotCi0JLyogZWVwcm9tICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tIGVlcHJvbTsKLQotCWVudW0gbmw4MDIxMV9pZnR5cGUgaXdfbW9kZTsKLQotCXN0cnVjdCBza19idWZmICppYnNzX2JlYWNvbjsKLQotCS8qIExhc3QgUngnZCBiZWFjb24gdGltZXN0YW1wICovCi0JdTMyIHRpbWVzdGFtcDA7Ci0JdTMyIHRpbWVzdGFtcDE7Ci0JdTE2IGJlYWNvbl9pbnQ7Ci0Jc3RydWN0IGl3bDM5NDVfZHJpdmVyX2h3X2luZm8gaHdfc2V0dGluZzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCi0JLyogQ3VycmVudCBhc3NvY2lhdGlvbiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29uZmlndXJlIHRoZQotCSAqIGhhcmR3YXJlICovCi0JdTE2IGFzc29jX2lkOwotCXUxNiBhc3NvY19jYXBhYmlsaXR5OwotCXU4IHBzX21vZGU7Ci0KLQlzdHJ1Y3QgaXdsMzk0NV9xb3NfaW5mbyBxb3NfZGF0YTsKLQotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXA7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlc3RhcnQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGNhbGlicmF0ZWRfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl9jb21wbGV0ZWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJ4X3JlcGxlbmlzaDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmZfa2lsbDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWJvcnRfc2NhbjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXBkYXRlX2xpbmtfbGVkOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhdXRoX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlcG9ydF93b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X3NjYW47Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl91cGRhdGU7Ci0KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxX3Rhc2tsZXQ7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfYWxpdmVfc3RhcnQ7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBhbGl2ZV9zdGFydDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGFjdGl2aXR5X3RpbWVyOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgdGhlcm1hbF9wZXJpb2RpYzsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGdhdGhlcl9zdGF0czsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY2hlY2s7Ci0KLSNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgotCXM4IHVzZXJfdHhwb3dlcl9saW1pdDsKLQlzOCBtYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0OwotCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCS8qIGRlYnVnZ2luZyBpbmZvICovCi0JdTMyIGZyYW1lY250X3RvX3VzOwotCWF0b21pY190IHJlc3RyaWN0X3JlZmNudDsKLSNlbmRpZgotfTsJCQkJLyppd2wzOTQ1X3ByaXYgKi8KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIChwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfdmFsaWQoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQotewotCWlmIChjaF9pbmZvID09IE5VTEwpCi0JCXJldHVybiAwOwotCXJldHVybiAoY2hfaW5mby0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9WQUxJRCkgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9yYWRhcihjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCi17Ci0JcmV0dXJuIChjaF9pbmZvLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGlzX2NoYW5uZWxfYV9iYW5kKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gY2hfaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGlzX2NoYW5uZWxfYmdfYmFuZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCi17Ci0JcmV0dXJuIGNoX2luZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9wYXNzaXZlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2gpCi17Ci0JcmV0dXJuICghKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0FDVElWRSkpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfaWJzcyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoKQotewotCXJldHVybiAoKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKSA/IDEgOiAwOwotfQotCi1leHRlcm4gY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICppd2wzOTQ1X2dldF9jaGFubmVsX2luZm8oCi0JY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCk7Ci0KLWV4dGVybiBpbnQgaXdsMzk0NV9yc19uZXh0X3JhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHJhdGUpOwotCi0vKiBSZXF1aXJlcyBmdWxsIGRlY2xhcmF0aW9uIG9mIGl3bDM5NDVfcHJpdiBiZWZvcmUgaW5jbHVkaW5nICovCi0jaW5jbHVkZSAiaXdsLTM5NDUtaW8uaCIKKy8qIFJlcXVpcmVzIGZ1bGwgZGVjbGFyYXRpb24gb2YgaXdsX3ByaXYgYmVmb3JlIGluY2x1ZGluZyAqLworI2luY2x1ZGUgIml3bC1pby5oIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAppbmRleCA2NjQ5ZjdiLi5hNzFhNDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODksNjQgKzg5LDQzIEBACiAjZGVmaW5lIExPTkdfU0xPVF9USU1FIDIwCiAKIC8qIFJTU0kgdG8gZEJtICovCi0jZGVmaW5lIElXTF9SU1NJX09GRlNFVAk0NAotCisjZGVmaW5lIElXTDQ5X1JTU0lfT0ZGU0VUCTQ0CiAKIAogLyogUENJIHJlZ2lzdGVycyAqLwogI2RlZmluZSBQQ0lfQ0ZHX1JFVFJZX1RJTUVPVVQJMHgwNDEKLSNkZWZpbmUgUENJX0NGR19QT1dFUl9TT1VSQ0UJMHgwQzgKLSNkZWZpbmUgUENJX1JFR19XVU04CQkweDBFOAotI2RlZmluZSBQQ0lfQ0ZHX0xJTktfQ1RSTAkweDBGMAogCiAvKiBQQ0kgcmVnaXN0ZXIgdmFsdWVzICovCiAjZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMFNfRU4JMHgwMQogI2RlZmluZSBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4JMHgwMgotI2RlZmluZSBQQ0lfQ0ZHX0NNRF9SRUdfSU5UX0RJU19NU0sJMHgwNAotI2RlZmluZSBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCAgICAgICAgICgweDgwMDAwMDAwKQotCiAKICNkZWZpbmUgSVdMX05VTV9TQ0FOX1JBVEVTICAgICAgICAgKDIpCiAKICNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUkVUUlkgIDE1CiAKLSNkZWZpbmUgUlhfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKLSNkZWZpbmUgUlhfUVVFVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKLSNkZWZpbmUgUlhfUVVFVUVfU0laRV9MT0cgICAgICAgICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgVEZEX1RYX0NNRF9TTE9UUyAyNTYKLSNkZWZpbmUgVEZEX0NNRF9TTE9UUyAzMgotCi0vKgotICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKLSAqLwotI2RlZmluZSBSWF9GUkVFX0JVRkZFUlMgNjQKLSNkZWZpbmUgUlhfTE9XX1dBVEVSTUFSSyA4Ci0KLS8qIFNpemUgb2Ygb25lIFJ4IGJ1ZmZlciBpbiBob3N0IERSQU0gKi8KLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzRLICg0ICogMTAyNCkKLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzhLICg4ICogMTAyNCkKIAogLyogU2l6ZXMgYW5kIGFkZHJlc3NlcyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgbWVtb3J5IChTUkFNKSBpbgogICogNDk2NSdzIGVtYmVkZGVkIHByb2Nlc3Nvci4gIERyaXZlciBhY2Nlc3MgaXMgdmlhIEhCVVNfVEFSR19NRU1fKiByZWdzLiAqLwotI2RlZmluZSBSVENfSU5TVF9MT1dFUl9CT1VORAkJCSgweDAwMDAwMCkKKyNkZWZpbmUgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQJCSgweDAwMDAwMCkKICNkZWZpbmUgSVdMNDlfUlRDX0lOU1RfVVBQRVJfQk9VTkQJCSgweDAxODAwMCkKIAotI2RlZmluZSBSVENfREFUQV9MT1dFUl9CT1VORAkJCSgweDgwMDAwMCkKKyNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfTE9XRVJfQk9VTkQJCSgweDgwMDAwMCkKICNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgwQTAwMCkKIAotI2RlZmluZSBJV0w0OV9SVENfSU5TVF9TSVpFICAoSVdMNDlfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfU0laRSAgKElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDQ5X1JUQ19JTlNUX1NJWkUgIChJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfU0laRSAgKElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDQ5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKQogCi0jZGVmaW5lIElXTF9NQVhfSU5TVF9TSVpFIElXTDQ5X1JUQ19JTlNUX1NJWkUKLSNkZWZpbmUgSVdMX01BWF9EQVRBX1NJWkUgSVdMNDlfUlRDX0RBVEFfU0laRQorI2RlZmluZSBJV0w0OV9NQVhfSU5TVF9TSVpFIElXTDQ5X1JUQ19JTlNUX1NJWkUKKyNkZWZpbmUgSVdMNDlfTUFYX0RBVEFfU0laRSBJV0w0OV9SVENfREFUQV9TSVpFCiAKIC8qIFNpemUgb2YgdUNvZGUgaW5zdHJ1Y3Rpb24gbWVtb3J5IGluIGJvb3RzdHJhcCBzdGF0ZSBtYWNoaW5lICovCi0jZGVmaW5lIElXTF9NQVhfQlNNX1NJWkUgQlNNX1NSQU1fU0laRQorI2RlZmluZSBJV0w0OV9NQVhfQlNNX1NJWkUgQlNNX1NSQU1fU0laRQogCiBzdGF0aWMgaW5saW5lIGludCBpd2w0OTY1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpCiB7Ci0JcmV0dXJuIChhZGRyID49IFJUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgorCXJldHVybiAoYWRkciA+PSBJV0w0OV9SVENfREFUQV9MT1dFUl9CT1VORCkgJiYKIAkgICAgICAgKGFkZHIgPCBJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwppbmRleCA1YTcyYmMwLi5iZDAxNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTc2LDcgKzc2LDcgQEAKIAl1MzIgcmVnOwogCXUzMiB2YWw7CiAKLQlJV0xfREVCVUdfSU5GTygiQmVnaW4gdmVyaWZ5IGJzbVxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJlZ2luIHZlcmlmeSBic21cbiIpOwogCiAJLyogdmVyaWZ5IEJTTSBTUkFNIGNvbnRlbnRzICovCiAJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcpOwpAQCAtODUsNyArODUsNyBAQAogCSAgICAgcmVnICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CiAJCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKKwkJCUlXTF9FUlIocHJpdiwgIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKIAkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAogCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKQEAgLTk0LDcgKzk0LDcgQEAKIAkJfQogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlNNIGJvb3RzdHJhcCB1Q29kZSBpbWFnZSBPS1xuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NCwxMiArMTQ0LDEyIEBACiAJdTMyIHJlZ19vZmZzZXQ7CiAJaW50IHJldDsKIAotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiBsb2FkIGJzbVxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJlZ2luIGxvYWQgYnNtXG4iKTsKIAogCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9SVDsKIAogCS8qIG1ha2Ugc3VyZSBib290c3RyYXAgcHJvZ3JhbSBpcyBubyBsYXJnZXIgdGhhbiBCU00ncyBTUkFNIHNpemUgKi8KLQlpZiAobGVuID4gSVdMX01BWF9CU01fU0laRSkKKwlpZiAobGVuID4gSVdMNDlfTUFYX0JTTV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgdGhlICJJbml0aWFsaXplIiB1Q29kZQpAQCAtMTg2LDcgKzE4Niw3IEBACiAKIAkvKiBUZWxsIEJTTSB0byBjb3B5IGZyb20gQlNNIFNSQU0gaW50byBpbnN0cnVjdGlvbiBTUkFNLCB3aGVuIGFza2VkICovCiAJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9TUkNfUkVHLCAweDApOwotCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRywgbGVuIC8gc2l6ZW9mKHUzMikpOwogCiAJLyogTG9hZCBib290c3RyYXAgY29kZSBpbnRvIGluc3RydWN0aW9uIFNSQU0gbm93LApAQCAtMjAxLDkgKzIwMSw5IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChpIDwgMTAwKQotCQlJV0xfREVCVUdfSU5GTygiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwogCWVsc2UgewotCQlJV0xfRVJST1IoIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjU3LDcgKzI1Nyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgcG9pbnRlcnMgYXJlIHNldC5cbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3OSw3ICsyNzksNyBAQAogCWlmIChwcml2LT5jYXJkX2FsaXZlX2luaXQuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTI4OSw3ICsyODksNyBAQAogCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMjk5LDExICsyOTksMTEgQEAKIAkvKiBTZW5kIHBvaW50ZXJzIHRvIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgaW1hZ2UgLi4uIGluaXQgY29kZSB3aWxsCiAJICogbG9hZCBhbmQgbGF1bmNoIHJ1bnRpbWUgdUNvZGUsIHdoaWNoIHdpbGwgc2VuZCB1cyBhbm90aGVyICJBbGl2ZSIKIAkgKiBub3RpZmljYXRpb24uICovCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJaWYgKGl3bDQ5NjVfc2V0X3Vjb2RlX3B0cnMocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdvbid0IGhhcHBlbjsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQ291bGRuJ3Qgc2V0IHVwIHVDb2RlIHBvaW50ZXJzLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAlyZXR1cm47CkBAIC0zNTQsNyArMzU0LDcgQEAKIAlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKIAlpZiAocmV0IDwgMCkgewotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM4MSwyNyArMzgxLDIwIEBACiBzdGF0aWMgdm9pZCBpd2w0OTY1X25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHZhbDsKIAl1MTYgcmFkaW9fY2ZnOwotCXUxNiBsaW5rOworCXUxNiBsY3RsOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmICgocHJpdi0+cmV2X2lkICYgMHg4MCkgPT0gMHg4MCAmJiAocHJpdi0+cmV2X2lkICYgMHg3ZikgPCA4KSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfUkVHX1dVTTgsICZ2YWwpOwotCQkvKiBFbmFibGUgTm8gU25vb3AgZmllbGQgKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfUkVHX1dVTTgsCi0JCQkJICAgICAgIHZhbCAmIH4oMSA8PCAxMSkpOwotCX0KKwlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ0ZHX0xJTktfQ1RSTCwgJmxpbmspOwotCi0JLyogTDEgaXMgZW5hYmxlZCBieSBCSU9TICovCi0JaWYgKChsaW5rICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSA9PSBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pCi0JCS8qIGRpc2FibGUgTDBTIGRpc2FibGVkIEwxQSBlbmFibGVkICovCisJLyogSFcgYnVnIFcvQSAtIG5lZ2xpZ2libGUgcG93ZXIgY29uc3VtcHRpb24gKi8KKwkvKiBMMS1BU1BNIGlzIGVuYWJsZWQgYnkgQklPUyAqLworCWlmICgobGN0bCAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0gUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKQorCQkvKiBMMS1BU1BNIGVuYWJsZWQ6IGRpc2FibGUgTDBTICAqLwogCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAllbHNlCi0JCS8qIEwwUyBlbmFibGVkIEwxQSBkaXNhYmxlZCAqLworCQkvKiBMMS1BU1BNIGRpc2FibGVkOiBlbmFibGUgTDBTICovCiAJCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CiAKIAlyYWRpb19jZmcgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1JBRElPX0NPTkZJRyk7CkBAIC00MzcsNyArNDMwLDcgQEAKIAkJCUNTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JSVdMX0RFQlVHX0lORk8oInN0b3AgbWFzdGVyXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAic3RvcCBtYXN0ZXJcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjMsOSArNTE2LDEwIEBACiAJCWNtZC5kaWZmX2dhaW5fYyA9IDA7CiAJCWlmIChpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCiAJCQkJIHNpemVvZihjbWQpLCAmY21kKSkKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkNvdWxkIG5vdCBzZW5kIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTURcbiIpOwogCQlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9BQ0NVTVVMQVRFOwotCQlJV0xfREVCVUdfQ0FMSUIoIlJ1biBjaGFpbl9ub2lzZV9jYWxpYnJhdGVcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIlJ1biBjaGFpbl9ub2lzZV9jYWxpYnJhdGVcbiIpOwogCX0KIH0KIApAQCAtNTU3LDcgKzU1MSw3IEBACiAJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPSAwOwogCQl9CiAJfQotCUlXTF9ERUJVR19DQUxJQigiZGVsdGFfZ2Fpbl9jb2RlczogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJkZWx0YV9nYWluX2NvZGVzOiBhICVkIGIgJWQgYyAlZFxuIiwKIAkJICAgICBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMF0sCiAJCSAgICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzFdLAogCQkgICAgIGRhdGEtPmRlbHRhX2dhaW5fY29kZVsyXSk7CkBAIC01NzUsNyArNTY5LDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01ELAogCQkJCSAgICAgIHNpemVvZihjbWQpLCAmY21kKTsKIAkJaWYgKHJldCkKLQkJCUlXTF9ERUJVR19DQUxJQigiZmFpbCBzZW5kaW5nIGNtZCAiCisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImZhaWwgc2VuZGluZyBjbWQgIgogCQkJCSAgICAgIlJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQgXG4iKTsKIAogCQkvKiBUT0RPIHdlIG1pZ2h0IHdhbnQgcmVjYWxjdWxhdGUKQEAgLTY2OCw3ICs2NjIsNyBAQAogCiAJdHhxLT5zY2hlZF9yZXRyeSA9IHNjZF9yZXRyeTsKIAotCUlXTF9ERUJVR19JTkZPKCIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJXMgJXMgUXVldWUgJWQgb24gQUMgJWRcbiIsCiAJCSAgICAgICBhY3RpdmUgPyAiQWN0aXZhdGUiIDogIkRlYWN0aXZhdGUiLAogCQkgICAgICAgc2NkX3JldHJ5ID8gIkJBIiA6ICJBQyIsIHR4cV9pZCwgdHhfZmlmb19pZCk7CiB9CkBAIC04MDQsOCArNzk4LDkgQEAKIAogCWlmICgocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID4gSVdMNDlfTlVNX1FVRVVFUykgfHwKIAkgICAgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKLQkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w0OV9OVU1fUVVFVUVTKTsKKwkJSVdMX0VSUihwcml2LAorCQkJImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAorCQkJSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w0OV9OVU1fUVVFVUVTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04MTMsNiArODA4LDcgQEAKIAlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg0OV9UQ1NSX0NITkxfTlVNOwogCXByaXYtPmh3X3BhcmFtcy5zY2RfYmNfdGJsc19zaXplID0KIAkJCUlXTDQ5X05VTV9RVUVVRVMgKiBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2NkX2JjX3RibCk7CisJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKTsKIAlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNDk2NV9TVEFUSU9OX0NPVU5UOwogCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w0OTY1X0JST0FEQ0FTVF9JRDsKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDQ5X1JUQ19EQVRBX1NJWkU7CkBAIC04MjAsNiArODE2LDggQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gQlNNX1NSQU1fU0laRTsKIAlwcml2LT5od19wYXJhbXMuZmF0X2NoYW5uZWwgPSBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7CiAKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOworCiAJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAyOwogCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gMjsKIAlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0EgfCBBTlRfQjsKQEAgLTkwMiw3ICs5MDAsNiBAQAogCSAgICBjaGFubmVsIDw9IENBTElCX0lXTF9UWF9BVFRFTl9HUjRfTENIKQogCQlyZXR1cm4gQ0FMSUJfQ0hfR1JPVVBfNDsKIAotCUlXTF9FUlJPUigiQ2FuJ3QgZmluZCB0eGF0dGVuIGdyb3VwIGZvciBjaGFubmVsICVkLlxuIiwgY2hhbm5lbCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC05NTYsNyArOTUzLDcgQEAKIAogCXMgPSBpd2w0OTY1X2dldF9zdWJfYmFuZChwcml2LCBjaGFubmVsKTsKIAlpZiAocyA+PSBFRVBST01fVFhfUE9XRVJfQkFORFMpIHsKLQkJSVdMX0VSUk9SKCJUeCBQb3dlciBjYW4gbm90IGZpbmQgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7CisJCUlXTF9FUlIocHJpdiwgIlR4IFBvd2VyIGNhbiBub3QgZmluZCBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtOTY0LDcgKzk2MSw3IEBACiAJY2hfaTIgPSBwcml2LT5jYWxpYl9pbmZvLT5iYW5kX2luZm9bc10uY2gyLmNoX251bTsKIAljaGFuX2luZm8tPmNoX251bSA9ICh1OCkgY2hhbm5lbDsKIAotCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFubmVsICVkIHN1YmJhbmQgJWQgZmFjdG9yeSBjYWwgY2ggJWQgJiAlZFxuIiwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbm5lbCAlZCBzdWJiYW5kICVkIGZhY3RvcnkgY2FsIGNoICVkICYgJWRcbiIsCiAJCQkgIGNoYW5uZWwsIHMsIGNoX2kxLCBjaF9pMik7CiAKIAlmb3IgKGMgPSAwOyBjIDwgRUVQUk9NX1RYX1BPV0VSX1RYX0NIQUlOUzsgYysrKSB7CkBAIC05OTQsMTkgKzk5MSwxOSBAQAogCQkJCQkJCSAgIG0xLT5wYV9kZXQsIGNoX2kyLAogCQkJCQkJCSAgIG0yLT5wYV9kZXQpOwogCi0JCQlJV0xfREVCVUdfVFhQT1dFUgotCQkJICAgICgiY2hhaW4gJWQgbWVhcyAlZCBBUDE9JWQgQVAyPSVkIEFQPSVkXG4iLCBjLCBtLAotCQkJICAgICBtMS0+YWN0dWFsX3BvdywgbTItPmFjdHVhbF9wb3csIG9tZWFzLT5hY3R1YWxfcG93KTsKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkIE5JMT0lZCBOSTI9JWQgTkk9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT5nYWluX2lkeCwgbTItPmdhaW5faWR4LCBvbWVhcy0+Z2Fpbl9pZHgpOwotCQkJSVdMX0RFQlVHX1RYUE9XRVIKLQkJCSAgICAoImNoYWluICVkIG1lYXMgJWQgUEExPSVkIFBBMj0lZCBQQT0lZFxuIiwgYywgbSwKLQkJCSAgICAgbTEtPnBhX2RldCwgbTItPnBhX2RldCwgb21lYXMtPnBhX2RldCk7Ci0JCQlJV0xfREVCVUdfVFhQT1dFUgotCQkJICAgICgiY2hhaW4gJWQgbWVhcyAlZCAgVDE9JWQgIFQyPSVkICBUPSVkXG4iLCBjLCBtLAotCQkJICAgICBtMS0+dGVtcGVyYXR1cmUsIG0yLT50ZW1wZXJhdHVyZSwKLQkJCSAgICAgb21lYXMtPnRlbXBlcmF0dXJlKTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgQVAxPSVkIEFQMj0lZCBBUD0lZFxuIiwgYywgbSwKKwkJCQltMS0+YWN0dWFsX3BvdywgbTItPmFjdHVhbF9wb3csIG9tZWFzLT5hY3R1YWxfcG93KTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgTkkxPSVkIE5JMj0lZCBOST0lZFxuIiwgYywgbSwKKwkJCQltMS0+Z2Fpbl9pZHgsIG0yLT5nYWluX2lkeCwgb21lYXMtPmdhaW5faWR4KTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgUEExPSVkIFBBMj0lZCBQQT0lZFxuIiwgYywgbSwKKwkJCQltMS0+cGFfZGV0LCBtMi0+cGFfZGV0LCBvbWVhcy0+cGFfZGV0KTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgIFQxPSVkICBUMj0lZCAgVD0lZFxuIiwgYywgbSwKKwkJCQltMS0+dGVtcGVyYXR1cmUsIG0yLT50ZW1wZXJhdHVyZSwKKwkJCQlvbWVhcy0+dGVtcGVyYXR1cmUpOwogCQl9CiAJfQogCkBAIC0xMzAzLDEyICsxMzAwLDEyIEBACiAJczMyIGZhY3RvcnlfYWN0dWFsX3B3clsyXTsKIAlzMzIgcG93ZXJfaW5kZXg7CiAKLQkvKiB1c2VyX3R4cG93ZXJfbGltaXQgaXMgaW4gZEJtLCBjb252ZXJ0IHRvIGhhbGYtZEJtIChoYWxmLWRCIHVuaXRzCisJLyogdHhfcG93ZXJfdXNlcl9sbXQgaXMgaW4gZEJtLCBjb252ZXJ0IHRvIGhhbGYtZEJtIChoYWxmLWRCIHVuaXRzCiAJICogICBhcmUgdXNlZCBmb3IgaW5kZXhpbmcgaW50byB0eHBvd2VyIHRhYmxlKSAqLwogCXVzZXJfdGFyZ2V0X3Bvd2VyID0gMiAqIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10OwogCiAJLyogR2V0IGN1cnJlbnQgKFJYT04pIGNoYW5uZWwsIGJhbmQsIHdpZHRoICovCi0JSVdMX0RFQlVHX1RYUE9XRVIoImNoYW4gJWQgYmFuZCAlZCBpc19mYXQgJWRcbiIsIGNoYW5uZWwsIGJhbmQsCisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW4gJWQgYmFuZCAlZCBpc19mYXQgJWRcbiIsIGNoYW5uZWwsIGJhbmQsCiAJCQkgIGlzX2ZhdCk7CiAKIAljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2hhbm5lbCk7CkBAIC0xMzE5LDEwICsxMzE2LDEzIEBACiAJLyogZ2V0IHR4YXR0ZW4gZ3JvdXAsIHVzZWQgdG8gc2VsZWN0IDEpIHRoZXJtYWwgdHhwb3dlciBhZGp1c3RtZW50CiAJICogICBhbmQgMikgbWltbyB0eHBvd2VyIGJhbGFuY2UgYmV0d2VlbiBUeCBjaGFpbnMuICovCiAJdHhhdHRlbl9ncnAgPSBpd2w0OTY1X2dldF90eF9hdHRlbl9ncnAoY2hhbm5lbCk7Ci0JaWYgKHR4YXR0ZW5fZ3JwIDwgMCkKKwlpZiAodHhhdHRlbl9ncnAgPCAwKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbid0IGZpbmQgdHhhdHRlbiBncm91cCBmb3IgY2hhbm5lbCAlZC5cbiIsCisJCQkgIGNoYW5uZWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlJV0xfREVCVUdfVFhQT1dFUigiY2hhbm5lbCAlZCBiZWxvbmdzIHRvIHR4YXR0ZW4gZ3JvdXAgJWRcbiIsCisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW5uZWwgJWQgYmVsb25ncyB0byB0eGF0dGVuIGdyb3VwICVkXG4iLAogCQkJICBjaGFubmVsLCB0eGF0dGVuX2dycCk7CiAKIAlpZiAoaXNfZmF0KSB7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCXZvbHRhZ2VfY29tcGVuc2F0aW9uID0KIAkgICAgaXdsNDk2NV9nZXRfdm9sdGFnZV9jb21wZW5zYXRpb24odm9sdGFnZSwgaW5pdF92b2x0YWdlKTsKIAotCUlXTF9ERUJVR19UWFBPV0VSKCJjdXJyIHZvbHQgJWQgZWVwcm9tIHZvbHQgJWQgdm9sdCBjb21wICVkXG4iLAorCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjdXJyIHZvbHQgJWQgZWVwcm9tIHZvbHQgJWQgdm9sdCBjb21wICVkXG4iLAogCQkJICBpbml0X3ZvbHRhZ2UsCiAJCQkgIHZvbHRhZ2UsIHZvbHRhZ2VfY29tcGVuc2F0aW9uKTsKIApAQCAtMTQwMywxMyArMTQwMywxMyBAQAogCQlmYWN0b3J5X2dhaW5faW5kZXhbY10gPSBtZWFzdXJlbWVudC0+Z2Fpbl9pZHg7CiAJCWZhY3RvcnlfYWN0dWFsX3B3cltjXSA9IG1lYXN1cmVtZW50LT5hY3R1YWxfcG93OwogCi0JCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFpbiA9ICVkXG4iLCBjKTsKLQkJSVdMX0RFQlVHX1RYUE9XRVIoImZjdHJ5IHRtcCAlZCwgIgorCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhaW4gPSAlZFxuIiwgYyk7CisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJmY3RyeSB0bXAgJWQsICIKIAkJCQkgICJjdXJyIHRtcCAlZCwgY29tcCAlZCBzdGVwc1xuIiwKIAkJCQkgIGZhY3RvcnlfdGVtcCwgY3VycmVudF90ZW1wLAogCQkJCSAgdGVtcGVyYXR1cmVfY29tcFtjXSk7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoImZjdHJ5IGlkeCAlZCwgZmN0cnkgcHdyICVkXG4iLAorCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiZmN0cnkgaWR4ICVkLCBmY3RyeSBwd3IgJWRcbiIsCiAJCQkJICBmYWN0b3J5X2dhaW5faW5kZXhbY10sCiAJCQkJICBmYWN0b3J5X2FjdHVhbF9wd3JbY10pOwogCX0KQEAgLTE0NDIsNyArMTQ0Miw3IEBACiAJCWlmICh0YXJnZXRfcG93ZXIgPiBwb3dlcl9saW1pdCkKIAkJCXRhcmdldF9wb3dlciA9IHBvd2VyX2xpbWl0OwogCi0JCUlXTF9ERUJVR19UWFBPV0VSKCJyYXRlICVkIHNhdCAlZCByZWcgJWQgdXNyICVkIHRndCAlZFxuIiwKKwkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgInJhdGUgJWQgc2F0ICVkIHJlZyAlZCB1c3IgJWQgdGd0ICVkXG4iLAogCQkJCSAgaSwgc2F0dXJhdGlvbl9wb3dlciAtIGJhY2tfb2ZmX3RhYmxlW2ldLAogCQkJCSAgY3VycmVudF9yZWd1bGF0b3J5LCB1c2VyX3RhcmdldF9wb3dlciwKIAkJCQkgIHRhcmdldF9wb3dlcik7CkBAIC0xNDY2LDcgKzE0NjYsNyBAQAogCQkJCQkgICAgdm9sdGFnZV9jb21wZW5zYXRpb24gKwogCQkJCQkgICAgYXR0ZW5fdmFsdWUpOwogCi0vKgkJCUlXTF9ERUJVR19UWFBPV0VSKCJjYWxjdWxhdGVkIHR4cG93ZXIgaW5kZXggJWRcbiIsCisvKgkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjYWxjdWxhdGVkIHR4cG93ZXIgaW5kZXggJWRcbiIsCiAJCQkJCQlwb3dlcl9pbmRleCk7ICovCiAKIAkJCWlmIChwb3dlcl9pbmRleCA8IGdldF9taW5fcG93ZXJfaW5kZXgoaSwgYmFuZCkpCkBAIC0xNDgzLDEyICsxNDgzLDEyIEBACiAKIAkJCS8qIHN0YXkgd2l0aGluIHRoZSB0YWJsZSEgKi8KIAkJCWlmIChwb3dlcl9pbmRleCA+IDEwNykgewotCQkJCUlXTF9XQVJOSU5HKCJ0eHBvd2VyIGluZGV4ICVkID4gMTA3XG4iLAorCQkJCUlXTF9XQVJOKHByaXYsICJ0eHBvd2VyIGluZGV4ICVkID4gMTA3XG4iLAogCQkJCQkgICAgcG93ZXJfaW5kZXgpOwogCQkJCXBvd2VyX2luZGV4ID0gMTA3OwogCQkJfQogCQkJaWYgKHBvd2VyX2luZGV4IDwgMCkgewotCQkJCUlXTF9XQVJOSU5HKCJ0eHBvd2VyIGluZGV4ICVkIDwgMFxuIiwKKwkJCQlJV0xfV0FSTihwcml2LCAidHhwb3dlciBpbmRleCAlZCA8IDBcbiIsCiAJCQkJCSAgICBwb3dlcl9pbmRleCk7CiAJCQkJcG93ZXJfaW5kZXggPSAwOwogCQkJfQpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAKIAkJCXR4X3Bvd2VyLnMuZHNwX3ByZWRpc19hdHRlbltjXSA9CiAJCQkJZ2Fpbl90YWJsZVtiYW5kXVtwb3dlcl9pbmRleF0uZHNwOwogCi0JCQlJV0xfREVCVUdfVFhQT1dFUigiY2hhaW4gJWQgbWltbyAlZCBpbmRleCAlZCAiCisJCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhaW4gJWQgbWltbyAlZCBpbmRleCAlZCAiCiAJCQkJCSAgImdhaW4gMHglMDJ4IGRzcCAlZFxuIiwKIAkJCQkJICBjLCBhdHRlbl92YWx1ZSwgcG93ZXJfaW5kZXgsCiAJCQkJCXR4X3Bvd2VyLnMucmFkaW9fdHhfZ2FpbltjXSwKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAJCS8qIElmIHRoaXMgZ2V0cyBoaXQgYSBsb3QsIHN3aXRjaCBpdCB0byBhIEJVRygpIGFuZCBjYXRjaAogCQkgKiB0aGUgc3RhY2sgdHJhY2UgdG8gZmluZCBvdXQgd2hvIGlzIGNhbGxpbmcgdGhpcyBkdXJpbmcKIAkJICogYSBzY2FuLiAqLwotCQlJV0xfV0FSTklORygiVFggUG93ZXIgcmVxdWVzdGVkIHdoaWxlIHNjYW5uaW5nIVxuIik7CisJCUlXTF9XQVJOKHByaXYsICJUWCBQb3dlciByZXF1ZXN0ZWQgd2hpbGUgc2Nhbm5pbmchXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC0xNTc0LDcgKzE1NzQsNyBAQAogCSAgICAgcnhvbjItPm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCiAJICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgogCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTYzMSw3ICsxNjMxLDcgQEAKIAlyYyA9IGl3bDQ5NjVfZmlsbF90eHBvd2VyX3RibChwcml2LCBiYW5kLCBjaGFubmVsLCBpc19mYXQsCiAJCQkJICAgICAgY3RybF9jaGFuX2hpZ2gsICZjbWQudHhfcG93ZXIpOwogCWlmIChyYykgewotCQlJV0xfREVCVUdfMTFIKCJlcnJvcjolZCAgZmlsbCB0eHBvd2VyX3RibFxuIiwgcmMpOworCQlJV0xfREVCVUdfMTFIKHByaXYsICJlcnJvcjolZCAgZmlsbCB0eHBvd2VyX3RibFxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0xNjk2LDEzICsxNjk2LDEzIEBACiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1RFTVBFUkFUVVJFLCAmcHJpdi0+c3RhdHVzKSAmJgogCQkocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLKSkgewotCQlJV0xfREVCVUdfVEVNUCgiUnVubmluZyBGQVQgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOworCQlJV0xfREVCVUdfVEVNUChwcml2LCAiUnVubmluZyBGQVQgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOwogCQlSMSA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IxWzFdKTsKIAkJUjIgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMlsxXSk7CiAJCVIzID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjNbMV0pOwogCQlSNCA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yNFsxXSk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX1RFTVAoIlJ1bm5pbmcgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOworCQlJV0xfREVCVUdfVEVNUChwcml2LCAiUnVubmluZyB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CiAJCVIxID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjFbMF0pOwogCQlSMiA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IyWzBdKTsKIAkJUjMgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yM1swXSk7CkBAIC0xNzIyLDEwICsxNzIyLDEwIEBACiAJCXZ0ID0gc2lnbl9leHRlbmQoCiAJCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwudGVtcGVyYXR1cmUpLCAyMyk7CiAKLQlJV0xfREVCVUdfVEVNUCgiQ2FsaWIgdmFsdWVzIFJbMS0zXTogJWQgJWQgJWQgUjQ6ICVkXG4iLCBSMSwgUjIsIFIzLCB2dCk7CisJSVdMX0RFQlVHX1RFTVAocHJpdiwgIkNhbGliIHZhbHVlcyBSWzEtM106ICVkICVkICVkIFI0OiAlZFxuIiwgUjEsIFIyLCBSMywgdnQpOwogCiAJaWYgKFIzID09IFIxKSB7Ci0JCUlXTF9FUlJPUigiQ2FsaWJyYXRpb24gY29uZmxpY3QgUjEgPT0gUjNcbiIpOworCQlJV0xfRVJSKHByaXYsICJDYWxpYnJhdGlvbiBjb25mbGljdCBSMSA9PSBSM1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE3MzUsNyArMTczNSw3IEBACiAJdGVtcGVyYXR1cmUgLz0gKFIzIC0gUjEpOwogCXRlbXBlcmF0dXJlID0gKHRlbXBlcmF0dXJlICogOTcpIC8gMTAwICsgVEVNUEVSQVRVUkVfQ0FMSUJfS0VMVklOX09GRlNFVDsKIAotCUlXTF9ERUJVR19URU1QKCJDYWxpYnJhdGVkIHRlbXBlcmF0dXJlOiAlZEssICVkQ1xuIiwKKwlJV0xfREVCVUdfVEVNUChwcml2LCAiQ2FsaWJyYXRlZCB0ZW1wZXJhdHVyZTogJWRLLCAlZENcbiIsCiAJCQl0ZW1wZXJhdHVyZSwgS0VMVklOX1RPX0NFTFNJVVModGVtcGVyYXR1cmUpKTsKIAogCXJldHVybiB0ZW1wZXJhdHVyZTsKQEAgLTE3NTgsNyArMTc1OCw3IEBACiAJaW50IHRlbXBfZGlmZjsKIAogCWlmICghdGVzdF9iaXQoU1RBVFVTX1NUQVRJU1RJQ1MsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19URU1QKCJUZW1wZXJhdHVyZSBub3QgdXBkYXRlZCAtLSBubyBzdGF0aXN0aWNzLlxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJUZW1wZXJhdHVyZSBub3QgdXBkYXRlZCAtLSBubyBzdGF0aXN0aWNzLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTc2NiwxOSArMTc2NiwxOSBAQAogCiAJLyogZ2V0IGFic29sdXRlIHZhbHVlICovCiAJaWYgKHRlbXBfZGlmZiA8IDApIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJHZXR0aW5nIGNvb2xlciwgZGVsdGEgJWQsIFxuIiwgdGVtcF9kaWZmKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJHZXR0aW5nIGNvb2xlciwgZGVsdGEgJWQsIFxuIiwgdGVtcF9kaWZmKTsKIAkJdGVtcF9kaWZmID0gLXRlbXBfZGlmZjsKIAl9IGVsc2UgaWYgKHRlbXBfZGlmZiA9PSAwKQotCQlJV0xfREVCVUdfUE9XRVIoIlNhbWUgdGVtcCwgXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTYW1lIHRlbXAsIFxuIik7CiAJZWxzZQotCQlJV0xfREVCVUdfUE9XRVIoIkdldHRpbmcgd2FybWVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgd2FybWVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOwogCiAJaWYgKHRlbXBfZGlmZiA8IElXTF9URU1QRVJBVFVSRV9USFJFU0hPTEQpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbm90IG5lZWRlZFxuIik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGhlcm1hbCB0eHBvd2VyIGNhbGliIG5vdCBuZWVkZWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfUE9XRVIoIlRoZXJtYWwgdHhwb3dlciBjYWxpYiBuZWVkZWRcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGhlcm1hbCB0eHBvd2VyIGNhbGliIG5lZWRlZFxuIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE3OTMsMTIgKzE3OTMsMTIgQEAKIAogCWlmIChwcml2LT50ZW1wZXJhdHVyZSAhPSB0ZW1wKSB7CiAJCWlmIChwcml2LT50ZW1wZXJhdHVyZSkKLQkJCUlXTF9ERUJVR19URU1QKCJUZW1wZXJhdHVyZSBjaGFuZ2VkICIKKwkJCUlXTF9ERUJVR19URU1QKHByaXYsICJUZW1wZXJhdHVyZSBjaGFuZ2VkICIKIAkJCQkgICAgICAgImZyb20gJWRDIHRvICVkQ1xuIiwKIAkJCQkgICAgICAgS0VMVklOX1RPX0NFTFNJVVMocHJpdi0+dGVtcGVyYXR1cmUpLAogCQkJCSAgICAgICBLRUxWSU5fVE9fQ0VMU0lVUyh0ZW1wKSk7CiAJCWVsc2UKLQkJCUlXTF9ERUJVR19URU1QKCJUZW1wZXJhdHVyZSAiCisJCQlJV0xfREVCVUdfVEVNUChwcml2LCAiVGVtcGVyYXR1cmUgIgogCQkJCSAgICAgICAiaW5pdGlhbGl6ZWQgdG8gJWRDXG4iLAogCQkJCSAgICAgICBLRUxWSU5fVE9fQ0VMU0lVUyh0ZW1wKSk7CiAJfQpAQCAtMTgzNyw3ICsxODM3LDggQEAKIAogCWlmICgoSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CiAJICAgIChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgPD0gdHhxX2lkKSkgewotCQlJV0xfV0FSTklORygicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCisJCUlXTF9XQVJOKHByaXYsCisJCQkicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCiAJCQl0eHFfaWQsIElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFLAogCQkJSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w0OV9OVU1fQU1QRFVfUVVFVUVTIC0gMSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTkwOCw3ICsxOTA5LDggQEAKIAogCWlmICgoSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CiAJICAgIChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgPD0gdHhxX2lkKSkgewotCQlJV0xfV0FSTklORygicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCisJCUlXTF9XQVJOKHByaXYsCisJCQkicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCiAJCQl0eHFfaWQsIElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFLAogCQkJSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w0OV9OVU1fQU1QRFVfUVVFVUVTIC0gMSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTk4Niw4ICsxOTg4LDggQEAKIAlhZGRzdGEtPmFkZF9pbW1lZGlhdGVfYmFfdGlkID0gY21kLT5hZGRfaW1tZWRpYXRlX2JhX3RpZDsKIAlhZGRzdGEtPnJlbW92ZV9pbW1lZGlhdGVfYmFfdGlkID0gY21kLT5yZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKIAlhZGRzdGEtPmFkZF9pbW1lZGlhdGVfYmFfc3NuID0gY21kLT5hZGRfaW1tZWRpYXRlX2JhX3NzbjsKLQlhZGRzdGEtPnJlc2VydmVkMSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7Ci0JYWRkc3RhLT5yZXNlcnZlZDIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApOworCWFkZHN0YS0+cmVzZXJ2ZWQxID0gY3B1X3RvX2xlMTYoMCk7CisJYWRkc3RhLT5yZXNlcnZlZDIgPSBjcHVfdG9fbGUzMigwKTsKIAogCXJldHVybiAodTE2KXNpemVvZihzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kKTsKIH0KQEAgLTIwMTMsNyArMjAxNSw3IEBACiAJaW50IGksIHNoLCBpZHg7CiAJdTE2IHNlcTsKIAlpZiAoYWdnLT53YWl0X2Zvcl9iYSkKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJnb3QgdHggcmVzcG9uc2Ugdy9vIGJsb2NrLWFja1xuIik7CisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOwogCiAJYWdnLT5mcmFtZV9jb3VudCA9IHR4X3Jlc3AtPmZyYW1lX2NvdW50OwogCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnRfaWR4OwpAQCAtMjAyNyw3ICsyMDI5LDcgQEAKIAkJaWR4ID0gc3RhcnRfaWR4OwogCiAJCS8qIEZJWE1FOiBjb2RlIHJlcGV0aXRpb24gKi8KLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LCBpZHgpOwogCiAJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHByaXYtPnR4cVt0eHFfaWRdLnR4YltpZHhdLnNrYlswXSk7CkBAIC0yMDM4LDkgKzIwNDAsOSBAQAogCQlpd2xfaHdyYXRlX3RvX3R4X2NvbnRyb2wocHJpdiwgcmF0ZV9uX2ZsYWdzLCBpbmZvKTsKIAkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiBlbmQgKi8KIAotCQlJV0xfREVCVUdfVFhfUkVQTFkoIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICIxIEZyYW1lIDB4JXggZmFpbHVyZSA6JWRcbiIsCiAJCQkJICAgIHN0YXR1cyAmIDB4ZmYsIHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWUpOwotCQlJV0xfREVCVUdfVFhfUkVQTFkoIlJhdGUgSW5mbyByYXRlX25fZmxhZ3M9JXhcbiIsIHJhdGVfbl9mbGFncyk7CisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKIAogCQlhZ2ctPndhaXRfZm9yX2JhID0gMDsKIAl9IGVsc2UgewpAQCAtMjA2MCwyMSArMjA2MiwyMSBAQAogCQkJCSAgICAgIEFHR19UWF9TVEFURV9BQk9SVF9NU0spKQogCQkJCWNvbnRpbnVlOwogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIHR4cV9pZD0lZCBpZHg9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIHR4cV9pZD0lZCBpZHg9JWRcbiIsCiAJCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIHR4cV9pZCwgaWR4KTsKIAogCQkJaGRyID0gaXdsX3R4X3F1ZXVlX2dldF9oZHIocHJpdiwgdHhxX2lkLCBpZHgpOwogCiAJCQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOwogCQkJaWYgKGlkeCAhPSAoU0VRX1RPX1NOKHNjKSAmIDB4ZmYpKSB7Ci0JCQkJSVdMX0VSUk9SKCJCVUdfT04gaWR4IGRvZXNuJ3QgbWF0Y2ggc2VxIGNvbnRyb2wiCi0JCQkJCSAgIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKLQkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCi0JCQkJCSAgaGRyLT5zZXFfY3RybCk7CisJCQkJSVdMX0VSUihwcml2LAorCQkJCQkiQlVHX09OIGlkeCBkb2Vzbid0IG1hdGNoIHNlcSBjb250cm9sIgorCQkJCQkiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAorCQkJCQlpZHgsIFNFUV9UT19TTihzYyksIGhkci0+c2VxX2N0cmwpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJBR0cgRnJhbWUgaT0lZCBpZHggJWQgc2VxPSVkXG4iLAorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJBR0cgRnJhbWUgaT0lZCBpZHggJWQgc2VxPSVkXG4iLAogCQkJCQkgICBpLCBpZHgsIFNFUV9UT19TTihzYykpOwogCiAJCQlzaCA9IGlkeCAtIHN0YXJ0OwpAQCAtMjA5MiwxMyArMjA5NCwxMyBAQAogCQkJCXNoID0gMDsKIAkJCX0KIAkJCWJpdG1hcCB8PSAxVUxMIDw8IHNoOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJzdGFydD0lZCBiaXRtYXA9MHglbGx4XG4iLAorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJzdGFydD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCQkgICBzdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOwogCQl9CiAKIAkJYWdnLT5iaXRtYXAgPSBiaXRtYXA7CiAJCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnQ7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lcyAlZCBzdGFydF9pZHg9JWQgYml0bWFwPTB4JWxseFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwKIAkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKIApAQCAtMjEyOSw3ICsyMTMxLDcgQEAKIAl1OCAqcWMgPSBOVUxMOwogCiAJaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCisJCUlXTF9FUlIocHJpdiwgIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCiAJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkXG4iLCB0eHFfaWQsCiAJCQkgIGluZGV4LCB0eHEtPnEubl9iZCwgdHhxLT5xLndyaXRlX3B0ciwKIAkJCSAgdHhxLT5xLnJlYWRfcHRyKTsKQEAgLTIxNDcsNyArMjE0OSw3IEBACiAKIAlzdGFfaWQgPSBpd2xfZ2V0X3JhX3N0YV9pZChwcml2LCBoZHIpOwogCWlmICh0eHEtPnNjaGVkX3JldHJ5ICYmIHVubGlrZWx5KHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkgewotCQlJV0xfRVJST1IoIlN0YXRpb24gbm90IGtub3duXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhdGlvbiBub3Qga25vd25cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMTY3LDcgKzIxNjksNyBAQAogCiAJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgewogCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gc2NkX3NzbiAiCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlJldHJ5IHNjaGVkdWxlciByZWNsYWltIHNjZF9zc24gIgogCQkJCQkgICAiJWQgaW5kZXggJWRcbiIsIHNjZF9zc24gLCBpbmRleCk7CiAJCQlmcmVlZCA9IGl3bF90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwogCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOwpAQCAtMjE5MCw3ICsyMTkyLDcgQEAKIAkJCQkJbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKSwKIAkJCQkJaW5mbyk7CiAKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJUWFEgJWQgc3RhdHVzICVzICgweCUwOHgpICIKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUWFEgJWQgc3RhdHVzICVzICgweCUwOHgpICIKIAkJCQkgICAicmF0ZV9uX2ZsYWdzIDB4JXggcmV0cmllcyAlZFxuIiwKIAkJCQkgICB0eHFfaWQsCiAJCQkJICAgaXdsX2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCkBAIC0yMjEwLDcgKzIyMTIsNyBAQAogCQlpd2xfdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCB0eHFfaWQpOwogCiAJaWYgKGl3bF9jaGVja19iaXRzKHN0YXR1cywgVFhfQUJPUlRfUkVRVUlSRURfTVNLKSkKLQkJSVdMX0VSUk9SKCJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9jYWxjX3Jzc2koc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMjIzOCwxMyArMjI0MCwxMyBAQAogCQlpZiAodmFsaWRfYW50ZW5uYWUgJiAoMSA8PCBpKSkKIAkJCW1heF9yc3NpID0gbWF4KG5jcGh5LT5yc3NpX2luZm9baSA8PCAxXSwgbWF4X3Jzc2kpOwogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCisJSVdMX0RFQlVHX1NUQVRTKHByaXYsICJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCiAJCW5jcGh5LT5yc3NpX2luZm9bMF0sIG5jcGh5LT5yc3NpX2luZm9bMl0sIG5jcGh5LT5yc3NpX2luZm9bNF0sCiAJCW1heF9yc3NpLCBhZ2MpOwogCiAJLyogZEJtID0gbWF4X3Jzc2kgZEIgLSBhZ2MgZEIgLSBjb25zdGFudC4KIAkgKiBIaWdoZXIgQUdDIChoaWdoZXIgcmFkaW8gZ2FpbikgbWVhbnMgbG93ZXIgc2lnbmFsLiAqLwotCXJldHVybiBtYXhfcnNzaSAtIGFnYyAtIElXTF9SU1NJX09GRlNFVDsKKwlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0w0OV9SU1NJX09GRlNFVDsKIH0KIAogCkBAIC0yMjg3LDYgKzIyODksOSBAQAogCS50eHFfc2V0X3NjaGVkID0gaXdsNDk2NV90eHFfc2V0X3NjaGVkLAogCS50eHFfYWdnX2VuYWJsZSA9IGl3bDQ5NjVfdHhxX2FnZ19lbmFibGUsCiAJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDQ5NjVfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNDk2NV9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNDk2NV9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5jYW5jZWxfZGVmZXJyZWRfd29yayA9IGl3bDQ5NjVfY2FuY2VsX2RlZmVycmVkX3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKaW5kZXggODJjMzg1OS4uMTVjYWM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY4LDEwICs2OCwxNiBAQAogI2lmbmRlZiBfX2l3bF81MDAwX2h3X2hfXwogI2RlZmluZSBfX2l3bF81MDAwX2h3X2hfXwogCisjZGVmaW5lIElXTDUwX1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCiAjZGVmaW5lIElXTDUwX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMjAwMDApCisKKyNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQJCSgweDgwMDAwMCkKICNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgwQzAwMCkKLSNkZWZpbmUgSVdMNTBfUlRDX0lOU1RfU0laRSAoSVdMNTBfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfU0laRSAoSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBSVENfREFUQV9MT1dFUl9CT1VORCkKKworI2RlZmluZSBJV0w1MF9SVENfSU5TVF9TSVpFIChJV0w1MF9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0w1MF9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfU0laRSAoSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKIC8qIEVFUFJPTSAqLwogI2RlZmluZSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUJCQkyMDQ4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggNjZkMDUzZC4uMDhjMTliZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDMsMTAgKzQzLDExIEBACiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKKyNpbmNsdWRlICJpd2wtNjAwMC1ody5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSV9NQVggMQotI2RlZmluZSBJV0w1MTUwX1VDT0RFX0FQSV9NQVggMQorI2RlZmluZSBJV0w1MTUwX1VDT0RFX0FQSV9NQVggMgogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01JTiAxCkBAIC04NCw3ICs4NSw3IEBACiAJCQkJICBDU1JfUkVTRVRfUkVHX0ZMQUdfTUFTVEVSX0RJU0FCTEVELCAxMDApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCUlXTF9ERUJVR19JTkZPKCJzdG9wIG1hc3RlclxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInN0b3AgbWFzdGVyXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA4LDcgKzEwOSw4IEBACiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCiAJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfSEFQX1dBS0VfTDFBKTsKIAotCWl3bF9zZXRfYml0KHByaXYsIENTUl9BTkFfUExMX0NGRywgQ1NSNTBfQU5BX1BMTF9DRkdfVkFMKTsKKwlpZiAocHJpdi0+Y2ZnLT5uZWVkX3BsbF9jZmcpCisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9BTkFfUExMX0NGRywgQ1NSNTBfQU5BX1BMTF9DRkdfVkFMKTsKIAogCS8qIHNldCAiaW5pdGlhbGl6YXRpb24gY29tcGxldGUiIGJpdCB0byBtb3ZlIGFkYXB0ZXIKIAkgKiBEMFUqIC0tPiBEMEEqIHN0YXRlICovCkBAIC0xMTgsNyArMTIwLDcgQEAKIAlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKIAlpZiAocmV0IDwgMCkgewotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTc2LDcgKzE3OCw4IEBACiAKIAkvKiBGSVhNRTogcHV0IGhlcmUgTDFBIC1MMFMgdy9hICovCiAKLQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CisJaWYgKHByaXYtPmNmZy0+bmVlZF9wbGxfY2ZnKQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CiAKIAkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCiAJICogRDBVKiAtLT4gRDBBKiBzdGF0ZSAqLwpAQCAtMTg2LDcgKzE4OSw3IEBACiAJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CiAJaWYgKHJldCA8IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMTYsMTggKzIxOSwxOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHJhZGlvX2NmZzsKLQl1MTYgbGluazsKKwl1MTYgbGN0bDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ0ZHX0xJTktfQ1RSTCwgJmxpbmspOworCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCS8qIEwxIGlzIGVuYWJsZWQgYnkgQklPUyAqLwotCWlmICgobGluayAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0gUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKQotCQkvKiBkaXNhYmxlIEwwUyBkaXNhYmxlZCBMMUEgZW5hYmxlZCAqLworCS8qIEhXIGJ1ZyBXL0EgKi8KKwkvKiBMMS1BU1BNIGlzIGVuYWJsZWQgYnkgQklPUyAqLworCWlmICgobGN0bCAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0gUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKQorCQkvKiBMMS1BUFNNIGVuYWJsZWQ6IGRpc2FibGUgTDBTICAqLwogCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAllbHNlCi0JCS8qIEwwUyBlbmFibGVkIEwxQSBkaXNhYmxlZCAqLworCQkvKiBMMS1BU1BNIGRpc2FibGVkOiBlbmFibGUgTDBTICovCiAJCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CiAKIAlyYWRpb19jZmcgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1JBRElPX0NPTkZJRyk7CkBAIC0yODksNyArMjkzLDcgQEAKIAkJb2Zmc2V0ID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV81MDAwX0xJTktfT1RIRVJTKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJpbGxlZ2FsIGluZGlyZWN0IHR5cGU6IDB4JVhcbiIsCisJCUlXTF9FUlIocHJpdiwgImlsbGVnYWwgaW5kaXJlY3QgdHlwZTogMHglWFxuIiwKIAkJYWRkcmVzcyAmIElORElSRUNUX1RZUEVfTVNLKTsKIAkJYnJlYWs7CiAJfQpAQCAtMzM4LDcgKzM0Miw3IEBACiAJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gfD0gKDEgPDwgMik7CiAJfQogCi0JSVdMX0RFQlVHX0NBTElCKCJEZWx0YSBnYWluczogQU5UX0IgPSAlZCAgQU5UX0MgPSAlZFxuIiwKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIkRlbHRhIGdhaW5zOiBBTlRfQiA9ICVkICBBTlRfQyA9ICVkXG4iLAogCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzFdLCBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMl0pOwogCiAJaWYgKCFkYXRhLT5yYWRpb193cml0ZSkgewpAQCAtMzg0LDEzICszODgsMTQgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01ELAogCQkJCQlzaXplb2YoY21kKSwgJmNtZCk7CiAJCWlmIChyZXQpCi0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBzZW5kIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTURcbiIpOworCQkJSVdMX0VSUihwcml2LAorCQkJCSJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKIAkJZGF0YS0+c3RhdGUgPSBJV0xfQ0hBSU5fTk9JU0VfQUNDVU1VTEFURTsKLQkJSVdMX0RFQlVHX0NBTElCKCJSdW4gY2hhaW5fbm9pc2VfY2FsaWJyYXRlXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJSdW4gY2hhaW5fbm9pc2VfY2FsaWJyYXRlXG4iKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKK3ZvaWQgaXdsNTAwMF9ydHNfdHhfY21kX2ZsYWcoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJX19sZTMyICp0eF9mbGFncykKIHsKIAlpZiAoKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHx8CkBAIC01MDcsNyArNTEyLDcgQEAKIAkJaW5kZXggPSBJV0xfQ0FMSUJfQkFTRV9CQU5EOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVua25vd24gY2FsaWJyYXRpb24gbm90aWZpY2F0aW9uICVkXG4iLAorCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGNhbGlicmF0aW9uIG5vdGlmaWNhdGlvbiAlZFxuIiwKIAkJCSAgaGRyLT5vcF9jb2RlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTUxNyw3ICs1MjIsNyBAQAogc3RhdGljIHZvaWQgaXdsNTAwMF9yeF9jYWxpYl9jb21wbGV0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0JSVdMX0RFQlVHX0lORk8oIkluaXQuIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlZCwgcmVzdGFydGluZyBmdy5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0LiBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQsIHJlc3RhcnRpbmcgZncuXG4iKTsKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwogfQogCkBAIC01ODAsNDAgKzU4NSw0MSBAQAogewogCWludCByZXQgPSAwOwogCi0JcmV0ID0gaXdsNTAwMF9sb2FkX3NlY3Rpb24ocHJpdiwgaW5zdF9pbWFnZSwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHByaXYsIGluc3RfaW1hZ2UsCisJCQkJICAgSVdMNTBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlJV0xfREVCVUdfSU5GTygiSU5TVCB1Q29kZSBzZWN0aW9uIGJlaW5nIGxvYWRlZC4uLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIklOU1QgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOwogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKIAkJCQkJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUsIDUgKiBIWik7CiAJaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb24gZHVlICIKIAkJCSJ0byBpbnRlcnJ1cHRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlpZiAoIXJldCkgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb25cbiIpOworCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uXG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCiAJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAwOwogCiAJcmV0ID0gaXdsNTAwMF9sb2FkX3NlY3Rpb24oCi0JCXByaXYsIGRhdGFfaW1hZ2UsIFJUQ19EQVRBX0xPV0VSX0JPVU5EKTsKKwkJcHJpdiwgZGF0YV9pbWFnZSwgSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlJV0xfREVCVUdfSU5GTygiREFUQSB1Q29kZSBzZWN0aW9uIGJlaW5nIGxvYWRlZC4uLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRBVEEgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOwogCiAJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAogCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOwogCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCiAJCQkidG8gaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgaWYgKCFyZXQpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgREFUQSB1Q29kZSBzZWN0aW9uXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIERBVEEgdUNvZGUgc2VjdGlvblxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0gZWxzZQogCQlyZXQgPSAwOwpAQCAtNjI5LDIwICs2MzUsMjAgQEAKIAogCS8qIGNoZWNrIHdoZXRoZXIgaW5pdCB1Y29kZSBzaG91bGQgYmUgbG9hZGVkLCBvciByYXRoZXIgcnVudGltZSB1Y29kZSAqLwogCWlmIChwcml2LT51Y29kZV9pbml0LmxlbiAmJiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9OT05FKSkgewotCQlJV0xfREVCVUdfSU5GTygiSW5pdCB1Y29kZSBmb3VuZC4gTG9hZGluZyBpbml0IHVjb2RlLi4uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXQgdWNvZGUgZm91bmQuIExvYWRpbmcgaW5pdCB1Y29kZS4uLlxuIik7CiAJCXJldCA9IGl3bDUwMDBfbG9hZF9naXZlbl91Y29kZShwcml2LAogCQkJJnByaXYtPnVjb2RlX2luaXQsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwogCQlpZiAoIXJldCkgewotCQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXQgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOwogCQkJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX0lOSVQ7CiAJCX0KIAl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiSW5pdCB1Y29kZSBub3QgZm91bmQsIG9yIGFscmVhZHkgbG9hZGVkLiAiCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIG5vdCBmb3VuZCwgb3IgYWxyZWFkeSBsb2FkZWQuICIKIAkJCSJMb2FkaW5nIHJ1bnRpbWUgdWNvZGUuLi5cbiIpOwogCQlyZXQgPSBpd2w1MDAwX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKIAkJCSZwcml2LT51Y29kZV9jb2RlLCAmcHJpdi0+dWNvZGVfZGF0YSk7CiAJCWlmICghcmV0KSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Y29kZSBsb2FkIGNvbXBsZXRlLlxuIik7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Y29kZSBsb2FkIGNvbXBsZXRlLlxuIik7CiAJCQlwcml2LT51Y29kZV90eXBlID0gVUNPREVfUlQ7CiAJCX0KIAl9CkBAIC02NTgsNyArNjY0LDcgQEAKIAlpZiAocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC02NjgsMTQgKzY3NCwxNSBAQAogCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAogCWl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hbGl2ZV9ub3RpZnkocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfV0FSTklORygiQ291bGQgbm90IGNvbXBsZXRlIEFMSVZFIHRyYW5zaXRpb246ICVkXG4iLCByZXQpOworCQlJV0xfV0FSTihwcml2LAorCQkJIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNzEwLDcgKzcxNyw3IEBACiAKIAl0eHEtPnNjaGVkX3JldHJ5ID0gc2NkX3JldHJ5OwogCi0JSVdMX0RFQlVHX0lORk8oIiVzICVzIFF1ZXVlICVkIG9uIEFDICVkXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKIAkJICAgICAgIGFjdGl2ZSA/ICJBY3RpdmF0ZSIgOiAiRGVhY3RpdmF0ZSIsCiAJCSAgICAgICBzY2RfcmV0cnkgPyAiQkEiIDogIkFDIiwgdHhxX2lkLCB0eF9maWZvX2lkKTsKIH0KQEAgLTgyNCw4ICs4MzEsOSBAQAogewogCWlmICgocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID4gSVdMNTBfTlVNX1FVRVVFUykgfHwKIAkgICAgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKLQkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w1MF9OVU1fUVVFVUVTKTsKKwkJSVdMX0VSUihwcml2LAorCQkJImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAorCQkJSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w1MF9OVU1fUVVFVUVTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04MzMsNjMgKzg0MSw0NyBAQAogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CiAJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUgPQogCQkJSVdMNTBfTlVNX1FVRVVFUyAqIHNpemVvZihzdHJ1Y3QgaXdsNTAwMF9zY2RfYmNfdGJsKTsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w1MDAwX1NUQVRJT05fQ09VTlQ7CiAJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDUwMDBfQlJPQURDQVNUX0lEOwotCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNTBfUlRDX0RBVEFfU0laRTsKLQlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTDUwX1JUQ19JTlNUX1NJWkU7CisKKwlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDAwOgorCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzZ4NTA6CisJCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNjBfUlRDX0RBVEFfU0laRTsKKwkJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w2MF9SVENfSU5TVF9TSVpFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDUwX1JUQ19EQVRBX1NJWkU7CisJCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNTBfUlRDX0lOU1RfU0laRTsKKwl9CisKIAlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKIAlwcml2LT5od19wYXJhbXMuZmF0X2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKIAkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOworCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CisKIAlwcml2LT5od19wYXJhbXMuc2VucyA9ICZpd2w1MDAwX3NlbnNpdGl2aXR5OwogCi0Jc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTEwMDoKLQkJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAxOwotCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDI7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQjsKLQkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IEFOVF9BQjsKLQkJYnJlYWs7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTE1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAxOwotCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDI7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQTsKLQkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IEFOVF9BQjsKLQkJYnJlYWs7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzUwOgotCQlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IDM7Ci0JCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gMzsKLQkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IEFOVF9BQkM7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUJDOwotCQlicmVhazsKLQl9CisJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfdHhfYW50KTsKKwlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IG51bV9vZl9hbnQocHJpdi0+Y2ZnLT52YWxpZF9yeF9hbnQpOworCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBwcml2LT5jZmctPnZhbGlkX3R4X2FudDsKKwlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF9yeF9hbnQ7CiAKIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MTAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJLyogNVgwMCBhbmQgNTM1MCB3YW50cyBpbiBDZWxzaXVzICovCi0JCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOwotCQlicmVhazsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgogCQkvKiA1MTUwIHdhbnRzIGluIEtlbHZpbiAqLwogCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPQogCQkJCWl3bDUxNTBfZ2V0X2N0X3RocmVzaG9sZChwcml2KTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogYWxsIG90aGVycyB3YW50IENlbHNpdXMgKi8KKwkJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfdGhyZXNob2xkID0gQ1RfS0lMTF9USFJFU0hPTEQ7CisJCWJyZWFrOwogCX0KIAogCS8qIFNldCBpbml0aWFsIGNhbGlicmF0aW9uIHNldCAqLwogCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzUwOgotCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQotCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAotCQkJQklUKElXTF9DQUxJQl9MTykJCXwKLQkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAotCQkJQklUKElXTF9DQUxJQl9UWF9JUV9QRVJEKQl8Ci0JCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7Ci0JCWJyZWFrOwogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxNTA6CiAJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyA9CiAJCQlCSVQoSVdMX0NBTElCX0RDKQkJfApAQCAtODk4LDYgKzg5MCwxNCBAQAogCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOwogCiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyA9CisJCQlCSVQoSVdMX0NBTElCX1hUQUwpCQl8CisJCQlCSVQoSVdMX0NBTElCX0xPKQkJfAorCQkJQklUKElXTF9DQUxJQl9UWF9JUSkgCQl8CisJCQlCSVQoSVdMX0NBTElCX1RYX0lRX1BFUkQpCXwKKwkJCUJJVChJV0xfQ0FMSUJfQkFTRV9CQU5EKTsKKwkJYnJlYWs7CiAJfQogCiAKQEAgLTEwMTEsNyArMTAxMSw4IEBACiAKIAlpZiAoKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFID4gdHhxX2lkKSB8fAogCSAgICAoSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w1MF9OVU1fQU1QRFVfUVVFVUVTIDw9IHR4cV9pZCkpIHsKLQkJSVdMX1dBUk5JTkcoInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAorCQlJV0xfV0FSTihwcml2LAorCQkJInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAogCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKIAkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwNzYsNyArMTA3Nyw4IEBACiAKIAlpZiAoKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFID4gdHhxX2lkKSB8fAogCSAgICAoSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w1MF9OVU1fQU1QRFVfUVVFVUVTIDw9IHR4cV9pZCkpIHsKLQkJSVdMX1dBUk5JTkcoInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAorCQlJV0xfV0FSTihwcml2LAorCQkJInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAogCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKIAkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDQsNyArMTEwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCit1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCiB7CiAJdTE2IHNpemUgPSAodTE2KXNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpOwogCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOwpAQCAtMTE0Miw3ICsxMTQ0LDcgQEAKIAl1MTYgc2VxOwogCiAJaWYgKGFnZy0+d2FpdF9mb3JfYmEpCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOworCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKIAogCWFnZy0+ZnJhbWVfY291bnQgPSB0eF9yZXNwLT5mcmFtZV9jb3VudDsKIAlhZ2ctPnN0YXJ0X2lkeCA9IHN0YXJ0X2lkeDsKQEAgLTExNTYsNyArMTE1OCw3IEBACiAJCWlkeCA9IHN0YXJ0X2lkeDsKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uICovCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKIAogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pOwpAQCAtMTE2OCw5ICsxMTcwLDkgQEAKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0xMTkwLDIxICsxMTkyLDIyIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAorCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKKwkJCQkJIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKIAkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCiAJCQkJCSAgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0xMjIyLDEzICsxMjI1LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0xMjU0LDcgKzEyNTcsNyBAQAogCWludCBmcmVlZDsKIAogCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCiAJCQkgIHR4cS0+cS5yZWFkX3B0cik7CkBAIC0xMjgxLDcgKzEyODQsNyBAQAogCiAJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgewogCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gIgorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSAiCiAJCQkJCSJzY2Rfc3NuPSVkIGlkeD0lZCB0eHE9JWQgc3dxPSVkXG4iLAogCQkJCQlzY2Rfc3NuICwgaW5kZXgsIHR4cV9pZCwgdHhxLT5zd3FfaWQpOwogCkBAIC0xMzA4LDcgKzEzMTEsNyBAQAogCQkJCQlsZTMyX3RvX2NwdSh0eF9yZXNwLT5yYXRlX25fZmxhZ3MpLAogCQkJCQlpbmZvKTsKIAotCQlJV0xfREVCVUdfVFhfUkVQTFkoIlRYUSAlZCBzdGF0dXMgJXMgKDB4JTA4eCkgcmF0ZV9uX2ZsYWdzICIKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUWFEgJWQgc3RhdHVzICVzICgweCUwOHgpIHJhdGVfbl9mbGFncyAiCiAJCQkJICAgIjB4JXggcmV0cmllcyAlZFxuIiwKIAkJCQkgICB0eHFfaWQsCiAJCQkJICAgaXdsX2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCkBAIC0xMzI4LDExICsxMzMxLDExIEBACiAJCWl3bF90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CiAKIAlpZiAoaXdsX2NoZWNrX2JpdHMoc3RhdHVzLCBUWF9BQk9SVF9SRVFVSVJFRF9NU0spKQotCQlJV0xfRVJST1IoIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOworCQlJV0xfRVJSKHByaXYsICJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKIH0KIAogLyogQ3VycmVudGx5IDUwMDAgaXMgdGhlIHN1cGVyc2V0IG9mIGV2ZXJ5dGhpbmcgKi8KLXN0YXRpYyB1MTYgaXdsNTAwMF9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbikKK3UxNiBpd2w1MDAwX2dldF9oY21kX3NpemUodTggY21kX2lkLCB1MTYgbGVuKQogewogCXJldHVybiBsZW47CiB9CkBAIC0xMzU2LDcgKzEzNTksNyBAQAogCiBzdGF0aWMgaW50IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKLQlyZXR1cm4gKGFkZHIgPj0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCisJcmV0dXJuIChhZGRyID49IElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgogCQkoYWRkciA8IElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIApAQCAtMTM3OSw3ICsxMzgyLDcgQEAKIAkgICAgKHJ4b24xLT5hY3F1aXNpdGlvbl9kYXRhID09IHJ4b24yLT5hY3F1aXNpdGlvbl9kYXRhKSAmJgogCSAgICAocnhvbjEtPnJ4X2NoYWluID09IHJ4b24yLT5yeF9jaGFpbikgJiYKIAkgICAgKHJ4b24xLT5vZmRtX2Jhc2ljX3JhdGVzID09IHJ4b24yLT5vZmRtX2Jhc2ljX3JhdGVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiVXNpbmcgY3VycmVudCBSWE9OX0FTU09DLiAgTm90IHJlc2VuZGluZy5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVXNpbmcgY3VycmVudCBSWE9OX0FTU09DLiAgTm90IHJlc2VuZGluZy5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0MDksMTIgKzE0MTIsMTkgQEAKIHN0YXRpYyBpbnQgIGl3bDUwMDBfc2VuZF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDUwMDBfdHhfcG93ZXJfZGJtX2NtZCB0eF9wb3dlcl9jbWQ7CisJdTggdHhfYW50X2NmZ19jbWQ7CiAKIAkvKiBoYWxmIGRCbSBuZWVkIHRvIG11bHRpcGx5ICovCiAJdHhfcG93ZXJfY21kLmdsb2JhbF9sbXQgPSAoczgpKDIgKiBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CiAJdHhfcG93ZXJfY21kLmZsYWdzID0gSVdMNTBfVFhfUE9XRVJfTk9fQ0xPU0VEOwogCXR4X3Bvd2VyX2NtZC5zcnZfY2hhbl9sbXQgPSBJV0w1MF9UWF9QT1dFUl9BVVRPOwotCXJldHVybiAgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9UWF9QT1dFUl9EQk1fQ01ELAorCisJaWYgKElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSA9PSAxKQorCQl0eF9hbnRfY2ZnX2NtZCA9IFJFUExZX1RYX1BPV0VSX0RCTV9DTURfVjE7CisJZWxzZQorCQl0eF9hbnRfY2ZnX2NtZCA9IFJFUExZX1RYX1BPV0VSX0RCTV9DTUQ7CisKKwlyZXR1cm4gIGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgdHhfYW50X2NmZ19jbWQsCiAJCQkJICAgICAgIHNpemVvZih0eF9wb3dlcl9jbWQpLCAmdHhfcG93ZXJfY21kLAogCQkJCSAgICAgICBOVUxMKTsKIH0KQEAgLTE0MjYsNyArMTQzNiw3IEBACiB9CiAKIC8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwotc3RhdGljIGludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitpbnQgaXdsNTAwMF9jYWxjX3Jzc2koc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnJ4X3Jlc3ApCiB7CiAJLyogZGF0YSBmcm9tIFBIWS9EU1AgcmVnYXJkaW5nIHNpZ25hbCBzdHJlbmd0aCwgZXRjLiwKQEAgLTE0NTUsMTkgKzE0NjUsMTkgQEAKIAltYXhfcnNzaSA9IG1heF90KHUzMiwgcnNzaV9hLCByc3NpX2IpOwogCW1heF9yc3NpID0gbWF4X3QodTMyLCBtYXhfcnNzaSwgcnNzaV9jKTsKIAotCUlXTF9ERUJVR19TVEFUUygiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAogCQlyc3NpX2EsIHJzc2lfYiwgcnNzaV9jLCBtYXhfcnNzaSwgYWdjKTsKIAogCS8qIGRCbSA9IG1heF9yc3NpIGRCIC0gYWdjIGRCIC0gY29uc3RhbnQuCiAJICogSGlnaGVyIEFHQyAoaGlnaGVyIHJhZGlvIGdhaW4pIG1lYW5zIGxvd2VyIHNpZ25hbC4gKi8KLQlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcmV0dXJuIG1heF9yc3NpIC0gYWdjIC0gSVdMNDlfUlNTSV9PRkZTRVQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZCA9IHsKK3N0cnVjdCBpd2xfaGNtZF9vcHMgaXdsNTAwMF9oY21kID0gewogCS5yeG9uX2Fzc29jID0gaXdsNTAwMF9zZW5kX3J4b25fYXNzb2MsCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w1MDAwX2hjbWRfdXRpbHMgPSB7CitzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlscyA9IHsKIAkuZ2V0X2hjbWRfc2l6ZSA9IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSwKIAkuYnVpbGRfYWRkc3RhX2hjbWQgPSBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kLAogCS5nYWluX2NvbXB1dGF0aW9uID0gaXdsNTAwMF9nYWluX2NvbXB1dGF0aW9uLApAQCAtMTQ3NiwxMyArMTQ4NiwxNiBAQAogCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNTAwMF9saWIgPSB7CitzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNTAwMF9saWIgPSB7CiAJLnNldF9od19wYXJhbXMgPSBpd2w1MDAwX2h3X3NldF9od19wYXJhbXMsCiAJLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKIAkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibCwKIAkudHhxX3NldF9zY2hlZCA9IGl3bDUwMDBfdHhxX3NldF9zY2hlZCwKIAkudHhxX2FnZ19lbmFibGUgPSBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlLAogCS50eHFfYWdnX2Rpc2FibGUgPSBpd2w1MDAwX3R4cV9hZ2dfZGlzYWJsZSwKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKKwkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bDUwMDBfcnhfaGFuZGxlcl9zZXR1cCwKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bDUwMDBfc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKQEAgLTE1MTcsMTMgKzE1MzAsMTMgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0geworc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CiAJLmxpYiA9ICZpd2w1MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCiAJLnV0aWxzID0gJml3bDUwMDBfaGNtZF91dGlscywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsNTBfbW9kX3BhcmFtcyA9IHsKK3N0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zID0gewogCS5udW1fb2ZfcXVldWVzID0gSVdMNTBfTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTDUwX05VTV9BTVBEVV9RVUVVRVMsCiAJLmFtc2R1X3NpemVfOEsgPSAxLApAQCAtMTU0Myw2ICsxNTU2LDkgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKIAkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQUJDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUJDLAorCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ19jZmcgPSB7CkBAIC0xNTU2LDYgKzE1NzIsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2FiZ19jZmcgPSB7CkBAIC0xNTY5LDYgKzE1ODgsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2Fnbl9jZmcgPSB7CkBAIC0xNTgyLDYgKzE2MDQsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzUwX2Fnbl9jZmcgPSB7CkBAIC0xNTk1LDYgKzE2MjAsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTA1MF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmcgPSB7CkBAIC0xNjA4LDYgKzE2MzYsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTA1MF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBNT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9NT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWNvcmUuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCmluZGV4IDZmNDYzNTUuLjkwMTg1NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTgsNDcgKzU4LDI0IEBACiAgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9faXdsXzM5NDVfZGV2X2hfXwotI2RlZmluZSBfX2l3bF8zOTQ1X2Rldl9oX18KLQotI2RlZmluZSBJV0xfUENJX0RFVklDRShkZXYsIHN1YmRldiwgY2ZnKSBcCi0JLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsICAuZGV2aWNlID0gKGRldiksIFwKLQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IChzdWJkZXYpLCBcCi0JLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSYoY2ZnKQotCi0jZGVmaW5lIElXTF9TS1VfRyAgICAgICAweDEKLSNkZWZpbmUgSVdMX1NLVV9BICAgICAgIDB4MgotCi0vKioKLSAqIHN0cnVjdCBpd2xfMzk0NV9jZmcKLSAqIEBmd19uYW1lX3ByZTogRmlybXdhcmUgZmlsZW5hbWUgcHJlZml4LiBUaGUgYXBpIHZlcnNpb24gYW5kIGV4dGVuc2lvbgotICogCSgudWNvZGUpIHdpbGwgYmUgYWRkZWQgdG8gZmlsZW5hbWUgYmVmb3JlIGxvYWRpbmcgZnJvbSBkaXNrLiBUaGUKLSAqIAlmaWxlbmFtZSBpcyBjb25zdHJ1Y3RlZCBhcyBmd19uYW1lX3ByZTxhcGk+LnVjb2RlLgotICogQHVjb2RlX2FwaV9tYXg6IEhpZ2hlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqIEB1Y29kZV9hcGlfbWluOiBMb3dlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqCi0gKiBXZSBlbmFibGUgdGhlIGRyaXZlciB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdydCBBUEkgdmVyc2lvbi4gVGhlCi0gKiBkcml2ZXIgc3BlY2lmaWVzIHdoaWNoIEFQSXMgaXQgc3VwcG9ydHMgKHdpdGggQHVjb2RlX2FwaV9tYXggYmVpbmcgdGhlCi0gKiBoaWdoZXN0IGFuZCBAdWNvZGVfYXBpX21pbiB0aGUgbG93ZXN0KS4gRmlybXdhcmUgd2lsbCBvbmx5IGJlIGxvYWRlZCBpZgotICogaXQgaGFzIGEgc3VwcG9ydGVkIEFQSSB2ZXJzaW9uLiBUaGUgZmlybXdhcmUncyBBUEkgdmVyc2lvbiB3aWxsIGJlCi0gKiBzdG9yZWQgaW4gQGl3bF9wcml2LCBlbmFibGluZyB0aGUgZHJpdmVyIHRvIG1ha2UgcnVudGltZSBjaGFuZ2VzIGJhc2VkCi0gKiBvbiBmaXJtd2FyZSB2ZXJzaW9uIHVzZWQuCi0gKgotICogRm9yIGV4YW1wbGUsCi0gKiBpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID49IDIpIHsKLSAqIAlEcml2ZXIgaW50ZXJhY3RzIHdpdGggRmlybXdhcmUgQVBJIHZlcnNpb24gPj0gMi4KLSAqIH0gZWxzZSB7Ci0gKiAJRHJpdmVyIGludGVyYWN0cyB3aXRoIEZpcm13YXJlIEFQSSB2ZXJzaW9uIDEuCi0gKiB9CisvKgorICogUGxlYXNlIHVzZSB0aGlzIGZpbGUgKGl3bC02MDAwLWh3LmgpIG9ubHkgZm9yIGhhcmR3YXJlLXJlbGF0ZWQgZGVmaW5pdGlvbnMuCisgKiBVc2UgaXdsLTUwMDAtY29tbWFuZHMuaCBmb3IgdUNvZGUgQVBJIGRlZmluaXRpb25zLgogICovCi1zdHJ1Y3QgaXdsXzM5NDVfY2ZnIHsKLQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IGNoYXIgKmZ3X25hbWVfcHJlOwotCWNvbnN0IHVuc2lnbmVkIGludCB1Y29kZV9hcGlfbWF4OwotCWNvbnN0IHVuc2lnbmVkIGludCB1Y29kZV9hcGlfbWluOwotCXVuc2lnbmVkIGludCBza3U7Ci19OwogCi0jZW5kaWYgLyogX19pd2xfZGV2X2hfXyAqLworI2lmbmRlZiBfX2l3bF82MDAwX2h3X2hfXworI2RlZmluZSBfX2l3bF82MDAwX2h3X2hfXworCisjZGVmaW5lIElXTDYwX1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCisjZGVmaW5lIElXTDYwX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwNDAwMDApCisjZGVmaW5lIElXTDYwX1JUQ19EQVRBX0xPV0VSX0JPVU5ECQkoMHg4MDAwMDApCisjZGVmaW5lIElXTDYwX1JUQ19EQVRBX1VQUEVSX0JPVU5ECQkoMHg4MTQwMDApCisjZGVmaW5lIElXTDYwX1JUQ19JTlNUX1NJWkUgXAorCShJV0w2MF9SVENfSU5TVF9VUFBFUl9CT1VORCAtIElXTDYwX1JUQ19JTlNUX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w2MF9SVENfREFUQV9TSVpFIFwKKwkoSVdMNjBfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBJV0w2MF9SVENfREFUQV9MT1dFUl9CT1VORCkKKworI2VuZGlmIC8qIF9faXdsXzYwMDBfaHdfaF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZhNWUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC0wLDAgKzEsMTU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDgtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWlvLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKKworLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgSVdMNjAwMF9VQ09ERV9BUElfTUFYIDIKKyNkZWZpbmUgSVdMNjA1MF9VQ09ERV9BUElfTUFYIDIKKworLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4gMQorI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4gMQorCisjZGVmaW5lIElXTDYwMDBfRldfUFJFICJpd2x3aWZpLTYwMDAtIgorI2RlZmluZSBfSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCisjZGVmaW5lIElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKworI2RlZmluZSBJV0w2MDUwX0ZXX1BSRSAiaXdsd2lmaS02MDUwLSIKKyNkZWZpbmUgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjA1MF9GV19QUkUgI2FwaSAiLnVjb2RlIgorI2RlZmluZSBJV0w2MDUwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w2MDUwX01PRFVMRV9GSVJNV0FSRShhcGkpCisKK3N0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDYwMDBfaGNtZF91dGlscyA9IHsKKwkuZ2V0X2hjbWRfc2l6ZSA9IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSwKKwkuYnVpbGRfYWRkc3RhX2hjbWQgPSBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kLAorCS5ydHNfdHhfY21kX2ZsYWcgPSBpd2w1MDAwX3J0c190eF9jbWRfZmxhZywKKwkuY2FsY19yc3NpID0gaXdsNTAwMF9jYWxjX3Jzc2ksCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7CisJLmxpYiA9ICZpd2w1MDAwX2xpYiwKKwkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCisJLnV0aWxzID0gJml3bDYwMDBfaGNtZF91dGlscywKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUciLAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMF9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAorCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0JDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnbl9jZmcgPSB7CisJLm5hbWUgPSAiNjAwMCBTZXJpZXMgMngyIEFHTiIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0JDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmcgPSB7CisJLm5hbWUgPSAiNjA1MCBTZXJpZXMgMngyIEFHTiIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0JDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfM2Fnbl9jZmcgPSB7CisJLm5hbWUgPSAiNjAwMCBTZXJpZXMgM3gzIEFHTiIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8zYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDUwIFNlcmllcyAzeDMgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwNTBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gZmFsc2UsCit9OworCitNT0RVTEVfRklSTVdBUkUoSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoSVdMNjAwMF9VQ09ERV9BUElfTUFYKSk7CitNT0RVTEVfRklSTVdBUkUoSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoSVdMNjA1MF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC1jaGVjay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQtY2hlY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxMzdlZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC1jaGVjay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHUEwgTElDRU5TRSBTVU1NQVJZCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKLSAqIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgIml3bC1kZXYuaCIKLSNpbmNsdWRlICJpd2wtZGVidWcuaCIKLSNpbmNsdWRlICJpd2wtY29tbWFuZHMuaCIKLQotCi0vKioKLSAqIGl3bF9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCi0gKgotICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKLSAqIGJlICNpZmRlZidkIG91dCBvbmNlIHRoZSBkcml2ZXIgaXMgc3RhYmxlIGFuZCBmb2xrcyBhcmVuJ3QgYWN0aXZlbHkKLSAqIG1ha2luZyBjaGFuZ2VzCi0gKi8KLWludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24pCi17Ci0JaW50IGVycm9yID0gMDsKLQlpbnQgY291bnRlciA9IDE7Ci0KLQlpZiAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJgotCQkJCShSWE9OX0ZMR19UR0pfTkFSUk9XX0JBTkRfTVNLIHwKLQkJCQkgUlhPTl9GTEdfUkFEQVJfREVURUNUX01TSykpOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgMjRHIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9IGVsc2UgewotCQllcnJvciB8PSAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykgPwotCQkJCTAgOiBsZTMyX3RvX2NwdShSWE9OX0ZMR19TSE9SVF9TTE9UX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBmaWVsZHMgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBDQ0sgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JfQotCWVycm9yIHw9IChyeG9uLT5ub2RlX2FkZHJbMF0gfCByeG9uLT5ic3NpZF9hZGRyWzBdKSAmIDB4MTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBtYWMgYWRkciAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCS8qIG1ha2Ugc3VyZSBiYXNpYyByYXRlcyA2TWJwcyBhbmQgMU1icHMgYXJlIHN1cHBvcnRlZCAqLwotCWVycm9yIHw9ICgoKHJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV82TV9NQVNLKSA9PSAwKSAmJgotCQkgICgocnhvbi0+Y2NrX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfMU1fTUFTSykgPT0gMCkpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGJhc2ljIHJhdGUgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAobGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpID4gMjAwNyk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYXNzb2MgaWQgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgQ0NLIGFuZCBzaG9ydCBzbG90ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKQotCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgJiBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgfAotCQkJUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKSkgPT0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBUR0cgYW5kIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJUdW5pbmcgdG8gY2hhbm5lbCAlZFxuIiwKLQkJCSAgICBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0KLQlpZiAoZXJyb3IpIHsKLQkJSVdMX0VSUk9SKCJOb3QgYSB2YWxpZCBpd2w0OTY1X3J4b25fYXNzb2NfY21kIGZpZWxkIHZhbHVlc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggMjdmNTA0Ny4uY2FiNzg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDksNiArNDksOCBAQAogI2RlZmluZSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USAkJNgkvKiBtaW4gZmFpbHVyZXMgdG8gY2FsYyB0cHQgKi8KICNkZWZpbmUgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgJCTgJLyogbWluIHN1Y2Nlc3NlcyB0byBjYWxjIHRwdCAqLwogCisvKiBtYXggYWxsb3dlZCByYXRlIG1pc3MgYmVmb3JlIHN5bmMgTFEgY21kICovCisjZGVmaW5lIElXTF9NSVNTRURfUkFURV9NQVgJCTE1CiAvKiBtYXggdGltZSB0byBhY2N1bSBoaXN0b3J5IDIgc2Vjb25kcyAqLwogI2RlZmluZSBJV0xfUkFURV9TQ0FMRV9GTFVTSF9JTlRWTCAgICgyKkhaKQogCkBAIC0xNDgsNiArMTUwLDggQEAKIAl1MTYgYWN0aXZlX21pbW8yX3JhdGU7CiAJdTE2IGFjdGl2ZV9taW1vM19yYXRlOwogCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKKwlzOCBtYXhfcmF0ZV9pZHg7ICAgICAvKiBNYXggcmF0ZSBzZXQgYnkgdXNlciAqLworCXU4IG1pc3NlZF9yYXRlX2NvdW50ZXI7CiAKIAlzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgbHE7CiAJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyBscV9pbmZvW0xRX1NJWkVdOyAvKiAiYWN0aXZlIiwgInNlYXJjaCIgKi8KQEAgLTM1Niw3ICszNjAsNyBAQAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJaWYgKHJzX3RsX2dldF9sb2FkKGxxX2RhdGEsIHRpZCkgPiBJV0xfQUdHX0xPQURfVEhSRVNIT0xEKSB7Ci0JCUlXTF9ERUJVR19IVCgiU3RhcnRpbmcgVHggYWdnOiBTVEE6ICVwTSB0aWQ6ICVkXG4iLAorCQlJV0xfREVCVUdfSFQocHJpdiwgIlN0YXJ0aW5nIFR4IGFnZzogU1RBOiAlcE0gdGlkOiAlZFxuIiwKIAkJCQlzdGEtPmFkZHIsIHRpZCk7CiAJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHByaXYtPmh3LCBzdGEtPmFkZHIsIHRpZCk7CiAJfQpAQCAtNDYzLDggKzQ2Nyw5IEBACiAgKiBGaWxsIHVDb2RlIEFQSSByYXRlX25fZmxhZ3MgZmllbGQsIGJhc2VkIG9uICJzZWFyY2giIG9yICJhY3RpdmUiIHRhYmxlLgogICovCiAvKiBGSVhNRTpSUzpyZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgcHV0IHRoZSBmbGFncyBzdGF0aWNhbGx5IGluIHRoZSB0YWJsZSAqLwotc3RhdGljIHUzMiByYXRlX25fZmxhZ3NfZnJvbV90Ymwoc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAotCQkJCSAgICAgICBpbnQgaW5kZXgsIHU4IHVzZV9ncmVlbikKK3N0YXRpYyB1MzIgcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAorCQkJCSBpbnQgaW5kZXgsIHU4IHVzZV9ncmVlbikKIHsKIAl1MzIgcmF0ZV9uX2ZsYWdzID0gMDsKIApAQCAtNDc1LDcgKzQ4MCw3IEBACiAKIAl9IGVsc2UgaWYgKGlzX0h0KHRibC0+bHFfdHlwZSkpIHsKIAkJaWYgKGluZGV4ID4gSVdMX0xBU1RfT0ZETV9SQVRFKSB7Ci0JCQlJV0xfRVJST1IoImludmFsaWQgSFQgcmF0ZSBpbmRleCAlZFxuIiwgaW5kZXgpOworCQkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBIVCByYXRlIGluZGV4ICVkXG4iLCBpbmRleCk7CiAJCQlpbmRleCA9IElXTF9MQVNUX09GRE1fUkFURTsKIAkJfQogCQlyYXRlX25fZmxhZ3MgPSBSQVRFX01DU19IVF9NU0s7CkBAIC00ODcsNyArNDkyLDcgQEAKIAkJZWxzZQogCQkJcmF0ZV9uX2ZsYWdzIHw9CWl3bF9yYXRlc1tpbmRleF0ucGxjcF9taW1vMzsKIAl9IGVsc2UgewotCQlJV0xfRVJST1IoIkludmFsaWQgdGJsLT5scV90eXBlICVkXG4iLCB0YmwtPmxxX3R5cGUpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIHRibC0+bHFfdHlwZSAlZFxuIiwgdGJsLT5scV90eXBlKTsKIAl9CiAKIAlyYXRlX25fZmxhZ3MgfD0gKCh0YmwtPmFudF90eXBlIDw8IFJBVEVfTUNTX0FOVF9QT1MpICYKQEAgLTUwNyw3ICs1MTIsNyBAQAogCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0dGX01TSzsKIAkJCWlmIChpc19zaXNvKHRibC0+bHFfdHlwZSkgJiYgdGJsLT5pc19TR0kpIHsKIAkJCQlyYXRlX25fZmxhZ3MgJj0gflJBVEVfTUNTX1NHSV9NU0s7Ci0JCQkJSVdMX0VSUk9SKCJHRiB3YXMgc2V0IHdpdGggU0dJOlNJU09cbiIpOworCQkJCUlXTF9FUlIocHJpdiwgIkdGIHdhcyBzZXQgd2l0aCBTR0k6U0lTT1xuIik7CiAJCQl9CiAJCX0KIAl9CkBAIC02ODgsNyArNjkzLDcgQEAKIAkJCWJyZWFrOwogCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbG93KSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOwogCX0KIAogCWhpZ2ggPSBpbmRleDsKQEAgLTY5OCw3ICs3MDMsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBoaWdoKSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGhpZ2hlciByYXRlOiAlZFxuIiwgaGlnaCk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKIAl9CiAKIAlyZXR1cm4gKGhpZ2ggPDwgOCkgfCBsb3c7CkBAIC03NTgsNyArNzYzLDcgQEAKIAkJbG93ID0gc2NhbGVfaW5kZXg7CiAKIG91dDoKLQlyZXR1cm4gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgbG93LCBpc19ncmVlbik7CisJcmV0dXJuIHJhdGVfbl9mbGFnc19mcm9tX3RibChscV9zdGEtPmRydiwgdGJsLCBsb3csIGlzX2dyZWVuKTsKIH0KIAogLyoKQEAgLTc4NSw3ICs3OTAsNyBAQAogCXU4IGFjdGl2ZV9pbmRleCA9IDA7CiAJczMyIHRwdCA9IDA7CiAKLQlJV0xfREVCVUdfUkFURV9MSU1JVCgiZ2V0IGZyYW1lIGFjayByZXNwb25zZSwgdXBkYXRlIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKKwlJV0xfREVCVUdfUkFURV9MSU1JVChwcml2LCAiZ2V0IGZyYW1lIGFjayByZXNwb25zZSwgdXBkYXRlIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKIAogCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKQEAgLTc5Niw3ICs4MDEsMTAgQEAKIAkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVKSkKIAkJcmV0dXJuOwogCi0JcmV0cmllcyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCAtIDE7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCisJCXJldHJpZXMgPSAwOworCWVsc2UKKwkJcmV0cmllcyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCAtIDE7CiAKIAlpZiAocmV0cmllcyA+IDE1KQogCQlyZXRyaWVzID0gMTU7CkBAIC04MzUsMTQgKzg0MywxOSBAQAogCSAgICAoISEodHhfcmF0ZSAmIFJBVEVfTUNTX0dGX01TSykgIT0gISEoaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKSkgfHwKIAkgICAgKGh3LT53aXBoeS0+YmFuZHNbcHJpdi0+YmFuZF0tPmJpdHJhdGVzW3JzX2luZGV4XS5iaXRyYXRlICE9CiAJICAgICBody0+d2lwaHktPmJhbmRzW2luZm8tPmJhbmRdLT5iaXRyYXRlc1tpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4XS5iaXRyYXRlKSkgewotCQlJV0xfREVCVUdfUkFURSgiaW5pdGlhbCByYXRlIGRvZXMgbm90IG1hdGNoIDB4JXhcbiIsIHR4X3JhdGUpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiaW5pdGlhbCByYXRlIGRvZXMgbm90IG1hdGNoIDB4JXhcbiIsIHR4X3JhdGUpOwogCQkvKiB0aGUgbGFzdCBMUSBjb21tYW5kIGNvdWxkIGZhaWxlZCBzbyB0aGUgTFEgaW4gdWNvZGUgbm90CiAJCSAqIHRoZSBzYW1lIGluIGRyaXZlciBzeW5jIHVwCiAJCSAqLwotCQlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CisJCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlcisrOworCQlpZiAobHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyID4gSVdMX01JU1NFRF9SQVRFX01BWCkgeworCQkJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyID0gMDsKKwkJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwkJfQogCQlnb3RvIG91dDsKIAl9CiAKKwlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSAwOwogCS8qIFVwZGF0ZSBmcmFtZSBoaXN0b3J5IHdpbmRvdyB3aXRoICJmYWlsdXJlIiBmb3IgZWFjaCBUeCByZXRyeS4gKi8KIAl3aGlsZSAocmV0cmllcykgewogCQkvKiBMb29rIHVwIHRoZSByYXRlIGFuZCBvdGhlciBpbmZvIHVzZWQgZm9yIGVhY2ggdHggYXR0ZW1wdC4KQEAgLTkwMyw3ICs5MTYsNyBAQAogCQkJdHB0ID0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEoc2VhcmNoX3dpbiwgcnNfaW5kZXgsIHRwdCwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4sCiAJCQkJCSAgIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwKTsKQEAgLTkxOSw3ICs5MzIsNyBAQAogCQkJdHB0ID0gY3Vycl90YmwtPmV4cGVjdGVkX3RwdFtyc19pbmRleF07CiAJCWVsc2UKIAkJCXRwdCA9IDA7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVKQogCQkJcnNfY29sbGVjdF90eF9kYXRhKHdpbmRvdywgcnNfaW5kZXgsIHRwdCwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4sCiAJCQkJCSAgIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwKTsKQEAgLTkzMSw3ICs5NDQsNyBAQAogCS8qIElmIG5vdCBzZWFyY2hpbmcgZm9yIG5ldyBtb2RlLCBpbmNyZW1lbnQgc3VjY2Vzcy9mYWlsZWQgY291bnRlcgogCSAqIC4uLiB0aGVzZSBoZWxwIGRldGVybWluZSB3aGVuIHRvIHN0YXJ0IHNlYXJjaGluZyBhZ2FpbiAqLwogCWlmIChscV9zdGEtPnN0YXlfaW5fdGJsKSB7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpIHsKIAkJCWxxX3N0YS0+dG90YWxfc3VjY2VzcyArPSBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX21hcDsKIAkJCWxxX3N0YS0+dG90YWxfZmFpbGVkICs9CiAJCQkgICAgIChpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiAtIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwKTsKQEAgLTk2MSw3ICs5NzQsNyBAQAogc3RhdGljIHZvaWQgcnNfc2V0X3N0YXlfaW5fdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpc19sZWdhY3ksCiAJCQkJIHN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEpCiB7Ci0JSVdMX0RFQlVHX1JBVEUoIndlIGFyZSBzdGF5aW5nIGluIHRoZSBzYW1lIHRhYmxlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAid2UgYXJlIHN0YXlpbmcgaW4gdGhlIHNhbWUgdGFibGVcbiIpOwogCWxxX3N0YS0+c3RheV9pbl90YmwgPSAxOwkvKiBvbmx5IHBsYWNlIHRoaXMgZ2V0cyBzZXQgKi8KIAlpZiAoaXNfbGVnYWN5KSB7CiAJCWxxX3N0YS0+dGFibGVfY291bnRfbGltaXQgPSBJV0xfTEVHQUNZX1RBQkxFX0NPVU5UOwpAQCAtMTEyOSw3ICsxMTQyLDcgQEAKIAlzMzIgcmF0ZTsKIAlzOCBpc19ncmVlbiA9IGxxX3N0YS0+aXNfZ3JlZW47CiAKLQlpZiAoIWNvbmYtPmh0LmVuYWJsZWQgfHwgIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwlpZiAoIWNvbmZfaXNfaHQoY29uZikgfHwgIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKCgoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TTV9QUykgPj4gMikKQEAgLTExNDAsNyArMTE1Myw3IEBACiAJaWYgKHByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtIDwgMikKIAkJcmV0dXJuIC0xOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiB0cnkgdG8gc3dpdGNoIHRvIE1JTU8yXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IHRyeSB0byBzd2l0Y2ggdG8gTUlNTzJcbiIpOwogCiAJdGJsLT5scV90eXBlID0gTFFfTUlNTzI7CiAJdGJsLT5pc19kdXAgPSBscV9zdGEtPmlzX2R1cDsKQEAgLTExNjksMTYgKzExODIsMTYgQEAKIAogCXJhdGUgPSByc19nZXRfYmVzdF9yYXRlKHByaXYsIGxxX3N0YSwgdGJsLCByYXRlX21hc2ssIGluZGV4KTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogTUlNTzIgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBNSU1PMiBiZXN0IHJhdGUgJWQgbWFzayAlWFxuIiwgcmF0ZSwgcmF0ZV9tYXNrKTsKIAogCWlmICgocmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKSB8fCAhKCgxIDw8IHJhdGUpICYgcmF0ZV9tYXNrKSkgewotCQlJV0xfREVCVUdfUkFURSgiQ2FuJ3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAiQ2FuJ3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAogCQkJCQkJcmF0ZSwgcmF0ZV9tYXNrKTsKIAkJcmV0dXJuIC0xOwogCX0KLQl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGUsIGlzX2dyZWVuKTsKKwl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIHJhdGUsIGlzX2dyZWVuKTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKIAkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZSwgaXNfZ3JlZW4pOwogCXJldHVybiAwOwogfQpAQCAtMTE5NiwxMCArMTIwOSwxMCBAQAogCXU4IGlzX2dyZWVuID0gbHFfc3RhLT5pc19ncmVlbjsKIAlzMzIgcmF0ZTsKIAotCWlmICghY29uZi0+aHQuZW5hYmxlZCB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCWlmICghY29uZl9pc19odChjb25mKSB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQogCQlyZXR1cm4gLTE7CiAKLQlJV0xfREVCVUdfUkFURSgiTFE6IHRyeSB0byBzd2l0Y2ggdG8gU0lTT1xuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiB0cnkgdG8gc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJdGJsLT5pc19kdXAgPSBscV9zdGEtPmlzX2R1cDsKIAl0YmwtPmxxX3R5cGUgPSBMUV9TSVNPOwpAQCAtMTIzMCwxNCArMTI0MywxNCBAQAogCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCB0YmwpOwogCXJhdGUgPSByc19nZXRfYmVzdF9yYXRlKHByaXYsIGxxX3N0YSwgdGJsLCByYXRlX21hc2ssIGluZGV4KTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogZ2V0IGJlc3QgcmF0ZSAlZCBtYXNrICVYXG4iLCByYXRlLCByYXRlX21hc2spOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogZ2V0IGJlc3QgcmF0ZSAlZCBtYXNrICVYXG4iLCByYXRlLCByYXRlX21hc2spOwogCWlmICgocmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKSB8fCAhKCgxIDw8IHJhdGUpICYgcmF0ZV9tYXNrKSkgewotCQlJV0xfREVCVUdfUkFURSgiY2FuIG5vdCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJjYW4gbm90IHN3aXRjaCB3aXRoIGluZGV4ICVkIHJhdGUgbWFzayAleFxuIiwKIAkJCSAgICAgcmF0ZSwgcmF0ZV9tYXNrKTsKIAkJcmV0dXJuIC0xOwogCX0KLQl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGUsIGlzX2dyZWVuKTsKLQlJV0xfREVCVUdfUkFURSgiTFE6IFN3aXRjaCB0byBuZXcgbWNzICVYIGluZGV4IGlzIGdyZWVuICVYXG4iLAorCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgcmF0ZSwgaXNfZ3JlZW4pOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCiAJCSAgICAgdGJsLT5jdXJyZW50X3JhdGUsIGlzX2dyZWVuKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNjYsNyArMTI3OSw3IEBACiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9BTlRFTk5BMToKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9BTlRFTk5BMjoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTGVnYWN5IHRvZ2dsZSBBbnRlbm5hXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTGVnYWN5IHRvZ2dsZSBBbnRlbm5hXG4iKTsKIAogCQkJbHFfc3RhLT5hY3Rpb25fY291bnRlcisrOwogCkBAIC0xMjkwLDcgKzEzMDMsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX0xFR0FDWV9TV0lUQ0hfU0lTTzoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTGVnYWN5IHN3aXRjaCB0byBTSVNPXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTGVnYWN5IHN3aXRjaCB0byBTSVNPXG4iKTsKIAogCQkJLyogU2V0IHVwIHNlYXJjaCB0YWJsZSB0byB0cnkgU0lTTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwpAQCAtMTMwNiw3ICsxMzE5LDcgQEAKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9NSU1PMl9BQjoKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9NSU1PMl9BQzoKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9NSU1PMl9CQzoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTGVnYWN5IHN3aXRjaCB0byBNSU1PMlxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IExlZ2FjeSBzd2l0Y2ggdG8gTUlNTzJcbiIpOwogCiAJCQkvKiBTZXQgdXAgc2VhcmNoIHRhYmxlIHRvIHRyeSBNSU1PICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xMzc1LDcgKzEzODgsNyBAQAogCQlzd2l0Y2ggKHRibC0+YWN0aW9uKSB7CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0FOVEVOTkExOgogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9BTlRFTk5BMjoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyB0b2dnbGUgQW50ZW5uYVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNJU08gdG9nZ2xlIEFudGVubmFcbiIpOwogCiAJCQlpZiAoKHRibC0+YWN0aW9uID09IElXTF9TSVNPX1NXSVRDSF9BTlRFTk5BMSAmJgogCQkJCQkJCXR4X2NoYWluc19udW0gPD0gMSkgfHwKQEAgLTEzOTQsNyArMTQwNyw3IEBACiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX01JTU8yX0FCOgogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9NSU1PMl9BQzoKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfTUlNTzJfQkM6Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IFNJU08gc3dpdGNoIHRvIE1JTU8yXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU0lTTyBzd2l0Y2ggdG8gTUlNTzJcbiIpOwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwogCQkJc2VhcmNoX3RibC0+aXNfU0dJID0gMDsKIApAQCAtMTQyMywxNCArMTQzNiwxNSBAQAogCQkJCQkJSFRfU0hPUlRfR0lfNDBNSFopKQogCQkJCWJyZWFrOwogCi0JCQlJV0xfREVCVUdfUkFURSgiTFE6IFNJU08gdG9nZ2xlIFNHSS9OR0lcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTSVNPIHRvZ2dsZSBTR0kvTkdJXG4iKTsKIAogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwogCQkJaWYgKGlzX2dyZWVuKSB7CiAJCQkJaWYgKCF0YmwtPmlzX1NHSSkKIAkJCQkJYnJlYWs7CiAJCQkJZWxzZQotCQkJCQlJV0xfRVJST1IoIlNHSSB3YXMgc2V0IGluIEdGK1NJU09cbiIpOworCQkJCQlJV0xfRVJSKHByaXYsCisJCQkJCQkiU0dJIHdhcyBzZXQgaW4gR0YrU0lTT1xuIik7CiAJCQl9CiAJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAhdGJsLT5pc19TR0k7CiAJCQlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgc2VhcmNoX3RibCk7CkBAIC0xNDM5LDggKzE0NTMsOSBAQAogCQkJCWlmICh0cHQgPj0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W2luZGV4XSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwoCi0JCQkJCQlzZWFyY2hfdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQkJc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlID0KKwkJCQlyYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgc2VhcmNoX3RibCwKKwkJCQkJCSAgICAgIGluZGV4LCBpc19ncmVlbik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl0YmwtPmFjdGlvbisrOwpAQCAtMTQ4Niw3ICsxNTAxLDcgQEAKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfQU5URU5OQTE6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9BTlRFTk5BMjoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTUlNTyB0b2dnbGUgQW50ZW5uYXNcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBNSU1PIHRvZ2dsZSBBbnRlbm5hc1xuIik7CiAKIAkJCWlmICh0eF9jaGFpbnNfbnVtIDw9IDIpCiAJCQkJYnJlYWs7CkBAIC0xNTAyLDcgKzE1MTcsNyBAQAogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfU0lTT19BOgogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfU0lTT19COgogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfU0lTT19DOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PMiBzd2l0Y2ggdG8gU0lTT1xuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8yIHN3aXRjaCB0byBTSVNPXG4iKTsKIAogCQkJLyogU2V0IHVwIG5ldyBzZWFyY2ggdGFibGUgZm9yIFNJU08gKi8KIAkJCW1lbWNweShzZWFyY2hfdGJsLCB0YmwsIHN6KTsKQEAgLTE1MzQsNyArMTU0OSw3IEBACiAJCQkJCQlIVF9TSE9SVF9HSV80ME1IWikpCiAJCQkJYnJlYWs7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTUlNTyB0b2dnbGUgU0dJL05HSVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8gdG9nZ2xlIFNHSS9OR0lcbiIpOwogCiAJCQkvKiBTZXQgdXAgbmV3IHNlYXJjaCB0YWJsZSBmb3IgTUlNTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwpAQCAtMTU1MSw4ICsxNTY2LDkgQEAKIAkJCQlpZiAodHB0ID49IHNlYXJjaF90YmwtPmV4cGVjdGVkX3RwdFtpbmRleF0pCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKAotCQkJCQkJc2VhcmNoX3RibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwkJCXNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSA9CisJCQkJcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHNlYXJjaF90YmwsCisJCQkJCQkgICAgICBpbmRleCwgaXNfZ3JlZW4pOwogCQkJZ290byBvdXQ7CiAKIAkJfQpAQCAtMTYxNiw3ICsxNjMyLDcgQEAKIAkJICAgIChscV9zdGEtPnRvdGFsX3N1Y2Nlc3MgPiBscV9zdGEtPm1heF9zdWNjZXNzX2xpbWl0KSB8fAogCQkgICAgKCghbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCkgJiYgKGxxX3N0YS0+Zmx1c2hfdGltZXIpCiAJCSAgICAgJiYgKGZsdXNoX2ludGVydmFsX3Bhc3NlZCkpKSB7Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IHN0YXkgaXMgZXhwaXJlZCAlZCAlZCAlZFxuOiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IHN0YXkgaXMgZXhwaXJlZCAlZCAlZCAlZFxuOiIsCiAJCQkJICAgICBscV9zdGEtPnRvdGFsX2ZhaWxlZCwKIAkJCQkgICAgIGxxX3N0YS0+dG90YWxfc3VjY2VzcywKIAkJCQkgICAgIGZsdXNoX2ludGVydmFsX3Bhc3NlZCk7CkBAIC0xNjM5LDcgKzE2NTUsNyBAQAogCQkJICAgIGxxX3N0YS0+dGFibGVfY291bnRfbGltaXQpIHsKIAkJCQlscV9zdGEtPnRhYmxlX2NvdW50ID0gMDsKIAotCQkJCUlXTF9ERUJVR19SQVRFKCJMUTogc3RheSBpbiB0YWJsZSBjbGVhciB3aW5cbiIpOworCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogc3RheSBpbiB0YWJsZSBjbGVhciB3aW5cbiIpOwogCQkJCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrKQogCQkJCQlyc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdygKIAkJCQkJCSYodGJsLT53aW5baV0pKTsKQEAgLTE2ODcsOCArMTcwMyw5IEBACiAJdTE2IGhpZ2hfbG93OwogCXMzMiBzcjsKIAl1OCB0aWQgPSBNQVhfVElEX0NPVU5UOworCXN0cnVjdCBpd2xfdGlkX2RhdGEgKnRpZF9kYXRhOwogCi0JSVdMX0RFQlVHX1JBVEUoInJhdGUgc2NhbGUgY2FsY3VsYXRlIG5ldyByYXRlIGZvciBza2JcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJyYXRlIHNjYWxlIGNhbGN1bGF0ZSBuZXcgcmF0ZSBmb3Igc2tiXG4iKTsKIAogCS8qIFNlbmQgbWFuYWdlbWVudCBmcmFtZXMgYW5kIGJyb2FkY2FzdC9tdWx0aWNhc3QgZGF0YSB1c2luZwogCSAqIGxvd2VzdCByYXRlLiAqLwpAQCAtMTcyMCwxMyArMTczNywxMyBAQAogCS8qIGN1cnJlbnQgdHggcmF0ZSAqLwogCWluZGV4ID0gbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHg7CiAKLQlJV0xfREVCVUdfUkFURSgiUmF0ZSBzY2FsZSBpbmRleCAlZCBmb3IgdHlwZSAlZFxuIiwgaW5kZXgsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlJhdGUgc2NhbGUgaW5kZXggJWQgZm9yIHR5cGUgJWRcbiIsIGluZGV4LAogCQkgICAgICAgdGJsLT5scV90eXBlKTsKIAogCS8qIHJhdGVzIGF2YWlsYWJsZSBmb3IgdGhpcyBhc3NvY2lhdGlvbiwgYW5kIGZvciBtb2R1bGF0aW9uIG1vZGUgKi8KIAlyYXRlX21hc2sgPSByc19nZXRfc3VwcG9ydGVkX3JhdGVzKGxxX3N0YSwgaGRyLCB0YmwtPmxxX3R5cGUpOwogCi0JSVdMX0RFQlVHX1JBVEUoIm1hc2sgMHglMDRYIFxuIiwgcmF0ZV9tYXNrKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibWFzayAweCUwNFggXG4iLCByYXRlX21hc2spOwogCiAJLyogbWFzayB3aXRoIHN0YXRpb24gcmF0ZSByZXN0cmljdGlvbiAqLwogCWlmIChpc19sZWdhY3kodGJsLT5scV90eXBlKSkgewpAQCAtMTc0NSwxNiArMTc2MiwyNSBAQAogCQlyYXRlX3NjYWxlX2luZGV4X21zayA9IHJhdGVfbWFzazsKIAogCWlmICghKCgxIDw8IGluZGV4KSAmIHJhdGVfc2NhbGVfaW5kZXhfbXNrKSkgewotCQlJV0xfRVJST1IoIkN1cnJlbnQgUmF0ZSBpcyBub3QgdmFsaWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJDdXJyZW50IFJhdGUgaXMgbm90IHZhbGlkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEdldCBleHBlY3RlZCB0aHJvdWdocHV0IHRhYmxlIGFuZCBoaXN0b3J5IHdpbmRvdyBmb3IgY3VycmVudCByYXRlICovCiAJaWYgKCF0YmwtPmV4cGVjdGVkX3RwdCkgewotCQlJV0xfRVJST1IoInRibC0+ZXhwZWN0ZWRfdHB0IGlzIE5VTExcbiIpOworCQlJV0xfRVJSKHByaXYsICJ0YmwtPmV4cGVjdGVkX3RwdCBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuOwogCX0KIAorCS8qIGZvcmNlIHVzZXIgbWF4IHJhdGUgaWYgc2V0IGJ5IHVzZXIgKi8KKwlpZiAoKGxxX3N0YS0+bWF4X3JhdGVfaWR4ICE9IC0xKSAmJgorCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggPCBpbmRleCkpIHsKKwkJaW5kZXggPSBscV9zdGEtPm1heF9yYXRlX2lkeDsKKwkJdXBkYXRlX2xxID0gMTsKKwkJd2luZG93ID0gJih0YmwtPndpbltpbmRleF0pOworCQlnb3RvIGxxX3VwZGF0ZTsKKwl9CisKIAl3aW5kb3cgPSAmKHRibC0+d2luW2luZGV4XSk7CiAKIAkvKgpAQCAtMTc2Nyw3ICsxNzkzLDcgQEAKIAlmYWlsX2NvdW50ID0gd2luZG93LT5jb3VudGVyIC0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXI7CiAJaWYgKChmYWlsX2NvdW50IDwgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpICYmCiAJCQkod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPCBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGlsbCBiZWxvdyBUSC4gc3VjYz0lZCB0b3RhbD0lZCAiCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogc3RpbGwgYmVsb3cgVEguIHN1Y2M9JWQgdG90YWw9JWQgIgogCQkJICAgICAgICJmb3IgaW5kZXggJWRcbiIsCiAJCQkgICAgICAgd2luZG93LT5zdWNjZXNzX2NvdW50ZXIsIHdpbmRvdy0+Y291bnRlciwgaW5kZXgpOwogCkBAIC0xNzk1LDcgKzE4MjEsNyBAQAogCQkgKiBjb250aW51aW5nIHRvIHVzZSB0aGUgc2V0dXAgdGhhdCB3ZSd2ZSBiZWVuIHRyeWluZy4gKi8KIAkJaWYgKHdpbmRvdy0+YXZlcmFnZV90cHQgPiBscV9zdGEtPmxhc3RfdHB0KSB7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU1dJVENISU5HIFRPIE5FVyBUQUJMRSAiCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNXSVRDSElORyBUTyBORVcgVEFCTEUgIgogCQkJCQkic3VjPSVkIGN1ci10cHQ9JWQgb2xkLXRwdD0lZFxuIiwKIAkJCQkJd2luZG93LT5zdWNjZXNzX3JhdGlvLAogCQkJCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0LApAQCAtMTgxMSw3ICsxODM3LDcgQEAKIAkJLyogRWxzZSBwb29yIHN1Y2Nlc3M7IGdvIGJhY2sgdG8gbW9kZSBpbiAiYWN0aXZlIiB0YWJsZSAqLwogCQl9IGVsc2UgewogCi0JCQlJV0xfREVCVUdfUkFURSgiTFE6IEdPSU5HIEJBQ0sgVE8gVEhFIE9MRCBUQUJMRSAiCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEdPSU5HIEJBQ0sgVE8gVEhFIE9MRCBUQUJMRSAiCiAJCQkJCSJzdWM9JWQgY3VyLXRwdD0lZCBvbGQtdHB0PSVkXG4iLAogCQkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8sCiAJCQkJCXdpbmRvdy0+YXZlcmFnZV90cHQsCkBAIC0xODQ2LDYgKzE4NzIsMTEgQEAKIAlsb3cgPSBoaWdoX2xvdyAmIDB4ZmY7CiAJaGlnaCA9IChoaWdoX2xvdyA+PiA4KSAmIDB4ZmY7CiAKKwkvKiBJZiB1c2VyIHNldCBtYXggcmF0ZSwgZG9udCBhbGxvdyBoaWdoZXIgdGhhbiB1c2VyIGNvbnN0cmFpbiAqLworCWlmICgobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpICYmCisJICAgIChscV9zdGEtPm1heF9yYXRlX2lkeCA8IGhpZ2gpKQorCQloaWdoID0gSVdMX1JBVEVfSU5WQUxJRDsKKwogCXNyID0gd2luZG93LT5zdWNjZXNzX3JhdGlvOwogCiAJLyogQ29sbGVjdCBtZWFzdXJlZCB0aHJvdWdocHV0cyBmb3IgY3VycmVudCBhbmQgYWRqYWNlbnQgcmF0ZXMgKi8KQEAgLTE4NTksNyArMTg5MCw3IEBACiAKIAkvKiBUb28gbWFueSBmYWlsdXJlcywgZGVjcmVhc2UgcmF0ZSAqLwogCWlmICgoc3IgPD0gSVdMX1JBVEVfREVDUkVBU0VfVEgpIHx8IChjdXJyZW50X3RwdCA9PSAwKSkgewotCQlJV0xfREVCVUdfUkFURSgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyBzdWNjZXNzX3JhdGlvXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgc3VjY2Vzc19yYXRpb1xuIik7CiAJCXNjYWxlX2FjdGlvbiA9IC0xOwogCiAJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzOyB0cnkgaW5jcmVhc2UuICovCkBAIC0xODY5LDcgKzE5MDAsNyBAQAogCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHNyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKQogCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJZWxzZSBpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCi0JCQlzY2FsZV9hY3Rpb24gPSAtMTsKKwkJCXNjYWxlX2FjdGlvbiA9IDA7CiAJfQogCiAJLyogQm90aCBhZGphY2VudCB0aHJvdWdocHV0cyBhcmUgbWVhc3VyZWQsIGJ1dCBuZWl0aGVyIG9uZSBoYXMgYmV0dGVyCkBAIC0xODkwLDE3ICsxOTIxLDE1IEBACiAJCQkJCXNyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKSB7CiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCX0gZWxzZSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgaGlnaCB0cHRcbiIpOwotCQkJCXNjYWxlX2FjdGlvbiA9IC0xOworCQkJCXNjYWxlX2FjdGlvbiA9IDA7CiAJCQl9CiAKIAkJLyogTG93ZXIgYWRqYWNlbnQgcmF0ZSdzIHRocm91Z2hwdXQgaXMgbWVhc3VyZWQgKi8KIAkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CiAJCQkvKiBMb3dlciByYXRlIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCQkJaWYgKGxvd190cHQgPiBjdXJyZW50X3RwdCkgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyB0cHRcbiIpOworCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsCisJCQkJICAgICJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CiAJCQkJc2NhbGVfYWN0aW9uID0gLTE7CiAJCQl9IGVsc2UgaWYgKHNyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKSB7CiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKQEAgLTE5MzcsMTQgKzE5NjYsMTQgQEAKIAkJYnJlYWs7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoImNob29zZSByYXRlIHNjYWxlIGluZGV4ICVkIGFjdGlvbiAlZCBsb3cgJWQgIgorCUlXTF9ERUJVR19SQVRFKHByaXYsICJjaG9vc2UgcmF0ZSBzY2FsZSBpbmRleCAlZCBhY3Rpb24gJWQgbG93ICVkICIKIAkJICAgICJoaWdoICVkIHR5cGUgJWRcbiIsCiAJCSAgICAgaW5kZXgsIHNjYWxlX2FjdGlvbiwgbG93LCBoaWdoLCB0YmwtPmxxX3R5cGUpOwogCiBscV91cGRhdGU6CiAJLyogUmVwbGFjZSB1Q29kZSdzIHJhdGUgdGFibGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBzdGF0aW9uLiAqLwogCWlmICh1cGRhdGVfbHEpIHsKLQkJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIGluZGV4LCBpc19ncmVlbik7CisJCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOwogCQlyc19maWxsX2xpbmtfY21kKHByaXYsIGxxX3N0YSwgcmF0ZSk7CiAJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKIAl9CkBAIC0xOTgxLDcgKzIwMTAsNyBAQAogCQkJLyogVXNlIG5ldyAic2VhcmNoIiBzdGFydCByYXRlICovCiAJCQlpbmRleCA9IGl3bF9od3JhdGVfdG9fcGxjcF9pZHgodGJsLT5jdXJyZW50X3JhdGUpOwogCi0JCQlJV0xfREVCVUdfUkFURSgiU3dpdGNoIGN1cnJlbnQgIG1jczogJVggaW5kZXg6ICVkXG4iLAorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlN3aXRjaCBjdXJyZW50ICBtY3M6ICVYIGluZGV4OiAlZFxuIiwKIAkJCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLCBpbmRleCk7CiAJCQlyc19maWxsX2xpbmtfY21kKHByaXYsIGxxX3N0YSwgdGJsLT5jdXJyZW50X3JhdGUpOwogCQkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwpAQCAtMTk5MywxMCArMjAyMiwxMCBAQAogCQkgKiBzdGF5IHdpdGggYmVzdCBhbnRlbm5hIGxlZ2FjeSBtb2R1bGF0aW9uIGZvciBhIHdoaWxlCiAJCSAqIGJlZm9yZSBuZXh0IHJvdW5kIG9mIG1vZGUgY29tcGFyaXNvbnMuICovCiAJCXRibDEgPSAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKLQkJaWYgKGlzX2xlZ2FjeSh0YmwxLT5scV90eXBlKSAmJiAhY29uZi0+aHQuZW5hYmxlZCAmJgorCQlpZiAoaXNfbGVnYWN5KHRibDEtPmxxX3R5cGUpICYmICFjb25mX2lzX2h0KGNvbmYpICYmCiAJCSAgICBscV9zdGEtPmFjdGlvbl9jb3VudGVyID49IDEpIHsKIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPSAwOwotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTVEFZIGluIGxlZ2FjeSB0YWJsZVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNUQVkgaW4gbGVnYWN5IHRhYmxlXG4iKTsKIAkJCXJzX3NldF9zdGF5X2luX3RhYmxlKHByaXYsIDEsIGxxX3N0YSk7CiAJCX0KIApAQCAtMjAwOCw4ICsyMDM3LDE1IEBACiAJCQlpZiAoKGxxX3N0YS0+bGFzdF90cHQgPiBJV0xfQUdHX1RQVF9USFJFSE9MRCkgJiYKIAkJCSAgICAobHFfc3RhLT50eF9hZ2dfdGlkX2VuICYgKDEgPDwgdGlkKSkgJiYKIAkJCSAgICAodGlkICE9IE1BWF9USURfQ09VTlQpKSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUoInRyeSB0byBhZ2dyZWdhdGUgdGlkICVkXG4iLCB0aWQpOwotCQkJCXJzX3RsX3R1cm5fb25fYWdnKHByaXYsIHRpZCwgbHFfc3RhLCBzdGEpOworCQkJCXRpZF9kYXRhID0KKwkJCQkgICAmcHJpdi0+c3RhdGlvbnNbbHFfc3RhLT5scS5zdGFfaWRdLnRpZFt0aWRdOworCQkJCWlmICh0aWRfZGF0YS0+YWdnLnN0YXRlID09IElXTF9BR0dfT0ZGKSB7CisJCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsCisJCQkJCQkgICAgICAgInRyeSB0byBhZ2dyZWdhdGUgdGlkICVkXG4iLAorCQkJCQkJICAgICAgIHRpZCk7CisJCQkJCXJzX3RsX3R1cm5fb25fYWdnKHByaXYsIHRpZCwKKwkJCQkJCQkgIGxxX3N0YSwgc3RhKTsKKwkJCQl9CiAJCQl9CiAJCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyID0gMDsKIAkJCXJzX3NldF9zdGF5X2luX3RhYmxlKHByaXYsIDAsIGxxX3N0YSk7CkBAIC0yMDI4LDcgKzIwNjQsNyBAQAogCX0KIAogb3V0OgotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIGluZGV4LCBpc19ncmVlbik7CiAJaSA9IGluZGV4OwogCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ID0gaTsKIApAQCAtMjA4MSw3ICsyMTE3LDcgQEAKIAlpZiAoIXJzX2lzX3ZhbGlkX2FudCh2YWxpZF90eF9hbnQsIHRibC0+YW50X3R5cGUpKQogCSAgICByc190b2dnbGVfYW50ZW5uYSh2YWxpZF90eF9hbnQsICZyYXRlLCB0YmwpOwogCi0JcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGVfaWR4LCB1c2VfZ3JlZW4pOworCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCByYXRlX2lkeCwgdXNlX2dyZWVuKTsKIAl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGU7CiAJcnNfc2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHRibCk7CiAJcnNfZmlsbF9saW5rX2NtZChOVUxMLCBscV9zdGEsIHJhdGUpOwpAQCAtMjEwNCw3ICsyMTQwLDE4IEBACiAJaW50IHJhdGVfaWR4OwogCXU2NCBtYXNrX2JpdCA9IDA7CiAKLQlJV0xfREVCVUdfUkFURV9MSU1JVCgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisJSVdMX0RFQlVHX1JBVEVfTElNSVQocHJpdiwgInJhdGUgc2NhbGUgY2FsY3VsYXRlIG5ldyByYXRlIGZvciBza2JcbiIpOworCisJLyogR2V0IG1heCByYXRlIGlmIHVzZXIgc2V0IG1heCByYXRlICovCisJaWYgKGxxX3N0YSkgeworCQlscV9zdGEtPm1heF9yYXRlX2lkeCA9IHR4cmMtPm1heF9yYXRlX2lkeDsKKwkJaWYgKChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJgorCQkgICAgKGxxX3N0YS0+bWF4X3JhdGVfaWR4ICE9IC0xKSkKKwkJCWxxX3N0YS0+bWF4X3JhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCWlmICgobHFfc3RhLT5tYXhfcmF0ZV9pZHggPCAwKSB8fAorCQkgICAgKGxxX3N0YS0+bWF4X3JhdGVfaWR4ID49IElXTF9SQVRFX0NPVU5UKSkKKwkJCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gLTE7CisJfQogCiAJaWYgKHN0YSkKIAkJbWFza19iaXQgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOwpAQCAtMjEyOSw3ICsyMTc2LDcgQEAKIAkJdTggc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLAorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsCiAJCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQkJc3RhX2lkID0gaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHByaXYsIGhkci0+YWRkcjEsCiAJCQkJCQkJMCwgQ01EX0FTWU5DLCBOVUxMKTsKQEAgLTIxNTgsNyArMjIwNSw3IEBACiAJaW50IGksIGo7CiAKIAlwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKXByaXZfcmF0ZTsKLQlJV0xfREVCVUdfUkFURSgiY3JlYXRlIHN0YXRpb24gcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJjcmVhdGUgc3RhdGlvbiByYXRlIHNjYWxlIHdpbmRvd1xuIik7CiAKIAlscV9zdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsX2xxX3N0YSksIGdmcCk7CiAKQEAgLTIxODIsNiArMjIyOSw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnByaXYtPmh3LT5jb25mOwogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBwcml2X3N0YTsKIAl1MTYgbWFza19iaXQgPSAwOworCWludCBjb3VudDsKKwlpbnQgc3RhcnRfcmF0ZSA9IDA7CiAKIAlscV9zdGEtPmZsdXNoX3RpbWVyID0gMDsKIAlscV9zdGEtPnN1cHBfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOwpAQCAtMjE4OSw3ICsyMjM4LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQlyc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdygmbHFfc3RhLT5scV9pbmZvW2pdLndpbltpXSk7CiAKLQlJV0xfREVCVUdfUkFURSgiTFE6ICoqKiByYXRlIHNjYWxlIHN0YXRpb24gZ2xvYmFsIGluaXQgKioqXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6ICoqKiByYXRlIHNjYWxlIHN0YXRpb24gZ2xvYmFsIGluaXQgKioqXG4iKTsKIAkvKiBUT0RPOiB3aGF0IGlzIGEgZ29vZCBzdGFydGluZyByYXRlIGZvciBTVEE/IEFib3V0IG1pZGRsZT8gTWF5YmUgbm90CiAJICogdGhlIGxvd2VzdCBvciB0aGUgaGlnaGVzdCByYXRlLi4gQ291bGQgY29uc2lkZXIgdXNpbmcgUlNTSSBmcm9tCiAJICogcHJldmlvdXMgcGFja2V0cz8gTmVlZCB0byBoYXZlIElFRUUgODAyLjFYIGF1dGggc3VjY2VlZCBpbW1lZGlhdGVseQpAQCAtMjIwMCwxMCArMjI0OSwxMCBAQAogCQl1OCBzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIHN0YS0+YWRkcik7CiAKIAkJLyogZm9yIElCU1MgdGhlIGNhbGwgYXJlIGZyb20gdGFza2xldCAqLwotCQlJV0xfREVCVUdfUkFURSgiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwgc3RhLT5hZGRyKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsIHN0YS0+YWRkcik7CiAKIAkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwgc3RhLT5hZGRyKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOwogCQkJc3RhX2lkID0gaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHByaXYsIHN0YS0+YWRkciwKIAkJCQkJCQkwLCBDTURfQVNZTkMsIE5VTEwpOwogCQl9CkBAIC0yMjE2LDYgKzIyNjUsOCBAQAogCX0KIAogCWxxX3N0YS0+aXNfZHVwID0gMDsKKwlscV9zdGEtPm1heF9yYXRlX2lkeCA9IC0xOworCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA9IElXTF9NSVNTRURfUkFURV9NQVg7CiAJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihwcml2LCBjb25mKTsKIAlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSA9IHByaXYtPmFjdGl2ZV9yYXRlICYgfigweDEwMDApOwogCWxxX3N0YS0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYzsKQEAgLTIyNDAsNyArMjI5MSw3IEBACiAJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSAmPSB+KCh1MTYpMHgyKTsKIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCi0JSVdMX0RFQlVHX1JBVEUoIlNJU08tUkFURT0lWCBNSU1PMi1SQVRFPSVYIE1JTU8zLVJBVEU9JVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNJU08tUkFURT0lWCBNSU1PMi1SQVRFPSVYIE1JTU8zLVJBVEU9JVhcbiIsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlLAogCQkgICAgIGxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSk7CkBAIC0yMjU0LDE2ICsyMzA1LDIwIEBACiAJbHFfc3RhLT5kcnYgPSBwcml2OwogCiAJLyogRmluZCBoaWdoZXN0IHR4IHJhdGUgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlIGFuZCBkZXN0aW5hdGlvbiBzdGF0aW9uICovCi0JbWFza19iaXQgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdICYgbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGU7Ci0JbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSAzOwotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKQorCW1hc2tfYml0ID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKKwljb3VudCA9IHNiYW5kLT5uX2JpdHJhdGVzOworCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCWNvdW50ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCXN0YXJ0X3JhdGUgPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCQltYXNrX2JpdCA8PD0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwl9CisKKwltYXNrX2JpdCA9IG1hc2tfYml0ICYgbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGU7CisJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSA0OworCWZvciAoaSA9IHN0YXJ0X3JhdGU7IGkgPCBjb3VudDsgaSsrKQogCQlpZiAobWFza19iaXQgJiBCSVQoaSkpCiAJCQlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IGk7CiAKLQkvKiBGb3IgTU9ERV9JRUVFODAyMTFBLCBza2lwIG92ZXIgY2NrIHJhdGVzIGluIGdsb2JhbCByYXRlIHRhYmxlICovCi0JaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0KIAlyc19pbml0aWFsaXplX2xxKHByaXYsIGNvbmYsIHN0YSwgbHFfc3RhKTsKIH0KIApAQCAtMjQwMiw5ICsyNDU3LDkgQEAKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcHJpdl9yOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCWtmcmVlKGxxX3N0YSk7Ci0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAKQEAgLTI0MTgsMjAgKzI0NzMsMjcgQEAKIAkJCSAgICAgdTMyICpyYXRlX25fZmxhZ3MsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CisJdTggdmFsaWRfdHhfYW50OworCXU4IGFudF9zZWxfdHg7CiAKIAlwcml2ID0gbHFfc3RhLT5kcnY7CisJdmFsaWRfdHhfYW50ID0gcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudDsKIAlpZiAobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSkgewotCQlpZiAoaW5kZXggPCAxMikgeworCQlhbnRfc2VsX3R4ID0KKwkJICAoKGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUgJiBSQVRFX01DU19BTlRfQUJDX01TSykKKwkJICA+PiBSQVRFX01DU19BTlRfUE9TKTsKKwkJaWYgKCh2YWxpZF90eF9hbnQgJiBhbnRfc2VsX3R4KSA9PSBhbnRfc2VsX3R4KSB7CiAJCQkqcmF0ZV9uX2ZsYWdzID0gbHFfc3RhLT5kYmdfZml4ZWRfcmF0ZTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9OXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChscV9zdGEtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJCQkqcmF0ZV9uX2ZsYWdzID0gMHg4MDBEOwotCQkJZWxzZQotCQkJCSpyYXRlX25fZmxhZ3MgPSAweDgyMEE7CisJCQlscV9zdGEtPmRiZ19maXhlZF9yYXRlID0gMDsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCSAgICAiSW52YWxpZCBhbnRlbm5hIHNlbGVjdGlvbiAweCVYLCBWYWxpZCBpcyAweCVYXG4iLAorCQkJICAgIGFudF9zZWxfdHgsIHZhbGlkX3R4X2FudCk7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiRml4ZWQgcmF0ZSBPRkZcbiIpOwogCQl9Ci0JCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9OXG4iKTsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfUkFURSgiRml4ZWQgcmF0ZSBPRkZcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiRml4ZWQgcmF0ZSBPRkZcbiIpOwogCX0KIH0KIApAQCAtMjQ2MCw3ICsyNTIyLDcgQEAKIAlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlICA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlICA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KIAotCUlXTF9ERUJVR19SQVRFKCJzdGFfaWQgJWQgcmF0ZSAweCVYXG4iLAorCUlXTF9ERUJVR19SQVRFKHByaXYsICJzdGFfaWQgJWQgcmF0ZSAweCVYXG4iLAogCQlscV9zdGEtPmxxLnN0YV9pZCwgbHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSk7CiAKIAlpZiAobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSkgewpAQCAtMjQ3NCwxMSArMjUzNiwxOSBAQAogc3RhdGljIHNzaXplX3QgcnNfc3RhX2RiZ2ZzX3NjYWxlX3RhYmxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgaSA9IDA7CisJc3NpemVfdCByZXQ7CiAKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwgPSAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKKworCXByaXYgPSBscV9zdGEtPmRydjsKKwlidWZmID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgInN0YV9pZCAlZFxuIiwgbHFfc3RhLT5scS5zdGFfaWQpOwogCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJmYWlsZWQ9JWQgc3VjY2Vzcz0lZCByYXRlPTAlWFxuIiwKQEAgLTI0ODYsNiArMjU1NiwyMCBAQAogCQkJbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGUpOwogCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJmaXhlZCByYXRlIDB4JVhcbiIsCiAJCQlscV9zdGEtPmRiZ19maXhlZF9yYXRlKTsKKwlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAidmFsaWRfdHhfYW50ICVzJXMlc1xuIiwKKwkgICAgKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBBTlRfQSkgPyAiQU5UX0EsIiA6ICIiLAorCSAgICAocHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCAmIEFOVF9CKSA/ICJBTlRfQiwiIDogIiIsCisJICAgIChwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgQU5UX0MpID8gIkFOVF9DIiA6ICIiKTsKKwlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAibHEgdHlwZSAlc1xuIiwKKwkgICAoaXNfbGVnYWN5KHRibC0+bHFfdHlwZSkpID8gImxlZ2FjeSIgOiAiSFQiKTsKKwlpZiAoaXNfSHQodGJsLT5scV90eXBlKSkgeworCQlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKKwkJICAgKGlzX3Npc28odGJsLT5scV90eXBlKSkgPyAiU0lTTyIgOgorCQkgICAoKGlzX21pbW8yKHRibC0+bHFfdHlwZSkpID8gIk1JTU8yIiA6ICJNSU1PMyIpKTsKKwkJICAgZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiAlcyIsCisJCSAgICh0YmwtPmlzX2ZhdCkgPyAiNDBNSHoiIDogIjIwTUh6Iik7CisJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXNcbiIsICh0YmwtPmlzX1NHSSkgPyAiU0dJIiA6ICIiKTsKKwl9CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImdlbmVyYWw6IgogCQkiZmxhZ3M9MHglWCBtaW1vLWQ9JWQgcy1hbnQweCV4IGQtYW50PTB4JXhcbiIsCiAJCWxxX3N0YS0+bHEuZ2VuZXJhbF9wYXJhbXMuZmxhZ3MsCkBAIC0yNTExLDcgKzI1OTUsOSBAQAogCQlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiIHJhdGVbJWRdIDB4JVhcbiIsCiAJCQlpLCBsZTMyX3RvX2NwdShscV9zdGEtPmxxLnJzX3RhYmxlW2ldLnJhdGVfbl9mbGFncykpOwogCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfb3BzID0gewpAQCAtMjUyMiwxMSArMjYwOCwxNyBAQAogc3RhdGljIHNzaXplX3QgcnNfc3RhX2RiZ2ZzX3N0YXRzX3RhYmxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgaSwgajsKKwlzc2l6ZV90IHJldDsKIAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlidWZmID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiAtRU5PTUVNOworCiAJZm9yIChpID0gMDsgaSA8IExRX1NJWkU7IGkrKykgewogCQlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiJXMgdHlwZT0lZCBTR0k9JWQgRkFUPSVkIERVUD0lZFxuIgogCQkJCSJyYXRlPTB4JVhcbiIsCkBAIC0yNTQ0LDcgKzI2MzYsOSBAQAogCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS53aW5bal0uc3VjY2Vzc19yYXRpbyk7CiAJCX0KIAl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaAppbmRleCA3OGVlODNhLi5hYjU5YWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNyw4ICsyNyw2IEBACiAjaWZuZGVmIF9faXdsX2Fnbl9yc19oX18KICNkZWZpbmUgX19pd2xfYWduX3JzX2hfXwogCi0jaW5jbHVkZSAiaXdsLWRldi5oIgotCiBzdHJ1Y3QgaXdsX3JhdGVfaW5mbyB7CiAJdTggcGxjcDsJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLwogCXU4IHBsY3Bfc2lzbzsJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfU0lTT182TV9QTENQLCBldGMuICovCkBAIC00Myw2ICs0MSwxOSBAQAogCXU4IG5leHRfcnNfdGdnOyAgLyogbmV4dCByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KIH07CiAKK3N0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyB7CisJdTggcGxjcDsJCS8qIHVDb2RlIEFQSTogIElXTF9SQVRFXzZNX1BMQ1AsIGV0Yy4gKi8KKwl1OCBpZWVlOwkJLyogTUFDIGhlYWRlcjogIElXTF9SQVRFXzZNX0lFRUUsIGV0Yy4gKi8KKwl1OCBwcmV2X2llZWU7CQkvKiBwcmV2aW91cyByYXRlIGluIElFRUUgc3BlZWRzICovCisJdTggbmV4dF9pZWVlOwkJLyogbmV4dCByYXRlIGluIElFRUUgc3BlZWRzICovCisJdTggcHJldl9yczsJCS8qIHByZXZpb3VzIHJhdGUgdXNlZCBpbiBycyBhbGdvICovCisJdTggbmV4dF9yczsJCS8qIG5leHQgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KKwl1OCBwcmV2X3JzX3RnZzsJCS8qIHByZXZpb3VzIHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLworCXU4IG5leHRfcnNfdGdnOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KKwl1OCB0YWJsZV9yc19pbmRleDsJLyogaW5kZXggaW4gcmF0ZSBzY2FsZSB0YWJsZSBjbWQgKi8KKwl1OCBwcmV2X3RhYmxlX3JzOwkvKiBwcmV2IGluIHJhdGUgdGFibGUgY21kICovCit9OworCiAvKgogICogVGhlc2Ugc2VydmUgYXMgaW5kZXhlcyBpbnRvCiAgKiBzdHJ1Y3QgaXdsX3JhdGVfaW5mbyBpd2xfcmF0ZXNbSVdMX1JBVEVfQ09VTlRdOwpAQCAtNjIsMTIgKzczLDMwIEBACiAJSVdMX1JBVEVfNTRNX0lOREVYLAogCUlXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfUkFURV9DT1VOVCwgLypGSVhNRTpSUzpjaGFuZ2UgdG8gSVdMX1JBVEVfSU5ERVhfQ09VTlQsKi8KKwlJV0xfUkFURV9DT1VOVF8zOTQ1ID0gSVdMX1JBVEVfQ09VTlQgLSAxLAogCUlXTF9SQVRFX0lOVk1fSU5ERVggPSBJV0xfUkFURV9DT1VOVCwKIAlJV0xfUkFURV9JTlZBTElEID0gSVdMX1JBVEVfQ09VTlQsCiB9OwogCiBlbnVtIHsKKwlJV0xfUkFURV82TV9JTkRFWF9UQUJMRSA9IDAsCisJSVdMX1JBVEVfOU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMTJNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzE4TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8yNE1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMzZNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzQ4TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV81NE1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFX0lOVk1fSU5ERVhfVEFCTEUgPSBJV0xfUkFURV9JTlZNX0lOREVYIC0gMSwKK307CisKK2VudW0gewogCUlXTF9GSVJTVF9PRkRNX1JBVEUgPSBJV0xfUkFURV82TV9JTkRFWCwKKwlJV0wzOV9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKIAlJV0xfTEFTVF9PRkRNX1JBVEUgPSBJV0xfUkFURV82ME1fSU5ERVgsCiAJSVdMX0ZJUlNUX0NDS19SQVRFID0gSVdMX1JBVEVfMU1fSU5ERVgsCiAJSVdMX0xBU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xMU1fSU5ERVgsCkBAIC0yMDIsNyArMjMxLDcgQEAKICNkZWZpbmUgSVdMX1JTX0dPT0RfUkFUSU8JCTEyODAwCS8qIDEwMCUgKi8KICNkZWZpbmUgSVdMX1JBVEVfU0NBTEVfU1dJVENICQkxMDg4MAkvKiAgODUlICovCiAjZGVmaW5lIElXTF9SQVRFX0hJR0hfVEgJCTEwODgwCS8qICA4NSUgKi8KLSNkZWZpbmUgSVdMX1JBVEVfSU5DUkVBU0VfVEggICAgICAgICAgICA4OTYwCS8qICA3MCUgKi8KKyNkZWZpbmUgSVdMX1JBVEVfSU5DUkVBU0VfVEgJCTY0MDAJLyogIDUwJSAqLwogI2RlZmluZSBJV0xfUkFURV9ERUNSRUFTRV9USAkJMTkyMAkvKiAgMTUlICovCiAKIC8qIHBvc3NpYmxlIGFjdGlvbnMgd2hlbiBpbiBsZWdhY3kgbW9kZSAqLwpAQCAtMjQ4LDYgKzI3Nyw3IEBACiAjZGVmaW5lIFRJTUVfV1JBUF9BUk9VTkQoeCwgeSkgKCgoeSkgPiAoeCkpID8gKHkpIC0gKHgpIDogKDAtKHgpKSArICh5KSkKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfcmF0ZV9pbmZvIGl3bF9yYXRlc1tJV0xfUkFURV9DT1VOVF07CitleHRlcm4gY29uc3Qgc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIGl3bDM5NDVfcmF0ZXNbSVdMX1JBVEVfQ09VTlRfMzk0NV07CiAKIGVudW0gaXdsX3RhYmxlX3R5cGUgewogCUxRX05PTkUsCkBAIC0zMDMsNiArMzMzLDIzIEBACiAJcmV0dXJuIHJhdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggaXdsMzk0NV9nZXRfcHJldl9pZWVlX3JhdGUodTggcmF0ZV9pbmRleCkKK3sKKwl1OCByYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlX2luZGV4XS5wcmV2X2llZWU7CisKKwlpZiAocmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKQorCQlyYXRlID0gcmF0ZV9pbmRleDsKKwlyZXR1cm4gcmF0ZTsKK30KKworLyoqCisgKiBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdCAtIEluaXRpYWxpemUgdGhlIHJhdGUgc2NhbGUgdGFibGUgYmFzZWQgb24gYXNzb2MgaW5mbworICoKKyAqIFRoZSBzcGVjaWZpYyB0aHJvdWdocHV0IHRhYmxlIHVzZWQgaXMgYmFzZWQgb24gdGhlIHR5cGUgb2YgbmV0d29yaworICogdGhlIGFzc29jaWF0ZWQgd2l0aCwgaW5jbHVkaW5nIEEsIEIsIEcsIGFuZCBHIHcvIFRHRyBwcm90ZWN0aW9uCisgKi8KK2V4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzMzIgc3RhX2lkKTsKKwogLyoqCiAgKiBpd2xfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FsbGJhY2tzCiAgKgpAQCAtMzE0LDYgKzM2MSw3IEBACiAgKgogICovCiBleHRlcm4gaW50IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwogCiAvKioKICAqIGl3bF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBjYWxsYmFja3MKQEAgLTMyMiw1ICszNzAsNiBAQAogICogdGhlIGRyaXZlciBpcyB1bmxvYWRlZC4KICAqLwogZXh0ZXJuIHZvaWQgaXdsYWduX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3Rlcih2b2lkKTsKIAogI2VuZGlmIC8qIF9faXdsX2Fnbl9fcnNfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAxMjllMmQzLi4wZGIzYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNDQsNiArNDQsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKKyNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpd2xhZ24iCisKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgogI2luY2x1ZGUgIml3bC1jb3JlLmgiCkBAIC02MSw5ICs2Myw3IEBACiAKIC8qCiAgKiBtb2R1bGUgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuCi0gKiBOT1RFOiBEUlZfTkFNRSBpcyBkZWZpbmVkIGluIGl3bHdpZmkuaCBmb3IgdXNlIGJ5IGl3bC1kZWJ1Zy5oIGFuZCBwcmludGsKICAqLwotCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgV2lyZWxlc3MgV2lGaSBMaW5rIEFHTiBkcml2ZXIgZm9yIExpbnV4IgogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTcyLDcgKzcyLDcgQEAKICNkZWZpbmUgVkQKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAorI2lmZGVmIENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCiAjZGVmaW5lIFZTICJzIgogI2Vsc2UKICNkZWZpbmUgVlMKQEAgLTk0LDY2ICs5NCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCi0KLXN0YXRpYyB2b2lkIGl3bF9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQotewotCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCi0JaWYgKGh3X2RlY3J5cHQpCi0JCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCWVsc2UKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKLQotfQotCi0vKioKLSAqIGl3bF9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKLSAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KLSAqCi0gKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKLSAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAotICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KLSAqLwotc3RhdGljIGludCBpd2xfZnVsbF9yeG9uX3JlcXVpcmVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQotCS8qIFRoZXNlIGl0ZW1zIGFyZSBvbmx5IHNldHRhYmxlIGZyb20gdGhlIGZ1bGwgUlhPTiBjb21tYW5kICovCi0JaWYgKCEoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24uYnNzaWRfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ub2RlX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLndsYXBfYnNzaWRfYWRkcikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSAhPSBwcml2LT5hY3RpdmVfcnhvbi5kZXZfdHlwZSkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsICE9IHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYWlyX3Byb3BhZ2F0aW9uICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5haXJfcHJvcGFnYXRpb24pIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyAhPQotCSAgICAgcHJpdi0+YWN0aXZlX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5hc3NvY19pZCAhPSBwcml2LT5hY3RpdmVfcnhvbi5hc3NvY19pZCkpCi0JCXJldHVybiAxOwotCi0JLyogZmxhZ3MsIGZpbHRlcl9mbGFncywgb2ZkbV9iYXNpY19yYXRlcywgYW5kIGNja19iYXNpY19yYXRlcyBjYW4KLQkgKiBiZSB1cGRhdGVkIHdpdGggdGhlIFJYT05fQVNTT0MgY29tbWFuZCAtLSBob3dldmVyIG9ubHkgc29tZQotCSAqIGZsYWcgdHJhbnNpdGlvbnMgYXJlIGFsbG93ZWQgdXNpbmcgUlhPTl9BU1NPQyAqLwotCi0JLyogQ2hlY2sgaWYgd2UgYXJlIG5vdCBzd2l0Y2hpbmcgYmFuZHMgKi8KLQlpZiAoKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykgIT0KLQkgICAgKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgc3dpdGNoaW5nIGFzc29jaWF0aW9uIHRvZ2dsZSAqLwotCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgIT0KLQkJKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogaXdsX2NvbW1pdF9yeG9uIC0gY29tbWl0IHN0YWdpbmdfcnhvbiB0byBoYXJkd2FyZQogICoKQEAgLTE3OSw5ICsxMTksOSBAQAogCSAqIDUwMDAsIGJ1dCB3aWxsIG5vdCBkYW1hZ2UgNDk2NSAqLwogCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TRUxGX0NUU19FTjsKIAotCXJldCA9IGl3bF9hZ25fY2hlY2tfcnhvbl9jbWQoJnByaXYtPnN0YWdpbmdfcnhvbik7CisJcmV0ID0gaXdsX2NoZWNrX3J4b25fY21kKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJJbnZhbGlkIFJYT04gY29uZmlndXJhdGlvbi4gIE5vdCBjb21taXR0aW5nLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xOTEsNyArMTMxLDcgQEAKIAlpZiAoIWl3bF9mdWxsX3J4b25fcmVxdWlyZWQocHJpdikpIHsKIAkJcmV0ID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2KTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgKCVkKVxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAoJWQpXG4iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC0yMDcsNyArMTQ3LDcgQEAKIAkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBhc3NvY2lhdGVkIGZyb20gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAJICogYmVmb3JlIHdlIGFwcGx5IHRoZSBuZXcgY29uZmlnICovCiAJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIG5ld19hc3NvYykgewotCQlJV0xfREVCVUdfSU5GTygiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlRvZ2dsaW5nIGFzc29jaWF0ZWQgYml0IG9uIGN1cnJlbnQgUlhPTlxuIik7CiAJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCkBAIC0yMTgsMTIgKzE1OCwxMiBAQAogCQkgKiBhY3RpdmVfcnhvbiBiYWNrIHRvIHdoYXQgaXQgd2FzIHByZXZpb3VzbHkgKi8KIAkJaWYgKHJldCkgewogCQkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7Ci0JCQlJV0xfRVJST1IoIkVycm9yIGNsZWFyaW5nIEFTU09DX01TSyAoJWQpXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIlNlbmRpbmcgUlhPTlxuIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZW5kaW5nIFJYT05cbiIKIAkJICAgICAgICIqIHdpdGglcyBSWE9OX0ZJTFRFUl9BU1NPQ19NU0tcbiIKIAkJICAgICAgICIqIGNoYW5uZWwgPSAlZFxuIgogCQkgICAgICAgIiogYnNzaWQgPSAlcE1cbiIsCkBAIC0yNDIsNyArMTgyLDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwpAQCAtMjU2LDcgKzE5Niw3IEBACiAJLyogQWRkIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBzbyB3ZSBjYW4gc2VuZCBicm9hZGNhc3QgZnJhbWVzICovCiAJaWYgKGl3bF9yeG9uX2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCAwKSA9PQogCQkJCQkJSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfRVJST1IoIkVycm9yIGFkZGluZyBCUk9BRENBU1QgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI2NywxMyArMjA3LDE1IEBACiAJCQlyZXQgPSBpd2xfcnhvbl9hZGRfc3RhdGlvbihwcml2LAogCQkJCQkgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyLCAxKTsKIAkJCWlmIChyZXQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIFRYLlxuIik7CisJCQkJSVdMX0VSUihwcml2LAorCQkJCQkiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIFRYLlxuIik7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCQlwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkID0gMTsKIAkJCWlmIChwcml2LT5kZWZhdWx0X3dlcF9rZXkgJiYKIAkJCSAgICBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAwKSkKLQkJCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBzZW5kIFdFUCBzdGF0aWMga2V5LlxuIik7CisJCQkJSVdMX0VSUihwcml2LAorCQkJCQkiQ291bGQgbm90IHNlbmQgV0VQIHN0YXRpYyBrZXkuXG4iKTsKIAkJfQogCiAJCS8qIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbgpAQCAtMjgyLDcgKzIyNCw3IEBACiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKIAkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fY21kKSwgJnByaXYtPnN0YWdpbmdfcnhvbik7CiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBuZXcgUlhPTiAoJWQpXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgUlhPTiAoJWQpXG4iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQltZW1jcHkoYWN0aXZlX3J4b24sICZwcml2LT5zdGFnaW5nX3J4b24sIHNpemVvZigqYWN0aXZlX3J4b24pKTsKQEAgLTI5NCw3ICsyMzYsNyBAQAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwogCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIHRydWUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nIFRYIHBvd2VyICglZClcbiIsIHJldCk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgVFggcG93ZXIgKCVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTMwOCwyNSArMjUwLDExIEBACiAJaXdsX2NvbW1pdF9yeG9uKHByaXYpOwogfQogCi1zdGF0aWMgaW50IGl3bF9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bF9idF9jbWQgYnRfY21kID0gewotCQkuZmxhZ3MgPSAzLAotCQkubGVhZF90aW1lID0gMHhBQSwKLQkJLm1heF9raWxsID0gMSwKLQkJLmtpbGxfYWNrX21hc2sgPSAwLAotCQkua2lsbF9jdHNfbWFzayA9IDAsCi0JfTsKLQotCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPTkZJRywKLQkJCQlzaXplb2Yoc3RydWN0IGl3bF9idF9jbWQpLCAmYnRfY21kKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX2NsZWFyX2ZyZWVfZnJhbWVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCi0JSVdMX0RFQlVHX0lORk8oIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlZCBmcmFtZXMgb24gcHJlLWFsbG9jYXRlZCBoZWFwIG9uIGNsZWFyLlxuIiwKIAkJICAgICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewpAQCAtMzM3LDcgKzI2NSw3IEBACiAJfQogCiAJaWYgKHByaXYtPmZyYW1lc19jb3VudCkgewotCQlJV0xfV0FSTklORygiJWQgZnJhbWVzIHN0aWxsIGluIHVzZS4gIERpZCB3ZSBsb3NlIG9uZT9cbiIsCisJCUlXTF9XQVJOKHByaXYsICIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKIAkJCSAgICBwcml2LT5mcmFtZXNfY291bnQpOwogCQlwcml2LT5mcmFtZXNfY291bnQgPSAwOwogCX0KQEAgLTM1MCw3ICsyNzgsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKIAkJZnJhbWUgPSBremFsbG9jKHNpemVvZigqZnJhbWUpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFmcmFtZSkgewotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgZnJhbWUhXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMzg2LDMxICszMTQsNiBAQAogCXJldHVybiBwcml2LT5pYnNzX2JlYWNvbi0+bGVuOwogfQogCi1zdGF0aWMgdTggaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgaTsKLQlpbnQgcmF0ZV9tYXNrOwotCi0JLyogU2V0IHJhdGUgbWFzayovCi0JaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKLQkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfQ0NLX1JBVEVTX01BU0s7Ci0JZWxzZQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX1JBVEVTX01BU0s7Ci0KLQkvKiBGaW5kIGxvd2VzdCB2YWxpZCByYXRlICovCi0JZm9yIChpID0gSVdMX1JBVEVfMU1fSU5ERVg7IGkgIT0gSVdMX1JBVEVfSU5WQUxJRDsKLQkJCQkJaSA9IGl3bF9yYXRlc1tpXS5uZXh0X2llZWUpIHsKLQkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGkpKQotCQkJcmV0dXJuIGl3bF9yYXRlc1tpXS5wbGNwOwotCX0KLQotCS8qIE5vIHZhbGlkIHJhdGUgd2FzIGZvdW5kLiBBc3NpZ24gdGhlIGxvd2VzdCBvbmUgKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyZXR1cm4gSVdMX1JBVEVfMU1fUExDUDsKLQllbHNlCi0JCXJldHVybiBJV0xfUkFURV82TV9QTENQOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGl3bF9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpd2xfZnJhbWUgKmZyYW1lLCB1OCByYXRlKQogewpAQCAtNDUyLDcgKzM1NSw3IEBACiAJZnJhbWUgPSBpd2xfZ2V0X2ZyZWVfZnJhbWUocHJpdik7CiAKIAlpZiAoIWZyYW1lKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IG9idGFpbiBmcmVlIGZyYW1lIGJ1ZmZlciBmb3IgYmVhY29uICIKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IG9idGFpbiBmcmVlIGZyYW1lIGJ1ZmZlciBmb3IgYmVhY29uICIKIAkJCSAgImNvbW1hbmQuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDY5LDYgKzM3MiwxNTkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBpd2xfdGZkX3RiX2dldF9hZGRyKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKK3sKKwlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKKworCWRtYV9hZGRyX3QgYWRkciA9IGdldF91bmFsaWduZWRfbGUzMigmdGItPmxvKTsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCisJCWFkZHIgfD0KKwkJKChkbWFfYWRkcl90KShsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pICYgMHhGKSA8PCAxNikgPDwgMTY7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1MTYgaXdsX3RmZF90Yl9nZXRfbGVuKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKK3sKKwlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKKworCXJldHVybiBsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pID4+IDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdGZkX3NldF90YihzdHJ1Y3QgaXdsX3RmZCAqdGZkLCB1OCBpZHgsCisJCQkJICBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pCit7CisJc3RydWN0IGl3bF90ZmRfdGIgKnRiID0gJnRmZC0+dGJzW2lkeF07CisJdTE2IGhpX25fbGVuID0gbGVuIDw8IDQ7CisKKwlwdXRfdW5hbGlnbmVkX2xlMzIoYWRkciwgJnRiLT5sbyk7CisJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKQorCQloaV9uX2xlbiB8PSAoKGFkZHIgPj4gMTYpID4+IDE2KSAmIDB4RjsKKworCXRiLT5oaV9uX2xlbiA9IGNwdV90b19sZTE2KGhpX25fbGVuKTsKKworCXRmZC0+bnVtX3RicyA9IGlkeCArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggaXdsX3RmZF9nZXRfbnVtX3RicyhzdHJ1Y3QgaXdsX3RmZCAqdGZkKQoreworCXJldHVybiB0ZmQtPm51bV90YnMgJiAweDFmOworfQorCisvKioKKyAqIGl3bF9od190eHFfZnJlZV90ZmQgLSBGcmVlIGFsbCBjaHVua3MgcmVmZXJlbmNlZCBieSBURkQgW3R4cS0+cS5yZWFkX3B0cl0KKyAqIEBwcml2IC0gZHJpdmVyIHByaXZhdGUgZGF0YQorICogQHR4cSAtIHR4IHF1ZXVlCisgKgorICogRG9lcyBOT1QgYWR2YW5jZSBhbnkgVEZEIGNpcmN1bGFyIGJ1ZmZlciByZWFkL3dyaXRlIGluZGV4ZXMKKyAqIERvZXMgTk9UIGZyZWUgdGhlIFRGRCBpdHNlbGYgKHdoaWNoIGlzIHdpdGhpbiBjaXJjdWxhciBidWZmZXIpCisgKi8KK3ZvaWQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3sKKwlzdHJ1Y3QgaXdsX3RmZCAqdGZkX3RtcCA9IChzdHJ1Y3QgaXdsX3RmZCAqKXR4cS0+dGZkczsKKwlzdHJ1Y3QgaXdsX3RmZCAqdGZkOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OworCWludCBpbmRleCA9IHR4cS0+cS5yZWFkX3B0cjsKKwlpbnQgaTsKKwlpbnQgbnVtX3RiczsKKworCXRmZCA9ICZ0ZmRfdG1wW2luZGV4XTsKKworCS8qIFNhbml0eSBjaGVjayBvbiBudW1iZXIgb2YgY2h1bmtzICovCisJbnVtX3RicyA9IGl3bF90ZmRfZ2V0X251bV90YnModGZkKTsKKworCWlmIChudW1fdGJzID49IElXTF9OVU1fT0ZfVEJTKSB7CisJCUlXTF9FUlIocHJpdiwgIlRvbyBtYW55IGNodW5rczogJWlcbiIsIG51bV90YnMpOworCQkvKiBAdG9kbyBpc3N1ZSBmYXRhbCBlcnJvciwgaXQgaXMgcXVpdGUgc2VyaW91cyBzaXR1YXRpb24gKi8KKwkJcmV0dXJuOworCX0KKworCS8qIFVubWFwIHR4X2NtZCAqLworCWlmIChudW1fdGJzKQorCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCisJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCS8qIFVubWFwIGNodW5rcywgaWYgYW55LiAqLworCWZvciAoaSA9IDE7IGkgPCBudW1fdGJzOyBpKyspIHsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGl3bF90ZmRfdGJfZ2V0X2FkZHIodGZkLCBpKSwKKwkJCQlpd2xfdGZkX3RiX2dldF9sZW4odGZkLCBpKSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJaWYgKHR4cS0+dHhiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSk7CisJCQl0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpIC0gMV0gPSBOVUxMOworCQl9CisJfQorfQorCitpbnQgaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLAorCQkJCSB1OCByZXNldCwgdTggcGFkKQoreworCXN0cnVjdCBpd2xfcXVldWUgKnE7CisJc3RydWN0IGl3bF90ZmQgKnRmZCwgKnRmZF90bXA7CisJdTMyIG51bV90YnM7CisKKwlxID0gJnR4cS0+cTsKKwl0ZmRfdG1wID0gKHN0cnVjdCBpd2xfdGZkICopdHhxLT50ZmRzOworCXRmZCA9ICZ0ZmRfdG1wW3EtPndyaXRlX3B0cl07CisKKwlpZiAocmVzZXQpCisJCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7CisKKwludW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOworCisJLyogRWFjaCBURkQgY2FuIHBvaW50IHRvIGEgbWF4aW11bSAyMCBUeCBidWZmZXJzICovCisJaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCisJCQkgIElXTF9OVU1fT0ZfVEJTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJQlVHX09OKGFkZHIgJiB+RE1BX0JJVF9NQVNLKDM2KSk7CisJaWYgKHVubGlrZWx5KGFkZHIgJiB+SVdMX1RYX0RNQV9NQVNLKSkKKwkJSVdMX0VSUihwcml2LCAiVW5hbGlnbmVkIGFkZHJlc3MgPSAlbGx4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIpOworCisJaXdsX3RmZF9zZXRfdGIodGZkLCBudW1fdGJzLCBhZGRyLCBsZW4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUZWxsIG5pYyB3aGVyZSB0byBmaW5kIGNpcmN1bGFyIGJ1ZmZlciBvZiBUeCBGcmFtZSBEZXNjcmlwdG9ycyBmb3IKKyAqIGdpdmVuIFR4IHF1ZXVlLCBhbmQgZW5hYmxlIHRoZSBETUEgY2hhbm5lbCB1c2VkIGZvciB0aGF0IHF1ZXVlLgorICoKKyAqIDQ5NjUgc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQorICogY2hhbm5lbHMgc3VwcG9ydGVkIGluIGhhcmR3YXJlLgorICovCitpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBDaXJjdWxhciBidWZmZXIgKFRGRCBxdWV1ZSBpbiBEUkFNKSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX0NCQkNfUVVFVUUodHhxX2lkKSwKKwkJCSAgICAgdHhxLT5xLmRtYV9hZGRyID4+IDgpOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogTWlzYy4gaW50ZXJuYWwgc3RhdGUgYW5kIGhlbHBlciBmdW5jdGlvbnMKQEAgLTQ4Miw3ICs1MzgsNyBAQAogCXN0cnVjdCBpd2xfaHRfaW5mbyAqaXdsX2NvbmYgPSAmcHJpdi0+Y3VycmVudF9odF9jb25maWc7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IFxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlcjogXG4iKTsKIAogCWlmICghaXdsX2NvbmYtPmlzX2h0KQogCQlyZXR1cm47CkBAIC01MjAsOSArNTc2LDkgQEAKIAkgKi8KIAogCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOwotCWlmIChwcml2LT5ody0+Y29uZi5odC5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUykKKwlpZiAoY29uZl9pc19odDQwX21pbnVzKCZwcml2LT5ody0+Y29uZikpCiAJCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19CRUxPVzsKLQllbHNlIGlmKHByaXYtPmh3LT5jb25mLmh0LmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpCisJZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoJnByaXYtPmh3LT5jb25mKSkKIAkJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0FCT1ZFOwogCiAJLyogSWYgbm8gYWJvdmUgb3IgYmVsb3cgY2hhbm5lbCBzdXBwbGllZCBkaXNhYmxlIEZBVCBjaGFubmVsICovCkBAIC01NDIsMzkgKzU5OCw3IEBACiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotfQotCi0vKgotICogUW9TICBzdXBwb3J0Ci0qLwotc3RhdGljIHZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKQotewotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyA9IDA7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnF1ZXVlX3JlcXVlc3QgJiYKLQkgICAgIXByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC50eG9wX3JlcXVlc3QpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KLQkJCVFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSzsKLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7Ci0KLQlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0gUU9TX1BBUkFNX0ZMR19UR05fTVNLOwotCi0JaWYgKGZvcmNlIHx8IGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19RT1MoInNlbmQgUW9TIGNtZCB3aXRoIFFvcyBhY3RpdmU9JWQgRkxBR1M9MHglWFxuIiwKLQkJCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlLAotCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MpOwotCi0JCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUU9TX1BBUkFNLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQpLAotCQkJCSAgICAgICAmcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLCBOVUxMKTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKICNkZWZpbmUgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTAk0MDk2CkBAIC01ODgsNiArNjEyLDkgQEAKIAkJCQkJLyBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwogCW5ld192YWwgPSBiZWFjb25fdmFsIC8gYmVhY29uX2ZhY3RvcjsKIAorCWlmICghbmV3X3ZhbCkKKwkJbmV3X3ZhbCA9IE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7CisKIAlyZXR1cm4gbmV3X3ZhbDsKIH0KIApAQCAtNjI0LDExNyArNjUxLDE2IEBACiAJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsID0gY3B1X3RvX2xlMzIoaW50ZXJ2YWxfdG0gLSByZW0pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCUlXTF9ERUJVR19BU1NPQygiYmVhY29uIGludGVydmFsICVkIGJlYWNvbiB0aW1lciAlZCBiZWFjb24gdGltICVkXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiYmVhY29uIGludGVydmFsICVkIGJlYWNvbiB0aW1lciAlZCBiZWFjb24gdGltICVkXG4iLAogCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSwKIAkJCWxlMzJfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCksCiAJCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdykpOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KLQkJICAgIH4oUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLCi0JCSAgICAgIHwgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQl9IGVsc2UgewotCQkvKiBDb3BpZWQgZnJvbSBpd2xfcG9zdF9hc3NvY2lhdGUoKSAqLwotCQlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0JCWVsc2UKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19CQU5EXzI0R19NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfQ0NLX01TSzsKLQl9Ci19Ci0KLS8qCi0gKiBpbml0aWFsaXplIHJ4b24gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMgZnJvbSBlZXByb20KLSAqLwotc3RhdGljIHZvaWQgaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQotCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0FQOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9FU1M7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0lCU1M7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyA9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLIHwKLQkJCQkJCSAgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX1NOSUZGRVI7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyB8Ci0JCSAgICBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgfCBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSAlZFxuIiwgbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotI2lmIDAKLQkvKiBUT0RPOiAgRmlndXJlIG91dCB3aGVuIHNob3J0X3ByZWFtYmxlIHdvdWxkIGJlIHNldCBhbmQgY2FjaGUgZnJvbQotCSAqIHRoYXQgKi8KLQlpZiAoIWh3X3RvX2xvY2FsKHByaXYtPmh3KS0+c2hvcnRfcHJlYW1ibGUpCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLSNlbmRpZgotCi0JY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsCi0JCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKLQotCWlmICghY2hfaW5mbykKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQkvKgotCSAqIGluIHNvbWUgY2FzZSBBIGNoYW5uZWxzIGFyZSBhbGwgbm9uIElCU1MKLQkgKiBpbiB0aGlzIGNhc2UgZm9yY2UgQi9HIGNoYW5uZWwKLQkgKi8KLQlpZiAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmCi0JICAgICEoaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSkKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoX2luZm8tPmNoYW5uZWwpOwotCXByaXYtPmJhbmQgPSBjaF9pbmZvLT5iYW5kOwotCi0JaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBwcml2LT5iYW5kKTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkgICAgKElXTF9PRkRNX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jY2tfYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX0NDS19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gfihSWE9OX0ZMR19DSEFOTkVMX01PREVfTUlYRURfTVNLIHwKLQkJCQkJUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX1BVUkVfNDBfTVNLKTsKLQltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLndsYXBfYnNzaWRfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKLQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyA9IDB4ZmY7Ci0JaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwotfQotCiBzdGF0aWMgaW50IGl3bF9zZXRfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKQogewogCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIG1vZGUpOworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAogCWl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKQEAgLTc0NSw4ICs2NzEsOCBAQAogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7CiAJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAwbXNcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTc1NSw1NCArNjgxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsX3NldF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpodyA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwotCWludCBpOwotCi0JaHcgPSBpd2xfZ2V0X2h3X21vZGUocHJpdiwgcHJpdi0+YmFuZCk7Ci0JaWYgKCFodykgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byBzZXQgcmF0ZTogdW5hYmxlIHRvIGdldCBodyBtb2RlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYtPmFjdGl2ZV9yYXRlID0gMDsKLQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaHctPm5fYml0cmF0ZXM7IGkrKykgewotCQlyYXRlID0gJihody0+Yml0cmF0ZXNbaV0pOwotCQlpZiAocmF0ZS0+aHdfdmFsdWUgPCBJV0xfUkFURV9DT1VOVCkKLQkJCXByaXYtPmFjdGl2ZV9yYXRlIHw9ICgxIDw8IHJhdGUtPmh3X3ZhbHVlKTsKLQl9Ci0KLQlJV0xfREVCVUdfUkFURSgiU2V0IGFjdGl2ZV9yYXRlID0gJTB4LCBhY3RpdmVfcmF0ZV9iYXNpYyA9ICUweFxuIiwKLQkJICAgICAgIHByaXYtPmFjdGl2ZV9yYXRlLCBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyk7Ci0KLQkvKgotCSAqIElmIGEgYmFzaWMgcmF0ZSBpcyBjb25maWd1cmVkLCB0aGVuIHVzZSBpdCAoYWRkaW5nIElXTF9SQVRFXzFNX01BU0spCi0JICogb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZGVmYXVsdCBvZiBhbGwgQ0NLIHJhdGVzIGFuZCA2LCAxMiwgMjQgZm9yCi0JICogT0ZETQotCSAqLwotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSykKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgSVdMX0NDS19SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfQ0NLX1JBVEUpICYgMHhGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0KLQlpZiAocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgKElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0sgfCBJV0xfUkFURV82TV9NQVNLKSkgPj4KLQkJICAgICAgSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCQkgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci19Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEdlbmVyaWMgUlggaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMKQEAgLTgxNywxOSArNjk1LDE5IEBACiAKIAlwYWxpdmUgPSAmcGt0LT51LmFsaXZlX2ZyYW1lOwogCi0JSVdMX0RFQlVHX0lORk8oIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSB1Y29kZSBzdGF0dXMgMHglMDhYIHJldmlzaW9uICIKIAkJICAgICAgICIweCUwMVggMHglMDFYXG4iLAogCQkgICAgICAgcGFsaXZlLT5pc192YWxpZCwgcGFsaXZlLT52ZXJfdHlwZSwKIAkJICAgICAgIHBhbGl2ZS0+dmVyX3N1YnR5cGUpOwogCiAJaWYgKHBhbGl2ZS0+dmVyX3N1YnR5cGUgPT0gSU5JVElBTElaRV9TVUJUWVBFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXphdGlvbiBBbGl2ZSByZWNlaXZlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsCiAJCSAgICAgICAmcGt0LT51LmFsaXZlX2ZyYW1lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfaW5pdF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmluaXRfYWxpdmVfc3RhcnQ7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlLCAmcGt0LT51LmFsaXZlX2ZyYW1lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfYWxpdmVfcmVzcCkpOwogCQlwd29yayA9ICZwcml2LT5hbGl2ZV9zdGFydDsKQEAgLTg0MSw1NSArNzE5LDcgQEAKIAkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgcHdvcmssCiAJCQkJICAgbXNlY3NfdG9famlmZmllcyg1KSk7CiAJZWxzZQotCQlJV0xfV0FSTklORygidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9yZXBseV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCi0JSVdMX0VSUk9SKCJFcnJvciBSZXBseSB0eXBlIDB4JTA4WCBjbWQgJXMgKDB4JTAyWCkgIgotCQkic2VxIDB4JTA0WCBzZXIgMHglMDhYXG4iLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfdHlwZSksCi0JCWdldF9jbWRfc3RyaW5nKHBrdC0+dS5lcnJfcmVzcC5jbWRfaWQpLAotCQlwa3QtPnUuZXJyX3Jlc3AuY21kX2lkLAotCQlsZTE2X3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuYmFkX2NtZF9zZXFfbnVtKSwKLQkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX2luZm8pKTsKLX0KLQotI2RlZmluZSBUWF9TVEFUVVNfRU5UUlkoeCkgY2FzZSBUWF9TVEFUVVNfRkFJTF8gIyMgeDogcmV0dXJuICN4Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9jc2Eoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2xfY3NhX25vdGlmaWNhdGlvbiAqY3NhID0gJihwa3QtPnUuY3NhX25vdGlmKTsKLQlJV0xfREVCVUdfMTFIKCJDU0Egbm90aWY6IGNoYW5uZWwgJWQsIHN0YXR1cyAlZFxuIiwKLQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSwgbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpKTsKLQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotfQotCi1zdGF0aWMgdm9pZCBpd2xfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2xfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKLQlJV0xfREVCVUdfUlgoInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAotCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQlJV0xfREVCVUdfUkFESU8oIkR1bXBpbmcgJWQgYnl0ZXMgb2YgdW5oYW5kbGVkICIKLQkJCSJub3RpZmljYXRpb24gZm9yICVzOlxuIiwKLQkJCWxlMzJfdG9fY3B1KHBrdC0+bGVuKSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSk7Ci0JaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SQURJTywgcGt0LT51LnJhdywgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKKwkJSVdMX1dBUk4ocHJpdiwgInVDb2RlIGRpZCBub3QgcmVzcG9uZCBPSy5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCBpd2xfYmdfYmVhY29uX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC05MDIsNyArNzMyLDcgQEAKIAliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LT5odywgcHJpdi0+dmlmKTsKIAogCWlmICghYmVhY29uKSB7Ci0JCUlXTF9FUlJPUigidXBkYXRlIGJlYWNvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk1MCw3ICs3ODAsNyBAQAogCQkoc3RydWN0IGl3bDQ5NjVfYmVhY29uX25vdGlmICopcGt0LT51LnJhdzsKIAl1OCByYXRlID0gaXdsX2h3X2dldF9yYXRlKGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIucmF0ZV9uX2ZsYWdzKTsKIAotCUlXTF9ERUJVR19SWCgiYmVhY29uIHN0YXR1cyAleCByZXRyaWVzICVkIGlzcyAlZCAiCisJSVdMX0RFQlVHX1JYKHByaXYsICJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKIAkJInRzZiAlZCAlZCByYXRlICVkXG4iLAogCQlsZTMyX3RvX2NwdShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnUuc3RhdHVzKSAmIFRYX1NUQVRVU19NU0ssCiAJCWJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIuZmFpbHVyZV9mcmFtZSwKQEAgLTk3Myw3ICs4MDMsNyBAQAogCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KHBrdC0+dS5jYXJkX3N0YXRlX25vdGlmLmZsYWdzKTsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHByaXYtPnN0YXR1czsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCiAJCQkgIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIiwKIAkJCSAgKGZsYWdzICYgU1dfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iKTsKIApAQCAtMTA0NiwxMSArODc2LDcgQEAKIAkJZ290byBlcnI7CiAKIAlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKLQkJdTMyIHZhbDsKLQkJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DRkdfUE9XRVJfU09VUkNFLAotCQkJCQkgICAgJnZhbCk7Ci0KLQkJaWYgKHZhbCAmIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUKQorCQlpZiAocGNpX3BtZV9jYXBhYmxlKHByaXYtPnBjaV9kZXYsIFBDSV9EM2NvbGQpKQogCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCQkgICAgICAgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZBVVgsCiAJCQkJCSAgICAgICB+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKQEAgLTExMzUsNyArOTYxLDcgQEAKIAogCS8qIFJ4IGludGVycnVwdCwgYnV0IG5vdGhpbmcgc2VudCBmcm9tIHVDb2RlICovCiAJaWYgKGkgPT0gcikKLQkJSVdMX0RFQlVHKElXTF9ETF9SWCwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CiAKIAlpZiAoaXdsX3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAoUlhfUVVFVUVfU0laRSAvIDIpKQogCQlmaWxsX3J4ID0gMTsKQEAgLTExNzUsMTIgKzEwMDEsMTIgQEAKIAkJICogICBoYW5kbGUgdGhvc2UgdGhhdCBuZWVkIGhhbmRsaW5nIHZpYSBmdW5jdGlvbiBpbgogCQkgKiAgIHJ4X2hhbmRsZXJzIHRhYmxlLiAgU2VlIGl3bF9zZXR1cF9yeF9oYW5kbGVycygpICovCiAJCWlmIChwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdKSB7Ci0JCQlJV0xfREVCVUcoSVdMX0RMX1JYLCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsCisJCQlJV0xfREVCVUdfUlgocHJpdiwgInIgPSAlZCwgaSA9ICVkLCAlcywgMHglMDJ4XG4iLCByLAogCQkJCWksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksIHBrdC0+aGRyLmNtZCk7CiAJCQlwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdIChwcml2LCByeGIpOwogCQl9IGVsc2UgewogCQkJLyogTm8gaGFuZGxpbmcgbmVlZGVkICovCi0JCQlJV0xfREVCVUcoSVdMX0RMX1JYLAorCQkJSVdMX0RFQlVHX1JYKHByaXYsCiAJCQkJInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CkBAIC0xMTkzLDcgKzEwMTksNyBAQAogCQkJaWYgKHJ4YiAmJiByeGItPnNrYikKIAkJCQlpd2xfdHhfY21kX2NvbXBsZXRlKHByaXYsIHJ4Yik7CiAJCQllbHNlCi0JCQkJSVdMX1dBUk5JTkcoIkNsYWltIG51bGwgcnhiP1xuIik7CisJCQkJSVdMX1dBUk4ocHJpdiwgIkNsYWltIG51bGwgcnhiP1xuIik7CiAJCX0KIAogCQkvKiBGb3Igbm93IHdlIGp1c3QgZG9uJ3QgcmUtdXNlIGFueXRoaW5nLiAgV2UgY2FuIHR3ZWFrIHRoaXMKQEAgLTEyMjksMjcgKzEwNTUsNiBAQAogCWl3bF9yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyB2b2lkIGl3bF9wcmludF9yeF9jb25maWdfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKLQotCUlXTF9ERUJVR19SQURJTygiUlggQ09ORklHOlxuIik7Ci0JaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SQURJTywgKHU4ICopIHJ4b24sIHNpemVvZigqcnhvbikpOwotCUlXTF9ERUJVR19SQURJTygidTE2IGNoYW5uZWw6IDB4JXhcbiIsIGxlMTZfdG9fY3B1KHJ4b24tPmNoYW5uZWwpKTsKLQlJV0xfREVCVUdfUkFESU8oInUzMiBmbGFnczogMHglMDhYXG4iLCBsZTMyX3RvX2NwdShyeG9uLT5mbGFncykpOwotCUlXTF9ERUJVR19SQURJTygidTMyIGZpbHRlcl9mbGFnczogMHglMDh4XG4iLAotCQkJbGUzMl90b19jcHUocnhvbi0+ZmlsdGVyX2ZsYWdzKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBkZXZfdHlwZTogMHgleFxuIiwgcnhvbi0+ZGV2X3R5cGUpOwotCUlXTF9ERUJVR19SQURJTygidTggb2ZkbV9iYXNpY19yYXRlczogMHglMDJ4XG4iLAotCQkJcnhvbi0+b2ZkbV9iYXNpY19yYXRlcyk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBjY2tfYmFzaWNfcmF0ZXM6IDB4JTAyeFxuIiwgcnhvbi0+Y2NrX2Jhc2ljX3JhdGVzKTsKLQlJV0xfREVCVUdfUkFESU8oInU4WzZdIG5vZGVfYWRkcjogJXBNXG4iLCByeG9uLT5ub2RlX2FkZHIpOwotCUlXTF9ERUJVR19SQURJTygidThbNl0gYnNzaWRfYWRkcjogJXBNXG4iLCByeG9uLT5ic3NpZF9hZGRyKTsKLQlJV0xfREVCVUdfUkFESU8oInUxNiBhc3NvY19pZDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpKTsKLX0KLSNlbmRpZgotCiAvKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmx1c2ggYW55IHNjaGVkdWxlZCB0YXNrbGV0ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC0xMjU4LDQ1ICsxMDYzLDYgQEAKIAl0YXNrbGV0X2tpbGwoJnByaXYtPmlycV90YXNrbGV0KTsKIH0KIAotLyoqCi0gKiBpd2xfaXJxX2hhbmRsZV9lcnJvciAtIGNhbGxlZCBmb3IgSFcgb3IgU1cgZXJyb3IgaW50ZXJydXB0IGZyb20gY2FyZAotICovCi1zdGF0aWMgdm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsX2Rvd24gKi8KLQlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLwotCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7Ci0JCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7Ci0JCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdik7Ci0JCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYpOwotCX0KLSNlbmRpZgotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCi0JLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KLQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9GV19FUlJPUlMsCi0JCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7Ci0KLQkJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOwotCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7Ci0JCX0KLQkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBpd2xfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzQxLDcgKzExMDcsNyBAQAogCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKIAkJLyoganVzdCBmb3IgZGVidWcgKi8KIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwotCQlJV0xfREVCVUdfSVNSKCJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCiAJCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwogCX0KICNlbmRpZgpAQCAtMTM1Nyw3ICsxMTIzLDcgQEAKIAogCS8qIE5vdyBzZXJ2aWNlIGFsbCBpbnRlcnJ1cHQgYml0cyBkaXNjb3ZlcmVkIGFib3ZlLiAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfSFdfRVJSKSB7Ci0JCUlXTF9FUlJPUigiTWljcm9jb2RlIEhXIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgSFcgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CiAKIAkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CkBAIC0xMzc1LDEyICsxMTQxLDEyIEBACiAJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CiAJCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KIAkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpCi0JCQlJV0xfREVCVUdfSVNSKCJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgorCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKIAkJCQkgICAgICAidGhlIGZyYW1lL2ZyYW1lcy5cbiIpOwogCiAJCS8qIEFsaXZlIG5vdGlmaWNhdGlvbiB2aWEgUnggaW50ZXJydXB0IHdpbGwgZG8gdGhlIHJlYWwgd29yayAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0FMSVZFKQotCQkJSVdMX0RFQlVHX0lTUigiQWxpdmUgaW50ZXJydXB0XG4iKTsKKwkJCUlXTF9ERUJVR19JU1IocHJpdiwgIkFsaXZlIGludGVycnVwdFxuIik7CiAJfQogI2VuZGlmCiAJLyogU2FmZWx5IGlnbm9yZSB0aGVzZSBiaXRzIGZvciBkZWJ1ZyBjaGVja3MgYmVsb3cgKi8KQEAgLTEzOTMsMTcgKzExNTksMjAgQEAKIAkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykpCiAJCQlod19yZl9raWxsID0gMTsKIAotCQlJV0xfREVCVUcoSVdMX0RMX1JGX0tJTEwsICJSRl9LSUxMIGJpdCB0b2dnbGVkIHRvICVzLlxuIiwKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAogCQkJCWh3X3JmX2tpbGwgPyAiZGlzYWJsZSByYWRpbyIgOiAiZW5hYmxlIHJhZGlvIik7CiAKIAkJLyogZHJpdmVyIG9ubHkgbG9hZHMgdWNvZGUgb25jZSBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgdXAuCi0JCSAqIHRoZSBkcml2ZXIgYXMgd2VsbCB3b24ndCBhbGxvdyBsb2FkaW5nIGlmIFJGS0lMTCBpcyBzZXQKLQkJICogdGhlcmVmb3JlIG5vIG5lZWQgdG8gcmVzdGFydCB0aGUgZHJpdmVyIGZyb20gdGhpcyBoYW5kbGVyCisJCSAqIHRoZSBkcml2ZXIgYWxsb3dzIGxvYWRpbmcgdGhlIHVjb2RlIGV2ZW4gaWYgdGhlIHJhZGlvCisJCSAqIGlzIGtpbGxlZC4gSGVuY2UgdXBkYXRlIHRoZSBraWxsc3dpdGNoIHN0YXRlIGhlcmUuIFRoZQorCQkgKiByZmtpbGwgaGFuZGxlciB3aWxsIGNhcmUgYWJvdXQgcmVzdGFydGluZyBpZiBuZWVkZWQuCiAJCSAqLwotCQlpZiAoIWh3X3JmX2tpbGwgJiYgIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7Ci0JCQlpZiAocHJpdi0+aXNfb3BlbiAmJiAhaXdsX2lzX3Jma2lsbChwcml2KSkKLQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKKwkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKSB7CisJCQlpZiAoaHdfcmZfa2lsbCkKKwkJCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwkJCWVsc2UKKwkJCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZl9raWxsKTsKIAkJfQogCiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfUkZfS0lMTDsKQEAgLTE0MTEsMjEgKzExODAsMjEgQEAKIAogCS8qIENoaXAgZ290IHRvbyBob3QgYW5kIHN0b3BwZWQgaXRzZWxmICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9DVF9LSUxMKSB7Ci0JCUlXTF9FUlJPUigiTWljcm9jb2RlIENUIGtpbGwgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIENUIGtpbGwgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9DVF9LSUxMOwogCX0KIAogCS8qIEVycm9yIGRldGVjdGVkIGJ5IHVDb2RlICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nIDB4JVguXG4iLAotCQkJICBpbnRhKTsKKwkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIFNXIGVycm9yIGRldGVjdGVkLiAiCisJCQkiIFJlc3RhcnRpbmcgMHglWC5cbiIsIGludGEpOwogCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9TV19FUlI7CiAJfQogCiAJLyogdUNvZGUgd2FrZXMgdXAgYWZ0ZXIgcG93ZXItZG93biBzbGVlcCAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7Ci0JCUlXTF9ERUJVR19JU1IoIldha2V1cCBpbnRlcnJ1cHRcbiIpOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJXYWtldXAgaW50ZXJydXB0XG4iKTsKIAkJaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7CiAJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKIAkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOwpAQCAtMTQ0Niw3ICsxMjE1LDcgQEAKIAl9CiAKIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0ZIX1RYKSB7Ci0JCUlXTF9ERUJVR19JU1IoIlR4IGludGVycnVwdFxuIik7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIlR4IGludGVycnVwdFxuIik7CiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfRkhfVFg7CiAJCS8qIEZIIGZpbmlzaGVkIHRvIHdyaXRlLCBzZW5kIGV2ZW50ICovCiAJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlID0gMTsKQEAgLTE0NTQsMTIgKzEyMjMsMTIgQEAKIAl9CiAKIAlpZiAoaW50YSAmIH5oYW5kbGVkKQotCQlJV0xfRVJST1IoIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOworCQlJV0xfRVJSKHByaXYsICJVbmhhbmRsZWQgSU5UQSBiaXRzIDB4JTA4eFxuIiwgaW50YSAmIH5oYW5kbGVkKTsKIAogCWlmIChpbnRhICYgfkNTUl9JTklfU0VUX01BU0spIHsKLQkJSVdMX1dBUk5JTkcoIkRpc2FibGVkIElOVEEgYml0cyAweCUwOHggd2VyZSBwZW5kaW5nXG4iLAorCQlJV0xfV0FSTihwcml2LCAiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCiAJCQkgaW50YSAmIH5DU1JfSU5JX1NFVF9NQVNLKTsKLQkJSVdMX1dBUk5JTkcoIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKKwkJSVdMX1dBUk4ocHJpdiwgIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKIAl9CiAKIAkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KQEAgLTE0NzIsNzEgKzEyNDEsMTMgQEAKIAkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CiAJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKIAkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCQlJV0xfREVCVUdfSVNSKCJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5kIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4LCAiCiAJCQkiZmxhZ3MgMHglMDhseFxuIiwgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoLCBmbGFncyk7CiAJfQogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXdsX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JdTMyIGludGEsIGludGFfbWFzazsKLQl1MzIgaW50YV9maDsKLQlpZiAoIXByaXYpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0KLQkvKiBEaXNhYmxlIChidXQgZG9uJ3QgY2xlYXIhKSBpbnRlcnJ1cHRzIGhlcmUgdG8gYXZvaWQKLQkgKiAgICBiYWNrLXRvLWJhY2sgSVNScyBhbmQgc3BvcmFkaWMgaW50ZXJydXB0cyBmcm9tIG91ciBOSUMuCi0JICogSWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gc2VydmljZSwgdGhlIHRhc2tsZXQgd2lsbCByZS1lbmFibGUgaW50cy4KLQkgKiBJZiB3ZSAqZG9uJ3QqIGhhdmUgc29tZXRoaW5nLCB3ZSdsbCByZS1lbmFibGUgYmVmb3JlIGxlYXZpbmcgaGVyZS4gKi8KLQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7ICAvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBEaXNjb3ZlciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUvcGVuZGluZyAqLwotCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQotCS8qIElnbm9yZSBpbnRlcnJ1cHQgaWYgdGhlcmUncyBub3RoaW5nIGluIE5JQyB0byBzZXJ2aWNlLgotCSAqIFRoaXMgbWF5IGJlIGR1ZSB0byBJUlEgc2hhcmVkIHdpdGggYW5vdGhlciBkZXZpY2UsCi0JICogb3IgZHVlIHRvIHNwb3JhZGljIGludGVycnVwdHMgdGhyb3duIGZyb20gb3VyIE5JQy4gKi8KLQlpZiAoIWludGEgJiYgIWludGFfZmgpIHsKLQkJSVdMX0RFQlVHX0lTUigiSWdub3JlIGludGVycnVwdCwgaW50YSA9PSAwLCBpbnRhX2ZoID09IDBcbiIpOwotCQlnb3RvIG5vbmU7Ci0JfQotCi0JaWYgKChpbnRhID09IDB4RkZGRkZGRkYpIHx8ICgoaW50YSAmIDB4RkZGRkZGRjApID09IDB4YTVhNWE1YTApKSB7Ci0JCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkLiBJdCBtaWdodCBoYXZlIGFscmVhZHkgcmFpc2VkCi0JCSAqIGFuIGludGVycnVwdCAqLwotCQlJV0xfV0FSTklORygiSEFSRFdBUkUgR09ORT8/IElOVEEgPT0gMHglMDh4XG4iLCBpbnRhKTsKLQkJZ290byB1bnBsdWdnZWQ7Ci0JfQotCi0JSVdMX0RFQlVHX0lTUigiSVNSIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAotCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwotCi0JaW50YSAmPSB+Q1NSX0lOVF9CSVRfU0NEOwotCi0JLyogaXdsX2lycV90YXNrbGV0KCkgd2lsbCBzZXJ2aWNlIGludGVycnVwdHMgYW5kIHJlLWVuYWJsZSB0aGVtICovCi0JaWYgKGxpa2VseShpbnRhIHx8IGludGFfZmgpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7Ci0KLSB1bnBsdWdnZWQ6Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLQotIG5vbmU6Ci0JLyogcmUtZW5hYmxlIGludGVycnVwdHMgaGVyZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHNlcnZpY2UuICovCi0JLyogb25seSBSZS1lbmFibGUgaWYgZGlhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gSVJRX05PTkU7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiB1Q29kZSBkb3dubG9hZCBmdW5jdGlvbnMKQEAgLTE1ODQsNyArMTI5NSw3IEBACiAJCXNwcmludGYoYnVmLCAiJXMlZCVzIiwgbmFtZV9wcmUsIGluZGV4LCAiLnVjb2RlIik7CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnVjb2RlX3JhdywgYnVmLCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCUlXTF9FUlJPUigiJXMgZmlybXdhcmUgZmlsZSByZXEgZmFpbGVkOiBSZWFzb24gJWRcbiIsCisJCQlJV0xfRVJSKHByaXYsICIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6ICVkXG4iLAogCQkJCSAgYnVmLCByZXQpOwogCQkJaWYgKHJldCA9PSAtRU5PRU5UKQogCQkJCWNvbnRpbnVlOwpAQCAtMTU5Miw5ICsxMzAzLDEyIEBACiAJCQkJZ290byBlcnJvcjsKIAkJfSBlbHNlIHsKIAkJCWlmIChpbmRleCA8IGFwaV9tYXgpCi0JCQkJSVdMX0VSUk9SKCJMb2FkZWQgZmlybXdhcmUgJXMsIHdoaWNoIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgQVBJIHYldSBpbnN0ZWFkLlxuIiwKKwkJCQlJV0xfRVJSKHByaXYsICJMb2FkZWQgZmlybXdhcmUgJXMsICIKKwkJCQkJIndoaWNoIGlzIGRlcHJlY2F0ZWQuICIKKwkJCQkJIlBsZWFzZSB1c2UgQVBJIHYldSBpbnN0ZWFkLlxuIiwKIAkJCQkJICBidWYsIGFwaV9tYXgpOwotCQkJSVdMX0RFQlVHX0lORk8oIkdvdCBmaXJtd2FyZSAnJXMnIGZpbGUgKCV6ZCBieXRlcykgZnJvbSBkaXNrXG4iLAorCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiR290IGZpcm13YXJlICclcycgZmlsZSAoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCiAJCQkJICAgICAgIGJ1ZiwgdWNvZGVfcmF3LT5zaXplKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjA1LDcgKzEzMTksNyBAQAogCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgZ290IGF0IGxlYXN0IG91ciBoZWFkZXIhICovCiAJaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IHNpemVvZigqdWNvZGUpKSB7Ci0JCUlXTF9FUlJPUigiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CkBAIC0xNjI2LDcgKzEzNDAsNyBAQAogCSAqIG9uIHRoZSBBUEkgdmVyc2lvbiByZWFkIGZyb20gZmlyd2FyZSBoZWFkZXIgZnJvbSBoZXJlIG9uIGZvcndhcmQgKi8KIAogCWlmIChhcGlfdmVyIDwgYXBpX21pbiB8fCBhcGlfdmVyID4gYXBpX21heCkgewotCQlJV0xfRVJST1IoIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgorCQlJV0xfRVJSKHByaXYsICJEcml2ZXIgdW5hYmxlIHRvIHN1cHBvcnQgeW91ciBmaXJtd2FyZSBBUEkuICIKIAkJCSAgIkRyaXZlciBzdXBwb3J0cyB2JXUsIGZpcm13YXJlIGlzIHYldS5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCQlwcml2LT51Y29kZV92ZXIgPSAwOwpAQCAtMTYzNCwyOCArMTM0OCwyOCBAQAogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAlpZiAoYXBpX3ZlciAhPSBhcGlfbWF4KQotCQlJV0xfRVJST1IoIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkIHYldSwgIgorCQlJV0xfRVJSKHByaXYsICJGaXJtd2FyZSBoYXMgb2xkIEFQSSB2ZXJzaW9uLiBFeHBlY3RlZCB2JXUsICIKIAkJCSAgImdvdCB2JXUuIE5ldyBmaXJtd2FyZSBjYW4gYmUgb2J0YWluZWQgIgogCQkJICAiZnJvbSBodHRwOi8vd3d3LmludGVsbGludXh3aXJlbGVzcy5vcmcuXG4iLAogCQkJICBhcGlfbWF4LCBhcGlfdmVyKTsKIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIiBsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKLQkJICAgICAgIElXTF9VQ09ERV9NQUpPUihwcml2LT51Y29kZV92ZXIpLAotCQkgICAgICAgSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfU0VSSUFMKHByaXYtPnVjb2RlX3ZlcikpOworCUlXTF9JTkZPKHByaXYsICJsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKKwkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCisJICAgICAgIElXTF9VQ09ERV9NSU5PUihwcml2LT51Y29kZV92ZXIpLAorCSAgICAgICBJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCisJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7CiAKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHVjb2RlIHZlcnNpb24gcmF3ID0gMHgleFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIHVjb2RlIHZlcnNpb24gcmF3ID0gMHgleFxuIiwKIAkJICAgICAgIHByaXYtPnVjb2RlX3Zlcik7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBpbnN0IHNpemUgPSAldVxuIiwKIAkJICAgICAgIGluc3Rfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBkYXRhIHNpemUgPSAldVxuIiwKIAkJICAgICAgIGRhdGFfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBpbml0IGluc3Qgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwKIAkJICAgICAgIGluaXRfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBkYXRhIHNpemUgPSAldVxuIiwKIAkJICAgICAgIGluaXRfZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBib290IGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgYm9vdF9zaXplKTsKIAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCkBAIC0xNjYzLDcgKzEzNzcsNyBAQAogCQlpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemUgKwogCQlpbml0X2RhdGFfc2l6ZSArIGJvb3Rfc2l6ZSkgewogCi0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBmaWxlIHNpemUgJWQgdG9vIHNtYWxsXG4iLAorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZmlsZSBzaXplICVkIHRvbyBzbWFsbFxuIiwKIAkJCSAgICAgICAoaW50KXVjb2RlX3Jhdy0+c2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CkBAIC0xNjcxLDM2ICsxMzg1LDMzIEBACiAKIAkvKiBWZXJpZnkgdGhhdCB1Q29kZSBpbWFnZXMgd2lsbCBmaXQgaW4gY2FyZCdzIFNSQU0gKi8KIAlpZiAoaW5zdF9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkgICAgICAgaW5zdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAlpZiAoZGF0YV9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWRhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChpbml0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTwotCQkgICAgKCJ1Q29kZSBpbml0IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAotCQkgICAgICBpbml0X3NpemUpOworCQlJV0xfSU5GTyhwcml2LCAidUNvZGUgaW5pdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJCWluaXRfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChpbml0X2RhdGFfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJSVdMX0lORk8ocHJpdiwgInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJICAgICAgaW5pdF9kYXRhX3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAlpZiAoYm9vdF9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTwotCQkgICAgKCJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAotCQkgICAgICBib290X3NpemUpOworCQlJV0xfSU5GTyhwcml2LCAidUNvZGUgYm9vdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJCWJvb3Rfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQpAQCAtMTc0OSwxNiArMTQ2MCwxNiBAQAogCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb25zIChmaXJzdCBibG9jayBvZiBkYXRhIGluIGZpbGUpICovCiAJc3JjID0gJnVjb2RlLT5kYXRhWzBdOwogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfY29kZS52X2FkZHIsIHNyYywgbGVuKTsKLQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGluc3RyIGJ1ZiB2YWRkciA9IDB4JXAsIHBhZGRyID0gMHglMDh4XG4iLAogCQlwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgKHUzMilwcml2LT51Y29kZV9jb2RlLnBfYWRkcik7CiAKIAkvKiBSdW50aW1lIGRhdGEgKDJuZCBibG9jaykKIAkgKiBOT1RFOiAgQ29weSBpbnRvIGJhY2t1cCBidWZmZXIgd2lsbCBiZSBkb25lIGluIGl3bF91cCgpICAqLwogCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2RhdGEubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBkYXRhIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgc3JjLCBsZW4pOwogCkBAIC0xNzY2LDcgKzE0NzcsNyBAQAogCWlmIChpbml0X3NpemUpIHsKIAkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZV07CiAJCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlWmRcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICVaZFxuIiwKIAkJCQlsZW4pOwogCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdC52X2FkZHIsIHNyYywgbGVuKTsKIAl9CkBAIC0xNzc1LDcgKzE0ODYsNyBAQAogCWlmIChpbml0X2RhdGFfc2l6ZSkgewogCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplXTsKIAkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKLQkJSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlWmRcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgZGF0YSBsZW4gJVpkXG4iLAogCQkJICAgICAgIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0X2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CiAJfQpAQCAtMTc4Myw3ICsxNDk0LDcgQEAKIAkvKiBCb290c3RyYXAgaW5zdHJ1Y3Rpb25zICg1dGggYmxvY2spICovCiAJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArIGluaXRfZGF0YV9zaXplXTsKIAlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgYm9vdCBpbnN0ciBsZW4gJVpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9ib290LnZfYWRkciwgc3JjLCBsZW4pOwogCiAJLyogV2UgaGF2ZSBvdXIgY29waWVzIG5vdywgYWxsb3cgT1MgcmVsZWFzZSBpdHMgY29waWVzICovCkBAIC0xNzkxLDcgKzE1MDIsNyBAQAogCXJldHVybiAwOwogCiAgZXJyX3BjaV9hbGxvYzoKLQlJV0xfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKKwlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcGNpIG1lbW9yeVxuIik7CiAJcmV0ID0gLUVOT01FTTsKIAlpd2xfZGVhbGxvY191Y29kZV9wY2kocHJpdik7CiAKQEAgLTE4MTUsMTIgKzE1MjYsMTIgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAogCWlmIChwcml2LT5jYXJkX2FsaXZlLmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWxpdmUgZmFpbGVkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTE4MzAsMTUgKzE1NDEsMTUgQEAKIAlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCiAJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFsaXZlX25vdGlmeShwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbiBbbnRmXTogJWRcbiIsCi0JCQkgICAgcmV0KTsKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbiBbbnRmXTogJWRcbiIsIHJldCk7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTE4NjMsNiArMTU3NCw3IEBACiAJfSBlbHNlIHsKIAkJLyogSW5pdGlhbGl6ZSBvdXIgcnhfY29uZmlnIGRhdGEgKi8KIAkJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgcHJpdi0+aXdfbW9kZSk7CisJCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAkJbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCkBAIC0xODc5LDcgKzE1OTEsNyBAQAogCiAJaXdsX2xlZHNfcmVnaXN0ZXIocHJpdik7CiAKLQlJV0xfREVCVUdfSU5GTygiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJBTElWRSBwcm9jZXNzaW5nIGNvbXBsZXRlLlxuIik7CiAJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIApAQCAtMTkxMyw3ICsxNjI1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBleGl0X3BlbmRpbmcgPSB0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBnb2luZyBkb3duXG4iKTsKIAogCWlmICghZXhpdF9wZW5kaW5nKQogCQlzZXRfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwpAQCAtMjAyNCwxMiArMTczNiwxMiBAQAogCWludCByZXQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX1dBUk5JTkcoIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoIXByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciB8fCAhcHJpdi0+dWNvZGVfZGF0YS52X2FkZHIpIHsKLQkJSVdMX0VSUk9SKCJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmd1cFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZ3VwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yMDQxLDcgKzE3NTMsNyBAQAogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgJXMgUkYgS2lsbCBzd2l0Y2hcbiIsCisJCUlXTF9XQVJOKHByaXYsICJSYWRpbyBkaXNhYmxlZCBieSAlcyBSRiBLaWxsIHN3aXRjaFxuIiwKIAkJICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSA/ICJIVyIgOiAiU1ciKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjA1MCw3ICsxNzYyLDcgQEAKIAogCXJldCA9IGl3bF9od19uaWNfaW5pdChwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXQgbmljXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXQgbmljXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTIwODMsNyArMTc5NSw4IEBACiAJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmxvYWRfdWNvZGUocHJpdik7CiAKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsCisJCQkJcmV0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIwOTMsNyArMTgwNiw3IEBACiAJCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwogCQlpd2xfbmljX3N0YXJ0KHByaXYpOwogCi0JCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBjb21pbmcgdXBcbiIpOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTIxMDQsNyArMTgxNyw3IEBACiAKIAkvKiB0cmllZCB0byByZXN0YXJ0IGFuZCBjb25maWcgdGhlIGRldmljZSBmb3IgYXMgbG9uZyBhcyBvdXIKIAkgKiBwYXRpZW5jZSBjb3VsZCB3aXRoc3RhbmQgKi8KLQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIGRldmljZSBhZnRlciAlZCBhdHRlbXB0cy5cbiIsIGkpOworCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0aWFsaXplIGRldmljZSBhZnRlciAlZCBhdHRlbXB0cy5cbiIsIGkpOwogCXJldHVybiAtRUlPOwogfQogCkBAIC0yMTQxLDQwICsxODU0LDYgQEAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsX2JnX3JmX2tpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIHJmX2tpbGwpOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLAotCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCi0JCQkgICJkZXZpY2VcbiIpOwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9IGVsc2UgewotCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCi0JCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQotCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKLQotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKLQkJCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKLQkJCQkJICAiZGlzYWJsZWQgYnkgU1cgc3dpdGNoXG4iKTsKLQkJZWxzZQotCQkJSVdMX1dBUk5JTkcoIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKLQkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgotCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfYmdfcnVuX3RpbWVfY2FsaWJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwKQEAgLTIyNDQsMTEgKzE5MjMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiBBUCBtb2RlXG4iLCBfX2Z1bmNfXyk7CisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCUlXTF9ERUJVR19BU1NPQygiQXNzb2NpYXRlZCBhcyAlZCB0bzogJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQXNzb2NpYXRlZCBhcyAlZCB0bzogJXBNXG4iLAogCQkJcHJpdi0+YXNzb2NfaWQsIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpOwogCiAKQEAgLTIyNzEsNyArMTk1MCw3IEBACiAJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCSAgICAgIHNpemVvZihwcml2LT5yeG9uX3RpbWluZyksICZwcml2LT5yeG9uX3RpbWluZyk7CiAJaWYgKHJldCkKLQkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKKwkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKIAkJCSAgICAiQXR0ZW1wdGluZyB0byBjb250aW51ZS5cbiIpOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CkBAIC0yMjgxLDcgKzE5NjAsNyBAQAogCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAlwcml2LT5zdGFnaW5nX3J4b24uYXNzb2NfaWQgPSBjcHVfdG9fbGUxNihwcml2LT5hc3NvY19pZCk7CiAKLQlJV0xfREVCVUdfQVNTT0MoImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5iZWFjb25faW50KTsKIAogCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKQpAQCAtMjMxNyw3ICsxOTk2LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluICVkIG1vZGVcbiIsCisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluICVkIG1vZGVcbiIsCiAJCQkgIF9fZnVuY19fLCBwcml2LT5pd19tb2RlKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjM1MywzMCArMjAzMiw4IEBACiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJldDsKLQl1MTYgcGNpX2NtZDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpKSB7Ci0JCUlXTF9FUlJPUigiRmFpbCB0byBwY2lfZW5hYmxlX2RldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwY2lfcmVzdG9yZV9zdGF0ZShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQotCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7Ci0JaWYgKHBjaV9jbWQgJiBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpIHsKLQkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgaXdsX2lzciwgSVJRRl9TSEFSRUQsCi0JCQkgIERSVl9OQU1FLCBwcml2KTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7Ci0JCWdvdG8gb3V0X2Rpc2FibGVfbXNpOwotCX0KKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCS8qIHdlIHNob3VsZCBiZSB2ZXJpZnlpbmcgdGhlIGRldmljZSBpcyByZWFkeSB0byBiZSBvcGVuZWQgKi8KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CkBAIC0yMzg4LDkgKzIwNDUsOSBAQAogCWlmICghcHJpdi0+dWNvZGVfY29kZS5sZW4pIHsKIAkJcmV0ID0gaXdsX3JlYWRfdWNvZGUocHJpdik7CiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHJlYWQgbWljcm9jb2RlOiAlZFxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtMjQwMSwxMiArMjA1OCwxMiBAQAogCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwogCiAJaWYgKHJldCkKLQkJZ290byBvdXRfcmVsZWFzZV9pcnE7CisJCXJldHVybiByZXQ7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJZ290byBvdXQ7CiAKLQlJV0xfREVCVUdfSU5GTygiU3RhcnQgVVAgd29yayBkb25lLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0IFVQIHdvcmsgZG9uZS5cbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CkBAIC0yNDE4LDM2ICsyMDc1LDI2IEBACiAJCQlVQ09ERV9SRUFEWV9USU1FT1VUKTsKIAlpZiAoIXJldCkgewogCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKKwkJCUlXTF9FUlIocHJpdiwgIlNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCiAJCQkJamlmZmllc190b19tc2VjcyhVQ09ERV9SRUFEWV9USU1FT1VUKSk7Ci0JCQlyZXQgPSAtRVRJTUVET1VUOwotCQkJZ290byBvdXRfcmVsZWFzZV9pcnE7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCX0KIAogb3V0OgogCXByaXYtPmlzX29wZW4gPSAxOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXJldHVybiAwOwotCi1vdXRfcmVsZWFzZV9pcnE6Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLW91dF9kaXNhYmxlX21zaToKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwotCXByaXYtPmlzX29wZW4gPSAwOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBmYWlsZWRcbiIpOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9tYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFwcml2LT5pc19vcGVuKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBza2lwXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNraXBcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDY1LDI3ICsyMTEyLDI3IEBACiAJaXdsX2Rvd24ocHJpdik7CiAKIAlmbHVzaF93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKLQlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOwotCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQlwY2lfc2F2ZV9zdGF0ZShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+cGNpX2Rldik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwkvKiBlbmFibGUgaW50ZXJydXB0cyBhZ2FpbiBpbiBvcmRlciB0byByZWNlaXZlIHJma2lsbCBjaGFuZ2VzICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUNEVU1QKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQ0RVTVAocHJpdiwgImVudGVyXG4iKTsKIAotCUlXTF9ERUJVR19UWCgiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCisJSVdMX0RFQlVHX1RYKHByaXYsICJkZXYtPnhtaXQoJWQgYnl0ZXMpIGF0IHJhdGUgMHglMDJ4XG4iLCBza2ItPmxlbiwKIAkJICAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSktPmJpdHJhdGUpOwogCiAJaWYgKGl3bF90eF9za2IocHJpdiwgc2tiKSkKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAotCUlXTF9ERUJVR19NQUNEVU1QKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQ0RVTVAocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0yNDk1LDEwICsyMTQyLDEwIEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOwogCiAJaWYgKHByaXYtPnZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC0yNTExLDcgKzIxNTgsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChjb25mLT5tYWNfYWRkcikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIlNldCAlcE1cbiIsIGNvbmYtPm1hY19hZGRyKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJTZXQgJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CiAJCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAl9CiAKQEAgLTI1MjEsNyArMjE2OCw3IEBACiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNTQyLDEyICsyMTg5LDEyIEBACiAJdTE2IGNoYW5uZWw7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CiAKLQlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCA9IGNvbmYtPmh0LmVuYWJsZWQ7CisJcHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOwogCiAJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYgaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRi1LSUxMIC0gd2FpdGluZyBmb3IgdUNvZGVcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYtS0lMTCAtIHdhaXRpbmcgZm9yIHVDb2RlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNTU1LDE0ICsyMjAyLDE0IEBACiAJCWl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8ocHJpdik7CiAKIAlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICh1bmxpa2VseSghcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5kaXNhYmxlX2h3X3NjYW4gJiYKIAkJICAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2Nhbm5pbmdcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gc2Nhbm5pbmdcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjU3MCwxNCArMjIxNywxNCBAQAogCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLCBjaGFubmVsKTsKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGludmFsaWQgY2hhbm5lbFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgogCSAgICAhaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSB7Ci0JCUlXTF9FUlJPUigiY2hhbm5lbCAlZCBpbiBiYW5kICVkIG5vdCBJQlNTIGNoYW5uZWxcbiIsCisJCUlXTF9FUlIocHJpdiwgImNoYW5uZWwgJWQgaW4gYmFuZCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAogCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTI2MTUsMTIgKzIyNjIsMTIgQEAKICNlbmRpZgogCiAJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBraWxsXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIGtpbGxcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yNjMwLDIyICsyMjc3LDI1IEBACiAJZWxzZQogCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTU9ERV9DQU0pOwogCWlmIChyZXQpCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoIlRYIFBvd2VyIG9sZD0lZCBuZXc9JWRcbiIsCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJUWCBQb3dlciBvbGQ9JWQgbmV3PSVkXG4iLAogCQkJICAgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIGNvbmYtPnBvd2VyX2xldmVsKTsKIAogCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgY29uZi0+cG93ZXJfbGV2ZWwsIGZhbHNlKTsKIAogCWl3bF9zZXRfcmF0ZShwcml2KTsKIAorCS8qIGNhbGwgdG8gZW5zdXJlIHRoYXQgNDk2NSByeF9jaGFpbiBpcyBzZXQgcHJvcGVybHkgaW4gbW9uaXRvciBtb2RlICovCisJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOworCiAJaWYgKG1lbWNtcCgmcHJpdi0+YWN0aXZlX3J4b24sCiAJCSAgICZwcml2LT5zdGFnaW5nX3J4b24sIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKSkKIAkJaXdsX2NvbW1pdF9yeG9uKHByaXYpOwogCWVsc2UKLQkJSVdMX0RFQlVHX0lORk8oIk5vIHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vIHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb24uXG4iKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CkBAIC0yNjcyLDcgKzIzMjIsNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAogCQkJCXNpemVvZihwcml2LT5yeG9uX3RpbWluZyksICZwcml2LT5yeG9uX3RpbWluZyk7CiAJCWlmIChyZXQpCi0JCQlJV0xfV0FSTklORygiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgorCQkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKIAkJCQkJIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CkBAIC0yNzI2LDcgKzIzNzYsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChwcml2LT52aWYgIT0gdmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI3NDgsNyArMjM5OCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGNvbmYtPmJzc2lkKQotCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkOiAlcE1cbiIsIGNvbmYtPmJzc2lkKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CiAKIC8qCiAgKiB2ZXJ5IGR1YmlvdXMgY29kZSB3YXMgaGVyZTsgdGhlIHByb2JlIGZpbHRlcmluZyBmbGFnIGlzIG5ldmVyIHNldDoKQEAgLTI3NjEsNyArMjQxMSw3IEBACiAJCWlmICghY29uZi0+YnNzaWQpIHsKIAkJCWNvbmYtPmJzc2lkID0gcHJpdi0+bWFjX2FkZHI7CiAJCQltZW1jcHkocHJpdi0+YnNzaWQsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQgd2FzIHNldCB0bzogJXBNXG4iLAogCQkJCQkgICBjb25mLT5ic3NpZCk7CiAJCX0KIAkJaWYgKHByaXYtPmlic3NfYmVhY29uKQpAQCAtMjc3OCw5ICsyNDI4LDkgQEAKIAkJLyogSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgSFcgc2NhbiBnb2luZyBvbiBpbiB0aGUgYmFja2dyb3VuZAogCQkgKiB0aGVuIHdlIG5lZWQgdG8gY2FuY2VsIGl0IGVsc2UgdGhlIFJYT04gYmVsb3cgd2lsbCBmYWlsLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCisJCQlJV0xfV0FSTihwcml2LCAiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzICIKIAkJCQkgICAgImFmdGVyIDEwMG1zXG4iKTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQpAQCAtMjgwOCw2NCArMjQ1OCwxOCBAQAogCX0KIAogIGRvbmU6Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKLQkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7Ci0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCX0KLQotCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncwotCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgotCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCi0JICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgotCSAqLwotCi0JKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAotCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKLX0KLQogc3RhdGljIHZvaWQgaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIApAQCAtMjg4MCw3ICsyNDg0LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogfQogCkBAIC0yODkyLDEwICsyNDk2LDEwIEBACiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRVJQX1BSRUFNQkxFICVkXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9QUkVBTUJMRSAlZFxuIiwKIAkJCQkgICBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKIAkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwpAQCAtMjkwNCw3ICsyNTA4LDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9DVFMgJWRcbiIsIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9DVFMgJWRcbiIsIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOwogCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCAmJiAocHJpdi0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKSkKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CiAJCWVsc2UKQEAgLTI5MTcsNyArMjUyMSw3IEBACiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYXMgdGhpcyBmdW5jdGlvbiBzaG91bGQKIAkJICogbmV2ZXIgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICovCiAJCWlmIChXQVJOX09OX09OQ0UoaW5faW50ZXJydXB0KCkpKQpAQCAtMjkzOSwxMDggKzI1NDMsNDkgQEAKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQl9IGVsc2UgewogCQkJcHJpdi0+YXNzb2NfaWQgPSAwOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJESVNBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CiAJCX0KIAl9IGVsc2UgaWYgKGNoYW5nZXMgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgcHJpdi0+YXNzb2NfaWQpIHsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKIAkJCWl3bF9zZW5kX3J4b25fYXNzb2MocHJpdik7CiAJfQogCiB9CiAKLXN0YXRpYyBpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlyZXQgPSAtRUlPOwotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiBXZSBkb24ndCBzY2hlZHVsZSBzY2FuIHdpdGhpbiBuZXh0X3NjYW5famlmZmllcyBwZXJpb2QuCi0JICogQXZvaWQgc2Nhbm5pbmcgZHVyaW5nIHBvc3NpYmxlIEVBUE9MIGV4Y2hhbmdlLCByZXR1cm4KLQkgKiBzdWNjZXNzIGltbWVkaWF0ZWx5LgotCSAqLwotCWlmIChwcml2LT5uZXh0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkgewotCQlJV0xfREVCVUdfU0NBTigic2NhbiByZWplY3RlZDogd2l0aGluIG5leHQgc2NhbiBwZXJpb2RcbiIpOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8qIGlmIHdlIGp1c3QgZmluaXNoZWQgc2NhbiBhc2sgZm9yIGRlbGF5ICovCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCi0JICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLCBqaWZmaWVzKSkgewotCQlJV0xfREVCVUdfU0NBTigic2NhbiByZWplY3RlZDogd2l0aGluIHByZXZpb3VzIHNjYW4gcGVyaW9kXG4iKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoc3NpZF9sZW4pIHsKLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKLQkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gIG1pbl90KHU4LCBzc2lkX2xlbiwgSVdfRVNTSURfTUFYX1NJWkUpOwotCQltZW1jcHkocHJpdi0+ZGlyZWN0X3NzaWQsIHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7Ci0JfSBlbHNlIHsKLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKLQl9Ci0KLQlyZXQgPSBpd2xfc2Nhbl9pbml0aWF0ZShwcml2KTsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgY29uc3QgdTggKmFkZHIsCiAJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCiB7CiAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWl3bF91cGRhdGVfdGtpcF9rZXkocHJpdiwga2V5Y29uZiwgYWRkciwgaXYzMiwgcGhhc2Uxa2V5KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bF9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgICBjb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQl1OCBzdGFfaWQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwotCXU4IGlzX2RlZmF1bHRfd2VwX2tleSA9IDA7CisJY29uc3QgdTggKmFkZHI7CisJaW50IHJldDsKKwl1OCBzdGFfaWQ7CisJYm9vbCBpc19kZWZhdWx0X3dlcF9rZXkgPSBmYWxzZTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKHByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQotCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRkcikpCi0JCS8qIG9ubHkgc3VwcG9ydCBwYWlyd2lzZSBrZXlzICovCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQorCWFkZHIgPSBzdGEgPyBzdGEtPmFkZHIgOiBpd2xfYmNhc3RfYWRkcjsKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwogCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSAlcE0gbm90IGluIHN0YXRpb24gbWFwLlxuIiwKIAkJCQkgICBhZGRyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTMwNzAsNyArMjYxNSw3IEBACiAJCWVsc2UKIAkJCXJldCA9IGl3bF9zZXRfZHluYW1pY19rZXkocHJpdiwga2V5LCBzdGFfaWQpOwogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiZW5hYmxlIGh3Y3J5cHRvIGtleVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW5hYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6CiAJCWlmIChpc19kZWZhdWx0X3dlcF9rZXkpCkBAIC0zMDc4LDEzICsyNjIzLDEzIEBACiAJCWVsc2UKIAkJCXJldCA9IGl3bF9yZW1vdmVfZHluYW1pY19rZXkocHJpdiwga2V5LCBzdGFfaWQpOwogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiZGlzYWJsZSBod2NyeXB0byBrZXlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMDk2LDE1ICsyNjQxLDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocXVldWUgPj0gQUNfTlVNKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHF1ZXVlID49IEFDX05VTSAlZFxuIiwgcXVldWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMxMjgsNyArMjY3Myw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEzOCw3ICsyNjgzLDcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19IVCgiQS1NUERVIGFjdGlvbiBvbiBhZGRyICVwTSB0aWQgJWRcbiIsCisJSVdMX0RFQlVHX0hUKHByaXYsICJBLU1QRFUgYWN0aW9uIG9uIGFkZHIgJXBNIHRpZCAlZFxuIiwKIAkJICAgICBzdGEtPmFkZHIsIHRpZCk7CiAKIAlpZiAoIShwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikpCkBAIC0zMTQ2LDE5ICsyNjkxLDE5IEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgotCQlJV0xfREVCVUdfSFQoInN0YXJ0IFJ4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdGFydCBSeFxuIik7CiAJCXJldHVybiBpd2xfc3RhX3J4X2FnZ19zdGFydChwcml2LCBzdGEtPmFkZHIsIHRpZCwgKnNzbik7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKLQkJSVdMX0RFQlVHX0hUKCJzdG9wIFJ4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdG9wIFJ4XG4iKTsKIAkJcmV0dXJuIGl3bF9zdGFfcnhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgotCQlJV0xfREVCVUdfSFQoInN0YXJ0IFR4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdGFydCBUeFxuIik7CiAJCXJldHVybiBpd2xfdHhfYWdnX3N0YXJ0KHByaXYsIHN0YS0+YWRkciwgdGlkLCBzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBUeFxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAic3RvcCBUeFxuIik7CiAJCXJldHVybiBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOwogCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19IVCgidW5rbm93blxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAidW5rbm93blxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAl9CkBAIC0zMTc0LDEwICsyNzE5LDEwIEBACiAJc3RydWN0IGl3bF9xdWV1ZSAqcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzE5NSw3ICsyNzQwLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMDYsOCArMjc1MSw4IEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKIAlwcml2ID0gaHctPnByaXY7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMTgsNyArMjc2Myw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJbWVtc2V0KCZwcml2LT5jdXJyZW50X2h0X2NvbmZpZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfaHRfaW5mbykpOwpAQCAtMzI0NSw3ICsyNzkwLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMzI3NCw3ICsyODE5LDcgQEAKIAkJCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fUkFEQVIpKQogCQkJCWl3bF9wb3dlcl9kaXNhYmxlX21hbmFnZW1lbnQocHJpdiwgMzAwMCk7CiAKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCBpbiBJQlNTXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCBpbiBJQlNTXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CkBAIC0zMjgzLDcgKzI4MjgsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2xfbWFjX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0zMjkyLDE1ICsyODM3LDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfX2xlNjQgdGltZXN0YW1wOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgSUJTU1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzMxNSw3ICsyODYwLDcgQEAKIAl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKIAlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKQEAgLTMzNTksOCArMjkwNCw3IEBACiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJICAgICAgICI6ICVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwkJSVdMX0VSUihwcml2LCAiJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKIAkJcHJpdi0+ZGVidWdfbGV2ZWwgPSB2YWw7CiAKQEAgLTM0MzksOCArMjk4Myw3IEBACiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwkJSVdMX0lORk8ocHJpdiwgIiVzIGlzIG5vdCBpbiBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKIAkJaXdsX3NldF90eF9wb3dlcihwcml2LCB2YWwsIGZhbHNlKTsKIApAQCAtMzQ3Myw5ICszMDE2LDkgQEAKIAlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzKSAhPSBmbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCiAJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwogCQllbHNlIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJDb21taXQgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwgZmxhZ3MpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1pdCByeG9uLmZsYWdzID0gMHglMDRYXG4iLCBmbGFncyk7CiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CiAJCQlpd2xfY29tbWl0X3J4b24ocHJpdik7CiAJCX0KQEAgLTM1MTIsOSArMzA1NSw5IEBACiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MpICE9IGZpbHRlcl9mbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCiAJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwogCQllbHNlIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1pdHRpbmcgcnhvbi5maWx0ZXJfZmxhZ3MgPSAiCiAJCQkJICAgICAgICIweCUwNFhcbiIsIGZpbHRlcl9mbGFncyk7CiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0KIAkJCQljcHVfdG9fbGUzMihmaWx0ZXJfZmxhZ3MpOwpAQCAtMzUyOSwzMSArMzA3Miw2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoZmlsdGVyX2ZsYWdzLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19maWx0ZXJfZmxhZ3MsCiAJCSAgIHN0b3JlX2ZpbHRlcl9mbGFncyk7CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JbG9uZyB2YWw7Ci0JaW50IHJldCAgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmICghcmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcHJpdi0+cmV0cnlfcmF0ZSA9ICh2YWwgPiAwKSA/IHZhbCA6IDE7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcmV0cnlfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cmV0cnlfcmF0ZSk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihyZXRyeV9yYXRlLCBTX0lXVVNSIHwgU19JUlVTUiwgc2hvd19yZXRyeV9yYXRlLAotCQkgICBzdG9yZV9yZXRyeV9yYXRlKTsKLQogc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMzU3Niw3ICszMDk0LDcgQEAKIAogCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY291bnQ7CkBAIC0zNjU2LDE2ICszMTc0LDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHN0YXRpc3RpY3MsIFNfSVJVR08sIHNob3dfc3RhdGlzdGljcywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCAoaW50KXByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzY3NSw3ICszMTgzLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOworCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTM3MTksOSArMzIyNyw3IEBACiAJJmRldl9hdHRyX2ZsYWdzLmF0dHIsCiAJJmRldl9hdHRyX2ZpbHRlcl9mbGFncy5hdHRyLAogCSZkZXZfYXR0cl9wb3dlcl9sZXZlbC5hdHRyLAotCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKLQkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX3RlbXBlcmF0dXJlLmF0dHIsCiAJJmRldl9hdHRyX3R4X3Bvd2VyLmF0dHIsCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTM3NjQsNiArMzI3MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBwY2lfY21kOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDEuIEFsbG9jYXRpbmcgSFcgZGF0YQpAQCAtMzc4OCw3ICszMjk1LDcgQEAKIAogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogTE9BRCBEUklWRVIgKioqXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CiAJcHJpdi0+Y2ZnID0gY2ZnOwogCXByaXYtPnBjaV9kZXYgPSBwZGV2OwogCkBAIC0zODE2LDggKzMzMjMsNyBAQAogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQkvKiBib3RoIGF0dGVtcHRzIGZhaWxlZDogKi8KIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAotCQkJCURSVl9OQU1FKTsKKwkJCUlXTF9XQVJOKHByaXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJCX0KIAl9CkBAIC0zODM4LDEzICszMzQ0LDEyIEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOwogCiAJaXdsX2h3X2RldGVjdChwcml2KTsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlcyBSRVY9MHglWFxuIiwKKwlJV0xfSU5GTyhwcml2LCAiRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzIFJFVj0weCVYXG4iLAogCQlwcml2LT5jZmctPm5hbWUsIHByaXYtPmh3X3Jldik7CiAKIAkvKiBXZSBkaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCkBAIC0zODU0LDcgKzMzNTksNyBAQAogCS8qIGFtcCBpbml0ICovCiAJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCBBUE1HXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGluaXQgQVBNR1xuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCS8qKioqKioqKioqKioqKioqKgpAQCAtMzg2Myw3ICszMzY4LDcgQEAKIAkvKiBSZWFkIHRoZSBFRVBST00gKi8KIAllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCWVyciA9IGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihwcml2KTsKQEAgLTM4NzIsMTQgKzMzNzcsMTQgQEAKIAogCS8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi8KIAlpd2xfZWVwcm9tX2dldF9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk1BQyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIGNvbnN0YW50cwogCSAqKioqKioqKioqKioqKioqKioqKioqKiovCiAJaWYgKGl3bF9zZXRfaHdfcGFyYW1zKHByaXYpKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKIAkJZ290byBvdXRfZnJlZV9lZXByb207CiAJfQogCkBAIC0zODk5LDcgKzM0MDQsNyBAQAogCS8qIERpc2FibGUgcmFkaW8gKFNXIFJGIEtJTEwpIHZpYSBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIGRyaXZlciAqLwogCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGUpIHsKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCUlXTF9ERUJVR19JTkZPKCJSYWRpbyBkaXNhYmxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioKQEAgLTM5MDksMzggKzM0MTQsNTcgQEAKIAlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAorCXBjaV9lbmFibGVfbXNpKHByaXYtPnBjaV9kZXYpOworCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBpd2xfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJWX05BTUUsIHByaXYpOworCWlmIChlcnIpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CisJCWdvdG8gb3V0X2Rpc2FibGVfbXNpOworCX0KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOwotCQlnb3RvIG91dF91bmluaXRfZHJ2OworCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CiAJfQogCi0KIAlpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2xfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7CiAKLQkvKioqKioqKioqKioqKioqKioqKioKLQkgKiA5LiBDb25jbHVkZQotCSAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSAqIDEwLiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKKwkgKiA5LiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CisJaWYgKHBjaV9jbWQgJiBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpIHsKKwkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOworCX0KKworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwogCWVyciA9IGl3bF9zZXR1cF9tYWMocHJpdik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwogCiAJZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisKKwkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLworCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJiBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKKwkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwllbHNlCisJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCiAJZXJyID0gaXdsX3Jma2lsbF9pbml0KHByaXYpOwogCWlmIChlcnIpCi0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKIAlpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTsKIAlyZXR1cm4gMDsKIApAQCAtMzk0OCw3ICszNDcyLDEwIEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2xfYXR0cmlidXRlX2dyb3VwKTsKLSBvdXRfdW5pbml0X2RydjoKKyBvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKKyBvdXRfZGlzYWJsZV9tc2k6CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCWl3bF91bmluaXRfZHJ2KHByaXYpOwogIG91dF9mcmVlX2VlcHJvbToKIAlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CkBAIC0zOTczLDcgKzM1MDAsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0lORk8oIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CiAKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CkBAIC00MDE5LDYgKzM1NDYsOCBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDA0NCwxOSArMzU3Myw4IEBACiAJCXByaXYtPmlzX29wZW4gPSAxOwogCX0KIAotCS8qIHBjaSBkcml2ZXIgYXNzdW1lcyBzdGF0ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgZnVuY3Rpb24uCi0JICogcGNpIHN0YXRlIGlzIHNhdmVkIGFuZCBkZXZpY2UgZGlzYWJsZWQgd2hlbiBpbnRlcmZhY2UgaXMKLQkgKiBzdG9wcGVkLCBzbyBhdCB0aGlzIHRpbWUgcGNpIGRldmljZSB3aWxsIGFsd2F5cyBiZSBkaXNhYmxlZCAtCi0JICogd2hldGhlciBpbnRlcmZhY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90LiBzYXZpbmcgcGNpIHN0YXRlIG5vdyB3aWxsCi0JICogY2F1c2Ugc2F2ZWQgc3RhdGUgYmUgdGhhdCBvZiBhIGRpc2FibGVkIGRldmljZSwgd2hpY2ggd2lsbCBjYXVzZQotCSAqIHByb2JsZW1zIGR1cmluZyByZXN1bWUgaW4gdGhhdCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgZGlzYWJsZWQgZGV2aWNlLgotCSAqCi0JICogaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCBzYXZlZCBzdGF0ZSAoZnJvbSB3aGVuIGludGVyZmFjZSB3YXMKLQkgKiBzdG9wcGVkKSBpcyB2YWxpZC4gaWYgaW50ZXJmYWNlIHdhcyBuZXZlciB1cCBhdCB0aW1lIG9mIHN1c3BlbmQKLQkgKiB0aGVuIHRoZSBzYXZlZCBzdGF0ZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFzIGl0IHdhcyBzYXZlZCBkdXJpbmcKLQkgKiAucHJvYmUuICovCi0JcGRldi0+c3RhdGVfc2F2ZWQgPSB0cnVlOwotCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwpAQCAtNDA2NSw4ICszNTgzLDE0IEBACiBzdGF0aWMgaW50IGl3bF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bF9tYWNfc3RhcnQocHJpdi0+aHcpOwpAQCAtNDEwNyw2ICszNjMxLDIxIEBACiAvKiA1MTUwIFdpZmkvV2lNYXggKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNDLCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNELCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKKy8qIDYwMDAvNjA1MCBTZXJpZXMgKi8KKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDExMDIsIGl3bDYwMDBfMmFnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODUsIDB4MTExMiwgaXdsNjAwMF8yYWdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMTIyLCBpd2w2MDAwXzJhZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjJCLCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOCwgUENJX0FOWV9JRCwgaXdsNjAwMF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIFBDSV9BTllfSUQsIGl3bDYwMDBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NiwgUENJX0FOWV9JRCwgaXdsNjA1MF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODcsIFBDSV9BTllfSUQsIGl3bDYwNTBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg4LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4OSwgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAorLyogMTAwMCBTZXJpZXMgV2lGaSAqLworCXtJV0xfUENJX0RFVklDRSgweDAwODMsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODQsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAogI2VuZGlmIC8qIENPTkZJR19JV0w1MDAwICovCiAKIAl7MH0KQEAgLTQxMzMsMTMgKzM2NzIsMTQgQEAKIAogCXJldCA9IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXdsX2RyaXZlcik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggZjgzNmVjYy4uNzM1ZjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCXJldHVybiAwOwogZXJyOgotCUlXTF9FUlJPUigiRXJyb3IgJWQgaXRlcmF0aW9uICVkXG4iLCByZXQsIGkpOworCUlXTF9FUlIocHJpdiwgIkVycm9yICVkIGl0ZXJhdGlvbiAlZFxuIiwgcmV0LCBpKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKTsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQl2YWwgPSBkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldOwogCQlzaWxlbmNlX3JlZiA9IG1heChzaWxlbmNlX3JlZiwgdmFsKTsKIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCiAJCQlzaWxlbmNlX3Jzc2lfYSwgc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jLAogCQkJc2lsZW5jZV9yZWYpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJbWF4X25yZ19jY2sgPSAodTMyKSBtYXgobWF4X25yZ19jY2ssIChkYXRhLT5ucmdfdmFsdWVbaV0pKTsKIAltYXhfbnJnX2NjayArPSA2OwogCi0JSVdMX0RFQlVHX0NBTElCKCJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCiAJCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwKIAkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYywgbWF4X25yZ19jY2sgLSA2KTsKIApAQCAtMjM2LDE1ICsyMzYsMTUgQEAKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSsrOwogCWVsc2UKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSA9IDA7Ci0JSVdMX0RFQlVHX0NBTElCKCJjb25zZWN1dGl2ZSBiY25zIHdpdGggZmV3IGZhbHNlIGFsYXJtcyA9ICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY29uc2VjdXRpdmUgYmNucyB3aXRoIGZldyBmYWxzZSBhbGFybXMgPSAldVxuIiwKIAkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOwogCiAJLyogSWYgd2UgZ290IHRvbyBtYW55IGZhbHNlIGFsYXJtcyB0aGlzIHRpbWUsIHJlZHVjZSBzZW5zaXRpdml0eSAqLwogCWlmICgoZmFsc2VfYWxhcm1zID4gbWF4X2ZhbHNlX2FsYXJtcykgJiYKIAkJKGRhdGEtPmF1dG9fY29ycl9jY2sgPiBBVVRPX0NPUlJfTUFYX1RIX0NDSykpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1ID4gbWF4IEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXVcbiIsCiAJCSAgICAgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKLQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gcmVkdWNpbmcgc2Vuc2l0aXZpdHlcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIi4uLiByZWR1Y2luZyBzZW5zaXRpdml0eVxuIik7CiAJCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOwogCQkvKiBTdG9yZSBmb3IgImZld2VyIHRoYW4gZGVzaXJlZCIgb24gbGF0ZXIgYmVhY29uICovCiAJCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IHNpbGVuY2VfcmVmOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCWRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID0gKHMzMilkYXRhLT5ucmdfc2lsZW5jZV9yZWYgLQogCQkJCQkJICAgKHMzMilzaWxlbmNlX3JlZjsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXUsIHNpbGVuY2UgZGlmZiAlZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJub3JtIEZBICV1IDwgbWluIEZBICV1LCBzaWxlbmNlIGRpZmYgJWRcbiIsCiAJCQkgZmFsc2VfYWxhcm1zLCBtaW5fZmFsc2VfYWxhcm1zLAogCQkJIGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmKTsKIApAQCAtMjgwLDE3ICsyODAsMTcgQEAKIAkJCSgoZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPiBOUkdfRElGRikgfHwKIAkJCShkYXRhLT5udW1faW5fY2NrX25vX2ZhID4gTUFYX05VTUJFUl9DQ0tfTk9fRkEpKSkgewogCi0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBpbmNyZWFzaW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGluY3JlYXNpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQkJLyogSW5jcmVhc2UgbnJnIHZhbHVlIHRvIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCiAJCQl2YWwgPSBkYXRhLT5ucmdfdGhfY2NrICsgTlJHX1NURVBfQ0NLOwogCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1pbigodTMyKXJhbmdlcy0+bWluX25yZ19jY2ssIHZhbCk7CiAJCX0gZWxzZSB7Ci0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBidXQgbm90IGNoYW5naW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGJ1dCBub3QgY2hhbmdpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQl9CiAKIAkvKiBFbHNlIHdlIGdvdCBhIGhlYWx0aHkgbnVtYmVyIG9mIGZhbHNlIGFsYXJtcywga2VlcCBzdGF0dXMgcXVvICovCiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCIgRkEgaW4gc2FmZSB6b25lXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgRkEgaW4gc2FmZSB6b25lXG4iKTsKIAkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfR09PRF9SQU5HRTsKIAogCQkvKiBTdG9yZSBmb3IgdXNlIGluICJmZXdlciB0aGFuIGRlc2lyZWQiIHdpdGggbGF0ZXIgYmVhY29uICovCkBAIC0zMDAsNyArMzAwLDcgQEAKIAkJICogICBnaXZlIGl0IHNvbWUgZXh0cmEgbWFyZ2luIGJ5IHJlZHVjaW5nIHNlbnNpdGl2aXR5IGFnYWluCiAJCSAqICAgKGJ1dCBkb24ndCBnbyBiZWxvdyBtZWFzdXJlZCBlbmVyZ3kgb2YgZGVzaXJlZCBSeCkgKi8KIAkJaWYgKElXTF9GQV9UT09fTUFOWSA9PSBkYXRhLT5ucmdfcHJldl9zdGF0ZSkgewotCQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOworCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOwogCQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPiAobWF4X25yZ19jY2sgKyBOUkdfTUFSR0lOKSkKIAkJCQlkYXRhLT5ucmdfdGhfY2NrIC09IE5SR19NQVJHSU47CiAJCQllbHNlCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkgKiBMb3dlciB2YWx1ZSBpcyBoaWdoZXIgZW5lcmd5LCBzbyB3ZSB1c2UgbWF4KCkhCiAJICovCiAJZGF0YS0+bnJnX3RoX2NjayA9IG1heChtYXhfbnJnX2NjaywgZGF0YS0+bnJnX3RoX2Njayk7Ci0JSVdMX0RFQlVHX0NBTElCKCJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CiAKIAlkYXRhLT5ucmdfcHJldl9zdGF0ZSA9IGRhdGEtPm5yZ19jdXJyX3N0YXRlOwogCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCiAJaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAogCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOwogCiAJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtICsgQVVUT19DT1JSX1NURVBfT0ZETTsKQEAgLTM5MCw3ICszOTAsNyBAQAogCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KIAllbHNlIGlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKSB7CiAKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1IDwgbWluIEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXVcbiIsCiAJCQkgICAgIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcyk7CiAKIAkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG0gLSBBVVRPX0NPUlJfU1RFUF9PRkRNOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9CiAJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDEsIHZhbCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJtaW4gRkEgJXUgPCBub3JtIEZBICV1IDwgbWF4IEZBICV1IE9LXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pbiBGQSAldSA8IG5vcm0gRkEgJXUgPCBtYXggRkEgJXUgT0tcbiIsCiAJCQkgbWluX2ZhbHNlX2FsYXJtcywgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTIsMTggKzQ1MiwxOCBAQAogCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+bnJnX3RoX29mZG0pOwogCiAJY21kLnRhYmxlW0hEX0JBUktFUl9DT1JSX1RIX0FERF9NSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDE5MCk7CisJCQkJY3B1X3RvX2xlMTYoMTkwKTsKIAljbWQudGFibGVbSERfQkFSS0VSX0NPUlJfVEhfQUREX01JTl9NUkNfSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDM5MCk7CisJCQkJY3B1X3RvX2xlMTYoMzkwKTsKIAljbWQudGFibGVbSERfT0ZETV9FTkVSR1lfVEhfSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDYyKTsKKwkJCQljcHVfdG9fbGUxNig2Mik7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm9mZG06IGFjICV1IG1yYyAldSB4MSAldSBtcmNfeDEgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAib2ZkbTogYWMgJXUgbXJjICV1IHgxICV1IG1yY194MSAldSB0aHJlc2ggJXVcbiIsCiAJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSwgZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjLAogCQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEsIGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSwKIAkJCWRhdGEtPm5yZ190aF9vZmRtKTsKIAotCUlXTF9ERUJVR19DQUxJQigiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAogCQkJZGF0YS0+YXV0b19jb3JyX2NjaywgZGF0YS0+YXV0b19jb3JyX2Nja19tcmMsCiAJCQlkYXRhLT5ucmdfdGhfY2NrKTsKIApAQCAtNDczLDcgKzQ3Myw3IEBACiAJLyogRG9uJ3Qgc2VuZCBjb21tYW5kIHRvIHVDb2RlIGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQgKi8KIAlpZiAoIW1lbWNtcCgmY21kLnRhYmxlWzBdLCAmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksCiAJCSAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCiAJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKIAlpZiAocmV0KQotCQlJV0xfRVJST1IoIlNFTlNJVElWSVRZX0NNRCBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTRU5TSVRJVklUWV9DTUQgZmFpbGVkXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00OTgsNyArNDk4LDcgQEAKIAlpZiAocHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCkKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0NBTElCKCJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CiAKIAkvKiBDbGVhciBkcml2ZXIncyBzZW5zaXRpdml0eSBhbGdvIGRhdGEgKi8KIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCWRhdGEtPmxhc3RfZmFfY250X2NjayA9IDA7CiAKIAlyZXQgfD0gaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHByaXYpOwotCUlXTF9ERUJVR19DQUxJQigiPDxyZXR1cm4gMHglWFxuIiwgcmV0KTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8cmV0dXJuIDB4JVhcbiIsIHJldCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9pbml0X3NlbnNpdGl2aXR5KTsKIApAQCAtNTYyLDEzICs1NjIsMTMgQEAKIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKIAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiPDwgaW52YWxpZCBkYXRhLlxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDwgaW52YWxpZCBkYXRhLlxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU5NSwxMCArNTk1LDEwIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKIAogCWlmICghcnhfZW5hYmxlX3RpbWUpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCBSWCBFbmFibGUgVGltZSA9PSAwISBcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8IFJYIEVuYWJsZSBUaW1lID09IDAhIFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYzNyw3ICs2MzcsNyBAQAogCW5vcm1fZmFfb2ZkbSA9IGZhX29mZG0gKyBiYWRfcGxjcF9vZmRtOwogCW5vcm1fZmFfY2NrID0gZmFfY2NrICsgYmFkX3BsY3BfY2NrOwogCi0JSVdMX0RFQlVHX0NBTElCKCJjY2s6IGZhICV1IGJhZHAgJXUgIG9mZG06IGZhICV1IGJhZHAgJXVcbiIsIGZhX2NjaywKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNjazogZmEgJXUgYmFkcCAldSAgb2ZkbTogZmEgJXUgYmFkcCAldVxuIiwgZmFfY2NrLAogCQkJYmFkX3BsY3BfY2NrLCBmYV9vZmRtLCBiYWRfcGxjcF9vZmRtKTsKIAogCWl3bF9zZW5zX2F1dG9fY29ycl9vZmRtKHByaXYsIG5vcm1fZmFfb2ZkbSwgcnhfZW5hYmxlX3RpbWUpOwpAQCAtNjkwLDEzICs2OTAsMTMgQEAKIAkgKiAgIHRoZW4gd2UncmUgZG9uZSBmb3JldmVyLiAqLwogCWlmIChkYXRhLT5zdGF0ZSAhPSBJV0xfQ0hBSU5fTk9JU0VfQUNDVU1VTEFURSkgewogCQlpZiAoZGF0YS0+c3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFKQotCQkJSVdMX0RFQlVHX0NBTElCKCJXYWl0IGZvciBub2lzZSBjYWxpYiByZXNldFxuIik7CisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIldhaXQgZm9yIG5vaXNlIGNhbGliIHJlc2V0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiIDw8IEludGVyZmVyZW5jZSBkYXRhIHVuYXZhaWxhYmxlXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgPDwgSW50ZXJmZXJlbmNlIGRhdGEgdW5hdmFpbGFibGVcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC03MDksNyArNzA5LDcgQEAKIAkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKIAkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KIAlpZiAoKHJ4b25fY2hudW0gIT0gc3RhdF9jaG51bSkgfHwgKHJ4b25fYmFuZDI0ICE9IHN0YXRfYmFuZDI0KSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIlN0YXRzIG5vdCBmcm9tIGNoYW49JWQsIGJhbmQyND0lZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGF0cyBub3QgZnJvbSBjaGFuPSVkLCBiYW5kMjQ9JWRcbiIsCiAJCQkJcnhvbl9jaG51bSwgcnhvbl9iYW5kMjQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTczOSwxMSArNzM5LDExIEBACiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAoY2hhaW5fc2lnX2IgKyBkYXRhLT5jaGFpbl9zaWduYWxfYik7CiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2MgPSAoY2hhaW5fc2lnX2MgKyBkYXRhLT5jaGFpbl9zaWduYWxfYyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoImNoYW49JWQsIGJhbmQyND0lZCwgYmVhY29uPSVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2hhbj0lZCwgYmFuZDI0PSVkLCBiZWFjb249JWRcbiIsCiAJCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCwgZGF0YS0+YmVhY29uX2NvdW50KTsKLQlJV0xfREVCVUdfQ0FMSUIoImNoYWluX3NpZzogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkJY2hhaW5fc2lnX2EsIGNoYWluX3NpZ19iLCBjaGFpbl9zaWdfYyk7Ci0JSVdMX0RFQlVHX0NBTElCKCJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQljaGFpbl9ub2lzZV9hLCBjaGFpbl9ub2lzZV9iLCBjaGFpbl9ub2lzZV9jKTsKIAogCS8qIElmIHRoaXMgaXMgdGhlIDIwdGggYmVhY29uLCBkZXRlcm1pbmU6CkBAIC03NzMsOSArNzczLDkgQEAKIAkJYWN0aXZlX2NoYWlucyA9ICgxIDw8IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCX0KIAotCUlXTF9ERUJVR19DQUxJQigiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkgICAgIGF2ZXJhZ2Vfc2lnWzBdLCBhdmVyYWdlX3NpZ1sxXSwgYXZlcmFnZV9zaWdbMl0pOwotCUlXTF9ERUJVR19DQUxJQigibWF4X2F2ZXJhZ2Vfc2lnID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtYXhfYXZlcmFnZV9zaWcgPSAlZCwgYW50ZW5uYSAlZFxuIiwKIAkJICAgICBtYXhfYXZlcmFnZV9zaWcsIG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCiAJLyogQ29tcGFyZSBzaWduYWwgc3RyZW5ndGhzIGZvciBhbGwgMyByZWNlaXZlcnMuICovCkBAIC03ODksNyArNzg5LDcgQEAKIAkJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMTsKIAkJCWVsc2UKIAkJCQlhY3RpdmVfY2hhaW5zIHw9ICgxIDw8IGkpOwotCQkJSVdMX0RFQlVHX0NBTElCKCJpID0gJWQgIHJzc2lEZWx0YSA9ICVkICAiCisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImkgPSAlZCAgcnNzaURlbHRhID0gJWQgICIKIAkJCSAgICAgImRpc2Nvbm5fYXJyYXlbaV0gPSAlZFxuIiwKIAkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7CiAJCX0KQEAgLTgxMyw3ICs4MTMsNyBAQAogCQkJICogZGlzY29ubmVjdGVkIGNvbm5lY3QgaXQgYW55d2F5ICovCiAJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMDsKIAkJCWFjdGl2ZV9jaGFpbnMgfD0gYW50X21zazsKLQkJCUlXTF9ERUJVR19DQUxJQigiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKIAkJCQkiZGVjbGFyZSAlZCBhcyBjb25uZWN0ZWRcbiIsIGkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgyMSw3ICs4MjEsNyBAQAogCiAJLyogU2F2ZSBmb3IgdXNlIHdpdGhpbiBSWE9OLCBUWCwgU0NBTiBjb21tYW5kcywgZXRjLiAqLwogCXByaXYtPmNoYWluX25vaXNlX2RhdGEuYWN0aXZlX2NoYWlucyA9IGFjdGl2ZV9jaGFpbnM7Ci0JSVdMX0RFQlVHX0NBTElCKCJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCiAJCQlhY3RpdmVfY2hhaW5zKTsKIAogCS8qIEFuYWx5emUgbm9pc2UgZm9yIHJ4IGJhbGFuY2UgKi8KQEAgLTgzOSwxNSArODM5LDE2IEBACiAJCX0KIAl9CiAKLQlJV0xfREVCVUdfQ0FMSUIoImF2ZXJhZ2Vfbm9pc2U6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQlhdmVyYWdlX25vaXNlWzBdLCBhdmVyYWdlX25vaXNlWzFdLAogCQkJYXZlcmFnZV9ub2lzZVsyXSk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm1pbl9hdmVyYWdlX25vaXNlID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtaW5fYXZlcmFnZV9ub2lzZSA9ICVkLCBhbnRlbm5hICVkXG4iLAogCQkJbWluX2F2ZXJhZ2Vfbm9pc2UsIG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaSk7CiAKLQlwcml2LT5jZmctPm9wcy0+dXRpbHMtPmdhaW5fY29tcHV0YXRpb24ocHJpdiwgYXZlcmFnZV9ub2lzZSwKLQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pLCBtaW5fYXZlcmFnZV9ub2lzZSk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT51dGlscy0+Z2Fpbl9jb21wdXRhdGlvbikKKwkJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nYWluX2NvbXB1dGF0aW9uKHByaXYsIGF2ZXJhZ2Vfbm9pc2UsCisJCQltaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ksIG1pbl9hdmVyYWdlX25vaXNlKTsKIAogCS8qIFNvbWUgcG93ZXIgY2hhbmdlcyBtYXkgaGF2ZSBiZWVuIG1hZGUgZHVyaW5nIHRoZSBjYWxpYnJhdGlvbi4KIAkgKiBVcGRhdGUgYW5kIGNvbW1pdCB0aGUgUlhPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKaW5kZXggMWFiZTg0Yi4uYjZjZWY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBiYTk5NzIwLi4yOWQ0MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSwxMiArNjksMjAgQEAKICNpZm5kZWYgX19pd2xfY29tbWFuZHNfaF9fCiAjZGVmaW5lIF9faXdsX2NvbW1hbmRzX2hfXwogCitzdHJ1Y3QgaXdsX3ByaXY7CisKIC8qIHVDb2RlIHZlcnNpb24gY29udGFpbnMgNCB2YWx1ZXM6IE1ham9yL01pbm9yL0FQSS9TZXJpYWwgKi8KICNkZWZpbmUgSVdMX1VDT0RFX01BSk9SKHZlcikJKCgodmVyKSAmIDB4RkYwMDAwMDApID4+IDI0KQogI2RlZmluZSBJV0xfVUNPREVfTUlOT1IodmVyKQkoKCh2ZXIpICYgMHgwMEZGMDAwMCkgPj4gMTYpCiAjZGVmaW5lIElXTF9VQ09ERV9BUEkodmVyKQkoKCh2ZXIpICYgMHgwMDAwRkYwMCkgPj4gOCkKICNkZWZpbmUgSVdMX1VDT0RFX1NFUklBTCh2ZXIpCSgodmVyKSAmIDB4MDAwMDAwRkYpCiAKKworLyogVHggcmF0ZXMgKi8KKyNkZWZpbmUgSVdMX0NDS19SQVRFUwk0CisjZGVmaW5lIElXTF9PRkRNX1JBVEVTCTgKKyNkZWZpbmUgSVdMX01BWF9SQVRFUwkoSVdMX0NDS19SQVRFUyArIElXTF9PRkRNX1JBVEVTKQorCiBlbnVtIHsKIAlSRVBMWV9BTElWRSA9IDB4MSwKIAlSRVBMWV9FUlJPUiA9IDB4MiwKQEAgLTEzNiw5ICsxNDQsMTEgQEAKIAlXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OID0gMHg5NCwJLyogbm90IHVzZWQgKi8KIAogCS8qIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMgKi8KKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5NSwKIAlRVUlFVF9OT1RJRklDQVRJT04gPSAweDk2LAkJLyogbm90IHVzZWQgKi8KIAlSRVBMWV9UWF9QV1JfVEFCTEVfQ01EID0gMHg5NywKLQlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5OCwKKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EX1YxID0gMHg5OCwJLyogb2xkIHZlcnNpb24gb2YgQVBJICovCisJVFhfQU5UX0NPTkZJR1VSQVRJT05fQ01EID0gMHg5OCwJLyogbm90IHVzZWQgKi8KIAlNRUFTVVJFX0FCT1JUX05PVElGSUNBVElPTiA9IDB4OTksCS8qIG5vdCB1c2VkICovCiAKIAkvKiBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIGNvbmZpZyBjb21tYW5kICovCkBAIC0yMTksNiArMjI5LDM3IEBACiAJdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAorICoKKyAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKKyAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAorICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAorICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCisgKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCisgKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgorICoKKyAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7CisJdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLworCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICisgKi8KK3N0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKKwl1OCByYXRlOwkJLyogcGxjcCAqLworCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioKICAqIGl3bGFnbiByYXRlX25fZmxhZ3MgYml0IGZpZWxkcwogICoKQEAgLTMwMCwxMSArMzQxLDEyIEBACiAgKiA1MzUwIGhhcyAzIHRyYW5zbWl0dGVycwogICogYml0MTQ6MTYKICAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfUE9TICAgICAgMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfTVNLICAgIDB4MDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLICAgIDB4MDgwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0NfTVNLICAgIDB4MTAwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FCQ19NU0sgIDB4MUMwMDAKKyNkZWZpbmUgUkFURV9NQ1NfQU5UX1BPUwkxNAorI2RlZmluZSBSQVRFX01DU19BTlRfQV9NU0sJMHgwNDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sJMHgwODAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQ19NU0sJMHgxMDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCShSQVRFX01DU19BTlRfQV9NU0sgfCBSQVRFX01DU19BTlRfQl9NU0spCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9BQkNfTVNLCShSQVRFX01DU19BTlRfQUJfTVNLIHwgUkFURV9NQ1NfQU5UX0NfTVNLKQogI2RlZmluZSBSQVRFX0FOVF9OVU0gMwogCiAjZGVmaW5lIFBPV0VSX1RBQkxFX05VTV9FTlRSSUVTCQkJMzMKQEAgLTQ5Miw4ICs1MzQsNiBAQAogCV9fbGUzMiBpc192YWxpZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0KLQogLyoKICAqIFJFUExZX0VSUk9SID0gMHgyIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQogICovCkBAIC01MjUsNiArNTY1LDcgQEAKIAogCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX01TSwkJY3B1X3RvX2xlMTYoMHgxIDw8IDApCisjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX1BPUwkJKDApCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfTVNLCQkJY3B1X3RvX2xlMTYoMHg3IDw8IDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfUE9TCQkJKDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRk9SQ0VfU0VMX01TSwkJY3B1X3RvX2xlMTYoMHg3IDw8IDQpCkBAIC02MTEsNiArNjUyLDI2IEBACiAgKiAgICAgICAgaXNzdWUgYSBuZXcgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCBhZnRlciBlYWNoIFJFUExZX1JYT04gKDB4MTApLAogICogICAgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgaXMgc2V0LgogICovCisKK3N0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHsKKwl1OCBub2RlX2FkZHJbNl07CisJX19sZTE2IHJlc2VydmVkMTsKKwl1OCBic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDI7CisJdTggd2xhcF9ic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDM7CisJdTggZGV2X3R5cGU7CisJdTggYWlyX3Byb3BhZ2F0aW9uOworCV9fbGUxNiByZXNlcnZlZDQ7CisJdTggb2ZkbV9iYXNpY19yYXRlczsKKwl1OCBjY2tfYmFzaWNfcmF0ZXM7CisJX19sZTE2IGFzc29jX2lkOworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUxNiByZXNlcnZlZDU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgewogCXU4IG5vZGVfYWRkcls2XTsKIAlfX2xlMTYgcmVzZXJ2ZWQxOwpAQCAtNjU2LDYgKzcxNywyOCBAQAogCV9fbGUxNiByZXNlcnZlZDY7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCisgKi8KK3N0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIGZpbHRlcl9mbGFnczsKKwl1OCBvZmRtX2Jhc2ljX3JhdGVzOworCXU4IGNja19iYXNpY19yYXRlczsKKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CisJdTggY2NrX2Jhc2ljX3JhdGVzOworCXU4IG9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKKwl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOworCV9fbGUxNiByeF9jaGFpbl9zZWxlY3RfZmxhZ3M7CisJX19sZTE2IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHsKIAlfX2xlMzIgZmxhZ3M7CiAJX19sZTMyIGZpbHRlcl9mbGFnczsKQEAgLTY3MSwyMCArNzU0LDYgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qCi0gKiBSRVBMWV9SWE9OX0FTU09DID0gMHgxMSAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCB7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JdTggb2ZkbV9iYXNpY19yYXRlczsKLQl1OCBjY2tfYmFzaWNfcmF0ZXM7Ci0JdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0JX19sZTE2IHJ4X2NoYWluX3NlbGVjdF9mbGFnczsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBJV0xfQ09OTl9NQVhfTElTVEVOX0lOVEVSVkFMCTEwCiAKIC8qCkBAIC03MDIsNiArNzcxLDE2IEBACiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KK3N0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7CisJdTggYmFuZDsKKwl1OCBleHBlY3RfYmVhY29uOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUzMiByeG9uX2ZsYWdzOworCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKKwlfX2xlMzIgc3dpdGNoX3RpbWU7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9jaGFubmVsX3N3aXRjaF9jbWQgewogCXU4IGJhbmQ7CiAJdTggZXhwZWN0X2JlYWNvbjsKQEAgLTc4Myw2ICs4NjIsOCBAQAogI2RlZmluZQlJV0xfQVBfSUQJCTAKICNkZWZpbmUgSVdMX01VTFRJQ0FTVF9JRAkxCiAjZGVmaW5lCUlXTF9TVEFfSUQJCTIKKyNkZWZpbmUJSVdMMzk0NV9CUk9BRENBU1RfSUQJMjQKKyNkZWZpbmUgSVdMMzk0NV9TVEFUSU9OX0NPVU5UCTI1CiAjZGVmaW5lIElXTDQ5NjVfQlJPQURDQVNUX0lECTMxCiAjZGVmaW5lCUlXTDQ5NjVfU1RBVElPTl9DT1VOVAkzMgogI2RlZmluZSBJV0w1MDAwX0JST0FEQ0FTVF9JRAkxNQpAQCAtNzkxLDYgKzg3Miw4IEBACiAjZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQogCisjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMik7CisjZGVmaW5lIFNUQV9GTEdfUFdSX1NBVkVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDgpOwogI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKQEAgLTkwMSw2ICs5ODQsMzUgQEAKICAqICAgICAgICB1c2VkIGFzIEFQLCBvciBpbiBhbiBJQlNTIG5ldHdvcmssIGRyaXZlciBtdXN0IHNldCB1cCBzdGF0aW9uIHRhYmxlCiAgKiAgICAgICAgZW50cmllcyBmb3IgYWxsIFNUQXMgaW4gbmV0d29yaywgc3RhcnRpbmcgd2l0aCBpbmRleCBJV0xfU1RBX0lELgogICovCisKK3N0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgeworCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHN0YTsKKwlzdHJ1Y3QgaXdsNDk2NV9rZXlpbmZvIGtleTsKKwlfX2xlMzIgc3RhdGlvbl9mbGFnczsJCS8qIFNUQV9GTEdfKiAqLworCV9fbGUzMiBzdGF0aW9uX2ZsYWdzX21zazsJLyogU1RBX0ZMR18qICovCisKKwkvKiBiaXQgZmllbGQgdG8gZGlzYWJsZSAoMSkgb3IgZW5hYmxlICgwKSBUeCBmb3IgVHJhZmZpYyBJRCAoVElEKQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gYml0IChlLmcuIGJpdCA1IGNvbnRyb2xzIFRJRCA1KS4KKwkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfVElEX0RJU0FCTEVfVFggdG8gdXNlIHRoaXMgZmllbGQuICovCisJX19sZTE2IHRpZF9kaXNhYmxlX3R4OworCisJX19sZTE2IHJhdGVfbl9mbGFnczsKKworCS8qIFRJRCBmb3Igd2hpY2ggdG8gYWRkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCXU4IGFkZF9pbW1lZGlhdGVfYmFfdGlkOworCisJLyogVElEIGZvciB3aGljaCB0byByZW1vdmUgYmxvY2stYWNrIHN1cHBvcnQuCisJICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCisJdTggcmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQ7CisKKwkvKiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZm9yIGFkZGVkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCV9fbGUxNiBhZGRfaW1tZWRpYXRlX2JhX3NzbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kIHsKIAl1OCBtb2RlOwkJLyogMTogbW9kaWZ5IGV4aXN0aW5nLCAwOiBhZGQgbmV3IHN0YXRpb24gKi8KIAl1OCByZXNlcnZlZFszXTsKQEAgLTEwNTQsNiArMTE2Niw0OCBAQAogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfVFRBS19PSwkoMSA8PCA3KQogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLCSgweDgwMCkKIAorCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyB7CisJdTggcGh5X2NvdW50OworCXU4IGlkOworCXU4IHJzc2k7CisJdTggYWdjOworCV9fbGUxNiBzaWdfYXZnOworCV9fbGUxNiBub2lzZV9kaWZmOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIHsKKwlfX2xlMTYgY2hhbm5lbDsKKwlfX2xlMTYgcGh5X2ZsYWdzOworCXU4IHJlc2VydmVkMTsKKwl1OCByYXRlOworCV9fbGUxNiBsZW47CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgeworCV9fbGUzMiBzdGF0dXM7CisJX19sZTY0IHRpbWVzdGFtcDsKKwlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCisgKgorICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCisgKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCisgKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCisgKiBzdGF0cy5waHlfY291bnQKKyAqLworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgeworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7CisJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIElXTDM5X1JYX0ZSQU1FX1NJWkUJKDQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUpKQorCiAvKiBGaXhlZCAobm9uLWNvbmZpZ3VyYWJsZSkgcnggZGF0YSBmcm9tIHBoeSAqLwogCiAjZGVmaW5lIElXTDQ5X1JYX1JFU19QSFlfQ05UIDE0CkBAIC0xMjM0LDYgKzEzODgsODQgQEAKICNkZWZpbmUgVEtJUF9JQ1ZfTEVOIDQKIAogLyoKKyAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKKyAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgeworCS8qCisJICogTVBEVSBieXRlIGNvdW50OgorCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAorCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKKwkgKiArIERhdGEgcGF5bG9hZAorCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCisJICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAorCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCisJICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCisJICovCisJX19sZTE2IGxlbjsKKworCS8qCisJICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCisJICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgorCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgorCSAqLworCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKKworCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCisKKwl1OCByYXRlOworCisJLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCisJdTggc3RhX2lkOworCXU4IHRpZF90c3BlYzsKKwl1OCBzZWNfY3RsOworCXU4IGtleVsxNl07CisJdW5pb24geworCQl1OCBieXRlWzhdOworCQlfX2xlMTYgd29yZFs0XTsKKwkJX19sZTMyIGR3WzJdOworCX0gdGtpcF9taWM7CisJX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKKwl1bmlvbiB7CisJCV9fbGUzMiBsaWZlX3RpbWU7CisJCV9fbGUzMiBhdHRlbXB0OworCX0gc3RvcF90aW1lOworCXU4IHN1cHBfcmF0ZXNbMl07CisJdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KKwl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KKwl1bmlvbiB7CisJCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OworCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKKwl9IHRpbWVvdXQ7CisKKwkvKgorCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCisJICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCisJICovCisJX19sZTE2IGRyaXZlcl90eG9wOworCisJLyoKKwkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKKwkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQorCSAqLworCXU4IHBheWxvYWRbMF07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKKwl1OCBmYWlsdXJlX3J0czsKKwl1OCBmYWlsdXJlX2ZyYW1lOworCXU4IGJ0X2tpbGxfY291bnQ7CisJdTggcmF0ZTsKKwlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKKwlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgogICogNDk2NSB1Q29kZSB1cGRhdGVzIHRoZXNlIFR4IGF0dGVtcHQgY291bnQgdmFsdWVzIGluIGhvc3QgRFJBTS4KICAqIFVzZWQgZm9yIG1hbmFnaW5nIFR4IHJldHJpZXMgd2hlbiBleHBlY3RpbmcgYmxvY2stYWNrcy4KICAqIERyaXZlciBzaG91bGQgc2V0IHRoZXNlIGZpZWxkcyB0byAwLgpAQCAtMTI0NCw5ICsxNDc2LDYgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyoKLSAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKLSAqLwogc3RydWN0IGl3bF90eF9jbWQgewogCS8qCiAJICogTVBEVSBieXRlIGNvdW50OgpAQCAtMTU4NCw2ICsxODEzLDE0IEBACiAgKgogICogU2VlIGRldGFpbHMgdW5kZXIgIlRYUE9XRVIiIGluIGl3bC00OTY1LWh3LmguCiAgKi8KKworc3RydWN0IGl3bDM5NDVfdHhwb3dlcnRhYmxlX2NtZCB7CisJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IGNoYW5uZWw7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCB7CiAJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCiAJdTggcmVzZXJ2ZWQ7CkBAIC0xNTkxLDYgKzE4MjgsMzUgQEAKIAlzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB0eF9wb3dlcjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKKyAqCisgKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQorICoKKyAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKKyAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCisgKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKKyAqIG1hc2tzLCBldGMuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAorICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKKyAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgorICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQorICovCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB7CisJX19sZTE2IHJhdGVfbl9mbGFnczsKKwl1OCB0cnlfY250OworCXU4IG5leHRfcmF0ZV9pbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKKwl1OCB0YWJsZV9pZDsKKwl1OCByZXNlcnZlZFszXTsKKwlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKIC8qUlNfTkVXX0FQSTogb25seSBUTENfUlRTIHJlbWFpbnMgYW5kIG1vdmVkIHRvIGJpdCAwICovCiAjZGVmaW5lICBMSU5LX1FVQUxfRkxBR1NfU0VUX1NUQV9UTENfUlRTX01TSwkoMSA8PCAwKQogCkBAIC0yMDQ0LDE1ICsyMzEwLDIzIEBACiAgKi8KICNkZWZpbmUgSVdMX1BPV0VSX1ZFQ19TSVpFIDUKIAotI2RlZmluZSBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSwljcHVfdG9fbGUxNigxIDw8IDApCi0jZGVmaW5lIElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLCQljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIElXTF9QT1dFUl9QQ0lfUE1fTVNLCQkJY3B1X3RvX2xlMTYoMSA8PCAzKQotI2RlZmluZSBJV0xfUE9XRVJfRkFTVF9QRAkJCWNwdV90b19sZTE2KDEgPDwgNCkKKyNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMTYoQklUKDApKQorI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMTYoQklUKDIpKQorI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTE2KEJJVCgzKSkKKyNkZWZpbmUgSVdMX1BPV0VSX0ZBU1RfUEQJCQljcHVfdG9fbGUxNihCSVQoNCkpCisKK3N0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKKwlfX2xlMTYgZmxhZ3M7CisJdTggcmVzZXJ2ZWRbMl07CisJX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKKwlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgewogCV9fbGUxNiBmbGFnczsKLQl1OCBrZWVwX2FsaXZlX3NlY29uZHM7Ci0JdTggZGVidWdfZmxhZ3M7CisJdTgga2VlcF9hbGl2ZV9zZWNvbmRzOwkJLyogMzk0NSByZXNlcnZlZCAqLworCXU4IGRlYnVnX2ZsYWdzOwkJCS8qIDM5NDUgcmVzZXJ2ZWQgKi8KIAlfX2xlMzIgcnhfZGF0YV90aW1lb3V0OwogCV9fbGUzMiB0eF9kYXRhX3RpbWVvdXQ7CiAJX19sZTMyIHNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRV07CkBAIC0yMTQzLDYgKzI0MTcsMjYgQEAKICAqICAgICBwYXNzaXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKiAgICAgYWN0aXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKi8KKworLyogRklYTUU6IHJlbmFtZSB0byBBUDEsIHJlbW92ZSB0cGMgKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCB7CisJLyoKKwkgKiB0eXBlIGlzIGRlZmluZWQgYXM6CisJICogMDowIDEgPSBhY3RpdmUsIDAgPSBwYXNzaXZlCisJICogMTo0IFNTSUQgZGlyZWN0IGJpdCBtYXA7IGlmIGEgYml0IGlzIHNldCwgdGhlbiBjb3JyZXNwb25kaW5nCisJICogICAgIFNTSUQgSUUgaXMgdHJhbnNtaXR0ZWQgaW4gcHJvYmUgcmVxdWVzdC4KKwkgKiA1OjcgcmVzZXJ2ZWQKKwkgKi8KKwl1OCB0eXBlOworCXU4IGNoYW5uZWw7CS8qIGJhbmQgaXMgc2VsZWN0ZWQgYnkgaXdsMzk0NV9zY2FuX2NtZCAiZmxhZ3MiIGZpZWxkICovCisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOworCV9fbGUxNiBhY3RpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCA1LTUwICovCisJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgdTggdHlwZSAqLworI2RlZmluZSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobikgKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCisKIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsIHsKIAkvKgogCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKQEAgLTIxNTksNiArMjQ1Myw5IEBACiAJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgX19sZTMyIHR5cGUgKi8KKyNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3NzaWRfaWUgLSBkaXJlY3RlZCBzY2FuIG5ldHdvcmsgaW5mb3JtYXRpb24gZWxlbWVudAogICoKQEAgLTIxNzIsNiArMjQ2OSw3IEBACiAJdTggc3NpZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYX0FQSTEJCTB4NAogI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYICAgICAgICAJMHgxNAogI2RlZmluZSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFCWNwdV90b19sZTMyKDB4RkZGRkZGRkYpCiAjZGVmaW5lIElXTF9HT09EX0NSQ19USAkJCWNwdV90b19sZTE2KDEpCkBAIC0yMjI5LDYgKzI1MjcsNTEgQEAKICAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgc2VlIHRpbWluZyByZXN0cmljdGlvbnMgZGVzY3JpYmVkIHVuZGVyCiAgKiBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbC4KICAqLworCitzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7CisJX19sZTE2IGxlbjsKKwl1OCByZXNlcnZlZDA7CisJdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KKwlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKKwkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCisJX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLworCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCisJCQkJICogY2hhbm5lbCAqLworCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCisJCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgorCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCisJCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KKwkJCQkgKi8KKwlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCisJX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLworCisJLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCisJICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOworCisJLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCisJc3RydWN0IGl3bF9zc2lkX2llIGRpcmVjdF9zY2FuW1BST0JFX09QVElPTl9NQVhfQVBJMV07CisKKwkvKgorCSAqIFByb2JlIHJlcXVlc3QgZnJhbWUsIGZvbGxvd2VkIGJ5IGNoYW5uZWwgbGlzdC4KKwkgKgorCSAqIFNpemUgb2YgcHJvYmUgcmVxdWVzdCBmcmFtZSBpcyBzcGVjaWZpZWQgYnkgYnl0ZSBjb3VudCBpbiB0eF9jbWQuCisJICogQ2hhbm5lbCBsaXN0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvYmUgcmVxdWVzdCBmcmFtZS4KKwkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gbGlzdCBpcyBzcGVjaWZpZWQgYnkgY2hhbm5lbF9jb3VudC4KKwkgKiBFYWNoIGNoYW5uZWwgaW4gbGlzdCBpcyBvZiB0eXBlOgorCSAqCisJICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIGNoYW5uZWxzWzBdOworCSAqCisJICogTk9URTogIE9ubHkgb25lIGJhbmQgb2YgY2hhbm5lbHMgY2FuIGJlIHNjYW5uZWQgcGVyIHBhc3MuICBZb3UKKwkgKiBtdXN0IG5vdCBtaXggMi40R0h6IGNoYW5uZWxzIGFuZCA1LjJHSHogY2hhbm5lbHMsIGFuZCB5b3UgbXVzdCB3YWl0CisJICogZm9yIG9uZSBzY2FuIHRvIGNvbXBsZXRlIChpLmUuIHJlY2VpdmUgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04pCisJICogYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBzY2FuLgorCSAqLworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9zY2FuX2NtZCB7CiAJX19sZTE2IGxlbjsKIAl1OCByZXNlcnZlZDA7CkBAIC0yMzM2LDYgKzI2NzksMTQgQEAKIC8qCiAgKiBCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCiAgKi8KKworc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOworCV9fbGUzMiBsb3dfdHNmOworCV9fbGUzMiBoaWdoX3RzZjsKKwlfX2xlMzIgaWJzc19tZ3Jfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w0OTY1X2JlYWNvbl9ub3RpZiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhfcmVzcCBiZWFjb25fbm90aWZ5X2hkcjsKIAlfX2xlMzIgbG93X3RzZjsKQEAgLTIzNDYsNiArMjY5NywxNSBAQAogLyoKICAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHg7CisJX19sZTE2IHRpbV9pZHg7CisJdTggdGltX3NpemU7CisJdTggcmVzZXJ2ZWQxOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGZyYW1lWzBdOwkvKiBiZWFjb24gZnJhbWUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwpAQCAtMjM4Miw2ICsyNzQyLDc2IEBACiAKIC8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwogCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9waHkgeworCV9fbGUzMiBpbmFfY250OworCV9fbGUzMiBmaW5hX2NudDsKKwlfX2xlMzIgcGxjcF9lcnI7CisJX19sZTMyIGNyYzMyX2VycjsKKwlfX2xlMzIgb3ZlcnJ1bl9lcnI7CisJX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOworCV9fbGUzMiBjcmMzMl9nb29kOworCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7CisJX19sZTMyIGZpbmFfc3luY19lcnJfY250OworCV9fbGUzMiBzZmRfdGltZW91dDsKKwlfX2xlMzIgZmluYV90aW1lb3V0OworCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7CisJX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOworCV9fbGUzMiBzZW50X2Fja19jbnQ7CisJX19sZTMyIHNlbnRfY3RzX2NudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IHsKKwlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLworCV9fbGUzMiBib2d1c19hY2s7CS8qIEFDSyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQUNLICovCisJX19sZTMyIG5vbl9ic3NpZF9mcmFtZXM7CS8qIG51bWJlciBvZiBmcmFtZXMgd2l0aCBCU1NJRCB0aGF0CisJCQkJCSAqIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBTVEEgQlNTSUQgKi8KKwlfX2xlMzIgZmlsdGVyZWRfZnJhbWVzOwkvKiBjb3VudCBmcmFtZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbiB0aGUKKwkJCQkgKiBmaWx0ZXJpbmcgcHJvY2VzcyAqLworCV9fbGUzMiBub25fY2hhbm5lbF9iZWFjb25zOwkvKiBiZWFjb25zIHdpdGggb3VyIGJzcyBpZCBidXQgbm90IG9uCisJCQkJCSAqIG91ciBzZXJ2aW5nIGNoYW5uZWwgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCB7CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IG9mZG07CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IGNjazsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggeworCV9fbGUzMiBwcmVhbWJsZV9jbnQ7CisJX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKKwlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7CisJX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7CisJX19sZTMyIGZld19ieXRlc19jbnQ7CisJX19sZTMyIGN0c190aW1lb3V0OworCV9fbGUzMiBhY2tfdGltZW91dDsKKwlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKKwlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHN0YXRpc3RpY3NfZGJnIHsKKwlfX2xlMzIgYnVyc3RfY2hlY2s7CisJX19sZTMyIGJ1cnN0X2NvdW50OworCV9fbGUzMiByZXNlcnZlZFs0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgeworCV9fbGUzMiB0eF9vbl9hOworCV9fbGUzMiB0eF9vbl9iOworCV9fbGUzMiBleGVjX3RpbWU7CisJX19sZTMyIHByb2JlX3RpbWU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZ2VuZXJhbCB7CisJX19sZTMyIHRlbXBlcmF0dXJlOworCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7CisJX19sZTMyIHNsZWVwX3RpbWU7CisJX19sZTMyIHNsb3RzX291dDsKKwlfX2xlMzIgc2xvdHNfaWRsZTsKKwlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgZGl2OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7CiAJX19sZTMyIGluYV9jbnQ7CiAJX19sZTMyIGZpbmFfY250OwpAQCAtMjQxOCw3ICsyODQ4LDcgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMigxKQorI2RlZmluZSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUgICAgICBjcHVfdG9fbGUzMigxKQogCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IHsKIAlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLwpAQCAtMjQ5MywxMSArMjkyMyw2IEBACiAJc3RydWN0IHN0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgYWdnOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBzdGF0aXN0aWNzX2RiZyB7Ci0JX19sZTMyIGJ1cnN0X2NoZWNrOwotCV9fbGUzMiBidXJzdF9jb3VudDsKLQlfX2xlMzIgcmVzZXJ2ZWRbNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHN0YXRpc3RpY3NfZGl2IHsKIAlfX2xlMzIgdHhfb25fYTsKQEAgLTI1NjEsNiArMjk4NiwxNCBAQAogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4MikKICNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHg4KQorCitzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgZmxhZzsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCByeDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc190eCB0eDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKQEAgLTMwMTIsNiArMzQ0NSwxMCBAQAogCV9fbGUzMiBsZW47CiAJc3RydWN0IGl3bF9jbWRfaGVhZGVyIGhkcjsKIAl1bmlvbiB7CisJCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lIHJ4X2ZyYW1lOworCQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHR4X3Jlc3A7CisJCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiBiZWFjb25fc3RhdHVzOworCiAJCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKIAkJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gc3BlY3RydW1fbm90aWY7CiAJCXN0cnVjdCBpd2xfY3NhX25vdGlmaWNhdGlvbiBjc2Ffbm90aWY7CkBAIC0zMDI5LDYgKzM0NjYsNiBAQAogCX0gdTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1pbnQgaXdsX2Fnbl9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uKTsKK2ludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKICNlbmRpZgkJCQkvKiBfX2l3bF9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA3M2Q3OTczLi4wODVlOWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCkBAIC0xNzAsNyArMTcxLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9CiAJCWllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bF9wcml2KSwgaHdfb3BzKTsKIAlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAorCQkgICAgICAgY2ZnLT5uYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMTAsNyArMjEyLDcgQEAKIAlpZiAoIXJ4cS0+YmQpIHsKIAkJcmV0ID0gaXdsX3J4X3F1ZXVlX2FsbG9jKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlCkBAIC0yMzgsNiArMjQwLDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9od19uaWNfaW5pdCk7CiAKKy8qCisgKiBRb1MgIHN1cHBvcnQKKyovCit2b2lkIGl3bF9hY3RpdmF0ZV9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmb3JjZSkKK3sKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOworCisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC5xdWV1ZV9yZXF1ZXN0ICYmCisJICAgICFwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAudHhvcF9yZXF1ZXN0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9CisJCQlRT1NfUEFSQU1fRkxHX1RYT1BfVFlQRV9NU0s7CisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KKwkJCVFPU19QQVJBTV9GTEdfVVBEQVRFX0VEQ0FfTVNLOworCisJaWYgKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9IFFPU19QQVJBTV9GTEdfVEdOX01TSzsKKworCWlmIChmb3JjZSB8fCBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCQlJV0xfREVCVUdfUU9TKHByaXYsICJzZW5kIFFvUyBjbWQgd2l0aCBRb3MgYWN0aXZlPSVkIEZMQUdTPTB4JVhcbiIsCisJCQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSwKKwkJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzKTsKKworCQlpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1FPU19QQVJBTSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kKSwKKwkJCQkgICAgICAgJnByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybSwgTlVMTCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfYWN0aXZhdGVfcW9zKTsKKwogdm9pZCBpd2xfcmVzZXRfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MTYgY3dfbWluID0gMTU7CkBAIC0zMjEsNyArMzU2LDcgQEAKIAkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwogCQl9CiAJfQotCUlXTF9ERUJVR19RT1MoInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOworCUlXTF9ERUJVR19RT1MocHJpdiwgInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQpAQCAtNDAyLDEwICs0MzcsMTEgQEAKIAl9CiB9CiAKKwogLyoqCiAgKiBpd2xjb3JlX2luaXRfZ2VvcyAtIEluaXRpYWxpemUgbWFjODAyMTEncyBnZW8vY2hhbm5lbCBpbmZvIGJhc2VkIGZyb20gZWVwcm9tCiAgKi8KLXN0YXRpYyBpbnQgaXdsY29yZV9pbml0X2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bGNvcmVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2g7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CkBAIC00MTYsNyArNDUyLDcgQEAKIAogCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8CiAJICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHZW9ncmFwaHkgbW9kZXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwogCQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTQ1Nyw4ICs0OTMsNiBAQAogCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKIAlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7CiAKLQlpd2xjb3JlX2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwotCiAJZm9yIChpID0gMDsgIGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwogCkBAIC01MDAsNyArNTM0LDcgQEAKIAkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwogCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MHglWFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgJWQgRnJlcT0lZFslc0dIel0gJXMgZmxhZz0weCVYXG4iLAogCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAogCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAogCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/CkBAIC01MTAsMzMgKzU0NCwzMyBAQAogCiAJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCiAJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJSVdMX0lORk8ocHJpdiwgIkluY29ycmVjdGx5IGRldGVjdGVkIEJHIGNhcmQgYXMgQUJHLiAiCisJCQkiUGxlYXNlIHNlbmQgeW91ciBQQ0kgSUQgMHglMDRYOjB4JTA0WCB0byBtYWludGFpbmVyLlxuIiwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPmRldmljZSwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9BOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkgICAgICAgIjogVHVuYWJsZSBjaGFubmVsczogJWQgODAyLjExYmcsICVkIDgwMi4xMWEgY2hhbm5lbHNcbiIsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpOwotCisJSVdMX0lORk8ocHJpdiwgIlR1bmFibGUgY2hhbm5lbHM6ICVkIDgwMi4xMWJnLCAlZCA4MDIuMTFhIGNoYW5uZWxzXG4iLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKTsKIAogCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xjb3JlX2luaXRfZ2Vvcyk7CiAKIC8qCiAgKiBpd2xjb3JlX2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsY29yZV9pbml0X2dlb3MKICAqLwotc3RhdGljIHZvaWQgaXdsY29yZV9mcmVlX2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2xjb3JlX2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJa2ZyZWUocHJpdi0+aWVlZV9jaGFubmVscyk7CiAJa2ZyZWUocHJpdi0+aWVlZV9yYXRlcyk7CiAJY2xlYXJfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bGNvcmVfZnJlZV9nZW9zKTsKIAogc3RhdGljIGJvb2wgaXNfc2luZ2xlX3J4X3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC01ODcsNiArNjIxLDE2NyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfaXNfZmF0X3R4X2FsbG93ZWQpOwogCit2b2lkIGl3bF9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKGh3X2RlY3J5cHQpCisJCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOworCWVsc2UKKwkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKKworfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25faHdjcnlwdG8pOworCisvKioKKyAqIGl3bF9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCisgKgorICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKKyAqIGJlICNpZmRlZidkIG91dCBvbmNlIHRoZSBkcml2ZXIgaXMgc3RhYmxlIGFuZCBmb2xrcyBhcmVuJ3QgYWN0aXZlbHkKKyAqIG1ha2luZyBjaGFuZ2VzCisgKi8KK2ludCBpd2xfY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCBlcnJvciA9IDA7CisJaW50IGNvdW50ZXIgPSAxOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7CisJCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYKKwkJCQkoUlhPTl9GTEdfVEdKX05BUlJPV19CQU5EX01TSyB8CisJCQkJIFJYT05fRkxHX1JBREFSX0RFVEVDVF9NU0spKTsKKwkJaWYgKGVycm9yKQorCQkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIDI0RyBmaWVsZHMgJWQgfCAlZFxuIiwKKwkJCQkgICAgY291bnRlcisrLCBlcnJvcik7CisJfSBlbHNlIHsKKwkJZXJyb3IgfD0gKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID8KKwkJCQkwIDogbGUzMl90b19jcHUoUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgZmllbGRzICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmIFJYT05fRkxHX0NDS19NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgQ0NLICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCX0KKwllcnJvciB8PSAocnhvbi0+bm9kZV9hZGRyWzBdIHwgcnhvbi0+YnNzaWRfYWRkclswXSkgJiAweDE7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgbWFjIGFkZHIgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7CisKKwkvKiBtYWtlIHN1cmUgYmFzaWMgcmF0ZXMgNk1icHMgYW5kIDFNYnBzIGFyZSBzdXBwb3J0ZWQgKi8KKwllcnJvciB8PSAoKChyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfNk1fTUFTSykgPT0gMCkgJiYKKwkJICAoKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApKTsKKwlpZiAoZXJyb3IpCisJCUlXTF9XQVJOKHByaXYsICJjaGVjayBiYXNpYyByYXRlICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIGFzc29jIGlkICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQorCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIENDSyBhbmQgc2hvcnQgc2xvdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSkKKwkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgQ0NLICYgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKKwkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKKworCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwKKwkJCVJYT05fRkxHX1RHR19QUk9URUNUX01TSykpID09IFJYT05fRkxHX1RHR19QUk9URUNUX01TSyk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgVEdHIGFuZCBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCisJCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCisJaWYgKGVycm9yKSB7CisJCUlXTF9FUlIocHJpdiwgIk5vdCBhIHZhbGlkIGl3bF9yeG9uX2Fzc29jX2NtZCBmaWVsZCB2YWx1ZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfY2hlY2tfcnhvbl9jbWQpOworCisvKioKKyAqIGl3bF9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKKyAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KKyAqCisgKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKKyAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAorICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KKyAqLworaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCisJLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KKwlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm5vZGVfYWRkcikgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi53bGFwX2Jzc2lkX2FkZHIsCisJCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ud2xhcF9ic3NpZF9hZGRyKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlICE9IHByaXYtPmFjdGl2ZV9yeG9uLmRldl90eXBlKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgIT0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5haXJfcHJvcGFnYXRpb24gIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmFpcl9wcm9wYWdhdGlvbikgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzICE9CisJICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgorCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCisJICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCisKKwkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLworCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQorCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQorCQlyZXR1cm4gMTsKKworCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCisJaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQorCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZCk7CisKK3U4IGl3bF9yYXRlX2dldF9sb3dlc3RfcGxjcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJhdGVfbWFzazsKKworCS8qIFNldCByYXRlIG1hc2sqLworCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCisJCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19SQVRFU19NQVNLOworCWVsc2UKKwkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9SQVRFU19NQVNLOworCisJLyogRmluZCBsb3dlc3QgdmFsaWQgcmF0ZSAqLworCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYOyBpICE9IElXTF9SQVRFX0lOVkFMSUQ7CisJCQkJCWkgPSBpd2xfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7CisJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBpKSkKKwkJCXJldHVybiBpd2xfcmF0ZXNbaV0ucGxjcDsKKwl9CisKKwkvKiBObyB2YWxpZCByYXRlIHdhcyBmb3VuZC4gQXNzaWduIHRoZSBsb3dlc3Qgb25lICovCisJaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKKwkJcmV0dXJuIElXTF9SQVRFXzFNX1BMQ1A7CisJZWxzZQorCQlyZXR1cm4gSVdMX1JBVEVfNk1fUExDUDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKTsKKwogdm9pZCBpd2xfc2V0X3J4b25faHQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pCiB7CiAJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CkBAIC02MjgsNyArODIzLDcgQEAKIAogCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAotCUlXTF9ERUJVR19BU1NPQygic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgogCQkJInJ4b24gZmxhZ3MgMHglWCBvcGVyYXRpb24gbW9kZSA6MHglWCAiCiAJCQkiZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IDB4JXhcbiIsCiAJCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSwKQEAgLTY3OSw3ICs4NzQsNyBAQAogCQlicmVhazsKIAljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0lOVkFMSUQ6CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIG1pbW8gcHMgbW9kZSAlZFxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBtaW1vIHBzIG1vZGUgJWRcbiIsCiAJCQkgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbV9wcyk7CiAJCVdBUk5fT04oMSk7CiAJCWlkbGVfY250ID0gLTE7CkBAIC03MDAsNiArODk1LDE4IEBACiB9CiAKIC8qKgorICogaXdsX2lzX21vbml0b3JfbW9kZSAtIERldGVybWluZSBpZiBpbnRlcmZhY2UgaW4gbW9uaXRvciBtb2RlCisgKgorICogcHJpdi0+aXdfbW9kZSBpcyBzZXQgaW4gYWRkX2ludGVyZmFjZSwgYnV0IGFkZF9pbnRlcmZhY2UgaXMKKyAqIG5ldmVyIGNhbGxlZCBmb3IgbW9uaXRvciBtb2RlLiBUaGUgb25seSB3YXkgbWFjODAyMTEgaW5mb3JtcyB1cyBhYm91dAorICogbW9uaXRvciBtb2RlIGlzIHRocm91Z2ggY29uZmlndXJpbmcgZmlsdGVycyAoY2FsbCB0byBjb25maWd1cmVfZmlsdGVyKS4KKyAqLworc3RhdGljIGJvb2wgaXdsX2lzX21vbml0b3JfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuICEhKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyk7Cit9CisKKy8qKgogICogaXdsX3NldF9yeG9uX2NoYWluIC0gU2V0IHVwIFJ4IGNoYWluIHVzYWdlIGluICJzdGFnaW5nIiBSWE9OIGltYWdlCiAgKgogICogU2VsZWN0cyBob3cgbWFueSBhbmQgd2hpY2ggUnggcmVjZWl2ZXJzL2FudGVubmFzL2NoYWlucyB0byB1c2UuCkBAIC03NDIsNiArOTQ5LDE5IEBACiAJcnhfY2hhaW4gfD0gYWN0aXZlX3J4X2NudCA8PCBSWE9OX1JYX0NIQUlOX01JTU9fQ05UX1BPUzsKIAlyeF9jaGFpbiB8PSBpZGxlX3J4X2NudCAgPDwgUlhPTl9SWF9DSEFJTl9DTlRfUE9TOwogCisJLyogY29waWVkIGZyb20gJ2l3bF9iZ19yZXF1ZXN0X3NjYW4oKScgKi8KKwkvKiBGb3JjZSB1c2Ugb2YgY2hhaW5zIEIgYW5kIEMgKDB4NikgZm9yIFJ4IGZvciA0OTY1CisJICogQXZvaWQgQSAoMHgxKSBiZWNhdXNlIG9mIGl0cyBvZmYtY2hhbm5lbCByZWNlcHRpb24gb24gQS1iYW5kLgorCSAqIE1JTU8gaXMgbm90IHVzZWQgaGVyZSwgYnV0IHZhbHVlIGlzIHJlcXVpcmVkICovCisJaWYgKGl3bF9pc19tb25pdG9yX21vZGUocHJpdikgJiYKKwkgICAgIShwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spICYmCisJICAgICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpKSB7CisJCXJ4X2NoYWluID0gMHgwNyA8PCBSWE9OX1JYX0NIQUlOX1ZBTElEX1BPUzsKKwkJcnhfY2hhaW4gfD0gMHgwNiA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDcgPDwgUlhPTl9SWF9DSEFJTl9GT1JDRV9NSU1PX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDEgPDwgUlhPTl9SWF9DSEFJTl9EUklWRVJfRk9SQ0VfUE9TOworCX0KKwogCXByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbiA9IGNwdV90b19sZTE2KHJ4X2NoYWluKTsKIAogCWlmICghaXNfc2luZ2xlICYmIChhY3RpdmVfcnhfY250ID49IElXTF9OVU1fUlhfQ0hBSU5TX1NJTkdMRSkgJiYgaXNfY2FtKQpAQCAtNzQ5LDcgKzk2OSw3IEBACiAJZWxzZQogCQlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gJj0gflJYT05fUlhfQ0hBSU5fTUlNT19GT1JDRV9NU0s7CiAKLQlJV0xfREVCVUdfQVNTT0MoInJ4X2NoYWluPTB4JVggYWN0aXZlPSVkIGlkbGU9JWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJyeF9jaGFpbj0weCVYIGFjdGl2ZT0lZCBpZGxlPSVkXG4iLAogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluLAogCQkJYWN0aXZlX3J4X2NudCwgaWRsZV9yeF9jbnQpOwogCkBAIC03NzQsNyArOTk0LDcgQEAKIAl1MTYgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaC0+Y2VudGVyX2ZyZXEpOwogCiAJaWYgKCFpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZCBub3Qgc2V0IGNoYW5uZWwgdG8gJWQgWyVkXVxuIiwKIAkJCSAgICAgICBjaGFubmVsLCBiYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzkxLDEyICsxMDExLDI4MyBAQAogCiAJcHJpdi0+YmFuZCA9IGJhbmQ7CiAKLQlJV0xfREVCVUdfSU5GTygiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25fY2hhbm5lbCk7CiAKK3ZvaWQgaXdsX3NldF9mbGFnc19mb3JfYmFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CisJCSAgICB+KFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSworCQkgICAgICB8IFJYT05fRkxHX0NDS19NU0spOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CisJfSBlbHNlIHsKKwkJLyogQ29waWVkIGZyb20gaXdsX3Bvc3RfYXNzb2NpYXRlKCkgKi8KKwkJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCQllbHNlCisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCisJCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKKworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKTsKKworLyoKKyAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQorICovCit2b2lkIGl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCit7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisKKwltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9BUDsKKwkJYnJlYWs7CisKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfRVNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9JQlNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyB8CisJCQkJCQkgIFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQlicmVhazsKKworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9TTklGRkVSOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgfAorCQkgICAgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLIHwgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKKwkJYnJlYWs7CisJfQorCisjaWYgMAorCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCisJICogdGhhdCAqLworCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworI2VuZGlmCisKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKKwkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOworCisJaWYgKCFjaF9pbmZvKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCS8qCisJICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUworCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAorCSAqLworCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKKwkgICAgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7CisJcHJpdi0+YmFuZCA9IGNoX2luZm8tPmJhbmQ7CisKKwlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIHByaXYtPmJhbmQpOworCisJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQorCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9CisJICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAorCQkJCQlSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcpOworCit2b2lkIGl3bF9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaHcgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwlpbnQgaTsKKworCWh3ID0gaXdsX2dldF9od19tb2RlKHByaXYsIHByaXYtPmJhbmQpOworCWlmICghaHcpIHsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+YWN0aXZlX3JhdGUgPSAwOworCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7CisJCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQorCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOworCX0KKworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAorCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKKworCS8qCisJICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKKwkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKKwkgKiBPRkRNCisJICovCisJaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCisJCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgorCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9CisJCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldF9yYXRlKTsKKwordm9pZCBpd2xfcnhfY3NhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsX2NzYV9ub3RpZmljYXRpb24gKmNzYSA9ICYocGt0LT51LmNzYV9ub3RpZik7CisJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkLCBzdGF0dXMgJWRcbiIsCisJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCksIGxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSk7CisJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X2NzYSk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJSWCBDT05GSUc6XG4iKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCisJCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCisJCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOworfQorI2VuZGlmCisKKy8qKgorICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKKyAqLwordm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsX2Rvd24gKi8KKwlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7CisKKwkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLworCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7CisJCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7CisJCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdik7CisJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYpOworCX0KKyNlbmRpZgorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCisJLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAorCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KKwljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKKworCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCisJCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7CisKKwkJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKKwkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOworCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7CisJCX0KKwkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfaXJxX2hhbmRsZV9lcnJvcik7CisKK3ZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKKwkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQorCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7CisJfQorCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQllbHNlCisJCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKKwl9CisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOworCX0KKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7CisJCWVsc2UKKwkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOworCX0KKworCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncworCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgorCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCisJICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgorCSAqLworCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAorCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2NvbmZpZ3VyZV9maWx0ZXIpOworCiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKQEAgLTgwNiwxMiArMTI5NywxNCBAQAogCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOworCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUzsKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAKLQlody0+d2lwaHktPmZ3X2hhbmRsZXNfcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAKIAkvKiBEZWZhdWx0IHZhbHVlOyA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KIAlody0+cXVldWVzID0gNDsKQEAgLTgzMSw3ICsxMzI0LDcgQEAKIAogCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBodyAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CkBAIC04NjMsNyArMTM1Niw2IEBACiB7CiAJaW50IHJldDsKIAotCXByaXYtPnJldHJ5X3JhdGUgPSAxOwogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKQEAgLTg5NywyMSArMTM4OSwyMiBAQAogCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKIAogCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBQyBtb2RlICovCi0JcHJpdi0+cG93ZXJfbW9kZSA9IElXTF9QT1dFUl9BQzsKKwkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CiAJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKIAogCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKIAl9CisJaXdsY29yZV9pbml0X2h3X3JhdGVzKHByaXYsIHByaXYtPmllZWVfcmF0ZXMpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTkyNiwxNCArMTQxOSwxNiBAQAogewogCWludCByZXQgPSAwOwogCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxvd2VyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh0eF9wb3dlciA+IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIHVwcGVyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTcwLDE4ICsxNDY1LDkyIEBACiAJICogZnJvbSB1Q29kZSBvciBmbG93IGhhbmRsZXIgKFJ4L1R4IERNQSkgKi8KIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweGZmZmZmZmZmKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JSVdMX0RFQlVHX0lTUigiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7CisJSVdMX0RFQlVHX0lTUihwcml2LCAiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9kaXNhYmxlX2ludGVycnVwdHMpOwogCiB2b2lkIGl3bF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JSVdMX0RFQlVHX0lTUigiRW5hYmxpbmcgaW50ZXJydXB0c1xuIik7CisJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5hYmxpbmcgaW50ZXJydXB0c1xuIik7CiAJc2V0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgQ1NSX0lOSV9TRVRfTUFTSyk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9lbmFibGVfaW50ZXJydXB0cyk7CiAKK2lycXJldHVybl90IGl3bF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOworCXUzMiBpbnRhLCBpbnRhX21hc2s7CisJdTMyIGludGFfZmg7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJLyogRGlzYWJsZSAoYnV0IGRvbid0IGNsZWFyISkgaW50ZXJydXB0cyBoZXJlIHRvIGF2b2lkCisJICogICAgYmFjay10by1iYWNrIElTUnMgYW5kIHNwb3JhZGljIGludGVycnVwdHMgZnJvbSBvdXIgTklDLgorCSAqIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlcnZpY2UsIHRoZSB0YXNrbGV0IHdpbGwgcmUtZW5hYmxlIGludHMuCisJICogSWYgd2UgKmRvbid0KiBoYXZlIHNvbWV0aGluZywgd2UnbGwgcmUtZW5hYmxlIGJlZm9yZSBsZWF2aW5nIGhlcmUuICovCisJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOyAgLyoganVzdCBmb3IgZGVidWcgKi8KKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOworCisJLyogRGlzY292ZXIgd2hpY2ggaW50ZXJydXB0cyBhcmUgYWN0aXZlL3BlbmRpbmcgKi8KKwlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKKwlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CisKKwkvKiBJZ25vcmUgaW50ZXJydXB0IGlmIHRoZXJlJ3Mgbm90aGluZyBpbiBOSUMgdG8gc2VydmljZS4KKwkgKiBUaGlzIG1heSBiZSBkdWUgdG8gSVJRIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLAorCSAqIG9yIGR1ZSB0byBzcG9yYWRpYyBpbnRlcnJ1cHRzIHRocm93biBmcm9tIG91ciBOSUMuICovCisJaWYgKCFpbnRhICYmICFpbnRhX2ZoKSB7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIklnbm9yZSBpbnRlcnJ1cHQsIGludGEgPT0gMCwgaW50YV9maCA9PSAwXG4iKTsKKwkJZ290byBub25lOworCX0KKworCWlmICgoaW50YSA9PSAweEZGRkZGRkZGKSB8fCAoKGludGEgJiAweEZGRkZGRkYwKSA9PSAweGE1YTVhNWEwKSkgeworCQkvKiBIYXJkd2FyZSBkaXNhcHBlYXJlZC4gSXQgbWlnaHQgaGF2ZSBhbHJlYWR5IHJhaXNlZAorCQkgKiBhbiBpbnRlcnJ1cHQgKi8KKwkJSVdMX1dBUk4ocHJpdiwgIkhBUkRXQVJFIEdPTkU/PyBJTlRBID09IDB4JTA4eFxuIiwgaW50YSk7CisJCWdvdG8gdW5wbHVnZ2VkOworCX0KKworCUlXTF9ERUJVR19JU1IocHJpdiwgIklTUiBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKKwkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKKworCWludGEgJj0gfkNTUl9JTlRfQklUX1NDRDsKKworCS8qIGl3bF9pcnFfdGFza2xldCgpIHdpbGwgc2VydmljZSBpbnRlcnJ1cHRzIGFuZCByZS1lbmFibGUgdGhlbSAqLworCWlmIChsaWtlbHkoaW50YSB8fCBpbnRhX2ZoKSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+aXJxX3Rhc2tsZXQpOworCisgdW5wbHVnZ2VkOgorCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKyBub25lOgorCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLworCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCisJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIElSUV9OT05FOworfQorRVhQT1JUX1NZTUJPTChpd2xfaXNyKTsKKworaW50IGl3bF9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9idF9jbWQgYnRfY21kID0geworCQkuZmxhZ3MgPSAzLAorCQkubGVhZF90aW1lID0gMHhBQSwKKwkJLm1heF9raWxsID0gMSwKKwkJLmtpbGxfYWNrX21hc2sgPSAwLAorCQkua2lsbF9jdHNfbWFzayA9IDAsCisJfTsKKworCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPTkZJRywKKwkJCQlzaXplb2Yoc3RydWN0IGl3bF9idF9jbWQpLCAmYnRfY21kKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfYnRfY29uZmlnKTsKKwogaW50IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzKQogewogCXUzMiBzdGF0X2ZsYWdzID0gMDsKQEAgLTEwMDcsNyArMTU3Niw3IEBACiAJdTMyIGVycmNudCA9IDA7CiAJdTMyIGk7CiAKLQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKIAlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpCkBAIC0xMDE4LDcgKzE1ODcsNyBAQAogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwogCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKLQkJCWkgKyBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJCQlpICsgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CiAJCQlyZXQgPSAtRUlPOwpAQCAtMTA0NSwxMyArMTYxNCwxNCBAQAogCWludCByZXQgPSAwOwogCXUzMiBlcnJjbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKIAlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJICAgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCiAJZXJyY250ID0gMDsKIAlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CkBAIC0xMDYwLDcgKzE2MzAsNyBAQAogCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCiAJCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgogCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwogCQkJcmV0ID0gLUVJTzsKQEAgLTEwNzMsOCArMTY0Myw4IEBACiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWlmICghZXJyY250KQotCQlJV0xfREVCVUdfSU5GTwotCQkgICAgKCJ1Y29kZSBpbWFnZSBpbiBJTlNUUlVDVElPTiBtZW1vcnkgaXMgZ29vZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCSAgICAidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwOTQsNyArMTY2NCw3IEBACiAJbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47CiAJcmV0ID0gaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKCFyZXQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkJvb3RzdHJhcCB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExMDMsNyArMTY3Myw3IEBACiAJbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CiAJcmV0ID0gaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKCFyZXQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTExMiwxMSArMTY4MiwxMSBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfRVJST1IoIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CisJSVdMX0VSUihwcml2LCAiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKIAogCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KIAkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgpAQCAtMTE4OCwyMSArMTc1OCwyMiBAQAogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5lcnJvcl9ldmVudF90YWJsZV9wdHIpOwogCiAJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiTm90IHZhbGlkIGVycm9yIGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWNvdW50ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CiAKIAlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlJPUigiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsIHByaXYtPnN0YXR1cywgY291bnQpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXJyb3IgTG9nIER1bXA6XG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsCisJCQlwcml2LT5zdGF0dXMsIGNvdW50KTsKIAl9CiAKIAlkZXNjID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDEgKiBzaXplb2YodTMyKSk7CkBAIC0xMjE1LDEyICsxNzg2LDEyIEBACiAJbGluZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA5ICogc2l6ZW9mKHUzMikpOwogCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMTEgKiBzaXplb2YodTMyKSk7CiAKLQlJV0xfRVJST1IoIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCisJSVdMX0VSUihwcml2LCAiRGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lICAgICAgICIKIAkJImRhdGExICAgICAgZGF0YTIgICAgICBsaW5lXG4iKTsKLQlJV0xfRVJST1IoIiUtMjhzICgjJTAyZCkgJTAxMHUgMHglMDhYIDB4JTA4WCAldVxuIiwKKwlJV0xfRVJSKHByaXYsICIlLTI4cyAoIyUwMmQpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCiAJCWRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBkYXRhMSwgZGF0YTIsIGxpbmUpOwotCUlXTF9FUlJPUigiYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyXG4iKTsKLQlJV0xfRVJST1IoIjB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WFxuIiwgYmxpbmsxLCBibGluazIsCisJSVdMX0VSUihwcml2LCAiYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyXG4iKTsKKwlJV0xfRVJSKHByaXYsICIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAogCQlpbGluazEsIGlsaW5rMik7CiAKIAlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwpAQCAtMTI2NiwxMSArMTgzNywxMSBAQAogCQlwdHIgKz0gc2l6ZW9mKHUzMik7CiAJCWlmIChtb2RlID09IDApIHsKIAkJCS8qIGRhdGEsIGV2ICovCi0JCQlJV0xfRVJST1IoIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsIHRpbWUsIGV2KTsKKwkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsIHRpbWUsIGV2KTsKIAkJfSBlbHNlIHsKIAkJCWRhdGEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQkJcHRyICs9IHNpemVvZih1MzIpOwotCQkJSVdMX0VSUk9SKCJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAogCQkJCQl0aW1lLCBkYXRhLCBldik7CiAJCX0KIAl9CkBAIC0xMjkyLDEzICsxODYzLDEzIEBACiAJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCiAJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKIAlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzEyLDEyICsxODgzLDEyIEBACiAKIAkvKiBiYWlsIG91dCBpZiBub3RoaW5nIGluIGxvZyAqLwogCWlmIChzaXplID09IDApIHsKLQkJSVdMX0VSUk9SKCJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7CiAJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCXJldHVybjsKIAl9CiAKLQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogZGlzcGxheSBjb3VudCAlZCwgd3JhcHMgJWRcbiIsCisJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKIAkJCXNpemUsIG51bV93cmFwcyk7CiAKIAkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCkBAIC0xMzQ5LDkgKzE5MjAsOSBAQAogCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01ELAogCQkJICAgICAgIHNpemVvZihjbWQpLCAmY21kKTsKIAlpZiAocmV0KQotCQlJV0xfRVJST1IoIlJFUExZX0NUX0tJTExfQ09ORklHX0NNRCBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19JTkZPKCJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgc3VjY2VlZGVkLCAiCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgc3VjY2VlZGVkLCAiCiAJCQkiY3JpdGljYWwgdGVtcGVyYXR1cmUgaXMgJWRcbiIsCiAJCQljbWQuY3JpdGljYWxfdGVtcGVyYXR1cmVfUik7CiB9CkBAIC0xMzY4LDcgKzE5MzksNyBAQAogICogV2hlbiBpbiB0aGUgJ2hhbHQnIHN0YXRlLCB0aGUgY2FyZCBpcyBzaHV0IGRvd24gYW5kIG11c3QgYmUgZnVsbHkKICAqIHJlc3RhcnRlZCB0byBjb21lIGJhY2sgb24uCiAgKi8KLXN0YXRpYyBpbnQgaXdsX3NlbmRfY2FyZF9zdGF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBmbGFncywgdTggbWV0YV9mbGFnKQoraW50IGl3bF9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsIHU4IG1ldGFfZmxhZykKIHsKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCkBAIC0xMzc5LDYgKzE5NTAsNyBAQAogCiAJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfY2FyZF9zdGF0ZSk7CiAKIHZvaWQgaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC0xMzg3LDcgKzE5NTksNyBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9GRlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gT0ZGXG4iKTsKIAogCWl3bF9zY2FuX2NhbmNlbChwcml2KTsKIAkvKiBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIEFQICovCkBAIC0xNDE2LDcgKzE5ODgsNyBAQAogCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm4gMDsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9OXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPTlxuIik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwpAQCAtMTQ0MSw3ICsyMDEzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgogCQkJCSAgImRpc2FibGVkIGJ5IEhXIHN3aXRjaFxuIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTE0NjMsMyArMjAzNSw3OCBAQAogCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTChpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8pOworCit2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCByZl9raWxsKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKCFpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsCisJCQkgICJIVyBhbmQvb3IgU1cgUkYgS2lsbCBubyBsb25nZXIgYWN0aXZlLCByZXN0YXJ0aW5nICIKKwkJCSAgImRldmljZVxuIik7CisJCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgJiYKKwkJICAgIHRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpCisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOworCX0gZWxzZSB7CisJCS8qIG1ha2Ugc3VyZSBtYWM4MDIxMSBzdG9wIHNlbmRpbmcgVHggZnJhbWUgKi8KKwkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOworCisJCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQorCQkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgorCQkJCQkgICJkaXNhYmxlZCBieSBTVyBzd2l0Y2hcbiIpOworCQllbHNlCisJCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gRnJlcXVlbmN5IEtpbGwgU3dpdGNoIGlzIE9uOlxuIgorCQkJCSAgICAiS2lsbCBzd2l0Y2ggbXVzdCBiZSB0dXJuZWQgb2ZmIGZvciAiCisJCQkJICAgICJ3aXJlbGVzcyBuZXR3b3JraW5nIHRvIHdvcmsuXG4iKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9iZ19yZl9raWxsKTsKKwordm9pZCBpd2xfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOworCUlXTF9ERUJVR19SWChwcml2LCAic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCisJCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcG1fc2xlZXBfbm90aWYpOworCit2b2lkIGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJEdW1waW5nICVkIGJ5dGVzIG9mIHVuaGFuZGxlZCAiCisJCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsCisJCQlsZTMyX3RvX2NwdShwa3QtPmxlbiksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlMzJfdG9fY3B1KHBrdC0+bGVuKSk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKTsKKwordm9pZCBpd2xfcnhfcmVwbHlfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCisJSVdMX0VSUihwcml2LCAiRXJyb3IgUmVwbHkgdHlwZSAweCUwOFggY21kICVzICgweCUwMlgpICIKKwkJInNlcSAweCUwNFggc2VyIDB4JTA4WFxuIiwKKwkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX3R5cGUpLAorCQlnZXRfY21kX3N0cmluZyhwa3QtPnUuZXJyX3Jlc3AuY21kX2lkKSwKKwkJcGt0LT51LmVycl9yZXNwLmNtZF9pZCwKKwkJbGUxNl90b19jcHUocGt0LT51LmVycl9yZXNwLmJhZF9jbWRfc2VxX251bSksCisJCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl9pbmZvKSk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeF9yZXBseV9lcnJvcik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAppbmRleCA3YzNhMjBhLi4yNzMxMGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03MSw3ICs3MSw3IEBACiAKIAogI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gIjEuMy4yN2siCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDggSW50ZWwgQ29ycG9yYXRpb24iCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDkgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIERSVl9BVVRIT1IgICAgICI8aWx3QGxpbnV4LmludGVsLmNvbT4iCiAKICNkZWZpbmUgSVdMX1BDSV9ERVZJQ0UoZGV2LCBzdWJkZXYsIGNmZykgXApAQCAtMTEwLDYgKzExMCwxNCBAQAogCXZvaWQgKCp0eHFfaW52YWxfYnl0ZV9jbnRfdGJsKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CiAJdm9pZCAoKnR4cV9zZXRfc2NoZWQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG1hc2spOworCWludCAoKnR4cV9hdHRhY2hfYnVmX3RvX3RmZCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSAgICAgdTE2IGxlbiwgdTggcmVzZXQsIHU4IHBhZCk7CisJdm9pZCAoKnR4cV9mcmVlX3RmZCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworCWludCAoKnR4cV9pbml0KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogCS8qIGFnZ3JlZ2F0aW9ucyAqLwogCWludCAoKnR4cV9hZ2dfZW5hYmxlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCB0eF9maWZvLAogCQkJICAgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpOwpAQCAtMjAzLDYgKzIxMSw5IEBACiAJdTE2ICBlZXByb21fY2FsaWJfdmVyOwogCWNvbnN0IHN0cnVjdCBpd2xfb3BzICpvcHM7CiAJY29uc3Qgc3RydWN0IGl3bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zOworCXU4ICAgdmFsaWRfdHhfYW50OworCXU4ICAgdmFsaWRfcnhfYW50OworCWJvb2wgbmVlZF9wbGxfY2ZnOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjEzLDExICsyMjQsMjYgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9vcHMgKmh3X29wcyk7CiB2b2lkIGl3bF9od19kZXRlY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3Jlc2V0X3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpOwordm9pZCBpd2xfc2V0X3J4b25faHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCk7CitpbnQgaXdsX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfc2V0X3J4b25fY2hhaW4oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2gpOwogdm9pZCBpd2xfc2V0X3J4b25faHQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pOwogdTggaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpOwordm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK3ZvaWQgaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSk7CitpbnQgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJICAgdTMyIGRlY3J5cHRfcmVzLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKTsKK3ZvaWQgaXdsX2lycV9oYW5kbGVfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KTsKIGludCBpd2xfaHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTIyNSw2ICsyNTEsMTYgQEAKIHZvaWQgaXdsX3VuaW5pdF9kcnYoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSWCBoYW5kbGVycy4KKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBpd2xfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfcnhfcmVwbHlfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogUlgKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgaXdsX3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpOwpAQCAtMjQ1LDYgKzI4MSw3IEBACiAJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwogdm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Cit2b2lkIGl3bF9yeF9jc2Eoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiAKIC8qIFRYIGhlbHBlcnMgKi8KIApAQCAtMjUyLDkgKzI4OSwxOCBAQAogKiBUWAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGl3bF90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworaW50IGl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCisJCQkJIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbiwgdTggcmVzZXQsIHU4IHBhZCk7CiBpbnQgaXdsX3R4X3NrYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpd2xfaHdfdHhxX2N0eF9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CiBpbnQgaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKK2ludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJICAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCk7Cit2b2lkIGl3bF90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCk7CiBpbnQgaXdsX3R4X2FnZ19zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCwgdTE2ICpzc24pOwogaW50IGl3bF90eF9hZ2dfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgLCBjb25zdCB1OCAqcmEsIHUxNiB0aWQpOwogaW50IGl3bF90eHFfY2hlY2tfZW1wdHkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1OCB0aWQsIGludCB0eHFfaWQpOwpAQCAtMjY3LDcgKzMxMyw3IEBACiAgKiBSRiAtS2lsbCAtIGhlcmUgYW5kIG5vdCBpbiBpd2wtcmZraWxsLmggdG8gYmUgYXZhaWxhYmxlIHdoZW4KICAqIFJGLWtpbGwgc3Vic3lzdGVtIGlzIG5vdCBjb21waWxlZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBpd2xfcmZfa2lsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfYmdfcmZfa2lsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKQEAgLTI3OSw2ICszMjUsMTAgQEAKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyk7CiBpbnQgaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh1MzIgcmF0ZV9uX2ZsYWdzKTsKIAordTggaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKK3ZvaWQgaXdsX3NldF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKIHU4IGl3bF90b2dnbGVfdHhfYW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYW50X2lkeCk7CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGl3bF9hbnRfaWR4X3RvX2ZsYWdzKHU4IGFudF9pZHgpCkBAIC0zMDYsOCArMzU2LDMwIEBACiBpbnQgaXdsX3NjYW5fY2FuY2VsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG1zKTsKIGludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKK3UxNiBpd2xfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLCBpbnQgbGVmdCk7CiB2b2lkIGl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit1MTYgaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkgICAgICB1OCBuX3Byb2Jlcyk7Cit1MTYgaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7Cit2b2lkIGl3bF9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7Cit2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCisvKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCisgKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCisgKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAorICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncworICogbm8gb3RoZXIgdHJhZmZpYykuCisgKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCisjZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBjcHVfdG9fbGUxNigxMCkgIC8qIG1zZWMgKi8KKyNkZWZpbmUgSVdMX1BMQ1BfUVVJRVRfVEhSRVNIICAgICAgIGNwdV90b19sZTE2KDEpICAvKiBwYWNrZXRzICovCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENhbGlicmF0aW9ucyAtIGltcGxlbWVudGVkIGluIGl3bC1jYWxpYi5jCkBAIC0zMTksNyArMzkxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTcGVjdHJ1bSBNZWFzdXJlZW10bnMgaW4gIGl3bC1zcGVjdHJ1bS5jCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0xBR05fU1BFQ1RSVU1fTUVBU1VSRU1FTlQKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikge30KQEAgLTM0MiwxMSArNDE0LDIzIEBACiAKIGludCBpd2xfZW5xdWV1ZV9oY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9ob3N0X2NtZCAqY21kKTsKIAoraW50IGl3bF9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsCisJCQl1OCBtZXRhX2ZsYWcpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFBDSQkJCQkJCSAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaXJxcmV0dXJuX3QgaXdsX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbmxpbmUgdTE2IGl3bF9wY2llX2xpbmtfY3RsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcG9zOworCXUxNiBwY2lfbG5rX2N0bDsKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHByaXYtPnBjaV9kZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnBjaV9sbmtfY3RsKTsKKwlyZXR1cm4gcGNpX2xua19jdGw7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXJyb3IgSGFuZGxpbmcgRGVidWdnaW5nCkBAIC0zNTQsNiArNDM4LDExIEBACiB2b2lkIGl3bF9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEdFT1MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBpd2xjb3JlX2luaXRfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xjb3JlX2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCiAKQEAgLTQyMiw2ICs1MTEsNyBAQAogfQogCiBleHRlcm4gdm9pZCBpd2xfcmZfa2lsbF9jdF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsX3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzKTsKIGV4dGVybiBpbnQgaXdsX3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogZXh0ZXJuIGludCBpd2xfc2VuZF9scV9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAppbmRleCBmMzRlZGU0Li4yZjEyNDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIxMSw2ICsyMTEsOSBAQAogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTM1MCAgICAgICAgICAgKDB4MDAwMDAzMCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUxMDAgICAgICAgICAgICgweDAwMDAwNTApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MTUwICAgICAgICAgICAoMHgwMDAwMDQwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfMTAwMCAgICAgICAgICAgKDB4MDAwMDA2MCkKKyNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4MDAgICAgICAgICAgICgweDAwMDAwNzApCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV82eDUwICAgICAgICAgICAoMHgwMDAwMDgwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfTk9ORSAgICAgICAgICAgKDB4MDAwMDBGMCkKIAogLyogRUVQUk9NIFJFRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKaW5kZXggNTZjMTNiNC4uNjVkMWE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgogICoKQEAgLTI5LDE2ICsyOSwyOSBAQAogI2lmbmRlZiBfX2l3bF9kZWJ1Z19oX18KICNkZWZpbmUgX19pd2xfZGVidWdfaF9fCiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotI2RlZmluZSBJV0xfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCi0gIGRldl9wcmludGsoS0VSTl9FUlIsICYocHJpdi0+aHctPndpcGh5LT5kZXYpLCAiJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCitzdHJ1Y3QgaXdsX3ByaXY7CiAKLSNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKChwcml2LT5kZWJ1Z19sZXZlbCAmIChsZXZlbCkpICYmIG5ldF9yYXRlbGltaXQoKSkgXAotICBkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKHByaXYtPmh3LT53aXBoeS0+ZGV2KSwgIiVjICVzICIgZm10LCBcCi0JIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorI2RlZmluZSBJV0xfRVJSKHAsIGYsIGEuLi4pIGRldl9lcnIoJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCisjZGVmaW5lIElXTF9XQVJOKHAsIGYsIGEuLi4pIGRldl93YXJuKCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfSU5GTyhwLCBmLCBhLi4uKSBkZXZfaW5mbygmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0NSSVQocCwgZiwgYS4uLikgZGV2X2NyaXQoJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworI2RlZmluZSBJV0xfREVCVUcoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChfX3ByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkJCQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKF9fcHJpdi0+aHctPndpcGh5LT5kZXYpLAkJXAorCQkJICIlYyAlcyAiIGZtdCwgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsCVwKKwkJCV9fZnVuY19fICwgIyMgYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKF9fcHJpdiwgbGV2ZWwsIGZtdCwgYXJncy4uLikJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICgoX19wcml2LT5kZWJ1Z19sZXZlbCAmIChsZXZlbCkpICYmIG5ldF9yYXRlbGltaXQoKSkJCVwKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJihfX3ByaXYtPmh3LT53aXBoeS0+ZGV2KSwJCVwKKwkJCSIlYyAlcyAiIGZtdCwgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsCVwKKwkJCSBfX2Z1bmNfXyAsICMjIGFyZ3MpOwkJCQlcCit9IHdoaWxlICgwKQogCiAjZGVmaW5lIGl3bF9wcmludF9oZXhfZHVtcChwcml2LCBsZXZlbCwgcCwgbGVuKSAJCQlcCiBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCkBAIC02MSw2ICs3NCw3IEBACiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfdHhfc3RhdGlzdGljczsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9sb2dfZXZlbnQ7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfY2hhbm5lbHM7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3RhdHVzOwogCX0gZGJnZnNfZGF0YV9maWxlczsKIAlzdHJ1Y3QgZGlyX3JmX2ZpbGVzIHsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX3NlbnNpdGl2aXR5OwpAQCAtNzYsOCArOTAsOCBAQAogI2VuZGlmCiAKICNlbHNlCi0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKQotI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikKKyNkZWZpbmUgSVdMX0RFQlVHKF9fcHJpdiwgbGV2ZWwsIGZtdCwgYXJncy4uLikKKyNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKF9fcHJpdiwgbGV2ZWwsIGZtdCwgYXJncy4uLikKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfcHJpbnRfaGV4X2R1bXAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgdm9pZCAqcCwgdTMyIGxlbikKIHt9CkBAIC0xMTcsODQgKzEzMSw4NSBAQAogICogd2hlbiBDT05GSUdfSVdMV0lGSV9ERUJVRz15LgogICovCiAKKy8qIDB4MDAwMDAwMEYgLSAweDAwMDAwMDAxICovCiAjZGVmaW5lIElXTF9ETF9JTkZPCQkoMSA8PCAwKQogI2RlZmluZSBJV0xfRExfTUFDODAyMTEJCSgxIDw8IDEpCiAjZGVmaW5lIElXTF9ETF9IQ01ECQkoMSA8PCAyKQogI2RlZmluZSBJV0xfRExfU1RBVEUJCSgxIDw8IDMpCisvKiAweDAwMDAwMEYwIC0gMHgwMDAwMDAxMCAqLwogI2RlZmluZSBJV0xfRExfTUFDRFVNUAkJKDEgPDwgNCkKICNkZWZpbmUgSVdMX0RMX0hDTURfRFVNUAkoMSA8PCA1KQotI2RlZmluZSBJV0xfRExfUkFESU8gICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJV0xfRExfUE9XRVIgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJV0xfRExfVEVNUCAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJV0xfRExfUkFESU8JCSgxIDw8IDcpCisvKiAweDAwMDAwRjAwIC0gMHgwMDAwMDEwMCAqLworI2RlZmluZSBJV0xfRExfUE9XRVIJCSgxIDw8IDgpCisjZGVmaW5lIElXTF9ETF9URU1QCQkoMSA8PCA5KQorI2RlZmluZSBJV0xfRExfTk9USUYJCSgxIDw8IDEwKQorI2RlZmluZSBJV0xfRExfU0NBTgkJKDEgPDwgMTEpCisvKiAweDAwMDBGMDAwIC0gMHgwMDAwMTAwMCAqLworI2RlZmluZSBJV0xfRExfQVNTT0MJCSgxIDw8IDEyKQorI2RlZmluZSBJV0xfRExfRFJPUAkJKDEgPDwgMTMpCisjZGVmaW5lIElXTF9ETF9UWFBPV0VSCQkoMSA8PCAxNCkKKyNkZWZpbmUgSVdMX0RMX0FQCQkoMSA8PCAxNSkKKy8qIDB4MDAwRjAwMDAgLSAweDAwMDEwMDAwICovCisjZGVmaW5lIElXTF9ETF9GVwkJKDEgPDwgMTYpCisjZGVmaW5lIElXTF9ETF9SRl9LSUxMCQkoMSA8PCAxNykKKyNkZWZpbmUgSVdMX0RMX0ZXX0VSUk9SUwkoMSA8PCAxOCkKKyNkZWZpbmUgSVdMX0RMX0xFRAkJKDEgPDwgMTkpCisvKiAweDAwRjAwMDAwIC0gMHgwMDEwMDAwMCAqLworI2RlZmluZSBJV0xfRExfUkFURQkJKDEgPDwgMjApCisjZGVmaW5lIElXTF9ETF9DQUxJQgkJKDEgPDwgMjEpCisjZGVmaW5lIElXTF9ETF9XRVAJCSgxIDw8IDIyKQorI2RlZmluZSBJV0xfRExfVFgJCSgxIDw8IDIzKQorLyogMHgwRjAwMDAwMCAtIDB4MDEwMDAwMDAgKi8KKyNkZWZpbmUgSVdMX0RMX1JYCQkoMSA8PCAyNCkKKyNkZWZpbmUgSVdMX0RMX0lTUgkJKDEgPDwgMjUpCisjZGVmaW5lIElXTF9ETF9IVAkJKDEgPDwgMjYpCisjZGVmaW5lIElXTF9ETF9JTwkJKDEgPDwgMjcpCisvKiAweEYwMDAwMDAwIC0gMHgxMDAwMDAwMCAqLworI2RlZmluZSBJV0xfRExfMTFICQkoMSA8PCAyOCkKKyNkZWZpbmUgSVdMX0RMX1NUQVRTCQkoMSA8PCAyOSkKKyNkZWZpbmUgSVdMX0RMX1RYX1JFUExZCQkoMSA8PCAzMCkKKyNkZWZpbmUgSVdMX0RMX1FPUwkJKDEgPDwgMzEpCiAKLSNkZWZpbmUgSVdMX0RMX05PVElGICAgICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIElXTF9ETF9TQ0FOICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJV0xfRExfQVNTT0MgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgSVdMX0RMX0RST1AgICAgICAgICAgKDEgPDwgMTMpCi0KLSNkZWZpbmUgSVdMX0RMX1RYUE9XRVIgICAgICAgKDEgPDwgMTQpCi0KLSNkZWZpbmUgSVdMX0RMX0FQICAgICAgICAgICAgKDEgPDwgMTUpCi0KLSNkZWZpbmUgSVdMX0RMX0ZXICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElXTF9ETF9SRl9LSUxMICAgICAgICgxIDw8IDE3KQotI2RlZmluZSBJV0xfRExfRldfRVJST1JTICAgICAoMSA8PCAxOCkKLQotI2RlZmluZSBJV0xfRExfTEVEICAgICAgICAgICAoMSA8PCAxOSkKLQotI2RlZmluZSBJV0xfRExfUkFURSAgICAgICAgICAoMSA8PCAyMCkKLQotI2RlZmluZSBJV0xfRExfQ0FMSUIgICAgICAgICAoMSA8PCAyMSkKLSNkZWZpbmUgSVdMX0RMX1dFUCAgICAgICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIElXTF9ETF9UWCAgICAgICAgICAgICgxIDw8IDIzKQotI2RlZmluZSBJV0xfRExfUlggICAgICAgICAgICAoMSA8PCAyNCkKLSNkZWZpbmUgSVdMX0RMX0lTUiAgICAgICAgICAgKDEgPDwgMjUpCi0jZGVmaW5lIElXTF9ETF9IVCAgICAgICAgICAgICgxIDw8IDI2KQotI2RlZmluZSBJV0xfRExfSU8gICAgICAgICAgICAoMSA8PCAyNykKLSNkZWZpbmUgSVdMX0RMXzExSCAgICAgICAgICAgKDEgPDwgMjgpCi0KLSNkZWZpbmUgSVdMX0RMX1NUQVRTICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIElXTF9ETF9UWF9SRVBMWSAgICAgICgxIDw8IDMwKQotI2RlZmluZSBJV0xfRExfUU9TICAgICAgICAgICAoMSA8PCAzMSkKLQotI2RlZmluZSBJV0xfRVJST1IoZiwgYS4uLikgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX1dBUk5JTkcoZiwgYS4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAiIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTkZPKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfSU5GTywgZiwgIyMgYSkKLQotI2RlZmluZSBJV0xfREVCVUdfTUFDODAyMTEoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfTUFDODAyMTEsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19NQUNEVU1QKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX01BQ0RVTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19URU1QKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9URU1QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU0NBTihmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfU0NBTiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JYKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX1JYLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfVFgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JU1IoZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JU1IsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19MRUQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9MRUQsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19XRVAoZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9XRVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hDTUQsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IQ19EVU1QKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSENNRF9EVU1QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0ZXKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfRlcsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0RST1AoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0lPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFURShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1JBVEUsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX05PVElGKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTk9USUYsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChmLCBhLi4uKSBcCi0JSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSFQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IVCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TVEFUU19MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX1RYX1JFUExZLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUU9TKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9RT1MsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQURJTyhmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF9SQURJTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1BPV0VSKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1BPV0VSLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfMTFIKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMXzExSCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0lORk8ocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9JTkZPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTUFDODAyMTEocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX01BQ0RVTVAocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9NQUNEVU1QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVEVNUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RFTVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19TQ0FOKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfU0NBTiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JYKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUlgsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19UWChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RYLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSVNSKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSVNSLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTEVEKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfTEVELCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfV0VQKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfV0VQLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSEMocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9IQ01ELCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSENfRFVNUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0hDTURfRFVNUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0NBTElCKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfQ0FMSUIsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19GVyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0ZXLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUkZfS0lMTChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JGX0tJTEwsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19EUk9QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0RST1BfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX0RST1AsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19BUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0FQLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19JTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0lPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUkFURShwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JBVEUsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKHAsIGYsIGEuLi4pCVwKKwkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9SQVRFLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTk9USUYocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKHAsIGYsIGEuLi4pCVwKKwkJSVdMX0RFQlVHKHAsIElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVNTT0NfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IVChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0hULCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfU1RBVFMocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9TVEFUUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHAsIGYsIGEuLi4pCVwKKwkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9TVEFUUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19UWF9SRVBMWV9MSU1JVChwLCBmLCBhLi4uKSBcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19RT1MocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9RT1MsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SQURJTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JBRElPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUE9XRVIocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9QT1dFUiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHXzExSChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMXzExSCwgZiwgIyMgYSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKaW5kZXggZDUyNTNhMS4uMzZjZmVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC02Myw2ICs2MywxNCBAQAogCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgREVCVUdGU19BRERfWDMyKG5hbWUsIHBhcmVudCwgcHRyKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lID0gICAgICAgICAgICAgICAgICAgICBcCisJZGVidWdmc19jcmVhdGVfeDMyKCNuYW1lLCAwNDQ0LCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgICAgXAorCWlmIChJU19FUlIoZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCQlcCisJCQl8fCAhZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCVwKKwkJZ290byBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCiAjZGVmaW5lIERFQlVHRlNfUkVNT1ZFKG5hbWUpICBkbyB7ICAgICAgICAgICAgICBcCiAJZGVidWdmc19yZW1vdmUobmFtZSk7ICAgICAgICAgICAgICAgICAgIFwKIAluYW1lID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTY0LDkgKzE3Miw2IEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJvZmZzZXQgaXM6IDB4JXhcdGxlbiBpczogMHgleFxuIiwKLQlwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQsIHByaXYtPmRiZ2ZzLT5zcmFtX2xlbik7Ci0KIAlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWZvciAoaSA9IHByaXYtPmRiZ2ZzLT5zcmFtX2xlbjsgaSA+IDA7IGkgLT0gNCkgewogCQl2YWwgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQgKyBcCkBAIC0zMDEsMTQgKzMwNiwxNCBAQAogCWJ1Zl9zaXplID0gNCAqIGVlcHJvbV9sZW4gKyAyNTY7CiAKIAlpZiAoZWVwcm9tX2xlbiAlIDE2KSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDE2LlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVFUFJPTSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAxNi5cbiIpOwogCQlyZXR1cm4gLUVOT0RBVEE7CiAJfQogCiAJLyogNCBjaGFyYWN0ZXJzIGZvciBieXRlIDB4WVkgKi8KIAlidWYgPSBremFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTM2NSw3ICszNzAsNyBAQAogCiAJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJSVdMX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC00MjAsNyArNDI1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIERFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhzcmFtKTsKIERFQlVHRlNfV1JJVEVfRklMRV9PUFMobG9nX2V2ZW50KTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhlZXByb20pOwpAQCAtNDYyLDYgKzQ2Niw3IEBACiAJREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkYXRhKTsKIAlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoY2hhbm5lbHMsIGRhdGEpOworCURFQlVHRlNfQUREX1gzMihzdGF0dXMsIGRhdGEsICh1MzIgKikmcHJpdi0+c3RhdHVzKTsKIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfc2Vuc2l0aXZpdHksIHJmLCAmcHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCk7CiAJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX2NoYWluX25vaXNlLCByZiwKIAkJCSAmcHJpdi0+ZGlzYWJsZV9jaGFpbl9ub2lzZV9jYWwpOwpAQCAtNDY5LDcgKzQ3NCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycjoKLQlJV0xfRVJST1IoIkNhbid0IG9wZW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKKwlJV0xfRVJSKHByaXYsICJDYW4ndCBvcGVuIHRoZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CiAJaXdsX2RiZ2ZzX3VucmVnaXN0ZXIocHJpdik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggMDQ2OGZjYy4uMGJhYWU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzYsMTMgKzM2LDE1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCi0jZGVmaW5lIERSVl9OQU1FICAgICAgICAiaXdsYWduIgotI2luY2x1ZGUgIml3bC1yZmtpbGwuaCIKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCi0jaW5jbHVkZSAiaXdsLTQ5NjUtaHcuaCIKICNpbmNsdWRlICJpd2wtY3NyLmgiCiAjaW5jbHVkZSAiaXdsLXBycGguaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKICNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtcmZraWxsLmgiCisjaW5jbHVkZSAiaXdsLTQ5NjUtaHcuaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1ody5oIgorI2luY2x1ZGUgIml3bC0zOTQ1LWxlZC5oIgogI2luY2x1ZGUgIml3bC1sZWQuaCIKICNpbmNsdWRlICJpd2wtcG93ZXIuaCIKICNpbmNsdWRlICJpd2wtYWduLXJzLmgiCkBAIC01NSw2ICs1NywyOCBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWJnX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfM2Fnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ25fY2ZnOworCisvKiBzaGFyZWQgc3RydWN0dXJlcyBmcm9tIGl3bC01MDAwLmMgKi8KK2V4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsNTBfbW9kX3BhcmFtczsKK2V4dGVybiBzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wczsKK2V4dGVybiBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNTAwMF9saWI7CitleHRlcm4gc3RydWN0IGl3bF9oY21kX29wcyBpd2w1MDAwX2hjbWQ7CitleHRlcm4gc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w1MDAwX2hjbWRfdXRpbHM7CisKKy8qIHNoYXJlZCBmdW5jdGlvbnMgZnJvbSBpd2wtNTAwMC5jICovCitleHRlcm4gdTE2IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pOworZXh0ZXJuIHUxNiBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kKGNvbnN0IHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqY21kLAorCQkJCSAgICAgdTggKmRhdGEpOworZXh0ZXJuIHZvaWQgaXdsNTAwMF9ydHNfdHhfY21kX2ZsYWcoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJCSAgICBfX2xlMzIgKnR4X2ZsYWdzKTsKK2V4dGVybiBpbnQgaXdsNTAwMF9jYWxjX3Jzc2koc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnJ4X3Jlc3ApOwogCiAvKiBDVC1LSUxMIGNvbnN0YW50cyAqLwogI2RlZmluZSBDVF9LSUxMX1RIUkVTSE9MRAkxMTAgLyogaW4gQ2Vsc2l1cyAqLwpAQCAtMTMyLDkgKzE1NiwxMiBAQAogICogQSBUeCBxdWV1ZSBjb25zaXN0cyBvZiBjaXJjdWxhciBidWZmZXIgb2YgQkRzIChhLmsuYS4gVEZEcywgdHJhbnNtaXQgZnJhbWUKICAqIGRlc2NyaXB0b3JzKSBhbmQgcmVxdWlyZWQgbG9ja2luZyBzdHJ1Y3R1cmVzLgogICovCisjZGVmaW5lIFRGRF9UWF9DTURfU0xPVFMgMjU2CisjZGVmaW5lIFRGRF9DTURfU0xPVFMgMzIKKwogc3RydWN0IGl3bF90eF9xdWV1ZSB7CiAJc3RydWN0IGl3bF9xdWV1ZSBxOwotCXN0cnVjdCBpd2xfdGZkICp0ZmRzOworCXZvaWQgKnRmZHM7CiAJc3RydWN0IGl3bF9jbWQgKmNtZFtURkRfVFhfQ01EX1NMT1RTXTsKIAlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4YjsKIAl1OCBuZWVkX3VwZGF0ZTsKQEAgLTE1NCw2ICsxODEsMzYgQEAKIAlzNjQgbGFzdF9yYWRhcl90aW1lOwogfTsKIAorI2RlZmluZSBJV0w0OTY1X01BWF9SQVRFICgzMykKKworc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCB7CisJLyogbWF4aW11bSBwb3dlciBsZXZlbCB0byBwcmV2ZW50IGNsaXBwaW5nIGZvciBlYWNoIHJhdGUsIGRlcml2ZWQgYnkKKwkgKiAgIHVzIGZyb20gdGhpcyBiYW5kJ3Mgc2F0dXJhdGlvbiBwb3dlciBpbiBFRVBST00gKi8KKwljb25zdCBzOCBjbGlwX3Bvd2Vyc1tJV0xfTUFYX1JBVEVTXTsKK307CisKKy8qIGN1cnJlbnQgVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHJhdGUgZm9yIGVhY2ggY2hhbm5lbC4KKyAqIHJlcXVlc3RlZCBwb3dlciBpcyBsaW1pdGVkIGJ5OgorICogLS0gcmVndWxhdG9yeSBFRVBST00gbGltaXRzIGZvciB0aGlzIGNoYW5uZWwKKyAqIC0tIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoY2xpcC1wb3dlcnMpCisgKiAtLSBzcGVjdHJ1bSBtYW5hZ2VtZW50CisgKiAtLSB1c2VyIHByZWZlcmVuY2UgKGUuZy4gaXdjb25maWcpCisgKiB3aGVuIHJlcXVlc3RlZCBwb3dlciBpcyBzZXQsIGJhc2UgcG93ZXIgaW5kZXggbXVzdCBhbHNvIGJlIHNldC4gKi8KK3N0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfcG93ZXJfaW5mbyB7CisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCisJczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCisJczggYmFzZV9wb3dlcl9pbmRleDsJLyogZ2FpbiBpbmRleCBmb3IgcG93ZXIgYXQgZmFjdG9yeSB0ZW1wLiAqLworCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogcG93ZXIgKGRCbSkgcmVxdWVzdGVkIGZvciB0aGlzIGNobmwvcmF0ZSAqLworfTsKKworLyogY3VycmVudCBzY2FuIFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCBzY2FuIHJhdGUgZm9yIGVhY2gKKyAqIGNoYW5uZWwuICovCitzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8geworCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLworCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLworCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogc2NhbiBwd3IgKGRCbSkgcmVxdWVzdGVkIGZvciBjaG5sL3JhdGUgKi8KK307CisKIC8qCiAgKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCwgaG9sZHMgYWxsIGNoYW5uZWwgc2V0dXAgZGF0YQogICogU29tZSBvZiB0aGUgZmllbGRzIChlLmcuIGVlcHJvbSBhbmQgZmxhZ3MvbWF4X3Bvd2VyX2F2ZykgYXJlIHJlZHVuZGFudApAQCAtMTg0LDggKzI0MSwxNSBAQAogCXM4IGZhdF9zY2FuX3Bvd2VyOwkvKiAoZEJtKSBlZXByb20sIGRpcmVjdCBzY2FucywgYW55IHJhdGUgKi8KIAl1OCBmYXRfZmxhZ3M7CQkvKiBmbGFncyBjb3BpZWQgZnJvbSBFRVBST00gKi8KIAl1OCBmYXRfZXh0ZW5zaW9uX2NoYW5uZWw7IC8qIEhUX0lFX0VYVF9DSEFOTkVMXyogKi8KLX07CiAKKwkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCAibm9ybWFsIiBkYXRhIFR4IHJhdGUuCisJICogVGhlc2UgaW5jbHVkZSwgaW4gYWRkaXRpb24gdG8gUkYgYW5kIERTUCBnYWluLCBhIGZldyBmaWVsZHMgZm9yCisJICogICByZW1lbWJlcmluZy9tb2RpZnlpbmcgZ2FpbiBzZXR0aW5ncyAoaW5kZXhlcykuICovCisJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHBvd2VyX2luZm9bSVdMNDk2NV9NQVhfUkFURV07CisKKwkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCBzY2FuIHJhdGUsIGZvciBkaXJlY3RlZCBzY2Fucy4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gc2Nhbl9wd3JfaW5mb1tJV0xfTlVNX1NDQU5fUkFURVNdOworfTsKIAogI2RlZmluZSBJV0xfVFhfRklGT19BQzAJMAogI2RlZmluZSBJV0xfVFhfRklGT19BQzEJMQpAQCAtMzcwLDcgKzQzNCw3IEBACiAJdTgga2V5WzMyXTsKIH07CiAKLXVuaW9uIGl3bDQ5NjVfaHRfcmF0ZV9zdXBwIHsKK3VuaW9uIGl3bF9odF9yYXRlX3N1cHAgewogCXUxNiByYXRlczsKIAlzdHJ1Y3QgewogCQl1OCBzaXNvX3JhdGU7CkBAIC00MzAsNiArNDk0LDI0IEBACiAjZGVmaW5lIFNUQV9QU19TVEFUVVNfV0FLRSAgICAgICAgICAgICAwCiAjZGVmaW5lIFNUQV9QU19TVEFUVVNfU0xFRVAgICAgICAgICAgICAxCiAKK3N0cnVjdCBpd2wzOTQ1X3RpZF9kYXRhIHsKKwl1MTYgc2VxX251bWJlcjsKK307CisKK3N0cnVjdCBpd2wzOTQ1X2h3X2tleSB7CisJZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGc7CisJaW50IGtleWxlbjsKKwl1OCBrZXlbMzJdOworfTsKKworc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSB7CisJc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCBzdGE7CisJc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgdGlkW01BWF9USURfQ09VTlRdOworCXU4IHVzZWQ7CisJdTggcHNfc3RhdHVzOworCXN0cnVjdCBpd2wzOTQ1X2h3X2tleSBrZXlpbmZvOworfTsKKwogc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5IHsKIAlzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgc3RhOwogCXN0cnVjdCBpd2xfdGlkX2RhdGEgdGlkW01BWF9USURfQ09VTlRdOwpAQCAtNDk3LDExICs1NzksMTMgQEAKICAqIEBtYXhfdHhxX251bTogTWF4ICMgVHggcXVldWVzIHN1cHBvcnRlZAogICogQGRtYV9jaG5sX251bTogTnVtYmVyIG9mIFR4IERNQS9GSUZPIGNoYW5uZWxzCiAgKiBAc2NkX2JjX3RibHNfc2l6ZTogc2l6ZSBvZiBzY2hlZHVsZXIgYnl0ZSBjb3VudCB0YWJsZXMKKyAqIEB0ZmRfc2l6ZTogVEZEIHNpemUKICAqIEB0eC9yeF9jaGFpbnNfbnVtOiBOdW1iZXIgb2YgVFgvUlggY2hhaW5zCiAgKiBAdmFsaWRfdHgvcnhfYW50OiB1c2FibGUgYW50ZW5uYXMKICAqIEBtYXhfcnhxX3NpemU6IE1heCAjIFJ4IGZyYW1lcyBpbiBSeCBxdWV1ZSAobXVzdCBiZSBwb3dlci1vZi0yKQogICogQG1heF9yeHFfbG9nOiBMb2ctYmFzZS0yIG9mIG1heF9yeHFfc2l6ZQogICogQHJ4X2J1Zl9zaXplOiBSeCBidWZmZXIgc2l6ZQorICogQHJ4X3dydF9wdHJfcmVnOiBGSHszOX1fUlNDU1JfQ0hOTDBfV1BUUgogICogQG1heF9zdGF0aW9uczoKICAqIEBiY2FzdF9zdGFfaWQ6CiAgKiBAZmF0X2NoYW5uZWw6IGlzIDQwTUh6IHdpZHRoIHBvc3NpYmxlIGluIGJhbmQgMi40CkBAIC01MTYsNiArNjAwLDcgQEAKIAl1OCBtYXhfdHhxX251bTsKIAl1OCBkbWFfY2hubF9udW07CiAJdTE2IHNjZF9iY190YmxzX3NpemU7CisJdTMyIHRmZF9zaXplOwogCXU4ICB0eF9jaGFpbnNfbnVtOwogCXU4ICByeF9jaGFpbnNfbnVtOwogCXU4ICB2YWxpZF90eF9hbnQ7CkBAIC01MjMsNiArNjA4LDcgQEAKIAl1MTYgbWF4X3J4cV9zaXplOwogCXUxNiBtYXhfcnhxX2xvZzsKIAl1MzIgcnhfYnVmX3NpemU7CisJdTMyIHJ4X3dydF9wdHJfcmVnOwogCXUzMiBtYXhfcGt0X3NpemU7CiAJdTggIG1heF9zdGF0aW9uczsKIAl1OCAgYmNhc3Rfc3RhX2lkOwpAQCAtNzU1LDcgKzg0MSw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCi0jaWZkZWYgQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAorI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpIHx8IGRlZmluZWQoQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpCiAJLyogc3BlY3RydW0gbWVhc3VyZW1lbnQgcmVwb3J0IGNhY2hpbmcgKi8KIAlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKIAl1OCBtZWFzdXJlbWVudF9zdGF0dXM7CkBAIC03NjgsNiArODU0LDEwIEBACiAJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoYW5uZWxfaW5mbzsJLyogY2hhbm5lbCBpbmZvIGFycmF5ICovCiAJdTggY2hhbm5lbF9jb3VudDsJLyogIyBvZiBjaGFubmVscyAqLwogCisJLyogZWFjaCBjYWxpYnJhdGlvbiBjaGFubmVsIGdyb3VwIGluIHRoZSBFRVBST00gaGFzIGEgZGVyaXZlZAorCSAqIGNsaXAgc2V0dGluZyBmb3IgZWFjaCByYXRlLiAzOTQ1IG9ubHkuKi8KKwljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIGNsaXAzOV9ncm91cHNbNV07CisKIAkvKiB0aGVybWFsIGNhbGlicmF0aW9uICovCiAJczMyIHRlbXBlcmF0dXJlOwkvKiBkZWdyZWVzIEtlbHZpbiAqLwogCXMzMiBsYXN0X3RlbXBlcmF0dXJlOwpAQCAtNzgxLDcgKzg3MSw3IEBACiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9wYXNzX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydF90c2Y7Ci0Jc3RydWN0IGl3bF9zY2FuX2NtZCAqc2NhbjsKKwl2b2lkICpzY2FuOwogCWludCBzY2FuX2JhbmRzOwogCWludCBvbmVfZGlyZWN0X3NjYW47CiAJdTggZGlyZWN0X3NzaWRfbGVuOwpAQCAtODMyLDE4ICs5MjIsMTggQEAKIAkgKiA0OTY1J3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCiAJc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZV9pbml0OwogCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOwotI2lmZGVmIENPTkZJR19JV0xXSUZJX1JGS0lMTAorI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfUkZLSUxMKQogCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwotCXN0cnVjdCBpd2xfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOwogCXU4IGxhc3RfYmxpbmtfcmF0ZTsKIAl1OCBhbGxvd19ibGlua2luZzsKIAl1NjQgbGVkX3RwdDsKKwlzdHJ1Y3QgaXdsX2xlZCBsZWRbSVdMX0xFRF9UUkdfTUFYXTsKKwl1bnNpZ25lZCBpbnQgcnh0eHBhY2tldHM7CiAjZW5kaWYKLQogCXUxNiBhY3RpdmVfcmF0ZTsKIAl1MTYgYWN0aXZlX3JhdGVfYmFzaWM7CiAKQEAgLTg5Myw3ICs5ODMsNiBAQAogCXUxNiByYXRlc19tYXNrOwogCiAJdTMyIHBvd2VyX21vZGU7Ci0JdTMyIGFudGVubmE7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXUxNiBydHNfdGhyZXNob2xkOwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKQEAgLTkyOSw2ICsxMDE4LDEwIEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAorCS8qQWRkZWQgZm9yIDM5NDUgKi8KKwl2b2lkICpzaGFyZWRfdmlydDsKKwlkbWFfYWRkcl90IHNoYXJlZF9waHlzOworCS8qRW5kKi8KIAlzdHJ1Y3QgaXdsX2h3X3BhcmFtcyBod19wYXJhbXM7CiAKIApAQCAtOTYwLDYgKzEwNTMsMTEgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfYWxpdmVfc3RhcnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhbGl2ZV9zdGFydDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY2hlY2s7CisKKwkvKkZvciAzOTQ1IG9ubHkqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgdGhlcm1hbF9wZXJpb2RpYzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCiAJLyogVFggUG93ZXIgKi8KIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKIAlzOCB0eF9wb3dlcl9jaGFubmVsX2xtdDsKQEAgLTk4Miw2ICsxMDgwLDE1IEBACiAJdTMyIGRpc2FibGVfdHhfcG93ZXJfY2FsOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBydW5fdGltZV9jYWxpYl93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRpc3RpY3NfcGVyaW9kaWM7CisKKwkvKkZvciAzOTQ1Ki8KKyNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgorCisJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzXzM5OworCisJc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc18zOVtJV0xfU1RBVElPTl9DT1VOVF07CisKKwl1MzIgc3RhX3N1cHBfcmF0ZXM7CiB9OyAvKml3bF9wcml2ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IGNlMmY0NzMuLjc1NTE3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAKIHsKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwogCWlmICgoZ3AgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSykgPT0gQ1NSX0VFUFJPTV9HUF9CQURfU0lHTkFUVVJFKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSwKIAkJCQlFRVBST01fU0VNX1RJTUVPVVQpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCUlXTF9ERUJVR19JTygiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKKwkJCUlXTF9ERUJVR19JTyhwcml2LCAiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKIAkJCQljb3VudCsxKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy52ZXJpZnlfc2lnbmF0dXJlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTIzMSw3ICsyMzEsNyBAQAogCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KIAlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gYWNxdWlyZSBFRVBST00gc2VtYXBob3JlLlxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQkJCQkgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAogCQkJCQkgIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF1cbiIsIGFkZHIpOworCQkJSVdMX0VSUihwcml2LCAiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdXG4iLCBhZGRyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnI6Ci0JSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBFRVBST00gVkVSPTB4JXggPCAweCV4IENBTElCPTB4JXggPCAweCV4XG4iLAorCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSBWRVI9MHgleCA8IDB4JXggQ0FMSUI9MHgleCA8IDB4JXhcbiIsCiAJCSAgZWVwcm9tX3ZlciwgcHJpdi0+Y2ZnLT5lZXByb21fdmVyLAogCQkgIGNhbGliX3ZlciwgIHByaXYtPmNmZy0+ZWVwcm9tX2NhbGliX3Zlcik7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19JTkZPKCJGQVQgQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiRkFUIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC00MzIsMTEgKzQzMiwxMSBAQAogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCiAJaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemluZyByZWd1bGF0b3J5IGluZm8gZnJvbSBFRVBST01cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCXByaXYtPmNoYW5uZWxfY291bnQgPQogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8xKSArCkBAIC00NDUsMTIgKzQ0NSwxMiBAQAogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF80KSArCiAJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzUpOwogCi0JSVdMX0RFQlVHX0lORk8oIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLCBwcml2LT5jaGFubmVsX2NvdW50KTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwogCiAJcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9jaGFubmVsX2luZm8pICoKIAkJCQkgICAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y2hhbm5lbF9pbmZvKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWxfaW5mb1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwogCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJIElFRUU4MDIxMV9DSEFOX05PX0ZBVF9CRUxPVyk7CiAKIAkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7Ci0JCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgorCQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgRmxhZ3MgJXggWyVzR0h6XSAtICIKIAkJCQkJICAgICAgICJObyB0cmFmZmljXG4iLAogCQkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGNoX2luZm8tPmZsYWdzLApAQCAtNTAxLDcgKzUwMSw3IEBACiAJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CiAJCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwogCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKIAkJCQkgICAgICAgIiBBZC1Ib2MgJXNzdXBwb3J0ZWRcbiIsCiAJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCiAJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJCQkgICAgIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKQogCQkJCSAgICAgICA/ICIiIDogIm5vdCAiKTsKIAotCQkJLyogU2V0IHRoZSB1c2VyX3R4cG93ZXJfbGltaXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKKwkJCS8qIFNldCB0aGUgdHhfcG93ZXJfdXNlcl9sbXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKIAkJCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbCAqLwogCQkJaWYgKGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnID4KIAkJCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KQpAQCAtNTMxLDYgKzUzMSwxMyBAQAogCQl9CiAJfQogCisJLyogQ2hlY2sgaWYgd2UgZG8gaGF2ZSBGQVQgY2hhbm5lbHMgKi8KKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzWzVdID09CisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFUICYmCisJICAgIHByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMucmVndWxhdG9yeV9iYW5kc1s2XSA9PQorCSAgICBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCkKKwkJcmV0dXJuIDA7CisKIAkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCiAJZm9yIChiYW5kID0gNjsgYmFuZCA8PSA3OyBiYW5kKyspIHsKIAkJZW51bSBpZWVlODAyMTFfYmFuZCBpZWVlYmFuZDsKQEAgLTU4Miw2ICs1ODksNyBAQAogCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7CiAJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX2NoYW5uZWxfbWFwKTsKIAogLyoqCiAgKiBpd2xfZ2V0X2NoYW5uZWxfaW5mbyAtIEZpbmQgZHJpdmVyJ3MgcHJpdmF0ZSBjaGFubmVsIGluZm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggNjAzYzg0Yi4uMzQ3OTE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExOCw2ICsxMTgsOSBAQAogCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogMzk0NSBTcGVjaWZpYyAqLworI2RlZmluZSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTgkoMHgyZikKKwogLyogNDk2NSBoYXMgdHdvIHJhZGlvIHRyYW5zbWl0dGVycyAoYW5kIDMgcmFkaW8gcmVjZWl2ZXJzKSAqLwogI2RlZmluZSBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TICAgICAgKDIpCiAKQEAgLTM2Nyw2ICszNzAsOCBAQAogICovCiAjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9GQVRfQ0hBTk5FTFMgKDIqMHhBOCkJLyogMjIgYnl0ZXMgKi8KIAorI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVAkJCSgwKQorCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgewogCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwogCWludCAoKnZlcmlmeV9zaWduYXR1cmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKaW5kZXggZDdkYTE5OC4uNjVmYThhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM5OSw2ICszOTksMjEgQEAKICAqLwogI2RlZmluZSBGSF9UWF9DSElDS0VOX0JJVFNfU0NEX0FVVE9fUkVUUllfRU4JKDB4MDAwMDAwMDIpCiAKKyNkZWZpbmUgUlhfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgUlhfUVVFVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgUlhfUVVFVUVfU0laRV9MT0cgICAgICAgICAgICAgICAgICAgICA4CisKKy8qCisgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAorI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKKworLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLworI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfM0sgKDMgKiAxMDAwKSAvKiAzOTQ1IG9ubHkgKi8KKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzRLICg0ICogMTAyNCkKKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzhLICg4ICogMTAyNCkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3JiX3N0YXR1cyAtIHJlc2V2ZSBidWZmZXIgc3RhdHVzCiAgKiAJaG9zdCBtZW1vcnkgbWFwcGVkIEZIIHJlZ2lzdGVycwpAQCAtNDE0LDYgKzQyOSw3IEBACiAJX19sZTE2IGNsb3NlZF9mcl9udW07CiAJX19sZTE2IGZpbmlzaGVkX3JiX251bTsKIAlfX2xlMTYgZmluaXNoZWRfZnJfbmFtOworCV9fbGUzMiBfX3VudXNlZDsgLyogMzk0NSBvbmx5ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC00NzcsNyArNDkzLDYgQEAKIAlfX2xlMzIgX19wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotCiAvKiBLZWVwIFdhcm0gU2l6ZSAqLwogI2RlZmluZSBJV0xfS1dfU0laRSAweDEwMDAJLyogNGsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDRiMzViMzAuLjE3ZDYxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTA5LDE0ICsxMDksMTQgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJXMuXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAlcy5cbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXJldHVybiAxOwogCX0KIAogCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlzd2l0Y2ggKGNtZC0+aGRyLmNtZCkgewogCWNhc2UgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRDoKIAljYXNlIFNFTlNJVElWSVRZX0NNRDoKLQkJSVdMX0RFQlVHX0hDX0RVTVAoImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKKwkJSVdMX0RFQlVHX0hDX0RVTVAocHJpdiwgImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CiAJCQkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9ERUJVR19IQyhwcml2LCAiYmFjayBmcm9tICVzICgweCUwOFgpXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAl9CiAjZW5kaWYKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJcmV0ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzQsOCArMTc0LDkgQEAKIAlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKKwkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODgsNyArMTg5LDcgQEAKIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nICVzOiBlbnF1ZXVlX2hjbWQgZmFpbGVkOiAlZFxuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE5OCw5ICsxOTksMTAgQEAKIAkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CiAKIAkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKQEAgLTIwOSwxOSArMjExLDE5IEBACiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUNBTkNFTEVEOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGNhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAppbmRleCBjYTRmNjM4Li5mYjY0ZDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAppbmRleCAwYTkyZTc0Li4wODNlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtNjYsNyArNjYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlMzIoY29uc3QgY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgdTMyIG9mcywgdTMyIHZhbCkKIHsKLQlJV0xfREVCVUdfSU8oIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwogfQogI2RlZmluZSBpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgXApAQCAtNzksNyArNzksNyBAQAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiBzdGF0aWMgaW5saW5lIHUzMiBfX2l3bF9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG9mcykKIHsKLQlJV0xfREVCVUdfSU8oInJlYWRfZGlyZWN0MzIoMHglMDhYKSAtICVzICVkXG4iLCBvZnMsIGYsIGwpOworCUlXTF9ERUJVR19JTyhwcml2LCAicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7CiAJcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7CiB9CiAjZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJCQkgdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKIHsKIAlpbnQgcmV0ID0gX2l3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAorCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSAlcy0gJXMgJWRcbiIsCiAJCSAgICAgYWRkciwgYml0cywgbWFzaywKIAkJICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwogCXJldHVybiByZXQ7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCQkgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKIHsKIAl1MzIgdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2s7Ci0JSVdMX0RFQlVHX0lPKCJzZXRfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WFxuIiwgcmVnLCBtYXNrLCB2YWwpOworCUlXTF9ERUJVR19JTyhwcml2LCAic2V0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfc2V0X2JpdChwLCByLCBtKSBfX2l3bF9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSkKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiB7CiAJdTMyIHZhbCA9IF9pd2xfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfY2xlYXJfYml0KHAsIHIsIG0pIF9faXdsX2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCkBAIC0xNTYsNiArMTU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OworCXUzMiB2YWw7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCiAJCXJldHVybiAwOwpAQCAtMTY1LDkgKzE2NiwxMCBAQAogCXJldCA9IF9pd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKIAkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCA1MCk7CisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0dPSU5HX1RPX1NMRUVQKSwgMTUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiTUFDIGlzIGluIGRlZXAgc2xlZXAhXG4iKTsKKwkJdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKKwkJSVdMX0VSUihwcml2LCAiTUFDIGlzIGluIGRlZXAgc2xlZXAhLiAgQ1NSX0dQX0NOVFJMID0gMHglMDhYXG4iLCB2YWwpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE4Miw5ICsxODQsOSBAQAogCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJHcmFiYmluZyBhY2Nlc3Mgd2hpbGUgYWxyZWFkeSBoZWxkICVzICVkLlxuIiwgZiwgbCk7CisJCUlXTF9FUlIocHJpdiwgIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygiZ3JhYmJpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CiAJcmV0dXJuIF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogfQogI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKQEAgLTIwNyw5ICsyMDksOSBAQAogCQkJCQkgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlcyAlZC5cbiIsIGYsIGwpOworCQlJV0xfRVJSKHByaXYsICJSZWxlYXNlIHVuaGVsZCBuaWMgYWNjZXNzIGF0IGxpbmUgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CisJSVdMX0RFQlVHX0lPKHByaXYsICJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKIAlfaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KICNkZWZpbmUgaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCkBAIC0yMjksOCArMjMxLDggQEAKIHsKIAl1MzIgdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyAlZFxuIiwgZiwgbCk7Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTRYKSA9IDB4JTA4eCAtICVzICVkIFxuIiwgcmVnLCB2YWx1ZSwKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWQgXG4iLCByZWcsIHZhbHVlLAogCQkgICAgIGYsIGwpOwogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTI1MCw3ICsyNTIsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsIHZhbHVlKTsKIH0KICNkZWZpbmUgaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpIFwKQEAgLTI4NCwxMCArMjg2LDEwIEBACiAJaW50IHJldCAgPSBfaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKKwkJSVdMX0RFQlVHX0lPKHByaXYsICJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpIC0gIgogCQkJICAgICAidGltZWRvdXQgLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgZiwgbCk7CiAJZWxzZQotCQlJV0xfREVCVUdfSU8oInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgorCQlJV0xfREVCVUdfSU8ocHJpdiwgInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgogCQkJICAgICAiLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgcmV0LCBmLCBsKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA4LDcgKzMxMCw3IEBACiAJCQkJICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlyZXR1cm4gX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKIH0KIApAQCAtMzMxLDcgKzMzMyw3IEBACiAJCQkJICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiB2YWwpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlfaXdsX3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKIH0KIApAQCAtMzQ5LDcgKzM1MSw3IEBACiAJCQkJICAgICAgIHUzMiByZWcsIHUzMiBtYXNrKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAKIAlfaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKIH0KQEAgLTM2Nyw3ICszNjksNyBAQAogCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBiaXRzLCB1MzIgbWFzaykKIHsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOwogCV9pd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzayk7CiB9CiAjZGVmaW5lIGl3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCmluZGV4IDExZWNjZDcuLjE5NjgwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTEyMyw3ICsxMjMsNyBAQAogLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfb25fcmVnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb24gJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9uICVkXG4iLCBsZWRfaWQpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09OKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCQkub2ZmID0gMCwKIAkJLmludGVydmFsID0gSVdMX0RFRl9MRURfSU5UUlZMCiAJfTsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb2ZmICVkXG4iLCBsZWRfaWQpOworCUlXTF9ERUJVR19MRUQocHJpdiwgImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CiAJcmV0dXJuIGl3bF9zZW5kX2xlZF9jbWQocHJpdiwgJmxlZF9jbWQpOwogfQogI2VuZGlmCkBAIC0xNTksNyArMTU5LDcgQEAKIC8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCiBzdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCUlXTF9ERUJVR19MRUQoIkxFRCBSZWcgb2ZmXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgUmVnIG9mZlxuIik7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIENTUl9MRURfUkVHX1RSVU5fT0ZGKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw3ICsxNjksNyBAQAogICovCiBzdGF0aWMgaW50IGl3bF9sZWRfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJBc3NvY2lhdGVkXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJBc3NvY2lhdGVkXG4iKTsKIAlwcml2LT5hbGxvd19ibGlua2luZyA9IDE7CiAJcmV0dXJuIGl3bDQ5NjVfbGVkX29uX3JlZyhwcml2LCBsZWRfaWQpOwogfQpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCXJldHVybjsKIAogCi0JSVdMX0RFQlVHX0xFRCgiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCiAJCQlsZWRfdHlwZV9zdHJbbGVkLT50eXBlXSwgYnJpZ2h0bmVzcyk7CiAJc3dpdGNoIChicmlnaHRuZXNzKSB7CiAJY2FzZSBMRURfRlVMTDoKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjgwLDcgKzI4MCw3IEBACiAJaWYgKHRwdCA8IDApIC8qIHdyYXBhcm91bmQgKi8KIAkJdHB0ID0gLXRwdDsKIAotCUlXTF9ERUJVR19MRUQoInRwdCAlbGxkIGN1cnJlbnRfdHB0ICVsbHVcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAidHB0ICVsbGQgY3VycmVudF90cHQgJWxsdVxuIiwKIAkJKGxvbmcgbG9uZyl0cHQsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudF90cHQpOwogCXByaXYtPmxlZF90cHQgPSBjdXJyZW50X3RwdDsKQEAgLTI5Miw3ICsyOTIsNyBAQAogCQkJaWYgKHRwdCAgPiAoYmxpbmtfdGJsW2ldLnRwdCAqIElXTF8xTUJfUkFURSkpCiAJCQkJYnJlYWs7CiAKLQlJV0xfREVCVUdfTEVEKCJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKIAlyZXR1cm4gaTsKIH0KIApAQCAtMzUyLDcgKzM1Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6cmFkaW8iLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6OnJhZGlvIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bDQ5NjVfbGVkX29uX3JlZzsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLApAQCAtMzgyLDcgKzM4Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6UlgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6OlJYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2xfbGVkc19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sCkBAIC0zOTcsNyArMzk3LDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczpUWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczo6VFgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKaW5kZXggMDIxZTAwYi4uZWY5YjE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIElXTF9MRURfU09MSUQgMTEKICNkZWZpbmUgSVdMX0xFRF9OQU1FX0xFTiAzMQotI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgX19jb25zdGFudF9jcHVfdG9fbGUzMigxMDAwKQorI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgY3B1X3RvX2xlMzIoMTAwMCkKIAogI2RlZmluZSBJV0xfTEVEX0FDVElWSVRZICAgICAgICgwPDwxKQogI2RlZmluZSBJV0xfTEVEX0xJTksgICAgICAgICAgICgxPDwxKQpAQCAtNDcsNyArNDcsOSBAQAogCUlXTF9MRURfVFJHX1JBRElPLAogCUlXTF9MRURfVFJHX01BWCwKIH07CisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAogc3RydWN0IGl3bF9sZWQgewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCmluZGV4IDc1Y2E2YTUuLjE4YjdlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNjAsMTQgKzYwLDYgQEAKICNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzFfTUFYICAoMTApCiAKIAotI2RlZmluZSBOT1NMUCBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLCAwLCAwCi0jZGVmaW5lIFNMUCBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSywgMCwgMAotI2RlZmluZSBTTFBfVE9VVChUKSBfX2NvbnN0YW50X2NwdV90b19sZTMyKChUKSAqIE1TRUNfVE9fVVNFQykKLSNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKFgwKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMSksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDIpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgzKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYNCl9CiAKICNkZWZpbmUgSVdMX1BPV0VSX09OX0JBVFRFUlkJCUlXTF9QT1dFUl9JTkRFWF81CiAjZGVmaW5lIElXTF9QT1dFUl9PTl9BQ19ESVNBU1NPQwlJV0xfUE9XRVJfTU9ERV9DQU0KQEAgLTExMCw2ICsxMDIsNyBAQAogCXt7U0xQLCBTTFBfVE9VVCgyNSksIFNMUF9UT1VUKDI1KSwgU0xQX1ZFQyg0LCA3LCAxMCwgMTAsIDB4RkYpfSwgMH0KIH07CiAKKwogLyogc2V0IGNhcmQgcG93ZXIgY29tbWFuZCAqLwogc3RhdGljIGludCBpd2xfc2V0X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqY21kKQogewpAQCAtMTM0LDEzICsxMjcsNiBAQAogCQllbHNlCiAJCQltb2RlID0gSVdMX1BPV0VSX09OX0FDX0RJU0FTU09DOwogCQlicmVhazsKLQkvKiBGSVhNRTogcmVtb3ZlIGJhdHRlcnkgYW5kIGFjIGZyb20gaGVyZSAqLwotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQUM6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKIAkJYnJlYWs7CkBAIC0xNDksMTcgKzEzNSwxNyBAQAogfQogCiAvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KLXN0YXRpYyBpbnQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9wb3dlcl9tZ3IgKnBvd19kYXRhOwogCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5KSAqIElXTF9QT1dFUl9NQVg7CiAJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kOwogCWludCBpOwotCXUxNiBwY2lfcG07CisJdTE2IGxjdGw7CiAKLQlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKIAotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKKwlwb3dfZGF0YSA9ICZwcml2LT5wb3dlcl9kYXRhOwogCiAJbWVtc2V0KHBvd19kYXRhLCAwLCBzaXplb2YoKnBvd19kYXRhKSk7CiAKQEAgLTE2NywzOCArMTUzLDM3IEBACiAJbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKIAltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMlswXSwgJnJhbmdlXzJbMF0sIHNpemUpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19MSU5LX0NUUkwsICZwY2lfcG0pOworCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCUlXTF9ERUJVR19QT1dFUigiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9NQVg7IGkrKykgewogCQljbWQgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8wW2ldLmNtZDsKIAotCQlpZiAocGNpX3BtICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTikKKwkJaWYgKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDBTX0VOKQogCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJCWVsc2UKIAkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJfQotCXJldHVybiAwOwogfQogCiAvKiBhZGp1c3QgcG93ZXIgY29tbWFuZCBhY2NvcmRpbmcgdG8gRFRJTSBwZXJpb2QgYW5kIHBvd2VyIGxldmVsKi8KLXN0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jb21tYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kLAotCQkJCSAgICB1MTYgbW9kZSkKK3N0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCwgdTE2IG1vZGUpCiB7Ci0JaW50IHJldCA9IDAsIGk7Ci0JdTggc2tpcDsKLQl1MzIgbWF4X3NsZWVwID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSAqcmFuZ2U7Ci0JdTggcGVyaW9kID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7CisJaW50IGk7CisJdTMyIG1heF9zbGVlcCA9IDA7CisJdTggcGVyaW9kOworCWJvb2wgc2tpcDsKIAogCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC0xOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOworCisJcG93X2RhdGEgPSAmcHJpdi0+cG93ZXJfZGF0YTsKIAogCWlmIChwb3dfZGF0YS0+ZHRpbV9wZXJpb2QgPD0gSVdMX1BPV0VSX1JBTkdFXzBfTUFYKQogCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF07CkBAIC0yMTIsMTQgKzE5NywxMiBAQAogCiAJaWYgKHBlcmlvZCA9PSAwKSB7CiAJCXBlcmlvZCA9IDE7Ci0JCXNraXAgPSAwOwotCX0gZWxzZQotCQlza2lwID0gcmFuZ2VbbW9kZV0ubm9fZHRpbTsKLQotCWlmIChza2lwID09IDApIHsKLQkJbWF4X3NsZWVwID0gcGVyaW9kOwotCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKKwkJc2tpcCA9IGZhbHNlOwogCX0gZWxzZSB7CisJCXNraXAgPSAhIXJhbmdlW21vZGVdLm5vX2R0aW07CisJfQorCisJaWYgKHNraXApIHsKIAkJX19sZTMyIHNscF9pdHJ2bCA9IGNtZC0+c2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFIC0gMV07CiAJCW1heF9zbGVlcCA9IGxlMzJfdG9fY3B1KHNscF9pdHJ2bCk7CiAJCWlmIChtYXhfc2xlZXAgPT0gMHhGRikKQEAgLTIyNywyNCArMjEwLDI2IEBACiAJCWVsc2UgaWYgKG1heF9zbGVlcCA+ICBwZXJpb2QpCiAJCQltYXhfc2xlZXAgPSAobGUzMl90b19jcHUoc2xwX2l0cnZsKSAvIHBlcmlvZCkgKiBwZXJpb2Q7CiAJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7CisJfSBlbHNlIHsKKwkJbWF4X3NsZWVwID0gcGVyaW9kOworCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspCiAJCWlmIChsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsW2ldKSA+IG1heF9zbGVlcCkKIAkJCWNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0gPSBjcHVfdG9fbGUzMihtYXhfc2xlZXApOwotCX0KIAotCUlXTF9ERUJVR19QT1dFUigiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwotCUlXTF9ERUJVR19QT1dFUigiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiU2xlZXAgaW50ZXJ2YWwgdmVjdG9yID0geyAlZCAsICVkICwgJWQgLCAlZCAsICVkIH1cbiIsCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMF0pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsxXSksCiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzJdKSwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbM10pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFs0XSkpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0yOTUsNyArMjgwLDcgQEAKIAkJaWYgKGZpbmFsX21vZGUgIT0gSVdMX1BPV0VSX01PREVfQ0FNKQogCQkJc2V0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKIAotCQlpd2xfdXBkYXRlX3Bvd2VyX2NvbW1hbmQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7CisJCWl3bF91cGRhdGVfcG93ZXJfY21kKHByaXYsICZjbWQsIGZpbmFsX21vZGUpOwogCQljbWQua2VlcF9hbGl2ZV9iZWFjb25zID0gMDsKIAogCQlpZiAoZmluYWxfbW9kZSA9PSBJV0xfUE9XRVJfSU5ERVhfNSkKQEAgLTMxMSw3ICsyOTYsNyBAQAogCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzICYmIHVwZGF0ZV9jaGFpbnMpCiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7CiAJCWVsc2UKLQkJCUlXTF9ERUJVR19QT1dFUigiQ2Fubm90IHVwZGF0ZSB0aGUgcG93ZXIsIGNoYWluIG5vaXNlICIKKwkJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQ2Fubm90IHVwZGF0ZSB0aGUgcG93ZXIsIGNoYWluIG5vaXNlICIKIAkJCQkJImNhbGlicmF0aW9uIHJ1bm5pbmc6ICVkXG4iLAogCQkJCQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlKTsKIAkJaWYgKCFyZXQpCkBAIC0zNjYsNyArMzUxLDcgQEAKIC8qIHNldCB1c2VyX3Bvd2VyX3NldHRpbmcgKi8KIGludCBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBtb2RlKQogewotCWlmIChtb2RlID4gSVdMX1BPV0VSX0xJTUlUKQorCWlmIChtb2RlID4gSVdMX1BPV0VSX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZyA9IG1vZGU7CkBAIC0zODAsMTEgKzM2NSwxMCBAQAogICovCiBpbnQgaXdsX3Bvd2VyX3NldF9zeXN0ZW1fbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBtb2RlKQogewotCWlmIChtb2RlID4gSVdMX1BPV0VSX0xJTUlUKQorCWlmIChtb2RlIDwgSVdMX1BPV0VSX1NZU19NQVgpCisJCXByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmcgPSBtb2RlOworCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcml2LT5wb3dlcl9kYXRhLnN5c3RlbV9wb3dlcl9zZXR0aW5nID0gbW9kZTsKLQogCXJldHVybiBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9wb3dlcl9zZXRfc3lzdGVtX21vZGUpOwpAQCAtMzkyLDEzICszNzYsMTEgQEAKIC8qIGluaXRpYWxpemUgdG8gZGVmYXVsdCAqLwogdm9pZCBpd2xfcG93ZXJfaW5pdGlhbGl6ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0KIAlpd2xfcG93ZXJfaW5pdF9oYW5kbGUocHJpdik7CiAJcHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmcgPSBJV0xfUE9XRVJfQVVUTzsKLQlwcml2LT5wb3dlcl9kYXRhLnBvd2VyX2Rpc2FibGVkID0gMDsKIAlwcml2LT5wb3dlcl9kYXRhLnN5c3RlbV9wb3dlcl9zZXR0aW5nID0gSVdMX1BPV0VSX1NZU19BVVRPOwotCXByaXYtPnBvd2VyX2RhdGEuaXNfYmF0dGVyeV9hY3RpdmUgPSAwOwogCXByaXYtPnBvd2VyX2RhdGEucG93ZXJfZGlzYWJsZWQgPSAwOworCXByaXYtPnBvd2VyX2RhdGEuaXNfYmF0dGVyeV9hY3RpdmUgPSAwOwogCXByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZyA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9wb3dlcl9pbml0aWFsaXplKTsKQEAgLTQwNyw4ICszODksOCBAQAogaW50IGl3bF9wb3dlcl90ZW1wZXJhdHVyZV9jaGFuZ2Uoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwotCXUxNiBuZXdfY3JpdGljYWwgPSBwcml2LT5wb3dlcl9kYXRhLmNyaXRpY2FsX3Bvd2VyX3NldHRpbmc7CiAJczMyIHRlbXBlcmF0dXJlID0gS0VMVklOX1RPX0NFTFNJVVMocHJpdi0+bGFzdF90ZW1wZXJhdHVyZSk7CisJdTE2IG5ld19jcml0aWNhbCA9IHByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZzsKIAogCWlmICh0ZW1wZXJhdHVyZSA+IElXTF9DVF9LSUxMX1RFTVBFUkFUVVJFKQogCQlyZXR1cm4gMDsKQEAgLTQzNCw3ICs0MTYsNyBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCXN0cnVjdCBpd2xfcHJpdiwgc2V0X3Bvd2VyX3NhdmUud29yayk7Ci0JSVdMX0RFQlVHKElXTF9ETF9TVEFURSwgInVwZGF0ZSBwb3dlclxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJ1cGRhdGUgcG93ZXJcbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaAppbmRleCBmYTA5OGQ4Li4xODk2MzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTQyLDIyICs0MiwyNiBAQAogCUlXTF9QT1dFUl9JTkRFWF81LAogCUlXTF9QT1dFUl9BVVRPLAogCUlXTF9QT1dFUl9NQVggPSBJV0xfUE9XRVJfQVVUTywKLQlJV0xfUE9XRVJfQUMsCi0JSVdMX1BPV0VSX0JBVFRFUlksCiB9OwogCiBlbnVtIHsKIAlJV0xfUE9XRVJfU1lTX0FVVE8sCiAJSVdMX1BPV0VSX1NZU19BQywKIAlJV0xfUE9XRVJfU1lTX0JBVFRFUlksCisJSVdMX1BPV0VSX1NZU19NQVgsCiB9OwogCi0jZGVmaW5lIElXTF9QT1dFUl9MSU1JVAkJMHgwOAotI2RlZmluZSBJV0xfUE9XRVJfTUFTSwkJMHgwRgotI2RlZmluZSBJV0xfUE9XRVJfRU5BQkxFRAkweDEwCiAKIC8qIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgc3RydWN0dXJlcyAqLwogCisjZGVmaW5lIE5PU0xQIGNwdV90b19sZTE2KDApLCAwLCAwCisjZGVmaW5lIFNMUCBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSywgMCwgMAorI2RlZmluZSBTTFBfVE9VVChUKSBjcHVfdG9fbGUzMigoVCkgKiBNU0VDX1RPX1VTRUMpCisjZGVmaW5lIFNMUF9WRUMoWDAsIFgxLCBYMiwgWDMsIFg0KSB7Y3B1X3RvX2xlMzIoWDApLCBcCisJCQkJICAgICBjcHVfdG9fbGUzMihYMSksIFwKKwkJCQkgICAgIGNwdV90b19sZTMyKFgyKSwgXAorCQkJCSAgICAgY3B1X3RvX2xlMzIoWDMpLCBcCisJCQkJICAgICBjcHVfdG9fbGUzMihYNCl9CiBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSB7CiAJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCBjbWQ7CiAJdTggbm9fZHRpbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAppbmRleCBiN2E1ZjIzLi4zYjljYWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYwppbmRleCA0YjY5ZGEzLi4yYWQ5ZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNDcsNyArNDcsNyBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgid2UgcmVjZWl2ZWQgc29mdCBSRktJTEwgc2V0IHRvIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIndlIHJlY2VpdmVkIHNvZnQgUkZLSUxMIHNldCB0byBzdGF0ZSAlZFxuIiwgc3RhdGUpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCXN3aXRjaCAoc3RhdGUpIHsKQEAgLTYyLDcgKzYyLDggQEAKIAkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIndlIHJlY2VpdmVkIHVuZXhwZWN0ZWQgUkZLSUxMIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJCUlXTF9XQVJOKHByaXYsICJ3ZSByZWNlaXZlZCB1bmV4cGVjdGVkIFJGS0lMTCBzdGF0ZSAlZFxuIiwKKwkJCXN0YXRlKTsKIAkJYnJlYWs7CiAJfQogb3V0X3VubG9jazoKQEAgLTc4LDEwICs3OSwxMCBAQAogCiAJQlVHX09OKGRldmljZSA9PSBOVUxMKTsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJJbml0aWFsaXppbmcgUkZLSUxMLlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKIAlwcml2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2aWNlLCBSRktJTExfVFlQRV9XTEFOKTsKIAlpZiAoIXByaXYtPnJma2lsbCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBSRktJTEwgZGV2aWNlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBSRktJTEwgZGV2aWNlLlxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtOTcsMTEgKzk4LDExIEBACiAKIAlyZXQgPSByZmtpbGxfcmVnaXN0ZXIocHJpdi0+cmZraWxsKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIFJGS0lMTDogJWRcbiIsIHJldCk7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byByZWdpc3RlciBSRktJTEw6ICVkXG4iLCByZXQpOwogCQlnb3RvIGZyZWVfcmZraWxsOwogCX0KIAotCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CiAJcmV0dXJuIHJldDsKIAogZnJlZV9yZmtpbGw6CkBAIC0xMTAsNyArMTExLDcgQEAKIAlwcml2LT5yZmtpbGwgPSBOVUxMOwogCiBlcnJvcjoKLQlJV0xfREVCVUdfUkZfS0lMTCgiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yZmtpbGxfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oCmluZGV4IDg2ZGMwNTUuLjYzM2RhZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCBjNWYxYWEwLi44ZjY1OTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTEyNSw5ICsxMjUsMTAgQEAKICAqLwogaW50IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSkKIHsKLQl1MzIgcmVnID0gMDsKLQlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByeF93cnRfcHRyX3JlZyA9IHByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZzsKKwl1MzIgcmVnOworCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTQ5LDE1ICsxNTAsMTQgQEAKIAkJCWdvdG8gZXhpdF91bmxvY2s7CiAKIAkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLAotCQkJCSAgICAgcS0+d3JpdGUgJiB+MHg3KTsKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJ4X3dydF9wdHJfcmVnLCBxLT53cml0ZSAmIH4weDcpOwogCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJLyogRWxzZSBkZXZpY2UgaXMgYXNzdW1lZCB0byBiZSBhd2FrZSAqLwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2xfd3JpdGUzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLCBxLT53cml0ZSAmIH4weDcpOwotCisJCWl3bF93cml0ZTMyKHByaXYsIHJ4X3dydF9wdHJfcmVnLCBxLT53cml0ZSAmIH4weDcpOworCX0KIAogCXEtPm5lZWRfdXBkYXRlID0gMDsKIApAQCAtMjYyLDggKzI2Miw3IEBACiAJCXJ4Yi0+c2tiID0gYWxsb2Nfc2tiKHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSArIDI1NiwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXJ4Yi0+c2tiKSB7Ci0JCQlwcmludGsoS0VSTl9DUklUIERSVl9OQU1FCi0JCQkJICAgIkNhbiBub3QgYWxsb2NhdGUgU0tCIGJ1ZmZlcnNcbiIpOworCQkJSVdMX0NSSVQocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgU0tCIGJ1ZmZlcnNcbiIpOwogCQkJLyogV2UgZG9uJ3QgcmVzY2hlZHVsZSByZXBsZW5pc2ggd29yayBoZXJlIC0tIHdlIHdpbGwKIAkJCSAqIGNhbGwgdGhlIHJlc3RvY2sgbWV0aG9kIGFuZCBpZiBpdCBzdGlsbCBuZWVkcwogCQkJICogbW9yZSBidWZmZXJzIGl0IHdpbGwgc2NoZWR1bGUgcmVwbGVuaXNoICovCkBAIC00OTUsNyArNDk0LDcgQEAKIAogCW1pc3NlZF9iZWFjb24gPSAmcGt0LT51Lm1pc3NlZF9iZWFjb247CiAJaWYgKGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSA+IDUpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJtaXNzZWQgYmNuIGNuc3EgJWQgdG90bCAlZCByY2QgJWQgZXhwY3RkICVkXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pc3NlZCBiY24gY25zcSAlZCB0b3RsICVkIHJjZCAlZCBleHBjdGQgJWRcbiIsCiAJCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZXF1dGl2ZV9taXNzZWRfYmVhY29ucyksCiAJCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT50b3RhbF9taXNzZWRfYmVjb25zKSwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPm51bV9yZWN2ZF9iZWFjb25zKSwKQEAgLTU0Miw3ICs1NDEsNyBAQAogCWVsc2UKIAkJcHJpdi0+bGFzdF9yeF9ub2lzZSA9IElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEU7CiAKLQlJV0xfREVCVUdfQ0FMSUIoImluYmFuZCBzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIGRCbSAlZFxuIiwKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImluYmFuZCBzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIGRCbSAlZFxuIiwKIAkJCWJjbl9zaWxlbmNlX2EsIGJjbl9zaWxlbmNlX2IsIGJjbl9zaWxlbmNlX2MsCiAJCQlwcml2LT5sYXN0X3J4X25vaXNlKTsKIH0KQEAgLTU1NSw3ICs1NTQsNyBAQAogCWludCBjaGFuZ2U7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCi0JSVdMX0RFQlVHX1JYKCJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKKwlJV0xfREVCVUdfUlgocHJpdiwgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAogCQkgICAgIChpbnQpc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpLCBwa3QtPmxlbik7CiAKIAljaGFuZ2UgPSAoKHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSAhPQpAQCAtNzQyLDEzICs3NDEsMTMgQEAKIAkJICogTUFDIGFkZHJlc3NlcyBzaG93IGp1c3QgdGhlIGxhc3QgYnl0ZSAoZm9yIGJyZXZpdHkpLAogCQkgKiAgICBidXQgeW91IGNhbiBoYWNrIGl0IHRvIHNob3cgbW9yZSwgaWYgeW91J2QgbGlrZSB0by4gKi8KIAkJaWYgKGRhdGFmcmFtZSkKLQkJCUlXTF9ERUJVR19SWCgiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKIAkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIGNobmw9JWQsIHJhdGU9JXUsIFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCiAJCQkJICAgICBsZW5ndGgsIHJzc2ksIGNoYW5uZWwsIGJpdHJhdGUpOwogCQllbHNlIHsKIAkJCS8qIHNyYy9kc3QgYWRkcmVzc2VzIGFzc3VtZSBtYW5hZ2VkIG1vZGUgKi8KLQkJCUlXTF9ERUJVR19SWCgiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgc3JjPTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCBzcmM9MHglMDJ4LCAiCiAJCQkJICAgICAibGVuPSV1LCByc3NpPSVkLCB0aW09JWx1IHVzZWMsICIKIAkJCQkgICAgICJwaHk9MHglMDJ4LCBjaG5sPSVkXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKQEAgLTc3MywxMCArNzcyLDEwIEBACiAvKgogICogcmV0dXJucyBub24temVybyBpZiBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQKICAqLwotc3RhdGljIGludCBpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAotCQkJCSAgICAgIHUzMiBkZWNyeXB0X3JlcywKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCitpbnQgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJICAgdTMyIGRlY3J5cHRfcmVzLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQogewogCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAKQEAgLTc4Niw3ICs3ODUsNyBAQAogCWlmICghKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkKIAkJcmV0dXJuIDA7CiAKLQlJV0xfREVCVUdfUlgoImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKIAlzd2l0Y2ggKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spIHsKIAljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUDoKIAkJLyogVGhlIHVDb2RlIGhhcyBnb3QgYSBiYWQgcGhhc2UgMSBLZXksIHB1c2hlcyB0aGUgcGFja2V0LgpAQCAtODAwLDEzICs3OTksMTMgQEAKIAkJICAgIFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUMpIHsKIAkJCS8qIGJhZCBJQ1YsIHRoZSBwYWNrZXQgaXMgZGVzdHJveWVkIHNpbmNlIHRoZQogCQkJICogZGVjcnlwdGlvbiBpcyBpbnBsYWNlLCBkcm9wIGl0ICovCi0JCQlJV0xfREVCVUdfUlgoIlBhY2tldCBkZXN0cm95ZWRcbiIpOworCQkJSVdMX0RFQlVHX1JYKHByaXYsICJQYWNrZXQgZGVzdHJveWVkXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QOgogCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQogCQkgICAgUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LKSB7Ci0JCQlJV0xfREVCVUdfUlgoImh3IGRlY3J5cHQgc3VjY2Vzc2Z1bGx5ISEhXG4iKTsKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiaHcgZGVjcnlwdCBzdWNjZXNzZnVsbHkhISFcbiIpOwogCQkJc3RhdHMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CiAJCX0KIAkJYnJlYWs7CkBAIC04MTYsNiArODE1LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcpOwogCiBzdGF0aWMgdTMyIGl3bF90cmFuc2xhdGVfcnhfc3RhdHVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGRlY3J5cHRfaW4pCiB7CkBAIC04NzAsNyArODcwLDcgQEAKIAkJYnJlYWs7CiAJfTsKIAotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9pbjoweCV4ICBkZWNyeXB0X291dCA9IDB4JXhcbiIsCisJSVdMX0RFQlVHX1JYKHByaXYsICJkZWNyeXB0X2luOjB4JXggIGRlY3J5cHRfb3V0ID0gMHgleFxuIiwKIAkJCQkJZGVjcnlwdF9pbiwgZGVjcnlwdF9vdXQpOwogCiAJcmV0dXJuIGRlY3J5cHRfb3V0OwpAQCAtODk1LDcgKzg5NSw3IEBACiAJCXJ4X3N0YXJ0ID0gKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKSZwcml2LT5sYXN0X3BoeV9yZXNbMV07CiAKIAlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlJPUigiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOworCQlJV0xfRVJSKHByaXYsICJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CiAJCXJldHVybjsKIAl9CiAJaWYgKGluY2x1ZGVfcGh5KSB7CkBAIC05MzQsOCArOTM0LDggQEAKIAogCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KCFwcml2LT5pc19vcGVuKSkgewotCQlJV0xfREVCVUdfRFJPUF9MSU1JVAotCQkgICAgKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVuLlxuIik7CisJCUlXTF9ERUJVR19EUk9QX0xJTUlUKHByaXYsCisJCSAgICAiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCS8qcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19UU0ZUOyovCiAKIAlpZiAoKHVubGlrZWx5KHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCA+IDIwKSkpIHsKLQkJSVdMX0RFQlVHX0RST1AoImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICVkL24iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCiAJCQkJcnhfc3RhcnQtPmNmZ19waHlfY250KTsKIAkJcmV0dXJuOwogCX0KQEAgLTEwMjEsNyArMTAyMSw3IEBACiAJfQogCiAJaWYgKCFyeF9zdGFydCkgewotCQlJV0xfRVJST1IoIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDQ1LDcgKzEwNDUsNyBAQAogCiAJaWYgKCEoKnJ4X2VuZCAmIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IpIHx8CiAJICAgICEoKnJ4X2VuZCAmIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XKSkgewotCQlJV0xfREVCVUdfUlgoIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsCiAJCQkJbGUzMl90b19jcHUoKnJ4X2VuZCkpOwogCQlyZXR1cm47CiAJfQpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKIAlpZiAodW5saWtlbHkocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKQogCQlpd2xfZGJnX3JlcG9ydF9mcmFtZShwcml2LCByeF9zdGFydCwgbGVuLCBoZWFkZXIsIDEpOwogI2VuZGlmCi0JSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCisJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCiAJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnNpZ25hbCwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwppbmRleCAzYzgwM2Y2Li4yMzY0NGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQ2LDE1ICs0Niw2IEBACiAjZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICgzKQogI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX0ZBQ1RPUl81MkdIWiAoMikKIAotLyogRm9yIGZhc3RlciBhY3RpdmUgc2Nhbm5pbmcsIHNjYW4gd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYW5uZWwgaWYgZmV3ZXIgdGhhbgotICogUExDUF9RVUlFVF9USFJFU0ggcGFja2V0cyBhcmUgaGVhcmQgb24gdGhpcyBjaGFubmVsIHdpdGhpbgotICogQUNUSVZFX1FVSUVUX1RJTUUgYWZ0ZXIgc2VuZGluZyBwcm9iZSByZXF1ZXN0LiAgVGhpcyBzaG9ydGVucyB0aGUgZHdlbGwKLSAqIHRpbWUgaWYgaXQncyBhIHF1aWV0IGNoYW5uZWwgKG5vdGhpbmcgcmVzcG9uZGVkIHRvIG91ciBwcm9iZSwgYW5kIHRoZXJlJ3MKLSAqIG5vIG90aGVyIHRyYWZmaWMpLgotICogRGlzYWJsZSAicXVpZXQiIGZlYXR1cmUgYnkgc2V0dGluZyBQTENQX1FVSUVUX1RIUkVTSCB0byAwLiAqLwotI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigxKSAgLyogcGFja2V0cyAqLwotI2RlZmluZSBJV0xfQUNUSVZFX1FVSUVUX1RJTUUgICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigxMCkgIC8qIG1zZWMgKi8KLQogLyogRm9yIHBhc3NpdmUgc2NhbiwgbGlzdGVuIFBBU1NJVkVfRFdFTExfVElNRSAobXNlYykgb24gZWFjaCBjaGFubmVsLgogICogTXVzdCBiZSBzZXQgbG9uZ2VyIHRoYW4gYWN0aXZlIGR3ZWxsIHRpbWUuCiAgKiBGb3IgdGhlIG1vc3QgcmVsaWFibGUgc2Nhbiwgc2V0ID4gQVAgYmVhY29uIGludGVydmFsICh0eXBpY2FsbHkgMTAwbXNlYykuICovCkBAIC02Myw3ICs1NCw2IEBACiAjZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgICAgICAoMTAwKQogI2RlZmluZSBJV0xfQ0hBTk5FTF9UVU5FX1RJTUUgICAgICAgNQogCi0jZGVmaW5lIElXTF9TQ0FOX1BST0JFX01BU0sobikgCWNwdV90b19sZTMyKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCiAKIAogLyoqCkBAIC04MCwxMiArNzAsMTIgQEAKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CiAJCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiUXVldWluZyBzY2FuIGFib3J0LlxuIik7CisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiUXVldWluZyBzY2FuIGFib3J0LlxuIik7CiAJCQlzZXRfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7CiAKIAkJfSBlbHNlCi0JCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CiAKIAkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CiAJfQpAQCAtMTE5LDcgKzEwOSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KTsKIAotc3RhdGljIGludCBpd2xfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2xfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzOwpAQCAtMTUwLDcgKzE0MCw3IEBACiAJCSAqIGNhbiBvY2N1ciBpZiB3ZSBzZW5kIHRoZSBzY2FuIGFib3J0IGJlZm9yZSB3ZQogCQkgKiB0aGUgbWljcm9jb2RlIGhhcyBub3RpZmllZCB1cyB0aGF0IGEgc2NhbiBpcwogCQkgKiBjb21wbGV0ZWQuICovCi0JCUlXTF9ERUJVR19JTkZPKCJTQ0FOX0FCT1JUIHJldHVybmVkICVkLlxuIiwgcmVzLT51LnN0YXR1cyk7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTQ0FOX0FCT1JUIHJldHVybmVkICVkLlxuIiwgcmVzLT51LnN0YXR1cyk7CiAJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CiAJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7CiAJfQpAQCAtMTYwLDcgKzE1MCw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX3NjYW5fYWJvcnQpOwogCiAvKiBTZXJ2aWNlIHJlc3BvbnNlIHRvIFJFUExZX1NDQU5fQ01EICgweDgwKSAqLwogc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMTcxLDcgKzE2MSw3IEBACiAJc3RydWN0IGl3bF9zY2FucmVxX25vdGlmaWNhdGlvbiAqbm90aWYgPQogCSAgICAoc3RydWN0IGl3bF9zY2FucmVxX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7CiAKLQlJV0xfREVCVUdfUlgoIlNjYW4gcmVxdWVzdCBzdGF0dXMgPSAweCV4XG4iLCBub3RpZi0+c3RhdHVzKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgIlNjYW4gcmVxdWVzdCBzdGF0dXMgPSAweCV4XG4iLCBub3RpZi0+c3RhdHVzKTsKICNlbmRpZgogfQogCkBAIC0xODMsNyArMTczLDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYW5zdGFydF9ub3RpZmljYXRpb24gKm5vdGlmID0KIAkgICAgKHN0cnVjdCBpd2xfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7CiAJcHJpdi0+c2Nhbl9zdGFydF90c2YgPSBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyk7Ci0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gc3RhcnQ6ICIKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBzdGFydDogIgogCQkgICAgICAgIiVkIFs4MDIuMTElc10gIgogCQkgICAgICAgIihUU0Y6IDB4JTA4WDolMDhYKSAtICVkIChiZWFjb24gdGltZXIgJXUpXG4iLAogCQkgICAgICAgbm90aWYtPmNoYW5uZWwsCkBAIC0yMDIsNyArMTkyLDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqbm90aWYgPQogCSAgICAoc3RydWN0IGl3bF9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwogCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY2gucmVzOiAiCisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gY2gucmVzOiAiCiAJCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCiAJCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgIgogCQkgICAgICAgImVsYXBzZWQ9JWx1IHVzZWMgKCVkbXMgc2luY2UgbGFzdClcbiIsCkBAIC0yMjgsNyArMjE4LDcgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGl3bF9zY2FuY29tcGxldGVfbm90aWZpY2F0aW9uICpzY2FuX25vdGlmID0gKHZvaWQgKilwa3QtPnUucmF3OwogCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY29tcGxldGU6ICVkIGNoYW5uZWxzIChUU0YgMHglMDhYOiUwOFgpIC0gJWRcbiIsCisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gY29tcGxldGU6ICVkIGNoYW5uZWxzIChUU0YgMHglMDhYOiUwOFgpIC0gJWRcbiIsCiAJCSAgICAgICBzY2FuX25vdGlmLT5zY2FubmVkX2NoYW5uZWxzLAogCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2xvdywKIAkJICAgICAgIHNjYW5fbm90aWYtPnRzZl9oaWdoLCBzY2FuX25vdGlmLT5zdGF0dXMpOwpAQCAtMjQwLDcgKzIzMCw3IEBACiAJLyogVGhlIHNjYW4gY29tcGxldGlvbiBub3RpZmljYXRpb24gY2FtZSBpbiwgc28ga2lsbCB0aGF0IHRpbWVyLi4uICovCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7CiAKLQlJV0xfREVCVUdfSU5GTygiU2NhbiBwYXNzIG9uICVzR0h6IHRvb2sgJWRtc1xuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2NhbiBwYXNzIG9uICVzR0h6IHRvb2sgJWRtc1xuIiwKIAkJICAgICAgIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKSA/CiAJCQkJCQkiMi40IiA6ICI1LjIiLAogCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKQEAgLTI1OCw3ICsyNDgsNyBAQAogCSAqIHRoZW4gd2UgcmVzZXQgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBhbmQgdGVybWluYXRlLAogCSAqIHJlLXF1ZXVpbmcgYW5vdGhlciBzY2FuIGlmIG9uZSBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7CiAJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CiAJfSBlbHNlIHsKIAkJLyogSWYgdGhlcmUgYXJlIG1vcmUgYmFuZHMgb24gdGhpcyBzY2FuIHBhc3MgcmVzY2hlZHVsZSAqLwpAQCAtMjY4LDExICsyNTgsMTEgQEAKIAogCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKIAlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7Ci0JSVdMX0RFQlVHX0lORk8oIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIHNjYW4gdG8gb2ZmXG4iKTsKIAogCWNsZWFyX2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwogCi0JSVdMX0RFQlVHX0lORk8oIlNjYW4gdG9vayAlZG1zXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FuIHRvb2sgJWRtc1xuIiwKIAkJamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMocHJpdi0+c2Nhbl9zdGFydCwgamlmZmllcykpKTsKIAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwpAQCAtMjk2LDkgKzI4Niw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKTsKIAotc3RhdGljIGlubGluZSB1MTYgaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkJCSAgICB1OCBuX3Byb2JlcykKK2lubGluZSB1MTYgaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICAgICB1OCBuX3Byb2JlcykKIHsKIAlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzUyICsKQEAgLTMwNyw5ICsyOTcsMTAgQEAKIAkJcmV0dXJuIElXTF9BQ1RJVkVfRFdFTExfVElNRV8yNCArCiAJCQlJV0xfQUNUSVZFX0RXRUxMX0ZBQ1RPUl8yNEdIWiAqIChuX3Byb2JlcyArIDEpOwogfQorRVhQT1JUX1NZTUJPTChpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKTsKIAotc3RhdGljIHUxNiBpd2xfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQordTE2IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJdTE2IHBhc3NpdmUgPSAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSA/CiAJICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0IDoKQEAgLTMyNyw2ICszMTgsNyBAQAogCiAJcmV0dXJuIHBhc3NpdmU7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKTsKIAogc3RhdGljIGludCBpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKQEAgLTM2Myw3ICszNTUsNyBAQAogCiAJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKTsKIAkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAorCQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIkNoYW5uZWwgJWQgaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKIAkJCQkJY2hhbm5lbCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMzkyLDcgKzM4NCw3IEBACiAJCWVsc2UKIAkJCXNjYW5fY2gtPnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoNSA8PCAzKSk7CiAKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW5uaW5nIGNoPSVkIHByb2I9MHglWCBbJXMgJWRdXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2Nhbm5pbmcgY2g9JWQgcHJvYj0weCVYIFslcyAlZF1cbiIsCiAJCQkgICAgICAgY2hhbm5lbCwgbGUzMl90b19jcHUoc2Nhbl9jaC0+dHlwZSksCiAJCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiBTQ0FOX0NIQU5ORUxfVFlQRV9BQ1RJVkUpID8KIAkJCQkiQUNUSVZFIiA6ICJQQVNTSVZFIiwKQEAgLTQwMyw3ICszOTUsNyBAQAogCQlhZGRlZCsrOwogCX0KIAotCUlXTF9ERUJVR19TQ0FOKCJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOworCUlXTF9ERUJVR19TQ0FOKHByaXYsICJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOwogCXJldHVybiBhZGRlZDsKIH0KIApAQCAtNDE5LDIxICs0MTEsMjEgQEAKIGludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vdCByZWFkeS5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJTdGFydGluZyBzY2FuLi4uXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnRpbmcgc2Nhbi4uLlxuIik7CiAJaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9HKQogCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF8yR0haKTsKIAlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpCkBAIC00NDgsOSArNDQwLDc3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zY2FuX2luaXRpYXRlKTsKIAorI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOIChIWioyKQorCitpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQ7CisJdTggKnNzaWQgPSBOVUxMOworCXNpemVfdCBzc2lkX2xlbiA9IDA7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7CisJCXNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJcmV0ID0gLUVJTzsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogV2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kLgorCSAqIEF2b2lkIHNjYW5uaW5nIGR1cmluZyBwb3NzaWJsZSBFQVBPTCBleGNoYW5nZSwgcmV0dXJuCisJICogc3VjY2VzcyBpbW1lZGlhdGVseS4KKwkgKi8KKwlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKKwkgICAgdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBuZXh0IHNjYW4gcGVyaW9kXG4iKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLworCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgorCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOworCQlyZXQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJaWYgKHNzaWRfbGVuKSB7CisJCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7CisJCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9ICBzc2lkX2xlbjsKKwkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOworCX0gZWxzZSB7CisJCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDA7CisJfQorCisJcmV0ID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfbWFjX2h3X3NjYW4pOworCiAjZGVmaW5lIElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HICg3ICogSFopCiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3ZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CiAJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHNjYW5fY2hlY2sud29yayk7CkBAIC00NjEsNyArNTIxLDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgfHwKIAkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfU0NBTiwgIlNjYW4gY29tcGxldGlvbiB3YXRjaGRvZyByZXNldHRpbmcgIgorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyAiCiAJCQkiYWRhcHRlciAoJWRtcylcbiIsCiAJCQlqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7CiAKQEAgLTQ3MCw2ICs1MzAsOCBAQAogCX0KIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2JnX3NjYW5fY2hlY2spOworCiAvKioKICAqIGl3bF9zdXBwb3J0ZWRfcmF0ZV90b19pZSAtIGZpbGwgaW4gdGhlIHN1cHBvcnRlZCByYXRlIGluIElFIGZpZWxkCiAgKgpAQCAtNTI3LDEwICs1ODksMTAgQEAKICAqIGl3bF9maWxsX3Byb2JlX3JlcSAtIGZpbGwgaW4gYWxsIHJlcXVpcmVkIGZpZWxkcyBhbmQgSUUgZm9yIHByb2JlIHJlcXVlc3QKICAqLwogCi1zdGF0aWMgdTE2IGl3bF9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLAotCQkJCSAgaW50IGxlZnQpCit1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsCisJCSAgICAgICBpbnQgbGVmdCkKIHsKIAlpbnQgbGVuID0gMDsKIAl1OCAqcG9zID0gTlVMTDsKQEAgLTYyNCw2ICs2ODYsNyBAQAogCiAJcmV0dXJuICh1MTYpbGVuOwogfQorRVhQT1JUX1NZTUJPTChpd2xfZmlsbF9wcm9iZV9yZXEpOwogCiBzdGF0aWMgdm9pZCBpd2xfYmdfcmVxdWVzdF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKQEAgLTY1MCw3ICs3MTMsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9XQVJOSU5HKCJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjYyLDM0ICs3MjUsMzQgQEAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb3Igc2NoZWR1bGVkIGlmIHRoZXJlIGlzIGN1cnJlbnRseQogCSAqIGEgc2NhbiBhY3RpdmUgaW4gdGhlIGhhcmR3YXJlLiAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIk11bHRpcGxlIGNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0cyBpbiBwYXJhbGxlbC4gIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTXVsdGlwbGUgY29uY3VycmVudCBzY2FuIHJlcXVlc3RzIGluIHBhcmFsbGVsLiAiCiAJCQkgICAgICAgIklnbm9yaW5nIHNlY29uZCByZXF1ZXN0LlxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBLaWxsIGFjdGl2YXRpb25cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgdW5pbml0aWFsaXplZC4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgdW5pbml0aWFsaXplZC4gIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICghcHJpdi0+c2Nhbl9iYW5kcykgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNzE0LDcgKzc3Nyw3IEBACiAJCXUzMiBzY2FuX3N1c3BlbmRfdGltZSA9IDEwMDsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQlJV0xfREVCVUdfSU5GTygiU2Nhbm5pbmcgd2hpbGUgYXNzb2NpYXRlZC4uLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpbnRlcnZhbCA9IHByaXYtPmJlYWNvbl9pbnQ7CkBAIC03MjksMTMgKzc5MiwxMyBAQAogCQlzY2FuX3N1c3BlbmRfdGltZSA9IChleHRyYSB8CiAJCSAgICAoKHN1c3BlbmRfdGltZSAlIGludGVydmFsKSAqIDEwMjQpKTsKIAkJc2Nhbi0+c3VzcGVuZF90aW1lID0gY3B1X3RvX2xlMzIoc2Nhbl9zdXNwZW5kX3RpbWUpOwotCQlJV0xfREVCVUdfU0NBTigic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJICAgICAgIHNjYW5fc3VzcGVuZF90aW1lLCBpbnRlcnZhbCk7CiAJfQogCiAJLyogV2Ugc2hvdWxkIGFkZCB0aGUgYWJpbGl0eSBmb3IgdXNlciB0byBsb2NrIHRvIFBBU1NJVkUgT05MWSAqLwogCWlmIChwcml2LT5vbmVfZGlyZWN0X3NjYW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlN0YXJ0IGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU3RhcnQgZGlyZWN0IHNjYW4gZm9yICclcydcbiIsCiAJCQkJcHJpbnRfc3NpZChzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZCwKIAkJCQkJICAgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKSk7CiAJCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmlkID0gV0xBTl9FSURfU1NJRDsKQEAgLTc0NCw3ICs4MDcsNyBAQAogCQkgICAgICAgcHJpdi0+ZGlyZWN0X3NzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7CiAJCW5fcHJvYmVzKys7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlN0YXJ0IGluZGlyZWN0IHNjYW4uXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlN0YXJ0IGluZGlyZWN0IHNjYW4uXG4iKTsKIAl9CiAKIAlzY2FuLT50eF9jbWQudHhfZmxhZ3MgPSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwpAQCAtNzczLDcgKzgzNiw3IEBACiAJCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpCiAJCQlyeF9jaGFpbiA9IDB4NjsKIAl9IGVsc2UgewotCQlJV0xfV0FSTklORygiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOworCQlJV0xfV0FSTihwcml2LCAiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC04MDYsNyArODY5LDcgQEAKIAkJCSh2b2lkICopJnNjYW4tPmRhdGFbbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbildKTsKIAogCWlmIChzY2FuLT5jaGFubmVsX2NvdW50ID09IDApIHsKLQkJSVdMX0RFQlVHX1NDQU4oImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiY2hhbm5lbCBjb3VudCAlZFxuIiwgc2Nhbi0+Y2hhbm5lbF9jb3VudCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTgzOSw3ICs5MDIsNyBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCBhYm9ydF9zY2FuKTsKIApAQCAtODUzLDE4ICs5MTYsMTkgQEAKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTChpd2xfYmdfYWJvcnRfc2Nhbik7CiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgc2Nhbl9jb21wbGV0ZWQpOwogCi0JSVdMX0RFQlVHX1NDQU4oIlNDQU4gY29tcGxldGUgc2NhblxuIik7CisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNDQU4gY29tcGxldGUgc2NhblxuIik7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odyk7CisJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCBmYWxzZSk7CiAKIAkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKIAkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KQEAgLTg3Miw3ICs5MzYsNyBAQAogCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIHRydWUpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQotCitFWFBPUlRfU1lNQk9MKGl3bF9iZ19zY2FuX2NvbXBsZXRlZCk7CiAKIHZvaWQgaXdsX3NldHVwX3NjYW5fZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uYwppbmRleCA4MzZjM2M4Li4wMjJiY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CiAJCXJjID0gLUVJTzsKIAl9CiAKQEAgLTE1NCw5ICsxNTQsOSBAQAogCXN3aXRjaCAoc3BlY3RydW1fcmVzcF9zdGF0dXMpIHsKIAljYXNlIDA6CQkvKiBDb21tYW5kIHdpbGwgYmUgaGFuZGxlZCAqLwogCQlpZiAocmVzLT51LnNwZWN0cnVtLmlkICE9IDB4ZmYpIHsKLQkJCUlXTF9ERUJVR19JTkZPCi0JCQkgICAgKCJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCi0JCQkgICAgIHJlcy0+dS5zcGVjdHJ1bS5pZCk7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCisJCQkJcmVzLT51LnNwZWN0cnVtLmlkKTsKIAkJCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyAmPSB+TUVBU1VSRU1FTlRfUkVBRFk7CiAJCX0KIAkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzIHw9IE1FQVNVUkVNRU5UX0FDVElWRTsKQEAgLTE4MSw3ICsxODEsNyBAQAogCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uICpyZXBvcnQgPSAmKHBrdC0+dS5zcGVjdHJ1bV9ub3RpZik7CiAKIAlpZiAoIXJlcG9ydC0+c3RhdGUpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF8xMUgsCisJCUlXTF9ERUJVR18xMUgocHJpdiwKIAkJCSJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKaW5kZXggYjdkNzk0My4uYTc3YzFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCA3MGE4YjIxLi4xNjg0NDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNjAsNyArNjAsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCUlXTF9ERUJVR19BU1NPQ19MSU1JVCgiY2FuIG5vdCBmaW5kIFNUQSAlcE0gdG90YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DX0xJTUlUKHByaXYsICJjYW4gbm90IGZpbmQgU1RBICVwTSB0b3RhbCAlZFxuIiwKIAkJCSAgICAgIGFkZHIsIHByaXYtPm51bV9zdGF0aW9ucyk7CiAKICBvdXQ6CkBAIC04NiwxMSArODYsMTMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSkKLQkJSVdMX0VSUk9SKCJBQ1RJVkFURSBhIG5vbiBEUklWRVIgYWN0aXZlIHN0YXRpb24gJWRcbiIsIHN0YV9pZCk7CisJaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSAmJgorCSAgICAhKHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpCisJCUlXTF9FUlIocHJpdiwgIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiAlZFxuIiwKKwkJCXN0YV9pZCk7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgfD0gSVdMX1NUQV9VQ09ERV9BQ1RJVkU7Ci0JSVdMX0RFQlVHX0FTU09DKCJBZGRlZCBTVEEgdG8gVWNvZGU6ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZGVkIFNUQSB0byBVY29kZTogJXBNXG4iLAogCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTEwNSwxMyArMTA3LDEzIEBACiAJdTggc3RhX2lkID0gYWRkc3RhLT5zdGEuc3RhX2lkOwogCiAJaWYgKCFza2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9BRERfU1RBLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAorCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKIAkJCSAgcmVzLT5oZHIuZmxhZ3MpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xMjEsNyArMTIzLDcgQEAKIAkJaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShwcml2LCBzdGFfaWQpOwogCQkgLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJSZWNlaXZlZCBSRVBMWV9BRERfU1RBOigweCUwOFgpXG4iLAorCQlJV0xfREVCVUdfSEMocHJpdiwgIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6KDB4JTA4WClcbiIsCiAJCQkgICAgIHJlcy0+dS5hZGRfc3RhLnN0YXR1cyk7CiAJCWJyZWFrOwogCX0KQEAgLTEzMCw3ICsxMzIsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGl3bF9zZW5kX2FkZF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LAoraW50IGl3bF9zZW5kX2FkZF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkgICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncykKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKQEAgLTE1NSw3ICsxNTcsNyBAQAogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAogCQkJICByZXMtPmhkci5mbGFncyk7CiAJCXJldCA9IC1FSU87CiAJfQpAQCAtMTY0LDExICsxNjYsMTEgQEAKIAkJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKIAkJY2FzZSBBRERfU1RBX1NVQ0NFU1NfTVNLOgogCQkJaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShwcml2LCBzdGEtPnN0YS5zdGFfaWQpOwotCQkJSVdMX0RFQlVHX0lORk8oIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSRVBMWV9BRERfU1RBIFBBU1NFRFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU87Ci0JCQlJV0xfV0FSTklORygiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX0FERF9TVEEgZmFpbGVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTc4LDYgKzE4MCw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9hZGRfc3RhKTsKIAogc3RhdGljIHZvaWQgaXdsX3NldF9odF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGluZGV4LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqc3RhX2h0X2luZikKQEAgLTIwNCw3ICsyMDcsNyBAQAogCWNhc2UgV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQ6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIE1JTU8gUFMgbW9kZSAlZFxuIiwgbWltb19wc19tb2RlKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkludmFsaWQgTUlNTyBQUyBtb2RlICVkXG4iLCBtaW1vX3BzX21vZGUpOwogCQlicmVhazsKIAl9CiAKQEAgLTI2OSw3ICsyNzIsNyBAQAogCiAJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdOwogCXN0YXRpb24tPnVzZWQgPSBJV0xfU1RBX0RSSVZFUl9BQ1RJVkU7Ci0JSVdMX0RFQlVHX0FTU09DKCJBZGQgU1RBIHRvIGRyaXZlciBJRCAlZDogJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQWRkIFNUQSB0byBkcml2ZXIgSUQgJWQ6ICVwTVxuIiwKIAkJCXN0YV9pZCwgYWRkcik7CiAJcHJpdi0+bnVtX3N0YXRpb25zKys7CiAKQEAgLTMwMSwxMyArMzA0LDEzIEBACiAKIAlCVUdfT04oc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pOwogCi0JSVdMX0RFQlVHX0FTU09DKCJSZW1vdmVkIFNUQSBmcm9tIFVjb2RlOiAlcE1cbiIsIGFkZHIpOworCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiUmVtb3ZlZCBTVEEgZnJvbSBVY29kZTogJXBNXG4iLCBhZGRyKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJLyogVWNvZGUgbXVzdCBiZSBhY3RpdmUgYW5kIGRyaXZlciBtdXN0IGJlIG5vbiBhY3RpdmUgKi8KIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICE9IElXTF9TVEFfVUNPREVfQUNUSVZFKQotCQlJV0xfRVJST1IoInJlbW92ZWQgbm9uIGFjdGl2ZSBTVEEgJWRcbiIsIHN0YV9pZCk7CisJCUlXTF9FUlIocHJpdiwgInJlbW92ZWQgbm9uIGFjdGl2ZSBTVEEgJWRcbiIsIHN0YV9pZCk7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJj0gfklXTF9TVEFfVUNPREVfQUNUSVZFOwogCkBAIC0zMjQsMTMgKzMyNywxMyBAQAogCWNvbnN0IGNoYXIgKmFkZHIgPSBybV9zdGEtPmFkZHI7CiAKIAlpZiAoIXNrYikgewotCQlJV0xfRVJST1IoIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX1JFTU9WRV9TVEEuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfUkVNT1ZFX1NUQS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SRU1PVkVfU1RBICgweCUwOFgpXG4iLAogCQlyZXMtPmhkci5mbGFncyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTM0MCw3ICszNDMsNyBAQAogCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgYWRkcik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiUkVQTFlfUkVNT1ZFX1NUQSBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMzc4LDcgKzM4MSw3IEBACiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUkVNT1ZFX1NUQSAoMHglMDhYKVxuIiwKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCQkgIHJlcy0+aGRyLmZsYWdzKTsKIAkJcmV0ID0gLUVJTzsKIAl9CkBAIC0zODcsMTEgKzM5MCwxMSBAQAogCQlzd2l0Y2ggKHJlcy0+dS5yZW1fc3RhLnN0YXR1cykgewogCQljYXNlIFJFTV9TVEFfU1VDQ0VTU19NU0s6CiAJCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgYWRkcik7Ci0JCQlJV0xfREVCVUdfQVNTT0MoIlJFUExZX1JFTU9WRV9TVEEgUEFTU0VEXG4iKTsKKwkJCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiUkVQTFlfUkVNT1ZFX1NUQSBQQVNTRURcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAtRUlPOwotCQkJSVdMX0VSUk9SKCJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CisJCQlJV0xfRVJSKHByaXYsICJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTQyOSwxNyArNDMyLDE3IEBACiAJaWYgKHVubGlrZWx5KHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKIAkJZ290byBvdXQ7CiAKLQlJV0xfREVCVUdfQVNTT0MoIlJlbW92aW5nIFNUQSBmcm9tIGRyaXZlcjolZCAgJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiUmVtb3ZpbmcgU1RBIGZyb20gZHJpdmVyOiVkICAlcE1cbiIsCiAJCXN0YV9pZCwgYWRkcik7CiAKIAlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpKSB7Ci0JCUlXTF9FUlJPUigiUmVtb3ZpbmcgJXBNIGJ1dCBub24gRFJJVkVSIGFjdGl2ZVxuIiwKKwkJSVdMX0VSUihwcml2LCAiUmVtb3ZpbmcgJXBNIGJ1dCBub24gRFJJVkVSIGFjdGl2ZVxuIiwKIAkJCQlhZGRyKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9VQ09ERV9BQ1RJVkUpKSB7Ci0JCUlXTF9FUlJPUigiUmVtb3ZpbmcgJXBNIGJ1dCBub24gVUNPREUgYWN0aXZlXG4iLAorCQlJV0xfRVJSKHByaXYsICJSZW1vdmluZyAlcE0gYnV0IG5vbiBVQ09ERSBhY3RpdmVcbiIsCiAJCQkJYWRkcik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQ2OSwxMyArNDcyLDE0IEBACiB2b2lkIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGl3bF9pc19hbGl2ZShwcml2KSAmJgogCSAgICF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSAmJgogCSAgIGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUkVNT1ZFX0FMTF9TVEEsIDAsIE5VTEwsIE5VTEwpKQotCQlJV0xfRVJST1IoIkNvdWxkbid0IGNsZWFyIHRoZSBzdGF0aW9uIHRhYmxlXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ291bGRuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGVcbiIpOwogCiAJcHJpdi0+bnVtX3N0YXRpb25zID0gMDsKIAltZW1zZXQocHJpdi0+c3RhdGlvbnMsIDAsIHNpemVvZihwcml2LT5zdGF0aW9ucykpOwpAQCAtNDgzLDExICs0ODcsMTcgQEAKIAkvKiBjbGVhbiB1Y29kZSBrZXkgdGFibGUgYml0IG1hcCAqLwogCXByaXYtPnVjb2RlX2tleV90YWJsZSA9IDA7CiAKKwkvKiBrZWVwIHRyYWNrIG9mIHN0YXRpYyBrZXlzICovCisJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTX01BWCA7IGkrKykgeworCQlpZiAocHJpdi0+d2VwX2tleXNbaV0ua2V5X3NpemUpCisJCQl0ZXN0X2FuZF9zZXRfYml0KGksICZwcml2LT51Y29kZV9rZXlfdGFibGUpOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZSk7CiAKLXN0YXRpYyBpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IGk7CiAKQEAgLTQ5Nyw2ICs1MDcsNyBAQAogCiAJcmV0dXJuIFdFUF9JTlZBTElEX09GRlNFVDsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleCk7CiAKIGludCBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHNlbmRfaWZfZW1wdHkpCiB7CkBAIC01NTEsMTMgKzU2MiwxMyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoa2V5Y29uZi0+a2V5aWR4LCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKLQkJSVdMX0VSUk9SKCJpbmRleCAlZCBub3QgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAorCQlJV0xfRVJSKHByaXYsICJpbmRleCAlZCBub3QgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAogCQkJICBrZXljb25mLT5rZXlpZHgpOwogCiAJcHJpdi0+ZGVmYXVsdF93ZXBfa2V5LS07CiAJbWVtc2V0KCZwcml2LT53ZXBfa2V5c1trZXljb25mLT5rZXlpZHhdLCAwLCBzaXplb2YocHJpdi0+d2VwX2tleXNbMF0pKTsKIAlyZXQgPSBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAxKTsKLQlJV0xfREVCVUdfV0VQKCJSZW1vdmUgZGVmYXVsdCBXRVAga2V5OiBpZHg9JWQgcmV0PSVkXG4iLAorCUlXTF9ERUJVR19XRVAocHJpdiwgIlJlbW92ZSBkZWZhdWx0IFdFUCBrZXk6IGlkeD0lZCByZXQ9JWRcbiIsCiAJCSAgICAgIGtleWNvbmYtPmtleWlkeCwgcmV0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCkBAIC01NzMsNyArNTg0LDcgQEAKIAogCWlmIChrZXljb25mLT5rZXlsZW4gIT0gV0VQX0tFWV9MRU5fMTI4ICYmCiAJICAgIGtleWNvbmYtPmtleWxlbiAhPSBXRVBfS0VZX0xFTl82NCkgewotCQlJV0xfREVCVUdfV0VQKCJCYWQgV0VQIGtleSBsZW5ndGggJWRcbiIsIGtleWNvbmYtPmtleWxlbik7CisJCUlXTF9ERUJVR19XRVAocHJpdiwgIkJhZCBXRVAga2V5IGxlbmd0aCAlZFxuIiwga2V5Y29uZi0+a2V5bGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01ODUsNyArNTk2LDcgQEAKIAlwcml2LT5kZWZhdWx0X3dlcF9rZXkrKzsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGtleWNvbmYtPmtleWlkeCwgJnByaXYtPnVjb2RlX2tleV90YWJsZSkpCi0JCUlXTF9FUlJPUigiaW5kZXggJWQgYWxyZWFkeSB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCisJCUlXTF9FUlIocHJpdiwgImluZGV4ICVkIGFscmVhZHkgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAogCQkJa2V5Y29uZi0+a2V5aWR4KTsKIAogCXByaXYtPndlcF9rZXlzW2tleWNvbmYtPmtleWlkeF0ua2V5X3NpemUgPSBrZXljb25mLT5rZXlsZW47CkBAIC01OTMsNyArNjA0LDcgQEAKIAkJCQkJCQlrZXljb25mLT5rZXlsZW4pOwogCiAJcmV0ID0gaXdsX3NlbmRfc3RhdGljX3dlcGtleV9jbWQocHJpdiwgMCk7Ci0JSVdMX0RFQlVHX1dFUCgiU2V0IGRlZmF1bHQgV0VQIGtleTogbGVuPSVkIGlkeD0lZCByZXQ9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiU2V0IGRlZmF1bHQgV0VQIGtleTogbGVuPSVkIGlkeD0lZCByZXQ9JWRcbiIsCiAJCWtleWNvbmYtPmtleWxlbiwga2V5Y29uZi0+a2V5aWR4LCByZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKQEAgLTY0MSw3ICs2NTIsNyBAQAogCSAqIGluIHVDb2RlLiAqLwogCiAJV0FSTihwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCi0JCSJubyBzcGFjZSBmb3IgbmV3IGtldyIpOworCQkibm8gc3BhY2UgZm9yIGEgbmV3IGtleSIpOwogCiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOwpAQCAtNjg5LDcgKzcwMCw3IEBACiAJICogaW4gdUNvZGUuICovCiAKIAlXQVJOKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCwKLQkJIm5vIHNwYWNlIGZvciBuZXcga2V3Iik7CisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CkBAIC03MjUsNyArNzM2LDcgQEAKIAkgKiBpbiB1Q29kZS4gKi8KIAogCVdBUk4ocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VULAotCQkibm8gc3BhY2UgZm9yIG5ldyBrZXciKTsKKwkJIm5vIHNwYWNlIGZvciBhIG5ldyBrZXkiKTsKIAogCS8qIFRoaXMgY29weSBpcyBhY3V0YWxseSBub3QgbmVlZGVkOiB3ZSBnZXQgdGhlIGtleSB3aXRoIGVhY2ggVFggKi8KIAltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LCAxNik7CkBAIC03NDksNyArNzYwLDcgQEAKIAogCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSAlcE0gbm90IGluIHN0YXRpb24gbWFwLlxuIiwKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAogCQkJCSAgIGFkZHIpOwogCQlyZXR1cm47CiAJfQpAQCAtODAxLDcgKzgxMiw3IEBACiAJa2V5X2ZsYWdzID0gbGUxNl90b19jcHUocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyk7CiAJa2V5aWR4ID0gKGtleV9mbGFncyA+PiBTVEFfS0VZX0ZMR19LRVlJRF9QT1MpICYgMHgzOwogCi0JSVdMX0RFQlVHX1dFUCgiUmVtb3ZlIGR5bmFtaWMga2V5OiBpZHg9JWQgc3RhPSVkXG4iLAorCUlXTF9ERUJVR19XRVAocHJpdiwgIlJlbW92ZSBkeW5hbWljIGtleTogaWR4PSVkIHN0YT0lZFxuIiwKIAkJICAgICAga2V5Y29uZi0+a2V5aWR4LCBzdGFfaWQpOwogCiAJaWYgKGtleWNvbmYtPmtleWlkeCAhPSBrZXlpZHgpIHsKQEAgLTgxNSw3ICs4MjYsNyBAQAogCX0KIAogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQpIHsKLQkJSVdMX1dBUk5JTkcoIlJlbW92aW5nIHdyb25nIGtleSAlZCAweCV4XG4iLAorCQlJV0xfV0FSTihwcml2LCAiUmVtb3Zpbmcgd3Jvbmcga2V5ICVkIDB4JXhcbiIsCiAJCQkgICAga2V5Y29uZi0+a2V5aWR4LCBrZXlfZmxhZ3MpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKQEAgLTgyMyw3ICs4MzQsNyBAQAogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQsCiAJCSZwcml2LT51Y29kZV9rZXlfdGFibGUpKQotCQlJV0xfRVJST1IoImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCisJCUlXTF9FUlIocHJpdiwgImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCk7CiAJbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8sIDAsCiAJCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2h3X2tleSkpOwpAQCAtODYwLDExICs4NzEsMTIgQEAKIAkJcmV0ID0gaXdsX3NldF93ZXBfZHluYW1pY19rZXlfaW5mbyhwcml2LCBrZXljb25mLCBzdGFfaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVua25vd24gYWxnOiAlcyBhbGcgPSAlZFxuIiwgX19mdW5jX18sIGtleWNvbmYtPmFsZyk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXljb25mLT5hbGcpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCUlXTF9ERUJVR19XRVAoIlNldCBkeW5hbWljIGtleTogYWxnPSAlZCBsZW49JWQgaWR4PSVkIHN0YT0lZCByZXQ9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiU2V0IGR5bmFtaWMga2V5OiBhbGc9ICVkIGxlbj0lZCBpZHg9JWQgc3RhPSVkIHJldD0lZFxuIiwKIAkJICAgICAga2V5Y29uZi0+YWxnLCBrZXljb25mLT5rZXlsZW4sIGtleWNvbmYtPmtleWlkeCwKIAkJICAgICAgc3RhX2lkLCByZXQpOwogCkBAIC04NzcsMTMgKzg4OSwxMyBAQAogCQkJICAgc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICpscSkKIHsKIAlpbnQgaTsKLQlJV0xfREVCVUdfUkFURSgibHEgc3RhdGlvbiBpZCAweCV4XG4iLCBscS0+c3RhX2lkKTsKLQlJV0xfREVCVUdfUkFURSgibHEgYW50IDB4JVggMHglWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAibHEgc3RhdGlvbiBpZCAweCV4XG4iLCBscS0+c3RhX2lkKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibHEgYW50IDB4JVggMHglWFxuIiwKIAkJICAgICAgIGxxLT5nZW5lcmFsX3BhcmFtcy5zaW5nbGVfc3RyZWFtX2FudF9tc2ssCiAJCSAgICAgICBscS0+Z2VuZXJhbF9wYXJhbXMuZHVhbF9zdHJlYW1fYW50X21zayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTElOS19RVUFMX01BWF9SRVRSWV9OVU07IGkrKykKLQkJSVdMX0RFQlVHX1JBVEUoImxxIGluZGV4ICVkIDB4JVhcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJscSBpbmRleCAlZCAweCVYXG4iLAogCQkJICAgICAgIGksIGxxLT5yc190YWJsZVtpXS5yYXRlX25fZmxhZ3MpOwogfQogI2Vsc2UKQEAgLTEwNjAsNyArMTA3Miw3IEBACiAJCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikKIAkJCXJldHVybiBzdGFfaWQ7CiAKLQkJSVdMX0RFQlVHX0RST1AoIlN0YXRpb24gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCiAJCQkgICAgICAgIkRlZmF1bHRpbmcgdG8gYnJvYWRjYXN0Li4uXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX0RST1AsICh1OCAqKSBoZHIsIHNpemVvZigqaGRyKSk7CkBAIC0xMDcyLDcgKzEwODQsOCBAQAogCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZFxuIiwgcHJpdi0+aXdfbW9kZSk7CisJCUlXTF9XQVJOKHByaXYsICJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZFxuIiwKKwkJCXByaXYtPml3X21vZGUpOwogCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCmluZGV4IDliYjdjZWYuLjU5YTU4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC01NCw4ICs1NCwxMSBAQAogaW50IGl3bF9yeG9uX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCk7CiBpbnQgaXdsX3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCk7CiB2b2lkIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogaW50IGl3bF9nZXRfcmFfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7CitpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgc3RydWN0IGl3bF9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKTsKIHU4IGl3bF9hZGRfc3RhdGlvbl9mbGFncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLAogCQkJaW50IGlzX2FwLCB1OCBmbGFncywKIAkJCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCBhYjEzZmYyLi5kZmY2MGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTc2LDExNiArNzYsNiBAQAogCW1lbXNldChwdHIsIDAsIHNpemVvZigqcHRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBpd2xfdGZkX3RiX2dldF9hZGRyKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKLXsKLQlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKLQotCWRtYV9hZGRyX3QgYWRkciA9IGdldF91bmFsaWduZWRfbGUzMigmdGItPmxvKTsKLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCi0JCWFkZHIgfD0KLQkJKChkbWFfYWRkcl90KShsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pICYgMHhGKSA8PCAxNikgPDwgMTY7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgaXdsX3RmZF90Yl9nZXRfbGVuKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKLXsKLQlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKLQotCXJldHVybiBsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pID4+IDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdGZkX3NldF90YihzdHJ1Y3QgaXdsX3RmZCAqdGZkLCB1OCBpZHgsCi0JCQkJICBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pCi17Ci0Jc3RydWN0IGl3bF90ZmRfdGIgKnRiID0gJnRmZC0+dGJzW2lkeF07Ci0JdTE2IGhpX25fbGVuID0gbGVuIDw8IDQ7Ci0KLQlwdXRfdW5hbGlnbmVkX2xlMzIoYWRkciwgJnRiLT5sbyk7Ci0JaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKQotCQloaV9uX2xlbiB8PSAoKGFkZHIgPj4gMTYpID4+IDE2KSAmIDB4RjsKLQotCXRiLT5oaV9uX2xlbiA9IGNwdV90b19sZTE2KGhpX25fbGVuKTsKLQotCXRmZC0+bnVtX3RicyA9IGlkeCArIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXdsX3RmZF9nZXRfbnVtX3RicyhzdHJ1Y3QgaXdsX3RmZCAqdGZkKQotewotCXJldHVybiB0ZmQtPm51bV90YnMgJiAweDFmOwotfQotCi0vKioKLSAqIGl3bF9od190eHFfZnJlZV90ZmQgLSBGcmVlIGFsbCBjaHVua3MgcmVmZXJlbmNlZCBieSBURkQgW3R4cS0+cS5yZWFkX3B0cl0KLSAqIEBwcml2IC0gZHJpdmVyIHByaXZhdGUgZGF0YQotICogQHR4cSAtIHR4IHF1ZXVlCi0gKgotICogRG9lcyBOT1QgYWR2YW5jZSBhbnkgVEZEIGNpcmN1bGFyIGJ1ZmZlciByZWFkL3dyaXRlIGluZGV4ZXMKLSAqIERvZXMgTk9UIGZyZWUgdGhlIFRGRCBpdHNlbGYgKHdoaWNoIGlzIHdpdGhpbiBjaXJjdWxhciBidWZmZXIpCi0gKi8KLXN0YXRpYyB2b2lkIGl3bF9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCi17Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZF90bXAgPSAoc3RydWN0IGl3bF90ZmQgKikmdHhxLT50ZmRzWzBdOwotCXN0cnVjdCBpd2xfdGZkICp0ZmQ7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0JaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOwotCWludCBpOwotCWludCBudW1fdGJzOwotCi0JdGZkID0gJnRmZF90bXBbaW5kZXhdOwotCi0JLyogU2FuaXR5IGNoZWNrIG9uIG51bWJlciBvZiBjaHVua3MgKi8KLQludW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOwotCi0JaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKLQkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBudW1fdGJzKTsKLQkJLyogQHRvZG8gaXNzdWUgZmF0YWwgZXJyb3IsIGl0IGlzIHF1aXRlIHNlcmlvdXMgc2l0dWF0aW9uICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBVbm1hcCB0eF9jbWQgKi8KLQlpZiAobnVtX3RicykKLQkJcGNpX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJcGNpX3VubWFwX2FkZHIoJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbWFwcGluZyksCi0JCQkJcGNpX3VubWFwX2xlbigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBsZW4pLAotCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQkvKiBVbm1hcCBjaHVua3MsIGlmIGFueS4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgbnVtX3RiczsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBpd2xfdGZkX3RiX2dldF9hZGRyKHRmZCwgaSksCi0JCQkJaXdsX3RmZF90Yl9nZXRfbGVuKHRmZCwgaSksIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JCWlmICh0eHEtPnR4YikgewotCQkJZGV2X2tmcmVlX3NrYih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpIC0gMV0pOwotCQkJdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaSAtIDFdID0gTlVMTDsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJc3RydWN0IGl3bF90ZmQgKnRmZCwKLQkJCQkJZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKQotewotCi0JdTMyIG51bV90YnMgPSBpd2xfdGZkX2dldF9udW1fdGJzKHRmZCk7Ci0KLQkvKiBFYWNoIFRGRCBjYW4gcG9pbnQgdG8gYSBtYXhpbXVtIDIwIFR4IGJ1ZmZlcnMgKi8KLQlpZiAobnVtX3RicyA+PSBJV0xfTlVNX09GX1RCUykgewotCQlJV0xfRVJST1IoIkVycm9yIGNhbiBub3Qgc2VuZCBtb3JlIHRoYW4gJWQgY2h1bmtzXG4iLAotCQkJICBJV0xfTlVNX09GX1RCUyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCUJVR19PTihhZGRyICYgfkRNQV9CSVRfTUFTSygzNikpOwotCWlmICh1bmxpa2VseShhZGRyICYgfklXTF9UWF9ETUFfTUFTSykpCi0JCUlXTF9FUlJPUigiVW5hbGlnbmVkIGFkZHJlc3MgPSAlbGx4XG4iLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIpOwotCi0JaXdsX3RmZF9zZXRfdGIodGZkLCBudW1fdGJzLCBhZGRyLCBsZW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKICAqLwpAQCAtMjA2LDcgKzk2LDcgQEAKIAkJcmVnID0gaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7CiAKIAkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKIAkJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAkJCXJldHVybiByZXQ7CkBAIC0yNDEsNyArMTMxLDcgQEAKICAqIEZyZWUgYWxsIGJ1ZmZlcnMuCiAgKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKQordm9pZCBpd2xfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCiB7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwpAQCAtMjU0LDcgKzE0NCw3IEBACiAJLyogZmlyc3QsIGVtcHR5IGFsbCBCRCdzICovCiAJZm9yICg7IHEtPndyaXRlX3B0ciAhPSBxLT5yZWFkX3B0cjsKIAkgICAgIHEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkKLQkJaXdsX2h3X3R4cV9mcmVlX3RmZChwcml2LCB0eHEpOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKIAogCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBxLT5uX3dpbmRvdzsKIApAQCAtMjY0LDcgKzE1NCw3IEBACiAKIAkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwogCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3RmZCkgKgorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICoKIAkJCQkgICAgdHhxLT5xLm5fYmQsIHR4cS0+dGZkcywgdHhxLT5xLmRtYV9hZGRyKTsKIAogCS8qIERlLWFsbG9jIGFycmF5IG9mIHBlci1URkQgZHJpdmVyIGRhdGEgKi8KQEAgLTI3NCw3ICsxNjQsNyBAQAogCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwogCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7CiB9Ci0KK0VYUE9SVF9TWU1CT0woaXdsX3R4X3F1ZXVlX2ZyZWUpOwogCiAvKioKICAqIGl3bF9jbWRfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgpAQCAtMzg4LDYgKzI3OCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsIHUzMiBpZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzaXplX3QgdGZkX3N6ID0gcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogVEZEX1FVRVVFX1NJWkVfTUFYOwogCiAJLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCiAJICogbm90IHNoYXJlZCB3aXRoIGRldmljZS4gKi8KQEAgLTM5NSwyMiArMjg2LDIwIEBACiAJCXR4cS0+dHhiID0ga21hbGxvYyhzaXplb2YodHhxLT50eGJbMF0pICoKIAkJCQkgICBURkRfUVVFVUVfU0laRV9NQVgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXR4cS0+dHhiKSB7Ci0JCQlJV0xfRVJST1IoImttYWxsb2MgZm9yIGF1eGlsaWFyeSBCRCAiCisJCQlJV0xfRVJSKHByaXYsICJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgogCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQl9IGVsc2UKKwl9IGVsc2UgewogCQl0eHEtPnR4YiA9IE5VTEw7CisJfQogCiAJLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKIAkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPnRmZHMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsCi0JCQlzaXplb2YodHhxLT50ZmRzWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCwKLQkJCSZ0eHEtPnEuZG1hX2FkZHIpOworCXR4cS0+dGZkcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgdGZkX3N6LCAmdHhxLT5xLmRtYV9hZGRyKTsKIAogCWlmICghdHhxLT50ZmRzKSB7Ci0JCUlXTF9FUlJPUigicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsCi0JCQkgIHNpemVvZih0eHEtPnRmZHNbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKKwkJSVdMX0VSUihwcml2LCAicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsIHRmZF9zeik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXR4cS0+cS5pZCA9IGlkOwpAQCAtNDI0LDQyICszMTMsMTEgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotLyoKLSAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgotICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCi0gKgotICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCi0gKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmV0KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBDaXJjdWxhciBidWZmZXIgKFRGRCBxdWV1ZSBpbiBEUkFNKSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX0NCQkNfUVVFVUUodHhxX2lkKSwKLQkJCSAgICAgdHhxLT5xLmRtYV9hZGRyID4+IDgpOwotCi0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfdHhfcXVldWVfaW5pdCAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSB0eC9jbWQgcXVldWUKICAqLwotc3RhdGljIGludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKLQkJCSAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKK2ludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJICAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKIHsKIAlpbnQgaSwgbGVuOwogCWludCByZXQ7CkBAIC01MDEsNyArMzU5LDcgQEAKIAlpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKIAogCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUgKi8KLQlpd2xfaHdfdHhfcXVldWVfaW5pdChwcml2LCB0eHEpOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbml0KHByaXYsIHR4cSk7CiAKIAlyZXR1cm4gMDsKIGVycjoKQEAgLTUxNiw2ICszNzQsOCBAQAogCX0KIAlyZXR1cm4gLUVOT01FTTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3R4X3F1ZXVlX2luaXQpOworCiAvKioKICAqIGl3bF9od190eHFfY3R4X2ZyZWUgLSBGcmVlIFRYUSBDb250ZXh0CiAgKgpAQCAtNTU3LDEzICs0MTcsMTMgQEAKIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+c2NkX2JjX3RibHMsCiAJCQkJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX2JjX3RibHM7CiAJfQogCS8qIEFsbG9jIGtlZXAtd2FybSBidWZmZXIgKi8KIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+a3csIElXTF9LV19TSVpFKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9rdzsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTU4OSw3ICs0NDksNyBAQAogCQlyZXQgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKIAkJCQkgICAgICAgdHhxX2lkKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJUeCAlZCBxdWV1ZSBpbml0IGZhaWxlZFxuIiwgdHhxX2lkKTsKKwkJCUlXTF9FUlIocHJpdiwgIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KQEAgLTc3OCwxNCArNjM4LDE0IEBACiAJCW1lbWNweSh0eF9jbWQtPmtleSwga2V5Y29uZi0+a2V5LCBrZXljb25mLT5rZXlsZW4pOwogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0FHR19DQ01QX01TSzsKLQkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCBBRVMgaHdjcnlwdG9cbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfVEtJUDoKIAkJdHhfY21kLT5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwogCQlpZWVlODAyMTFfZ2V0X3RraXBfa2V5KGtleWNvbmYsIHNrYl9mcmFnLAogCQkJSUVFRTgwMjExX1RLSVBfUDJfS0VZLCB0eF9jbWQtPmtleSk7Ci0JCUlXTF9ERUJVR19UWCgidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfV0VQOgpAQCAtNzk3LDEyICs2NTcsMTIgQEAKIAogCQltZW1jcHkoJnR4X2NtZC0+a2V5WzNdLCBrZXljb25mLT5rZXksIGtleWNvbmYtPmtleWxlbik7CiAKLQkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKIAkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBrZXljb25mLT5rZXlpZHgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXljb25mLT5hbGcpOworCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWNvbmYtPmFsZyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTgyMiw3ICs2ODIsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CkBAIC04NDQsMTMgKzcwMywxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCiAJaWYgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZSAmIDB4RkYpID09CiAJICAgICBJV0xfSU5WQUxJRF9SQVRFKSB7Ci0JCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODU4LDExICs3MTcsMTEgQEAKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CiAjZW5kaWYKIAogCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCkBAIC04NzIsNyArNzMxLDcgQEAKIAkgICAgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fAogCSAgICAgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmICFwcml2LT5hc3NvY19pZCkgfHwKIAkgICAgICFwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkKSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODgzLDEyICs3NDIsMTIgQEAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwogCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJZ290byBkcm9wOwogCX0KIAotCUlXTF9ERUJVR19UWCgic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKKwlJV0xfREVCVUdfVFgocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CiAKIAlzd3FfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl0eHFfaWQgPSBzd3FfaWQ7CkBAIC04OTgsNyArNzU3LDcgQEAKIAkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlcjsKIAkJc2VxX251bWJlciAmPSBJRUVFODAyMTFfU0NUTF9TRVE7CiAJCWhkci0+c2VxX2N0cmwgPSBoZHItPnNlcV9jdHJsICYKLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOwogCQloZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcV9udW1iZXIpOwogCQlzZXFfbnVtYmVyICs9IDB4MTA7CiAJCS8qIGFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aGlzIDxzdGEsdGlkPiAqLwpAQCAtOTEzLDEwICs3NzIsNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBURkQgd2l0aGluIHRoaXMgcXVldWUncyBjaXJjdWxhciBURkQgYnVmZmVyICovCi0JdGZkID0gJnR4cS0+dGZkc1txLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KIAkvKiBTZXQgdXAgZHJpdmVyIGRhdGEgZm9yIHRoaXMgVEZEICovCiAJbWVtc2V0KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXSksIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2luZm8pKTsKIAl0eHEtPnR4YltxLT53cml0ZV9wdHJdLnNrYlswXSA9IHNrYjsKQEAgLTk3MCw3ICs4MjUsOCBAQAogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KIAl0eGNtZF9waHlzICs9IG9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwotCWl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCB0eGNtZF9waHlzLCBsZW4pOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkgICB0eGNtZF9waHlzLCBsZW4sIDEsIDApOwogCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQlpd2xfdHhfY21kX2J1aWxkX2h3Y3J5cHRvKHByaXYsIGluZm8sIHR4X2NtZCwgc2tiLCBzdGFfaWQpOwpAQCAtOTgxLDcgKzgzNyw5IEBACiAJaWYgKGxlbikgewogCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAogCQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBsZW4pOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJCSAgIHBoeXNfYWRkciwgbGVuLAorCQkJCQkJCSAgIDAsIDApOwogCX0KIAogCS8qIFRlbGwgTklDIGFib3V0IGFueSAyLWJ5dGUgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCkBAIC0xMDYzLDcgKzkyMSw2IEBACiB7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV07CiAJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZDsKIAlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZDsKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTA4MSwyMSArOTM4LDE3IEBACiAJICAgICAgICEoY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOwogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0lORk8oIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJOb3Qgc2VuZGluZyBjb21tYW5kIC0gUkYgS0lMTCIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7Ci0JCUlXTF9FUlJPUigiTm8gc3BhY2UgZm9yIFR4XG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTm8gc3BhY2UgZm9yIFR4XG4iKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwogCi0JdGZkID0gJnR4cS0+dGZkc1txLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KLQogCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCBjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKTsKIAlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKIApAQCAtMTEyMCwxMyArOTczLDE1IEBACiAJcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgbGVuKTsKIAlwaHlzX2FkZHIgKz0gb2Zmc2V0b2Yoc3RydWN0IGl3bF9jbWQsIGhkcik7CiAKLQlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBmaXhfc2l6ZSk7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKKwkJCQkJCSAgIHBoeXNfYWRkciwgZml4X3NpemUsIDEsCisJCQkJCQkgICBVMzJfUEFEKGNtZC0+bGVuKSk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCXN3aXRjaCAob3V0X2NtZC0+aGRyLmNtZCkgewogCWNhc2UgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRDoKIAljYXNlIFNFTlNJVElWSVRZX0NNRDoKLQkJSVdMX0RFQlVHX0hDX0RVTVAoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKKwkJSVdMX0RFQlVHX0hDX0RVTVAocHJpdiwgIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKIAkJCQkiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAogCQkJCW91dF9jbWQtPmhkci5jbWQsCkBAIC0xMTM0LDcgKzk4OSw3IEBACiAJCQkJcS0+d3JpdGVfcHRyLCBpZHgsIElXTF9DTURfUVVFVUVfTlVNKTsKIAkJCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfREVCVUdfSEMoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJTZW5kaW5nIGNvbW1hbmQgJXMgKCMleCksIHNlcTogMHglMDRYLCAiCiAJCQkJIiVkIGJ5dGVzIGF0ICVkWyVkXTolZFxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhvdXRfY21kLT5oZHIuY21kKSwKIAkJCQlvdXRfY21kLT5oZHIuY21kLApAQCAtMTE0NCw4ICs5OTksOSBAQAogI2VuZGlmCiAJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAKLQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLwotCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgMCk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKQorCQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsIDApOwogCiAJLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwogCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwpAQCAtMTE2Myw3ICsxMDE5LDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKHEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHEgaWQgKCVkKSwgaW5kZXggJWQsICIKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm4gMDsKQEAgLTExODAsNyArMTAzNiw3IEBACiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ludmFsX2J5dGVfY250X3RibChwcml2LCB0eHEpOwogCi0JCWl3bF9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAJCW5mcmVlZCsrOwogCX0KIAlyZXR1cm4gbmZyZWVkOwpAQCAtMTIwMyw3ICsxMDU5LDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaWR4ID49IHEtPm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZChxLCBpZHgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCiAJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAogCQkJICBpZHgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm47CkBAIC0xMjE4LDcgKzEwNzQsNyBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJaWYgKG5mcmVlZCsrID4gMCkgewotCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGlkeCwKKwkJCUlXTF9FUlIocHJpdiwgIkhDTUQgc2tpcHBlZDogaW5kZXggKCVkKSAlZCAlZFxuIiwgaWR4LAogCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKIAkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiAJCX0KQEAgLTEzMDYsNyArMTE2Miw3IEBACiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCUlXTF9XQVJOSU5HKCIlcyBvbiByYSA9ICVwTSB0aWQgPSAlZFxuIiwKKwlJV0xfV0FSTihwcml2LCAiJXMgb24gcmEgPSAlcE0gdGlkID0gJWRcbiIsCiAJCQlfX2Z1bmNfXywgcmEsIHRpZCk7CiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIHJhKTsKQEAgLTEzMTQsNyArMTE3MCw3IEBACiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PRkYpIHsKLQkJSVdMX0VSUk9SKCJTdGFydCBBR0cgd2hlbiBzdGF0ZSBpcyBub3QgSVdMX0FHR19PRkYgIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IEFHRyB3aGVuIHN0YXRlIGlzIG5vdCBJV0xfQUdHX09GRiAhXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKQEAgLTEzMzQsMTEgKzExOTAsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSFcgcXVldWUgaXMgZW1wdHlcbiIpOworCQlJV0xfRVJSKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09OOwogCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgcmEsIHRpZCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBpcyBOT1QgZW1wdHk6ICVkIHBhY2tldHMgaW4gSFcgcXVldWVcbiIsCisJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgaXMgTk9UIGVtcHR5OiAlZCBwYWNrZXRzIGluIEhXIHF1ZXVlXG4iLAogCQkJICAgICB0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSk7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE7CiAJfQpAQCAtMTM1NCw3ICsxMjEwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFyYSkgewotCQlJV0xfRVJST1IoInJhID0gTlVMTFxuIik7CisJCUlXTF9FUlIocHJpdiwgInJhID0gTlVMTFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTM2OSw3ICsxMjI1LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSAhPSBJV0xfQUdHX09OKQotCQlJV0xfV0FSTklORygiU3RvcHBpbmcgQUdHIHdoaWxlIHN0YXRlIG5vdCBJV0xfQUdHX09OXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgSVdMX0FHR19PTlxuIik7CiAKIAl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOwogCXNzbiA9ICh0aWRfZGF0YS0+c2VxX251bWJlciAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKQEAgLTEzNzksMTMgKzEyMzUsMTMgQEAKIAogCS8qIFRoZSBxdWV1ZSBpcyBub3QgZW1wdHkgKi8KIAlpZiAod3JpdGVfcHRyICE9IHJlYWRfcHRyKSB7Ci0JCUlXTF9ERUJVR19IVCgiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJTdG9wcGluZyBhIG5vbiBlbXB0eSBBR0cgSFcgUVVFVUVcbiIpOwogCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9CiAJCQkJSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKKwlJV0xfREVCVUdfSFQocHJpdiwgIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTE0MTYsNyArMTI3Miw3IEBACiAJCSAgICAocS0+cmVhZF9wdHIgPT0gcS0+d3JpdGVfcHRyKSkgewogCQkJdTE2IHNzbiA9IFNFUV9UT19TTih0aWRfZGF0YS0+c2VxX251bWJlcik7CiAJCQlpbnQgdHhfZmlmbyA9IGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm9bdGlkXTsKLQkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIERFTEJBIGZsb3dcbiIpOworCQkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgREVMQkEgZmxvd1xuIik7CiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLAogCQkJCQkJCSAgICAgc3NuLCB0eF9maWZvKTsKIAkJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKQEAgLTE0MjYsNyArMTI4Miw3IEBACiAJY2FzZSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE6CiAJCS8qIFdlIGFyZSByZWNsYWltaW5nIHRoZSBsYXN0IHBhY2tldCBvZiB0aGUgcXVldWUgKi8KIAkJaWYgKHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlID09IDApIHsKLQkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIEFEREJBIGZsb3dcbiIpOworCQkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgQUREQkEgZmxvd1xuIik7CiAJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PTjsKIAkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHByaXYtPmh3LCBhZGRyLCB0aWQpOwogCQl9CkBAIC0xNDU1LDEzICsxMzExLDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCiAJaWYgKHVubGlrZWx5KCFhZ2ctPndhaXRfZm9yX2JhKSkgIHsKLQkJSVdMX0VSUk9SKCJSZWNlaXZlZCBCQSB3aGVuIG5vdCBleHBlY3RlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIlJlY2VpdmVkIEJBIHdoZW4gbm90IGV4cGVjdGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTWFyayB0aGF0IHRoZSBleHBlY3RlZCBibG9jay1hY2sgcmVzcG9uc2UgYXJyaXZlZCAqLwogCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiQkEgJWQgJWRcbiIsIGFnZy0+c3RhcnRfaWR4LCBiYV9yZXNwLT5zZXFfY3RsKTsKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkJBICVkICVkXG4iLCBhZ2ctPnN0YXJ0X2lkeCwgYmFfcmVzcC0+c2VxX2N0bCk7CiAKIAkvKiBDYWxjdWxhdGUgc2hpZnQgdG8gYWxpZ24gYmxvY2stYWNrIGJpdHMgd2l0aCBvdXIgVHggd2luZG93IGJpdHMgKi8KIAlzaCA9IGFnZy0+c3RhcnRfaWR4IC0gU0VRX1RPX0lOREVYKHNlcV9jdGwgPj4gNCk7CkBAIC0xNDcyLDcgKzEzMjgsNyBAQAogCWJpdG1hcCA9IGxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCkgPj4gc2g7CiAKIAlpZiAoYWdnLT5mcmFtZV9jb3VudCA+ICg2NCAtIHNoKSkgewotCQlJV0xfREVCVUdfVFhfUkVQTFkoIm1vcmUgZnJhbWVzIHRoYW4gYml0bWFwIHNpemUiKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE0ODUsNyArMTM0MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGFnZy0+ZnJhbWVfY291bnQgOyBpKyspIHsKIAkJYWNrID0gYml0bWFwICYgKDFVTEwgPDwgaSk7CiAJCXN1Y2Nlc3NlcyArPSAhIWFjazsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCIlcyBPTiBpPSVkIGlkeD0lZCByYXc9JWRcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiJXMgT04gaT0lZCBpZHg9JWQgcmF3PSVkXG4iLAogCQkJYWNrID8gIkFDSyIgOiAiTkFDSyIsIGksIChhZ2ctPnN0YXJ0X2lkeCArIGkpICYgMHhmZiwKIAkJCWFnZy0+c3RhcnRfaWR4ICsgaSk7CiAJfQpAQCAtMTQ5OCw3ICsxMzU0LDcgQEAKIAlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7CiAJaXdsX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGFnZy0+cmF0ZV9uX2ZsYWdzLCBpbmZvKTsKIAotCUlXTF9ERUJVR19UWF9SRVBMWSgiQml0bWFwICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYml0bWFwKTsKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkJpdG1hcCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MjgsNyArMTM4NCw4IEBACiAJdTE2IGJhX3Jlc3Bfc2NkX3NzbiA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNjZF9zc24pOwogCiAJaWYgKHNjZF9mbG93ID49IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSkgewotCQlJV0xfRVJST1IoIkJVR19PTiBzY2RfZmxvdyBpcyBiaWdnZXIgdGhhbiBudW1iZXIgb2YgcXVldWVzXG4iKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkJVR19PTiBzY2RfZmxvdyBpcyBiaWdnZXIgdGhhbiBudW1iZXIgb2YgcXVldWVzXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU0MiwxOSArMTM5OSwxOSBAQAogCiAJLyogVE9ETzogTmVlZCB0byBnZXQgdGhpcyBjb3B5IG1vcmUgc2FmZWx5IC0gbm93IGdvb2QgZm9yIGRlYnVnICovCiAKLQlJV0xfREVCVUdfVFhfUkVQTFkoIlJFUExZX0NPTVBSRVNTRURfQkEgWyVkXSBSZWNlaXZlZCBmcm9tICVwTSwgIgorCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUkVQTFlfQ09NUFJFU1NFRF9CQSBbJWRdIFJlY2VpdmVkIGZyb20gJXBNLCAiCiAJCQkgICAic3RhX2lkID0gJWRcbiIsCiAJCQkgICBhZ2ctPndhaXRfZm9yX2JhLAogCQkJICAgKHU4ICopICZiYV9yZXNwLT5zdGFfYWRkcl9sbzMyLAogCQkJICAgYmFfcmVzcC0+c3RhX2lkKTsKLQlJV0xfREVCVUdfVFhfUkVQTFkoIlRJRCA9ICVkLCBTZXFDdGwgPSAlZCwgYml0bWFwID0gMHglbGx4LCBzY2RfZmxvdyA9ICIKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlRJRCA9ICVkLCBTZXFDdGwgPSAlZCwgYml0bWFwID0gMHglbGx4LCBzY2RfZmxvdyA9ICIKIAkJCSAgICIlZCwgc2NkX3NzbiA9ICVkXG4iLAogCQkJICAgYmFfcmVzcC0+dGlkLAogCQkJICAgYmFfcmVzcC0+c2VxX2N0bCwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoYmFfcmVzcC0+Yml0bWFwKSwKIAkJCSAgIGJhX3Jlc3AtPnNjZF9mbG93LAogCQkJICAgYmFfcmVzcC0+c2NkX3Nzbik7Ci0JSVdMX0RFQlVHX1RYX1JFUExZKCJEQVQgc3RhcnRfaWR4ID0gJWQsIGJpdG1hcCA9IDB4JWxseCBcbiIsCisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJEQVQgc3RhcnRfaWR4ID0gJWQsIGJpdG1hcCA9IDB4JWxseCBcbiIsCiAJCQkgICBhZ2ctPnN0YXJ0X2lkeCwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCA1N2RkMzRlLi40NDY1MzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTQ2LDQwICs0NiwyNSBAQAogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKLSNpbmNsdWRlICJpd2wtMzk0NS1jb3JlLmgiCisjZGVmaW5lIERSVl9OQU1FCSJpd2wzOTQ1IgorCisjaW5jbHVkZSAiaXdsLWZoLmgiCisjaW5jbHVkZSAiaXdsLTM5NDUtZmguaCIKKyNpbmNsdWRlICJpd2wtY29tbWFuZHMuaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXUzMiBpd2wzOTQ1X2RlYnVnX2xldmVsOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIG1vZHVsZSBib2lsZXIgcGxhdGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBtb2R1bGUgcGFyYW1ldGVycyAqLwotc3RhdGljIGludCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbjsgLyogZGVmOiAwID0gdXNlIDM5NDUncyBoL3cgc2NhbiAqLwotc3RhdGljIHUzMiBpd2wzOTQ1X3BhcmFtX2RlYnVnOyAgICAvKiBkZWY6IDAgPSBtaW5pbWFsIGRlYnVnIGxvZyBtZXNzYWdlcyAqLwotc3RhdGljIGludCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGU7ICAvKiBkZWY6IDAgPSBlbmFibGUgcmFkaW8gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9wYXJhbV9hbnRlbm5hOyAgLyogZGVmOiAwID0gYm90aCBhbnRlbm5hcyAodXNlIGRpdmVyc2l0eSkgKi8KLWludCBpd2wzOTQ1X3BhcmFtX2h3Y3J5cHRvOyAgICAgICAgLyogZGVmOiAwID0gdXNlIHNvZnR3YXJlIGVuY3J5cHRpb24gKi8KLWludCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPSBJV0wzOV9NQVhfTlVNX1FVRVVFUzsgLyogZGVmOiA4IFR4IHF1ZXVlcyAqLworI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAvKgogICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgotICogTk9URTogRFJWX05BTUUgaXMgZGVmaW5lZCBpbiBpd2x3aWZpLmggZm9yIHVzZSBieSBpd2wtZGVidWcuaCBhbmQgcHJpbnRrCiAgKi8KIAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JXAogIkludGVsKFIpIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbiBkcml2ZXIgZm9yIExpbnV4IgogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogI2RlZmluZSBWRCAiZCIKICNlbHNlCiAjZGVmaW5lIFZECkBAIC05MSwxMCArNzYsMTAgQEAKICNkZWZpbmUgVlMKICNlbmRpZgogCi0jZGVmaW5lIElXTFdJRklfVkVSU0lPTiAiMS4yLjI2ayIgVkQgVlMKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgSVdMMzlfVkVSU0lPTiAiMS4yLjI2ayIgVkQgVlMKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTFdJRklfVkVSU0lPTgorI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgSVdMMzlfVkVSU0lPTgogCiAKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpAQCAtMTAyLDIzNSArODcsMTMgQEAKIE1PRFVMRV9BVVRIT1IoRFJWX0NPUFlSSUdIVCAiICIgRFJWX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICppd2wzOTQ1X2dldF9iYW5kKAotCQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JcmV0dXJuIHByaXYtPmh3LT53aXBoeS0+YmFuZHNbYmFuZF07Ci19Ci0KLS8qKioqKioqKioqKioqKiogRE1BLVFVRVVFLUdFTkVSQUwtRlVOQ1RJT05TICAqKioqKgotICogRE1BIHNlcnZpY2VzCi0gKgotICogVGhlb3J5IG9mIG9wZXJhdGlvbgotICoKLSAqIEEgVHggb3IgUnggcXVldWUgcmVzaWRlcyBpbiBob3N0IERSQU0sIGFuZCBpcyBjb21wcmlzZWQgb2YgYSBjaXJjdWxhciBidWZmZXIKLSAqIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycywgZWFjaCBvZiB3aGljaCBwb2ludHMgdG8gb25lIG9yIG1vcmUgZGF0YSBidWZmZXJzIGZvcgotICogdGhlIGRldmljZSB0byByZWFkIGZyb20gb3IgZmlsbC4gIERyaXZlciBhbmQgZGV2aWNlIGV4Y2hhbmdlIHN0YXR1cyBvZiBlYWNoCi0gKiBxdWV1ZSB2aWEgInJlYWQiIGFuZCAid3JpdGUiIHBvaW50ZXJzLiAgRHJpdmVyIGtlZXBzIG1pbmltdW0gb2YgMiBlbXB0eQotICogZW50cmllcyBpbiBlYWNoIGNpcmN1bGFyIGJ1ZmZlciwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmZ1c2luZyBlbXB0eSBhbmQgZnVsbAotICogcXVldWUgc3RhdGVzLgotICoKLSAqIFRoZSBkZXZpY2UgcmVhZHMgb3Igd3JpdGVzIHRoZSBkYXRhIGluIHRoZSBxdWV1ZXMgdmlhIHRoZSBkZXZpY2UncyBzZXZlcmFsCi0gKiBETUEvRklGTyBjaGFubmVscy4gIEVhY2ggcXVldWUgaXMgbWFwcGVkIHRvIGEgc2luZ2xlIERNQSBjaGFubmVsLgotICoKLSAqIEZvciBUeCBxdWV1ZSwgdGhlcmUgYXJlIGxvdyBtYXJrIGFuZCBoaWdoIG1hcmsgbGltaXRzLiBJZiwgYWZ0ZXIgcXVldWluZwotICogdGhlIHBhY2tldCBmb3IgVHgsIGZyZWUgc3BhY2UgYmVjb21lIDwgbG93IG1hcmssIFR4IHF1ZXVlIHN0b3BwZWQuIFdoZW4KLSAqIHJlY2xhaW1pbmcgcGFja2V0cyAob24gJ3R4IGRvbmUgSVJRKSwgaWYgZnJlZSBzcGFjZSBiZWNvbWUgPiBoaWdoIG1hcmssCi0gKiBUeCBxdWV1ZSByZXN1bWVkLgotICoKLSAqIFRoZSAzOTQ1IG9wZXJhdGVzIHdpdGggc2l4IHF1ZXVlczogIE9uZSByZWNlaXZlIHF1ZXVlLCBvbmUgdHJhbnNtaXQgcXVldWUKLSAqICgjNCkgZm9yIHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIGRldmljZSBmaXJtd2FyZSwgYW5kIGZvdXIgdHJhbnNtaXQgcXVldWVzCi0gKiAoIzAtMykgZm9yIGRhdGEgdHggdmlhIEVEQ0EuICBBbiBhZGRpdGlvbmFsIDIgSENDQSBxdWV1ZXMgYXJlIHVudXNlZC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBpd2wzOTQ1X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxKQotewotCWludCBzID0gcS0+cmVhZF9wdHIgLSBxLT53cml0ZV9wdHI7Ci0KLQlpZiAocS0+cmVhZF9wdHIgPiBxLT53cml0ZV9wdHIpCi0JCXMgLT0gcS0+bl9iZDsKLQotCWlmIChzIDw9IDApCi0JCXMgKz0gcS0+bl93aW5kb3c7Ci0JLyoga2VlcCBzb21lIHJlc2VydmUgdG8gbm90IGNvbmZ1c2UgZW1wdHkgYW5kIGZ1bGwgc2l0dWF0aW9ucyAqLwotCXMgLT0gMjsKLQlpZiAocyA8IDApCi0JCXMgPSAwOwotCXJldHVybiBzOwotfQotCi1pbnQgaXdsMzk0NV94Ml9xdWV1ZV91c2VkKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCBpbnQgaSkKLXsKLQlyZXR1cm4gcS0+d3JpdGVfcHRyID4gcS0+cmVhZF9wdHIgPwotCQkoaSA+PSBxLT5yZWFkX3B0ciAmJiBpIDwgcS0+d3JpdGVfcHRyKSA6Ci0JCSEoaSA8IHEtPnJlYWRfcHRyICYmIGkgPj0gcS0+d3JpdGVfcHRyKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHU4IGdldF9jbWRfaW5kZXgoc3RydWN0IGl3bDM5NDVfcXVldWUgKnEsIHUzMiBpbmRleCwgaW50IGlzX2h1Z2UpCi17Ci0JLyogVGhpcyBpcyBmb3Igc2NhbiBjb21tYW5kLCB0aGUgYmlnIGJ1ZmZlciBhdCBlbmQgb2YgY29tbWFuZCBhcnJheSAqLwotCWlmIChpc19odWdlKQotCQlyZXR1cm4gcS0+bl93aW5kb3c7CS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwotCi0JLyogT3RoZXJ3aXNlLCB1c2Ugbm9ybWFsIHNpemUgYnVmZmVycyAqLwotCXJldHVybiBpbmRleCAmIChxLT5uX3dpbmRvdyAtIDEpOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcXVldWVfaW5pdCAtIEluaXRpYWxpemUgcXVldWUncyBoaWdoL2xvdy13YXRlciBhbmQgcmVhZC93cml0ZSBpbmRleGVzCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLAotCQkJICBpbnQgY291bnQsIGludCBzbG90c19udW0sIHUzMiBpZCkKLXsKLQlxLT5uX2JkID0gY291bnQ7Ci0JcS0+bl93aW5kb3cgPSBzbG90c19udW07Ci0JcS0+aWQgPSBpZDsKLQotCS8qIGNvdW50IG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZSBpd2xfcXVldWVfaW5jX3dyYXAKLQkgKiBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCi0JQlVHX09OKCFpc19wb3dlcl9vZl8yKGNvdW50KSk7Ci0KLQkvKiBzbG90c19udW0gbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlCi0JICogZ2V0X2NtZF9pbmRleCBpcyBicm9rZW4uICovCi0JQlVHX09OKCFpc19wb3dlcl9vZl8yKHNsb3RzX251bSkpOwotCi0JcS0+bG93X21hcmsgPSBxLT5uX3dpbmRvdyAvIDQ7Ci0JaWYgKHEtPmxvd19tYXJrIDwgNCkKLQkJcS0+bG93X21hcmsgPSA0OwotCi0JcS0+aGlnaF9tYXJrID0gcS0+bl93aW5kb3cgLyA4OwotCWlmIChxLT5oaWdoX21hcmsgPCAyKQotCQlxLT5oaWdoX21hcmsgPSAyOwotCi0JcS0+d3JpdGVfcHRyID0gcS0+cmVhZF9wdHIgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyAtIEFsbG9jIGRyaXZlciBkYXRhIGFuZCBURkQgQ0IgZm9yIG9uZSBUeC9jbWQgcXVldWUKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxLCB1MzIgaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0KLQkvKiBEcml2ZXIgcHJpdmF0ZSBkYXRhLCBvbmx5IGZvciBUeCAobm90IGNvbW1hbmQpIHF1ZXVlcywKLQkgKiBub3Qgc2hhcmVkIHdpdGggZGV2aWNlLiAqLwotCWlmIChpZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQl0eHEtPnR4YiA9IGttYWxsb2Moc2l6ZW9mKHR4cS0+dHhiWzBdKSAqCi0JCQkJICAgVEZEX1FVRVVFX1NJWkVfTUFYLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0eHEtPnR4YikgewotCQkJSVdMX0VSUk9SKCJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgotCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9IGVsc2UKLQkJdHhxLT50eGIgPSBOVUxMOwotCi0JLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKLQkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LAotCQkJc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYLAotCQkJJnR4cS0+cS5kbWFfYWRkcik7Ci0KLQlpZiAoIXR4cS0+YmQpIHsKLQkJSVdMX0VSUk9SKCJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwKLQkJCSAgc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdHhxLT5xLmlkID0gaWQ7Ci0KLQlyZXR1cm4gMDsKLQotIGVycm9yOgotCWtmcmVlKHR4cS0+dHhiKTsKLQl0eHEtPnR4YiA9IE5VTEw7Ci0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgdHgvY21kIHF1ZXVlCi0gKi8KLWludCBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSwgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgbGVuOwotCWludCByYyA9IDA7Ci0KLQkvKgotCSAqIEFsbG9jIGJ1ZmZlciBhcnJheSBmb3IgY29tbWFuZHMgKFR4IG9yIG90aGVyIHR5cGVzIG9mIGNvbW1hbmRzKS4KLQkgKiBGb3IgdGhlIGNvbW1hbmQgcXVldWUgKCM0KSwgYWxsb2NhdGUgY29tbWFuZCBzcGFjZSArIG9uZSBiaWcKLQkgKiBjb21tYW5kIGZvciBzY2FuLCBzaW5jZSBzY2FuIGNvbW1hbmQgaXMgdmVyeSBodWdlOyB0aGUgc3lzdGVtIHdpbGwKLQkgKiBub3QgaGF2ZSB0d28gc2NhbnMgYXQgdGhlIHNhbWUgdGltZSwgc28gb25seSBvbmUgaXMgbmVlZGVkLgotCSAqIEZvciBkYXRhIFR4IHF1ZXVlcyAoYWxsIG90aGVyIHF1ZXVlcyksIG5vIHN1cGVyLXNpemUgY29tbWFuZAotCSAqIHNwYWNlIGlzIG5lZWRlZC4KLQkgKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAqIHNsb3RzX251bTsKLQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQotCQlsZW4gKz0gIElXTF9NQVhfU0NBTl9TSVpFOwotCXR4cS0+Y21kID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBsZW4sICZ0eHEtPmRtYV9hZGRyX2NtZCk7Ci0JaWYgKCF0eHEtPmNtZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBBbGxvYyBkcml2ZXIgZGF0YSBhcnJheSBhbmQgVEZEIGNpcmN1bGFyIGJ1ZmZlciAqLwotCXJjID0gaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyhwcml2LCB0eHEsIHR4cV9pZCk7Ci0JaWYgKHJjKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7Ci0KLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXR4cS0+bmVlZF91cGRhdGUgPSAwOwotCi0JLyogVEZEX1FVRVVFX1NJWkVfTUFYIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQotCSAqIGl3bF9xdWV1ZV9pbmNfd3JhcCBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCi0JQlVJTERfQlVHX09OKFRGRF9RVUVVRV9TSVpFX01BWCAmIChURkRfUVVFVUVfU0laRV9NQVggLSAxKSk7Ci0KLQkvKiBJbml0aWFsaXplIHF1ZXVlIGhpZ2gvbG93LXdhdGVyLCBoZWFkL3RhaWwgaW5kZXhlcyAqLwotCWl3bDM5NDVfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKLQotCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUsIGVuYWJsZSBETUEgY2hhbm5lbC4gKi8KLQlpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQocHJpdiwgdHhxKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgotICogQHR4cTogVHJhbnNtaXQgcXVldWUgdG8gZGVhbGxvY2F0ZS4KLSAqCi0gKiBFbXB0eSBxdWV1ZSBieSByZW1vdmluZyBhbmQgZGVzdHJveWluZyBhbGwgQkQncy4KLSAqIEZyZWUgYWxsIGJ1ZmZlcnMuCi0gKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLSAqLwotdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0JaW50IGxlbjsKLQotCWlmIChxLT5uX2JkID09IDApCi0JCXJldHVybjsKLQotCS8qIGZpcnN0LCBlbXB0eSBhbGwgQkQncyAqLwotCWZvciAoOyBxLT53cml0ZV9wdHIgIT0gcS0+cmVhZF9wdHI7Ci0JICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpCi0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7Ci0KLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAqIHEtPm5fd2luZG93OwotCWlmIChxLT5pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJbGVuICs9IElXTF9NQVhfU0NBTl9TSVpFOwotCi0JLyogRGUtYWxsb2MgYXJyYXkgb2YgY29tbWFuZC90eCBidWZmZXJzICovCi0JcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIGxlbiwgdHhxLT5jbWQsIHR4cS0+ZG1hX2FkZHJfY21kKTsKLQotCS8qIERlLWFsbG9jIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzICovCi0JaWYgKHR4cS0+cS5uX2JkKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZSkgKgotCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT5iZCwgdHhxLT5xLmRtYV9hZGRyKTsKLQotCS8qIERlLWFsbG9jIGFycmF5IG9mIHBlci1URkQgZHJpdmVyIGRhdGEgKi8KLQlrZnJlZSh0eHEtPnR4Yik7Ci0JdHhxLT50eGIgPSBOVUxMOwotCi0JLyogMC1maWxsIHF1ZXVlIGRlc2NyaXB0b3Igc3RydWN0dXJlICovCi0JbWVtc2V0KHR4cSwgMCwgc2l6ZW9mKCp0eHEpKTsKLX0KLQotY29uc3QgdTggaXdsMzk0NV9icm9hZGNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKKyAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDM5NDVfbW9kX3BhcmFtcyA9IHsKKwkubnVtX29mX3F1ZXVlcyA9IElXTDM5X01BWF9OVU1fUVVFVUVTLAorCS5zd19jcnlwdG8gPSAxLAorCS5yZXN0YXJ0X2Z3ID0gMSwKKwkvKiB0aGUgcmVzdCBhcmUgMCBieSBkZWZhdWx0ICovCit9OwogCiAvKioqKioqKioqKioqKioqIFNUQVRJT04gVEFCTEUgTUFOQUdFTUVOVCAqKioqCiAgKiBtYWM4MDIxMSBzaG91bGQgYmUgZXhhbWluZWQgdG8gZGV0ZXJtaW5lIGlmIHN0YV9pbmZvIGlzIGR1cGxpY2F0aW5nCkBAIC0zNDQsNyArMTA3LDcgQEAKICAqCiAgKiBOT1RFOiAgVGhpcyBkb2VzIG5vdCByZW1vdmUgc3RhdGlvbiBmcm9tIGRldmljZSdzIHN0YXRpb24gdGFibGUuCiAgKi8KLXN0YXRpYyB1OCBpd2wzOTQ1X3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApCitzdGF0aWMgdTggaXdsMzk0NV9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApCiB7CiAJaW50IGluZGV4ID0gSVdMX0lOVkFMSURfU1RBVElPTjsKIAlpbnQgaTsKQEAgLTM1NSwxMSArMTE4LDExIEBACiAJaWYgKGlzX2FwKQogCQlpbmRleCA9IElXTF9BUF9JRDsKIAllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJaW5kZXggPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJaW5kZXggPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCWVsc2UKLQkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3NldHRpbmcubWF4X3N0YXRpb25zOyBpKyspCi0JCQlpZiAocHJpdi0+c3RhdGlvbnNbaV0udXNlZCAmJgotCQkJICAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyLAorCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9uczsgaSsrKQorCQkJaWYgKHByaXYtPnN0YXRpb25zXzM5W2ldLnVzZWQgJiYKKwkJCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwKIAkJCQkJCWFkZHIpKSB7CiAJCQkJaW5kZXggPSBpOwogCQkJCWJyZWFrOwpAQCAtMzY4LDggKzEzMSw4IEBACiAJaWYgKHVubGlrZWx5KGluZGV4ID09IElXTF9JTlZBTElEX1NUQVRJT04pKQogCQlnb3RvIG91dDsKIAotCWlmIChwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCkgewotCQlwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCA9IDA7CisJaWYgKHByaXYtPnN0YXRpb25zXzM5W2luZGV4XS51c2VkKSB7CisJCXByaXYtPnN0YXRpb25zXzM5W2luZGV4XS51c2VkID0gMDsKIAkJcHJpdi0+bnVtX3N0YXRpb25zLS07CiAJfQogCkBAIC0zODYsMTQgKzE0OSwxNCBAQAogICoKICAqIE5PVEU6ICBUaGlzIGRvZXMgbm90IGNsZWFyIG9yIG90aGVyd2lzZSBhbHRlciB0aGUgZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZS4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+bnVtX3N0YXRpb25zID0gMDsKLQltZW1zZXQocHJpdi0+c3RhdGlvbnMsIDAsIHNpemVvZihwcml2LT5zdGF0aW9ucykpOworCW1lbXNldChwcml2LT5zdGF0aW9uc18zOSwgMCwgc2l6ZW9mKHByaXYtPnN0YXRpb25zXzM5KSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQpAQCAtNDAxLDcgKzE2NCw3IEBACiAvKioKICAqIGl3bDM5NDVfYWRkX3N0YXRpb24gLSBBZGQgc3RhdGlvbiB0byBzdGF0aW9uIHRhYmxlcyBpbiBkcml2ZXIgYW5kIGRldmljZQogICovCi11OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXAsIHU4IGZsYWdzKQordTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXAsIHU4IGZsYWdzKQogewogCWludCBpOwogCWludCBpbmRleCA9IElXTF9JTlZBTElEX1NUQVRJT047CkBAIC00MTMsMTYgKzE3NiwxNiBAQAogCWlmIChpc19hcCkKIAkJaW5kZXggPSBJV0xfQVBfSUQ7CiAJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCWluZGV4ID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWluZGV4ID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAllbHNlCi0JCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKSB7Ci0JCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCisJCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspIHsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwKIAkJCQkJCWFkZHIpKSB7CiAJCQkJaW5kZXggPSBpOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIXByaXYtPnN0YXRpb25zW2ldLnVzZWQgJiYKKwkJCWlmICghcHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCAmJgogCQkJICAgIGluZGV4ID09IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQkJaW5kZXggPSBpOwogCQl9CkBAIC00MzQsMTQgKzE5NywxNCBAQAogCQlyZXR1cm4gaW5kZXg7CiAJfQogCi0JaWYgKHByaXYtPnN0YXRpb25zW2luZGV4XS51c2VkICYmCi0JICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpbmRleF0uc3RhLnN0YS5hZGRyLCBhZGRyKSkgeworCWlmIChwcml2LT5zdGF0aW9uc18zOVtpbmRleF0udXNlZCAmJgorCSAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdLnN0YS5zdGEuYWRkciwgYWRkcikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOwogCQlyZXR1cm4gaW5kZXg7CiAJfQogCi0JSVdMX0RFQlVHX0FTU09DKCJBZGQgU1RBIElEICVkOiAlcE1cbiIsIGluZGV4LCBhZGRyKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW2luZGV4XTsKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZCBTVEEgSUQgJWQ6ICVwTVxuIiwgaW5kZXgsIGFkZHIpOworCXN0YXRpb24gPSAmcHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdOwogCXN0YXRpb24tPnVzZWQgPSAxOwogCXByaXYtPm51bV9zdGF0aW9ucysrOwogCkBAIC00NjAsNTMxICsyMjMsMzUgQEAKIAkvKiBUdXJuIG9uIGJvdGggYW50ZW5uYXMgZm9yIHRoZSBzdGF0aW9uLi4uICovCiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9CiAJCQlpd2wzOTQ1X2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZSwgUkFURV9NQ1NfQU5UX0FCX01TSyk7Ci0Jc3RhdGlvbi0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyA9Ci0JCQlsZTE2X3RvX2NwdShzdGF0aW9uLT5zdGEucmF0ZV9uX2ZsYWdzKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAogCS8qIEFkZCBzdGF0aW9uIHRvIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOwogCXJldHVybiBpbmRleDsKIAogfQogCi0vKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmVhZHkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQkvKiBUaGUgYWRhcHRlciBpcyAncmVhZHknIGlmIFJFQURZIGFuZCBHRU9fQ09ORklHVVJFRCBiaXRzIGFyZQotCSAqIHNldCBidXQgRVhJVF9QRU5ESU5HIGlzIG5vdCAqLwotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpICYmCi0JICAgICAgIHRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgJiYKLQkgICAgICAgIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2FsaXZlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmZraWxsX3N3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZmtpbGxfaHcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3Jma2lsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiBpd2wzOTQ1X2lzX3Jma2lsbF9odyhwcml2KSB8fAotCQlpd2wzOTQ1X2lzX3Jma2lsbF9zdyhwcml2KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZWFkeV9yZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpd2wzOTQ1X2lzX3JlYWR5KHByaXYpOwotfQotCi0vKioqKioqKioqKioqKioqIEhPU1QgQ09NTUFORCBRVUVVRSBGVU5DVElPTlMgICAqKioqKi8KLQotI2RlZmluZSBJV0xfQ01EKHgpIGNhc2UgeDogcmV0dXJuICN4Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfY21kX3N0cmluZyh1OCBjbWQpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQkJSVdMX0NNRChSRVBMWV9BTElWRSk7Ci0JCUlXTF9DTUQoUkVQTFlfRVJST1IpOwotCQlJV0xfQ01EKFJFUExZX1JYT04pOwotCQlJV0xfQ01EKFJFUExZX1JYT05fQVNTT0MpOwotCQlJV0xfQ01EKFJFUExZX1FPU19QQVJBTSk7Ci0JCUlXTF9DTUQoUkVQTFlfUlhPTl9USU1JTkcpOwotCQlJV0xfQ01EKFJFUExZX0FERF9TVEEpOwotCQlJV0xfQ01EKFJFUExZX1JFTU9WRV9TVEEpOwotCQlJV0xfQ01EKFJFUExZX1JFTU9WRV9BTExfU1RBKTsKLQkJSVdMX0NNRChSRVBMWV8zOTQ1X1JYKTsKLQkJSVdMX0NNRChSRVBMWV9UWCk7Ci0JCUlXTF9DTUQoUkVQTFlfUkFURV9TQ0FMRSk7Ci0JCUlXTF9DTUQoUkVQTFlfTEVEU19DTUQpOwotCQlJV0xfQ01EKFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQpOwotCQlJV0xfQ01EKFJBREFSX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfUVVJRVRfQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9DSEFOTkVMX1NXSVRDSCk7Ci0JCUlXTF9DTUQoQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQpOwotCQlJV0xfQ01EKFNQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChQT1dFUl9UQUJMRV9DTUQpOwotCQlJV0xfQ01EKFBNX1NMRUVQX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUE1fREVCVUdfU1RBVElTVElDX05PVElGSUMpOwotCQlJV0xfQ01EKFJFUExZX1NDQU5fQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9TQ0FOX0FCT1JUX0NNRCk7Ci0JCUlXTF9DTUQoU0NBTl9TVEFSVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChCRUFDT05fTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9UWF9CRUFDT04pOwotCQlJV0xfQ01EKFdIT19JU19BV0FLRV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFFVSUVUX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCk7Ci0JCUlXTF9DTUQoTUVBU1VSRV9BQk9SVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX0JUX0NPTkZJRyk7Ci0JCUlXTF9DTUQoUkVQTFlfU1RBVElTVElDU19DTUQpOwotCQlJV0xfQ01EKFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9DQVJEX1NUQVRFX0NNRCk7Ci0JCUlXTF9DTUQoQ0FSRF9TVEFURV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKE1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJVTktOT1dOIjsKLQotCX0KLX0KLQotI2RlZmluZSBIT1NUX0NPTVBMRVRFX1RJTUVPVVQgKEhaIC8gMikKLQotLyoqCi0gKiBpd2wzOTQ1X2VucXVldWVfaGNtZCAtIGVucXVldWUgYSB1Q29kZSBjb21tYW5kCi0gKiBAcHJpdjogZGV2aWNlIHByaXZhdGUgZGF0YSBwb2ludAotICogQGNtZDogYSBwb2ludCB0byB0aGUgdWNvZGUgY29tbWFuZCBzdHJ1Y3R1cmUKLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyA8IDAgdmFsdWVzIHRvIGluZGljYXRlIHRoZSBvcGVyYXRpb24gaXMKLSAqIGZhaWxlZC4gT24gc3VjY2VzcywgaXQgdHVybnMgdGhlIGluZGV4ICg+IDApIG9mIGNvbW1hbmQgaW4gdGhlCi0gKiBjb21tYW5kIHF1ZXVlLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfZW5xdWV1ZV9oY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKnRmZDsKLQl1MzIgKmNvbnRyb2xfZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfY21kICpvdXRfY21kOwotCXUzMiBpZHg7Ci0JdTE2IGZpeF9zaXplID0gKHUxNikoY21kLT5sZW4gKyBzaXplb2Yob3V0X2NtZC0+aGRyKSk7Ci0JZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci0JaW50IHBhZDsKLQl1MTYgY291bnQ7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCi0JICogdGhlIFRGRF9NQVhfUEFZTE9BRF9TSVpFLCBhbmQgaXQgc2VudCBhcyBhICdzbWFsbCcgY29tbWFuZCB0aGVuCi0JICogd2Ugd2lsbCBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBURkQgZW50cmllcyAqLwotCUJVR19PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKLQkgICAgICAgIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7Ci0KLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTygiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGl3bDM5NDVfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7Ci0KLQl0ZmQgPSAmdHhxLT5iZFtxLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KLQljb250cm9sX2ZsYWdzID0gKHUzMiAqKSB0ZmQ7Ci0KLQlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSk7Ci0Jb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOwotCi0Jb3V0X2NtZC0+aGRyLmNtZCA9IGNtZC0+aWQ7Ci0JbWVtY3B5KCZvdXRfY21kLT5tZXRhLCAmY21kLT5tZXRhLCBzaXplb2YoY21kLT5tZXRhKSk7Ci0JbWVtY3B5KCZvdXRfY21kLT5jbWQucGF5bG9hZCwgY21kLT5kYXRhLCBjbWQtPmxlbik7Ci0KLQkvKiBBdCB0aGlzIHBvaW50LCB0aGUgb3V0X2NtZCBub3cgaGFzIGFsbCBvZiB0aGUgaW5jb21pbmcgY21kCi0JICogaW5mb3JtYXRpb24gKi8KLQotCW91dF9jbWQtPmhkci5mbGFncyA9IDA7Ci0Jb3V0X2NtZC0+aGRyLnNlcXVlbmNlID0gY3B1X3RvX2xlMTYoUVVFVUVfVE9fU0VRKElXTF9DTURfUVVFVUVfTlVNKSB8Ci0JCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSk7Ci0JaWYgKG91dF9jbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKQotCQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgfD0gY3B1X3RvX2xlMTYoU0VRX0hVR0VfRlJBTUUpOwotCi0JcGh5c19hZGRyID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2YodHhxLT5jbWRbMF0pICogaWR4ICsKLQkJCW9mZnNldG9mKHN0cnVjdCBpd2wzOTQ1X2NtZCwgaGRyKTsKLQlpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHBoeXNfYWRkciwgZml4X3NpemUpOwotCi0JcGFkID0gVTMyX1BBRChjbWQtPmxlbik7Ci0JY291bnQgPSBURkRfQ1RMX0NPVU5UX0dFVCgqY29udHJvbF9mbGFncyk7Ci0JKmNvbnRyb2xfZmxhZ3MgPSBURkRfQ1RMX0NPVU5UX1NFVChjb3VudCkgfCBURkRfQ1RMX1BBRF9TRVQocGFkKTsKLQotCUlXTF9ERUJVR19IQygiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgotCQkgICAgICIlZCBieXRlcyBhdCAlZFslZF06JWRcbiIsCi0JCSAgICAgZ2V0X2NtZF9zdHJpbmcob3V0X2NtZC0+aGRyLmNtZCksCi0JCSAgICAgb3V0X2NtZC0+aGRyLmNtZCwgbGUxNl90b19jcHUob3V0X2NtZC0+aGRyLnNlcXVlbmNlKSwKLQkJICAgICBmaXhfc2l6ZSwgcS0+d3JpdGVfcHRyLCBpZHgsIElXTF9DTURfUVVFVUVfTlVNKTsKLQotCXR4cS0+bmVlZF91cGRhdGUgPSAxOwotCi0JLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwotCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwotCXJldCA9IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldCA/IHJldCA6IGlkeDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfY21kX2FzeW5jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0JaW50IHJldDsKLQotCUJVR19PTighKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykpOwotCi0JLyogQW4gYXN5bmNocm9ub3VzIGNvbW1hbmQgY2FuIG5vdCBleHBlY3QgYW4gU0tCIHRvIGJlIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKTsKLQotCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIE1VU1QgaGF2ZSBhIGNhbGxiYWNrLiAqLwotCUJVR19PTighY21kLT5tZXRhLnUuY2FsbGJhY2spOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0ID0gaXdsMzk0NV9lbnF1ZXVlX2hjbWQocHJpdiwgY21kKTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGl3bDM5NDVfZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfY21kX3N5bmMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgKmNtZCkKLXsKLQlpbnQgY21kX2lkeDsKLQlpbnQgcmV0OwotCi0JQlVHX09OKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQyk7Ci0KLQkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzZXRfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKQotCQljbWQtPm1ldGEuc291cmNlID0gJmNtZC0+bWV0YTsKLQotCWNtZF9pZHggPSBpd2wzOTQ1X2VucXVldWVfaGNtZChwcml2LCBjbWQpOwotCWlmIChjbWRfaWR4IDwgMCkgewotCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGl3bDM5NDVfZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCi0JCQkhdGVzdF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSwKLQkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7Ci0JaWYgKCFyZXQpIHsKLQkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7Ci0KLQkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gY2FuY2VsOwotCQl9Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKLQkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FQ0FOQ0VMRUQ7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvbW1hbmQgJXMgZmFpbGVkOiBGVyBFcnJvclxuIiwKLQkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JaWYgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPm1ldGEudS5za2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAnJXMnXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gY2FuY2VsOwotCX0KLQotCXJldCA9IDA7Ci0JZ290byBvdXQ7Ci0KLWNhbmNlbDoKLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCXN0cnVjdCBpd2wzOTQ1X2NtZCAqcWNtZDsKLQotCQkvKiBDYW5jZWwgdGhlIENNRF9XQU5UX1NLQiBmbGFnIGZvciB0aGUgY21kIGluIHRoZQotCQkgKiBUWCBjbWQgcXVldWUuIE90aGVyd2lzZSBpbiBjYXNlIHRoZSBjbWQgY29tZXMKLQkJICogaW4gbGF0ZXIsIGl0IHdpbGwgcG9zc2libHkgc2V0IGFuIGludmFsaWQKLQkJICogYWRkcmVzcyAoY21kLT5tZXRhLnNvdXJjZSkuICovCi0JCXFjbWQgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5jbWRbY21kX2lkeF07Ci0JCXFjbWQtPm1ldGEuZmxhZ3MgJj0gfkNNRF9XQU5UX1NLQjsKLQl9Ci1mYWlsOgotCWlmIChjbWQtPm1ldGEudS5za2IpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kLT5tZXRhLnUuc2tiKTsKLQkJY21kLT5tZXRhLnUuc2tiID0gTlVMTDsKLQl9Ci1vdXQ6Ci0JY2xlYXJfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKQotewotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpCi0JCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX2FzeW5jKHByaXYsIGNtZCk7Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsIGNtZCk7Ci19Ci0KLWludCBpd2wzOTQ1X3NlbmRfY21kX3BkdShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IGlkLAotCQkubGVuID0gbGVuLAotCQkuZGF0YSA9IGRhdGEsCi0JfTsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGl3bDM5NDVfc2VuZF9jbWRfdTMyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IGlkLCB1MzIgdmFsKQotewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gaWQsCi0JCS5sZW4gPSBzaXplb2YodmFsKSwKLQkJLmRhdGEgPSAmdmFsLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3UzMihwcml2LCBSRVBMWV9TVEFUSVNUSUNTX0NNRCwgMCk7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsIC0gU2V0IHRoZSBwaHltb2RlIGFuZCBjaGFubmVsIHZhbHVlcyBpbiBzdGFnaW5nIFJYT04KLSAqIEBiYW5kOiAyLjQgb3IgNSBHSHogYmFuZAotICogQGNoYW5uZWw6IEFueSBjaGFubmVsIHZhbGlkIGZvciB0aGUgcmVxdWVzdGVkIGJhbmQKLQotICogSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgc3RhZ2luZyBSWE9OLCBwcml2LT5iYW5kIGlzIGFsc28gc2V0LgotICoKLSAqIE5PVEU6ICBEb2VzIG5vdCBjb21taXQgdG8gdGhlIGhhcmR3YXJlOyBpdCBzZXRzIGFwcHJvcHJpYXRlIGJpdCBmaWVsZHMKLSAqIGluIHRoZSBzdGFnaW5nIFJYT04gZmxhZyBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIGJhbmQKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCSAgICB1MTYgY2hhbm5lbCkKLXsKLQlpZiAoIWl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCi0JCQkgICAgICAgY2hhbm5lbCwgYmFuZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpID09IGNoYW5uZWwpICYmCi0JICAgIChwcml2LT5iYW5kID09IGJhbmQpKQotCQlyZXR1cm4gMDsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbm5lbCk7Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19CQU5EXzI0R19NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOwotCi0JcHJpdi0+YmFuZCA9IGJhbmQ7Ci0KLQlJV0xfREVCVUdfSU5GTygiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQgLSB2YWxpZGF0ZSBSWE9OIHN0cnVjdHVyZSBpcyB2YWxpZAotICoKLSAqIE5PVEU6ICBUaGlzIGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgYW5kIGNhbiBldmVudHVhbGx5Ci0gKiBiZSAjaWZkZWYnZCBvdXQgb25jZSB0aGUgZHJpdmVyIGlzIHN0YWJsZSBhbmQgZm9sa3MgYXJlbid0IGFjdGl2ZWx5Ci0gKiBtYWtpbmcgY2hhbmdlcwotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnJ4b24pCi17Ci0JaW50IGVycm9yID0gMDsKLQlpbnQgY291bnRlciA9IDE7Ci0KLQlpZiAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJgotCQkJCShSWE9OX0ZMR19UR0pfTkFSUk9XX0JBTkRfTVNLIHwKLQkJCQkgUlhPTl9GTEdfUkFEQVJfREVURUNUX01TSykpOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgMjRHIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9IGVsc2UgewotCQllcnJvciB8PSAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykgPwotCQkJCTAgOiBsZTMyX3RvX2NwdShSWE9OX0ZMR19TSE9SVF9TTE9UX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBmaWVsZHMgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBDQ0sgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JfQotCWVycm9yIHw9IChyeG9uLT5ub2RlX2FkZHJbMF0gfCByeG9uLT5ic3NpZF9hZGRyWzBdKSAmIDB4MTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBtYWMgYWRkciAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCS8qIG1ha2Ugc3VyZSBiYXNpYyByYXRlcyA2TWJwcyBhbmQgMU1icHMgYXJlIHN1cHBvcnRlZCAqLwotCWVycm9yIHw9ICgoKHJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV82TV9NQVNLKSA9PSAwKSAmJgotCQkgICgocnhvbi0+Y2NrX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfMU1fTUFTSykgPT0gMCkpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGJhc2ljIHJhdGUgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAobGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpID4gMjAwNyk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYXNzb2MgaWQgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgQ0NLIGFuZCBzaG9ydCBzbG90ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKQotCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgJiBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgfAotCQkJUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKSkgPT0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBUR0cgYW5kIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfRElTX0RJVl9NU0spKQotCQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FOVF9CX01TSyB8Ci0JCQkJUlhPTl9GTEdfQU5UX0FfTVNLKSkgPT0gMCk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYW50ZW5uYSAlZCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJUdW5pbmcgdG8gY2hhbm5lbCAlZFxuIiwKLQkJCSAgICBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0KLQlpZiAoZXJyb3IpIHsKLQkJSVdMX0VSUk9SKCJOb3QgYSB2YWxpZCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIGZpZWxkIHZhbHVlc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKLSAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KLSAqCi0gKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKLSAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAotICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KLQlpZiAoIShpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24uYnNzaWRfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ub2RlX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLndsYXBfYnNzaWRfYWRkcikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSAhPSBwcml2LT5hY3RpdmVfcnhvbi5kZXZfdHlwZSkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsICE9IHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYWlyX3Byb3BhZ2F0aW9uICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5haXJfcHJvcGFnYXRpb24pIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYXNzb2NfaWQgIT0gcHJpdi0+YWN0aXZlX3J4b24uYXNzb2NfaWQpKQotCQlyZXR1cm4gMTsKLQotCS8qIGZsYWdzLCBmaWx0ZXJfZmxhZ3MsIG9mZG1fYmFzaWNfcmF0ZXMsIGFuZCBjY2tfYmFzaWNfcmF0ZXMgY2FuCi0JICogYmUgdXBkYXRlZCB3aXRoIHRoZSBSWE9OX0FTU09DIGNvbW1hbmQgLS0gaG93ZXZlciBvbmx5IHNvbWUKLQkgKiBmbGFnIHRyYW5zaXRpb25zIGFyZSBhbGxvd2VkIHVzaW5nIFJYT05fQVNTT0MgKi8KLQotCS8qIENoZWNrIGlmIHdlIGFyZSBub3Qgc3dpdGNoaW5nIGJhbmRzICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spICE9Ci0JICAgIChwcml2LT5hY3RpdmVfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykpCi0JCXJldHVybiAxOwotCi0JLyogQ2hlY2sgaWYgd2UgYXJlIHN3aXRjaGluZyBhc3NvY2lhdGlvbiB0b2dnbGUgKi8KLQlpZiAoKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spICE9Ci0JCShwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfUlhPTl9BU1NPQywKIAkJLmxlbiA9IHNpemVvZihyeG9uX2Fzc29jKSwKIAkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCiAJCS5kYXRhID0gJnJ4b25fYXNzb2MsCiAJfTsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbjEgPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uMiA9ICZwcml2LT5hY3RpdmVfcnhvbjsKKwljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMSA9ICZwcml2LT5zdGFnaW5nX3J4b247CisJY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjIgPSAmcHJpdi0+YWN0aXZlX3J4b247CiAKIAlpZiAoKHJ4b24xLT5mbGFncyA9PSByeG9uMi0+ZmxhZ3MpICYmCiAJICAgIChyeG9uMS0+ZmlsdGVyX2ZsYWdzID09IHJ4b24yLT5maWx0ZXJfZmxhZ3MpICYmCiAJICAgIChyeG9uMS0+Y2NrX2Jhc2ljX3JhdGVzID09IHJ4b24yLT5jY2tfYmFzaWNfcmF0ZXMpICYmCiAJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05OTQsMTMgKzI2MSwxMyBAQAogCXJ4b25fYXNzb2MuY2NrX2Jhc2ljX3JhdGVzID0gcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlczsKIAlyeG9uX2Fzc29jLnJlc2VydmVkID0gMDsKIAotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYT05fQVNTT0MgY29tbWFuZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWE9OX0FTU09DIGNvbW1hbmRcbiIpOwogCQlyYyA9IC1FSU87CiAJfQogCkBAIC0xMDExLDYgKzI3OCw0MyBAQAogfQogCiAvKioKKyAqIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MgLSBHZXQgYW50ZW5uYSBmbGFncyBmb3IgUlhPTiBjb21tYW5kCisgKiBAcHJpdjogZWVwcm9tIGFuZCBhbnRlbm5hIGZpZWxkcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgYW50ZW5uYSBmbGFncworICoKKyAqIHByaXYtPmVlcHJvbTM5ICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAorICogaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEgc3BlY2lmaWVzIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBtb2RlOgorICoKKyAqIElXTF9BTlRFTk5BX0RJVkVSU0lUWSAtIE5JQyBzZWxlY3RzIGJlc3QgYW50ZW5uYSBieSBpdHNlbGYKKyAqIElXTF9BTlRFTk5BX01BSU4gICAgICAtIEZvcmNlIE1BSU4gYW50ZW5uYQorICogSVdMX0FOVEVOTkFfQVVYICAgICAgIC0gRm9yY2UgQVVYIGFudGVubmEKKyAqLworX19sZTMyIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKworCXN3aXRjaCAoaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEpIHsKKwljYXNlIElXTF9BTlRFTk5BX0RJVkVSU0lUWToKKwkJcmV0dXJuIDA7CisKKwljYXNlIElXTF9BTlRFTk5BX01BSU46CisJCWlmIChlZXByb20tPmFudGVubmFfc3dpdGNoX3R5cGUpCisJCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7CisJCXJldHVybiBSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9BX01TSzsKKworCWNhc2UgSVdMX0FOVEVOTkFfQVVYOgorCQlpZiAoZWVwcm9tLT5hbnRlbm5hX3N3aXRjaF90eXBlKQorCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOworCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7CisJfQorCisJLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KKwlJV0xfRVJSKHByaXYsICJCYWQgYW50ZW5uYSBzZWxlY3RvciB2YWx1ZSAoMHgleClcbiIsCisJCWl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hKTsKKworCXJldHVybiAwOwkJLyogImRpdmVyc2l0eSIgaXMgZGVmYXVsdCBpZiBlcnJvciAqLworfQorCisvKioKICAqIGl3bDM5NDVfY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCiAgKgogICogVGhlIFJYT04gY29tbWFuZCBpbiBzdGFnaW5nX3J4b24gaXMgY29tbWl0dGVkIHRvIHRoZSBoYXJkd2FyZSBhbmQKQEAgLTEwMTgsNDEgKzMyMiw0NCBAQAogICogZnVuY3Rpb24gY29ycmVjdGx5IHRyYW5zaXRpb25zIG91dCBvZiB0aGUgUlhPTl9BU1NPQ19NU0sgc3RhdGUgaWYKICAqIGEgSFcgdHVuZSBpcyByZXF1aXJlZCBiYXNlZCBvbiB0aGUgUlhPTiBzdHJ1Y3R1cmUgY2hhbmdlcy4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2NvbW1pdF9yeG9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIGNhc3QgYXdheSB0aGUgY29uc3QgZm9yIGFjdGl2ZV9yeG9uIGluIHRoaXMgZnVuY3Rpb24gKi8KIAlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqYWN0aXZlX3J4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqc3RhZ2luZ19yeG9uID0gKHZvaWQgKikmcHJpdi0+c3RhZ2luZ19yeG9uOwogCWludCByYyA9IDA7CisJYm9vbCBuZXdfYXNzb2MgPQorCQkhIShwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKTsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC0xOwogCiAJLyogYWx3YXlzIGdldCB0aW1lc3RhbXAgd2l0aCBSeCBmcmFtZSAqLwotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7CisJc3RhZ2luZ19yeG9uLT5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7CiAKIAkvKiBzZWxlY3QgYW50ZW5uYSAqLwotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQorCXN0YWdpbmdfcnhvbi0+ZmxhZ3MgJj0KIAkgICAgfihSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9TRUxfTVNLKTsKLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhwcml2KTsKKwlzdGFnaW5nX3J4b24tPmZsYWdzIHw9IGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MocHJpdik7CiAKLQlyYyA9IGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQoJnByaXYtPnN0YWdpbmdfcnhvbik7CisJcmMgPSBpd2xfY2hlY2tfcnhvbl9jbWQocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIFJYT04gY29uZmlndXJhdGlvbi4gIE5vdCBjb21taXR0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIElmIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBhIGZ1bGwgUlhPTiwgd2UgY2FuIHVzZQogCSAqIGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgd2hpY2ggaXMgdXNlZCB0byByZWNvbmZpZ3VyZSBmaWx0ZXIKIAkgKiBhbmQgb3RoZXIgZmxhZ3MgZm9yIHRoZSBjdXJyZW50IHJhZGlvIGNvbmZpZ3VyYXRpb24uICovCi0JaWYgKCFpd2wzOTQ1X2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgeworCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgewogCQlyYyA9IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICIKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAiCiAJCQkJICAiY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAKLQkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJCW1lbWNweShhY3RpdmVfcnhvbiwgc3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA2MSwxMiArMzY4LDE3IEBACiAJICogYW4gUlhPTl9BU1NPQyBhbmQgdGhlIG5ldyBjb25maWcgd2FudHMgdGhlIGFzc29jaWF0ZWQgbWFzayBlbmFibGVkLAogCSAqIHdlIG11c3QgY2xlYXIgdGhlIGFzc29jaWF0ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24KIAkgKiBiZWZvcmUgd2UgYXBwbHkgdGhlIG5ldyBjb25maWcgKi8KLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpICYmCi0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkgewotCQlJV0xfREVCVUdfSU5GTygiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgbmV3X2Fzc29jKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJUb2dnbGluZyBhc3NvY2lhdGVkIGJpdCBvbiBjdXJyZW50IFJYT05cbiIpOwogCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAKLQkJcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAorCQkvKgorCQkgKiByZXNlcnZlZDQgYW5kIDUgY291bGQgaGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgaXdsY29yZSBjb2RlLgorCQkgKiBMZXQncyBjbGVhciB0aGVtIGJlZm9yZSBwdXNoaW5nIHRvIHRoZSAzOTQ1LgorCQkgKi8KKwkJYWN0aXZlX3J4b24tPnJlc2VydmVkNCA9IDA7CisJCWFjdGl2ZV9yeG9uLT5yZXNlcnZlZDUgPSAwOworCQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKIAkJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLAogCQkJCSAgICAgICZwcml2LT5hY3RpdmVfcnhvbik7CiAKQEAgLTEwNzQsMjkwICszODYsMjEzIEBACiAJCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwogCQlpZiAocmMpIHsKIAkJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwotCQkJSVdMX0VSUk9SKCJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgb24gY3VycmVudCAiCisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgb24gY3VycmVudCAiCiAJCQkJICAiY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIlNlbmRpbmcgUlhPTlxuIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZW5kaW5nIFJYT05cbiIKIAkJICAgICAgICIqIHdpdGglcyBSWE9OX0ZJTFRFUl9BU1NPQ19NU0tcbiIKIAkJICAgICAgICIqIGNoYW5uZWwgPSAlZFxuIgogCQkgICAgICAgIiogYnNzaWQgPSAlcE1cbiIsCi0JCSAgICAgICAoKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJgotCQkJIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAiIiA6ICJvdXQiKSwKLQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSwKLQkJICAgICAgIHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyKTsKKwkJICAgICAgIChuZXdfYXNzb2MgPyAiIiA6ICJvdXQiKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KHN0YWdpbmdfcnhvbi0+Y2hhbm5lbCksCisJCSAgICAgICBzdGFnaW5nX3J4b24tPmJzc2lkX2FkZHIpOworCisJLyoKKwkgKiByZXNlcnZlZDQgYW5kIDUgY291bGQgaGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgaXdsY29yZSBjb2RlLgorCSAqIExldCdzIGNsZWFyIHRoZW0gYmVmb3JlIHB1c2hpbmcgdG8gdGhlIDM5NDUuCisJICovCisJc3RhZ2luZ19yeG9uLT5yZXNlcnZlZDQgPSAwOworCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ1ID0gMDsKKworCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAhcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byk7CiAKIAkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCksCisJCQkgICAgICBzdGFnaW5nX3J4b24pOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJbWVtY3B5KGFjdGl2ZV9yeG9uLCBzdGFnaW5nX3J4b24sIHNpemVvZigqYWN0aXZlX3J4b24pKTsKIAogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwotCXJjID0gaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOworCXJjID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcihwcml2KTsKIAlpZiAocmMpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIFR4IHBvd2VyICglZCkuXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgVHggcG93ZXIgKCVkKS5cbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIEFkZCB0aGUgYnJvYWRjYXN0IGFkZHJlc3Mgc28gd2UgY2FuIHNlbmQgYnJvYWRjYXN0IGZyYW1lcyAqLwotCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIDAsIDApID09CisJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDAsIDApID09CiAJICAgIElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIGFkZGluZyBCUk9BRENBU1QgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogSWYgd2UgaGF2ZSBzZXQgdGhlIEFTU09DX01TSyBhbmQgd2UgYXJlIGluIEJTUyBtb2RlIHRoZW4KIAkgKiBhZGQgdGhlIElXTF9BUF9JRCB0byB0aGUgc3RhdGlvbiByYXRlIHRhYmxlICovCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSAmJgorCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJgogCSAgICAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKLQkJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkciwgMSwgMCkKKwkJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkciwKKwkJCQkJMSwgMCkKIAkJICAgID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgdHJhbnNtaXRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCS8qIEluaXQgdGhlIGhhcmR3YXJlJ3MgcmF0ZSBmYWxsYmFjayBvcmRlciBiYXNlZCBvbiB0aGUgYmFuZCAqLwogCXJjID0gaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBIVyByYXRlIHRhYmxlOiAlMDJYXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgSFcgcmF0ZSB0YWJsZTogJTAyWFxuIiwgcmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bDM5NDVfYnRfY21kIGJ0X2NtZCA9IHsKLQkJLmZsYWdzID0gMywKLQkJLmxlYWRfdGltZSA9IDB4QUEsCi0JCS5tYXhfa2lsbCA9IDEsCi0JCS5raWxsX2Fja19tYXNrID0gMCwKLQkJLmtpbGxfY3RzX21hc2sgPSAwLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQlRfQ09ORklHLAotCQkJCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9idF9jbWQpLCAmYnRfY21kKTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXM7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9TQ0FOX0FCT1JUX0NNRCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCi0JfTsKLQotCS8qIElmIHRoZXJlIGlzbid0IGEgc2NhbiBhY3RpdmVseSBnb2luZyBvbiBpbiB0aGUgaGFyZHdhcmUKLQkgKiB0aGVuIHdlIGFyZSBpbiBiZXR3ZWVuIHNjYW4gYmFuZHMgYW5kIG5vdCBhY3R1YWxseQotCSAqIGFjdGl2ZWx5IHNjYW5uaW5nLCBzbyBkb24ndCBzZW5kIHRoZSBhYm9ydCBjb21tYW5kICovCi0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci0JaWYgKHJjKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7Ci0JaWYgKHJlcy0+dS5zdGF0dXMgIT0gQ0FOX0FCT1JUX1NUQVRVUykgewotCQkvKiBUaGUgc2NhbiBhYm9ydCB3aWxsIHJldHVybiAxIGZvciBzdWNjZXNzIG9yCi0JCSAqIDIgZm9yICJmYWlsdXJlIi4gIEEgZmFpbHVyZSBjb25kaXRpb24gY2FuIGJlCi0JCSAqIGR1ZSB0byBzaW1wbHkgbm90IGJlaW5nIGluIGFuIGFjdGl2ZSBzY2FuIHdoaWNoCi0JCSAqIGNhbiBvY2N1ciBpZiB3ZSBzZW5kIHRoZSBzY2FuIGFib3J0IGJlZm9yZSB3ZQotCQkgKiB0aGUgbWljcm9jb2RlIGhhcyBub3RpZmllZCB1cyB0aGF0IGEgc2NhbiBpcwotCQkgKiBjb21wbGV0ZWQuICovCi0JCUlXTF9ERUJVR19JTkZPKCJTQ0FOX0FCT1JUIHJldHVybmVkICVkLlxuIiwgcmVzLT51LnN0YXR1cyk7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfY2FyZF9zdGF0ZV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCXN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAxOwotfQotCi0vKgotICogQ0FSRF9TVEFURV9DTUQKLSAqCi0gKiBVc2U6IFNldHMgdGhlIGRldmljZSdzIGludGVybmFsIGNhcmQgc3RhdGUgdG8gZW5hYmxlLCBkaXNhYmxlLCBvciBoYWx0Ci0gKgotICogV2hlbiBpbiB0aGUgJ2VuYWJsZScgc3RhdGUgdGhlIGNhcmQgb3BlcmF0ZXMgYXMgbm9ybWFsLgotICogV2hlbiBpbiB0aGUgJ2Rpc2FibGUnIHN0YXRlLCB0aGUgY2FyZCBlbnRlcnMgaW50byBhIGxvdyBwb3dlciBtb2RlLgotICogV2hlbiBpbiB0aGUgJ2hhbHQnIHN0YXRlLCB0aGUgY2FyZCBpcyBzaHV0IGRvd24gYW5kIG11c3QgYmUgZnVsbHkKLSAqIHJlc3RhcnRlZCB0byBjb21lIGJhY2sgb24uCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGZsYWdzLCB1OCBtZXRhX2ZsYWcpCi17Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9DQVJEX1NUQVRFX0NNRCwKLQkJLmxlbiA9IHNpemVvZih1MzIpLAotCQkuZGF0YSA9ICZmbGFncywKLQkJLm1ldGEuZmxhZ3MgPSBtZXRhX2ZsYWcsCi0JfTsKLQotCWlmIChtZXRhX2ZsYWcgJiBDTURfQVNZTkMpCi0JCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBpd2wzOTQ1X2NhcmRfc3RhdGVfc3luY19jYWxsYmFjazsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kKHByaXYsICZjbWQpOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfYWRkX3N0YV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7Ci0KLQlpZiAoIXNrYikgewotCQlJV0xfRVJST1IoIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKLQlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcmVzLT5oZHIuZmxhZ3MpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewotCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyogV2UgZGlkbid0IGNhY2hlIHRoZSBTS0I7IGxldCB0aGUgY2FsbGVyIGZyZWUgaXQgKi8KLQlyZXR1cm4gMTsKLX0KLQotaW50IGl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJIHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9BRERfU1RBLAotCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQpLAotCQkubWV0YS5mbGFncyA9IGZsYWdzLAotCQkuZGF0YSA9IHN0YSwKLQl9OwotCi0JaWYgKGZsYWdzICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsMzk0NV9hZGRfc3RhX3N5bmNfY2FsbGJhY2s7Ci0JZWxzZQotCQljbWQubWV0YS5mbGFncyB8PSBDTURfV0FOVF9TS0I7Ci0KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7Ci0KLQlpZiAocmMgfHwgKGZsYWdzICYgQ01EX0FTWU5DKSkKLQkJcmV0dXJuIHJjOwotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAotCQkJICByZXMtPmhkci5mbGFncyk7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQlpZiAocmMgPT0gMCkgewotCQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewotCQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQUREX1NUQSBQQVNTRURcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyYyA9IC1FSU87Ci0JCQlJV0xfV0FSTklORygiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfdXBkYXRlX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCiAJCQkJICAgdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2IGtleV9mbGFncyA9IDA7CisJaW50IHJldDsKIAotCXN3aXRjaCAoa2V5Y29uZi0+YWxnKSB7Ci0JY2FzZSBBTEdfQ0NNUDoKLQkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfRkxHX0NDTVA7Ci0JCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNigKLQkJCQlrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKLQkJa2V5X2ZsYWdzICY9IH5TVEFfS0VZX0ZMR19JTlZBTElEOwotCQlicmVhazsKLQljYXNlIEFMR19US0lQOgotCWNhc2UgQUxHX1dFUDoKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19DQ01QIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOworCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKKworCWlmIChzdGFfaWQgPT0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCkKKwkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfTVVMVElDQVNUX01TSzsKKworCWtleWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwlrZXljb25mLT5od19rZXlfaWR4ID0ga2V5Y29uZi0+a2V5aWR4OworCWtleV9mbGFncyAmPSB+U1RBX0tFWV9GTEdfSU5WQUxJRDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKLQltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LAorCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LAogCSAgICAgICBrZXljb25mLT5rZXlsZW4pOwogCi0JbWVtY3B5KHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXksIGtleWNvbmYtPmtleSwKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleSwga2V5Y29uZi0+a2V5LAogCSAgICAgICBrZXljb25mLT5rZXlsZW4pOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKworCWlmICgocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyAmIFNUQV9LRVlfRkxHX0VOQ1JZUFRfTVNLKQorCQkJPT0gU1RBX0tFWV9GTEdfTk9fRU5DKQorCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9CisJCQkJIGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgocHJpdik7CisJLyogZWxzZSwgd2UgYXJlIG92ZXJyaWRpbmcgYW4gZXhpc3Rpbmcga2V5ID0+IG5vIG5lZWQgdG8gYWxsb2NhdGVkIHJvb20KKwkqIGluIHVDb2RlLiAqLworCisJV0FSTihwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CisKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiaHdjcnlwdG86IG1vZGlmeSB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKKworCXJldCA9IGl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiaHdjcnlwdG86IG1vZGlmeSB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCAwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICB1OCBzdGFfaWQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICB1OCBzdGFfaWQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2h3X2tleSkpOwotCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfa2V5aW5mbykpOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBTVEFfS0VZX0ZMR19OT19FTkM7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwltZW1zZXQoJnByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2h3X2tleSkpOworCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LCAwLAorCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfa2V5aW5mbykpOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBTVEFfS0VZX0ZMR19OT19FTkM7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX0lORk8oImh3Y3J5cHRvOiBjbGVhciB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCAwKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiaHdjcnlwdG86IGNsZWFyIHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOworCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YSwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgdTggc3RhX2lkKQoreworCWludCByZXQgPSAwOworCisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IEhXX0tFWV9EWU5BTUlDOworCisJc3dpdGNoIChrZXljb25mLT5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlyZXQgPSBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfVEtJUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUxHX1dFUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0VSUihwcml2LCJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXljb25mLT5hbGcpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCUlXTF9ERUJVR19XRVAocHJpdiwgIlNldCBkeW5hbWljIGtleTogYWxnPSAlZCBsZW49JWQgaWR4PSVkIHN0YT0lZCByZXQ9JWRcbiIsCisJCSAgICAgIGtleWNvbmYtPmFsZywga2V5Y29uZi0+a2V5bGVuLCBrZXljb25mLT5rZXlpZHgsCisJCSAgICAgIHN0YV9pZCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9yZW1vdmVfc3RhdGljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3NldF9zdGF0aWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJaWYgKGtleS0+YWxnID09IEFMR19XRVApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCUlXTF9FUlIocHJpdiwgIlN0YXRpYyBrZXkgaW52YWxpZDogYWxnICVkXG4iLCBrZXktPmFsZyk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygiJWQgZnJhbWVzIG9uIHByZS1hbGxvY2F0ZWQgaGVhcCBvbiBjbGVhci5cbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAogCQkgICAgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7CkBAIC0xMzY4LDIwICs2MDMsMjAgQEAKIAl9CiAKIAlpZiAocHJpdi0+ZnJhbWVzX2NvdW50KSB7Ci0JCUlXTF9XQVJOSU5HKCIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKKwkJSVdMX1dBUk4ocHJpdiwgIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAogCQkJICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAJCXByaXYtPmZyYW1lc19jb3VudCA9IDA7CiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGl3bDM5NDVfZnJhbWUgKml3bDM5NDVfZ2V0X2ZyZWVfZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqaXdsMzk0NV9nZXRfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJaWYgKGxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewogCQlmcmFtZSA9IGt6YWxsb2Moc2l6ZW9mKCpmcmFtZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWZyYW1lKSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOworCQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0xMzk0LDE4ICs2MjksMTggQEAKIAlyZXR1cm4gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSwgbGlzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWUpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2ZyZWVfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWUpCiB7CiAJbWVtc2V0KGZyYW1lLCAwLCBzaXplb2YoKmZyYW1lKSk7CiAJbGlzdF9hZGQoJmZyYW1lLT5saXN0LCAmcHJpdi0+ZnJlZV9mcmFtZXMpOwogfQogCi11bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAordW5zaWduZWQgaW50IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkJaW50IGxlZnQpCiB7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSB8fCAhcHJpdi0+aWJzc19iZWFjb24gfHwKKwlpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8ICFwcml2LT5pYnNzX2JlYWNvbiB8fAogCSAgICAoKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmCiAJICAgICAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkpKQogCQlyZXR1cm4gMDsKQEAgLTE0MTgsMzEgKzY1Myw3IEBACiAJcmV0dXJuIHByaXYtPmlic3NfYmVhY29uLT5sZW47CiB9CiAKLXN0YXRpYyB1OCBpd2wzOTQ1X3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JdTggaTsKLQlpbnQgcmF0ZV9tYXNrOwotCi0JLyogU2V0IHJhdGUgbWFzayovCi0JaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKLQkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfQ0NLX1JBVEVTX01BU0s7Ci0JZWxzZQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX1JBVEVTX01BU0s7Ci0KLQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWDsgaSAhPSBJV0xfUkFURV9JTlZBTElEOwotCSAgICAgaSA9IGl3bDM5NDVfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7Ci0JCWlmIChyYXRlX21hc2sgJiAoMSA8PCBpKSkKLQkJCXJldHVybiBpd2wzOTQ1X3JhdGVzW2ldLnBsY3A7Ci0JfQotCi0JLyogTm8gdmFsaWQgcmF0ZSB3YXMgZm91bmQuIEFzc2lnbiB0aGUgbG93ZXN0IG9uZSAqLwotCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCi0JCXJldHVybiBJV0xfUkFURV8xTV9QTENQOwotCWVsc2UKLQkJcmV0dXJuIElXTF9SQVRFXzZNX1BMQ1A7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2JlYWNvbl9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZTsKIAl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKQEAgLTE0NTIsMTYgKzY2MywxNiBAQAogCWZyYW1lID0gaXdsMzk0NV9nZXRfZnJlZV9mcmFtZShwcml2KTsKIAogCWlmICghZnJhbWUpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgogCQkJICAiY29tbWFuZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyYXRlID0gaXdsMzk0NV9yYXRlX2dldF9sb3dlc3RfcGxjcChwcml2KTsKKwlyYXRlID0gaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHByaXYpOwogCiAJZnJhbWVfc2l6ZSA9IGl3bDM5NDVfaHdfZ2V0X2JlYWNvbl9jbWQocHJpdiwgZnJhbWUsIHJhdGUpOwogCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9UWF9CRUFDT04sIGZyYW1lX3NpemUsCisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX0JFQUNPTiwgZnJhbWVfc2l6ZSwKIAkJCSAgICAgICZmcmFtZS0+dS5jbWRbMF0pOwogCiAJaXdsMzk0NV9mcmVlX2ZyYW1lKHByaXYsIGZyYW1lKTsKQEAgLTE0NjksNTY2ICs2ODAsMTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBFRVBST00gcmVsYXRlZCBmdW5jdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBnZXRfZWVwcm9tX21hYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCAqbWFjKQorc3RhdGljIHZvaWQgaXdsMzk0NV91bnNldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCW1lbWNweShtYWMsIHByaXYtPmVlcHJvbS5tYWNfYWRkcmVzcywgNik7Ci19Ci0KLS8qCi0gKiBDbGVhciB0aGUgT1dORVJfTVNLLCB0byBlc3RhYmxpc2ggZHJpdmVyIChpbnN0ZWFkIG9mIHVDb2RlIHJ1bm5pbmcgb24KLSAqIGVtYmVkZGVkIGNvbnRyb2xsZXIpIGFzIEVFUFJPTSByZWFkZXI7IGVhY2ggcmVhZCBpcyBhIHNlcmllcyBvZiBwdWxzZXMKLSAqIHRvL2Zyb20gdGhlIEVFUFJPTSBjaGlwLCBub3QgYSBzaW5nbGUgZXZlbnQsIHNvIGV2ZW4gcmVhZHMgY291bGQgY29uZmxpY3QKLSAqIGlmIHRoZXkgd2VyZW4ndCBhcmJpdHJhdGVkIGJ5IHNvbWUgb3duZXJzaGlwIG1lY2hhbmlzbS4gIEhlcmUsIHRoZSBkcml2ZXIKLSAqIHNpbXBseSBjbGFpbXMgb3duZXJzaGlwLCB3aGljaCBzaG91bGQgYmUgc2FmZSB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCi0gKiAoaS5lLiBiZWZvcmUgbG9hZGluZyB1Q29kZSEpLgotICovCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCV9pd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfRUVQUk9NX0dQLCBDU1JfRUVQUk9NX0dQX0lGX09XTkVSX01TSyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9lZXByb21faW5pdCAtIHJlYWQgRUVQUk9NIGNvbnRlbnRzCi0gKgotICogTG9hZCB0aGUgRUVQUk9NIGNvbnRlbnRzIGZyb20gYWRhcHRlciBpbnRvIHByaXYtPmVlcHJvbQotICoKLSAqIE5PVEU6ICBUaGlzIHJvdXRpbmUgdXNlcyB0aGUgbm9uLWRlYnVnIElPIGFjY2VzcyBmdW5jdGlvbnMuCi0gKi8KLWludCBpd2wzOTQ1X2VlcHJvbV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JdTE2ICplID0gKHUxNiAqKSZwcml2LT5lZXByb207Ci0JdTMyIGdwID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCk7Ci0JaW50IHN6ID0gc2l6ZW9mKHByaXYtPmVlcHJvbSk7Ci0JaW50IHJldDsKLQl1MTYgYWRkcjsKLQotCS8qIFRoZSBFRVBST00gc3RydWN0dXJlIGhhcyBzZXZlcmFsIHBhZGRpbmcgYnVmZmVycyB3aXRoaW4gaXQKLQkgKiBhbmQgd2hlbiBhZGRpbmcgbmV3IEVFUFJPTSBtYXBzIGlzIHN1YmplY3QgdG8gcHJvZ3JhbW1lciBlcnJvcnMKLQkgKiB3aGljaCBtYXkgYmUgdmVyeSBkaWZmaWN1bHQgdG8gaWRlbnRpZnkgd2l0aG91dCBleHBsaWNpdGx5Ci0JICogY2hlY2tpbmcgdGhlIHJlc3VsdGluZyBzaXplIG9mIHRoZSBlZXByb20gbWFwLiAqLwotCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+ZWVwcm9tKSAhPSBJV0xfRUVQUk9NX0lNQUdFX1NJWkUpOwotCi0JaWYgKChncCAmIENTUl9FRVBST01fR1BfVkFMSURfTVNLKSA9PSBDU1JfRUVQUk9NX0dQX0JBRF9TSUdOQVRVUkUpIHsKLQkJSVdMX0VSUk9SKCJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KLQlyZXQgPSBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShwcml2KTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byBhY3F1aXJlIEVFUFJPTSBzZW1hcGhvcmUuXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogZWVwcm9tIGlzIGFuIGFycmF5IG9mIDE2Yml0IHZhbHVlcyAqLwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzejsgYWRkciArPSBzaXplb2YodTE2KSkgewotCQl1MzIgcjsKLQotCQlfaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9FRVBST01fUkVHLAotCQkJCSBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKLQkJX2l3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9FRVBST01fUkVHLCBDU1JfRUVQUk9NX1JFR19CSVRfQ01EKTsKLQkJcmV0ID0gaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0VFUFJPTV9SRUcsCi0JCQkJCSAgICAgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAotCQkJCQkgICAgICBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCUlXTF9FUlJPUigiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdXG4iLCBhZGRyKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyID0gX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7Ci0JCWVbYWRkciAvIDJdID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KShyID4+IDE2KSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfdW5zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0KQorCWlmIChwcml2LT5zaGFyZWRfdmlydCkKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKLQkJCQkgICAgcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCwKLQkJCQkgICAgcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfcGh5cyk7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZSAtIGZpbGwgaW4gdGhlIHN1cHBvcnRlZCByYXRlIGluIElFIGZpZWxkCi0gKgotICogcmV0dXJuIDogc2V0IHRoZSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIHJhdGUgaW5zZXJ0IGluIGllCi0gKi8KLXN0YXRpYyB1MTYgaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZSh1OCAqaWUsIHUxNiBzdXBwb3J0ZWRfcmF0ZSwKLQkJCQkgICAgdTE2IGJhc2ljX3JhdGUsIGludCAqbGVmdCkKLXsKLQl1MTYgcmV0X3JhdGVzID0gMCwgYml0OwotCWludCBpOwotCXU4ICpjbnQgPSBpZTsKLQl1OCAqcmF0ZXMgPSBpZSArIDE7Ci0KLQlmb3IgKGJpdCA9IDEsIGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKywgYml0IDw8PSAxKSB7Ci0JCWlmIChiaXQgJiBzdXBwb3J0ZWRfcmF0ZSkgewotCQkJcmV0X3JhdGVzIHw9IGJpdDsKLQkJCXJhdGVzWypjbnRdID0gaXdsMzk0NV9yYXRlc1tpXS5pZWVlIHwKLQkJCQkoKGJpdCAmIGJhc2ljX3JhdGUpID8gMHg4MCA6IDB4MDApOwotCQkJKCpjbnQpKys7Ci0JCQkoKmxlZnQpLS07Ci0JCQlpZiAoKCpsZWZ0IDw9IDApIHx8Ci0JCQkgICAgKCpjbnQgPj0gSVdMX1NVUFBPUlRFRF9SQVRFU19JRV9MRU4pKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldF9yYXRlczsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2ZpbGxfcHJvYmVfcmVxIC0gZmlsbCBpbiBhbGwgcmVxdWlyZWQgZmllbGRzIGFuZCBJRSBmb3IgcHJvYmUgcmVxdWVzdAotICovCi1zdGF0aWMgdTE2IGl3bDM5NDVfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsCi0JCQkgICAgICBpbnQgbGVmdCkKLXsKLQlpbnQgbGVuID0gMDsKLQl1OCAqcG9zID0gTlVMTDsKLQl1MTYgYWN0aXZlX3JhdGVzLCByZXRfcmF0ZXMsIGNja19yYXRlczsKLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBwcm9iZSByZXF1ZXN0LAotCSAqIHR3byBtYW5kYXRvcnkgSUVzIGFuZCB0aGUgZGF0YSAqLwotCWxlZnQgLT0gMjQ7Ci0JaWYgKGxlZnQgPCAwKQotCQlyZXR1cm4gMDsKLQlsZW4gKz0gMjQ7Ci0KLQlmcmFtZS0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwotCW1lbWNweShmcmFtZS0+ZGEsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkoZnJhbWUtPnNhLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShmcmFtZS0+YnNzaWQsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIEVUSF9BTEVOKTsKLQlmcmFtZS0+c2VxX2N0cmwgPSAwOwotCi0JLyogZmlsbCBpbiBvdXIgaW5kaXJlY3QgU1NJRCBJRSAqLwotCS8qIC4uLm5leHQgSUUuLi4gKi8KLQotCWxlZnQgLT0gMjsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCWxlbiArPSAyOwotCXBvcyA9ICYoZnJhbWUtPnUucHJvYmVfcmVxLnZhcmlhYmxlWzBdKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IDA7Ci0KLQkvKiBmaWxsIGluIHN1cHBvcnRlZCByYXRlICovCi0JLyogLi4ubmV4dCBJRS4uLiAqLwotCWxlZnQgLT0gMjsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCi0JLyogLi4uIGZpbGwgaXQgaW4uLi4gKi8KLQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCSpwb3MgPSAwOwotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSBwcml2LT5yYXRlc19tYXNrOwotCWFjdGl2ZV9yYXRlcyA9IHByaXYtPmFjdGl2ZV9yYXRlOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gcHJpdi0+cmF0ZXNfbWFzayAmIElXTF9CQVNJQ19SQVRFU19NQVNLOwotCi0JY2NrX3JhdGVzID0gSVdMX0NDS19SQVRFU19NQVNLICYgYWN0aXZlX3JhdGVzOwotCXJldF9yYXRlcyA9IGl3bDM5NDVfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBjY2tfcmF0ZXMsCi0JCQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOwotCWFjdGl2ZV9yYXRlcyAmPSB+cmV0X3JhdGVzOwotCi0JcmV0X3JhdGVzID0gaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGFjdGl2ZV9yYXRlcywKLQkJCQkgcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMsICZsZWZ0KTsKLQlhY3RpdmVfcmF0ZXMgJj0gfnJldF9yYXRlczsKLQotCWxlbiArPSAyICsgKnBvczsKLQlwb3MgKz0gKCpwb3MpICsgMTsKLQlpZiAoYWN0aXZlX3JhdGVzID09IDApCi0JCWdvdG8gZmlsbF9lbmQ7Ci0KLQkvKiBmaWxsIGluIHN1cHBvcnRlZCBleHRlbmRlZCByYXRlICovCi0JLyogLi4ubmV4dCBJRS4uLiAqLwotCWxlZnQgLT0gMjsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCS8qIC4uLiBmaWxsIGl0IGluLi4uICovCi0JKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JKnBvcyA9IDA7Ci0JaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGFjdGl2ZV9yYXRlcywKLQkJCQkgcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMsICZsZWZ0KTsKLQlpZiAoKnBvcyA+IDApCi0JCWxlbiArPSAyICsgKnBvczsKLQotIGZpbGxfZW5kOgotCXJldHVybiAodTE2KWxlbjsKLX0KLQotLyoKLSAqIFFvUyAgc3VwcG9ydAotKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgKnFvcykKLXsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9RT1NfUEFSQU0sCi0JCQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Fvc3BhcmFtX2NtZCksIHFvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcmVzZXRfcW9zKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JdTE2IGN3X21pbiA9IDE1OwotCXUxNiBjd19tYXggPSAxMDIzOwotCXU4IGFpZnMgPSAyOwotCXU4IGlzX2xlZ2FjeSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7Ci0KLQkvKiBRb1MgYWx3YXlzIGFjdGl2ZSBpbiBBUCBhbmQgQURIT0MgbW9kZQotCSAqIEluIFNUQSBtb2RlIHdhaXQgZm9yIGFzc29jaWF0aW9uCi0JICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkgICAgcHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDE7Ci0JZWxzZQotCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKLQotCi0JLyogY2hlY2sgZm9yIGxlZ2FjeSBtb2RlICovCi0JaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgICAocHJpdi0+YWN0aXZlX3JhdGUgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSA9PSAwKSB8fAotCSAgICAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID09IDApKSB7Ci0JCWN3X21pbiA9IDMxOwotCQlpc19sZWdhY3kgPSAxOwotCX0KLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQotCQlhaWZzID0gMzsKLQotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5jd19taW4gPSBjcHVfdG9fbGUxNihjd19taW4pOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5jd19tYXggPSBjcHVfdG9fbGUxNihjd19tYXgpOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5haWZzbiA9IGFpZnM7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmVkY2FfdHhvcCA9IDA7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLnJlc2VydmVkMSA9IDA7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkgewotCQlpID0gMTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9IGNwdV90b19sZTE2KGN3X21pbik7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPSBjcHVfdG9fbGUxNihjd19tYXgpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSA3OwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0gMDsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0KLQkJaSA9IDI7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQotCQkJY3B1X3RvX2xlMTYoKGN3X21pbiArIDEpIC8gMiAtIDEpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KLQkJCWNwdV90b19sZTE2KGN3X21heCk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDI7Ci0JCWlmIChpc19sZWdhY3kpCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNig2MDE2KTsKLQkJZWxzZQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoMzAwOCk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCi0JCWkgPSAzOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0KLQkJCWNwdV90b19sZTE2KChjd19taW4gKyAxKSAvIDQgLSAxKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9Ci0JCQljcHVfdG9fbGUxNigoY3dfbWF4ICsgMSkgLyAyIC0gMSk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDI7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCQlpZiAoaXNfbGVnYWN5KQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoMzI2NCk7Ci0JCWVsc2UKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDE1MDQpOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQotCQkJCWNwdV90b19sZTE2KGN3X21pbik7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KLQkJCQljcHVfdG9fbGUxNihjd19tYXgpOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gYWlmczsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPSAwOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0JCX0KLQl9Ci0JSVdMX0RFQlVHX1FPUygic2V0IFFvUyB0byBkZWZhdWx0IFxuIik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IGZvcmNlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyA9IDA7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnF1ZXVlX3JlcXVlc3QgJiYKLQkgICAgIXByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC50eG9wX3JlcXVlc3QpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KLQkJCVFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSzsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9Ci0JCQlRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSzsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChmb3JjZSB8fCBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX1FPUygic2VuZCBRb1MgY21kIHdpdGggUW9TIGFjdGl2ZSAlZCBcbiIsCi0JCQkgICAgICBwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKTsKLQotCQlpd2wzOTQ1X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHByaXYsCi0JCQkJJihwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0pKTsKLQl9Ci19Ci0KLS8qCi0gKiBQb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIhKSBmdW5jdGlvbnMKLSAqLwotI2RlZmluZSBNU0VDX1RPX1VTRUMgMTAyNAotCi0jZGVmaW5lIE5PU0xQIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCkKLSNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLCi0jZGVmaW5lIFNMUF9USU1FT1VUKFQpIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKFQpICogTVNFQ19UT19VU0VDKQotI2RlZmluZSBTTFBfVkVDKFgwLCBYMSwgWDIsIFgzLCBYNCkge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDApLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgxKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMiksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDMpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFg0KX0KLQotCi0vKiBkZWZhdWx0IHBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgdGFibGUgdmFsdWVzICovCi0vKiBmb3IgVElNICAwLTEwICovCi1zdGF0aWMgc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5IHJhbmdlXzBbSVdMX1BPV0VSX0FDXSA9IHsKLQl7e05PU0xQLCBTTFBfVElNRU9VVCgwKSwgU0xQX1RJTUVPVVQoMCksIFNMUF9WRUMoMCwgMCwgMCwgMCwgMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoNTAwKSwgU0xQX1ZFQygxLCAyLCAzLCA0LCA0KX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyMDApLCBTTFBfVElNRU9VVCgzMDApLCBTTFBfVkVDKDIsIDQsIDYsIDcsIDcpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMTAwKSwgU0xQX1ZFQygyLCA2LCA5LCA5LCAxMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoMiwgNywgOSwgOSwgMTApfSwgMX0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDI1KSwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMTApfSwgMX0KLX07Ci0KLS8qIGZvciBUSU0gPiAxMCAqLwotc3RhdGljIHN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8xW0lXTF9QT1dFUl9BQ10gPSB7Ci0Je3tOT1NMUCwgU0xQX1RJTUVPVVQoMCksIFNMUF9USU1FT1VUKDApLCBTTFBfVkVDKDAsIDAsIDAsIDAsIDApfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDUwMCksCi0JCSBTTFBfVkVDKDEsIDIsIDMsIDQsIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDMwMCksCi0JCSBTTFBfVkVDKDIsIDQsIDYsIDcsIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMTAwKSwKLQkJIFNMUF9WRUMoMiwgNiwgOSwgOSwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoMiwgNywgOSwgOSwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVElNRU9VVCgyNSksCi0JCSBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMHhGRil9LCAwfQotfTsKLQotaW50IGl3bDM5NDVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmMgPSAwLCBpOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX21nciAqcG93X2RhdGE7Ci0JaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5KSAqIElXTF9QT1dFUl9BQzsKLQl1MTYgcGNpX3BtOwotCi0JSVdMX0RFQlVHX1BPV0VSKCJJbml0aWFsaXplIHBvd2VyIFxuIik7Ci0KLQlwb3dfZGF0YSA9ICYocHJpdi0+cG93ZXJfZGF0YSk7Ci0KLQltZW1zZXQocG93X2RhdGEsIDAsIHNpemVvZigqcG93X2RhdGEpKTsKLQotCXBvd19kYXRhLT5hY3RpdmVfaW5kZXggPSBJV0xfUE9XRVJfUkFOR0VfMDsKLQlwb3dfZGF0YS0+ZHRpbV92YWwgPSAweGZmZmY7Ci0KLQltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFswXSwgJnJhbmdlXzBbMF0sIHNpemUpOwotCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8xWzBdLCAmcmFuZ2VfMVswXSwgc2l6ZSk7Ci0KLQlyYyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9MSU5LX0NUUkwsICZwY2lfcG0pOwotCWlmIChyYyAhPSAwKQotCQlyZXR1cm4gMDsKLQllbHNlIHsKLQkJc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgKmNtZDsKLQotCQlJV0xfREVCVUdfUE9XRVIoImFkanVzdCBwb3dlciBjb21tYW5kIGZsYWdzXG4iKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX0FDOyBpKyspIHsKLQkJCWNtZCA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbaV0uY21kOwotCi0JCQlpZiAocGNpX3BtICYgMHgxKQotCQkJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9QQ0lfUE1fTVNLOwotCQkJZWxzZQotCQkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfdXBkYXRlX3Bvd2VyX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kICpjbWQsIHUzMiBtb2RlKQotewotCWludCByYyA9IDAsIGk7Ci0JdTggc2tpcDsKLQl1MzIgbWF4X3NsZWVwID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgKnJhbmdlOwotCXU4IHBlcmlvZCA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfbWdyICpwb3dfZGF0YTsKLQotCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlwb3dfZGF0YSA9ICYocHJpdi0+cG93ZXJfZGF0YSk7Ci0KLQlpZiAocG93X2RhdGEtPmFjdGl2ZV9pbmRleCA9PSBJV0xfUE9XRVJfUkFOR0VfMCkKLQkJcmFuZ2UgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8wWzBdOwotCWVsc2UKLQkJcmFuZ2UgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8xWzFdOwotCi0JbWVtY3B5KGNtZCwgJnJhbmdlW21vZGVdLmNtZCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kKSk7Ci0KLSNpZmRlZiBJV0xfTUFDODAyMTFfRElTQUJMRQotCWlmIChwcml2LT5hc3NvY19uZXR3b3JrICE9IE5VTEwpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlwZXJpb2QgPSBwcml2LT5hc3NvY19uZXR3b3JrLT50aW0udGltX3BlcmlvZDsKLQl9Ci0jZW5kaWYJLypJV0xfTUFDODAyMTFfRElTQUJMRSAqLwotCXNraXAgPSByYW5nZVttb2RlXS5ub19kdGltOwotCi0JaWYgKHBlcmlvZCA9PSAwKSB7Ci0JCXBlcmlvZCA9IDE7Ci0JCXNraXAgPSAwOwotCX0KLQotCWlmIChza2lwID09IDApIHsKLQkJbWF4X3NsZWVwID0gcGVyaW9kOwotCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKLQl9IGVsc2UgewotCQlfX2xlMzIgc2xwX2l0cnZsID0gY21kLT5zbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkUgLSAxXTsKLQkJbWF4X3NsZWVwID0gKGxlMzJfdG9fY3B1KHNscF9pdHJ2bCkgLyBwZXJpb2QpICogcGVyaW9kOwotCQljbWQtPmZsYWdzIHw9IElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfVkVDX1NJWkU7IGkrKykgewotCQlpZiAobGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFtpXSkgPiBtYXhfc2xlZXApCi0JCQljbWQtPnNsZWVwX2ludGVydmFsW2ldID0gY3B1X3RvX2xlMzIobWF4X3NsZWVwKTsKLQl9Ci0KLQlJV0xfREVCVUdfUE9XRVIoIkZsYWdzIHZhbHVlID0gMHglMDhYXG4iLCBjbWQtPmZsYWdzKTsKLQlJV0xfREVCVUdfUE9XRVIoIlR4IHRpbWVvdXQgPSAldVxuIiwgbGUzMl90b19jcHUoY21kLT50eF9kYXRhX3RpbWVvdXQpKTsKLQlJV0xfREVCVUdfUE9XRVIoIlJ4IHRpbWVvdXQgPSAldVxuIiwgbGUzMl90b19jcHUoY21kLT5yeF9kYXRhX3RpbWVvdXQpKTsKLQlJV0xfREVCVUdfUE9XRVIoIlNsZWVwIGludGVydmFsIHZlY3RvciA9IHsgJWQgLCAlZCAsICVkICwgJWQgLCAlZCB9XG4iLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFswXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzFdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMl0pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFszXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzRdKSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX3Bvd2VyX21vZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIG1vZGUpCi17Ci0JdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKGZpbmFsX21vZGUpOwotCWludCByYzsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0KLQkvKiBJZiBvbiBiYXR0ZXJ5LCBzZXQgdG8gMywKLQkgKiBpZiBwbHVnZ2VkIGludG8gQUMgcG93ZXIsIHNldCB0byBDQU0gKCJjb250aW51b3VzbHkgYXdhcmUgbW9kZSIpLAotCSAqIGVsc2UgdXNlciBsZXZlbCAqLwotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQUM6Ci0JCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWZpbmFsX21vZGUgPSBtb2RlOwotCQlicmVhazsKLQl9Ci0KLQlpd2wzOTQ1X3VwZGF0ZV9wb3dlcl9jbWQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7Ci0KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFBPV0VSX1RBQkxFX0NNRCwgc2l6ZW9mKGNtZCksICZjbWQpOwotCi0JaWYgKGZpbmFsX21vZGUgPT0gSVdMX1BPV0VSX01PREVfQ0FNKQotCQljbGVhcl9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7Ci0JZWxzZQotCQlzZXRfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGl3bDM5NDVfc2Nhbl9jYW5jZWwgLSBDYW5jZWwgYW55IGN1cnJlbnRseSBleGVjdXRpbmcgSFcgc2NhbgotICoKLSAqIE5PVEU6IHByaXYtPm11dGV4IGlzIG5vdCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQkJSVdMX0RFQlVHX1NDQU4oIlF1ZXVpbmcgc2NhbiBhYm9ydC5cbiIpOwotCQkJc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFib3J0X3NjYW4pOwotCi0JCX0gZWxzZQotCQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gYWJvcnQgYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwotCi0JCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dCAtIENhbmNlbCBhbnkgY3VycmVudGx5IGV4ZWN1dGluZyBIVyBzY2FuCi0gKiBAbXM6IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHNjYW4gdG8gYWJvcnQKLSAqCi0gKiBOT1RFOiBwcml2LT5tdXRleCBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG1zKQotewotCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaXdsMzk0NV9zY2FuX2NhbmNlbChwcml2KTsKLQlpZiAocmV0ICYmIG1zKSB7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgbm93ICsgbXNlY3NfdG9famlmZmllcyhtcykpICYmCi0JCQkJdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCW1zbGVlcCgxKTsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCX0KLQotCXJldHVybiByZXQ7CisJCQkJICAgIHByaXYtPnNoYXJlZF92aXJ0LAorCQkJCSAgICBwcml2LT5zaGFyZWRfcGh5cyk7CiB9CiAKICNkZWZpbmUgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTAkxMDI0Ci0jZGVmaW5lIElOVEVMX0NPTk5fTElTVEVOX0lOVEVSVkFMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhBKQorI2RlZmluZSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTAljcHVfdG9fbGUxNigweEEpCiAKIHN0YXRpYyBfX2xlMTYgaXdsMzk0NV9hZGp1c3RfYmVhY29uX2ludGVydmFsKHUxNiBiZWFjb25fdmFsKQogewpAQCAtMjA0Myw3ICs3MDUsNyBAQAogCXJldHVybiBjcHVfdG9fbGUxNihuZXdfdmFsKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTY0IGludGVydmFsX3RtX3VuaXQ7CiAJdTY0IHRzZiwgcmVzdWx0OwpAQCAtMjA1NCwxMyArNzE2LDEwIEBACiAJY29uZiA9IGllZWU4MDIxMV9nZXRfaHdfY29uZihwcml2LT5odyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcC5kd1sxXSA9IGNwdV90b19sZTMyKHByaXYtPnRpbWVzdGFtcDEpOwotCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcC5kd1swXSA9IGNwdV90b19sZTMyKHByaXYtPnRpbWVzdGFtcDApOwotCisJcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wID0gY3B1X3RvX2xlNjQocHJpdi0+dGltZXN0YW1wKTsKIAlwcml2LT5yeG9uX3RpbWluZy5saXN0ZW5faW50ZXJ2YWwgPSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTDsKIAotCXRzZiA9IHByaXYtPnRpbWVzdGFtcDE7Ci0JdHNmID0gKCh0c2YgPDwgMzIpIHwgcHJpdi0+dGltZXN0YW1wMCk7CisJdHNmID0gcHJpdi0+dGltZXN0YW1wOwogCiAJYmVhY29uX2ludCA9IHByaXYtPmJlYWNvbl9pbnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMjA5MiwxODMgKzc1MSw0MSBAQAogCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9CiAJICAgIGNwdV90b19sZTMyKCh1MzIpICgodTY0KSBpbnRlcnZhbF90bV91bml0IC0gcmVzdWx0KSk7CiAKLQlJV0xfREVCVUdfQVNTT0MKLQkgICAgKCJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsCisJCSJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCiAJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCksCiAJCWxlMzJfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCksCiAJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93KSk7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBub3QgcmVhZHkuXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gICIKLQkJCSAgICAgICAiUXVldWluZy5cbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlJV0xfREVCVUdfSU5GTygiU3RhcnRpbmcgc2Nhbi4uLlxuIik7Ci0JaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9HKQotCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF8yR0haKTsKLQlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpCi0JCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwotCXNldF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQlwcml2LT5zY2FuX3N0YXJ0ID0gamlmZmllczsKLQlwcml2LT5zY2FuX3Bhc3Nfc3RhcnQgPSBwcml2LT5zY2FuX3N0YXJ0OwotCi0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0KLQlpZiAoaHdfZGVjcnlwdCkKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0JZWxzZQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9Ci0JCSAgICB+KFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSwotCQkgICAgICB8IFJYT05fRkxHX0NDS19NU0spOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0JfSBlbHNlIHsKLQkJLyogQ29waWVkIGZyb20gaXdsMzk0NV9iZ19wb3N0X2Fzc29jaWF0ZSgpICovCi0JCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQkJZWxzZQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0FVVE9fREVURUNUX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19DQ0tfTVNLOwotCX0KLX0KLQotLyoKLSAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgaW50IG1vZGUpCi17Ci0JY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfQVA7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0VTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfSUJTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0sgfAotCQkJCQkJICBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfU05JRkZFUjsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLIHwKLQkJICAgIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyB8IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0jaWYgMAotCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCi0JICogdGhhdCAqLwotCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotI2VuZGlmCi0KLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsCi0JCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKLQotCWlmICghY2hfaW5mbykKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQkvKgotCSAqIGluIHNvbWUgY2FzZSBBIGNoYW5uZWxzIGFyZSBhbGwgbm9uIElCU1MKLQkgKiBpbiB0aGlzIGNhc2UgZm9yY2UgQi9HIGNoYW5uZWwKLQkgKi8KLQlpZiAoKG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmICEoaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSkKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoX2luZm8tPmNoYW5uZWwpOwotCWlmIChpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSkKLQkJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0JZWxzZQotCQlwcml2LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQotCWl3bDM5NDVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHByaXYsIHByaXYtPmJhbmQpOwotCi0JcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NldF9tb2RlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBtb2RlKQorc3RhdGljIGludCBpd2wzOTQ1X3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7CiAJaWYgKG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCQljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAotCQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAogCQkJcHJpdi0+YmFuZCwKIAkJCWxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSk7CiAKIAkJaWYgKCFjaF9pbmZvIHx8ICFpc19jaGFubmVsX2lic3MoY2hfaW5mbykpIHsKLQkJCUlXTF9FUlJPUigiY2hhbm5lbCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAorCQkJSVdMX0VSUihwcml2LCAiY2hhbm5lbCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAogCQkJCSAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi0JaXdsMzk0NV9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIG1vZGUpOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIG1vZGUpOwogCiAJaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAogCS8qIGRvbid0IGNvbW1pdCByeG9uIGlmIHJmLWtpbGwgaXMgb24qLwotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKLQlpZiAoaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKKwkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApAQCAtMjI3Nyw0OSArNzk0LDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJCSAgICAgIHN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAorCQkJCSAgICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYl9mcmFnLAotCQkJCSAgICAgIGludCBsYXN0X2ZyYWcpCisJCQkJICAgICAgaW50IHN0YV9pZCkKIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKnR4ID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqKWNtZC0+Y21kLnBheWxvYWQ7CiAJc3RydWN0IGl3bDM5NDVfaHdfa2V5ICprZXlpbmZvID0KLQkgICAgJnByaXYtPnN0YXRpb25zW2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4XS5rZXlpbmZvOworCSAgICAmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvOwogCiAJc3dpdGNoIChrZXlpbmZvLT5hbGcpIHsKIAljYXNlIEFMR19DQ01QOgotCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19DQ007Ci0JCW1lbWNweShjbWQtPmNtZC50eC5rZXksIGtleWluZm8tPmtleSwga2V5aW5mby0+a2V5bGVuKTsKLQkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCBBRVMgaHdjcnlwdG9cbiIpOworCQl0eC0+c2VjX2N0bCA9IFRYX0NNRF9TRUNfQ0NNOworCQltZW1jcHkodHgtPmtleSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOworCQlJV0xfREVCVUdfVFgocHJpdiwgInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfVEtJUDoKLSNpZiAwCi0JCWNtZC0+Y21kLnR4LnNlY19jdGwgPSBUWF9DTURfU0VDX1RLSVA7Ci0KLQkJaWYgKGxhc3RfZnJhZykKLQkJCW1lbWNweShjbWQtPmNtZC50eC50a2lwX21pYy5ieXRlLCBza2JfZnJhZy0+dGFpbCAtIDgsCi0JCQkgICAgICAgOCk7Ci0JCWVsc2UKLQkJCW1lbXNldChjbWQtPmNtZC50eC50a2lwX21pYy5ieXRlLCAwLCA4KTsKLSNlbmRpZgogCQlicmVhazsKIAogCWNhc2UgQUxHX1dFUDoKLQkJY21kLT5jbWQudHguc2VjX2N0bCA9IFRYX0NNRF9TRUNfV0VQIHwKKwkJdHgtPnNlY19jdGwgPSBUWF9DTURfU0VDX1dFUCB8CiAJCSAgICAoaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHggJiBUWF9DTURfU0VDX01TSykgPDwgVFhfQ01EX1NFQ19TSElGVDsKIAogCQlpZiAoa2V5aW5mby0+a2V5bGVuID09IDEzKQotCQkJY21kLT5jbWQudHguc2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKKwkJCXR4LT5zZWNfY3RsIHw9IFRYX0NNRF9TRUNfS0VZMTI4OwogCi0JCW1lbWNweSgmY21kLT5jbWQudHgua2V5WzNdLCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7CisJCW1lbWNweSgmdHgtPmtleVszXSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOwogCi0JCUlXTF9ERUJVR19UWCgiQ29uZmlndXJpbmcgcGFja2V0IGZvciBXRVAgZW5jcnlwdGlvbiAiCisJCUlXTF9ERUJVR19UWChwcml2LCAiQ29uZmlndXJpbmcgcGFja2V0IGZvciBXRVAgZW5jcnlwdGlvbiAiCiAJCQkgICAgICJ3aXRoIGtleSAlZFxuIiwgaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXlpbmZvLT5hbGcpOworCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWluZm8tPmFsZyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTIzMjcsMTcgKzgzNiwxNyBAQAogLyoKICAqIGhhbmRsZSBidWlsZCBSRVBMWV9UWCBjb21tYW5kIG5vdGlmaWNhdGlvbi4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfYmFzaWMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAorc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfYmFzaWMoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGl3bF9jbWQgKmNtZCwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJICBpbnQgaXNfdW5pY2FzdCwgdTggc3RkX2lkKQorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTggc3RkX2lkKQogeworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKKwlfX2xlMzIgdHhfZmxhZ3MgPSB0eC0+dHhfZmxhZ3M7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCV9fbGUzMiB0eF9mbGFncyA9IGNtZC0+Y21kLnR4LnR4X2ZsYWdzOwogCXU4IHJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKIAotCWNtZC0+Y21kLnR4LnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOworCXR4LT5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKIAlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgewogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0FDS19NU0s7CiAJCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpCkBAIC0yMzUwLDEzICs4NTksMTMgQEAKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKIAl9CiAKLQljbWQtPmNtZC50eC5zdGFfaWQgPSBzdGRfaWQ7CisJdHgtPnN0YV9pZCA9IHN0ZF9pZDsKIAlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpKQogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX01PUkVfRlJBR19NU0s7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJY21kLT5jbWQudHgudGlkX3RzcGVjID0gcWNbMF0gJiAweGY7CisJCXR4LT50aWRfdHNwZWMgPSBxY1swXSAmIDB4ZjsKIAkJdHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7CiAJfSBlbHNlIHsKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKQEAgLTIzNzYsMjUgKzg4NSwyNSBAQAogCXR4X2ZsYWdzICY9IH4oVFhfQ01EX0ZMR19BTlRfU0VMX01TSyk7CiAJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgewogCQlpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykgfHwgaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDMpOworCQkJdHgtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDMpOwogCQllbHNlCi0JCQljbWQtPmNtZC50eC50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigyKTsKKwkJCXR4LT50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigyKTsKIAl9IGVsc2UgewotCQljbWQtPmNtZC50eC50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSAwOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKKwkJdHgtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IDA7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCQlwcml2LT5yeHR4cGFja2V0cyArPSBsZTE2X3RvX2NwdShjbWQtPmNtZC50eC5sZW4pOwogI2VuZGlmCiAJfQogCi0JY21kLT5jbWQudHguZHJpdmVyX3R4b3AgPSAwOwotCWNtZC0+Y21kLnR4LnR4X2ZsYWdzID0gdHhfZmxhZ3M7Ci0JY21kLT5jbWQudHgubmV4dF9mcmFtZV9sZW4gPSAwOworCXR4LT5kcml2ZXJfdHhvcCA9IDA7CisJdHgtPnR4X2ZsYWdzID0gdHhfZmxhZ3M7CisJdHgtPm5leHRfZnJhbWVfbGVuID0gMDsKIH0KIAogLyoqCiAgKiBpd2wzOTQ1X2dldF9zdGFfaWQgLSBGaW5kIHN0YXRpb24ncyBpbmRleCB3aXRoaW4gc3RhdGlvbiB0YWJsZQogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQorc3RhdGljIGludCBpd2wzOTQ1X2dldF9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCWludCBzdGFfaWQ7CiAJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKQEAgLTI0MDIsNyArOTExLDcgQEAKIAkvKiBJZiB0aGlzIGZyYW1lIGlzIGJyb2FkY2FzdCBvciBtYW5hZ2VtZW50LCB1c2UgYnJvYWRjYXN0IHN0YXRpb24gaWQgKi8KIAlpZiAoKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAKIAlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKIApAQCAtMjQxNiw3ICs5MjUsNyBAQAogCQlzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJcmV0dXJuIHN0YV9pZDsKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCS8qIElmIHRoaXMgZnJhbWUgaXMgZ29pbmcgb3V0IHRvIGFuIElCU1MgbmV0d29yaywgZmluZCB0aGUgc3RhdGlvbiwKIAkgKiBvciBjcmVhdGUgYSBuZXcgc3RhdGlvbiB0YWJsZSBlbnRyeSAqLwpAQCAtMjQzMSwzOCArOTQwLDM4IEBACiAJCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikKIAkJCXJldHVybiBzdGFfaWQ7CiAKLQkJSVdMX0RFQlVHX0RST1AoIlN0YXRpb24gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCiAJCQkgICAgICAgIkRlZmF1bHRpbmcgdG8gYnJvYWRjYXN0Li4uXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwotCQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9EUk9QLCAodTggKikgaGRyLCBzaXplb2YoKmhkcikpOwotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfRFJPUCwgKHU4ICopIGhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJfQogCS8qIElmIHdlIGFyZSBpbiBtb25pdG9yIG1vZGUsIHVzZSBCQ0FTVC4gVGhpcyBpcyByZXF1aXJlZCBmb3IKIAkgKiBwYWNrZXQgaW5qZWN0aW9uLiAqLwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZFxuIiwgcHJpdi0+aXdfbW9kZSk7Ci0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJSVdMX1dBUk4ocHJpdiwgIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLAorCQkJcHJpdi0+aXdfbW9kZSk7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCX0KIH0KIAogLyoKICAqIHN0YXJ0IFJFUExZX1RYIGNvbW1hbmQgcHJvY2VzcwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdHhfc2tiKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKnRmZDsKLQl1MzIgKmNvbnRyb2xfZmxhZ3M7Ci0JaW50IHR4cV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSBOVUxMOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gTlVMTDsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKnR4OworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9IE5VTEw7CisJc3RydWN0IGl3bF9xdWV1ZSAqcSA9IE5VTEw7CisJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQgPSBOVUxMOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKm91dF9jbWQgPSBOVUxMOworCWludCB0eHFfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl1MTYgbGVuLCBpZHgsIGxlbl9vcmcsIGhkcl9sZW47CiAJdTggaWQ7CiAJdTggdW5pY2FzdDsKQEAgLTI0NzYsMTMgKzk4NSwxMyBAQAogCWludCByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIFJGIEtJTExcbiIpOworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIFJGIEtJTExcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIAogCWlmICgoaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWUgJiAweEZGKSA9PSBJV0xfSU5WQUxJRF9SQVRFKSB7Ci0JCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtMjQ5MSwyMSArMTAwMCwyMSBAQAogCiAJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CiAjZW5kaWYKIAogCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSAmJgogCSAgICAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSAmJiAvKiBwYWNrZXQgaW5qZWN0aW9uICovCi0JICAgICghaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpIHx8CisJICAgICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwKIAkgICAgICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJiAhcHJpdi0+YXNzb2NfaWQpKSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsMzk0NV9pc19hc3NvY2lhdGVkXG4iKTsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gIWl3bF9pc19hc3NvY2lhdGVkXG4iKTsKIAkJZ290byBkcm9wX3VubG9jazsKIAl9CiAKQEAgLTI1MTYsMjEgKzEwMjUsMjEgQEAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwogCXN0YV9pZCA9IGl3bDM5NDVfZ2V0X3N0YV9pZChwcml2LCBoZHIpOwogCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCiAJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlJV0xfREVCVUdfUkFURSgic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXRpZCA9IHFjWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Ci0JCXNlcV9udW1iZXIgPSBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgJgorCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyICYKIAkJCQlJRUVFODAyMTFfU0NUTF9TRVE7CiAJCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihzZXFfbnVtYmVyKSB8CiAJCQkoaGRyLT5zZXFfY3RybCAmCi0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKSk7CisJCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpOwogCQlzZXFfbnVtYmVyICs9IDB4MTA7CiAJfQogCkBAIC0yNTQwLDIwICsxMDQ5LDE3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JLyogU2V0IHVwIGZpcnN0IGVtcHR5IFRGRCB3aXRoaW4gdGhpcyBxdWV1ZSdzIGNpcmN1bGFyIFRGRCBidWZmZXIgKi8KLQl0ZmQgPSAmdHhxLT5iZFtxLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0JY29udHJvbF9mbGFncyA9ICh1MzIgKikgdGZkOwogCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCAwKTsKIAogCS8qIFNldCB1cCBkcml2ZXIgZGF0YSBmb3IgdGhpcyBURkQgKi8KLQltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4X2luZm8pKTsKKwltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHhfaW5mbykpOwogCXR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc2tiWzBdID0gc2tiOwogCiAJLyogSW5pdCBmaXJzdCBlbXB0eSBlbnRyeSBpbiBxdWV1ZSdzIGFycmF5IG9mIFR4L2NtZCBidWZmZXJzICovCi0Jb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOworCW91dF9jbWQgPSB0eHEtPmNtZFtpZHhdOworCXR4ID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqKW91dF9jbWQtPmNtZC5wYXlsb2FkOwogCW1lbXNldCgmb3V0X2NtZC0+aGRyLCAwLCBzaXplb2Yob3V0X2NtZC0+aGRyKSk7Ci0JbWVtc2V0KCZvdXRfY21kLT5jbWQudHgsIDAsIHNpemVvZihvdXRfY21kLT5jbWQudHgpKTsKKwltZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTsKIAogCS8qCiAJICogU2V0IHVwIHRoZSBUeC1jb21tYW5kIChub3QgTUFDISkgaGVhZGVyLgpAQCAtMjU2Niw3ICsxMDcyLDcgQEAKIAkJCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSkpOwogCiAJLyogQ29weSBNQUMgaGVhZGVyIGZyb20gc2tiIGludG8gY29tbWFuZCBidWZmZXIgKi8KLQltZW1jcHkob3V0X2NtZC0+Y21kLnR4LmhkciwgaGRyLCBoZHJfbGVuKTsKKwltZW1jcHkodHgtPmhkciwgaGRyLCBoZHJfbGVuKTsKIAogCS8qCiAJICogVXNlIHRoZSBmaXJzdCBlbXB0eSBlbnRyeSBpbiB0aGlzIHF1ZXVlJ3MgY29tbWFuZCBidWZmZXIgYXJyYXkKQEAgLTI1NzcsOCArMTA4Myw4IEBACiAJICogb2YgdGhlIE1BQyBoZWFkZXIgKGRldmljZSByZWFkcyBvbiBkd29yZCBib3VuZGFyaWVzKS4KIAkgKiBXZSdsbCB0ZWxsIGRldmljZSBhYm91dCB0aGlzIHBhZGRpbmcgbGF0ZXIuCiAJICovCi0JbGVuID0gcHJpdi0+aHdfc2V0dGluZy50eF9jbWRfbGVuICsKLQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKKwlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhfY21kKSArCisJCQlzaXplb2Yoc3RydWN0IGl3bF9jbWRfaGVhZGVyKSArIGhkcl9sZW47CiAKIAlsZW5fb3JnID0gbGVuOwogCWxlbiA9IChsZW4gKyAzKSAmIH4zOwpAQCAtMjU5MCwxNSArMTA5NiwyMiBAQAogCiAJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIFR4IGNvbW1hbmQncyBoZWFkZXIgKG5vdCBNQUMgaGVhZGVyISksCiAJICogd2l0aGluIGNvbW1hbmQgYnVmZmVyIGFycmF5LiAqLwotCXR4Y21kX3BoeXMgPSB0eHEtPmRtYV9hZGRyX2NtZCArIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9jbWQpICogaWR4ICsKLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaXdsMzk0NV9jbWQsIGhkcik7CisJdHhjbWRfcGh5cyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCisJCQkJICAgIG91dF9jbWQsIHNpemVvZihzdHJ1Y3QgaXdsX2NtZCksCisJCQkJICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCXBjaV91bm1hcF9hZGRyX3NldCgmb3V0X2NtZC0+bWV0YSwgbWFwcGluZywgdHhjbWRfcGh5cyk7CisJcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSk7CisJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKKwkgKiBmaXJzdCBlbnRyeSAqLworCXR4Y21kX3BoeXMgKz0gb2Zmc2V0b2Yoc3RydWN0IGl3bF9jbWQsIGhkcik7CiAKIAkvKiBBZGQgYnVmZmVyIGNvbnRhaW5pbmcgVHggY29tbWFuZCBhbmQgTUFDKCEpIGhlYWRlciB0byBURkQncwogCSAqIGZpcnN0IGVudHJ5ICovCi0JaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCB0eGNtZF9waHlzLCBsZW4pOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkgICB0eGNtZF9waHlzLCBsZW4sIDEsIDApOwogCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQotCQlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhwcml2LCBpbmZvLCBvdXRfY21kLCBza2IsIDApOworCQlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhwcml2LCBpbmZvLCBvdXRfY21kLCBza2IsIHN0YV9pZCk7CiAKIAkvKiBTZXQgdXAgVEZEJ3MgMm5kIGVudHJ5IHRvIHBvaW50IGRpcmVjdGx5IHRvIHJlbWFpbmRlciBvZiBza2IsCiAJICogaWYgYW55ICg4MDIuMTEgbnVsbCBmcmFtZXMgaGF2ZSBubyBwYXlsb2FkKS4gKi8KQEAgLTI2MDYsNjAgKzExMTksNTIgQEAKIAlpZiAobGVuKSB7CiAJCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHNrYi0+ZGF0YSArIGhkcl9sZW4sCiAJCQkJCSAgIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBsZW4pOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJCSAgIHBoeXNfYWRkciwgbGVuLAorCQkJCQkJCSAgIDAsIFUzMl9QQUQobGVuKSk7CiAJfQogCi0JaWYgKCFsZW4pCi0JCS8qIElmIHRoZXJlIGlzIG5vIHBheWxvYWQsIHRoZW4gd2UgdXNlIG9ubHkgb25lIFR4IGJ1ZmZlciAqLwotCQkqY29udHJvbF9mbGFncyA9IFRGRF9DVExfQ09VTlRfU0VUKDEpOwotCWVsc2UKLQkJLyogRWxzZSB1c2UgMiBidWZmZXJzLgotCQkgKiBUZWxsIDM5NDUgYWJvdXQgYW55IHBhZGRpbmcgYWZ0ZXIgTUFDIGhlYWRlciAqLwotCQkqY29udHJvbF9mbGFncyA9IFRGRF9DVExfQ09VTlRfU0VUKDIpIHwKLQkJCVRGRF9DVExfUEFEX1NFVChVMzJfUEFEKGxlbikpOwotCiAJLyogVG90YWwgIyBieXRlcyB0byBiZSB0cmFuc21pdHRlZCAqLwogCWxlbiA9ICh1MTYpc2tiLT5sZW47Ci0Jb3V0X2NtZC0+Y21kLnR4LmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJdHgtPmxlbiA9IGNwdV90b19sZTE2KGxlbik7CiAKIAkvKiBUT0RPIG5lZWQgdGhpcyBmb3IgYnVyc3QgbW9kZSBsYXRlciBvbiAqLwotCWl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHByaXYsIG91dF9jbWQsIGluZm8sIGhkciwgdW5pY2FzdCwgc3RhX2lkKTsKKwlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhwcml2LCBvdXRfY21kLCBpbmZvLCBoZHIsIHN0YV9pZCk7CiAKIAkvKiBzZXQgaXNfaGNjYSB0byAwOyBpdCBwcm9iYWJseSB3aWxsIG5ldmVyIGJlIGltcGxlbWVudGVkICovCiAJaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShwcml2LCBvdXRfY21kLCBpbmZvLCBoZHIsIHN0YV9pZCwgMCk7CiAKLQlvdXRfY21kLT5jbWQudHgudHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0FfTVNLOwotCW91dF9jbWQtPmNtZC50eC50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQl9NU0s7CisJdHgtPnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0FOVF9BX01TSzsKKwl0eC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0JfTVNLOwogCiAJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAxOwogCQlpZiAocWMpCi0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOworCQkJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKIAl9IGVsc2UgewogCQl3YWl0X3dyaXRlX3B0ciA9IDE7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAwOwogCX0KIAotCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1RYLCBvdXRfY21kLT5jbWQucGF5bG9hZCwKLQkJCSAgIHNpemVvZihvdXRfY21kLT5jbWQudHgpKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1RYLCB0eCwgc2l6ZW9mKCp0eCkpOwogCi0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfVFgsICh1OCAqKW91dF9jbWQtPmNtZC50eC5oZHIsCisJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9UWCwgKHU4ICopdHgtPmhkciwKIAkJCSAgIGllZWU4MDIxMV9oZHJsZW4oZmMpKTsKIAogCS8qIFRlbGwgZGV2aWNlIHRoZSB3cml0ZSBpbmRleCAqanVzdCBwYXN0KiB0aGlzIGxhdGVzdCBmaWxsZWQgVEZEICovCiAJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7Ci0JcmMgPSBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKwlyYyA9IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKQorCWlmICgoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKQogCSAgICAmJiBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKSB7CiAJCWlmICh3YWl0X3dyaXRlX3B0cikgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJCXR4cS0+bmVlZF91cGRhdGUgPSAxOwotCQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CisJCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJfQogCkBAIC0yNjc0LDE0MiArMTE3OSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlpbnQgaTsKLQotCXNiYW5kID0gaXdsMzk0NV9nZXRfYmFuZChwcml2LCBwcml2LT5iYW5kKTsKLQlpZiAoIXNiYW5kKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSAwOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKLQotCUlXTF9ERUJVR19SQVRFKCJTZXR0aW5nIHJhdGVzIGZvciAlcyBHSHpcbiIsCi0JCSAgICAgICBzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haID8gIjIuNCIgOiAiNSIpOwotCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWlmICgocmF0ZS0+aHdfdmFsdWUgPCBJV0xfUkFURV9DT1VOVCkgJiYKLQkJICAgICEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJBZGRpbmcgcmF0ZSBpbmRleCAlZCAocGxjcCAlZClcbiIsCi0JCQkJICAgICAgIHJhdGUtPmh3X3ZhbHVlLCBpd2wzOTQ1X3JhdGVzW3JhdGUtPmh3X3ZhbHVlXS5wbGNwKTsKLQkJCXByaXYtPmFjdGl2ZV9yYXRlIHw9ICgxIDw8IHJhdGUtPmh3X3ZhbHVlKTsKLQkJfQotCX0KLQotCUlXTF9ERUJVR19SQVRFKCJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAotCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKLQotCS8qCi0JICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKLQkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKLQkgKiBPRkRNCi0JICovCi0JaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgotCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yYWRpb19raWxsX3N3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISFkaXNhYmxlX3JhZGlvID09IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gJXNcbiIsCi0JCQkgIGRpc2FibGVfcmFkaW8gPyAiT0ZGIiA6ICJPTiIpOwotCi0JaWYgKGRpc2FibGVfcmFkaW8pIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbChwcml2KTsKLQkJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwotCQlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCi0JCQkJICAgIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDM5NDVfc2VuZF9jYXJkX3N0YXRlKHByaXYsIENBUkRfU1RBVEVfQ01EX0RJU0FCTEUsIDApOwotCQkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCi0JY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiB3YWtlIHVwIHVjb2RlICovCi0JbXNsZWVwKDEwKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCWlmICghaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikpCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgotCQkJCSAgImRpc2FibGVkIGJ5IEhXIHN3aXRjaFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocHJpdi0+aXNfb3BlbikKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICB1MzIgZGVjcnlwdF9yZXMsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKLXsKLQl1MTYgZmMgPQotCSAgICBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhKS0+ZnJhbWVfY29udHJvbCk7Ci0KLQlpZiAocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLKQotCQlyZXR1cm47Ci0KLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpCi0JCXJldHVybjsKLQotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9yZXM6MHgleFxuIiwgZGVjcnlwdF9yZXMpOwotCXN3aXRjaCAoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgewotCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQOgotCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQotCQkgICAgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQykKLQkJCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQOgotCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QOgotCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQotCQkgICAgUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LKSB7Ci0JCQlJV0xfREVCVUdfUlgoImh3IGRlY3J5cHQgc3VjY2Vzc2Z1bGx5ISEhXG4iKTsKLQkJCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCiAjaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAogI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgpAQCAtMjg2MywxMyArMTIzMiwxMyBAQAogCXJldHVybiBjcHVfdG9fbGUzMihyZXMpOwogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgICAgIHU4IHR5cGUpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fY21kIHNwZWN0cnVtOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX3NwZWN0cnVtX2NtZCBzcGVjdHJ1bTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzOworCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQsCiAJCS5kYXRhID0gKHZvaWQgKikmc3BlY3RydW0sCiAJCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLApAQCAtMjg3OSw3ICsxMjQ4LDcgQEAKIAlpbnQgc3BlY3RydW1fcmVzcF9zdGF0dXM7CiAJaW50IGR1cmF0aW9uID0gbGUxNl90b19jcHUocGFyYW1zLT5kdXJhdGlvbik7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKQorCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKIAkJYWRkX3RpbWUgPQogCQkgICAgaXdsMzk0NV91c2Vjc190b19iZWFjb25zKAogCQkJbGU2NF90b19jcHUocGFyYW1zLT5zdGFydF90aW1lKSAtIHByaXYtPmxhc3RfdHNmLApAQCAtMjg5NCw3ICsxMjYzLDcgQEAKIAljbWQubGVuID0gc2l6ZW9mKHNwZWN0cnVtKTsKIAlzcGVjdHJ1bS5sZW4gPSBjcHVfdG9fbGUxNihjbWQubGVuIC0gc2l6ZW9mKHNwZWN0cnVtLmxlbikpOwogCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCXNwZWN0cnVtLnN0YXJ0X3RpbWUgPQogCQkgICAgaXdsMzk0NV9hZGRfYmVhY29uX3RpbWUocHJpdi0+bGFzdF9iZWFjb25fdGltZSwKIAkJCQlhZGRfdGltZSwKQEAgLTI5MDksMTMgKzEyNzgsMTMgQEAKIAkJc3BlY3RydW0uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwKIAkJICAgIFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8IFJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKIAotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CiAJCXJjID0gLUVJTzsKIAl9CiAKQEAgLTI5MjMsNyArMTI5Miw3IEBACiAJc3dpdGNoIChzcGVjdHJ1bV9yZXNwX3N0YXR1cykgewogCWNhc2UgMDoJCS8qIENvbW1hbmQgd2lsbCBiZSBoYW5kbGVkICovCiAJCWlmIChyZXMtPnUuc3BlY3RydW0uaWQgIT0gMHhmZikgewotCQkJSVdMX0RFQlVHX0lORk8oIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCiAJCQkJCQlyZXMtPnUuc3BlY3RydW0uaWQpOwogCQkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzICY9IH5NRUFTVVJFTUVOVF9SRUFEWTsKIAkJfQpAQCAtMjk0MiwzMCArMTMxMSwyOSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfYWxpdmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCAqcGFsaXZlOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCAqcGFsaXZlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgKnB3b3JrOwogCiAJcGFsaXZlID0gJnBrdC0+dS5hbGl2ZV9mcmFtZTsKIAotCUlXTF9ERUJVR19JTkZPKCJBbGl2ZSB1Y29kZSBzdGF0dXMgMHglMDhYIHJldmlzaW9uICIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCiAJCSAgICAgICAiMHglMDFYIDB4JTAxWFxuIiwKIAkJICAgICAgIHBhbGl2ZS0+aXNfdmFsaWQsIHBhbGl2ZS0+dmVyX3R5cGUsCiAJCSAgICAgICBwYWxpdmUtPnZlcl9zdWJ0eXBlKTsKIAogCWlmIChwYWxpdmUtPnZlcl9zdWJ0eXBlID09IElOSVRJQUxJWkVfU1VCVFlQRSkgewotCQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKLQkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsCi0JCSAgICAgICAmcGt0LT51LmFsaXZlX2ZyYW1lLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2luaXRfYWxpdmVfcmVzcCkpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsICZwa3QtPnUuYWxpdmVfZnJhbWUsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmluaXRfYWxpdmVfc3RhcnQ7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlLCAmcGt0LT51LmFsaXZlX2ZyYW1lLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3ApKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApKTsKIAkJcHdvcmsgPSAmcHJpdi0+YWxpdmVfc3RhcnQ7CiAJCWl3bDM5NDVfZGlzYWJsZV9ldmVudHMocHJpdik7CiAJfQpAQCAtMjk3Niw5NSArMTM0NCwzMSBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCBwd29yaywKIAkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUpKTsKIAllbHNlCi0JCUlXTF9XQVJOSU5HKCJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgInVDb2RlIGRpZCBub3QgcmVzcG9uZCBPSy5cbiIpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FkZF9zdGEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisjZW5kaWYKIAotCUlXTF9ERUJVR19SWCgiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTogMHglMDJYXG4iLCBwa3QtPnUuc3RhdHVzKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6IDB4JTAyWFxuIiwgcGt0LT51LnN0YXR1cyk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQotCUlXTF9FUlJPUigiRXJyb3IgUmVwbHkgdHlwZSAweCUwOFggY21kICVzICgweCUwMlgpICIKLQkJInNlcSAweCUwNFggc2VyIDB4JTA4WFxuIiwKLQkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX3R5cGUpLAotCQlnZXRfY21kX3N0cmluZyhwa3QtPnUuZXJyX3Jlc3AuY21kX2lkKSwKLQkJcGt0LT51LmVycl9yZXNwLmNtZF9pZCwKLQkJbGUxNl90b19jcHUocGt0LT51LmVycl9yZXNwLmJhZF9jbWRfc2VxX251bSksCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl9pbmZvKSk7Ci19Ci0KLSNkZWZpbmUgVFhfU1RBVFVTX0VOVFJZKHgpIGNhc2UgVFhfU1RBVFVTX0ZBSUxfICMjIHg6IHJldHVybiAjeAotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2NzYShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0Jc3RydWN0IGl3bDM5NDVfY3NhX25vdGlmaWNhdGlvbiAqY3NhID0gJihwa3QtPnUuY3NhX25vdGlmKTsKLQlJV0xfREVCVUdfMTFIKCJDU0Egbm90aWY6IGNoYW5uZWwgJWQsIHN0YXR1cyAlZFxuIiwKLQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSwgbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpKTsKLQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uICpyZXBvcnQgPSAmKHBrdC0+dS5zcGVjdHJ1bV9ub3RpZik7Ci0KLQlpZiAoIXJlcG9ydC0+c3RhdGUpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF8xMUggfCBJV0xfRExfSU5GTywKLQkJCSAgIlNwZWN0cnVtIE1lYXN1cmUgTm90aWZpY2F0aW9uOiBTdGFydFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoJnByaXYtPm1lYXN1cmVfcmVwb3J0LCByZXBvcnQsIHNpemVvZigqcmVwb3J0KSk7Ci0JcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzIHw9IE1FQVNVUkVNRU5UX1JFQURZOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOwotCUlXTF9ERUJVR19SWCgic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCi0JCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SQURJTygiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgotCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAotCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SQURJTywgcGt0LT51LnJhdywgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIGJlYWNvbl91cGRhdGUpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGJlYWNvbl91cGRhdGUpOwogCXN0cnVjdCBza19idWZmICpiZWFjb247CiAKIAkvKiBQdWxsIHVwZGF0ZWQgQVAgYmVhY29uIGZyb20gbWFjODAyMTEuIHdpbGwgZmFpbCBpZiBub3QgaW4gQVAgbW9kZSAqLwogCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYpOwogCiAJaWYgKCFiZWFjb24pIHsKLQkJSVdMX0VSUk9SKCJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVwZGF0ZSBiZWFjb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzA3OSwxNSArMTM4MywxNSBAQAogCWl3bDM5NDVfc2VuZF9iZWFjb25fY21kKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfYmVhY29uX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiAqYmVhY29uID0gJihwa3QtPnUuYmVhY29uX3N0YXR1cyk7CiAJdTggcmF0ZSA9IGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIucmF0ZTsKIAotCUlXTF9ERUJVR19SWCgiYmVhY29uIHN0YXR1cyAleCByZXRyaWVzICVkIGlzcyAlZCAiCisJSVdMX0RFQlVHX1JYKHByaXYsICJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKIAkJInRzZiAlZCAlZCByYXRlICVkXG4iLAogCQlsZTMyX3RvX2NwdShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnN0YXR1cykgJiBUWF9TVEFUVVNfTVNLLAogCQliZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLmZhaWx1cmVfZnJhbWUsCkBAIC0zMTAxLDEzNyArMTQwNSwyMCBAQAogCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmJlYWNvbl91cGRhdGUpOwogfQogCi0vKiBTZXJ2aWNlIHJlc3BvbnNlIHRvIFJFUExZX1NDQU5fQ01EICgweDgwKSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9zY2FuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2NhbnJlcV9ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQotCUlXTF9ERUJVR19SWCgiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOwotI2VuZGlmCi19Ci0KLS8qIFNlcnZpY2UgU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gKDB4ODIpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQlwcml2LT5zY2FuX3N0YXJ0X3RzZiA9IGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KTsKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBzdGFydDogIgotCQkgICAgICAgIiVkIFs4MDIuMTElc10gIgotCQkgICAgICAgIihUU0Y6IDB4JTA4WDolMDhYKSAtICVkIChiZWFjb24gdGltZXIgJXUpXG4iLAotCQkgICAgICAgbm90aWYtPmNoYW5uZWwsCi0JCSAgICAgICBub3RpZi0+YmFuZCA/ICJiZyIgOiAiYSIsCi0JCSAgICAgICBub3RpZi0+dHNmX2hpZ2gsCi0JCSAgICAgICBub3RpZi0+dHNmX2xvdywgbm90aWYtPnN0YXR1cywgbm90aWYtPmJlYWNvbl90aW1lcik7Ci19Ci0KLS8qIFNlcnZpY2UgU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTiAoMHg4MykgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfc2Nhbl9yZXN1bHRzX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2wzOTQ1X3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjaC5yZXM6ICIKLQkJICAgICAgICIlZCBbODAyLjExJXNdICIKLQkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCi0JCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKLQkJICAgICAgIG5vdGlmLT5jaGFubmVsLAotCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAotCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9oaWdoKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT5zdGF0aXN0aWNzWzBdKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSAtIHByaXYtPnNjYW5fc3RhcnRfdHNmLAotCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKLQkJCQkJKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkpOwotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLX0KLQotLyogU2VydmljZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiAoMHg4NCkgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfc2Nhbl9jb21wbGV0ZV9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gKnNjYW5fbm90aWYgPSAodm9pZCAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKLQkJICAgICAgIHNjYW5fbm90aWYtPnNjYW5uZWRfY2hhbm5lbHMsCi0JCSAgICAgICBzY2FuX25vdGlmLT50c2ZfbG93LAotCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2hpZ2gsIHNjYW5fbm90aWYtPnN0YXR1cyk7Ci0KLQkvKiBUaGUgSFcgaXMgbm8gbG9uZ2VyIHNjYW5uaW5nICovCi0JY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIFRoZSBzY2FuIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIGNhbWUgaW4sIHNvIGtpbGwgdGhhdCB0aW1lci4uLiAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCi0JSVdMX0RFQlVHX0lORk8oIlNjYW4gcGFzcyBvbiAlc0dIeiB0b29rICVkbXNcbiIsCi0JCSAgICAgICAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkgPwotCQkJCQkJCSIyLjQiIDogIjUuMiIsCi0JCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwotCQkJCQkocHJpdi0+c2Nhbl9wYXNzX3N0YXJ0LCBqaWZmaWVzKSkpOwotCi0JLyogUmVtb3ZlIHRoaXMgc2Nhbm5lZCBiYW5kIGZyb20gdGhlIGxpc3Qgb2YgcGVuZGluZwotCSAqIGJhbmRzIHRvIHNjYW4sIGJhbmQgRyBwcmVjZWRlcyBBIGluIG9yZGVyIG9mIHNjYW5uaW5nCi0JICogYXMgc2VlbiBpbiBpd2wzOTQ1X2JnX3JlcXVlc3Rfc2NhbiAqLwotCWlmIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKQotCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JZWxzZSBpZiAocHJpdi0+c2Nhbl9iYW5kcyAmICBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikpCi0JCXByaXYtPnNjYW5fYmFuZHMgJj0gfkJJVChJRUVFODAyMTFfQkFORF81R0haKTsKLQotCS8qIElmIGEgcmVxdWVzdCB0byBhYm9ydCB3YXMgZ2l2ZW4sIG9yIHRoZSBzY2FuIGRpZCBub3Qgc3VjY2VlZAotCSAqIHRoZW4gd2UgcmVzZXQgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBhbmQgdGVybWluYXRlLAotCSAqIHJlLXF1ZXVpbmcgYW5vdGhlciBzY2FuIGlmIG9uZSBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlcmUgYXJlIG1vcmUgYmFuZHMgb24gdGhpcyBzY2FuIHBhc3MgcmVzY2hlZHVsZSAqLwotCQlpZiAocHJpdi0+c2Nhbl9iYW5kcyA+IDApCi0JCQlnb3RvIHJlc2NoZWR1bGU7Ci0JfQotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLQlJV0xfREVCVUdfSU5GTygiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7Ci0KLQljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHRvb2sgJWRtc1xuIiwKLQkJamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMocHJpdi0+c2Nhbl9zdGFydCwgamlmZmllcykpKTsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCi0JcmV0dXJuOwotCi1yZXNjaGVkdWxlOgotCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IGppZmZpZXM7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotfQotCiAvKiBIYW5kbGUgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUgdGhhdCBjYXJkJ3MgcG93ZXIgc3RhdGUgaXMgY2hhbmdpbmcKICAqIGR1ZSB0byBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGNyaXRpY2FsIHRlbXBlcmF0dXJlIFJGS0lMTCAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9jYXJkX3N0YXRlX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAogCQkJICAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIsCiAJCQkgIChmbGFncyAmIFNXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIik7CiAKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAorCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAKIAlpZiAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKQpAQCAtMzI0NSw3ICsxNDMyLDcgQEAKIAllbHNlCiAJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7CiAKLQlpd2wzOTQ1X3NjYW5fY2FuY2VsKHByaXYpOworCWl3bF9zY2FuX2NhbmNlbChwcml2KTsKIAogCWlmICgodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZzdGF0dXMpICE9CiAJICAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHx8CkBAIC0zMjY1LDE3ICsxNDUyLDE1IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGNoYWlucyBpbnRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBmaWxlcyBmb3IgdGhlbSB0byBzZXR1cAogICogYW55IGhhcmR3YXJlIHNwZWNpZmljIGhhbmRsZXJzIGFzIHdlbGwuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FMSVZFXSA9IGl3bDM5NDVfcnhfcmVwbHlfYWxpdmU7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfQUREX1NUQV0gPSBpd2wzOTQ1X3J4X3JlcGx5X2FkZF9zdGE7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfRVJST1JdID0gaXdsMzk0NV9yeF9yZXBseV9lcnJvcjsKLQlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9jc2E7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU1BFQ1RSVU1fTUVBU1VSRV9OT1RJRklDQVRJT05dID0KLQkgICAgaXdsMzk0NV9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmOwotCXByaXYtPnJ4X2hhbmRsZXJzW1BNX1NMRUVQX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X3BtX3NsZWVwX25vdGlmOworCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bF9yeF9yZXBseV9lcnJvcjsKKwlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsX3J4X2NzYTsKKwlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsX3J4X3BtX3NsZWVwX25vdGlmOwogCXByaXYtPnJ4X2hhbmRsZXJzW1BNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDXSA9Ci0JICAgIGl3bDM5NDVfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZjsKKwkgICAgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWY7CiAJcHJpdi0+cnhfaGFuZGxlcnNbQkVBQ09OX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZjsKIAogCS8qCkBAIC0zMjg2LDkwICsxNDcxLDE0IEBACiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfU1RBVElTVElDU19DTURdID0gaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzOwogCXByaXYtPnJ4X2hhbmRsZXJzW1NUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NDQU5fQ01EXSA9IGl3bDM5NDVfcnhfcmVwbHlfc2NhbjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX1NUQVJUX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWY7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fcmVzdWx0c19ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fY29tcGxldGVfbm90aWY7CisJaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHByaXYpOworCWl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHByaXYpOwogCXByaXYtPnJ4X2hhbmRsZXJzW0NBUkRfU1RBVEVfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZjsKIAogCS8qIFNldCB1cCBoYXJkd2FyZSBzcGVjaWZpYyBSeCBoYW5kbGVycyAqLwogCWl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChwcml2KTsKIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltIC0gUmVjbGFpbSBDTUQgcXVldWUgZW50cmllcwotICogV2hlbiBGVyBhZHZhbmNlcyAnUicgaW5kZXgsIGFsbCBlbnRyaWVzIGJldHdlZW4gb2xkIGFuZCBuZXcgJ1InIGluZGV4Ci0gKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4KLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlpbnQgbmZyZWVkID0gMDsKLQotCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bDM5NDVfeDJfcXVldWVfdXNlZChxLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCi0JCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAotCQkJICBpbmRleCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGluZGV4ID0gaXdsX3F1ZXVlX2luY193cmFwKGluZGV4LCBxLT5uX2JkKTsgcS0+cmVhZF9wdHIgIT0gaW5kZXg7Ci0JCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgewotCQlpZiAobmZyZWVkID4gMSkgewotCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGluZGV4LAotCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JCQlicmVhazsKLQkJfQotCQluZnJlZWQrKzsKLQl9Ci19Ci0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZSAtIFB1bGwgdW51c2VkIGJ1ZmZlcnMgb2ZmIHRoZSBxdWV1ZSBhbmQgcmVjbGFpbSB0aGVtCi0gKiBAcnhiOiBSeCBidWZmZXIgdG8gcmVjbGFpbQotICoKLSAqIElmIGFuIFJ4IGJ1ZmZlciBoYXMgYW4gYXN5bmMgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIGl0IHRoZSBjYWxsYmFjawotICogd2lsbCBiZSBleGVjdXRlZC4gIFRoZSBhdHRhY2hlZCBza2IgKGlmIHByZXNlbnQpIHdpbGwgb25seSBiZSBmcmVlZAotICogaWYgdGhlIGNhbGxiYWNrIHJldHVybnMgMQotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQl1MTYgc2VxdWVuY2UgPSBsZTE2X3RvX2NwdShwa3QtPmhkci5zZXF1ZW5jZSk7Ci0JaW50IHR4cV9pZCA9IFNFUV9UT19RVUVVRShzZXF1ZW5jZSk7Ci0JaW50IGluZGV4ID0gU0VRX1RPX0lOREVYKHNlcXVlbmNlKTsKLQlpbnQgaHVnZSA9IHNlcXVlbmNlICYgU0VRX0hVR0VfRlJBTUU7Ci0JaW50IGNtZF9pbmRleDsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZDsKLQotCUJVR19PTih0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pOwotCi0JY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7Ci0JY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pbmRleF07Ci0KLQkvKiBJbnB1dCBlcnJvciBjaGVja2luZyBpcyBkb25lIHdoZW4gY29tbWFuZHMgYXJlIGFkZGVkIHRvIHF1ZXVlLiAqLwotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpIHsKLQkJY21kLT5tZXRhLnNvdXJjZS0+dS5za2IgPSByeGItPnNrYjsKLQkJcnhiLT5za2IgPSBOVUxMOwotCX0gZWxzZSBpZiAoY21kLT5tZXRhLnUuY2FsbGJhY2sgJiYKLQkJICAgIWNtZC0+bWV0YS51LmNhbGxiYWNrKHByaXYsIGNtZCwgcnhiLT5za2IpKQotCQlyeGItPnNrYiA9IE5VTEw7Ci0KLQlpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwotCi0JaWYgKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSkgewotCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCX0KLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIFJYLUZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIFJ4IHRoZW9yeSBvZiBvcGVyYXRpb24KQEAgLTM0MTcsNyArMTUyNiw2IEBACiAgKgogICogRHJpdmVyIHNlcXVlbmNlOgogICoKLSAqIGl3bDM5NDVfcnhfcXVldWVfYWxsb2MoKSAgIEFsbG9jYXRlcyByeF9mcmVlCiAgKiBpd2wzOTQ1X3J4X3JlcGxlbmlzaCgpICAgICBSZXBsZW5pc2hlcyByeF9mcmVlIGxpc3QgZnJvbSByeF91c2VkLCBhbmQgY2FsbHMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jawogICogaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKCkgTW92ZXMgYXZhaWxhYmxlIGJ1ZmZlcnMgZnJvbSByeF9mcmVlIGludG8gUngKQEAgLTM0MjYsNyArMTUzNCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYXZhaWxhYmxlLCBzY2hlZHVsZXMgaXdsMzk0NV9yeF9yZXBsZW5pc2gKICAqCiAgKiAtLSBlbmFibGUgaW50ZXJydXB0cyAtLQotICogSVNSIC0gaXdsMzk0NV9yeCgpICAgICAgICAgRGV0YWNoIGl3bDM5NDVfcnhfbWVtX2J1ZmZlcnMgZnJvbSBwb29sIHVwIHRvIHRoZQorICogSVNSIC0gaXdsMzk0NV9yeCgpICAgICAgICAgRGV0YWNoIGl3bF9yeF9tZW1fYnVmZmVycyBmcm9tIHBvb2wgdXAgdG8gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEIElOREVYLCBkZXRhY2hpbmcgdGhlIFNLQiBmcm9tIHRoZSBwb29sLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZXMgdGhlIHBhY2tldCBidWZmZXIgZnJvbSBxdWV1ZSB0byByeF91c2VkLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbHMgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrIHRvIHJlZmlsbCBhbnkgZW1wdHkKQEAgLTM0MzYsNzAgKzE1NDQsOSBAQAogICovCiAKIC8qKgotICogaXdsMzk0NV9yeF9xdWV1ZV9zcGFjZSAtIFJldHVybiBudW1iZXIgb2YgZnJlZSBzbG90cyBhdmFpbGFibGUgaW4gcXVldWUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcSkKLXsKLQlpbnQgcyA9IHEtPnJlYWQgLSBxLT53cml0ZTsKLQlpZiAocyA8PSAwKQotCQlzICs9IFJYX1FVRVVFX1NJWkU7Ci0JLyoga2VlcCBzb21lIGJ1ZmZlciB0byBub3QgY29uZnVzZSBmdWxsIGFuZCBlbXB0eSBxdWV1ZSAqLwotCXMgLT0gMjsKLQlpZiAocyA8IDApCi0JCXMgPSAwOwotCXJldHVybiBzOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlciBmb3IgdGhlIFJYIHF1ZXVlCi0gKi8KLWludCBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChxLT5uZWVkX3VwZGF0ZSA9PSAwKQotCQlnb3RvIGV4aXRfdW5sb2NrOwotCi0JLyogSWYgcG93ZXItc2F2aW5nIGlzIGluIHVzZSwgbWFrZSBzdXJlIGRldmljZSBpcyBhd2FrZSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgewotCQlyZWcgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0KLQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlnb3RvIGV4aXRfdW5sb2NrOwotCQl9Ci0KLQkJcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQkJaWYgKHJjKQotCQkJZ290byBleGl0X3VubG9jazsKLQotCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLAotCQkJCSAgICAgcS0+d3JpdGUgJiB+MHg3KTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBFbHNlIGRldmljZSBpcyBhc3N1bWVkIHRvIGJlIGF3YWtlICovCi0JfSBlbHNlCi0JCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwgcS0+d3JpdGUgJiB+MHg3KTsKLQotCi0JcS0+bmVlZF91cGRhdGUgPSAwOwotCi0gZXhpdF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKiBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIgLSBjb252ZXJ0IGEgRE1BIGFkZHJlc3MgdG8gYSB1Q29kZSByZWFkIGJ1ZmZlciBwdHIKICAqLwotc3RhdGljIGlubGluZSBfX2xlMzIgaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW5saW5lIF9fbGUzMiBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJcmV0dXJuIGNwdV90b19sZTMyKCh1MzIpZG1hX2FkZHIpOwpAQCAtMzUxNiwyNCArMTU2MywyNCBAQAogICogYWxzbyB1cGRhdGVzIHRoZSBtZW1vcnkgYWRkcmVzcyBpbiB0aGUgZmlybXdhcmUgdG8gcmVmZXJlbmNlIHRoZSBuZXcKICAqIHRhcmdldCBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB3cml0ZSwgcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJd3JpdGUgPSByeHEtPndyaXRlICYgfjB4NzsKLQl3aGlsZSAoKGl3bDM5NDVfcnhfcXVldWVfc3BhY2UocnhxKSA+IDApICYmIChyeHEtPmZyZWVfY291bnQpKSB7CisJd2hpbGUgKChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IDApICYmIChyeHEtPmZyZWVfY291bnQpKSB7CiAJCS8qIEdldCBuZXh0IGZyZWUgUnggYnVmZmVyLCByZW1vdmUgZnJvbSBmcmVlIGxpc3QgKi8KIAkJZWxlbWVudCA9IHJ4cS0+cnhfZnJlZS5uZXh0OwotCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIsIGxpc3QpOworCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCiAJCS8qIFBvaW50IHRvIFJ4IGJ1ZmZlciB2aWEgbmV4dCBSQkQgaW4gY2lyY3VsYXIgYnVmZmVyICovCi0JCXJ4cS0+YmRbcnhxLT53cml0ZV0gPSBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIocHJpdiwgcnhiLT5kbWFfYWRkcik7CisJCXJ4cS0+YmRbcnhxLT53cml0ZV0gPSBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIocHJpdiwgcnhiLT5yZWFsX2RtYV9hZGRyKTsKIAkJcnhxLT5xdWV1ZVtyeHEtPndyaXRlXSA9IHJ4YjsKIAkJcnhxLT53cml0ZSA9IChyeHEtPndyaXRlICsgMSkgJiBSWF9RVUVVRV9NQVNLOwogCQlyeHEtPmZyZWVfY291bnQtLTsKQEAgLTM1NTIsNyArMTU5OSw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAkJcnhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCQlyYyA9IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIAl9CkBAIC0zNTY4LDI0ICsxNjE1LDI0IEBACiAgKiBBbHNvIHJlc3RvY2sgdGhlIFJ4IHF1ZXVlIHZpYSBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2suCiAgKiBUaGlzIGlzIGNhbGxlZCBhcyBhIHNjaGVkdWxlZCB3b3JrIGl0ZW0gKGV4Y2VwdCBmb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uKQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2FsbG9jYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2FsbG9jYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiOworCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmcnhxLT5yeF91c2VkKSkgewogCQllbGVtZW50ID0gcnhxLT5yeF91c2VkLm5leHQ7Ci0JCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CisJCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyLCBsaXN0KTsKIAogCQkvKiBBbGxvYyBhIG5ldyByZWNlaXZlIGJ1ZmZlciAqLwogCQlyeGItPnNrYiA9Ci0JCSAgICBhbGxvY19za2IoSVdMX1JYX0JVRl9TSVpFLCBfX0dGUF9OT1dBUk4gfCBHRlBfQVRPTUlDKTsKKwkJICAgIGFsbG9jX3NrYihwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCisJCQkJX19HRlBfTk9XQVJOIHwgR0ZQX0FUT01JQyk7CiAJCWlmICghcnhiLT5za2IpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZfTkFNRQotCQkJCSAgICAgICAiOiBDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKKwkJCQlJV0xfQ1JJVChwcml2LCAiOiBDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKIAkJCS8qIFdlIGRvbid0IHJlc2NoZWR1bGUgcmVwbGVuaXNoIHdvcmsgaGVyZSAtLSB3ZSB3aWxsCiAJCQkgKiBjYWxsIHRoZSByZXN0b2NrIG1ldGhvZCBhbmQgaWYgaXQgc3RpbGwgbmVlZHMKIAkJCSAqIG1vcmUgYnVmZmVycyBpdCB3aWxsIHNjaGVkdWxlIHJlcGxlbmlzaCAqLwpAQCAtMzYwNCw5ICsxNjUxLDEwIEBACiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCiAJCS8qIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIFJCL1NLQiAqLwotCQlyeGItPmRtYV9hZGRyID0KLQkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+c2tiLT5kYXRhLAotCQkJCSAgIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcnhiLT5yZWFsX2RtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKKwkJCQkJCXJ4Yi0+c2tiLT5kYXRhLAorCQkJCQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcnhxLT5yeF9mcmVlKTsKIAkJcnhxLT5mcmVlX2NvdW50Kys7CiAJfQpAQCAtMzYxOCw3ICsxNjY2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pd2wzOTQ1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7CiAKIAlpd2wzOTQ1X3J4X2FsbG9jYXRlKHByaXYpOwogCWl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKQEAgLTM2MjcsNyArMTY3NSw3IEBACiAKIHZvaWQgaXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpd2wzOTQ1X3J4X2FsbG9jYXRlKHByaXYpOwpAQCAtMzYzNyw4NCArMTY4NSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi0vKiBBc3N1bWVzIHRoYXQgdGhlIHNrYiBmaWVsZCBvZiB0aGUgYnVmZmVycyBpbiAncG9vbCcgaXMga2VwdCBhY2N1cmF0ZS4KLSAqIElmIGFuIFNLQiBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIFBPT0wgbmVlZHMgdG8gaGF2ZSBpdHMgU0tCIHNldCB0byBOVUxMCi0gKiBUaGlzIGZyZWUgcm91dGluZSB3YWxrcyB0aGUgbGlzdCBvZiBQT09MIGVudHJpZXMgYW5kIGlmIFNLQiBpcyBzZXQgdG8KLSAqIG5vbiBOVUxMIGl0IGlzIHVubWFwcGVkIGFuZCBmcmVlZAotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfU0laRSArIFJYX0ZSRUVfQlVGRkVSUzsgaSsrKSB7Ci0JCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkJIHJ4cS0+cG9vbFtpXS5kbWFfYWRkciwKLQkJCQkJIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWRldl9rZnJlZV9za2IocnhxLT5wb29sW2ldLnNrYik7Ci0JCX0KLQl9Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAotCQkJICAgIHJ4cS0+ZG1hX2FkZHIpOwotCXJ4cS0+YmQgPSBOVUxMOwotfQotCi1pbnQgaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnJ4cS0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfZnJlZSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfdXNlZCk7Ci0KLQkvKiBBbGxvYyB0aGUgY2lyY3VsYXIgYnVmZmVyIG9mIFJlYWQgQnVmZmVyIERlc2NyaXB0b3JzIChSQkRzKSAqLwotCXJ4cS0+YmQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCAmcnhxLT5kbWFfYWRkcik7Ci0JaWYgKCFyeHEtPmJkKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEZpbGwgdGhlIHJ4X3VzZWQgcXVldWUgd2l0aCBfYWxsXyBvZiB0aGUgUnggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9GUkVFX0JVRkZFUlMgKyBSWF9RVUVVRV9TSVpFOyBpKyspCi0JCWxpc3RfYWRkX3RhaWwoJnJ4cS0+cG9vbFtpXS5saXN0LCAmcnhxLT5yeF91c2VkKTsKLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0JcnhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaXdsMzk0NV9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X2ZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwotCS8qIEZpbGwgdGhlIHJ4X3VzZWQgcXVldWUgd2l0aCBfYWxsXyBvZiB0aGUgUnggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9GUkVFX0JVRkZFUlMgKyBSWF9RVUVVRV9TSVpFOyBpKyspIHsKLQkJLyogSW4gdGhlIHJlc2V0IGZ1bmN0aW9uLCB0aGVzZSBidWZmZXJzIG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkCi0JCSAqIHRvIGFuIFNLQiwgc28gd2UgbmVlZCB0byB1bm1hcCBhbmQgZnJlZSBwb3RlbnRpYWwgc3RvcmFnZSAqLwotCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCi0JCQkJCSByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCi0JCQkJCSBJV0xfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOwotCQkJcnhxLT5wb29sW2ldLnNrYiA9IE5VTEw7Ci0JCX0KLQkJbGlzdF9hZGRfdGFpbCgmcnhxLT5wb29sW2ldLmxpc3QsICZyeHEtPnJ4X3VzZWQpOwotCX0KLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIENvbnZlcnQgbGluZWFyIHNpZ25hbC10by1ub2lzZSByYXRpbyBpbnRvIGRCICovCiBzdGF0aWMgdTggcmF0aW8yZEJbMTAwXSA9IHsKIC8qCSAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICovCkBAIC0zODAwLDExICsxNzcwLDExIEBACiAgKiB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMsIGluY2x1ZGluZyBjb21tYW5kIHJlc3BvbnNlcywKICAqIGZyYW1lLXJlY2VpdmVkIG5vdGlmaWNhdGlvbnMsIGFuZCBvdGhlciBub3RpZmljYXRpb25zLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdDsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0OworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAJdTMyIHIsIGk7CiAJaW50IHJlY2xhaW07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM4MTMsMTQgKzE3ODMsMTQgQEAKIAogCS8qIHVDb2RlJ3MgcmVhZCBpbmRleCAoc3RvcmVkIGluIHNoYXJlZCBEUkFNKSBpbmRpY2F0ZXMgdGhlIGxhc3QgUngKIAkgKiBidWZmZXIgdGhhdCB0aGUgZHJpdmVyIG1heSBwcm9jZXNzIChsYXN0IGJ1ZmZlciBmaWxsZWQgYnkgdWNvZGUpLiAqLwotCXIgPSBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHByaXYpOworCXIgPSBsZTE2X3RvX2NwdShyeHEtPnJiX3N0dHMtPmNsb3NlZF9yYl9udW0pICYgIDB4MEZGRjsKIAlpID0gcnhxLT5yZWFkOwogCi0JaWYgKGl3bDM5NDVfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCisJaWYgKGl3bF9yeF9xdWV1ZV9zcGFjZShyeHEpID4gKFJYX1FVRVVFX1NJWkUgLyAyKSkKIAkJZmlsbF9yeCA9IDE7CiAJLyogUnggaW50ZXJydXB0LCBidXQgbm90aGluZyBzZW50IGZyb20gdUNvZGUgKi8KIAlpZiAoaSA9PSByKQotCQlJV0xfREVCVUcoSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKKwkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9SWCB8IElXTF9ETF9JU1IsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CiAKIAl3aGlsZSAoaSAhPSByKSB7CiAJCXJ4YiA9IHJ4cS0+cXVldWVbaV07CkBAIC0zODMyLDEwICsxODAyLDEwIEBACiAKIAkJcnhxLT5xdWV1ZVtpXSA9IE5VTEw7CiAKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHByaXYtPnBjaV9kZXYsIHJ4Yi0+ZG1hX2FkZHIsCi0JCQkJCSAgICBJV0xfUlhfQlVGX1NJWkUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCByeGItPnJlYWxfZG1hX2FkZHIsCisJCQkJCSAgICBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCiAJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJCS8qIFJlY2xhaW0gYSBjb21tYW5kIGJ1ZmZlciBvbmx5IGlmIHRoaXMgcGFja2V0IGlzIGEgcmVzcG9uc2UKIAkJICogICB0byBhIChkcml2ZXItb3JpZ2luYXRlZCkgY29tbWFuZC4KQEAgLTM4NTEsMTMgKzE4MjEsMTMgQEAKIAkJICogICBoYW5kbGUgdGhvc2UgdGhhdCBuZWVkIGhhbmRsaW5nIHZpYSBmdW5jdGlvbiBpbgogCQkgKiAgIHJ4X2hhbmRsZXJzIHRhYmxlLiAgU2VlIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoKSAqLwogCQlpZiAocHJpdi0+cnhfaGFuZGxlcnNbcGt0LT5oZHIuY21kXSkgewotCQkJSVdMX0RFQlVHKElXTF9ETF9IT1NUX0NPTU1BTkQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAorCQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9IQ01EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKIAkJCQkiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsIGksCiAJCQkJZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyBoYW5kbGluZyBuZWVkZWQgKi8KLQkJCUlXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKKwkJCUlXTF9ERUJVRyhwcml2LCBJV0xfRExfSENNRCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCiAJCQkJInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CkBAIC0zODY1LDEyICsxODM1LDEyIEBACiAKIAkJaWYgKHJlY2xhaW0pIHsKIAkJCS8qIEludm9rZSBhbnkgY2FsbGJhY2tzLCB0cmFuc2ZlciB0aGUgc2tiIHRvIGNhbGxlciwgYW5kCi0JCQkgKiBmaXJlIG9mZiB0aGUgKHBvc3NpYmx5KSBibG9ja2luZyBpd2wzOTQ1X3NlbmRfY21kKCkKKwkJCSAqIGZpcmUgb2ZmIHRoZSAocG9zc2libHkpIGJsb2NraW5nIGl3bF9zZW5kX2NtZCgpCiAJCQkgKiBhcyB3ZSByZWNsYWltIHRoZSBkcml2ZXIgY29tbWFuZCBxdWV1ZSAqLwogCQkJaWYgKHJ4YiAmJiByeGItPnNrYikKLQkJCQlpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZShwcml2LCByeGIpOworCQkJCWl3bF90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKIAkJCWVsc2UKLQkJCQlJV0xfV0FSTklORygiQ2xhaW0gbnVsbCByeGI/XG4iKTsKKwkJCQlJV0xfV0FSTihwcml2LCAiQ2xhaW0gbnVsbCByeGI/XG4iKTsKIAkJfQogCiAJCS8qIEZvciBub3cgd2UganVzdCBkb24ndCByZS11c2UgYW55dGhpbmcuICBXZSBjYW4gdHdlYWsgdGhpcwpAQCAtMzg4Miw4ICsxODUyLDkgQEAKIAkJCXJ4Yi0+c2tiID0gTlVMTDsKIAkJfQogCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKLQkJCQkgSVdMX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+cmVhbF9kbWFfYWRkciwKKwkJCQlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCisJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZF90YWlsKCZyeGItPmxpc3QsICZwcml2LT5yeHEucnhfdXNlZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwpAQCAtMzkwNSwxMDIgKzE4NzYsMTQgQEAKIAlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JaW50IHJjID0gMDsKLQlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOwotCi0JaWYgKHR4cS0+bmVlZF91cGRhdGUgPT0gMCkKLQkJcmV0dXJuIHJjOwotCi0JLyogaWYgd2UncmUgdHJ5aW5nIHRvIHNhdmUgcG93ZXIgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpIHsKLQkJLyogd2FrZSB1cCBuaWMgaWYgaXQncyBwb3dlcmVkIGRvd24gLi4uCi0JCSAqIHVDb2RlIHdpbGwgd2FrZSB1cCwgYW5kIGludGVycnVwdCB1cyBhZ2Fpbiwgc28gbmV4dAotCQkgKiB0aW1lIHdlJ2xsIHNraXAgdGhpcyBwYXJ0LiAqLwotCQlyZWcgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0KLQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKLQkJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQkvKiByZXN0b3JlIHRoaXMgcXVldWUncyBwYXJhbWV0ZXJzIGluIG5pYyBoYXJkd2FyZS4gKi8KLQkJcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKLQkJCQkgICAgIHR4cS0+cS53cml0ZV9wdHIgfCAodHhxX2lkIDw8IDgpKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBlbHNlIG5vdCBpbiBwb3dlci1zYXZlIG1vZGUsIHVDb2RlIHdpbGwgbmV2ZXIgc2xlZXAgd2hlbiB3ZSdyZQotCSAqIHRyeWluZyB0byB0eCAoZHVyaW5nIFJGS0lMTCwgd2UncmUgbm90IHRyeWluZyB0byB0eCkuICovCi0JfSBlbHNlCi0JCWl3bDM5NDVfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCi0JCQkgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOwotCi0JdHhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIHZvaWQgaXdsMzk0NV9wcmludF9yeF9jb25maWdfY21kKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uKQotewotCUlXTF9ERUJVR19SQURJTygiUlggQ09ORklHOlxuIik7Ci0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfUkFESU8sICh1OCAqKSByeG9uLCBzaXplb2YoKnJ4b24pKTsKLQlJV0xfREVCVUdfUkFESU8oInUxNiBjaGFubmVsOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmxhZ3M6IDB4JTA4WFxuIiwgbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInUzMiBmaWx0ZXJfZmxhZ3M6IDB4JTA4eFxuIiwKLQkJCWxlMzJfdG9fY3B1KHJ4b24tPmZpbHRlcl9mbGFncykpOwotCUlXTF9ERUJVR19SQURJTygidTggZGV2X3R5cGU6IDB4JXhcbiIsIHJ4b24tPmRldl90eXBlKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IG9mZG1fYmFzaWNfcmF0ZXM6IDB4JTAyeFxuIiwKLQkJCXJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidTggY2NrX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsIHJ4b24tPmNja19iYXNpY19yYXRlcyk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBub2RlX2FkZHI6ICVwTVxuIiwgcnhvbi0+bm9kZV9hZGRyKTsKLQlJV0xfREVCVUdfUkFESU8oInU4WzZdIGJzc2lkX2FkZHI6ICVwTVxuIiwgcnhvbi0+YnNzaWRfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgYXNzb2NfaWQ6IDB4JXhcbiIsIGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCUlXTF9ERUJVR19JU1IoIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOwotCXNldF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBDU1JfSU5JX1NFVF9NQVNLKTsKLX0KLQotCiAvKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmx1c2ggYW55IHNjaGVkdWxlZCB0YXNrbGV0ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9zeW5jaHJvbml6ZV9pcnEoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIHdhaXQgdG8gbWFrZSBzdXJlIHdlIGZsdXNoIHBlbmRpbmcgdGFza2xldCovCiAJc3luY2hyb25pemVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSk7CiAJdGFza2xldF9raWxsKCZwcml2LT5pcnFfdGFza2xldCk7CiB9CiAKLQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JY2xlYXJfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBkaXNhYmxlIGludGVycnVwdHMgZnJvbSB1Q29kZS9OSUMgdG8gaG9zdCAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOwotCi0JLyogYWNrbm93bGVkZ2UvY2xlYXIvcmVzZXQgYW55IGludGVycnVwdHMgc3RpbGwgcGVuZGluZwotCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4ZmZmZmZmZmYpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JSVdMX0RFQlVHX0lTUigiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKIHsKIAlzd2l0Y2ggKGkpIHsKQEAgLTQwMjQsNyArMTkwNyw3IEBACiAjZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKICNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBpOwogCXUzMiBkZXNjLCB0aW1lLCBjb3VudCwgYmFzZSwgZGF0YTE7CkBAIC00MDM0LDQ5ICsxOTE3LDUwIEBACiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiTm90IHZhbGlkIGVycm9yIGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWNvdW50ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCWNvdW50ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CiAKIAlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlJPUigiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsIHByaXYtPnN0YXR1cywgY291bnQpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXJyb3IgTG9nIER1bXA6XG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsCisJCQlwcml2LT5zdGF0dXMsIGNvdW50KTsKIAl9CiAKLQlJV0xfRVJST1IoIkRlc2MgICAgICAgVGltZSAgICAgICBhc3J0UEMgIGJsaW5rMiAiCisJSVdMX0VSUihwcml2LCAiRGVzYyAgICAgICBUaW1lICAgICAgIGFzcnRQQyAgYmxpbmsyICIKIAkJICAiaWxpbmsxICBubWlQQyAgIExpbmVcbiIpOwogCWZvciAoaSA9IEVSUk9SX1NUQVJUX09GRlNFVDsKIAkgICAgIGkgPCAoY291bnQgKiBFUlJPUl9FTEVNX1NJWkUpICsgRVJST1JfU1RBUlRfT0ZGU0VUOwogCSAgICAgaSArPSBFUlJPUl9FTEVNX1NJWkUpIHsKLQkJZGVzYyA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSk7CisJCWRlc2MgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSk7CiAJCXRpbWUgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKIAkJYmxpbmsxID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDIgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDIgKiBzaXplb2YodTMyKSk7CiAJCWJsaW5rMiA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAzICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAzICogc2l6ZW9mKHUzMikpOwogCQlpbGluazEgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgNCAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgNCAqIHNpemVvZih1MzIpKTsKIAkJaWxpbmsyID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDUgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDUgKiBzaXplb2YodTMyKSk7CiAJCWRhdGExID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CiAKLQkJSVdMX0VSUk9SCi0JCSAgICAoIiUtMTNzICgjJWQpICUwMTB1IDB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WCAldVxuXG4iLAotCQkgICAgIGRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBibGluazEsIGJsaW5rMiwKLQkJICAgICBpbGluazEsIGlsaW5rMiwgZGF0YTEpOworCQlJV0xfRVJSKHByaXYsCisJCQkiJS0xM3MgKCMlZCkgJTAxMHUgMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYICV1XG5cbiIsCisJCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgYmxpbmsxLCBibGluazIsCisJCQlpbGluazEsIGlsaW5rMiwgZGF0YTEpOwogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIH0KIApAQCAtNDA4NSw5ICsxOTY5LDkgQEAKIC8qKgogICogaXdsMzk0NV9wcmludF9ldmVudF9sb2cgLSBEdW1wIGVycm9yIGV2ZW50IGxvZyB0byBzeXNsb2cKICAqCi0gKiBOT1RFOiBNdXN0IGJlIGNhbGxlZCB3aXRoIGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKCkgYWxyZWFkeSBvYnRhaW5lZCEKKyAqIE5PVEU6IE11c3QgYmUgY2FsbGVkIHdpdGggaXdsX2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCiAJCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQogewogCXUzMiBpOwpAQCAtNDExMSwyMSArMTk5NSwyMiBAQAogCS8qICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KIAkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCXRpbWUgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CiAJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJaWYgKG1vZGUgPT0gMCkKLQkJCUlXTF9FUlJPUigiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7IC8qIGRhdGEsIGV2ICovCi0JCWVsc2UgewotCQkJZGF0YSA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlpZiAobW9kZSA9PSAwKSB7CisJCQkvKiBkYXRhLCBldiAqLworCQkJSVdMX0VSUihwcml2LCAiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlJPUigiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOworCQkJSVdMX0VSUihwcml2LCAiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1MzIgYmFzZTsgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgZXZlbnQgbG9nIGhlYWRlciAqLwpAQCAtNDEzNywzMiArMjAyMiwzMiBAQAogCiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJaWYgKCFpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKLQkJSVdMX0VSUk9SKCJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBldmVudCBsb2cgaGVhZGVyICovCi0JY2FwYWNpdHkgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7Ci0JbW9kZSA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOwotCW51bV93cmFwcyA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOwotCW5leHRfZW50cnkgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgzICogc2l6ZW9mKHUzMikpKTsKKwljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOworCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CisJbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CiAKIAlzaXplID0gbnVtX3dyYXBzID8gY2FwYWNpdHkgOiBuZXh0X2VudHJ5OwogCiAJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KIAlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAkJcmV0dXJuOwogCX0KIAotCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKKwlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IGRpc3BsYXkgY291bnQgJWQsIHdyYXBzICVkXG4iLAogCQkgIHNpemUsIG51bV93cmFwcyk7CiAKIAkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCkBAIC00MTc0LDQ4ICsyMDU5LDEwIEBACiAJLyogKHRoZW4vZWxzZSkgc3RhcnQgYXQgdG9wIG9mIGxvZyAqLwogCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsMzk0NV9kb3duICovCi0Jc2V0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpOwotCi0JLyogQ2FuY2VsIGN1cnJlbnRseSBxdWV1ZWQgY29tbWFuZC4gKi8KLQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7Ci0JCWl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCQlpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKLQkJaXdsMzk0NV9wcmludF9yeF9jb25maWdfY21kKCZwcml2LT5zdGFnaW5nX3J4b24pOwotCX0KLSNlbmRpZgotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCi0JLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KLQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX0ZXX0VSUk9SUywKLQkJCSAgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gdUNvZGUgZXJyb3IuXG4iKTsKLQotCQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOwotCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7Ci0JCX0KLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQyMzIsMTIgKzIwNzksMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBpbnRhLCBoYW5kbGVkID0gMDsKIAl1MzIgaW50YV9maDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAl1MzIgaW50YV9tYXNrOwogI2VuZGlmCiAKQEAgLTQyNDYsMjAgKzIwOTMsMjAgQEAKIAkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyB1Q29kZSBpbnRlcnJ1cHRzLgogCSAqIE5vdGU6ICBTb21lIGJpdHMgaW4gQ1NSX0lOVCBhcmUgIk9SIiBvZiBiaXRzIGluIENTUl9GSF9JTlRfU1RBVFVTLAogCSAqICBhbmQgd2lsbCBjbGVhciBvbmx5IHdoZW4gQ1NSX0ZIX0lOVF9TVEFUVVMgZ2V0cyBjbGVhcmVkLiAqLwotCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgaW50YSk7CisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgaW50YSk7CiAKIAkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyBmbG93LWhhbmRsZXIgKERNQSkgaW50ZXJydXB0cy4KIAkgKiBBbnkgbmV3IGludGVycnVwdHMgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhpcywgZWl0aGVyIHdoaWxlIHdlJ3JlCiAJICogaW4gdGhpcyB0YXNrbGV0LCBvciBsYXRlciwgd2lsbCBzaG93IHVwIGluIG5leHQgSVNSL3Rhc2tsZXQuICovCi0JaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOworCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgaW50YV9maCk7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgeworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgewogCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCQlpbnRhX21hc2sgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwotCQlJV0xfREVCVUdfSVNSKCJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKKwkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKIAkJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CiAJfQogI2VuZGlmCkBAIC00Mjc1LDEyICsyMTIyLDEyIEBACiAKIAkvKiBOb3cgc2VydmljZSBhbGwgaW50ZXJydXB0IGJpdHMgZGlzY292ZXJlZCBhYm92ZS4gKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0hXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIEhXIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOwogCiAJCS8qIFRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLwotCQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAotCQlpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IocHJpdik7CisJCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwogCiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfSFdfRVJSOwogCkBAIC00Mjg5LDE2ICsyMTM2LDE2IEBACiAJCXJldHVybjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkKLQkJCUlXTF9ERUJVR19JU1IoIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCisJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgogCQkJCSAgICAgICJ0aGUgZnJhbWUvZnJhbWVzLlxuIik7CiAKIAkJLyogQWxpdmUgbm90aWZpY2F0aW9uIHZpYSBSeCBpbnRlcnJ1cHQgd2lsbCBkbyB0aGUgcmVhbCB3b3JrICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfQUxJVkUpCi0JCQlJV0xfREVCVUdfSVNSKCJBbGl2ZSBpbnRlcnJ1cHRcbiIpOworCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiQWxpdmUgaW50ZXJydXB0XG4iKTsKIAl9CiAjZW5kaWYKIAkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwpAQCAtNDMwNiwyMiArMjE1MywyMiBAQAogCiAJLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcgMHglWC5cbiIsCi0JCQkgIGludGEpOwotCQlpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IocHJpdik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIgorCQkJIlJlc3RhcnRpbmcgMHglWC5cbiIsIGludGEpOworCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9TV19FUlI7CiAJfQogCiAJLyogdUNvZGUgd2FrZXMgdXAgYWZ0ZXIgcG93ZXItZG93biBzbGVlcCAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7Ci0JCUlXTF9ERUJVR19JU1IoIldha2V1cCBpbnRlcnJ1cHRcbiIpOwotCQlpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsyXSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzNdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNF0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs1XSk7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOworCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMF0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsxXSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzJdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbM10pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs0XSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzVdKTsKIAogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1dBS0VVUDsKIAl9CkBAIC00MzM1LDQzMiArMjE4Miw2MyBAQAogCX0KIAogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJSVdMX0RFQlVHX0lTUigiVHggaW50ZXJydXB0XG4iKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiVHggaW50ZXJydXB0XG4iKTsKIAotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsICgxIDw8IDYpKTsKLQkJaWYgKCFpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LAotCQkJCQkgICAgIEZIX1RDU1JfQ1JFRElUCi0JCQkJCSAgICAgKEFMTV9GSF9TUlZDX0NITkwpLCAweDApOwotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAoMSA8PCA2KSk7CisJCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfVENTUl9DUkVESVQKKwkJCQkJICAgICAoRkgzOV9TUlZDX0NITkwpLCAweDApOworCQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAkJfQogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0ZIX1RYOwogCX0KIAogCWlmIChpbnRhICYgfmhhbmRsZWQpCi0JCUlXTF9FUlJPUigiVW5oYW5kbGVkIElOVEEgYml0cyAweCUwOHhcbiIsIGludGEgJiB+aGFuZGxlZCk7CisJCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwogCiAJaWYgKGludGEgJiB+Q1NSX0lOSV9TRVRfTUFTSykgewotCQlJV0xfV0FSTklORygiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCisJCUlXTF9XQVJOKHByaXYsICJEaXNhYmxlZCBJTlRBIGJpdHMgMHglMDh4IHdlcmUgcGVuZGluZ1xuIiwKIAkJCSBpbnRhICYgfkNTUl9JTklfU0VUX01BU0spOwotCQlJV0xfV0FSTklORygiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOworCQlJV0xfV0FSTihwcml2LCAiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOwogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7Ci0JCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQkJaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQkJSVdMX0RFQlVHX0lTUigiRW5kIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4LCAiCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKKwkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKIAkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpd2wzOTQ1X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkYXRhOwotCXUzMiBpbnRhLCBpbnRhX21hc2s7Ci0JdTMyIGludGFfZmg7Ci0JaWYgKCFwcml2KQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCi0JLyogRGlzYWJsZSAoYnV0IGRvbid0IGNsZWFyISkgaW50ZXJydXB0cyBoZXJlIHRvIGF2b2lkCi0JICogICAgYmFjay10by1iYWNrIElTUnMgYW5kIHNwb3JhZGljIGludGVycnVwdHMgZnJvbSBvdXIgTklDLgotCSAqIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlcnZpY2UsIHRoZSB0YXNrbGV0IHdpbGwgcmUtZW5hYmxlIGludHMuCi0JICogSWYgd2UgKmRvbid0KiBoYXZlIHNvbWV0aGluZywgd2UnbGwgcmUtZW5hYmxlIGJlZm9yZSBsZWF2aW5nIGhlcmUuICovCi0JaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBEaXNjb3ZlciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUvcGVuZGluZyAqLwotCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQlpbnRhX2ZoID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCi0JLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCi0JICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKLQkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLwotCWlmICghaW50YSAmJiAhaW50YV9maCkgewotCQlJV0xfREVCVUdfSVNSKCJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7Ci0JCWdvdG8gbm9uZTsKLQl9Ci0KLQlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKLQkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQgKi8KLQkJSVdMX1dBUk5JTkcoIkhBUkRXQVJFIEdPTkU/PyBJTlRBID09IDB4JTA4eFxuIiwgaW50YSk7Ci0JCWdvdG8gdW5wbHVnZ2VkOwotCX0KLQotCUlXTF9ERUJVR19JU1IoIklTUiBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKLQkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKLQotCWludGEgJj0gfkNTUl9JTlRfQklUX1NDRDsKLQotCS8qIGl3bDM5NDVfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KLQlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKLXVucGx1Z2dlZDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLSBub25lOgotCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gSVJRX05PTkU7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFRVBST00gQkFORFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoZSBpd2wzOTQ1X2VlcHJvbV9iYW5kIGRlZmluaXRpb25zIGJlbG93IHByb3ZpZGUgdGhlIG1hcHBpbmcgZnJvbSB0aGUKLSAqIEVFUFJPTSBjb250ZW50cyB0byB0aGUgc3BlY2lmaWMgY2hhbm5lbCBudW1iZXIgc3VwcG9ydGVkIGZvciBlYWNoCi0gKiBiYW5kLgotICoKLSAqIEZvciBleGFtcGxlLCBpd2wzOTQ1X3ByaXYtPmVlcHJvbS5iYW5kXzNfY2hhbm5lbHNbNF0gZnJvbSB0aGUgYmFuZF8zCi0gKiBkZWZpbml0aW9uIGJlbG93IG1hcHMgdG8gcGh5c2ljYWwgY2hhbm5lbCA0MiBpbiB0aGUgNS4yR0h6IHNwZWN0cnVtLgotICogVGhlIHNwZWNpZmljIGdlb2dyYXBoeSBhbmQgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoYXQgY2hhbm5lbAotICogaXMgY29udGFpbmVkIGluIHRoZSBlZXByb20gbWFwIGl0c2VsZi4KLSAqCi0gKiBEdXJpbmcgaW5pdCwgd2UgY29weSB0aGUgZWVwcm9tIGluZm9ybWF0aW9uIGFuZCBjaGFubmVsIG1hcAotICogaW5mb3JtYXRpb24gaW50byBwcml2LT5jaGFubmVsX2luZm9fMjQvNTIgYW5kIHByaXYtPmNoYW5uZWxfbWFwXzI0LzUyCi0gKgotICogY2hhbm5lbF9tYXBfMjQvNTIgcHJvdmlkZXMgdGhlIGluZGV4IGluIHRoZSBjaGFubmVsX2luZm8gYXJyYXkgZm9yIGEKLSAqIGdpdmVuIGNoYW5uZWwuICBXZSBoYXZlIHRvIGhhdmUgdHdvIHNlcGFyYXRlIG1hcHMgYXMgdGhlcmUgaXMgY2hhbm5lbAotICogb3ZlcmxhcCB3aXRoIHRoZSAyLjRHSHogYW5kIDUuMkdIeiBzcGVjdHJ1bSBhcyBzZWVuIGluIGJhbmRfMSBhbmQKLSAqIGJhbmRfMgotICoKLSAqIEEgdmFsdWUgb2YgMHhmZiBzdG9yZWQgaW4gdGhlIGNoYW5uZWxfbWFwIGluZGljYXRlcyB0aGF0IHRoZSBjaGFubmVsCi0gKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhdCBhbGwuCi0gKgotICogQSB2YWx1ZSBvZiAweGZlIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbCBpcyBub3QKLSAqIHZhbGlkIGZvciBUeCB3aXRoIHRoZSBjdXJyZW50IGhhcmR3YXJlLiAgVGhpcyBtZWFucyB0aGF0Ci0gKiB3aGlsZSB0aGUgc3lzdGVtIGNhbiB0dW5lIGFuZCByZWNlaXZlIG9uIGEgZ2l2ZW4gY2hhbm5lbCwgaXQgbWF5IG5vdAotICogYmUgYWJsZSB0byBhc3NvY2lhdGUgb3IgdHJhbnNtaXQgYW55IGZyYW1lcyBvbiB0aGF0Ci0gKiBjaGFubmVsLiAgVGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBjaGFubmVsIGluZm9ybWF0aW9uIGZvciB0aGF0Ci0gKiBlbnRyeS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAyLjQgR0h6ICovCi1zdGF0aWMgY29uc3QgdTggaXdsMzk0NV9lZXByb21fYmFuZF8xWzE0XSA9IHsKLQkxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKLX07Ci0KLS8qIDUuMiBHSHogYmFuZHMgKi8KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzJbXSA9IHsJLyogNDkxNS01MDgwTUh6ICovCi0JMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYsIDcsIDgsIDExLCAxMiwgMTYKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzNbXSA9IHsJLyogNTE3MC01MzIwTUh6ICovCi0JMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfNFtdID0gewkvKiA1NTAwLTU3MDBNSHogKi8KLQkxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfNVtdID0gewkvKiA1NzI1LTU4MjVNSHogKi8KLQkxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1Ci19OwotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfYmFuZF9yZWZlcmVuY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGJhbmQsCi0JCQkJICAgIGludCAqZWVwcm9tX2NoX2NvdW50LAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbAotCQkJCSAgICAqKmVlcHJvbV9jaF9pbmZvLAotCQkJCSAgICBjb25zdCB1OCAqKmVlcHJvbV9jaF9pbmRleCkKLXsKLQlzd2l0Y2ggKGJhbmQpIHsKLQljYXNlIDE6CQkvKiAyLjRHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8xX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8xOwotCQlicmVhazsKLQljYXNlIDI6CQkvKiA0LjlHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzIpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8yX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8yOwotCQlicmVhazsKLQljYXNlIDM6CQkvKiA1LjJHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzMpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8zOwotCQlicmVhazsKLQljYXNlIDQ6CQkvKiA1LjVHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzQpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF80X2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF80OwotCQlicmVhazsKLQljYXNlIDU6CQkvKiA1LjdHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzUpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF81X2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF81OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8gLSBGaW5kIGRyaXZlcidzIHByaXZhdGUgY2hhbm5lbCBpbmZvCi0gKgotICogQmFzZWQgb24gYmFuZCBhbmQgY2hhbm5lbCBudW1iZXIuCi0gKi8KLWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCXN3aXRjaCAoYmFuZCkgewotCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJZm9yIChpID0gMTQ7IGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKLQkJCWlmIChwcml2LT5jaGFubmVsX2luZm9baV0uY2hhbm5lbCA9PSBjaGFubmVsKQotCQkJCXJldHVybiAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgotCQlpZiAoY2hhbm5lbCA+PSAxICYmIGNoYW5uZWwgPD0gMTQpCi0JCQlyZXR1cm4gJnByaXYtPmNoYW5uZWxfaW5mb1tjaGFubmVsIC0gMV07Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX05VTV9CQU5EUzoKLQkJV0FSTl9PTigxKTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotI2RlZmluZSBDSEVDS19BTkRfUFJJTlQoeCkgKChlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF8jI3gpIFwKLQkJCSAgICA/ICMgeCAiICIgOiAiIikKLQotLyoqCi0gKiBpd2wzOTQ1X2luaXRfY2hhbm5lbF9tYXAgLSBTZXQgdXAgZHJpdmVyJ3MgaW5mbyBmb3IgYWxsIHBvc3NpYmxlIGNoYW5uZWxzCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaW50IGVlcHJvbV9jaF9jb3VudCA9IDA7Ci0JY29uc3QgdTggKmVlcHJvbV9jaF9pbmRleCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaF9pbmZvID0gTlVMTDsKLQlpbnQgYmFuZCwgY2g7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHByaXYtPmVlcHJvbS52ZXJzaW9uIDwgMHgyZikgewotCQlJV0xfV0FSTklORygiVW5zdXBwb3J0ZWQgRUVQUk9NIHZlcnNpb246IDB4JTA0WFxuIiwKLQkJCSAgICBwcml2LT5lZXByb20udmVyc2lvbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKLQotCXByaXYtPmNoYW5uZWxfY291bnQgPQotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMSkgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMikgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMykgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfNCkgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfNSk7Ci0KLQlJV0xfREVCVUdfSU5GTygiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwotCi0JcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvKSAqCi0JCQkJICAgICBwcml2LT5jaGFubmVsX2NvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmNoYW5uZWxfaW5mbykgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwotCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY2hfaW5mbyA9IHByaXYtPmNoYW5uZWxfaW5mbzsKLQotCS8qIExvb3AgdGhyb3VnaCB0aGUgNSBFRVBST00gYmFuZHMgYWRkaW5nIHRoZW0gaW4gb3JkZXIgdG8gdGhlCi0JICogY2hhbm5lbCBtYXAgd2UgbWFpbnRhaW4gKHRoYXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGFuCi0JICogd2hhdCBqdXN0IGluIHRoZSBFRVBST00pICovCi0JZm9yIChiYW5kID0gMTsgYmFuZCA8PSA1OyBiYW5kKyspIHsKLQotCQlpd2wzOTQ1X2luaXRfYmFuZF9yZWZlcmVuY2UocHJpdiwgYmFuZCwgJmVlcHJvbV9jaF9jb3VudCwKLQkJCQkJJmVlcHJvbV9jaF9pbmZvLCAmZWVwcm9tX2NoX2luZGV4KTsKLQotCQkvKiBMb29wIHRocm91Z2ggZWFjaCBiYW5kIGFkZGluZyBlYWNoIG9mIHRoZSBjaGFubmVscyAqLwotCQlmb3IgKGNoID0gMDsgY2ggPCBlZXByb21fY2hfY291bnQ7IGNoKyspIHsKLQkJCWNoX2luZm8tPmNoYW5uZWwgPSBlZXByb21fY2hfaW5kZXhbY2hdOwotCQkJY2hfaW5mby0+YmFuZCA9IChiYW5kID09IDEpID8gSUVFRTgwMjExX0JBTkRfMkdIWiA6Ci0JCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWjsKLQotCQkJLyogcGVybWFuZW50bHkgc3RvcmUgRUVQUk9NJ3MgY2hhbm5lbCByZWd1bGF0b3J5IGZsYWdzCi0JCQkgKiAgIGFuZCBtYXggcG93ZXIgaW4gY2hhbm5lbCBpbmZvIGRhdGFiYXNlLiAqLwotCQkJY2hfaW5mby0+ZWVwcm9tID0gZWVwcm9tX2NoX2luZm9bY2hdOwotCi0JCQkvKiBDb3B5IHRoZSBydW4tdGltZSBmbGFncyBzbyB0aGV5IGFyZSB0aGVyZSBldmVuIG9uCi0JCQkgKiBpbnZhbGlkIGNoYW5uZWxzICovCi0JCQljaF9pbmZvLT5mbGFncyA9IGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFnczsKLQotCQkJaWYgKCEoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkpIHsKLQkJCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIEZsYWdzICV4IFslc0dIel0gLSAiCi0JCQkJCSAgICAgICAiTm8gdHJhZmZpY1xuIiwKLQkJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCi0JCQkJCSAgICAgICBjaF9pbmZvLT5mbGFncywKLQkJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KLQkJCQkJICAgICAgICI1LjIiIDogIjIuNCIpOwotCQkJCWNoX2luZm8rKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogSW5pdGlhbGl6ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KLQkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBjaF9pbmZvLT5jdXJyX3R4cG93ID0KLQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPnNjYW5fcG93ZXIgPSBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPm1pbl9wb3dlciA9IDA7Ci0KLQkJCUlXTF9ERUJVR19JTkZPKCJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMoMHglMDJ4IgotCQkJCSAgICAgICAiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAotCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAotCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/Ci0JCQkJICAgICAgICI1LjIiIDogIjIuNCIsCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChWQUxJRCksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChJQlNTKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKEFDVElWRSksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChSQURBUiksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChXSURFKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKERGUyksCi0JCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFncywKLQkJCQkgICAgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcsCi0JCQkJICAgICAgICgoZWVwcm9tX2NoX2luZm9bY2hdLgotCQkJCQkgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9JQlNTKQotCQkJCQkmJiAhKGVlcHJvbV9jaF9pbmZvW2NoXS4KLQkJCQkJICAgICBmbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSkKLQkJCQkgICAgICAgPyAiIiA6ICJub3QgIik7Ci0KLQkJCS8qIFNldCB0aGUgdXNlcl90eHBvd2VyX2xpbWl0IHRvIHRoZSBoaWdoZXN0IHBvd2VyCi0JCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KLQkJCWlmIChlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZyA+Ci0JCQkgICAgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KQotCQkJCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9Ci0JCQkJICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOwotCi0JCQljaF9pbmZvKys7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdXAgdHhwb3dlciBzZXR0aW5ncyBpbiBkcml2ZXIgZm9yIGFsbCBjaGFubmVscyAqLwotCWlmIChpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHByaXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogaXdsMzk0NV9mcmVlX2NoYW5uZWxfbWFwIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2wzOTQ1X2luaXRfY2hhbm5lbF9tYXAKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2NoYW5uZWxfbWFwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+Y2hhbm5lbF9pbmZvKTsKLQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKLX0KLQotLyogRm9yIGFjdGl2ZSBzY2FuLCBsaXN0ZW4gQUNUSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbCBhZnRlcgotICogc2VuZGluZyBwcm9iZSByZXEuICBUaGlzIHNob3VsZCBiZSBzZXQgbG9uZyBlbm91Z2ggdG8gaGVhciBwcm9iZSByZXNwb25zZXMKLSAqIGZyb20gbW9yZSB0aGFuIG9uZSBBUC4gICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV8yNCAgICAoMzApCS8qIGFsbCB0aW1lcyBpbiBtc2VjICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MiAgICAoMjApCi0KLSNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKDMpCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICgyKQotCi0vKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCi0gKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCi0gKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAotICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncwotICogbm8gb3RoZXIgdHJhZmZpYykuCi0gKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCi0jZGVmaW5lIElXTF9QTENQX1FVSUVUX1RIUkVTSCAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpCS8qIHBhY2tldHMgKi8KLSNkZWZpbmUgSVdMX0FDVElWRV9RVUlFVF9USU1FICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMTApCS8qIG1zZWMgKi8KLQotLyogRm9yIHBhc3NpdmUgc2NhbiwgbGlzdGVuIFBBU1NJVkVfRFdFTExfVElNRSAobXNlYykgb24gZWFjaCBjaGFubmVsLgotICogTXVzdCBiZSBzZXQgbG9uZ2VyIHRoYW4gYWN0aXZlIGR3ZWxsIHRpbWUuCi0gKiBGb3IgdGhlIG1vc3QgcmVsaWFibGUgc2Nhbiwgc2V0ID4gQVAgYmVhY29uIGludGVydmFsICh0eXBpY2FsbHkgMTAwbXNlYykuICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfMjQgICAoMjApCS8qIGFsbCB0aW1lcyBpbiBtc2VjICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTIgICAoMTApCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgICAgICAoMTAwKQotI2RlZmluZSBJV0xfQ0hBTk5FTF9UVU5FX1RJTUUgICAgICAgNQotCi0jZGVmaW5lIElXTF9TQ0FOX1BST0JFX01BU0sobikJIChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkKLQotc3RhdGljIGlubGluZSB1MTYgaXdsMzk0NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkJCXU4IG5fcHJvYmVzKQotewotCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfNTIgKwotCQkJSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfNTJHSFogKiAobl9wcm9iZXMgKyAxKTsKLQllbHNlCi0JCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQgKwotCQkJSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKiAobl9wcm9iZXMgKyAxKTsKLX0KLQotc3RhdGljIHUxNiBpd2wzOTQ1X2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JdTE2IHBhc3NpdmUgPSAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSA/Ci0JICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0IDoKLQkgICAgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSArIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTI7Ci0KLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCS8qIElmIHdlJ3JlIGFzc29jaWF0ZWQsIHdlIGNsYW1wIHRoZSBtYXhpbXVtIHBhc3NpdmUKLQkJICogZHdlbGwgdGltZSB0byBiZSA5OCUgb2YgdGhlIGJlYWNvbiBpbnRlcnZhbCAobWludXMKLQkJICogMiAqIGNoYW5uZWwgdHVuZSB0aW1lKSAqLwotCQlwYXNzaXZlID0gcHJpdi0+YmVhY29uX2ludDsKLQkJaWYgKChwYXNzaXZlID4gSVdMX1BBU1NJVkVfRFdFTExfQkFTRSkgfHwgIXBhc3NpdmUpCi0JCQlwYXNzaXZlID0gSVdMX1BBU1NJVkVfRFdFTExfQkFTRTsKLQkJcGFzc2l2ZSA9IChwYXNzaXZlICogOTgpIC8gMTAwIC0gSVdMX0NIQU5ORUxfVFVORV9USU1FICogMjsKLQl9Ci0KLQlyZXR1cm4gcGFzc2l2ZTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJICAgICB1OCBpc19hY3RpdmUsIHU4IG5fcHJvYmVzLAogCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsICpzY2FuX2NoKQogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHMgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAl1MTYgcGFzc2l2ZV9kd2VsbCA9IDA7CiAJdTE2IGFjdGl2ZV9kd2VsbCA9IDA7CiAJaW50IGFkZGVkLCBpOwogCi0Jc2JhbmQgPSBpd2wzOTQ1X2dldF9iYW5kKHByaXYsIGJhbmQpOworCXNiYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIGJhbmQpOwogCWlmICghc2JhbmQpCiAJCXJldHVybiAwOwogCiAJY2hhbm5lbHMgPSBzYmFuZC0+Y2hhbm5lbHM7CiAKLQlhY3RpdmVfZHdlbGwgPSBpd2wzOTQ1X2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kLCBuX3Byb2Jlcyk7Ci0JcGFzc2l2ZV9kd2VsbCA9IGl3bDM5NDVfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kKTsKKwlhY3RpdmVfZHdlbGwgPSBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQsIG5fcHJvYmVzKTsKKwlwYXNzaXZlX2R3ZWxsID0gaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CiAKIAlpZiAocGFzc2l2ZV9kd2VsbCA8PSBhY3RpdmVfZHdlbGwpCiAJCXBhc3NpdmVfZHdlbGwgPSBhY3RpdmVfZHdlbGwgKyAxOwpAQCAtNDc3MSw5ICsyMjQ5LDkgQEAKIAogCQlzY2FuX2NoLT5jaGFubmVsID0gY2hhbm5lbHNbaV0uaHdfdmFsdWU7CiAKLQkJY2hfaW5mbyA9IGl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBzY2FuX2NoLT5jaGFubmVsKTsKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIHNjYW5fY2gtPmNoYW5uZWwpOwogCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAogCQkJCSAgICAgICBzY2FuX2NoLT5jaGFubmVsKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC00Nzk4LDEyICsyMjc2LDEyIEBACiAJCSAqIGhlYXJpbmcgY2xlYXIgUnggcGFja2V0KS4qLwogCQlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID49IDIpIHsKIAkJCWlmIChuX3Byb2JlcykKLQkJCQlzY2FuX2NoLT50eXBlIHw9IElXTF9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOworCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMMzlfU0NBTl9QUk9CRV9NQVNLKG5fcHJvYmVzKTsKIAkJfSBlbHNlIHsKIAkJCS8qIHVDb2RlIHYxIGRvZXMgbm90IGFsbG93IHNldHRpbmcgZGlyZWN0IHByb2JlIGJpdHMgb24KIAkJCSAqIHBhc3NpdmUgY2hhbm5lbC4gKi8KIAkJCWlmICgoc2Nhbl9jaC0+dHlwZSAmIDEpICYmIG5fcHJvYmVzKQotCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMX1NDQU5fUFJPQkVfTUFTSyhuX3Byb2Jlcyk7CisJCQkJc2Nhbl9jaC0+dHlwZSB8PSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOwogCQl9CiAKIAkJLyogU2V0IHR4cG93ZXIgbGV2ZWxzIHRvIGRlZmF1bHRzICovCkBAIC00ODIxLDcgKzIyOTksNyBAQAogCQkJICovCiAJCX0KIAotCQlJV0xfREVCVUdfU0NBTigiU2Nhbm5pbmcgJWQgWyVzICVkXVxuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW5uaW5nICVkIFslcyAlZF1cbiIsCiAJCQkgICAgICAgc2Nhbl9jaC0+Y2hhbm5lbCwKIAkJCSAgICAgICAoc2Nhbl9jaC0+dHlwZSAmIDEpID8gIkFDVElWRSIgOiAiUEFTU0lWRSIsCiAJCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiAxKSA/CkBAIC00ODMxLDExICsyMzA5LDExIEBACiAJCWFkZGVkKys7CiAJfQogCi0JSVdMX0RFQlVHX1NDQU4oInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CiAJcmV0dXJuIGFkZGVkOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfaHdfcmF0ZXMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9od19yYXRlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzKQogewogCWludCBpOwpAQCAtNDg0NSw3ICsyMzIzLDcgQEAKIAkJcmF0ZXNbaV0uaHdfdmFsdWUgPSBpOyAvKiBSYXRlIHNjYWxpbmcgd2lsbCB3b3JrIG9uIGluZGV4ZXMgKi8KIAkJcmF0ZXNbaV0uaHdfdmFsdWVfc2hvcnQgPSBpOwogCQlyYXRlc1tpXS5mbGFncyA9IDA7Ci0JCWlmICgoaSA+IElXTF9MQVNUX09GRE1fUkFURSkgfHwgKGkgPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkgeworCQlpZiAoKGkgPiBJV0wzOV9MQVNUX09GRE1fUkFURSkgfHwgKGkgPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkgewogCQkJLyoKIAkJCSAqIElmIENDSyAhPSAxTSB0aGVuIHNldCBzaG9ydCBwcmVhbWJsZSByYXRlIGZsYWcuCiAJCQkgKi8KQEAgLTQ4NTUsMTQ1ICsyMzMzLDEzIEBACiAJfQogfQogCi0vKioKLSAqIGl3bDM5NDVfaW5pdF9nZW9zIC0gSW5pdGlhbGl6ZSBtYWM4MDIxMSdzIGdlby9jaGFubmVsIGluZm8gYmFzZWQgZnJvbSBlZXByb20KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2luaXRfZ2VvcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmdlb19jaDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzOwotCWludCBpID0gMDsKLQotCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8Ci0JICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7Ci0JCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpICoKLQkJCSAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwotCWlmICghY2hhbm5lbHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmF0ZXMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYXRlKSAqIChJV0xfUkFURV9DT1VOVCArIDEpKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghcmF0ZXMpIHsKLQkJa2ZyZWUoY2hhbm5lbHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiA1LjJHSHogY2hhbm5lbHMgc3RhcnQgYWZ0ZXIgdGhlIDIuNEdIeiBjaGFubmVscyAqLwotCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCXNiYW5kLT5jaGFubmVscyA9ICZjaGFubmVsc1tBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMSldOwotCS8qIGp1c3QgT0ZETSAqLwotCXNiYW5kLT5iaXRyYXRlcyA9ICZyYXRlc1tJV0xfRklSU1RfT0ZETV9SQVRFXTsKLQlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UIC0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQotCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCXNiYW5kLT5jaGFubmVscyA9IGNoYW5uZWxzOwotCS8qIE9GRE0gJiBDQ0sgKi8KLQlzYmFuZC0+Yml0cmF0ZXMgPSByYXRlczsKLQlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UOwotCi0JcHJpdi0+aWVlZV9jaGFubmVscyA9IGNoYW5uZWxzOwotCXByaXYtPmllZWVfcmF0ZXMgPSByYXRlczsKLQotCWl3bDM5NDVfaW5pdF9od19yYXRlcyhwcml2LCByYXRlcyk7Ci0KLQlmb3IgKGkgPSAwOyAgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgewotCQljaCA9ICZwcml2LT5jaGFubmVsX2luZm9baV07Ci0KLQkJLyogRklYTUU6IG1pZ2h0IGJlIHJlbW92ZWQgaWYgc2NhbiBpcyBPSyovCi0JCWlmICghaXNfY2hhbm5lbF92YWxpZChjaCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaXNfY2hhbm5lbF9hX2JhbmQoY2gpKQotCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCQllbHNlCi0JCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0KLQkJZ2VvX2NoID0gJnNiYW5kLT5jaGFubmVsc1tzYmFuZC0+bl9jaGFubmVscysrXTsKLQotCQlnZW9fY2gtPmNlbnRlcl9mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGNoLT5jaGFubmVsKTsKLQkJZ2VvX2NoLT5tYXhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKLQkJZ2VvX2NoLT5tYXhfYW50ZW5uYV9nYWluID0gMHhmZjsKLQkJZ2VvX2NoLT5od192YWx1ZSA9IGNoLT5jaGFubmVsOwotCi0JCWlmIChpc19jaGFubmVsX3ZhbGlkKGNoKSkgewotCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JQlNTOwotCi0JCQlpZiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOwotCi0JCQlpZiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9SQURBUjsKLQotCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+bWF4X2NoYW5uZWxfdHhwb3dlcl9saW1pdCkKLQkJCQlwcml2LT5tYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0ID0KLQkJCQkgICAgY2gtPm1heF9wb3dlcl9hdmc7Ci0JCX0gZWxzZSB7Ci0JCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwotCQl9Ci0KLQkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwotCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwotCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MCVYXG4iLAotCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAotCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAotCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/Ci0JCQkJInJlc3RyaWN0ZWQiIDogInZhbGlkIiwKLQkJCQkgZ2VvX2NoLT5mbGFncyk7Ci0JfQotCi0JaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCi0JICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKLQkJIHByaXYtPmNmZy0+c2t1ICY9IH5JV0xfU0tVX0E7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCSAgICAgICAiOiBUdW5hYmxlIGNoYW5uZWxzOiAlZCA4MDIuMTFiZywgJWQgODAyLjExYSBjaGFubmVsc1xuIiwKLQkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscywKLQkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyk7Ci0KLQlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscykKLQkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9Ci0JCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpCi0JCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPQotCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCi0Jc2V0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpd2wzOTQ1X2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsMzk0NV9pbml0X2dlb3MKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2dlb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlrZnJlZShwcml2LT5pZWVlX2NoYW5uZWxzKTsKLQlrZnJlZShwcml2LT5pZWVlX3JhdGVzKTsKLQljbGVhcl9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHVDb2RlIGRvd25sb2FkIGZ1bmN0aW9ucwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2koc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2koc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2NvZGUpOwogCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2RhdGEpOwpAQCAtNTAwNywyOSArMjM1MywzMCBAQAogICogaXdsMzk0NV92ZXJpZnlfaW5zdF9mdWxsIC0gdmVyaWZ5IHJ1bnRpbWUgdUNvZGUgaW1hZ2UgaW4gY2FyZCB2cy4gaG9zdCwKICAqICAgICBsb29raW5nIGF0IGFsbCBkYXRhLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdmVyaWZ5X2luc3RfZnVsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X2Z1bGwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQogewogCXUzMiB2YWw7CiAJdTMyIHNhdmVfbGVuID0gbGVuOwogCWludCByYyA9IDA7CiAJdTMyIGVycmNudDsKIAotCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCisJCQkgICAgICAgSVdMMzlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCiAJZXJyY250ID0gMDsKIAlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CiAJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQl2YWwgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgogCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwogCQkJcmMgPSAtRUlPOwpAQCAtNTAzOSwxMCArMjM4NiwxMSBAQAogCQl9CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWlmICghZXJyY250KQotCQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTUwNTMsMTYgKzI0MDEsMTYgQEAKICAqICAgdXNpbmcgc2FtcGxlIGRhdGEgMTAwIGJ5dGVzIGFwYXJ0LiAgSWYgdGhlc2Ugc2FtcGxlIHBvaW50cyBhcmUgZ29vZCwKICAqICAgaXQncyBhIHByZXR0eSBnb29kIGJldCB0aGF0IGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGVtIGlzIGdvb2QsIHRvby4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsIHUzMiBsZW4pCiB7CiAJdTMyIHZhbDsKIAlpbnQgcmMgPSAwOwogCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTUwNzAsMTIgKzI0MTgsMTIgQEAKIAkJLyogcmVhZCBkYXRhIGNvbWVzIHRocm91Z2ggc2luZ2xlIHBvcnQsIGF1dG8taW5jciBhZGRyICovCiAJCS8qIE5PVEU6IFVzZSB0aGUgZGVidWdsZXNzIHJlYWQgc28gd2UgZG9uJ3QgZmxvb2Qga2VybmVsIGxvZwogCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCi0JCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKLQkJCWkgKyBSVENfSU5TVF9MT1dFUl9CT1VORCk7Ci0JCXZhbCA9IF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCisJCQlpICsgSVdMMzlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CiAjaWYgMCAvKiBFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscyAqLwotCQkJSVdMX0VSUk9SKCJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCisJCQlJV0xfRVJSKHByaXYsICJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCiAJCQkJICAib2Zmc2V0IDB4JXgsIGlzIDB4JXgsIHMvYiAweCV4XG4iLAogCQkJCSAgaSwgdmFsLCAqaW1hZ2UpOwogI2VuZGlmCkBAIC01MDg2LDcgKzI0MzQsNyBAQAogCQl9CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTUwOTYsNyArMjQ0NCw3IEBACiAgKiBpd2wzOTQ1X3ZlcmlmeV91Y29kZSAtIGRldGVybWluZSB3aGljaCBpbnN0cnVjdGlvbiBpbWFnZSBpcyBpbiBTUkFNLAogICogICAgYW5kIHZlcmlmeSBpdHMgY29udGVudHMKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJX19sZTMyICppbWFnZTsKIAl1MzIgbGVuOwpAQCAtNTEwNyw3ICsyNDU1LDcgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKIAlyYyA9IGl3bDM5NDVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MTE2LDcgKzI0NjQsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwogCXJjID0gaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKHJjID09IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTEyNSwxMSArMjQ3MywxMSBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwogCXJjID0gaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKHJjID09IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9FUlJPUigiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKKwlJV0xfRVJSKHByaXYsICJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOwogCiAJLyogU2luY2Ugbm90aGluZyBzZWVtcyB0byBtYXRjaCwgc2hvdyBmaXJzdCBzZXZlcmFsIGRhdGEgZW50cmllcyBpbgogCSAqIGluc3RydWN0aW9uIFNSQU0sIHNvIG1heWJlIHZpc3VhbCBpbnNwZWN0aW9uIHdpbGwgZ2l2ZSBhIGNsdWUuCkBAIC01MTQxLDE2MCArMjQ4OSwxMCBAQAogCXJldHVybiByYzsKIH0KIAotCi0vKiBjaGVjayBjb250ZW50cyBvZiBzcGVjaWFsIGJvb3RzdHJhcCB1Q29kZSBTUkFNICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdmVyaWZ5X2JzbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCV9fbGUzMiAqaW1hZ2UgPSBwcml2LT51Y29kZV9ib290LnZfYWRkcjsKLQl1MzIgbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47Ci0JdTMyIHJlZzsKLQl1MzIgdmFsOwotCi0JSVdMX0RFQlVHX0lORk8oIkJlZ2luIHZlcmlmeSBic21cbiIpOwotCi0JLyogdmVyaWZ5IEJTTSBTUkFNIGNvbnRlbnRzICovCi0JdmFsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHKTsKLQlmb3IgKHJlZyA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOwotCSAgICAgcmVnIDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47Ci0JICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKLQkJdmFsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgcmVnKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKLQkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKLQkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAotCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKLQkJCQkgIHZhbCwgbGUzMl90b19jcHUoKmltYWdlKSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfbG9hZF9ic20gLSBMb2FkIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMKLSAqCi0gKiBCU00gb3BlcmF0aW9uOgotICoKLSAqIFRoZSBCb290c3RyYXAgU3RhdGUgTWFjaGluZSAoQlNNKSBzdG9yZXMgYSBzaG9ydCBib290c3RyYXAgdUNvZGUgcHJvZ3JhbQotICogaW4gc3BlY2lhbCBTUkFNIHRoYXQgZG9lcyBub3QgcG93ZXIgZG93biBkdXJpbmcgUkZLSUxMLiAgV2hlbiBwb3dlcmluZyBiYWNrCi0gKiB1cCBhZnRlciBwb3dlci1zYXZpbmcgc2xlZXBzIChvciBkdXJpbmcgaW5pdGlhbCB1Q29kZSBsb2FkKSwgdGhlIEJTTSBsb2FkcwotICogdGhlIGJvb3RzdHJhcCBwcm9ncmFtIGludG8gdGhlIG9uLWJvYXJkIHByb2Nlc3NvciwgYW5kIHN0YXJ0cyBpdC4KLSAqCi0gKiBUaGUgYm9vdHN0cmFwIHByb2dyYW0gbG9hZHMgKHZpYSBETUEpIGluc3RydWN0aW9ucyBhbmQgZGF0YSBmb3IgYSBuZXcKLSAqIHByb2dyYW0gZnJvbSBob3N0IERSQU0gbG9jYXRpb25zIGluZGljYXRlZCBieSB0aGUgaG9zdCBkcml2ZXIgaW4gdGhlCi0gKiBCU01fRFJBTV8qIHJlZ2lzdGVycy4gIE9uY2UgdGhlIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCwgaXQgc3RhcnRzCi0gKiBhdXRvbWF0aWNhbGx5LgotICoKLSAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBwb2ludHMgdGhlIEJTTSB0byB0aGUKLSAqICJpbml0aWFsaXplIiB1Q29kZSBpbWFnZS4gIFRoaXMgdUNvZGUgc2V0cyB1cCBzb21lIGludGVybmFsIGRhdGEsIHRoZW4KLSAqIG5vdGlmaWVzIGhvc3QgdmlhICJpbml0aWFsaXplIGFsaXZlIiB0aGF0IGl0IGlzIGNvbXBsZXRlLgotICoKLSAqIFRoZSBob3N0IHRoZW4gcmVwbGFjZXMgdGhlIEJTTV9EUkFNXyogcG9pbnRlciB2YWx1ZXMgdG8gcG9pbnQgdG8gdGhlCi0gKiBub3JtYWwgcnVudGltZSB1Q29kZSBpbnN0cnVjdGlvbnMgYW5kIGEgYmFja3VwIHVDb2RlIGRhdGEgY2FjaGUgYnVmZmVyCi0gKiAoZmlsbGVkIGluaXRpYWxseSB3aXRoIHN0YXJ0aW5nIGRhdGEgdmFsdWVzIGZvciB0aGUgb24tYm9hcmQgcHJvY2Vzc29yKSwKLSAqIHRoZW4gdHJpZ2dlcnMgdGhlICJpbml0aWFsaXplIiB1Q29kZSB0byBsb2FkIGFuZCBsYXVuY2ggdGhlIHJ1bnRpbWUgdUNvZGUsCi0gKiB3aGljaCBiZWdpbnMgbm9ybWFsIG9wZXJhdGlvbi4KLSAqCi0gKiBXaGVuIGRvaW5nIGEgcG93ZXItc2F2ZSBzaHV0ZG93biwgcnVudGltZSB1Q29kZSBzYXZlcyBkYXRhIFNSQU0gaW50bwotICogdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGluIERSQU0gYmVmb3JlIFNSQU0gaXMgcG93ZXJlZCBkb3duLgotICoKLSAqIFdoZW4gcG93ZXJpbmcgYmFjayB1cCwgdGhlIEJTTSBsb2FkcyB0aGUgYm9vdHN0cmFwIHByb2dyYW0uICBUaGlzIHJlbG9hZHMKLSAqIHRoZSBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGludG8gU1JBTSwKLSAqIGFuZCByZS1sYXVuY2hlcyB0aGUgcnVudGltZSB1Q29kZSBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbG9hZF9ic20oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCWRtYV9hZGRyX3QgcGluc3Q7Ci0JZG1hX2FkZHJfdCBwZGF0YTsKLQl1MzIgaW5zdF9sZW47Ci0JdTMyIGRhdGFfbGVuOwotCWludCByYzsKLQlpbnQgaTsKLQl1MzIgZG9uZTsKLQl1MzIgcmVnX29mZnNldDsKLQotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiBsb2FkIGJzbVxuIik7Ci0KLQkvKiBtYWtlIHN1cmUgYm9vdHN0cmFwIHByb2dyYW0gaXMgbm8gbGFyZ2VyIHRoYW4gQlNNJ3MgU1JBTSBzaXplICovCi0JaWYgKGxlbiA+IElXTF9NQVhfQlNNX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCi0JICogICBpbiBob3N0IERSQU0gLi4uIGhvc3QgRFJBTSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgMzE6MCBmb3IgMzk0NS4KLQkgKiBOT1RFOiAgaXdsMzk0NV9pbml0aWFsaXplX2FsaXZlX3N0YXJ0KCkgd2lsbCByZXBsYWNlIHRoZXNlIHZhbHVlcywKLQkgKiAgICAgICAgYWZ0ZXIgdGhlICJpbml0aWFsaXplIiB1Q29kZSBoYXMgcnVuLCB0byBwb2ludCB0bwotCSAqICAgICAgICBydW50aW1lL3Byb3RvY29sIGluc3RydWN0aW9ucyBhbmQgYmFja3VwIGRhdGEgY2FjaGUuICovCi0JcGluc3QgPSBwcml2LT51Y29kZV9pbml0LnBfYWRkcjsKLQlwZGF0YSA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5wX2FkZHI7Ci0JaW5zdF9sZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQlkYXRhX2xlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47Ci0KLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfUFRSX1JFRywgcGluc3QpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLCBpbnN0X2xlbik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywgZGF0YV9sZW4pOwotCi0JLyogRmlsbCBCU00gbWVtb3J5IHdpdGggYm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLwotCWZvciAocmVnX29mZnNldCA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOwotCSAgICAgcmVnX29mZnNldCA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOwotCSAgICAgcmVnX29mZnNldCArPSBzaXplb2YodTMyKSwgaW1hZ2UrKykKLQkJX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCByZWdfb2Zmc2V0LAotCQkJCQkgIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCi0JcmMgPSBpd2wzOTQ1X3ZlcmlmeV9ic20ocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywKLQkJCQkgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKLQotCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKLQkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAotCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKTsKLQotCS8qIFdhaXQgZm9yIGxvYWQgb2YgYm9vdHN0cmFwIHVDb2RlIHRvIGZpbmlzaCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlkb25lID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHKTsKLQkJaWYgKCEoZG9uZSAmIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCWlmIChpIDwgMTAwKQotCQlJV0xfREVCVUdfSU5GTygiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwotCWVsc2UgewotCQlJV0xfRVJST1IoIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBwb3dlciBtYW5hZ2VtZW50IHVuaXQgdHJpZ2dlcnMgaXQKLQkgKiAgIChlLmcuIHdoZW4gcG93ZXJpbmcgYmFjayB1cCBhZnRlciBwb3dlci1zYXZlIHNodXRkb3duKSAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsCi0JCUJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlRfRU4pOwotCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9uaWNfc3RhcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbmljX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBSZW1vdmUgYWxsIHJlc2V0cyB0byBhbGxvdyBOSUMgdG8gb3BlcmF0ZSAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgMCk7CiB9CiAKIC8qKgpAQCAtNTMwMiw5ICsyNTAwLDkgQEAKICAqCiAgKiBDb3B5IGludG8gYnVmZmVycyBmb3IgY2FyZCB0byBmZXRjaCB2aWEgYnVzLW1hc3RlcmluZwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcmVhZF91Y29kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3JlYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3Vjb2RlICp1Y29kZTsKKwlzdHJ1Y3QgaXdsX3Vjb2RlICp1Y29kZTsKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaW5kZXg7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXc7CiAJLyogZmlybXdhcmUgZmlsZSBuYW1lIGNvbnRhaW5zIHVDb2RlL2RyaXZlciBjb21wYXRpYmlsaXR5IHZlcnNpb24gKi8KQEAgLTUzMjIsNyArMjUyMCw3IEBACiAJCXNwcmludGYoYnVmLCAiJXMldSVzIiwgbmFtZV9wcmUsIGluZGV4LCAiLnVjb2RlIik7CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnVjb2RlX3JhdywgYnVmLCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCUlXTF9FUlJPUigiJXMgZmlybXdhcmUgZmlsZSByZXEgZmFpbGVkOiBSZWFzb24gJWRcbiIsCisJCQlJV0xfRVJSKHByaXYsICIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6ICVkXG4iLAogCQkJCSAgYnVmLCByZXQpOwogCQkJaWYgKHJldCA9PSAtRU5PRU5UKQogCQkJCWNvbnRpbnVlOwpAQCAtNTMzMCw5ICsyNTI4LDEyIEBACiAJCQkJZ290byBlcnJvcjsKIAkJfSBlbHNlIHsKIAkJCWlmIChpbmRleCA8IGFwaV9tYXgpCi0JCQkJSVdMX0VSUk9SKCJMb2FkZWQgZmlybXdhcmUgJXMsIHdoaWNoIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgQVBJIHYldSBpbnN0ZWFkLlxuIiwKKwkJCQlJV0xfRVJSKHByaXYsICJMb2FkZWQgZmlybXdhcmUgJXMsICIKKwkJCQkJIndoaWNoIGlzIGRlcHJlY2F0ZWQuICIKKwkJCQkJIiBQbGVhc2UgdXNlIEFQSSB2JXUgaW5zdGVhZC5cbiIsCiAJCQkJCSAgYnVmLCBhcGlfbWF4KTsKLQkJCUlXTF9ERUJVR19JTkZPKCJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICIKKwkJCQkgICAgICAgIiglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKIAkJCQkgICAgICAgYnVmLCB1Y29kZV9yYXctPnNpemUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTUzNDMsNyArMjU0NCw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KIAlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKLQkJSVdMX0VSUk9SKCJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOworCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTUzNjQsNyArMjU2NSw3IEBACiAJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLwogCiAJaWYgKGFwaV92ZXIgPCBhcGlfbWluIHx8IGFwaV92ZXIgPiBhcGlfbWF4KSB7Ci0JCUlXTF9FUlJPUigiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCisJCUlXTF9FUlIocHJpdiwgIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgogCQkJICAiRHJpdmVyIHN1cHBvcnRzIHYldSwgZmlybXdhcmUgaXMgdiV1LlxuIiwKIAkJCSAgYXBpX21heCwgYXBpX3Zlcik7CiAJCXByaXYtPnVjb2RlX3ZlciA9IDA7CkBAIC01MzcyLDIzICsyNTczLDI5IEBACiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChhcGlfdmVyICE9IGFwaV9tYXgpCi0JCUlXTF9FUlJPUigiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgJXUsICIKKwkJSVdMX0VSUihwcml2LCAiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgJXUsICIKIAkJCSAgImdvdCAldS4gTmV3IGZpcm13YXJlIGNhbiBiZSBvYnRhaW5lZCAiCiAJCQkgICJmcm9tIGh0dHA6Ly93d3cuaW50ZWxsaW51eHdpcmVsZXNzLm9yZy5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAotCQkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfTUlOT1IocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciB1Y29kZSB2ZXJzaW9uIHJhdyA9IDB4JXhcbiIsCisJSVdMX0lORk8ocHJpdiwgImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAorCQlJV0xfVUNPREVfTUFKT1IocHJpdi0+dWNvZGVfdmVyKSwKKwkJSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCisJCUlXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKKwkJSVdMX1VDT0RFX1NFUklBTChwcml2LT51Y29kZV92ZXIpKTsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAogCQkgICAgICAgcHJpdi0+dWNvZGVfdmVyKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgaW5zdCBzaXplID0gJXVcbiIsIGluc3Rfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLCBkYXRhX3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwgaW5pdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgZGF0YSBzaXplID0gJXVcbiIsIGluaXRfZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsIGJvb3Rfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgaW5zdF9zaXplKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgZGF0YSBzaXplID0gJXVcbiIsCisJCSAgICAgICBkYXRhX3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGluaXRfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgaW5pdF9kYXRhX3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgYm9vdCBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGJvb3Rfc2l6ZSk7CiAKIAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCkBAIC01Mzk2LDQwICsyNjAzLDQzIEBACiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCi0JCQkgICAgICAgKGludCl1Y29kZV9yYXctPnNpemUpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZmlsZSBzaXplICV6ZCB0b28gc21hbGxcbiIsCisJCQkgICAgICAgdWNvZGVfcmF3LT5zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAkvKiBWZXJpZnkgdGhhdCB1Q29kZSBpbWFnZXMgd2lsbCBmaXQgaW4gY2FyZCdzIFNSQU0gKi8KLQlpZiAoaW5zdF9zaXplID4gSVdMX01BWF9JTlNUX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbnN0X3NpemUgPiBJV0wzOV9NQVhfSU5TVF9TSVpFKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBpbnN0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAotCWlmIChkYXRhX3NpemUgPiBJV0xfTUFYX0RBVEFfU0laRSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwlpZiAoZGF0YV9zaXplID4gSVdMMzlfTUFYX0RBVEFfU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBkYXRhX3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KLQlpZiAoaW5pdF9zaXplID4gSVdMX01BWF9JTlNUX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGluaXRfc2l6ZSA+IElXTDM5X01BWF9JTlNUX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgaW5pdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCQlpbml0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KLQlpZiAoaW5pdF9kYXRhX3NpemUgPiBJV0xfTUFYX0RBVEFfU0laRSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbml0X2RhdGFfc2l6ZSA+IElXTDM5X01BWF9EQVRBX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWluaXRfZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGJvb3Rfc2l6ZSA+IElXTF9NQVhfQlNNX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGJvb3QgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGJvb3Rfc2l6ZSA+IElXTDM5X01BWF9CU01fU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWJvb3Rfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CkBAIC01NDc5LDE2ICsyNjg5LDE4IEBACiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbMF07CiAJbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBpbnN0ciBsZW4gJXpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgc3JjLCBsZW4pOwotCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCiAJCXByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCAodTMyKXByaXYtPnVjb2RlX2NvZGUucF9hZGRyKTsKIAogCS8qIFJ1bnRpbWUgZGF0YSAoMm5kIGJsb2NrKQogCSAqIE5PVEU6ICBDb3B5IGludG8gYmFja3VwIGJ1ZmZlciB3aWxsIGJlIGRvbmUgaW4gaXdsMzk0NV91cCgpICAqLwogCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2RhdGEubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBkYXRhIGxlbiAlemRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgc3JjLCBsZW4pOwogCkBAIC01NDk2LDggKzI3MDgsOCBAQAogCWlmIChpbml0X3NpemUpIHsKIAkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZV07CiAJCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlWmRcbiIsCi0JCQkgICAgICAgbGVuKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXQudl9hZGRyLCBzcmMsIGxlbik7CiAJfQogCkBAIC01NTA1LDE2ICsyNzE3LDE2IEBACiAJaWYgKGluaXRfZGF0YV9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVkXG4iLAotCQkJICAgICAgIChpbnQpbGVuKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgZGF0YSBsZW4gJXpkXG4iLCBsZW4pOwogCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdF9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOwogCX0KIAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVkXG4iLAotCQkgICAgICAgKGludClsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfYm9vdC52X2FkZHIsIHNyYywgbGVuKTsKIAogCS8qIFdlIGhhdmUgb3VyIGNvcGllcyBub3csIGFsbG93IE9TIHJlbGVhc2UgaXRzIGNvcGllcyAqLwpAQCAtNTUyMiw3ICsyNzM0LDcgQEAKIAlyZXR1cm4gMDsKIAogIGVycl9wY2lfYWxsb2M6Ci0JSVdMX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgcGNpIG1lbW9yeVxuIik7CisJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOwogCXJldCA9IC1FTk9NRU07CiAJaXdsMzk0NV9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIApAQCAtNTU0Myw3ICsyNzU1LDcgQEAKICAqIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGVtIHRvIGxvYWQgcnVudGltZSB1Q29kZSBpbnN0IGFuZCBkYXRhLAogICogYW5kIHRvIHNhdmUgcnVudGltZSBkYXRhIHdoZW4gcG93ZXJpbmcgZG93bi4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NldF91Y29kZV9wdHJzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3Vjb2RlX3B0cnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWRtYV9hZGRyX3QgcGluc3Q7CiAJZG1hX2FkZHJfdCBwZGF0YTsKQEAgLTU1NTUsMjggKzI3NjcsMjggQEAKIAlwZGF0YSA9IHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnBfYWRkcjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgaW1hZ2UgdG8gbG9hZCAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsCiAJCQkJIHByaXYtPnVjb2RlX2RhdGEubGVuKTsKIAogCS8qIEluc3QgYnl0ZSBjb3VudCBtdXN0IGJlIGxhc3QgdG8gc2V0IHVwLCBiaXQgMzEgc2lnbmFscyB1Q29kZQogCSAqICAgdGhhdCBhbGwgbmV3IHB0ci9zaXplIGluZm8gaXMgaW4gcGxhY2UgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLAorCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywKIAkJCQkgcHJpdi0+dWNvZGVfY29kZS5sZW4gfCBCU01fRFJBTV9JTlNUX0xPQUQpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIHBvaW50ZXJzIGFyZSBzZXQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01NTg4LDEzICsyODAwLDEzIEBACiAgKgogICogVGVsbCAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gZ28gYWhlYWQgYW5kIGxvYWQgdGhlIHJ1bnRpbWUgdUNvZGUuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBDaGVjayBhbGl2ZSByZXNwb25zZSBmb3IgInZhbGlkIiBzaWduIGZyb20gdUNvZGUgKi8KIAlpZiAocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC01NjA0LDE4ICsyODE2LDE4IEBACiAJaWYgKGl3bDM5NDVfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAogCS8qIFNlbmQgcG9pbnRlcnMgdG8gcHJvdG9jb2wvcnVudGltZSB1Q29kZSBpbWFnZSAuLi4gaW5pdCBjb2RlIHdpbGwKIAkgKiBsb2FkIGFuZCBsYXVuY2ggcnVudGltZSB1Q29kZSwgd2hpY2ggd2lsbCBzZW5kIHVzIGFub3RoZXIgIkFsaXZlIgogCSAqIG5vdGlmaWNhdGlvbi4gKi8KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAlpZiAoaXdsMzk0NV9zZXRfdWNvZGVfcHRycyhwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd29uJ3QgaGFwcGVuOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvdWxkbid0IHNldCB1cCB1Q29kZSBwb2ludGVycy5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCXJldHVybjsKQEAgLTU2MzQsMTggKzI4NDYsMTggQEAKICAqICAgICAgICAgICAgICAgICAgIGZyb20gcHJvdG9jb2wvcnVudGltZSB1Q29kZSAoaW5pdGlhbGl6YXRpb24gdUNvZGUncwogICogICAgICAgICAgICAgICAgICAgQWxpdmUgZ2V0cyBoYW5kbGVkIGJ5IGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydCgpKS4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIAlpbnQgdGhlcm1hbF9zcGluID0gMDsKIAl1MzIgcmZraWxsOwogCi0JSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCiAJaWYgKHByaXYtPmNhcmRfYWxpdmUuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNTY1NSwyMSArMjg2NywyMSBAQAogCWlmIChpd2wzOTQ1X3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCiAJaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIFJGS0lMTCBzdGF0dXMgZnJvbSBhZGFwdGVyXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBSRktJTEwgc3RhdHVzIGZyb20gYWRhcHRlclxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlyZmtpbGwgPSBpd2wzOTQ1X3JlYWRfcHJwaChwcml2LCBBUE1HX1JGS0lMTF9SRUcpOwotCUlXTF9ERUJVR19JTkZPKCJSRktJTEwgc3RhdHVzOiAweCV4XG4iLCByZmtpbGwpOwotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXJma2lsbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19SRktJTExfUkVHKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkZLSUxMIHN0YXR1czogMHgleFxuIiwgcmZraWxsKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJaWYgKHJma2lsbCAmIDB4MSkgewogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtNTY4MSw3ICsyODkzLDcgQEAKIAkJfQogCiAJCWlmICh0aGVybWFsX3NwaW4pCi0JCQlJV0xfREVCVUdfSU5GTygiVGhlcm1hbCBjYWxpYnJhdGlvbiB0b29rICVkdXNcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVGhlcm1hbCBjYWxpYnJhdGlvbiB0b29rICVkdXNcbiIsCiAJCQkJICAgICAgIHRoZXJtYWxfc3BpbiAqIDEwKTsKIAl9IGVsc2UKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CkBAIC01NjkyLDcgKzI5MDQsNyBAQAogCS8qIENsZWFyIG91dCB0aGUgdUNvZGUgZXJyb3IgYml0IGlmIGl0IGlzIHNldCAqLwogCWNsZWFyX2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpOwogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQorCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlyZXR1cm47CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOwpAQCAtNTcwMCw5ICsyOTEyLDkgQEAKIAlwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7CiAJcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5yYXRlc19tYXNrICYgSVdMX0JBU0lDX1JBVEVTX01BU0s7CiAKLQlpd2wzOTQ1X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSkpOworCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICphY3RpdmVfcnhvbiA9CiAJCQkJKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICopKCZwcml2LT5hY3RpdmVfcnhvbik7CiAKQEAgLTU3MTEsMTIgKzI5MjMsMTEgQEAKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCX0gZWxzZSB7CiAJCS8qIEluaXRpYWxpemUgb3VyIHJ4X2NvbmZpZyBkYXRhICovCi0JCWl3bDM5NDVfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhwcml2LCBwcml2LT5pd19tb2RlKTsKLQkJbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIHByaXYtPml3X21vZGUpOwogCX0KIAogCS8qIENvbmZpZ3VyZSBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIHN1cHBvcnQgKi8KLQlpd2wzOTQ1X3NlbmRfYnRfY29uZmlnKHByaXYpOworCWl3bF9zZW5kX2J0X2NvbmZpZyhwcml2KTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgYWRhcHRlciBmb3IgdW5hc3NvY2lhdGVkIG9wZXJhdGlvbiAqLwogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CkBAIC01NzI1LDcgKzI5MzYsNyBAQAogCiAJaXdsMzk0NV9sZWRfcmVnaXN0ZXIocHJpdik7CiAKLQlJV0xfREVCVUdfSU5GTygiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJBTElWRSBwcm9jZXNzaW5nIGNvbXBsZXRlLlxuIik7CiAJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIApAQCAtNTc0NiwxNSArMjk1NywxNSBAQAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7CitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKLXN0YXRpYyB2b2lkIF9faXdsMzk0NV9kb3duKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBfX2l3bDM5NDVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKIAotCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBnb2luZyBkb3duXG4iKTsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCkBAIC01NzczLDExICsyOTg0LDExIEBACiAJCWNsZWFyX2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAogCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CiAKIAkvKiB0ZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF9zeW5jaHJvbml6ZV9pcnEocHJpdik7CiAKQEAgLTU3ODYsNyArMjk5Nyw3IEBACiAKIAkvKiBJZiB3ZSBoYXZlIG5vdCBwcmV2aW91c2x5IGNhbGxlZCBpd2wzOTQ1X2luaXQoKSB0aGVuCiAJICogY2xlYXIgYWxsIGJpdHMgYnV0IHRoZSBSRiBLaWxsIGFuZCBTVVNQRU5EIGJpdHMgYW5kIHJldHVybiAqLwotCWlmICghaXdsMzk0NV9pc19pbml0KHByaXYpKSB7CisJaWYgKCFpd2xfaXNfaW5pdChwcml2KSkgewogCQlwcml2LT5zdGF0dXMgPSB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPDwKIAkJCQkJU1RBVFVTX1JGX0tJTExfSFcgfAogCQkJICAgICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSA8PApAQCAtNTgxNSwyOSArMzAyNiwzMSBAQAogCQkJdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgPDwKIAkJCQlTVEFUVVNfRVhJVF9QRU5ESU5HOwogCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5yZXNldChwcml2KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKwlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChwcml2KTsKIAlpd2wzOTQ1X2h3X3J4cV9zdG9wKHByaXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7Ci0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAorCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAogCQkJCQkgQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXVkZWxheSg1KTsKIAotCWl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHByaXYpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7Ci0JaXdsMzk0NV9od19uaWNfcmVzZXQocHJpdik7CisJaWYgKGV4aXRfcGVuZGluZyB8fCB0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc3RvcChwcml2KTsKKwllbHNlCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMucmVzZXQocHJpdik7CiAKICBleGl0OgotCW1lbXNldCgmcHJpdi0+Y2FyZF9hbGl2ZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3ApKTsKKwltZW1zZXQoJnByaXYtPmNhcmRfYWxpdmUsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApKTsKIAogCWlmIChwcml2LT5pYnNzX2JlYWNvbikKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5pYnNzX2JlYWNvbik7CkBAIC01ODQ3LDcgKzMwNjAsNyBAQAogCWl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZG93bihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kb3duKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJX19pd2wzOTQ1X2Rvd24ocHJpdik7CkBAIC01ODU4LDU4ICszMDcxLDU4IEBACiAKICNkZWZpbmUgTUFYX0hXX1JFU1RBUlRTIDUKIAotc3RhdGljIGludCBfX2l3bDM5NDVfdXAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgX19pd2wzOTQ1X3VwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMsIGk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX1dBUk5JTkcoIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBTVyBSRiBraWxsIChtb2R1bGUgIgorCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgU1cgUkYga2lsbCAobW9kdWxlICIKIAkJCSAgICAicGFyYW1ldGVyKVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICghcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyIHx8ICFwcml2LT51Y29kZV9kYXRhLnZfYWRkcikgewotCQlJV0xfRVJST1IoInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZyB1cFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZyB1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIElmIHBsYXRmb3JtJ3MgUkZfS0lMTCBzd2l0Y2ggaXMgTk9UIHNldCB0byBLSUxMICovCi0JaWYgKGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgorCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgogCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCWVsc2UgewogCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBIVyBSRiBLaWxsIHN3aXRjaFxuIik7CisJCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CiAKIAlyYyA9IGl3bDM5NDVfaHdfbmljX2luaXQocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGludCBuaWNcbiIpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW50IG5pY1xuIik7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAogCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX0NNRF9CTE9DS0VEKTsKIAogCS8qIGNsZWFyIChhZ2FpbiksIHRoZW4gZW5hYmxlIGhvc3QgaW50ZXJydXB0cyAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogCS8qIHJlYWxseSBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKIAogCS8qIENvcHkgb3JpZ2luYWwgdWNvZGUgZGF0YSBpbWFnZSBmcm9tIGRpc2sgaW50byBiYWNrdXAgY2FjaGUuCiAJICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgb24tYm9hcmQgcHJvY2Vzc29yJ3MKQEAgLTU5MjgsMTcgKzMxNDEsMTggQEAKIAkJLyogbG9hZCBib290c3RyYXAgc3RhdGUgbWFjaGluZSwKIAkJICogbG9hZCBib290c3RyYXAgcHJvZ3JhbSBpbnRvIHByb2Nlc3NvcidzIG1lbW9yeSwKIAkJICogcHJlcGFyZSB0byBsb2FkIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQkJcmMgPSBpd2wzOTQ1X2xvYWRfYnNtKHByaXYpOworCQlwcml2LT5jZmctPm9wcy0+bGliLT5sb2FkX3Vjb2RlKHByaXYpOwogCiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsIHJjKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByYyk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwogCQlpd2wzOTQ1X25pY19zdGFydChwcml2KTsKIAotCQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC01OTQ5LDcgKzMxNjMsNyBAQAogCiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKKwlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNTk2Miw4ICszMTc2LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIGluaXRfYWxpdmVfc3RhcnQud29yayk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgaW5pdF9hbGl2ZV9zdGFydC53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNTk3NSw4ICszMTg5LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19hbGl2ZV9zdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNTk4Niw2NiArMzIwMCwzMSBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3JmX2tpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yZmtpbGxfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByZl9raWxsKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByZmtpbGxfcG9sbC53b3JrKTsKKwl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHByaXYtPnN0YXR1czsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKKwlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpCisJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJZWxzZQorCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOworCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnN0YXR1cykgIT0gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQorCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwpOwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZmtpbGxfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMiAqIEhaKSk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SRl9LSUxMLAotCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCi0JCQkgICJkZXZpY2VcbiIpOwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9IGVsc2UgewotCi0JCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQotCQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgotCQkJCQkgICJkaXNhYmxlZCBieSBTVyBzd2l0Y2hcbiIpOwotCQllbHNlCi0JCQlJV0xfV0FSTklORygiUmFkaW8gRnJlcXVlbmN5IEtpbGwgU3dpdGNoIGlzIE9uOlxuIgotCQkJCSAgICAiS2lsbCBzd2l0Y2ggbXVzdCBiZSB0dXJuZWQgb2ZmIGZvciAiCi0JCQkJICAgICJ3aXJlbGVzcyBuZXR3b3JraW5nIHRvIHdvcmsuXG4iKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiB9CiAKICNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHNjYW5fY2hlY2sud29yayk7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1NDQU4sCi0JCQkgICJTY2FuIGNvbXBsZXRpb24gd2F0Y2hkb2cgcmVzZXR0aW5nIGFkYXB0ZXIgKCVkbXMpXG4iLAotCQkJICBqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCWl3bDM5NDVfc2VuZF9zY2FuX2Fib3J0KHByaXYpOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDM5NDVfcHJpdiwgcmVxdWVzdF9zY2FuKTsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVxdWVzdF9zY2FuKTsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2Nhbl9jbWQpLAogCQkubWV0YS5mbGFncyA9IENNRF9TSVpFX0hVR0UsCkBAIC02MDYxLDggKzMyNDAsOCBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9XQVJOSU5HKCJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CisJCUlXTF9XQVJOKHByaXYsICJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC02MDc0LDM0ICszMjUzLDM2IEBACiAJLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9yIHNjaGVkdWxlZCBpZiB0aGVyZSBpcyBjdXJyZW50bHkKIAkgKiBhIHNjYW4gYWN0aXZlIGluIHRoZSBoYXJkd2FyZS4gKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgaW4gcGFyYWxsZWwuICIKLQkJCSAgICAgICAiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk11bHRpcGxlIGNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0cyAgIgorCQkJCSJJZ25vcmluZyBzZWNvbmQgcmVxdWVzdC5cbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwKKwkJCSJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gUXVldWluZy5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgdW5pbml0aWFsaXplZC4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsCisJCQkiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICghcHJpdi0+c2Nhbl9iYW5kcykgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjExOSwxNCArMzMwMCwxNCBAQAogCXNjYW4tPnF1aWV0X3BsY3BfdGggPSBJV0xfUExDUF9RVUlFVF9USFJFU0g7CiAJc2Nhbi0+cXVpZXRfdGltZSA9IElXTF9BQ1RJVkVfUVVJRVRfVElNRTsKIAotCWlmIChpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJdTE2IGludGVydmFsID0gMDsKIAkJdTMyIGV4dHJhOwogCQl1MzIgc3VzcGVuZF90aW1lID0gMTAwOwogCQl1MzIgc2Nhbl9zdXNwZW5kX3RpbWUgPSAxMDA7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJSVdMX0RFQlVHX0lORk8oIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2Nhbm5pbmcgd2hpbGUgYXNzb2NpYXRlZC4uLlxuIik7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJaW50ZXJ2YWwgPSBwcml2LT5iZWFjb25faW50OwpAQCAtNjE0OCwxNSArMzMyOSwxNCBAQAogCQkgICAgKGV4dHJhIHwgKChzdXNwZW5kX3RpbWUgJSBpbnRlcnZhbCkgKiAxMDI0KSk7CiAKIAkJc2Nhbi0+c3VzcGVuZF90aW1lID0gY3B1X3RvX2xlMzIoc2Nhbl9zdXNwZW5kX3RpbWUpOwotCQlJV0xfREVCVUdfU0NBTigic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJICAgICAgIHNjYW5fc3VzcGVuZF90aW1lLCBpbnRlcnZhbCk7CiAJfQogCiAJLyogV2Ugc2hvdWxkIGFkZCB0aGUgYWJpbGl0eSBmb3IgdXNlciB0byBsb2NrIHRvIFBBU1NJVkUgT05MWSAqLwogCWlmIChwcml2LT5vbmVfZGlyZWN0X3NjYW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4KLQkJICAgICgiS2lja2luZyBvZmYgb25lIGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAotCQkgICAgIHByaW50X3NzaWQoc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWQsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJLaWNraW5nIG9mZiBvbmUgZGlyZWN0IHNjYW4gZm9yICclcydcbiIsCisJCQkJcHJpbnRfc3NpZChzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZCwKIAkJCQlwcml2LT5kaXJlY3Rfc3NpZF9sZW4pKTsKIAkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uaWQgPSBXTEFOX0VJRF9TU0lEOwogCQlzY2FuLT5kaXJlY3Rfc2NhblswXS5sZW4gPSBwcml2LT5kaXJlY3Rfc3NpZF9sZW47CkBAIC02MTY0LDE1ICszMzQ0LDEyIEBACiAJCSAgICAgICBwcml2LT5kaXJlY3Rfc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKIAkJbl9wcm9iZXMrKzsKIAl9IGVsc2UKLQkJSVdMX0RFQlVHX1NDQU4oIktpY2tpbmcgb2ZmIG9uZSBpbmRpcmVjdCBzY2FuLlxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJLaWNraW5nIG9mZiBvbmUgaW5kaXJlY3Qgc2Nhbi5cbiIpOwogCiAJLyogV2UgZG9uJ3QgYnVpbGQgYSBkaXJlY3Qgc2NhbiBwcm9iZSByZXF1ZXN0OyB0aGUgdUNvZGUgd2lsbCBkbwogCSAqIHRoYXQgYmFzZWQgb24gdGhlIGRpcmVjdF9tYXNrIGFkZGVkIHRvIGVhY2ggY2hhbm5lbCBlbnRyeSAqLwotCXNjYW4tPnR4X2NtZC5sZW4gPSBjcHVfdG9fbGUxNigKLQkJaXdsMzk0NV9maWxsX3Byb2JlX3JlcShwcml2LCAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2Nhbi0+ZGF0YSwKLQkJCUlXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOwogCXNjYW4tPnR4X2NtZC50eF9mbGFncyA9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0Jc2Nhbi0+dHhfY21kLnN0YV9pZCA9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCXNjYW4tPnR4X2NtZC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCXNjYW4tPnR4X2NtZC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKIAogCS8qIGZsYWdzICsgcmF0ZSBzZWxlY3Rpb24gKi8KQEAgLTYxODcsMTAgKzMzNjQsMTUgQEAKIAkJc2Nhbi0+Z29vZF9DUkNfdGggPSBJV0xfR09PRF9DUkNfVEg7CiAJCWJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwogCX0gZWxzZSB7Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoCisJCWl3bF9maWxsX3Byb2JlX3JlcShwcml2LCBiYW5kLAorCQkJCSAgIChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCSAgIElXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOworCiAJLyogc2VsZWN0IFJ4IGFudGVubmFzICovCiAJc2Nhbi0+ZmxhZ3MgfD0gaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhwcml2KTsKIApAQCAtNjIwMyw3ICszMzg1LDcgQEAKIAkJCSh2b2lkICopJnNjYW4tPmRhdGFbbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbildKTsKIAogCWlmIChzY2FuLT5jaGFubmVsX2NvdW50ID09IDApIHsKLQkJSVdMX0RFQlVHX1NDQU4oImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiY2hhbm5lbCBjb3VudCAlZFxuIiwgc2Nhbi0+Y2hhbm5lbF9jb3VudCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTYyMTMsNyArMzM5NSw3IEBACiAJc2Nhbi0+bGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbik7CiAKIAlzZXRfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwogCWlmIChyYykKIAkJZ290byBkb25lOwogCkBAIC02MjM5LDcgKzM0MjEsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHVwKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCB1cCk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTYyNDcsMTIgKzM0MjksMTIgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJX19pd2wzOTQ1X3VwKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKKwlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHJlc3RhcnQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlc3RhcnQpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02MjYzLDggKzM0NDUsOCBAQAogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByeF9yZXBsZW5pc2gpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJ4X3JlcGxlbmlzaCk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTYyNzYsMTggKzM0NTgsMTggQEAKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOIChIWioyKQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CiAKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQlJV0xfRVJST1IoIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKKwkJSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCiAKLQlJV0xfREVCVUdfQVNTT0MoIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKQEAgLTYyOTYsMjYgKzM0NzgsMjYgQEAKIAlpZiAoIXByaXYtPnZpZiB8fCAhcHJpdi0+aXNfb3BlbikKIAkJcmV0dXJuOwogCi0JaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CisJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMjAwKTsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAKLQltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl90aW1lX2NtZCkpOworCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fdGltZV9jbWQpKTsKIAlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOwotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAogCQkJICAgICAgc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwgJnByaXYtPnJ4b25fdGltaW5nKTsKIAlpZiAocmMpCi0JCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCisJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkgICAgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkID0gY3B1X3RvX2xlMTYocHJpdi0+YXNzb2NfaWQpOwogCi0JSVdMX0RFQlVHX0FTU09DKCJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YmVhY29uX2ludCk7CiAKIAlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKQEAgLTYzNTUsNTYgKzM1MzcsMTkgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQkgSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAorCQkgSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gJWQgbW9kZVxuIiwKIAkJCSAgIF9fZnVuY19fLCBwcml2LT5pd19tb2RlKTsKIAkJYnJlYWs7CiAJfQogCi0JaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKIAogCS8qIHdlIGhhdmUganVzdCBhc3NvY2lhdGVkLCBkb24ndCBzdGFydCBzY2FuIHRvbyBlYXJseSAqLwogCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU47CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBhYm9ydF9zY2FuKTsKLQotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0Jc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JaXdsMzk0NV9zZW5kX3NjYW5fYWJvcnQocHJpdik7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBzY2FuX2NvbXBsZXRlZCk7Ci0KLQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfU0NBTiwgIlNDQU4gY29tcGxldGUgc2NhblxuIik7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfQ09ORl9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9tYWNfY29uZmlnKHByaXYtPmh3LCAwKTsKLQotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odyk7Ci0KLQkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKLQkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBtYWM4MDIxMSBlbnRyeSBwb2ludCBmdW5jdGlvbnMKQEAgLTY0MTUsMzYgKzM1NjAsMjIgQEAKIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJldDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpKSB7Ci0JCUlXTF9FUlJPUigiRmFpbCB0byBwY2lfZW5hYmxlX2RldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwY2lfcmVzdG9yZV9zdGF0ZShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgaXdsMzk0NV9pc3IsIElSUUZfU0hBUkVELAotCQkJICBEUlZfTkFNRSwgcHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkXG4iLCBwcml2LT5wY2lfZGV2LT5pcnEpOwotCQlnb3RvIG91dF9kaXNhYmxlX21zaTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCkpOworCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSk7CiAJLyogZmV0Y2ggdWNvZGUgZmlsZSBmcm9tIGRpc2ssIGFsbG9jIGFuZCBjb3B5IHRvIGJ1cy1tYXN0ZXIgYnVmZmVycyAuLi4KIAkgKiB1Y29kZSBmaWxlbmFtZSBhbmQgbWF4IHNpemVzIGFyZSBjYXJkLXNwZWNpZmljLiAqLwogCiAJaWYgKCFwcml2LT51Y29kZV9jb2RlLmxlbikgewogCQlyZXQgPSBpd2wzOTQ1X3JlYWRfdWNvZGUocHJpdik7CiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHJlYWQgbWljcm9jb2RlOiAlZFxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCQl9CkBAIC02NDU0LDEyICszNTg1LDEyIEBACiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCWl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKKwlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0IFVQIHdvcmsuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnQgVVAgd29yay5cbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CkBAIC02NDcxLDg2ICszNjAyLDg3IEBACiAJCQlVQ09ERV9SRUFEWV9USU1FT1VUKTsKIAlpZiAoIXJldCkgewogCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiV2FpdCBmb3IgU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOworCQkJSVdMX0VSUihwcml2LAorCQkJCSJXYWl0IGZvciBTVEFSVF9BTElWRSB0aW1lb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCQl9CiAJfQogCisJLyogdWNvZGUgaXMgcnVubmluZyBhbmQgd2lsbCBzZW5kIHJma2lsbCBub3RpZmljYXRpb25zLAorCSAqIG5vIG5lZWQgdG8gcG9sbCB0aGUga2lsbHN3aXRjaCBzdGF0ZSBhbnltb3JlICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZraWxsX3BvbGwpOworCiAJcHJpdi0+aXNfb3BlbiA9IDE7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiAKIG91dF9yZWxlYXNlX2lycToKLQlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOwotb3V0X2Rpc2FibGVfbXNpOgotCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+cGNpX2Rldik7CiAJcHJpdi0+aXNfb3BlbiA9IDA7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGZhaWxlZFxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGZhaWxlZFxuIik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9tYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghcHJpdi0+aXNfb3BlbikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2tpcFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBza2lwXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXByaXYtPmlzX29wZW4gPSAwOwogCi0JaWYgKGl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CiAJCS8qIHN0b3AgbWFjLCBjYW5jZWwgYW55IHNjYW4gcmVxdWVzdCBhbmQgY2xlYXIKIAkJICogUlhPTl9GSUxURVJfQVNTT0NfTVNLIEJJVAogCQkgKi8KIAkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJfQogCiAJaXdsMzk0NV9kb3duKHByaXYpOwogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX3NhdmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJLyogc3RhcnQgcG9sbGluZyB0aGUga2lsbHN3aXRjaCBzdGF0ZSBhZ2FpbiAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZmtpbGxfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMiAqIEhaKSk7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCUlXTF9ERUJVR19UWCgiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCisJSVdMX0RFQlVHX1RYKHByaXYsICJkZXYtPnhtaXQoJWQgYnl0ZXMpIGF0IHJhdGUgMHglMDJ4XG4iLCBza2ItPmxlbiwKIAkJICAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSktPmJpdHJhdGUpOwogCiAJaWYgKGl3bDM5NDVfdHhfc2tiKHByaXYsIHNrYikpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlcjogdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlcjogdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CiAKIAlpZiAocHJpdi0+dmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKQEAgLTY1NjMsMTYgKzM2OTUsMTYgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+bWFjX2FkZHIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJTZXQ6ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIlNldDogJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CiAJCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAl9CiAKLQlpZiAoaXdsMzk0NV9pc19yZWFkeShwcml2KSkKKwlpZiAoaXdsX2lzX3JlYWR5KHByaXYpKQogCQlpd2wzOTQ1X3NldF9tb2RlKHByaXYsIGNvbmYtPnR5cGUpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU4NSwyNCArMzcxNywyNSBAQAogICovCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsCisJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodW5saWtlbHkoIWl3bDM5NDVfcGFyYW1fZGlzYWJsZV9od19zY2FuICYmCisJaWYgKHVubGlrZWx5KCFpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZV9od19zY2FuICYmCiAJCSAgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKIAkJc2V0X2JpdChTVEFUVVNfQ09ORl9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAwOwpAQCAtNjYxMCwyNSArMzc0MywyNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwKLQkJCQkJICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOworCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLAorCQkJCSAgICAgICBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIFslZF0gaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKLQkJCSAgICAgICBjb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LAorCQkJCSJDaGFubmVsICVkIFslZF0gaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKKwkJCQljb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CisJaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbCk7CiAKLQlpd2wzOTQ1X3NldF9mbGFnc19mb3JfcGh5bW9kZShwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kKTsKKwlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwogCiAJLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAogCSAqIGZvciBlYWNoIHBoeW1vZGU7IHNpbmNlIHRoZSBwaHltb2RlIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0CiAJICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzICovCi0JaXdsMzk0NV9zZXRfcmF0ZShwcml2KTsKKwlpd2xfc2V0X3JhdGUocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTY2MzksMjggKzM3NzMsMzIgQEAKIAl9CiAjZW5kaWYKIAotCWl3bDM5NDVfcmFkaW9fa2lsbF9zdyhwcml2LCAhY29uZi0+cmFkaW9fZW5hYmxlZCk7Ci0KLQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHJhZGlvIGRpc2FibGVkXG4iKTsKKwlpZiAoY29uZi0+cmFkaW9fZW5hYmxlZCAmJiBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8ocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGLUtJTEwgLSB3YWl0aW5nIGZvciB1Q29kZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYga2lsbFxuIik7CisJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7CisJCWl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8ocHJpdik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBraWxsXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JaXdsMzk0NV9zZXRfcmF0ZShwcml2KTsKKwlpd2xfc2V0X3JhdGUocHJpdik7CiAKIAlpZiAobWVtY21wKCZwcml2LT5hY3RpdmVfcnhvbiwKIAkJICAgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpKQogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCWVsc2UKLQkJSVdMX0RFQlVHX0lORk8oIk5vIHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vdCByZS1zZW5kaW5nIHNhbWUgUlhPTiBjb25maWd1cmF0aW9uXG4iKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiBvdXQ6CiAJY2xlYXJfYml0KFNUQVRVU19DT05GX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwpAQCAtNjY2OCw3ICszODA2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NvbmZpZ19hcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9jb25maWdfYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYyA9IDA7CiAKQEAgLTY2NzYsMTkgKzM4MTQsMjAgQEAKIAkJcmV0dXJuOwogCiAJLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgZG9uZSBvbmx5IGF0IEFQIGJyaW5nIHVwICovCi0JaWYgKCEoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSkgeworCWlmICghKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSkgewogCiAJCS8qIFJYT04gLSB1bmFzc29jICh0byBzZXQgdGltaW5nIGNvbW1hbmQpICovCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAogCQkvKiBSWE9OIFRpbWluZyAqLwotCQltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl90aW1lX2NtZCkpOworCQltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX3RpbWVfY21kKSk7CiAJCWl3bDM5NDVfc2V0dXBfcnhvbl90aW1pbmcocHJpdik7Ci0JCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCi0JCQkJc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwgJnByaXYtPnJ4b25fdGltaW5nKTsKKwkJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAorCQkJCSAgICAgIHNpemVvZihwcml2LT5yeG9uX3RpbWluZyksCisJCQkJICAgICAgJnByaXYtPnJ4b25fdGltaW5nKTsKIAkJaWYgKHJjKQotCQkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKKwkJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkJCSJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKIAkJLyogRklYTUU6IHdoYXQgc2hvdWxkIGJlIHRoZSBhc3NvY19pZCBmb3IgQVA/ICovCkBAIC02NzE2LDcgKzM4NTUsNyBAQAogCQkvKiByZXN0b3JlIFJYT04gYXNzb2MgKi8KIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7Ci0JCWl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgaXdsMzk0NV9icm9hZGNhc3RfYWRkciwgMCwgMCk7CisJCWl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDAsIDApOwogCX0KIAlpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChwcml2KTsKIApAQCAtNjcyNywxNiArMzg2NiwxNiBAQAogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmM7CiAKIAlpZiAoY29uZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChwcml2LT52aWYgIT0gdmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTY3NTMsMTMgKzM4OTIsMTMgQEAKIAkJCXJldHVybiByYzsKIAl9CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGNvbmYtPmJzc2lkKQotCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkOiAlcE1cbiIsIGNvbmYtPmJzc2lkKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CiAKIC8qCiAgKiB2ZXJ5IGR1YmlvdXMgY29kZSB3YXMgaGVyZTsgdGhlIHByb2JlIGZpbHRlcmluZyBmbGFnIGlzIG5ldmVyIHNldDoKQEAgLTY3NzIsNyArMzkxMSw3IEBACiAJCWlmICghY29uZi0+YnNzaWQpIHsKIAkJCWNvbmYtPmJzc2lkID0gcHJpdi0+bWFjX2FkZHI7CiAJCQltZW1jcHkocHJpdi0+YnNzaWQsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQgd2FzIHNldCB0bzogJXBNXG4iLAogCQkJCQkgICBjb25mLT5ic3NpZCk7CiAJCX0KIAkJaWYgKHByaXYtPmlic3NfYmVhY29uKQpAQCAtNjc4MSwxNyArMzkyMCwxNyBAQAogCQlwcml2LT5pYnNzX2JlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOwogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJZ290byBkb25lOwogCiAJaWYgKGNvbmYtPmJzc2lkICYmICFpc196ZXJvX2V0aGVyX2FkZHIoY29uZi0+YnNzaWQpICYmCiAJICAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihjb25mLT5ic3NpZCkpIHsKIAkJLyogSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgSFcgc2NhbiBnb2luZyBvbiBpbiB0aGUgYmFja2dyb3VuZAogCQkgKiB0aGVuIHdlIG5lZWQgdG8gY2FuY2VsIGl0IGVsc2UgdGhlIFJYT04gYmVsb3cgd2lsbCBmYWlsLiAqLwotCQlpZiAoaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJCUlXTF9XQVJOSU5HKCJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgIgorCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgeworCQkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCiAJCQkJICAgICJhZnRlciAxMDBtc1xuIik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nOnNjYW4gYWJvcnQgZmFpbGVkXG4iKTsKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KQEAgLTY4MTMsNzUgKzM5NTIsMjkgQEAKIAkJfQogCiAJfSBlbHNlIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAl9CiAKICBkb25lOgotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKLQkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7Ci0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCX0KLQotCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncwotCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgotCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCi0JICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgotCSAqLwotCi0JKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAotCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKGl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAJfQpAQCAtNjg5MSw3ICszOTg0LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOX0FGVEVSX0FTU09DIChIWio2KQpAQCAtNjkwMSwyMSArMzk5NCwyMyBAQAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCQkJICAgICB1MzIgY2hhbmdlcykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRVJQX1BSRUFNQkxFICVkXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9QUkVBTUJMRSAlZFxuIiwKIAkJCQkgICBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKIAkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwogCQllbHNlCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKKwkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQorCQkJCX5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfQ1RTICVkXG4iLAorCQkJCSAgIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOwogCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCAmJiAocHJpdi0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKSkKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CiAJCWVsc2UKQEAgLTY5MjMsNyArNDAxOCw3IEBACiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYXMgdGhpcyBmdW5jdGlvbiBzaG91bGQKIAkJICogbmV2ZXIgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICovCiAJCWlmIChXQVJOX09OX09OQ0UoaW5faW50ZXJydXB0KCkpKQpAQCAtNjkzMSwxMCArNDAyNiw5IEBACiAJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKIAkJCXByaXYtPmFzc29jX2lkID0gYnNzX2NvbmYtPmFpZDsKIAkJCXByaXYtPmJlYWNvbl9pbnQgPSBic3NfY29uZi0+YmVhY29uX2ludDsKLQkJCXByaXYtPnRpbWVzdGFtcDAgPSBic3NfY29uZi0+dGltZXN0YW1wICYgMHhGRkZGRkZGRjsKLQkJCXByaXYtPnRpbWVzdGFtcDEgPSAoYnNzX2NvbmYtPnRpbWVzdGFtcCA+PiAzMikgJgotCQkJCQkgICAgIDB4RkZGRkZGRkY7CisJCQlwcml2LT50aW1lc3RhbXAgPSBic3NfY29uZi0+dGltZXN0YW1wOwogCQkJcHJpdi0+YXNzb2NfY2FwYWJpbGl0eSA9IGJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5OworCQkJcHJpdi0+cG93ZXJfZGF0YS5kdGltX3BlcmlvZCA9IGJzc19jb25mLT5kdGltX3BlcmlvZDsKIAkJCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArCiAJCQkJCUlXTF9ERUxBWV9ORVhUX1NDQU5fQUZURVJfQVNTT0M7CiAJCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CkBAIC02OTQyLDE0MyArNDAzNiw5MSBAQAogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCX0gZWxzZSB7CiAJCQlwcml2LT5hc3NvY19pZCA9IDA7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsCisJCQkJCSJESVNBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKIAkJfQotCX0gZWxzZSBpZiAoY2hhbmdlcyAmJiBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgcHJpdi0+YXNzb2NfaWQpIHsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKKwl9IGVsc2UgaWYgKGNoYW5nZXMgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgcHJpdi0+YXNzb2NfaWQpIHsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LAorCQkJCQkiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKIAkJCWl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCX0KIAogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzc2lkLCBzaXplX3QgbGVuKQotewotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JREVDTEFSRV9TU0lEX0JVRihzc2lkX2J1Zik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCXJjID0gLUVJTzsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogd2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kICovCi0JaWYgKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzICYmCi0JCQl0aW1lX2FmdGVyKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkgewotCQlyYyA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0JLyogaWYgd2UganVzdCBmaW5pc2hlZCBzY2FuIGFzayBmb3IgZGVsYXkgZm9yIGEgYnJvYWRjYXN0IHNjYW4gKi8KLQlpZiAoKGxlbiA9PSAwKSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwKLQkJICAgICAgIGppZmZpZXMpKSB7Ci0JCXJjID0gLUVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQlpZiAobGVuKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJkaXJlY3Qgc2NhbiBmb3IgJXMgWyVkXVxuICIsCi0JCQkgICAgICAgcHJpbnRfc3NpZChzc2lkX2J1Ziwgc3NpZCwgbGVuKSwgKGludClsZW4pOwotCi0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7Ci0JCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9ICh1OCkKLQkJICAgIG1pbigodTgpIGxlbiwgKHU4KSBJV19FU1NJRF9NQVhfU0laRSk7Ci0JCW1lbWNweShwcml2LT5kaXJlY3Rfc3NpZCwgc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKLQl9IGVsc2UKLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKLQotCXJjID0gaXdsMzk0NV9zY2FuX2luaXRpYXRlKHByaXYpOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByYyA9IDA7Ci0JdTggc3RhX2lkOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWNvbnN0IHU4ICphZGRyOworCWludCByZXQgPSAwOworCXU4IHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047CisJdTggc3RhdGljX2tleTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2wzOTQ1X3BhcmFtX2h3Y3J5cHRvKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CisJaWYgKGl3bDM5NDVfbW9kX3BhcmFtcy5zd19jcnlwdG8pIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRkcikpCi0JCS8qIG9ubHkgc3VwcG9ydCBwYWlyd2lzZSBrZXlzICovCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwlhZGRyID0gc3RhID8gc3RhLT5hZGRyIDogaXdsX2JjYXN0X2FkZHI7CisJc3RhdGljX2tleSA9ICFpd2xfaXNfYXNzb2NpYXRlZChwcml2KTsKIAotCXN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCi0JCQkJICAgYWRkcik7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmICghc3RhdGljX2tleSkgeworCQlzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKKwkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNbm90IGluIHN0YXRpb24gbWFwLlxuIiwKKwkJCQkJICAgIGFkZHIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlICBTRVRfS0VZOgotCQlyYyA9IGl3bDM5NDVfdXBkYXRlX3N0YV9rZXlfaW5mbyhwcml2LCBrZXksIHN0YV9pZCk7Ci0JCWlmICghcmMpIHsKLQkJCWl3bDM5NDVfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgMSk7Ci0JCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQkJa2V5LT5od19rZXlfaWR4ID0gc3RhX2lkOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJzZXRfa2V5IHN1Y2Nlc3MsIHVzaW5nIGh3Y3J5cHRvXG4iKTsKLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwotCQl9CisJY2FzZSBTRVRfS0VZOgorCQlpZiAoc3RhdGljX2tleSkKKwkJCXJldCA9IGl3bDM5NDVfc2V0X3N0YXRpY19rZXkocHJpdiwga2V5KTsKKwkJZWxzZQorCQkJcmV0ID0gaXdsMzk0NV9zZXRfZHluYW1pY19rZXkocHJpdiwga2V5LCBzdGFfaWQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOgotCQlyYyA9IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHByaXYsIHN0YV9pZCk7Ci0JCWlmICghcmMpIHsKLQkJCWl3bDM5NDVfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgMCk7Ci0JCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7Ci0JCX0KKwkJaWYgKHN0YXRpY19rZXkpCisJCQlyZXQgPSBpd2wzOTQ1X3JlbW92ZV9zdGF0aWNfa2V5KHByaXYpOworCQllbHNlCisJCQlyZXQgPSBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhwcml2LCBzdGFfaWQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmMgPSAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocXVldWUgPj0gQUNfTlVNKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHF1ZXVlID49IEFDX05VTSAlZFxuIiwgcXVldWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTcwOTksMjkgKzQxNDEsMjkgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMSk7Ci0JZWxzZSBpZiAocHJpdi0+YXNzb2NfaWQgJiYgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKQotCQlpd2wzOTQ1X2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKKwkJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKKwllbHNlIGlmIChwcml2LT5hc3NvY19pZCAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKKwkJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgaSwgYXZhaWw7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cTsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHE7CisJc3RydWN0IGl3bF9xdWV1ZSAqcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzEzMCw3ICs0MTcyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQUNfTlVNOyBpKyspIHsKIAkJdHhxID0gJnByaXYtPnR4cVtpXTsKIAkJcSA9ICZ0eHEtPnE7Ci0JCWF2YWlsID0gaXdsMzk0NV9xdWV1ZV9zcGFjZShxKTsKKwkJYXZhaWwgPSBpd2xfcXVldWVfc3BhY2UocSk7CiAKIAkJc3RhdHNbaV0ubGVuID0gcS0+bl93aW5kb3cgLSBhdmFpbDsKIAkJc3RhdHNbaV0ubGltaXQgPSBxLT5uX3dpbmRvdyAtIHEtPmhpZ2hfbWFyazsKQEAgLTcxMzksMzQgKzQxODEsMjQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X21hY19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X21hY19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKKwlpd2xfcmVzZXRfcW9zKHByaXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT5hc3NvY19pZCA9IDA7CiAJcHJpdi0+YXNzb2NfY2FwYWJpbGl0eSA9IDA7Ci0JcHJpdi0+Y2FsbF9wb3N0X2Fzc29jX2Zyb21fYmVhY29uID0gMDsKIAogCS8qIG5ldyBhc3NvY2lhdGlvbiBnZXQgcmlkIG9mIGlic3MgYmVhY29uIHNrYiAqLwogCWlmIChwcml2LT5pYnNzX2JlYWNvbikKQEAgLTcxNzUsMTUgKzQyMDcsMTQgQEAKIAlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKIAlwcml2LT5iZWFjb25faW50ID0gcHJpdi0+aHctPmNvbmYuYmVhY29uX2ludDsKLQlwcml2LT50aW1lc3RhbXAxID0gMDsKLQlwcml2LT50aW1lc3RhbXAwID0gMDsKKwlwcml2LT50aW1lc3RhbXAgPSAwOwogCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcHJpdi0+YmVhY29uX2ludCA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtNzE5Miw3ICs0MjIzLDcgQEAKIAkgKiBjbGVhciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgYml0CiAJKi8KIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCX0KQEAgLTcyMDAsMzMgKzQyMzEsMzQgQEAKIAkvKiBQZXIgbWFjODAyMTEuaDogVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLi4uICovCiAJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IGluIElCU1NcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IGluIElCU1NcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KIAotCWl3bDM5NDVfc2V0X3JhdGUocHJpdik7CisJaXdsX3NldF9yYXRlKHByaXYpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX19sZTY0IHRpbWVzdGFtcDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IElCU1NcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IElCU1NcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTcyMzgsMTEgKzQyNzAsMTMgQEAKIAlwcml2LT5pYnNzX2JlYWNvbiA9IHNrYjsKIAogCXByaXYtPmFzc29jX2lkID0gMDsKKwl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKKwlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaXdsMzk0NV9yZXNldF9xb3MocHJpdik7CisJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKIAogCWl3bDM5NDVfcG9zdF9hc3NvY2lhdGUocHJpdik7CiAKQEAgLTcyNTYsNyArNDI5MCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCiAvKgogICogVGhlIGZvbGxvd2luZyBhZGRzIGEgbmV3IGF0dHJpYnV0ZSB0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24KQEAgLTcyNjUsMzggKzQyOTksNDEgQEAKICAqCiAgKiBTZWUgdGhlIGxldmVsIGRlZmluaXRpb25zIGluIGl3bCBmb3IgZGV0YWlscy4KICAqLwotCi1zdGF0aWMgc3NpemVfdCBzaG93X2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOFhcbiIsIGl3bDM5NDVfZGVidWdfbGV2ZWwpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBwcml2LT5kZWJ1Z19sZXZlbCk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzdG9yZV9kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKLQl1MzIgdmFsOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CiAKLQl2YWwgPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMCk7Ci0JaWYgKHAgPT0gYnVmKQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlJV0xfSU5GTyhwcml2LCAiJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKLQkJaXdsMzk0NV9kZWJ1Z19sZXZlbCA9IHZhbDsKKwkJcHJpdi0+ZGVidWdfbGV2ZWwgPSB2YWw7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERSSVZFUl9BVFRSKGRlYnVnX2xldmVsLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgc2hvd19kZWJ1Z19sZXZlbCwgc3RvcmVfZGVidWdfbGV2ZWwpOworc3RhdGljIERFVklDRV9BVFRSKGRlYnVnX2xldmVsLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfZGVidWdfbGV2ZWwsIHN0b3JlX2RlYnVnX2xldmVsKTsKIAotI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X0RFQlVHICovCisjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KIAogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wZXJhdHVyZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCi0JaWYgKCFpd2wzOTQ1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpd2wzOTQ1X2h3X2dldF90ZW1wZXJhdHVyZShwcml2KSk7CkBAIC03MzA3LDIyICs0MzQ0LDIxIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3R4X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3R4X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAJdTMyIHZhbDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxMCk7CiAJaWYgKHAgPT0gYnVmKQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwkJSVdMX0lORk8ocHJpdiwgIjogJXMgaXMgbm90IGluIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CiAJZWxzZQogCQlpd2wzOTQ1X2h3X3JlZ19zZXRfdHhwb3dlcihwcml2LCB2YWwpOwogCkBAIC03MzM0LDcgKzQzNzAsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19mbGFncyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0WFxuIiwgcHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MpOwogfQpAQCAtNzM0MywxNiArNDM3OSwxNiBAQAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAJdTMyIGZsYWdzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzKSAhPSBmbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCi0JCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpCisJCQlJV0xfV0FSTihwcml2LCAiQ291bGQgbm90IGNhbmNlbCBzY2FuLlxuIik7CiAJCWVsc2UgewotCQkJSVdMX0RFQlVHX0lORk8oIkNvbW1pdHRpbmcgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXR0aW5nIHJ4b24uZmxhZ3MgPSAweCUwNFhcbiIsCiAJCQkJICAgICAgIGZsYWdzKTsKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKIAkJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CkBAIC03MzY4LDcgKzQ0MDQsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19maWx0ZXJfZmxhZ3Moc3RydWN0IGRldmljZSAqZCwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNFhcbiIsCiAJCWxlMzJfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncykpOwpAQCAtNzM3OCwxNiArNDQxNCwxNiBAQAogCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAJdTMyIGZpbHRlcl9mbGFncyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MpICE9IGZpbHRlcl9mbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCi0JCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpCisJCQlJV0xfV0FSTihwcml2LCAiQ291bGQgbm90IGNhbmNlbCBzY2FuLlxuIik7CiAJCWVsc2UgewotCQkJSVdMX0RFQlVHX0lORk8oIkNvbW1pdHRpbmcgcnhvbi5maWx0ZXJfZmxhZ3MgPSAiCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKIAkJCQkgICAgICAgIjB4JTA0WFxuIiwgZmlsdGVyX2ZsYWdzKTsKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPQogCQkJCWNwdV90b19sZTMyKGZpbHRlcl9mbGFncyk7CkBAIC03NDA3LDggKzQ0NDMsOCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19tZWFzdXJlbWVudChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlzdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9ub3RpZmljYXRpb24gbWVhc3VyZV9yZXBvcnQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwogCXUzMiBzaXplID0gc2l6ZW9mKG1lYXN1cmVfcmVwb3J0KSwgbGVuID0gMCwgb2ZzID0gMDsKIAl1OCAqZGF0YSA9ICh1OCAqKSZtZWFzdXJlX3JlcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzQ0MCw3ICs0NDc2LDcgQEAKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtcyA9IHsKIAkJLmNoYW5uZWwgPSBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwKIAkJLnN0YXJ0X3RpbWUgPSBjcHVfdG9fbGU2NChwcml2LT5sYXN0X3RzZiksCkBAIC03NDY0LDcgKzQ1MDAsNyBAQAogCQkJdHlwZSA9IHNpbXBsZV9zdHJ0b3VsKHAgKyAxLCBOVUxMLCAwKTsKIAl9CiAKLQlJV0xfREVCVUdfSU5GTygiSW52b2tpbmcgbWVhc3VyZW1lbnQgb2YgdHlwZSAlZCBvbiAiCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkludm9raW5nIG1lYXN1cmVtZW50IG9mIHR5cGUgJWQgb24gIgogCQkgICAgICAgImNoYW5uZWwgJWQgKGZvciAnJXMnKVxuIiwgdHlwZSwgcGFyYW1zLmNoYW5uZWwsIGJ1Zik7CiAJaXdsMzk0NV9nZXRfbWVhc3VyZW1lbnQocHJpdiwgJnBhcmFtcywgdHlwZSk7CiAKQEAgLTc0NzksNyArNDUxNSw3IEBACiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAKIAlwcml2LT5yZXRyeV9yYXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAlpZiAocHJpdi0+cmV0cnlfcmF0ZSA8PSAwKQpAQCAtNzQ5MSw1MCArNDUyNyw3NyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19yZXRyeV9yYXRlKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHByaXYtPnJldHJ5X3JhdGUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIocmV0cnlfcmF0ZSwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcmV0cnlfcmF0ZSwKIAkJICAgc3RvcmVfcmV0cnlfcmF0ZSk7CiAKKwogc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JaW50IHJjOwotCWludCBtb2RlOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgbW9kZTsKIAotCW1vZGUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCXJjID0gLUVBR0FJTjsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgeworCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoKG1vZGUgPCAxKSB8fCAobW9kZSA+IElXTF9QT1dFUl9MSU1JVCkgfHwgKG1vZGUgPT0gSVdMX1BPV0VSX0FDKSkKLQkJbW9kZSA9IElXTF9QT1dFUl9BQzsKLQllbHNlCi0JCW1vZGUgfD0gSVdMX1BPV0VSX0VOQUJMRUQ7CisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1vZGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCi0JaWYgKG1vZGUgIT0gcHJpdi0+cG93ZXJfbW9kZSkgewotCQlyYyA9IGl3bDM5NDVfc2VuZF9wb3dlcl9tb2RlKHByaXYsIElXTF9QT1dFUl9MRVZFTChtb2RlKSk7Ci0JCWlmIChyYykgewotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlwcml2LT5wb3dlcl9tb2RlID0gbW9kZTsKKwlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBtb2RlKTsKKwlpZiAocmV0KSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOworCQlnb3RvIG91dDsKIAl9Ci0KLQlyYyA9IGNvdW50OworCXJldCA9IGNvdW50OwogCiAgb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByYzsKKwlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJaW50IG1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKKwlpbnQgc3lzdGVtID0gcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZzsKKwlpbnQgbGV2ZWwgPSBwcml2LT5wb3dlcl9kYXRhLnBvd2VyX21vZGU7CisJY2hhciAqcCA9IGJ1ZjsKKworCXN3aXRjaCAoc3lzdGVtKSB7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0FVVE86CisJCXAgKz0gc3ByaW50ZihwLCAiU1lTVEVNOmF1dG8iKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0FDOgorCQlwICs9IHNwcmludGYocCwgIlNZU1RFTTphYyIpOworCQlicmVhazsKKwljYXNlIElXTF9QT1dFUl9TWVNfQkFUVEVSWToKKwkJcCArPSBzcHJpbnRmKHAsICJTWVNURU06YmF0dGVyeSIpOworCQlicmVhazsKKwl9CisKKwlwICs9IHNwcmludGYocCwgIlx0TU9ERTolcyIsIChtb2RlIDwgSVdMX1BPV0VSX0FVVE8pID8KKwkJCSJmaXhlZCIgOiAiYXV0byIpOworCXAgKz0gc3ByaW50ZihwLCAiXHRJTkRFWDolZCIsIGxldmVsKTsKKwlwICs9IHNwcmludGYocCwgIlxuIik7CisJcmV0dXJuIHAgLSBidWYgKyAxOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVVNSLAorCQkgICBzaG93X3Bvd2VyX2xldmVsLCBzdG9yZV9wb3dlcl9sZXZlbCk7CisKICNkZWZpbmUgTUFYX1dYX1NUUklORyA4MAogCiAvKiBWYWx1ZXMgYXJlIGluIG1pY3Jvc2Vjb25kICovCkBAIC03NTUzLDQxICs0NjE2LDYgQEAKIAkxMDAwMDAwCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWludCBsZXZlbCA9IElXTF9QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKLQljaGFyICpwID0gYnVmOwotCi0JcCArPSBzcHJpbnRmKHAsICIlZCAiLCBsZXZlbCk7Ci0Jc3dpdGNoIChsZXZlbCkgewotCWNhc2UgSVdMX1BPV0VSX01PREVfQ0FNOgotCWNhc2UgSVdMX1BPV0VSX0FDOgotCQlwICs9IHNwcmludGYocCwgIihBQykiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQkFUVEVSWToKLQkJcCArPSBzcHJpbnRmKHAsICIoQkFUVEVSWSkiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcCArPSBzcHJpbnRmKHAsCi0JCQkgICAgICIoVGltZW91dCAlZG1zLCBQZXJpb2QgJWRtcykiLAotCQkJICAgICB0aW1lb3V0X2R1cmF0aW9uW2xldmVsIC0gMV0gLyAxMDAwLAotCQkJICAgICBwZXJpb2RfZHVyYXRpb25bbGV2ZWwgLSAxXSAvIDEwMDApOwotCX0KLQotCWlmICghKHByaXYtPnBvd2VyX21vZGUgJiBJV0xfUE9XRVJfRU5BQkxFRCkpCi0JCXAgKz0gc3ByaW50ZihwLCAiIE9GRlxuIik7Ci0JZWxzZQotCQlwICs9IHNwcmludGYocCwgIiBcbiIpOwotCi0JcmV0dXJuIHAgLSBidWYgKyAxOwotCi19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9sZXZlbCwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcG93ZXJfbGV2ZWwsCi0JCSAgIHN0b3JlX3Bvd2VyX2xldmVsKTsKLQogc3RhdGljIHNzaXplX3Qgc2hvd19jaGFubmVscyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzYwMCwxNyArNDYyOCwxNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0aXN0aWNzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAl1MzIgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKTsKIAl1MzIgbGVuID0gMCwgb2ZzID0gMDsKLQl1OCAqZGF0YSA9ICh1OCAqKSZwcml2LT5zdGF0aXN0aWNzOworCXU4ICpkYXRhID0gKHU4ICopJnByaXYtPnN0YXRpc3RpY3NfMzk7CiAJaW50IHJjID0gMDsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYpOworCXJjID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKHJjKSB7CkBAIC03NjM4LDM0ICs0NjY2LDM0IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2FudGVubmEoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5hbnRlbm5hKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9hbnRlbm5hKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJaW50IGFudDsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAwOwogCiAJaWYgKHNzY2FuZihidWYsICIlMWkiLCAmYW50KSAhPSAxKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAibm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAogCWlmICgoYW50ID49IDApICYmIChhbnQgPD0gMikpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlNldHRpbmcgYW50ZW5uYSBzZWxlY3QgdG8gJWQuXG4iLCBhbnQpOwotCQlwcml2LT5hbnRlbm5hID0gKGVudW0gaXdsMzk0NV9hbnRlbm5hKWFudDsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNldHRpbmcgYW50ZW5uYSBzZWxlY3QgdG8gJWQuXG4iLCBhbnQpOworCQlpd2wzOTQ1X21vZF9wYXJhbXMuYW50ZW5uYSA9IChlbnVtIGl3bDM5NDVfYW50ZW5uYSlhbnQ7CiAJfSBlbHNlCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgYW50ZW5uYSBzZWxlY3QgdmFsdWUgJWQuXG4iLCBhbnQpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIGFudGVubmEgc2VsZWN0IHZhbHVlICVkLlxuIiwgYW50KTsKIAogCiAJcmV0dXJuIGNvdW50OwpAQCAtNzY3Niw4ICs0NzA0LDggQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgKGludClwcml2LT5zdGF0dXMpOwogfQpAQCAtNzY5MSw3ICs0NzE5LDcgQEAKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAKIAlpZiAocFswXSA9PSAnMScpCi0JCWl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOworCQlpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZygoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC03NzA1LDcgKzQ3MzMsNyBAQAogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAogCWlmIChwWzBdID09ICcxJykKLQkJaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7CisJCWl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KQEAgLTc3MTgsMjMgKzQ3NDYsMjQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKKwlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShEUlZfTkFNRSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCiAJSU5JVF9XT1JLKCZwcml2LT51cCwgaXdsMzk0NV9iZ191cCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0LCBpd2wzOTQ1X2JnX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsMzk0NV9iZ19zY2FuX2NvbXBsZXRlZCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZXF1ZXN0X3NjYW4sIGl3bDM5NDVfYmdfcmVxdWVzdF9zY2FuKTsKLQlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bDM5NDVfYmdfYWJvcnRfc2Nhbik7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZl9raWxsLCBpd2wzOTQ1X2JnX3JmX2tpbGwpOworCUlOSVRfV09SSygmcHJpdi0+cmZfa2lsbCwgaXdsX2JnX3JmX2tpbGwpOwogCUlOSVRfV09SSygmcHJpdi0+YmVhY29uX3VwZGF0ZSwgaXdsMzk0NV9iZ19iZWFjb25fdXBkYXRlKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCwgaXdsMzk0NV9iZ19pbml0X2FsaXZlX3N0YXJ0KTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+YWxpdmVfc3RhcnQsIGl3bDM5NDVfYmdfYWxpdmVfc3RhcnQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX2NoZWNrLCBpd2wzOTQ1X2JnX3NjYW5fY2hlY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5yZmtpbGxfcG9sbCwgaXdsMzk0NV9yZmtpbGxfcG9sbCk7CisJSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsX2JnX3NjYW5fY29tcGxldGVkKTsKKwlJTklUX1dPUksoJnByaXYtPnJlcXVlc3Rfc2NhbiwgaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4pOworCUlOSVRfV09SSygmcHJpdi0+YWJvcnRfc2NhbiwgaXdsX2JnX2Fib3J0X3NjYW4pOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX2NoZWNrLCBpd2xfYmdfc2Nhbl9jaGVjayk7CiAKIAlpd2wzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CiAKQEAgLTc3NDIsNyArNDc3MSw3IEBACiAJCSAgICAgaXdsMzk0NV9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsocHJpdik7CiAKQEAgLTc3NjgsNyArNDc5Nyw5IEBACiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl90ZW1wZXJhdHVyZS5hdHRyLAogCSZkZXZfYXR0cl90eF9wb3dlci5hdHRyLAotCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwkmZGV2X2F0dHJfZGVidWdfbGV2ZWwuYXR0ciwKKyNlbmRpZgogCU5VTEwKIH07CiAKQEAgLTc3ODUsNzAgKzQ4MTYsOTMgQEAKIAkucmVtb3ZlX2ludGVyZmFjZSA9IGl3bDM5NDVfbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZyA9IGl3bDM5NDVfbWFjX2NvbmZpZywKIAkuY29uZmlnX2ludGVyZmFjZSA9IGl3bDM5NDVfbWFjX2NvbmZpZ19pbnRlcmZhY2UsCi0JLmNvbmZpZ3VyZV9maWx0ZXIgPSBpd2wzOTQ1X2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSBpd2xfY29uZmlndXJlX2ZpbHRlciwKIAkuc2V0X2tleSA9IGl3bDM5NDVfbWFjX3NldF9rZXksCi0JLmdldF9zdGF0cyA9IGl3bDM5NDVfbWFjX2dldF9zdGF0cywKIAkuZ2V0X3R4X3N0YXRzID0gaXdsMzk0NV9tYWNfZ2V0X3R4X3N0YXRzLAogCS5jb25mX3R4ID0gaXdsMzk0NV9tYWNfY29uZl90eCwKIAkucmVzZXRfdHNmID0gaXdsMzk0NV9tYWNfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gaXdsMzk0NV9ic3NfaW5mb19jaGFuZ2VkLAotCS5od19zY2FuID0gaXdsMzk0NV9tYWNfaHdfc2NhbgorCS5od19zY2FuID0gaXdsX21hY19od19zY2FuCiB9OwogCi1zdGF0aWMgaW50IGl3bDM5NDVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBpd2wzOTQ1X2luaXRfZHJ2KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCXN0cnVjdCBpd2xfMzk0NV9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsXzM5NDVfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAKLQkvKioqKioqKioqKioqKioqKioqKioqKioKLQkgKiAxLiBBbGxvY2F0aW5nIEhXIGRhdGEKLQkgKiAqKioqKioqKioqKioqKioqKioqKi8KKwlwcml2LT5yZXRyeV9yYXRlID0gMTsKKwlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKLQkvKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucwotCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLiAqLwotCWlmIChpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbikgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIGh3X3NjYW5cbiIpOwotCQlpd2wzOTQ1X2h3X29wcy5od19zY2FuID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CisKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisKKwkvKiBDbGVhciB0aGUgZHJpdmVyJ3MgKG5vdCBkZXZpY2Uncykgc3RhdGlvbiB0YWJsZSAqLworCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisKKwlwcml2LT5kYXRhX3JldHJ5X2xpbWl0ID0gLTE7CisJcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7CisJcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7CisJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwlwcml2LT5pd19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCWl3bF9yZXNldF9xb3MocHJpdik7CisKKwlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKKwlwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnZhbCA9IDA7CisKKwlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7CisJLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQ0FNIG1vZGUgKi8KKwlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CisKKwlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKKwkJSVdMX1dBUk4ocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCisJCQkgZWVwcm9tLT52ZXJzaW9uKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CiAJfQogCi0JaWYgKChpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPiBJV0wzOV9NQVhfTlVNX1FVRVVFUykgfHwKLQkgICAgKGl3bDM5NDVfcGFyYW1fcXVldWVzX251bSA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKLQkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0wzOV9NQVhfTlVNX1FVRVVFUyk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OworCS8qIFNldCB1cCB0eHBvd2VyIHNldHRpbmdzIGluIGRyaXZlciBmb3IgYWxsIGNoYW5uZWxzICovCisJaWYgKGl3bDM5NDVfdHhwb3dlcl9zZXRfZnJvbV9lZXByb20ocHJpdikpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKIAl9CiAKLQkvKiBtYWM4MDIxMSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIGRldmljZSBpbnN0YW5jZSwgaW5jbHVkaW5nCi0JICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLwotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9wcml2KSwgJml3bDM5NDVfaHdfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyBnZW9zIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfY2hhbm5lbF9tYXA7CiAJfQorCWl3bDM5NDVfaW5pdF9od19yYXRlcyhwcml2LCBwcml2LT5pZWVlX3JhdGVzKTsKIAotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKKwlyZXR1cm4gMDsKIAotCXByaXYgPSBody0+cHJpdjsKLQlwcml2LT5odyA9IGh3OwotCXByaXYtPnBjaV9kZXYgPSBwZGV2OwotCXByaXYtPmNmZyA9IGNmZzsKK2Vycl9mcmVlX2NoYW5uZWxfbWFwOgorCWl3bF9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOworZXJyOgorCXJldHVybiByZXQ7Cit9CiAKLQlJV0xfREVCVUdfSU5GTygiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CitzdGF0aWMgaW50IGl3bDM5NDVfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7CisKIAlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJpd2wtMzk0NS1ycyI7CiAJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYpOwogCi0JLyogU2VsZWN0IGFudGVubmEgKG1heSBiZSBoZWxwZnVsIGlmIG9ubHkgb25lIGFudGVubmEgaXMgY29ubmVjdGVkKSAqLwotCXByaXYtPmFudGVubmEgPSAoZW51bSBpd2wzOTQ1X2FudGVubmEpaXdsMzk0NV9wYXJhbV9hbnRlbm5hOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaXdsMzk0NV9kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfcGFyYW1fZGVidWc7Ci0JYXRvbWljX3NldCgmcHJpdi0+cmVzdHJpY3RfcmVmY250LCAwKTsKLSNlbmRpZgotCiAJLyogVGVsbCBtYWM4MDIxMSBvdXIgY2hhcmFjdGVyaXN0aWNzICovCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKQEAgLTc4NTcsMTEgKzQ5MTEsODMgQEAKIAkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKIAkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKIAotCWh3LT53aXBoeS0+ZndfaGFuZGxlc19yZWd1bGF0b3J5ID0gdHJ1ZTsKKwlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKIAotCS8qIDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLworCS8qIERlZmF1bHQgdmFsdWU7IDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLwogCWh3LT5xdWV1ZXMgPSA0OwogCisJaHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKKworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqCisJICogMS4gQWxsb2NhdGluZyBIVyBkYXRhCisJICogKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBtYWM4MDIxMSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIGRldmljZSBpbnN0YW5jZSwgaW5jbHVkaW5nCisJICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCWh3ID0gaXdsX2FsbG9jX2FsbChjZmcsICZpd2wzOTQ1X2h3X29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXByaXYgPSBody0+cHJpdjsKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisKKwlpZiAoKGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID4gSVdMMzlfTUFYX05VTV9RVUVVRVMpIHx8CisJICAgICAoaXdsMzk0NV9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKKwkJCUlXTF9NSU5fTlVNX1FVRVVFUywgSVdMMzlfTUFYX05VTV9RVUVVRVMpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9pZWVlODAyMTFfZnJlZV9odzsKKwl9CisKKwkvKgorCSAqIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCisJICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uCisJICovCisJaWYgKGl3bDM5NDVfbW9kX3BhcmFtcy5kaXNhYmxlX2h3X3NjYW4pIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBod19zY2FuXG4iKTsKKwkJaXdsMzk0NV9od19vcHMuaHdfc2NhbiA9IE5VTEw7CisJfQorCisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CisJcHJpdi0+Y2ZnID0gY2ZnOworCXByaXYtPnBjaV9kZXYgPSBwZGV2OworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlwcml2LT5kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfbW9kX3BhcmFtcy5kZWJ1ZzsKKwlhdG9taWNfc2V0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQsIDApOworI2VuZGlmCisKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICogMi4gSW5pdGlhbGl6aW5nIFBDSSBidXMKIAkgKiAqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzg3Niw3ICs1MDAyLDcgQEAKIAlpZiAoIWVycikKIAkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJfQogCkBAIC03ODk0LDk4ICs1MDIwLDU4IEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJwY2lfcmVzb3VyY2VfYmFzZSA9ICVwXG4iLCBwcml2LT5od19iYXNlKTsKIAogCS8qIFdlIGRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKIAkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDB4MDApOwogCi0JLyogbmljIGluaXQgKi8KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCi0JCQlDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUik7Ci0KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQllcnIgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCS8qIGFtcCBpbml0ICovCisJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogNC4gUmVhZCBFRVBST00KIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KKwogCS8qIFJlYWQgdGhlIEVFUFJPTSAqLwotCWVyciA9IGl3bDM5NDVfZWVwcm9tX2luaXQocHJpdik7CisJZXJyID0gaXdsX2VlcHJvbV9pbml0KHByaXYpOwogCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOwogCQlnb3RvIG91dF9pb3VubWFwOwogCX0KIAkvKiBNQUMgQWRkcmVzcyBsb2NhdGlvbiBpbiBFRVBST00gc2FtZSBmb3IgMzk0NS80OTY1ICovCi0JZ2V0X2VlcHJvbV9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKwltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGVlcHJvbS0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiTUFDIGFkZHJlc3M6ICVwTVxuIiwgcHJpdi0+bWFjX2FkZHIpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBwcml2LT5tYWNfYWRkcik7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA1LiBTZXR1cCBIVyBDb25zdGFudHMKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KIAkvKiBEZXZpY2Utc3BlY2lmaWMgc2V0dXAgKi8KLQlpZiAoaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhwcml2KSkgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBzZXQgaHcgc2V0dGluZ3NcbiIpOwotCQlnb3RvIG91dF9pb3VubWFwOworCWlmIChpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMocHJpdikpIHsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBzZXR0aW5nc1xuIik7CisJCWdvdG8gb3V0X2VlcHJvbV9mcmVlOwogCX0KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDYuIFNldHVwIHByaXYKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KLQlwcml2LT5yZXRyeV9yYXRlID0gMTsKLQlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7Ci0JbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwotCi0JLyogQ2xlYXIgdGhlIGRyaXZlcidzIChub3QgZGV2aWNlJ3MpIHN0YXRpb24gdGFibGUgKi8KLQlpd2wzOTQ1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwotCi0JcHJpdi0+ZGF0YV9yZXRyeV9saW1pdCA9IC0xOwotCXByaXYtPmllZWVfY2hhbm5lbHMgPSBOVUxMOwotCXByaXYtPmllZWVfcmF0ZXMgPSBOVUxMOwotCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCi0JcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047Ci0KLQlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKLQotCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOwotCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKLQotCi0JcHJpdi0+cmF0ZXNfbWFzayA9IElXTF9SQVRFU19NQVNLOwotCS8qIElmIHBvd2VyIG1hbmFnZW1lbnQgaXMgdHVybmVkIG9uLCBkZWZhdWx0IHRvIEFDIG1vZGUgKi8KLQlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0FDOwotCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1BPV0VSOwotCi0JZXJyID0gaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWVyciA9IGl3bDM5NDVfaW5pdF9kcnYocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImluaXRpYWxpemluZyByZWd1bGF0b3J5IGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCWdvdG8gb3V0X3Vuc2V0X2h3X3NldHRpbmc7CisJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyBkcml2ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfdW5zZXRfaHdfcGFyYW1zOwogCX0KIAotCWVyciA9IGl3bDM5NDVfaW5pdF9nZW9zKHByaXYpOwotCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgZ2VvcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOwotCQlnb3RvIG91dF9mcmVlX2NoYW5uZWxfbWFwOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJIjogRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzXG4iLCBwcml2LT5jZmctPm5hbWUpOworCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXNcbiIsCisJCXByaXYtPmNmZy0+bmFtZSk7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA3LiBJbml0aWFsaXplIE1vZHVsZSBQYXJhbWV0ZXJzCkBAIC03OTkzLDkgKzUwNzksOSBAQAogCiAJLyogSW5pdGlhbGl6ZSBtb2R1bGUgcGFyYW1ldGVyIHZhbHVlcyBoZXJlICovCiAJLyogRGlzYWJsZSByYWRpbyAoU1cgUkYgS0lMTCkgdmlhIHBhcmFtZXRlciB3aGVuIGxvYWRpbmcgZHJpdmVyICovCi0JaWYgKGl3bDM5NDVfcGFyYW1fZGlzYWJsZSkgeworCWlmIChpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZSkgewogCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLQkJSVdMX0RFQlVHX0lORk8oIlJhZGlvIGRpc2FibGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSYWRpbyBkaXNhYmxlZC5cbiIpOwogCX0KIAogCkBAIC04MDA0LDQzICs1MDkwLDQ5IEBACiAJICogKioqKioqKioqKioqKioqKioqKiovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCisJcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CisKKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3IsIElSUUZfU0hBUkVELAorCQkJICBEUlZfTkFNRSwgcHJpdik7CisJaWYgKGVycikgeworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhbGxvY2F0aW5nIElSUSAlZFxuIiwgcHJpdi0+cGNpX2Rldi0+aXJxKTsKKwkJZ290byBvdXRfZGlzYWJsZV9tc2k7CisJfQorCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAoZXJyKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7Ci0JCWdvdG8gb3V0X2ZyZWVfZ2VvczsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCX0KIAotCWl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBJRUVFODAyMTFfQkFORF8yR0haLCA2KTsKKwlpd2xfc2V0X3J4b25fY2hhbm5lbChwcml2LAorCQkJICAgICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHNbNV0pOwogCWl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOwogCi0JLyoqKioqKioqKioqKioqKioqKioqKioqCi0JICogOS4gQ29uY2x1ZGUKLQkgKiAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JICogMTAuIFNldHVwIGFuZCBSZWdpc3RlciBtYWM4MDIxMQorCSAqIDkuIFNldHVwIGFuZCBSZWdpc3RlciBtYWM4MDIxMQogCSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOwotCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKGVycm9yICVkKVxuIiwgZXJyKTsKLQkJZ290byAgb3V0X3JlbW92ZV9zeXNmczsKLQl9CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCi0JcHJpdi0+aHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKLQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMTsKLQotCi0JZXJyID0gaXdsMzk0NV9yZmtpbGxfaW5pdChwcml2KTsKKwllcnIgPSBpd2wzOTQ1X3NldHVwX21hYyhwcml2KTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJGS0lMTCBzeXN0ZW0uICIKKwkJZ290byAgb3V0X3JlbW92ZV9zeXNmczsKKworCWVyciA9IGl3bF9yZmtpbGxfaW5pdChwcml2KTsKKwlpZiAoZXJyKQorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKKwkvKiBTdGFydCBtb25pdG9yaW5nIHRoZSBraWxsc3dpdGNoICovCisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJma2lsbF9wb2xsLAorCQkJICAgMiAqIEhaKTsKIAogCXJldHVybiAwOwogCkBAIC04MDQ4LDEyICs1MTQwLDE2IEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2wzOTQ1X2F0dHJpYnV0ZV9ncm91cCk7Ci0gb3V0X2ZyZWVfZ2VvczoKLQlpd2wzOTQ1X2ZyZWVfZ2Vvcyhwcml2KTsKLSBvdXRfZnJlZV9jaGFubmVsX21hcDoKLQlpd2wzOTQ1X2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7Ci0gb3V0X3Vuc2V0X2h3X3NldHRpbmc6Ci0JaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHByaXYpOworIG91dF9yZWxlYXNlX2lycToKKwlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOworIG91dF9kaXNhYmxlX21zaToKKwlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CisJaXdsY29yZV9mcmVlX2dlb3MocHJpdik7CisJaXdsX2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7Cisgb3V0X3Vuc2V0X2h3X3BhcmFtczoKKwlpd2wzOTQ1X3Vuc2V0X2h3X3BhcmFtcyhwcml2KTsKKyBvdXRfZWVwcm9tX2ZyZWU6CisJaXdsX2VlcHJvbV9mcmVlKHByaXYpOwogIG91dF9pb3VubWFwOgogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogIG91dF9wY2lfcmVsZWFzZV9yZWdpb25zOgpAQCAtODA2OSw0MiArNTE2NSw0NiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXdsMzk0NV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogVU5MT0FEIERSSVZFUiAqKipcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICIqKiogVU5MT0FEIERSSVZFUiAqKipcbiIpOwogCiAJc2V0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCWl3bDM5NDVfZG93bihwcml2KTsKKwlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgeworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAwOworCX0gZWxzZSB7CisJCWl3bDM5NDVfZG93bihwcml2KTsKKwl9CiAKIAkvKiBtYWtlIHN1cmUgd2UgZmx1c2ggYW55IHBlbmRpbmcgaXJxIG9yCiAJICogdGFza2xldCBmb3IgdGhlIGRyaXZlcgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKIAotCWl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIocHJpdik7CisJaXdsX3Jma2lsbF91bnJlZ2lzdGVyKHByaXYpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJma2lsbF9wb2xsKTsKKwogCWl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2kocHJpdik7CiAKIAlpZiAocHJpdi0+cnhxLmJkKQotCQlpd2wzOTQ1X3J4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9mcmVlKHByaXYsICZwcml2LT5yeHEpOwogCWl3bDM5NDVfaHdfdHhxX2N0eF9mcmVlKHByaXYpOwogCi0JaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHByaXYpOworCWl3bDM5NDVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOwogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKLQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOwotCiAJLypuZXRpZl9zdG9wX3F1ZXVlKGRldik7ICovCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAKQEAgLTgxMTQsMTMgKzUyMTQsMTYgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwogCXByaXYtPndvcmtxdWV1ZSA9IE5VTEw7CiAKKwlmcmVlX2lycShwZGV2LT5pcnEsIHByaXYpOworCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWl3bDM5NDVfZnJlZV9jaGFubmVsX21hcChwcml2KTsKLQlpd2wzOTQ1X2ZyZWVfZ2Vvcyhwcml2KTsKKwlpd2xfZnJlZV9jaGFubmVsX21hcChwcml2KTsKKwlpd2xjb3JlX2ZyZWVfZ2Vvcyhwcml2KTsKIAlrZnJlZShwcml2LT5zY2FuKTsKIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwpAQCAtODEzMiwyNyArNTIzNSwxNSBAQAogCiBzdGF0aWMgaW50IGl3bDM5NDVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChwcml2LT5pc19vcGVuKSB7CiAJCXNldF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpOwogCQlpd2wzOTQ1X21hY19zdG9wKHByaXYtPmh3KTsKIAkJcHJpdi0+aXNfb3BlbiA9IDE7CiAJfQotCi0JLyogcGNpIGRyaXZlciBhc3N1bWVzIHN0YXRlIHdpbGwgYmUgc2F2ZWQgaW4gdGhpcyBmdW5jdGlvbi4KLQkgKiBwY2kgc3RhdGUgaXMgc2F2ZWQgYW5kIGRldmljZSBkaXNhYmxlZCB3aGVuIGludGVyZmFjZSBpcwotCSAqIHN0b3BwZWQsIHNvIGF0IHRoaXMgdGltZSBwY2kgZGV2aWNlIHdpbGwgYWx3YXlzIGJlIGRpc2FibGVkIC0KLQkgKiB3aGV0aGVyIGludGVyZmFjZSB3YXMgc3RhcnRlZCBvciBub3QuIHNhdmluZyBwY2kgc3RhdGUgbm93IHdpbGwKLQkgKiBjYXVzZSBzYXZlZCBzdGF0ZSBiZSB0aGF0IG9mIGEgZGlzYWJsZWQgZGV2aWNlLCB3aGljaCB3aWxsIGNhdXNlCi0JICogcHJvYmxlbXMgZHVyaW5nIHJlc3VtZSBpbiB0aGF0IHdlIHdpbGwgZW5kIHVwIHdpdGggYSBkaXNhYmxlZCBkZXZpY2UuCi0JICoKLQkgKiBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHNhdmVkIHN0YXRlIChmcm9tIHdoZW4gaW50ZXJmYWNlIHdhcwotCSAqIHN0b3BwZWQpIGlzIHZhbGlkLiBpZiBpbnRlcmZhY2Ugd2FzIG5ldmVyIHVwIGF0IHRpbWUgb2Ygc3VzcGVuZAotCSAqIHRoZW4gdGhlIHNhdmVkIHN0YXRlIHdpbGwgc3RpbGwgYmUgdmFsaWQgYXMgaXQgd2FzIHNhdmVkIGR1cmluZwotCSAqIC5wcm9iZS4gKi8KLQlwZGV2LT5zdGF0ZV9zYXZlZCA9IHRydWU7Ci0KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCiAJcmV0dXJuIDA7CkBAIC04MTYwLDkgKzUyNTEsMTQgQEAKIAogc3RhdGljIGludCBpd2wzOTQ1X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bDM5NDVfbWFjX3N0YXJ0KHByaXYtPmh3KTsKQEAgLTgxNzMsMTE0ICs1MjY5LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi0vKioqKioqKioqKioqKioqIFJGS0lMTCBGVU5DVElPTlMgKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9SRktJTEwKLS8qIHNvZnR3YXJlIHJmLWtpbGwgZnJvbSB1c2VyICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcmZraWxsX3NvZnRfcmZfa2lsbCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcHJpdi0+cmZraWxsKQotCXJldHVybiAwOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm4gMDsKLQotCUlXTF9ERUJVR19SRl9LSUxMKCJ3ZSByZWNlaXZlZCBzb2Z0IFJGS0lMTCBzZXQgdG8gc3RhdGUgJWRcbiIsIHN0YXRlKTsKLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOgotCQlpZiAoaXdsMzk0NV9pc19yZmtpbGxfaHcocHJpdikpIHsKLQkJCWVyciA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQlpd2wzOTQ1X3JhZGlvX2tpbGxfc3cocHJpdiwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDoKLQkJaXdsMzk0NV9yYWRpb19raWxsX3N3KHByaXYsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfV0FSTklORygid2UgcmVjZWl2ZWQgdW5leHBlY3RlZCBSRktJTEwgc3RhdGUgJWRcbiIsIHN0YXRlKTsKLQkJYnJlYWs7Ci0JfQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBpd2wzOTQ1X3Jma2lsbF9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gd2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSk7Ci0JaW50IHJldCA9IDA7Ci0KLQlCVUdfT04oZGV2aWNlID09IE5VTEwpOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKLQlwcml2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2aWNlLCBSRktJTExfVFlQRV9XTEFOKTsKLQlpZiAoIXByaXYtPnJma2lsbCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSByZmtpbGwgZGV2aWNlLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJpdi0+cmZraWxsLT5uYW1lID0gcHJpdi0+Y2ZnLT5uYW1lOwotCXByaXYtPnJma2lsbC0+ZGF0YSA9IHByaXY7Ci0JcHJpdi0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0JcHJpdi0+cmZraWxsLT50b2dnbGVfcmFkaW8gPSBpd2wzOTQ1X3Jma2lsbF9zb2Z0X3JmX2tpbGw7Ci0JcHJpdi0+cmZraWxsLT51c2VyX2NsYWltX3Vuc3VwcG9ydGVkID0gMTsKLQotCXByaXYtPnJma2lsbC0+ZGV2LmNsYXNzLT5zdXNwZW5kID0gTlVMTDsKLQlwcml2LT5yZmtpbGwtPmRldi5jbGFzcy0+cmVzdW1lID0gTlVMTDsKLQotCXJldCA9IHJma2lsbF9yZWdpc3Rlcihwcml2LT5yZmtpbGwpOwotCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgcmZraWxsOiAlZFxuIiwgcmV0KTsKLQkJZ290byBmcmVlZF9yZmtpbGw7Ci0JfQotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwotCXJldHVybiByZXQ7Ci0KLWZyZWVkX3Jma2lsbDoKLQlpZiAocHJpdi0+cmZraWxsICE9IE5VTEwpCi0JCXJma2lsbF9mcmVlKHByaXYtPnJma2lsbCk7Ci0JcHJpdi0+cmZraWxsID0gTlVMTDsKLQotZXJyb3I6Ci0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChwcml2LT5yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKHByaXYtPnJma2lsbCk7Ci0KLQlwcml2LT5yZmtpbGwgPSBOVUxMOwotfQotCi0vKiBzZXQgcmYta2lsbCB0byB0aGUgcmlnaHQgc3RhdGUuICovCi12b2lkIGl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JaWYgKCFwcml2LT5yZmtpbGwpCi0JCXJldHVybjsKLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbF9odyhwcml2KSkgewotCQlyZmtpbGxfZm9yY2Vfc3RhdGUocHJpdi0+cmZraWxsLCBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghaXdsMzk0NV9pc19yZmtpbGxfc3cocHJpdikpCi0JCXJma2lsbF9mb3JjZV9zdGF0ZShwcml2LT5yZmtpbGwsIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpOwotCWVsc2UKLQkJcmZraWxsX2ZvcmNlX3N0YXRlKHByaXYtPnJma2lsbCwgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCk7Ci19Ci0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogZHJpdmVyIGFuZCBtb2R1bGUgZW50cnkgcG9pbnQKQEAgLTgzMDcsMjkgKzUyOTUsMTkgQEAKIAogCXJldCA9IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byByZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtOiAlZFxuIiwgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAJfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZpd2wzOTQ1X2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgZHJpdmVyIHN5c2ZzIGZpbGVcbiIpOwotCQlnb3RvIGVycm9yX2RlYnVnOwotCX0KLSNlbmRpZgogCiAJcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1lcnJvcl9kZWJ1ZzoKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKLSNlbmRpZgogZXJyb3JfcmVnaXN0ZXI6CiAJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogCXJldHVybiByZXQ7CkBAIC04MzM3LDI5ICs1MzE1LDI5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpd2wzOTQ1X2V4aXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWRyaXZlcl9yZW1vdmVfZmlsZSgmaXdsMzk0NV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwpOwotI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpd2wzOTQ1X2RyaXZlcik7CiAJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogfQogCiBNT0RVTEVfRklSTVdBUkUoSVdMMzk0NV9NT0RVTEVfRklSTVdBUkUoSVdMMzk0NV9VQ09ERV9BUElfTUFYKSk7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChhbnRlbm5hLCBpd2wzOTQ1X3BhcmFtX2FudGVubmEsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYW50ZW5uYSwgaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFudGVubmEsICJzZWxlY3QgYW50ZW5uYSAoMT1NYWluLCAyPUF1eCwgZGVmYXVsdCAwIFtib3RoXSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlLCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGUsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZSwgaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGUsICJtYW51YWxseSBkaXNhYmxlIHRoZSByYWRpbyAoZGVmYXVsdCAwIFtyYWRpbyBvbl0pIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoaHdjcnlwdG8sIGl3bDM5NDVfcGFyYW1faHdjcnlwdG8sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGh3Y3J5cHRvLAotCQkgInVzaW5nIGhhcmR3YXJlIGNyeXB0byBlbmdpbmUgKGRlZmF1bHQgMCBbc29mdHdhcmVdKVxuIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDM5NDVfcGFyYW1fZGVidWcsIHVpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3Y3J5cHRvLCBpd2wzOTQ1X21vZF9wYXJhbXMuc3dfY3J5cHRvLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bywKKwkJICJ1c2luZyBzb2Z0d2FyZSBjcnlwdG8gKGRlZmF1bHQgMSBbc29mdHdhcmVdKVxuIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDM5NDVfbW9kX3BhcmFtcy5kZWJ1ZywgdWludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX2h3X3NjYW4sIGl3bDM5NDVfcGFyYW1fZGlzYWJsZV9od19zY2FuLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfaHdfc2NhbiwgaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9od19zY2FuLCAiZGlzYWJsZSBoYXJkd2FyZSBzY2FubmluZyAoZGVmYXVsdCAwKSIpOwogCi1tb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bSwgaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlc19udW0sIGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhxdWV1ZXNfbnVtLCAibnVtYmVyIG9mIGh3IHF1ZXVlcy4iKTsKIAorbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQzOTQ1LCBpd2wzOTQ1X21vZF9wYXJhbXMucmVzdGFydF9mdywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZndfcmVzdGFydDM5NDUsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKKwogbW9kdWxlX2V4aXQoaXdsMzk0NV9leGl0KTsKIG1vZHVsZV9pbml0KGl3bDM5NDVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCmluZGV4IDAyMDgwYTMuLjBiNjkxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCkBAIC00LDggKzQsMTAgQEAKIHVzYjh4eHgtb2JqcyArPSBpZl91c2IubwogbGliZXJ0YXNfY3Mtb2JqcyArPSBpZl9jcy5vCiBsaWJlcnRhc19zZGlvLW9ianMgKz0gaWZfc2Rpby5vCitsaWJlcnRhc19zcGktb2JqcyArPSBpZl9zcGkubwogCiBvYmotJChDT05GSUdfTElCRVJUQVMpICAgICArPSBsaWJlcnRhcy5vCiBvYmotJChDT05GSUdfTElCRVJUQVNfVVNCKSArPSB1c2I4eHh4Lm8KIG9iai0kKENPTkZJR19MSUJFUlRBU19DUykgICs9IGxpYmVydGFzX2NzLm8KIG9iai0kKENPTkZJR19MSUJFUlRBU19TRElPKSArPSBsaWJlcnRhc19zZGlvLm8KK29iai0kKENPTkZJR19MSUJFUlRBU19TUEkpICs9IGxpYmVydGFzX3NwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKaW5kZXggZWM0ZWZkNy4uNTBlMjhhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtNjI5LDcgKzYyOSw3IEBACiAJCXJlcyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JcHJpdi0+cmZfb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoKGNoYXIgKilidWYsIE5VTEwsIDE2KTsKKwlwcml2LT5yZl9vZmZzZXQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKIAlyZXMgPSBjb3VudDsKIG91dF91bmxvY2s6CiAJZnJlZV9wYWdlKGFkZHIpOwpAQCAtNjgwLDEyICs2ODAsMTIgQEAKIH0KIAogc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHBlcm07CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2ZpbGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZmlsZXNbXSA9IHsKIAl7ICJpbmZvIiwgMDQ0NCwgRk9QUyhsYnNfZGV2X2luZm8sIHdyaXRlX2ZpbGVfZHVtbXkpLCB9LAogCXsgImdldHNjYW50YWJsZSIsIDA0NDQsIEZPUFMobGJzX2dldHNjYW50YWJsZSwKIAkJCQkJd3JpdGVfZmlsZV9kdW1teSksIH0sCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJCQlsYnNfc2xlZXBwYXJhbXNfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0gewogCXsibG93X3Jzc2kiLCAwNjQ0LCBGT1BTKGxic19sb3dyc3NpX3JlYWQsCiAJCQkJbGJzX2xvd3Jzc2lfd3JpdGUpLCB9LAogCXsibG93X3NuciIsIDA2NDQsIEZPUFMobGJzX2xvd3Nucl9yZWFkLApAQCAtNzA4LDcgKzcwOCw3IEBACiAJCQkJbGJzX2hpZ2hzbnJfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX3JlZ3NfZmlsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19yZWdzX2ZpbGVzW10gPSB7CiAJeyJyZG1hYyIsIDA2NDQsIEZPUFMobGJzX3JkbWFjX3JlYWQsIGxic19yZG1hY193cml0ZSksIH0sCiAJeyJ3cm1hYyIsIDA2MDAsIEZPUFMoTlVMTCwgbGJzX3dybWFjX3dyaXRlKSwgfSwKIAl7InJkYmJwIiwgMDY0NCwgRk9QUyhsYnNfcmRiYnBfcmVhZCwgbGJzX3JkYmJwX3dyaXRlKSwgfSwKQEAgLTczNSw3ICs3MzUsNyBAQAogdm9pZCBsYnNfZGVidWdmc19pbml0X29uZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzICpmaWxlczsKKwljb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgKmZpbGVzOwogCWlmICghbGJzX2RpcikKIAkJZ290byBleGl0OwogCkBAIC05MzgsNyArOTM4LDcgQEAKIAlyZXR1cm4gKHNzaXplX3QpY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsYnNfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxic19kZWJ1Z19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCiAJLndyaXRlID0gbGJzX2RlYnVnZnNfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggYzM2NGU0YzAuLmU4ZGZkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgTEJTX0RFQl9IRVgJMHgwMDIwMDAwMAogI2RlZmluZSBMQlNfREVCX1NESU8JMHgwMDQwMDAwMAogI2RlZmluZSBMQlNfREVCX1NZU0ZTCTB4MDA4MDAwMDAKKyNkZWZpbmUgTEJTX0RFQl9TUEkJMHgwMTAwMDAwMAogCiBleHRlcm4gdW5zaWduZWQgaW50IGxic19kZWJ1ZzsKIApAQCAtODQsNiArODUsNyBAQAogI2RlZmluZSBsYnNfZGViX3RocmVhZChmbXQsIGFyZ3MuLi4pICAgIExCU19ERUJfTEwoTEJTX0RFQl9USFJFQUQsICIgdGhyZWFkIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfc2RpbyhmbXQsIGFyZ3MuLi4pICAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NESU8sICIgc2RpbyIsIGZtdCwgIyNhcmdzKQogI2RlZmluZSBsYnNfZGViX3N5c2ZzKGZtdCwgYXJncy4uLikgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TWVNGUywgIiBzeXNmcyIsIGZtdCwgIyNhcmdzKQorI2RlZmluZSBsYnNfZGViX3NwaShmbXQsIGFyZ3MuLi4pICAgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TUEksICIgc3BpIiwgZm10LCAjI2FyZ3MpCiAKICNkZWZpbmUgbGJzX3ByX2luZm8oZm9ybWF0LCBhcmdzLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQpAQCAtMjYzLDYgKzI2NSw3IEBACiAKICNkZWZpbmUJQ01EX0ZfSE9TVENNRAkJKDEgPDwgMCkKICNkZWZpbmUgRldfQ0FQSU5GT19XUEEgIAkoMSA8PCAwKQorI2RlZmluZSBGV19DQVBJTkZPX1BTICAJCSgxIDw8IDEpCiAjZGVmaW5lIEZXX0NBUElORk9fRklSTVdBUkVfVVBHUkFERQkoMSA8PCAxMykKICNkZWZpbmUgRldfQ0FQSU5GT19CT09UMl9VUEdSQURFCSgxPDwxNCkKICNkZWZpbmUgRldfQ0FQSU5GT19QRVJTSVNURU5UX0NPTkZJRwkoMTw8MTUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGRkNjgyYzQuLjI3ZTgxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xMDksNyArMTA5LDYgQEAKIAl2b2lkICpjYXJkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9kZXY7IC8qIFZpcnR1YWwgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnJ0YXBfbmV0X2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCmluZGV4IDI3N2ZmMTkuLmQ0NDU3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgQ01EXzgwMl8xMV9MRURfR1BJT19DVFJMCQkweDAwNGUKICNkZWZpbmUgQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTCQkweDAwNTkKICNkZWZpbmUgQ01EXzgwMl8xMV9CQU5EX0NPTkZJRwkJCTB4MDA1OAorI2RlZmluZSBDTURfR1NQSV9CVVNfQ09ORklHCQkJMHgwMDVhCiAjZGVmaW5lIENNRF84MDJfMTFEX0RPTUFJTl9JTkZPCQkJMHgwMDViCiAjZGVmaW5lIENNRF84MDJfMTFfS0VZX01BVEVSSUFMCQkJMHgwMDVlCiAjZGVmaW5lIENNRF84MDJfMTFfU0xFRVBfUEFSQU1TCQkJMHgwMDY2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKaW5kZXggZjZhNzlhNi4uYTg5OWFlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaApAQCAtMjIxLDYgKzIyMSwxNCBAQAogCXU4IG1hY2xpc3RbRVRIX0FMRU4gKiBNUlZEUlZfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBjbWRfZHNfZ3NwaV9idXNfY29uZmlnIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgYnVzX2RlbGF5X21vZGU7CisJX19sZTE2IGhvc3RfdGltZV9kZWxheV90b19yZWFkX3BvcnQ7CisJX19sZTE2IGhvc3RfdGltZV9kZWxheV90b19yZWFkX3JlZ2lzdGVyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSB7CiAJdTggbWFjYWRkcltFVEhfQUxFTl07CiAJdTggYXV0aHR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCA4NDJhMDhkLi5jZWRlYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewogCQl1OCB2YWwgPSBpZl9jc19yZWFkOChjYXJkLCBhZGRyKTsKIAkJaWYgKHZhbCA9PSByZWcpCi0JCQlyZXR1cm4gaTsKKwkJCXJldHVybiAwOwogCQl1ZGVsYXkoNSk7CiAJfQogCXJldHVybiAtRVRJTUU7CkBAIC00MjEsNyArNDIxLDcgQEAKIAlsZW4gPSBpZl9jc19yZWFkMTYocHJpdi0+Y2FyZCwgSUZfQ1NfUkVBRF9MRU4pOwogCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgewogCQlsYnNfcHJfZXJyKCJjYXJkIGRhdGEgYnVmZmVyIGhhcyBpbnZhbGlkICMgb2YgYnl0ZXMgKCVkKVxuIiwgbGVuKTsKLQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJZ290byBkYXRfZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCmluZGV4IDQ1MTlkNzMuLjc2ZjRjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKQEAgLTk1LDYgKzk1LDggQEAKIAogCXNwaW5sb2NrX3QJCWxvY2s7CiAJc3RydWN0IGlmX3NkaW9fcGFja2V0CSpwYWNrZXRzOworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtxdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcGFja2V0X3dvcmtlcjsKIH07CiAKQEAgLTIwOSw2ICsyMTEsOSBAQAogCQlldmVudCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSUZfU0RJT19FVkVOVCwgJnJldCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKKworCQkvKiByaWdodCBzaGlmdCAzIGJpdHMgdG8gZ2V0IHRoZSBldmVudCBpZCAqLworCQlldmVudCA+Pj0gMzsKIAl9IGVsc2UgewogCQlpZiAoc2l6ZSA8IDQpIHsKIAkJCWxic19kZWJfc2RpbygiZXZlbnQgcGFja2V0IHRvbyBzbWFsbCAoJWQgYnl0ZXMpXG4iLApAQCAtNzQzLDcgKzc0OCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKLQlzY2hlZHVsZV93b3JrKCZjYXJkLT5wYWNrZXRfd29ya2VyKTsKKwlxdWV1ZV93b3JrKGNhcmQtPndvcmtxdWV1ZSwgJmNhcmQtPnBhY2tldF93b3JrZXIpOwogCiAJcmV0ID0gMDsKIApAQCAtODMzLDYgKzgzOCw3IEBACiAJY2FyZC0+ZnVuYyA9IGZ1bmM7CiAJY2FyZC0+bW9kZWwgPSBtb2RlbDsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgibGliZXJ0YXNfc2RpbyIpOwogCUlOSVRfV09SSygmY2FyZC0+cGFja2V0X3dvcmtlciwgaWZfc2Rpb19ob3N0X3RvX2NhcmRfd29ya2VyKTsKIAogCWZvciAoaSA9IDA7aSA8IEFSUkFZX1NJWkUoaWZfc2Rpb19tb2RlbHMpO2krKykgewpAQCAtOTIxLDE1ICs5MjcsMTcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9hY3RpdmF0ZV9jYXJkOwogCisJaWYgKHByaXYtPmZ3Y2FwaW5mbyAmIEZXX0NBUElORk9fUFMpCisJCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7CisKIG91dDoKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CiAKIGVycl9hY3RpdmF0ZV9jYXJkOgotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JZnJlZV9uZXRkZXYocHJpdi0+ZGV2KTsKLQlrZnJlZShwcml2KTsKKwlmbHVzaF93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7CiByZWNsYWltOgogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKIHJlbGVhc2VfaW50OgpAQCAtOTM5LDYgKzk0Nyw3IEBACiByZWxlYXNlOgogCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwogZnJlZToKKwlkZXN0cm95X3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOwogCXdoaWxlIChjYXJkLT5wYWNrZXRzKSB7CiAJCXBhY2tldCA9IGNhcmQtPnBhY2tldHM7CiAJCWNhcmQtPnBhY2tldHMgPSBjYXJkLT5wYWNrZXRzLT5uZXh0OwpAQCAtOTY1LDcgKzk3NCw4IEBACiAJbGJzX3N0b3BfY2FyZChjYXJkLT5wcml2KTsKIAlsYnNfcmVtb3ZlX2NhcmQoY2FyZC0+cHJpdik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CiAKIAlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CiAJc2Rpb19yZWxlYXNlX2lycShmdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczMTFlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0wLDAgKzEsMTIxOCBAQAorLyoKKyAqCWxpbnV4L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisgKgorICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFNQSSBXTEFOIGNhcmRzLgorICoKKyAqCUNvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKglBdXRob3JzOgorICoJQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+CisgKglDb2xpbiBNY0NhYmUgPGNvbGluQGNvenliaXQuY29tPgorICoKKyAqCUluc3BpcmVkIGJ5IGlmX3NkaW8uYywgQ29weXJpZ2h0IDIwMDctMjAwOCBQaWVycmUgT3NzbWFuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbGliZXJ0YXNfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSAiaG9zdC5oIgorI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZGV2LmgiCisjaW5jbHVkZSAiaWZfc3BpLmgiCisKK3N0cnVjdCBpZl9zcGlfcGFja2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworCXUxNgkJCQlibGVuOworCXU4CQkJCWJ1ZmZlclswXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7Cit9OworCitzdHJ1Y3QgaWZfc3BpX2NhcmQgeworCXN0cnVjdCBzcGlfZGV2aWNlCQkqc3BpOworCXN0cnVjdCBsYnNfcHJpdmF0ZQkJKnByaXY7CisJc3RydWN0IGxpYmVydGFzX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWNoYXIJCQkJaGVscGVyX2Z3X25hbWVbRklSTVdBUkVfTkFNRV9NQVhdOworCWNoYXIJCQkJbWFpbl9md19uYW1lW0ZJUk1XQVJFX05BTUVfTUFYXTsKKworCS8qIFRoZSBjYXJkIElEIGFuZCBjYXJkIHJldmlzaW9uLCBhcyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICovCisJdTE2CQkJCWNhcmRfaWQ7CisJdTgJCQkJY2FyZF9yZXY7CisKKwkvKiBQaW4gbnVtYmVyIGZvciBvdXIgR1BJTyBjaGlwLXNlbGVjdC4gKi8KKwkvKiBUT0RPOiBPbmNlIHRoZSBnZW5lcmljIFNQSSBsYXllciBoYXMgc29tZSBhZGRpdGlvbmFsIGZlYXR1cmVzLCB3ZQorCSAqIHNob3VsZCB0YWtlIHRoaXMgb3V0IGFuZCB1c2UgdGhlIG5vcm1hbCBjaGlwIHNlbGVjdCBoZXJlLgorCSAqIFdlIG5lZWQgc3VwcG9ydCBmb3IgY2hpcCBzZWxlY3QgZGVsYXlzLCBhbmQgbm90IGRyb3BwaW5nIGNoaXBzZWxlY3QKKwkgKiBhZnRlciBlYWNoIHdvcmQuICovCisJaW50CQkJCWdwaW9fY3M7CisKKwkvKiBUaGUgbGFzdCB0aW1lIHRoYXQgd2UgaW5pdGlhdGVkIGFuIFNQVSBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCQkJcHJldl94ZmVyX3RpbWU7CisKKwlpbnQJCQkJdXNlX2R1bW15X3dyaXRlczsKKwl1bnNpZ25lZCBsb25nCQkJc3B1X3BvcnRfZGVsYXk7CisJdW5zaWduZWQgbG9uZwkJCXNwdV9yZWdfZGVsYXk7CisKKwkvKiBIYW5kbGVzIGFsbCBTUEkgY29tbXVuaWNhdGlvbiAoZXhjZXB0IGZvciBGVyBsb2FkKSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnNwaV90aHJlYWQ7CisJaW50CQkJCXJ1bl90aHJlYWQ7CisKKwkvKiBVc2VkIHRvIHdha2UgdXAgdGhlIHNwaV90aHJlYWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCQlzcGlfcmVhZHk7CisJc3RydWN0IHNlbWFwaG9yZQkJc3BpX3RocmVhZF90ZXJtaW5hdGVkOworCisJdTgJCQkJY21kX2J1ZmZlcltJRl9TUElfQ01EX0JVRl9TSVpFXTsKKworCS8qIEEgYnVmZmVyIG9mIGluY29taW5nIHBhY2tldHMgZnJvbSBsaWJlcnRhcyBjb3JlLgorCSAqIFNpbmNlIHdlIGNhbid0IHNsZWVwIGluIGh3X2hvc3RfdG9fY2FyZCwgd2UgaGF2ZSB0byBidWZmZXIKKwkgKiB0aGVtLiAqLworCXN0cnVjdCBsaXN0X2hlYWQJCWNtZF9wYWNrZXRfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlkYXRhX3BhY2tldF9saXN0OworCisJLyogUHJvdGVjdHMgY21kX3BhY2tldF9saXN0IGFuZCBkYXRhX3BhY2tldF9saXN0ICovCisJc3BpbmxvY2tfdAkJCWJ1ZmZlcl9sb2NrOworfTsKKworc3RhdGljIHZvaWQgZnJlZV9pZl9zcGlfY2FyZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqY3Vyc29yLCAqbmV4dDsKKwlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0OworCisJQlVHX09OKGNhcmQtPnJ1bl90aHJlYWQpOworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJzb3IsIG5leHQsICZjYXJkLT5jbWRfcGFja2V0X2xpc3QpIHsKKwkJcGFja2V0ID0gY29udGFpbmVyX29mKGN1cnNvciwgc3RydWN0IGlmX3NwaV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJa2ZyZWUocGFja2V0KTsKKwl9CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnNvciwgbmV4dCwgJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpIHsKKwkJcGFja2V0ID0gY29udGFpbmVyX29mKGN1cnNvciwgc3RydWN0IGlmX3NwaV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJa2ZyZWUocGFja2V0KTsKKwl9CisJc3BpX3NldF9kcnZkYXRhKGNhcmQtPnNwaSwgTlVMTCk7CisJa2ZyZWUoY2FyZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpcF9pZGVudCBjaGlwX2lkX3RvX2RldmljZV9uYW1lW10gPSB7CisJeyAuY2hpcF9pZCA9IDB4MDQsIC5uYW1lID0gODM4NSB9LAorCXsgLmNoaXBfaWQgPSAweDBiLCAubmFtZSA9IDg2ODYgfSwKK307CisKKy8qCisgKiBTUEkgSW50ZXJmYWNlIFVuaXQgUm91dGluZXMKKyAqCisgKiBUaGUgU1BVIHNpdHMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIFdMQU4gbW9kdWxlLgorICogQWxsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUgaXMgdGhyb3VnaCBTUFUgdHJhbnNhY3Rpb25zLgorICoKKyAqIEZpcnN0IHdlIGhhdmUgdG8gcHV0IGEgU1BVIHJlZ2lzdGVyIG5hbWUgb24gdGhlIGJ1cy4gVGhlbiB3ZSBjYW4KKyAqIGVpdGhlciByZWFkIGZyb20gb3Igd3JpdGUgdG8gdGhhdCByZWdpc3Rlci4KKyAqCisgKiBGb3IgMTYtYml0IHRyYW5zYWN0aW9ucywgYnl0ZSBvcmRlciBvbiB0aGUgYnVzIGlzIGJpZy1lbmRpYW4uCisgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgaGVyZSwgdGhvdWdoLgorICogVGhlIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlIGluIHRoZSBTUEkgcm91dGluZXMuCisgKi8KKworc3RhdGljIHZvaWQgc3B1X3RyYW5zYWN0aW9uX2luaXQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWlmICghdGltZV9hZnRlcihqaWZmaWVzLCBjYXJkLT5wcmV2X3hmZXJfdGltZSArIDEpKSB7CisJCS8qIFVuZm9ydHVuYXRlbHksIHRoZSBTUFUgcmVxdWlyZXMgYSBkZWxheSBiZXR3ZWVuIHN1Y2Nlc3NpdmUKKwkJICogdHJhbnNhY3Rpb25zLiBJZiBvdXIgbGFzdCB0cmFuc2FjdGlvbiB3YXMgbW9yZSB0aGFuIGEgamlmZnkKKwkJICogYWdvLCB3ZSBoYXZlIG9idmlvdXNseSBhbHJlYWR5IGRlbGF5ZWQgZW5vdWdoLgorCQkgKiBJZiBub3QsIHdlIGhhdmUgdG8gYnVzeS13YWl0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuICovCisJCW5kZWxheSg0MDApOworCX0KKwlncGlvX3NldF92YWx1ZShjYXJkLT5ncGlvX2NzLCAwKTsgLyogYXNzZXJ0IENTICovCit9CisKK3N0YXRpYyB2b2lkIHNwdV90cmFuc2FjdGlvbl9maW5pc2goc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWdwaW9fc2V0X3ZhbHVlKGNhcmQtPmdwaW9fY3MsIDEpOyAvKiBkcm9wIENTICovCisJY2FyZC0+cHJldl94ZmVyX3RpbWUgPSBqaWZmaWVzOworfQorCisvKiBXcml0ZSBvdXQgYSBieXRlIGJ1ZmZlciB0byBhbiBTUEkgcmVnaXN0ZXIsCisgKiB1c2luZyBhIHNlcmllcyBvZiAxNi1iaXQgdHJhbnNmZXJzLiAqLworc3RhdGljIGludCBzcHVfd3JpdGUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCBlcnIgPSAwOworCXUxNiByZWdfb3V0ID0gcmVnIHwgSUZfU1BJX1dSSVRFX09QRVJBVElPTl9NQVNLOworCisJLyogWW91IG11c3QgZ2l2ZSBhbiBldmVuIG51bWJlciBvZiBieXRlcyB0byB0aGUgU1BVLCBldmVuIGlmIGl0CisJICogZG9lc24ndCBjYXJlIGFib3V0IHRoZSBsYXN0IG9uZS4gICovCisJQlVHX09OKGxlbiAmIDB4MSk7CisKKwlzcHVfdHJhbnNhY3Rpb25faW5pdChjYXJkKTsKKworCS8qIHdyaXRlIFNQVSByZWdpc3RlciBpbmRleCAqLworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksICh1OCAqKSZyZWdfb3V0LCBzaXplb2YodTE2KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzcGlfd3JpdGUoY2FyZC0+c3BpLCBidWYsIGxlbik7CisKK291dDoKKwlzcHVfdHJhbnNhY3Rpb25fZmluaXNoKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV93cml0ZV91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXJldHVybiBzcHVfd3JpdGUoY2FyZCwgcmVnLCAodTggKikmdmFsLCBzaXplb2YodTE2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV93cml0ZV91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCS8qIFRoZSBsb3dlciAxNiBiaXRzIGFyZSB3cml0dGVuIGZpcnN0LiAqLworCXUxNiBvdXRbMl07CisJb3V0WzBdID0gdmFsICYgMHhmZmZmOworCW91dFsxXSA9ICh2YWwgJiAweGZmZmYwMDAwKSA+PiAxNjsKKwlyZXR1cm4gc3B1X3dyaXRlKGNhcmQsIHJlZywgKHU4ICopJm91dCwgc2l6ZW9mKHUzMikpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcHVfcmVnX2lzX3BvcnRfcmVnKHUxNiByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIElGX1NQSV9JT19SRFdSUE9SVF9SRUc6CisJY2FzZSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRzoKKwljYXNlIElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRzoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHNwdV9yZWFkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZGVsYXk7CisJaW50IGVyciA9IDA7CisJdTE2IHplcm8gPSAwOworCXUxNiByZWdfb3V0ID0gcmVnIHwgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0s7CisKKwkvKiBZb3UgbXVzdCB0YWtlIGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIFNQVSwgZXZlbiBpZiB5b3UKKwkgKiBkb24ndCBjYXJlIGFib3V0IHRoZSBsYXN0IG9uZS4gICovCisJQlVHX09OKGxlbiAmIDB4MSk7CisKKwlzcHVfdHJhbnNhY3Rpb25faW5pdChjYXJkKTsKKworCS8qIHdyaXRlIFNQVSByZWdpc3RlciBpbmRleCAqLworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksICh1OCAqKSZyZWdfb3V0LCBzaXplb2YodTE2KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlkZWxheSA9IHNwdV9yZWdfaXNfcG9ydF9yZWcocmVnKSA/IGNhcmQtPnNwdV9wb3J0X2RlbGF5IDoKKwkJCQkJCWNhcmQtPnNwdV9yZWdfZGVsYXk7CisJaWYgKGNhcmQtPnVzZV9kdW1teV93cml0ZXMpIHsKKwkJLyogQ2xvY2sgaW4gZHVtbXkgY3ljbGVzIHdoaWxlIHRoZSBTUFUgZmlsbHMgdGhlIEZJRk8gKi8KKwkJZm9yIChpID0gMDsgaSA8IGRlbGF5IC8gMTY7ICsraSkgeworCQkJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgKHU4ICopJnplcm8sIHNpemVvZih1MTYpKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEJ1c3ktd2FpdCB3aGlsZSB0aGUgU1BVIGZpbGxzIHRoZSBGSUZPICovCisJCW5kZWxheSgxMDAgKyAoZGVsYXkgKiAxMCkpOworCX0KKworCS8qIHJlYWQgaW4gZGF0YSAqLworCWVyciA9IHNwaV9yZWFkKGNhcmQtPnNwaSwgYnVmLCBsZW4pOworCitvdXQ6CisJc3B1X3RyYW5zYWN0aW9uX2ZpbmlzaChjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBSZWFkIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNwdV9yZWFkX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUxNiAqdmFsKQoreworCXJldHVybiBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKXZhbCwgc2l6ZW9mKHUxNikpOworfQorCisvKiBSZWFkIDMyIGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIuCisgKiBUaGUgbG93IDE2IGJpdHMgYXJlIHJlYWQgZmlyc3QuICovCitzdGF0aWMgaW50IHNwdV9yZWFkX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUzMiAqdmFsKQoreworCXUxNiBidWZbMl07CisJaW50IGVycjsKKwllcnIgPSBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKWJ1Ziwgc2l6ZW9mKHUzMikpOworCWlmICghZXJyKQorCQkqdmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCAxNik7CisJcmV0dXJuIGVycjsKK30KKworLyogS2VlcCByZWFkaW5nIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgdW50aWwgeW91IGdldCB0aGUgY29ycmVjdCByZXN1bHQuCisgKgorICogSWYgbWFzayA9IDAsIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyBhbnkgbm9uLXplcm8gbnVtYmVyLgorICogSWYgbWFzayAhPSAwLCB0aGUgY29ycmVjdCByZXN1bHQgaXMgYW55IG51bWJlciB3aGVyZQorICogbnVtYmVyICYgdGFyZ2V0X21hc2sgPT0gdGFyZ2V0CisgKgorICogUmV0dXJucyAtRVRJTUVET1VUIGlmIGEgc2Vjb25kIHBhc3NlcyB3aXRob3V0IHRoZSBjb3JyZWN0IHJlc3VsdC4gKi8KK3N0YXRpYyBpbnQgc3B1X3dhaXRfZm9yX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsCisJCQl1MTYgdGFyZ2V0X21hc2ssIHUxNiB0YXJnZXQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgNSpIWjsKKwl3aGlsZSAoMSkgeworCQl1MTYgdmFsOworCQllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgcmVnLCAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmICh0YXJnZXRfbWFzaykgeworCQkJaWYgKCh2YWwgJiB0YXJnZXRfbWFzaykgPT0gdGFyZ2V0KQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKHZhbCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQl1ZGVsYXkoMTAwKTsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWxic19wcl9lcnIoIiVzOiB0aW1lb3V0IHdpdGggdmFsPSUwMngsICIKKwkJCSAgICAgICAidGFyZ2V0X21hc2s9JTAyeCwgdGFyZ2V0PSUwMnhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHZhbCwgdGFyZ2V0X21hc2ssIHRhcmdldCk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KK30KKworLyogUmVhZCAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyIHVudGlsIHlvdSByZWNlaXZlIGEgc3BlY2lmaWMgdmFsdWUuCisgKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSA0IHRyaWVzIHBhc3Mgd2l0aG91dCBzdWNjZXNzLiAqLworc3RhdGljIGludCBzcHVfd2FpdF9mb3JfdTMyKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTMyIHJlZywgdTMyIHRhcmdldCkKK3sKKwlpbnQgZXJyLCB0cnk7CisJZm9yICh0cnkgPSAwOyB0cnkgPCA0OyArK3RyeSkgeworCQl1MzIgdmFsID0gMDsKKwkJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIHJlZywgJnZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAodmFsID09IHRhcmdldCkKKwkJCXJldHVybiAwOworCQltZGVsYXkoMTAwKTsKKwl9CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQkgICBpbnQgc3VwcHJlc3NfaG9zdF9pbnQsCisJCQkgICBpbnQgYXV0b19pbnQpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBXZSBjYW4gc3VwcHJlc3MgYSBob3N0IGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUKKwkgKiBiaXQgaW4gdGhlICJob3N0IGludGVycnVwdCBzdGF0dXMgbWFzayIgcmVnaXN0ZXIgKi8KKwlpZiAoc3VwcHJlc3NfaG9zdF9pbnQpIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLAorCQkJICAgICAgSUZfU1BJX0hJU01fVFhfRE9XTkxPQURfUkRZIHwKKwkJCSAgICAgIElGX1NQSV9ISVNNX1JYX1VQTE9BRF9SRFkgfAorCQkJICAgICAgSUZfU1BJX0hJU01fQ01EX0RPV05MT0FEX1JEWSB8CisJCQkgICAgICBJRl9TUElfSElTTV9DQVJERVZFTlQgfAorCQkJICAgICAgSUZfU1BJX0hJU01fQ01EX1VQTE9BRF9SRFkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBJZiBhdXRvLWludGVycnVwdHMgYXJlIG9uLCB0aGUgY29tcGxldGlvbiBvZiBjZXJ0YWluIHRyYW5zYWN0aW9ucworCSAqIHdpbGwgdHJpZ2dlciBhbiBpbnRlcnJ1cHQgYXV0b21hdGljYWxseS4gSWYgYXV0by1pbnRlcnJ1cHRzCisJICogYXJlIG9mZiwgd2UgbmVlZCB0byBzZXQgdGhlICJDYXJkIEludGVycnVwdCBDYXVzZSIgcmVnaXN0ZXIgdG8KKwkgKiB0cmlnZ2VyIGEgY2FyZCBpbnRlcnJ1cHQuICovCisJaWYgKGF1dG9faW50KSB7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHLAorCQkJCUlGX1NQSV9ISUNUX1RYX0RPV05MT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfUlhfVVBMT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfQ01EX0RPV05MT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfQ01EX1VQTE9BRF9PVkVSX0FVVE8pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzcHVfZ2V0X2NoaXBfcmV2aXNpb24oc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJCSAgdTE2ICpjYXJkX2lkLCB1OCAqY2FyZF9yZXYpCit7CisJaW50IGVyciA9IDA7CisJdTMyIGRldl9jdHJsOworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUcsICZkZXZfY3RybCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkqY2FyZF9pZCA9IElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX0lEKGRldl9jdHJsKTsKKwkqY2FyZF9yZXYgPSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9SRVYoZGV2X2N0cmwpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3B1X3NldF9idXNfbW9kZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiBtb2RlKQoreworCWludCBlcnIgPSAwOworCXUxNiBydmFsOworCS8qIHNldCBidXMgbW9kZSAqLworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcsIG1vZGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJLyogQ2hlY2sgdGhhdCB3ZSB3ZXJlIGFibGUgdG8gcmVhZCBiYWNrIHdoYXQgd2UganVzdCB3cm90ZS4gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcsICZydmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChydmFsICE9IG1vZGUpIHsKKwkJbGJzX3ByX2VycigiQ2FuJ3QgcmVhZCBidXMgbW9kZSByZWdpc3Rlci5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3B1X2luaXQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCBpbnQgdXNlX2R1bW15X3dyaXRlcykKK3sKKwlpbnQgZXJyID0gMDsKKwl1MzIgZGVsYXk7CisKKwkvKiBXZSBoYXZlIHRvIHN0YXJ0IHVwIGluIHRpbWVkIGRlbGF5IG1vZGUgc28gdGhhdCB3ZSBjYW4gc2FmZWx5CisJICogcmVhZCB0aGUgRGVsYXkgUmVhZCBSZWdpc3Rlci4gKi8KKwljYXJkLT51c2VfZHVtbXlfd3JpdGVzID0gMDsKKwllcnIgPSBzcHVfc2V0X2J1c19tb2RlKGNhcmQsCisJCQkJSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfVElNRUQgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18xNl9CSVRfREFUQSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljYXJkLT5zcHVfcG9ydF9kZWxheSA9IDEwMDA7CisJY2FyZC0+c3B1X3JlZ19kZWxheSA9IDEwMDA7CisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9ERUxBWV9SRUFEX1JFRywgJmRlbGF5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhcmQtPnNwdV9wb3J0X2RlbGF5ID0gZGVsYXkgJiAweDAwMDBmZmZmOworCWNhcmQtPnNwdV9yZWdfZGVsYXkgPSAoZGVsYXkgJiAweGZmZmYwMDAwKSA+PiAxNjsKKworCS8qIElmIGR1bW15IGNsb2NrIGRlbGF5IG1vZGUgaGFzIGJlZW4gcmVxdWVzdGVkLCBzd2l0Y2ggdG8gaXQgbm93ICovCisJaWYgKHVzZV9kdW1teV93cml0ZXMpIHsKKwkJY2FyZC0+dXNlX2R1bW15X3dyaXRlcyA9IDE7CisJCWVyciA9IHNwdV9zZXRfYnVzX21vZGUoY2FyZCwKKwkJCQlJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX1JJU0lORyB8CisJCQkJSUZfU1BJX0JVU19NT0RFX0RFTEFZX01FVEhPRF9EVU1NWV9DTE9DSyB8CisJCQkJSUZfU1BJX0JVU19NT0RFXzE2X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJbGJzX2RlYl9zcGkoIkluaXRpYWxpemVkIFNQVSB1bml0LiAiCisJCSAgICAic3B1X3BvcnRfZGVsYXk9MHglMDRseCwgc3B1X3JlZ19kZWxheT0weCUwNGx4XG4iLAorCQkgICAgY2FyZC0+c3B1X3BvcnRfZGVsYXksIGNhcmQtPnNwdV9yZWdfZGVsYXkpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBGaXJtd2FyZSBMb2FkaW5nCisgKi8KKworc3RhdGljIGludCBpZl9zcGlfcHJvZ19oZWxwZXJfZmlybXdhcmUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWludCBlcnIgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBOVUxMOworCWludCBieXRlc19yZW1haW5pbmc7CisJY29uc3QgdTggKmZ3OworCXU4IHRlbXBbSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1pdOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjYXJkLT5zcGk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJLyogR2V0IGhlbHBlciBmaXJtd2FyZSBpbWFnZSAqLworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBjYXJkLT5oZWxwZXJfZndfbmFtZSwgJnNwaS0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoInJlcXVlc3RfZmlybXdhcmUgZmFpbGVkIHdpdGggZXJyID0gJWRcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKwlieXRlc19yZW1haW5pbmcgPSBmaXJtd2FyZS0+c2l6ZTsKKwlmdyA9IGZpcm13YXJlLT5kYXRhOworCisJLyogTG9hZCBoZWxwZXIgZmlybXdhcmUgaW1hZ2UgKi8KKwl3aGlsZSAoYnl0ZXNfcmVtYWluaW5nID4gMCkgeworCQkvKiBTY3JhdGNoIHBhZCAxIHNob3VsZCBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UKKwkJICogd2FudCB0byBkb3dubG9hZCB0byB0aGUgZmlybXdhcmUgKi8KKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywKKwkJCQkJSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCisJCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFksCisJCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkpOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJCS8qIEZlZWQgdGhlIGRhdGEgaW50byB0aGUgY29tbWFuZCByZWFkL3dyaXRlIHBvcnQgcmVnCisJCSAqIGluIGNodW5rcyBvZiA2NCBieXRlcyAqLworCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsKKwkJbWVtY3B5KHRlbXAsIGZ3LAorCQkgICAgICAgbWluKGJ5dGVzX3JlbWFpbmluZywgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opKTsKKwkJbWRlbGF5KDEwKTsKKwkJZXJyID0gc3B1X3dyaXRlKGNhcmQsIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHLAorCQkJCQl0ZW1wLCBIRUxQRVJfRldfTE9BRF9DSFVOS19TWik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwkJLyogSW50ZXJydXB0IHRoZSBib290IGNvZGUgKi8KKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRywKKwkJCQkgICAgICAgSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWJ5dGVzX3JlbWFpbmluZyAtPSBIRUxQRVJfRldfTE9BRF9DSFVOS19TWjsKKwkJZncgKz0gSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1o7CisJfQorCisJLyogT25jZSB0aGUgaGVscGVyIC8gc2luZ2xlIHN0YWdlIGZpcm13YXJlIGRvd25sb2FkIGlzIGNvbXBsZXRlLAorCSAqIHdyaXRlIDAgdG8gc2NyYXRjaCBwYWQgMSBhbmQgaW50ZXJydXB0IHRoZQorCSAqIGJvb3Rsb2FkZXIuIFRoaXMgY29tcGxldGVzIHRoZSBoZWxwZXIgZG93bmxvYWQuICovCisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgRklSTVdBUkVfRE5MRF9PSyk7CisJaWYgKGVycikKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsIDApOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcsCisJCQkJSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKworCWxic19kZWJfc3BpKCJ3YWl0aW5nIGZvciBoZWxwZXIgdG8gYm9vdC4uLlxuIik7CisKK3JlbGVhc2VfZmlybXdhcmU6CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgaGVscGVyIGZpcm13YXJlIChlcnI9JWQpXG4iLCBlcnIpOworCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZCIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IHBhY2tldCB0aGUgZmlybXdhcmUgZXhwZWN0cyB1cyB0byBzZW5kCisgKiBTZXRzIGNyY19lcnIgaWYgdGhlIHByZXZpb3VzIHRyYW5zZmVyIGhhZCBhIENSQyBlcnJvci4gKi8KK3N0YXRpYyBpbnQgaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZV9jaGVja19sZW4oc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJCQkJaW50ICpjcmNfZXJyKQoreworCXUxNiBsZW47CisJaW50IGVyciA9IDA7CisKKwkvKiB3YWl0IHVudGlsIHRoZSBob3N0IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgaW5kaWNhdGVzCisJICogdGhhdCB3ZSBhcmUgcmVhZHkgdG8gZG93bmxvYWQgKi8KKwllcnIgPSBzcHVfd2FpdF9mb3JfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLAorCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFksCisJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgaG9zdF9pbnRfc3RhdHVzXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBBc2sgdGhlIGRldmljZSBob3cgbWFueSBieXRlcyBvZiBmaXJtd2FyZSBpdCB3YW50cy4gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobGVuID4gSUZfU1BJX0NNRF9CVUZfU0laRSkgeworCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIGRldmljZSByZXF1ZXN0ZWQgYSBsYXJnZXIgIgorCQkJICAgInRyYW5mZXIgdGhhbiB3ZSBhcmUgcHJlcGFyZWQgdG8gIgorCQkJICAgImhhbmRsZS4gKGxlbiA9ICVkKVxuIiwgbGVuKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChsZW4gJiAweDEpIHsKKwkJbGJzX2RlYl9zcGkoIiVzOiBjcmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKwkJbGVuICY9IH4weDE7CisJCSpjcmNfZXJyID0gMTsKKwl9IGVsc2UKKwkJKmNyY19lcnIgPSAwOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlpbnQgbGVuLCBwcmV2X2xlbjsKKwlpbnQgYnl0ZXMsIGNyY19lcnIgPSAwLCBlcnIgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBOVUxMOworCWNvbnN0IHU4ICpmdzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY2FyZC0+c3BpOworCXUxNiBudW1fY3JjX2VycnM7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBHZXQgZmlybXdhcmUgaW1hZ2UgKi8KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgY2FyZC0+bWFpbl9md19uYW1lLCAmc3BpLT5kZXYpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiJXM6IGNhbid0IGdldCBmaXJtd2FyZSAnJXMnIGZyb20ga2VybmVsLiAiCisJCQkiZXJyID0gJWRcbiIsIF9fZnVuY19fLCBjYXJkLT5tYWluX2Z3X25hbWUsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsIDAsIDApOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiJXM6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBpbml0aWFsICIKKwkJCSAgICJzY3JhdGNoIHJlZyA9IDBcbiIsIF9fZnVuY19fKTsKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCX0KKworCW51bV9jcmNfZXJycyA9IDA7CisJcHJldl9sZW4gPSAwOworCWJ5dGVzID0gZmlybXdhcmUtPnNpemU7CisJZncgPSBmaXJtd2FyZS0+ZGF0YTsKKwl3aGlsZSAoKGxlbiA9IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmVfY2hlY2tfbGVuKGNhcmQsICZjcmNfZXJyKSkpIHsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWVyciA9IGxlbjsKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJfQorCQlpZiAoYnl0ZXMgPCAwKSB7CisJCQkvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBsZWZ0LCB3ZSB3b3VsZCBub3JtYWxseQorCQkJICogZXhwZWN0IHRvIGhhdmUgdGVybWluYXRlZCB3aXRoIGxlbiA9IDAgKi8KKwkJCWxic19wcl9lcnIoIkZpcm13YXJlIGxvYWQgd2FudHMgbW9yZSBieXRlcyAiCisJCQkJICAgInRoYW4gd2UgaGF2ZSB0byBvZmZlci5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNyY19lcnIpIHsKKwkJCS8qIFByZXZpb3VzIHRyYW5zZmVyIGZhaWxlZC4gKi8KKwkJCWlmICgrK251bV9jcmNfZXJycyA+IE1BWF9NQUlOX0ZXX0xPQURfQ1JDX0VSUikgeworCQkJCWxic19wcl9lcnIoIlRvbyBtYW55IENSQyBlcnJvcnMgZW5jb3VudGVyZWQgIgorCQkJCQkgICAiaW4gZmlybXdhcmUgbG9hZC5cbiIpOworCQkJCWVyciA9IC1FSU87CisJCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogUHJldmlvdXMgdHJhbnNmZXIgc3VjY2VlZGVkLiBBZHZhbmNlIGNvdW50ZXJzLiAqLworCQkJYnl0ZXMgLT0gcHJldl9sZW47CisJCQlmdyArPSBwcmV2X2xlbjsKKwkJfQorCQlpZiAoYnl0ZXMgPCBsZW4pIHsKKwkJCW1lbXNldChjYXJkLT5jbWRfYnVmZmVyLCAwLCBsZW4pOworCQkJbWVtY3B5KGNhcmQtPmNtZF9idWZmZXIsIGZ3LCBieXRlcyk7CisJCX0gZWxzZQorCQkJbWVtY3B5KGNhcmQtPmNtZF9idWZmZXIsIGZ3LCBsZW4pOworCisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQllcnIgPSBzcHVfd3JpdGUoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJY2FyZC0+Y21kX2J1ZmZlciwgbGVuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHICwKKwkJCQkJSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCXByZXZfbGVuID0gbGVuOworCX0KKwlpZiAoYnl0ZXMgPiBwcmV2X2xlbikgeworCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIHdhbnRzIGZld2VyIGJ5dGVzIHRoYW4gIgorCQkJICAgIndlIGhhdmUgdG8gb2ZmZXIuXG4iKTsKKwl9CisKKwkvKiBDb25maXJtIGZpcm13YXJlIGRvd25sb2FkICovCisJZXJyID0gc3B1X3dhaXRfZm9yX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF80X1JFRywKKwkJCQkJU1VDQ0VTU0ZVTF9GV19ET1dOTE9BRF9NQUdJQyk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gY29uZmlybSB0aGUgZmlybXdhcmUgZG93bmxvYWRcbiIpOworCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJfQorCityZWxlYXNlX2Zpcm13YXJlOgorCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU1BJIFRyYW5zZmVyIFRocmVhZAorICoKKyAqIFRoZSBTUEkgdGhyZWFkIGhhbmRsZXMgYWxsIFNQSSB0cmFuc2ZlcnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgbG9jay4KKyAqLworCisvKiBNb3ZlIGEgY29tbWFuZCBmcm9tIHRoZSBjYXJkIHRvIHRoZSBob3N0ICovCitzdGF0aWMgaW50IGlmX3NwaV9jMmhfY21kKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisJdTE2IGxlbjsKKwl1OCBpOworCisJLyogV2UgbmVlZCBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhhbmRsZSB3aGF0ZXZlciBwZW9wbGUgc2VuZCB0bworCSAqIGh3X2hvc3RfdG9fY2FyZCAqLworCUJVSUxEX0JVR19PTihJRl9TUElfQ01EX0JVRl9TSVpFIDwgTEJTX0NNRF9CVUZGRVJfU0laRSk7CisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgPCBMQlNfVVBMRF9TSVpFKTsKKworCS8qIEl0J3MganVzdCBhbm5veWluZyBpZiB0aGUgYnVmZmVyIHNpemUgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCBiZWNhdXNlCisJICogdGhlbiB3ZSBtaWdodCBoYXZlIGxlbiA8ICBJRl9TUElfQ01EX0JVRl9TSVpFIGJ1dAorCSAqIEFMSUdOKGxlbiwgNCkgPiBJRl9TUElfQ01EX0JVRl9TSVpFICovCisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgJSA0ICE9IDApOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwkvKiBIb3cgbWFueSBieXRlcyBhcmUgdGhlcmUgdG8gcmVhZD8gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMl9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmICghbGVuKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChsZW4gPiBJRl9TUElfQ01EX0JVRl9TSVpFKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogcmVzcG9uc2UgcGFja2V0IHRvbyBsYXJnZTogIgorCQkJICAgIiVkIGJ5dGVzLCBidXQgbWF4aW11bSBpcyAlZFxuIiwKKwkJCSAgIF9fZnVuY19fLCBsZW4sIElGX1NQSV9DTURfQlVGX1NJWkUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlIGludG8gb3VyIGNvbW1hbmQgYnVmZmVyICovCisJZXJyID0gc3B1X3JlYWQoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJY2FyZC0+Y21kX2J1ZmZlciwgQUxJR04obGVuLCA0KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwlpID0gKHByaXYtPnJlc3BfaWR4ID09IDApID8gMSA6IDA7CisJQlVHX09OKHByaXYtPnJlc3BfbGVuW2ldKTsKKwlwcml2LT5yZXNwX2xlbltpXSA9IGxlbjsKKwltZW1jcHkocHJpdi0+cmVzcF9idWZbaV0sIGNhcmQtPmNtZF9idWZmZXIsIGxlbik7CisJbGJzX25vdGlmeV9jb21tYW5kX3Jlc3BvbnNlKHByaXYsIGkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBNb3ZlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgaG9zdCAqLworc3RhdGljIGludCBpZl9zcGlfYzJoX2RhdGEoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqZGF0YTsKKwl1MTYgbGVuOworCWludCBlcnIgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwkvKiBIb3cgbWFueSBieXRlcyBhcmUgdGhlcmUgdG8gcmVhZD8gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmICghbGVuKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgeworCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzICVkIGJ5dGVzIG9mIGRhdGEsIGJ1dCAiCisJCQkgICAib3VyIG1heGltdW0gc2tiIHNpemUgaXMgJXVcbiIsCisJCQkgICBfX2Z1bmNfXywgbGVuLCBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRPRE86IHNob3VsZCB3ZSBhbGxvY2F0ZSBhIHNtYWxsZXIgc2tiIGlmIHdlIGhhdmUgbGVzcyBkYXRhPyAqLworCXNrYiA9IGRldl9hbGxvY19za2IoTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpOworCWlmICghc2tiKSB7CisJCWVyciA9IC1FTk9CVUZTOworCQlnb3RvIG91dDsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBJUEZJRUxEX0FMSUdOX09GRlNFVCk7CisJZGF0YSA9IHNrYl9wdXQoc2tiLCBsZW4pOworCisJLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBXTEFOIG1vZHVsZSBpbnRvIG91ciBza2IuLi4gKi8KKwllcnIgPSBzcHVfcmVhZChjYXJkLCBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUcsIGRhdGEsIEFMSUdOKGxlbiwgNCkpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9za2I7CisKKwkvKiBwYXNzIHRoZSBTS0IgdG8gbGliZXJ0YXMgKi8KKwllcnIgPSBsYnNfcHJvY2Vzc19yeGVkX3BhY2tldChjYXJkLT5wcml2LCBza2IpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9za2I7CisKKwkvKiBzdWNjZXNzICovCisJZ290byBvdXQ7CisKK2ZyZWVfc2tiOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBNb3ZlIGRhdGEgb3IgYSBjb21tYW5kIGZyb20gdGhlIGhvc3QgdG8gdGhlIGNhcmQuICovCitzdGF0aWMgdm9pZCBpZl9zcGlfaDJjKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQsIGludCB0eXBlKQoreworCWludCBlcnIgPSAwOworCXUxNiBpbnRfdHlwZSwgcG9ydF9yZWc7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1WTVNfREFUOgorCQlpbnRfdHlwZSA9IElGX1NQSV9DSUNfVFhfRE9XTkxPQURfT1ZFUjsKKwkJcG9ydF9yZWcgPSBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUc7CisJCWJyZWFrOworCWNhc2UgTVZNU19DTUQ6CisJCWludF90eXBlID0gSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUjsKKwkJcG9ydF9yZWcgPSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGJzX3ByX2VycigiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWRcbiIsIHR5cGUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgY2FyZCAqLworCWVyciA9IHNwdV93cml0ZShjYXJkLCBwb3J0X3JlZywgcGFja2V0LT5idWZmZXIsIHBhY2tldC0+Ymxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKK291dDoKKwlrZnJlZShwYWNrZXQpOworCisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKK30KKworLyogSW5mb3JtIHRoZSBob3N0IGFib3V0IGEgY2FyZCBldmVudCAqLworc3RhdGljIHZvaWQgaWZfc3BpX2UyaChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY2F1c2U7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKKworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF8zX1JFRywgJmNhdXNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCWxic19xdWV1ZV9ldmVudChwcml2LCBjYXVzZSAmIDB4ZmYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworfQorCitzdGF0aWMgaW50IGxic19zcGlfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBkYXRhOworCXUxNiBoaVN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQ7CisKKwl3aGlsZSAoMSkgeworCQkvKiBXYWl0IHRvIGJlIHdva2VuIHVwIGJ5IG9uZSBvZiB0d28gdGhpbmdzLiAgRmlyc3QsIG91ciBJU1IKKwkJICogY291bGQgdGVsbCB1cyB0aGF0IHNvbWV0aGluZyBoYXBwZW5lZCBvbiB0aGUgV0xBTi4KKwkJICogU2Vjb25kbHksIGxpYmVydGFzIGNvdWxkIGNhbGwgaHdfaG9zdF90b19jYXJkIHdpdGggbW9yZQorCQkgKiBkYXRhLCB3aGljaCB3ZSBtaWdodCBiZSBhYmxlIHRvIHNlbmQuCisJCSAqLworCQlkbyB7CisJCQllcnIgPSBkb3duX2ludGVycnVwdGlibGUoJmNhcmQtPnNwaV9yZWFkeSk7CisJCQlpZiAoIWNhcmQtPnJ1bl90aHJlYWQpIHsKKwkJCQl1cCgmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkKTsKKwkJCQlkb19leGl0KDApOworCQkJfQorCQl9IHdoaWxlIChlcnIgPT0gRUlOVFIpOworCisJCS8qIFJlYWQgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBzZWUgd2hhdCB3ZQorCQkgKiBjYW4gZG8uICovCisJCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKKwkJCQkJJmhpU3RhdHVzKTsKKwkJaWYgKGVycikgeworCQkJbGJzX3ByX2VycigiSS9PIGVycm9yXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfQ01EX1VQTE9BRF9SRFkpCisJCQllcnIgPSBpZl9zcGlfYzJoX2NtZChjYXJkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX1JYX1VQTE9BRF9SRFkpCisJCQllcnIgPSBpZl9zcGlfYzJoX2RhdGEoY2FyZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyOworCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZKSB7CisJCQkvKiBUaGlzIG1lYW5zIHR3byB0aGluZ3MuIEZpcnN0IG9mIGFsbCwKKwkJCSAqIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGNvbW1hbmQgc2VudCwgdGhlIGNhcmQgaGFzCisJCQkgKiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgaXQuCisJCQkgKiBTZWNvbmRseSwgaXQgaXMgbm93IHJlYWR5IHRvIGRvd25sb2FkIGFub3RoZXIKKwkJCSAqIGNvbW1hbmQuCisJCQkgKi8KKwkJCWxic19ob3N0X3RvX2NhcmRfZG9uZShjYXJkLT5wcml2KTsKKworCQkJLyogRG8gd2UgaGF2ZSBhbnkgY29tbWFuZCBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8KKwkJCSAqIHNlbmQ/ICovCisJCQlwYWNrZXQgPSBOVUxMOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCkpIHsKKwkJCQlwYWNrZXQgPSAoc3RydWN0IGlmX3NwaV9wYWNrZXQgKikoY2FyZC0+CisJCQkJCQljbWRfcGFja2V0X2xpc3QubmV4dCk7CisJCQkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdCk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocGFja2V0KQorCQkJCWlmX3NwaV9oMmMoY2FyZCwgcGFja2V0LCBNVk1TX0NNRCk7CisJCX0KKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfVFhfRE9XTkxPQURfUkRZKSB7CisJCQkvKiBEbyB3ZSBoYXZlIGFueSBkYXRhIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0bworCQkJICogc2VuZD8gKi8KKwkJCXBhY2tldCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCkpIHsKKwkJCQlwYWNrZXQgPSAoc3RydWN0IGlmX3NwaV9wYWNrZXQgKikoY2FyZC0+CisJCQkJCQlkYXRhX3BhY2tldF9saXN0Lm5leHQpOworCQkJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHBhY2tldCkKKwkJCQlpZl9zcGlfaDJjKGNhcmQsIHBhY2tldCwgTVZNU19EQVQpOworCQl9CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX0NBUkRfRVZFTlQpCisJCQlpZl9zcGlfZTJoKGNhcmQpOworCitlcnI6CisJCWlmIChlcnIpCisJCQlsYnNfcHJfZXJyKCIlczogZ290IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwl9Cit9CisKKy8qIEJsb2NrIHVudGlsIGxic19zcGlfdGhyZWFkIHRocmVhZCBoYXMgdGVybWluYXRlZCAqLworc3RhdGljIHZvaWQgaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwkvKiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBrdGhyZWFkX3N0b3AgaGVyZSwgYnV0IHRoYXQgZnVuY3Rpb24KKwkgKiBjYW4ndCB3YWtlIHRocmVhZHMgd2FpdGluZyBmb3IgYSBzZW1hcGhvcmUuICovCisJY2FyZC0+cnVuX3RocmVhZCA9IDA7CisJdXAoJmNhcmQtPnNwaV9yZWFkeSk7CisJZG93bigmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkKTsKK30KKworLyoKKyAqIEhvc3QgdG8gQ2FyZAorICoKKyAqIENhbGxlZCBmcm9tIExpYmVydGFzIHRvIHRyYW5zZmVyIHNvbWUgZGF0YSB0byB0aGUgV0xBTiBkZXZpY2UKKyAqIFdlIGNhbid0IHNsZWVwIGhlcmUuICovCitzdGF0aWMgaW50IGlmX3NwaV9ob3N0X3RvX2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCXU4IHR5cGUsIHU4ICpidWYsIHUxNiBuYikKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CisJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldDsKKwl1MTYgYmxlbjsKKworCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX1NQSSwgInR5cGUgJWQsIGJ5dGVzICVkIiwgdHlwZSwgbmIpOworCisJaWYgKG5iID09IDApIHsKKwkJbGJzX3ByX2VycigiJXM6IGludmFsaWQgc2l6ZSByZXF1ZXN0ZWQ6ICVkXG4iLCBfX2Z1bmNfXywgbmIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJYmxlbiA9IEFMSUdOKG5iLCA0KTsKKwlwYWNrZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWZfc3BpX3BhY2tldCkgKyBibGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXBhY2tldCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJcGFja2V0LT5ibGVuID0gYmxlbjsKKwltZW1jcHkocGFja2V0LT5idWZmZXIsIGJ1ZiwgbmIpOworCW1lbXNldChwYWNrZXQtPmJ1ZmZlciArIG5iLCAwLCBibGVuIC0gbmIpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNVk1TX0NNRDoKKwkJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9DTURfU0VOVDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdCwgJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgTVZNU19EQVQ6CisJCXByaXYtPmRubGRfc2VudCA9IEROTERfREFUQV9TRU5UOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0LCAmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19wcl9lcnIoImNhbid0IHRyYW5zZmVyIGJ1ZmZlciBvZiB0eXBlICVkIiwgdHlwZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCS8qIFdha2UgdXAgdGhlIHNwaSB0aHJlYWQgKi8KKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKK291dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnI9JWQiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBIb3N0IEludGVycnVwdHMKKyAqCisgKiBTZXJ2aWNlIGluY29taW5nIGludGVycnVwdHMgZnJvbSB0aGUgV0xBTiBkZXZpY2UuIFdlIGNhbid0IHNsZWVwIGhlcmUsIHNvCisgKiBkb24ndCB0cnkgdG8gdGFsayBvbiB0aGUgU1BJIGJ1cywganVzdCB3YWtlIHVwIHRoZSBTUEkgdGhyZWFkLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgaWZfc3BpX2hvc3RfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBkZXZfaWQ7CisKKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBTUEkgY2FsbGJhY2tzCisgKi8KKworc3RhdGljIGludCBpZl9zcGlfY2FsY3VsYXRlX2Z3X25hbWVzKHUxNiBjYXJkX2lkLAorCQkJICAgICAgY2hhciAqaGVscGVyX2Z3LCBjaGFyICptYWluX2Z3KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoaXBfaWRfdG9fZGV2aWNlX25hbWUpOyArK2kpIHsKKwkJaWYgKGNhcmRfaWQgPT0gY2hpcF9pZF90b19kZXZpY2VfbmFtZVtpXS5jaGlwX2lkKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUoY2hpcF9pZF90b19kZXZpY2VfbmFtZSkpIHsKKwkJbGJzX3ByX2VycigiVW5zdXBwb3J0ZWQgY2hpcF9pZDogMHglMDJ4XG4iLCBjYXJkX2lkKTsKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisJfQorCXNucHJpbnRmKGhlbHBlcl9mdywgRklSTVdBUkVfTkFNRV9NQVgsICJsaWJlcnRhcy9nc3BpJWRfaGxwLmJpbiIsCisJCSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLm5hbWUpOworCXNucHJpbnRmKG1haW5fZncsIEZJUk1XQVJFX05BTUVfTUFYLCAibGliZXJ0YXMvZ3NwaSVkLmJpbiIsCisJCSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpZl9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQ7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgZXJyID0gMDsKKwl1MzIgc2NyYXRjaDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJaWYgKCFwZGF0YSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRhdGEtPnNldHVwKSB7CisJCWVyciA9IHBkYXRhLT5zZXR1cChzcGkpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogQWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IHRoaXMgc3BlY2lmaWMgZGV2aWNlICovCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZl9zcGlfY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJc3BpX3NldF9kcnZkYXRhKHNwaSwgY2FyZCk7CisJY2FyZC0+cGRhdGEgPSBwZGF0YTsKKwljYXJkLT5zcGkgPSBzcGk7CisJY2FyZC0+Z3Bpb19jcyA9IHBkYXRhLT5ncGlvX2NzOworCWNhcmQtPnByZXZfeGZlcl90aW1lID0gamlmZmllczsKKworCXNlbWFfaW5pdCgmY2FyZC0+c3BpX3JlYWR5LCAwKTsKKwlzZW1hX2luaXQoJmNhcmQtPnNwaV90aHJlYWRfdGVybWluYXRlZCwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5idWZmZXJfbG9jayk7CisKKwkvKiBzZXQgdXAgR1BJTyBDUyBsaW5lLiBUT0RPOiB1c2UgIHJlZ3VsYXIgQ1MgbGluZSAqLworCWVyciA9IGdwaW9fcmVxdWVzdChjYXJkLT5ncGlvX2NzLCAiaWZfc3BpX2dwaW9fY2hpcF9zZWxlY3QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfY2FyZDsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY2FyZC0+Z3Bpb19jcywgMSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisKKwkvKiBJbml0aWFsaXplIHRoZSBTUEkgSW50ZXJmYWNlIFVuaXQgKi8KKwllcnIgPSBzcHVfaW5pdChjYXJkLCBwZGF0YS0+dXNlX2R1bW15X3dyaXRlcyk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisJZXJyID0gc3B1X2dldF9jaGlwX3JldmlzaW9uKGNhcmQsICZjYXJkLT5jYXJkX2lkLCAmY2FyZC0+Y2FyZF9yZXYpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCisJLyogRmlybXdhcmUgbG9hZCAqLworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF80X1JFRywgJnNjcmF0Y2gpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCWlmIChzY3JhdGNoID09IFNVQ0NFU1NGVUxfRldfRE9XTkxPQURfTUFHSUMpCisJCWxic19kZWJfc3BpKCJGaXJtd2FyZSBpcyBhbHJlYWR5IGxvYWRlZCBmb3IgIgorCQkJICAgICJNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIpOworCWVsc2UgeworCQllcnIgPSBpZl9zcGlfY2FsY3VsYXRlX2Z3X25hbWVzKGNhcmQtPmNhcmRfaWQsCisJCQkJY2FyZC0+aGVscGVyX2Z3X25hbWUsIGNhcmQtPm1haW5fZndfbmFtZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKworCQlsYnNfZGViX3NwaSgiSW5pdGlhbGl6aW5nIEZXIGZvciBNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXIgIgorCQkJCSIoY2hpcF9pZCA9IDB4JTA0eCwgY2hpcF9yZXYgPSAweCUwMngpICIKKwkJCQkiYXR0YWNoZWQgdG8gU1BJIGJ1c19udW0gJWQsIGNoaXBfc2VsZWN0ICVkLiAiCisJCQkJInNwaS0+bWF4X3NwZWVkX2h6PSVkXG4iLAorCQkJCWNhcmQtPmNhcmRfaWQsIGNhcmQtPmNhcmRfcmV2LAorCQkJCXNwaS0+bWFzdGVyLT5idXNfbnVtLCBzcGktPmNoaXBfc2VsZWN0LAorCQkJCXNwaS0+bWF4X3NwZWVkX2h6KTsKKwkJZXJyID0gaWZfc3BpX3Byb2dfaGVscGVyX2Zpcm13YXJlKGNhcmQpOworCQlpZiAoZXJyKQorCQkJZ290byBmcmVlX2dwaW87CisJCWVyciA9IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmUoY2FyZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKwkJbGJzX2RlYl9zcGkoImxvYWRlZCBGVyBmb3IgTWFydmVsbCBXTEFOIDgwMi4xMSBhZGFwdGVyXG4iKTsKKwl9CisKKwllcnIgPSBzcHVfc2V0X2ludGVycnVwdF9tb2RlKGNhcmQsIDAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCisJLyogUmVnaXN0ZXIgb3VyIGNhcmQgd2l0aCBsaWJlcnRhcy4KKwkgKiBUaGlzIHdpbGwgY2FsbCBhbGxvY19ldGhlcmRldiAqLworCXByaXYgPSBsYnNfYWRkX2NhcmQoY2FyZCwgJnNwaS0+ZGV2KTsKKwlpZiAoIXByaXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2dwaW87CisJfQorCWNhcmQtPnByaXYgPSBwcml2OworCXByaXYtPmNhcmQgPSBjYXJkOworCXByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGlmX3NwaV9ob3N0X3RvX2NhcmQ7CisJcHJpdi0+ZndfcmVhZHkgPSAxOworCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7CisKKwkvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZyBzdHVmZi4gKi8KKwljYXJkLT5ydW5fdGhyZWFkID0gMTsKKwljYXJkLT5zcGlfdGhyZWFkID0ga3RocmVhZF9ydW4obGJzX3NwaV90aHJlYWQsIGNhcmQsICJsYnNfc3BpX3RocmVhZCIpOworCWlmIChJU19FUlIoY2FyZC0+c3BpX3RocmVhZCkpIHsKKwkJY2FyZC0+cnVuX3RocmVhZCA9IDA7CisJCWVyciA9IFBUUl9FUlIoY2FyZC0+c3BpX3RocmVhZCk7CisJCWxic19wcl9lcnIoImVycm9yIGNyZWF0aW5nIFNQSSB0aHJlYWQ6IGVycj0lZFxuIiwgZXJyKTsKKwkJZ290byByZW1vdmVfY2FyZDsKKwl9CisJZXJyID0gcmVxdWVzdF9pcnEoc3BpLT5pcnEsIGlmX3NwaV9ob3N0X2ludGVycnVwdCwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCAibGliZXJ0YXNfc3BpIiwgY2FyZCk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJjYW4ndCBnZXQgaG9zdCBpcnEgbGluZS0tIHJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CisJCWdvdG8gdGVybWluYXRlX3RocmVhZDsKKwl9CisKKwkvKiBTdGFydCB0aGUgY2FyZC4KKwkgKiBUaGlzIHdpbGwgY2FsbCByZWdpc3Rlcl9uZXRkZXYsIGFuZCB3ZSdsbCBzdGFydAorCSAqIGdldHRpbmcgaW50ZXJydXB0cy4uLiAqLworCWVyciA9IGxic19zdGFydF9jYXJkKHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9pcnE7CisKKwlsYnNfZGViX3NwaSgiRmluaXNoZWQgaW5pdGlhbGl6aW5nIFdMQU4gbW9kdWxlLlxuIik7CisKKwkvKiBzdWNjZXNzZnVsIGV4aXQgKi8KKwlnb3RvIG91dDsKKworcmVsZWFzZV9pcnE6CisJZnJlZV9pcnEoc3BpLT5pcnEsIGNhcmQpOwordGVybWluYXRlX3RocmVhZDoKKwlpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoY2FyZCk7CityZW1vdmVfY2FyZDoKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7IC8qIHdpbGwgY2FsbCBmcmVlX25ldGRldiAqLworZnJlZV9ncGlvOgorCWdwaW9fZnJlZShjYXJkLT5ncGlvX2NzKTsKK2ZyZWVfY2FyZDoKKwlmcmVlX2lmX3NwaV9jYXJkKGNhcmQpOworb3V0OgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaWJlcnRhc19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKKworCWxic19kZWJfc3BpKCJsaWJlcnRhc19zcGlfcmVtb3ZlXG4iKTsKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKwlwcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOworCisJbGJzX3N0b3BfY2FyZChwcml2KTsKKwlmcmVlX2lycShzcGktPmlycSwgY2FyZCk7CisJaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKGNhcmQpOworCWxic19yZW1vdmVfY2FyZChwcml2KTsgLyogd2lsbCBjYWxsIGZyZWVfbmV0ZGV2ICovCisJZ3Bpb19mcmVlKGNhcmQtPmdwaW9fY3MpOworCWlmIChjYXJkLT5wZGF0YS0+dGVhcmRvd24pCisJCWNhcmQtPnBkYXRhLT50ZWFyZG93bihzcGkpOworCWZyZWVfaWZfc3BpX2NhcmQoY2FyZCk7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsaWJlcnRhc19zcGlfZHJpdmVyID0geworCS5wcm9iZQk9IGlmX3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobGliZXJ0YXNfc3BpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibGliZXJ0YXNfc3BpIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisvKgorICogTW9kdWxlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgX19pbml0IGlmX3NwaV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQgPSAwOworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXByaW50ayhLRVJOX0lORk8gImxpYmVydGFzX3NwaTogTGliZXJ0YXMgU1BJIGRyaXZlclxuIik7CisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbGliZXJ0YXNfc3BpX2RyaXZlcik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlmX3NwaV9leGl0X21vZHVsZSh2b2lkKQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbGliZXJ0YXNfc3BpX2RyaXZlcik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7Cit9CisKK21vZHVsZV9pbml0KGlmX3NwaV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChpZl9zcGlfZXhpdF9tb2R1bGUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxpYmVydGFzIFNQSSBXTEFOIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+LCAiCisJICAgICAgIkNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMDM4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqCWxpbnV4L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisgKgorICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFNQSSBXTEFOIGNhcmRzLgorICoKKyAqCUNvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKglBdXRob3JzOgorICoJQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+CisgKglDb2xpbiBNY0NhYmUgPGNvbGluQGNvenliaXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTEJTX0lGX1NQSV9IXworI2RlZmluZSBfTEJTX0lGX1NQSV9IXworCisjZGVmaW5lIElQRklFTERfQUxJR05fT0ZGU0VUIDIKKyNkZWZpbmUgSUZfU1BJX0NNRF9CVUZfU0laRSAyNDAwCisKKy8qKioqKioqKioqKioqKioqKiBGaXJtd2FyZSAqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBjaGlwX2lkZW50IHsKKwl1MTYgY2hpcF9pZDsKKwl1MTYgbmFtZTsKK307CisKKyNkZWZpbmUgTUFYX01BSU5fRldfTE9BRF9DUkNfRVJSIDEwCisKKy8qIENodW5rIHNpemUgd2hlbiBsb2FkaW5nIHRoZSBoZWxwZXIgZmlybXdhcmUgKi8KKyNkZWZpbmUgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1ogNjQKKworLyogVmFsdWUgdG8gd3JpdGUgdG8gaW5kaWNhdGUgZW5kIG9mIGhlbHBlciBmaXJtd2FyZSBkbmxkICovCisjZGVmaW5lIEZJUk1XQVJFX0ROTERfT0sgMHgwMDAwCisKKy8qIFZhbHVlIHRvIGNoZWNrIG9uY2UgdGhlIG1haW4gZmlybXdhcmUgaXMgZG93bmxvYWRlZCAqLworI2RlZmluZSBTVUNDRVNTRlVMX0ZXX0RPV05MT0FEX01BR0lDIDB4ODg4ODg4ODgKKworLyoqKioqKioqKioqKioqKioqIFNQSSBJbnRlcmZhY2UgVW5pdCAqKioqKioqKioqKioqKioqKi8KKy8qIE1hc2tzIHVzZWQgaW4gU1BJIHJlZ2lzdGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBJRl9TUElfUkVBRF9PUEVSQVRJT05fTUFTSyAweDAKKyNkZWZpbmUgSUZfU1BJX1dSSVRFX09QRVJBVElPTl9NQVNLIDB4ODAwMAorCisvKiBTUEkgcmVnaXN0ZXIgb2Zmc2V0cy4gNC1ieXRlIGFsaWduZWQuICovCisjZGVmaW5lIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRyAweDAwCS8qIERldmljZUlEIGNvbnRyb2xsZXIgcmVnICovCisjZGVmaW5lIElGX1NQSV9JT19SRUFEQkFTRV9SRUcgMHgwNCAJLyogUmVhZCBJL08gYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1dSSVRFQkFTRV9SRUcgMHgwOAkvKiBXcml0ZSBJL08gYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1JEV1JQT1JUX1JFRyAweDBDCS8qIFJlYWQvV3JpdGUgSS9PIHBvcnQgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0NNRF9SRUFEQkFTRV9SRUcgMHgxMAkvKiBSZWFkIGNvbW1hbmQgYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0NNRF9XUklURUJBU0VfUkVHIDB4MTQJLyogV3JpdGUgY29tbWFuZCBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRyAweDE4CS8qIFJlYWQvV3JpdGUgY29tbWFuZCBwb3J0IHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9EQVRBX1JFQURCQVNFX1JFRyAweDFDCS8qIFJlYWQgZGF0YSBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfREFUQV9XUklURUJBU0VfUkVHIDB4MjAJLyogV3JpdGUgZGF0YSBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUcgMHgyNAkvKiBSZWFkL1dyaXRlIGRhdGEgcG9ydCByZWcgKi8KKworI2RlZmluZSBJRl9TUElfU0NSQVRDSF8xX1JFRyAweDI4CS8qIFNjcmF0Y2ggcmVnIDEgKi8KKyNkZWZpbmUgSUZfU1BJX1NDUkFUQ0hfMl9SRUcgMHgyQwkvKiBTY3JhdGNoIHJlZyAyICovCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzNfUkVHIDB4MzAJLyogU2NyYXRjaCByZWcgMyAqLworI2RlZmluZSBJRl9TUElfU0NSQVRDSF80X1JFRyAweDM0CS8qIFNjcmF0Y2ggcmVnIDQgKi8KKworI2RlZmluZSBJRl9TUElfVFhfRlJBTUVfU0VRX05VTV9SRUcgMHgzOCAvKiBUeCBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgcmVnICovCisjZGVmaW5lIElGX1NQSV9UWF9GUkFNRV9TVEFUVVNfUkVHIDB4M0MJLyogVHggZnJhbWUgc3RhdHVzIHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAweDQwCS8qIEhvc3QgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAweDQ0CS8qIENhcmQgaW50ZXJydXB0IGNhdXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAweDQ4IC8qIENhcmQgaW50ZXJ1cHQgc3RhdHVzIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfRVZFTlRfTUFTS19SRUcgMHg0QyAvKiBDYXJkIGludGVycnVwdCBldmVudCBtYXNrICovCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfTUFTS19SRUcJMHg1MCAvKiBDYXJkIGludGVycnVwdCBzdGF0dXMgbWFzayAqLworCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9SRVNFVF9TRUxFQ1RfUkVHIDB4NTQgLyogQ2FyZCBpbnRlcnJ1cHQgcmVzZXQgc2VsZWN0ICovCisKKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0NBVVNFX1JFRyAweDU4CS8qIEhvc3QgaW50ZXJydXB0IGNhdXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRyAweDVDCS8qIEhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0VWRU5UX01BU0tfUkVHIDB4NjAgLyogSG9zdCBpbnRlcnJ1cHQgZXZlbnQgbWFzayAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHCTB4NjQgLyogSG9zdCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX1JFU0VUX1NFTEVDVF9SRUcgMHg2OCAvKiBIb3N0IGludGVycnVwdCByZXNldCBzZWxlY3QgKi8KKworI2RlZmluZSBJRl9TUElfREVMQVlfUkVBRF9SRUcgMHg2QwkvKiBEZWxheSByZWFkIHJlZyAqLworI2RlZmluZSBJRl9TUElfU1BVX0JVU19NT0RFX1JFRyAweDcwCS8qIFNQVSBCVVMgbW9kZSByZWcgKi8KKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfSUQoZGMpICgoZGMgJiAweGZmZmYwMDAwKT4+MTYpCisjZGVmaW5lIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX1JFVihkYykgKGRjICYgMHgwMDAwMDBmZikKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdha2UgdXAgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfV0FLRV9VUAkJCQkoMTw8MCkKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdMQU4gcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfV0xBTl9SRUFEWQkJCQkoMTw8MSkKKy8qI2RlZmluZSBJRl9TUElfSElDVF9GSUZPX0ZJUlNUX0hBTEZfRU1QVFkJCSgxPDwyKSAqLworLyojZGVmaW5lIElGX1NQSV9ISUNUX0ZJRk9fU0VDT05EX0hBTEZfRU1QVFkJCSgxPDwzKSAqLworLyojZGVmaW5lIElGX1NQSV9ISUNUX0lSUVNSQ19XTEFOCQkJKDE8PDQpICovCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBUeCBhdXRvIGRvd25sb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX1RYX0RPV05MT0FEX09WRVJfQVVUTwkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBSeCBhdXRvIHVwbG9hZCAqLworI2RlZmluZSBJRl9TUElfSElDVF9SWF9VUExPQURfT1ZFUl9BVVRPCQkJKDE8PDYpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gZG93bmxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfQ01EX0RPV05MT0FEX09WRVJfQVVUTwkJKDE8PDcpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gdXBsb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX0NNRF9VUExPQURfT1ZFUl9BVVRPCQkoMTw8OCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcgKioqKioqKioqKioqKioqKiovCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBUeCBkb3dubG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfVFhfRE9XTkxPQURfT1ZFUgkJCSgxPDwwKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUnggdXBsb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19SWF9VUExPQURfT1ZFUgkJCSgxPDwxKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCBkb3dubG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfQ01EX0RPV05MT0FEX09WRVIJCQkoMTw8MikKKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IEhvc3QgZXZlbnQgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19IT1NUX0VWRU5UCQkJCSgxPDwzKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCB1cGxvYWQgb3ZlciAqLworI2RlZmluZSBJRl9TUElfQ0lDX0NNRF9VUExPQURfT1ZFUgkJCSgxPDw0KQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUG93ZXIgZG93biAqLworI2RlZmluZSBJRl9TUElfQ0lDX1BPV0VSX0RPV04JCQkJKDE8PDUpCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0NJU19UWF9ET1dOTE9BRF9PVkVSCQkJKDE8PDApCisjZGVmaW5lIElGX1NQSV9DSVNfUlhfVVBMT0FEX09WRVIJCQkoMTw8MSkKKyNkZWZpbmUgSUZfU1BJX0NJU19DTURfRE9XTkxPQURfT1ZFUgkJCSgxPDwyKQorI2RlZmluZSBJRl9TUElfQ0lTX0hPU1RfRVZFTlQJCQkJKDE8PDMpCisjZGVmaW5lIElGX1NQSV9DSVNfQ01EX1VQTE9BRF9PVkVSCQkJKDE8PDQpCisjZGVmaW5lIElGX1NQSV9DSVNfUE9XRVJfRE9XTgkJCQkoMTw8NSkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9DQVVTRV9SRUcgKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElGX1NQSV9ISUNVX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorI2RlZmluZSBJRl9TUElfSElDVV9SWF9VUExPQURfUkRZCQkJKDE8PDEpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9ET1dOTE9BRF9SRFkJCQkoMTw8MikKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ0FSRF9FVkVOVAkJCQkoMTw8MykKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX1VQTE9BRF9SRFkJCQkoMTw8NCkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQorI2RlZmluZSBJRl9TUElfSElDVV9JT19SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDYpCisjZGVmaW5lIElGX1NQSV9ISUNVX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCisjZGVmaW5lIElGX1NQSV9ISUNVX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorI2RlZmluZSBJRl9TUElfSElDVV9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcgKioqKioqKioqKioqKioqKiovCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IFR4IGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkJCQkoMTw8MikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ2FyZCBldmVudCAqLworI2RlZmluZSBJRl9TUElfSElTVF9DQVJEX0VWRU5UCQkJCSgxPDwzKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTVF9DTURfVVBMT0FEX1JEWQkJCSgxPDw0KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBJL08gd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0lPX1JEX0ZJRk9fVU5EUkZMT1cJCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IERhdGEgcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9EQVRBX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8OCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9UWF9ET1dOTE9BRF9SRFkJCQkoMTw8MCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENhcmQgZXZlbnQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ0FSREVWRU5UCQkJCSgxPDwzKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0lPX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfUkRfRklGT19VTkRFUkZMT1cJCSgxPDwxMCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9TUFVfQlVTX01PREVfUkVHICoqKioqKioqKioqKioqKioqLworLyogU0NLIGVkZ2Ugb24gd2hpY2ggdGhlIFdMQU4gbW9kdWxlIG91dHB1dHMgZGF0YSBvbiBNSVNPICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfRkFMTElORyAweDgKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgMHgwCisKKy8qIEluIGEgU1BVIHJlYWQgb3BlcmF0aW9uLCB0aGVyZSBpcyBhIGRlbGF5IGJldHdlZW4gd3JpdGluZyB0aGUgU1BVCisgKiByZWdpc3RlciBuYW1lIGFuZCBnZXR0aW5nIGJhY2sgZGF0YSBmcm9tIHRoZSBXTEFOIG1vZHVsZS4KKyAqIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBuYW5vc2Vjb25kcyBvciBpbiB0ZXJtcyBvZiBkdW1teQorICogY2xvY2sgY3ljbGVzIHdoaWNoIHRoZSBtYXN0ZXIgbXVzdCBvdXRwdXQgYmVmb3JlIHJlY2VpdmluZyBhIHJlc3BvbnNlLiAqLworI2RlZmluZSBJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX0RVTU1ZX0NMT0NLIDB4NAorI2RlZmluZSBJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX1RJTUVEIDB4MAorCisvKiBTb21lIGRpZmZlcmVudCBtb2RlcyBvZiBTUEkgb3BlcmF0aW9uICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV84X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBIDB4MDAKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFXzhfQklUX0FERFJFU1NfMzJfQklUX0RBVEEgMHgwMQorI2RlZmluZSBJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMTZfQklUX0RBVEEgMHgwMgorI2RlZmluZSBJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMzJfQklUX0RBVEEgMHgwMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwppbmRleCBmNzY2MjNlLi44YWU5MzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCkBAIC01ODIsMjAgKzU4Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfaG9zdF90b19jYXJkX2RvbmUpOwogCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXR3b3JrIHN0YXRpc3RpY3MKLSAqCi0gKiAgQHBhcmFtIGRldiAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICBBIHBvaW50ZXIgdG8gbmV0X2RldmljZV9zdGF0cyBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYnNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX05FVCk7Ci0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQogc3RhdGljIGludCBsYnNfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMDA2LDkgKzk5Miw4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfcmVzdW1lKTsKIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIGZpcm13YXJlIGltYWdlLCBnZXRzCi0gKiAgSFcgc3BlYyBmcm9tIGZpcm13YXJlIGFuZCBzZXQgYmFzaWMgcGFyYW1ldGVycyB0bwotICogIGZpcm13YXJlLgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgSFcgc3BlYyBmcm9tIHRoZSBmaXJtd2FyZSBhbmQgc2V0cworICogICAgICAgIHNvbWUgYmFzaWMgcGFyYW1ldGVycy4KICAqCiAgKiAgQHBhcmFtIHByaXYgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqICBAcmV0dXJuIAkgICAwIG9yIC0xCkBAIC0xMTYzLDYgKzExNDgsMTcgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGJzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBsYnNfZGV2X29wZW4sCisJLm5kb19zdG9wCQk9IGxic19ldGhfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGJzX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGxic19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb190eF90aW1lb3V0IAk9IGxic190eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGNhcmQuIGl0IHdpbGwgcHJvYmUgdGhlCiAgKiBjYXJkLCBhbGxvY2F0ZSB0aGUgbGJzX3ByaXYgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZS4KQEAgLTExOTcsMTkgKzExOTMsMTMgQEAKIAlwcml2LT5pbmZyYV9vcGVuID0gMDsKIAogCS8qIFNldHVwIHRoZSBPUyBJbnRlcmZhY2UgdG8gb3VyIGZ1bmN0aW9ucyAqLwotCWRldi0+b3BlbiA9IGxic19kZXZfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gbGJzX2V0aF9zdG9wOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gbGJzX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPnR4X3RpbWVvdXQgPSBsYnNfdHhfdGltZW91dDsKLQlkZXYtPmdldF9zdGF0cyA9IGxic19nZXRfc3RhdHM7CisgCWRldi0+bmV0ZGV2X29wcyA9ICZsYnNfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbGJzX2V0aHRvb2xfb3BzOwogI2lmZGVmCVdJUkVMRVNTX0VYVAotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJmxic19oYW5kbGVyX2RlZjsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmxic19oYW5kbGVyX2RlZjsKICNlbmRpZgogCWRldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0OwogCiAJU0VUX05FVERFVl9ERVYoZGV2LCBkbWRldik7CiAKQEAgLTE0MTksNiArMTQwOSwxNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3N0b3BfY2FyZCk7CiAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtZXNoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxic19kZXZfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGxic19tZXNoX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGxic19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBsYnNfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKIC8qKgogICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWRkcyBtc2hYIGludGVyZmFjZQogICoKQEAgLTE0NDEsMTEgKzE0MzksNyBAQAogCW1lc2hfZGV2LT5tbF9wcml2ID0gcHJpdjsKIAlwcml2LT5tZXNoX2RldiA9IG1lc2hfZGV2OwogCi0JbWVzaF9kZXYtPm9wZW4gPSBsYnNfZGV2X29wZW47Ci0JbWVzaF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19oYXJkX3N0YXJ0X3htaXQ7Ci0JbWVzaF9kZXYtPnN0b3AgPSBsYnNfbWVzaF9zdG9wOwotCW1lc2hfZGV2LT5nZXRfc3RhdHMgPSBsYnNfZ2V0X3N0YXRzOwotCW1lc2hfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYnNfc2V0X21hY19hZGRyZXNzOworCW1lc2hfZGV2LT5uZXRkZXZfb3BzID0gJm1lc2hfbmV0ZGV2X29wczsKIAltZXNoX2Rldi0+ZXRodG9vbF9vcHMgPSAmbGJzX2V0aHRvb2xfb3BzOwogCW1lbWNweShtZXNoX2Rldi0+ZGV2X2FkZHIsIHByaXYtPmRldi0+ZGV2X2FkZHIsCiAJCQlzaXplb2YocHJpdi0+ZGV2LT5kZXZfYWRkcikpOwpAQCAtMTQ1Niw3ICsxNDUwLDYgQEAKIAltZXNoX2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm1lc2hfaGFuZGxlcl9kZWY7CiAjZW5kaWYKIAltZXNoX2Rldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7Ci0JbWVzaF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJLyogUmVnaXN0ZXIgdmlydHVhbCBtZXNoIGludGVyZmFjZSAqLwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihtZXNoX2Rldik7CiAJaWYgKHJldCkgewpAQCAtMTY0OSwxNCArMTY0Miw2IEBACiAJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxic19ydGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi0KIHN0YXRpYyB2b2lkIGxic19yZW1vdmVfcnRhcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwpAQCAtMTY2OSw2ICsxNjU0LDEyIEBACiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0YXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBsYnNfcnRhcF9vcGVuLAorCS5uZG9fc3RvcCA9IGxic19ydGFwX3N0b3AsCisJLm5kb19zdGFydF94bWl0ID0gbGJzX3J0YXBfaGFyZF9zdGFydF94bWl0LAorfTsKKwogc3RhdGljIGludCBsYnNfYWRkX3J0YXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCWludCByZXQgPSAwOwpAQCAtMTY4OCwxMCArMTY3OSw3IEBACiAKIAltZW1jcHkocnRhcF9kZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyZW50X2FkZHIsIEVUSF9BTEVOKTsKIAlydGFwX2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7Ci0JcnRhcF9kZXYtPm9wZW4gPSBsYnNfcnRhcF9vcGVuOwotCXJ0YXBfZGV2LT5zdG9wID0gbGJzX3J0YXBfc3RvcDsKLQlydGFwX2Rldi0+Z2V0X3N0YXRzID0gbGJzX3J0YXBfZ2V0X3N0YXRzOwotCXJ0YXBfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQ7CisJcnRhcF9kZXYtPm5ldGRldl9vcHMgPSAmcnRhcF9uZXRkZXZfb3BzOwogCXJ0YXBfZGV2LT5tbF9wcml2ID0gcHJpdjsKIAlTRVRfTkVUREVWX0RFVihydGFwX2RldiwgcHJpdi0+ZGV2LT5kZXYucGFyZW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKaW5kZXggMDc5ZTZhYS4uNGY2MDk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IChFVEhfSExFTiArIDggKyBzaXplb2Yoc3RydWN0IHJ4cGQpKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIGxlbmd0aFxuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldCA9IDA7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNzksNyArMTc5LDcgQEAKIAlpZiAoIShwX3J4X3BkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIHN0YXR1c1xuIik7CiAJCWxic19wcl9hbGVydCgicnhwZCBub3Qgb2tcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0ID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTI0Myw4ICsyNDMsOCBAQAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcF9yeF9wZCk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJaWYgKGluX2ludGVycnVwdCgpKQpAQCAtMzExLDcgKzMxMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0ID0gMDsKLQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CiAJc3RydWN0IHJ4ODAyMTFwYWNrZXRoZHIgKnBfcnhfcGt0OwogCXN0cnVjdCByeHBkICpwcnhwZDsKIAlzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyIHJhZGlvdGFwX2hkcjsKQEAgLTMyNiw3ICszMjYsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgKEVUSF9ITEVOICsgOCArIHNpemVvZihzdHJ1Y3QgcnhwZCkpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgbGVuZ3RoXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZG9uZTsKQEAgLTMzNyw3ICszMzcsNyBAQAogCSAqLwogCWlmICghKHByeHBkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQkvL2xic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgc3RhdHVzXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJfQogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2tiLT5sZW4tc2l6ZW9mKFJ4UGQpID0gJWQtJXpkID0gJXpkXG4iLApAQCAtMzg5LDggKzM4OSw4IEBACiAJbGJzX2NvbXB1dGVfcnNzaShwcml2LCBwcnhwZCk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHByaXYtPnJ0YXBfbmV0X2Rldik7CiAJbmV0aWZfcngoc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwppbmRleCA5MDE0OTUwLi44MTI0ZGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCkBAIC02OTIsNyArNjkyLDcgQEAKIAkJCQkJICAgIGJzcy0+d3BhX2llX2xlbik7CiAJCQl9IGVsc2UgaWYgKHBvc1sxXSA+PSBNQVJWRUxMX01FU0hfSUVfTEVOR1RIICYmCiAJCQkJICAgcG9zWzJdID09IDB4MDAgJiYgcG9zWzNdID09IDB4NTAgJiYKLQkJCQkgICBwb3NbNF0gPT0gMHg0MyAmJiBwb3NbNF0gPT0gMHgwNCkgeworCQkJCSAgIHBvc1s0XSA9PSAweDQzICYmIHBvc1s1XSA9PSAweDA0KSB7CiAJCQkJbGJzX2RlYl9zY2FuKCJnb3QgbWVzaCBJRVxuIik7CiAJCQkJYnNzLT5tZXNoID0gMTsKIAkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwppbmRleCA2OGJlYzMxLi5mMTBhYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKQEAgLTgyLDggKzgyLDggQEAKIAkJICAgICAgIHNrYi0+bGVuLCBNUlZEUlZfRVRIX1RYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CiAJCS8qIFdlJ2xsIG5ldmVyIG1hbmFnZSB0byBzZW5kIHRoaXMgb25lOyBkcm9wIGl0IGFuZCByZXR1cm4gJ09LJyAqLwogCi0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlnb3RvIGZyZWU7CiAJfQogCkBAIC0xNDYsOCArMTQ2LDggQEAKIAogCWxic19kZWJfdHgoIiVzIGxpbmVkIHVwIHBhY2tldFxuIiwgX19mdW5jX18pOwogCi0JcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCmluZGV4IGYxNmQxMzYuLjhiYzE5MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC04MzAsNyArODMwLDcgQEAKIAlxdWFsaXR5ID0gcnNzaV9xdWFsOwogCiAJLyogUXVhbGl0eSBieSBUWCBlcnJvcnMgKi8KLQlwcml2LT53c3RhdHMuZGlzY2FyZC5yZXRyaWVzID0gcHJpdi0+c3RhdHMudHhfZXJyb3JzOworCXByaXYtPndzdGF0cy5kaXNjYXJkLnJldHJpZXMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKIAogCW1lbXNldCgmbG9nLCAwLCBzaXplb2YobG9nKSk7CiAJbG9nLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGxvZykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9jbWQuYwppbmRleCAzZDM5MTRjLi4yODc5MGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9jbWQuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJbGJ0Zl9jbWRfYXN5bmMocHJpdiwgQ01EXzgwMl8xMV9TRVRfTU9ERSwgJmNtZC5oZHIsIHNpemVvZihjbWQpKTsKIH0KIAotdm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCB1OCAqYnNzaWQpCit2b2lkIGxidGZfc2V0X2Jzc2lkKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIGJvb2wgYWN0aXZhdGUsIGNvbnN0IHU4ICpic3NpZCkKIHsKIAlzdHJ1Y3QgY21kX2RzX3NldF9ic3NpZCBjbWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oCmluZGV4IDg5OTVjZDcuLjRjYzQyZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaApAQCAtNDYzLDcgKzQ2Myw3IEBACiBpbnQgbGJ0Zl91cGRhdGVfaHdfc3BlYyhzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2KTsKIGludCBsYnRmX2NtZF9zZXRfbWFjX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYpOwogdm9pZCBsYnRmX3NldF9tb2RlKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIGVudW0gbGJ0Zl9tb2RlIG1vZGUpOwotdm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCB1OCAqYnNzaWQpOwordm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCBjb25zdCB1OCAqYnNzaWQpOwogaW50IGxidGZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIHVpbnQ4X3QgKm1hY19hZGRyKTsKIAogaW50IGxidGZfc2V0X2NoYW5uZWwoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgdTggY2hhbm5lbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwppbmRleCBmODNkNjllLi4yMzY4YjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKQEAgLTEwLDcgKzEwLDYgQEAKIC8qCiAgKiBUT0RPOgogICogLSBJQlNTIG1vZGUgc2ltdWxhdGlvbiAoQmVhY29uIHRyYW5zbWlzc2lvbiB3aXRoIGNvbXBldGl0aW9uIGZvciAiYWlyIHRpbWUiKQotICogLSBJRUVFIDgwMi4xMWEgYW5kIDgwMi4xMW4gbW9kZXMKICAqIC0gUlggZmlsdGVyaW5nIGJhc2VkIG9uIGZpbHRlciBjb25maWd1cmF0aW9uIChkYXRhLT5yeF9maWx0ZXIpCiAgKi8KIApAQCAtMzEsNiArMzAsMTEyIEBACiBtb2R1bGVfcGFyYW0ocmFkaW9zLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyYWRpb3MsICJOdW1iZXIgb2Ygc2ltdWxhdGVkIHJhZGlvcyIpOwogCisvKioKKyAqIGVudW0gaHdzaW1fcmVndGVzdCAtIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgdGVzdHMgd2Ugb2ZmZXIKKyAqCisgKiBUaGVzZSBhcmUgdGhlIGRpZmZlcmVudCB2YWx1ZXMgeW91IGNhbiB1c2UgZm9yIHRoZSByZWd0ZXN0CisgKiBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGlzIHVzZWZ1bCB0byBoZWxwIHRlc3Qgd29ybGQgcm9hbWluZworICogYW5kIHRoZSBkcml2ZXIgcmVndWxhdG9yeV9oaW50KCkgY2FsbCBhbmQgY29tYmluYXRpb25zIG9mIHRoZXNlLgorICogSWYgeW91IHdhbnQgdG8gZG8gc3BlY2lmaWMgYWxwaGEyIHJlZ3VsYXRvcnkgZG9tYWluIHRlc3RzIHNpbXBseQorICogdXNlIHRoZSB1c2Vyc3BhY2UgcmVndWxhdG9yeSByZXF1ZXN0IGFzIHRoYXQgd2lsbCBiZSByZXNwZWN0ZWQgYXMKKyAqIHdlbGwgd2l0aG91dCB0aGUgbmVlZCBvZiB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIuIFRoaXMgaXMgZGVzaWduZWQKKyAqIG9ubHkgZm9yIHRlc3RpbmcgdGhlIGRyaXZlciByZWd1bGF0b3J5IHJlcXVlc3QsIHdvcmxkIHJvYW1pbmcKKyAqIGFuZCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zLgorICoKKyAqIEBIV1NJTV9SRUdURVNUX0RJU0FCTEVEOiBObyByZWd1bGF0b3J5IHRlc3RzIGFyZSBwZXJmb3JtZWQsCisgKiAJdGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqIEBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBkcml2ZXIgcmVndWxhdG9yeQorICoJaGludCwgb25seSBvbmUgZHJpdmVyIHJlZ3VsYXRvcnkgaGludCB3aWxsIGJlIHNlbnQgYXMgc3VjaCB0aGUKKyAqIAlzZWNvbmRhcnkgcmFkaW9zIGFyZSBleHBlY3RlZCB0byBmb2xsb3cuCisgKiBASFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTDogVXNlZCBmb3IgdGVzdGluZyB0aGUgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqIAlyZXF1ZXN0IHdpdGggYWxsIHJhZGlvcyByZXBvcnRpbmcgdGhlIHNhbWUgcmVndWxhdG9yeSBkb21haW4uCisgKiBASFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGRyaXZlcnMgY2FsbGluZworICogCWRpZmZlcmVudCByZWd1bGF0b3J5IGRvbWFpbnMgcmVxdWVzdHMuIEV4cGVjdGVkIGJlaGF2aW91ciBpcyBmb3IKKyAqIAlhbiBpbnRlcnNlY3Rpb24gdG8gb2NjdXIgYnV0IGVhY2ggZGV2aWNlIHdpbGwgc3RpbGwgdXNlIHRoZWlyCisgKiAJcmVzcGVjdGl2ZSByZWd1bGF0b3J5IHJlcXVlc3RlZCBkb21haW5zLiBTdWJzZXF1ZW50IHJhZGlvcyB3aWxsCisgKiAJdXNlIHRoZSByZXN1bHRpbmcgaW50ZXJzZWN0aW9uLgorICogQEhXU0lNX1JFR1RFU1RfV09STERfUk9BTTogVXNlZCBmb3IgdGVzdGluZyB0aGUgd29ybGQgcm9hbWluZy4gV2UgYWNvbXBsaXNoCisgKgl0aGlzIGJ5IHVzaW5nIGEgY3VzdG9tIGJlYWNvbi1jYXBhYmxlIHJlZ3VsYXRvcnkgZG9tYWluIGZvciB0aGUgZmlyc3QKKyAqCXJhZGlvLiBBbGwgb3RoZXIgZGV2aWNlIHdvcmxkIHJvYW0uCisgKiBASFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQ6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluIHJlcXVlc3RzLiBBbGwgcmFkaW9zIHdpbGwgYWRoZXJlIHRvIHRoaXMgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBASFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMjogVXNlZCBmb3IgdGVzdGluZyAyIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluIHJlcXVlc3RzLiBUaGUgZmlyc3QgcmFkaW8gd2lsbCBhZGhlcmUgdG8gdGhlIGZpcnN0IGN1c3RvbSB3b3JsZAorICogCXJlZ3VsYXRvcnkgZG9tYWluLCB0aGUgc2Vjb25kIG9uZSB0byB0aGUgc2Vjb25kIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluLiBBbGwgb3RoZXIgZGV2aWNlcyB3aWxsIHdvcmxkIHJvYW0uCisgKiBASFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XXzogVXNlZCBmb3IgdGVzdGluZyBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4KKyAqCXNldHRpbmdzLCBvbmx5IHRoZSBmaXJzdCByYWRpbyB3aWxsIHNlbmQgYSByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0CisgKglhbmQgdXNlIHN0cmljdCBzZXR0aW5ncy4gVGhlIHJlc3Qgb2YgdGhlIHJhZGlvcyBhcmUgZXhwZWN0ZWQgdG8gZm9sbG93LgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTDogVXNlZCBmb3IgdGVzdGluZyBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4KKyAqCXNldHRpbmdzLiBBbGwgcmFkaW9zIHdpbGwgYWRoZXJlIHRvIHRoaXMuCisgKiBASFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkKKyAqCWRvbWFpbiBzZXR0aW5ncywgY29tYmluZWQgd2l0aCBzZWNvbmRhcnkgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncy4gVGhlIGZpcnN0IHJhZGlvIHdpbGwgZ2V0IGEgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmcKKyAqCXVzaW5nIHRoZSBmaXJzdCBkcml2ZXIgcmVndWxhdG9yeSByZXF1ZXN0IGFuZCB0aGUgc2Vjb25kIHJhZGlvIHdpbGwgdXNlCisgKglub24tc3RyaWN0IHNldHRpbmdzIHVzaW5nIHRoZSBzZWNvbmQgZHJpdmVyIHJlZ3VsYXRvcnkgcmVxdWVzdC4gQWxsCisgKglvdGhlciBkZXZpY2VzIHNob3VsZCBmb2xsb3cgdGhlIGludGVyc2VjdGlvbiBjcmVhdGVkIGJldHdlZW4gdGhlCisgKglmaXJzdCB0d28uCisgKiBASFdTSU1fUkVHVEVTVF9BTEw6IFVzZWQgZm9yIHRlc3RpbmcgZXZlcnkgcG9zc2libGUgbWl4LiBZb3Ugd2lsbCBuZWVkCisgKiAJYXQgbGVhc3QgNiByYWRpb3MgZm9yIGEgY29tcGxldGUgdGVzdC4gV2Ugd2lsbCB0ZXN0IGluIHRoaXMgb3JkZXI6CisgKiAJMSAtIGRyaXZlciBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4KKyAqIAkyIC0gc2Vjb25kIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbgorICogCTMgLSBmaXJzdCBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdAorICogCTQgLSBzZWNvbmQgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3QKKyAqIAk1IC0gc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHVzaW5nIHRoZSB0aGlyZCBkcml2ZXIgcmVndWxhdG9yeQorICogCSAgICBkb21haW4gcmVxdWVzdAorICogCTYgYW5kIG9uIC0gc2hvdWxkIGZvbGxvdyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSAzcmQsIDRydGggYW5kIDV0aCByYWRpbworICogCSAgICAgICAgICAgcmVndWxhdG9yeSByZXF1ZXN0cy4KKyAqLworZW51bSBod3NpbV9yZWd0ZXN0IHsKKwlIV1NJTV9SRUdURVNUX0RJU0FCTEVEID0gMCwKKwlIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XID0gMSwKKwlIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMID0gMiwKKwlIV1NJTV9SRUdURVNUX0RJRkZfQ09VTlRSWSA9IDMsCisJSFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNID0gNCwKKwlIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRCA9IDUsCisJSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMiA9IDYsCisJSFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XID0gNywKKwlIV1NJTV9SRUdURVNUX1NUUklDVF9BTEwgPSA4LAorCUhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHID0gOSwKKwlIV1NJTV9SRUdURVNUX0FMTCA9IDEwLAorfTsKKworLyogU2V0IHRvIG9uZSBvZiB0aGUgSFdTSU1fUkVHVEVTVF8qIHZhbHVlcyBhYm92ZSAqLworc3RhdGljIGludCByZWd0ZXN0ID0gSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDsKK21vZHVsZV9wYXJhbShyZWd0ZXN0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZWd0ZXN0LCAiVGhlIHR5cGUgb2YgcmVndWxhdG9yeSB0ZXN0IHdlIHdhbnQgdG8gcnVuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpod3NpbV9hbHBoYTJzW10gPSB7CisJIkZJIiwKKwkiQUwiLAorCSJVUyIsCisJIkRFIiwKKwkiSlAiLAorCSJBTCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSA9IHsKKwkubl9yZWdfcnVsZXMgPSA0LAorCS5hbHBoYTIgPSAgIjk5IiwKKwkucmVnX3J1bGVzID0geworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSg1MTUwLTEwLCA1MjQwKzEwLCA0MCwgMCwgMzAsIDApLAorCQlSRUdfUlVMRSg1NzQ1LTEwLCA1ODI1KzEwLCA0MCwgMCwgMzAsIDApLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAyID0geworCS5uX3JlZ19ydWxlcyA9IDIsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCAwLCAyMCwgMCksCisJCVJFR19SVUxFKDU3MjUtMTAsIDU4NTArMTAsIDQwLCAwLCAzMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IE5MODAyMTFfUlJGX05PX0lCU1MpLAorCX0KK307CisKIHN0cnVjdCBod3NpbV92aWZfcHJpdiB7CiAJdTMyIG1hZ2ljOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKQEAgLTg2LDIyICsxOTEsNjUgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpod3NpbV9tb247IC8qIGdsb2JhbCBtb25pdG9yIG5ldGRldiAqLwogCisjZGVmaW5lIENIQU4yRyhfZnJlcSkgIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2ZyZXEpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgaHdzaW1fY2hhbm5lbHNbXSA9IHsKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjcgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NzIgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0ODQgfSwKKyNkZWZpbmUgQ0hBTjVHKF9mcmVxKSB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9mcmVxKSwgXAorCS5tYXhfcG93ZXIgPSAyMCwgXAorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzXzJnaHpbXSA9IHsKKwlDSEFOMkcoMjQxMiksIC8qIENoYW5uZWwgMSAqLworCUNIQU4yRygyNDE3KSwgLyogQ2hhbm5lbCAyICovCisJQ0hBTjJHKDI0MjIpLCAvKiBDaGFubmVsIDMgKi8KKwlDSEFOMkcoMjQyNyksIC8qIENoYW5uZWwgNCAqLworCUNIQU4yRygyNDMyKSwgLyogQ2hhbm5lbCA1ICovCisJQ0hBTjJHKDI0MzcpLCAvKiBDaGFubmVsIDYgKi8KKwlDSEFOMkcoMjQ0MiksIC8qIENoYW5uZWwgNyAqLworCUNIQU4yRygyNDQ3KSwgLyogQ2hhbm5lbCA4ICovCisJQ0hBTjJHKDI0NTIpLCAvKiBDaGFubmVsIDkgKi8KKwlDSEFOMkcoMjQ1NyksIC8qIENoYW5uZWwgMTAgKi8KKwlDSEFOMkcoMjQ2MiksIC8qIENoYW5uZWwgMTEgKi8KKwlDSEFOMkcoMjQ2NyksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiksIC8qIENoYW5uZWwgMTMgKi8KKwlDSEFOMkcoMjQ4NCksIC8qIENoYW5uZWwgMTQgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgaHdzaW1fY2hhbm5lbHNfNWdoeltdID0geworCUNIQU41Ryg1MTgwKSwgLyogQ2hhbm5lbCAzNiAqLworCUNIQU41Ryg1MjAwKSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwKSwgLyogQ2hhbm5lbCA0NCAqLworCUNIQU41Ryg1MjQwKSwgLyogQ2hhbm5lbCA0OCAqLworCisJQ0hBTjVHKDUyNjApLCAvKiBDaGFubmVsIDUyICovCisJQ0hBTjVHKDUyODApLCAvKiBDaGFubmVsIDU2ICovCisJQ0hBTjVHKDUzMDApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjApLCAvKiBDaGFubmVsIDY0ICovCisKKwlDSEFONUcoNTUwMCksIC8qIENoYW5uZWwgMTAwICovCisJQ0hBTjVHKDU1MjApLCAvKiBDaGFubmVsIDEwNCAqLworCUNIQU41Ryg1NTQwKSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCksIC8qIENoYW5uZWwgMTEyICovCisJQ0hBTjVHKDU1ODApLCAvKiBDaGFubmVsIDExNiAqLworCUNIQU41Ryg1NjAwKSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCksIC8qIENoYW5uZWwgMTI0ICovCisJQ0hBTjVHKDU2NDApLCAvKiBDaGFubmVsIDEyOCAqLworCUNIQU41Ryg1NjYwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCksIC8qIENoYW5uZWwgMTM2ICovCisJQ0hBTjVHKDU3MDApLCAvKiBDaGFubmVsIDE0MCAqLworCisJQ0hBTjVHKDU3NDUpLCAvKiBDaGFubmVsIDE0OSAqLworCUNIQU41Ryg1NzY1KSwgLyogQ2hhbm5lbCAxNTMgKi8KKwlDSEFONUcoNTc4NSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUpLCAvKiBDaGFubmVsIDE2MSAqLworCUNIQU41Ryg1ODI1KSwgLyogQ2hhbm5lbCAxNjUgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgaHdzaW1fcmF0ZXNbXSA9IHsKQEAgLTEyNiw4ICsyNzQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKV07CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kc1syXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfMmdoeltBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzJnaHopXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfNWdoeltBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzVnaHopXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbQVJSQVlfU0laRShod3NpbV9yYXRlcyldOwogCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwpAQCAtNTkwLDEwICs3MzksMTYgQEAKIAkubmFtZSA9ICJtYWM4MDIxMV9od3NpbSIKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHdzaW1fbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgCT0gaHdzaW1fbW9uX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIHN0YXRpYyB2b2lkIGh3c2ltX21vbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaHdzaW1fbW9uX3htaXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmh3c2ltX25ldGRldl9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CiAJZXRoZXJfc2V0dXAoZGV2KTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CkBAIC03MjgsNiArODgzLDcgQEAKIAl1OCBhZGRyW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKIAlpZiAocmFkaW9zIDwgMSB8fCByYWRpb3MgPiAxMDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc5LDI5ICs5MzUsMTExIEBACiAJCQlCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7CiAJCWh3LT5hbXBkdV9xdWV1ZXMgPSAxOwogCisJCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRTsKKwogCQkvKiBhc2sgbWFjODAyMTEgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbWFnaWMgKi8KIAkJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGh3c2ltX3ZpZl9wcml2KTsKIAkJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGh3c2ltX3N0YV9wcml2KTsKIAotCQltZW1jcHkoZGF0YS0+Y2hhbm5lbHMsIGh3c2ltX2NoYW5uZWxzLCBzaXplb2YoaHdzaW1fY2hhbm5lbHMpKTsKKwkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzXzJnaHosIGh3c2ltX2NoYW5uZWxzXzJnaHosCisJCQlzaXplb2YoaHdzaW1fY2hhbm5lbHNfMmdoeikpOworCQltZW1jcHkoZGF0YS0+Y2hhbm5lbHNfNWdoeiwgaHdzaW1fY2hhbm5lbHNfNWdoeiwKKwkJCXNpemVvZihod3NpbV9jaGFubmVsc181Z2h6KSk7CiAJCW1lbWNweShkYXRhLT5yYXRlcywgaHdzaW1fcmF0ZXMsIHNpemVvZihod3NpbV9yYXRlcykpOwotCQlkYXRhLT5iYW5kLmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHM7Ci0JCWRhdGEtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHMpOwotCQlkYXRhLT5iYW5kLmJpdHJhdGVzID0gZGF0YS0+cmF0ZXM7Ci0JCWRhdGEtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoaHdzaW1fcmF0ZXMpOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5odF9zdXBwb3J0ZWQgPSB0cnVlOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8Ci0JCQlJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDA7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmFtcGR1X2ZhY3RvciA9IDB4MzsKLQkJZGF0YS0+YmFuZC5odF9jYXAuYW1wZHVfZGVuc2l0eSA9IDB4NjsKLQkJbWVtc2V0KCZkYXRhLT5iYW5kLmh0X2NhcC5tY3MsIDAsCi0JCSAgICAgICBzaXplb2YoZGF0YS0+YmFuZC5odF9jYXAubWNzKSk7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKLQkJZGF0YS0+YmFuZC5odF9jYXAubWNzLnJ4X21hc2tbMV0gPSAweGZmOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOwotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmRhdGEtPmJhbmQ7CisKKwkJZm9yIChiYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSAmZGF0YS0+YmFuZHNbYmFuZF07CisJCQlzd2l0Y2ggKGJhbmQpIHsKKwkJCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJCQlzYmFuZC0+Y2hhbm5lbHMgPSBkYXRhLT5jaGFubmVsc18yZ2h6OworCQkJCXNiYW5kLT5uX2NoYW5uZWxzID0KKwkJCQkJQVJSQVlfU0laRShod3NpbV9jaGFubmVsc18yZ2h6KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJCQlzYmFuZC0+Y2hhbm5lbHMgPSBkYXRhLT5jaGFubmVsc181Z2h6OworCQkJCXNiYW5kLT5uX2NoYW5uZWxzID0KKwkJCQkJQVJSQVlfU0laRShod3NpbV9jaGFubmVsc181Z2h6KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXNiYW5kLT5iaXRyYXRlcyA9IGRhdGEtPnJhdGVzOworCQkJc2JhbmQtPm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKTsKKworCQkJc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQgPSB0cnVlOworCQkJc2JhbmQtPmh0X2NhcC5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwKKwkJCQlJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDA7CisJCQlzYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvciA9IDB4MzsKKwkJCXNiYW5kLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA9IDB4NjsKKwkJCW1lbXNldCgmc2JhbmQtPmh0X2NhcC5tY3MsIDAsCisJCQkgICAgICAgc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7CisJCQlzYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwkJCXNiYW5kLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPSAweGZmOworCQkJc2JhbmQtPmh0X2NhcC5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOworCisJCQlody0+d2lwaHktPmJhbmRzW2JhbmRdID0gc2JhbmQ7CisJCX0KKworCQkvKiBXb3JrIHRvIGJlIGRvbmUgcHJpb3IgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KCkgKi8KKwkJc3dpdGNoIChyZWd0ZXN0KSB7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESVNBQkxFRDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19BTEw6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlk6CisJCQkvKgorCQkJICogTm90aGluZyB0byBiZSBkb25lIGZvciBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4KKwkJCSAqIGhpbnRzIHByaW9yIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfV09STERfUk9BTToKKwkJCWlmIChpID09IDApIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOgorCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEpOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMjoKKwkJCWlmIChpID09IDApIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCX0gZWxzZSBpZiAoaSA9PSAxKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTEw6CisJCQlody0+d2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVzoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRzoKKwkJCWlmIChpID09IDApCisJCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0FMTDoKKwkJCWlmIChpID09IDApIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCX0gZWxzZSBpZiAoaSA9PSAxKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMik7CisJCQl9IGVsc2UgaWYgKGkgPT0gNCkKKwkJCQlody0+d2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KIAogCQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwogCQlpZiAoZXJyIDwgMCkgewpAQCAtODEwLDYgKzEwNDgsNTIgQEAKIAkJCWdvdG8gZmFpbGVkX2h3OwogCQl9CiAKKwkJLyogV29yayB0byBiZSBkb25lIGFmdGVyIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpICovCisJCXN3aXRjaCAocmVndGVzdCkgeworCQljYXNlIEhXU0lNX1JFR1RFU1RfV09STERfUk9BTToKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RJU0FCTEVEOgorCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzoKKwkJCWlmICghaSkKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzBdKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19BTEw6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMOgorCQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgaHdzaW1fYWxwaGEyc1swXSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RJRkZfQ09VTlRSWToKKwkJCWlmIChpIDwgQVJSQVlfU0laRShod3NpbV9hbHBoYTJzKSkKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzW2ldKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6CisJCQkvKgorCQkJICogTm90aGluZyB0byBiZSBkb25lIGZvciBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorCQkJICogZG9tYWlucyBhZnRlciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcKKwkJCSAqLworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XOgorCQkJaWYgKGkgPT0gMCkKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzBdKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHOgorCQkJaWYgKGkgPT0gMCkKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzBdKTsKKwkJCWVsc2UgaWYgKGkgPT0gMSkKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzFdKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQUxMOgorCQkJaWYgKGkgPT0gMikKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzBdKTsKKwkJCWVsc2UgaWYgKGkgPT0gMykKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzFdKTsKKwkJCWVsc2UgaWYgKGkgPT0gNCkKKwkJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzJdKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGh3YWRkciAlcE0gcmVnaXN0ZXJlZFxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKIAkJICAgICAgIGh3LT53aXBoeS0+cGVybV9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YTAyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCkBAIC0wLDAgKzEsMzc4OSBAQAorLyoKKyAqIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgZHJpdmVyIGZvciBNYXJ2ZWxsIFRPUERPRyA4MDIuMTEgV2lyZWxlc3MgY2FyZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjZGVmaW5lIE1XTDhLX0RFU0MJIk1hcnZlbGwgVE9QRE9HKFIpIDgwMi4xMSBXaXJlbGVzcyBOZXR3b3JrIERyaXZlciIKKyNkZWZpbmUgTVdMOEtfTkFNRQlLQlVJTERfTU9ETkFNRQorI2RlZmluZSBNV0w4S19WRVJTSU9OCSIwLjkuMSIKKworTU9EVUxFX0RFU0NSSVBUSU9OKE1XTDhLX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oTVdMOEtfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG13bDhrX3RhYmxlKSA9IHsKKwl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmEyYiksIC5kcml2ZXJfZGF0YSA9IDg2ODcsIH0sCisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhMzApLCAuZHJpdmVyX2RhdGEgPSA4Njg3LCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtd2w4a190YWJsZSk7CisKKyNkZWZpbmUgSUVFRTgwMjExX0FERFJfTEVOCQkJRVRIX0FMRU4KKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVdMOEtfSElVX0dFTl9QVFIJCQkweDAwMDAwYzEwCisjZGVmaW5lICBNV0w4S19NT0RFX1NUQQkJCQkweDAwMDAwMDVhCisjZGVmaW5lICBNV0w4S19NT0RFX0FQCQkJCTB4MDAwMDAwYTUKKyNkZWZpbmUgTVdMOEtfSElVX0lOVF9DT0RFCQkJMHgwMDAwMGMxNAorI2RlZmluZSAgTVdMOEtfRldTVEFfUkVBRFkJCQkweGYwZjFmMmY0CisjZGVmaW5lICBNV0w4S19GV0FQX1JFQURZCQkJMHhmMWYyZjRhNQorI2RlZmluZSAgTVdMOEtfSU5UX0NPREVfQ01EX0ZJTklTSEVECQkweDAwMDAwMDA1CisjZGVmaW5lIE1XTDhLX0hJVV9TQ1JBVENICQkJMHgwMDAwMGM0MAorCisvKiBIb3N0LT5kZXZpY2UgY29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTCQkweDAwMDAwYzE4CisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX1NUQVRVUwkJMHgwMDAwMGMxYworI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9NQVNLCQkweDAwMDAwYzIwCisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0NMRUFSX1NFTAkweDAwMDAwYzI0CisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX1NUQVRVU19NQVNLCTB4MDAwMDBjMjgKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRFVNTVkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfUkVTRVQJCQkoMSA8PCAxNSkKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfUFMJCQkoMSA8PCAyKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9ET09SQkVMTAkJCSgxIDw8IDEpCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1BQQV9SRUFEWQkJKDEgPDwgMCkKKworLyogRGV2aWNlLT5ob3N0IGNvbW11bmljYXRpb25zICovCisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0VWRU5UUwkJMHgwMDAwMGMyYworI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDAwMDBjMzAKKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSwkJMHgwMDAwMGMzNAorI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9DTEVBUl9TRUwJMHgwMDAwMGMzOAorI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSwkweDAwMDAwYzNjCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX0RVTU1ZCQkJKDEgPDwgMjApCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQJCSgxIDw8IDExKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9RVUVVRV9FTVBUWQkJKDEgPDwgMTApCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBREFSX0RFVEVDVAkJKDEgPDwgNykKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT04JCQkoMSA8PCA2KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURJT19PRkYJCSgxIDw8IDUpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX01BQ19FVkVOVAkJKDEgPDwgMykKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUJCQkoMSA8PCAyKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWQkJCSgxIDw8IDEpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1RYX0RPTkUJCQkoMSA8PCAwKQorCisjZGVmaW5lIE1XTDhLX0EySF9FVkVOVFMJKE1XTDhLX0EySF9JTlRfRFVNTVkgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfQ0hOTF9TV0lUQ0hFRCB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9RVUVVRV9FTVBUWSB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9SQURBUl9ERVRFQ1QgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUkFESU9fT04gfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfUkFESU9fT0ZGIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX01BQ19FVkVOVCB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9PUENfRE9ORSB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWSB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9UWF9ET05FKQorCisvKiBXTUUgc3RyZWFtIGNsYXNzZXMgKi8KKyNkZWZpbmUgV01FX0FDX0JFCTAJCS8qIGJlc3QgZWZmb3J0ICovCisjZGVmaW5lIFdNRV9BQ19CSwkxCQkvKiBiYWNrZ3JvdW5kICovCisjZGVmaW5lIFdNRV9BQ19WSQkyCQkvKiB2aWRlbyAqLworI2RlZmluZSBXTUVfQUNfVk8JMwkJLyogdm9pY2UgKi8KKworI2RlZmluZSBNV0w4S19SWF9RVUVVRVMJCTEKKyNkZWZpbmUgTVdMOEtfVFhfUVVFVUVTCQk0CisKK3N0cnVjdCBtd2w4a19yeF9xdWV1ZSB7CisJaW50IHJ4X2Rlc2NfY291bnQ7CisKKwkvKiBodyByZWNlaXZlcyBoZXJlICovCisJaW50IHJ4X2hlYWQ7CisKKwkvKiByZWZpbGwgZGVzY3MgaGVyZSAqLworCWludCByeF90YWlsOworCisJc3RydWN0IG13bDhrX3J4X2Rlc2MgKnJ4X2Rlc2NfYXJlYTsKKwlkbWFfYWRkcl90IHJ4X2Rlc2NfZG1hOworCXN0cnVjdCBza19idWZmICoqcnhfc2tiOworfTsKKworc3RydWN0IG13bDhrX3NrYiB7CisJLyoKKwkgKiBUaGUgRE1BIGVuZ2luZSByZXF1aXJlcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgcGF5bG9hZC4KKwkgKiBJZiB0aGUgc2tidWZmIGlzIHNoYXJlZC9jbG9uZWQsIGl0IG5lZWRzIHRvIGJlIHVuc2hhcmVkLgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBzdGFjayBhbHdheXMgZ2V0cyBiYWNrCisJICogdGhlIHNrYnVmZiBpdCBzZW50IGZvciB0cmFuc21pc3Npb24uCisJICovCisJc3RydWN0IHNrX2J1ZmYgKmNsb25lOworCXN0cnVjdCBza19idWZmICpza2I7Cit9OworCitzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgeworCS8qIGh3IHRyYW5zbWl0cyBoZXJlICovCisJaW50IHR4X2hlYWQ7CisKKwkvKiBzdyBhcHBlbmRzIGhlcmUgKi8KKwlpbnQgdHhfdGFpbDsKKworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHM7CisJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4X2Rlc2NfYXJlYTsKKwlkbWFfYWRkcl90IHR4X2Rlc2NfZG1hOworCXN0cnVjdCBtd2w4a19za2IgKnR4X3NrYjsKK307CisKKy8qIFBvaW50ZXJzIHRvIHRoZSBmaXJtd2FyZSBkYXRhIGFuZCBtZXRhIGluZm9ybWF0aW9uIGFib3V0IGl0LiAgKi8KK3N0cnVjdCBtd2w4a19maXJtd2FyZSB7CisJLyogTWljcm9jb2RlICovCisJc3RydWN0IGZpcm13YXJlICp1Y29kZTsKKworCS8qIEJvb3QgaGVscGVyIGNvZGUgKi8KKwlzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlcjsKK307CisKK3N0cnVjdCBtd2w4a19wcml2IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1OCBuYW1lWzE2XTsKKwkvKiBmaXJtd2FyZSBhY2Nlc3MgbG9jayAqLworCXNwaW5sb2NrX3QgZndfbG9jazsKKworCS8qIGZpcm13YXJlIGZpbGVzIGFuZCBtZXRhIGRhdGEgKi8KKwlzdHJ1Y3QgbXdsOGtfZmlybXdhcmUgZnc7CisJdTMyIHBhcnRfbnVtOworCisJLyogbG9jayBoZWxkIG92ZXIgVFggYW5kIFRYIHJlYXAgKi8KKwlzcGlubG9ja190IHR4X2xvY2s7CisJdTMyIGludF9tYXNrOworCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZpZl9saXN0OworCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjdXJyZW50X2NoYW5uZWw7CisKKwkvKiBwb3dlciBtYW5hZ2VtZW50IHN0YXR1cyBjb29raWUgZnJvbSBmaXJtd2FyZSAqLworCXUzMiAqY29va2llOworCWRtYV9hZGRyX3QgY29va2llX2RtYTsKKworCXUxNiBudW1fbWNhZGRyczsKKwl1MTYgcmVnaW9uX2NvZGU7CisJdTggaHdfcmV2OworCV9fbGUzMiBmd19yZXY7CisJdTMyIHdlcF9lbmFibGVkOworCisJLyoKKwkgKiBSdW5uaW5nIGNvdW50IG9mIFRYIHBhY2tldHMgaW4gZmxpZ2h0LCB0byBhdm9pZAorCSAqIGl0ZXJhdGluZyBvdmVyIHRoZSB0cmFuc21pdCByaW5ncyBlYWNoIHRpbWUuCisJICovCisJaW50IHBlbmRpbmdfdHhfcGt0czsKKworCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSByeHFbTVdMOEtfUlhfUVVFVUVTXTsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgdHhxW01XTDhLX1RYX1FVRVVFU107CisKKwkvKiBQSFkgcGFyYW1ldGVycyAqLworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbMTRdOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1sxMl07CisKKwkvKiBSRiBwcmVhbWJsZTogU2hvcnQsIExvbmcgb3IgQXV0byAqLworCXU4CXJhZGlvX3ByZWFtYmxlOworCXU4CXJhZGlvX3N0YXRlOworCisJLyogV01NIE1PREUgMSBmb3IgZW5hYmxlZDsgMCBmb3IgZGlzYWJsZWQgKi8KKwlib29sIHdtbV9tb2RlOworCisJLyogU2V0IGlmIFBIWSBjb25maWcgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlib29sIGluY29uZmlnOworCisJLyogWFhYIG5lZWQgdG8gY29udmVydCB0aGlzIHRvIGhhbmRsZSBtdWx0aXBsZSBpbnRlcmZhY2VzICovCisJYm9vbCBjYXB0dXJlX2JlYWNvbjsKKwl1OCBjYXB0dXJlX2Jzc2lkW0lFRUU4MDIxMV9BRERSX0xFTl07CisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbl9za2I7CisKKwkvKgorCSAqIFRoaXMgRkogd29ya2VyIGhhcyB0byBiZSBnbG9iYWwgYXMgaXQgaXMgc2NoZWR1bGVkIGZyb20gdGhlCisJICogUlggaGFuZGxlci4gIEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qga25vdyB3aGljaCBpbnRlcmZhY2UgaXQKKwkgKiBiZWxvbmdzIHRvIHVudGlsIHRoZSBsaXN0IG9mIGJzc2lkcyB3YWl0aW5nIHRvIGNvbXBsZXRlIGpvaW4KKwkgKiBpcyBjaGVja2VkLgorCSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBmaW5hbGl6ZV9qb2luX3dvcmtlcjsKKworCS8qIFRhc2tsZXQgdG8gcmVjbGFpbSBUWCBkZXNjcmlwdG9ycyBhbmQgYnVmZmVycyBhZnRlciB0eCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF9yZWNsYWltX3Rhc2s7CisKKwkvKiBXb3JrIHRocmVhZCB0byBzZXJpYWxpemUgY29uZmlndXJhdGlvbiByZXF1ZXN0cyAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjb25maWdfd3E7CisJc3RydWN0IGNvbXBsZXRpb24gKmhvc3RjbWRfd2FpdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqdHhfd2FpdDsKK307CisKKy8qIFBlciBpbnRlcmZhY2Ugc3BlY2lmaWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3QgbXdsOGtfdmlmIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisKKwkvKiBiYWNrcG9pbnRlciB0byBwYXJlbnQgY29uZmlnIGJsb2NrICovCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisKKwkvKiBCU1MgY29uZmlnIG9mIEFQIG9yIElCU1MgZnJvbSBtYWM4MDIxMSovCisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiBic3NfaW5mbzsKKworCS8qIEJTU0lEIG9mIEFQIG9yIElCU1MgKi8KKwl1OAlic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCXU4CW1hY19hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisKKwkvKgorCSAqIFN1YnNldCBvZiBzdXBwb3J0ZWQgbGVnYWN5IHJhdGVzLgorCSAqIEludGVyc2VjdGlvbiBvZiBBUCBhbmQgU1RBIHN1cHBvcnRlZCByYXRlcy4KKwkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgbGVnYWN5X3JhdGVzWzEyXTsKKworCS8qIG51bWJlciBvZiBzdXBwb3J0ZWQgbGVnYWN5IHJhdGVzICovCisJdTgJbGVnYWN5X25yYXRlczsKKworCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgTUNTIHJhdGVzLiBXb3JrIGluIHByb2dyZXNzICovCisJdTgJbWNzX25yYXRlczsKKworCSAvKiBJbmRleCBpbnRvIHN0YXRpb24gZGF0YWJhc2UuUmV0dXJuZWQgYnkgdXBkYXRlX3N0YV9kYiBjYWxsICovCisJdTgJcGVlcl9pZDsKKworCS8qIE5vbiBBTVBEVSBzZXF1ZW5jZSBudW1iZXIgYXNzaWduZWQgYnkgZHJpdmVyICovCisJdTE2CXNlcW5vOworCisJLyogTm90ZTpUaGVyZSBpcyBubyBjaGFubmVsIGluZm8sCisJICogcmVmZXIgdG8gdGhlIG1hc3RlciBjaGFubmVsIGluZm8gaW4gcHJpdgorCSAqLworfTsKKworI2RlZmluZSBNV0w4S19WSUYoX3ZpZikgKHN0cnVjdCBtd2w4a192aWYgKikoJigoX3ZpZiktPmRydl9wcml2KSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBtd2w4a19jaGFubmVsc1tdID0geworCXsgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1ZSA9IDUsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNywgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDgsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXdsOGtfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDIsIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMTEsIH0sCisJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSAxMiwgfSwKKwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4LCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDIyLCB9LAorCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDI0LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDM2LCB9LAorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDQ4LCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDcyLCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDk2LCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDEwOCwgfSwKK307CisKKy8qIFJhZGlvIHNldHRpbmdzICovCisjZGVmaW5lIE1XTDhLX1JBRElPX0ZPUkNFCQkweDIKKyNkZWZpbmUgTVdMOEtfUkFESU9fRU5BQkxFCQkweDEKKyNkZWZpbmUgTVdMOEtfUkFESU9fRElTQUJMRQkJMHgwCisjZGVmaW5lIE1XTDhLX1JBRElPX0FVVE9fUFJFQU1CTEUJMHgwMDA1CisjZGVmaW5lIE1XTDhLX1JBRElPX1NIT1JUX1BSRUFNQkxFCTB4MDAwMworI2RlZmluZSBNV0w4S19SQURJT19MT05HX1BSRUFNQkxFCTB4MDAwMQorCisvKiBXTU0gKi8KKyNkZWZpbmUgTVdMOEtfV01NX0VOQUJMRQkJMQorI2RlZmluZSBNV0w4S19XTU1fRElTQUJMRQkJMAorCisjZGVmaW5lIE1XTDhLX1JBRElPX0RFRkFVTFRfUFJFQU1CTEUJTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRQorCisvKiBTbG90IHRpbWUgKi8KKworLyogU2hvcnQgU2xvdDogOXVzIHNsb3QgdGltZSAqLworI2RlZmluZSBNV0w4S19TSE9SVF9TTE9UVElNRQkJMQorCisvKiBMb25nIHNsb3Q6IDIwdXMgc2xvdCB0aW1lICovCisjZGVmaW5lIE1XTDhLX0xPTkdfU0xPVFRJTUUJCTAKKworLyogU2V0IG9yIGdldCBpbmZvIGZyb20gRmlybXdhcmUgKi8KKyNkZWZpbmUgTVdMOEtfQ01EX1NFVAkJCTB4MDAwMQorI2RlZmluZSBNV0w4S19DTURfR0VUCQkJMHgwMDAwCisKKy8qIEZpcm13YXJlIGNvbW1hbmQgY29kZXMgKi8KKyNkZWZpbmUgTVdMOEtfQ01EX0NPREVfRE5MRAkJMHgwMDAxCisjZGVmaW5lIE1XTDhLX0NNRF9HRVRfSFdfU1BFQwkJMHgwMDAzCisjZGVmaW5lIE1XTDhLX0NNRF9NQUNfTVVMVElDQVNUX0FEUgkweDAwMTAKKyNkZWZpbmUgTVdMOEtfQ01EX0dFVF9TVEFUCQkweDAwMTQKKyNkZWZpbmUgTVdMOEtfQ01EX1JBRElPX0NPTlRST0wJCTB4MDAxQworI2RlZmluZSBNV0w4S19DTURfUkZfVFhfUE9XRVIJCTB4MDAxRQorI2RlZmluZSBNV0w4S19DTURfU0VUX1BSRV9TQ0FOCQkweDAxMDcKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9QT1NUX1NDQU4JCTB4MDEwOAorI2RlZmluZSBNV0w4S19DTURfU0VUX1JGX0NIQU5ORUwJMHgwMTBBCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfU0xPVAkJMHgwMTE0CisjZGVmaW5lIE1XTDhLX0NNRF9NSU1PX0NPTkZJRwkJMHgwMTI1CisjZGVmaW5lIE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUgkweDAxNTAKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9XTU1fTU9ERQkJMHgwMTIzCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfRURDQV9QQVJBTVMJMHgwMTE1CisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfRklOQUxJWkVfSk9JTgkweDAxMTEKKyNkZWZpbmUgTVdMOEtfQ01EX1VQREFURV9TVEFEQgkJMHgxMTIzCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUJMHgwMjAzCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfTElOS0FEQVBUX01PREUJMHgwMTI5CisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfQUlECQkweDAxMGQKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SQVRFCQkweDAxMTAKKyNkZWZpbmUgTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFCTB4MDEyNgorI2RlZmluZSBNV0w4S19DTURfUlRTX1RIUkVTSE9MRAkJMHgwMTEzCisjZGVmaW5lIE1XTDhLX0NNRF9FTkNSWVBUSU9OCQkweDExMjIKKworc3RhdGljIGNvbnN0IGNoYXIgKm13bDhrX2NtZF9uYW1lKHUxNiBjbWQsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpCit7CisjZGVmaW5lIE1XTDhLX0NNRE5BTUUoeCkJY2FzZSBNV0w4S19DTURfIyN4OiBkbyB7XAorCQkJCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIlcyIsICN4KTtcCisJCQkJCXJldHVybiBidWY7XAorCQkJCQl9IHdoaWxlICgwKQorCXN3aXRjaCAoY21kICYgKH4weDgwMDApKSB7CisJCU1XTDhLX0NNRE5BTUUoQ09ERV9ETkxEKTsKKwkJTVdMOEtfQ01ETkFNRShHRVRfSFdfU1BFQyk7CisJCU1XTDhLX0NNRE5BTUUoTUFDX01VTFRJQ0FTVF9BRFIpOworCQlNV0w4S19DTUROQU1FKEdFVF9TVEFUKTsKKwkJTVdMOEtfQ01ETkFNRShSQURJT19DT05UUk9MKTsKKwkJTVdMOEtfQ01ETkFNRShSRl9UWF9QT1dFUik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1BSRV9TQ0FOKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUE9TVF9TQ0FOKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUkZfQ0hBTk5FTCk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1NMT1QpOworCQlNV0w4S19DTUROQU1FKE1JTU9fQ09ORklHKTsKKwkJTVdMOEtfQ01ETkFNRShFTkFCTEVfU05JRkZFUik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1dNTV9NT0RFKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfRURDQV9QQVJBTVMpOworCQlNV0w4S19DTUROQU1FKFNFVF9GSU5BTElaRV9KT0lOKTsKKwkJTVdMOEtfQ01ETkFNRShVUERBVEVfU1RBREIpOworCQlNV0w4S19DTUROQU1FKFNFVF9SQVRFQURBUFRfTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0xJTktBREFQVF9NT0RFKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfQUlEKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUkFURSk7CisJCU1XTDhLX0NNRE5BTUUoVVNFX0ZJWEVEX1JBVEUpOworCQlNV0w4S19DTUROQU1FKFJUU19USFJFU0hPTEQpOworCQlNV0w4S19DTUROQU1FKEVOQ1JZUFRJT04pOworCWRlZmF1bHQ6CisJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIjB4JXgiLCBjbWQpOworCX0KKyN1bmRlZiBNV0w4S19DTUROQU1FCisKKwlyZXR1cm4gYnVmOworfQorCisvKiBIYXJkd2FyZSBhbmQgZmlybXdhcmUgcmVzZXQgKi8KK3N0YXRpYyB2b2lkIG13bDhrX2h3X3Jlc2V0KHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX1JFU0VULAorCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9SRVNFVCwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJbXNsZWVwKDIwKTsKK30KKworLyogUmVsZWFzZSBmdyBpbWFnZSAqLworc3RhdGljIHZvaWQgbXdsOGtfcmVsZWFzZV9mdyhzdHJ1Y3QgZmlybXdhcmUgKipmdykKK3sKKwlpZiAoKmZ3ID09IE5VTEwpCisJCXJldHVybjsKKwlyZWxlYXNlX2Zpcm13YXJlKCpmdyk7CisJKmZ3ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5mdy51Y29kZSk7CisJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncuaGVscGVyKTsKK30KKworLyogUmVxdWVzdCBmdyBpbWFnZSAqLworc3RhdGljIGludCBtd2w4a19yZXF1ZXN0X2Z3KHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQkJCWNvbnN0IGNoYXIgKmZuYW1lLCBzdHJ1Y3QgZmlybXdhcmUgKipmdykKK3sKKwkvKiByZWxlYXNlIGN1cnJlbnQgaW1hZ2UgKi8KKwlpZiAoKmZ3ICE9IE5VTEwpCisJCW13bDhrX3JlbGVhc2VfZncoZncpOworCisJcmV0dXJuIHJlcXVlc3RfZmlybXdhcmUoKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKilmdywKKwkJCQkJCWZuYW1lLCAmcHJpdi0+cGRldi0+ZGV2KTsKK30KKworc3RhdGljIGludCBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LCB1MzIgcGFydF9udW0pCit7CisJdTggZmlsZW5hbWVbNjRdOworCWludCByYzsKKworCXByaXYtPnBhcnRfbnVtID0gcGFydF9udW07CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwKKwkJICJtd2w4ay9oZWxwZXJfJXUuZnciLCBwcml2LT5wYXJ0X251bSk7CisKKwlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgZmlsZW5hbWUsICZwcml2LT5mdy5oZWxwZXIpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlcyBFcnJvciByZXF1ZXN0aW5nIGhlbHBlciBmaXJtd2FyZSBmaWxlICVzXG4iLAorCQkJcGNpX25hbWUocHJpdi0+cGRldiksIGZpbGVuYW1lKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLAorCQkgIm13bDhrL2ZtaW1hZ2VfJXUuZnciLCBwcml2LT5wYXJ0X251bSk7CisKKwlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgZmlsZW5hbWUsICZwcml2LT5mdy51Y29kZSk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgRXJyb3IgcmVxdWVzdGluZyBmaXJtd2FyZSBmaWxlICVzXG4iLAorCQkJCQlwY2lfbmFtZShwcml2LT5wZGV2KSwgZmlsZW5hbWUpOworCQltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5mdy5oZWxwZXIpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtd2w4a19jbWRfcGt0IHsKKwlfX2xlMTYJY29kZTsKKwlfX2xlMTYJbGVuZ3RoOworCV9fbGUxNglzZXFfbnVtOworCV9fbGUxNglyZXN1bHQ7CisJY2hhcglwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEZpcm13YXJlIGxvYWRpbmcuCisgKi8KK3N0YXRpYyBpbnQKK213bDhrX3NlbmRfZndfbG9hZF9jbWQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi0+cmVnczsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCByYzsKKwlpbnQgbG9vcHM7CisKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRhdGEsIGxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWFfYWRkcikpCisJCXJldHVybiAtRU5PTUVNOworCisJaW93cml0ZTMyKGRtYV9hZGRyLCByZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOworCWlvd3JpdGUzMigwLCByZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9ET09SQkVMTCwKKwkJcmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRFVNTVksCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCisJcmMgPSAtRVRJTUVET1VUOworCWxvb3BzID0gMTAwMDsKKwlkbyB7CisJCXUzMiBpbnRfY29kZTsKKworCQlpbnRfY29kZSA9IGlvcmVhZDMyKHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworCQlpZiAoaW50X2NvZGUgPT0gTVdMOEtfSU5UX0NPREVfQ01EX0ZJTklTSEVEKSB7CisJCQlpb3dyaXRlMzIoMCwgcmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICgtLWxvb3BzKTsKKworCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgZG1hX2FkZHIsIGxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkvKgorCSAqIENsZWFyICdjb21tYW5kIGRvbmUnIGludGVycnVwdCBiaXQuCisJICovCisJbG9vcHMgPSAxMDAwOworCWRvIHsKKwkJdTMyIHN0YXR1czsKKworCQlzdGF0dXMgPSBpb3JlYWQzMihwcml2LT5yZWdzICsKKwkJCQlNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCQlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9PUENfRE9ORSkgeworCQkJaW93cml0ZTMyKH5NV0w4S19BMkhfSU5UX09QQ19ET05FLAorCQkJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCQkJaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJCQlicmVhazsKKwkJfQorCisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICgtLWxvb3BzKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19sb2FkX2Z3X2ltYWdlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQkJCWNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBtd2w4a19jbWRfcGt0ICpjbWQ7CisJaW50IGRvbmU7CisJaW50IHJjID0gMDsKKworCWNtZCA9IGttYWxsb2Moc2l6ZW9mKCpjbWQpICsgMjU2LCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0NPREVfRE5MRCk7CisJY21kLT5zZXFfbnVtID0gMDsKKwljbWQtPnJlc3VsdCA9IDA7CisKKwlkb25lID0gMDsKKwl3aGlsZSAobGVuZ3RoKSB7CisJCWludCBibG9ja19zaXplID0gbGVuZ3RoID4gMjU2ID8gMjU2IDogbGVuZ3RoOworCisJCW1lbWNweShjbWQtPnBheWxvYWQsIGRhdGEgKyBkb25lLCBibG9ja19zaXplKTsKKwkJY21kLT5sZW5ndGggPSBjcHVfdG9fbGUxNihibG9ja19zaXplKTsKKworCQlyYyA9IG13bDhrX3NlbmRfZndfbG9hZF9jbWQocHJpdiwgY21kLAorCQkJCQkJc2l6ZW9mKCpjbWQpICsgYmxvY2tfc2l6ZSk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCisJCWRvbmUgKz0gYmxvY2tfc2l6ZTsKKwkJbGVuZ3RoIC09IGJsb2NrX3NpemU7CisJfQorCisJaWYgKCFyYykgeworCQljbWQtPmxlbmd0aCA9IDA7CisJCXJjID0gbXdsOGtfc2VuZF9md19sb2FkX2NtZChwcml2LCBjbWQsIHNpemVvZigqY21kKSk7CisJfQorCisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19mZWVkX2Z3X2ltYWdlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQkJCWNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgbWF5X2NvbnRpbnVlLCByYyA9IDA7CisJdTMyIGRvbmUsIHByZXZfYmxvY2tfc2l6ZTsKKworCWJ1ZmZlciA9IGttYWxsb2MoMTAyNCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRvbmUgPSAwOworCXByZXZfYmxvY2tfc2l6ZSA9IDA7CisJbWF5X2NvbnRpbnVlID0gMTAwMDsKKwl3aGlsZSAobWF5X2NvbnRpbnVlID4gMCkgeworCQl1MzIgYmxvY2tfc2l6ZTsKKworCQlibG9ja19zaXplID0gaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9TQ1JBVENIKTsKKwkJaWYgKGJsb2NrX3NpemUgJiAxKSB7CisJCQlibG9ja19zaXplICY9IH4xOworCQkJbWF5X2NvbnRpbnVlLS07CisJCX0gZWxzZSB7CisJCQlkb25lICs9IHByZXZfYmxvY2tfc2l6ZTsKKwkJCWxlbmd0aCAtPSBwcmV2X2Jsb2NrX3NpemU7CisJCX0KKworCQlpZiAoYmxvY2tfc2l6ZSA+IDEwMjQgfHwgYmxvY2tfc2l6ZSA+IGxlbmd0aCkgeworCQkJcmMgPSAtRU9WRVJGTE9XOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAobGVuZ3RoID09IDApIHsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGJsb2NrX3NpemUgPT0gMCkgeworCQkJcmMgPSAtRVBST1RPOworCQkJbWF5X2NvbnRpbnVlLS07CisJCQl1ZGVsYXkoMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXByZXZfYmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7CisJCW1lbWNweShidWZmZXIsIGRhdGEgKyBkb25lLCBibG9ja19zaXplKTsKKworCQlyYyA9IG13bDhrX3NlbmRfZndfbG9hZF9jbWQocHJpdiwgYnVmZmVyLCBibG9ja19zaXplKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFyYyAmJiBsZW5ndGggIT0gMCkKKwkJcmMgPSAtRVJFTU9URUlPOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19sb2FkX2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCWludCBsb29wcywgcmM7CisKKwljb25zdCB1OCAqdWNvZGUgPSBwcml2LT5mdy51Y29kZS0+ZGF0YTsKKwlzaXplX3QgdWNvZGVfbGVuID0gcHJpdi0+ZncudWNvZGUtPnNpemU7CisJY29uc3QgdTggKmhlbHBlciA9IHByaXYtPmZ3LmhlbHBlci0+ZGF0YTsKKwlzaXplX3QgaGVscGVyX2xlbiA9IHByaXYtPmZ3LmhlbHBlci0+c2l6ZTsKKworCWlmICghbWVtY21wKHVjb2RlLCAiXHgwMVx4MDBceDAwXHgwMCIsIDQpKSB7CisJCXJjID0gbXdsOGtfbG9hZF9md19pbWFnZShwcml2LCBoZWxwZXIsIGhlbHBlcl9sZW4pOworCQlpZiAocmMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBsb2FkIGZpcm13YXJlICIKKwkJCQkiaGVscGVyIGltYWdlXG4iLCBwY2lfbmFtZShwcml2LT5wZGV2KSk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJbXNsZWVwKDEpOworCisJCXJjID0gbXdsOGtfZmVlZF9md19pbWFnZShwcml2LCB1Y29kZSwgdWNvZGVfbGVuKTsKKwl9IGVsc2UgeworCQlyYyA9IG13bDhrX2xvYWRfZndfaW1hZ2UocHJpdiwgdWNvZGUsIHVjb2RlX2xlbik7CisJfQorCisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBsb2FkIGZpcm13YXJlIGRhdGFcbiIsCisJCQlwY2lfbmFtZShwcml2LT5wZGV2KSk7CisJCXJldHVybiByYzsKKwl9CisKKwlpb3dyaXRlMzIoTVdMOEtfTU9ERV9TVEEsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CisJbXNsZWVwKDEpOworCisJbG9vcHMgPSAyMDAwMDA7CisJZG8geworCQlpZiAoaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSkKKwkJCQkJCT09IE1XTDhLX0ZXU1RBX1JFQURZKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICgtLWxvb3BzKTsKKworCXJldHVybiBsb29wcyA/IDAgOiAtRVRJTUVET1VUOworfQorCisKKy8qCisgKiBEZWZpbmVzIHNoYXJlZCBiZXR3ZWVuIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uLgorICovCisvKiBIVCBjb250cm9sIGZpZWxkcyBmb3IgZmlybXdhcmUgKi8KK3N0cnVjdCBld2NfaHRfaW5mbyB7CisJX19sZTE2CWNvbnRyb2wxOworCV9fbGUxNgljb250cm9sMjsKKwlfX2xlMTYJY29udHJvbDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBGaXJtd2FyZSBTdGF0aW9uIGRhdGFiYXNlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTVdMOEtfU1RBX0RCX0FERF9FTlRSWQkJMAorI2RlZmluZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZCTEKKyNkZWZpbmUgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWQkJMgorI2RlZmluZSBNV0w4S19TVEFfREJfRkxVU0gJCTMKKworLyogUGVlciBFbnRyeSBmbGFncyAtIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBwZWVyIG5vZGUgKi8KKyNkZWZpbmUgTVdMOEtfUEVFUl9UWVBFX0FDQ0VTU1BPSU5UCTIKKyNkZWZpbmUgTVdMOEtfUEVFUl9UWVBFX0FESE9DX1NUQVRJT04JNAorCisjZGVmaW5lIE1XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVMJMTIKKyNkZWZpbmUgTVdMOEtfTUNTX0JJVE1BUF9TSVpFCQkxNgorI2RlZmluZSBwYWRfc2l6ZQkJCTE2CisKK3N0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyB7CisJLyogUGVlciB0eXBlIC0gQVAgdnMuIFNUQS4gICovCisJX191OAlwZWVyX3R5cGU7CisKKwkvKiBCYXNpYyA4MDIuMTEgY2FwYWJpbGl0aWVzIGZyb20gYXNzb2MgcmVzcC4gICovCisJX19sZTE2CWJhc2ljX2NhcHM7CisKKwkvKiBTZXQgaWYgcGVlciBzdXBwb3J0cyA4MDIuMTFuIGhpZ2ggdGhyb3VnaHB1dCAoSFQpLiAgKi8KKwlfX3U4CWh0X3N1cHBvcnQ7CisKKwkvKiBWYWxpZCBpZiBIVCBpcyBzdXBwb3J0ZWQuICAqLworCV9fbGUxNglodF9jYXBzOworCV9fdTgJZXh0ZW5kZWRfaHRfY2FwczsKKwlzdHJ1Y3QgZXdjX2h0X2luZm8JZXdjX2luZm87CisKKwkvKiBMZWdhY3kgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCisJX191OAlsZWdhY3lfcmF0ZXNbTVdMOEtfSUVFRV9MRUdBQ1lfREFUQV9SQVRFU107CisKKwkvKiBIVCByYXRlIHRhYmxlLiBJbnRlcnNlY3Rpb24gb2Ygb3VyIHJhdGVzIGFuZCBwZWVyIHJhdGVzLiAgKi8KKwlfX3U4CWh0X3JhdGVzW01XTDhLX01DU19CSVRNQVBfU0laRV07CisJX191OAlwYWRbcGFkX3NpemVdOworCisJLyogSWYgc2V0LCBpbnRlcm9wZXJhYmlsaXR5IG1vZGUsIG5vIHByb3ByaWV0YXJ5IGV4dGVuc2lvbnMuICAqLworCV9fdTgJaW50ZXJvcDsKKwlfX3U4CXBhZDI7CisJX191OAlzdGF0aW9uX2lkOworCV9fbGUxNglhbXNkdV9lbmFibGVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogSW5saW5lIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIFFvUyBmaWVsZCBpbiBkYXRhIGRlc2NyaXB0b3IuICAqLworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF90aWQodTE2IHFvcywgdTggdGlkKQoreworCXUxNiB2YWxfbWFzayA9IDB4MDAwZjsKKwl1MTYgcW9zX21hc2sgPSB+dmFsX21hc2s7CisKKwkvKiBUSUQgYml0cyAwLTMgKi8KKwlyZXR1cm4gKHFvcyAmIHFvc19tYXNrKSB8ICh0aWQgJiB2YWxfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfZW9zcCh1MTYgcW9zKQoreworCXUxNiB2YWxfbWFzayA9IDEgPDwgNDsKKworCS8qIEVuZCBvZiBTZXJ2aWNlIFBlcmlvZCBCaXQgNCAqLworCXJldHVybiBxb3MgfCB2YWxfbWFzazsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9hY2sodTE2IHFvcywgdTggYWNrX3BvbGljeSkKK3sKKwl1MTYgdmFsX21hc2sgPSAweDM7CisJdTgJc2hpZnQgPSA1OworCXUxNiBxb3NfbWFzayA9IH4odmFsX21hc2sgPDwgc2hpZnQpOworCisJLyogQWNrIFBvbGljeSBCaXQgNS02ICovCisJcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAoKGFja19wb2xpY3kgJiB2YWxfbWFzaykgPDwgc2hpZnQpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Ftc2R1KHUxNiBxb3MpCit7CisJdTE2IHZhbF9tYXNrID0gMSA8PCA3OworCisJLyogQU1TRFUgcHJlc2VudCBCaXQgNyAqLworCXJldHVybiBxb3MgfCB2YWxfbWFzazsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9xbGVuKHUxNiBxb3MsIHU4IGxlbikKK3sKKwl1MTYgdmFsX21hc2sgPSAweGZmOworCXU4CXNoaWZ0ID0gODsKKwl1MTYgcW9zX21hc2sgPSB+KHZhbF9tYXNrIDw8IHNoaWZ0KTsKKworCS8qIFF1ZXVlIExlbmd0aCBCaXRzIDgtMTUgKi8KKwlyZXR1cm4gKHFvcyAmIHFvc19tYXNrKSB8ICgobGVuICYgdmFsX21hc2spIDw8IHNoaWZ0KTsKK30KKworLyogRE1BIGhlYWRlciB1c2VkIGJ5IGZpcm13YXJlIGFuZCBoYXJkd2FyZS4gICovCitzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgeworCV9fbGUxNiBmd2xlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciB3aDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFJvdXRpbmVzIHRvIGFkZC9yZW1vdmUgRE1BIGhlYWRlciBmcm9tIHNrYi4gICovCitzdGF0aWMgaW5saW5lIGludCBtd2w4a19yZW1vdmVfZG1hX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2w4a19kbWFfZGF0YSAqdHIgPSAoc3RydWN0IG13bDhrX2RtYV9kYXRhICopKHNrYi0+ZGF0YSk7CisJdm9pZCAqZHN0LCAqc3JjID0gJnRyLT53aDsKKwlfX2xlMTYgZmMgPSB0ci0+d2guZnJhbWVfY29udHJvbDsKKwlpbnQgaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CisJdTE2IHNwYWNlID0gc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkgLSBoZHJsZW47CisKKwlkc3QgPSAodm9pZCAqKXRyICsgc3BhY2U7CisJaWYgKGRzdCAhPSBzcmMpIHsKKwkJbWVtbW92ZShkc3QsIHNyYywgaGRybGVuKTsKKwkJc2tiX3B1bGwoc2tiLCBzcGFjZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm13bDhrX2FkZF9kbWFfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOworCXUzMiBoZHJsZW4sIHBrdGxlbjsKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyOworCisJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbih3aC0+ZnJhbWVfY29udHJvbCk7CisJcGt0bGVuID0gc2tiLT5sZW47CisKKwkvKgorCSAqIENvcHkgdXAvZG93biB0aGUgODAyLjExIGhlYWRlcjsgdGhlIGZpcm13YXJlIHJlcXVpcmVzCisJICogd2UgcHJlc2VudCBhIDItYnl0ZSBwYXlsb2FkIGxlbmd0aCBmb2xsb3dlZCBieSBhCisJICogNC1hZGRyZXNzIGhlYWRlciAody9vIFFvUyksIGZvbGxvd2VkIChvcHRpb25hbGx5KSBieQorCSAqIGFueSBXRVAvRXh0SVYgaGVhZGVyIChidXQgb25seSBmaWxsZWQgaW4gZm9yIENDTVApLgorCSAqLworCWlmIChoZHJsZW4gIT0gc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkpCisJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkgLSBoZHJsZW4pOworCisJdHIgPSAoc3RydWN0IG13bDhrX2RtYV9kYXRhICopc2tiLT5kYXRhOworCWlmICh3aCAhPSAmdHItPndoKQorCQltZW1tb3ZlKCZ0ci0+d2gsIHdoLCBoZHJsZW4pOworCisJLyogQ2xlYXIgYWRkcjQgKi8KKwltZW1zZXQodHItPndoLmFkZHI0LCAwLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJLyoKKwkgKiBGaXJtd2FyZSBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgZnVsbHkgZm9ybWVkICI4MDIuMTEKKwkgKiBwYXlsb2FkIi4gIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciB0aGUgODAyLjExIGhlYWRlci4KKwkgKiBUaGlzIGluY2x1ZGVzIGFsbCBjcnlwdG8gbWF0ZXJpYWwgaW5jbHVkaW5nIHRoZSBNSUMuCisJICovCisJdHItPmZ3bGVuID0gY3B1X3RvX2xlMTYocGt0bGVuIC0gaGRybGVuKTsKKworCXJldHVybiBza2I7Cit9CisKKworLyoKKyAqIFBhY2tldCByZWNlcHRpb24uCisgKi8KKyNkZWZpbmUgTVdMOEtfUlhfQ1RSTF9LRVlfSU5ERVhfTUFTSwkweDMwCisjZGVmaW5lIE1XTDhLX1JYX0NUUkxfT1dORURfQllfSE9TVAkweDAyCisjZGVmaW5lIE1XTDhLX1JYX0NUUkxfQU1QRFUJCTB4MDEKKworc3RydWN0IG13bDhrX3J4X2Rlc2MgeworCV9fbGUxNiBwa3RfbGVuOworCV9fdTggbGlua19xdWFsaXR5OworCV9fdTggbm9pc2VfbGV2ZWw7CisJX19sZTMyIHBrdF9waHlzX2FkZHI7CisJX19sZTMyIG5leHRfcnhfZGVzY19waHlzX2FkZHI7CisJX19sZTE2IHFvc19jb250cm9sOworCV9fbGUxNiByYXRlX2luZm87CisJX19sZTMyIHBhZDBbNF07CisJX191OCByc3NpOworCV9fdTggY2hhbm5lbDsKKwlfX2xlMTYgcGFkMTsKKwlfX3U4IHJ4X2N0cmw7CisJX191OCByeF9zdGF0dXM7CisJX191OCBwYWQyWzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19SWF9ERVNDUwkJMjU2CisjZGVmaW5lIE1XTDhLX1JYX01BWFNaCQkzODAwCisKK3N0YXRpYyBpbnQgbXdsOGtfcnhxX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSAqcnhxID0gcHJpdi0+cnhxICsgaW5kZXg7CisJaW50IHNpemU7CisJaW50IGk7CisKKwlyeHEtPnJ4X2Rlc2NfY291bnQgPSAwOworCXJ4cS0+cnhfaGVhZCA9IDA7CisJcnhxLT5yeF90YWlsID0gMDsKKworCXNpemUgPSBNV0w4S19SWF9ERVNDUyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhfZGVzYyk7CisKKwlyeHEtPnJ4X2Rlc2NfYXJlYSA9CisJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsICZyeHEtPnJ4X2Rlc2NfZG1hKTsKKwlpZiAocnhxLT5yeF9kZXNjX2FyZWEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2MgUlggZGVzY3JpcHRvcnNcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChyeHEtPnJ4X2Rlc2NfYXJlYSwgMCwgc2l6ZSk7CisKKwlyeHEtPnJ4X3NrYiA9IGttYWxsb2MoTVdMOEtfUlhfREVTQ1MgKgorCQkJCXNpemVvZigqcnhxLT5yeF9za2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAocnhxLT5yeF9za2IgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2MgUlggc2tidWZmIGxpc3RcbiIsCisJCQlwcml2LT5uYW1lKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLAorCQkJCSAgICByeHEtPnJ4X2Rlc2NfYXJlYSwgcnhxLT5yeF9kZXNjX2RtYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocnhxLT5yeF9za2IsIDAsIE1XTDhLX1JYX0RFU0NTICogc2l6ZW9mKCpyeHEtPnJ4X3NrYikpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1JYX0RFU0NTOyBpKyspIHsKKwkJc3RydWN0IG13bDhrX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJCWludCBuZXh0aTsKKworCQlyeF9kZXNjID0gcnhxLT5yeF9kZXNjX2FyZWEgKyBpOworCQluZXh0aSA9IChpICsgMSkgJSBNV0w4S19SWF9ERVNDUzsKKworCQlyeF9kZXNjLT5uZXh0X3J4X2Rlc2NfcGh5c19hZGRyID0KKwkJCWNwdV90b19sZTMyKHJ4cS0+cnhfZGVzY19kbWEKKwkJCQkJCSsgbmV4dGkgKiBzaXplb2YoKnJ4X2Rlc2MpKTsKKwkJcnhfZGVzYy0+cnhfY3RybCA9CisJCQljcHVfdG9fbGUzMihNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ4cV9yZWZpbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGxpbWl0KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKKwlpbnQgcmVmaWxsZWQ7CisKKwlyZWZpbGxlZCA9IDA7CisJd2hpbGUgKHJ4cS0+cnhfZGVzY19jb3VudCA8IE1XTDhLX1JYX0RFU0NTICYmIGxpbWl0LS0pIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJaW50IHJ4OworCisJCXNrYiA9IGRldl9hbGxvY19za2IoTVdMOEtfUlhfTUFYU1opOworCQlpZiAoc2tiID09IE5VTEwpCisJCQlicmVhazsKKworCQlyeHEtPnJ4X2Rlc2NfY291bnQrKzsKKworCQlyeCA9IHJ4cS0+cnhfdGFpbDsKKwkJcnhxLT5yeF90YWlsID0gKHJ4ICsgMSkgJSBNV0w4S19SWF9ERVNDUzsKKworCQlyeHEtPnJ4X2Rlc2NfYXJlYVtyeF0ucGt0X3BoeXNfYWRkciA9CisJCQljcHVfdG9fbGUzMihwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCisJCQkJCU1XTDhLX1JYX01BWFNaLCBETUFfRlJPTV9ERVZJQ0UpKTsKKworCQlyeHEtPnJ4X2Rlc2NfYXJlYVtyeF0ucGt0X2xlbiA9IGNwdV90b19sZTE2KE1XTDhLX1JYX01BWFNaKTsKKwkJcnhxLT5yeF9za2JbcnhdID0gc2tiOworCQl3bWIoKTsKKwkJcnhxLT5yeF9kZXNjX2FyZWFbcnhdLnJ4X2N0cmwgPSAwOworCisJCXJlZmlsbGVkKys7CisJfQorCisJcmV0dXJuIHJlZmlsbGVkOworfQorCisvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGNhcmQncyByZWNlcHRpb24gaXMgY29tcGxldGVseSBoYWx0ZWQgKi8KK3N0YXRpYyB2b2lkIG13bDhrX3J4cV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSAqcnhxID0gcHJpdi0+cnhxICsgaW5kZXg7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfUlhfREVTQ1M7IGkrKykgeworCQlpZiAocnhxLT5yeF9za2JbaV0gIT0gTlVMTCkgeworCQkJdW5zaWduZWQgbG9uZyBhZGRyOworCisJCQlhZGRyID0gbGUzMl90b19jcHUocnhxLT5yeF9kZXNjX2FyZWFbaV0ucGt0X3BoeXNfYWRkcik7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGFkZHIsIE1XTDhLX1JYX01BWFNaLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWtmcmVlX3NrYihyeHEtPnJ4X3NrYltpXSk7CisJCQlyeHEtPnJ4X3NrYltpXSA9IE5VTEw7CisJCX0KKwl9CisKKwlrZnJlZShyeHEtPnJ4X3NrYik7CisJcnhxLT5yeF9za2IgPSBOVUxMOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LAorCQkJICAgIE1XTDhLX1JYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBtd2w4a19yeF9kZXNjKSwKKwkJCSAgICByeHEtPnJ4X2Rlc2NfYXJlYSwgcnhxLT5yeF9kZXNjX2RtYSk7CisJcnhxLT5yeF9kZXNjX2FyZWEgPSBOVUxMOworfQorCisKKy8qCisgKiBTY2FuIGEgbGlzdCBvZiBCU1NJRHMgdG8gcHJvY2VzcyBmb3IgZmluYWxpemUgam9pbi4KKyAqIEFsbG93cyBmb3IgZXh0ZW5zaW9uIHRvIHByb2Nlc3MgbXVsdGlwbGUgQlNTSURzLgorICovCitzdGF0aWMgaW5saW5lIGludAorbXdsOGtfY2FwdHVyZV9ic3NpZChzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKndoKQoreworCXJldHVybiBwcml2LT5jYXB0dXJlX2JlYWNvbiAmJgorCQlpZWVlODAyMTFfaXNfYmVhY29uKHdoLT5mcmFtZV9jb250cm9sKSAmJgorCQkhY29tcGFyZV9ldGhlcl9hZGRyKHdoLT5hZGRyMywgcHJpdi0+Y2FwdHVyZV9ic3NpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2w4a19zYXZlX2JlYWNvbihzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXByaXYtPmNhcHR1cmVfYmVhY29uID0gZmFsc2U7CisJbWVtc2V0KHByaXYtPmNhcHR1cmVfYnNzaWQsIDAsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwkvKgorCSAqIFVzZSBHRlBfQVRPTUlDIGFzIHJ4cV9wcm9jZXNzIGlzIGNhbGxlZCBmcm9tCisJICogdGhlIHByaW1hcnkgaW50ZXJydXB0IGhhbmRsZXIsIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGwKKwkgKiBtdXN0IG5vdCBzbGVlcC4KKwkgKi8KKwlwcml2LT5iZWFjb25fc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAocHJpdi0+YmVhY29uX3NrYiAhPSBOVUxMKQorCQlxdWV1ZV93b3JrKHByaXYtPmNvbmZpZ193cSwKKwkJCQkmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIpOworfQorCitzdGF0aWMgaW50IHJ4cV9wcm9jZXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSAqcnhxID0gcHJpdi0+cnhxICsgaW5kZXg7CisJaW50IHByb2Nlc3NlZDsKKworCXByb2Nlc3NlZCA9IDA7CisJd2hpbGUgKHJ4cS0+cnhfZGVzY19jb3VudCAmJiBsaW1pdC0tKSB7CisJCXN0cnVjdCBtd2w4a19yeF9kZXNjICpyeF9kZXNjOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOworCisJCXJ4X2Rlc2MgPSByeHEtPnJ4X2Rlc2NfYXJlYSArIHJ4cS0+cnhfaGVhZDsKKwkJaWYgKCEocnhfZGVzYy0+cnhfY3RybCAmIE1XTDhLX1JYX0NUUkxfT1dORURfQllfSE9TVCkpCisJCQlicmVhazsKKwkJcm1iKCk7CisKKwkJc2tiID0gcnhxLT5yeF9za2JbcnhxLT5yeF9oZWFkXTsKKwkJcnhxLT5yeF9za2JbcnhxLT5yeF9oZWFkXSA9IE5VTEw7CisKKwkJcnhxLT5yeF9oZWFkID0gKHJ4cS0+cnhfaGVhZCArIDEpICUgTVdMOEtfUlhfREVTQ1M7CisJCXJ4cS0+cnhfZGVzY19jb3VudC0tOworCisJCWFkZHIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT5wa3RfcGh5c19hZGRyKTsKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBhZGRyLAorCQkJCQlNV0w4S19SWF9NQVhTWiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQlza2JfcHV0KHNrYiwgbGUxNl90b19jcHUocnhfZGVzYy0+cGt0X2xlbikpOworCQlpZiAobXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc2tiKSkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJY29udGludWU7CisJCX0KKworCQl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKworCQkvKgorCQkgKiBDaGVjayBmb3IgcGVuZGluZyBqb2luIG9wZXJhdGlvbi4gc2F2ZSBhIGNvcHkgb2YKKwkJICogdGhlIGJlYWNvbiBhbmQgc2NoZWR1bGUgYSB0YXNrbGV0IHRvIHNlbmQgZmluYWxpemUKKwkJICogam9pbiBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZS4KKwkJICovCisJCWlmIChtd2w4a19jYXB0dXJlX2Jzc2lkKHByaXYsIHdoKSkKKwkJCW13bDhrX3NhdmVfYmVhY29uKHByaXYsIHNrYik7CisKKwkJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKKwkJc3RhdHVzLm1hY3RpbWUgPSAwOworCQlzdGF0dXMuc2lnbmFsID0gLXJ4X2Rlc2MtPnJzc2k7CisJCXN0YXR1cy5ub2lzZSA9IC1yeF9kZXNjLT5ub2lzZV9sZXZlbDsKKwkJc3RhdHVzLnF1YWwgPSByeF9kZXNjLT5saW5rX3F1YWxpdHk7CisJCXN0YXR1cy5hbnRlbm5hID0gMTsKKwkJc3RhdHVzLnJhdGVfaWR4ID0gMTsKKwkJc3RhdHVzLmZsYWcgPSAwOworCQlzdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJCXN0YXR1cy5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHJ4X2Rlc2MtPmNoYW5uZWwpOworCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiLCAmc3RhdHVzKTsKKworCQlwcm9jZXNzZWQrKzsKKwl9CisKKwlyZXR1cm4gcHJvY2Vzc2VkOworfQorCisKKy8qCisgKiBQYWNrZXQgdHJhbnNtaXNzaW9uLgorICovCisKKy8qIFRyYW5zbWl0IHF1ZXVlIGFzc2lnbm1lbnQuICAqLworZW51bSB7CisJTVdMOEtfV01FX0FDX0JLCT0gMCwJCS8qIGJhY2tncm91bmQgYWNjZXNzICovCisJTVdMOEtfV01FX0FDX0JFCT0gMSwJCS8qIGJlc3QgZWZmb3J0IGFjY2VzcyAqLworCU1XTDhLX1dNRV9BQ19WSQk9IDIsCQkvKiB2aWRlbyBhY2Nlc3MgKi8KKwlNV0w4S19XTUVfQUNfVk8JPSAzLAkJLyogdm9pY2UgYWNjZXNzICovCit9OworCisvKiBUcmFuc21pdCBwYWNrZXQgQUNLIHBvbGljeSAqLworI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwJCTAKKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9ORQkJMQorI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9OT19FWFBMSUNJVAkyCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX0JMT0NLQUNLCQkzCisKKyNkZWZpbmUgR0VUX1RYUShfYWMpIChcCisJCSgoX2FjKSA9PSBXTUVfQUNfVk8pID8gTVdMOEtfV01FX0FDX1ZPIDogXAorCQkoKF9hYykgPT0gV01FX0FDX1ZJKSA/IE1XTDhLX1dNRV9BQ19WSSA6IFwKKwkJKChfYWMpID09IFdNRV9BQ19CSykgPyBNV0w4S19XTUVfQUNfQksgOiBcCisJCU1XTDhLX1dNRV9BQ19CRSkKKworI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0lETEUJCQkweDAwMDAwMDAwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfVVNFRAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PSwkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWQkJMHgwMDAwMDAwMgorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LX01PUkVfUkVUUlkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFgJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19CUk9BRENBU1RfVFgJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfTElOS19FUlJPUgkweDAwMDAwMDIwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRkFJTEVEX0VYQ0VFRF9MSU1JVAkweDAwMDAwMDQwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRkFJTEVEX0FHSU5HCQkweDAwMDAwMDgwCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfSE9TVF9DTUQJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRAkJMHg4MDAwMDAwMAorI2RlZmluZSAgTVdMOEtfVFhEX1NPRlRTVEFMRQkJCQkweDgwCisjZGVmaW5lICBNV0w4S19UWERfU09GVFNUQUxFX01HTVRfUkVUUlkJCQkweDAxCisKK3N0cnVjdCBtd2w4a190eF9kZXNjIHsKKwlfX2xlMzIgc3RhdHVzOworCV9fdTggZGF0YV9yYXRlOworCV9fdTggdHhfcHJpb3JpdHk7CisJX19sZTE2IHFvc19jb250cm9sOworCV9fbGUzMiBwa3RfcGh5c19hZGRyOworCV9fbGUxNiBwa3RfbGVuOworCV9fdTggZGVzdF9NQUNfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCV9fbGUzMiBuZXh0X3R4X2Rlc2NfcGh5c19hZGRyOworCV9fbGUzMiByZXNlcnZlZDsKKwlfX2xlMTYgcmF0ZV9pbmZvOworCV9fdTggcGVlcl9pZDsKKwlfX3U4IHR4X2ZyYWdfY250OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19UWF9ERVNDUwkJMTI4CisKK3N0YXRpYyBpbnQgbXdsOGtfdHhxX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CisJaW50IHNpemU7CisJaW50IGk7CisKKwltZW1zZXQoJnR4cS0+dHhfc3RhdHMsIDAsCisJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7CisJdHhxLT50eF9zdGF0cy5saW1pdCA9IE1XTDhLX1RYX0RFU0NTOworCXR4cS0+dHhfaGVhZCA9IDA7CisJdHhxLT50eF90YWlsID0gMDsKKworCXNpemUgPSBNV0w4S19UWF9ERVNDUyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfdHhfZGVzYyk7CisKKwl0eHEtPnR4X2Rlc2NfYXJlYSA9CisJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsICZ0eHEtPnR4X2Rlc2NfZG1hKTsKKwlpZiAodHhxLT50eF9kZXNjX2FyZWEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2MgVFggZGVzY3JpcHRvcnNcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0eHEtPnR4X2Rlc2NfYXJlYSwgMCwgc2l6ZSk7CisKKwl0eHEtPnR4X3NrYiA9IGttYWxsb2MoTVdMOEtfVFhfREVTQ1MgKiBzaXplb2YoKnR4cS0+dHhfc2tiKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHR4cS0+dHhfc2tiID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jIFRYIHNrYnVmZiBsaXN0XG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwKKwkJCQkgICAgdHhxLT50eF9kZXNjX2FyZWEsIHR4cS0+dHhfZGVzY19kbWEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHR4cS0+dHhfc2tiLCAwLCBNV0w4S19UWF9ERVNDUyAqIHNpemVvZigqdHhxLT50eF9za2IpKTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9ERVNDUzsgaSsrKSB7CisJCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOworCQlpbnQgbmV4dGk7CisKKwkJdHhfZGVzYyA9IHR4cS0+dHhfZGVzY19hcmVhICsgaTsKKwkJbmV4dGkgPSAoaSArIDEpICUgTVdMOEtfVFhfREVTQ1M7CisKKwkJdHhfZGVzYy0+c3RhdHVzID0gMDsKKwkJdHhfZGVzYy0+bmV4dF90eF9kZXNjX3BoeXNfYWRkciA9CisJCQljcHVfdG9fbGUzMih0eHEtPnR4X2Rlc2NfZG1hICsKKwkJCQkJCW5leHRpICogc2l6ZW9mKCp0eF9kZXNjKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2w4a190eF9zdGFydChzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9QUEFfUkVBRFksCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAorCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXdsOGtfdHhxX2J1c3koc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHByaXYtPnBlbmRpbmdfdHhfcGt0czsKK30KKworc3RydWN0IG13bDhrX3R4cV9pbmZvIHsKKwl1MzIgZndfb3duZWQ7CisJdTMyIGRydl9vd25lZDsKKwl1MzIgdW51c2VkOworCXUzMiBsZW47CisJdTMyIGhlYWQ7CisJdTMyIHRhaWw7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3NjYW5fdHhfcmluZyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgbXdsOGtfdHhxX2luZm8gdHhpbmZvW10sCisJCQkJdTMyIG51bV9xdWV1ZXMpCit7CisJaW50IGNvdW50LCBkZXNjLCBzdGF0dXM7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CisJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4X2Rlc2M7CisJaW50IG5kZXNjcyA9IDA7CisKKwltZW1zZXQodHhpbmZvLCAwLCBudW1fcXVldWVzICogc2l6ZW9mKHN0cnVjdCBtd2w4a190eHFfaW5mbykpOworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbnVtX3F1ZXVlczsgY291bnQrKykgeworCQl0eHEgPSBwcml2LT50eHEgKyBjb3VudDsKKwkJdHhpbmZvW2NvdW50XS5sZW4gPSB0eHEtPnR4X3N0YXRzLmxlbjsKKwkJdHhpbmZvW2NvdW50XS5oZWFkID0gdHhxLT50eF9oZWFkOworCQl0eGluZm9bY291bnRdLnRhaWwgPSB0eHEtPnR4X3RhaWw7CisJCWZvciAoZGVzYyA9IDA7IGRlc2MgPCBNV0w4S19UWF9ERVNDUzsgZGVzYysrKSB7CisJCQl0eF9kZXNjID0gdHhxLT50eF9kZXNjX2FyZWEgKyBkZXNjOworCQkJc3RhdHVzID0gbGUzMl90b19jcHUodHhfZGVzYy0+c3RhdHVzKTsKKworCQkJaWYgKHN0YXR1cyAmIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQpCisJCQkJdHhpbmZvW2NvdW50XS5md19vd25lZCsrOworCQkJZWxzZQorCQkJCXR4aW5mb1tjb3VudF0uZHJ2X293bmVkKys7CisKKwkJCWlmICh0eF9kZXNjLT5wa3RfbGVuID09IDApCisJCQkJdHhpbmZvW2NvdW50XS51bnVzZWQrKzsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlyZXR1cm4gbmRlc2NzOworfQorCitzdGF0aWMgaW50IG13bDhrX3R4X3dhaXRfZW1wdHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBkZWxheV9tcykKK3sKKwl1MzIgY291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjbWRfd2FpdCk7CisKKwltaWdodF9zbGVlcCgpOworCisJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIFByZXZpb3VzIFRYV2FpdEVtcHR5IGluc3RhbmNlXG4iKTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJY291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKKwlpZiAoY291bnQpIHsKKwkJcHJpdi0+dHhfd2FpdCA9ICZjbWRfd2FpdDsKKwkJaWYgKHByaXYtPnJhZGlvX3N0YXRlKQorCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCWlmIChjb3VudCkgeworCQlzdHJ1Y3QgbXdsOGtfdHhxX2luZm8gdHhpbmZvWzRdOworCQlpbnQgaW5kZXg7CisJCWludCBuZXdjb3VudDsKKworCQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbWRfd2FpdCwKKwkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheV9tcykpOworCQlpZiAodGltZW91dCkKKwkJCXJldHVybiAwOworCisJCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJCXByaXYtPnR4X3dhaXQgPSBOVUxMOworCQluZXdjb3VudCA9IG13bDhrX3R4cV9idXN5KHByaXYpOworCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygldSkgVElNRURPVVQ6JXVtcyBQZW5kOiV1LS0+JXVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIGRlbGF5X21zLCBjb3VudCwgbmV3Y291bnQpOworCisJCW13bDhrX3NjYW5fdHhfcmluZyhwcml2LCB0eGluZm8sIDQpOworCQlmb3IgKGluZGV4ID0gMCA7IGluZGV4IDwgNDsgaW5kZXgrKykKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJUWFE6JXUgTDoldSBIOiV1IFQ6JXUgRlc6JXUgRFJWOiV1IFU6JXVcbiIsCisJCQkJCWluZGV4LAorCQkJCQl0eGluZm9baW5kZXhdLmxlbiwKKwkJCQkJdHhpbmZvW2luZGV4XS5oZWFkLAorCQkJCQl0eGluZm9baW5kZXhdLnRhaWwsCisJCQkJCXR4aW5mb1tpbmRleF0uZndfb3duZWQsCisJCQkJCXR4aW5mb1tpbmRleF0uZHJ2X293bmVkLAorCQkJCQl0eGluZm9baW5kZXhdLnVudXNlZCk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIE1XTDhLX1RYRF9PSwkoTVdMOEtfVFhEX1NUQVRVU19PSyB8IFwKKwkJCSBNV0w4S19UWERfU1RBVFVTX09LX1JFVFJZIHwgXAorCQkJIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWSkKKyNkZWZpbmUgTVdMOEtfVFhEX1NVQ0NFU1Moc3RhdCkJCSgoc3RhdCkgJiBNV0w4S19UWERfT0spCisjZGVmaW5lIE1XTDhLX1RYRF9GQUlMX1JFVFJZKHN0YXQpCVwKKwkoKHN0YXQpICYgKE1XTDhLX1RYRF9TVEFUVVNfRkFJTEVEX0VYQ0VFRF9MSU1JVCkpCisKK3N0YXRpYyB2b2lkIG13bDhrX3R4cV9yZWNsYWltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBmb3JjZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CisJaW50IHdha2UgPSAwOworCisJd2hpbGUgKHR4cS0+dHhfc3RhdHMubGVuID4gMCkgeworCQlpbnQgdHg7CisJCWludCByYzsKKwkJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4X2Rlc2M7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJc2l6ZV90IHNpemU7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwkJdTMyIHN0YXR1czsKKworCQlyYyA9IDA7CisJCXR4ID0gdHhxLT50eF9oZWFkOworCQl0eF9kZXNjID0gdHhxLT50eF9kZXNjX2FyZWEgKyB0eDsKKworCQlzdGF0dXMgPSBsZTMyX3RvX2NwdSh0eF9kZXNjLT5zdGF0dXMpOworCisJCWlmIChzdGF0dXMgJiBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKSB7CisJCQlpZiAoIWZvcmNlKQorCQkJCWJyZWFrOworCQkJdHhfZGVzYy0+c3RhdHVzICY9CisJCQkJfmNwdV90b19sZTMyKE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQpOworCQl9CisKKwkJdHhxLT50eF9oZWFkID0gKHR4ICsgMSkgJSBNV0w4S19UWF9ERVNDUzsKKwkJQlVHX09OKHR4cS0+dHhfc3RhdHMubGVuID09IDApOworCQl0eHEtPnR4X3N0YXRzLmxlbi0tOworCQlwcml2LT5wZW5kaW5nX3R4X3BrdHMtLTsKKworCQlhZGRyID0gbGUzMl90b19jcHUodHhfZGVzYy0+cGt0X3BoeXNfYWRkcik7CisJCXNpemUgPSAodTMyKShsZTE2X3RvX2NwdSh0eF9kZXNjLT5wa3RfbGVuKSk7CisJCXNrYiA9IHR4cS0+dHhfc2tiW3R4XS5za2I7CisJCXR4cS0+dHhfc2tiW3R4XS5za2IgPSBOVUxMOworCisJCUJVR19PTihza2IgPT0gTlVMTCk7CisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgYWRkciwgc2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJcmMgPSBtd2w4a19yZW1vdmVfZG1hX2hlYWRlcihza2IpOworCisJCS8qIE1hcmsgZGVzY3JpcHRvciBhcyB1bnVzZWQgKi8KKwkJdHhfZGVzYy0+cGt0X3BoeXNfYWRkciA9IDA7CisJCXR4X2Rlc2MtPnBrdF9sZW4gPSAwOworCisJCWlmICh0eHEtPnR4X3NrYlt0eF0uY2xvbmUpIHsKKwkJCS8qIFJlcGxhY2Ugd2l0aCBvcmlnaW5hbCBza2IKKwkJCSAqIGJlZm9yZSByZXR1cm5pbmcgdG8gc3RhY2sKKwkJCSAqIGFzIGJ1ZmZlciBoYXMgYmVlbiBjbG9uZWQKKwkJCSAqLworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJc2tiID0gdHhxLT50eF9za2JbdHhdLmNsb25lOworCQkJdHhxLT50eF9za2JbdHhdLmNsb25lID0gTlVMTDsKKwkJfQorCisJCWlmIChyYykgeworCQkJLyogU29tZXRoaW5nIGhhcyBnb25lIHdyb25nIGhlcmUuCisJCQkgKiBGYWlsZWQgdG8gcmVtb3ZlIERNQSBoZWFkZXIuCisJCQkgKiBQcmludCBlcnJvciBtZXNzYWdlIGFuZCBkcm9wIHBhY2tldC4KKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgcmVtb3ZpbmcgRE1BIGhlYWRlciBmcm9tICIKKwkJCQkJInR4IHNrYiAweCVwLlxuIiwgcHJpdi0+bmFtZSwgc2tiKTsKKworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJY29udGludWU7CisJCX0KKworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CisKKwkJLyogQ29udmVydCBmaXJtd2FyZSBzdGF0dXMgc3R1ZmYgaW50byB0eF9zdGF0dXMgKi8KKwkJaWYgKE1XTDhLX1RYRF9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCS8qIFRyYW5zbWl0IE9LICovCisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCX0KKworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CisKKwkJd2FrZSA9ICFwcml2LT5pbmNvbmZpZyAmJiBwcml2LT5yYWRpb19zdGF0ZTsKKwl9CisKKwlpZiAod2FrZSkKKwkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIGluZGV4KTsKK30KKworLyogbXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIHRoZSBjYXJkJ3MgdHJhbnNtaXQgaXMgY29tcGxldGVseSBoYWx0ZWQgKi8KK3N0YXRpYyB2b2lkIG13bDhrX3R4cV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CisKKwltd2w4a190eHFfcmVjbGFpbShodywgaW5kZXgsIDEpOworCisJa2ZyZWUodHhxLT50eF9za2IpOworCXR4cS0+dHhfc2tiID0gTlVMTDsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwKKwkJCSAgICBNV0w4S19UWF9ERVNDUyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfdHhfZGVzYyksCisJCQkgICAgdHhxLT50eF9kZXNjX2FyZWEsIHR4cS0+dHhfZGVzY19kbWEpOworCXR4cS0+dHhfZGVzY19hcmVhID0gTlVMTDsKK30KKworc3RhdGljIGludAorbXdsOGtfdHhxX3htaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CisJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4OworCXN0cnVjdCBtd2w4a19kbWFfZGF0YSAqdHI7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmOworCXN0cnVjdCBza19idWZmICpvcmdfc2tiID0gc2tiOworCWRtYV9hZGRyX3QgZG1hOworCXUxNiBxb3MgPSAwOworCWJvb2wgcW9zZnJhbWUgPSBmYWxzZSwgYW1wZHVmcmFtZSA9IGZhbHNlOworCWJvb2wgbWNmcmFtZSA9IGZhbHNlLCBlYXBvbGZyYW1lID0gZmFsc2U7CisJYm9vbCBhbXNkdWZyYW1lID0gZmFsc2U7CisJX19sZTE2IGZjOworCisJdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CisJdHggPSB0eHEtPnR4X2Rlc2NfYXJlYSArIHR4cS0+dHhfdGFpbDsKKworCUJVR19PTih0eHEtPnR4X3NrYlt0eHEtPnR4X3RhaWxdLnNrYiAhPSBOVUxMKTsKKworCS8qCisJICogQXBwZW5kIEhXIERNQSBoZWFkZXIgdG8gc3RhcnQgb2YgcGFja2V0LiAgRHJvcCBwYWNrZXQgaWYKKwkgKiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIG9yIGEgZmFpbHVyZSB0byB1bnNoYXJlL3VuY2xvbmUKKwkgKiB0aGUgc2tiLgorCSAqLworCXNrYiA9IG13bDhrX2FkZF9kbWFfaGVhZGVyKHNrYik7CisKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gcHJlcGVuZCBIVyBETUEgIgorCQkJImhlYWRlciwgZHJvcHBpbmcgVFggZnJhbWUuXG4iLCBwcml2LT5uYW1lKTsKKwkJZGV2X2tmcmVlX3NrYihvcmdfc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCW13bDhrX3ZpZiA9IE1XTDhLX1ZJRih0eF9pbmZvLT5jb250cm9sLnZpZik7CisJdHIgPSAoc3RydWN0IG13bDhrX2RtYV9kYXRhICopc2tiLT5kYXRhOworCXdoID0gJnRyLT53aDsKKwlmYyA9IHdoLT5mcmFtZV9jb250cm9sOworCXFvc2ZyYW1lID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKTsKKwltY2ZyYW1lID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIod2gtPmFkZHIxKTsKKwlhbXBkdWZyYW1lID0gISEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKTsKKworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkgeworCQl1MTYgc2Vxbm8gPSBtd2w4a192aWYtPnNlcW5vOworCQl3aC0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CisJCXdoLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihzZXFubyA8PCA0KTsKKwkJbXdsOGtfdmlmLT5zZXFubyA9IHNlcW5vKysgJSA0MDk2OworCX0KKworCWlmIChxb3NmcmFtZSkKKwkJcW9zID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopaWVlZTgwMjExX2dldF9xb3NfY3RsKHdoKSkpOworCisJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLAorCQkJCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBkbWEgbWFwIHNrYiwgIgorCQkJImRyb3BwaW5nIFRYIGZyYW1lLlxuIiwgcHJpdi0+bmFtZSk7CisKKwkJaWYgKG9yZ19za2IgIT0gTlVMTCkKKwkJCWRldl9rZnJlZV9za2Iob3JnX3NrYik7CisJCWlmIChza2IgIT0gTlVMTCkKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwkvKiBTZXQgZGVzYyBoZWFkZXIsIGNwdSBiaXQgb3JkZXIuICAqLworCXR4LT5zdGF0dXMgPSAwOworCXR4LT5kYXRhX3JhdGUgPSAwOworCXR4LT50eF9wcmlvcml0eSA9IGluZGV4OworCXR4LT5xb3NfY29udHJvbCA9IDA7CisJdHgtPnJhdGVfaW5mbyA9IDA7CisJdHgtPnBlZXJfaWQgPSBtd2w4a192aWYtPnBlZXJfaWQ7CisKKwlhbXNkdWZyYW1lID0gISEocW9zICYgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UKTsKKworCS8qIFNldHVwIGZpcm13YXJlIGNvbnRyb2wgYml0IGZpZWxkcyBmb3IgZWFjaCBmcmFtZSB0eXBlLiAgKi8KKwlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpIHx8IGllZWU4MDIxMV9pc19jdGwoZmMpKSB7CisJCXR4LT5kYXRhX3JhdGUgPSAwOworCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AocW9zKTsKKwkJLyogU2V0IFF1ZXVlIHNpemUgdG8gdW5zcGVjaWZpZWQgKi8KKwkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9xbGVuKHFvcywgMHhmZik7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJdHgtPmRhdGFfcmF0ZSA9IDE7CisJCWlmIChtY2ZyYW1lKQorCQkJdHgtPnN0YXR1cyB8PSBNV0w4S19UWERfU1RBVFVTX01VTFRJQ0FTVF9UWDsKKworCQkvKgorCQkgKiBUZWxsIGZpcm13YXJlIHRvIG5vdCBzZW5kIEVBUE9MIHBrdHMgaW4gYW4KKwkJICogYWdncmVnYXRlLiAgVmVyaWZ5IGFnYWluc3QgbWFjODAyMTEgdHggcGF0aC4gIElmCisJCSAqIHN0YWNrIHR1cm5zIG9mZiBBTVBEVSBmb3IgYW4gRUFQT0wgZnJhbWUgdGhpcworCQkgKiBjaGVjayB3aWxsIGJlIHJlbW92ZWQuCisJCSAqLworCQlpZiAoZWFwb2xmcmFtZSkgeworCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAorCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTCk7CisJCX0gZWxzZSB7CisJCQkvKiBTZW5kIHBrdCBpbiBhbiBhZ2dyZWdhdGUgaWYgQU1QRFUgZnJhbWUuICAqLworCQkJaWYgKGFtcGR1ZnJhbWUpCisJCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAorCQkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSyk7CisJCQllbHNlCisJCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAorCQkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOworCisJCQlpZiAoYW1zZHVmcmFtZSkKKwkJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Ftc2R1KHFvcyk7CisJCX0KKwl9CisKKwkvKiBDb252ZXJ0IHRvIGxpdHRsZSBlbmRpYW4gKi8KKwl0eC0+cW9zX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihxb3MpOworCXR4LT5zdGF0dXMgPSBjcHVfdG9fbGUzMih0eC0+c3RhdHVzKTsKKwl0eC0+cGt0X3BoeXNfYWRkciA9IGNwdV90b19sZTMyKGRtYSk7CisJdHgtPnBrdF9sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisKKwl0eHEtPnR4X3NrYlt0eHEtPnR4X3RhaWxdLnNrYiA9IHNrYjsKKwl0eHEtPnR4X3NrYlt0eHEtPnR4X3RhaWxdLmNsb25lID0KKwkJc2tiID09IG9yZ19za2IgPyBOVUxMIDogb3JnX3NrYjsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhEX1NUQVRVU19PSyB8CisJCQkJCU1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQpOworCXdtYigpOworCXR4cS0+dHhfc3RhdHMubGVuKys7CisJcHJpdi0+cGVuZGluZ190eF9wa3RzKys7CisJdHhxLT50eF9zdGF0cy5jb3VudCsrOworCXR4cS0+dHhfdGFpbCsrOworCisJaWYgKHR4cS0+dHhfdGFpbCA9PSBNV0w4S19UWF9ERVNDUykKKwkJdHhxLT50eF90YWlsID0gMDsKKwlpZiAodHhxLT50eF9oZWFkID09IHR4cS0+dHhfdGFpbCkKKwkJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIGluZGV4KTsKKworCWlmIChwcml2LT5pbmNvbmZpZykgeworCQkvKgorCQkgKiBTaWxlbnRseSBxdWV1ZSBwYWNrZXQgd2hlbiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgorCQkgKiBhIGNvbmZpZyBjeWNsZS4gIE5vdGlmeSBmaXJtd2FyZSBvbmx5IGlmIHdlIGFyZQorCQkgKiB3YWl0aW5nIGZvciBUWFFzIHRvIGVtcHR5LiAgSWYgYSBwYWNrZXQgaXMgc2VudAorCQkgKiBiZWZvcmUgLmNvbmZpZygpIGlzIGNvbXBsZXRlLCBwZXJoYXBzIGl0IGlzIGJldHRlcgorCQkgKiB0byBkcm9wIHRoZSBwYWNrZXQsIGFzIHRoZSBjaGFubmVsIGlzIGJlaW5nIGNoYW5nZWQKKwkJICogYW5kIHRoZSBwYWNrZXQgd2lsbCBlbmQgdXAgb24gdGhlIHdyb25nIGNoYW5uZWwuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IFdBUk5JTkcgVFggYWN0aXZpdHkgd2hpbGUgIgorCQkJImluIGNvbmZpZ1xuIiwgX19mdW5jX18pOworCisJCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpCisJCQltd2w4a190eF9zdGFydChwcml2KTsKKwl9IGVsc2UKKwkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisKKy8qCisgKiBDb21tYW5kIHByb2Nlc3NpbmcuCisgKi8KKworLyogVGltZW91dCBmaXJtd2FyZSBjb21tYW5kcyBhZnRlciAyMDAwbXMgKi8KKyNkZWZpbmUgTVdMOEtfQ01EX1RJTUVPVVRfTVMJMjAwMAorCitzdGF0aWMgaW50IG13bDhrX3Bvc3RfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgbXdsOGtfY21kX3BrdCAqY21kKQoreworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNtZF93YWl0KTsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXZvaWQgX19pb21lbSAqcmVncyA9IHByaXYtPnJlZ3M7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1bnNpZ25lZCBpbnQgZG1hX3NpemU7CisJaW50IHJjOworCXUxNiBfX2lvbWVtICpyZXN1bHQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKwl1OCBidWZbMzJdOworCisJY21kLT5yZXN1bHQgPSAweEZGRkY7CisJZG1hX3NpemUgPSBsZTE2X3RvX2NwdShjbWQtPmxlbmd0aCk7CisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBjbWQsIGRtYV9zaXplLAorCQkJCSAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYV9hZGRyKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocHJpdi0+aG9zdGNtZF93YWl0ICE9IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3NcbiIpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7CisJcHJpdi0+aG9zdGNtZF93YWl0ID0gJmNtZF93YWl0OworCWlvd3JpdGUzMihkbWFfYWRkciwgcmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9ET09SQkVMTCwKKwkJcmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRFVNTVksCisJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7CisKKwl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbWRfd2FpdCwKKwkJCQltc2Vjc190b19qaWZmaWVzKE1XTDhLX0NNRF9USU1FT1VUX01TKSk7CisKKwlyZXN1bHQgPSAmY21kLT5yZXN1bHQ7CisJaWYgKCF0aW1lb3V0KSB7CisJCXNwaW5fbG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCQlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb21tYW5kICVzIHRpbWVvdXQgYWZ0ZXIgJXUgbXNcbiIsCisJCSAgICAgICBwcml2LT5uYW1lLAorCQkgICAgICAgbXdsOGtfY21kX25hbWUoY21kLT5jb2RlLCBidWYsIHNpemVvZihidWYpKSwKKwkJICAgICAgIE1XTDhLX0NNRF9USU1FT1VUX01TKTsKKwkJcmMgPSAtRVRJTUVET1VUOworCX0gZWxzZSB7CisJCXJjID0gKnJlc3VsdCA/IC1FSU5WQUwgOiAwOworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb21tYW5kICVzIGVycm9yIDB4JXhcbiIsCisJCQkgICAgICAgcHJpdi0+bmFtZSwKKwkJCSAgICAgICBtd2w4a19jbWRfbmFtZShjbWQtPmNvZGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpLAorCQkJICAgICAgICpyZXN1bHQpOworCX0KKworCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgZG1hX2FkZHIsIGRtYV9zaXplLAorCQkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIEdFVF9IV19TUEVDLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX2dldF9od19zcGVjIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX191OCBod19yZXY7CisJX191OCBob3N0X2ludGVyZmFjZTsKKwlfX2xlMTYgbnVtX21jYWRkcnM7CisJX191OCBwZXJtX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX2xlMTYgcmVnaW9uX2NvZGU7CisJX19sZTMyIGZ3X3JldjsKKwlfX2xlMzIgcHNfY29va2llOworCV9fbGUzMiBjYXBzOworCV9fdTggbWNzX2JpdG1hcFsxNl07CisJX19sZTMyIHJ4X3F1ZXVlX3B0cjsKKwlfX2xlMzIgbnVtX3R4X3F1ZXVlczsKKwlfX2xlMzIgdHhfcXVldWVfcHRyc1tNV0w4S19UWF9RVUVVRVNdOworCV9fbGUzMiBjYXBzMjsKKwlfX2xlMzIgbnVtX3R4X2Rlc2NfcGVyX3F1ZXVlOworCV9fbGUzMiB0b3RhbF9yeF9kZXNjOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfZ2V0X2h3X3NwZWMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfY21kX2dldF9od19zcGVjICpjbWQ7CisJaW50IHJjOworCWludCBpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVF9IV19TUEVDKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJbWVtc2V0KGNtZC0+cGVybV9hZGRyLCAweGZmLCBzaXplb2YoY21kLT5wZXJtX2FkZHIpKTsKKwljbWQtPnBzX2Nvb2tpZSA9IGNwdV90b19sZTMyKHByaXYtPmNvb2tpZV9kbWEpOworCWNtZC0+cnhfcXVldWVfcHRyID0gY3B1X3RvX2xlMzIocHJpdi0+cnhxWzBdLnJ4X2Rlc2NfZG1hKTsKKwljbWQtPm51bV90eF9xdWV1ZXMgPSBNV0w4S19UWF9RVUVVRVM7CisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQljbWQtPnR4X3F1ZXVlX3B0cnNbaV0gPSBjcHVfdG9fbGUzMihwcml2LT50eHFbaV0udHhfZGVzY19kbWEpOworCWNtZC0+bnVtX3R4X2Rlc2NfcGVyX3F1ZXVlID0gTVdMOEtfVFhfREVTQ1M7CisJY21kLT50b3RhbF9yeF9kZXNjID0gTVdMOEtfUlhfREVTQ1M7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCisJaWYgKCFyYykgeworCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgY21kLT5wZXJtX2FkZHIpOworCQlwcml2LT5udW1fbWNhZGRycyA9IGxlMTZfdG9fY3B1KGNtZC0+bnVtX21jYWRkcnMpOworCQlwcml2LT5md19yZXYgPSBjbWQtPmZ3X3JldjsKKwkJcHJpdi0+aHdfcmV2ID0gY21kLT5od19yZXY7CisJCXByaXYtPnJlZ2lvbl9jb2RlID0gbGUxNl90b19jcHUoY21kLT5yZWdpb25fY29kZSk7CisJfQorCisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfTUFDX01VTFRJQ0FTVF9BRFIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBudW1hZGRyOworCV9fdTggYWRkclsxXVtJRUVFODAyMTFfQUREUl9MRU5dOworfTsKKworI2RlZmluZSBNV0w4S19FTkFCTEVfUlhfTVVMVElDQVNUIDB4MDAwRgorc3RhdGljIGludCBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCWludCBtY19jb3VudCwKKwkJCQkJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyICpjbWQ7CisJaW50IGluZGV4ID0gMDsKKwlpbnQgcmM7CisJaW50IHNpemUgPSBzaXplb2YoKmNtZCkgKyAoKG1jX2NvdW50IC0gMSkgKiBJRUVFODAyMTFfQUREUl9MRU4pOworCWNtZCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfTUFDX01VTFRJQ0FTVF9BRFIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemUpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfRU5BQkxFX1JYX01VTFRJQ0FTVCk7CisJY21kLT5udW1hZGRyID0gY3B1X3RvX2xlMTYobWNfY291bnQpOworCXdoaWxlICgoaW5kZXggPCBtY19jb3VudCkgJiYgbWNsaXN0KSB7CisJCWlmIChtY2xpc3QtPmRhX2FkZHJsZW4gIT0gSUVFRTgwMjExX0FERFJfTEVOKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2Fkcl9leGl0OworCQl9CisJCW1lbWNweShjbWQtPmFkZHJbaW5kZXhdLCBtY2xpc3QtPmRhX2FkZHIsIElFRUU4MDIxMV9BRERSX0xFTik7CisJCWluZGV4Kys7CisJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwl9CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCittd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHJfZXhpdDoKKwlrZnJlZShjbWQpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF84MDJfMTFfR0VUX1NUQVQuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0IHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMzIgc3RhdHNbNjRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19TVEFUX0FDS19GQUlMVVJFCTkKKyNkZWZpbmUgTVdMOEtfU1RBVF9SVFNfRkFJTFVSRQkxMgorI2RlZmluZSBNV0w4S19TVEFUX0ZDU19FUlJPUgkyNAorI2RlZmluZSBNV0w4S19TVEFUX1JUU19TVUNDRVNTCTExCisKK3N0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfR0VUX1NUQVQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfR0VUKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJaWYgKCFyYykgeworCQlzdGF0cy0+ZG90MTFBQ0tGYWlsdXJlQ291bnQgPQorCQkJbGUzMl90b19jcHUoY21kLT5zdGF0c1tNV0w4S19TVEFUX0FDS19GQUlMVVJFXSk7CisJCXN0YXRzLT5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9CisJCQlsZTMyX3RvX2NwdShjbWQtPnN0YXRzW01XTDhLX1NUQVRfUlRTX0ZBSUxVUkVdKTsKKwkJc3RhdHMtPmRvdDExRkNTRXJyb3JDb3VudCA9CisJCQlsZTMyX3RvX2NwdShjbWQtPnN0YXRzW01XTDhLX1NUQVRfRkNTX0VSUk9SXSk7CisJCXN0YXRzLT5kb3QxMVJUU1N1Y2Nlc3NDb3VudCA9CisJCQlsZTMyX3RvX2NwdShjbWQtPnN0YXRzW01XTDhLX1NUQVRfUlRTX1NVQ0NFU1NdKTsKKwl9CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF84MDJfMTFfUkFESU9fQ09OVFJPTC4KKyAqLworc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IGNvbnRyb2w7CisJX19sZTE2IHJhZGlvX29uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sICpjbWQ7CisJaW50IHJjOworCisJaWYgKCgoZW5hYmxlICYgTVdMOEtfUkFESU9fRU5BQkxFKSA9PSBwcml2LT5yYWRpb19zdGF0ZSkgJiYKKwkgICAgIShlbmFibGUgJiBNV0w4S19SQURJT19GT1JDRSkpCisJCXJldHVybiAwOworCisJZW5hYmxlICY9IE1XTDhLX1JBRElPX0VOQUJMRTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SQURJT19DT05UUk9MKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5jb250cm9sID0gY3B1X3RvX2xlMTYocHJpdi0+cmFkaW9fcHJlYW1ibGUpOworCWNtZC0+cmFkaW9fb24gPSBjcHVfdG9fbGUxNihlbmFibGUgPyAweDAwMDEgOiAweDAwMDApOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJaWYgKCFyYykKKwkJcHJpdi0+cmFkaW9fc3RhdGUgPSBlbmFibGU7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX3NldF9yYWRpb19wcmVhbWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBzaG9ydF9wcmVhbWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKworCWlmIChodyA9PSBOVUxMIHx8IGh3LT5wcml2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXByaXYgPSBody0+cHJpdjsKKworCXByaXYtPnJhZGlvX3ByZWFtYmxlID0gKHNob3J0X3ByZWFtYmxlID8KKwkJTVdMOEtfUkFESU9fU0hPUlRfUFJFQU1CTEUgOgorCQlNV0w4S19SQURJT19MT05HX1BSRUFNQkxFKTsKKworCXJldHVybiBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsCisJCQlNV0w4S19SQURJT19FTkFCTEUgfCBNV0w4S19SQURJT19GT1JDRSk7Cit9CisKKy8qCisgKiBDTURfODAyXzExX1JGX1RYX1BPV0VSLgorICovCisjZGVmaW5lIE1XTDhLX1RYX1BPV0VSX0xFVkVMX1RPVEFMCTgKKworc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBzdXBwb3J0X2xldmVsOworCV9fbGUxNiBjdXJyZW50X2xldmVsOworCV9fbGUxNiByZXNlcnZlZDsKKwlfX2xlMTYgcG93ZXJfbGV2ZWxfbGlzdFtNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBkQm0pCit7CisJc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUkZfVFhfUE9XRVIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPnN1cHBvcnRfbGV2ZWwgPSBjcHVfdG9fbGUxNihkQm0pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9QUkVfU0NBTi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9wcmVfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9wcmVfc2NhbiAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUFJFX1NDQU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1BPU1RfU0NBTi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGlzaWJzczsKKwlfX3U4IGJzc2lkW0lFRUU4MDIxMV9BRERSX0xFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50Cittd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCBtYWNbSUVFRTgwMjExX0FERFJfTEVOXSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9wb3N0X3NjYW4gKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1BPU1RfU0NBTik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmlzaWJzcyA9IDA7CisJbWVtY3B5KGNtZC0+YnNzaWQsIG1hYywgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkZfQ0hBTk5FTC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX191OCBjdXJyZW50X2NoYW5uZWw7CisJX19sZTMyIGNoYW5uZWxfZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JGX0NIQU5ORUwpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPmN1cnJlbnRfY2hhbm5lbCA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCWlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCWNtZC0+Y2hhbm5lbF9mbGFncyA9IGNwdV90b19sZTMyKDB4MDAwMDAwODEpOworCWVsc2UKKwkJY21kLT5jaGFubmVsX2ZsYWdzID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1NMT1QuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3Nsb3QgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fdTggc2hvcnRfc2xvdDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9zbG90KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgc2xvdF90aW1lKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3Nsb3QgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1NMT1QpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPnNob3J0X3Nsb3QgPSBzbG90X3RpbWUgPT0gTVdMOEtfU0hPUlRfU0xPVFRJTUUgPyAxIDogMDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9NSU1PX0NPTkZJRy4KKyAqLworc3RydWN0IG13bDhrX2NtZF9taW1vX2NvbmZpZyB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBhY3Rpb247CisJX191OCByeF9hbnRlbm5hX21hcDsKKwlfX3U4IHR4X2FudGVubmFfbWFwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfbWltb19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggcngsIF9fdTggdHgpCit7CisJc3RydWN0IG13bDhrX2NtZF9taW1vX2NvbmZpZyAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9NSU1PX0NPTkZJRyk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKCh1MzIpTVdMOEtfQ01EX1NFVCk7CisJY21kLT5yeF9hbnRlbm5hX21hcCA9IHJ4OworCWNtZC0+dHhfYW50ZW5uYV9tYXAgPSB0eDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9FTkFCTEVfU05JRkZFUi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBhY3Rpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2VuYWJsZV9zbmlmZmVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gZW5hYmxlID8gY3B1X3RvX2xlMzIoKHUzMilNV0w4S19DTURfU0VUKSA6IDA7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JBVEVfQURBUFRfTU9ERS4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgbW9kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldHJhdGVhZGFwdG1vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTE2IG1vZGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9XTU1fTU9ERS4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfd21tIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfc2V0X3dtbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF93bW0gKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1dNTV9NT0RFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gZW5hYmxlID8gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCkgOiAwOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJaWYgKCFyYykKKwkJcHJpdi0+d21tX21vZGUgPSBlbmFibGU7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JUU19USFJFU0hPTEQuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfcnRzX3RocmVzaG9sZCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IHRocmVzaG9sZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICB1MTYgYWN0aW9uLCB1MTYgKnRocmVzaG9sZCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3J0c190aHJlc2hvbGQgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUlRTX1RIUkVTSE9MRCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGFjdGlvbik7CisJY21kLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNigqdGhyZXNob2xkKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfRURDQV9QQVJBTVMuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X2VkY2FfcGFyYW1zIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisKKwkvKiBTZWUgTVdMOEtfU0VUX0VEQ0FfWFhYIGJlbG93ICovCisJX19sZTE2IGFjdGlvbjsKKworCS8qIFRYIG9wcG9ydHVuaXR5IGluIHVuaXRzIG9mIDMyIHVzICovCisJX19sZTE2IHR4b3A7CisKKwkvKiBMb2cgZXhwb25lbnQgb2YgbWF4IGNvbnRlbnRpb24gcGVyaW9kOiAwLi4uMTUqLworCV9fdTggbG9nX2N3X21heDsKKworCS8qIExvZyBleHBvbmVudCBvZiBtaW4gY29udGVudGlvbiBwZXJpb2Q6IDAuLi4xNSAqLworCV9fdTggbG9nX2N3X21pbjsKKworCS8qIEFkYXB0aXZlIGludGVyZnJhbWUgc3BhY2luZyBpbiB1bml0cyBvZiAzMnVzICovCisJX191OCBhaWZzOworCisJLyogVFggcXVldWUgdG8gY29uZmlndXJlICovCisJX191OCB0eHE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX0dFVF9FRENBX0FMTAkwCisjZGVmaW5lIE1XTDhLX1NFVF9FRENBX0NXCTB4MDEKKyNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfVFhPUAkweDAyCisjZGVmaW5lIE1XTDhLX1NFVF9FRENBX0FJRlMJMHgwNAorCisjZGVmaW5lIE1XTDhLX1NFVF9FRENBX0FMTAkoTVdMOEtfU0VUX0VEQ0FfQ1cgfCBcCisJCQkJIE1XTDhLX1NFVF9FRENBX1RYT1AgfCBcCisJCQkJIE1XTDhLX1NFVF9FRENBX0FJRlMpCisKK3N0YXRpYyBpbnQKK213bDhrX3NldF9lZGNhX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCBxbnVtLAorCQlfX3UxNiBjd19taW4sIF9fdTE2IGN3X21heCwKKwkJX191OCBhaWZzLCBfX3UxNiB0eG9wKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X2VkY2FfcGFyYW1zICpjbWQ7CisJdTMyIGxvZ19jd19taW4sIGxvZ19jd19tYXg7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsb2dfY3dfbWluID0gaWxvZzIoY3dfbWluKzEpOworCWxvZ19jd19tYXggPSBpbG9nMihjd19tYXgrMSk7CisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfRURDQV9QQVJBTVMpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX1NFVF9FRENBX0FMTCk7CisJY21kLT50eG9wID0gY3B1X3RvX2xlMTYodHhvcCk7CisJY21kLT5sb2dfY3dfbWF4ID0gKHU4KWxvZ19jd19tYXg7CisJY21kLT5sb2dfY3dfbWluID0gKHU4KWxvZ19jd19taW47CisJY21kLT5haWZzID0gYWlmczsKKwljbWQtPnR4cSA9IHFudW07CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfRklOQUxJWkVfSk9JTi4KKyAqLworCisvKiBGSiBiZWFjb24gYnVmZmVyIHNpemUgaXMgY29tcGlsZWQgaW50byB0aGUgZmlybXdhcmUuICAqLworI2RlZmluZSBNV0w4S19GSl9CRUFDT05fTUFYTEVOCTEyOAorCitzdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgc2xlZXBfaW50ZXJ2YWw7CS8qIE51bWJlciBvZiBiZWFjb24gcGVyaW9kcyB0byBzbGVlcCAqLworCV9fdTggYmVhY29uX2RhdGFbTVdMOEtfRkpfQkVBQ09OX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2ZpbmFsaXplX2pvaW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmZyYW1lLAorCQkJCV9fdTE2IGZyYW1lbGVuLCBfX3UxNiBkdGltKQoreworCXN0cnVjdCBtd2w4a19jbWRfZmluYWxpemVfam9pbiAqY21kOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcGF5bG9hZCA9IGZyYW1lOworCXUxNiBoZHJsZW47CisJdTMyIHBheWxvYWRfbGVuOworCWludCByYzsKKworCWlmIChmcmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfRklOQUxJWkVfSk9JTik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWlmIChkdGltKQorCQljbWQtPnNsZWVwX2ludGVydmFsID0gY3B1X3RvX2xlMzIoZHRpbSk7CisJZWxzZQorCQljbWQtPnNsZWVwX2ludGVydmFsID0gY3B1X3RvX2xlMzIoMSk7CisKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKHBheWxvYWQtPmZyYW1lX2NvbnRyb2wpOworCisJcGF5bG9hZF9sZW4gPSBmcmFtZWxlbiA+IGhkcmxlbiA/IGZyYW1lbGVuIC0gaGRybGVuIDogMDsKKworCS8qIFhYWCBUQkQgTWlnaHQganVzdCBoYXZlIHRvIGFib3J0IGFuZCByZXR1cm4gYW4gZXJyb3IgKi8KKwlpZiAocGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IFdBUk5JTkc6IEluY29tcGxldGUgYmVhY29uICIKKwkJCSJzZW50IHRvIGZpcm13YXJlLiBTej0ldSBNQVg9JXVcbiIsIF9fZnVuY19fLAorCQkJcGF5bG9hZF9sZW4sIE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4pOworCisJcGF5bG9hZF9sZW4gPSBwYXlsb2FkX2xlbiA+IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4gPworCQkJCU1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4gOiBwYXlsb2FkX2xlbjsKKworCWlmIChwYXlsb2FkICYmIHBheWxvYWRfbGVuKQorCQltZW1jcHkoY21kLT5iZWFjb25fZGF0YSwgJnBheWxvYWQtPnUuYmVhY29uLCBwYXlsb2FkX2xlbik7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1VQREFURV9TVEFEQi4KKyAqLworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisKKwkvKiBTZWUgU1RBREJfQUNUSU9OX1RZUEUgKi8KKwlfX2xlMzIJYWN0aW9uOworCisJLyogUGVlciBNQUMgYWRkcmVzcyAqLworCV9fdTgJcGVlcl9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisKKwlfX2xlMzIJcmVzZXJ2ZWQ7CisKKwkvKiBQZWVyIGluZm8gLSB2YWxpZCBkdXJpbmcgYWRkL3VwZGF0ZS4gICovCisJc3RydWN0IHBlZXJfY2FwYWJpbGl0eV9pbmZvCXBlZXJfaW5mbzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIF9fdTMyIGFjdGlvbikKK3sKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvID0gJm12X3ZpZi0+YnNzX2luZm87CisJc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiICpjbWQ7CisJc3RydWN0IHBlZXJfY2FwYWJpbGl0eV9pbmZvICpwZWVyX2luZm87CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlcyA9IG12X3ZpZi0+bGVnYWN5X3JhdGVzOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCWludCByYzsKKwlfX3U4IGNvdW50LCAqcmF0ZXM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVBEQVRFX1NUQURCKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihhY3Rpb24pOworCXBlZXJfaW5mbyA9ICZjbWQtPnBlZXJfaW5mbzsKKwltZW1jcHkoY21kLT5wZWVyX2FkZHIsIG12X3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgTVdMOEtfU1RBX0RCX0FERF9FTlRSWToKKwljYXNlIE1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlk6CisJCS8qIEJ1aWxkIHBlZXJfaW5mbyBibG9jayAqLworCQlwZWVyX2luZm8tPnBlZXJfdHlwZSA9IE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVDsKKwkJcGVlcl9pbmZvLT5iYXNpY19jYXBzID0gY3B1X3RvX2xlMTYoaW5mby0+YXNzb2NfY2FwYWJpbGl0eSk7CisJCXBlZXJfaW5mby0+aW50ZXJvcCA9IDE7CisJCXBlZXJfaW5mby0+YW1zZHVfZW5hYmxlZCA9IDA7CisKKwkJcmF0ZXMgPSBwZWVyX2luZm8tPmxlZ2FjeV9yYXRlczsKKwkJZm9yIChjb3VudCA9IDAgOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJCXJhdGVzW2NvdW50XSA9IGJpdHJhdGVzW2NvdW50XS5od192YWx1ZTsKKworCQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCQlpZiAocmMgPT0gMCkKKwkJCW12X3ZpZi0+cGVlcl9pZCA9IHBlZXJfaW5mby0+c3RhdGlvbl9pZDsKKworCQlicmVhazsKKworCWNhc2UgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWToKKwljYXNlIE1XTDhLX1NUQV9EQl9GTFVTSDoKKwlkZWZhdWx0OgorCQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCQlpZiAocmMgPT0gMCkKKwkJCW12X3ZpZi0+cGVlcl9pZCA9IDA7CisJCWJyZWFrOworCX0KKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9BSUQuCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9ESVNBQkxFRAkJCTB4MDAKKyNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9OT05fTUVNQkVSX1BST1RfTU9ERQkJMHgwMQorI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX09ORV8yME1IWl9TVEFfUFJPVF9NT0RFCTB4MDIKKyNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9IVE1JWEVEX1BST1RfTU9ERQkJMHgwMworCisjZGVmaW5lIE1XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZCQkJMTQKKworI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVECQkJMHgwMAorI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExRwkJCQkweDA3CisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFkJCTB4MDIKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMCQkJMHgwNgorI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UX01BU0sJCQkJMHgwNworCitzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkIHsKKwlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2CWFpZDsKKworCSAvKiBBUCdzIE1BQyBhZGRyZXNzIChCU1NJRCkgKi8KKwlfX3U4CWJzc2lkW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX19sZTE2CXByb3RlY3Rpb25fbW9kZTsKKwlfX3U4CXN1cHBfcmF0ZXNbTVdMOEtfUkFURV9JTkRFWF9NQVhfQVJSQVldOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X2FpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvID0gJm12X3ZpZi0+YnNzX2luZm87CisJc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc2V0X2FpZCAqY21kOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXMgPSBtdl92aWYtPmxlZ2FjeV9yYXRlczsKKwlpbnQgY291bnQ7CisJdTE2IHByb3RfbW9kZTsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0FJRCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFpZCA9IGNwdV90b19sZTE2KGluZm8tPmFpZCk7CisKKwltZW1jcHkoY21kLT5ic3NpZCwgbXZfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQ7CisKKwlpZiAoaW5mby0+dXNlX2N0c19wcm90KSB7CisJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFHOworCX0gZWxzZSB7CisJCXN3aXRjaCAoaW5mby0+aHQub3BlcmF0aW9uX21vZGUgJgorCQkJSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTikgeworCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fMjBNSFo6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl9OT05IVF9NSVhFRDoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJY21kLT5wcm90ZWN0aW9uX21vZGUgPSBjcHVfdG9fbGUxNihwcm90X21vZGUpOworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbXZfdmlmLT5sZWdhY3lfbnJhdGVzOyBjb3VudCsrKQorCQljbWQtPnN1cHBfcmF0ZXNbY291bnRdID0gYml0cmF0ZXNbY291bnRdLmh3X3ZhbHVlOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SQVRFLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9yYXRlc2V0IHsKKwlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX191OAlsZWdhY3lfcmF0ZXNbTVdMOEtfUkFURV9JTkRFWF9NQVhfQVJSQVldOworCisJLyogQml0bWFwIGZvciBzdXBwb3J0ZWQgTUNTIGNvZGVzLiAgKi8KKwlfX3U4CW1jc19zZXRbTVdMOEtfSUVFRV9MRUdBQ1lfREFUQV9SQVRFU107CisJX191OAlyZXNlcnZlZFtNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfdXBkYXRlX3JhdGVzZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IG13bDhrX2NtZF91cGRhdGVfcmF0ZXNldCAqY21kOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXMgPSBtdl92aWYtPmxlZ2FjeV9yYXRlczsKKwlpbnQgY291bnQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbXZfdmlmLT5sZWdhY3lfbnJhdGVzOyBjb3VudCsrKQorCQljbWQtPmxlZ2FjeV9yYXRlc1tjb3VudF0gPSBiaXRyYXRlc1tjb3VudF0uaHdfdmFsdWU7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfVVNFX0ZJWEVEX1JBVEUuCisgKi8KKyNkZWZpbmUgTVdMOEtfUkFURV9UQUJMRV9TSVpFCTgKKyNkZWZpbmUgTVdMOEtfVUNBU1RfUkFURQkwCisjZGVmaW5lIE1XTDhLX01DQVNUX1JBVEUJMQorI2RlZmluZSBNV0w4S19CQ0FTVF9SQVRFCTIKKworI2RlZmluZSBNV0w4S19VU0VfRklYRURfUkFURQkweDAwMDEKKyNkZWZpbmUgTVdMOEtfVVNFX0FVVE9fUkFURQkweDAwMDIKKworc3RydWN0IG13bDhrX3JhdGVfZW50cnkgeworCS8qIFNldCB0byAxIGlmIEhUIHJhdGUsIDAgaWYgbGVnYWN5LiAgKi8KKwlfX2xlMzIJaXNfaHRfcmF0ZTsKKworCS8qIFNldCB0byAxIHRvIHVzZSByZXRyeV9jb3VudCBmaWVsZC4gICovCisJX19sZTMyCWVuYWJsZV9yZXRyeTsKKworCS8qIFNwZWNpZmllZCBsZWdhY3kgcmF0ZSBvciBNQ1MuICAqLworCV9fbGUzMglyYXRlOworCisJLyogTnVtYmVyIG9mIGFsbG93ZWQgcmV0cmllcy4gICovCisJX19sZTMyCXJldHJ5X2NvdW50OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG13bDhrX3JhdGVfdGFibGUgeworCS8qIDEgdG8gYWxsb3cgc3BlY2lmaWVkIHJhdGUgYW5kIGJlbG93ICovCisJX19sZTMyCWFsbG93X3JhdGVfZHJvcDsKKwlfX2xlMzIJbnVtX3JhdGVzOworCXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5IHJhdGVfZW50cnlbTVdMOEtfUkFURV9UQUJMRV9TSVpFXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUgeworCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIJYWN0aW9uOworCXN0cnVjdCBtd2w4a19yYXRlX3RhYmxlIHJhdGVfdGFibGU7CisKKwkvKiBVbmljYXN0LCBCcm9hZGNhc3Qgb3IgTXVsdGljYXN0ICovCisJX19sZTMyCXJhdGVfdHlwZTsKKwlfX2xlMzIJcmVzZXJ2ZWQxOworCV9fbGUzMglyZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwl1MzIgYWN0aW9uLCB1MzIgcmF0ZV90eXBlLCBzdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlICpjbWQ7CisJaW50IGNvdW50OworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9VU0VfRklYRURfUkFURSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsKKwljbWQtPnJhdGVfdHlwZSA9IGNwdV90b19sZTMyKHJhdGVfdHlwZSk7CisKKwlpZiAocmF0ZV90YWJsZSAhPSBOVUxMKSB7CisJCS8qIENvcHkgb3ZlciBlYWNoIGZpZWxkIG1hbnVhbGx5IHNvCisJCSogdGhhdCBiaXRmbGlwcGluZyBjYW4gYmUgZG9uZQorCQkqLworCQljbWQtPnJhdGVfdGFibGUuYWxsb3dfcmF0ZV9kcm9wID0KKwkJCQljcHVfdG9fbGUzMihyYXRlX3RhYmxlLT5hbGxvd19yYXRlX2Ryb3ApOworCQljbWQtPnJhdGVfdGFibGUubnVtX3JhdGVzID0KKwkJCQljcHVfdG9fbGUzMihyYXRlX3RhYmxlLT5udW1fcmF0ZXMpOworCisJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IHJhdGVfdGFibGUtPm51bV9yYXRlczsgY291bnQrKykgeworCQkJc3RydWN0IG13bDhrX3JhdGVfZW50cnkgKmRzdCA9CisJCQkJJmNtZC0+cmF0ZV90YWJsZS5yYXRlX2VudHJ5W2NvdW50XTsKKwkJCXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5ICpzcmMgPQorCQkJCSZyYXRlX3RhYmxlLT5yYXRlX2VudHJ5W2NvdW50XTsKKworCQkJZHN0LT5pc19odF9yYXRlID0gY3B1X3RvX2xlMzIoc3JjLT5pc19odF9yYXRlKTsKKwkJCWRzdC0+ZW5hYmxlX3JldHJ5ID0gY3B1X3RvX2xlMzIoc3JjLT5lbmFibGVfcmV0cnkpOworCQkJZHN0LT5yYXRlID0gY3B1X3RvX2xlMzIoc3JjLT5yYXRlKTsKKwkJCWRzdC0+cmV0cnlfY291bnQgPSBjcHVfdG9fbGUzMihzcmMtPnJldHJ5X2NvdW50KTsKKwkJfQorCX0KKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworCisvKgorICogSW50ZXJydXB0IGhhbmRsaW5nLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbXdsOGtfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldl9pZDsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwlpb3dyaXRlMzIofnN0YXR1cywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisKKwlzdGF0dXMgJj0gcHJpdi0+aW50X21hc2s7CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX1RYX0RPTkUpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWSkgeworCQl3aGlsZSAocnhxX3Byb2Nlc3MoaHcsIDAsIDEpKQorCQkJcnhxX3JlZmlsbChodywgMCwgMSk7CisJfQorCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUpIHsKKwkJaWYgKHByaXYtPmhvc3RjbWRfd2FpdCAhPSBOVUxMKSB7CisJCQljb21wbGV0ZShwcml2LT5ob3N0Y21kX3dhaXQpOworCQkJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZKSB7CisJCWlmICghcHJpdi0+aW5jb25maWcgJiYKKwkJCXByaXYtPnJhZGlvX3N0YXRlICYmCisJCQltd2w4a190eHFfYnVzeShwcml2KSkKKwkJCQltd2w4a190eF9zdGFydChwcml2KTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworLyoKKyAqIENvcmUgZHJpdmVyIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgbXdsOGtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlpbnQgcmM7CisKKwlpZiAocHJpdi0+Y3VycmVudF9jaGFubmVsID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIFRYIGZyYW1lIHNpbmNlIHJhZGlvICIKKwkJICAgICAgICJkaXNhYmxlZFxuIiwgcHJpdi0+bmFtZSk7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlyYyA9IG13bDhrX3R4cV94bWl0KGh3LCBpbmRleCwgc2tiKTsKKworCXJldHVybiByYzsKK30KKworc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IHsKKwkvKiBJbml0aWFsaXplZCBieSBtd2w4a19xdWV1ZV93b3JrKCkuICAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3dDsKKworCS8qIFJlcXVpcmVkIGZpZWxkIHBhc3NlZCBpbiB0byBtd2w4a19xdWV1ZV93b3JrKCkuICAqLworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJLyogUmVxdWlyZWQgZmllbGQgcGFzc2VkIGluIHRvIG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCisJaW50ICgqd2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqdyk7CisKKwkvKiBJbml0aWFsaXplZCBieSBtd2w4a19xdWV1ZV93b3JrKCkuICAqLworCXN0cnVjdCBjb21wbGV0aW9uICpjbWRfd2FpdDsKKworCS8qIFJlc3VsdCBjb2RlLiAgKi8KKwlpbnQgcmM7CisKKwkvKgorCSAqIE9wdGlvbmFsIGZpZWxkLiBSZWZlciB0byBleHBsYW5hdGlvbiBvZiBNV0w4S19XUV9YWFhfWFhYCisJICogZmxhZ3MgZm9yIGV4cGxhbmF0aW9uLiAgRGVmYXVsdHMgdG8gTVdMOEtfV1FfREVGQVVMVF9PUFRJT05TLgorCSAqLworCXUzMiBvcHRpb25zOworCisJLyogT3B0aW9uYWwgZmllbGQuICBEZWZhdWx0cyB0byBNV0w4S19DT05GSUdfVElNRU9VVF9NUy4gICovCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zOworCisJLyogT3B0aW9uYWwgZmllbGQuICBEZWZhdWx0cyB0byBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMuICAqLworCXUzMiB0eHdhaXRfYXR0ZW1wdHM7CisKKwkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX1RYV0FJVF9NUy4gICovCisJdTMyIHR4X3RpbWVvdXRfbXM7CisJdTMyIHN0ZXA7Cit9OworCisvKiBGbGFncyBjb250cm9sbGluZyBiZWhhdmlvciBvZiBjb25maWcgcXVldWUgcmVxdWVzdHMgKi8KKworLyogQ2FsbGVyIHNwaW5zIHdoaWxlIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICAqLworI2RlZmluZSBNV0w4S19XUV9TUElOCQkJMHgwMDAwMDAwMQorCisvKiBXYWl0IGZvciBUWCBxdWV1ZXMgdG8gZW1wdHkgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb25maWd1cmF0aW9uLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWQkJMHgwMDAwMDAwMgorCisvKiBRdWV1ZSByZXF1ZXN0IGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuICAqLworI2RlZmluZSBNV0w4S19XUV9QT1NUX1JFUVVFU1QJCTB4MDAwMDAwMDQKKworLyoKKyAqIENhbGxlciBzbGVlcHMgYW5kIHdhaXRzIGZvciB0YXNrIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi4KKyAqIERvIG5vdCB1c2UgaW4gYXRvbWljIGNvbnRleHQuCisgKi8KKyNkZWZpbmUgTVdMOEtfV1FfU0xFRVAJCQkweDAwMDAwMDA4CisKKy8qIEZyZWUgd29yayBzdHJ1Y3Qgd2hlbiB0YXNrIGlzIGRvbmUuICAqLworI2RlZmluZSBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QJMHgwMDAwMDAxMAorCisvKgorICogQ29uZmlnIHJlcXVlc3QgaXMgcXVldWVkIGFuZCByZXR1cm5zIHRvIGNhbGxlciBpbWVkaWF0ZWx5LiAgVXNlCisgKiB0aGlzIGluIGF0b21pYyBjb250ZXh0LiBXb3JrIHN0cnVjdCBpcyBmcmVlZCBieSBtd2w4a19xdWV1ZV93b3JrKCkKKyAqIHdoZW4gdGhpcyBmbGFnIGlzIHNldC4KKyAqLworI2RlZmluZSBNV0w4S19XUV9RVUVVRV9PTkxZCShNV0w4S19XUV9QT1NUX1JFUVVFU1QgfCBcCisJCQkJIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVCkKKworLyogRGVmYXVsdCB3b3JrIHF1ZXVlIGJlaGF2aW9yIGlzIHRvIHNsZWVwIGFuZCB3YWl0IGZvciB0eCBjb21wbGV0aW9uLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfREVGQVVMVF9PUFRJT05TIChNV0w4S19XUV9TTEVFUCB8IE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkpCisKKy8qCisgKiBEZWZhdWx0IGNvbmZpZyByZXF1ZXN0IHRpbWVvdXQuICBBZGQgYWRqdXN0bWVudHMgdG8gbWFrZSBzdXJlIHRoZQorICogY29uZmlnIHRocmVhZCB3YWl0cyBsb25nIGVub3VnaCBmb3IgYm90aCB0eCB3YWl0IGFuZCBjbWQgd2FpdCBiZWZvcmUKKyAqIHRpbWluZyBvdXQuCisgKi8KKworLyogVGltZSB0byB3YWl0IGZvciBhbGwgVFhRcyB0byBkcmFpbi4gIFRYIERvb3JiZWxsIGlzIHByZXNzZWQgZWFjaCB0aW1lLiAgKi8KKyNkZWZpbmUgTVdMOEtfVFhXQUlUX1RJTUVPVVRfTVMJCTEwMDAKKworLyogRGVmYXVsdCBudW1iZXIgb2YgVFggd2FpdCBhdHRlbXB0cy4gICovCisjZGVmaW5lIE1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUwk0CisKKy8qIFRvdGFsIHRpbWUgdG8gd2FpdCBmb3IgVFhRIHRvIGRyYWluLiAgKi8KKyNkZWZpbmUgTVdMOEtfVFhXQUlUX01TCQkJKE1XTDhLX1RYV0FJVF9USU1FT1VUX01TICogXAorCQkJCQkJTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTKQorCisvKiBTY2hlZHVsaW5nIHNsb3AuICAqLworI2RlZmluZSBNV0w4S19PU19TQ0hFRFVMRV9PVkVSSEVBRF9NUwkyMDAKKworI2RlZmluZSBNV0w4S19DT05GSUdfVElNRU9VVF9NUwkoTVdMOEtfQ01EX1RJTUVPVVRfTVMgKyBcCisJCQkJIE1XTDhLX1RYV0FJVF9NUyArIFwKKwkJCQkgTVdMOEtfT1NfU0NIRURVTEVfT1ZFUkhFQURfTVMpCisKK3N0YXRpYyB2b2lkIG13bDhrX2NvbmZpZ190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgKndvcmtlciA9IChzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aHc7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJcHJpdi0+aW5jb25maWcgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJLyoKKwkgKiBXYWl0IGZvciBob3N0IHF1ZXVlcyB0byBkcmFpbiBiZWZvcmUgZG9pbmcgUEhZCisJICogcmVjb25maWd1cmF0aW9uLiBUaGlzIGF2b2lkcyBpbnRlcnJ1cHRpbmcgYW55IGluLWZsaWdodAorCSAqIERNQSB0cmFuc2ZlcnMgdG8gdGhlIGhhcmR3YXJlLgorCSAqLworCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9UWF9XQUlUX0VNUFRZKSB7CisJCXUzMiB0aW1lb3V0OworCQl1MzIgdGltZV9yZW1haW5pbmc7CisJCXUzMiBpdGVyOworCQl1MzIgdHhfd2FpdF9hdHRlbXB0cyA9IHdvcmtlci0+dHh3YWl0X2F0dGVtcHRzOworCisJCXRpbWVfcmVtYWluaW5nID0gd29ya2VyLT50eF90aW1lb3V0X21zOworCQlpZiAoIXR4X3dhaXRfYXR0ZW1wdHMpCisJCQl0eF93YWl0X2F0dGVtcHRzID0gMTsKKworCQl0aW1lb3V0ID0gd29ya2VyLT50eF90aW1lb3V0X21zL3R4X3dhaXRfYXR0ZW1wdHM7CisJCWlmICghdGltZW91dCkKKwkJCXRpbWVvdXQgPSAxOworCisJCWl0ZXIgPSB0eF93YWl0X2F0dGVtcHRzOworCQlkbyB7CisJCQlpbnQgd2FpdF90aW1lOworCisJCQlpZiAodGltZV9yZW1haW5pbmcgPiB0aW1lb3V0KSB7CisJCQkJdGltZV9yZW1haW5pbmcgLT0gdGltZW91dDsKKwkJCQl3YWl0X3RpbWUgPSB0aW1lb3V0OworCQkJfSBlbHNlCisJCQkJd2FpdF90aW1lID0gdGltZV9yZW1haW5pbmc7CisKKwkJCWlmICghd2FpdF90aW1lKQorCQkJCXdhaXRfdGltZSA9IDE7CisKKwkJCXJjID0gbXdsOGtfdHhfd2FpdF9lbXB0eShodywgd2FpdF90aW1lKTsKKwkJCWlmIChyYykKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdHh3YWl0IHRpbWVvdXQ9JXVtcyAiCisJCQkJCSJSZXRyeToldS8ldVxuIiwgX19mdW5jX18sIHRpbWVvdXQsCisJCQkJCXR4X3dhaXRfYXR0ZW1wdHMgLSBpdGVyICsgMSwKKwkJCQkJdHhfd2FpdF9hdHRlbXB0cyk7CisKKwkJfSB3aGlsZSAocmMgJiYgLS1pdGVyKTsKKworCQlyYyA9IGl0ZXIgPyAwIDogLUVUSU1FRE9VVDsKKwl9CisJaWYgKCFyYykKKwkJcmMgPSB3b3JrZXItPndmdW5jKHd0KTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCXByaXYtPmluY29uZmlnID0gZmFsc2U7CisJaWYgKHByaXYtPnBlbmRpbmdfdHhfcGt0cyAmJiBwcml2LT5yYWRpb19zdGF0ZSkKKwkJbXdsOGtfdHhfc3RhcnQocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOworCisJd29ya2VyLT5yYyA9IHJjOworCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TTEVFUCkKKwkJY29tcGxldGUod29ya2VyLT5jbWRfd2FpdCk7CisKKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUKQorCQlrZnJlZSh3dCk7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfcXVldWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgKndvcmtlciwKKwkJCQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3F1ZXVlLAorCQkJCWludCAoKndmdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisJaW50IHJjID0gMDsKKworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNtZF93YWl0KTsKKworCWlmICghd29ya2VyLT50aW1lb3V0X21zKQorCQl3b3JrZXItPnRpbWVvdXRfbXMgPSBNV0w4S19DT05GSUdfVElNRU9VVF9NUzsKKworCWlmICghd29ya2VyLT5vcHRpb25zKQorCQl3b3JrZXItPm9wdGlvbnMgPSBNV0w4S19XUV9ERUZBVUxUX09QVElPTlM7CisKKwlpZiAoIXdvcmtlci0+dHh3YWl0X2F0dGVtcHRzKQorCQl3b3JrZXItPnR4d2FpdF9hdHRlbXB0cyA9IE1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUzsKKworCWlmICghd29ya2VyLT50eF90aW1lb3V0X21zKQorCQl3b3JrZXItPnR4X3RpbWVvdXRfbXMgPSBNV0w4S19UWFdBSVRfTVM7CisKKwl3b3JrZXItPmh3ID0gaHc7CisJd29ya2VyLT5jbWRfd2FpdCA9ICZjbWRfd2FpdDsKKwl3b3JrZXItPnJjID0gMTsKKwl3b3JrZXItPndmdW5jID0gd2Z1bmM7CisKKwlJTklUX1dPUksoJndvcmtlci0+d3QsIG13bDhrX2NvbmZpZ190aHJlYWQpOworCXF1ZXVlX3dvcmsod3F1ZXVlLCAmd29ya2VyLT53dCk7CisKKwlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfUE9TVF9SRVFVRVNUKSB7CisJCXJjID0gMDsKKwl9IGVsc2UgeworCQlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU1BJTikgeworCQkJdGltZW91dCA9IHdvcmtlci0+dGltZW91dF9tczsKKwkJCXdoaWxlICh0aW1lb3V0ICYmICh3b3JrZXItPnJjID4gMCkpIHsKKwkJCQltZGVsYXkoMSk7CisJCQkJdGltZW91dC0tOworCQkJfQorCQl9IGVsc2UgaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NMRUVQKQorCQkJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCisJCQkJbXNlY3NfdG9famlmZmllcyh3b3JrZXItPnRpbWVvdXRfbXMpKTsKKworCQlpZiAodGltZW91dCkKKwkJCXJjID0gd29ya2VyLT5yYzsKKwkJZWxzZSB7CisJCQljYW5jZWxfd29ya19zeW5jKCZ3b3JrZXItPnd0KTsKKwkJCXJjID0gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKworc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfc3RhcnRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqKXd0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCisJaWYgKHByaXYtPnZpZiAhPSBOVUxMKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIFR1cm4gb24gcmFkaW8gKi8KKwlpZiAobXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19FTkFCTEUpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIFB1cmdlIFRYL1JYIEhXIHF1ZXVlcyAqLworCWlmIChtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwlpZiAobXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBFbmFibGUgZmlybXdhcmUgcmF0ZSBhZGFwdGF0aW9uICovCisJaWYgKG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKGh3LCAwKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBEaXNhYmxlIFdNTS4gV01NIGdldHMgZW5hYmxlZCB3aGVuIHN0YWNrIHNlbmRzIFdNTSBwYXJtcyAqLworCWlmIChtd2w4a19zZXRfd21tKGh3LCBNV0w4S19XTU1fRElTQUJMRSkpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogRGlzYWJsZSBzbmlmZmVyIG1vZGUgKi8KKwlpZiAobXdsOGtfZW5hYmxlX3NuaWZmZXIoaHcsIDApKQorCQlyYyA9IC1FSU87CisKK213bDhrX3N0YXJ0X2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYzsKKworCS8qIEVuYWJsZSB0eCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2VuYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmbXdsOGtfaW50ZXJydXB0LAorCQkJIElSUUZfU0hBUkVELCBNV0w4S19OQU1FLCBodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZGlzYWJsZV90YXNrbGV0OworCX0KKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJaW93cml0ZTMyKHByaXYtPmludF9tYXNrLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBtd2w4a19zdGFydF9kaXNhYmxlX2lycTsKKwl9CisKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfc3RhcnRfd3QpOworCWtmcmVlKHdvcmtlcik7CisJaWYgKCFyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKHJjID09IC1FVElNRURPVVQpCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKworCXJjID0gLUVJTzsKKworbXdsOGtfc3RhcnRfZGlzYWJsZV9pcnE6CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCittd2w4a19zdGFydF9kaXNhYmxlX3Rhc2tsZXQ6CisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Cit9OworCitzdGF0aWMgaW50IG13bDhrX3N0b3Bfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgKndvcmtlciA9IChzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgKil3dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCWludCByYzsKKworCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlpbnQgcmM7CisJc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgaTsKKworCWlmIChwcml2LT52aWYgIT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybjsKKworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19zdG9wX3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKKwkvKiBTdG9wIGZpbmFsaXplIGpvaW4gd29ya2VyICovCisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIpOworCWlmIChwcml2LT5iZWFjb25fc2tiICE9IE5VTEwpCisJCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CisKKwkvKiBTdG9wIHR4IHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCS8qIFN0b3AgY29uZmlnIHRocmVhZCAqLworCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5jb25maWdfd3EpOworCisJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfcmVjbGFpbShodywgaSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IG9uZSBhY3RpdmUgaW50ZXJmYWNlIGF0IGEgdGltZS4KKwkgKi8KKwlpZiAocHJpdi0+dmlmICE9IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBtYW5hZ2VkIGludGVyZmFjZXMgZm9yIG5vdy4KKwkgKi8KKwlpZiAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDbGVhbiBvdXQgZHJpdmVyIHByaXZhdGUgYXJlYSAqLworCW13bDhrX3ZpZiA9IE1XTDhLX1ZJRihjb25mLT52aWYpOworCW1lbXNldChtd2w4a192aWYsIDAsIHNpemVvZigqbXdsOGtfdmlmKSk7CisKKwkvKiBTYXZlIHRoZSBtYWMgYWRkcmVzcyAqLworCW1lbWNweShtd2w4a192aWYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCS8qIEJhY2sgcG9pbnRlciB0byBwYXJlbnQgY29uZmlnIGJsb2NrICovCisJbXdsOGtfdmlmLT5wcml2ID0gcHJpdjsKKworCS8qIFNldHVwIGluaXRpYWwgUEhZIHBhcmFtZXRlcnMgKi8KKwltZW1jcHkobXdsOGtfdmlmLT5sZWdhY3lfcmF0ZXMgLAorCQlwcml2LT5yYXRlcywgc2l6ZW9mKG13bDhrX3ZpZi0+bGVnYWN5X3JhdGVzKSk7CisJbXdsOGtfdmlmLT5sZWdhY3lfbnJhdGVzID0gQVJSQVlfU0laRShwcml2LT5yYXRlcyk7CisKKwkvKiBTZXQgSW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIgdG8gemVybyAqLworCW13bDhrX3ZpZi0+c2Vxbm8gPSAwOworCisJcHJpdi0+dmlmID0gY29uZi0+dmlmOworCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJaWYgKHByaXYtPnZpZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwcml2LT52aWYgPSBOVUxMOworfQorCitzdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwl1MzIgY2hhbmdlZDsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlnX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciAqKXd0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgeworCQltd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0RJU0FCTEUpOworCQlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOworCQlyYyA9IDA7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJaWYgKG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRU5BQkxFKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJfQorCisJcHJpdi0+Y3VycmVudF9jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKKworCWlmIChtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoaHcsIGNvbmYtPmNoYW5uZWwpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBtd2w4a19jb25maWdfZXhpdDsKKwl9CisKKwlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgPiAxOCkKKwkJY29uZi0+cG93ZXJfbGV2ZWwgPSAxODsKKwlpZiAobXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlcihodywgY29uZi0+cG93ZXJfbGV2ZWwpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBtd2w4a19jb25maWdfZXhpdDsKKwl9CisKKwlpZiAobXdsOGtfY21kX21pbW9fY29uZmlnKGh3LCAweDcsIDB4NykpCisJCXJjID0gLUVJTlZBTDsKKworbXdsOGtfY29uZmlnX2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdvcmtlci0+Y2hhbmdlZCA9IGNoYW5nZWQ7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2NvbmZpZ193dCk7CisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dC5cbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCWtmcmVlKHdvcmtlcik7CisKKwkvKgorCSAqIG1hYzgwMjExIHdpbGwgY3Jhc2ggb24gYW55dGhpbmcgb3RoZXIgdGhhbiAtRUlOVkFMIG9uCisJICogZXJyb3IuIExvb2tzIGxpa2Ugd2lyZWxlc3MgZXh0ZW5zaW9ucyB3aGljaCBjYWxscyBtYWM4MDIxMQorCSAqIG1heSBiZSB0aGUgYWN0dWFsIGN1bHByaXQuLi4KKwkgKi8KKwlyZXR1cm4gcmMgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBtd2w4a19jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKKwl1MzIgY2hhbmdlZCA9IGNvbmYtPmNoYW5nZWQ7CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JTU0lEKQorCQltZW1jcHkobXZfdmlmLT5ic3NpZCwgY29uZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbzsKKwl1MzIgY2hhbmdlZDsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciAqKXd0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IHdvcmtlci0+dmlmOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSB3b3JrZXItPmluZm87CisJdTMyIGNoYW5nZWQ7CisJaW50IHJjOworCisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWYgPSBNV0w4S19WSUYodmlmKTsKKworCWNoYW5nZWQgPSB3b3JrZXItPmNoYW5nZWQ7CisJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSBmYWxzZTsKKworCWlmIChpbmZvLT5hc3NvYykgeworCQltZW1jcHkoJm13bDhrX3ZpZi0+YnNzX2luZm8sIGluZm8sCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZikpOworCisJCS8qIEluc3RhbGwgcmF0ZXMgKi8KKwkJaWYgKG13bDhrX3VwZGF0ZV9yYXRlc2V0KGh3LCB2aWYpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogVHVybiBvbiByYXRlIGFkYXB0YXRpb24gKi8KKwkJaWYgKG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZShodywgTVdMOEtfVVNFX0FVVE9fUkFURSwKKwkJCU1XTDhLX1VDQVNUX1JBVEUsIE5VTEwpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogU2V0IHJhZGlvIHByZWFtYmxlICovCisJCWlmIChtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoaHcsCisJCQkJaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFNldCBzbG90IHRpbWUgKi8KKwkJaWYgKG13bDhrX2NtZF9zZXRfc2xvdChodywgaW5mby0+dXNlX3Nob3J0X3Nsb3QgPworCQkJCU1XTDhLX1NIT1JUX1NMT1RUSU1FIDogTVdMOEtfTE9OR19TTE9UVElNRSkpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBVcGRhdGUgcGVlciByYXRlIGluZm8gKi8KKwkJaWYgKG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsCisJCQkJTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWSkpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBTZXQgQUlEICovCisJCWlmIChtd2w4a19jbWRfc2V0X2FpZChodywgdmlmKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qCisJCSAqIEZpbmFsaXplIHRoZSBqb2luLiAgVGVsbCByeCBoYW5kbGVyIHRvIHByb2Nlc3MKKwkJICogbmV4dCBiZWFjb24gZnJvbSBvdXIgQlNTSUQuCisJCSAqLworCQltZW1jcHkocHJpdi0+Y2FwdHVyZV9ic3NpZCwKKwkJCQltd2w4a192aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCQlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IHRydWU7CisJfSBlbHNlIHsKKwkJbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWSk7CisJCW1lbXNldCgmbXdsOGtfdmlmLT5ic3NfaW5mbywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7CisJCW1lbXNldChtd2w4a192aWYtPmJzc2lkLCAwLCBJRUVFODAyMTFfQUREUl9MRU4pOworCX0KKworbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OgorCXJjID0gMDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAorCQkJCSAgIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjOworCisJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpID09IDApCisJCXJldHVybjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybjsKKworCXdvcmtlci0+dmlmID0gdmlmOworCXdvcmtlci0+aW5mbyA9IGluZm87CisJd29ya2VyLT5jaGFuZ2VkID0gY2hhbmdlZDsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwKKwkJCSAgICAgIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd3QpOworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKK30KKworc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzOworCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3M7CisJaW50IG1jX2NvdW50OworCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3Q7Cit9OworCisjZGVmaW5lIE1XTDhLX1NVUFBPUlRFRF9JRl9GTEFHUwlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQworCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgKil3dDsKKworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MgPSB3b3JrZXItPmNoYW5nZWRfZmxhZ3M7CisJdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncyA9IHdvcmtlci0+dG90YWxfZmxhZ3M7CisJaW50IG1jX2NvdW50ID0gd29ya2VyLT5tY19jb3VudDsKKwlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0ID0gd29ya2VyLT5tY2xpc3Q7CisKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZjsKKwlpbnQgcmMgPSAwOworCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCisJCQlyYyA9IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oaHcpOworCQllbHNlIHsKKwkJCW12X3ZpZiA9IE1XTDhLX1ZJRihwcml2LT52aWYpOworCQkJcmMgPSBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihodywgbXZfdmlmLT5ic3NpZCk7CisJCX0KKwl9CisKKwlpZiAocmMpCisJCWdvdG8gbXdsOGtfY29uZmlndXJlX2ZpbHRlcl9leGl0OworCWlmIChtY19jb3VudCkgeworCQltY19jb3VudCA9IG1jX2NvdW50IDwgcHJpdi0+bnVtX21jYWRkcnMgPworCQkJCW1jX2NvdW50IDogcHJpdi0+bnVtX21jYWRkcnM7CisJCXJjID0gbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKGh3LCBtY19jb3VudCwgbWNsaXN0KTsKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMoKUVycm9yIHNldHRpbmcgbXVsdGljYXN0IGFkZHJlc3Nlc1xuIiwKKwkJCV9fZnVuY19fKTsKKwl9CisKK213bDhrX2NvbmZpZ3VyZV9maWx0ZXJfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCQkgICBpbnQgbWNfY291bnQsCisJCQkJICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKK3sKKworCXN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwkvKiBDbGVhciB1bnN1cHBvcnRlZCBmZWF0dXJlIGZsYWdzICovCisJKnRvdGFsX2ZsYWdzICY9IE1XTDhLX1NVUFBPUlRFRF9JRl9GTEFHUzsKKworCWlmICghKGNoYW5nZWRfZmxhZ3MgJiBNV0w4S19TVVBQT1JURURfSUZfRkxBR1MpICYmICFtY19jb3VudCkKKwkJcmV0dXJuOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9BVE9NSUMpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJd29ya2VyLT5oZWFkZXIub3B0aW9ucyA9IE1XTDhLX1dRX1FVRVVFX09OTFkgfCBNV0w4S19XUV9UWF9XQUlUX0VNUFRZOworCXdvcmtlci0+Y2hhbmdlZF9mbGFncyA9IGNoYW5nZWRfZmxhZ3M7CisJd29ya2VyLT50b3RhbF9mbGFncyA9IHRvdGFsX2ZsYWdzOworCXdvcmtlci0+bWNfY291bnQgPSBtY19jb3VudDsKKwl3b3JrZXItPm1jbGlzdCA9IG1jbGlzdDsKKworCW13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwgcHJpdi0+Y29uZmlnX3dxLAorCQkJIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd3QpOworfQorCitzdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXUzMiB2YWx1ZTsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqKXd0OworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwl1MTYgdGhyZXNob2xkID0gKHUxNikod29ya2VyLT52YWx1ZSk7CisJaW50IHJjOworCisJcmMgPSBtd2w4a19ydHNfdGhyZXNob2xkKGh3LCBNV0w4S19DTURfU0VULCAmdGhyZXNob2xkKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd29ya2VyLT52YWx1ZSA9IHZhbHVlOworCisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsCisJCQkgICAgICBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93dCk7CisJa2ZyZWUod29ya2VyKTsKKworCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByYzsKK30KKworc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXUxNiBxdWV1ZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zOworfTsKKworc3RhdGljIGludCBtd2w4a19jb25mX3R4X3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyICp3b3JrZXIgPQorCShzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgKil3dDsKKworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJdTE2IHF1ZXVlID0gd29ya2VyLT5xdWV1ZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zID0gd29ya2VyLT5wYXJhbXM7CisKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlpZiAocHJpdi0+d21tX21vZGUgPT0gTVdMOEtfV01NX0RJU0FCTEUpCisJCWlmIChtd2w4a19zZXRfd21tKGh3LCBNV0w4S19XTU1fRU5BQkxFKSkgeworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBtd2w4a19jb25mX3R4X2V4aXQ7CisJfQorCisJaWYgKG13bDhrX3NldF9lZGNhX3BhcmFtcyhodywgR0VUX1RYUShxdWV1ZSksIHBhcmFtcy0+Y3dfbWluLAorCQlwYXJhbXMtPmN3X21heCwgcGFyYW1zLT5haWZzLCBwYXJhbXMtPnR4b3ApKQorCQkJcmMgPSAtRUlOVkFMOworbXdsOGtfY29uZl90eF9leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCisJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQgcmM7CisJc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd29ya2VyLT5xdWV1ZSA9IHF1ZXVlOworCXdvcmtlci0+cGFyYW1zID0gcGFyYW1zOworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19jb25mX3R4X3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cTsKKwlpbnQgaW5kZXg7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1XTDhLX1RYX1FVRVVFUzsgaW5kZXgrKykgeworCQl0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKwkJbWVtY3B5KCZzdGF0c1tpbmRleF0sICZ0eHEtPnR4X3N0YXRzLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMpKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHM7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2dldF9zdGF0c193dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKil3dDsKKworCXJldHVybiBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0KHdvcmtlci0+aGVhZGVyLmh3LCB3b3JrZXItPnN0YXRzKTsKK30KKworc3RhdGljIGludCBtd2w4a19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd29ya2VyLT5zdGF0cyA9IHN0YXRzOworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19nZXRfc3RhdHNfd3QpOworCisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtd2w4a19vcHMgPSB7CisJLnR4CQkJPSBtd2w4a190eCwKKwkuc3RhcnQJCQk9IG13bDhrX3N0YXJ0LAorCS5zdG9wCQkJPSBtd2w4a19zdG9wLAorCS5hZGRfaW50ZXJmYWNlCQk9IG13bDhrX2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UJPSBtd2w4a19yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcJCQk9IG13bDhrX2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZQk9IG13bDhrX2NvbmZpZ19pbnRlcmZhY2UsCisJLmJzc19pbmZvX2NoYW5nZWQJPSBtd2w4a19ic3NfaW5mb19jaGFuZ2VkLAorCS5jb25maWd1cmVfZmlsdGVyCT0gbXdsOGtfY29uZmlndXJlX2ZpbHRlciwKKwkuc2V0X3J0c190aHJlc2hvbGQJPSBtd2w4a19zZXRfcnRzX3RocmVzaG9sZCwKKwkuY29uZl90eAkJPSBtd2w4a19jb25mX3R4LAorCS5nZXRfdHhfc3RhdHMJCT0gbXdsOGtfZ2V0X3R4X3N0YXRzLAorCS5nZXRfc3RhdHMJCT0gbXdsOGtfZ2V0X3N0YXRzLAorfTsKKworc3RhdGljIHZvaWQgbXdsOGtfdHhfcmVjbGFpbV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h3ICopIGRhdGE7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfcmVjbGFpbShodywgaSwgMCk7CisKKwlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMKSB7CisJCWludCBjb3VudCA9IG13bDhrX3R4cV9idXN5KHByaXYpOworCQlpZiAoY291bnQgPT0gMCkgeworCQkJY29tcGxldGUocHJpdi0+dHhfd2FpdCk7CisJCQlwcml2LT50eF93YWl0ID0gTlVMTDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX2ZpbmFsaXplX2pvaW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXdsOGtfcHJpdiwgZmluYWxpemVfam9pbl93b3JrZXIpOworCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT5iZWFjb25fc2tiOworCXU4IGR0aW0gPSAoTVdMOEtfVklGKHByaXYtPnZpZikpLT5ic3NfaW5mby5kdGltX3BlcmlvZDsKKworCW13bDhrX2ZpbmFsaXplX2pvaW4ocHJpdi0+aHcsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIGR0aW0pOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXByaXYtPmJlYWNvbl9za2IgPSBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtd2w4a19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCWludCByYzsKKwlpbnQgaTsKKwl1OCAqZnc7CisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iLAorCQkgICAgICAgTVdMOEtfTkFNRSk7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgTVdMOEtfTkFNRSk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIiwKKwkJICAgICAgIE1XTDhLX05BTUUpOworCQlyZXR1cm4gcmM7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnByaXYpLCAmbXdsOGtfb3BzKTsKKwlpZiAoaHcgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iLCBNV0w4S19OQU1FKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX3JlZzsKKwl9CisKKwlwcml2ID0gaHctPnByaXY7CisJcHJpdi0+aHcgPSBodzsKKwlwcml2LT5wZGV2ID0gcGRldjsKKwlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOworCXByaXYtPnR4X3dhaXQgPSBOVUxMOworCXByaXYtPmluY29uZmlnID0gZmFsc2U7CisJcHJpdi0+d2VwX2VuYWJsZWQgPSAwOworCXByaXYtPndtbV9tb2RlID0gZmFsc2U7CisJcHJpdi0+cGVuZGluZ190eF9wa3RzID0gMDsKKwlzdHJuY3B5KHByaXYtPm5hbWUsIE1XTDhLX05BTUUsIHNpemVvZihwcml2LT5uYW1lKSk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+ZndfbG9jayk7CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCXByaXYtPnJlZ3MgPSBwY2lfaW9tYXAocGRldiwgMSwgMHgxMDAwMCk7CisJaWYgKHByaXYtPnJlZ3MgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIGRldmljZSBtZW1vcnlcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCW1lbWNweShwcml2LT5jaGFubmVscywgbXdsOGtfY2hhbm5lbHMsIHNpemVvZihtd2w4a19jaGFubmVscykpOworCXByaXYtPmJhbmQuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOworCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUobXdsOGtfY2hhbm5lbHMpOworCXByaXYtPmJhbmQuYml0cmF0ZXMgPSBwcml2LT5yYXRlczsKKwlwcml2LT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG13bDhrX3JhdGVzKTsKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPnJhdGVzKSAhPSBzaXplb2YobXdsOGtfcmF0ZXMpKTsKKwltZW1jcHkocHJpdi0+cmF0ZXMsIG13bDhrX3JhdGVzLCBzaXplb2YobXdsOGtfcmF0ZXMpKTsKKworCS8qCisJICogRXh0cmEgaGVhZHJvb20gaXMgdGhlIHNpemUgb2YgdGhlIHJlcXVpcmVkIERNQSBoZWFkZXIKKwkgKiBtaW51cyB0aGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgODAyLjExIGZyYW1lIChDVFMgZnJhbWUpLgorCSAqLworCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9CisJCXNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3RzKTsKKworCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTA7CisKKwlody0+cXVldWVzID0gTVdMOEtfVFhfUVVFVUVTOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CisKKwkvKiBTZXQgcnNzaSBhbmQgbm9pc2UgdmFsdWVzIHRvIGRCbSAqLworCWh3LT5mbGFncyB8PSAoSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfCBJRUVFODAyMTFfSFdfTk9JU0VfREJNKTsKKwlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfdmlmKTsKKwlwcml2LT52aWYgPSBOVUxMOworCisJLyogU2V0IGRlZmF1bHQgcmFkaW8gc3RhdGUgYW5kIHByZWFtYmxlICovCisJcHJpdi0+cmFkaW9fcHJlYW1ibGUgPSBNV0w4S19SQURJT19ERUZBVUxUX1BSRUFNQkxFOworCXByaXYtPnJhZGlvX3N0YXRlID0gTVdMOEtfUkFESU9fRElTQUJMRTsKKworCS8qIEZpbmFsaXplIGpvaW4gd29ya2VyICovCisJSU5JVF9XT1JLKCZwcml2LT5maW5hbGl6ZV9qb2luX3dvcmtlciwgbXdsOGtfZmluYWxpemVfam9pbl93b3JrZXIpOworCisJLyogVFggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9pbml0KCZwcml2LT50eF9yZWNsYWltX3Rhc2ssCisJCQltd2w4a190eF9yZWNsYWltX2hhbmRsZXIsICh1bnNpZ25lZCBsb25nKWh3KTsKKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwkvKiBDb25maWcgd29ya3RocmVhZCAqLworCXByaXYtPmNvbmZpZ193cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJtd2w4a19jb25maWciKTsKKwlpZiAocHJpdi0+Y29uZmlnX3dxID09IE5VTEwpCisJCWdvdG8gZXJyX2lvdW5tYXA7CisKKwkvKiBQb3dlciBtYW5hZ2VtZW50IGNvb2tpZSAqLworCXByaXYtPmNvb2tpZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsICZwcml2LT5jb29raWVfZG1hKTsKKwlpZiAocHJpdi0+Y29va2llID09IE5VTEwpCisJCWdvdG8gZXJyX2lvdW5tYXA7CisKKwlyYyA9IG13bDhrX3J4cV9pbml0KGh3LCAwKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2lvdW5tYXA7CisJcnhxX3JlZmlsbChodywgMCwgSU5UX01BWCk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspIHsKKwkJcmMgPSBtd2w4a190eHFfaW5pdChodywgaSk7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX2ZyZWVfcXVldWVzOworCX0KKworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwlwcml2LT5pbnRfbWFzayA9IDA7CisJaW93cml0ZTMyKHByaXYtPmludF9tYXNrLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9DTEVBUl9TRUwpOworCWlvd3JpdGUzMigweGZmZmZmZmZmLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOworCisJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsICZtd2w4a19pbnRlcnJ1cHQsCisJCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX2ZyZWVfcXVldWVzOworCX0KKworCS8qIFJlc2V0IGZpcm13YXJlIGFuZCBoYXJkd2FyZSAqLworCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCisJLyogQXNrIHVzZXJsYW5kIGhvdHBsdWcgZGFlbW9uIGZvciB0aGUgZGV2aWNlIGZpcm13YXJlICovCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHByaXYsICh1MzIpaWQtPmRyaXZlcl9kYXRhKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlybXdhcmUgZmlsZXMgbm90IGZvdW5kXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJLyogTG9hZCBmaXJtd2FyZSBpbnRvIGhhcmR3YXJlICovCisJcmMgPSBtd2w4a19sb2FkX2Zpcm13YXJlKHByaXYpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3Qgc3RhcnQgZmlybXdhcmVcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCS8qIFJlY2xhaW0gbWVtb3J5IG9uY2UgZmlybXdhcmUgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZCAqLworCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CisKKwkvKgorCSAqIFRlbXBvcmFyaWx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAgSW5pdGlhbCBmaXJtd2FyZSBob3N0CisJICogY29tbWFuZHMgdXNlIGludGVycnVwdHMgYW5kIGF2b2lkcyBwb2xsaW5nLiAgRGlzYWJsZQorCSAqIGludGVycnVwdHMgd2hlbiBkb25lLgorCSAqLworCXByaXYtPmludF9tYXNrIHw9IE1XTDhLX0EySF9FVkVOVFM7CisKKwlpb3dyaXRlMzIocHJpdi0+aW50X21hc2ssIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKworCS8qIEdldCBjb25maWcgZGF0YSwgbWFjIGFkZHJzIGV0YyAqLworCXJjID0gbXdsOGtfY21kX2dldF9od19zcGVjKGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGluaXRpYWxpc2UgZmlybXdhcmVcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCS8qIFR1cm4gcmFkaW8gb2ZmICovCisJcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0RJU0FCTEUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZGlzYWJsZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCisJcmMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwlmdyA9ICh1OCAqKSZwcml2LT5md19yZXY7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IDg4VyV1ICVzXG4iLCBwcml2LT5uYW1lLCBwcml2LT5wYXJ0X251bSwKKwkJTVdMOEtfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciBWZXI6JXMgIEZpcm13YXJlIFZlcjoldS4ldS4ldS4ldVxuIiwKKwkJcHJpdi0+bmFtZSwgTVdMOEtfVkVSU0lPTiwgZndbM10sIGZ3WzJdLCBmd1sxXSwgZndbMF0pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBNQUMgQWRkcmVzczogJXNcbiIsIHByaXYtPm5hbWUsCisJICAgICAgIHByaW50X21hYyhtYWMsIGh3LT53aXBoeS0+cGVybV9hZGRyKSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3N0b3BfZmlybXdhcmU6CisJbXdsOGtfaHdfcmVzZXQocHJpdik7CisJbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKKworZXJyX2ZyZWVfaXJxOgorCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworZXJyX2ZyZWVfcXVldWVzOgorCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX2RlaW5pdChodywgaSk7CisJbXdsOGtfcnhxX2RlaW5pdChodywgMCk7CisKK2Vycl9pb3VubWFwOgorCWlmIChwcml2LT5jb29raWUgIT0gTlVMTCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LAorCQkJCXByaXYtPmNvb2tpZSwgcHJpdi0+Y29va2llX2RtYSk7CisKKwlpZiAocHJpdi0+cmVncyAhPSBOVUxMKQorCQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKKworCWlmIChwcml2LT5jb25maWdfd3EgIT0gTlVMTCkKKwkJZGVzdHJveV93b3JrcXVldWUocHJpdi0+Y29uZmlnX3dxKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisKK2Vycl9mcmVlX3JlZzoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG13bDhrX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlwcmludGsoS0VSTl9FUlIgIj09PT4lcygldSlcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtd2w4a19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKwlpbnQgaTsKKworCWlmIChodyA9PSBOVUxMKQorCQlyZXR1cm47CisJcHJpdiA9IGh3LT5wcml2OworCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKworCS8qIFJlbW92ZSB0eCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwkvKiBTdG9wIGNvbmZpZyB0aHJlYWQgKi8KKwlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT5jb25maWdfd3EpOworCisJLyogU3RvcCBoYXJkd2FyZSAqLworCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCisJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfcmVjbGFpbShodywgaSwgMSk7CisKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhodyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOworCisJbXdsOGtfcnhxX2RlaW5pdChodywgMCk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsCisJCQkJcHJpdi0+Y29va2llLCBwcml2LT5jb29raWVfZG1hKTsKKworCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ3MpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtd2w4a19kcml2ZXIgPSB7CisJLm5hbWUJCT0gTVdMOEtfTkFNRSwKKwkuaWRfdGFibGUJPSBtd2w4a190YWJsZSwKKwkucHJvYmUJCT0gbXdsOGtfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtd2w4a19yZW1vdmUpLAorCS5zaHV0ZG93bgk9IF9fZGV2ZXhpdF9wKG13bDhrX3NodXRkb3duKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG13bDhrX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbXdsOGtfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG13bDhrX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm13bDhrX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG13bDhrX2luaXQpOworbW9kdWxlX2V4aXQobXdsOGtfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggMjRjYWVjNi4uZDYzYzg5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwpAQCAtMjEwLDEwICsyMTAsNiBAQAogc3RhdGljIGlycXJldHVybl90IG5ldHdhdmVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBuZXR3YXZlX3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCi0vKiBTdGF0aXN0aWNzICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHdhdmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCiAvKiBXaXJlbGVzcyBleHRlbnNpb25zICovCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MqIG5ldHdhdmVfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC0yNzUsMTQgKzI3MSw5IEBACiAgICAgaW50ICAgICAgICBsYXN0RXhlYzsKICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgIHdhdGNoZG9nOwkvKiBUbyBhdm9pZCBibG9ja2luZyBzdGF0ZSAqLwogICAgIHN0cnVjdCBzaXRlX3N1cnZleSAgICAgbnNzOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzICAgaXdfc3RhdHM7ICAgIC8qIFdpcmVsZXNzIHN0YXRzICovCiB9IG5ldHdhdmVfcHJpdmF0ZTsKIAotI2lmZGVmIE5FVFdBVkVfU1RBVFMKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0d2F2ZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0jZW5kaWYKLQogLyoKICAqIFRoZSBOZXR3YXZlIGNhcmQgaXMgbGl0dGxlLWVuZGlhbiwgc28gd29uJ3Qgd29yayBmb3IgYmlnIGVuZGlhbgogICogc3lzdGVtcy4KQEAgLTM2NCw2ICszNTUsMTcgQEAKICAgICByZXR1cm4gJnByaXYtPml3X3N0YXRzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldHdhdmVfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JIAk9IG5ldHdhdmVfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0d2F2ZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbmV0d2F2ZV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBuZXR3YXZlX3dhdGNoZG9nLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKgogICogRnVuY3Rpb24gbmV0d2F2ZV9hdHRhY2ggKHZvaWQpCiAgKgpAQCAtNDEyLDE3ICs0MTQsMTIgQEAKICAgICBzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3BpbmxvY2spOwogCiAgICAgLyogTmV0d2F2ZSBzcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbmV0d2F2ZV9zdGFydF94bWl0OwotICAgIGRldi0+Z2V0X3N0YXRzICA9ICZuZXR3YXZlX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7CisgICAgZGV2LT5uZXRkZXZfb3BzID0gJm5ldHdhdmVfbmV0ZGV2X29wczsKICAgICAvKiB3aXJlbGVzcyBleHRlbnNpb25zICovCi0gICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmbmV0d2F2ZV9oYW5kbGVyX2RlZjsKKyAgICBkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJm5ldHdhdmVfaGFuZGxlcl9kZWY7CiAKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSAmbmV0d2F2ZV93YXRjaGRvZzsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAotICAgIGRldi0+b3BlbiA9ICZuZXR3YXZlX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJm5ldHdhdmVfY2xvc2U7CiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCiAgICAgcmV0dXJuIG5ldHdhdmVfcGNtY2lhX2NvbmZpZyggbGluayk7CkBAIC05ODgsNyArOTg1LDcgQEAKIAlyZXR1cm4gMTsKICAgICB9CiAKLSAgICBwcml2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CisgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CiAKICAgICBERUJVRygzLCAiVHJhbnNtaXR0aW5nIHdpdGggU1BDUSAleCBTUFUgJXggTElGICV4IElTUExRICV4XG4iLAogCSAgcmVhZGIocmFtQmFzZSArIE5FVFdBVkVfRVJFR19TUENRKSwKQEAgLTExMDcsMTEgKzExMDQsMTEgQEAKIAkgICAgcnNlciA9IHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfUlNFUik7CQkJCiAJICAgIAogCSAgICBpZiAocnNlciAmIDB4MDQpIHsKLQkJKytwcml2LT5zdGF0cy5yeF9kcm9wcGVkOyAKLQkJKytwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzOworCQkrK2Rldi0+c3RhdHMucnhfZHJvcHBlZDsKKwkJKytkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnM7CiAJICAgIH0KIAkgICAgaWYgKHJzZXIgJiAweDAyKQotCQkrK3ByaXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9yczsKKwkJKytkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9yczsKIAkJCQogCSAgICAvKiBDbGVhciB0aGUgUnhFcnIgYml0IGluIFJTRVIuIFJTRVIrNCBpcyB0aGUKIAkgICAgICogd3JpdGUgcGFydC4gQWxzbyBjbGVhciB0aGUgUnhDUkMgKDB4MDQpIGFuZCAKQEAgLTExMjUsOCArMTEyMiw4IEBACiAJICAgIHdhaXRfV09DKGlvYmFzZSk7CiAJICAgIHdyaXRlYigweDQwLCByYW1CYXNlICsgTkVUV0FWRV9FUkVHX0FTQ0MpOwogCi0JICAgIC8qIFJlbWVtYmVyIHRvIGNvdW50IHVwIHByaXYtPnN0YXRzIG9uIGVycm9yIHBhY2tldHMgKi8KLQkgICAgKytwcml2LT5zdGF0cy5yeF9lcnJvcnM7CisJICAgIC8qIFJlbWVtYmVyIHRvIGNvdW50IHVwIGRldi0+c3RhdHMgb24gZXJyb3IgcGFja2V0cyAqLworCSAgICArK2Rldi0+c3RhdHMucnhfZXJyb3JzOwogCX0KIAkvKiBUeEROICovCiAJaWYgKHN0YXR1cyAmIDB4MjApIHsKQEAgLTExNDAsMTcgKzExMzcsMTcgQEAKIAkJLyogVHJhbnNtaXR0aW5nIHdhcyBva2F5LCBjbGVhciBiaXRzICovCiAJCXdhaXRfV09DKGlvYmFzZSk7CiAJCXdyaXRlYigweDJmLCByYW1CYXNlICsgTkVUV0FWRV9FUkVHX1RTRVIgKyA0KTsKLQkJKytwcml2LT5zdGF0cy50eF9wYWNrZXRzOworCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKIAkgICAgfQogCQkJCiAJICAgIGlmICh0eFN0YXR1cyAmIDB4ZDApIHsKIAkJaWYgKHR4U3RhdHVzICYgMHg4MCkgewotCQkgICAgKytwcml2LT5zdGF0cy5jb2xsaXNpb25zOyAvKiBCZWNhdXNlIG9mIC9wcm9jL25ldC9kZXYqLwotCQkgICAgLyogKytwcml2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9yczsgKi8KKwkJICAgICsrZGV2LT5zdGF0cy5jb2xsaXNpb25zOyAvKiBCZWNhdXNlIG9mIC9wcm9jL25ldC9kZXYqLworCQkgICAgLyogKytkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzOyAqLwogCQkgICAgLyogcHJpbnRrKCJDb2xsaXNpb24uICVsZFxuIiwgamlmZmllcyAtIGRldi0+dHJhbnNfc3RhcnQpOyAqLwogCQl9CiAJCWlmICh0eFN0YXR1cyAmIDB4NDApIAotCQkgICAgKytwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9yczsKKwkJICAgICsrZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9yczsKIAkJLyogMHg4MCBUeEdVIFRyYW5zbWl0IGdpdmV1cCAtIG5pbmUgdGltZXMgYW5kIG5vIGx1Y2sKIAkJICogMHg0MCBUeE5PQVAgTm8gYWNjZXNzIHBvaW50LiBEaXNjYXJkZWQgcGFja2V0LgogCQkgKiAweDEwIFR4RXJyIFRyYW5zbWl0IGVycm9yLiBBbHdheXMgc2V0IHdoZW4gCkBAIC0xMTYzLDcgKzExNjAsNyBAQAogCQkvKiBDbGVhciBvdXQgVHhHVSwgVHhOT0FQLCBUeEVyciBhbmQgVHhUcnlzICovCiAJCXdhaXRfV09DKGlvYmFzZSk7CiAJCXdyaXRlYigweGRmICYgdHhTdGF0dXMsIHJhbUJhc2UrTkVUV0FWRV9FUkVHX1RTRVIrNCk7Ci0JCSsrcHJpdi0+c3RhdHMudHhfZXJyb3JzOworCQkrK2Rldi0+c3RhdHMudHhfZXJyb3JzOwogCSAgICB9CiAJICAgIERFQlVHKDMsICJOZXcgc3RhdHVzIGlzIFRTRVIgJXggQVNSICV4XG4iLAogCQkgIHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfVFNFUiksCkBAIC0xMTk3LDQwICsxMTk0LDYgQEAKICAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9IC8qIG5ldHdhdmVfd2F0Y2hkb2cgKi8KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR3YXZlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0gICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotICAgIHVwZGF0ZV9zdGF0cyhkZXYpOwotCi0gICAgREVCVUcoMiwgIm5ldHdhdmU6IFNQQ1EgJXggU1BVICV4IExJRiAleCBJU1BMUSAleCBNSFMgJXggcnh0eCAleCIKLQkgICIgJXggdHggJXggJXggJXggJXhcbiIsIAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19TUENRKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BVKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfTElGKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfSVNQTFEpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19NSFMpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4ZSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHhmKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweDE4KSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweDE5KSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweDFhKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweDFiKSk7Ci0KLSAgICByZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIC8vdW5zaWduZWQgbG9uZyBmbGFnczsKLS8qICAgICBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOyAqLwotCi0gICAgLy9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKLQotLyogICAgcHJpdi0+c3RhdHMucnhfcGFja2V0cyA9IHJlYWRiKHByaXYtPnJhbUJhc2UgKyAweDE4ZSk7IAotICAgIHByaXYtPnN0YXRzLnR4X3BhY2tldHMgPSByZWFkYihwcml2LT5yYW1CYXNlICsgMHgxOGYpOyAqLwotCi0gICAgLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zcGlubG9jaywgZmxhZ3MpOwotfQotCiBzdGF0aWMgaW50IG5ldHdhdmVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTI3NCw3ICsxMjM3LDcgQEAKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkgICAgREVCVUcoMSwgIm5ldHdhdmVfcng6IENvdWxkIG5vdCBhbGxvY2F0ZSBhbiBza19idWZmIG9mICIKIAkJICAibGVuZ3RoICVkXG4iLCByY3ZMZW4pOwotCSAgICArK3ByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7IAorCSAgICArK2Rldi0+c3RhdHMucnhfZHJvcHBlZDsKIAkgICAgLyogVGVsbCB0aGUgYWRhcHRlciB0byBza2lwIHRoZSBwYWNrZXQgKi8KIAkgICAgd2FpdF9XT0MoaW9iYXNlKTsKIAkgICAgd3JpdGViKE5FVFdBVkVfQ01EX1NSUCwgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19DQiArIDApOwpAQCAtMTMwNyw4ICsxMjcwLDggQEAKIAkvKiBRdWV1ZSBwYWNrZXQgZm9yIG5ldHdvcmsgbGF5ZXIgKi8KIAluZXRpZl9yeChza2IpOwogCi0JcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwotCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHJjdkxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHJjdkxlbjsKIAogCS8qIEdvdCB0aGUgcGFja2V0LCB0ZWxsIHRoZSBhZGFwdGVyIHRvIHNraXAgaXQgKi8KIAl3YWl0X1dPQyhpb2Jhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDExZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcKQEAgLTAsMCArMSwxMjAgQEAKK2NvbmZpZyBIRVJNRVMKKwl0cmlzdGF0ZSAiSGVybWVzIGNoaXBzZXQgODAyLjExYiBzdXBwb3J0IChPcmlub2NvL1ByaXNtMi9TeW1ib2wpIgorCWRlcGVuZHMgb24gKFBQQ19QTUFDIHx8IFBDSSB8fCBQQ01DSUEpICYmIFdMQU5fODAyMTEKKwlzZWxlY3QgV0lSRUxFU1NfRVhUCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX01JQ0hBRUxfTUlDCisJLS0taGVscC0tLQorCSAgQSBkcml2ZXIgZm9yIDgwMi4xMWIgd2lyZWxlc3MgY2FyZHMgYmFzZWQgb24gdGhlICJIZXJtZXMiIG9yCisJICBJbnRlcnNpbCBIRkEzODR4IChQcmlzbSAyKSBNQUMgY29udHJvbGxlci4gIFRoaXMgaW5jbHVkZXMgdGhlIHZhc3QKKwkgIG1ham9yaXR5IG9mIHRoZSBQQ01DSUEgODAyLjExYiBjYXJkcyAod2hpY2ggYXJlIG5lYXJseSBhbGwgcmViYWRnZXMpCisJICAtIGV4Y2VwdCBmb3IgdGhlIENpc2NvL0Fpcm9uZXQgY2FyZHMuICBDYXJkcyBzdXBwb3J0ZWQgaW5jbHVkZSB0aGUKKwkgIEFwcGxlIEFpcnBvcnQgKG5vdCBhIFBDTUNJQSBjYXJkKSwgV2F2ZWxhbklFRUUvT3Jpbm9jbywKKwkgIENhYmxldHJvbi9FbnRlcmFTeXMgUm9hbWFib3V0LCBFTFNBIEFpckxhbmNlciwgTUVMQ08gQnVmZmFsbywgQXZheWEsCisJICBJQk0gSGlnaCBSYXRlIFdpcmVsZXNzLCBGYXJyYWxvbiBTeXlsaW5lLCBTYW1zdW5nIE1hZ2ljTEFOLCBOZXRnZWFyCisJICBNQTQwMSwgTGlua1N5cyBXUEMtMTEsIEQtTGluayBEV0wtNjUwLCAzQ29tIEFpckNvbm5lY3QsIEludGVsCisJICBJUFcyMDExLCBhbmQgU3ltYm9sIFNwZWN0cnVtMjQgSGlnaCBSYXRlIGFtb25nc3Qgb3RoZXJzLgorCisJICBUaGlzIG9wdGlvbiBpbmNsdWRlcyB0aGUgZ3V0cyBvZiB0aGUgZHJpdmVyLCBidXQgaW4gb3JkZXIgdG8KKwkgIGFjdHVhbGx5IHVzZSBhIGNhcmQgeW91IHdpbGwgYWxzbyBuZWVkIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEKKwkgIEhlcm1lcyBjYXJkcywgUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvcnMgb3IgdGhlIEFwcGxlIEFpcnBvcnQgYmVsb3cuCisKKwkgIFlvdSB3aWxsIGFsc28gdmVyeSBsaWtlbHkgYWxzbyBuZWVkIHRoZSBXaXJlbGVzcyBUb29scyBpbiBvcmRlciB0bworCSAgY29uZmlndXJlIHlvdXIgY2FyZCBhbmQgdGhhdCAvZXRjL3BjbWNpYS93aXJlbGVzcy5vcHRzIHdvcmtzIDoKKwkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+CisKK2NvbmZpZyBIRVJNRVNfQ0FDSEVfRldfT05fSU5JVAorCWJvb2wgIkNhY2hlIEhlcm1lcyBmaXJtd2FyZSBvbiBkcml2ZXIgaW5pdGlhbGlzYXRpb24iCisJZGVwZW5kcyBvbiBIRVJNRVMKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBTYXkgWSB0byBjYWNoZSBhbnkgZmlybXdhcmUgcmVxdWlyZWQgYnkgdGhlIEhlcm1lcyBkcml2ZXJzCisJICBvbiBzdGFydHVwLiAgVGhlIGZpcm13YXJlIHdpbGwgcmVtYWluIGNhY2hlZCB1bnRpbCB0aGUKKwkgIGRyaXZlciBpcyB1bmxvYWRlZC4gIFRoZSBjYWNoZSB1c2VzIDY0SyBvZiBSQU0uCisKKwkgIE90aGVyd2lzZSBsb2FkIHRoZSBmaXJtd2FyZSBmcm9tIHVzZXJzcGFjZSBhcyByZXF1aXJlZC4gIEluCisJICB0aGlzIGNhc2UgdGhlIGRyaXZlciBzaG91bGQgYmUgdW5sb2FkZWQgYW5kIHJlc3RhcnRlZAorCSAgd2hlbmV2ZXIgdGhlIGZpcm13YXJlIGlzIGNoYW5nZWQuCisKKwkgIElmIHlvdSBhcmUgbm90IHN1cmUsIHNheSBZLgorCitjb25maWcgQVBQTEVfQUlSUE9SVAorCXRyaXN0YXRlICJBcHBsZSBBaXJwb3J0IHN1cHBvcnQgKGJ1aWx0LWluKSIKKwlkZXBlbmRzIG9uIFBQQ19QTUFDICYmIEhFUk1FUworCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQWlycG9ydCA4MDIuMTFiIHdpcmVsZXNzIEV0aGVybmV0IGhhcmR3YXJlCisJICBidWlsdCBpbnRvIHRoZSBNYWNpbnRvc2ggaUJvb2sgYW5kIG90aGVyIHJlY2VudCBQb3dlclBDLWJhc2VkCisJICBNYWNpbnRvc2ggbWFjaGluZXMuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBMdWNlbnQgT3Jpbm9jbyBjYXJkIHdpdGgKKwkgIGEgbm9uLXN0YW5kYXJkIGludGVyZmFjZS4KKworCSAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQWlycG9ydCBFeHRyZW1lICg4MDIuMTFiL2cpLiBVc2UKKwkgIHRoZSBCQ000M3h4IGRyaXZlciBmb3IgQWlycG9ydCBFeHRyZW1lIGNhcmRzLgorCitjb25maWcgUExYX0hFUk1FUworCXRyaXN0YXRlICJIZXJtZXMgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvciBzdXBwb3J0IChOZXRnZWFyIE1BMzAxIGV0Yy4pIgorCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoZSAiSGVybWVzIiAoYWthCisJICBvcmlub2NvKSBkcml2ZXIgd2hlbiB1c2VkIGluIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzLiAgVGhlc2UKKwkgIGFkYXB0b3JzIGFyZSBub3QgYSBmdWxsIFBDTUNJQSBjb250cm9sbGVyIGJ1dCBhY3QgYXMgYSBtb3JlIGxpbWl0ZWQKKwkgIFBDSSA8LT4gUENNQ0lBIGJyaWRnZS4gIFNldmVyYWwgdmVuZG9ycyBzZWxsIHN1Y2ggYWRhcHRvcnMgc28gdGhhdAorCSAgODAyLjExYiBQQ01DSUEgY2FyZHMgY2FuIGJlIHVzZWQgaW4gZGVza3RvcCBtYWNoaW5lcy4gIFRoZSBOZXRnZWFyCisJICBNQTMwMSBpcyBzdWNoIGFuIGFkYXB0b3IuCisKK2NvbmZpZyBUTURfSEVSTUVTCisJdHJpc3RhdGUgIkhlcm1lcyBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKKwkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gVE1ENzE2MCBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQorCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAorCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0CisJICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLgorCitjb25maWcgTk9SVEVMX0hFUk1FUworCXRyaXN0YXRlICJOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKKwkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gTm9ydGVsIGVtb2JpbGl0eSBQQ0kgYWRhcHRvcnMuICBUaGVzZQorCSAgYWRhcHRvcnMgYXJlIG5vdCBmdWxsIFBDTUNJQSBjb250cm9sbGVycywgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAorCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLgorCitjb25maWcgUENJX0hFUk1FUworCXRyaXN0YXRlICJQcmlzbSAyLjUgUENJIDgwMi4xMWIgYWRhcHRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIEhFUk1FUworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ0kgYW5kIG1pbmktUENJIDgwMi4xMWIgd2lyZWxlc3MgTklDcyBiYXNlZCBvbgorCSAgdGhlIFByaXNtIDIuNSBjaGlwc2V0LiAgVGhlc2UgYXJlIHRydWUgUENJIGNhcmRzLCBub3QgdGhlIDgwMi4xMWIKKwkgIFBDTUNJQSBjYXJkcyBidW5kbGVkIHdpdGggUENJPC0+UENNQ0lBIGFkYXB0b3JzIHdoaWNoIGFyZSBhbHNvCisJICBjb21tb24uICBTb21lIG9mIHRoZSBidWlsdC1pbiB3aXJlbGVzcyBhZGFwdG9ycyBpbiBsYXB0b3BzIGFyZSBvZgorCSAgdGhpcyB2YXJpZXR5LgorCitjb25maWcgUENNQ0lBX0hFUk1FUworCXRyaXN0YXRlICJIZXJtZXMgUENNQ0lBIGNhcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKKwktLS1oZWxwLS0tCisJICBBIGRyaXZlciBmb3IgIkhlcm1lcyIgY2hpcHNldCBiYXNlZCBQQ01DSUEgd2lyZWxlc3MgYWRhcHRvcnMsIHN1Y2gKKwkgIGFzIHRoZSBMdWNlbnQgV2F2ZWxhbklFRUUvT3Jpbm9jbyBjYXJkcyBhbmQgdGhlaXIgT0VNIChDYWJsZXRyb24vCisJICBFbnRlcmFTeXMgUm9hbUFib3V0IDgwMi4xMSwgRUxTQSBBaXJsYW5jZXIsIE1lbGNvIEJ1ZmZhbG8gYW5kCisJICBvdGhlcnMpLiAgSXQgc2hvdWxkIGFsc28gYmUgdXNhYmxlIG9uIHZhcmlvdXMgUHJpc20gSUkgYmFzZWQgY2FyZHMKKwkgIHN1Y2ggYXMgdGhlIExpbmtzeXMsIEQtTGluayBhbmQgRmFyYWxsb24gU2t5bGluZS4gIEl0IHNob3VsZCBhbHNvCisJICB3b3JrIG9uIFN5bWJvbCBjYXJkcyBzdWNoIGFzIHRoZSAzQ29tIEFpckNvbm5lY3QgYW5kIEVyaWNzc29uIFdMQU4uCisKKwkgIFlvdSB3aWxsIHZlcnkgbGlrZWx5IG5lZWQgdGhlIFdpcmVsZXNzIFRvb2xzIGluIG9yZGVyIHRvCisJICBjb25maWd1cmUgeW91ciBjYXJkIGFuZCB0aGF0IC9ldGMvcGNtY2lhL3dpcmVsZXNzLm9wdHMgd29ya3M6CisJICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPi4KKworY29uZmlnIFBDTUNJQV9TUEVDVFJVTQorCXRyaXN0YXRlICJTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5IFBDTUNJQSBjYXJkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ01DSUEgJiYgSEVSTUVTCisJLS0taGVscC0tLQorCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciA4MDIuMTFiIGNhcmRzIHVzaW5nIFJBTS1sb2FkYWJsZSBTeW1ib2wKKwkgIGZpcm13YXJlLCBzdWNoIGFzIFN5bWJvbCBXaXJlbGVzcyBOZXR3b3JrZXIgTEE0MTAwLCBDb21wYWN0Rmxhc2gKKwkgIGNhcmRzIGJ5IFNvY2tldCBDb21tdW5pY2F0aW9ucyBhbmQgSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCLgorCisJICBUaGlzIGRyaXZlciByZXF1aXJlcyBmaXJtd2FyZSBkb3dubG9hZCBvbiBzdGFydHVwLiAgVXRpbGl0aWVzCisJICBmb3IgZG93bmxvYWRpbmcgU3ltYm9sIGZpcm13YXJlIGFyZSBhdmFpbGFibGUgYXQKKwkgIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL29yaW5vY28vPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUKaW5kZXggNzkxMzY2ZS4uMWZjNzQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlCkBAIC0xLDggKzEsOSBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIG9yaW5vY28gd2lyZWxlc3MgZGV2aWNlIGRyaXZlcnMuCiAjCitvcmlub2NvLW9ianMgOj0gbWFpbi5vIGZ3Lm8gaHcubyBtaWMubyBzY2FuLm8gd2V4dC5vIGhlcm1lc19kbGQubyBoZXJtZXMubwogCi1vYmotJChDT05GSUdfSEVSTUVTKQkJKz0gb3Jpbm9jby5vIGhlcm1lcy5vIGhlcm1lc19kbGQubworb2JqLSQoQ09ORklHX0hFUk1FUykJCSs9IG9yaW5vY28ubwogb2JqLSQoQ09ORklHX1BDTUNJQV9IRVJNRVMpCSs9IG9yaW5vY29fY3Mubwogb2JqLSQoQ09ORklHX0FQUExFX0FJUlBPUlQpCSs9IGFpcnBvcnQubwogb2JqLSQoQ09ORklHX1BMWF9IRVJNRVMpCSs9IG9yaW5vY29fcGx4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMKaW5kZXggMjhmMWNhZS4uOGM0MDY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMKQEAgLTMsMTAgKzMsMTAgQEAKICAqIEEgZHJpdmVyIGZvciAiSGVybWVzIiBjaGlwc2V0IGJhc2VkIEFwcGxlIEFpcnBvcnQgd2lyZWxlc3MKICAqIGNhcmQuCiAgKgotICogQ29weXJpZ2h0IG5vdGljZSAmIHJlbGVhc2Ugbm90ZXMgaW4gZmlsZSBvcmlub2NvLmMKLSAqIAorICogQ29weXJpZ2h0IG5vdGljZSAmIHJlbGVhc2Ugbm90ZXMgaW4gZmlsZSBtYWluLmMKKyAqCiAgKiBOb3RlIHNwZWNpZmljIHRvIGFpcnBvcnQgc3R1YjoKLSAqIAorICoKICAqICAwLjA1IDogZmlyc3QgdmVyc2lvbiBvZiB0aGUgbmV3IHNwbGl0IGRyaXZlcgogICogIDAuMDYgOiBmaXggcG9zc2libGUgaGFuZyBvbiBwb3dlcnVwLCBhZGQgc2xlZXAgc3VwcG9ydAogICovCkBAIC02MCw3ICs2MCw4IEBACiAJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKIAogCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDApOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc1LDcgKzc2LDggQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogQWlycG9ydCB3YWtpbmcgdXBcbiIsIGRldi0+bmFtZSk7CiAKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDEpOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMSk7CiAJbXNsZWVwKDIwMCk7CiAKIAllbmFibGVfaXJxKGRldi0+aXJxKTsKQEAgLTkzLDcgKzk1LDcgQEAKIAogCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CiAKLQlpZiAocHJpdi0+b3BlbiAmJiAoISBwcml2LT5od191bmF2YWlsYWJsZSkpIHsKKwlpZiAocHJpdi0+b3BlbiAmJiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSkgewogCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKIAkJaWYgKGVycikKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZCBvbiBQQk9PS19XQUtFXG4iLApAQCAtMTI3LDcgKzEyOSw4IEBACiAKIAltYWNpb19yZWxlYXNlX3Jlc291cmNlKG1kZXYsIDApOwogCi0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDApOwogCXNzbGVlcCgxKTsKIAogCW1hY2lvX3NldF9kcnZkYXRhKG1kZXYsIE5VTEwpOwpAQCAtMTUzLDkgKzE1NiwxMSBAQAogCSAqIG9mZi4gKi8KIAlkaXNhYmxlX2lycShkZXYtPmlycSk7CiAKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDApOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShjYXJkLT5tZGV2KSwgMCwgMCk7CiAJc3NsZWVwKDEpOwotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShjYXJkLT5tZGV2KSwgMCwgMSk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAxKTsKIAlzc2xlZXAoMSk7CiAKIAllbmFibGVfaXJxKGRldi0+aXJxKTsKQEAgLTE4Miw3ICsxODcsNyBAQAogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmbWRldi0+b2ZkZXYuZGV2LAogCQkJICAgICAgIGFpcnBvcnRfaGFyZF9yZXNldCwgTlVMTCk7Ci0JaWYgKCEgZGV2KSB7CisJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMjE0LDkgKzIxOSwxMCBAQAogCX0KIAogCWhlcm1lc19zdHJ1Y3RfaW5pdChodywgY2FyZC0+dmFkZHIsIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKLQkJCisKIAkvKiBQb3dlciB1cCBjYXJkICovCi0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDEpOwogCXNzbGVlcCgxKTsKIAogCS8qIFJlc2V0IGl0IGJlZm9yZSB3ZSBnZXQgdGhlIGludGVycnVwdCAqLwpAQCAtMjQ4LDcgKzI1NCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIEFwcGxlIEFpcnBvcnQgd2lyZWxlc3MgY2FyZC4iKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYWlycG9ydF9tYXRjaFtdID0gCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhaXJwb3J0X21hdGNoW10gPQogewogCXsKIAkubmFtZSAJCT0gInJhZGlvIiwKQEAgLTI1NiwxMCArMjYyLDkgQEAKIAl7fSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKG9mLCBhaXJwb3J0X21hdGNoKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFpcnBvcnRfbWF0Y2gpOwogCi1zdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBhaXJwb3J0X2RyaXZlciA9IAoteworc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgYWlycG9ydF9kcml2ZXIgPSB7CiAJLm5hbWUgCQk9IERSSVZFUl9OQU1FLAogCS5tYXRjaF90YWJsZQk9IGFpcnBvcnRfbWF0Y2gsCiAJLnByb2JlCQk9IGFpcnBvcnRfYXR0YWNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODRiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMKQEAgLTAsMCArMSwzOTAgQEAKKy8qIEZpcm13YXJlIGZpbGUgcmVhZGluZyBhbmQgZG93bmxvYWQgaGVscGVycworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgImhlcm1lcy5oIgorI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKyNpbmNsdWRlICJmdy5oIgorCisvKiBFbmQgbWFya2VycyAoZm9yIFN5bWJvbCBmaXJtd2FyZSBvbmx5KSAqLworI2RlZmluZSBURVhUX0VORAkweDFBCQkvKiBFbmQgb2YgdGV4dCBoZWFkZXIgKi8KKworc3RydWN0IGZ3X2luZm8geworCWNoYXIgKnByaV9mdzsKKwljaGFyICpzdGFfZnc7CisJY2hhciAqYXBfZnc7CisJdTMyIHBkYV9hZGRyOworCXUxNiBwZGFfc2l6ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZndfaW5mbyBvcmlub2NvX2Z3W10gPSB7CisJeyBOVUxMLCAiYWdlcmVfc3RhX2Z3LmJpbiIsICJhZ2VyZV9hcF9mdy5iaW4iLCAweDAwMzkwMDAwLCAxMDAwIH0sCisJeyBOVUxMLCAicHJpc21fc3RhX2Z3LmJpbiIsICJwcmlzbV9hcF9mdy5iaW4iLCAwLCAxMDI0IH0sCisJeyAic3ltYm9sX3NwMjR0X3ByaW1fZnciLCAic3ltYm9sX3NwMjR0X3NlY19mdyIsIE5VTEwsIDB4MDAwMDMxMDAsIDUxMiB9Cit9OworCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBhY2Nlc3MgZmllbGRzIGluIEZXCisgKiBNYWtlIHN1cmUgTEUgZGVjb2RpbmcgbWFjcm9zIGFyZSB1c2VkCisgKi8KK3N0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciB7CisJY2hhciBoZHJfdmVyc1s2XTsgICAgICAgLyogQVNDSUkgc3RyaW5nIGZvciBoZWFkZXIgdmVyc2lvbiAqLworCV9fbGUxNiBoZWFkZXJzaXplOyAgICAgIC8qIFRvdGFsIGxlbmd0aCBvZiBoZWFkZXIgKi8KKwlfX2xlMzIgZW50cnlfcG9pbnQ7ICAgICAvKiBOSUMgZW50cnkgcG9pbnQgKi8KKwlfX2xlMzIgYmxvY2tzOyAgICAgICAgICAvKiBOdW1iZXIgb2YgYmxvY2tzIHRvIHByb2dyYW0gKi8KKwlfX2xlMzIgYmxvY2tfb2Zmc2V0OyAgICAvKiBPZmZzZXQgb2YgYmxvY2sgZGF0YSBmcm9tIGVvZiBoZWFkZXIgKi8KKwlfX2xlMzIgcGRyX29mZnNldDsgICAgICAvKiBPZmZzZXQgdG8gUERSIGRhdGEgZnJvbSBlb2YgaGVhZGVyICovCisJX19sZTMyIHByaV9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIHByaW1hcnkgcGx1ZyBkYXRhICovCisJX19sZTMyIGNvbXBhdF9vZmZzZXQ7ICAgLyogT2Zmc2V0IHRvIGNvbXBhdGliaWxpdHkgZGF0YSovCisJY2hhciBzaWduYXR1cmVbMF07ICAgICAgLyogRlcgc2lnbmF0dXJlIGxlbmd0aCBoZWFkZXJzaXplLTIwICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQ2hlY2sgdGhlIHJhbmdlIG9mIHZhcmlvdXMgaGVhZGVyIGVudHJpZXMuIFJldHVybiBhIHBvaW50ZXIgdG8gYQorICogZGVzY3JpcHRpb24gb2YgdGhlIHByb2JsZW0sIG9yIE5VTEwgaWYgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnZhbGlkYXRlX2Z3KGNvbnN0IHN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciAqaGRyLCBzaXplX3QgbGVuKQoreworCXUxNiBoZHJzaXplOworCisJaWYgKGxlbiA8IHNpemVvZigqaGRyKSkKKwkJcmV0dXJuICJpbWFnZSB0b28gc21hbGwiOworCWlmIChtZW1jbXAoaGRyLT5oZHJfdmVycywgIkhGVyIsIDMpICE9IDApCisJCXJldHVybiAiZm9ybWF0IG5vdCByZWNvZ25pc2VkIjsKKworCWhkcnNpemUgPSBsZTE2X3RvX2NwdShoZHItPmhlYWRlcnNpemUpOworCWlmIChoZHJzaXplID4gbGVuKQorCQlyZXR1cm4gImJhZCBoZWFkZXJzaXplIjsKKwlpZiAoKGhkcnNpemUgKyBsZTMyX3RvX2NwdShoZHItPmJsb2NrX29mZnNldCkpID4gbGVuKQorCQlyZXR1cm4gImJhZCBibG9jayBvZmZzZXQiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+cGRyX29mZnNldCkpID4gbGVuKQorCQlyZXR1cm4gImJhZCBQRFIgb2Zmc2V0IjsKKwlpZiAoKGhkcnNpemUgKyBsZTMyX3RvX2NwdShoZHItPnByaV9vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgUFJJIG9mZnNldCI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5jb21wYXRfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIGNvbXBhdCBvZmZzZXQiOworCisJLyogVE9ETzogY29uc2lkZXIgYWRkaW5nIGEgY2hlY2tzdW0gb3IgQ1JDIHRvIHRoZSBmaXJtd2FyZSBmb3JtYXQgKi8KKwlyZXR1cm4gTlVMTDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGZpcm13YXJlICoKK29yaW5vY29fY2FjaGVkX2Z3X2dldChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBib29sIHByaW1hcnkpCit7CisJaWYgKHByaW1hcnkpCisJCXJldHVybiBwcml2LT5jYWNoZWRfcHJpX2Z3OworCWVsc2UKKwkJcmV0dXJuIHByaXYtPmNhY2hlZF9mdzsKK30KKyNlbHNlCisjZGVmaW5lIG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBwcmltYXJ5KSAoTlVMTCkKKyNlbmRpZgorCisvKiBEb3dubG9hZCBlaXRoZXIgU1RBIG9yIEFQIGZpcm13YXJlIGludG8gdGhlIGNhcmQuICovCitzdGF0aWMgaW50Citvcmlub2NvX2RsX2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCSAgICBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncsCisJCSAgICBpbnQgYXApCit7CisJLyogUGx1ZyBEYXRhIEFyZWEgKFBEQSkgKi8KKwlfX2xlMTYgKnBkYTsKKworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCWNvbnN0IHN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciAqaGRyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpcnN0X2Jsb2NrOworCWNvbnN0IHZvaWQgKmVuZDsKKwljb25zdCBjaGFyICpmaXJtd2FyZTsKKwljb25zdCBjaGFyICpmd19lcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJaW50IGVyciA9IDA7CisKKwlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFwKQorCQlmaXJtd2FyZSA9IGZ3LT5hcF9mdzsKKwllbHNlCisJCWZpcm13YXJlID0gZnctPnN0YV9mdzsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogQXR0ZW1wdGluZyB0byBkb3dubG9hZCBmaXJtd2FyZSAlc1xuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBmaXJtd2FyZSk7CisKKwkvKiBSZWFkIGN1cnJlbnQgcGx1ZyBkYXRhICovCisJZXJyID0gaGVybWVzX3JlYWRfcGRhKGh3LCBwZGEsIGZ3LT5wZGFfYWRkciwgZnctPnBkYV9zaXplLCAwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlYWQgUERBIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVycikKKwkJZ290byBmcmVlOworCisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpKSB7CisJCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmaXJtd2FyZSwgcHJpdi0+ZGV2KTsKKworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZSAlc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKKwkJCWVyciA9IC1FTk9FTlQ7CisJCQlnb3RvIGZyZWU7CisJCX0KKwl9IGVsc2UKKwkJZndfZW50cnkgPSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpOworCisJaGRyID0gKGNvbnN0IHN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciAqKSBmd19lbnRyeS0+ZGF0YTsKKworCWZ3X2VyciA9IHZhbGlkYXRlX2Z3KGhkciwgZndfZW50cnktPnNpemUpOworCWlmIChmd19lcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2UgZGV0ZWN0ZWQgKCVzKS4gIgorCQkgICAgICAgIkFib3J0aW5nIGRvd25sb2FkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBmd19lcnIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGFib3J0OworCX0KKworCS8qIEVuYWJsZSBhdXggcG9ydCB0byBhbGxvdyBwcm9ncmFtbWluZyAqLworCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9pbml0KGh3LCBsZTMyX3RvX2NwdShoZHItPmVudHJ5X3BvaW50KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIGluaXQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gYWJvcnQ7CisKKwkvKiBQcm9ncmFtIGRhdGEgKi8KKwlmaXJzdF9ibG9jayA9IChmd19lbnRyeS0+ZGF0YSArCisJCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmhlYWRlcnNpemUpICsKKwkJICAgICAgIGxlMzJfdG9fY3B1KGhkci0+YmxvY2tfb2Zmc2V0KSk7CisJZW5kID0gZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZTsKKworCWVyciA9IGhlcm1lc19wcm9ncmFtKGh3LCBmaXJzdF9ibG9jaywgZW5kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gYWJvcnQ7CisKKwkvKiBVcGRhdGUgcHJvZHVjdGlvbiBkYXRhICovCisJZmlyc3RfYmxvY2sgPSAoZndfZW50cnktPmRhdGEgKworCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKSArCisJCSAgICAgICBsZTMyX3RvX2NwdShoZHItPnBkcl9vZmZzZXQpKTsKKworCWVyciA9IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhodywgZmlyc3RfYmxvY2ssIGVuZCwgcGRhLAorCQkJCQkgICAgICZwZGFbZnctPnBkYV9zaXplIC8gc2l6ZW9mKCpwZGEpXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBcHBseSBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGFib3J0OworCisJLyogVGVsbCBjYXJkIHdlJ3ZlIGZpbmlzaGVkICovCisJZXJyID0gaGVybWVzaV9wcm9ncmFtX2VuZChodyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIGVuZCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBhYm9ydDsKKworCS8qIENoZWNrIGlmIHdlJ3JlIHJ1bm5pbmcgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhlcm1lc19wcmVzZW50IHJldHVybmVkICVkXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGhlcm1lc19wcmVzZW50KGh3KSk7CisKK2Fib3J0OgorCS8qIElmIHdlIHJlcXVlc3RlZCB0aGUgZmlybXdhcmUsIHJlbGVhc2UgaXQuICovCisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpKQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworZnJlZToKKwlrZnJlZShwZGEpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgZmlybXdhcmUgaW1hZ2UgLSBzdG9wIHRoZSBjYXJkLCBsb2FkIHRoZSBmaXJtd2FyZSwgcmVzZXQKKyAqIHRoZSBjYXJkIGFuZCBtYWtlIHN1cmUgaXQgcmVzcG9uZHMuICBGb3IgdGhlIHNlY29uZGFyeSBmaXJtd2FyZSB0YWtlCisgKiBjYXJlIG9mIHRoZSBQREEgLSByZWFkIGl0IGFuZCB0aGVuIHdyaXRlIGl0IG9uIHRvcCBvZiB0aGUgZmlybXdhcmUuCisgKi8KK3N0YXRpYyBpbnQKK3N5bWJvbF9kbF9pbWFnZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmltYWdlLCBjb25zdCB2b2lkICplbmQsCisJCWludCBzZWNvbmRhcnkpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCByZXQgPSAwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmaXJzdF9ibG9jazsKKworCS8qIFBsdWcgRGF0YSBBcmVhIChQREEpICovCisJX19sZTE2ICpwZGEgPSBOVUxMOworCisJLyogQmluYXJ5IGJsb2NrIGJlZ2lucyBhZnRlciB0aGUgMHgxQSBtYXJrZXIgKi8KKwlwdHIgPSBpbWFnZTsKKwl3aGlsZSAoKnB0cisrICE9IFRFWFRfRU5EKTsKKwlmaXJzdF9ibG9jayA9IHB0cjsKKworCS8qIFJlYWQgdGhlIFBEQSBmcm9tIEVFUFJPTSAqLworCWlmIChzZWNvbmRhcnkpIHsKKwkJcGRhID0ga3phbGxvYyhmdy0+cGRhX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBkYSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXJldCA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsIGZ3LT5wZGFfc2l6ZSwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWU7CisJfQorCisJLyogU3RvcCB0aGUgZmlybXdhcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHNhZmVseSByZXdyaXR0ZW4gKi8KKwlpZiAocHJpdi0+c3RvcF9mdykgeworCQlyZXQgPSBwcml2LT5zdG9wX2Z3KHByaXYsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlOworCX0KKworCS8qIFByb2dyYW0gdGhlIGFkYXB0ZXIgd2l0aCBuZXcgZmlybXdhcmUgKi8KKwlyZXQgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlOworCisJLyogV3JpdGUgdGhlIFBEQSB0byB0aGUgYWRhcHRlciAqLworCWlmIChzZWNvbmRhcnkpIHsKKwkJc2l6ZV90IGxlbiA9IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGZpcnN0X2Jsb2NrLCBlbmQpOworCQlwdHIgPSBmaXJzdF9ibG9jayArIGxlbjsKKwkJcmV0ID0gaGVybWVzX2FwcGx5X3BkYShodywgcHRyLCBlbmQsIHBkYSwKKwkJCQkgICAgICAgJnBkYVtmdy0+cGRhX3NpemUgLyBzaXplb2YoKnBkYSldKTsKKwkJa2ZyZWUocGRhKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogUnVuIHRoZSBmaXJtd2FyZSAqLworCWlmIChwcml2LT5zdG9wX2Z3KSB7CisJCXJldCA9IHByaXYtPnN0b3BfZncocHJpdiwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFJlc2V0IGhlcm1lcyBjaGlwIGFuZCBtYWtlIHN1cmUgaXQgcmVzcG9uZHMgKi8KKwlyZXQgPSBoZXJtZXNfaW5pdChodyk7CisKKwkvKiBoZXJtZXNfcmVzZXQoKSBzaG91bGQgcmV0dXJuIDAgd2l0aCB0aGUgc2Vjb25kYXJ5IGZpcm13YXJlICovCisJaWYgKHNlY29uZGFyeSAmJiByZXQgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBBbmQgdGhpcyBzaG91bGQgd29yayB3aXRoIGFueSBmaXJtd2FyZSAqLworCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworCitmcmVlOgorCWtmcmVlKHBkYSk7CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogRG93bmxvYWQgdGhlIGZpcm13YXJlIGludG8gdGhlIGNhcmQsIHRoaXMgYWxzbyBkb2VzIGEgUENNQ0lBIHNvZnQKKyAqIHJlc2V0IG9uIHRoZSBjYXJkLCB0byBtYWtlIHN1cmUgaXQncyBpbiBhIHNhbmUgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQKK3N5bWJvbF9kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkgICBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJaW50IHJldDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgdHJ1ZSkpIHsKKwkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+cHJpX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5wcmlfZncpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwl9IGVsc2UKKwkJZndfZW50cnkgPSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgdHJ1ZSk7CisKKwkvKiBMb2FkIHByaW1hcnkgZmlybXdhcmUgKi8KKwlyZXQgPSBzeW1ib2xfZGxfaW1hZ2UocHJpdiwgZncsIGZ3X2VudHJ5LT5kYXRhLAorCQkJICAgICAgZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZSwgMCk7CisKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCB0cnVlKSkKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpKSB7CisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnN0YV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+c3RhX2Z3KTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJfSBlbHNlCisJCWZ3X2VudHJ5ID0gb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKTsKKworCS8qIExvYWQgc2Vjb25kYXJ5IGZpcm13YXJlICovCisJcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKKwkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDEpOworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTZWNvbmRhcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgb3Jpbm9jb19kb3dubG9hZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWludCBlcnIgPSAwOworCS8qIFJlbG9hZCBmaXJtd2FyZSAqLworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJLyogY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAqLworCQllcnIgPSBvcmlub2NvX2RsX2Zpcm13YXJlKHByaXYsCisJCQkJCSAgJm9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0sIDApOworCQlicmVhazsKKworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCWVyciA9IHN5bWJvbF9kbF9maXJtd2FyZShwcml2LAorCQkJCQkgJm9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0pOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCWJyZWFrOworCX0KKwkvKiBUT0RPOiBpZiB3ZSBmYWlsIHdlIHByb2JhYmx5IG5lZWQgdG8gcmVpbml0aWFsaXNlCisJICogdGhlIGRyaXZlciAqLworCisJcmV0dXJuIGVycjsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKK3ZvaWQgb3Jpbm9jb19jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgYXApCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7CisJY29uc3QgY2hhciAqcHJpX2Z3OworCWNvbnN0IGNoYXIgKmZ3OworCisJcHJpX2Z3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5wcmlfZnc7CisJaWYgKGFwKQorCQlmdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0uYXBfZnc7CisJZWxzZQorCQlmdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0uc3RhX2Z3OworCisJaWYgKHByaV9mdykgeworCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHByaV9mdywgcHJpdi0+ZGV2KSA9PSAwKQorCQkJcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IGZ3X2VudHJ5OworCX0KKworCWlmIChmdykgeworCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LCBwcml2LT5kZXYpID09IDApCisJCQlwcml2LT5jYWNoZWRfZncgPSBmd19lbnRyeTsKKwl9Cit9CisKK3ZvaWQgb3Jpbm9jb191bmNhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaWYgKHByaXYtPmNhY2hlZF9wcmlfZncpCisJCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+Y2FjaGVkX3ByaV9mdyk7CisJaWYgKHByaXYtPmNhY2hlZF9mdykKKwkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5jYWNoZWRfZncpOworCisJcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IE5VTEw7CisJcHJpdi0+Y2FjaGVkX2Z3ID0gTlVMTDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZmMyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmgKQEAgLTAsMCArMSwyMSBAQAorLyogRmlybXdhcmUgZmlsZSByZWFkaW5nIGFuZCBkb3dubG9hZCBoZWxwZXJzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fRldfSF8KKyNkZWZpbmUgX09SSU5PQ09fRldfSF8KKworLyogRm9yd2FyZCBkZWNsYXRpb25zICovCitzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlOworCitpbnQgb3Jpbm9jb19kb3dubG9hZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKKworI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKK3ZvaWQgb3Jpbm9jb19jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgYXApOwordm9pZCBvcmlub2NvX3VuY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CisjZWxzZQorI2RlZmluZSBvcmlub2NvX2NhY2hlX2Z3KHByaXYsIGFwKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX09SSU5PQ09fRldfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jCmluZGV4IGJmYTM3NTMuLmYyYzkxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYwpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCwgRGF2aWQgR2lic29uLCBMaW51eGNhcmUgQXVzdHJhbGlhLgogICogKEMpIENvcHlyaWdodCBEYXZpZCBHaWJzb24sIElCTSBDb3JwLiAyMDAxLTIwMDMuCi0gKiAKKyAqCiAgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCiAgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAgKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZQpAQCAtNDUsMTEgKzQ1LDYgQEAKIAogI2luY2x1ZGUgImhlcm1lcy5oIgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkxvdy1sZXZlbCBkcml2ZXIgaGVscGVyIGZvciBMdWNlbnQgSGVybWVzIGNoaXBzZXQgYW5kIFByaXNtIElJIEhGQTM4NHggd2lyZWxlc3MgTUFDIGNvbnRyb2xsZXIiKTsKLU1PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+IgotCSIgJiBEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7Ci0KIC8qIFRoZXNlIGFyZSBtYXhpbXVtIHRpbWVvdXRzLiBNb3N0IG9mdGVuLCBjYXJkIHdpbCByZWFjdCBtdWNoIGZhc3RlciAqLwogI2RlZmluZSBDTURfQlVTWV9USU1FT1VUICgxMDApIC8qIEluIGl0ZXJhdGlvbnMgb2YgfjF1cyAqLwogI2RlZmluZSBDTURfSU5JVF9USU1FT1VUICg1MDAwMCkgLyogaW4gaXRlcmF0aW9ucyBvZiB+MTB1cyAqLwpAQCAtNjEsMTMgKzU2LDEzIEBACiAgKi8KIAogI2RlZmluZSBETVNHKHN0dWZmLi4uKSBkbyB7cHJpbnRrKEtFUk5fREVCVUcgImhlcm1lcyBAICVwOiAiICwgaHctPmlvYmFzZSk7IFwKLQkJCXByaW50ayhzdHVmZik7fSB3aGlsZSAoMCkKKwkJCXByaW50ayhzdHVmZik7IH0gd2hpbGUgKDApCiAKICN1bmRlZiBIRVJNRVNfREVCVUcKICNpZmRlZiBIRVJNRVNfREVCVUcKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAotI2RlZmluZSBERUJVRyhsdmwsIHN0dWZmLi4uKSBpZiAoIChsdmwpIDw9IEhFUk1FU19ERUJVRykgRE1TRyhzdHVmZikKKyNkZWZpbmUgREVCVUcobHZsLCBzdHVmZi4uLikgaWYgKChsdmwpIDw9IEhFUk1FU19ERUJVRykgRE1TRyhzdHVmZikKIAogI2Vsc2UgLyogISBIRVJNRVNfREVCVUcgKi8KIApAQCAtOTUsMjAgKzkwLDE5IEBACiAKIAkvKiBGaXJzdCB3YWl0IGZvciB0aGUgY29tbWFuZCByZWdpc3RlciB0byB1bmJ1c3kgKi8KIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBDTUQpOwotCXdoaWxlICggKHJlZyAmIEhFUk1FU19DTURfQlVTWSkgJiYgayApIHsKKwl3aGlsZSAoKHJlZyAmIEhFUk1FU19DTURfQlVTWSkgJiYgaykgewogCQlrLS07CiAJCXVkZWxheSgxKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKIAl9Ci0JaWYgKHJlZyAmIEhFUk1FU19DTURfQlVTWSkgeworCWlmIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpCiAJCXJldHVybiAtRUJVU1k7Ci0JfQogCiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFBBUkFNMiwgcGFyYW0yKTsKIAloZXJtZXNfd3JpdGVfcmVnbihodywgUEFSQU0xLCBwYXJhbTEpOwogCWhlcm1lc193cml0ZV9yZWduKGh3LCBQQVJBTTAsIHBhcmFtMCk7CiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIENNRCwgY21kKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xOTEsMjMgKzE4NSwyMyBAQAogCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKIAogCS8qIE5vcm1hbGx5IGl0J3MgYSAiY2FuJ3QgaGFwcGVuIiBmb3IgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgdG8KLSAgICAgICAgICAgYmUgYnVzeSB3aGVuIHdlIGdvIHRvIGlzc3VlIGEgY29tbWFuZCBiZWNhdXNlIHdlIGFyZQotICAgICAgICAgICBzZXJpYWxpemluZyBhbGwgY29tbWFuZHMuICBIb3dldmVyIHdlIHdhbnQgdG8gaGF2ZSBzb21lCi0gICAgICAgICAgIGNoYW5jZSBvZiByZXNldHRpbmcgdGhlIGNhcmQgZXZlbiBpZiBpdCBnZXRzIGludG8gYSBzdHVwaWQKLSAgICAgICAgICAgc3RhdGUsIHNvIHdlIGFjdHVhbGx5IHdhaXQgdG8gc2VlIGlmIHRoZSBjb21tYW5kIHJlZ2lzdGVyCi0gICAgICAgICAgIHdpbGwgdW5idXN5IGl0c2VsZiBoZXJlLiAqLworCSAgIGJlIGJ1c3kgd2hlbiB3ZSBnbyB0byBpc3N1ZSBhIGNvbW1hbmQgYmVjYXVzZSB3ZSBhcmUKKwkgICBzZXJpYWxpemluZyBhbGwgY29tbWFuZHMuICBIb3dldmVyIHdlIHdhbnQgdG8gaGF2ZSBzb21lCisJICAgY2hhbmNlIG9mIHJlc2V0dGluZyB0aGUgY2FyZCBldmVuIGlmIGl0IGdldHMgaW50byBhIHN0dXBpZAorCSAgIHN0YXRlLCBzbyB3ZSBhY3R1YWxseSB3YWl0IHRvIHNlZSBpZiB0aGUgY29tbWFuZCByZWdpc3RlcgorCSAgIHdpbGwgdW5idXN5IGl0c2VsZiBoZXJlLiAqLwogCWsgPSBDTURfQlVTWV9USU1FT1VUOwogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJd2hpbGUgKGsgJiYgKHJlZyAmIEhFUk1FU19DTURfQlVTWSkpIHsKLQkJaWYgKHJlZyA9PSAweGZmZmYpIC8qIFNwZWNpYWwgY2FzZSAtIHRoZSBjYXJkIGhhcyBwcm9iYWJseSBiZWVuIHJlbW92ZWQsCi0JCQkJICAgICAgc28gZG9uJ3Qgd2FpdCBmb3IgdGhlIHRpbWVvdXQgKi8KKwkJaWYgKHJlZyA9PSAweGZmZmYpIC8qIFNwZWNpYWwgY2FzZSAtIHRoZSBjYXJkIGhhcyBwcm9iYWJseSBiZWVuCisJCQkJICAgICAgcmVtb3ZlZCwgc28gZG9uJ3Qgd2FpdCBmb3IgdGhlIHRpbWVvdXQgKi8KIAkJCXJldHVybiAtRU5PREVWOwogCiAJCWstLTsKIAkJdWRlbGF5KDEpOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBDTUQpOwogCX0KLQkKKwogCS8qIE5vIG5lZWQgdG8gZXhwbGljaXRseSBoYW5kbGUgdGhlIHRpbWVvdXQgLSBpZiB3ZSd2ZSB0aW1lZAogCSAgIG91dCBoZXJtZXNfaXNzdWVfY21kKCkgd2lsbCBwcm9iYWJseSByZXR1cm4gLUVCVVNZIGJlbG93ICovCiAKQEAgLTIyOCw3ICsyMjIsMTAgQEAKIC8qIElzc3VlIGEgY29tbWFuZCB0byB0aGUgY2hpcCwgYW5kIChidXN5ISkgd2FpdCBmb3IgaXQgdG8KICAqIGNvbXBsZXRlLgogICoKLSAqIFJldHVybnM6IDwgMCBvbiBpbnRlcm5hbCBlcnJvciwgMCBvbiBzdWNjZXNzLCA+IDAgb24gZXJyb3IgcmV0dXJuZWQgYnkgdGhlIGZpcm13YXJlCisgKiBSZXR1cm5zOgorICogICAgIDwgMCBvbiBpbnRlcm5hbCBlcnJvcgorICogICAgICAgMCBvbiBzdWNjZXNzCisgKiAgICAgPiAwIG9uIGVycm9yIHJldHVybmVkIGJ5IHRoZSBmaXJtd2FyZQogICoKICAqIENhbGxhYmxlIGZyb20gYW55IGNvbnRleHQsIGJ1dCBsb2NraW5nIGlzIHlvdXIgcHJvYmxlbS4gKi8KIGludCBoZXJtZXNfZG9jbWRfd2FpdChoZXJtZXNfdCAqaHcsIHUxNiBjbWQsIHUxNiBwYXJtMCwKQEAgLTI0MSwxMyArMjM4LDEzIEBACiAKIAllcnIgPSBoZXJtZXNfaXNzdWVfY21kKGh3LCBjbWQsIHBhcm0wLCAwLCAwKTsKIAlpZiAoZXJyKSB7Ci0JCWlmICghIGhlcm1lc19wcmVzZW50KGh3KSkgeworCQlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZXJtZXMgQCAlcDogIgogCQkJCSAgICAgICAiQ2FyZCByZW1vdmVkIHdoaWxlIGlzc3VpbmcgY29tbWFuZCAiCiAJCQkJICAgICAgICIweCUwNHguXG4iLCBody0+aW9iYXNlLCBjbWQpOwogCQkJZXJyID0gLUVOT0RFVjsKLQkJfSBlbHNlIAorCQl9IGVsc2UKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJoZXJtZXMgQCAlcDogIgogCQkJCSAgICAgICAiRXJyb3IgJWQgaXNzdWluZyBjb21tYW5kIDB4JTA0eC5cbiIsCkBAIC0yNTcsMjEgKzI1NCwyMSBAQAogCiAJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKIAlrID0gQ01EX0NPTVBMX1RJTUVPVVQ7Ci0Jd2hpbGUgKCAoISAocmVnICYgSEVSTUVTX0VWX0NNRCkpICYmIGspIHsKKwl3aGlsZSAoKCEocmVnICYgSEVSTUVTX0VWX0NNRCkpICYmIGspIHsKIAkJay0tOwogCQl1ZGVsYXkoMTApOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwogCX0KIAotCWlmICghIGhlcm1lc19wcmVzZW50KGh3KSkgeworCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlcm1lcyBAICVwOiBDYXJkIHJlbW92ZWQgIgogCQkgICAgICAgIndoaWxlIHdhaXRpbmcgZm9yIGNvbW1hbmQgMHglMDR4IGNvbXBsZXRpb24uXG4iLAogCQkgICAgICAgaHctPmlvYmFzZSwgY21kKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQotCQkKLQlpZiAoISAocmVnICYgSEVSTUVTX0VWX0NNRCkpIHsKKworCWlmICghKHJlZyAmIEhFUk1FU19FVl9DTUQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGVybWVzIEAgJXA6IFRpbWVvdXQgd2FpdGluZyBmb3IgIgogCQkgICAgICAgImNvbW1hbmQgMHglMDR4IGNvbXBsZXRpb24uXG4iLCBody0+aW9iYXNlLCBjbWQpOwogCQllcnIgPSAtRVRJTUVET1VUOwpAQCAtMzAxLDMxICsyOTgsMzAgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgazsKIAl1MTYgcmVnOwotCQotCWlmICggKHNpemUgPCBIRVJNRVNfQUxMT0NfTEVOX01JTikgfHwgKHNpemUgPiBIRVJNRVNfQUxMT0NfTEVOX01BWCkgKQorCisJaWYgKChzaXplIDwgSEVSTUVTX0FMTE9DX0xFTl9NSU4pIHx8IChzaXplID4gSEVSTUVTX0FMTE9DX0xFTl9NQVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0FMTE9DLCBzaXplLCBOVUxMKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQl9CiAKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwogCWsgPSBBTExPQ19DT01QTF9USU1FT1VUOwotCXdoaWxlICggKCEgKHJlZyAmIEhFUk1FU19FVl9BTExPQykpICYmIGspIHsKKwl3aGlsZSAoKCEocmVnICYgSEVSTUVTX0VWX0FMTE9DKSkgJiYgaykgewogCQlrLS07CiAJCXVkZWxheSgxMCk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CiAJfQotCQotCWlmICghIGhlcm1lc19wcmVzZW50KGh3KSkgeworCisJaWYgKCFoZXJtZXNfcHJlc2VudChodykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGVybWVzIEAgJXA6ICIKIAkJICAgICAgICJDYXJkIHJlbW92ZWQgd2FpdGluZyBmb3IgZnJhbWUgYWxsb2NhdGlvbi5cbiIsCiAJCSAgICAgICBody0+aW9iYXNlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQkKLQlpZiAoISAocmVnICYgSEVSTUVTX0VWX0FMTE9DKSkgeworCisJaWYgKCEocmVnICYgSEVSTUVTX0VWX0FMTE9DKSkgewogCQlwcmludGsoS0VSTl9FUlIgImhlcm1lcyBAICVwOiAiCiAJCSAgICAgICAiVGltZW91dCB3YWl0aW5nIGZvciBmcmFtZSBhbGxvY2F0aW9uXG4iLAogCQkgICAgICAgaHctPmlvYmFzZSk7CkBAIC0zMzQsMTQgKzMzMCwxNyBAQAogCiAJKmZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKTsKIAloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIEhFUk1FU19FVl9BTExPQyk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaGVybWVzX2FsbG9jYXRlKTsKIAogLyogU2V0IHVwIGEgQkFQIHRvIHJlYWQgYSBwYXJ0aWN1bGFyIGNodW5rIG9mIGRhdGEgZnJvbSBjYXJkJ3MgaW50ZXJuYWwgYnVmZmVyLgogICoKLSAqIFJldHVybnM6IDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubyksIDAgb24gc3VjY2VzcywgPjAgb24gZXJyb3IKKyAqIFJldHVybnM6CisgKiAgICAgPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKQorICogICAgICAgMCBvbiBzdWNjZXNzCisgKiAgICAgPiAwIG9uIGVycm9yCiAgKiBmcm9tIGZpcm13YXJlCiAgKgogICogQ2FsbGFibGUgZnJvbSBhbnkgY29udGV4dCAqLwpAQCAtMzUzLDcgKzM1Miw3IEBACiAJdTE2IHJlZzsKIAogCS8qIFBhcmFub2lhLi4gKi8KLQlpZiAoIChvZmZzZXQgPiBIRVJNRVNfQkFQX09GRlNFVF9NQVgpIHx8IChvZmZzZXQgJSAyKSApCisJaWYgKChvZmZzZXQgPiBIRVJNRVNfQkFQX09GRlNFVF9NQVgpIHx8IChvZmZzZXQgJSAyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlrID0gSEVSTUVTX0JBUF9CVVNZX1RJTUVPVVQ7CkBAIC0zNzQsNyArMzczLDcgQEAKIAkvKiBXYWl0IGZvciB0aGUgQkFQIHRvIGJlIHJlYWR5ICovCiAJayA9IEhFUk1FU19CQVBfQlVTWV9USU1FT1VUOwogCXJlZyA9IGhlcm1lc19yZWFkX3JlZyhodywgb3JlZyk7Ci0Jd2hpbGUgKCAocmVnICYgKEhFUk1FU19PRkZTRVRfQlVTWSB8IEhFUk1FU19PRkZTRVRfRVJSKSkgJiYgaykgeworCXdoaWxlICgocmVnICYgKEhFUk1FU19PRkZTRVRfQlVTWSB8IEhFUk1FU19PRkZTRVRfRVJSKSkgJiYgaykgewogCQlrLS07CiAJCXVkZWxheSgxKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnKGh3LCBvcmVnKTsKQEAgLTM4Niw5ICszODUsOCBAQAogCQkgICAgICAgKHJlZyAmIEhFUk1FU19PRkZTRVRfQlVTWSkgPyAidGltZW91dCIgOiAiZXJyb3IiLAogCQkgICAgICAgcmVnLCBpZCwgb2Zmc2V0KTsKIAotCQlpZiAocmVnICYgSEVSTUVTX09GRlNFVF9CVVNZKSB7CisJCWlmIChyZWcgJiBIRVJNRVNfT0ZGU0VUX0JVU1kpCiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQogCiAJCXJldHVybiAtRUlPOwkJLyogZXJyb3Igb3Igd3Jvbmcgb2Zmc2V0ICovCiAJfQpAQCAtNDAwLDcgKzM5OCwxMCBAQAogICogQkFQLiBTeW5jaHJvbml6YXRpb24vc2VyaWFsaXphdGlvbiBpcyB0aGUgY2FsbGVyJ3MgcHJvYmxlbS4gIGxlbgogICogbXVzdCBiZSBldmVuLgogICoKLSAqIFJldHVybnM6IDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubyksIDAgb24gc3VjY2VzcywgPiAwIG9uIGVycm9yIGZyb20gZmlybXdhcmUKKyAqIFJldHVybnM6CisgKiAgICAgPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKQorICogICAgICAgMCBvbiBzdWNjZXNzCisgKiAgICAgPiAwIG9uIGVycm9yIGZyb20gZmlybXdhcmUKICAqLwogaW50IGhlcm1lc19iYXBfcHJlYWQoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB2b2lkICpidWYsIGludCBsZW4sCiAJCSAgICAgdTE2IGlkLCB1MTYgb2Zmc2V0KQpAQCAtNDA4LDcgKzQwOSw3IEBACiAJaW50IGRyZWcgPSBiYXAgPyBIRVJNRVNfREFUQTEgOiBIRVJNRVNfREFUQTA7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoIChsZW4gPCAwKSB8fCAobGVuICUgMikgKQorCWlmICgobGVuIDwgMCkgfHwgKGxlbiAlIDIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGhlcm1lc19iYXBfc2VlayhodywgYmFwLCBpZCwgb2Zmc2V0KTsKQEAgLTQyNiw3ICs0MjcsMTAgQEAKIC8qIFdyaXRlIGEgYmxvY2sgb2YgZGF0YSB0byB0aGUgY2hpcCdzIGJ1ZmZlciwgdmlhIHRoZQogICogQkFQLiBTeW5jaHJvbml6YXRpb24vc2VyaWFsaXphdGlvbiBpcyB0aGUgY2FsbGVyJ3MgcHJvYmxlbS4KICAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pLCAwIG9uIHN1Y2Nlc3MsID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCisgKiBSZXR1cm5zOgorICogICAgIDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubykKKyAqICAgICAgIDAgb24gc3VjY2VzcworICogICAgID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCiAgKi8KIGludCBoZXJtZXNfYmFwX3B3cml0ZShoZXJtZXNfdCAqaHcsIGludCBiYXAsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbiwKIAkJICAgICAgdTE2IGlkLCB1MTYgb2Zmc2V0KQpAQCAtNDQwLDExICs0NDQsMTEgQEAKIAllcnIgPSBoZXJtZXNfYmFwX3NlZWsoaHcsIGJhcCwgaWQsIG9mZnNldCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JCisKIAkvKiBBY3R1YWxseSBkbyB0aGUgdHJhbnNmZXIgKi8KIAloZXJtZXNfd3JpdGVfYnl0ZXMoaHcsIGRyZWcsIGJ1ZiwgbGVuKTsKIAotIG91dDoJCisgb3V0OgogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKGhlcm1lc19iYXBfcHdyaXRlKTsKQEAgLTQ2NSw3ICs0NjksNyBAQAogCXUxNiBybGVuZ3RoLCBydHlwZTsKIAl1bnNpZ25lZCBud29yZHM7CiAKLQlpZiAoIChidWZzaXplIDwgMCkgfHwgKGJ1ZnNpemUgJSAyKSApCisJaWYgKChidWZzaXplIDwgMCkgfHwgKGJ1ZnNpemUgJSAyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9BQ0NFU1MsIHJpZCwgTlVMTCk7CkBAIC00NzgsNyArNDgyLDcgQEAKIAogCXJsZW5ndGggPSBoZXJtZXNfcmVhZF9yZWcoaHcsIGRyZWcpOwogCi0JaWYgKCEgcmxlbmd0aCkKKwlpZiAoIXJsZW5ndGgpCiAJCXJldHVybiAtRU5PREFUQTsKIAogCXJ0eXBlID0gaGVybWVzX3JlYWRfcmVnKGh3LCBkcmVnKTsKQEAgLTUwMyw3ICs1MDcsNyBAQAogfQogRVhQT1JUX1NZTUJPTChoZXJtZXNfcmVhZF9sdHYpOwogCi1pbnQgaGVybWVzX3dyaXRlX2x0dihoZXJtZXNfdCAqaHcsIGludCBiYXAsIHUxNiByaWQsIAoraW50IGhlcm1lc193cml0ZV9sdHYoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB1MTYgcmlkLAogCQkgICAgIHUxNiBsZW5ndGgsIGNvbnN0IHZvaWQgKnZhbHVlKQogewogCWludCBkcmVnID0gYmFwID8gSEVSTUVTX0RBVEExIDogSEVSTUVTX0RBVEEwOwpAQCAtNTMwLDE1ICs1MzQsMyBAQAogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKGhlcm1lc193cml0ZV9sdHYpOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2hlcm1lcyh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9oZXJtZXModm9pZCkKLXsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9oZXJtZXMpOwotbW9kdWxlX2V4aXQoZXhpdF9oZXJtZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKaW5kZXggOGIxM2M4Zi4uYzc4YzQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCkBAIC0xNSw3ICsxNSw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIERhdmlkIEdpYnNvbiwgTGludXhjYXJlIEF1c3RyYWxpYS4KICAqIChDKSBDb3B5cmlnaHQgRGF2aWQgR2lic29uLCBJQk0gQ29ycC4gMjAwMS0yMDAzLgogICoKLSAqIFBvcnRpb25zIHRha2VuIGZyb20gaGZhMzg0eC5oLCBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyB0YWtlbiBmcm9tIGhmYTM4NHguaC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIGZpbGUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdQTCwgdmVyc2lvbiAyLgogICovCkBAIC0zMSw3ICszMiw3IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAvKgogICogTGltaXRzIGFuZCBjb25zdGFudHMKQEAgLTIwMyw3ICsyMDQsNyBAQAogCV9fbGUzMiBzd19zdXBwb3J0OwogCXU4IHJldHJ5X2NvdW50OwogCXU4IHR4X3JhdGU7Ci0JX19sZTE2IHR4X2NvbnRyb2w7CQorCV9fbGUxNiB0eF9jb250cm9sOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgSEVSTUVTX1RYU1RBVF9SRVRSWUVSUgkJKDB4MDAwMSkKQEAgLTI5OCw3ICsyOTksNyBAQAogCS8qIGJpdHM6IDAtZXNzLCAxLWlic3MsIDQtcHJpdmFjeSBbd2VwXSAqLwogCV9fbGUxNiBlc3NpZF9sZW47CS8qIEVTU0lEIGxlbmd0aCAqLwogCXU4IGVzc2lkWzMyXTsJCS8qIEVTU0lEIG9mIHRoZSBuZXR3b3JrICovCi0gICAgCV9fbGUxNiByYXRlc1s1XTsJLyogQml0IHJhdGUgc3VwcG9ydGVkICovCisJX19sZTE2IHJhdGVzWzVdOwkvKiBCaXQgcmF0ZSBzdXBwb3J0ZWQgKi8KIAlfX2xlMTYgYmFzaWNfcmF0ZXM7CS8qIEJhc2ljIHJhdGVzIGJpdG1hc2sgKi8KIAl1OCB1bmtub3duMls2XTsJCS8qIEFsd2F5cyBGRjpGRjpGRjpGRjowMDowMCAqLwogCXU4IHVua25vd24zWzhdOwkJLyogQWx3YXlzIDAsIGFwcGVhcmVkIGluIGYvdyAzLjkxLTY4ICovCkBAIC0zNDQsMTQgKzM0NSwxNCBAQAogCXU4CWRhdGFbMzE2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX05PVF9DT05ORUNURUQgICAoMHgwMDAwKSAgCisjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX05PVF9DT05ORUNURUQgICAoMHgwMDAwKQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19DT05ORUNURUQgICAgICAgKDB4MDAwMSkKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfRElTQ09OTkVDVEVEICAgICgweDAwMDIpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0FQX0NIQU5HRSAgICAgICAoMHgwMDAzKQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19BUF9PVVRfT0ZfUkFOR0UgKDB4MDAwNCkKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQVBfSU5fUkFOR0UgICAgICgweDAwMDUpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0FTU09DX0ZBSUxFRCAgICAoMHgwMDA2KQotICAKKwogc3RydWN0IGhlcm1lc19saW5rc3RhdHVzIHsKIAlfX2xlMTYgbGlua3N0YXR1czsgICAgICAgICAvKiBMaW5rIHN0YXR1cyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0zODQsMTEgKzM4NSwxMiBAQAogCiAvKiBSZWdpc3RlciBhY2Nlc3MgY29udmVuaWVuY2UgbWFjcm9zICovCiAjZGVmaW5lIGhlcm1lc19yZWFkX3JlZyhodywgb2ZmKSBcCi0JKGlvcmVhZDE2KChodyktPmlvYmFzZSArICggKG9mZikgPDwgKGh3KS0+cmVnX3NwYWNpbmcgKSkpCisJKGlvcmVhZDE2KChodyktPmlvYmFzZSArICgob2ZmKSA8PCAoaHcpLT5yZWdfc3BhY2luZykpKQogI2RlZmluZSBoZXJtZXNfd3JpdGVfcmVnKGh3LCBvZmYsIHZhbCkgXAogCShpb3dyaXRlMTYoKHZhbCksIChodyktPmlvYmFzZSArICgob2ZmKSA8PCAoaHcpLT5yZWdfc3BhY2luZykpKQogI2RlZmluZSBoZXJtZXNfcmVhZF9yZWduKGh3LCBuYW1lKSBoZXJtZXNfcmVhZF9yZWcoKGh3KSwgSEVSTUVTXyMjbmFtZSkKLSNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZ24oaHcsIG5hbWUsIHZhbCkgaGVybWVzX3dyaXRlX3JlZygoaHcpLCBIRVJNRVNfIyNuYW1lLCAodmFsKSkKKyNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZ24oaHcsIG5hbWUsIHZhbCkgXAorCWhlcm1lc193cml0ZV9yZWcoKGh3KSwgSEVSTUVTXyMjbmFtZSwgKHZhbCkpCiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHZvaWQgaGVybWVzX3N0cnVjdF9pbml0KGhlcm1lc190ICpodywgdm9pZCBfX2lvbWVtICphZGRyZXNzLCBpbnQgcmVnX3NwYWNpbmcpOwpAQCAtNDMwLDcgKzQzMiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGhlcm1lc19kaXNhYmxlX3BvcnQoaGVybWVzX3QgKmh3LCBpbnQgcG9ydCkKIHsKLQlyZXR1cm4gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfRElTQUJMRSB8IChwb3J0IDw8IDgpLCAKKwlyZXR1cm4gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfRElTQUJMRSB8IChwb3J0IDw8IDgpLAogCQkJCSAwLCBOVUxMKTsKIH0KIApAQCAtNDQxLDExICs0NDMsMTIgQEAKIAlyZXR1cm4gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfSU5RVUlSRSwgcmlkLCBOVUxMKTsKIH0KIAotI2RlZmluZSBIRVJNRVNfQllURVNfVE9fUkVDTEVOKG4pICggKCgobikrMSkvMikgKyAxICkKLSNkZWZpbmUgSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhuKSAoICgobiktMSkgKiAyICkKKyNkZWZpbmUgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihuKSAoKCgobikrMSkvMikgKyAxKQorI2RlZmluZSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKG4pICgoKG4pLTEpICogMikKIAogLyogTm90ZSB0aGF0IGZvciB0aGUgbmV4dCB0d28sIHRoZSBjb3VudCBpcyBpbiAxNi1iaXQgd29yZHMsIG5vdCBieXRlcyAqLwotc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc19yZWFkX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLCB2b2lkICpidWYsIHVuc2lnbmVkIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc19yZWFkX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLAorCQkJCSAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBjb3VudCkKIHsKIAlvZmYgPSBvZmYgPDwgaHctPnJlZ19zcGFjaW5nOwogCWlvcmVhZDE2X3JlcChody0+aW9iYXNlICsgb2ZmLCBidWYsIGNvdW50KTsKQEAgLTQ2MCw3ICs0NjMsOCBAQAogCQlpb3dyaXRlOChidWZbY291bnQgLSAxXSwgaHctPmlvYmFzZSArIG9mZik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoZXJtZXNfY2xlYXJfd29yZHMoc3RydWN0IGhlcm1lcyAqaHcsIGludCBvZmYsIHVuc2lnbmVkIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc19jbGVhcl93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwKKwkJCQkgICAgICB1bnNpZ25lZCBjb3VudCkKIHsKIAl1bnNpZ25lZCBpOwogCkBAIC00NzEsOSArNDc1LDEwIEBACiB9CiAKICNkZWZpbmUgSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBiYXAsIHJpZCwgYnVmKSBcCi0JKGhlcm1lc19yZWFkX2x0digoaHcpLChiYXApLChyaWQpLCBzaXplb2YoKmJ1ZiksIE5VTEwsIChidWYpKSkKKwkoaGVybWVzX3JlYWRfbHR2KChodyksIChiYXApLCAocmlkKSwgc2l6ZW9mKCpidWYpLCBOVUxMLCAoYnVmKSkpCiAjZGVmaW5lIEhFUk1FU19XUklURV9SRUNPUkQoaHcsIGJhcCwgcmlkLCBidWYpIFwKLQkoaGVybWVzX3dyaXRlX2x0digoaHcpLChiYXApLChyaWQpLEhFUk1FU19CWVRFU19UT19SRUNMRU4oc2l6ZW9mKCpidWYpKSwoYnVmKSkpCisJKGhlcm1lc193cml0ZV9sdHYoKGh3KSwgKGJhcCksIChyaWQpLCBcCisJCQkgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oc2l6ZW9mKCpidWYpKSwgKGJ1ZikpKQogCiBzdGF0aWMgaW5saW5lIGludCBoZXJtZXNfcmVhZF93b3JkcmVjKGhlcm1lc190ICpodywgaW50IGJhcCwgdTE2IHJpZCwgdTE2ICp3b3JkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYwppbmRleCBkOGM2MjZlLi5hOWJhMTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYwpAQCAtMSwxMyArMSw3IEBACiAvKgotICogSGVybWVzIGRvd25sb2FkIGhlbHBlciBkcml2ZXIuCisgKiBIZXJtZXMgZG93bmxvYWQgaGVscGVyLgogICoKLSAqIFRoaXMgY291bGQgYmUgZW50aXJlbHkgbWVyZ2VkIGludG8gaGVybWVzLmMuCi0gKgotICogSSdtIGtlZXBpbmcgaXQgc2VwYXJhdGUgdG8gbWluaW1pc2UgdGhlIGFtb3VudCBvZiBtZXJnaW5nIGJldHdlZW4KLSAqIGtlcm5lbCB1cGdyYWRlcy4gSXQgYWxzbyBtZWFucyB0aGUgbWVtb3J5IG92ZXJoZWFkIGZvciBkcml2ZXJzIHRoYXQKLSAqIGRvbid0IG5lZWQgZmlybXdhcmUgZG93bmxvYWQgbG93LgotICoKLSAqIFRoaXMgZHJpdmVyOgorICogVGhpcyBoZWxwZXI6CiAgKiAgLSBpcyBjYXBhYmxlIG9mIHdyaXRpbmcgdG8gdGhlIHZvbGF0aWxlIGFyZWEgb2YgdGhlIGhlcm1lcyBkZXZpY2UKICAqICAtIGlzIGN1cnJlbnRseSBub3QgY2FwYWJsZSBvZiB3cml0aW5nIHRvIG5vbi12b2xhdGlsZSBhcmVhcwogICogIC0gcHJvdmlkZSBoZWxwZXJzIHRvIGlkZW50aWZ5IGFuZCB1cGRhdGUgcGx1Z2luIGRhdGEKQEAgLTUwLDEwICs0NCw2IEBACiAjaW5jbHVkZSAiaGVybWVzLmgiCiAjaW5jbHVkZSAiaGVybWVzX2RsZC5oIgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkRvd25sb2FkIGhlbHBlciBmb3IgTHVjZW50IEhlcm1lcyBjaGlwc2V0Iik7Ci1NT0RVTEVfQVVUSE9SKCJEYXZpZCBLaWxyb3kgPGtpbHJveWRAZ21haWwuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwotCiAjZGVmaW5lIFBGWCAiaGVybWVzX2RsZDogIgogCiAvKgpAQCAtODEsMTggKzcxLDYgQEAKICNkZWZpbmUgQkxPQ0tfRU5ECTB4RkZGRkZGRkYJLyogTGFzdCBpbWFnZSBibG9jayAqLwogI2RlZmluZSBURVhUX0VORAkweDFBCQkvKiBFbmQgb2YgdGV4dCBoZWFkZXIgKi8KIAotLyoKLSAqIFBEQSA9PSBQcm9kdWN0aW9uIERhdGEgQXJlYQotICoKLSAqIEluIHByaW5jaXBsZSwgdGhlIG1heC4gc2l6ZSBvZiB0aGUgUERBIGlzIGlzIDQwOTYgd29yZHMuIEN1cnJlbnRseSwKLSAqIGhvd2V2ZXIsIG9ubHkgYWJvdXQgNTAwIGJ5dGVzIG9mIHRoaXMgYXJlYSBhcmUgdXNlZC4KLSAqCi0gKiBTb21lIFVTQiBpbXBsZW1lbnRhdGlvbnMgY2FuJ3QgaGFuZGxlIHNpemVzIGluIGV4Y2VzcyBvZiAxMDE2LiBOb3RlCi0gKiB0aGF0IFBEQSBpcyBub3QgYWN0dWFsbHkgdXNlZCBpbiB0aG9zZSBVU0IgZW52aXJvbm1lbnRzLCBidXQgbWF5IGJlCi0gKiByZXRyaWV2ZWQgYnkgY29tbW9uIGNvZGUuCi0gKi8KLSNkZWZpbmUgTUFYX1BEQV9TSVpFCTEwMDAKLQogLyogTGltaXQgdGhlIGFtb3V0IHdlIHRyeSB0byBkb3dubG9hZCBpbiBhIHNpbmdsZSBzaG90LgogICogU2l6ZSBpcyBpbiBieXRlcy4KICAqLwpAQCAtMjI4LDEzICsyMDYsMTQgQEAKICAqIFNjYW4gUERSIGZvciB0aGUgcmVjb3JkIHdpdGggdGhlIHNwZWNpZmllZCBSRUNPUkRfSUQuCiAgKiBJZiBpdCdzIG5vdCBmb3VuZCwgcmV0dXJuIE5VTEwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGRyICoKLWhlcm1lc19maW5kX3BkcihzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsIHUzMiByZWNvcmRfaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IHBkciAqCitoZXJtZXNfZmluZF9wZHIoY29uc3Qgc3RydWN0IHBkciAqZmlyc3RfcGRyLCB1MzIgcmVjb3JkX2lkLCBjb25zdCB2b2lkICplbmQpCiB7Ci0Jc3RydWN0IHBkciAqcGRyID0gZmlyc3RfcGRyOwotCXZvaWQgKmVuZCA9ICh2b2lkICopZmlyc3RfcGRyICsgTUFYX1BEQV9TSVpFOworCWNvbnN0IHN0cnVjdCBwZHIgKnBkciA9IGZpcnN0X3BkcjsKIAotCXdoaWxlICgoKHZvaWQgKilwZHIgPCBlbmQpICYmCisJZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRyKTsKKworCXdoaWxlICgoKHZvaWQgKikgcGRyIDw9IGVuZCkgJiYKIAkgICAgICAgKHBkcl9pZChwZHIpICE9IFBESV9FTkQpKSB7CiAJCS8qCiAJCSAqIFBEUiBhcmVhIGlzIGN1cnJlbnRseSBub3QgdGVybWluYXRlZCBieSBQRElfRU5ELgpAQCAtMjU0LDEyICsyMzMsMTUgQEAKIH0KIAogLyogU2NhbiBwcm9kdWN0aW9uIGRhdGEgaXRlbXMgZm9yIGEgcGFydGljdWxhciBlbnRyeSAqLwotc3RhdGljIHN0cnVjdCBwZGkgKgotaGVybWVzX2ZpbmRfcGRpKHN0cnVjdCBwZGkgKmZpcnN0X3BkaSwgdTMyIHJlY29yZF9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGRpICoKK2hlcm1lc19maW5kX3BkaShjb25zdCBzdHJ1Y3QgcGRpICpmaXJzdF9wZGksIHUzMiByZWNvcmRfaWQsIGNvbnN0IHZvaWQgKmVuZCkKIHsKLQlzdHJ1Y3QgcGRpICpwZGkgPSBmaXJzdF9wZGk7CisJY29uc3Qgc3RydWN0IHBkaSAqcGRpID0gZmlyc3RfcGRpOwogCi0Jd2hpbGUgKHBkaV9pZChwZGkpICE9IFBESV9FTkQpIHsKKwllbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZGkpOworCisJd2hpbGUgKCgodm9pZCAqKSBwZGkgPD0gZW5kKSAmJgorCSAgICAgICAocGRpX2lkKHBkaSkgIT0gUERJX0VORCkpIHsKIAogCQkvKiBJZiB0aGUgcmVjb3JkIElEIG1hdGNoZXMsIHdlIGFyZSBkb25lICovCiAJCWlmIChwZGlfaWQocGRpKSA9PSByZWNvcmRfaWQpCkBAIC0yNzIsMTIgKzI1NCwxMyBAQAogCiAvKiBQcm9jZXNzIG9uZSBQbHVnIERhdGEgSXRlbSAtIGZpbmQgY29ycmVzcG9uZGluZyBQRFIgYW5kIHBsdWcgaXQgKi8KIHN0YXRpYyBpbnQKLWhlcm1lc19wbHVnX3BkaShoZXJtZXNfdCAqaHcsIHN0cnVjdCBwZHIgKmZpcnN0X3BkciwgY29uc3Qgc3RydWN0IHBkaSAqcGRpKQoraGVybWVzX3BsdWdfcGRpKGhlcm1lc190ICpodywgY29uc3Qgc3RydWN0IHBkciAqZmlyc3RfcGRyLAorCQljb25zdCBzdHJ1Y3QgcGRpICpwZGksIGNvbnN0IHZvaWQgKnBkcl9lbmQpCiB7Ci0Jc3RydWN0IHBkciAqcGRyOworCWNvbnN0IHN0cnVjdCBwZHIgKnBkcjsKIAogCS8qIEZpbmQgdGhlIFBEUiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUERJICovCi0JcGRyID0gaGVybWVzX2ZpbmRfcGRyKGZpcnN0X3BkciwgcGRpX2lkKHBkaSkpOworCXBkciA9IGhlcm1lc19maW5kX3BkcihmaXJzdF9wZHIsIHBkaV9pZChwZGkpLCBwZHJfZW5kKTsKIAogCS8qIE5vIG1hdGNoIGlzIGZvdW5kLCBzYWZlIHRvIGlnbm9yZSAqLwogCWlmICghcGRyKQpAQCAtMzQ3LDcgKzMzMCw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX3JlYWRfcGRhKTsKIAogLyogUGFyc2UgUERBIGFuZCB3cml0ZSB0aGUgcmVjb3JkcyBpbnRvIHRoZSBhZGFwdGVyCiAgKgpAQCAtMzU2LDE4ICszMzgsMjIgQEAKICAqLwogaW50IGhlcm1lc19hcHBseV9wZGEoaGVybWVzX3QgKmh3LAogCQkgICAgIGNvbnN0IGNoYXIgKmZpcnN0X3BkciwKLQkJICAgICBjb25zdCBfX2xlMTYgKnBkYSkKKwkJICAgICBjb25zdCB2b2lkICpwZHJfZW5kLAorCQkgICAgIGNvbnN0IF9fbGUxNiAqcGRhLAorCQkgICAgIGNvbnN0IHZvaWQgKnBkYV9lbmQpCiB7CiAJaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgcGRpICpwZGk7Ci0Jc3RydWN0IHBkciAqcGRyOworCWNvbnN0IHN0cnVjdCBwZHIgKnBkcjsKIAotCXBkciA9IChzdHJ1Y3QgcGRyICopIGZpcnN0X3BkcjsKKwlwZHIgPSAoY29uc3Qgc3RydWN0IHBkciAqKSBmaXJzdF9wZHI7CisJcGRhX2VuZCAtPSBzaXplb2Yoc3RydWN0IHBkaSk7CiAKIAkvKiBHbyB0aHJvdWdoIGV2ZXJ5IFBESSBhbmQgcGx1ZyB0aGVtIGludG8gdGhlIGFkYXB0ZXIgKi8KIAlwZGkgPSAoY29uc3Qgc3RydWN0IHBkaSAqKSAocGRhICsgMik7Ci0Jd2hpbGUgKHBkaV9pZChwZGkpICE9IFBESV9FTkQpIHsKLQkJcmV0ID0gaGVybWVzX3BsdWdfcGRpKGh3LCBwZHIsIHBkaSk7CisJd2hpbGUgKCgodm9pZCAqKSBwZGkgPD0gcGRhX2VuZCkgJiYKKwkgICAgICAgKHBkaV9pZChwZGkpICE9IFBESV9FTkQpKSB7CisJCXJldCA9IGhlcm1lc19wbHVnX3BkaShodywgcGRyLCBwZGksIHBkcl9lbmQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIApAQCAtMzc2LDIxICszNjIsMjMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc19hcHBseV9wZGEpOwogCiAvKiBJZGVudGlmeSB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIGFsbCBibG9ja3MKICAqIGluY2x1ZGluZyB0aGUgaGVhZGVyIGRhdGEuCiAgKi8KIHNpemVfdAotaGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2spCitoZXJtZXNfYmxvY2tzX2xlbmd0aChjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3Qgdm9pZCAqZW5kKQogewogCWNvbnN0IHN0cnVjdCBkYmxvY2sgKmJsayA9IChjb25zdCBzdHJ1Y3QgZGJsb2NrICopIGZpcnN0X2Jsb2NrOwogCWludCB0b3RhbF9sZW4gPSAwOwogCWludCBsZW47CiAKKwllbmQgLT0gc2l6ZW9mKCpibGspOworCiAJLyogU2tpcCBhbGwgYmxvY2tzIHRvIGxvY2F0ZSBQbHVnIERhdGEgUmVmZXJlbmNlcwogCSAqIChTcGVjdHJ1bSBDUykgKi8KLQl3aGlsZSAoZGJsb2NrX2FkZHIoYmxrKSAhPSBCTE9DS19FTkQpIHsKKwl3aGlsZSAoKCh2b2lkICopIGJsayA8PSBlbmQpICYmCisJICAgICAgIChkYmxvY2tfYWRkcihibGspICE9IEJMT0NLX0VORCkpIHsKIAkJbGVuID0gZGJsb2NrX2xlbihibGspOwogCQl0b3RhbF9sZW4gKz0gc2l6ZW9mKCpibGspICsgbGVuOwogCQlibGsgPSAoc3RydWN0IGRibG9jayAqKSAmYmxrLT5kYXRhW2xlbl07CkBAIC0zOTgsNyArMzg2LDYgQEAKIAogCXJldHVybiB0b3RhbF9sZW47CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc19ibG9ja3NfbGVuZ3RoKTsKIAogLyoqKiBIZXJtZXMgcHJvZ3JhbW1pbmcgKioqLwogCkBAIC00NTIsNyArNDM5LDYgQEAKIAogCXJldHVybiBlcnI7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc2lfcHJvZ3JhbV9pbml0KTsKIAogLyogRG9uZSBwcm9ncmFtbWluZyBkYXRhIChIZXJtZXMgSSkKICAqCkBAIC00ODgsMTAgKzQ3NCw5IEBACiAKIAlyZXR1cm4gcmMgPyByYyA6IGVycjsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzaV9wcm9ncmFtX2VuZCk7CiAKIC8qIFByb2dyYW0gdGhlIGRhdGEgYmxvY2tzICovCi1pbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3QgY2hhciAqZW5kKQoraW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCkKIHsKIAljb25zdCBzdHJ1Y3QgZGJsb2NrICpibGs7CiAJdTMyIGJsa2FkZHI7CkBAIC01MDMsMTQgKzQ4OCwxNCBAQAogCiAJYmxrID0gKGNvbnN0IHN0cnVjdCBkYmxvY2sgKikgZmlyc3RfYmxvY2s7CiAKLQlpZiAoKGNvbnN0IGNoYXIgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCisJaWYgKCh2b2lkICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQogCQlyZXR1cm4gLUVJTzsKIAogCWJsa2FkZHIgPSBkYmxvY2tfYWRkcihibGspOwogCWJsa2xlbiA9IGRibG9ja19sZW4oYmxrKTsKIAogCXdoaWxlICgoYmxrYWRkciAhPSBCTE9DS19FTkQpICYmCi0JICAgICAgICgoKGNvbnN0IGNoYXIgKikgYmxrICsgYmxrbGVuKSA8PSBlbmQpKSB7CisJICAgICAgICgoKHZvaWQgKikgYmxrICsgYmxrbGVuKSA8PSBlbmQpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHIFBGWAogCQkgICAgICAgIlByb2dyYW1taW5nIGJsb2NrIG9mIGxlbmd0aCAlZCB0byBhZGRyZXNzIDB4JTA4eFxuIiwKIAkJICAgICAgIGJsa2xlbiwgYmxrYWRkcik7CkBAIC01NDIsNyArNTI3LDcgQEAKICNlbmRpZgogCQlibGsgPSAoY29uc3Qgc3RydWN0IGRibG9jayAqKSAmYmxrLT5kYXRhW2Jsa2xlbl07CiAKLQkJaWYgKChjb25zdCBjaGFyICopIGJsayA+IChlbmQgLSBzaXplb2YoKmJsaykpKQorCQlpZiAoKHZvaWQgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlibGthZGRyID0gZGJsb2NrX2FkZHIoYmxrKTsKQEAgLTU1MCwxOSArNTM1LDYgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc19wcm9ncmFtKTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9oZXJtZXNfZGxkKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2hlcm1lc19kbGQodm9pZCkKLXsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9oZXJtZXNfZGxkKTsKLW1vZHVsZV9leGl0KGV4aXRfaGVybWVzX2RsZCk7CiAKIC8qKiogRGVmYXVsdCBwbHVnZ2luZyBkYXRhIGZvciBIZXJtZXMgSSAqKiovCiAvKiBWYWx1ZXMgZnJvbSB3bF9sa21fNzE4L2hjZi9kaGYuYyAqLwpAQCAtNTczLDkgKzU0NSw5IEBACiAJX19sZTE2IGlkOwkJCQkJCQlcCiAJdTggdmFsW2xlbmd0aF07CQkJCQkJCVwKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGRlZmF1bHRfcGRyX2RhdGFfIyNwaWQgPSB7CQkJXAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoKHNpemVvZihkZWZhdWx0X3Bkcl9kYXRhXyMjcGlkKS8JCVwKKwljcHVfdG9fbGUxNigoc2l6ZW9mKGRlZmF1bHRfcGRyX2RhdGFfIyNwaWQpLwkJCVwKIAkJCQlzaXplb2YoX19sZTE2KSkgLSAxKSwJCQlcCi0JX19jb25zdGFudF9jcHVfdG9fbGUxNihwaWQpLAkJCQkJXAorCWNwdV90b19sZTE2KHBpZCksCQkJCQkJXAogCWRhdGEJCQkJCQkJCVwKIH0KIApAQCAtNjQ0LDE3ICs2MTYsMjAgQEAKICAqLwogaW50IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhoZXJtZXNfdCAqaHcsCiAJCQkJICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkJCSAgIGNvbnN0IF9fbGUxNiAqcGRhKQorCQkJCSAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCQkJICAgY29uc3QgX19sZTE2ICpwZGEsCisJCQkJICAgY29uc3Qgdm9pZCAqcGRhX2VuZCkKIHsKIAljb25zdCBzdHJ1Y3QgcGRyICpwZHIgPSAoY29uc3Qgc3RydWN0IHBkciAqKSBmaXJzdF9wZHI7Ci0Jc3RydWN0IHBkaSAqZmlyc3RfcGRpID0gKHN0cnVjdCBwZGkgKikgJnBkYVsyXTsKLQlzdHJ1Y3QgcGRpICpwZGk7Ci0Jc3RydWN0IHBkaSAqZGVmYXVsdF9wZGkgPSBOVUxMOwotCXN0cnVjdCBwZGkgKm91dGRvb3JfcGRpOwotCXZvaWQgKmVuZCA9ICh2b2lkICopZmlyc3RfcGRyICsgTUFYX1BEQV9TSVpFOworCWNvbnN0IHN0cnVjdCBwZGkgKmZpcnN0X3BkaSA9IChjb25zdCBzdHJ1Y3QgcGRpICopICZwZGFbMl07CisJY29uc3Qgc3RydWN0IHBkaSAqcGRpOworCWNvbnN0IHN0cnVjdCBwZGkgKmRlZmF1bHRfcGRpID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcGRpICpvdXRkb29yX3BkaTsKIAlpbnQgcmVjb3JkX2lkOwogCi0Jd2hpbGUgKCgodm9pZCAqKXBkciA8IGVuZCkgJiYKKwlwZHJfZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRyKTsKKworCXdoaWxlICgoKHZvaWQgKikgcGRyIDw9IHBkcl9lbmQpICYmCiAJICAgICAgIChwZHJfaWQocGRyKSAhPSBQRElfRU5EKSkgewogCQkvKgogCQkgKiBGb3Igc3BlY3RydW1fY3MgZmlybXdhcmVzLApAQCAtNjY2LDcgKzY0MSw3IEBACiAJCQlicmVhazsKIAkJcmVjb3JkX2lkID0gcGRyX2lkKHBkcik7CiAKLQkJcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkKTsKKwkJcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkLCBwZGFfZW5kKTsKIAkJaWYgKHBkaSkKIAkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiRm91bmQgcmVjb3JkIDB4JTA0eCBhdCAlcFxuIiwKIAkJCSAgICAgICByZWNvcmRfaWQsIHBkaSk7CkBAIC02NzQsNyArNjQ5LDggQEAKIAkJc3dpdGNoIChyZWNvcmRfaWQpIHsKIAkJY2FzZSAweDExMDogLyogTW9kZW0gUkVGREFDIHZhbHVlcyAqLwogCQljYXNlIDB4MTIwOiAvKiBNb2RlbSBWR0RBQyB2YWx1ZXMgKi8KLQkJCW91dGRvb3JfcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkICsgMSk7CisJCQlvdXRkb29yX3BkaSA9IGhlcm1lc19maW5kX3BkaShmaXJzdF9wZGksIHJlY29yZF9pZCArIDEsCisJCQkJCQkgICAgICBwZGFfZW5kKTsKIAkJCWRlZmF1bHRfcGRpID0gTlVMTDsKIAkJCWlmIChvdXRkb29yX3BkaSkgewogCQkJCXBkaSA9IG91dGRvb3JfcGRpOwpAQCAtNzE1LDcgKzY5MSw4IEBACiAKIAkJaWYgKHBkaSkgewogCQkJLyogTGVuZ3RocyBvZiB0aGUgZGF0YSBpbiBQREkgYW5kIFBEUiBtdXN0IG1hdGNoICovCi0JCQlpZiAocGRpX2xlbihwZGkpID09IHBkcl9sZW4ocGRyKSkgeworCQkJaWYgKChwZGlfbGVuKHBkaSkgPT0gcGRyX2xlbihwZHIpKSAmJgorCQkJICAgICgodm9pZCAqKSBwZGktPmRhdGEgKyBwZGlfbGVuKHBkaSkgPCBwZGFfZW5kKSkgewogCQkJCS8qIGRvIHRoZSBhY3R1YWwgcGx1Z2dpbmcgKi8KIAkJCQloZXJtZXNfYXV4X3NldGFkZHIoaHcsIHBkcl9hZGRyKHBkcikpOwogCQkJCWhlcm1lc193cml0ZV9ieXRlcyhodywgSEVSTUVTX0FVWERBVEEsCkBAIC03MjcsNCArNzA0LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oCmluZGV4IDZmY2IyNjIuLjU4M2E1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIGludCBoZXJtZXNpX3Byb2dyYW1faW5pdChoZXJtZXNfdCAqaHcsIHUzMiBvZmZzZXQpOwogaW50IGhlcm1lc2lfcHJvZ3JhbV9lbmQoaGVybWVzX3QgKmh3KTsKLWludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCBjaGFyICplbmQpOworaW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCk7CiAKIGludCBoZXJtZXNfcmVhZF9wZGEoaGVybWVzX3QgKmh3LAogCQkgICAgX19sZTE2ICpwZGEsCkBAIC0zOCwxMSArMzgsMTUgQEAKIAkJICAgIGludCB1c2VfZWVwcm9tKTsKIGludCBoZXJtZXNfYXBwbHlfcGRhKGhlcm1lc190ICpodywKIAkJICAgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCSAgICAgY29uc3QgX19sZTE2ICpwZGEpOworCQkgICAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCSAgICAgY29uc3QgX19sZTE2ICpwZGEsCisJCSAgICAgY29uc3Qgdm9pZCAqcGRhX2VuZCk7CiBpbnQgaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGhlcm1lc190ICpodywKIAkJCQkgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCQkJICAgY29uc3QgX19sZTE2ICpwZGEpOworCQkJCSAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCQkJICAgY29uc3QgX19sZTE2ICpwZGEsCisJCQkJICAgY29uc3Qgdm9pZCAqcGRhX2VuZCk7CiAKLXNpemVfdCBoZXJtZXNfYmxvY2tzX2xlbmd0aChjb25zdCBjaGFyICpmaXJzdF9ibG9jayk7CitzaXplX3QgaGVybWVzX2Jsb2Nrc19sZW5ndGgoY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IHZvaWQgKmVuZCk7CiAKICNlbmRpZiAvKiBfSEVSTUVTX0RMRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxNDI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwpAQCAtMCwwICsxLDU4NiBAQAorLyogRW5jYXBzdWxhdGUgYmFzaWMgc2V0dGluZyBjaGFuZ2VzIGFuZCByZXRyaWV2YWwgb24gSGVybWVzIGhhcmR3YXJlCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorCisjaW5jbHVkZSAiaGVybWVzLmgiCisjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgImh3LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEgdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyB0YWJsZXMgZ2l2ZXMgdGhlIGFjdHVhbCBtZWFuaW5ncyBvZiB0aGUgYml0cmF0ZSBJRHMgcmV0dXJuZWQKKyAqIGJ5IHRoZSBmaXJtd2FyZS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWludCBiaXRyYXRlOyAvKiBpbiAxMDBzIG9mIGtpbG9iaXRzICovCisJaW50IGF1dG9tYXRpYzsKKwl1MTYgYWdlcmVfdHhyYXRlY3RybDsKKwl1MTYgaW50ZXJzaWxfdHhyYXRlY3RybDsKK30gYml0cmF0ZV90YWJsZVtdID0geworCXsxMTAsIDEsICAzLCAxNX0sIC8qIEVudHJ5IDAgaXMgdGhlIGRlZmF1bHQgKi8KKwl7MTAsICAwLCAgMSwgIDF9LAorCXsxMCwgIDEsICAxLCAgMX0sCisJezIwLCAgMCwgIDIsICAyfSwKKwl7MjAsICAxLCAgNiwgIDN9LAorCXs1NSwgIDAsICA0LCAgNH0sCisJezU1LCAgMSwgIDcsICA3fSwKKwl7MTEwLCAwLCAgNSwgIDh9LAorfTsKKyNkZWZpbmUgQklUUkFURV9UQUJMRV9TSVpFIEFSUkFZX1NJWkUoYml0cmF0ZV90YWJsZSkKKworaW50IG9yaW5vY29fZ2V0X2JpdHJhdGVtb2RlKGludCBiaXRyYXRlLCBpbnQgYXV0b21hdGljKQoreworCWludCByYXRlbW9kZSA9IC0xOworCWludCBpOworCisJaWYgKChiaXRyYXRlICE9IDEwKSAmJiAoYml0cmF0ZSAhPSAyMCkgJiYKKwkgICAgKGJpdHJhdGUgIT0gNTUpICYmIChiaXRyYXRlICE9IDExMCkpCisJCXJldHVybiByYXRlbW9kZTsKKworCWZvciAoaSA9IDA7IGkgPCBCSVRSQVRFX1RBQkxFX1NJWkU7IGkrKykgeworCQlpZiAoKGJpdHJhdGVfdGFibGVbaV0uYml0cmF0ZSA9PSBiaXRyYXRlKSAmJgorCQkgICAgKGJpdHJhdGVfdGFibGVbaV0uYXV0b21hdGljID09IGF1dG9tYXRpYykpIHsKKwkJCXJhdGVtb2RlID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByYXRlbW9kZTsKK30KKwordm9pZCBvcmlub2NvX2dldF9yYXRlbW9kZV9jZmcoaW50IHJhdGVtb2RlLCBpbnQgKmJpdHJhdGUsIGludCAqYXV0b21hdGljKQoreworCUJVR19PTigocmF0ZW1vZGUgPCAwKSB8fCAocmF0ZW1vZGUgPj0gQklUUkFURV9UQUJMRV9TSVpFKSk7CisKKwkqYml0cmF0ZSA9IGJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmJpdHJhdGUgKiAxMDAwMDA7CisJKmF1dG9tYXRpYyA9IGJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmF1dG9tYXRpYzsKK30KKworLyogR2V0IHRzYyBmcm9tIHRoZSBmaXJtd2FyZSAqLworaW50IG9yaW5vY29faHdfZ2V0X3RraXBfaXYoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleSwgdTggKnRzYykKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdTggdHNjX2Fycls0XVtJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKKworCWlmICgoa2V5IDwgMCkgfHwgKGtleSA+IDQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9US0lQX0lWLAorCQkJICAgICAgc2l6ZW9mKHRzY19hcnIpLCBOVUxMLCAmdHNjX2Fycik7CisJaWYgKCFlcnIpCisJCW1lbWNweSh0c2MsICZ0c2NfYXJyW2tleV1bMF0sIHNpemVvZih0c2NfYXJyWzBdKSk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCByYXRlbW9kZSA9IHByaXYtPmJpdHJhdGVtb2RlOworCWludCBlcnIgPSAwOworCisJaWYgKHJhdGVtb2RlID49IEJJVFJBVEVfVEFCTEVfU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCVUc6IEludmFsaWQgYml0cmF0ZSBtb2RlICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgcmF0ZW1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQlIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wsCisJCQkJYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYWdlcmVfdHhyYXRlY3RybCk7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLAorCQkJCWJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmludGVyc2lsX3R4cmF0ZWN0cmwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgb3Jpbm9jb19od19nZXRfYWN0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICpiaXRyYXRlKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKwl1MTYgdmFsOworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NVUlJFTlRUWFJBVEUsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6IC8qIEx1Y2VudCBzdHlsZSByYXRlICovCisJCS8qIE5vdGUgOiBpbiBMdWNlbnQgZmlybXdhcmUsIHRoZSByZXR1cm4gdmFsdWUgb2YKKwkJICogSEVSTUVTX1JJRF9DVVJSRU5UVFhSQVRFIGlzIHRoZSBiaXRyYXRlIGluIE1iL3MsCisJCSAqIGFuZCB0aGVyZWZvcmUgaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJICogZW5jb2Rpbmcgb2YgSEVSTUVTX1JJRF9DTkZUWFJBVEVDT05UUk9MLgorCQkgKiBEb24ndCBmb3JnZXQgdGhhdCA2TWIvcyBpcyByZWFsbHkgNS41TWIvcyAqLworCQlpZiAodmFsID09IDYpCisJCQkqYml0cmF0ZSA9IDU1MDAwMDA7CisJCWVsc2UKKwkJCSpiaXRyYXRlID0gdmFsICogMTAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAvKiBJbnRlcnNpbCBzdHlsZSByYXRlICovCisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIHJhdGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IEJJVFJBVEVfVEFCTEVfU0laRTsgaSsrKQorCQkJaWYgKGJpdHJhdGVfdGFibGVbaV0uaW50ZXJzaWxfdHhyYXRlY3RybCA9PSB2YWwpCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPj0gQklUUkFURV9UQUJMRV9TSVpFKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuYWJsZSB0byBkZXRlcm1pbmUgY3VycmVudCBiaXRyYXRlICgweCUwNGh4KVxuIiwKKwkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCB2YWwpOworCisJCSpiaXRyYXRlID0gYml0cmF0ZV90YWJsZVtpXS5iaXRyYXRlICogMTAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBTZXQgZml4ZWQgQVAgYWRkcmVzcyAqLworaW50IF9fb3Jpbm9jb19od19zZXRfd2FwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaW50IHJvYW1pbmdfZmxhZzsKKwlpbnQgZXJyID0gMDsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQlpZiAocHJpdi0+YnNzaWRfZml4ZWQpCisJCQlyb2FtaW5nX2ZsYWcgPSAyOworCQllbHNlCisJCQlyb2FtaW5nX2ZsYWcgPSAxOworCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZST0FNSU5HTU9ERSwKKwkJCQkJICAgcm9hbWluZ19mbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZNQU5EQVRPUllCU1NJRF9TWU1CT0wsCisJCQkJCSAgJnByaXYtPmRlc2lyZWRfYnNzaWQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyogQ2hhbmdlIHRoZSBXRVAga2V5cyBhbmQvb3IgdGhlIGN1cnJlbnQga2V5cy4gIENhbiBiZSBjYWxsZWQKKyAqIGVpdGhlciBmcm9tIF9fb3Jpbm9jb19od19zZXR1cF9lbmMoKSBvciBkaXJlY3RseSBmcm9tCisgKiBvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKCkuICBJbiB0aGUgbGF0ZXIgY2FzZSB0aGUgYXNzb2NpYXRpb24KKyAqIHdpdGggdGhlIEFQIGlzIG5vdCBicm9rZW4gKGlmIHRoZSBmaXJtd2FyZSBjYW4gaGFuZGxlIGl0KSwKKyAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgODAyLjF4IGltcGxlbWVudGF0aW9ucy4gKi8KK2ludCBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZXRVBLRVlTX0FHRVJFLAorCQkJCQkgICZwcml2LT5rZXlzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZUWEtFWV9BR0VSRSwKKwkJCQkJICAgcHJpdi0+dHhfa2V5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQl7CisJCQlpbnQga2V5bGVuOworCQkJaW50IGk7CisKKwkJCS8qIEZvcmNlIHVuaWZvcm0ga2V5IGxlbmd0aCB0byB3b3JrIGFyb3VuZAorCQkJICogZmlybXdhcmUgYnVncyAqLworCQkJa2V5bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1twcml2LT50eF9rZXldLmxlbik7CisKKwkJCWlmIChrZXlsZW4gPiBMQVJHRV9LRVlfU0laRSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEJVRzogS2V5ICVkIGhhcyBvdmVyc2l6ZSBsZW5ndGggJWQuXG4iLAorCQkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBwcml2LT50eF9rZXksIGtleWxlbik7CisJCQkJcmV0dXJuIC1FMkJJRzsKKwkJCX0KKworCQkJLyogV3JpdGUgYWxsIDQga2V5cyAqLworCQkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0tFWVM7IGkrKykgeworCQkJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZERUZBVUxUS0VZMCArIGksCisJCQkJCQlIRVJNRVNfQllURVNfVE9fUkVDTEVOKGtleWxlbiksCisJCQkJCQlwcml2LT5rZXlzW2ldLmRhdGEpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisKKwkJCS8qIFdyaXRlIHRoZSBpbmRleCBvZiB0aGUga2V5IHVzZWQgaW4gdHJhbnNtaXNzaW9uICovCisJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORldFUERFRkFVTFRLRVlJRCwKKwkJCQkJCXByaXYtPnR4X2tleSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX29yaW5vY29faHdfc2V0dXBfZW5jKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCWludCBtYXN0ZXJfd2VwX2ZsYWc7CisJaW50IGF1dGhfZmxhZzsKKwlpbnQgZW5jX2ZsYWc7CisKKwkvKiBTZXR1cCBXRVAga2V5cyBmb3IgV0VQIGFuZCBXUEEgKi8KKwlpZiAocHJpdi0+ZW5jb2RlX2FsZykKKwkJX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMocHJpdik7CisKKwlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQorCQlhdXRoX2ZsYWcgPSBIRVJNRVNfQVVUSF9TSEFSRURfS0VZOworCWVsc2UKKwkJYXV0aF9mbGFnID0gSEVSTUVTX0FVVEhfT1BFTjsKKworCWlmIChwcml2LT53cGFfZW5hYmxlZCkKKwkJZW5jX2ZsYWcgPSAyOworCWVsc2UgaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApCisJCWVuY19mbGFnID0gMTsKKwllbHNlCisJCWVuY19mbGFnID0gMDsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRTogLyogQWdlcmUgc3R5bGUgV0VQICovCisJCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKSB7CisJCQkvKiBFbmFibGUgdGhlIHNoYXJlZC1rZXkgYXV0aGVudGljYXRpb24uICovCisJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCUhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT05fQUdFUkUsCisJCQkJCWF1dGhfZmxhZyk7CisJCX0KKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORldFUEVOQUJMRURfQUdFUkUsCisJCQkJCSAgIGVuY19mbGFnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKHByaXYtPmhhc193cGEpIHsKKwkJCS8qIFNldCBXUEEga2V5IG1hbmFnZW1lbnQgKi8KKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GU0VUV1BBQVVUSE1HTVRTVUlURV9BR0VSRSwKKwkJCQkgIHByaXYtPmtleV9tZ210KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAvKiBJbnRlcnNpbCBzdHlsZSBXRVAgKi8KKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOiAvKiBTeW1ib2wgc3R5bGUgV0VQICovCisJCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKSB7CisJCQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0IHx8CisJCQkgICAgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wpKQorCQkJCW1hc3Rlcl93ZXBfZmxhZyA9IEhFUk1FU19XRVBfUFJJVkFDWV9JTlZPS0VEIHwKKwkJCQkJCSAgSEVSTUVTX1dFUF9FWENMX1VORU5DUllQVEVEOworCQkJZWxzZQorCQkJCW1hc3Rlcl93ZXBfZmxhZyA9IEhFUk1FU19XRVBfUFJJVkFDWV9JTlZPS0VEOworCisJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQkgICBIRVJNRVNfUklEX0NORkFVVEhFTlRJQ0FUSU9OLAorCQkJCQkJICAgYXV0aF9mbGFnKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlCisJCQltYXN0ZXJfd2VwX2ZsYWcgPSAwOworCisJCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKKwkJCW1hc3Rlcl93ZXBfZmxhZyB8PSBIRVJNRVNfV0VQX0hPU1RfREVDUllQVDsKKworCQkvKiBNYXN0ZXIgV0VQIHNldHRpbmcgOiBvbi9vZmYgKi8KKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORldFUEZMQUdTX0lOVEVSU0lMLAorCQkJCQkgICBtYXN0ZXJfd2VwX2ZsYWcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoga2V5IG11c3QgYmUgMzIgYnl0ZXMsIGluY2x1ZGluZyB0aGUgdHggYW5kIHJ4IE1JQyBrZXlzLgorICogcnNjIG11c3QgYmUgOCBieXRlcworICogdHNjIG11c3QgYmUgOCBieXRlcyBvciBOVUxMCisgKi8KK2ludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGhlcm1lc190ICpodywgaW50IGtleV9pZHgsIGludCBzZXRfdHgsCisJCQkgICAgICB1OCAqa2V5LCB1OCAqcnNjLCB1OCAqdHNjKQoreworCXN0cnVjdCB7CisJCV9fbGUxNiBpZHg7CisJCXU4IHJzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKKwkJdTgga2V5W1RLSVBfS0VZTEVOXTsKKwkJdTggdHhfbWljW01JQ19LRVlMRU5dOworCQl1OCByeF9taWNbTUlDX0tFWUxFTl07CisJCXU4IHRzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7CisJaW50IHJldDsKKwlpbnQgZXJyOworCWludCBrOworCXUxNiB4bWl0dGluZzsKKworCWtleV9pZHggJj0gMHgzOworCisJaWYgKHNldF90eCkKKwkJa2V5X2lkeCB8PSAweDgwMDA7CisKKwlidWYuaWR4ID0gY3B1X3RvX2xlMTYoa2V5X2lkeCk7CisJbWVtY3B5KGJ1Zi5rZXksIGtleSwKKwkgICAgICAgc2l6ZW9mKGJ1Zi5rZXkpICsgc2l6ZW9mKGJ1Zi50eF9taWMpICsgc2l6ZW9mKGJ1Zi5yeF9taWMpKTsKKworCWlmIChyc2MgPT0gTlVMTCkKKwkJbWVtc2V0KGJ1Zi5yc2MsIDAsIHNpemVvZihidWYucnNjKSk7CisJZWxzZQorCQltZW1jcHkoYnVmLnJzYywgcnNjLCBzaXplb2YoYnVmLnJzYykpOworCisJaWYgKHRzYyA9PSBOVUxMKSB7CisJCW1lbXNldChidWYudHNjLCAwLCBzaXplb2YoYnVmLnRzYykpOworCQlidWYudHNjWzRdID0gMHgxMDsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmLnRzYywgdHNjLCBzaXplb2YoYnVmLnRzYykpOworCX0KKworCS8qIFdhaXQgdXB0byAxMDBtcyBmb3IgdHggcXVldWUgdG8gZW1wdHkgKi8KKwlrID0gMTAwOworCWRvIHsKKwkJay0tOworCQl1ZGVsYXkoMTAwMCk7CisJCXJldCA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1RYUVVFVUVFTVBUWSwKKwkJCQkJICAmeG1pdHRpbmcpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfSB3aGlsZSAoKGsgPiAwKSAmJiB4bWl0dGluZyk7CisKKwlpZiAoayA9PSAwKQorCQlyZXQgPSAtRVRJTUVET1VUOworCisJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORkFERERFRkFVTFRUS0lQS0VZX0FHRVJFLAorCQkJCSAgJmJ1Zik7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogZXJyOworfQorCitpbnQgb3Jpbm9jb19jbGVhcl90a2lwX2tleShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5X2lkeCkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCW1lbXNldCgmcHJpdi0+dGtpcF9rZXlba2V5X2lkeF0sIDAsIHNpemVvZihwcml2LT50a2lwX2tleVtrZXlfaWR4XSkpOworCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgICBIRVJNRVNfUklEX0NORlJFTURFRkFVTFRUS0lQS0VZX0FHRVJFLAorCQkJCSAgIGtleV9pZHgpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBjbGVhcmluZyBUS0lQIGtleSAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGVyciwga2V5X2lkeCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QsCisJCQkJICAgIGludCBtY19jb3VudCwgaW50IHByb21pc2MpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCisJaWYgKHByb21pc2MgIT0gcHJpdi0+cHJvbWlzY3VvdXMpIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlBST01JU0NVT1VTTU9ERSwKKwkJCQkJICAgcHJvbWlzYyk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUFJPTUlTQ1VPVVNNT0RFIHRvIDEuXG4iLAorCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGVycik7CisJCX0gZWxzZQorCQkJcHJpdi0+cHJvbWlzY3VvdXMgPSBwcm9taXNjOworCX0KKworCS8qIElmIHdlJ3JlIG5vdCBpbiBwcm9taXNjdW91cyBtb2RlLCB0aGVuIHdlIG5lZWQgdG8gc2V0IHRoZQorCSAqIGdyb3VwIGFkZHJlc3MgaWYgZWl0aGVyIHdlIHdhbnQgdG8gbXVsdGljYXN0LCBvciBpZiB3ZSB3ZXJlCisJICogbXVsdGljYXN0aW5nIGFuZCB3YW50IHRvIHN0b3AgKi8KKwlpZiAoIXByb21pc2MgJiYgKG1jX2NvdW50IHx8IHByaXYtPm1jX2NvdW50KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKnAgPSBtY19saXN0OworCQlzdHJ1Y3QgaGVybWVzX211bHRpY2FzdCBtY2xpc3Q7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7CisJCQkvKiBwYXJhbm9pYTogaXMgbGlzdCBzaG9ydGVyIHRoYW4gbWNfY291bnQ/ICovCisJCQlCVUdfT04oIXApOworCQkJLyogcGFyYW5vaWE6IGJhZCBhZGRyZXNzIHNpemUgaW4gbGlzdD8gKi8KKwkJCUJVR19PTihwLT5kbWlfYWRkcmxlbiAhPSBFVEhfQUxFTik7CisKKwkJCW1lbWNweShtY2xpc3QuYWRkcltpXSwgcC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJCXAgPSBwLT5uZXh0OworCQl9CisKKwkJaWYgKHApCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTXVsdGljYXN0IGxpc3QgaXMgIgorCQkJICAgICAgICJsb25nZXIgdGhhbiBtY19jb3VudFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCisJCQkJICAgSEVSTUVTX1JJRF9DTkZHUk9VUEFERFJFU1NFUywKKwkJCQkgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKG1jX2NvdW50ICogRVRIX0FMRU4pLAorCQkJCSAgICZtY2xpc3QpOworCQlpZiAoZXJyKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBtdWx0aWNhc3QgbGlzdC5cbiIsCisJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgZXJyKTsKKwkJZWxzZQorCQkJcHJpdi0+bWNfY291bnQgPSBtY19jb3VudDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyogUmV0dXJuIDogPCAwIC0+IGVycm9yIGNvZGUgOyA+PSAwIC0+IGxlbmd0aCAqLworaW50IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYWN0aXZlLAorCQkJIGNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGVzc2lkYnVmOworCWNoYXIgKnAgPSAoY2hhciAqKSgmZXNzaWRidWYudmFsKTsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPiAwKSB7CisJCS8qIFdlIHJlYWQgdGhlIGRlc2lyZWQgU1NJRCBmcm9tIHRoZSBoYXJkd2FyZSByYXRoZXIKKwkJICAgdGhhbiBmcm9tIHByaXYtPmRlc2lyZWRfZXNzaWQsIGp1c3QgaW4gY2FzZSB0aGUKKwkJICAgZmlybXdhcmUgaXMgYWxsb3dlZCB0byBjaGFuZ2UgaXQgb24gdXMuIEknbSBub3QKKwkJICAgc3VyZSBhYm91dCB0aGlzICovCisJCS8qIE15IGd1ZXNzIGlzIHRoYXQgdGhlIE9XTlNTSUQgc2hvdWxkIGFsd2F5cyBiZSB3aGF0ZXZlcgorCQkgKiB3ZSBzZXQgdG8gdGhlIGNhcmQsIHdoZXJlYXMgQ1VSUkVOVF9TU0lEIGlzIHRoZSBvbmUgdGhhdAorCQkgKiBtYXkgY2hhbmdlLi4uIC0gSmVhbiBJSSAqLworCQl1MTYgcmlkOworCisJCSphY3RpdmUgPSAxOworCisJCXJpZCA9IChwcml2LT5wb3J0X3R5cGUgPT0gMykgPyBIRVJNRVNfUklEX0NORk9XTlNTSUQgOgorCQkJSEVSTUVTX1JJRF9DTkZERVNJUkVEU1NJRDsKKworCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCByaWQsIHNpemVvZihlc3NpZGJ1ZiksCisJCQkJICAgICAgTlVMTCwgJmVzc2lkYnVmKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbF91bmxvY2s7CisJfSBlbHNlIHsKKwkJKmFjdGl2ZSA9IDA7CisKKwkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UU1NJRCwKKwkJCQkgICAgICBzaXplb2YoZXNzaWRidWYpLCBOVUxMLCAmZXNzaWRidWYpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsX3VubG9jazsKKwl9CisKKwlsZW4gPSBsZTE2X3RvX2NwdShlc3NpZGJ1Zi5sZW4pOworCUJVR19PTihsZW4gPiBJV19FU1NJRF9NQVhfU0laRSk7CisKKwltZW1zZXQoYnVmLCAwLCBJV19FU1NJRF9NQVhfU0laRSk7CisJbWVtY3B5KGJ1ZiwgcCwgbGVuKTsKKwllcnIgPSBsZW47CisKKyBmYWlsX3VubG9jazoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IG9yaW5vY29faHdfZ2V0X2ZyZXEoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdTE2IGNoYW5uZWw7CisJaW50IGZyZXEgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRDSEFOTkVMLAorCQkJCSAgJmNoYW5uZWwpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogSW50ZXJzaWwgZmlybXdhcmUgMS4zLjUgcmV0dXJucyAwIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duICovCisJaWYgKGNoYW5uZWwgPT0gMCkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgoY2hhbm5lbCA8IDEpIHx8IChjaGFubmVsID4gTlVNX0NIQU5ORUxTKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2hhbm5lbCBvdXQgb2YgcmFuZ2UgKCVkKSFcbiIsCisJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBjaGFubmVsKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKworCX0KKwlmcmVxID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW5uZWwpOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlpZiAoZXJyID4gMCkKKwkJZXJyID0gLUVCVVNZOworCXJldHVybiBlcnIgPyBlcnIgOiBmcmVxOworfQorCitpbnQgb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBpbnQgKm51bXJhdGVzLCBzMzIgKnJhdGVzLCBpbnQgbWF4KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGxpc3Q7CisJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopJmxpc3QudmFsOworCWludCBlcnIgPSAwOworCWludCBudW07CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVVBQT1JURUREQVRBUkFURVMsCisJCQkgICAgICBzaXplb2YobGlzdCksIE5VTEwsICZsaXN0KTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW51bSA9IGxlMTZfdG9fY3B1KGxpc3QubGVuKTsKKwkqbnVtcmF0ZXMgPSBudW07CisJbnVtID0gbWluKG51bSwgbWF4KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJcmF0ZXNbaV0gPSAocFtpXSAmIDB4N2YpICogNTAwMDAwOyAvKiBjb252ZXJ0IHRvIGJwcyAqLworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzZjIzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaApAQCAtMCwwICsxLDQ3IEBACisvKiBFbmNhcHN1bGF0ZSBiYXNpYyBzZXR0aW5nIGNoYW5nZXMgb24gSGVybWVzIGhhcmR3YXJlCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fSFdfSF8KKyNkZWZpbmUgX09SSU5PQ09fSFdfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKworLyogSGFyZHdhcmUgQkFQcyAqLworI2RlZmluZSBVU0VSX0JBUCAwCisjZGVmaW5lIElSUV9CQVAgIDEKKworLyogV0VQIGtleSBzaXplcyAqLworI2RlZmluZSBTTUFMTF9LRVlfU0laRSA1CisjZGVmaW5lIExBUkdFX0tFWV9TSVpFIDEzCisKKy8qIE51bWJlciBvZiBzdXBwb3J0ZWQgY2hhbm5lbHMgKi8KKyNkZWZpbmUgTlVNX0NIQU5ORUxTIDE0CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlOworc3RydWN0IGRldl9hZGRyX2xpc3Q7CisKK2ludCBvcmlub2NvX2dldF9iaXRyYXRlbW9kZShpbnQgYml0cmF0ZSwgaW50IGF1dG9tYXRpYyk7Cit2b2lkIG9yaW5vY29fZ2V0X3JhdGVtb2RlX2NmZyhpbnQgcmF0ZW1vZGUsIGludCAqYml0cmF0ZSwgaW50ICphdXRvbWF0aWMpOworCitpbnQgb3Jpbm9jb19od19nZXRfdGtpcF9pdihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5LCB1OCAqdHNjKTsKK2ludCBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgb3Jpbm9jb19od19nZXRfYWN0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICpiaXRyYXRlKTsKK2ludCBfX29yaW5vY29faHdfc2V0X3dhcChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBfX29yaW5vY29faHdfc2V0dXBfZW5jKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaGVybWVzX3QgKmh3LCBpbnQga2V5X2lkeCwgaW50IHNldF90eCwKKwkJCSAgICAgIHU4ICprZXksIHU4ICpyc2MsIHU4ICp0c2MpOworaW50IG9yaW5vY29fY2xlYXJfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleV9pZHgpOworaW50IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QsCisJCQkJICAgIGludCBtY19jb3VudCwgaW50IHByb21pc2MpOworaW50IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYWN0aXZlLAorCQkJIGNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdKTsKK2ludCBvcmlub2NvX2h3X2dldF9mcmVxKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgaW50ICpudW1yYXRlcywgczMyICpyYXRlcywgaW50IG1heCk7CisKKyNlbmRpZiAvKiBfT1JJTk9DT19IV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDU1OTNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMKQEAgLTAsMCArMSwyNjY3IEBACisvKiBtYWluLmMgLSAoZm9ybWVybHkga25vd24gYXMgZGxkd2RfY3MuYywgb3Jpbm9jb19jcy5jIGFuZCBvcmlub2NvLmMpCisgKgorICogQSBkcml2ZXIgZm9yIEhlcm1lcyBvciBQcmlzbSAyIGNoaXBzZXQgYmFzZWQgUENNQ0lBIHdpcmVsZXNzCisgKiBhZGFwdG9ycywgd2l0aCBMdWNlbnQvQWdlcmUsIEludGVyc2lsIG9yIFN5bWJvbCBmaXJtd2FyZS4KKyAqCisgKiBDdXJyZW50IG1haW50YWluZXJzIChhcyBvZiAyOSBTZXB0ZW1iZXIgMjAwMykgYXJlOgorICogCVBhdmVsIFJvc2tpbiA8cHJvc2tpIEFUIGdudS5vcmc+CisgKiBhbmQJRGF2aWQgR2lic29uIDxoZXJtZXMgQVQgZ2lic29uLmRyb3BiZWFyLmlkLmF1PgorICoKKyAqIChDKSBDb3B5cmlnaHQgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24gMjAwMS0yMDAzLgorICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEdpYnNvbiwgTGludXhjYXJlIEF1c3RyYWxpYS4KKyAqCVdpdGggc29tZSBoZWxwIGZyb20gOgorICogQ29weXJpZ2h0IChDKSAyMDAxIEplYW4gVG91cnJpbGhlcywgSFAgTGFicworICogQ29weXJpZ2h0IChDKSAyMDAxIEJlbmphbWluIEhlcnJlbnNjaG1pZHQKKyAqCisgKiBCYXNlZCBvbiBkdW1teV9jcy5jIDEuMjcgMjAwMC8wNi8xMiAyMToyNzoyNQorICoKKyAqIFBvcnRpb25zIGJhc2VkIG9uIHd2bGFuX2NzLmMgMS4wLjYsIENvcHlyaWdodCBBbmRyZWFzIE5ldWhhdXMgPGFuZHkKKyAqIEFUIGZhc3RhLmZoLWRvcnRtdW5kLmRlPgorICogICAgICBodHRwOi8vd3d3LnN0dWQuZmgtZG9ydG11bmQuZGUvfmFuZHkvd3ZsYW4vCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKKyAqIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKKyAqIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUKKyAqIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICogPGRhaGluZHMgQVQgdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQKKyAqIEEuIEhpbmRzIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzCisgKiBSZXNlcnZlZC4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4KKyAqIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorICogYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyAqIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlCisgKiBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuICAqLworCisvKgorICogVE9ETworICoJbyBIYW5kbGUgZGUtZW5jYXBzdWxhdGlvbiB3aXRoaW4gbmV0d29yayBsYXllciwgcHJvdmlkZSA4MDIuMTEKKyAqCSAgaGVhZGVycyAocGF0Y2ggZnJvbSBUaG9tYXMgJ0RlbnQnIE1pcmxhY2hlcikKKyAqCW8gRml4IHBvc3NpYmxlIHJhY2VzIGluIFNQWSBoYW5kbGluZy4KKyAqCW8gRGlzY29ubmVjdCB3aXJlbGVzcyBleHRlbnNpb25zIGZyb20gZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbi4KKyAqCW8gKG1heWJlKSBTb2Z0d2FyZSBXRVAgc3VwcG9ydCAocGF0Y2ggZnJvbSBTdGFubyBNZWR1bmEpLgorICoJbyAobWF5YmUpIFVzZSBtdWx0aXBsZSBUeCBidWZmZXJzIC0gZHJpdmVyIGhhbmRsaW5nIHF1ZXVlCisgKgkgIHJhdGhlciB0aGFuIGZpcm13YXJlLgorICovCisKKy8qIExvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbjoKKyAqCisgKiBUaGUgYmFzaWMgcHJpbmNpcGxlIGlzIHRoYXQgZXZlcnl0aGluZyBpcyBzZXJpYWxpemVkIHRocm91Z2ggYQorICogc2luZ2xlIHNwaW5sb2NrLCBwcml2LT5sb2NrLiAgVGhlIGxvY2sgaXMgdXNlZCBpbiB1c2VyLCBiaCBhbmQgaXJxCisgKiBjb250ZXh0LCBzbyB3aGVuIHRha2VuIG91dHNpZGUgaGFyZGlycSBjb250ZXh0IGl0IHNob3VsZCBhbHdheXMgYmUKKyAqIHRha2VuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gIFRoZSBsb2NrIHByb3RlY3RzIGJvdGggdGhlCisgKiBoYXJkd2FyZSBhbmQgdGhlIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUuCisgKgorICogQW5vdGhlciBmbGFnLCBwcml2LT5od191bmF2YWlsYWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFyZHdhcmUgaXMKKyAqIHVuYXZhaWxhYmxlIGZvciBhbiBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZSAoZS5nLiBzdXNwZW5kZWQsIG9yIGluCisgKiB0aGUgbWlkZGxlIG9mIGEgaGFyZCByZXNldCkuICBUaGlzIGZsYWcgaXMgcHJvdGVjdGVkIGJ5IHRoZQorICogc3BpbmxvY2suICBBbGwgY29kZSB3aGljaCB0b3VjaGVzIHRoZSBoYXJkd2FyZSBzaG91bGQgY2hlY2sgdGhlCisgKiBmbGFnIGFmdGVyIHRha2luZyB0aGUgbG9jaywgYW5kIGlmIGl0IGlzIHNldCwgZ2l2ZSB1cCBvbiB3aGF0ZXZlcgorICogdGhleSBhcmUgZG9pbmcgYW5kIGRyb3AgdGhlIGxvY2sgYWdhaW4uICBUaGUgb3Jpbm9jb19sb2NrKCkKKyAqIGZ1bmN0aW9uIGhhbmRsZXMgdGhpcyAoaXQgdW5sb2NrcyBhbmQgcmV0dXJucyAtRUJVU1kgaWYKKyAqIGh3X3VuYXZhaWxhYmxlIGlzIG5vbi16ZXJvKS4KKyAqLworCisjZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvIgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKworI2luY2x1ZGUgImhlcm1lc19yaWQuaCIKKyNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJzY2FuLmgiCisjaW5jbHVkZSAibWljLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJ3ZXh0LmgiCisjaW5jbHVkZSAibWFpbi5oIgorCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+ICYgIgorCSAgICAgICJEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgTHVjZW50IE9yaW5vY28sIFByaXNtIElJIGJhc2VkICIKKwkJICAgImFuZCBzaW1pbGFyIHdpcmVsZXNzIGNhcmRzIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CisKKy8qIExldmVsIG9mIGRlYnVnZ2luZy4gVXNlZCBpbiB0aGUgbWFjcm9zIGluIG9yaW5vY28uaCAqLworI2lmZGVmIE9SSU5PQ09fREVCVUcKK2ludCBvcmlub2NvX2RlYnVnID0gT1JJTk9DT19ERUJVRzsKK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19kZWJ1Zyk7Cittb2R1bGVfcGFyYW0ob3Jpbm9jb19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mob3Jpbm9jb19kZWJ1ZywgIkRlYnVnIGxldmVsIik7CisjZW5kaWYKKworc3RhdGljIGludCBzdXBwcmVzc19saW5rc3RhdHVzOyAvKiA9IDAgKi8KK21vZHVsZV9wYXJhbShzdXBwcmVzc19saW5rc3RhdHVzLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3VwcHJlc3NfbGlua3N0YXR1cywgIkRvbid0IGxvZyBsaW5rIHN0YXR1cyBjaGFuZ2VzIik7CisKK3N0YXRpYyBpbnQgaWdub3JlX2Rpc2Nvbm5lY3Q7IC8qID0gMCAqLworbW9kdWxlX3BhcmFtKGlnbm9yZV9kaXNjb25uZWN0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfZGlzY29ubmVjdCwKKwkJICJEb24ndCByZXBvcnQgbG9zdCBsaW5rIHRvIHRoZSBuZXR3b3JrIGxheWVyIik7CisKK2ludCBmb3JjZV9tb25pdG9yOyAvKiA9IDAgKi8KK21vZHVsZV9wYXJhbShmb3JjZV9tb25pdG9yLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tb25pdG9yLCAiQWxsb3cgbW9uaXRvciBtb2RlIGZvciBhbGwgZmlybXdhcmUgdmVyc2lvbnMiKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJuYWwgY29uc3RhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiA4MDIuMiBMTEMvU05BUCBoZWFkZXIgdXNlZCBmb3IgRXRoZXJuZXQgZW5jYXBzdWxhdGlvbiBvdmVyIDgwMi4xMSAqLworc3RhdGljIGNvbnN0IHU4IGVuY2Fwc19oZHJbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKKyNkZWZpbmUgRU5DQVBTX09WRVJIRUFECQkoc2l6ZW9mKGVuY2Fwc19oZHIpICsgMikKKworI2RlZmluZSBPUklOT0NPX01JTl9NVFUJCTI1NgorI2RlZmluZSBPUklOT0NPX01BWF9NVFUJCShJRUVFODAyMTFfTUFYX0RBVEFfTEVOIC0gRU5DQVBTX09WRVJIRUFEKQorCisjZGVmaW5lIFNZTUJPTF9NQVhfVkVSX0xFTgkoMTQpCisjZGVmaW5lIE1BWF9JUlFMT09QU19QRVJfSVJRCTEwCisjZGVmaW5lIE1BWF9JUlFMT09QU19QRVJfSklGRlkJKDIwMDAwL0haKSAvKiBCYXNlZCBvbiBhIGd1ZXN0aW1hdGUgb2YKKwkJCQkJICAgICogaG93IG1hbnkgZXZlbnRzIHRoZQorCQkJCQkgICAgKiBkZXZpY2UgY291bGQKKwkJCQkJICAgICogbGVnaXRpbWF0ZWx5IGdlbmVyYXRlICovCisjZGVmaW5lIFRYX05JQ0JVRl9TSVpFX0JVRwkxNTg1CQkvKiBCdWcgaW4gU3ltYm9sIGZpcm13YXJlICovCisKKyNkZWZpbmUgRFVNTVlfRklECQkweEZGRkYKKworLyojZGVmaW5lIE1BWF9NVUxUSUNBU1QocHJpdikJKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSA/IFwKKyAgSEVSTUVTX01BWF9NVUxUSUNBU1QgOiAwKSovCisjZGVmaW5lIE1BWF9NVUxUSUNBU1QocHJpdikJKEhFUk1FU19NQVhfTVVMVElDQVNUKQorCisjZGVmaW5lIE9SSU5PQ09fSU5URU4JIAkoSEVSTUVTX0VWX1JYIHwgSEVSTUVTX0VWX0FMTE9DIFwKKwkJCQkgfCBIRVJNRVNfRVZfVFggfCBIRVJNRVNfRVZfVFhFWEMgXAorCQkJCSB8IEhFUk1FU19FVl9XVEVSUiB8IEhFUk1FU19FVl9JTkZPIFwKKwkJCQkgfCBIRVJNRVNfRVZfSU5GRFJPUCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcmlub2NvX2V0aHRvb2xfb3BzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhIHR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJlZ2lubmluZyBvZiB0aGUgVHggZGVzY3JpcHRvciwgdXNlZCBpbiBUeEV4YyBoYW5kbGluZyAqLworc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIHsKKwlzdHJ1Y3QgaGVybWVzX3R4X2Rlc2NyaXB0b3IgZGVzYzsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogUnggZnJhbWUgaGVhZGVyIGV4Y2VwdCBjb21wYXRpYmlsaXR5IDgwMi4zIGhlYWRlciAqLworc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yIHsKKwkvKiBDb250cm9sICovCisJX19sZTE2IHN0YXR1czsKKwlfX2xlMzIgdGltZTsKKwl1OCBzaWxlbmNlOworCXU4IHNpZ25hbDsKKwl1OCByYXRlOworCXU4IHJ4ZmxvdzsKKwlfX2xlMzIgcmVzZXJ2ZWQ7CisKKwkvKiA4MDIuMTEgaGVhZGVyICovCisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IGFkZHIyW0VUSF9BTEVOXTsKKwl1OCBhZGRyM1tFVEhfQUxFTl07CisJX19sZTE2IHNlcV9jdGw7CisJdTggYWRkcjRbRVRIX0FMRU5dOworCisJLyogRGF0YSBsZW5ndGggKi8KKwlfX2xlMTYgZGF0YV9sZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG9yaW5vY29fcnhfZGF0YSB7CisJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgc2V0X3BvcnRfdHlwZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN3aXRjaCAocHJpdi0+aXdfbW9kZSkgeworCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJcHJpdi0+cG9ydF90eXBlID0gMTsKKwkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJaWYgKHByaXYtPnByZWZlcl9wb3J0MykgeworCQkJcHJpdi0+cG9ydF90eXBlID0gMzsKKwkJCXByaXYtPmNyZWF0ZWlic3MgPSAwOworCQl9IGVsc2UgeworCQkJcHJpdi0+cG9ydF90eXBlID0gcHJpdi0+aWJzc19wb3J0OworCQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX01PTklUT1I6CisJCXByaXYtPnBvcnRfdHlwZSA9IDM7CisJCXByaXYtPmNyZWF0ZWlic3MgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIHByaXYtPml3X21vZGUgaW4gc2V0X3BvcnRfdHlwZSgpXG4iLAorCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXZpY2UgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgb3Jpbm9jb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKKworCWlmICghZXJyKQorCQlwcml2LT5vcGVuID0gMTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCisJLyogV2UgbXVzdG4ndCB1c2Ugb3Jpbm9jb19sb2NrKCkgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlCisJICAgYWJsZSB0byBjbG9zZSB0aGUgaW50ZXJmYWNlIGV2ZW4gaWYgaHdfdW5hdmFpbGFibGUgaXMgc2V0CisJICAgKGUuZy4gYXMgd2UncmUgcmVsZWFzZWQgYWZ0ZXIgYSBQQyBDYXJkIHJlbW92YWwpICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlwcml2LT5vcGVuID0gMDsKKworCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpvcmlub2NvX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuICZwcml2LT5zdGF0czsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdCgpICIKKwkJICAgICAgICJjYWxsZWQgd2hlbiBod191bmF2YWlsYWJsZVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG9yaW5vY29fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICgobmV3X210dSA8IE9SSU5PQ09fTUlOX01UVSkgfHwgKG5ld19tdHUgPiBPUklOT0NPX01BWF9NVFUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE1UVSArIGVuY2Fwc3VsYXRpb24gKyBoZWFkZXIgbGVuZ3RoICovCisJaWYgKChuZXdfbXR1ICsgRU5DQVBTX09WRVJIRUFEICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyKSkgPgorCSAgICAgKHByaXYtPm5pY2J1Zl9zaXplIC0gRVRIX0hMRU4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldi0+bXR1ID0gbmV3X210dTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUeCBwYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgb3Jpbm9jb194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1MTYgdHhmaWQgPSBwcml2LT50eGZpZDsKKwlzdHJ1Y3QgZXRoaGRyICplaDsKKwlpbnQgdHhfY29udHJvbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVHggb24gc3RvcHBlZCBkZXZpY2UhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUeCB3aGlsZSB0cmFuc21pdHRlciBidXN5IVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3htaXQoKSBjYWxsZWQgd2hpbGUgaHdfdW5hdmFpbGFibGVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikgfHwgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSkgeworCQkvKiBPb3BzLCB0aGUgZmlybXdhcmUgaGFzbid0IGVzdGFibGlzaGVkIGEgY29ubmVjdGlvbiwKKwkJICAgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0ICh0aGlzIHNlZW1zIHRvIGJlIHRoZQorCQkgICBzYWZlc3QgYXBwcm9hY2gpLiAqLworCQlnb3RvIGRyb3A7CisJfQorCisJLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLworCWlmIChza2ItPmxlbiA8IEVUSF9ITEVOKQorCQlnb3RvIGRyb3A7CisKKwl0eF9jb250cm9sID0gSEVSTUVTX1RYQ1RSTF9UWF9PSyB8IEhFUk1FU19UWENUUkxfVFhfRVg7CisKKwlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApCisJCXR4X2NvbnRyb2wgfD0gKHByaXYtPnR4X2tleSA8PCBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCkgfAorCQkJSEVSTUVTX1RYQ1RSTF9NSUM7CisKKwlpZiAocHJpdi0+aGFzX2FsdF90eGNudGwpIHsKKwkJLyogV1BBIGVuYWJsZWQgZmlybXdhcmVzIGhhdmUgdHhfY250bCBhdCB0aGUgZW5kIG9mCisJCSAqIHRoZSA4MDIuMTEgaGVhZGVyLiAgU28gd3JpdGUgemVyb2VkIGRlc2NyaXB0b3IgYW5kCisJCSAqIDgwMi4xMSBoZWFkZXIgYXQgdGhlIHNhbWUgdGltZQorCQkgKi8KKwkJY2hhciBkZXNjW0hFUk1FU184MDJfM19PRkZTRVRdOworCQlfX2xlMTYgKnR4Y250bCA9IChfX2xlMTYgKikgJmRlc2NbSEVSTUVTX1RYQ05UTDJfT0ZGU0VUXTsKKworCQltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7CisKKwkJKnR4Y250bCA9IGNwdV90b19sZTE2KHR4X2NvbnRyb2wpOworCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZkZXNjLCBzaXplb2YoZGVzYyksCisJCQkJCXR4ZmlkLCAwKTsKKwkJaWYgKGVycikgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIFR4ICIKKwkJCQkgICAgICAgImRlc2NyaXB0b3IgdG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGJ1c3k7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgaGVybWVzX3R4X2Rlc2NyaXB0b3IgZGVzYzsKKworCQltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7CisKKwkJZGVzYy50eF9jb250cm9sID0gY3B1X3RvX2xlMTYodHhfY29udHJvbCk7CisJCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJmRlc2MsIHNpemVvZihkZXNjKSwKKwkJCQkJdHhmaWQsIDApOworCQlpZiAoZXJyKSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgVHggIgorCQkJCSAgICAgICAiZGVzY3JpcHRvciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gYnVzeTsKKwkJfQorCisJCS8qIENsZWFyIHRoZSA4MDIuMTEgaGVhZGVyIGFuZCBkYXRhIGxlbmd0aCBmaWVsZHMgLSBzb21lCisJCSAqIGZpcm13YXJlcyAoZS5nLiBMdWNlbnQvQWdlcmUgOC54eCkgYXBwZWFyIHRvIGdldCBjb25mdXNlZAorCQkgKiBpZiB0aGlzIGlzbid0IGRvbmUuICovCisJCWhlcm1lc19jbGVhcl93b3JkcyhodywgSEVSTUVTX0RBVEEwLAorCQkJCSAgIEhFUk1FU184MDJfM19PRkZTRVQgLSBIRVJNRVNfODAyXzExX09GRlNFVCk7CisJfQorCisJZWggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKKworCS8qIEVuY2Fwc3VsYXRlIEV0aGVybmV0LUlJIGZyYW1lcyAqLworCWlmIChudG9ocyhlaC0+aF9wcm90bykgPiBFVEhfREFUQV9MRU4pIHsgLyogRXRoZXJuZXQtSUkgZnJhbWUgKi8KKwkJc3RydWN0IGhlYWRlcl9zdHJ1Y3QgeworCQkJc3RydWN0IGV0aGhkciBldGg7CS8qIDgwMi4zIGhlYWRlciAqLworCQkJdTggZW5jYXBbNl07CQkvKiA4MDIuMiBoZWFkZXIgKi8KKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGRyOworCisJCS8qIFN0cmlwIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UgZnJvbSB0aGUgZGF0YSAqLworCQlza2JfcHVsbChza2IsIDIgKiBFVEhfQUxFTik7CisKKwkJLyogQW5kIG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGhlYWRlciAqLworCQltZW1jcHkoJmhkci5ldGgsIGVoLCAyICogRVRIX0FMRU4pOworCQloZHIuZXRoLmhfcHJvdG8gPSBodG9ucyhzaXplb2YoZW5jYXBzX2hkcikgKyBza2ItPmxlbik7CisJCW1lbWNweShoZHIuZW5jYXAsIGVuY2Fwc19oZHIsIHNpemVvZihlbmNhcHNfaGRyKSk7CisKKwkJLyogSW5zZXJ0IHRoZSBTTkFQIGhlYWRlciAqLworCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBzaXplb2YoaGRyKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBOb3QgZW5vdWdoIGhlYWRyb29tIGZvciA4MDIuMiBoZWFkZXJzICVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgc2tiX2hlYWRyb29tKHNrYikpOworCQkJZ290byBkcm9wOworCQl9CisJCWVoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoaGRyKSk7CisJCW1lbWNweShlaCwgJmhkciwgc2l6ZW9mKGhkcikpOworCX0KKworCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCQl0eGZpZCwgSEVSTUVTXzgwMl8zX09GRlNFVCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIHBhY2tldCB0byBCQVBcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gYnVzeTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgTWljaGFlbCBNSUMgKi8KKwlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHsKKwkJdTggbWljX2J1ZltNSUNIQUVMX01JQ19MRU4gKyAxXTsKKwkJdTggKm1pYzsKKwkJc2l6ZV90IG9mZnNldDsKKwkJc2l6ZV90IGxlbjsKKworCQlpZiAoc2tiLT5sZW4gJSAyKSB7CisJCQkvKiBNSUMgc3RhcnQgaXMgb24gYW4gb2RkIGJvdW5kYXJ5ICovCisJCQltaWNfYnVmWzBdID0gc2tiLT5kYXRhW3NrYi0+bGVuIC0gMV07CisJCQltaWMgPSAmbWljX2J1ZlsxXTsKKwkJCW9mZnNldCA9IHNrYi0+bGVuIC0gMTsKKwkJCWxlbiA9IE1JQ0hBRUxfTUlDX0xFTiArIDE7CisJCX0gZWxzZSB7CisJCQltaWMgPSAmbWljX2J1ZlswXTsKKwkJCW9mZnNldCA9IHNrYi0+bGVuOworCQkJbGVuID0gTUlDSEFFTF9NSUNfTEVOOworCQl9CisKKwkJb3Jpbm9jb19taWMocHJpdi0+dHhfdGZtX21pYywKKwkJCSAgICBwcml2LT50a2lwX2tleVtwcml2LT50eF9rZXldLnR4X21pYywKKwkJCSAgICBlaC0+aF9kZXN0LCBlaC0+aF9zb3VyY2UsIDAgLyogcHJpb3JpdHkgKi8sCisJCQkgICAgc2tiLT5kYXRhICsgRVRIX0hMRU4sIHNrYi0+bGVuIC0gRVRIX0hMRU4sIG1pYyk7CisKKwkJLyogV3JpdGUgdGhlIE1JQyAqLworCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZtaWNfYnVmWzBdLCBsZW4sCisJCQkJCXR4ZmlkLCBIRVJNRVNfODAyXzNfT0ZGU0VUICsgb2Zmc2V0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBNSUMgdG8gQkFQXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gYnVzeTsKKwkJfQorCX0KKworCS8qIEZpbmFsbHksIHdlIGFjdHVhbGx5IGluaXRpYXRlIHRoZSBzZW5kICovCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVFggfCBIRVJNRVNfQ01EX1JFQ0wsCisJCQkJdHhmaWQsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHRyYW5zbWl0dGluZyBwYWNrZXRcbiIsCisJCQkJZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGJ1c3k7CisJfQorCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJc3RhdHMtPnR4X2J5dGVzICs9IEhFUk1FU184MDJfM19PRkZTRVQgKyBza2ItPmxlbjsKKwlnb3RvIG9rOworCisgZHJvcDoKKwlzdGF0cy0+dHhfZXJyb3JzKys7CisJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKworIG9rOgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7CisKKyBidXN5OgorCWlmIChlcnIgPT0gLUVJTykKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKTsKKworCWlmIChmaWQgIT0gcHJpdi0+dHhmaWQpIHsKKwkJaWYgKGZpZCAhPSBEVU1NWV9GSUQpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQWxsb2NhdGUgZXZlbnQgb24gdW5leHBlY3RlZCBmaWQgKCUwNFgpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZmlkKTsKKwkJcmV0dXJuOworCX0KKworCWhlcm1lc193cml0ZV9yZWduKGh3LCBBTExPQ0ZJRCwgRFVNTVlfRklEKTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisKKwlzdGF0cy0+dHhfcGFja2V0cysrOworCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCisJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFRYQ09NUExGSUQsIERVTU1ZX0ZJRCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90eGV4YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKTsKKwl1MTYgc3RhdHVzOworCXN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSBoZHI7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZmlkID09IERVTU1ZX0ZJRCkKKwkJcmV0dXJuOyAvKiBOb3RoaW5nJ3MgcmVhbGx5IGhhcHBlbmVkICovCisKKwkvKiBSZWFkIHBhcnQgb2YgdGhlIGZyYW1lIGhlYWRlciAtIHdlIG5lZWQgc3RhdHVzIGFuZCBhZGRyMSAqLworCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZoZHIsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSksCisJCQkgICAgICAgZmlkLCAwKTsKKworCWhlcm1lc193cml0ZV9yZWduKGh3LCBUWENPTVBMRklELCBEVU1NWV9GSUQpOworCXN0YXRzLT50eF9lcnJvcnMrKzsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWFkIGRlc2NyaXB0b3Igb24gVHggZXJyb3IgIgorCQkgICAgICAgIihGSUQ9JTA0WCBlcnJvciAlZClcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGZpZCwgZXJyKTsKKwkJcmV0dXJuOworCX0KKworCURFQlVHKDEsICIlczogVHggZXJyb3IsIGVyciAlZCAoRklEPSUwNFgpXG4iLCBkZXYtPm5hbWUsCisJICAgICAgZXJyLCBmaWQpOworCisJLyogV2UgcHJvZHVjZSBhIFRYRFJPUCBldmVudCBvbmx5IGZvciByZXRyeSBvciBsaWZldGltZQorCSAqIGV4Y2VlZGVkLCBiZWNhdXNlIHRoYXQncyB0aGUgb25seSBzdGF0dXMgdGhhdCByZWFsbHkgbWVhbgorCSAqIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIG5vZGUgd2VudCBhd2F5LgorCSAqIE90aGVyIGVycm9ycyBtZWFucyB0aGF0ICp3ZSogc2NyZXdlZCB1cC4gLSBKZWFuIElJICovCisJc3RhdHVzID0gbGUxNl90b19jcHUoaGRyLmRlc2Muc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYgKEhFUk1FU19UWFNUQVRfUkVUUllFUlIgfCBIRVJNRVNfVFhTVEFUX0FHRURFUlIpKSB7CisJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKKworCQkvKiBDb3B5IDgwMi4xMSBkZXN0IGFkZHJlc3MuCisJCSAqIFdlIHVzZSB0aGUgODAyLjExIGhlYWRlciBiZWNhdXNlIHRoZSBmcmFtZSBtYXkKKwkJICogbm90IGJlIDgwMi4zIG9yIG1heSBiZSBtYW5nbGVkLi4uCisJCSAqIEluIEFkLUhvYyBtb2RlLCBpdCB3aWxsIGJlIHRoZSBub2RlIGFkZHJlc3MuCisJCSAqIEluIG1hbmFnZWQgbW9kZSwgaXQgd2lsbCBiZSBtb3N0IGxpa2VseSB0aGUgQVAgYWRkcgorCQkgKiBVc2VyIHNwYWNlIHdpbGwgZmlndXJlIG91dCBob3cgdG8gY29udmVydCBpdCB0bworCQkgKiB3aGF0ZXZlciBpdCBuZWVkcyAoSVAgYWRkcmVzcyBvciBlbHNlKS4KKwkJICogLSBKZWFuIElJICovCisJCW1lbWNweSh3cnF1LmFkZHIuc2FfZGF0YSwgaGRyLmFkZHIxLCBFVEhfQUxFTik7CisJCXdycXUuYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisKKwkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWVFhEUk9QLCAmd3JxdSwgTlVMTCk7CisJfQorCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHggdGltZW91dCEgIgorCSAgICAgICAiQUxMT0NGSUQ9JTA0eCwgVFhDT01QTEZJRD0lMDR4LCBFVlNUQVQ9JTA0eFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCksCisJICAgICAgIGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpLCBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpKTsKKworCXN0YXRzLT50eF9lcnJvcnMrKzsKKworCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSeCBwYXRoIChkYXRhIGZyYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERvZXMgdGhlIGZyYW1lIGhhdmUgYSBTTkFQIGhlYWRlciBpbmRpY2F0aW5nIGl0IHNob3VsZCBiZQorICogZGUtZW5jYXBzdWxhdGVkIHRvIEV0aGVybmV0LUlJPyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfZXRoZXJzbmFwKHZvaWQgKl9oZHIpCit7CisJdTggKmhkciA9IF9oZHI7CisKKwkvKiBXZSBkZS1lbmNhcHN1bGF0ZSBhbGwgcGFja2V0cyB3aGljaCwgYSkgaGF2ZSBTTkFQIGhlYWRlcnMKKwkgKiAoaS5lLiBTU0FQPURTQVA9MHhhYSBhbmQgQ1RSTD0weDMgaW4gdGhlIDgwMi4yIExMQyBoZWFkZXIKKwkgKiBhbmQgd2hlcmUgYikgdGhlIE9VSSBvZiB0aGUgU05BUCBoZWFkZXIgaXMgMDA6MDA6MDAgb3IKKwkgKiAwMDowMDpmOCAtIHdlIG5lZWQgYm90aCBiZWNhdXNlIGRpZmZlcmVudCBBUHMgYXBwZWFyIHRvIHVzZQorCSAqIGRpZmZlcmVudCBPVUlzIGZvciBzb21lIHJlYXNvbiAqLworCXJldHVybiAobWVtY21wKGhkciwgJmVuY2Fwc19oZHIsIDUpID09IDApCisJCSYmICgoaGRyWzVdID09IDB4MDApIHx8IChoZHJbNV0gPT0gMHhmOCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3Jpbm9jb19zcHlfZ2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfY2hhciAqbWFjLAorCQkJCSAgICAgIGludCBsZXZlbCwgaW50IG5vaXNlKQoreworCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKKwl3c3RhdHMubGV2ZWwgPSBsZXZlbCAtIDB4OTU7CisJd3N0YXRzLm5vaXNlID0gbm9pc2UgLSAweDk1OworCXdzdGF0cy5xdWFsID0gKGxldmVsID4gbm9pc2UpID8gKGxldmVsIC0gbm9pc2UpIDogMDsKKwl3c3RhdHMudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKKwkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KKwl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgbWFjLCAmd3N0YXRzKTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zdGF0X2dhdGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogVXNpbmcgc3B5IHN1cHBvcnQgd2l0aCBsb3RzIG9mIFJ4IHBhY2tldHMsIGxpa2UgaW4gYW4KKwkgKiBpbmZyYXN0cnVjdHVyZSAoQVApLCB3aWxsIHJlYWxseSBzbG93IGRvd24gZXZlcnl0aGluZywgYmVjYXVzZQorCSAqIHRoZSBNQUMgYWRkcmVzcyBtdXN0IGJlIGNvbXBhcmVkIHRvIGVhY2ggZW50cnkgb2YgdGhlIHNweSBsaXN0LgorCSAqIElmIHRoZSB1c2VyIHJlYWxseSBhc2tzIGZvciBpdCAoc2V0IHNvbWUgYWRkcmVzcyBpbiB0aGUKKwkgKiBzcHkgbGlzdCksIHdlIGRvIGl0LCBidXQgaGUgd2lsbCBwYXkgdGhlIHByaWNlLgorCSAqIE5vdGUgdGhhdCB0byBnZXQgaGVyZSwgeW91IG5lZWQgYm90aCBXSVJFTEVTU19TUFkKKwkgKiBjb21waWxlZCBpbiBBTkQgc29tZSBhZGRyZXNzZXMgaW4gdGhlIGxpc3QgISEhCisJICovCisJLyogTm90ZSA6IGdjYyB3aWxsIG9wdGltaXNlIHRoZSB3aG9sZSBzZWN0aW9uIGF3YXkgaWYKKwkgKiBXSVJFTEVTU19TUFkgaXMgbm90IGRlZmluZWQuLi4gLSBKZWFuIElJICovCisJaWYgKFNQWV9OVU1CRVIocHJpdikpIHsKKwkJb3Jpbm9jb19zcHlfZ2F0aGVyKGRldiwgc2tiX21hY19oZWFkZXIoc2tiKSArIEVUSF9BTEVOLAorCQkJCSAgIGRlc2MtPnNpZ25hbCwgZGVzYy0+c2lsZW5jZSk7CisJfQorfQorCisvKgorICogb3Jpbm9jb19yeF9tb25pdG9yIC0gaGFuZGxlIHJlY2VpdmVkIG1vbml0b3IgZnJhbWVzLgorICoKKyAqIEFyZ3VtZW50czoKKyAqCWRldgkJbmV0d29yayBkZXZpY2UKKyAqCXJ4ZmlkCQlyZWNlaXZlZCBGSUQKKyAqCWRlc2MJCXJ4IGRlc2NyaXB0b3Igb2YgdGhlIGZyYW1lCisgKgorICogQ2FsbCBjb250ZXh0OiBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHZvaWQgb3Jpbm9jb19yeF9tb25pdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByeGZpZCwKKwkJCSAgICAgICBzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJdTMyIGhkcmxlbiA9IDMwOwkvKiByZXR1cm4gZnVsbCBoZWFkZXIgYnkgZGVmYXVsdCAqLworCXUzMiBkYXRhbGVuID0gMDsKKwl1MTYgZmM7CisJaW50IGVycjsKKwlpbnQgbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKworCWxlbiA9IGxlMTZfdG9fY3B1KGRlc2MtPmRhdGFfbGVuKTsKKworCS8qIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGFuZCB0aGUgZGF0YSAqLworCWZjID0gbGUxNl90b19jcHUoZGVzYy0+ZnJhbWVfY3RsKTsKKwlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgorCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykKKwkJICAgICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykpCisJCQloZHJsZW4gPSAzMDsKKwkJZWxzZQorCQkJaGRybGVuID0gMjQ7CisJCWRhdGFsZW4gPSBsZW47CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6CisJCWhkcmxlbiA9IDI0OworCQlkYXRhbGVuID0gbGVuOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6CisJCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QU1BPTEw6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JUUzoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQ6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NGRU5EQUNLOgorCQkJaGRybGVuID0gMTY7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6CisJCQloZHJsZW4gPSAxMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFVua25vd24gZnJhbWUgdHlwZSAqLworCQlicmVhazsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2sgdGhlIGxlbmd0aCAqLworCWlmIChkYXRhbGVuID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTiArIDEyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb3ZlcnNpemVkIG1vbml0b3IgZnJhbWUsICIKKwkJICAgICAgICJkYXRhIGxlbmd0aCA9ICVkXG4iLCBkZXYtPm5hbWUsIGRhdGFsZW4pOworCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGhkcmxlbiArIGRhdGFsZW4pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW5ub3QgYWxsb2NhdGUgc2tiIGZvciBtb25pdG9yIGZyYW1lXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiICovCisJbWVtY3B5KHNrYl9wdXQoc2tiLCBoZHJsZW4pLCAmKGRlc2MtPmZyYW1lX2N0bCksIGhkcmxlbik7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKworCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KKwlpZiAoZGF0YWxlbiA+IDApIHsKKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgc2tiX3B1dChza2IsIGRhdGFsZW4pLAorCQkJCSAgICAgICBBTElHTihkYXRhbGVuLCAyKSwgcnhmaWQsCisJCQkJICAgICAgIEhFUk1FU184MDJfMl9PRkZTRVQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIG1vbml0b3IgZnJhbWVcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBkcm9wOworCQl9CisJfQorCisJc2tiLT5kZXYgPSBkZXY7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMik7CisKKwlzdGF0cy0+cnhfcGFja2V0cysrOworCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKworCW5ldGlmX3J4KHNrYik7CisJcmV0dXJuOworCisgZHJvcDoKKwlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworIHVwZGF0ZV9zdGF0czoKKwlzdGF0cy0+cnhfZXJyb3JzKys7CisJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJdTE2IHJ4ZmlkLCBzdGF0dXM7CisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YTsKKwlpbnQgZXJyOworCisJZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpkZXNjKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXNjKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICIlczogQ2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIFJYIGRlc2NyaXB0b3JcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwlyeGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFJYRklEKTsKKworCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIGRlc2MsIHNpemVvZigqZGVzYyksCisJCQkgICAgICAgcnhmaWQsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBSeCBkZXNjcmlwdG9yLiAiCisJCSAgICAgICAiRnJhbWUgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJc3RhdHVzID0gbGUxNl90b19jcHUoZGVzYy0+c3RhdHVzKTsKKworCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX0JBRENSQykgeworCQlERUJVRygxLCAiJXM6IEJhZCBDUkMgb24gUnguIEZyYW1lIGRyb3BwZWQuXG4iLAorCQkgICAgICBkZXYtPm5hbWUpOworCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwkvKiBIYW5kbGUgZnJhbWVzIGluIG1vbml0b3IgbW9kZSAqLworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQlvcmlub2NvX3J4X21vbml0b3IoZGV2LCByeGZpZCwgZGVzYyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX1VOREVDUllQVEFCTEUpIHsKKwkJREVCVUcoMSwgIiVzOiBVbmRlY3J5cHRhYmxlIGZyYW1lIG9uIFJ4LiBGcmFtZSBkcm9wcGVkLlxuIiwKKwkJICAgICAgZGV2LT5uYW1lKTsKKwkJd3N0YXRzLT5kaXNjYXJkLmNvZGUrKzsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJbGVuZ3RoID0gbGUxNl90b19jcHUoZGVzYy0+ZGF0YV9sZW4pOworCisJLyogU2FuaXR5IGNoZWNrcyAqLworCWlmIChsZW5ndGggPCAzKSB7IC8qIE5vIGZvciBldmVuIGFuIDgwMi4yIExMQyBoZWFkZXIgKi8KKwkJLyogQXQgbGVhc3Qgb24gU3ltYm9sIGZpcm13YXJlIHdpdGggUENGIHdlIGdldCBxdWl0ZSBhCisJCSAgIGxvdCBvZiB0aGVzZSBsZWdpdGltYXRlbHkgLSBQb2xsIGZyYW1lcyB3aXRoIG5vCisJCSAgIGRhdGEuICovCisJCWdvdG8gb3V0OworCX0KKwlpZiAobGVuZ3RoID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIGZyYW1lIHJlY2VpdmVkICglZCBieXRlcylcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGxlbmd0aCk7CisJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCS8qIFBheWxvYWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIE1pY2hhZWwgTUlDLiBJbmNyZWFzZSBwYXlsb2FkCisJICogc2l6ZSB0byByZWFkIGl0IHRvZ2V0aGVyIHdpdGggdGhlIGRhdGEuICovCisJaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTUlDKQorCQlsZW5ndGggKz0gTUlDSEFFTF9NSUNfTEVOOworCisJLyogV2UgbmVlZCBzcGFjZSBmb3IgdGhlIHBhY2tldCBkYXRhIGl0c2VsZiwgcGx1cyBhbiBldGhlcm5ldAorCSAgIGhlYWRlciwgcGx1cyAyIGJ5dGVzIHNvIHdlIGNhbiBhbGlnbiB0aGUgSVAgaGVhZGVyIG9uIGEKKwkgICAzMmJpdCBib3VuZGFyeSwgcGx1cyAxIGJ5dGUgc28gd2UgY2FuIHJlYWQgaW4gb2RkIGxlbmd0aAorCSAgIHBhY2tldHMgZnJvbSB0aGUgY2FyZCwgd2hpY2ggaGFzIGFuIElPIGdyYW51bGFyaXR5IG9mIDE2CisJICAgYml0cyAqLworCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoK0VUSF9ITEVOKzIrMSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jYXRlIHNrYiBmb3IgUnhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwkvKiBXZSdsbCBwcmVwZW5kIHRoZSBoZWFkZXIsIHNvIHJlc2VydmUgc3BhY2UgZm9yIGl0LiAgVGhlIHdvcnN0CisJICAgY2FzZSBpcyBubyBkZWNhcHN1bGF0aW9uLCB3aGVuIDgwMi4zIGhlYWRlciBpcyBwcmVwZW5kZWQgYW5kCisJICAgbm90aGluZyBpcyByZW1vdmVkLiAgMiBpcyBmb3IgYWxpZ25pbmcgdGhlIElQIGhlYWRlci4gICovCisJc2tiX3Jlc2VydmUoc2tiLCBFVEhfSExFTiArIDIpOworCisJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgc2tiX3B1dChza2IsIGxlbmd0aCksCisJCQkgICAgICAgQUxJR04obGVuZ3RoLCAyKSwgcnhmaWQsCisJCQkgICAgICAgSEVSTUVTXzgwMl8yX09GRlNFVCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIGZyYW1lLiAiCisJCSAgICAgICAiRnJhbWUgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBkcm9wOworCX0KKworCS8qIEFkZCBkZXNjIGFuZCBza2IgdG8gcnggcXVldWUgKi8KKwlyeF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnJ4X2RhdGEpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXJ4X2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jYXRlIFJYIHBhY2tldFxuIiwKKwkJCWRldi0+bmFtZSk7CisJCWdvdG8gZHJvcDsKKwl9CisJcnhfZGF0YS0+ZGVzYyA9IGRlc2M7CisJcnhfZGF0YS0+c2tiID0gc2tiOworCWxpc3RfYWRkX3RhaWwoJnJ4X2RhdGEtPmxpc3QsICZwcml2LT5yeF9saXN0KTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5yeF90YXNrbGV0KTsKKworCXJldHVybjsKKworZHJvcDoKKwlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwordXBkYXRlX3N0YXRzOgorCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwlzdGF0cy0+cnhfZHJvcHBlZCsrOworb3V0OgorCWtmcmVlKGRlc2MpOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwl1MTYgc3RhdHVzLCBmYzsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBldGhoZHIgKmhkcjsKKworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGRlc2MtPnN0YXR1cyk7CisJbGVuZ3RoID0gbGUxNl90b19jcHUoZGVzYy0+ZGF0YV9sZW4pOworCWZjID0gbGUxNl90b19jcHUoZGVzYy0+ZnJhbWVfY3RsKTsKKworCS8qIENhbGN1bGF0ZSBhbmQgY2hlY2sgTUlDICovCisJaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTUlDKSB7CisJCWludCBrZXlfaWQgPSAoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTUlDX0tFWV9JRCkgPj4KKwkJCSAgICAgIEhFUk1FU19NSUNfS0VZX0lEX1NISUZUKTsKKwkJdTggbWljW01JQ0hBRUxfTUlDX0xFTl07CisJCXU4ICpyeG1pYzsKKwkJdTggKnNyYyA9IChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgPworCQkJZGVzYy0+YWRkcjMgOiBkZXNjLT5hZGRyMjsKKworCQkvKiBFeHRyYWN0IE1pY2hhZWwgTUlDIGZyb20gcGF5bG9hZCAqLworCQlyeG1pYyA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gTUlDSEFFTF9NSUNfTEVOOworCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU4pOworCQlsZW5ndGggLT0gTUlDSEFFTF9NSUNfTEVOOworCisJCW9yaW5vY29fbWljKHByaXYtPnJ4X3RmbV9taWMsCisJCQkgICAgcHJpdi0+dGtpcF9rZXlba2V5X2lkXS5yeF9taWMsCisJCQkgICAgZGVzYy0+YWRkcjEsCisJCQkgICAgc3JjLAorCQkJICAgIDAsIC8qIHByaW9yaXR5IG9yIFFvUz8gKi8KKwkJCSAgICBza2ItPmRhdGEsCisJCQkgICAgc2tiLT5sZW4sCisJCQkgICAgJm1pY1swXSk7CisKKwkJaWYgKG1lbWNtcChtaWMsIHJ4bWljLAorCQkJICAgTUlDSEFFTF9NSUNfTEVOKSkgeworCQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCQkJc3RydWN0IGl3X21pY2hhZWxtaWNmYWlsdXJlIHd4bWljOworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIgorCQkJICAgICAgICJJbnZhbGlkIE1pY2hhZWwgTUlDIGluIGRhdGEgZnJhbWUgZnJvbSAlcE0sICIKKwkJCSAgICAgICAidXNpbmcga2V5ICVpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgc3JjLCBrZXlfaWQpOworCisJCQkvKiBUT0RPOiB1cGRhdGUgc3RhdHMgKi8KKworCQkJLyogTm90aWZ5IHVzZXJzcGFjZSAqLworCQkJbWVtc2V0KCZ3eG1pYywgMCwgc2l6ZW9mKHd4bWljKSk7CisJCQl3eG1pYy5mbGFncyA9IGtleV9pZCAmIElXX01JQ0ZBSUxVUkVfS0VZX0lEOworCQkJd3htaWMuZmxhZ3MgfD0gKGRlc2MtPmFkZHIxWzBdICYgMSkgPworCQkJCUlXX01JQ0ZBSUxVUkVfR1JPVVAgOiBJV19NSUNGQUlMVVJFX1BBSVJXSVNFOworCQkJd3htaWMuc3JjX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJbWVtY3B5KHd4bWljLnNyY19hZGRyLnNhX2RhdGEsIHNyYywgRVRIX0FMRU4pOworCisJCQkodm9pZCkgb3Jpbm9jb19od19nZXRfdGtpcF9pdihwcml2LCBrZXlfaWQsCisJCQkJCQkgICAgICAmd3htaWMudHNjWzBdKTsKKworCQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHNpemVvZih3eG1pYyk7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVk1JQ0hBRUxNSUNGQUlMVVJFLCAmd3JxdSwKKwkJCQkJICAgIChjaGFyICopICZ3eG1pYyk7CisKKwkJCWdvdG8gZHJvcDsKKwkJfQorCX0KKworCS8qIEhhbmRsZSBkZWNhcHN1bGF0aW9uCisJICogSW4gbW9zdCBjYXNlcywgdGhlIGZpcm13YXJlIHRlbGwgdXMgYWJvdXQgU05BUCBmcmFtZXMuCisJICogRm9yIHNvbWUgcmVhc29uLCB0aGUgU05BUCBmcmFtZXMgc2VudCBieSBMaW5rU3lzIEFQcworCSAqIGFyZSBub3QgcHJvcGVybHkgcmVjb2duaXNlZCBieSBtb3N0IGZpcm13YXJlcy4KKwkgKiBTbywgY2hlY2sgb3Vyc2VsdmVzICovCisJaWYgKGxlbmd0aCA+PSBFTkNBUFNfT1ZFUkhFQUQgJiYKKwkgICAgKCgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NU0dUWVBFKSA9PSBIRVJNRVNfUlhTVEFUXzEwNDIpIHx8CisJICAgICAoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTVNHVFlQRSkgPT0gSEVSTUVTX1JYU1RBVF9UVU5ORUwpIHx8CisJICAgICBpc19ldGhlcnNuYXAoc2tiLT5kYXRhKSkpIHsKKwkJLyogVGhlc2UgaW5kaWNhdGUgYSBTTkFQIHdpdGhpbiA4MDIuMiBMTEMgd2l0aGluCisJCSAgIDgwMi4xMSBmcmFtZSB3aGljaCB3ZSdsbCBuZWVkIHRvIGRlLWVuY2Fwc3VsYXRlIHRvCisJCSAgIHRoZSBvcmlnaW5hbCBFdGhlcm5ldElJIGZyYW1lLiAqLworCQloZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwKKwkJCQkJCUVUSF9ITEVOIC0gRU5DQVBTX09WRVJIRUFEKTsKKwl9IGVsc2UgeworCQkvKiA4MDIuMyBmcmFtZSAtIHByZXBlbmQgODAyLjMgaGVhZGVyIGFzIGlzICovCisJCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CisJCWhkci0+aF9wcm90byA9IGh0b25zKGxlbmd0aCk7CisJfQorCW1lbWNweShoZHItPmhfZGVzdCwgZGVzYy0+YWRkcjEsIEVUSF9BTEVOKTsKKwlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpCisJCW1lbWNweShoZHItPmhfc291cmNlLCBkZXNjLT5hZGRyMywgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtY3B5KGhkci0+aF9zb3VyY2UsIGRlc2MtPmFkZHIyLCBFVEhfQUxFTik7CisKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKQorCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKworCS8qIFByb2Nlc3MgdGhlIHdpcmVsZXNzIHN0YXRzIGlmIG5lZWRlZCAqLworCW9yaW5vY29fc3RhdF9nYXRoZXIoZGV2LCBza2IsIGRlc2MpOworCisJLyogUGFzcyB0aGUgcGFja2V0IHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrICovCisJbmV0aWZfcngoc2tiKTsKKwlzdGF0cy0+cnhfcGFja2V0cysrOworCXN0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7CisKKwlyZXR1cm47CisKKyBkcm9wOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlzdGF0cy0+cnhfZXJyb3JzKys7CisJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19yeF9pc3JfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGEsICp0ZW1wOworCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBvcmlub2NvX3J4IHJlcXVpcmVzIHRoZSBkcml2ZXIgbG9jaywgYW5kIHdlIGFsc28gbmVlZCB0bworCSAqIHByb3RlY3QgcHJpdi0+cnhfbGlzdCwgc28ganVzdCBob2xkIHRoZSBsb2NrIG92ZXIgdGhlCisJICogbG90LgorCSAqCisJICogSWYgb3Jpbm9jb19sb2NrIGZhaWxzLCB3ZSd2ZSB1bnBsdWdnZWQgdGhlIGNhcmQuIEluIHRoaXMKKwkgKiBjYXNlIGp1c3QgYWJvcnQuICovCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybjsKKworCS8qIGV4dHJhY3QgZGVzYyBhbmQgc2tiIGZyb20gcXVldWUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfZGF0YSwgdGVtcCwgJnByaXYtPnJ4X2xpc3QsIGxpc3QpIHsKKwkJZGVzYyA9IHJ4X2RhdGEtPmRlc2M7CisJCXNrYiA9IHJ4X2RhdGEtPnNrYjsKKwkJbGlzdF9kZWwoJnJ4X2RhdGEtPmxpc3QpOworCQlrZnJlZShyeF9kYXRhKTsKKworCQlvcmlub2NvX3J4KGRldiwgZGVzYywgc2tiKTsKKworCQlrZnJlZShkZXNjKTsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSeCBwYXRoIChpbmZvIGZyYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmtzdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHN0YXR1cykKK3sKKwljaGFyICpzOworCisJaWYgKHN1cHByZXNzX2xpbmtzdGF0dXMpCisJCXJldHVybjsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEOgorCQlzID0gIk5vdCBDb25uZWN0ZWQiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRDoKKwkJcyA9ICJDb25uZWN0ZWQiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0RJU0NPTk5FQ1RFRDoKKwkJcyA9ICJEaXNjb25uZWN0ZWQiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX0NIQU5HRToKKwkJcyA9ICJBUCBDaGFuZ2VkIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9PVVRfT0ZfUkFOR0U6CisJCXMgPSAiQVAgT3V0IG9mIFJhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRToKKwkJcyA9ICJBUCBJbiBSYW5nZSI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVNTT0NfRkFJTEVEOgorCQlzID0gIkFzc29jaWF0aW9uIEZhaWxlZCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXMgPSAiVU5LTk9XTiI7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBOZXcgbGluayBzdGF0dXM6ICVzICglMDR4KVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBzLCBzdGF0dXMpOworfQorCisvKiBTZWFyY2ggc2NhbiByZXN1bHRzIGZvciByZXF1ZXN0ZWQgQlNTSUQsIGpvaW4gaXQgaWYgZm91bmQgKi8KK3N0YXRpYyB2b2lkIG9yaW5vY29fam9pbl9hcChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCBqb2luX3dvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgam9pbl9yZXEgeworCQl1OCBic3NpZFtFVEhfQUxFTl07CisJCV9fbGUxNiBjaGFubmVsOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJlcTsKKwljb25zdCBpbnQgYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKKwlzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvICphdG9tID0gTlVMTDsKKwlpbnQgb2Zmc2V0ID0gNDsKKwlpbnQgZm91bmQgPSAwOworCXU4ICpidWY7CisJdTE2IGxlbjsKKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3Igc2NhbiByZXN1bHRzICovCisJYnVmID0ga21hbGxvYyhNQVhfU0NBTl9MRU4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm47CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJZ290byBmYWlsX2xvY2s7CisKKwkvKiBTYW5pdHkgY2hlY2tzIGluIGNhc2UgdXNlciBjaGFuZ2VkIHNvbWV0aGluZyBpbiB0aGUgbWVhbnRpbWUgKi8KKwlpZiAoIXByaXYtPmJzc2lkX2ZpeGVkKQorCQlnb3RvIG91dDsKKworCWlmIChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBSZWFkIHNjYW4gcmVzdWx0cyBmcm9tIHRoZSBmaXJtd2FyZSAqLworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCisJCQkgICAgICBIRVJNRVNfUklEX1NDQU5SRVNVTFRTVEFCTEUsCisJCQkgICAgICBNQVhfU0NBTl9MRU4sICZsZW4sIGJ1Zik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzY2FuIHJlc3VsdHNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlsZW4gPSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKGxlbik7CisKKwkvKiBHbyB0aHJvdWdoIHRoZSBzY2FuIHJlc3VsdHMgbG9va2luZyBmb3IgdGhlIGNoYW5uZWwgb2YgdGhlIEFQCisJICogd2Ugd2VyZSByZXF1ZXN0ZWQgdG8gam9pbiAqLworCWZvciAoOyBvZmZzZXQgKyBhdG9tX2xlbiA8PSBsZW47IG9mZnNldCArPSBhdG9tX2xlbikgeworCQlhdG9tID0gKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8gKikgKGJ1ZiArIG9mZnNldCk7CisJCWlmIChtZW1jbXAoJmF0b20tPmJzc2lkLCBwcml2LT5kZXNpcmVkX2Jzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCURFQlVHKDEsICIlczogUmVxdWVzdGVkIEFQIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcbiIsCisJCSAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweShyZXEuYnNzaWQsIHByaXYtPmRlc2lyZWRfYnNzaWQsIEVUSF9BTEVOKTsKKwlyZXEuY2hhbm5lbCA9IGF0b20tPmNoYW5uZWw7CS8qIGJvdGggYXJlIGxpdHRsZS1lbmRpYW4gKi8KKwllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZKT0lOUkVRVUVTVCwKKwkJCQkgICZyZXEpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGlzc3Vpbmcgam9pbiByZXF1ZXN0XG4iLCBkZXYtPm5hbWUpOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKyBmYWlsX2xvY2s6CisJa2ZyZWUoYnVmKTsKK30KKworLyogU2VuZCBuZXcgQlNTSUQgdG8gdXNlcnNwYWNlICovCitzdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYnNzaWRfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRCU1NJRCwKKwkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCB3cnF1LmFwX2FkZHIuc2FfZGF0YSk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm47CisKKwl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCisJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYXNzb2NyZXFpZV93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IGVycjsKKwl1OCBidWZbODhdOworCXU4ICppZTsKKworCWlmICghcHJpdi0+aGFzX3dwYSkKKwkJcmV0dXJuOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX0FTU09DX1JFUV9JTkZPLAorCQkJICAgICAgc2l6ZW9mKGJ1ZiksIE5VTEwsICZidWYpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuOworCisJaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKGllKSB7CisJCWludCByZW0gPSBzaXplb2YoYnVmKSAtIChpZSAtICZidWZbMF0pOworCQl3cnF1LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOworCQlpZiAod3JxdS5kYXRhLmxlbmd0aCA+IHJlbSkKKwkJCXdycXUuZGF0YS5sZW5ndGggPSByZW07CisKKwkJaWYgKHdycXUuZGF0YS5sZW5ndGgpCisJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVFJRSwgJndycXUsIGllKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9hc3NvY3Jlc3BpZV93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IGVycjsKKwl1OCBidWZbODhdOyAvKiBUT0RPOiB2ZXJpZnkgbWF4IHNpemUgb3IgSVdfR0VORVJJQ19JRV9NQVggKi8KKwl1OCAqaWU7CisKKwlpZiAoIXByaXYtPmhhc193cGEpCisJCXJldHVybjsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9BU1NPQ19SRVNQX0lORk8sCisJCQkgICAgICBzaXplb2YoYnVmKSwgTlVMTCwgJmJ1Zik7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm47CisKKwlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShidWYsIHNpemVvZihidWYpKTsKKwlpZiAoaWUpIHsKKwkJaW50IHJlbSA9IHNpemVvZihidWYpIC0gKGllIC0gJmJ1ZlswXSk7CisJCXdycXUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7CisJCWlmICh3cnF1LmRhdGEubGVuZ3RoID4gcmVtKQorCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlbTsKKworCQlpZiAod3JxdS5kYXRhLmxlbmd0aCkKKwkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZBU1NPQ1JFU1BJRSwgJndycXUsIGllKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF93ZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIHdldmVudF93b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybjsKKworCW9yaW5vY29fc2VuZF9hc3NvY3JlcWllX3dldmVudChwcml2KTsKKwlvcmlub2NvX3NlbmRfYXNzb2NyZXNwaWVfd2V2ZW50KHByaXYpOworCW9yaW5vY29fc2VuZF9ic3NpZF93ZXZlbnQocHJpdik7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTE2IGluZm9maWQ7CisJc3RydWN0IHsKKwkJX19sZTE2IGxlbjsKKwkJX19sZTE2IHR5cGU7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaW5mbzsKKwlpbnQgbGVuLCB0eXBlOworCWludCBlcnI7CisKKwkvKiBUaGlzIGlzIGFuIGFuc3dlciB0byBhbiBJTlFVSVJFIGNvbW1hbmQgdGhhdCB3ZSBkaWQgZWFybGllciwKKwkgKiBvciBhbiBpbmZvcm1hdGlvbiAiZXZlbnQiIGdlbmVyYXRlZCBieSB0aGUgY2FyZAorCSAqIFRoZSBjb250cm9sbGVyIHJldHVybiB0byB1cyBhIHBzZXVkbyBmcmFtZSBjb250YWluaW5nCisJICogdGhlIGluZm9ybWF0aW9uIGluIHF1ZXN0aW9uIC0gSmVhbiBJSSAqLworCWluZm9maWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBJTkZPRklEKTsKKworCS8qIFJlYWQgdGhlIGluZm8gZnJhbWUgaGVhZGVyIC0gZG9uJ3QgdHJ5IHRvbyBoYXJkICovCisJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmluZm8sIHNpemVvZihpbmZvKSwKKwkJCSAgICAgICBpbmZvZmlkLCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgaW5mbyBmcmFtZS4gIgorCQkgICAgICAgIkZyYW1lIGRyb3BwZWQuXG4iLCBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybjsKKwl9CisKKwlsZW4gPSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKGxlMTZfdG9fY3B1KGluZm8ubGVuKSk7CisJdHlwZSA9IGxlMTZfdG9fY3B1KGluZm8udHlwZSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEhFUk1FU19JTlFfVEFMTElFUzogeworCQlzdHJ1Y3QgaGVybWVzX3RhbGxpZXNfZnJhbWUgdGFsbGllczsKKwkJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7CisKKwkJaWYgKGxlbiA+IHNpemVvZih0YWxsaWVzKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRhbGxpZXMgZnJhbWUgdG9vIGxvbmcgKCVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7CisJCQlsZW4gPSBzaXplb2YodGFsbGllcyk7CisJCX0KKworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmdGFsbGllcywgbGVuLAorCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJLyogSW5jcmVtZW50IG91ciB2YXJpb3VzIGNvdW50ZXJzICovCisJCS8qIHdzdGF0cy0+ZGlzY2FyZC5ud2lkIC0gbm8gd3JvbmcgQlNTSUQgc3R1ZmYgKi8KKwkJd3N0YXRzLT5kaXNjYXJkLmNvZGUgKz0KKwkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhXRVBVbmRlY3J5cHRhYmxlKTsKKwkJaWYgKGxlbiA9PSBzaXplb2YodGFsbGllcykpCisJCQl3c3RhdHMtPmRpc2NhcmQuY29kZSArPQorCQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhEaXNjYXJkc19XRVBJQ1ZFcnJvcikgKworCQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhEaXNjYXJkc19XRVBFeGNsdWRlZCk7CisJCXdzdGF0cy0+ZGlzY2FyZC5taXNjICs9CisJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlR4RGlzY2FyZHNXcm9uZ1NBKTsKKwkJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ICs9CisJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4TXNnSW5CYWRNc2dGcmFnbWVudHMpOworCQl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyArPQorCQkJbGUxNl90b19jcHUodGFsbGllcy5UeFJldHJ5TGltaXRFeGNlZWRlZCk7CisJCS8qIHdzdGF0cy0+bWlzcy5iZWFjb24gLSBubyBtYXRjaCAqLworCX0KKwlicmVhazsKKwljYXNlIEhFUk1FU19JTlFfTElOS1NUQVRVUzogeworCQlzdHJ1Y3QgaGVybWVzX2xpbmtzdGF0dXMgbGlua3N0YXR1czsKKwkJdTE2IG5ld3N0YXR1czsKKwkJaW50IGNvbm5lY3RlZDsKKworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCisJCQlicmVhazsKKworCQlpZiAobGVuICE9IHNpemVvZihsaW5rc3RhdHVzKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuZXhwZWN0ZWQgc2l6ZSBmb3IgbGlua3N0YXR1cyBmcmFtZSAoJWQgYnl0ZXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmxpbmtzdGF0dXMsIGxlbiwKKwkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQluZXdzdGF0dXMgPSBsZTE2X3RvX2NwdShsaW5rc3RhdHVzLmxpbmtzdGF0dXMpOworCisJCS8qIFN5bWJvbCBmaXJtd2FyZSB1c2VzICJvdXQgb2YgcmFuZ2UiIHRvIHNpZ25hbCB0aGF0CisJCSAqIHRoZSBob3N0c2NhbiBmcmFtZSBjYW4gYmUgcmVxdWVzdGVkLiAgKi8KKwkJaWYgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9PVVRfT0ZfUkFOR0UgJiYKKwkJICAgIHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wgJiYKKwkJICAgIHByaXYtPmhhc19ob3N0c2NhbiAmJiBwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKKwkJCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX0hPU1RTQ0FOX1NZTUJPTCk7CisJCQlicmVhazsKKwkJfQorCisJCWNvbm5lY3RlZCA9IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEKQorCQkJfHwgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0UpCisJCQl8fCAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFKTsKKworCQlpZiAoY29ubmVjdGVkKQorCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCQllbHNlIGlmICghaWdub3JlX2Rpc2Nvbm5lY3QpCisJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJCWlmIChuZXdzdGF0dXMgIT0gcHJpdi0+bGFzdF9saW5rc3RhdHVzKSB7CisJCQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSBuZXdzdGF0dXM7CisJCQlwcmludF9saW5rc3RhdHVzKGRldiwgbmV3c3RhdHVzKTsKKwkJCS8qIFRoZSBpbmZvIGZyYW1lIGNvbnRhaW5zIG9ubHkgb25lIHdvcmQgd2hpY2ggaXMgdGhlCisJCQkgKiBzdGF0dXMgKHNlZSBoZXJtZXMuaCkuIFRoZSBzdGF0dXMgaXMgcHJldHR5IGJvcmluZworCQkJICogaW4gaXRzZWxmLCB0aGF0J3Mgd2h5IHdlIGV4cG9ydCB0aGUgbmV3IEJTU0lELi4uCisJCQkgKiBKZWFuIElJICovCisJCQlzY2hlZHVsZV93b3JrKCZwcml2LT53ZXZlbnRfd29yayk7CisJCX0KKwl9CisJYnJlYWs7CisJY2FzZSBIRVJNRVNfSU5RX1NDQU46CisJCWlmICghcHJpdi0+c2Nhbl9pbnByb2dyZXNzICYmIHByaXYtPmJzc2lkX2ZpeGVkICYmCisJCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfSU5URVJTSUwpIHsKKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPmpvaW5fd29yayk7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEhFUk1FU19JTlFfSE9TVFNDQU46CisJY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOX1NZTUJPTDogeworCQkvKiBSZXN1bHQgb2YgYSBzY2FubmluZy4gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKKwkJICogY2VsbHMgaW4gdGhlIHZpY2luaXR5IC0gSmVhbiBJSSAqLworCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CisJCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCQkvKiBTY2FuIGlzIG5vIGxvbmdlciBpbiBwcm9ncmVzcyAqLworCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOworCisJCS8qIFNhbml0eSBjaGVjayAqLworCQlpZiAobGVuID4gNDA5NikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgcmVzdWx0cyAqLworCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmIChidWYgPT0gTlVMTCkKKwkJCS8qIE5vIG1lbW9yeSwgc28gY2FuJ3QgcHJpbnRrKCkuLi4gKi8KKwkJCWJyZWFrOworCisJCS8qIFJlYWQgc2NhbiBkYXRhICovCisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJ1ZiwgbGVuLAorCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOworCQlpZiAoZXJyKSB7CisJCQlrZnJlZShidWYpOworCQkJYnJlYWs7CisJCX0KKworI2lmZGVmIE9SSU5PQ09fREVCVUcKKwkJeworCQkJaW50CWk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiU2NhbiByZXN1bHQgWyUwMlgiLCBidWZbMF0pOworCQkJZm9yIChpID0gMTsgaSA8IChsZW4gKiAyKTsgaSsrKQorCQkJCXByaW50aygiOiUwMlgiLCBidWZbaV0pOworCQkJcHJpbnRrKCJdXG4iKTsKKwkJfQorI2VuZGlmCS8qIE9SSU5PQ09fREVCVUcgKi8KKworCQlpZiAob3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhwcml2LCBidWYsIGxlbikgPT0gMCkgeworCQkJLyogU2VuZCBhbiBlbXB0eSBldmVudCB0byB1c2VyIHNwYWNlLgorCQkJICogV2UgZG9uJ3Qgc2VuZCB0aGUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgZXZlbnQgYmVjYXVzZQorCQkJICogaXQgd291bGQgcmVxdWlyZSB1cyB0byBkbyBjb21wbGV4IHRyYW5zY29kaW5nLCBhbmQKKwkJCSAqIHdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIHdvcmsgZG9uZSBpbiB0aGUgaXJxIGhhbmRsZXIKKwkJCSAqIFVzZSBhIHJlcXVlc3QgdG8gZXh0cmFjdCB0aGUgZGF0YSAtIEplYW4gSUkgKi8KKwkJCXdycXUuZGF0YS5sZW5ndGggPSAwOworCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCQl9CisJCWtmcmVlKGJ1Zik7CisJfQorCWJyZWFrOworCWNhc2UgSEVSTUVTX0lOUV9DSEFOTkVMSU5GTzoKKwl7CisJCXN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICpic3M7CisKKwkJaWYgKCFwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogR290IGNoYW5pbmZvIHdpdGhvdXQgc2NhbiwgIgorCQkJICAgICAgICJsZW49JWRcbiIsIGRldi0+bmFtZSwgbGVuKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQW4gZW1wdHkgcmVzdWx0IGluZGljYXRlcyB0aGF0IHRoZSBzY2FuIGlzIGNvbXBsZXRlICovCisJCWlmIChsZW4gPT0gMCkgeworCQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OworCisJCQkvKiBTY2FuIGlzIG5vIGxvbmdlciBpbiBwcm9ncmVzcyAqLworCQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKKworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFNhbml0eSBjaGVjayAqLworCQllbHNlIGlmIChsZW4gPiBzaXplb2YoKmJzcykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IEV4dCBzY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcykuICIKKwkJCSAgICAgICAiVHJ1bmNhdGluZyByZXN1bHRzIHRvICV6ZCBieXRlcy5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4sIHNpemVvZigqYnNzKSk7CisJCQlsZW4gPSBzaXplb2YoKmJzcyk7CisJCX0gZWxzZSBpZiAobGVuIDwgKG9mZnNldG9mKHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvLAorCQkJCQkgICBkYXRhKSArIDIpKSB7CisJCQkvKiBEcm9wIHRoaXMgcmVzdWx0IG5vdyBzbyB3ZSBkb24ndCBoYXZlIHRvCisJCQkgKiBrZWVwIGNoZWNraW5nIGxhdGVyICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBFeHQgc2NhbiByZXN1bHRzIHRvbyBzaG9ydCAoJWQgYnl0ZXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnNzID0ga21hbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOworCQlpZiAoYnNzID09IE5VTEwpCisJCQlicmVhazsKKworCQkvKiBSZWFkIHNjYW4gZGF0YSAqLworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAodm9pZCAqKSBic3MsIGxlbiwKKwkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUoYnNzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHByaXYsIGJzcyk7CisKKwkJa2ZyZWUoYnNzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgSEVSTUVTX0lOUV9TRUNfU1RBVF9BR0VSRToKKwkJLyogU2VjdXJpdHkgc3RhdHVzIChBZ2VyZSBzcGVjaWZpYykgKi8KKwkJLyogSWdub3JlIHRoaXMgZnJhbWUgZm9yIG5vdyAqLworCQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogVW5rbm93biBpbmZvcm1hdGlvbiBmcmFtZSByZWNlaXZlZDogIgorCQkgICAgICAgInR5cGUgMHglMDR4LCBsZW5ndGggJWRcbiIsIGRldi0+bmFtZSwgdHlwZSwgbGVuKTsKKwkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgYWJvdXQgaXQgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfaW5mZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbmZvcm1hdGlvbiBmcmFtZSBsb3N0LlxuIiwgZGV2LT5uYW1lKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJuYWwgaGFyZHdhcmUgY29udHJvbCByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgX19vcmlub2NvX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7IC8qIGp1c3QgdG8gbWFrZSBzdXJlICovCisKKwllcnIgPSBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBjb25maWd1cmluZyBjYXJkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEZpcmUgdGhpbmdzIHVwIGFnYWluICovCisJaGVybWVzX3NldF9pcnFtYXNrKGh3LCBPUklOT0NPX0lOVEVOKTsKKwllcnIgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgZW5hYmxpbmcgTUFDIHBvcnRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfX29yaW5vY29fdXApOworCitpbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJaWYgKCFwcml2LT5od191bmF2YWlsYWJsZSkgeworCQlpZiAoIXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgeworCQkJZXJyID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7CisJCQlpZiAoZXJyKSB7CisJCQkJLyogU29tZSBmaXJtd2FyZXMgKGUuZy4gSW50ZXJzaWwgMS4zLngpIHNlZW0KKwkJCQkgKiB0byBoYXZlIHByb2JsZW1zIGRpc2FibGluZyB0aGUgcG9ydCwgb2gKKwkJCQkgKiB3ZWxsLCB0b28gYmFkLiAqLworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBkaXNhYmxpbmcgTUFDIHBvcnRcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAxOworCQkJfQorCQl9CisJCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7CisJCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgMHhmZmZmKTsKKwl9CisKKwkvKiBmaXJtd2FyZSB3aWxsIGhhdmUgdG8gcmVhc3NvY2lhdGUgKi8KKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfX29yaW5vY29fZG93bik7CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19hbGxvY2F0ZV9maWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKKwlpZiAoZXJyID09IC1FSU8gJiYgcHJpdi0+bmljYnVmX3NpemUgPiBUWF9OSUNCVUZfU0laRV9CVUcpIHsKKwkJLyogVHJ5IHdvcmthcm91bmQgZm9yIG9sZCBTeW1ib2wgZmlybXdhcmUgYnVnICovCisJCXByaXYtPm5pY2J1Zl9zaXplID0gVFhfTklDQlVGX1NJWkVfQlVHOworCQllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmaXJtd2FyZSBBTExPQyBidWcgZGV0ZWN0ZWQgIgorCQkgICAgICAgIihvbGQgU3ltYm9sIGZpcm13YXJlPykuIFdvcmsgYXJvdW5kICVzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIgPyAiZmFpbGVkISIgOiAib2suIik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCWVyciA9IGhlcm1lc19pbml0KGh3KTsKKwlpZiAocHJpdi0+ZG9fZndfZG93bmxvYWQgJiYgIWVycikgeworCQllcnIgPSBvcmlub2NvX2Rvd25sb2FkKHByaXYpOworCQlpZiAoZXJyKQorCQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOworCX0KKwlpZiAoIWVycikKKwkJZXJyID0gb3Jpbm9jb19hbGxvY2F0ZV9maWQoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKTsKKworaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOworCisJLyogU2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCisJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihFVEhfQUxFTiksIGRldi0+ZGV2X2FkZHIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBNQUMgYWRkcmVzc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGxpbmsgbW9kZSAqLworCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQT1JUVFlQRSwKKwkJCQkgICBwcml2LT5wb3J0X3R5cGUpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwb3J0IHR5cGVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCS8qIFNldCB0aGUgY2hhbm5lbC9mcmVxdWVuY3kgKi8KKwlpZiAocHJpdi0+Y2hhbm5lbCAhPSAwICYmIHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GT1dOQ0hBTk5FTCwKKwkJCQkJICAgcHJpdi0+Y2hhbm5lbCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgY2hhbm5lbCAlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgcHJpdi0+Y2hhbm5lbCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKHByaXYtPmhhc19pYnNzKSB7CisJCXUxNiBjcmVhdGVpYnNzOworCisJCWlmICgoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApICYmIChwcml2LT5jcmVhdGVpYnNzKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRoaXMgZmlybXdhcmUgcmVxdWlyZXMgYW4gIgorCQkJICAgICAgICJFU1NJRCBpbiBJQlNTLUFkLUhvYyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKKwkJCS8qIFdpdGggd3ZsYW5fY3MsIGluIHRoaXMgY2FzZSwgd2Ugd291bGQgY3Jhc2guCisJCQkgKiBob3BlZnVsbHksIHRoaXMgZHJpdmVyIHdpbGwgYmVoYXZlIGJldHRlci4uLgorCQkJICogSmVhbiBJSSAqLworCQkJY3JlYXRlaWJzcyA9IDA7CisJCX0gZWxzZSB7CisJCQljcmVhdGVpYnNzID0gcHJpdi0+Y3JlYXRlaWJzczsKKwkJfQorCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZDUkVBVEVJQlNTLAorCQkJCQkgICBjcmVhdGVpYnNzKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBDUkVBVEVJQlNTXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiBTZXQgdGhlIGRlc2lyZWQgQlNTSUQgKi8KKwllcnIgPSBfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQVAgYWRkcmVzc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogU2V0IHRoZSBkZXNpcmVkIEVTU0lEICovCisJaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKKwltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+ZGVzaXJlZF9lc3NpZCwgc2l6ZW9mKGlkYnVmLnZhbCkpOworCS8qIFdpblhQIHdhbnRzIHBhcnRuZXIgdG8gY29uZmlndXJlIE9XTlNTSUQgZXZlbiBpbiBJQlNTIG1vZGUuIChqaW1jKSAqLworCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTlNTSUQsCisJCQlIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKKwkJCSZpZGJ1Zik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE9XTlNTSURcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkRFU0lSRURTU0lELAorCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCisJCQkmaWRidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBERVNJUkVEU1NJRFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgdGhlIHN0YXRpb24gbmFtZSAqLworCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5uaWNrKSk7CisJbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPm5pY2ssIHNpemVvZihpZGJ1Zi52YWwpKTsKKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05OQU1FLAorCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPm5pY2spKzIpLAorCQkJICAgICAgICZpZGJ1Zik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG5pY2tuYW1lXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBBUCBkZW5zaXR5ICovCisJaWYgKHByaXYtPmhhc19zZW5zaXRpdml0eSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCisJCQkJCSAgIHByaXYtPmFwX2RlbnNpdHkpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgc2V0dGluZyBTWVNURU1TQ0FMRS4gIgorCQkJICAgICAgICJEaXNhYmxpbmcgc2Vuc2l0aXZpdHkgY29udHJvbFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisKKwkJCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDA7CisJCX0KKwl9CisKKwkvKiBTZXQgUlRTIHRocmVzaG9sZCAqLworCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZSVFNUSFJFU0hPTEQsCisJCQkJICAgcHJpdi0+cnRzX3RocmVzaCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFJUUyB0aHJlc2hvbGRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IGZyYWdtZW50YXRpb24gdGhyZXNob2xkIG9yIE1XTyByb2J1c3RuZXNzICovCisJaWYgKHByaXYtPmhhc19td28pCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCisJCQkJCSAgIHByaXYtPm13b19yb2J1c3QpOworCWVsc2UKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCisJCQkJCSAgIHByaXYtPmZyYWdfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgZnJhZ21lbnRhdGlvblxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgYml0cmF0ZSAqLworCWVyciA9IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShwcml2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgYml0cmF0ZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgcG93ZXIgbWFuYWdlbWVudCAqLworCWlmIChwcml2LT5oYXNfcG0pIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlBNRU5BQkxFRCwKKwkJCQkJICAgcHJpdi0+cG1fb24pOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GTVVMVElDQVNUUkVDRUlWRSwKKwkJCQkJICAgcHJpdi0+cG1fbWNhc3QpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sCisJCQkJCSAgIHByaXYtPnBtX3BlcmlvZCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAorCQkJCQkgICBwcml2LT5wbV90aW1lb3V0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJLyogU2V0IHByZWFtYmxlIC0gb25seSBmb3IgU3ltYm9sIHNvIGZhci4uLiAqLworCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlBSRUFNQkxFX1NZTUJPTCwKKwkJCQkJICAgcHJpdi0+cHJlYW1ibGUpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHByZWFtYmxlXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiBTZXQgdXAgZW5jcnlwdGlvbiAqLworCWlmIChwcml2LT5oYXNfd2VwIHx8IHByaXYtPmhhc193cGEpIHsKKwkJZXJyID0gX19vcmlub2NvX2h3X3NldHVwX2VuYyhwcml2KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgYWN0aXZhdGluZyBlbmNyeXB0aW9uXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLworCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOworCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKKwkJCQkJICAgIEhFUk1FU19URVNUX01PTklUT1IsIDAsIE5VTEwpOworCX0gZWxzZSB7CisJCS8qIERpc2FibGUgbW9uaXRvciBtb2RlICovCisJCWRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKwkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CisJCQkJCSAgICBIRVJNRVNfVEVTVF9TVE9QLCAwLCBOVUxMKTsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFNldCBwcm9taXNjdWl0eSAvIG11bHRpY2FzdCovCisJcHJpdi0+cHJvbWlzY3VvdXMgPSAwOworCXByaXYtPm1jX2NvdW50ID0gMDsKKworCS8qIEZJWE1FOiB3aGF0IGFib3V0IG5ldGlmX3R4X2xvY2sgKi8KKwlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogRklYTUU6IHJldHVybiBpbnQ/ICovCitzdGF0aWMgdm9pZAorX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCWludCBwcm9taXNjLCBtY19jb3VudDsKKworCS8qIFRoZSBIZXJtZXMgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW4gYWxsbXVsdGkgbW9kZSwgc28gd2UgZ28KKwkgKiBpbnRvIHByb21pc2N1b3VzIG1vZGUgYW5kIGxldCB0aGUgdXBwZXIgbGV2ZWxzIGRlYWwuICovCisJaWYgKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCSAgICAoZGV2LT5tY19jb3VudCA+IE1BWF9NVUxUSUNBU1QocHJpdikpKSB7CisJCXByb21pc2MgPSAxOworCQltY19jb3VudCA9IDA7CisJfSBlbHNlIHsKKwkJcHJvbWlzYyA9IDA7CisJCW1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKKwl9CisKKwllcnIgPSBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHByaXYsIGRldi0+bWNfbGlzdCwgbWNfY291bnQsCisJCQkJCSAgICAgIHByb21pc2MpOworfQorCisvKiBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LCB3aXRob3V0IGxvY2tzIGhlbGQgLSB1c2UKKyAqIHNjaGVkdWxlX3dvcmsoKSAqLwordm9pZCBvcmlub2NvX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIHJlc2V0X3dvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQkvKiBXaGVuIHRoZSBoYXJkd2FyZSBiZWNvbWVzIGF2YWlsYWJsZSBhZ2Fpbiwgd2hhdGV2ZXIKKwkJICogZGV0ZWN0cyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciByZS1pbml0aWFsaXppbmcKKwkJICogaXQuIFNvIG5vIG5lZWQgZm9yIGFueXRoaW5nIGZ1cnRoZXIgKi8KKwkJcmV0dXJuOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJLyogU2h1dCBvZmYgaW50ZXJydXB0cy4gIERlcGVuZGluZyBvbiB3aGF0IHN0YXRlIHRoZSBoYXJkd2FyZQorCSAqIGlzIGluLCB0aGlzIG1pZ2h0IG5vdCB3b3JrLCBidXQgd2UnbGwgdHJ5IGFueXdheSAqLworCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7CisJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweGZmZmYpOworCisJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKKwlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7IC8qIGZpcm13YXJlIHdpbGwgaGF2ZSB0byByZWFzc29jaWF0ZSAqLworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJLyogU2Nhbm5pbmcgc3VwcG9ydDogQ2xlYW51cCBvZiBkcml2ZXIgc3RydWN0ICovCisJb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwgMCk7CisJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKKworCWlmIChwcml2LT5oYXJkX3Jlc2V0KSB7CisJCWVyciA9ICgqcHJpdi0+aGFyZF9yZXNldCkocHJpdik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkICIKKwkJCSAgICAgICAicGVyZm9ybWluZyBoYXJkIHJlc2V0XG4iLCBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGRpc2FibGU7CisJCX0KKwl9CisKKwllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGRpc2FibGU7CisJfQorCisJLyogVGhpcyBoYXMgdG8gYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0ICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlwcml2LT5od191bmF2YWlsYWJsZS0tOworCisJLyogcHJpdi0+b3BlbiBvciBwcml2LT5od191bmF2YWlsYWJsZSBtaWdodCBoYXZlIGNoYW5nZWQgd2hpbGUKKwkgKiB3ZSBkcm9wcGVkIHRoZSBsb2NrICovCisJaWYgKHByaXYtPm9wZW4gJiYgKCFwcml2LT5od191bmF2YWlsYWJsZSkpIHsKKwkJZXJyID0gX19vcmlub2NvX3VwKGRldik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkIHJlZW5hYmxpbmcgY2FyZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCX0gZWxzZQorCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXJldHVybjsKKyBkaXNhYmxlOgorCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7CisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCXByaW50ayhLRVJOX0VSUiAiJXM6IERldmljZSBoYXMgYmVlbiBkaXNhYmxlZCFcbiIsIGRldi0+bmFtZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVycnVwdCBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3RpY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXByaW50ayhLRVJOX0RFQlVHICIlczogVElDS1xuIiwgZGV2LT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3d0ZXJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwkvKiBUaGlzIHNlZW1zIHRvIGhhcHBlbiBhIGZhaXIgYml0IHVuZGVyIGxvYWQsIGJ1dCBpZ25vcmluZyBpdAorCSAgIHNlZW1zIHRvIHdvcmsgZmluZS4uLiovCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNQUMgY29udHJvbGxlciBlcnJvciAoV1RFUlIpLiBJZ25vcmluZy5cbiIsCisJICAgICAgIGRldi0+bmFtZSk7Cit9CisKK2lycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgY291bnQgPSBNQVhfSVJRTE9PUFNfUEVSX0lSUTsKKwl1MTYgZXZzdGF0LCBldmVudHM7CisJLyogVGhlc2UgYXJlIHVzZWQgdG8gZGV0ZWN0IGEgcnVuYXdheSBpbnRlcnJ1cHQgc2l0dWF0aW9uLgorCSAqCisJICogSWYgd2UgZ2V0IG1vcmUgdGhhbiBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZIGl0ZXJhdGlvbnMgaW4gYSBqaWZmeSwKKwkgKiB3ZSBwYW5pYyBhbmQgc2h1dCBkb3duIHRoZSBoYXJkd2FyZQorCSAqLworCS8qIGppZmZpZXMgdmFsdWUgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIGNhbGxlZCAqLworCXN0YXRpYyBpbnQgbGFzdF9pcnFfamlmZnk7IC8qID0gMCAqLworCXN0YXRpYyBpbnQgbG9vcHNfdGhpc19qaWZmeTsgLyogPSAwICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CisJCS8qIElmIGh3IGlzIHVuYXZhaWxhYmxlIC0gd2UgZG9uJ3Qga25vdyBpZiB0aGUgaXJxIHdhcworCQkgKiBmb3IgdXMgb3Igbm90ICovCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlldnN0YXQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOworCWV2ZW50cyA9IGV2c3RhdCAmIGh3LT5pbnRlbjsKKwlpZiAoIWV2ZW50cykgeworCQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKGppZmZpZXMgIT0gbGFzdF9pcnFfamlmZnkpCisJCWxvb3BzX3RoaXNfamlmZnkgPSAwOworCWxhc3RfaXJxX2ppZmZ5ID0gamlmZmllczsKKworCXdoaWxlIChldmVudHMgJiYgY291bnQtLSkgeworCQlpZiAoKytsb29wc190aGlzX2ppZmZ5ID4gTUFYX0lSUUxPT1BTX1BFUl9KSUZGWSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElSUSBoYW5kbGVyIGlzIGxvb3BpbmcgdG9vICIKKwkJCSAgICAgICAibXVjaCEgUmVzZXR0aW5nLlxuIiwgZGV2LT5uYW1lKTsKKwkJCS8qIERpc2FibGUgaW50ZXJydXB0cyBmb3Igbm93ICovCisJCQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOworCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIENoZWNrIHRoZSBjYXJkIGhhc24ndCBiZWVuIHJlbW92ZWQgKi8KKwkJaWYgKCFoZXJtZXNfcHJlc2VudChodykpIHsKKwkJCURFQlVHKDAsICJvcmlub2NvX2ludGVycnVwdCgpOiBjYXJkIHJlbW92ZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1RJQ0spCisJCQlfX29yaW5vY29fZXZfdGljayhkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9XVEVSUikKKwkJCV9fb3Jpbm9jb19ldl93dGVycihkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9JTkZEUk9QKQorCQkJX19vcmlub2NvX2V2X2luZmRyb3AoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfSU5GTykKKwkJCV9fb3Jpbm9jb19ldl9pbmZvKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1JYKQorCQkJX19vcmlub2NvX2V2X3J4KGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1RYRVhDKQorCQkJX19vcmlub2NvX2V2X3R4ZXhjKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1RYKQorCQkJX19vcmlub2NvX2V2X3R4KGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0FMTE9DKQorCQkJX19vcmlub2NvX2V2X2FsbG9jKGRldiwgaHcpOworCisJCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgZXZzdGF0KTsKKworCQlldnN0YXQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOworCQlldmVudHMgPSBldnN0YXQgJiBody0+aW50ZW47CisJfTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorRVhQT1JUX1NZTUJPTChvcmlub2NvX2ludGVycnVwdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBvd2VyIG1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgJiYgIWRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKQorc3RhdGljIGludCBvcmlub2NvX3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwbV9ldmVudCwKKwkJCSAgICAgICB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihub3RpZmllciwKKwkJCQkJCSAgICBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLAorCQkJCQkJICAgIHBtX25vdGlmaWVyKTsKKworCS8qIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGNhY2hlIHRoZSBmaXJtd2FyZSBiZWZvcmUgc3VzcGVuZCwgYW5kCisJICogcmVsZWFzZSBpdCB3aGVuIHdlIGNvbWUgb3V0LgorCSAqCisJICogT25seSBuZWVkIHRvIGRvIHRoaXMgaWYgd2UncmUgZG93bmxvYWRpbmcgZmlybXdhcmUuICovCisJaWYgKCFwcml2LT5kb19md19kb3dubG9hZCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJc3dpdGNoIChwbV9ldmVudCkgeworCWNhc2UgUE1fSElCRVJOQVRJT05fUFJFUEFSRToKKwljYXNlIFBNX1NVU1BFTkRfUFJFUEFSRToKKwkJb3Jpbm9jb19jYWNoZV9mdyhwcml2LCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFBNX1BPU1RfUkVTVE9SRToKKwkJLyogUmVzdG9yZSBmcm9tIGhpYmVybmF0aW9uIGZhaWxlZC4gV2UgbmVlZCB0byBjbGVhbgorCQkgKiB1cCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSwgc28gZmFsbCB0aHJvdWdoLiAqLworCWNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKKwljYXNlIFBNX1BPU1RfU1VTUEVORDoKKwkJb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpOworCQlicmVhazsKKworCWNhc2UgUE1fUkVTVE9SRV9QUkVQQVJFOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXByaXYtPnBtX25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBvcmlub2NvX3BtX25vdGlmaWVyOworCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwcml2LT5wbV9ub3RpZmllcik7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJnByaXYtPnBtX25vdGlmaWVyKTsKK30KKyNlbHNlIC8qICFQTV9TTEVFUCB8fCBIRVJNRVNfQ0FDSEVfRldfT05fSU5JVCAqLworI2RlZmluZSBvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgY29tcF9pZCB7CisJdTE2IGlkLCB2YXJpYW50LCBtYWpvciwgbWlub3I7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSBmd3R5cGVfdCBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZShzdHJ1Y3QgY29tcF9pZCAqbmljX2lkKQoreworCWlmIChuaWNfaWQtPmlkIDwgMHg4MDAwKQorCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9BR0VSRTsKKwllbHNlIGlmIChuaWNfaWQtPmlkID09IDB4ODAwMCAmJiBuaWNfaWQtPm1ham9yID09IDApCisJCXJldHVybiBGSVJNV0FSRV9UWVBFX1NZTUJPTDsKKwllbHNlCisJCXJldHVybiBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOworfQorCisvKiBTZXQgcHJpdi0+ZmlybXdhcmUgdHlwZSwgZGV0ZXJtaW5lIGZpcm13YXJlIHByb3BlcnRpZXMgKi8KK3N0YXRpYyBpbnQgZGV0ZXJtaW5lX2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisJc3RydWN0IGNvbXBfaWQgbmljX2lkLCBzdGFfaWQ7CisJdW5zaWduZWQgaW50IGZpcm12ZXI7CisJY2hhciB0bXBbU1lNQk9MX01BWF9WRVJfTEVOKzFdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMikpKTsKKworCS8qIEdldCB0aGUgaGFyZHdhcmUgdmVyc2lvbiAqLworCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTklDSUQsICZuaWNfaWQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgaGFyZHdhcmUgaWRlbnRpdHk6IGVycm9yICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWxlMTZfdG9fY3B1cygmbmljX2lkLmlkKTsKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC52YXJpYW50KTsKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC5tYWpvcik7CisJbGUxNl90b19jcHVzKCZuaWNfaWQubWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogSGFyZHdhcmUgaWRlbnRpdHkgJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBuaWNfaWQuaWQsIG5pY19pZC52YXJpYW50LAorCSAgICAgICBuaWNfaWQubWFqb3IsIG5pY19pZC5taW5vcik7CisKKwlwcml2LT5maXJtd2FyZV90eXBlID0gZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoJm5pY19pZCk7CisKKwkvKiBHZXQgdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KKwllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NUQUlELCAmc3RhX2lkKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIHN0YXRpb24gaWRlbnRpdHk6IGVycm9yICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWxlMTZfdG9fY3B1cygmc3RhX2lkLmlkKTsKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC52YXJpYW50KTsKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC5tYWpvcik7CisJbGUxNl90b19jcHVzKCZzdGFfaWQubWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogU3RhdGlvbiBpZGVudGl0eSAgJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBzdGFfaWQuaWQsIHN0YV9pZC52YXJpYW50LAorCSAgICAgICBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7CisKKwlzd2l0Y2ggKHN0YV9pZC5pZCkgeworCWNhc2UgMHgxNToKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUHJpbWFyeSBmaXJtd2FyZSBpcyBhY3RpdmVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwljYXNlIDB4MTRiOgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUZXJ0aWFyeSBmaXJtd2FyZSBpcyBhY3RpdmVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwljYXNlIDB4MWY6CS8qIEludGVyc2lsLCBBZ2VyZSwgU3ltYm9sIFNwZWN0cnVtMjQgKi8KKwljYXNlIDB4MjE6CS8qIFN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5rbm93biBzdGF0aW9uIElELCBwbGVhc2UgcmVwb3J0XG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJfQorCisJLyogRGVmYXVsdCBjYXBhYmlsaXRpZXMgKi8KKwlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAxOworCXByaXYtPmhhc19td28gPSAwOworCXByaXYtPmhhc19wcmVhbWJsZSA9IDA7CisJcHJpdi0+aGFzX3BvcnQzID0gMTsKKwlwcml2LT5oYXNfaWJzcyA9IDE7CisJcHJpdi0+aGFzX3dlcCA9IDA7CisJcHJpdi0+aGFzX2JpZ193ZXAgPSAwOworCXByaXYtPmhhc19hbHRfdHhjbnRsID0gMDsKKwlwcml2LT5oYXNfZXh0X3NjYW4gPSAwOworCXByaXYtPmhhc193cGEgPSAwOworCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKKworCS8qIERldGVybWluZSBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJLyogTHVjZW50IFdhdmVsYW4gSUVFRSwgTHVjZW50IE9yaW5vY28sIENhYmxldHJvbiBSb2FtQWJvdXQsCisJCSAgIEVMU0EsIE1lbGNvLCBIUCwgSUJNLCBEZWxsIDExNTAsIENvbXBhcSAxMTAvMjEwICovCisJCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCisJCQkgIkx1Y2VudC9BZ2VyZSAlZC4lMDJkIiwgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOworCisJCWZpcm12ZXIgPSAoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1ham9yIDw8IDE2KSB8IHN0YV9pZC5taW5vcjsKKworCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4NjAwMDYpOworCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7CisJCXByaXYtPmhhc19iaWdfd2VwID0gMTsgLyogRklYTUU6IHRoaXMgaXMgd3JvbmcgLSBob3cgZG8gd2UgdGVsbAorCQkJCQkgIEdvbGQgY2FyZHMgZnJvbSB0aGUgb3RoZXJzPyAqLworCQlwcml2LT5oYXNfbXdvID0gKGZpcm12ZXIgPj0gMHg2MDAwMCk7CisJCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4NDAwMjApOyAvKiBEb24ndCB3b3JrIGluIDcuNTIgPyAqLworCQlwcml2LT5pYnNzX3BvcnQgPSAxOworCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDgwMDBhKTsKKwkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAxOworCQlwcml2LT5icm9rZW5fbW9uaXRvciA9IChmaXJtdmVyID49IDB4ODAwMDApOworCQlwcml2LT5oYXNfYWx0X3R4Y250bCA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KKwkJcHJpdi0+aGFzX2V4dF9zY2FuID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLworCQlwcml2LT5oYXNfd3BhID0gKGZpcm12ZXIgPj0gMHg5MDAyYSk7CisJCS8qIFRlc3RlZCB3aXRoIEFnZXJlIGZpcm13YXJlIDoKKwkJICoJMS4xNiA7IDQuMDggOyA0LjUyIDsgNi4wNCA7IDYuMTYgOyA3LjI4ID0+IEplYW4gSUkKKwkJICogVGVzdGVkIENhYmxlVHJvbiBmaXJtd2FyZSA6IDQuMzIgPT4gQW50b24gKi8KKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJLyogU3ltYm9sICwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbCwgRXJpY3Nzb24gV0xBTiAqLworCQkvKiBJbnRlbCBNQUMgOiAwMDowMjpCMzoqICovCisJCS8qIDNDb20gTUFDIDogMDA6NTA6REE6KiAqLworCQltZW1zZXQodG1wLCAwLCBzaXplb2YodG1wKSk7CisJCS8qIEdldCB0aGUgU3ltYm9sIGZpcm13YXJlIHZlcnNpb24gKi8KKwkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkgICAgICBIRVJNRVNfUklEX1NFQ09OREFSWVZFUlNJT05fU1lNQk9MLAorCQkJCSAgICAgIFNZTUJPTF9NQVhfVkVSX0xFTiwgTlVMTCwgJnRtcCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IEVycm9yICVkIHJlYWRpbmcgU3ltYm9sIGZpcm13YXJlIGluZm8uICIKKwkJCSAgICAgICAiV2lsZGx5IGd1ZXNzaW5nIGNhcGFiaWxpdGllcy4uLlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlmaXJtdmVyID0gMDsKKwkJCXRtcFswXSA9ICdcMCc7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgZmlybXdhcmUgcmV2aXNpb24gaXMgYSBzdHJpbmcsIHRoZSBmb3JtYXQgaXMKKwkJCSAqIHNvbWV0aGluZyBsaWtlIDogIlYyLjIwLTAxIi4KKwkJCSAqIFF1aWNrIGFuZCBkaXJ0eSBwYXJzaW5nLi4uIC0gSmVhbiBJSQorCQkJICovCisJCQlmaXJtdmVyID0gKCh0bXBbMV0gLSAnMCcpIDw8IDE2KQorCQkJCXwgKCh0bXBbM10gLSAnMCcpIDw8IDEyKQorCQkJCXwgKCh0bXBbNF0gLSAnMCcpIDw8IDgpCisJCQkJfCAoKHRtcFs2XSAtICcwJykgPDwgNCkKKwkJCQl8ICh0bXBbN10gLSAnMCcpOworCisJCQl0bXBbU1lNQk9MX01BWF9WRVJfTEVOXSA9ICdcMCc7CisJCX0KKworCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAorCQkJICJTeW1ib2wgJXMiLCB0bXApOworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7CisJCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDE1MDEyKTsKKwkJcHJpdi0+aGFzX2JpZ193ZXAgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHgyMDAwMCAmJiBmaXJtdmVyIDwgMHgyMjAwMCkgfHwKKwkJCSAgICAgICAoZmlybXZlciA+PSAweDI5MDAwICYmIGZpcm12ZXIgPCAweDMwMDAwKSB8fAorCQkJICAgICAgIGZpcm12ZXIgPj0gMHgzMTAwMDsKKwkJcHJpdi0+aGFzX3ByZWFtYmxlID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7CisJCXByaXYtPmlic3NfcG9ydCA9IDQ7CisKKwkJLyogU3ltYm9sIGZpcm13YXJlIGlzIGZvdW5kIG9uIHZhcmlvdXMgY2FyZHMsIGJ1dAorCQkgKiB0aGVyZSBoYXMgYmVlbiBubyBhdHRlbXB0IHRvIGNoZWNrIGZpcm13YXJlCisJCSAqIGRvd25sb2FkIG9uIG5vbi1zcGVjdHJ1bV9jcyBiYXNlZCBjYXJkcy4KKwkJICoKKwkJICogR2l2ZW4gdGhhdCB0aGUgQWdlcmUgZmlybXdhcmUgZG93bmxvYWQgd29ya3MKKwkJICogZGlmZmVyZW50bHksIHdlIHNob3VsZCBhdm9pZCBkb2luZyBhIGZpcm13YXJlCisJCSAqIGRvd25sb2FkIHdpdGggdGhlIFN5bWJvbCBhbGdvcml0aG0gb24gbm9uLXNwZWN0cnVtCisJCSAqIGNhcmRzLgorCQkgKgorCQkgKiBGb3Igbm93IHdlIGNhbiBpZGVudGlmeSBhIHNwZWN0cnVtX2NzIGJhc2VkIGNhcmQKKwkJICogYmVjYXVzZSBpdCBoYXMgYSBmaXJtd2FyZSByZXNldCBmdW5jdGlvbi4KKwkJICovCisJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gKHByaXYtPnN0b3BfZncgIT0gTlVMTCk7CisKKwkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gKGZpcm12ZXIgPT0gMHgyNTAxMykgfHwKKwkJCQkoZmlybXZlciA+PSAweDMwMDAwICYmIGZpcm12ZXIgPD0gMHgzMTAwMCk7CisJCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MzEwMDEpIHx8CisJCQkJICAgICAoZmlybXZlciA+PSAweDI5MDU3ICYmIGZpcm12ZXIgPCAweDMwMDAwKTsKKwkJLyogVGVzdGVkIHdpdGggSW50ZWwgZmlybXdhcmUgOiAweDIwMDE1ID0+IEplYW4gSUkgKi8KKwkJLyogVGVzdGVkIHdpdGggM0NvbSBmaXJtd2FyZSA6IDB4MTUwMTIgJiAweDIyMDAxID0+IEplYW4gSUkgKi8KKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQkvKiBELUxpbmssIExpbmtzeXMsIEFkdHJvbiwgWm9vbUFpciwgYW5kIG1hbnkgb3RoZXJzLi4uCisJCSAqIFNhbXN1bmcsIENvbXBhcSAxMDAvMjAwIGFuZCBQcm94aW0gYXJlIHNsaWdodGx5CisJCSAqIGRpZmZlcmVudCBhbmQgbGVzcyB3ZWxsIHRlc3RlZCAqLworCQkvKiBELUxpbmsgTUFDIDogMDA6NDA6MDU6KiAqLworCQkvKiBBZGR0cm9uIE1BQyA6IDAwOjkwOkQxOiogKi8KKwkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKKwkJCSAiSW50ZXJzaWwgJWQuJWQuJWQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vciwKKwkJCSBzdGFfaWQudmFyaWFudCk7CisKKwkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwKKwkJCSgodW5zaWduZWQgbG9uZylzdGFfaWQubWlub3IgPDwgOCkgfCBzdGFfaWQudmFyaWFudDsKKworCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsgLyogRklYTUUgKi8KKwkJcHJpdi0+aGFzX2JpZ193ZXAgPSBwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgwMDA4MDApOworCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDAwMDcwMCk7CisJCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MDEwMzAxKTsKKworCQlpZiAoZmlybXZlciA+PSAweDAwMDgwMCkKKwkJCXByaXYtPmlic3NfcG9ydCA9IDA7CisJCWVsc2UgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogSW50ZXJzaWwgZmlybXdhcmUgZWFybGllciAiCisJCQkgICAgICAgInRoYW4gdjAuOC54IC0gc2V2ZXJhbCBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlwcml2LT5pYnNzX3BvcnQgPSAxOworCQl9CisJCWJyZWFrOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZpcm13YXJlIGRldGVybWluZWQgYXMgJXNcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgcHJpdi0+ZndfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGhlcm1lc19pZHN0cmluZyBuaWNrYnVmOworCXUxNiByZWNsZW47CisJaW50IGxlbjsKKworCS8qIE5vIG5lZWQgdG8gbG9jaywgdGhlIGh3X3VuYXZhaWxhYmxlIGZsYWcgaXMgYWxyZWFkeSBzZXQgaW4KKwkgKiBhbGxvY19vcmlub2NvZGV2KCkgKi8KKwlwcml2LT5uaWNidWZfc2l6ZSA9IElFRUU4MDIxMV9NQVhfRlJBTUVfTEVOICsgRVRIX0hMRU47CisKKwkvKiBJbml0aWFsaXplIHRoZSBmaXJtd2FyZSAqLworCWVyciA9IGhlcm1lc19pbml0KGh3KTsKKwlpZiAoZXJyICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZmlybXdhcmUgKGVyciA9ICVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocHJpdi0+ZG9fZndfZG93bmxvYWQpIHsKKyNpZmRlZiBDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKKwkJb3Jpbm9jb19jYWNoZV9mdyhwcml2LCAwKTsKKyNlbmRpZgorCisJCWVyciA9IG9yaW5vY29fZG93bmxvYWQocHJpdik7CisJCWlmIChlcnIpCisJCQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7CisKKwkJLyogQ2hlY2sgZmlybXdhcmUgdmVyc2lvbiBhZ2FpbiAqLworCQllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKKwkJaWYgKGVyciAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChwcml2LT5oYXNfcG9ydDMpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogQWQtaG9jIGRlbW8gbW9kZSBzdXBwb3J0ZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCWlmIChwcml2LT5oYXNfaWJzcykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJRUVFIHN0YW5kYXJkIElCU1MgYWQtaG9jIG1vZGUgc3VwcG9ydGVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwlpZiAocHJpdi0+aGFzX3dlcCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdFUCBzdXBwb3J0ZWQsICVzLWJpdCBrZXlcbiIsIGRldi0+bmFtZSwKKwkJICAgICAgIHByaXYtPmhhc19iaWdfd2VwID8gIjEwNCIgOiAiNDAiKTsKKwl9CisJaWYgKHByaXYtPmhhc193cGEpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXUEEtUFNLIHN1cHBvcnRlZFxuIiwgZGV2LT5uYW1lKTsKKwkJaWYgKG9yaW5vY29fbWljX2luaXQocHJpdikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBzZXR1cCBNSUMgY3J5cHRvICIKKwkJCSAgICAgICAiYWxnb3JpdGhtLiBEaXNhYmxpbmcgV1BBIHN1cHBvcnRcbiIsIGRldi0+bmFtZSk7CisJCQlwcml2LT5oYXNfd3BhID0gMDsKKwkJfQorCX0KKworCS8qIE5vdyB3ZSBoYXZlIHRoZSBmaXJtd2FyZSBjYXBhYmlsaXRpZXMsIGFsbG9jYXRlIGFwcHJvcGlhdGUKKwkgKiBzaXplZCBzY2FuIGJ1ZmZlcnMgKi8KKwlpZiAob3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShwcml2KSkKKwkJZ290byBvdXQ7CisJb3Jpbm9jb19ic3NfZGF0YV9pbml0KHByaXYpOworCisJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKKwkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBkZXYtPmRldl9hZGRyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzcyFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBhZGRyZXNzICVwTVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKKworCS8qIEdldCB0aGUgc3RhdGlvbiBuYW1lICovCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05OQU1FLAorCQkJICAgICAgc2l6ZW9mKG5pY2tidWYpLCAmcmVjbGVuLCAmbmlja2J1Zik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBzdGF0aW9uIG5hbWVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKG5pY2tidWYubGVuKQorCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIChpbnQpbGUxNl90b19jcHUobmlja2J1Zi5sZW4pKTsKKwllbHNlCisJCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgMiAqIHJlY2xlbik7CisJbWVtY3B5KHByaXYtPm5pY2ssICZuaWNrYnVmLnZhbCwgbGVuKTsKKwlwcml2LT5uaWNrW2xlbl0gPSAnXDAnOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIG5hbWUgXCIlc1wiXG4iLCBkZXYtPm5hbWUsIHByaXYtPm5pY2spOworCisJZXJyID0gb3Jpbm9jb19hbGxvY2F0ZV9maWQoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBOSUMgYnVmZmVyIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEdldCBhbGxvd2VkIGNoYW5uZWxzICovCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ0hBTk5FTExJU1QsCisJCQkJICAmcHJpdi0+Y2hhbm5lbF9tYXNrKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGNoYW5uZWwgbGlzdCFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgaW5pdGlhbCBBUCBkZW5zaXR5ICovCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCisJCQkJICAmcHJpdi0+YXBfZGVuc2l0eSk7CisJaWYgKGVyciB8fCBwcml2LT5hcF9kZW5zaXR5IDwgMSB8fCBwcml2LT5hcF9kZW5zaXR5ID4gMykKKwkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKKworCS8qIEdldCBpbml0aWFsIFJUUyB0aHJlc2hvbGQgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZSVFNUSFJFU0hPTEQsCisJCQkJICAmcHJpdi0+cnRzX3RocmVzaCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBSVFMgdGhyZXNob2xkIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEdldCBpbml0aWFsIGZyYWdtZW50YXRpb24gc2V0dGluZ3MgKi8KKwlpZiAocHJpdi0+aGFzX213bykKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCisJCQkJCSAgJnByaXYtPm13b19yb2J1c3QpOworCWVsc2UKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAorCQkJCQkgICZwcml2LT5mcmFnX3RocmVzaCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBmcmFnbWVudGF0aW9uIHNldHRpbmdzIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFBvd2VyIG1hbmFnZW1lbnQgc2V0dXAgKi8KKwlpZiAocHJpdi0+aGFzX3BtKSB7CisJCXByaXYtPnBtX29uID0gMDsKKwkJcHJpdi0+cG1fbWNhc3QgPSAxOworCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sCisJCQkJCSAgJnByaXYtPnBtX3BlcmlvZCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgcGVyaW9kIVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCisJCQkJCSAgJnByaXYtPnBtX3RpbWVvdXQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50IHRpbWVvdXQhXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIFByZWFtYmxlIHNldHVwICovCisJaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgeworCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORlBSRUFNQkxFX1NZTUJPTCwKKwkJCQkJICAmcHJpdi0+cHJlYW1ibGUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogU2V0IHVwIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KKwlwcml2LT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkvKiBCeSBkZWZhdWx0IHVzZSBJRUVFL0lCU1MgYWQtaG9jIG1vZGUgaWYgd2UgaGF2ZSBpdCAqLworCXByaXYtPnByZWZlcl9wb3J0MyA9IHByaXYtPmhhc19wb3J0MyAmJiAoIXByaXYtPmhhc19pYnNzKTsKKwlzZXRfcG9ydF90eXBlKHByaXYpOworCXByaXYtPmNoYW5uZWwgPSAwOyAvKiB1c2UgZmlybXdhcmUgZGVmYXVsdCAqLworCisJcHJpdi0+cHJvbWlzY3VvdXMgPSAwOworCXByaXYtPmVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisJcHJpdi0+dHhfa2V5ID0gMDsKKwlwcml2LT53cGFfZW5hYmxlZCA9IDA7CisJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAwOworCXByaXYtPmtleV9tZ210ID0gMDsKKwlwcml2LT53cGFfaWVfbGVuID0gMDsKKwlwcml2LT53cGFfaWUgPSBOVUxMOworCisJLyogTWFrZSB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlLCBhcyBsb25nIGFzIGl0IGhhc24ndCBiZWVuCisJICogcmVtb3ZlZCBlbHNld2hlcmUgKGUuZy4gYnkgUENNQ0lBIGhvdCB1bnBsdWcpICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWFkeVxuIiwgZGV2LT5uYW1lKTsKKworIG91dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG9yaW5vY29fbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gb3Jpbm9jb19pbml0LAorCS5uZG9fb3BlbgkJPSBvcmlub2NvX29wZW4sCisJLm5kb19zdG9wCQk9IG9yaW5vY29fc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gb3Jpbm9jb194bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG9yaW5vY29fY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gb3Jpbm9jb190eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG9yaW5vY29fZ2V0X3N0YXRzLAorfTsKKworc3RydWN0IG5ldF9kZXZpY2UKKyphbGxvY19vcmlub2NvZGV2KGludCBzaXplb2ZfY2FyZCwKKwkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCSAgaW50ICgqaGFyZF9yZXNldCkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqKSwKKwkJICBpbnQgKCpzdG9wX2Z3KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICosIGludCkpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OworCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpICsgc2l6ZW9mX2NhcmQpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwcml2LT5uZGV2ID0gZGV2OworCWlmIChzaXplb2ZfY2FyZCkKKwkJcHJpdi0+Y2FyZCA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXByaXYKKwkJCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlKSk7CisJZWxzZQorCQlwcml2LT5jYXJkID0gTlVMTDsKKwlwcml2LT5kZXYgPSBkZXZpY2U7CisKKwkvKiBTZXR1cCAvIG92ZXJyaWRlIG5ldF9kZXZpY2UgZmllbGRzICovCisJZGV2LT5uZXRkZXZfb3BzID0gJm9yaW5vY29fbmV0ZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7IC8qIDEgc2Vjb25kIHRpbWVvdXQgKi8KKwlkZXYtPmV0aHRvb2xfb3BzID0gJm9yaW5vY29fZXRodG9vbF9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZvcmlub2NvX2hhbmRsZXJfZGVmOworI2lmZGVmIFdJUkVMRVNTX1NQWQorCXByaXYtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmcHJpdi0+c3B5X2RhdGE7CisJZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CisjZW5kaWYKKwkvKiB3ZSB1c2UgdGhlIGRlZmF1bHQgZXRoX21hY19hZGRyIGZvciBzZXR0aW5nIHRoZSBNQUMgYWRkciAqLworCisJLyogUmVzZXJ2ZSBzcGFjZSBpbiBza2IgZm9yIHRoZSBTTkFQIGhlYWRlciAqLworCWRldi0+aGFyZF9oZWFkZXJfbGVuICs9IEVOQ0FQU19PVkVSSEVBRDsKKworCS8qIFNldCB1cCBkZWZhdWx0IGNhbGxiYWNrcyAqLworCXByaXYtPmhhcmRfcmVzZXQgPSBoYXJkX3Jlc2V0OworCXByaXYtPnN0b3BfZncgPSBzdG9wX2Z3OworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXByaXYtPm9wZW4gPSAwOworCXByaXYtPmh3X3VuYXZhaWxhYmxlID0gMTsgLyogb3Jpbm9jb19pbml0KCkgbXVzdCBjbGVhciB0aGlzCisJCQkJICAgKiBiZWZvcmUgYW55dGhpbmcgZWxzZSB0b3VjaGVzIHRoZQorCQkJCSAgICogaGFyZHdhcmUgKi8KKwlJTklUX1dPUksoJnByaXYtPnJlc2V0X3dvcmssIG9yaW5vY29fcmVzZXQpOworCUlOSVRfV09SSygmcHJpdi0+am9pbl93b3JrLCBvcmlub2NvX2pvaW5fYXApOworCUlOSVRfV09SSygmcHJpdi0+d2V2ZW50X3dvcmssIG9yaW5vY29fc2VuZF93ZXZlbnRzKTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5yeF9saXN0KTsKKwl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRldik7CisKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsKKworI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKKwlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKKwlwcml2LT5jYWNoZWRfZncgPSBOVUxMOworI2VuZGlmCisKKwkvKiBSZWdpc3RlciBQTSBub3RpZmllcnMgKi8KKwlvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOworCisJcmV0dXJuIGRldjsKK30KK0VYUE9SVF9TWU1CT0woYWxsb2Nfb3Jpbm9jb2Rldik7CisKK3ZvaWQgZnJlZV9vcmlub2NvZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7CisKKwkvKiBJZiB0aGUgdGFza2xldCBpcyBzY2hlZHVsZWQgd2hlbiB3ZSBjYWxsIHRhc2tsZXRfa2lsbCBpdAorCSAqIHdpbGwgcnVuIG9uZSBmaW5hbCB0aW1lLiBIb3dldmVyIHRoZSB0YXNrbGV0IHdpbGwgb25seQorCSAqIGRyYWluIHByaXYtPnJ4X2xpc3QgaWYgdGhlIGh3IGlzIHN0aWxsIGF2YWlsYWJsZS4gKi8KKwl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOworCisJLyogRXhwbGljaXRseSBkcmFpbiBwcml2LT5yeF9saXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X2RhdGEsIHRlbXAsICZwcml2LT5yeF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZyeF9kYXRhLT5saXN0KTsKKworCQlkZXZfa2ZyZWVfc2tiKHJ4X2RhdGEtPnNrYik7CisJCWtmcmVlKHJ4X2RhdGEtPmRlc2MpOworCQlrZnJlZShyeF9kYXRhKTsKKwl9CisKKwlvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7CisJb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpOworCisJcHJpdi0+d3BhX2llX2xlbiA9IDA7CisJa2ZyZWUocHJpdi0+d3BhX2llKTsKKwlvcmlub2NvX21pY19mcmVlKHByaXYpOworCW9yaW5vY29fYnNzX2RhdGFfZnJlZShwcml2KTsKKwlmcmVlX25ldGRldihkZXYpOworfQorRVhQT1JUX1NZTUJPTChmcmVlX29yaW5vY29kZXYpOworCitzdGF0aWMgdm9pZCBvcmlub2NvX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikgLSAxKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikgLSAxKTsKKwlzdHJuY3B5KGluZm8tPmZ3X3ZlcnNpb24sIHByaXYtPmZ3X25hbWUsIHNpemVvZihpbmZvLT5md192ZXJzaW9uKSAtIDEpOworCWlmIChkZXYtPmRldi5wYXJlbnQpCisJCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCisJCQlzaXplb2YoaW5mby0+YnVzX2luZm8pIC0gMSk7CisJZWxzZQorCQlzbnByaW50ZihpbmZvLT5idXNfaW5mbywgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSAtIDEsCisJCQkgIlBDTUNJQSAlcCIsIHByaXYtPmh3LmlvYmFzZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3Jpbm9jb19ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBvcmlub2NvX2dldF9kcnZpbmZvLAorCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENhbid0IGJlIGRlY2xhcmVkICJjb25zdCIgb3IgdGhlIHdob2xlIF9faW5pdGRhdGEgc2VjdGlvbiB3aWxsCisgKiBiZWNvbWUgY29uc3QgKi8KK3N0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gRFJJVkVSX05BTUUgIiAiIERSSVZFUl9WRVJTSU9OCisJIiAoRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiwgIgorCSJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiwgZXQgYWwpIjsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9vcmlub2NvKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfb3Jpbm9jbyh2b2lkKQoreworfQorCittb2R1bGVfaW5pdChpbml0X29yaW5vY28pOworbW9kdWxlX2V4aXQoZXhpdF9vcmlub2NvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyYmFlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qIEV4cG9ydHMgZnJvbSBtYWluIHRvIGhlbHBlciBtb2R1bGVzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgX09SSU5PQ09fTUFJTl9IXworI2RlZmluZSBfT1JJTk9DT19NQUlOX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbXBpbGUgdGltZSBjb25maWd1cmF0aW9uIGFuZCBjb21wYXRpYmlsaXR5IHN0dWZmICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV2UgZG8gdGhpcyB0aGlzIHdheSB0byBhdm9pZCBpZmRlZnMgaW4gdGhlIGFjdHVhbCBjb2RlICovCisjaWZkZWYgV0lSRUxFU1NfU1BZCisjZGVmaW5lIFNQWV9OVU1CRVIocHJpdikJKHByaXYtPnNweV9kYXRhLnNweV9udW1iZXIpCisjZWxzZQorI2RlZmluZSBTUFlfTlVNQkVSKHByaXYpCTAKKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBFeHBvcnQgbW9kdWxlIHBhcmFtZXRlciAqLworZXh0ZXJuIGludCBmb3JjZV9tb25pdG9yOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG5ldF9kZXZpY2U7CitzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CisKK3ZvaWQgc2V0X3BvcnRfdHlwZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBvcmlub2NvX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKworLyogSW5mb3JtYXRpb24gZWxlbWVudCBoZWxwZXJzIC0gZmluZCBhIGhvbWUgZm9yIHRoZXNlLi4uICovCitzdGF0aWMgaW5saW5lIHU4ICpvcmlub2NvX2dldF9pZSh1OCAqZGF0YSwgc2l6ZV90IGxlbiwKKwkJCQkgZW51bSBpZWVlODAyMTFfZWlkIGVpZCkKK3sKKwl1OCAqcCA9IGRhdGE7CisJd2hpbGUgKChwICsgMikgPCAoZGF0YSArIGxlbikpIHsKKwkJaWYgKHBbMF0gPT0gZWlkKQorCQkJcmV0dXJuIHA7CisJCXAgKz0gcFsxXSArIDI7CisJfQorCXJldHVybiBOVUxMOworfQorCisjZGVmaW5lIFdQQV9PVUlfVFlQRQkiXHgwMFx4NTBceEYyXHgwMSIKKyNkZWZpbmUgV1BBX1NFTEVDVE9SX0xFTiA0CitzdGF0aWMgaW5saW5lIHU4ICpvcmlub2NvX2dldF93cGFfaWUodTggKmRhdGEsIHNpemVfdCBsZW4pCit7CisJdTggKnAgPSBkYXRhOworCXdoaWxlICgocCArIDIgKyBXUEFfU0VMRUNUT1JfTEVOKSA8IChkYXRhICsgbGVuKSkgeworCQlpZiAoKHBbMF0gPT0gV0xBTl9FSURfR0VORVJJQykgJiYKKwkJICAgIChtZW1jbXAoJnBbMl0sIFdQQV9PVUlfVFlQRSwgV1BBX1NFTEVDVE9SX0xFTikgPT0gMCkpCisJCQlyZXR1cm4gcDsKKwkJcCArPSBwWzFdICsgMjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvKiBfT1JJTk9DT19NQUlOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDNlN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuYwpAQCAtMCwwICsxLDc5IEBACisvKiBPcmlub2NvIE1JQyBoZWxwZXJzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisKKyNpbmNsdWRlICJvcmlub2NvLmgiCisjaW5jbHVkZSAibWljLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1pY2hhZWwgTUlDIGNyeXB0byBzZXR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBvcmlub2NvX21pY19pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJcHJpdi0+dHhfdGZtX21pYyA9IGNyeXB0b19hbGxvY19oYXNoKCJtaWNoYWVsX21pYyIsIDAsIDApOworCWlmIChJU19FUlIocHJpdi0+dHhfdGZtX21pYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm9yaW5vY29fbWljX2luaXQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCisJCSAgICAgICAiY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIik7CisJCXByaXYtPnR4X3RmbV9taWMgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2LT5yeF90Zm1fbWljID0gY3J5cHRvX2FsbG9jX2hhc2goIm1pY2hhZWxfbWljIiwgMCwgMCk7CisJaWYgKElTX0VSUihwcml2LT5yeF90Zm1fbWljKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAib3Jpbm9jb19taWNfaW5pdDogY291bGQgbm90IGFsbG9jYXRlICIKKwkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKKwkJcHJpdi0+cnhfdGZtX21pYyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIG9yaW5vY29fbWljX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+dHhfdGZtX21pYykKKwkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT50eF90Zm1fbWljKTsKKwlpZiAocHJpdi0+cnhfdGZtX21pYykKKwkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT5yeF90Zm1fbWljKTsKK30KKworaW50IG9yaW5vY29fbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICprZXksCisJCXU4ICpkYSwgdTggKnNhLCB1OCBwcmlvcml0eSwKKwkJdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYykKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOworCXU4IGhkcltFVEhfSExFTiArIDJdOyAvKiBzaXplIG9mIGhlYWRlciArIHBhZGRpbmcgKi8KKworCWlmICh0Zm1fbWljaGFlbCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm9yaW5vY29fbWljOiB0Zm1fbWljaGFlbCA9PSBOVUxMXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENvcHkgaGVhZGVyIGludG8gYnVmZmVyLiBXZSBuZWVkIHRoZSBwYWRkaW5nIG9uIHRoZSBlbmQgemVyb2VkICovCisJbWVtY3B5KCZoZHJbMF0sIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KCZoZHJbRVRIX0FMRU5dLCBzYSwgRVRIX0FMRU4pOworCWhkcltFVEhfQUxFTioyXSA9IHByaW9yaXR5OworCWhkcltFVEhfQUxFTioyKzFdID0gMDsKKwloZHJbRVRIX0FMRU4qMisyXSA9IDA7CisJaGRyW0VUSF9BTEVOKjIrM10gPSAwOworCisJLyogVXNlIHNjYXR0ZXIgZ2F0aGVyIHRvIE1JQyBoZWFkZXIgYW5kIGRhdGEgaW4gb25lIGdvICovCisJc2dfaW5pdF90YWJsZShzZywgMik7CisJc2dfc2V0X2J1Zigmc2dbMF0sIGhkciwgc2l6ZW9mKGhkcikpOworCXNnX3NldF9idWYoJnNnWzFdLCBkYXRhLCBkYXRhX2xlbik7CisKKwlpZiAoY3J5cHRvX2hhc2hfc2V0a2V5KHRmbV9taWNoYWVsLCBrZXksIE1JQ19LRVlMRU4pKQorCQlyZXR1cm4gLTE7CisKKwlkZXNjLnRmbSA9IHRmbV9taWNoYWVsOworCWRlc2MuZmxhZ3MgPSAwOworCXJldHVybiBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnLCBkYXRhX2xlbiArIHNpemVvZihoZHIpLAorCQkJCSAgbWljKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZDA1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qIE9yaW5vY28gTUlDIGhlbHBlcnMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19NSUNfSF8KKyNkZWZpbmUgX09SSU5PQ09fTUlDX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE1JQ0hBRUxfTUlDX0xFTiA4CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlOworc3RydWN0IGNyeXB0b19oYXNoOworCitpbnQgb3Jpbm9jb19taWNfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK3ZvaWQgb3Jpbm9jb19taWNfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBvcmlub2NvX21pYyhzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbV9taWNoYWVsLCB1OCAqa2V5LAorCQl1OCAqZGEsIHU4ICpzYSwgdTggcHJpb3JpdHksCisJCXU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpOworCisjZW5kaWYgLyogT1JJTk9DT19NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY3ZDFhOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uYworKysgL2Rldi9udWxsCkBAIC0xLDYxNTkgKzAsMCBAQAotLyogb3Jpbm9jby5jIC0gKGZvcm1lcmx5IGtub3duIGFzIGRsZHdkX2NzLmMgYW5kIG9yaW5vY29fY3MuYykKLSAqCi0gKiBBIGRyaXZlciBmb3IgSGVybWVzIG9yIFByaXNtIDIgY2hpcHNldCBiYXNlZCBQQ01DSUEgd2lyZWxlc3MKLSAqIGFkYXB0b3JzLCB3aXRoIEx1Y2VudC9BZ2VyZSwgSW50ZXJzaWwgb3IgU3ltYm9sIGZpcm13YXJlLgotICoKLSAqIEN1cnJlbnQgbWFpbnRhaW5lcnMgKGFzIG9mIDI5IFNlcHRlbWJlciAyMDAzKSBhcmU6Ci0gKiAJUGF2ZWwgUm9za2luIDxwcm9za2kgQVQgZ251Lm9yZz4KLSAqIGFuZAlEYXZpZCBHaWJzb24gPGhlcm1lcyBBVCBnaWJzb24uZHJvcGJlYXIuaWQuYXU+Ci0gKgotICogKEMpIENvcHlyaWdodCBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbiAyMDAxLTIwMDMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgR2lic29uLCBMaW51eGNhcmUgQXVzdHJhbGlhLgotICoJV2l0aCBzb21lIGhlbHAgZnJvbSA6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgSmVhbiBUb3VycmlsaGVzLCBIUCBMYWJzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgQmVuamFtaW4gSGVycmVuc2NobWlkdAotICoKLSAqIEJhc2VkIG9uIGR1bW15X2NzLmMgMS4yNyAyMDAwLzA2LzEyIDIxOjI3OjI1Ci0gKgotICogUG9ydGlvbnMgYmFzZWQgb24gd3ZsYW5fY3MuYyAxLjAuNiwgQ29weXJpZ2h0IEFuZHJlYXMgTmV1aGF1cyA8YW5keQotICogQVQgZmFzdGEuZmgtZG9ydG11bmQuZGU+Ci0gKiAgICAgIGh0dHA6Ly93d3cuc3R1ZC5maC1kb3J0bXVuZC5kZS9+YW5keS93dmxhbi8KLSAqCi0gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCi0gKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZQotICogYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgotICogYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQotICogdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKgotICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCi0gKiA8ZGFoaW5kcyBBVCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZAotICogQS4gSGluZHMgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMKLSAqIFJlc2VydmVkLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbgotICogd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCi0gKiBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQotICogb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgotICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQotICogZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCi0gKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUKLSAqIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQotICogdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4gICovCi0KLS8qCi0gKiBUT0RPCi0gKglvIEhhbmRsZSBkZS1lbmNhcHN1bGF0aW9uIHdpdGhpbiBuZXR3b3JrIGxheWVyLCBwcm92aWRlIDgwMi4xMQotICoJICBoZWFkZXJzIChwYXRjaCBmcm9tIFRob21hcyAnRGVudCcgTWlybGFjaGVyKQotICoJbyBGaXggcG9zc2libGUgcmFjZXMgaW4gU1BZIGhhbmRsaW5nLgotICoJbyBEaXNjb25uZWN0IHdpcmVsZXNzIGV4dGVuc2lvbnMgZnJvbSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uLgotICoJbyAobWF5YmUpIFNvZnR3YXJlIFdFUCBzdXBwb3J0IChwYXRjaCBmcm9tIFN0YW5vIE1lZHVuYSkuCi0gKglvIChtYXliZSkgVXNlIG11bHRpcGxlIFR4IGJ1ZmZlcnMgLSBkcml2ZXIgaGFuZGxpbmcgcXVldWUKLSAqCSAgcmF0aGVyIHRoYW4gZmlybXdhcmUuCi0gKi8KLQotLyogTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uOgotICoKLSAqIFRoZSBiYXNpYyBwcmluY2lwbGUgaXMgdGhhdCBldmVyeXRoaW5nIGlzIHNlcmlhbGl6ZWQgdGhyb3VnaCBhCi0gKiBzaW5nbGUgc3BpbmxvY2ssIHByaXYtPmxvY2suICBUaGUgbG9jayBpcyB1c2VkIGluIHVzZXIsIGJoIGFuZCBpcnEKLSAqIGNvbnRleHQsIHNvIHdoZW4gdGFrZW4gb3V0c2lkZSBoYXJkaXJxIGNvbnRleHQgaXQgc2hvdWxkIGFsd2F5cyBiZQotICogdGFrZW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAgVGhlIGxvY2sgcHJvdGVjdHMgYm90aCB0aGUKLSAqIGhhcmR3YXJlIGFuZCB0aGUgc3RydWN0IG9yaW5vY29fcHJpdmF0ZS4KLSAqCi0gKiBBbm90aGVyIGZsYWcsIHByaXYtPmh3X3VuYXZhaWxhYmxlIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBpcwotICogdW5hdmFpbGFibGUgZm9yIGFuIGV4dGVuZGVkIHBlcmlvZCBvZiB0aW1lIChlLmcuIHN1c3BlbmRlZCwgb3IgaW4KLSAqIHRoZSBtaWRkbGUgb2YgYSBoYXJkIHJlc2V0KS4gIFRoaXMgZmxhZyBpcyBwcm90ZWN0ZWQgYnkgdGhlCi0gKiBzcGlubG9jay4gIEFsbCBjb2RlIHdoaWNoIHRvdWNoZXMgdGhlIGhhcmR3YXJlIHNob3VsZCBjaGVjayB0aGUKLSAqIGZsYWcgYWZ0ZXIgdGFraW5nIHRoZSBsb2NrLCBhbmQgaWYgaXQgaXMgc2V0LCBnaXZlIHVwIG9uIHdoYXRldmVyCi0gKiB0aGV5IGFyZSBkb2luZyBhbmQgZHJvcCB0aGUgbG9jayBhZ2Fpbi4gIFRoZSBvcmlub2NvX2xvY2soKQotICogZnVuY3Rpb24gaGFuZGxlcyB0aGlzIChpdCB1bmxvY2tzIGFuZCByZXR1cm5zIC1FQlVTWSBpZgotICogaHdfdW5hdmFpbGFibGUgaXMgbm9uLXplcm8pLgotICovCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUgIm9yaW5vY28iCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotCi0jaW5jbHVkZSAiaGVybWVzX3JpZC5oIgotI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKLSNpbmNsdWRlICJvcmlub2NvLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1vZHVsZSBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4gJiBEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgTHVjZW50IE9yaW5vY28sIFByaXNtIElJIGJhc2VkIGFuZCBzaW1pbGFyIHdpcmVsZXNzIGNhcmRzIik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7Ci0KLS8qIExldmVsIG9mIGRlYnVnZ2luZy4gVXNlZCBpbiB0aGUgbWFjcm9zIGluIG9yaW5vY28uaCAqLwotI2lmZGVmIE9SSU5PQ09fREVCVUcKLWludCBvcmlub2NvX2RlYnVnID0gT1JJTk9DT19ERUJVRzsKLW1vZHVsZV9wYXJhbShvcmlub2NvX2RlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhvcmlub2NvX2RlYnVnLCAiRGVidWcgbGV2ZWwiKTsKLUVYUE9SVF9TWU1CT0wob3Jpbm9jb19kZWJ1Zyk7Ci0jZW5kaWYKLQotc3RhdGljIGludCBzdXBwcmVzc19saW5rc3RhdHVzOyAvKiA9IDAgKi8KLW1vZHVsZV9wYXJhbShzdXBwcmVzc19saW5rc3RhdHVzLCBib29sLCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc3VwcHJlc3NfbGlua3N0YXR1cywgIkRvbid0IGxvZyBsaW5rIHN0YXR1cyBjaGFuZ2VzIik7Ci1zdGF0aWMgaW50IGlnbm9yZV9kaXNjb25uZWN0OyAvKiA9IDAgKi8KLW1vZHVsZV9wYXJhbShpZ25vcmVfZGlzY29ubmVjdCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2Rpc2Nvbm5lY3QsICJEb24ndCByZXBvcnQgbG9zdCBsaW5rIHRvIHRoZSBuZXR3b3JrIGxheWVyIik7Ci0KLXN0YXRpYyBpbnQgZm9yY2VfbW9uaXRvcjsgLyogPSAwICovCi1tb2R1bGVfcGFyYW0oZm9yY2VfbW9uaXRvciwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfbW9uaXRvciwgIkFsbG93IG1vbml0b3IgbW9kZSBmb3IgYWxsIGZpcm13YXJlIHZlcnNpb25zIik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENvbXBpbGUgdGltZSBjb25maWd1cmF0aW9uIGFuZCBjb21wYXRpYmlsaXR5IHN0dWZmICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogV2UgZG8gdGhpcyB0aGlzIHdheSB0byBhdm9pZCBpZmRlZnMgaW4gdGhlIGFjdHVhbCBjb2RlICovCi0jaWZkZWYgV0lSRUxFU1NfU1BZCi0jZGVmaW5lIFNQWV9OVU1CRVIocHJpdikJKHByaXYtPnNweV9kYXRhLnNweV9udW1iZXIpCi0jZWxzZQotI2RlZmluZSBTUFlfTlVNQkVSKHByaXYpCTAKLSNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSW50ZXJuYWwgY29uc3RhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiA4MDIuMiBMTEMvU05BUCBoZWFkZXIgdXNlZCBmb3IgRXRoZXJuZXQgZW5jYXBzdWxhdGlvbiBvdmVyIDgwMi4xMSAqLwotc3RhdGljIGNvbnN0IHU4IGVuY2Fwc19oZHJbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKLSNkZWZpbmUgRU5DQVBTX09WRVJIRUFECQkoc2l6ZW9mKGVuY2Fwc19oZHIpICsgMikKLQotI2RlZmluZSBPUklOT0NPX01JTl9NVFUJCTI1NgotI2RlZmluZSBPUklOT0NPX01BWF9NVFUJCShJRUVFODAyMTFfTUFYX0RBVEFfTEVOIC0gRU5DQVBTX09WRVJIRUFEKQotCi0jZGVmaW5lIFNZTUJPTF9NQVhfVkVSX0xFTgkoMTQpCi0jZGVmaW5lIFVTRVJfQkFQCQkwCi0jZGVmaW5lIElSUV9CQVAJCQkxCi0jZGVmaW5lIE1BWF9JUlFMT09QU19QRVJfSVJRCTEwCi0jZGVmaW5lIE1BWF9JUlFMT09QU19QRVJfSklGRlkJKDIwMDAwL0haKSAvKiBCYXNlZCBvbiBhIGd1ZXN0aW1hdGUgb2YKLQkJCQkJICAgICogaG93IG1hbnkgZXZlbnRzIHRoZQotCQkJCQkgICAgKiBkZXZpY2UgY291bGQKLQkJCQkJICAgICogbGVnaXRpbWF0ZWx5IGdlbmVyYXRlICovCi0jZGVmaW5lIFNNQUxMX0tFWV9TSVpFCQk1Ci0jZGVmaW5lIExBUkdFX0tFWV9TSVpFCQkxMwotI2RlZmluZSBUWF9OSUNCVUZfU0laRV9CVUcJMTU4NQkJLyogQnVnIGluIFN5bWJvbCBmaXJtd2FyZSAqLwotCi0jZGVmaW5lIERVTU1ZX0ZJRAkJMHhGRkZGCi0KLS8qI2RlZmluZSBNQVhfTVVMVElDQVNUKHByaXYpCShwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUgPyBcCi0gIEhFUk1FU19NQVhfTVVMVElDQVNUIDogMCkqLwotI2RlZmluZSBNQVhfTVVMVElDQVNUKHByaXYpCShIRVJNRVNfTUFYX01VTFRJQ0FTVCkKLQotI2RlZmluZSBPUklOT0NPX0lOVEVOCSAJKEhFUk1FU19FVl9SWCB8IEhFUk1FU19FVl9BTExPQyBcCi0JCQkJIHwgSEVSTUVTX0VWX1RYIHwgSEVSTUVTX0VWX1RYRVhDIFwKLQkJCQkgfCBIRVJNRVNfRVZfV1RFUlIgfCBIRVJNRVNfRVZfSU5GTyBcCi0JCQkJIHwgSEVSTUVTX0VWX0lORkRST1AgKQotCi0jZGVmaW5lIE1BWF9SSURfTEVOIDEwMjQKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmOwotc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcmlub2NvX2V0aHRvb2xfb3BzOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEYXRhIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoZSBmcmVxdWVuY3kgb2YgZWFjaCBjaGFubmVsIGluIE1IeiAqLwotc3RhdGljIGNvbnN0IGxvbmcgY2hhbm5lbF9mcmVxdWVuY3lbXSA9IHsKLQkyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQKLX07Ci0jZGVmaW5lIE5VTV9DSEFOTkVMUyBBUlJBWV9TSVpFKGNoYW5uZWxfZnJlcXVlbmN5KQotCi0vKiBUaGlzIHRhYmxlcyBnaXZlcyB0aGUgYWN0dWFsIG1lYW5pbmdzIG9mIHRoZSBiaXRyYXRlIElEcyByZXR1cm5lZAotICogYnkgdGhlIGZpcm13YXJlLiAqLwotc3RhdGljIHN0cnVjdCB7Ci0JaW50IGJpdHJhdGU7IC8qIGluIDEwMHMgb2Yga2lsb2JpdHMgKi8KLQlpbnQgYXV0b21hdGljOwotCXUxNiBhZ2VyZV90eHJhdGVjdHJsOwotCXUxNiBpbnRlcnNpbF90eHJhdGVjdHJsOwotfSBiaXRyYXRlX3RhYmxlW10gPSB7Ci0JezExMCwgMSwgIDMsIDE1fSwgLyogRW50cnkgMCBpcyB0aGUgZGVmYXVsdCAqLwotCXsxMCwgIDAsICAxLCAgMX0sCi0JezEwLCAgMSwgIDEsICAxfSwKLQl7MjAsICAwLCAgMiwgIDJ9LAotCXsyMCwgIDEsICA2LCAgM30sCi0JezU1LCAgMCwgIDQsICA0fSwKLQl7NTUsICAxLCAgNywgIDd9LAotCXsxMTAsIDAsICA1LCAgOH0sCi19OwotI2RlZmluZSBCSVRSQVRFX1RBQkxFX1NJWkUgQVJSQVlfU0laRShiaXRyYXRlX3RhYmxlKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEYXRhIHR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEJlZ2lubmluZyBvZiB0aGUgVHggZGVzY3JpcHRvciwgdXNlZCBpbiBUeEV4YyBoYW5kbGluZyAqLwotc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIHsKLQlzdHJ1Y3QgaGVybWVzX3R4X2Rlc2NyaXB0b3IgZGVzYzsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogUnggZnJhbWUgaGVhZGVyIGV4Y2VwdCBjb21wYXRpYmlsaXR5IDgwMi4zIGhlYWRlciAqLwotc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yIHsKLQkvKiBDb250cm9sICovCi0JX19sZTE2IHN0YXR1czsKLQlfX2xlMzIgdGltZTsKLQl1OCBzaWxlbmNlOwotCXU4IHNpZ25hbDsKLQl1OCByYXRlOwotCXU4IHJ4ZmxvdzsKLQlfX2xlMzIgcmVzZXJ2ZWQ7Ci0KLQkvKiA4MDIuMTEgaGVhZGVyICovCi0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggYWRkcjRbRVRIX0FMRU5dOwotCi0JLyogRGF0YSBsZW5ndGggKi8KLQlfX2xlMTYgZGF0YV9sZW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRnVuY3Rpb24gcHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBNaWNoYWVsIE1JQyBjcnlwdG8gc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE1JQ0hBRUxfTUlDX0xFTiA4Ci1zdGF0aWMgaW50IG9yaW5vY29fbWljX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlwcml2LT50eF90Zm1fbWljID0gY3J5cHRvX2FsbG9jX2hhc2goIm1pY2hhZWxfbWljIiwgMCwgMCk7Ci0JaWYgKElTX0VSUihwcml2LT50eF90Zm1fbWljKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAib3Jpbm9jb19taWNfaW5pdDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKLQkJcHJpdi0+dHhfdGZtX21pYyA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXByaXYtPnJ4X3RmbV9taWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLCAwKTsKLQlpZiAoSVNfRVJSKHByaXYtPnJ4X3RmbV9taWMpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJvcmlub2NvX21pY19pbml0OiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOwotCQlwcml2LT5yeF90Zm1fbWljID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fbWljX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpZiAocHJpdi0+dHhfdGZtX21pYykKLQkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT50eF90Zm1fbWljKTsKLQlpZiAocHJpdi0+cnhfdGZtX21pYykKLQkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT5yeF90Zm1fbWljKTsKLX0KLQotc3RhdGljIGludCBtaWNoYWVsX21pYyhzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbV9taWNoYWVsLCB1OCAqa2V5LAotCQkgICAgICAgdTggKmRhLCB1OCAqc2EsIHU4IHByaW9yaXR5LAotCQkgICAgICAgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYykKLXsKLQlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwotCXU4IGhkcltFVEhfSExFTiArIDJdOyAvKiBzaXplIG9mIGhlYWRlciArIHBhZGRpbmcgKi8KLQotCWlmICh0Zm1fbWljaGFlbCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1pY2hhZWxfbWljOiB0Zm1fbWljaGFlbCA9PSBOVUxMXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIENvcHkgaGVhZGVyIGludG8gYnVmZmVyLiBXZSBuZWVkIHRoZSBwYWRkaW5nIG9uIHRoZSBlbmQgemVyb2VkICovCi0JbWVtY3B5KCZoZHJbMF0sIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KCZoZHJbRVRIX0FMRU5dLCBzYSwgRVRIX0FMRU4pOwotCWhkcltFVEhfQUxFTioyXSA9IHByaW9yaXR5OwotCWhkcltFVEhfQUxFTioyKzFdID0gMDsKLQloZHJbRVRIX0FMRU4qMisyXSA9IDA7Ci0JaGRyW0VUSF9BTEVOKjIrM10gPSAwOwotCi0JLyogVXNlIHNjYXR0ZXIgZ2F0aGVyIHRvIE1JQyBoZWFkZXIgYW5kIGRhdGEgaW4gb25lIGdvICovCi0Jc2dfaW5pdF90YWJsZShzZywgMik7Ci0Jc2dfc2V0X2J1Zigmc2dbMF0sIGhkciwgc2l6ZW9mKGhkcikpOwotCXNnX3NldF9idWYoJnNnWzFdLCBkYXRhLCBkYXRhX2xlbik7Ci0KLQlpZiAoY3J5cHRvX2hhc2hfc2V0a2V5KHRmbV9taWNoYWVsLCBrZXksIE1JQ19LRVlMRU4pKQotCQlyZXR1cm4gLTE7Ci0KLQlkZXNjLnRmbSA9IHRmbV9taWNoYWVsOwotCWRlc2MuZmxhZ3MgPSAwOwotCXJldHVybiBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnLCBkYXRhX2xlbiArIHNpemVvZihoZHIpLAotCQkJCSAgbWljKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BvcnRfdHlwZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXN3aXRjaCAocHJpdi0+aXdfbW9kZSkgewotCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJcHJpdi0+cG9ydF90eXBlID0gMTsKLQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJaWYgKHByaXYtPnByZWZlcl9wb3J0MykgewotCQkJcHJpdi0+cG9ydF90eXBlID0gMzsKLQkJCXByaXYtPmNyZWF0ZWlic3MgPSAwOwotCQl9IGVsc2UgewotCQkJcHJpdi0+cG9ydF90eXBlID0gcHJpdi0+aWJzc19wb3J0OwotCQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDE7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX01PTklUT1I6Ci0JCXByaXYtPnBvcnRfdHlwZSA9IDM7Ci0JCXByaXYtPmNyZWF0ZWlic3MgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIHByaXYtPml3X21vZGUgaW4gc2V0X3BvcnRfdHlwZSgpXG4iLAotCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSk7Ci0JfQotfQotCi0jZGVmaW5lIE9SSU5PQ09fTUFYX0JTU19DT1VOVAk2NAotc3RhdGljIGludCBvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaWYgKHByaXYtPmJzc194YnNzX2RhdGEpCi0JCXJldHVybiAwOwotCi0JaWYgKHByaXYtPmhhc19leHRfc2NhbikKLQkJcHJpdi0+YnNzX3hic3NfZGF0YSA9IGt6YWxsb2MoT1JJTk9DT19NQVhfQlNTX0NPVU5UICoKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB4YnNzX2VsZW1lbnQpLAotCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKLQllbHNlCi0JCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYnNzX2VsZW1lbnQpLAotCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKLQotCWlmICghcHJpdi0+YnNzX3hic3NfZGF0YSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYmVhY29ucyIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fYnNzX2RhdGFfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWtmcmVlKHByaXYtPmJzc194YnNzX2RhdGEpOwotCXByaXYtPmJzc194YnNzX2RhdGEgPSBOVUxMOwotfQotCi0jZGVmaW5lIFBSSVZfQlNTCSgoc3RydWN0IGJzc19lbGVtZW50ICopcHJpdi0+YnNzX3hic3NfZGF0YSkKLSNkZWZpbmUgUFJJVl9YQlNTCSgoc3RydWN0IHhic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCi1zdGF0aWMgdm9pZCBvcmlub2NvX2Jzc19kYXRhX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpbnQgaTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2xpc3QpOwotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCi0JCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9CU1NfQ09VTlQ7IGkrKykKLQkJCWxpc3RfYWRkX3RhaWwoJihQUklWX1hCU1NbaV0ubGlzdCksCi0JCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCWVsc2UKLQkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQotCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfQlNTW2ldLmxpc3QpLAotCQkJCSAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQotfQotCi1zdGF0aWMgaW5saW5lIHU4ICpvcmlub2NvX2dldF9pZSh1OCAqZGF0YSwgc2l6ZV90IGxlbiwKLQkJCQkgZW51bSBpZWVlODAyMTFfZWlkIGVpZCkKLXsKLQl1OCAqcCA9IGRhdGE7Ci0Jd2hpbGUgKChwICsgMikgPCAoZGF0YSArIGxlbikpIHsKLQkJaWYgKHBbMF0gPT0gZWlkKQotCQkJcmV0dXJuIHA7Ci0JCXAgKz0gcFsxXSArIDI7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0jZGVmaW5lIFdQQV9PVUlfVFlQRQkiXHgwMFx4NTBceEYyXHgwMSIKLSNkZWZpbmUgV1BBX1NFTEVDVE9SX0xFTiA0Ci1zdGF0aWMgaW5saW5lIHU4ICpvcmlub2NvX2dldF93cGFfaWUodTggKmRhdGEsIHNpemVfdCBsZW4pCi17Ci0JdTggKnAgPSBkYXRhOwotCXdoaWxlICgocCArIDIgKyBXUEFfU0VMRUNUT1JfTEVOKSA8IChkYXRhICsgbGVuKSkgewotCQlpZiAoKHBbMF0gPT0gV0xBTl9FSURfR0VORVJJQykgJiYKLQkJICAgIChtZW1jbXAoJnBbMl0sIFdQQV9PVUlfVFlQRSwgV1BBX1NFTEVDVE9SX0xFTikgPT0gMCkpCi0JCQlyZXR1cm4gcDsKLQkJcCArPSBwWzFdICsgMjsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRG93bmxvYWQgZnVuY3Rpb25hbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgZndfaW5mbyB7Ci0JY2hhciAqcHJpX2Z3OwotCWNoYXIgKnN0YV9mdzsKLQljaGFyICphcF9mdzsKLQl1MzIgcGRhX2FkZHI7Ci0JdTE2IHBkYV9zaXplOwotfTsKLQotY29uc3Qgc3RhdGljIHN0cnVjdCBmd19pbmZvIG9yaW5vY29fZndbXSA9IHsKLQl7IE5VTEwsICJhZ2VyZV9zdGFfZncuYmluIiwgImFnZXJlX2FwX2Z3LmJpbiIsIDB4MDAzOTAwMDAsIDEwMDAgfSwKLQl7IE5VTEwsICJwcmlzbV9zdGFfZncuYmluIiwgInByaXNtX2FwX2Z3LmJpbiIsIDAsIDEwMjQgfSwKLQl7ICJzeW1ib2xfc3AyNHRfcHJpbV9mdyIsICJzeW1ib2xfc3AyNHRfc2VjX2Z3IiwgTlVMTCwgMHgwMDAwMzEwMCwgNTEyIH0KLX07Ci0KLS8qIFN0cnVjdHVyZSB1c2VkIHRvIGFjY2VzcyBmaWVsZHMgaW4gRlcKLSAqIE1ha2Ugc3VyZSBMRSBkZWNvZGluZyBtYWNyb3MgYXJlIHVzZWQKLSAqLwotc3RydWN0IG9yaW5vY29fZndfaGVhZGVyIHsKLQljaGFyIGhkcl92ZXJzWzZdOyAgICAgICAvKiBBU0NJSSBzdHJpbmcgZm9yIGhlYWRlciB2ZXJzaW9uICovCi0JX19sZTE2IGhlYWRlcnNpemU7ICAgICAgLyogVG90YWwgbGVuZ3RoIG9mIGhlYWRlciAqLwotCV9fbGUzMiBlbnRyeV9wb2ludDsgICAgIC8qIE5JQyBlbnRyeSBwb2ludCAqLwotCV9fbGUzMiBibG9ja3M7ICAgICAgICAgIC8qIE51bWJlciBvZiBibG9ja3MgdG8gcHJvZ3JhbSAqLwotCV9fbGUzMiBibG9ja19vZmZzZXQ7ICAgIC8qIE9mZnNldCBvZiBibG9jayBkYXRhIGZyb20gZW9mIGhlYWRlciAqLwotCV9fbGUzMiBwZHJfb2Zmc2V0OyAgICAgIC8qIE9mZnNldCB0byBQRFIgZGF0YSBmcm9tIGVvZiBoZWFkZXIgKi8KLQlfX2xlMzIgcHJpX29mZnNldDsgICAgICAvKiBPZmZzZXQgdG8gcHJpbWFyeSBwbHVnIGRhdGEgKi8KLQlfX2xlMzIgY29tcGF0X29mZnNldDsgICAvKiBPZmZzZXQgdG8gY29tcGF0aWJpbGl0eSBkYXRhKi8KLQljaGFyIHNpZ25hdHVyZVswXTsgICAgICAvKiBGVyBzaWduYXR1cmUgbGVuZ3RoIGhlYWRlcnNpemUtMjAgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBEb3dubG9hZCBlaXRoZXIgU1RBIG9yIEFQIGZpcm13YXJlIGludG8gdGhlIGNhcmQuICovCi1zdGF0aWMgaW50Ci1vcmlub2NvX2RsX2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCSAgICBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncsCi0JCSAgICBpbnQgYXApCi17Ci0JLyogUGx1ZyBEYXRhIEFyZWEgKFBEQSkgKi8KLQlfX2xlMTYgKnBkYTsKLQotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwotCWNvbnN0IHN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciAqaGRyOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpcnN0X2Jsb2NrOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZDsKLQljb25zdCBjaGFyICpmaXJtd2FyZTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlpbnQgZXJyID0gMDsKLQotCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBkYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYXApCi0JCWZpcm13YXJlID0gZnctPmFwX2Z3OwotCWVsc2UKLQkJZmlybXdhcmUgPSBmdy0+c3RhX2Z3OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBdHRlbXB0aW5nIHRvIGRvd25sb2FkIGZpcm13YXJlICVzXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKLQotCS8qIFJlYWQgY3VycmVudCBwbHVnIGRhdGEgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDApOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVhZCBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZyZWU7Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF9mdykgewotCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZmlybXdhcmUsIHByaXYtPmRldik7Ci0KLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmUgJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmaXJtd2FyZSk7Ci0JCQllcnIgPSAtRU5PRU5UOwotCQkJZ290byBmcmVlOwotCQl9Ci0JfSBlbHNlCi0JCWZ3X2VudHJ5ID0gcHJpdi0+Y2FjaGVkX2Z3OwotCi0JaGRyID0gKGNvbnN0IHN0cnVjdCBvcmlub2NvX2Z3X2hlYWRlciAqKSBmd19lbnRyeS0+ZGF0YTsKLQotCS8qIEVuYWJsZSBhdXggcG9ydCB0byBhbGxvdyBwcm9ncmFtbWluZyAqLwotCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9pbml0KGh3LCBsZTMyX3RvX2NwdShoZHItPmVudHJ5X3BvaW50KSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIGluaXQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQlpZiAoZXJyICE9IDApCi0JCWdvdG8gYWJvcnQ7Ci0KLQkvKiBQcm9ncmFtIGRhdGEgKi8KLQlmaXJzdF9ibG9jayA9IChmd19lbnRyeS0+ZGF0YSArCi0JCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmhlYWRlcnNpemUpICsKLQkJICAgICAgIGxlMzJfdG9fY3B1KGhkci0+YmxvY2tfb2Zmc2V0KSk7Ci0JZW5kID0gZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZTsKLQotCWVyciA9IGhlcm1lc19wcm9ncmFtKGh3LCBmaXJzdF9ibG9jaywgZW5kKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQlpZiAoZXJyICE9IDApCi0JCWdvdG8gYWJvcnQ7Ci0KLQkvKiBVcGRhdGUgcHJvZHVjdGlvbiBkYXRhICovCi0JZmlyc3RfYmxvY2sgPSAoZndfZW50cnktPmRhdGEgKwotCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5oZWFkZXJzaXplKSArCi0JCSAgICAgICBsZTMyX3RvX2NwdShoZHItPnBkcl9vZmZzZXQpKTsKLQotCWVyciA9IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhodywgZmlyc3RfYmxvY2ssIHBkYSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBcHBseSBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGFib3J0OwotCi0JLyogVGVsbCBjYXJkIHdlJ3ZlIGZpbmlzaGVkICovCi0JZXJyID0gaGVybWVzaV9wcm9ncmFtX2VuZChodyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIGVuZCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIgIT0gMCkKLQkJZ290byBhYm9ydDsKLQotCS8qIENoZWNrIGlmIHdlJ3JlIHJ1bm5pbmcgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhlcm1lc19wcmVzZW50IHJldHVybmVkICVkXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGhlcm1lc19wcmVzZW50KGh3KSk7Ci0KLWFib3J0OgotCS8qIElmIHdlIHJlcXVlc3RlZCB0aGUgZmlybXdhcmUsIHJlbGVhc2UgaXQuICovCi0JaWYgKCFwcml2LT5jYWNoZWRfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCi1mcmVlOgotCWtmcmVlKHBkYSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogRW5kIG1hcmtlcnMgKi8KLSNkZWZpbmUgVEVYVF9FTkQJMHgxQQkJLyogRW5kIG9mIHRleHQgaGVhZGVyICovCi0KLS8qCi0gKiBQcm9jZXNzIGEgZmlybXdhcmUgaW1hZ2UgLSBzdG9wIHRoZSBjYXJkLCBsb2FkIHRoZSBmaXJtd2FyZSwgcmVzZXQKLSAqIHRoZSBjYXJkIGFuZCBtYWtlIHN1cmUgaXQgcmVzcG9uZHMuICBGb3IgdGhlIHNlY29uZGFyeSBmaXJtd2FyZSB0YWtlCi0gKiBjYXJlIG9mIHRoZSBQREEgLSByZWFkIGl0IGFuZCB0aGVuIHdyaXRlIGl0IG9uIHRvcCBvZiB0aGUgZmlybXdhcmUuCi0gKi8KLXN0YXRpYyBpbnQKLXN5bWJvbF9kbF9pbWFnZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncsCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmltYWdlLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCi0JCWludCBzZWNvbmRhcnkpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCByZXQgPSAwOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpmaXJzdF9ibG9jazsKLQotCS8qIFBsdWcgRGF0YSBBcmVhIChQREEpICovCi0JX19sZTE2ICpwZGEgPSBOVUxMOwotCi0JLyogQmluYXJ5IGJsb2NrIGJlZ2lucyBhZnRlciB0aGUgMHgxQSBtYXJrZXIgKi8KLQlwdHIgPSBpbWFnZTsKLQl3aGlsZSAoKnB0cisrICE9IFRFWFRfRU5EKTsKLQlmaXJzdF9ibG9jayA9IHB0cjsKLQotCS8qIFJlYWQgdGhlIFBEQSBmcm9tIEVFUFJPTSAqLwotCWlmIChzZWNvbmRhcnkpIHsKLQkJcGRhID0ga3phbGxvYyhmdy0+cGRhX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBkYSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCXJldCA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsIGZ3LT5wZGFfc2l6ZSwgMSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGZyZWU7Ci0JfQotCi0JLyogU3RvcCB0aGUgZmlybXdhcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHNhZmVseSByZXdyaXR0ZW4gKi8KLQlpZiAocHJpdi0+c3RvcF9mdykgewotCQlyZXQgPSBwcml2LT5zdG9wX2Z3KHByaXYsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBmcmVlOwotCX0KLQotCS8qIFByb2dyYW0gdGhlIGFkYXB0ZXIgd2l0aCBuZXcgZmlybXdhcmUgKi8KLQlyZXQgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7Ci0JaWYgKHJldCkKLQkJZ290byBmcmVlOwotCi0JLyogV3JpdGUgdGhlIFBEQSB0byB0aGUgYWRhcHRlciAqLwotCWlmIChzZWNvbmRhcnkpIHsKLQkJc2l6ZV90IGxlbiA9IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGZpcnN0X2Jsb2NrKTsKLQkJcHRyID0gZmlyc3RfYmxvY2sgKyBsZW47Ci0JCXJldCA9IGhlcm1lc19hcHBseV9wZGEoaHcsIHB0ciwgcGRhKTsKLQkJa2ZyZWUocGRhKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUnVuIHRoZSBmaXJtd2FyZSAqLwotCWlmIChwcml2LT5zdG9wX2Z3KSB7Ci0JCXJldCA9IHByaXYtPnN0b3BfZncocHJpdiwgMCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFJlc2V0IGhlcm1lcyBjaGlwIGFuZCBtYWtlIHN1cmUgaXQgcmVzcG9uZHMgKi8KLQlyZXQgPSBoZXJtZXNfaW5pdChodyk7Ci0KLQkvKiBoZXJtZXNfcmVzZXQoKSBzaG91bGQgcmV0dXJuIDAgd2l0aCB0aGUgc2Vjb25kYXJ5IGZpcm13YXJlICovCi0JaWYgKHNlY29uZGFyeSAmJiByZXQgIT0gMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBBbmQgdGhpcyBzaG91bGQgd29yayB3aXRoIGFueSBmaXJtd2FyZSAqLwotCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiAwOwotCi1mcmVlOgotCWtmcmVlKHBkYSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vKgotICogRG93bmxvYWQgdGhlIGZpcm13YXJlIGludG8gdGhlIGNhcmQsIHRoaXMgYWxzbyBkb2VzIGEgUENNQ0lBIHNvZnQKLSAqIHJlc2V0IG9uIHRoZSBjYXJkLCB0byBtYWtlIHN1cmUgaXQncyBpbiBhIHNhbmUgc3RhdGUuCi0gKi8KLXN0YXRpYyBpbnQKLXN5bWJvbF9kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkgICBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0JaW50IHJldDsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwotCi0JaWYgKCFwcml2LT5jYWNoZWRfcHJpX2Z3KSB7Ci0JCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnByaV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+cHJpX2Z3KTsKLQkJCXJldHVybiAtRU5PRU5UOwotCQl9Ci0JfSBlbHNlCi0JCWZ3X2VudHJ5ID0gcHJpdi0+Y2FjaGVkX3ByaV9mdzsKLQotCS8qIExvYWQgcHJpbWFyeSBmaXJtd2FyZSAqLwotCXJldCA9IHN5bWJvbF9kbF9pbWFnZShwcml2LCBmdywgZndfZW50cnktPmRhdGEsCi0JCQkgICAgICBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplLCAwKTsKLQotCWlmICghcHJpdi0+Y2FjaGVkX3ByaV9mdykKLQkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKCFwcml2LT5jYWNoZWRfZncpIHsKLQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+c3RhX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5zdGFfZncpOwotCQkJcmV0dXJuIC1FTk9FTlQ7Ci0JCX0KLQl9IGVsc2UKLQkJZndfZW50cnkgPSBwcml2LT5jYWNoZWRfZnc7Ci0KLQkvKiBMb2FkIHNlY29uZGFyeSBmaXJtd2FyZSAqLwotCXJldCA9IHN5bWJvbF9kbF9pbWFnZShwcml2LCBmdywgZndfZW50cnktPmRhdGEsCi0JCQkgICAgICBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplLCAxKTsKLQlpZiAoIXByaXYtPmNhY2hlZF9mdykKLQkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTZWNvbmRhcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fZG93bmxvYWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpbnQgZXJyID0gMDsKLQkvKiBSZWxvYWQgZmlybXdhcmUgKi8KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCS8qIGNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogKi8KLQkJZXJyID0gb3Jpbm9jb19kbF9maXJtd2FyZShwcml2LAotCQkJCQkgICZvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLCAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQllcnIgPSBzeW1ib2xfZGxfZmlybXdhcmUocHJpdiwKLQkJCQkJICZvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdKTsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCQlicmVhazsKLQl9Ci0JLyogVE9ETzogaWYgd2UgZmFpbCB3ZSBwcm9iYWJseSBuZWVkIHRvIHJlaW5pdGlhbGlzZQotCSAqIHRoZSBkcml2ZXIgKi8KLQotCXJldHVybiBlcnI7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCi1zdGF0aWMgdm9pZCBvcmlub2NvX2NhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBhcCkKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKLQljb25zdCBjaGFyICpwcmlfZnc7Ci0JY29uc3QgY2hhciAqZnc7Ci0KLQlwcmlfZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLnByaV9mdzsKLQlpZiAoYXApCi0JCWZ3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5hcF9mdzsKLQllbHNlCi0JCWZ3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5zdGFfZnc7Ci0KLQlpZiAocHJpX2Z3KSB7Ci0JCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgcHJpX2Z3LCBwcml2LT5kZXYpID09IDApCi0JCQlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gZndfZW50cnk7Ci0JfQotCi0JaWYgKGZ3KSB7Ci0JCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZncsIHByaXYtPmRldikgPT0gMCkKLQkJCXByaXYtPmNhY2hlZF9mdyA9IGZ3X2VudHJ5OwotCX0KLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb191bmNhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaWYgKHByaXYtPmNhY2hlZF9wcmlfZncpCi0JCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+Y2FjaGVkX3ByaV9mdyk7Ci0JaWYgKHByaXYtPmNhY2hlZF9mdykKLQkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5jYWNoZWRfZncpOwotCi0JcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IE5VTEw7Ci0JcHJpdi0+Y2FjaGVkX2Z3ID0gTlVMTDsKLX0KLSNlbHNlCi0jZGVmaW5lIG9yaW5vY29fY2FjaGVfZncocHJpdiwgYXApCi0jZGVmaW5lIG9yaW5vY29fdW5jYWNoZV9mdyhwcml2KQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERldmljZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBvcmlub2NvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCi0JaWYgKCEgZXJyKQotCQlwcml2LT5vcGVuID0gMTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwotCi0JLyogV2UgbXVzdG4ndCB1c2Ugb3Jpbm9jb19sb2NrKCkgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlCi0JICAgYWJsZSB0byBjbG9zZSB0aGUgaW50ZXJmYWNlIGV2ZW4gaWYgaHdfdW5hdmFpbGFibGUgaXMgc2V0Ci0JICAgKGUuZy4gYXMgd2UncmUgcmVsZWFzZWQgYWZ0ZXIgYSBQQyBDYXJkIHJlbW92YWwpICovCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlwcml2LT5vcGVuID0gMDsKLQotCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7Ci0KLQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpvcmlub2NvX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQotCXJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEgbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZ2V0X3dpcmVsZXNzX3N0YXRzKCkgY2FsbGVkIHdoaWxlIGRldmljZSBub3QgcHJlc2VudFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBOVUxMOyAvKiBGSVhNRTogQ2FuIHdlIGRvIGJldHRlciB0aGFuIHRoaXM/ICovCi0JfQotCi0JLyogSWYgYnVzeSwgcmV0dXJuIHRoZSBvbGQgc3RhdHMuICBSZXR1cm5pbmcgTlVMTCBtYXkgY2F1c2UKLQkgKiB0aGUgaW50ZXJmYWNlIHRvIGRpc2FwcGVhciBmcm9tIC9wcm9jL25ldC93aXJlbGVzcyAqLwotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gd3N0YXRzOwotCi0JLyogV2UgY2FuJ3QgcmVhbGx5IHdhaXQgZm9yIHRoZSB0YWxsaWVzIGlucXVpcnkgY29tbWFuZCB0bwotCSAqIGNvbXBsZXRlLCBzbyB3ZSBqdXN0IHVzZSB0aGUgcHJldmlvdXMgcmVzdWx0cyBhbmQgdHJpZ2dlcgotCSAqIGEgbmV3IHRhbGxpZXMgaW5xdWlyeSBjb21tYW5kIGZvciBuZXh0IHRpbWUgLSBKZWFuIElJICovCi0JLyogRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGlucXVpcnkgdG8gY29tZSBiYWNrIC0KLQkgKiBhcyBpdCBpcyB0aGUgc3RhdHMgd2UgZ2l2ZSBkb24ndCBtYWtlIGEgd2hvbGUgbG90IG9mIHNlbnNlLgotCSAqIFVuZm9ydHVuYXRlbHksIGl0J3Mgbm90IGNsZWFyIGhvdyB0byBkbyB0aGF0IHdpdGhpbiB0aGUKLQkgKiB3aXJlbGVzcyBleHRlbnNpb25zIGZyYW1ld29yazogSSB0aGluayB3ZSdyZSBpbiB1c2VyCi0JICogY29udGV4dCwgYnV0IGEgbG9jayBzZWVtcyB0byBiZSBoZWxkIGJ5IHRoZSB0aW1lIHdlIGdldCBpbgotCSAqIGhlcmUgc28gd2UncmUgbm90IHNhZmUgdG8gc2xlZXAgaGVyZS4gKi8KLQloZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9UQUxMSUVTKTsKLQotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKLQkJbWVtc2V0KCZ3c3RhdHMtPnF1YWwsIDAsIHNpemVvZih3c3RhdHMtPnF1YWwpKTsKLQkJLyogSWYgYSBzcHkgYWRkcmVzcyBpcyBkZWZpbmVkLCB3ZSByZXBvcnQgc3RhdHMgb2YgdGhlCi0JCSAqIGZpcnN0IHNweSBhZGRyZXNzIC0gSmVhbiBJSSAqLwotCQlpZiAoU1BZX05VTUJFUihwcml2KSkgewotCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5xdWFsOwotCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubGV2ZWw7Ci0JCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5ub2lzZTsKLQkJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0udXBkYXRlZDsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgcXVhbCwgc2lnbmFsLCBub2lzZSwgdW51c2VkOwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBjcTsKLQotCQllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkgSEVSTUVTX1JJRF9DT01NU1FVQUxJVFksICZjcSk7Ci0KLQkJaWYgKCFlcnIpIHsKLQkJCXdzdGF0cy0+cXVhbC5xdWFsID0gKGludClsZTE2X3RvX2NwdShjcS5xdWFsKTsKLQkJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IChpbnQpbGUxNl90b19jcHUoY3Euc2lnbmFsKSAtIDB4OTU7Ci0JCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAoaW50KWxlMTZfdG9fY3B1KGNxLm5vaXNlKSAtIDB4OTU7Ci0JCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKLQkJfQotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIHdzdGF0czsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdCgpICIKLQkJICAgICAgICJjYWxsZWQgd2hlbiBod191bmF2YWlsYWJsZVxuIiwgZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICggKG5ld19tdHUgPCBPUklOT0NPX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gT1JJTk9DT19NQVhfTVRVKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTVRVICsgZW5jYXBzdWxhdGlvbiArIGhlYWRlciBsZW5ndGggKi8KLQlpZiAoIChuZXdfbXR1ICsgRU5DQVBTX09WRVJIRUFEICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyKSkgPgotCSAgICAgKHByaXYtPm5pY2J1Zl9zaXplIC0gRVRIX0hMRU4pICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVHggcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IG9yaW5vY29feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IHR4ZmlkID0gcHJpdi0+dHhmaWQ7Ci0Jc3RydWN0IGV0aGhkciAqZWg7Ci0JaW50IHR4X2NvbnRyb2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghIG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUeCBvbiBzdG9wcGVkIGRldmljZSFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCQotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUeCB3aGlsZSB0cmFuc21pdHRlciBidXN5IVxuIiwgCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29feG1pdCgpIGNhbGxlZCB3aGlsZSBod191bmF2YWlsYWJsZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0KLQlpZiAoISBuZXRpZl9jYXJyaWVyX29rKGRldikgfHwgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSkgewotCQkvKiBPb3BzLCB0aGUgZmlybXdhcmUgaGFzbid0IGVzdGFibGlzaGVkIGEgY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICBzaWxlbnRseSBkcm9wIHRoZSBwYWNrZXQgKHRoaXMgc2VlbXMgdG8gYmUgdGhlCi0gICAgICAgICAgICAgICAgICAgc2FmZXN0IGFwcHJvYWNoKS4gKi8KLQkJZ290byBkcm9wOwotCX0KLQotCS8qIENoZWNrIHBhY2tldCBsZW5ndGggKi8KLQlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikKLQkJZ290byBkcm9wOwotCi0JdHhfY29udHJvbCA9IEhFUk1FU19UWENUUkxfVFhfT0sgfCBIRVJNRVNfVFhDVFJMX1RYX0VYOwotCi0JaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKQotCQl0eF9jb250cm9sIHw9IChwcml2LT50eF9rZXkgPDwgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpIHwKLQkJCUhFUk1FU19UWENUUkxfTUlDOwotCi0JaWYgKHByaXYtPmhhc19hbHRfdHhjbnRsKSB7Ci0JCS8qIFdQQSBlbmFibGVkIGZpcm13YXJlcyBoYXZlIHR4X2NudGwgYXQgdGhlIGVuZCBvZgotCQkgKiB0aGUgODAyLjExIGhlYWRlci4gIFNvIHdyaXRlIHplcm9lZCBkZXNjcmlwdG9yIGFuZAotCQkgKiA4MDIuMTEgaGVhZGVyIGF0IHRoZSBzYW1lIHRpbWUKLQkJICovCi0JCWNoYXIgZGVzY1tIRVJNRVNfODAyXzNfT0ZGU0VUXTsKLQkJX19sZTE2ICp0eGNudGwgPSAoX19sZTE2ICopICZkZXNjW0hFUk1FU19UWENOVEwyX09GRlNFVF07Ci0KLQkJbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOwotCi0JCSp0eGNudGwgPSBjcHVfdG9fbGUxNih0eF9jb250cm9sKTsKLQkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAotCQkJCQl0eGZpZCwgMCk7Ci0JCWlmIChlcnIpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCAiCi0JCQkJICAgICAgICJkZXNjcmlwdG9yIHRvIEJBUFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBidXN5OwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7Ci0KLQkJbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOwotCi0JCWRlc2MudHhfY29udHJvbCA9IGNwdV90b19sZTE2KHR4X2NvbnRyb2wpOwotCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZkZXNjLCBzaXplb2YoZGVzYyksCi0JCQkJCXR4ZmlkLCAwKTsKLQkJaWYgKGVycikgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIFR4ICIKLQkJCQkgICAgICAgImRlc2NyaXB0b3IgdG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCQlnb3RvIGJ1c3k7Ci0JCX0KLQotCQkvKiBDbGVhciB0aGUgODAyLjExIGhlYWRlciBhbmQgZGF0YSBsZW5ndGggZmllbGRzIC0gc29tZQotCQkgKiBmaXJtd2FyZXMgKGUuZy4gTHVjZW50L0FnZXJlIDgueHgpIGFwcGVhciB0byBnZXQgY29uZnVzZWQKLQkJICogaWYgdGhpcyBpc24ndCBkb25lLiAqLwotCQloZXJtZXNfY2xlYXJfd29yZHMoaHcsIEhFUk1FU19EQVRBMCwKLQkJCQkgICBIRVJNRVNfODAyXzNfT0ZGU0VUIC0gSEVSTUVTXzgwMl8xMV9PRkZTRVQpOwotCX0KLQotCWVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7Ci0KLQkvKiBFbmNhcHN1bGF0ZSBFdGhlcm5ldC1JSSBmcmFtZXMgKi8KLQlpZiAobnRvaHMoZWgtPmhfcHJvdG8pID4gRVRIX0RBVEFfTEVOKSB7IC8qIEV0aGVybmV0LUlJIGZyYW1lICovCi0JCXN0cnVjdCBoZWFkZXJfc3RydWN0IHsKLQkJCXN0cnVjdCBldGhoZHIgZXRoOwkvKiA4MDIuMyBoZWFkZXIgKi8KLQkJCXU4IGVuY2FwWzZdOwkJLyogODAyLjIgaGVhZGVyICovCi0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhkcjsKLQotCQkvKiBTdHJpcCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIGZyb20gdGhlIGRhdGEgKi8KLQkJc2tiX3B1bGwoc2tiLCAyICogRVRIX0FMRU4pOwotCi0JCS8qIEFuZCBtb3ZlIHRoZW0gdG8gYSBzZXBhcmF0ZSBoZWFkZXIgKi8KLQkJbWVtY3B5KCZoZHIuZXRoLCBlaCwgMiAqIEVUSF9BTEVOKTsKLQkJaGRyLmV0aC5oX3Byb3RvID0gaHRvbnMoc2l6ZW9mKGVuY2Fwc19oZHIpICsgc2tiLT5sZW4pOwotCQltZW1jcHkoaGRyLmVuY2FwLCBlbmNhcHNfaGRyLCBzaXplb2YoZW5jYXBzX2hkcikpOwotCi0JCS8qIEluc2VydCB0aGUgU05BUCBoZWFkZXIgKi8KLQkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKGhkcikpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogTm90IGVub3VnaCBoZWFkcm9vbSBmb3IgODAyLjIgaGVhZGVycyAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHNrYl9oZWFkcm9vbShza2IpKTsKLQkJCWdvdG8gZHJvcDsKLQkJfQotCQllaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKGhkcikpOwotCQltZW1jcHkoZWgsICZoZHIsIHNpemVvZihoZHIpKTsKLQl9Ci0KLQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBwYWNrZXQgdG8gQkFQXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIGJ1c3k7Ci0JfQotCi0JLyogQ2FsY3VsYXRlIE1pY2hhZWwgTUlDICovCi0JaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB7Ci0JCXU4IG1pY19idWZbTUlDSEFFTF9NSUNfTEVOICsgMV07Ci0JCXU4ICptaWM7Ci0JCXNpemVfdCBvZmZzZXQ7Ci0JCXNpemVfdCBsZW47Ci0KLQkJaWYgKHNrYi0+bGVuICUgMikgewotCQkJLyogTUlDIHN0YXJ0IGlzIG9uIGFuIG9kZCBib3VuZGFyeSAqLwotCQkJbWljX2J1ZlswXSA9IHNrYi0+ZGF0YVtza2ItPmxlbiAtIDFdOwotCQkJbWljID0gJm1pY19idWZbMV07Ci0JCQlvZmZzZXQgPSBza2ItPmxlbiAtIDE7Ci0JCQlsZW4gPSBNSUNIQUVMX01JQ19MRU4gKyAxOwotCQl9IGVsc2UgewotCQkJbWljID0gJm1pY19idWZbMF07Ci0JCQlvZmZzZXQgPSBza2ItPmxlbjsKLQkJCWxlbiA9IE1JQ0hBRUxfTUlDX0xFTjsKLQkJfQotCi0JCW1pY2hhZWxfbWljKHByaXYtPnR4X3RmbV9taWMsCi0JCQkgICAgcHJpdi0+dGtpcF9rZXlbcHJpdi0+dHhfa2V5XS50eF9taWMsCi0JCQkgICAgZWgtPmhfZGVzdCwgZWgtPmhfc291cmNlLCAwIC8qIHByaW9yaXR5ICovLAotCQkJICAgIHNrYi0+ZGF0YSArIEVUSF9ITEVOLCBza2ItPmxlbiAtIEVUSF9ITEVOLCBtaWMpOwotCi0JCS8qIFdyaXRlIHRoZSBNSUMgKi8KLQkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmbWljX2J1ZlswXSwgbGVuLAotCQkJCQl0eGZpZCwgSEVSTUVTXzgwMl8zX09GRlNFVCArIG9mZnNldCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgTUlDIHRvIEJBUFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlnb3RvIGJ1c3k7Ci0JCX0KLQl9Ci0KLQkvKiBGaW5hbGx5LCB3ZSBhY3R1YWxseSBpbml0aWF0ZSB0aGUgc2VuZCAqLwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RYIHwgSEVSTUVTX0NNRF9SRUNMLAotCQkJCXR4ZmlkLCBOVUxMKTsKLQlpZiAoZXJyKSB7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB0cmFuc21pdHRpbmcgcGFja2V0XG4iLAotCQkJCWRldi0+bmFtZSwgZXJyKTsKLQkJZ290byBidXN5OwotCX0KLQotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXN0YXRzLT50eF9ieXRlcyArPSBIRVJNRVNfODAyXzNfT0ZGU0VUICsgc2tiLT5sZW47Ci0JZ290byBvazsKLQotIGRyb3A6Ci0Jc3RhdHMtPnR4X2Vycm9ycysrOwotCXN0YXRzLT50eF9kcm9wcGVkKys7Ci0KLSBvazoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gTkVUREVWX1RYX09LOwotCi0gYnVzeToKLQlpZiAoZXJyID09IC1FSU8pCi0JCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCk7Ci0KLQlpZiAoZmlkICE9IHByaXYtPnR4ZmlkKSB7Ci0JCWlmIChmaWQgIT0gRFVNTVlfRklEKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEFsbG9jYXRlIGV2ZW50IG9uIHVuZXhwZWN0ZWQgZmlkICglMDRYKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZpZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQloZXJtZXNfd3JpdGVfcmVnbihodywgQUxMT0NGSUQsIERVTU1ZX0ZJRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCi0Jc3RhdHMtPnR4X3BhY2tldHMrKzsKLQotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQotCWhlcm1lc193cml0ZV9yZWduKGh3LCBUWENPTVBMRklELCBEVU1NWV9GSUQpOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHhleGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgVFhDT01QTEZJRCk7Ci0JdTE2IHN0YXR1czsKLQlzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEgaGRyOwotCWludCBlcnIgPSAwOwotCi0JaWYgKGZpZCA9PSBEVU1NWV9GSUQpCi0JCXJldHVybjsgLyogTm90aGluZydzIHJlYWxseSBoYXBwZW5lZCAqLwotCi0JLyogUmVhZCBwYXJ0IG9mIHRoZSBmcmFtZSBoZWFkZXIgLSB3ZSBuZWVkIHN0YXR1cyBhbmQgYWRkcjEgKi8KLQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmaGRyLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEpLAotCQkJICAgICAgIGZpZCwgMCk7Ci0KLQloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKLQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0KLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVhZCBkZXNjcmlwdG9yIG9uIFR4IGVycm9yICIKLQkJICAgICAgICIoRklEPSUwNFggZXJyb3IgJWQpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBmaWQsIGVycik7Ci0JCXJldHVybjsKLQl9Ci0JCi0JREVCVUcoMSwgIiVzOiBUeCBlcnJvciwgZXJyICVkIChGSUQ9JTA0WClcbiIsIGRldi0+bmFtZSwKLQkgICAgICBlcnIsIGZpZCk7Ci0gICAgCi0JLyogV2UgcHJvZHVjZSBhIFRYRFJPUCBldmVudCBvbmx5IGZvciByZXRyeSBvciBsaWZldGltZQotCSAqIGV4Y2VlZGVkLCBiZWNhdXNlIHRoYXQncyB0aGUgb25seSBzdGF0dXMgdGhhdCByZWFsbHkgbWVhbgotCSAqIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIG5vZGUgd2VudCBhd2F5LgotCSAqIE90aGVyIGVycm9ycyBtZWFucyB0aGF0ICp3ZSogc2NyZXdlZCB1cC4gLSBKZWFuIElJICovCi0Jc3RhdHVzID0gbGUxNl90b19jcHUoaGRyLmRlc2Muc3RhdHVzKTsKLQlpZiAoc3RhdHVzICYgKEhFUk1FU19UWFNUQVRfUkVUUllFUlIgfCBIRVJNRVNfVFhTVEFUX0FHRURFUlIpKSB7Ci0JCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQotCQkvKiBDb3B5IDgwMi4xMSBkZXN0IGFkZHJlc3MuCi0JCSAqIFdlIHVzZSB0aGUgODAyLjExIGhlYWRlciBiZWNhdXNlIHRoZSBmcmFtZSBtYXkKLQkJICogbm90IGJlIDgwMi4zIG9yIG1heSBiZSBtYW5nbGVkLi4uCi0JCSAqIEluIEFkLUhvYyBtb2RlLCBpdCB3aWxsIGJlIHRoZSBub2RlIGFkZHJlc3MuCi0JCSAqIEluIG1hbmFnZWQgbW9kZSwgaXQgd2lsbCBiZSBtb3N0IGxpa2VseSB0aGUgQVAgYWRkcgotCQkgKiBVc2VyIHNwYWNlIHdpbGwgZmlndXJlIG91dCBob3cgdG8gY29udmVydCBpdCB0bwotCQkgKiB3aGF0ZXZlciBpdCBuZWVkcyAoSVAgYWRkcmVzcyBvciBlbHNlKS4KLQkJICogLSBKZWFuIElJICovCi0JCW1lbWNweSh3cnF1LmFkZHIuc2FfZGF0YSwgaGRyLmFkZHIxLCBFVEhfQUxFTik7Ci0JCXdycXUuYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0KLQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCi0JCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWVFhEUk9QLCAmd3JxdSwgTlVMTCk7Ci0JfQotCi0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHggdGltZW91dCEgIgotCSAgICAgICAiQUxMT0NGSUQ9JTA0eCwgVFhDT01QTEZJRD0lMDR4LCBFVlNUQVQ9JTA0eFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCksCi0JICAgICAgIGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpLCBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpKTsKLQotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQotCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBSeCBwYXRoIChkYXRhIGZyYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIERvZXMgdGhlIGZyYW1lIGhhdmUgYSBTTkFQIGhlYWRlciBpbmRpY2F0aW5nIGl0IHNob3VsZCBiZQotICogZGUtZW5jYXBzdWxhdGVkIHRvIEV0aGVybmV0LUlJPyAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfZXRoZXJzbmFwKHZvaWQgKl9oZHIpCi17Ci0JdTggKmhkciA9IF9oZHI7Ci0KLQkvKiBXZSBkZS1lbmNhcHN1bGF0ZSBhbGwgcGFja2V0cyB3aGljaCwgYSkgaGF2ZSBTTkFQIGhlYWRlcnMKLQkgKiAoaS5lLiBTU0FQPURTQVA9MHhhYSBhbmQgQ1RSTD0weDMgaW4gdGhlIDgwMi4yIExMQyBoZWFkZXIKLQkgKiBhbmQgd2hlcmUgYikgdGhlIE9VSSBvZiB0aGUgU05BUCBoZWFkZXIgaXMgMDA6MDA6MDAgb3IKLQkgKiAwMDowMDpmOCAtIHdlIG5lZWQgYm90aCBiZWNhdXNlIGRpZmZlcmVudCBBUHMgYXBwZWFyIHRvIHVzZQotCSAqIGRpZmZlcmVudCBPVUlzIGZvciBzb21lIHJlYXNvbiAqLwotCXJldHVybiAobWVtY21wKGhkciwgJmVuY2Fwc19oZHIsIDUpID09IDApCi0JCSYmICggKGhkcls1XSA9PSAweDAwKSB8fCAoaGRyWzVdID09IDB4ZjgpICk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcmlub2NvX3NweV9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyICptYWMsCi0JCQkJICAgICAgaW50IGxldmVsLCBpbnQgbm9pc2UpCi17Ci0Jc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOwotCXdzdGF0cy5sZXZlbCA9IGxldmVsIC0gMHg5NTsKLQl3c3RhdHMubm9pc2UgPSBub2lzZSAtIDB4OTU7Ci0Jd3N0YXRzLnF1YWwgPSAobGV2ZWwgPiBub2lzZSkgPyAobGV2ZWwgLSBub2lzZSkgOiAwOwotCXdzdGF0cy51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwotCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwotCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBtYWMsICZ3c3RhdHMpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3N0YXRfZ2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiBVc2luZyBzcHkgc3VwcG9ydCB3aXRoIGxvdHMgb2YgUnggcGFja2V0cywgbGlrZSBpbiBhbgotCSAqIGluZnJhc3RydWN0dXJlIChBUCksIHdpbGwgcmVhbGx5IHNsb3cgZG93biBldmVyeXRoaW5nLCBiZWNhdXNlCi0JICogdGhlIE1BQyBhZGRyZXNzIG11c3QgYmUgY29tcGFyZWQgdG8gZWFjaCBlbnRyeSBvZiB0aGUgc3B5IGxpc3QuCi0JICogSWYgdGhlIHVzZXIgcmVhbGx5IGFza3MgZm9yIGl0IChzZXQgc29tZSBhZGRyZXNzIGluIHRoZQotCSAqIHNweSBsaXN0KSwgd2UgZG8gaXQsIGJ1dCBoZSB3aWxsIHBheSB0aGUgcHJpY2UuCi0JICogTm90ZSB0aGF0IHRvIGdldCBoZXJlLCB5b3UgbmVlZCBib3RoIFdJUkVMRVNTX1NQWQotCSAqIGNvbXBpbGVkIGluIEFORCBzb21lIGFkZHJlc3NlcyBpbiB0aGUgbGlzdCAhISEKLQkgKi8KLQkvKiBOb3RlIDogZ2NjIHdpbGwgb3B0aW1pc2UgdGhlIHdob2xlIHNlY3Rpb24gYXdheSBpZgotCSAqIFdJUkVMRVNTX1NQWSBpcyBub3QgZGVmaW5lZC4uLiAtIEplYW4gSUkgKi8KLQlpZiAoU1BZX05VTUJFUihwcml2KSkgewotCQlvcmlub2NvX3NweV9nYXRoZXIoZGV2LCBza2JfbWFjX2hlYWRlcihza2IpICsgRVRIX0FMRU4sCi0JCQkJICAgZGVzYy0+c2lnbmFsLCBkZXNjLT5zaWxlbmNlKTsKLQl9Ci19Ci0KLS8qCi0gKiBvcmlub2NvX3J4X21vbml0b3IgLSBoYW5kbGUgcmVjZWl2ZWQgbW9uaXRvciBmcmFtZXMuCi0gKgotICogQXJndW1lbnRzOgotICoJZGV2CQluZXR3b3JrIGRldmljZQotICoJcnhmaWQJCXJlY2VpdmVkIEZJRAotICoJZGVzYwkJcnggZGVzY3JpcHRvciBvZiB0aGUgZnJhbWUKLSAqCi0gKiBDYWxsIGNvbnRleHQ6IGludGVycnVwdAotICovCi1zdGF0aWMgdm9pZCBvcmlub2NvX3J4X21vbml0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJ4ZmlkLAotCQkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYykKLXsKLQl1MzIgaGRybGVuID0gMzA7CS8qIHJldHVybiBmdWxsIGhlYWRlciBieSBkZWZhdWx0ICovCi0JdTMyIGRhdGFsZW4gPSAwOwotCXUxNiBmYzsKLQlpbnQgZXJyOwotCWludCBsZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCi0JbGVuID0gbGUxNl90b19jcHUoZGVzYy0+ZGF0YV9sZW4pOwotCi0JLyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgYW5kIHRoZSBkYXRhICovCi0JZmMgPSBsZTE2X3RvX2NwdShkZXNjLT5mcmFtZV9jdGwpOwotCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgewotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKQotCQkgICAgJiYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkKLQkJCWhkcmxlbiA9IDMwOwotCQllbHNlCi0JCQloZHJsZW4gPSAyNDsKLQkJZGF0YWxlbiA9IGxlbjsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJaGRybGVuID0gMjQ7Ci0JCWRhdGFsZW4gPSBsZW47Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUlRTOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DRkVORDoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0s6Ci0JCQloZHJsZW4gPSAxNjsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DVFM6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDSzoKLQkJCWhkcmxlbiA9IDEwOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogVW5rbm93biBmcmFtZSB0eXBlICovCi0JCWJyZWFrOwotCX0KLQotCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCi0JaWYgKGRhdGFsZW4gPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOICsgMTIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvdmVyc2l6ZWQgbW9uaXRvciBmcmFtZSwgIgotCQkgICAgICAgImRhdGEgbGVuZ3RoID0gJWRcbiIsIGRldi0+bmFtZSwgZGF0YWxlbik7Ci0JCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCXNrYiA9IGRldl9hbGxvY19za2IoaGRybGVuICsgZGF0YWxlbik7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbm5vdCBhbGxvY2F0ZSBza2IgZm9yIG1vbml0b3IgZnJhbWVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKi8KLQltZW1jcHkoc2tiX3B1dChza2IsIGhkcmxlbiksICYoZGVzYy0+ZnJhbWVfY3RsKSwgaGRybGVuKTsKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCi0JLyogSWYgYW55LCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHNrYiAqLwotCWlmIChkYXRhbGVuID4gMCkgewotCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBza2JfcHV0KHNrYiwgZGF0YWxlbiksCi0JCQkJICAgICAgIEFMSUdOKGRhdGFsZW4sIDIpLCByeGZpZCwKLQkJCQkgICAgICAgSEVSTUVTXzgwMl8yX09GRlNFVCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgbW9uaXRvciBmcmFtZVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlnb3RvIGRyb3A7Ci0JCX0KLQl9Ci0KLQlza2ItPmRldiA9IGRldjsKLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0Jc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzIpOwotCQotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JbmV0aWZfcngoc2tiKTsKLQlyZXR1cm47Ci0KLSBkcm9wOgotCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gdXBkYXRlX3N0YXRzOgotCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOwotfQotCi0vKiBHZXQgdHNjIGZyb20gdGhlIGZpcm13YXJlICovCi1zdGF0aWMgaW50IG9yaW5vY29faHdfZ2V0X3RraXBfaXYoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleSwKLQkJCQkgIHU4ICp0c2MpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXU4IHRzY19hcnJbNF1bSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Ci0KLQlpZiAoKGtleSA8IDApIHx8IChrZXkgPiA0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfVEtJUF9JViwKLQkJCSAgICAgIHNpemVvZih0c2NfYXJyKSwgTlVMTCwgJnRzY19hcnIpOwotCWlmICghZXJyKQotCQltZW1jcHkodHNjLCAmdHNjX2FycltrZXldWzBdLCBzaXplb2YodHNjX2FyclswXSkpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JdTE2IHJ4ZmlkLCBzdGF0dXM7Ci0JaW50IGxlbmd0aDsKLQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7Ci0Jc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YTsKLQlpbnQgZXJyOwotCi0JZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpkZXNjKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFkZXNjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICIlczogQ2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIFJYIGRlc2NyaXB0b3JcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQlyeGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFJYRklEKTsKLQotCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIGRlc2MsIHNpemVvZigqZGVzYyksCi0JCQkgICAgICAgcnhmaWQsIDApOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBSeCBkZXNjcmlwdG9yLiAiCi0JCSAgICAgICAiRnJhbWUgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0Jc3RhdHVzID0gbGUxNl90b19jcHUoZGVzYy0+c3RhdHVzKTsKLQotCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX0JBRENSQykgewotCQlERUJVRygxLCAiJXM6IEJhZCBDUkMgb24gUnguIEZyYW1lIGRyb3BwZWQuXG4iLAotCQkgICAgICBkZXYtPm5hbWUpOwotCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQkvKiBIYW5kbGUgZnJhbWVzIGluIG1vbml0b3IgbW9kZSAqLwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQlvcmlub2NvX3J4X21vbml0b3IoZGV2LCByeGZpZCwgZGVzYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX1VOREVDUllQVEFCTEUpIHsKLQkJREVCVUcoMSwgIiVzOiBVbmRlY3J5cHRhYmxlIGZyYW1lIG9uIFJ4LiBGcmFtZSBkcm9wcGVkLlxuIiwKLQkJICAgICAgZGV2LT5uYW1lKTsKLQkJd3N0YXRzLT5kaXNjYXJkLmNvZGUrKzsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0JbGVuZ3RoID0gbGUxNl90b19jcHUoZGVzYy0+ZGF0YV9sZW4pOwotCi0JLyogU2FuaXR5IGNoZWNrcyAqLwotCWlmIChsZW5ndGggPCAzKSB7IC8qIE5vIGZvciBldmVuIGFuIDgwMi4yIExMQyBoZWFkZXIgKi8KLQkJLyogQXQgbGVhc3Qgb24gU3ltYm9sIGZpcm13YXJlIHdpdGggUENGIHdlIGdldCBxdWl0ZSBhCi0gICAgICAgICAgICAgICAgICAgbG90IG9mIHRoZXNlIGxlZ2l0aW1hdGVseSAtIFBvbGwgZnJhbWVzIHdpdGggbm8KLSAgICAgICAgICAgICAgICAgICBkYXRhLiAqLwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGxlbmd0aCA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE92ZXJzaXplZCBmcmFtZSByZWNlaXZlZCAoJWQgYnl0ZXMpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBsZW5ndGgpOwotCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQkvKiBQYXlsb2FkIHNpemUgZG9lcyBub3QgaW5jbHVkZSBNaWNoYWVsIE1JQy4gSW5jcmVhc2UgcGF5bG9hZAotCSAqIHNpemUgdG8gcmVhZCBpdCB0b2dldGhlciB3aXRoIHRoZSBkYXRhLiAqLwotCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykKLQkJbGVuZ3RoICs9IE1JQ0hBRUxfTUlDX0xFTjsKLQotCS8qIFdlIG5lZWQgc3BhY2UgZm9yIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYsIHBsdXMgYW4gZXRoZXJuZXQKLQkgICBoZWFkZXIsIHBsdXMgMiBieXRlcyBzbyB3ZSBjYW4gYWxpZ24gdGhlIElQIGhlYWRlciBvbiBhCi0JICAgMzJiaXQgYm91bmRhcnksIHBsdXMgMSBieXRlIHNvIHdlIGNhbiByZWFkIGluIG9kZCBsZW5ndGgKLQkgICBwYWNrZXRzIGZyb20gdGhlIGNhcmQsIHdoaWNoIGhhcyBhbiBJTyBncmFudWxhcml0eSBvZiAxNgotCSAgIGJpdHMgKi8gIAotCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoK0VUSF9ITEVOKzIrMSk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jYXRlIHNrYiBmb3IgUnhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQkvKiBXZSdsbCBwcmVwZW5kIHRoZSBoZWFkZXIsIHNvIHJlc2VydmUgc3BhY2UgZm9yIGl0LiAgVGhlIHdvcnN0Ci0JICAgY2FzZSBpcyBubyBkZWNhcHN1bGF0aW9uLCB3aGVuIDgwMi4zIGhlYWRlciBpcyBwcmVwZW5kZWQgYW5kCi0JICAgbm90aGluZyBpcyByZW1vdmVkLiAgMiBpcyBmb3IgYWxpZ25pbmcgdGhlIElQIGhlYWRlci4gICovCi0Jc2tiX3Jlc2VydmUoc2tiLCBFVEhfSExFTiArIDIpOwotCi0JZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgc2tiX3B1dChza2IsIGxlbmd0aCksCi0JCQkgICAgICAgQUxJR04obGVuZ3RoLCAyKSwgcnhmaWQsCi0JCQkgICAgICAgSEVSTUVTXzgwMl8yX09GRlNFVCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIGZyYW1lLiAiCi0JCSAgICAgICAiRnJhbWUgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJZ290byBkcm9wOwotCX0KLQotCS8qIEFkZCBkZXNjIGFuZCBza2IgdG8gcnggcXVldWUgKi8KLQlyeF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnJ4X2RhdGEpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXJ4X2RhdGEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jYXRlIFJYIHBhY2tldFxuIiwKLQkJCWRldi0+bmFtZSk7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0JcnhfZGF0YS0+ZGVzYyA9IGRlc2M7Ci0JcnhfZGF0YS0+c2tiID0gc2tiOwotCWxpc3RfYWRkX3RhaWwoJnJ4X2RhdGEtPmxpc3QsICZwcml2LT5yeF9saXN0KTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5yeF90YXNrbGV0KTsKLQotCXJldHVybjsKLQotZHJvcDoKLQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotdXBkYXRlX3N0YXRzOgotCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOwotb3V0OgotCWtmcmVlKGRlc2MpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgICBzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MsCi0JCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQl1MTYgc3RhdHVzLCBmYzsKLQlpbnQgbGVuZ3RoOwotCXN0cnVjdCBldGhoZHIgKmhkcjsKLQotCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGRlc2MtPnN0YXR1cyk7Ci0JbGVuZ3RoID0gbGUxNl90b19jcHUoZGVzYy0+ZGF0YV9sZW4pOwotCWZjID0gbGUxNl90b19jcHUoZGVzYy0+ZnJhbWVfY3RsKTsKLQotCS8qIENhbGN1bGF0ZSBhbmQgY2hlY2sgTUlDICovCi0JaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTUlDKSB7Ci0JCWludCBrZXlfaWQgPSAoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTUlDX0tFWV9JRCkgPj4KLQkJCSAgICAgIEhFUk1FU19NSUNfS0VZX0lEX1NISUZUKTsKLQkJdTggbWljW01JQ0hBRUxfTUlDX0xFTl07Ci0JCXU4ICpyeG1pYzsKLQkJdTggKnNyYyA9IChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgPwotCQkJZGVzYy0+YWRkcjMgOiBkZXNjLT5hZGRyMjsKLQotCQkvKiBFeHRyYWN0IE1pY2hhZWwgTUlDIGZyb20gcGF5bG9hZCAqLwotCQlyeG1pYyA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gTUlDSEFFTF9NSUNfTEVOOwotCi0JCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU4pOwotCQlsZW5ndGggLT0gTUlDSEFFTF9NSUNfTEVOOwotCi0JCW1pY2hhZWxfbWljKHByaXYtPnJ4X3RmbV9taWMsCi0JCQkgICAgcHJpdi0+dGtpcF9rZXlba2V5X2lkXS5yeF9taWMsCi0JCQkgICAgZGVzYy0+YWRkcjEsCi0JCQkgICAgc3JjLAotCQkJICAgIDAsIC8qIHByaW9yaXR5IG9yIFFvUz8gKi8KLQkJCSAgICBza2ItPmRhdGEsCi0JCQkgICAgc2tiLT5sZW4sCi0JCQkgICAgJm1pY1swXSk7Ci0KLQkJaWYgKG1lbWNtcChtaWMsIHJ4bWljLAotCQkJICAgTUlDSEFFTF9NSUNfTEVOKSkgewotCQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCQkJc3RydWN0IGl3X21pY2hhZWxtaWNmYWlsdXJlIHd4bWljOwotCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIgotCQkJICAgICAgICJJbnZhbGlkIE1pY2hhZWwgTUlDIGluIGRhdGEgZnJhbWUgZnJvbSAlcE0sICIKLQkJCSAgICAgICAidXNpbmcga2V5ICVpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgc3JjLCBrZXlfaWQpOwotCi0JCQkvKiBUT0RPOiB1cGRhdGUgc3RhdHMgKi8KLQotCQkJLyogTm90aWZ5IHVzZXJzcGFjZSAqLwotCQkJbWVtc2V0KCZ3eG1pYywgMCwgc2l6ZW9mKHd4bWljKSk7Ci0JCQl3eG1pYy5mbGFncyA9IGtleV9pZCAmIElXX01JQ0ZBSUxVUkVfS0VZX0lEOwotCQkJd3htaWMuZmxhZ3MgfD0gKGRlc2MtPmFkZHIxWzBdICYgMSkgPwotCQkJCUlXX01JQ0ZBSUxVUkVfR1JPVVAgOiBJV19NSUNGQUlMVVJFX1BBSVJXSVNFOwotCQkJd3htaWMuc3JjX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJbWVtY3B5KHd4bWljLnNyY19hZGRyLnNhX2RhdGEsIHNyYywgRVRIX0FMRU4pOwotCi0JCQkodm9pZCkgb3Jpbm9jb19od19nZXRfdGtpcF9pdihwcml2LCBrZXlfaWQsCi0JCQkJCQkgICAgICAmd3htaWMudHNjWzBdKTsKLQotCQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHNpemVvZih3eG1pYyk7Ci0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVk1JQ0hBRUxNSUNGQUlMVVJFLCAmd3JxdSwKLQkJCQkJICAgIChjaGFyICopICZ3eG1pYyk7Ci0KLQkJCWdvdG8gZHJvcDsKLQkJfQotCX0KLQotCS8qIEhhbmRsZSBkZWNhcHN1bGF0aW9uCi0JICogSW4gbW9zdCBjYXNlcywgdGhlIGZpcm13YXJlIHRlbGwgdXMgYWJvdXQgU05BUCBmcmFtZXMuCi0JICogRm9yIHNvbWUgcmVhc29uLCB0aGUgU05BUCBmcmFtZXMgc2VudCBieSBMaW5rU3lzIEFQcwotCSAqIGFyZSBub3QgcHJvcGVybHkgcmVjb2duaXNlZCBieSBtb3N0IGZpcm13YXJlcy4KLQkgKiBTbywgY2hlY2sgb3Vyc2VsdmVzICovCi0JaWYgKGxlbmd0aCA+PSBFTkNBUFNfT1ZFUkhFQUQgJiYKLQkgICAgKCgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NU0dUWVBFKSA9PSBIRVJNRVNfUlhTVEFUXzEwNDIpIHx8Ci0JICAgICAoKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTVNHVFlQRSkgPT0gSEVSTUVTX1JYU1RBVF9UVU5ORUwpIHx8Ci0JICAgICBpc19ldGhlcnNuYXAoc2tiLT5kYXRhKSkpIHsKLQkJLyogVGhlc2UgaW5kaWNhdGUgYSBTTkFQIHdpdGhpbiA4MDIuMiBMTEMgd2l0aGluCi0JCSAgIDgwMi4xMSBmcmFtZSB3aGljaCB3ZSdsbCBuZWVkIHRvIGRlLWVuY2Fwc3VsYXRlIHRvCi0JCSAgIHRoZSBvcmlnaW5hbCBFdGhlcm5ldElJIGZyYW1lLiAqLwotCQloZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4gLSBFTkNBUFNfT1ZFUkhFQUQpOwotCX0gZWxzZSB7Ci0JCS8qIDgwMi4zIGZyYW1lIC0gcHJlcGVuZCA4MDIuMyBoZWFkZXIgYXMgaXMgKi8KLQkJaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKLQkJaGRyLT5oX3Byb3RvID0gaHRvbnMobGVuZ3RoKTsKLQl9Ci0JbWVtY3B5KGhkci0+aF9kZXN0LCBkZXNjLT5hZGRyMSwgRVRIX0FMRU4pOwotCWlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykKLQkJbWVtY3B5KGhkci0+aF9zb3VyY2UsIGRlc2MtPmFkZHIzLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkoaGRyLT5oX3NvdXJjZSwgZGVzYy0+YWRkcjIsIEVUSF9BTEVOKTsKLQotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0Jc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCWlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpCi0JCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCQotCS8qIFByb2Nlc3MgdGhlIHdpcmVsZXNzIHN0YXRzIGlmIG5lZWRlZCAqLwotCW9yaW5vY29fc3RhdF9nYXRoZXIoZGV2LCBza2IsIGRlc2MpOwotCi0JLyogUGFzcyB0aGUgcGFja2V0IHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrICovCi0JbmV0aWZfcngoc2tiKTsKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7Ci0KLQlyZXR1cm47Ci0KLSBkcm9wOgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19yeF9pc3JfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGEsICp0ZW1wOwotCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBvcmlub2NvX3J4IHJlcXVpcmVzIHRoZSBkcml2ZXIgbG9jaywgYW5kIHdlIGFsc28gbmVlZCB0bwotCSAqIHByb3RlY3QgcHJpdi0+cnhfbGlzdCwgc28ganVzdCBob2xkIHRoZSBsb2NrIG92ZXIgdGhlCi0JICogbG90LgotCSAqCi0JICogSWYgb3Jpbm9jb19sb2NrIGZhaWxzLCB3ZSd2ZSB1bnBsdWdnZWQgdGhlIGNhcmQuIEluIHRoaXMKLQkgKiBjYXNlIGp1c3QgYWJvcnQuICovCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybjsKLQotCS8qIGV4dHJhY3QgZGVzYyBhbmQgc2tiIGZyb20gcXVldWUgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfZGF0YSwgdGVtcCwgJnByaXYtPnJ4X2xpc3QsIGxpc3QpIHsKLQkJZGVzYyA9IHJ4X2RhdGEtPmRlc2M7Ci0JCXNrYiA9IHJ4X2RhdGEtPnNrYjsKLQkJbGlzdF9kZWwoJnJ4X2RhdGEtPmxpc3QpOwotCQlrZnJlZShyeF9kYXRhKTsKLQotCQlvcmlub2NvX3J4KGRldiwgZGVzYywgc2tiKTsKLQotCQlrZnJlZShkZXNjKTsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBSeCBwYXRoIChpbmZvIGZyYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHByaW50X2xpbmtzdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHN0YXR1cykKLXsKLQljaGFyICogczsKLQotCWlmIChzdXBwcmVzc19saW5rc3RhdHVzKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRDoKLQkJcyA9ICJOb3QgQ29ubmVjdGVkIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19DT05ORUNURUQ6Ci0JCXMgPSAiQ29ubmVjdGVkIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19ESVNDT05ORUNURUQ6Ci0JCXMgPSAiRGlzY29ubmVjdGVkIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9DSEFOR0U6Ci0JCXMgPSAiQVAgQ2hhbmdlZCI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFOgotCQlzID0gIkFQIE91dCBvZiBSYW5nZSI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfSU5fUkFOR0U6Ci0JCXMgPSAiQVAgSW4gUmFuZ2UiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FTU09DX0ZBSUxFRDoKLQkJcyA9ICJBc3NvY2lhdGlvbiBGYWlsZWQiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzID0gIlVOS05PV04iOwotCX0KLQkKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5ldyBsaW5rIHN0YXR1czogJXMgKCUwNHgpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHMsIHN0YXR1cyk7Ci19Ci0KLS8qIFNlYXJjaCBzY2FuIHJlc3VsdHMgZm9yIHJlcXVlc3RlZCBCU1NJRCwgam9pbiBpdCBpZiBmb3VuZCAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19qb2luX2FwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIGpvaW5fd29yayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBqb2luX3JlcSB7Ci0JCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQkJX19sZTE2IGNoYW5uZWw7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcmVxOwotCWNvbnN0IGludCBhdG9tX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8sIGF0aW0pOwotCXN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8gKmF0b20gPSBOVUxMOwotCWludCBvZmZzZXQgPSA0OwotCWludCBmb3VuZCA9IDA7Ci0JdTggKmJ1ZjsKLQl1MTYgbGVuOwotCi0JLyogQWxsb2NhdGUgYnVmZmVyIGZvciBzY2FuIHJlc3VsdHMgKi8KLQlidWYgPSBrbWFsbG9jKE1BWF9TQ0FOX0xFTiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgYnVmKQotCQlyZXR1cm47Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJZ290byBmYWlsX2xvY2s7Ci0KLQkvKiBTYW5pdHkgY2hlY2tzIGluIGNhc2UgdXNlciBjaGFuZ2VkIHNvbWV0aGluZyBpbiB0aGUgbWVhbnRpbWUgKi8KLQlpZiAoISBwcml2LT5ic3NpZF9maXhlZCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApCi0JCWdvdG8gb3V0OwotCi0JLyogUmVhZCBzY2FuIHJlc3VsdHMgZnJvbSB0aGUgZmlybXdhcmUgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAotCQkJICAgICAgSEVSTUVTX1JJRF9TQ0FOUkVTVUxUU1RBQkxFLAotCQkJICAgICAgTUFYX1NDQU5fTEVOLCAmbGVuLCBidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc2NhbiByZXN1bHRzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGVuID0gSEVSTUVTX1JFQ0xFTl9UT19CWVRFUyhsZW4pOwotCi0JLyogR28gdGhyb3VnaCB0aGUgc2NhbiByZXN1bHRzIGxvb2tpbmcgZm9yIHRoZSBjaGFubmVsIG9mIHRoZSBBUAotCSAqIHdlIHdlcmUgcmVxdWVzdGVkIHRvIGpvaW4gKi8KLQlmb3IgKDsgb2Zmc2V0ICsgYXRvbV9sZW4gPD0gbGVuOyBvZmZzZXQgKz0gYXRvbV9sZW4pIHsKLQkJYXRvbSA9IChzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvICopIChidWYgKyBvZmZzZXQpOwotCQlpZiAobWVtY21wKCZhdG9tLT5ic3NpZCwgcHJpdi0+ZGVzaXJlZF9ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCEgZm91bmQpIHsKLQkJREVCVUcoMSwgIiVzOiBSZXF1ZXN0ZWQgQVAgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1xuIiwKLQkJICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHJlcS5ic3NpZCwgcHJpdi0+ZGVzaXJlZF9ic3NpZCwgRVRIX0FMRU4pOwotCXJlcS5jaGFubmVsID0gYXRvbS0+Y2hhbm5lbDsJLyogYm90aCBhcmUgbGl0dGxlLWVuZGlhbiAqLwotCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkpPSU5SRVFVRVNULAotCQkJCSAgJnJlcSk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgaXNzdWluZyBqb2luIHJlcXVlc3RcbiIsIGRldi0+bmFtZSk7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotIGZhaWxfbG9jazoKLQlrZnJlZShidWYpOwotfQotCi0vKiBTZW5kIG5ldyBCU1NJRCB0byB1c2Vyc3BhY2UgKi8KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9ic3NpZF93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JaW50IGVycjsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAotCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIHdycXUuYXBfYWRkci5zYV9kYXRhKTsKLQlpZiAoZXJyICE9IDApCi0JCXJldHVybjsKLQotCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0KLQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9hc3NvY3JlcWllX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQlpbnQgZXJyOwotCXU4IGJ1Zls4OF07Ci0JdTggKmllOwotCi0JaWYgKCFwcml2LT5oYXNfd3BhKQotCQlyZXR1cm47Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfQVNTT0NfUkVRX0lORk8sCi0JCQkgICAgICBzaXplb2YoYnVmKSwgTlVMTCwgJmJ1Zik7Ci0JaWYgKGVyciAhPSAwKQotCQlyZXR1cm47Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShidWYsIHNpemVvZihidWYpKTsKLQlpZiAoaWUpIHsKLQkJaW50IHJlbSA9IHNpemVvZihidWYpIC0gKGllIC0gJmJ1ZlswXSk7Ci0JCXdycXUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWlmICh3cnF1LmRhdGEubGVuZ3RoID4gcmVtKQotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlbTsKLQotCQlpZiAod3JxdS5kYXRhLmxlbmd0aCkKLQkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZBU1NPQ1JFUUlFLCAmd3JxdSwgaWUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Fzc29jcmVzcGllX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQlpbnQgZXJyOwotCXU4IGJ1Zls4OF07IC8qIFRPRE86IHZlcmlmeSBtYXggc2l6ZSBvciBJV19HRU5FUklDX0lFX01BWCAqLwotCXU4ICppZTsKLQotCWlmICghcHJpdi0+aGFzX3dwYSkKLQkJcmV0dXJuOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX0FTU09DX1JFU1BfSU5GTywKLQkJCSAgICAgIHNpemVvZihidWYpLCBOVUxMLCAmYnVmKTsKLQlpZiAoZXJyICE9IDApCi0JCXJldHVybjsKLQotCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChpZSkgewotCQlpbnQgcmVtID0gc2l6ZW9mKGJ1ZikgLSAoaWUgLSAmYnVmWzBdKTsKLQkJd3JxdS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJaWYgKHdycXUuZGF0YS5sZW5ndGggPiByZW0pCi0JCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVtOwotCi0JCWlmICh3cnF1LmRhdGEubGVuZ3RoKQotCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCi0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVTUElFLCAmd3JxdSwgaWUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX3dldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgd2V2ZW50X3dvcmspOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuOwotCi0Jb3Jpbm9jb19zZW5kX2Fzc29jcmVxaWVfd2V2ZW50KHByaXYpOwotCW9yaW5vY29fc2VuZF9hc3NvY3Jlc3BpZV93ZXZlbnQocHJpdik7Ci0Jb3Jpbm9jb19zZW5kX2Jzc2lkX3dldmVudChwcml2KTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNjYW5fYWdlKQotewotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKLQkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOwotCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICp0bXBfYnNzOwotCi0JCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJaWYgKCFzY2FuX2FnZSB8fAotCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAotCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KLQkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKLQkJc3RydWN0IGJzc19lbGVtZW50ICp0bXBfYnNzOwotCi0JCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJaWYgKCFzY2FuX2FnZSB8fAotCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAotCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KLQkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCQlzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYXRvbSkKLXsKLQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3MgPSBOVUxMOwotCWludCBmb3VuZCA9IDA7Ci0KLQkvKiBUcnkgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGJzcyBmaXJzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3MtPmJzcy5ic3NpZCwgYXRvbS0+YnNzaWQpKQotCQkJY29udGludWU7Ci0JCS8qIEVTU0lEIGxlbmd0aHMgKi8KLQkJaWYgKGJzcy0+YnNzLmRhdGFbMV0gIT0gYXRvbS0+ZGF0YVsxXSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWVtY21wKCZic3MtPmJzcy5kYXRhWzJdLCAmYXRvbS0+ZGF0YVsyXSwKLQkJCSAgIGF0b20tPmRhdGFbMV0pKQotCQkJY29udGludWU7Ci0JCWZvdW5kID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogR3JhYiBhIGJzcyBvZmYgdGhlIGZyZWUgbGlzdCAqLwotCWlmICghZm91bmQgJiYgIWxpc3RfZW1wdHkoJnByaXYtPmJzc19mcmVlX2xpc3QpKSB7Ci0JCWJzcyA9IGxpc3RfZW50cnkocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0LAotCQkJCSBzdHJ1Y3QgeGJzc19lbGVtZW50LCBsaXN0KTsKLQkJbGlzdF9kZWwocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0KTsKLQotCQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZwcml2LT5ic3NfbGlzdCk7Ci0JfQotCi0JaWYgKGJzcykgewotCQkvKiBBbHdheXMgdXBkYXRlIHRoZSBCU1MgdG8gZ2V0IGxhdGVzdCBiZWFjb24gaW5mbyAqLwotCQltZW1jcHkoJmJzcy0+YnNzLCBhdG9tLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJYnNzLT5sYXN0X3NjYW5uZWQgPSBqaWZmaWVzOwotCX0KLX0KLQotc3RhdGljIGludCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwKLQkJCQkJaW50IGxlbikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQJCQlvZmZzZXQ7CQkvKiBJbiB0aGUgc2NhbiBkYXRhICovCi0JdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYXRvbTsKLQlpbnQJCQlhdG9tX2xlbjsKLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJYXRvbV9sZW4gPSBzaXplb2Yoc3RydWN0IGFnZXJlX3NjYW5fYXBpbmZvKTsKLQkJb2Zmc2V0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJLyogTGFjayBvZiBkb2N1bWVudGF0aW9uIG5lY2Vzc2l0YXRlcyB0aGlzIGhhY2suCi0JCSAqIERpZmZlcmVudCBmaXJtd2FyZXMgaGF2ZSA2OCBvciA3NiBieXRlIGxvbmcgYXRvbXMuCi0JCSAqIFdlIHRyeSBtb2R1bG8gZmlyc3QuICBJZiB0aGUgbGVuZ3RoIGRpdmlkZXMgYnkgYm90aCwKLQkJICogd2UgY2hlY2sgd2hhdCB3b3VsZCBiZSB0aGUgY2hhbm5lbCBpbiB0aGUgc2Vjb25kCi0JCSAqIGZyYW1lIGZvciBhIDY4LWJ5dGUgYXRvbS4gIDc2LWJ5dGUgYXRvbXMgaGF2ZSAwIHRoZXJlLgotCQkgKiBWYWxpZCBjaGFubmVsIGNhbm5vdCBiZSAwLiAgKi8KLQkJaWYgKGxlbiAlIDc2KQotCQkJYXRvbV9sZW4gPSA2ODsKLQkJZWxzZSBpZiAobGVuICUgNjgpCi0JCQlhdG9tX2xlbiA9IDc2OwotCQllbHNlIGlmIChsZW4gPj0gMTI5MiAmJiBidWZbNjhdID09IDApCi0JCQlhdG9tX2xlbiA9IDc2OwotCQllbHNlCi0JCQlhdG9tX2xlbiA9IDY4OwotCQlvZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCW9mZnNldCA9IDQ7Ci0JCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKLQkJCWF0b21fbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilidWYpOwotCQkJLyogU2FuaXR5IGNoZWNrIGZvciBhdG9tX2xlbiAqLwotCQkJaWYgKGF0b21fbGVuIDwgc2l6ZW9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8pKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBhdG9tX2xlbiBpbiBzY2FuICIKLQkJCQkgICAgICAgImRhdGE6ICVkXG4iLCBkZXYtPm5hbWUsIGF0b21fbGVuKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJfSBlbHNlCi0JCQlhdG9tX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8sIGF0aW0pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JLyogQ2hlY2sgdGhhdCB3ZSBnb3QgYW4gd2hvbGUgbnVtYmVyIG9mIGF0b21zICovCi0JaWYgKChsZW4gLSBvZmZzZXQpICUgYXRvbV9sZW4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5leHBlY3RlZCBzY2FuIGRhdGEgbGVuZ3RoICVkLCAiCi0JCSAgICAgICAiYXRvbV9sZW4gJWQsIG9mZnNldCAlZFxuIiwgZGV2LT5uYW1lLCBsZW4sCi0JCSAgICAgICBhdG9tX2xlbiwgb2Zmc2V0KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwgbXNlY3NfdG9famlmZmllcygxNTAwMCkpOwotCi0JLyogUmVhZCB0aGUgZW50cmllcyBvbmUgYnkgb25lICovCi0JZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7Ci0JCWludCBmb3VuZCA9IDA7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKLQotCQkvKiBHZXQgbmV4dCBhdG9tICovCi0JCWF0b20gPSAodW5pb24gaGVybWVzX3NjYW5faW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKLQotCQkvKiBUcnkgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGJzcyBmaXJzdCAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmEuYnNzaWQsIGF0b20tPmEuYnNzaWQpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGxlMTZfdG9fY3B1KGJzcy0+YnNzLmEuZXNzaWRfbGVuKSAhPQotCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKG1lbWNtcChic3MtPmJzcy5hLmVzc2lkLCBhdG9tLT5hLmVzc2lkLAotCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKSkKLQkJCQljb250aW51ZTsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogR3JhYiBhIGJzcyBvZmYgdGhlIGZyZWUgbGlzdCAqLwotCQlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgewotCQkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCi0JCQkJCSBzdHJ1Y3QgYnNzX2VsZW1lbnQsIGxpc3QpOwotCQkJbGlzdF9kZWwocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0KTsKLQotCQkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOwotCQl9Ci0KLQkJaWYgKGJzcykgewotCQkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KLQkJCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOwotCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSBqaWZmaWVzOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYgaW5mb2ZpZDsKLQlzdHJ1Y3QgewotCQlfX2xlMTYgbGVuOwotCQlfX2xlMTYgdHlwZTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpbmZvOwotCWludCBsZW4sIHR5cGU7Ci0JaW50IGVycjsKLQotCS8qIFRoaXMgaXMgYW4gYW5zd2VyIHRvIGFuIElOUVVJUkUgY29tbWFuZCB0aGF0IHdlIGRpZCBlYXJsaWVyLAotCSAqIG9yIGFuIGluZm9ybWF0aW9uICJldmVudCIgZ2VuZXJhdGVkIGJ5IHRoZSBjYXJkCi0JICogVGhlIGNvbnRyb2xsZXIgcmV0dXJuIHRvIHVzIGEgcHNldWRvIGZyYW1lIGNvbnRhaW5pbmcKLQkgKiB0aGUgaW5mb3JtYXRpb24gaW4gcXVlc3Rpb24gLSBKZWFuIElJICovCi0JaW5mb2ZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIElORk9GSUQpOwotCi0JLyogUmVhZCB0aGUgaW5mbyBmcmFtZSBoZWFkZXIgLSBkb24ndCB0cnkgdG9vIGhhcmQgKi8KLQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmaW5mbywgc2l6ZW9mKGluZm8pLAotCQkJICAgICAgIGluZm9maWQsIDApOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBpbmZvIGZyYW1lLiAiCi0JCSAgICAgICAiRnJhbWUgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuOwotCX0KLQkKLQlsZW4gPSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKGxlMTZfdG9fY3B1KGluZm8ubGVuKSk7Ci0JdHlwZSA9IGxlMTZfdG9fY3B1KGluZm8udHlwZSk7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEhFUk1FU19JTlFfVEFMTElFUzogewotCQlzdHJ1Y3QgaGVybWVzX3RhbGxpZXNfZnJhbWUgdGFsbGllczsKLQkJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7Ci0JCQotCQlpZiAobGVuID4gc2l6ZW9mKHRhbGxpZXMpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGFsbGllcyBmcmFtZSB0b28gbG9uZyAoJWQgYnl0ZXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKLQkJCWxlbiA9IHNpemVvZih0YWxsaWVzKTsKLQkJfQotCQkKLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJnRhbGxpZXMsIGxlbiwKLQkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCQkKLQkJLyogSW5jcmVtZW50IG91ciB2YXJpb3VzIGNvdW50ZXJzICovCi0JCS8qIHdzdGF0cy0+ZGlzY2FyZC5ud2lkIC0gbm8gd3JvbmcgQlNTSUQgc3R1ZmYgKi8KLQkJd3N0YXRzLT5kaXNjYXJkLmNvZGUgKz0KLQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhXRVBVbmRlY3J5cHRhYmxlKTsKLQkJaWYgKGxlbiA9PSBzaXplb2YodGFsbGllcykpICAKLQkJCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9Ci0JCQkJbGUxNl90b19jcHUodGFsbGllcy5SeERpc2NhcmRzX1dFUElDVkVycm9yKSArCi0JCQkJbGUxNl90b19jcHUodGFsbGllcy5SeERpc2NhcmRzX1dFUEV4Y2x1ZGVkKTsKLQkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgKz0KLQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuVHhEaXNjYXJkc1dyb25nU0EpOwotCQl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgKz0KLQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhNc2dJbkJhZE1zZ0ZyYWdtZW50cyk7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzICs9Ci0JCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlR4UmV0cnlMaW1pdEV4Y2VlZGVkKTsKLQkJLyogd3N0YXRzLT5taXNzLmJlYWNvbiAtIG5vIG1hdGNoICovCi0JfQotCWJyZWFrOwotCWNhc2UgSEVSTUVTX0lOUV9MSU5LU1RBVFVTOiB7Ci0JCXN0cnVjdCBoZXJtZXNfbGlua3N0YXR1cyBsaW5rc3RhdHVzOwotCQl1MTYgbmV3c3RhdHVzOwotCQlpbnQgY29ubmVjdGVkOwotCi0JCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKLQkJCWJyZWFrOwotCi0JCWlmIChsZW4gIT0gc2l6ZW9mKGxpbmtzdGF0dXMpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5leHBlY3RlZCBzaXplIGZvciBsaW5rc3RhdHVzIGZyYW1lICglZCBieXRlcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmbGlua3N0YXR1cywgbGVuLAotCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JCW5ld3N0YXR1cyA9IGxlMTZfdG9fY3B1KGxpbmtzdGF0dXMubGlua3N0YXR1cyk7Ci0KLQkJLyogU3ltYm9sIGZpcm13YXJlIHVzZXMgIm91dCBvZiByYW5nZSIgdG8gc2lnbmFsIHRoYXQKLQkJICogdGhlIGhvc3RzY2FuIGZyYW1lIGNhbiBiZSByZXF1ZXN0ZWQuICAqLwotCQlpZiAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRSAmJgotCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCAmJgotCQkgICAgcHJpdi0+aGFzX2hvc3RzY2FuICYmIHByaXYtPnNjYW5faW5wcm9ncmVzcykgewotCQkJaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfSE9TVFNDQU5fU1lNQk9MKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY29ubmVjdGVkID0gKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19DT05ORUNURUQpCi0JCQl8fCAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX0NIQU5HRSkKLQkJCXx8IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfSU5fUkFOR0UpOwotCi0JCWlmIChjb25uZWN0ZWQpCi0JCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCWVsc2UgaWYgKCFpZ25vcmVfZGlzY29ubmVjdCkKLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0KLQkJaWYgKG5ld3N0YXR1cyAhPSBwcml2LT5sYXN0X2xpbmtzdGF0dXMpIHsKLQkJCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IG5ld3N0YXR1czsKLQkJCXByaW50X2xpbmtzdGF0dXMoZGV2LCBuZXdzdGF0dXMpOwotCQkJLyogVGhlIGluZm8gZnJhbWUgY29udGFpbnMgb25seSBvbmUgd29yZCB3aGljaCBpcyB0aGUKLQkJCSAqIHN0YXR1cyAoc2VlIGhlcm1lcy5oKS4gVGhlIHN0YXR1cyBpcyBwcmV0dHkgYm9yaW5nCi0JCQkgKiBpbiBpdHNlbGYsIHRoYXQncyB3aHkgd2UgZXhwb3J0IHRoZSBuZXcgQlNTSUQuLi4KLQkJCSAqIEplYW4gSUkgKi8KLQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndldmVudF93b3JrKTsKLQkJfQotCX0KLQlicmVhazsKLQljYXNlIEhFUk1FU19JTlFfU0NBTjoKLQkJaWYgKCFwcml2LT5zY2FuX2lucHJvZ3Jlc3MgJiYgcHJpdi0+YnNzaWRfZml4ZWQgJiYKLQkJICAgIHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9JTlRFUlNJTCkgewotCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+am9pbl93b3JrKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTjoKLQljYXNlIEhFUk1FU19JTlFfSE9TVFNDQU5fU1lNQk9MOiB7Ci0JCS8qIFJlc3VsdCBvZiBhIHNjYW5uaW5nLiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotCQkgKiBjZWxscyBpbiB0aGUgdmljaW5pdHkgLSBKZWFuIElJICovCi0JCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQkJdW5zaWduZWQgY2hhciAqYnVmOwotCi0JCS8qIFNjYW4gaXMgbm8gbG9uZ2VyIGluIHByb2dyZXNzICovCi0JCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7Ci0KLQkJLyogU2FuaXR5IGNoZWNrICovCi0JCWlmIChsZW4gPiA0MDk2KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU2NhbiByZXN1bHRzIHRvbyBsYXJnZSAoJWQgYnl0ZXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogQWxsb2NhdGUgYnVmZmVyIGZvciByZXN1bHRzICovCi0JCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJ1ZiA9PSBOVUxMKQotCQkJLyogTm8gbWVtb3J5LCBzbyBjYW4ndCBwcmludGsoKS4uLiAqLwotCQkJYnJlYWs7Ci0KLQkJLyogUmVhZCBzY2FuIGRhdGEgKi8KLQkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnVmLCBsZW4sCi0JCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlKGJ1Zik7Ci0JCQlicmVhazsKLQkJfQotCi0jaWZkZWYgT1JJTk9DT19ERUJVRwotCQl7Ci0JCQlpbnQJaTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJTY2FuIHJlc3VsdCBbJTAyWCIsIGJ1ZlswXSk7Ci0JCQlmb3IoaSA9IDE7IGkgPCAobGVuICogMik7IGkrKykKLQkJCQlwcmludGsoIjolMDJYIiwgYnVmW2ldKTsKLQkJCXByaW50aygiXVxuIik7Ci0JCX0KLSNlbmRpZgkvKiBPUklOT0NPX0RFQlVHICovCi0KLQkJaWYgKG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoZGV2LCBidWYsIGxlbikgPT0gMCkgewotCQkJLyogU2VuZCBhbiBlbXB0eSBldmVudCB0byB1c2VyIHNwYWNlLgotCQkJICogV2UgZG9uJ3Qgc2VuZCB0aGUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgZXZlbnQgYmVjYXVzZQotCQkJICogaXQgd291bGQgcmVxdWlyZSB1cyB0byBkbyBjb21wbGV4IHRyYW5zY29kaW5nLCBhbmQKLQkJCSAqIHdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIHdvcmsgZG9uZSBpbiB0aGUgaXJxIGhhbmRsZXIKLQkJCSAqIFVzZSBhIHJlcXVlc3QgdG8gZXh0cmFjdCB0aGUgZGF0YSAtIEplYW4gSUkgKi8KLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwotCQl9Ci0JCWtmcmVlKGJ1Zik7Ci0JfQotCWJyZWFrOwotCWNhc2UgSEVSTUVTX0lOUV9DSEFOTkVMSU5GTzoKLQl7Ci0JCXN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICpic3M7Ci0KLQkJaWYgKCFwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogR290IGNoYW5pbmZvIHdpdGhvdXQgc2NhbiwgIgotCQkJICAgICAgICJsZW49JWRcbiIsIGRldi0+bmFtZSwgbGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogQW4gZW1wdHkgcmVzdWx0IGluZGljYXRlcyB0aGF0IHRoZSBzY2FuIGlzIGNvbXBsZXRlICovCi0JCWlmIChsZW4gPT0gMCkgewotCQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwotCi0JCQkvKiBTY2FuIGlzIG5vIGxvbmdlciBpbiBwcm9ncmVzcyAqLwotCQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKLQotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIFNhbml0eSBjaGVjayAqLwotCQllbHNlIGlmIChsZW4gPiBzaXplb2YoKmJzcykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IEV4dCBzY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcykuICIKLQkJCSAgICAgICAiVHJ1bmNhdGluZyByZXN1bHRzIHRvICV6ZCBieXRlcy5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4sIHNpemVvZigqYnNzKSk7Ci0JCQlsZW4gPSBzaXplb2YoKmJzcyk7Ci0JCX0gZWxzZSBpZiAobGVuIDwgKG9mZnNldG9mKHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvLAotCQkJCQkgICBkYXRhKSArIDIpKSB7Ci0JCQkvKiBEcm9wIHRoaXMgcmVzdWx0IG5vdyBzbyB3ZSBkb24ndCBoYXZlIHRvCi0JCQkgKiBrZWVwIGNoZWNraW5nIGxhdGVyICovCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBFeHQgc2NhbiByZXN1bHRzIHRvbyBzaG9ydCAoJWQgYnl0ZXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYnNzID0ga21hbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOwotCQlpZiAoYnNzID09IE5VTEwpCi0JCQlicmVhazsKLQotCQkvKiBSZWFkIHNjYW4gZGF0YSAqLwotCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAodm9pZCAqKSBic3MsIGxlbiwKLQkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKLQkJaWYgKGVycikgewotCQkJa2ZyZWUoYnNzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHByaXYsIGJzcyk7Ci0KLQkJa2ZyZWUoYnNzKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgSEVSTUVTX0lOUV9TRUNfU1RBVF9BR0VSRToKLQkJLyogU2VjdXJpdHkgc3RhdHVzIChBZ2VyZSBzcGVjaWZpYykgKi8KLQkJLyogSWdub3JlIHRoaXMgZnJhbWUgZm9yIG5vdyAqLwotCQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQotCQkJYnJlYWs7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVW5rbm93biBpbmZvcm1hdGlvbiBmcmFtZSByZWNlaXZlZDogIgotCQkgICAgICAgInR5cGUgMHglMDR4LCBsZW5ndGggJWRcbiIsIGRldi0+bmFtZSwgdHlwZSwgbGVuKTsKLQkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgYWJvdXQgaXQgKi8KLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfaW5mZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0JaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbmZvcm1hdGlvbiBmcmFtZSBsb3N0LlxuIiwgZGV2LT5uYW1lKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSW50ZXJuYWwgaGFyZHdhcmUgY29udHJvbCByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1pbnQgX19vcmlub2NvX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7IC8qIGp1c3QgdG8gbWFrZSBzdXJlICovCi0KLQllcnIgPSBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBjb25maWd1cmluZyBjYXJkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIEZpcmUgdGhpbmdzIHVwIGFnYWluICovCi0JaGVybWVzX3NldF9pcnFtYXNrKGh3LCBPUklOT0NPX0lOVEVOKTsKLQllcnIgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgZW5hYmxpbmcgTUFDIHBvcnRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JaWYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKLQkJaWYgKCEgcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0KSB7Ci0JCQllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKLQkJCWlmIChlcnIpIHsKLQkJCQkvKiBTb21lIGZpcm13YXJlcyAoZS5nLiBJbnRlcnNpbCAxLjMueCkgc2VlbQotCQkJCSAqIHRvIGhhdmUgcHJvYmxlbXMgZGlzYWJsaW5nIHRoZSBwb3J0LCBvaAotCQkJCSAqIHdlbGwsIHRvbyBiYWQuICovCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGRpc2FibGluZyBNQUMgcG9ydFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7Ci0JCQl9Ci0JCX0KLQkJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKLQkJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweGZmZmYpOwotCX0KLQkKLQkvKiBmaXJtd2FyZSB3aWxsIGhhdmUgdG8gcmVhc3NvY2lhdGUgKi8KLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fYWxsb2NhdGVfZmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7Ci0JaWYgKGVyciA9PSAtRUlPICYmIHByaXYtPm5pY2J1Zl9zaXplID4gVFhfTklDQlVGX1NJWkVfQlVHKSB7Ci0JCS8qIFRyeSB3b3JrYXJvdW5kIGZvciBvbGQgU3ltYm9sIGZpcm13YXJlIGJ1ZyAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmlybXdhcmUgQUxMT0MgYnVnIGRldGVjdGVkICIKLQkJICAgICAgICIob2xkIFN5bWJvbCBmaXJtd2FyZT8pLiBUcnlpbmcgdG8gd29yayBhcm91bmQuLi4gIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQotCQlwcml2LT5uaWNidWZfc2l6ZSA9IFRYX05JQ0JVRl9TSVpFX0JVRzsKLQkJZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKLQkJaWYgKGVycikKLQkJCXByaW50aygiZmFpbGVkIVxuIik7Ci0JCWVsc2UKLQkJCXByaW50aygib2suXG4iKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JZXJyID0gaGVybWVzX2luaXQoaHcpOwotCWlmIChwcml2LT5kb19md19kb3dubG9hZCAmJiAhZXJyKSB7Ci0JCWVyciA9IG9yaW5vY29fZG93bmxvYWQocHJpdik7Ci0JCWlmIChlcnIpCi0JCQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7Ci0JfQotCWlmICghZXJyKQotCQllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAocHJpdi0+Yml0cmF0ZW1vZGUgPj0gQklUUkFURV9UQUJMRV9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEJVRzogSW52YWxpZCBiaXRyYXRlIG1vZGUgJWRcbiIsCi0JCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBwcml2LT5iaXRyYXRlbW9kZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wsCi0JCQkJCSAgIGJpdHJhdGVfdGFibGVbcHJpdi0+Yml0cmF0ZW1vZGVdLmFnZXJlX3R4cmF0ZWN0cmwpOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wsCi0JCQkJCSAgIGJpdHJhdGVfdGFibGVbcHJpdi0+Yml0cmF0ZW1vZGVdLmludGVyc2lsX3R4cmF0ZWN0cmwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiBTZXQgZml4ZWQgQVAgYWRkcmVzcyAqLwotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0X3dhcChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWludCByb2FtaW5nX2ZsYWc7Ci0JaW50IGVyciA9IDA7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkvKiBub3Qgc3VwcG9ydGVkICovCi0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQkJaWYgKHByaXYtPmJzc2lkX2ZpeGVkKQotCQkJcm9hbWluZ19mbGFnID0gMjsKLQkJZWxzZQotCQkJcm9hbWluZ19mbGFnID0gMTsKLQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUk9BTUlOR01PREUsCi0JCQkJCSAgIHJvYW1pbmdfZmxhZyk7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTUFOREFUT1JZQlNTSURfU1lNQk9MLAotCQkJCQkgICZwcml2LT5kZXNpcmVkX2Jzc2lkKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIENoYW5nZSB0aGUgV0VQIGtleXMgYW5kL29yIHRoZSBjdXJyZW50IGtleXMuICBDYW4gYmUgY2FsbGVkCi0gKiBlaXRoZXIgZnJvbSBfX29yaW5vY29faHdfc2V0dXBfZW5jKCkgb3IgZGlyZWN0bHkgZnJvbQotICogb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZSgpLiAgSW4gdGhlIGxhdGVyIGNhc2UgdGhlIGFzc29jaWF0aW9uCi0gKiB3aXRoIHRoZSBBUCBpcyBub3QgYnJva2VuIChpZiB0aGUgZmlybXdhcmUgY2FuIGhhbmRsZSBpdCksCi0gKiB3aGljaCBpcyBuZWVkZWQgZm9yIDgwMi4xeCBpbXBsZW1lbnRhdGlvbnMuICovCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORldFUEtFWVNfQUdFUkUsCi0JCQkJCSAgJnByaXYtPmtleXMpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlRYS0VZX0FHRVJFLAotCQkJCQkgICBwcml2LT50eF9rZXkpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCXsKLQkJCWludCBrZXlsZW47Ci0JCQlpbnQgaTsKLQotCQkJLyogRm9yY2UgdW5pZm9ybSBrZXkgbGVuZ3RoIHRvIHdvcmsgYXJvdW5kIGZpcm13YXJlIGJ1Z3MgKi8KLQkJCWtleWxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbcHJpdi0+dHhfa2V5XS5sZW4pOwotCQkJCi0JCQlpZiAoa2V5bGVuID4gTEFSR0VfS0VZX1NJWkUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCVUc6IEtleSAlZCBoYXMgb3ZlcnNpemUgbGVuZ3RoICVkLlxuIiwKLQkJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgcHJpdi0+dHhfa2V5LCBrZXlsZW4pOwotCQkJCXJldHVybiAtRTJCSUc7Ci0JCQl9Ci0KLQkJCS8qIFdyaXRlIGFsbCA0IGtleXMgKi8KLQkJCWZvcihpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0tFWVM7IGkrKykgewotCQkJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgICAgIEhFUk1FU19SSURfQ05GREVGQVVMVEtFWTAgKyBpLAotCQkJCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oa2V5bGVuKSwKLQkJCQkJCSAgICAgICBwcml2LT5rZXlzW2ldLmRhdGEpOwotCQkJCWlmIChlcnIpCi0JCQkJCXJldHVybiBlcnI7Ci0JCQl9Ci0KLQkJCS8qIFdyaXRlIHRoZSBpbmRleCBvZiB0aGUga2V5IHVzZWQgaW4gdHJhbnNtaXNzaW9uICovCi0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORldFUERFRkFVTFRLRVlJRCwKLQkJCQkJCSAgIHByaXYtPnR4X2tleSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldHVwX2VuYyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlpbnQgbWFzdGVyX3dlcF9mbGFnOwotCWludCBhdXRoX2ZsYWc7Ci0JaW50IGVuY19mbGFnOwotCi0JLyogU2V0dXAgV0VQIGtleXMgZm9yIFdFUCBhbmQgV1BBICovCi0JaWYgKHByaXYtPmVuY29kZV9hbGcpCi0JCV9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOwotCi0JaWYgKHByaXYtPndlcF9yZXN0cmljdCkKLQkJYXV0aF9mbGFnID0gSEVSTUVTX0FVVEhfU0hBUkVEX0tFWTsKLQllbHNlCi0JCWF1dGhfZmxhZyA9IEhFUk1FU19BVVRIX09QRU47Ci0KLQlpZiAocHJpdi0+d3BhX2VuYWJsZWQpCi0JCWVuY19mbGFnID0gMjsKLQllbHNlIGlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKQotCQllbmNfZmxhZyA9IDE7Ci0JZWxzZQotCQllbmNfZmxhZyA9IDA7Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6IC8qIEFnZXJlIHN0eWxlIFdFUCAqLwotCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgewotCQkJLyogRW5hYmxlIHRoZSBzaGFyZWQta2V5IGF1dGhlbnRpY2F0aW9uLiAqLwotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTl9BR0VSRSwKLQkJCQkJCSAgIGF1dGhfZmxhZyk7Ci0JCX0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORldFUEVOQUJMRURfQUdFUkUsCi0JCQkJCSAgIGVuY19mbGFnKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJaWYgKHByaXYtPmhhc193cGEpIHsKLQkJCS8qIFNldCBXUEEga2V5IG1hbmFnZW1lbnQgKi8KLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkgIEhFUk1FU19SSURfQ05GU0VUV1BBQVVUSE1HTVRTVUlURV9BR0VSRSwKLQkJCQkgIHByaXYtPmtleV9tZ210KTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWJyZWFrOwotCi0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAvKiBJbnRlcnNpbCBzdHlsZSBXRVAgKi8KLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOiAvKiBTeW1ib2wgc3R5bGUgV0VQICovCi0JCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKSB7Ci0JCQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0IHx8Ci0JCQkgICAgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wpKQotCQkJCW1hc3Rlcl93ZXBfZmxhZyA9IEhFUk1FU19XRVBfUFJJVkFDWV9JTlZPS0VEIHwKLQkJCQkJCSAgSEVSTUVTX1dFUF9FWENMX1VORU5DUllQVEVEOwotCQkJZWxzZQotCQkJCW1hc3Rlcl93ZXBfZmxhZyA9IEhFUk1FU19XRVBfUFJJVkFDWV9JTlZPS0VEOwotCi0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORkFVVEhFTlRJQ0FUSU9OLAotCQkJCQkJICAgYXV0aF9mbGFnKTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlCi0JCQltYXN0ZXJfd2VwX2ZsYWcgPSAwOwotCi0JCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKLQkJCW1hc3Rlcl93ZXBfZmxhZyB8PSBIRVJNRVNfV0VQX0hPU1RfREVDUllQVDsKLQotCQkvKiBNYXN0ZXIgV0VQIHNldHRpbmcgOiBvbi9vZmYgKi8KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORldFUEZMQUdTX0lOVEVSU0lMLAotCQkJCQkgICBtYXN0ZXJfd2VwX2ZsYWcpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsJCi0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCBpbmNsdWRpbmcgdGhlIHR4IGFuZCByeCBNSUMga2V5cy4KLSAqIHJzYyBtdXN0IGJlIDggYnl0ZXMKLSAqIHRzYyBtdXN0IGJlIDggYnl0ZXMgb3IgTlVMTAotICovCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaGVybWVzX3QgKmh3LCBpbnQga2V5X2lkeCwgaW50IHNldF90eCwKLQkJCQkgICAgIHU4ICprZXksIHU4ICpyc2MsIHU4ICp0c2MpCi17Ci0Jc3RydWN0IHsKLQkJX19sZTE2IGlkeDsKLQkJdTggcnNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwotCQl1OCBrZXlbVEtJUF9LRVlMRU5dOwotCQl1OCB0eF9taWNbTUlDX0tFWUxFTl07Ci0JCXU4IHJ4X21pY1tNSUNfS0VZTEVOXTsKLQkJdTggdHNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKLQlpbnQgcmV0OwotCWludCBlcnI7Ci0JaW50IGs7Ci0JdTE2IHhtaXR0aW5nOwotCi0Ja2V5X2lkeCAmPSAweDM7Ci0KLQlpZiAoc2V0X3R4KQotCQlrZXlfaWR4IHw9IDB4ODAwMDsKLQotCWJ1Zi5pZHggPSBjcHVfdG9fbGUxNihrZXlfaWR4KTsKLQltZW1jcHkoYnVmLmtleSwga2V5LAotCSAgICAgICBzaXplb2YoYnVmLmtleSkgKyBzaXplb2YoYnVmLnR4X21pYykgKyBzaXplb2YoYnVmLnJ4X21pYykpOwotCi0JaWYgKHJzYyA9PSBOVUxMKQotCQltZW1zZXQoYnVmLnJzYywgMCwgc2l6ZW9mKGJ1Zi5yc2MpKTsKLQllbHNlCi0JCW1lbWNweShidWYucnNjLCByc2MsIHNpemVvZihidWYucnNjKSk7Ci0KLQlpZiAodHNjID09IE5VTEwpIHsKLQkJbWVtc2V0KGJ1Zi50c2MsIDAsIHNpemVvZihidWYudHNjKSk7Ci0JCWJ1Zi50c2NbNF0gPSAweDEwOwotCX0gZWxzZSB7Ci0JCW1lbWNweShidWYudHNjLCB0c2MsIHNpemVvZihidWYudHNjKSk7Ci0JfQotCi0JLyogV2FpdCB1cHRvIDEwMG1zIGZvciB0eCBxdWV1ZSB0byBlbXB0eSAqLwotCWsgPSAxMDA7Ci0JZG8gewotCQlrLS07Ci0JCXVkZWxheSgxMDAwKTsKLQkJcmV0ID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfVFhRVUVVRUVNUFRZLAotCQkJCQkgICZ4bWl0dGluZyk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQl9IHdoaWxlICgoayA+IDApICYmIHhtaXR0aW5nKTsKLQotCWlmIChrID09IDApCi0JCXJldCA9IC1FVElNRURPVVQ7Ci0KLQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkgIEhFUk1FU19SSURfQ05GQUREREVGQVVMVFRLSVBLRVlfQUdFUkUsCi0JCQkJICAmYnVmKTsKLQotCXJldHVybiByZXQgPyByZXQgOiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19jbGVhcl90a2lwX2tleShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCSAgaW50IGtleV9pZHgpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQltZW1zZXQoJnByaXYtPnRraXBfa2V5W2tleV9pZHhdLCAwLCBzaXplb2YocHJpdi0+dGtpcF9rZXlba2V5X2lkeF0pKTsKLQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJICAgSEVSTUVTX1JJRF9DTkZSRU1ERUZBVUxUVEtJUEtFWV9BR0VSRSwKLQkJCQkgICBrZXlfaWR4KTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgY2xlYXJpbmcgVEtJUCBrZXkgJWRcbiIsCi0JCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBlcnIsIGtleV9pZHgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7Ci0KLQkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKEVUSF9BTEVOKSwgZGV2LT5kZXZfYWRkcik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE1BQyBhZGRyZXNzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCB1cCB0aGUgbGluayBtb2RlICovCi0JZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBPUlRUWVBFLAotCQkJCSAgIHByaXYtPnBvcnRfdHlwZSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHBvcnQgdHlwZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JLyogU2V0IHRoZSBjaGFubmVsL2ZyZXF1ZW5jeSAqLwotCWlmIChwcml2LT5jaGFubmVsICE9IDAgJiYgcHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZPV05DSEFOTkVMLAotCQkJCQkgICBwcml2LT5jaGFubmVsKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBjaGFubmVsICVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyLCBwcml2LT5jaGFubmVsKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+aGFzX2lic3MpIHsKLQkJdTE2IGNyZWF0ZWlic3M7Ci0KLQkJaWYgKChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkgJiYgKHByaXYtPmNyZWF0ZWlic3MpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhpcyBmaXJtd2FyZSByZXF1aXJlcyBhbiAiCi0JCQkgICAgICAgIkVTU0lEIGluIElCU1MtQWQtSG9jIG1vZGUuXG4iLCBkZXYtPm5hbWUpOwotCQkJLyogV2l0aCB3dmxhbl9jcywgaW4gdGhpcyBjYXNlLCB3ZSB3b3VsZCBjcmFzaC4KLQkJCSAqIGhvcGVmdWxseSwgdGhpcyBkcml2ZXIgd2lsbCBiZWhhdmUgYmV0dGVyLi4uCi0JCQkgKiBKZWFuIElJICovCi0JCQljcmVhdGVpYnNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCWNyZWF0ZWlic3MgPSBwcml2LT5jcmVhdGVpYnNzOwotCQl9Ci0JCQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GQ1JFQVRFSUJTUywKLQkJCQkJICAgY3JlYXRlaWJzcyk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQ1JFQVRFSUJTU1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogU2V0IHRoZSBkZXNpcmVkIEJTU0lEICovCi0JZXJyID0gX19vcmlub2NvX2h3X3NldF93YXAocHJpdik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIEFQIGFkZHJlc3NcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCS8qIFNldCB0aGUgZGVzaXJlZCBFU1NJRCAqLwotCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSk7Ci0JbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPmRlc2lyZWRfZXNzaWQsIHNpemVvZihpZGJ1Zi52YWwpKTsKLQkvKiBXaW5YUCB3YW50cyBwYXJ0bmVyIHRvIGNvbmZpZ3VyZSBPV05TU0lEIGV2ZW4gaW4gSUJTUyBtb2RlLiAoamltYykgKi8KLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05TU0lELAotCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAotCQkJICAgICAgICZpZGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE9XTlNTSURcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkRFU0lSRURTU0lELAotCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAotCQkJICAgICAgICZpZGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIERFU0lSRURTU0lEXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCB0aGUgc3RhdGlvbiBuYW1lICovCi0JaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPm5pY2spKTsKLQltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+bmljaywgc2l6ZW9mKGlkYnVmLnZhbCkpOwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+bmljaykrMiksCi0JCQkgICAgICAgJmlkYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbmlja25hbWVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IEFQIGRlbnNpdHkgKi8KLQlpZiAocHJpdi0+aGFzX3NlbnNpdGl2aXR5KSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKLQkJCQkJICAgcHJpdi0+YXBfZGVuc2l0eSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFNZU1RFTVNDQUxFLiAgIgotCQkJICAgICAgICJEaXNhYmxpbmcgc2Vuc2l0aXZpdHkgY29udHJvbFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0KLQkJCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDA7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgUlRTIHRocmVzaG9sZCAqLwotCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZSVFNUSFJFU0hPTEQsCi0JCQkJICAgcHJpdi0+cnRzX3RocmVzaCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFJUUyB0aHJlc2hvbGRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IGZyYWdtZW50YXRpb24gdGhyZXNob2xkIG9yIE1XTyByb2J1c3RuZXNzICovCi0JaWYgKHByaXYtPmhhc19td28pCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCi0JCQkJCSAgIHByaXYtPm13b19yb2J1c3QpOwotCWVsc2UKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCi0JCQkJCSAgIHByaXYtPmZyYWdfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgZnJhZ21lbnRhdGlvblxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgYml0cmF0ZSAqLwotCWVyciA9IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgYml0cmF0ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgcG93ZXIgbWFuYWdlbWVudCAqLwotCWlmIChwcml2LT5oYXNfcG0pIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBNRU5BQkxFRCwKLQkJCQkJICAgcHJpdi0+cG1fb24pOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GTVVMVElDQVNUUkVDRUlWRSwKLQkJCQkJICAgcHJpdi0+cG1fbWNhc3QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sCi0JCQkJCSAgIHByaXYtPnBtX3BlcmlvZCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAotCQkJCQkgICBwcml2LT5wbV90aW1lb3V0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogU2V0IHByZWFtYmxlIC0gb25seSBmb3IgU3ltYm9sIHNvIGZhci4uLiAqLwotCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBSRUFNQkxFX1NZTUJPTCwKLQkJCQkJICAgcHJpdi0+cHJlYW1ibGUpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHByZWFtYmxlXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdXAgZW5jcnlwdGlvbiAqLwotCWlmIChwcml2LT5oYXNfd2VwIHx8IHByaXYtPmhhc193cGEpIHsKLQkJZXJyID0gX19vcmlub2NvX2h3X3NldHVwX2VuYyhwcml2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgYWN0aXZhdGluZyBlbmNyeXB0aW9uXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLwotCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwotCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwgCi0JCQkJCSAgICBIRVJNRVNfVEVTVF9NT05JVE9SLCAwLCBOVUxMKTsKLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIG1vbml0b3IgbW9kZSAqLwotCQlkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7Ci0JCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAotCQkJCQkgICAgSEVSTUVTX1RFU1RfU1RPUCwgMCwgTlVMTCk7Ci0JfQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBTZXQgcHJvbWlzY3VpdHkgLyBtdWx0aWNhc3QqLwotCXByaXYtPnByb21pc2N1b3VzID0gMDsKLQlwcml2LT5tY19jb3VudCA9IDA7Ci0KLQkvKiBGSVhNRTogd2hhdCBhYm91dCBuZXRpZl90eF9sb2NrICovCi0JX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEZJWE1FOiByZXR1cm4gaW50PyAqLwotc3RhdGljIHZvaWQKLV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JaW50IHByb21pc2MsIG1jX2NvdW50OwotCi0JLyogVGhlIEhlcm1lcyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbiBhbGxtdWx0aSBtb2RlLCBzbyB3ZSBnbwotCSAqIGludG8gcHJvbWlzY3VvdXMgbW9kZSBhbmQgbGV0IHRoZSB1cHBlciBsZXZlbHMgZGVhbC4gKi8KLQlpZiAoIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCSAgICAgKGRldi0+bWNfY291bnQgPiBNQVhfTVVMVElDQVNUKHByaXYpKSApIHsKLQkJcHJvbWlzYyA9IDE7Ci0JCW1jX2NvdW50ID0gMDsKLQl9IGVsc2UgewotCQlwcm9taXNjID0gMDsKLQkJbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OwotCX0KLQotCWlmIChwcm9taXNjICE9IHByaXYtPnByb21pc2N1b3VzKSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUk9NSVNDVU9VU01PREUsCi0JCQkJCSAgIHByb21pc2MpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFBST01JU0NVT1VTTU9ERSB0byAxLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCX0gZWxzZSAKLQkJCXByaXYtPnByb21pc2N1b3VzID0gcHJvbWlzYzsKLQl9Ci0KLQkvKiBJZiB3ZSdyZSBub3QgaW4gcHJvbWlzY3VvdXMgbW9kZSwgdGhlbiB3ZSBuZWVkIHRvIHNldCB0aGUKLQkgKiBncm91cCBhZGRyZXNzIGlmIGVpdGhlciB3ZSB3YW50IHRvIG11bHRpY2FzdCwgb3IgaWYgd2Ugd2VyZQotCSAqIG11bHRpY2FzdGluZyBhbmQgd2FudCB0byBzdG9wICovCi0JaWYgKCEgcHJvbWlzYyAmJiAobWNfY291bnQgfHwgcHJpdi0+bWNfY291bnQpICkgewotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKnAgPSBkZXYtPm1jX2xpc3Q7Ci0JCXN0cnVjdCBoZXJtZXNfbXVsdGljYXN0IG1jbGlzdDsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKLQkJCS8qIHBhcmFub2lhOiBpcyBsaXN0IHNob3J0ZXIgdGhhbiBtY19jb3VudD8gKi8KLQkJCUJVR19PTighIHApOwotCQkJLyogcGFyYW5vaWE6IGJhZCBhZGRyZXNzIHNpemUgaW4gbGlzdD8gKi8KLQkJCUJVR19PTihwLT5kbWlfYWRkcmxlbiAhPSBFVEhfQUxFTik7Ci0JCQkKLQkJCW1lbWNweShtY2xpc3QuYWRkcltpXSwgcC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJCXAgPSBwLT5uZXh0OwotCQl9Ci0JCQotCQlpZiAocCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNdWx0aWNhc3QgbGlzdCBpcyAiCi0JCQkgICAgICAgImxvbmdlciB0aGFuIG1jX2NvdW50XG4iLCBkZXYtPm5hbWUpOwotCi0JCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAotCQkJCSAgIEhFUk1FU19SSURfQ05GR1JPVVBBRERSRVNTRVMsCi0JCQkJICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihtY19jb3VudCAqIEVUSF9BTEVOKSwKLQkJCQkgICAmbWNsaXN0KTsKLQkJaWYgKGVycikKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbXVsdGljYXN0IGxpc3QuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJZWxzZQotCQkJcHJpdi0+bWNfY291bnQgPSBtY19jb3VudDsKLQl9Ci19Ci0KLS8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQsIHdpdGhvdXQgbG9ja3MgaGVsZCAtIHVzZQotICogc2NoZWR1bGVfd29yaygpICovCi1zdGF0aWMgdm9pZCBvcmlub2NvX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIHJlc2V0X3dvcmspOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQkvKiBXaGVuIHRoZSBoYXJkd2FyZSBiZWNvbWVzIGF2YWlsYWJsZSBhZ2Fpbiwgd2hhdGV2ZXIKLQkJICogZGV0ZWN0cyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciByZS1pbml0aWFsaXppbmcKLQkJICogaXQuIFNvIG5vIG5lZWQgZm9yIGFueXRoaW5nIGZ1cnRoZXIgKi8KLQkJcmV0dXJuOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogU2h1dCBvZmYgaW50ZXJydXB0cy4gIERlcGVuZGluZyBvbiB3aGF0IHN0YXRlIHRoZSBoYXJkd2FyZQotCSAqIGlzIGluLCB0aGlzIG1pZ2h0IG5vdCB3b3JrLCBidXQgd2UnbGwgdHJ5IGFueXdheSAqLwotCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7Ci0JaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweGZmZmYpOwotCi0JcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKLQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7IC8qIGZpcm13YXJlIHdpbGwgaGF2ZSB0byByZWFzc29jaWF0ZSAqLwotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0gCS8qIFNjYW5uaW5nIHN1cHBvcnQ6IENsZWFudXAgb2YgZHJpdmVyIHN0cnVjdCAqLwotCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIDApOwotCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7Ci0KLQlpZiAocHJpdi0+aGFyZF9yZXNldCkgewotCQllcnIgPSAoKnByaXYtPmhhcmRfcmVzZXQpKHByaXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCAiCi0JCQkgICAgICAgInBlcmZvcm1pbmcgaGFyZCByZXNldFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQkJZ290byBkaXNhYmxlOwotCQl9Ci0JfQotCi0JZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJZ290byBkaXNhYmxlOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOyAvKiBUaGlzIGhhcyB0byBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQgKi8KLQotCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07Ci0KLQkvKiBwcml2LT5vcGVuIG9yIHByaXYtPmh3X3VuYXZhaWxhYmxlIG1pZ2h0IGhhdmUgY2hhbmdlZCB3aGlsZQotCSAqIHdlIGRyb3BwZWQgdGhlIGxvY2sgKi8KLQlpZiAocHJpdi0+b3BlbiAmJiAoISBwcml2LT5od191bmF2YWlsYWJsZSkpIHsKLQkJZXJyID0gX19vcmlub2NvX3VwKGRldik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkIHJlZW5hYmxpbmcgY2FyZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCX0gZWxzZQotCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCXJldHVybjsKLSBkaXNhYmxlOgotCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7Ci0JbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCXByaW50ayhLRVJOX0VSUiAiJXM6IERldmljZSBoYXMgYmVlbiBkaXNhYmxlZCFcbiIsIGRldi0+bmFtZSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVycnVwdCBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3RpY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogVElDS1xuIiwgZGV2LT5uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3d0ZXJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQkvKiBUaGlzIHNlZW1zIHRvIGhhcHBlbiBhIGZhaXIgYml0IHVuZGVyIGxvYWQsIGJ1dCBpZ25vcmluZyBpdAotCSAgIHNlZW1zIHRvIHdvcmsgZmluZS4uLiovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNQUMgY29udHJvbGxlciBlcnJvciAoV1RFUlIpLiBJZ25vcmluZy5cbiIsCi0JICAgICAgIGRldi0+bmFtZSk7Ci19Ci0KLWlycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgY291bnQgPSBNQVhfSVJRTE9PUFNfUEVSX0lSUTsKLQl1MTYgZXZzdGF0LCBldmVudHM7Ci0JLyogVGhlc2UgYXJlIHVzZWQgdG8gZGV0ZWN0IGEgcnVuYXdheSBpbnRlcnJ1cHQgc2l0dWF0aW9uICovCi0JLyogSWYgd2UgZ2V0IG1vcmUgdGhhbiBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZIGl0ZXJhdGlvbnMgaW4gYSBqaWZmeSwKLQkgKiB3ZSBwYW5pYyBhbmQgc2h1dCBkb3duIHRoZSBoYXJkd2FyZSAqLwotCXN0YXRpYyBpbnQgbGFzdF9pcnFfamlmZnkgPSAwOyAvKiBqaWZmaWVzIHZhbHVlIHRoZSBsYXN0IHRpbWUKLQkJCQkJKiB3ZSB3ZXJlIGNhbGxlZCAqLwotCXN0YXRpYyBpbnQgbG9vcHNfdGhpc19qaWZmeSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7Ci0JCS8qIElmIGh3IGlzIHVuYXZhaWxhYmxlIC0gd2UgZG9uJ3Qga25vdyBpZiB0aGUgaXJxIHdhcwotCQkgKiBmb3IgdXMgb3Igbm90ICovCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlldnN0YXQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwotCWV2ZW50cyA9IGV2c3RhdCAmIGh3LT5pbnRlbjsKLQlpZiAoISBldmVudHMpIHsKLQkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQkKLQlpZiAoamlmZmllcyAhPSBsYXN0X2lycV9qaWZmeSkKLQkJbG9vcHNfdGhpc19qaWZmeSA9IDA7Ci0JbGFzdF9pcnFfamlmZnkgPSBqaWZmaWVzOwotCi0Jd2hpbGUgKGV2ZW50cyAmJiBjb3VudC0tKSB7Ci0JCWlmICgrK2xvb3BzX3RoaXNfamlmZnkgPiBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSVJRIGhhbmRsZXIgaXMgbG9vcGluZyB0b28gIgotCQkJICAgICAgICJtdWNoISBSZXNldHRpbmcuXG4iLCBkZXYtPm5hbWUpOwotCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBub3cgKi8KLQkJCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7Ci0JCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogQ2hlY2sgdGhlIGNhcmQgaGFzbid0IGJlZW4gcmVtb3ZlZCAqLwotCQlpZiAoISBoZXJtZXNfcHJlc2VudChodykpIHsKLQkJCURFQlVHKDAsICJvcmlub2NvX2ludGVycnVwdCgpOiBjYXJkIHJlbW92ZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1RJQ0spCi0JCQlfX29yaW5vY29fZXZfdGljayhkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9XVEVSUikKLQkJCV9fb3Jpbm9jb19ldl93dGVycihkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9JTkZEUk9QKQotCQkJX19vcmlub2NvX2V2X2luZmRyb3AoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfSU5GTykKLQkJCV9fb3Jpbm9jb19ldl9pbmZvKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1JYKQotCQkJX19vcmlub2NvX2V2X3J4KGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1RYRVhDKQotCQkJX19vcmlub2NvX2V2X3R4ZXhjKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1RYKQotCQkJX19vcmlub2NvX2V2X3R4KGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0FMTE9DKQotCQkJX19vcmlub2NvX2V2X2FsbG9jKGRldiwgaHcpOwotCQkKLQkJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCBldnN0YXQpOwotCi0JCWV2c3RhdCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7Ci0JCWV2ZW50cyA9IGV2c3RhdCAmIGh3LT5pbnRlbjsKLQl9OwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFBvd2VyIG1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgJiYgIWRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKQotc3RhdGljIGludCBvcmlub2NvX3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXIsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBwbV9ldmVudCwKLQkJCSAgICAgICB2b2lkICp1bnVzZWQpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihub3RpZmllciwKLQkJCQkJCSAgICBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLAotCQkJCQkJICAgIHBtX25vdGlmaWVyKTsKLQotCS8qIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGNhY2hlIHRoZSBmaXJtd2FyZSBiZWZvcmUgc3VzcGVuZCwgYW5kCi0JICogcmVsZWFzZSBpdCB3aGVuIHdlIGNvbWUgb3V0LgotCSAqCi0JICogT25seSBuZWVkIHRvIGRvIHRoaXMgaWYgd2UncmUgZG93bmxvYWRpbmcgZmlybXdhcmUuICovCi0JaWYgKCFwcml2LT5kb19md19kb3dubG9hZCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCi0Jc3dpdGNoIChwbV9ldmVudCkgewotCWNhc2UgUE1fSElCRVJOQVRJT05fUFJFUEFSRToKLQljYXNlIFBNX1NVU1BFTkRfUFJFUEFSRToKLQkJb3Jpbm9jb19jYWNoZV9mdyhwcml2LCAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBNX1BPU1RfUkVTVE9SRToKLQkJLyogUmVzdG9yZSBmcm9tIGhpYmVybmF0aW9uIGZhaWxlZC4gV2UgbmVlZCB0byBjbGVhbgotCQkgKiB1cCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSwgc28gZmFsbCB0aHJvdWdoLiAqLwotCWNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKLQljYXNlIFBNX1BPU1RfU1VTUEVORDoKLQkJb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpOwotCQlicmVhazsKLQotCWNhc2UgUE1fUkVTVE9SRV9QUkVQQVJFOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXByaXYtPnBtX25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBvcmlub2NvX3BtX25vdGlmaWVyOwotCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwcml2LT5wbV9ub3RpZmllcik7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJnByaXYtPnBtX25vdGlmaWVyKTsKLX0KLSNlbHNlIC8qICFQTV9TTEVFUCB8fCBIRVJNRVNfQ0FDSEVfRldfT05fSU5JVCAqLwotI2RlZmluZSBvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpIGRvIHsgfSB3aGlsZSgwKQotI2RlZmluZSBvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdikgZG8geyB9IHdoaWxlKDApCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgY29tcF9pZCB7Ci0JdTE2IGlkLCB2YXJpYW50LCBtYWpvciwgbWlub3I7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RhdGljIGlubGluZSBmd3R5cGVfdCBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZShzdHJ1Y3QgY29tcF9pZCAqbmljX2lkKQotewotCWlmIChuaWNfaWQtPmlkIDwgMHg4MDAwKQotCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9BR0VSRTsKLQllbHNlIGlmIChuaWNfaWQtPmlkID09IDB4ODAwMCAmJiBuaWNfaWQtPm1ham9yID09IDApCi0JCXJldHVybiBGSVJNV0FSRV9UWVBFX1NZTUJPTDsKLQllbHNlCi0JCXJldHVybiBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOwotfQotCi0vKiBTZXQgcHJpdi0+ZmlybXdhcmUgdHlwZSwgZGV0ZXJtaW5lIGZpcm13YXJlIHByb3BlcnRpZXMgKi8KLXN0YXRpYyBpbnQgZGV0ZXJtaW5lX2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0Jc3RydWN0IGNvbXBfaWQgbmljX2lkLCBzdGFfaWQ7Ci0JdW5zaWduZWQgaW50IGZpcm12ZXI7Ci0JY2hhciB0bXBbU1lNQk9MX01BWF9WRVJfTEVOKzFdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMikpKTsKLQotCS8qIEdldCB0aGUgaGFyZHdhcmUgdmVyc2lvbiAqLwotCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTklDSUQsICZuaWNfaWQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgaGFyZHdhcmUgaWRlbnRpdHk6IGVycm9yICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWxlMTZfdG9fY3B1cygmbmljX2lkLmlkKTsKLQlsZTE2X3RvX2NwdXMoJm5pY19pZC52YXJpYW50KTsKLQlsZTE2X3RvX2NwdXMoJm5pY19pZC5tYWpvcik7Ci0JbGUxNl90b19jcHVzKCZuaWNfaWQubWlub3IpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogSGFyZHdhcmUgaWRlbnRpdHkgJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBuaWNfaWQuaWQsIG5pY19pZC52YXJpYW50LAotCSAgICAgICBuaWNfaWQubWFqb3IsIG5pY19pZC5taW5vcik7Ci0KLQlwcml2LT5maXJtd2FyZV90eXBlID0gZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoJm5pY19pZCk7Ci0KLQkvKiBHZXQgdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KLQllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NUQUlELCAmc3RhX2lkKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIHN0YXRpb24gaWRlbnRpdHk6IGVycm9yICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWxlMTZfdG9fY3B1cygmc3RhX2lkLmlkKTsKLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC52YXJpYW50KTsKLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC5tYWpvcik7Ci0JbGUxNl90b19jcHVzKCZzdGFfaWQubWlub3IpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogU3RhdGlvbiBpZGVudGl0eSAgJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBzdGFfaWQuaWQsIHN0YV9pZC52YXJpYW50LAotCSAgICAgICBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7Ci0KLQlzd2l0Y2ggKHN0YV9pZC5pZCkgewotCWNhc2UgMHgxNToKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUHJpbWFyeSBmaXJtd2FyZSBpcyBhY3RpdmVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQljYXNlIDB4MTRiOgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUZXJ0aWFyeSBmaXJtd2FyZSBpcyBhY3RpdmVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQljYXNlIDB4MWY6CS8qIEludGVyc2lsLCBBZ2VyZSwgU3ltYm9sIFNwZWN0cnVtMjQgKi8KLQljYXNlIDB4MjE6CS8qIFN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5rbm93biBzdGF0aW9uIElELCBwbGVhc2UgcmVwb3J0XG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogRGVmYXVsdCBjYXBhYmlsaXRpZXMgKi8KLQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAxOwotCXByaXYtPmhhc19td28gPSAwOwotCXByaXYtPmhhc19wcmVhbWJsZSA9IDA7Ci0JcHJpdi0+aGFzX3BvcnQzID0gMTsKLQlwcml2LT5oYXNfaWJzcyA9IDE7Ci0JcHJpdi0+aGFzX3dlcCA9IDA7Ci0JcHJpdi0+aGFzX2JpZ193ZXAgPSAwOwotCXByaXYtPmhhc19hbHRfdHhjbnRsID0gMDsKLQlwcml2LT5oYXNfZXh0X3NjYW4gPSAwOwotCXByaXYtPmhhc193cGEgPSAwOwotCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKLQotCS8qIERldGVybWluZSBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLwotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJLyogTHVjZW50IFdhdmVsYW4gSUVFRSwgTHVjZW50IE9yaW5vY28sIENhYmxldHJvbiBSb2FtQWJvdXQsCi0JCSAgIEVMU0EsIE1lbGNvLCBIUCwgSUJNLCBEZWxsIDExNTAsIENvbXBhcSAxMTAvMjEwICovCi0JCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCi0JCQkgIkx1Y2VudC9BZ2VyZSAlZC4lMDJkIiwgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOwotCi0JCWZpcm12ZXIgPSAoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1ham9yIDw8IDE2KSB8IHN0YV9pZC5taW5vcjsKLQotCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4NjAwMDYpOwotCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7Ci0JCXByaXYtPmhhc19iaWdfd2VwID0gMTsgLyogRklYTUU6IHRoaXMgaXMgd3JvbmcgLSBob3cgZG8gd2UgdGVsbAotCQkJCQkgIEdvbGQgY2FyZHMgZnJvbSB0aGUgb3RoZXJzPyAqLwotCQlwcml2LT5oYXNfbXdvID0gKGZpcm12ZXIgPj0gMHg2MDAwMCk7Ci0JCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4NDAwMjApOyAvKiBEb24ndCB3b3JrIGluIDcuNTIgPyAqLwotCQlwcml2LT5pYnNzX3BvcnQgPSAxOwotCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDgwMDBhKTsKLQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAxOwotCQlwcml2LT5icm9rZW5fbW9uaXRvciA9IChmaXJtdmVyID49IDB4ODAwMDApOwotCQlwcml2LT5oYXNfYWx0X3R4Y250bCA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KLQkJcHJpdi0+aGFzX2V4dF9zY2FuID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLwotCQlwcml2LT5oYXNfd3BhID0gKGZpcm12ZXIgPj0gMHg5MDAyYSk7Ci0JCS8qIFRlc3RlZCB3aXRoIEFnZXJlIGZpcm13YXJlIDoKLQkJICoJMS4xNiA7IDQuMDggOyA0LjUyIDsgNi4wNCA7IDYuMTYgOyA3LjI4ID0+IEplYW4gSUkKLQkJICogVGVzdGVkIENhYmxlVHJvbiBmaXJtd2FyZSA6IDQuMzIgPT4gQW50b24gKi8KLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJLyogU3ltYm9sICwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbCwgRXJpY3Nzb24gV0xBTiAqLwotCQkvKiBJbnRlbCBNQUMgOiAwMDowMjpCMzoqICovCi0JCS8qIDNDb20gTUFDIDogMDA6NTA6REE6KiAqLwotCQltZW1zZXQodG1wLCAwLCBzaXplb2YodG1wKSk7Ci0JCS8qIEdldCB0aGUgU3ltYm9sIGZpcm13YXJlIHZlcnNpb24gKi8KLQkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkgICAgICBIRVJNRVNfUklEX1NFQ09OREFSWVZFUlNJT05fU1lNQk9MLAotCQkJCSAgICAgIFNZTUJPTF9NQVhfVkVSX0xFTiwgTlVMTCwgJnRtcCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IEVycm9yICVkIHJlYWRpbmcgU3ltYm9sIGZpcm13YXJlIGluZm8uIFdpbGRseSBndWVzc2luZyBjYXBhYmlsaXRpZXMuLi5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJZmlybXZlciA9IDA7Ci0JCQl0bXBbMF0gPSAnXDAnOwotCQl9IGVsc2UgewotCQkJLyogVGhlIGZpcm13YXJlIHJldmlzaW9uIGlzIGEgc3RyaW5nLCB0aGUgZm9ybWF0IGlzCi0JCQkgKiBzb21ldGhpbmcgbGlrZSA6ICJWMi4yMC0wMSIuCi0JCQkgKiBRdWljayBhbmQgZGlydHkgcGFyc2luZy4uLiAtIEplYW4gSUkKLQkJCSAqLwotCQkJZmlybXZlciA9ICgodG1wWzFdIC0gJzAnKSA8PCAxNikgfCAoKHRtcFszXSAtICcwJykgPDwgMTIpCi0JCQkJfCAoKHRtcFs0XSAtICcwJykgPDwgOCkgfCAoKHRtcFs2XSAtICcwJykgPDwgNCkKLQkJCQl8ICh0bXBbN10gLSAnMCcpOwotCi0JCQl0bXBbU1lNQk9MX01BWF9WRVJfTEVOXSA9ICdcMCc7Ci0JCX0KLQotCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAotCQkJICJTeW1ib2wgJXMiLCB0bXApOwotCi0JCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7Ci0JCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDE1MDEyKTsKLQkJcHJpdi0+aGFzX2JpZ193ZXAgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKLQkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHgyMDAwMCAmJiBmaXJtdmVyIDwgMHgyMjAwMCkgfHwgCi0JCQkgICAgICAgKGZpcm12ZXIgPj0gMHgyOTAwMCAmJiBmaXJtdmVyIDwgMHgzMDAwMCkgfHwKLQkJCSAgICAgICBmaXJtdmVyID49IDB4MzEwMDA7Ci0JCXByaXYtPmhhc19wcmVhbWJsZSA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5pYnNzX3BvcnQgPSA0OwotCi0JCS8qIFN5bWJvbCBmaXJtd2FyZSBpcyBmb3VuZCBvbiB2YXJpb3VzIGNhcmRzLCBidXQKLQkJICogdGhlcmUgaGFzIGJlZW4gbm8gYXR0ZW1wdCB0byBjaGVjayBmaXJtd2FyZQotCQkgKiBkb3dubG9hZCBvbiBub24tc3BlY3RydW1fY3MgYmFzZWQgY2FyZHMuCi0JCSAqCi0JCSAqIEdpdmVuIHRoYXQgdGhlIEFnZXJlIGZpcm13YXJlIGRvd25sb2FkIHdvcmtzCi0JCSAqIGRpZmZlcmVudGx5LCB3ZSBzaG91bGQgYXZvaWQgZG9pbmcgYSBmaXJtd2FyZQotCQkgKiBkb3dubG9hZCB3aXRoIHRoZSBTeW1ib2wgYWxnb3JpdGhtIG9uIG5vbi1zcGVjdHJ1bQotCQkgKiBjYXJkcy4KLQkJICoKLQkJICogRm9yIG5vdyB3ZSBjYW4gaWRlbnRpZnkgYSBzcGVjdHJ1bV9jcyBiYXNlZCBjYXJkCi0JCSAqIGJlY2F1c2UgaXQgaGFzIGEgZmlybXdhcmUgcmVzZXQgZnVuY3Rpb24uCi0JCSAqLwotCQlwcml2LT5kb19md19kb3dubG9hZCA9IChwcml2LT5zdG9wX2Z3ICE9IE5VTEwpOwotCi0gCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAoZmlybXZlciA9PSAweDI1MDEzKSB8fAotIAkJCQkJICAgKGZpcm12ZXIgPj0gMHgzMDAwMCAmJiBmaXJtdmVyIDw9IDB4MzEwMDApOwotCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDMxMDAxKSB8fAotCQkJCSAgICAgKGZpcm12ZXIgPj0gMHgyOTA1NyAmJiBmaXJtdmVyIDwgMHgzMDAwMCk7Ci0JCS8qIFRlc3RlZCB3aXRoIEludGVsIGZpcm13YXJlIDogMHgyMDAxNSA9PiBKZWFuIElJICovCi0JCS8qIFRlc3RlZCB3aXRoIDNDb20gZmlybXdhcmUgOiAweDE1MDEyICYgMHgyMjAwMSA9PiBKZWFuIElJICovCi0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQkJLyogRC1MaW5rLCBMaW5rc3lzLCBBZHRyb24sIFpvb21BaXIsIGFuZCBtYW55IG90aGVycy4uLgotCQkgKiBTYW1zdW5nLCBDb21wYXEgMTAwLzIwMCBhbmQgUHJveGltIGFyZSBzbGlnaHRseQotCQkgKiBkaWZmZXJlbnQgYW5kIGxlc3Mgd2VsbCB0ZXN0ZWQgKi8KLQkJLyogRC1MaW5rIE1BQyA6IDAwOjQwOjA1OiogKi8KLQkJLyogQWRkdHJvbiBNQUMgOiAwMDo5MDpEMToqICovCi0JCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCi0JCQkgIkludGVyc2lsICVkLiVkLiVkIiwgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IsCi0JCQkgc3RhX2lkLnZhcmlhbnQpOwotCi0JCWZpcm12ZXIgPSAoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1ham9yIDw8IDE2KSB8Ci0JCQkoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1pbm9yIDw8IDgpIHwgc3RhX2lkLnZhcmlhbnQ7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDAwMDcwMCk7IC8qIEZJWE1FICovCi0JCXByaXYtPmhhc19iaWdfd2VwID0gcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MDAwODAwKTsKLQkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOwotCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDAxMDMwMSk7Ci0KLQkJaWYgKGZpcm12ZXIgPj0gMHgwMDA4MDApCi0JCQlwcml2LT5pYnNzX3BvcnQgPSAwOwotCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludGVyc2lsIGZpcm13YXJlIGVhcmxpZXIgIgotCQkJICAgICAgICJ0aGFuIHYwLjgueCAtIHNldmVyYWwgZmVhdHVyZXMgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKLQkJfQotCQlicmVhazsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGaXJtd2FyZSBkZXRlcm1pbmVkIGFzICVzXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIHByaXYtPmZ3X25hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbmlja2J1ZjsKLQl1MTYgcmVjbGVuOwotCWludCBsZW47Ci0KLQkvKiBObyBuZWVkIHRvIGxvY2ssIHRoZSBod191bmF2YWlsYWJsZSBmbGFnIGlzIGFscmVhZHkgc2V0IGluCi0JICogYWxsb2Nfb3Jpbm9jb2RldigpICovCi0JcHJpdi0+bmljYnVmX3NpemUgPSBJRUVFODAyMTFfTUFYX0ZSQU1FX0xFTiArIEVUSF9ITEVOOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgZmlybXdhcmUgKi8KLQllcnIgPSBoZXJtZXNfaW5pdChodyk7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBpbml0aWFsaXplIGZpcm13YXJlIChlcnIgPSAlZClcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOwotCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPmRvX2Z3X2Rvd25sb2FkKSB7Ci0jaWZkZWYgQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUCi0JCW9yaW5vY29fY2FjaGVfZncocHJpdiwgMCk7Ci0jZW5kaWYKLQotCQllcnIgPSBvcmlub2NvX2Rvd25sb2FkKHByaXYpOwotCQlpZiAoZXJyKQotCQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOwotCi0JCS8qIENoZWNrIGZpcm13YXJlIHZlcnNpb24gYWdhaW4gKi8KLQkJZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7Ci0JCWlmIChlcnIgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+aGFzX3BvcnQzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkLWhvYyBkZW1vIG1vZGUgc3VwcG9ydGVkXG4iLCBkZXYtPm5hbWUpOwotCWlmIChwcml2LT5oYXNfaWJzcykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJRUVFIHN0YW5kYXJkIElCU1MgYWQtaG9jIG1vZGUgc3VwcG9ydGVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQlpZiAocHJpdi0+aGFzX3dlcCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdFUCBzdXBwb3J0ZWQsICIsIGRldi0+bmFtZSk7Ci0JCWlmIChwcml2LT5oYXNfYmlnX3dlcCkKLQkJCXByaW50aygiMTA0LWJpdCBrZXlcbiIpOwotCQllbHNlCi0JCQlwcmludGsoIjQwLWJpdCBrZXlcbiIpOwotCX0KLQlpZiAocHJpdi0+aGFzX3dwYSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdQQS1QU0sgc3VwcG9ydGVkXG4iLCBkZXYtPm5hbWUpOwotCQlpZiAob3Jpbm9jb19taWNfaW5pdChwcml2KSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHNldHVwIE1JQyBjcnlwdG8gIgotCQkJICAgICAgICJhbGdvcml0aG0uIERpc2FibGluZyBXUEEgc3VwcG9ydFxuIiwgZGV2LT5uYW1lKTsKLQkJCXByaXYtPmhhc193cGEgPSAwOwotCQl9Ci0JfQotCi0JLyogTm93IHdlIGhhdmUgdGhlIGZpcm13YXJlIGNhcGFiaWxpdGllcywgYWxsb2NhdGUgYXBwcm9waWF0ZQotCSAqIHNpemVkIHNjYW4gYnVmZmVycyAqLwotCWlmIChvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHByaXYpKQotCQlnb3RvIG91dDsKLQlvcmlub2NvX2Jzc19kYXRhX2luaXQocHJpdik7Ci0KLQkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAotCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGRldi0+ZGV2X2FkZHIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGFkZHJlc3MgJXBNXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOwotCi0JLyogR2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCi0JCQkgICAgICBzaXplb2Yobmlja2J1ZiksICZyZWNsZW4sICZuaWNrYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHN0YXRpb24gbmFtZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobmlja2J1Zi5sZW4pCi0JCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgKGludClsZTE2X3RvX2NwdShuaWNrYnVmLmxlbikpOwotCWVsc2UKLQkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAyICogcmVjbGVuKTsKLQltZW1jcHkocHJpdi0+bmljaywgJm5pY2tidWYudmFsLCBsZW4pOwotCXByaXYtPm5pY2tbbGVuXSA9ICdcMCc7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gbmFtZSBcIiVzXCJcbiIsIGRldi0+bmFtZSwgcHJpdi0+bmljayk7Ci0KLQllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIE5JQyBidWZmZXIhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IGFsbG93ZWQgY2hhbm5lbHMgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DSEFOTkVMTElTVCwKLQkJCQkgICZwcml2LT5jaGFubmVsX21hc2spOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgY2hhbm5lbCBsaXN0IVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCBpbml0aWFsIEFQIGRlbnNpdHkgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKLQkJCQkgICZwcml2LT5hcF9kZW5zaXR5KTsKLQlpZiAoZXJyIHx8IHByaXYtPmFwX2RlbnNpdHkgPCAxIHx8IHByaXYtPmFwX2RlbnNpdHkgPiAzKSB7Ci0JCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDA7Ci0JfQotCi0JLyogR2V0IGluaXRpYWwgUlRTIHRocmVzaG9sZCAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKLQkJCQkgICZwcml2LT5ydHNfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIFJUUyB0aHJlc2hvbGQhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IGluaXRpYWwgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyAqLwotCWlmIChwcml2LT5oYXNfbXdvKQotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKLQkJCQkJICAmcHJpdi0+bXdvX3JvYnVzdCk7Ci0JZWxzZQotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAotCQkJCQkgICZwcml2LT5mcmFnX3RocmVzaCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBmcmFnbWVudGF0aW9uIHNldHRpbmdzIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFBvd2VyIG1hbmFnZW1lbnQgc2V0dXAgKi8KLQlpZiAocHJpdi0+aGFzX3BtKSB7Ci0JCXByaXYtPnBtX29uID0gMDsKLQkJcHJpdi0+cG1fbWNhc3QgPSAxOwotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sCi0JCQkJCSAgJnByaXYtPnBtX3BlcmlvZCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgcGVyaW9kIVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCi0JCQkJCSAgJnByaXYtPnBtX3RpbWVvdXQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50IHRpbWVvdXQhXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCS8qIFByZWFtYmxlIHNldHVwICovCi0JaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgewotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORlBSRUFNQkxFX1NZTUJPTCwKLQkJCQkJICAmcHJpdi0+cHJlYW1ibGUpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCQkKLQkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOwotCS8qIEJ5IGRlZmF1bHQgdXNlIElFRUUvSUJTUyBhZC1ob2MgbW9kZSBpZiB3ZSBoYXZlIGl0ICovCi0JcHJpdi0+cHJlZmVyX3BvcnQzID0gcHJpdi0+aGFzX3BvcnQzICYmICghIHByaXYtPmhhc19pYnNzKTsKLQlzZXRfcG9ydF90eXBlKHByaXYpOwotCXByaXYtPmNoYW5uZWwgPSAwOyAvKiB1c2UgZmlybXdhcmUgZGVmYXVsdCAqLwotCi0JcHJpdi0+cHJvbWlzY3VvdXMgPSAwOwotCXByaXYtPmVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7Ci0JcHJpdi0+dHhfa2V5ID0gMDsKLQlwcml2LT53cGFfZW5hYmxlZCA9IDA7Ci0JcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAwOwotCXByaXYtPmtleV9tZ210ID0gMDsKLQlwcml2LT53cGFfaWVfbGVuID0gMDsKLQlwcml2LT53cGFfaWUgPSBOVUxMOwotCi0JLyogTWFrZSB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlLCBhcyBsb25nIGFzIGl0IGhhc24ndCBiZWVuCi0JICogcmVtb3ZlZCBlbHNld2hlcmUgKGUuZy4gYnkgUENNQ0lBIGhvdCB1bnBsdWcpICovCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKLQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWFkeVxuIiwgZGV2LT5uYW1lKTsKLQotIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdHJ1Y3QgbmV0X2RldmljZQotKmFsbG9jX29yaW5vY29kZXYoaW50IHNpemVvZl9jYXJkLAotCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKLQkJICBpbnQgKCpoYXJkX3Jlc2V0KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICopLAotCQkgIGludCAoKnN0b3BfZncpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiwgaW50KSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7Ci0KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkgKyBzaXplb2ZfY2FyZCk7Ci0JaWYgKCEgZGV2KQotCQlyZXR1cm4gTlVMTDsKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcml2LT5uZGV2ID0gZGV2OwotCWlmIChzaXplb2ZfY2FyZCkKLQkJcHJpdi0+Y2FyZCA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXByaXYKLQkJCQkgICAgICArIHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlKSk7Ci0JZWxzZQotCQlwcml2LT5jYXJkID0gTlVMTDsKLQlwcml2LT5kZXYgPSBkZXZpY2U7Ci0KLQkvKiBTZXR1cCAvIG92ZXJyaWRlIG5ldF9kZXZpY2UgZmllbGRzICovCi0JZGV2LT5pbml0ID0gb3Jpbm9jb19pbml0OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gb3Jpbm9jb194bWl0OwotCWRldi0+dHhfdGltZW91dCA9IG9yaW5vY29fdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7IC8qIDEgc2Vjb25kIHRpbWVvdXQgKi8KLQlkZXYtPmdldF9zdGF0cyA9IG9yaW5vY29fZ2V0X3N0YXRzOwotCWRldi0+ZXRodG9vbF9vcHMgPSAmb3Jpbm9jb19ldGh0b29sX29wczsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZvcmlub2NvX2hhbmRsZXJfZGVmOwotI2lmZGVmIFdJUkVMRVNTX1NQWQotCXByaXYtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmcHJpdi0+c3B5X2RhdGE7Ci0JZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7Ci0jZW5kaWYKLQlkZXYtPmNoYW5nZV9tdHUgPSBvcmlub2NvX2NoYW5nZV9tdHU7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdDsKLQkvKiB3ZSB1c2UgdGhlIGRlZmF1bHQgZXRoX21hY19hZGRyIGZvciBzZXR0aW5nIHRoZSBNQUMgYWRkciAqLwotCi0JLyogUmVzZXJ2ZSBzcGFjZSBpbiBza2IgZm9yIHRoZSBTTkFQIGhlYWRlciAqLwotCWRldi0+aGFyZF9oZWFkZXJfbGVuICs9IEVOQ0FQU19PVkVSSEVBRDsKLQotCS8qIFNldCB1cCBkZWZhdWx0IGNhbGxiYWNrcyAqLwotCWRldi0+b3BlbiA9IG9yaW5vY29fb3BlbjsKLQlkZXYtPnN0b3AgPSBvcmlub2NvX3N0b3A7Ci0JcHJpdi0+aGFyZF9yZXNldCA9IGhhcmRfcmVzZXQ7Ci0JcHJpdi0+c3RvcF9mdyA9IHN0b3BfZnc7Ci0KLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0JcHJpdi0+b3BlbiA9IDA7Ci0JcHJpdi0+aHdfdW5hdmFpbGFibGUgPSAxOyAvKiBvcmlub2NvX2luaXQoKSBtdXN0IGNsZWFyIHRoaXMKLQkJCQkgICAqIGJlZm9yZSBhbnl0aGluZyBlbHNlIHRvdWNoZXMgdGhlCi0JCQkJICAgKiBoYXJkd2FyZSAqLwotCUlOSVRfV09SSygmcHJpdi0+cmVzZXRfd29yaywgb3Jpbm9jb19yZXNldCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5qb2luX3dvcmssIG9yaW5vY29fam9pbl9hcCk7Ci0JSU5JVF9XT1JLKCZwcml2LT53ZXZlbnRfd29yaywgb3Jpbm9jb19zZW5kX3dldmVudHMpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPnJ4X2xpc3QpOwotCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgb3Jpbm9jb19yeF9pc3JfdGFza2xldCwKLQkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOwotCi0JcHJpdi0+Y2FjaGVkX3ByaV9mdyA9IE5VTEw7Ci0JcHJpdi0+Y2FjaGVkX2Z3ID0gTlVMTDsKLQotCS8qIFJlZ2lzdGVyIFBNIG5vdGlmaWVycyAqLwotCW9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7Ci0KLQlyZXR1cm4gZGV2OwotfQotCi12b2lkIGZyZWVfb3Jpbm9jb2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGEsICp0ZW1wOwotCi0JLyogSWYgdGhlIHRhc2tsZXQgaXMgc2NoZWR1bGVkIHdoZW4gd2UgY2FsbCB0YXNrbGV0X2tpbGwgaXQKLQkgKiB3aWxsIHJ1biBvbmUgZmluYWwgdGltZS4gSG93ZXZlciB0aGUgdGFza2xldCB3aWxsIG9ubHkKLQkgKiBkcmFpbiBwcml2LT5yeF9saXN0IGlmIHRoZSBodyBpcyBzdGlsbCBhdmFpbGFibGUuICovCi0JdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKLQotCS8qIEV4cGxpY2l0bHkgZHJhaW4gcHJpdi0+cnhfbGlzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyeF9kYXRhLCB0ZW1wLCAmcHJpdi0+cnhfbGlzdCwgbGlzdCkgewotCQlsaXN0X2RlbCgmcnhfZGF0YS0+bGlzdCk7Ci0KLQkJZGV2X2tmcmVlX3NrYihyeF9kYXRhLT5za2IpOwotCQlrZnJlZShyeF9kYXRhLT5kZXNjKTsKLQkJa2ZyZWUocnhfZGF0YSk7Ci0JfQotCi0Jb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOwotCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKLQotCXByaXYtPndwYV9pZV9sZW4gPSAwOwotCWtmcmVlKHByaXYtPndwYV9pZSk7Ci0Jb3Jpbm9jb19taWNfZnJlZShwcml2KTsKLQlvcmlub2NvX2Jzc19kYXRhX2ZyZWUocHJpdik7Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBSZXR1cm4gOiA8IDAgLT4gZXJyb3IgY29kZSA7ID49IDAgLT4gbGVuZ3RoICovCi1zdGF0aWMgaW50IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYWN0aXZlLAotCQkJCWNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdKQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGVzc2lkYnVmOwotCWNoYXIgKnAgPSAoY2hhciAqKSgmZXNzaWRidWYudmFsKTsKLQlpbnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPiAwKSB7Ci0JCS8qIFdlIHJlYWQgdGhlIGRlc2lyZWQgU1NJRCBmcm9tIHRoZSBoYXJkd2FyZSByYXRoZXIKLQkJICAgdGhhbiBmcm9tIHByaXYtPmRlc2lyZWRfZXNzaWQsIGp1c3QgaW4gY2FzZSB0aGUKLQkJICAgZmlybXdhcmUgaXMgYWxsb3dlZCB0byBjaGFuZ2UgaXQgb24gdXMuIEknbSBub3QKLQkJICAgc3VyZSBhYm91dCB0aGlzICovCi0JCS8qIE15IGd1ZXNzIGlzIHRoYXQgdGhlIE9XTlNTSUQgc2hvdWxkIGFsd2F5cyBiZSB3aGF0ZXZlcgotCQkgKiB3ZSBzZXQgdG8gdGhlIGNhcmQsIHdoZXJlYXMgQ1VSUkVOVF9TU0lEIGlzIHRoZSBvbmUgdGhhdAotCQkgKiBtYXkgY2hhbmdlLi4uIC0gSmVhbiBJSSAqLwotCQl1MTYgcmlkOwotCi0JCSphY3RpdmUgPSAxOwotCi0JCXJpZCA9IChwcml2LT5wb3J0X3R5cGUgPT0gMykgPyBIRVJNRVNfUklEX0NORk9XTlNTSUQgOgotCQkJSEVSTUVTX1JJRF9DTkZERVNJUkVEU1NJRDsKLQkJCi0JCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIHJpZCwgc2l6ZW9mKGVzc2lkYnVmKSwKLQkJCQkgICAgICBOVUxMLCAmZXNzaWRidWYpOwotCQlpZiAoZXJyKQotCQkJZ290byBmYWlsX3VubG9jazsKLQl9IGVsc2UgewotCQkqYWN0aXZlID0gMDsKLQotCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRTU0lELAotCQkJCSAgICAgIHNpemVvZihlc3NpZGJ1ZiksIE5VTEwsICZlc3NpZGJ1Zik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZhaWxfdW5sb2NrOwotCX0KLQotCWxlbiA9IGxlMTZfdG9fY3B1KGVzc2lkYnVmLmxlbik7Ci0JQlVHX09OKGxlbiA+IElXX0VTU0lEX01BWF9TSVpFKTsKLQotCW1lbXNldChidWYsIDAsIElXX0VTU0lEX01BWF9TSVpFKTsKLQltZW1jcHkoYnVmLCBwLCBsZW4pOwotCWVyciA9IGxlbjsKLQotIGZhaWxfdW5sb2NrOgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOyAgICAgICAKLX0KLQotc3RhdGljIGxvbmcgb3Jpbm9jb19od19nZXRfZnJlcShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCQotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1MTYgY2hhbm5lbDsKLQlsb25nIGZyZXEgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQkKLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQ0hBTk5FTCwgJmNoYW5uZWwpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JLyogSW50ZXJzaWwgZmlybXdhcmUgMS4zLjUgcmV0dXJucyAwIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKGNoYW5uZWwgPT0gMCkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICggKGNoYW5uZWwgPCAxKSB8fCAoY2hhbm5lbCA+IE5VTV9DSEFOTkVMUykgKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDaGFubmVsIG91dCBvZiByYW5nZSAoJWQpIVxuIiwKLQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGNoYW5uZWwpOwotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCi0JfQotCWZyZXEgPSBjaGFubmVsX2ZyZXF1ZW5jeVtjaGFubmVsLTFdICogMTAwMDAwOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlpZiAoZXJyID4gMCkKLQkJZXJyID0gLUVCVVNZOwotCXJldHVybiBlcnIgPyBlcnIgOiBmcmVxOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJICAgICAgaW50ICpudW1yYXRlcywgczMyICpyYXRlcywgaW50IG1heCkKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBsaXN0OwotCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZsaXN0LnZhbDsKLQlpbnQgZXJyID0gMDsKLQlpbnQgbnVtOwotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1VQUE9SVEVEREFUQVJBVEVTLAotCQkJICAgICAgc2l6ZW9mKGxpc3QpLCBOVUxMLCAmbGlzdCk7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JCi0JbnVtID0gbGUxNl90b19jcHUobGlzdC5sZW4pOwotCSpudW1yYXRlcyA9IG51bTsKLQludW0gPSBtaW4obnVtLCBtYXgpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCXJhdGVzW2ldID0gKHBbaV0gJiAweDdmKSAqIDUwMDAwMDsgLyogY29udmVydCB0byBicHMgKi8KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG5hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgY2hhciAqbmFtZSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IG51bXJhdGVzOwotCWludCBlcnI7Ci0KLQllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsIE5VTEwsIDApOwotCi0JaWYgKCFlcnIgJiYgKG51bXJhdGVzID4gMikpCi0JCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTFiIik7Ci0JZWxzZQotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExLURTIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyLAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdGF0aWMgY29uc3QgdTggb2ZmX2FkZHJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCXN0YXRpYyBjb25zdCB1OCBhbnlfYWRkcltdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIEVuYWJsZSBhdXRvbWF0aWMgcm9hbWluZyAtIG5vIHNhbml0eSBjaGVja3MgYXJlIG5lZWRlZCAqLwotCWlmIChtZW1jbXAoJmFwX2FkZHItPnNhX2RhdGEsIG9mZl9hZGRyLCBFVEhfQUxFTikgPT0gMCB8fAotCSAgICBtZW1jbXAoJmFwX2FkZHItPnNhX2RhdGEsIGFueV9hZGRyLCBFVEhfQUxFTikgPT0gMCkgewotCQlwcml2LT5ic3NpZF9maXhlZCA9IDA7Ci0JCW1lbXNldChwcml2LT5kZXNpcmVkX2Jzc2lkLCAwLCBFVEhfQUxFTik7Ci0KLQkJLyogIm9mZiIgbWVhbnMga2VlcCBleGlzdGluZyBjb25uZWN0aW9uICovCi0JCWlmIChhcF9hZGRyLT5zYV9kYXRhWzBdID09IDApIHsKLQkJCV9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOwotCQkJZXJyID0gMDsKLQkJfQotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBMdWNlbnQvQWdlcmUgZmlybXdhcmUgZG9lc24ndCAiCi0JCSAgICAgICAic3VwcG9ydCBtYW51YWwgcm9hbWluZ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNYW51YWwgcm9hbWluZyBzdXBwb3J0ZWQgb25seSBpbiAiCi0JCSAgICAgICAibWFuYWdlZCBtb2RlXG4iLCBkZXYtPm5hbWUpOwotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogSW50ZXJzaWwgZmlybXdhcmUgaGFuZ3Mgd2l0aG91dCBEZXNpcmVkIEVTU0lEICovCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9JTlRFUlNJTCAmJgotCSAgICBzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRGVzaXJlZCBFU1NJRCBtdXN0IGJlIHNldCBmb3IgIgotCQkgICAgICAgIm1hbnVhbCByb2FtaW5nXG4iLCBkZXYtPm5hbWUpOwotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogRmluYWxseSwgZW5hYmxlIG1hbnVhbCByb2FtaW5nICovCi0JcHJpdi0+YnNzaWRfZml4ZWQgPSAxOwotCW1lbWNweShwcml2LT5kZXNpcmVkX2Jzc2lkLCAmYXBfYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyLAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRCU1NJRCwKLQkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBhcF9hZGRyLT5zYV9kYXRhKTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1MzIgKm1vZGUsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChwcml2LT5pd19tb2RlID09ICptb2RlKQotCQlyZXR1cm4gMDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoICgqbW9kZSkgewotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJaWYgKCFwcml2LT5oYXNfaWJzcyAmJiAhcHJpdi0+aGFzX3BvcnQzKQotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19NT0RFX0lORlJBOgotCQlicmVhazsKLQotCWNhc2UgSVdfTU9ERV9NT05JVE9SOgotCQlpZiAocHJpdi0+YnJva2VuX21vbml0b3IgJiYgIWZvcmNlX21vbml0b3IpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNb25pdG9yIG1vZGUgc3VwcG9ydCBpcyAiCi0JCQkgICAgICAgImJ1Z2d5IGluIHRoaXMgZmlybXdhcmUsIG5vdCBlbmFibGluZ1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJcHJpdi0+aXdfbW9kZSA9ICptb2RlOwotCQlzZXRfcG9ydF90eXBlKHByaXYpOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1MzIgKm1vZGUsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JKm1vZGUgPSBwcml2LT5pd19tb2RlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKnJycSwKLQkJCQkgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7Ci0JaW50IG51bXJhdGVzOwotCWludCBpLCBrOwotCi0JcnJxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKLQltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKLQotCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIyOwotCi0JLyogU2V0IGF2YWlsYWJsZSBjaGFubmVscy9mcmVxdWVuY2llcyAqLwotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBOVU1fQ0hBTk5FTFM7Ci0JayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmIChwcml2LT5jaGFubmVsX21hc2sgJiAoMSA8PCBpKSkgewotCQkJcmFuZ2UtPmZyZXFba10uaSA9IGkgKyAxOwotCQkJcmFuZ2UtPmZyZXFba10ubSA9IGNoYW5uZWxfZnJlcXVlbmN5W2ldICogMTAwMDAwOwotCQkJcmFuZ2UtPmZyZXFba10uZSA9IDE7Ci0JCQlrKys7Ci0JCX0KLQkJCi0JCWlmIChrID49IElXX01BWF9GUkVRVUVOQ0lFUykKLQkJCWJyZWFrOwotCX0KLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7Ci0JcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsKLQotCWlmIChwcml2LT5oYXNfd2VwKSB7Ci0JCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gT1JJTk9DT19NQVhfS0VZUzsKLQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSBTTUFMTF9LRVlfU0laRTsKLQkJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDE7Ci0KLQkJaWYgKHByaXYtPmhhc19iaWdfd2VwKSB7Ci0JCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IExBUkdFX0tFWV9TSVpFOwotCQkJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+aGFzX3dwYSkKLQkJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVA7Ci0KLQlpZiAoKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgJiYgKCFTUFlfTlVNQkVSKHByaXYpKSl7Ci0JCS8qIFF1YWxpdHkgc3RhdHMgbWVhbmluZ2xlc3MgaW4gYWQtaG9jIG1vZGUgKi8KLQl9IGVsc2UgewotCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDB4OGIgLSAweDJmOwotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAweDJmIC0gMHg5NSAtIDE7Ci0JCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDB4MmYgLSAweDk1IC0gMTsKLQkJLyogTmVlZCB0byBnZXQgYmV0dGVyIHZhbHVlcyAqLwotCQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDB4MjQ7Ci0JCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IDB4QzI7Ci0JCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDB4OUU7Ci0JfQotCi0JZXJyID0gb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3QocHJpdiwgJm51bXJhdGVzLAotCQkJCQkgcmFuZ2UtPmJpdHJhdGUsIElXX01BWF9CSVRSQVRFUyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlyYW5nZS0+bnVtX2JpdHJhdGVzID0gbnVtcmF0ZXM7Ci0KLQkvKiBTZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbWF4IFRDUCB0aHJvdWdocHV0IGluIGJpdC9zIHRoYXQgd2UgY2FuCi0JICogZXhwZWN0IHVzaW5nIHRoaXMgaW50ZXJmYWNlLiBNYXkgYmUgdXNlIGZvciBRb1Mgc3R1ZmYuLi4KLQkgKiBKZWFuIElJICovCi0JaWYgKG51bXJhdGVzID4gMikKLQkJcmFuZ2UtPnRocm91Z2hwdXQgPSA1ICogMTAwMCAqIDEwMDA7CS8qIH41IE1iL3MgKi8KLQllbHNlCi0JCXJhbmdlLT50aHJvdWdocHV0ID0gMS41ICogMTAwMCAqIDEwMDA7CS8qIH4xLjUgTWIvcyAqLwotCi0JcmFuZ2UtPm1pbl9ydHMgPSAwOwotCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKLQlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7Ci0JcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKLQotCXJhbmdlLT5taW5fcG1wID0gMDsKLQlyYW5nZS0+bWF4X3BtcCA9IDY1NTM1MDAwOwotCXJhbmdlLT5taW5fcG10ID0gMDsKLQlyYW5nZS0+bWF4X3BtdCA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCi0JcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKLQlyYW5nZS0+cG10X2ZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKLQlyYW5nZS0+cG1fY2FwYSA9IElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX1RJTUVPVVQgfCBJV19QT1dFUl9VTklDQVNUX1I7Ci0KLQlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTElGRVRJTUU7Ci0JcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0JcmFuZ2UtPnJfdGltZV9mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOwotCXJhbmdlLT5taW5fcmV0cnkgPSAwOwotCXJhbmdlLT5tYXhfcmV0cnkgPSA2NTUzNTsJLyogPz8/ICovCi0JcmFuZ2UtPm1pbl9yX3RpbWUgPSAwOwotCXJhbmdlLT5tYXhfcl90aW1lID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KLQotCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpCi0JCXJhbmdlLT5zY2FuX2NhcGEgPSBJV19TQ0FOX0NBUEFfRVNTSUQ7Ci0JZWxzZQotCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX05PTkU7Ci0KLQkvKiBFdmVudCBjYXBhYmlsaXR5IChrZXJuZWwpICovCi0JSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKLQkvKiBFdmVudCBjYXBhYmlsaXR5IChkcml2ZXIpICovCi0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdUSFJTUFkpOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIElXRVZUWERST1ApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLAotCQkJCSAgICAgY2hhciAqa2V5YnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JaW50IHNldGluZGV4ID0gcHJpdi0+dHhfa2V5OwotCWludCBlbmNvZGVfYWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKLQlpbnQgcmVzdHJpY3RlZCA9IHByaXYtPndlcF9yZXN0cmljdDsKLQl1MTYgeGxlbiA9IDA7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEgcHJpdi0+aGFzX3dlcCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKGVycS0+cG9pbnRlcikgewotCQkvKiBXZSBhY3R1YWxseSBoYXZlIGEga2V5IHRvIHNldCAtIGNoZWNrIGl0cyBsZW5ndGggKi8KLQkJaWYgKGVycS0+bGVuZ3RoID4gTEFSR0VfS0VZX1NJWkUpCi0JCQlyZXR1cm4gLUUyQklHOwotCi0JCWlmICggKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpICYmICFwcml2LT5oYXNfYmlnX3dlcCApCi0JCQlyZXR1cm4gLUUyQklHOwotCX0KLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogQ2xlYXIgYW55IFRLSVAga2V5IHdlIGhhdmUgKi8KLQlpZiAoKHByaXYtPmhhc193cGEpICYmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkpCi0JCSh2b2lkKSBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHByaXYsIHNldGluZGV4KTsKLQotCWlmIChlcnEtPmxlbmd0aCA+IDApIHsKLQkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkKLQkJCWluZGV4ID0gcHJpdi0+dHhfa2V5OwotCi0JCS8qIEFkanVzdCBrZXkgbGVuZ3RoIHRvIGEgc3VwcG9ydGVkIHZhbHVlICovCi0JCWlmIChlcnEtPmxlbmd0aCA+IFNNQUxMX0tFWV9TSVpFKSB7Ci0JCQl4bGVuID0gTEFSR0VfS0VZX1NJWkU7Ci0JCX0gZWxzZSBpZiAoZXJxLT5sZW5ndGggPiAwKSB7Ci0JCQl4bGVuID0gU01BTExfS0VZX1NJWkU7Ci0JCX0gZWxzZQotCQkJeGxlbiA9IDA7Ci0KLQkJLyogU3dpdGNoIG9uIFdFUCBpZiBvZmYgKi8KLQkJaWYgKChlbmNvZGVfYWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKSAmJiAoeGxlbiA+IDApKSB7Ci0JCQlzZXRpbmRleCA9IGluZGV4OwotCQkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfV0VQOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSW1wb3J0YW50IG5vdGUgOiBpZiB0aGUgdXNlciBkbyAiaXdjb25maWcgZXRoMCBlbmMgb2ZmIiwKLQkJICogd2Ugd2lsbCBhcnJpdmUgdGhlcmUgd2l0aCBhbiBpbmRleCBvZiAtMS4gVGhpcyBpcyB2YWxpZAotCQkgKiBidXQgbmVlZCB0byBiZSB0YWtlbiBjYXJlIG9mZi4uLiBKZWFuIElJICovCi0JCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpIHsKLQkJCWlmKChpbmRleCAhPSAtMSkgfHwgKGVycS0+ZmxhZ3MgPT0gMCkpIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogU2V0IHRoZSBpbmRleCA6IENoZWNrIHRoYXQgdGhlIGtleSBpcyB2YWxpZCAqLwotCQkJaWYocHJpdi0+a2V5c1tpbmRleF0ubGVuID09IDApIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJc2V0aW5kZXggPSBpbmRleDsKLQkJfQotCX0KLQotCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQotCQllbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOwotCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCi0JCXJlc3RyaWN0ZWQgPSAwOwotCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCi0JCXJlc3RyaWN0ZWQgPSAxOwotCi0JaWYgKGVycS0+cG9pbnRlciAmJiBlcnEtPmxlbmd0aCA+IDApIHsKLQkJcHJpdi0+a2V5c1tpbmRleF0ubGVuID0gY3B1X3RvX2xlMTYoeGxlbik7Ci0JCW1lbXNldChwcml2LT5rZXlzW2luZGV4XS5kYXRhLCAwLAotCQkgICAgICAgc2l6ZW9mKHByaXYtPmtleXNbaW5kZXhdLmRhdGEpKTsKLQkJbWVtY3B5KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIGtleWJ1ZiwgZXJxLT5sZW5ndGgpOwotCX0KLQlwcml2LT50eF9rZXkgPSBzZXRpbmRleDsKLQotCS8qIFRyeSBmYXN0IGtleSBjaGFuZ2UgaWYgY29ubmVjdGVkIGFuZCBvbmx5IGtleXMgYXJlIGNoYW5nZWQgKi8KLQlpZiAoKHByaXYtPmVuY29kZV9hbGcgPT0gZW5jb2RlX2FsZykgJiYKLQkgICAgKHByaXYtPndlcF9yZXN0cmljdCA9PSByZXN0cmljdGVkKSAmJgotCSAgICBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJZXJyID0gX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMocHJpdik7Ci0JCS8qIE5vIG5lZWQgdG8gY29tbWl0IGlmIHN1Y2Nlc3NmdWwgKi8KLQkJZ290byBvdXQ7Ci0JfQotCi0JcHJpdi0+ZW5jb2RlX2FsZyA9IGVuY29kZV9hbGc7Ci0JcHJpdi0+d2VwX3Jlc3RyaWN0ID0gcmVzdHJpY3RlZDsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGl3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsCi0JCQkJICAgICBjaGFyICprZXlidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQl1MTYgeGxlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghIHByaXYtPmhhc193ZXApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkKLQkJaW5kZXggPSBwcml2LT50eF9rZXk7Ci0KLQllcnEtPmZsYWdzID0gMDsKLQlpZiAoIXByaXYtPmVuY29kZV9hbGcpCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCWVycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOwotCi0JaWYgKHByaXYtPndlcF9yZXN0cmljdCkKLQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKLQllbHNlCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47Ci0KLQl4bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1tpbmRleF0ubGVuKTsKLQotCWVycS0+bGVuZ3RoID0geGxlbjsKLQotCW1lbWNweShrZXlidWYsIHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAotCQkJCSAgY2hhciAqZXNzaWRidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIE5vdGUgOiBFU1NJRCBpcyBpZ25vcmVkIGluIEFkLUhvYyBkZW1vIG1vZGUsIGJ1dCB3ZSBjYW4gc2V0IGl0Ci0JICogYW55d2F5Li4uIC0gSmVhbiBJSSAqLwotCi0JLyogSHVtLi4uIFNob3VsZCBub3QgdXNlIFdpcmVsZXNzIEV4dGVuc2lvbiBjb25zdGFudCAobWF5IGNoYW5nZSksCi0JICogc2hvdWxkIHVzZSBvdXIgb3duLi4uIC0gSmVhbiBJSSAqLwotCWlmIChlcnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQotCQlyZXR1cm4gLUUyQklHOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBOVUxMIHRoZSBzdHJpbmcgKGZvciBOVUxMIHRlcm1pbmF0aW9uICYgRVNTSUQgPSBBTlkpIC0gSmVhbiBJSSAqLwotCW1lbXNldChwcml2LT5kZXNpcmVkX2Vzc2lkLCAwLCBzaXplb2YocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOwotCi0JLyogSWYgbm90IEFOWSwgZ2V0IHRoZSBuZXcgRVNTSUQgKi8KLQlpZiAoZXJxLT5mbGFncykgewotCQltZW1jcHkocHJpdi0+ZGVzaXJlZF9lc3NpZCwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKTsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCi0JCQkJICBjaGFyICplc3NpZGJ1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgYWN0aXZlOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWVyciA9IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHByaXYsICZhY3RpdmUsIGVzc2lkYnVmKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQllcnEtPmxlbmd0aCA9IGVycjsKLQl9IGVsc2UgewotCQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJCXJldHVybiAtRUJVU1k7Ci0JCW1lbWNweShlc3NpZGJ1ZiwgcHJpdi0+ZGVzaXJlZF9lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOwotCQllcnEtPmxlbmd0aCA9IHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKTsKLQkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQl9Ci0KLQllcnEtPmZsYWdzID0gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0bmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKm5ycSwKLQkJCQkgY2hhciAqbmlja2J1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG5ycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCi0JCXJldHVybiAtRTJCSUc7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW1lbXNldChwcml2LT5uaWNrLCAwLCBzaXplb2YocHJpdi0+bmljaykpOwotCW1lbWNweShwcml2LT5uaWNrLCBuaWNrYnVmLCBucnEtPmxlbmd0aCk7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCi0JCQkJIGNoYXIgKm5pY2tidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbWVtY3B5KG5pY2tidWYsIHByaXYtPm5pY2ssIElXX0VTU0lEX01BWF9TSVpFKTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JbnJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X2ZyZXEgKmZycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGNoYW4gPSAtMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0KLQkvKiBJbiBpbmZyYXN0cnVjdHVyZSBtb2RlIHRoZSBBUCBzZXRzIHRoZSBjaGFubmVsICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICggKGZycS0+ZSA9PSAwKSAmJiAoZnJxLT5tIDw9IDEwMDApICkgewotCQkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCi0JCWNoYW4gPSBmcnEtPm07Ci0JfSBlbHNlIHsKLQkJLyogU2V0dGluZyBieSBmcmVxdWVuY3kgLSBzZWFyY2ggdGhlIHRhYmxlICovCi0JCWludCBtdWx0ID0gMTsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8ICg2IC0gZnJxLT5lKTsgaSsrKQotCQkJbXVsdCAqPSAxMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspCi0JCQlpZiAoZnJxLT5tID09IChjaGFubmVsX2ZyZXF1ZW5jeVtpXSAqIG11bHQpKQotCQkJCWNoYW4gPSBpKzE7Ci0JfQotCi0JaWYgKCAoY2hhbiA8IDEpIHx8IChjaGFuID4gTlVNX0NIQU5ORUxTKSB8fAotCSAgICAgISAocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgKGNoYW4tMSkpICkgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcHJpdi0+Y2hhbm5lbCA9IGNoYW47Ci0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCS8qIEZhc3QgY2hhbm5lbCBjaGFuZ2UgLSBubyBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLwotCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAotCQkJCQkgICAgSEVSTUVTX1RFU1RfU0VUX0NIQU5ORUwsCi0JCQkJCWNoYW4sIE5VTEwpOwotCX0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X2ZyZXEgKmZycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHRtcDsKLQotCS8qIExvY2tpbmcgZG9uZSBpbiB0aGVyZSAqLwotCXRtcCA9IG9yaW5vY29faHdfZ2V0X2ZyZXEocHJpdik7Ci0JaWYgKHRtcCA8IDApIHsKLQkJcmV0dXJuIHRtcDsKLQl9Ci0KLQlmcnEtPm0gPSB0bXA7Ci0JZnJxLT5lID0gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnNycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXUxNiB2YWw7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFwcml2LT5oYXNfc2Vuc2l0aXZpdHkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCSAgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwgJnZhbCk7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlzcnEtPnZhbHVlID0gdmFsOwotCXNycS0+Zml4ZWQgPSAwOyAvKiBhdXRvICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHNlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB2YWwgPSBzcnEtPnZhbHVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXByaXYtPmhhc19zZW5zaXRpdml0eSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCh2YWwgPCAxKSB8fCAodmFsID4gMykpCi0JCXJldHVybiAtRUlOVkFMOwotCQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCXByaXYtPmFwX2RlbnNpdHkgPSB2YWw7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB2YWwgPSBycnEtPnZhbHVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocnJxLT5kaXNhYmxlZCkKLQkJdmFsID0gMjM0NzsKLQotCWlmICggKHZhbCA8IDApIHx8ICh2YWwgPiAyMzQ3KSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlwcml2LT5ydHNfdGhyZXNoID0gdmFsOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJycS0+dmFsdWUgPSBwcml2LT5ydHNfdGhyZXNoOwotCXJycS0+ZGlzYWJsZWQgPSAocnJxLT52YWx1ZSA9PSAyMzQ3KTsKLQlycnEtPmZpeGVkID0gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAocHJpdi0+aGFzX213bykgewotCQlpZiAoZnJxLT5kaXNhYmxlZCkKLQkJCXByaXYtPm13b19yb2J1c3QgPSAwOwotCQllbHNlIHsKLQkJCWlmIChmcnEtPmZpeGVkKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBGaXhlZCBmcmFnbWVudGF0aW9uIGlzICIKLQkJCQkgICAgICAgIm5vdCBzdXBwb3J0ZWQgb24gdGhpcyBmaXJtd2FyZS4gIgotCQkJCSAgICAgICAiVXNpbmcgTVdPIHJvYnVzdCBpbnN0ZWFkLlxuIiwgZGV2LT5uYW1lKTsKLQkJCXByaXYtPm13b19yb2J1c3QgPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGZycS0+ZGlzYWJsZWQpCi0JCQlwcml2LT5mcmFnX3RocmVzaCA9IDIzNDY7Ci0JCWVsc2UgewotCQkJaWYgKCAoZnJxLT52YWx1ZSA8IDI1NikgfHwgKGZycS0+dmFsdWUgPiAyMzQ2KSApCi0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCWVsc2UKLQkJCQlwcml2LT5mcmFnX3RocmVzaCA9IGZycS0+dmFsdWUgJiB+MHgxOyAvKiBtdXN0IGJlIGV2ZW4gKi8KLQkJfQotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0JdTE2IHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JCi0JaWYgKHByaXYtPmhhc19td28pIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCi0JCQkJCSAgJnZhbCk7Ci0JCWlmIChlcnIpCi0JCQl2YWwgPSAwOwotCi0JCWZycS0+dmFsdWUgPSB2YWwgPyAyMzQ3IDogMDsKLQkJZnJxLT5kaXNhYmxlZCA9ICEgdmFsOwotCQlmcnEtPmZpeGVkID0gMDsKLQl9IGVsc2UgewotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAotCQkJCQkgICZ2YWwpOwotCQlpZiAoZXJyKQotCQkJdmFsID0gMDsKLQotCQlmcnEtPnZhbHVlID0gdmFsOwotCQlmcnEtPmRpc2FibGVkID0gKHZhbCA+PSAyMzQ2KTsKLQkJZnJxLT5maXhlZCA9IDE7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQkKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJhdGVtb2RlID0gLTE7Ci0JaW50IGJpdHJhdGU7IC8qIDEwMHMgb2Yga2lsb2JpdHMgKi8KLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotCS8qIEFzIHRoZSB1c2VyIHNwYWNlIGRvZXNuJ3Qga25vdyBvdXIgaGlnaGVzdCByYXRlLCBpdCB1c2VzIC0xCi0JICogdG8gYXNrIHVzIHRvIHNldCB0aGUgaGlnaGVzdCByYXRlLiAgVGVzdCBpdCB1c2luZyAiaXdjb25maWcKLQkgKiBldGhYIHJhdGUgYXV0byIgLSBKZWFuIElJICovCi0JaWYgKHJycS0+dmFsdWUgPT0gLTEpCi0JCWJpdHJhdGUgPSAxMTA7Ci0JZWxzZSB7Ci0JCWlmIChycnEtPnZhbHVlICUgMTAwMDAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJpdHJhdGUgPSBycnEtPnZhbHVlIC8gMTAwMDAwOwotCX0KLQotCWlmICggKGJpdHJhdGUgIT0gMTApICYmIChiaXRyYXRlICE9IDIwKSAmJgotCSAgICAgKGJpdHJhdGUgIT0gNTUpICYmIChiaXRyYXRlICE9IDExMCkgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBCSVRSQVRFX1RBQkxFX1NJWkU7IGkrKykKLQkJaWYgKCAoYml0cmF0ZV90YWJsZVtpXS5iaXRyYXRlID09IGJpdHJhdGUpICYmCi0JCSAgICAgKGJpdHJhdGVfdGFibGVbaV0uYXV0b21hdGljID09ICEgcnJxLT5maXhlZCkgKSB7Ci0JCQlyYXRlbW9kZSA9IGk7Ci0JCQlicmVhazsKLQkJfQotCQotCWlmIChyYXRlbW9kZSA9PSAtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQlwcml2LT5iaXRyYXRlbW9kZSA9IHJhdGVtb2RlOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCWludCByYXRlbW9kZTsKLQlpbnQgaTsKLQl1MTYgdmFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJhdGVtb2RlID0gcHJpdi0+Yml0cmF0ZW1vZGU7Ci0KLQlCVUdfT04oKHJhdGVtb2RlIDwgMCkgfHwgKHJhdGVtb2RlID49IEJJVFJBVEVfVEFCTEVfU0laRSkpOwotCi0JcnJxLT52YWx1ZSA9IGJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmJpdHJhdGUgKiAxMDAwMDA7Ci0JcnJxLT5maXhlZCA9ICEgYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYXV0b21hdGljOwotCXJycS0+ZGlzYWJsZWQgPSAwOwotCi0JLyogSWYgdGhlIGludGVyZmFjZSBpcyBydW5uaW5nIHdlIHRyeSB0byBmaW5kIG1vcmUgYWJvdXQgdGhlCi0JICAgY3VycmVudCBtb2RlICovCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NVUlJFTlRUWFJBVEUsICZ2YWwpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JCQotCQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBMdWNlbnQgc3R5bGUgcmF0ZSAqLwotCQkJLyogTm90ZSA6IGluIEx1Y2VudCBmaXJtd2FyZSwgdGhlIHJldHVybiB2YWx1ZSBvZgotCQkJICogSEVSTUVTX1JJRF9DVVJSRU5UVFhSQVRFIGlzIHRoZSBiaXRyYXRlIGluIE1iL3MsCi0JCQkgKiBhbmQgdGhlcmVmb3JlIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdGhlCi0JCQkgKiBlbmNvZGluZyBvZiBIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wuCi0JCQkgKiBEb24ndCBmb3JnZXQgdGhhdCA2TWIvcyBpcyByZWFsbHkgNS41TWIvcyAqLwotCQkJaWYgKHZhbCA9PSA2KQotCQkJCXJycS0+dmFsdWUgPSA1NTAwMDAwOwotCQkJZWxzZQotCQkJCXJycS0+dmFsdWUgPSB2YWwgKiAxMDAwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgcmF0ZSAqLwotCQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOiAvKiBTeW1ib2wgc3R5bGUgcmF0ZSAqLwotCQkJZm9yIChpID0gMDsgaSA8IEJJVFJBVEVfVEFCTEVfU0laRTsgaSsrKQotCQkJCWlmIChiaXRyYXRlX3RhYmxlW2ldLmludGVyc2lsX3R4cmF0ZWN0cmwgPT0gdmFsKSB7Ci0JCQkJCXJhdGVtb2RlID0gaTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJaWYgKGkgPj0gQklUUkFURV9UQUJMRV9TSVpFKQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmFibGUgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgYml0cmF0ZSAoMHglMDRoeClcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgdmFsKTsKLQotCQkJcnJxLT52YWx1ZSA9IGJpdHJhdGVfdGFibGVbcmF0ZW1vZGVdLmJpdHJhdGUgKiAxMDAwMDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCQl9Ci0JfQotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnBycSwKLQkJCQkgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHBycS0+ZGlzYWJsZWQpIHsKLQkJcHJpdi0+cG1fb24gPSAwOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAocHJxLT5mbGFncyAmIElXX1BPV0VSX01PREUpIHsKLQkJY2FzZSBJV19QT1dFUl9VTklDQVNUX1I6Ci0JCQlwcml2LT5wbV9tY2FzdCA9IDA7Ci0JCQlwcml2LT5wbV9vbiA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBJV19QT1dFUl9BTExfUjoKLQkJCXByaXYtPnBtX21jYXN0ID0gMTsKLQkJCXByaXYtPnBtX29uID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIElXX1BPV0VSX09OOgotCQkJLyogTm8gZmxhZ3MgOiBidXQgd2UgbWF5IGhhdmUgYSB2YWx1ZSAtIEplYW4gSUkgKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCQotCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpIHsKLQkJCXByaXYtPnBtX29uID0gMTsKLQkJCXByaXYtPnBtX3RpbWVvdXQgPSBwcnEtPnZhbHVlIC8gMTAwMDsKLQkJfQotCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1BFUklPRCkgewotCQkJcHJpdi0+cG1fb24gPSAxOwotCQkJcHJpdi0+cG1fcGVyaW9kID0gcHJxLT52YWx1ZSAvIDEwMDA7Ci0JCX0KLQkJLyogSXQncyB2YWxpZCB0byBub3QgaGF2ZSBhIHZhbHVlIGlmIHdlIGFyZSBqdXN0IHRvZ2dsaW5nCi0JCSAqIHRoZSBmbGFncy4uLiBKZWFuIElJICovCi0JCWlmKCFwcml2LT5wbV9vbikgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9CQkJCi0JfQotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnBycSwKLQkJCQkgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1MTYgZW5hYmxlLCBwZXJpb2QsIHRpbWVvdXQsIG1jYXN0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQkKLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsICZlbmFibGUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sICZwZXJpb2QpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLCAmdGltZW91dCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLCAmbWNhc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JcHJxLT5kaXNhYmxlZCA9ICFlbmFibGU7Ci0JLyogTm90ZSA6IGJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIHBlcmlvZCAqLwotCWlmICgocHJxLT5mbGFncyAmIElXX1BPV0VSX1RZUEUpID09IElXX1BPV0VSX1RJTUVPVVQpIHsKLQkJcHJxLT5mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7Ci0JCXBycS0+dmFsdWUgPSB0aW1lb3V0ICogMTAwMDsKLQl9IGVsc2UgewotCQlwcnEtPmZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOwotCQlwcnEtPnZhbHVlID0gcGVyaW9kICogMTAwMDsKLQl9Ci0JaWYgKG1jYXN0KQotCQlwcnEtPmZsYWdzIHw9IElXX1BPV0VSX0FMTF9SOwotCWVsc2UKLQkJcHJxLT5mbGFncyB8PSBJV19QT1dFUl9VTklDQVNUX1I7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCWludCBpZHgsIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAtRUlOVkFMOwotCXUxNiBrZXlfbGVuOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KLQlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCkgewotCQlpZiAoKGlkeCA8IDEpIHx8IChpZHggPiA0KSkKLQkJCWdvdG8gb3V0OwotCQlpZHgtLTsKLQl9IGVsc2UKLQkJaWR4ID0gcHJpdi0+dHhfa2V5OwotCi0JaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKLQkgICAgYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOwotCi0JaWYgKHByaXYtPmhhc193cGEgJiYgKGFsZyAhPSBJV19FTkNPREVfQUxHX1RLSVApKSB7Ci0JCS8qIENsZWFyIGFueSBUS0lQIFRYIGtleSB3ZSBoYWQgKi8KLQkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgcHJpdi0+dHhfa2V5KTsKLQl9Ci0KLQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpIHsKLQkJcHJpdi0+dHhfa2V5ID0gaWR4OwotCQlzZXRfa2V5ID0gKChhbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB8fAotCQkJICAgKGV4dC0+a2V5X2xlbiA+IDApKSA/IDEgOiAwOwotCX0KLQotCWlmIChzZXRfa2V5KSB7Ci0JCS8qIFNldCB0aGUgcmVxdWVzdGVkIGtleSBmaXJzdCAqLwotCQlzd2l0Y2ggKGFsZykgewotCQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKLQkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7Ci0JCQlwcml2LT5rZXlzW2lkeF0ubGVuID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6Ci0JCQlpZiAoZXh0LT5rZXlfbGVuID4gU01BTExfS0VZX1NJWkUpCi0JCQkJa2V5X2xlbiA9IExBUkdFX0tFWV9TSVpFOwotCQkJZWxzZSBpZiAoZXh0LT5rZXlfbGVuID4gMCkKLQkJCQlrZXlfbGVuID0gU01BTExfS0VZX1NJWkU7Ci0JCQllbHNlCi0JCQkJZ290byBvdXQ7Ci0KLQkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7Ci0JCQlwcml2LT5rZXlzW2lkeF0ubGVuID0gY3B1X3RvX2xlMTYoa2V5X2xlbik7Ci0KLQkJCWtleV9sZW4gPSBtaW4oZXh0LT5rZXlfbGVuLCBrZXlfbGVuKTsKLQotCQkJbWVtc2V0KHByaXYtPmtleXNbaWR4XS5kYXRhLCAwLCBPUklOT0NPX01BWF9LRVlfU0laRSk7Ci0JCQltZW1jcHkocHJpdi0+a2V5c1tpZHhdLmRhdGEsIGV4dC0+a2V5LCBrZXlfbGVuKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQl7Ci0JCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JCQl1OCAqdGtpcF9pdiA9IE5VTEw7Ci0KLQkJCWlmICghcHJpdi0+aGFzX3dwYSB8fAotCQkJICAgIChleHQtPmtleV9sZW4gPiBzaXplb2YocHJpdi0+dGtpcF9rZXlbMF0pKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKLQkJCW1lbXNldCgmcHJpdi0+dGtpcF9rZXlbaWR4XSwgMCwKLQkJCSAgICAgICBzaXplb2YocHJpdi0+dGtpcF9rZXlbaWR4XSkpOwotCQkJbWVtY3B5KCZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKLQotCQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCi0JCQkJdGtpcF9pdiA9ICZleHQtPnJ4X3NlcVswXTsKLQotCQkJZXJyID0gX19vcmlub2NvX2h3X3NldF90a2lwX2tleShodywgaWR4LAotCQkJCSBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSwKLQkJCQkgKHU4ICopICZwcml2LT50a2lwX2tleVtpZHhdLAotCQkJCSB0a2lwX2l2LCBOVUxMKTsKLQkJCWlmIChlcnIpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBUS0lQIGtleSIKLQkJCQkgICAgICAgIlxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCi0JCQlnb3RvIG91dDsKLQkJfQotCQlkZWZhdWx0OgotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0JZXJyID0gLUVJTlBST0dSRVNTOwotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCQkgICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKLQlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JaW50IGlkeCwgbWF4X2tleV9sZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQllcnIgPSAtRUlOVkFMOwotCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKLQlpZiAobWF4X2tleV9sZW4gPCAwKQotCQlnb3RvIG91dDsKLQotCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4KSB7Ci0JCWlmICgoaWR4IDwgMSkgfHwgKGlkeCA+IDQpKQotCQkJZ290byBvdXQ7Ci0JCWlkeC0tOwotCX0gZWxzZQotCQlpZHggPSBwcml2LT50eF9rZXk7Ci0KLQllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOwotCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7Ci0KLQlleHQtPmFsZyA9IHByaXYtPmVuY29kZV9hbGc7Ci0Jc3dpdGNoIChwcml2LT5lbmNvZGVfYWxnKSB7Ci0JY2FzZSBJV19FTkNPREVfQUxHX05PTkU6Ci0JCWV4dC0+a2V5X2xlbiA9IDA7Ci0JCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6Ci0JCWV4dC0+a2V5X2xlbiA9IG1pbl90KHUxNiwgbGUxNl90b19jcHUocHJpdi0+a2V5c1tpZHhdLmxlbiksCi0JCQkJICAgICBtYXhfa2V5X2xlbik7Ci0JCW1lbWNweShleHQtPmtleSwgcHJpdi0+a2V5c1tpZHhdLmRhdGEsIGV4dC0+a2V5X2xlbik7Ci0JCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6Ci0JCWV4dC0+a2V5X2xlbiA9IG1pbl90KHUxNiwgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3RraXBfa2V5KSwKLQkJCQkgICAgIG1heF9rZXlfbGVuKTsKLQkJbWVtY3B5KGV4dC0+a2V5LCAmcHJpdi0+dGtpcF9rZXlbaWR4XSwgZXh0LT5rZXlfbGVuKTsKLQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwotCQlicmVhazsKLQl9Ci0KLQllcnIgPSAwOwotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVJTlBST0dSRVNTOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLQljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgotCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKLQljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgotCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotCQkvKgotCQkgKiBvcmlub2NvIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzCi0JCSAqLwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQkJLyogd2xfbGttIGltcGxpZXMgdmFsdWUgMiA9PSBQU0sgZm9yIEhlcm1lcyBJCi0JCSAqIHdoaWNoIHRpZXMgaW4gd2l0aCBXRVhUCi0JCSAqIG5vIG90aGVyIGhpbnRzIHRobyA6KAotCQkgKi8KLQkJcHJpdi0+a2V5X21nbXQgPSBwYXJhbS0+dmFsdWU7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgotCQkvKiBXaGVuIGNvdW50ZXJtZWFzdXJlcyBhcmUgZW5hYmxlZCwgc2h1dCBkb3duIHRoZQotCQkgKiBjYXJkOyB3aGVuIGRpc2FibGVkLCByZS1lbmFibGUgdGhlIGNhcmQuIFRoaXMgbXVzdAotCQkgKiB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseS4KLQkJICoKLQkJICogVE9ETzogTWFrZSBzdXJlIHRoYXQgdGhlIEVBUE9MIG1lc3NhZ2UgaXMgZ2V0dGluZwotCQkgKiAgICAgICBvdXQgYmVmb3JlIGNhcmQgZGlzYWJsZWQKLQkJICovCi0JCWlmIChwYXJhbS0+dmFsdWUpIHsKLQkJCXByaXYtPnRraXBfY21fYWN0aXZlID0gMTsKLQkJCXJldCA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7Ci0JCQlyZXQgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpCi0JCQlwcml2LT53ZXBfcmVzdHJpY3QgPSAxOwotCQllbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKLQkJCXByaXYtPndlcF9yZXN0cmljdCA9IDA7Ci0JCWVsc2UKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgotCQlpZiAocHJpdi0+aGFzX3dwYSkgewotCQkJcHJpdi0+d3BhX2VuYWJsZWQgPSBwYXJhbS0+dmFsdWUgPyAxIDogMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChwYXJhbS0+dmFsdWUpCi0JCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQkvKiBlbHNlIHNpbGVudGx5IGFjY2VwdCBkaXNhYmxlIG9mIFdQQSAqLwotCQkJcHJpdi0+d3BhX2VuYWJsZWQgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQkJcGFyYW0tPnZhbHVlID0gcHJpdi0+a2V5X21nbXQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgotCQlwYXJhbS0+dmFsdWUgPSBwcml2LT50a2lwX2NtX2FjdGl2ZTsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCi0JCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX0FMR19TSEFSRURfS0VZOwotCQllbHNlCi0JCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JCXBhcmFtLT52YWx1ZSA9IHByaXYtPndwYV9lbmFibGVkOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTggKmJ1ZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogY3V0IG9mZiBhdCBJRUVFODAyMTFfTUFYX0RBVEFfTEVOICovCi0JaWYgKCh3cnF1LT5kYXRhLmxlbmd0aCA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4pIHx8Ci0JICAgICh3cnF1LT5kYXRhLmxlbmd0aCAmJiAoZXh0cmEgPT0gTlVMTCkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkgewotCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGJ1ZiA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJbWVtY3B5KGJ1ZiwgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKLQl9IGVsc2UKLQkJYnVmID0gTlVMTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0Ja2ZyZWUocHJpdi0+d3BhX2llKTsKLQlwcml2LT53cGFfaWUgPSBidWY7Ci0JcHJpdi0+d3BhX2llX2xlbiA9IHdycXUtPmRhdGEubGVuZ3RoOwotCi0JaWYgKHByaXYtPndwYV9pZSkgewotCQkvKiBMb29rcyBsaWtlIHdsX2xrbSB3YW50cyB0byBjaGVjayB0aGUgYXV0aCBhbGcsIGFuZAotCQkgKiBzb21laG93IHBhc3MgaXQgdG8gdGhlIGZpcm13YXJlLgotCQkgKiBJbnN0ZWFkIGl0IGp1c3QgY2FsbHMgdGhlIGtleSBtZ210IHJpZAotCQkgKiAgIC0gd2UgZG8gdGhpcyBpbiBzZXQgYXV0aC4KLQkJICovCi0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKChwcml2LT53cGFfaWVfbGVuID09IDApIHx8IChwcml2LT53cGFfaWUgPT0gTlVMTCkpIHsKLQkJd3JxdS0+ZGF0YS5sZW5ndGggPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCBwcml2LT53cGFfaWVfbGVuKSB7Ci0JCWVyciA9IC1FMkJJRzsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd3JxdS0+ZGF0YS5sZW5ndGggPSBwcml2LT53cGFfaWVfbGVuOwotCW1lbWNweShleHRyYSwgcHJpdi0+d3BhX2llLCBwcml2LT53cGFfaWVfbGVuKTsKLQotb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBpd19tbG1lICptbG1lID0gKHN0cnVjdCBpd19tbG1lICopZXh0cmE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoIChtbG1lLT5jbWQpIHsKLQljYXNlIElXX01MTUVfREVBVVRIOgotCQkvKiBzaWxlbnRseSBpZ25vcmUgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIElXX01MTUVfRElTQVNTT0M6Ci0JewotCQlzdHJ1Y3QgewotCQkJdTggYWRkcltFVEhfQUxFTl07Ci0JCQlfX2xlMTYgcmVhc29uX2NvZGU7Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKLQotCQltZW1jcHkoYnVmLmFkZHIsIG1sbWUtPmFkZHIuc2FfZGF0YSwgRVRIX0FMRU4pOwotCQlidWYucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7Ci0JCXJldCA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GRElTQVNTT0NJQVRFLAotCQkJCQkgICZidWYpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKLQkJCQkgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1MTYgc2hvcnRfbGltaXQsIGxvbmdfbGltaXQsIGxpZmV0aW1lOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQkKLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TSE9SVFJFVFJZTElNSVQsCi0JCQkJICAmc2hvcnRfbGltaXQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTE9OR1JFVFJZTElNSVQsCi0JCQkJICAmbG9uZ19saW1pdCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9NQVhUUkFOU01JVExJRkVUSU1FLAotCQkJCSAgJmxpZmV0aW1lKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCXJycS0+ZGlzYWJsZWQgPSAwOwkJLyogQ2FuJ3QgYmUgZGlzYWJsZWQgKi8KLQotCS8qIE5vdGUgOiBieSBkZWZhdWx0LCBkaXNwbGF5IHRoZSByZXRyeSBudW1iZXIgKi8KLQlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkgewotCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7Ci0JCXJycS0+dmFsdWUgPSBsaWZldGltZSAqIDEwMDA7CS8qID8/PyAqLwotCX0gZWxzZSB7Ci0JCS8qIEJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIG1pbiBudW1iZXIgKi8KLQkJaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykpIHsKLQkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xPTkc7Ci0JCQlycnEtPnZhbHVlID0gbG9uZ19saW1pdDsKLQkJfSBlbHNlIHsKLQkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQkJCXJycS0+dmFsdWUgPSBzaG9ydF9saW1pdDsKLQkJCWlmKHNob3J0X2xpbWl0ICE9IGxvbmdfbGltaXQpCi0JCQkJcnJxLT5mbGFncyB8PSBJV19SRVRSWV9TSE9SVDsKLQkJfQotCX0KLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB2b2lkICp3cnF1LAotCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCEgY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChpbmZvLT5jbWQgPT0gKFNJT0NJV0ZJUlNUUFJJViArIDB4MSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3JjaW5nIHJlc2V0IVxuIiwgZGV2LT5uYW1lKTsKLQotCQkvKiBGaXJtd2FyZSByZXNldCAqLwotCQlvcmlub2NvX3Jlc2V0KCZwcml2LT5yZXNldF93b3JrKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvcmNlIHNjaGVkdWxpbmcgcmVzZXQhXG4iLCBkZXYtPm5hbWUpOwotCi0JCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0aWJzc3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICB2b2lkICp3cnF1LAotCQkJCSAgICAgY2hhciAqZXh0cmEpCi0KLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdmFsID0gKiggKGludCAqKSBleHRyYSApOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXByaXYtPmlic3NfcG9ydCA9IHZhbCA7Ci0KLQkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIG1vZGUgd2UgYXJlIHVzaW5nICovCi0Jc2V0X3BvcnRfdHlwZShwcml2KTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdm9pZCAqd3JxdSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKLQotCSp2YWwgPSBwcml2LT5pYnNzX3BvcnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwb3J0MyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHZvaWQgKndycXUsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdmFsID0gKiggKGludCAqKSBleHRyYSApOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAodmFsKSB7Ci0JY2FzZSAwOiAvKiBUcnkgdG8gZG8gSUVFRSBhZC1ob2MgbW9kZSAqLwotCQlpZiAoISBwcml2LT5oYXNfaWJzcykgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCXByaXYtPnByZWZlcl9wb3J0MyA9IDA7Ci0JCQkKLQkJYnJlYWs7Ci0KLQljYXNlIDE6IC8qIFRyeSB0byBkbyBMdWNlbnQgcHJvcHJpZXRhcnkgYWQtaG9jIG1vZGUgKi8KLQkJaWYgKCEgcHJpdi0+aGFzX3BvcnQzKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJpdi0+cHJlZmVyX3BvcnQzID0gMTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWlmICghIGVycikgewotCQkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIG1vZGUgd2UgYXJlIHVzaW5nICovCi0JCXNldF9wb3J0X3R5cGUocHJpdik7Ci0JCWVyciA9IC1FSU5QUk9HUkVTUzsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHBvcnQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdm9pZCAqd3JxdSwKLQkJCQkgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKLQotCSp2YWwgPSBwcml2LT5wcmVmZXJfcG9ydDM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHZvaWQgKndycXUsCi0JCQkJICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB2YWw7Ci0KLQlpZiAoISBwcml2LT5oYXNfcHJlYW1ibGUpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCS8qIDgwMi4xMWIgaGFzIHJlY2VudGx5IGRlZmluZWQgc29tZSBzaG9ydCBwcmVhbWJsZS4KLQkgKiBCYXNpY2FsbHksIHRoZSBQaHkgaGVhZGVyIGhhcyBiZWVuIHJlZHVjZWQgaW4gc2l6ZS4KLQkgKiBUaGlzIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGF0IGhpZ2ggcmF0ZXMKLQkgKiAodGhlIHByZWFtYmxlIGlzIHRyYW5zbWl0dGVkIGF0IDFNYi9zKSwgdW5mb3J0dW5hdGVseQotCSAqIHRoaXMgZ2l2ZSBjb21wYXRpYmlsaXR5IHRyb3VibGVzLi4uIC0gSmVhbiBJSSAqLwotCXZhbCA9ICooIChpbnQgKikgZXh0cmEgKTsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHZhbCkKLQkJcHJpdi0+cHJlYW1ibGUgPSAxOwotCWVsc2UKLQkJcHJpdi0+cHJlYW1ibGUgPSAwOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHZvaWQgKndycXUsCi0JCQkJICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7Ci0KLQlpZiAoISBwcml2LT5oYXNfcHJlYW1ibGUpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCSp2YWwgPSBwcml2LT5wcmVhbWJsZTsKLQlyZXR1cm4gMDsKLX0KLQotLyogaW9jdGwgaW50ZXJmYWNlIHRvIGhlcm1lc19yZWFkX2x0digpCi0gKiBUbyB1c2Ugd2l0aCBpd3ByaXYsIHBhc3MgdGhlIFJJRCBhcyB0aGUgdG9rZW4gYXJndW1lbnQsIGUuZy4KLSAqIGl3cHJpdiBnZXRfcmlkIFsweGZjMDBdCi0gKiBBdCBsZWFzdCBXaXJlbGVzcyBUb29scyAyNSBpcyByZXF1aXJlZCB0byB1c2UgaXdwcml2LgotICogRm9yIFdpcmVsZXNzIFRvb2xzIDI1IGFuZCAyNiBhcHBlbmQgImR1bW15IiBhcmUgdGhlIGVuZC4gKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IHJpZCA9IGRhdGEtPmZsYWdzOwotCXUxNiBsZW5ndGg7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogSXQncyBhICJnZXQiIGZ1bmN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudCB1c2VycyB0byBhY2Nlc3MgdGhlCi0JICogV0VQIGtleSBhbmQgb3RoZXIgcmF3IGZpcm13YXJlIGRhdGEgKi8KLQlpZiAoISBjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKHJpZCA8IDB4ZmMwMCB8fCByaWQgPiAweGZmZmYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCByaWQsIE1BWF9SSURfTEVOLCAmbGVuZ3RoLAotCQkJICAgICAgZXh0cmEpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZGF0YS0+bGVuZ3RoID0gbWluX3QodTE2LCBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKGxlbmd0aCksCi0JCQkgICAgIE1BWF9SSURfTEVOKTsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFRyaWdnZXIgYSBzY2FuIChsb29rIGZvciBvdGhlciBjZWxscyBpbiB0aGUgdmljaW5pdHkpICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBpd19zY2FuX3JlcSAqc2kgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopIGV4dHJhOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBOb3RlIDogeW91IG1heSBoYXZlIHJlYWxpc2VkIHRoYXQsIGFzIHRoaXMgaXMgYSBTRVQgb3BlcmF0aW9uLAotCSAqIHRoaXMgaXMgcHJpdmlsZWdlZCBhbmQgdGhlcmVmb3JlIGEgbm9ybWFsIHVzZXIgY2FuJ3QKLQkgKiBwZXJmb3JtIHNjYW5uaW5nLgotCSAqIFRoaXMgaXMgbm90IGFuIGVycm9yLCB3aGlsZSB0aGUgZGV2aWNlIHBlcmZvcm0gc2Nhbm5pbmcsCi0JICogdHJhZmZpYyBkb2Vzbid0IGZsb3csIHNvIGl0J3MgYSBwZXJmZWN0IERvUy4uLgotCSAqIEplYW4gSUkgKi8KLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogU2Nhbm5pbmcgd2l0aCBwb3J0IDAgZGlzYWJsZWQgd291bGQgZmFpbCAqLwotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWVyciA9IC1FTkVURE9XTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogSW4gbW9uaXRvciBtb2RlLCB0aGUgc2NhbiByZXN1bHRzIGFyZSBhbHdheXMgZW1wdHkuCi0JICogUHJvYmUgcmVzcG9uc2VzIGFyZSBwYXNzZWQgdG8gdGhlIGRyaXZlciBhcyByZWNlaXZlZAotCSAqIGZyYW1lcyBhbmQgY291bGQgYmUgcHJvY2Vzc2VkIGluIHNvZnR3YXJlLiAqLwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogTm90ZSA6IGJlY2F1c2Ugd2UgZG9uJ3QgbG9jayBvdXQgdGhlIGlycSBoYW5kbGVyLCB0aGUgd2F5Ci0JICogd2UgYWNjZXNzIHNjYW4gdmFyaWFibGVzIGluIHByaXYgaXMgY3JpdGljYWwuCi0JICoJbyBzY2FuX2lucHJvZ3Jlc3MgOiBub3QgdG91Y2hlZCBieSBpcnEgaGFuZGxlcgotCSAqCW8gc2Nhbl9tb2RlIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKLQkgKiBCZWZvcmUgbW9kaWZ5aW5nIGFueXRoaW5nIG9uIHRob3NlIHZhcmlhYmxlcywgcGxlYXNlIHRoaW5rIGhhcmQgIQotCSAqIEplYW4gSUkgKi8KLQotCS8qIFNhdmUgZmxhZ3MgKi8KLQlwcml2LT5zY2FuX21vZGUgPSBzcnEtPmZsYWdzOwotCi0JLyogQWx3YXlzIHRyaWdnZXIgc2Nhbm5pbmcsIGV2ZW4gaWYgaXQncyBpbiBwcm9ncmVzcy4KLQkgKiBUaGlzIHdheSwgaWYgdGhlIGluZm8gZnJhbWUgZ2V0IGxvc3QsIHdlIHdpbGwgcmVjb3ZlciBzb21ld2hhdAotCSAqIGdyYWNlZnVsbHkgIC0gSmVhbiBJSSAqLwotCi0JaWYgKHByaXYtPmhhc19ob3N0c2NhbikgewotCQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GSE9TVFNDQU5fU1lNQk9MLAotCQkJCQkJICAgSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9PTkNFIHwKLQkJCQkJCSAgIEhFUk1FU19IT1NUU0NBTl9TWU1CT0xfQkNBU1QpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogewotCQkJX19sZTE2IHJlcVszXTsKLQotCQkJcmVxWzBdID0gY3B1X3RvX2xlMTYoMHgzZmZmKTsJLyogQWxsIGNoYW5uZWxzICovCi0JCQlyZXFbMV0gPSBjcHVfdG9fbGUxNigweDAwMDEpOwkvKiByYXRlIDEgTWJwcyAqLwotCQkJcmVxWzJdID0gMDsJCQkvKiBBbnkgRVNTSUQgKi8KLQkJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkJICBIRVJNRVNfUklEX0NORkhPU1RTQ0FOLCAmcmVxKTsKLQkJfQotCQlicmVhazsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkJaWYgKHByaXYtPnNjYW5fbW9kZSAmIElXX1NDQU5fVEhJU19FU1NJRCkgewotCQkJCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7Ci0JCQkJc2l6ZV90IGxlbiA9IG1pbihzaXplb2YoaWRidWYudmFsKSwKLQkJCQkJCSAoc2l6ZV90KSBzaS0+ZXNzaWRfbGVuKTsKLQkJCQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwotCQkJCW1lbWNweShpZGJ1Zi52YWwsIHNpLT5lc3NpZCwgbGVuKTsKLQotCQkJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAotCQkJCQkgICAgICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKLQkJCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obGVuICsgMiksCi0JCQkJCSAgICAgICAmaWRidWYpOwotCQkJfSBlbHNlCi0JCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKLQkJCQkJCSAgIDApOwkvKiBBbnkgRVNTSUQgKi8KLQkJCWlmIChlcnIpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKLQkJCQkvKiBDbGVhciBzY2FuIHJlc3VsdHMgYXQgdGhlIHN0YXJ0IG9mCi0JCQkJICogYW4gZXh0ZW5kZWQgc2NhbiAqLwotCQkJCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsCi0JCQkJCQltc2Vjc190b19qaWZmaWVzKDE1MDAwKSk7Ci0KLQkJCQkvKiBUT0RPOiBJcyB0aGlzIGF2YWlsYWJsZSBvbiBvbGRlciBmaXJtd2FyZT8KLQkJCQkgKiAgIENhbiB3ZSB1c2UgaXQgdG8gc2NhbiBzcGVjaWZpYyBjaGFubmVscwotCQkJCSAqICAgZm9yIElXX1NDQU5fVEhJU19GUkVRPyAqLwotCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCUhFUk1FU19SSURfQ05GU0NBTkNIQU5ORUxTMkdIWiwKLQkJCQkJCTB4N0ZGRik7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBvdXQ7Ci0KLQkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywKLQkJCQkJCSAgICAgSEVSTUVTX0lOUV9DSEFOTkVMSU5GTyk7Ci0JCQl9IGVsc2UKLQkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlCi0JCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOwotCi0JLyogT25lIG1vcmUgY2xpZW50ICovCi0JaWYgKCEgZXJyKQotCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAxOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotI2RlZmluZSBNQVhfQ1VTVE9NX0xFTiA2NAotCi0vKiBUcmFuc2xhdGUgc2NhbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIGNhcmQgdG8gYSBjYXJkIGluZGVwZW5kYW50Ci0gKiBmb3JtYXQgdGhhdCB0aGUgV2lyZWxlc3MgVG9vbHMgd2lsbCB1bmRlcnN0YW5kIC0gSmVhbiBJSSAqLwotc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJCSAgIGNoYXIgKmN1cnJlbnRfZXYsCi0JCQkJCSAgIGNoYXIgKmVuZF9idWYsCi0JCQkJCSAgIHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmJzcywKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2CQkJY2FwYWJpbGl0aWVzOwotCXUxNgkJCWNoYW5uZWw7Ci0Jc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0JY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQotCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0FQOwotCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YS5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKLQotCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwotCi0JLyogQWRkIHRoZSBFU1NJRCAqLwotCWl3ZS51LmRhdGEubGVuZ3RoID0gbGUxNl90b19jcHUoYnNzLT5hLmVzc2lkX2xlbik7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCi0JCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7Ci0JaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBic3MtPmEuZXNzaWQpOwotCi0JLyogQWRkIG1vZGUgKi8KLQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5hLmNhcGFiaWxpdGllcyk7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7Ci0JCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQljaGFubmVsID0gYnNzLT5zLmNoYW5uZWw7Ci0JaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKLQkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwotCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7Ci0JCWl3ZS51LmZyZXEuZSA9IDA7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0KLQkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbF9mcmVxdWVuY3lbY2hhbm5lbC0xXSAqIDEwMDAwMDsKLQkJaXdlLnUuZnJlcS5lID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQl9Ci0KLQkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWl3ZS51LnF1YWwubGV2ZWwgPSAoX191OCkgbGUxNl90b19jcHUoYnNzLT5hLmxldmVsKSAtIDB4OTU7Ci0JaXdlLnUucXVhbC5ub2lzZSA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubm9pc2UpIC0gMHg5NTsKLQkvKiBXaXJlbGVzcyB0b29scyBwcmlvciB0byAyNy5wcmUyMiB3aWxsIHNob3cgbGluayBxdWFsaXR5Ci0JICogYW55d2F5LCBzbyB3ZSBwcm92aWRlIGEgcmVhc29uYWJsZSB2YWx1ZS4gKi8KLQlpZiAoaXdlLnUucXVhbC5sZXZlbCA+IGl3ZS51LnF1YWwubm9pc2UpCi0JCWl3ZS51LnF1YWwucXVhbCA9IGl3ZS51LnF1YWwubGV2ZWwgLSBpd2UudS5xdWFsLm5vaXNlOwotCWVsc2UKLQkJaXdlLnUucXVhbC5xdWFsID0gMDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7Ci0KLQkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCi0JaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7Ci0JZWxzZQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBOVUxMKTsKLQotCS8qIEJpdCByYXRlIGlzIG5vdCBhdmFpbGFibGUgaW4gTHVjZW50L0FnZXJlIGZpcm13YXJlcyAqLwotCWlmIChwcml2LT5maXJtd2FyZV90eXBlICE9IEZJUk1XQVJFX1RZUEVfQUdFUkUpIHsKLQkJY2hhciAqY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwotCQlpbnQgaTsKLQkJaW50IHN0ZXA7Ci0KLQkJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wpCi0JCQlzdGVwID0gMjsKLQkJZWxzZQotCQkJc3RlcCA9IDE7Ci0KLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCQkvKiBNYXggMTAgdmFsdWVzICovCi0JCWZvciAoaSA9IDA7IGkgPCAxMDsgaSArPSBzdGVwKSB7Ci0JCQkvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KLQkJCWlmIChic3MtPnAucmF0ZXNbaV0gPT0gMHgwKQotCQkJCWJyZWFrOwotCQkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KLQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPQotCQkJCSgoYnNzLT5wLnJhdGVzW2ldICYgMHg3ZikgKiA1MDAwMDApOwotCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgIGN1cnJlbnRfdmFsLAotCQkJCQkJCSAgIGVuZF9idWYsICZpd2UsCi0JCQkJCQkJICAgSVdfRVZfUEFSQU1fTEVOKTsKLQkJfQotCQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KLQkJaWYgKChjdXJyZW50X3ZhbCAtIGN1cnJlbnRfZXYpID4gaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKQotCQkJY3VycmVudF9ldiA9IGN1cnJlbnRfdmFsOwotCX0KLQotCS8qIEJlYWNvbiBpbnRlcnZhbCAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJiY25faW50PSVkIiwKLQkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YS5iZWFjb25faW50ZXJ2KSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIENhcGFiaWxpdGVzICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCi0JCQkJICAgICBjYXBhYmlsaXRpZXMpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKLQkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCi0JCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfZXh0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJCSAgICAgICBjaGFyICpjdXJyZW50X2V2LAotCQkJCQkgICAgICAgY2hhciAqZW5kX2J1ZiwKLQkJCQkJICAgICAgIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICpic3MsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZCkKLXsKLQl1MTYJCQljYXBhYmlsaXRpZXM7Ci0JdTE2CQkJY2hhbm5lbDsKLQlzdHJ1Y3QgaXdfZXZlbnQJCWl3ZTsJCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLQljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07Ci0JdTggKmllOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQotCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0FQOwotCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0KLQkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KLQotCS8qIEFkZCB0aGUgRVNTSUQgKi8KLQlpZSA9IGJzcy0+ZGF0YTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkgewotCQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7Ci0JCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgJmllWzJdKTsKLQl9Ci0KLQkvKiBBZGQgbW9kZSAqLwotCWNhcGFiaWxpdGllcyA9IGxlMTZfdG9fY3B1KGJzcy0+Y2FwYWJpbGl0aWVzKTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKLQkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotCQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX0VTUykKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJZWxzZQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7Ci0JfQotCi0JaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9EU19QQVJBTVMpOwotCWNoYW5uZWwgPSBpZSA/IGllWzJdIDogMDsKLQlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gTlVNX0NIQU5ORUxTKSkgewotCQkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCi0JCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbDsKLQkJaXdlLnUuZnJlcS5lID0gMDsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeVtjaGFubmVsLTFdICogMTAwMDAwOwotCQlpd2UudS5mcmVxLmUgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCX0KLQotCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCi0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+bGV2ZWwgLSAweDk1OwotCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlIC0gMHg5NTsKLQkvKiBXaXJlbGVzcyB0b29scyBwcmlvciB0byAyNy5wcmUyMiB3aWxsIHNob3cgbGluayBxdWFsaXR5Ci0JICogYW55d2F5LCBzbyB3ZSBwcm92aWRlIGEgcmVhc29uYWJsZSB2YWx1ZS4gKi8KLQlpZiAoaXdlLnUucXVhbC5sZXZlbCA+IGl3ZS51LnF1YWwubm9pc2UpCi0JCWl3ZS51LnF1YWwucXVhbCA9IGl3ZS51LnF1YWwubGV2ZWwgLSBpd2UudS5xdWFsLm5vaXNlOwotCWVsc2UKLQkJaXdlLnUucXVhbC5xdWFsID0gMDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7Ci0KLQkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCi0JaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7Ci0JZWxzZQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBOVUxMKTsKLQotCS8qIFdQQSBJRSAqLwotCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSkpOwotCWlmIChpZSkgewotCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGllKTsKLQl9Ci0KLQkvKiBSU04gSUUgKi8KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1JTTik7Ci0JaWYgKGllKSB7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgaWUpOwotCX0KLQotCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfU1VQUF9SQVRFUyk7Ci0JaWYgKGllKSB7Ci0JCWNoYXIgKnAgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwotCQlpbnQgaTsKLQotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0KLQkJZm9yIChpID0gMjsgaSA8IChpZVsxXSArIDIpOyBpKyspIHsKLQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGllW2ldICYgMHg3RikgKiA1MDAwMDApOwotCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsIHAsIGVuZF9idWYsCi0JCQkJCQkgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLQkJfQotCQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KLQkJaWYgKHAgPiAoY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkpCi0JCQljdXJyZW50X2V2ID0gcDsKLQl9Ci0KLQkvKiBUaW1lc3RhbXAgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9Ci0JCXNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sICJ0c2Y9JTAxNmxseCIsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoYnNzLT50aW1lc3RhbXApKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQmVhY29uIGludGVydmFsICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImJjbl9pbnQ9JWQiLAotCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5iZWFjb25faW50ZXJ2YWwpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQ2FwYWJpbGl0ZXMgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiY2FwYWI9MHglMDR4IiwKLQkJCQkgICAgIGNhcGFiaWxpdGllcyk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQotCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotLyogUmV0dXJuIHJlc3VsdHMgb2YgYSBzY2FuICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKLQkJLyogSW1wb3J0YW50IG5vdGUgOiB3ZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBjYWxsZXIKLQkJICogdW50aWwgcmVzdWx0cyBhcmUgcmVhZHkgZm9yIHZhcmlvdXMgcmVhc29ucy4KLQkJICogRmlyc3QsIG1hbmFnaW5nIHdhaXQgcXVldWVzIGlzIGNvbXBsZXggYW5kIHJhY3kuCi0JCSAqIFNlY29uZCwgd2UgZ3JhYiBzb21lIHJ0bmV0bGluayBsb2NrIGJlZm9yZSBjb21taW5nCi0JCSAqIGhlcmUgKGluIGRldl9pb2N0bCgpKS4KLQkJICogVGhpcmQsIHdlIGdlbmVyYXRlIGFuIFdpcmVsZXNzIEV2ZW50LCBzbyB0aGUKLQkJICogY2FsbGVyIGNhbiB3YWl0IGl0c2VsZiBvbiB0aGF0IC0gSmVhbiBJSSAqLwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzczsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KLQkJCWN1cnJlbnRfZXYgPQotCQkJCW9yaW5vY29fdHJhbnNsYXRlX2V4dF9zY2FuKGRldiwgaW5mbywKLQkJCQkJCQkgICBjdXJyZW50X2V2LAotCQkJCQkJCSAgIGV4dHJhICsgc3JxLT5sZW5ndGgsCi0JCQkJCQkJICAgJmJzcy0+YnNzLAotCQkJCQkJCSAgIGJzcy0+bGFzdF9zY2FubmVkKTsKLQotCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIG9uZSBtb3JlIGVudHJ5ICovCi0JCQlpZiAoKGV4dHJhICsgc3JxLT5sZW5ndGggLSBjdXJyZW50X2V2KQotCQkJICAgIDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQkJLyogQXNrIHVzZXIgc3BhY2UgdG8gdHJ5IGFnYWluIHdpdGggYQotCQkJCSAqIGJpZ2dlciBidWZmZXIgKi8KLQkJCQllcnIgPSAtRTJCSUc7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCS8qIFRyYW5zbGF0ZSB0aGlzIGVudHJ5IHRvIFdFIGZvcm1hdCAqLwotCQkJY3VycmVudF9ldiA9IG9yaW5vY29fdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLAotCQkJCQkJCSAgICBjdXJyZW50X2V2LAotCQkJCQkJCSAgICBleHRyYSArIHNycS0+bGVuZ3RoLAotCQkJCQkJCSAgICAmYnNzLT5ic3MsCi0JCQkJCQkJICAgIGJzcy0+bGFzdF9zY2FubmVkKTsKLQotCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIG9uZSBtb3JlIGVudHJ5ICovCi0JCQlpZiAoKGV4dHJhICsgc3JxLT5sZW5ndGggLSBjdXJyZW50X2V2KQotCQkJICAgIDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQkJLyogQXNrIHVzZXIgc3BhY2UgdG8gdHJ5IGFnYWluIHdpdGggYQotCQkJCSAqIGJpZ2dlciBidWZmZXIgKi8KLQkJCQllcnIgPSAtRTJCSUc7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzcnEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOwotCXNycS0+ZmxhZ3MgPSAoX191MTYpIHByaXYtPnNjYW5fbW9kZTsKLQotb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogQ29tbWl0IGhhbmRsZXIsIGNhbGxlZCBhZnRlciBzZXQgb3BlcmF0aW9ucyAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJdm9pZCAqd3JxdSwKLQkJCQljaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAwOwotCi0JaWYgKCFwcml2LT5vcGVuKQotCQlyZXR1cm4gMDsKLQotCWlmIChwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKLQkJb3Jpbm9jb19yZXNldCgmcHJpdi0+cmVzZXRfd29yayk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGRpc2FibGUgcG9ydCAiCi0JCSAgICAgICAid2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLCBkZXYtPm5hbWUpOwotCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAxOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIHJlY29uZmlndXJlIGNhcmRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBlbmFibGUgcG9ydCB3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLSBvdXQ6Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVzZXR0aW5nIGluc3RlYWQuLi5cbiIsIGRldi0+bmFtZSk7Ci0JCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwotCQllcnIgPSAwOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3Mgb3Jpbm9jb19wcml2dGFiW10gPSB7Ci0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDAsIDAsIDAsICJmb3JjZV9yZXNldCIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MSwgMCwgMCwgImNhcmRfcmVzZXQiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDIsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgMCwgInNldF9wb3J0MyIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MywgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAiZ2V0X3BvcnQzIiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg0LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgIDAsICJzZXRfcHJlYW1ibGUiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDUsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgImdldF9wcmVhbWJsZSIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAwLCAic2V0X2lic3Nwb3J0IiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg3LCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgICJnZXRfaWJzc3BvcnQiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDksIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgTUFYX1JJRF9MRU4sCi0JICAiZ2V0X3JpZCIgfSwKLX07Ci0KLQotLyoKLSAqIFN0cnVjdHVyZXMgdG8gZXhwb3J0IHRoZSBXaXJlbGVzcyBIYW5kbGVycwotICovCi0KLSNkZWZpbmUgU1REX0lXX0hBTkRMRVIoaWQsIGZ1bmMpIFwKLQlbSVdfSU9DVExfSURYKGlkKV0gPSAoaXdfaGFuZGxlcikgZnVuYwotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJb3Jpbm9jb19oYW5kbGVyW10gPSB7Ci0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0NPTU1JVCwJb3Jpbm9jb19pb2N0bF9jb21taXQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOQU1FLAlvcmlub2NvX2lvY3RsX2dldG5hbWUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdGUkVRLAlvcmlub2NvX2lvY3RsX3NldGZyZXEpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdGUkVRLAlvcmlub2NvX2lvY3RsX2dldGZyZXEpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNT0RFLAlvcmlub2NvX2lvY3RsX3NldG1vZGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdNT0RFLAlvcmlub2NvX2lvY3RsX2dldG1vZGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTRU5TLAlvcmlub2NvX2lvY3RsX3NldHNlbnMpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdTRU5TLAlvcmlub2NvX2lvY3RsX2dldHNlbnMpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSQU5HRSwJb3Jpbm9jb19pb2N0bF9nZXRpd3JhbmdlKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXU1BZLAlpd19oYW5kbGVyX3NldF9zcHkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdTUFksCWl3X2hhbmRsZXJfZ2V0X3NweSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1RIUlNQWSwJaXdfaGFuZGxlcl9zZXRfdGhyc3B5KSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXVEhSU1BZLAlpd19oYW5kbGVyX2dldF90aHJzcHkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdBUCwJb3Jpbm9jb19pb2N0bF9zZXR3YXApLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdBUCwJb3Jpbm9jb19pb2N0bF9nZXR3YXApLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTQ0FOLAlvcmlub2NvX2lvY3RsX3NldHNjYW4pLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdTQ0FOLAlvcmlub2NvX2lvY3RsX2dldHNjYW4pLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFU1NJRCwJb3Jpbm9jb19pb2N0bF9zZXRlc3NpZCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VTU0lELAlvcmlub2NvX2lvY3RsX2dldGVzc2lkKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXTklDS04sCW9yaW5vY29faW9jdGxfc2V0bmljayksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05JQ0tOLAlvcmlub2NvX2lvY3RsX2dldG5pY2spLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdSQVRFLAlvcmlub2NvX2lvY3RsX3NldHJhdGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSQVRFLAlvcmlub2NvX2lvY3RsX2dldHJhdGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdSVFMsCW9yaW5vY29faW9jdGxfc2V0cnRzKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUlRTLAlvcmlub2NvX2lvY3RsX2dldHJ0cyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSQUcsCW9yaW5vY29faW9jdGxfc2V0ZnJhZyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSQUcsCW9yaW5vY29faW9jdGxfZ2V0ZnJhZyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JFVFJZLAlvcmlub2NvX2lvY3RsX2dldHJldHJ5KSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRU5DT0RFLAlvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRU5DT0RFLAlvcmlub2NvX2lvY3RsX2dldGl3ZW5jb2RlKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXUE9XRVIsCW9yaW5vY29faW9jdGxfc2V0cG93ZXIpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdQT1dFUiwJb3Jpbm9jb19pb2N0bF9nZXRwb3dlciksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0dFTklFLAlvcmlub2NvX2lvY3RsX3NldF9nZW5pZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0dFTklFLAlvcmlub2NvX2lvY3RsX2dldF9nZW5pZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01MTUUsCW9yaW5vY29faW9jdGxfc2V0X21sbWUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdBVVRILAlvcmlub2NvX2lvY3RsX3NldF9hdXRoKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXQVVUSCwJb3Jpbm9jb19pb2N0bF9nZXRfYXV0aCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VOQ09ERUVYVCwgb3Jpbm9jb19pb2N0bF9zZXRfZW5jb2RlZXh0KSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRU5DT0RFRVhULCBvcmlub2NvX2lvY3RsX2dldF9lbmNvZGVleHQpLAotfTsKLQotCi0vKgotICBBZGRlZCB0eXBlY2FzdGluZyBzaW5jZSB3ZSBubyBsb25nZXIgdXNlIGl3cmVxX2RhdGEgLS0gTW91c3RhZmEKLSAqLwotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJb3Jpbm9jb19wcml2YXRlX2hhbmRsZXJbXSA9IHsKLQlbMF0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9yZXNldCwKLQlbMV0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9yZXNldCwKLQlbMl0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9zZXRwb3J0MywKLQlbM10gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRwb3J0MywKLQlbNF0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9zZXRwcmVhbWJsZSwKLQlbNV0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRwcmVhbWJsZSwKLQlbNl0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9zZXRpYnNzcG9ydCwKLQlbN10gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRpYnNzcG9ydCwKLQlbOV0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRyaWQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIG9yaW5vY29faGFuZGxlcl9kZWYgPSB7Ci0JLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUob3Jpbm9jb19oYW5kbGVyKSwKLQkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyKSwKLQkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUob3Jpbm9jb19wcml2dGFiKSwKLQkuc3RhbmRhcmQgPSBvcmlub2NvX2hhbmRsZXIsCi0JLnByaXZhdGUgPSBvcmlub2NvX3ByaXZhdGVfaGFuZGxlciwKLQkucHJpdmF0ZV9hcmdzID0gb3Jpbm9jb19wcml2dGFiLAotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cywKLX07Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jc3RybmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSAtIDEpOwotCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSAtIDEpOwotCXN0cm5jcHkoaW5mby0+ZndfdmVyc2lvbiwgcHJpdi0+ZndfbmFtZSwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pIC0gMSk7Ci0JaWYgKGRldi0+ZGV2LnBhcmVudCkKLQkJc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKLQkJCXNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxKTsKLQllbHNlCi0JCXNucHJpbnRmKGluZm8tPmJ1c19pbmZvLCBzaXplb2YoaW5mby0+YnVzX2luZm8pIC0gMSwKLQkJCSAiUENNQ0lBICVwIiwgcHJpdi0+aHcuaW9iYXNlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcmlub2NvX2V0aHRvb2xfb3BzID0gewotCS5nZXRfZHJ2aW5mbyA9IG9yaW5vY29fZ2V0X2RydmluZm8sCi0JLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1vZHVsZSBpbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotRVhQT1JUX1NZTUJPTChhbGxvY19vcmlub2NvZGV2KTsKLUVYUE9SVF9TWU1CT0woZnJlZV9vcmlub2NvZGV2KTsKLQotRVhQT1JUX1NZTUJPTChfX29yaW5vY29fdXApOwotRVhQT1JUX1NZTUJPTChfX29yaW5vY29fZG93bik7Ci1FWFBPUlRfU1lNQk9MKG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKTsKLQotRVhQT1JUX1NZTUJPTChvcmlub2NvX2ludGVycnVwdCk7Ci0KLS8qIENhbid0IGJlIGRlY2xhcmVkICJjb25zdCIgb3IgdGhlIHdob2xlIF9faW5pdGRhdGEgc2VjdGlvbiB3aWxsCi0gKiBiZWNvbWUgY29uc3QgKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gRFJJVkVSX05BTUUgIiAiIERSSVZFUl9WRVJTSU9OCi0JIiAoRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiwgIgotCSJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiwgZXQgYWwpIjsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9vcmlub2NvKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCB2ZXJzaW9uKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfb3Jpbm9jbyh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChpbml0X29yaW5vY28pOwotbW9kdWxlX2V4aXQoZXhpdF9vcmlub2NvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKaW5kZXggMDA3NTBjOC4uOGU1YTcyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKQEAgLTEsNSArMSw1IEBACiAvKiBvcmlub2NvLmgKLSAqIAorICoKICAqIENvbW1vbiBkZWZpbml0aW9ucyB0byBhbGwgcGllY2VzIG9mIHRoZSB2YXJpb3VzIG9yaW5vY28KICAqIGRyaXZlcnMKICAqLwpAQCAtMTgsOSArMTgsOSBAQAogI2luY2x1ZGUgImhlcm1lcy5oIgogCiAvKiBUbyBlbmFibGUgZGVidWcgbWVzc2FnZXMgKi8KLS8vI2RlZmluZSBPUklOT0NPX0RFQlVHCQkzCisvKiNkZWZpbmUgT1JJTk9DT19ERUJVRwkJMyovCiAKLSNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvLyBlbmFibGUgaXdzcHkgc3VwcG9ydAorI2RlZmluZSBXSVJFTEVTU19TUFkJCS8qIGVuYWJsZSBpd3NweSBzdXBwb3J0ICovCiAKICNkZWZpbmUgTUFYX1NDQU5fTEVOCQk0MDk2CiAKQEAgLTU5LDE0ICs1OSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yOwotCi1zdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhIHsKLQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCiBzdHJ1Y3QgZmlybXdhcmU7CiAKIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgewpAQCAtODMsNyArNzUsNiBAQAogCS8qIEludGVycnVwdCB0YXNrbGV0cyAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF90YXNrbGV0OwogCXN0cnVjdCBsaXN0X2hlYWQgcnhfbGlzdDsKLQlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhOwogCiAJLyogZHJpdmVyIHN0YXRlICovCiAJaW50IG9wZW47CkBAIC0xMzAsNyArMTIxLDcgQEAKIAl1MTYgZW5jb2RlX2FsZywgd2VwX3Jlc3RyaWN0LCB0eF9rZXk7CiAJc3RydWN0IG9yaW5vY29fa2V5IGtleXNbT1JJTk9DT19NQVhfS0VZU107CiAJaW50IGJpdHJhdGVtb2RlOwotIAljaGFyIG5pY2tbSVdfRVNTSURfTUFYX1NJWkUrMV07CisJY2hhciBuaWNrW0lXX0VTU0lEX01BWF9TSVpFKzFdOwogCWNoYXIgZGVzaXJlZF9lc3NpZFtJV19FU1NJRF9NQVhfU0laRSsxXTsKIAljaGFyIGRlc2lyZWRfYnNzaWRbRVRIX0FMRU5dOwogCWludCBic3NpZF9maXhlZDsKQEAgLTE0MCw3ICsxMzEsNyBAQAogCXUxNiBwbV9vbiwgcG1fbWNhc3QsIHBtX3BlcmlvZCwgcG1fdGltZW91dDsKIAl1MTYgcHJlYW1ibGU7CiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gCXN0cnVjdCBpd19zcHlfZGF0YSBzcHlfZGF0YTsgLyogaXdzcHkgc3VwcG9ydCAqLworCXN0cnVjdCBpd19zcHlfZGF0YSBzcHlfZGF0YTsgLyogaXdzcHkgc3VwcG9ydCAqLwogCXN0cnVjdCBpd19wdWJsaWNfZGF0YQl3aXJlbGVzc19kYXRhOwogI2VuZGlmCiAKQEAgLTE2OCwxNiArMTU5LDIxIEBACiAJdW5zaWduZWQgaW50IHRraXBfY21fYWN0aXZlOjE7CiAJdW5zaWduZWQgaW50IGtleV9tZ210OjM7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVCkgfHwgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCiAJLyogQ2FjaGVkIGluIG1lbW9yeSBmaXJtd2FyZSB0byB1c2UgZHVyaW5nIC0+cmVzdW1lLiAqLwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqY2FjaGVkX3ByaV9mdzsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmNhY2hlZF9mdzsKKyNlbmRpZgogCiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBtX25vdGlmaWVyOwogfTsKIAogI2lmZGVmIE9SSU5PQ09fREVCVUcKIGV4dGVybiBpbnQgb3Jpbm9jb19kZWJ1ZzsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyBpZiAob3Jpbm9jb19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyB9IHdoaWxlKDApCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGRvIHsgXAorCWlmIChvcmlub2NvX2RlYnVnID4gKG4pKSBcCisJCXByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyBcCit9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCS8qIE9SSU5PQ09fREVCVUcgKi8KQEAgLTE5NCw3ICsxOTAsNyBAQAogZXh0ZXJuIGludCBfX29yaW5vY29fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWV4dGVybiBpcnFyZXR1cm5fdCBvcmlub2NvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICogZGV2X2lkKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBvcmlub2NvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBMb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCmluZGV4IDBiMzIyMTUuLmIzODFhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCkBAIC02LDggKzYsOCBAQAogICogSXQgc2hvdWxkIGFsc28gYmUgdXNhYmxlIG9uIHZhcmlvdXMgUHJpc20gSUkgYmFzZWQgY2FyZHMgc3VjaCBhcyB0aGUKICAqIExpbmtzeXMsIEQtTGluayBhbmQgRmFyYWxsb24gU2t5bGluZS4gSXQgc2hvdWxkIGFsc28gd29yayBvbiBTeW1ib2wKICAqIGNhcmRzIHN1Y2ggYXMgdGhlIDNDb20gQWlyQ29ubmVjdCBhbmQgRXJpY3Nzb24gV0xBTi4KLSAqIAotICogQ29weXJpZ2h0IG5vdGljZSAmIHJlbGVhc2Ugbm90ZXMgaW4gZmlsZSBvcmlub2NvLmMKKyAqCisgKiBDb3B5cmlnaHQgbm90aWNlICYgcmVsZWFzZSBub3RlcyBpbiBmaWxlIG1haW4uYwogICovCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm9yaW5vY29fY3MiCkBAIC0zMCw3ICszMCw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBQQ01DSUEgTHVjZW50IE9yaW5vY28sIFByaXNtIElJIGJhc2VkIGFuZCBzaW1pbGFyIHdpcmVsZXNzIGNhcmRzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUENNQ0lBIEx1Y2VudCBPcmlub2NvLCIKKwkJICAgIiBQcmlzbSBJSSBiYXNlZCBhbmQgc2ltaWxhciB3aXJlbGVzcyBjYXJkcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtNTMsOCArNTQsOCBAQAogCiAJLyogVXNlZCB0byBoYW5kbGUgaGFyZCByZXNldCAqLwogCS8qIHl1Y2ssIHdlIG5lZWQgdGhpcyBoYWNrIHRvIHdvcmsgYXJvdW5kIHRoZSBpbnNhbml0eSBvZiB0aGUKLSAgICAgICAgICogUENNQ0lBIGxheWVyICovCi0JdW5zaWduZWQgbG9uZyBoYXJkX3Jlc2V0X2luX3Byb2dyZXNzOyAKKwkgKiBQQ01DSUEgbGF5ZXIgKi8KKwl1bnNpZ25lZCBsb25nIGhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3M7CiB9OwogCiAKQEAgLTk4LDcgKzk5LDcgQEAKICAqIFRoaXMgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcgbG9jYWwgZGF0YQogICogc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoIENhcmQKICAqIFNlcnZpY2VzLgotICogCisgKgogICogVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgKiBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYSBjYXJkCiAgKiBpbnNlcnRpb24gZXZlbnQuICAqLwpAQCAtMTExLDcgKzExMiw3IEBACiAKIAlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZoYW5kbGVfdG9fZGV2KGxpbmspLAogCQkJICAgICAgIG9yaW5vY29fY3NfaGFyZF9yZXNldCwgTlVMTCk7Ci0JaWYgKCEgZGV2KQorCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKQEAgLTEyNCw3ICsxMjUsNyBAQAogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IG9yaW5vY29faW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsgCisJbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKIAkgKiBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IKQEAgLTE2Miw4ICsxNjMsMTAgQEAKICAqLwogCiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIGRvIHsgXAotCQlsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgXAotCX0gd2hpbGUgKDApCisJbGFzdF9mbiA9IChmbik7IFwKKwlpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIFwKKwkJZ290byBjc19mYWlsZWQ7IFwKK30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbnQgb3Jpbm9jb19jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKQEAgLTMwNyw4ICszMTAsOCBAQAogCSAqIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldl9ub2RlLiAqLwogCXN0cmNweShjYXJkLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOwogCWxpbmstPmRldl9ub2RlID0gJmNhcmQtPm5vZGU7IC8qIGxpbmstPmRldl9ub2RlIGJlaW5nIG5vbi1OVUxMIGlzIGFsc28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLworCQkJCSAgICAgICAqIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKwkJCQkgICAgICAgKiBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KIAogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlcywgaXJxICVkLCBpbyAiCkBAIC0zNTksNyArMzYyLDcgQEAKIAkvKiBUaGlzIGlzIHByb2JhYmx5IHJhY3ksIGJ1dCBJIGNhbid0IHRoaW5rIG9mCiAJICAgYSBiZXR0ZXIgd2F5LCBzaG9ydCBvZiByZXdyaXRpbmcgdGhlIFBDTUNJQQogCSAgIGxheWVyIHRvIG5vdCBzdWNrIDotKCAqLwotCWlmICghIHRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgeworCWlmICghdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkJZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKQEAgLTM4NCw3ICszODcsNyBAQAogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKKwlpZiAoIXRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgewogCQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCkBAIC0zOTcsNyArNDAwLDcgQEAKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCQlwcml2LT5od191bmF2YWlsYWJsZS0tOwogCi0JCWlmIChwcml2LT5vcGVuICYmICEgcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKKwkJaWYgKHByaXYtPm9wZW4gJiYgIXByaXYtPmh3X3VuYXZhaWxhYmxlKSB7CiAJCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKIAkJCWlmIChlcnIpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCmluZGV4IDJmYzg2NTkuLmIwMTcyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKQEAgLTksMTIgKzksMTIgQEAKICAqCiAgKiBTb21lIG9mIHRoaXMgY29kZSBpcyBib3Jyb3dlZCBmcm9tIG9yaW5vY29fcGx4LmMKICAqCUNvcHlyaWdodCAoQykgMjAwMSBEYW5pZWwgQmFybG93Ci0gKiBTb21lIG9mIHRoaXMgY29kZSBpcyBib3Jyb3dlZCBmcm9tIG9yaW5vY29fcGNpLmMgCisgKiBTb21lIG9mIHRoaXMgY29kZSBpcyBib3Jyb3dlZCBmcm9tIG9yaW5vY29fcGNpLmMKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgSmVhbiBUb3VycmlsaGVzCiAgKiBTb21lIG9mIHRoaXMgY29kZSBpcyAiaW5zcGlyZWQiIGJ5IGxpbnV4LXdsYW4tbmctMC4xLjEwLCBidXQgbm90aGluZwogICogaGFzIGJlZW4gY29waWVkIGZyb20gaXQuIGxpbnV4LXdsYW4tbmctMC4xLjEwIGlzIG9yaWdpbmFsbHkgOgogICoJQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIAorICoKICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKICAqIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KICAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlCkBAIC0xMDMsOSArMTAzLDggQEAKIAlpb3dyaXRlMTYoMHg4LCBjYXJkLT5icmlkZ2VfaW8gKyAyKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykgewogCQltZGVsYXkoMzApOwotCQlpZiAoaW9yZWFkMTYoY2FyZC0+YnJpZGdlX2lvKSAmIDB4MTApIHsKKwkJaWYgKGlvcmVhZDE2KGNhcmQtPmJyaWRnZV9pbykgJiAweDEwKQogCQkJYnJlYWs7Ci0JCX0KIAl9CiAJaWYgKGkgPT0gMzApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYnJnMSB0aW1lZCBvdXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCmluZGV4IDRlYmQ2MzguLjc4Y2FmZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKiBvcmlub2NvX3BjaS5jCi0gKiAKKyAqCiAgKiBEcml2ZXIgZm9yIFByaXNtIDIuNS8zIGRldmljZXMgdGhhdCBoYXZlIGEgZGlyZWN0IFBDSSBpbnRlcmZhY2UKICAqIChpLmUuIHRoZXNlIGFyZSBub3QgUENNQ0lBIGNhcmRzIGluIGEgUENNQ0lBLXRvLVBDSSBicmlkZ2UpLgogICogVGhlIGNhcmQgY29udGFpbnMgb25seSBvbmUgUENJIHJlZ2lvbiwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSB1c3VhbApAQCAtMjM3LDcgKzIzNyw4IEBACiAJIiAoUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4sIgogCSIgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiAmIgogCSIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPikiOwotTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4gJiBEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7CitNT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiAmIgorCSAgICAgICIgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHdpcmVsZXNzIExBTiBjYXJkcyB1c2luZyBkaXJlY3QgUENJIGludGVyZmFjZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmgKaW5kZXggZjRlNWUwNi4uYzY1NWI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaApAQCAtMSwxMCArMSwxMCBAQAogLyogb3Jpbm9jb19wY2kuaAotICogCisgKgogICogQ29tbW9uIGNvZGUgZm9yIGFsbCBPcmlub2NvIGRyaXZlcnMgZm9yIFBDSSBkZXZpY2VzLCBpbmNsdWRpbmcKICAqIGJvdGggbmF0aXZlIFBDSSBhbmQgUENNQ0lBLXRvLVBDSSBicmlkZ2VzLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSwgUGF2ZWwgUm9za2luLgotICogU2VlIG9yaW5vY28uYyBmb3IgbGljZW5zZS4KKyAqIFNlZSBtYWluLmMgZm9yIGxpY2Vuc2UuCiAgKi8KIAogI2lmbmRlZiBfT1JJTk9DT19QQ0lfSApAQCAtMzcsMTEgKzM3LDExIEBACiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGVycm9yICVkIGJyaW5naW5nIGludGVyZmFjZSBkb3duICIKIAkJICAgICAgICJmb3Igc3VzcGVuZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQorCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKLQkKKwogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAKIAlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CkBAIC05MCwxMyArOTAsMTMgQEAKIAogCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CiAKLQlpZiAocHJpdi0+b3BlbiAmJiAoISBwcml2LT5od191bmF2YWlsYWJsZSkpIHsKKwlpZiAocHJpdi0+b3BlbiAmJiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSkgewogCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKIAkJaWYgKGVycikKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZCBvbiByZXN1bWVcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwogCX0KLQkKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCmluZGV4IGVmNzYxODUuLmEyYTQ0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKQEAgLTE0Niw5ICsxNDYsOCBAQAogCX07CiAKIAlwcmludGsoS0VSTl9ERUJVRyBQRlggIkNJUzogIik7Ci0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJcHJpbnRrKCIlMDJYOiIsIGlvcmVhZDgoY2FyZC0+YXR0cl9pbyArIChpIDw8IDEpKSk7Ci0JfQogCXByaW50aygiXG4iKTsKIAogCS8qIFZlcmlmeSB3aGV0aGVyIGEgc3VwcG9ydGVkIFBDIGNhcmQgaXMgcHJlc2VudCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCmluZGV4IGVkZTI0ZWMuLmNkYTBlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKQEAgLTEsNyArMSw3IEBACiAvKiBvcmlub2NvX3RtZC5jCiAgKgogICogRHJpdmVyIGZvciBQcmlzbSBJSSBkZXZpY2VzIHdoaWNoIHdvdWxkIHVzdWFsbHkgYmUgZHJpdmVuIGJ5IG9yaW5vY29fY3MsCi0gKiBidXQgYXJlIGNvbm5lY3RlZCB0byB0aGUgUENJIGJ1cyBieSBhIFRNRDcxNjAuIAorICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBUTUQ3MTYwLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMyBKb2VyZyBEb3JjaGFpbiA8am9lcmcgQVQgZG9yY2hhaW4ubmV0PgogICogYmFzZWQgaGVhdmlseSB1cG9uIG9yaW5vY29fcGx4LmMgQ29weXJpZ2h0IChDKSAyMDAxIERhbmllbCBCYXJsb3cKQEAgLTI3LDcgKzI3LDcgQEAKICAqIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQogICogdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KICAqCi0gKiBUaGUgYWN0dWFsIGRyaXZpbmcgaXMgZG9uZSBieSBvcmlub2NvLmMsIHRoaXMgaXMganVzdCByZXNvdXJjZQorICogVGhlIGFjdHVhbCBkcml2aW5nIGlzIGRvbmUgYnkgbWFpbi5jLCB0aGlzIGlzIGp1c3QgcmVzb3VyY2UKICAqIGFsbG9jYXRpb24gc3R1ZmYuCiAgKgogICogVGhpcyBkcml2ZXIgaXMgbW9kZWxlZCBhZnRlciB0aGUgb3Jpbm9jb19wbHggZHJpdmVyLiBUaGUgbWFpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ2OTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMKQEAgLTAsMCArMSwyMzMgQEAKKy8qIEhlbHBlcnMgZm9yIG1hbmFnaW5nIHNjYW4gcXVldWVzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJoZXJtZXMuaCIKKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKyNpbmNsdWRlICJzY2FuLmgiCisKKyNkZWZpbmUgT1JJTk9DT19NQVhfQlNTX0NPVU5UCTY0CisKKyNkZWZpbmUgUFJJVl9CU1MJKChzdHJ1Y3QgYnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQorI2RlZmluZSBQUklWX1hCU1MJKChzdHJ1Y3QgeGJzc19lbGVtZW50ICopcHJpdi0+YnNzX3hic3NfZGF0YSkKKworaW50IG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+YnNzX3hic3NfZGF0YSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQorCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHhic3NfZWxlbWVudCksCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWVsc2UKKwkJcHJpdi0+YnNzX3hic3NfZGF0YSA9IGt6YWxsb2MoT1JJTk9DT19NQVhfQlNTX0NPVU5UICoKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBic3NfZWxlbWVudCksCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCFwcml2LT5ic3NfeGJzc19kYXRhKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBiZWFjb25zIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBvcmlub2NvX2Jzc19kYXRhX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlrZnJlZShwcml2LT5ic3NfeGJzc19kYXRhKTsKKwlwcml2LT5ic3NfeGJzc19kYXRhID0gTlVMTDsKK30KKwordm9pZCBvcmlub2NvX2Jzc19kYXRhX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgaTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfZnJlZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2xpc3QpOworCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCisJCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9CU1NfQ09VTlQ7IGkrKykKKwkJCWxpc3RfYWRkX3RhaWwoJihQUklWX1hCU1NbaV0ubGlzdCksCisJCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOworCWVsc2UKKwkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQorCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfQlNTW2ldLmxpc3QpLAorCQkJCSAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKKworfQorCit2b2lkIG9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJdW5zaWduZWQgbG9uZyBzY2FuX2FnZSkKK3sKKwlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7CisJCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzczsKKwkJc3RydWN0IHhic3NfZWxlbWVudCAqdG1wX2JzczsKKworCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghc2Nhbl9hZ2UgfHwKKwkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7CisJCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKKwkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKKwkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCisJCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7CisJCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7CisJCXN0cnVjdCBic3NfZWxlbWVudCAqdG1wX2JzczsKKworCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghc2Nhbl9hZ2UgfHwKKwkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7CisJCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKKwkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKKwkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCisJCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7CisJCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIG9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYXRvbSkKK3sKKwlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3MgPSBOVUxMOworCWludCBmb3VuZCA9IDA7CisKKwkvKiBUcnkgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGJzcyBmaXJzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3MtPmJzcy5ic3NpZCwgYXRvbS0+YnNzaWQpKQorCQkJY29udGludWU7CisJCS8qIEVTU0lEIGxlbmd0aHMgKi8KKwkJaWYgKGJzcy0+YnNzLmRhdGFbMV0gIT0gYXRvbS0+ZGF0YVsxXSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWVtY21wKCZic3MtPmJzcy5kYXRhWzJdLCAmYXRvbS0+ZGF0YVsyXSwKKwkJCSAgIGF0b20tPmRhdGFbMV0pKQorCQkJY29udGludWU7CisJCWZvdW5kID0gMTsKKwkJYnJlYWs7CisJfQorCisJLyogR3JhYiBhIGJzcyBvZmYgdGhlIGZyZWUgbGlzdCAqLworCWlmICghZm91bmQgJiYgIWxpc3RfZW1wdHkoJnByaXYtPmJzc19mcmVlX2xpc3QpKSB7CisJCWJzcyA9IGxpc3RfZW50cnkocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0LAorCQkJCSBzdHJ1Y3QgeGJzc19lbGVtZW50LCBsaXN0KTsKKwkJbGlzdF9kZWwocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0KTsKKworCQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZwcml2LT5ic3NfbGlzdCk7CisJfQorCisJaWYgKGJzcykgeworCQkvKiBBbHdheXMgdXBkYXRlIHRoZSBCU1MgdG8gZ2V0IGxhdGVzdCBiZWFjb24gaW5mbyAqLworCQltZW1jcHkoJmJzcy0+YnNzLCBhdG9tLCBzaXplb2YoYnNzLT5ic3MpKTsKKwkJYnNzLT5sYXN0X3NjYW5uZWQgPSBqaWZmaWVzOworCX0KK30KKworaW50IG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCWludAkJCW9mZnNldDsJCS8qIEluIHRoZSBzY2FuIGRhdGEgKi8KKwl1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICphdG9tOworCWludAkJCWF0b21fbGVuOworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQlhdG9tX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWdlcmVfc2Nhbl9hcGluZm8pOworCQlvZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQkvKiBMYWNrIG9mIGRvY3VtZW50YXRpb24gbmVjZXNzaXRhdGVzIHRoaXMgaGFjay4KKwkJICogRGlmZmVyZW50IGZpcm13YXJlcyBoYXZlIDY4IG9yIDc2IGJ5dGUgbG9uZyBhdG9tcy4KKwkJICogV2UgdHJ5IG1vZHVsbyBmaXJzdC4gIElmIHRoZSBsZW5ndGggZGl2aWRlcyBieSBib3RoLAorCQkgKiB3ZSBjaGVjayB3aGF0IHdvdWxkIGJlIHRoZSBjaGFubmVsIGluIHRoZSBzZWNvbmQKKwkJICogZnJhbWUgZm9yIGEgNjgtYnl0ZSBhdG9tLiAgNzYtYnl0ZSBhdG9tcyBoYXZlIDAgdGhlcmUuCisJCSAqIFZhbGlkIGNoYW5uZWwgY2Fubm90IGJlIDAuICAqLworCQlpZiAobGVuICUgNzYpCisJCQlhdG9tX2xlbiA9IDY4OworCQllbHNlIGlmIChsZW4gJSA2OCkKKwkJCWF0b21fbGVuID0gNzY7CisJCWVsc2UgaWYgKGxlbiA+PSAxMjkyICYmIGJ1Zls2OF0gPT0gMCkKKwkJCWF0b21fbGVuID0gNzY7CisJCWVsc2UKKwkJCWF0b21fbGVuID0gNjg7CisJCW9mZnNldCA9IDA7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJb2Zmc2V0ID0gNDsKKwkJaWYgKHByaXYtPmhhc19ob3N0c2NhbikgeworCQkJYXRvbV9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWJ1Zik7CisJCQkvKiBTYW5pdHkgY2hlY2sgZm9yIGF0b21fbGVuICovCisJCQlpZiAoYXRvbV9sZW4gPCBzaXplb2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbykpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGF0b21fbGVuIGluIHNjYW4gIgorCQkJCSAgICAgICAiZGF0YTogJWRcbiIsIHByaXYtPm5kZXYtPm5hbWUsCisJCQkJICAgICAgIGF0b21fbGVuKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfSBlbHNlCisJCQlhdG9tX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8sIGF0aW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogQ2hlY2sgdGhhdCB3ZSBnb3QgYW4gd2hvbGUgbnVtYmVyIG9mIGF0b21zICovCisJaWYgKChsZW4gLSBvZmZzZXQpICUgYXRvbV9sZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5leHBlY3RlZCBzY2FuIGRhdGEgbGVuZ3RoICVkLCAiCisJCSAgICAgICAiYXRvbV9sZW4gJWQsIG9mZnNldCAlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSwgbGVuLAorCQkgICAgICAgYXRvbV9sZW4sIG9mZnNldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIG1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKKworCS8qIFJlYWQgdGhlIGVudHJpZXMgb25lIGJ5IG9uZSAqLworCWZvciAoOyBvZmZzZXQgKyBhdG9tX2xlbiA8PSBsZW47IG9mZnNldCArPSBhdG9tX2xlbikgeworCQlpbnQgZm91bmQgPSAwOworCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7CisKKwkJLyogR2V0IG5leHQgYXRvbSAqLworCQlhdG9tID0gKHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKikgKGJ1ZiArIG9mZnNldCk7CisKKwkJLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3MtPmJzcy5hLmJzc2lkLCBhdG9tLT5hLmJzc2lkKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChsZTE2X3RvX2NwdShic3MtPmJzcy5hLmVzc2lkX2xlbikgIT0KKwkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChtZW1jbXAoYnNzLT5ic3MuYS5lc3NpZCwgYXRvbS0+YS5lc3NpZCwKKwkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkpCisJCQkJY29udGludWU7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KKwkJaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKKwkJCWJzcyA9IGxpc3RfZW50cnkocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0LAorCQkJCQkgc3RydWN0IGJzc19lbGVtZW50LCBsaXN0KTsKKwkJCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7CisKKwkJCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKKwkJfQorCisJCWlmIChic3MpIHsKKwkJCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCisJCQltZW1jcHkoJmJzcy0+YnNzLCBhdG9tLCBzaXplb2YoYnNzLT5ic3MpKTsKKwkJCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE5Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmgKQEAgLTAsMCArMSwyOSBAQAorLyogSGVscGVycyBmb3IgbWFuYWdpbmcgc2NhbiBxdWV1ZXMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19TQ0FOX0hfCisjZGVmaW5lIF9PUklOT0NPX1NDQU5fSF8KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGU7CitzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbzsKKworLyogU2V0dXAgYW5kIGZyZWUgbWVtb3J5IGZvciBzY2FuIHJlc3VsdHMgKi8KK2ludCBvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwordm9pZCBvcmlub2NvX2Jzc19kYXRhX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG9yaW5vY29fYnNzX2RhdGFfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKKworLyogQWRkIHNjYW4gcmVzdWx0cyAqLwordm9pZCBvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmF0b20pOworaW50IG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqZGV2LAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJIGludCBsZW4pOworCisvKiBDbGVhciBzY2FuIHJlc3VsdHMgKi8KK3ZvaWQgb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQl1bnNpZ25lZCBsb25nIHNjYW5fYWdlKTsKKworCisjZW5kaWYgLyogX09SSU5PQ09fU0NBTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCmluZGV4IGIyY2EyZTMuLjM4ZTUxOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb21tdW5pY2F0aW9ucyBhbmQgSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCLgogICoKICAqIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBTeW1ib2wgZmlybXdhcmUgZG93bmxvYWQuICBUaGUgcmVzdCBpcyBoYW5kbGVkCi0gKiBpbiBoZXJtZXMuYyBhbmQgb3Jpbm9jby5jLgorICogaW4gaGVybWVzLmMgYW5kIG1haW4uYy4KICAqCiAgKiBVdGlsaXRpZXMgZm9yIGRvd25sb2FkaW5nIHRoZSBTeW1ib2wgZmlybXdhcmUgYXJlIGF2YWlsYWJsZSBhdAogICogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9vcmlub2NvLwpAQCAtMTUsNyArMTUsNyBAQAogICogUG9ydGlvbnMgYmFzZWQgb24gU3BlY3RydW0yNHREbmxkLmMgZnJvbSBvcmlnaW5hbCBzcGVjdHJ1bTI0IGRyaXZlcjoKICAqIAlDb3B5cmlnaHQgKEMpIFN5bWJvbCBUZWNobm9sb2dpZXMuCiAgKgotICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gZmlsZSBvcmlub2NvLmMuCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBmaWxlIG1haW4uYy4KICAqLwogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJzcGVjdHJ1bV9jcyIKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXVkZWxheSgxMDAwKTsKIAlyZXR1cm4gMDsKIAotICAgICAgY3NfZmFpbGVkOgorY3NfZmFpbGVkOgogCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTE3MSw3ICsxNzEsNyBAQAogICogVGhpcyBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZyBsb2NhbCBkYXRhCiAgKiBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGggQ2FyZAogICogU2VydmljZXMuCi0gKiAKKyAqCiAgKiBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKICAqIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhIGNhcmQKICAqIGluc2VydGlvbiBldmVudC4gICovCkBAIC0xODUsNyArMTg1LDcgQEAKIAlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZoYW5kbGVfdG9fZGV2KGxpbmspLAogCQkJICAgICAgIHNwZWN0cnVtX2NzX2hhcmRfcmVzZXQsCiAJCQkgICAgICAgc3BlY3RydW1fY3Nfc3RvcF9maXJtd2FyZSk7Ci0JaWYgKCEgZGV2KQorCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKQEAgLTE5OCw3ICsxOTgsNyBAQAogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IG9yaW5vY29faW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsgCisJbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKIAkgKiBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IKQEAgLTM2Nyw5ICszNjcsOCBAQAogCWNhcmQtPm5vZGUubWFqb3IgPSBjYXJkLT5ub2RlLm1pbm9yID0gMDsKIAogCS8qIFJlc2V0IGNhcmQgKi8KLQlpZiAoc3BlY3RydW1fY3NfaGFyZF9yZXNldChwcml2KSAhPSAwKSB7CisJaWYgKHNwZWN0cnVtX2NzX2hhcmRfcmVzZXQocHJpdikgIT0gMCkKIAkJZ290byBmYWlsZWQ7Ci0JfQogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CiAJLyogVGVsbCB0aGUgc3RhY2sgd2UgZXhpc3QgKi8KQEAgLTM4Miw4ICszODEsOCBAQAogCSAqIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldl9ub2RlLiAqLwogCXN0cmNweShjYXJkLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOwogCWxpbmstPmRldl9ub2RlID0gJmNhcmQtPm5vZGU7IC8qIGxpbmstPmRldl9ub2RlIGJlaW5nIG5vbi1OVUxMIGlzIGFsc28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLworCQkJCSAgICAgICAqIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKwkJCQkgICAgICAgKiBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KIAogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlcywgaXJxICVkLCBpbyAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYwpAQCAtMCwwICsxLDIzMjUgQEAKKy8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgc3VwcG9ydC4KKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKworI2luY2x1ZGUgImhlcm1lcy5oIgorI2luY2x1ZGUgImhlcm1lc19yaWQuaCIKKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgIm1pYy5oIgorI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJtYWluLmgiCisKKyNpbmNsdWRlICJ3ZXh0LmgiCisKKyNkZWZpbmUgTUFYX1JJRF9MRU4gMTAyNAorCitzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKm9yaW5vY29fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZ2V0X3dpcmVsZXNzX3N0YXRzKCkgY2FsbGVkIHdoaWxlIGRldmljZSBub3QgcHJlc2VudFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBOVUxMOyAvKiBGSVhNRTogQ2FuIHdlIGRvIGJldHRlciB0aGFuIHRoaXM/ICovCisJfQorCisJLyogSWYgYnVzeSwgcmV0dXJuIHRoZSBvbGQgc3RhdHMuICBSZXR1cm5pbmcgTlVMTCBtYXkgY2F1c2UKKwkgKiB0aGUgaW50ZXJmYWNlIHRvIGRpc2FwcGVhciBmcm9tIC9wcm9jL25ldC93aXJlbGVzcyAqLworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gd3N0YXRzOworCisJLyogV2UgY2FuJ3QgcmVhbGx5IHdhaXQgZm9yIHRoZSB0YWxsaWVzIGlucXVpcnkgY29tbWFuZCB0bworCSAqIGNvbXBsZXRlLCBzbyB3ZSBqdXN0IHVzZSB0aGUgcHJldmlvdXMgcmVzdWx0cyBhbmQgdHJpZ2dlcgorCSAqIGEgbmV3IHRhbGxpZXMgaW5xdWlyeSBjb21tYW5kIGZvciBuZXh0IHRpbWUgLSBKZWFuIElJICovCisJLyogRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGlucXVpcnkgdG8gY29tZSBiYWNrIC0KKwkgKiBhcyBpdCBpcyB0aGUgc3RhdHMgd2UgZ2l2ZSBkb24ndCBtYWtlIGEgd2hvbGUgbG90IG9mIHNlbnNlLgorCSAqIFVuZm9ydHVuYXRlbHksIGl0J3Mgbm90IGNsZWFyIGhvdyB0byBkbyB0aGF0IHdpdGhpbiB0aGUKKwkgKiB3aXJlbGVzcyBleHRlbnNpb25zIGZyYW1ld29yazogSSB0aGluayB3ZSdyZSBpbiB1c2VyCisJICogY29udGV4dCwgYnV0IGEgbG9jayBzZWVtcyB0byBiZSBoZWxkIGJ5IHRoZSB0aW1lIHdlIGdldCBpbgorCSAqIGhlcmUgc28gd2UncmUgbm90IHNhZmUgdG8gc2xlZXAgaGVyZS4gKi8KKwloZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9UQUxMSUVTKTsKKworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKKwkJbWVtc2V0KCZ3c3RhdHMtPnF1YWwsIDAsIHNpemVvZih3c3RhdHMtPnF1YWwpKTsKKwkJLyogSWYgYSBzcHkgYWRkcmVzcyBpcyBkZWZpbmVkLCB3ZSByZXBvcnQgc3RhdHMgb2YgdGhlCisJCSAqIGZpcnN0IHNweSBhZGRyZXNzIC0gSmVhbiBJSSAqLworCQlpZiAoU1BZX05VTUJFUihwcml2KSkgeworCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5xdWFsOworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gcHJpdi0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubGV2ZWw7CisJCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5ub2lzZTsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0KKwkJCQlwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS51cGRhdGVkOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHsKKwkJCV9fbGUxNiBxdWFsLCBzaWduYWwsIG5vaXNlLCB1bnVzZWQ7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNxOworCisJCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCSBIRVJNRVNfUklEX0NPTU1TUVVBTElUWSwgJmNxKTsKKworCQlpZiAoIWVycikgeworCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSAoaW50KWxlMTZfdG9fY3B1KGNxLnF1YWwpOworCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gKGludClsZTE2X3RvX2NwdShjcS5zaWduYWwpIC0gMHg5NTsKKwkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IChpbnQpbGUxNl90b19jcHUoY3Eubm9pc2UpIC0gMHg5NTsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0KKwkJCQlJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07CisJCX0KKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiB3c3RhdHM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG5hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgY2hhciAqbmFtZSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IG51bXJhdGVzOworCWludCBlcnI7CisKKwllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsIE5VTEwsIDApOworCisJaWYgKCFlcnIgJiYgKG51bXJhdGVzID4gMikpCisJCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTFiIik7CisJZWxzZQorCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExLURTIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdGF0aWMgY29uc3QgdTggb2ZmX2FkZHJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCBhbnlfYWRkcltdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIEVuYWJsZSBhdXRvbWF0aWMgcm9hbWluZyAtIG5vIHNhbml0eSBjaGVja3MgYXJlIG5lZWRlZCAqLworCWlmIChtZW1jbXAoJmFwX2FkZHItPnNhX2RhdGEsIG9mZl9hZGRyLCBFVEhfQUxFTikgPT0gMCB8fAorCSAgICBtZW1jbXAoJmFwX2FkZHItPnNhX2RhdGEsIGFueV9hZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCQlwcml2LT5ic3NpZF9maXhlZCA9IDA7CisJCW1lbXNldChwcml2LT5kZXNpcmVkX2Jzc2lkLCAwLCBFVEhfQUxFTik7CisKKwkJLyogIm9mZiIgbWVhbnMga2VlcCBleGlzdGluZyBjb25uZWN0aW9uICovCisJCWlmIChhcF9hZGRyLT5zYV9kYXRhWzBdID09IDApIHsKKwkJCV9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOworCQkJZXJyID0gMDsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBMdWNlbnQvQWdlcmUgZmlybXdhcmUgZG9lc24ndCAiCisJCSAgICAgICAic3VwcG9ydCBtYW51YWwgcm9hbWluZ1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNYW51YWwgcm9hbWluZyBzdXBwb3J0ZWQgb25seSBpbiAiCisJCSAgICAgICAibWFuYWdlZCBtb2RlXG4iLCBkZXYtPm5hbWUpOworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSW50ZXJzaWwgZmlybXdhcmUgaGFuZ3Mgd2l0aG91dCBEZXNpcmVkIEVTU0lEICovCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9JTlRFUlNJTCAmJgorCSAgICBzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRGVzaXJlZCBFU1NJRCBtdXN0IGJlIHNldCBmb3IgIgorCQkgICAgICAgIm1hbnVhbCByb2FtaW5nXG4iLCBkZXYtPm5hbWUpOworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRmluYWxseSwgZW5hYmxlIG1hbnVhbCByb2FtaW5nICovCisJcHJpdi0+YnNzaWRfZml4ZWQgPSAxOworCW1lbWNweShwcml2LT5kZXNpcmVkX2Jzc2lkLCAmYXBfYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRCU1NJRCwKKwkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBhcF9hZGRyLT5zYV9kYXRhKTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSB1MzIgKm1vZGUsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwcml2LT5pd19tb2RlID09ICptb2RlKQorCQlyZXR1cm4gMDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoICgqbW9kZSkgeworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJaWYgKCFwcml2LT5oYXNfaWJzcyAmJiAhcHJpdi0+aGFzX3BvcnQzKQorCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCisJY2FzZSBJV19NT0RFX0lORlJBOgorCQlicmVhazsKKworCWNhc2UgSVdfTU9ERV9NT05JVE9SOgorCQlpZiAocHJpdi0+YnJva2VuX21vbml0b3IgJiYgIWZvcmNlX21vbml0b3IpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNb25pdG9yIG1vZGUgc3VwcG9ydCBpcyAiCisJCQkgICAgICAgImJ1Z2d5IGluIHRoaXMgZmlybXdhcmUsIG5vdCBlbmFibGluZ1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJcHJpdi0+aXdfbW9kZSA9ICptb2RlOworCQlzZXRfcG9ydF90eXBlKHByaXYpOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSB1MzIgKm1vZGUsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJKm1vZGUgPSBwcml2LT5pd19tb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKnJycSwKKwkJCQkgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJaW50IG51bXJhdGVzOworCWludCBpLCBrOworCisJcnJxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIyOworCisJLyogU2V0IGF2YWlsYWJsZSBjaGFubmVscy9mcmVxdWVuY2llcyAqLworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBOVU1fQ0hBTk5FTFM7CisJayA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7CisJCWlmIChwcml2LT5jaGFubmVsX21hc2sgJiAoMSA8PCBpKSkgeworCQkJcmFuZ2UtPmZyZXFba10uaSA9IGkgKyAxOworCQkJcmFuZ2UtPmZyZXFba10ubSA9IChpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoaSArIDEpICoKKwkJCQkJICAgIDEwMDAwMCk7CisJCQlyYW5nZS0+ZnJlcVtrXS5lID0gMTsKKwkJCWsrKzsKKwkJfQorCisJCWlmIChrID49IElXX01BWF9GUkVRVUVOQ0lFUykKKwkJCWJyZWFrOworCX0KKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CisJcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsKKworCWlmIChwcml2LT5oYXNfd2VwKSB7CisJCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gT1JJTk9DT19NQVhfS0VZUzsKKwkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSBTTUFMTF9LRVlfU0laRTsKKwkJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDE7CisKKwkJaWYgKHByaXYtPmhhc19iaWdfd2VwKSB7CisJCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IExBUkdFX0tFWV9TSVpFOworCQkJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aGFzX3dwYSkKKwkJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVA7CisKKwlpZiAoKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgJiYgKCFTUFlfTlVNQkVSKHByaXYpKSkgeworCQkvKiBRdWFsaXR5IHN0YXRzIG1lYW5pbmdsZXNzIGluIGFkLWhvYyBtb2RlICovCisJfSBlbHNlIHsKKwkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAweDhiIC0gMHgyZjsKKwkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMHgyZiAtIDB4OTUgLSAxOworCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAweDJmIC0gMHg5NSAtIDE7CisJCS8qIE5lZWQgdG8gZ2V0IGJldHRlciB2YWx1ZXMgKi8KKwkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSAweDI0OworCQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAweEMyOworCQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAweDlFOworCX0KKworCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywKKwkJCQkJIHJhbmdlLT5iaXRyYXRlLCBJV19NQVhfQklUUkFURVMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IG51bXJhdGVzOworCisJLyogU2V0IGFuIGluZGljYXRpb24gb2YgdGhlIG1heCBUQ1AgdGhyb3VnaHB1dCBpbiBiaXQvcyB0aGF0IHdlIGNhbgorCSAqIGV4cGVjdCB1c2luZyB0aGlzIGludGVyZmFjZS4gTWF5IGJlIHVzZSBmb3IgUW9TIHN0dWZmLi4uCisJICogSmVhbiBJSSAqLworCWlmIChudW1yYXRlcyA+IDIpCisJCXJhbmdlLT50aHJvdWdocHV0ID0gNSAqIDEwMDAgKiAxMDAwOwkvKiB+NSBNYi9zICovCisJZWxzZQorCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDEuNSAqIDEwMDAgKiAxMDAwOwkvKiB+MS41IE1iL3MgKi8KKworCXJhbmdlLT5taW5fcnRzID0gMDsKKwlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7CisJcmFuZ2UtPm1pbl9mcmFnID0gMjU2OworCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7CisKKwlyYW5nZS0+bWluX3BtcCA9IDA7CisJcmFuZ2UtPm1heF9wbXAgPSA2NTUzNTAwMDsKKwlyYW5nZS0+bWluX3BtdCA9IDA7CisJcmFuZ2UtPm1heF9wbXQgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLworCXJhbmdlLT5wbXBfZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7CisJcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7CisJcmFuZ2UtPnBtX2NhcGEgPSAoSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfVElNRU9VVCB8CisJCQkgIElXX1BPV0VSX1VOSUNBU1RfUik7CisKKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTElGRVRJTUU7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJfdGltZV9mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSA2NTUzNTsJLyogPz8/ICovCisJcmFuZ2UtPm1pbl9yX3RpbWUgPSAwOworCXJhbmdlLT5tYXhfcl90aW1lID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KKworCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpCisJCXJhbmdlLT5zY2FuX2NhcGEgPSBJV19TQ0FOX0NBUEFfRVNTSUQ7CisJZWxzZQorCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX05PTkU7CisKKwkvKiBFdmVudCBjYXBhYmlsaXR5IChrZXJuZWwpICovCisJSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKKwkvKiBFdmVudCBjYXBhYmlsaXR5IChkcml2ZXIpICovCisJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdUSFJTUFkpOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CisJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIElXRVZUWERST1ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLAorCQkJCSAgICAgY2hhciAqa2V5YnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJaW50IHNldGluZGV4ID0gcHJpdi0+dHhfa2V5OworCWludCBlbmNvZGVfYWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKKwlpbnQgcmVzdHJpY3RlZCA9IHByaXYtPndlcF9yZXN0cmljdDsKKwl1MTYgeGxlbiA9IDA7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwcml2LT5oYXNfd2VwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoZXJxLT5wb2ludGVyKSB7CisJCS8qIFdlIGFjdHVhbGx5IGhhdmUgYSBrZXkgdG8gc2V0IC0gY2hlY2sgaXRzIGxlbmd0aCAqLworCQlpZiAoZXJxLT5sZW5ndGggPiBMQVJHRV9LRVlfU0laRSkKKwkJCXJldHVybiAtRTJCSUc7CisKKwkJaWYgKChlcnEtPmxlbmd0aCA+IFNNQUxMX0tFWV9TSVpFKSAmJiAhcHJpdi0+aGFzX2JpZ193ZXApCisJCQlyZXR1cm4gLUUyQklHOworCX0KKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogQ2xlYXIgYW55IFRLSVAga2V5IHdlIGhhdmUgKi8KKwlpZiAoKHByaXYtPmhhc193cGEpICYmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkpCisJCSh2b2lkKSBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHByaXYsIHNldGluZGV4KTsKKworCWlmIChlcnEtPmxlbmd0aCA+IDApIHsKKwkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkKKwkJCWluZGV4ID0gcHJpdi0+dHhfa2V5OworCisJCS8qIEFkanVzdCBrZXkgbGVuZ3RoIHRvIGEgc3VwcG9ydGVkIHZhbHVlICovCisJCWlmIChlcnEtPmxlbmd0aCA+IFNNQUxMX0tFWV9TSVpFKQorCQkJeGxlbiA9IExBUkdFX0tFWV9TSVpFOworCQllbHNlIGlmIChlcnEtPmxlbmd0aCA+IDApCisJCQl4bGVuID0gU01BTExfS0VZX1NJWkU7CisJCWVsc2UKKwkJCXhsZW4gPSAwOworCisJCS8qIFN3aXRjaCBvbiBXRVAgaWYgb2ZmICovCisJCWlmICgoZW5jb2RlX2FsZyAhPSBJV19FTkNPREVfQUxHX1dFUCkgJiYgKHhsZW4gPiAwKSkgeworCQkJc2V0aW5kZXggPSBpbmRleDsKKwkJCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEltcG9ydGFudCBub3RlIDogaWYgdGhlIHVzZXIgZG8gIml3Y29uZmlnIGV0aDAgZW5jIG9mZiIsCisJCSAqIHdlIHdpbGwgYXJyaXZlIHRoZXJlIHdpdGggYW4gaW5kZXggb2YgLTEuIFRoaXMgaXMgdmFsaWQKKwkJICogYnV0IG5lZWQgdG8gYmUgdGFrZW4gY2FyZSBvZmYuLi4gSmVhbiBJSSAqLworCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKSB7CisJCQlpZiAoKGluZGV4ICE9IC0xKSB8fCAoZXJxLT5mbGFncyA9PSAwKSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBTZXQgdGhlIGluZGV4IDogQ2hlY2sgdGhhdCB0aGUga2V5IGlzIHZhbGlkICovCisJCQlpZiAocHJpdi0+a2V5c1tpbmRleF0ubGVuID09IDApIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJc2V0aW5kZXggPSBpbmRleDsKKwkJfQorCX0KKworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQorCQllbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCisJCXJlc3RyaWN0ZWQgPSAwOworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCisJCXJlc3RyaWN0ZWQgPSAxOworCisJaWYgKGVycS0+cG9pbnRlciAmJiBlcnEtPmxlbmd0aCA+IDApIHsKKwkJcHJpdi0+a2V5c1tpbmRleF0ubGVuID0gY3B1X3RvX2xlMTYoeGxlbik7CisJCW1lbXNldChwcml2LT5rZXlzW2luZGV4XS5kYXRhLCAwLAorCQkgICAgICAgc2l6ZW9mKHByaXYtPmtleXNbaW5kZXhdLmRhdGEpKTsKKwkJbWVtY3B5KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIGtleWJ1ZiwgZXJxLT5sZW5ndGgpOworCX0KKwlwcml2LT50eF9rZXkgPSBzZXRpbmRleDsKKworCS8qIFRyeSBmYXN0IGtleSBjaGFuZ2UgaWYgY29ubmVjdGVkIGFuZCBvbmx5IGtleXMgYXJlIGNoYW5nZWQgKi8KKwlpZiAoKHByaXYtPmVuY29kZV9hbGcgPT0gZW5jb2RlX2FsZykgJiYKKwkgICAgKHByaXYtPndlcF9yZXN0cmljdCA9PSByZXN0cmljdGVkKSAmJgorCSAgICBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJZXJyID0gX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMocHJpdik7CisJCS8qIE5vIG5lZWQgdG8gY29tbWl0IGlmIHN1Y2Nlc3NmdWwgKi8KKwkJZ290byBvdXQ7CisJfQorCisJcHJpdi0+ZW5jb2RlX2FsZyA9IGVuY29kZV9hbGc7CisJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gcmVzdHJpY3RlZDsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGl3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsCisJCQkJICAgICBjaGFyICprZXlidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwl1MTYgeGxlbiA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+aGFzX3dlcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQorCQlpbmRleCA9IHByaXYtPnR4X2tleTsKKworCWVycS0+ZmxhZ3MgPSAwOworCWlmICghcHJpdi0+ZW5jb2RlX2FsZykKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7CisJZXJxLT5mbGFncyB8PSBpbmRleCArIDE7CisKKwlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9SRVNUUklDVEVEOworCWVsc2UKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKKworCXhsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2luZGV4XS5sZW4pOworCisJZXJxLT5sZW5ndGggPSB4bGVuOworCisJbWVtY3B5KGtleWJ1ZiwgcHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCisJCQkJICBjaGFyICplc3NpZGJ1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTm90ZSA6IEVTU0lEIGlzIGlnbm9yZWQgaW4gQWQtSG9jIGRlbW8gbW9kZSwgYnV0IHdlIGNhbiBzZXQgaXQKKwkgKiBhbnl3YXkuLi4gLSBKZWFuIElJICovCisKKwkvKiBIdW0uLi4gU2hvdWxkIG5vdCB1c2UgV2lyZWxlc3MgRXh0ZW5zaW9uIGNvbnN0YW50IChtYXkgY2hhbmdlKSwKKwkgKiBzaG91bGQgdXNlIG91ciBvd24uLi4gLSBKZWFuIElJICovCisJaWYgKGVycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCisJCXJldHVybiAtRTJCSUc7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIE5VTEwgdGhlIHN0cmluZyAoZm9yIE5VTEwgdGVybWluYXRpb24gJiBFU1NJRCA9IEFOWSkgLSBKZWFuIElJICovCisJbWVtc2V0KHByaXYtPmRlc2lyZWRfZXNzaWQsIDAsIHNpemVvZihwcml2LT5kZXNpcmVkX2Vzc2lkKSk7CisKKwkvKiBJZiBub3QgQU5ZLCBnZXQgdGhlIG5ldyBFU1NJRCAqLworCWlmIChlcnEtPmZsYWdzKQorCQltZW1jcHkocHJpdi0+ZGVzaXJlZF9lc3NpZCwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKKwkJCQkgIGNoYXIgKmVzc2lkYnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBhY3RpdmU7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gb3Jpbm9jb19od19nZXRfZXNzaWQocHJpdiwgJmFjdGl2ZSwgZXNzaWRidWYpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVycS0+bGVuZ3RoID0gZXJyOworCX0gZWxzZSB7CisJCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJbWVtY3B5KGVzc2lkYnVmLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7CisJCWVycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpOworCQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCX0KKworCWVycS0+ZmxhZ3MgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAorCQkJCSBjaGFyICpuaWNrYnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobnJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKKwkJcmV0dXJuIC1FMkJJRzsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtc2V0KHByaXYtPm5pY2ssIDAsIHNpemVvZihwcml2LT5uaWNrKSk7CisJbWVtY3B5KHByaXYtPm5pY2ssIG5pY2tidWYsIG5ycS0+bGVuZ3RoKTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKm5ycSwKKwkJCQkgY2hhciAqbmlja2J1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1jcHkobmlja2J1ZiwgcHJpdi0+bmljaywgSVdfRVNTSURfTUFYX1NJWkUpOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlucnEtPmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgY2hhbiA9IC0xOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKworCS8qIEluIGluZnJhc3RydWN0dXJlIG1vZGUgdGhlIEFQIHNldHMgdGhlIGNoYW5uZWwgKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKChmcnEtPmUgPT0gMCkgJiYgKGZycS0+bSA8PSAxMDAwKSkgeworCQkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCisJCWNoYW4gPSBmcnEtPm07CisJfSBlbHNlIHsKKwkJLyogU2V0dGluZyBieSBmcmVxdWVuY3kgKi8KKwkJaW50IGRlbm9tID0gMTsKKwkJaW50IGk7CisKKwkJLyogQ2FsY3VsYXRlIGRlbm9taW5hdG9yIHRvIHJlc2NhbGUgdG8gTUh6ICovCisJCWZvciAoaSA9IDA7IGkgPCAoNiAtIGZycS0+ZSk7IGkrKykKKwkJCWRlbm9tICo9IDEwOworCisJCWNoYW4gPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZnJxLT5tIC8gZGVub20pOworCX0KKworCWlmICgoY2hhbiA8IDEpIHx8IChjaGFuID4gTlVNX0NIQU5ORUxTKSB8fAorCSAgICAgIShwcml2LT5jaGFubmVsX21hc2sgJiAoMSA8PCAoY2hhbi0xKSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJcHJpdi0+Y2hhbm5lbCA9IGNoYW47CisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCS8qIEZhc3QgY2hhbm5lbCBjaGFuZ2UgLSBubyBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLworCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAorCQkJCQkgICAgSEVSTUVTX1RFU1RfU0VUX0NIQU5ORUwsCisJCQkJCWNoYW4sIE5VTEwpOworCX0KKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X2ZyZXEgKmZycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHRtcDsKKworCS8qIExvY2tpbmcgZG9uZSBpbiB0aGVyZSAqLworCXRtcCA9IG9yaW5vY29faHdfZ2V0X2ZyZXEocHJpdik7CisJaWYgKHRtcCA8IDApCisJCXJldHVybiB0bXA7CisKKwlmcnEtPm0gPSB0bXAgKiAxMDAwMDA7CisJZnJxLT5lID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnNycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXUxNiB2YWw7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwcml2LT5oYXNfc2Vuc2l0aXZpdHkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwgJnZhbCk7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzcnEtPnZhbHVlID0gdmFsOworCXNycS0+Zml4ZWQgPSAwOyAvKiBhdXRvICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHNlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWwgPSBzcnEtPnZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXYtPmhhc19zZW5zaXRpdml0eSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCh2YWwgPCAxKSB8fCAodmFsID4gMykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisJcHJpdi0+YXBfZGVuc2l0eSA9IHZhbDsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbCA9IHJycS0+dmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChycnEtPmRpc2FibGVkKQorCQl2YWwgPSAyMzQ3OworCisJaWYgKCh2YWwgPCAwKSB8fCAodmFsID4gMjM0NykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5ydHNfdGhyZXNoID0gdmFsOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJycS0+dmFsdWUgPSBwcml2LT5ydHNfdGhyZXNoOworCXJycS0+ZGlzYWJsZWQgPSAocnJxLT52YWx1ZSA9PSAyMzQ3KTsKKwlycnEtPmZpeGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJpdi0+aGFzX213bykgeworCQlpZiAoZnJxLT5kaXNhYmxlZCkKKwkJCXByaXYtPm13b19yb2J1c3QgPSAwOworCQllbHNlIHsKKwkJCWlmIChmcnEtPmZpeGVkKQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBGaXhlZCBmcmFnbWVudGF0aW9uICIKKwkJCQkgICAgICAgImlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBmaXJtd2FyZS4gIgorCQkJCSAgICAgICAiVXNpbmcgTVdPIHJvYnVzdCBpbnN0ZWFkLlxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCXByaXYtPm13b19yb2J1c3QgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGZycS0+ZGlzYWJsZWQpCisJCQlwcml2LT5mcmFnX3RocmVzaCA9IDIzNDY7CisJCWVsc2UgeworCQkJaWYgKChmcnEtPnZhbHVlIDwgMjU2KSB8fCAoZnJxLT52YWx1ZSA+IDIzNDYpKQorCQkJCWVyciA9IC1FSU5WQUw7CisJCQllbHNlCisJCQkJLyogbXVzdCBiZSBldmVuICovCisJCQkJcHJpdi0+ZnJhZ190aHJlc2ggPSBmcnEtPnZhbHVlICYgfjB4MTsKKwkJfQorCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisJdTE2IHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJpdi0+aGFzX213bykgeworCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKKwkJCQkJICAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXZhbCA9IDA7CisKKwkJZnJxLT52YWx1ZSA9IHZhbCA/IDIzNDcgOiAwOworCQlmcnEtPmRpc2FibGVkID0gIXZhbDsKKwkJZnJxLT5maXhlZCA9IDA7CisJfSBlbHNlIHsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAorCQkJCQkgICZ2YWwpOworCQlpZiAoZXJyKQorCQkJdmFsID0gMDsKKworCQlmcnEtPnZhbHVlID0gdmFsOworCQlmcnEtPmRpc2FibGVkID0gKHZhbCA+PSAyMzQ2KTsKKwkJZnJxLT5maXhlZCA9IDE7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmF0ZW1vZGU7CisJaW50IGJpdHJhdGU7IC8qIDEwMHMgb2Yga2lsb2JpdHMgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogQXMgdGhlIHVzZXIgc3BhY2UgZG9lc24ndCBrbm93IG91ciBoaWdoZXN0IHJhdGUsIGl0IHVzZXMgLTEKKwkgKiB0byBhc2sgdXMgdG8gc2V0IHRoZSBoaWdoZXN0IHJhdGUuICBUZXN0IGl0IHVzaW5nICJpd2NvbmZpZworCSAqIGV0aFggcmF0ZSBhdXRvIiAtIEplYW4gSUkgKi8KKwlpZiAocnJxLT52YWx1ZSA9PSAtMSkKKwkJYml0cmF0ZSA9IDExMDsKKwllbHNlIHsKKwkJaWYgKHJycS0+dmFsdWUgJSAxMDAwMDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYml0cmF0ZSA9IHJycS0+dmFsdWUgLyAxMDAwMDA7CisJfQorCisJcmF0ZW1vZGUgPSBvcmlub2NvX2dldF9iaXRyYXRlbW9kZShiaXRyYXRlLCAhcnJxLT5maXhlZCk7CisKKwlpZiAocmF0ZW1vZGUgPT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisJcHJpdi0+Yml0cmF0ZW1vZGUgPSByYXRlbW9kZTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCWludCBiaXRyYXRlLCBhdXRvbWF0aWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJb3Jpbm9jb19nZXRfcmF0ZW1vZGVfY2ZnKHByaXYtPmJpdHJhdGVtb2RlLCAmYml0cmF0ZSwgJmF1dG9tYXRpYyk7CisKKwkvKiBJZiB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcgd2UgdHJ5IHRvIGZpbmQgbW9yZSBhYm91dCB0aGUKKwkgICBjdXJyZW50IG1vZGUgKi8KKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQllcnIgPSBvcmlub2NvX2h3X2dldF9hY3RfYml0cmF0ZShwcml2LCAmYml0cmF0ZSk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcnJxLT52YWx1ZSA9IGJpdHJhdGU7CisJcnJxLT5maXhlZCA9ICFhdXRvbWF0aWM7CisJcnJxLT5kaXNhYmxlZCA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnBycSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHBycS0+ZGlzYWJsZWQpIHsKKwkJcHJpdi0+cG1fb24gPSAwOworCX0gZWxzZSB7CisJCXN3aXRjaCAocHJxLT5mbGFncyAmIElXX1BPV0VSX01PREUpIHsKKwkJY2FzZSBJV19QT1dFUl9VTklDQVNUX1I6CisJCQlwcml2LT5wbV9tY2FzdCA9IDA7CisJCQlwcml2LT5wbV9vbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJV19QT1dFUl9BTExfUjoKKwkJCXByaXYtPnBtX21jYXN0ID0gMTsKKwkJCXByaXYtPnBtX29uID0gMTsKKwkJCWJyZWFrOworCQljYXNlIElXX1BPV0VSX09OOgorCQkJLyogTm8gZmxhZ3MgOiBidXQgd2UgbWF5IGhhdmUgYSB2YWx1ZSAtIEplYW4gSUkgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9USU1FT1VUKSB7CisJCQlwcml2LT5wbV9vbiA9IDE7CisJCQlwcml2LT5wbV90aW1lb3V0ID0gcHJxLT52YWx1ZSAvIDEwMDA7CisJCX0KKwkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9QRVJJT0QpIHsKKwkJCXByaXYtPnBtX29uID0gMTsKKwkJCXByaXYtPnBtX3BlcmlvZCA9IHBycS0+dmFsdWUgLyAxMDAwOworCQl9CisJCS8qIEl0J3MgdmFsaWQgdG8gbm90IGhhdmUgYSB2YWx1ZSBpZiB3ZSBhcmUganVzdCB0b2dnbGluZworCQkgKiB0aGUgZmxhZ3MuLi4gSmVhbiBJSSAqLworCQlpZiAoIXByaXYtPnBtX29uKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXUxNiBlbmFibGUsIHBlcmlvZCwgdGltZW91dCwgbWNhc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORlBNRU5BQkxFRCwgJmVuYWJsZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwgJnBlcmlvZCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLCAmdGltZW91dCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GTVVMVElDQVNUUkVDRUlWRSwgJm1jYXN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXBycS0+ZGlzYWJsZWQgPSAhZW5hYmxlOworCS8qIE5vdGUgOiBieSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBwZXJpb2QgKi8KKwlpZiAoKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9UWVBFKSA9PSBJV19QT1dFUl9USU1FT1VUKSB7CisJCXBycS0+ZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOworCQlwcnEtPnZhbHVlID0gdGltZW91dCAqIDEwMDA7CisJfSBlbHNlIHsKKwkJcHJxLT5mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKKwkJcHJxLT52YWx1ZSA9IHBlcmlvZCAqIDEwMDA7CisJfQorCWlmIChtY2FzdCkKKwkJcHJxLT5mbGFncyB8PSBJV19QT1dFUl9BTExfUjsKKwllbHNlCisJCXBycS0+ZmxhZ3MgfD0gSVdfUE9XRVJfVU5JQ0FTVF9SOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJCSAgICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKKwlpbnQgaWR4LCBhbGcgPSBleHQtPmFsZywgc2V0X2tleSA9IDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwl1MTYga2V5X2xlbjsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogRGV0ZXJtaW5lIGFuZCB2YWxpZGF0ZSB0aGUga2V5IGluZGV4ICovCisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCWlmIChpZHgpIHsKKwkJaWYgKChpZHggPCAxKSB8fCAoaWR4ID4gNCkpCisJCQlnb3RvIG91dDsKKwkJaWR4LS07CisJfSBlbHNlCisJCWlkeCA9IHByaXYtPnR4X2tleTsKKworCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCisJCWFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKworCWlmIChwcml2LT5oYXNfd3BhICYmIChhbGcgIT0gSVdfRU5DT0RFX0FMR19US0lQKSkgeworCQkvKiBDbGVhciBhbnkgVEtJUCBUWCBrZXkgd2UgaGFkICovCisJCSh2b2lkKSBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHByaXYsIHByaXYtPnR4X2tleSk7CisJfQorCisJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7CisJCXByaXYtPnR4X2tleSA9IGlkeDsKKwkJc2V0X2tleSA9ICgoYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkgfHwKKwkJCSAgIChleHQtPmtleV9sZW4gPiAwKSkgPyAxIDogMDsKKwl9CisKKwlpZiAoc2V0X2tleSkgeworCQkvKiBTZXQgdGhlIHJlcXVlc3RlZCBrZXkgZmlyc3QgKi8KKwkJc3dpdGNoIChhbGcpIHsKKwkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CisJCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOworCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IDA7CisJCQlicmVhazsKKworCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgorCQkJaWYgKGV4dC0+a2V5X2xlbiA+IFNNQUxMX0tFWV9TSVpFKQorCQkJCWtleV9sZW4gPSBMQVJHRV9LRVlfU0laRTsKKwkJCWVsc2UgaWYgKGV4dC0+a2V5X2xlbiA+IDApCisJCQkJa2V5X2xlbiA9IFNNQUxMX0tFWV9TSVpFOworCQkJZWxzZQorCQkJCWdvdG8gb3V0OworCisJCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOworCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IGNwdV90b19sZTE2KGtleV9sZW4pOworCisJCQlrZXlfbGVuID0gbWluKGV4dC0+a2V5X2xlbiwga2V5X2xlbik7CisKKwkJCW1lbXNldChwcml2LT5rZXlzW2lkeF0uZGF0YSwgMCwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOworCQkJbWVtY3B5KHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleSwga2V5X2xlbik7CisJCQlicmVhazsKKworCQljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKKwkJeworCQkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCQkJdTggKnRraXBfaXYgPSBOVUxMOworCisJCQlpZiAoIXByaXYtPmhhc193cGEgfHwKKwkJCSAgICAoZXh0LT5rZXlfbGVuID4gc2l6ZW9mKHByaXYtPnRraXBfa2V5WzBdKSkpCisJCQkJZ290byBvdXQ7CisKKwkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7CisJCQltZW1zZXQoJnByaXYtPnRraXBfa2V5W2lkeF0sIDAsCisJCQkgICAgICAgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2lkeF0pKTsKKwkJCW1lbWNweSgmcHJpdi0+dGtpcF9rZXlbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisKKwkJCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElEKQorCQkJCXRraXBfaXYgPSAmZXh0LT5yeF9zZXFbMF07CisKKwkJCWVyciA9IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaHcsIGlkeCwKKwkJCQkgZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVksCisJCQkJICh1OCAqKSAmcHJpdi0+dGtpcF9rZXlbaWR4XSwKKwkJCQkgdGtpcF9pdiwgTlVMTCk7CisJCQlpZiAoZXJyKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgVEtJUCBrZXkiCisJCQkJICAgICAgICJcbiIsIGRldi0+bmFtZSwgZXJyKTsKKworCQkJZ290byBvdXQ7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWVyciA9IC1FSU5QUk9HUkVTUzsKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkJICAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCWludCBpZHgsIG1heF9rZXlfbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gLUVJTlZBTDsKKwltYXhfa2V5X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7CisJaWYgKG1heF9rZXlfbGVuIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisJaWYgKGlkeCkgeworCQlpZiAoKGlkeCA8IDEpIHx8IChpZHggPiA0KSkKKwkJCWdvdG8gb3V0OworCQlpZHgtLTsKKwl9IGVsc2UKKwkJaWR4ID0gcHJpdi0+dHhfa2V5OworCisJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKKwltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOworCisJZXh0LT5hbGcgPSBwcml2LT5lbmNvZGVfYWxnOworCXN3aXRjaCAocHJpdi0+ZW5jb2RlX2FsZykgeworCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgorCQlleHQtPmtleV9sZW4gPSAwOworCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOworCQlicmVhazsKKwljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgorCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaWR4XS5sZW4pLAorCQkJCSAgICAgbWF4X2tleV9sZW4pOworCQltZW1jcHkoZXh0LT5rZXksIHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleV9sZW4pOworCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJCWJyZWFrOworCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgorCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSksCisJCQkJICAgICBtYXhfa2V5X2xlbik7CisJCW1lbWNweShleHQtPmtleSwgJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5X2xlbik7CisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKwkJYnJlYWs7CisJfQorCisJZXJyID0gMDsKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU5QUk9HUkVTUzsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwkJLyoKKwkJICogb3Jpbm9jbyBkb2VzIG5vdCB1c2UgdGhlc2UgcGFyYW1ldGVycworCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJCS8qIHdsX2xrbSBpbXBsaWVzIHZhbHVlIDIgPT0gUFNLIGZvciBIZXJtZXMgSQorCQkgKiB3aGljaCB0aWVzIGluIHdpdGggV0VYVAorCQkgKiBubyBvdGhlciBoaW50cyB0aG8gOigKKwkJICovCisJCXByaXYtPmtleV9tZ210ID0gcGFyYW0tPnZhbHVlOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKKwkJLyogV2hlbiBjb3VudGVybWVhc3VyZXMgYXJlIGVuYWJsZWQsIHNodXQgZG93biB0aGUKKwkJICogY2FyZDsgd2hlbiBkaXNhYmxlZCwgcmUtZW5hYmxlIHRoZSBjYXJkLiBUaGlzIG11c3QKKwkJICogdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkuCisJCSAqCisJCSAqIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHRoZSBFQVBPTCBtZXNzYWdlIGlzIGdldHRpbmcKKwkJICogICAgICAgb3V0IGJlZm9yZSBjYXJkIGRpc2FibGVkCisJCSAqLworCQlpZiAocGFyYW0tPnZhbHVlKSB7CisJCQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDE7CisJCQlyZXQgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOworCQl9IGVsc2UgeworCQkJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAwOworCQkJcmV0ID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKQorCQkJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gMTsKKwkJZWxzZSBpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pCisJCQlwcml2LT53ZXBfcmVzdHJpY3QgPSAwOworCQllbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwkJaWYgKHByaXYtPmhhc193cGEpIHsKKwkJCXByaXYtPndwYV9lbmFibGVkID0gcGFyYW0tPnZhbHVlID8gMSA6IDA7CisJCX0gZWxzZSB7CisJCQlpZiAocGFyYW0tPnZhbHVlKQorCQkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkJLyogZWxzZSBzaWxlbnRseSBhY2NlcHQgZGlzYWJsZSBvZiBXUEEgKi8KKwkJCXByaXYtPndwYV9lbmFibGVkID0gMDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJCXBhcmFtLT52YWx1ZSA9IHByaXYtPmtleV9tZ210OworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKKwkJcGFyYW0tPnZhbHVlID0gcHJpdi0+dGtpcF9jbV9hY3RpdmU7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQorCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKKwkJZWxzZQorCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlwYXJhbS0+dmFsdWUgPSBwcml2LT53cGFfZW5hYmxlZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4ICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGN1dCBvZmYgYXQgSUVFRTgwMjExX01BWF9EQVRBX0xFTiAqLworCWlmICgod3JxdS0+ZGF0YS5sZW5ndGggPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOKSB8fAorCSAgICAod3JxdS0+ZGF0YS5sZW5ndGggJiYgKGV4dHJhID09IE5VTEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpIHsKKwkJYnVmID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWYgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbWNweShidWYsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7CisJfSBlbHNlCisJCWJ1ZiA9IE5VTEw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgeworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWtmcmVlKHByaXYtPndwYV9pZSk7CisJcHJpdi0+d3BhX2llID0gYnVmOworCXByaXYtPndwYV9pZV9sZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKKworCWlmIChwcml2LT53cGFfaWUpIHsKKwkJLyogTG9va3MgbGlrZSB3bF9sa20gd2FudHMgdG8gY2hlY2sgdGhlIGF1dGggYWxnLCBhbmQKKwkJICogc29tZWhvdyBwYXNzIGl0IHRvIHRoZSBmaXJtd2FyZS4KKwkJICogSW5zdGVhZCBpdCBqdXN0IGNhbGxzIHRoZSBrZXkgbWdtdCByaWQKKwkJICogICAtIHdlIGRvIHRoaXMgaW4gc2V0IGF1dGguCisJCSAqLworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICgocHJpdi0+d3BhX2llX2xlbiA9PSAwKSB8fCAocHJpdi0+d3BhX2llID09IE5VTEwpKSB7CisJCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoIDwgcHJpdi0+d3BhX2llX2xlbikgeworCQllcnIgPSAtRTJCSUc7CisJCWdvdG8gb3V0OworCX0KKworCXdycXUtPmRhdGEubGVuZ3RoID0gcHJpdi0+d3BhX2llX2xlbjsKKwltZW1jcHkoZXh0cmEsIHByaXYtPndwYV9pZSwgcHJpdi0+d3BhX2llX2xlbik7CisKK291dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAobWxtZS0+Y21kKSB7CisJY2FzZSBJV19NTE1FX0RFQVVUSDoKKwkJLyogc2lsZW50bHkgaWdub3JlICovCisJCWJyZWFrOworCisJY2FzZSBJV19NTE1FX0RJU0FTU09DOgorCXsKKwkJc3RydWN0IHsKKwkJCXU4IGFkZHJbRVRIX0FMRU5dOworCQkJX19sZTE2IHJlYXNvbl9jb2RlOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7CisKKwkJbWVtY3B5KGJ1Zi5hZGRyLCBtbG1lLT5hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJYnVmLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYobWxtZS0+cmVhc29uX2NvZGUpOworCQlyZXQgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORkRJU0FTU09DSUFURSwKKwkJCQkJICAmYnVmKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BhcmFtICpycnEsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdTE2IHNob3J0X2xpbWl0LCBsb25nX2xpbWl0LCBsaWZldGltZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TSE9SVFJFVFJZTElNSVQsCisJCQkJICAmc2hvcnRfbGltaXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTE9OR1JFVFJZTElNSVQsCisJCQkJICAmbG9uZ19saW1pdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9NQVhUUkFOU01JVExJRkVUSU1FLAorCQkJCSAgJmxpZmV0aW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXJycS0+ZGlzYWJsZWQgPSAwOwkJLyogQ2FuJ3QgYmUgZGlzYWJsZWQgKi8KKworCS8qIE5vdGUgOiBieSBkZWZhdWx0LCBkaXNwbGF5IHRoZSByZXRyeSBudW1iZXIgKi8KKwlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkgeworCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7CisJCXJycS0+dmFsdWUgPSBsaWZldGltZSAqIDEwMDA7CS8qID8/PyAqLworCX0gZWxzZSB7CisJCS8qIEJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIG1pbiBudW1iZXIgKi8KKwkJaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykpIHsKKwkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xPTkc7CisJCQlycnEtPnZhbHVlID0gbG9uZ19saW1pdDsKKwkJfSBlbHNlIHsKKwkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwkJCXJycS0+dmFsdWUgPSBzaG9ydF9saW1pdDsKKwkJCWlmIChzaG9ydF9saW1pdCAhPSBsb25nX2xpbWl0KQorCQkJCXJycS0+ZmxhZ3MgfD0gSVdfUkVUUllfU0hPUlQ7CisJCX0KKwl9CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdm9pZCAqd3JxdSwKKwkJCSAgICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChpbmZvLT5jbWQgPT0gKFNJT0NJV0ZJUlNUUFJJViArIDB4MSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3JjaW5nIHJlc2V0IVxuIiwgZGV2LT5uYW1lKTsKKworCQkvKiBGaXJtd2FyZSByZXNldCAqLworCQlvcmlub2NvX3Jlc2V0KCZwcml2LT5yZXNldF93b3JrKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvcmNlIHNjaGVkdWxpbmcgcmVzZXQhXG4iLCBkZXYtPm5hbWUpOworCisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0aWJzc3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB2b2lkICp3cnF1LAorCQkJCSAgICAgY2hhciAqZXh0cmEpCisKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsID0gKigoaW50ICopIGV4dHJhKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5pYnNzX3BvcnQgPSB2YWwgOworCisJLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLworCXNldF9wb3J0X3R5cGUocHJpdik7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpYnNzcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHZvaWQgKndycXUsCisJCQkJICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7CisKKwkqdmFsID0gcHJpdi0+aWJzc19wb3J0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cG9ydDMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB2b2lkICp3cnF1LAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbCA9ICooKGludCAqKSBleHRyYSk7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6IC8qIFRyeSB0byBkbyBJRUVFIGFkLWhvYyBtb2RlICovCisJCWlmICghcHJpdi0+aGFzX2lic3MpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlwcml2LT5wcmVmZXJfcG9ydDMgPSAwOworCisJCWJyZWFrOworCisJY2FzZSAxOiAvKiBUcnkgdG8gZG8gTHVjZW50IHByb3ByaWV0YXJ5IGFkLWhvYyBtb2RlICovCisJCWlmICghcHJpdi0+aGFzX3BvcnQzKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcHJpdi0+cHJlZmVyX3BvcnQzID0gMTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCX0KKworCWlmICghZXJyKSB7CisJCS8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KKwkJc2V0X3BvcnRfdHlwZShwcml2KTsKKwkJZXJyID0gLUVJTlBST0dSRVNTOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cG9ydDMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB2b2lkICp3cnF1LAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOworCisJKnZhbCA9IHByaXYtPnByZWZlcl9wb3J0MzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgdm9pZCAqd3JxdSwKKwkJCQkgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHZhbDsKKworCWlmICghcHJpdi0+aGFzX3ByZWFtYmxlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiA4MDIuMTFiIGhhcyByZWNlbnRseSBkZWZpbmVkIHNvbWUgc2hvcnQgcHJlYW1ibGUuCisJICogQmFzaWNhbGx5LCB0aGUgUGh5IGhlYWRlciBoYXMgYmVlbiByZWR1Y2VkIGluIHNpemUuCisJICogVGhpcyBpbmNyZWFzZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBhdCBoaWdoIHJhdGVzCisJICogKHRoZSBwcmVhbWJsZSBpcyB0cmFuc21pdHRlZCBhdCAxTWIvcyksIHVuZm9ydHVuYXRlbHkKKwkgKiB0aGlzIGdpdmUgY29tcGF0aWJpbGl0eSB0cm91Ymxlcy4uLiAtIEplYW4gSUkgKi8KKwl2YWwgPSAqKChpbnQgKikgZXh0cmEpOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAodmFsKQorCQlwcml2LT5wcmVhbWJsZSA9IDE7CisJZWxzZQorCQlwcml2LT5wcmVhbWJsZSA9IDA7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgdm9pZCAqd3JxdSwKKwkJCQkgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKKworCWlmICghcHJpdi0+aGFzX3ByZWFtYmxlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkqdmFsID0gcHJpdi0+cHJlYW1ibGU7CisJcmV0dXJuIDA7Cit9CisKKy8qIGlvY3RsIGludGVyZmFjZSB0byBoZXJtZXNfcmVhZF9sdHYoKQorICogVG8gdXNlIHdpdGggaXdwcml2LCBwYXNzIHRoZSBSSUQgYXMgdGhlIHRva2VuIGFyZ3VtZW50LCBlLmcuCisgKiBpd3ByaXYgZ2V0X3JpZCBbMHhmYzAwXQorICogQXQgbGVhc3QgV2lyZWxlc3MgVG9vbHMgMjUgaXMgcmVxdWlyZWQgdG8gdXNlIGl3cHJpdi4KKyAqIEZvciBXaXJlbGVzcyBUb29scyAyNSBhbmQgMjYgYXBwZW5kICJkdW1teSIgYXJlIHRoZSBlbmQuICovCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCByaWQgPSBkYXRhLT5mbGFnczsKKwl1MTYgbGVuZ3RoOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIEl0J3MgYSAiZ2V0IiBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQgdXNlcnMgdG8gYWNjZXNzIHRoZQorCSAqIFdFUCBrZXkgYW5kIG90aGVyIHJhdyBmaXJtd2FyZSBkYXRhICovCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHJpZCA8IDB4ZmMwMCB8fCByaWQgPiAweGZmZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCByaWQsIE1BWF9SSURfTEVOLCAmbGVuZ3RoLAorCQkJICAgICAgZXh0cmEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZGF0YS0+bGVuZ3RoID0gbWluX3QodTE2LCBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKGxlbmd0aCksCisJCQkgICAgIE1BWF9SSURfTEVOKTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFRyaWdnZXIgYSBzY2FuIChsb29rIGZvciBvdGhlciBjZWxscyBpbiB0aGUgdmljaW5pdHkpICovCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBpd19zY2FuX3JlcSAqc2kgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopIGV4dHJhOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBOb3RlIDogeW91IG1heSBoYXZlIHJlYWxpc2VkIHRoYXQsIGFzIHRoaXMgaXMgYSBTRVQgb3BlcmF0aW9uLAorCSAqIHRoaXMgaXMgcHJpdmlsZWdlZCBhbmQgdGhlcmVmb3JlIGEgbm9ybWFsIHVzZXIgY2FuJ3QKKwkgKiBwZXJmb3JtIHNjYW5uaW5nLgorCSAqIFRoaXMgaXMgbm90IGFuIGVycm9yLCB3aGlsZSB0aGUgZGV2aWNlIHBlcmZvcm0gc2Nhbm5pbmcsCisJICogdHJhZmZpYyBkb2Vzbid0IGZsb3csIHNvIGl0J3MgYSBwZXJmZWN0IERvUy4uLgorCSAqIEplYW4gSUkgKi8KKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogU2Nhbm5pbmcgd2l0aCBwb3J0IDAgZGlzYWJsZWQgd291bGQgZmFpbCAqLworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSW4gbW9uaXRvciBtb2RlLCB0aGUgc2NhbiByZXN1bHRzIGFyZSBhbHdheXMgZW1wdHkuCisJICogUHJvYmUgcmVzcG9uc2VzIGFyZSBwYXNzZWQgdG8gdGhlIGRyaXZlciBhcyByZWNlaXZlZAorCSAqIGZyYW1lcyBhbmQgY291bGQgYmUgcHJvY2Vzc2VkIGluIHNvZnR3YXJlLiAqLworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogTm90ZSA6IGJlY2F1c2Ugd2UgZG9uJ3QgbG9jayBvdXQgdGhlIGlycSBoYW5kbGVyLCB0aGUgd2F5CisJICogd2UgYWNjZXNzIHNjYW4gdmFyaWFibGVzIGluIHByaXYgaXMgY3JpdGljYWwuCisJICoJbyBzY2FuX2lucHJvZ3Jlc3MgOiBub3QgdG91Y2hlZCBieSBpcnEgaGFuZGxlcgorCSAqCW8gc2Nhbl9tb2RlIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKKwkgKiBCZWZvcmUgbW9kaWZ5aW5nIGFueXRoaW5nIG9uIHRob3NlIHZhcmlhYmxlcywgcGxlYXNlIHRoaW5rIGhhcmQgIQorCSAqIEplYW4gSUkgKi8KKworCS8qIFNhdmUgZmxhZ3MgKi8KKwlwcml2LT5zY2FuX21vZGUgPSBzcnEtPmZsYWdzOworCisJLyogQWx3YXlzIHRyaWdnZXIgc2Nhbm5pbmcsIGV2ZW4gaWYgaXQncyBpbiBwcm9ncmVzcy4KKwkgKiBUaGlzIHdheSwgaWYgdGhlIGluZm8gZnJhbWUgZ2V0IGxvc3QsIHdlIHdpbGwgcmVjb3ZlciBzb21ld2hhdAorCSAqIGdyYWNlZnVsbHkgIC0gSmVhbiBJSSAqLworCisJaWYgKHByaXYtPmhhc19ob3N0c2NhbikgeworCQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwkJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GSE9TVFNDQU5fU1lNQk9MLAorCQkJCQkJSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9PTkNFIHwKKwkJCQkJCUhFUk1FU19IT1NUU0NBTl9TWU1CT0xfQkNBU1QpOworCQkJYnJlYWs7CisJCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogeworCQkJX19sZTE2IHJlcVszXTsKKworCQkJcmVxWzBdID0gY3B1X3RvX2xlMTYoMHgzZmZmKTsJLyogQWxsIGNoYW5uZWxzICovCisJCQlyZXFbMV0gPSBjcHVfdG9fbGUxNigweDAwMDEpOwkvKiByYXRlIDEgTWJwcyAqLworCQkJcmVxWzJdID0gMDsJCQkvKiBBbnkgRVNTSUQgKi8KKwkJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkJICBIRVJNRVNfUklEX0NORkhPU1RTQ0FOLCAmcmVxKTsKKwkJfQorCQlicmVhazsKKwkJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkJaWYgKHByaXYtPnNjYW5fbW9kZSAmIElXX1NDQU5fVEhJU19FU1NJRCkgeworCQkJCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7CisJCQkJc2l6ZV90IGxlbiA9IG1pbihzaXplb2YoaWRidWYudmFsKSwKKwkJCQkJCSAoc2l6ZV90KSBzaS0+ZXNzaWRfbGVuKTsKKwkJCQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCQkJCW1lbWNweShpZGJ1Zi52YWwsIHNpLT5lc3NpZCwgbGVuKTsKKworCQkJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCQkgICAgICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKKwkJCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obGVuICsgMiksCisJCQkJCSAgICAgICAmaWRidWYpOworCQkJfSBlbHNlCisJCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKKwkJCQkJCSAgIDApOwkvKiBBbnkgRVNTSUQgKi8KKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisKKwkJCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKKwkJCQkvKiBDbGVhciBzY2FuIHJlc3VsdHMgYXQgdGhlIHN0YXJ0IG9mCisJCQkJICogYW4gZXh0ZW5kZWQgc2NhbiAqLworCQkJCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsCisJCQkJCQltc2Vjc190b19qaWZmaWVzKDE1MDAwKSk7CisKKwkJCQkvKiBUT0RPOiBJcyB0aGlzIGF2YWlsYWJsZSBvbiBvbGRlciBmaXJtd2FyZT8KKwkJCQkgKiAgIENhbiB3ZSB1c2UgaXQgdG8gc2NhbiBzcGVjaWZpYyBjaGFubmVscworCQkJCSAqICAgZm9yIElXX1NDQU5fVEhJU19GUkVRPyAqLworCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GU0NBTkNIQU5ORUxTMkdIWiwKKwkJCQkJCTB4N0ZGRik7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byBvdXQ7CisKKwkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywKKwkJCQkJCSAgICAgSEVSTUVTX0lOUV9DSEFOTkVMSU5GTyk7CisJCQl9IGVsc2UKKwkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOworCisJLyogT25lIG1vcmUgY2xpZW50ICovCisJaWYgKCFlcnIpCisJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDE7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCisjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0CisKKy8qIFRyYW5zbGF0ZSBzY2FuIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FyZCB0byBhIGNhcmQgaW5kZXBlbmRhbnQKKyAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQgLSBKZWFuIElJICovCitzdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkJICAgY2hhciAqY3VycmVudF9ldiwKKwkJCQkJICAgY2hhciAqZW5kX2J1ZiwKKwkJCQkJICAgdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYnNzLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZCkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYJCQljYXBhYmlsaXRpZXM7CisJdTE2CQkJY2hhbm5lbDsKKwlzdHJ1Y3QgaXdfZXZlbnQJCWl3ZTsJCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KKwljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCisJLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5hLmJzc2lkLCBFVEhfQUxFTik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCisJLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCisKKwkvKiBBZGQgdGhlIEVTU0lEICovCisJaXdlLnUuZGF0YS5sZW5ndGggPSBsZTE2X3RvX2NwdShic3MtPmEuZXNzaWRfbGVuKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKKwlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIGJzcy0+YS5lc3NpZCk7CisKKwkvKiBBZGQgbW9kZSAqLworCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmEuY2FwYWJpbGl0aWVzKTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKKwkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWVsc2UKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCX0KKworCWNoYW5uZWwgPSBic3MtPnMuY2hhbm5lbDsKKwlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gTlVNX0NIQU5ORUxTKSkgeworCQkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCisJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbDsKKwkJaXdlLnUuZnJlcS5lID0gMDsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKworCQlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2hhbm5lbCkgKiAxMDAwMDA7CisJCWl3ZS51LmZyZXEuZSA9IDE7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJfQorCisJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KKwlpd2UuY21kID0gSVdFVlFVQUw7CisJaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwlpd2UudS5xdWFsLmxldmVsID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5sZXZlbCkgLSAweDk1OworCWl3ZS51LnF1YWwubm9pc2UgPSAoX191OCkgbGUxNl90b19jcHUoYnNzLT5hLm5vaXNlKSAtIDB4OTU7CisJLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQorCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCisJaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQorCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKKwllbHNlCisJCWl3ZS51LnF1YWwucXVhbCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCisJLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCWVsc2UKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgTlVMTCk7CisKKwkvKiBCaXQgcmF0ZSBpcyBub3QgYXZhaWxhYmxlIGluIEx1Y2VudC9BZ2VyZSBmaXJtd2FyZXMgKi8KKwlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSAhPSBGSVJNV0FSRV9UWVBFX0FHRVJFKSB7CisJCWNoYXIgKmN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKKwkJaW50IGk7CisJCWludCBzdGVwOworCisJCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKQorCQkJc3RlcCA9IDI7CisJCWVsc2UKKwkJCXN0ZXAgPSAxOworCisJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCisJCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKwkJLyogTWF4IDEwIHZhbHVlcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkgKz0gc3RlcCkgeworCQkJLyogTlVMTCB0ZXJtaW5hdGVkICovCisJCQlpZiAoYnNzLT5wLnJhdGVzW2ldID09IDB4MCkKKwkJCQlicmVhazsKKwkJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCisJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0KKwkJCQkoKGJzcy0+cC5yYXRlc1tpXSAmIDB4N2YpICogNTAwMDAwKTsKKwkJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgICBjdXJyZW50X3ZhbCwKKwkJCQkJCQkgICBlbmRfYnVmLCAmaXdlLAorCQkJCQkJCSAgIElXX0VWX1BBUkFNX0xFTik7CisJCX0KKwkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCisJCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKKwkJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKKwl9CisKKwkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiYmNuX2ludD0lZCIsCisJCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmEuYmVhY29uX2ludGVydikpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBDYXBhYmlsaXRlcyAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICJjYXBhYj0weCUwNHgiLAorCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCisJICogZm9yIGdpdmVuIG5ldHdvcmsuICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAorCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCXJldHVybiBjdXJyZW50X2V2OworfQorCitzdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX2V4dF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCQkgICAgICAgY2hhciAqY3VycmVudF9ldiwKKwkJCQkJICAgICAgIGNoYXIgKmVuZF9idWYsCisJCQkJCSAgICAgICBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCit7CisJdTE2CQkJY2FwYWJpbGl0aWVzOworCXUxNgkJCWNoYW5uZWw7CisJc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCisJY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOworCXU4ICppZTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisKKwkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCisJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCisJLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCisKKwkvKiBBZGQgdGhlIEVTU0lEICovCisJaWUgPSBic3MtPmRhdGE7CisJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpIHsKKwkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOworCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsICZpZVsyXSk7CisJfQorCisJLyogQWRkIG1vZGUgKi8KKwljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmNhcGFiaWxpdGllcyk7CisJaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7CisJCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWVsc2UKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCX0KKworCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfRFNfUEFSQU1TKTsKKwljaGFubmVsID0gaWUgPyBpZVsyXSA6IDA7CisJaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKKwkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLworCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7CisJCWl3ZS51LmZyZXEuZSA9IDA7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisKKwkJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW5uZWwpICogMTAwMDAwOworCQlpd2UudS5mcmVxLmUgPSAxOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCX0KKworCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCisJaXdlLmNtZCA9IElXRVZRVUFMOworCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7CisJaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+bGV2ZWwgLSAweDk1OworCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlIC0gMHg5NTsKKwkvKiBXaXJlbGVzcyB0b29scyBwcmlvciB0byAyNy5wcmUyMiB3aWxsIHNob3cgbGluayBxdWFsaXR5CisJICogYW55d2F5LCBzbyB3ZSBwcm92aWRlIGEgcmVhc29uYWJsZSB2YWx1ZS4gKi8KKwlpZiAoaXdlLnUucXVhbC5sZXZlbCA+IGl3ZS51LnF1YWwubm9pc2UpCisJCWl3ZS51LnF1YWwucXVhbCA9IGl3ZS51LnF1YWwubGV2ZWwgLSBpd2UudS5xdWFsLm5vaXNlOworCWVsc2UKKwkJaXdlLnUucXVhbC5xdWFsID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisKKwkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCisJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisJZWxzZQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBOVUxMKTsKKworCS8qIFdQQSBJRSAqLworCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSkpOworCWlmIChpZSkgeworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGllKTsKKwl9CisKKwkvKiBSU04gSUUgKi8KKwlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1JTTik7CisJaWYgKGllKSB7CisJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgaWUpOworCX0KKworCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfU1VQUF9SQVRFUyk7CisJaWYgKGllKSB7CisJCWNoYXIgKnAgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOworCQlpbnQgaTsKKworCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisKKwkJZm9yIChpID0gMjsgaSA8IChpZVsxXSArIDIpOyBpKyspIHsKKwkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGllW2ldICYgMHg3RikgKiA1MDAwMDApOworCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsIHAsIGVuZF9idWYsCisJCQkJCQkgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKKwkJfQorCQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KKwkJaWYgKHAgPiAoY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkpCisJCQljdXJyZW50X2V2ID0gcDsKKwl9CisKKwkvKiBUaW1lc3RhbXAgKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9CisJCXNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sICJ0c2Y9JTAxNmxseCIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoYnNzLT50aW1lc3RhbXApKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJLyogQmVhY29uIGludGVydmFsICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgImJjbl9pbnQ9JWQiLAorCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5iZWFjb25faW50ZXJ2YWwpKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJLyogQ2FwYWJpbGl0ZXMgKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiY2FwYWI9MHglMDR4IiwKKwkJCQkgICAgIGNhcGFiaWxpdGllcyk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQorCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKKwkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwlyZXR1cm4gY3VycmVudF9ldjsKK30KKworLyogUmV0dXJuIHJlc3VsdHMgb2YgYSBzY2FuICovCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKKwkJLyogSW1wb3J0YW50IG5vdGUgOiB3ZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBjYWxsZXIKKwkJICogdW50aWwgcmVzdWx0cyBhcmUgcmVhZHkgZm9yIHZhcmlvdXMgcmVhc29ucy4KKwkJICogRmlyc3QsIG1hbmFnaW5nIHdhaXQgcXVldWVzIGlzIGNvbXBsZXggYW5kIHJhY3kuCisJCSAqIFNlY29uZCwgd2UgZ3JhYiBzb21lIHJ0bmV0bGluayBsb2NrIGJlZm9yZSBjb21taW5nCisJCSAqIGhlcmUgKGluIGRldl9pb2N0bCgpKS4KKwkJICogVGhpcmQsIHdlIGdlbmVyYXRlIGFuIFdpcmVsZXNzIEV2ZW50LCBzbyB0aGUKKwkJICogY2FsbGVyIGNhbiB3YWl0IGl0c2VsZiBvbiB0aGF0IC0gSmVhbiBJSSAqLworCQllcnIgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7CisJCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzczsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KKwkJCWN1cnJlbnRfZXYgPQorCQkJCW9yaW5vY29fdHJhbnNsYXRlX2V4dF9zY2FuKGRldiwgaW5mbywKKwkJCQkJCQkgICBjdXJyZW50X2V2LAorCQkJCQkJCSAgIGV4dHJhICsgc3JxLT5sZW5ndGgsCisJCQkJCQkJICAgJmJzcy0+YnNzLAorCQkJCQkJCSAgIGJzcy0+bGFzdF9zY2FubmVkKTsKKworCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIG9uZSBtb3JlIGVudHJ5ICovCisJCQlpZiAoKGV4dHJhICsgc3JxLT5sZW5ndGggLSBjdXJyZW50X2V2KQorCQkJICAgIDw9IElXX0VWX0FERFJfTEVOKSB7CisJCQkJLyogQXNrIHVzZXIgc3BhY2UgdG8gdHJ5IGFnYWluIHdpdGggYQorCQkJCSAqIGJpZ2dlciBidWZmZXIgKi8KKwkJCQllcnIgPSAtRTJCSUc7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisJCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJCS8qIFRyYW5zbGF0ZSB0aGlzIGVudHJ5IHRvIFdFIGZvcm1hdCAqLworCQkJY3VycmVudF9ldiA9IG9yaW5vY29fdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLAorCQkJCQkJCSAgICBjdXJyZW50X2V2LAorCQkJCQkJCSAgICBleHRyYSArIHNycS0+bGVuZ3RoLAorCQkJCQkJCSAgICAmYnNzLT5ic3MsCisJCQkJCQkJICAgIGJzcy0+bGFzdF9zY2FubmVkKTsKKworCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIG9uZSBtb3JlIGVudHJ5ICovCisJCQlpZiAoKGV4dHJhICsgc3JxLT5sZW5ndGggLSBjdXJyZW50X2V2KQorCQkJICAgIDw9IElXX0VWX0FERFJfTEVOKSB7CisJCQkJLyogQXNrIHVzZXIgc3BhY2UgdG8gdHJ5IGFnYWluIHdpdGggYQorCQkJCSAqIGJpZ2dlciBidWZmZXIgKi8KKwkJCQllcnIgPSAtRTJCSUc7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9CisKKwlzcnEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOworCXNycS0+ZmxhZ3MgPSAoX191MTYpIHByaXYtPnNjYW5fbW9kZTsKKworb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworLyogQ29tbWl0IGhhbmRsZXIsIGNhbGxlZCBhZnRlciBzZXQgb3BlcmF0aW9ucyAqLworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdm9pZCAqd3JxdSwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCisJaWYgKCFwcml2LT5vcGVuKQorCQlyZXR1cm4gMDsKKworCWlmIChwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKKwkJb3Jpbm9jb19yZXNldCgmcHJpdi0+cmVzZXRfd29yayk7CisJCXJldHVybiAwOworCX0KKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGRpc2FibGUgcG9ydCAiCisJCSAgICAgICAid2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLCBkZXYtPm5hbWUpOworCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIHJlY29uZmlndXJlIGNhcmRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBlbmFibGUgcG9ydCB3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKyBvdXQ6CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVzZXR0aW5nIGluc3RlYWQuLi5cbiIsIGRldi0+bmFtZSk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOworCQllcnIgPSAwOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3Mgb3Jpbm9jb19wcml2dGFiW10gPSB7CisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDAsIDAsIDAsICJmb3JjZV9yZXNldCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MSwgMCwgMCwgImNhcmRfcmVzZXQiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDIsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgMCwgInNldF9wb3J0MyIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MywgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAiZ2V0X3BvcnQzIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg0LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgIDAsICJzZXRfcHJlYW1ibGUiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDUsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgImdldF9wcmVhbWJsZSIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAwLCAic2V0X2lic3Nwb3J0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg3LCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICJnZXRfaWJzc3BvcnQiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDksIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgTUFYX1JJRF9MRU4sCisJICAiZ2V0X3JpZCIgfSwKK307CisKKworLyoKKyAqIFN0cnVjdHVyZXMgdG8gZXhwb3J0IHRoZSBXaXJlbGVzcyBIYW5kbGVycworICovCisKKyNkZWZpbmUgU1REX0lXX0hBTkRMRVIoaWQsIGZ1bmMpIFwKKwlbSVdfSU9DVExfSURYKGlkKV0gPSAoaXdfaGFuZGxlcikgZnVuYworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJb3Jpbm9jb19oYW5kbGVyW10gPSB7CisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0NPTU1JVCwJb3Jpbm9jb19pb2N0bF9jb21taXQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOQU1FLAlvcmlub2NvX2lvY3RsX2dldG5hbWUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdGUkVRLAlvcmlub2NvX2lvY3RsX3NldGZyZXEpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdGUkVRLAlvcmlub2NvX2lvY3RsX2dldGZyZXEpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNT0RFLAlvcmlub2NvX2lvY3RsX3NldG1vZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdNT0RFLAlvcmlub2NvX2lvY3RsX2dldG1vZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTRU5TLAlvcmlub2NvX2lvY3RsX3NldHNlbnMpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdTRU5TLAlvcmlub2NvX2lvY3RsX2dldHNlbnMpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSQU5HRSwJb3Jpbm9jb19pb2N0bF9nZXRpd3JhbmdlKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXU1BZLAlpd19oYW5kbGVyX3NldF9zcHkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdTUFksCWl3X2hhbmRsZXJfZ2V0X3NweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1RIUlNQWSwJaXdfaGFuZGxlcl9zZXRfdGhyc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXVEhSU1BZLAlpd19oYW5kbGVyX2dldF90aHJzcHkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdBUCwJb3Jpbm9jb19pb2N0bF9zZXR3YXApLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdBUCwJb3Jpbm9jb19pb2N0bF9nZXR3YXApLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTQ0FOLAlvcmlub2NvX2lvY3RsX3NldHNjYW4pLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdTQ0FOLAlvcmlub2NvX2lvY3RsX2dldHNjYW4pLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFU1NJRCwJb3Jpbm9jb19pb2N0bF9zZXRlc3NpZCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0VTU0lELAlvcmlub2NvX2lvY3RsX2dldGVzc2lkKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXTklDS04sCW9yaW5vY29faW9jdGxfc2V0bmljayksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05JQ0tOLAlvcmlub2NvX2lvY3RsX2dldG5pY2spLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdSQVRFLAlvcmlub2NvX2lvY3RsX3NldHJhdGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSQVRFLAlvcmlub2NvX2lvY3RsX2dldHJhdGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdSVFMsCW9yaW5vY29faW9jdGxfc2V0cnRzKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUlRTLAlvcmlub2NvX2lvY3RsX2dldHJ0cyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSQUcsCW9yaW5vY29faW9jdGxfc2V0ZnJhZyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSQUcsCW9yaW5vY29faW9jdGxfZ2V0ZnJhZyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JFVFJZLAlvcmlub2NvX2lvY3RsX2dldHJldHJ5KSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRU5DT0RFLAlvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRU5DT0RFLAlvcmlub2NvX2lvY3RsX2dldGl3ZW5jb2RlKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXUE9XRVIsCW9yaW5vY29faW9jdGxfc2V0cG93ZXIpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdQT1dFUiwJb3Jpbm9jb19pb2N0bF9nZXRwb3dlciksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0dFTklFLAlvcmlub2NvX2lvY3RsX3NldF9nZW5pZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0dFTklFLAlvcmlub2NvX2lvY3RsX2dldF9nZW5pZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01MTUUsCW9yaW5vY29faW9jdGxfc2V0X21sbWUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdBVVRILAlvcmlub2NvX2lvY3RsX3NldF9hdXRoKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXQVVUSCwJb3Jpbm9jb19pb2N0bF9nZXRfYXV0aCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VOQ09ERUVYVCwgb3Jpbm9jb19pb2N0bF9zZXRfZW5jb2RlZXh0KSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRU5DT0RFRVhULCBvcmlub2NvX2lvY3RsX2dldF9lbmNvZGVleHQpLAorfTsKKworCisvKgorICBBZGRlZCB0eXBlY2FzdGluZyBzaW5jZSB3ZSBubyBsb25nZXIgdXNlIGl3cmVxX2RhdGEgLS0gTW91c3RhZmEKKyAqLworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJb3Jpbm9jb19wcml2YXRlX2hhbmRsZXJbXSA9IHsKKwlbMF0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9yZXNldCwKKwlbMV0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9yZXNldCwKKwlbMl0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9zZXRwb3J0MywKKwlbM10gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRwb3J0MywKKwlbNF0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9zZXRwcmVhbWJsZSwKKwlbNV0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRwcmVhbWJsZSwKKwlbNl0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9zZXRpYnNzcG9ydCwKKwlbN10gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRpYnNzcG9ydCwKKwlbOV0gPSAoaXdfaGFuZGxlcikgb3Jpbm9jb19pb2N0bF9nZXRyaWQsCit9OworCitjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgb3Jpbm9jb19oYW5kbGVyX2RlZiA9IHsKKwkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShvcmlub2NvX2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZSA9IEFSUkFZX1NJWkUob3Jpbm9jb19wcml2YXRlX2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZ0YWIpLAorCS5zdGFuZGFyZCA9IG9yaW5vY29faGFuZGxlciwKKwkucHJpdmF0ZSA9IG9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyLAorCS5wcml2YXRlX2FyZ3MgPSBvcmlub2NvX3ByaXZ0YWIsCisJLmdldF93aXJlbGVzc19zdGF0cyA9IG9yaW5vY29fZ2V0X3dpcmVsZXNzX3N0YXRzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3OWY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgc3VwcG9ydC4KKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19XRVhUX0hfCisjZGVmaW5lIF9PUklOT0NPX1dFWFRfSF8KKworI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisKKy8qIFN0cnVjdHVyZSBkZWZpbmluZyBhbGwgb3VyIFdFWFQgaGFuZGxlcnMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgb3Jpbm9jb19oYW5kbGVyX2RlZjsKKworI2VuZGlmIC8qIF9PUklOT0NPX1dFWFRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWcKaW5kZXggZDM0NjlkMC4uY2ZjNWY0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnCkBAIC02MSwzICs2MSwxMyBAQAogCSAgaHR0cDovL3ByaXNtNTQub3JnLwogCiAJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0cGNpLgorCitjb25maWcgUDU0X1NQSQorCXRyaXN0YXRlICJQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQNTRfQ09NTU9OICYmIFNQSV9NQVNURVIKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHMuCisJICBUaGlzIGRyaXZlciBpcyBleHBlcmltZW50YWwsIHVudGVzdGVkIGFuZCB3aWxsIHByb2JhYmx5IG9ubHkgd29yayBvbgorCSAgTm9raWEncyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LgorCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0c3BpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCmluZGV4IDRmYTljZTcuLmMyMDUwZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAogb2JqLSQoQ09ORklHX1A1NF9DT01NT04pCSs9IHA1NGNvbW1vbi5vCiBvYmotJChDT05GSUdfUDU0X1VTQikJCSs9IHA1NHVzYi5vCiBvYmotJChDT05GSUdfUDU0X1BDSSkJCSs9IHA1NHBjaS5vCitvYmotJChDT05GSUdfUDU0X1NQSSkJCSs9IHA1NHNwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKaW5kZXggYWI3OWUzMi4uMmRkYTVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaApAQCAtMTQsNiArMTQsMTAgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCiBlbnVtIHA1NF9jb250cm9sX2ZyYW1lX3R5cGVzIHsKIAlQNTRfQ09OVFJPTF9UWVBFX1NFVFVQID0gMCwKIAlQNTRfQ09OVFJPTF9UWVBFX1NDQU4sCkBAIC00NCw2ICs0OCwxOCBAQAogCVA1NF9DT05UUk9MX1RZUEVfQlRfT1BUSU9OUyA9IDM1CiB9OwogCisvKiBwcm92aWRlIDE2IGJ5dGVzIGZvciB0aGUgdHJhbnNwb3J0IGJhY2stZW5kICovCisjZGVmaW5lIFA1NF9UWF9JTkZPX0RBVEFfU0laRQkJMTYKKworLyogc3RvcmVkIGluIGllZWU4MDIxMV90eF9pbmZvJ3MgcmF0ZV9kcml2ZXJfZGF0YSAqLworc3RydWN0IHA1NF90eF9pbmZvIHsKKwl1MzIgc3RhcnRfYWRkcjsKKwl1MzIgZW5kX2FkZHI7CisJdm9pZCAqZGF0YVtQNTRfVFhfSU5GT19EQVRBX1NJWkUgLyBzaXplb2Yodm9pZCAqKV07Cit9OworCisjZGVmaW5lIFA1NF9NQVhfQ1RSTF9GUkFNRV9MRU4JCTB4MTAwMAorCiAjZGVmaW5lIFA1NF9IRFJfRkxBR19DT05UUk9MCQlCSVQoMTUpCiAjZGVmaW5lIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VUCShCSVQoMTUpICsgQklUKDApKQogCkBAIC03NSw2ICs5MSwxNCBAQAogCXMxNiBsb25nYm93X3VuazI7CiB9OwogCitzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSB7CisJc2l6ZV90IGVudHJpZXM7CisJc2l6ZV90IGVudHJ5X3NpemU7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3QgbGVuOworCXU4IGRhdGFbMF07Cit9OworCiAjZGVmaW5lIEVFUFJPTV9SRUFEQkFDS19MRU4gMHgzZmMKIAogI2RlZmluZSBJU0wzOFhYX0RFVl9GSVJNV0FSRV9BRERSIDB4MjAwMDAKQEAgLTg0LDYgKzEwOCwyOSBAQAogI2RlZmluZSBGV19MTTg3IDB4NGM0ZDM4MzcKICNkZWZpbmUgRldfTE0yMCAweDRjNGQzMjMwCiAKK2VudW0gZndfc3RhdGUgeworCUZXX1NUQVRFX09GRiwKKwlGV19TVEFURV9CT09USU5HLAorCUZXX1NUQVRFX1JFQURZLAorCUZXX1NUQVRFX1JFU0VULAorCUZXX1NUQVRFX1JFU0VUVElORywKK307CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCisjZGVmaW5lIFA1NF9MRURfTUFYX05BTUVfTEVOIDMxCisKK3N0cnVjdCBwNTRfbGVkX2RldiB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHdfZGV2OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2RldjsKKwljaGFyIG5hbWVbUDU0X0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKKworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgcmVnaXN0ZXJlZDsKK307CisKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCiBzdHJ1Y3QgcDU0X2NvbW1vbiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJdTMyIHJ4X3N0YXJ0OwpAQCAtOTksMTEgKzE0NiwxMiBAQAogCXN0cnVjdCBtdXRleCBjb25mX211dGV4OwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggcnhfZGl2ZXJzaXR5X21hc2s7CisJdTggdHhfZGl2ZXJzaXR5X21hc2s7CiAJc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5ICppcV9hdXRvY2FsOwogCXVuc2lnbmVkIGludCBpcV9hdXRvY2FsX2xlbjsKLQlzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0ICpvdXRwdXRfbGltaXQ7Ci0JdW5zaWduZWQgaW50IG91dHB1dF9saW1pdF9sZW47Ci0Jc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhOworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpvdXRwdXRfbGltaXQ7CisJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKmN1cnZlX2RhdGE7CiAJc3RydWN0IHA1NF9yc3NpX2xpbmVhcl9hcHByb3hpbWF0aW9uIHJzc2ljYWxfZGJbSUVFRTgwMjExX05VTV9CQU5EU107CiAJdW5zaWduZWQgaW50IGZpbHRlcl9mbGFnczsKIAlib29sIHVzZV9zaG9ydF9zbG90OwpAQCAtMTE1LDcgKzE2Myw3IEBACiAJdW5zaWduZWQgaW50IG91dHB1dF9wb3dlcjsKIAl1MzIgdHNmX2xvdzMyOwogCXUzMiB0c2ZfaGlnaDMyOwotCXU2NCBiYXNpY19yYXRlX21hc2s7CisJdTMyIGJhc2ljX3JhdGVfbWFzazsKIAl1MTYgd2FrZXVwX3RpbWVyOwogCXUxNiBhaWQ7CiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s4XTsKQEAgLTEyOCwxMyArMTc2LDIxIEBACiAJc3RydWN0IGNvbXBsZXRpb24gZWVwcm9tX2NvbXA7CiAJdTggcHJpdmFjeV9jYXBzOwogCXU4IHJ4X2tleWNhY2hlX3NpemU7CisJLyogTEVEIG1hbmFnZW1lbnQgKi8KKwkjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgYXNzb2NfbGVkOworCXN0cnVjdCBwNTRfbGVkX2RldiB0eF9sZWQ7CisJI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCisJdTE2IHNvZnRsZWRfc3RhdGU7CQkvKiBiaXQgZmllbGQgb2YgZ2xvd2luZyBMRURzICovCiB9OwogCiBpbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHA1NF9mcmVlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOworaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pOwogaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwogc3RydWN0IGllZWU4MDIxMV9odyAqcDU0X2luaXRfY29tbW9uKHNpemVfdCBwcml2X2RhdGFfbGVuKTsKK2ludCBwNTRfcmVnaXN0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGRldmljZSAqcGRldik7CiB2b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwogCiAjZW5kaWYgLyogUDU0X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYwppbmRleCBmMTcwMTA2Li4wYTk4OTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCkBAIC0yMSw2ICsyMSw5IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KIAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCiAKICNpbmNsdWRlICJwNTQuaCIKICNpbmNsdWRlICJwNTRjb21tb24uaCIKQEAgLTIzOSwxMSArMjQyLDExIEBACiAKIAlpZiAocHJpdi0+ZndfdmFyID49IDB4MzAwKSB7CiAJCS8qIEZpcm13YXJlIHN1cHBvcnRzIFFvUywgdXNlIGl0ISAqLwotCQlwcml2LT50eF9zdGF0c1s0XS5saW1pdCA9IDM7CQkvKiBBQ19WTyAqLwotCQlwcml2LT50eF9zdGF0c1s1XS5saW1pdCA9IDQ7CQkvKiBBQ19WSSAqLwotCQlwcml2LT50eF9zdGF0c1s2XS5saW1pdCA9IDM7CQkvKiBBQ19CRSAqLwotCQlwcml2LT50eF9zdGF0c1s3XS5saW1pdCA9IDI7CQkvKiBBQ19CSyAqLwotCQlkZXYtPnF1ZXVlcyA9IDQ7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WT10ubGltaXQgPSAzOworCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVkldLmxpbWl0ID0gNDsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JFXS5saW1pdCA9IDM7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19CS10ubGltaXQgPSAyOworCQlkZXYtPnF1ZXVlcyA9IFA1NF9RVUVVRV9BQ19OVU07CiAJfQogCiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpCkBAIC0yNzIsMTMgKzI3NSwxOSBAQAogCXVuc2lnbmVkIGludCBpLCBqOwogCXZvaWQgKnNvdXJjZSwgKnRhcmdldDsKIAotCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKGNkX2xlbiwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwcml2LT5jdXJ2ZV9kYXRhKSArIGNkX2xlbiwKKwkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMgPSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplID0gc2l6ZW9mKF9fbGUxNikgKworCQlzaXplb2YoKmRzdCkgKiBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7CisJcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhLCBkYXRhKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5sZW4gPSBjZF9sZW47CisJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEtPmRhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOwogCXNvdXJjZSA9IGN1cnZlX2RhdGEtPmRhdGE7Ci0JdGFyZ2V0ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKwl0YXJnZXQgPSAoKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhKS0+ZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgewogCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7CiAJCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKQEAgLTMxOCwxMyArMzI3LDE5IEBACiAJdW5zaWduZWQgaW50IGksIGo7CiAJdm9pZCAqc291cmNlLCAqdGFyZ2V0OwogCi0JcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2MoY2RfbGVuLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5jdXJ2ZV9kYXRhID0ga3phbGxvYyhjZF9sZW4gKyBzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpLAorCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCisJCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOworCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKKwltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CiAJc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOworCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CiAJCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKIAkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOwpAQCAtMzc2LDcgKzM5MSwxMDIgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIHA1NF9wYXJzZV9kZWZhdWx0X2NvdW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHBkYV9jb3VudHJ5ICpjb3VudHJ5OworCisJaWYgKGxlbiAhPSBzaXplb2YoKmNvdW50cnkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZvdW5kIHBvc3NpYmxlIGludmFsaWQgZGVmYXVsdCBjb3VudHJ5ICIKKwkJCQkiZWVwcm9tIGVudHJ5LiAoZW50cnkgc2l6ZTogJWQpXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGVuKTsKKworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiY291bnRyeToiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgZGF0YSwgbGVuKTsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXJldHVybjsKKwl9CisKKwljb3VudHJ5ID0gKHN0cnVjdCBwZGFfY291bnRyeSAqKSBkYXRhOworCWlmIChjb3VudHJ5LT5mbGFncyA9PSBQRFJfQ09VTlRSWV9DRVJUX0NPREVfUFNFVURPKQorCQlyZWd1bGF0b3J5X2hpbnQoZGV2LT53aXBoeSwgY291bnRyeS0+YWxwaGEyKTsKKwllbHNlIHsKKwkJLyogVE9ETzoKKwkJICogd3JpdGUgYSBzaGFyZWQvY29tbW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMKKwkJICogIlJlZ3VsYXRvcnkgZG9tYWluIGNvZGVzIiAoODAyLjExLTIwMDcgMTQuOC4yLjIpCisJCSAqIGludG8gSVNPL0lFQyAzMTY2LTEgYWxwaGEyIGZvciByZWd1bGF0b3J5X2hpbnQuCisJCSAqLworCX0KK30KKworc3RhdGljIGludCBwNTRfY29udmVydF9vdXRwdXRfbGltaXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHU4ICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKGxlbiA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0gIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIG91dHB1dCBwb3dlciBkYiByZXZpc2lvbjoleFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGRhdGFbMF0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoMiArIGRhdGFbMV0gKiBzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkgPiBsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhkYXRhWzFdICoKKwkJc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpICsKKwkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcHJpdi0+b3V0cHV0X2xpbWl0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0ID0gMDsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgPSBkYXRhWzFdOworCXByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KTsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmxlbiA9IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqCisJCQkJICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgKworCQkJCSAgcHJpdi0+b3V0cHV0X2xpbWl0LT5vZmZzZXQ7CisKKwltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhLCAmZGF0YVsyXSwKKwkgICAgICAgZGF0YVsxXSAqIHNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpwNTRfY29udmVydF9kYihzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpzcmMsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKQoreworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpkc3Q7CisJc2l6ZV90IHBheWxvYWRfbGVuLCBlbnRyaWVzLCBlbnRyeV9zaXplLCBvZmZzZXQ7CisKKwlwYXlsb2FkX2xlbiA9IGxlMTZfdG9fY3B1KHNyYy0+bGVuKTsKKwllbnRyaWVzID0gbGUxNl90b19jcHUoc3JjLT5lbnRyaWVzKTsKKwllbnRyeV9zaXplID0gbGUxNl90b19jcHUoc3JjLT5lbnRyeV9zaXplKTsKKwlvZmZzZXQgPSBsZTE2X3RvX2NwdShzcmMtPm9mZnNldCk7CisJaWYgKCgoZW50cmllcyAqIGVudHJ5X3NpemUgKyBvZmZzZXQpICE9IHBheWxvYWRfbGVuKSB8fAorCSAgICAgKHBheWxvYWRfbGVuICsgc2l6ZW9mKCpzcmMpICE9IHRvdGFsX2xlbikpCisJCXJldHVybiBOVUxMOworCisJZHN0ID0ga21hbGxvYyhzaXplb2YoKmRzdCkgKyBwYXlsb2FkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc3QpCisJCXJldHVybiBOVUxMOworCisJZHN0LT5lbnRyaWVzID0gZW50cmllczsKKwlkc3QtPmVudHJ5X3NpemUgPSBlbnRyeV9zaXplOworCWRzdC0+b2Zmc2V0ID0gb2Zmc2V0OworCWRzdC0+bGVuID0gcGF5bG9hZF9sZW47CisKKwltZW1jcHkoZHN0LT5kYXRhLCBzcmMtPmRhdGEsIHBheWxvYWRfbGVuKTsKKwlyZXR1cm4gZHN0OworfQorCitpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICp3cmFwID0gTlVMTDsKQEAgLTQwMSwzMCArNTExLDE3IEBACiAKIAkJc3dpdGNoIChsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpIHsKIAkJY2FzZSBQRFJfTUFDX0FERFJFU1M6CisJCQlpZiAoZGF0YV9sZW4gIT0gRVRIX0FMRU4pCisJCQkJYnJlYWs7CiAJCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIGVudHJ5LT5kYXRhKTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUzoKLQkJCWlmIChkYXRhX2xlbiA8IDIpIHsKLQkJCQllcnIgPSAtRUlOVkFMOworCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCkKKwkJCQlicmVhazsKKwkJCWVyciA9IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoZGV2LCBlbnRyeS0+ZGF0YSwKKwkJCQkJCQlkYXRhX2xlbik7CisJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlpZiAoMiArIGVudHJ5LT5kYXRhWzFdKnNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSA+IGRhdGFfbGVuKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhlbnRyeS0+ZGF0YVsxXSAqCi0JCQkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LCAmZW50cnktPmRhdGFbMl0sCi0JCQkgICAgICAgZW50cnktPmRhdGFbMV0qc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpKTsKLQkJCXByaXYtPm91dHB1dF9saW1pdF9sZW4gPSBlbnRyeS0+ZGF0YVsxXTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQTogewogCQkJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID0KQEAgLTQ2Myw2ICs1NjAsOSBAQAogCQkJbWVtY3B5KHByaXYtPmlxX2F1dG9jYWwsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CiAJCQlwcml2LT5pcV9hdXRvY2FsX2xlbiA9IGRhdGFfbGVuIC8gc2l6ZW9mKHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSk7CiAJCQlicmVhazsKKwkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgorCQkJcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CisJCQlicmVhazsKIAkJY2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6CiAJCQl0bXAgPSBlbnRyeS0+ZGF0YTsKIAkJCXdoaWxlICgodTggKil0bXAgPCBlbnRyeS0+ZGF0YSArIGRhdGFfbGVuKSB7CkBAIC00NzMsNiArNTczLDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQ6CisJCQlpZiAoZGF0YV9sZW4gPCAyKQorCQkJCWJyZWFrOwogCQkJcHJpdi0+dmVyc2lvbiA9ICoodTggKikoZW50cnktPmRhdGEgKyAxKTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OOgpAQCAtNDgxLDYgKzU4MywzNCBAQAogCQkJcDU0X3BhcnNlX3Jzc2ljYWwoZGV2LCBlbnRyeS0+ZGF0YSwgZGF0YV9sZW4sCiAJCQkJCSAgbGUxNl90b19jcHUoZW50cnktPmNvZGUpKTsKIAkJCWJyZWFrOworCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTTogeworCQkJX19sZTE2ICpzcmMgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCXMxNiAqZHN0ID0gKHZvaWQgKikgJnByaXYtPnJzc2ljYWxfZGI7CisJCQlpbnQgaTsKKworCQkJaWYgKGRhdGFfbGVuICE9IHNpemVvZihwcml2LT5yc3NpY2FsX2RiKSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHByaXYtPnJzc2ljYWxfZGIpIC8KKwkJCQkJc2l6ZW9mKCpzcmMpOyBpKyspCisJCQkJKihkc3QrKykgPSAoczE2KSBsZTE2X3RvX2NwdSgqKHNyYysrKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NOiB7CisJCQlzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpwZGEgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCWlmIChwcml2LT5vdXRwdXRfbGltaXQgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCisJCQkJYnJlYWs7CisJCQlwcml2LT5vdXRwdXRfbGltaXQgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT006IHsKKwkJCXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnBkYSA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJaWYgKHByaXYtPmN1cnZlX2RhdGEgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCisJCQkJYnJlYWs7CisJCQlwcml2LT5jdXJ2ZV9kYXRhID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBQRFJfRU5EOgogCQkJLyogbWFrZSBpdCBvdmVycnVuICovCiAJCQllbnRyeV9sZW4gPSBsZW47CkBAIC00OTcsNyArNjI3LDYgQEAKIAkJY2FzZSBQRFJfVVRGOF9PRU1fTkFNRToKIAkJY2FzZSBQRFJfVVRGOF9QUk9EVUNUX05BTUU6CiAJCWNhc2UgUERSX0NPVU5UUllfTElTVDoKLQkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgogCQljYXNlIFBEUl9BTlRFTk5BX0dBSU46CiAJCWNhc2UgUERSX1BSSVNNX0lORElHT19QQV9DQUxJQlJBVElPTl9EQVRBOgogCQljYXNlIFBEUl9SRUdVTEFUT1JZX1BPV0VSX0xJTUlUUzoKQEAgLTUyNSwxMiArNjU0LDE2IEBACiAJfQogCiAJcHJpdi0+cnhodyA9IHN5bnRoICYgUERSX1NZTlRIX0ZST05URU5EX01BU0s7Ci0JaWYgKHByaXYtPnJ4aHcgPT0gNCkKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVykKIAkJcDU0X2luaXRfeGJvd19zeW50aChkZXYpOwogCWlmICghKHN5bnRoICYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpCiAJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmRfMkdIejsKIAlpZiAoIShzeW50aCAmIFBEUl9TWU5USF81X0dIWl9ESVNBQkxFRCkpCiAJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmJhbmRfNUdIejsKKwlpZiAoKHN5bnRoICYgUERSX1NZTlRIX1JYX0RJVl9NQVNLKSA9PSBQRFJfU1lOVEhfUlhfRElWX1NVUFBPUlRFRCkKKwkJcHJpdi0+cnhfZGl2ZXJzaXR5X21hc2sgPSAzOworCWlmICgoc3ludGggJiBQRFJfU1lOVEhfVFhfRElWX01BU0spID09IFBEUl9TWU5USF9UWF9ESVZfU1VQUE9SVEVEKQorCQlwcml2LT50eF9kaXZlcnNpdHlfbWFzayA9IDM7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT53aXBoeS0+cGVybV9hZGRyKSkgewogCQl1OCBwZXJtX2FkZHJbRVRIX0FMRU5dOwpAQCAtNTY4LDEzICs3MDEsMjEgQEAKIAkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOwogCiBzdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByc3NpKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCWludCBiYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7CiAKLQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCWlmIChwcml2LT5yeGh3ICE9IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQorCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7CisJZWxzZQorCQkvKgorCQkgKiBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IGZvcm11bGEKKwkJICovCisJCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCiAJCQkgcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpIC8gNDsKIH0KIApAQCAtNTk3LDEwICs3MzgsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghKGhkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9JTl9GQ1NfR09PRCkpKSB7Ci0JCWlmIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfRkNTRkFJTCkKLQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7Ci0JCWVsc2UKLQkJCXJldHVybiAwOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9PSykKQEAgLTY1NSw3ICs3OTMsOCBAQAogCQlyZXR1cm4gOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVzOyBpKyspCi0JCWlmIChwcml2LT50eF9zdGF0c1tpICsgNF0ubGVuIDwgcHJpdi0+dHhfc3RhdHNbaSArIDRdLmxpbWl0KQorCQlpZiAocHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5sZW4gPAorCQkgICAgcHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5saW1pdCkKIAkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldiwgaSk7CiB9CiAKQEAgLTY2Myw3ICs4MDIsNyBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGZyZWVkID0gMCwgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CiAKQEAgLTY4MSwxOCArODIwLDE4IEBACiAJcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CiAJaWYgKHNrYi0+cHJldiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJc3RydWN0IG1lbXJlY29yZCAqbXI7CisJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+cHJldik7Ci0JCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CiAJCWxhc3RfYWRkciA9IG1yLT5lbmRfYWRkcjsKIAl9CiAJaWYgKHNrYi0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJc3RydWN0IG1lbXJlY29yZCAqbXI7CisJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+bmV4dCk7Ci0JCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CiAJCWZyZWVkID0gbXItPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CiAJfSBlbHNlCiAJCWZyZWVkID0gcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyOwpAQCAtNzM1LDcgKzg3NCw3IEBACiAJc3RydWN0IHA1NF9mcmFtZV9zZW50ICpwYXlsb2FkID0gKHN0cnVjdCBwNTRfZnJhbWVfc2VudCAqKSBoZHItPmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwogCXUzMiBhZGRyID0gbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpIC0gcHJpdi0+aGVhZHJvb207Ci0Jc3RydWN0IG1lbXJlY29yZCAqcmFuZ2UgPSBOVUxMOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2UgPSBOVUxMOwogCXUzMiBmcmVlZCA9IDA7CiAJdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NTgsMTAgKzg5NywxMCBAQAogCiAJCWlmIChlbnRyeS0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmk7Ci0JCQlzdHJ1Y3QgbWVtcmVjb3JkICptcjsKKwkJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJCW5pID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+bmV4dCk7Ci0JCQltciA9IChzdHJ1Y3QgbWVtcmVjb3JkICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CisJCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKIAkJCWZyZWVkID0gbXItPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CiAJCX0gZWxzZQogCQkJZnJlZWQgPSBwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHI7CkBAIC03NzYsOSArOTE1LDE2IEBACiAJCXByaXYtPnR4X3N0YXRzW2VudHJ5X2RhdGEtPmh3X3F1ZXVlXS5sZW4tLTsKIAkJcHJpdi0+c3RhdHMuZG90MTFBQ0tGYWlsdXJlQ291bnQgKz0gcGF5bG9hZC0+dHJpZXMgLSAxOwogCi0JCWlmICh1bmxpa2VseShlbnRyeSA9PSBwcml2LT5jYWNoZWRfYmVhY29uKSkgeworCQkvKgorCQkgKiBGcmFtZXMgaW4gUDU0X1FVRVVFX0ZXU0NBTiBhbmQgUDU0X1FVRVVFX0JFQUNPTiBhcmUKKwkJICogZ2VuZXJhdGVkIGJ5IHRoZSBkcml2ZXIuIFRoZXJlZm9yZSB0eF9zdGF0dXMgaXMgYm9ndXMKKwkJICogYW5kIHdlIGRvbid0IHdhbnQgdG8gY29uZnVzZSB0aGUgbWFjODAyMTEgc3RhY2suCisJCSAqLworCQlpZiAodW5saWtlbHkoZW50cnlfZGF0YS0+aHdfcXVldWUgPCBQNTRfUVVFVUVfRldTQ0FOKSkgeworCQkJaWYgKGVudHJ5X2RhdGEtPmh3X3F1ZXVlID09IFA1NF9RVUVVRV9CRUFDT04pCisJCQkJcHJpdi0+Y2FjaGVkX2JlYWNvbiA9IE5VTEw7CisKIAkJCWtmcmVlX3NrYihlbnRyeSk7Ci0JCQlwcml2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTk3MSw4ICsxMTE3LDggQEAKICAqIGNhbiBmaW5kIHNvbWUgdW51c2VkIG1lbW9yeSB0byB1cGxvYWQgb3VyIHBhY2tldHMgdG8uIEhvd2V2ZXIsIGRhdGEgdGhhdCB3ZQogICogd2FudCB0aGUgY2FyZCB0byBUWCBuZWVkcyB0byBzdGF5IGludGFjdCB1bnRpbCB0aGUgY2FyZCBoYXMgdG9sZCB1cyB0aGF0CiAgKiBpdCBpcyBkb25lIHdpdGggaXQuIFRoaXMgZnVuY3Rpb24gZmluZHMgZW1wdHkgcGxhY2VzIHdlIGNhbiB1cGxvYWQgdG8gYW5kCi0gKiBtYXJrcyBhbGxvY2F0ZWQgYXJlYXMgYXMgcmVzZXJ2ZWQgaWYgbmVjZXNzYXJ5LiBwNTRfcnhfZnJhbWVfc2VudCBmcmVlcwotICogYWxsb2NhdGVkIGFyZWFzLgorICogbWFya3MgYWxsb2NhdGVkIGFyZWFzIGFzIHJlc2VydmVkIGlmIG5lY2Vzc2FyeS4gcDU0X3J4X2ZyYW1lX3NlbnQgb3IKKyAqIHA1NF9mcmVlX3NrYiBmcmVlcyBhbGxvY2F0ZWQgYXJlYXMuCiAgKi8KIHN0YXRpYyBpbnQgcDU0X2Fzc2lnbl9hZGRyZXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgcDU0X2hkciAqZGF0YSwgdTMyIGxlbikKQEAgLTk4MSw3ICsxMTI3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CiAJc3RydWN0IHNrX2J1ZmYgKnRhcmdldF9za2IgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwogCXUzMiBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIAl1MzIgbGFyZ2VzdF9ob2xlID0gMDsKIAl1MzIgdGFyZ2V0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKQEAgLTEwNjMsMjUgKzEyMDksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJdTE2IGhkcl9mbGFncywgdTE2IGxlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKQorc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IGhkcl9mbGFncywKKwkJCQkgICAgIHUxNiBwYXlsb2FkX2xlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzaXplX3QgZnJhbWVfbGVuID0gc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW47CiAKLQlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgcHJpdi0+dHhfaGRyX2xlbiwgbWVtZmxhZ3MpOworCWlmIChmcmFtZV9sZW4gPiBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihwcml2LT50eF9oZHJfbGVuICsgZnJhbWVfbGVuLCBtZW1mbGFncyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiBOVUxMOwogCXNrYl9yZXNlcnZlKHNrYiwgcHJpdi0+dHhfaGRyX2xlbik7CiAKIAloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CiAJaGRyLT5mbGFncyA9IGNwdV90b19sZTE2KGhkcl9mbGFncyk7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gLSBzaXplb2YoKmhkcikpOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYocGF5bG9hZF9sZW4pOwogCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KHR5cGUpOwogCWhkci0+dHJpZXMgPSBoZHItPnJ0c190cmllcyA9IDA7CiAKLQlpZiAodW5saWtlbHkocDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgc2tiLCBoZHIsIGxlbikpKSB7CisJaWYgKHA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBmcmFtZV9sZW4pKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMDkxLDcgKzEyNDEsNiBAQAogaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkciA9IE5VTEw7CiAJc3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBlZXByb21fc2l6ZSA9IDB4MjAyMCwgb2Zmc2V0ID0gMCwgYmxvY2tzaXplLCBtYXhibG9ja3NpemU7CkBAIC0xMTA0LDkgKzEyNTMsOSBAQAogCWVsc2UKIAkJbWF4YmxvY2tzaXplIC09IDB4NDsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgc2l6ZW9mKCpoZHIpICsKLQkJCSAgICBzaXplb2YoKmVlcHJvbV9oZHIpICsgbWF4YmxvY2tzaXplLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIHNpemVvZigqZWVwcm9tX2hkcikgKworCQkJICAgIG1heGJsb2Nrc2l6ZSwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssCisJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCWdvdG8gZnJlZTsKIAlwcml2LT5lZXByb20gPSBremFsbG9jKEVFUFJPTV9SRUFEQkFDS19MRU4sIEdGUF9LRVJORUwpOwpAQCAtMTE2Miw5ICsxMzExLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfdGltICp0aW07CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsCi0JCSAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKyBzaXplb2YoKnRpbSksCi0JCSAgICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqdGltKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1RJTSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMTgxLDkgKzEzMjksOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF9zdGFfdW5sb2NrICpzdGE7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsCi0JCXNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKyBzaXplb2YoKnN0YSksCi0JCVA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzdGEpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIyMyw5ICsxMzcwLDggQEAKIAlzdHJ1Y3QgcDU0X2hkciAqaGRyOwogCXN0cnVjdCBwNTRfdHhjYW5jZWwgKmNhbmNlbDsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwKLQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIHNpemVvZigqY2FuY2VsKSwKLQkJUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNhbmNlbCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjQyLDQ2ICsxMzg4LDczIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgewotCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IDA7Ci0JCQkqZXh0cmFfbGVuID0gSUVFRTgwMjExX01BWF9USU1fTEVOOwotCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUDsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gMjsKLQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVAgfAotCQkJCSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCSpxdWV1ZSA9IDI7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJKnF1ZXVlICs9IDQ7Ci0JCXJldCA9IDE7Ci0JfQorCWludCByZXQgPSAxOwogCiAJc3dpdGNoIChwcml2LT5tb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkvKgorCQkgKiBXZSBoYXZlIHRvIHNldCBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQyBmb3IKKwkJICogZXZlcnkgZnJhbWUgaW4gcHJvbWlzY3VvdXMvbW9uaXRvciBtb2RlLgorCQkgKiBzZWUgU1RTVzQ1eDBDIExNQUMgQVBJIC0gcGFnZSAxMi4KKwkJICovCisJCSphaWQgPSAwOworCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQzsKKwkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOworCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCSphaWQgPSAxOworCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlCisJCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7CiAJCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IDM7CisJCQkqcXVldWUgPSBQNTRfUVVFVUVfQ0FCOwogCQkJcmV0dXJuIDA7CiAJCX0KKworCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkJKmFpZCA9IDA7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7CisJCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUCB8CisJCQkJCSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJCSphaWQgPSAwOworCisJCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgeworCQkJCQkvKgorCQkJCQkgKiBJbmplY3RpbmcgYmVhY29ucyBvbiB0b3Agb2YgYSBBUCBpcworCQkJCQkgKiBub3QgYSBnb29kIGlkZWEuLi4gbmV2ZXJ0aGVsZXNzLAorCQkJCQkgKiBpdCBzaG91bGQgYmUgZG9hYmxlLgorCQkJCQkgKi8KKworCQkJCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CisJCQkJCXJldHVybiAxOworCQkJCX0KKworCQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVA7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX0JFQUNPTjsKKwkJCQkqZXh0cmFfbGVuID0gSUVFRTgwMjExX01BWF9USU1fTEVOOworCQkJCXJldHVybiAwOworCQkJfSBlbHNlIHsKKwkJCQkqcXVldWUgPSBQNTRfUVVFVUVfTUdNVDsKKwkJCQlyZXQgPSAwOworCQkJfQorCQl9IGVsc2UKKwkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKKwogCQlpZiAoaW5mby0+Y29udHJvbC5zdGEpCiAJCQkqYWlkID0gaW5mby0+Y29udHJvbC5zdGEtPmFpZDsKIAkJZWxzZQogCQkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKKwkJYnJlYWs7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMzAzLDcgKzE0NzYsNyBAQAogc3RhdGljIGludCBwNTRfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpjdXJyZW50X3F1ZXVlID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpjdXJyZW50X3F1ZXVlOwogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHA1NF90eF9kYXRhICp0eGhkcjsKQEAgLTE0NDYsMTUgKzE2MTksMTcgQEAKIAl9CiAJdHhoZHItPmNyeXB0X29mZnNldCA9IGNyeXB0X29mZnNldDsKIAl0eGhkci0+aHdfcXVldWUgPSBxdWV1ZTsKLQlpZiAoY3VycmVudF9xdWV1ZSkKLQkJdHhoZHItPmJhY2tsb2cgPSBjdXJyZW50X3F1ZXVlLT5sZW47Ci0JZWxzZQotCQl0eGhkci0+YmFja2xvZyA9IDA7CisJdHhoZHItPmJhY2tsb2cgPSBjdXJyZW50X3F1ZXVlLT5sZW47CiAJbWVtc2V0KHR4aGRyLT5kdXJhdGlvbnMsIDAsIHNpemVvZih0eGhkci0+ZHVyYXRpb25zKSk7Ci0JdHhoZHItPnR4X2FudGVubmEgPSAoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPwotCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxOwotCXR4aGRyLT5vdXRwdXRfcG93ZXIgPSBwcml2LT5vdXRwdXRfcG93ZXI7Ci0JdHhoZHItPmN0c19yYXRlID0gY3RzX3JhdGU7CisJdHhoZHItPnR4X2FudGVubmEgPSAoKGluZm8tPmFudGVubmFfc2VsX3R4ID09IDApID8KKwkJMiA6IGluZm8tPmFudGVubmFfc2VsX3R4IC0gMSkgJiBwcml2LT50eF9kaXZlcnNpdHlfbWFzazsKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQl0eGhkci0+bG9uZ2Jvdy5jdHNfcmF0ZSA9IGN0c19yYXRlOworCQl0eGhkci0+bG9uZ2Jvdy5vdXRwdXRfcG93ZXIgPSBjcHVfdG9fbGUxNihwcml2LT5vdXRwdXRfcG93ZXIpOworCX0gZWxzZSB7CisJCXR4aGRyLT5ub3JtYWwub3V0cHV0X3Bvd2VyID0gcHJpdi0+b3V0cHV0X3Bvd2VyOworCQl0eGhkci0+bm9ybWFsLmN0c19yYXRlID0gY3RzX3JhdGU7CisJfQogCWlmIChwYWRkaW5nKQogCQl0eGhkci0+YWxpZ25bMF0gPSBwYWRkaW5nOwogCkBAIC0xNDY3LDE0ICsxNjQyLDEyIEBACiAJcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywKIAkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUDU0X1RYX0ZSQU1FX0xJRkVUSU1FKSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgZXJyOgogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp0eGhkcikgKyBwYWRkaW5nKTsKLQlpZiAoY3VycmVudF9xdWV1ZSkgewotCQljdXJyZW50X3F1ZXVlLT5sZW4tLTsKLQkJY3VycmVudF9xdWV1ZS0+Y291bnQtLTsKLQl9CisJY3VycmVudF9xdWV1ZS0+bGVuLS07CisJY3VycmVudF9xdWV1ZS0+Y291bnQtLTsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKQEAgLTE0ODUsOSArMTY1OCw4IEBACiAJc3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwOwogCXUxNiBtb2RlOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnNldHVwKSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwgUDU0X0NPTlRST0xfVFlQRV9TRVRVUCwKLQkJCSAgICBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU0VUVVAsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTUwNCwxOSArMTY3NiwyOSBAQAogCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0lCU1M7CiAJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUzsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9OT05FOworCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQorCisJCS8qCisJCSAqICJUUkFOU1BBUkVOVCBhbmQgUFJPTUlTQ1VPVVMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKwkJICogU1RTVzQ1WDBDIExNQUMgQVBJIC0gcGFnZSAxMgorCQkgKi8KKwkJaWYgKCgocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB8fAorCQkgICAgIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKSkgJiYKKwkJICAgIChtb2RlICE9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUykpCiAJCQltb2RlIHw9IFA1NF9GSUxURVJfVFlQRV9UUkFOU1BBUkVOVDsKIAl9IGVsc2UKLQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9SWF9ESVNBQkxFRDsKKwkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CiAKIAlzZXR1cC0+bWFjX21vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKIAltZW1jcHkoc2V0dXAtPm1hY19hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShzZXR1cC0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0Jc2V0dXAtPnJ4X2FudGVubmEgPSAyOyAvKiBhdXRvbWF0aWMgKi8KKwlzZXR1cC0+cnhfYW50ZW5uYSA9IDIgJiBwcml2LT5yeF9kaXZlcnNpdHlfbWFzazsgLyogYXV0b21hdGljICovCiAJc2V0dXAtPnJ4X2FsaWduID0gMDsKIAlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDApIHsKIAkJc2V0dXAtPnYxLmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7CkBAIC0xNTQ5LDc5ICsxNzMxLDEzNyBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF9zY2FuICpjaGFuOworCXN0cnVjdCBwNTRfaGRyICpoZHI7CisJc3RydWN0IHA1NF9zY2FuX2hlYWQgKmhlYWQ7CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5ICppcV9hdXRvY2FsOworCXVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gKmJvZHk7CisJc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSAqcmF0ZTsKKwlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpyc3NpOwogCXVuc2lnbmVkIGludCBpOwogCXZvaWQgKmVudHJ5OwotCV9fbGUxNiBmcmVxID0gY3B1X3RvX2xlMTYoZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAlpbnQgYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOworCV9fbGUxNiBmcmVxID0gY3B1X3RvX2xlMTYoZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpjaGFuKSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwgUDU0X0NPTlRST0xfVFlQRV9TQ0FOLAotCQkJICAgIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpoZWFkKSArCisJCQkgICAgMiArIHNpemVvZigqaXFfYXV0b2NhbCkgKyBzaXplb2YoKmJvZHkpICsKKwkJCSAgICBzaXplb2YoKnJhdGUpICsgMiAqIHNpemVvZigqcnNzaSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TQ0FOLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljaGFuID0gKHN0cnVjdCBwNTRfc2NhbiAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpjaGFuKSk7Ci0JbWVtc2V0KGNoYW4tPnBhZGRpbmcxLCAwLCBzaXplb2YoY2hhbi0+cGFkZGluZzEpKTsKLQljaGFuLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JY2hhbi0+ZHdlbGwgPSBjcHVfdG9fbGUxNihkd2VsbCk7CisJaGVhZCA9IChzdHJ1Y3QgcDU0X3NjYW5faGVhZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkKSk7CisJbWVtc2V0KGhlYWQtPnNjYW5fcGFyYW1zLCAwLCBzaXplb2YoaGVhZC0+c2Nhbl9wYXJhbXMpKTsKKwloZWFkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJaGVhZC0+ZHdlbGwgPSBjcHVfdG9fbGUxNihkd2VsbCk7CisJaGVhZC0+ZnJlcSA9IGZyZXE7CiAKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQlfX2xlMTYgKnBhX3Bvd2VyX3BvaW50cyA9IChfX2xlMTYgKikgc2tiX3B1dChza2IsIDIpOworCQkqcGFfcG93ZXJfcG9pbnRzID0gY3B1X3RvX2xlMTYoMHgwYyk7CisJfQorCisJaXFfYXV0b2NhbCA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmlxX2F1dG9jYWwpKTsKIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+aXFfYXV0b2NhbF9sZW47IGkrKykgewogCQlpZiAocHJpdi0+aXFfYXV0b2NhbFtpXS5mcmVxICE9IGZyZXEpCiAJCQljb250aW51ZTsKIAotCQltZW1jcHkoJmNoYW4tPmlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLAotCQkgICAgICAgc2l6ZW9mKCpwcml2LT5pcV9hdXRvY2FsKSk7CisJCW1lbWNweShpcV9hdXRvY2FsLCAmcHJpdi0+aXFfYXV0b2NhbFtpXS5wYXJhbXMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5KSk7CiAJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBwcml2LT5pcV9hdXRvY2FsX2xlbikKIAkJZ290byBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+b3V0cHV0X2xpbWl0X2xlbjsgaSsrKSB7Ci0JCWlmIChwcml2LT5vdXRwdXRfbGltaXRbaV0uZnJlcSAhPSBmcmVxKQorCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5sb25nYm93KSk7CisJZWxzZQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5ub3JtYWwpKTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXM7IGkrKykgeworCQlfX2xlMTYgKmVudHJ5X2ZyZXEgPSAodm9pZCAqKSAocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhICsKKwkJCQkgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqIGkpOworCisJCWlmICgqZW50cnlfZnJlcSAhPSBmcmVxKQogCQkJY29udGludWU7CiAKLQkJY2hhbi0+dmFsX2JhcmtlciA9IDB4Mzg7Ci0JCWNoYW4tPnZhbF9icHNrID0gY2hhbi0+ZHVwX2Jwc2sgPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF9icHNrOwotCQljaGFuLT52YWxfcXBzayA9IGNoYW4tPmR1cF9xcHNrID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfcXBzazsKLQkJY2hhbi0+dmFsXzE2cWFtID0gY2hhbi0+ZHVwXzE2cWFtID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfMTZxYW07Ci0JCWNoYW4tPnZhbF82NHFhbSA9IGNoYW4tPmR1cF82NHFhbSA9Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsXzY0cWFtOworCQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQkJbWVtY3B5KCZib2R5LT5sb25nYm93LnBvd2VyX2xpbWl0cywKKwkJCSAgICAgICAodm9pZCAqKSBlbnRyeV9mcmVxICsgc2l6ZW9mKF9fbGUxNiksCisJCQkgICAgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgKmxpbWl0cyA9CisJCQkgICAgICAgKHZvaWQgKikgZW50cnlfZnJlcTsKKworCQkJYm9keS0+bm9ybWFsLnZhbF9iYXJrZXIgPSAweDM4OworCQkJYm9keS0+bm9ybWFsLnZhbF9icHNrID0gYm9keS0+bm9ybWFsLmR1cF9icHNrID0KKwkJCQlsaW1pdHMtPnZhbF9icHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF9xcHNrID0gYm9keS0+bm9ybWFsLmR1cF9xcHNrID0KKwkJCQlsaW1pdHMtPnZhbF9xcHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF8xNnFhbSA9IGJvZHktPm5vcm1hbC5kdXBfMTZxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzE2cWFtOworCQkJYm9keS0+bm9ybWFsLnZhbF82NHFhbSA9IGJvZHktPm5vcm1hbC5kdXBfNjRxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzY0cWFtOworCQl9CiAJCWJyZWFrOwogCX0KLQlpZiAoaSA9PSBwcml2LT5vdXRwdXRfbGltaXRfbGVuKQorCWlmIChpID09IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcykKIAkJZ290byBlcnI7CiAKLQllbnRyeSA9IHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKKwllbnRyeSA9ICh2b2lkICopKHByaXYtPmN1cnZlX2RhdGEtPmRhdGEgKyBwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzOyBpKyspIHsKIAkJaWYgKCooKF9fbGUxNiAqKWVudHJ5KSAhPSBmcmVxKSB7Ci0JCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKLQkJCWVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCi0JCQkJIHByaXYtPmN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwkJCWVudHJ5ICs9IHByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemU7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOwotCQljaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlID0gODsKLQkJbWVtc2V0KGNoYW4tPmN1cnZlX2RhdGEsIDAsIHNpemVvZigqY2hhbi0+Y3VydmVfZGF0YSkpOwotCQltZW1jcHkoY2hhbi0+Y3VydmVfZGF0YSwgZW50cnksCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKgotCQkgICAgICAgbWluKCh1OCk4LCBwcml2LT5jdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwpKTsKKwkJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJCW1lbWNweSgmYm9keS0+bG9uZ2Jvdy5jdXJ2ZV9kYXRhLAorCQkJCSh2b2lkICopIGVudHJ5ICsgc2l6ZW9mKF9fbGUxNiksCisJCQkJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9ICZib2R5LT5ub3JtYWw7CisJCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQorCQkJCSh2b2lkICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7CisKKwkJCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOworCQkJY2hhbi0+cGFfcG9pbnRzX3Blcl9jdXJ2ZSA9IDg7CisJCQltZW1zZXQoY2hhbi0+Y3VydmVfZGF0YSwgMCwgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSk7CisJCQltZW1jcHkoY2hhbi0+Y3VydmVfZGF0YSwgZW50cnksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICoKKwkJCSAgICAgICBtaW4oKHU4KTgsIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCkpOworCQl9CiAJCWJyZWFrOwogCX0KKwlpZiAoaSA9PSBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzKQorCQlnb3RvIGVycjsKIAotCWlmIChwcml2LT5md192YXIgPCAweDUwMCkgewotCQljaGFuLT52MV9yc3NpLm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKLQkJY2hhbi0+djFfcnNzaS5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7Ci0JfSBlbHNlIHsKLQkJY2hhbi0+djIucnNzaS5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7Ci0JCWNoYW4tPnYyLnJzc2kuYWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOwotCQljaGFuLT52Mi5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOwotCQltZW1zZXQoY2hhbi0+djIucnRzX3JhdGVzLCAwLCA4KTsKKwlpZiAoKHByaXYtPmZ3X3ZhciA+PSAweDUwMCkgJiYgKHByaXYtPmZ3X3ZhciA8IDB4NTA5KSkgeworCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOworCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKKwkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7CiAJfQorCisJcnNzaSA9IChzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKKwlyc3NpLT5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7CisJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCS8qIExvbmdib3cgZnJvbnRlbmQgbmVlZHMgZXZlciBtb3JlICovCisJCXJzc2kgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7CisJCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubG9uZ2Jvd191bmtuKTsKKwkJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3VuazIpOworCX0KKworCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpIHsKKwkJcmF0ZSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJhdGUpKTsKKwkJcmF0ZS0+YmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlLT5ydHNfcmF0ZXMpOyBpKyspCisJCQlyYXRlLT5ydHNfcmF0ZXNbaV0gPSBpOworCX0KKworCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZigqaGRyKSk7CisKIAlwcml2LT50eChkZXYsIHNrYik7CiAJcmV0dXJuIDA7CiAKQEAgLTE2MzEsMjMgKzE4NzEsMjIgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBwNTRfc2V0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgbW9kZSwgaW50IGxpbmssIGludCBhY3QpCitzdGF0aWMgaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X2xlZCAqbGVkOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCkgKwotCQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwJUDU0X0NPTlRST0xfVFlQRV9MRUQsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqbGVkKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX0xFRCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGVkID0gKHN0cnVjdCBwNTRfbGVkICopc2tiX3B1dChza2IsIHNpemVvZigqbGVkKSk7Ci0JbGVkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JbGVkLT5sZWRfcGVybWFuZW50ID0gY3B1X3RvX2xlMTYobGluayk7Ci0JbGVkLT5sZWRfdGVtcG9yYXJ5ID0gY3B1X3RvX2xlMTYoYWN0KTsKLQlsZWQtPmR1cmF0aW9uID0gY3B1X3RvX2xlMTYoMTAwMCk7CisJbGVkID0gKHN0cnVjdCBwNTRfbGVkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmxlZCkpOworCWxlZC0+ZmxhZ3MgPSBjcHVfdG9fbGUxNigweDAwMDMpOworCWxlZC0+bWFza1swXSA9IGxlZC0+bWFza1sxXSA9IGNwdV90b19sZTE2KHByaXYtPnNvZnRsZWRfc3RhdGUpOworCWxlZC0+ZGVsYXlbMF0gPSBjcHVfdG9fbGUxNigxKTsKKwlsZWQtPmRlbGF5WzFdID0gY3B1X3RvX2xlMTYoMCk7CiAJcHJpdi0+dHgoZGV2LCBza2IpOwogCXJldHVybiAwOwogfQpAQCAtMTY2Niw5ICsxOTA1LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfZWRjZiAqZWRjZjsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCplZGNmKSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLCBQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqZWRjZiksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2OTIsNiArMTkzMCw0MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHA1NF9zZXRfcHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHA1NF9wc20gKnBzbTsKKwl1MTYgbW9kZTsKKwlpbnQgaTsKKworCWlmIChkZXYtPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKKwkJbW9kZSA9IFA1NF9QU00gfCBQNTRfUFNNX0RUSU0gfCBQNTRfUFNNX01DQkM7CisJZWxzZQorCQltb2RlID0gUDU0X1BTTV9DQU07CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcHNtKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1BTTSwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcHNtID0gKHN0cnVjdCBwNTRfcHNtICopc2tiX3B1dChza2IsIHNpemVvZigqcHNtKSk7CisJcHNtLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJcHNtLT5haWQgPSBjcHVfdG9fbGUxNihwcml2LT5haWQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBzbS0+aW50ZXJ2YWxzKTsgaSsrKSB7CisJCXBzbS0+aW50ZXJ2YWxzW2ldLmludGVydmFsID0KKwkJCWNwdV90b19sZTE2KGRldi0+Y29uZi5saXN0ZW5faW50ZXJ2YWwpOworCQlwc20tPmludGVydmFsc1tpXS5wZXJpb2RzID0gY3B1X3RvX2xlMTYoMSk7CisJfQorCisJcHNtLT5iZWFjb25fcnNzaV9za2lwX21heCA9IDYwOworCXBzbS0+cnNzaV9kZWx0YV90aHJlc2hvbGQgPSAwOworCXBzbS0+bnIgPSAwOworCisJcHJpdi0+dHgoZGV2LCBza2IpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcDU0X2JlYWNvbl90aW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKgpAQCAtMTc5Niw2ICsyMDcwLDkgQEAKIAogCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOwogCisJcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7CisJZXJyID0gcDU0X3NldF9sZWRzKGRldik7CisKIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiBlcnI7CkBAIC0xODA4LDYgKzIwODUsOSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOworCXA1NF9zZXRfbGVkcyhkZXYpOworCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKIAlpZiAocHJpdi0+Y2FjaGVkX2JlYWNvbikKIAkJcDU0X3R4X2NhbmNlbChkZXYsIHByaXYtPmNhY2hlZF9iZWFjb24pOwpAQCAtMTg0NSw3ICsyMTI1LDYgQEAKIAogCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAlwNTRfc2V0dXBfbWFjKGRldik7Ci0JcDU0X3NldF9sZWRzKGRldiwgMSwgMCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODQsNiArMjE2MywxMSBAQAogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCXJldCA9IHA1NF9zZXRfcHMoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KIAogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CkBAIC0xOTIwLDggKzIyMDQsNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gcDU0X3NldF9sZWRzKGRldiwgMSwgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSwgMCk7Ci0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xOTM1LDEyICsyMjE3LDExIEBACiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAKIAkqdG90YWxfZmxhZ3MgJj0gRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCSgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpID8KLQkJCQlGSUZfRkNTRkFJTCA6IDA7CisJCQlGSUZfT1RIRVJfQlNTOwogCiAJcHJpdi0+ZmlsdGVyX2ZsYWdzID0gKnRvdGFsX2ZsYWdzOwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUykpCiAJCXA1NF9zZXR1cF9tYWMoZGV2KTsKIH0KIApAQCAtMTk2NywxMCArMjI0OCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X3hib3dfc3ludGggKnhib3c7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdykgKwotCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkciksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywKLQkJCSAgICBHRlBfS0VSTkVMKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdyksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTk5LDcgKzIyNzgsNyBAQAogCSAqICAgICAgMi4gY2FuY2VsIHN0dWNrIGZyYW1lcyAvIHJlc2V0IHRoZSBkZXZpY2UgaWYgbmVjZXNzYXJ5LgogCSAqLwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfc3RhdGlzdGljcyksCiAJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKQEAgLTIwMjIsOCArMjMwMSw4IEBACiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAKLQltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0c1s0XSwgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKLQorCW1lbWNweShzdGF0cywgJnByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9EQVRBXSwKKwkgICAgICAgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA1OSw3ICsyMzM4LDcgQEAKIH0KIAogc3RhdGljIGludCBwNTRfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICAgY29uc3QgdTggKmxvY2FsX2FkZHJlc3MsIGNvbnN0IHU4ICphZGRyZXNzLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKQEAgLTIxMTAsOSArMjM4OSw4IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnJ4a2V5KSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLAlQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLAotCQkJR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnJ4a2V5KSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewogCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIxMjMsOCArMjQwMSw4IEBACiAJcnhrZXktPmVudHJ5ID0ga2V5LT5rZXlpZHg7CiAJcnhrZXktPmtleV9pZCA9IGtleS0+a2V5aWR4OwogCXJ4a2V5LT5rZXlfdHlwZSA9IGFsZ287Ci0JaWYgKGFkZHJlc3MpCi0JCW1lbWNweShyeGtleS0+bWFjLCBhZGRyZXNzLCBFVEhfQUxFTik7CisJaWYgKHN0YSkKKwkJbWVtY3B5KHJ4a2V5LT5tYWMsIHN0YS0+YWRkciwgRVRIX0FMRU4pOwogCWVsc2UKIAkJbWVtc2V0KHJ4a2V5LT5tYWMsIH4wLCBFVEhfQUxFTik7CiAJaWYgKGtleS0+YWxnICE9IEFMR19US0lQKSB7CkBAIC0yMTQyLDYgKzI0MjAsOTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCitzdGF0aWMgdm9pZCBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBwNTRfbGVkX2RldiAqbGVkID0gY29udGFpbmVyX29mKGxlZF9kZXYsIHN0cnVjdCBwNTRfbGVkX2RldiwKKwkJCQkJICAgICAgIGxlZF9kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGxlZC0+aHdfZGV2OworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwkvKiBEb24ndCB0b2dnbGUgdGhlIExFRCwgd2hlbiB0aGUgZGV2aWNlIGlzIGRvd24uICovCisJaWYgKHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCisJCXJldHVybiA7CisKKwlpZiAoYnJpZ2h0bmVzcyAhPSBMRURfT0ZGKQorCQlwcml2LT5zb2Z0bGVkX3N0YXRlIHw9IEJJVChsZWQtPmluZGV4KTsKKwllbHNlCisJCXByaXYtPnNvZnRsZWRfc3RhdGUgJj0gfkJJVChsZWQtPmluZGV4KTsKKworCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOworCWlmIChlcnIgJiYgbmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gdXBkYXRlICVzIExFRC5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBsZWRfZGV2LT5uYW1lKTsKK30KKworc3RhdGljIGludCBwNTRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVkX2luZGV4LAorCQkJICAgIGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCWlmIChsZWQtPnJlZ2lzdGVyZWQpCisJCXJldHVybiAtRUVYSVNUOworCisJc25wcmludGYobGVkLT5uYW1lLCBzaXplb2YobGVkLT5uYW1lKSwgInA1NC0lczo6JXMiLAorCQkgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7CisJbGVkLT5od19kZXYgPSBkZXY7CisJbGVkLT5pbmRleCA9IGxlZF9pbmRleDsKKwlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0OworCisJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2RldihkZXYtPndpcGh5KSwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRC5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBuYW1lKTsKKwllbHNlCisJCWxlZC0+cmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA1NF9pbml0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwkvKgorCSAqIFRPRE86CisJICogRmlndXJlIG91dCBpZiB0aGUgRUVQUk9NIGNvbnRhaW5zIHNvbWUgaGludHMgYWJvdXQgdGhlIG51bWJlcgorCSAqIG9mIGF2YWlsYWJsZS9wcm9ncmFtbWFibGUgTEVEcyBvZiB0aGUgZGV2aWNlLgorCSAqIEJ1dCBmb3Igbm93LCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZSB0d28gcHJvZ3JhbW1hYmxlIExFRHMuCisJICovCisKKwllcnIgPSBwNTRfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPmFzc29jX2xlZCwgMCwgImFzc29jIiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKGRldikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwNTRfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPnR4X2xlZCwgMSwgInR4IiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGRldikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwNTRfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChwcml2LT50eF9sZWQucmVnaXN0ZXJlZCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnByaXYtPnR4X2xlZC5sZWRfZGV2KTsKKwlpZiAocHJpdi0+YXNzb2NfbGVkLnJlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT5hc3NvY19sZWQubGVkX2Rldik7Cit9CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHA1NF9vcHMgPSB7CiAJLnR4CQkJPSBwNTRfdHgsCiAJLnN0YXJ0CQkJPSBwNTRfc3RhcnQsCkBAIC0yMTc1LDYgKzI1NDMsOCBAQAogCXByaXYtPmJhc2ljX3JhdGVfbWFzayA9IDB4MTVmOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4X3F1ZXVlKTsKIAlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CisJCSAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgfAogCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwogCkBAIC0yMTg0LDExICsyNTU0LDExIEBACiAJCQkJICAgICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOwogCiAJZGV2LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDsJLyogVE9ETzogZmluZCBhY3R1YWwgdmFsdWUgKi8KLQlwcml2LT50eF9zdGF0c1swXS5saW1pdCA9IDE7CQkvKiBCZWFjb24gcXVldWUgKi8KLQlwcml2LT50eF9zdGF0c1sxXS5saW1pdCA9IDE7CQkvKiBQcm9iZSBxdWV1ZSBmb3IgSFcgc2NhbiAqLwotCXByaXYtPnR4X3N0YXRzWzJdLmxpbWl0ID0gMzsJCS8qIHF1ZXVlIGZvciBNTE1FcyAqLwotCXByaXYtPnR4X3N0YXRzWzNdLmxpbWl0ID0gMzsJCS8qIEJyb2FkY2FzdCAvIE1DIHF1ZXVlICovCi0JcHJpdi0+dHhfc3RhdHNbNF0ubGltaXQgPSA1OwkJLyogRGF0YSAqLworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9CRUFDT05dLmxpbWl0ID0gMTsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfRldTQ0FOXS5saW1pdCA9IDE7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX01HTVRdLmxpbWl0ID0gMzsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQ0FCXS5saW1pdCA9IDM7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0RBVEFdLmxpbWl0ID0gNTsKIAlkZXYtPnF1ZXVlcyA9IDE7CiAJcHJpdi0+bm9pc2UgPSAtOTQ7CiAJLyoKQEAgLTIyMTIsMTIgKzI1ODIsMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9pbml0X2NvbW1vbik7CiAKK2ludCBwNTRfcmVnaXN0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGRldmljZSAqcGRldikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHBkZXYsICJDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlICglZCkuXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCWVyciA9IHA1NF9pbml0X2xlZHMoZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCisJZGV2X2luZm8ocGRldiwgImlzIHJlZ2lzdGVyZWQgYXMgJyVzJ1xuIiwgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfcmVnaXN0ZXJfY29tbW9uKTsKKwogdm9pZCBwNTRfZnJlZV9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCWtmcmVlKHByaXYtPmlxX2F1dG9jYWwpOwogCWtmcmVlKHByaXYtPm91dHB1dF9saW1pdCk7CiAJa2ZyZWUocHJpdi0+Y3VydmVfZGF0YSk7CisKKwkjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKwlwNTRfdW5yZWdpc3Rlcl9sZWRzKGRldik7CisJI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwNTRfZnJlZV9jb21tb24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKaW5kZXggZjU3MjlkZS4uNzVlYWQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaApAQCAtMjYsMTIgKzI2LDE3IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9NQVNLCQkweDAwMDcKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0RVRVRURTMJMHgwMDAxCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9EVUVUVEUyCTB4MDAwMgorI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRlJJU0JFRQkweDAwMDMKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX1hCT1cJCTB4MDAwNAorI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVwkweDAwMDUKICNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9NQVNLCQkweDAwMTgKICNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9QQV9ERVRFQ1RPUgkweDAwMDAKICNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9ESVNBQkxFRAkweDAwMDgKICNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9aSUYJCTB4MDAxMAogI2RlZmluZSBQRFJfU1lOVEhfRkFBX1NXSVRDSF9NQVNLCTB4MDAyMAotI2RlZmluZSBQRFJfU1lOVEhfRkFBX1NXSVRDSF9FTkFCTEVECTB4MDAwMQorI2RlZmluZSBQRFJfU1lOVEhfRkFBX1NXSVRDSF9FTkFCTEVECTB4MDAyMAogI2RlZmluZSBQRFJfU1lOVEhfMjRfR0haX01BU0sJCTB4MDA0MAogI2RlZmluZSBQRFJfU1lOVEhfMjRfR0haX0RJU0FCTEVECTB4MDA0MAogI2RlZmluZSBQRFJfU1lOVEhfNV9HSFpfTUFTSwkJMHgwMDgwCkBAIC0xMjUsOSArMTMwLDEzIEBACiAJdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgeworCV9fbGUxNiBpcV9wYXJhbVs0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgewogICAgICAgICBfX2xlMTYgZnJlcTsKLSAgICAgICAgX19sZTE2IGlxX3BhcmFtWzRdOworCXN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSBwYXJhbXM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCB7CkBAIC0xODAsNiArMTg5LDM1IEBACiAJX19sZTE2IGFkZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgcGRhX2NvdW50cnkgeworCXU4IHJlZ2RvbWFpbjsKKwl1OCBhbHBoYTJbMl07CisJdTggZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIFdhcm5pbmc6IExvbmdib3cncyBzdHJ1Y3R1cmVzIGFyZSBib2d1cy4KKyAqLworc3RydWN0IHA1NF9jaGFubmVsX291dHB1dF9saW1pdF9sb25nYm93IHsKKwlfX2xlMTYgcmZfcG93ZXJfcG9pbnRzWzEyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlX2xvbmdib3cgeworCV9fbGUxNiByZl9wb3dlcjsKKwlfX2xlMTYgcGFfZGV0ZWN0b3I7CisJc3RydWN0IHsKKwkJX19sZTE2IGRhdGFbNF07CisJfSBwb2ludHNbM10gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgeworCV9fbGUxNiBlbnRyaWVzOworCV9fbGUxNiBlbnRyeV9zaXplOworCV9fbGUxNiBvZmZzZXQ7CisJX19sZTE2IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qCiAgKiB0aGlzIGRlZmluZXMgdGhlIFBEUiBjb2RlcyB1c2VkIHRvIGJ1aWxkIFBEQXMgYXMgZGVmaW5lZCBpbiBkb2N1bWVudAogICogbnVtYmVyIDU1MzE1NS4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWlycm9ycyB2ZXJzaW9uIDEuMSBvZiB0aGUKQEAgLTIyNSw4ICsyNjMsMTMgQEAKIC8qIHJlc2VydmVkIHJhbmdlICgweDIwMDAgLSAweDdmZmYpICovCiAKIC8qIGN1c3RvbWVyIHJhbmdlICgweDgwMDAgLSAweGZmZmYpICovCi0jZGVmaW5lIFBEUl9CQVNFQkFORF9SRUdJU1RFUlMJCQkweDgwMDAKLSNkZWZpbmUgUERSX1BFUl9DSEFOTkVMX0JBU0VCQU5EX1JFR0lTVEVSUwkweDgwMDEKKyNkZWZpbmUgUERSX0JBU0VCQU5EX1JFR0lTVEVSUwkJCQkweDgwMDAKKyNkZWZpbmUgUERSX1BFUl9DSEFOTkVMX0JBU0VCQU5EX1JFR0lTVEVSUwkJMHg4MDAxCisKKy8qIHVzZWQgYnkgb3VyIG1vZGlmaWNhdGVkIGVlcHJvbSBpbWFnZSAqLworI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT00JCTB4REVBRAorI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NCTB4QkVFRgorI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NCQkweEIwNUQKIAogLyogUERSIGRlZmluaXRpb25zIGZvciBkZWZhdWx0IGNvdW50cnkgJiBjb3VudHJ5IGxpc3QgKi8KICNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9DT0RFCQkweDgwCkBAIC0yNDEsMTIgKzI4NCw2IEBACiAjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SX09VVERPT1IJMHgzMAogI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lOREVYCQkweDBGCiAKLS8qIHN0b3JlZCBpbiBza2ItPmNiICovCi1zdHJ1Y3QgbWVtcmVjb3JkIHsKLQl1MzIgc3RhcnRfYWRkcjsKLQl1MzIgZW5kX2FkZHI7Ci19OwotCiBzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2IHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC0zMjksNyArMzY2LDcgQEAKIAl1OCBwYWRkaW5nOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLWVudW0gIHA1NF90eF9kYXRhX2NyeXB0IHsKK2VudW0gcDU0X3R4X2RhdGFfY3J5cHQgewogCVA1NF9DUllQVE9fTk9ORSA9IDAsCiAJUDU0X0NSWVBUT19XRVAsCiAJUDU0X0NSWVBUT19US0lQLApAQCAtMzQwLDYgKzM3NywyMyBAQAogCVA1NF9DUllQVE9fQUVTQ0NNUAogfTsKIAorZW51bSBwNTRfdHhfZGF0YV9xdWV1ZSB7CisJUDU0X1FVRVVFX0JFQUNPTgk9IDAsCisJUDU0X1FVRVVFX0ZXU0NBTgk9IDEsCisJUDU0X1FVRVVFX01HTVQJCT0gMiwKKwlQNTRfUVVFVUVfQ0FCCQk9IDMsCisJUDU0X1FVRVVFX0RBVEEJCT0gNCwKKworCVA1NF9RVUVVRV9BQ19OVU0JPSA0LAorCVA1NF9RVUVVRV9BQ19WTwkJPSA0LAorCVA1NF9RVUVVRV9BQ19WSQkJPSA1LAorCVA1NF9RVUVVRV9BQ19CRQkJPSA2LAorCVA1NF9RVUVVRV9BQ19CSwkJPSA3LAorCisJLyoga2VlcCBsYXN0ICovCisJUDU0X1FVRVVFX05VTQkJPSA4LAorfTsKKwogc3RydWN0IHA1NF90eF9kYXRhIHsKIAl1OCByYXRlc2V0WzhdOwogCXU4IHJ0c19yYXRlX2lkeDsKQEAgLTM1MSw5ICs0MDUsMTggQEAKIAl1OCBiYWNrbG9nOwogCV9fbGUxNiBkdXJhdGlvbnNbNF07CiAJdTggdHhfYW50ZW5uYTsKLQl1OCBvdXRwdXRfcG93ZXI7Ci0JdTggY3RzX3JhdGU7Ci0JdTggdW5hbGxvYzJbM107CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggY3RzX3JhdGU7CisJCQlfX2xlMTYgb3V0cHV0X3Bvd2VyOworCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGxvbmdib3c7CisJCXN0cnVjdCB7CisJCQl1OCBvdXRwdXRfcG93ZXI7CisJCQl1OCBjdHNfcmF0ZTsKKwkJCXU4IHVuYWxsb2M7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIG5vcm1hbDsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwl1OCB1bmFsbG9jMlsyXTsKIAl1OCBhbGlnblswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC00MTQsMTEgKzQ3NywxNCBAQAogI2RlZmluZSBQNTRfU0NBTl9BQ1RJVkUgQklUKDIpCiAjZGVmaW5lIFA1NF9TQ0FOX0ZJTFRFUiBCSVQoMykKIAotc3RydWN0IHA1NF9zY2FuIHsKK3N0cnVjdCBwNTRfc2Nhbl9oZWFkIHsKIAlfX2xlMTYgbW9kZTsKIAlfX2xlMTYgZHdlbGw7Ci0JdTggcGFkZGluZzFbMjBdOwotCXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSBpcV9hdXRvY2FsOworCXU4IHNjYW5fcGFyYW1zWzIwXTsKKwlfX2xlMTYgZnJlcTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcDU0X3NjYW5fYm9keSB7CiAJdTggcGFfcG9pbnRzX3Blcl9jdXJ2ZTsKIAl1OCB2YWxfYmFya2VyOwogCXU4IHZhbF9icHNrOwpAQCAtNDMwLDI1ICs0OTYsMjggQEAKIAl1OCBkdXBfcXBzazsKIAl1OCBkdXBfMTZxYW07CiAJdTggZHVwXzY0cWFtOwotCXVuaW9uIHsKLQkJc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSB2MV9yc3NpOwotCi0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgYmFzaWNfcmF0ZV9tYXNrOwotCQkJdTggcnRzX3JhdGVzWzhdOwotCQkJc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSByc3NpOwotCQl9IHYyIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIFA1NF9TQ0FOX1YxX0xFTiAweDcwCi0jZGVmaW5lIFA1NF9TQ0FOX1YyX0xFTiAweDdjCitzdHJ1Y3QgcDU0X3NjYW5fYm9keV9sb25nYm93IHsKKwlzdHJ1Y3QgcDU0X2NoYW5uZWxfb3V0cHV0X2xpbWl0X2xvbmdib3cgcG93ZXJfbGltaXRzOworCXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGVfbG9uZ2JvdyBjdXJ2ZV9kYXRhWzhdOworCV9fbGUxNiB1bmtuWzZdOwkJLyogbWF5YmUgbW9yZSBwb3dlcl9saW1pdHMgb3IgcmF0ZV9tYXNrICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordW5pb24gcDU0X3NjYW5fYm9keV91bmlvbiB7CisJc3RydWN0IHA1NF9zY2FuX2JvZHkgbm9ybWFsOworCXN0cnVjdCBwNTRfc2Nhbl9ib2R5X2xvbmdib3cgbG9uZ2JvdzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcDU0X3NjYW5fdGFpbF9yYXRlIHsKKwlfX2xlMzIgYmFzaWNfcmF0ZV9tYXNrOworCXU4IHJ0c19yYXRlc1s4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcDU0X2xlZCB7Ci0JX19sZTE2IG1vZGU7Ci0JX19sZTE2IGxlZF90ZW1wb3Jhcnk7Ci0JX19sZTE2IGxlZF9wZXJtYW5lbnQ7Ci0JX19sZTE2IGR1cmF0aW9uOworCV9fbGUxNiBmbGFnczsKKwlfX2xlMTYgbWFza1syXTsKKwlfX2xlMTYgZGVsYXlbMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHA1NF9lZGNmIHsKQEAgLTUxMSw2ICs1ODAsNyBAQAogCV9fbGUxNiBwZXJpb2RzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgUDU0X1BTTV9DQU0JCQkwCiAjZGVmaW5lIFA1NF9QU00JCQkJQklUKDApCiAjZGVmaW5lIFA1NF9QU01fRFRJTQkJCUJJVCgxKQogI2RlZmluZSBQNTRfUFNNX01DQkMJCQlCSVQoMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwppbmRleCBhYTM2N2EwLi5lMzU2OWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCkBAIC03OSw2ICs3OSwxMiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAocHJpdi0+Y29tbW9uLmZ3X2ludGVyZmFjZSAhPSBGV19MTTg2KSB7CisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgIndyb25nIGZpcm13YXJlLCAiCisJCQkicGxlYXNlIGdldCBhIExNODYoUENJKSBmaXJtd2FyZSBhIHRyeSBhZ2Fpbi5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlkYXRhID0gKF9fbGUzMiAqKSBwcml2LT5maXJtd2FyZS0+ZGF0YTsKIAlyZW1haW5zID0gcHJpdi0+ZmlybXdhcmUtPnNpemU7CiAJZGV2aWNlX2FkZHIgPSBJU0wzOFhYX0RFVl9GSVJNV0FSRV9BRERSOwpAQCAtNDA3LDggKzQxMyw3IEBACiAJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmcDU0cF9pbnRlcnJ1cHQsCiAJCQkgIElSUUZfU0hBUkVELCAicDU0cGNpIiwgZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNDcwLDMwICs0NzUsMjYgQEAKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IGVuYWJsZSBuZXcgUENJIGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBuZXcgUENJIGRldmljZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJbWVtX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAJaWYgKG1lbV9sZW4gPCBzaXplb2Yoc3RydWN0IHA1NHBfY3NyKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBUb28gc2hvcnQgUENJIHJlc291cmNlc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVG9vIHNob3J0IFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9kaXNhYmxlX2RldjsKIAl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJwNTRwY2kiKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iKTsKIAkJZ290byBlcnJfZGlzYWJsZV9kZXY7CiAJfQogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spIHx8CiAJICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7CiAJCWdvdG8gZXJyX2ZyZWVfcmVnOwogCX0KIApAQCAtNTA1LDggKzUwNiw3IEBACiAKIAlkZXYgPSBwNTRfaW5pdF9jb21tb24oc2l6ZW9mKCpwcml2KSk7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWVfcmVnOwogCX0KQEAgLTUxOSwxNyArNTE5LDE1IEBACiAKIAlwcml2LT5tYXAgPSBpb3JlbWFwKG1lbV9hZGRyLCBtZW1fbGVuKTsKIAlpZiAoIXByaXYtPm1hcCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3QgbWFwIGRldmljZSBtZW1vcnlcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCWVyciA9IC1FSU5WQUw7CS8vIFRPRE86IHVzZSBhIGJldHRlciBlcnJvciBjb2RlPworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIGRldmljZSBtZW1vcnlcbiIpOworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlX2RldjsKIAl9CiAKIAlwcml2LT5yaW5nX2NvbnRyb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzaXplb2YoKnByaXYtPnJpbmdfY29udHJvbCksCiAJCQkJCQkgICZwcml2LT5yaW5nX2NvbnRyb2xfZG1hKTsKIAlpZiAoIXByaXYtPnJpbmdfY29udHJvbCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3QgYWxsb2NhdGUgcmluZ3NcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSByaW5nc1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQpAQCAtNTQzLDggKzU0MSw3IEBACiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcHJpdi0+ZmlybXdhcmUsICJpc2wzODg2cGNpIiwKIAkJCSAgICAgICAmcHJpdi0+cGRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IGNhbm5vdCBmaW5kIGZpcm13YXJlICIKLQkJCSIoaXNsMzg4NnBjaSlcbiIsIHBjaV9uYW1lKHByaXYtPnBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGZpbmQgZmlybXdhcmUgKGlzbDM4ODZwY2kpXG4iKTsKIAkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcHJpdi0+ZmlybXdhcmUsICJpc2wzODg2IiwKIAkJCQkgICAgICAgJnByaXYtPnBkZXYtPmRldik7CiAJCWlmIChlcnIpCkBAIC01NTksMTIgKzU1Niw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9jb21tb247CiAKLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCByZWdpc3RlciBuZXRkZXZpY2VcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJZXJyID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsICZwZGV2LT5kZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOwotCX0KIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyMjJhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwpAQCAtMCwwICsxLDc2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgMjAwOCAgICAgICBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGEgcG9ydCBmcm9tIHN0bGM0NXh4OgorICoJQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlICJwNTRzcGkuaCIKKyNpbmNsdWRlICJwNTRzcGlfZWVwcm9tLmgiCisjaW5jbHVkZSAicDU0LmgiCisKKyNpbmNsdWRlICJwNTRjb21tb24uaCIKKworTU9EVUxFX0ZJUk1XQVJFKCIzODI2LmFybSIpOworTU9EVUxFX0FMSUFTKCJzdGxjNDV4eCIpOworCisvKgorICogZ3Bpb3Mgc2hvdWxkIGJlIGhhbmRsZWQgaW4gYm9hcmQgZmlsZXMgYW5kIHByb3ZpZGVkIHZpYSBwbGF0Zm9ybSBkYXRhLAorICogYnV0IGJlY2F1c2UgaXQncyBjdXJyZW50bHkgaW1wb3NzaWJsZSBmb3IgcDU0c3BpIHRvIGhhdmUgYSBoZWFkZXIgZmlsZQorICogaW4gaW5jbHVkZS9saW51eCwgbGV0J3MgdXNlIG1vZHVsZSBwYXJhbWF0ZXJzIGZvciBub3cKKyAqLworCitzdGF0aWMgaW50IHA1NHNwaV9ncGlvX3Bvd2VyID0gOTc7Cittb2R1bGVfcGFyYW0ocDU0c3BpX2dwaW9fcG93ZXIsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHA1NHNwaV9ncGlvX3Bvd2VyLCAiZ3BpbyBudW1iZXIgZm9yIHBvd2VyIGxpbmUiKTsKKworc3RhdGljIGludCBwNTRzcGlfZ3Bpb19pcnEgPSA4NzsKK21vZHVsZV9wYXJhbShwNTRzcGlfZ3Bpb19pcnEsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHA1NHNwaV9ncGlvX2lycSwgImdwaW8gbnVtYmVyIGZvciBpcnEgbGluZSIpOworCitzdGF0aWMgdm9pZCBwNTRzcGlfc3BpX3JlYWQoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkcmVzcywKKwkJCSAgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMl07CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJX19sZTE2IGFkZHI7CisKKwkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCisJYWRkciA9IGNwdV90b19sZTE2KGFkZHJlc3MgPDwgOCB8IFNQSV9BRFJTX1JFQURfQklUXzE1KTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCisJdFswXS50eF9idWYgPSAmYWRkcjsKKwl0WzBdLmxlbiA9IHNpemVvZihhZGRyKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJdFsxXS5yeF9idWYgPSBidWY7CisJdFsxXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCXNwaV9zeW5jKHByaXYtPnNwaSwgJm0pOworfQorCisKK3N0YXRpYyB2b2lkIHA1NHNwaV9zcGlfd3JpdGUoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkcmVzcywKKwkJCSAgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFszXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwlfX2xlMTYgYWRkcjsKKworCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KKwlhZGRyID0gY3B1X3RvX2xlMTYoYWRkcmVzcyA8PCA4KTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCisJdFswXS50eF9idWYgPSAmYWRkcjsKKwl0WzBdLmxlbiA9IHNpemVvZihhZGRyKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJdFsxXS50eF9idWYgPSBidWY7CisJdFsxXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCWlmIChsZW4gJSAyKSB7CisJCV9fbGUxNiBsYXN0X3dvcmQ7CisJCWxhc3Rfd29yZCA9IGNwdV90b19sZTE2KCgodTggKilidWYpW2xlbiAtIDFdKTsKKworCQl0WzJdLnR4X2J1ZiA9ICZsYXN0X3dvcmQ7CisJCXRbMl0ubGVuID0gc2l6ZW9mKGxhc3Rfd29yZCk7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzJdLCAmbSk7CisJfQorCisJc3BpX3N5bmMocHJpdi0+c3BpLCAmbSk7Cit9CisKK3N0YXRpYyB1MTYgcDU0c3BpX3JlYWQxNihzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyKQoreworCV9fbGUxNiB2YWw7CisKKwlwNTRzcGlfc3BpX3JlYWQocHJpdiwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KHZhbCk7Cit9CisKK3N0YXRpYyB1MzIgcDU0c3BpX3JlYWQzMihzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyKQoreworCV9fbGUzMiB2YWw7CisKKwlwNTRzcGlfc3BpX3JlYWQocHJpdiwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOworCisJcmV0dXJuIGxlMzJfdG9fY3B1KHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwNTRzcGlfd3JpdGUxNihzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyLCBfX2xlMTYgdmFsKQoreworCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcDU0c3BpX3dyaXRlMzIoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTggYWRkciwgX19sZTMyIHZhbCkKK3sKKwlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKK30KKworc3RydWN0IHA1NHNwaV9zcGlfcmVnIHsKKwl1MTYgYWRkcmVzczsJCS8qIF9fbGUxNiA/ICovCisJdTE2IGxlbmd0aDsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwNTRzcGlfc3BpX3JlZyBwNTRzcGlfcmVnaXN0ZXJzX2FycmF5W10gPQoreworCXsgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsCTMyLCAiQVJNX0lOVCAgICAgIiB9LAorCXsgU1BJX0FEUlNfQVJNX0lOVF9FTiwJCTMyLCAiQVJNX0lOVF9FTkEgIiB9LAorCXsgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTLAkzMiwgIkhPU1RfSU5UICAgICIgfSwKKwl7IFNQSV9BRFJTX0hPU1RfSU5UX0VOLAkJMzIsICJIT1NUX0lOVF9FTkEiIH0sCisJeyBTUElfQURSU19IT1NUX0lOVF9BQ0ssCTMyLCAiSE9TVF9JTlRfQUNLIiB9LAorCXsgU1BJX0FEUlNfR0VOX1BVUlBfMSwJCTMyLCAiR1AxX0NPTU0gICAgIiB9LAorCXsgU1BJX0FEUlNfR0VOX1BVUlBfMiwJCTMyLCAiR1AyX0NPTU0gICAgIiB9LAorCXsgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwJMzIsICJERVZfQ1RSTF9TVEEiIH0sCisJeyBTUElfQURSU19ETUFfREFUQSwJCTE2LCAiRE1BX0RBVEEgICAgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsCTE2LCAiRE1BX1dSX0NUUkwgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiwJMTYsICJETUFfV1JfTEVOICAiIH0sCisJeyBTUElfQURSU19ETUFfV1JJVEVfQkFTRSwJMzIsICJETUFfV1JfQkFTRSAiIH0sCisJeyBTUElfQURSU19ETUFfUkVBRF9DVFJMLAkxNiwgIkRNQV9SRF9DVFJMICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9SRUFEX0xFTiwJMTYsICJETUFfUkRfTEVOICAiIH0sCisJeyBTUElfQURSU19ETUFfV1JJVEVfQkFTRSwJMzIsICJETUFfUkRfQkFTRSAiIH0KK307CisKK3N0YXRpYyBpbnQgcDU0c3BpX3dhaXRfYml0KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHUxNiByZWcsIF9fbGUzMiBiaXRzKQoreworCWludCBpOworCV9fbGUzMiBidWZmZXI7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CisJCXA1NHNwaV9zcGlfcmVhZChwcml2LCByZWcsICZidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwkJaWYgKGJ1ZmZlciA9PSBiaXRzKQorCQkJcmV0dXJuIDE7CisKKwkJbXNsZWVwKDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTRzcGlfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgcmV0OworCisJLyogRklYTUU6IHNob3VsZCBkcml2ZXIgdXNlIGl0J3Mgb3duIHN0cnVjdCBkZXZpY2U/ICovCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmcHJpdi0+ZmlybXdhcmUsICIzODI2LmFybSIsICZwcml2LT5zcGktPmRldik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBwNTRfcGFyc2VfZmlybXdhcmUoZGV2LCBwcml2LT5maXJtd2FyZSk7CisJaWYgKHJldCkgeworCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmZpcm13YXJlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTRzcGlfcmVxdWVzdF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICplZXByb207CisJaW50IHJldDsKKworCS8qCisJICogYWxsb3cgdXNlcnMgdG8gY3VzdG9taXplIHRoZWlyIGVlcHJvbS4KKwkgKi8KKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmVlcHJvbSwgIjM4MjYuZWVwcm9tIiwgJnByaXYtPnNwaS0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfaW5mbygmcHJpdi0+c3BpLT5kZXYsICJsb2FkaW5nIGRlZmF1bHQgZWVwcm9tLi4uXG4iKTsKKwkJcmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsICh2b2lkICopIHA1NHNwaV9lZXByb20sCisJCQkJICAgICAgIHNpemVvZihwNTRzcGlfZWVwcm9tKSk7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oJnByaXYtPnNwaS0+ZGV2LCAibG9hZGluZyB1c2VyIGVlcHJvbS4uLlxuIik7CisJCXJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCAodm9pZCAqKSBlZXByb20tPmRhdGEsCisJCQkJICAgICAgIChpbnQpZWVwcm9tLT5zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZShlZXByb20pOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHA1NHNwaV91cGxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmd19sZW4sIGZ3X2FkZHI7CisJbG9uZyBfZndfbGVuOworCisJLyogc3RvcCB0aGUgZGV2aWNlICovCisJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwgY3B1X3RvX2xlMTYoCisJCSAgICAgICBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgfAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpKTsKKworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisKKwlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ERVZfQ1RSTF9TVEFULCBjcHVfdG9fbGUxNigKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8CisJCSAgICAgICBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCkpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCWZ3X2FkZHIgPSBJU0wzOFhYX0RFVl9GSVJNV0FSRV9BRERSOworCWZ3X2xlbiA9IHByaXYtPmZpcm13YXJlLT5zaXplOworCisJd2hpbGUgKGZ3X2xlbiA+IDApIHsKKwkJX2Z3X2xlbiA9IG1pbl90KGxvbmcsIGZ3X2xlbiwgU1BJX01BWF9QQUNLRVRfU0laRSk7CisKKwkJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsCisJCQkgICAgICAgY3B1X3RvX2xlMTYoU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRSkpOworCisJCWlmIChwNTRzcGlfd2FpdF9iaXQocHJpdiwgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsCisJCQkJICAgIGNwdV90b19sZTMyKEhPU1RfQUxMT1dFRCkpID09IDApIHsKKwkJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiZndfdXBsb2FkIG5vdCBhbGxvd2VkICIKKwkJCQkidG8gRE1BIHdyaXRlLiIpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKworCQlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ETUFfV1JJVEVfTEVOLAorCQkJICAgICAgIGNwdV90b19sZTE2KF9md19sZW4pKTsKKwkJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsCisJCQkgICAgICAgY3B1X3RvX2xlMzIoZndfYWRkcikpOworCisJCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgU1BJX0FEUlNfRE1BX0RBVEEsCisJCQkJICZwcml2LT5maXJtd2FyZS0+ZGF0YSwgX2Z3X2xlbik7CisKKwkJZndfbGVuIC09IF9md19sZW47CisJCWZ3X2FkZHIgKz0gX2Z3X2xlbjsKKworCQkvKiBGSVhNRTogSSB0aGluayB0aGlzIGRvZXNuJ3Qgd29yayBpZiBmaXJtd2FyZSBpcyBsYXJnZSwKKwkJICogdGhpcyBsb29wIGdvZXMgdG8gc2Vjb25kIHJvdW5kLiBmdy0+ZGF0YSBpcyBub3QKKwkJICogaW5jcmVhc2VkIGF0IGFsbCEgKi8KKwl9CisKKwlCVUdfT04oZndfbGVuICE9IDApOworCisJLyogZW5hYmxlIGhvc3QgaW50ZXJydXB0cyAqLworCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLAorCQkgICAgICAgY3B1X3RvX2xlMzIoU1BJX0hPU1RfSU5UU19ERUZBVUxUKSk7CisKKwkvKiBib290IHRoZSBkZXZpY2UgKi8KKwlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ERVZfQ1RSTF9TVEFULCBjcHVfdG9fbGUxNigKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVCB8CisJCSAgICAgICBTUElfQ1RSTF9TVEFUX1JBTV9CT09UKSk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJcDU0c3BpX3dyaXRlMTYocHJpdiwgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwgY3B1X3RvX2xlMTYoCisJCSAgICAgICBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX1JBTV9CT09UKSk7CisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX3Bvd2VyX29mZihzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCWRpc2FibGVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSkpOworCWdwaW9fc2V0X3ZhbHVlKHA1NHNwaV9ncGlvX3Bvd2VyLCAwKTsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX3Bvd2VyX29uKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJZ3Bpb19zZXRfdmFsdWUocDU0c3BpX2dwaW9fcG93ZXIsIDEpOworCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSk7CisKKwkvKgorCSAqIG5lZWQgdG8gd2FpdCBhIHdoaWxlIGJlZm9yZSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkLCB0aGUgbGVuZ2h0CisJICogaXMganVzdCBhIGd1ZXNzCisJICovCisJbXNsZWVwKDEwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHA1NHNwaV9pbnRfYWNrKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHUzMiB2YWwpCit7CisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRfQUNLLCBjcHVfdG9fbGUzMih2YWwpKTsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX3dha2V1cChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MzIgaW50czsKKworCS8qIHdha2UgdGhlIGNoaXAgKi8KKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19BUk1fSU5URVJSVVBUUywKKwkJICAgICAgIGNwdV90b19sZTMyKFNQSV9UQVJHRVRfSU5UX1dBS0VVUCkpOworCisJLyogQW5kIHdhaXQgZm9yIHRoZSBSRUFEWSBpbnRlcnJ1cHQgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIEhaOworCisJaW50cyA9ICBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJd2hpbGUgKCEoaW50cyAmIFNQSV9IT1NUX0lOVF9SRUFEWSkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQkJZ290byBvdXQ7CisJCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJfQorCisJcDU0c3BpX2ludF9hY2socHJpdiwgU1BJX0hPU1RfSU5UX1JFQURZKTsKKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHA1NHNwaV9zbGVlcChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLAorCQkgICAgICAgY3B1X3RvX2xlMzIoU1BJX1RBUkdFVF9JTlRfU0xFRVApKTsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX2ludF9yZWFkeShzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLCBjcHVfdG9fbGUzMigKKwkJICAgICAgIFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKSk7CisKKwlzd2l0Y2ggKHByaXYtPmZ3X3N0YXRlKSB7CisJY2FzZSBGV19TVEFURV9CT09USU5HOgorCQlwcml2LT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFQURZOworCQljb21wbGV0ZSgmcHJpdi0+ZndfY29tcCk7CisJCWJyZWFrOworCWNhc2UgRldfU1RBVEVfUkVTRVRUSU5HOgorCQlwcml2LT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFQURZOworCQkvKiBUT0RPOiByZWluaXRpYWxpemUgc3RhdGUgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHA1NHNwaV9yeChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdTE2IGxlbjsKKworCXA1NHNwaV93YWtldXAocHJpdik7CisKKwkvKiBkdW1teSByZWFkIHRvIGZsdXNoIFNQSSBETUEgY29udHJvbGxlciBidWcgKi8KKwlwNTRzcGlfcmVhZDE2KHByaXYsIFNQSV9BRFJTX0dFTl9QVVJQXzEpOworCisJbGVuID0gcDU0c3BpX3JlYWQxNihwcml2LCBTUElfQURSU19ETUFfREFUQSk7CisKKwlpZiAobGVuID09IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJyeCByZXF1ZXN0IG9mIHplcm8gYnl0ZXMiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOworCWlmICghc2tiKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiY291bGQgbm90IGFsbG9jIHNrYiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwNTRzcGlfc3BpX3JlYWQocHJpdiwgU1BJX0FEUlNfRE1BX0RBVEEsIHNrYl9wdXQoc2tiLCBsZW4pLCBsZW4pOworCXA1NHNwaV9zbGVlcChwcml2KTsKKworCWlmIChwNTRfcngocHJpdi0+aHcsIHNrYikgPT0gMCkKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IHA1NHNwaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29uZmlnKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb25maWc7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJcXVldWVfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3R4X2ZyYW1lKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IHA1NHNfZG1hX3JlZ3MgZG1hX3JlZ3M7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByZXQgPSAwOworCXUzMiBpbnRzOworCisJcDU0c3BpX3dha2V1cChwcml2KTsKKworCWRtYV9yZWdzLmNtZCA9IGNwdV90b19sZTE2KFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUpOworCWRtYV9yZWdzLmxlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKwlkbWFfcmVncy5hZGRyID0gaGRyLT5yZXFfaWQ7CisKKwlwNTRzcGlfc3BpX3dyaXRlKHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLCAmZG1hX3JlZ3MsCisJCQkgICBzaXplb2YoZG1hX3JlZ3MpKTsKKworCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgU1BJX0FEUlNfRE1BX0RBVEEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJdGltZW91dCA9IGppZmZpZXMgKyAyICogSFo7CisJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1dSX1JFQURZKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJXUl9SRUFEWSB0aW1lb3V0Iik7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJfQorCisJcDU0c3BpX2ludF9hY2socHJpdiwgU1BJX0hPU1RfSU5UX1dSX1JFQURZKTsKKwlwNTRzcGlfc2xlZXAocHJpdik7CisKK291dDoKKwlpZiAoRlJFRV9BRlRFUl9UWChza2IpKQorCQlwNTRfZnJlZV9za2IocHJpdi0+aHcsIHNrYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwNTRzcGlfd3FfdHgoc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgcDU0c190eF9pbmZvICplbnRyeTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKm1pbmZvOworCXN0cnVjdCBwNTRzX3R4X2luZm8gKmRpbmZvOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+dHhfcGVuZGluZykpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KHByaXYtPnR4X3BlbmRpbmcubmV4dCwKKwkJCQkgICBzdHJ1Y3QgcDU0c190eF9pbmZvLCB0eF9saXN0KTsKKworCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+dHhfbGlzdCk7CisKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJCWRpbmZvID0gY29udGFpbmVyX29mKCh2b2lkICopIGVudHJ5LCBzdHJ1Y3QgcDU0c190eF9pbmZvLAorCQkJCSAgICAgdHhfbGlzdCk7CisJCW1pbmZvID0gY29udGFpbmVyX29mKCh2b2lkICopIGRpbmZvLCBzdHJ1Y3QgcDU0X3R4X2luZm8sCisJCQkJICAgICBkYXRhKTsKKwkJaW5mbyA9IGNvbnRhaW5lcl9vZigodm9pZCAqKSBtaW5mbywgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvLAorCQkJCSAgICByYXRlX2RyaXZlcl9kYXRhKTsKKwkJc2tiID0gY29udGFpbmVyX29mKCh2b2lkICopIGluZm8sIHN0cnVjdCBza19idWZmLCBjYik7CisKKwkJcmV0ID0gcDU0c3BpX3R4X2ZyYW1lKHByaXYsIHNrYik7CisKKwkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJcDU0X2ZyZWVfc2tiKHByaXYtPmh3LCBza2IpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKm1pID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKSBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCXN0cnVjdCBwNTRzX3R4X2luZm8gKmRpID0gKHN0cnVjdCBwNTRzX3R4X2luZm8gKikgbWktPmRhdGE7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpkaSkgPiBzaXplb2YoKG1pLT5kYXRhKSkpOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZkaS0+dHhfbGlzdCwgJnByaXYtPnR4X3BlbmRpbmcpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXF1ZXVlX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDU0c19wcml2LCB3b3JrKTsKKwl1MzIgaW50czsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKHByaXYtPmZ3X3N0YXRlID09IEZXX1NUQVRFX09GRiAmJgorCSAgICBwcml2LT5md19zdGF0ZSA9PSBGV19TVEFURV9SRVNFVCkKKwkJZ290byBvdXQ7CisKKwlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpIHsKKwkJcDU0c3BpX2ludF9yZWFkeShwcml2KTsKKwkJcDU0c3BpX2ludF9hY2socHJpdiwgU1BJX0hPU1RfSU5UX1JFQURZKTsKKwl9CisKKwlpZiAocHJpdi0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpCisJCWdvdG8gb3V0OworCisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfVVBEQVRFKSB7CisJCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9VUERBVEUpOworCQlyZXQgPSBwNTRzcGlfcngocHJpdik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1NXX1VQREFURSkgeworCQlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKKwkJcmV0ID0gcDU0c3BpX3J4KHByaXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHA1NHNwaV93cV90eChwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm11dGV4KSkgeworCQlyZXQgPSAtRUlOVFI7CisJCWdvdG8gb3V0OworCX0KKworCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfQk9PVElORzsKKworCXA1NHNwaV9wb3dlcl9vbihwcml2KTsKKworCXJldCA9IHA1NHNwaV91cGxvYWRfZmlybXdhcmUoZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwNTRzcGlfcG93ZXJfb2ZmKHByaXYpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyMDAwKTsKKwl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJnByaXYtPmZ3X2NvbXAsCisJCQkJCQkJICAgIHRpbWVvdXQpOworCWlmICghdGltZW91dCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgImZpcm13YXJlIGJvb3QgZmFpbGVkIik7CisJCXA1NHNwaV9wb3dlcl9vZmYocHJpdik7CisJCXJldCA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdXRleCkpIHsKKwkJcmV0ID0gLUVJTlRSOworCQlwNTRzcGlfcG93ZXJfb2ZmKHByaXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlXQVJOX09OKHByaXYtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXV0ZXgpKSB7CisJCS8qIEZJWE1FOiBob3cgdG8gaGFuZGxlIHRoaXMgZXJyb3I/ICovCisJCXJldHVybjsKKwl9CisKKwlXQVJOX09OKHByaXYtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKKworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPndvcmspOworCisJcDU0c3BpX3Bvd2VyX29mZihwcml2KTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT50eF9wZW5kaW5nKTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlwcml2LT5md19zdGF0ZSA9IEZXX1NUQVRFX09GRjsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcDU0c3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlodyA9IHA1NF9pbml0X2NvbW1vbihzaXplb2YoKnByaXYpKTsKKwlpZiAoIWh3KSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiY291bGQgbm90IGFsbG9jIGllZWU4MDIxMV9odyIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2ID0gaHctPnByaXY7CisJcHJpdi0+aHcgPSBodzsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBwcml2KTsKKwlwcml2LT5zcGkgPSBzcGk7CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSAxNjsKKwlzcGktPm1heF9zcGVlZF9oeiA9IDI0MDAwMDAwOworCisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJzcGlfc2V0dXAgZmFpbGVkIik7CisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCX0KKworCXJldCA9IGdwaW9fcmVxdWVzdChwNTRzcGlfZ3Bpb19wb3dlciwgInA1NHNwaSBwb3dlciIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAicG93ZXIgR1BJTyByZXF1ZXN0IGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3QocDU0c3BpX2dwaW9faXJxLCAicDU0c3BpIGlycSIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiaXJxIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHA1NHNwaV9ncGlvX3Bvd2VyLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChwNTRzcGlfZ3Bpb19pcnEpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSwKKwkJCSAgcDU0c3BpX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInA1NHNwaSIsCisJCQkgIHByaXYtPnNwaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJyZXF1ZXN0X2lycSgpIGZhaWxlZCIpOworCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKwl9CisKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSwKKwkJICAgICBJUlFfVFlQRV9FREdFX1JJU0lORyk7CisKKwlkaXNhYmxlX2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpKTsKKworCUlOSVRfV09SSygmcHJpdi0+d29yaywgcDU0c3BpX3dvcmspOworCWluaXRfY29tcGxldGlvbigmcHJpdi0+ZndfY29tcCk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnR4X3BlbmRpbmcpOworCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnNwaS0+ZGV2KTsKKwlwcml2LT5jb21tb24ub3BlbiA9IHA1NHNwaV9vcF9zdGFydDsKKwlwcml2LT5jb21tb24uc3RvcCA9IHA1NHNwaV9vcF9zdG9wOworCXByaXYtPmNvbW1vbi50eCA9IHA1NHNwaV9vcF90eDsKKworCXJldCA9IHA1NHNwaV9yZXF1ZXN0X2Zpcm13YXJlKGh3KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisKKwlyZXQgPSBwNTRzcGlfcmVxdWVzdF9lZXByb20oaHcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCisJcmV0ID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihodywgJnByaXYtPnNwaS0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9jb21tb246CisJcDU0X2ZyZWVfY29tbW9uKHByaXYtPmh3KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwNTRzcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCisJZnJlZV9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSwgc3BpKTsKKworCWdwaW9fZnJlZShwNTRzcGlfZ3Bpb19wb3dlcik7CisJZ3Bpb19mcmVlKHA1NHNwaV9ncGlvX2lycSk7CisJcmVsZWFzZV9maXJtd2FyZShwcml2LT5maXJtd2FyZSk7CisKKwltdXRleF9kZXN0cm95KCZwcml2LT5tdXRleCk7CisKKwlwNTRfZnJlZV9jb21tb24ocHJpdi0+aHcpOworCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwNTRzcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS8qIHVzZSBjeDMxMTB4IG5hbWUgYmVjYXVzZSBib2FyZC1uODAwLmMgdXNlcyB0aGF0IGZvciB0aGUKKwkJICogU1BJIHBvcnQgKi8KKwkJLm5hbWUJCT0gImN4MzExMHgiLAorCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCisJLnByb2JlCQk9IHA1NHNwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHA1NHNwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcDU0c3BpX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmcDU0c3BpX2RyaXZlcik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIGRyaXZlcjogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcDU0c3BpX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnA1NHNwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwNTRzcGlfaW5pdCk7Cittb2R1bGVfZXhpdChwNTRzcGlfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmJlOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBhIHBvcnQgZnJvbSBzdGxjNDV4eDoKKyAqCUNvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgUDU0U1BJX0gKKyNkZWZpbmUgUDU0U1BJX0gKKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAicDU0LmgiCisKKy8qIEJpdCAxNSBpcyByZWFkL3dyaXRlIGJpdDsgT04gPSBSRUFELCBPRkYgPSBXUklURSAqLworI2RlZmluZSBTUElfQURSU19SRUFEX0JJVF8xNQkJMHg4MDAwCisKKyNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMJCTB4MDAKKyNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVF9FTgkJMHgwNAorCisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUwkweDA4CisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0VOCQkweDBjCisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0FDSwkJMHgxMAorCisjZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzEJCTB4MTQKKyNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMgkJMHgxOAorCisjZGVmaW5lIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQJCTB4MjYgICAgLyogaGlnaCB3b3JkICovCisKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX0RBVEEJCTB4MjgKKworI2RlZmluZSBTUElfQURSU19ETUFfV1JJVEVfQ1RSTAkJMHgyYworI2RlZmluZSBTUElfQURSU19ETUFfV1JJVEVfTEVOCQkweDJlCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFCQkweDMwCisKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTAkJMHgzNAorI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9MRU4JCTB4MzYKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQkFTRQkJMHgzOAorCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERQkweDgwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQJMHg0MDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QJCTB4MjAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQJMHgxMDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9DUFVfRU4JMHgwODAwCisKKyNkZWZpbmUgU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRQkweDAwMDEKKyNkZWZpbmUgU1BJX0RNQV9SRUFEX0NUUkxfRU5BQkxFCTB4MDAwMQorI2RlZmluZSBIT1NUX0FMTE9XRUQJCQkoMSA8PCA3KQorCisjZGVmaW5lIFNQSV9USU1FT1VUCQkJMTAwICAgICAgICAgLyogbXNlYyAqLworCisjZGVmaW5lIFNQSV9NQVhfVFhfUEFDS0VUUwkJMzIKKworI2RlZmluZSBTUElfTUFYX1BBQ0tFVF9TSVpFCQkzMjc2NworCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1dBS0VVUAkJMHgwMDAwMDAwMQorI2RlZmluZSBTUElfVEFSR0VUX0lOVF9TTEVFUAkJMHgwMDAwMDAwMgorI2RlZmluZSBTUElfVEFSR0VUX0lOVF9SRERPTkUJCTB4MDAwMDAwMDQKKworI2RlZmluZSBTUElfVEFSR0VUX0lOVF9DVFMJCTB4MDAwMDQwMDAKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfRFIJCTB4MDAwMDgwMDAKKworI2RlZmluZSBTUElfSE9TVF9JTlRfUkVBRFkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1BJX0hPU1RfSU5UX1dSX1JFQURZCQkweDAwMDAwMDAyCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9TV19VUERBVEUJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU1BJX0hPU1RfSU5UX1VQREFURQkJMHgxMDAwMDAwMAorCisvKiBjbGVhciB0byBzZW5kICovCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9DUgkJCTB4MDAwMDQwMDAKKworLyogZGF0YSByZWFkeSAqLworI2RlZmluZSBTUElfSE9TVF9JTlRfRFIJCQkweDAwMDA4MDAwCisKKyNkZWZpbmUgU1BJX0hPU1RfSU5UU19ERUZBVUxUIAkJCQkJCSAgICBcCisJKFNQSV9IT1NUX0lOVF9SRUFEWSB8IFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKQorCisjZGVmaW5lIFRBUkdFVF9CT09UX1NMRUVQIDUwCisKK3N0cnVjdCBwNTRzX2RtYV9yZWdzIHsKKwlfX2xlMTYgY21kOworCV9fbGUxNiBsZW47CisJX19sZTMyIGFkZHI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NHNfdHhfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OworfTsKKworc3RydWN0IHA1NHNfcHJpdiB7CisJLyogcDU0X2NvbW1vbiBoYXMgdG8gYmUgdGhlIGZpcnN0IGVudHJ5ICovCisJc3RydWN0IHA1NF9jb21tb24gY29tbW9uOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBmd19jb21wOworCisJc3BpbmxvY2tfdCB0eF9sb2NrOworCisJLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4X3BlbmRpbmc7CisKKwllbnVtIGZ3X3N0YXRlIGZ3X3N0YXRlOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7Cit9OworCisjZW5kaWYgLyogUDU0U1BJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGlfZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpX2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTEwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpX2VlcHJvbS5oCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIENvbmV4YW50IEFtZXJpY2FzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IDIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA4IENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBiYXNlZCBvbjoKKyAqICAtIGN4MzExMHgncyBwZGEuaCBmcm9tIE5va2lhCisgKiAgLSBjeDMxMTAtdHJhbnNmZXIubG9nIGJ5IEpvaGFubmVzIEJlcmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIFA1NFNQSV9FRVBST01fSAorI2RlZmluZSBQNTRTUElfRUVQUk9NX0gKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcDU0c3BpX2VlcHJvbVtdID0geworCisvKiBzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICovCisweDQ3LCAweDRkLCAweDU1LCAweGFhLAkvKiBtYWdpYyAqLworMHgwMCwgMHgwMCwJCS8qIHBhZCAqLworMHgwMCwgMHgwMCwJCS8qIGVlcHJvbV9wZGFfZGF0YV93cmFwIGxlbmd0aCAqLworMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogYXJtIG9wY29kZSAqLworCisvKiBib2d1cyBNQUMgYWRkcmVzcyAqLworMHgwNCwgMHgwMCwgMHgwMSwgMHgwMSwJCS8qIFBEUl9NQUNfQUREUkVTUyAqLworCTB4MDAsIDB4MDIsIDB4ZWUsIDB4YzAsIDB4ZmYsIDB4ZWUsCisKKy8qIHN0cnVjdCBib290cmVjX2V4cF9pZiAqLworMHgwNiwgMHgwMCwgMHgwMSwgMHgxMCwJCS8qIFBEUl9JTlRFUkZBQ0VfTElTVCAqLworCTB4MDAsIDB4MDAsCQkJLyogcm9sZSAqLworCTB4MGYsIDB4MDAsCQkJLyogaWZfaWQgKi8KKwkweDg1LCAweDAwLAkJCS8qIHZhcmlhbnQgPSBMb25nYm93IFJGLCAyR0h6ICovCisJMHgwMSwgMHgwMCwJCQkvKiBidG1fY29tcGF0ICovCisJMHgxZiwgMHgwMCwJCQkvKiB0b3BfY29tcGF0ICovCisKKzB4MDMsIDB4MDAsIDB4MDIsIDB4MTAsCQkvKiBQRFJfSEFSRFdBUkVfUExBVEZPUk1fQ09NUE9ORU5UX0lEICovCisJMHgwMywgMHgyMCwgMHgwMCwgMHg0MywKKworLyogc3RydWN0IHBkYV9jb3VudHJ5WzZdICovCisweDBkLCAweDAwLCAweDA3LCAweDEwLAkJLyogUERSX0NPVU5UUllfTElTVCAqLworCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAwLAorCisvKiBzdHJ1Y3QgcGRhX2NvdW50cnkgKi8KKzB4MDMsIDB4MDAsIDB4MDgsIDB4MTAsCQkvKiBQRFJfREVGQVVMVF9DT1VOVFJZICovCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwJCS8qIEVUU0kgKi8KKworMHgwMywgMHgwMCwgMHgwMCwgMHgxMSwJCS8qIFBEUl9BTlRFTk5BX0dBSU4gKi8KKwkweDA4LCAweDA4LCAweDA4LCAweDA4LAorCisweDA5LCAweDAwLCAweGFkLCAweGRlLAkJLyogUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fQ1VTVE9NICovCisJMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCisvKiBzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICovCisweDEwLCAweDA2LCAweDVkLCAweGIwLAkJLyogUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBX0NVU1RPTSAqLworCTB4MGQsIDB4MDAsIDB4ZWUsIDB4MDAsCQkvKiAxMyBlbnRyaWVzLCAyMzggYnl0ZXMgcGVyIGVudHJ5ICovCisJMHgwMCwgMHgwMCwgMHgxNiwgMHgwYywJCS8qIG5vIG9mZnNldCwgMzA5NCB0b3RhbCBsZW4gKi8KKwkJLyogMjQxMiBNSHogKi8KKwkJMHg2YywgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4OWEsIDB4ODQsCisJCQkJMHhhYSwgMHg4YSwgMHhhYSwgMHg4YSwgMHhhYSwgMHg4YSwgMHhhYSwgMHg4YSwKKwkJCQkweDNjLCAweGI2LCAweDNjLCAweGI2LCAweDNjLCAweGI2LCAweDNjLCAweGI2LAorCQkJCTB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDk0LCAweDZjLAorCQkJCTB4OTksIDB4ODIsIDB4OTksIDB4ODIsIDB4OTksIDB4ODIsIDB4OTksIDB4ODIsCisJCQkJMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwgMHgyYiwgMHhhZSwKKwkJCQkweDJiLCAweGFlLCAweDJiLCAweGFlLCAweDJiLCAweGFlLCAweDJiLCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHhhYSwgMHg1YSwKKwkJCQkweDg4LCAweDdhLCAweDg4LCAweDdhLCAweDg4LCAweDdhLCAweDg4LCAweDdhLAorCQkJCTB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsIDB4MWEsIDB4YTYsCisJCQkJMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwKKwkJCTB4YTAsIDB4MDAsIDB4ZjMsIDB4NDcsCisJCQkJMHg2ZSwgMHg2ZSwgMHg2ZSwgMHg2ZSwgMHg2ZSwgMHg2ZSwgMHg2ZSwgMHg2ZSwKKwkJCQkweDAwLCAweDlhLCAweDAwLCAweDlhLCAweDAwLCAweDlhLCAweDAwLCAweDlhLAorCQkJCTB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsCisJCQkweDUwLCAweDAwLCAweDU5LCAweDM2LAorCQkJCTB4NDMsIDB4NWEsIDB4NDMsIDB4NWEsIDB4NDMsIDB4NWEsIDB4NDMsIDB4NWEsCisJCQkJMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwgMHhkNSwgMHg4NSwKKwkJCQkweGQ1LCAweDg1LCAweGQ1LCAweDg1LCAweGQ1LCAweDg1LCAweGQ1LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHhlNCwgMHgyZCwKKwkJCQkweDE4LCAweDQ2LCAweDE4LCAweDQ2LCAweDE4LCAweDQ2LCAweDE4LCAweDQ2LAorCQkJCTB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsIDB4YWEsIDB4NzEsCisJCQkJMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MTcgTUh6ICovCisJCTB4NzEsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGI5LCAweDgzLAorCQkJCTB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsCisJCQkJMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwKKwkJCQkweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgyZSwgMHg2YywKKwkJCQkweDY4LCAweDgyLCAweDY4LCAweDgyLCAweDY4LCAweDgyLCAweDY4LCAweDgyLAorCQkJCTB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsCisJCQkJMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4OGQsIDB4NWEsCisJCQkJMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwKKwkJCQkweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LAorCQkJCTB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDBhLCAweDQ4LAorCQkJCTB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsCisJCQkJMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwKKwkJCQkweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHg3YywgMHgzNiwKKwkJCQkweGZjLCAweDU5LCAweGZjLCAweDU5LCAweGZjLCAweDU5LCAweGZjLCAweDU5LAorCQkJCTB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsCisJCQkJMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4ZjUsIDB4MmQsCisJCQkJMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwKKwkJCQkweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLAorCQkJCTB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDIyIE1IeiAqLworCQkweDc2LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhiOSwgMHg4MywKKwkJCQkweDdkLCAweDhhLCAweDdkLCAweDhhLCAweDdkLCAweDhhLCAweDdkLCAweDhhLAorCQkJCTB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsCisJCQkJMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MmUsIDB4NmMsCisJCQkJMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwgMHg2OCwgMHg4MiwKKwkJCQkweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLAorCQkJCTB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDhkLCAweDVhLAorCQkJCTB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsIDB4NTIsIDB4N2EsCisJCQkJMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwKKwkJCQkweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgwYSwgMHg0OCwKKwkJCQkweDMyLCAweDZlLCAweDMyLCAweDZlLCAweDMyLCAweDZlLCAweDMyLCAweDZlLAorCQkJCTB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksCisJCQkJMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4N2MsIDB4MzYsCisJCQkJMHhmYywgMHg1OSwgMHhmYywgMHg1OSwgMHhmYywgMHg1OSwgMHhmYywgMHg1OSwKKwkJCQkweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LAorCQkJCTB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweGY1LCAweDJkLAorCQkJCTB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsIDB4YzYsIDB4NDUsCisJCQkJMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwKKwkJCQkweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQyNyBNSHogKi8KKwkJMHg3YiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NDgsIDB4ODMsCisJCQkJMHg2NywgMHg4YSwgMHg2NywgMHg4YSwgMHg2NywgMHg4YSwgMHg2NywgMHg4YSwKKwkJCQkweGY5LCAweGI1LCAweGY5LCAweGI1LCAweGY5LCAweGI1LCAweGY5LCAweGI1LAorCQkJCTB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsCisJCQkweGYwLCAweDAwLCAweGZiLCAweDZiLAorCQkJCTB4NTAsIDB4ODIsIDB4NTAsIDB4ODIsIDB4NTAsIDB4ODIsIDB4NTAsIDB4ODIsCisJCQkJMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwgMHhlMiwgMHhhZCwKKwkJCQkweGUyLCAweGFkLCAweGUyLCAweGFkLCAweGUyLCAweGFkLCAweGUyLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg3ZSwgMHg1YSwKKwkJCQkweDM4LCAweDdhLCAweDM4LCAweDdhLCAweDM4LCAweDdhLCAweDM4LCAweDdhLAorCQkJCTB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsIDB4Y2EsIDB4YTUsCisJCQkJMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MTUsIDB4NDgsCisJCQkJMHgxNCwgMHg2ZSwgMHgxNCwgMHg2ZSwgMHgxNCwgMHg2ZSwgMHgxNCwgMHg2ZSwKKwkJCQkweGE2LCAweDk5LCAweGE2LCAweDk5LCAweGE2LCAweDk5LCAweGE2LCAweDk5LAorCQkJCTB4YTYsIDB4OTksIDB4YTYsIDB4OTksIDB4YTYsIDB4OTksIDB4YTYsIDB4OTksCisJCQkweDUwLCAweDAwLCAweDhlLCAweDM2LAorCQkJCTB4ZDksIDB4NTksIDB4ZDksIDB4NTksIDB4ZDksIDB4NTksIDB4ZDksIDB4NTksCisJCQkJMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwgMHg2YiwgMHg4NSwKKwkJCQkweDZiLCAweDg1LCAweDZiLCAweDg1LCAweDZiLCAweDg1LCAweDZiLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHhmZSwgMHgyZCwKKwkJCQkweDlkLCAweDQ1LCAweDlkLCAweDQ1LCAweDlkLCAweDQ1LCAweDlkLCAweDQ1LAorCQkJCTB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsIDB4MmYsIDB4NzEsCisJCQkJMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MzIgTUh6ICovCisJCTB4ODAsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGQ3LCAweDgyLAorCQkJCTB4NTEsIDB4OGEsIDB4NTEsIDB4OGEsIDB4NTEsIDB4OGEsIDB4NTEsIDB4OGEsCisJCQkJMHhlMywgMHhiNSwgMHhlMywgMHhiNSwgMHhlMywgMHhiNSwgMHhlMywgMHhiNSwKKwkJCQkweGUzLCAweGI1LCAweGUzLCAweGI1LCAweGUzLCAweGI1LCAweGUzLCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHhjOCwgMHg2YiwKKwkJCQkweDM3LCAweDgyLCAweDM3LCAweDgyLCAweDM3LCAweDgyLCAweDM3LCAweDgyLAorCQkJCTB4YzksIDB4YWQsIDB4YzksIDB4YWQsIDB4YzksIDB4YWQsIDB4YzksIDB4YWQsCisJCQkJMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4NmYsIDB4NWEsCisJCQkJMHgxZCwgMHg3YSwgMHgxZCwgMHg3YSwgMHgxZCwgMHg3YSwgMHgxZCwgMHg3YSwKKwkJCQkweGFmLCAweGE1LCAweGFmLCAweGE1LCAweGFmLCAweGE1LCAweGFmLCAweGE1LAorCQkJCTB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDIwLCAweDQ4LAorCQkJCTB4ZjYsIDB4NmQsIDB4ZjYsIDB4NmQsIDB4ZjYsIDB4NmQsIDB4ZjYsIDB4NmQsCisJCQkJMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwgMHg4OCwgMHg5OSwKKwkJCQkweDg4LCAweDk5LCAweDg4LCAweDk5LCAweDg4LCAweDk5LCAweDg4LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHg5ZiwgMHgzNiwKKwkJCQkweGI1LCAweDU5LCAweGI1LCAweDU5LCAweGI1LCAweDU5LCAweGI1LCAweDU5LAorCQkJCTB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsIDB4NDcsIDB4ODUsCisJCQkJMHg0NywgMHg4NSwgMHg0NywgMHg4NSwgMHg0NywgMHg4NSwgMHg0NywgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MDYsIDB4MmUsCisJCQkJMHg3NCwgMHg0NSwgMHg3NCwgMHg0NSwgMHg3NCwgMHg0NSwgMHg3NCwgMHg0NSwKKwkJCQkweDA2LCAweDcxLCAweDA2LCAweDcxLCAweDA2LCAweDcxLCAweDA2LCAweDcxLAorCQkJCTB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDM3IE1IeiAqLworCQkweDg1LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg2NywgMHg4MiwKKwkJCQkweDNhLCAweDhhLCAweDNhLCAweDhhLCAweDNhLCAweDhhLCAweDNhLCAweDhhLAorCQkJCTB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsIDB4Y2MsIDB4YjUsCisJCQkJMHhjYywgMHhiNSwgMHhjYywgMHhiNSwgMHhjYywgMHhiNSwgMHhjYywgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4OTUsIDB4NmIsCisJCQkJMHgxZiwgMHg4MiwgMHgxZiwgMHg4MiwgMHgxZiwgMHg4MiwgMHgxZiwgMHg4MiwKKwkJCQkweGIxLCAweGFkLCAweGIxLCAweGFkLCAweGIxLCAweGFkLCAweGIxLCAweGFkLAorCQkJCTB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDYxLCAweDVhLAorCQkJCTB4MDIsIDB4N2EsIDB4MDIsIDB4N2EsIDB4MDIsIDB4N2EsIDB4MDIsIDB4N2EsCisJCQkJMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwgMHg5NCwgMHhhNSwKKwkJCQkweDk0LCAweGE1LCAweDk0LCAweGE1LCAweDk0LCAweGE1LCAweDk0LCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgyYywgMHg0OCwKKwkJCQkweGQ4LCAweDZkLCAweGQ4LCAweDZkLCAweGQ4LCAweDZkLCAweGQ4LCAweDZkLAorCQkJCTB4NmEsIDB4OTksIDB4NmEsIDB4OTksIDB4NmEsIDB4OTksIDB4NmEsIDB4OTksCisJCQkJMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4YjEsIDB4MzYsCisJCQkJMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwgMHg5MiwgMHg1OSwKKwkJCQkweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LAorCQkJCTB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDBmLCAweDJlLAorCQkJCTB4NGIsIDB4NDUsIDB4NGIsIDB4NDUsIDB4NGIsIDB4NDUsIDB4NGIsIDB4NDUsCisJCQkJMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwgMHhkZCwgMHg3MCwKKwkJCQkweGRkLCAweDcwLCAweGRkLCAweDcwLCAweGRkLCAweDcwLCAweGRkLCAweDcwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQ0MiBNSHogKi8KKwkJMHg4YSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZjYsIDB4ODEsCisJCQkJMHgyNCwgMHg4YSwgMHgyNCwgMHg4YSwgMHgyNCwgMHg4YSwgMHgyNCwgMHg4YSwKKwkJCQkweGI2LCAweGI1LCAweGI2LCAweGI1LCAweGI2LCAweGI1LCAweGI2LCAweGI1LAorCQkJCTB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsCisJCQkweGYwLCAweDAwLCAweDYyLCAweDZiLAorCQkJCTB4MDYsIDB4ODIsIDB4MDYsIDB4ODIsIDB4MDYsIDB4ODIsIDB4MDYsIDB4ODIsCisJCQkJMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwgMHg5OCwgMHhhZCwKKwkJCQkweDk4LCAweGFkLCAweDk4LCAweGFkLCAweDk4LCAweGFkLCAweDk4LCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg1MiwgMHg1YSwKKwkJCQkweGU3LCAweDc5LCAweGU3LCAweDc5LCAweGU3LCAweDc5LCAweGU3LCAweDc5LAorCQkJCTB4NzksIDB4YTUsIDB4NzksIDB4YTUsIDB4NzksIDB4YTUsIDB4NzksIDB4YTUsCisJCQkJMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MzcsIDB4NDgsCisJCQkJMHhiYSwgMHg2ZCwgMHhiYSwgMHg2ZCwgMHhiYSwgMHg2ZCwgMHhiYSwgMHg2ZCwKKwkJCQkweDRjLCAweDk5LCAweDRjLCAweDk5LCAweDRjLCAweDk5LCAweDRjLCAweDk5LAorCQkJCTB4NGMsIDB4OTksIDB4NGMsIDB4OTksIDB4NGMsIDB4OTksIDB4NGMsIDB4OTksCisJCQkweDUwLCAweDAwLCAweGMyLCAweDM2LAorCQkJCTB4NmUsIDB4NTksIDB4NmUsIDB4NTksIDB4NmUsIDB4NTksIDB4NmUsIDB4NTksCisJCQkJMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4NSwKKwkJCQkweDAwLCAweDg1LCAweDAwLCAweDg1LCAweDAwLCAweDg1LCAweDAwLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgxNywgMHgyZSwKKwkJCQkweDIyLCAweDQ1LCAweDIyLCAweDQ1LCAweDIyLCAweDQ1LCAweDIyLCAweDQ1LAorCQkJCTB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsIDB4YjQsIDB4NzAsCisJCQkJMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0NDcgTUh6ICovCisJCTB4OGYsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDc1LCAweDgzLAorCQkJCTB4NjEsIDB4OGEsIDB4NjEsIDB4OGEsIDB4NjEsIDB4OGEsIDB4NjEsIDB4OGEsCisJCQkJMHhmMywgMHhiNSwgMHhmMywgMHhiNSwgMHhmMywgMHhiNSwgMHhmMywgMHhiNSwKKwkJCQkweGYzLCAweGI1LCAweGYzLCAweGI1LCAweGYzLCAweGI1LCAweGYzLCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHg0YiwgMHg2YywKKwkJCQkweDNmLCAweDgyLCAweDNmLCAweDgyLCAweDNmLCAweDgyLCAweDNmLCAweDgyLAorCQkJCTB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsIDB4ZDEsIDB4YWQsCisJCQkJMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZGEsIDB4NWEsCisJCQkJMHgxYywgMHg3YSwgMHgxYywgMHg3YSwgMHgxYywgMHg3YSwgMHgxYywgMHg3YSwKKwkJCQkweGFlLCAweGE1LCAweGFlLCAweGE1LCAweGFlLCAweGE1LCAweGFlLCAweGE1LAorCQkJCTB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDZkLCAweDQ4LAorCQkJCTB4ZTksIDB4NmQsIDB4ZTksIDB4NmQsIDB4ZTksIDB4NmQsIDB4ZTksIDB4NmQsCisJCQkJMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwgMHg3YiwgMHg5OSwKKwkJCQkweDdiLCAweDk5LCAweDdiLCAweDk5LCAweDdiLCAweDk5LCAweDdiLCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhjNiwgMHgzNiwKKwkJCQkweDkyLCAweDU5LCAweDkyLCAweDU5LCAweDkyLCAweDU5LCAweDkyLCAweDU5LAorCQkJCTB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsCisJCQkJMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MTUsIDB4MmUsCisJCQkJMHgzYywgMHg0NSwgMHgzYywgMHg0NSwgMHgzYywgMHg0NSwgMHgzYywgMHg0NSwKKwkJCQkweGNlLCAweDcwLCAweGNlLCAweDcwLCAweGNlLCAweDcwLCAweGNlLCAweDcwLAorCQkJCTB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDUyIE1IeiAqLworCQkweDk0LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhmNCwgMHg4NCwKKwkJCQkweDllLCAweDhhLCAweDllLCAweDhhLCAweDllLCAweDhhLCAweDllLCAweDhhLAorCQkJCTB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsIDB4MzAsIDB4YjYsCisJCQkJMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MzQsIDB4NmQsCisJCQkJMHg3NywgMHg4MiwgMHg3NywgMHg4MiwgMHg3NywgMHg4MiwgMHg3NywgMHg4MiwKKwkJCQkweDA5LCAweGFlLCAweDA5LCAweGFlLCAweDA5LCAweGFlLCAweDA5LCAweGFlLAorCQkJCTB4MDksIDB4YWUsIDB4MDksIDB4YWUsIDB4MDksIDB4YWUsIDB4MDksIDB4YWUsCisJCQkweGQwLCAweDAwLCAweDYyLCAweDViLAorCQkJCTB4NTAsIDB4N2EsIDB4NTAsIDB4N2EsIDB4NTAsIDB4N2EsIDB4NTAsIDB4N2EsCisJCQkJMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwgMHhlMiwgMHhhNSwKKwkJCQkweGUyLCAweGE1LCAweGUyLCAweGE1LCAweGUyLCAweGE1LCAweGUyLCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHhhMiwgMHg0OCwKKwkJCQkweDE3LCAweDZlLCAweDE3LCAweDZlLCAweDE3LCAweDZlLCAweDE3LCAweDZlLAorCQkJCTB4YTksIDB4OTksIDB4YTksIDB4OTksIDB4YTksIDB4OTksIDB4YTksIDB4OTksCisJCQkJMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4YzksIDB4MzYsCisJCQkJMHhiNywgMHg1OSwgMHhiNywgMHg1OSwgMHhiNywgMHg1OSwgMHhiNywgMHg1OSwKKwkJCQkweDQ5LCAweDg1LCAweDQ5LCAweDg1LCAweDQ5LCAweDg1LCAweDQ5LCAweDg1LAorCQkJCTB4NDksIDB4ODUsIDB4NDksIDB4ODUsIDB4NDksIDB4ODUsIDB4NDksIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDEyLCAweDJlLAorCQkJCTB4NTcsIDB4NDUsIDB4NTcsIDB4NDUsIDB4NTcsIDB4NDUsIDB4NTcsIDB4NDUsCisJCQkJMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwgMHhlOSwgMHg3MCwKKwkJCQkweGU5LCAweDcwLCAweGU5LCAweDcwLCAweGU5LCAweDcwLCAweGU5LCAweDcwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQ1MiBNSHogKi8KKwkJMHg5OSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NzQsIDB4ODYsCisJCQkJMHhkYiwgMHg4YSwgMHhkYiwgMHg4YSwgMHhkYiwgMHg4YSwgMHhkYiwgMHg4YSwKKwkJCQkweDZkLCAweGI2LCAweDZkLCAweGI2LCAweDZkLCAweGI2LCAweDZkLCAweGI2LAorCQkJCTB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDFlLCAweDZlLAorCQkJCTB4YjAsIDB4ODIsIDB4YjAsIDB4ODIsIDB4YjAsIDB4ODIsIDB4YjAsIDB4ODIsCisJCQkJMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwgMHg0MiwgMHhhZSwKKwkJCQkweDQyLCAweGFlLCAweDQyLCAweGFlLCAweDQyLCAweGFlLCAweDQyLCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHhlYiwgMHg1YiwKKwkJCQkweDg1LCAweDdhLCAweDg1LCAweDdhLCAweDg1LCAweDdhLCAweDg1LCAweDdhLAorCQkJCTB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsIDB4MTcsIDB4YTYsCisJCQkJMHgxNywgMHhhNiwgMHgxNywgMHhhNiwgMHgxNywgMHhhNiwgMHgxNywgMHhhNiwKKwkJCTB4YTAsIDB4MDAsIDB4ZDgsIDB4NDgsCisJCQkJMHg0NiwgMHg2ZSwgMHg0NiwgMHg2ZSwgMHg0NiwgMHg2ZSwgMHg0NiwgMHg2ZSwKKwkJCQkweGQ4LCAweDk5LCAweGQ4LCAweDk5LCAweGQ4LCAweDk5LCAweGQ4LCAweDk5LAorCQkJCTB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksCisJCQkweDUwLCAweDAwLCAweGNkLCAweDM2LAorCQkJCTB4ZGIsIDB4NTksIDB4ZGIsIDB4NTksIDB4ZGIsIDB4NTksIDB4ZGIsIDB4NTksCisJCQkJMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwgMHg2ZCwgMHg4NSwKKwkJCQkweDZkLCAweDg1LCAweDZkLCAweDg1LCAweDZkLCAweDg1LCAweDZkLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgxMCwgMHgyZSwKKwkJCQkweDcxLCAweDQ1LCAweDcxLCAweDQ1LCAweDcxLCAweDQ1LCAweDcxLCAweDQ1LAorCQkJCTB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsIDB4MDMsIDB4NzEsCisJCQkJMHgwMywgMHg3MSwgMHgwMywgMHg3MSwgMHgwMywgMHg3MSwgMHgwMywgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI1NTcgTUh6ICovCisJCTB4OWUsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGYzLCAweDg3LAorCQkJCTB4MTcsIDB4OGIsIDB4MTcsIDB4OGIsIDB4MTcsIDB4OGIsIDB4MTcsIDB4OGIsCisJCQkJMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwgMHhhOSwgMHhiNiwKKwkJCQkweGE5LCAweGI2LCAweGE5LCAweGI2LCAweGE5LCAweGI2LCAweGE5LCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgwNywgMHg2ZiwKKwkJCQkweGU5LCAweDgyLCAweGU5LCAweDgyLCAweGU5LCAweDgyLCAweGU5LCAweDgyLAorCQkJCTB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsIDB4N2IsIDB4YWUsCisJCQkJMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4NzMsIDB4NWMsCisJCQkJMHhiYSwgMHg3YSwgMHhiYSwgMHg3YSwgMHhiYSwgMHg3YSwgMHhiYSwgMHg3YSwKKwkJCQkweDRjLCAweGE2LCAweDRjLCAweGE2LCAweDRjLCAweGE2LCAweDRjLCAweGE2LAorCQkJCTB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweDBkLCAweDQ5LAorCQkJCTB4NzQsIDB4NmUsIDB4NzQsIDB4NmUsIDB4NzQsIDB4NmUsIDB4NzQsIDB4NmUsCisJCQkJMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwgMHgwNiwgMHg5YSwKKwkJCQkweDA2LCAweDlhLCAweDA2LCAweDlhLCAweDA2LCAweDlhLCAweDA2LCAweDlhLAorCQkJMHg1MCwgMHgwMCwgMHhkMSwgMHgzNiwKKwkJCQkweGZmLCAweDU5LCAweGZmLCAweDU5LCAweGZmLCAweDU5LCAweGZmLCAweDU5LAorCQkJCTB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsIDB4OTEsIDB4ODUsCisJCQkJMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MGUsIDB4MmUsCisJCQkJMHg4YiwgMHg0NSwgMHg4YiwgMHg0NSwgMHg4YiwgMHg0NSwgMHg4YiwgMHg0NSwKKwkJCQkweDFkLCAweDcxLCAweDFkLCAweDcxLCAweDFkLCAweDcxLCAweDFkLCAweDcxLAorCQkJCTB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNTYyIE1IeiAqLworCQkweGEzLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg3MiwgMHg4OSwKKwkJCQkweDU0LCAweDhiLCAweDU0LCAweDhiLCAweDU0LCAweDhiLCAweDU0LCAweDhiLAorCQkJCTB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsIDB4ZTYsIDB4YjYsCisJCQkJMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4NmYsCisJCQkJMHgyMSwgMHg4MywgMHgyMSwgMHg4MywgMHgyMSwgMHg4MywgMHgyMSwgMHg4MywKKwkJCQkweGIzLCAweGFlLCAweGIzLCAweGFlLCAweGIzLCAweGFlLCAweGIzLCAweGFlLAorCQkJCTB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweGZiLCAweDVjLAorCQkJCTB4ZWUsIDB4N2EsIDB4ZWUsIDB4N2EsIDB4ZWUsIDB4N2EsIDB4ZWUsIDB4N2EsCisJCQkJMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwgMHg4MCwgMHhhNiwKKwkJCQkweDgwLCAweGE2LCAweDgwLCAweGE2LCAweDgwLCAweGE2LCAweDgwLCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHg0MywgMHg0OSwKKwkJCQkweGEzLCAweDZlLCAweGEzLCAweDZlLCAweGEzLCAweDZlLCAweGEzLCAweDZlLAorCQkJCTB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsIDB4MzUsIDB4OWEsCisJCQkJMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwKKwkJCTB4NTAsIDB4MDAsIDB4ZDQsIDB4MzYsCisJCQkJMHgyNCwgMHg1YSwgMHgyNCwgMHg1YSwgMHgyNCwgMHg1YSwgMHgyNCwgMHg1YSwKKwkJCQkweGI2LCAweDg1LCAweGI2LCAweDg1LCAweGI2LCAweDg1LCAweGI2LCAweDg1LAorCQkJCTB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDBiLCAweDJlLAorCQkJCTB4YTYsIDB4NDUsIDB4YTYsIDB4NDUsIDB4YTYsIDB4NDUsIDB4YTYsIDB4NDUsCisJCQkJMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwgMHgzOCwgMHg3MSwKKwkJCQkweDM4LCAweDcxLCAweDM4LCAweDcxLCAweDM4LCAweDcxLCAweDM4LCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjU3MiBNSHogKi8KKwkJMHhhOCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZjEsIDB4OGEsCisJCQkJMHg5MSwgMHg4YiwgMHg5MSwgMHg4YiwgMHg5MSwgMHg4YiwgMHg5MSwgMHg4YiwKKwkJCQkweDIzLCAweGI3LCAweDIzLCAweGI3LCAweDIzLCAweGI3LCAweDIzLCAweGI3LAorCQkJCTB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsCisJCQkweGYwLCAweDAwLCAweGQ5LCAweDcwLAorCQkJCTB4NWEsIDB4ODMsIDB4NWEsIDB4ODMsIDB4NWEsIDB4ODMsIDB4NWEsIDB4ODMsCisJCQkJMHhlYywgMHhhZSwgMHhlYywgMHhhZSwgMHhlYywgMHhhZSwgMHhlYywgMHhhZSwKKwkJCQkweGVjLCAweGFlLCAweGVjLCAweGFlLCAweGVjLCAweGFlLCAweGVjLCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHg4MywgMHg1ZCwKKwkJCQkweDIzLCAweDdiLCAweDIzLCAweDdiLCAweDIzLCAweDdiLCAweDIzLCAweDdiLAorCQkJCTB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsIDB4YjUsIDB4YTYsCisJCQkJMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwKKwkJCTB4YTAsIDB4MDAsIDB4NzgsIDB4NDksCisJCQkJMHhkMSwgMHg2ZSwgMHhkMSwgMHg2ZSwgMHhkMSwgMHg2ZSwgMHhkMSwgMHg2ZSwKKwkJCQkweDYzLCAweDlhLCAweDYzLCAweDlhLCAweDYzLCAweDlhLCAweDYzLCAweDlhLAorCQkJCTB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsCisJCQkweDUwLCAweDAwLCAweGQ4LCAweDM2LAorCQkJCTB4NDgsIDB4NWEsIDB4NDgsIDB4NWEsIDB4NDgsIDB4NWEsIDB4NDgsIDB4NWEsCisJCQkJMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwgMHhkYSwgMHg4NSwKKwkJCQkweGRhLCAweDg1LCAweGRhLCAweDg1LCAweGRhLCAweDg1LCAweGRhLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwOSwgMHgyZSwKKwkJCQkweGMwLCAweDQ1LCAweGMwLCAweDQ1LCAweGMwLCAweDQ1LCAweGMwLCAweDQ1LAorCQkJCTB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsIDB4NTIsIDB4NzEsCisJCQkJMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisvKgorICogTm90IHJlYWxseSBzdXJlIGlmIHRoaXMgaXMgYWN0dWFsbHkgdGhlIHBvd2VyX2xpbWl0IGRhdGFiYXNlLAorICogaXQgbG9va3MgYSBiaXQgInJlbGF0ZWQiIHRvIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT04KKyAqLworLyogc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqLworMHhhZSwgMHgwMCwgMHhlZiwgMHhiZSwgICAgICAvKiBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NICovCisJMHgwZCwgMHgwMCwgMHgxYSwgMHgwMCwJCS8qIDEzIGVudHJpZXMsIDI2IGJ5dGVzIHBlciBlbnRyeSAqLworCTB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsCQkvKiBubyBvZmZzZXQsIDMzOCBieXRlcyB0b3RhbCAqLworCisJCS8qIDI0MTIgTUh6ICovCisJCTB4NmMsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQxNyBNSHogKi8KKwkJMHg3MSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDIyIE1IeiAqLworCQkweDc2LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MjcgTUh6ICovCisJCTB4N2IsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQzMiBNSHogKi8KKwkJMHg4MCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDM3IE1IeiAqLworCQkweDg1LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NDIgTUh6ICovCisJCTB4OGEsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ0NyBNSHogKi8KKwkJMHg4ZiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDUyIE1IeiAqLworCQkweDk0LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NTcgTUh6ICovCisJCTB4OTksIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ2MiBNSHogKi8KKwkJMHg5ZSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDY3IE1IeiAqLworCQkweGEzLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NzIgTUh6ICovCisJCTB4YTgsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKy8qIHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeVsxM10gKi8KKzB4NDIsIDB4MDAsIDB4MDYsIDB4MTksCQkvKiBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OICovCisJLyogMjQxMiBNSHogKi8KKwkweDZjLCAweDA5LCAweDI2LCAweDAwLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MTcgTUh6ICovCisJMHg3MSwgMHgwOSwgMHgyNiwgMHgwMCwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDIyIE1IeiAqLworCTB4NzYsIDB4MDksIDB4MjYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQyNyBNSHogKi8KKwkweDdiLCAweDA5LCAweDI2LCAweDAwLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MzIgTUh6ICovCisJMHg4MCwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDM3IE1IeiAqLworCTB4ODUsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQ0MiBNSHogKi8KKwkweDhhLCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0NDcgTUh6ICovCisJMHg4ZiwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDUyIE1IeiAqLworCTB4OTQsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQ1NyBNSHogKi8KKwkweDk5LCAweDA5LCAweDI1LCAweDAwLCAweGY1LCAweGZmLCAweGY5LCAweGZmLCAweDAwLCAweDAxLAorCS8qIDI0NjIgTUh6ICovCisJMHg5ZSwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNSwgMHhmZiwgMHhmOSwgMHhmZiwgMHgwMCwgMHgwMSwKKwkvKiAyNDY3IE1IeiAqLworCTB4YTMsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4MDAsIDB4MDEsCisJLyogMjQ3MiBNSHogKi8KKwkweGE4LCAweDA5LCAweDI1LCAweDAwLCAweGY1LCAweGZmLCAweGY5LCAweGZmLCAweDAwLCAweDAxLAorCisweDAyLCAweDAwLCAweDAwLCAweDAwLAkJLyogUERSX0VORCAqLworCTB4YTgsIDB4ZjUJCQkvKiBib2d1cyBkYXRhICovCit9OworCisjZW5kaWYgLyogUDU0U1BJX0VFUFJPTV9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCA1ZGUyZWJmLi5kYTY2NDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC00MjQsOSArNDI0LDQ2IEBACiAJCQkgICAgZGF0YSwgbGVuLCAmYWxlbiwgMjAwMCk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyIHA1NHVfcm9tYm9vdF8zODg3W10gPSAifn5+fiI7CitzdGF0aWMgY29uc3QgY2hhciBwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3W10gPSAiPFxyIjsKKworc3RhdGljIGludCBwNTR1X2RldmljZV9yZXNldF8zODg3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCByZXQsIGxvY2sgPSAocHJpdi0+aW50Zi0+Y29uZGl0aW9uICE9IFVTQl9JTlRFUkZBQ0VfQklORElORyk7CisJdTggYnVmWzRdOworCisJaWYgKGxvY2spIHsKKwkJcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChwcml2LT51ZGV2LCBwcml2LT5pbnRmKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIihwNTR1c2IpIHVuYWJsZSB0byBsb2NrICIKKwkJCQkiIGRldmljZSBmb3IgcmVzZXQ6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHVzYl9yZXNldF9kZXZpY2UocHJpdi0+dWRldik7CisJaWYgKGxvY2spCisJCXVzYl91bmxvY2tfZGV2aWNlKHByaXYtPnVkZXYpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICIocDU0dXNiKSB1bmFibGUgdG8gcmVzZXQgIgorCQkJImRldmljZTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbWVtY3B5KCZidWYsIHA1NHVfcm9tYm9vdF8zODg3LCBzaXplb2YoYnVmKSk7CisJcmV0ID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwKKwkJCSAgICBidWYsIHNpemVvZihidWYpKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICIocDU0dXNiKSB1bmFibGUgdG8ganVtcCB0byAiCisJCQkiYm9vdCBST006ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBwNTR1X3VwbG9hZF9maXJtd2FyZV8zODg3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKLQlzdGF0aWMgY2hhciBzdGFydF9zdHJpbmdbXSA9ICJ+fn5+PFxyIjsKIAlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOwogCWludCBlcnIsIGFsZW47CkBAIC00NDUsMTIgKzQ4Miw5IEBACiAJCWdvdG8gZXJyX2J1ZmFsbG9jOwogCX0KIAotCW1lbWNweShidWYsIHN0YXJ0X3N0cmluZywgNCk7Ci0JZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLCA0KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIihwNTR1c2IpIHJlc2V0IGZhaWxlZCEgKCVkKVxuIiwgZXJyKTsKKwllcnIgPSBwNTR1X2RldmljZV9yZXNldF8zODg3KGRldik7CisJaWYgKGVycikKIAkJZ290byBlcnJfcmVzZXQ7Ci0JfQogCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJpc2wzODg3dXNiIiwgJnByaXYtPnVkZXYtPmRldik7CiAJaWYgKGVycikgewpAQCAtNDY2LDE1ICs1MDAsMjIgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl91cGxvYWRfZmFpbGVkOwogCisJaWYgKHByaXYtPmNvbW1vbi5md19pbnRlcmZhY2UgIT0gRldfTE04NykgeworCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJ3cm9uZyBmaXJtd2FyZSwgIgorCQkJInBsZWFzZSBnZXQgYSBMTTg3IGZpcm13YXJlIGFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfdXBsb2FkX2ZhaWxlZDsKKwl9CisKIAlsZWZ0ID0gYmxvY2tfc2l6ZSA9IG1pbigoc2l6ZV90KVA1NFVfRldfQkxPQ0ssIGZ3X2VudHJ5LT5zaXplKTsKLQlzdHJjcHkoYnVmLCBzdGFydF9zdHJpbmcpOwotCWxlZnQgLT0gc3RybGVuKHN0YXJ0X3N0cmluZyk7Ci0JdG1wICs9IHN0cmxlbihzdGFydF9zdHJpbmcpOworCXN0cmNweShidWYsIHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODcpOworCWxlZnQgLT0gc3RybGVuKHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODcpOworCXRtcCArPSBzdHJsZW4ocDU0dV9maXJtd2FyZV91cGxvYWRfMzg4Nyk7CiAKIAlkYXRhID0gZndfZW50cnktPmRhdGE7CiAJcmVtYWlucyA9IGZ3X2VudHJ5LT5zaXplOwogCi0JaGRyID0gKHN0cnVjdCB4Ml9oZWFkZXIgKikoYnVmICsgc3RybGVuKHN0YXJ0X3N0cmluZykpOworCWhkciA9IChzdHJ1Y3QgeDJfaGVhZGVyICopKGJ1ZiArIHN0cmxlbihwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3KSk7CiAJbWVtY3B5KGhkci0+c2lnbmF0dXJlLCBYMl9TSUdOQVRVUkUsIFgyX1NJR05BVFVSRV9TSVpFKTsKIAloZHItPmZ3X2xvYWRfYWRkciA9IGNwdV90b19sZTMyKElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFIpOwogCWhkci0+ZndfbGVuZ3RoID0gY3B1X3RvX2xlMzIoZndfZW50cnktPnNpemUpOwpAQCAtNjE2LDYgKzY1NywxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChwcml2LT5jb21tb24uZndfaW50ZXJmYWNlICE9IEZXX0xNODYpIHsKKwkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAid3JvbmcgZmlybXdhcmUsICIKKwkJCSJwbGVhc2UgZ2V0IGEgTE04NihVU0IpIGZpcm13YXJlIGFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogI2RlZmluZSBQNTRVX1dSSVRFKHR5cGUsIGFkZHIsIGRhdGEpIFwKIAlkbyB7XAogCQllcnIgPSBwNTR1X3dyaXRlKHByaXYsIGJ1ZiwgdHlwZSxcCkBAIC04NzYsNiArOTI1LDkgQEAKIAlTRVRfSUVFRTgwMjExX0RFVihkZXYsICZpbnRmLT5kZXYpOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKIAlwcml2LT51ZGV2ID0gdWRldjsKKwlwcml2LT5pbnRmID0gaW50ZjsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9xdWV1ZSk7CisJaW5pdF91c2JfYW5jaG9yKCZwcml2LT5zdWJtaXR0ZWQpOwogCiAJdXNiX2dldF9kZXYodWRldik7CiAKQEAgLTkxOCwyMCArOTcwLDE1IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAKLQlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9xdWV1ZSk7Ci0JaW5pdF91c2JfYW5jaG9yKCZwcml2LT5zdWJtaXR0ZWQpOwotCiAJcDU0dV9vcGVuKGRldik7CiAJZXJyID0gcDU0X3JlYWRfZWVwcm9tKGRldik7CiAJcDU0dV9zdG9wKGRldik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAKLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnVkZXYtPmRldiwgIihwNTR1c2IpIENhbm5vdCByZWdpc3RlciBuZXRkZXZpY2VcbiIpOworCWVyciA9IHA1NF9yZWdpc3Rlcl9jb21tb24oZGV2LCAmdWRldi0+ZGV2KTsKKwlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2RldjsKLQl9CiAKIAlyZXR1cm4gMDsKIApAQCAtOTU4LDExICsxMDA1LDI0IEBACiAJaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKIH0KIAorc3RhdGljIGludCBwNTR1X3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTR1X3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwNTR1X2RyaXZlciA9IHsKIAkubmFtZQk9ICJwNTR1c2IiLAogCS5pZF90YWJsZSA9IHA1NHVfdGFibGUsCiAJLnByb2JlID0gcDU0dV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCwKKwkucHJlX3Jlc2V0ID0gcDU0dV9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPSBwNTR1X3Bvc3RfcmVzZXQsCisJLnNvZnRfdW5iaW5kID0gMSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHA1NHVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5oCmluZGV4IDU0ZWU3MzguLjhiYzU4OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmgKQEAgLTEyNiw2ICsxMjYsNyBAQAogc3RydWN0IHA1NHVfcHJpdiB7CiAJc3RydWN0IHA1NF9jb21tb24gY29tbW9uOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCWVudW0gewogCQlQNTRVX05FVDIyODAgPSAwLAogCQlQNTRVXzM4ODcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCmluZGV4IDU3YTE1MGEuLjRjOTdjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwpAQCAtMjk4MSw3ICsyOTgxLDggQEAKIAkJdW5pb24gaXdyZXFfZGF0YSAqdXdycSwgY2hhciAqZXh0cmEpCiB7CiAJaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQl1MzIgdSwgb2lkID0gT0lEX0lOTF9DT05GSUc7CisJdTMyIHU7CisJZW51bSBvaWRfbnVtX3Qgb2lkID0gT0lEX0lOTF9DT05GSUc7CiAKIAlkb3duX3dyaXRlKCZwcml2LT5taWJfc2VtKTsKIAltZ3RfZ2V0KHByaXYsIE9JRF9JTkxfQ09ORklHLCAmdSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCmluZGV4IDkxOTY4MjUuLjE2NmVkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCkBAIC00Myw3ICs0Myw2IEBACiAKIHN0YXRpYyBpbnQgcHJpc201NF9icmluZ19kb3duKGlzbHBjaV9wcml2YXRlICopOwogc3RhdGljIGludCBpc2xwY2lfYWxsb2NfbWVtb3J5KGlzbHBjaV9wcml2YXRlICopOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppc2xwY2lfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogLyogVGVtcG9yYXJ5IGR1bW15IE1BQyBhZGRyZXNzIHRvIHVzZSB1bnRpbCBmaXJtd2FyZSBpcyBsb2FkZWQuCiAgKiBUaGUgaWRlYSB0aGVyZSBpcyB0aGF0IHNvbWUgdG9vbHMgKHN1Y2ggYXMgbmFtZWlmKSBtYXkgcXVlcnkKQEAgLTYxNCwxOCArNjEzLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCi1pc2xwY2lfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCi0jaWYgVkVSQk9TRSA+IFNIT1dfRVJST1JfTUVTU0FHRVMKLQlERUJVRyhTSE9XX0ZVTkNUSU9OX0NBTExTLCAiaXNscGNpX3N0YXRpc3RpY3NcbiIpOwotI2VuZGlmCi0KLQlyZXR1cm4gJnByaXYtPnN0YXRpc3RpY3M7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODA0LDEwICs3OTEsMjIgQEAKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlzbHBjaV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXNscGNpX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGlzbHBjaV9ldGh0b29sX2dldF9kcnZpbmZvLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpc2xwY2lfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGlzbHBjaV9vcGVuLAorCS5uZG9fc3RvcAkJPSBpc2xwY2lfY2xvc2UsCisJLm5kb19kb19pb2N0bAkJPSBwcmlzbTU0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpc2xwY2lfZXRoX3RyYW5zbWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBpc2xwY2lfZXRoX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gcHJpc201NF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0cnVjdCBuZXRfZGV2aWNlICoKIGlzbHBjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTgyNywyNSArODI2LDE2IEBACiAJbmRldi0+aXJxID0gcGRldi0+aXJxOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgKi8KLQluZGV2LT5vcGVuID0gJmlzbHBjaV9vcGVuOwotCW5kZXYtPnN0b3AgPSAmaXNscGNpX2Nsb3NlOwotCW5kZXYtPmdldF9zdGF0cyA9ICZpc2xwY2lfc3RhdGlzdGljczsKLQluZGV2LT5kb19pb2N0bCA9ICZwcmlzbTU0X2lvY3RsOwotCW5kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0KLQkgICAgKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSAmcHJpc201NF9oYW5kbGVyX2RlZjsKKwluZGV2LT5uZXRkZXZfb3BzID0gJmlzbHBjaV9uZXRkZXZfb3BzOworCW5kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnByaXNtNTRfaGFuZGxlcl9kZWY7CiAJbmRldi0+ZXRodG9vbF9vcHMgPSAmaXNscGNpX2V0aHRvb2xfb3BzOwogCi0JbmRldi0+aGFyZF9zdGFydF94bWl0ID0gJmlzbHBjaV9ldGhfdHJhbnNtaXQ7CiAJLyogbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmlzbHBjaV9zZXRfbXVsdGljYXN0X2xpc3Q7ICovCiAJbmRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKLQluZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmcHJpc201NF9zZXRfbWFjX2FkZHJlc3M7CiAJLyogR2V0IGEgbm9uLXplcm8gZHVtbXkgTUFDIGFkZHJlc3MgZm9yIG5hbWVpZi4gSmVhbiBJSSAqLwogCW1lbWNweShuZGV2LT5kZXZfYWRkciwgZHVtbXlfbWFjLCA2KTsKIAotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAogCW5kZXYtPndhdGNoZG9nX3RpbWVvID0gSVNMUENJX1RYX1RJTUVPVVQ7Ci0JbmRldi0+dHhfdGltZW91dCA9ICZpc2xwY2lfZXRoX3R4X3RpbWVvdXQ7Ci0jZW5kaWYKIAogCS8qIGFsbG9jYXRlIGEgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlIHRvIHRoZSBuZXR3b3JrIGRldmljZSAgKi8KIAlwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCmluZGV4IDhlNTVhNWYuLmM0ZDBmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCkBAIC0xNTgsOSArMTU4LDYgQEAKIAlkbWFfYWRkcl90IHBjaV9tYXBfdHhfYWRkcmVzc1tJU0wzOFhYX0NCX1RYX1FTSVpFXTsKIAlkbWFfYWRkcl90IHBjaV9tYXBfcnhfYWRkcmVzc1tJU0wzOFhYX0NCX1JYX1FTSVpFXTsKIAotCS8qIGRyaXZlciBuZXR3b3JrIGludGVyZmFjZSBtZW1iZXJzICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdGlzdGljczsKLQogCS8qIHdhaXQgZm9yIGEgcmVzZXQgaW50ZXJydXB0ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfZG9uZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwppbmRleCBlNDNiYWU5Li5lZjNlZjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSAicHJpc21jb21wYXQuaCIKICNpbmNsdWRlICJpc2xfMzh4eC5oIgpAQCAtMjMwLDggKzIzMSw4IEBACiAKIAkvKiBzZXQgdGhlIHRyYW5zbWlzc2lvbiB0aW1lICovCiAJbmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXByaXYtPnN0YXRpc3RpY3MudHhfcGFja2V0cysrOwotCXByaXYtPnN0YXRpc3RpY3MudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJbmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCW5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJLyogdHJpZ2dlciB0aGUgZGV2aWNlICovCiAJaXNscGNpX3RyaWdnZXIocHJpdik7CkBAIC0yNDIsNyArMjQzLDcgQEAKIAlyZXR1cm4gMDsKIAogICAgICAgZHJvcF9mcmVlOgotCXByaXYtPnN0YXRpc3RpY3MudHhfZHJvcHBlZCsrOworCW5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zbG9jaywgZmxhZ3MpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwpAQCAtNDA3LDggKzQwOCw4IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOwogCX0KIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JcHJpdi0+c3RhdGlzdGljcy5yeF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdGlzdGljcy5yeF9ieXRlcyArPSBzaXplOworCW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJLyogZGVsaXZlciB0aGUgc2tiIHRvIHRoZSBuZXR3b3JrIGxheWVyICovCiAjaWZkZWYgSVNMUENJX0VUSF9ERUJVRwpAQCAtNDcxLDggKzQ3Miw4IEBACiAJCXdtYigpOwogCiAJCS8qIGluY3JlbWVudCB0aGUgZHJpdmVyIHJlYWQgcG9pbnRlciAqLwotCQlhZGRfbGUzMnAoJmNvbnRyb2xfYmxvY2stPgotCQkJICBkcml2ZXJfY3Vycl9mcmFnW0lTTDM4WFhfQ0JfUlhfREFUQV9MUV0sIDEpOworCQlsZTMyX2FkZF9jcHUoJmNvbnRyb2xfYmxvY2stPgorCQkJICAgICBkcml2ZXJfY3Vycl9mcmFnW0lTTDM4WFhfQ0JfUlhfREFUQV9MUV0sIDEpOwogCX0KIAogCS8qIHRyaWdnZXIgdGhlIGRldmljZSAqLwpAQCAtNDk2LDEwICs0OTcsOSBAQAogaXNscGNpX2V0aF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRpc3RpY3MgPSAmcHJpdi0+c3RhdGlzdGljczsKIAogCS8qIGluY3JlbWVudCB0aGUgdHJhbnNtaXQgZXJyb3IgY291bnRlciAqLwotCXN0YXRpc3RpY3MtPnR4X2Vycm9ycysrOworCW5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJaWYgKCFwcml2LT5yZXNldF90YXNrX3BlbmRpbmcpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuaAppbmRleCBmOTFhODhmLi44N2ExNzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuaApAQCAtODUsMTIgKzg1LDYgQEAKICNkZWZpbmUgUElNRk9SX0ZMQUdfQVBQTElDX09SSUdJTiAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgUElNRk9SX0ZMQUdfTElUVExFX0VORElBTiAgICAgICAgICAgICAgIDB4MDIKIAotc3RhdGljIGlubGluZSB2b2lkCi1hZGRfbGUzMnAoX19sZTMyICogbGVfbnVtYmVyLCB1MzIgYWRkKQotewotCSpsZV9udW1iZXIgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdXAobGVfbnVtYmVyKSArIGFkZCk7Ci19Ci0KIHZvaWQgZGlzcGxheV9idWZmZXIoY2hhciAqLCBpbnQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYwppbmRleCA1N2E0YWMzLi4xMTg3ZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYwpAQCAtNjk4LDcgKzY5OCw3IEBACiBtZ3RfY29tbWl0KGlzbHBjaV9wcml2YXRlICpwcml2KQogewogCWludCBydmFsdWU7Ci0JdTMyIHU7CisJZW51bSBvaWRfbnVtX3QgdTsKIAogCWlmIChpc2xwY2lfZ2V0X3N0YXRlKHByaXYpIDwgUFJWX1NUQVRFX0lOSVQpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA5OWVjN2Q2Li5mYTkwZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtOCw3ICs4LDcgQEAKICAqIENvcHlyaWdodCAoYykgMTk5OCAgQ29yZXkgVGhvbWFzIChjb3JleUB3b3JsZC5zdGQuY29tKQogICoKICAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb25seSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9ubHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBJdCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApAQCAtMjcsNyArMjcsNyBAQAogICoKICAqIERhbmllbGUgQmVsbHVjY2kgPGJlbGx1Y2RhQHRpc2NhbGkuaXQ+IC0gMDcvMTAvMjAwMwogICogLSBBdWRpdCBjb3B5X3RvX3VzZXIgaW4gaW9jdGwoU0lPQ0dJV0VTU0lEKQotICogCisgKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02NSw4ICs2NSw4IEBACiAvKiBXYXJuaW5nIDogdGhlc2Ugc3R1ZmYgd2lsbCBzbG93IGRvd24gdGhlIGRyaXZlci4uLiAqLwogI2RlZmluZSBXSVJFTEVTU19TUFkJCS8qIEVuYWJsZSBzcHlpbmcgYWRkcmVzc2VzICovCiAvKiBEZWZpbml0aW9ucyB3ZSBuZWVkIGZvciBzcHkgKi8KLXR5cGVkZWYgc3RydWN0IGl3X3N0YXRpc3RpY3MJaXdfc3RhdHM7Ci10eXBlZGVmIHVfY2hhcgltYWNfYWRkcltFVEhfQUxFTl07CS8qIEhhcmR3YXJlIGFkZHJlc3MgKi8KK3R5cGVkZWYgc3RydWN0IGl3X3N0YXRpc3RpY3MgaXdfc3RhdHM7Cit0eXBlZGVmIHVfY2hhciBtYWNfYWRkcltFVEhfQUxFTl07CS8qIEhhcmR3YXJlIGFkZHJlc3MgKi8KIAogI2luY2x1ZGUgInJheWN0bC5oIgogI2luY2x1ZGUgInJheV9jcy5oIgpAQCAtODYsNyArODYsNyBAQAogc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKIC8qICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7ICovCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhhcmdzKTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnID4gKG4pKSBwcmludGsoYXJncyk7CiAjZWxzZQogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQogI2VuZGlmCkBAIC0xMDgsMTIgKzEwOCwxMiBAQAogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhbGwpOwogc3RhdGljIGludCB0cmFuc2xhdGVfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LCBVQ0hBUiBtc2dfdHlwZSwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pOworc3RhdGljIHZvaWQgcmF5X2J1aWxkX2hlYWRlcihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKKwkJCSAgICAgVUNIQVIgbXNnX3R5cGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpOwogc3RhdGljIHZvaWQgdW50cmFuc2xhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbik7Ci1zdGF0aWMgaXdfc3RhdHMgKiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYJcmF5X2hhbmRsZXJfZGVmOworc3RhdGljIGl3X3N0YXRzICpyYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiByYXlfaGFuZGxlcl9kZWY7CiAKIC8qKioqKiBQcm90b3R5cGVzIGZvciByYXlsaW5rIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgYXNjX3RvX2ludChjaGFyIGEpOwpAQCAtMTI0LDcgKzEyNCw3IEBACiBzdGF0aWMgaW50IGdldF9mcmVlX3R4X2NjcyhyYXlfZGV2X3QgKmxvY2FsKTsKIHN0YXRpYyB2b2lkIGluaXRfc3RhcnR1cF9wYXJhbXMocmF5X2Rldl90ICpsb2NhbCk7CiBzdGF0aWMgaW50IHBhcnNlX2FkZHIoY2hhciAqaW5fc3RyLCBVQ0hBUiAqb3V0KTsKLXN0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciogZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgVUNIQVIgdHlwZSk7CitzdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFVDSEFSIHR5cGUpOwogc3RhdGljIGludCByYXlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaW50ZXJydXB0X2VjZihyYXlfZGV2X3QgKmxvY2FsLCBpbnQgY2NzKTsKIHN0YXRpYyB2b2lkIHJheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEzMiwxNyArMTMyLDE3IEBACiBzdGF0aWMgdm9pZCB2ZXJpZnlfZGxfc3RhcnR1cCh1X2xvbmcpOwogCiAvKiBQcm90b3R5cGVzIGZvciBpbnRlcnJwdCB0aW1lIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGlycXJldHVybl90IHJheV9pbnRlcnJ1cHQgKGludCByZWcsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcmF5X2ludGVycnVwdChpbnQgcmVnLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgY2xlYXJfaW50ZXJydXB0KHJheV9kZXZfdCAqbG9jYWwpOwotc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKK3N0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7CiBzdGF0aWMgaW50IGNvcHlfZnJvbV9yeF9idWZmKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgcGt0X2FkZHIsIGludCBsZW4pOwogc3RhdGljIHZvaWQgcmF5X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcyk7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2ZyYWdfY2hhaW4ocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKTsKIHN0YXRpYyB2b2lkIHJ4X2F1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOwotc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIHVuc2lnbmVkIGludCBwa3RfYWRkciwgCi0gICAgICAgICAgICAgaW50IHJ4X2xlbik7CisJCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKK3N0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKIHN0YXRpYyB2b2lkIGFzc29jaWF0ZShyYXlfZGV2X3QgKmxvY2FsKTsKIAogLyogQ2FyZCBjb21tYW5kIGZ1bmN0aW9ucyAqLwpAQCAtMjE5LDgyICsyMTksOTcgQEAKIG1vZHVsZV9wYXJhbShyYXlfbWVtX3NwZWVkLCBpbnQsIDApOwogCiBzdGF0aWMgVUNIQVIgYjVfZGVmYXVsdF9zdGFydHVwX3Bhcm1zW10gPSB7Ci0gICAgMCwgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGhvYyBzdGF0aW9uICovCi0gICAnTCcsJ0knLCdOJywnVScsJ1gnLCAwLCAgMCwgIDAsICAvKiAzMiBjaGFyIEVTU0lEICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMSwgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgICAgICAgICAgLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEZyYWcgdGhyZXNob2xkICovCi0gICAgMHgwMCwgMHg4MCwgICAgICAgICAgICAgICAgICAgICAvKiBIb3AgdGltZSAxMjggS3VzKi8KLSAgICAweDAxLCAweDAwLCAgICAgICAgICAgICAgICAgICAgIC8qIEJlYWNvbiBwZXJpb2QgMjU2IEt1cyAqLwotICAgIDB4MDEsIDB4MDcsIDB4YTMsICAgICAgICAgICAgICAgLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQqLwotICAgIDB4MWQsIDB4ODIsIDB4NGUsICAgICAgICAgICAgICAgLyogU0lGUywgRElGUywgUElGUyAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogUlRTIHRocmVzaG9sZCAqLwotICAgIDB4MDQsIDB4ZTIsIDB4MzgsIDB4QTQsICAgICAgICAgLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KLSAgICAweDA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KLSAgICAweDA4LCAweDAyLCAweDA4LCAgICAgICAgICAgICAgIC8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb21pc2N1b3VzIG1vZGUgKi8KLSAgICAweDBjLCAweDBiZCwgICAgICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSB3b3JkICovCi0gICAgMHgzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbG90IHRpbWUgKi8KLSAgICAweGZmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLwotICAgIDB4MDUsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogSW5mcmEsIGFkaG9jIG1pc3NlZCBiY24gdGhyZXNoICovCi0gICAgMHgwMSwgMHgwYiwgMHg0ZiwgICAgICAgICAgICAgICAvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLworCTAsIDAsCQkJLyogQWRob2Mgc3RhdGlvbiAqLworCSdMJywgJ0knLCAnTicsICdVJywgJ1gnLCAwLCAwLCAwLAkvKiAzMiBjaGFyIEVTU0lEICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMSwgMCwJCQkvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLworCTAsIDAsIDAsIDAsIDAsIDAsCS8qIE5vIGRlZmF1bHQgTUFDIGFkZHIgICovCisJMHg3ZiwgMHhmZiwJCS8qIEZyYWcgdGhyZXNob2xkICovCisJMHgwMCwgMHg4MCwJCS8qIEhvcCB0aW1lIDEyOCBLdXMgKi8KKwkweDAxLCAweDAwLAkJLyogQmVhY29uIHBlcmlvZCAyNTYgS3VzICovCisJMHgwMSwgMHgwNywgMHhhMywJLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQgKi8KKwkweDFkLCAweDgyLCAweDRlLAkvKiBTSUZTLCBESUZTLCBQSUZTICovCisJMHg3ZiwgMHhmZiwJCS8qIFJUUyB0aHJlc2hvbGQgKi8KKwkweDA0LCAweGUyLCAweDM4LCAweEE0LAkvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLworCTB4MDUsCQkJLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLworCTB4MDgsIDB4MDIsIDB4MDgsCS8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4ICovCisJMCwJCQkvKiBQcm9taXNjdW91cyBtb2RlICovCisJMHgwYywgMHgwYmQsCQkvKiBVbmlxdWUgd29yZCAqLworCTB4MzIsCQkJLyogU2xvdCB0aW1lICovCisJMHhmZiwgMHhmZiwJCS8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLworCTB4MDUsIDB4ZmYsCQkvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KKwkweDAxLCAweDBiLCAweDRmLAkvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLwogLyogYjQgLSBiNSBkaWZmZXJlbmNlcyBzdGFydCBoZXJlICovCi0gICAgMHgwMCwgMHgzZiwgICAgICAgICAgICAgICAgICAgICAvKiBDVyBtYXggKi8KLSAgICAweDAwLCAweDBmLCAgICAgICAgICAgICAgICAgICAgIC8qIENXIG1pbiAqLwotICAgIDB4MDQsIDB4MDgsICAgICAgICAgICAgICAgICAgICAgLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCi0gICAgMHgyOCwgMHgyOCwgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLwotICAgIDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHN5bmMgdGhyZXNoICovCi0gICAgMCwgMiwgMiwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbGxvdyBicm9hZGNhc3QgU1NJRCBwcm9iZSByZXNwICovCi0gICAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcml2YWN5IG11c3Qgc3RhcnQsIGNhbiBqb2luICovCi0gICAgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCAgICAgICAgICAvKiBiYXNpYyByYXRlIHNldCAqLworCTB4MDAsIDB4M2YsCQkvKiBDVyBtYXggKi8KKwkweDAwLCAweDBmLAkJLyogQ1cgbWluICovCisJMHgwNCwgMHgwOCwJCS8qIE5vaXNlIGdhaW4sIGxpbWl0IG9mZnNldCAqLworCTB4MjgsIDB4MjgsCQkvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLworCTcsCQkJLyogZGV0IHN5bmMgdGhyZXNoICovCisJMCwgMiwgMiwJCS8qIHRlc3QgbW9kZSwgbWluLCBtYXggKi8KKwkwLAkJCS8qIGFsbG93IGJyb2FkY2FzdCBTU0lEIHByb2JlIHJlc3AgKi8KKwkwLCAwLAkJCS8qIHByaXZhY3kgbXVzdCBzdGFydCwgY2FuIGpvaW4gKi8KKwkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwCS8qIGJhc2ljIHJhdGUgc2V0ICovCiB9OwogCiBzdGF0aWMgVUNIQVIgYjRfZGVmYXVsdF9zdGFydHVwX3Bhcm1zW10gPSB7Ci0gICAgMCwgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGhvYyBzdGF0aW9uICovCi0gICAnTCcsJ0knLCdOJywnVScsJ1gnLCAwLCAgMCwgIDAsICAvKiAzMiBjaGFyIEVTU0lEICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0gICAgMSwgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY3RpdmUgc2NhbiwgQ0EgTW9kZSAqLwotICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgICAgICAgICAgLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KLSAgICAweDdmLCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEZyYWcgdGhyZXNob2xkICovCi0gICAgMHgwMiwgMHgwMCwgICAgICAgICAgICAgICAgICAgICAvKiBIb3AgdGltZSAqLwotICAgIDB4MDAsIDB4MDEsICAgICAgICAgICAgICAgICAgICAgLyogQmVhY29uIHBlcmlvZCAqLwotICAgIDB4MDEsIDB4MDcsIDB4YTMsICAgICAgICAgICAgICAgLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQqLwotICAgIDB4MWQsIDB4ODIsIDB4Y2UsICAgICAgICAgICAgICAgLyogU0lGUywgRElGUywgUElGUyAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogUlRTIHRocmVzaG9sZCAqLwotICAgIDB4ZmIsIDB4MWUsIDB4YzcsIDB4NWMsICAgICAgICAgLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KLSAgICAweDA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KLSAgICAweDA0LCAweDAyLCAweDQsICAgICAgICAgICAgICAgIC8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb21pc2N1b3VzIG1vZGUgKi8KLSAgICAweDBjLCAweDBiZCwgICAgICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSB3b3JkICovCi0gICAgMHg0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbG90IHRpbWUgKFRCRCBzZWVtcyB3cm9uZykqLwotICAgIDB4ZmYsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCi0gICAgMHgwNSwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KLSAgICAweDAxLCAweDBiLCAweDRlLCAgICAgICAgICAgICAgIC8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCisJMCwgMCwJCQkvKiBBZGhvYyBzdGF0aW9uICovCisJJ0wnLCAnSScsICdOJywgJ1UnLCAnWCcsIDAsIDAsIDAsCS8qIDMyIGNoYXIgRVNTSUQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkxLCAwLAkJCS8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCisJMCwgMCwgMCwgMCwgMCwgMCwJLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KKwkweDdmLCAweGZmLAkJLyogRnJhZyB0aHJlc2hvbGQgKi8KKwkweDAyLCAweDAwLAkJLyogSG9wIHRpbWUgKi8KKwkweDAwLCAweDAxLAkJLyogQmVhY29uIHBlcmlvZCAqLworCTB4MDEsIDB4MDcsIDB4YTMsCS8qIERUSU0sIHJldHJpZXMsIGFjayB0aW1lb3V0ICovCisJMHgxZCwgMHg4MiwgMHhjZSwJLyogU0lGUywgRElGUywgUElGUyAqLworCTB4N2YsIDB4ZmYsCQkvKiBSVFMgdGhyZXNob2xkICovCisJMHhmYiwgMHgxZSwgMHhjNywgMHg1YywJLyogc2Nhbl9kd2VsbCwgbWF4X3NjYW5fZHdlbGwgKi8KKwkweDA1LAkJCS8qIGFzc29jIHJlc3AgdGltZW91dCB0aHJlc2ggKi8KKwkweDA0LCAweDAyLCAweDQsCS8qIGFkaG9jLCBpbmZyYSwgc3VwZXIgY3ljbGUgbWF4ICovCisJMCwJCQkvKiBQcm9taXNjdW91cyBtb2RlICovCisJMHgwYywgMHgwYmQsCQkvKiBVbmlxdWUgd29yZCAqLworCTB4NGUsCQkJLyogU2xvdCB0aW1lIChUQkQgc2VlbXMgd3JvbmcpICovCisJMHhmZiwgMHhmZiwJCS8qIHJvYW0tbG93IHNuciwgbG93IHNuciBjb3VudCAqLworCTB4MDUsIDB4ZmYsCQkvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KKwkweDAxLCAweDBiLCAweDRlLAkvKiBVU0EsIGhvcCBwYXR0ZXJuLCBob3AgcGF0IGxlbmd0aCAqLwogLyogYjQgLSBiNSBkaWZmZXJlbmNlcyBzdGFydCBoZXJlICovCi0gICAgMHgzZiwgMHgwZiwgICAgICAgICAgICAgICAgICAgICAvKiBDVyBtYXgsIG1pbiAqLwotICAgIDB4MDQsIDB4MDgsICAgICAgICAgICAgICAgICAgICAgLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCi0gICAgMHgyOCwgMHgyOCwgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgcnNzaSwgbWVkIGJ1c3kgb2Zmc2V0cyAqLwotICAgIDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGV0IHN5bmMgdGhyZXNoICovCi0gICAgMCwgMiwgMiAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4Ki8KKwkweDNmLCAweDBmLAkJLyogQ1cgbWF4LCBtaW4gKi8KKwkweDA0LCAweDA4LAkJLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCisJMHgyOCwgMHgyOCwJCS8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCisJNywJCQkvKiBkZXQgc3luYyB0aHJlc2ggKi8KKwkwLCAyLCAyCQkJLyogdGVzdCBtb2RlLCBtaW4sIG1heCAqLwogfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZXRoMl9sbGNbXSA9IHsweGFhLCAweGFhLCAzLCAwLCAwLCAwfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGV0aDJfbGxjW10gPSB7IDB4YWEsIDB4YWEsIDMsIDAsIDAsIDAgfTsKIAogc3RhdGljIGNoYXIgaG9wX3BhdHRlcm5fbGVuZ3RoW10gPSB7IDEsCi0JICAgICBVU0FfSE9QX01PRCwgICAgICAgICAgICAgRVVST1BFX0hPUF9NT0QsCi0JICAgICBKQVBBTl9IT1BfTU9ELCAgICAgICAgICAgS09SRUFfSE9QX01PRCwKLQkgICAgIFNQQUlOX0hPUF9NT0QsICAgICAgICAgICBGUkFOQ0VfSE9QX01PRCwKLQkgICAgIElTUkFFTF9IT1BfTU9ELCAgICAgICAgICBBVVNUUkFMSUFfSE9QX01PRCwKLQkgICAgIEpBUEFOX1RFU1RfSE9QX01PRAorCVVTQV9IT1BfTU9ELCBFVVJPUEVfSE9QX01PRCwKKwlKQVBBTl9IT1BfTU9ELCBLT1JFQV9IT1BfTU9ELAorCVNQQUlOX0hPUF9NT0QsIEZSQU5DRV9IT1BfTU9ELAorCUlTUkFFTF9IT1BfTU9ELCBBVVNUUkFMSUFfSE9QX01PRCwKKwlKQVBBTl9URVNUX0hPUF9NT0QKIH07CiAKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiUmF5bGluay9XZWJHZWFyIHdpcmVsZXNzIExBTiAtIENvcmV5IDxUaG9tYXMgY29yZXlAd29ybGQuc3RkLmNvbT4iOworc3RhdGljIGNoYXIgcmNzaWRbXSA9CisgICAgIlJheWxpbmsvV2ViR2VhciB3aXJlbGVzcyBMQU4gLSBDb3JleSA8VGhvbWFzIGNvcmV5QHdvcmxkLnN0ZC5jb20+IjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByYXlfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQgCQk9IHJheV9kZXZfaW5pdCwKKwkubmRvX29wZW4gCQk9IHJheV9vcGVuLAorCS5uZG9fc3RvcCAJCT0gcmF5X2Rldl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcmF5X2Rldl9zdGFydF94bWl0LAorCS5uZG9fc2V0X2NvbmZpZwkJPSByYXlfZGV2X2NvbmZpZywKKwkubmRvX2dldF9zdGF0cwkJPSByYXlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgcmF5X2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC0zMDYsNzEgKzMyMSw2NiBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWw7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlyYXlfZGV2X3QgKmxvY2FsOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLSAgICBERUJVRygxLCAicmF5X2F0dGFjaCgpXG4iKTsKKwlERUJVRygxLCAicmF5X2F0dGFjaCgpXG4iKTsKIAotICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCi0gICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHJheV9kZXZfdCkpOwotICAgIGlmICghZGV2KQotCSAgICBnb3RvIGZhaWxfYWxsb2NfZGV2OworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHJheV9kZXZfdCkpOworCWlmICghZGV2KQorCQlnb3RvIGZhaWxfYWxsb2NfZGV2OwogCi0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxvY2FsLT5maW5kZXIgPSBwX2RldjsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJbG9jYWwtPmZpbmRlciA9IHBfZGV2OwogCi0gICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nLiBOb25lIHVzZWQgaGVyZSAqLwotICAgIHBfZGV2LT5pby5OdW1Qb3J0czEgPSAwOwotICAgIHBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIHBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDU7CisJLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nLiBOb25lIHVzZWQgaGVyZSAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSAwOworCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDU7CiAKLSAgICAvKiBJbnRlcnJ1cHQgc2V0dXAuIEZvciBQQ01DSUEsIGRyaXZlciB0YWtlcyB3aGF0J3MgZ2l2ZW4gKi8KLSAgICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0gICAgcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICBwX2Rldi0+aXJxLkhhbmRsZXIgPSAmcmF5X2ludGVycnVwdDsKKwkvKiBJbnRlcnJ1cHQgc2V0dXAuIEZvciBQQ01DSUEsIGRyaXZlciB0YWtlcyB3aGF0J3MgZ2l2ZW4gKi8KKwlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlwX2Rldi0+aXJxLkhhbmRsZXIgPSAmcmF5X2ludGVycnVwdDsKIAotICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KLSAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwotICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLSAgICBwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IDE7CisJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLworCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAotICAgIHBfZGV2LT5wcml2ID0gZGV2OwotICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7Ci0gICAgCi0gICAgbG9jYWwtPmZpbmRlciA9IHBfZGV2OwotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5TRVJURUQ7Ci0gICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwotICAgIGxvY2FsLT5udW1fbXVsdGkgPSAwOwotICAgIERFQlVHKDIsInJheV9hdHRhY2ggcF9kZXYgPSAlcCwgIGRldiA9ICVwLCAgbG9jYWwgPSAlcCwgaW50ciA9ICVwXG4iLAotICAgICAgICAgIHBfZGV2LGRldixsb2NhbCwmcmF5X2ludGVycnVwdCk7CisJcF9kZXYtPnByaXYgPSBkZXY7CisJcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKIAotICAgIC8qIFJheWxpbmsgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJnJheV9kZXZfc3RhcnRfeG1pdDsKLSAgICBkZXYtPnNldF9jb25maWcgPSAmcmF5X2Rldl9jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgID0gJnJheV9nZXRfc3RhdHM7Ci0gICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7Ci0gICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZyYXlfaGFuZGxlcl9kZWY7CisJbG9jYWwtPmZpbmRlciA9IHBfZGV2OworCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5TRVJURUQ7CisJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOworCWxvY2FsLT5udW1fbXVsdGkgPSAwOworCURFQlVHKDIsICJyYXlfYXR0YWNoIHBfZGV2ID0gJXAsICBkZXYgPSAlcCwgIGxvY2FsID0gJXAsIGludHIgPSAlcFxuIiwKKwkgICAgICBwX2RldiwgZGV2LCBsb2NhbCwgJnJheV9pbnRlcnJ1cHQpOworCisJLyogUmF5bGluayBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCisJZGV2LT5uZXRkZXZfb3BzID0gJnJheV9uZXRkZXZfb3BzOworCVNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcmF5X2hhbmRsZXJfZGVmOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIGxvY2FsLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJmxvY2FsLT5zcHlfZGF0YTsKLSAgICBkZXYtPndpcmVsZXNzX2RhdGEgPSAmbG9jYWwtPndpcmVsZXNzX2RhdGE7Ci0jZW5kaWYJLyogV0lSRUxFU1NfU1BZICovCisJbG9jYWwtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmbG9jYWwtPnNweV9kYXRhOworCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZsb2NhbC0+d2lyZWxlc3NfZGF0YTsKKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KIAotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKIAotICAgIERFQlVHKDIsInJheV9jcyByYXlfYXR0YWNoIGNhbGxpbmcgZXRoZXJfc2V0dXAuKVxuIik7Ci0gICAgZGV2LT5pbml0ID0gJnJheV9kZXZfaW5pdDsKLSAgICBkZXYtPm9wZW4gPSAmcmF5X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJnJheV9kZXZfY2xvc2U7Ci0gICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCURFQlVHKDIsICJyYXlfY3MgcmF5X2F0dGFjaCBjYWxsaW5nIGV0aGVyX3NldHVwLilcbiIpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotICAgIGluaXRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJaW5pdF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIHRoaXNfZGV2aWNlID0gcF9kZXY7Ci0gICAgcmV0dXJuIHJheV9jb25maWcocF9kZXYpOworCXRoaXNfZGV2aWNlID0gcF9kZXY7CisJcmV0dXJuIHJheV9jb25maWcocF9kZXYpOwogCiBmYWlsX2FsbG9jX2RldjoKLSAgICByZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gLUVOT01FTTsKIH0gLyogcmF5X2F0dGFjaCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKICAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKQEAgLTM3OSwyNSArMzg5LDI3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXJheV9kZXZfdCAqbG9jYWw7CiAKLSAgICBERUJVRygxLCAicmF5X2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJREVCVUcoMSwgInJheV9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCi0gICAgdGhpc19kZXZpY2UgPSBOVUxMOwotICAgIGRldiA9IGxpbmstPnByaXY7CisJdGhpc19kZXZpY2UgPSBOVUxMOworCWRldiA9IGxpbmstPnByaXY7CiAKLSAgICByYXlfcmVsZWFzZShsaW5rKTsKKwlyYXlfcmVsZWFzZShsaW5rKTsKIAotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKIAotICAgIGlmIChsaW5rLT5wcml2KSB7Ci0JaWYgKGxpbmstPmRldl9ub2RlKSB1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotICAgICAgICBmcmVlX25ldGRldihkZXYpOwotICAgIH0KLSAgICBERUJVRygyLCJyYXlfY3MgcmF5X2RldGFjaCBlbmRpbmdcbiIpOworCWlmIChsaW5rLT5wcml2KSB7CisJCWlmIChsaW5rLT5kZXZfbm9kZSkKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJfQorCURFQlVHKDIsICJyYXlfY3MgcmF5X2RldGFjaCBlbmRpbmdcbiIpOwogfSAvKiByYXlfZGV0YWNoICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICByYXlfY29uZmlnKCkgaXMgcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKICAgICBpcyByZWNlaXZlZCwgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0LCBhbmQgdG8gbWFrZSB0aGUKQEAgLTQwOCw5MiArNDIwLDEwMSBAQAogI2RlZmluZSBNQVhfVFVQTEVfU0laRSAxMjgKIHN0YXRpYyBpbnQgcmF5X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBpbnQgbGFzdF9mbiA9IDAsIGxhc3RfcmV0ID0gMDsKLSAgICBpbnQgaTsKLSAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbGFzdF9mbiA9IDAsIGxhc3RfcmV0ID0gMDsKKwlpbnQgaTsKKwl3aW5fcmVxX3QgcmVxOworCW1lbXJlcV90IG1lbTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICAgIERFQlVHKDEsICJyYXlfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKwlERUJVRygxLCAicmF5X2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICAvKiBEZXRlcm1pbmUgY2FyZCB0eXBlIGFuZCBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIERldGVjdGVkOiAlcyVzJXMlc1xuIiwKLQkgICBsaW5rLT5wcm9kX2lkWzBdID8gbGluay0+cHJvZF9pZFswXSA6ICIgIiwKLQkgICBsaW5rLT5wcm9kX2lkWzFdID8gbGluay0+cHJvZF9pZFsxXSA6ICIgIiwKLQkgICBsaW5rLT5wcm9kX2lkWzJdID8gbGluay0+cHJvZF9pZFsyXSA6ICIgIiwKLQkgICBsaW5rLT5wcm9kX2lkWzNdID8gbGluay0+cHJvZF9pZFszXSA6ICIgIik7CisJLyogRGV0ZXJtaW5lIGNhcmQgdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiAqLworCXByaW50ayhLRVJOX0lORk8gInJheV9jcyBEZXRlY3RlZDogJXMlcyVzJXNcbiIsCisJICAgICAgIGxpbmstPnByb2RfaWRbMF0gPyBsaW5rLT5wcm9kX2lkWzBdIDogIiAiLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzFdID8gbGluay0+cHJvZF9pZFsxXSA6ICIgIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFsyXSA/IGxpbmstPnByb2RfaWRbMl0gOiAiICIsCisJICAgICAgIGxpbmstPnByb2RfaWRbM10gPyBsaW5rLT5wcm9kX2lkWzNdIDogIiAiKTsKIAotICAgIC8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90Ci0gICAgICAgYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgotICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLSAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKLSAgICAKLSAgICAvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAotICAgICAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgotICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwkvKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorCSAgIGFjdHVhbGx5IGFzc2lnbiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KKwkgKi8KKwlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCisJLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KKwkgKi8KKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKKwkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogLyoqKiBTZXQgdXAgMzJrIHdpbmRvdyBmb3Igc2hhcmVkIG1lbW9yeSAodHJhbnNtaXQgYW5kIGNvbnRyb2wpICoqKioqKioqKioqKi8KLSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOwotICAgIHJlcS5CYXNlID0gMDsKLSAgICByZXEuU2l6ZSA9IDB4ODAwMDsKLSAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpOwotICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOyBtZW0uUGFnZSA9IDA7Ci0gICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKTsKLSAgICBsb2NhbC0+c3JhbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOworCXJlcS5BdHRyaWJ1dGVzID0KKwkgICAgV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7CisJcmVxLkJhc2UgPSAwOworCXJlcS5TaXplID0gMHg4MDAwOworCXJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7CisJQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSk7CisJbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7CisJbWVtLlBhZ2UgPSAwOworCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSk7CisJbG9jYWwtPnNyYW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAKIC8qKiogU2V0IHVwIDE2ayB3aW5kb3cgZm9yIHNoYXJlZCBtZW1vcnkgKHJlY2VpdmUgYnVmZmVyKSAqKioqKioqKioqKioqKiovCi0gICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKLSAgICByZXEuQmFzZSA9IDA7Ci0gICAgcmVxLlNpemUgPSAweDQwMDA7Ci0gICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpKTsKLSAgICBtZW0uQ2FyZE9mZnNldCA9IDB4ODAwMDsgbWVtLlBhZ2UgPSAwOwotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPnJtZW1faGFuZGxlLCAmbWVtKSk7Ci0gICAgbG9jYWwtPnJtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKKwlyZXEuQXR0cmlidXRlcyA9CisJICAgIFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOworCXJlcS5CYXNlID0gMDsKKwlyZXEuU2l6ZSA9IDB4NDAwMDsKKwlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOworCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csCisJCSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpKTsKKwltZW0uQ2FyZE9mZnNldCA9IDB4ODAwMDsKKwltZW0uUGFnZSA9IDA7CisJQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+cm1lbV9oYW5kbGUsICZtZW0pKTsKKwlsb2NhbC0+cm1lbSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAogLyoqKiBTZXQgdXAgd2luZG93IGZvciBhdHRyaWJ1dGUgbWVtb3J5ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9BTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7Ci0gICAgcmVxLkJhc2UgPSAwOwotICAgIHJlcS5TaXplID0gMHgxMDAwOwotICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPmFtZW1faGFuZGxlKSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7IG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5hbWVtX2hhbmRsZSwgJm1lbSkpOwotICAgIGxvY2FsLT5hbWVtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CisJcmVxLkF0dHJpYnV0ZXMgPQorCSAgICBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0FNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKKwlyZXEuQmFzZSA9IDA7CisJcmVxLlNpemUgPSAweDEwMDA7CisJcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKKwlDU19DSEVDSyhSZXF1ZXN0V2luZG93LAorCQkgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbG9jYWwtPmFtZW1faGFuZGxlKSk7CisJbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7CisJbWVtLlBhZ2UgPSAwOworCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPmFtZW1faGFuZGxlLCAmbWVtKSk7CisJbG9jYWwtPmFtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAKLSAgICBERUJVRygzLCJyYXlfY29uZmlnIHNyYW09JXBcbiIsbG9jYWwtPnNyYW0pOwotICAgIERFQlVHKDMsInJheV9jb25maWcgcm1lbT0lcFxuIixsb2NhbC0+cm1lbSk7Ci0gICAgREVCVUcoMywicmF5X2NvbmZpZyBhbWVtPSVwXG4iLGxvY2FsLT5hbWVtKTsKLSAgICBpZiAocmF5X2luaXQoZGV2KSA8IDApIHsKLSAgICAgICAgcmF5X3JlbGVhc2UobGluayk7Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KKwlERUJVRygzLCAicmF5X2NvbmZpZyBzcmFtPSVwXG4iLCBsb2NhbC0+c3JhbSk7CisJREVCVUcoMywgInJheV9jb25maWcgcm1lbT0lcFxuIiwgbG9jYWwtPnJtZW0pOworCURFQlVHKDMsICJyYXlfY29uZmlnIGFtZW09JXBcbiIsIGxvY2FsLT5hbWVtKTsKKwlpZiAocmF5X2luaXQoZGV2KSA8IDApIHsKKwkJcmF5X3JlbGVhc2UobGluayk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwotICAgIGkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLSAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgIHByaW50aygicmF5X2NvbmZpZyByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwotICAgICAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQorCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOworCWkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoaSAhPSAwKSB7CisJCXByaW50aygicmF5X2NvbmZpZyByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOworCQlyYXlfcmVsZWFzZShsaW5rKTsKKwkJcmV0dXJuIGk7CisJfQogCi0gICAgc3RyY3B5KGxvY2FsLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOwotICAgIGxpbmstPmRldl9ub2RlID0gJmxvY2FsLT5ub2RlOworCXN0cmNweShsb2NhbC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKKwlsaW5rLT5kZXZfbm9kZSA9ICZsb2NhbC0+bm9kZTsKIAotICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSYXlMaW5rLCBpcnEgJWQsIGh3X2FkZHIgJXBNXG4iLAotICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBSYXlMaW5rLCBpcnEgJWQsIGh3X2FkZHIgJXBNXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiBjc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAotICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgIHJldHVybiAtRU5PREVWOworCXJheV9yZWxlYXNlKGxpbmspOworCXJldHVybiAtRU5PREVWOwogfSAvKiByYXlfY29uZmlnICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNjcyBfX2lvbWVtICpjY3NfYmFzZShyYXlfZGV2X3QgKmRldikKQEAgLTUxNiwyNjcgKzUzNywyNzggQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBpbnQgaTsKLSAgICBVQ0hBUiAqcDsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIERFQlVHKDEsICJyYXlfaW5pdCgweCVwKVxuIiwgZGV2KTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDAsInJheV9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwlpbnQgaTsKKwlVQ0hBUiAqcDsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCURFQlVHKDEsICJyYXlfaW5pdCgweCVwKVxuIiwgZGV2KTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDAsICJyYXlfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICBsb2NhbC0+bmV0X3R5cGUgPSBuZXRfdHlwZTsKLSAgICBsb2NhbC0+c3RhX3R5cGUgPSBUWVBFX1NUQTsKKwlsb2NhbC0+bmV0X3R5cGUgPSBuZXRfdHlwZTsKKwlsb2NhbC0+c3RhX3R5cGUgPSBUWVBFX1NUQTsKIAotICAgIC8qIENvcHkgdGhlIHN0YXJ0dXAgcmVzdWx0cyB0byBsb2NhbCBtZW1vcnkgKi8KLSAgICBtZW1jcHlfZnJvbWlvKCZsb2NhbC0+c3RhcnR1cF9yZXMsIGxvY2FsLT5zcmFtICsgRUNGX1RPX0hPU1RfQkFTRSxcCi0gICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RhcnR1cF9yZXNfNikpOworCS8qIENvcHkgdGhlIHN0YXJ0dXAgcmVzdWx0cyB0byBsb2NhbCBtZW1vcnkgKi8KKwltZW1jcHlfZnJvbWlvKCZsb2NhbC0+c3RhcnR1cF9yZXMsIGxvY2FsLT5zcmFtICsgRUNGX1RPX0hPU1RfQkFTRSwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBzdGFydHVwX3Jlc182KSk7CiAKLSAgICAvKiBDaGVjayBQb3dlciB1cCB0ZXN0IHN0YXR1cyBhbmQgZ2V0IG1hYyBhZGRyZXNzIGZyb20gY2FyZCAqLwotICAgIGlmIChsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkICE9IDB4ODApIHsKLSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfaW5pdCBFUlJPUiBjYXJkIHN0YXR1cyA9ICUyeFxuIiwKLSAgICAgICAgICAgbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXJ0dXBfd29yZCk7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfSU5JVF9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwkvKiBDaGVjayBQb3dlciB1cCB0ZXN0IHN0YXR1cyBhbmQgZ2V0IG1hYyBhZGRyZXNzIGZyb20gY2FyZCAqLworCWlmIChsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkICE9IDB4ODApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2luaXQgRVJST1IgY2FyZCBzdGF0dXMgPSAlMnhcbiIsCisJCSAgICAgICBsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTklUX0VSUk9SOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgbG9jYWwtPmZ3X3ZlciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzBdOwotICAgIGxvY2FsLT5md19ibGQgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsxXTsKLSAgICBsb2NhbC0+ZndfdmFyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMl07Ci0gICAgREVCVUcoMSwicmF5X2luaXQgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBcbiIsbG9jYWwtPmZ3X3ZlciwgbG9jYWwtPmZ3X2JsZCk7CisJbG9jYWwtPmZ3X3ZlciA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzBdOworCWxvY2FsLT5md19ibGQgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsxXTsKKwlsb2NhbC0+ZndfdmFyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMl07CisJREVCVUcoMSwgInJheV9pbml0IGZpcm13YXJlIHZlcnNpb24gJWQuJWQgXG4iLCBsb2NhbC0+ZndfdmVyLAorCSAgICAgIGxvY2FsLT5md19ibGQpOwogCi0gICAgbG9jYWwtPnRpYl9sZW5ndGggPSAweDIwOwotICAgIGlmICgobG9jYWwtPmZ3X3ZlciA9PSA1KSAmJiAobG9jYWwtPmZ3X2JsZCA+PSAzMCkpCi0gICAgICAgIGxvY2FsLT50aWJfbGVuZ3RoID0gbG9jYWwtPnN0YXJ0dXBfcmVzLnRpYl9sZW5ndGg7Ci0gICAgREVCVUcoMiwicmF5X2luaXQgdGliX2xlbmd0aCA9IDB4JTAyeFxuIiwgbG9jYWwtPnRpYl9sZW5ndGgpOwotICAgIC8qIEluaXRpYWxpemUgQ0NTJ3MgdG8gYnVmZmVyIGZyZWUgc3RhdGUgKi8KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpOwotICAgIGZvciAoaT0wOyAgaTxOVU1CRVJfT0ZfQ0NTOyAgaSsrKSB7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQotICAgIGluaXRfc3RhcnR1cF9wYXJhbXMobG9jYWwpOworCWxvY2FsLT50aWJfbGVuZ3RoID0gMHgyMDsKKwlpZiAoKGxvY2FsLT5md192ZXIgPT0gNSkgJiYgKGxvY2FsLT5md19ibGQgPj0gMzApKQorCQlsb2NhbC0+dGliX2xlbmd0aCA9IGxvY2FsLT5zdGFydHVwX3Jlcy50aWJfbGVuZ3RoOworCURFQlVHKDIsICJyYXlfaW5pdCB0aWJfbGVuZ3RoID0gMHglMDJ4XG4iLCBsb2NhbC0+dGliX2xlbmd0aCk7CisJLyogSW5pdGlhbGl6ZSBDQ1MncyB0byBidWZmZXIgZnJlZSBzdGF0ZSAqLworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCk7CisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9DQ1M7IGkrKykgeworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCX0KKwlpbml0X3N0YXJ0dXBfcGFyYW1zKGxvY2FsKTsKIAotICAgIC8qIGNvcHkgbWFjIGFkZHJlc3MgdG8gc3RhcnR1cCBwYXJhbWV0ZXJzICovCi0gICAgaWYgKHBhcnNlX2FkZHIocGh5X2FkZHIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyKSkKLSAgICB7Ci0gICAgICAgIHAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbWVtY3B5KCZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwKLSAgICAgICAgICAgICAgICZsb2NhbC0+c3RhcnR1cF9yZXMuc3RhdGlvbl9hZGRyLCBBRERSTEVOKTsKLSAgICAgICAgcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOwotICAgIH0KKwkvKiBjb3B5IG1hYyBhZGRyZXNzIHRvIHN0YXJ0dXAgcGFyYW1ldGVycyAqLworCWlmIChwYXJzZV9hZGRyKHBoeV9hZGRyLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcikpIHsKKwkJcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOworCX0gZWxzZSB7CisJCW1lbWNweSgmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsCisJCSAgICAgICAmbG9jYWwtPnN0YXJ0dXBfcmVzLnN0YXRpb25fYWRkciwgQUREUkxFTik7CisJCXAgPSBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkcjsKKwl9CiAKLSAgICBjbGVhcl9pbnRlcnJ1cHQobG9jYWwpOyAvKiBDbGVhciBhbnkgaW50ZXJydXB0IGZyb20gdGhlIGNhcmQgKi8KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FXQUlUSU5HX1BBUkFNOwotICAgIERFQlVHKDIsInJheV9pbml0IGVuZGluZ1xuIik7Ci0gICAgcmV0dXJuIDA7CisJY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsJLyogQ2xlYXIgYW55IGludGVycnVwdCBmcm9tIHRoZSBjYXJkICovCisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BV0FJVElOR19QQVJBTTsKKwlERUJVRygyLCAicmF5X2luaXQgZW5kaW5nXG4iKTsKKwlyZXR1cm4gMDsKIH0gLyogcmF5X2luaXQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzIHRvIHRoZSBjYXJkIGFuZCBjb21tYW5kIGl0IHRvIHJlYWQgdGhlbSAgICAgICAqLwogc3RhdGljIGludCBkbF9zdGFydHVwX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIGludCBjY3NpbmRleDsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBjY3NpbmRleDsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgREVCVUcoMSwiZGxfc3RhcnR1cF9wYXJhbXMgZW50ZXJlZFxuIik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIAotICAgIC8qIENvcHkgcGFyYW1ldGVycyB0byBob3N0IHRvIEVDRiBhcmVhICovCi0gICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgCi0gICAgICAgIG1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNCwKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNSwKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKKwlERUJVRygxLCAiZGxfc3RhcnR1cF9wYXJhbXMgZW50ZXJlZFxuIik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIAotICAgIC8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSByZXR1cm4gLTE7Ci0gICAgbG9jYWwtPmRsX3BhcmFtX2NjcyA9IGNjc2luZGV4OwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TLCAmcGNjcy0+Y21kKTsKLSAgICBERUJVRygyLCJkbF9zdGFydHVwX3BhcmFtcyBzdGFydCBjY3NpbmRleCA9ICVkXG4iLCBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gInJheSBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCi0gICAgICAgICAgICJFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIC0yOwotICAgIH0KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNOwotICAgIC8qIFN0YXJ0IGtlcm5lbCB0aW1lciB0byB3YWl0IGZvciBkbCBzdGFydHVwIHRvIGNvbXBsZXRlLiAqLwotICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaLzI7Ci0gICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmdmVyaWZ5X2RsX3N0YXJ0dXA7Ci0gICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIERFQlVHKDIsInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyBzdGFydGVkIHRpbWVyIGZvciB2ZXJpZnlfZGxfc3RhcnR1cFxuIik7Ci0gICAgcmV0dXJuIDA7CisJLyogQ29weSBwYXJhbWV0ZXJzIHRvIGhvc3QgdG8gRUNGIGFyZWEgKi8KKwlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQorCQltZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjQsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOworCWVsc2UKKwkJbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI1LAorCQkJICAgIHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpKTsKKworCS8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQorCQlyZXR1cm4gLTE7CisJbG9jYWwtPmRsX3BhcmFtX2NjcyA9IGNjc2luZGV4OworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TLCAmcGNjcy0+Y21kKTsKKwlERUJVRygyLCAiZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnQgY2NzaW5kZXggPSAlZFxuIiwKKwkgICAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheSBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCisJCSAgICAgICAiRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybiAtMjsKKwl9CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTTsKKwkvKiBTdGFydCBrZXJuZWwgdGltZXIgdG8gd2FpdCBmb3IgZGwgc3RhcnR1cCB0byBjb21wbGV0ZS4gKi8KKwlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAvIDI7CisJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmdmVyaWZ5X2RsX3N0YXJ0dXA7CisJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCURFQlVHKDIsCisJICAgICAgInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyBzdGFydGVkIHRpbWVyIGZvciB2ZXJpZnlfZGxfc3RhcnR1cFxuIik7CisJcmV0dXJuIDA7CiB9IC8qIGRsX3N0YXJ0dXBfcGFyYW1zICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGluaXRfc3RhcnR1cF9wYXJhbXMocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBpbnQgaTsgCisJaW50IGk7CiAKLSAgICBpZiAoY291bnRyeSA+IEpBUEFOX1RFU1QpIGNvdW50cnkgPSBVU0E7Ci0gICAgZWxzZQotICAgICAgICBpZiAoY291bnRyeSA8IFVTQSkgY291bnRyeSA9IFVTQTsKLSAgICAvKiBzdHJ1Y3R1cmUgZm9yIGhvcCB0aW1lIGFuZCBiZWFjb24gcGVyaW9kIGlzIGRlZmluZWQgaGVyZSB1c2luZyAKLSAgICAgKiBOZXcgODAyLjExRDYuMSBmb3JtYXQuICBDYXJkIGZpcm13YXJlIGlzIHN0aWxsIHVzaW5nIG9sZCBmb3JtYXQKLSAgICAgKiB1bnRpbCB2ZXJzaW9uIDYuCi0gICAgICogICAgQmVmb3JlICAgICAgICAgICAgICAgICAgICBBZnRlcgotICAgICAqICAgIGFfaG9wX3RpbWUgbXMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBtcyBieXRlCi0gICAgICogICAgYV9ob3BfdGltZSAycyBieXRlICAgICAgICBhX2hvcF90aW1lIGxzIGJ5dGUKLSAgICAgKiAgICBhX2hvcF90aW1lIGxzIGJ5dGUgICAgICAgIGFfYmVhY29uX3BlcmlvZCBtcyBieXRlCi0gICAgICogICAgYV9iZWFjb25fcGVyaW9kICAgICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbHMgYnl0ZQotICAgICAqCi0gICAgICogICAgYV9ob3BfdGltZSA9IHVTICAgICAgICAgICBhX2hvcF90aW1lID0gS3VTCi0gICAgICogICAgYV9iZWFjb25fcGVyaW9kID0gaG9wcyAgICBhX2JlYWNvbl9wZXJpb2QgPSBLdVMKLSAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY0bXMgPSAwMTAwMDAgKi8KLSAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAgewotICAgICAgICBtZW1jcHkoKFVDSEFSICopJmxvY2FsLT5zcGFybS5iNCwgYjRfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLCAKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKLSAgICAgICAgLyogVHJhbnNsYXRlIHNhbmUga3VzIGlucHV0IHZhbHVlcyB0byBvbGQgYnVpbGQgNC81IGZvcm1hdCAqLwotICAgICAgICAvKiBpID0gaG9wIHRpbWUgaW4gdVMgdHJ1bmNhdGVkIHRvIDMgYnl0ZXMgKi8KLSAgICAgICAgaSA9IChob3BfZHdlbGwgKiAxMDI0KSAmIDB4ZmZmZmZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVswXSA9IChpID4+IDE2KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzFdID0gKGkgPj4gOCkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzBdID0gMDsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFsxXSA9Ci0gICAgICAgICAgICAoKGJlYWNvbl9wZXJpb2QvaG9wX2R3ZWxsKSAtIDEpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfcGF0dGVybl9sZW5ndGggPSAKLSAgICAgICAgICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldIC0gMTsKLSAgICAgICAgaWYgKGJjKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9hY2tfdGltZW91dCA9IDB4NTA7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9zaWZzID0gMHgzZjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsgICAgLyogVmVyc2lvbiA1IHVzZXMgcmVhbCBrdXMgdmFsdWVzICovCi0gICAgICAgIG1lbWNweSgoVUNIQVIgKikmbG9jYWwtPnNwYXJtLmI1LCBiNV9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsIAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOworCWlmIChjb3VudHJ5ID4gSkFQQU5fVEVTVCkKKwkJY291bnRyeSA9IFVTQTsKKwllbHNlIGlmIChjb3VudHJ5IDwgVVNBKQorCQljb3VudHJ5ID0gVVNBOworCS8qIHN0cnVjdHVyZSBmb3IgaG9wIHRpbWUgYW5kIGJlYWNvbiBwZXJpb2QgaXMgZGVmaW5lZCBoZXJlIHVzaW5nCisJICogTmV3IDgwMi4xMUQ2LjEgZm9ybWF0LiAgQ2FyZCBmaXJtd2FyZSBpcyBzdGlsbCB1c2luZyBvbGQgZm9ybWF0CisJICogdW50aWwgdmVyc2lvbiA2LgorCSAqICAgIEJlZm9yZSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIKKwkgKiAgICBhX2hvcF90aW1lIG1zIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbXMgYnl0ZQorCSAqICAgIGFfaG9wX3RpbWUgMnMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBscyBieXRlCisJICogICAgYV9ob3BfdGltZSBscyBieXRlICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbXMgYnl0ZQorCSAqICAgIGFfYmVhY29uX3BlcmlvZCAgICAgICAgICAgYV9iZWFjb25fcGVyaW9kIGxzIGJ5dGUKKwkgKgorCSAqICAgIGFfaG9wX3RpbWUgPSB1UyAgICAgICAgICAgYV9ob3BfdGltZSA9IEt1UworCSAqICAgIGFfYmVhY29uX3BlcmlvZCA9IGhvcHMgICAgYV9iZWFjb25fcGVyaW9kID0gS3VTCisJICovLyogNjRtcyA9IDAxMDAwMCAqLworCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpIHsKKwkJbWVtY3B5KChVQ0hBUiAqKSAmbG9jYWwtPnNwYXJtLmI0LCBiNF9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7CisJCS8qIFRyYW5zbGF0ZSBzYW5lIGt1cyBpbnB1dCB2YWx1ZXMgdG8gb2xkIGJ1aWxkIDQvNSBmb3JtYXQgKi8KKwkJLyogaSA9IGhvcCB0aW1lIGluIHVTIHRydW5jYXRlZCB0byAzIGJ5dGVzICovCisJCWkgPSAoaG9wX2R3ZWxsICogMTAyNCkgJiAweGZmZmZmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMF0gPSAoaSA+PiAxNikgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVsxXSA9IChpID4+IDgpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFswXSA9IDA7CisJCWxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMV0gPQorCQkgICAgKChiZWFjb25fcGVyaW9kIC8gaG9wX2R3ZWxsKSAtIDEpICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OworCQlsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfcGF0dGVybl9sZW5ndGggPQorCQkgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV0gLSAxOworCQlpZiAoYmMpIHsKKwkJCWxvY2FsLT5zcGFybS5iNC5hX2Fja190aW1lb3V0ID0gMHg1MDsKKwkJCWxvY2FsLT5zcGFybS5iNC5hX3NpZnMgPSAweDNmOworCQl9CisJfSBlbHNlIHsgLyogVmVyc2lvbiA1IHVzZXMgcmVhbCBrdXMgdmFsdWVzICovCisJCW1lbWNweSgoVUNIQVIgKikgJmxvY2FsLT5zcGFybS5iNSwgYjVfZGVmYXVsdF9zdGFydHVwX3Bhcm1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOwogCi0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzBdID0gKGhvcF9kd2VsbCA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzFdID0gaG9wX2R3ZWxsICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFswXSA9IChiZWFjb25fcGVyaW9kID4+IDgpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFsxXSA9IGJlYWNvbl9wZXJpb2QgJiAweGZmOwotICAgICAgICBpZiAocHNtKQotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfcG93ZXJfbWd0X3N0YXRlID0gMTsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUgPSBjb3VudHJ5OwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfcGF0dGVybl9sZW5ndGggPSAKLSAgICAgICAgICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOwotICAgIH0KLSAgICAKLSAgICBsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPSBuZXRfdHlwZSAmIDB4MDE7Ci0gICAgbG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cyA9IFRZUEVfU1RBOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVswXSA9IChob3BfZHdlbGwgPj4gOCkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9ob3BfdGltZVsxXSA9IGhvcF9kd2VsbCAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMF0gPQorCQkgICAgKGJlYWNvbl9wZXJpb2QgPj4gOCkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzFdID0gYmVhY29uX3BlcmlvZCAmIDB4ZmY7CisJCWlmIChwc20pCisJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wb3dlcl9tZ3Rfc3RhdGUgPSAxOworCQlsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7CisJCWxvY2FsLT5zcGFybS5iNS5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9CisJCSAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsKKwl9CiAKLSAgICBpZiAoZXNzaWQgIT0gTlVMTCkKLSAgICAgICAgc3RybmNweShsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCwgZXNzaWQsIEVTU0lEX1NJWkUpOwotfSAvKiBpbml0X3N0YXJ0dXBfcGFyYW1zICovIAorCWxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9IG5ldF90eXBlICYgMHgwMTsKKwlsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzID0gVFlQRV9TVEE7CisKKwlpZiAoZXNzaWQgIT0gTlVMTCkKKwkJc3RybmNweShsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCwgZXNzaWQsIEVTU0lEX1NJWkUpOworfSAvKiBpbml0X3N0YXJ0dXBfcGFyYW1zICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHZlcmlmeV9kbF9zdGFydHVwKHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBsb2NhbC0+ZGxfcGFyYW1fY2NzOwotICAgIFVDSEFSIHN0YXR1czsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBsb2NhbC0+ZGxfcGFyYW1fY2NzOworCVVDSEFSIHN0YXR1czsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyB2ZXJpZnlfZGxfc3RhcnR1cCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIHZlcmlmeV9kbF9zdGFydHVwIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KICNpZmRlZiBQQ01DSUFfREVCVUcKLSAgICBpZiAocGNfZGVidWcgPiAyKSB7Ci0gICAgaW50IGk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInZlcmlmeV9kbF9zdGFydHVwIHBhcmFtZXRlcnMgc2VudCB2aWEgY2NzICVkOlxuIiwKLSAgICAgICAgICAgbG9jYWwtPmRsX3BhcmFtX2Njcyk7Ci0gICAgICAgIGZvciAoaT0wOyBpPHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpOyBpKyspIHsKLSAgICAgICAgICAgIHByaW50aygiICUyeCIsICh1bnNpZ25lZCBpbnQpIHJlYWRiKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSArIGkpKTsKLSAgICAgICAgfQotICAgIHByaW50aygiXG4iKTsKLSAgICB9CisJaWYgKHBjX2RlYnVnID4gMikgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJ2ZXJpZnlfZGxfc3RhcnR1cCBwYXJhbWV0ZXJzIHNlbnQgdmlhIGNjcyAlZDpcbiIsCisJCSAgICAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgYjVfc3RhcnR1cF9wYXJhbXMpOyBpKyspIHsKKwkJCXByaW50aygiICUyeCIsCisJCQkgICAgICAgKHVuc2lnbmVkIGludClyZWFkYihsb2NhbC0+c3JhbSArCisJCQkJCQkgICBIT1NUX1RPX0VDRl9CQVNFICsgaSkpOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CiAjZW5kaWYKIAotICAgIHN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzIT0gQ0NTX0JVRkZFUl9GUkVFKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiRG93bmxvYWQgc3RhcnR1cCBwYXJhbXMgZmFpbGVkLiAgU3RhdHVzID0gJWRcbiIsCi0gICAgICAgICAgIHN0YXR1cyk7Ci0gICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykKLSAgICAgICAgc3RhcnRfbmV0KCh1X2xvbmcpbG9jYWwpOwotICAgIGVsc2UKLSAgICAgICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7CisJc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCWlmIChzdGF0dXMgIT0gQ0NTX0JVRkZFUl9GUkVFKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJEb3dubG9hZCBzdGFydHVwIHBhcmFtcyBmYWlsZWQuICBTdGF0dXMgPSAlZFxuIiwKKwkJICAgICAgIHN0YXR1cyk7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU1fRVJST1I7CisJCXJldHVybjsKKwl9CisJaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykKKwkJc3RhcnRfbmV0KCh1X2xvbmcpIGxvY2FsKTsKKwllbHNlCisJCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKIAotICAgIHJldHVybjsKKwlyZXR1cm47CiB9IC8qIGVuZCB2ZXJpZnlfZGxfc3RhcnR1cCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb21tYW5kIGNhcmQgdG8gc3RhcnQgYSBuZXR3b3JrICovCiBzdGF0aWMgdm9pZCBzdGFydF9uZXQodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIHN0YXJ0X25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHJldHVybjsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19TVEFSVF9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXkgc3RhcnQgbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKLSAgICByZXR1cm47CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGNjc2luZGV4OworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3Mgc3RhcnRfbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKKwkJcmV0dXJuOworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX1NUQVJUX05FVFdPUkssICZwY2NzLT5jbWQpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsudXBkYXRlX3BhcmFtKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsICJyYXkgc3RhcnQgbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKKwlyZXR1cm47CiB9IC8qIGVuZCBzdGFydF9uZXQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29tbWFuZCBjYXJkIHRvIGpvaW4gYSBuZXR3b3JrICovCiBzdGF0aWMgdm9pZCBqb2luX25ldCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKIAotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGpvaW5fbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgcmV0dXJuOwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX0pPSU5fTkVUV09SSywgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7Ci0gICAgd3JpdGViKDAsICZwY2NzLT52YXIuam9pbl9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5IGpvaW4gbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKLSAgICByZXR1cm47CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBjY3NpbmRleDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3Mgam9pbl9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQorCS8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQorCQlyZXR1cm47CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfSk9JTl9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsudXBkYXRlX3BhcmFtKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsubmV0X2luaXRpYXRlZCk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLCAicmF5IGpvaW4gbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKKwlyZXR1cm47CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIEFmdGVyIGEgY2FyZCBpcyByZW1vdmVkLCByYXlfcmVsZWFzZSgpIHdpbGwgdW5yZWdpc3RlciB0aGUgbmV0CiAgICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCkBAIC03ODQsMjUgKzgxNiwyNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcmF5X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7IAotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGludCBpOwotICAgIAotICAgIERFQlVHKDEsICJyYXlfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CiAKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJREVCVUcoMSwgInJheV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlvdW5tYXAobG9jYWwtPnNyYW0pOwotICAgIGlvdW5tYXAobG9jYWwtPnJtZW0pOwotICAgIGlvdW5tYXAobG9jYWwtPmFtZW0pOwotICAgIC8qIERvIGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KLSAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5hbWVtX2hhbmRsZSk7Ci0gICAgaWYgKCBpICE9IDAgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5hbWVtKSByZXQgPSAleFxuIixpKTsKLSAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5ybWVtX2hhbmRsZSk7Ci0gICAgaWYgKCBpICE9IDAgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5ybWVtKSByZXQgPSAleFxuIixpKTsKLSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwogCi0gICAgREVCVUcoMiwicmF5X3JlbGVhc2UgZW5kaW5nXG4iKTsKKwlpb3VubWFwKGxvY2FsLT5zcmFtKTsKKwlpb3VubWFwKGxvY2FsLT5ybWVtKTsKKwlpb3VubWFwKGxvY2FsLT5hbWVtKTsKKwkvKiBEbyBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCisJaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+YW1lbV9oYW5kbGUpOworCWlmIChpICE9IDApCisJCURFQlVHKDAsICJSZWxlYXNlV2luZG93KGxvY2FsLT5hbWVtKSByZXQgPSAleFxuIiwgaSk7CisJaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsb2NhbC0+cm1lbV9oYW5kbGUpOworCWlmIChpICE9IDApCisJCURFQlVHKDAsICJSZWxlYXNlV2luZG93KGxvY2FsLT5ybWVtKSByZXQgPSAleFxuIiwgaSk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworCisJREVCVUcoMiwgInJheV9yZWxlYXNlIGVuZGluZ1xuIik7CiB9CiAKIHN0YXRpYyBpbnQgcmF5X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC04MzEsMjM2ICs4NjUsMjQyIEBACiBzdGF0aWMgaW50IHJheV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogI2lmZGVmIFJBWV9JTU1FRElBVEVfSU5JVAotICAgIGludCBpOwotI2VuZGlmCS8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaTsKKyNlbmRpZiAvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBERUJVRygxLCJyYXlfZGV2X2luaXQoZGV2PSVwKVxuIixkZXYpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2Rldl9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwlERUJVRygxLCAicmF5X2Rldl9pbml0KGRldj0lcClcbiIsIGRldik7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2Rldl9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KICNpZmRlZiBSQVlfSU1NRURJQVRFX0lOSVQKLSAgICAvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoIChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKLSAgICAgICAgICAgInJldHVybnMgMHgleFxuIixpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSNlbHNlCS8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLwotICAgIC8qIFBvc3Rwb25lIHRoZSBjYXJkIGluaXQgc28gdGhhdCB3ZSBjYW4gc3RpbGwgY29uZmlndXJlIHRoZSBjYXJkLAotICAgICAqIGZvciBleGFtcGxlIHVzaW5nIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zLiBUaGUgaW5pdCB3aWxsIGhhcHBlbgotICAgICAqIGluIHJheV9vcGVuKCkgLSBKZWFuIElJICovCi0gICAgREVCVUcoMSwicmF5X2Rldl9pbml0OiBwb3N0cG9uaW5nIGNhcmQgaW5pdCB0byByYXlfb3BlbigpIDsgU3RhdHVzID0gJWRcbiIsCi0JICBsb2NhbC0+Y2FyZF9zdGF0dXMpOwotI2VuZGlmCS8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLworCS8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLworCWlmICgoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgorCQkgICAgICAgInJldHVybnMgMHgleFxuIiwgaSk7CisJCXJldHVybiAtMTsKKwl9CisjZWxzZSAvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KKwkvKiBQb3N0cG9uZSB0aGUgY2FyZCBpbml0IHNvIHRoYXQgd2UgY2FuIHN0aWxsIGNvbmZpZ3VyZSB0aGUgY2FyZCwKKwkgKiBmb3IgZXhhbXBsZSB1c2luZyB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucy4gVGhlIGluaXQgd2lsbCBoYXBwZW4KKwkgKiBpbiByYXlfb3BlbigpIC0gSmVhbiBJSSAqLworCURFQlVHKDEsCisJICAgICAgInJheV9kZXZfaW5pdDogcG9zdHBvbmluZyBjYXJkIGluaXQgdG8gcmF5X29wZW4oKSA7IFN0YXR1cyA9ICVkXG4iLAorCSAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyk7CisjZW5kaWYgLyogUkFZX0lNTUVESUFURV9JTklUICovCiAKLSAgICAvKiBjb3B5IG1hYyBhbmQgYnJvYWRjYXN0IGFkZHJlc3NlcyB0byBsaW51eCBkZXZpY2UgKi8KLSAgICBtZW1jcHkoJmRldi0+ZGV2X2FkZHIsICZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7Ci0gICAgbWVtc2V0KGRldi0+YnJvYWRjYXN0LCAweGZmLCBFVEhfQUxFTik7CisJLyogY29weSBtYWMgYW5kIGJyb2FkY2FzdCBhZGRyZXNzZXMgdG8gbGludXggZGV2aWNlICovCisJbWVtY3B5KCZkZXYtPmRldl9hZGRyLCAmbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOworCW1lbXNldChkZXYtPmJyb2FkY2FzdCwgMHhmZiwgRVRIX0FMRU4pOwogCi0gICAgREVCVUcoMiwicmF5X2Rldl9pbml0IGVuZGluZ1xuIik7Ci0gICAgcmV0dXJuIDA7CisJREVCVUcoMiwgInJheV9kZXZfaW5pdCBlbmRpbmdcbiIpOworCXJldHVybiAwOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9kZXZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICAvKiBEdW1teSByb3V0aW5lIHRvIHNhdGlzZnkgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIERFQlVHKDEsInJheV9kZXZfY29uZmlnKGRldj0lcCxpZm1hcD0lcClcbiIsZGV2LG1hcCk7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfZGV2X2NvbmZpZyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCS8qIER1bW15IHJvdXRpbmUgdG8gc2F0aXNmeSBkZXZpY2Ugc3RydWN0dXJlICovCisJREVCVUcoMSwgInJheV9kZXZfY29uZmlnKGRldj0lcCxpZm1hcD0lcClcbiIsIGRldiwgbWFwKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfZGV2X2NvbmZpZyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXNob3J0IGxlbmd0aCA9IHNrYi0+bGVuOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfZGV2X3N0YXJ0X3htaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIERFQlVHKDMsInJheV9kZXZfc3RhcnRfeG1pdChza2I9JXAsIGRldj0lcClcbiIsc2tiLGRldik7Ci0gICAgaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBORUVEX1RPX0FVVEgpIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiIpOwotICAgICAgICBpZiAoIWJ1aWxkX2F1dGhfZnJhbWUgKGxvY2FsLCBsb2NhbC0+YXV0aF9pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7Ci0gICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBVVRIRU5USUNBVEVEOwotICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlERUJVRygzLCAicmF5X2Rldl9zdGFydF94bWl0KHNrYj0lcCwgZGV2PSVwKVxuIiwgc2tiLCBkZXYpOworCWlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gTkVFRF9UT19BVVRIKSB7CisJCURFQlVHKDAsICJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuIik7CisJCWlmICghYnVpbGRfYXV0aF9mcmFtZShsb2NhbCwgbG9jYWwtPmF1dGhfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgeworCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVVUSEVOVElDQVRFRDsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCXJldHVybiAxOworCQl9CisJfQogCi0gICAgaWYgKGxlbmd0aCA8IEVUSF9aTEVOKQotICAgIHsKLSAgICAJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLSAgICAJCXJldHVybiAwOwotICAgIAlsZW5ndGggPSBFVEhfWkxFTjsKLSAgICB9Ci0gICAgc3dpdGNoIChyYXlfaHdfeG1pdCggc2tiLT5kYXRhLCBsZW5ndGgsIGRldiwgREFUQV9UWVBFKSkgewotICAgICAgICBjYXNlIFhNSVRfTk9fQ0NTOgotICAgICAgICBjYXNlIFhNSVRfTkVFRF9BVVRIOgotCSAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgY2FzZSBYTUlUX05PX0lOVFI6Ci0gICAgICAgIGNhc2UgWE1JVF9NU0dfQkFEOgotICAgICAgICBjYXNlIFhNSVRfT0s6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLSAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKKwkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJCXJldHVybiAwOworCQlsZW5ndGggPSBFVEhfWkxFTjsKKwl9CisJc3dpdGNoIChyYXlfaHdfeG1pdChza2ItPmRhdGEsIGxlbmd0aCwgZGV2LCBEQVRBX1RZUEUpKSB7CisJY2FzZSBYTUlUX05PX0NDUzoKKwljYXNlIFhNSVRfTkVFRF9BVVRIOgorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiAxOworCWNhc2UgWE1JVF9OT19JTlRSOgorCWNhc2UgWE1JVF9NU0dfQkFEOgorCWNhc2UgWE1JVF9PSzoKKwlkZWZhdWx0OgorCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7CiB9IC8qIHJheV9kZXZfc3RhcnRfeG1pdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIqIGRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIAotICAgICAgICAgICAgICAgIFVDSEFSIG1zZ190eXBlKQorc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgVUNIQVIgbXNnX3R5cGUpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBjY3NpbmRleDsKLSAgICBpbnQgb2Zmc2V0OwotICAgIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OyAvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIFBDIHNwYWNlICovCi0gICAgc2hvcnQgaW50IGFkZHI7ICAgICAvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIGNhcmQgc3BhY2UgKi8KLSAgICAKLSAgICBERUJVRygzLCJyYXlfaHdfeG1pdChkYXRhPSVwLCBsZW49JWQsIGRldj0lcClcbiIsZGF0YSxsZW4sZGV2KTsKLSAgICBpZiAobGVuICsgVFhfSEVBREVSX0xFTkdUSCA+IFRYX0JVRl9TSVpFKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2h3X3htaXQgcGFja2V0IHRvbyBsYXJnZTogJWQgYnl0ZXNcbiIsbGVuKTsKLSAgICAgICAgcmV0dXJuIFhNSVRfTVNHX0JBRDsKLSAgICB9CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCWludCBjY3NpbmRleDsKKwlpbnQgb2Zmc2V0OworCXN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OwkvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIFBDIHNwYWNlICovCisJc2hvcnQgaW50IGFkZHI7CQkvKiBBZGRyZXNzIG9mIHhtaXQgYnVmZmVyIGluIGNhcmQgc3BhY2UgKi8KKworCURFQlVHKDMsICJyYXlfaHdfeG1pdChkYXRhPSVwLCBsZW49JWQsIGRldj0lcClcbiIsIGRhdGEsIGxlbiwgZGV2KTsKKwlpZiAobGVuICsgVFhfSEVBREVSX0xFTkdUSCA+IFRYX0JVRl9TSVpFKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheV9od194bWl0IHBhY2tldCB0b28gbGFyZ2U6ICVkIGJ5dGVzXG4iLAorCQkgICAgICAgbGVuKTsKKwkJcmV0dXJuIFhNSVRfTVNHX0JBRDsKKwl9CiAJc3dpdGNoIChjY3NpbmRleCA9IGdldF9mcmVlX3R4X2Njcyhsb2NhbCkpIHsKIAljYXNlIEVDQ1NCVVNZOgotCQlERUJVRygyLCJyYXlfaHdfeG1pdCB0eF9jY3MgdGFibGUgYnVzeVxuIik7CisJCURFQlVHKDIsICJyYXlfaHdfeG1pdCB0eF9jY3MgdGFibGUgYnVzeVxuIik7CiAJY2FzZSBFQ0NTRlVMTDoKLSAgICAgICAgREVCVUcoMiwicmF5X2h3X3htaXQgTm8gZnJlZSB0eCBjY3NcbiIpOworCQlERUJVRygyLCAicmF5X2h3X3htaXQgTm8gZnJlZSB0eCBjY3NcbiIpOwogCWNhc2UgRUNBUkRHT05FOgotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgcmV0dXJuIFhNSVRfTk9fQ0NTOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiBYTUlUX05PX0NDUzsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0gICAgYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKKwlhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOwogCi0gICAgaWYgKG1zZ190eXBlID09IERBVEFfVFlQRSkgewotICAgICAgICBsb2NhbC0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOwotICAgICAgICBsb2NhbC0+c3RhdHMudHhfcGFja2V0cysrOwotICAgIH0KKwlpZiAobXNnX3R5cGUgPT0gREFUQV9UWVBFKSB7CisJCWxvY2FsLT5zdGF0cy50eF9ieXRlcyArPSBsZW47CisJCWxvY2FsLT5zdGF0cy50eF9wYWNrZXRzKys7CisJfQogCi0gICAgcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOworCXB0eCA9IGxvY2FsLT5zcmFtICsgYWRkcjsKIAotICAgIHJheV9idWlsZF9oZWFkZXIobG9jYWwsIHB0eCwgbXNnX3R5cGUsIGRhdGEpOwotICAgIGlmICh0cmFuc2xhdGUpIHsKLSAgICAgICAgb2Zmc2V0ID0gdHJhbnNsYXRlX2ZyYW1lKGxvY2FsLCBwdHgsIGRhdGEsIGxlbik7Ci0gICAgfQotICAgIGVsc2UgeyAvKiBFbmNhcHN1bGF0ZSBmcmFtZSAqLwotICAgICAgICAvKiBUQkQgVElCIGxlbmd0aCB3aWxsIG1vdmUgYWRkcmVzcyBvZiBwdHgtPnZhciAqLwotICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEsIGxlbik7Ci0gICAgICAgIG9mZnNldCA9IDA7Ci0gICAgfQorCXJheV9idWlsZF9oZWFkZXIobG9jYWwsIHB0eCwgbXNnX3R5cGUsIGRhdGEpOworCWlmICh0cmFuc2xhdGUpIHsKKwkJb2Zmc2V0ID0gdHJhbnNsYXRlX2ZyYW1lKGxvY2FsLCBwdHgsIGRhdGEsIGxlbik7CisJfSBlbHNlIHsgLyogRW5jYXBzdWxhdGUgZnJhbWUgKi8KKwkJLyogVEJEIFRJQiBsZW5ndGggd2lsbCBtb3ZlIGFkZHJlc3Mgb2YgcHR4LT52YXIgKi8KKwkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhLCBsZW4pOworCQlvZmZzZXQgPSAwOworCX0KIAotICAgIC8qIGZpbGwgaW4gdGhlIENDUyAqLwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICBsZW4gKz0gVFhfSEVBREVSX0xFTkdUSCArIG9mZnNldDsKLSAgICB3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYihhZGRyID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clswXSk7Ci0gICAgd3JpdGViKGxvY2FsLT50aWJfbGVuZ3RoLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMV0pOwotICAgIHdyaXRlYihsZW4gPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzBdKTsKLSAgICB3cml0ZWIobGVuICYgMHhmZiwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzFdKTsKKwkvKiBmaWxsIGluIHRoZSBDQ1MgKi8KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJbGVuICs9IFRYX0hFQURFUl9MRU5HVEggKyBvZmZzZXQ7CisJd3JpdGViKENDU19UWF9SRVFVRVNULCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIoYWRkciA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMF0pOworCXdyaXRlYihsb2NhbC0+dGliX2xlbmd0aCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzFdKTsKKwl3cml0ZWIobGVuID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFswXSk7CisJd3JpdGViKGxlbiAmIDB4ZmYsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aFsxXSk7CiAvKiBUQkQgc3RpbGwgbmVlZCBwc21fY2FtPyAqLwotICAgIHdyaXRlYihQU01fQ0FNLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKLSAgICB3cml0ZWIobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9yYXRlKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LmFudGVubmEpOwotICAgIERFQlVHKDMsInJheV9od194bWl0IGRlZmF1bHRfdHhfcmF0ZSA9IDB4JXhcbiIsXAotICAgICAgICAgIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlKTsKKwl3cml0ZWIoUFNNX0NBTSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7CisJd3JpdGViKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfcmF0ZSk7CisJd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5hbnRlbm5hKTsKKwlERUJVRygzLCAicmF5X2h3X3htaXQgZGVmYXVsdF90eF9yYXRlID0gMHgleFxuIiwKKwkgICAgICBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSk7CiAKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9od194bWl0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMiwgInJheV9od194bWl0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwogLyogVEJEIHZlcnkgaW5lZmZpY2llbnQgdG8gY29weSBwYWNrZXQgdG8gYnVmZmVyLCBhbmQgdGhlbiBub3QKICAgIHNlbmQgaXQsIGJ1dCB0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcXVldWUgdGhlIG1lc3NhZ2VzIGFuZCB0aGF0CiAgICB3b24ndCBiZSBkb25lIGZvciBhIHdoaWxlLiAgTWF5YmUgc2V0IHRidXN5IHVudGlsIGEgQ0NTIGlzIGZyZWU/CiAqLwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybiBYTUlUX05PX0lOVFI7Ci0gICAgfQotICAgIHJldHVybiBYTUlUX09LOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybiBYTUlUX05PX0lOVFI7CisJfQorCXJldHVybiBYTUlUX09LOwogfSAvKiBlbmQgcmF5X2h3X3htaXQgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgdHJhbnNsYXRlX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LCB1bnNpZ25lZCBjaGFyICpkYXRhLAotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKQotewotICAgIF9fYmUxNiBwcm90byA9ICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3Byb3RvOwotICAgIGlmIChudG9ocyhwcm90bykgPj0gMTUzNikgeyAvKiBESVggSUkgZXRoZXJuZXQgZnJhbWUgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBESVggSUlcbiIpOwotICAgICAgICAvKiBDb3B5IExMQyBoZWFkZXIgdG8gY2FyZCBidWZmZXIgKi8KLSAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBldGgyX2xsYywgc2l6ZW9mKGV0aDJfbGxjKSk7Ci0gICAgICAgIG1lbWNweV90b2lvKCAoKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhcikgKyBzaXplb2YoZXRoMl9sbGMpLCAoVUNIQVIgKikmcHJvdG8sIDIpOwotICAgICAgICBpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfQUFSUCkgfHwgcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBYKSkgewotICAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgc2VsZWN0aXZlIHRyYW5zbGF0aW9uIHRhYmxlLCBvbmx5IDIgZW50cmllcyAqLwotICAgICAgICAgICAgd3JpdGViKDB4ZjgsICYoKHN0cnVjdCBzbmFwaGRyX3QgX19pb21lbSAqKXB0eC0+dmFyKS0+b3JnWzNdKTsKLSAgICAgICAgfQotICAgICAgICAvKiBDb3B5IGJvZHkgb2YgZXRoZXJuZXQgcGFja2V0IHdpdGhvdXQgZXRoZXJuZXQgaGVhZGVyICovCi0gICAgICAgIG1lbWNweV90b2lvKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIgKyBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCksIFwKLSAgICAgICAgICAgICAgICAgICAgZGF0YSArIEVUSF9ITEVOLCAgbGVuIC0gRVRIX0hMRU4pOwotICAgICAgICByZXR1cm4gKGludCkgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47Ci0gICAgfQotICAgIGVsc2UgeyAvKiBhbHJlYWR5ICA4MDIgdHlwZSwgYW5kIHByb3RvIGlzIGxlbmd0aCAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIDgwMlxuIik7Ci0gICAgICAgIGlmIChwcm90byA9PSBodG9ucygweGZmZmYpKSB7IC8qIGV2aWwgbmV0d2FyZSBJUFggODAyLjMgd2l0aG91dCBMTEMgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBldmlsIElQWFxuIik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgIGxlbiAtIEVUSF9ITEVOKTsKLSAgICAgICAgICAgIHJldHVybiAwIC0gRVRIX0hMRU47Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBkYXRhICsgRVRIX0hMRU4sICBsZW4gLSBFVEhfSExFTik7Ci0gICAgICAgIHJldHVybiAwIC0gRVRIX0hMRU47Ci0gICAgfQotICAgIC8qIFRCRCBkbyBvdGhlciBmcmFtZSB0eXBlcyAqLwotfSAvKiBlbmQgdHJhbnNsYXRlX2ZyYW1lICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LCBVQ0hBUiBtc2dfdHlwZSwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhKQotewotICAgIHdyaXRlYihQUk9UT0NPTF9WRVIgfCBtc2dfdHlwZSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKLS8qKiogSUVFRSA4MDIuMTEgQWRkcmVzcyBmaWVsZCBhc3NpZ25tZW50cyAqKioqKioqKioqKioqCi0gICAgICAgICAgICAgICAgVE9EUyBGUk9NRFMgICBhZGRyXzEgICAgIGFkZHJfMiAgICAgICAgICBhZGRyXzMgICBhZGRyXzQKLUFkaG9jICAgICAgICAgICAwICAgIDAgICAgICAgIGRlc3QgICAgICAgc3JjICh0ZXJtaW5hbCkgIEJTU0lEICAgIE4vQQotQVAgdG8gVGVybWluYWwgIDAgICAgMSAgICAgICAgZGVzdCAgICAgICBBUChCU1NJRCkgICAgICAgc291cmNlICAgTi9BCi1UZXJtaW5hbCB0byBBUCAgMSAgICAwICAgICAgICBBUChCU1NJRCkgIHNyYyAodGVybWluYWwpICBkZXN0ICAgICBOL0EKLUFQIHRvIEFQICAgICAgICAxICAgIDEgICAgICAgIGRlc3QgQVAgICAgc3JjIEFQICAgICAgICAgIGRlc3QgICAgIHNvdXJjZSAgICAgIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICBpZiAobG9jYWwtPm5ldF90eXBlID09IEFESE9DKSB7ICAgCi0gICAgICAgIHdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwotICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIDIgKiBBRERSTEVOKTsKLSAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKLSAgICB9Ci0gICAgZWxzZSAvKiBpbmZyYXN0cnVjdHVyZSAqLwotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlYihGQzJfRlJPTV9EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5ic3NfaWQsIDYpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLyogVGVybWluYWwgKi8KLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGViKEZDMl9UT19EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOwotICAgICAgICB9Ci0gICAgfQotfSAvKiBlbmQgZW5jYXBzdWxhdGVfZnJhbWUgKi8KIAorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIGludCB0cmFuc2xhdGVfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCisJCQkgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCV9fYmUxNiBwcm90byA9ICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3Byb3RvOworCWlmIChudG9ocyhwcm90bykgPj0gMTUzNikgeyAvKiBESVggSUkgZXRoZXJuZXQgZnJhbWUgKi8KKwkJREVCVUcoMywgInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgRElYIElJXG4iKTsKKwkJLyogQ29weSBMTEMgaGVhZGVyIHRvIGNhcmQgYnVmZmVyICovCisJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZXRoMl9sbGMsIHNpemVvZihldGgyX2xsYykpOworCQltZW1jcHlfdG9pbygoKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhcikgKyBzaXplb2YoZXRoMl9sbGMpLAorCQkJICAgIChVQ0hBUiAqKSAmcHJvdG8sIDIpOworCQlpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfQUFSUCkgfHwgcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVBYKSkgeworCQkJLyogVGhpcyBpcyB0aGUgc2VsZWN0aXZlIHRyYW5zbGF0aW9uIHRhYmxlLCBvbmx5IDIgZW50cmllcyAqLworCQkJd3JpdGViKDB4ZjgsCisJCQkgICAgICAgJigoc3RydWN0IHNuYXBoZHJfdCBfX2lvbWVtICopcHR4LT52YXIpLT5vcmdbM10pOworCQl9CisJCS8qIENvcHkgYm9keSBvZiBldGhlcm5ldCBwYWNrZXQgd2l0aG91dCBldGhlcm5ldCBoZWFkZXIgKi8KKwkJbWVtY3B5X3RvaW8oKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhciArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpLCBkYXRhICsgRVRIX0hMRU4sCisJCQkgICAgbGVuIC0gRVRIX0hMRU4pOworCQlyZXR1cm4gKGludClzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKKwl9IGVsc2UgeyAvKiBhbHJlYWR5ICA4MDIgdHlwZSwgYW5kIHByb3RvIGlzIGxlbmd0aCAqLworCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSA4MDJcbiIpOworCQlpZiAocHJvdG8gPT0gaHRvbnMoMHhmZmZmKSkgeyAvKiBldmlsIG5ldHdhcmUgSVBYIDgwMi4zIHdpdGhvdXQgTExDICovCisJCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBldmlsIElQWFxuIik7CisJCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgbGVuIC0gRVRIX0hMRU4pOworCQkJcmV0dXJuIDAgLSBFVEhfSExFTjsKKwkJfQorCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgbGVuIC0gRVRIX0hMRU4pOworCQlyZXR1cm4gMCAtIEVUSF9ITEVOOworCX0KKwkvKiBUQkQgZG8gb3RoZXIgZnJhbWUgdHlwZXMgKi8KK30gLyogZW5kIHRyYW5zbGF0ZV9mcmFtZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAorCQkJICAgICBVQ0hBUiBtc2dfdHlwZSwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwl3cml0ZWIoUFJPVE9DT0xfVkVSIHwgbXNnX3R5cGUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7CisvKioqIElFRUUgODAyLjExIEFkZHJlc3MgZmllbGQgYXNzaWdubWVudHMgKioqKioqKioqKioqKgorCQlUT0RTCUZST01EUwlhZGRyXzEJCWFkZHJfMgkJYWRkcl8zCWFkZHJfNAorQWRob2MJCTAJMAlkZXN0CQlzcmMgKHRlcm1pbmFsKQlCU1NJRAlOL0EKK0FQIHRvIFRlcm1pbmFsCTAJMQlkZXN0CQlBUChCU1NJRCkJc291cmNlCU4vQQorVGVybWluYWwgdG8gQVAJMQkwCUFQKEJTU0lEKQlzcmMgKHRlcm1pbmFsKQlkZXN0CU4vQQorQVAgdG8gQVAJMQkxCWRlc3QgQVAJCXNyYyBBUAkJZGVzdAlzb3VyY2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKGxvY2FsLT5uZXRfdHlwZSA9PSBBREhPQykgeworCQl3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LAorCQkJICAgIDIgKiBBRERSTEVOKTsKKwkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKKwl9IGVsc2UgeyAvKiBpbmZyYXN0cnVjdHVyZSAqLworCisJCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKSB7CisJCQl3cml0ZWIoRkMyX0ZST01fRFMsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+YnNzX2lkLCA2KTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKKwkJfSBlbHNlIHsgLyogVGVybWluYWwgKi8KKworCQkJd3JpdGViKEZDMl9UT19EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsCisJCQkJICAgICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsIEFERFJMRU4pOworCQl9CisJfQorfSAvKiBlbmQgZW5jYXBzdWxhdGVfZnJhbWUgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0xMDcxLDcgKzExMTEsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAorCS5nZXRfZHJ2aW5mbyA9IG5ldGRldl9nZXRfZHJ2aW5mbywKIH07CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMTA4MSw5ICsxMTIxLDcgQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgcHJvdG9jb2wgbmFtZQogICovCiBzdGF0aWMgaW50IHJheV9nZXRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCWNoYXIgKmN3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmN3cnEsIGNoYXIgKmV4dHJhKQogewogCXN0cmNweShjd3JxLCAiSUVFRSA4MDIuMTEtRkgiKTsKIAlyZXR1cm4gMDsKQEAgLTEwOTUsMTQgKzExMzMsMTMgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KQEAgLTExMTMsMTUgKzExNTAsMTQgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0gCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IGZyZXF1ZW5jeQogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19mcmVxICpmd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTExMzYsMjIgKzExNzIsMjEgQEAKICAqLwogc3RhdGljIGludCByYXlfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCisJCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBDaGVjayBpZiB3ZSBhc2tlZCBmb3IgYGFueScgKi8KLQlpZihkd3JxLT5mbGFncyA9PSAwKSB7CisJaWYgKGR3cnEtPmZsYWdzID09IDApIHsKIAkJLyogQ29yZXkgOiBjYW4geW91IGRvIHRoYXQgPyAqLwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfSBlbHNlIHsKIAkJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHN0cmluZyAqLwotCQlpZihkd3JxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkgeworCQlpZiAoZHdycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpIHsKIAkJCXJldHVybiAtRTJCSUc7CiAJCX0KIApAQCAtMTE2MCw3ICsxMTk1LDcgQEAKIAkJbWVtY3B5KGxvY2FsLT5zcGFybS5iNS5hX2N1cnJlbnRfZXNzX2lkLCBleHRyYSwgZHdycS0+bGVuZ3RoKTsKIAl9CiAKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXJldHVybiAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTE2OSw4ICsxMjA0LDcgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCisJCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTE3OSw3ICsxMjEzLDcgQEAKIAogCS8qIFB1c2ggaXQgb3V0ICEgKi8KIAlkd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpOwotCWR3cnEtPmZsYWdzID0gMTsgLyogYWN0aXZlICovCisJZHdycS0+ZmxhZ3MgPSAxOwkvKiBhY3RpdmUgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMTE4OSw5ICsxMjIzLDggQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgQVAgYWRkcmVzcwogICovCiBzdGF0aWMgaW50IHJheV9nZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IHNvY2thZGRyICphd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICAgc3RydWN0IHNvY2thZGRyICphd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTIwNywyNSArMTI0MCwyNCBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBDaGVjayBpZiByYXRlIGlzIGluIHJhbmdlICovCi0JaWYoKHZ3cnEtPnZhbHVlICE9IDEwMDAwMDApICYmICh2d3JxLT52YWx1ZSAhPSAyMDAwMDAwKSkKKwlpZiAoKHZ3cnEtPnZhbHVlICE9IDEwMDAwMDApICYmICh2d3JxLT52YWx1ZSAhPSAyMDAwMDAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBIYWNrIGZvciAxLjUgTWIvcyBpbnN0ZWFkIG9mIDIgTWIvcyAqLwotCWlmKChsb2NhbC0+ZndfdmVyID09IDB4NTUpICYmCQkvKiBQbGVhc2UgY2hlY2sgKi8KLQkgICAodndycS0+dmFsdWUgPT0gMjAwMDAwMCkpCisJaWYgKChsb2NhbC0+ZndfdmVyID09IDB4NTUpICYmCS8qIFBsZWFzZSBjaGVjayAqLworCSAgICAodndycS0+dmFsdWUgPT0gMjAwMDAwMCkpCiAJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gMzsKIAllbHNlCi0JCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gdndycS0+dmFsdWUvNTAwMDAwOworCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IHZ3cnEtPnZhbHVlIC8gNTAwMDAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjM2LDE2ICsxMjY4LDE1IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPT0gMykKLQkJdndycS0+dmFsdWUgPSAyMDAwMDAwOwkJLyogSHVtLi4uICovCisJaWYgKGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID09IDMpCisJCXZ3cnEtPnZhbHVlID0gMjAwMDAwMDsJLyogSHVtLi4uICovCiAJZWxzZQogCQl2d3JxLT52YWx1ZSA9IGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlICogNTAwMDAwOwotCXZ3cnEtPmZpeGVkID0gMDsJCS8qIFdlIGFyZSBpbiBhdXRvIG1vZGUgKi8KKwl2d3JxLT5maXhlZCA9IDA7CS8qIFdlIGFyZSBpbiBhdXRvIG1vZGUgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMTI1Niw0MyArMTI4Nyw0MCBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkgICAgICAgY2hhciAqZXh0cmEpCisJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBydGhyID0gdndycS0+dmFsdWU7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogaWYod3JxLT51LnJ0cy5maXhlZCA9PSAwKSB3ZSBzaG91bGQgY29tcGxhaW4gKi8KLQlpZih2d3JxLT5kaXNhYmxlZCkKKwlpZiAodndycS0+ZGlzYWJsZWQpCiAJCXJ0aHIgPSAzMjc2NzsKIAllbHNlIHsKLQkJaWYoKHJ0aHIgPCAwKSB8fCAocnRociA+IDIzNDcpKSAvKiBXaGF0J3MgdGhlIG1heCBwYWNrZXQgc2l6ZSA/Pz8gKi8KKwkJaWYgKChydGhyIDwgMCkgfHwgKHJ0aHIgPiAyMzQ3KSkgICAvKiBXaGF0J3MgdGhlIG1heCBwYWNrZXQgc2l6ZSA/Pz8gKi8KIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzBdID0gKHJ0aHIgPj4gOCkgJiAweEZGOwogCWxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMV0gPSBydGhyICYgMHhGRjsKIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IFJUUyB0aHJlc2hvbGQKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJICAgICAgIGNoYXIgKmV4dHJhKQorCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXZ3cnEtPnZhbHVlID0gKGxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMF0gPDwgOCkKLQkJKyBsb2NhbC0+c3Bhcm0uYjUuYV9ydHNfdGhyZXNob2xkWzFdOworCSAgICArIGxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMV07CiAJdndycS0+ZGlzYWJsZWQgPSAodndycS0+dmFsdWUgPT0gMzI3NjcpOwogCXZ3cnEtPmZpeGVkID0gMTsKIApAQCAtMTMwNSwyNyArMTMzMywyNiBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZnRociA9IHZ3cnEtPnZhbHVlOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIGlmKHdycS0+dS5mcmFnLmZpeGVkID09IDApIHNob3VsZCBjb21wbGFpbiAqLwotCWlmKHZ3cnEtPmRpc2FibGVkKQorCWlmICh2d3JxLT5kaXNhYmxlZCkKIAkJZnRociA9IDMyNzY3OwogCWVsc2UgewotCQlpZigoZnRociA8IDI1NikgfHwgKGZ0aHIgPiAyMzQ3KSkgLyogVG8gY2hlY2sgb3V0ICEgKi8KKwkJaWYgKChmdGhyIDwgMjU2KSB8fCAoZnRociA+IDIzNDcpKQkvKiBUbyBjaGVjayBvdXQgISAqLwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzBdID0gKGZ0aHIgPj4gOCkgJiAweEZGOwogCWxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzFdID0gZnRociAmIDB4RkY7CiAKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXJldHVybiAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTMzNCwxMyArMTM2MSwxMiBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXZ3cnEtPnZhbHVlID0gKGxvY2FsLT5zcGFybS5iNS5hX2ZyYWdfdGhyZXNob2xkWzBdIDw8IDgpCi0JCSsgbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMV07CisJICAgICsgbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMV07CiAJdndycS0+ZGlzYWJsZWQgPSAodndycS0+dmFsdWUgPT0gMzI3NjcpOwogCXZ3cnEtPmZpeGVkID0gMTsKIApAQCAtMTM1MiwyMyArMTM3OCwyMCBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IHNldCBNb2RlIG9mIE9wZXJhdGlvbgogICovCiBzdGF0aWMgaW50IHJheV9zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCV9fdTMyICp1d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBfX3UzMiAqdXdycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAJY2hhciBjYXJkX21vZGUgPSAxOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXN3aXRjaCAoKnV3cnEpCi0JeworCXN3aXRjaCAoKnV3cnEpIHsKIAljYXNlIElXX01PREVfQURIT0M6CiAJCWNhcmRfbW9kZSA9IDA7Ci0JCS8vIEZhbGwgdGhyb3VnaAorCQkvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIElXX01PREVfSU5GUkE6CiAJCWxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSA9IGNhcmRfbW9kZTsKIAkJYnJlYWs7CkBAIC0xMzg0LDEzICsxNDA3LDExIEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IE1vZGUgb2YgT3BlcmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJX191MzIgKnV3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIF9fdTMyICp1d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSkKKwlpZiAobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlKQogCQkqdXdycSA9IElXX01PREVfSU5GUkE7CiAJZWxzZQogCQkqdXdycSA9IElXX01PREVfQURIT0M7CkBAIC0xNDA0LDEyICsxNDI1LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9yYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLAotCQkJIGNoYXIgKmV4dHJhKQorCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKIAotCW1lbXNldCgoY2hhciAqKSByYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOworCW1lbXNldCgoY2hhciAqKXJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CiAKIAkvKiBTZXQgdGhlIGxlbmd0aCAodmVyeSBpbXBvcnRhbnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpICovCiAJZHdycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CkBAIC0xNDIwLDcgKzE0NDAsNyBAQAogCiAJLyogU2V0IGluZm9ybWF0aW9uIGluIHRoZSByYW5nZSBzdHJ1Y3QgKi8KIAlyYW5nZS0+dGhyb3VnaHB1dCA9IDEuMSAqIDEwMDAgKiAxMDAwOwkvKiBQdXQgdGhlIHJpZ2h0IG51bWJlciBoZXJlICovCi0JcmFuZ2UtPm51bV9jaGFubmVscyA9IGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOyAKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07CiAJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSAwOwogCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMDsKIAlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAyNTU7CS8qIFdoYXQncyB0aGUgY29ycmVjdCB2YWx1ZSA/ICovCkBAIC0xNDM3LDggKzE0NTcsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZnJhbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkgICBjaGFyICpleHRyYSkKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXRyYW5zbGF0ZSA9ICooZXh0cmEpOwkvKiBTZXQgZnJhbWluZyBtb2RlICovCiAKQEAgLTE0NTEsOCArMTQ3MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9mcmFtaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCSAgIGNoYXIgKmV4dHJhKQorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJKihleHRyYSkgPSB0cmFuc2xhdGU7CiAKQEAgLTE0NjUsOCArMTQ4Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9jb3VudHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCSAgIGNoYXIgKmV4dHJhKQorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJKihleHRyYSkgPSBjb3VudHJ5OwogCkBAIC0xNDc3LDExICsxNDk0LDEwIEBACiAvKgogICogQ29tbWl0IGhhbmRsZXIgOiBjYWxsZWQgYWZ0ZXIgYSBidW5jaCBvZiBTRVQgb3BlcmF0aW9ucwogICovCi1zdGF0aWMgaW50IHJheV9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywJLyogTlVMTCAqLwotCQkgICAgICB2b2lkICp6d3JxLAkJCS8qIE5VTEwgKi8KLQkJICAgICAgY2hhciAqZXh0cmEpCQkJLyogTlVMTCAqLwoteworc3RhdGljIGludCByYXlfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCS8qIE5VTEwgKi8KKwkJICAgICAgdm9pZCAqendycSwJLyogTlVMTCAqLworCQkgICAgICBjaGFyICpleHRyYSkKK3sgLyogTlVMTCAqLwogCXJldHVybiAwOwogfQogCkBAIC0xNDg5LDMzICsxNTA1LDM0IEBACiAvKgogICogU3RhdHMgaGFuZGxlciA6IHJldHVybiBXaXJlbGVzcyBTdGF0cwogICovCi1zdGF0aWMgaXdfc3RhdHMgKiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQorc3RhdGljIGl3X3N0YXRzICpyYXlfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gIHJheV9kZXZfdCAqCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICBzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOwogCi0gIGlmKGxvY2FsID09IChyYXlfZGV2X3QgKikgTlVMTCkKLSAgICByZXR1cm4gKGl3X3N0YXRzICopIE5VTEw7CisJaWYgKGxvY2FsID09IChyYXlfZGV2X3QgKikgTlVMTCkKKwkJcmV0dXJuIChpd19zdGF0cyAqKSBOVUxMOwogCi0gIGxvY2FsLT53c3RhdHMuc3RhdHVzID0gbG9jYWwtPmNhcmRfc3RhdHVzOworCWxvY2FsLT53c3RhdHMuc3RhdHVzID0gbG9jYWwtPmNhcmRfc3RhdHVzOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICBpZigobG9jYWwtPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKSAmJiAobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlID09IDApKQotICAgIHsKLSAgICAgIC8qIEdldCBpdCBmcm9tIHRoZSBmaXJzdCBub2RlIGluIHNweSBsaXN0ICovCi0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5xdWFsOwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOwotICAgICAgbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0udXBkYXRlZDsKLSAgICB9CisJaWYgKChsb2NhbC0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApCisJICAgICYmIChsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUgPT0gMCkpIHsKKwkJLyogR2V0IGl0IGZyb20gdGhlIGZpcnN0IG5vZGUgaW4gc3B5IGxpc3QgKi8KKwkJbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ucXVhbDsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLmxldmVsOworCQlsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7CisJCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0KKwkJICAgIGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS51cGRhdGVkOworCX0KICNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KIAotICBpZihwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKLSAgICBsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSByZWFkYigmcC0+cnhub2lzZSk7Ci0gICAgbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gNDsKLSAgfQorCWlmIChwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLm5vaXNlID0gcmVhZGIoJnAtPnJ4bm9pc2UpOworCQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCB8PSA0OworCX0KIAotICByZXR1cm4gJmxvY2FsLT53c3RhdHM7CisJcmV0dXJuICZsb2NhbC0+d3N0YXRzOwogfSAvKiBlbmQgcmF5X2dldF93aXJlbGVzc19zdGF0cyAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNTIzLDExNTkgKzE1NDAsMTI2NCBAQAogICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCiAgKi8KIAotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJcmF5X2hhbmRsZXJbXSA9IHsKLQlbU0lPQ1NJV0NPTU1JVC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2NvbW1pdCwKLQlbU0lPQ0dJV05BTUUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9uYW1lLAotCVtTSU9DU0lXRlJFUSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyZXEsCi0JW1NJT0NHSVdGUkVRICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJlcSwKLQlbU0lPQ1NJV01PREUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9tb2RlLAotCVtTSU9DR0lXTU9ERSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X21vZGUsCi0JW1NJT0NHSVdSQU5HRSAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcmFuZ2UsCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciByYXlfaGFuZGxlcltdID0geworCVtTSU9DU0lXQ09NTUlUIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9jb21taXQsCisJW1NJT0NHSVdOQU1FIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbmFtZSwKKwlbU0lPQ1NJV0ZSRVEgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmVxLAorCVtTSU9DR0lXRlJFUSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyZXEsCisJW1NJT0NTSVdNT0RFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfbW9kZSwKKwlbU0lPQ0dJV01PREUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9tb2RlLAorCVtTSU9DR0lXUkFOR0UgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYW5nZSwKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAJW1NJT0NTSVdTUFkgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3NweSwKLQlbU0lPQ0dJV1NQWSAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfc3B5LAotCVtTSU9DU0lXVEhSU1BZLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF90aHJzcHksCi0JW1NJT0NHSVdUSFJTUFktU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3RocnNweSwKLSNlbmRpZgkvKiBXSVJFTEVTU19TUFkgKi8KLQlbU0lPQ0dJV0FQICAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF93YXAsCi0JW1NJT0NTSVdFU1NJRCAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZXNzaWQsCi0JW1NJT0NHSVdFU1NJRCAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZXNzaWQsCi0JW1NJT0NTSVdSQVRFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcmF0ZSwKLQlbU0lPQ0dJV1JBVEUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYXRlLAotCVtTSU9DU0lXUlRTICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X3J0cywKLQlbU0lPQ0dJV1JUUyAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9ydHMsCi0JW1NJT0NTSVdGUkFHICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJhZywKLQlbU0lPQ0dJV0ZSQUcgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmFnLAorCVtTSU9DU0lXU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3NweSwKKwlbU0lPQ0dJV1NQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF9zcHksCisJW1NJT0NTSVdUSFJTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfdGhyc3B5LAorCVtTSU9DR0lXVEhSU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3RocnNweSwKKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KKwlbU0lPQ0dJV0FQIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfd2FwLAorCVtTSU9DU0lXRVNTSUQgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9lc3NpZCwKKwlbU0lPQ0dJV0VTU0lEIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZXNzaWQsCisJW1NJT0NTSVdSQVRFIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcmF0ZSwKKwlbU0lPQ0dJV1JBVEUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYXRlLAorCVtTSU9DU0lXUlRTIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcnRzLAorCVtTSU9DR0lXUlRTIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfcnRzLAorCVtTSU9DU0lXRlJBRyAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyYWcsCisJW1NJT0NHSVdGUkFHIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJhZywKIH07CiAKLSNkZWZpbmUgU0lPQ1NJUEZSQU1JTkcJU0lPQ0lXRklSU1RQUklWCQkvKiBTZXQgZnJhbWluZyBtb2RlICovCisjZGVmaW5lIFNJT0NTSVBGUkFNSU5HCVNJT0NJV0ZJUlNUUFJJVgkvKiBTZXQgZnJhbWluZyBtb2RlICovCiAjZGVmaW5lIFNJT0NHSVBGUkFNSU5HCVNJT0NJV0ZJUlNUUFJJViArIDEJLyogR2V0IGZyYW1pbmcgbW9kZSAqLwogI2RlZmluZSBTSU9DR0lQQ09VTlRSWQlTSU9DSVdGSVJTVFBSSVYgKyAzCS8qIEdldCBjb3VudHJ5IGNvZGUgKi8KIAotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJcmF5X3ByaXZhdGVfaGFuZGxlcltdID0geworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcmF5X3ByaXZhdGVfaGFuZGxlcltdID0gewogCVswXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyYW1pbmcsCiAJWzFdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJhbWluZywKIAlbM10gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9jb3VudHJ5LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3MJcmF5X3ByaXZhdGVfYXJnc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3MgcmF5X3ByaXZhdGVfYXJnc1tdID0gewogLyogY21kLAkJc2V0X2FyZ3MsCWdldF9hcmdzLAluYW1lICovCi17IFNJT0NTSVBGUkFNSU5HLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfZnJhbWluZyIgfSwKLXsgU0lPQ0dJUEZSQU1JTkcsIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldF9mcmFtaW5nIiB9LAoteyBTSU9DR0lQQ09VTlRSWSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0X2NvdW50cnkiIH0sCisJe1NJT0NTSVBGUkFNSU5HLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsCisJICJzZXRfZnJhbWluZyJ9LAorCXtTSU9DR0lQRlJBTUlORywgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAiZ2V0X2ZyYW1pbmcifSwKKwl7U0lPQ0dJUENPVU5UUlksIDAsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgImdldF9jb3VudHJ5In0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmCXJheV9oYW5kbGVyX2RlZiA9Ci17Ci0JLm51bV9zdGFuZGFyZAk9IEFSUkFZX1NJWkUocmF5X2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZQk9IEFSUkFZX1NJWkUocmF5X3ByaXZhdGVfaGFuZGxlciksCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJheV9oYW5kbGVyX2RlZiA9IHsKKwkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShyYXlfaGFuZGxlciksCisJLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShyYXlfcHJpdmF0ZV9oYW5kbGVyKSwKIAkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUocmF5X3ByaXZhdGVfYXJncyksCi0JLnN0YW5kYXJkCT0gcmF5X2hhbmRsZXIsCi0JLnByaXZhdGUJPSByYXlfcHJpdmF0ZV9oYW5kbGVyLAotCS5wcml2YXRlX2FyZ3MJPSByYXlfcHJpdmF0ZV9hcmdzLAorCS5zdGFuZGFyZCA9IHJheV9oYW5kbGVyLAorCS5wcml2YXRlID0gcmF5X3ByaXZhdGVfaGFuZGxlciwKKwkucHJpdmF0ZV9hcmdzID0gcmF5X3ByaXZhdGVfYXJncywKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gcmF5X2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICBsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICAKLSAgICBERUJVRygxLCAicmF5X29wZW4oJyVzJylcbiIsIGRldi0+bmFtZSk7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAobGluay0+b3BlbiA9PSAwKQotCSAgICBsb2NhbC0+bnVtX211bHRpID0gMDsKLSAgICBsaW5rLT5vcGVuKys7CisJREVCVUcoMSwgInJheV9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCi0gICAgLyogSWYgdGhlIGNhcmQgaXMgbm90IHN0YXJ0ZWQsIHRpbWUgdG8gc3RhcnQgaXQgISAtIEplYW4gSUkgKi8KLSAgICBpZihsb2NhbC0+Y2FyZF9zdGF0dXMgPT0gQ0FSRF9BV0FJVElOR19QQVJBTSkgewotCWludCBpOworCWlmIChsaW5rLT5vcGVuID09IDApCisJCWxvY2FsLT5udW1fbXVsdGkgPSAwOworCWxpbmstPm9wZW4rKzsKIAotCURFQlVHKDEsInJheV9vcGVuOiBkb2luZyBpbml0IG5vdyAhXG4iKTsKKwkvKiBJZiB0aGUgY2FyZCBpcyBub3Qgc3RhcnRlZCwgdGltZSB0byBzdGFydCBpdCAhIC0gSmVhbiBJSSAqLworCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgPT0gQ0FSRF9BV0FJVElOR19QQVJBTSkgeworCQlpbnQgaTsKIAotCS8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLwotCWlmICggKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApCi0JICB7Ci0JICAgIHByaW50ayhLRVJOX0lORk8gInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCi0JCSAgICJyZXR1cm5zIDB4JXhcbiIsaSk7Ci0JICAgIHJldHVybiAtMTsKLQkgIH0KLSAgICAgfQorCQlERUJVRygxLCAicmF5X29wZW46IGRvaW5nIGluaXQgbm93ICFcbiIpOwogCi0gICAgaWYgKHNuaWZmZXIpIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICBlbHNlICAgICAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCisJCWlmICgoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgorCQkJICAgICAgICJyZXR1cm5zIDB4JXhcbiIsIGkpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQogCi0gICAgREVCVUcoMiwicmF5X29wZW4gZW5kaW5nXG4iKTsKLSAgICByZXR1cm4gMDsKKwlpZiAoc25pZmZlcikKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCWVsc2UKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCURFQlVHKDIsICJyYXlfb3BlbiBlbmRpbmdcbiIpOworCXJldHVybiAwOwogfSAvKiBlbmQgcmF5X29wZW4gKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7Ci0gICAgbGluayA9IGxvY2FsLT5maW5kZXI7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBERUJVRygxLCAicmF5X2Rldl9jbG9zZSgnJXMnKVxuIiwgZGV2LT5uYW1lKTsKKwlERUJVRygxLCAicmF5X2Rldl9jbG9zZSgnJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAotICAgIGxpbmstPm9wZW4tLTsKLSAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbGluay0+b3Blbi0tOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotICAgIC8qIEluIGhlcmUsIHdlIHNob3VsZCBzdG9wIHRoZSBoYXJkd2FyZSAoc3RvcCBjYXJkIGZyb20gYmVlaW5nIGFjdGl2ZSkKLSAgICAgKiBhbmQgc2V0IGxvY2FsLT5jYXJkX3N0YXR1cyB0byBDQVJEX0FXQUlUSU5HX1BBUkFNLCBzbyB0aGF0IHdoaWxlIHRoZQotICAgICAqIGNhcmQgaXMgY2xvc2VkIHdlIGNhbiBjaGFnZSBpdHMgY29uZmlndXJhdGlvbi4KLSAgICAgKiBQcm9iYWJseSBhbHNvIG5lZWQgYSBDT1IgcmVzZXQgdG8gZ2V0IHNhbmUgc3RhdGUgLSBKZWFuIElJICovCisJLyogSW4gaGVyZSwgd2Ugc2hvdWxkIHN0b3AgdGhlIGhhcmR3YXJlIChzdG9wIGNhcmQgZnJvbSBiZWVpbmcgYWN0aXZlKQorCSAqIGFuZCBzZXQgbG9jYWwtPmNhcmRfc3RhdHVzIHRvIENBUkRfQVdBSVRJTkdfUEFSQU0sIHNvIHRoYXQgd2hpbGUgdGhlCisJICogY2FyZCBpcyBjbG9zZWQgd2UgY2FuIGNoYWdlIGl0cyBjb25maWd1cmF0aW9uLgorCSAqIFByb2JhYmx5IGFsc28gbmVlZCBhIENPUiByZXNldCB0byBnZXQgc2FuZSBzdGF0ZSAtIEplYW4gSUkgKi8KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfSAvKiBlbmQgcmF5X2Rldl9jbG9zZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIERFQlVHKDEsInJheV9yZXNldCBlbnRlcmVkXG4iKTsKLSAgICByZXR1cm47CitzdGF0aWMgdm9pZCByYXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlERUJVRygxLCAicmF5X3Jlc2V0IGVudGVyZWRcbiIpOworCXJldHVybjsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ2F1c2UgYSBmaXJtd2FyZSBpbnRlcnJ1cHQgaWYgaXQgaXMgcmVhZHkgZm9yIG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogUmV0dXJuIG5vbnplcm8gaWYgbm90IHJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIGludCBpbnRlcnJ1cHRfZWNmKHJheV9kZXZfdCAqbG9jYWwsIGludCBjY3MpCiB7Ci0gICAgaW50IGkgPSA1MDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGkgPSA1MDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHRfZWNmIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBERUJVRygyLCJpbnRlcnJ1cHRfZWNmKGxvY2FsPSVwLCBjY3MgPSAweCV4XG4iLGxvY2FsLGNjcyk7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGludGVycnVwdF9lY2YgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCURFQlVHKDIsICJpbnRlcnJ1cHRfZWNmKGxvY2FsPSVwLCBjY3MgPSAweCV4XG4iLCBsb2NhbCwgY2NzKTsKIAotICAgIHdoaWxlICggaSAmJiAKLSAgICAgICAgICAgIChyZWFkYihsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpICYgRUNGX0lOVFJfU0VUKSkKLSAgICAgICAgaS0tOwotICAgIGlmIChpID09IDApIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdF9lY2YgY2FyZCBub3QgcmVhZHkgZm9yIGludGVycnVwdFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJd2hpbGUgKGkgJiYKKwkgICAgICAgKHJlYWRiKGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCkgJgorCQlFQ0ZfSU5UUl9TRVQpKQorCQlpLS07CisJaWYgKGkgPT0gMCkgeworCQlERUJVRygyLCAicmF5X2NzIGludGVycnVwdF9lY2YgY2FyZCBub3QgcmVhZHkgZm9yIGludGVycnVwdFxuIik7CisJCXJldHVybiAtMTsKKwl9CiAJLyogRmlsbCB0aGUgbWFpbGJveCwgdGhlbiBraWNrIHRoZSBjYXJkICovCi0gICAgd3JpdGViKGNjcywgbG9jYWwtPnNyYW0gKyBTQ0JfQkFTRSk7Ci0gICAgd3JpdGViKEVDRl9JTlRSX1NFVCwgbG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKTsKLSAgICByZXR1cm4gMDsKKwl3cml0ZWIoY2NzLCBsb2NhbC0+c3JhbSArIFNDQl9CQVNFKTsKKwl3cml0ZWIoRUNGX0lOVFJfU0VULCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpOworCXJldHVybiAwOwogfSAvKiBpbnRlcnJ1cHRfZWNmICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIEdldCBuZXh0IGZyZWUgdHJhbnNtaXQgQ0NTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFJldHVybiAtIGluZGV4IG9mIGN1cnJlbnQgdHggY2NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHN0YXRpYyBpbnQgZ2V0X2ZyZWVfdHhfY2NzKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgZ2V0X2ZyZWVfdHhfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQVJER09ORTsKLSAgICB9CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGdldF9mcmVlX3R4X2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiBFQ0FSREdPTkU7CisJfQogCi0gICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwmbG9jYWwtPnR4X2Njc19sb2NrKSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgdHhfY2NzX2xvY2sgYnVzeVxuIik7Ci0gICAgICAgIHJldHVybiBFQ0NTQlVTWTsKLSAgICB9IAorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZsb2NhbC0+dHhfY2NzX2xvY2spKSB7CisJCURFQlVHKDEsICJyYXlfY3MgdHhfY2NzX2xvY2sgYnVzeVxuIik7CisJCXJldHVybiBFQ0NTQlVTWTsKKwl9CiAKLSAgICBmb3IgKGk9MDsgaSA8IE5VTUJFUl9PRl9UWF9DQ1M7IGkrKykgewotICAgICAgICBpZiAocmVhZGIoJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcytpKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MraSktPmxpbmspOworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfVFhfQ0NTOyBpKyspIHsKKwkJaWYgKHJlYWRiKCYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKKwkJCXdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKTsKKwkJCXdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcyArIGkpLT5saW5rKTsKIAkJCWxvY2FsLT50eF9jY3NfbG9jayA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KKwkJCXJldHVybiBpOworCQl9CisJfQogCWxvY2FsLT50eF9jY3NfbG9jayA9IDA7Ci0gICAgREVCVUcoMiwicmF5X2NzIEVSUk9SIG5vIGZyZWUgdHggQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOwotICAgIHJldHVybiBFQ0NTRlVMTDsKKwlERUJVRygyLCAicmF5X2NzIEVSUk9SIG5vIGZyZWUgdHggQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOworCXJldHVybiBFQ0NTRlVMTDsKIH0gLyogZ2V0X2ZyZWVfdHhfY2NzICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIEdldCBuZXh0IGZyZWUgQ0NTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFJldHVybiAtIGluZGV4IG9mIGN1cnJlbnQgY2NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHN0YXRpYyBpbnQgZ2V0X2ZyZWVfY2NzKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzID0gY2NzX2Jhc2UobG9jYWwpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgZ2V0X2ZyZWVfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQVJER09ORTsKLSAgICB9Ci0gICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwmbG9jYWwtPmNjc19sb2NrKSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgY2NzX2xvY2sgYnVzeVxuIik7Ci0gICAgICAgIHJldHVybiBFQ0NTQlVTWTsKLSAgICB9IAorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBnZXRfZnJlZV9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gRUNBUkRHT05FOworCX0KKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbG9jYWwtPmNjc19sb2NrKSkgeworCQlERUJVRygxLCAicmF5X2NzIGNjc19sb2NrIGJ1c3lcbiIpOworCQlyZXR1cm4gRUNDU0JVU1k7CisJfQogCi0gICAgZm9yIChpID0gTlVNQkVSX09GX1RYX0NDUzsgaSA8IE5VTUJFUl9PRl9DQ1M7IGkrKykgewotICAgICAgICBpZiAocmVhZGIoJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcytpKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgICAgICB3cml0ZWIoQ0NTX0VORF9MSVNULCAmKHBjY3MraSktPmxpbmspOworCWZvciAoaSA9IE5VTUJFUl9PRl9UWF9DQ1M7IGkgPCBOVU1CRVJfT0ZfQ0NTOyBpKyspIHsKKwkJaWYgKHJlYWRiKCYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKSA9PSBDQ1NfQlVGRkVSX0ZSRUUpIHsKKwkJCXdyaXRlYihDQ1NfQlVGRkVSX0JVU1ksICYocGNjcyArIGkpLT5idWZmZXJfc3RhdHVzKTsKKwkJCXdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcyArIGkpLT5saW5rKTsKIAkJCWxvY2FsLT5jY3NfbG9jayA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KKwkJCXJldHVybiBpOworCQl9CisJfQogCWxvY2FsLT5jY3NfbG9jayA9IDA7Ci0gICAgREVCVUcoMSwicmF5X2NzIEVSUk9SIG5vIGZyZWUgQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOwotICAgIHJldHVybiBFQ0NTRlVMTDsKKwlERUJVRygxLCAicmF5X2NzIEVSUk9SIG5vIGZyZWUgQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOworCXJldHVybiBFQ0NTRlVMTDsKIH0gLyogZ2V0X2ZyZWVfY2NzICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZV90aW1lb3V0KHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIEF1dGhlbnRpY2F0aW9uIHdpdGggYWNjZXNzIHBvaW50IGZhaWxlZCIKLSAgICAgICAiIC0gdGltZW91dFxuIik7Ci0gICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7CisJcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKikgZGF0YTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIEF1dGhlbnRpY2F0aW9uIHdpdGggYWNjZXNzIHBvaW50IGZhaWxlZCIKKwkgICAgICAgIiAtIHRpbWVvdXRcbiIpOworCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCBhc2NfdG9faW50KGNoYXIgYSkKIHsKLSAgICBpZiAoYSA8ICcwJykgcmV0dXJuIC0xOwotICAgIGlmIChhIDw9ICc5JykgcmV0dXJuIChhIC0gJzAnKTsKLSAgICBpZiAoYSA8ICdBJykgcmV0dXJuIC0xOwotICAgIGlmIChhIDw9ICdGJykgcmV0dXJuICgxMCArIGEgLSAnQScpOwotICAgIGlmIChhIDwgJ2EnKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEgPD0gJ2YnKSByZXR1cm4gKDEwICsgYSAtICdhJyk7Ci0gICAgcmV0dXJuIC0xOworCWlmIChhIDwgJzAnKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPD0gJzknKQorCQlyZXR1cm4gKGEgLSAnMCcpOworCWlmIChhIDwgJ0EnKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPD0gJ0YnKQorCQlyZXR1cm4gKDEwICsgYSAtICdBJyk7CisJaWYgKGEgPCAnYScpCisJCXJldHVybiAtMTsKKwlpZiAoYSA8PSAnZicpCisJCXJldHVybiAoMTAgKyBhIC0gJ2EnKTsKKwlyZXR1cm4gLTE7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcGFyc2VfYWRkcihjaGFyICppbl9zdHIsIFVDSEFSICpvdXQpCiB7Ci0gICAgaW50IGxlbjsKLSAgICBpbnQgaSxqLGs7Ci0gICAgaW50IHN0YXR1czsKLSAgICAKLSAgICBpZiAoaW5fc3RyID09IE5VTEwpIHJldHVybiAwOwotICAgIGlmICgobGVuID0gc3RybGVuKGluX3N0cikpIDwgMikgcmV0dXJuIDA7Ci0gICAgbWVtc2V0KG91dCwgMCwgQUREUkxFTik7CisJaW50IGxlbjsKKwlpbnQgaSwgaiwgazsKKwlpbnQgc3RhdHVzOwogCi0gICAgc3RhdHVzID0gMTsKLSAgICBqID0gbGVuIC0gMTsKLSAgICBpZiAoaiA+IDEyKSBqID0gMTI7Ci0gICAgaSA9IDU7Ci0gICAgCi0gICAgd2hpbGUgKGogPiAwKQotICAgIHsKLSAgICAgICAgaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKSBvdXRbaV0gPSBrOwotICAgICAgICBlbHNlIHJldHVybiAwOworCWlmIChpbl9zdHIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKChsZW4gPSBzdHJsZW4oaW5fc3RyKSkgPCAyKQorCQlyZXR1cm4gMDsKKwltZW1zZXQob3V0LCAwLCBBRERSTEVOKTsKIAotICAgICAgICBpZiAoaiA9PSAwKSBicmVhazsKLSAgICAgICAgaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKSBvdXRbaV0gKz0gayA8PCA0OwotICAgICAgICBlbHNlIHJldHVybiAwOwotICAgICAgICBpZiAoIWktLSkgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gMTsKKwlqID0gbGVuIC0gMTsKKwlpZiAoaiA+IDEyKQorCQlqID0gMTI7CisJaSA9IDU7CisKKwl3aGlsZSAoaiA+IDApIHsKKwkJaWYgKChrID0gYXNjX3RvX2ludChpbl9zdHJbai0tXSkpICE9IC0xKQorCQkJb3V0W2ldID0gazsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGogPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpCisJCQlvdXRbaV0gKz0gayA8PCA0OworCQllbHNlCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFpLS0pCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1czsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpyYXlfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgbmV0X2RldmljZV9zdGF0cyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAmbG9jYWwtPnN0YXRzOwotICAgIH0KLSAgICBpZiAocmVhZGIoJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCkpCi0gICAgewotICAgICAgICBsb2NhbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5tcnhfb3ZlcmZsb3cpKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9vdmVyZmxvdyk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpOwotICAgIH0KLSAgICBpZiAocmVhZGIoJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCkpCi0gICAgewotICAgICAgICBsb2NhbC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPm1yeF9jaGVja3N1bV9lcnJvcikpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCk7Ci0gICAgfQotICAgIGlmIChyZWFkYigmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KSkKLSAgICB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5yeF9oZWNfZXJyb3IpKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPnJ4X2hlY19lcnJvcik7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpOwotICAgIH0KLSAgICByZXR1cm4gJmxvY2FsLT5zdGF0czsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgbmV0X2RldmljZV9zdGF0cyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAmbG9jYWwtPnN0YXRzOworCX0KKwlpZiAocmVhZGIoJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCkpIHsKKwkJbG9jYWwtPnN0YXRzLnJ4X292ZXJfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+bXJ4X292ZXJmbG93KSk7CisJCXdyaXRlYigwLCAmcC0+bXJ4X292ZXJmbG93KTsKKwkJd3JpdGViKDAsICZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpOworCX0KKwlpZiAocmVhZGIoJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCkpIHsKKwkJbG9jYWwtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0KKwkJICAgIHN3YWIxNihyZWFkdygmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKSk7CisJCXdyaXRlYigwLCAmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKTsKKwkJd3JpdGViKDAsICZwLT5tcnhfY2hlY2tzdW1fZXJyb3JfZm9yX2hvc3QpOworCX0KKwlpZiAocmVhZGIoJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCkpIHsKKwkJbG9jYWwtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPnJ4X2hlY19lcnJvcikpOworCQl3cml0ZWIoMCwgJnAtPnJ4X2hlY19lcnJvcik7CisJCXdyaXRlYigwLCAmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KTsKKwl9CisJcmV0dXJuICZsb2NhbC0+c3RhdHM7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV91cGRhdGVfcGFybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBVQ0hBUiBvYmppZCwgVUNIQVIgKnZhbHVlLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9wYXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFVDSEFSIG9iamlkLCBVQ0hBUiAqdmFsdWUsCisJCQkgICAgaW50IGxlbikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIGludCBpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGNjc2luZGV4OworCWludCBpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9wYXJtIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfdXBkYXRlX3Bhcm0gLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQogCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDAsInJheV91cGRhdGVfcGFybSAtIE5vIGZyZWUgY2NzXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgd3JpdGViKENDU19VUERBVEVfUEFSQU1TLCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIob2JqaWQsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm9iamVjdF9pZCk7Ci0gICAgd3JpdGViKDEsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm51bWJlcl9vYmplY3RzKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uZmFpbHVyZV9jYXVzZSk7Ci0gICAgZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKLSAgICAgICAgd3JpdGViKHZhbHVlW2ldLCBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UpOwotICAgIH0KLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDAsInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQorCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHsKKwkJREVCVUcoMCwgInJheV91cGRhdGVfcGFybSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19VUERBVEVfUEFSQU1TLCAmcGNjcy0+Y21kKTsKKwl3cml0ZWIob2JqaWQsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm9iamVjdF9pZCk7CisJd3JpdGViKDEsICZwY2NzLT52YXIudXBkYXRlX3BhcmFtLm51bWJlcl9vYmplY3RzKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uZmFpbHVyZV9jYXVzZSk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXdyaXRlYih2YWx1ZVtpXSwgbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFKTsKKwl9CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygwLCAicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwl9CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJheV91cGRhdGVfbXVsdGlfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWxsKQogewotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pLCAqKmRtaXA7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBpbnQgaSA9IDA7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHZvaWQgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSwgKipkbWlwOworCWludCBjY3NpbmRleDsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGkgPSAwOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwl2b2lkIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0U7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV91cGRhdGVfbXVsdGlfbGlzdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9tdWx0aV9saXN0KCVwKVxuIixkZXYpOwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCi0gICAgewotICAgICAgICBERUJVRygxLCJyYXlfdXBkYXRlX211bHRpIC0gTm8gZnJlZSBjY3NcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVCwgJnBjY3MtPmNtZCk7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X3VwZGF0ZV9tdWx0aV9saXN0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlERUJVRygyLCAicmF5X3VwZGF0ZV9tdWx0aV9saXN0KCVwKVxuIiwgZGV2KTsKKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSB7CisJCURFQlVHKDEsICJyYXlfdXBkYXRlX211bHRpIC0gTm8gZnJlZSBjY3NcbiIpOworCQlyZXR1cm47CisJfQorCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVCwgJnBjY3MtPmNtZCk7CiAKLSAgICBpZiAoYWxsKSB7Ci0gICAgICAgIHdyaXRlYigweGZmLCAmcGNjcy0+dmFyKTsKLSAgICAgICAgbG9jYWwtPm51bV9tdWx0aSA9IDB4ZmY7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBDb3B5IHRoZSBrZXJuZWwncyBsaXN0IG9mIE1DIGFkZHJlc3NlcyB0byBjYXJkICovCi0gICAgICAgIGZvciAoZG1pcD0mZGV2LT5tY19saXN0OyAoZG1pPSpkbWlwKSE9TlVMTDsgZG1pcD0mZG1pLT5uZXh0KSB7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwLCBkbWktPmRtaV9hZGRyLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfdXBkYXRlX211bHRpIGFkZCBhZGRyICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIixkbWktPmRtaV9hZGRyWzBdLGRtaS0+ZG1pX2FkZHJbMV0sZG1pLT5kbWlfYWRkclsyXSxkbWktPmRtaV9hZGRyWzNdLGRtaS0+ZG1pX2FkZHJbNF0sZG1pLT5kbWlfYWRkcls1XSk7Ci0gICAgICAgICAgICBwICs9IEVUSF9BTEVOOwotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID4gMjU2L0FERFJMRU4pIGkgPSAyNTYvQUREUkxFTjsKLSAgICAgICAgd3JpdGViKChVQ0hBUilpLCAmcGNjcy0+dmFyKTsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHVwZGF0ZV9tdWx0aSAlZCBhZGRyZXNzZXMgaW4gbGlzdFxuIiwgaSk7Ci0gICAgICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgICAgICBsb2NhbC0+bnVtX211bHRpID0gaTsKLSAgICB9Ci0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgdXBkYXRlX211bHRpIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KKwlpZiAoYWxsKSB7CisJCXdyaXRlYigweGZmLCAmcGNjcy0+dmFyKTsKKwkJbG9jYWwtPm51bV9tdWx0aSA9IDB4ZmY7CisJfSBlbHNlIHsKKwkJLyogQ29weSB0aGUga2VybmVsJ3MgbGlzdCBvZiBNQyBhZGRyZXNzZXMgdG8gY2FyZCAqLworCQlmb3IgKGRtaXAgPSAmZGV2LT5tY19saXN0OyAoZG1pID0gKmRtaXApICE9IE5VTEw7CisJCSAgICAgZG1pcCA9ICZkbWktPm5leHQpIHsKKwkJCW1lbWNweV90b2lvKHAsIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkgICAgICBkbWktPmRtaV9hZGRyWzBdLCBkbWktPmRtaV9hZGRyWzFdLAorCQkJICAgICAgZG1pLT5kbWlfYWRkclsyXSwgZG1pLT5kbWlfYWRkclszXSwKKwkJCSAgICAgIGRtaS0+ZG1pX2FkZHJbNF0sIGRtaS0+ZG1pX2FkZHJbNV0pOworCQkJcCArPSBFVEhfQUxFTjsKKwkJCWkrKzsKKwkJfQorCQlpZiAoaSA+IDI1NiAvIEFERFJMRU4pCisJCQlpID0gMjU2IC8gQUREUkxFTjsKKwkJd3JpdGViKChVQ0hBUikgaSwgJnBjY3MtPnZhcik7CisJCURFQlVHKDEsICJyYXlfY3MgdXBkYXRlX211bHRpICVkIGFkZHJlc3NlcyBpbiBsaXN0XG4iLCBpKTsKKwkJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJCWxvY2FsLT5udW1fbXVsdGkgPSBpOworCX0KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsCisJCSAgICAgICJyYXlfY3MgdXBkYXRlX211bHRpIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCX0KIH0gLyogZW5kIHJheV91cGRhdGVfbXVsdGlfbGlzdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBVQ0hBUiBwcm9taXNjOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCVVDSEFSIHByb21pc2M7CiAKLSAgICBERUJVRygyLCJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0KCVwKVxuIixkZXYpOworCURFQlVHKDIsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0KCVwKVxuIiwgZGV2KTsKIAotICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAwKSB7Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb25cbiIpOwotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDE7Ci0gICAgICAgICAgICBwcm9taXNjID0gMTsKLSAgICAgICAgICAgIHJheV91cGRhdGVfcGFybShkZXYsICBPQkpJRF9wcm9taXNjdW91c19tb2RlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDEpIHsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvZmZcbiIpOwotICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDA7Ci0gICAgICAgICAgICBwcm9taXNjID0gMDsKLSAgICAgICAgICAgIHJheV91cGRhdGVfcGFybShkZXYsICBPQkpJRF9wcm9taXNjdW91c19tb2RlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb21pc2MsIHNpemVvZihwcm9taXNjKSk7Ci0gICAgICAgIH0KLSAgICB9CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAwKSB7CisJCQlERUJVRygxLCAicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9uXG4iKTsKKwkJCWxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAxOworCQkJcHJvbWlzYyA9IDE7CisJCQlyYXlfdXBkYXRlX3Bhcm0oZGV2LCBPQkpJRF9wcm9taXNjdW91c19tb2RlLAorCQkJCQkmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDEpIHsKKwkJCURFQlVHKDEsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb2ZmXG4iKTsKKwkJCWxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPSAwOworCQkJcHJvbWlzYyA9IDA7CisJCQlyYXlfdXBkYXRlX3Bhcm0oZGV2LCBPQkpJRF9wcm9taXNjdW91c19tb2RlLAorCQkJCQkmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKKwkJfQorCX0KIAotICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSByYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAxKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPm51bV9tdWx0aSAhPSBkZXYtPm1jX2NvdW50KSByYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAwKTsKLSAgICB9CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCXJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDEpOworCWVsc2UgeworCQlpZiAobG9jYWwtPm51bV9tdWx0aSAhPSBkZXYtPm1jX2NvdW50KQorCQkJcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMCk7CisJfQogfSAvKiBlbmQgc2V0X211bHRpY2FzdF9saXN0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEFsbCByb3V0aW5lcyBiZWxvdyBoZXJlIGFyZSBydW4gYXQgaW50ZXJydXB0IHRpbWUuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcmF5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICByYXlfZGV2X3QgKmxvY2FsOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3M7Ci0gICAgVUNIQVIgcmNzaW5kZXg7Ci0gICAgVUNIQVIgdG1wOwotICAgIFVDSEFSIGNtZDsKLSAgICBVQ0hBUiBzdGF0dXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlyYXlfZGV2X3QgKmxvY2FsOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3M7CisJVUNIQVIgcmNzaW5kZXg7CisJVUNIQVIgdG1wOworCVVDSEFSIGNtZDsKKwlVQ0hBUiBzdGF0dXM7CiAKLSAgICBpZiAoZGV2ID09IE5VTEwpIC8qIE5vdGUgdGhhdCB3ZSB3YW50IGludGVycnVwdHMgd2l0aCBkZXYtPnN0YXJ0ID09IDAgKi8KLQlyZXR1cm4gSVJRX05PTkU7CisJaWYgKGRldiA9PSBOVUxMKQkvKiBOb3RlIHRoYXQgd2Ugd2FudCBpbnRlcnJ1cHRzIHdpdGggZGV2LT5zdGFydCA9PSAwICovCisJCXJldHVybiBJUlFfTk9ORTsKIAotICAgIERFQlVHKDQsInJheV9jczogaW50ZXJydXB0IGZvciAqZGV2PSVwXG4iLGRldik7CisJREVCVUcoNCwgInJheV9jczogaW50ZXJydXB0IGZvciAqZGV2PSVwXG4iLCBkZXYpOwogCi0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGxpbmsgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKilsb2NhbC0+ZmluZGVyOwotICAgIGlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBpbnRlcnJ1cHQgZnJvbSBkZXZpY2Ugbm90IHByZXNlbnQgb3Igc3VzcGVuZGVkLlxuIik7Ci0gICAgICAgIHJldHVybiBJUlFfTk9ORTsKLSAgICB9Ci0gICAgcmNzaW5kZXggPSByZWFkYigmKChzdHJ1Y3Qgc2NiIF9faW9tZW0gKikobG9jYWwtPnNyYW0pKS0+cmNzX2luZGV4KTsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJbGluayA9IChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKWxvY2FsLT5maW5kZXI7CisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKKwkJREVCVUcoMiwKKwkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgZnJvbSBkZXZpY2Ugbm90IHByZXNlbnQgb3Igc3VzcGVuZGVkLlxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJcmNzaW5kZXggPSByZWFkYigmKChzdHJ1Y3Qgc2NiIF9faW9tZW0gKikobG9jYWwtPnNyYW0pKS0+cmNzX2luZGV4KTsKIAotICAgIGlmIChyY3NpbmRleCA+PSAoTlVNQkVSX09GX0NDUyArIE5VTUJFUl9PRl9SQ1MpKQotICAgIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLHJjc2luZGV4KTsKLSAgICAgICAgY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKLSAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotICAgIH0KLSAgICBpZiAocmNzaW5kZXggPCBOVU1CRVJfT0ZfQ0NTKSAvKiBJZiBpdCdzIGEgcmV0dXJuZWQgQ0NTICovCi0gICAgewotICAgICAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7Ci0gICAgICAgIGNtZCA9IHJlYWRiKCZwY2NzLT5jbWQpOwotICAgICAgICBzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHN3aXRjaCAoY21kKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TOiAvKiBIYXBwZW5zIGluIGZpcm13YXJlIHNvbWVkYXkgKi8KLSAgICAgICAgICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBPS1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBmYWlsXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19VUERBVEVfUEFSQU1TOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGRvbmVcbiIpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIHRtcCA9IHJlYWRiKCZwY2NzLT52YXIudXBkYXRlX3BhcmFtLmZhaWx1cmVfY2F1c2UpOwotICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGZhaWxlZCAtIHJlYXNvbiAlZFxuIix0bXApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1JFUE9SVF9QQVJBTVM6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHJlcG9ydCBwYXJhbXMgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNUOiAvKiBOb3RlIHRoYXQgdGhpcyBDQ1MgaXNuJ3QgcmV0dXJuZWQgKi8KLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgQ0NTIFVwZGF0ZSBNdWx0aWNhc3QgTGlzdCBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19VUERBVEVfUE9XRVJfU0FWSU5HU19NT0RFOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcG93ZXIgc2F2ZSBtb2RlIGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NUQVJUX05FVFdPUks6Ci0gICAgICAgIGNhc2UgQ0NTX0pPSU5fTkVUV09SSzoKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydGVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweV9mcm9taW8oJmxvY2FsLT5ic3NfaWQscGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuYnNzaWQsQUREUkxFTik7CisJaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKKwkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIiwgcmNzaW5kZXgpOworCQljbGVhcl9pbnRlcnJ1cHQobG9jYWwpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWlmIChyY3NpbmRleCA8IE5VTUJFUl9PRl9DQ1MpIHsgLyogSWYgaXQncyBhIHJldHVybmVkIENDUyAqLworCQlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7CisJCWNtZCA9IHJlYWRiKCZwY2NzLT5jbWQpOworCQlzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgQ0NTX0RPV05MT0FEX1NUQVJUVVBfUEFSQU1TOgkvKiBIYXBwZW5zIGluIGZpcm13YXJlIHNvbWVkYXkgKi8KKwkJCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBPS1xuIik7CisJCQl9IGVsc2UgeworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIGZhaWxcbiIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1VQREFURV9QQVJBTVM6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGRvbmVcbiIpOworCQkJaWYgKHN0YXR1cyAhPSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCXRtcCA9CisJCQkJICAgIHJlYWRiKCZwY2NzLT52YXIudXBkYXRlX3BhcmFtLgorCQkJCQkgIGZhaWx1cmVfY2F1c2UpOworCQkJCURFQlVHKDAsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBmYWlsZWQgLSByZWFzb24gJWRcbiIsCisJCQkJICAgICAgdG1wKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19SRVBPUlRfUEFSQU1TOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgcmVwb3J0IHBhcmFtcyBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19VUERBVEVfTVVMVElDQVNUX0xJU1Q6CS8qIE5vdGUgdGhhdCB0aGlzIENDUyBpc24ndCByZXR1cm5lZCAqLworCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IENDUyBVcGRhdGUgTXVsdGljYXN0IExpc3QgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVVBEQVRFX1BPV0VSX1NBVklOR1NfTU9ERToKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcG93ZXIgc2F2ZSBtb2RlIGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NUQVJUX05FVFdPUks6CisJCWNhc2UgQ0NTX0pPSU5fTkVUV09SSzoKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlpZiAocmVhZGIKKwkJCQkgICAgKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5uZXRfaW5pdGlhdGVkKSA9PQorCQkJCSAgICAxKSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0ZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQl9CisJCQkJbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCwKKwkJCQkJICAgICAgcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuYnNzaWQsCisJCQkJCSAgICAgIEFERFJMRU4pOwogCi0gICAgICAgICAgICAgICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAzOwotICAgICAgICAgICAgICAgIGVsc2UgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsubmV0X2RlZmF1bHRfdHhfcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmVuY3J5cHRpb24gPSByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuZW5jcnlwdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKCFzbmlmZmVyICYmIChsb2NhbC0+bmV0X3R5cGUgPT0gSU5GUkEpCi0gICAgICAgICAgICAgICAgICAgICYmICEobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRlKGxvY2FsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9GQUlMRUQ7CisJCQkJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKKwkJCQkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAzOworCQkJCWVsc2UKKwkJCQkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPQorCQkJCQkgICAgcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLgorCQkJCQkJICBuZXRfZGVmYXVsdF90eF9yYXRlKTsKKwkJCQlsb2NhbC0+ZW5jcnlwdGlvbiA9CisJCQkJICAgIHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5lbmNyeXB0aW9uKTsKKwkJCQlpZiAoIXNuaWZmZXIgJiYgKGxvY2FsLT5uZXRfdHlwZSA9PSBJTkZSQSkKKwkJCQkgICAgJiYgIShsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKSkgeworCQkJCQlhdXRoZW50aWNhdGUobG9jYWwpOworCQkJCX0KKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKKwkJCX0gZWxzZSB7CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfRkFJTEVEOwogCi0gICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaKjU7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19TVEFSVF9ORVRXT1JLKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnQgZmFpbGVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmc3RhcnRfbmV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luIGZhaWxlZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU1RBUlRfQVNTT0NJQVRJT046Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19DT01QTEVURTsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgYXNzb2NpYXRpb24gc3VjY2Vzc2Z1bFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGFzc29jaWF0aW9uIGZhaWxlZCxcbiIpOwotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOwotICAgICAgICAgICAgICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1RYX1JFUVVFU1Q6Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMywicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGNvbXBsZXRlXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBmYWlsZWRcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzbmlmZmVyKSBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1RFU1RfTUVNT1JZOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBtZW0gdGVzdCBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TSFVURE9XTjoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgcmV0dXJuZWQgLSBTaHV0ZG93blxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfRFVNUF9NRU1PUlk6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGR1bXAgbWVtb3J5IGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NUQVJUX1RJTUVSOgotICAgICAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdCBESU5HIC0gcmF5bGluayB0aW1lciBleHBpcmVkXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyAweCV4IHJldHVybmVkIDB4JXhcbiIsXAotICAgICAgICAgICAgICAgICAgcmNzaW5kZXgsIGNtZCk7Ci0gICAgICAgIH0KLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KLSAgICBlbHNlIC8qIEl0J3MgYW4gUkNTICovCi0gICAgewotICAgICAgICBwcmNzID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7Ci0gICAgCi0gICAgICAgIHN3aXRjaCAocmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBQUk9DRVNTX1JYX1BBQ0tFVDoKLSAgICAgICAgICAgIHJheV9yeChkZXYsIGxvY2FsLCBwcmNzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJFSk9JTl9ORVRfQ09NUExFVEU6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHJlam9pbiBuZXQgY29tcGxldGVcbiIpOwotICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7Ci0gICAgICAgICAgICAvKiBkbyB3ZSBuZWVkIHRvIGNsZWFyIHR4IGJ1ZmZlcnMgQ0NTJ3M/ICovCi0gICAgICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzbmlmZmVyKSBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCwgcHJjcy0+dmFyLnJlam9pbl9uZXRfY29tcGxldGUuYnNzaWQsIEFERFJMRU4pOwotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBuZXcgQlNTSUQgPSAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsXAotICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5ic3NfaWRbMF0sIGxvY2FsLT5ic3NfaWRbMV0sIGxvY2FsLT5ic3NfaWRbMl0sXAotICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5ic3NfaWRbM10sIGxvY2FsLT5ic3NfaWRbNF0sIGxvY2FsLT5ic3NfaWRbNV0pOwotICAgICAgICAgICAgICAgIGlmICghc25pZmZlcikgYXV0aGVudGljYXRlKGxvY2FsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJPQU1JTkdfSU5JVElBVEVEOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCByb2FtaW5nIGluaXRpYXRlZFxuIik7IAotICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBKQVBBTl9DQUxMX1NJR05fUlhEOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBqYXBhbiBjYWxsIHNpZ24gcnhcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgVW5leHBlY3RlZCBpbnRlcnJ1cHQgZm9yIFJDUyAweCV4IGNtZCA9IDB4JXhcbiIsXAotICAgICAgICAgICAgICAgICAgcmNzaW5kZXgsICh1bnNpZ25lZCBpbnQpIHJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9Ci0gICAgY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKLSAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQkJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQkJCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogNTsKKwkJCQlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCQkJCWlmIChzdGF0dXMgPT0gQ0NTX1NUQVJUX05FVFdPUkspIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnQgZmFpbGVkXG4iLAorCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CisJCQkJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZzdGFydF9uZXQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbiBmYWlsZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OworCQkJCX0KKwkJCQlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU1RBUlRfQVNTT0NJQVRJT046CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19DT01QTEVURTsKKwkJCQlERUJVRygwLCAicmF5X2NzIGFzc29jaWF0aW9uIHN1Y2Nlc3NmdWxcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlERUJVRygwLCAicmF5X2NzIGFzc29jaWF0aW9uIGZhaWxlZCxcbiIpOworCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOworCQkJCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19UWF9SRVFVRVNUOgorCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCURFQlVHKDMsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBjb21wbGV0ZVxuIik7CisJCQl9IGVsc2UgeworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBmYWlsZWRcbiIpOworCQkJfQorCQkJaWYgKCFzbmlmZmVyKQorCQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVEVTVF9NRU1PUlk6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBtZW0gdGVzdCBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19TSFVURE9XTjoKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyByZXR1cm5lZCAtIFNodXRkb3duXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19EVU1QX01FTU9SWToKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGR1bXAgbWVtb3J5IGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NUQVJUX1RJTUVSOgorCQkJREVCVUcoMiwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IERJTkcgLSByYXlsaW5rIHRpbWVyIGV4cGlyZWRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgVW5leHBlY3RlZCBDQ1MgMHgleCByZXR1cm5lZCAweCV4XG4iLAorCQkJICAgICAgcmNzaW5kZXgsIGNtZCk7CisJCX0KKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOworCX0gZWxzZSB7IC8qIEl0J3MgYW4gUkNTICovCisKKwkJcHJjcyA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OworCisJCXN3aXRjaCAocmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpIHsKKwkJY2FzZSBQUk9DRVNTX1JYX1BBQ0tFVDoKKwkJCXJheV9yeChkZXYsIGxvY2FsLCBwcmNzKTsKKwkJCWJyZWFrOworCQljYXNlIFJFSk9JTl9ORVRfQ09NUExFVEU6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCByZWpvaW4gbmV0IGNvbXBsZXRlXG4iKTsKKwkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOworCQkJLyogZG8gd2UgbmVlZCB0byBjbGVhciB0eCBidWZmZXJzIENDUydzPyAqLworCQkJaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgeworCQkJCWlmICghc25pZmZlcikKKwkJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCwKKwkJCQkJICAgICAgcHJjcy0+dmFyLnJlam9pbl9uZXRfY29tcGxldGUuCisJCQkJCSAgICAgIGJzc2lkLCBBRERSTEVOKTsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICJyYXlfY3MgbmV3IEJTU0lEID0gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbMF0sIGxvY2FsLT5ic3NfaWRbMV0sCisJCQkJICAgICAgbG9jYWwtPmJzc19pZFsyXSwgbG9jYWwtPmJzc19pZFszXSwKKwkJCQkgICAgICBsb2NhbC0+YnNzX2lkWzRdLCBsb2NhbC0+YnNzX2lkWzVdKTsKKwkJCQlpZiAoIXNuaWZmZXIpCisJCQkJCWF1dGhlbnRpY2F0ZShsb2NhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBST0FNSU5HX0lOSVRJQVRFRDoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHJvYW1pbmcgaW5pdGlhdGVkXG4iKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROworCQkJYnJlYWs7CisJCWNhc2UgSkFQQU5fQ0FMTF9TSUdOX1JYRDoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGphcGFuIGNhbGwgc2lnbiByeFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIFVuZXhwZWN0ZWQgaW50ZXJydXB0IGZvciBSQ1MgMHgleCBjbWQgPSAweCV4XG4iLAorCQkJICAgICAgcmNzaW5kZXgsCisJCQkgICAgICAodW5zaWduZWQgaW50KXJlYWRiKCZwcmNzLT5pbnRlcnJ1cHRfaWQpKTsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwcmNzLT5idWZmZXJfc3RhdHVzKTsKKwl9CisJY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9IC8qIHJheV9pbnRlcnJ1cHQgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcykKK3N0YXRpYyB2b2lkIHJheV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCByYXlfZGV2X3QgKmxvY2FsLAorCQkgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpCiB7Ci0gICAgaW50IHJ4X2xlbjsKLSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHI7Ci0gICAgdm9pZCBfX2lvbWVtICpwbXNnOwotICAgIERFQlVHKDQsInJheV9yeCBwcm9jZXNzIHJ4IHBhY2tldFxuIik7CisJaW50IHJ4X2xlbjsKKwl1bnNpZ25lZCBpbnQgcGt0X2FkZHI7CisJdm9pZCBfX2lvbWVtICpwbXNnOworCURFQlVHKDQsICJyYXlfcnggcHJvY2VzcyByeCBwYWNrZXRcbiIpOwogCi0gICAgLyogQ2FsY3VsYXRlIGFkZHJlc3Mgb2YgcGFja2V0IHdpdGhpbiBSeCBidWZmZXIgKi8KLSAgICBwa3RfYWRkciA9ICgocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clsxXSkpICYgUlhfQlVGRl9FTkQ7Ci0gICAgLyogTGVuZ3RoIG9mIGZpcnN0IHBhY2tldCBmcmFnbWVudCAqLwotICAgIHJ4X2xlbiA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgKyByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7CisJLyogQ2FsY3VsYXRlIGFkZHJlc3Mgb2YgcGFja2V0IHdpdGhpbiBSeCBidWZmZXIgKi8KKwlwa3RfYWRkciA9ICgocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMF0pIDw8IDgpCisJCSAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkgJiBSWF9CVUZGX0VORDsKKwkvKiBMZW5ndGggb2YgZmlyc3QgcGFja2V0IGZyYWdtZW50ICovCisJcnhfbGVuID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQorCSAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKIAotICAgIGxvY2FsLT5sYXN0X3JzbCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X3NpZ19sZXYpOwotICAgIHBtc2cgPSBsb2NhbC0+cm1lbSArIHBrdF9hZGRyOwotICAgIHN3aXRjaChyZWFkYihwbXNnKSkKLSAgICB7Ci0gICAgY2FzZSBEQVRBX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBkYXRhIHR5cGVcbiIpOwotICAgICAgICByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVVUSEVOVElDX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBhdXRoZW50aWMgdHlwZVxuIik7Ci0gICAgICAgIGlmIChzbmlmZmVyKSByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGVsc2UgcnhfYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERUFVVEhFTlRJQ19UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggZGVhdXRoIHR5cGVcbiIpOwotICAgICAgICBpZiAoc25pZmZlcikgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBlbHNlIHJ4X2RlYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOVUxMX01TR19UWVBFOgotICAgICAgICBERUJVRygzLCJyYXlfY3MgcnggTlVMTCBtc2dcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJFQUNPTl9UWVBFOgotICAgICAgICBERUJVRyg0LCJyYXlfcnggYmVhY29uIHR5cGVcbiIpOwotICAgICAgICBpZiAoc25pZmZlcikgcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCWxvY2FsLT5sYXN0X3JzbCA9IHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X3NpZ19sZXYpOworCXBtc2cgPSBsb2NhbC0+cm1lbSArIHBrdF9hZGRyOworCXN3aXRjaCAocmVhZGIocG1zZykpIHsKKwljYXNlIERBVEFfVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBkYXRhIHR5cGVcbiIpOworCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWJyZWFrOworCWNhc2UgQVVUSEVOVElDX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggYXV0aGVudGljIHR5cGVcbiIpOworCQlpZiAoc25pZmZlcikKKwkJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJZWxzZQorCQkJcnhfYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBERUFVVEhFTlRJQ19UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGRlYXV0aCB0eXBlXG4iKTsKKwkJaWYgKHNuaWZmZXIpCisJCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJCWVsc2UKKwkJCXJ4X2RlYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBOVUxMX01TR19UWVBFOgorCQlERUJVRygzLCAicmF5X2NzIHJ4IE5VTEwgbXNnXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBCRUFDT05fVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBiZWFjb24gdHlwZVxuIik7CisJCWlmIChzbmlmZmVyKQorCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwogCi0gICAgICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCAoVUNIQVIgKikmbG9jYWwtPmxhc3RfYmNuLCBwa3RfYWRkciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2xlbiA8IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSA/IAotICAgICAgICAgICAgICAgICAgICAgICAgICByeF9sZW4gOiBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkpOworCQljb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgKFVDSEFSICopICZsb2NhbC0+bGFzdF9iY24sIHBrdF9hZGRyLAorCQkJCSAgcnhfbGVuIDwgc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpID8KKwkJCQkgIHJ4X2xlbiA6IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSk7CiAKLQlsb2NhbC0+YmVhY29uX3J4ZWQgPSAxOwotICAgICAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3Mgc28gdGhlIGNhcmQgY291bnRlcnMgbmV2ZXIgb3ZlcmZsb3cgKi8KLSAgICAgICAgcmF5X2dldF9zdGF0cyhkZXYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIHVua25vd24gcGt0IHR5cGUgJTJ4XG4iLCAodW5zaWduZWQgaW50KSByZWFkYihwbXNnKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKwkJbG9jYWwtPmJlYWNvbl9yeGVkID0gMTsKKwkJLyogR2V0IHRoZSBzdGF0aXN0aWNzIHNvIHRoZSBjYXJkIGNvdW50ZXJzIG5ldmVyIG92ZXJmbG93ICovCisJCXJheV9nZXRfc3RhdHMoZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUcoMCwgInJheV9jcyB1bmtub3duIHBrdCB0eXBlICUyeFxuIiwKKwkJICAgICAgKHVuc2lnbmVkIGludClyZWFkYihwbXNnKSk7CisJCWJyZWFrOworCX0KIAogfSAvKiBlbmQgcmF5X3J4ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIAotICAgICAgICAgICAgIGludCByeF9sZW4pCitzdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKIHsKLSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLSAgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBVQ0hBUiAqcnhfcHRyOwotICAgIGludCB0b3RhbF9sZW47Ci0gICAgaW50IHRtcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlVQ0hBUiAqcnhfcHRyOworCWludCB0b3RhbF9sZW47CisJaW50IHRtcDsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICBpbnQgc2lnbGV2ID0gbG9jYWwtPmxhc3RfcnNsOwotICAgIHVfY2hhciBsaW5rc3JjYWRkcltFVEhfQUxFTl07CS8qIE90aGVyIGVuZCBvZiB0aGUgd2lyZWxlc3MgbGluayAqLworCWludCBzaWdsZXYgPSBsb2NhbC0+bGFzdF9yc2w7CisJdV9jaGFyIGxpbmtzcmNhZGRyW0VUSF9BTEVOXTsJLyogT3RoZXIgZW5kIG9mIHRoZSB3aXJlbGVzcyBsaW5rICovCiAjZW5kaWYKIAotICAgIGlmICghc25pZmZlcikgewotICAgICAgICBpZiAodHJhbnNsYXRlKSB7CisJaWYgKCFzbmlmZmVyKSB7CisJCWlmICh0cmFuc2xhdGUpIHsKIC8qIFRCRCBsZW5ndGggbmVlZHMgZml4aW5nIGZvciB0cmFuc2xhdGVkIGhlYWRlciAqLwotICAgICAgICAgICAgaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAotICAgICAgICAgICAgICAgIHJ4X2xlbiA+IChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKyBGQ1NfTEVOKSkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIscnhfbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBlbmNhcHN1bGF0ZWQgZXRoZXJuZXQgKi8gewotICAgICAgICAgICAgaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAotICAgICAgICAgICAgICAgIHJ4X2xlbiA+IChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKyBGQ1NfTEVOKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIixyeF9sZW4pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBERUJVRyg0LCJyYXlfY3MgcnhfZGF0YSBwYWNrZXRcbiIpOwotICAgIC8qIElmIGZyYWdtZW50ZWQgcGFja2V0LCB2ZXJpZnkgc2l6ZXMgb2YgZnJhZ21lbnRzIGFkZCB1cCAqLwotICAgIGlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyByeCdlZCBmcmFnbWVudFxuIik7Ci0gICAgICAgIHRtcCA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgICAgICsgIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzFdKTsKLSAgICAgICAgdG90YWxfbGVuID0gdG1wOwotICAgICAgICBwcmNzbGluayA9IHByY3M7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHRtcCAtPSAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICsgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOwotICAgICAgICAgICAgaWYgKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSA9PSAweEZGCi0gICAgICAgICAgICAgICAgfHwgdG1wIDwgMCkgYnJlYWs7Ci0gICAgICAgICAgICBwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKQotICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT5saW5rX2ZpZWxkKTsKLSAgICAgICAgfSB3aGlsZSAoMSk7CisJCQlpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8CisJCQkgICAgcnhfbGVuID4KKwkJCSAgICAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsKKwkJCSAgICAgRkNTX0xFTikpIHsKKwkJCQlERUJVRygwLAorCQkJCSAgICAgICJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIiwKKwkJCQkgICAgICByeF9sZW4pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsgLyogZW5jYXBzdWxhdGVkIGV0aGVybmV0ICovCiAKLSAgICAgICAgaWYgKHRtcCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyByeF9kYXRhIGZyYWdtZW50IGxlbmd0aHMgZG9uJ3QgYWRkIHVwXG4iKTsKLSAgICAgICAgICAgIGxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7IAotICAgICAgICAgICAgcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsgLyogU2luZ2xlIHVuZnJhZ21lbnRlZCBwYWNrZXQgKi8KLSAgICAgICAgdG90YWxfbGVuID0gcnhfbGVuOwotICAgIH0KKwkJCWlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKKwkJCSAgICByeF9sZW4gPgorCQkJICAgIChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKworCQkJICAgICBGQ1NfTEVOKSkgeworCQkJCURFQlVHKDAsCisJCQkJICAgICAgInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLAorCQkJCSAgICAgIHJ4X2xlbik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorCURFQlVHKDQsICJyYXlfY3MgcnhfZGF0YSBwYWNrZXRcbiIpOworCS8qIElmIGZyYWdtZW50ZWQgcGFja2V0LCB2ZXJpZnkgc2l6ZXMgb2YgZnJhZ21lbnRzIGFkZCB1cCAqLworCWlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7CisJCURFQlVHKDEsICJyYXlfY3MgcngnZWQgZnJhZ21lbnRcbiIpOworCQl0bXAgPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMF0pIDw8IDgpCisJCSAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzFdKTsKKwkJdG90YWxfbGVuID0gdG1wOworCQlwcmNzbGluayA9IHByY3M7CisJCWRvIHsKKwkJCXRtcCAtPQorCQkJICAgIChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pCisJCQkgICAgIDw8IDgpCisJCQkgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOworCQkJaWYgKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KQorCQkJICAgID09IDB4RkYgfHwgdG1wIDwgMCkKKwkJCQlicmVhazsKKwkJCXByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCisJCQkgICAgKyByZWFkYigmcHJjc2xpbmstPmxpbmtfZmllbGQpOworCQl9IHdoaWxlICgxKTsKIAotICAgIHNrYiA9IGRldl9hbGxvY19za2IoIHRvdGFsX2xlbis1ICk7Ci0gICAgaWYgKHNrYiA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIHJ4X2RhdGEgY291bGQgbm90IGFsbG9jYXRlIHNrYlxuIik7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7IAotICAgICAgICBpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikKLSAgICAgICAgICAgIHJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2tiX3Jlc2VydmUoIHNrYiwgMik7ICAgLyogQWxpZ24gSVAgb24gMTYgYnl0ZSAoVEJEIGNoZWNrIHRoaXMpKi8KKwkJaWYgKHRtcCA8IDApIHsKKwkJCURFQlVHKDAsCisJCQkgICAgICAicmF5X2NzIHJ4X2RhdGEgZnJhZ21lbnQgbGVuZ3RocyBkb24ndCBhZGQgdXBcbiIpOworCQkJbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeyAvKiBTaW5nbGUgdW5mcmFnbWVudGVkIHBhY2tldCAqLworCQl0b3RhbF9sZW4gPSByeF9sZW47CisJfQogCi0gICAgREVCVUcoNCwicmF5X2NzIHJ4X2RhdGEgdG90YWxfbGVuID0gJXgsIHJ4X2xlbiA9ICV4XG4iLHRvdGFsX2xlbixyeF9sZW4pOworCXNrYiA9IGRldl9hbGxvY19za2IodG90YWxfbGVuICsgNSk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCURFQlVHKDAsICJyYXlfY3MgcnhfZGF0YSBjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKKwkJbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpCisJCQlyZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgMik7CS8qIEFsaWduIElQIG9uIDE2IGJ5dGUgKFRCRCBjaGVjayB0aGlzKSAqLworCisJREVCVUcoNCwgInJheV9jcyByeF9kYXRhIHRvdGFsX2xlbiA9ICV4LCByeF9sZW4gPSAleFxuIiwgdG90YWxfbGVuLAorCSAgICAgIHJ4X2xlbik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogUmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3IgdGhlIHdob2xlIGRhbW4gcGFja2V0LiAqLwotICAgIHJ4X3B0ciA9IHNrYl9wdXQoIHNrYiwgdG90YWxfbGVuKTsKLSAgICAvKiBDb3B5IHRoZSB3aG9sZSBwYWNrZXQgdG8gc2tfYnVmZiAqLwotICAgIHJ4X3B0ciArPSBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciAmIFJYX0JVRkZfRU5ELCByeF9sZW4pOwotICAgIC8qIEdldCBzb3VyY2UgYWRkcmVzcyAqLworCS8qIFJlc2VydmUgZW5vdWdoIHJvb20gZm9yIHRoZSB3aG9sZSBkYW1uIHBhY2tldC4gKi8KKwlyeF9wdHIgPSBza2JfcHV0KHNrYiwgdG90YWxfbGVuKTsKKwkvKiBDb3B5IHRoZSB3aG9sZSBwYWNrZXQgdG8gc2tfYnVmZiAqLworCXJ4X3B0ciArPQorCSAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciAmIFJYX0JVRkZfRU5ELCByeF9sZW4pOworCS8qIEdldCBzb3VyY2UgYWRkcmVzcyAqLwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgb2Zmc2V0b2Yoc3RydWN0IG1hY19oZWFkZXIsIGFkZHJfMiksCi0JCQkJICAgICBsaW5rc3JjYWRkciwgRVRIX0FMRU4pOworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwKKwkJCQkJIG9mZnNldG9mKHN0cnVjdCBtYWNfaGVhZGVyLCBhZGRyXzIpLAorCQkJCQkgbGlua3NyY2FkZHIsIEVUSF9BTEVOKTsKICNlbmRpZgotICAgIC8qIE5vdywgZGVhbCB3aXRoIGVuY2Fwc3VsYXRpb24vdHJhbnNsYXRpb24vc25pZmZlciAqLwotICAgIGlmICghc25pZmZlcikgewotICAgICAgICBpZiAoIXRyYW5zbGF0ZSkgeyAKLSAgICAgICAgICAgIC8qIEVuY2Fwc3VsYXRlZCBldGhlcm5ldCwgc28ganVzdCBsb3Agb2ZmIDgwMi4xMSBNQUMgaGVhZGVyICovCisJLyogTm93LCBkZWFsIHdpdGggZW5jYXBzdWxhdGlvbi90cmFuc2xhdGlvbi9zbmlmZmVyICovCisJaWYgKCFzbmlmZmVyKSB7CisJCWlmICghdHJhbnNsYXRlKSB7CisJCQkvKiBFbmNhcHN1bGF0ZWQgZXRoZXJuZXQsIHNvIGp1c3QgbG9wIG9mZiA4MDIuMTEgTUFDIGhlYWRlciAqLwogLyogVEJEIHJlc2VydmUgICAgICAgICAgICBza2JfcmVzZXJ2ZSggc2tiLCBSWF9NQUNfSEVBREVSX0xFTkdUSCk7ICovCi0gICAgICAgICAgICBza2JfcHVsbCggc2tiLCBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBEbyB0cmFuc2xhdGlvbiAqLwotICAgICAgICAgICAgdW50cmFuc2xhdGUobG9jYWwsIHNrYiwgdG90YWxfbGVuKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsgIC8qIHNuaWZmZXIgbW9kZSwgc28ganVzdCBwYXNzIHdob2xlIHBhY2tldCAqLyAgfTsKKwkJCXNrYl9wdWxsKHNrYiwgUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCQl9IGVsc2UgeworCQkJLyogRG8gdHJhbnNsYXRpb24gKi8KKwkJCXVudHJhbnNsYXRlKGxvY2FsLCBza2IsIHRvdGFsX2xlbik7CisJCX0KKwl9IGVsc2UgeyAvKiBzbmlmZmVyIG1vZGUsIHNvIGp1c3QgcGFzcyB3aG9sZSBwYWNrZXQgKi8KKwl9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIE5vdyBwaWNrIHVwIHRoZSByZXN0IG9mIHRoZSBmcmFnbWVudHMgaWYgYW55ICovCi0gICAgdG1wID0gMTc7IAotICAgIGlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKSB7Ci0gICAgICAgIHByY3NsaW5rID0gcHJjczsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHJ4X2RhdGEgaW4gZnJhZ21lbnQgbG9vcFxuIik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCi0gICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7Ci0gICAgICAgICAgICByeF9sZW4gPSAoKCByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pKQotICAgICAgICAgICAgICAgICYgUlhfQlVGRl9FTkQ7Ci0gICAgICAgICAgICBwa3RfYWRkciA9ICgoIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkKLSAgICAgICAgICAgICAgICAmIFJYX0JVRkZfRU5EOworCS8qIE5vdyBwaWNrIHVwIHRoZSByZXN0IG9mIHRoZSBmcmFnbWVudHMgaWYgYW55ICovCisJdG1wID0gMTc7CisJaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKKwkJcHJjc2xpbmsgPSBwcmNzOworCQlERUJVRygxLCAicmF5X2NzIHJ4X2RhdGEgaW4gZnJhZ21lbnQgbG9vcFxuIik7CisJCWRvIHsKKwkJCXByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCisJCQkgICAgKworCQkJICAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKwkJCXJ4X2xlbiA9CisJCQkgICAgKChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pCisJCQkgICAgICA8PCA4KQorCQkJICAgICArCisJCQkgICAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSkpCisJCQkgICAgJiBSWF9CVUZGX0VORDsKKwkJCXBrdF9hZGRyID0KKwkJCSAgICAoKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwKKwkJCSAgICAgIDgpCisJCQkgICAgICsgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkKKwkJCSAgICAmIFJYX0JVRkZfRU5EOwogCi0gICAgICAgICAgICByeF9wdHIgKz0gY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIHJ4X3B0ciwgcGt0X2FkZHIsIHJ4X2xlbik7CisJCQlyeF9wdHIgKz0KKwkJCSAgICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciwgcnhfbGVuKTsKIAotICAgICAgICB9IHdoaWxlICh0bXAtLSAmJiAKLSAgICAgICAgICAgICAgICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpOwotICAgICAgICByZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOwotICAgIH0KKwkJfSB3aGlsZSAodG1wLS0gJiYKKwkJCSByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0KKwkJCSAweEZGKTsKKwkJcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKKwl9CiAKLSAgICBza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7Ci0gICAgbmV0aWZfcngoc2tiKTsKLSAgICBsb2NhbC0+c3RhdHMucnhfcGFja2V0cysrOwotICAgIGxvY2FsLT5zdGF0cy5yeF9ieXRlcyArPSB0b3RhbF9sZW47CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwluZXRpZl9yeChza2IpOworCWxvY2FsLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbG9jYWwtPnN0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX2xlbjsKIAotICAgIC8qIEdhdGhlciBzaWduYWwgc3RyZW5ndGggcGVyIGFkZHJlc3MgKi8KKwkvKiBHYXRoZXIgc2lnbmFsIHN0cmVuZ3RoIHBlciBhZGRyZXNzICovCiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgLyogRm9yIHRoZSBBY2Nlc3MgUG9pbnQgb3IgdGhlIG5vZGUgaGF2aW5nIHN0YXJ0ZWQgdGhlIGFkLWhvYyBuZXQKLSAgICAgKiBub3RlIDogYWQtaG9jIHdvcmsgb25seSBpbiBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBidXQgd2UKLSAgICAgKiBrbHVkZ2UgaW4gcmF5X2dldF93aXJlbGVzc19zdGF0cy4uLiAqLwotICAgIGlmKCFtZW1jbXAobGlua3NyY2FkZHIsIGxvY2FsLT5ic3NfaWQsIEVUSF9BTEVOKSkKLSAgICAgIHsKLQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotCS8qbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBub25lID8gKi8KLQlsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBzaWdsZXY7Ci0JLypsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBub25lID8gKi8KLQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9IDB4MjsKLSAgICAgIH0KLSAgICAvKiBOb3csIHVwZGF0ZSB0aGUgc3B5IHN0dWZmICovCi0gICAgewotCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQl3c3RhdHMubGV2ZWwgPSBzaWdsZXY7Ci0JLyogd3N0YXRzLm5vaXNlID0gbm9uZSA/ICovCi0JLyogd3N0YXRzLnF1YWwgPSBub25lID8gKi8KLQl3c3RhdHMudXBkYXRlZCA9IDB4MjsKLQkvKiBVcGRhdGUgc3B5IHJlY29yZHMgKi8KLQl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgbGlua3NyY2FkZHIsICZ3c3RhdHMpOwotICAgIH0KLSNlbmRpZgkvKiBXSVJFTEVTU19TUFkgKi8KKwkvKiBGb3IgdGhlIEFjY2VzcyBQb2ludCBvciB0aGUgbm9kZSBoYXZpbmcgc3RhcnRlZCB0aGUgYWQtaG9jIG5ldAorCSAqIG5vdGUgOiBhZC1ob2Mgd29yayBvbmx5IGluIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGJ1dCB3ZQorCSAqIGtsdWRnZSBpbiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzLi4uICovCisJaWYgKCFtZW1jbXAobGlua3NyY2FkZHIsIGxvY2FsLT5ic3NfaWQsIEVUSF9BTEVOKSkgeworCQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLworCQkvKmxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbm9uZSA/ICovCisJCWxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IHNpZ2xldjsKKwkJLypsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBub25lID8gKi8KKwkJbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPSAweDI7CisJfQorCS8qIE5vdywgdXBkYXRlIHRoZSBzcHkgc3R1ZmYgKi8KKwl7CisJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKKwkJd3N0YXRzLmxldmVsID0gc2lnbGV2OworCQkvKiB3c3RhdHMubm9pc2UgPSBub25lID8gKi8KKwkJLyogd3N0YXRzLnF1YWwgPSBub25lID8gKi8KKwkJd3N0YXRzLnVwZGF0ZWQgPSAweDI7CisJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLworCQl3aXJlbGVzc19zcHlfdXBkYXRlKGRldiwgbGlua3NyY2FkZHIsICZ3c3RhdHMpOworCX0KKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KIH0gLyogZW5kIHJ4X2RhdGEgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgdW50cmFuc2xhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIHsKLSAgICBzbmFwaGRyX3QgKnBzbmFwID0gKHNuYXBoZHJfdCAqKShza2ItPmRhdGEgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKnBtYWMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0gICAgX19iZTE2IHR5cGUgPSAqKF9fYmUxNiAqKXBzbmFwLT5ldGhlcnR5cGU7Ci0gICAgaW50IGRlbHRhOwotICAgIHN0cnVjdCBldGhoZHIgKnBldGg7Ci0gICAgVUNIQVIgc3JjYWRkcltBRERSTEVOXTsKLSAgICBVQ0hBUiBkZXN0YWRkcltBRERSTEVOXTsKLSAgICBzdGF0aWMgVUNIQVIgb3JnX2JyaWRnZVszXSA9IHswLCAwLCAweGY4fTsKLSAgICBzdGF0aWMgVUNIQVIgb3JnXzEwNDJbM10gPSB7MCwgMCwgMH07CisJc25hcGhkcl90ICpwc25hcCA9IChzbmFwaGRyX3QgKikgKHNrYi0+ZGF0YSArIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcG1hYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlfX2JlMTYgdHlwZSA9ICooX19iZTE2ICopIHBzbmFwLT5ldGhlcnR5cGU7CisJaW50IGRlbHRhOworCXN0cnVjdCBldGhoZHIgKnBldGg7CisJVUNIQVIgc3JjYWRkcltBRERSTEVOXTsKKwlVQ0hBUiBkZXN0YWRkcltBRERSTEVOXTsKKwlzdGF0aWMgVUNIQVIgb3JnX2JyaWRnZVszXSA9IHsgMCwgMCwgMHhmOCB9OworCXN0YXRpYyBVQ0hBUiBvcmdfMTA0MlszXSA9IHsgMCwgMCwgMCB9OwogCi0gICAgbWVtY3B5KGRlc3RhZGRyLCBpZWVlODAyMTFfZ2V0X0RBKHBtYWMpLCBBRERSTEVOKTsKLSAgICBtZW1jcHkoc3JjYWRkciwgaWVlZTgwMjExX2dldF9TQShwbWFjKSwgQUREUkxFTik7CisJbWVtY3B5KGRlc3RhZGRyLCBpZWVlODAyMTFfZ2V0X0RBKHBtYWMpLCBBRERSTEVOKTsKKwltZW1jcHkoc3JjYWRkciwgaWVlZTgwMjExX2dldF9TQShwbWFjKSwgQUREUkxFTik7CiAKICNpZmRlZiBQQ01DSUFfREVCVUcKLSAgICBpZiAocGNfZGVidWcgPiAzKSB7Ci0gICAgaW50IGk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBiZWZvcmUgdW50cmFuc2xhdGUiKTsKLSAgICBmb3IgKGk9MDtpPDY0O2krKykgCi0gICAgICAgIHByaW50aygiJTAyeCAiLHNrYi0+ZGF0YVtpXSk7Ci0gICAgcHJpbnRrKCJcbiIgS0VSTl9ERUJVRyAidHlwZSA9ICUwOHgsIHhzYXAgPSAlMDJ4JTAyeCUwMngsIG9yZyA9ICUwMngwMngwMnhcbiIsCi0gICAgICAgICAgIG50b2hzKHR5cGUpLAotCSAgIHBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwsCi0JICAgcHNuYXAtPm9yZ1swXSwgcHNuYXAtPm9yZ1sxXSwgcHNuYXAtPm9yZ1syXSk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInVudHJhbnNsYXRlIHNrYi0+ZGF0YSA9ICVwXG4iLHNrYi0+ZGF0YSk7Ci0gICAgfQorCWlmIChwY19kZWJ1ZyA+IDMpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYmVmb3JlIHVudHJhbnNsYXRlIik7CisJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQkJcHJpbnRrKCIlMDJ4ICIsIHNrYi0+ZGF0YVtpXSk7CisJCXByaW50aygiXG4iIEtFUk5fREVCVUcKKwkJICAgICAgICJ0eXBlID0gJTA4eCwgeHNhcCA9ICUwMnglMDJ4JTAyeCwgb3JnID0gJTAyeDAyeDAyeFxuIiwKKwkJICAgICAgIG50b2hzKHR5cGUpLCBwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsLAorCQkgICAgICAgcHNuYXAtPm9yZ1swXSwgcHNuYXAtPm9yZ1sxXSwgcHNuYXAtPm9yZ1syXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJ1bnRyYW5zbGF0ZSBza2ItPmRhdGEgPSAlcFxuIiwgc2tiLT5kYXRhKTsKKwl9CiAjZW5kaWYKIAotICAgIGlmIChwc25hcC0+ZHNhcCAhPSAweGFhIHx8IHBzbmFwLT5zc2FwICE9IDB4YWEgfHwgcHNuYXAtPmN0cmwgIT0gMykgewotICAgICAgICAvKiBub3QgYSBzbmFwIHR5cGUgc28gbGVhdmUgaXQgYWxvbmUgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIE5PVCBTTkFQICUwMnggJTAyeCAlMDJ4XG4iLAotCQlwc25hcC0+ZHNhcCwgcHNuYXAtPnNzYXAsIHBzbmFwLT5jdHJsKTsKKwlpZiAocHNuYXAtPmRzYXAgIT0gMHhhYSB8fCBwc25hcC0+c3NhcCAhPSAweGFhIHx8IHBzbmFwLT5jdHJsICE9IDMpIHsKKwkJLyogbm90IGEgc25hcCB0eXBlIHNvIGxlYXZlIGl0IGFsb25lICovCisJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgTk9UIFNOQVAgJTAyeCAlMDJ4ICUwMnhcbiIsCisJCSAgICAgIHBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwpOwogCi0gICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKLSAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgcGV0aC0+aF9wcm90byA9IGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIEl0cyBhIFNOQVAgKi8KLSAgICAgICAgaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfYnJpZGdlLCAzKSA9PSAwKSB7IC8qIEV0aGVySUkgYW5kIG51a2UgdGhlIExMQyAgKi8KLSAgICAgICAgREVCVUcoMywicmF5X2NzIHVudHJhbnNsYXRlIEJyaWRnZSBlbmNhcFxuIik7Ci0gICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIAotICAgICAgICAgICAgICAgICsgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IHR5cGU7Ci0JfSBlbHNlIGlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnXzEwNDIsIDMpID09IDApIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG50b2hzKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVEhfUF9JUFg6Ci0gICAgICAgICAgICAgICAgY2FzZSBFVEhfUF9BQVJQOgotICAgICAgICAgICAgICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIElQWC9BQVJQXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwotICAgICAgICAgICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIGRlZmF1bHRcbiIpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIICsgCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKLSAgICAgICAgICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgICAgICAgICAgcGV0aC0+aF9wcm90byA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQl9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50aygicmF5X2NzIHVudHJhbnNsYXRlIHZlcnkgY29uZnVzZWQgYnkgcGFja2V0XG4iKTsKLSAgICAgICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICAgICAgcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKLSAgICAgICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOworCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQlwZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCX0gZWxzZSB7IC8qIEl0cyBhIFNOQVAgKi8KKwkJaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfYnJpZGdlLCAzKSA9PSAwKSB7CisJCS8qIEV0aGVySUkgYW5kIG51a2UgdGhlIExMQyAqLworCQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBCcmlkZ2UgZW5jYXBcbiIpOworCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSAorCQkJICAgICsgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47CisJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCX0gZWxzZSBpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ18xMDQyLCAzKSA9PSAwKSB7CisJCQlzd2l0Y2ggKG50b2hzKHR5cGUpKSB7CisJCQljYXNlIEVUSF9QX0lQWDoKKwkJCWNhc2UgRVRIX1BfQUFSUDoKKwkJCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBJUFgvQUFSUFxuIik7CisJCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOworCQkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQkJcGV0aC0+aF9wcm90byA9CisJCQkJICAgIGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgZGVmYXVsdFxuIik7CisJCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCArCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOworCQkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQkJcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludGsoInJheV9jcyB1bnRyYW5zbGF0ZSB2ZXJ5IGNvbmZ1c2VkIGJ5IHBhY2tldFxuIik7CisJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47CisJCQlwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOworCQkJcGV0aC0+aF9wcm90byA9IHR5cGU7CisJCX0KIAl9Ci0gICAgfQogLyogVEJEIHJlc2VydmUgIHNrYl9yZXNlcnZlKHNrYiwgZGVsdGEpOyAqLwotICAgIHNrYl9wdWxsKHNrYiwgZGVsdGEpOwotICAgIERFQlVHKDMsInVudHJhbnNsYXRlIGFmdGVyIHNrYl9wdWxsKCVkKSwgc2tiLT5kYXRhID0gJXBcbiIsZGVsdGEsc2tiLT5kYXRhKTsKLSAgICBtZW1jcHkocGV0aC0+aF9kZXN0LCBkZXN0YWRkciwgQUREUkxFTik7Ci0gICAgbWVtY3B5KHBldGgtPmhfc291cmNlLCBzcmNhZGRyLCBBRERSTEVOKTsKKwlza2JfcHVsbChza2IsIGRlbHRhKTsKKwlERUJVRygzLCAidW50cmFuc2xhdGUgYWZ0ZXIgc2tiX3B1bGwoJWQpLCBza2ItPmRhdGEgPSAlcFxuIiwgZGVsdGEsCisJICAgICAgc2tiLT5kYXRhKTsKKwltZW1jcHkocGV0aC0+aF9kZXN0LCBkZXN0YWRkciwgQUREUkxFTik7CisJbWVtY3B5KHBldGgtPmhfc291cmNlLCBzcmNhZGRyLCBBRERSTEVOKTsKICNpZmRlZiBQQ01DSUFfREVCVUcKLSAgICBpZiAocGNfZGVidWcgPiAzKSB7Ci0gICAgaW50IGk7Ci0gICAgcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBhZnRlciB1bnRyYW5zbGF0ZToiKTsKLSAgICBmb3IgKGk9MDtpPDY0O2krKykKLSAgICAgICAgcHJpbnRrKCIlMDJ4ICIsc2tiLT5kYXRhW2ldKTsKLSAgICBwcmludGsoIlxuIik7Ci0gICAgfQorCWlmIChwY19kZWJ1ZyA+IDMpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYWZ0ZXIgdW50cmFuc2xhdGU6Iik7CisJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQkJcHJpbnRrKCIlMDJ4ICIsIHNrYi0+ZGF0YVtpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CiAjZW5kaWYKIH0gLyogZW5kIHVudHJhbnNsYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIHJlY2VpdmUgYnVmZmVyIHRvIFBDIG1lbW9yeS4KICAqIGRlc3QgICAgID0gZGVzdGluYXRpb24gYWRkcmVzcyBpbiBQQyBtZW1vcnkKICAqIHBrdF9hZGRyID0gc291cmNlIGFkZHJlc3MgaW4gcmVjZWl2ZSBidWZmZXIKICAqIGxlbiAgICAgID0gbGVuZ3RoIG9mIHBhY2tldCB0byBjb3B5CiAgKi8KLXN0YXRpYyBpbnQgY29weV9mcm9tX3J4X2J1ZmYocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBwa3RfYWRkciwgaW50IGxlbmd0aCkKK3N0YXRpYyBpbnQgY29weV9mcm9tX3J4X2J1ZmYocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBwa3RfYWRkciwKKwkJCSAgICAgaW50IGxlbmd0aCkKIHsKLSAgICBpbnQgd3JhcF9ieXRlcyA9IChwa3RfYWRkciArIGxlbmd0aCkgLSAoUlhfQlVGRl9FTkQgKyAxKTsKLSAgICBpZiAod3JhcF9ieXRlcyA8PSAwKQotICAgIHsKLSAgICAgICAgbWVtY3B5X2Zyb21pbyhkZXN0LGxvY2FsLT5ybWVtICsgcGt0X2FkZHIsbGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZSAvKiBQYWNrZXQgd3JhcHBlZCBpbiBjaXJjdWxhciBidWZmZXIgKi8KLSAgICB7Ci0gICAgICAgIG1lbWNweV9mcm9taW8oZGVzdCxsb2NhbC0+cm1lbStwa3RfYWRkcixsZW5ndGggLSB3cmFwX2J5dGVzKTsKLSAgICAgICAgbWVtY3B5X2Zyb21pbyhkZXN0ICsgbGVuZ3RoIC0gd3JhcF9ieXRlcywgbG9jYWwtPnJtZW0sIHdyYXBfYnl0ZXMpOwotICAgIH0KLSAgICByZXR1cm4gbGVuZ3RoOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmVsZWFzZV9mcmFnX2NoYWluKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqIHByY3MpCi17Ci0gICAgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7Ci0gICAgaW50IHRtcCA9IDE3OwotICAgIHVuc2lnbmVkIHJjc2luZGV4ID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisJaW50IHdyYXBfYnl0ZXMgPSAocGt0X2FkZHIgKyBsZW5ndGgpIC0gKFJYX0JVRkZfRU5EICsgMSk7CisJaWYgKHdyYXBfYnl0ZXMgPD0gMCkgeworCQltZW1jcHlfZnJvbWlvKGRlc3QsIGxvY2FsLT5ybWVtICsgcGt0X2FkZHIsIGxlbmd0aCk7CisJfSBlbHNlIHsgLyogUGFja2V0IHdyYXBwZWQgaW4gY2lyY3VsYXIgYnVmZmVyICovCiAKLSAgICB3aGlsZSAodG1wLS0pIHsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIixyY3NpbmRleCk7Ci0gICAgICAgICAgICBicmVhazsgICAgICAKLSAgICAgICAgfSAgIAotICAgICAgICBwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OwotICAgICAgICByY3NpbmRleCA9IHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKLSAgICB9Ci0gICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKKwkJbWVtY3B5X2Zyb21pbyhkZXN0LCBsb2NhbC0+cm1lbSArIHBrdF9hZGRyLAorCQkJICAgICAgbGVuZ3RoIC0gd3JhcF9ieXRlcyk7CisJCW1lbWNweV9mcm9taW8oZGVzdCArIGxlbmd0aCAtIHdyYXBfYnl0ZXMsIGxvY2FsLT5ybWVtLAorCQkJICAgICAgd3JhcF9ieXRlcyk7CisJfQorCXJldHVybiBsZW5ndGg7CiB9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfZnJhZ19jaGFpbihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpCit7CisJc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzbGluayA9IHByY3M7CisJaW50IHRtcCA9IDE3OworCXVuc2lnbmVkIHJjc2luZGV4ID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCk7CisKKwl3aGlsZSAodG1wLS0pIHsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKKwkJaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIsCisJCQkgICAgICByY3NpbmRleCk7CisJCQlicmVhazsKKwkJfQorCQlwcmNzbGluayA9IHJjc19iYXNlKGxvY2FsKSArIHJjc2luZGV4OworCQlyY3NpbmRleCA9IHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKwl9CisJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKK30KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIERFQlVHKDAsInJheV9jcyBTdGFydGluZyBhdXRoZW50aWNhdGlvbi5cbiIpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGF1dGhlbnRpY2F0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCURFQlVHKDAsICJyYXlfY3MgU3RhcnRpbmcgYXV0aGVudGljYXRpb24uXG4iKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgYXV0aGVudGljYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuOworCX0KIAotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBpZiAoYnVpbGRfYXV0aF9mcmFtZShsb2NhbCwgbG9jYWwtPmJzc19pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7Ci0gICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZhdXRoZW50aWNhdGVfdGltZW91dDsKLSAgICB9Ci0gICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqMjsKLSAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBV0FJVElOR19SRVNQT05TRTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJaWYgKGJ1aWxkX2F1dGhfZnJhbWUobG9jYWwsIGxvY2FsLT5ic3NfaWQsIE9QRU5fQVVUSF9SRVFVRVNUKSkgeworCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7CisJfSBlbHNlIHsKKwkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmF1dGhlbnRpY2F0ZV90aW1lb3V0OworCX0KKwlsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAqIDI7CisJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gQVdBSVRJTkdfUkVTUE9OU0U7CiB9IC8qIGVuZCBhdXRoZW50aWNhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcnhfYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKKwkJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pCiB7Ci0gICAgVUNIQVIgYnVmZlsyNTZdOwotICAgIHN0cnVjdCByeF9tc2cgKm1zZyA9IChzdHJ1Y3QgcnhfbXNnICopYnVmZjsKLSAgICAKLSAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJVUNIQVIgYnVmZlsyNTZdOworCXN0cnVjdCByeF9tc2cgKm1zZyA9IChzdHJ1Y3QgcnhfbXNnICopYnVmZjsKIAotICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7Ci0gICAgLyogaWYgd2UgYXJlIHRyeWluZyB0byBnZXQgYXV0aGVudGljYXRlZCAqLwotICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHJ4X2F1dGggdmFyPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgbXNnLT52YXJbMF0sbXNnLT52YXJbMV0sbXNnLT52YXJbMl0sbXNnLT52YXJbM10sbXNnLT52YXJbNF0sbXNnLT52YXJbNV0pOwotICAgICAgICBpZiAobXNnLT52YXJbMl0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXNwb25zZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWxkX2F1dGhfZnJhbWUgKGxvY2FsLCBtc2ctPm1hYy5hZGRyXzIsIE9QRU5fQVVUSF9SRVNQT05TRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IE5FRURfVE9fQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShsb2NhbC0+YXV0aF9pZCwgbXNnLT5tYWMuYWRkcl8yLCBBRERSTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgLyogSW5mcmFzdHJ1Y3R1cmUgbmV0d29yayAqLwotICAgIHsKLSAgICAgICAgaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBBV0FJVElOR19SRVNQT05TRSkgewotICAgICAgICAgICAgLyogVmVyaWZ5IGF1dGhlbnRpY2F0aW9uIHNlcXVlbmNlICMyIGFuZCBzdWNjZXNzICovCi0gICAgICAgICAgICBpZiAobXNnLT52YXJbMl0gPT0gMikgewotICAgICAgICAgICAgICAgIGlmICgobXNnLT52YXJbM10gfCBtc2ctPnZhcls0XSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBERUJVRygxLCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX0NPTVBMRVRFOwotICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGUobG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBVVRIRU5USUNBVEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwiQXV0aGVudGljYXRpb24gcmVmdXNlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9SRUZVU0VEOwotICAgICAgICAgICAgICAgICAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisKKwljb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgYnVmZiwgcGt0X2FkZHIsIHJ4X2xlbiAmIDB4ZmYpOworCS8qIGlmIHdlIGFyZSB0cnlpbmcgdG8gZ2V0IGF1dGhlbnRpY2F0ZWQgKi8KKwlpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7CisJCURFQlVHKDEsICJyYXlfY3MgcnhfYXV0aCB2YXI9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICBtc2ctPnZhclswXSwgbXNnLT52YXJbMV0sIG1zZy0+dmFyWzJdLCBtc2ctPnZhclszXSwKKwkJICAgICAgbXNnLT52YXJbNF0sIG1zZy0+dmFyWzVdKTsKKwkJaWYgKG1zZy0+dmFyWzJdID09IDEpIHsKKwkJCURFQlVHKDAsICJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXNwb25zZS5cbiIpOworCQkJaWYgKCFidWlsZF9hdXRoX2ZyYW1lCisJCQkgICAgKGxvY2FsLCBtc2ctPm1hYy5hZGRyXzIsIE9QRU5fQVVUSF9SRVNQT05TRSkpIHsKKwkJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBORUVEX1RPX0FVVEg7CisJCQkJbWVtY3B5KGxvY2FsLT5hdXRoX2lkLCBtc2ctPm1hYy5hZGRyXzIsCisJCQkJICAgICAgIEFERFJMRU4pOworCQkJfQorCQl9CisJfSBlbHNlIHsgLyogSW5mcmFzdHJ1Y3R1cmUgbmV0d29yayAqLworCisJCWlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gQVdBSVRJTkdfUkVTUE9OU0UpIHsKKwkJCS8qIFZlcmlmeSBhdXRoZW50aWNhdGlvbiBzZXF1ZW5jZSAjMiBhbmQgc3VjY2VzcyAqLworCQkJaWYgKG1zZy0+dmFyWzJdID09IDIpIHsKKwkJCQlpZiAoKG1zZy0+dmFyWzNdIHwgbXNnLT52YXJbNF0pID09IDApIHsKKwkJCQkJREVCVUcoMSwgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOworCQkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfQ09NUExFVEU7CisJCQkJCWFzc29jaWF0ZShsb2NhbCk7CisJCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9CisJCQkJCSAgICBBVVRIRU5USUNBVEVEOworCQkJCX0gZWxzZSB7CisJCQkJCURFQlVHKDAsICJBdXRoZW50aWNhdGlvbiByZWZ1c2VkXG4iKTsKKwkJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX1JFRlVTRUQ7CisJCQkJCWpvaW5fbmV0KCh1X2xvbmcpIGxvY2FsKTsKKwkJCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0KKwkJCQkJICAgIFVOQVVUSEVOVElDQVRFRDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CiAKIH0gLyogZW5kIHJ4X2F1dGhlbnRpY2F0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBhc3NvY2lhdGUocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotICAgIGludCBjY3NpbmRleDsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBhc3NvY2lhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4qLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCi0gICAgeworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CisJaW50IGNjc2luZGV4OworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBhc3NvY2lhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQorCS8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4gKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSB7CiAvKiBUQkQgc2hvdWxkIG5ldmVyIGJlIGhlcmUgYnV0Li4uIHdoYXQgaWYgd2UgYXJlPyAqLwotICAgICAgICBERUJVRygxLCJyYXlfY3MgYXNzb2NpYXRlIC0gTm8gZnJlZSBjY3NcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIERFQlVHKDEsInJheV9jcyBTdGFydGluZyBhc3NvY2lhdGlvbiB3aXRoIGFjY2VzcyBwb2ludFxuIik7Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIC8qIGZpbGwgaW4gdGhlIENDUyAqLwotICAgIHdyaXRlYihDQ1NfU1RBUlRfQVNTT0NJQVRJT04sICZwY2NzLT5jbWQpOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJREVCVUcoMSwgInJheV9jcyBhc3NvY2lhdGUgLSBObyBmcmVlIGNjc1xuIik7CisJCXJldHVybjsKKwl9CisJREVCVUcoMSwgInJheV9jcyBTdGFydGluZyBhc3NvY2lhdGlvbiB3aXRoIGFjY2VzcyBwb2ludFxuIik7CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCS8qIGZpbGwgaW4gdGhlIENDUyAqLworCXdyaXRlYihDQ1NfU1RBUlRfQVNTT0NJQVRJT04sICZwY2NzLT5jbWQpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwgInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CiAKLSAgICAgICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWioyOwotICAgICAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7Ci0gICAgICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzbmlmZmVyKSBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMjsKKwkJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKKwkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OworCQlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVNTT0NfRkFJTEVEOworCQlyZXR1cm47CisJfQorCWlmICghc25pZmZlcikKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAogfSAvKiBlbmQgYXNzb2NpYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKK3N0YXRpYyB2b2lkIHJ4X2RlYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKIHsKIC8qICBVQ0hBUiBidWZmWzI1Nl07CiAgICAgc3RydWN0IHJ4X21zZyAqbXNnID0gKHN0cnVjdCByeF9tc2cgKilidWZmOwogKi8KLSAgICBERUJVRygwLCJEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkXG4iKTsKLSAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7Ci0gICAgLyogTmVlZCB0byByZWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gZGVwZW5kaW5nIG9uIHJlYXNvbiBjb2RlICovCisJREVCVUcoMCwgIkRlYXV0aGVudGljYXRpb24gZnJhbWUgcmVjZWl2ZWRcbiIpOworCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKKwkvKiBOZWVkIHRvIHJlYXV0aGVudGljYXRlIG9yIHJlam9pbiBkZXBlbmRpbmcgb24gcmVhc29uIGNvZGUgKi8KIC8qICBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgYnVmZiwgcGt0X2FkZHIsIHJ4X2xlbiAmIDB4ZmYpOwogICovCiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGNsZWFyX2ludGVycnVwdChyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIHdyaXRlYigwLCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBIQ1NfSU5UUl9PRkZTRVQpOworCXdyaXRlYigwLCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBIQ1NfSU5UUl9PRkZTRVQpOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNkZWZpbmUgTUFYREFUQSAoUEFHRV9TSVpFIC0gODApCiAKIHN0YXRpYyBjaGFyICpjYXJkX3N0YXR1c1tdID0gewotICAgICJDYXJkIGluc2VydGVkIC0gdW5pbml0aWFsaXplZCIsICAgICAvKiAwICovCi0gICAgIkNhcmQgbm90IGRvd25sb2FkZWQiLCAgICAgICAgICAgICAgIC8qIDEgKi8KLSAgICAiV2FpdGluZyBmb3IgZG93bmxvYWQgcGFyYW1ldGVycyIsICAgLyogMiAqLwotICAgICJDYXJkIGRvaW5nIGFjcXVpc2l0aW9uIiwgICAgICAgICAgICAvKiAzICovCi0gICAgIkFjcXVpc2l0aW9uIGNvbXBsZXRlIiwgICAgICAgICAgICAgIC8qIDQgKi8KLSAgICAiQXV0aGVudGljYXRpb24gY29tcGxldGUiLCAgICAgICAgICAgLyogNSAqLwotICAgICJBc3NvY2lhdGlvbiBjb21wbGV0ZSIsICAgICAgICAgICAgICAvKiA2ICovCi0gICAgIj8/PyIsICI/Pz8iLCAiPz8/IiwgIj8/PyIsICAgICAgICAgIC8qIDcgOCA5IDEwIHVuZGVmaW5lZCAqLwotICAgICJDYXJkIGluaXQgZXJyb3IiLCAgICAgICAgICAgICAgICAgICAvKiAxMSAqLwotICAgICJEb3dubG9hZCBwYXJhbWV0ZXJzIGVycm9yIiwgICAgICAgICAvKiAxMiAqLwotICAgICI/Pz8iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMyAqLwotICAgICJBY3F1aXNpdGlvbiBmYWlsZWQiLCAgICAgICAgICAgICAgICAvKiAxNCAqLwotICAgICJBdXRoZW50aWNhdGlvbiByZWZ1c2VkIiwgICAgICAgICAgICAvKiAxNSAqLwotICAgICJBc3NvY2lhdGlvbiBmYWlsZWQiICAgICAgICAgICAgICAgICAvKiAxNiAqLworCSJDYXJkIGluc2VydGVkIC0gdW5pbml0aWFsaXplZCIsCS8qIDAgKi8KKwkiQ2FyZCBub3QgZG93bmxvYWRlZCIsCQkJLyogMSAqLworCSJXYWl0aW5nIGZvciBkb3dubG9hZCBwYXJhbWV0ZXJzIiwJLyogMiAqLworCSJDYXJkIGRvaW5nIGFjcXVpc2l0aW9uIiwJCS8qIDMgKi8KKwkiQWNxdWlzaXRpb24gY29tcGxldGUiLAkJCS8qIDQgKi8KKwkiQXV0aGVudGljYXRpb24gY29tcGxldGUiLAkJLyogNSAqLworCSJBc3NvY2lhdGlvbiBjb21wbGV0ZSIsCQkJLyogNiAqLworCSI/Pz8iLCAiPz8/IiwgIj8/PyIsICI/Pz8iLAkJLyogNyA4IDkgMTAgdW5kZWZpbmVkICovCisJIkNhcmQgaW5pdCBlcnJvciIsCQkJLyogMTEgKi8KKwkiRG93bmxvYWQgcGFyYW1ldGVycyBlcnJvciIsCQkvKiAxMiAqLworCSI/Pz8iLAkJCQkJLyogMTMgKi8KKwkiQWNxdWlzaXRpb24gZmFpbGVkIiwJCQkvKiAxNCAqLworCSJBdXRoZW50aWNhdGlvbiByZWZ1c2VkIiwJCS8qIDE1ICovCisJIkFzc29jaWF0aW9uIGZhaWxlZCIJCQkvKiAxNiAqLwogfTsKIAotc3RhdGljIGNoYXIgKm5ldHR5cGVbXSA9IHsiQWRob2MiLCAiSW5mcmEgIn07Ci1zdGF0aWMgY2hhciAqZnJhbWluZ1tdID0geyJFbmNhcHN1bGF0aW9uIiwgIlRyYW5zbGF0aW9uIn0KK3N0YXRpYyBjaGFyICpuZXR0eXBlW10gPSB7ICJBZGhvYyIsICJJbmZyYSAiIH07CitzdGF0aWMgY2hhciAqZnJhbWluZ1tdID0geyAiRW5jYXBzdWxhdGlvbiIsICJUcmFuc2xhdGlvbiIgfQorCiA7CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9jc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogLyogUHJpbnQgY3VycmVudCB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdmlhIG90aGVyIG1lYW5zCi0gKiBlZyBpZmNvbmZpZyAKKyAqIGVnIGlmY29uZmlnCiAgKi8KLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgIHJheV9kZXZfdCAqbG9jYWw7Ci0gICAgVUNIQVIgKnA7Ci0gICAgc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKnBmaDsKLSAgICBVQ0hBUiBjWzMzXTsKKwlpbnQgaTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXJheV9kZXZfdCAqbG9jYWw7CisJVUNIQVIgKnA7CisJc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKnBmaDsKKwlVQ0hBUiBjWzMzXTsKIAotICAgIGxpbmsgPSB0aGlzX2RldmljZTsKLSAgICBpZiAoIWxpbmspCi0gICAgCXJldHVybiAwOwotICAgIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7Ci0gICAgaWYgKCFkZXYpCi0gICAgCXJldHVybiAwOwotICAgIGxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBpZiAoIWxvY2FsKQotICAgIAlyZXR1cm4gMDsKKwlsaW5rID0gdGhpc19kZXZpY2U7CisJaWYgKCFsaW5rKQorCQlyZXR1cm4gMDsKKwlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIDA7CiAKLSAgICBzZXFfcHV0cyhtLCAiUmF5bGluayBXaXJlbGVzcyBMQU4gZHJpdmVyIHN0YXR1c1xuIik7Ci0gICAgc2VxX3ByaW50ZihtLCAiJXNcbiIsIHJjc2lkKTsKLSAgICAvKiBidWlsZCA0IGRvZXMgbm90IHJlcG9ydCB2ZXJzaW9uLCBhbmQgZmllbGQgaXMgMHg1NSBhZnRlciBtZW10ZXN0ICovCi0gICAgc2VxX3B1dHMobSwgIkZpcm13YXJlIHZlcnNpb24gICAgID0gIik7Ci0gICAgaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkKLSAgICAgICAgc2VxX3B1dHMobSwgIjQgLSBVc2UgZHVtcF9jaXMgZm9yIG1vcmUgZGV0YWlsc1xuIik7Ci0gICAgZWxzZQotICAgICAgICBzZXFfcHJpbnRmKG0sICIlMmQuJTAyZC4lMDJkXG4iLAotICAgICAgICAgICAgICAgICAgIGxvY2FsLT5md192ZXIsIGxvY2FsLT5md19ibGQsIGxvY2FsLT5md192YXIpOworCXNlcV9wdXRzKG0sICJSYXlsaW5rIFdpcmVsZXNzIExBTiBkcml2ZXIgc3RhdHVzXG4iKTsKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgcmNzaWQpOworCS8qIGJ1aWxkIDQgZG9lcyBub3QgcmVwb3J0IHZlcnNpb24sIGFuZCBmaWVsZCBpcyAweDU1IGFmdGVyIG1lbXRlc3QgKi8KKwlzZXFfcHV0cyhtLCAiRmlybXdhcmUgdmVyc2lvbiAgICAgPSAiKTsKKwlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQorCQlzZXFfcHV0cyhtLCAiNCAtIFVzZSBkdW1wX2NpcyBmb3IgbW9yZSBkZXRhaWxzXG4iKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIiUyZC4lMDJkLiUwMmRcbiIsCisJCQkgICBsb2NhbC0+ZndfdmVyLCBsb2NhbC0+ZndfYmxkLCBsb2NhbC0+ZndfdmFyKTsKIAotICAgIGZvciAoaT0wOyBpPDMyOyBpKyspIGNbaV0gPSBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyZW50X2Vzc19pZFtpXTsKLSAgICBjWzMyXSA9IDA7Ci0gICAgc2VxX3ByaW50ZihtLCAiJXMgbmV0d29yayBFU1NJRCA9IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICBuZXR0eXBlW2xvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZV0sIGMpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQljW2ldID0gbG9jYWwtPnNwYXJtLmI1LmFfY3VycmVudF9lc3NfaWRbaV07CisJY1szMl0gPSAwOworCXNlcV9wcmludGYobSwgIiVzIG5ldHdvcmsgRVNTSUQgPSBcIiVzXCJcbiIsCisJCSAgIG5ldHR5cGVbbG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlXSwgYyk7CiAKLSAgICBwID0gbG9jYWwtPmJzc19pZDsKLSAgICBzZXFfcHJpbnRmKG0sICJCU1NJRCAgICAgICAgICAgICAgICA9ICVwTVxuIiwgcCk7CisJcCA9IGxvY2FsLT5ic3NfaWQ7CisJc2VxX3ByaW50ZihtLCAiQlNTSUQgICAgICAgICAgICAgICAgPSAlcE1cbiIsIHApOwogCi0gICAgc2VxX3ByaW50ZihtLCAiQ291bnRyeSBjb2RlICAgICAgICAgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSk7CisJc2VxX3ByaW50ZihtLCAiQ291bnRyeSBjb2RlICAgICAgICAgPSAlZFxuIiwKKwkJICAgbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUpOwogCi0gICAgaSA9IGxvY2FsLT5jYXJkX3N0YXR1czsKLSAgICBpZiAoaSA8IDApIGkgPSAxMDsKLSAgICBpZiAoaSA+IDE2KSBpID0gMTA7Ci0gICAgc2VxX3ByaW50ZihtLCAiQ2FyZCBzdGF0dXMgICAgICAgICAgPSAlc1xuIiwgY2FyZF9zdGF0dXNbaV0pOworCWkgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7CisJaWYgKGkgPCAwKQorCQlpID0gMTA7CisJaWYgKGkgPiAxNikKKwkJaSA9IDEwOworCXNlcV9wcmludGYobSwgIkNhcmQgc3RhdHVzICAgICAgICAgID0gJXNcbiIsIGNhcmRfc3RhdHVzW2ldKTsKIAotICAgIHNlcV9wcmludGYobSwgIkZyYW1pbmcgbW9kZSAgICAgICAgID0gJXNcbiIsZnJhbWluZ1t0cmFuc2xhdGVdKTsKKwlzZXFfcHJpbnRmKG0sICJGcmFtaW5nIG1vZGUgICAgICAgICA9ICVzXG4iLCBmcmFtaW5nW3RyYW5zbGF0ZV0pOwogCi0gICAgc2VxX3ByaW50ZihtLCAiTGFzdCBwa3Qgc2lnbmFsIGx2bCAgPSAlZFxuIiwgbG9jYWwtPmxhc3RfcnNsKTsKKwlzZXFfcHJpbnRmKG0sICJMYXN0IHBrdCBzaWduYWwgbHZsICA9ICVkXG4iLCBsb2NhbC0+bGFzdF9yc2wpOwogCi0gICAgaWYgKGxvY2FsLT5iZWFjb25fcnhlZCkgewotCS8qIFB1bGwgc29tZSBmaWVsZHMgb3V0IG9mIGxhc3QgYmVhY29uIHJlY2VpdmVkICovCi0Jc2VxX3ByaW50ZihtLCAiQmVhY29uIEludGVydmFsICAgICAgPSAlZCBLdXNcbiIsCi0JCSAgICAgICBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzBdCi0JCSAgICAgICArIDI1NiAqIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMV0pOwotICAgIAotICAgIHAgPSBsb2NhbC0+bGFzdF9iY24uZWxlbWVudHM7Ci0gICAgaWYgKHBbMF0gPT0gQ19FU1NJRF9FTEVNRU5UX0lEKSBwICs9IHBbMV0gKyAyOwotICAgIGVsc2UgewotICAgICAgICBzZXFfcHJpbnRmKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IGVzc2lkIGVsZW1lbnQgaWQgPSAlZFxuIixwWzBdKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorCWlmIChsb2NhbC0+YmVhY29uX3J4ZWQpIHsKKwkJLyogUHVsbCBzb21lIGZpZWxkcyBvdXQgb2YgbGFzdCBiZWFjb24gcmVjZWl2ZWQgKi8KKwkJc2VxX3ByaW50ZihtLCAiQmVhY29uIEludGVydmFsICAgICAgPSAlZCBLdXNcbiIsCisJCQkgICBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzBdCisJCQkgICArIDI1NiAqIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMV0pOwogCi0gICAgaWYgKHBbMF0gPT0gQ19TVVBQT1JURURfUkFURVNfRUxFTUVOVF9JRCkgewotICAgICAgICBzZXFfcHV0cyhtLCAiU3VwcG9ydGVkIHJhdGUgY29kZXMgPSAiKTsKLSAgICAgICAgZm9yIChpPTI7IGk8cFsxXSArIDI7IGkrKykgCi0gICAgICAgICAgICBzZXFfcHJpbnRmKG0sICIweCUwMnggIiwgcFtpXSk7Ci0gICAgICAgIHNlcV9wdXRjKG0sICdcbicpOwotICAgICAgICBwICs9IHBbMV0gKyAyOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc2VxX3B1dHMobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgcmF0ZXMgZWxlbWVudFxuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwkJcCA9IGxvY2FsLT5sYXN0X2Jjbi5lbGVtZW50czsKKwkJaWYgKHBbMF0gPT0gQ19FU1NJRF9FTEVNRU5UX0lEKQorCQkJcCArPSBwWzFdICsgMjsKKwkJZWxzZSB7CisJCQlzZXFfcHJpbnRmKG0sCisJCQkJICAgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgZXNzaWQgZWxlbWVudCBpZCA9ICVkXG4iLAorCQkJCSAgIHBbMF0pOworCQkJcmV0dXJuIDA7CisJCX0KIAotCWlmIChwWzBdID09IENfRkhfUEFSQU1fU0VUX0VMRU1FTlRfSUQpIHsKLQkgICAgcGZoID0gKHN0cnVjdCBmcmVxX2hvcF9lbGVtZW50ICopcDsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIGR3ZWxsICAgICAgICAgICAgPSAlZCBLdXNcbiIsCi0JCQkgICBwZmgtPmR3ZWxsX3RpbWVbMF0gKyAyNTYgKiBwZmgtPmR3ZWxsX3RpbWVbMV0pOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3Agc2V0ICAgICAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3Bfc2V0KTsKLQkgICAgc2VxX3ByaW50ZihtLCAiSG9wIHBhdHRlcm4gICAgICAgICAgPSAlZCBcbiIsIHBmaC0+aG9wX3BhdHRlcm4pOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgaW5kZXggICAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3BfaW5kZXgpOwotCSAgICBwICs9IHBbMV0gKyAyOworCQlpZiAocFswXSA9PSBDX1NVUFBPUlRFRF9SQVRFU19FTEVNRU5UX0lEKSB7CisJCQlzZXFfcHV0cyhtLCAiU3VwcG9ydGVkIHJhdGUgY29kZXMgPSAiKTsKKwkJCWZvciAoaSA9IDI7IGkgPCBwWzFdICsgMjsgaSsrKQorCQkJCXNlcV9wcmludGYobSwgIjB4JTAyeCAiLCBwW2ldKTsKKwkJCXNlcV9wdXRjKG0sICdcbicpOworCQkJcCArPSBwWzFdICsgMjsKKwkJfSBlbHNlIHsKKwkJCXNlcV9wdXRzKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IHJhdGVzIGVsZW1lbnRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAocFswXSA9PSBDX0ZIX1BBUkFNX1NFVF9FTEVNRU5UX0lEKSB7CisJCQlwZmggPSAoc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKilwOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIGR3ZWxsICAgICAgICAgICAgPSAlZCBLdXNcbiIsCisJCQkJICAgcGZoLT5kd2VsbF90aW1lWzBdICsKKwkJCQkgICAyNTYgKiBwZmgtPmR3ZWxsX3RpbWVbMV0pOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIHNldCAgICAgICAgICAgICAgPSAlZCBcbiIsCisJCQkJICAgcGZoLT5ob3Bfc2V0KTsKKwkJCXNlcV9wcmludGYobSwgIkhvcCBwYXR0ZXJuICAgICAgICAgID0gJWQgXG4iLAorCQkJCSAgIHBmaC0+aG9wX3BhdHRlcm4pOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIGluZGV4ICAgICAgICAgICAgPSAlZCBcbiIsCisJCQkJICAgcGZoLT5ob3BfaW5kZXgpOworCQkJcCArPSBwWzFdICsgMjsKKwkJfSBlbHNlIHsKKwkJCXNlcV9wdXRzKG0sCisJCQkJICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IEZIIHBhcmFtIGVsZW1lbnRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlzZXFfcHV0cyhtLCAiTm8gYmVhY29ucyByZWNlaXZlZFxuIik7CiAJfQotCWVsc2UgewotCSAgICBzZXFfcHV0cyhtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBGSCBwYXJhbSBlbGVtZW50XG4iKTsKLQkgICAgcmV0dXJuIDA7Ci0JfQotICAgIH0gZWxzZSB7Ci0Jc2VxX3B1dHMobSwgIk5vIGJlYWNvbnMgcmVjZWl2ZWRcbiIpOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByYXlfY3NfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMjY4NCw3NCArMjgwNiw3NyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXlfY3NfcHJvY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSByYXlfY3NfcHJvY19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSByYXlfY3NfcHJvY19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKICNlbmRpZgogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCBidWlsZF9hdXRoX2ZyYW1lKHJheV9kZXZfdCAqbG9jYWwsIFVDSEFSICpkZXN0LCBpbnQgYXV0aF90eXBlKQogewotICAgIGludCBhZGRyOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eDsKLSAgICBpbnQgY2NzaW5kZXg7CisJaW50IGFkZHI7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OworCWludCBjY3NpbmRleDsKIAotICAgIC8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4gKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfdHhfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHNlbmQgYXV0aGVudGljYXRlIC0gTm8gZnJlZSB0eCBjY3NcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCS8qIElmIG5vIHR4IGJ1ZmZlcnMgYXZhaWxhYmxlLCByZXR1cm4gKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfdHhfY2NzKGxvY2FsKSkgPCAwKSB7CisJCURFQlVHKDEsICJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGUgLSBObyBmcmVlIHR4IGNjc1xuIik7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwogCi0gICAgLyogQWRkcmVzcyBpbiBjYXJkIHNwYWNlICovCi0gICAgYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKLSAgICAvKiBmaWxsIGluIHRoZSBDQ1MgKi8KLSAgICB3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYihhZGRyID4+IDgsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyKTsKLSAgICB3cml0ZWIoMHgyMCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIgKyAxKTsKLSAgICB3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9NU0IsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoKTsKLSAgICB3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9MU0IscGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGggKyAxKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7CisJLyogQWRkcmVzcyBpbiBjYXJkIHNwYWNlICovCisJYWRkciA9IFRYX0JVRl9CQVNFICsgKGNjc2luZGV4IDw8IDExKTsKKwkvKiBmaWxsIGluIHRoZSBDQ1MgKi8KKwl3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOworCXdyaXRlYihhZGRyID4+IDgsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyKTsKKwl3cml0ZWIoMHgyMCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIgKyAxKTsKKwl3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9NU0IsIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoKTsKKwl3cml0ZWIoVFhfQVVUSEVOVElDQVRFX0xFTkdUSF9MU0IsCisJICAgICAgIHBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoICsgMSk7CisJd3JpdGViKDAsICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOwogCi0gICAgcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOwotICAgIC8qIGZpbGwgaW4gdGhlIG1hYyBoZWFkZXIgKi8KLSAgICB3cml0ZWIoUFJPVE9DT0xfVkVSIHwgQVVUSEVOVElDX1RZUEUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7Ci0gICAgd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CisJcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOworCS8qIGZpbGwgaW4gdGhlIG1hYyBoZWFkZXIgKi8KKwl3cml0ZWIoUFJPVE9DT0xfVkVSIHwgQVVUSEVOVElDX1RZUEUsICZwdHgtPm1hYy5mcmFtZV9jdGxfMSk7CisJd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7CiAKLSAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGRlc3QsIEFERFJMRU4pOwotICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOwotICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CisJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBkZXN0LCBBRERSTEVOKTsKKwltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKKwltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOwogCi0gICAgLyogRmlsbCBpbiBtc2cgYm9keSB3aXRoIHByb3RvY29sIDAwIDAwLCBzZXF1ZW5jZSAwMSAwMCAsc3RhdHVzIDAwIDAwICovCi0gICAgbWVtc2V0X2lvKHB0eC0+dmFyLCAwLCA2KTsKLSAgICB3cml0ZWIoYXV0aF90eXBlICYgMHhmZiwgcHR4LT52YXIgKyAyKTsKKwkvKiBGaWxsIGluIG1zZyBib2R5IHdpdGggcHJvdG9jb2wgMDAgMDAsIHNlcXVlbmNlIDAxIDAwICxzdGF0dXMgMDAgMDAgKi8KKwltZW1zZXRfaW8ocHR4LT52YXIsIDAsIDYpOworCXdyaXRlYihhdXRoX3R5cGUgJiAweGZmLCBwdHgtPnZhciArIDIpOwogCi0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAwOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwKKwkJICAgICAgInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7CiB9IC8qIEVuZCBidWlsZF9hdXRoX2ZyYW1lICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgcmF5Y3Nfd3JpdGUoY29uc3QgY2hhciAqbmFtZSwgd3JpdGVfcHJvY190ICp3LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqIGVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRlJFRyB8IFNfSVdVU1IsIE5VTEwpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPQorCSAgICBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGUkVHIHwgU19JV1VTUiwgTlVMTCk7CiAJaWYgKGVudHJ5KSB7CiAJCWVudHJ5LT53cml0ZV9wcm9jID0gdzsKIAkJZW50cnktPmRhdGEgPSBkYXRhOwogCX0KIH0KIAotc3RhdGljIGludCB3cml0ZV9lc3NpZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgd3JpdGVfZXNzaWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBjaGFyIHByb2NfZXNzaWRbMzNdOwogCWludCBsZW4gPSBjb3VudDsKQEAgLTI3NjUsNyArMjg5MCw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2ludChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgd3JpdGVfaW50KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19udW1iZXJbMTBdOwogCWNoYXIgKnA7CkBAIC0yNzg1LDcgKzI5MTEsNyBAQAogCQl1bnNpZ25lZCBpbnQgYyA9ICpwIC0gJzAnOwogCQlpZiAoYyA+IDkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbnIgPSBucioxMCArIGM7CisJCW5yID0gbnIgKiAxMCArIGM7CiAJCXArKzsKIAl9IHdoaWxlICgtLWxlbik7CiAJKihpbnQgKilkYXRhID0gbnI7CkBAIC0yNzk3LDU1ICsyOTIzLDU4IEBACiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMWE2LCAweDAwMDApLAogCVBDTUNJQV9ERVZJQ0VfTlVMTCwKIH07CisKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCByYXlfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHJheV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5kcnYJCT0gewotCQkubmFtZQk9ICJyYXlfY3MiLAotCX0sCi0JLnByb2JlCQk9IHJheV9wcm9iZSwKLQkucmVtb3ZlCQk9IHJheV9kZXRhY2gsCi0JLmlkX3RhYmxlICAgICAgID0gcmF5X2lkcywKLQkuc3VzcGVuZAk9IHJheV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcmF5X3Jlc3VtZSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkubmFtZSA9ICJyYXlfY3MiLAorCQl9LAorCS5wcm9iZSA9IHJheV9wcm9iZSwKKwkucmVtb3ZlID0gcmF5X2RldGFjaCwKKwkuaWRfdGFibGUgPSByYXlfaWRzLAorCS5zdXNwZW5kID0gcmF5X3N1c3BlbmQsCisJLnJlc3VtZSA9IHJheV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3JheV9jcyh2b2lkKQogewotICAgIGludCByYzsKLSAgICAKLSAgICBERUJVRygxLCAiJXNcbiIsIHJjc2lkKTsKLSAgICByYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOwotICAgIERFQlVHKDEsICJyYXlsaW5rIGluaXRfbW9kdWxlIHJlZ2lzdGVyX3BjbWNpYV9kcml2ZXIgcmV0dXJucyAweCV4XG4iLHJjKTsKKwlpbnQgcmM7CisKKwlERUJVRygxLCAiJXNcbiIsIHJjc2lkKTsKKwlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOworCURFQlVHKDEsICJyYXlsaW5rIGluaXRfbW9kdWxlIHJlZ2lzdGVyX3BjbWNpYV9kcml2ZXIgcmV0dXJucyAweCV4XG4iLAorCSAgICAgIHJjKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0gICAgcHJvY19ta2RpcigiZHJpdmVyL3JheV9jcyIsIE5VTEwpOworCXByb2NfbWtkaXIoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKIAotICAgIHByb2NfY3JlYXRlKCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIDAsIE5VTEwsICZyYXlfY3NfcHJvY19mb3BzKTsKLSAgICByYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIHdyaXRlX2Vzc2lkLCBOVUxMKTsKLSAgICByYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIHdyaXRlX2ludCwgJm5ldF90eXBlKTsKLSAgICByYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCB3cml0ZV9pbnQsICZ0cmFuc2xhdGUpOworCXByb2NfY3JlYXRlKCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIDAsIE5VTEwsICZyYXlfY3NfcHJvY19mb3BzKTsKKwlyYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIHdyaXRlX2Vzc2lkLCBOVUxMKTsKKwlyYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy9uZXRfdHlwZSIsIHdyaXRlX2ludCwgJm5ldF90eXBlKTsKKwlyYXljc193cml0ZSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCB3cml0ZV9pbnQsICZ0cmFuc2xhdGUpOwogI2VuZGlmCi0gICAgaWYgKHRyYW5zbGF0ZSAhPSAwKSB0cmFuc2xhdGUgPSAxOwotICAgIHJldHVybiAwOworCWlmICh0cmFuc2xhdGUgIT0gMCkKKwkJdHJhbnNsYXRlID0gMTsKKwlyZXR1cm4gMDsKIH0gLyogaW5pdF9yYXlfY3MgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yYXlfY3Modm9pZCkKIHsKLSAgICBERUJVRygwLCAicmF5X2NzOiBjbGVhbnVwX21vZHVsZVxuIik7CisJREVCVUcoMCwgInJheV9jczogY2xlYW51cF9tb2R1bGVcbiIpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy9lc3NpZCIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvdHJhbnNsYXRlIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MiLCBOVUxMKTsKICNlbmRpZgogCi0gICAgcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOwogfSAvKiBleGl0X3JheV9jcyAqLwogCiBtb2R1bGVfaW5pdChpbml0X3JheV9jcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggZWQ5M2FjNC4uZGI5MWRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtOTAsNDQgKzkwLDQ0IEBACiAKIAogLyogdmFyaW91cyBSTkRJUyBPSUQgZGVmcyAqLwotI2RlZmluZSBPSURfR0VOX0xJTktfU1BFRUQJCQljY3B1MigweDAwMDEwMTA3KQotI2RlZmluZSBPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVIJCWNjcHUyKDB4MDAwMTAyMWIpCisjZGVmaW5lIE9JRF9HRU5fTElOS19TUEVFRAkJCWNwdV90b19sZTMyKDB4MDAwMTAxMDcpCisjZGVmaW5lIE9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUgkJY3B1X3RvX2xlMzIoMHgwMDAxMDIxYikKIAotI2RlZmluZSBPSURfR0VOX1hNSVRfT0sJCQkJY2NwdTIoMHgwMDAyMDEwMSkKLSNkZWZpbmUgT0lEX0dFTl9SQ1ZfT0sJCQkJY2NwdTIoMHgwMDAyMDEwMikKLSNkZWZpbmUgT0lEX0dFTl9YTUlUX0VSUk9SCQkJY2NwdTIoMHgwMDAyMDEwMykKLSNkZWZpbmUgT0lEX0dFTl9SQ1ZfRVJST1IJCQljY3B1MigweDAwMDIwMTA0KQotI2RlZmluZSBPSURfR0VOX1JDVl9OT19CVUZGRVIJCQljY3B1MigweDAwMDIwMTA1KQorI2RlZmluZSBPSURfR0VOX1hNSVRfT0sJCQkJY3B1X3RvX2xlMzIoMHgwMDAyMDEwMSkKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfT0sJCQkJY3B1X3RvX2xlMzIoMHgwMDAyMDEwMikKKyNkZWZpbmUgT0lEX0dFTl9YTUlUX0VSUk9SCQkJY3B1X3RvX2xlMzIoMHgwMDAyMDEwMykKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfRVJST1IJCQljcHVfdG9fbGUzMigweDAwMDIwMTA0KQorI2RlZmluZSBPSURfR0VOX1JDVl9OT19CVUZGRVIJCQljcHVfdG9fbGUzMigweDAwMDIwMTA1KQogCi0jZGVmaW5lIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUwkJY2NwdTIoMHgwMTAxMDEwMSkKLSNkZWZpbmUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUwkJY2NwdTIoMHgwMTAxMDEwMikKLSNkZWZpbmUgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUCQljY3B1MigweDAxMDEwMTAzKQotI2RlZmluZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUJCWNjcHUyKDB4MDEwMTAxMDQpCisjZGVmaW5lIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUwkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMSkKKyNkZWZpbmUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUwkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMikKKyNkZWZpbmUgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUCQljcHVfdG9fbGUzMigweDAxMDEwMTAzKQorI2RlZmluZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUJCWNwdV90b19sZTMyKDB4MDEwMTAxMDQpCiAKLSNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRAkJCWNjcHUyKDB4MGQwMTAxMDEpCi0jZGVmaW5lIE9JRF84MDJfMTFfU1NJRAkJCQljY3B1MigweDBkMDEwMTAyKQotI2RlZmluZSBPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUJCWNjcHUyKDB4MGQwMTAxMDgpCi0jZGVmaW5lIE9JRF84MDJfMTFfQUREX1dFUAkJCWNjcHUyKDB4MGQwMTAxMTMpCi0jZGVmaW5lIE9JRF84MDJfMTFfUkVNT1ZFX1dFUAkJCWNjcHUyKDB4MGQwMTAxMTQpCi0jZGVmaW5lIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFCQkJY2NwdTIoMHgwZDAxMDExNSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCQljY3B1MigweDBkMDEwMTE4KQotI2RlZmluZSBPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCQljY3B1MigweDBkMDEwMTE5KQotI2RlZmluZSBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJY2NwdTIoMHgwZDAxMDExYSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJY2NwdTIoMHgwZDAxMDExYikKLSNkZWZpbmUgT0lEXzgwMl8xMV9BRERfS0VZCQkJY2NwdTIoMHgwZDAxMDExZCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9SRU1PVkVfS0VZCQkJY2NwdTIoMHgwZDAxMDExZSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgljY3B1MigweDBkMDEwMTFmKQotI2RlZmluZSBPSURfODAyXzExX1BNS0lECQkJY2NwdTIoMHgwZDAxMDEyMykKLSNkZWZpbmUgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVTX1NVUFBPUlRFRAljY3B1MigweDBkMDEwMjAzKQotI2RlZmluZSBPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UJCWNjcHUyKDB4MGQwMTAyMDQpCi0jZGVmaW5lIE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwJCWNjcHUyKDB4MGQwMTAyMDUpCi0jZGVmaW5lIE9JRF84MDJfMTFfUlNTSQkJCQljY3B1MigweDBkMDEwMjA2KQotI2RlZmluZSBPSURfODAyXzExX1JTU0lfVFJJR0dFUgkJCWNjcHUyKDB4MGQwMTAyMDcpCi0jZGVmaW5lIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQJY2NwdTIoMHgwZDAxMDIwOSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xECQljY3B1MigweDBkMDEwMjBhKQotI2RlZmluZSBPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUwkJY2NwdTIoMHgwZDAxMDIwZSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OCQljY3B1MigweDBkMDEwMjExKQotI2RlZmluZSBPSURfODAyXzExX0JTU0lEX0xJU1QJCQljY3B1MigweDBkMDEwMjE3KQorI2RlZmluZSBPSURfODAyXzExX0JTU0lECQkJY3B1X3RvX2xlMzIoMHgwZDAxMDEwMSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9TU0lECQkJCWNwdV90b19sZTMyKDB4MGQwMTAxMDIpCisjZGVmaW5lIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERQkJY3B1X3RvX2xlMzIoMHgwZDAxMDEwOCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9BRERfV0VQCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExMykKKyNkZWZpbmUgT0lEXzgwMl8xMV9SRU1PVkVfV0VQCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExNCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUJCQljcHVfdG9fbGUzMigweDBkMDEwMTE1KQorI2RlZmluZSBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJCWNwdV90b19sZTMyKDB4MGQwMTAxMTgpCisjZGVmaW5lIE9JRF84MDJfMTFfUFJJVkFDWV9GSUxURVIJCWNwdV90b19sZTMyKDB4MGQwMTAxMTkpCisjZGVmaW5lIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOCQljcHVfdG9fbGUzMigweDBkMDEwMTFhKQorI2RlZmluZSBPSURfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCQljcHVfdG9fbGUzMigweDBkMDEwMTFiKQorI2RlZmluZSBPSURfODAyXzExX0FERF9LRVkJCQljcHVfdG9fbGUzMigweDBkMDEwMTFkKQorI2RlZmluZSBPSURfODAyXzExX1JFTU9WRV9LRVkJCQljcHVfdG9fbGUzMigweDBkMDEwMTFlKQorI2RlZmluZSBPSURfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCWNwdV90b19sZTMyKDB4MGQwMTAxMWYpCisjZGVmaW5lIE9JRF84MDJfMTFfUE1LSUQJCQljcHVfdG9fbGUzMigweDBkMDEwMTIzKQorI2RlZmluZSBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVECWNwdV90b19sZTMyKDB4MGQwMTAyMDMpCisjZGVmaW5lIE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRQkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwNCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTAkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwNSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9SU1NJCQkJCWNwdV90b19sZTMyKDB4MGQwMTAyMDYpCisjZGVmaW5lIE9JRF84MDJfMTFfUlNTSV9UUklHR0VSCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwNykKKyNkZWZpbmUgT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRAljcHVfdG9fbGUzMigweDBkMDEwMjA5KQorI2RlZmluZSBPSURfODAyXzExX1JUU19USFJFU0hPTEQJCWNwdV90b19sZTMyKDB4MGQwMTAyMGEpCisjZGVmaW5lIE9JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTCQljcHVfdG9fbGUzMigweDBkMDEwMjBlKQorI2RlZmluZSBPSURfODAyXzExX0NPTkZJR1VSQVRJT04JCWNwdV90b19sZTMyKDB4MGQwMTAyMTEpCisjZGVmaW5lIE9JRF84MDJfMTFfQlNTSURfTElTVAkJCWNwdV90b19sZTMyKDB4MGQwMTAyMTcpCiAKIAogLyogVHlwaWNhbCBub2lzZS9tYXhpbXVtIHNpZ25hbCBsZXZlbCB2YWx1ZXMgdGFrZW4gZnJvbSBuZGlzd3JhcHBlciBpd19uZGlzLmggKi8KQEAgLTE0NCw4ICsxNDQsOCBAQAogCiAKIC8qIGNvZGVzIGZvciAic3RhdHVzIiBmaWVsZCBvZiBjb21wbGV0aW9uIG1lc3NhZ2VzICovCi0jZGVmaW5lIFJORElTX1NUQVRVU19BREFQVEVSX05PVF9SRUFEWQkJY2NwdTIoMHhjMDAxMDAxMSkKLSNkZWZpbmUgUk5ESVNfU1RBVFVTX0FEQVBURVJfTk9UX09QRU4JCWNjcHUyKDB4YzAwMTAwMTIpCisjZGVmaW5lIFJORElTX1NUQVRVU19BREFQVEVSX05PVF9SRUFEWQkJY3B1X3RvX2xlMzIoMHhjMDAxMDAxMSkKKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0FEQVBURVJfTk9UX09QRU4JCWNwdV90b19sZTMyKDB4YzAwMTAwMTIpCiAKIAogLyogTkRJUyBkYXRhIHN0cnVjdHVyZXMuIFRha2VuIGZyb20gd3BhX3N1cHBsaWNhbnQgZHJpdmVyX25kaXMuYwpAQCAtMzY5LDkgKzM2OSw2IEBACiB9OwogCiAKLXN0YXRpYyBjb25zdCBpbnQgZnJlcV9jaGFuW10gPSB7IDI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCi0JCQkJMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NCB9OwotCiBzdGF0aWMgY29uc3QgaW50IHJhdGVzXzgwMjExZ1s4XSA9IHsgNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NCB9OwogCiBzdGF0aWMgY29uc3QgaW50IGJjbTQzMjBfcG93ZXJfb3V0cHV0WzRdID0geyAyNSwgNTAsIDc1LCAxMDAgfTsKQEAgLTQ0NSw3ICs0NDIsNyBAQAogCiAJbWVtc2V0KHUuZ2V0LCAwLCBzaXplb2YgKnUuZ2V0KTsKIAl1LmdldC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfUVVFUlk7Ci0JdS5nZXQtPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKnUuZ2V0KTsKKwl1LmdldC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5nZXQpOwogCXUuZ2V0LT5vaWQgPSBvaWQ7CiAKIAlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7CkBAIC00OTQsOCArNDkxLDggQEAKIAl1LnNldC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZigqdS5zZXQpICsgbGVuKTsKIAl1LnNldC0+b2lkID0gb2lkOwogCXUuc2V0LT5sZW4gPSBjcHVfdG9fbGUzMihsZW4pOwotCXUuc2V0LT5vZmZzZXQgPSBjY3B1MihzaXplb2YoKnUuc2V0KSAtIDgpOwotCXUuc2V0LT5oYW5kbGUgPSBjY3B1MigwKTsKKwl1LnNldC0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCp1LnNldCkgLSA4KTsKKwl1LnNldC0+aGFuZGxlID0gY3B1X3RvX2xlMzIoMCk7CiAJbWVtY3B5KHUuYnVmICsgc2l6ZW9mKCp1LnNldCksIGRhdGEsIGxlbik7CiAKIAlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7CkBAIC02NDAsOCArNjM3LDggQEAKIHN0YXRpYyBpbnQgZnJlcV90b19kc2NvbmZpZyhzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgdW5zaWduZWQgaW50ICpkc2NvbmZpZykKIHsKIAlpZiAoZnJlcS0+bSA8IDEwMDAgJiYgZnJlcS0+ZSA9PSAwKSB7Ci0JCWlmIChmcmVxLT5tID49IDEgJiYgZnJlcS0+bSA8PSBBUlJBWV9TSVpFKGZyZXFfY2hhbikpCi0JCQkqZHNjb25maWcgPSBmcmVxX2NoYW5bZnJlcS0+bSAtIDFdICogMTAwMDsKKwkJaWYgKGZyZXEtPm0gPj0gMSAmJiBmcmVxLT5tIDw9IDE0KQorCQkJKmRzY29uZmlnID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGZyZXEtPm0pICogMTAwMDsKIAkJZWxzZQogCQkJcmV0dXJuIC0xOwogCX0gZWxzZSB7CkBAIC0xMTc4LDExICsxMTc1LDExIEBACiAJCXJhbmdlLT50aHJvdWdocHV0ID0gMTEgKiAxMDAwICogMTAwMCAvIDI7CiAJfQogCi0JcmFuZ2UtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoZnJlcV9jaGFuKTsKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gMTQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmcmVxX2NoYW4pICYmIGkgPCBJV19NQVhfRlJFUVVFTkNJRVM7IGkrKykgeworCWZvciAoaSA9IDA7IChpIDwgMTQpICYmIChpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTKTsgaSsrKSB7CiAJCXJhbmdlLT5mcmVxW2ldLmkgPSBpICsgMTsKLQkJcmFuZ2UtPmZyZXFbaV0ubSA9IGZyZXFfY2hhbltpXSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbaV0ubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpICsgMSkgKiAxMDAwMDA7CiAJCXJhbmdlLT5mcmVxW2ldLmUgPSAxOwogCX0KIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGk7CkBAIC0xNjMzLDcgKzE2MzAsNyBAQAogCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXU0NBTiIpOwogCiAJaWYgKHdycXUtPmRhdGEuZmxhZ3MgPT0gMCkgewotCQl0bXAgPSBjY3B1MigxKTsKKwkJdG1wID0gY3B1X3RvX2xlMzIoMSk7CiAJCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwogCQlldnQuZGF0YS5mbGFncyA9IDA7CkBAIC0yNDMxLDcgKzI0MjgsNyBAQAogCQkvKiBTZW5kIHNjYW4gT0lELiBVc2Ugb2YgYm90aCBPSURzIGlzIHJlcXVpcmVkIHRvIGdldCBkZXZpY2UKIAkJICogd29ya2luZy4KIAkJICovCi0JCXRtcCA9IGNjcHUyKDEpOworCQl0bXAgPSBjcHVfdG9fbGUzMigxKTsKIAkJcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CiAKQEAgLTI1MjcsNiArMjUyNCwxNyBAQAogCXJldHVybiAwOwogfQogCisvKiBzYW1lIGFzIHJuZGlzX25ldGRldl9vcHMgYnV0IHdpdGggbG9jYWwgbXVsdGljYXN0IGhhbmRsZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcm5kaXNfd2V4dF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBybmRpc193ZXh0X3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKIAogc3RhdGljIGludCBybmRpc193ZXh0X2JpbmQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKQEAgLTI1NjIsNyArMjU3MCw4IEBACiAJICogcm5kaXNfaG9zdCB3YW50cyB0byBhdm9pZCBhbGwgT0lEIGFzIG11Y2ggYXMgcG9zc2libGUKIAkgKiBzbyBkbyBwcm9taXNjL211bHRpY2FzdCBoYW5kbGluZyBpbiBybmRpc193ZXh0LgogCSAqLwotCXVzYmRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBybmRpc193ZXh0X3NldF9tdWx0aWNhc3RfbGlzdDsKKwl1c2JkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZybmRpc193ZXh0X25ldGRldl9vcHM7CisKIAl0bXAgPSBSTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRCB8IFJORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVDsKIAlyZXR2YWwgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIsICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKaW5kZXggMTc4YjMxMy4uYmZjNWQ5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKQEAgLTk3LDEwICs5NywxMSBAQAogCiBjb25maWcgUlQyWDAwX0xJQl9SRktJTEwKIAlib29sZWFuCi0JZGVmYXVsdCB5IGlmIChSVDJYMDBfTElCPXkgJiYgUkZLSUxMPXkpIHx8IChSVDJYMDBfTElCPW0gJiYgUkZLSUxMIT1uKQorCWRlZmF1bHQgeSBpZiAoUlQyWDAwX0xJQj15ICYmIElOUFVUPXkpIHx8IChSVDJYMDBfTElCPW0gJiYgSU5QVVQhPW4pCisJc2VsZWN0IElOUFVUX1BPTExERVYKIAotY29tbWVudCAicnQyeDAwIHJma2lsbCBzdXBwb3J0IGRpc2FibGVkIGR1ZSB0byBtb2R1bGFyaXplZCBSRktJTEwgYW5kIGJ1aWx0LWluIHJ0MngwMCIKLQlkZXBlbmRzIG9uIFJUMlgwMF9MSUI9eSAmJiBSRktJTEw9bQorY29tbWVudCAicnQyeDAwIHJma2lsbCBzdXBwb3J0IGRpc2FibGVkIGR1ZSB0byBtb2R1bGFyaXplZCBJTlBVVCBhbmQgYnVpbHQtaW4gcnQyeDAwIgorCWRlcGVuZHMgb24gUlQyWDAwX0xJQj15ICYmIElOUFVUPW0KIAogY29uZmlnIFJUMlgwMF9MSUJfTEVEUwogCWJvb2xlYW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQppbmRleCA5MTdjYjRmLi5mMjJkODA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCkBAIC0yLDYgKzIsNyBAQAogcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwbWFjLm8KIHJ0MngwMGxpYi15CQkJCSs9IHJ0MngwMGNvbmZpZy5vCiBydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBxdWV1ZS5vCitydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBsaW5rLm8KIHJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMpCSs9IHJ0MngwMGRlYnVnLm8KIHJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX0NSWVBUTykJKz0gcnQyeDAwY3J5cHRvLm8KIHJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCkJKz0gcnQyeDAwcmZraWxsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYwppbmRleCA2YTk3NzY3Li4wZjA4NzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTE0LDkgKzExNCw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTUyNCw2ICs1MjEsMzIgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxMiwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyNDAwcGNpX2NvbmZpZ19wcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKK3sKKwllbnVtIGRldl9zdGF0ZSBzdGF0ZSA9CisJICAgIChsaWJjb25mLT5jb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSA/CisJCVNUQVRFX1NMRUVQIDogU1RBVEVfQVdBS0U7CisJdTMyIHJlZzsKKworCWlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUCkgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjIwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0RFTEFZX0FGVEVSX1RCQ04sCisJCQkJICAgKGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAyMCkgKiAxNik7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9UQkNOX0JFRk9SRV9XQUtFVVAsCisJCQkJICAgbGliY29uZi0+Y29uZi0+bGlzdGVuX2ludGVydmFsIC0gMSk7CisKKwkJLyogV2UgbXVzdCBmaXJzdCBkaXNhYmxlIGF1dG93YWtlIGJlZm9yZSBpdCBjYW4gYmUgZW5hYmxlZCAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfQVVUT1dBS0UsIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IyMCwgcmVnKTsKKworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfQVVUT1dBS0UsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IyMCwgcmVnKTsKKwl9CisKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgc3RhdGUpOworfQorCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtNTM3LDYgKzU2MCw4IEBACiAJCXJ0MjQwMHBjaV9jb25maWdfcmV0cnlfbGltaXQocnQyeDAwZGV2LCBsaWJjb25mKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKQogCQlydDI0MDBwY2lfY29uZmlnX2R1cmF0aW9uKHJ0MngwMGRldiwgbGliY29uZik7CisJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQlydDI0MDBwY2lfY29uZmlnX3BzKHJ0MngwMGRldiwgbGliY29uZik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWdfY3coc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTU3MiwzNSArNTk3LDM3IEBACiAJcXVhbC0+ZmFsc2VfY2NhID0gYmJwOwogfQogCi1zdGF0aWMgdm9pZCBydDI0MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDI0MDBwY2lfc2V0X3ZnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMywgMHgwOCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4MDg7CisJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCB2Z2NfbGV2ZWwpOworCXF1YWwtPnZnY19sZXZlbCA9IHZnY19sZXZlbDsKKwlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOwogfQogCi1zdGF0aWMgdm9pZCBydDI0MDBwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQyNDAwcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQogewotCXU4IHJlZzsKKwlydDI0MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIDB4MDgpOworfQogCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpCit7CiAJLyoKIAkgKiBUaGUgbGluayB0dW5lciBzaG91bGQgbm90IHJ1biBsb25nZXIgdGhlbiA2MCBzZWNvbmRzLAogCSAqIGFuZCBzaG91bGQgcnVuIG9uY2UgZXZlcnkgMiBzZWNvbmRzLgogCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsuY291bnQgPiA2MCB8fCAhKHJ0MngwMGRldi0+bGluay5jb3VudCAmIDEpKQorCWlmIChjb3VudCA+IDYwIHx8ICEoY291bnQgJiAxKSkKIAkJcmV0dXJuOwogCiAJLyoKIAkgKiBCYXNlIHIxMyBsaW5rIHR1bmluZyBvbiB0aGUgZmFsc2UgY2NhIGNvdW50LgogCSAqLwotCXJ0MjQwMHBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDEzLCAmcmVnKTsKLQotCWlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPiA1MTIgJiYgcmVnIDwgMHgyMCkgewotCQlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTMsICsrcmVnKTsKLQkJcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHJlZzsKLQl9IGVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA8IDEwMCAmJiByZWcgPiAweDA4KSB7Ci0JCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMywgLS1yZWcpOwotCQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gcmVnOwotCX0KKwlpZiAoKHF1YWwtPmZhbHNlX2NjYSA+IDUxMikgJiYgKHF1YWwtPnZnY19sZXZlbCA8IDB4MjApKQorCQlydDI0MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsICsrcXVhbC0+dmdjX2xldmVsKTsKKwllbHNlIGlmICgocXVhbC0+ZmFsc2VfY2NhIDwgMTAwKSAmJiAocXVhbC0+dmdjX2xldmVsID4gMHgwOCkpCisJCXJ0MjQwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgLS1xdWFsLT52Z2NfbGV2ZWwpOwogfQogCiAvKgpAQCAtOTA0LDIxICs5MzEsMTAgQEAKIAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQl1MzIgcmVnOwotCisJLyoKKwkgKiBEaXNhYmxlIHBvd2VyCisJICovCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSQ1NSMCwgMCk7Ci0KLQkvKgotCSAqIERpc2FibGUgc3luY2hyb25pc2F0aW9uLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKLQotCS8qCi0JICogQ2FuY2VsIFJYIGFuZCBUWC4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9BQk9SVCwgMSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHJ0MjQwMHBjaV9zZXRfc3RhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTExMTUsNiArMTEzMSwyMCBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyNDAwcGNpX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJdTMyIHJlZzsKKworCWlmIChxaWQgPT0gUUlEX0JFQUNPTikgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7CisJfSBlbHNlIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOworCX0KK30KKwogLyoKICAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKICAqLwpAQCAtMTM2NSw3ICsxMzk1LDkgQEAKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKIAogCXJ0MjQwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9yYWRpbywgTEVEX1RZUEVfUkFESU8pOwotCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZKQorCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0RFRkFVTFQgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfQVNVUykKIAkJcnQyNDAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsCiAJCQkJICAgTEVEX1RZUEVfQUNUSVZJVFkpOwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KQEAgLTE0MTksNyArMTQ1MSw5IEBACiAJICogSW5pdGlhbGl6ZSBhbGwgaHcgZmllbGRzLgogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkJICAgICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOwogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKIAogCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsIHJ0MngwMGRldi0+ZGV2KTsKQEAgLTE1NzIsNiArMTYwNiw3IEBACiAJLndyaXRlX3R4X2RhdGEJCT0gcnQyeDAwcGNpX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDI0MDBwY2lfd3JpdGVfYmVhY29uLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MjQwMHBjaV9raWNrX3R4X3F1ZXVlLAorCS5raWxsX3R4X3F1ZXVlCQk9IHJ0MjQwMHBjaV9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDI0MDBwY2lfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19maWx0ZXIJCT0gcnQyNDAwcGNpX2NvbmZpZ19maWx0ZXIsCiAJLmNvbmZpZ19pbnRmCQk9IHJ0MjQwMHBjaV9jb25maWdfaW50ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAppbmRleCA5YWVmZGE0Li5lYzNiMDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDgsOCArNDgsOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDEwMAogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDAyMAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAwYwogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwppbmRleCBkM2JjMjE4Li4yNzZhODIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTE0LDkgKzExNCw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTU3Myw2ICs1NzAsMzIgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxMiwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyNTAwcGNpX2NvbmZpZ19wcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKK3sKKwllbnVtIGRldl9zdGF0ZSBzdGF0ZSA9CisJICAgIChsaWJjb25mLT5jb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSA/CisJCVNUQVRFX1NMRUVQIDogU1RBVEVfQVdBS0U7CisJdTMyIHJlZzsKKworCWlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUCkgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjIwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX0RFTEFZX0FGVEVSX1RCQ04sCisJCQkJICAgKGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAyMCkgKiAxNik7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9UQkNOX0JFRk9SRV9XQUtFVVAsCisJCQkJICAgbGliY29uZi0+Y29uZi0+bGlzdGVuX2ludGVydmFsIC0gMSk7CisKKwkJLyogV2UgbXVzdCBmaXJzdCBkaXNhYmxlIGF1dG93YWtlIGJlZm9yZSBpdCBjYW4gYmUgZW5hYmxlZCAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfQVVUT1dBS0UsIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IyMCwgcmVnKTsKKworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfQVVUT1dBS0UsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IyMCwgcmVnKTsKKwl9CisKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgc3RhdGUpOworfQorCiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtNTg4LDYgKzYxMSw4IEBACiAJCXJ0MjUwMHBjaV9jb25maWdfcmV0cnlfbGltaXQocnQyeDAwZGV2LCBsaWJjb25mKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKQogCQlydDI1MDBwY2lfY29uZmlnX2R1cmF0aW9uKHJ0MngwMGRldiwgbGliY29uZik7CisJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQlydDI1MDBwY2lfY29uZmlnX3BzKHJ0MngwMGRldiwgbGliY29uZik7CiB9CiAKIC8qCkBAIC02MTEsMjkgKzYzNiwzMyBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENOVDNfRkFMU0VfQ0NBKTsKIH0KIAotc3RhdGljIHZvaWQgcnQyNTAwcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyNTAwcGNpX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIHU4IHZnY19sZXZlbCkKIHsKLQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NDgpOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAweDQ4OworCWlmIChxdWFsLT52Z2NfbGV2ZWxfcmVnICE9IHZnY19sZXZlbCkgeworCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHZnY19sZXZlbCk7CisJCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CisJfQogfQogCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQyNTAwcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQogewotCWludCByc3NpID0gcnQyeDAwX2dldF9saW5rX3Jzc2koJnJ0MngwMGRldi0+bGluayk7Ci0JdTggcjE3OworCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHg0OCk7Cit9CiAKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCkKK3sKIAkvKgogCSAqIFRvIHByZXZlbnQgY29sbGlzaW9ucyB3aXRoIE1BQyBBU0lDIG9uIGNoaXBzZXRzCiAJICogdXAgdG8gdmVyc2lvbiBDIHRoZSBsaW5rIHR1bmluZyBzaG91bGQgaGFsdCBhZnRlciAyMAogCSAqIHNlY29uZHMgd2hpbGUgYmVpbmcgYXNzb2NpYXRlZC4KIAkgKi8KIAlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMjU2MF9WRVJTSU9OX0QgJiYKLQkgICAgcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQgJiYKLQkgICAgcnQyeDAwZGV2LT5saW5rLmNvdW50ID4gMjApCisJICAgIHJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkICYmIGNvdW50ID4gMjApCiAJCXJldHVybjsKIAotCXJ0MjUwMHBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDE3LCAmcjE3KTsKLQogCS8qCiAJICogQ2hpcHNldCB2ZXJzaW9ucyBDIGFuZCBsb3dlciBzaG91bGQgZGlyZWN0bHkgY29udGludWUKIAkgKiB0byB0aGUgZHluYW1pYyBDQ0EgdHVuaW5nLiBDaGlwc2V0IHZlcnNpb24gRCBhbmQgaGlnaGVyCkBAIC02NDksMjkgKzY3OCwyNSBAQAogCSAqIHRoZW4gY29ycnVwdCB0aGUgUjE3IHR1bmluZy4gVG8gcmVtaWR5IHRoaXMgdGhlIHR1bmluZyBzaG91bGQKIAkgKiBiZSBzdG9wcGVkIChXaGlsZSBtYWtpbmcgc3VyZSB0aGUgUjE3IHZhbHVlIHdpbGwgbm90IGV4Y2VlZCBsaW1pdHMpCiAJICovCi0JaWYgKHJzc2kgPCAtODAgJiYgcnQyeDAwZGV2LT5saW5rLmNvdW50ID4gMjApIHsKLQkJaWYgKHIxNyA+PSAweDQxKSB7Ci0JCQlyMTcgPSBydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsOwotCQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCQl9CisJaWYgKHF1YWwtPnJzc2kgPCAtODAgJiYgY291bnQgPiAyMCkgeworCQlpZiAocXVhbC0+dmdjX2xldmVsX3JlZyA+PSAweDQxKQorCQkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBxdWFsLT52Z2NfbGV2ZWwpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTU4KSB7Ci0JCWlmIChyMTcgIT0gMHg1MCkKLQkJCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHg1MCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTU4KSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHg1MCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgbWlkLVIxNyBmb3IgbWlkZGxlIGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTc0KSB7Ci0JCWlmIChyMTcgIT0gMHg0MSkKLQkJCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHg0MSk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTc0KSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHg0MSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3OSw4ICs3MDQsOCBAQAogCSAqIExlYXZlIHNob3J0IG9yIG1pZGRsZSBkaXN0YW5jZSBjb25kaXRpb24sIHJlc3RvcmUgcjE3CiAJICogdG8gdGhlIGR5bmFtaWMgdHVuaW5nIHJhbmdlLgogCSAqLwotCWlmIChyMTcgPj0gMHg0MSkgewotCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwpOworCWlmIChxdWFsLT52Z2NfbGV2ZWxfcmVnID49IDB4NDEpIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBxdWFsLT52Z2NfbGV2ZWwpOwogCQlyZXR1cm47CiAJfQogCkBAIC02OTAsMTIgKzcxNSwxMiBAQAogCSAqIFIxNyBpcyBpbnNpZGUgdGhlIGR5bmFtaWMgdHVuaW5nIHJhbmdlLAogCSAqIHN0YXJ0IHR1bmluZyB0aGUgbGluayBiYXNlZCBvbiB0aGUgZmFsc2UgY2NhIGNvdW50ZXIuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByMTcgPCAweDQwKSB7Ci0JCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgKytyMTcpOwotCQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gcjE3OwotCX0gZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhIDwgMTAwICYmIHIxNyA+IDB4MzIpIHsKLQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAtLXIxNyk7Ci0JCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByMTc7CisJaWYgKHF1YWwtPmZhbHNlX2NjYSA+IDUxMiAmJiBxdWFsLT52Z2NfbGV2ZWxfcmVnIDwgMHg0MCkgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsICsrcXVhbC0+dmdjX2xldmVsX3JlZyk7CisJCXF1YWwtPnZnY19sZXZlbCA9IHF1YWwtPnZnY19sZXZlbF9yZWc7CisJfSBlbHNlIGlmIChxdWFsLT5mYWxzZV9jY2EgPCAxMDAgJiYgcXVhbC0+dmdjX2xldmVsX3JlZyA+IDB4MzIpIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAtLXF1YWwtPnZnY19sZXZlbF9yZWcpOworCQlxdWFsLT52Z2NfbGV2ZWwgPSBxdWFsLT52Z2NfbGV2ZWxfcmVnOwogCX0KIH0KIApAQCAtMTA2NSwyMSArMTA5MCwxMCBAQAogCiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXUzMiByZWc7Ci0KKwkvKgorCSAqIERpc2FibGUgcG93ZXIKKwkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JDU1IwLCAwKTsKLQotCS8qCi0JICogRGlzYWJsZSBzeW5jaHJvbmlzYXRpb24uCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIDApOwotCi0JLyoKLQkgKiBDYW5jZWwgUlggYW5kIFRYLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgcnQyNTAwcGNpX3NldF9zdGF0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtMTIwNSw3ICsxMjE5LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9USU1FU1RBTVAsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PRkRNLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgICh0eGRlc2MtPnJhdGVfbW9kZSA9PSBSQVRFX01PREVfT0ZETSkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0NJUEhFUl9PV05FUiwgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKQEAgLTEyNzUsNiArMTI4OSwyMCBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyNTAwcGNpX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJdTMyIHJlZzsKKworCWlmIChxaWQgPT0gUUlEX0JFQUNPTikgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7CisJfSBlbHNlIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOworCX0KK30KKwogLyoKICAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKICAqLwpAQCAtMTUyNCw3ICsxNTUyLDkgQEAKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKIAogCXJ0MjUwMHBjaV9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9yYWRpbywgTEVEX1RZUEVfUkFESU8pOwotCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZKQorCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0RFRkFVTFQgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfQVNVUykKIAkJcnQyNTAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsCiAJCQkJICAgTEVEX1RZUEVfQUNUSVZJVFkpOwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KQEAgLTE3MjEsNyArMTc1MSw5IEBACiAJICogSW5pdGlhbGl6ZSBhbGwgaHcgZmllbGRzLgogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkJICAgICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOwogCiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSAwOwogCkBAIC0xODczLDYgKzE5MDUsNyBAQAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNTAwcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI1MDBwY2lfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDI1MDBwY2lfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNTAwcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0MjUwMHBjaV9jb25maWdfZmlsdGVyLAogCS5jb25maWdfaW50ZgkJPSBydDI1MDBwY2lfY29uZmlnX2ludGYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKaW5kZXggZTEzNTI0Ny4uY2UyZjA2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTU5LDggKzU5LDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAyMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwNDAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKaW5kZXggM2UyYWMyYi4uOWU2MzBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIwNCw5ICsyMDQsNiBAQAogewogCXUxNiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC0yODAsNiArMjc3LDE4IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAorI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorc3RhdGljIGludCBydDI1MDB1c2JfcmZraWxsX3BvbGwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwl1MTYgcmVnOworCisJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTksICZyZWcpOworCXJldHVybiBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBNQUNfQ1NSMTlfQklUNyk7Cit9CisjZWxzZQorI2RlZmluZSBydDI1MDB1c2JfcmZraWxsX3BvbGwJTlVMTAorI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLworCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQpAQCAtNjM0LDYgKzY0MywzMiBAQAogCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTgsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MjUwMHVzYl9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUxNiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTgsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjE4X0RFTEFZX0FGVEVSX0JFQUNPTiwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMjApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjE4X0JFQUNPTlNfQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMThfQVVUT19XQUtFLCAwKTsKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjE4LCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMThfQVVUT19XQUtFLCAxKTsKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjE4LCByZWcpOworCX0KKworCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBzdGF0ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC02NDcsNiArNjgyLDggQEAKIAkJCQkJIGxpYmNvbmYtPmNvbmYtPnBvd2VyX2xldmVsKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKQogCQlydDI1MDB1c2JfY29uZmlnX2R1cmF0aW9uKHJ0MngwMGRldiwgbGliY29uZik7CisJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQlydDI1MDB1c2JfY29uZmlnX3BzKHJ0MngwMGRldiwgbGliY29uZik7CiB9CiAKIC8qCkBAIC02NzAsNyArNzA3LDggQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYocmVnLCBTVEFfQ1NSM19GQUxTRV9DQ0FfRVJST1IpOwogfQogCi1zdGF0aWMgdm9pZCBydDI1MDB1c2JfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyB2b2lkIHJ0MjUwMHVzYl9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKIAl1MTYgZWVwcm9tOwogCXUxNiB2YWx1ZTsKQEAgLTY5MSw3ICs3MjksNyBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0JCUFRVTkVfVkdDVVBQRVIpOwogCXJ0MjUwMHVzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmFsdWUpOwogCi0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHZhbHVlOworCXF1YWwtPnZnY19sZXZlbCA9IHZhbHVlOwogfQogCiAvKgpAQCAtMTE3Niw3ICsxMjE0LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9USU1FU1RBTVAsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PRkRNLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgICh0eGRlc2MtPnJhdGVfbW9kZSA9PSBSQVRFX01PREVfT0ZETSkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX05FV19TRVEsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CkBAIC0xNTYyLDEyICsxNjAwLDIyIEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9MRURfTU9ERSk7CiAKIAlydDI1MDB1c2JfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sIExFRF9UWVBFX1JBRElPKTsKLQlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9ERUZBVUxUIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0FTVVMpCiAJCXJ0MjUwMHVzYl9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLAogCQkJCSAgIExFRF9UWVBFX0FDVElWSVRZKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCiAKIAkvKgorCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KKwkgKi8KKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKKwlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQorCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7CisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKKwkvKgogCSAqIENoZWNrIGlmIHRoZSBCQlAgdHVuaW5nIHNob3VsZCBiZSBkaXNhYmxlZC4KIAkgKi8KIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDLCAmZWVwcm9tKTsKQEAgLTE3NTIsNyArMTgwMCw5IEBACiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPQogCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKIAkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gVFhEX0RFU0NfU0laRTsKIApAQCAtMTgzOSw3ICsxODg5LDcgQEAKIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpIHsKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCQlfX3NldF9iaXQoQ09ORklHX0NSWVBUT19DT1BZX0lWLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9DT1BZX0lWLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJfQogCV9fc2V0X2JpdChDT05GSUdfRElTQUJMRV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCkBAIC0xODczLDYgKzE5MjMsNyBAQAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwdXNiX3VuaW5pdGlhbGl6ZSwKIAkuY2xlYXJfZW50cnkJCT0gcnQyeDAwdXNiX2NsZWFyX2VudHJ5LAogCS5zZXRfZGV2aWNlX3N0YXRlCT0gcnQyNTAwdXNiX3NldF9kZXZpY2Vfc3RhdGUsCisJLnJma2lsbF9wb2xsCQk9IHJ0MjUwMHVzYl9yZmtpbGxfcG9sbCwKIAkubGlua19zdGF0cwkJPSBydDI1MDB1c2JfbGlua19zdGF0cywKIAkucmVzZXRfdHVuZXIJCT0gcnQyNTAwdXNiX3Jlc2V0X3R1bmVyLAogCS5saW5rX3R1bmVyCQk9IHJ0MjUwMHVzYl9saW5rX3R1bmVyLApAQCAtMTg4MSw2ICsxOTMyLDcgQEAKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjUwMHVzYl93cml0ZV9iZWFjb24sCiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0MjUwMHVzYl9nZXRfdHhfZGF0YV9sZW4sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNTAwdXNiX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjUwMHVzYl9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX3NoYXJlZF9rZXkJPSBydDI1MDB1c2JfY29uZmlnX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0MjUwMHVzYl9jb25maWdfa2V5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCmluZGV4IDQzNDdkZmQuLjViYzQ2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01OSw4ICs1OSw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMDZhCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDYwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpAQCAtMTg5LDYgKzE4OSwxNCBAQAogICogTUFDX0NTUjE5OiBHUElPIGNvbnRyb2wgcmVnaXN0ZXIuCiAgKi8KICNkZWZpbmUgTUFDX0NTUjE5CQkJMHgwNDI2CisjZGVmaW5lIE1BQ19DU1IxOV9CSVQwCQkJRklFTEQzMigweDAwMDEpCisjZGVmaW5lIE1BQ19DU1IxOV9CSVQxCQkJRklFTEQzMigweDAwMDIpCisjZGVmaW5lIE1BQ19DU1IxOV9CSVQyCQkJRklFTEQzMigweDAwMDQpCisjZGVmaW5lIE1BQ19DU1IxOV9CSVQzCQkJRklFTEQzMigweDAwMDgpCisjZGVmaW5lIE1BQ19DU1IxOV9CSVQ0CQkJRklFTEQzMigweDAwMTApCisjZGVmaW5lIE1BQ19DU1IxOV9CSVQ1CQkJRklFTEQzMigweDAwMjApCisjZGVmaW5lIE1BQ19DU1IxOV9CSVQ2CQkJRklFTEQzMigweDAwNDApCisjZGVmaW5lIE1BQ19DU1IxOV9CSVQ3CQkJRklFTEQzMigweDAwODApCiAKIC8qCiAgKiBNQUNfQ1NSMjA6IExFRCBjb250cm9sIHJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCmluZGV4IDM5ZWNmM2IuLjg0YmQ2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC1wb2xsZGV2Lmg+CiAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIApAQCAtNDQsNyArNDUsNyBAQAogLyoKICAqIE1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4yLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIyLjMuMCIKICNkZWZpbmUgRFJWX1BST0pFQ1QJImh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbSIKIAogLyoKQEAgLTE3Nyw1MiArMTc4LDQxIEBACiAgKi8KIHN0cnVjdCBsaW5rX3F1YWwgewogCS8qCi0JICogU3RhdGlzdGljcyByZXF1aXJlZCBmb3IgTGluayB0dW5pbmcuCi0JICogRm9yIHRoZSBhdmVyYWdlIFJTU0kgdmFsdWUgd2UgdXNlIHRoZSAiV2Fsa2luZyBhdmVyYWdlIiBhcHByb2FjaC4KLQkgKiBXaGVuIGFkZGluZyBSU1NJIHRvIHRoZSBhdmVyYWdlIHZhbHVlIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24KLQkgKiBpcyBuZWVkZWQ6Ci0JICoKLQkgKiAgICAgICAgYXZnX3Jzc2kgPSAoKGF2Z19yc3NpICogNykgKyByc3NpKSAvIDg7Ci0JICoKLQkgKiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3ZSBvbmx5IG5lZWQgMSB2YXJpYWJsZQotCSAqIHRvIHN0b3JlIHRoZSBhdmVyYWdlIGluIChObyBuZWVkIGZvciBhIGNvdW50IGFuZCBhIHRvdGFsKS4KLQkgKiBCdXQgbW9yZSBpbXBvcnRhbnRseSwgbm9ybWFsIGF2ZXJhZ2UgdmFsdWVzIHdpbGwgb3ZlciB0aW1lCi0JICogbW92ZSBsZXNzIGFuZCBsZXNzIHRvd2FyZHMgbmV3bHkgYWRkZWQgdmFsdWVzIHRoaXMgcmVzdWx0cwotCSAqIHRoYXQgd2l0aCBsaW5rIHR1bmluZywgdGhlIGRldmljZSBjYW4gaGF2ZSBhIHZlcnkgZ29vZCBSU1NJCi0JICogZm9yIGEgZmV3IG1pbnV0ZXMgYnV0IHdoZW4gdGhlIGRldmljZSBpcyBtb3ZlZCBhd2F5IGZyb20gdGhlIEFQCi0JICogdGhlIGF2ZXJhZ2Ugd2lsbCBub3QgZGVjcmVhc2UgZmFzdCBlbm91Z2ggdG8gY29tcGVuc2F0ZS4KLQkgKiBUaGUgd2Fsa2luZyBhdmVyYWdlIGNvbXBlbnNhdGVzIHRoaXMgYW5kIHdpbGwgbW92ZSB0b3dhcmRzCi0JICogdGhlIG5ldyB2YWx1ZXMgY29ycmVjdGx5IGFsbG93aW5nIGEgZWZmZWN0aXZlIGxpbmsgdHVuaW5nLgorCSAqIFN0YXRpc3RpY3MgcmVxdWlyZWQgZm9yIExpbmsgdHVuaW5nIGJ5IGRyaXZlcgorCSAqIFRoZSByc3NpIHZhbHVlIGlzIHByb3ZpZGVkIGJ5IHJ0MngwMGxpYiBkdXJpbmcgdGhlCisJICogbGlua190dW5lcigpIGNhbGxiYWNrIGZ1bmN0aW9uLgorCSAqIFRoZSBmYWxzZV9jY2EgZmllbGQgaXMgZmlsbGVkIGR1cmluZyB0aGUgbGlua19zdGF0cygpCisJICogY2FsbGJhY2sgZnVuY3Rpb24gYW5kIGNvdWxkIGJlIHVzZWQgZHVyaW5nIHRoZQorCSAqIGxpbmtfdHVuZXIoKSBjYWxsYmFjayBmdW5jdGlvbi4KIAkgKi8KLQlpbnQgYXZnX3Jzc2k7CisJaW50IHJzc2k7CiAJaW50IGZhbHNlX2NjYTsKIAogCS8qCi0JICogU3RhdGlzdGljcyByZXF1aXJlZCBmb3IgU2lnbmFsIHF1YWxpdHkgY2FsY3VsYXRpb24uCi0JICogRm9yIGNhbGN1bGF0aW5nIHRoZSBTaWduYWwgcXVhbGl0eSB3ZSBoYXZlIHRvIGRldGVybWluZQotCSAqIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3VjY2VzcyBhbmQgZmFpbGVkIFJYIGFuZCBUWCBmcmFtZXMuCi0JICogQWZ0ZXIgdGhhdCB3ZSBhbHNvIHVzZSB0aGUgYXZlcmFnZSBSU1NJIHZhbHVlIHRvIGhlbHAKLQkgKiBkZXRlcm1pbmluZyB0aGUgc2lnbmFsIHF1YWxpdHkuCi0JICogRm9yIHRoZSBjYWxjdWxhdGlvbiB3ZSB3aWxsIHVzZSB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKKwkgKiBWR0MgbGV2ZWxzCisJICogSGFyZHdhcmUgZHJpdmVyIHdpbGwgdHVuZSB0aGUgVkdDIGxldmVsIGR1cmluZyBlYWNoIGNhbGwKKwkgKiB0byB0aGUgbGlua190dW5lcigpIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGlzIHZnY19sZXZlbCBpcworCSAqIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIGxpbmsgcXVhbGl0eSBzdGF0aXN0aWNzIGxpa2UKKwkgKiBhdmVyYWdlIFJTU0kgYW5kIHRoZSBmYWxzZSBDQ0EgY291bnQuCiAJICoKLQkgKiAgICAgICAgIHJzc2lfcGVyY2VudGFnZSA9IChhdmdfcnNzaSAqIDEwMCkgLyByc3NpX29mZnNldAotCSAqICAgICAgICAgcnhfcGVyY2VudGFnZSA9IChyeF9zdWNjZXNzICogMTAwKSAvIHJ4X3RvdGFsCi0JICogICAgICAgICB0eF9wZXJjZW50YWdlID0gKHR4X3N1Y2Nlc3MgKiAxMDApIC8gdHhfdG90YWwKLQkgKiAgICAgICAgIGF2Z19zaWduYWwgPSAoKFdFSUdIVF9SU1NJICogYXZnX3Jzc2kpICsKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgKFdFSUdIVF9UWCAqIHR4X3BlcmNlbnRhZ2UpICsKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgKFdFSUdIVF9SWCAqIHJ4X3BlcmNlbnRhZ2UpKSAvIDEwMAotCSAqCi0JICogVGhpcyB2YWx1ZSBzaG91bGQgdGhlbiBiZSBjaGVja2VkIHRvIG5vdCBiZSBncmVhdGVkIHRoZW4gMTAwLgorCSAqIEluIHNvbWUgY2FzZXMgdGhlIGRyaXZlcnMgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4KKwkgKiB0aGUgY3VycmVudGx5ICJkZXNpcmVkIiBWR0MgbGV2ZWwgYW5kIHRoZSBsZXZlbCBjb25maWd1cmVkCisJICogaW4gdGhlIGhhcmR3YXJlLiBUaGUgbGF0dGVyIGlzIGltcG9ydGFudCB0byByZWR1Y2UgdGhlCisJICogbnVtYmVyIG9mIEJCUCByZWdpc3RlciByZWFkcyB0byByZWR1Y2UgcmVnaXN0ZXIgYWNjZXNzCisJICogb3ZlcmhlYWQuIEZvciB0aGlzIHJlYXNvbiB3ZSBzdG9yZSBib3RoIHZhbHVlcyBoZXJlLgogCSAqLwotCWludCByeF9wZXJjZW50YWdlOworCXU4IHZnY19sZXZlbDsKKwl1OCB2Z2NfbGV2ZWxfcmVnOworCisJLyoKKwkgKiBTdGF0aXN0aWNzIHJlcXVpcmVkIGZvciBTaWduYWwgcXVhbGl0eSBjYWxjdWxhdGlvbi4KKwkgKiBUaGVzZSBmaWVsZHMgbWlnaHQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGxpbmtfc3RhdHMoKQorCSAqIGNhbGxiYWNrIGZ1bmN0aW9uLgorCSAqLwogCWludCByeF9zdWNjZXNzOwogCWludCByeF9mYWlsZWQ7Ci0JaW50IHR4X3BlcmNlbnRhZ2U7CiAJaW50IHR4X3N1Y2Nlc3M7CiAJaW50IHR4X2ZhaWxlZDsKLSNkZWZpbmUgV0VJR0hUX1JTU0kJMjAKLSNkZWZpbmUgV0VJR0hUX1JYCTQwCi0jZGVmaW5lIFdFSUdIVF9UWAk0MAogfTsKIAogLyoKQEAgLTI4Niw5ICsyNzYsMTYgQEAKIAlzdHJ1Y3QgbGlua19hbnQgYW50OwogCiAJLyoKLQkgKiBBY3RpdmUgVkdDIGxldmVsCisJICogQ3VycmVudGx5IGFjdGl2ZSBhdmVyYWdlIFJTU0kgdmFsdWUKIAkgKi8KLQlpbnQgdmdjX2xldmVsOworCWludCBhdmdfcnNzaTsKKworCS8qCisJICogQ3VycmVudGx5IHByZWNhbGN1bGF0ZWQgcGVyY2VudGFnZXMgb2Ygc3VjY2Vzc2Z1bAorCSAqIFRYIGFuZCBSWCBmcmFtZXMuCisJICovCisJaW50IHJ4X3BlcmNlbnRhZ2U7CisJaW50IHR4X3BlcmNlbnRhZ2U7CiAKIAkvKgogCSAqIFdvcmsgc3RydWN0dXJlIGZvciBzY2hlZHVsaW5nIHBlcmlvZGljIGxpbmsgdHVuaW5nLgpAQCAtMjk3LDU1ICsyOTQsNiBAQAogfTsKIAogLyoKLSAqIFNtYWxsIGhlbHBlciBtYWNybyB0byB3b3JrIHdpdGggbW92aW5nL3dhbGtpbmcgYXZlcmFnZXMuCi0gKi8KLSNkZWZpbmUgTU9WSU5HX0FWRVJBR0UoX19hdmcsIF9fdmFsLCBfX3NhbXBsZXMpIFwKLQkoICgoKF9fYXZnKSAqICgoX19zYW1wbGVzKSAtIDEpKSArIChfX3ZhbCkpIC8gKF9fc2FtcGxlcykgKQotCi0vKgotICogV2hlbiB3ZSBsYWNrIFJTU0kgaW5mb3JtYXRpb24gcmV0dXJuIHNvbWV0aGluZyBsZXNzIHRoZW4gLTgwIHRvCi0gKiB0ZWxsIHRoZSBkcml2ZXIgdG8gdHVuZSB0aGUgZGV2aWNlIHRvIG1heGltdW0gc2Vuc2l0aXZpdHkuCi0gKi8KLSNkZWZpbmUgREVGQVVMVF9SU1NJCSggLTEyOCApCi0KLS8qCi0gKiBMaW5rIHF1YWxpdHkgYWNjZXNzIGZ1bmN0aW9ucy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX2dldF9saW5rX3Jzc2koc3RydWN0IGxpbmsgKmxpbmspCi17Ci0JaWYgKGxpbmstPnF1YWwuYXZnX3Jzc2kgJiYgbGluay0+cXVhbC5yeF9zdWNjZXNzKQotCQlyZXR1cm4gbGluay0+cXVhbC5hdmdfcnNzaTsKLQlyZXR1cm4gREVGQVVMVF9SU1NJOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfZ2V0X2xpbmtfYW50X3Jzc2koc3RydWN0IGxpbmsgKmxpbmspCi17Ci0JaWYgKGxpbmstPmFudC5yc3NpX2FudCAmJiBsaW5rLT5xdWFsLnJ4X3N1Y2Nlc3MpCi0JCXJldHVybiBsaW5rLT5hbnQucnNzaV9hbnQ7Ci0JcmV0dXJuIERFRkFVTFRfUlNTSTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMF9yZXNldF9saW5rX2FudF9yc3NpKHN0cnVjdCBsaW5rICpsaW5rKQotewotCWxpbmstPmFudC5yc3NpX2FudCA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaV9oaXN0b3J5KHN0cnVjdCBsaW5rICpsaW5rLAotCQkJCQkJICAgZW51bSBhbnRlbm5hIGFudCkKLXsKLQlpZiAobGluay0+YW50LnJzc2lfaGlzdG9yeVthbnQgLSBBTlRFTk5BX0FdKQotCQlyZXR1cm4gbGluay0+YW50LnJzc2lfaGlzdG9yeVthbnQgLSBBTlRFTk5BX0FdOwotCXJldHVybiBERUZBVUxUX1JTU0k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF91cGRhdGVfYW50X3Jzc2koc3RydWN0IGxpbmsgKmxpbmssIGludCByc3NpKQotewotCWludCBvbGRfcnNzaSA9IGxpbmstPmFudC5yc3NpX2hpc3RvcnlbbGluay0+YW50LmFjdGl2ZS5yeCAtIEFOVEVOTkFfQV07Ci0JbGluay0+YW50LnJzc2lfaGlzdG9yeVtsaW5rLT5hbnQuYWN0aXZlLnJ4IC0gQU5URU5OQV9BXSA9IHJzc2k7Ci0JcmV0dXJuIG9sZF9yc3NpOwotfQotCi0vKgogICogSW50ZXJmYWNlIHN0cnVjdHVyZQogICogUGVyIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGRldGFpbHMsIHRoaXMgc3RydWN0dXJlCiAgKiBpcyBhbGxvY2F0ZWQgYXMgdGhlIHByaXZhdGUgZGF0YSBmb3IgaWVlZTgwMjExX3ZpZi4KQEAgLTQ0OCw3ICszOTYsNyBAQAogCWludCBhY2tfdGltZW91dDsKIAlpbnQgYWNrX2NvbnN1bWVfdGltZTsKIAotCXU2NCBiYXNpY19yYXRlczsKKwl1MzIgYmFzaWNfcmF0ZXM7CiAKIAlpbnQgc2xvdF90aW1lOwogCkBAIC01MjAsOSArNDY4LDEwIEBACiAJICovCiAJaW50ICgqcHJvYmVfaHcpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAljaGFyICooKmdldF9maXJtd2FyZV9uYW1lKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci0JdTE2ICgqZ2V0X2Zpcm13YXJlX2NyYykgKGNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwotCWludCAoKmxvYWRfZmlybXdhcmUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB2b2lkICpkYXRhLAotCQkJICAgICAgY29uc3Qgc2l6ZV90IGxlbik7CisJaW50ICgqY2hlY2tfZmlybXdhcmUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKKwlpbnQgKCpsb2FkX2Zpcm13YXJlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKIAogCS8qCiAJICogRGV2aWNlIGluaXRpYWxpemF0aW9uL2RlaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCkBAIC01NDQsOCArNDkzLDEwIEBACiAJaW50ICgqcmZraWxsX3BvbGwpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAl2b2lkICgqbGlua19zdGF0cykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCk7Ci0Jdm9pZCAoKnJlc2V0X3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci0Jdm9pZCAoKmxpbmtfdHVuZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKwl2b2lkICgqcmVzZXRfdHVuZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsKTsKKwl2b2lkICgqbGlua190dW5lcikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KTsKIAogCS8qCiAJICogVFggY29udHJvbCBoYW5kbGVycwpAQCAtNTU4LDYgKzUwOSw4IEBACiAJaW50ICgqZ2V0X3R4X2RhdGFfbGVuKSAoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7CiAJdm9pZCAoKmtpY2tfdHhfcXVldWUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcXVldWUpOworCXZvaWQgKCpraWxsX3R4X3F1ZXVlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlKTsKIAogCS8qCiAJICogUlggY29udHJvbCBoYW5kbGVycwpAQCAtNjI1LDcgKzU3OCw2IEBACiAJREVWSUNFX1NUQVRFX1JFR0lTVEVSRURfSFcsCiAJREVWSUNFX1NUQVRFX0lOSVRJQUxJWkVELAogCURFVklDRV9TVEFURV9TVEFSVEVELAotCURFVklDRV9TVEFURV9TVEFSVEVEX1NVU1BFTkQsCiAJREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sCiAJREVWSUNFX1NUQVRFX0RJU0FCTEVEX1JBRElPX0hXLAogCkBAIC02MzcsNiArNTg5LDcgQEAKIAlEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLAogCURSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwKIAlEUklWRVJfUkVRVUlSRV9ETUEsCisJRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwKIAogCS8qCiAJICogRHJpdmVyIGZlYXR1cmVzCkBAIC02NTMsNyArNjA2LDYgQEAKIAlDT05GSUdfRVhURVJOQUxfTE5BX0JHLAogCUNPTkZJR19ET1VCTEVfQU5URU5OQSwKIAlDT05GSUdfRElTQUJMRV9MSU5LX1RVTklORywKLQlDT05GSUdfQ1JZUFRPX0NPUFlfSVYsCiB9OwogCiAvKgpAQCAtNjg5LDggKzY0MSw4IEBACiAJdW5zaWduZWQgbG9uZyByZmtpbGxfc3RhdGU7CiAjZGVmaW5lIFJGS0lMTF9TVEFURV9BTExPQ0FURUQJCTEKICNkZWZpbmUgUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQJCTIKLQlzdHJ1Y3QgcmZraWxsICpyZmtpbGw7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayByZmtpbGxfd29yazsKKyNkZWZpbmUgUkZLSUxMX1NUQVRFX0JMT0NLRUQJCTMKKwlzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqcmZraWxsX3BvbGxfZGV2OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAJLyoKQEAgLTkxOCw3ICs4NzAsNyBAQAogCXJldHVybiAoY2hpcHNldC0+cmYgPT0gY2hpcCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IHJ0MngwMF9yZXYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0KQorc3RhdGljIGlubGluZSB1MzIgcnQyeDAwX3Jldihjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQpCiB7CiAJcmV0dXJuIGNoaXBzZXQtPnJldjsKIH0KQEAgLTk4Miw3ICs5MzQsNyBAQAogCQkJCWludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0NSWVBUTwogaW50IHJ0MngwMG1hY19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJICAgICAgY29uc3QgdTggKmxvY2FsX2FkZHJlc3MsIGNvbnN0IHU4ICphZGRyZXNzLAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogI2Vsc2UKICNkZWZpbmUgcnQyeDAwbWFjX3NldF9rZXkJTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCmluZGV4IGU2NmZiMzEuLjljMmY1NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMiw3ICszMiw3IEBACiB2b2lkIHJ0MngwMGxpYl9jb25maWdfaW50ZihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAogCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLAotCQkJICAgdTggKm1hYywgdTggKmJzc2lkKQorCQkJICAgY29uc3QgdTggKm1hYywgY29uc3QgdTggKmJzc2lkKQogewogCXN0cnVjdCBydDJ4MDBpbnRmX2NvbmYgY29uZjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwpAQCAtNDIsNiArNDIsOCBAQAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CiAJCWNvbmYuc3luYyA9IFRTRl9TWU5DX0JFQUNPTjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgpAQCAtMTUyLDggKzE1NCw3IEBACiAJICovCiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y29uZmlnX2FudChydDJ4MDBkZXYsIGFudCk7CiAKLQlydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihydDJ4MDBkZXYpOwotCXJ0MngwMF9yZXNldF9saW5rX2FudF9yc3NpKCZydDJ4MDBkZXYtPmxpbmspOworCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCB0cnVlKTsKIAogCW1lbWNweShhY3RpdmUsIGFudCwgc2l6ZW9mKCphbnQpKTsKIApAQCAtMTkxLDcgKzE5Miw3IEBACiAJICogd2hpY2ggbWVhbnMgd2UgbmVlZCB0byByZXNldCB0aGUgbGluayB0dW5lci4KIAkgKi8KIAlpZiAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpCi0JCXJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHJ0MngwMGRldik7CisJCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCBmYWxzZSk7CiAKIAlydDJ4MDBkZXYtPmN1cnJfYmFuZCA9IGNvbmYtPmNoYW5uZWwtPmJhbmQ7CiAJcnQyeDAwZGV2LT50eF9wb3dlciA9IGNvbmYtPnBvd2VyX2xldmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCmluZGV4IGFlZTljYmEuLjBiNDE4NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00OSw5ICs0OSwxNCBAQAogdm9pZCBydDJ4MDBjcnlwdG9fY3JlYXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkgICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogeworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmh3X2tleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwogCisJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAorCSAgICAhaHdfa2V5IHx8IGVudHJ5LT5za2ItPmRvX25vdF9lbmNyeXB0KQorCQlyZXR1cm47CisKIAlfX3NldF9iaXQoRU5UUllfVFhEX0VOQ1JZUFQsICZ0eGRlc2MtPmZsYWdzKTsKIAogCXR4ZGVzYy0+Y2lwaGVyID0gcnQyeDAwY3J5cHRvX2tleV90b19jaXBoZXIoaHdfa2V5KTsKQEAgLTY5LDExICs3NCwxNyBAQAogCQlfX3NldF9iaXQoRU5UUllfVFhEX0VOQ1JZUFRfTU1JQywgJnR4ZGVzYy0+ZmxhZ3MpOwogfQogCi11bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbykKK3Vuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleTsKIAl1bnNpZ25lZCBpbnQgb3ZlcmhlYWQgPSAwOwogCisJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAorCSAgICAha2V5IHx8IHNrYi0+ZG9fbm90X2VuY3J5cHQpCisJCXJldHVybiBvdmVyaGVhZDsKKwogCS8qCiAJICogRXh0ZW5kIGZyYW1lIGxlbmd0aCB0byBpbmNsdWRlIElWL0VJVi9JQ1YvTU1JQywKIAkgKiBub3RlIHRoYXQgdGhlc2UgbGVuZ3RocyBzaG91bGQgb25seSBiZSBhZGRlZCB3aGVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCmluZGV4IDU0ZGQxMDAuLjA3ZDM3OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTMwLDkgKzEzMCwxMSBAQAogfTsKIAogdm9pZCBydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICAgZW51bSBjaXBoZXIgY2lwaGVyLCBlbnVtIHJ4X2NyeXB0byBzdGF0dXMpCisJCQkgICAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpCiB7CiAJc3RydWN0IHJ0MngwMGRlYnVnX2ludGYgKmludGYgPSBydDJ4MDBkZXYtPmRlYnVnZnNfaW50ZjsKKwllbnVtIGNpcGhlciBjaXBoZXIgPSByeGRlc2MtPmNpcGhlcjsKKwllbnVtIHJ4X2NyeXB0byBzdGF0dXMgPSByeGRlc2MtPmNpcGhlcl9zdGF0dXM7CiAKIAlpZiAoY2lwaGVyID09IENJUEhFUl9US0lQX05PX01JQykKIAkJY2lwaGVyID0gQ0lQSEVSX1RLSVA7CkBAIC00MzMsMTEgKzQzNSwxMiBAQAogCWlmIChpbmRleCA+PSBkZWJ1Zy0+X19uYW1lLndvcmRfY291bnQpCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAkJCQkJCQkJXAorCWluZGV4ICs9IChkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZSAvCQkJXAorCQkgIGRlYnVnLT5fX25hbWUud29yZF9zaXplKTsJCQlcCisJCQkJCQkJCVwKIAlpZiAoZGVidWctPl9fbmFtZS5mbGFncyAmIFJUMlgwMERFQlVHRlNfT0ZGU0VUKQkJXAogCQlpbmRleCAqPSBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZTsJCVwKIAkJCQkJCQkJXAotCWluZGV4ICs9IGRlYnVnLT5fX25hbWUud29yZF9iYXNlOwkJCVwKLQkJCQkJCQkJXAogCWRlYnVnLT5fX25hbWUucmVhZChpbnRmLT5ydDJ4MDBkZXYsIGluZGV4LCAmdmFsdWUpOwlcCiAJCQkJCQkJCVwKIAlzaXplID0gc3ByaW50ZihsaW5lLCBfX2Zvcm1hdCwgdmFsdWUpOwkJCVwKQEAgLTQ3NCwxMSArNDc3LDEyIEBACiAJc2l6ZSA9IHN0cmxlbihsaW5lKTsJCQkJCVwKIAl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGxpbmUsIE5VTEwsIDApOwkJCVwKIAkJCQkJCQkJXAorCWluZGV4ICs9IChkZWJ1Zy0+X19uYW1lLndvcmRfYmFzZSAvCQkJXAorCQkgIGRlYnVnLT5fX25hbWUud29yZF9zaXplKTsJCQlcCisJCQkJCQkJCVwKIAlpZiAoZGVidWctPl9fbmFtZS5mbGFncyAmIFJUMlgwMERFQlVHRlNfT0ZGU0VUKQkJXAogCQlpbmRleCAqPSBkZWJ1Zy0+X19uYW1lLndvcmRfc2l6ZTsJCVwKIAkJCQkJCQkJXAotCWluZGV4ICs9IGRlYnVnLT5fX25hbWUud29yZF9iYXNlOwkJCVwKLQkJCQkJCQkJXAogCWRlYnVnLT5fX25hbWUud3JpdGUoaW50Zi0+cnQyeDAwZGV2LCBpbmRleCwgdmFsdWUpOwlcCiAJCQkJCQkJCVwKIAkqb2Zmc2V0ICs9IHNpemU7CQkJCQlcCkBAIC01NDMsOSArNTQ3LDkgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlibG9iLT5kYXRhID0gZGF0YTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImRyaXZlcjogJXNcbiIsIGludGYtPnJ0MngwMGRldi0+b3BzLT5uYW1lKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInZlcnNpb246ICVzXG4iLCBEUlZfVkVSU0lPTik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjb21waWxlZDogJXMgJXNcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJkcml2ZXI6XHQlc1xuIiwgaW50Zi0+cnQyeDAwZGV2LT5vcHMtPm5hbWUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAidmVyc2lvbjpcdCVzXG4iLCBEUlZfVkVSU0lPTik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjb21waWxlZDpcdCVzICVzXG4iLCBfX0RBVEVfXywgX19USU1FX18pOwogCWJsb2ItPnNpemUgPSBzdHJsZW4oYmxvYi0+ZGF0YSk7CiAKIAlyZXR1cm4gZGVidWdmc19jcmVhdGVfYmxvYihuYW1lLCBTX0lSVVNSLCBpbnRmLT5kcml2ZXJfZm9sZGVyLCBibG9iKTsKQEAgLTU2NiwxNCArNTcwLDI3IEBACiAJCXJldHVybiBOVUxMOwogCiAJYmxvYi0+ZGF0YSA9IGRhdGE7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJydCBjaGlwOiAlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmYgY2hpcDogJTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJmKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJldmlzaW9uOiUwOHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZXYpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicnQgY2hpcDpcdCUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5ydCk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZiBjaGlwOlx0JTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJmKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJldmlzaW9uOlx0JTA4eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJldik7CiAJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJcbiIpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY3NyIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5jc3Iud29yZF9jb3VudCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJlZXByb20gbGVuZ3RoOiAlZFxuIiwgZGVidWctPmVlcHJvbS53b3JkX2NvdW50KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImJicCBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+YmJwLndvcmRfY291bnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmYgbGVuZ3RoOiAlZFxuIiwgZGVidWctPnJmLndvcmRfY291bnQpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmVnaXN0ZXJcdGJhc2VcdHdvcmRzXHR3b3Jkc2l6ZVxuIik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjc3JcdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+Y3NyLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5jc3Iud29yZF9jb3VudCwKKwkJCWRlYnVnLT5jc3Iud29yZF9zaXplKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImVlcHJvbVx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5lZXByb20ud29yZF9iYXNlLAorCQkJZGVidWctPmVlcHJvbS53b3JkX2NvdW50LAorCQkJZGVidWctPmVlcHJvbS53b3JkX3NpemUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiYmJwXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPmJicC53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+YmJwLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+YmJwLndvcmRfc2l6ZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZlx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5yZi53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+cmYud29yZF9jb3VudCwKKwkJCWRlYnVnLT5yZi53b3JkX3NpemUpOwogCWJsb2ItPnNpemUgPSBzdHJsZW4oYmxvYi0+ZGF0YSk7CiAKIAlyZXR1cm4gZGVidWdmc19jcmVhdGVfYmxvYihuYW1lLCBTX0lSVVNSLCBpbnRmLT5kcml2ZXJfZm9sZGVyLCBibG9iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmgKaW5kZXggYTkyMTA0ZC4uMDM1Y2JjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggODdjMGYyYy4uMDVmOTRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMwLDYwICszMCw2IEBACiAjaW5jbHVkZSAicnQyeDAwbGliLmgiCiAKIC8qCi0gKiBMaW5rIHR1bmluZyBoYW5kbGVycwotICovCi12b2lkIHJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFJlc2V0IGxpbmsgaW5mb3JtYXRpb24uCi0JICogQm90aCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2Z2MgbGV2ZWwgYXMgd2VsbCBhcwotCSAqIHRoZSBsaW5rIHR1bmVyIGNvdW50ZXIgc2hvdWxkIGJlIHJlc2V0LiBSZXNldHRpbmcKLQkgKiB0aGUgY291bnRlciBpcyBpbXBvcnRhbnQgZm9yIGRldmljZXMgd2hlcmUgdGhlCi0JICogZGV2aWNlIHNob3VsZCBvbmx5IHBlcmZvcm0gbGluayB0dW5pbmcgZHVyaW5nIHRoZQotCSAqIGZpcnN0IG1pbnV0ZSBhZnRlciBiZWluZyBlbmFibGVkLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5jb3VudCA9IDA7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDA7Ci0KLQkvKgotCSAqIFJlc2V0IHRoZSBsaW5rIHR1bmVyLgotCSAqLwotCXJ0MngwMGRldi0+b3BzLT5saWItPnJlc2V0X3R1bmVyKHJ0MngwMGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9zdGFydF9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JLyoKLQkgKiBDbGVhciBhbGwgKHBvc3NpYmx5KSBwcmUtZXhpc3RpbmcgcXVhbGl0eSBzdGF0aXN0aWNzLgotCSAqLwotCW1lbXNldCgmcnQyeDAwZGV2LT5saW5rLnF1YWwsIDAsIHNpemVvZihydDJ4MDBkZXYtPmxpbmsucXVhbCkpOwotCi0JLyoKLQkgKiBUaGUgUlggYW5kIFRYIHBlcmNlbnRhZ2Ugc2hvdWxkIHN0YXJ0IGF0IDUwJQotCSAqIHRoaXMgd2lsbCBhc3N1cmUgd2Ugd2lsbCBnZXQgYXQgbGVhc3QgZ2V0IHNvbWUKLQkgKiBkZWNlbnQgdmFsdWUgd2hlbiB0aGUgbGluayB0dW5lciBzdGFydHMuCi0JICogVGhlIHZhbHVlIHdpbGwgYmUgZHJvcHBlZCBhbmQgb3ZlcndyaXR0ZW4gd2l0aAotCSAqIHRoZSBjb3JyZWN0IChtZWFzdXJlZCApdmFsdWUgYW55d2F5IGR1cmluZyB0aGUKLQkgKiBmaXJzdCBydW4gb2YgdGhlIGxpbmsgdHVuZXIuCi0JICovCi0JcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfcGVyY2VudGFnZSA9IDUwOwotCXJ0MngwMGRldi0+bGluay5xdWFsLnR4X3BlcmNlbnRhZ2UgPSA1MDsKLQotCXJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHJ0MngwMGRldik7Ci0KLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAotCQkJICAgJnJ0MngwMGRldi0+bGluay53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfc3RvcF9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPmxpbmsud29yayk7Ci19Ci0KLS8qCiAgKiBSYWRpbyBjb250cm9sIGhhbmRsZXJzLgogICovCiBpbnQgcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTM3LDkgKzgzLDEwIEBACiAJCXJldHVybjsKIAogCS8qCi0JICogU3RvcCB0aGUgVFggcXVldWVzLgorCSAqIFN0b3AgdGhlIFRYIHF1ZXVlcyBpbiBtYWM4MDIxMS4KIAkgKi8KIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocnQyeDAwZGV2LT5odyk7CisJcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMocnQyeDAwZGV2KTsKIAogCS8qCiAJICogRGlzYWJsZSBSWC4KQEAgLTE2MSwyMzggKzEwOCwxNSBAQAogCSAqIFdoZW4gd2UgYXJlIGRpc2FibGluZyB0aGUgUlgsIHdlIHNob3VsZCBhbHNvIHN0b3AgdGhlIGxpbmsgdHVuZXIuCiAJICovCiAJaWYgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRikKLQkJcnQyeDAwbGliX3N0b3BfbGlua190dW5lcihydDJ4MDBkZXYpOworCQlydDJ4MDBsaW5rX3N0b3BfdHVuZXIocnQyeDAwZGV2KTsKIAogCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBzdGF0ZSk7CiAKIAkvKgogCSAqIFdoZW4gd2UgYXJlIGVuYWJsaW5nIHRoZSBSWCwgd2Ugc2hvdWxkIGFsc28gc3RhcnQgdGhlIGxpbmsgdHVuZXIuCiAJICovCi0JaWYgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09OICYmCi0JICAgIChydDJ4MDBkZXYtPmludGZfYXBfY291bnQgfHwgcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkpCi0JCXJ0MngwMGxpYl9zdGFydF9saW5rX3R1bmVyKHJ0MngwMGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hX3NhbXBsZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXN0cnVjdCBhbnRlbm5hX3NldHVwIGFudDsKLQlpbnQgc2FtcGxlX2EgPQotCSAgICBydDJ4MDBfZ2V0X2xpbmtfYW50X3Jzc2lfaGlzdG9yeSgmcnQyeDAwZGV2LT5saW5rLCBBTlRFTk5BX0EpOwotCWludCBzYW1wbGVfYiA9Ci0JICAgIHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaV9oaXN0b3J5KCZydDJ4MDBkZXYtPmxpbmssIEFOVEVOTkFfQik7Ci0KLQltZW1jcHkoJmFudCwgJnJ0MngwMGRldi0+bGluay5hbnQuYWN0aXZlLCBzaXplb2YoYW50KSk7Ci0KLQkvKgotCSAqIFdlIGFyZSBkb25lIHNhbXBsaW5nLiBOb3cgd2Ugc2hvdWxkIGV2YWx1YXRlIHRoZSByZXN1bHRzLgotCSAqLwotCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJj0gfkFOVEVOTkFfTU9ERV9TQU1QTEU7Ci0KLQkvKgotCSAqIER1cmluZyB0aGUgbGFzdCBwZXJpb2Qgd2UgaGF2ZSBzYW1wbGVkIHRoZSBSU1NJCi0JICogZnJvbSBib3RoIGFudGVubmEncy4gSXQgbm93IGlzIHRpbWUgdG8gZGV0ZXJtaW5lCi0JICogd2hpY2ggYW50ZW5uYSBkZW1vbnN0cmF0ZWQgdGhlIGJlc3QgcGVyZm9ybWFuY2UuCi0JICogV2hlbiB3ZSBhcmUgYWxyZWFkeSBvbiB0aGUgYW50ZW5uYSB3aXRoIHRoZSBiZXN0Ci0JICogcGVyZm9ybWFuY2UsIHRoZW4gdGhlcmUgcmVhbGx5IGlzIG5vdGhpbmcgZm9yIHVzCi0JICogbGVmdCB0byBkby4KLQkgKi8KLQlpZiAoc2FtcGxlX2EgPT0gc2FtcGxlX2IpCi0JCXJldHVybjsKLQotCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpCi0JCWFudC5yeCA9IChzYW1wbGVfYSA+IHNhbXBsZV9iKSA/IEFOVEVOTkFfQSA6IEFOVEVOTkFfQjsKLQotCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCi0JCWFudC50eCA9IChzYW1wbGVfYSA+IHNhbXBsZV9iKSA/IEFOVEVOTkFfQSA6IEFOVEVOTkFfQjsKLQotCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsICZhbnQpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYV9ldmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0Jc3RydWN0IGFudGVubmFfc2V0dXAgYW50OwotCWludCByc3NpX2N1cnIgPSBydDJ4MDBfZ2V0X2xpbmtfYW50X3Jzc2koJnJ0MngwMGRldi0+bGluayk7Ci0JaW50IHJzc2lfb2xkID0gcnQyeDAwX3VwZGF0ZV9hbnRfcnNzaSgmcnQyeDAwZGV2LT5saW5rLCByc3NpX2N1cnIpOwotCi0JbWVtY3B5KCZhbnQsICZydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZSwgc2l6ZW9mKGFudCkpOwotCi0JLyoKLQkgKiBMZWdhY3kgZHJpdmVyIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBzd2FwIGFudGVubmEncwotCSAqIHdoZW4gdGhlIGRpZmZlcmVuY2UgaW4gUlNTSSBpcyBncmVhdGVyIHRoYXQgNS4gVGhpcwotCSAqIGFsc28gc2hvdWxkIGJlIGRvbmUgd2hlbiB0aGUgUlNTSSB3YXMgYWN0dWFsbHkgYmV0dGVyCi0JICogdGhlbiB0aGUgcHJldmlvdXMgc2FtcGxlLgotCSAqIFdoZW4gdGhlIGRpZmZlcmVuY2UgZXhjZWVkcyB0aGUgdGhyZXNob2xkIHdlIHNob3VsZAotCSAqIHNhbXBsZSB0aGUgcnNzaSBmcm9tIHRoZSBvdGhlciBhbnRlbm5hIHRvIG1ha2UgYSB2YWxpZAotCSAqIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgMiBhbnRlbm5hcy4KLQkgKi8KLQlpZiAoYWJzKHJzc2lfY3VyciAtIHJzc2lfb2xkKSA8IDUpCi0JCXJldHVybjsKLQotCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgfD0gQU5URU5OQV9NT0RFX1NBTVBMRTsKLQotCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpCi0JCWFudC5yeCA9IChhbnQucnggPT0gQU5URU5OQV9BKSA/IEFOVEVOTkFfQiA6IEFOVEVOTkFfQTsKLQotCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCi0JCWFudC50eCA9IChhbnQudHggPT0gQU5URU5OQV9BKSA/IEFOVEVOTkFfQiA6IEFOVEVOTkFfQTsKLQotCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsICZhbnQpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCS8qCi0JICogRGV0ZXJtaW5lIGlmIHNvZnR3YXJlIGRpdmVyc2l0eSBpcyBlbmFibGVkIGZvcgotCSAqIGVpdGhlciB0aGUgVFggb3IgUlggYW50ZW5uYSAob3IgYm90aCkuCi0JICogQWx3YXlzIHBlcmZvcm0gdGhpcyBjaGVjayBzaW5jZSB3aXRoaW4gdGhlIGxpbmsKLQkgKiB0dW5lciBpbnRlcnZhbCB0aGUgY29uZmlndXJhdGlvbiBtaWdodCBoYXZlIGNoYW5nZWQuCi0JICovCi0JcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmPSB+QU5URU5OQV9SWF9ESVZFUlNJVFk7Ci0JcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmPSB+QU5URU5OQV9UWF9ESVZFUlNJVFk7Ci0KLQlpZiAocnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKLQkJcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyB8PSBBTlRFTk5BX1JYX0RJVkVSU0lUWTsKLQlpZiAocnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKLQkJcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyB8PSBBTlRFTk5BX1RYX0RJVkVSU0lUWTsKLQotCWlmICghKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkgJiYKLQkgICAgIShydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpKSB7Ci0JCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBJZiB3ZSBoYXZlIG9ubHkgc2FtcGxlZCB0aGUgZGF0YSBvdmVyIHRoZSBsYXN0IHBlcmlvZAotCSAqIHdlIHNob3VsZCBub3cgaGFydmVzdCB0aGUgZGF0YS4gT3RoZXJ3aXNlIGp1c3QgZXZhbHVhdGUKLQkgKiB0aGUgZGF0YS4gVGhlIGxhdHRlciBzaG91bGQgb25seSBiZSBwZXJmb3JtZWQgb25jZQotCSAqIGV2ZXJ5IDIgc2Vjb25kcy4KLQkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfTU9ERV9TQU1QTEUpCi0JCXJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hX3NhbXBsZShydDJ4MDBkZXYpOwotCWVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5jb3VudCAmIDEpCi0JCXJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hX2V2YWwocnQyeDAwZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX3VwZGF0ZV9saW5rX3N0YXRzKHN0cnVjdCBsaW5rICpsaW5rLCBpbnQgcnNzaSkKLXsKLQlpbnQgYXZnX3Jzc2kgPSByc3NpOwotCi0JLyoKLQkgKiBVcGRhdGUgZ2xvYmFsIFJTU0kKLQkgKi8KLQlpZiAobGluay0+cXVhbC5hdmdfcnNzaSkKLQkJYXZnX3Jzc2kgPSBNT1ZJTkdfQVZFUkFHRShsaW5rLT5xdWFsLmF2Z19yc3NpLCByc3NpLCA4KTsKLQlsaW5rLT5xdWFsLmF2Z19yc3NpID0gYXZnX3Jzc2k7Ci0KLQkvKgotCSAqIFVwZGF0ZSBhbnRlbm5hIFJTU0kKLQkgKi8KLQlpZiAobGluay0+YW50LnJzc2lfYW50KQotCQlyc3NpID0gTU9WSU5HX0FWRVJBR0UobGluay0+YW50LnJzc2lfYW50LCByc3NpLCA4KTsKLQlsaW5rLT5hbnQucnNzaV9hbnQgPSByc3NpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfcHJlY2FsY3VsYXRlX2xpbmtfc2lnbmFsKHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCi17Ci0JaWYgKHF1YWwtPnJ4X2ZhaWxlZCB8fCBxdWFsLT5yeF9zdWNjZXNzKQotCQlxdWFsLT5yeF9wZXJjZW50YWdlID0KLQkJICAgIChxdWFsLT5yeF9zdWNjZXNzICogMTAwKSAvCi0JCSAgICAocXVhbC0+cnhfZmFpbGVkICsgcXVhbC0+cnhfc3VjY2Vzcyk7Ci0JZWxzZQotCQlxdWFsLT5yeF9wZXJjZW50YWdlID0gNTA7Ci0KLQlpZiAocXVhbC0+dHhfZmFpbGVkIHx8IHF1YWwtPnR4X3N1Y2Nlc3MpCi0JCXF1YWwtPnR4X3BlcmNlbnRhZ2UgPQotCQkgICAgKHF1YWwtPnR4X3N1Y2Nlc3MgKiAxMDApIC8KLQkJICAgIChxdWFsLT50eF9mYWlsZWQgKyBxdWFsLT50eF9zdWNjZXNzKTsKLQllbHNlCi0JCXF1YWwtPnR4X3BlcmNlbnRhZ2UgPSA1MDsKLQotCXF1YWwtPnJ4X3N1Y2Nlc3MgPSAwOwotCXF1YWwtPnJ4X2ZhaWxlZCA9IDA7Ci0JcXVhbC0+dHhfc3VjY2VzcyA9IDA7Ci0JcXVhbC0+dHhfZmFpbGVkID0gMDsKLX0KLQotc3RhdGljIGludCBydDJ4MDBsaWJfY2FsY3VsYXRlX2xpbmtfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJCSAgIGludCByc3NpKQotewotCWludCByc3NpX3BlcmNlbnRhZ2UgPSAwOwotCWludCBzaWduYWw7Ci0KLQkvKgotCSAqIFdlIG5lZWQgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgdGhlIFJTU0kuCi0JICovCi0JaWYgKHJzc2kgPCAwKQotCQlyc3NpICs9IHJ0MngwMGRldi0+cnNzaV9vZmZzZXQ7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgZGlmZmVyZW50IHBlcmNlbnRhZ2VzLAotCSAqIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNpZ25hbC4KLQkgKi8KLQlpZiAocnQyeDAwZGV2LT5yc3NpX29mZnNldCkKLQkJcnNzaV9wZXJjZW50YWdlID0gKHJzc2kgKiAxMDApIC8gcnQyeDAwZGV2LT5yc3NpX29mZnNldDsKLQotCS8qCi0JICogQWRkIHRoZSBpbmRpdmlkdWFsIHBlcmNlbnRhZ2VzIGFuZCB1c2UgdGhlIFdFSUdIVAotCSAqIGRlZmluZXMgdG8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGxpbmsgc2lnbmFsLgotCSAqLwotCXNpZ25hbCA9ICgoV0VJR0hUX1JTU0kgKiByc3NpX3BlcmNlbnRhZ2UpICsKLQkJICAoV0VJR0hUX1RYICogcnQyeDAwZGV2LT5saW5rLnF1YWwudHhfcGVyY2VudGFnZSkgKwotCQkgIChXRUlHSFRfUlggKiBydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9wZXJjZW50YWdlKSkgLyAxMDA7Ci0KLQlyZXR1cm4gKHNpZ25hbCA+IDEwMCkgPyAxMDAgOiBzaWduYWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9saW5rX3R1bmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KLQkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydDJ4MDBfZGV2LCBsaW5rLndvcmsud29yayk7Ci0KLQkvKgotCSAqIFdoZW4gdGhlIHJhZGlvIGlzIHNodXR0aW5nIGRvd24gd2Ugc2hvdWxkCi0JICogaW1tZWRpYXRlbHkgY2Vhc2UgYWxsIGxpbmsgdHVuaW5nLgotCSAqLwotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBVcGRhdGUgc3RhdGlzdGljcy4KLQkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5saW5rX3N0YXRzKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGluay5xdWFsKTsKLQlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQgKz0KLQkgICAgcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfZmFpbGVkOwotCi0JLyoKLQkgKiBPbmx5IHBlcmZvcm0gdGhlIGxpbmsgdHVuaW5nIHdoZW4gTGluayB0dW5pbmcKLQkgKiBoYXMgYmVlbiBlbmFibGVkIChUaGlzIGNvdWxkIGhhdmUgYmVlbiBkaXNhYmxlZCBmcm9tIHRoZSBFRVBST00pLgotCSAqLwotCWlmICghdGVzdF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua190dW5lcihydDJ4MDBkZXYpOwotCi0JLyoKLQkgKiBQcmVjYWxjdWxhdGUgYSBwb3J0aW9uIG9mIHRoZSBsaW5rIHNpZ25hbCB3aGljaCBpcwotCSAqIGluIGJhc2VkIG9uIHRoZSB0eC9yeCBzdWNjZXNzL2ZhaWx1cmUgY291bnRlcnMuCi0JICovCi0JcnQyeDAwbGliX3ByZWNhbGN1bGF0ZV9saW5rX3NpZ25hbCgmcnQyeDAwZGV2LT5saW5rLnF1YWwpOwotCi0JLyoKLQkgKiBTZW5kIGEgc2lnbmFsIHRvIHRoZSBsZWQgdG8gdXBkYXRlIHRoZSBsZWQgc2lnbmFsIHN0cmVuZ3RoLgotCSAqLwotCXJ0MngwMGxlZHNfbGVkX3F1YWxpdHkocnQyeDAwZGV2LCBydDJ4MDBkZXYtPmxpbmsucXVhbC5hdmdfcnNzaSk7Ci0KLQkvKgotCSAqIEV2YWx1YXRlIGFudGVubmEgc2V0dXAsIG1ha2UgdGhpcyB0aGUgbGFzdCBzdGVwIHNpbmNlIHRoaXMgY291bGQKLQkgKiBwb3NzaWJseSByZXNldCBzb21lIHN0YXRpc3RpY3MuCi0JICovCi0JcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmEocnQyeDAwZGV2KTsKLQotCS8qCi0JICogSW5jcmVhc2UgdHVuZXIgY291bnRlciwgYW5kIHJlc2NoZWR1bGUgdGhlIG5leHQgbGluayB0dW5lciBydW4uCi0JICovCi0JcnQyeDAwZGV2LT5saW5rLmNvdW50Kys7Ci0JcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKLQkJCSAgICZydDJ4MDBkZXYtPmxpbmsud29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKKwlpZiAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT04pCisJCXJ0MngwMGxpbmtfc3RhcnRfdHVuZXIocnQyeDAwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwbGliX3BhY2tldGZpbHRlcl9zY2hlZHVsZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNDM0LDcgKzE1OCw3IEBACiAJCXJldHVybjsKIAogCWlmIChkZWxheWVkX2ZsYWdzICYgREVMQVlFRF9VUERBVEVfQkVBQ09OKQotCQlydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmKTsKKwkJcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZiwgdHJ1ZSk7CiAKIAlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfQ09ORklHX0VSUCkKIAkJcnQyeDAwbGliX2NvbmZpZ19lcnAocnQyeDAwZGV2LCBpbnRmLCAmY29uZik7CkBAIC00NjcsNyArMTkxLDkgQEAKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwogCiAJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgotCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtNDkwLDcgKzIxNiw3IEBACiAJCQkJCQkgICBydDJ4MDBsaWJfYmVhY29uZG9uZV9pdGVyLAogCQkJCQkJICAgcnQyeDAwZGV2KTsKIAotCXNjaGVkdWxlX3dvcmsoJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKKwlxdWV1ZV93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl9iZWFjb25kb25lKTsKIApAQCAtNTk3LDcgKzMyMyw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gJnJ0MngwMGRldi0+cnhfc3RhdHVzOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpyYXRlOwogCXVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoOwogCXVuc2lnbmVkIGludCBhbGlnbjsKQEAgLTY2OCwzMCArMzkzLDIyIEBACiAKIAlpZiAoaWR4IDwgMCkgewogCQlXQVJOSU5HKHJ0MngwMGRldiwgIkZyYW1lIHJlY2VpdmVkIHdpdGggdW5yZWNvZ25pemVkIHNpZ25hbCwiCi0JCQkic2lnbmFsPTB4JS4yeCwgcGxjcD0lZC5cbiIsIHJ4ZGVzYy5zaWduYWwsCi0JCQkhIShyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX1NJR05BTF9QTENQKSk7CisJCQkic2lnbmFsPTB4JS4yeCwgdHlwZT0lZC5cbiIsIHJ4ZGVzYy5zaWduYWwsCisJCQkocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9TSUdOQUxfTUFTSykpOwogCQlpZHggPSAwOwogCX0KIAogCS8qCi0JICogT25seSB1cGRhdGUgbGluayBzdGF0dXMgaWYgdGhpcyBpcyBhIGJlYWNvbiBmcmFtZSBjYXJyeWluZyBvdXIgYnNzaWQuCisJICogVXBkYXRlIGV4dHJhIGNvbXBvbmVudHMKIAkgKi8KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKillbnRyeS0+c2tiLT5kYXRhOwotCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKLQkgICAgKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfTVlfQlNTKSkKLQkJcnQyeDAwbGliX3VwZGF0ZV9saW5rX3N0YXRzKCZydDJ4MDBkZXYtPmxpbmssIHJ4ZGVzYy5yc3NpKTsKLQotCXJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8ocnQyeDAwZGV2LAotCQkJCSAgcnhkZXNjLmNpcGhlciwKLQkJCQkgIHJ4ZGVzYy5jaXBoZXJfc3RhdHVzKTsKLQotCXJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3N1Y2Nlc3MrKzsKKwlydDJ4MDBsaW5rX3VwZGF0ZV9zdGF0cyhydDJ4MDBkZXYsIGVudHJ5LT5za2IsICZyeGRlc2MpOworCXJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8ocnQyeDAwZGV2LCAmcnhkZXNjKTsKIAogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IHJ4ZGVzYy50aW1lc3RhbXA7CiAJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IGlkeDsKLQlyeF9zdGF0dXMtPnF1YWwgPQotCSAgICBydDJ4MDBsaWJfY2FsY3VsYXRlX2xpbmtfc2lnbmFsKHJ0MngwMGRldiwgcnhkZXNjLnJzc2kpOworCXJ4X3N0YXR1cy0+cXVhbCA9IHJ0MngwMGxpbmtfY2FsY3VsYXRlX3NpZ25hbChydDJ4MDBkZXYsIHJ4ZGVzYy5yc3NpKTsKIAlyeF9zdGF0dXMtPnNpZ25hbCA9IHJ4ZGVzYy5yc3NpOworCXJ4X3N0YXR1cy0+bm9pc2UgPSByeGRlc2Mubm9pc2U7CiAJcnhfc3RhdHVzLT5mbGFnID0gcnhkZXNjLmZsYWdzOwogCXJ4X3N0YXR1cy0+YW50ZW5uYSA9IHJ0MngwMGRldi0+bGluay5hbnQuYWN0aXZlLnJ4OwogCkBAIC0xMDY3LDcgKzc4NCw5IEBACiAJaWYgKHJ0MngwMGRldi0+b3BzLT5iY24tPmVudHJ5X251bSA+IDApCiAJCXJ0MngwMGRldi0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0KIAkJICAgIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfAotCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKTsKKwkJICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAorCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKKwkJICAgIEJJVChOTDgwMjExX0lGVFlQRV9XRFMpOwogCiAJLyoKIAkgKiBMZXQgdGhlIGRyaXZlciBwcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVjdCB0aGUgY2FwYWJpbGl0aWVzLgpAQCAtMTA4Myw3ICs4MDIsNiBAQAogCSAqLwogCUlOSVRfV09SSygmcnQyeDAwZGV2LT5pbnRmX3dvcmssIHJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZCk7CiAJSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmZpbHRlcl93b3JrLCBydDJ4MDBsaWJfcGFja2V0ZmlsdGVyX3NjaGVkdWxlZCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnJ0MngwMGRldi0+bGluay53b3JrLCBydDJ4MDBsaWJfbGlua190dW5lcik7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHF1ZXVlIGFycmF5LgpAQCAtMTEwNCw2ICs4MjIsNyBAQAogCS8qCiAJICogUmVnaXN0ZXIgZXh0cmEgY29tcG9uZW50cy4KIAkgKi8KKwlydDJ4MDBsaW5rX3JlZ2lzdGVyKHJ0MngwMGRldik7CiAJcnQyeDAwbGVkc19yZWdpc3RlcihydDJ4MDBkZXYpOwogCXJ0MngwMHJma2lsbF9hbGxvY2F0ZShydDJ4MDBkZXYpOwogCXJ0MngwMGRlYnVnX3JlZ2lzdGVyKHJ0MngwMGRldik7CkBAIC0xMTYzLDIzICs4ODIsMTcgQEAKICNpZmRlZiBDT05GSUdfUE0KIGludCBydDJ4MDBsaWJfc3VzcGVuZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JaW50IHJldHZhbDsKLQogCU5PVElDRShydDJ4MDBkZXYsICJHb2luZyB0byBzbGVlcC5cbiIpOwogCiAJLyoKLQkgKiBPbmx5IGNvbnRpbnVlIGlmIG1hYzgwMjExIGhhcyBvcGVuIGludGVyZmFjZXMuCisJICogUHJldmVudCBtYWM4MDIxMSBmcm9tIGFjY2Vzc2luZyBkcml2ZXIgd2hpbGUgc3VzcGVuZGVkLgogCSAqLwotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykgfHwKLQkgICAgIXRlc3RfYml0KERFVklDRV9TVEFURV9TVEFSVEVELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCWdvdG8gZXhpdDsKLQotCXNldF9iaXQoREVWSUNFX1NUQVRFX1NUQVJURURfU1VTUEVORCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiAwOwogCiAJLyoKLQkgKiBEaXNhYmxlIHJhZGlvLgorCSAqIENsZWFudXAgYXMgbXVjaCBhcyBwb3NzaWJsZS4KIAkgKi8KLQlydDJ4MDBsaWJfc3RvcChydDJ4MDBkZXYpOwogCXJ0MngwMGxpYl91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKIAogCS8qCkBAIC0xMTg4LDcgKzkwMSw2IEBACiAJcnQyeDAwbGVkc19zdXNwZW5kKHJ0MngwMGRldik7CiAJcnQyeDAwZGVidWdfZGVyZWdpc3RlcihydDJ4MDBkZXYpOwogCi1leGl0OgogCS8qCiAJICogU2V0IGRldmljZSBtb2RlIHRvIHNsZWVwIGZvciBwb3dlciBtYW5hZ2VtZW50LAogCSAqIG9uIHNvbWUgaGFyZHdhcmUgdGhpcyBjYWxsIHNlZW1zIHRvIGNvbnNpc3RlbnRseSBmYWlsLgpAQCAtMTIwMCw4ICs5MTIsNyBAQAogCSAqIHRoZSByYWRpbyBhbmQgdGhlIG90aGVyIGNvbXBvbmVudHMgYWxyZWFkeSBkaXNhYmxlZCB0aGUKIAkgKiBkZXZpY2UgaXMgYXMgZ29vZCBhcyBkaXNhYmxlZC4KIAkgKi8KLQlyZXR2YWwgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfU0xFRVApOwotCWlmIChyZXR2YWwpCisJaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBTVEFURV9TTEVFUCkpCiAJCVdBUk5JTkcocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byBlbnRlciBzbGVlcCBzdGF0ZSwgIgogCQkJImNvbnRpbnVlIHN1c3BlbmRpbmcuXG4iKTsKIApAQCAtMTIwOSwzMiArOTIwLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl9zdXNwZW5kKTsKIAotc3RhdGljIHZvaWQgcnQyeDAwbGliX3Jlc3VtZV9pbnRmKHZvaWQgKmRhdGEsIHU4ICptYWMsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOwotCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7Ci0KLQlzcGluX2xvY2soJmludGYtPmxvY2spOwotCi0JcnQyeDAwbGliX2NvbmZpZ19pbnRmKHJ0MngwMGRldiwgaW50ZiwKLQkJCSAgICAgIHZpZi0+dHlwZSwgaW50Zi0+bWFjLCBpbnRmLT5ic3NpZCk7Ci0KLQotCS8qCi0JICogTWFzdGVyIG9yIEFkLWhvYyBtb2RlIHJlcXVpcmUgYSBuZXcgYmVhY29uIHVwZGF0ZS4KLQkgKi8KLQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJaW50Zi0+ZGVsYXllZF9mbGFncyB8PSBERUxBWUVEX1VQREFURV9CRUFDT047Ci0KLQlzcGluX3VubG9jaygmaW50Zi0+bG9jayk7Ci19Ci0KIGludCBydDJ4MDBsaWJfcmVzdW1lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JaW50IHJldHZhbDsKLQogCU5PVElDRShydDJ4MDBkZXYsICJXYWtpbmcgdXAuXG4iKTsKIAogCS8qCkBAIC0xMjQ0LDYwICs5MzEsMTEgQEAKIAlydDJ4MDBsZWRzX3Jlc3VtZShydDJ4MDBkZXYpOwogCiAJLyoKLQkgKiBPbmx5IGNvbnRpbnVlIGlmIG1hYzgwMjExIGhhZCBvcGVuIGludGVyZmFjZXMuCi0JICovCi0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoREVWSUNFX1NUQVRFX1NUQVJURURfU1VTUEVORCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogUmVpbml0aWFsaXplIGRldmljZSBhbmQgYWxsIGFjdGl2ZSBpbnRlcmZhY2VzLgotCSAqLwotCXJldHZhbCA9IHJ0MngwMGxpYl9zdGFydChydDJ4MDBkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCS8qCi0JICogUmVjb25maWd1cmUgZGV2aWNlLgotCSAqLwotCXJldHZhbCA9IHJ0MngwMG1hY19jb25maWcocnQyeDAwZGV2LT5odywgfjApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCS8qCi0JICogSXRlcmF0b3Igb3ZlciBlYWNoIGFjdGl2ZSBpbnRlcmZhY2UgdG8KLQkgKiByZWNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUuCi0JICovCi0JaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMocnQyeDAwZGV2LT5odywKLQkJCQkJICAgIHJ0MngwMGxpYl9yZXN1bWVfaW50ZiwgcnQyeDAwZGV2KTsKLQotCS8qCiAJICogV2UgYXJlIHJlYWR5IGFnYWluIHRvIHJlY2VpdmUgcmVxdWVzdHMgZnJvbSBtYWM4MDIxMS4KIAkgKi8KIAlzZXRfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKLQkvKgotCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgZHVyaW5nIHRoYXQgbWFjODAyMTEgaGFzIGF0dGVtcHRlZAotCSAqIHRvIHNlbmQgZnJhbWVzIHdoaWxlIHdlIHdlcmUgc3VzcGVuZGluZyBvciByZXN1bWluZy4KLQkgKiBJbiB0aGF0IGNhc2Ugd2UgaGF2ZSBkaXNhYmxlZCB0aGUgVFggcXVldWUgYW5kIHNob3VsZAotCSAqIG5vdyBlbmFibGUgaXQgYWdhaW4KLQkgKi8KLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocnQyeDAwZGV2LT5odyk7Ci0KLQkvKgotCSAqIER1cmluZyBpbnRlcmZhY2UgaXRlcmF0aW9uIHdlIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUKLQkgKiBkZWxheWVkX2ZsYWdzLCB0aW1lIHRvIGhhbmRsZXMgdGhlIGV2ZW50IGJ5IGNhbGxpbmcKLQkgKiB0aGUgd29yayBoYW5kbGVyIGRpcmVjdGx5LgotCSAqLwotCXJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZCgmcnQyeDAwZGV2LT5pbnRmX3dvcmspOwotCiAJcmV0dXJuIDA7Ci0KLWV4aXQ6Ci0JcnQyeDAwbGliX3N0b3AocnQyeDAwZGV2KTsKLQlydDJ4MDBsaWJfdW5pbml0aWFsaXplKHJ0MngwMGRldik7Ci0JcnQyeDAwZGVidWdfZGVyZWdpc3RlcihydDJ4MDBkZXYpOwotCi0JcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl9yZXN1bWUpOwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKaW5kZXggNzE2OWMyMi4uZmRlZGI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYwppbmRleCBiYWIwNWE1Li5kMmRlZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTM1LDcgKzM1LDYgQEAKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWNoYXIgKmZ3X25hbWU7CiAJaW50IHJldHZhbDsKLQl1MTYgY3JjOwogCiAJLyoKIAkgKiBSZWFkIGNvcnJlY3QgZmlybXdhcmUgZnJvbSBoYXJkZGlzay4KQEAgLTYxLDE2ICs2MCwyNiBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljcmMgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5nZXRfZmlybXdhcmVfY3JjKGZ3LT5kYXRhLCBmdy0+c2l6ZSk7Ci0JaWYgKGNyYyAhPSAoZnctPmRhdGFbZnctPnNpemUgLSAyXSA8PCA4IHwgZnctPmRhdGFbZnctPnNpemUgLSAxXSkpIHsKLQkJRVJST1IocnQyeDAwZGV2LCAiRmlybXdhcmUgY2hlY2tzdW0gZXJyb3IuXG4iKTsKLQkJcmV0dmFsID0gLUVOT0VOVDsKLQkJZ290byBleGl0OwotCX0KLQogCUlORk8ocnQyeDAwZGV2LCAiRmlybXdhcmUgZGV0ZWN0ZWQgLSB2ZXJzaW9uOiAlZC4lZC5cbiIsCiAJICAgICBmdy0+ZGF0YVtmdy0+c2l6ZSAtIDRdLCBmdy0+ZGF0YVtmdy0+c2l6ZSAtIDNdKTsKIAorCXJldHZhbCA9IHJ0MngwMGRldi0+b3BzLT5saWItPmNoZWNrX2Zpcm13YXJlKHJ0MngwMGRldiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwlzd2l0Y2ggKHJldHZhbCkgeworCWNhc2UgRldfT0s6CisJCWJyZWFrOworCWNhc2UgRldfQkFEX0NSQzoKKwkJRVJST1IocnQyeDAwZGV2LCAiRmlybXdhcmUgY2hlY2tzdW0gZXJyb3IuXG4iKTsKKwkJZ290byBleGl0OworCWNhc2UgRldfQkFEX0xFTkdUSDoKKwkJRVJST1IocnQyeDAwZGV2LAorCQkgICAgICAiSW52YWxpZCBmaXJtd2FyZSBmaWxlIGxlbmd0aCAobGVuPSV6dSlcbiIsIGZ3LT5zaXplKTsKKwkJZ290byBleGl0OworCWNhc2UgRldfQkFEX1ZFUlNJT046CisJCUVSUk9SKHJ0MngwMGRldiwKKwkJICAgICAgIkN1cnJlbnQgZmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBkZXRlY3RlZCBjaGlwc2V0LlxuIik7CisJCWdvdG8gZXhpdDsKKwl9OworCiAJcnQyeDAwZGV2LT5mdyA9IGZ3OwogCiAJcmV0dXJuIDA7CkBAIC03OCw3ICs4Nyw3IEBACiBleGl0OgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gLUVOT0VOVDsKIH0KIAogaW50IHJ0MngwMGxpYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYwppbmRleCBhMGNkMzViLi40OTY3MWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJIHJ0MngwMGRldi0+b3BzLT5uYW1lLCB3aXBoeV9uYW1lKHJ0MngwMGRldi0+aHctPndpcGh5KSk7CiAKIAlpZiAocnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgJiBMRURfSU5JVElBTElaRUQpIHsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6cmFkaW8iLCBkZXZfbmFtZSk7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOjpyYWRpbyIsIGRldl9uYW1lKTsKIAogCQlyZXR2YWwgPSBydDJ4MDBsZWRzX3JlZ2lzdGVyX2xlZChydDJ4MDBkZXYsCiAJCQkJCQkgJnJ0MngwMGRldi0+bGVkX3JhZGlvLApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJfQogCiAJaWYgKHJ0MngwMGRldi0+bGVkX2Fzc29jLmZsYWdzICYgTEVEX0lOSVRJQUxJWkVEKSB7Ci0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOmFzc29jIiwgZGV2X25hbWUpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczo6YXNzb2MiLCBkZXZfbmFtZSk7CiAKIAkJcmV0dmFsID0gcnQyeDAwbGVkc19yZWdpc3Rlcl9sZWQocnQyeDAwZGV2LAogCQkJCQkJICZydDJ4MDBkZXYtPmxlZF9hc3NvYywKQEAgLTE1NCw3ICsxNTQsNyBAQAogCX0KIAogCWlmIChydDJ4MDBkZXYtPmxlZF9xdWFsLmZsYWdzICYgTEVEX0lOSVRJQUxJWkVEKSB7Ci0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOnF1YWxpdHkiLCBkZXZfbmFtZSk7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOjpxdWFsaXR5IiwgZGV2X25hbWUpOwogCiAJCXJldHZhbCA9IHJ0MngwMGxlZHNfcmVnaXN0ZXJfbGVkKHJ0MngwMGRldiwKIAkJCQkJCSAmcnQyeDAwZGV2LT5sZWRfcXVhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oCmluZGV4IDlkZjRhNDliZC4uMTA0Njk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCmluZGV4IDg2Y2QyNmYuLmE2MzE2MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMyw3ICszMyw3IEBACiAgKiBCb3RoIHRoZSBsaW5rIHR1bmVyIGFzIHRoZSByZmtpbGwgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIgc2Vjb25kLgogICovCiAjZGVmaW5lIExJTktfVFVORV9JTlRFUlZBTAkoIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopICkKLSNkZWZpbmUgUkZLSUxMX1BPTExfSU5URVJWQUwJKCByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKSApCisjZGVmaW5lIFJGS0lMTF9QT0xMX0lOVEVSVkFMCSggMTAwMCApCiAKIC8qCiAgKiBydDJ4MDBfcmF0ZTogUGVyIHJhdGUgZGV2aWNlIGluZm9ybWF0aW9uCkBAIC02Myw3ICs2Myw2IEBACiBpbnQgcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwbGliX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMGxpYl90b2dnbGVfcngoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgZW51bSBkZXZfc3RhdGUgc3RhdGUpOwotdm9pZCBydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAogLyoKICAqIEluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgpAQCAtNzcsNyArNzYsNyBAQAogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKIAkJCSAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwKLQkJCSAgIHU4ICptYWMsIHU4ICpic3NpZCk7CisJCQkgICBjb25zdCB1OCAqbWFjLCBjb25zdCB1OCAqYnNzaWQpOwogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2VycChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYpOwpAQCAtMTI0LDkgKzEyMywxMSBAQAogICogcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbiAtIFNlbmQgbmV3IGJlYWNvbiBmcm9tIG1hYzgwMjExIHRvIGhhcmR3YXJlCiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KICAqIEB2aWY6IEludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGJlYWNvbiBzaG91bGQgYmUgdXBkYXRlZC4KKyAqIEBlbmFibGVfYmVhY29uOiBFbmFibGUgYmVhY29uaW5nCiAgKi8KIGludCBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBjb25zdCBib29sIGVuYWJsZV9iZWFjb24pOwogCiAvKioKICAqIHJ0MngwMHF1ZXVlX2luZGV4X2luYyAtIEluZGV4IGluY3JlbWVudGF0aW9uIGZ1bmN0aW9uCkBAIC0xNDAsNiArMTQxLDE1IEBACiB2b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOwogCiAvKioKKyAqIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzIC0gSGFsdCBhbGwgZGF0YSBxdWV1ZXMKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBsb29wIHRocm91Z2ggYWxsIGF2YWlsYWJsZSBxdWV1ZXMgdG8gc3RvcAorICogYW55IHBlbmRpbmcgb3V0Z29pbmcgZnJhbWVzLgorICovCit2b2lkIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKICAqIHJ0MngwMHF1ZXVlX2luaXRfcXVldWVzIC0gSW5pdGlhbGl6ZSBhbGwgZGF0YSBxdWV1ZXMKICAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgogICoKQEAgLTE1NCw2ICsxNjQsODEgQEAKIGludCBydDJ4MDBxdWV1ZV9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwcXVldWVfZnJlZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAorLyoqCisgKiBydDJ4MDBsaW5rX3VwZGF0ZV9zdGF0cyAtIFVwZGF0ZSBsaW5rIHN0YXRpc3RpY3MgZnJvbSBSWCBmcmFtZQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAc2tiOiBSZWNlaXZlZCBmcmFtZQorICogQHJ4ZGVzYzogUmVjZWl2ZWQgZnJhbWUgZGVzY3JpcHRvcgorICoKKyAqIFVwZGF0ZSBsaW5rIHN0YXRpc3RpY3MgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlCisgKiByZWNlaXZlZCBmcmFtZSBkZXNjcmlwdG9yLgorICovCit2b2lkIHJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKTsKKworLyoqCisgKiBydDJ4MDBsaW5rX2NhbGN1bGF0ZV9zaWduYWwgLSBDYWxjdWxhdGUgc2lnbmFsIHF1YWxpdHkKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQHJzc2k6IFJYIEZyYW1lIFJTU0kKKyAqCisgKiBDYWxjdWxhdGUgdGhlIHNpZ25hbCBxdWFsaXR5IG9mIGEgZnJhbWUgYmFzZWQgb24gdGhlIHJzc2kKKyAqIG1lYXN1cmVkIGR1cmluZyB0aGUgcmVjZWl2aW5nIG9mIHRoZSBmcmFtZSBhbmQgdGhlIGdsb2JhbAorICogbGluayBxdWFsaXR5IHN0YXRpc3RpY3MgbWVhc3VyZWQgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZQorICogbGluayB0dW5pbmcuIFRoZSByZXN1bHQgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMCB3aGljaAorICogaXMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgc2lnbmFsIHF1YWxpdHkuCisgKi8KK2ludCBydDJ4MDBsaW5rX2NhbGN1bGF0ZV9zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgaW50IHJzc2kpOworCisvKioKKyAqIHJ0MngwMGxpbmtfc3RhcnRfdHVuZXIgLSBTdGFydCBwZXJpb2RpYyBsaW5rIHR1bmVyIHdvcmsKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIFRoaXMgc3RhcnQgdGhlIGxpbmsgdHVuZXIgcGVyaW9kaWMgd29yaywgdGhpcyB3b3JrIHdpbGwKKyAqIGJlIGV4ZWN1dGVkIHBlcmlvZGljYWxseSB1bnRpbCAmcnQyeDAwbGlua19zdG9wX3R1bmVyIGhhcworICogYmVlbiBjYWxsZWQuCisgKi8KK3ZvaWQgcnQyeDAwbGlua19zdGFydF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKworLyoqCisgKiBydDJ4MDBsaW5rX3N0b3BfdHVuZXIgLSBTdG9wIHBlcmlvZGljIGxpbmsgdHVuZXIgd29yaworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBjb21wbGV0ZWQgdGhlIGxpbmsgdHVuZXIgd2lsbCBub3QKKyAqIGJlIHJ1bm5pbmcgdW50aWwgJnJ0MngwMGxpbmtfc3RhcnRfdHVuZXIgaXMgY2FsbGVkLgorICovCit2b2lkIHJ0MngwMGxpbmtfc3RvcF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKworLyoqCisgKiBydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyIC0gUmVzZXQgcGVyaW9kaWMgbGluayB0dW5lciB3b3JrCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEBhbnRlbm5hOiBTaG91bGQgdGhlIGFudGVubmEgdHVuaW5nIGFsc28gYmUgcmVzZXQKKyAqCisgKiBUaGUgVkdDIGxpbWl0IGNvbmZpZ3VyZWQgaW4gdGhlIGhhcmR3YXJlIHdpbGwgYmUgcmVzZXQgdG8gMAorICogd2hpY2ggZm9yY2VzIHRoZSBkcml2ZXIgdG8gcmVkaXNjb3ZlciB0aGUgY29ycmVjdCB2YWx1ZSBmb3IKKyAqIHRoZSBjdXJyZW50IGFzc29jaWF0aW9uLiBUaGlzIGlzIG5lZWRlZCB3aGVuIGNvbmZpZ3VyYXRpb24KKyAqIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkIHdoaWNoIGNvdWxkIGRyYXN0aWNhbGx5IGNoYW5nZSB0aGUKKyAqIFNOUiBsZXZlbCBvciBsaW5rIHF1YWxpdHkgKGkuZS4gY2hhbmdpbmcgdGhlIGFudGVubmEgc2V0dGluZykuCisgKgorICogUmVzZXR0aW5nIHRoZSBsaW5rIHR1bmVyIHdpbGwgYWxzbyBjYXVzZSB0aGUgcGVyaW9kaWMgd29yayBjb3VudGVyCisgKiB0byBiZSByZXNldC4gQW55IGRyaXZlciB3aGljaCBoYXMgYSBmaXhlZCBsaW1pdCBvbiB0aGUgbnVtYmVyCisgKiBvZiByb3VuZHMgdGhlIGxpbmsgdHVuZXIgaXMgc3VwcG9zZWQgdG8gd29yayB3aWxsIGFjY2VwdCB0aGUKKyAqIHR1bmVyIGFjdGlvbnMgYWdhaW4gaWYgdGhpcyBsaW1pdCB3YXMgcHJldmlvdXNseSByZWFjaGVkLgorICoKKyAqIElmIEBhbnRlbm5hIGlzIHNldCB0byB0cnVlIGEgdGhlIHNvZnR3YXJlIGFudGVubmEgZGl2ZXJzaXR5CisgKiB0dW5pbmcgd2lsbCBhbHNvIGJlIHJlc2V0LgorICovCit2b2lkIHJ0MngwMGxpbmtfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgYm9vbCBhbnRlbm5hKTsKKworLyoqCisgKiBydDJ4MDBsaW5rX3JlZ2lzdGVyIC0gSW5pdGlhbGl6ZSBsaW5rIHR1bmluZyBmdW5jdGlvbmFsaXR5CisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBJbml0aWFsaXplIHdvcmsgc3RydWN0dXJlIGFuZCBhbGwgbGluayB0dW5pbmcgcmVsYXRlZAorICogcGFyYW10ZXJzLiBUaGlzIHdpbGwgbm90IHN0YXJ0IHRoZSBsaW5rIHR1bmluZyBwcm9jZXNzIGl0c2VsZi4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCiAvKgogICogRmlybXdhcmUgaGFuZGxlcnMuCiAgKi8KQEAgLTE3OSw3ICsyNjQsNyBAQAogdm9pZCBydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgZW51bSBydDJ4MDBfZHVtcF90eXBlIHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICAgZW51bSBjaXBoZXIgY2lwaGVyLCBlbnVtIHJ4X2NyeXB0byBzdGF0dXMpOworCQkJICAgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwZGVidWdfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKQEAgLTE5Niw4ICsyODEsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCQkgICAgIGVudW0gY2lwaGVyIGNpcGhlciwKLQkJCQkJICAgICBlbnVtIHJ4X2NyeXB0byBzdGF0dXMpCisJCQkJCSAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUyAqLwpAQCAtMjA5LDcgKzI5Myw4IEBACiBlbnVtIGNpcGhlciBydDJ4MDBjcnlwdG9fa2V5X3RvX2NpcGhlcihzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogdm9pZCBydDJ4MDBjcnlwdG9fY3JlYXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkgICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKTsKLXVuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKTsKK3Vuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgcnQyeDAwY3J5cHRvX3R4X2NvcHlfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGl2X2xlbik7CiB2b2lkIHJ0MngwMGNyeXB0b190eF9yZW1vdmVfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGl2X2xlbik7CiB2b2lkIHJ0MngwMGNyeXB0b190eF9pbnNlcnRfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0yMjcsNyArMzEyLDggQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWI1Y2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KKworCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKwl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKwlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKwlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKwk1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qCisJTW9kdWxlOiBydDJ4MDBsaWIKKwlBYnN0cmFjdDogcnQyeDAwIGdlbmVyaWMgbGluayB0dW5pbmcgcm91dGluZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAicnQyeDAwLmgiCisjaW5jbHVkZSAicnQyeDAwbGliLmgiCisKKy8qCisgKiBXaGVuIHdlIGxhY2sgUlNTSSBpbmZvcm1hdGlvbiByZXR1cm4gc29tZXRoaW5nIGxlc3MgdGhlbiAtODAgdG8KKyAqIHRlbGwgdGhlIGRyaXZlciB0byB0dW5lIHRoZSBkZXZpY2UgdG8gbWF4aW11bSBzZW5zaXRpdml0eS4KKyAqLworI2RlZmluZSBERUZBVUxUX1JTU0kJCS0xMjgKKworLyoKKyAqIFdoZW4gbm8gVFgvUlggcGVyY2VudGFnZSBjb3VsZCBiZSBjYWxjdWxhdGVkIGR1ZSB0byBsYWNrIG9mCisgKiBmcmFtZXMgb24gdGhlIGFpciwgd2UgZmFsbGJhY2sgdG8gYSBwZXJjZW50YWdlIG9mIDUwJS4KKyAqIFRoaXMgd2lsbCBhc3N1cmUgd2Ugd2lsbCBnZXQgYXQgbGVhc3QgZ2V0IHNvbWUgZGVjZW50IHZhbHVlCisgKiB3aGVuIHRoZSBsaW5rIHR1bmVyIHN0YXJ0cy4KKyAqIFRoZSB2YWx1ZSB3aWxsIGJlIGRyb3BwZWQgYW5kIG92ZXJ3cml0dGVuIHdpdGggdGhlIGNvcnJlY3QgKG1lYXN1cmVkKQorICogdmFsdWUgYW55d2F5IGR1cmluZyB0aGUgZmlyc3QgcnVuIG9mIHRoZSBsaW5rIHR1bmVyLgorICovCisjZGVmaW5lIERFRkFVTFRfUEVSQ0VOVEFHRQk1MAorCisvKgorICogU21hbGwgaGVscGVyIG1hY3JvIHRvIHdvcmsgd2l0aCBtb3Zpbmcvd2Fsa2luZyBhdmVyYWdlcy4KKyAqIFdoZW4gYWRkaW5nIGEgdmFsdWUgdG8gdGhlIGF2ZXJhZ2UgdmFsdWUgdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbgorICogaXMgbmVlZGVkOgorICoKKyAqICAgICAgICBhdmdfcnNzaSA9ICgoYXZnX3Jzc2kgKiA3KSArIHJzc2kpIC8gODsKKyAqCisgKiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3ZSBvbmx5IG5lZWQgMSB2YXJpYWJsZQorICogdG8gc3RvcmUgdGhlIGF2ZXJhZ2UgaW4gKE5vIG5lZWQgZm9yIGEgY291bnQgYW5kIGEgdG90YWwpLgorICogQnV0IG1vcmUgaW1wb3J0YW50bHksIG5vcm1hbCBhdmVyYWdlIHZhbHVlcyB3aWxsIG92ZXIgdGltZQorICogbW92ZSBsZXNzIGFuZCBsZXNzIHRvd2FyZHMgbmV3bHkgYWRkZWQgdmFsdWVzIHRoaXMgcmVzdWx0cworICogdGhhdCB3aXRoIGxpbmsgdHVuaW5nLCB0aGUgZGV2aWNlIGNhbiBoYXZlIGEgdmVyeSBnb29kIFJTU0kKKyAqIGZvciBhIGZldyBtaW51dGVzIGJ1dCB3aGVuIHRoZSBkZXZpY2UgaXMgbW92ZWQgYXdheSBmcm9tIHRoZSBBUAorICogdGhlIGF2ZXJhZ2Ugd2lsbCBub3QgZGVjcmVhc2UgZmFzdCBlbm91Z2ggdG8gY29tcGVuc2F0ZS4KKyAqIFRoZSB3YWxraW5nIGF2ZXJhZ2UgY29tcGVuc2F0ZXMgdGhpcyBhbmQgd2lsbCBtb3ZlIHRvd2FyZHMKKyAqIHRoZSBuZXcgdmFsdWVzIGNvcnJlY3RseSBhbGxvd2luZyBhIGVmZmVjdGl2ZSBsaW5rIHR1bmluZy4KKyAqLworI2RlZmluZSBNT1ZJTkdfQVZFUkFHRShfX2F2ZywgX192YWwsIF9fc2FtcGxlcykgXAorCSggKCgoX19hdmcpICogKChfX3NhbXBsZXMpIC0gMSkpICsgKF9fdmFsKSkgLyAoX19zYW1wbGVzKSApCisKKy8qCisgKiBTbWFsbCBoZWxwZXIgbWFjcm8gZm9yIHBlcmNlbnRhZ2UgY2FsY3VsYXRpb24KKyAqIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBtYWNybyB3aXRoIHRoZSBvbmx5IGNhdGNoIHRoYXQgaXQgd2lsbAorICogcHJvZHVjZSBhIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB0b3RhbCB2YWx1ZSB3YXMgcHJvdmlkZWQuCisgKi8KKyNkZWZpbmUgUEVSQ0VOVEFHRShfX3ZhbHVlLCBfX3RvdGFsKSBcCisJKCAoX190b3RhbCkgPyAoKChfX3ZhbHVlKSAqIDEwMCkgLyAoX190b3RhbCkpIDogKERFRkFVTFRfUEVSQ0VOVEFHRSkgKQorCisvKgorICogRm9yIGNhbGN1bGF0aW5nIHRoZSBTaWduYWwgcXVhbGl0eSB3ZSBoYXZlIGRldGVybWluZWQKKyAqIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3VjY2VzcyBhbmQgZmFpbGVkIFJYIGFuZCBUWCBmcmFtZXMuCisgKiBXaXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYXZlcmFnZSBSU1NJIHZhbHVlIHdlIGNhbiBkZXRlcm1pbmUKKyAqIHRoZSBsaW5rIHF1YWxpdHkgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisgKgorICogICAgICAgICByc3NpX3BlcmNlbnRhZ2UgPSAoYXZnX3Jzc2kgKiAxMDApIC8gcnNzaV9vZmZzZXQKKyAqICAgICAgICAgcnhfcGVyY2VudGFnZSA9IChyeF9zdWNjZXNzICogMTAwKSAvIHJ4X3RvdGFsCisgKiAgICAgICAgIHR4X3BlcmNlbnRhZ2UgPSAodHhfc3VjY2VzcyAqIDEwMCkgLyB0eF90b3RhbAorICogICAgICAgICBhdmdfc2lnbmFsID0gKChXRUlHSFRfUlNTSSAqIGF2Z19yc3NpKSArCisgKiAgICAgICAgICAgICAgICAgICAgICAgKFdFSUdIVF9UWCAqIHR4X3BlcmNlbnRhZ2UpICsKKyAqICAgICAgICAgICAgICAgICAgICAgICAoV0VJR0hUX1JYICogcnhfcGVyY2VudGFnZSkpIC8gMTAwCisgKgorICogVGhpcyB2YWx1ZSBzaG91bGQgdGhlbiBiZSBjaGVja2VkIHRvIG5vdCBiZSBncmVhdGVyIHRoZW4gMTAwLgorICogVGhpcyBtZWFucyB0aGUgdmFsdWVzIG9mIFdFSUdIVF9SU1NJLCBXRUlHSFRfUlgsIFdFSUdIVF9UWCBtdXN0CisgKiBzdW0gdXAgdG8gMTAwIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgV0VJR0hUX1JTU0kJMjAKKyNkZWZpbmUgV0VJR0hUX1JYCTQwCisjZGVmaW5lIFdFSUdIVF9UWAk0MAorCitzdGF0aWMgaW50IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfbGlua19yc3NpKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKworCWlmIChhbnQtPnJzc2lfYW50ICYmIHJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3N1Y2Nlc3MpCisJCXJldHVybiBhbnQtPnJzc2lfYW50OworCXJldHVybiBERUZBVUxUX1JTU0k7Cit9CisKK3N0YXRpYyBpbnQgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3Rvcnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJICAgICAgIGVudW0gYW50ZW5uYSBhbnRlbm5hKQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisKKwlpZiAoYW50LT5yc3NpX2hpc3RvcnlbYW50ZW5uYSAtIEFOVEVOTkFfQV0pCisJCXJldHVybiBhbnQtPnJzc2lfaGlzdG9yeVthbnRlbm5hIC0gQU5URU5OQV9BXTsKKwlyZXR1cm4gREVGQVVMVF9SU1NJOworfQorLyogU21hbGwgd3JhcHBlciBmb3IgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKSAqLworI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfcnhfaGlzdG9yeShfX2RldikgXAorCXJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKKwkJCQkJICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS5yeCkKKyNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX3R4X2hpc3RvcnkoX19kZXYpIFwKKwlydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCisJCQkJCSAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUudHgpCisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9oaXN0b3J5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCQkgICBlbnVtIGFudGVubmEgYW50ZW5uYSwKKwkJCQkJCSAgIGludCByc3NpKQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisJYW50LT5yc3NpX2hpc3RvcnlbYW50LT5hY3RpdmUucnggLSBBTlRFTk5BX0FdID0gcnNzaTsKK30KKy8qIFNtYWxsIHdyYXBwZXIgZm9yIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KCkgKi8KKyNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX3J4X2hpc3RvcnkoX19kZXYsIF9fcnNzaSkgXAorCXJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKKwkJCQkJICAgICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS5yeCwgXAorCQkJCQkgICAgICAgKF9fcnNzaSkpCisjZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV90eF9oaXN0b3J5KF9fZGV2LCBfX3Jzc2kpIFwKKwlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCisJCQkJCSAgICAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUudHgsIFwKKwkJCQkJICAgICAgIChfX3Jzc2kpKQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX2FudGVubmFfcmVzZXQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlydDJ4MDBkZXYtPmxpbmsuYW50LnJzc2lfYW50ID0gMDsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X3NhbXBsZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisJc3RydWN0IGFudGVubmFfc2V0dXAgbmV3X2FudDsKKwlpbnQgc2FtcGxlX2EgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShydDJ4MDBkZXYsIEFOVEVOTkFfQSk7CisJaW50IHNhbXBsZV9iID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkocnQyeDAwZGV2LCBBTlRFTk5BX0IpOworCisJbWVtY3B5KCZuZXdfYW50LCAmYW50LT5hY3RpdmUsIHNpemVvZihuZXdfYW50KSk7CisKKwkvKgorCSAqIFdlIGFyZSBkb25lIHNhbXBsaW5nLiBOb3cgd2Ugc2hvdWxkIGV2YWx1YXRlIHRoZSByZXN1bHRzLgorCSAqLworCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfTU9ERV9TQU1QTEU7CisKKwkvKgorCSAqIER1cmluZyB0aGUgbGFzdCBwZXJpb2Qgd2UgaGF2ZSBzYW1wbGVkIHRoZSBSU1NJCisJICogZnJvbSBib3RoIGFudGVubmEncy4gSXQgbm93IGlzIHRpbWUgdG8gZGV0ZXJtaW5lCisJICogd2hpY2ggYW50ZW5uYSBkZW1vbnN0cmF0ZWQgdGhlIGJlc3QgcGVyZm9ybWFuY2UuCisJICogV2hlbiB3ZSBhcmUgYWxyZWFkeSBvbiB0aGUgYW50ZW5uYSB3aXRoIHRoZSBiZXN0CisJICogcGVyZm9ybWFuY2UsIHRoZW4gdGhlcmUgcmVhbGx5IGlzIG5vdGhpbmcgZm9yIHVzCisJICogbGVmdCB0byBkby4KKwkgKi8KKwlpZiAoc2FtcGxlX2EgPT0gc2FtcGxlX2IpCisJCXJldHVybjsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpCisJCW5ld19hbnQucnggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7CisKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQorCQluZXdfYW50LnR4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COworCisJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJm5ld19hbnQpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfZXZhbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisJc3RydWN0IGFudGVubmFfc2V0dXAgbmV3X2FudDsKKwlpbnQgcnNzaV9jdXJyOworCWludCByc3NpX29sZDsKKworCW1lbWNweSgmbmV3X2FudCwgJmFudC0+YWN0aXZlLCBzaXplb2YobmV3X2FudCkpOworCisJLyoKKwkgKiBHZXQgY3VycmVudCBSU1NJIHZhbHVlIGFsb25nIHdpdGggdGhlIGhpc3RvcmljYWwgdmFsdWUsCisJICogYWZ0ZXIgdGhhdCB1cGRhdGUgdGhlIGhpc3Rvcnkgd2l0aCB0aGUgY3VycmVudCB2YWx1ZS4KKwkgKi8KKwlyc3NpX2N1cnIgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X2xpbmtfcnNzaShydDJ4MDBkZXYpOworCXJzc2lfb2xkID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX3J4X2hpc3RvcnkocnQyeDAwZGV2KTsKKwlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfcnhfaGlzdG9yeShydDJ4MDBkZXYsIHJzc2lfY3Vycik7CisKKwkvKgorCSAqIExlZ2FjeSBkcml2ZXIgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIHN3YXAgYW50ZW5uYSdzCisJICogd2hlbiB0aGUgZGlmZmVyZW5jZSBpbiBSU1NJIGlzIGdyZWF0ZXIgdGhhdCA1LiBUaGlzCisJICogYWxzbyBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBSU1NJIHdhcyBhY3R1YWxseSBiZXR0ZXIKKwkgKiB0aGVuIHRoZSBwcmV2aW91cyBzYW1wbGUuCisJICogV2hlbiB0aGUgZGlmZmVyZW5jZSBleGNlZWRzIHRoZSB0aHJlc2hvbGQgd2Ugc2hvdWxkCisJICogc2FtcGxlIHRoZSByc3NpIGZyb20gdGhlIG90aGVyIGFudGVubmEgdG8gbWFrZSBhIHZhbGlkCisJICogY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSAyIGFudGVubmFzLgorCSAqLworCWlmIChhYnMocnNzaV9jdXJyIC0gcnNzaV9vbGQpIDwgNSkKKwkJcmV0dXJuOworCisJYW50LT5mbGFncyB8PSBBTlRFTk5BX01PREVfU0FNUExFOworCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKKwkJbmV3X2FudC5yeCA9IChuZXdfYW50LnJ4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7CisKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQorCQluZXdfYW50LnR4ID0gKG5ld19hbnQudHggPT0gQU5URU5OQV9BKSA/IEFOVEVOTkFfQiA6IEFOVEVOTkFfQTsKKworCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsICZuZXdfYW50KTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKworCS8qCisJICogRGV0ZXJtaW5lIGlmIHNvZnR3YXJlIGRpdmVyc2l0eSBpcyBlbmFibGVkIGZvcgorCSAqIGVpdGhlciB0aGUgVFggb3IgUlggYW50ZW5uYSAob3IgYm90aCkuCisJICogQWx3YXlzIHBlcmZvcm0gdGhpcyBjaGVjayBzaW5jZSB3aXRoaW4gdGhlIGxpbmsKKwkgKiB0dW5lciBpbnRlcnZhbCB0aGUgY29uZmlndXJhdGlvbiBtaWdodCBoYXZlIGNoYW5nZWQuCisJICovCisJYW50LT5mbGFncyAmPSB+QU5URU5OQV9SWF9ESVZFUlNJVFk7CisJYW50LT5mbGFncyAmPSB+QU5URU5OQV9UWF9ESVZFUlNJVFk7CisKKwlpZiAocnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKKwkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1JYX0RJVkVSU0lUWTsKKwlpZiAocnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKKwkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1RYX0RJVkVSU0lUWTsKKworCWlmICghKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkgJiYKKwkgICAgIShhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpKSB7CisJCWFudC0+ZmxhZ3MgPSAwOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlIG9ubHkgc2FtcGxlZCB0aGUgZGF0YSBvdmVyIHRoZSBsYXN0IHBlcmlvZAorCSAqIHdlIHNob3VsZCBub3cgaGFydmVzdCB0aGUgZGF0YS4gT3RoZXJ3aXNlIGp1c3QgZXZhbHVhdGUKKwkgKiB0aGUgZGF0YS4gVGhlIGxhdHRlciBzaG91bGQgb25seSBiZSBwZXJmb3JtZWQgb25jZQorCSAqIGV2ZXJ5IDIgc2Vjb25kcy4KKwkgKi8KKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfTU9ERV9TQU1QTEUpCisJCXJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9zYW1wbGUocnQyeDAwZGV2KTsKKwllbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsuY291bnQgJiAxKQorCQlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfZXZhbChydDJ4MDBkZXYpOworfQorCit2b2lkIHJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpbnQgYXZnX3Jzc2kgPSByeGRlc2MtPnJzc2k7CisJaW50IGFudF9yc3NpID0gcnhkZXNjLT5yc3NpOworCisJLyoKKwkgKiBGcmFtZSB3YXMgcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5IHNpbmNlIG5vbi1zdWNjZXNmdWxsCisJICogZnJhbWVzIHdvdWxkIGhhdmUgYmVlbiBkcm9wcGVkIGJ5IHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlxdWFsLT5yeF9zdWNjZXNzKys7CisKKwkvKgorCSAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gcXVhbGl0eSBzdGF0aXN0aWNzIGZyb20KKwkgKiBiZWFjb25zIHdoaWNoIGNhbWUgZnJvbSB0aGUgQlNTIHdoaWNoIHdlIGFyZQorCSAqIGFzc29jaWF0ZWQgd2l0aC4KKwkgKi8KKwlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCSAgICAhKHJ4ZGVzYy0+ZGV2X2ZsYWdzICYgUlhET05FX01ZX0JTUykpCisJCXJldHVybjsKKworCS8qCisJICogVXBkYXRlIGdsb2JhbCBSU1NJCisJICovCisJaWYgKGxpbmstPmF2Z19yc3NpKQorCQlhdmdfcnNzaSA9IE1PVklOR19BVkVSQUdFKGxpbmstPmF2Z19yc3NpLCByeGRlc2MtPnJzc2ksIDgpOworCWxpbmstPmF2Z19yc3NpID0gYXZnX3Jzc2k7CisKKwkvKgorCSAqIFVwZGF0ZSBhbnRlbm5hIFJTU0kKKwkgKi8KKwlpZiAoYW50LT5yc3NpX2FudCkKKwkJYW50X3Jzc2kgPSBNT1ZJTkdfQVZFUkFHRShhbnQtPnJzc2lfYW50LCByeGRlc2MtPnJzc2ksIDgpOworCWFudC0+cnNzaV9hbnQgPSBhbnRfcnNzaTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGlua19wcmVjYWxjdWxhdGVfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisKKwlsaW5rLT5yeF9wZXJjZW50YWdlID0KKwkgICAgUEVSQ0VOVEFHRShxdWFsLT5yeF9zdWNjZXNzLCBxdWFsLT5yeF9mYWlsZWQgKyBxdWFsLT5yeF9zdWNjZXNzKTsKKwlsaW5rLT50eF9wZXJjZW50YWdlID0KKwkgICAgUEVSQ0VOVEFHRShxdWFsLT50eF9zdWNjZXNzLCBxdWFsLT50eF9mYWlsZWQgKyBxdWFsLT50eF9zdWNjZXNzKTsKK30KKworaW50IHJ0MngwMGxpbmtfY2FsY3VsYXRlX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBpbnQgcnNzaSkKK3sKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisJaW50IHJzc2lfcGVyY2VudGFnZSA9IDA7CisJaW50IHNpZ25hbDsKKworCS8qCisJICogV2UgbmVlZCBhIHBvc2l0aXZlIHZhbHVlIGZvciB0aGUgUlNTSS4KKwkgKi8KKwlpZiAocnNzaSA8IDApCisJCXJzc2kgKz0gcnQyeDAwZGV2LT5yc3NpX29mZnNldDsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbnQgcGVyY2VudGFnZXMsCisJICogd2hpY2ggd2lsbCBiZSB1c2VkIGZvciB0aGUgc2lnbmFsLgorCSAqLworCXJzc2lfcGVyY2VudGFnZSA9IFBFUkNFTlRBR0UocnNzaSwgcnQyeDAwZGV2LT5yc3NpX29mZnNldCk7CisKKwkvKgorCSAqIEFkZCB0aGUgaW5kaXZpZHVhbCBwZXJjZW50YWdlcyBhbmQgdXNlIHRoZSBXRUlHSFQKKwkgKiBkZWZpbmVzIHRvIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBsaW5rIHNpZ25hbC4KKwkgKi8KKwlzaWduYWwgPSAoKFdFSUdIVF9SU1NJICogcnNzaV9wZXJjZW50YWdlKSArCisJCSAgKFdFSUdIVF9UWCAqIGxpbmstPnR4X3BlcmNlbnRhZ2UpICsKKwkJICAoV0VJR0hUX1JYICogbGluay0+cnhfcGVyY2VudGFnZSkpIC8gMTAwOworCisJcmV0dXJuIG1heF90KGludCwgc2lnbmFsLCAxMDApOworfQorCit2b2lkIHJ0MngwMGxpbmtfc3RhcnRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisKKwkvKgorCSAqIExpbmsgdHVuaW5nIHNob3VsZCBvbmx5IGJlIHBlcmZvcm1lZCB3aGVuCisJICogYW4gYWN0aXZlIHN0YSBvciBtYXN0ZXIgaW50ZXJmYWNlIGV4aXN0cy4KKwkgKiBTaW5nbGUgbW9uaXRvciBtb2RlIGludGVyZmFjZXMgc2hvdWxkIG5ldmVyIGhhdmUKKwkgKiB3b3JrIHdpdGggbGluayB0dW5lcnMuCisJICovCisJaWYgKCFydDJ4MDBkZXYtPmludGZfYXBfY291bnQgJiYgIXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpCisJCXJldHVybjsKKworCWxpbmstPnJ4X3BlcmNlbnRhZ2UgPSBERUZBVUxUX1BFUkNFTlRBR0U7CisJbGluay0+dHhfcGVyY2VudGFnZSA9IERFRkFVTFRfUEVSQ0VOVEFHRTsKKworCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCBmYWxzZSk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAorCQkJICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19zdG9wX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPmxpbmsud29yayk7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBib29sIGFudGVubmEpCit7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKworCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBSZXNldCBsaW5rIGluZm9ybWF0aW9uLgorCSAqIEJvdGggdGhlIGN1cnJlbnRseSBhY3RpdmUgdmdjIGxldmVsIGFzIHdlbGwgYXMKKwkgKiB0aGUgbGluayB0dW5lciBjb3VudGVyIHNob3VsZCBiZSByZXNldC4gUmVzZXR0aW5nCisJICogdGhlIGNvdW50ZXIgaXMgaW1wb3J0YW50IGZvciBkZXZpY2VzIHdoZXJlIHRoZQorCSAqIGRldmljZSBzaG91bGQgb25seSBwZXJmb3JtIGxpbmsgdHVuaW5nIGR1cmluZyB0aGUKKwkgKiBmaXJzdCBtaW51dGUgYWZ0ZXIgYmVpbmcgZW5hYmxlZC4KKwkgKi8KKwlydDJ4MDBkZXYtPmxpbmsuY291bnQgPSAwOworCW1lbXNldChxdWFsLCAwLCBzaXplb2YoKnF1YWwpKTsKKworCS8qCisJICogUmVzZXQgdGhlIGxpbmsgdHVuZXIuCisJICovCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmVzZXRfdHVuZXIocnQyeDAwZGV2LCBxdWFsKTsKKworCWlmIChhbnRlbm5hKQorCQlydDJ4MDBsaW5rX2FudGVubmFfcmVzZXQocnQyeDAwZGV2KTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3Jlc2V0X3F1YWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJcXVhbC0+cnhfc3VjY2VzcyA9IDA7CisJcXVhbC0+cnhfZmFpbGVkID0gMDsKKwlxdWFsLT50eF9zdWNjZXNzID0gMDsKKwlxdWFsLT50eF9mYWlsZWQgPSAwOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX3R1bmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydDJ4MDBfZGV2LCBsaW5rLndvcmsud29yayk7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisKKwkvKgorCSAqIFdoZW4gdGhlIHJhZGlvIGlzIHNodXR0aW5nIGRvd24gd2Ugc2hvdWxkCisJICogaW1tZWRpYXRlbHkgY2Vhc2UgYWxsIGxpbmsgdHVuaW5nLgorCSAqLworCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBVcGRhdGUgc3RhdGlzdGljcy4KKwkgKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5saW5rX3N0YXRzKHJ0MngwMGRldiwgcXVhbCk7CisJcnQyeDAwZGV2LT5sb3dfbGV2ZWxfc3RhdHMuZG90MTFGQ1NFcnJvckNvdW50ICs9IHF1YWwtPnJ4X2ZhaWxlZDsKKworCS8qCisJICogVXBkYXRlIHF1YWxpdHkgUlNTSSBmb3IgbGluayB0dW5pbmcsCisJICogd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIHNvbWUgZnJhbWVzIGFuZCB3ZSBtYW5hZ2VkIHRvCisJICogY29sbGVjdCB0aGUgUlNTSSBkYXRhIHdlIGNvdWxkIHVzZSB0aGlzLiBPdGhlcndpc2Ugd2UKKwkgKiBtdXN0IGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IFJTU0kgdmFsdWUuCisJICovCisJaWYgKCFsaW5rLT5hdmdfcnNzaSB8fCAhcXVhbC0+cnhfc3VjY2VzcykKKwkJcXVhbC0+cnNzaSA9IERFRkFVTFRfUlNTSTsKKwllbHNlCisJCXF1YWwtPnJzc2kgPSBsaW5rLT5hdmdfcnNzaTsKKworCS8qCisJICogT25seSBwZXJmb3JtIHRoZSBsaW5rIHR1bmluZyB3aGVuIExpbmsgdHVuaW5nCisJICogaGFzIGJlZW4gZW5hYmxlZCAoVGhpcyBjb3VsZCBoYXZlIGJlZW4gZGlzYWJsZWQgZnJvbSB0aGUgRUVQUk9NKS4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KENPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJ0MngwMGRldi0+b3BzLT5saWItPmxpbmtfdHVuZXIocnQyeDAwZGV2LCBxdWFsLCBsaW5rLT5jb3VudCk7CisKKwkvKgorCSAqIFByZWNhbGN1bGF0ZSBhIHBvcnRpb24gb2YgdGhlIGxpbmsgc2lnbmFsIHdoaWNoIGlzCisJICogaW4gYmFzZWQgb24gdGhlIHR4L3J4IHN1Y2Nlc3MvZmFpbHVyZSBjb3VudGVycy4KKwkgKi8KKwlydDJ4MDBsaW5rX3ByZWNhbGN1bGF0ZV9zaWduYWwocnQyeDAwZGV2KTsKKworCS8qCisJICogU2VuZCBhIHNpZ25hbCB0byB0aGUgbGVkIHRvIHVwZGF0ZSB0aGUgbGVkIHNpZ25hbCBzdHJlbmd0aC4KKwkgKi8KKwlydDJ4MDBsZWRzX2xlZF9xdWFsaXR5KHJ0MngwMGRldiwgbGluay0+YXZnX3Jzc2kpOworCisJLyoKKwkgKiBFdmFsdWF0ZSBhbnRlbm5hIHNldHVwLCBtYWtlIHRoaXMgdGhlIGxhc3Qgc3RlcCBzaW5jZSB0aGlzIGNvdWxkCisJICogcG9zc2libHkgcmVzZXQgc29tZSBzdGF0aXN0aWNzLgorCSAqLworCXJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eShydDJ4MDBkZXYpOworCisJLyoKKwkgKiBSZXNldCB0aGUgcXVhbGl0eSBjb3VudGVycyB3aGljaCByZWNvdW50ZWQgZHVyaW5nIGVhY2ggcGVyaW9kLgorCSAqLworCXJ0MngwMGxpbmtfcmVzZXRfcXVhbChydDJ4MDBkZXYpOworCisJLyoKKwkgKiBJbmNyZWFzZSB0dW5lciBjb3VudGVyLCBhbmQgcmVzY2hlZHVsZSB0aGUgbmV4dCBsaW5rIHR1bmVyIHJ1bi4KKwkgKi8KKwlsaW5rLT5jb3VudCsrOworCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCisJCQkgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0MngwMGRldi0+bGluay53b3JrLCBydDJ4MDBsaW5rX3R1bmVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwppbmRleCAzOGVkZWU1Li5jNDFhMGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNzksOCArNzksNyBAQAogCSAqIFJUUy9DVFMgZnJhbWUgc2hvdWxkIHVzZSB0aGUgbGVuZ3RoIG9mIHRoZSBmcmFtZSBwbHVzIGFueQogCSAqIGVuY3J5cHRpb24gb3ZlcmhlYWQgdGhhdCB3aWxsIGJlIGFkZGVkIGJ5IHRoZSBoYXJkd2FyZS4KIAkgKi8KLQlpZiAoIWZyYWdfc2tiLT5kb19ub3RfZW5jcnlwdCkKLQkJZGF0YV9sZW5ndGggKz0gcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHR4X2luZm8pOworCWRhdGFfbGVuZ3RoICs9IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChydDJ4MDBkZXYsIHNrYik7CiAKIAlpZiAodHhfaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpCiAJCWllZWU4MDIxMV9jdHN0b3NlbGZfZ2V0KHJ0MngwMGRldi0+aHcsIHR4X2luZm8tPmNvbnRyb2wudmlmLApAQCAtMjI2LDYgKzIyNSw4IEBACiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAkJLyoKIAkJICogV2UgZG9uJ3Qgc3VwcG9ydCBtaXhlZCBjb21iaW5hdGlvbnMgb2YKIAkJICogc3RhIGFuZCBhcCBpbnRlcmZhY2VzLgpAQCAtNDMwLDggKzQzMSwxMCBAQAogCS8qCiAJICogVXBkYXRlIHRoZSBiZWFjb24uCiAJICovCi0JaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pCi0JCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYpOworCWlmIChjb25mLT5jaGFuZ2VkICYgKElFRUU4MDIxMV9JRkNDX0JFQUNPTiB8CisJCQkgICAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKSkKKwkJc3RhdHVzID0gcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZiwKKwkJCQkJCSAgIGNvbmYtPmVuYWJsZV9iZWFjb24pOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQ4MiwxNiArNDg1LDM2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlcik7CiAKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8KK3N0YXRpYyB2b2lkIG1lbWNweV90a2lwKHN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvICpjcnlwdG8sIHU4ICprZXksIHU4IGtleV9sZW4pCit7CisJaWYgKGtleV9sZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVkpCisJCW1lbWNweSgmY3J5cHRvLT5rZXksCisJCSAgICAgICAma2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWV0sCisJCSAgICAgICBzaXplb2YoY3J5cHRvLT5rZXkpKTsKKworCWlmIChrZXlfbGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkpCisJCW1lbWNweSgmY3J5cHRvLT50eF9taWMsCisJCSAgICAgICAma2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZXSwKKwkJICAgICAgIHNpemVvZihjcnlwdG8tPnR4X21pYykpOworCisJaWYgKGtleV9sZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWSkKKwkJbWVtY3B5KCZjcnlwdG8tPnJ4X21pYywKKwkJICAgICAgICZrZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVldLAorCQkgICAgICAgc2l6ZW9mKGNyeXB0by0+cnhfbWljKSk7Cit9CisKIGludCBydDJ4MDBtYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyZXNzLCBjb25zdCB1OCAqYWRkcmVzcywKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAJaW50ICgqc2V0X2tleSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQlzdHJ1Y3QgcnQyeDAwbGliX2NyeXB0byAqY3J5cHRvLAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKIAlzdHJ1Y3QgcnQyeDAwbGliX2NyeXB0byBjcnlwdG87CisJc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0KKwkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCB9OwogCiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKQEAgLTUwOSw0NSArNTMyLDI1IEBACiAJaWYgKHJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpCiAJCWNyeXB0by5ic3NpZHggPSAwOwogCWVsc2UKLQkJY3J5cHRvLmJzc2lkeCA9Ci0JCSAgICBsb2NhbF9hZGRyZXNzWzVdICYgKHJ0MngwMGRldi0+b3BzLT5tYXhfYXBfaW50ZiAtIDEpOworCQljcnlwdG8uYnNzaWR4ID0gaW50Zi0+bWFjWzVdICYgKHJ0MngwMGRldi0+b3BzLT5tYXhfYXBfaW50ZiAtIDEpOwogCiAJY3J5cHRvLmNpcGhlciA9IHJ0MngwMGNyeXB0b19rZXlfdG9fY2lwaGVyKGtleSk7CiAJaWYgKGNyeXB0by5jaXBoZXIgPT0gQ0lQSEVSX05PTkUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWNyeXB0by5jbWQgPSBjbWQ7Ci0JY3J5cHRvLmFkZHJlc3MgPSBhZGRyZXNzOwogCi0JaWYgKGNyeXB0by5jaXBoZXIgPT0gQ0lQSEVSX1RLSVApIHsKLQkJaWYgKGtleS0+a2V5bGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZKQotCQkJbWVtY3B5KCZjcnlwdG8ua2V5LAotCQkJICAgICAgICZrZXktPmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVldLAotCQkJICAgICAgIHNpemVvZihjcnlwdG8ua2V5KSk7Ci0KLQkJaWYgKGtleS0+a2V5bGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkpCi0JCQltZW1jcHkoJmNyeXB0by50eF9taWMsCi0JCQkgICAgICAgJmtleS0+a2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZXSwKLQkJCSAgICAgICBzaXplb2YoY3J5cHRvLnR4X21pYykpOwotCi0JCWlmIChrZXktPmtleWxlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZKQotCQkJbWVtY3B5KCZjcnlwdG8ucnhfbWljLAotCQkJICAgICAgICZrZXktPmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWV0sCi0JCQkgICAgICAgc2l6ZW9mKGNyeXB0by5yeF9taWMpKTsKLQl9IGVsc2UKLQkJbWVtY3B5KCZjcnlwdG8ua2V5LCAma2V5LT5rZXlbMF0sIGtleS0+a2V5bGVuKTsKLQotCS8qCi0JICogRGlzY292ZXIgdGhlIEFzc29jaWF0aW9uIElEIGZyb20gbWFjODAyMTEuCi0JICogU29tZSBkcml2ZXJzIG5lZWQgdGhpcyBpbmZvcm1hdGlvbiB3aGVuIHVwZGF0aW5nIHRoZQotCSAqIGhhcmR3YXJlIGtleSAoZWl0aGVyIGFkZGluZyBvciByZW1vdmluZykuCi0JICovCi0JcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgYWRkcmVzcyk7Ci0JaWYgKHN0YSkKKwlpZiAoc3RhKSB7CisJCS8qIHNvbWUgZHJpdmVycyBuZWVkIHRoZSBBSUQgKi8KIAkJY3J5cHRvLmFpZCA9IHN0YS0+YWlkOwotCXJjdV9yZWFkX3VubG9jaygpOworCQljcnlwdG8uYWRkcmVzcyA9IHN0YS0+YWRkcjsKKwl9IGVsc2UKKwkJY3J5cHRvLmFkZHJlc3MgPSBiY2FzdF9hZGRyOwogCisJaWYgKGNyeXB0by5jaXBoZXIgPT0gQ0lQSEVSX1RLSVApCisJCW1lbWNweV90a2lwKCZjcnlwdG8sICZrZXktPmtleVswXSwga2V5LT5rZXlsZW4pOworCWVsc2UKKwkJbWVtY3B5KCZjcnlwdG8ua2V5LCAma2V5LT5rZXlbMF0sIGtleS0+a2V5bGVuKTsKIAkvKgogCSAqIEVhY2ggQlNTIGhhcyBhIG1heGltdW0gb2YgNCBzaGFyZWQga2V5cy4KIAkgKiBTaGFyZWQga2V5IGluZGV4IHZhbHVlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwppbmRleCBkNTJiMjJiLi5lNjE2YzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCmluZGV4IDljMGE0ZDcuLjE1YTEyNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCmluZGV4IDA3MDlkZWMuLmE1NjY0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTQ4LDIwICsxNDgsMTA1IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3Jfc2VxKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJCQkgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5za2ItPmRhdGE7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodHhfaW5mby0+Y29udHJvbC52aWYpOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlpZiAoISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkgfHwKKwkgICAgdW5saWtlbHkoIXR4X2luZm8tPmNvbnRyb2wudmlmKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBIYXJkd2FyZSBzaG91bGQgaW5zZXJ0IHNlcXVlbmNlIGNvdW50ZXIuCisJICogRklYTUU6IFdlIGluc2VydCBhIHNvZnR3YXJlIHNlcXVlbmNlIGNvdW50ZXIgZmlyc3QgZm9yCisJICogaGFyZHdhcmUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgaGFyZHdhcmUgc2VxdWVuY2UgY291bnRpbmcuCisJICoKKwkgKiBUaGlzIGlzIHdyb25nIGJlY2F1c2UgYmVhY29ucyBhcmUgbm90IGdldHRpbmcgc2VxdWVuY2UKKwkgKiBudW1iZXJzIGFzc2lnbmVkIHByb3Blcmx5LgorCSAqCisJICogQSBzZWNvbmRhcnkgcHJvYmxlbSBleGlzdHMgZm9yIGRyaXZlcnMgdGhhdCBjYW5ub3QgdG9nZ2xlCisJICogc2VxdWVuY2UgY291bnRpbmcgcGVyLWZyYW1lLCBzaW5jZSB0aG9zZSB3aWxsIG92ZXJyaWRlIHRoZQorCSAqIHNlcXVlbmNlIGNvdW50ZXIgZ2l2ZW4gYnkgbWFjODAyMTEuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPnNlcWxvY2ssIGlycWZsYWdzKTsKKworCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsICZ0eGRlc2MtPmZsYWdzKSkKKwkJaW50Zi0+c2Vxbm8gKz0gMHgxMDsKKwloZHItPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoaW50Zi0+c2Vxbm8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50Zi0+c2VxbG9jaywgaXJxZmxhZ3MpOworCisJX19zZXRfYml0KEVOVFJZX1RYRF9HRU5FUkFURV9TRVEsICZ0eGRlc2MtPmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3JfcGxjcChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQkJICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlID0gJnR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF07CisJdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoOworCXVuc2lnbmVkIGludCBkdXJhdGlvbjsKKwl1bnNpZ25lZCBpbnQgcmVzaWR1YWw7CisKKwkvKiBEYXRhIGxlbmd0aCArIENSQyArIENyeXB0byBvdmVyaGVhZCAoSVYvRUlWL0lDVi9NSUMpICovCisJZGF0YV9sZW5ndGggPSBlbnRyeS0+c2tiLT5sZW4gKyA0OworCWRhdGFfbGVuZ3RoICs9IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChydDJ4MDBkZXYsIGVudHJ5LT5za2IpOworCisJLyoKKwkgKiBQTENQIHNldHVwCisJICogTGVuZ3RoIGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gT0ZETS9DQ0sgcmF0ZS4KKwkgKi8KKwl0eGRlc2MtPnNpZ25hbCA9IGh3cmF0ZS0+cGxjcDsKKwl0eGRlc2MtPnNlcnZpY2UgPSAweDA0OworCisJaWYgKGh3cmF0ZS0+ZmxhZ3MgJiBERVZfUkFURV9PRkRNKSB7CisJCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZGF0YV9sZW5ndGggPj4gNikgJiAweDNmOworCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkYXRhX2xlbmd0aCAmIDB4M2Y7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ29udmVydCBsZW5ndGggdG8gbWljcm9zZWNvbmRzLgorCQkgKi8KKwkJcmVzaWR1YWwgPSBHRVRfRFVSQVRJT05fUkVTKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOworCQlkdXJhdGlvbiA9IEdFVF9EVVJBVElPTihkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKKworCQlpZiAocmVzaWR1YWwgIT0gMCkgeworCQkJZHVyYXRpb24rKzsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBMZW5ndGggRXh0ZW5zaW9uCisJCQkgKi8KKwkJCWlmIChod3JhdGUtPmJpdHJhdGUgPT0gMTEwICYmIHJlc2lkdWFsIDw9IDMwKQorCQkJCXR4ZGVzYy0+c2VydmljZSB8PSAweDgwOworCQl9CisKKwkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkdXJhdGlvbiA+PiA4KSAmIDB4ZmY7CisJCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGR1cmF0aW9uICYgMHhmZjsKKworCQkvKgorCQkgKiBXaGVuIHByZWFtYmxlIGlzIGVuYWJsZWQgd2Ugc2hvdWxkIHNldCB0aGUKKwkJICogcHJlYW1ibGUgYml0IGZvciB0aGUgc2lnbmFsLgorCQkgKi8KKwkJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQorCQkJdHhkZXNjLT5zaWduYWwgfD0gMHgwODsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJCSAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKillbnRyeS0+c2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlID0gJnR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0KIAkgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKHJ0MngwMGRldi0+aHcsIHR4X2luZm8pOwogCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlOwotCXVuc2lnbmVkIGludCBkYXRhX2xlbmd0aDsKLQl1bnNpZ25lZCBpbnQgZHVyYXRpb247Ci0JdW5zaWduZWQgaW50IHJlc2lkdWFsOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKIAltZW1zZXQodHhkZXNjLCAwLCBzaXplb2YoKnR4ZGVzYykpOwogCkBAIC0xNzMsMjcgKzI1OCwxMiBAQAogCXR4ZGVzYy0+Y3dfbWF4ID0gZW50cnktPnF1ZXVlLT5jd19tYXg7CiAJdHhkZXNjLT5haWZzID0gZW50cnktPnF1ZXVlLT5haWZzOwogCi0JLyogRGF0YSBsZW5ndGggKyBDUkMgKi8KLQlkYXRhX2xlbmd0aCA9IGVudHJ5LT5za2ItPmxlbiArIDQ7Ci0KIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBmcmFtZSBpcyB0byBiZSBhY2tlZC4KIAkgKi8KIAlpZiAoISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9BQ0ssICZ0eGRlc2MtPmZsYWdzKTsKIAotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSAmJgotCSAgICAhZW50cnktPnNrYi0+ZG9fbm90X2VuY3J5cHQpIHsKLQkJLyogQXBwbHkgY3J5cHRvIHNwZWNpZmljIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gKi8KLQkJcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCB0eGRlc2MpOwotCi0JCS8qCi0JCSAqIEV4dGVuZCBmcmFtZSBsZW5ndGggdG8gaW5jbHVkZSBhbGwgZW5jcnlwdGlvbiBvdmVyaGVhZAotCQkgKiB0aGF0IHdpbGwgYmUgYWRkZWQgYnkgdGhlIGhhcmR3YXJlLgotCQkgKi8KLQkJZGF0YV9sZW5ndGggKz0gcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHR4X2luZm8pOwotCX0KLQogCS8qCiAJICogQ2hlY2sgaWYgdGhpcyBpcyBhIFJUUy9DVFMgZnJhbWUKIAkgKi8KQEAgLTIzNyw4NiArMzA3LDI3IEBACiAJICogU2V0IGlmcyB0byBJRlNfU0lGUyB3aGVuIHRoZSB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZnJhZ21lbnQsCiAJICogb3IgdGhpcyBmcmFnbWVudCBjYW1lIGFmdGVyIFJUUy9DVFMuCiAJICovCi0JaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZ0eGRlc2MtPmZsYWdzKSkgewotCQl0eGRlc2MtPmlmcyA9IElGU19TSUZTOwotCX0gZWxzZSBpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKSB7CisJaWYgKCh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpICYmCisJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLT5mbGFncykpIHsKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpOwogCQl0eGRlc2MtPmlmcyA9IElGU19CQUNLT0ZGOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXR4ZGVzYy0+aWZzID0gSUZTX1NJRlM7Ci0JfQogCiAJLyoKLQkgKiBIYXJkd2FyZSBzaG91bGQgaW5zZXJ0IHNlcXVlbmNlIGNvdW50ZXIuCi0JICogRklYTUU6IFdlIGluc2VydCBhIHNvZnR3YXJlIHNlcXVlbmNlIGNvdW50ZXIgZmlyc3QgZm9yCi0JICogaGFyZHdhcmUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgaGFyZHdhcmUgc2VxdWVuY2UgY291bnRpbmcuCi0JICoKLQkgKiBUaGlzIGlzIHdyb25nIGJlY2F1c2UgYmVhY29ucyBhcmUgbm90IGdldHRpbmcgc2VxdWVuY2UKLQkgKiBudW1iZXJzIGFzc2lnbmVkIHByb3Blcmx5LgotCSAqCi0JICogQSBzZWNvbmRhcnkgcHJvYmxlbSBleGlzdHMgZm9yIGRyaXZlcnMgdGhhdCBjYW5ub3QgdG9nZ2xlCi0JICogc2VxdWVuY2UgY291bnRpbmcgcGVyLWZyYW1lLCBzaW5jZSB0aG9zZSB3aWxsIG92ZXJyaWRlIHRoZQotCSAqIHNlcXVlbmNlIGNvdW50ZXIgZ2l2ZW4gYnkgbWFjODAyMTEuCi0JICovCi0JaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7Ci0JCWlmIChsaWtlbHkodHhfaW5mby0+Y29udHJvbC52aWYpKSB7Ci0JCQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGY7Ci0KLQkJCWludGYgPSB2aWZfdG9faW50Zih0eF9pbmZvLT5jb250cm9sLnZpZik7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmLT5zZXFsb2NrLCBpcnFmbGFncyk7Ci0KLQkJCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRklSU1RfRlJBR01FTlQsICZ0eGRlc2MtPmZsYWdzKSkKLQkJCQlpbnRmLT5zZXFubyArPSAweDEwOwotCQkJaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKLQkJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoaW50Zi0+c2Vxbm8pOwotCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT5zZXFsb2NrLCBpcnFmbGFncyk7Ci0KLQkJCV9fc2V0X2JpdChFTlRSWV9UWERfR0VORVJBVEVfU0VRLCAmdHhkZXNjLT5mbGFncyk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFBMQ1Agc2V0dXAKLQkgKiBMZW5ndGggY2FsY3VsYXRpb24gZGVwZW5kcyBvbiBPRkRNL0NDSyByYXRlLgorCSAqIERldGVybWluZSByYXRlIG1vZHVsYXRpb24uCiAJICovCiAJaHdyYXRlID0gcnQyeDAwX2dldF9yYXRlKHJhdGUtPmh3X3ZhbHVlKTsKLQl0eGRlc2MtPnNpZ25hbCA9IGh3cmF0ZS0+cGxjcDsKLQl0eGRlc2MtPnNlcnZpY2UgPSAweDA0OworCXR4ZGVzYy0+cmF0ZV9tb2RlID0gUkFURV9NT0RFX0NDSzsKKwlpZiAoaHdyYXRlLT5mbGFncyAmIERFVl9SQVRFX09GRE0pCisJCXR4ZGVzYy0+cmF0ZV9tb2RlID0gUkFURV9NT0RFX09GRE07CiAKLQlpZiAoaHdyYXRlLT5mbGFncyAmIERFVl9SQVRFX09GRE0pIHsKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKTsKLQotCQl0eGRlc2MtPmxlbmd0aF9oaWdoID0gKGRhdGFfbGVuZ3RoID4+IDYpICYgMHgzZjsKLQkJdHhkZXNjLT5sZW5ndGhfbG93ID0gZGF0YV9sZW5ndGggJiAweDNmOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIENvbnZlcnQgbGVuZ3RoIHRvIG1pY3Jvc2Vjb25kcy4KLQkJICovCi0JCXJlc2lkdWFsID0gR0VUX0RVUkFUSU9OX1JFUyhkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKLQkJZHVyYXRpb24gPSBHRVRfRFVSQVRJT04oZGF0YV9sZW5ndGgsIGh3cmF0ZS0+Yml0cmF0ZSk7Ci0KLQkJaWYgKHJlc2lkdWFsICE9IDApIHsKLQkJCWR1cmF0aW9uKys7Ci0KLQkJCS8qCi0JCQkgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgTGVuZ3RoIEV4dGVuc2lvbgotCQkJICovCi0JCQlpZiAoaHdyYXRlLT5iaXRyYXRlID09IDExMCAmJiByZXNpZHVhbCA8PSAzMCkKLQkJCQl0eGRlc2MtPnNlcnZpY2UgfD0gMHg4MDsKLQkJfQotCi0JCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZHVyYXRpb24gPj4gOCkgJiAweGZmOwotCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkdXJhdGlvbiAmIDB4ZmY7Ci0KLQkJLyoKLQkJICogV2hlbiBwcmVhbWJsZSBpcyBlbmFibGVkIHdlIHNob3VsZCBzZXQgdGhlCi0JCSAqIHByZWFtYmxlIGJpdCBmb3IgdGhlIHNpZ25hbC4KLQkJICovCi0JCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKLQkJCXR4ZGVzYy0+c2lnbmFsIHw9IDB4MDg7Ci0JfQorCS8qCisJICogQXBwbHkgVFggZGVzY3JpcHRvciBoYW5kbGluZyBieSBjb21wb25lbnRzCisJICovCisJcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCB0eGRlc2MpOworCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3NlcShlbnRyeSwgdHhkZXNjKTsKKwlydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9wbGNwKGVudHJ5LCB0eGRlc2MsIGh3cmF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKQEAgLTQwMyw3ICs0MTQsNyBAQAogCSAqLwogCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy5mbGFncykgJiYKIAkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLmZsYWdzKSkgewotCQlpZiAodGVzdF9iaXQoQ09ORklHX0NSWVBUT19DT1BZX0lWLCAmcXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkKIAkJCXJ0MngwMGNyeXB0b190eF9jb3B5X2l2KHNrYiwgaXZfbGVuKTsKIAkJZWxzZQogCQkJcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihza2IsIGl2X2xlbik7CkBAIC00MzIsNyArNDQzLDggQEAKIH0KIAogaW50IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgY29uc3QgYm9vbCBlbmFibGVfYmVhY29uKQogewogCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOwpAQCAtNDQyLDYgKzQ1NCwxMSBAQAogCWlmICh1bmxpa2VseSghaW50Zi0+YmVhY29uKSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCisJaWYgKCFlbmFibGVfYmVhY29uKSB7CisJCXJ0MngwMGRldi0+b3BzLT5saWItPmtpbGxfdHhfcXVldWUocnQyeDAwZGV2LCBRSURfQkVBQ09OKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaW50Zi0+YmVhY29uLT5za2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChydDJ4MDBkZXYtPmh3LCB2aWYpOwogCWlmICghaW50Zi0+YmVhY29uLT5za2IpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDkwLDYgKzUwNyw5IEBACiB7CiAJaW50IGF0aW0gPSB0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKKwlpZiAocXVldWUgPT0gUUlEX1JYKQorCQlyZXR1cm4gcnQyeDAwZGV2LT5yeDsKKwogCWlmIChxdWV1ZSA8IHJ0MngwMGRldi0+b3BzLT50eF9xdWV1ZXMgJiYgcnQyeDAwZGV2LT50eCkKIAkJcmV0dXJuICZydDJ4MDBkZXYtPnR4W3F1ZXVlXTsKIApAQCAtNTY2LDYgKzU4NiwxNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CiB9CiAKK3ZvaWQgcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisKKwl0eGFsbF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKQorCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWxsX3R4X3F1ZXVlKHJ0MngwMGRldiwgcXVldWUtPnFpZCk7Cit9CisKIHZvaWQgcnQyeDAwcXVldWVfaW5pdF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCmluZGV4IDI4MjkzNzEuLjk3ZTJhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTU4LDYgKzE1OCwxNCBAQAogfTsKIAogLyoqCisgKiBSWERPTkVfU0lHTkFMX01BU0sgLSBEZWZpbmUgdG8gbWFzayBvZmYgYWxsICZyeGRvbmVfZW50cnlfZGVzY19mbGFncyBmbGFncworICogZXhjZXB0IGZvciB0aGUgUlhET05FX1NJR05BTF8qIGZsYWdzLiBUaGlzIGlzIHVzZWZ1bCB0byBjb252ZXJ0IHRoZSBkZXZfZmxhZ3MKKyAqIGZyb20gJnJ4ZG9uZV9lbnRyeV9kZXNjIHRvIGEgc2lnbmFsIHZhbHVlIHR5cGUuCisgKi8KKyNkZWZpbmUgUlhET05FX1NJR05BTF9NQVNLIFwKKyAgICAgICAoIFJYRE9ORV9TSUdOQUxfUExDUCB8IFJYRE9ORV9TSUdOQUxfQklUUkFURSApCisKKy8qKgogICogc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjOiBSWCBFbnRyeSBkZXNjcmlwdG9yCiAgKgogICogU3VtbWFyeSBvZiBpbmZvcm1hdGlvbiB0aGF0IGhhcyBiZWVuIHJlYWQgZnJvbSB0aGUgUlggZnJhbWUgZGVzY3JpcHRvci4KQEAgLTE2NSw2ICsxNzMsNyBAQAogICogQHRpbWVzdGFtcDogUlggVGltZXN0YW1wCiAgKiBAc2lnbmFsOiBTaWduYWwgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgogICogQHJzc2k6IFJTU0kgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgorICogQG5vaXNlOiBNZWFzdXJlZCBub2lzZSBkdXJpbmcgZnJhbWUgcmVjZXB0aW9uLgogICogQHNpemU6IERhdGEgc2l6ZSBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCiAgKiBAZmxhZ3M6IE1BQzgwMjExIHJlY2VpdmUgZmxhZ3MgKFNlZSAmZW51bSBtYWM4MDIxMV9yeF9mbGFncykuCiAgKiBAZGV2X2ZsYWdzOiBSYWxpbmsgcmVjZWl2ZSBmbGFncyAoU2VlICZlbnVtIHJ4ZG9uZV9lbnRyeV9kZXNjX2ZsYWdzKS4KQEAgLTE3Nyw2ICsxODYsNyBAQAogCXU2NCB0aW1lc3RhbXA7CiAJaW50IHNpZ25hbDsKIAlpbnQgcnNzaTsKKwlpbnQgbm9pc2U7CiAJaW50IHNpemU7CiAJaW50IGZsYWdzOwogCWludCBkZXZfZmxhZ3M7CkBAIC0yMjIsNyArMjMyLDYgQEAKICAqCiAgKiBARU5UUllfVFhEX1JUU19GUkFNRTogVGhpcyBmcmFtZSBpcyBhIFJUUyBmcmFtZS4KICAqIEBFTlRSWV9UWERfQ1RTX0ZSQU1FOiBUaGlzIGZyYW1lIGlzIGEgQ1RTLXRvLXNlbGYgZnJhbWUuCi0gKiBARU5UUllfVFhEX09GRE1fUkFURTogVGhpcyBmcmFtZSBpcyBzZW5kIG91dCB3aXRoIGFuIE9GRE0gcmF0ZS4KICAqIEBFTlRSWV9UWERfR0VORVJBVEVfU0VROiBUaGlzIGZyYW1lIHJlcXVpcmVzIHNlcXVlbmNlIGNvdW50ZXIuCiAgKiBARU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5UOiBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZS4KICAqIEBFTlRSWV9UWERfTU9SRV9GUkFHOiBUaGlzIGZyYW1lIGlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgZnJhZ21lbnQuCkBAIC0yMzgsNyArMjQ3LDYgQEAKIGVudW0gdHhlbnRyeV9kZXNjX2ZsYWdzIHsKIAlFTlRSWV9UWERfUlRTX0ZSQU1FLAogCUVOVFJZX1RYRF9DVFNfRlJBTUUsCi0JRU5UUllfVFhEX09GRE1fUkFURSwKIAlFTlRSWV9UWERfR0VORVJBVEVfU0VRLAogCUVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwKIAlFTlRSWV9UWERfTU9SRV9GUkFHLApAQCAtMjYzLDYgKzI3MSw3IEBACiAgKiBAbGVuZ3RoX2xvdzogUExDUCBsZW5ndGggbG93IHdvcmQuCiAgKiBAc2lnbmFsOiBQTENQIHNpZ25hbC4KICAqIEBzZXJ2aWNlOiBQTENQIHNlcnZpY2UuCisgKiBAcmF0ZV9tb2RlOiBSYXRlIG1vZGUgKFNlZSBAZW51bSByYXRlX21vZHVsYXRpb24pLgogICogQHJldHJ5X2xpbWl0OiBNYXggbnVtYmVyIG9mIHJldHJpZXMuCiAgKiBAYWlmczogQUlGUyB2YWx1ZS4KICAqIEBpZnM6IElGUyB2YWx1ZS4KQEAgLTI4Miw2ICsyOTEsOCBAQAogCXUxNiBzaWduYWw7CiAJdTE2IHNlcnZpY2U7CiAKKwl1MTYgcmF0ZV9tb2RlOworCiAJc2hvcnQgcmV0cnlfbGltaXQ7CiAJc2hvcnQgYWlmczsKIAlzaG9ydCBpZnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKaW5kZXggYzJmYmE3Yy4uODYxMzIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyNSw2ICsxMjUsMjYgQEAKIH07CiAKIC8qCisgKiBSYXRlIG1vZHVsYXRpb25zCisgKi8KK2VudW0gcmF0ZV9tb2R1bGF0aW9uIHsKKwlSQVRFX01PREVfQ0NLID0gMCwKKwlSQVRFX01PREVfT0ZETSA9IDEsCisJUkFURV9NT0RFX0hUX01JWCA9IDIsCisJUkFURV9NT0RFX0hUX0dSRUVORklFTEQgPSAzLAorfTsKKworLyoKKyAqIEZpcm13YXJlIHZhbGlkYXRpb24gZXJyb3IgY29kZXMKKyAqLworZW51bSBmaXJtd2FyZV9lcnJvcnMgeworCUZXX09LLAorCUZXX0JBRF9DUkMsCisJRldfQkFEX0xFTkdUSCwKKwlGV19CQURfVkVSU0lPTiwKK307CisKKy8qCiAgKiBSZWdpc3RlciBoYW5kbGVycy4KICAqIFdlIHN0b3JlIHRoZSBwb3NpdGlvbiBvZiBhIHJlZ2lzdGVyIGZpZWxkIGluc2lkZSBhIGZpZWxkIHN0cnVjdHVyZSwKICAqIFRoaXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIGFuZCByZWFkaW5nIGEgY2VydGFpbiBmaWVsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCmluZGV4IDMyOThjYWUuLmI2ZDRjNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNSw3MyArMjUsMzAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCiAjaW5jbHVkZSAicnQyeDAwbGliLmgiCiAKLXN0YXRpYyBpbnQgcnQyeDAwcmZraWxsX3RvZ2dsZV9yYWRpbyh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKK3N0YXRpYyB2b2lkIHJ0MngwMHJma2lsbF9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWlmICh1bmxpa2VseSghcnQyeDAwZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIE9ubHkgY29udGludWUgaWYgdGhlcmUgYXJlIGVuYWJsZWQgaW50ZXJmYWNlcy4KLQkgKi8KLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9TVEFSVEVELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOwotCi0JaWYgKHN0YXRlID09IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpIHsKLQkJSU5GTyhydDJ4MDBkZXYsICJSRktJTEwgZXZlbnQ6IGVuYWJsaW5nIHJhZGlvLlxuIik7Ci0JCWNsZWFyX2JpdChERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJcmV0dmFsID0gcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwotCX0gZWxzZSBpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCkgewotCQlJTkZPKHJ0MngwMGRldiwgIlJGS0lMTCBldmVudDogZGlzYWJsaW5nIHJhZGlvLlxuIik7Ci0JCXNldF9iaXQoREVWSUNFX1NUQVRFX0RJU0FCTEVEX1JBRElPX0hXLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JCXJ0MngwMGxpYl9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7Ci0JfSBlbHNlIHsKLQkJV0FSTklORyhydDJ4MDBkZXYsICJSRktJTEwgZXZlbnQ6IHVua25vd24gc3RhdGUgJWQuXG4iLCBzdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBydDJ4MDByZmtpbGxfZ2V0X3N0YXRlKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKLQotCS8qCi0JICogcmZraWxsX3BvbGwgcmVwb3J0cyAxIHdoZW4gdGhlIGtleSBoYXMgYmVlbiBwcmVzc2VkIGFuZCB0aGUKLQkgKiByYWRpbyBzaG91bGQgYmUgYmxvY2tlZC4KLQkgKi8KLQkqc3RhdGUgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpID8KLQkgICAgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCA6IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwcmZraWxsX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQotCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIHJma2lsbF93b3JrLndvcmspOwotCWVudW0gcmZraWxsX3N0YXRlIHN0YXRlOworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBwb2xsX2Rldi0+cHJpdmF0ZTsKKwlpbnQgc3RhdGUsIG9sZF9zdGF0ZTsKIAogCWlmICghdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkgfHwKIAkgICAgIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIFBvbGwgbGF0ZXN0IHN0YXRlIGFuZCByZXBvcnQgaXQgdG8gcmZraWxsIHdobyBzaG91bGQgc29ydAotCSAqIG91dCBpZiB0aGUgc3RhdGUgc2hvdWxkIGJlIHRvZ2dsZWQgb3Igbm90LgorCSAqIFBvbGwgbGF0ZXN0IHN0YXRlLCBpZiB0aGUgc3RhdGUgaXMgZGlmZmVyZW50IHRoZW4gdGhlIHByZXZpb3VzIHN0YXRlLAorCSAqIHdlIHNob3VsZCBnZW5lcmF0ZSBhbiBpbnB1dCBldmVudC4KIAkgKi8KLQlpZiAoIXJ0MngwMHJma2lsbF9nZXRfc3RhdGUocnQyeDAwZGV2LCAmc3RhdGUpKQotCQlyZmtpbGxfZm9yY2Vfc3RhdGUocnQyeDAwZGV2LT5yZmtpbGwsIHN0YXRlKTsKKwlzdGF0ZSA9ICEhcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmZraWxsX3BvbGwocnQyeDAwZGV2KTsKKwlvbGRfc3RhdGUgPSAhIXRlc3RfYml0KFJGS0lMTF9TVEFURV9CTE9DS0VELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwogCi0JcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKLQkJCSAgICZydDJ4MDBkZXYtPnJma2lsbF93b3JrLCBSRktJTExfUE9MTF9JTlRFUlZBTCk7CisJaWYgKG9sZF9zdGF0ZSAhPSBzdGF0ZSkgeworCQlpbnB1dF9yZXBvcnRfc3dpdGNoKHBvbGxfZGV2LT5pbnB1dCwgU1dfUkZLSUxMX0FMTCwgc3RhdGUpOworCQljaGFuZ2VfYml0KFJGS0lMTF9TVEFURV9CTE9DS0VELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOworCX0KIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEwMCw4ICs1Nyw4IEBACiAJICAgIHRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKLQlpZiAocmZraWxsX3JlZ2lzdGVyKHJ0MngwMGRldi0+cmZraWxsKSkgewotCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcmZraWxsIGhhbmRsZXIuXG4iKTsKKwlpZiAoaW5wdXRfcmVnaXN0ZXJfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2RldikpIHsKKwkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHBvbGxlZCBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA5LDEwICs2NiwxMCBAQAogCiAJLyoKIAkgKiBGb3JjZSBpbml0aWFsIHBvbGwgd2hpY2ggd2lsbCBkZXRlY3QgdGhlIGluaXRpYWwgZGV2aWNlIHN0YXRlLAotCSAqIGFuZCBjb3JyZWN0bHkgc2VuZHMgdGhlIHNpZ25hbCB0byB0aGUgcmZraWxsIGxheWVyIGFib3V0IHRoaXMKKwkgKiBhbmQgY29ycmVjdGx5IHNlbmRzIHRoZSBzaWduYWwgdG8gdGhlIGlucHV0IGxheWVyIGFib3V0IHRoaXMKIAkgKiBzdGF0ZS4KIAkgKi8KLQlydDJ4MDByZmtpbGxfcG9sbCgmcnQyeDAwZGV2LT5yZmtpbGxfd29yay53b3JrKTsKKwlydDJ4MDByZmtpbGxfcG9sbChydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEyMSw1MiArNzgsNTAgQEAKIAkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+cmZraWxsX3dvcmspOwotCi0JcmZraWxsX3VucmVnaXN0ZXIocnQyeDAwZGV2LT5yZmtpbGwpOworCWlucHV0X3VucmVnaXN0ZXJfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7CiAKIAlfX2NsZWFyX2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aXBoeV9kZXYocnQyeDAwZGV2LT5ody0+d2lwaHkpOworCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldjsKIAotCWlmICh0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQorCWlmICh0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpIHx8CisJICAgICF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuOwogCi0JcnQyeDAwZGV2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2LCBSRktJTExfVFlQRV9XTEFOKTsKLQlpZiAoIXJ0MngwMGRldi0+cmZraWxsKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByZmtpbGwgaGFuZGxlci5cbiIpOworCXBvbGxfZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOworCWlmICghcG9sbF9kZXYpIHsKKwkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBvbGxlZCBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAorCXBvbGxfZGV2LT5wcml2YXRlID0gcnQyeDAwZGV2OworCXBvbGxfZGV2LT5wb2xsID0gcnQyeDAwcmZraWxsX3BvbGw7CisJcG9sbF9kZXYtPnBvbGxfaW50ZXJ2YWwgPSBSRktJTExfUE9MTF9JTlRFUlZBTDsKKworCXBvbGxfZGV2LT5pbnB1dC0+bmFtZSA9IHJ0MngwMGRldi0+b3BzLT5uYW1lOworCXBvbGxfZGV2LT5pbnB1dC0+cGh5cyA9IHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpOworCXBvbGxfZGV2LT5pbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCXBvbGxfZGV2LT5pbnB1dC0+aWQudmVuZG9yID0gMHgxODE0OworCXBvbGxfZGV2LT5pbnB1dC0+aWQucHJvZHVjdCA9IHJ0MngwMGRldi0+Y2hpcC5ydDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnZlcnNpb24gPSBydDJ4MDBkZXYtPmNoaXAucmV2OworCXBvbGxfZGV2LT5pbnB1dC0+ZGV2LnBhcmVudCA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJcG9sbF9kZXYtPmlucHV0LT5ldmJpdFswXSA9IEJJVChFVl9TVyk7CisJcG9sbF9kZXYtPmlucHV0LT5zd2JpdFswXSA9IEJJVChTV19SRktJTExfQUxMKTsKKworCXJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2ID0gcG9sbF9kZXY7CisKIAlfX3NldF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKLQotCXJ0MngwMGRldi0+cmZraWxsLT5uYW1lID0gcnQyeDAwZGV2LT5vcHMtPm5hbWU7Ci0JcnQyeDAwZGV2LT5yZmtpbGwtPmRhdGEgPSBydDJ4MDBkZXY7Ci0JcnQyeDAwZGV2LT5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHJ0MngwMHJma2lsbF90b2dnbGVfcmFkaW87Ci0JaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7Ci0JCXJ0MngwMGRldi0+cmZraWxsLT5nZXRfc3RhdGUgPSBydDJ4MDByZmtpbGxfZ2V0X3N0YXRlOwotCQlydDJ4MDBkZXYtPnJma2lsbC0+c3RhdGUgPQotCQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmZraWxsX3BvbGwocnQyeDAwZGV2KSA/Ci0JCQkgICAgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCA6IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0JfSBlbHNlIHsKLQkJcnQyeDAwZGV2LT5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKLQl9Ci0KLQlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5yZmtpbGxfd29yaywgcnQyeDAwcmZraWxsX3BvbGwpOwotCi0JcmV0dXJuOwogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JaWYgKCF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQorCWlmICghX190ZXN0X2FuZF9jbGVhcl9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwKKwkJCQkgICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCiAJCXJldHVybjsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5yZmtpbGxfd29yayk7Ci0KLQlyZmtpbGxfZnJlZShydDJ4MDBkZXYtPnJma2lsbCk7Ci0JcnQyeDAwZGV2LT5yZmtpbGwgPSBOVUxMOworCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7CisJcnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IDBiMjlkNzYuLjdkNTBjYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOTYsNiArMjk2LDQxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfa2lja190eF9xdWV1ZSk7CiAKK3ZvaWQgcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcWlkKTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXY7CisJdW5zaWduZWQgaW50IGk7CisJYm9vbCBraWxsX2d1YXJkOworCisJLyoKKwkgKiBXaGVuIGtpbGxpbmcgdGhlIGJlYWNvbiBxdWV1ZSwgd2UgbXVzdCBhbHNvIGtpbGwKKwkgKiB0aGUgYmVhY29uIGd1YXJkIGJ5dGUuCisJICovCisJa2lsbF9ndWFyZCA9CisJICAgIChxaWQgPT0gUUlEX0JFQUNPTikgJiYKKwkgICAgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKTsKKworCS8qCisJICogQ2FuY2VsIGFsbCBlbnRyaWVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgeworCQllbnRyeV9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQl1c2Jfa2lsbF91cmIoZW50cnlfcHJpdi0+dXJiKTsKKworCQkvKgorCQkgKiBLaWxsIGd1YXJkaWFuIHVyYiAoaWYgcmVxdWlyZWQgYnkgZHJpdmVyKS4KKwkJICovCisJCWlmIChraWxsX2d1YXJkKSB7CisJCQliY25fcHJpdiA9IHF1ZXVlLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKKwkJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlKTsKKwogLyoKICAqIFJYIGRhdGEgaGFuZGxlcnMuCiAgKi8KQEAgLTMzOCwzNSArMzczLDE0IEBACiAgKi8KIHZvaWQgcnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXY7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXY7Ci0Jc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwotCXVuc2lnbmVkIGludCBpOwotCiAJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX1JYX0NPTlRST0wsIDAsIDAsCiAJCQkJICAgIFJFR0lTVEVSX1RJTUVPVVQpOwogCiAJLyoKLQkgKiBDYW5jZWwgYWxsIHF1ZXVlcy4KKwkgKiBUaGUgVVNCIHZlcnNpb24gb2Yga2lsbF90eF9xdWV1ZSBhbHNvIHdvcmtzCisJICogb24gdGhlIFJYIHF1ZXVlLgogCSAqLwotCXF1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpIHsKLQkJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7Ci0JCQllbnRyeV9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQkJdXNiX2tpbGxfdXJiKGVudHJ5X3ByaXYtPnVyYik7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEtpbGwgZ3VhcmRpYW4gdXJiIChpZiByZXF1aXJlZCBieSBkcml2ZXIpLgotCSAqLwotCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPmJjbi0+bGltaXQ7IGkrKykgewotCQliY25fcHJpdiA9IHJ0MngwMGRldi0+YmNuLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKLQkJaWYgKGJjbl9wcml2LT5ndWFyZGlhbl91cmIpCi0JCQl1c2Jfa2lsbF91cmIoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYik7Ci0JfQorCXJ0MngwMGRldi0+b3BzLT5saWItPmtpbGxfdHhfcXVldWUocnQyeDAwZGV2LCBRSURfUlgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKaW5kZXggMmJkNGFjOC4uYmQyZDU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQxOSw2ICs0MTksMTcgQEAKIHZvaWQgcnQyeDAwdXNiX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpOwogCisvKioKKyAqIHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlIC0gS2lsbCBkYXRhIHF1ZXVlCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgorICogQHFpZDogRGF0YSBxdWV1ZSB0byBraWxsCisgKgorICogVGhpcyB3aWxsIHdhbGsgdGhyb3VnaCBhbGwgZW50cmllcyBvZiB0aGUgcXVldWUgYW5kIGtpbGwgYWxsCisgKiBwcmV2aW91c2x5IGtpY2tlZCBmcmFtZXMgYmVmb3JlIHRoZXkgY2FuIGJlIHNlbmQuCisgKi8KK3ZvaWQgcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkKTsKKwogLyoKICAqIERldmljZSBpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKaW5kZXggOTg3ZTg5MC4uMmNhOGI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTIzLDkgKzEyMyw2IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTE0NiwxMiArMTQzLDYgQEAKIAltdXRleF91bmxvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIH0KIAotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gcnQ2MXBjaV9sZWRfYnJpZ2h0bmVzcygpCi0gKiBtYWtlIGdjYyBoYXBweSBieSBwbGFjaW5nIHRoaXMgZnVuY3Rpb24gaW5zaWRlIHRoZQotICogc2FtZSBpZmRlZiBzdGF0ZW1lbnQgYXMgdGhlIGNhbGxlci4KLSAqLwogc3RhdGljIHZvaWQgcnQ2MXBjaV9tY3VfcmVxdWVzdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCWNvbnN0IHU4IGNvbW1hbmQsIGNvbnN0IHU4IHRva2VuLAogCQkJCWNvbnN0IHU4IGFyZzAsIGNvbnN0IHU4IGFyZzEpCkBAIC0xODAsNyArMTcxLDYgQEAKIAltdXRleF91bmxvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogfQotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KIAogc3RhdGljIHZvaWQgcnQ2MXBjaV9lZXByb21yZWdpc3Rlcl9yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKIHsKQEAgLTk2Nyw2ICs5NTcsNTAgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAxMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCA1KTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBTT0ZUX1JFU0VUX0NTUiwgMHgwMDAwMDAwNSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElPX0NOVExfQ1NSLCAweDAwMDAwMDFjKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUENJX1VTRUNfQ1NSLCAweDAwMDAwMDYwKTsKKworCQlydDYxcGNpX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1NMRUVQLCAweGZmLCAwLCAwKTsKKwl9IGVsc2UgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgU09GVF9SRVNFVF9DU1IsIDB4MDAwMDAwMDcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJT19DTlRMX0NTUiwgMHgwMDAwMDAxOCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBDSV9VU0VDX0NTUiwgMHgwMDAwMDAyMCk7CisKKwkJcnQ2MXBjaV9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9XQUtFVVAsIDB4ZmYsIDAsIDApOworCX0KK30KKwogc3RhdGljIHZvaWQgcnQ2MXBjaV9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTk4NCw2ICsxMDE4LDggQEAKIAkJcnQ2MXBjaV9jb25maWdfcmV0cnlfbGltaXQocnQyeDAwZGV2LCBsaWJjb25mKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKQogCQlydDYxcGNpX2NvbmZpZ19kdXJhdGlvbihydDJ4MDBkZXYsIGxpYmNvbmYpOworCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykKKwkJcnQ2MXBjaV9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogLyoKQEAgLTEwMDcsMjEgKzEwNDMsMjggQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSMV9GQUxTRV9DQ0FfRVJST1IpOwogfQogCi1zdGF0aWMgdm9pZCBydDYxcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQ2MXBjaV9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4MjApOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAweDIwOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgIT0gdmdjX2xldmVsKSB7CisJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHZnY19sZXZlbCk7CisJCXF1YWwtPnZnY19sZXZlbCA9IHZnY19sZXZlbDsKKwkJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NjFwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQ2MXBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JaW50IHJzc2kgPSBydDJ4MDBfZ2V0X2xpbmtfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQl1OCByMTc7CisJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCkKK3sKIAl1OCB1cF9ib3VuZDsKIAl1OCBsb3dfYm91bmQ7CiAKLQlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMTcsICZyMTcpOwotCiAJLyoKIAkgKiBEZXRlcm1pbmUgcjE3IGJvdW5kcy4KIAkgKi8KQEAgLTEwNTEsMzggKzEwOTQsMzIgQEAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgdmVyeSBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC0zNSkgewotCQlpZiAocjE3ICE9IDB4NjApCi0JCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDYwKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtMzUpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHg2MCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3Igc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNTgpIHsKLQkJaWYgKHIxNyAhPSB1cF9ib3VuZCkKLQkJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNTgpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIG1pZGRsZS1zaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC02NikgewotCQlsb3dfYm91bmQgKz0gMHgxMDsKLQkJaWYgKHIxNyAhPSBsb3dfYm91bmQpCi0JCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC02NikgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDEwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBtaWQtUjE3IGZvciBtaWRkbGUgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNzQpIHsKLQkJbG93X2JvdW5kICs9IDB4MDg7Ci0JCWlmIChyMTcgIT0gbG93X2JvdW5kKQotCQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgbG93X2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNzQpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgbG93X2JvdW5kICsgMHgwOCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwOTAsMTIgKzExMjcsMTIgQEAKIAkgKiBTcGVjaWFsIGNhc2U6IENoYW5nZSB1cF9ib3VuZCBiYXNlZCBvbiB0aGUgcnNzaS4KIAkgKiBMb3dlciB1cF9ib3VuZCB3aGVuIHJzc2kgaXMgd2Vha2VyIHRoZW4gLTc0IGRCbS4KIAkgKi8KLQl1cF9ib3VuZCAtPSAyICogKC03NCAtIHJzc2kpOworCXVwX2JvdW5kIC09IDIgKiAoLTc0IC0gcXVhbC0+cnNzaSk7CiAJaWYgKGxvd19ib3VuZCA+IHVwX2JvdW5kKQogCQl1cF9ib3VuZCA9IGxvd19ib3VuZDsKIAotCWlmIChyMTcgPiB1cF9ib3VuZCkgewotCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB1cF9ib3VuZCk7CisJaWYgKHF1YWwtPnZnY19sZXZlbCA+IHVwX2JvdW5kKSB7CisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHVwX2JvdW5kKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTEwNSwxNSArMTE0MiwxMCBAQAogCSAqIHIxNyBkb2VzIG5vdCB5ZXQgZXhjZWVkIHVwcGVyIGxpbWl0LCBjb250aW51ZSBhbmQgYmFzZQogCSAqIHRoZSByMTcgdHVuaW5nIG9uIHRoZSBmYWxzZSBDQ0EgY291bnQuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByMTcgPCB1cF9ib3VuZCkgewotCQlpZiAoKytyMTcgPiB1cF9ib3VuZCkKLQkJCXIxNyA9IHVwX2JvdW5kOwotCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0gZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhIDwgMTAwICYmIHIxNyA+IGxvd19ib3VuZCkgewotCQlpZiAoLS1yMTcgPCBsb3dfYm91bmQpCi0JCQlyMTcgPSBsb3dfYm91bmQ7Ci0JCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfQorCWlmICgocXVhbC0+ZmFsc2VfY2NhID4gNTEyKSAmJiAocXVhbC0+dmdjX2xldmVsIDwgdXBfYm91bmQpKQorCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCArK3F1YWwtPnZnY19sZXZlbCk7CisJZWxzZSBpZiAoKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCkgJiYgKHF1YWwtPnZnY19sZXZlbCA+IGxvd19ib3VuZCkpCisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIC0tcXVhbC0+dmdjX2xldmVsKTsKIH0KIAogLyoKQEAgLTExNDEsMjUgKzExNzMsMzcgQEAKIAlyZXR1cm4gZndfbmFtZTsKIH0KIAotc3RhdGljIHUxNiBydDYxcGNpX2dldF9maXJtd2FyZV9jcmMoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ2MXBjaV9jaGVja19maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CisJdTE2IGZ3X2NyYzsKIAl1MTYgY3JjOwogCiAJLyoKLQkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICogT25seSBzdXBwb3J0IDhrYiBmaXJtd2FyZSBmaWxlcy4KKwkgKi8KKwlpZiAobGVuICE9IDgxOTIpCisJCXJldHVybiBGV19CQURfTEVOR1RIOworCisJLyoKIAkgKiBUaGUgbGFzdCAyIGJ5dGVzIGluIHRoZSBmaXJtd2FyZSBhcnJheSBhcmUgdGhlIGNyYyBjaGVja3N1bSBpdHNlbGYsCiAJICogdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBuZXZlciBwYXNzIHRob3NlIDIgYnl0ZXMgdG8gdGhlIGNyYwogCSAqIGFsZ29yaXRobS4KIAkgKi8KKwlmd19jcmMgPSAoZGF0YVtsZW4gLSAyXSA8PCA4IHwgZGF0YVtsZW4gLSAxXSk7CisKKwkvKgorCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKi8KIAljcmMgPSBjcmNfaXR1X3QoMCwgZGF0YSwgbGVuIC0gMik7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCi0JcmV0dXJuIGNyYzsKKwlyZXR1cm4gKGZ3X2NyYyA9PSBjcmMpID8gRldfT0sgOiBGV19CQURfQ1JDOwogfQogCi1zdGF0aWMgaW50IHJ0NjFwY2lfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB2b2lkICpkYXRhLAotCQkJCSBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDYxcGNpX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CiAJaW50IGk7CiAJdTMyIHJlZzsKQEAgLTE2NTYsMjQgKzE3MDAsMTAgQEAKIAogc3RhdGljIHZvaWQgcnQ2MXBjaV9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JdTMyIHJlZzsKLQorCS8qCisJICogRGlzYWJsZSBwb3dlcgorCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMCwgMHgwMDAwMTgxOCk7Ci0KLQkvKgotCSAqIERpc2FibGUgc3luY2hyb25pc2F0aW9uLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgMCk7Ci0KLQkvKgotCSAqIENhbmNlbCBSWCBhbmQgVFguCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMCwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMSwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMiwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMywgMSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgcnQ2MXBjaV9zZXRfc3RhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgZW51bSBkZXZfc3RhdGUgc3RhdGUpCkBAIC0xODEyLDcgKzE4NDIsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVRSWV9NT0RFLCAmdHhkZXNjLT5mbGFncykpOwpAQCAtMTg5Niw2ICsxOTI2LDI0IEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJdTMyIHJlZzsKKworCWlmIChxaWQgPT0gUUlEX0JFQUNPTikgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIDApOworCQlyZXR1cm47CisJfQorCisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMCwgKHFpZCA9PSBRSURfQUNfQkUpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMxLCAocWlkID09IFFJRF9BQ19CSykpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzIsIChxaWQgPT0gUUlEX0FDX1ZJKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMywgKHFpZCA9PSBRSURfQUNfVk8pKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKK30KKwogLyoKICAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKICAqLwpAQCAtMjE5NSw3ICsyMjQzLDggQEAKIAlpZiAod29yZCA9PSAweGZmZmYpIHsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0VOQUJMRV9ESVZFUlNJVFksIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfVFhfRElWRVJTSVRZLCAwKTsKLQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX1RYX1JYX0ZJWEVELCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX1JYX0ZJWEVELCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX1RYX0ZJWEVELCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9CRywgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DQVJEQlVTX0FDQ0VMLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9BLCAwKTsKQEAgLTIzMzksMjQgKzIzODgsMTAgQEAKIAkgKi8KIAlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOSkgJiYKIAkgICAgIXRlc3RfYml0KENPTkZJR19ET1VCTEVfQU5URU5OQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7Ci0JCXN3aXRjaCAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19UWF9SWF9GSVhFRCkpIHsKLQkJY2FzZSAwOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQjsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0E7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQjsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0I7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQTsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0E7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9IEFOVEVOTkFfQTsKLQkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPSBBTlRFTk5BX0I7Ci0JCQlicmVhazsKLQkJfQorCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0KKwkJICAgIEFOVEVOTkFfQSArIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfUlhfRklYRUQpOworCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0KKwkJICAgIEFOVEVOTkFfQiAtIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfVFhfRklYRUQpOwogCiAJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1RYX0RJVkVSU0lUWSkpCiAJCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9TV19ESVZFUlNJVFk7CkBAIC0yNTM0LDcgKzI1NjksOSBAQAogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KIAkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CkBAIC0yNjMzLDYgKzI2NzAsNyBAQAogCXN0cnVjdCBydDJ4MDBfZmllbGQzMiBmaWVsZDsKIAlpbnQgcmV0dmFsOwogCXUzMiByZWc7CisJdTMyIG9mZnNldDsKIAogCS8qCiAJICogRmlyc3QgcGFzcyB0aGUgY29uZmlndXJhdGlvbiB0aHJvdWdoIHJ0MngwMGxpYiwgdGhhdCB3aWxsCkBAIC0yNjQ0LDI0ICsyNjgyLDIzIEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAorCS8qCisJICogV2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCByZWdpc3RlciBpbml0aWFsaXphdGlvbgorCSAqIGZvciBXTU0gcXVldWVzLworCSAqLworCWlmIChxdWV1ZV9pZHggPj0gNCkKKwkJcmV0dXJuIDA7CisKIAlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlX2lkeCk7CiAKIAkvKiBVcGRhdGUgV01NIFRYT1AgcmVnaXN0ZXIgKi8KLQlpZiAocXVldWVfaWR4IDwgMikgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CisJb2Zmc2V0ID0gQUNfVFhPUF9DU1IwICsgKHNpemVvZih1MzIpICogKCEhKHF1ZXVlX2lkeCAmIDIpKSk7CisJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggJiAxKSAqIDE2OworCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CiAKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCByZWcpOwotCX0gZWxzZSBpZiAocXVldWVfaWR4IDwgNCkgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAtIDIpICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7Ci0KLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCByZWcpOwotCX0KKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwogCiAJLyogVXBkYXRlIFdNTSByZWdpc3RlcnMgKi8KIAlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogNDsKQEAgLTI3MTcsNyArMjc1NCw3IEBACiAJLmlycV9oYW5kbGVyCQk9IHJ0NjFwY2lfaW50ZXJydXB0LAogCS5wcm9iZV9odwkJPSBydDYxcGNpX3Byb2JlX2h3LAogCS5nZXRfZmlybXdhcmVfbmFtZQk9IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX25hbWUsCi0JLmdldF9maXJtd2FyZV9jcmMJPSBydDYxcGNpX2dldF9maXJtd2FyZV9jcmMsCisJLmNoZWNrX2Zpcm13YXJlCQk9IHJ0NjFwY2lfY2hlY2tfZmlybXdhcmUsCiAJLmxvYWRfZmlybXdhcmUJCT0gcnQ2MXBjaV9sb2FkX2Zpcm13YXJlLAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHBjaV9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX3VuaW5pdGlhbGl6ZSwKQEAgLTI3MzIsNiArMjc2OSw3IEBACiAJLndyaXRlX3R4X2RhdGEJCT0gcnQyeDAwcGNpX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDYxcGNpX3dyaXRlX2JlYWNvbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDYxcGNpX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQ2MXBjaV9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDYxcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfc2hhcmVkX2tleQk9IHJ0NjFwY2lfY29uZmlnX3NoYXJlZF9rZXksCiAJLmNvbmZpZ19wYWlyd2lzZV9rZXkJPSBydDYxcGNpX2NvbmZpZ19wYWlyd2lzZV9rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaAppbmRleCA2NWZlMzMzLi40MWU4OTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01MCw4ICs1MCw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMTAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDgwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpAQCAtODgsOCArODgsMTAgQEAKIAogLyoKICAqIFNPRlRfUkVTRVRfQ1NSCisgKiBGT1JDRV9DTE9DS19PTjogSG9zdCBmb3JjZSBNQUMgY2xvY2sgT04KICAqLwogI2RlZmluZSBTT0ZUX1JFU0VUX0NTUgkJCTB4MDAxMAorI2RlZmluZSBTT0ZUX1JFU0VUX0NTUl9GT1JDRV9DTE9DS19PTglGSUVMRDMyKDB4MDAwMDAwMDIpCiAKIC8qCiAgKiBNQ1VfSU5UX1NPVVJDRV9DU1I6IE1DVSBpbnRlcnJ1cHQgc291cmNlL21hc2sgcmVnaXN0ZXIuCkBAIC0xMDU0LDggKzEwNTYsMTAgQEAKIAogLyoKICAqIElPX0NOVExfQ1NSCisgKiBSRl9QUzogU2V0IFJGIGludGVyZmFjZSB2YWx1ZSB0byBwb3dlciBzYXZlCiAgKi8KICNkZWZpbmUgSU9fQ05UTF9DU1IJCQkweDM0OTgKKyNkZWZpbmUgSU9fQ05UTF9DU1JfUkZfUFMJCUZJRUxEMzIoMHgwMDAwMDAwNCkKIAogLyoKICAqIFVBUlRfSU5UX1NPVVJDRV9DU1IKQEAgLTExODYsNyArMTE5MCw4IEBACiAjZGVmaW5lIEVFUFJPTV9OSUMJCQkweDAwMTEKICNkZWZpbmUgRUVQUk9NX05JQ19FTkFCTEVfRElWRVJTSVRZCUZJRUxEMTYoMHgwMDAxKQogI2RlZmluZSBFRVBST01fTklDX1RYX0RJVkVSU0lUWQkJRklFTEQxNigweDAwMDIpCi0jZGVmaW5lIEVFUFJPTV9OSUNfVFhfUlhfRklYRUQJCUZJRUxEMTYoMHgwMDBjKQorI2RlZmluZSBFRVBST01fTklDX1JYX0ZJWEVECQlGSUVMRDE2KDB4MDAwNCkKKyNkZWZpbmUgRUVQUk9NX05JQ19UWF9GSVhFRAkJRklFTEQxNigweDAwMDgpCiAjZGVmaW5lIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0JHCUZJRUxEMTYoMHgwMDEwKQogI2RlZmluZSBFRVBST01fTklDX0NBUkRCVVNfQUNDRUwJRklFTEQxNigweDAwMjApCiAjZGVmaW5lIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0EJRklFTEQxNigweDAwNDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCBjZWZlZTFiLi4yNGZkZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMjIsOSArMTIyLDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtMTg2LDYgKzE4MywxOCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKK3N0YXRpYyBpbnQgcnQ3M3VzYl9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXUzMiByZWc7CisKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMywgJnJlZyk7CisJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxM19CSVQ3KTsKK30KKyNlbHNlCisjZGVmaW5lIHJ0NzN1c2JfcmZraWxsX3BvbGwJTlVMTAorI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLworCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQ3M3VzYl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCkBAIC04NDQsNiArODUzLDQ0IEBACiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDczdXNiX2NvbmZpZ19wcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKK3sKKwllbnVtIGRldl9zdGF0ZSBzdGF0ZSA9CisJICAgIChsaWJjb25mLT5jb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSA/CisJCVNUQVRFX1NMRUVQIDogU1RBVEVfQVdBS0U7CisJdTMyIHJlZzsKKworCWlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUCkgeworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5iZWFjb25faW50IC0gMTApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1RCQ05fQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9XQUtFVVBfTEFURU5DWSwgNSk7CisKKwkJLyogV2UgbXVzdCBmaXJzdCBkaXNhYmxlIGF1dG93YWtlIGJlZm9yZSBpdCBjYW4gYmUgZW5hYmxlZCAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDEpOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAorCQkJCQkgICAgVVNCX01PREVfU0xFRVAsIFJFR0lTVEVSX1RJTUVPVVQpOworCX0gZWxzZSB7CisJCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9ERVZJQ0VfTU9ERSwgMCwKKwkJCQkJICAgIFVTQl9NT0RFX1dBS0VVUCwgUkVHSVNURVJfVElNRU9VVCk7CisKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTEsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0RFTEFZX0FGVEVSX1RCQ04sIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1RCQ05fQkVGT1JFX1dBS0VVUCwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCAwKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCX0KK30KKwogc3RhdGljIHZvaWQgcnQ3M3VzYl9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTg2MSw2ICs5MDgsOCBAQAogCQlydDczdXNiX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0NzN1c2JfY29uZmlnX2R1cmF0aW9uKHJ0MngwMGRldiwgbGliY29uZik7CisJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQlydDczdXNiX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtODg0LDIxICs5MzMsMjggQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSMV9GQUxTRV9DQ0FfRVJST1IpOwogfQogCi1zdGF0aWMgdm9pZCBydDczdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQ3M3VzYl9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4MjApOwotCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAweDIwOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgIT0gdmdjX2xldmVsKSB7CisJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHZnY19sZXZlbCk7CisJCXF1YWwtPnZnY19sZXZlbCA9IHZnY19sZXZlbDsKKwkJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NzN1c2JfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQ3M3VzYl9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JaW50IHJzc2kgPSBydDJ4MDBfZ2V0X2xpbmtfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQl1OCByMTc7CisJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCkKK3sKIAl1OCB1cF9ib3VuZDsKIAl1OCBsb3dfYm91bmQ7CiAKLQlydDczdXNiX2JicF9yZWFkKHJ0MngwMGRldiwgMTcsICZyMTcpOwotCiAJLyoKIAkgKiBEZXRlcm1pbmUgcjE3IGJvdW5kcy4KIAkgKi8KQEAgLTkxMSwxMCArOTY3LDEwIEBACiAJCQl1cF9ib3VuZCArPSAweDEwOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHJzc2kgPiAtODIpIHsKKwkJaWYgKHF1YWwtPnJzc2kgPiAtODIpIHsKIAkJCWxvd19ib3VuZCA9IDB4MWM7CiAJCQl1cF9ib3VuZCA9IDB4NDA7Ci0JCX0gZWxzZSBpZiAocnNzaSA+IC04NCkgeworCQl9IGVsc2UgaWYgKHF1YWwtPnJzc2kgPiAtODQpIHsKIAkJCWxvd19ib3VuZCA9IDB4MWM7CiAJCQl1cF9ib3VuZCA9IDB4MjA7CiAJCX0gZWxzZSB7CkBAIC05MzgsMzcgKzk5NCwzMiBAQAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciB2ZXJ5IHNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPiAtMzUpIHsKLQkJaWYgKHIxNyAhPSAweDYwKQotCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHg2MCk7CisJaWYgKHF1YWwtPnJzc2kgPiAtMzUpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHg2MCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3Igc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNTgpIHsKLQkJaWYgKHIxNyAhPSB1cF9ib3VuZCkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNTgpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIG1pZGRsZS1zaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC02NikgewotCQlsb3dfYm91bmQgKz0gMHgxMDsKLQkJaWYgKHIxNyAhPSBsb3dfYm91bmQpCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC02NikgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDEwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBtaWQtUjE3IGZvciBtaWRkbGUgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNzQpIHsKLQkJaWYgKHIxNyAhPSAobG93X2JvdW5kICsgMHgxMCkpCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQgKyAweDA4KTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNzQpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgbG93X2JvdW5kICsgMHgwOCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk3NiwxMiArMTAyNywxMiBAQAogCSAqIFNwZWNpYWwgY2FzZTogQ2hhbmdlIHVwX2JvdW5kIGJhc2VkIG9uIHRoZSByc3NpLgogCSAqIExvd2VyIHVwX2JvdW5kIHdoZW4gcnNzaSBpcyB3ZWFrZXIgdGhlbiAtNzQgZEJtLgogCSAqLwotCXVwX2JvdW5kIC09IDIgKiAoLTc0IC0gcnNzaSk7CisJdXBfYm91bmQgLT0gMiAqICgtNzQgLSBxdWFsLT5yc3NpKTsKIAlpZiAobG93X2JvdW5kID4gdXBfYm91bmQpCiAJCXVwX2JvdW5kID0gbG93X2JvdW5kOwogCi0JaWYgKHIxNyA+IHVwX2JvdW5kKSB7Ci0JCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+dmdjX2xldmVsID4gdXBfYm91bmQpIHsKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCkBAIC05OTEsMTcgKzEwNDIsMTIgQEAKIAkgKiByMTcgZG9lcyBub3QgeWV0IGV4Y2VlZCB1cHBlciBsaW1pdCwgY29udGludWUgYW5kIGJhc2UKIAkgKiB0aGUgcjE3IHR1bmluZyBvbiB0aGUgZmFsc2UgQ0NBIGNvdW50LgogCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPiA1MTIgJiYgcjE3IDwgdXBfYm91bmQpIHsKLQkJcjE3ICs9IDQ7Ci0JCWlmIChyMTcgPiB1cF9ib3VuZCkKLQkJCXIxNyA9IHVwX2JvdW5kOwotCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0gZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhIDwgMTAwICYmIHIxNyA+IGxvd19ib3VuZCkgewotCQlyMTcgLT0gNDsKLQkJaWYgKHIxNyA8IGxvd19ib3VuZCkKLQkJCXIxNyA9IGxvd19ib3VuZDsKLQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQl9CisJaWYgKChxdWFsLT5mYWxzZV9jY2EgPiA1MTIpICYmIChxdWFsLT52Z2NfbGV2ZWwgPCB1cF9ib3VuZCkpCisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsCisJCQkJbWluX3QodTgsIHF1YWwtPnZnY19sZXZlbCArIDQsIHVwX2JvdW5kKSk7CisJZWxzZSBpZiAoKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCkgJiYgKHF1YWwtPnZnY19sZXZlbCA+IGxvd19ib3VuZCkpCisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsCisJCQkJbWF4X3QodTgsIHF1YWwtPnZnY19sZXZlbCAtIDQsIGxvd19ib3VuZCkpOwogfQogCiAvKgpAQCAtMTAxMiwyNSArMTA1OCwzNyBAQAogCXJldHVybiBGSVJNV0FSRV9SVDI1NzE7CiB9CiAKLXN0YXRpYyB1MTYgcnQ3M3VzYl9nZXRfZmlybXdhcmVfY3JjKGNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHJ0NzN1c2JfY2hlY2tfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogeworCXUxNiBmd19jcmM7CiAJdTE2IGNyYzsKIAogCS8qCi0JICogVXNlIHRoZSBjcmMgaXR1LXQgYWxnb3JpdGhtLgorCSAqIE9ubHkgc3VwcG9ydCAya2IgZmlybXdhcmUgZmlsZXMuCisJICovCisJaWYgKGxlbiAhPSAyMDQ4KQorCQlyZXR1cm4gRldfQkFEX0xFTkdUSDsKKworCS8qCiAJICogVGhlIGxhc3QgMiBieXRlcyBpbiB0aGUgZmlybXdhcmUgYXJyYXkgYXJlIHRoZSBjcmMgY2hlY2tzdW0gaXRzZWxmLAogCSAqIHRoaXMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbmV2ZXIgcGFzcyB0aG9zZSAyIGJ5dGVzIHRvIHRoZSBjcmMKIAkgKiBhbGdvcml0aG0uCiAJICovCisJZndfY3JjID0gKGRhdGFbbGVuIC0gMl0gPDwgOCB8IGRhdGFbbGVuIC0gMV0pOworCisJLyoKKwkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICovCiAJY3JjID0gY3JjX2l0dV90KDAsIGRhdGEsIGxlbiAtIDIpOwogCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAotCXJldHVybiBjcmM7CisJcmV0dXJuIChmd19jcmMgPT0gY3JjKSA/IEZXX09LIDogRldfQkFEX0NSQzsKIH0KIAotc3RhdGljIGludCBydDczdXNiX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCQkgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ3M3VzYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogewogCXVuc2lnbmVkIGludCBpOwogCWludCBzdGF0dXM7CkBAIC0xNDQ5LDcgKzE1MDcsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVRSWV9NT0RFLCAmdHhkZXNjLT5mbGFncykpOwpAQCAtMTgxNiw2ICsxODc0LDE0IEBACiAJCV9fc2V0X2JpdChDT05GSUdfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKKwkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCisJICovCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCisJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKKwkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLworCisJLyoKIAkgKiBSZWFkIGZyZXF1ZW5jeSBvZmZzZXQuCiAJICovCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0ZSRVEsICZlZXByb20pOwpAQCAtMjAyMCw3ICsyMDg2LDkgQEAKIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CiAJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCSAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBUWERfREVTQ19TSVpFOwogCiAJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwpAQCAtMjEyMSw2ICsyMTg5LDcgQEAKIAlzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgZmllbGQ7CiAJaW50IHJldHZhbDsKIAl1MzIgcmVnOworCXUzMiBvZmZzZXQ7CiAKIAkvKgogCSAqIEZpcnN0IHBhc3MgdGhlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBydDJ4MDBsaWIsIHRoYXQgd2lsbApAQCAtMjEzMiwyNCArMjIwMSwyMyBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKKwkvKgorCSAqIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24KKwkgKiBmb3IgV01NIHF1ZXVlcy8KKwkgKi8KKwlpZiAocXVldWVfaWR4ID49IDQpCisJCXJldHVybiAwOworCiAJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxdWV1ZV9pZHgpOwogCiAJLyogVXBkYXRlIFdNTSBUWE9QIHJlZ2lzdGVyICovCi0JaWYgKHF1ZXVlX2lkeCA8IDIpIHsKLQkJZmllbGQuYml0X29mZnNldCA9IHF1ZXVlX2lkeCAqIDE2OwotCQlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OworCW9mZnNldCA9IEFDX1RYT1BfQ1NSMCArIChzaXplb2YodTMyKSAqICghIShxdWV1ZV9pZHggJiAyKSkpOworCWZpZWxkLmJpdF9vZmZzZXQgPSAocXVldWVfaWR4ICYgMSkgKiAxNjsKKwlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OwogCi0JCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCAmcmVnKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7Ci0JCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMCwgcmVnKTsKLQl9IGVsc2UgaWYgKHF1ZXVlX2lkeCA8IDQpIHsKLQkJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggLSAyKSAqIDE2OwotCQlmaWVsZC5iaXRfbWFzayA9IDB4ZmZmZiA8PCBmaWVsZC5iaXRfb2Zmc2V0OwotCi0JCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCAmcmVnKTsKLQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7Ci0JCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgcmVnKTsKLQl9CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBvZmZzZXQsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOworCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIG9mZnNldCwgcmVnKTsKIAogCS8qIFVwZGF0ZSBXTU0gcmVnaXN0ZXJzICovCiAJZmllbGQuYml0X29mZnNldCA9IHF1ZXVlX2lkeCAqIDQ7CkBAIC0yMTcwLDEzICsyMjM4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qCi0gKiBNYWM4MDIxMSBkZW1hbmRzIGdldF90c2YgbXVzdCBiZSBhdG9taWMuCi0gKiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBmb3IgcnQ3M3VzYiBzaW5jZSBhbGwgcmVnaXN0ZXIgYWNjZXNzCi0gKiBmdW5jdGlvbnMgcmVxdWlyZSBzbGVlcGluZy4gVW50aWxsIG1hYzgwMjExIG5vIGxvbmdlciBuZWVkcwotICogZ2V0X3RzZiB0byBiZSBhdG9taWMsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkLgotICovCiBzdGF0aWMgdTY0IHJ0NzN1c2JfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CkBAIC0yMTkwLDkgKzIyNTEsNiBAQAogCiAJcmV0dXJuIHRzZjsKIH0KLSNlbHNlCi0jZGVmaW5lIHJ0NzN1c2JfZ2V0X3RzZglOVUxMCi0jZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0NzN1c2JfbWFjODAyMTFfb3BzID0gewogCS50eAkJCT0gcnQyeDAwbWFjX3R4LApAQCAtMjIxNCwxMiArMjI3MiwxMyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0NzN1c2JfcnQyeDAwX29wcyA9IHsKIAkucHJvYmVfaHcJCT0gcnQ3M3VzYl9wcm9iZV9odywKIAkuZ2V0X2Zpcm13YXJlX25hbWUJPSBydDczdXNiX2dldF9maXJtd2FyZV9uYW1lLAotCS5nZXRfZmlybXdhcmVfY3JjCT0gcnQ3M3VzYl9nZXRfZmlybXdhcmVfY3JjLAorCS5jaGVja19maXJtd2FyZQkJPSBydDczdXNiX2NoZWNrX2Zpcm13YXJlLAogCS5sb2FkX2Zpcm13YXJlCQk9IHJ0NzN1c2JfbG9hZF9maXJtd2FyZSwKIAkuaW5pdGlhbGl6ZQkJPSBydDJ4MDB1c2JfaW5pdGlhbGl6ZSwKIAkudW5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl91bmluaXRpYWxpemUsCiAJLmNsZWFyX2VudHJ5CQk9IHJ0MngwMHVzYl9jbGVhcl9lbnRyeSwKIAkuc2V0X2RldmljZV9zdGF0ZQk9IHJ0NzN1c2Jfc2V0X2RldmljZV9zdGF0ZSwKKwkucmZraWxsX3BvbGwJCT0gcnQ3M3VzYl9yZmtpbGxfcG9sbCwKIAkubGlua19zdGF0cwkJPSBydDczdXNiX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0NzN1c2JfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQ3M3VzYl9saW5rX3R1bmVyLApAQCAtMjIyOCw2ICsyMjg3LDcgQEAKIAkud3JpdGVfYmVhY29uCQk9IHJ0NzN1c2Jfd3JpdGVfYmVhY29uLAogCS5nZXRfdHhfZGF0YV9sZW4JPSBydDczdXNiX2dldF90eF9kYXRhX2xlbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDczdXNiX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0NzN1c2JfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQ3M3VzYl9jb25maWdfc2hhcmVkX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0NzN1c2JfY29uZmlnX3BhaXJ3aXNlX2tleSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCmluZGV4IDQ2ZTE0MDUuLmM4MDE2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTUwLDggKzUwLDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwODAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCkBAIC0yNjcsNiArMjY3LDE5IEBACiAgKiBNQUNfQ1NSMTM6IEdQSU8uCiAgKi8KICNkZWZpbmUgTUFDX0NTUjEzCQkJMHgzMDM0CisjZGVmaW5lIE1BQ19DU1IxM19CSVQwCQkJRklFTEQzMigweDAwMDAwMDAxKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMQkJCUZJRUxEMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDIJCQlGSUVMRDMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQzCQkJRklFTEQzMigweDAwMDAwMDA4KQorI2RlZmluZSBNQUNfQ1NSMTNfQklUNAkJCUZJRUxEMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDUJCQlGSUVMRDMyKDB4MDAwMDAwMjApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ2CQkJRklFTEQzMigweDAwMDAwMDQwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUNwkJCUZJRUxEMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDgJCQlGSUVMRDMyKDB4MDAwMDAxMDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ5CQkJRklFTEQzMigweDAwMDAwMjAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMTAJCQlGSUVMRDMyKDB4MDAwMDA0MDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxMQkJCUZJRUxEMzIoMHgwMDAwMDgwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDEyCQkJRklFTEQzMigweDAwMDAxMDAwKQogCiAvKgogICogTUFDX0NTUjE0OiBMRUQgY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKaW5kZXggM2IxZTFjMi4uOTcxOGY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKQEAgLTEwMCw2ICsxMDAsOCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXUzMiByeF9jb25mOwogCXN0cnVjdCB1c2JfYW5jaG9yIGFuY2hvcmVkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7CiAJdTE2IHR4cHdyX2Jhc2U7CiAJdTggYXNpY19yZXY7CiAJdTggaXNfcnRsODE4N2I7CkBAIC0xMTcsNyArMTE5LDcgQEAKIAlzdHJ1Y3QgewogCQlfX2xlNjQgYnVmOwogCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlOwotCX0gYl90eF9zdGF0dXM7CisJfSBiX3R4X3N0YXR1czsgLyogVGhpcyBxdWV1ZSBpcyB1c2VkIGJ5IGJvdGggLWIgYW5kIG5vbi1iIGRldmljZXMgKi8KIH07CiAKIHZvaWQgcnRsODE4N193cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKaW5kZXggZjQ3NDdhMS4uZmQ4MTg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwpAQCAtMTg5LDI1ICsxODksMzMgQEAKIAkJCQkJICBzaXplb2Yoc3RydWN0IHJ0bDgxODdfdHhfaGRyKSk7CiAJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKGluZm8pOwogCi0JaWYgKCF1cmItPnN0YXR1cyAmJgotCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCi0JICAgIHByaXYtPmlzX3J0bDgxODdiKSB7Ci0JCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKKwlpZiAoISh1cmItPnN0YXR1cykgJiYgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgeworCQlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKIAotCQkvKiBxdWV1ZSBpcyAiZnVsbCIsIGRpc2NhcmQgbGFzdCBpdGVtcyAqLwotCQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpID4gNSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKm9sZF9za2I7CisJCQkvKiBxdWV1ZSBpcyAiZnVsbCIsIGRpc2NhcmQgbGFzdCBpdGVtcyAqLworCQkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSA+IDUpIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYjsKIAotCQkJZGV2X2RiZygmcHJpdi0+dWRldi0+ZGV2LAotCQkJCSJ0cmFuc21pdCBzdGF0dXMgcXVldWUgZnVsbFxuIik7CisJCQkJZGV2X2RiZygmcHJpdi0+dWRldi0+ZGV2LAorCQkJCQkidHJhbnNtaXQgc3RhdHVzIHF1ZXVlIGZ1bGxcbiIpOwogCi0JCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKLQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgb2xkX3NrYik7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJiAhdXJiLT5zdGF0dXMpCisJCQkJb2xkX3NrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7CisJCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBvbGRfc2tiKTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKIAkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJfQorCX0KKwlpZiAocHJpdi0+aXNfcnRsODE4N2IpCiAJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKKwllbHNlIHsKKwkJLyogUmV0cnkgaW5mb3JtYXRpb24gZm9yIHRoZSBSVEk4MTg3IGlzIG9ubHkgYXZhaWxhYmxlIGJ5CisJCSAqIHJlYWRpbmcgYSByZWdpc3RlciBpbiB0aGUgZGV2aWNlLiBXZSBhcmUgaW4gaW50ZXJydXB0IG1vZGUKKwkJICogaGVyZSwgdGh1cyBxdWV1ZSB0aGUgc2tiIGFuZCBmaW5pc2ggb24gYSB3b3JrIHF1ZXVlLiAqLworCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhody0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywgMCk7CiAJfQogfQogCkBAIC00MDMsNyArNDExLDcgQEAKIAlzdHJ1Y3QgcnRsODE4N19yeF9pbmZvICppbmZvOwogCWludCByZXQgPSAwOwogCi0Jd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3F1ZXVlKSA8IDgpIHsKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcXVldWUpIDwgMTYpIHsKIAkJc2tiID0gX19kZXZfYWxsb2Nfc2tiKFJUTDgxODdfTUFYX1JYLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFza2IpIHsKIAkJCXJldCA9IC1FTk9NRU07CkBAIC02NTcsNyArNjY1LDcgQEAKIAogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPklOVF9USU1FT1VULCAwKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPldQQV9DT05GLCAwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIDB4ODEpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgMCk7CiAKIAkvLyBUT0RPOiBzZXQgUkVTUF9SQVRFIGFuZCBCUlNSIHByb3Blcmx5CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SRVNQX1JBVEUsICg4IDw8IDQpIHwgMCk7CkBAIC03NzcsOSArNzg1LDYgQEAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0FHQ19DVEwsIHJlZyk7CiAKIAlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkZFMCwgMHgwRkZGLCAxKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSyk7Ci0JcmVnIHw9IFJUTDgxOFhfUkFURV9GQUxMQkFDS19FTkFCTEU7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLLCByZWcpOwogCiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QkVBQ09OX0lOVEVSVkFMLCAxMDApOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkFUSU1fV05ELCAyKTsKQEAgLTg2Nyw2ICs4NzIsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcnRsODE4N193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwkvKiBUaGUgUlRMODE4NyByZXR1cm5zIHRoZSByZXRyeSBjb3VudCB0aHJvdWdoIHJlZ2lzdGVyIDB4RkZGQS4gSW4KKwkgKiBhZGRpdGlvbiwgaXQgYXBwZWFycyB0byBiZSBhIGN1bXVsYXRpdmUgcmV0cnkgY291bnQsIG5vdCB0aGUKKwkgKiB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgVFggcGFja2V0LiBXaGVuIG11bHRpcGxlIFRYIGVudHJpZXMgYXJlCisJICogcXVldWVkLCB0aGUgcmV0cnkgY291bnQgd2lsbCBiZSB2YWxpZCBmb3IgdGhlIGxhc3Qgb25lIGluIHRoZSBxdWV1ZS4KKwkgKiBUaGUgImVycm9yIiBzaG91bGQgbm90IG1hdHRlciBmb3IgcHVycG9zZXMgb2YgcmF0ZSBzZXR0aW5nLiAqLworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0bDgxODdfcHJpdiwKKwkJCQkgICAgd29yay53b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcHJpdi0+ZGV2OworCXN0YXRpYyB1MTYgcmV0cnk7CisJdTE2IHRtcDsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXRtcCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgKF9fbGUxNiAqKTB4RkZGQSk7CisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKm9sZF9za2I7CisKKwkJb2xkX3NrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7CisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKG9sZF9za2IpOworCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSB0bXAgLSByZXRyeSArIDE7CisJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIG9sZF9za2IpOworCX0KKwlyZXRyeSA9IHRtcDsKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworfQorCiBzdGF0aWMgaW50IHJ0bDgxODdfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CkBAIC04ODEsNiArOTE0LDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAogCWluaXRfdXNiX2FuY2hvcigmcHJpdi0+YW5jaG9yZWQpOworCXByaXYtPmRldiA9IGRldjsKIAogCWlmIChwcml2LT5pc19ydGw4MTg3YikgewogCQlyZWcgPSBSVEw4MThYX1JYX0NPTkZfTUdNVCB8CkBAIC05NDgsNiArOTgyLDcgQEAKIAlyZWcgfD0gUlRMODE4WF9DTURfVFhfRU5BQkxFOwogCXJlZyB8PSBSVEw4MThYX0NNRF9SWF9FTkFCTEU7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DTUQsIHJlZyk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndvcmssIHJ0bDgxODdfd29yayk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAogCXJldHVybiAwOwpAQCAtOTc4LDYgKzEwMTMsOCBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCiAJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmcHJpdi0+YW5jaG9yZWQpOworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yayk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIH0KIApAQCAtOTg2LDE5ICsxMDIzLDIxIEBACiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlpbnQgaTsKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWdvdG8gZXhpdDsKIAogCXN3aXRjaCAoY29uZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJZ290byBleGl0OwogCX0KIAotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXJldCA9IDA7CiAJcHJpdi0+dmlmID0gY29uZi0+dmlmOwogCiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKQEAgLTEwMDcsOCArMTA0Niw5IEBACiAJCQkJICgodTggKiljb25mLT5tYWNfYWRkcilbaV0pOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiAKK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTg3X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKaW5kZXggNzAxNWYyNC4uZjk1MjA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCkBAIC05NTAsNiArOTUwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgKnN0cmlwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhSQ1UpCiB7CiAJcmN1X3JlYWRfbG9jaygpOwogCXJldHVybiAqcG9zID8gc3RyaXBfZ2V0X2lkeCgqcG9zIC0gMSkgOiBTRVFfU1RBUlRfVE9LRU47CkBAIC05NzMsNiArOTc0LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgc3RyaXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcyhSQ1UpCiB7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC0xMTI1LDcgKzExMjcsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RyaXBfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RyaXBfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBzdHJpcF9zZXFfc3RhcnQsCiAJLm5leHQgID0gc3RyaXBfc2VxX25leHQsCiAJLnN0b3AgID0gc3RyaXBfc2VxX3N0b3AsCkBAIC0yNDc1LDYgKzI0NzcsMTYgQEAKIAkucmVidWlsZCA9IHN0cmlwX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0cmlwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAk9IHN0cmlwX29wZW5fbG93LAorCS5uZG9fc3RvcCAJPSBzdHJpcF9jbG9zZV9sb3csCisJLm5kb19zdGFydF94bWl0ID0gc3RyaXBfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHN0cmlwX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2dldF9zdGF0cwk9IHN0cmlwX2dldF9zdGF0cywKKwkubmRvX2NoYW5nZV9tdHUgPSBzdHJpcF9jaGFuZ2VfbXR1LAorfTsKKwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgRERJIHdoZW4gdGhlCiAgKiAoZHluYW1pY2FsbHkgYXNzaWduZWQpIGRldmljZSBpcyByZWdpc3RlcmVkCkBAIC0yNTAxLDE4ICsyNTEzLDggQEAKIAlkZXYtPmRldl9hZGRyWzBdID0gMDsKIAlkZXYtPmFkZHJfbGVuID0gc2l6ZW9mKE1ldHJpY29tQWRkcmVzcyk7CiAKLQkvKgotCSAqIFBvaW50ZXJzIHRvIGludGVyZmFjZSBzZXJ2aWNlIHJvdXRpbmVzLgotCSAqLwotCi0JZGV2LT5vcGVuID0gc3RyaXBfb3Blbl9sb3c7Ci0JZGV2LT5zdG9wID0gc3RyaXBfY2xvc2VfbG93OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc3RyaXBfeG1pdDsKLQlkZXYtPmhlYWRlcl9vcHMgPSAmc3RyaXBfaGVhZGVyX29wczsKLQotCWRldi0+c2V0X21hY19hZGRyZXNzID0gc3RyaXBfc2V0X21hY19hZGRyZXNzOwotCWRldi0+Z2V0X3N0YXRzID0gc3RyaXBfZ2V0X3N0YXRzOwotCWRldi0+Y2hhbmdlX210dSA9IHN0cmlwX2NoYW5nZV9tdHU7CisJZGV2LT5oZWFkZXJfb3BzID0gJnN0cmlwX2hlYWRlcl9vcHMsCisJZGV2LT5uZXRkZXZfb3BzID0gJnN0cmlwX25ldGRldl9vcHM7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKaW5kZXggODMyNjc5My4uYjcyODU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwpAQCAtNDAsMTEgKzQwLDExIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHd2X3BzYV90b19pcnEodTggaXJxdmFsKQogewotCWludCBpcnE7CisJaW50IGk7CiAKLQlmb3IgKGlycSA9IDA7IGlycSA8IEFSUkFZX1NJWkUoaXJxdmFscyk7IGlycSsrKQotCQlpZiAoaXJxdmFsc1tpcnFdID09IGlycXZhbCkKLQkJCXJldHVybiBpcnE7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJxdmFscyk7IGkrKykKKwkJaWYgKGlycXZhbHNbaV0gPT0gaXJxdmFsKQorCQkJcmV0dXJuIGk7CiAKIAlyZXR1cm4gLTE7CiB9CkBAIC00MjgxLDggKzQyODEsNyBAQAogCiAKIAkvKiBMb29wIG9uIGFsbCBwb3NzaWJsZSBiYXNlIGFkZHJlc3Nlcy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpb1srK2ldICE9IDApICYmIChpIDwgQVJSQVlfU0laRShpbykpKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW8pICYmIGlvW2ldICE9IDA7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKG5ldF9sb2NhbCkpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IGRlNzE3ZjguLmU1NWIzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTgzOCw5ICs4MzgsOCBAQAogICAgIH0KICAgd2hpbGUoKChzdGF0dXMgJiBTUjNfRVhFQ19TVEFURV9NQVNLKSAhPSBTUjNfRVhFQ19JRExFKSAmJiAoc3Bpbi0tID4gMCkpOwogCi0gIC8qIElmIHRoZSBpbnRlcnJ1cHQgaGFzbid0IGJlIHBvc3RlZCAqLwotICBpZihzcGluIDw9IDApCi0gICAgeworICAvKiBJZiB0aGUgaW50ZXJydXB0IGhhc24ndCBiZWVuIHBvc3RlZCAqLworICBpZiAoc3BpbiA8IDApIHsKICNpZmRlZiBERUJVR19JTlRFUlJVUFRfRVJST1IKICAgICAgIHByaW50ayhLRVJOX0lORk8gInd2XzgyNTkzX2NtZDogJXMgdGltZW91dCAocHJldmlvdXMgY29tbWFuZCksIHN0YXR1cyAweCUwMnhcbiIsCiAJICAgICBzdHIsIHN0YXR1cyk7CkBAIC0xMzUzLDIxICsxMzUyLDYgQEAKICAqIG9yIHdpcmVsZXNzIGV4dGVuc2lvbnMKICAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogR2V0IHRoZSBjdXJyZW50IGV0aGVybmV0IHN0YXRpc3RpY3MuIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotICogY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqIFVzZWQgd2hlbiB0aGUgdXNlciByZWFkIC9wcm9jL25ldC9kZXYKLSAqLwotc3RhdGljIGVuX3N0YXRzCSoKLXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQotewotI2lmZGVmIERFQlVHX0lPQ1RMX1RSQUNFCi0gIHByaW50ayhLRVJOX0RFQlVHICIlczogPD53YXZlbGFuX2dldF9zdGF0cygpXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0KLSAgcmV0dXJuKCYoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0cyk7Ci19CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC0yODE4LDcgKzI4MDIsNyBAQAogICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHd2X3BhY2tldF9yZWFkKCk6IGNvdWxkIG5vdCBhbGxvY19za2IoJWQsIEdGUF9BVE9NSUMpXG4iLAogCSAgICAgZGV2LT5uYW1lLCBza3NpemUpOwogI2VuZGlmCi0gICAgICBscC0+c3RhdHMucnhfZHJvcHBlZCsrOworICAgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICAvKgogICAgICAgICogTm90IG9ubHkgZG8gd2Ugd2FudCB0byByZXR1cm4gaGVyZSwgYnV0IHdlIGFsc28gbmVlZCB0byBkcm9wIHRoZQogICAgICAgICogcGFja2V0IG9uIHRoZSBmbG9vciB0byBjbGVhciB0aGUgaW50ZXJydXB0LgpAQCAtMjg3OCw4ICsyODYyLDggQEAKICAgbmV0aWZfcngoc2tiKTsKIAogICAvKiBLZWVwIHN0YXRzIHVwIHRvIGRhdGUgKi8KLSAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLSAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKKyAgZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisgIGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tzaXplOwogCiAjaWZkZWYgREVCVUdfUlhfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8LXd2X3BhY2tldF9yZWFkKClcbiIsIGRldi0+bmFtZSk7CkBAIC0yOTgxLDEzICsyOTY1LDEzIEBACiAgICAgICAvKiBDaGVjayBzdGF0dXMgKi8KICAgICAgIGlmKChzdGF0dXMgJiBSWF9SQ1ZfT0spICE9IFJYX1JDVl9PSykKIAl7Ci0JICBscC0+c3RhdHMucnhfZXJyb3JzKys7CisJICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCSAgaWYoc3RhdHVzICYgUlhfTk9fU0ZEKQotCSAgICBscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJICBpZihzdGF0dXMgJiBSWF9DUkNfRVJSKQotCSAgICBscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCSAgICBkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkgIGlmKHN0YXR1cyAmIFJYX09WUlJVTikKLQkgICAgbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfcGFja2V0X3JjdigpOiBwYWNrZXQgbm90IHJlY2VpdmVkIG9rLCBzdGF0dXMgPSAweCV4XG4iLApAQCAtMzA3NCw3ICszMDU4LDcgQEAKICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKICAgLyogS2VlcCBzdGF0cyB1cCB0byBkYXRlICovCi0gIGxwLT5zdGF0cy50eF9ieXRlcyArPSBsZW5ndGg7CisgIGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuZ3RoOwogCiAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5zcGlubG9jaywgZmxhZ3MpOwogCkBAIC00MTA3LDcgKzQwOTEsNyBAQAogCSAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB3dl9pbnRlcnJ1cHQoKTogcmVjZWl2ZSBidWZmZXIgb3ZlcmZsb3dcbiIsCiAJCSAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgotCSAgICAgIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCSAgICAgIGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkgICAgICBscC0+b3ZlcnJ1bm5pbmcgPSAxOwogICAgICAgCSAgICB9CiAKQEAgLTQxNTYsNyArNDE0MCw3IEBACiAJICAvKiBDaGVjayBmb3IgcG9zc2libGUgZXJyb3JzICovCiAJICBpZigodHhfc3RhdHVzICYgVFhfT0spICE9IFRYX09LKQogCSAgICB7Ci0JICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCSAgICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9GUlRMKQogCQl7CkBAIC00MTcxLDE0ICs0MTU1LDE0IEBACiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9pbnRlcnJ1cHQoKTogRE1BIHVuZGVycnVuXG4iLAogCQkJIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9MT1NUX0NUUykKIAkJewogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBubyBDVFNcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJICBkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9MT1NUX0NSUykKIAkJewpAQCAtNDE4NiwxNCArNDE3MCwxNCBAQAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IG5vIGNhcnJpZXJcbiIsCiAJCQkgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJfQogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0hSVF9CRUFUKQogCQl7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IGhlYXJ0IGJlYXRcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQkJICBscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfREVGRVIpCiAJCXsKQEAgLTQyMTcsMTQgKzQyMDEsMTQgQEAKICNlbmRpZgogCQkgICAgICBpZighKHR4X3N0YXR1cyAmIFRYX05DT0xfTUFTSykpCiAJCQl7Ci0JCQkgIGxwLT5zdGF0cy5jb2xsaXNpb25zICs9IDB4MTA7CisJCQkgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAweDEwOwogCQkJfQogCQkgICAgfQogCQl9CiAJICAgIH0JLyogaWYoISh0eF9zdGF0dXMgJiBUWF9PSykpICovCiAKLQkgIGxwLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgJiBUWF9OQ09MX01BU0spOwotCSAgbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkgIGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAodHhfc3RhdHVzICYgVFhfTkNPTF9NQVNLKTsKKwkgIGRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCiAJICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJICBvdXRiKENSMF9JTlRfQUNLIHwgT1AwX05PUCwgTENDUihiYXNlKSk7CS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KQEAgLTQ0NTIsNiArNDQzNiwxOSBAQAogICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB3YXZlbGFuX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSB3YXZlbGFuX29wZW4sCisJLm5kb19zdG9wCQk9IHdhdmVsYW5fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHdhdmVsYW5fcGFja2V0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdCwKKyNpZmRlZiBTRVRfTUFDX0FERFJFU1MKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHdhdmVsYW5fc2V0X21hY19hZGRyZXNzLAorI2VuZGlmCisJLm5kb190eF90aW1lb3V0CQk9IHdhdmVsYW5fd2F0Y2hkb2csCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIHdhdmVsYW5fYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKQEAgLTQ1MTIsMTcgKzQ1MDksNyBAQAogICBscC0+ZGV2ID0gZGV2OwogCiAgIC8qIHdhdmVsYW4gTkVUMyBjYWxsYmFja3MgKi8KLSAgZGV2LT5vcGVuID0gJndhdmVsYW5fb3BlbjsKLSAgZGV2LT5zdG9wID0gJndhdmVsYW5fY2xvc2U7Ci0gIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJndhdmVsYW5fcGFja2V0X3htaXQ7Ci0gIGRldi0+Z2V0X3N0YXRzID0gJndhdmVsYW5fZ2V0X3N0YXRzOwotICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdDsKLSNpZmRlZiBTRVRfTUFDX0FERFJFU1MKLSAgZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3M7Ci0jZW5kaWYJLyogU0VUX01BQ19BRERSRVNTICovCi0KLSAgLyogU2V0IHRoZSB3YXRjaGRvZyB0aW1lciAqLwotICBkZXYtPnR4X3RpbWVvdXQJPSAmd2F2ZWxhbl93YXRjaGRvZzsKKyAgZGV2LT5uZXRkZXZfb3BzID0gJndhdmVsYW5fbmV0ZGV2X29wczsKICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IFdBVENIRE9HX0pJRkZJRVM7CiAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCmluZGV4IDYyODE5MmQuLjcwNmZkMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaApAQCAtNTc2LDcgKzU3Niw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogU2hvcnRjdXRzICovCi10eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCWVuX3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd19zdGF0czsKIHR5cGVkZWYgc3RydWN0IGl3X3F1YWxpdHkJaXdfcXVhbDsKIHR5cGVkZWYgc3RydWN0IGl3X2ZyZXEJCWl3X2ZyZXE7CkBAIC01OTIsOCArNTkxLDYgQEAKICAqIEZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLCBMaW51eCBrZWVwIGRhdGEgaW4gdHdvIHN0cnVjdHVyZS4gImRldmljZSIKICAqIGtlZXAgdGhlIGdlbmVyaWMgZGF0YSAoc2FtZSBmb3JtYXQgZm9yIGV2ZXJ5Ym9keSkgYW5kICJuZXRfbG9jYWwiIGtlZXAKICAqIHRoZSBhZGRpdGlvbmFsIHNwZWNpZmljIGRhdGEuCi0gKiBOb3RlIHRoYXQgc29tZSBvZiB0aGlzIHNwZWNpZmljIGRhdGEgaXMgaW4gZmFjdCBnZW5lcmljIChlbl9zdGF0cywgZm9yCi0gKiBleGFtcGxlKS4KICAqLwogc3RydWN0IG5ldF9sb2NhbAogewpAQCAtNjAxLDcgKzU5OCw2IEBACiAgIHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2OwkJLyogUmV2ZXJzZSBsaW5rLi4uICovCiAgIHNwaW5sb2NrX3QJc3BpbmxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIChTTVApICovCiAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICoJbGluazsJCS8qIHBjbWNpYSBzdHJ1Y3R1cmUgKi8KLSAgZW5fc3RhdHMJc3RhdHM7CQkvKiBFdGhlcm5ldCBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwogICBpbnQJCW5yZXNldHM7CS8qIE51bWJlciBvZiBodyByZXNldHMgKi8KICAgdV9jaGFyCWNvbmZpZ3VyZWQ7CS8qIElmIGl0IGlzIGNvbmZpZ3VyZWQgKi8KICAgdV9jaGFyCXJlY29uZmlnXzgyNTkzOwkvKiBOZWVkIHRvIHJlY29uZmlndXJlIHRoZSBjb250cm9sbGVyICovCkBAIC02OTQsOCArNjkwLDYgQEAKIHN0YXRpYyB2b2lkCiAJd3ZfaW5pdF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBkaXNwbGF5IHN0YXJ0dXAgaW5mbyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCwgU1RBVFMgJiBSRUNPTkZJRyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgZW5fc3RhdHMJKgotCXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBHaXZlIHN0YXRzIC9wcm9jL25ldC9kZXYgKi8KIHN0YXRpYyBpd19zdGF0cyAqCiAJd2F2ZWxhbl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQQUNLRVQgUkVDRVBUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCmluZGV4IDU5YmIzYTUuLjhiY2UxYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCkBAIC02MDYsNyArNjA2LDcgQEAKIAl1OAkJCQlyZWdfZG9tYWluOwogCXU4CQkJCXZlcnNpb25bMl07CiAJc3RydWN0IHdsMzUwMV9zY2FuX2NvbmZpcm0JYnNzX3NldFsyMF07Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgCXN0YXRzOworCiAJc3RydWN0IGl3X3N0YXRpc3RpY3MJCXdzdGF0czsKIAlzdHJ1Y3QgaXdfc3B5X2RhdGEJCXNweV9kYXRhOwogCXN0cnVjdCBpd19wdWJsaWNfZGF0YQkJd2lyZWxlc3NfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggYzk5YTFiNi4uMWY2NGQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKQEAgLTExMSwxMiArMTEyLDYgQEAKICAqLwogc3RhdGljIGRldl9pbmZvX3Qgd2wzNTAxX2Rldl9pbmZvID0gIndsMzUwMV9jcyI7CiAKLXN0YXRpYyBpbnQgd2wzNTAxX2NoYW4yZnJlcVtdID0gewotCVswXSAgPSAyNDEyLCBbMV0gID0gMjQxNywgWzJdICA9IDI0MjIsIFszXSAgPSAyNDI3LCBbNF0gPSAyNDMyLAotCVs1XSAgPSAyNDM3LCBbNl0gID0gMjQ0MiwgWzddICA9IDI0NDcsIFs4XSAgPSAyNDUyLCBbOV0gPSAyNDU3LAotCVsxMF0gPSAyNDYyLCBbMTFdID0gMjQ2NywgWzEyXSA9IDI0NzIsIFsxM10gPSAyNDc3LAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CiAJaW50IG1pbiwgbWF4LCBkZWZsdDsKQEAgLTEwMDUsNyArMTAwMCw3IEBACiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jIGEgc2tfYnVmZiBvZiBzaXplICVkLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCXRoaXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJfSBlbHNlIHsKIAkJc2tiLT5kZXYgPSBkZXY7CiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIElQIGhlYWRlcnMgb24gMTYgYnl0ZXMgYm91bmRhcmllcyAqLwpAQCAtMTAxMyw4ICsxMDA4LDggQEAKIAkJd2wzNTAxX3JlY2VpdmUodGhpcywgc2tiLT5kYXRhLCBwa3RfbGVuKTsKIAkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwogCQlza2ItPnByb3RvY29sCT0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQl0aGlzLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXRoaXMtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CiB9CkBAIC0xMzE2LDcgKzEzMTEsNyBAQAogc3RhdGljIHZvaWQgd2wzNTAxX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0aGlzLT5zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIApAQCAtMTM1MSwxMSArMTM0NiwxMSBAQAogCWlmIChlbmFibGVkKQogCQl3bDM1MDFfdW5ibG9ja19pbnRlcnJ1cHQodGhpcyk7CiAJaWYgKHJjKSB7Ci0JCSsrdGhpcy0+c3RhdHMudHhfZHJvcHBlZDsKKwkJKytkZXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9IGVsc2UgewotCQkrK3RoaXMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCXRoaXMtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJa2ZyZWVfc2tiKHNrYik7CiAKIAkJaWYgKHRoaXMtPnR4X2J1ZmZlcl9jbnQgPCAyKQpAQCAtMTQwNSwxMyArMTQwMCw2IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqd2wzNTAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJnRoaXMtPnN0YXRzOwotfQotCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKndsMzUwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTUxMCw3ICsxNDk4LDcgQEAKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jd3JxdS0+ZnJlcS5tID0gd2wzNTAxX2NoYW4yZnJlcVt0aGlzLT5jaGFuIC0gMV0gKiAxMDAwMDA7CisJd3JxdS0+ZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKHRoaXMtPmNoYW4pICogMTAwMDAwOwogCXdycXUtPmZyZXEuZSA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODk1LDYgKzE4ODMsMTYgQEAKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gd2wzNTAxX2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgd2wzNTAxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHdsMzUwMV9vcGVuLAorCS5uZG9fc3RvcAkJPSB3bDM1MDFfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHdsMzUwMV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHdsMzUwMV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIHdsMzUwMV9hdHRhY2ggLSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlcgogICoKQEAgLTE5MjcsMTcgKzE5MjUsMTYgQEAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHdsMzUwMV9jYXJkKSk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0X2xpbms7Ci0JZGV2LT5vcGVuCQk9IHdsMzUwMV9vcGVuOwotCWRldi0+c3RvcAkJPSB3bDM1MDFfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSB3bDM1MDFfaGFyZF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dAkJPSB3bDM1MDFfdHhfdGltZW91dDsKKworCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZ3bDM1MDFfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gNSAqIEhaOwotCWRldi0+Z2V0X3N0YXRzCQk9IHdsMzUwMV9nZXRfc3RhdHM7CisKIAl0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0aGlzLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnRoaXMtPnNweV9kYXRhOwogCXRoaXMtPnBfZGV2ID0gcF9kZXY7CiAJZGV2LT53aXJlbGVzc19kYXRhCT0gJnRoaXMtPndpcmVsZXNzX2RhdGE7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycwk9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmd2wzNTAxX2hhbmRsZXJfZGVmOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMJPSAmd2wzNTAxX2hhbmRsZXJfZGVmOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlwX2Rldi0+cHJpdiA9IHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCmluZGV4IGI0NWMyN2QuLjliMjQ0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCkBAIC0zMjgsOCArMzI4LDggQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhW2RhdGFsZW4tMjRdLCAyKTsKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSwgbGVuKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOwotCQkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCXpkLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXpkLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJbmV0aWZfcngoc2tiKTsKIAkJCWdvdG8gcmVzdWJtaXQ7CiAJCX0KQEAgLTM4NCw4ICszODQsOCBAQAogCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhKzgsIGxlbik7CiAJCX0KIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgemQtPmRldik7Ci0JCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJemQtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQl6ZC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CiByZXN1Ym1pdDoKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCXN0cnVjdCB1cmIgKnVyYiA9IHpkLT50eF91cmI7CiAKIAlpZiAoIXpkLT5tYWNfZW5hYmxlZCB8fCB6ZC0+bW9uaXRvcikgewotCQl6ZC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KQEAgLTgxNywxMiArODE3LDEyIEBACiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih6ZC0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyKSB7Ci0JCXpkLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JemQtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQl6ZC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlrZnJlZV9za2Ioc2tiKTsKIApAQCAtODM4LDcgKzgzOCw3IEBACiAJZGV2X3dhcm4oJnpkLT51c2ItPmRldiwgIiVzOiBUWCB0aW1lb3V0LCBzaG9vdGluZyBkb3duIHVyYlxuIiwKIAkgICAgZGV2LT5uYW1lKTsKIAl1c2JfdW5saW5rX3VyYih6ZC0+dHhfdXJiKTsKLQl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkvKiBSZXN0YXJ0IHRoZSB0aW1lb3V0IHRvIHF1aWV0IHRoZSB3YXRjaGRvZzogKi8KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIH0KQEAgLTg2MSwxMyArODYxLDYgQEAKIAlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqemQxMjAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB6ZDEyMDEgKnpkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmemQtPnN0YXRzOwotfQotCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKnpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05MTksMTAgKzkxMiw5IEBACiAJaWYgKGZyZXEtPmUgPT0gMCkKIAkJY2hhbm5lbCA9IGZyZXEtPm07CiAJZWxzZSB7Ci0JCWlmIChmcmVxLT5tID49IDI0ODIpCi0JCQljaGFubmVsID0gMTQ7Ci0JCWlmIChmcmVxLT5tID49IDI0MDcpCi0JCQljaGFubmVsID0gKGZyZXEtPm0tMjQwNykvNTsKKwkJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcmVxLT5tKTsKKwkJaWYgKGNoYW5uZWwgPCAwKQorCQkJY2hhbm5lbCA9IDA7CiAJfQogCiAJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk9XTkNIQU5ORUwsIGNoYW5uZWwpOwpAQCAtMTcyNSw2ICsxNzE3LDE4IEBACiAJLmdldF93aXJlbGVzc19zdGF0cwk9IHpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHpkMTIwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB6ZDEyMDFfbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHpkMTIwMV9uZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gemQxMjAxX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gemQxMjAxX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB6ZDEyMDFfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgemQxMjAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CkBAIC0xNzc3LDE2ICsxNzgxLDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zdGFydDsKIAotCWRldi0+b3BlbiA9IHpkMTIwMV9uZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB6ZDEyMDFfbmV0X3N0b3A7Ci0JZGV2LT5nZXRfc3RhdHMgPSB6ZDEyMDFfZ2V0X3N0YXRzOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCSAgICAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJnpkMTIwMV9pd19oYW5kbGVyczsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnpkMTIwMV9uZXRkZXZfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmemQxMjAxX2l3X2hhbmRsZXJzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBaRDEyMDFfVFhfVElNRU9VVDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB6ZDEyMDFfdHhfdGltZW91dDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHpkMTIwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gemQxMjAxX3NldF9tYWNfYWRkcmVzczsKIAlzdHJjcHkoZGV2LT5uYW1lLCAid2xhbiVkIik7CiAKIAllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIsIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAppbmRleCAyMzVmMGVlLi5kZDdlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaApAQCAtMjYsNyArMjYsNiBAQAogCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CiAJaW50CQkJcmVtb3ZlZDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzCWl3c3RhdHM7CiAKIAlpbnQJCQllbmRwX2luOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGYxNTE5MTQuLjJjODEzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTE2MTYsMyArMTYxNiwyNCBAQAogCiAJcmV0dXJuIHpkX2lvd3JpdGUzMmEoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwogfQorCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKQoreworCWludCByOworCXN0YXRpYyBjb25zdCB6ZF9hZGRyX3QgYXdfcHRfYmlfYWRkcltdID0KKwkJeyBDUl9UU0ZfTE9XX1BBUlQsIENSX1RTRl9ISUdIX1BBUlQgfTsKKwl1MzIgdmFsdWVzWzJdOworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJciA9IHpkX2lvcmVhZDMydl9sb2NrZWQoY2hpcCwgdmFsdWVzLCAoY29uc3QgemRfYWRkcl90ICopYXdfcHRfYmlfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGF3X3B0X2JpX2FkZHIpKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlpZiAocikKKwkJcmV0dXJuIDA7CisKKwl0c2YgPSB2YWx1ZXNbMV07CisJdHNmID0gKHRzZiA8PCAzMikgfCB2YWx1ZXNbMF07CisKKwlyZXR1cm4gdHNmOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCmluZGV4IGY4YzA2MWEuLmVlNDI3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKQEAgLTk1MCw0ICs5NTAsNiBAQAogaW50IHpkX2NoaXBfc2V0X211bHRpY2FzdF9oYXNoKHN0cnVjdCB6ZF9jaGlwICpjaGlwLAogCSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHpkX21jX2hhc2ggKmhhc2gpOwogCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKTsKKwogI2VuZGlmIC8qIF9aRF9DSElQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKaW5kZXggNTIwMGRiNC4uNmFjNTk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKQEAgLTMzLDggKzMzLDEzIEBACiAjaWZkZWYgREVCVUcKICMgIGRlZmluZSBkZXZfZGJnX2YoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKIAkgIGRldl9wcmludGtfZihLRVJOX0RFQlVHLCBkZXYsIGZtdCwgIyMgYXJncykKKyMgIGRlZmluZSBkZXZfZGJnX2ZfbGltaXQoZGV2LCBmbXQsIGFyZ3MuLi4pIGRvIHsgXAorCWlmIChuZXRfcmF0ZWxpbWl0KCkpIFwKKwkJZGV2X3ByaW50a19mKEtFUk5fREVCVUcsIGRldiwgZm10LCAjIyBhcmdzKTsgXAorfSB3aGlsZSAoMCkKICNlbHNlCiAjICBkZWZpbmUgZGV2X2RiZ19mKGRldiwgZm10LCBhcmdzLi4uKSBkbyB7ICh2b2lkKShkZXYpOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIGRldl9kYmdfZl9saW1pdChkZXYsIGZtdCwgYXJncy4uLikgZG8geyAodm9pZCkoZGV2KTsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBERUJVRyAqLwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggODQ3MDU3ZC4uYzNhNTEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTE3MCwxMCArMTcwLDEwIEBACiAJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKIAlyID0gemRfcmVnMmFscGhhMihtYWMtPnJlZ2RvbWFpbiwgYWxwaGEyKTsKLQlpZiAoIXIpCi0JCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGFscGhhMik7CisJaWYgKHIpCisJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKLQlyID0gMDsKKwlyID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgYWxwaGEyKTsKIGRpc2FibGVfaW50OgogCXpkX2NoaXBfZGlzYWJsZV9pbnQoY2hpcCk7CiBvdXQ6CkBAIC03NzIsMTMgKzc3MiwyMyBAQAogCQkJaWYgKCFiZWFjb24pCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlyID0gemRfbWFjX2NvbmZpZ19iZWFjb24oaHcsIGJlYWNvbik7Ci0JCQlpZiAociA8IDApCi0JCQkJcmV0dXJuIHI7Ci0JCQlyID0gemRfc2V0X2JlYWNvbl9pbnRlcnZhbCgmbWFjLT5jaGlwLCBCQ05fTU9ERV9JQlNTIHwKLQkJCQkJaHctPmNvbmYuYmVhY29uX2ludCk7Ci0JCQlpZiAociA8IDApCi0JCQkJcmV0dXJuIHI7CiAJCQlrZnJlZV9za2IoYmVhY29uKTsKKworCQkJaWYgKHIgPCAwKQorCQkJCXJldHVybiByOworCQl9CisKKwkJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCkgeworCQkJdTMyIGludGVydmFsOworCisJCQlpZiAoY29uZi0+ZW5hYmxlX2JlYWNvbikKKwkJCQlpbnRlcnZhbCA9IEJDTl9NT0RFX0lCU1MgfCBody0+Y29uZi5iZWFjb25faW50OworCQkJZWxzZQorCQkJCWludGVydmFsID0gMDsKKworCQkJciA9IHpkX3NldF9iZWFjb25faW50ZXJ2YWwoJm1hYy0+Y2hpcCwgaW50ZXJ2YWwpOworCQkJaWYgKHIgPCAwKQorCQkJCXJldHVybiByOwogCQl9CiAJfSBlbHNlCiAJCWFzc29jaWF0ZWQgPSBpc192YWxpZF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKTsKQEAgLTc5NywxMCArODA3LDkgQEAKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpkX21hYywgcHJvY2Vzc19pbnRyKTsKIAogCWludF9zdGF0dXMgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKShtYWMtPmludHJfYnVmZmVyKzQpKTsKLQlpZiAoaW50X3N0YXR1cyAmIElOVF9DRkdfTkVYVF9CQ04pIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJJTlRfQ0ZHX05FWFRfQkNOXG4iKTsKLQl9IGVsc2UKKwlpZiAoaW50X3N0YXR1cyAmIElOVF9DRkdfTkVYVF9CQ04pCisJCWRldl9kYmdfZl9saW1pdCh6ZF9tYWNfZGV2KG1hYyksICJJTlRfQ0ZHX05FWFRfQkNOXG4iKTsKKwllbHNlCiAJCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJVbnN1cHBvcnRlZCBpbnRlcnJ1cHRcbiIpOwogCiAJemRfY2hpcF9lbmFibGVfaHdpbnQoJm1hYy0+Y2hpcCk7CkBAIC05MzAsNiArOTM5LDEyIEBACiAJfQogfQogCitzdGF0aWMgdTY0IHpkX29wX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKKwlyZXR1cm4gemRfY2hpcF9nZXRfdHNmKCZtYWMtPmNoaXApOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgemRfb3BzID0gewogCS50eAkJCT0gemRfb3BfdHgsCiAJLnN0YXJ0CQkJPSB6ZF9vcF9zdGFydCwKQEAgLTk0MCw2ICs5NTUsNyBAQAogCS5jb25maWdfaW50ZXJmYWNlCT0gemRfb3BfY29uZmlnX2ludGVyZmFjZSwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHpkX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSB6ZF9vcF9ic3NfaW5mb19jaGFuZ2VkLAorCS5nZXRfdHNmCQk9IHpkX29wX2dldF90c2YsCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICp6ZF9tYWNfYWxsb2NfaHcoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC05NzEsNyArOTg3LDcgQEAKIAlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJm1hYy0+YmFuZDsKIAogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAotCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQjsKKwkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOwogCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQogCQlCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCBjZDYxODRlLi45ZjEwMmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIH0KIAogc3RhdGljIGludCBuZXRmcm9udF90eF9zbG90X2F2YWlsYWJsZShzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnApCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkJeGVubmV0X2FsbG9jX3J4X2J1ZmZlcnMoZGV2KTsKIAkJbnAtPnJ4LnNyaW5nLT5yc3BfZXZlbnQgPSBucC0+cngucnNwX2NvbnMgKyAxOwogCQlpZiAoUklOR19IQVNfVU5DT05TVU1FRF9SRVNQT05TRVMoJm5wLT5yeCkpCi0JCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCX0KIAlzcGluX3VubG9ja19iaCgmbnAtPnJ4X2xvY2spOwogCkBAIC05NzksNyArOTc5LDcgQEAKIAogCQlSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVNQT05TRVMoJm5wLT5yeCwgbW9yZV90b19kbyk7CiAJCWlmICghbW9yZV90b19kbykKLQkJCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KQEAgLTEzMTcsNyArMTMxNyw3IEBACiAJCXhlbm5ldF90eF9idWZfZ2MoZGV2KTsKIAkJLyogVW5kZXIgdHhfbG9jazogcHJvdGVjdHMgYWNjZXNzIHRvIHJ4IHNoYXJlZC1yaW5nIGluZGV4ZXMuICovCiAJCWlmIChSSU5HX0hBU19VTkNPTlNVTUVEX1JFU1BPTlNFUygmbnAtPnJ4KSkKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPnR4X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3h0c29uaWMuYyBiL2RyaXZlcnMvbmV0L3h0c29uaWMuYwppbmRleCAwM2EzZjM0Li5hMTJhNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94dHNvbmljLmMKKysrIGIvZHJpdmVycy9uZXQveHRzb25pYy5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAogCWlmIChscC0+ZGVzY3JpcHRvcnMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciAiCi0JCQkJIiBkZXNjcmlwdG9ycy5cbiIsIGxwLT5kZXZpY2UtPmJ1c19pZCk7CisJCQkJIiBkZXNjcmlwdG9ycy5cbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCmluZGV4IDJmMTY0NWQuLjc0NzdmZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCkBAIC0xMDcsOSArMTA3LDkgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMDUgIDEvMDkvMjAwMSAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgotS0VSTl9JTkZPICIgICh1bm9mZmljaWFsIDIuNC54IHBvcnQsICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisgIEtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMDUgIDEvMDkvMjAwMSAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgorICBLRVJOX0lORk8gIiAgKHVub2ZmaWNpYWwgMi40LnggcG9ydCwgIiBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICIpXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQYWNrZXQgRW5naW5lcyBZZWxsb3dmaW4gRy1OSUMgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCBmMGIxNWM5Li4wYTY5OTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC0zNTgsNiArMzU4LDE3IEBACiAJICogbXVsdGljYXN0IGFkZHJlc3MgY29uZmlndXJlZCBpc24ndCBlcXVhbCB0byBJRkZfQUxMTVVMVEkgKi8KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB6bmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHpuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gem5ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gem5ldF9zZW5kX3BhY2tldCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHpuZXRfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSB6bmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIFRoZSBaLU5vdGUgcHJvYmUgaXMgcHJldHR5IGVhc3kuICBUaGUgTkVUSURCTEsgZXhpc3RzIGluIHRoZSBzYWZlLXRvLXByb2JlCiAgICBCSU9TIGFyZWEuICBXZSBqdXN0IHNjYW4gZm9yIHRoZSBzaWduYXR1cmUsIGFuZCBwdWxsIHRoZSB2aXRhbCBwYXJhbWV0ZXJzCiAgICBvdXQgb2YgdGhlIHN0cnVjdHVyZS4gKi8KQEAgLTQ0MCwxMSArNDUxLDcgQEAKIAl6bmV0LT50eF9lbmQgPSB6bmV0LT50eF9zdGFydCArIHpuZXQtPnR4X2J1Zl9sZW47CiAKIAkvKiBUaGUgWk5FVC1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZ6bmV0X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmem5ldF9zZW5kX3BhY2tldDsKLQlkZXYtPnN0b3AgPSAmem5ldF9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ6bmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB6bmV0X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnpuZXRfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKaW5kZXggYTEzYWJmNS4uODQ1MGY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCkBAIC0yMjUsNyArMjI1LDggQEAKIAogdm9pZCBjcHFocF9jcmVhdGVfZGVidWdmc19maWxlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKLQljdHJsLT5kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGN0cmwtPnBjaV9kZXYtPmRldi5idXNfaWQsIFNfSVJVR08sIHJvb3QsIGN0cmwsICZkZWJ1Z19vcHMpOworCWN0cmwtPmRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZGV2X25hbWUoJmN0cmwtPnBjaV9kZXYtPmRldiksCisJCQkJCSAgIFNfSVJVR08sIHJvb3QsIGN0cmwsICZkZWJ1Z19vcHMpOwogfQogCiB2b2lkIGNwcWhwX3JlbW92ZV9kZWJ1Z2ZzX2ZpbGVzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKaW5kZXggNDVlZmZjNS4uYjcyMWMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYworKysgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCkBAIC0yMCw3ICsyMCw3IEBACiAJdTggIGlydGVfbWFzazsKIH07CiAKLSNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiBzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11ICpnZXRfb25lX2ZyZWVfaXJxXzJfaW9tbXUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlvbW11OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKaW5kZXggZmMxZGU0Ni4uOTAwMTMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCkBAIC00NjgsMTMgKzQ2OCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MXgwMF9kcnZfcGNtY2lhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZwY21jaWFfc29ja2V0c19sb2NrKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJZm9yIChpID0gMDsgaSA8IHNpbmZvLT5uc2t0OyBpKyspIHsKIAkJc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QgPSBQQ01DSUFfU09DS0VUKGkpOwpAQCAtNDk4LDEzICs0OTgsMTMgQEAKICAqIFBDTUNJQSAiRHJpdmVyIiBBUEkKICAqLwogCi1zdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpLCByZXQgPSAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmcGNtY2lhX3NvY2tldHNfbG9jayk7CiAJZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKGF1MXgwMF9wY21jaWFfaHdfaW5pdCk7IGkrKykgewotCQlyZXQgPSBhdTF4MDBfcGNtY2lhX2h3X2luaXRbaV0oZGV2KTsKKwkJcmV0ID0gYXUxeDAwX3BjbWNpYV9od19pbml0W2ldKCZkZXYtPmRldik7CiAJCWlmIChyZXQgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTUxMiwxNCArNTEyLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF1MXgwMF9wY21jaWFfZHJpdmVyID0geworc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxeDAwX3BjbWNpYV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImF1MXgwMC1wY21jaWEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxeDAwX2Rydl9wY21jaWFfcHJvYmUsCiAJLnJlbW92ZQkJPSBhdTF4MDBfZHJ2X3BjbWNpYV9yZW1vdmUsCi0JLm5hbWUJCT0gImF1MXgwMC1wY21jaWEiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKKwkuc3VzcGVuZCAJPSBhdTF4MDBfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gYXUxeDAwX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogCkBAIC01MzMsOCArNTQ1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGF1MXgwMF9wY21jaWFfaW5pdCh2b2lkKQogewogCWludCBlcnJvciA9IDA7Ci0JaWYgKChlcnJvciA9IGRyaXZlcl9yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpKSkKLQkJcmV0dXJuIGVycm9yOworCWVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcik7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01NDQsNyArNTU1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IGF1MXgwMF9wY21jaWFfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXUxeDAwX3BjbWNpYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKaW5kZXggNzE2NTNhYi4uNDBkNDk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKQEAgLTEyMzgsNiArMTIzOCwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGk4MjM2NV9kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IGk4MjM2NV9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworfQogc3RhdGljIHN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucyBwY2ljX29wZXJhdGlvbnMgPSB7CiAJLmluaXQJCQk9IHBjaWNfaW5pdCwKIAkuZ2V0X3N0YXR1cwkJPSBwY2ljX2dldF9zdGF0dXMsCkBAIC0xMjQ4LDExICsxMjU4LDEzIEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaTgyMzY1X2RyaXZlciA9IHsKLQkubmFtZSA9ICJpODIzNjUiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpODIzNjVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImk4MjM2NSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kIAk9IGk4MjM2NV9kcnZfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSAJPSBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaTgyMzY1X2RldmljZTsKQEAgLTEyNjEsNyArMTI3Myw3IEBACiB7CiAgICAgaW50IGksIHJldDsKIAotICAgIHJldCA9IGRyaXZlcl9yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CisgICAgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKICAgICBpZiAocmV0KQogCWdvdG8gZXJyX291dDsKIApAQCAtMTMzNyw3ICsxMzQ5LDcgQEAKIAlwbnBfZGlzYWJsZV9kZXYoaTgyMzY1X3BucGRldik7CiAjZW5kaWYKIGVycl9kcml2ZXJfdW5yZWdpc3RlcjoKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CisgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogZXJyX291dDoKICAgICByZXR1cm4gcmV0OwogfSAvKiBpbml0X2k4MjM2NSAqLwpAQCAtMTM2NSw3ICsxMzc3LDcgQEAKICAgICBpZiAoaTgyMzY1X3BucGRldikKICAgICAJCXBucF9kaXNhYmxlX2RldihpODIzNjVfcG5wZGV2KTsKICNlbmRpZgotICAgIGRyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKKyAgICBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CiB9IC8qIGV4aXRfaTgyMzY1ICovCiAKIG1vZHVsZV9pbml0KGluaXRfaTgyMzY1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCmluZGV4IDJhYjRmMjIuLjYyYjRlY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwpAQCAtNjk2LDEzICs2OTYsMjUgQEAKIAkuc2V0X21lbV9tYXAJCT0gcGNjX3NldF9tZW1fbWFwLAogfTsKIAorc3RhdGljIGludCBjZmNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBjZmNfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKLQkubmFtZSA9ICJjZmMiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwY2NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJjZmMiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBjZmNfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gY2ZjX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNjX2RldmljZSA9IHsKQEAgLTcxNiwxMyArNzI4LDEzIEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKIAlpZiAocmV0KXsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03NTQsNyArNzY2LDcgQEAKIAlpZiAocGNjX3NvY2tldHMgPT0gMCkgewogCQlwcmludGsoInNvY2tldCBpcyBub3QgZm91bmQuXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBjY19kZXZpY2UpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC04MDIsNyArODE0LDcgQEAKIAlpZiAocG9sbF9pbnRlcnZhbCAhPSAwKQogCQlkZWxfdGltZXJfc3luYygmcG9sbF90aW1lcik7CiAKLQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogfSAvKiBleGl0X20zMnJfcGNjICovCiAKIG1vZHVsZV9pbml0KGluaXRfbTMycl9wY2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggMmYxMDhjMi4uMTIwMzRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC02NzIsMTMgKzY3MiwyNSBAQAogCS5zZXRfbWVtX21hcAkJPSBwY2Nfc2V0X21lbV9tYXAsCiB9OwogCitzdGF0aWMgaW50IHBjY19kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHBjY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworfQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBwY2NfZHJpdmVyID0gewotCS5uYW1lID0gInBjYyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZSA9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBjY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInBjYyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kIAk9IHBjY19kcnZfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSAJPSBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY2NfZGV2aWNlID0gewpAQCAtNjkyLDEzICs3MDQsMTMgQEAKIHsKIAlpbnQgaSwgcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjY19kZXZpY2UpOwogCWlmIChyZXQpewotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTcxNSw3ICs3MjcsNyBAQAogCWlmIChwY2Nfc29ja2V0cyA9PSAwKSB7CiAJCXByaW50aygic29ja2V0IGlzIG5vdCBmb3VuZC5cbiIpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmcGNjX2RldmljZSk7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTc2Myw3ICs3NzUsNyBAQAogCWlmIChwb2xsX2ludGVydmFsICE9IDApCiAJCWRlbF90aW1lcl9zeW5jKCZwb2xsX3RpbWVyKTsKIAotCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiB9IC8qIGV4aXRfbTMycl9wY2MgKi8KIAogbW9kdWxlX2luaXQoaW5pdF9tMzJyX3BjYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwppbmRleCBjMGUyYWZjLi5lNTkyZTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCQl1bnNpZ25lZCBsb25nIGFsaWduLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IG1ha2VfcmVzb3VyY2UoMCwgbnVtLCBJT1JFU09VUkNFX0lPLAotCQkJCQkgICAgIHMtPmRldi5idXNfaWQpOworCQkJCQkgICAgIGRldl9uYW1lKCZzLT5kZXYpKTsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgZGF0YTsKIAl1bnNpZ25lZCBsb25nIG1pbiA9IGJhc2U7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCmluZGV4IGM1YjJhNDQuLmQ4ZGE1YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwpAQCAtNjUsNyArNjUsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpLCByZXQgPSAtRU5PREVWOwogCkBAIC03Myw3ICs3Myw3IEBACiAJICogSW5pdGlhbGlzZSBhbnkgIm9uLWJvYXJkIiBQQ01DSUEgc29ja2V0cy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYTExeDBfcGNtY2lhX2h3X2luaXQpOyBpKyspIHsKLQkJcmV0ID0gc2ExMXgwX3BjbWNpYV9od19pbml0W2ldKGRldik7CisJCXJldCA9IHNhMTF4MF9wY21jaWFfaHdfaW5pdFtpXSgmZGV2LT5kZXYpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKIAl9CkBAIC04MSwxMyArODEsMzEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMXgwX3BjbWNpYV9kcml2ZXIgPSB7CitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMXgwX3BjbWNpYV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInNhMTF4MC1wY21jaWEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gc2ExMXgwX2Rydl9wY21jaWFfcHJvYmUsCi0JLnJlbW92ZQkJPSBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlLAotCS5uYW1lCQk9ICJzYTExeDAtcGNtY2lhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZCAJPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgCT0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorCS5yZW1vdmUJCT0gc2ExMXgwX2Rydl9wY21jaWFfcmVtb3ZlLAorCS5zdXNwZW5kIAk9IHNhMTF4MF9kcnZfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSAJPSBzYTExeDBfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiAvKiBzYTExeDBfcGNtY2lhX2luaXQoKQpAQCAtMTAwLDcgKzExOCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHNhMTF4MF9wY21jaWFfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNhMTF4MF9wY21jaWFfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIC8qIHNhMTF4MF9wY21jaWFfZXhpdCgpCkBAIC0xMTAsNyArMTI4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IHNhMTF4MF9wY21jaWFfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4MF9wY21jaWFfZHJpdmVyKTsKIH0KIAogTU9EVUxFX0FVVEhPUigiSm9obiBEb3JzZXkgPGpvaG4rQGNzLmNtdS5lZHU+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKaW5kZXggMmE2MTNlOS4uOWFkOTdlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGNpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwpAQCAtMzYzLDEzICszNjMsMjUgQEAKICAgICByZXR1cm4gaWQ7CiB9CiAKK3N0YXRpYyBpbnQgdGNpY19kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdGNpY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAidGNpYy1wY21jaWEiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0Y2ljX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0Y2ljLXBjbWNpYSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kIAk9IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gdGNpY19kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRjaWNfZGV2aWNlID0gewpAQCAtMzgzLDcgKzM5NSw3IEBACiAgICAgaW50IGksIHNvY2ssIHJldCA9IDA7CiAgICAgdV9pbnQgbWFzaywgc2NhbjsKIAotICAgIGlmIChkcml2ZXJfcmVnaXN0ZXIoJnRjaWNfZHJpdmVyKSkKKyAgICBpZiAocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0Y2ljX2RyaXZlcikpCiAJcmV0dXJuIC0xOwogICAgIAogICAgIHByaW50ayhLRVJOX0lORk8gIkRhdGFib29rIFRDSUMtMiBQQ01DSUEgcHJvYmU6ICIpOwpAQCAtMzkxLDcgKzQwMyw3IEBACiAKICAgICBpZiAoIXJlcXVlc3RfcmVnaW9uKHRjaWNfYmFzZSwgMTYsICJ0Y2ljLTIiKSkgewogCXByaW50aygiY291bGQgbm90IGFsbG9jYXRlIHBvcnRzLFxuICIpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9CiAgICAgZWxzZSB7CkBAIC00MTQsNyArNDI2LDcgQEAKICAgICBpZiAoc29jayA9PSAwKSB7CiAJcHJpbnRrKCJub3QgZm91bmQuXG4iKTsKIAlyZWxlYXNlX3JlZ2lvbih0Y2ljX2Jhc2UsIDE2KTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogCkBAIC01NDIsNyArNTU0LDcgQEAKICAgICB9CiAKICAgICBwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdGNpY19kZXZpY2UpOwotICAgIGRyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CisgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKIH0gLyogZXhpdF90Y2ljICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYwppbmRleCBiMmM0MTI0Li42NTk0MjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYworKysgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYwpAQCAtNzA0LDI0ICs3MDQsMzcgQEAKIAogX19zZXR1cCgidnJjNDE3MV9jYXJkPSIsIHZyYzQxNzFfY2FyZF9zZXR1cCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB2cmM0MTcxX2NhcmRfZHJpdmVyID0gewotCS5uYW1lCQk9IHZyYzQxNzFfY2FyZF9uYW1lLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKK3N0YXRpYyBpbnQgdnJjNDE3MV9jYXJkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnJjNDE3MV9jYXJkX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSB2cmM0MTcxX2NhcmRfbmFtZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQJPSB2cmM0MTcxX2NhcmRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHZyYzQxNzFfY2FyZF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2cmM0MTcxX2NhcmRfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKIAlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kZXZpY2UpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtNzM1LDExICs3NDgsMTIgQEAKIAlpZiAocmV0dmFsIDwgMCkgewogCQl2cmM0MTcxX3JlbW92ZV9zb2NrZXRzKCk7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZGV2aWNlKTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMsIGNvbm5lY3RlZCB0byBJUlEgJWRcbiIsIHZyYzQxNzFfY2FyZF9kcml2ZXIubmFtZSwgdnJjNDE3MV9pcnEpOworCXByaW50ayhLRVJOX0lORk8gIiVzLCBjb25uZWN0ZWQgdG8gSVJRICVkXG4iLAorCQl2cmM0MTcxX2NhcmRfZHJpdmVyLmRyaXZlci5uYW1lLCB2cmM0MTcxX2lycSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc0OSw3ICs3NjMsNyBAQAogCWZyZWVfaXJxKHZyYzQxNzFfaXJxLCB2cmM0MTcxX3NvY2tldHMpOwogCXZyYzQxNzFfcmVtb3ZlX3NvY2tldHMoKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodnJjNDE3MV9jYXJkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggNTM3OTU5ZC4uYmM4OTk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0xOTE3LDEyICsxOTE3LDcgQEAKIAogc3RhdGljIGludCBzb255cGlfbWlzY19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9jb21wYXQuZmlmb19hc3luYyk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2NvbXBhdC5maWZvX2FzeW5jKTsKIH0KIAogc3RhdGljIGludCBzb255cGlfbWlzY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKaW5kZXggYWRkYjg3Yy4uMzIyMmZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2UgcmlvX2J1cyA9IHsKLQkuYnVzX2lkID0gInJhcGlkaW8iLAorCS5pbml0X25hbWUgPSAicmFwaWRpbyIsCiB9OwogCiBzdHJ1Y3QgYnVzX3R5cGUgcmlvX2J1c190eXBlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwppbmRleCBkNWU0ZTYzLi44NmM2MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJLyogcmVnaXN0ZXIgaXJxIGhhbmRsZXIgYWZ0ZXIgd2Uga25vdyB3aGF0IG5hbWUgd2UnbGwgdXNlICovCiAJcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MV9JRF9TWVMsIGF0OTFfcnRjX2ludGVycnVwdCwKIAkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JCQkJcnRjLT5ydGNkZXYtPmRldi5idXNfaWQsIHJ0Yyk7CisJCQkJZGV2X25hbWUoJnJ0Yy0+cnRjZGV2LT5kZXYpLCBydGMpOwogCWlmIChyZXQpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3Qgc2hhcmUgSVJRICVkP1xuIiwgQVQ5MV9JRF9TWVMpOwogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjLT5ydGNkZXYpOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAlpZiAoZ3Bicl9yZWFkbChydGMpID09IDApCiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICIlczogU0VUIFRJTUUhXG4iLAotCQkJCXJ0Yy0+cnRjZGV2LT5kZXYuYnVzX2lkKTsKKwkJCQlkZXZfbmFtZSgmcnRjLT5ydGNkZXYtPmRldikpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCmluZGV4IDJjYmViMDcuLmJkMWNlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtMzc3LDEzICszNzcsMTMgQEAKIAogCS8qIGhhbmRsZSBwZXJpb2RpYyBhbmQgYWxhcm0gaXJxcyAqLwogCWlmIChyZXF1ZXN0X2lycShvbWFwX3J0Y190aW1lciwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKSkgeworCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgewogCQlwcl9kZWJ1ZygiJXM6IFJUQyB0aW1lciBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAogCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfdGltZXIpOwogCQlnb3RvIGZhaWwwOwogCX0KIAlpZiAocmVxdWVzdF9pcnEob21hcF9ydGNfYWxhcm0sIHJ0Y19pcnEsIElSUUZfRElTQUJMRUQsCi0JCQlydGMtPmRldi5idXNfaWQsIHJ0YykpIHsKKwkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0YykpIHsKIAkJcHJfZGVidWcoIiVzOiBSVEMgYWxhcm0gaW50ZXJydXB0IElSUSVkIGFscmVhZHkgY2xhaW1lZFxuIiwKIAkJCXBkZXYtPm5hbWUsIG9tYXBfcnRjX2FsYXJtKTsKIAkJZ290byBmYWlsMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKaW5kZXggMWMzZmM2Yi4uNDg5OGY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNoLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vcnRjLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInNoLXJ0YyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMi4wIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yLjEiCiAKICNkZWZpbmUgUlRDX1JFRyhyKQkoKHIpICogcnRjX3JlZ19zaXplKQogCkBAIC05OSw1NiArOTksNTEgQEAKIAl1bnNpZ25lZCBzaG9ydCBwZXJpb2RpY19mcmVxOwogfTsKIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGludCBfX3NoX3J0Y19pbnRlcnJ1cHQoc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXVuc2lnbmVkIGludCB0bXAsIHBlbmRpbmc7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwlwZW5kaW5nID0gdG1wICYgUkNSMV9DRjsKIAl0bXAgJj0gflJDUjFfQ0Y7CiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKIAkvKiBVc2VycyBoYXZlIHJlcXVlc3RlZCBPbmUgeCBTZWNvbmQgSVJRICovCi0JaWYgKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX09YUykKKwlpZiAocGVuZGluZyAmJiBydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9PWFMpCiAJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX1VGIHwgUlRDX0lSUUYpOwogCi0Jc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfYWxhcm0oaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGludCBfX3NoX3J0Y19hbGFybShzdHJ1Y3Qgc2hfcnRjICpydGMpCiB7Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJdW5zaWduZWQgaW50IHRtcCwgcGVuZGluZzsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXBlbmRpbmcgPSB0bXAgJiBSQ1IxX0FGOwogCXRtcCAmPSB+KFJDUjFfQUYgfCBSQ1IxX0FJRSk7Ci0JCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCi0JcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfQUYgfCBSVENfSVJRRik7CisJaWYgKHBlbmRpbmcpCisJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOwogCi0Jc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfcGVyaW9kaWMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGludCBfX3NoX3J0Y19wZXJpb2RpYyhzdHJ1Y3Qgc2hfcnRjICpydGMpCiB7Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2ID0gcnRjLT5ydGNfZGV2OwotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJc3RydWN0IHJ0Y190YXNrICppcnFfdGFzazsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwZW5kaW5nOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMik7CisJcGVuZGluZyA9IHRtcCAmIFJDUjJfUEVGOwogCXRtcCAmPSB+UkNSMl9QRUY7CiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMik7CiAKKwlpZiAoIXBlbmRpbmcpCisJCXJldHVybiAwOworCiAJLyogSGFsZiBwZXJpb2QgZW5hYmxlZCB0aGFuIG9uZSBza2lwcGVkIGFuZCB0aGUgbmV4dCBub3RpZmllZCAqLwogCWlmICgocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfSFApICYmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9DT1VOVCkpCiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSAmPSB+UEZfQ09VTlQ7CkBAIC0xNTcsMTYgKzE1Miw2NSBAQAogCQkJcnRjLT5wZXJpb2RpY19mcmVxIHw9IFBGX0NPVU5UOwogCQlpZiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfS09VKSB7CiAJCQlzcGluX2xvY2soJnJ0Y19kZXYtPmlycV90YXNrX2xvY2spOwotCQkJaWYgKHJ0Y19kZXYtPmlycV90YXNrKQotCQkJCXJ0Y19kZXYtPmlycV90YXNrLT5mdW5jKHJ0Y19kZXYtPmlycV90YXNrLT5wcml2YXRlX2RhdGEpOworCQkJaXJxX3Rhc2sgPSBydGNfZGV2LT5pcnFfdGFzazsKKwkJCWlmIChpcnFfdGFzaykKKwkJCQlpcnFfdGFzay0+ZnVuYyhpcnFfdGFzay0+cHJpdmF0ZV9kYXRhKTsKIAkJCXNwaW5fdW5sb2NrKCZydGNfZGV2LT5pcnFfdGFza19sb2NrKTsKIAkJfSBlbHNlCiAJCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19QRiB8IFJUQ19JUlFGKTsKIAl9CiAKKwlyZXR1cm4gcGVuZGluZzsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX2ludGVycnVwdChydGMpOwogCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfYWxhcm0oaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX2FsYXJtKHJ0Yyk7CisJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX3BlcmlvZGljKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19wZXJpb2RpYyhydGMpOworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19zaGFyZWQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX2ludGVycnVwdChydGMpOworCXJldCB8PSBfX3NoX3J0Y19hbGFybShydGMpOworCXJldCB8PSBfX3NoX3J0Y19wZXJpb2RpYyhydGMpOworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNoX3J0Y19zZXRwaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQpAQCAtMjc1LDYgKzMxOSwyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfcnRjX3NldGNpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CisKKwl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKworCWlmICghZW5hYmxlKQorCQl0bXAgJj0gflJDUjFfQ0lFOworCWVsc2UKKwkJdG1wIHw9IFJDUjFfQ0lFOworCisJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+bG9jayk7Cit9CisKIHN0YXRpYyBpbnQgc2hfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0yOTEsOSArMzU0LDExIEBACiAJCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSAmPSB+UEZfT1hTOworCQlzaF9ydGNfc2V0Y2llKGRldiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PTjoKIAkJcnRjLT5wZXJpb2RpY19mcmVxIHw9IFBGX09YUzsKKwkJc2hfcnRjX3NldGNpZShkZXYsIDEpOwogCQlicmVhazsKIAljYXNlIFJUQ19JUlFQX1JFQUQ6CiAJCXJldCA9IHB1dF91c2VyKHJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEsCkBAIC0zNTYsMTggKzQyMSwxNyBAQAogCQl0bS0+dG1fc2VjLS07CiAjZW5kaWYKIAorCS8qIG9ubHkga2VlcCB0aGUgY2FycnkgaW50ZXJydXB0IGVuYWJsZWQgaWYgVUlFIGlzIG9uICovCisJaWYgKCEocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKSkKKwkJc2hfcnRjX3NldGNpZShkZXYsIDApOworCiAJZGV2X2RiZyhkZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKIAkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKIAkJX19mdW5jX18sCiAJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLAogCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiArIDEsIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKLQlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJpbnZhbGlkIGRhdGVcbiIpOwotCQlydGNfdGltZV90b190bSgwLCB0bSk7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTU3Miw3ICs2MzYsNyBAQAogewogCXN0cnVjdCBzaF9ydGMgKnJ0YzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQl1bnNpZ25lZCBpbnQgdG1wOworCXN0cnVjdCBydGNfdGltZSByOwogCWludCByZXQ7CiAKIAlydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfcnRjKSwgR0ZQX0tFUk5FTCk7CkBAIC01ODUsMjYgKzY0OSwxMiBAQAogCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKHVubGlrZWx5KHJldCA8PSAwKSkgewogCQlyZXQgPSAtRU5PRU5UOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIHBlcmlvZFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSByZXNvdXJjZVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CiAJcnRjLT5wZXJpb2RpY19pcnEgPSByZXQ7Ci0KLQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwotCWlmICh1bmxpa2VseShyZXQgPD0gMCkpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBjYXJyeVxuIik7Ci0JCWdvdG8gZXJyX2JhZHJlczsKLQl9Ci0JcnRjLT5jYXJyeV9pcnEgPSByZXQ7Ci0KLQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOwotCWlmICh1bmxpa2VseShyZXQgPD0gMCkpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBhbGFybVxuIik7Ci0JCWdvdG8gZXJyX2JhZHJlczsKLQl9Ci0JcnRjLT5hbGFybV9pcnEgPSByZXQ7CisJcnRjLT5jYXJyeV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCXJ0Yy0+YWxhcm1faXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKSB7CkBAIC02NDYsNDcgKzY5Niw2NiBAQAogCX0KIAogCXJ0Yy0+cnRjX2Rldi0+bWF4X3VzZXJfZnJlcSA9IDI1NjsKLQlydGMtPnJ0Y19kZXYtPmlycV9mcmVxID0gMTsKLQlydGMtPnBlcmlvZGljX2ZyZXEgPSAweDYwOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAotCS8qIHJlZ2lzdGVyIHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycXMgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShydGMtPnBlcmlvZGljX2lycSwgc2hfcnRjX3BlcmlvZGljLCBJUlFGX0RJU0FCTEVELAotCQkJICAic2gtcnRjIHBlcmlvZCIsIHJ0Yyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJInJlcXVlc3QgcGVyaW9kIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPnBlcmlvZGljX2lycSk7Ci0JCWdvdG8gZXJyX3VubWFwOworCWlmIChydGMtPmNhcnJ5X2lycSA8PSAwKSB7CisJCS8qIHJlZ2lzdGVyIHNoYXJlZCBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnEgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19zaGFyZWQsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAorCQkJCXJ0Yy0+cGVyaW9kaWNfaXJxKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmVnaXN0ZXIgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPnBlcmlvZGljX2lycSwgc2hfcnRjX3BlcmlvZGljLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyBwZXJpb2QiLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IHBlcmlvZCBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKKwkJCQlyZXQsIHJ0Yy0+cGVyaW9kaWNfaXJxKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5jYXJyeV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIGNhcnJ5IiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBjYXJyeSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKKwkJCQlyZXQsIHJ0Yy0+Y2FycnlfaXJxKTsKKwkJCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmFsYXJtX2lycSwgc2hfcnRjX2FsYXJtLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyBhbGFybSIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgYWxhcm0gSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPmFsYXJtX2lycSk7CisJCQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKKwkJCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmNhcnJ5X2lycSwgc2hfcnRjX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgInNoLXJ0YyBjYXJyeSIsIHJ0Yyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJInJlcXVlc3QgY2FycnkgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKLQkJCXJ0Yy0+Y2FycnlfaXJxKTsKLQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7Ci0JCWdvdG8gZXJyX3VubWFwOworCS8qIGV2ZXJ5dGhpbmcgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworCXJ0Yy0+cGVyaW9kaWNfZnJlcSA9IDA7CisJcnRjLT5ydGNfZGV2LT5pcnFfZnJlcSA9IDA7CisJc2hfcnRjX3NldHBpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0YWllKCZwZGV2LT5kZXYsIDApOworCXNoX3J0Y19zZXRjaWUoJnBkZXYtPmRldiwgMCk7CisKKwkvKiByZXNldCBydGMgdG8gZXBvY2ggMCBpZiB0aW1lIGlzIGludmFsaWQgKi8KKwlpZiAocnRjX3JlYWRfdGltZShydGMtPnJ0Y19kZXYsICZyKSA8IDApIHsKKwkJcnRjX3RpbWVfdG9fdG0oMCwgJnIpOworCQlydGNfc2V0X3RpbWUocnRjLT5ydGNfZGV2LCAmcik7CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5hbGFybV9pcnEsIHNoX3J0Y19hbGFybSwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgInNoLXJ0YyBhbGFybSIsIHJ0Yyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJInJlcXVlc3QgYWxhcm0gSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKLQkJCXJ0Yy0+YWxhcm1faXJxKTsKLQkJZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7Ci0JCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOwotCQlnb3RvIGVycl91bm1hcDsKLQl9Ci0KLQl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQl0bXAgJj0gflJDUjFfQ0Y7Ci0JdG1wIHw9IFJDUjFfQ0lFOwotCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwotCisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCXJldHVybiAwOwogCiBlcnJfdW5tYXA6CkBAIC03MDgsMTAgKzc3NywxMyBAQAogCiAJc2hfcnRjX3NldHBpZSgmcGRldi0+ZGV2LCAwKTsKIAlzaF9ydGNfc2V0YWllKCZwZGV2LT5kZXYsIDApOworCXNoX3J0Y19zZXRjaWUoJnBkZXYtPmRldiwgMCk7CiAKLQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKIAlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKLQlmcmVlX2lycShydGMtPmFsYXJtX2lycSwgcnRjKTsKKwlpZiAocnRjLT5jYXJyeV9pcnEgPiAwKSB7CisJCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOworCQlmcmVlX2lycShydGMtPmFsYXJtX2lycSwgcnRjKTsKKwl9CiAKIAlyZWxlYXNlX3Jlc291cmNlKHJ0Yy0+cmVzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYyBiL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKaW5kZXggYWQzNWY3Ni4uYTYzNDFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCkBAIC00MjYsNyArNDI2LDcgQEAKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgdHdsNDAzMF9ydGNfaW50ZXJydXB0LAogCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpOworCQkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0Yyk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVJRIGlzIG5vdCBmcmVlLlxuIik7CiAJCWdvdG8gb3V0MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9NYWtlZmlsZQppbmRleCBkMGVhZTU5Li45NWJjY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL01ha2VmaWxlCkBAIC0yLDkgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFMvMzkwIHNwZWNpZmljIGRldmljZSBkcml2ZXJzCiAjCiAKLUNGTEFHU19zeXNpbmZvLm8gKz0gLUlpbmNsdWRlL21hdGgtZW11IC1JYXJjaC9zMzkwL21hdGgtZW11IC13Ci0KLW9iai15ICs9IHMzOTBtYWNoLm8gc3lzaW5mby5vCiBvYmoteSArPSBjaW8vIGJsb2NrLyBjaGFyLyBjcnlwdG8vIG5ldC8gc2NzaS8ga3ZtLwogCiBkcml2ZXJzLXkgKz0gZHJpdmVycy9zMzkwL2J1aWx0LWluLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDA4YzIzYTkuLjJmZDY0ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtOSw2ICs5LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0yMiw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgogI2luY2x1ZGUgPGFzbS9pZGFscy5oPgogI2luY2x1ZGUgPGFzbS90b2RjbGsuaD4KKyNpbmNsdWRlIDxhc20vaXRjdy5oPgogCiAvKiBUaGlzIGlzIHVnbHkuLi4gKi8KICNkZWZpbmUgUFJJTlRLX0hFQURFUiAiZGFzZDoiCkBAIC0yMjEsNyArMjI1LDcgQEAKIAkJCXJldHVybiByYzsKIAl9CiAJLyogcmVnaXN0ZXIgJ2RldmljZScgZGVidWcgYXJlYSwgdXNlZCBmb3IgYWxsIERCRl9ERVZfWFhYIGNhbGxzICovCi0JZGV2aWNlLT5kZWJ1Z19hcmVhID0gZGVidWdfcmVnaXN0ZXIoZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgMSwgMSwKKwlkZXZpY2UtPmRlYnVnX2FyZWEgPSBkZWJ1Z19yZWdpc3RlcihkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCA0LCAxLAogCQkJCQkgICAgOCAqIHNpemVvZihsb25nKSk7CiAJZGVidWdfcmVnaXN0ZXJfdmlldyhkZXZpY2UtPmRlYnVnX2FyZWEsICZkZWJ1Z19zcHJpbnRmX3ZpZXcpOwogCWRlYnVnX3NldF9sZXZlbChkZXZpY2UtPmRlYnVnX2FyZWEsIERCRl9XQVJOSU5HKTsKQEAgLTc2Miw3ICs3NjYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OwogCWlmIChzdHJuY21wKChjaGFyICopICZjcXItPm1hZ2ljLCBkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIDQpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCiAJCQkgICAgIiBkYXNkX2Njd19yZXEgMHglMDh4IG1hZ2ljIGRvZXNuJ3QgbWF0Y2giCiAJCQkgICAgIiBkaXNjaXBsaW5lIDB4JTA4eCIsCiAJCQkgICAgY3FyLT5tYWdpYywKQEAgLTc4Miw2ICs3ODYsNyBAQAogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByZXRyaWVzLCByYzsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCS8qIENoZWNrIHRoZSBjcXIgKi8KIAlyYyA9IGRhc2RfY2hlY2tfY3FyKGNxcik7CkBAIC04MTUsMTAgKzgyMCwxMCBAQAogCQkJCSAgICAgICJkZXZpY2UgYnVzeSwgcmV0cnkgbGF0ZXIiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImxpbmUgJWQgdW5rbm93biBSQz0lZCwgcGxlYXNlICIKLQkJCQkgICAgInJlcG9ydCB0byBsaW51eDM5MEBkZS5pYm0uY29tIiwKLQkJCQkgICAgX19MSU5FX18sIHJjKTsKKwkJCS8qIGludGVybmFsIGVycm9yIDEwIC0gdW5rbm93biByYyovCisJCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIxMCAlZCIsIHJjKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlICIKKwkJCQkiREFTRCBkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJCUJVRygpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgzNiw2ICs4NDEsNyBAQAogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByYzsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCS8qIENoZWNrIHRoZSBjcXIgKi8KIAlyYyA9IGRhc2RfY2hlY2tfY3FyKGNxcik7CkBAIC04NDMsMTcgKzg0OSwyMyBAQAogCQlyZXR1cm4gcmM7CiAJZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwogCWlmIChjcXItPnJldHJpZXMgPCAwKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKLQkJCSAgICAic3RhcnRfSU86IHJlcXVlc3QgJXAgKCUwMngvJWkpIC0gbm8gcmV0cnkgbGVmdC4iLAotCQkJICAgIGNxciwgY3FyLT5zdGF0dXMsIGNxci0+cmV0cmllcyk7CisJCS8qIGludGVybmFsIGVycm9yIDE0IC0gc3RhcnRfSU8gcnVuIG91dCBvZiByZXRyaWVzICovCisJCXNwcmludGYoZXJyb3JzdHJpbmcsICIxNCAlcCIsIGNxcik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0VSUk9SOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJY3FyLT5zdGFydGNsayA9IGdldF9jbG9jaygpOwogCWNxci0+c3RhcnR0aW1lID0gamlmZmllczsKIAljcXItPnJldHJpZXMtLTsKLQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoZGV2aWNlLT5jZGV2LCBjcXItPmNwYWRkciwgKGxvbmcpIGNxciwKLQkJCSAgICAgIGNxci0+bHBtLCAwKTsKKwlpZiAoY3FyLT5jcG1vZGUgPT0gMSkgeworCQlyYyA9IGNjd19kZXZpY2VfdG1fc3RhcnQoZGV2aWNlLT5jZGV2LCBjcXItPmNwYWRkciwKKwkJCQkJIChsb25nKSBjcXIsIGNxci0+bHBtKTsKKwl9IGVsc2UgeworCQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoZGV2aWNlLT5jZGV2LCBjcXItPmNwYWRkciwKKwkJCQkgICAgICAobG9uZykgY3FyLCBjcXItPmxwbSwgMCk7CisJfQogCXN3aXRjaCAocmMpIHsKIAljYXNlIDA6CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfSU5fSU87CkBAIC04NjIsMTEgKzg3NCwxMSBAQAogCQkJICAgICAgY3FyKTsKIAkJYnJlYWs7CiAJY2FzZSAtRUJVU1k6Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiBkZXZpY2UgYnVzeSwgcmV0cnkgbGF0ZXIiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRVRJTUVET1VUOgotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogcmVxdWVzdCB0aW1lb3V0LCByZXRyeSBsYXRlciIpOwogCQlicmVhazsKIAljYXNlIC1FQUNDRVM6CkBAIC04NzYsMTkgKzg4OCwyNCBAQAogCQkgKiBEbyBhIHJldHJ5IHdpdGggYWxsIGF2YWlsYWJsZSBwYXRoZXMuCiAJCSAqLwogCQljcXItPmxwbSA9IExQTV9BTllQQVRIOwotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogc2VsZWN0ZWQgcGF0aGVzIGdvbmUsIgogCQkJICAgICAgIiByZXRyeSBvbiBhbGwgcGF0aGVzIik7CiAJCWJyZWFrOwogCWNhc2UgLUVOT0RFVjoKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJzdGFydF9JTzogLUVOT0RFViBkZXZpY2UgZ29uZSwgcmV0cnkiKTsKKwkJYnJlYWs7CiAJY2FzZSAtRUlPOgotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAgICJzdGFydF9JTzogZGV2aWNlIGdvbmUsIHJldHJ5Iik7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAic3RhcnRfSU86IC1FSU8gZGV2aWNlIGdvbmUsIHJldHJ5Iik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkgICAgImxpbmUgJWQgdW5rbm93biBSQz0lZCwgcGxlYXNlIHJlcG9ydCIKLQkJCSAgICAiIHRvIGxpbnV4MzkwQGRlLmlibS5jb20iLCBfX0xJTkVfXywgcmMpOworCQkvKiBpbnRlcm5hbCBlcnJvciAxMSAtIHVua25vd24gcmMgKi8KKwkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTEgJWQiLCByYyk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSJyZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwogCX0KQEAgLTk0NSw3ICs5NjIsNyBAQAogCQlyZXR1cm47CiAJY3FyID0gKHN0cnVjdCBkYXNkX2Njd19yZXEgKikgaW50cGFybTsKIAlpZiAoY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfSU5fSU8pIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLAorCQlEQkZfRVZFTlQoREJGX0RFQlVHLAogCQkJImludmFsaWQgc3RhdHVzIGluIGhhbmRsZV9raWxsZWRfcmVxdWVzdDogIgogCQkJImJ1c19pZCAlcywgc3RhdHVzICUwMngiLAogCQkJZGV2X25hbWUoJmNkZXYtPmRldiksIGNxci0+c3RhdHVzKTsKQEAgLTk1Niw4ICs5NzMsOCBAQAogCWlmIChkZXZpY2UgPT0gTlVMTCB8fAogCSAgICBkZXZpY2UgIT0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KSB8fAogCSAgICBzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6IGJ1c19pZCAlcyIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiAiCisJCQkgICAgICAiYnVzX2lkICVzIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm47CiAJfQogCkBAIC05OTYsMTEgKzEwMTMsMTEgQEAKIAkJY2FzZSAtRUlPOgogCQkJYnJlYWs7CiAJCWNhc2UgLUVUSU1FRE9VVDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXMoJXMpOiByZXF1ZXN0IHRpbWVkIG91dFxuIiwKKwkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIiVzKCVzKTogcmVxdWVzdCB0aW1lZCBvdXRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyglcyk6IHVua25vd24gZXJyb3IgJWxkXG4iLAorCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiJXMoJXMpOiB1bmtub3duIGVycm9yICVsZFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgZGV2X25hbWUoJmNkZXYtPmRldiksIFBUUl9FUlIoaXJiKSk7CiAJCX0KIAkJZGFzZF9oYW5kbGVfa2lsbGVkX3JlcXVlc3QoY2RldiwgaW50cGFybSk7CkBAIC0xMDA5LDE1ICsxMDI2LDExIEBACiAKIAlub3cgPSBnZXRfY2xvY2soKTsKIAotCURCRl9FVkVOVChEQkZfRVJSLCAiSW50ZXJydXB0OiBidXNfaWQgJXMgQ1MvRFMgJTA0eCBpcCAlMDh4IiwKLQkJICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgKChpcmItPnNjc3cuY21kLmNzdGF0IDw8IDgpIHwKLQkJICBpcmItPnNjc3cuY21kLmRzdGF0KSwgKHVuc2lnbmVkIGludCkgaW50cGFybSk7Ci0KIAkvKiBjaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cyAqLwogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGludHBhcm07Ci0JaWYgKCFjcXIgfHwgKChpcmItPnNjc3cuY21kLmNjID09IDEpICYmCi0JCSAgICAgKGlyYi0+c2Nzdy5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCQkgICAgIChpcmItPnNjc3cuY21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSB7CisJaWYgKCFjcXIgfHwgKChzY3N3X2NjKCZpcmItPnNjc3cpID09IDEpICYmCisJCSAgICAgKHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgorCQkgICAgIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpKSB7CiAJCWlmIChjcXIgJiYgY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfSU5fSU8pCiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKIAkJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KTsKQEAgLTEwMzMsMTQgKzEwNDYsMTQgQEAKIAlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7CiAJaWYgKCFkZXZpY2UgfHwKIAkgICAgc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiBidXNfaWQgJXMiLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogIgorCQkJICAgICAgImJ1c19pZCAlcyIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIENoZWNrIGZvciBjbGVhciBwZW5kaW5nICovCiAJaWYgKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0NMRUFSX1BFTkRJTkcgJiYKLQkgICAgaXJiLT5zY3N3LmNtZC5mY3RsICYgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpIHsKKwkgICAgc2Nzd19mY3RsKCZpcmItPnNjc3cpICYgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9DTEVBUkVEOwogCQlkYXNkX2RldmljZV9jbGVhcl90aW1lcihkZXZpY2UpOwogCQl3YWtlX3VwKCZkYXNkX2ZsdXNoX3dxKTsKQEAgLTEwNDgsMTkgKzEwNjEsMTcgQEAKIAkJcmV0dXJuOwogCX0KIAotIAkvKiBjaGVjayBzdGF0dXMgLSB0aGUgcmVxdWVzdCBtaWdodCBoYXZlIGJlZW4ga2lsbGVkIGJ5IGR5biBkZXRhY2ggKi8KKwkvKiBjaGVjayBzdGF0dXMgLSB0aGUgcmVxdWVzdCBtaWdodCBoYXZlIGJlZW4ga2lsbGVkIGJ5IGR5biBkZXRhY2ggKi8KIAlpZiAoY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfSU5fSU8pIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLAotCQkJImludmFsaWQgc3RhdHVzOiBidXNfaWQgJXMsIHN0YXR1cyAlMDJ4IiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBjcXItPnN0YXR1cyk7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJpbnZhbGlkIHN0YXR1czogYnVzX2lkICVzLCAiCisJCQkgICAgICAic3RhdHVzICUwMngiLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgY3FyLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJfQotCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJJbnQ6IENTL0RTIDB4JTA0eCBmb3IgY3FyICVwIiwKLQkJICAgICAgKChpcmItPnNjc3cuY21kLmNzdGF0IDw8IDgpIHwgaXJiLT5zY3N3LmNtZC5kc3RhdCksIGNxcik7CisKIAluZXh0ID0gTlVMTDsKIAlleHBpcmVzID0gMDsKLQlpZiAoaXJiLT5zY3N3LmNtZC5kc3RhdCA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCi0JICAgIGlyYi0+c2Nzdy5jbWQuY3N0YXQgPT0gMCAmJiAhaXJiLT5lc3cuZXN3MC5lcncuY29ucykgeworCWlmIChzY3N3X2RzdGF0KCZpcmItPnNjc3cpID09IChERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkgJiYKKwkgICAgc2Nzd19jc3RhdCgmaXJiLT5zY3N3KSA9PSAwKSB7CiAJCS8qIHJlcXVlc3Qgd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9TVUNDRVNTOwogCQljcXItPnN0b3BjbGsgPSBub3c7CkBAIC0xMDcxLDE4ICsxMDgyLDIzIEBACiAJCX0KIAl9IGVsc2UgeyAgLyogZXJyb3IgKi8KIAkJbWVtY3B5KCZjcXItPmlyYiwgaXJiLCBzaXplb2Yoc3RydWN0IGlyYikpOworCQkvKiBsb2cgc2Vuc2UgZm9yIGV2ZXJ5IGZhaWxlZCBJL08gdG8gczM5MCBkZWJ1Z2ZlYXR1cmUgKi8KKwkJZGFzZF9sb2dfc2Vuc2VfZGJmKGNxciwgaXJiKTsKIAkJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSB7CiAJCQlkYXNkX2xvZ19zZW5zZShjcXIsIGlyYik7CiAJCX0KKwogCQkvKgogCQkgKiBJZiB3ZSBkb24ndCB3YW50IGNvbXBsZXggRVJQIGZvciB0aGlzIHJlcXVlc3QsIHRoZW4ganVzdAogCQkgKiByZXNldCB0aGlzIGFuZCByZXRyeSBpdCBpbiB0aGUgZmFzdHBhdGgKIAkJICovCiAJCWlmICghdGVzdF9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpICYmCiAJCSAgICBjcXItPnJldHJpZXMgPiAwKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCi0JCQkJICAgICJkZWZhdWx0IEVSUCBpbiBmYXN0cGF0aCAoJWkgcmV0cmllcyBsZWZ0KSIsCi0JCQkJICAgIGNxci0+cmV0cmllcyk7CisJCQlpZiAoY3FyLT5scG0gPT0gTFBNX0FOWVBBVEgpCisJCQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKKwkJCQkJICAgICAgImRlZmF1bHQgRVJQIGluIGZhc3RwYXRoICIKKwkJCQkJICAgICAgIiglaSByZXRyaWVzIGxlZnQpIiwKKwkJCQkJICAgICAgY3FyLT5yZXRyaWVzKTsKIAkJCWNxci0+bHBtICAgID0gTFBNX0FOWVBBVEg7CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKIAkJCW5leHQgPSBjcXI7CkBAIC0xMDkzLDEwICsxMTA5LDYgQEAKIAkgICAgKCFkZXZpY2UtPnN0b3BwZWQpKSB7CiAJCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPnN0YXJ0X0lPKG5leHQpID09IDApCiAJCQlleHBpcmVzID0gbmV4dC0+ZXhwaXJlczsKLQkJZWxzZQotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiSW50ZXJydXB0IGZhc3RwYXRoICIKLQkJCQkgICAgImZhaWxlZCEiKTsKIAl9CiAJaWYgKGV4cGlyZXMgIT0gMCkKIAkJZGFzZF9kZXZpY2Vfc2V0X3RpbWVyKGRldmljZSwgZXhwaXJlcyk7CkBAIC0xMTY5LDYgKzExODEsNyBAQAogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKIAl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBkYXNkX2Njd19yZXEgKiwgdm9pZCAqZGF0YSk7CiAJdm9pZCAqY2FsbGJhY2tfZGF0YTsKKwljaGFyIGVycm9yc3RyaW5nW0VSUk9STEVOR1RIXTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCBmaW5hbF9xdWV1ZSkgewogCQljcXIgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBkYXNkX2Njd19yZXEsIGRldmxpc3QpOwpAQCAtMTE4OSwxMCArMTIwMiwxMSBAQAogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9URVJNSU5BVEVEOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAid3JvbmcgY3FyIHN0YXR1cyBpbiBfX2Rhc2RfcHJvY2Vzc19maW5hbF9xdWV1ZSAiCi0JCQkJICAgICJmb3IgY3FyICVwLCBzdGF0dXMgJXgiLAotCQkJCSAgICBjcXIsIGNxci0+c3RhdHVzKTsKKwkJCS8qIGludGVybmFsIGVycm9yIDEyIC0gd3JvbmcgY3FyIHN0YXR1cyovCisJCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIxMiAlcCAleDAyIiwgY3FyLCBjcXItPnN0YXR1cyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJCSJyZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJCUJVRygpOwogCQl9CiAJCWlmIChjcXItPmNhbGxiYWNrICE9IE5VTEwpCkBAIC0xMjE3LDE4ICsxMjMxLDE3IEBACiAJICAgICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGNxci0+ZXhwaXJlcyArIGNxci0+c3RhcnR0aW1lKSkpIHsKIAkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpICE9IDApIHsKIAkJCS8qIEhtcGYsIHRyeSBhZ2FpbiBpbiA1IHNlYyAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImludGVybmFsIGVycm9yIC0gdGltZW91dCAoJWlzKSBleHBpcmVkICIKLQkJCQkgICAgImZvciBjcXIgJXAsIHRlcm1pbmF0aW9uIGZhaWxlZCwgIgotCQkJCSAgICAicmV0cnlpbmcgaW4gNXMiLAotCQkJCSAgICAoY3FyLT5leHBpcmVzL0haKSwgY3FyKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJjcXIgJXAgdGltZWQgb3V0ICglaXMpIGJ1dCBjYW5ub3QgYmUgIgorCQkJCSJlbmRlZCwgcmV0cnlpbmcgaW4gNSBzXG4iLAorCQkJCWNxciwgKGNxci0+ZXhwaXJlcy9IWikpOwogCQkJY3FyLT5leHBpcmVzICs9IDUqSFo7CiAJCQlkYXNkX2RldmljZV9zZXRfdGltZXIoZGV2aWNlLCA1KkhaKTsKIAkJfSBlbHNlIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJpbnRlcm5hbCBlcnJvciAtIHRpbWVvdXQgKCVpcykgZXhwaXJlZCAiCi0JCQkJICAgICJmb3IgY3FyICVwICglaSByZXRyaWVzIGxlZnQpIiwKLQkJCQkgICAgKGNxci0+ZXhwaXJlcy9IWiksIGNxciwgY3FyLT5yZXRyaWVzKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJjcXIgJXAgdGltZWQgb3V0ICglaXMpLCAlaSByZXRyaWVzICIKKwkJCQkicmVtYWluaW5nXG4iLCBjcXIsIChjcXItPmV4cGlyZXMvSFopLAorCQkJCWNxci0+cmV0cmllcyk7CiAJCX0KIAl9CiB9CkBAIC0xMjkwLDEwICsxMzAzLDkgQEAKIAkJCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CiAJCQlpZiAocmMpIHsKIAkJCQkvKiB1bmFibGUgdG8gdGVybWluYXRlIHJlcXVldXN0ICovCi0JCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkJICAgICJkYXNkIGZsdXNoIGNjd19xdWV1ZSBpcyB1bmFibGUgIgotCQkJCQkgICAgIiB0byB0ZXJtaW5hdGUgcmVxdWVzdCAlcCIsCi0JCQkJCSAgICBjcXIpOworCQkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkiRmx1c2hpbmcgdGhlIERBU0QgcmVxdWVzdCBxdWV1ZSAiCisJCQkJCSJmYWlsZWQgZm9yIHJlcXVlc3QgJXBcbiIsIGNxcik7CiAJCQkJLyogc3RvcCBmbHVzaCBwcm9jZXNzaW5nICovCiAJCQkJZ290byBmaW5pc2hlZDsKIAkJCX0KQEAgLTE1MzcsMTAgKzE1NDksOSBAQAogCQkvKiByZXF1ZXN0IGluIElPIC0gdGVybWluYXRlIElPIGFuZCByZWxlYXNlIGFnYWluICovCiAJCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CiAJCWlmIChyYykgewotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImRhc2RfY2FuY2VsX3JlcSBpcyB1bmFibGUgIgotCQkJCSAgICAiIHRvIHRlcm1pbmF0ZSByZXF1ZXN0ICVwLCByYyA9ICVkIiwKLQkJCQkgICAgY3FyLCByYyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiQ2FuY2VsbGluZyByZXF1ZXN0ICVwIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAorCQkJCWNxciwgcmMpOwogCQl9IGVsc2UgewogCQkJY3FyLT5zdG9wY2xrID0gZ2V0X2Nsb2NrKCk7CiAJCQlyYyA9IDE7CkBAIC0xNjE3LDcgKzE2MjgsNyBAQAogCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9ET05FKQogCQlEQkZfREVWX0VWRU5UKERCRl9OT1RJQ0UsIGRldmljZSwgIiVzIiwgIkVSUCBzdWNjZXNzZnVsIik7CiAJZWxzZQotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLCAiRVJQIHVuc3VjY2Vzc2Z1bCIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkVSUCBmYWlsZWQgZm9yIHRoZSBEQVNEXG4iKTsKIAllcnBfZm4gPSBkZXZpY2UtPmRpc2NpcGxpbmUtPmVycF9wb3N0YWN0aW9uKGNxcik7CiAJZXJwX2ZuKGNxcik7CiB9CkBAIC0xOTkxLDggKzIwMDIsMTEgQEAKIAlibGtfcXVldWVfbWF4X3NlY3RvcnMoYmxvY2stPnJlcXVlc3RfcXVldWUsIG1heCk7CiAJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwogCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7Ci0JYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7Ci0JYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7CisJLyogd2l0aCBwYWdlIHNpemVkIHNlZ21lbnRzIHdlIGNhbiB0cmFuc2xhdGUgZWFjaCBzZWdlbWVudCBpbnRvCisJICogb25lIGlkYXcvdGlkYXcKKwkgKi8KKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibG9jay0+cmVxdWVzdF9xdWV1ZSwgUEFHRV9TSVpFKTsKKwlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShibG9jay0+cmVxdWVzdF9xdWV1ZSwgUEFHRV9TSVpFIC0gMSk7CiAJYmxrX3F1ZXVlX29yZGVyZWQoYmxvY2stPnJlcXVlc3RfcXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOwogfQogCkBAIC0yMDQzLDggKzIwNTcsOSBAQAogCX0KIAogCWlmIChkYXNkX3Byb2Jlb25seSkgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGJhc2UsICIlcyIsCi0JCQkgICAgIk5vIGFjY2VzcyB0byBkZXZpY2UgZHVlIHRvIHByb2Jlb25seSBtb2RlIik7CisJCWRldl9pbmZvKCZiYXNlLT5jZGV2LT5kZXYsCisJCQkgIkFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSBpdCBpcyBpbiAiCisJCQkgInByb2Jlb25seSBtb2RlXG4iKTsKIAkJcmMgPSAtRVBFUk07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIxMDEsNyArMjExNiw4IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGRhc2Rfb3BlbiwKIAkucmVsZWFzZQk9IGRhc2RfcmVsZWFzZSwKLQkubG9ja2VkX2lvY3RsCT0gZGFzZF9pb2N0bCwKKwkuaW9jdGwJCT0gZGFzZF9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gZGFzZF9pb2N0bCwKIAkuZ2V0Z2VvCQk9IGRhc2RfZ2V0Z2VvLAogfTsKIApAQCAtMjE0MywxNCArMjE1OSwxNCBAQAogCiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb3B0aW9ucyhjZGV2LCBDQ1dERVZfRE9fUEFUSEdST1VQKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAogCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IHNldCBjY3ctZGV2aWNlIG9wdGlvbnMgIgogCQkgICAgICAgImZvciAlc1xuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlyZXQgPSBkYXNkX2FkZF9zeXNmc19maWxlcyhjZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAogCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IGFkZCBzeXNmcyBlbnRyaWVzICIKIAkJICAgICAgICJmb3IgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKQEAgLTIxNjYsOSArMjE4Miw3IEBACiAJICAgIChkYXNkX2F1dG9kZXRlY3QgJiYgZGFzZF9idXNpZF9rbm93bihkZXZfbmFtZSgmY2Rldi0+ZGV2KSkgIT0gMCkpCiAJCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZGV2KTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiZGFzZF9nZW5lcmljX3Byb2JlOiBjb3VsZCBub3QgaW5pdGlhbGx5ICIKLQkJICAgICAgICJvbmxpbmUgY2N3LWRldmljZSAlczsgcmV0dXJuIGNvZGU6ICVkXG4iLAorCQlwcl93YXJuaW5nKCIlczogU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIHdpdGggcmM9JWRcbiIsCiAJCSAgICAgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgcmV0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMzIsMTAgKzIyNDYsOSBAQAogCWRpc2NpcGxpbmUgPSBiYXNlX2Rpc2NpcGxpbmU7CiAJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfVVNFRElBRykgewogCSAgCWlmICghZGFzZF9kaWFnX2Rpc2NpcGxpbmVfcG9pbnRlcikgewotCQkgICAgICAgIHByaW50ayAoS0VSTl9XQVJOSU5HCi0JCQkJImRhc2RfZ2VuZXJpYyBjb3VsZG4ndCBvbmxpbmUgZGV2aWNlICVzICIKLQkJCQkiLSBkaXNjaXBsaW5lIERJQUcgbm90IGF2YWlsYWJsZVxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCQlwcl93YXJuaW5nKCIlcyBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgYmVjYXVzZSAiCisJCQkJICAgIm9mIG1pc3NpbmcgRElBRyBkaXNjaXBsaW5lXG4iLAorCQkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWRhc2RfZGVsZXRlX2RldmljZShkZXZpY2UpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTIyNTYsMTAgKzIyNjksOSBAQAogCS8qIGNoZWNrX2RldmljZSB3aWxsIGFsbG9jYXRlIGJsb2NrIGRldmljZSBpZiBuZWNlc3NhcnkgKi8KIAlyYyA9IGRpc2NpcGxpbmUtPmNoZWNrX2RldmljZShkZXZpY2UpOwogCWlmIChyYykgewotCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJImRhc2RfZ2VuZXJpYyBjb3VsZG4ndCBvbmxpbmUgZGV2aWNlICVzICIKLQkJCSJ3aXRoIGRpc2NpcGxpbmUgJXMgcmM9JWlcbiIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgZGlzY2lwbGluZS0+bmFtZSwgcmMpOworCQlwcl93YXJuaW5nKCIlcyBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSB3aXRoIGRpc2NpcGxpbmUgJXMgIgorCQkJICAgImZhaWxlZCB3aXRoIHJjPSVpXG4iLAorCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldiksIGRpc2NpcGxpbmUtPm5hbWUsIHJjKTsKIAkJbW9kdWxlX3B1dChkaXNjaXBsaW5lLT5vd25lcik7CiAJCW1vZHVsZV9wdXQoYmFzZV9kaXNjaXBsaW5lLT5vd25lcik7CiAJCWRhc2RfZGVsZXRlX2RldmljZShkZXZpY2UpOwpAQCAtMjI2OCw5ICsyMjgwLDggQEAKIAogCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShkZXZpY2UsIERBU0RfU1RBVEVfT05MSU5FKTsKIAlpZiAoZGV2aWNlLT5zdGF0ZSA8PSBEQVNEX1NUQVRFX0tOT1dOKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HCi0JCQkiZGFzZF9nZW5lcmljIGRpc2NpcGxpbmUgbm90IGZvdW5kIGZvciAlc1xuIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIGJlY2F1c2Ugb2YgYSAiCisJCQkgICAibWlzc2luZyBkaXNjaXBsaW5lXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJjID0gLUVOT0RFVjsKIAkJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9ORVcpOwogCQlpZiAoZGV2aWNlLT5ibG9jaykKQEAgLTIzMTQsMTMgKzIzMjUsMTMgQEAKIAkJb3Blbl9jb3VudCA9IGF0b21pY19yZWFkKCZkZXZpY2UtPmJsb2NrLT5vcGVuX2NvdW50KTsKIAkJaWYgKG9wZW5fY291bnQgPiBtYXhfY291bnQpIHsKIAkJCWlmIChvcGVuX2NvdW50ID4gMCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBvZmZsaW5lIGRhc2QgIgotCQkJCSAgICAgICAiZGV2aWNlIHdpdGggb3BlbiBjb3VudCA9ICVpLlxuIiwKLQkJCQkgICAgICAgb3Blbl9jb3VudCk7CisJCQkJcHJfd2FybmluZygiJXM6IFRoZSBEQVNEIGNhbm5vdCBiZSBzZXQgb2ZmbGluZSAiCisJCQkJCSAgICJ3aXRoIG9wZW4gY291bnQgJWlcbiIsCisJCQkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBvcGVuX2NvdW50KTsKIAkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyIsCi0JCQkJICAgICAgICJDYW4ndCBvZmZsaW5lIGRhc2QgZGV2aWNlIGR1ZSAiCi0JCQkJICAgICAgICJ0byBpbnRlcm5hbCB1c2VcbiIpOworCQkJCXByX3dhcm5pbmcoIiVzOiBUaGUgREFTRCBjYW5ub3QgYmUgc2V0IG9mZmxpbmUgIgorCQkJCQkgICAid2hpbGUgaXQgaXMgaW4gdXNlXG4iLAorCQkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQljbGVhcl9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZkZXZpY2UtPmZsYWdzKTsKIAkJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCQkJcmV0dXJuIC1FQlVTWTsKQEAgLTIzOTMsOCArMjQwNCwxMCBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KG1hZ2ljLCAxIC8qIFJEQyAqLywgcmRjX2J1ZmZlcl9zaXplLCBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgUkRDIHJlcXVlc3QiKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMTMgLSBBbGxvY2F0aW5nIHRoZSBSREMgcmVxdWVzdCBmYWlsZWQqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJICJyZWFzb249JXNcbiIsICIxMyIpOwogCQlyZXR1cm4gY3FyOwogCX0KIApAQCAtMjQzMSw2ICsyNDQ0LDQwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMpOwogCisvKgorICogICBJbiBjb21tYW5kIG1vZGUgYW5kIHRyYW5zcG9ydCBtb2RlIHdlIG5lZWQgdG8gbG9vayBmb3Igc2Vuc2UKKyAqICAgZGF0YSBpbiBkaWZmZXJlbnQgcGxhY2VzLiBUaGUgc2Vuc2UgZGF0YSBpdHNlbGYgaXMgYWxsd2F5cworICogICBhbiBhcnJheSBvZiAzMiBieXRlcywgc28gd2UgY2FuIHVuaWZ5IHRoZSBzZW5zZSBkYXRhIGFjY2VzcworICogICBmb3IgYm90aCBtb2Rlcy4KKyAqLworY2hhciAqZGFzZF9nZXRfc2Vuc2Uoc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0c2IgKnRzYiA9IE5VTEw7CisJY2hhciAqc2Vuc2UgPSBOVUxMOworCisJaWYgKHNjc3dfaXNfdG0oJmlyYi0+c2NzdykgJiYgKGlyYi0+c2Nzdy50bS5mY3hzID09IDB4MDEpKSB7CisJCWlmIChpcmItPnNjc3cudG0udGN3KQorCQkJdHNiID0gdGN3X2dldF90c2IoKHN0cnVjdCB0Y3cgKikodW5zaWduZWQgbG9uZykKKwkJCQkJICBpcmItPnNjc3cudG0udGN3KTsKKwkJaWYgKHRzYiAmJiB0c2ItPmxlbmd0aCA9PSA2NCAmJiB0c2ItPmZsYWdzKQorCQkJc3dpdGNoICh0c2ItPmZsYWdzICYgMHgwNykgeworCQkJY2FzZSAxOgkvKiB0c2FfaW9zdGF0ICovCisJCQkJc2Vuc2UgPSB0c2ItPnRzYS5pb3N0YXQuc2Vuc2U7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6IC8qIHRzYV9kZHBjICovCisJCQkJc2Vuc2UgPSB0c2ItPnRzYS5kZHBjLnNlbnNlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBjdXJyZW50bHkgd2UgZG9uJ3QgdXNlIGludGVycm9nYXRlIGRhdGEgKi8KKwkJCQlicmVhazsKKwkJCX0KKwl9IGVsc2UgaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKKwkJc2Vuc2UgPSBpcmItPmVjdzsKKwl9CisJcmV0dXJuIHNlbnNlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZXRfc2Vuc2UpOworCiBzdGF0aWMgaW50IF9faW5pdCBkYXNkX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CkBAIC0yNDcyLDcgKzI1MTksNyBAQAogCiAJcmV0dXJuIDA7CiBmYWlsZWQ6Ci0JTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJpbml0aWFsaXphdGlvbiBub3QgcGVyZm9ybWVkIGR1ZSB0byBlcnJvcnMiKTsKKwlwcl9pbmZvKCJUaGUgREFTRCBkZXZpY2UgZHJpdmVyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZFxuIik7CiAJZGFzZF9leGl0KCk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKaW5kZXggZDgyYWFkNS4uMjc5OTFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCkBAIC03LDYgKzcsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CkBAIC03NSw3ICs3Nyw3IEBACiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKKwlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCiAJCSAgICAiYmxvY2tpbmcgcmVxdWVzdCBxdWV1ZSBmb3IgJWlzIiwgZXhwaXJlcy9IWik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwpAQCAtMTE0LDkgKzExNiw5IEBACiAJfSBlbHNlIHsKIAogCQkvKiBpc3N1ZSBhIG1lc3NhZ2UgYW5kIHdhaXQgZm9yICdkZXZpY2UgcmVhZHknIGludGVycnVwdCAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCSAgICAiaXMgb2ZmbGluZSBvciBub3QgaW5zdGFsbGVkIC0gIgotCQkJICAgICJJTlRFUlZFTlRJT04gUkVRVUlSRUQhISIpOworCQkJICAgICJJTlRFUlZFTlRJT04gUkVRVUlSRUQhIVxuIik7CiAKIAkJZGFzZF8zOTkwX2VycF9ibG9ja19xdWV1ZShlcnAsIDYwKkhaKTsKIAl9CkBAIC0xNTgsNyArMTYwLDcgQEAKIAogCWlmICgoZXJwLT5scG0gJiBvcG0pICE9IDB4MDApIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwKIAkJCSAgICAidHJ5IGFsdGVybmF0ZSBscG09JXggKGxwdW09JXggLyBvcG09JXgpIiwKIAkJCSAgICBlcnAtPmxwbSwgZXJwLT5pcmIuZXN3LmVzdzAuc3VibG9nLmxwdW0sIG9wbSk7CiAKQEAgLTE2NiwxMCArMTY4LDkgQEAKIAkJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CiAJCWVycC0+cmV0cmllcyA9IDEwOwogCX0gZWxzZSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkgICAgIk5vIGFsdGVybmF0ZSBjaGFubmVsIHBhdGggbGVmdCAobHB1bT0leCAvICIKLQkJCSAgICAib3BtPSV4KSAtPiBwZXJtYW5lbnQgZXJyb3IiLAotCQkJICAgIGVycC0+aXJiLmVzdy5lc3cwLnN1YmxvZy5scHVtLCBvcG0pOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJUaGUgREFTRCBjYW5ub3QgYmUgcmVhY2hlZCBvbiBhbnkgcGF0aCAobHB1bT0leCIKKwkJCSIvb3BtPSV4KVxuIiwgZXJwLT5pcmIuZXN3LmVzdzAuc3VibG9nLmxwdW0sIG9wbSk7CiAKIAkJLyogcG9zdCByZXF1ZXN0IHdpdGggcGVybWFuZW50IGVycm9yICovCiAJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwpAQCAtMjA0LDggKzIwNSw4IEBACiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBEQ1RMX2RhdGEpLAogCQkJCQkgIGRldmljZSk7CiAJaWYgKElTX0VSUihkY3RsX2NxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIERDVEwtQ1FSIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgRENUTC1DUVJcbiIpOwogCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAkJcmV0dXJuIGVycDsKIAl9CkBAIC0yOTQsNyArMjk1LDcgQEAKIAkvKiBpbnRlcnJ1cHQgKHRoaXMgZW5hYmxlcyBlYXNpZXIgZW5xdWVpbmcgb2YgdGhlIGNxcikJICAgICovCiAJaWYgKGVycC0+ZnVuY3Rpb24gIT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImRhc2RfMzk5MF9lcnBfYWN0aW9uXzQ6IGZpcnN0IHRpbWUgcmV0cnkiKTsKIAogCQllcnAtPnJldHJpZXMgPSAyNTY7CkBAIC0zMDMsNyArMzA0LDcgQEAKIAl9IGVsc2UgewogCQlpZiAoc2Vuc2UgJiYgKHNlbnNlWzI1XSA9PSAweDFEKSkgeyAvKiBzdGF0ZSBjaGFuZ2UgcGVuZGluZyAqLwogCi0JCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGRldmljZSwKIAkJCQkgICAgIndhaXRpbmcgZm9yIHN0YXRlIGNoYW5nZSBwZW5kaW5nICIKIAkJCQkgICAgImludGVycnVwdCwgJWQgcmV0cmllcyBsZWZ0IiwKIAkJCQkgICAgZXJwLT5yZXRyaWVzKTsKQEAgLTMxMSwxNSArMzEyLDE0IEBACiAJCQlkYXNkXzM5OTBfZXJwX2Jsb2NrX3F1ZXVlKGVycCwgMzAqSFopOwogCiAJCX0gZWxzZSBpZiAoc2Vuc2UgJiYgKHNlbnNlWzI1XSA9PSAweDFFKSkgewkvKiBidXN5ICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGRldmljZSwKIAkJCQkgICAgImJ1c3kgLSByZWRyaXZpbmcgcmVxdWVzdCBsYXRlciwgIgogCQkJCSAgICAiJWQgcmV0cmllcyBsZWZ0IiwKIAkJCQkgICAgZXJwLT5yZXRyaWVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2RfMzk5MF9lcnBfYmxvY2tfcXVldWUoZXJwLCBIWik7CiAJCX0gZWxzZSB7Ci0KIAkJCS8qIG5vIHN0YXRlIGNoYW5nZSBwZW5kaW5nIC0gcmV0cnkgKi8KLQkJCURFVl9NRVNTQUdFIChLRVJOX0lORk8sIGRldmljZSwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIGRldmljZSwKIAkJCQkgICAgICJyZWRyaXZpbmcgcmVxdWVzdCBpbW1lZGlhdGVseSwgIgogCQkJCSAgICAgIiVkIHJldHJpZXMgbGVmdCIsCiAJCQkJICAgICBlcnAtPnJldHJpZXMpOwpAQCAtMzg0LDYgKzM4NCw3IEBACiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwogCWNoYXIgbXNnX2Zvcm1hdCA9IChzZW5zZVs3XSAmIDB4RjApOwogCWNoYXIgbXNnX25vID0gKHNlbnNlWzddICYgMHgwRik7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAlzd2l0Y2ggKG1zZ19mb3JtYXQpIHsKIAljYXNlIDB4MDA6CQkvKiBGb3JtYXQgMCAtIFByb2dyYW0gb3IgU3lzdGVtIENoZWNrcyAqLwpAQCAtMzk0LDk1ICszOTUsOTcgQEAKIAkJCWNhc2UgMHgwMDoJLyogTm8gTWVzc2FnZSAqLwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAxOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBDb21tYW5kIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBDb21tYW5kXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMjoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIENvbW1hbmQgIgotCQkJCQkgICAgIlNlcXVlbmNlIik7CisJCQkJCSAgICAiU2VxdWVuY2VcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAzOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIENDVyBDb3VudCBsZXNzIHRoYW4gIgotCQkJCQkgICAgInJlcXVpcmVkIik7CisJCQkJCSAgICAicmVxdWlyZWRcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA0OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gSW52YWxpZCBQYXJhbWV0ZXIiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAgICAiRk9STUFUIDAgLSBJbnZhbGlkIFBhcmFtZXRlclxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDU6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBEaWFnbm9zdGljIG9mIFNlcGVjaWFsIgotCQkJCQkgICAgIiBDb21tYW5kIFZpb2xhdGVzIEZpbGUgTWFzayIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIERpYWdub3N0aWMgb2YgU3BlY2lhbCIKKwkJCQkJICAgICIgQ29tbWFuZCBWaW9sYXRlcyBGaWxlIE1hc2tcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA3OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIENoYW5uZWwgUmV0dXJuZWQgd2l0aCAiCi0JCQkJCSAgICAiSW5jb3JyZWN0IHJldHJ5IENDVyIpOworCQkJCQkgICAgIkluY29ycmVjdCByZXRyeSBDQ1dcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA4OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXQgTm90aWZpY2F0aW9uIik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXQgTm90aWZpY2F0aW9uXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwOToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIFN0b3JhZ2UgUGF0aCBSZXN0YXJ0Iik7CisJCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCQkgIkZPUk1BVCAwIC0gU3RvcmFnZSBQYXRoIFJlc3RhcnRcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBBOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIENoYW5uZWwgcmVxdWVzdGVkICIKLQkJCQkJICAgICIuLi4gJTAyeCIsIHNlbnNlWzhdKTsKKwkJCQkJICAgICIuLi4gJTAyeFxuIiwgc2Vuc2VbOF0pOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBCOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIEludmFsaWQgRGVmZWN0aXZlLyIKLQkJCQkJICAgICJBbHRlcm5hdGUgVHJhY2sgUG9pbnRlciIpOworCQkJCQkgICAgIkFsdGVybmF0ZSBUcmFjayBQb2ludGVyXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwQzoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBEUFMgSW5zdGFsbGF0aW9uICIKLQkJCQkJICAgICJDaGVjayIpOworCQkJCQkgICAgIkNoZWNrXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwRToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBDb21tYW5kIEludmFsaWQgb24gIgotCQkJCQkgICAgIlNlY29uZGFyeSBBZGRyZXNzIik7CisJCQkJCSAgICAiU2Vjb25kYXJ5IEFkZHJlc3NcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDBGOgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIFN0YXR1cyBOb3QgQXMgIgotCQkJCQkgICAgIlJlcXVpcmVkOiByZWFzb24gJTAyeCIsIHNlbnNlWzhdKTsKKwkJCQkJICAgICJSZXF1aXJlZDogcmVhc29uICUwMnhcbiIsCisJCQkJCSBzZW5zZVs4XSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkgICAgIkZPUk1BVCAwIC0gUmVzZXZlZCIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2VydmVkXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCAobXNnX25vKSB7CiAJCQljYXNlIDB4MDA6CS8qIE5vIE1lc3NhZ2UgKi8KIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMToKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkJICAgICJGT1JNQVQgMCAtIERldmljZSBFcnJvciBTb3VyY2UiKTsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAiRk9STUFUIDAgLSBEZXZpY2UgRXJyb3IgIgorCQkJCQkgIlNvdXJjZVxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MDI6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZCIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2VydmVkXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwMzoKLQkJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJCSAgICAiRk9STUFUIDAgLSBEZXZpY2UgRmVuY2VkIC0gIgotCQkJCQkgICAgImRldmljZSA9ICUwMngiLCBzZW5zZVs0XSk7CisJCQkJCSAgICAiZGV2aWNlID0gJTAyeFxuIiwgc2Vuc2VbNF0pOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDA0OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkJICAgICJGT1JNQVQgMCAtIERhdGEgUGlubmVkIGZvciAiCi0JCQkJCSAgICAiRGV2aWNlIik7CisJCQkJCSAgICAiRGV2aWNlXG4iKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJCSAgICAiRk9STUFUIDAgLSBSZXNlcnZlZCIpOworCQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJICAgICJGT1JNQVQgMCAtIFJlc2VydmVkXG4iKTsKIAkJCX0KIAkJfQogCQlicmVhazsKQEAgLTQ5MiwzNDggKzQ5NSwzNTIgQEAKIAkJY2FzZSAweDAwOgkvKiBObyBNZXNzYWdlICovCiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBTdGF0dXMgMSBub3QgYXMgIgotCQkJCSAgICAiZXhwZWN0ZWQiKTsKKwkJCQkgICAgImV4cGVjdGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gSW5kZXggbWlzc2luZyIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBJbmRleCBtaXNzaW5nXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAxIC0gSW50ZXJydXB0aW9uIGNhbm5vdCBiZSByZXNldCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiRk9STUFUIDEgLSBJbnRlcnJ1cHRpb24gY2Fubm90IGJlICIKKwkJCQkgInJlc2V0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gRGV2aWNlIGRpZCBub3QgcmVzcG9uZCB0byAiCi0JCQkJICAgICJzZWxlY3Rpb24iKTsKKwkJCQkgICAgInNlbGVjdGlvblxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBjaGVjay0yIGVycm9yIG9yIFNldCAiCi0JCQkJICAgICJTZWN0b3IgaXMgbm90IGNvbXBsZXRlIik7CisJCQkJICAgICJTZWN0b3IgaXMgbm90IGNvbXBsZXRlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCAxIC0gSGVhZCBhZGRyZXNzIGRvZXMgbm90ICIKLQkJCQkgICAgImNvbXBhcmUiKTsKKwkJCQkgICAgImNvbXBhcmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2Ugc3RhdHVzIDEgbm90IHZhbGlkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBzdGF0dXMgMSBub3QgdmFsaWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBEZXZpY2Ugbm90IHJlYWR5Iik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMSAtIERldmljZSBub3QgcmVhZHlcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBUcmFjayBwaHlzaWNhbCBhZGRyZXNzIGRpZCAiCi0JCQkJICAgICJub3QgY29tcGFyZSIpOworCQkJCSAgICAibm90IGNvbXBhcmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBNaXNzaW5nIGRldmljZSBhZGRyZXNzIGJpdCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBNaXNzaW5nIGRldmljZSBhZGRyZXNzIGJpdFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBDOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIERyaXZlIG1vdG9yIHN3aXRjaCBpcyBvZmYiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAxIC0gRHJpdmUgbW90b3Igc3dpdGNoIGlzIG9mZlxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMSAtIFNlZWsgaW5jb21wbGV0ZSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBTZWVrIGluY29tcGxldGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDEgLSBDeWxpbmRlciBhZGRyZXNzIGRpZCBub3QgIgotCQkJCSAgICAiY29tcGFyZSIpOworCQkJCSAgICAiY29tcGFyZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBGOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgMSAtIE9mZnNldCBhY3RpdmUgY2Fubm90IGJlICIKLQkJCQkgICAgInJlc2V0Iik7CisJCQkJICAgICJyZXNldFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDEgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDEgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4MjA6CQkvKiBGb3JtYXQgMiAtIDM5OTAgRXF1aXBtZW50IENoZWNrcyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAyIC0gMzk5MCBjaGVjay0yIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMiAtIDM5OTAgY2hlY2stMiBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMiAtIFN1cHBvcnQgZmFjaWxpdHkgZXJyb3JzIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgMiAtIFN1cHBvcnQgZmFjaWxpdHkgZXJyb3JzXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKLQkJCQkgICAgIkZPUk1BVCAyIC0gTWljcm9jb2RlIGRldGVjdGVkIGVycm9yICUwMngiLAotCQkJCSAgICBzZW5zZVs4XSk7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgMiAtIE1pY3JvY29kZSBkZXRlY3RlZCBlcnJvciAiCisJCQkJICIlMDJ4XG4iLAorCQkJCSBzZW5zZVs4XSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDIgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDIgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDB4MzA6CQkvKiBGb3JtYXQgMyAtIDM5OTAgQ29udHJvbCBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDBGOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgMyAtIEFsbGVnaWFuY2UgdGVybWluYXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDMgLSBBbGxlZ2lhbmNlIHRlcm1pbmF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCAzIC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCAzIC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDQwOgkJLyogRm9ybWF0IDQgLSBEYXRhIENoZWNrcyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gSG9tZSBhZGRyZXNzIGFyZWEgZXJyb3IiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gSG9tZSBhZGRyZXNzIGFyZWEgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBDb3VudCBhcmVhIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIENvdW50IGFyZWEgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDQgLSBLZXkgYXJlYSBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBLZXkgYXJlYSBlcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIERhdGEgYXJlYSBlcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDQgLSBEYXRhIGFyZWEgZXJyb3JcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gaG9tZSBhZGRyZXNzICIKLQkJCQkgICAgImFyZWEiKTsKKwkJCQkgICAgImFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4gY291bnQgYWRkcmVzcyAiCi0JCQkJICAgICJhcmVhIik7CisJCQkJICAgICJhcmVhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGtleSBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBrZXkgYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBkYXRhIGFyZWEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luYyBieXRlIGluIGRhdGEgYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIEhvbWUgYWRkcmVzcyBhcmVhIGVycm9yOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gQ291bnQgYXJlYSBlcnJvcjsgb2Zmc2V0ICIKLQkJCQkgICAgImFjdGl2ZSIpOworCQkJCSAgICAiYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gS2V5IGFyZWEgZXJyb3I7IG9mZnNldCAiCi0JCQkJICAgICJhY3RpdmUiKTsKKwkJCQkgICAgImFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBCOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIERhdGEgYXJlYSBlcnJvcjsgIgotCQkJCSAgICAib2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAib2Zmc2V0IGFjdGl2ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBDOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNCAtIE5vIHN5bmMgYnl0ZSBpbiBob21lICIKLQkJCQkgICAgImFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAiYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA0IC0gTm8gc3luIGJ5dGUgaW4gY291bnQgIgotCQkJCSAgICAiYWRkcmVzcyBhcmVhOyBvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW5jIGJ5dGUgaW4ga2V5IGFyZWE7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwRjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDQgLSBObyBzeW4gYnl0ZSBpbiBkYXRhIGFyZWE7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA0IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA0IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDUwOiAgLyogRm9ybWF0IDUgLSBEYXRhIENoZWNrIHdpdGggZGlzcGxhY2VtZW50IGluZm9ybWF0aW9uICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSAiCi0JCQkJICAgICJob21lIGFkZHJlc3MgYXJlYSIpOworCQkJCSAgICAiaG9tZSBhZGRyZXNzIGFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBjb3VudCBhcmVhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGNvdW50ICIKKwkJCQkgImFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBrZXkgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBrZXkgYXJlYVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNSAtIERhdGEgQ2hlY2sgaW4gdGhlIGRhdGEgYXJlYSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBkYXRhICIKKwkJCQkgImFyZWFcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSAiCi0JCQkJICAgICJob21lIGFkZHJlc3MgYXJlYTsgb2Zmc2V0IGFjdGl2ZSIpOworCQkJCSAgICAiaG9tZSBhZGRyZXNzIGFyZWE7IG9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwOToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBjb3VudCBhcmVhOyAiCi0JCQkJICAgICJvZmZzZXQgYWN0aXZlIik7CisJCQkJICAgICJvZmZzZXQgYWN0aXZlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA1IC0gRGF0YSBDaGVjayBpbiB0aGUga2V5IGFyZWE7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDUgLSBEYXRhIENoZWNrIGluIHRoZSBkYXRhIGFyZWE7ICIKLQkJCQkgICAgIm9mZnNldCBhY3RpdmUiKTsKKwkJCQkgICAgIm9mZnNldCBhY3RpdmVcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA1IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA1IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweDYwOiAgLyogRm9ybWF0IDYgLSBVc2FnZSBTdGF0aXN0aWNzL092ZXJydW4gRXJyb3JzICovCiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgQVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBCIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBCXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEMiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIENcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBFIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBFXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEYiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA2IC0gT3ZlcnJ1biBvbiBjaGFubmVsIEZcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNjoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgRyIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDYgLSBPdmVycnVuIG9uIGNoYW5uZWwgR1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBIIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIE92ZXJydW4gb24gY2hhbm5lbCBIXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNiAtIFJlc2VydmVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgNiAtIFJlc2VydmVkXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMHg3MDogIC8qIEZvcm1hdCA3IC0gRGV2aWNlIENvbm5lY3Rpb24gQ29udHJvbCBDaGVja3MgKi8KIAkJc3dpdGNoIChtc2dfbm8pIHsKIAkJY2FzZSAweDAwOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIFJDQyBpbml0aWF0ZWQgYnkgYSBjb25uZWN0aW9uICIKLQkJCQkgICAgImNoZWNrIGFsZXJ0Iik7CisJCQkJICAgICJjaGVjayBhbGVydFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAxOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIFJDQyAxIHNlcXVlbmNlIG5vdCAiCi0JCQkJICAgICJzdWNjZXNzZnVsIik7CisJCQkJICAgICJzdWNjZXNzZnVsXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gUkNDIDEgYW5kIFJDQyAyIHNlcXVlbmNlcyBub3QgIgotCQkJCSAgICAic3VjY2Vzc2Z1bCIpOworCQkJCSAgICAic3VjY2Vzc2Z1bFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIEludmFsaWQgdGFnLWluIGR1cmluZyAiCi0JCQkJICAgICJzZWxlY3Rpb24gc2VxdWVuY2UiKTsKKwkJCQkgICAgInNlbGVjdGlvbiBzZXF1ZW5jZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgNyAtIGV4dHJhIFJDQyByZXF1aXJlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDcgLSBleHRyYSBSQ0MgcmVxdWlyZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwNToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBJbnZhbGlkIERDQyBzZWxlY3Rpb24gIgotCQkJCSAgICAicmVzcG9uc2Ugb3IgdGltZW91dCIpOworCQkJCSAgICAicmVzcG9uc2Ugb3IgdGltZW91dFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIE1pc3NpbmcgZW5kIG9wZXJhdGlvbjsgZGV2aWNlICIKLQkJCQkgICAgInRyYW5zZmVyIGNvbXBsZXRlIik7CisJCQkJICAgICJ0cmFuc2ZlciBjb21wbGV0ZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgNyAtIE1pc3NpbmcgZW5kIG9wZXJhdGlvbjsgZGV2aWNlICIKLQkJCQkgICAgInRyYW5zZmVyIGluY29tcGxldGUiKTsKKwkJCQkgICAgInRyYW5zZmVyIGluY29tcGxldGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwODoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBJbnZhbGlkIHRhZy1pbiBmb3IgYW4gIgotCQkJCSAgICAiaW1tZWRpYXRlIGNvbW1hbmQgc2VxdWVuY2UiKTsKKwkJCQkgICAgImltbWVkaWF0ZSBjb21tYW5kIHNlcXVlbmNlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gSW52YWxpZCB0YWctaW4gZm9yIGFuICIKLQkJCQkgICAgImV4dGVuZGVkIGNvbW1hbmQgc2VxdWVuY2UiKTsKKwkJCQkgICAgImV4dGVuZGVkIGNvbW1hbmQgc2VxdWVuY2VcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSAzOTkwIG1pY3JvY29kZSB0aW1lIG91dCB3aGVuICIKLQkJCQkgICAgInN0b3BwaW5nIHNlbGVjdGlvbiIpOworCQkJCSAgICAic3RvcHBpbmcgc2VsZWN0aW9uXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gTm8gcmVzcG9uc2UgdG8gc2VsZWN0aW9uICIKLQkJCQkgICAgImFmdGVyIGEgcG9sbCBpbnRlcnJ1cHRpb24iKTsKKwkJCQkgICAgImFmdGVyIGEgcG9sbCBpbnRlcnJ1cHRpb25cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwQzoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAgICAiRk9STUFUIDcgLSBQZXJtYW5lbnQgcGF0aCBlcnJvciAoREFTRCAiCi0JCQkJICAgICJjb250cm9sbGVyIG5vdCBhdmFpbGFibGUpIik7CisJCQkJICAgICJjb250cm9sbGVyIG5vdCBhdmFpbGFibGUpXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA3IC0gREFTRCBjb250cm9sbGVyIG5vdCBhdmFpbGFibGUiCi0JCQkJICAgICIgb24gZGlzY29ubmVjdGVkIGNvbW1hbmQgY2hhaW4iKTsKKwkJCQkgICAgIiBvbiBkaXNjb25uZWN0ZWQgY29tbWFuZCBjaGFpblxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIDcgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIDcgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTg0MSw1MiArODQ4LDUyIEBACiAJCXN3aXRjaCAobXNnX25vKSB7CiAJCWNhc2UgMHgwMDoJLyogTm8gTWVzc2FnZSAqLwogCQljYXNlIDB4MDE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gRXJyb3IgY29ycmVjdGlvbiBjb2RlICIKLQkJCQkgICAgImhhcmR3YXJlIGZhdWx0Iik7CisJCQkJICAgICJoYXJkd2FyZSBmYXVsdFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAzOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIFVuZXhwZWN0ZWQgZW5kIG9wZXJhdGlvbiAiCi0JCQkJICAgICJyZXNwb25zZSBjb2RlIik7CisJCQkJICAgICJyZXNwb25zZSBjb2RlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gRW5kIG9wZXJhdGlvbiB3aXRoIHRyYW5zZmVyICIKLQkJCQkgICAgImNvdW50IG5vdCB6ZXJvIik7CisJCQkJICAgICJjb3VudCBub3QgemVyb1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA1OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIEVuZCBvcGVyYXRpb24gd2l0aCB0cmFuc2ZlciAiCi0JCQkJICAgICJjb3VudCB6ZXJvIik7CisJCQkJICAgICJjb3VudCB6ZXJvXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDY6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gRFBTIGNoZWNrcyBhZnRlciBhIHN5c3RlbSAiCi0JCQkJICAgICJyZXNldCBvciBzZWxlY3RpdmUgcmVzZXQiKTsKKwkJCQkgICAgInJlc2V0IG9yIHNlbGVjdGl2ZSByZXNldFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA3OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOCAtIERQUyBjYW5ub3QgYmUgZmlsbGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgOCAtIERQUyBjYW5ub3QgYmUgZmlsbGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDg6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gU2hvcnQgYnVzeSB0aW1lLW91dCBkdXJpbmcgIgotCQkJCSAgICAiZGV2aWNlIHNlbGVjdGlvbiIpOworCQkJCSAgICAiZGV2aWNlIHNlbGVjdGlvblxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA5OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgOCAtIERBU0QgY29udHJvbGxlciBmYWlsZWQgdG8gIgotCQkJCSAgICAic2V0IG9yIHJlc2V0IHRoZSBsb25nIGJ1c3kgbGF0Y2giKTsKKwkJCQkgICAgInNldCBvciByZXNldCB0aGUgbG9uZyBidXN5IGxhdGNoXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA4IC0gTm8gaW50ZXJydXB0aW9uIGZyb20gZGV2aWNlICIKLQkJCQkgICAgImR1cmluZyBhIGNvbW1hbmQgY2hhaW4iKTsKKwkJCQkgICAgImR1cmluZyBhIGNvbW1hbmQgY2hhaW5cbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA4IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA4IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCkBAIC04OTUsOTcgKzkwMiwxMDAgQEAKIAkJY2FzZSAweDAwOgogCQkJYnJlYWs7CS8qIE5vIE1lc3NhZ2UgKi8KIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgOSAtIERldmljZSBjaGVjay0yIGVycm9yIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgOSAtIERldmljZSBjaGVjay0yIGVycm9yXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA5IC0gSGVhZCBhZGRyZXNzIGRpZCBub3QgY29tcGFyZSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiRk9STUFUIDkgLSBIZWFkIGFkZHJlc3MgZGlkIG5vdCAiCisJCQkJICJjb21wYXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA5IC0gVHJhY2sgcGh5c2ljYWwgYWRkcmVzcyBkaWQgIgotCQkJCSAgICAibm90IGNvbXBhcmUgd2hpbGUgb3JpZW50ZWQiKTsKKwkJCQkgICAgIm5vdCBjb21wYXJlIHdoaWxlIG9yaWVudGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEU6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCA5IC0gQ3lsaW5kZXIgYWRkcmVzcyBkaWQgbm90ICIKLQkJCQkgICAgImNvbXBhcmUiKTsKKwkJCQkgICAgImNvbXBhcmVcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCA5IC0gUmVzZXJ2ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCA5IC0gUmVzZXJ2ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSAweEYwOgkJLyogRm9ybWF0IEYgLSBDYWNoZSBTdG9yYWdlIENoZWNrcyAqLwogCQlzd2l0Y2ggKG1zZ19ubykgewogCQljYXNlIDB4MDA6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gT3BlcmF0aW9uIFRlcm1pbmF0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gT3BlcmF0aW9uIFRlcm1pbmF0ZWRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMToKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEYgLSBTdWJzeXN0ZW0gUHJvY2Vzc2luZyBFcnJvciIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBTdWJzeXN0ZW0gUHJvY2Vzc2luZyBFcnJvclxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgRiAtIENhY2hlIG9yIG5vbnZvbGF0aWxlIHN0b3JhZ2UgIgotCQkJCSAgICAiZXF1aXBtZW50IGZhaWx1cmUiKTsKKwkJCQkgICAgImVxdWlwbWVudCBmYWlsdXJlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGluZyB0ZXJtaW5hdGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJGT1JNQVQgRiAtIENhY2hpbmcgdGVybWluYXRlZFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDA2OgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJGT1JNQVQgRiAtIENhY2hlIGZhc3Qgd3JpdGUgYWNjZXNzIG5vdCAiCi0JCQkJICAgICJhdXRob3JpemVkIik7CisJCQkJICAgICJhdXRob3JpemVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDc6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gVHJhY2sgZm9ybWF0IGluY29ycmVjdCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBUcmFjayBmb3JtYXQgaW5jb3JyZWN0XG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDk6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGluZyByZWluaXRpYXRlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBDYWNoaW5nIHJlaW5pdGlhdGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEE6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCBGIC0gTm9udm9sYXRpbGUgc3RvcmFnZSAiCi0JCQkJICAgICJ0ZXJtaW5hdGVkIik7CisJCQkJICAgICJ0ZXJtaW5hdGVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEI6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gVm9sdW1lIGlzIHN1c3BlbmRlZCBkdXBsZXgiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gVm9sdW1lIGlzIHN1c3BlbmRlZCBkdXBsZXhcbiIpOwogCQkJLyogY2FsbCBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgKEVFUikgKi8KIAkJCWRhc2RfZWVyX3dyaXRlKGRldmljZSwgZXJwLT5yZWZlcnMsCiAJCQkJICAgICAgIERBU0RfRUVSX1BQUkNTVVNQRU5EKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEM6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkZPUk1BVCBGIC0gU3Vic3lzdGVtIHN0YXR1cyBjb25ub3QgYmUgIgotCQkJCSAgICAiZGV0ZXJtaW5lZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEYgLSBTdWJzeXN0ZW0gc3RhdHVzIGNhbm5vdCBiZSAiCisJCQkJICAgICJkZXRlcm1pbmVkXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MEQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKIAkJCQkgICAgIkZPUk1BVCBGIC0gQ2FjaGluZyBzdGF0dXMgcmVzZXQgdG8gIgotCQkJCSAgICAiZGVmYXVsdCIpOworCQkJCSAgICAiZGVmYXVsdFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSAweDBFOgotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJGT1JNQVQgRiAtIERBU0QgRmFzdCBXcml0ZSBpbmhpYml0ZWQiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgICAgIkZPUk1BVCBGIC0gREFTRCBGYXN0IFdyaXRlIGluaGliaXRlZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiRk9STUFUIEQgLSBSZXNlcnZlZCIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRk9STUFUIEQgLSBSZXNlcnZlZFxuIik7CiAJCX0KIAkJYnJlYWs7CiAKLQlkZWZhdWx0OgkvKiB1bmtub3duIG1lc3NhZ2UgZm9ybWF0IC0gc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQkgICAgICAgIERFVl9NRVNTQUdFIChLRVJOX1dBUk5JTkcsIGRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gbWVzc2FnZSBmb3JtYXQgJTAyeCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19mb3JtYXQpOworCWRlZmF1bHQ6CS8qIHVua25vd24gbWVzc2FnZSBmb3JtYXQgLSBzaG91bGQgbm90IGhhcHBlbgorCQkJICAgaW50ZXJuYWwgZXJyb3IgMDMgLSB1bmtub3duIG1lc3NhZ2UgZm9ybWF0ICovCisJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjAzICV4MDIiLCBtc2dfZm9ybWF0KTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSAicmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCWJyZWFrOwogCX0JCQkvKiBlbmQgc3dpdGNoIG1lc3NhZ2UgZm9ybWF0ICovCiAKQEAgLTEwMTUsNyArMTAyNSw3IEBACiAJLyogZW52IGRhdGEgcHJlc2VudCAoQUNUSU9OIDEwIC0gcmV0cnkgc2hvdWxkIHdvcmspICovCiAJaWYgKHNlbnNlWzJdICYgU05TMl9FTlZfREFUQV9QUkVTRU5UKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvbW1hbmQgUmVqZWN0IC0gZW52aXJvbm1lbnRhbCBkYXRhIHByZXNlbnQiKTsKIAogCQlkYXNkXzM5OTBfaGFuZGxlX2Vudl9kYXRhKGVycCwgc2Vuc2UpOwpAQCAtMTAyMyw5ICsxMDMzLDEwIEBACiAJCWVycC0+cmV0cmllcyA9IDU7CiAKIAl9IGVsc2UgewotCQkvKiBmYXRhbCBlcnJvciAtICBzZXQgc3RhdHVzIHRvIEZBSUxFRCAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb21tYW5kIFJlamVjdCAtIEZhdGFsIGVycm9yIik7CisJCS8qIGZhdGFsIGVycm9yIC0gIHNldCBzdGF0dXMgdG8gRkFJTEVECisJCSAgIGludGVybmFsIGVycm9yIDA5IC0gQ29tbWFuZCBSZWplY3QgKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCAiMDkiKTsKIAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCX0KQEAgLTEwNjEsNyArMTA3Miw3IEBACiAJfSBlbHNlIHsKIAogCQkvKiBpc3N1ZSBhIG1lc3NhZ2UgYW5kIHdhaXQgZm9yICdkZXZpY2UgcmVhZHknIGludGVycnVwdCAqLwotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiYnVzIG91dCBwYXJpdHkgZXJyb3Igb3IgQk9QQyByZXF1ZXN0ZWQgYnkgIgogCQkJICAgICJjaGFubmVsIik7CiAKQEAgLTEwOTMsMjEgKzExMDQsMTkgQEAKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9lcXVpcF9jaGVjazsKIAogCWlmIChzZW5zZVsxXSAmIFNOUzFfV1JJVEVfSU5ISUJJVEVEKSB7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAgICAiV3JpdGUgaW5oaWJpdGVkIHBhdGggZW5jb3VudGVyZWRcbiIpOwogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiV3JpdGUgaW5oaWJpdGVkIHBhdGggZW5jb3VudGVyZWQiKTsKLQotCQkvKiB2YXJ5IHBhdGggb2ZmbGluZSAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJQYXRoIHNob3VsZCBiZSB2YXJpZWQgb2ZmLWxpbmUuICIKLQkJCSAgICAiVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0IFxuIC0gcGxlYXNlIHJlcG9ydCAiCi0JCQkgICAgInRvIGxpbnV4MzkwQGRlLmlibS5jb20iKTsKKwkJLyogdmFyeSBwYXRoIG9mZmxpbmUKKwkJICAgaW50ZXJuYWwgZXJyb3IgMDQgLSBQYXRoIHNob3VsZCBiZSB2YXJpZWQgb2ZmLWxpbmUuKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCAiMDQiKTsKIAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xKGVycCk7CiAKIAl9IGVsc2UgaWYgKHNlbnNlWzJdICYgU05TMl9FTlZfREFUQV9QUkVTRU5UKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkVxdWlwbWVudCBDaGVjayAtICIgImVudmlyb25tZW50YWwgZGF0YSBwcmVzZW50Iik7CiAKIAkJZGFzZF8zOTkwX2hhbmRsZV9lbnZfZGF0YShlcnAsIHNlbnNlKTsKQEAgLTExMTYsNyArMTEyNSw3IEBACiAKIAl9IGVsc2UgaWYgKHNlbnNlWzFdICYgU05TMV9QRVJNX0VSUikgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJFcXVpcG1lbnQgQ2hlY2sgLSByZXRyeSBleGhhdXN0ZWQgb3IgIgogCQkJICAgICJ1bmRlc2lyYWJsZSIpOwogCkBAIC0xMTI1LDcgKzExMzQsNyBAQAogCX0gZWxzZSB7CiAJCS8qIGFsbCBvdGhlciBlcXVpcG1lbnQgY2hlY2tzIC0gQWN0aW9uIDUgKi8KIAkJLyogcmVzdCBpcyBkb25lIHdoZW4gcmV0cmllcyA9PSAwICovCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJFcXVpcG1lbnQgY2hlY2sgb3IgcHJvY2Vzc2luZyBlcnJvciIpOwogCiAJCWVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzUoZXJwKTsKQEAgLTExNTYsOSArMTE2NSw5IEBACiAJaWYgKHNlbnNlWzJdICYgU05TMl9DT1JSRUNUQUJMRSkgewkvKiBjb3JyZWN0YWJsZSBkYXRhIGNoZWNrICovCiAKIAkJLyogaXNzdWUgbWVzc2FnZSB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIGNvcnJlY3RlZCAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VNRVJHLCBkZXZpY2UsICIlcyIsCisJCWRldl9lbWVyZygmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkgICAgIkRhdGEgcmVjb3ZlcmVkIGR1cmluZyByZXRyeSB3aXRoIFBDSSAiCi0JCQkgICAgImZldGNoIG1vZGUgYWN0aXZlIik7CisJCQkgICAgImZldGNoIG1vZGUgYWN0aXZlXG4iKTsKIAogCQkvKiBub3QgcG9zc2libGUgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uIGluIExpbnV4ICovCiAJCXBhbmljKCJObyB3YXkgdG8gaW5mb3JtIGFwcGxpY2F0aW9uIGFib3V0IHRoZSBwb3NzaWJseSAiCkBAIC0xMTY2LDcgKzExNzUsNyBAQAogCiAJfSBlbHNlIGlmIChzZW5zZVsyXSAmIFNOUzJfRU5WX0RBVEFfUFJFU0VOVCkgewogCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJVbmNvcnJlY3RhYmxlIGRhdGEgY2hlY2sgcmVjb3ZlcmVkIHNlY29uZGFyeSAiCiAJCQkgICAgImFkZHIgb2YgZHVwbGV4IHBhaXIiKTsKIApAQCAtMTE3NCw3ICsxMTgzLDcgQEAKIAogCX0gZWxzZSBpZiAoc2Vuc2VbMV0gJiBTTlMxX1BFUk1fRVJSKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlVuY29ycmVjdGFibGUgZGF0YSBjaGVjayB3aXRoIGludGVybmFsICIKIAkJCSAgICAicmV0cnkgZXhoYXVzdGVkIik7CiAKQEAgLTExODIsNyArMTE5MSw3IEBACiAKIAl9IGVsc2UgewogCQkvKiBhbGwgb3RoZXIgZGF0YSBjaGVja3MgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIlVuY29ycmVjdGFibGUgZGF0YSBjaGVjayB3aXRoIHJldHJ5IGNvdW50ICIKIAkJCSAgICAiZXhoYXVzdGVkLi4uIik7CiAKQEAgLTEyMTIsNyArMTIyMSw3IEBACiAKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9vdmVycnVuOwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJICAgICJPdmVycnVuIC0gc2VydmljZSBvdmVycnVuIG9yIG92ZXJydW4iCiAJCSAgICAiIGVycm9yIHJlcXVlc3RlZCBieSBjaGFubmVsIik7CiAKQEAgLTEyNDMsNyArMTI1Miw3IEBACiAKIAlpZiAoc2Vuc2VbMl0gJiBTTlMyX0VOVl9EQVRBX1BSRVNFTlQpIHsKIAotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiVHJhY2sgZm9ybWF0IGVycm9yIHdoZW4gZGVzdGFnaW5nIG9yICIKIAkJCSAgICAic3RhZ2luZyBkYXRhIik7CiAKQEAgLTEyNTIsOCArMTI2MSwxMCBAQAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KGVycCwgc2Vuc2UpOwogCiAJfSBlbHNlIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiSW52YWxpZCBUcmFjayBGb3JtYXQgLSBGYXRhbCBlcnJvciIpOworCQkvKiBpbnRlcm5hbCBlcnJvciAwNiAtIFRoZSB0cmFjayBmb3JtYXQgaXMgbm90IHZhbGlkKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJInJlYXNvbj0lc1xuIiwgIjA2Iik7CiAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAl9CkBAIC0xMjc5LDggKzEyOTAsOCBAQAogCiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBkZWZhdWx0X2VycC0+c3RhcnRkZXY7CiAKLQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkgICAgIkVuZC1vZi1DeWxpbmRlciAtIG11c3QgbmV2ZXIgaGFwcGVuIik7CisJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSJUaGUgY3lsaW5kZXIgZGF0YSBmb3IgYWNjZXNzaW5nIHRoZSBEQVNEIGlzIGluY29uc2lzdGVudFxuIik7CiAKIAkvKiBpbXBsZW1lbnQgYWN0aW9uIDcgLSBCVUcgKi8KIAlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGRlZmF1bHRfZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwpAQCAtMTMwNiw3ICsxMzE3LDcgQEAKIAogCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2Vudl9kYXRhOwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLCAiRW52aXJvbm1lbnRhbCBkYXRhIHByZXNlbnQiKTsKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsICJFbnZpcm9ubWVudGFsIGRhdGEgcHJlc2VudCIpOwogCiAJZGFzZF8zOTkwX2hhbmRsZV9lbnZfZGF0YShlcnAsIHNlbnNlKTsKIApAQCAtMTMzOSw4ICsxMzUwLDggQEAKIAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZGVmYXVsdF9lcnAtPnN0YXJ0ZGV2OwogCi0JREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJICAgICJObyBSZWNvcmQgRm91bmQgLSBGYXRhbCBlcnJvciAiKTsKKwlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJICAgICJUaGUgc3BlY2lmaWVkIHJlY29yZCB3YXMgbm90IGZvdW5kXG4iKTsKIAogCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZGVmYXVsdF9lcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAKQEAgLTEzNjUsNyArMTM3Niw4IEBACiAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7CiAKLQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLCAiRmlsZSBQcm90ZWN0ZWQiKTsKKwlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSBvZiAiCisJCSJhIGhhcmR3YXJlIGVycm9yXG4iKTsKIAogCXJldHVybiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCkBAIC0xMzk0LDcgKzE0MDYsNyBAQAogCWlmIChjcXItPmJsb2NrICYmCiAJICAgIChjcXItPmJsb2NrLT5iYXNlICE9IGNxci0+c3RhcnRkZXYpKSB7CiAJCWlmIChjcXItPnN0YXJ0ZGV2LT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBjcXItPnN0YXJ0ZGV2LAorCQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBjcXItPnN0YXJ0ZGV2LAogCQkJCSAgICAiRVJQIG9uIGFsaWFzIGRldmljZSBmb3IgcmVxdWVzdCAlcCwiCiAJCQkJICAgICIgcmVjb3ZlciBvbiBiYXNlIGRldmljZSAlcyIsIGNxciwKIAkJCQkgICAgZGV2X25hbWUoJmNxci0+YmxvY2stPmJhc2UtPmNkZXYtPmRldikpOwpAQCAtMTUxMSw3ICsxNTIzLDcgQEAKIAllcnAtPnJldHJpZXMgPSAyNTY7CiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzEwXzMyOwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLCAiUGVyZm9ybSBsb2dnaW5nIHJlcXVlc3RlZCIpOworCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwgIlBlcmZvcm0gbG9nZ2luZyByZXF1ZXN0ZWQiKTsKIAogCXJldHVybiBlcnA7CiAKQEAgLTE1NDksNyArMTU2MSw3IEBACiAJY2hhciAqTE9fZGF0YTsJCS8qIExPX2Vja2RfZGF0YV90ICovCiAJc3RydWN0IGNjdzEgKmNjdywgKm9sZGNjdzsKIAotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAiV3JpdGUgbm90IGZpbmlzaGVkIGJlY2F1c2Ugb2YgdW5leHBlY3RlZCBjb25kaXRpb24iKTsKIAogCWRlZmF1bHRfZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzFCXzMyOwpAQCAtMTU2MSwxMCArMTU3MywxNiBAQAogCQljcXIgPSBjcXItPnJlZmVyczsKIAl9CiAKKwlpZiAoc2Nzd19pc190bSgmY3FyLT5pcmIuc2NzdykpIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIjMyIGJpdCBzZW5zZSwgYWN0aW9uIDFCIGlzIG5vdCBkZWZpbmVkIgorCQkJICAgICAgIiBpbiB0cmFuc3BvcnQgbW9kZSAtIGp1c3QgcmV0cnkiKTsKKwkJcmV0dXJuIGRlZmF1bHRfZXJwOworCX0KKwogCS8qIGZvciBpbXByZWNpc2UgZW5kaW5nIGp1c3QgZG8gZGVmYXVsdCBlcnAgKi8KIAlpZiAoc2Vuc2VbMV0gJiAweDAxKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkltcHJlY2lzZSBlbmRpbmcgaXMgc2V0IC0ganVzdCByZXRyeSIpOwogCiAJCXJldHVybiBkZWZhdWx0X2VycDsKQEAgLTE1NzUsOCArMTU5Myw3IEBACiAJY3BhID0gZGVmYXVsdF9lcnAtPnJlZmVycy0+aXJiLnNjc3cuY21kLmNwYTsKIAogCWlmIChjcGEgPT0gMCkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFkZHJlc3Mgb2YgdGhlIENDVyAiCiAJCQkgICAgInRvIGJlIHJlc3RhcnRlZCIpOwogCkBAIC0xNTkwLDcgKzE2MDcsOSBAQAogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBMT19lY2tkX2RhdGEpLCBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihlcnApKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsICJVbmFibGUgdG8gYWxsb2NhdGUgRVJQIik7CisJCS8qIGludGVybmFsIGVycm9yIDAxIC0gVW5hYmxlIHRvIGFsbG9jYXRlIEVSUCAqLworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsICIwMSIpOwogCQlyZXR1cm4gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGRlZmF1bHRfZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCX0KIApAQCAtMTU5OSw3ICsxNjE4LDcgQEAKIAlvbGRjY3cgPSBjcXItPmNwYWRkcjsKIAlpZiAob2xkY2N3LT5jbWRfY29kZSA9PSBEQVNEX0VDS0RfQ0NXX1BGWCkgewogCQlQRlhfZGF0YSA9IGNxci0+ZGF0YTsKLQkJbWVtY3B5KERFX2RhdGEsICZQRlhfZGF0YS0+ZGVmaW5lX2V4dGVuZCwKKwkJbWVtY3B5KERFX2RhdGEsICZQRlhfZGF0YS0+ZGVmaW5lX2V4dGVudCwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKSk7CiAJfSBlbHNlCiAJCW1lbWNweShERV9kYXRhLCBjcXItPmRhdGEsIHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKSk7CkBAIC0xNjA4LDEwICsxNjI3LDcgQEAKIAlMT19kYXRhID0gZXJwLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBERV9lY2tkX2RhdGEpOwogCiAJaWYgKChzZW5zZVszXSA9PSAweDAxKSAmJiAoTE9fZGF0YVsxXSAmIDB4MDEpKSB7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQlVHIC0gdGhpcyBzaG91bGQgbm90IGhhcHBlbiIpOwotCisJCS8qIHNob3VsZCBub3QgKi8KIAkJcmV0dXJuIGRhc2RfMzk5MF9lcnBfY2xlYW51cChkZWZhdWx0X2VycCwgREFTRF9DUVJfRkFJTEVEKTsKIAl9CiAKQEAgLTE3MDEsNyArMTcxNyw3IEBACiAJY2hhciAqTE9fZGF0YTsJCS8qIHN0cnVjdCBMT19lY2tkX2RhdGEgKi8KIAlzdHJ1Y3QgY2N3MSAqY2N3OwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJICAgICJXcml0ZSBub3QgZmluaXNoZWQgYmVjYXVzZSBvZiB1bmV4cGVjdGVkIGNvbmRpdGlvbiIKIAkJICAgICIgLSBmb2xsb3cgb24iKTsKIApAQCAtMTcxMiwxMCArMTcyOCwxNiBAQAogCQljcXIgPSBjcXItPnJlZmVyczsKIAl9CiAKKwlpZiAoc2Nzd19pc190bSgmY3FyLT5pcmIuc2NzdykpIHsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIjMyIGJpdCBzZW5zZSwgYWN0aW9uIDFCLCB1cGRhdGUsIgorCQkJICAgICAgIiBpbiB0cmFuc3BvcnQgbW9kZSAtIGp1c3QgcmV0cnkiKTsKKwkJcmV0dXJuIHByZXZpb3VzX2VycDsKKwl9CisKIAkvKiBmb3IgaW1wcmVjaXNlIGVuZGluZyBqdXN0IGRvIGRlZmF1bHQgZXJwICovCiAJaWYgKHNlbnNlWzFdICYgMHgwMSkgewotCi0JCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJJbXByZWNpc2UgZW5kaW5nIGlzIHNldCAtIGp1c3QgcmV0cnkiKTsKIAogCQlwcmV2aW91c19lcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKQEAgLTE3MjgsMTAgKzE3NTAsMTAgQEAKIAljcGEgPSBwcmV2aW91c19lcnAtPmlyYi5zY3N3LmNtZC5jcGE7CiAKIAlpZiAoY3BhID09IDApIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWRkcmVzcyBvZiB0aGUgQ0NXICIKLQkJCSAgICAidG8gYmUgcmVzdGFydGVkIik7CisJCS8qIGludGVybmFsIGVycm9yIDAyIC0KKwkJICAgVW5hYmxlIHRvIGRldGVybWluZSBhZGRyZXNzIG9mIHRoZSBDQ1cgdG8gYmUgcmVzdGFydGVkICovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgIgorCQkJImRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgIjAyIik7CiAKIAkJcHJldmlvdXNfZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAKQEAgLTE3NDQsMTAgKzE3NjYsNyBAQAogCUxPX2RhdGEgPSBlcnAtPmRhdGEgKyBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSk7CiAKIAlpZiAoKHNlbnNlWzNdID09IDB4MDEpICYmIChMT19kYXRhWzFdICYgMHgwMSkpIHsKLQotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICJCVUcgLSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIik7Ci0KKwkJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJcHJldmlvdXNfZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAKIAkJcmV0dXJuIHByZXZpb3VzX2VycDsKQEAgLTE5MzUsMTQgKzE5NTQsMTMgQEAKIAogCWlmICgoc2Vuc2VbMjVdICYgREFTRF9TRU5TRV9CSVRfMSkgJiYgKHNlbnNlWzI2XSAmIERBU0RfU0VOU0VfQklUXzIpKSB7CiAKLQkJLyogc2V0IHRvIHN1c3BlbmRlZCBkdXBsZXggc3RhdGUgdGhlbiByZXN0YXJ0ICovCisJCS8qIHNldCB0byBzdXNwZW5kZWQgZHVwbGV4IHN0YXRlIHRoZW4gcmVzdGFydAorCQkgICBpbnRlcm5hbCBlcnJvciAwNSAtIFNldCBkZXZpY2UgdG8gc3VzcGVuZGVkIGR1cGxleCBzdGF0ZQorCQkgICBzaG91bGQgYmUgZG9uZSAqLwogCQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+c3RhcnRkZXY7Ci0KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiU2V0IGRldmljZSB0byBzdXNwZW5kZWQgZHVwbGV4IHN0YXRlIHNob3VsZCBiZSAiCi0JCQkgICAgImRvbmUhXG4iCi0JCQkgICAgIlRoaXMgaXMgbm90IGltcGxlbWVudGVkIHlldCAoZm9yIGNvbXBvdW5kIEVSUCkiCi0JCQkgICAgIiAtIHBsZWFzZSByZXBvcnQgdG8gbGludXgzOTBAZGUuaWJtLmNvbSIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkicmVhc29uPSVzXG4iLCAiMDUiKTsKIAogCX0KIApAQCAtMjAxMiwxNSArMjAzMCwxNCBAQAogewogCS8qIHByaW50IG1lc3NhZ2UgYWNjb3JkaW5nIHRvIGxvZyBvciBtZXNzYWdlIHRvIG9wZXJhdG9yIG1vZGUgKi8KIAlpZiAoKHNlbnNlWzI0XSAmIERBU0RfU0lNX01TR19UT19PUCkgfHwgKHNlbnNlWzFdICYgMHgxMCkpIHsKLQogCQkvKiBwcmludCBTSU0gU1JDIGZyb20gUmVmQ29kZSAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiU0lNIC0gU1JDOiAiCi0JCQkgICAgIiUwMnglMDJ4JTAyeCUwMngiLCBzZW5zZVsyMl0sCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiU0lNIC0gU1JDOiAiCisJCQkgICAgIiUwMnglMDJ4JTAyeCUwMnhcbiIsIHNlbnNlWzIyXSwKIAkJCSAgICBzZW5zZVsyM10sIHNlbnNlWzExXSwgc2Vuc2VbMTJdKTsKIAl9IGVsc2UgaWYgKHNlbnNlWzI0XSAmIERBU0RfU0lNX0xPRykgewogCQkvKiBwcmludCBTSU0gU1JDIFJlZmNvZGUgKi8KLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJTSU0gLSBTUkM6ICIKLQkJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCIsIHNlbnNlWzIyXSwKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAibG9nIFNJTSAtIFNSQzogIgorCQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4XG4iLCBzZW5zZVsyMl0sCiAJCQkgICAgc2Vuc2VbMjNdLCBzZW5zZVsxMV0sIHNlbnNlWzEyXSk7CiAJfQogfQpAQCAtMjA2MywxNCArMjA4MCwxNCBAQAogCQlzd2l0Y2ggKHNlbnNlWzI1XSkgewogCiAJCWNhc2UgMHgwMDoJLyogc3VjY2VzcyAtIHVzZSBkZWZhdWx0IEVSUCBmb3IgcmV0cmllcyAqLwotCQkgICAgICAgIERFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkJICAgICJFUlAgY2FsbGVkIGZvciBzdWNjZXNzZnVsIHJlcXVlc3QiCiAJCQkJICAgICIgLSBqdXN0IHJldHJ5Iik7CiAJCQlicmVhazsKIAogCQljYXNlIDB4MDE6CS8qIGZhdGFsIGVycm9yICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiUmV0cnkgbm90IHJlY29tbWVuZGVkIC0gRmF0YWwgZXJyb3IiKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAgICAiRVJQIGZhaWxlZCBmb3IgdGhlIERBU0RcbiIpOwogCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCQkJYnJlYWs7CkBAIC0yMDgwLDEzICsyMDk3LDEwIEBACiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2ludF9yZXEoZXJwKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgMHgwRjogIC8qIGxlbmd0aCBtaXNtYXRjaCBkdXJpbmcgdXBkYXRlIHdyaXRlIGNvbW1hbmQgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJ1cGRhdGUgd3JpdGUgY29tbWFuZCBlcnJvciAtIHNob3VsZCBub3QgIgotCQkJCSAgICAiaGFwcGVuO1xuIgotCQkJCSAgICAiUGxlYXNlIHNlbmQgdGhpcyBtZXNzYWdlIHRvZ2V0aGVyIHdpdGggIgotCQkJCSAgICAidGhlIGFib3ZlIHNlbnNlIGRhdGEgdG8gbGludXgzOTBAZGUuIgotCQkJCSAgICAiaWJtLmNvbSIpOworCQljYXNlIDB4MEY6ICAvKiBsZW5ndGggbWlzbWF0Y2ggZHVyaW5nIHVwZGF0ZSB3cml0ZSBjb21tYW5kCisJCQkgICAgICAgaW50ZXJuYWwgZXJyb3IgMDggLSB1cGRhdGUgd3JpdGUgY29tbWFuZCBlcnJvciovCisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSAiCisJCQkJIkRBU0QgZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCAiMDgiKTsKIAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAkJCWJyZWFrOwpAQCAtMjA5NSwxMyArMjEwOSwxMiBAQAogCQkJZXJwID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMTBfMzIoZXJwLCBzZW5zZSk7CiAJCQlicmVhazsKIAotCQljYXNlIDB4MTU6CS8qIG5leHQgdHJhY2sgb3V0c2lkZSBkZWZpbmVkIGV4dGVuZCAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIm5leHQgdHJhY2sgb3V0c2lkZSBkZWZpbmVkIGV4dGVuZCAtICIKLQkJCQkgICAgInNob3VsZCBub3QgaGFwcGVuO1xuIgotCQkJCSAgICAiUGxlYXNlIHNlbmQgdGhpcyBtZXNzYWdlIHRvZ2V0aGVyIHdpdGggIgotCQkJCSAgICAidGhlIGFib3ZlIHNlbnNlIGRhdGEgdG8gbGludXgzOTBAZGUuIgotCQkJCSAgICAiaWJtLmNvbSIpOworCQljYXNlIDB4MTU6CS8qIG5leHQgdHJhY2sgb3V0c2lkZSBkZWZpbmVkIGV4dGVuZAorCQkJCSAgIGludGVybmFsIGVycm9yIDA3IC0gVGhlIG5leHQgdHJhY2sgaXMgbm90CisJCQkJICAgd2l0aGluIHRoZSBkZWZpbmVkIHN0b3JhZ2UgZXh0ZW50ICovCisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJCSJyZWFzb249JXNcbiIsICIwNyIpOwogCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NsZWFudXAoZXJwLCBEQVNEX0NRUl9GQUlMRUQpOwogCQkJYnJlYWs7CkBAIC0yMTEyLDkgKzIxMjUsOSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDFDOgkvKiBpbnZhbGlkIGRhdGEgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRU1FUkcsIGRldmljZSwgIiVzIiwKKwkJCWRldl9lbWVyZygmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCQkJICAgICJEYXRhIHJlY292ZXJlZCBkdXJpbmcgcmV0cnkgd2l0aCBQQ0kgIgotCQkJCSAgICAiZmV0Y2ggbW9kZSBhY3RpdmUiKTsKKwkJCQkgICAgImZldGNoIG1vZGUgYWN0aXZlXG4iKTsKIAogCQkJLyogbm90IHBvc3NpYmxlIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBpbiBMaW51eCAqLwogCQkJcGFuaWMKQEAgLTIxMjMsNyArMjEzNiw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MUQ6CS8qIHN0YXRlLWNoYW5nZSBwZW5kaW5nICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkJICAgICJBIFN0YXRlIGNoYW5nZSBwZW5kaW5nIGNvbmRpdGlvbiBleGlzdHMgIgogCQkJCSAgICAiZm9yIHRoZSBzdWJzeXN0ZW0gb3IgZGV2aWNlIik7CiAKQEAgLTIxMzEsNyArMjE0NCw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MUU6CS8qIGJ1c3kgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIERFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIkJ1c3kgY29uZGl0aW9uIGV4aXN0cyAiCiAJCQkJICAgICJmb3IgdGhlIHN1YnN5c3RlbSBvciBkZXZpY2UiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVycCA9IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQoZXJwLCBzZW5zZSk7CkBAIC0yMTcxLDkgKzIxODQsOSBAQAogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZXJwLT5zdGFydGRldjsKIAotCWlmIChlcnAtPnJlZmVycy0+aXJiLnNjc3cuY21kLmNzdGF0ICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLCisJaWYgKHNjc3dfY3N0YXQoJmVycC0+cmVmZXJzLT5pcmIuc2NzdykgJiAoU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsKIAkJCQkJICAgfCBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLKSkgewotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiY2hhbm5lbCBvciBpbnRlcmZhY2UgY29udHJvbCBjaGVjayIpOwogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KGVycCwgTlVMTCk7CiAJfQpAQCAtMjE5MywyMSArMjIwNiwyMyBAQAogICogICBlcnBfbmV3CQljb250ZW5zIHdhcyBwb3NzaWJseSBtb2RpZmllZAogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCi1kYXNkXzM5OTBfZXJwX2luc3BlY3Qoc3RydWN0IGRhc2RfY2N3X3JlcSAqIGVycCkKK2Rhc2RfMzk5MF9lcnBfaW5zcGVjdChzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnApCiB7CiAKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnBfbmV3ID0gTlVMTDsKLQkvKiBzZW5zZSBkYXRhIGFyZSBsb2NhdGVkIGluIHRoZSByZWZlcnMgcmVjb3JkIG9mIHRoZSAqLwotCS8qIGFscmVhZHkgc2V0IHVwIG5ldyBFUlAgIQkJCSAgICAgICovCi0JY2hhciAqc2Vuc2UgPSBlcnAtPnJlZmVycy0+aXJiLmVjdzsKKwljaGFyICpzZW5zZTsKIAogCS8qIGlmIHRoaXMgcHJvYmxlbSBvY2N1cmVkIG9uIGFuIGFsaWFzIHJldHJ5IG9uIGJhc2UgKi8KIAllcnBfbmV3ID0gZGFzZF8zOTkwX2VycF9pbnNwZWN0X2FsaWFzKGVycCk7CiAJaWYgKGVycF9uZXcpCiAJCXJldHVybiBlcnBfbmV3OwogCi0JLyogY2hlY2sgaWYgbm8gY29uY3VycmVudCBzZW5zIGlzIGF2YWlsYWJsZSAqLwotCWlmICghZXJwLT5yZWZlcnMtPmlyYi5lc3cuZXN3MC5lcncuY29ucykKKwkvKiBzZW5zZSBkYXRhIGFyZSBsb2NhdGVkIGluIHRoZSByZWZlcnMgcmVjb3JkIG9mIHRoZQorCSAqIGFscmVhZHkgc2V0IHVwIG5ldyBFUlAgIQorCSAqIGNoZWNrIGlmIGNvbmN1cnJlbnQgc2VucyBpcyBhdmFpbGFibGUKKwkgKi8KKwlzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKCZlcnAtPnJlZmVycy0+aXJiKTsKKwlpZiAoIXNlbnNlKQogCQllcnBfbmV3ID0gZGFzZF8zOTkwX2VycF9jb250cm9sX2NoZWNrKGVycCk7CiAJLyogZGlzdGluZ3Vpc2ggYmV0d2VlbiAyNCBhbmQgMzIgYnl0ZSBzZW5zZSBkYXRhICovCiAJZWxzZSBpZiAoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgewpAQCAtMjIzMSw3ICsyMjQ2LDExIEBACiAgKiBERVNDUklQVElPTgogICogICBUaGlzIGZ1bnRpb24gYWRkcyBhbiBhZGRpdGlvbmFsIHJlcXVlc3QgYmxvY2sgKEVSUCkgdG8gdGhlIGhlYWQgb2YKICAqICAgdGhlIGdpdmVuIGNxciAob3IgZXJwKS4KLSAqICAgVGhpcyBlcnAgaXMgaW5pdGlhbGl6ZWQgYXMgYW4gZGVmYXVsdCBlcnAgKHJldHJ5IFRJQykKKyAqICAgRm9yIGEgY29tbWFuZCBtb2RlIGNxciB0aGUgZXJwIGlzIGluaXRpYWxpemVkIGFzIGFuIGRlZmF1bHQgZXJwCisgKiAgIChyZXRyeSBUSUMpLgorICogICBGb3IgdHJhbnNwb3J0IG1vZGUgd2UgbWFrZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIFRDVyAocG9pbnRzIHRvCisgKiAgIHRoZSBvcmlnaW5hbCBUQ0NCLCBUSURBTHMsIGV0Yy4pIGJ1dCBnaXZlIGl0IGEgZnJlc2gKKyAqICAgVFNCIHNvIHRoZSBvcmlnaW5hbCBzZW5zZSBkYXRhIHdpbGwgbm90IGJlIGNoYW5nZWQuCiAgKgogICogUEFSQU1FVEVSCiAgKiAgIGNxcgkJaGVhZCBvZiB0aGUgY3VycmVudCBFUlAtY2hhaW4gKG9yIHNpbmdsZSBjcXIgaWYKQEAgLTIyMzksMjUgKzIyNTgsMzUgQEAKICAqIFJFVFVSTiBWQUxVRVMKICAqICAgZXJwCQlwb2ludGVyIHRvIG5ldyBFUlAtY2hhaW4gaGVhZAogICovCi1zdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCi1kYXNkXzM5OTBfZXJwX2FkZF9lcnAoc3RydWN0IGRhc2RfY2N3X3JlcSAqIGNxcikKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkXzM5OTBfZXJwX2FkZF9lcnAoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyKQogewogCiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OwogCXN0cnVjdCBjY3cxICpjY3c7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqZXJwOworCWludCBjcGxlbmd0aCwgZGF0YXNpemU7CisJc3RydWN0IHRjdyAqdGN3OworCXN0cnVjdCB0c2IgKnRzYjsKKworCWlmIChjcXItPmNwbW9kZSA9PSAxKSB7CisJCWNwbGVuZ3RoID0gMDsKKwkJZGF0YXNpemUgPSBzaXplb2Yoc3RydWN0IHRjdykgKyBzaXplb2Yoc3RydWN0IHRzYik7CisJfSBlbHNlIHsKKwkJY3BsZW5ndGggPSAyOworCQlkYXRhc2l6ZSA9IDA7CisJfQogCiAJLyogYWxsb2NhdGUgYWRkaXRpb25hbCByZXF1ZXN0IGJsb2NrICovCi0Jc3RydWN0IGRhc2RfY2N3X3JlcSAqZXJwOwotCi0JZXJwID0gZGFzZF9hbGxvY19lcnBfcmVxdWVzdCgoY2hhciAqKSAmY3FyLT5tYWdpYywgMiwgMCwgZGV2aWNlKTsKKwllcnAgPSBkYXNkX2FsbG9jX2VycF9yZXF1ZXN0KChjaGFyICopICZjcXItPm1hZ2ljLAorCQkJCSAgICAgY3BsZW5ndGgsIGRhdGFzaXplLCBkZXZpY2UpOwogCWlmIChJU19FUlIoZXJwKSkgewogICAgICAgICAgICAgICAgIGlmIChjcXItPnJldHJpZXMgPD0gMCkgewotCQkgICAgICAgIERFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBFUlAgcmVxdWVzdCIpOwogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjcXItPnN0b3BjbGsgPSBnZXRfY2xvY2sgKCk7CiAJCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBERVZfTUVTU0FHRSAoS0VSTl9FUlIsIGRldmljZSwKKwkJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgRVJQIHJlcXVlc3QgIgogCQkJCSAgICAgIiglaSByZXRyaWVzIGxlZnQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcXItPnJldHJpZXMpOwpAQCAtMjI2NiwxMyArMjI5NSwyNCBAQAogCQlyZXR1cm4gY3FyOwogCX0KIAotCS8qIGluaXRpYWxpemUgcmVxdWVzdCB3aXRoIGRlZmF1bHQgVElDIHRvIGN1cnJlbnQgRVJQL0NRUiAqLwotCWNjdyA9IGVycC0+Y3BhZGRyOwotCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX05PT1A7Ci0JY2N3LT5mbGFncyA9IENDV19GTEFHX0NDOwotCWNjdysrOwotCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX1RJQzsKLQljY3ctPmNkYSAgICAgID0gKGxvbmcpKGNxci0+Y3BhZGRyKTsKKwlpZiAoY3FyLT5jcG1vZGUgPT0gMSkgeworCQkvKiBtYWtlIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBvcmlnaW5hbCB0Y3cgYnV0IHNldCBuZXcgdHNiICovCisJCWVycC0+Y3Btb2RlID0gMTsKKwkJZXJwLT5jcGFkZHIgPSBlcnAtPmRhdGE7CisJCXRjdyA9IGVycC0+ZGF0YTsKKwkJdHNiID0gKHN0cnVjdCB0c2IgKikgJnRjd1sxXTsKKwkJKnRjdyA9ICooKHN0cnVjdCB0Y3cgKiljcXItPmNwYWRkcik7CisJCXRjdy0+dHNiID0gKGxvbmcpdHNiOworCX0gZWxzZSB7CisJCS8qIGluaXRpYWxpemUgcmVxdWVzdCB3aXRoIGRlZmF1bHQgVElDIHRvIGN1cnJlbnQgRVJQL0NRUiAqLworCQljY3cgPSBlcnAtPmNwYWRkcjsKKwkJY2N3LT5jbWRfY29kZSA9IENDV19DTURfTk9PUDsKKwkJY2N3LT5mbGFncyA9IENDV19GTEFHX0NDOworCQljY3crKzsKKwkJY2N3LT5jbWRfY29kZSA9IENDV19DTURfVElDOworCQljY3ctPmNkYSAgICAgID0gKGxvbmcpKGNxci0+Y3BhZGRyKTsKKwl9CisKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9hZGRfZXJwOwogCWVycC0+cmVmZXJzICAgPSBjcXI7CiAJZXJwLT5zdGFydGRldiA9IGRldmljZTsKQEAgLTIyODIsNyArMjMyMiw2IEBACiAJZXJwLT5leHBpcmVzICA9IDA7CiAJZXJwLT5yZXRyaWVzICA9IDI1NjsKIAllcnAtPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7Ci0KIAllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKIAogCXJldHVybiBlcnA7CkBAIC0yMzQwLDI4ICsyMzc5LDMzIEBACiAgKiAgIG1hdGNoCQknYm9vbGVhbicgZm9yIG1hdGNoIGZvdW5kCiAgKgkJCXJldHVybnMgMSBpZiBtYXRjaCBmb3VuZCwgb3RoZXJ3aXNlIDAuCiAgKi8KLXN0YXRpYyBpbnQKLWRhc2RfMzk5MF9lcnBfZXJyb3JfbWF0Y2goc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyMSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyMikKK3N0YXRpYyBpbnQgZGFzZF8zOTkwX2VycF9lcnJvcl9tYXRjaChzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIxLAorCQkJCSAgICAgc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyMikKIHsKKwljaGFyICpzZW5zZTEsICpzZW5zZTI7CiAKIAlpZiAoY3FyMS0+c3RhcnRkZXYgIT0gY3FyMi0+c3RhcnRkZXYpCiAJCXJldHVybiAwOwogCi0JaWYgKGNxcjEtPmlyYi5lc3cuZXN3MC5lcncuY29ucyAhPSBjcXIyLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMpCi0JCXJldHVybiAwOworCXNlbnNlMSA9IGRhc2RfZ2V0X3NlbnNlKCZjcXIxLT5pcmIpOworCXNlbnNlMiA9IGRhc2RfZ2V0X3NlbnNlKCZjcXIyLT5pcmIpOwogCi0JaWYgKChjcXIxLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMgPT0gMCkgJiYKLQkgICAgKGNxcjItPmlyYi5lc3cuZXN3MC5lcncuY29ucyA9PSAwKSkJewotCQlpZiAoKGNxcjEtPmlyYi5zY3N3LmNtZC5jc3RhdCAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8Ci0JCQkJCSAgICAgU0NITl9TVEFUX0NITl9DVFJMX0NISykpID09Ci0JCSAgICAoY3FyMi0+aXJiLnNjc3cuY21kLmNzdGF0ICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLIHwKLQkJCQkJICAgICBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLKSkpCisJLyogb25lIHJlcXVlc3QgaGFzIHNlbnNlIGRhdGEsIHRoZSBvdGhlciBub3QgLT4gbm8gbWF0Y2gsIHJldHVybiAwICovCisJaWYgKCFzZW5zZTEgIT0gIXNlbnNlMikKKwkJcmV0dXJuIDA7CisJLyogbm8gc2Vuc2UgZGF0YSBpbiBib3RoIGNhc2VzIC0+IGNoZWNrIGNzdGF0IGZvciBJRkNDICovCisJaWYgKCFzZW5zZTEgJiYgIXNlbnNlMikJeworCQlpZiAoKHNjc3dfY3N0YXQoJmNxcjEtPmlyYi5zY3N3KSAmIChTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8CisJCQkJCQkgICAgU0NITl9TVEFUX0NITl9DVFJMX0NISykpID09CisJCSAgICAoc2Nzd19jc3RhdCgmY3FyMi0+aXJiLnNjc3cpICYgKFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLIHwKKwkJCQkJCSAgICBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLKSkpCiAJCQlyZXR1cm4gMTsgLyogbWF0Y2ggd2l0aCBpZmNjKi8KIAl9CiAJLyogY2hlY2sgc2Vuc2UgZGF0YTsgYnl0ZSAwLTIsMjUsMjcgKi8KLQlpZiAoISgobWVtY21wIChjcXIxLT5pcmIuZWN3LCBjcXIyLT5pcmIuZWN3LCAzKSA9PSAwKSAmJgotCSAgICAgIChjcXIxLT5pcmIuZWN3WzI3XSA9PSBjcXIyLT5pcmIuZWN3WzI3XSkgJiYKLQkgICAgICAoY3FyMS0+aXJiLmVjd1syNV0gPT0gY3FyMi0+aXJiLmVjd1syNV0pKSkgeworCWlmICghKHNlbnNlMSAmJiBzZW5zZTIgJiYKKwkgICAgICAobWVtY21wKHNlbnNlMSwgc2Vuc2UyLCAzKSA9PSAwKSAmJgorCSAgICAgIChzZW5zZTFbMjddID09IHNlbnNlMlsyN10pICYmCisJICAgICAgKHNlbnNlMVsyNV0gPT0gc2Vuc2UyWzI1XSkpKSB7CiAKIAkJcmV0dXJuIDA7CS8qIHNlbnNlIGRvZXNuJ3QgbWF0Y2ggKi8KIAl9CkBAIC0yNDM0LDcgKzI0NzgsNyBAQAogewogCiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBlcnAtPnN0YXJ0ZGV2OwotCWNoYXIgKnNlbnNlID0gZXJwLT5pcmIuZWN3OworCWNoYXIgKnNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoJmVycC0+aXJiKTsKIAogCS8qIGNoZWNrIGZvciAyNCBieXRlIHNlbnNlIEVSUCAqLwogCWlmICgoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2J1c19vdXQpIHx8CkBAIC0yNDQ5LDcgKzI0OTMsNyBAQAogCQkvKiBwcmVwYXJlIGVycCBmb3IgcmV0cnkgb24gZGlmZmVyZW50IGNoYW5uZWwgcGF0aCAqLwogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xKGVycCk7CiAKLQkJaWYgKCEoc2Vuc2VbMl0gJiBEQVNEX1NFTlNFX0JJVF8wKSkgeworCQlpZiAoc2Vuc2UgJiYgIShzZW5zZVsyXSAmIERBU0RfU0VOU0VfQklUXzApKSB7CiAKIAkJCS8qIGlzc3VlIGEgRGlhZ25vc3RpYyBDb250cm9sIGNvbW1hbmQgd2l0aCBhbgogCQkJICogSW5oaWJpdCBXcml0ZSBzdWJjb21tYW5kICovCkBAIC0yNDcxLDcgKzI1MTUsNyBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQlkZWZhdWx0OgotCQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKKwkJCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCiAJCQkJCSAgICAiaW52YWxpZCBzdWJjb21tYW5kIG1vZGlmaWVyIDB4JXggIgogCQkJCQkgICAgImZvciBEaWFnbm9zdGljIENvbnRyb2wgQ29tbWFuZCIsCiAJCQkJCSAgICBzZW5zZVsyNV0pOwpAQCAtMjQ3OSwxOSArMjUyMywyMSBAQAogCQl9CiAKIAkJLyogY2hlY2sgZm9yIDMyIGJ5dGUgc2Vuc2UgRVJQICovCi0JfSBlbHNlIGlmICgoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX3JldHJ5KSB8fAotCQkgICAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX3BhdGgpIHx8Ci0JCSAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfY29kZSkgfHwKLQkJICAgKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb25maWcpKSB7CisJfSBlbHNlIGlmIChzZW5zZSAmJgorCQkgICAoKGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9jb21wb3VuZF9yZXRyeSkgfHwKKwkJICAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcGF0aCkgfHwKKwkJICAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfY29kZSkgfHwKKwkJICAgIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfY29tcG91bmRfY29uZmlnKSkpIHsKIAogCQllcnAgPSBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kKGVycCwgc2Vuc2UpOwogCiAJfSBlbHNlIHsKLQkJLyogTm8gcmV0cnkgbGVmdCBhbmQgbm8gYWRkaXRpb25hbCBzcGVjaWFsIGhhbmRsaW5nICovCi0JCS8qbmVjZXNzYXJ5ICovCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkgICAgIm5vIHJldHJpZXMgbGVmdCBmb3IgZXJwICVwIC0gIgotCQkJICAgICJzZXQgc3RhdHVzIHRvIEZBSUxFRCIsIGVycCk7CisJCS8qCisJCSAqIE5vIHJldHJ5IGxlZnQgYW5kIG5vIGFkZGl0aW9uYWwgc3BlY2lhbCBoYW5kbGluZworCQkgKiBuZWNlc3NhcnkKKwkJICovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIkVSUCAlcCBoYXMgcnVuIG91dCBvZiByZXRyaWVzIGFuZCBmYWlsZWRcbiIsIGVycCk7CiAKIAkJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CiAJfQpAQCAtMjU0OCwyNCArMjU5NCwyNSBAQAogCiAJaWYgKGVycC0+cmV0cmllcyA+IDApIHsKIAotCQljaGFyICpzZW5zZSA9IGVycC0+cmVmZXJzLT5pcmIuZWN3OworCQljaGFyICpzZW5zZSA9IGRhc2RfZ2V0X3NlbnNlKCZlcnAtPnJlZmVycy0+aXJiKTsKIAogCQkvKiBjaGVjayBmb3Igc3BlY2lhbCByZXRyaWVzICovCi0JCWlmIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzQpIHsKKwkJaWYgKHNlbnNlICYmIGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9hY3Rpb25fNCkgewogCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl80KGVycCwgc2Vuc2UpOwogCi0JCX0gZWxzZSBpZiAoZXJwLT5mdW5jdGlvbiA9PSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xQl8zMikgeworCQl9IGVsc2UgaWYgKHNlbnNlICYmCisJCQkgICBlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfYWN0aW9uXzFCXzMyKSB7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF91cGRhdGVfMUIoZXJwLCBzZW5zZSk7CiAKLQkJfSBlbHNlIGlmIChlcnAtPmZ1bmN0aW9uID09IGRhc2RfMzk5MF9lcnBfaW50X3JlcSkgeworCQl9IGVsc2UgaWYgKHNlbnNlICYmIGVycC0+ZnVuY3Rpb24gPT0gZGFzZF8zOTkwX2VycF9pbnRfcmVxKSB7CiAKIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfaW50X3JlcShlcnApOwogCiAJCX0gZWxzZSB7CiAJCQkvKiBzaW1wbGUgcmV0cnkJICAqLwotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAorCQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKIAkJCQkgICAgIiVpIHJldHJpZXMgbGVmdCBmb3IgZXJwICVwIiwKIAkJCQkgICAgZXJwLT5yZXRyaWVzLCBlcnApOwogCkBAIC0yNjA5LDI0ICsyNjU2LDI0IEBACiAKIAlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKIAkJLyogcHJpbnQgY3VycmVudCBlcnBfY2hhaW4gKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiRVJQIGNoYWluIGF0IEJFR0lOTklORyBvZiBFUlAtQUNUSU9OIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICAgICJFUlAgY2hhaW4gYXQgQkVHSU5OSU5HIG9mIEVSUC1BQ1RJT05cbiIpOwogCQlmb3IgKHRlbXBfZXJwID0gY3FyOwogCQkgICAgIHRlbXBfZXJwICE9IE5VTEw7IHRlbXBfZXJwID0gdGVtcF9lcnAtPnJlZmVycykgewogCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiICAgZXJwICVwICglMDJ4KSByZWZlcnMgdG8gJXAiLAorCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJFUlAgJXAgKCUwMngpIHJlZmVycyB0byAlcFxuIiwKIAkJCQkgICAgdGVtcF9lcnAsIHRlbXBfZXJwLT5zdGF0dXMsCiAJCQkJICAgIHRlbXBfZXJwLT5yZWZlcnMpOwogCQl9CiAJfQogCiAJLyogZG91YmxlLWNoZWNrIGlmIGN1cnJlbnQgZXJwL2NxciB3YXMgc3VjY2Vzc2Z1bCAqLwotCWlmICgoY3FyLT5pcmIuc2Nzdy5jbWQuY3N0YXQgPT0gMHgwMCkgJiYKLQkgICAgKGNxci0+aXJiLnNjc3cuY21kLmRzdGF0ID09CisJaWYgKChzY3N3X2NzdGF0KCZjcXItPmlyYi5zY3N3KSA9PSAweDAwKSAmJgorCSAgICAoc2Nzd19kc3RhdCgmY3FyLT5pcmIuc2NzdykgPT0KIAkgICAgIChERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkpKSB7CiAKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAogCQkJICAgICJFUlAgY2FsbGVkIGZvciBzdWNjZXNzZnVsIHJlcXVlc3QgJXAiCiAJCQkgICAgIiAtIE5PIEVSUCBuZWNlc3NhcnkiLCBjcXIpOwogCkBAIC0yNjQ4LDEzICsyNjk1LDEzIEBACiAKIAlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKIAkJLyogcHJpbnQgY3VycmVudCBlcnBfY2hhaW4gKi8KLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiRVJQIGNoYWluIGF0IEVORCBvZiBFUlAtQUNUSU9OIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICAgICJFUlAgY2hhaW4gYXQgRU5EIG9mIEVSUC1BQ1RJT05cbiIpOwogCQlmb3IgKHRlbXBfZXJwID0gZXJwOwogCQkgICAgIHRlbXBfZXJwICE9IE5VTEw7IHRlbXBfZXJwID0gdGVtcF9lcnAtPnJlZmVycykgewogCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiICAgZXJwICVwICglMDJ4KSByZWZlcnMgdG8gJXAiLAorCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICAgICJFUlAgJXAgKCUwMngpIHJlZmVycyB0byAlcFxuIiwKIAkJCQkgICAgdGVtcF9lcnAsIHRlbXBfZXJwLT5zdGF0dXMsCiAJCQkJICAgIHRlbXBfZXJwLT5yZWZlcnMpOwogCQl9CkBAIC0yNjY3LDYgKzI3MTQsOCBAQAogCQlsaXN0X2FkZF90YWlsKCZlcnAtPmJsb2NrbGlzdCwgJmNxci0+YmxvY2tsaXN0KTsKIAl9CiAKKworCiAJcmV0dXJuIGVycDsKIAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9hY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCmluZGV4IDIwNjc2Y2QuLjViN2JiYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwpAQCAtNSw2ICs1LDggQEAKICAqIEF1dGhvcihzKTogU3RlZmFuIFdlaW5odWJlciA8d2VpbkBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgogI2luY2x1ZGUgImRhc2RfaW50LmgiCkBAIC01MDMsNyArNTA1LDcgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJjIHx8IChsY3UtPmZsYWdzICYgTkVFRF9VQUNfVVBEQVRFKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImNvdWxkIG5vdCB1cGRhdGUiCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgImNvdWxkIG5vdCB1cGRhdGUiCiAJCQkgICAgIiBhbGlhcyBkYXRhIGluIGxjdSAocmMgPSAlZCksIHJldHJ5IGxhdGVyIiwgcmMpOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmxjdS0+cnVhY19kYXRhLmR3b3JrLCAzMCpIWik7CiAJfSBlbHNlIHsKQEAgLTY0NiwxNCArNjQ4LDE2IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYyA9IDA7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWNxciA9IGxjdS0+cnN1X2NxcjsKIAlzdHJuY3B5KChjaGFyICopICZjcXItPm1hZ2ljLCAiRUNLRCIsIDQpOwogCUFTQ0VCQygoY2hhciAqKSAmY3FyLT5tYWdpYywgNCk7Ci0JY3FyLT5jcGFkZHItPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SU0NLOwotCWNxci0+Y3BhZGRyLT5mbGFncyA9IDAgOwotCWNxci0+Y3BhZGRyLT5jb3VudCA9IDE2OwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JTQ0s7CisJY2N3LT5mbGFncyA9IDAgOworCWNjdy0+Y291bnQgPSAxNjsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAJKChjaGFyICopY3FyLT5kYXRhKVswXSA9IHJlYXNvbjsKIAogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CkBAIC04NTUsMTYgKzg1OSwyNSBAQAogCXN0cnVjdCBhbGlhc19sY3UgKmxjdTsKIAljaGFyIHJlYXNvbjsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJY2hhciAqc2Vuc2U7CiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAKLQlyZWFzb24gPSBpcmItPmVjd1s4XTsKLQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzICV4IiwKLQkJICAgICJlY2tkIGhhbmRsZSBzdW1tYXJ5IHVuaXQgY2hlY2s6IHJlYXNvbiIsIHJlYXNvbik7CisJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZShpcmIpOworCWlmIChzZW5zZSkgeworCQlyZWFzb24gPSBzZW5zZVs4XTsKKwkJREJGX0RFVl9FVkVOVChEQkZfTk9USUNFLCBkZXZpY2UsICIlcyAleCIsCisJCQkgICAgImVja2QgaGFuZGxlIHN1bW1hcnkgdW5pdCBjaGVjazogcmVhc29uIiwgcmVhc29uKTsKKwl9IGVsc2UgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgImVja2QgaGFuZGxlIHN1bW1hcnkgdW5pdCBjaGVjazoiCisJCQkgICAgIiBubyByZWFzb24gY29kZSBhdmFpbGFibGUiKTsKKwkJcmV0dXJuOworCX0KIAogCWxjdSA9IHByaXZhdGUtPmxjdTsKIAlpZiAoIWxjdSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJkZXZpY2Ugbm90IHJlYWR5IHRvIGhhbmRsZSBzdW1tYXJ5IgogCQkJICAgICIgdW5pdCBjaGVjayAobm8gbGN1IHN0cnVjdHVyZSkiKTsKIAkJcmV0dXJuOwpAQCAtODc3LDcgKzg5MCw3IEBACiAJICogdGhlIG5leHQgaW50ZXJydXB0IG9uIGEgZGlmZmVyZW50IGRldmljZQogCSAqLwogCWlmIChsaXN0X2VtcHR5KCZkZXZpY2UtPmFsaWFzX2xpc3QpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImRldmljZSBpcyBpbiBvZmZsaW5lIHByb2Nlc3NpbmcsIgogCQkJICAgICIgZG9uJ3QgZG8gc3VtbWFyeSB1bml0IGNoZWNrIGhhbmRsaW5nIik7CiAJCXNwaW5fdW5sb2NrKCZsY3UtPmxvY2spOwpAQCAtODg1LDcgKzg5OCw3IEBACiAJfQogCWlmIChsY3UtPnN1Y19kYXRhLmRldmljZSkgewogCQkvKiBhbHJlYWR5IHNjaGVkdWxlZCBvciBydW5uaW5nICovCi0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgInByZXZpb3VzIGluc3RhbmNlIG9mIHN1bW1hcnkgdW5pdCBjaGVjayB3b3JrZXIiCiAJCQkgICAgIiBzdGlsbCBwZW5kaW5nIik7CiAJCXNwaW5fdW5sb2NrKCZsY3UtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCAzNDMzOTkwLi5lNzc2NjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtMTMsNiArMTMsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02Nyw2ICs2OSw4IEBACiBpbnQgZGFzZF9hdXRvZGV0ZWN0ID0gMDsJLyogaXMgdHJ1ZSwgd2hlbiBhdXRvZGV0ZWN0aW9uIGlzIGFjdGl2ZSAqLwogaW50IGRhc2Rfbm9wYXYgPSAwOwkJLyogaXMgdHJ1ZSwgd2hlbiBQQVYgaXMgZGlzYWJsZWQgKi8KIEVYUE9SVF9TWU1CT0xfR1BMKGRhc2Rfbm9wYXYpOworaW50IGRhc2Rfbm9mY3g7CQkJLyogZGlzYWJsZSBIaWdoIFBlcmZvcm1hbmNlIEZpY29uICovCitFWFBPUlRfU1lNQk9MX0dQTChkYXNkX25vZmN4KTsKIAogLyoKICAqIGNoYXIgKmRhc2RbXSBpcyBpbnRlbmRlZCB0byBob2xkIHRoZSByYW5nZXMgc3VwcGxpZWQgYnkgdGhlIGRhc2Q9IHN0YXRlbWVudApAQCAtMTI1LDYgKzEyOSw3IEBACiAgKiBSZWFkIGEgZGV2aWNlIGJ1c2lkL2Rldm5vIGZyb20gYSBzdHJpbmcuCiAgKi8KIHN0YXRpYyBpbnQKKwogZGFzZF9idXNpZChjaGFyICoqc3RyLCBpbnQgKmlkMCwgaW50ICppZDEsIGludCAqZGV2bm8pCiB7CiAJaW50IHZhbCwgb2xkX3N0eWxlOwpAQCAtMTMyLDggKzEzNyw3IEBACiAJLyogSW50ZXJwcmV0IGlwbGRldiBidXNpZCAqLwogCWlmIChzdHJuY21wKERBU0RfSVBMREVWLCAqc3RyLCBzdHJsZW4oREFTRF9JUExERVYpKSA9PSAwKSB7CiAJCWlmIChpcGxfaW5mby50eXBlICE9IElQTF9UWVBFX0NDVykgewotCQkJTUVTU0FHRShLRVJOX0VSUiwgIiVzIiwgImlwbCBkZXZpY2UgaXMgbm90IGEgY2N3ICIKLQkJCQkiZGV2aWNlIik7CisJCQlwcl9lcnIoIlRoZSBJUEwgZGV2aWNlIGlzIG5vdCBhIENDVyBkZXZpY2VcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJKmlkMCA9IDA7CkBAIC0yMDksOSArMjEzLDggQEAKIAkJZWxzZSBpZiAobGVuID09IDggJiYgIXN0cm5jbXAoc3RyLCAiZmFpbGZhc3QiLCA4KSkKIAkJCWZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9GQUlMRkFTVDsKIAkJZWxzZSB7Ci0JCQlNRVNTQUdFKEtFUk5fV0FSTklORywKLQkJCQkidW5zdXBwb3J0ZWQgZmVhdHVyZTogJSpzLCAiCi0JCQkJImlnbm9yaW5nIHNldHRpbmciLCBsZW4sIHN0cik7CisJCQlwcl93YXJuaW5nKCIlKnMgaXMgbm90IGEgc3VwcG9ydGVkIGRldmljZSBvcHRpb25cbiIsCisJCQkJICAgbGVuLCBzdHIpOwogCQkJcmMgPSAtRUlOVkFMOwogCQl9CiAJCXN0ciArPSBsZW47CkBAIC0yMjAsOCArMjIzLDggQEAKIAkJc3RyKys7CiAJfQogCWlmICgqc3RyICE9ICcpJykgewotCQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwKLQkJCSJtaXNzaW5nICcpJyBpbiBkYXNkIHBhcmFtZXRlciBzdHJpbmdcbiIpOworCQlwcl93YXJuaW5nKCJBIGNsb3NpbmcgcGFyZW50aGVzaXMgJyknIGlzIG1pc3NpbmcgaW4gdGhlICIKKwkJCSAgICJkYXNkPSBwYXJhbWV0ZXJcbiIpOwogCQlyYyA9IC1FSU5WQUw7CiAJfSBlbHNlCiAJCXN0cisrOwpAQCAtMjUzLDI1ICsyNTYsMjkgQEAKICAgICAgICAgfQogCWlmIChzdHJuY21wKCJhdXRvZGV0ZWN0IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgewogCQlkYXNkX2F1dG9kZXRlY3QgPSAxOwotCQlNRVNTQUdFIChLRVJOX0lORk8sICIlcyIsCi0JCQkgInR1cm5pbmcgdG8gYXV0b2RldGVjdGlvbiBtb2RlIik7CisJCXByX2luZm8oIlRoZSBhdXRvZGV0ZWN0aW9uIG1vZGUgaGFzIGJlZW4gYWN0aXZhdGVkXG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzaWR1YWxfc3RyOwogICAgICAgICB9CiAJaWYgKHN0cm5jbXAoInByb2Jlb25seSIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKIAkJZGFzZF9wcm9iZW9ubHkgPSAxOwotCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwKLQkJCSJ0dXJuaW5nIHRvIHByb2Jlb25seSBtb2RlIik7CisJCXByX2luZm8oIlRoZSBwcm9iZW9ubHkgbW9kZSBoYXMgYmVlbiBhY3RpdmF0ZWRcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXNpZHVhbF9zdHI7CiAgICAgICAgIH0KIAlpZiAoc3RybmNtcCgibm9wYXYiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWlmIChNQUNISU5FX0lTX1ZNKQotCQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICInbm9wYXYnIG5vdCBzdXBwb3J0ZWQgb24gVk0iKTsKKwkJCXByX2luZm8oIidub3BhdicgaXMgbm90IHN1cHBvcnRlZCBvbiB6L1ZNXG4iKTsKIAkJZWxzZSB7CiAJCQlkYXNkX25vcGF2ID0gMTsKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiZGlzYWJsZSBQQVYgbW9kZSIpOworCQkJcHJfaW5mbygiUEFWIHN1cHBvcnQgaGFzIGJlIGRlYWN0aXZhdGVkXG4iKTsKIAkJfQogCQlyZXR1cm4gcmVzaWR1YWxfc3RyOwogCX0KKwlpZiAoc3RybmNtcCgibm9mY3giLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CisJCWRhc2Rfbm9mY3ggPSAxOworCQlwcl9pbmZvKCJIaWdoIFBlcmZvcm1hbmNlIEZJQ09OIHN1cHBvcnQgaGFzIGJlZW4gIgorCQkJImRlYWN0aXZhdGVkXG4iKTsKKwkJcmV0dXJuIHJlc2lkdWFsX3N0cjsKKwl9CiAJaWYgKHN0cm5jbXAoImZpeGVkYnVmZmVycyIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKIAkJaWYgKGRhc2RfcGFnZV9jYWNoZSkKIAkJCXJldHVybiByZXNpZHVhbF9zdHI7CkBAIC0yODAsMTAgKzI4NywxMCBAQAogCQkJCQkgIFBBR0VfU0laRSwgU0xBQl9DQUNIRV9ETUEsCiAJCQkJCSAgTlVMTCk7CiAJCWlmICghZGFzZF9wYWdlX2NhY2hlKQotCQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsICJGYWlsZWQgdG8gY3JlYXRlIHNsYWIsICIKKwkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIiVzIiwgIkZhaWxlZCB0byBjcmVhdGUgc2xhYiwgIgogCQkJCSJmaXhlZCBidWZmZXIgbW9kZSBkaXNhYmxlZC4iKTsKIAkJZWxzZQotCQkJTUVTU0FHRSAoS0VSTl9JTkZPLCAiJXMiLAorCQkJREJGX0VWRU5UKERCRl9JTkZPLCAiJXMiLAogCQkJCSAidHVybmluZyBvbiBmaXhlZCBidWZmZXIgbW9kZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXNpZHVhbF9zdHI7CiAgICAgICAgIH0KQEAgLTMyMSw3ICszMjgsNyBAQAogCSAgICAoZnJvbV9pZDAgIT0gdG9faWQwIHx8IGZyb21faWQxICE9IHRvX2lkMSB8fCBmcm9tID4gdG8pKQogCQlyYyA9IC1FSU5WQUw7CiAJaWYgKHJjKSB7Ci0JCU1FU1NBR0UoS0VSTl9FUlIsICJJbnZhbGlkIGRldmljZSByYW5nZSAlcyIsIHBhcnNlc3RyaW5nKTsKKwkJcHJfZXJyKCIlcyBpcyBub3QgYSB2YWxpZCBkZXZpY2UgcmFuZ2VcbiIsIHBhcnNlc3RyaW5nKTsKIAkJcmV0dXJuIEVSUl9QVFIocmMpOwogCX0KIAlmZWF0dXJlcyA9IGRhc2RfZmVhdHVyZV9saXN0KHN0ciwgJnN0cik7CkBAIC0zNDAsOCArMzQ3LDggQEAKIAkJcmV0dXJuIHN0ciArIDE7CiAJaWYgKCpzdHIgPT0gJ1wwJykKIAkJcmV0dXJuIHN0cjsKLQlNRVNTQUdFKEtFUk5fV0FSTklORywKLQkJImp1bmsgYXQgZW5kIG9mIGRhc2QgcGFyYW1ldGVyIHN0cmluZzogJXNcbiIsIHN0cik7CisJcHJfd2FybmluZygiVGhlIGRhc2Q9IHBhcmFtZXRlciB2YWx1ZSAlcyBoYXMgYW4gaW52YWxpZCBlbmRpbmdcbiIsCisJCSAgIHN0cik7CiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCBlZjJhNTY5Li5iOWE3Zjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC04LDYgKzgsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMTQ0LDggKzE0Niw4IEBACiAJbWRza190ZXJtX2lvKGRldmljZSk7CiAJcmMgPSBtZHNrX2luaXRfaW8oZGV2aWNlLCBkZXZpY2UtPmJsb2NrLT5icF9ibG9jaywgMCwgTlVMTCk7CiAJaWYgKHJjKQotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIkRJQUcgRVJQIHVuc3VjY2Vzc2Z1bCwgIgotCQkJICAgICJyYz0lZCIsIHJjKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRElBRyBFUlAgZmFpbGVkIHdpdGggIgorCQkJICAgICJyYz0lZFxuIiwgcmMpOwogfQogCiAvKiBTdGFydCBhIGdpdmVuIHJlcXVlc3QgYXQgdGhlIGRldmljZS4gUmV0dXJuIHplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8KQEAgLTE2MCw3ICsxNjIsNyBAQAogCiAJZGV2aWNlID0gY3FyLT5zdGFydGRldjsKIAlpZiAoY3FyLT5yZXRyaWVzIDwgMCkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIkRJQUcgc3RhcnRfSU86IHJlcXVlc3QgJXAgIgorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIkRJQUcgc3RhcnRfSU86IHJlcXVlc3QgJXAgIgogCQkJICAgICItIG5vIHJldHJ5IGxlZnQpIiwgY3FyKTsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9FUlJPUjsKIAkJcmV0dXJuIC1FSU87CkBAIC0xOTUsNyArMTk3LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDogLyogRXJyb3IgY29uZGl0aW9uICovCiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgImRpYTI1MCByZXR1cm5lZCByYz0lZCIsIHJjKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiZGlhMjUwIHJldHVybmVkIHJjPSVkIiwgcmMpOwogCQlkYXNkX2RpYWdfZXJwKGRldmljZSk7CiAJCXJjID0gLUVJTzsKIAkJYnJlYWs7CkBAIC0yNDMsMTMgKzI0NSwxNCBAQAogCQlyZXR1cm47CiAJfQogCWlmICghaXApIHsJCS8qIG5vIGludHBhcm06IHVuc29saWNpdGVkIGludGVycnVwdCAqLwotCQlNRVNTQUdFKEtFUk5fREVCVUcsICIlcyIsICJjYXVnaHQgdW5zb2xpY2l0ZWQgaW50ZXJydXB0Iik7CisJCURCRl9FVkVOVChEQkZfTk9USUNFLCAiJXMiLCAiY2F1Z2h0IHVuc29saWNpdGVkICIKKwkJCSAgICAgICJpbnRlcnJ1cHQiKTsKIAkJcmV0dXJuOwogCX0KIAljcXIgPSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKSBpcDsKIAlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7CiAJaWYgKHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwKIAkJCSAgICAiIG1hZ2ljIG51bWJlciBvZiBkYXNkX2Njd19yZXEgMHglMDhYIGRvZXNuJ3QiCiAJCQkgICAgIiBtYXRjaCBkaXNjaXBsaW5lIDB4JTA4WCIsCiAJCQkgICAgY3FyLT5tYWdpYywgKihpbnQgKikgKCZkZXZpY2UtPmRpc2NpcGxpbmUtPm5hbWUpKTsKQEAgLTI4MSwxNSArMjg0LDExIEBACiAJCQkJcmMgPSBkYXNkX3N0YXJ0X2RpYWcobmV4dCk7CiAJCQkJaWYgKHJjID09IDApCiAJCQkJCWV4cGlyZXMgPSBuZXh0LT5leHBpcmVzOwotCQkJCWVsc2UgaWYgKHJjICE9IC1FQUNDRVMpCi0JCQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCQkJICAgICJJbnRlcnJ1cHQgZmFzdHBhdGggIgotCQkJCQkJICAgICJmYWlsZWQhIik7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJpbnRlcnJ1cHQgc3RhdHVzIGZvciAiCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJpbnRlcnJ1cHQgc3RhdHVzIGZvciAiCiAJCQkgICAgInJlcXVlc3QgJXAgd2FzICVkICglZCByZXRyaWVzIGxlZnQpIiwgY3FyLCBzdGF0dXMsCiAJCQkgICAgY3FyLT5yZXRyaWVzKTsKIAkJZGFzZF9kaWFnX2VycChkZXZpY2UpOwpAQCAtMzIyLDggKzMyMSw5IEBACiAJaWYgKHByaXZhdGUgPT0gTlVMTCkgewogCQlwcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZGlhZ19wcml2YXRlKSxHRlBfS0VSTkVMKTsKIAkJaWYgKHByaXZhdGUgPT0gTlVMTCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgcHJpdmF0ZSBkYXRhIik7CisJCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJIkFsbG9jYXRpbmcgbWVtb3J5IGZvciBwcml2YXRlIERBU0QgZGF0YSAiCisJCQkJICAgICAgImZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQljY3dfZGV2aWNlX2dldF9pZChkZXZpY2UtPmNkZXYsICZwcml2YXRlLT5kZXZfaWQpOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJfQogCWJsb2NrID0gZGFzZF9hbGxvY19ibG9jaygpOwogCWlmIChJU19FUlIoYmxvY2spKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkIGJsb2NrIHN0cnVjdHVyZSIpOwogCQlkZXZpY2UtPnByaXZhdGUgPSBOVUxMOwogCQlrZnJlZShwcml2YXRlKTsKQEAgLTM0Nyw3ICszNDcsNyBAQAogCiAJcmMgPSBkaWFnMjEwKChzdHJ1Y3QgZGlhZzIxMCAqKSByZGNfZGF0YSk7CiAJaWYgKHJjKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiZmFpbGVkIHRvIHJldHJpZXZlIGRldmljZSAiCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgImZhaWxlZCB0byByZXRyaWV2ZSBkZXZpY2UgIgogCQkJICAgICJpbmZvcm1hdGlvbiAocmM9JWQpIiwgcmMpOwogCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKQEAgLTM2Miw4ICszNjIsOCBAQAogCQlwcml2YXRlLT5wdF9ibG9jayA9IDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAidW5zdXBwb3J0ZWQgZGV2aWNlIGNsYXNzICIKLQkJCSAgICAiKGNsYXNzPSVkKSIsIHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJEZXZpY2UgdHlwZSAlZCBpcyBub3Qgc3VwcG9ydGVkICIKKwkJCSAgICAiaW4gRElBRyBtb2RlXG4iLCBwcml2YXRlLT5yZGNfZGF0YS52ZGV2X2NsYXNzKTsKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzgwLDcgKzM4MCw3IEBACiAJLyogZmlndXJlIG91dCBibG9ja3NpemUgb2YgZGV2aWNlICovCiAJbGFiZWwgPSAoc3RydWN0IHZ0b2NfY21zX2xhYmVsICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAobGFiZWwgPT0gTlVMTCkgIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiTm8gbWVtb3J5IHRvIGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTQwNCw4ICs0MDQsOCBAQAogCQlwcml2YXRlLT5pb2IuZmxhZ2EgPSBEQVNEX0RJQUdfRkxBR0FfREVGQVVMVDsKIAkJcmMgPSBkaWEyNTAoJnByaXZhdGUtPmlvYiwgUldfQklPKTsKIAkJaWYgKHJjID09IDMpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSJESUFHIGNhbGwgZmFpbGVkIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkEgNjQtYml0IERJQUcgY2FsbCBmYWlsZWRcbiIpOwogCQkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJCWdvdG8gb3V0X2xhYmVsOwogCQl9CkBAIC00MTQsOCArNDE0LDggQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoYnNpemUgPiBQQUdFX1NJWkUpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICJkZXZpY2UgYWNjZXNzIGZhaWxlZCAiCi0JCQkgICAgIihyYz0lZCkiLCByYyk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSIKKwkJCSAiIG9mIGFuIGluY29ycmVjdCBmb3JtYXQgKHJjPSVkKVxuIiwgcmMpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0X2xhYmVsOwogCX0KQEAgLTQzMywxNSArNDMzLDE1IEBACiAJCWJsb2NrLT5zMmJfc2hpZnQrKzsKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGJsb2NrLT5icF9ibG9jaywgMCwgTlVMTCk7CiAJaWYgKHJjKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiRElBRyBpbml0aWFsaXphdGlvbiAiCi0JCQkiZmFpbGVkIChyYz0lZCkiLCByYyk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRJQUcgaW5pdGlhbGl6YXRpb24gIgorCQkJImZhaWxlZCB3aXRoIHJjPSVkXG4iLCByYyk7CiAJCXJjID0gLUVJTzsKIAl9IGVsc2UgewotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJCSAgICAiKCVsZCBCL2Jsayk6ICVsZGtCIiwKLQkJCSAgICAodW5zaWduZWQgbG9uZykgYmxvY2stPmJwX2Jsb2NrLAotCQkJICAgICh1bnNpZ25lZCBsb25nKSAoYmxvY2stPmJsb2NrcyA8PAotCQkJCWJsb2NrLT5zMmJfc2hpZnQpID4+IDEpOworCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIk5ldyBEQVNEIHdpdGggJWxkIGJ5dGUvYmxvY2ssIHRvdGFsIHNpemUgJWxkIEtCXG4iLAorCQkJICh1bnNpZ25lZCBsb25nKSBibG9jay0+YnBfYmxvY2ssCisJCQkgKHVuc2lnbmVkIGxvbmcpIChibG9jay0+YmxvY2tzIDw8CisJCQkJCSAgYmxvY2stPnMyYl9zaGlmdCkgPj4gMSk7CiAJfQogb3V0X2xhYmVsOgogCWZyZWVfcGFnZSgobG9uZykgbGFiZWwpOwpAQCAtNTk1LDcgKzU5NSw3IEBACiBkYXNkX2RpYWdfZHVtcF9zZW5zZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqIHJlcSwKIAkJICAgICBzdHJ1Y3QgaXJiICpzdGF0KQogewotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkgICAgImR1bXAgc2Vuc2Ugbm90IGF2YWlsYWJsZSBmb3IgRElBRyBkYXRhIik7CiB9CiAKQEAgLTYyMSwxMCArNjIxLDggQEAKIGRhc2RfZGlhZ19pbml0KHZvaWQpCiB7CiAJaWYgKCFNQUNISU5FX0lTX1ZNKSB7Ci0JCU1FU1NBR0VfTE9HKEtFUk5fSU5GTywKLQkJCSAgICAiTWFjaGluZSBpcyBub3QgVk06ICVzICIKLQkJCSAgICAiZGlzY2lwbGluZSBub3QgaW5pdGlhbGl6aW5nIiwKLQkJCSAgICBkYXNkX2RpYWdfZGlzY2lwbGluZS5uYW1lKTsKKwkJcHJfaW5mbygiRGlzY2lwbGluZSAlcyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHovVk1cbiIsCisJCQlkYXNkX2RpYWdfZGlzY2lwbGluZS5uYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCUFTQ0VCQyhkYXNkX2RpYWdfZGlzY2lwbGluZS5lYmNuYW1lLCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCBiZGI4Nzk5Li4yMTI1NDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0xMSw2ICsxMSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yNyw5ICsyOSwxMiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2Npby5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KKyNpbmNsdWRlIDxhc20vaXRjdy5oPgogCiAjaW5jbHVkZSAiZGFzZF9pbnQuaCIKICNpbmNsdWRlICJkYXNkX2Vja2QuaCIKKyNpbmNsdWRlICIuLi9jaW8vY2hzYy5oIgorCiAKICNpZmRlZiBQUklOVEtfSEVBREVSCiAjdW5kZWYgUFJJTlRLX0hFQURFUgpAQCAtODQsNyArODksNyBAQAogCS8qIHNldCBFQ0tEIHNwZWNpZmljIGNjdy1kZXZpY2Ugb3B0aW9ucyAqLwogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoY2RldiwgQ0NXREVWX0FMTE9XX0ZPUkNFKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAogCQkgICAgICAgImRhc2RfZWNrZF9wcm9iZTogY291bGQgbm90IHNldCBjY3ctZGV2aWNlIG9wdGlvbnMgIgogCQkgICAgICAgImZvciAlc1xuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTU5LDYgKzE2NCwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZXRfY2hfdChzdHJ1Y3QgY2hfdCAqZ2VvLCBfX3UzMiBjeWwsIF9fdTggaGVhZCkKK3sKKwlnZW8tPmN5bCA9IChfX3UxNikgY3lsOworCWdlby0+aGVhZCA9IGN5bCA+PiAxNjsKKwlnZW8tPmhlYWQgPDw9IDQ7CisJZ2VvLT5oZWFkIHw9IGhlYWQ7Cit9CisKIHN0YXRpYyBpbnQKIGNoZWNrX1hSQyAoc3RydWN0IGNjdzEgICAgICAgICAqZGVfY2N3LAogICAgICAgICAgICBzdHJ1Y3QgREVfZWNrZF9kYXRhICpkYXRhLApAQCAtMTg2LDExICsxOTksMTIgQEAKIH0KIAogc3RhdGljIGludAotZGVmaW5lX2V4dGVudChzdHJ1Y3QgY2N3MSAqIGNjdywgc3RydWN0IERFX2Vja2RfZGF0YSAqIGRhdGEsIGludCB0cmssCi0JICAgICAgaW50IHRvdHJrLCBpbnQgY21kLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UpCitkZWZpbmVfZXh0ZW50KHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBERV9lY2tkX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCB0cmssCisJICAgICAgdW5zaWduZWQgaW50IHRvdHJrLCBpbnQgY21kLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7Ci0Jc3RydWN0IGNoX3QgZ2VvLCBiZWcsIGVuZDsKKwl1MzIgYmVnY3lsLCBlbmRjeWw7CisJdTE2IGhlYWRzLCBiZWdoZWFkLCBlbmRoZWFkOwogCWludCByYyA9IDA7CiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CkBAIC0yMzYsNyArMjUwLDggQEAKIAkJcmMgPSBjaGVja19YUkMgKGNjdywgZGF0YSwgZGV2aWNlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgInVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSIweCV4IGlzIG5vdCBhIGtub3duIGNvbW1hbmRcbiIsIGNtZCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjQ4LDI3ICsyNjMsMjQgQEAKIAkgICAgJiYgIShwcml2YXRlLT51c2VzX2NkbCAmJiB0cmsgPCAyKSkKIAkJZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHg0MDsgLyogUmVndWxhciBEYXRhIEZvcm1hdCBNb2RlICovCiAKLQlnZW8uY3lsID0gcHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsOwotCWdlby5oZWFkID0gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7Ci0JYmVnLmN5bCA9IHRyayAvIGdlby5oZWFkOwotCWJlZy5oZWFkID0gdHJrICUgZ2VvLmhlYWQ7Ci0JZW5kLmN5bCA9IHRvdHJrIC8gZ2VvLmhlYWQ7Ci0JZW5kLmhlYWQgPSB0b3RyayAlIGdlby5oZWFkOworCWhlYWRzID0gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJYmVnY3lsID0gdHJrIC8gaGVhZHM7CisJYmVnaGVhZCA9IHRyayAlIGhlYWRzOworCWVuZGN5bCA9IHRvdHJrIC8gaGVhZHM7CisJZW5kaGVhZCA9IHRvdHJrICUgaGVhZHM7CiAKIAkvKiBjaGVjayBmb3Igc2VxdWVudGlhbCBwcmVzdGFnZSAtIGVuaGFuY2UgY3lsaW5kZXIgcmFuZ2UgKi8KIAlpZiAoZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfUFJFU1RBR0UgfHwKIAkgICAgZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfQUNDRVNTKSB7CiAKLQkJaWYgKGVuZC5jeWwgKyBwcml2YXRlLT5hdHRyaWIubnJfY3lsIDwgZ2VvLmN5bCkKLQkJCWVuZC5jeWwgKz0gcHJpdmF0ZS0+YXR0cmliLm5yX2N5bDsKKwkJaWYgKGVuZGN5bCArIHByaXZhdGUtPmF0dHJpYi5ucl9jeWwgPCBwcml2YXRlLT5yZWFsX2N5bCkKKwkJCWVuZGN5bCArPSBwcml2YXRlLT5hdHRyaWIubnJfY3lsOwogCQllbHNlCi0JCQllbmQuY3lsID0gKGdlby5jeWwgLSAxKTsKKwkJCWVuZGN5bCA9IChwcml2YXRlLT5yZWFsX2N5bCAtIDEpOwogCX0KIAotCWRhdGEtPmJlZ19leHQuY3lsID0gYmVnLmN5bDsKLQlkYXRhLT5iZWdfZXh0LmhlYWQgPSBiZWcuaGVhZDsKLQlkYXRhLT5lbmRfZXh0LmN5bCA9IGVuZC5jeWw7Ci0JZGF0YS0+ZW5kX2V4dC5oZWFkID0gZW5kLmhlYWQ7CisJc2V0X2NoX3QoJmRhdGEtPmJlZ19leHQsIGJlZ2N5bCwgYmVnaGVhZCk7CisJc2V0X2NoX3QoJmRhdGEtPmVuZF9leHQsIGVuZGN5bCwgZW5kaGVhZCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yODMsMjkgKzI5NSwxNDUgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBzd2l0Y2ggb24gU3lzdGVtIFRpbWUgU3RhbXAgLSBuZWVkZWQgZm9yIFhSQyBTdXBwb3J0ICovCi0JcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVuZC5nYV9leHRlbmRlZCB8PSAweDA4OyAvKiAnVGltZSBTdGFtcCBWYWxpZCcgICAqLwotCXBmeGRhdGEtPmRlZmluZV9leHRlbmQuZ2FfZXh0ZW5kZWQgfD0gMHgwMjsgLyogJ0V4dGVuZGVkIFBhcmFtZXRlcicgKi8KKwlwZnhkYXRhLT5kZWZpbmVfZXh0ZW50LmdhX2V4dGVuZGVkIHw9IDB4MDg7IC8qICdUaW1lIFN0YW1wIFZhbGlkJyAgICovCisJcGZ4ZGF0YS0+ZGVmaW5lX2V4dGVudC5nYV9leHRlbmRlZCB8PSAweDAyOyAvKiAnRXh0ZW5kZWQgUGFyYW1ldGVyJyAqLwogCXBmeGRhdGEtPnZhbGlkaXR5LnRpbWVfc3RhbXAgPSAxOwkgICAgLyogJ1RpbWUgU3RhbXAgVmFsaWQnICAgKi8KIAotCXJjID0gZ2V0X3N5bmNfY2xvY2soJnBmeGRhdGEtPmRlZmluZV9leHRlbmQuZXBfc3lzX3RpbWUpOworCXJjID0gZ2V0X3N5bmNfY2xvY2soJnBmeGRhdGEtPmRlZmluZV9leHRlbnQuZXBfc3lzX3RpbWUpOwogCS8qIElnbm9yZSByZXR1cm4gY29kZSBpZiBzeW5jIGNsb2NrIGlzIHN3aXRjaGVkIG9mZi4gKi8KIAlpZiAocmMgPT0gLUVOT1NZUyB8fCByYyA9PSAtRUFDQ0VTKQogCQlyYyA9IDA7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHByZWZpeChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqcGZ4ZGF0YSwgaW50IHRyaywKLQkJICBpbnQgdG90cmssIGludCBjbWQsIHN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldiwKLQkJICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2KQorc3RhdGljIHZvaWQgZmlsbF9MUkVfZGF0YShzdHJ1Y3QgTFJFX2Vja2RfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHRyaywKKwkJCSAgdW5zaWduZWQgaW50IHJlY19vbl90cmssIGludCBjb3VudCwgaW50IGNtZCwKKwkJCSAgc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWNsZW4sCisJCQkgIHVuc2lnbmVkIGludCB0bGYpCit7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCWludCBzZWN0b3I7CisJaW50IGRuLCBkOworCisJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOworCisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZigqZGF0YSkpOworCXNlY3RvciA9IDA7CisJaWYgKHJlY19vbl90cmspIHsKKwkJc3dpdGNoIChwcml2YXRlLT5yZGNfZGF0YS5kZXZfdHlwZSkgeworCQljYXNlIDB4MzM5MDoKKwkJCWRuID0gY2VpbF9xdW90KHJlY2xlbiArIDYsIDIzMik7CisJCQlkID0gOSArIGNlaWxfcXVvdChyZWNsZW4gKyA2ICogKGRuICsgMSksIDM0KTsKKwkJCXNlY3RvciA9ICg0OSArIChyZWNfb25fdHJrIC0gMSkgKiAoMTAgKyBkKSkgLyA4OworCQkJYnJlYWs7CisJCWNhc2UgMHgzMzgwOgorCQkJZCA9IDcgKyBjZWlsX3F1b3QocmVjbGVuICsgMTIsIDMyKTsKKwkJCXNlY3RvciA9ICgzOSArIChyZWNfb25fdHJrIC0gMSkgKiAoOCArIGQpKSAvIDc7CisJCQlicmVhazsKKwkJfQorCX0KKwlkYXRhLT5zZWN0b3IgPSBzZWN0b3I7CisJLyogbm90ZTogbWVhbmluZyBvZiBjb3VudCBkZXBlbmRzIG9uIHRoZSBvcGVyYXRpb24KKwkgKgkgZm9yIHJlY29yZCBiYXNlZCBJL08gaXQncyB0aGUgbnVtYmVyIG9mIHJlY29yZHMsIGJ1dCBmb3IKKwkgKgkgdHJhY2sgYmFzZWQgSS9PIGl0J3MgdGhlIG51bWJlciBvZiB0cmFja3MKKwkgKi8KKwlkYXRhLT5jb3VudCA9IGNvdW50OworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0hPTUVfQUREUkVTUzoKKwkJZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgzOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfSE9NRV9BRERSRVNTOgorCQlkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDM7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDE2OworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfUkVDT1JEX1pFUk86CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MTsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDM7CisJCWRhdGEtPmNvdW50Kys7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1JFQ09SRF9aRVJPOgorCQlkYXRhLT5vcGVyYXRpb24ub3JpZW50YXRpb24gPSAweDM7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDE2OworCQlkYXRhLT5jb3VudCsrOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEU6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX01UOgorCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9LRDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfS0RfTVQ6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MDE7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9DS0Q6CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRF9NVDoKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE6CisJCWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAweDE7CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsJLyogbm90IHRsZiwgYXMgb25lIG1pZ2h0IHRoaW5rICovCisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDNGOworCQlkYXRhLT5leHRlbmRlZF9vcGVyYXRpb24gPSAweDIzOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9NVDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9LRDoKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9LRF9NVDoKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwNjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ0tEOgorCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0NLRF9NVDoKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOworCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgxNjsKKwkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ09VTlQ6CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDA2OworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOgorCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOworCQlkYXRhLT5sZW5ndGggPSB0bGY7CisJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDBDOworCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfRVJBU0U6CisJCWRhdGEtPmxlbmd0aCA9IHJlY2xlbjsKKwkJZGF0YS0+YXV4aWxpYXJ5Lmxlbmd0aF92YWxpZCA9IDB4MTsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MGI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLAorCQkJICAgICJmaWxsIExSRSB1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJQlVHKCk7CisJfQorCXNldF9jaF90KCZkYXRhLT5zZWVrX2FkZHIsCisJCSB0cmsgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCwKKwkJIHRyayAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKTsKKwlkYXRhLT5zZWFyY2hfYXJnLmN5bCA9IGRhdGEtPnNlZWtfYWRkci5jeWw7CisJZGF0YS0+c2VhcmNoX2FyZy5oZWFkID0gZGF0YS0+c2Vla19hZGRyLmhlYWQ7CisJZGF0YS0+c2VhcmNoX2FyZy5yZWNvcmQgPSByZWNfb25fdHJrOworfQorCitzdGF0aWMgaW50IHByZWZpeF9MUkUoc3RydWN0IGNjdzEgKmNjdywgc3RydWN0IFBGWF9lY2tkX2RhdGEgKnBmeGRhdGEsCisJCSAgICAgIHVuc2lnbmVkIGludCB0cmssIHVuc2lnbmVkIGludCB0b3RyaywgaW50IGNtZCwKKwkJICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2LCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkgICAgICB1bnNpZ25lZCBjaGFyIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlY19vbl90cmssIGludCBjb3VudCwKKwkJICAgICAgdW5zaWduZWQgaW50IGJsa3NpemUsIHVuc2lnbmVkIGludCB0bGYpCiB7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpiYXNlcHJpdiwgKnN0YXJ0cHJpdjsKLQlzdHJ1Y3QgREVfZWNrZF9kYXRhICpkYXRhOwotCXN0cnVjdCBjaF90IGdlbywgYmVnLCBlbmQ7CisJc3RydWN0IERFX2Vja2RfZGF0YSAqZGVkYXRhOworCXN0cnVjdCBMUkVfZWNrZF9kYXRhICpscmVkYXRhOworCXUzMiBiZWdjeWwsIGVuZGN5bDsKKwl1MTYgaGVhZHMsIGJlZ2hlYWQsIGVuZGhlYWQ7CiAJaW50IHJjID0gMDsKIAogCWJhc2Vwcml2ID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOwogCXN0YXJ0cHJpdiA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgc3RhcnRkZXYtPnByaXZhdGU7Ci0JZGF0YSA9ICZwZnhkYXRhLT5kZWZpbmVfZXh0ZW5kOworCWRlZGF0YSA9ICZwZnhkYXRhLT5kZWZpbmVfZXh0ZW50OworCWxyZWRhdGEgPSAmcGZ4ZGF0YS0+bG9jYXRlX3JlY29yZDsKIAogCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1BGWDsKIAljY3ctPmZsYWdzID0gMDsKQEAgLTMxNCwxMCArNDQyLDE2IEBACiAKIAltZW1zZXQocGZ4ZGF0YSwgMCwgc2l6ZW9mKCpwZnhkYXRhKSk7CiAJLyogcHJlZml4IGRhdGEgKi8KLQlwZnhkYXRhLT5mb3JtYXQgPSAwOworCWlmIChmb3JtYXQgPiAxKSB7CisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgYmFzZWRldiwKKwkJCSAgICAgICJQRlggTFJFIHVua25vd24gZm9ybWF0IDB4JXgiLCBmb3JtYXQpOworCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBmeGRhdGEtPmZvcm1hdCA9IGZvcm1hdDsKIAlwZnhkYXRhLT5iYXNlX2FkZHJlc3MgPSBiYXNlcHJpdi0+bmVkLT51bml0X2FkZHI7CiAJcGZ4ZGF0YS0+YmFzZV9sc3MgPSBiYXNlcHJpdi0+bmVkLT5JRDsKLQlwZnhkYXRhLT52YWxpZGl0eS5kZWZpbmVfZXh0ZW5kID0gMTsKKwlwZnhkYXRhLT52YWxpZGl0eS5kZWZpbmVfZXh0ZW50ID0gMTsKIAogCS8qIHByaXZhdGUgdWlkIGlzIGtlcHQgdXAgdG8gZGF0ZSwgY29uZl9kYXRhIG1heSBiZSBvdXRkYXRlZCAqLwogCWlmIChzdGFydHByaXYtPnVpZC50eXBlICE9IFVBX0JBU0VfREVWSUNFKSB7CkBAIC0zMzcsNzAgKzQ3MSw5NCBAQAogCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0tEOgogCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0tEX01UOgogCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0NPVU5UOgotCQlkYXRhLT5tYXNrLnBlcm0gPSAweDE7Ci0JCWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgxOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE6CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgxOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSAwOwogCQlicmVhazsKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEU6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX01UOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9LRDoKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfS0RfTVQ6Ci0JCWRhdGEtPm1hc2sucGVybSA9IDB4MDI7Ci0JCWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgwMjsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IGJhc2Vwcml2LT5hdHRyaWIub3BlcmF0aW9uOwogCQlyYyA9IGNoZWNrX1hSQ19vbl9wcmVmaXgocGZ4ZGF0YSwgYmFzZWRldik7CiAJCWJyZWFrOwogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9DS0Q6CiAJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0NLRF9NVDoKLQkJZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IERBU0RfQllQQVNTX0NBQ0hFOwogCQlyYyA9IGNoZWNrX1hSQ19vbl9wcmVmaXgocGZ4ZGF0YSwgYmFzZWRldik7CiAJCWJyZWFrOwogCWNhc2UgREFTRF9FQ0tEX0NDV19FUkFTRToKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfSE9NRV9BRERSRVNTOgogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9SRUNPUkRfWkVSTzoKLQkJZGF0YS0+bWFzay5wZXJtID0gMHgzOwotCQlkYXRhLT5tYXNrLmF1dGggPSAweDE7Ci0JCWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gREFTRF9CWVBBU1NfQ0FDSEU7CisJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgzOworCQlkZWRhdGEtPm1hc2suYXV0aCA9IDB4MTsKKwkJZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9IERBU0RfQllQQVNTX0NBQ0hFOworCQlyYyA9IGNoZWNrX1hSQ19vbl9wcmVmaXgocGZ4ZGF0YSwgYmFzZWRldik7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOgorCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MDI7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5ibGtfc2l6ZSA9IGJsa3NpemU7CiAJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeChwZnhkYXRhLCBiYXNlZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGJhc2VkZXYsICJ1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKLQkJYnJlYWs7CisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgYmFzZWRldiwKKwkJCSAgICAiUEZYIExSRSB1bmtub3duIG9wY29kZSAweCV4IiwgY21kKTsKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRhdGEtPmF0dHJpYnV0ZXMubW9kZSA9IDB4MzsJLyogRUNLRCAqLworCWRlZGF0YS0+YXR0cmlidXRlcy5tb2RlID0gMHgzOwkvKiBFQ0tEICovCiAKIAlpZiAoKGJhc2Vwcml2LT5yZGNfZGF0YS5jdV90eXBlID09IDB4MjEwNSB8fAogCSAgICAgYmFzZXByaXYtPnJkY19kYXRhLmN1X3R5cGUgPT0gMHgyMTA3IHx8CiAJICAgICBiYXNlcHJpdi0+cmRjX2RhdGEuY3VfdHlwZSA9PSAweDE3NTApCiAJICAgICYmICEoYmFzZXByaXYtPnVzZXNfY2RsICYmIHRyayA8IDIpKQotCQlkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQwOyAvKiBSZWd1bGFyIERhdGEgRm9ybWF0IE1vZGUgKi8KKwkJZGVkYXRhLT5nYV9leHRlbmRlZCB8PSAweDQwOyAvKiBSZWd1bGFyIERhdGEgRm9ybWF0IE1vZGUgKi8KIAotCWdlby5jeWwgPSBiYXNlcHJpdi0+cmRjX2RhdGEubm9fY3lsOwotCWdlby5oZWFkID0gYmFzZXByaXYtPnJkY19kYXRhLnRya19wZXJfY3lsOwotCWJlZy5jeWwgPSB0cmsgLyBnZW8uaGVhZDsKLQliZWcuaGVhZCA9IHRyayAlIGdlby5oZWFkOwotCWVuZC5jeWwgPSB0b3RyayAvIGdlby5oZWFkOwotCWVuZC5oZWFkID0gdG90cmsgJSBnZW8uaGVhZDsKKwloZWFkcyA9IGJhc2Vwcml2LT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwliZWdjeWwgPSB0cmsgLyBoZWFkczsKKwliZWdoZWFkID0gdHJrICUgaGVhZHM7CisJZW5kY3lsID0gdG90cmsgLyBoZWFkczsKKwllbmRoZWFkID0gdG90cmsgJSBoZWFkczsKIAogCS8qIGNoZWNrIGZvciBzZXF1ZW50aWFsIHByZXN0YWdlIC0gZW5oYW5jZSBjeWxpbmRlciByYW5nZSAqLwotCWlmIChkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9QUkVTVEFHRSB8fAotCSAgICBkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9BQ0NFU1MpIHsKKwlpZiAoZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9QUkVTVEFHRSB8fAorCSAgICBkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID09IERBU0RfU0VRX0FDQ0VTUykgewogCi0JCWlmIChlbmQuY3lsICsgYmFzZXByaXYtPmF0dHJpYi5ucl9jeWwgPCBnZW8uY3lsKQotCQkJZW5kLmN5bCArPSBiYXNlcHJpdi0+YXR0cmliLm5yX2N5bDsKKwkJaWYgKGVuZGN5bCArIGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsIDwgYmFzZXByaXYtPnJlYWxfY3lsKQorCQkJZW5kY3lsICs9IGJhc2Vwcml2LT5hdHRyaWIubnJfY3lsOwogCQllbHNlCi0JCQllbmQuY3lsID0gKGdlby5jeWwgLSAxKTsKKwkJCWVuZGN5bCA9IChiYXNlcHJpdi0+cmVhbF9jeWwgLSAxKTsKIAl9CiAKLQlkYXRhLT5iZWdfZXh0LmN5bCA9IGJlZy5jeWw7Ci0JZGF0YS0+YmVnX2V4dC5oZWFkID0gYmVnLmhlYWQ7Ci0JZGF0YS0+ZW5kX2V4dC5jeWwgPSBlbmQuY3lsOwotCWRhdGEtPmVuZF9leHQuaGVhZCA9IGVuZC5oZWFkOworCXNldF9jaF90KCZkZWRhdGEtPmJlZ19leHQsIGJlZ2N5bCwgYmVnaGVhZCk7CisJc2V0X2NoX3QoJmRlZGF0YS0+ZW5kX2V4dCwgZW5kY3lsLCBlbmRoZWFkKTsKKworCWlmIChmb3JtYXQgPT0gMSkgeworCQlmaWxsX0xSRV9kYXRhKGxyZWRhdGEsIHRyaywgcmVjX29uX3RyaywgY291bnQsIGNtZCwKKwkJCSAgICAgIGJhc2VkZXYsIGJsa3NpemUsIHRsZik7CisJfQorCiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IHByZWZpeChzdHJ1Y3QgY2N3MSAqY2N3LCBzdHJ1Y3QgUEZYX2Vja2RfZGF0YSAqcGZ4ZGF0YSwKKwkJICB1bnNpZ25lZCBpbnQgdHJrLCB1bnNpZ25lZCBpbnQgdG90cmssIGludCBjbWQsCisJCSAgc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2LCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2KQoreworCXJldHVybiBwcmVmaXhfTFJFKGNjdywgcGZ4ZGF0YSwgdHJrLCB0b3RyaywgY21kLCBiYXNlZGV2LCBzdGFydGRldiwKKwkJCSAgMCwgMCwgMCwgMCwgMCk7Cit9CisKIHN0YXRpYyB2b2lkCi1sb2NhdGVfcmVjb3JkKHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBMT19lY2tkX2RhdGEgKmRhdGEsIGludCB0cmssCi0JICAgICAgaW50IHJlY19vbl90cmssIGludCBub19yZWMsIGludCBjbWQsCitsb2NhdGVfcmVjb3JkKHN0cnVjdCBjY3cxICpjY3csIHN0cnVjdCBMT19lY2tkX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCB0cmssCisJICAgICAgdW5zaWduZWQgaW50IHJlY19vbl90cmssIGludCBub19yZWMsIGludCBjbWQsCiAJICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICogZGV2aWNlLCBpbnQgcmVjbGVuKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKQEAgLTQ5MSwxMiArNjQ5LDE0IEBACiAJCWRhdGEtPm9wZXJhdGlvbi5vcGVyYXRpb24gPSAweDBiOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAidW5rbm93biBvcGNvZGUgMHgleCIsIGNtZCk7CisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAidW5rbm93biBsb2NhdGUgcmVjb3JkICIKKwkJCSAgICAgICJvcGNvZGUgMHgleCIsIGNtZCk7CiAJfQotCWRhdGEtPnNlZWtfYWRkci5jeWwgPSBkYXRhLT5zZWFyY2hfYXJnLmN5bCA9Ci0JCXRyayAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsOwotCWRhdGEtPnNlZWtfYWRkci5oZWFkID0gZGF0YS0+c2VhcmNoX2FyZy5oZWFkID0KLQkJdHJrICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWw7CisJc2V0X2NoX3QoJmRhdGEtPnNlZWtfYWRkciwKKwkJIHRyayAvIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAorCQkgdHJrICUgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwpOworCWRhdGEtPnNlYXJjaF9hcmcuY3lsID0gZGF0YS0+c2Vla19hZGRyLmN5bDsKKwlkYXRhLT5zZWFyY2hfYXJnLmhlYWQgPSBkYXRhLT5zZWVrX2FkZHIuaGVhZDsKIAlkYXRhLT5zZWFyY2hfYXJnLnJlY29yZCA9IHJlY19vbl90cms7CiB9CiAKQEAgLTU4NSw4ICs3NDUsOCBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KCJFQ0tEIiwgMSAvKiBSQ0QgKi8sIGNpdy0+Y291bnQsIGRldmljZSk7CiAKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBSQ0QgcmVxdWVzdCIpOworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiQ291bGQgbm90IGFsbG9jYXRlIFJDRCByZXF1ZXN0Iik7CiAJCXJldHVybiBjcXI7CiAJfQogCkBAIC03MzYsMTQgKzg5NiwxNiBAQAogCQkJcmMgPSBkYXNkX2Vja2RfcmVhZF9jb25mX2xwbShkZXZpY2UsICZjb25mX2RhdGEsCiAJCQkJCQkgICAgICZjb25mX2xlbiwgbHBtKTsKIAkJCWlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCkgewkvKiAtRU9QTk9UU1VQUCBpcyBvayAqLwotCQkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLAotCQkJCQkiUmVhZCBjb25maWd1cmF0aW9uIGRhdGEgcmV0dXJuZWQgIgotCQkJCQkiZXJyb3IgJWQiLCByYyk7CisJCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAorCQkJCQkgICJSZWFkIGNvbmZpZ3VyYXRpb24gZGF0YSByZXR1cm5lZCAiCisJCQkJCSAgImVycm9yICVkIGZvciBkZXZpY2U6ICVzIiwgcmMsCisJCQkJCSAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQkJcmV0dXJuIHJjOwogCQkJfQogCQkJaWYgKGNvbmZfZGF0YSA9PSBOVUxMKSB7Ci0JCQkJTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsICJObyBjb25maWd1cmF0aW9uICIKLQkJCQkJImRhdGEgcmV0cmlldmVkIik7CisJCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiTm8gY29uZmlndXJhdGlvbiAiCisJCQkJCSAgImRhdGEgcmV0cmlldmVkIGZvciBkZXZpY2U6ICVzIiwKKwkJCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCQljb250aW51ZTsJLyogbm8gZXJyb3IgKi8KIAkJCX0KIAkJCS8qIHNhdmUgZmlyc3QgdmFsaWQgY29uZmlndXJhdGlvbiBkYXRhICovCkBAIC03OTAsOCArOTUyLDkgQEAKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMpKSwKIAkJCQkgICBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uICIKKwkJCSAgInJlcXVlc3QgZm9yIGRldmljZTogJXMiLAorCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIAl9CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKQEAgLTg0MCw3ICsxMDAzLDggQEAKIC8qCiAgKiBCdWlsZCBDUCBmb3IgUGVyZm9ybSBTdWJzeXN0ZW0gRnVuY3Rpb24gLSBTU0MuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfcHNmX3NzYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfcHNmX3NzYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkJCSAgICBpbnQgZW5hYmxlX3BhdikKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJc3RydWN0IGRhc2RfcHNmX3NzY19kYXRhICpwc2Zfc3NjX2RhdGE7CkBAIC04NTEsMTUgKzEwMTUsMTcgQEAKIAkJCQkgIGRldmljZSk7CiAKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICJDb3VsZCBub3QgYWxsb2NhdGUgUFNGLVNTQyByZXF1ZXN0Iik7CiAJCXJldHVybiBjcXI7CiAJfQogCXBzZl9zc2NfZGF0YSA9IChzdHJ1Y3QgZGFzZF9wc2Zfc3NjX2RhdGEgKiljcXItPmRhdGE7CiAJcHNmX3NzY19kYXRhLT5vcmRlciA9IFBTRl9PUkRFUl9TU0M7Ci0JcHNmX3NzY19kYXRhLT5zdWJvcmRlciA9IDB4ODg7Ci0JcHNmX3NzY19kYXRhLT5yZXNlcnZlZFswXSA9IDB4ODg7Ci0KKwlwc2Zfc3NjX2RhdGEtPnN1Ym9yZGVyID0gMHg0MDsKKwlpZiAoZW5hYmxlX3BhdikgeworCQlwc2Zfc3NjX2RhdGEtPnN1Ym9yZGVyIHw9IDB4ODg7CisJCXBzZl9zc2NfZGF0YS0+cmVzZXJ2ZWRbMF0gPSAweDg4OworCX0KIAljY3cgPSBjcXItPmNwYWRkcjsKIAljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19QU0Y7CiAJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdClwc2Zfc3NjX2RhdGE7CkBAIC04ODAsMTIgKzEwNDYsMTIgQEAKICAqIGNhbGwgbWlnaHQgY2hhbmdlIGJlaGF2aW91ciBvZiBEQVNEIGRldmljZXMuCiAgKi8KIHN0YXRpYyBpbnQKLWRhc2RfZWNrZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQorZGFzZF9lY2tkX3BzZl9zc2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIGludCBlbmFibGVfcGF2KQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CiAKLQljcXIgPSBkYXNkX2Vja2RfYnVpbGRfcHNmX3NzYyhkZXZpY2UpOworCWNxciA9IGRhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKGRldmljZSwgZW5hYmxlX3Bhdik7CiAJaWYgKElTX0VSUihjcXIpKQogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCkBAIC05MDQsMTkgKzEwNzAsMjAgQEAKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCWludCBlbmFibGVfcGF2OwogCi0JLyogQ3VycmVudGx5IFBBViBpcyB0aGUgb25seSByZWFzb24gdG8gJ3ZhbGlkYXRlJyBzZXJ2ZXIgb24gTFBBUiAqLwogCWlmIChkYXNkX25vcGF2IHx8IE1BQ0hJTkVfSVNfVk0pCi0JCXJldHVybiAwOwotCi0JcmMgPSBkYXNkX2Vja2RfcHNmX3NzYyhkZXZpY2UpOworCQllbmFibGVfcGF2ID0gMDsKKwllbHNlCisJCWVuYWJsZV9wYXYgPSAxOworCXJjID0gZGFzZF9lY2tkX3BzZl9zc2MoZGV2aWNlLCBlbmFibGVfcGF2KTsKIAkvKiBtYXkgYmUgcmVxdWVzdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBvbiBzZXJ2ZXIsCiAJICogdGhlcmVmb3JlIGp1c3QgcmVwb3J0IGVycm9yIGFuZCBnbyBhaGVhZCAqLwogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJICAgICJQU0YtU1NDIG9uIHN0b3JhZ2Ugc3Vic3lzdGVtICVzLiVzLiUwNHggcmV0dXJuZWQgcmM9JWQiLAotCQkgICAgcHJpdmF0ZS0+dWlkLnZlbmRvciwgcHJpdmF0ZS0+dWlkLnNlcmlhbCwKLQkJICAgIHByaXZhdGUtPnVpZC5zc2lkLCByYyk7CisJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiUFNGLVNTQyBvbiBzdG9yYWdlIHN1YnN5c3RlbSAlcy4lcy4lMDR4ICIKKwkJICAicmV0dXJuZWQgcmM9JWQgZm9yIGRldmljZTogJXMiLAorCQkgIHByaXZhdGUtPnVpZC52ZW5kb3IsIHByaXZhdGUtPnVpZC5zZXJpYWwsCisJCSAgcHJpdmF0ZS0+dWlkLnNzaWQsIHJjLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkvKiBSRS1SZWFkIENvbmZpZ3VyYXRpb24gRGF0YSAqLwogCXJldHVybiBkYXNkX2Vja2RfcmVhZF9jb25mKGRldmljZSk7CiB9CkBAIC05MzgsOSArMTEwNSw5IEBACiAJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUpLAogCQkJCSAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCQlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgcHJpdmF0ZSAiCi0JCQkJICAgICJkYXRhIik7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJBbGxvY2F0aW5nIG1lbW9yeSBmb3IgcHJpdmF0ZSBEQVNEIGRhdGEgIgorCQkJCSAiZmFpbGVkXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWRldmljZS0+cHJpdmF0ZSA9ICh2b2lkICopIHByaXZhdGU7CkBAIC05NjUsOCArMTEzMiw5IEBACiAJaWYgKHByaXZhdGUtPnVpZC50eXBlID09IFVBX0JBU0VfREVWSUNFKSB7CiAJCWJsb2NrID0gZGFzZF9hbGxvY19ibG9jaygpOwogCQlpZiAoSVNfRVJSKGJsb2NrKSkgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJjb3VsZCBub3QgYWxsb2NhdGUgZGFzZCBibG9jayBzdHJ1Y3R1cmUiKTsKKwkJCURCRl9FVkVOVChEQkZfV0FSTklORywgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkICIKKwkJCQkgICJibG9jayBzdHJ1Y3R1cmUgZm9yIGRldmljZTogJXMiLAorCQkJCSAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlyYyA9IFBUUl9FUlIoYmxvY2spOwogCQkJZ290byBvdXRfZXJyMTsKIAkJfQpAQCAtOTk3LDIwICsxMTY1LDI3IEBACiAJbWVtc2V0KHJkY19kYXRhLCAwLCBzaXplb2YocmRjX2RhdGEpKTsKIAlyYyA9IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhkZXZpY2UsICJFQ0tEIiwgJnJkY19kYXRhLCA2NCk7CiAJaWYgKHJjKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJICAgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgcmV0dXJuZWQgIgotCQkJICAgICJyYz0lZCIsIHJjKTsKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAorCQkJICAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGZhaWxlZCwgcmM9JWQgZm9yICIKKwkJCSAgImRldmljZTogJXMiLCByYywgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWdvdG8gb3V0X2VycjM7CiAJfQotCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAotCQkgICAgIiUwNFgvJTAyWChDVTolMDRYLyUwMlgpIEN5bDolZCBIZWFkOiVkIFNlYzolZCIsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5kZXZfdHlwZSwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmRldl9tb2RlbCwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmN1X3R5cGUsCi0JCSAgICBwcml2YXRlLT5yZGNfZGF0YS5jdV9tb2RlbC5tb2RlbCwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAotCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuc2VjX3Blcl90cmspOworCS8qIGZpbmQgdGhlIHZhaWxkIGN5bGluZGVyIHNpemUgKi8KKwlpZiAocHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsID09IExWX0NPTVBBVF9DWUwgJiYKKwkgICAgcHJpdmF0ZS0+cmRjX2RhdGEubG9uZ19ub19jeWwpCisJCXByaXZhdGUtPnJlYWxfY3lsID0gcHJpdmF0ZS0+cmRjX2RhdGEubG9uZ19ub19jeWw7CisJZWxzZQorCQlwcml2YXRlLT5yZWFsX2N5bCA9IHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bDsKKworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIk5ldyBEQVNEICUwNFgvJTAyWCAoQ1UgJTA0WC8lMDJYKSAiCisJCSAid2l0aCAlZCBjeWxpbmRlcnMsICVkIGhlYWRzLCAlZCBzZWN0b3JzXG4iLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X3R5cGUsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5kZXZfbW9kZWwsCisJCSBwcml2YXRlLT5yZGNfZGF0YS5jdV90eXBlLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfbW9kZWwubW9kZWwsCisJCSAgICBwcml2YXRlLT5yZWFsX2N5bCwKKwkJIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAorCQkgcHJpdmF0ZS0+cmRjX2RhdGEuc2VjX3Blcl90cmspOwogCXJldHVybiAwOwogCiBvdXRfZXJyMzoKQEAgLTExNTEsMTQgKzEzMjYsMTIgQEAKIAlzdGF0dXMgPSBwcml2YXRlLT5pbml0X2Nxcl9zdGF0dXM7CiAJcHJpdmF0ZS0+aW5pdF9jcXJfc3RhdHVzID0gLTE7CiAJaWYgKHN0YXR1cyAhPSBEQVNEX0NRUl9ET05FKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJ2b2x1bWUgYW5hbHlzaXMgcmV0dXJuZWQgdW5mb3JtYXR0ZWQgZGlzayIpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgICAgIlRoZSBEQVNEIGlzIG5vdCBmb3JtYXR0ZWRcbiIpOwogCQlyZXR1cm4gLUVNRURJVU1UWVBFOwogCX0KIAogCXByaXZhdGUtPnVzZXNfY2RsID0gMTsKLQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KLQlibGtfcGVyX3RyayA9IHJlY3NfcGVyX3RyYWNrKCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgYmxvY2stPmJwX2Jsb2NrKTsKIAkvKiBDaGVjayBUcmFjayAwIGZvciBDb21wYXRpYmxlIERpc2sgTGF5b3V0ICovCiAJY291bnRfYXJlYSA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewpAQCAtMTE4Miw4ICsxMzU1LDggQEAKIAkJCWNvdW50X2FyZWEgPSAmcHJpdmF0ZS0+Y291bnRfYXJlYVswXTsKIAl9IGVsc2UgewogCQlpZiAocHJpdmF0ZS0+Y291bnRfYXJlYVszXS5yZWNvcmQgPT0gMSkKLQkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJCSAgICAiVHJrIDA6IG5vIHJlY29yZHMgYWZ0ZXIgVlRPQyEiKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIlRyYWNrIDAgaGFzIG5vIHJlY29yZHMgZm9sbG93aW5nIHRoZSBWVE9DXG4iKTsKIAl9CiAJaWYgKGNvdW50X2FyZWEgIT0gTlVMTCAmJiBjb3VudF9hcmVhLT5rbCA9PSAwKSB7CiAJCS8qIHdlIGZvdW5kIG5vdHRoaW5nIHZpb2xhdGluZyBvdXIgZGlzayBsYXlvdXQgKi8KQEAgLTExOTEsOCArMTM2NCw4IEBACiAJCQlibG9jay0+YnBfYmxvY2sgPSBjb3VudF9hcmVhLT5kbDsKIAl9CiAJaWYgKGJsb2NrLT5icF9ibG9jayA9PSAwKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJWb2x1bWUgaGFzIGluY29tcGF0aWJsZSBkaXNrIGxheW91dCIpOworCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIlRoZSBkaXNrIGxheW91dCBvZiB0aGUgREFTRCBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FTUVESVVNVFlQRTsKIAl9CiAJYmxvY2stPnMyYl9zaGlmdCA9IDA7CS8qIGJpdHMgdG8gc2hpZnQgNTEyIHRvIGdldCBhIGJsb2NrICovCkBAIC0xMjAwLDE5ICsxMzczLDE5IEBACiAJCWJsb2NrLT5zMmJfc2hpZnQrKzsKIAogCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibG9jay0+YnBfYmxvY2spOwotCWJsb2NrLT5ibG9ja3MgPSAocHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsICoKKwlibG9jay0+YmxvY2tzID0gKHByaXZhdGUtPnJlYWxfY3lsICoKIAkJCSAgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwgKgogCQkJICBibGtfcGVyX3Ryayk7CiAKLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJICAgICIoJWRrQiBibGtzKTogJWRrQiBhdCAlZGtCL3RyayAlcyIsCi0JCSAgICAoYmxvY2stPmJwX2Jsb2NrID4+IDEwKSwKLQkJICAgICgocHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsICoKLQkJICAgICAgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwgKgotCQkgICAgICBibGtfcGVyX3RyayAqIChibG9jay0+YnBfYmxvY2sgPj4gOSkpID4+IDEpLAotCQkgICAgKChibGtfcGVyX3RyayAqIGJsb2NrLT5icF9ibG9jaykgPj4gMTApLAotCQkgICAgcHJpdmF0ZS0+dXNlc19jZGwgPwotCQkgICAgImNvbXBhdGlibGUgZGlzayBsYXlvdXQiIDogImxpbnV4IGRpc2sgbGF5b3V0Iik7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkgIkRBU0Qgd2l0aCAlZCBLQi9ibG9jaywgJWQgS0IgdG90YWwgc2l6ZSwgJWQgS0IvdHJhY2ssICIKKwkJICIlc1xuIiwgKGJsb2NrLT5icF9ibG9jayA+PiAxMCksCisJCSAoKHByaXZhdGUtPnJlYWxfY3lsICoKKwkJICAgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwgKgorCQkgICBibGtfcGVyX3RyayAqIChibG9jay0+YnBfYmxvY2sgPj4gOSkpID4+IDEpLAorCQkgKChibGtfcGVyX3RyayAqIGJsb2NrLT5icF9ibG9jaykgPj4gMTApLAorCQkgcHJpdmF0ZS0+dXNlc19jZGwgPworCQkgImNvbXBhdGlibGUgZGlzayBsYXlvdXQiIDogImxpbnV4IGRpc2sgbGF5b3V0Iik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNjIsMzEgKzE0MzUsMzUgQEAKIAlzdHJ1Y3QgZWNrZF9jb3VudCAqZWN0OwogCXN0cnVjdCBjY3cxICpjY3c7CiAJdm9pZCAqZGF0YTsKLQlpbnQgcnB0LCBjeWwsIGhlYWQ7CisJaW50IHJwdDsKKwlzdHJ1Y3QgY2hfdCBhZGRyZXNzOwogCWludCBjcGxlbmd0aCwgZGF0YXNpemU7CiAJaW50IGk7CisJaW50IGludGVuc2l0eSA9IDA7CisJaW50IHIwX3Blcm07CiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAJcnB0ID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBmZGF0YS0+Ymxrc2l6ZSk7Ci0JY3lsID0gZmRhdGEtPnN0YXJ0X3VuaXQgLyBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKLQloZWFkID0gZmRhdGEtPnN0YXJ0X3VuaXQgJSBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bDsKKwlzZXRfY2hfdCgmYWRkcmVzcywKKwkJIGZkYXRhLT5zdGFydF91bml0IC8gcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCisJCSBmZGF0YS0+c3RhcnRfdW5pdCAlIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsKTsKIAogCS8qIFNhbml0eSBjaGVja3MuICovCiAJaWYgKGZkYXRhLT5zdGFydF91bml0ID49Ci0JICAgIChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgKiBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsICJUcmFjayBubyAlZCB0b28gYmlnISIsCi0JCQkgICAgZmRhdGEtPnN0YXJ0X3VuaXQpOworCSAgICAocHJpdmF0ZS0+cmVhbF9jeWwgKiBwcml2YXRlLT5yZGNfZGF0YS50cmtfcGVyX2N5bCkpIHsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiU3RhcnQgdHJhY2sgbnVtYmVyICVkIHVzZWQgaW4gIgorCQkJICJmb3JtYXR0aW5nIGlzIHRvbyBiaWdcbiIsIGZkYXRhLT5zdGFydF91bml0KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCWlmIChmZGF0YS0+c3RhcnRfdW5pdCA+IGZkYXRhLT5zdG9wX3VuaXQpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsICJUcmFjayAlZCByZWFjaGVkISBlbmRpbmcuIiwKLQkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIlN0YXJ0IHRyYWNrICVkIHVzZWQgaW4gIgorCQkJICJmb3JtYXR0aW5nIGV4Y2VlZHMgZW5kIHRyYWNrXG4iLCBmZGF0YS0+c3RhcnRfdW5pdCk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAlpZiAoZGFzZF9jaGVja19ibG9ja3NpemUoZmRhdGEtPmJsa3NpemUpICE9IDApIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCi0JCQkgICAgIkludmFsaWQgYmxvY2tzaXplICVkLi4udGVybWluYXRpbmchIiwKLQkJCSAgICBmZGF0YS0+Ymxrc2l6ZSk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSAiVGhlIERBU0QgY2Fubm90IGJlIGZvcm1hdHRlZCB3aXRoIGJsb2NrIHNpemUgJWRcbiIsCisJCQkgZmRhdGEtPmJsa3NpemUpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKQEAgLTEyOTYsOSArMTQ3MywxNyBAQAogCSAqICAgQml0IDE6IHdyaXRlIGhvbWUgYWRkcmVzcywgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQKIAkgKiAgIEJpdCAyOiBpbnZhbGlkYXRlIHRyYWNrcwogCSAqICAgQml0IDM6IHVzZSBPUy8zOTAgY29tcGF0aWJsZSBkaXNrIGxheW91dCAoY2RsKQorCSAqICAgQml0IDQ6IGRvIG5vdCBhbGxvdyBzdG9yYWdlIHN1YnN5c3RlbSB0byBtb2RpZnkgcmVjb3JkIHplcm8KIAkgKiBPbmx5IHNvbWUgYml0IGNvbWJpbmF0aW9ucyBkbyBtYWtlIHNlbnNlLgogCSAqLwotCXN3aXRjaCAoZmRhdGEtPmludGVuc2l0eSkgeworCWlmIChmZGF0YS0+aW50ZW5zaXR5ICYgMHgxMCkgeworCQlyMF9wZXJtID0gMDsKKwkJaW50ZW5zaXR5ID0gZmRhdGEtPmludGVuc2l0eSAmIH4weDEwOworCX0gZWxzZSB7CisJCXIwX3Blcm0gPSAxOworCQlpbnRlbnNpdHkgPSBmZGF0YS0+aW50ZW5zaXR5OworCX0KKwlzd2l0Y2ggKGludGVuc2l0eSkgewogCWNhc2UgMHgwMDoJLyogTm9ybWFsIGZvcm1hdCAqLwogCWNhc2UgMHgwODoJLyogTm9ybWFsIGZvcm1hdCwgdXNlIGNkbC4gKi8KIAkJY3BsZW5ndGggPSAyICsgcnB0OwpAQCAtMTMyMiw4ICsxNTA3LDggQEAKIAkJCXNpemVvZihzdHJ1Y3QgZWNrZF9jb3VudCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiSW52YWxpZCBmbGFncyAweCV4LiIsCi0JCQkgICAgZmRhdGEtPmludGVuc2l0eSk7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIEkvTyBjb250cm9sIGNhbGwgdXNlZCAiCisJCQkgImluY29ycmVjdCBmbGFncyAweCV4XG4iLCBmZGF0YS0+aW50ZW5zaXR5KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCS8qIEFsbG9jYXRlIHRoZSBmb3JtYXQgY2N3IHJlcXVlc3QuICovCkBAIC0xMzM1LDExICsxNTIwLDE0IEBACiAJZGF0YSA9IGZjcC0+ZGF0YTsKIAljY3cgPSBmY3AtPmNwYWRkcjsKIAotCXN3aXRjaCAoZmRhdGEtPmludGVuc2l0eSAmIH4weDA4KSB7CisJc3dpdGNoIChpbnRlbnNpdHkgJiB+MHgwOCkgewogCWNhc2UgMHgwMDogLyogTm9ybWFsIGZvcm1hdC4gKi8KIAkJZGVmaW5lX2V4dGVudChjY3crKywgKHN0cnVjdCBERV9lY2tkX2RhdGEgKikgZGF0YSwKIAkJCSAgICAgIGZkYXRhLT5zdGFydF91bml0LCBmZGF0YS0+c3RhcnRfdW5pdCwKIAkJCSAgICAgIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tELCBkZXZpY2UpOworCQkvKiBncmFudCBzdWJzeXN0ZW0gcGVybWlzc2lvbiB0byBmb3JtYXQgUjAgKi8KKwkJaWYgKHIwX3Blcm0pCisJCQkoKHN0cnVjdCBERV9lY2tkX2RhdGEgKilkYXRhKS0+Z2FfZXh0ZW5kZWQgfD0gMHgwNDsKIAkJZGF0YSArPSBzaXplb2Yoc3RydWN0IERFX2Vja2RfZGF0YSk7CiAJCWNjd1stMV0uZmxhZ3MgfD0gQ0NXX0ZMQUdfQ0M7CiAJCWxvY2F0ZV9yZWNvcmQoY2N3KyssIChzdHJ1Y3QgTE9fZWNrZF9kYXRhICopIGRhdGEsCkBAIC0xMzczLDExICsxNTYxLDExIEBACiAJCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBMT19lY2tkX2RhdGEpOwogCQlicmVhazsKIAl9Ci0JaWYgKGZkYXRhLT5pbnRlbnNpdHkgJiAweDAxKSB7CS8qIHdyaXRlIHJlY29yZCB6ZXJvICovCisJaWYgKGludGVuc2l0eSAmIDB4MDEpIHsJLyogd3JpdGUgcmVjb3JkIHplcm8gKi8KIAkJZWN0ID0gKHN0cnVjdCBlY2tkX2NvdW50ICopIGRhdGE7CiAJCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBlY2tkX2NvdW50KTsKLQkJZWN0LT5jeWwgPSBjeWw7Ci0JCWVjdC0+aGVhZCA9IGhlYWQ7CisJCWVjdC0+Y3lsID0gYWRkcmVzcy5jeWw7CisJCWVjdC0+aGVhZCA9IGFkZHJlc3MuaGVhZDsKIAkJZWN0LT5yZWNvcmQgPSAwOwogCQllY3QtPmtsID0gMDsKIAkJZWN0LT5kbCA9IDg7CkBAIC0xMzg4LDExICsxNTc2LDExIEBACiAJCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGVjdDsKIAkJY2N3Kys7CiAJfQotCWlmICgoZmRhdGEtPmludGVuc2l0eSAmIH4weDA4KSAmIDB4MDQpIHsJLyogZXJhc2UgdHJhY2sgKi8KKwlpZiAoKGludGVuc2l0eSAmIH4weDA4KSAmIDB4MDQpIHsJLyogZXJhc2UgdHJhY2sgKi8KIAkJZWN0ID0gKHN0cnVjdCBlY2tkX2NvdW50ICopIGRhdGE7CiAJCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBlY2tkX2NvdW50KTsKLQkJZWN0LT5jeWwgPSBjeWw7Ci0JCWVjdC0+aGVhZCA9IGhlYWQ7CisJCWVjdC0+Y3lsID0gYWRkcmVzcy5jeWw7CisJCWVjdC0+aGVhZCA9IGFkZHJlc3MuaGVhZDsKIAkJZWN0LT5yZWNvcmQgPSAxOwogCQllY3QtPmtsID0gMDsKIAkJZWN0LT5kbCA9IDA7CkBAIC0xNDA1LDIwICsxNTkzLDIwIEBACiAJCWZvciAoaSA9IDA7IGkgPCBycHQ7IGkrKykgewogCQkJZWN0ID0gKHN0cnVjdCBlY2tkX2NvdW50ICopIGRhdGE7CiAJCQlkYXRhICs9IHNpemVvZihzdHJ1Y3QgZWNrZF9jb3VudCk7Ci0JCQllY3QtPmN5bCA9IGN5bDsKLQkJCWVjdC0+aGVhZCA9IGhlYWQ7CisJCQllY3QtPmN5bCA9IGFkZHJlc3MuY3lsOworCQkJZWN0LT5oZWFkID0gYWRkcmVzcy5oZWFkOwogCQkJZWN0LT5yZWNvcmQgPSBpICsgMTsKIAkJCWVjdC0+a2wgPSAwOwogCQkJZWN0LT5kbCA9IGZkYXRhLT5ibGtzaXplOwogCQkJLyogQ2hlY2sgZm9yIHNwZWNpYWwgdHJhY2tzIDAtMSB3aGVuIGZvcm1hdHRpbmcgQ0RMICovCi0JCQlpZiAoKGZkYXRhLT5pbnRlbnNpdHkgJiAweDA4KSAmJgorCQkJaWYgKChpbnRlbnNpdHkgJiAweDA4KSAmJgogCQkJICAgIGZkYXRhLT5zdGFydF91bml0ID09IDApIHsKIAkJCQlpZiAoaSA8IDMpIHsKIAkJCQkJZWN0LT5rbCA9IDQ7CiAJCQkJCWVjdC0+ZGwgPSBzaXplc190cmswW2ldIC0gNDsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAoKGZkYXRhLT5pbnRlbnNpdHkgJiAweDA4KSAmJgorCQkJaWYgKChpbnRlbnNpdHkgJiAweDA4KSAmJgogCQkJICAgIGZkYXRhLT5zdGFydF91bml0ID09IDEpIHsKIAkJCQllY3QtPmtsID0gNDQ7CiAJCQkJZWN0LT5kbCA9IExBQkVMX1NJWkUgLSA0NDsKQEAgLTE0NzksNTcgKzE2NjcsNjkgQEAKIAkJCQkJCSAgIHN0cnVjdCBpcmIgKmlyYikKIHsKIAljaGFyIG1hc2s7CisJY2hhciAqc2Vuc2UgPSBOVUxMOwogCiAJLyogZmlyc3Qgb2YgYWxsIGNoZWNrIGZvciBzdGF0ZSBjaGFuZ2UgcGVuZGluZyBpbnRlcnJ1cHQgKi8KIAltYXNrID0gREVWX1NUQVRfQVRURU5USU9OIHwgREVWX1NUQVRfREVWX0VORCB8IERFVl9TVEFUX1VOSVRfRVhDRVA7Ci0JaWYgKChpcmItPnNjc3cuY21kLmRzdGF0ICYgbWFzaykgPT0gbWFzaykgeworCWlmICgoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIG1hc2spID09IG1hc2spIHsKIAkJZGFzZF9nZW5lcmljX2hhbmRsZV9zdGF0ZV9jaGFuZ2UoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHN1bW1hcnkgdW5pdCBjaGVjayAqLwotCWlmICgoaXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spICYmCisJaWYgKChzY3N3X2RzdGF0KCZpcmItPnNjc3cpICYgREVWX1NUQVRfVU5JVF9DSEVDSykgJiYKIAkgICAgKGlyYi0+ZWN3WzddID09IDB4MEQpKSB7CiAJCWRhc2RfYWxpYXNfaGFuZGxlX3N1bW1hcnlfdW5pdF9jaGVjayhkZXZpY2UsIGlyYik7CiAJCXJldHVybjsKIAl9CiAKLQorCXNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoaXJiKTsKIAkvKiBzZXJ2aWNlIGluZm9ybWF0aW9uIG1lc3NhZ2UgU0lNICovCi0JaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMgJiYgIShpcmItPmVjd1syN10gJiBEQVNEX1NFTlNFX0JJVF8wKSAmJgotCSAgICAoKGlyYi0+ZWN3WzZdICYgREFTRF9TSU1fU0VOU0UpID09IERBU0RfU0lNX1NFTlNFKSkgewotCQlkYXNkXzM5OTBfZXJwX2hhbmRsZV9zaW0oZGV2aWNlLCBpcmItPmVjdyk7CisJaWYgKHNlbnNlICYmICEoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgJiYKKwkgICAgKChzZW5zZVs2XSAmIERBU0RfU0lNX1NFTlNFKSA9PSBEQVNEX1NJTV9TRU5TRSkpIHsKKwkJZGFzZF8zOTkwX2VycF9oYW5kbGVfc2ltKGRldmljZSwgc2Vuc2UpOwogCQlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKChpcmItPnNjc3cuY21kLmNjID09IDEpICYmCi0JICAgIChpcmItPnNjc3cuY21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKLQkgICAgKGlyYi0+c2Nzdy5jbWQuYWN0bCAmIFNDU1dfQUNUTF9TVEFSVF9QRU5EKSAmJgotCSAgICAoaXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSB7CisJaWYgKChzY3N3X2NjKCZpcmItPnNjc3cpID09IDEpICYmCisJICAgIChzY3N3X2ZjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKKwkgICAgKHNjc3dfYWN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfQUNUTF9TVEFSVF9QRU5EKSAmJgorCSAgICAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSB7CiAJCS8qIGZha2UgaXJiIGRvIG5vdGhpbmcsIHRoZXkgYXJlIGhhbmRsZWQgZWxzZXdoZXJlICovCiAJCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIShpcmItPmVzdy5lc3cwLmVydy5jb25zKSkgeworCWlmICghc2Vuc2UpIHsKIAkJLyoganVzdCByZXBvcnQgb3RoZXIgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cyAqLwotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKIAkJCSAgICAidW5zb2xpY2l0ZWQgaW50ZXJydXB0IHJlY2VpdmVkIik7CiAJfSBlbHNlIHsKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgInVuc29saWNpdGVkIGludGVycnVwdCByZWNlaXZlZCAiCiAJCQkgICAgIihzZW5zZSBhdmFpbGFibGUpIik7Ci0JCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZShkZXZpY2UsIE5VTEwsIGlyYik7CisJCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBOVUxMLCBpcmIsCisJCQkJCQkgICAidW5zb2xpY2l0ZWQiKTsKIAl9CiAKIAlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCXJldHVybjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3Aoc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKworc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcF9jbWRfc2luZ2xlKAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKIAkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywKLQkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF90cmssCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBmaXJzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxhc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtfcGVyX3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtzaXplKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nICppZGF3czsKQEAgLTE1MzksMTEgKzE3MzksOSBAQAogCXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKIAlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CiAJY2hhciAqZHN0OwotCXVuc2lnbmVkIGludCBibGtzaXplLCBibGtfcGVyX3Ryaywgb2ZmOworCXVuc2lnbmVkIGludCBvZmY7CiAJaW50IGNvdW50LCBjaWRhdywgY3BsZW5ndGgsIGRhdGFzaXplOwotCXNlY3Rvcl90IHJlY2lkLCBmaXJzdF9yZWMsIGxhc3RfcmVjOwotCXNlY3Rvcl90IGZpcnN0X3RyaywgbGFzdF90cms7Ci0JdW5zaWduZWQgaW50IGZpcnN0X29mZnMsIGxhc3Rfb2ZmczsKKwlzZWN0b3JfdCByZWNpZDsKIAl1bnNpZ25lZCBjaGFyIGNtZCwgcmNtZDsKIAlpbnQgdXNlX3ByZWZpeDsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CkBAIC0xNTU2LDE1ICsxNzU0LDcgQEAKIAkJY21kID0gREFTRF9FQ0tEX0NDV19XUklURV9NVDsKIAllbHNlCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYmxvY2tzL3JlY29yZHMgcGVyIHRyYWNrLiAqLwotCWJsa3NpemUgPSBibG9jay0+YnBfYmxvY2s7Ci0JYmxrX3Blcl90cmsgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGJsa3NpemUpOwotCS8qIENhbGN1bGF0ZSByZWNvcmQgaWQgb2YgZmlyc3QgYW5kIGxhc3QgYmxvY2suICovCi0JZmlyc3RfcmVjID0gZmlyc3RfdHJrID0gcmVxLT5zZWN0b3IgPj4gYmxvY2stPnMyYl9zaGlmdDsKLQlmaXJzdF9vZmZzID0gc2VjdG9yX2RpdihmaXJzdF90cmssIGJsa19wZXJfdHJrKTsKLQlsYXN0X3JlYyA9IGxhc3RfdHJrID0KLQkJKHJlcS0+c2VjdG9yICsgcmVxLT5ucl9zZWN0b3JzIC0gMSkgPj4gYmxvY2stPnMyYl9zaGlmdDsKLQlsYXN0X29mZnMgPSBzZWN0b3JfZGl2KGxhc3RfdHJrLCBibGtfcGVyX3Ryayk7CisKIAkvKiBDaGVjayBzdHJ1Y3QgYmlvIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBmb3IgdGhlIHJlcXVlc3QuICovCiAJY291bnQgPSAwOwogCWNpZGF3ID0gMDsKQEAgLTE3MTQsNiArMTkwNCw0OTcgQEAKIAlyZXR1cm4gY3FyOwogfQogCitzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwX2NtZF90cmFjaygKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF9yZWMsCisJCQkJCSAgICAgICBzZWN0b3JfdCBmaXJzdF90cmssCisJCQkJCSAgICAgICBzZWN0b3JfdCBsYXN0X3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBmaXJzdF9vZmZzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxhc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtfcGVyX3RyaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBibGtzaXplKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nICppZGF3czsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJc3RydWN0IGNjdzEgKmNjdzsKKwlzdHJ1Y3QgcmVxX2l0ZXJhdG9yIGl0ZXI7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWNoYXIgKmRzdCwgKmlkYXdfZHN0OworCXVuc2lnbmVkIGludCBjaWRhdywgY3BsZW5ndGgsIGRhdGFzaXplOworCXVuc2lnbmVkIGludCB0bGY7CisJc2VjdG9yX3QgcmVjaWQ7CisJdW5zaWduZWQgY2hhciBjbWQ7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2OworCXVuc2lnbmVkIGludCB0cmtjb3VudCwgY291bnQsIGNvdW50X3RvX3Rya19lbmQ7CisJdW5zaWduZWQgaW50IGlkYXdfbGVuLCBzZWdfbGVuLCBwYXJ0X2xlbiwgbGVuX3RvX3RyYWNrX2VuZDsKKwl1bnNpZ25lZCBjaGFyIG5ld190cmFjaywgZW5kX2lkYXc7CisJc2VjdG9yX3QgdHJraWQ7CisJdW5zaWduZWQgaW50IHJlY29mZnM7CisKKwliYXNlZGV2ID0gYmxvY2stPmJhc2U7CisJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKKwlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKQorCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQTsKKwllbHNlIGlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKQorCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1dSSVRFX1RSQUNLX0RBVEE7CisJZWxzZQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIFRyYWNrIGJhc2VkIEkvTyBuZWVkcyBJREFXcyBmb3IgZWFjaCBwYWdlLCBhbmQgbm90IGp1c3QgZm9yCisJICogNjQgYml0IGFkZHJlc3Nlcy4gV2UgbmVlZCBhZGRpdGlvbmFsIGlkYWxzIGZvciBwYWdlcworCSAqIHRoYXQgZ2V0IGZpbGxlZCBmcm9tIHR3byB0cmFja3MsIHNvIHdlIHVzZSB0aGUgbnVtYmVyCisJICogb2YgcmVjb3JkcyBhcyB1cHBlciBsaW1pdC4KKwkgKi8KKwljaWRhdyA9IGxhc3RfcmVjIC0gZmlyc3RfcmVjICsgMTsKKwl0cmtjb3VudCA9IGxhc3RfdHJrIC0gZmlyc3RfdHJrICsgMTsKKworCS8qIDF4IHByZWZpeCArIG9uZSByZWFkL3dyaXRlIGNjdyBwZXIgdHJhY2sgKi8KKwljcGxlbmd0aCA9IDEgKyB0cmtjb3VudDsKKworCS8qIG9uIDMxLWJpdCB3ZSBuZWVkIHNwYWNlIGZvciB0d28gMzIgYml0IGFkZHJlc3NlcyBwZXIgcGFnZQorCSAqIG9uIDY0LWJpdCBvbmUgNjQgYml0IGFkZHJlc3MKKwkgKi8KKwlkYXRhc2l6ZSA9IHNpemVvZihzdHJ1Y3QgUEZYX2Vja2RfZGF0YSkgKworCQljaWRhdyAqIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpOworCisJLyogQWxsb2NhdGUgdGhlIGNjdyByZXF1ZXN0LiAqLworCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCisJCQkJICAgY3BsZW5ndGgsIGRhdGFzaXplLCBzdGFydGRldik7CisJaWYgKElTX0VSUihjcXIpKQorCQlyZXR1cm4gY3FyOworCWNjdyA9IGNxci0+Y3BhZGRyOworCS8qIHRyYW5zZmVyIGxlbmd0aCBmYWN0b3I6IGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB0aGUgbGFzdCB0cmFjayAqLworCWlmIChmaXJzdF90cmsgPT0gbGFzdF90cmspCisJCXRsZiA9IGxhc3Rfb2ZmcyAtIGZpcnN0X29mZnMgKyAxOworCWVsc2UKKwkJdGxmID0gbGFzdF9vZmZzICsgMTsKKwl0bGYgKj0gYmxrc2l6ZTsKKworCWlmIChwcmVmaXhfTFJFKGNjdysrLCBjcXItPmRhdGEsIGZpcnN0X3RyaywKKwkJICAgICAgIGxhc3RfdHJrLCBjbWQsIGJhc2VkZXYsIHN0YXJ0ZGV2LAorCQkgICAgICAgMSAvKiBmb3JtYXQgKi8sIGZpcnN0X29mZnMgKyAxLAorCQkgICAgICAgdHJrY291bnQsIGJsa3NpemUsCisJCSAgICAgICB0bGYpID09IC1FQUdBSU4pIHsKKwkJLyogQ2xvY2sgbm90IGluIHN5bmMgYW5kIFhSQyBpcyBlbmFibGVkLgorCQkgKiBUcnkgYWdhaW4gbGF0ZXIuCisJCSAqLworCQlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBzdGFydGRldik7CisJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCX0KKworCS8qCisJICogVGhlIHRyYW5zbGF0aW9uIG9mIHJlcXVlc3QgaW50byBjY3cgcHJvZ3JhbXMgbXVzdCBtZWV0IHRoZQorCSAqIGZvbGxvd2luZyBjb25kaXRpb25zOgorCSAqIC0gYWxsIGlkYXdzIGJ1dCB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IG11c3QgYWRkcmVzcyBmdWxsIHBhZ2VzCisJICogICAob3IgMksgYmxvY2tzIG9uIDMxLWJpdCkKKwkgKiAtIHRoZSBzY29wZSBvZiBhIGNjdyBhbmQgaXQncyBpZGFsIGVuZHMgd2l0aCB0aGUgdHJhY2sgYm91bmRhcmllcworCSAqLworCWlkYXdzID0gKHVuc2lnbmVkIGxvbmcgKikgKGNxci0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgUEZYX2Vja2RfZGF0YSkpOworCXJlY2lkID0gZmlyc3RfcmVjOworCW5ld190cmFjayA9IDE7CisJZW5kX2lkYXcgPSAwOworCWxlbl90b190cmFja19lbmQgPSAwOworCWlkYXdfZHN0ID0gMDsKKwlpZGF3X2xlbiA9IDA7CisJcnFfZm9yX2VhY2hfc2VnbWVudChidiwgcmVxLCBpdGVyKSB7CisJCWRzdCA9IHBhZ2VfYWRkcmVzcyhidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OworCQlzZWdfbGVuID0gYnYtPmJ2X2xlbjsKKwkJd2hpbGUgKHNlZ19sZW4pIHsKKwkJCWlmIChuZXdfdHJhY2spIHsKKwkJCQl0cmtpZCA9IHJlY2lkOworCQkJCXJlY29mZnMgPSBzZWN0b3JfZGl2KHRya2lkLCBibGtfcGVyX3Ryayk7CisJCQkJY291bnRfdG9fdHJrX2VuZCA9IGJsa19wZXJfdHJrIC0gcmVjb2ZmczsKKwkJCQljb3VudCA9IG1pbigobGFzdF9yZWMgLSByZWNpZCArIDEpLAorCQkJCQkgICAgKHNlY3Rvcl90KWNvdW50X3RvX3Rya19lbmQpOworCQkJCWxlbl90b190cmFja19lbmQgPSBjb3VudCAqIGJsa3NpemU7CisJCQkJY2N3Wy0xXS5mbGFncyB8PSBDQ1dfRkxBR19DQzsKKwkJCQljY3ctPmNtZF9jb2RlID0gY21kOworCQkJCWNjdy0+Y291bnQgPSBsZW5fdG9fdHJhY2tfZW5kOworCQkJCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpaWRhd3M7CisJCQkJY2N3LT5mbGFncyA9IENDV19GTEFHX0lEQTsKKwkJCQljY3crKzsKKwkJCQlyZWNpZCArPSBjb3VudDsKKwkJCQluZXdfdHJhY2sgPSAwOworCQkJfQorCQkJLyogSWYgd2Ugc3RhcnQgYSBuZXcgaWRhdywgZXZlcnl0aGluZyBpcyBmaW5lIGFuZCB0aGUKKwkJCSAqIHN0YXJ0IG9mIHRoZSBuZXcgaWRhdyBpcyB0aGUgc3RhcnQgb2YgdGhpcyBzZWdtZW50LgorCQkJICogSWYgd2UgY29udGludWUgYW4gaWRhdywgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUKKwkJCSAqIGN1cnJlbnQgc2VnbWVudCBiZWdpbnMgd2hlcmUgdGhlIHNvIGZhciBhY2N1bXVsYXRlZAorCQkJICogaWRhdyBlbmRzCisJCQkgKi8KKwkJCWlmICghaWRhd19kc3QpCisJCQkJaWRhd19kc3QgPSBkc3Q7CisJCQlpZiAoKGlkYXdfZHN0ICsgaWRhd19sZW4pICE9IGRzdCkgeworCQkJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKKwkJCQlyZXR1cm4gRVJSX1BUUigtRVJBTkdFKTsKKwkJCX0KKwkJCXBhcnRfbGVuID0gbWluKHNlZ19sZW4sIGxlbl90b190cmFja19lbmQpOworCQkJc2VnX2xlbiAtPSBwYXJ0X2xlbjsKKwkJCWRzdCArPSBwYXJ0X2xlbjsKKwkJCWlkYXdfbGVuICs9IHBhcnRfbGVuOworCQkJbGVuX3RvX3RyYWNrX2VuZCAtPSBwYXJ0X2xlbjsKKwkJCS8qIGNvbGxlY3RlZCBtZW1vcnkgYXJlYSBlbmRzIG9uIGFuIElEQV9CTE9DSyBib3JkZXIsCisJCQkgKiAtPiBjcmVhdGUgYW4gaWRhdworCQkJICogaWRhbF9jcmVhdGVfd29yZHMgd2lsbCBoYW5kbGUgY2FzZXMgd2hlcmUgaWRhd19sZW4KKwkJCSAqIGlzIGxhcmdlciB0aGVuIElEQV9CTE9DS19TSVpFCisJCQkgKi8KKwkJCWlmICghKF9fcGEoaWRhd19kc3QgKyBpZGF3X2xlbikgJiAoSURBX0JMT0NLX1NJWkUtMSkpKQorCQkJCWVuZF9pZGF3ID0gMTsKKwkJCS8qIFdlIGFsc28gbmVlZCB0byBlbmQgdGhlIGlkYXcgYXQgdHJhY2sgZW5kICovCisJCQlpZiAoIWxlbl90b190cmFja19lbmQpIHsKKwkJCQluZXdfdHJhY2sgPSAxOworCQkJCWVuZF9pZGF3ID0gMTsKKwkJCX0KKwkJCWlmIChlbmRfaWRhdykgeworCQkJCWlkYXdzID0gaWRhbF9jcmVhdGVfd29yZHMoaWRhd3MsIGlkYXdfZHN0LAorCQkJCQkJCSAgaWRhd19sZW4pOworCQkJCWlkYXdfZHN0ID0gMDsKKwkJCQlpZGF3X2xlbiA9IDA7CisJCQkJZW5kX2lkYXcgPSAwOworCQkJfQorCQl9CisJfQorCisJaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSB8fAorCSAgICBibG9jay0+YmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRkFJTEZBU1QpCisJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKKwljcXItPnN0YXJ0ZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5tZW1kZXYgPSBzdGFydGRldjsKKwljcXItPmJsb2NrID0gYmxvY2s7CisJY3FyLT5leHBpcmVzID0gNSAqIDYwICogSFo7CS8qIDUgbWludXRlcyAqLworCWNxci0+bHBtID0gcHJpdmF0ZS0+cGF0aF9kYXRhLnBwbTsKKwljcXItPnJldHJpZXMgPSAyNTY7CisJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOworCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOworCXJldHVybiBjcXI7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9pdGN3KHN0cnVjdCBpdGN3ICppdGN3LAorCQkJdW5zaWduZWQgaW50IHRyaywgdW5zaWduZWQgaW50IHRvdHJrLCBpbnQgY21kLAorCQkJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2LAorCQkJc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJCXVuc2lnbmVkIGludCByZWNfb25fdHJrLCBpbnQgY291bnQsCisJCQl1bnNpZ25lZCBpbnQgYmxrc2l6ZSwKKwkJCXVuc2lnbmVkIGludCB0b3RhbF9kYXRhX3NpemUsCisJCQl1bnNpZ25lZCBpbnQgdGxmLAorCQkJdW5zaWduZWQgaW50IGJsa19wZXJfdHJrKQoreworCXN0cnVjdCBQRlhfZWNrZF9kYXRhIHBmeGRhdGE7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpiYXNlcHJpdiwgKnN0YXJ0cHJpdjsKKwlzdHJ1Y3QgREVfZWNrZF9kYXRhICpkZWRhdGE7CisJc3RydWN0IExSRV9lY2tkX2RhdGEgKmxyZWRhdGE7CisJc3RydWN0IGRjdyAqZGN3OworCisJdTMyIGJlZ2N5bCwgZW5kY3lsOworCXUxNiBoZWFkcywgYmVnaGVhZCwgZW5kaGVhZDsKKwl1OCBwZnhfY21kOworCisJaW50IHJjID0gMDsKKwlpbnQgc2VjdG9yID0gMDsKKwlpbnQgZG4sIGQ7CisKKworCS8qIHNldHVwIHByZWZpeCBkYXRhICovCisJYmFzZXByaXYgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisJc3RhcnRwcml2ID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBzdGFydGRldi0+cHJpdmF0ZTsKKwlkZWRhdGEgPSAmcGZ4ZGF0YS5kZWZpbmVfZXh0ZW50OworCWxyZWRhdGEgPSAmcGZ4ZGF0YS5sb2NhdGVfcmVjb3JkOworCisJbWVtc2V0KCZwZnhkYXRhLCAwLCBzaXplb2YocGZ4ZGF0YSkpOworCXBmeGRhdGEuZm9ybWF0ID0gMTsgLyogUEZYIHdpdGggTFJFICovCisJcGZ4ZGF0YS5iYXNlX2FkZHJlc3MgPSBiYXNlcHJpdi0+bmVkLT51bml0X2FkZHI7CisJcGZ4ZGF0YS5iYXNlX2xzcyA9IGJhc2Vwcml2LT5uZWQtPklEOworCXBmeGRhdGEudmFsaWRpdHkuZGVmaW5lX2V4dGVudCA9IDE7CisKKwkvKiBwcml2YXRlIHVpZCBpcyBrZXB0IHVwIHRvIGRhdGUsIGNvbmZfZGF0YSBtYXkgYmUgb3V0ZGF0ZWQgKi8KKwlpZiAoc3RhcnRwcml2LT51aWQudHlwZSAhPSBVQV9CQVNFX0RFVklDRSkgeworCQlwZnhkYXRhLnZhbGlkaXR5LnZlcmlmeV9iYXNlID0gMTsKKwkJaWYgKHN0YXJ0cHJpdi0+dWlkLnR5cGUgPT0gVUFfSFlQRVJfUEFWX0FMSUFTKQorCQkJcGZ4ZGF0YS52YWxpZGl0eS5oeXBlcl9wYXYgPSAxOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQToKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDE7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5ibGtfc2l6ZSA9IGJsa3NpemU7CisJCWRlZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHg0MjsKKwkJbHJlZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgwOworCQlscmVkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwQzsKKwkJbHJlZGF0YS0+YXV4aWxpYXJ5LmNoZWNrX2J5dGVzID0gMHgwMTsKKwkJcGZ4X2NtZCA9IERBU0RfRUNLRF9DQ1dfUEZYX1JFQUQ7CisJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOgorCQlkZWRhdGEtPm1hc2sucGVybSA9IDB4MDI7CisJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBiYXNlcHJpdi0+YXR0cmliLm9wZXJhdGlvbjsKKwkJZGVkYXRhLT5ibGtfc2l6ZSA9IGJsa3NpemU7CisJCXJjID0gY2hlY2tfWFJDX29uX3ByZWZpeCgmcGZ4ZGF0YSwgYmFzZWRldik7CisJCWRlZGF0YS0+Z2FfZXh0ZW5kZWQgfD0gMHg0MjsKKwkJbHJlZGF0YS0+b3BlcmF0aW9uLm9yaWVudGF0aW9uID0gMHgwOworCQlscmVkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgzRjsKKwkJbHJlZGF0YS0+ZXh0ZW5kZWRfb3BlcmF0aW9uID0gMHgyMzsKKwkJbHJlZGF0YS0+YXV4aWxpYXJ5LmNoZWNrX2J5dGVzID0gMHgyOworCQlwZnhfY21kID0gREFTRF9FQ0tEX0NDV19QRlg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgYmFzZWRldiwKKwkJCSAgICAgICJwcmVwYXJlIGl0Y3csIHVua25vd24gb3Bjb2RlIDB4JXgiLCBjbWQpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZGVkYXRhLT5hdHRyaWJ1dGVzLm1vZGUgPSAweDM7CS8qIEVDS0QgKi8KKworCWhlYWRzID0gYmFzZXByaXYtPnJkY19kYXRhLnRya19wZXJfY3lsOworCWJlZ2N5bCA9IHRyayAvIGhlYWRzOworCWJlZ2hlYWQgPSB0cmsgJSBoZWFkczsKKwllbmRjeWwgPSB0b3RyayAvIGhlYWRzOworCWVuZGhlYWQgPSB0b3RyayAlIGhlYWRzOworCisJLyogY2hlY2sgZm9yIHNlcXVlbnRpYWwgcHJlc3RhZ2UgLSBlbmhhbmNlIGN5bGluZGVyIHJhbmdlICovCisJaWYgKGRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPT0gREFTRF9TRVFfUFJFU1RBR0UgfHwKKwkgICAgZGVkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9BQ0NFU1MpIHsKKworCQlpZiAoZW5kY3lsICsgYmFzZXByaXYtPmF0dHJpYi5ucl9jeWwgPCBiYXNlcHJpdi0+cmVhbF9jeWwpCisJCQllbmRjeWwgKz0gYmFzZXByaXYtPmF0dHJpYi5ucl9jeWw7CisJCWVsc2UKKwkJCWVuZGN5bCA9IChiYXNlcHJpdi0+cmVhbF9jeWwgLSAxKTsKKwl9CisKKwlzZXRfY2hfdCgmZGVkYXRhLT5iZWdfZXh0LCBiZWdjeWwsIGJlZ2hlYWQpOworCXNldF9jaF90KCZkZWRhdGEtPmVuZF9leHQsIGVuZGN5bCwgZW5kaGVhZCk7CisKKwlkZWRhdGEtPmVwX2Zvcm1hdCA9IDB4MjA7IC8qIHJlY29yZHMgcGVyIHRyYWNrIGlzIHZhbGlkICovCisJZGVkYXRhLT5lcF9yZWNfcGVyX3RyYWNrID0gYmxrX3Blcl90cms7CisKKwlpZiAocmVjX29uX3RyaykgeworCQlzd2l0Y2ggKGJhc2Vwcml2LT5yZGNfZGF0YS5kZXZfdHlwZSkgeworCQljYXNlIDB4MzM5MDoKKwkJCWRuID0gY2VpbF9xdW90KGJsa3NpemUgKyA2LCAyMzIpOworCQkJZCA9IDkgKyBjZWlsX3F1b3QoYmxrc2l6ZSArIDYgKiAoZG4gKyAxKSwgMzQpOworCQkJc2VjdG9yID0gKDQ5ICsgKHJlY19vbl90cmsgLSAxKSAqICgxMCArIGQpKSAvIDg7CisJCQlicmVhazsKKwkJY2FzZSAweDMzODA6CisJCQlkID0gNyArIGNlaWxfcXVvdChibGtzaXplICsgMTIsIDMyKTsKKwkJCXNlY3RvciA9ICgzOSArIChyZWNfb25fdHJrIC0gMSkgKiAoOCArIGQpKSAvIDc7CisJCQlicmVhazsKKwkJfQorCX0KKworCWxyZWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfdmFsaWQgPSAxOworCWxyZWRhdGEtPmF1eGlsaWFyeS5sZW5ndGhfc2NvcGUgPSAxOworCWxyZWRhdGEtPmF1eGlsaWFyeS5pbWJlZGRlZF9jY3dfdmFsaWQgPSAxOworCWxyZWRhdGEtPmxlbmd0aCA9IHRsZjsKKwlscmVkYXRhLT5pbWJlZGRlZF9jY3cgPSBjbWQ7CisJbHJlZGF0YS0+Y291bnQgPSBjb3VudDsKKwlscmVkYXRhLT5zZWN0b3IgPSBzZWN0b3I7CisJc2V0X2NoX3QoJmxyZWRhdGEtPnNlZWtfYWRkciwgYmVnY3lsLCBiZWdoZWFkKTsKKwlscmVkYXRhLT5zZWFyY2hfYXJnLmN5bCA9IGxyZWRhdGEtPnNlZWtfYWRkci5jeWw7CisJbHJlZGF0YS0+c2VhcmNoX2FyZy5oZWFkID0gbHJlZGF0YS0+c2Vla19hZGRyLmhlYWQ7CisJbHJlZGF0YS0+c2VhcmNoX2FyZy5yZWNvcmQgPSByZWNfb25fdHJrOworCisJZGN3ID0gaXRjd19hZGRfZGN3KGl0Y3csIHBmeF9jbWQsIDAsCisJCSAgICAgJnBmeGRhdGEsIHNpemVvZihwZnhkYXRhKSwgdG90YWxfZGF0YV9zaXplKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZWNrZF9idWlsZF9jcF90cG1fdHJhY2soCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAorCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCQkJICAgICAgIHNlY3Rvcl90IGZpcnN0X3JlYywKKwkJCQkJICAgICAgIHNlY3Rvcl90IGxhc3RfcmVjLAorCQkJCQkgICAgICAgc2VjdG9yX3QgZmlyc3RfdHJrLAorCQkJCQkgICAgICAgc2VjdG9yX3QgbGFzdF90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBsYXN0X29mZnMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrX3Blcl90cmssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmxrc2l6ZSkKK3sKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJY2hhciAqZHN0OworCXVuc2lnbmVkIGludCB0cmtjb3VudCwgY3RpZGF3OworCXVuc2lnbmVkIGNoYXIgY21kOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKKwl1bnNpZ25lZCBpbnQgdGxmOworCXN0cnVjdCBpdGN3ICppdGN3OworCXN0cnVjdCB0aWRhdyAqbGFzdF90aWRhdyA9IE5VTEw7CisJaW50IGl0Y3dfb3A7CisJc2l6ZV90IGl0Y3dfc2l6ZTsKKworCWJhc2VkZXYgPSBibG9jay0+YmFzZTsKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBiYXNlZGV2LT5wcml2YXRlOworCWlmIChycV9kYXRhX2RpcihyZXEpID09IFJFQUQpIHsKKwkJY21kID0gREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE7CisJCWl0Y3dfb3AgPSBJVENXX09QX1JFQUQ7CisJfSBlbHNlIGlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CisJCWNtZCA9IERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQTsKKwkJaXRjd19vcCA9IElUQ1dfT1BfV1JJVEU7CisJfSBlbHNlCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogdHJhY2tiYXNlZCBJL08gbmVlZHMgYWRkcmVzcyBhbGwgbWVtb3J5IHZpYSBUSURBV3MsCisJICogbm90IGp1c3QgZm9yIDY0IGJpdCBhZGRyZXNzZXMuIFRoaXMgYWxsb3dzIHVzIHRvIG1hcAorCSAqIGVhY2ggc2VnbWVudCBkaXJlY3RseSB0byBvbmUgdGlkYXcuCisJICovCisJdHJrY291bnQgPSBsYXN0X3RyayAtIGZpcnN0X3RyayArIDE7CisJY3RpZGF3ID0gMDsKKwlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKKwkJKytjdGlkYXc7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIGNjdyByZXF1ZXN0LiAqLworCWl0Y3dfc2l6ZSA9IGl0Y3dfY2FsY19zaXplKDAsIGN0aWRhdywgMCk7CisJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKKwkJCQkgICAwLCBpdGN3X3NpemUsIHN0YXJ0ZGV2KTsKKwlpZiAoSVNfRVJSKGNxcikpCisJCXJldHVybiBjcXI7CisKKwljcXItPmNwbW9kZSA9IDE7CisJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OworCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5ibG9jayA9IGJsb2NrOworCWNxci0+ZXhwaXJlcyA9IDEwMCpIWjsKKwljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CisJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CisJY3FyLT5yZXRyaWVzID0gMTA7CisKKwkvKiB0cmFuc2ZlciBsZW5ndGggZmFjdG9yOiBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdGhlIGxhc3QgdHJhY2sgKi8KKwlpZiAoZmlyc3RfdHJrID09IGxhc3RfdHJrKQorCQl0bGYgPSBsYXN0X29mZnMgLSBmaXJzdF9vZmZzICsgMTsKKwllbHNlCisJCXRsZiA9IGxhc3Rfb2ZmcyArIDE7CisJdGxmICo9IGJsa3NpemU7CisKKwlpdGN3ID0gaXRjd19pbml0KGNxci0+ZGF0YSwgaXRjd19zaXplLCBpdGN3X29wLCAwLCBjdGlkYXcsIDApOworCWNxci0+Y3BhZGRyID0gaXRjd19nZXRfdGN3KGl0Y3cpOworCisJaWYgKHByZXBhcmVfaXRjdyhpdGN3LCBmaXJzdF90cmssIGxhc3RfdHJrLAorCQkJIGNtZCwgYmFzZWRldiwgc3RhcnRkZXYsCisJCQkgZmlyc3Rfb2ZmcyArIDEsCisJCQkgdHJrY291bnQsIGJsa3NpemUsCisJCQkgKGxhc3RfcmVjIC0gZmlyc3RfcmVjICsgMSkgKiBibGtzaXplLAorCQkJIHRsZiwgYmxrX3Blcl90cmspID09IC1FQUdBSU4pIHsKKwkJLyogQ2xvY2sgbm90IGluIHN5bmMgYW5kIFhSQyBpcyBlbmFibGVkLgorCQkgKiBUcnkgYWdhaW4gbGF0ZXIuCisJCSAqLworCQlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBzdGFydGRldik7CisJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCX0KKworCS8qCisJICogQSB0aWRhdyBjYW4gYWRkcmVzcyA0ayBvZiBtZW1vcnksIGJ1dCBtdXN0IG5vdCBjcm9zcyBwYWdlIGJvdW5kYXJpZXMKKwkgKiBXZSBjYW4gbGV0IHRoZSBibG9jayBsYXllciBoYW5kbGUgdGhpcyBieSBzZXR0aW5nCisJICogYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkgdG8gcGFnZSBib3VuZGFyaWVzIGFuZAorCSAqIGJsa19tYXhfc2VnbWVudF9zaXplIHRvIHBhZ2Ugc2l6ZSB3aGVuIHNldHRpbmcgdXAgdGhlIHJlcXVlc3QgcXVldWUuCisJICovCisJcnFfZm9yX2VhY2hfc2VnbWVudChidiwgcmVxLCBpdGVyKSB7CisJCWRzdCA9IHBhZ2VfYWRkcmVzcyhidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OworCQlsYXN0X3RpZGF3ID0gaXRjd19hZGRfdGlkYXcoaXRjdywgMHgwMCwgZHN0LCBidi0+YnZfbGVuKTsKKwkJaWYgKElTX0VSUihsYXN0X3RpZGF3KSkKKwkJCXJldHVybiAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKWxhc3RfdGlkYXc7CisJfQorCisJbGFzdF90aWRhdy0+ZmxhZ3MgfD0gMHg4MDsKKwlpdGN3X2ZpbmFsaXplKGl0Y3cpOworCisJaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSB8fAorCSAgICBibG9jay0+YmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRkFJTEZBU1QpCisJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKKwljcXItPnN0YXJ0ZGV2ID0gc3RhcnRkZXY7CisJY3FyLT5tZW1kZXYgPSBzdGFydGRldjsKKwljcXItPmJsb2NrID0gYmxvY2s7CisJY3FyLT5leHBpcmVzID0gNSAqIDYwICogSFo7CS8qIDUgbWludXRlcyAqLworCWNxci0+bHBtID0gcHJpdmF0ZS0+cGF0aF9kYXRhLnBwbTsKKwljcXItPnJldHJpZXMgPSAyNTY7CisJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOworCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOworCXJldHVybiBjcXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfY3Aoc3RydWN0IGRhc2RfZGV2aWNlICpzdGFydGRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywKKwkJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpCit7CisJaW50IHRwbSwgY21kcnRkLCBjbWR3dGQ7CisJaW50IHVzZV9wcmVmaXg7CisKKwlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJaW50IGZjeF9pbl9jc3MsIGZjeF9pbl9nbmVxLCBmY3hfaW5fZmVhdHVyZXM7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlZGV2OworCXNlY3Rvcl90IGZpcnN0X3JlYywgbGFzdF9yZWM7CisJc2VjdG9yX3QgZmlyc3RfdHJrLCBsYXN0X3RyazsKKwl1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzOworCXVuc2lnbmVkIGludCBibGtfcGVyX3RyaywgYmxrc2l6ZTsKKwlpbnQgY2Rsc3BlY2lhbDsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisKKwliYXNlZGV2ID0gYmxvY2stPmJhc2U7CisJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKKworCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYmxvY2tzL3JlY29yZHMgcGVyIHRyYWNrLiAqLworCWJsa3NpemUgPSBibG9jay0+YnBfYmxvY2s7CisJYmxrX3Blcl90cmsgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGJsa3NpemUpOworCS8qIENhbGN1bGF0ZSByZWNvcmQgaWQgb2YgZmlyc3QgYW5kIGxhc3QgYmxvY2suICovCisJZmlyc3RfcmVjID0gZmlyc3RfdHJrID0gcmVxLT5zZWN0b3IgPj4gYmxvY2stPnMyYl9zaGlmdDsKKwlmaXJzdF9vZmZzID0gc2VjdG9yX2RpdihmaXJzdF90cmssIGJsa19wZXJfdHJrKTsKKwlsYXN0X3JlYyA9IGxhc3RfdHJrID0KKwkJKHJlcS0+c2VjdG9yICsgcmVxLT5ucl9zZWN0b3JzIC0gMSkgPj4gYmxvY2stPnMyYl9zaGlmdDsKKwlsYXN0X29mZnMgPSBzZWN0b3JfZGl2KGxhc3RfdHJrLCBibGtfcGVyX3Ryayk7CisJY2Rsc3BlY2lhbCA9IChwcml2YXRlLT51c2VzX2NkbCAmJiBmaXJzdF9yZWMgPCAyKmJsa19wZXJfdHJrKTsKKworCS8qIGlzIHRyYW5zcG9ydCBtb2RlIHN1cHBvcnRlZCA/ICovCisJZmN4X2luX2NzcyA9IGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5mY3g7CisJZmN4X2luX2duZXEgPSBwcml2YXRlLT5nbmVxLT5yZXNlcnZlZDJbN10gJiAweDA0OworCWZjeF9pbl9mZWF0dXJlcyA9IHByaXZhdGUtPmZlYXR1cmVzLmZlYXR1cmVbNDBdICYgMHg4MDsKKwl0cG0gPSBmY3hfaW5fY3NzICYmIGZjeF9pbl9nbmVxICYmIGZjeF9pbl9mZWF0dXJlczsKKworCS8qIGlzIHJlYWQgdHJhY2sgZGF0YSBhbmQgd3JpdGUgdHJhY2sgZGF0YSBpbiBjb21tYW5kIG1vZGUgc3VwcG9ydGVkPyAqLworCWNtZHJ0ZCA9IHByaXZhdGUtPmZlYXR1cmVzLmZlYXR1cmVbOV0gJiAweDIwOworCWNtZHd0ZCA9IHByaXZhdGUtPmZlYXR1cmVzLmZlYXR1cmVbMTJdICYgMHg0MDsKKwl1c2VfcHJlZml4ID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVs4XSAmIDB4MDE7CisKKwljcXIgPSBOVUxMOworCWlmIChjZGxzcGVjaWFsIHx8IGRhc2RfcGFnZV9jYWNoZSkgeworCQkvKiBkbyBub3RoaW5nLCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgY21kIG1vZGUgc2luZ2xlIGNhc2UgKi8KKwl9IGVsc2UgaWYgKCFkYXNkX25vZmN4ICYmIHRwbSAmJiAoZmlyc3RfdHJrID09IGxhc3RfdHJrKSkgeworCQljcXIgPSBkYXNkX2Vja2RfYnVpbGRfY3BfdHBtX3RyYWNrKHN0YXJ0ZGV2LCBibG9jaywgcmVxLAorCQkJCQkJICAgIGZpcnN0X3JlYywgbGFzdF9yZWMsCisJCQkJCQkgICAgZmlyc3RfdHJrLCBsYXN0X3RyaywKKwkJCQkJCSAgICBmaXJzdF9vZmZzLCBsYXN0X29mZnMsCisJCQkJCQkgICAgYmxrX3Blcl90cmssIGJsa3NpemUpOworCQlpZiAoSVNfRVJSKGNxcikgJiYgUFRSX0VSUihjcXIpICE9IC1FQUdBSU4pCisJCQljcXIgPSBOVUxMOworCX0gZWxzZSBpZiAodXNlX3ByZWZpeCAmJgorCQkgICAoKChycV9kYXRhX2RpcihyZXEpID09IFJFQUQpICYmIGNtZHJ0ZCkgfHwKKwkJICAgICgocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgJiYgY21kd3RkKSkpIHsKKwkJY3FyID0gZGFzZF9lY2tkX2J1aWxkX2NwX2NtZF90cmFjayhzdGFydGRldiwgYmxvY2ssIHJlcSwKKwkJCQkJCSAgIGZpcnN0X3JlYywgbGFzdF9yZWMsCisJCQkJCQkgICBmaXJzdF90cmssIGxhc3RfdHJrLAorCQkJCQkJICAgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzLAorCQkJCQkJICAgYmxrX3Blcl90cmssIGJsa3NpemUpOworCQlpZiAoSVNfRVJSKGNxcikgJiYgUFRSX0VSUihjcXIpICE9IC1FQUdBSU4pCisJCQljcXIgPSBOVUxMOworCX0KKwlpZiAoIWNxcikKKwkJY3FyID0gZGFzZF9lY2tkX2J1aWxkX2NwX2NtZF9zaW5nbGUoc3RhcnRkZXYsIGJsb2NrLCByZXEsCisJCQkJCQkgICAgZmlyc3RfcmVjLCBsYXN0X3JlYywKKwkJCQkJCSAgICBmaXJzdF90cmssIGxhc3RfdHJrLAorCQkJCQkJICAgIGZpcnN0X29mZnMsIGxhc3Rfb2ZmcywKKwkJCQkJCSAgICBibGtfcGVyX3RyaywgYmxrc2l6ZSk7CisJcmV0dXJuIGNxcjsKK30KKwogc3RhdGljIGludAogZGFzZF9lY2tkX2ZyZWVfY3Aoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewpAQCAtMTc2Nyw3ICsyNDQ4LDcgQEAKIH0KIAogLyoKLSAqIE1vZGlmeSBjY3cgY2hhaW4gaW4gY3FyIHNvIGl0IGNhbiBiZSBzdGFydGVkIG9uIGEgYmFzZSBkZXZpY2UuCisgKiBNb2RpZnkgY2N3L3RjdyBpbiBjcXIgc28gaXQgY2FuIGJlIHN0YXJ0ZWQgb24gYSBiYXNlIGRldmljZS4KICAqCiAgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgZW5vdWdoIHRvIHJlc3RhcnQgdGhlIGNxciEKICAqIEVpdGhlciByZXNldCBjcXItPnN0YXJ0ZGV2IGFzIHdlbGwgKHN1bW1hcnkgdW5pdCBjaGVjayBoYW5kbGluZykKQEAgLTE3NzcsMTMgKzI0NTgsMjQgQEAKIHsKIAlzdHJ1Y3QgY2N3MSAqY2N3OwogCXN0cnVjdCBQRlhfZWNrZF9kYXRhICpwZnhkYXRhOworCXN0cnVjdCB0Y3cgKnRjdzsKKwlzdHJ1Y3QgdGNjYiAqdGNjYjsKKwlzdHJ1Y3QgZGN3ICpkY3c7CiAKLQljY3cgPSBjcXItPmNwYWRkcjsKLQlwZnhkYXRhID0gY3FyLT5kYXRhOwotCi0JaWYgKGNjdy0+Y21kX2NvZGUgPT0gREFTRF9FQ0tEX0NDV19QRlgpIHsKKwlpZiAoY3FyLT5jcG1vZGUgPT0gMSkgeworCQl0Y3cgPSBjcXItPmNwYWRkcjsKKwkJdGNjYiA9IHRjd19nZXRfdGNjYih0Y3cpOworCQlkY3cgPSAoc3RydWN0IGRjdyAqKSZ0Y2NiLT50Y2FbMF07CisJCXBmeGRhdGEgPSAoc3RydWN0IFBGWF9lY2tkX2RhdGEgKikmZGN3LT5jZFswXTsKIAkJcGZ4ZGF0YS0+dmFsaWRpdHkudmVyaWZ5X2Jhc2UgPSAwOwogCQlwZnhkYXRhLT52YWxpZGl0eS5oeXBlcl9wYXYgPSAwOworCX0gZWxzZSB7CisJCWNjdyA9IGNxci0+Y3BhZGRyOworCQlwZnhkYXRhID0gY3FyLT5kYXRhOworCQlpZiAoY2N3LT5jbWRfY29kZSA9PSBEQVNEX0VDS0RfQ0NXX1BGWCkgeworCQkJcGZ4ZGF0YS0+dmFsaWRpdHkudmVyaWZ5X2Jhc2UgPSAwOworCQkJcGZ4ZGF0YS0+dmFsaWRpdHkuaHlwZXJfcGF2ID0gMDsKKwkJfQogCX0KIH0KIApAQCAtMTg2MSw2ICsyNTUzLDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMTg2OCwxNCArMjU2MSwxNSBAQAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCiAJCQkJICAgMSwgMzIsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CiAJCXJldHVybiBQVFJfRVJSKGNxcik7CiAJfQotCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUkVMRUFTRTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKLSAgICAgICAgY3FyLT5jcGFkZHItPmNvdW50ID0gMzI7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUkVMRUFTRTsKKwljY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKKwljY3ctPmNvdW50ID0gMzI7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKQEAgLTE5MDIsNiArMjU5Niw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKKwlzdHJ1Y3QgY2N3MSAqY2N3OwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTE5MDksMTQgKzI2MDQsMTUgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAogCQkJCSAgIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyZXR1cm4gUFRSX0VSUihjcXIpOwogCX0KLQljcXItPmNwYWRkci0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JFU0VSVkU7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7Ci0gICAgICAgIGNxci0+Y3BhZGRyLT5jb3VudCA9IDMyOwotCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCWNjdyA9IGNxci0+Y3BhZGRyOworCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1JFU0VSVkU7CisJY2N3LT5mbGFncyB8PSBDQ1dfRkxBR19TTEk7CisJY2N3LT5jb3VudCA9IDMyOworCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwogCWNxci0+bWVtZGV2ID0gZGV2aWNlOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CkBAIC0xOTQyLDYgKzI2MzgsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CisJc3RydWN0IGNjdzEgKmNjdzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xOTQ5LDE0ICsyNjQ2LDE1IEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKIAkJCQkgICAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIAl9Ci0JY3FyLT5jcGFkZHItPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19TTENLOwotICAgICAgICBjcXItPmNwYWRkci0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOwotICAgICAgICBjcXItPmNwYWRkci0+Y291bnQgPSAzMjsKLQljcXItPmNwYWRkci0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGNxci0+ZGF0YTsKKwljY3cgPSBjcXItPmNwYWRkcjsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19TTENLOworCWNjdy0+ZmxhZ3MgfD0gQ0NXX0ZMQUdfU0xJOworCWNjdy0+Y291bnQgPSAzMjsKKwljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwpAQCAtMTk5MCw3ICsyNjg4LDcgQEAKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfcGVyZl9zdGF0c190KSksCiAJCQkJICAgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKIAkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKIAl9CkBAIC0yMDgwLDkgKzI3NzgsOSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlwcml2YXRlLT5hdHRyaWIgPSBhdHRyaWI7CiAKLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJICAgICJjYWNoZSBvcGVyYXRpb24gbW9kZSBzZXQgdG8gJXggKCVpIGN5bGluZGVyIHByZXN0YWdlKSIsCi0JCSAgICBwcml2YXRlLT5hdHRyaWIub3BlcmF0aW9uLCBwcml2YXRlLT5hdHRyaWIubnJfY3lsKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSAiVGhlIERBU0QgY2FjaGUgbW9kZSB3YXMgc2V0IHRvICV4ICglaSBjeWxpbmRlciBwcmVzdGFnZSlcbiIsCisJCSBwcml2YXRlLT5hdHRyaWIub3BlcmF0aW9uLCBwcml2YXRlLT5hdHRyaWIubnJfY3lsKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjEzMyw3ICsyODMxLDcgQEAKIAkvKiBzZXR1cCBDQ1dzIGZvciBQU0YgKyBSU1NEICovCiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoIkVDS0QiLCAyICwgMCwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwogCQlyYyA9IFBUUl9FUlIoY3FyKTsKIAkJZ290byBvdXRfZnJlZTsKQEAgLTIyNDIsMTEgKzI5NDAsNTQgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgdm9pZAorZGFzZF9lY2tkX2R1bXBfc2Vuc2VfZGJmKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpyZXEsCisJCQkgc3RydWN0IGlyYiAqaXJiLCBjaGFyICpyZWFzb24pCit7CisJdTY0ICpzZW5zZTsKKwlpbnQgc2w7CisJc3RydWN0IHRzYiAqdHNiOworCisJc2Vuc2UgPSBOVUxMOworCXRzYiA9IE5VTEw7CisJaWYgKHJlcSAmJiBzY3N3X2lzX3RtKCZyZXEtPmlyYi5zY3N3KSkgeworCQlpZiAoaXJiLT5zY3N3LnRtLnRjdykKKwkJCXRzYiA9IHRjd19nZXRfdHNiKAorCQkJCShzdHJ1Y3QgdGN3ICopKHVuc2lnbmVkIGxvbmcpaXJiLT5zY3N3LnRtLnRjdyk7CisJCWlmICh0c2IgJiYgKGlyYi0+c2Nzdy50bS5mY3hzID09IDB4MDEpKSB7CisJCQlzd2l0Y2ggKHRzYi0+ZmxhZ3MgJiAweDA3KSB7CisJCQljYXNlIDE6CS8qIHRzYV9pb3N0YXQgKi8KKwkJCQlzZW5zZSA9ICh1NjQgKil0c2ItPnRzYS5pb3N0YXQuc2Vuc2U7CisJCQlicmVhazsKKwkJCWNhc2UgMjogLyogdHNfZGRwYyAqLworCQkJCXNlbnNlID0gKHU2NCAqKXRzYi0+dHNhLmRkcGMuc2Vuc2U7CisJCQlicmVhazsKKwkJCWNhc2UgMzogLyogdHNhX2ludHJnICovCisJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zKQorCQkJc2Vuc2UgPSAodTY0ICopaXJiLT5lY3c7CisJfQorCWlmIChzZW5zZSkgeworCQlmb3IgKHNsID0gMDsgc2wgPCA0OyBzbCsrKSB7CisJCQlEQkZfREVWX0VWRU5UKERCRl9FTUVSRywgZGV2aWNlLAorCQkJCSAgICAgICIlczogJTAxNmxseCAlMDE2bGx4ICUwMTZsbHggJTAxNmxseCIsCisJCQkJICAgICAgcmVhc29uLCBzZW5zZVswXSwgc2Vuc2VbMV0sIHNlbnNlWzJdLAorCQkJCSAgICAgIHNlbnNlWzNdKTsKKwkJfQorCX0gZWxzZSB7CisJCURCRl9ERVZfRVZFTlQoREJGX0VNRVJHLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAiU09SUlkgLSBOTyBWQUxJRCBTRU5TRSBBVkFJTEFCTEVcbiIpOworCX0KK30KKwogLyoKICAqIFByaW50IHNlbnNlIGRhdGEgYW5kIHJlbGF0ZWQgY2hhbm5lbCBwcm9ncmFtLgogICogUGFydHMgYXJlIHByaW50ZWQgYmVjYXVzZSBwcmludGsgYnVmZmVyIGlzIG9ubHkgMTAyNCBieXRlcy4KICAqLwotc3RhdGljIHZvaWQgZGFzZF9lY2tkX2R1bXBfc2Vuc2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCitzdGF0aWMgdm9pZCBkYXNkX2Vja2RfZHVtcF9zZW5zZV9jY3coc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCiAJCQkJIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwgc3RydWN0IGlyYiAqaXJiKQogewogCWNoYXIgKnBhZ2U7CkBAIC0yMjU1LDggKzI5OTYsOCBAQAogCiAJcGFnZSA9IChjaGFyICopIGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAlpZiAocGFnZSA9PSBOVUxMKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIgJXMiLAotCQkJICAgICJObyBtZW1vcnkgdG8gZHVtcCBzZW5zZSBkYXRhIik7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJObyBtZW1vcnkgdG8gZHVtcCBzZW5zZSBkYXRhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBkdW1wIHRoZSBzZW5zZSBkYXRhICovCkBAIC0yMjY1LDcgKzMwMDYsNyBAQAogCQkgICAgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCiAJCSAgICAgICAiIGluIHJlcTogJXAgQ1M6IDB4JTAyWCBEUzogMHglMDJYXG4iLCByZXEsCi0JCSAgICAgICBpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmRzdGF0KTsKKwkJICAgICAgIHNjc3dfY3N0YXQoJmlyYi0+c2NzdyksIHNjc3dfZHN0YXQoJmlyYi0+c2NzdykpOwogCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKIAkJICAgICAgICIgZGV2aWNlICVzOiBGYWlsaW5nIENDVzogJXBcbiIsCiAJCSAgICAgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLApAQCAtMjM0MSw2ICszMDgyLDE0NyBAQAogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7CiB9CiAKKworLyoKKyAqIFByaW50IHNlbnNlIGRhdGEgZnJvbSBhIHRjdy4KKyAqLworc3RhdGljIHZvaWQgZGFzZF9lY2tkX2R1bXBfc2Vuc2VfdGN3KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorCQkJCSBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpyZXEsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwljaGFyICpwYWdlOworCWludCBsZW4sIHNsLCBzY3QsIHJlc2lkdWFsOworCisJc3RydWN0IHRzYiAqdHNiOworCXU4ICpzZW5zZTsKKworCisJcGFnZSA9IChjaGFyICopIGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAocGFnZSA9PSBOVUxMKSB7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiAlcyIsCisJCQkgICAgIk5vIG1lbW9yeSB0byBkdW1wIHNlbnNlIGRhdGEiKTsKKwkJcmV0dXJuOworCX0KKwkvKiBkdW1wIHRoZSBzZW5zZSBkYXRhICovCisJbGVuID0gc3ByaW50ZihwYWdlLCAgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkgICAgICAiIEkvTyBzdGF0dXMgcmVwb3J0IGZvciBkZXZpY2UgJXM6XG4iLAorCQkgICAgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCSAgICAgICAiIGluIHJlcTogJXAgQ1M6IDB4JTAyWCBEUzogMHglMDJYICIKKwkJICAgICAgICJmY3hzOiAweCUwMlggc2NoeHM6IDB4JTAyWFxuIiwgcmVxLAorCQkgICAgICAgc2Nzd19jc3RhdCgmaXJiLT5zY3N3KSwgc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSwKKwkJICAgICAgIGlyYi0+c2Nzdy50bS5mY3hzLCBpcmItPnNjc3cudG0uc2NoeHMpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJICAgICAgICIgZGV2aWNlICVzOiBGYWlsaW5nIFRDVzogJXBcbiIsCisJCSAgICAgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAorCQkgICAgICAgKHZvaWQgKikgKGFkZHJfdCkgaXJiLT5zY3N3LnRtLnRjdyk7CisKKwl0c2IgPSBOVUxMOworCXNlbnNlID0gTlVMTDsKKwlpZiAoaXJiLT5zY3N3LnRtLnRjdykKKwkJdHNiID0gdGN3X2dldF90c2IoCisJCQkoc3RydWN0IHRjdyAqKSh1bnNpZ25lZCBsb25nKWlyYi0+c2Nzdy50bS50Y3cpOworCisJaWYgKHRzYiAmJiAoaXJiLT5zY3N3LnRtLmZjeHMgPT0gMHgwMSkpIHsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT5sZW5ndGggJWRcbiIsIHRzYi0+bGVuZ3RoKTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT5mbGFncyAleFxuIiwgdHNiLT5mbGFncyk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+ZGN3X29mZnNldCAlZFxuIiwgdHNiLT5kY3dfb2Zmc2V0KTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT5jb3VudCAlZFxuIiwgdHNiLT5jb3VudCk7CisJCXJlc2lkdWFsID0gdHNiLT5jb3VudCAtIDI4OworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiByZXNpZHVhbCAlZFxuIiwgcmVzaWR1YWwpOworCisJCXN3aXRjaCAodHNiLT5mbGFncyAmIDB4MDcpIHsKKwkJY2FzZSAxOgkvKiB0c2FfaW9zdGF0ICovCisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5pb3N0YXQuZGV2X3RpbWUgJWRcbiIsCisJCQkJICAgICAgIHRzYi0+dHNhLmlvc3RhdC5kZXZfdGltZSk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5pb3N0YXQuZGVmX3RpbWUgJWRcbiIsCisJCQkJICAgICAgIHRzYi0+dHNhLmlvc3RhdC5kZWZfdGltZSk7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5pb3N0YXQucXVldWVfdGltZSAlZFxuIiwKKwkJCQkgICAgICAgdHNiLT50c2EuaW9zdGF0LnF1ZXVlX3RpbWUpOworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJICAgICAgICIgdHNiLT50c2EuaW9zdGF0LmRldl9idXN5X3RpbWUgJWRcbiIsCisJCQkJICAgICAgIHRzYi0+dHNhLmlvc3RhdC5kZXZfYnVzeV90aW1lKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmlvc3RhdC5kZXZfYWN0X3RpbWUgJWRcbiIsCisJCQkJICAgICAgIHRzYi0+dHNhLmlvc3RhdC5kZXZfYWN0X3RpbWUpOworCQkJc2Vuc2UgPSB0c2ItPnRzYS5pb3N0YXQuc2Vuc2U7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvKiB0c19kZHBjICovCisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiB0c2ItPnRzYS5kZHBjLnJjICVkXG4iLCB0c2ItPnRzYS5kZHBjLnJjKTsKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSAgICAgICAiIHRzYi0+dHNhLmRkcGMucmNxOiAgIik7CisJCQlmb3IgKHNsID0gMDsgc2wgPCAxNjsgc2wrKykgeworCQkJCWZvciAoc2N0ID0gMDsgc2N0IDwgODsgc2N0KyspIHsKKwkJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiAlMDJ4IiwKKwkJCQkJCSAgICAgICB0c2ItPnRzYS5kZHBjLnJjcVtzbF0pOworCQkJCX0KKwkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKKwkJCX0KKwkJCXNlbnNlID0gdHNiLT50c2EuZGRwYy5zZW5zZTsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qIHRzYV9pbnRyZyAqLworCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCSAgICAgICIgdHNiLT50c2EuaW50cmcuOiBub3Qgc3VwcG9ydGV0IHlldCBcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2Vuc2UpIHsKKwkJCWZvciAoc2wgPSAwOyBzbCA8IDQ7IHNsKyspIHsKKwkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAorCQkJCQkgICAgICAgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCQkgICAgICAgIiBTZW5zZShoZXgpICUyZC0lMmQ6IiwKKwkJCQkJICAgICAgICg4ICogc2wpLCAoKDggKiBzbCkgKyA3KSk7CisJCQkJZm9yIChzY3QgPSAwOyBzY3QgPCA4OyBzY3QrKykgeworCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiICUwMngiLAorCQkJCQkJICAgICAgIHNlbnNlWzggKiBzbCArIHNjdF0pOworCQkJCX0KKwkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKKwkJCX0KKworCQkJaWYgKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApIHsKKwkJCQkvKiAyNCBCeXRlIFNlbnNlIERhdGEgKi8KKwkJCQlzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkJIiAyNCBCeXRlOiAleCBNU0cgJXgsICIKKwkJCQkJIiVzIE1TR2IgdG8gU1lTT1BcbiIsCisJCQkJCXNlbnNlWzddID4+IDQsIHNlbnNlWzddICYgMHgwZiwKKwkJCQkJc2Vuc2VbMV0gJiAweDEwID8gIiIgOiAibm8iKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogMzIgQnl0ZSBTZW5zZSBEYXRhICovCisJCQkJc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJCSIgMzIgQnl0ZTogRm9ybWF0OiAleCAiCisJCQkJCSJFeGNlcHRpb24gY2xhc3MgJXhcbiIsCisJCQkJCXNlbnNlWzZdICYgMHgwZiwgc2Vuc2VbMjJdID4+IDQpOworCQkJfQorCQl9IGVsc2UgeworCQkJc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJIiBTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CisJCX0KKwl9IGVsc2UgeworCQlzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCSIgU09SUlkgLSBOTyBUU0IgREFUQSBBVkFJTEFCTEVcbiIpOworCX0KKwlwcmludGsoIiVzIiwgcGFnZSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKK30KKworc3RhdGljIHZvaWQgZGFzZF9lY2tkX2R1bXBfc2Vuc2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJIHN0cnVjdCBkYXNkX2Njd19yZXEgKnJlcSwgc3RydWN0IGlyYiAqaXJiKQoreworCWlmIChyZXEgJiYgc2Nzd19pc190bSgmcmVxLT5pcmIuc2NzdykpCisJCWRhc2RfZWNrZF9kdW1wX3NlbnNlX3RjdyhkZXZpY2UsIHJlcSwgaXJiKTsKKwllbHNlCisJCWRhc2RfZWNrZF9kdW1wX3NlbnNlX2NjdyhkZXZpY2UsIHJlcSwgaXJiKTsKK30KKworCiAvKgogICogbWF4X2Jsb2NrcyBpcyBkZXBlbmRlbnQgb24gdGhlIGFtb3VudCBvZiBzdG9yYWdlIHRoYXQgaXMgYXZhaWxhYmxlCiAgKiBpbiB0aGUgc3RhdGljIGlvIGJ1ZmZlciBmb3IgZWFjaCBkZXZpY2UuIEN1cnJlbnRseSBlYWNoIGRldmljZSBoYXMKQEAgLTIzNzUsNiArMzI1Nyw3IEBACiAJLmJ1aWxkX2NwID0gZGFzZF9lY2tkX2J1aWxkX2FsaWFzX2NwLAogCS5mcmVlX2NwID0gZGFzZF9lY2tkX2ZyZWVfYWxpYXNfY3AsCiAJLmR1bXBfc2Vuc2UgPSBkYXNkX2Vja2RfZHVtcF9zZW5zZSwKKwkuZHVtcF9zZW5zZV9kYmYgPSBkYXNkX2Vja2RfZHVtcF9zZW5zZV9kYmYsCiAJLmZpbGxfaW5mbyA9IGRhc2RfZWNrZF9maWxsX2luZm8sCiAJLmlvY3RsID0gZGFzZF9lY2tkX2lvY3RsLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAppbmRleCAyNDc2Zjg3Li5hZDQ1YmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCkBAIC0zOCw4ICszOCwxMSBAQAogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFTEVBU0UJCSAweDk0CiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUkVBRF9DS0RfTVQJIDB4OWUKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19XUklURV9DS0RfTVQJIDB4OWQKKyNkZWZpbmUgREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBCSAweEE1CisjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBCSAweEE2CiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUkVTRVJWRQkJIDB4QjQKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19QRlgJCSAweEU3CisjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUEZYX1JFQUQJCSAweEVBCiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUlNDSwkJIDB4RjkKIAogLyoKQEAgLTQ4LDYgKzUxLDExIEBACiAjZGVmaW5lIFBTRl9PUkRFUl9QUlNTRCAweDE4CiAjZGVmaW5lIFBTRl9PUkRFUl9TU0MJMHgxRAogCisvKgorICogU2l6ZSB0aGF0IGlzIHJlcG9ydGV0IGZvciBsYXJnZSB2b2x1bWVzIGluIHRoZSBvbGQgMTYtYml0IG5vX2N5bCBmaWVsZAorICovCisjZGVmaW5lIExWX0NPTVBBVF9DWUwgMHhGRkZFCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0VDVElPTjogVHlwZSBEZWZpbml0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMTgsNyArMTI2LDkgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgZXBfc3lzX3RpbWU7IC8qIEV4dCBQYXJhbWV0ZXIgLSBTeXN0ZW0gVGltZSBTdGFtcCAqLwogCV9fdTggZXBfZm9ybWF0OyAgICAgICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIGZvcm1hdCBieXRlICAgICAgICovCiAJX191OCBlcF9wcmlvOyAgICAgICAgICAvKiBFeHRlbmRlZCBQYXJhbWV0ZXIgcHJpb3JpdHkgSS9PIGJ5dGUgKi8KLQlfX3U4IGVwX3Jlc2VydmVkWzZdOyAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBSZXNlcnZlZCAgICAgICAgICAqLworCV9fdTggZXBfcmVzZXJ2ZWQxOyAgICAgLyogRXh0ZW5kZWQgUGFyYW1ldGVyIFJlc2VydmVkCSAgICAgICAqLworCV9fdTggZXBfcmVjX3Blcl90cmFjazsgLyogTnVtYmVyIG9mIHJlY29yZHMgb24gYSB0cmFjawkgICAgICAgKi8KKwlfX3U4IGVwX3Jlc2VydmVkWzRdOyAgIC8qIEV4dGVuZGVkIFBhcmFtZXRlciBSZXNlcnZlZAkgICAgICAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgTE9fZWNrZF9kYXRhIHsKQEAgLTEzOSwxMSArMTQ5LDM3IEBACiAJX191MTYgbGVuZ3RoOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBMUkVfZWNrZF9kYXRhIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIG9yaWVudGF0aW9uOjI7CisJCXVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOjY7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgb3BlcmF0aW9uOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgbGVuZ3RoX3ZhbGlkOjE7CisJCXVuc2lnbmVkIGNoYXIgbGVuZ3RoX3Njb3BlOjE7CisJCXVuc2lnbmVkIGNoYXIgaW1iZWRkZWRfY2N3X3ZhbGlkOjE7CisJCXVuc2lnbmVkIGNoYXIgY2hlY2tfYnl0ZXM6MjsKKwkJdW5zaWduZWQgY2hhciBpbWJlZGRlZF9jb3VudF92YWxpZDoxOworCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkOjE7CisJCXVuc2lnbmVkIGNoYXIgcmVhZF9jb3VudF9zdWZmaXg6MTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdXhpbGlhcnk7CisJX191OCBpbWJlZGRlZF9jY3c7CisJX191OCBjb3VudDsKKwlzdHJ1Y3QgY2hfdCBzZWVrX2FkZHI7CisJc3RydWN0IGNocl90IHNlYXJjaF9hcmc7CisJX191OCBzZWN0b3I7CisJX191MTYgbGVuZ3RoOworCV9fdTggaW1iZWRkZWRfY291bnQ7CisJX191OCBleHRlbmRlZF9vcGVyYXRpb247CisJX191MTYgZXh0ZW5kZWRfcGFyYW1ldGVyX2xlbmd0aDsKKwlfX3U4IGV4dGVuZGVkX3BhcmFtZXRlclswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKiBQcmVmaXggZGF0YSBmb3IgZm9ybWF0IDB4MDAgYW5kIDB4MDEgKi8KIHN0cnVjdCBQRlhfZWNrZF9kYXRhIHsKIAl1bnNpZ25lZCBjaGFyIGZvcm1hdDsKIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBjaGFyIGRlZmluZV9leHRlbmQ6MTsKKwkJdW5zaWduZWQgY2hhciBkZWZpbmVfZXh0ZW50OjE7CiAJCXVuc2lnbmVkIGNoYXIgdGltZV9zdGFtcDoxOwogCQl1bnNpZ25lZCBjaGFyIHZlcmlmeV9iYXNlOjE7CiAJCXVuc2lnbmVkIGNoYXIgaHlwZXJfcGF2OjE7CkBAIC0xNTMsOSArMTg5LDggQEAKIAlfX3U4IGF1eDsKIAlfX3U4IGJhc2VfbHNzOwogCV9fdTggcmVzZXJ2ZWRbN107Ci0Jc3RydWN0IERFX2Vja2RfZGF0YSBkZWZpbmVfZXh0ZW5kOwotCXN0cnVjdCBMT19lY2tkX2RhdGEgbG9jYXRlX3JlY29yZDsKLQlfX3U4IExPX2V4dGVuZGVkX2RhdGFbNF07CisJc3RydWN0IERFX2Vja2RfZGF0YSBkZWZpbmVfZXh0ZW50OworCXN0cnVjdCBMUkVfZWNrZF9kYXRhIGxvY2F0ZV9yZWNvcmQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGRhc2RfZWNrZF9jaGFyYWN0ZXJpc3RpY3MgewpAQCAtMjI4LDcgKzI2Myw4IEBACiAJX191OCBmYWN0b3I3OwogCV9fdTggZmFjdG9yODsKIAlfX3U4IHJlc2VydmVkMlszXTsKLQlfX3U4IHJlc2VydmVkM1sxMF07CisJX191OCByZXNlcnZlZDNbNl07CisJX191MzIgbG9uZ19ub19jeWw7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogZWxlbWVudHMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSAqLwpAQCAtNDA2LDYgKzQ0Miw3IEBACiAJaW50IHVzZXNfY2RsOwogCXN0cnVjdCBhdHRyaWJfZGF0YV90IGF0dHJpYjsJLyogZS5nLiBjYWNoZSBvcGVyYXRpb25zICovCiAJc3RydWN0IGRhc2RfcnNzZF9mZWF0dXJlcyBmZWF0dXJlczsKKwl1MzIgcmVhbF9jeWw7CiAKIAkvKiBhbGlhcyBtYW5hZ2VtbmV0ICovCiAJc3RydWN0IGRhc2RfdWlkIHVpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKaW5kZXggZjhlMDVjZS4uYzI0YzhjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKQEAgLTYsNiArNiw4IEBACiAgKiAgQXV0aG9yKHMpOiBTdGVmYW4gV2Vpbmh1YmVyIDx3ZWluQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjk3LDExICsyOTksMTIgQEAKIAlzdHJ1Y3QgZGFzZF9lZXJfaGVhZGVyIGhlYWRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlZXJidWZmZXIgKmVlcmI7CisJY2hhciAqc2Vuc2U7CiAKIAkvKiBnbyB0aHJvdWdoIGNxciBjaGFpbiBhbmQgY291bnQgdGhlIHZhbGlkIHNlbnNlIGRhdGEgc2V0cyAqLwogCWRhdGFfc2l6ZSA9IDA7CiAJZm9yICh0ZW1wX2NxciA9IGNxcjsgdGVtcF9jcXI7IHRlbXBfY3FyID0gdGVtcF9jcXItPnJlZmVycykKLQkJaWYgKHRlbXBfY3FyLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMpCisJCWlmIChkYXNkX2dldF9zZW5zZSgmdGVtcF9jcXItPmlyYikpCiAJCQlkYXRhX3NpemUgKz0gMzI7CiAKIAloZWFkZXIudG90YWxfc2l6ZSA9IHNpemVvZihoZWFkZXIpICsgZGF0YV9zaXplICsgNDsgLyogIkVPUiIgKi8KQEAgLTMxNiw5ICszMTksMTEgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVlcmIsICZidWZmZXJsaXN0LCBsaXN0KSB7CiAJCWRhc2RfZWVyX3N0YXJ0X3JlY29yZChlZXJiLCBoZWFkZXIudG90YWxfc2l6ZSk7CiAJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCAoY2hhciAqKSAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7Ci0JCWZvciAodGVtcF9jcXIgPSBjcXI7IHRlbXBfY3FyOyB0ZW1wX2NxciA9IHRlbXBfY3FyLT5yZWZlcnMpCi0JCQlpZiAodGVtcF9jcXItPmlyYi5lc3cuZXN3MC5lcncuY29ucykKLQkJCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgY3FyLT5pcmIuZWN3LCAzMik7CisJCWZvciAodGVtcF9jcXIgPSBjcXI7IHRlbXBfY3FyOyB0ZW1wX2NxciA9IHRlbXBfY3FyLT5yZWZlcnMpIHsKKwkJCXNlbnNlID0gZGFzZF9nZXRfc2Vuc2UoJnRlbXBfY3FyLT5pcmIpOworCQkJaWYgKHNlbnNlKQorCQkJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCBzZW5zZSwgMzIpOworCQl9CiAJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCAiRU9SIiwgNCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKQEAgLTQ1MSw2ICs0NTYsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjY3cxICpjY3c7CiAKIAlpZiAoZGV2aWNlLT5lZXJfY3FyKQogCQlyZXR1cm4gMDsKQEAgLTQ2OCwxMCArNDc0LDExIEBACiAJY3FyLT5leHBpcmVzID0gMTAgKiBIWjsKIAljbGVhcl9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwogCi0JY3FyLT5jcGFkZHItPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19TTlNTOwotCWNxci0+Y3BhZGRyLT5jb3VudCA9IFNOU1NfREFUQV9TSVpFOwotCWNxci0+Y3BhZGRyLT5mbGFncyA9IDA7Ci0JY3FyLT5jcGFkZHItPmNkYSA9IChfX3UzMikoYWRkcl90KSBjcXItPmRhdGE7CisJY2N3ID0gY3FyLT5jcGFkZHI7CisJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU05TUzsKKwljY3ctPmNvdW50ID0gU05TU19EQVRBX1NJWkU7CisJY2N3LT5mbGFncyA9IDA7CisJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOwogCiAJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwogCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwpAQCAtNTM0LDcgKzU0MSw3IEBACiAJaWYgKGVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50IDwgMSB8fAogCSAgICBlZXJiLT5idWZmZXJfcGFnZV9jb3VudCA+IElOVF9NQVggLyBQQUdFX1NJWkUpIHsKIAkJa2ZyZWUoZWVyYik7Ci0JCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiY2FuJ3Qgb3BlbiBkZXZpY2Ugc2luY2UgbW9kdWxlICIKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiY2FuJ3Qgb3BlbiBkZXZpY2Ugc2luY2UgbW9kdWxlICIKIAkJCSJwYXJhbWV0ZXIgZWVyX3BhZ2VzIGlzIHNtYWxsZXIgdGhhbiAxIG9yIgogCQkJIiBiaWdnZXIgdGhhbiAlZCIsIChpbnQpKElOVF9NQVggLyBQQUdFX1NJWkUpKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwpAQCAtNjg3LDcgKzY5NCw3IEBACiAJaWYgKHJjKSB7CiAJCWtmcmVlKGRhc2RfZWVyX2Rldik7CiAJCWRhc2RfZWVyX2RldiA9IE5VTEw7Ci0JCU1FU1NBR0UoS0VSTl9FUlIsICIlcyIsICJkYXNkX2Vlcl9pbml0IGNvdWxkIG5vdCAiCisJCURCRl9FVkVOVChEQkZfRVJSLCAiJXMiLCAiZGFzZF9lZXJfaW5pdCBjb3VsZCBub3QgIgogCQkgICAgICAgInJlZ2lzdGVyIG1pc2MgZGV2aWNlIik7CiAJCXJldHVybiByYzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCmluZGV4IDhmMTAwMDAuLmQ5NzBjZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCkBAIC05LDYgKzksOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKQEAgLTkxLDE0ICs5MywxNCBAQAogCiAgICAgICAgIC8qIGp1c3QgcmV0cnkgLSB0aGVyZSBpcyBub3RoaW5nIHRvIHNhdmUgLi4uIEkgZ290IG5vIHNlbnNlIGRhdGEuLi4uICovCiAgICAgICAgIGlmIChjcXItPnJldHJpZXMgPiAwKSB7Ci0JCURFVl9NRVNTQUdFIChLRVJOX0RFQlVHLCBkZXZpY2UsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZhdWx0IEVSUCBjYWxsZWQgKCVpIHJldHJpZXMgbGVmdCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcXItPnJldHJpZXMpOwogCQljcXItPmxwbSAgICA9IExQTV9BTllQQVRIOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERVZfTUVTU0FHRSAoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgICJkZWZhdWx0IEVSUCBjYWxsZWQgKE5PIHJldHJ5IGxlZnQpIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJImRlZmF1bHQgRVJQIGhhcyBydW4gb3V0IG9mIHJldHJpZXMgYW5kIGZhaWxlZFxuIik7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKICAgICAgICAgfQpAQCAtMTYyLDggKzE2NCwyMSBAQAogCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2UoZGV2aWNlLCBjcXIsIGlyYik7CiB9CiAKK3ZvaWQKK2Rhc2RfbG9nX3NlbnNlX2RiZihzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKworCWRldmljZSA9IGNxci0+c3RhcnRkZXY7CisJLyogZHVtcCBzZW5zZSBkYXRhIHRvIHMzOTAgZGVidWdmZWF0dXJlKi8KKwlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lICYmIGRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZV9kYmYpCisJCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBjcXIsIGlyYiwgImxvZyIpOworfQorRVhQT1JUX1NZTUJPTChkYXNkX2xvZ19zZW5zZV9kYmYpOworCiBFWFBPUlRfU1lNQk9MKGRhc2RfZGVmYXVsdF9lcnBfYWN0aW9uKTsKIEVYUE9SVF9TWU1CT0woZGFzZF9kZWZhdWx0X2VycF9wb3N0YWN0aW9uKTsKIEVYUE9SVF9TWU1CT0woZGFzZF9hbGxvY19lcnBfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKGRhc2RfZnJlZV9lcnBfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKGRhc2RfbG9nX3NlbnNlKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCBmMWQxNzYwLi5hM2ViNmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtNiw2ICs2LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgpAQCAtMTI4LDE3ICsxMzAsMTggQEAKIAkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2ZiYV9wcml2YXRlKSwKIAkJCQkgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAkJaWYgKHByaXZhdGUgPT0gTlVMTCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHByaXZhdGUgIgotCQkJCSAgICAiZGF0YSIpOworCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSAiQWxsb2NhdGluZyBtZW1vcnkgZm9yIHByaXZhdGUgREFTRCAiCisJCQkJICJkYXRhIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlkZXZpY2UtPnByaXZhdGUgPSAodm9pZCAqKSBwcml2YXRlOwogCX0KIAlibG9jayA9IGRhc2RfYWxsb2NfYmxvY2soKTsKIAlpZiAoSVNfRVJSKGJsb2NrKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiY291bGQgbm90IGFsbG9jYXRlIGRhc2QgYmxvY2sgc3RydWN0dXJlIik7CisJCURCRl9FVkVOVChEQkZfV0FSTklORywgImNvdWxkIG5vdCBhbGxvY2F0ZSBkYXNkIGJsb2NrICIKKwkJCSAgInN0cnVjdHVyZSBmb3IgZGV2aWNlOiAlcyIsCisJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlkZXZpY2UtPnByaXZhdGUgPSBOVUxMOwogCQlrZnJlZShwcml2YXRlKTsKIAkJcmV0dXJuIFBUUl9FUlIoYmxvY2spOwpAQCAtMTUwLDkgKzE1Myw5IEBACiAJcmRjX2RhdGEgPSAodm9pZCAqKSAmKHByaXZhdGUtPnJkY19kYXRhKTsKIAlyYyA9IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhkZXZpY2UsICJGQkEgIiwgJnJkY19kYXRhLCAzMik7CiAJaWYgKHJjKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJICAgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgcmV0dXJuZWQgZXJyb3IgJWQiLAotCQkJICAgIHJjKTsKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkICIKKwkJCSAgImVycm9yICVkIGZvciBkZXZpY2U6ICVzIiwKKwkJCSAgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlkZXZpY2UtPmJsb2NrID0gTlVMTDsKIAkJZGFzZF9mcmVlX2Jsb2NrKGJsb2NrKTsKIAkJZGV2aWNlLT5wcml2YXRlID0gTlVMTDsKQEAgLTE2MCwxNSArMTYzLDE2IEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJICAgICIlMDRYLyUwMlgoQ1U6JTA0WC8lMDJYKSAlZE1CIGF0KCVkIEIvYmxrKSIsCi0JCSAgICBjZGV2LT5pZC5kZXZfdHlwZSwKLQkJICAgIGNkZXYtPmlkLmRldl9tb2RlbCwKLQkJICAgIGNkZXYtPmlkLmN1X3R5cGUsCi0JCSAgICBjZGV2LT5pZC5jdV9tb2RlbCwKLQkJICAgICgocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX2Jkc2EgKgotCQkgICAgICAocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUgPj4gOSkpID4+IDExKSwKLQkJICAgIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCisJCSAiTmV3IEZCQSBEQVNEICUwNFgvJTAyWCAoQ1UgJTA0WC8lMDJYKSB3aXRoICVkIE1CICIKKwkJICJhbmQgJWQgQi9ibGtcbiIsCisJCSBjZGV2LT5pZC5kZXZfdHlwZSwKKwkJIGNkZXYtPmlkLmRldl9tb2RlbCwKKwkJIGNkZXYtPmlkLmN1X3R5cGUsCisJCSBjZGV2LT5pZC5jdV9tb2RlbCwKKwkJICgocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX2Jkc2EgKgorCQkgICAocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUgPj4gOSkpID4+IDExKSwKKwkJIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgwLDcgKzE4NCw3IEBACiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSAqKSBibG9jay0+YmFzZS0+cHJpdmF0ZTsKIAlyYyA9IGRhc2RfY2hlY2tfYmxvY2tzaXplKHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKIAlpZiAocmMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBibG9jay0+YmFzZSwgInVua25vd24gYmxvY2tzaXplICVkIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgYmxvY2stPmJhc2UsICJ1bmtub3duIGJsb2Nrc2l6ZSAlZCIsCiAJCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUpOwogCQlyZXR1cm4gcmM7CiAJfQpAQCAtMjE1LDcgKzIxOSw3IEBACiAJaWYgKGNxci0+ZnVuY3Rpb24gPT0gZGFzZF9kZWZhdWx0X2VycF9hY3Rpb24pCiAJCXJldHVybiBkYXNkX2RlZmF1bHRfZXJwX3Bvc3RhY3Rpb247CiAKLQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGNxci0+c3RhcnRkZXYsICJ1bmtub3duIEVSUCBhY3Rpb24gJXAiLAorCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGNxci0+c3RhcnRkZXYsICJ1bmtub3duIEVSUCBhY3Rpb24gJXAiLAogCQkgICAgY3FyLT5mdW5jdGlvbik7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMzMsOSArMjM3LDkgQEAKIAl9CiAKIAkvKiBjaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cyAqLwotCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCSAgICAidW5zb2xpY2l0ZWQgaW50ZXJydXB0IHJlY2VpdmVkIik7Ci0JZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiLCAidW5zb2xpY2l0ZWQiKTsKIAlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCXJldHVybjsKIH07CkBAIC00MzcsNiArNDQxLDI1IEBACiB9CiAKIHN0YXRpYyB2b2lkCitkYXNkX2ZiYV9kdW1wX3NlbnNlX2RiZihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqcmVxLAorCQkJIHN0cnVjdCBpcmIgKmlyYiwgY2hhciAqcmVhc29uKQoreworCWludCBzbDsKKwlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykgeworCQlmb3IgKHNsID0gMDsgc2wgPCA0OyBzbCsrKSB7CisJCQlEQkZfREVWX0VWRU5UKERCRl9FTUVSRywgZGV2aWNlLAorCQkJCSAgICAgICIlczogJTA4eCAlMDh4ICUwOHggJTA4eCIsCisJCQkJICAgICAgcmVhc29uLCBpcmItPmVjd1s4ICogMF0sIGlyYi0+ZWN3WzggKiAxXSwKKwkJCQkgICAgICBpcmItPmVjd1s4ICogMl0sIGlyYi0+ZWN3WzggKiAzXSk7CisJCX0KKwl9IGVsc2UgeworCQlEQkZfREVWX0VWRU5UKERCRl9FTUVSRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgIlNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKIGRhc2RfZmJhX2R1bXBfc2Vuc2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkYXNkX2Njd19yZXEgKiByZXEsCiAJCSAgICBzdHJ1Y3QgaXJiICppcmIpCiB7CkBAIC00NDYsNyArNDY5LDcgQEAKIAogCXBhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKHBhZ2UgPT0gTlVMTCkgewotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiICVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJObyBtZW1vcnkgdG8gZHVtcCBzZW5zZSBkYXRhIik7CiAJCXJldHVybjsKIAl9CkBAIC00NzYsOCArNDk5LDcgQEAKIAkgICAgICAgIGxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKIAkJCSAgICAgICAiIFNPUlJZIC0gTk8gVkFMSUQgU0VOU0UgQVZBSUxBQkxFXG4iKTsKIAl9Ci0JTUVTU0FHRV9MT0coS0VSTl9FUlIsICIlcyIsCi0JCSAgICBwYWdlICsgc2l6ZW9mKEtFUk5fRVJSIFBSSU5US19IRUFERVIpKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzIiwgcGFnZSk7CiAKIAkvKiBkdW1wIHRoZSBDaGFubmVsIFByb2dyYW0gKi8KIAkvKiBwcmludCBmaXJzdCBDQ1dzIChtYXhpbXVtIDgpICovCkBAIC00OTgsOCArNTIwLDcgQEAKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJCWFjdCsrOwogCX0KLQlNRVNTQUdFX0xPRyhLRVJOX0VSUiwgIiVzIiwKLQkJICAgIHBhZ2UgKyBzaXplb2YoS0VSTl9FUlIgUFJJTlRLX0hFQURFUikpOworCXByaW50ayhLRVJOX0VSUiAiJXMiLCBwYWdlKTsKIAogCiAJLyogcHJpbnQgZmFpbGluZyBDQ1cgYXJlYSAqLwpAQCAtNTQwLDggKzU2MSw3IEBACiAJCWFjdCsrOwogCX0KIAlpZiAobGVuID4gMCkKLQkJTUVTU0FHRV9MT0coS0VSTl9FUlIsICIlcyIsCi0JCQkgICAgcGFnZSArIHNpemVvZihLRVJOX0VSUiBQUklOVEtfSEVBREVSKSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXMiLCBwYWdlKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwogfQogCkBAIC01NzYsNiArNTk2LDcgQEAKIAkuYnVpbGRfY3AgPSBkYXNkX2ZiYV9idWlsZF9jcCwKIAkuZnJlZV9jcCA9IGRhc2RfZmJhX2ZyZWVfY3AsCiAJLmR1bXBfc2Vuc2UgPSBkYXNkX2ZiYV9kdW1wX3NlbnNlLAorCS5kdW1wX3NlbnNlX2RiZiA9IGRhc2RfZmJhX2R1bXBfc2Vuc2VfZGJmLAogCS5maWxsX2luZm8gPSBkYXNkX2ZiYV9maWxsX2luZm8sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwppbmRleCBlOTlkNTY2Li5kMzE5ODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKQEAgLTExLDYgKzExLDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KQEAgLTE2Myw5ICsxNjUsOCBAQAogCS8qIFJlZ2lzdGVyIHRvIHN0YXRpYyBkYXNkIG1ham9yIDk0ICovCiAJcmMgPSByZWdpc3Rlcl9ibGtkZXYoREFTRF9NQUpPUiwgImRhc2QiKTsKIAlpZiAocmMgIT0gMCkgewotCQlNRVNTQUdFKEtFUk5fV0FSTklORywKLQkJCSJDb3VsZG4ndCByZWdpc3RlciBzdWNjZXNzZnVsbHkgdG8gIgotCQkJIm1ham9yIG5vICVkIiwgREFTRF9NQUpPUik7CisJCXByX3dhcm5pbmcoIlJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UgZHJpdmVyIHdpdGggbWFqb3IgbnVtYmVyICIKKwkJCSAgICIlZCBmYWlsZWRcbiIsIERBU0RfTUFKT1IpOwogCQlyZXR1cm4gcmM7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCA0YTM5MDg0Li5jMWU0ODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMTEyLDYgKzExMiw5IEBACiAJCQkJZF9kYXRhKTsgXAogfSB3aGlsZSgwKQogCisvKiBsaW1pdCBzaXplIGZvciBhbiBlcnJvcnN0cmluZyAqLworI2RlZmluZSBFUlJPUkxFTkdUSCAzMAorCiAvKiBkZWZpbml0aW9uIG9mIGRiZiBkZWJ1ZyBsZXZlbHMgKi8KICNkZWZpbmUJREJGX0VNRVJHCTAJLyogc3lzdGVtIGlzIHVudXNhYmxlCQkJKi8KICNkZWZpbmUJREJGX0FMRVJUCTEJLyogYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkJKi8KQEAgLTE1Nyw3ICsxNjAsOCBAQAogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsJLyogdGhlIG9yaWdpbmF0aW5nIGJsb2NrIGRldmljZSAqLwogCXN0cnVjdCBkYXNkX2RldmljZSAqbWVtZGV2OwkvKiB0aGUgZGV2aWNlIHVzZWQgdG8gYWxsb2NhdGUgdGhpcyAqLwogCXN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXY7CS8qIGRldmljZSB0aGUgcmVxdWVzdCBpcyBzdGFydGVkIG9uICovCi0Jc3RydWN0IGNjdzEgKmNwYWRkcjsJCS8qIGFkZHJlc3Mgb2YgY2hhbm5lbCBwcm9ncmFtICovCisJdm9pZCAqY3BhZGRyOwkJCS8qIGFkZHJlc3Mgb2YgY2N3IG9yIHRjdyAqLworCXVuc2lnbmVkIGNoYXIgY3Btb2RlOwkJLyogMCA9IGNtZCBtb2RlLCAxID0gaXRjdyAqLwogCWNoYXIgc3RhdHVzOwkJCS8qIHN0YXR1cyBvZiB0aGlzIHJlcXVlc3QgKi8KIAlzaG9ydCByZXRyaWVzOwkJCS8qIEEgcmV0cnkgY291bnRlciAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgICAJLyogZmxhZ3Mgb2YgdGhpcyByZXF1ZXN0ICovCkBAIC0yODAsNiArMjg0LDggQEAKIAlkYXNkX2VycF9mbl90KCplcnBfcG9zdGFjdGlvbikgKHN0cnVjdCBkYXNkX2Njd19yZXEgKik7CiAJdm9pZCAoKmR1bXBfc2Vuc2UpIChzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgc3RydWN0IGRhc2RfY2N3X3JlcSAqLAogCQkJICAgIHN0cnVjdCBpcmIgKik7CisJdm9pZCAoKmR1bXBfc2Vuc2VfZGJmKSAoc3RydWN0IGRhc2RfZGV2aWNlICosIHN0cnVjdCBkYXNkX2Njd19yZXEgKiwKKwkJCSAgICBzdHJ1Y3QgaXJiICosIGNoYXIgKik7CiAKIAl2b2lkICgqaGFuZGxlX3Vuc29saWNpdGVkX2ludGVycnVwdCkgKHN0cnVjdCBkYXNkX2RldmljZSAqLAogCQkJCQkgICAgICBzdHJ1Y3QgaXJiICopOwpAQCAtMzc4LDcgKzM4NCw3IEBACiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAlhdG9taWNfdCBvcGVuX2NvdW50OwogCi0JdW5zaWduZWQgbG9uZyBibG9ja3M7CSAgIC8qIHNpemUgb2Ygdm9sdW1lIGluIGJsb2NrcyAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9ja3M7IC8qIHNpemUgb2Ygdm9sdW1lIGluIGJsb2NrcyAqLwogCXVuc2lnbmVkIGludCBicF9ibG9jazsJICAgLyogYnl0ZXMgcGVyIGJsb2NrICovCiAJdW5zaWduZWQgaW50IHMyYl9zaGlmdDsJICAgLyogbG9nMiAoYnBfYmxvY2svNTEyKSAqLwogCkBAIC01NzMsMTIgKzU3OSwxNCBAQAogdm9pZCBkYXNkX2dlbmVyaWNfaGFuZGxlX3N0YXRlX2NoYW5nZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKIGludCBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoc3RydWN0IGRhc2RfZGV2aWNlICosIGNoYXIgKiwgdm9pZCAqKiwgaW50KTsKK2NoYXIgKmRhc2RfZ2V0X3NlbnNlKHN0cnVjdCBpcmIgKik7CiAKIC8qIGV4dGVybmFscyBpbiBkYXNkX2Rldm1hcC5jICovCiBleHRlcm4gaW50IGRhc2RfbWF4X2RldmluZGV4OwogZXh0ZXJuIGludCBkYXNkX3Byb2Jlb25seTsKIGV4dGVybiBpbnQgZGFzZF9hdXRvZGV0ZWN0OwogZXh0ZXJuIGludCBkYXNkX25vcGF2OworZXh0ZXJuIGludCBkYXNkX25vZmN4OwogCiBpbnQgZGFzZF9kZXZtYXBfaW5pdCh2b2lkKTsKIHZvaWQgZGFzZF9kZXZtYXBfZXhpdCh2b2lkKTsKQEAgLTYyMyw2ICs2MzEsNyBAQAogCQkJCQkgICAgc3RydWN0IGRhc2RfZGV2aWNlICopOwogdm9pZCBkYXNkX2ZyZWVfZXJwX3JlcXVlc3Qoc3RydWN0IGRhc2RfY2N3X3JlcSAqLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiB2b2lkIGRhc2RfbG9nX3NlbnNlKHN0cnVjdCBkYXNkX2Njd19yZXEgKiwgc3RydWN0IGlyYiAqKTsKK3ZvaWQgZGFzZF9sb2dfc2Vuc2VfZGJmKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgc3RydWN0IGlyYiAqaXJiKTsKIAogLyogZXh0ZXJuYWxzIGluIGRhc2RfMzk5MF9lcnAuYyAqLwogc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF8zOTkwX2VycF9hY3Rpb24oc3RydWN0IGRhc2RfY2N3X3JlcSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IGI4MmQ4MTYuLjRjZTNmNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtOSw2ICs5LDkgQEAKICAqCiAgKiBpL28gY29udHJvbHMgZm9yIHRoZSBkYXNkIGRyaXZlci4KICAqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtOTQsNyArOTcsOCBAQAogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JREVWX01FU1NBR0UoS0VSTl9ERUJVRywgYmFzZSwgIiVzIiwgIlF1aWVzY2UgSU8gb24gZGV2aWNlIik7CisJZGV2X2luZm8oJmJhc2UtPmNkZXYtPmRldiwgIlRoZSBEQVNEIGhhcyBiZWVuIHB1dCBpbiB0aGUgcXVpZXNjZSAiCisJCSAic3RhdGVcbiIpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwogCWJhc2UtPnN0b3BwZWQgfD0gREFTRF9TVE9QUEVEX1FVSUVTQ0U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKQEAgLTEwMyw3ICsxMDcsNyBAQAogCiAKIC8qCi0gKiBRdWllc2NlIGRldmljZS4KKyAqIFJlc3VtZSBkZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQgZGFzZF9pb2N0bF9yZXN1bWUoc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrKQogewpAQCAtMTE0LDcgKzExOCw4IEBACiAJaWYgKCFjYXBhYmxlIChDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBiYXNlLCAiJXMiLCAicmVzdW1lIElPIG9uIGRldmljZSIpOworCWRldl9pbmZvKCZiYXNlLT5jZGV2LT5kZXYsICJJL08gb3BlcmF0aW9ucyBoYXZlIGJlZW4gcmVzdW1lZCAiCisJCSAib24gdGhlIERBU0RcbiIpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwogCWJhc2UtPnN0b3BwZWQgJj0gfkRBU0RfU1RPUFBFRF9RVUlFU0NFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xNDAsMTMgKzE0NSwxMyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGJhc2UtPnN0YXRlICE9IERBU0RfU1RBVEVfQkFTSUMpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBiYXNlLCAiJXMiLAotCQkJICAgICJkYXNkX2Zvcm1hdDogZGV2aWNlIGlzIG5vdCBkaXNhYmxlZCEgIik7CisJCWRldl93YXJuKCZiYXNlLT5jZGV2LT5kZXYsCisJCQkgIlRoZSBEQVNEIGNhbm5vdCBiZSBmb3JtYXR0ZWQgd2hpbGUgaXQgaXMgZW5hYmxlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJREJGX0RFVl9FVkVOVChEQkZfTk9USUNFLCBiYXNlLAotCQkgICAgICAiZm9ybWF0dGluZyB1bml0cyAlZCB0byAlZCAoJWQgQiBibG9ja3MpIGZsYWdzICVkIiwKKwkJICAgICAgImZvcm1hdHRpbmcgdW5pdHMgJXUgdG8gJXUgKCV1IEIgYmxvY2tzKSBmbGFncyAldSIsCiAJCSAgICAgIGZkYXRhLT5zdGFydF91bml0LAogCQkgICAgICBmZGF0YS0+c3RvcF91bml0LCBmZGF0YS0+Ymxrc2l6ZSwgZmRhdGEtPmludGVuc2l0eSk7CiAKQEAgLTE2OSwxMCArMTc0LDkgQEAKIAkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgY3FyLT5tZW1kZXYpOwogCQlpZiAocmMpIHsKIAkJCWlmIChyYyAhPSAtRVJFU1RBUlRTWVMpCi0JCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGJhc2UsCi0JCQkJCSAgICAiIEZvcm1hdHRpbmcgb2YgdW5pdCAlZCBmYWlsZWQgIgotCQkJCQkgICAgIndpdGggcmMgPSAlZCIsCi0JCQkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCwgcmMpOworCQkJCWRldl9lcnIoJmJhc2UtPmNkZXYtPmRldiwKKwkJCQkJIkZvcm1hdHRpbmcgdW5pdCAlZCBmYWlsZWQgd2l0aCAiCisJCQkJCSJyYz0lZFxuIiwgZmRhdGEtPnN0YXJ0X3VuaXQsIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfQogCQlmZGF0YS0+c3RhcnRfdW5pdCsrOwpAQCAtMTk5LDggKzIwMyw5IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgYmxvY2stPmJhc2UsICIlcyIsCi0JCQkgICAgIkNhbm5vdCBsb3ctbGV2ZWwgZm9ybWF0IGEgcGFydGl0aW9uIik7CisJCWRldl93YXJuKCZibG9jay0+YmFzZS0+Y2Rldi0+ZGV2LAorCQkJICJUaGUgc3BlY2lmaWVkIERBU0QgaXMgYSBwYXJ0aXRpb24gYW5kIGNhbm5vdCBiZSAiCisJCQkgImZvcm1hdHRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gZGFzZF9mb3JtYXQoYmxvY2ssICZmZGF0YSk7CkBAIC0zNjUsOSArMzcwLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQKLWRhc2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAotCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludAorZGFzZF9kb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpAQCAtNDIwLDMgKzQyNSwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CisKK2ludCBkYXNkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJjOworCisJbG9ja19rZXJuZWwoKTsKKwlyYyA9IGRhc2RfZG9faW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggYmY2ZmQzNC4uMjA4MGJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMTEsNiArMTEsOCBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTExMiw3ICsxMTQsNyBAQAogCQkJc2VxX3ByaW50ZihtLCAibi9mCSAiKTsKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJhdCBibG9ja3NpemU6ICVkLCAlbGQgYmxvY2tzLCAlbGQgTUIiLAorCQkJCSAgICJhdCBibG9ja3NpemU6ICVkLCAlbGxkIGJsb2NrcywgJWxsZCBNQiIsCiAJCQkJICAgYmxvY2stPmJwX2Jsb2NrLCBibG9jay0+YmxvY2tzLAogCQkJCSAgICgoYmxvY2stPmJwX2Jsb2NrID4+IDkpICoKIAkJCQkgICAgYmxvY2stPmJsb2NrcykgPj4gMTEpOwpAQCAtMjY3LDcgKzI2OSw3IEBACiAJYnVmZmVyID0gZGFzZF9nZXRfdXNlcl9zdHJpbmcodXNlcl9idWYsIHVzZXJfbGVuKTsKIAlpZiAoSVNfRVJSKGJ1ZmZlcikpCiAJCXJldHVybiBQVFJfRVJSKGJ1ZmZlcik7Ci0JTUVTU0FHRV9MT0coS0VSTl9JTkZPLCAiL3Byb2MvZGFzZC9zdGF0aWN0aWNzOiAnJXMnIiwgYnVmZmVyKTsKKwlEQkZfRVZFTlQoREJGX0RFQlVHLCAiL3Byb2MvZGFzZC9zdGF0aWN0aWNzOiAnJXMnXG4iLCBidWZmZXIpOwogCiAJLyogY2hlY2sgZm9yIHZhbGlkIHZlcmJzICovCiAJZm9yIChzdHIgPSBidWZmZXI7IGlzc3BhY2UoKnN0cik7IHN0cisrKTsKQEAgLTI3NywzMyArMjc5LDMzIEBACiAJCWlmIChzdHJjbXAoc3RyLCAib24iKSA9PSAwKSB7CiAJCQkvKiBzd2l0Y2ggb24gc3RhdGlzdGljcyBwcm9maWxpbmcgKi8KIAkJCWRhc2RfcHJvZmlsZV9sZXZlbCA9IERBU0RfUFJPRklMRV9PTjsKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiU3RhdGlzdGljcyBzd2l0Y2hlZCBvbiIpOworCQkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgZmVhdHVyZSBoYXMgYmVlbiBzd2l0Y2hlZCAiCisJCQkJIm9uXG4iKTsKIAkJfSBlbHNlIGlmIChzdHJjbXAoc3RyLCAib2ZmIikgPT0gMCkgewogCQkJLyogc3dpdGNoIG9mZiBhbmQgcmVzZXQgc3RhdGlzdGljcyBwcm9maWxpbmcgKi8KIAkJCW1lbXNldCgmZGFzZF9nbG9iYWxfcHJvZmlsZSwKIAkJCSAgICAgICAwLCBzaXplb2YgKHN0cnVjdCBkYXNkX3Byb2ZpbGVfaW5mb190KSk7CiAJCQlkYXNkX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT0ZGOwotCQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJTdGF0aXN0aWNzIHN3aXRjaGVkIG9mZiIpOworCQkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgZmVhdHVyZSBoYXMgYmVlbiBzd2l0Y2hlZCAiCisJCQkJIm9mZlxuIik7CiAJCX0gZWxzZQogCQkJZ290byBvdXRfZXJyb3I7CiAJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgInJlc2V0IiwgNSkgPT0gMCkgewogCQkvKiByZXNldCB0aGUgc3RhdGlzdGljcyAqLwogCQltZW1zZXQoJmRhc2RfZ2xvYmFsX3Byb2ZpbGUsIDAsCiAJCSAgICAgICBzaXplb2YgKHN0cnVjdCBkYXNkX3Byb2ZpbGVfaW5mb190KSk7Ci0JCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiU3RhdGlzdGljcyByZXNldCIpOworCQlwcl9pbmZvKCJUaGUgc3RhdGlzdGljcyBoYXZlIGJlZW4gcmVzZXRcbiIpOwogCX0gZWxzZQogCQlnb3RvIG91dF9lcnJvcjsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiB1c2VyX2xlbjsKIG91dF9lcnJvcjoKLQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwKLQkJIi9wcm9jL2Rhc2Qvc3RhdGlzdGljczogb25seSAnc2V0IG9uJywgJ3NldCBvZmYnICIKLQkJImFuZCAncmVzZXQnIGFyZSBzdXBwb3J0ZWQgdmVyYnMiKTsKKwlwcl93YXJuaW5nKCIlcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIC9wcm9jL2Rhc2Qvc3RhdGlzdGljc1xuIiwKKwkJc3RyKTsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKLQlNRVNTQUdFKEtFUk5fV0FSTklORywgIiVzIiwKLQkJIi9wcm9jL2Rhc2Qvc3RhdGlzdGljczogaXMgbm90IGFjdGl2YXRlZCBpbiB0aGlzIGtlcm5lbCIpOworCXByX3dhcm5pbmcoIi9wcm9jL2Rhc2Qvc3RhdGlzdGljczogaXMgbm90IGFjdGl2YXRlZCBpbiB0aGlzIGtlcm5lbFxuIik7CiAJcmV0dXJuIHVzZXJfbGVuOwogI2VuZGlmCQkJCS8qIENPTkZJR19EQVNEX1BST0ZJTEUgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaAppbmRleCBkMGQ1NjVhLi5jMDc4MDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCkBAIC0zMjQsOCArMzI0LDYgQEAKICNlbmRpZgogCiAvKiBhIGZ1bmN0aW9uIGZvciBkdW1waW5nIGRldmljZSBzZW5zZSBpbmZvICovCi1leHRlcm4gdm9pZCB0YXBlX2R1bXBfc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKiwKLQkJCSAgICBzdHJ1Y3QgaXJiICopOwogZXh0ZXJuIHZvaWQgdGFwZV9kdW1wX3NlbnNlX2RiZihzdHJ1Y3QgdGFwZV9kZXZpY2UgKiwgc3RydWN0IHRhcGVfcmVxdWVzdCAqLAogCQkJCXN0cnVjdCBpcmIgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKaW5kZXggMjJjYTM0My4uODA3ZGVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKQEAgLTgsNiArOCw4IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpAQCAtMTgsOCArMjAsNiBAQAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfMzRYWDogIgotCiAvKgogICogUG9pbnRlciB0byBkZWJ1ZyBhcmVhLgogICovCkBAIC0yMDMsOCArMjAzLDcgQEAKIAkJdGFwZV8zNHh4X3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19NU0VOKTsKIAl9IGVsc2UgewogCQlEQkZfRVZFTlQoMywgInVuc29sLmlycSEgZGV2IGVuZDogJTA4eFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiVW5zb2xpY2l0ZWQgSVJRIChEZXZpY2UgRW5kKSBjYXVnaHQuXG4iKTsKLQkJdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwkJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYik7CiAJfQogCXJldHVybiBUQVBFX0lPX1NVQ0NFU1M7CiB9CkBAIC0yMjYsOSArMjI1LDcgQEAKIAkJdGFwZV9zdGRfcmVhZF9iYWNrd2FyZChkZXZpY2UsIHJlcXVlc3QpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAl9Ci0JaWYgKHJlcXVlc3QtPm9wICE9IFRPX1JCQSkKLQkJUFJJTlRfRVJSKCJyZWFkX29wcG9zaXRlIGNhbGxlZCB3aXRoIHN0YXRlOiVzXG4iLAotCQkJICB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKKwogCS8qCiAJICogV2UgdHJpZWQgdG8gcmVhZCBmb3J3YXJkIGFuZCBiYWNrd2FyZCwgYnV0IGhhdCBubwogCSAqIHN1Y2Nlc3MgLT4gZmFpbGVkLgpAQCAtMjQxLDEzICsyMzgsOSBAQAogCQkgIHN0cnVjdCBpcmIgKmlyYiwgaW50IG5vKQogewogCWlmIChyZXF1ZXN0LT5vcCAhPSBUT19BU1NJR04pIHsKLQkJUFJJTlRfV0FSTigiQW4gdW5leHBlY3RlZCBjb25kaXRpb24gIyVkIHdhcyBjYXVnaHQgaW4gIgotCQkJICAgInRhcGUgZXJyb3IgcmVjb3ZlcnkuXG4iLCBubyk7Ci0JCVBSSU5UX1dBUk4oIlBsZWFzZSByZXBvcnQgdGhpcyBpbmNpZGVudC5cbiIpOwotCQlpZiAocmVxdWVzdCkKLQkJCVBSSU5UX1dBUk4oIk9wZXJhdGlvbiBvZiB0YXBlOiVzXG4iLAotCQkJCSAgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIHVuZXhwZWN0ZWQgY29uZGl0aW9uICVkICIKKwkJCSJvY2N1cnJlZCBpbiB0YXBlIGVycm9yIHJlY292ZXJ5XG4iLCBubyk7CisJCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOwogCX0KIAlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiB9CkBAIC0yNjEsOSArMjU0LDggQEAKIAkJICAgICAgc3RydWN0IGlyYiAqaXJiKQogewogCWlmIChpcmItPmVjd1szXSA9PSAweDQwKSB7Ci0JCVBSSU5UX1dBUk4gKCJEYXRhIG92ZXJydW4gZXJyb3IgYmV0d2VlbiBjb250cm9sLXVuaXQgIgotCQkJICAgICJhbmQgZHJpdmUuIFVzZSBhIGZhc3RlciBjaGFubmVsIGNvbm5lY3Rpb24sICIKLQkJCSAgICAiaWYgcG9zc2libGUhIFxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIGRhdGEgb3ZlcnJ1biBvY2N1cnJlZCBiZXR3ZWVuIgorCQkJIiB0aGUgY29udHJvbCB1bml0IGFuZCB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJfQogCXJldHVybiB0YXBlXzM0eHhfZXJwX2J1ZyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLTEpOwpAQCAtMjgwLDcgKzI3Miw4IEBACiAJCS8qCiAJCSAqIGN1IGRldGVjdGVkIGluY29ycmVjdCBibG9jay1pZCBzZXF1ZW5jZSBvbiB0YXBlLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiSWxsZWdhbCBibG9jay1pZCBzZXF1ZW5jZSBmb3VuZCFcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIGJsb2NrIElEIHNlcXVlbmNlIG9uIHRoZSAiCisJCQkidGFwZSBpcyBpbmNvcnJlY3RcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJfQogCS8qCkBAIC0zOTMsOCArMzg2LDYgQEAKIAkJCS8qIFdyaXRpbmcgYXQgcGh5c2ljYWwgZW5kIG9mIHZvbHVtZSAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCQlkZWZhdWx0OgotCQkJUFJJTlRfRVJSKCJJbnZhbGlkIG9wIGluICVzOiVpXG4iLAotCQkJCSAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAwKTsKIAkJfQogCX0KQEAgLTQyMCw3ICs0MTEsOCBAQAogCQkJCQkJCSBpcmIsIC00KTsKIAogCQkJLyogZGF0YSBjaGVjayBpcyBwZXJtYW5lbnQsIENVIHJlY292ZXJ5IGhhcyBmYWlsZWQgKi8KLQkJCVBSSU5UX1dBUk4oIlBlcm1hbmVudCByZWFkIGVycm9yXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHJlYWQgZXJyb3Igb2NjdXJyZWQgIgorCQkJCSJ0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MjU6CiAJCQkvLyBhIHdyaXRlIGRhdGEgY2hlY2sgb2NjdXJyZWQKQEAgLTQzMywyMiArNDI1LDI2IEBACiAJCQkJCQkJIGlyYiwgLTUpOwogCiAJCQkvLyBkYXRhIGNoZWNrIGlzIHBlcm1hbmVudCwgY3UtcmVjb3ZlcnkgaGFzIGZhaWxlZAotCQkJUFJJTlRfV0FSTigiUGVybWFuZW50IHdyaXRlIGVycm9yXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHdyaXRlIGVycm9yIG9uIHRoZSAiCisJCQkJInRhcGUgY2Fubm90IGJlIHJlY292ZXJlZFxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCWNhc2UgMHgyNjoKIAkJCS8qIERhdGEgQ2hlY2sgKHJlYWQgb3Bwb3NpdGUpIG9jY3VycmVkLiAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmVhZF9vcHBvc2l0ZShkZXZpY2UsIHJlcXVlc3QpOwogCQljYXNlIDB4Mjg6CiAJCQkvKiBJRC1NYXJrIGF0IHRhcGUgc3RhcnQgY291bGRuJ3QgYmUgd3JpdHRlbiAqLwotCQkJUFJJTlRfV0FSTigiSUQtTWFyayBjb3VsZCBub3QgYmUgd3JpdHRlbi5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIldyaXRpbmcgdGhlIElELW1hcmsgIgorCQkJCSJmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MzE6CiAJCQkvKiBUYXBlIHZvaWQuIFRyaWVkIHRvIHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2UuICovCi0JCQlQUklOVF9XQVJOKCJSZWFkIGJleW9uZCBlbmQgb2YgcmVjb3JkZWQgYXJlYS5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlJlYWRpbmcgdGhlIHRhcGUgYmV5b25kIgorCQkJCSIgdGhlIGVuZCBvZiB0aGUgcmVjb3JkZWQgYXJlYSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCQljYXNlIDB4NDE6CiAJCQkvKiBSZWNvcmQgc2VxdWVuY2UgZXJyb3IuICovCi0JCQlQUklOVF9XQVJOKCJJbnZhbGlkIGJsb2NrLWlkIHNlcXVlbmNlIGZvdW5kLlxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgY29udGFpbnMgYW4gIgorCQkJCSJpbmNvcnJlY3QgYmxvY2sgSUQgc2VxdWVuY2VcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQlkZWZhdWx0OgogCQkJLyogYWxsIGRhdGEgY2hlY2tzIGZvciAzNDgwIHNob3VsZCByZXN1bHQgaW4gb25lIG9mCkBAIC00NzAsMTYgKzQ2NiwxMiBAQAogCXN3aXRjaCAoc2Vuc2VbM10pIHsKIAljYXNlIDB4MDA6CiAJCS8qIFVuaXQgY2hlY2sgd2l0aCBlcnBhIGNvZGUgMC4gUmVwb3J0IGFuZCBpZ25vcmUuICovCi0JCVBSSU5UX1dBUk4oIk5vbi1lcnJvciBzZW5zZSB3YXMgZm91bmQuICIKLQkJCSAgICJVbml0LWNoZWNrIHdpbGwgYmUgaWdub3JlZC5cbiIpOwogCQlyZXR1cm4gVEFQRV9JT19TVUNDRVNTOwogCWNhc2UgMHgyMToKIAkJLyoKIAkJICogRGF0YSBzdHJlYW1pbmcgbm90IG9wZXJhdGlvbmFsLiBDVSB3aWxsIHN3aXRjaCB0bwogCQkgKiBpbnRlcmxvY2sgbW9kZS4gUmVpc3N1ZSB0aGUgY29tbWFuZC4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkRhdGEgc3RyZWFtaW5nIG5vdCBvcGVyYXRpb25hbC4gIgotCQkJICAgIlN3aXRjaGluZyB0byBpbnRlcmxvY2stbW9kZS5cbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4MjI6CiAJCS8qCkBAIC00ODcsMTEgKzQ3OSw4IEBACiAJCSAqIGVycm9yIG9uIHRoZSBsb3dlciBpbnRlcmZhY2UsIGludGVybmFsIHBhdGggbm90IHVzYWJsZSwKIAkJICogb3IgZXJyb3IgZHVyaW5nIGNhcnRyaWRnZSBsb2FkLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiQSBwYXRoIGVxdWlwbWVudCBjaGVjayBvY2N1cnJlZC4gT25lIG9mIHRoZSAiCi0JCQkgICAiZm9sbG93aW5nIGNvbmRpdGlvbnMgb2NjdXJyZWQ6XG4iKTsKLQkJUFJJTlRfV0FSTigiZHJpdmUgYWRhcHRlciBlcnJvciwgYnVmZmVyIGVycm9yIG9uIHRoZSBsb3dlciAiCi0JCQkgICAiaW50ZXJmYWNlLCBpbnRlcm5hbCBwYXRoIG5vdCB1c2FibGUsIGVycm9yICIKLQkJCSAgICJkdXJpbmcgY2FydHJpZGdlIGxvYWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgcGF0aCBlcXVpcG1lbnQgY2hlY2sgb2NjdXJyZWQiCisJCQkiIGZvciB0aGUgdGFwZSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDI0OgogCQkvKgpAQCAtNTE0LDcgKzUwMyw2IEBACiAJCSAqIGJ1dCB0aGUgaGFyZHdhcmUgaXNuJ3QgY2FwYWJsZSB0byBkbyBpZHJjLCBvciBhIHBlcmZvcm0KIAkJICogc3Vic3lzdGVtIGZ1bmMgaXMgaXNzdWVkIGFuZCB0aGUgQ1UgaXMgbm90IG9uLWxpbmUuCiAJCSAqLwotCQlQUklOVF9XQVJOICgiRnVuY3Rpb24gaW5jb21wYXRpYmxlLiBUcnkgdG8gc3dpdGNoIG9mZiBpZHJjXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgyYToKIAkJLyoKQEAgLTU1MiwyMyArNTQwLDI2IEBACiAJCSAqIHJlYWRpbmcgdGhlIGZvcm1hdCBpZCBtYXJrIG9yIHRoYXQgdGhhdCBmb3JtYXQgc3BlY2lmaWVkCiAJCSAqIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiRHJpdmUgbm90IGNhcGFibGUgcHJvY2Vzc2luZyB0aGUgdGFwZSBmb3JtYXQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgY2Fubm90IHByb2Nlc3MgIgorCQkJInRoZSB0YXBlIGZvcm1hdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU1FRElVTVRZUEUpOwogCWNhc2UgMHgzMDoKIAkJLyogVGhlIG1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQuICovCi0JCVBSSU5UX1dBUk4oIk1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIG1lZGl1bSBpcyB3cml0ZS0iCisJCQkicHJvdGVjdGVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FQUNDRVMpOwogCWNhc2UgMHgzMjoKIAkJLy8gVGVuc2lvbiBsb3NzLiBXZSBjYW5ub3QgcmVjb3ZlciB0aGlzLCBpdCdzIGFuIEkvTyBlcnJvci4KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGxvc3QgdGFwZSB0ZW5zaW9uLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBkb2VzIG5vdCBoYXZlIHRoZSAiCisJCQkicmVxdWlyZWQgdGFwZSB0ZW5zaW9uXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzMzoKIAkJLyoKIAkJICogTG9hZCBGYWlsdXJlLiBUaGUgY2FydHJpZGdlIHdhcyBub3QgaW5zZXJ0ZWQgY29ycmVjdGx5IG9yCiAJCSAqIHRoZSB0YXBlIGlzIG5vdCB0aHJlYWRlZCBjb3JyZWN0bHkuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJDYXJ0cmlkZ2UgbG9hZCBmYWlsdXJlLiBSZWxvYWQgdGhlIGNhcnRyaWRnZSAiCi0JCQkgICAiYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBmYWlsZWQgdG8gbG9hZCIKKwkJCSIgdGhlIGNhcnRyaWRnZVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzQ6CkBAIC01NzYsOCArNTY3LDggQEAKIAkJICogVW5sb2FkIGZhaWx1cmUuIFRoZSBkcml2ZSBjYW5ub3QgbWFpbnRhaW4gdGFwZSB0ZW5zaW9uCiAJCSAqIGFuZCBjb250cm9sIHRhcGUgbW92ZW1lbnQgZHVyaW5nIGFuIHVubG9hZCBvcGVyYXRpb24uCiAJCSAqLwotCQlQUklOVF9XQVJOKCJGYWlsdXJlIGR1cmluZyBjYXJ0cmlkZ2UgdW5sb2FkLiAiCi0JCQkgICAiUGxlYXNlIHRyeSBtYW51YWxseS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQXV0b21hdGljIHVubG9hZGluZyBvZiB0aGUgdGFwZSIKKwkJCSIgY2FydHJpZGdlIGZhaWxlZFxuIik7CiAJCWlmIChyZXF1ZXN0LT5vcCA9PSBUT19SVU4pCiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2J1ZyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgc2Vuc2VbM10pOwpAQCAtNTg5LDggKzU4MCw4IEBACiAJCSAqIC0gdGhlIGNhcnRyaWRnZSBsb2FkZXIgZG9lcyBub3QgcmVzcG9uZCBjb3JyZWN0bHkKIAkJICogLSBhIGZhaWx1cmUgb2NjdXJzIGR1cmluZyBhbiBpbmRleCwgbG9hZCwgb3IgdW5sb2FkIGN5Y2xlCiAJCSAqLwotCQlQUklOVF9XQVJOKCJFcXVpcG1lbnQgY2hlY2shIFBsZWFzZSBjaGVjayB0aGUgZHJpdmUgYW5kICIKLQkJCSAgICJ0aGUgY2FydHJpZGdlIGxvYWRlci5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gZXF1aXBtZW50IGNoZWNrIGhhcyBvY2N1cnJlZCIKKwkJCSIgb24gdGhlIHRhcGUgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzY6CiAJCWlmIChkZXZpY2UtPmNkZXYtPmlkLmRyaXZlcl9pbmZvID09IHRhcGVfMzQ5MCkKQEAgLTYwMyw3ICs1OTQsOCBAQAogCQkgKiBUYXBlIGxlbmd0aCBlcnJvci4gVGhlIHRhcGUgaXMgc2hvcnRlciB0aGFuIHJlcG9ydGVkIGluCiAJCSAqIHRoZSBiZWdpbm5pbmctb2YtdGFwZSBkYXRhLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiVGFwZSBsZW5ndGggZXJyb3IuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGluZm9ybWF0aW9uIHN0YXRlcyBhbiIKKwkJCSIgaW5jb3JyZWN0IGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4Mzg6CiAJCS8qCkBAIC02MjAsMTIgKzYxMiwxMiBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDNhOgogCQkvKiBEcml2ZSBzd2l0Y2hlZCB0byBub3QgcmVhZHkuICovCi0JCVBSSU5UX1dBUk4oIkRyaXZlIG5vdCByZWFkeS4gVHVybiB0aGUgcmVhZHkvbm90IHJlYWR5IHN3aXRjaCAiCi0JCQkgICAidG8gcmVhZHkgcG9zaXRpb24gYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBpcyBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDNiOgogCQkvKiBNYW51YWwgcmV3aW5kIG9yIHVubG9hZC4gVGhpcyBjYXVzZXMgYW4gSS9PIGVycm9yLiAqLwotCQlQUklOVF9XQVJOKCJNZWRpdW0gd2FzIHJld291bmQgb3IgdW5sb2FkZWQgbWFudWFsbHkuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIG1lZGl1bSBoYXMgYmVlbiAiCisJCQkicmV3b3VuZCBvciB1bmxvYWRlZCBtYW51YWxseVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDI6CkBAIC02MzMsNyArNjI1LDggQEAKIAkJICogRGVncmFkZWQgbW9kZS4gQSBjb25kaXRpb24gdGhhdCBjYW4gY2F1c2UgZGVncmFkZWQKIAkJICogcGVyZm9ybWFuY2UgaXMgZGV0ZWN0ZWQuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJTdWJzeXN0ZW0gaXMgcnVubmluZyBpbiBkZWdyYWRlZCBtb2RlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBzdWJzeXN0ZW0gaXMgcnVubmluZyAiCisJCQkiaW4gZGVncmFkZWQgbW9kZVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHg0MzoKIAkJLyogRHJpdmUgbm90IHJlYWR5LiAqLwpAQCAtNjUyLDcgKzY0NSw2IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBpcyBub3QgcmVhZHkuXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9NRURJVU0pOwogCWNhc2UgMHg0NDoKIAkJLyogTG9jYXRlIEJsb2NrIHVuc3VjY2Vzc2Z1bC4gKi8KQEAgLTY2Myw3ICs2NTUsOCBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ1OgogCQkvKiBUaGUgZHJpdmUgaXMgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgY2hhbm5lbCBwYXRoLiAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgYXNzaWduZWQgZWxzZXdoZXJlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGlzIGFscmVhZHkgIgorCQkJImFzc2lnbmVkXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0NjoKIAkJLyoKQEAgLTY3MSwxMSArNjY0LDEyIEBACiAJCSAqIHRoZSBwb3dlciBzdXBwbHkgbWF5IGJlIHN3aXRjaGVkIG9mZiBvcgogCQkgKiB0aGUgZHJpdmUgYWRkcmVzcyBtYXkgbm90IGJlIHNldCBjb3JyZWN0bHkuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgbm90IG9uLWxpbmUuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGlzIG5vdCBvbmxpbmVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQ3OgogCQkvKiBWb2x1bWUgZmVuY2VkLiBDVSByZXBvcnRzIHZvbHVtZSBpbnRlZ3JpdHkgaXMgbG9zdC4gKi8KLQkJUFJJTlRfV0FSTigiVm9sdW1lIGZlbmNlZC4gVGhlIHZvbHVtZSBpbnRlZ3JpdHkgaXMgbG9zdC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIGNvbnRyb2wgdW5pdCBoYXMgZmVuY2VkICIKKwkJCSJhY2Nlc3MgdG8gdGhlIHRhcGUgdm9sdW1lXG4iKTsKIAkJdGFwZV8zNHh4X2RlbGV0ZV9zYmlkX2Zyb20oZGV2aWNlLCAwKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0ODoKQEAgLTY4MywyMCArNjc3LDIxIEBACiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCWNhc2UgMHg0OToKIAkJLyogQnVzIG91dCBjaGVjay4gQSBwYXJpdHkgY2hlY2sgZXJyb3Igb24gdGhlIGJ1cyB3YXMgZm91bmQuICovCi0JCVBSSU5UX1dBUk4oIkJ1cyBvdXQgY2hlY2suIEEgZGF0YSB0cmFuc2ZlciBvdmVyIHRoZSBidXMgIgotCQkJICAgImhhcyBiZWVuIGNvcnJ1cHRlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBwYXJpdHkgZXJyb3Igb2NjdXJyZWQgb24gdGhlICIKKwkJCSJ0YXBlIGJ1c1xuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NGE6CiAJCS8qIENvbnRyb2wgdW5pdCBlcnAgZmFpbGVkLiAqLwotCQlQUklOVF9XQVJOKCJUaGUgY29udHJvbCB1bml0IEkvTyBlcnJvciByZWNvdmVyeSBmYWlsZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkkvTyBlcnJvciByZWNvdmVyeSBmYWlsZWQgb24gIgorCQkJInRoZSB0YXBlIGNvbnRyb2wgdW5pdFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NGI6CiAJCS8qCiAJCSAqIENVIGFuZCBkcml2ZSBpbmNvbXBhdGlibGUuIFRoZSBkcml2ZSByZXF1ZXN0cyBtaWNyby1wcm9ncmFtCiAJCSAqIHBhdGNoZXMsIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIG9uIHRoZSBDVS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBuZWVkcyBtaWNyb3Byb2dyYW0gcGF0Y2hlcyBmcm9tIHRoZSAiCi0JCQkgICAiY29udHJvbCB1bml0LCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCByZXF1aXJlcyBhICIKKwkJCSJmaXJtd2FyZSB1cGRhdGVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDRjOgogCQkvKgpAQCAtNzIxLDggKzcxNiw4IEBACiAJCQkgKiB0aGUgYmxvY2sgdG8gYmUgd3JpdHRlbiBpcyBsYXJnZXIgdGhhbiBhbGxvd2VkIGZvcgogCQkJICogYnVmZmVyZWQgbW9kZS4KIAkJCSAqLwotCQkJUFJJTlRfV0FSTigiTWF4aW11bSBibG9jayBzaXplIGZvciBidWZmZXJlZCAiCi0JCQkJICAgIm1vZGUgZXhjZWVkZWQuXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgbWF4aW11bSBibG9jayBzaXplIgorCQkJCSIgZm9yIGJ1ZmZlcmVkIG1vZGUgaXMgZXhjZWVkZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9CVUZTKTsKIAkJfQogCQkvKiBUaGlzIGVycGEgaXMgcmVzZXJ2ZWQgZm9yIDM0ODAuICovCkBAIC03NTksMjIgKzc1NCwyMCBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NTU6CiAJCS8qIENoYW5uZWwgaW50ZXJmYWNlIHJlY292ZXJ5IChwZXJtYW5lbnQpLiAqLwotCQlQUklOVF9XQVJOKCJBIHBlcm1hbmVudCBjaGFubmVsIGludGVyZmFjZSBlcnJvciBvY2N1cnJlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBjaGFubmVsIGludGVyZmFjZSBlcnJvciBjYW5ub3QgYmUiCisJCQkiIHJlY292ZXJlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NTY6CiAJCS8qIENoYW5uZWwgcHJvdG9jb2wgZXJyb3IuICovCi0JCVBSSU5UX1dBUk4oIkEgY2hhbm5lbCBwcm90b2NvbCBlcnJvciBvY2N1cnJlZC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBjaGFubmVsIHByb3RvY29sIGVycm9yICIKKwkJCSJvY2N1cnJlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NTc6CiAJCWlmIChkZXZpY2UtPmNkZXYtPmlkLmRyaXZlcl9pbmZvID09IHRhcGVfMzQ4MCkgewogCQkJLyogQXR0ZW50aW9uIGludGVyY2VwdC4gKi8KLQkJCVBSSU5UX1dBUk4oIkFuIGF0dGVudGlvbiBpbnRlcmNlcHQgb2NjdXJyZWQsICIKLQkJCQkgICAid2hpY2ggd2lsbCBiZSByZWNvdmVyZWQuXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCQl9IGVsc2UgewogCQkJLyogR2xvYmFsIHN0YXR1cyBpbnRlcmNlcHQuICovCi0JCQlQUklOVF9XQVJOKCJBbiBnbG9iYWwgc3RhdHVzIGludGVyY2VwdCB3YXMgcmVjZWl2ZWQsICIKLQkJCQkgICAid2hpY2ggd2lsbCBiZSByZWNvdmVyZWQuXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwogCQl9CiAJY2FzZSAweDVhOgpAQCAtNzgyLDQyICs3NzUsMzEgQEAKIAkJICogVGFwZSBsZW5ndGggaW5jb21wYXRpYmxlLiBUaGUgdGFwZSBpbnNlcnRlZCBpcyB0b28gbG9uZywKIAkJICogd2hpY2ggY291bGQgY2F1c2UgZGFtYWdlIHRvIHRoZSB0YXBlIG9yIHRoZSBkcml2ZS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRhcGUgTGVuZ3RoIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIlRhcGUgbGVuZ3RoIGV4Y2VlZHMgSUJNIGVuaGFuY2VkIGNhcGFjaXR5ICIKLQkJCSJjYXJ0ZHJpZGdlIGxlbmd0aCBvciBhIG1lZGl1bVxuIik7Ci0JCVBSSU5UX1dBUk4oIndpdGggRUMtQ1NUIGlkZW50aWZpY2F0aW9uIG1hcmsgaGFzIGJlZW4gbW91bnRlZCAiCi0JCQkiaW4gYSBkZXZpY2UgdGhhdCB3cml0ZXNcbiIpOwotCQlQUklOVF9XQVJOKCIzNDgwIG9yIDM0ODAgWEYgZm9ybWF0LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQgIgorCQkJInRoZSB0YXBlIGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWI6CiAJCS8qIEZvcm1hdCAzNDgwIFhGIGluY29tcGF0aWJsZSAqLwogCQlpZiAoc2Vuc2VbMV0gJiBTRU5TRV9CRUdJTk5JTkdfT0ZfVEFQRSkKIAkJCS8qIFRoZSB0YXBlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuLiAqLwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7Ci0JCVBSSU5UX1dBUk4oIkZvcm1hdCAzNDgwIFhGIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIk1lZGl1bSBoYXMgYmVlbiBjcmVhdGVkIGluIDM0ODAgZm9ybWF0LiAiCi0JCQkiVG8gY2hhbmdlIHRoZSBmb3JtYXQgd3JpdGVzXG4iKTsKLQkJUFJJTlRfV0FSTigibXVzdCBiZSBpc3N1ZWQgYXQgQk9ULlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIGZvcm1hdCAzNDgwIFhGXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg1YzoKIAkJLyogRm9ybWF0IDM0ODAtMiBYRiBpbmNvbXBhdGlibGUgKi8KLQkJUFJJTlRfV0FSTigiRm9ybWF0IDM0ODAtMiBYRiBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJEZXZpY2UgY2FuIG9ubHkgcmVhZCAzNDgwIG9yIDM0ODAgWEYgZm9ybWF0LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQgdGFwZSAiCisJCQkiZm9ybWF0IDM0ODAtMiBYRlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWQ6CiAJCS8qIFRhcGUgbGVuZ3RoIHZpb2xhdGlvbi4gKi8KLQkJUFJJTlRfV0FSTigiVGFwZSBMZW5ndGggVmlvbGF0aW9uXG4iKTsKLQkJUFJJTlRfV0FSTigiVGhlIG1vdW50ZWQgdGFwZSBleGNlZWRzIElCTSBFbmhhbmNlZCBDYXBhY2l0eSAiCi0JCQkiQ2FydGRyaWRnZSBTeXN0ZW0gVGFwZSBsZW5ndGguXG4iKTsKLQkJUFJJTlRfV0FSTigiVGhpcyBtYXkgY2F1c2UgZGFtYWdlIHRvIHRoZSBkcml2ZSBvciB0YXBlIHdoZW4gIgotCQkJInByb2Nlc3NpbmcgdG8gdGhlIEVPVlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIHRoZSBjdXJyZW50IHRhcGUgbGVuZ3RoXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTUVESVVNVFlQRSk7CiAJY2FzZSAweDVlOgogCQkvKiBDb21wYWN0aW9uIGFsZ29yaXRobSBpbmNvbXBhdGlibGUuICovCi0JCVBSSU5UX1dBUk4oIkNvbXBhY3Rpb24gQWxnb3JpdGhtIEluY29tcGF0aWJsZVxuIik7Ci0JCVBSSU5UX1dBUk4oIlRoZSB2b2x1bWUgaXMgcmVjb3JkZWQgdXNpbmcgYW4gaW5jb21wYXRpYmxlICIKLQkJCSJjb21wYWN0aW9uIGFsZ29yaXRobSxcbiIpOwotCQlQUklOVF9XQVJOKCJ3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZG9lcyBub3Qgc3VwcG9ydCIKKwkJCSIgdGhlIGNvbXBhY3Rpb24gYWxnb3JpdGhtXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTUVESVVNVFlQRSk7CiAKIAkJLyogVGhlIGZvbGxvd2luZyBlcnBhcyBzaG91bGQgaGF2ZSBiZWVuIGNvdmVyZWQgZWFybGllci4gKi8KQEAgLTg0OCw3ICs4MzAsNiBAQAogCSAgICAoaXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX0RFVl9FTkQpICYmCiAJICAgIChyZXF1ZXN0LT5vcCA9PSBUT19XUkkpKSB7CiAJCS8qIFdyaXRlIGF0IGVuZCBvZiB2b2x1bWUgKi8KLQkJUFJJTlRfSU5GTygiRW5kIG9mIHZvbHVtZVxuIik7IC8qIFhYWCAqLwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVOT1NQQyk7CiAJfQogCkBAIC04NjksOSArODUwLDcgQEAKIAl9CiAKIAlEQkZfRVZFTlQoNiwgInh1bmtub3duaXJxXG4iKTsKLQlQUklOVF9FUlIoIlVuZXhwZWN0ZWQgaW50ZXJydXB0LlxuIik7Ci0JUFJJTlRfRVJSKCJDdXJyZW50IG9wIGlzOiAlcyIsIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIHJlcXVlc3QsIGlyYik7CiAJcmV0dXJuIFRBUEVfSU9fU1RPUDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwppbmRleCA3MTYwNWExLi5mYzFkOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwpAQCAtOCwxMiArOCwxNSBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAKICNkZWZpbmUgVEFQRV9EQkZfQVJFQQl0YXBlXzM1OTBfZGJmCisjZGVmaW5lIEJVRlNJWkUgNTEyCS8qIHNpemUgb2YgYnVmZmVycyBmb3IgZHluYW1pYyBnZW5lcmF0ZWQgbWVzc2FnZXMgKi8KIAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgpAQCAtMzYsNyArMzksNyBAQAogICogLSBSZWFkIEFsdGVybmF0ZToJCSBpbXBsZW1lbnRlZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV8zNTkwOiAiCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgogCiBzdGF0aWMgY29uc3QgY2hhciAqdGFwZV8zNTkwX21zZ1tUQVBFXzM1OTBfTUFYX01TR10gPSB7CiAJWzB4MDBdID0gIiIsCkBAIC02NjEsOCArNjY0LDcgQEAKIAkJCWNjdysrOwogCQkJZHN0ICs9IFRBUEVCTE9DS19IU0VDX1NJWkU7CiAJCX0KLQkJaWYgKG9mZiA+IGJ2LT5idl9sZW4pCi0JCQlCVUcoKTsKKwkJQlVHX09OKG9mZiA+IGJ2LT5idl9sZW4pOwogCX0KIAljY3cgPSB0YXBlX2Njd19lbmQoY2N3LCBOT1AsIDAsIE5VTEwpOwogCURCRl9FVkVOVCg2LCAieEJSRURjY3dnXG4iKTsKQEAgLTcyNiw3ICs3MjgsNyBAQAogCX0KIAljX2luZm8tPm1lZGl1bV9zdGF0dXMgfD0gVEFQRTM5MF9NRURJVU1fTE9BREVEX01BU0s7CiAJaWYgKHNlbnNlLT5mbGFncyAmIE1TRU5TRV9DUllQVF9NQVNLKSB7Ci0JCVBSSU5UX0lORk8oIk1lZGl1bSBpcyBlbmNyeXB0ZWQgKCUwNHgpXG4iLCBzZW5zZS0+ZmxhZ3MpOworCQlEQkZfRVZFTlQoNiwgIk1lZGl1bSBpcyBlbmNyeXB0ZWQgKCUwNHgpXG4iLCBzZW5zZS0+ZmxhZ3MpOwogCQljX2luZm8tPm1lZGl1bV9zdGF0dXMgfD0gVEFQRTM5MF9NRURJVU1fRU5DUllQVEVEX01BU0s7CiAJfSBlbHNlCXsKIAkJREJGX0VWRU5UKDYsICJNZWRpdW0gaXMgbm90IGVuY3J5cHRlZCAlMDR4XG4iLCBzZW5zZS0+ZmxhZ3MpOwpAQCAtODQ3LDggKzg0OSw3IEBACiAJCXRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fUkVBRF9BVFRNU0cpOwogCX0gZWxzZSB7CiAJCURCRl9FVkVOVCgzLCAidW5zb2wuaXJxISBkZXYgZW5kOiAlMDh4XG4iLCBkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCJVbnNvbGljaXRlZCBJUlEgKERldmljZSBFbmQpIGNhdWdodC5cbiIpOwotCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCQl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgTlVMTCwgaXJiKTsKIAl9CiAJLyogY2hlY2sgbWVkaXVtIHN0YXRlICovCiAJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19NU0VOKTsKQEAgLTg3Niw4ICs4NzcsNiBAQAogCWNhc2UgU0VOU0VfQlJBX0RSRToKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfZmFpbGVkKGRldmljZSwgcmVxdWVzdCwgaXJiLCByYyk7CiAJZGVmYXVsdDoKLQkJUFJJTlRfRVJSKCJVbmtub3duIEJSQSAleCAtIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hXG4iLAotCQkJICBzZW5zZS0+YnJhKTsKIAkJQlVHKCk7CiAJCXJldHVybiBUQVBFX0lPX1NUT1A7CiAJfQpAQCAtOTEwLDcgKzkwOSw4IEBACiAJICogc2hvdWxkIHByb2NlZWQgd2l0aCB0aGUgbmV3IHRhcGUuLi4gdGhpcwogCSAqIHNob3VsZCBwcm9iYWJseSBiZSBkb25lIGluIHVzZXIgc3BhY2UhCiAJICovCi0JUFJJTlRfV0FSTigiKCVzKTogU3dhcCBUYXBlIERldmljZSFcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBtZWRpdW0gbXVzdCBiZSBsb2FkZWQgaW50byBhICIKKwkJImRpZmZlcmVudCB0YXBlIHVuaXRcbiIpOwogCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKIH0KIApAQCAtOTg1LDggKzk4NSw2IEBACiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oInJlYWRfb3Bwb3NpdGVfcmVjb3ZlcnlfY2FsbGVkX3dpdGhfb3A6ICVzXG4iLAotCQkJICAgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiAJfQogfQpAQCAtOTk4LDUwICs5OTYsNjEgQEAKIHRhcGVfMzU5MF9wcmludF9taW1fbXNnX2YwKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqc2Vuc2U7CisJY2hhciAqZXhjZXB0aW9uLCAqc2VydmljZTsKKworCWV4Y2VwdGlvbiA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisJc2VydmljZSA9IGttYWxsb2MoQlVGU0laRSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWV4Y2VwdGlvbiB8fCAhc2VydmljZSkKKwkJZ290byBvdXRfbm9tZW07CiAKIAlzZW5zZSA9IChzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICopIGlyYi0+ZWN3OwogCS8qIEV4Y2VwdGlvbiBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MC5lbWMpIHsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERhdGEgZGVncmFkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRGF0YSBkZWdyYWRlZCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERhdGEgZGVncmFkZWQgaW4gcGFydGlvbiAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1wKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRGF0YSBkZWdyYWRlZCBpbiBwYXJ0aW9uICVpIiwKKwkJCXNlbnNlLT5mbXQuZjcwLm1wKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNZWRpdW0gZGVncmFkZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiTWVkaXVtIGRlZ3JhZGVkIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIGRlZ3JhZGVkIGluIHBhcnRpdGlvbiAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1wKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiTWVkaXVtIGRlZ3JhZGVkIGluIHBhcnRpdGlvbiAlaSIsCisJCQlzZW5zZS0+Zm10LmY3MC5tcCk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQmxvY2sgMCBFcnJvclxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJCbG9jayAwIEVycm9yIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIEV4Y2VwdGlvbiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tZCk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIk1lZGl1bSBFeGNlcHRpb24gMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLm1kKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogTUlNIEV4TXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5lbWMpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzAuZW1jKTsKIAkJYnJlYWs7CiAJfQogCS8qIFNlcnZpY2UgTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzAuc21jKSB7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZWZlcmVuY2UgTWVkaWEgbWFpbnRlbmFuY2UgcHJvY2VkdXJlICVpXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAubWQpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVmZXJlbmNlIE1lZGlhIG1haW50ZW5hbmNlICIKKwkJCSJwcm9jZWR1cmUgJWkiLCBzZW5zZS0+Zm10LmY3MC5tZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5zbWMpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLnNtYyk7CiAJCWJyZWFrOwogCX0KKworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUYXBlIG1lZGlhIGluZm9ybWF0aW9uOiBleGNlcHRpb24gJXMsICIKKwkJInNlcnZpY2UgJXNcbiIsIGV4Y2VwdGlvbiwgc2VydmljZSk7CisKK291dF9ub21lbToKKwlrZnJlZShleGNlcHRpb24pOworCWtmcmVlKHNlcnZpY2UpOwogfQogCiAvKgpAQCAtMTA1MSwxMDggKzEwNjAsMTA4IEBACiB0YXBlXzM1OTBfcHJpbnRfaW9fc2ltX21zZ19mMShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UgIgorCQkJImltcGFjdCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBjaGFubmVsICIKKwkJCSJpbnRlcmZhY2UgMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBkZXZpY2UgcGF0aCAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiBvbiBkZXZpY2UgcGF0aCAiCisJCQkiMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDU6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBsaWJyYXJ5IHBhdGggMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gbGlicmFyeSBwYXRoICIKKwkJCSIweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIG5vZGUgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gbm9kZSAweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBwYXJ0aXRpb24gMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gcGFydGl0aW9uICIKKwkJCSIweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFNJTSBFeE1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuZW1jKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLmVtYyk7CiAJfQogCS8qIFNlcnZpY2UgTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuc21jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgaW1wYWN0IGlzIHVua25vd25cbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciBpbXBhY3QgaXMgdW5rbm93biIpOwogCQlicmVhazsKIAljYXNlIDB4MDI6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIG5vdCBpbXBhY3QgY3UgcGVyZm9ybWFuY2VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIG5vdCBpbXBhY3QgY3UgIgorCQkJInBlcmZvcm1hbmNlIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGUgIgorCQkJCSIweCV4IG9uIENVIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGVzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJub2RlcyAoMHgleC0weCV4KSBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNhbm5lbCBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoIDB4JXggb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwiCisJCQkJIiBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSIKKwkJCQkiIHBhdGggMHgleCBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UiCisJCQkJIiBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxpYnJhcnkgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImxpYnJhcnkgcGF0aCAweCV4IG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbGlicmFyeSBwYXRocyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibGlicmFyeSBwYXRocyAoMHgleC0weCV4KSBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBDVVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gQ1UiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogU0lNIFNlcnZpY2VNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNtYyk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuc21jKTsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiSS9PIHN1YnN5c3RlbSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uIgorCQkiICVzLCBzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworb3V0X25vbWVtOgorCWtmcmVlKGV4Y2VwdGlvbik7CisJa2ZyZWUoc2VydmljZSk7CiB9CiAKIC8qCkBAIC0xMTYyLDExMSArMTE3MSwxMDkgQEAKIHRhcGVfMzU5MF9wcmludF9kZXZfc2ltX21zZ19mMihzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CiAJY2FzZSAweDAxOgotCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkVmZmVjdCBvZiBmYWlsdXJlIGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UiCisJCQkiIGltcGFjdCIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBvbiBjaGFubmVsICIKKwkJCSJpbnRlcmZhY2UgMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBsb2FkZXIgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gb24gbG9hZGVyIDB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIG9uIG1lc3NhZ2UgZGlzcGxheSAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBvbiBtZXNzYWdlIGRpc3BsYXkiCisJCQkiIDB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA2OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gaW4gdGFwZSBwYXRoXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBpbiB0YXBlIHBhdGgiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gaW4gZHJpdmVcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIGluIGRyaXZlIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERTSU0gRXhNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLmVtYyk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5lbWMpOwogCX0KIAkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLnNtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIGltcGFjdCBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgaW1wYWN0IGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGRldmljZSBwZXJmb3JtYW5jZVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgbm90IGltcGFjdCBkZXZpY2UgIgorCQkJInBlcmZvcm1hbmNlIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjaGFubmVsIHBhdGggIgotCQkJCSAgICIweCV4IG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJjaGFubmVsIHBhdGggMHgleCBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGNoYW5uZWwgcGF0aCAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDQ6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgaW50ZXJmYWNlIDB4JXggIgotCQkJCSAgICJvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiaW50ZXJmYWNlIDB4JXggb24gRFYiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgaW50ZXJmYWNlcyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiaW50ZXJmYWNlcyAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciAweCV4ICIKLQkJCQkgICAib24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIiCisJCQkJIiAweCV4IG9uIERWIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciIKKwkJCQkiICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIERWXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBEViIpOwogCQlicmVhazsKIAljYXNlIDB4MDg6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbWVzc2FnZSAiCi0JCQkJICAgImRpc3BsYXkgMHgleCBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibWVzc2FnZSBkaXNwbGF5IDB4JXggb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBtZXNzYWdlICIKLQkJCQkgICAiZGlzcGxheXMgKDB4JXgtMHgleCkgb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJtZXNzYWdlIGRpc3BsYXlzICgweCV4LTB4JXgpIG9uIERWIiwKKwkJCQkgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA5OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDbGVhbiBEVlxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJDbGVhbiBEViIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEU0lNIFNlcnZpY2VNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNtYyk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuc21jKTsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV2aWNlIHN1YnN5c3RlbSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uIgorCQkiICVzLCBzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworb3V0X25vbWVtOgorCWtmcmVlKGV4Y2VwdGlvbik7CisJa2ZyZWUoc2VydmljZSk7CiB9CiAKIC8qCkBAIC0xMjgyLDQ2ICsxMjg5LDQ0IEBACiAJCXJldHVybjsKIAlpZiAoKHNlbnNlLT5tYyA+IDApICYmIChzZW5zZS0+bWMgPCBUQVBFXzM1OTBfTUFYX01TRykpIHsKIAkJaWYgKHRhcGVfMzU5MF9tc2dbc2Vuc2UtPm1jXSAhPSBOVUxMKQotCQkJUFJJTlRfV0FSTigiKCVzKTogJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgdGFwZV8zNTkwX21zZ1tzZW5zZS0+bWNdKTsKLQkJZWxzZSB7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBNZXNzYWdlIENvZGUgMHgleFxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+bWMpOwotCQl9CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBoYXMgIgorCQkJCSJpc3N1ZWQgc2Vuc2UgbWVzc2FnZSAlc1xuIiwKKwkJCQl0YXBlXzM1OTBfbXNnW3NlbnNlLT5tY10pOworCQllbHNlCisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBoYXMgIgorCQkJCSJpc3N1ZWQgYW4gdW5rbm93biBzZW5zZSBtZXNzYWdlIGNvZGUgMHgleFxuIiwKKwkJCQlzZW5zZS0+bWMpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMCkgewogCQkvKiBTdGFuZGFyZCBNZWRpYSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTRVY9JWksIE1DPSUwMngsIEVTPSV4LyV4LCAiCi0JCQkgICAiUkM9JTAyeC0lMDR4LSUwMnhcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkgICBzZW5zZS0+Zm10LmY3MC5zZXYsIHNlbnNlLT5tYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLmVtYywgc2Vuc2UtPmZtdC5mNzAuc21jLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAucmVmY29kZSwgc2Vuc2UtPmZtdC5mNzAubWlkLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAuZmlkKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIk1JTSBTRVY9JWksIE1DPSUwMngsIEVTPSV4LyV4LCAiCisJCQkiUkM9JTAyeC0lMDR4LSUwMnhcbiIsIHNlbnNlLT5mbXQuZjcwLnNldiwgc2Vuc2UtPm1jLAorCQkJc2Vuc2UtPmZtdC5mNzAuZW1jLCBzZW5zZS0+Zm10LmY3MC5zbWMsCisJCQlzZW5zZS0+Zm10LmY3MC5yZWZjb2RlLCBzZW5zZS0+Zm10LmY3MC5taWQsCisJCQlzZW5zZS0+Zm10LmY3MC5maWQpOwogCQl0YXBlXzM1OTBfcHJpbnRfbWltX21zZ19mMChkZXZpY2UsIGlyYik7CiAJCXJldHVybjsKIAl9CiAJaWYgKHNlbnNlLT5tYyA9PSAweGYxKSB7CiAJCS8qIFN0YW5kYXJkIEkvTyBTdWJzeXN0ZW0gU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IElPU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngsICIKLQkJCSAgICJNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEuc2V2LAotCQkJICAgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCi0JCQkgICBzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcxLnNtYywgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiSU9TSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCwiCisJCQkiIE1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCisJCQlzZW5zZS0+Zm10LmY3MS5zZXYsIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAorCQkJc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsIHNlbnNlLT5mbXQuZjcxLnNtYywKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKIAkJdGFwZV8zNTkwX3ByaW50X2lvX3NpbV9tc2dfZjEoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMikgewogCQkvKiBTdGFuZGFyZCBEZXZpY2UgU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCi0JCVBSSU5UX1dBUk4oIiglcyk6IERFVlNJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4LCAiCi0JCQkgICAiTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNldiwKLQkJCSAgIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAotCQkJICAgc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5zbWMsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRFVlNJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4IgorCQkJIiwgTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNldiwgZGV2aWNlLT5jZGV2LT5pZC5kZXZfbW9kZWwsCisJCQlzZW5zZS0+bWMsIHNlbnNlLT5mbXQuZjcxLmVtYywgc2Vuc2UtPmZtdC5mNzEuc21jLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTEsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLAorCQkJc2Vuc2UtPmZtdC5mNzEucmVmY29kZTMpOwogCQl0YXBlXzM1OTBfcHJpbnRfZGV2X3NpbV9tc2dfZjIoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTMyOSw4ICsxMzM0LDggQEAKIAkJLyogU3RhbmRhcmQgTGlicmFyeSBTZXJ2aWNlIEluZm9ybWF0aW9uIE1lc3NhZ2UgKi8KIAkJcmV0dXJuOwogCX0KLQlQUklOVF9XQVJOKCIoJXMpOiBEZXZpY2UgTWVzc2FnZSgleClcbiIsCi0JCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5tYyk7CisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaGFzIGlzc3VlZCBhbiB1bmtub3duICIKKwkJInNlbnNlIG1lc3NhZ2UgY29kZSAleFxuIiwgc2Vuc2UtPm1jKTsKIH0KIAogc3RhdGljIGludCB0YXBlXzM1OTBfY3J5cHRfZXJyb3Ioc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsCkBAIC0xMzU1LDkgKzEzNjAsOCBAQAogCQkvKiBObyBjb25uZWN0aW9uIHRvIEVLTSAqLwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT1RDT05OKTsKIAotCVBSSU5UX0VSUigiKCVzKTogVW5hYmxlIHRvIGdldCBlbmNyeXB0aW9uIGtleSBmcm9tIEVLTVxuIiwgYnVzX2lkKTsKLQlQUklOVF9FUlIoIiglcyk6IENVPSUwMlggRFJJVkU9JTA2WCBFS009JTAyWDolMDRYXG4iLCBidXNfaWQsIGN1X3JjLAotCQlkcnZfcmMsIGVrbV9yYzEsIGVrbV9yYzIpOworCWRldl9lcnIgKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZmFpbGVkIHRvIG9idGFpbiB0aGUgIgorCQkiZW5jcnlwdGlvbiBrZXkgZnJvbSBFS01cbiIpOwogCiAJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9LRVkpOwogfQpAQCAtMTQ0Myw4ICsxNDQ3LDYgQEAKIAkJICogcHJpbnQgYWRkaXRpb25hbCBtc2cgc2luY2UgZGVmYXVsdCBtc2cKIAkJICogImRldmljZSBpbnRlcnZlbnRpb24iIGlzIG5vdCB2ZXJ5IG1lYW5pbmdmdWxsCiAJCSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBUYXBlIG9wZXJhdGlvbiB3aGVuIG1lZGl1bSBub3QgbG9hZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX1VOTE9BREVEKTsKIAkJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19DUllQVF9PRkYpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT01FRElVTSk7CkBAIC0xNDkwLDE5ICsxNDkyLDEzIEBACiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PTUVESVVNKTsKIAogCWNhc2UgMHg2MDIwOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDYXJ0cmlkZ2Ugb2Ygd3JvbmcgdHlwZSA/XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU1FRElVTVRZUEUpOwogCiAJY2FzZSAweDgwMTE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEFub3RoZXIgaG9zdCBoYXMgcmVzZXJ2ZWQgdGhlIHRhcGUgZGV2aWNlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRVBFUk0pOwogCWNhc2UgMHg4MDEzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBBbm90aGVyIGhvc3QgaGFzIHByaXZpbGVnZWQgYWNjZXNzIHRvIHRoZSAiCi0JCQkgICAidGFwZSBkZXZpY2VcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQlQUklOVF9XQVJOKCIoJXMpOiBUbyBzb2x2ZSB0aGUgcHJvYmxlbSB1bmxvYWQgdGhlIGN1cnJlbnQgIgotCQkJICAgImNhcnRyaWRnZSFcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBkaWZmZXJlbnQgaG9zdCBoYXMgcHJpdmlsZWdlZCIKKwkJCSIgYWNjZXNzIHRvIHRoZSB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVQRVJNKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CkBAIC0xNTUyLDkgKzE1NDgsNyBAQAogCX0KIAogCURCRl9FVkVOVCg2LCAieHVua25vd25pcnFcbiIpOwotCVBSSU5UX0VSUigiVW5leHBlY3RlZCBpbnRlcnJ1cHQuXG4iKTsKLQlQUklOVF9FUlIoIkN1cnJlbnQgb3AgaXM6ICVzIiwgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7Ci0JdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKIAlyZXR1cm4gVEFQRV9JT19TVE9QOwogfQogCkBAIC0xNjA5LDcgKzE2MDMsNiBAQAogCWlmIChyYykKIAkJZ290byBmYWlsX3JkY19kYXRhOwogCWlmIChyZGNfZGF0YS0+ZGF0YVszMV0gPT0gMHgxMykgewotCQlQUklOVF9JTkZPKCJEZXZpY2UgaGFzIGNyeXB0byBzdXBwb3J0XG4iKTsKIAkJZGF0YS0+Y3J5cHRfaW5mby5jYXBhYmlsaXR5IHw9IFRBUEUzOTBfQ1JZUFRfU1VQUE9SVEVEX01BU0s7CiAJCXRhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0KGRldmljZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCBhZTE4YmFmLi5mMzJlODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKgkJIFN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMjMsOCArMjUsNiBAQAogCiAjaW5jbHVkZSAidGFwZS5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfQkxPQ0s6ICIKLQogI2RlZmluZSBUQVBFQkxPQ0tfTUFYX1NFQwkxMDAKICNkZWZpbmUgVEFQRUJMT0NLX01JTl9SRVFVRVVFCTMKIApAQCAtMjc5LDggKzI3OSw2IEBACiAJdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7CiAKIAlpZiAoIWRldmljZS0+YmxrX2RhdGEuZGlzaykgewotCQlQUklOVF9FUlIoIiglcyk6IE5vIGdlbmRpc2sgdG8gY2xlYW4gdXAhXG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWdvdG8gY2xlYW51cF9xdWV1ZTsKIAl9CiAKQEAgLTMxNCw3ICszMTIsOCBAQAogCWlmICghZGV2aWNlLT5ibGtfZGF0YS5tZWRpdW1fY2hhbmdlZCkKIAkJcmV0dXJuIDA7CiAKLQlQUklOVF9JTkZPKCJEZXRlY3RpbmcgbWVkaWEgc2l6ZS4uLlxuIik7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRGV0ZXJtaW5pbmcgdGhlIHNpemUgb2YgdGhlIHJlY29yZGVkICIKKwkJImFyZWEuLi5cbiIpOwogCXJjID0gdGFwZV9tdG9wKGRldmljZSwgTVRGU0ZNLCAxKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTM0MSw3ICszNDAsOCBAQAogCWRldmljZS0+Ym9mID0gcmM7CiAJbnJfb2ZfYmxrcyAtPSByYzsKIAotCVBSSU5UX0lORk8oIkZvdW5kICVpIGJsb2NrcyBvbiBtZWRpYVxuIiwgbnJfb2ZfYmxrcyk7CisJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHNpemUgb2YgdGhlIHJlY29yZGVkIGFyZWEgaXMgJWkgIgorCQkiYmxvY2tzXG4iLCBucl9vZl9ibGtzKTsKIAlzZXRfY2FwYWNpdHkoZGV2aWNlLT5ibGtfZGF0YS5kaXNrLAogCQlucl9vZl9ibGtzKihUQVBFQkxPQ0tfSFNFQ19TSVpFLzUxMikpOwogCkBAIC0zNzYsOCArMzc2LDggQEAKIAogCWlmIChkZXZpY2UtPnJlcXVpcmVkX3RhcGVtYXJrcykgewogCQlEQkZfRVZFTlQoMiwgIlRCTE9DSzogbWlzc2luZyB0YXBlbWFya3NcbiIpOwotCQlQUklOVF9FUlIoIlRCTE9DSzogUmVmdXNpbmcgdG8gb3BlbiB0YXBlIHdpdGggbWlzc2luZyIKLQkJCSIgZW5kIG9mIGZpbGUgbWFya3MuXG4iKTsKKwkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiT3BlbmluZyB0aGUgdGFwZSBmYWlsZWQgYmVjYXVzZSIKKwkJCSIgb2YgbWlzc2luZyBlbmQtb2YtZmlsZSBtYXJrc1xuIik7CiAJCXJjID0gLUVQRVJNOwogCQlnb3RvIHB1dF9kZXZpY2U7CiAJfQpAQCAtNDUyLDcgKzQ1Miw2IEBACiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCVBSSU5UX1dBUk4oImludmFsaWQgaW9jdGwgMHgleFxuIiwgY29tbWFuZCk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJfQogCkBAIC00NzQsNyArNDczLDYgQEAKIAogCWlmICh0YXBlYmxvY2tfbWFqb3IgPT0gMCkKIAkJdGFwZWJsb2NrX21ham9yID0gcmM7Ci0JUFJJTlRfSU5GTygidGFwZSBnZXRzIG1ham9yICVkIGZvciBibG9jayBkZXZpY2VcbiIsIHRhcGVibG9ja19tYWpvcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKaW5kZXggYmUwY2UyMi4uMzE1NjZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKQEAgLTI0LDggKzI0LDYgQEAKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogI2luY2x1ZGUgInRhcGVfY2xhc3MuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0NIQVI6ICIKLQogI2RlZmluZSBUQVBFQ0hBUl9NQUpPUgkJMAkvKiBnZXQgZHluYW1pYyBtYWpvciAqLwogCiAvKgpAQCAtMTAyLDggKzEwMCw2IEBACiAJaWYgKGJsb2NrX3NpemUgPiBNQVhfQkxPQ0tTSVpFKSB7CiAJCURCRl9FVkVOVCgzLCAiSW52YWxpZCBibG9ja3NpemUgKCV6ZCA+ICVkKVxuIiwKIAkJCWJsb2NrX3NpemUsIE1BWF9CTE9DS1NJWkUpOwotCQlQUklOVF9FUlIoIkludmFsaWQgYmxvY2tzaXplICglemQ+ICVkKVxuIiwKLQkJCWJsb2NrX3NpemUsIE1BWF9CTE9DS1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ4NSw3ICs0ODEsNiBAQAogCQlyZXR1cm4gLTE7CiAKIAl0YXBlY2hhcl9tYWpvciA9IE1BSk9SKGRldik7Ci0JUFJJTlRfSU5GTygidGFwZSBnZXRzIG1ham9yICVkIGZvciBjaGFyYWN0ZXIgZGV2aWNlc1xuIiwgTUFKT1IoZGV2KSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5Niw3ICs0OTEsNSBAQAogdm9pZAogdGFwZWNoYXJfZXhpdCh2b2lkKQogewotCVBSSU5UX0lORk8oInRhcGUgcmVsZWFzZXMgbWFqb3IgJWQgZm9yIGNoYXJhY3RlciBkZXZpY2VzXG4iLAotCQl0YXBlY2hhcl9tYWpvcik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKHRhcGVjaGFyX21ham9yLCAwKSwgMjU2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggZjliYjUxZi4uMDhjMDlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CSAgICAgLy8gZm9yIGtlcm5lbCBwYXJhbWV0ZXJzCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgkgICAgIC8vIGZvciByZXF1ZXN0aW5nIG1vZHVsZXMKQEAgLTI1LDcgKzI2LDYgQEAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0NPUkU6ICIKICNkZWZpbmUgTE9OR19CVVNZX1RJTUVPVVQgMTgwIC8qIHNlY29uZHMgKi8KIAogc3RhdGljIHZvaWQgX190YXBlX2RvX2lycSAoc3RydWN0IGNjd19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGlyYiAqKTsKQEAgLTIxNCwxMyArMjE0LDEzIEBACiAJc3dpdGNoKG5ld3N0YXRlKXsKIAljYXNlIE1TX1VOTE9BREVEOgogCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgfD0gR01UX0RSX09QRU4ofjApOwotCQlQUklOVF9JTkZPKCIoJXMpOiBUYXBlIGlzIHVubG9hZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGNhcnRyaWRnZSBoYXMgYmVlbiAiCisJCQkic3VjY2Vzc2Z1bGx5IHVubG9hZGVkXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBNU19MT0FERUQ6CiAJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyAmPSB+R01UX0RSX09QRU4ofjApOwotCQlQUklOVF9JTkZPKCIoJXMpOiBUYXBlIGhhcyBiZWVuIG1vdW50ZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSB0YXBlIGNhcnRyaWRnZSBoYXMgYmVlbiAiCisJCQkibW91bnRlZFxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8vIHByaW50IG5vdGhpbmcKQEAgLTMzMyw3ICszMzMsNiBAQAogCS8qIExldCB0aGUgZGlzY2lwbGluZSBoYXZlIGEgZ28gYXQgdGhlIGRldmljZS4gKi8KIAlkZXZpY2UtPmRpc2NpcGxpbmUgPSBkaXNjaXBsaW5lOwogCWlmICghdHJ5X21vZHVsZV9nZXQoZGlzY2lwbGluZS0+b3duZXIpKSB7Ci0JCVBSSU5UX0VSUigiQ2Fubm90IGdldCBtb2R1bGUuIE1vZHVsZSBnb25lLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzkxLDcgKzM5MCw2IEBACiB0YXBlX2dlbmVyaWNfb2ZmbGluZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlpZiAoIWRldmljZSkgewotCQlQUklOVF9FUlIoInRhcGVfZ2VuZXJpY19vZmZsaW5lOiBubyBzdWNoIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDEzLDkgKzQxMSw2IEBACiAJCQlEQkZfRVZFTlQoMywgIiglMDh4KTogU2V0IG9mZmxpbmUgZmFpbGVkICIKIAkJCQkiLSBkcml2ZSBpbiB1c2UuXG4iLAogCQkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBTZXQgb2ZmbGluZSBmYWlsZWQgIgotCQkJCSItIGRyaXZlIGluIHVzZS5cbiIsCi0JCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC00MzUsMTQgKzQzMCwxMSBAQAogCWRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0YXBlX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwotCQlQUklOVF9JTkZPICgiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCi0JCQkgICAgInRhcGUgaW5mbyBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAJZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwotCQlQUklOVF9JTkZPKCJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1vZGVzZXQgYnl0ZVxuIik7CiAJCWtmcmVlKGRldmljZSk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KQEAgLTQ5MCw3ICs0ODIsNiBAQAogCX0gZWxzZSB7CiAJCWlmIChyZW1haW4gPCAwKSB7CiAJCQlEQkZfRVZFTlQoNCwgInB1dCBkZXZpY2Ugd2l0aG91dCByZWZlcmVuY2VcbiIpOwotCQkJUFJJTlRfRVJSKCJwdXQgZGV2aWNlIHdpdGhvdXQgcmVmZXJlbmNlXG4iKTsKIAkJfSBlbHNlIHsKIAkJCURCRl9FVkVOVCg0LCAidGFwZV9mcmVlX2RldmljZSglcClcbiIsIGRldmljZSk7CiAJCQlrZnJlZShkZXZpY2UtPm1vZGVzZXRfYnl0ZSk7CkBAIC01MzgsOCArNTI5LDYgQEAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNkZXYtPmRldi5rb2JqLCAmdGFwZV9hdHRyX2dyb3VwKTsKIAlpZiAocmV0KSB7CiAJCXRhcGVfcHV0X2RldmljZShkZXZpY2UpOwotCQlQUklOVF9FUlIoInByb2JlIGZhaWxlZCBmb3IgdGFwZSBkZXZpY2UgJXNcbiIsCi0JCQkgIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJY2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gZGV2aWNlOwpAQCAtNTQ3LDcgKzUzNiw2IEBACiAJZGV2aWNlLT5jZGV2ID0gY2RldjsKIAljY3dfZGV2aWNlX2dldF9pZChjZGV2LCAmZGV2X2lkKTsKIAlkZXZpY2UtPmNkZXZfaWQgPSBkZXZpZF90b19pbnQoJmRldl9pZCk7Ci0JUFJJTlRfSU5GTygidGFwZSBkZXZpY2UgJXMgZm91bmRcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODQsNyArNTcyLDYgQEAKIAogCWRldmljZSA9IGNkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoIWRldmljZSkgewotCQlQUklOVF9FUlIoIk5vIGRldmljZSBwb2ludGVyIGluIHRhcGVfZ2VuZXJpY19yZW1vdmUhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlEQkZfTEgoMywgIiglMDh4KTogdGFwZV9nZW5lcmljX3JlbW92ZSglcClcbiIsIGRldmljZS0+Y2Rldl9pZCwgY2Rldik7CkBAIC02MTUsMTAgKzYwMiw4IEBACiAJCQkgKi8KIAkJCURCRl9FVkVOVCgzLCAiKCUwOHgpOiBEcml2ZSBpbiB1c2UgdmFuaXNoZWQhXG4iLAogCQkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCQlQUklOVF9XQVJOKCIoJXMpOiBEcml2ZSBpbiB1c2UgdmFuaXNoZWQgLSAiCi0JCQkJImV4cGVjdCB0cm91YmxlIVxuIiwKLQkJCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJCVBSSU5UX1dBUk4oIlN0YXRlIHdhcyAlaVxuIiwgZGV2aWNlLT50YXBlX3N0YXRlKTsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgdGFwZSB1bml0IHdhcyBkZXRhY2hlZCIKKwkJCQkiIHdoaWxlIGluIHVzZVxuIik7CiAJCQl0YXBlX3N0YXRlX3NldChkZXZpY2UsIFRTX05PVF9PUEVSKTsKIAkJCV9fdGFwZV9kaXNjYXJkX3JlcXVlc3RzKGRldmljZSk7CiAJCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwpAQCAtNjM5LDggKzYyNCw3IEBACiB7CiAJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmIChkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fCAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpCi0JCUJVRygpOworCUJVR19PTihkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fCAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpOwogCiAJREJGX0xIKDYsICJ0YXBlX2FsbG9jX3JlcXVlc3QoJWQsICVkKVxuIiwgY3BsZW5ndGgsIGRhdGFzaXplKTsKIApAQCAtNzk3LDggKzc4MSw3IEBACiAJZGV2aWNlID0gKHN0cnVjdCB0YXBlX2RldmljZSAqKSBkYXRhOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGRldmljZS0+cmVxX3F1ZXVlLm5leHQsIHN0cnVjdCB0YXBlX3JlcXVlc3QsIGxpc3QpOwotCWlmIChyZXF1ZXN0LT5zdGF0dXMgIT0gVEFQRV9SRVFVRVNUX0xPTkdfQlVTWSkKLQkJQlVHKCk7CisJQlVHX09OKHJlcXVlc3QtPnN0YXR1cyAhPSBUQVBFX1JFUVVFU1RfTE9OR19CVVNZKTsKIAlEQkZfTEgoNiwgIiUwOHg6IExvbmcgYnVzeSB0aW1lb3V0LlxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKIAlfX3RhcGVfc3RhcnRfbmV4dF9yZXF1ZXN0KGRldmljZSk7CiAJZGV2aWNlLT5sYl90aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7CkBAIC04MzAsMzAgKzgxMyw2IEBACiB9CiAKIC8qCi0gKiBXcml0ZSBzZW5zZSBkYXRhIHRvIGNvbnNvbGUvZGJmCi0gKi8KLXZvaWQKLXRhcGVfZHVtcF9zZW5zZShzdHJ1Y3QgdGFwZV9kZXZpY2UqIGRldmljZSwgc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCwKLQkJc3RydWN0IGlyYiAqaXJiKQotewotCXVuc2lnbmVkIGludCAqc3B0cjsKLQotCVBSSU5UX0lORk8oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCVBSSU5UX0lORk8oIkRTVEFUIDogJTAyeCAgQ1NUQVQ6ICUwMngJQ1BBOiAlMDR4XG4iLAotCQkgICBpcmItPnNjc3cuY21kLmRzdGF0LCBpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmNwYSk7Ci0JUFJJTlRfSU5GTygiREVWSUNFOiAlc1xuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JaWYgKHJlcXVlc3QgIT0gTlVMTCkKLQkJUFJJTlRfSU5GTygiT1AJICA6ICVzXG4iLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQotCXNwdHIgPSAodW5zaWduZWQgaW50ICopIGlyYi0+ZWN3OwotCVBSSU5UX0lORk8oIlNlbnNlIGRhdGE6ICUwOFggJTA4WCAlMDhYICUwOFggXG4iLAotCQkgICBzcHRyWzBdLCBzcHRyWzFdLCBzcHRyWzJdLCBzcHRyWzNdKTsKLQlQUklOVF9JTkZPKCJTZW5zZSBkYXRhOiAlMDhYICUwOFggJTA4WCAlMDhYIFxuIiwKLQkJICAgc3B0cls0XSwgc3B0cls1XSwgc3B0cls2XSwgc3B0cls3XSk7Ci0JUFJJTlRfSU5GTygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotfQotCi0vKgogICogV3JpdGUgc2Vuc2UgZGF0YSB0byBkYmYKICAqLwogdm9pZApAQCAtMTA1MSw4ICsxMDEwLDYgQEAKIAogCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgY2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewotCQlQUklOVF9FUlIoImNvdWxkIG5vdCBnZXQgZGV2aWNlIHN0cnVjdHVyZSBmb3IgJXMgIgotCQkJICAiaW4gaW50ZXJydXB0XG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAJcmVxdWVzdCA9IChzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICopIGludHBhcm07CkBAIC0xMDY0LDEzICsxMDIxLDEzIEBACiAJCS8qIEZJWE1FOiBXaGF0IHRvIGRvIHdpdGggdGhlIHJlcXVlc3Q/ICovCiAJCXN3aXRjaCAoUFRSX0VSUihpcmIpKSB7CiAJCQljYXNlIC1FVElNRURPVVQ6Ci0JCQkJUFJJTlRfV0FSTigiKCVzKTogUmVxdWVzdCB0aW1lZCBvdXRcbiIsCisJCQkJREJGX0xIKDEsICIoJXMpOiBSZXF1ZXN0IHRpbWVkIG91dFxuIiwKIAkJCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJY2FzZSAtRUlPOgogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIC1FSU8pOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlQUklOVF9FUlIoIiglcyk6IFVuZXhwZWN0ZWQgaS9vIGVycm9yICVsaVxuIiwKKwkJCQlEQkZfTEgoMSwgIiglcyk6IFVuZXhwZWN0ZWQgaS9vIGVycm9yICVsaVxuIiwKIAkJCQkJZGV2X25hbWUoJmNkZXYtPmRldiksCiAJCQkJCVBUUl9FUlIoaXJiKSk7CiAJCX0KQEAgLTExODIsOCArMTEzOSw2IEBACiAJCWRlZmF1bHQ6CiAJCQlpZiAocmMgPiAwKSB7CiAJCQkJREJGX0VWRU5UKDYsICJ4dW5rbm93bnJjXG4iKTsKLQkJCQlQUklOVF9FUlIoIkludmFsaWQgcmV0dXJuIGNvZGUgZnJvbSBkaXNjaXBsaW5lICIKLQkJCQkgIAkiaW50ZXJydXB0IGZ1bmN0aW9uLlxuIik7CiAJCQkJX190YXBlX2VuZF9yZXF1ZXN0KGRldmljZSwgcmVxdWVzdCwgLUVJTyk7CiAJCQl9IGVsc2UgewogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIHJjKTsKQEAgLTEzMjMsNyArMTI3OCw2IEBACiBFWFBPUlRfU1lNQk9MKHRhcGVfbWVkX3N0YXRlX3NldCk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfYWxsb2NfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZnJlZV9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0wodGFwZV9kdW1wX3NlbnNlKTsKIEVYUE9SVF9TWU1CT0wodGFwZV9kdW1wX3NlbnNlX2RiZik7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZG9faW8pOwogRVhQT1JUX1NZTUJPTCh0YXBlX2RvX2lvX2FzeW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKaW5kZXggOGEzNzZhZi4uMjAyZjQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKQEAgLTIwLDggKzIwLDYgQEAKIAogI2luY2x1ZGUgInRhcGUuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX1BST0M6ICIKLQogc3RhdGljIGNvbnN0IGNoYXIgKnRhcGVfbWVkX3N0X3ZlcmJvc2VbTVNfU0laRV0gPQogewogCVtNU19VTktOT1dOXSA9ICJVTktOT1dOICIsCkBAIC0xMjgsNyArMTI2LDYgQEAKIAkJcHJvY19jcmVhdGUoInRhcGVkZXZpY2VzIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMLAogCQkJICAgICZ0YXBlX3Byb2Nfb3BzKTsKIAlpZiAodGFwZV9wcm9jX2RldmljZXMgPT0gTlVMTCkgewotCQlQUklOVF9XQVJOKCJ0YXBlOiBDYW5ub3QgcmVnaXN0ZXIgcHJvY2ZzIGVudHJ5IHRhcGVkZXZpY2VzXG4iKTsKIAkJcmV0dXJuOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCmluZGV4IDViZDU3M2QuLjFhOTQyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgInRhcGUuaCIKICNpbmNsdWRlICJ0YXBlX3N0ZC5oIgogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfU1REOiAiCi0KIC8qCiAgKiB0YXBlX3N0ZF9hc3NpZ24KICAqLwpAQCAtMzksMTYgKzM3LDE1IEBACiAJaW50IHJjOwogCiAJcmVxdWVzdCA9IChzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICopIGRhdGE7Ci0JaWYgKChkZXZpY2UgPSByZXF1ZXN0LT5kZXZpY2UpID09IE5VTEwpCi0JCUJVRygpOworCWRldmljZSA9IHJlcXVlc3QtPmRldmljZTsKKwlCVUdfT04oIWRldmljZSk7CiAKIAlEQkZfRVZFTlQoMywgIiUwOHg6IEFzc2lnbm1lbnQgdGltZW91dC4gRGV2aWNlIGJ1c3kuXG4iLAogCQkJZGV2aWNlLT5jZGV2X2lkKTsKIAlyYyA9IHRhcGVfY2FuY2VsX2lvKGRldmljZSwgcmVxdWVzdCk7CiAJaWYocmMpCi0JCVBSSU5UX0VSUigiKCVzKTogQXNzaWduIHRpbWVvdXQ6IENhbmNlbCBmYWlsZWQgd2l0aCByYyA9ICVpXG4iLAorCQlEQkZfRVZFTlQoMywgIiglcyk6IEFzc2lnbiB0aW1lb3V0OiBDYW5jZWwgZmFpbGVkIHdpdGggcmMgPSAlaVxuIiwKIAkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKLQogfQogCiBpbnQKQEAgLTgyLDggKzc5LDYgQEAKIAlkZWxfdGltZXIoJnRpbWVvdXQpOwogCiAJaWYgKHJjICE9IDApIHsKLQkJUFJJTlRfV0FSTigiJXM6IGFzc2lnbiBmYWlsZWQgLSBkZXZpY2UgbWlnaHQgYmUgYnVzeVxuIiwKLQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlEQkZfRVZFTlQoMywgIiUwOHg6IGFzc2lnbiBmYWlsZWQgLSBkZXZpY2UgbWlnaHQgYmUgYnVzeVxuIiwKIAkJCWRldmljZS0+Y2Rldl9pZCk7CiAJfSBlbHNlIHsKQEAgLTEwNSw4ICsxMDAsNiBAQAogCWlmIChkZXZpY2UtPnRhcGVfc3RhdGUgPT0gVFNfTk9UX09QRVIpIHsKIAkJREJGX0VWRU5UKDMsICIoJTA4eCk6IENhbid0IHVuYXNzaWduIGRldmljZVxuIiwKIAkJCWRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENhbid0IHVuYXNzaWduIGRldmljZSAtIGRldmljZSBnb25lXG4iLAotCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTIwLDggKzExMyw2IEBACiAKIAlpZiAoKHJjID0gdGFwZV9kb19pbyhkZXZpY2UsIHJlcXVlc3QpKSAhPSAwKSB7CiAJCURCRl9FVkVOVCgzLCAiJTA4eDogVW5hc3NpZ24gZmFpbGVkXG4iLCBkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCIlczogVW5hc3NpZ24gZmFpbGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJfSBlbHNlIHsKIAkJREJGX0VWRU5UKDMsICIlMDh4OiBUYXBlIHVuYXNzaWduZWRcbiIsIGRldmljZS0+Y2Rldl9pZCk7CiAJfQpAQCAtMjQyLDggKzIzMyw2IEBACiAJaWYgKGNvdW50ID4gTUFYX0JMT0NLU0laRSkgewogCQlEQkZfRVZFTlQoMywgIkludmFsaWQgYmxvY2sgc2l6ZSAoJWQgPiAlZCkgZ2l2ZW4uXG4iLAogCQkJY291bnQsIE1BWF9CTE9DS1NJWkUpOwotCQlQUklOVF9FUlIoIkludmFsaWQgYmxvY2sgc2l6ZSAoJWQgPiAlZCkgZ2l2ZW4uXG4iLAotCQkJY291bnQsIE1BWF9CTE9DS1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTYzMywxNCArNjIyLDYgQEAKIAogCWlmIChtdF9jb3VudCA8IDAgfHwgbXRfY291bnQgPiAxKSB7CiAJCURCRl9FWENFUFRJT04oNiwgInhjb20gcGFybVxuIik7Ci0JCWlmICgqZGV2aWNlLT5tb2Rlc2V0X2J5dGUgJiAweDA4KQotCQkJUFJJTlRfSU5GTygiKCVzKSBDb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgb25cbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCWVsc2UKLQkJCVBSSU5UX0lORk8oIiglcykgQ29tcHJlc3Npb24gaXMgY3VycmVudGx5IG9mZlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJUFJJTlRfSU5GTygiVXNlIDEgdG8gc3dpdGNoIGNvbXByZXNzaW9uIG9uLCAwIHRvICIKLQkJCSAgICJzd2l0Y2ggaXQgb2ZmXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYwppbmRleCBlZWZjNjYxLi4xYmJhZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vczM5MC96ZmNwZHVtcC50eHQKICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwNworICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDgKICAqIEF1dGhvcihzKTogTWljaGFlbCBIb2x6aGV1CiAgKi8KIApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlICJzY2xwLmgiCiAKICNkZWZpbmUgVFJBQ0UoeC4uLikgZGVidWdfc3ByaW50Zl9ldmVudCh6Y29yZV9kYmYsIDEsIHgpCkBAIC00OCwxMiArNDksMTkgQEAKIAl1bmlvbiBzYXZlX2FyZWEJbGNfbWFzazsKIH07CiAKK3N0cnVjdCBpcGliX2luZm8geworCXVuc2lnbmVkIGxvbmcJaXBpYjsKKwl1MzIJCWNoZWNrc3VtOworfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2luZm8gc3lzX2luZm87CiBzdGF0aWMgc3RydWN0IGRlYnVnX2luZm8gKnpjb3JlX2RiZjsKIHN0YXRpYyBpbnQgaHNhX2F2YWlsYWJsZTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9kaXI7CiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqemNvcmVfZmlsZTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9tZW1tYXBfZmlsZTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp6Y29yZV9yZWlwbF9maWxlOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICppcGxfYmxvY2s7CiAKIC8qCiAgKiBDb3B5IG1lbW9yeSBmcm9tIEhTQSB0byBrZXJuZWwgb3IgdXNlciBtZW1vcnkgKG5vdCByZWVudHJhbnQpOgpAQCAtNTI3LDYgKzUzNSwzMyBAQAogCS5yZWxlYXNlCT0gemNvcmVfbWVtbWFwX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgc3NpemVfdCB6Y29yZV9yZWlwbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKGlwbF9ibG9jaykgeworCQlkaWFnMzA4KERJQUczMDhfU0VULCBpcGxfYmxvY2spOworCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHpjb3JlX3JlaXBsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemNvcmVfcmVpcGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemNvcmVfcmVpcGxfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IHpjb3JlX3JlaXBsX3dyaXRlLAorCS5vcGVuCQk9IHpjb3JlX3JlaXBsX29wZW4sCisJLnJlbGVhc2UJPSB6Y29yZV9yZWlwbF9yZWxlYXNlLAorfTsKKwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3MzOTBfbGNfbWFzayh1bmlvbiBzYXZlX2FyZWEgKm1hcCkKIHsKQEAgLTY0NSw2ICs2ODAsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFByb3ZpZGUgSVBMIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBibG9jayBmcm9tIGVpdGhlciBIU0Egb3IgbWVtb3J5CisgKiBmb3IgZnV0dXJlIHJlaXBsCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHpjb3JlX3JlaXBsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXBpYl9pbmZvIGlwaWJfaW5mbzsKKwlpbnQgcmM7CisKKwlyYyA9IG1lbWNweV9oc2Ffa2VybmVsKCZpcGliX2luZm8sIF9fTENfRFVNUF9SRUlQTCwgc2l6ZW9mKGlwaWJfaW5mbykpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWlmIChpcGliX2luZm8uaXBpYiA9PSAwKQorCQlyZXR1cm4gMDsKKwlpcGxfYmxvY2sgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFpcGxfYmxvY2spCisJCXJldHVybiAtRU5PTUVNOworCWlmIChpcGliX2luZm8uaXBpYiA8IFpGQ1BEVU1QX0hTQV9TSVpFKQorCQlyYyA9IG1lbWNweV9oc2Ffa2VybmVsKGlwbF9ibG9jaywgaXBpYl9pbmZvLmlwaWIsIFBBR0VfU0laRSk7CisJZWxzZQorCQlyYyA9IG1lbWNweV9yZWFsKGlwbF9ibG9jaywgaXBpYl9pbmZvLmlwaWIsIFBBR0VfU0laRSk7CisJaWYgKHJjKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXBsX2Jsb2NrKTsKKwkJcmV0dXJuIHJjOworCX0KKwlpZiAoY3N1bV9wYXJ0aWFsKGlwbF9ibG9jaywgaXBsX2Jsb2NrLT5oZHIubGVuLCAwKSAhPQorCSAgICBpcGliX2luZm8uY2hlY2tzdW0pIHsKKwkJVFJBQ0UoIkNoZWNrc3VtIGRvZXMgbm90IG1hdGNoXG4iKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCQlpcGxfYmxvY2sgPSBOVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgemNvcmVfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgYXJjaDsKQEAgLTY5MCw2ICs3NTksMTAgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDsKIAorCXJjID0gemNvcmVfcmVpcGxfaW5pdCgpOworCWlmIChyYykKKwkJZ290byBmYWlsOworCiAJemNvcmVfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ6Y29yZSIgLCBOVUxMKTsKIAlpZiAoIXpjb3JlX2RpcikgewogCQlyYyA9IC1FTk9NRU07CkBAIC03MDcsOSArNzgwLDE3IEBACiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2ZpbGU7CiAJfQorCXpjb3JlX3JlaXBsX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWlwbCIsIFNfSVJVU1IsIHpjb3JlX2RpciwKKwkJCQkJCU5VTEwsICZ6Y29yZV9yZWlwbF9mb3BzKTsKKwlpZiAoIXpjb3JlX3JlaXBsX2ZpbGUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbWVtbWFwX2ZpbGU7CisJfQogCWhzYV9hdmFpbGFibGUgPSAxOwogCXJldHVybiAwOwogCitmYWlsX21lbW1hcF9maWxlOgorCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX21lbW1hcF9maWxlKTsKIGZhaWxfZmlsZToKIAlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9maWxlKTsKIGZhaWxfZGlyOgpAQCAtNzIzLDEwICs4MDQsMTUgQEAKIHsKIAlkZWJ1Z191bnJlZ2lzdGVyKHpjb3JlX2RiZik7CiAJc2NscF9zZGlhc19leGl0KCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcGxfYmxvY2spOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX3JlaXBsX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKHpjb3JlX21lbW1hcF9maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9kaXIpOwogCWRpYWczMDgoRElBRzMwOF9SRUxfSFNBLCBOVUxMKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDciKTsKK01PRFVMRV9BVVRIT1IoIkNvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDA4Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oInpjb3JlIG1vZHVsZSBmb3IgemZjcGR1bXAgc3VwcG9ydCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQppbmRleCBiZDc5YmQxLi5hZGIzZGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai15ICs9IGFpcnEubyBibGFja2xpc3QubyBjaHNjLm8gY2lvLm8gY3NzLm8gY2hwLm8gaWRzZXQubyBpc2MubyBzY3N3Lm8gXAotCWZjeC5vIGl0Y3cubworCWZjeC5vIGl0Y3cubyBjcncubwogY2N3X2RldmljZS1vYmpzICs9IGRldmljZS5vIGRldmljZV9mc20ubyBkZXZpY2Vfb3BzLm8KIGNjd19kZXZpY2Utb2JqcyArPSBkZXZpY2VfaWQubyBkZXZpY2VfcGdpZC5vIGRldmljZV9zdGF0dXMubwogb2JqLXkgKz0gY2N3X2RldmljZS5vIGNtZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCmluZGV4IGZlNmNlYTEuLjY1ZDJlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCkBAIC0zNCw4ICszNCw4IEBACiAJdm9pZCAqZHJ2X2RhdGE7CiB9OwogCi1zdGF0aWMgdW5pb24gaW5kaWNhdG9yX3QgaW5kaWNhdG9yc1tNQVhfSVNDXTsKLXN0YXRpYyBzdHJ1Y3QgYWlycV90ICphaXJxc1tNQVhfSVNDXVtOUl9BSVJRU107CitzdGF0aWMgdW5pb24gaW5kaWNhdG9yX3QgaW5kaWNhdG9yc1tNQVhfSVNDKzFdOworc3RhdGljIHN0cnVjdCBhaXJxX3QgKmFpcnFzW01BWF9JU0MrMV1bTlJfQUlSUVNdOwogCiBzdGF0aWMgaW50IHJlZ2lzdGVyX2FpcnEoc3RydWN0IGFpcnFfdCAqYWlycSwgdTggaXNjKQogewpAQCAtMTMzLDYgKzEzMyw4IEBACiAJCXdoaWxlICh3b3JkKSB7CiAJCQlpZiAod29yZCAmIElORElDQVRPUl9NQVNLKSB7CiAJCQkJYWlycSA9IGFpcnFzW2lzY11baV07CisJCQkJLyogTWFrZSBzdXJlIGdjYyByZWFkcyBmcm9tIGFpcnFzIG9ubHkgb25jZS4gKi8KKwkJCQliYXJyaWVyKCk7CiAJCQkJaWYgKGxpa2VseShhaXJxKSkKIAkJCQkJYWlycS0+aGFuZGxlcigmaW5kaWNhdG9yc1tpc2NdLmJ5dGVbaV0sCiAJCQkJCQkgICAgICBhaXJxLT5kcnZfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwppbmRleCBmZTAwYmUzLi42NTY1ZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKQEAgLTMzNiw4ICszMzYsNyBAQAogCQkgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldCkKIHsKIAljaGFyICpidWY7Ci0Jc2l6ZV90IGk7Ci0Jc3NpemVfdCByYywgcmV0OworCXNzaXplX3QgcmMsIHJldCwgaTsKIAogCWlmICgqb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYwppbmRleCA5MThlNmZjLi4yMmNlNzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCkBAIC0xMDQsOCArMTA0LDkgQEAKIAlyYyA9IGRldmljZV9zY2hlZHVsZV9jYWxsYmFjayhkZXYsIGNjd2dyb3VwX3VuZ3JvdXBfY2FsbGJhY2spOwogb3V0OgogCWlmIChyYykgewotCQkvKiBSZWxlYXNlIG9ub2ZmICJsb2NrIiB3aGVuIHVuZ3JvdXBpbmcgZmFpbGVkLiAqLwotCQlhdG9taWNfc2V0KCZnZGV2LT5vbm9mZiwgMCk7CisJCWlmIChyYyAhPSAtRUFHQUlOKQorCQkJLyogUmVsZWFzZSBvbm9mZiAibG9jayIgd2hlbiB1bmdyb3VwaW5nIGZhaWxlZC4gKi8KKwkJCWF0b21pY19zZXQoJmdkZXYtPm9ub2ZmLCAwKTsKIAkJcmV0dXJuIHJjOwogCX0KIAlyZXR1cm4gY291bnQ7CkBAIC0zMTQsMTYgKzMxNSwzMiBAQAogfQogRVhQT1JUX1NZTUJPTChjY3dncm91cF9jcmVhdGVfZnJvbV9zdHJpbmcpOwogCi1zdGF0aWMgaW50IF9faW5pdAotaW5pdF9jY3dncm91cCAodm9pZCkKK3N0YXRpYyBpbnQgY2N3Z3JvdXBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgICAgIHZvaWQgKmRhdGEpOworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNjd2dyb3VwX25iID0geworCS5ub3RpZmllcl9jYWxsID0gY2N3Z3JvdXBfbm90aWZpZXIKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfY2N3Z3JvdXAodm9pZCkKIHsKLQlyZXR1cm4gYnVzX3JlZ2lzdGVyICgmY2N3Z3JvdXBfYnVzX3R5cGUpOworCWludCByZXQ7CisKKwlyZXQgPSBidXNfcmVnaXN0ZXIoJmNjd2dyb3VwX2J1c190eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZjY3dncm91cF9idXNfdHlwZSwgJmNjd2dyb3VwX25iKTsKKwlpZiAocmV0KQorCQlidXNfdW5yZWdpc3RlcigmY2N3Z3JvdXBfYnVzX3R5cGUpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0Ci1jbGVhbnVwX2Njd2dyb3VwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfY2N3Z3JvdXAodm9pZCkKIHsKLQlidXNfdW5yZWdpc3RlciAoJmNjd2dyb3VwX2J1c190eXBlKTsKKwlidXNfdW5yZWdpc3Rlcl9ub3RpZmllcigmY2N3Z3JvdXBfYnVzX3R5cGUsICZjY3dncm91cF9uYik7CisJYnVzX3VucmVnaXN0ZXIoJmNjd2dyb3VwX2J1c190eXBlKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9jY3dncm91cCk7CkBAIC0zOTEsMjcgKzQwOCwyOCBAQAogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IHJldDsKIAotCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwogCWlmICghZGV2LT5kcml2ZXIpCi0JCXJldHVybiBjb3VudDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYgKGdkZXYtPmRldi5kcml2ZXIpOworCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOworCWdkcnYgPSB0b19jY3dncm91cGRydihkZXYtPmRyaXZlcik7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGdkcnYtPm93bmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JcmV0ID0gY291bnQ7CisKIAlpZiAodmFsdWUgPT0gMSkKLQkJY2N3Z3JvdXBfc2V0X29ubGluZShnZGV2KTsKKwkJcmV0ID0gY2N3Z3JvdXBfc2V0X29ubGluZShnZGV2KTsKIAllbHNlIGlmICh2YWx1ZSA9PSAwKQotCQljY3dncm91cF9zZXRfb2ZmbGluZShnZGV2KTsKKwkJcmV0ID0gY2N3Z3JvdXBfc2V0X29mZmxpbmUoZ2Rldik7CiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogb3V0OgogCW1vZHVsZV9wdXQoZ2Rydi0+b3duZXIpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIChyZXQgPT0gMCkgPyBjb3VudCA6IHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTQ1MywxMyArNDcxLDE4IEBACiAJc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldjsKIAlzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyICpnZHJ2OwogCisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX29ubGluZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VuZ3JvdXApOworCisJaWYgKCFkZXYtPmRyaXZlcikKKwkJcmV0dXJuIDA7CisKIAlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKIAlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYoZGV2LT5kcml2ZXIpOwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX29ubGluZSk7Ci0KLQlpZiAoZ2RydiAmJiBnZHJ2LT5yZW1vdmUpCisJaWYgKGdkcnYtPnJlbW92ZSkKIAkJZ2Rydi0+cmVtb3ZlKGdkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2OCw5ICs0OTEsMTMgQEAKIAlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OwogCXN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmdkcnY7CiAKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm47CisKIAlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKIAlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYoZGV2LT5kcml2ZXIpOwotCWlmIChnZHJ2ICYmIGdkcnYtPnNodXRkb3duKQorCisJaWYgKGdkcnYtPnNodXRkb3duKQogCQlnZHJ2LT5zaHV0ZG93bihnZGV2KTsKIH0KIApAQCAtNDgzLDYgKzUxMCwxOSBAQAogCS5zaHV0ZG93biA9IGNjd2dyb3VwX3NodXRkb3duLAogfTsKIAorCitzdGF0aWMgaW50IGNjd2dyb3VwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfVU5CSU5EX0RSSVZFUikKKwkJZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrKGRldiwgY2N3Z3JvdXBfdW5ncm91cF9jYWxsYmFjayk7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCisKIC8qKgogICogY2N3Z3JvdXBfZHJpdmVyX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIGNjdyBncm91cCBkcml2ZXIKICAqIEBjZHJpdmVyOiBkcml2ZXIgdG8gYmUgcmVnaXN0ZXJlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKaW5kZXggMTI0NmY2MS4uM2U1ZjMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiaW9hc20uaCIKQEAgLTcwNiwxMiArNzA2LDEyIEBACiAJc3RydWN0IGNocF9pZCBjaHBpZDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NQQVRILCBjaHBfcHJvY2Vzc19jcncpOworCXJldCA9IGNyd19yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1BBVEgsIGNocF9wcm9jZXNzX2Nydyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAljaHBfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2lvX2NocCIpOwogCWlmICghY2hwX3dxKSB7Ci0JCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NQQVRIKTsKKwkJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NQQVRIKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCUlOSVRfV09SSygmY2ZnX3dvcmssIGNmZ19mdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggZWJhYjZlYS4uODgzZjE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxhc20vY2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NocGlkLmg+CiAjaW5jbHVkZSA8YXNtL2Noc2MuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLSNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImNpby5oIgogI2luY2x1ZGUgImNpb19kZWJ1Zy5oIgpAQCAtNTg5LDYgKzU4OSw3IEBACiAJY2FzZSAweDAxMDI6CiAJY2FzZSAweDAxMDM6CiAJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IGNoc2NfZXJyb3JfZnJvbV9yZXNwb25zZShzZWNtX2FyZWEtPnJlc3BvbnNlLmNvZGUpOwogCX0KQEAgLTgyMCw3ICs4MjEsNyBAQAogCQkJICAgICAgImNoc2MgbWFjaGluZSBjaGVja3MhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJldCA9IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MsIGNoc2NfcHJvY2Vzc19jcncpOworCXJldCA9IGNyd19yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTLCBjaHNjX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlrZnJlZShzZWlfcGFnZSk7CiAJcmV0dXJuIHJldDsKQEAgLTgyOCw3ICs4MjksNyBAQAogCiB2b2lkIF9faW5pdCBjaHNjX2ZyZWVfc2VpX2FyZWEodm9pZCkKIHsKLQlzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MpOworCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWtmcmVlKHNlaV9wYWdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IDBhMmYyZWQuLjkzZWNhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTg0LDggKzg0LDggQEAKIAkJa2ZyZWUocHJpdmF0ZSk7CiAJfSBlbHNlIHsKIAkJc2NoLT5wcml2YXRlID0gcHJpdmF0ZTsKLQkJaWYgKHNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcykgewotCQkJc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwkJaWYgKGRldl9nZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldikpIHsKKwkJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggNjU5ZjhhNy4uMmFlYmI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL2lzYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZmN4Lmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJjaHNjLmgiCkBAIC0zOCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiYmxhY2tsaXN0LmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2hwLmgiCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKIAogZGVidWdfaW5mb190ICpjaW9fZGVidWdfbXNnX2lkOwogZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7CkBAIC00NzEsNiArNDcyLDcgQEAKIGludCBjaW9fZGlzYWJsZV9zdWJjaGFubmVsKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJY2hhciBkYmZfdHh0WzE1XTsKKwlpbnQgcmV0cnk7CiAJaW50IHJldDsKIAogCUNJT19UUkFDRV9FVkVOVCAoMiwgImRpc3NjaCIpOwpAQCAtNDgxLDE2ICs0ODMsMTcgQEAKIAlpZiAoY2lvX3VwZGF0ZV9zY2hpYihzY2gpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgIT0gMCkKLQkJLyoKLQkJICogdGhlIGRpc2FibGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZXJlIGFyZQotCQkgKiAgcmVxdWVzdHMgcGVuZGluZyBmb3IgY29tcGxldGlvbiAhCi0JCSAqLwotCQlyZXR1cm4gLUVCVVNZOwotCiAJc2NoLT5jb25maWcuZW5hID0gMDsKLQlyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpOwogCisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMzsgcmV0cnkrKykgeworCQlyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpOworCQlpZiAocmV0ID09IC1FQlVTWSkgeworCQkJc3RydWN0IGlyYiBpcmI7CisJCQlpZiAodHNjaChzY2gtPnNjaGlkLCAmaXJiKSAhPSAwKQorCQkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KIAlzcHJpbnRmIChkYmZfdHh0LCAicmV0OiVkIiwgcmV0KTsKIAlDSU9fVFJBQ0VfRVZFTlQgKDIsIGRiZl90eHQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTU3NjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqICAgQ2hhbm5lbCByZXBvcnQgaGFuZGxpbmcgY29kZQorICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIDxhZGx1bmdAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KKworc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgY3J3X3NlbWFwaG9yZTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY3J3X2hhbmRsZXJfbXV0ZXgpOworc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOworCisvKioKKyAqIGNyd19yZWdpc3Rlcl9oYW5kbGVyKCkgLSByZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgorICogQHJzYzogcmVwb3J0aW5nIHNvdXJjZSBjb2RlIHRvIGhhbmRsZQorICogQGhhbmRsZXI6IGhhbmRsZXIgdG8gYmUgcmVnaXN0ZXJlZAorICoKKyAqIFJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCBjcndfcmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJaW50IHJjID0gMDsKKworCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCWlmIChjcndfaGFuZGxlcnNbcnNjXSkKKwkJcmMgPSAtRUJVU1k7CisJZWxzZQorCQljcndfaGFuZGxlcnNbcnNjXSA9IGhhbmRsZXI7CisJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoKSAtIHVucmVnaXN0ZXIgYSBjaGFubmVsIHJlcG9ydCB3b3JkIGhhbmRsZXIKKyAqIEByc2M6IHJlcG9ydGluZyBzb3VyY2UgY29kZSB0byBoYW5kbGUKKyAqLwordm9pZCBjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MpCit7CisJaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQorCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCWNyd19oYW5kbGVyc1tyc2NdID0gTlVMTDsKKwltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKK30KKworLyoKKyAqIFJldHJpZXZlIENSV3MgYW5kIGNhbGwgZnVuY3Rpb24gdG8gaGFuZGxlIGV2ZW50LgorICovCitzdGF0aWMgaW50IGNyd19jb2xsZWN0X2luZm8odm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBjcncgY3J3WzJdOworCWludCBjY29kZTsKKwl1bnNpZ25lZCBpbnQgY2hhaW47CisJaW50IGlnbm9yZTsKKworcmVwZWF0OgorCWlnbm9yZSA9IGRvd25faW50ZXJydXB0aWJsZSgmY3J3X3NlbWFwaG9yZSk7CisJY2hhaW4gPSAwOworCXdoaWxlICgxKSB7CisJCWNyd19oYW5kbGVyX3QgaGFuZGxlcjsKKworCQlpZiAodW5saWtlbHkoY2hhaW4gPiAxKSkgeworCQkJc3RydWN0IGNydyB0bXBfY3J3OworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBDb2RlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSAiCisJCQkgICAgICAgInRoYW4gdHdvIGNoYWluZWQgY3J3czsgcGxlYXNlIHJlcG9ydCB0byAiCisJCQkgICAgICAgImxpbnV4MzkwQGRlLmlibS5jb20hXG4iLCBfX2Z1bmNfXyk7CisJCQljY29kZSA9IHN0Y3J3KCZ0bXBfY3J3KTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IGNydyByZXBvcnRzIHNsY3Q9JWQsIG9mbHc9JWQsICIKKwkJCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB0bXBfY3J3LnNsY3QsIHRtcF9jcncub2ZsdywKKwkJCSAgICAgICB0bXBfY3J3LmNobiwgdG1wX2Nydy5yc2MsIHRtcF9jcncuYW5jLAorCQkJICAgICAgIHRtcF9jcncuZXJjLCB0bXBfY3J3LnJzaWQpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogVGhpcyB3YXMgY3J3IG51bWJlciAleCBpbiB0aGUgIgorCQkJICAgICAgICJjaGFpblxuIiwgX19mdW5jX18sIGNoYWluKTsKKwkJCWlmIChjY29kZSAhPSAwKQorCQkJCWJyZWFrOworCQkJY2hhaW4gPSB0bXBfY3J3LmNobiA/IGNoYWluICsgMSA6IDA7CisJCQljb250aW51ZTsKKwkJfQorCQljY29kZSA9IHN0Y3J3KCZjcndbY2hhaW5dKTsKKwkJaWYgKGNjb2RlICE9IDApCisJCQlicmVhazsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNyd19pbmZvIDogQ1JXIHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgorCQkgICAgICAgImNobj0lZCwgcnNjPSVYLCBhbmM9JWQsIGVyYz0lWCwgcnNpZD0lWFxuIiwKKwkJICAgICAgIGNyd1tjaGFpbl0uc2xjdCwgY3J3W2NoYWluXS5vZmx3LCBjcndbY2hhaW5dLmNobiwKKwkJICAgICAgIGNyd1tjaGFpbl0ucnNjLCBjcndbY2hhaW5dLmFuYywgY3J3W2NoYWluXS5lcmMsCisJCSAgICAgICBjcndbY2hhaW5dLnJzaWQpOworCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLworCQlpZiAoY3J3W2NoYWluXS5vZmx3KSB7CisJCQlpbnQgaTsKKworCQkJcHJfZGVidWcoIiVzOiBjcncgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iLCBfX2Z1bmNfXyk7CisJCQltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTlJfUlNDUzsgaSsrKSB7CisJCQkJaWYgKGNyd19oYW5kbGVyc1tpXSkKKwkJCQkJY3J3X2hhbmRsZXJzW2ldKE5VTEwsIE5VTEwsIDEpOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCQljaGFpbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKKwkJCWNoYWluKys7CisJCQljb250aW51ZTsKKwkJfQorCQltdXRleF9sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7CisJCWhhbmRsZXIgPSBjcndfaGFuZGxlcnNbY3J3W2NoYWluXS5yc2NdOworCQlpZiAoaGFuZGxlcikKKwkJCWhhbmRsZXIoJmNyd1swXSwgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwgMCk7CisJCW11dGV4X3VubG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCisJCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOworCX0KKwlnb3RvIHJlcGVhdDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpCit7CisJdXAoJmNyd19zZW1hcGhvcmUpOworfQorCisvKgorICogU2VwYXJhdGUgaW5pdGNhbGwgbmVlZGVkIGZvciBzZW1hcGhvcmUgaW5pdGlhbGl6YXRpb24gc2luY2UKKyAqIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSBjcndfbWFjaGluZV9jaGVja19pbml0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBjcndfaW5pdF9zZW1hcGhvcmUodm9pZCkKK3sKKwlpbml0X01VVEVYX0xPQ0tFRCgmY3J3X3NlbWFwaG9yZSk7CisJcmV0dXJuIDA7Cit9CitwdXJlX2luaXRjYWxsKGNyd19pbml0X3NlbWFwaG9yZSk7CisKKy8qCisgKiBNYWNoaW5lIGNoZWNrcyBmb3IgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIG11c3QgYmUgZW5hYmxlZAorICogYWZ0ZXIgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIGlzIGluaXRpYWxpemVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNyd19tYWNoaW5lX2NoZWNrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwl0YXNrID0ga3RocmVhZF9ydW4oY3J3X2NvbGxlY3RfaW5mbywgTlVMTCwgImttY2hlY2siKTsKKwlpZiAoSVNfRVJSKHRhc2spKQorCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKKwljdGxfc2V0X2JpdCgxNCwgMjgpOwkvKiBlbmFibGUgY2hhbm5lbCByZXBvcnQgTUNIICovCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoY3J3X21hY2hpbmVfY2hlY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCA4MDE5Mjg4Li4wMDg1ZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL2lzYy5oPgorI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCkBAIC04Myw2ICs4MywyNSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjYWxsX2ZuX2FsbF9zY2goc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNiX2RhdGEgKmNiID0gZGF0YTsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByYyA9IDA7CisKKwlzY2ggPSBnZXRfc3ViY2hhbm5lbF9ieV9zY2hpZChzY2hpZCk7CisJaWYgKHNjaCkgeworCQlpZiAoY2ItPmZuX2tub3duX3NjaCkKKwkJCXJjID0gY2ItPmZuX2tub3duX3NjaChzY2gsIGNiLT5kYXRhKTsKKwkJcHV0X2RldmljZSgmc2NoLT5kZXYpOworCX0gZWxzZSB7CisJCWlmIChjYi0+Zm5fdW5rbm93bl9zY2gpCisJCQlyYyA9IGNiLT5mbl91bmtub3duX3NjaChzY2hpZCwgY2ItPmRhdGEpOworCX0KKworCXJldHVybiByYzsKK30KKwogaW50IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKGludCAoKmZuX2tub3duKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqLCB2b2lkICopLAogCQkJICAgICAgIGludCAoKmZuX3Vua25vd24pKHN0cnVjdCBzdWJjaGFubmVsX2lkLAogCQkJICAgICAgIHZvaWQgKiksIHZvaWQgKmRhdGEpCkBAIC05MCwxMyArMTA5LDE3IEBACiAJc3RydWN0IGNiX2RhdGEgY2I7CiAJaW50IHJjOwogCi0JY2Iuc2V0ID0gaWRzZXRfc2NoX25ldygpOwotCWlmICghY2Iuc2V0KQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZHNldF9maWxsKGNiLnNldCk7CiAJY2IuZGF0YSA9IGRhdGE7CiAJY2IuZm5fa25vd25fc2NoID0gZm5fa25vd247CiAJY2IuZm5fdW5rbm93bl9zY2ggPSBmbl91bmtub3duOworCisJY2Iuc2V0ID0gaWRzZXRfc2NoX25ldygpOworCWlmICghY2Iuc2V0KQorCQkvKiBmYWxsIGJhY2sgdG8gYnJ1dGUgZm9yY2Ugc2Nhbm5pbmcgaW4gY2FzZSBvZiBvb20gKi8KKwkJcmV0dXJuIGZvcl9lYWNoX3N1YmNoYW5uZWwoY2FsbF9mbl9hbGxfc2NoLCAmY2IpOworCisJaWRzZXRfZmlsbChjYi5zZXQpOworCiAJLyogUHJvY2VzcyByZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogCXJjID0gYnVzX2Zvcl9lYWNoX2RldigmY3NzX2J1c190eXBlLCBOVUxMLCAmY2IsIGNhbGxfZm5fa25vd25fc2NoKTsKIAlpZiAocmMpCkBAIC0yNzIsNyArMjk1LDcgQEAKIAkgKiB0aGUgc3ViY2hhbm5lbCBkcml2ZXIgY2FuIGRlY2lkZSBpdHNlbGYgd2hlbiBpdCB3YW50cyB0byBpbmZvcm0KIAkgKiB1c2Vyc3BhY2Ugb2YgaXRzIGV4aXN0ZW5jZS4KIAkgKi8KLQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMSk7CiAJY3NzX3VwZGF0ZV9zc2RfaW5mbyhzY2gpOwogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGNzc19zY2hfZGV2aWNlX3JlZ2lzdGVyKHNjaCk7CkBAIC0yODcsNyArMzEwLDcgQEAKIAkJICogYSBmaXR0aW5nIGRyaXZlciBtb2R1bGUgbWF5IGJlIGxvYWRlZCBiYXNlZCBvbiB0aGUKIAkJICogbW9kYWxpYXMuCiAJCSAqLwotCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNTEwLDYgKzUzMywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHJlcHJvYmVfYWZ0ZXJfaWRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKKwkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KKwl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKKwkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKG5lZWRfcmVwcm9iZSkKKwkJY3NzX3NjaGVkdWxlX3JlcHJvYmUoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhyZXByb2JlX2lkbGVfd29yaywgcmVwcm9iZV9hZnRlcl9pZGxlKTsKKwogLyogV29yayBmdW5jdGlvbiB1c2VkIHRvIHJlcHJvYmUgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KIHN0YXRpYyB2b2lkIHJlcHJvYmVfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQogewpAQCAtNTE3LDEwICs1NTEsMTIgQEAKIAogCUNJT19NU0dfRVZFTlQoNCwgInJlcHJvYmUgc3RhcnRcbiIpOwogCi0JbmVlZF9yZXByb2JlID0gMDsKIAkvKiBNYWtlIHN1cmUgaW5pdGlhbCBzdWJjaGFubmVsIHNjYW4gaXMgZG9uZS4gKi8KLQl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKLQkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpICE9IDApIHsKKwkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZyZXByb2JlX2lkbGVfd29yayk7CisJCXJldHVybjsKKwl9CisJbmVlZF9yZXByb2JlID0gMDsKIAlyZXQgPSBmb3JfZWFjaF9zdWJjaGFubmVsX3N0YWdlZChOVUxMLCByZXByb2JlX3N1YmNoYW5uZWwsIE5VTEwpOwogCiAJQ0lPX01TR19FVkVOVCg0LCAicmVwcm9iZSBkb25lIChyYz0lZCwgbmVlZF9yZXByb2JlPSVkKVxuIiwgcmV0LApAQCAtNjE5LDcgKzY1NSw3IEBACiAJCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmV4dF9jc3NpZC5jc3NpZCA9IGNzcy0+Y3NzaWQ7CiAJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfU01QCi0JCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gc3RhcCgpOwogI2Vsc2UKIAkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSAwOwogI2VuZGlmCkBAIC03NjUsNyArODAxLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19TQ0gsIGNzc19wcm9jZXNzX2Nydyk7CisJcmV0ID0gY3J3X3JlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19TQ0gsIGNzc19wcm9jZXNzX2Nydyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTg0NSw3ICs4ODEsNyBAQAogb3V0X2J1czoKIAlidXNfdW5yZWdpc3RlcigmY3NzX2J1c190eXBlKTsKIG91dDoKLQlzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DU1MpOworCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpOwogCWNoc2NfZnJlZV9zZWlfYXJlYSgpOwogCWtmcmVlKHNsb3dfc3ViY2hhbm5lbF9zZXQpOwogCXByX2FsZXJ0KCJUaGUgQ1NTIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpdGggIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggMjNkNTc1Mi4uYzRkMmY2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtNDU3LDEyICs0NTcsMTMgQEAKIAlyZXR1cm4gKHJldCA9PSAwKSA/IC1FTk9ERVYgOiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyBpbnQgb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKQogCQljY3dfZGV2aWNlX3JlbW92ZV9kaXNjb25uZWN0ZWQoY2Rldik7Ci0JZWxzZSBpZiAoY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+c2V0X29mZmxpbmUpCi0JCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2Rldik7CisJZWxzZSBpZiAoY2Rldi0+b25saW5lICYmIGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnNldF9vZmZsaW5lKQorCQlyZXR1cm4gY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvbmxpbmVfc3RvcmVfcmVjb2dfYW5kX29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKQEAgLTUzMCwxMyArNTMxLDEwIEBACiAJCWdvdG8gb3V0OwogCXN3aXRjaCAoaSkgewogCWNhc2UgMDoKLQkJb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKGNkZXYpOwotCQlyZXQgPSBjb3VudDsKKwkJcmV0ID0gb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKGNkZXYpOwogCQlicmVhazsKIAljYXNlIDE6CiAJCXJldCA9IG9ubGluZV9zdG9yZV9oYW5kbGVfb25saW5lKGNkZXYsIGZvcmNlKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXQgPSBjb3VudDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTU0NSw3ICs1NDMsNyBAQAogCWlmIChjZGV2LT5kcnYpCiAJCW1vZHVsZV9wdXQoY2Rldi0+ZHJ2LT5vd25lcik7CiAJYXRvbWljX3NldCgmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDApOwotCXJldHVybiByZXQ7CisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGNvdW50OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNjgxLDM1ICs2NzksMjIgQEAKIAlyZXR1cm4gZGV2ID8gdG9fY2N3ZGV2KGRldikgOiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZAotY2N3X2RldmljZV9hZGRfY2hhbmdlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKLQotCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKLQljZGV2ID0gcHJpdi0+Y2RldjsKLQlpZiAoZGV2aWNlX2FkZCgmY2Rldi0+ZGV2KSkgewotCQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwotCQlyZXR1cm47Ci0JfQotCXNldF9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpOwotfQotCi12b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJaW50IHJldDsKIAogCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKIAljZGV2ID0gcHJpdi0+Y2RldjsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCi0JY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOwotCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkgICAgIGNjd19kZXZpY2VfYWRkX2NoYW5nZWQpOwotCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwlpZiAodGVzdF9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpKSB7CisJCWRldmljZV9yZWxlYXNlX2RyaXZlcigmY2Rldi0+ZGV2KTsKKwkJcmV0ID0gZGV2aWNlX2F0dGFjaCgmY2Rldi0+ZGV2KTsKKwkJV0FSTl9PTihyZXQgPT0gLUVOT0RFVik7CisJfQogfQogCiBzdGF0aWMgdm9pZApAQCAtNzk5LDcgKzc4NCw3IEBACiAJCXJldHVybjsKIAlvdGhlcl9zY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCS8qIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50ICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGlzY29ubmVjdGVkIGRldmljZSAwLiV4LiUwNHggZmFpbGVkICIKIAkJCSAgICAgICIocmV0PSVkKSFcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLApAQCAtODMwLDcgKzgxNSw3IEBACiAJICogVHJ5IHRvIG1vdmUgdGhlIGNjdyBkZXZpY2UgdG8gaXRzIG5ldyBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2KTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCBmcm9tIG9ycGhhbmFnZSAiCiAJCQkgICAgICAiZmFpbGVkIChyZXQ9JWQpIVxuIiwKQEAgLTg5Nyw3ICs4ODIsOCBAQAogCSAqIGNjdyBkZXZpY2UgY2FuIHRha2UgaXRzIHBsYWNlIG9uIHRoZSBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldik7CisJcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJmNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmRldiwKKwkJRFBNX09SREVSX05PTkUpOwogCWlmIChyZXQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRldmljZSAwLiV4LiUwNHggdG8gb3JwaGFuYWdlIGZhaWxlZCAiCiAJCQkgICAgICAiKHJldD0lZCkhXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKQEAgLTk4MSw3ICs5NjcsNyBAQAogCSAqIE5vdyB3ZSBrbm93IHRoaXMgc3ViY2hhbm5lbCB3aWxsIHN0YXksIHdlIGNhbiB0aHJvdwogCSAqIG91ciBkZWxheWVkIHVldmVudC4KIAkgKi8KLQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKIAkvKiBtYWtlIGl0IGtub3duIHRvIHRoZSBzeXN0ZW0gKi8KIAlyZXQgPSBjY3dfZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwpAQCAtMTAzNCw4ICsxMDIwLDYgQEAKIHZvaWQKIGlvX3N1YmNoYW5uZWxfcmVjb2dfZG9uZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwotCiAJaWYgKGNzc19pbml0X2RvbmUgPT0gMCkgewogCQljZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lID0gMTsKIAkJcmV0dXJuOwpAQCAtMTA0Niw3ICsxMDMwLDYgQEAKIAkJLyogUmVtb3ZlIGRldmljZSBmb3VuZCBub3Qgb3BlcmF0aW9uYWwuICovCiAJCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKIAkJCWJyZWFrOwotCQlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKIAkJCSAgICAgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKTsKIAkJcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwpAQCAtMTEyOSw3ICsxMTEyLDcgQEAKIAkgKiBUcnkgdG8gbW92ZSB0aGUgY2N3IGRldmljZSB0byBpdHMgbmV3IHN1YmNoYW5uZWwuCiAJICogTm90ZTogZGV2aWNlX21vdmUoKSBjaGFuZ2VzIGNkZXYtPmRldi5wYXJlbnQKIAkgKi8KLQlyYyA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJcmMgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYsIERQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFVik7CiAJbXV0ZXhfdW5sb2NrKCZzY2gtPnJlZ19tdXRleCk7CiAJaWYgKHJjKSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IHRvIHN1YmNoYW5uZWwgIgpAQCAtMTI0Myw3ICsxMjI2LDcgQEAKIAkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuIFRoaXMgaGFwcGVucyBmb3IgYWxsIGVhcmx5CiAJCSAqIGRldmljZXMsIGUuZy4gdGhlIGNvbnNvbGUuCiAJCSAqLwotCQlzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOwogCQljZGV2LT5kZXYuZ3JvdXBzID0gY2N3ZGV2X2F0dHJfZ3JvdXBzOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmY2Rldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IDBmMmU2M2UuLjg1ZTAxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtODAsNyArODAsNyBAQAogCiBpbnQgY2N3X2RldmljZV9jYW5jZWxfaGFsdF9jbGVhcihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIAotdm9pZCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgY2N3X2RldmljZV9kb191bmJpbmRfYmluZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiB2b2lkIGNjd19kZXZpY2VfbW92ZV90b19vcnBoYW5hZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICopOwogaW50IGNjd19kZXZpY2VfaXNfb3JwaGFuKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDhkZjVlYWEuLjg3YjRiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkgICAgY2Rldi0+aWQuZGV2X3R5cGUgIT0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfdHlwZSB8fAogCSAgICBjZGV2LT5pZC5kZXZfbW9kZWwgIT0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfbW9kZWwpIHsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkgICAgIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcpOworCQkJICAgICBjY3dfZGV2aWNlX2RvX3VuYmluZF9iaW5kKTsKIAkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zNjYsNyArMzY2LDcgQEAKIAl9CiAJLyogRHJpdmVyIGRvZXNuJ3Qgd2FudCBkZXZpY2UgYmFjay4gKi8KIAljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOwotCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKTsKKwlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywgY2N3X2RldmljZV9kb191bmJpbmRfYmluZCk7CiAJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogfQogCkBAIC03MjgsNyArNzI4LDcgQEAKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwogCi0JY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfTk9UX09QRVI7CisJY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCWNzc19zY2hlZHVsZV9ldmFsKHNjaC0+c2NoaWQpOwogfQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCS8qCiAJICogQW4gaW50ZXJydXB0IGluIHN0YXRlIG9mZmxpbmUgbWVhbnMgYSBwcmV2aW91cyBkaXNhYmxlIHdhcyBub3QKLQkgKiBzdWNjZXNzZnVsLiBUcnkgYWdhaW4uCisJICogc3VjY2Vzc2Z1bCAtIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2UgdHJ5IHRvIGRpc2FibGUgYWdhaW4uCiAJICovCiAJY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzY2gpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwppbmRleCBlYWJjYzQyLi4xNTE3NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwpAQCAtNjgwLDcgKzY4MCw3IEBACiAJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUpCiAJCXJldHVybiAtRUlPOwogCWlmICghc2Nzd19pc190bSgmc2NoLT5zY2hpYi5zY3N3KSB8fAotCSAgICAhKHNjc3dfYWN0bCgmc2NoLT5zY2hpYi5zY3N3KSB8IFNDU1dfQUNUTF9TVEFSVF9QRU5EKSkKKwkgICAgIShzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgJiBTQ1NXX0FDVExfU1RBUlRfUEVORCkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBjaW9fdG1faW50cmcoc2NoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKaW5kZXggNDJmMmIwOS4uMTNiY2I4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKQEAgLTE4Niw2ICsxODYsOSBAQAogCS8qIGlucHV0IGJ1ZmZlciBhY2tub3dsZWRnZW1lbnQgZmxhZyAqLwogCWludCBwb2xsaW5nOwogCisJLyogZmlyc3QgQUNLJ2VkIGJ1ZmZlciAqLworCWludCBhY2tfc3RhcnQ7CisKIAkvKiBob3cgbXVjaCBzYmFscyBhcmUgYWNrbm93bGVkZ2VkIHdpdGggcWVic20gKi8KIAlpbnQgYWNrX2NvdW50OwogCkBAIC0yMzQsNyArMjM3LDcgQEAKIAlpbnQgZmlyc3RfdG9fY2hlY2s7CiAKIAkvKiBmaXJzdF90b19jaGVjayBvZiB0aGUgbGFzdCB0aW1lICovCi0JaW50IGxhc3RfbW92ZV9mdGM7CisJaW50IGxhc3RfbW92ZTsKIAogCS8qIGJlZ2lubmluZyBwb3NpdGlvbiBmb3IgY2FsbGluZyB0aGUgcHJvZ3JhbSAqLwogCWludCBmaXJzdF90b19raWNrOwpAQCAtMjQ0LDcgKzI0Nyw2IEBACiAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCiAJLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KIAl1bnNpZ25lZCBpbnQgcWRpb19lcnJvcjsKQEAgLTM1NCw3ICszNTYsNyBAQAogCQkgIGludCBhdXRvX2Fjayk7CiB2b2lkIHFkaW9fY2hlY2tfb3V0Ym91bmRfYWZ0ZXJfdGhpbmludChzdHJ1Y3QgcWRpb19xICpxKTsKIGludCBxZGlvX2luYm91bmRfcV9tb3ZlZChzdHJ1Y3QgcWRpb19xICpxKTsKLXZvaWQgcWRpb19raWNrX2luYm91bmRfaGFuZGxlcihzdHJ1Y3QgcWRpb19xICpxKTsKK3ZvaWQgcWRpb19raWNrX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSk7CiB2b2lkIHFkaW9fc3RvcF9wb2xsaW5nKHN0cnVjdCBxZGlvX3EgKnEpOwogaW50IHFkaW9fc2lnYV9zeW5jX3Eoc3RydWN0IHFkaW9fcSAqcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggZGE3YWZiMC4uZTM0MzRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTYzLDggKzYzLDkgQEAKIAlzZXFfcHJpbnRmKG0sICJkZXZpY2Ugc3RhdGUgaW5kaWNhdG9yOiAlZFxuIiwgKih1MzIgKilxLT5pcnFfcHRyLT5kc2NpKTsKIAlzZXFfcHJpbnRmKG0sICJucl91c2VkOiAlZFxuIiwgYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSk7CiAJc2VxX3ByaW50ZihtLCAiZnRjOiAlZFxuIiwgcS0+Zmlyc3RfdG9fY2hlY2spOwotCXNlcV9wcmludGYobSwgImxhc3RfbW92ZV9mdGM6ICVkXG4iLCBxLT5sYXN0X21vdmVfZnRjKTsKKwlzZXFfcHJpbnRmKG0sICJsYXN0X21vdmU6ICVkXG4iLCBxLT5sYXN0X21vdmUpOwogCXNlcV9wcmludGYobSwgInBvbGxpbmc6ICVkXG4iLCBxLT51LmluLnBvbGxpbmcpOworCXNlcV9wcmludGYobSwgImFjayBzdGFydDogJWRcbiIsIHEtPnUuaW4uYWNrX3N0YXJ0KTsKIAlzZXFfcHJpbnRmKG0sICJhY2sgY291bnQ6ICVkXG4iLCBxLT51LmluLmFja19jb3VudCk7CiAJc2VxX3ByaW50ZihtLCAic2xzYiBidWZmZXIgc3RhdGVzOlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDAgICAgICB8OCAgICAgIHwxNiAgICAgfDI0ICAgICB8MzIgICAgIHw0MCAgICAgfDQ4ICAgICB8NTYgIDYzfFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCAxMGNiMGY4Li45ZThhMjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTM4MCwxMSArMzgwLDExIEBACiAKIAkvKiBzaG93IHRoZSBjYXJkIHRoYXQgd2UgYXJlIG5vdCBwb2xsaW5nIGFueW1vcmUgKi8KIAlpZiAoaXNfcWVic20ocSkpIHsKLQkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklULAorCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklULAogCQkJICAgICAgIHEtPnUuaW4uYWNrX2NvdW50KTsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwogCX0gZWxzZQotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CisJCXNldF9idWZfc3RhdGUocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFubm91bmNlX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCkBAIC00MTksMTUgKzQxOSwxNSBAQAogCQlpZiAoIXEtPnUuaW4ucG9sbGluZykgewogCQkJcS0+dS5pbi5wb2xsaW5nID0gMTsKIAkJCXEtPnUuaW4uYWNrX2NvdW50ID0gY291bnQ7Ci0JCQlxLT5sYXN0X21vdmVfZnRjID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJCQlxLT51LmluLmFja19zdGFydCA9IHEtPmZpcnN0X3RvX2NoZWNrOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJLyogZGVsZXRlIHRoZSBwcmV2aW91cyBBQ0sncyAqLwotCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJCXNldF9idWZfc3RhdGVzKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCiAJCQkgICAgICAgcS0+dS5pbi5hY2tfY291bnQpOwogCQlxLT51LmluLmFja19jb3VudCA9IGNvdW50OwotCQlxLT5sYXN0X21vdmVfZnRjID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gcS0+Zmlyc3RfdG9fY2hlY2s7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQzOSwxNCArNDM5LDEzIEBACiAJaWYgKHEtPnUuaW4ucG9sbGluZykgewogCQkvKiByZXNldCB0aGUgcHJldmlvdXMgQUNLIGJ1dCBmaXJzdCBzZXQgdGhlIG5ldyBvbmUgKi8KIAkJc2V0X2J1Zl9zdGF0ZShxLCBuZXcsIFNMU0JfUF9JTlBVVF9BQ0spOwotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7Ci0JfQotCWVsc2UgeworCQlzZXRfYnVmX3N0YXRlKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOworCX0gZWxzZSB7CiAJCXEtPnUuaW4ucG9sbGluZyA9IDE7Ci0JCXNldF9idWZfc3RhdGUocSwgcS0+Zmlyc3RfdG9fY2hlY2ssIFNMU0JfUF9JTlBVVF9BQ0spOworCQlzZXRfYnVmX3N0YXRlKHEsIG5ldywgU0xTQl9QX0lOUFVUX0FDSyk7CiAJfQogCi0JcS0+bGFzdF9tb3ZlX2Z0YyA9IG5ldzsKKwlxLT51LmluLmFja19zdGFydCA9IG5ldzsKIAljb3VudC0tOwogCWlmICghY291bnQpCiAJCXJldHVybjsKQEAgLTQ1NSw3ICs0NTQsNyBAQAogCSAqIE5lZWQgdG8gY2hhbmdlIGFsbCBQUklNRUQgYnVmZmVycyB0byBOT1RfSU5JVCwgb3RoZXJ3aXNlCiAJICogd2UncmUgbG9vc2luZyBpbml0aWF0aXZlIGluIHRoZSB0aGluaW50IGNvZGUuCiAJICovCi0Jc2V0X2J1Zl9zdGF0ZXMocSwgbmV4dF9idWYocS0+Zmlyc3RfdG9fY2hlY2spLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCisJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+Zmlyc3RfdG9fY2hlY2ssIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKIAkJICAgICAgIGNvdW50KTsKIH0KIApAQCAtNTIzLDcgKzUyMiw4IEBACiAKIAlidWZuciA9IGdldF9pbmJvdW5kX2J1ZmZlcl9mcm9udGllcihxKTsKIAotCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlX2Z0YykgfHwgcS0+cWRpb19lcnJvcikgeworCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwogCQlpZiAoIW5lZWRfc2lnYV9zeW5jKHEpICYmICFwY2lfb3V0X3N1cHBvcnRlZChxKSkKIAkJCXEtPnUuaW4udGltZXN0YW1wID0gZ2V0X3VzZWNzKCk7CiAKQEAgLTU3MCwyOSArNTcwLDMwIEBACiAJfQogfQogCi12b2lkIHFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKK3ZvaWQgcWRpb19raWNrX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQlpbnQgY291bnQsIHN0YXJ0LCBlbmQ7Ci0KLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuaW5ib3VuZF9oYW5kbGVyKTsKLQotCXN0YXJ0ID0gcS0+Zmlyc3RfdG9fa2ljazsKLQllbmQgPSBxLT5maXJzdF90b19jaGVjazsKLQlpZiAoZW5kID49IHN0YXJ0KQotCQljb3VudCA9IGVuZCAtIHN0YXJ0OwotCWVsc2UKLQkJY291bnQgPSBlbmQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gc3RhcnQ7Ci0KLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2loIHM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwlpbnQgc3RhcnQgPSBxLT5maXJzdF90b19raWNrOworCWludCBlbmQgPSBxLT5maXJzdF90b19jaGVjazsKKwlpbnQgY291bnQ7CiAKIAlpZiAodW5saWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfQUNUSVZFKSkKIAkJcmV0dXJuOwogCi0JcS0+aGFuZGxlcihxLT5pcnFfcHRyLT5jZGV2LCBxLT5xZGlvX2Vycm9yLCBxLT5uciwKLQkJICAgc3RhcnQsIGNvdW50LCBxLT5pcnFfcHRyLT5pbnRfcGFybSk7CisJY291bnQgPSBzdWJfYnVmKGVuZCwgc3RhcnQpOworCisJaWYgKHEtPmlzX2lucHV0X3EpIHsKKwkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcik7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJraWggczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOworCX0gZWxzZSB7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IG5yOiUxZCIsIHEtPm5yKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwl9CisKKwlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLCBzdGFydCwgY291bnQsCisJCSAgIHEtPmlycV9wdHItPmludF9wYXJtKTsKIAogCS8qIGZvciB0aGUgbmV4dCB0aW1lICovCi0JcS0+Zmlyc3RfdG9fa2ljayA9IHEtPmZpcnN0X3RvX2NoZWNrOworCXEtPmZpcnN0X3RvX2tpY2sgPSBlbmQ7CiAJcS0+cWRpb19lcnJvciA9IDA7CiB9CiAKQEAgLTYwMyw3ICs2MDQsNyBAQAogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAotCXFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIocSk7CisJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKIAlpZiAoIXFkaW9faW5ib3VuZF9xX2RvbmUocSkpCiAJCS8qIG1lYW5zIHBvbGwgdGltZSBpcyBub3QgeWV0IG92ZXIgKi8KQEAgLTY5OCwyMSArNjk5LDIxIEBACiAKIAlidWZuciA9IGdldF9vdXRib3VuZF9idWZmZXJfZnJvbnRpZXIocSk7CiAKLQlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZV9mdGMpIHx8IHEtPnFkaW9fZXJyb3IpIHsKLQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IGJ1Zm5yOworCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CisJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAib3V0IG1vdmVkOiUxZCIsIHEtPm5yKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBxZGlvX2tpY2tfb3V0Ym91bmRfcShzdHJ1Y3QgcWRpb19xICpxKQorc3RhdGljIGludCBxZGlvX2tpY2tfb3V0Ym91bmRfcShzdHJ1Y3QgcWRpb19xICpxKQogewogCXVuc2lnbmVkIGludCBidXN5X2JpdDsKIAlpbnQgY2M7CiAKIAlpZiAoIW5lZWRfc2lnYV9vdXQocSkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13OiUxZCIsIHEtPm5yKTsKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuc2lnYV9vdXQpOwpAQCAtNzI0LDc1ICs3MjUsMzcgQEAKIAljYXNlIDI6CiAJCWlmIChidXN5X2JpdCkgewogCQkJREJGX0VSUk9SKCIlNHggY2MyIFJFUDolMWQiLCBTQ0hfTk8ocSksIHEtPm5yKTsKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYyB8IFFESU9fRVJST1JfU0lHQV9CVVNZOwotCQl9IGVsc2UgewotCQkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtdyBjYzI6JTFkIiwKLQkJCQkgICAgICBxLT5ucik7Ci0JCQlxLT5xZGlvX2Vycm9yID0gY2M7Ci0JCX0KKwkJCWNjIHw9IFFESU9fRVJST1JfU0lHQV9CVVNZOworCQl9IGVsc2UKKwkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXcgY2MyOiUxZCIsIHEtPm5yKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCWNhc2UgMzoKIAkJREJGX0VSUk9SKCIlNHggU0lHQS1XOiUxZCIsIFNDSF9OTyhxKSwgY2MpOwotCQlxLT5xZGlvX2Vycm9yID0gY2M7CiAJCWJyZWFrOwogCX0KLX0KLQotc3RhdGljIHZvaWQgcWRpb19raWNrX291dGJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSkKLXsKLQlpbnQgc3RhcnQsIGVuZCwgY291bnQ7Ci0KLQlzdGFydCA9IHEtPmZpcnN0X3RvX2tpY2s7Ci0JZW5kID0gcS0+bGFzdF9tb3ZlX2Z0YzsKLQlpZiAoZW5kID49IHN0YXJ0KQotCQljb3VudCA9IGVuZCAtIHN0YXJ0OwotCWVsc2UKLQkJY291bnQgPSBlbmQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gc3RhcnQ7Ci0KLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2lja291dGg6ICUxZCIsIHEtPm5yKTsKLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiczolM2QgYzolM2QiLCBzdGFydCwgY291bnQpOwotCi0JaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX0FDVElWRSkpCi0JCXJldHVybjsKLQotCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKLQkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwotCi0JLyogZm9yIHRoZSBuZXh0IHRpbWU6ICovCi0JcS0+Zmlyc3RfdG9fa2ljayA9IHEtPmxhc3RfbW92ZV9mdGM7Ci0JcS0+cWRpb19lcnJvciA9IDA7CisJcmV0dXJuIGNjOwogfQogCiBzdGF0aWMgdm9pZCBfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhzdHJ1Y3QgcWRpb19xICpxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGFza2xldF9vdXRib3VuZCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKLQogCUJVR19PTihhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpIDwgMCk7CiAKIAlpZiAocWRpb19vdXRib3VuZF9xX21vdmVkKHEpKQotCQlxZGlvX2tpY2tfb3V0Ym91bmRfaGFuZGxlcihxKTsKKwkJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX1pGQ1BfUUZNVCkgeworCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fWkZDUF9RRk1UKQogCQlpZiAoIXBjaV9vdXRfc3VwcG9ydGVkKHEpICYmICFxZGlvX291dGJvdW5kX3FfZG9uZShxKSkKLQkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwotCQlyZXR1cm47Ci0JfQorCQkJZ290byBzY2hlZDsKIAogCS8qIGJhaWwgb3V0IGZvciBIaXBlclNvY2tldHMgdW5pY2FzdCBxdWV1ZXMgKi8KIAlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX0lRRElPX1FGTVQgJiYgIW11bHRpY2FzdF9vdXRib3VuZChxKSkKIAkJcmV0dXJuOwogCiAJaWYgKChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCkgJiYKLQkgICAgKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpID4gUURJT19JUURJT19QT0xMX0xWTCkgewotCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKLQkJcmV0dXJuOwotCX0KKwkgICAgKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpID4gUURJT19JUURJT19QT0xMX0xWTCkKKwkJZ290byBzY2hlZDsKIAogCWlmIChxLT51Lm91dC5wY2lfb3V0X2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTgxMCw2ICs3NzMsMTIgQEAKIAkJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z190bF9vdXRfdGltZXIpOwogCQl9CiAJfQorCXJldHVybjsKKworc2NoZWQ6CisJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CisJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiB9CiAKIC8qIG91dGJvdW5kIHRhc2tsZXQgKi8KQEAgLTgyMiw2ICs3OTEsOSBAQAogdm9pZCBxZGlvX291dGJvdW5kX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcWRpb19xICpxID0gKHN0cnVjdCBxZGlvX3EgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CiAJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiB9CiAKQEAgLTg2Myw2ICs4MzUsOSBAQAogCWludCBpOwogCXN0cnVjdCBxZGlvX3EgKnE7CiAKKwlpZiAodW5saWtlbHkoaXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCXJldHVybjsKKwogCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5wY2lfaW50KTsKIAogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCkBAIC0xMDY1LDggKzEwNDAsOSBAQAogICogQGNkZXY6IGFzc29jaWF0ZWQgY2N3IGRldmljZQogICogQGhvdzogdXNlIGhhbHQgb3IgY2xlYXIgdG8gc2h1dGRvd24KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHFkaW9fc2h1dGRvd24oKSBmb3IgQGNkZXYgd2l0aCBtZXRob2QgQGhvdwotICogYW5kIG9uIHN1Y2Nlc3MgcWRpb19mcmVlKCkgZm9yIEBjZGV2LgorICogVGhpcyBmdW5jdGlvbiBjYWxscyBxZGlvX3NodXRkb3duKCkgZm9yIEBjZGV2IHdpdGggbWV0aG9kIEBob3cuCisgKiBhbmQgcWRpb19mcmVlKCkuIFRoZSBxZGlvX2ZyZWUoKSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZCBzaW5jZQorICogIWlycV9wdHIgaXMgYWxyZWFkeSBjaGVja2VkLgogICovCiBpbnQgcWRpb19jbGVhbnVwKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgaG93KQogewpAQCAtMTA3Nyw4ICsxMDUzLDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyYyA9IHFkaW9fc2h1dGRvd24oY2RldiwgaG93KTsKLQlpZiAocmMgPT0gMCkKLQkJcmMgPSBxZGlvX2ZyZWUoY2Rldik7CisKKwlxZGlvX2ZyZWUoY2Rldik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWRpb19jbGVhbnVwKTsKQEAgLTEwOTAsMTEgKzEwNjYsMTEgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCi0JCXRhc2tsZXRfZGlzYWJsZSgmcS0+dGFza2xldCk7CisJCXRhc2tsZXRfa2lsbCgmcS0+dGFza2xldCk7CiAKIAlmb3JfZWFjaF9vdXRwdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkgewotCQl0YXNrbGV0X2Rpc2FibGUoJnEtPnRhc2tsZXQpOwogCQlkZWxfdGltZXIoJnEtPnUub3V0LnRpbWVyKTsKKwkJdGFza2xldF9raWxsKCZxLT50YXNrbGV0KTsKIAl9CiB9CiAKQEAgLTExMTIsNiArMTA4OCw3IEBACiAJaWYgKCFpcnFfcHRyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCUJVR19PTihpcnFzX2Rpc2FibGVkKCkpOwogCURCRl9FVkVOVCgicXNodXRkb3duOiU0eCIsIGNkZXYtPnByaXZhdGUtPnNjaGlkLnNjaF9ubyk7CiAKIAltdXRleF9sb2NrKCZpcnFfcHRyLT5zZXR1cF9tdXRleCk7CkBAIC0xMTI0LDYgKzExMDEsMTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UgaXMgZ29pbmcgZG93bi4gU2NoZWR1bGluZyB0aGUgcXVldWUKKwkgKiB0YXNrbGV0cyBpcyBmb3JiaWRkZW4gZnJvbSBoZXJlIG9uLgorCSAqLworCXFkaW9fc2V0X3N0YXRlKGlycV9wdHIsIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpOworCiAJdGlxZGlvX3JlbW92ZV9pbnB1dF9xdWV1ZXMoaXJxX3B0cik7CiAJcWRpb19zaHV0ZG93bl9xdWV1ZXMoY2Rldik7CiAJcWRpb19zaHV0ZG93bl9kZWJ1Z19lbnRyaWVzKGlycV9wdHIsIGNkZXYpOwpAQCAtMTQwMyw5ICsxMzg2LDggQEAKIAlzd2l0Y2ggKGlycV9wdHItPnN0YXRlKSB7CiAJY2FzZSBRRElPX0lSUV9TVEFURV9TVE9QUEVEOgogCWNhc2UgUURJT19JUlFfU1RBVEVfRVJSOgotCQltdXRleF91bmxvY2soJmlycV9wdHItPnNldHVwX211dGV4KTsKLQkJcWRpb19zaHV0ZG93bihjZGV2LCBRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7Ci0JCXJldHVybiAtRUlPOworCQlyYyA9IC1FSU87CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXFkaW9fc2V0X3N0YXRlKGlycV9wdHIsIFFESU9fSVJRX1NUQVRFX0FDVElWRSk7CiAJCXJjID0gMDsKQEAgLTE0NDIsMTAgKzE0MjQsMTAgQEAKICAqIEBidWZucjogZmlyc3QgYnVmZmVyIHRvIHByb2Nlc3MKICAqIEBjb3VudDogaG93IG1hbnkgYnVmZmVycyBhcmUgZW1wdGllZAogICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfaW5ib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAotCQkJICAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGhhbmRsZV9pbmJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCisJCQkgIGludCBidWZuciwgaW50IGNvdW50KQogewotCWludCB1c2VkLCBjYywgZGlmZjsKKwlpbnQgdXNlZCwgZGlmZjsKIAogCWlmICghcS0+dS5pbi5wb2xsaW5nKQogCQlnb3RvIHNldDsKQEAgLTE0NTYsMTkgKzE0MzgsMTggQEAKIAkJcS0+dS5pbi5wb2xsaW5nID0gMDsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwogCQlnb3RvIHNldDsKLQl9IGVsc2UgaWYgKGJ1Zl9pbl9iZXR3ZWVuKHEtPmxhc3RfbW92ZV9mdGMsIGJ1Zm5yLCBjb3VudCkpIHsKKwl9IGVsc2UgaWYgKGJ1Zl9pbl9iZXR3ZWVuKHEtPnUuaW4uYWNrX3N0YXJ0LCBidWZuciwgY291bnQpKSB7CiAJCWlmIChpc19xZWJzbShxKSkgewotCQkJLyogcGFydGlhbCBvdmVyd3JpdGUsIGp1c3QgdXBkYXRlIGxhc3RfbW92ZV9mdGMgKi8KKwkJCS8qIHBhcnRpYWwgb3ZlcndyaXRlLCBqdXN0IHVwZGF0ZSBhY2tfc3RhcnQgKi8KIAkJCWRpZmYgPSBhZGRfYnVmKGJ1Zm5yLCBjb3VudCk7Ci0JCQlkaWZmID0gc3ViX2J1ZihkaWZmLCBxLT5sYXN0X21vdmVfZnRjKTsKKwkJCWRpZmYgPSBzdWJfYnVmKGRpZmYsIHEtPnUuaW4uYWNrX3N0YXJ0KTsKIAkJCXEtPnUuaW4uYWNrX2NvdW50IC09IGRpZmY7CiAJCQlpZiAocS0+dS5pbi5hY2tfY291bnQgPD0gMCkgewogCQkJCXEtPnUuaW4ucG9sbGluZyA9IDA7CiAJCQkJcS0+dS5pbi5hY2tfY291bnQgPSAwOwotCQkJCS8qIFRPRE86IG11c3Qgd2Ugc2V0IGxhc3RfbW92ZV9mdGMgdG8gc29tZXRoaW5nIG1lYW5pbmdmdWw/ICovCiAJCQkJZ290byBzZXQ7CiAJCQl9Ci0JCQlxLT5sYXN0X21vdmVfZnRjID0gYWRkX2J1ZihxLT5sYXN0X21vdmVfZnRjLCBkaWZmKTsKKwkJCXEtPnUuaW4uYWNrX3N0YXJ0ID0gYWRkX2J1ZihxLT51LmluLmFja19zdGFydCwgZGlmZik7CiAJCX0KIAkJZWxzZQogCQkJLyogdGhlIG9ubHkgQUNLIHdpbGwgYmUgZGVsZXRlZCwgc28gc3RvcCBwb2xsaW5nICovCkBAIC0xNDgzLDEzICsxNDY0LDExIEBACiAKIAkvKiBubyBuZWVkIHRvIHNpZ25hbCBhcyBsb25nIGFzIHRoZSBhZGFwdGVyIGhhZCBmcmVlIGJ1ZmZlcnMgKi8KIAlpZiAodXNlZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCWlmIChuZWVkX3NpZ2FfaW4ocSkpIHsKLQkJY2MgPSBxZGlvX3NpZ2FfaW5wdXQocSk7Ci0JCWlmIChjYykKLQkJCXEtPnFkaW9fZXJyb3IgPSBjYzsKLQl9CisJaWYgKG5lZWRfc2lnYV9pbihxKSkKKwkJcmV0dXJuIHFkaW9fc2lnYV9pbnB1dChxKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xNDk5LDExICsxNDc4LDExIEBACiAgKiBAYnVmbnI6IGZpcnN0IGJ1ZmZlciB0byBwcm9jZXNzCiAgKiBAY291bnQ6IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIGZpbGxlZAogICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKLQkJCSAgICBpbnQgYnVmbnIsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgaGFuZGxlX291dGJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCisJCQkgICBpbnQgYnVmbnIsIGludCBjb3VudCkKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXRlOwotCWludCB1c2VkOworCWludCB1c2VkLCByYyA9IDA7CiAKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcik7CiAKQEAgLTE1MTgsMjcgKzE0OTcsMjYgQEAKIAogCWlmIChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCkgewogCQlpZiAobXVsdGljYXN0X291dGJvdW5kKHEpKQotCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCQllbHNlCiAJCQlpZiAoKHEtPmlycV9wdHItPnNzcWRfZGVzYy5tbXdjID4gMSkgJiYKIAkJCSAgICAoY291bnQgPiAxKSAmJgogCQkJICAgIChjb3VudCA8PSBxLT5pcnFfcHRyLT5zc3FkX2Rlc2MubW13YykpIHsKIAkJCQkvKiBleHBsb2l0IGVuaGFuY2VkIFNJR0EgKi8KIAkJCQlxLT51Lm91dC51c2VfZW5oX3NpZ2EgPSAxOwotCQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJKiBPbmUgc2lnYS13IHBlciBidWZmZXIgcmVxdWlyZWQgZm9yIHVuaWNhc3QKIAkJCQkqIEhpcGVyU29ja2V0cy4KIAkJCQkqLwogCQkJCXEtPnUub3V0LnVzZV9lbmhfc2lnYSA9IDA7Ci0JCQkJd2hpbGUgKGNvdW50LS0pCi0JCQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCXdoaWxlIChjb3VudC0tKSB7CisJCQkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCQkJCWlmIChyYykKKwkJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCX0KLQotCQkvKiByZXBvcnQgQ0M9MiBjb25kaXRpb25zIHN5bmNocm9ub3VzbHkgKi8KLQkJaWYgKHEtPnFkaW9fZXJyb3IpCi0JCQlfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhxKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNTUwLDE0ICsxNTI4LDE0IEBACiAJLyogdHJ5IHRvIGZhc3QgcmVxdWV1ZSBidWZmZXJzICovCiAJZ2V0X2J1Zl9zdGF0ZShxLCBwcmV2X2J1ZihidWZuciksICZzdGF0ZSwgMCk7CiAJaWYgKHN0YXRlICE9IFNMU0JfQ1VfT1VUUFVUX1BSSU1FRCkKLQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CisJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJZWxzZSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJmYXN0LXJlcSIpOwogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZmFzdF9yZXF1ZXVlKTsKIAl9CiBvdXQ6Ci0JLyogRml4bWU6IGNvdWxkIHdhaXQgZm9yZXZlciBpZiBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi8KIAl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMTU5NiwxNCArMTU3NCwxMiBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNhbGxmbGFncyAmIFFESU9fRkxBR19TWU5DX0lOUFVUKQotCQloYW5kbGVfaW5ib3VuZChpcnFfcHRyLT5pbnB1dF9xc1txX25yXSwgY2FsbGZsYWdzLCBidWZuciwKLQkJCSAgICAgICBjb3VudCk7CisJCXJldHVybiBoYW5kbGVfaW5ib3VuZChpcnFfcHRyLT5pbnB1dF9xc1txX25yXSwKKwkJCQkgICAgICBjYWxsZmxhZ3MsIGJ1Zm5yLCBjb3VudCk7CiAJZWxzZSBpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1NZTkNfT1VUUFVUKQotCQloYW5kbGVfb3V0Ym91bmQoaXJxX3B0ci0+b3V0cHV0X3FzW3FfbnJdLCBjYWxsZmxhZ3MsIGJ1Zm5yLAotCQkJCWNvdW50KTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCQlyZXR1cm4gaGFuZGxlX291dGJvdW5kKGlycV9wdHItPm91dHB1dF9xc1txX25yXSwKKwkJCQkgICAgICAgY2FsbGZsYWdzLCBidWZuciwgY291bnQpOworCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG9fUURJTyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKaW5kZXggYzA4MzU2Yi4uMThkNTRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKQEAgLTExNyw3ICsxMTcsNiBAQAogCXEtPm1hc2sgPSAxIDw8ICgzMSAtIGkpOwogCXEtPm5yID0gaTsKIAlxLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX3N0b3JhZ2VfbGlzdHMoc3RydWN0IHFkaW9fcSAqcSwgc3RydWN0IHFkaW9faXJxICppcnFfcHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKaW5kZXggOGU5MGUxNC4uYzY1NWQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCkBAIC0zMSw2ICszMSw3IEBACiAKIC8qIGxpc3Qgb2YgdGhpbiBpbnRlcnJ1cHQgaW5wdXQgcXVldWVzICovCiBzdGF0aWMgTElTVF9IRUFEKHRpcV9saXN0KTsKK0RFRklORV9NVVRFWCh0aXFfbGlzdF9sb2NrKTsKIAogLyogYWRhcHRlciBsb2NhbCBzdW1tYXJ5IGluZGljYXRvciAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgKnRpcWRpb19hbHNpOwpAQCAtOTUsMTIgKzk2LDExIEBACiAJaWYgKCFjc3NfcWRpb19vbWl0X3N2cyAmJiBpcnFfcHRyLT5zaWdhX2ZsYWcuc3luYykKIAkJY3NzX3FkaW9fb21pdF9zdnMgPSAxOwogCi0JZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkgeworCW11dGV4X2xvY2soJnRpcV9saXN0X2xvY2spOworCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCiAJCWxpc3RfYWRkX3JjdSgmcS0+ZW50cnksICZ0aXFfbGlzdCk7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCX0KKwltdXRleF91bmxvY2soJnRpcV9saXN0X2xvY2spOwogCXhjaGcoaXJxX3B0ci0+ZHNjaSwgMSk7Ci0JdGFza2xldF9zY2hlZHVsZSgmdGlxZGlvX3Rhc2tsZXQpOwogfQogCiAvKgpAQCAtMTE4LDcgKzExOCwxMCBAQAogCQkvKiBpZiBlc3RhYmxpc2ggdHJpZ2dlcmVkIGFuIGVycm9yICovCiAJCWlmICghcSB8fCAhcS0+ZW50cnkucHJldiB8fCAhcS0+ZW50cnkubmV4dCkKIAkJCWNvbnRpbnVlOworCisJCW11dGV4X2xvY2soJnRpcV9saXN0X2xvY2spOwogCQlsaXN0X2RlbF9yY3UoJnEtPmVudHJ5KTsKKwkJbXV0ZXhfdW5sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKIAkJc3luY2hyb25pemVfcmN1KCk7CiAJfQogfQpAQCAtMTU1LDE1ICsxNTgsMTUgQEAKIAkgKi8KIAlxZGlvX2NoZWNrX291dGJvdW5kX2FmdGVyX3RoaW5pbnQocSk7CiAKLWFnYWluOgogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAotCXFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIocSk7CisJcWRpb19raWNrX2hhbmRsZXIocSk7CiAKIAlpZiAoIXRpcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3ApOwotCQlnb3RvIGFnYWluOworCQlpZiAobGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CiAJfQogCiAJcWRpb19zdG9wX3BvbGxpbmcocSk7CkBAIC0xNzMsNyArMTc2LDggQEAKIAkgKi8KIAlpZiAoIXRpcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3AyKTsKLQkJZ290byBhZ2FpbjsKKwkJaWYgKGxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogCX0KIH0KIApAQCAtMzY2LDEwICszNzAsMTEgQEAKIAogdm9pZCBfX2V4aXQgdGlxZGlvX3VucmVnaXN0ZXJfdGhpbmludHModm9pZCkKIHsKLQl0YXNrbGV0X2Rpc2FibGUoJnRpcWRpb190YXNrbGV0KTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZ0aXFfbGlzdCkpOwogCiAJaWYgKHRpcWRpb19hbHNpKSB7CiAJCXMzOTBfdW5yZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdCh0aXFkaW9fYWxzaSwgUURJT19BSVJRX0lTQyk7CiAJCWlzY191bnJlZ2lzdGVyKFFESU9fQUlSUV9JU0MpOwogCX0KKwl0YXNrbGV0X2tpbGwoJnRpcWRpb190YXNrbGV0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKaW5kZXggY2IyMmI5Ny4uNjViNmE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKQEAgLTEyOCw4ICsxMjgsNyBAQAogCWlmIChsID09IHpkZXYtPmxpc3QucHJldikKIAkJcmV0dXJuOwogCS8qIE1vdmUgemRldiBiZWhpbmQgbCAqLwotCWxpc3RfZGVsKCZ6ZGV2LT5saXN0KTsKLQlsaXN0X2FkZCgmemRldi0+bGlzdCwgbCk7CisJbGlzdF9tb3ZlKCZ6ZGV2LT5saXN0LCBsKTsKIH0KIAogLyoqCkBAIC0xNTcsOCArMTU2LDcgQEAKIAlpZiAobCA9PSB6ZGV2LT5saXN0Lm5leHQpCiAJCXJldHVybjsKIAkvKiBNb3ZlIHpkZXYgYmVmb3JlIGwgKi8KLQlsaXN0X2RlbCgmemRldi0+bGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmemRldi0+bGlzdCwgbCk7CisJbGlzdF9tb3ZlX3RhaWwoJnpkZXYtPmxpc3QsIGwpOwogfQogCiBzdGF0aWMgdm9pZCB6Y3J5cHRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCmluZGV4IGU3YTFlMjIuLmMyMGQ0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCkBAIC03ODEsOCArNzgxLDcgQEAKIAkJLyogU2lnbmFsIHBlbmRpbmcuICovCiAJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CiBvdXRfZnJlZToKLQltZW1zZXQoYXBfbXNnLm1lc3NhZ2UsIDB4MCwgYXBfbXNnLmxlbmd0aCk7Ci0Ja2ZyZWUoYXBfbXNnLm1lc3NhZ2UpOworCWt6ZnJlZShhcF9tc2cubWVzc2FnZSk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvZWJjZGljLmMgYi9kcml2ZXJzL3MzOTAvZWJjZGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5Yzk4ZGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL2ViY2RpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9lYmNkaWMuYwotICogICAgRUNCRElDIC0+IEFTQ0lJLCBBU0NJSSAtPiBFQ0JESUMgY29udmVyc2lvbiB0YWJsZXMuCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk4IElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0vKgotICogQVNDSUkgLT4gRUJDRElDCi0gKi8KLV9fdTggX2FzY2ViY1syNTZdID0KLXsKLSAvKjAwICBOTCAgICBTSCAgICBTWCAgICBFWCAgICBFVCAgICBOUSAgICBBSyAgICBCTCAqLwotICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDM3LCAweDJELCAweDJFLCAweDJGLAotIC8qMDggIEJTICAgIEhUICAgIExGICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgIDB4MTYsIDB4MDUsIDB4MTUsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gLyoxMCAgREwgICAgRDEgICAgRDIgICAgRDMgICAgRDQgICAgTksgICAgU04gICAgRUIgKi8KLSAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgzQywgMHgxNSwgMHgzMiwgMHgyNiwKLSAvKjE4ICBDTiAgICBFTSAgICBTQiAgICBFQyAgICBGUyAgICBHUyAgICBSUyAgICBVUyAqLwotICAgICAweDE4LCAweDE5LCAweDNGLCAweDI3LCAweDFDLCAweDFELCAweDFFLCAweDFGLAotIC8qMjAgIFNQICAgICAhICAgICAiICAgICAjICAgICAkICAgICAlICAgICAmICAgICAnICovCi0gICAgIDB4NDAsIDB4NUEsIDB4N0YsIDB4N0IsIDB4NUIsIDB4NkMsIDB4NTAsIDB4N0QsCi0gLyoyOCAgICggICAgICkgICAgICogICAgICsgICAgICwgICAgIC0gICAgLiAgICAgIC8gKi8KLSAgICAgMHg0RCwgMHg1RCwgMHg1QywgMHg0RSwgMHg2QiwgMHg2MCwgMHg0QiwgMHg2MSwKLSAvKjMwICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAqLwotICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LAotIC8qMzggICA4ICAgICA5ICAgICA6ICAgICA7ICAgICA8ICAgICA9ICAgICA+ICAgICA/ICovCi0gICAgIDB4RjgsIDB4RjksIDB4N0EsIDB4NUUsIDB4NEMsIDB4N0UsIDB4NkUsIDB4NkYsCi0gLyo0MCAgIEAgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgMHg3QywgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNywKLSAvKjQ4ICAgSCAgICAgSSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAqLwotICAgICAweEM4LCAweEM5LCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LAotIC8qNTAgICBQICAgICBRICAgICBSICAgICBTICAgICBUICAgICBVICAgICBWICAgICBXICovCi0gICAgIDB4RDcsIDB4RDgsIDB4RDksIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsCi0gLyo1OCAgIFggICAgIFkgICAgIFogICAgIFsgICAgIFwgICAgIF0gICAgIF4gICAgIF8gKi8KLSAgICAgMHhFNywgMHhFOCwgMHhFOSwgMHhBRCwgMHhFMCwgMHhCRCwgMHg1RiwgMHg2RCwKLSAvKjYwICAgYCAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAqLwotICAgICAweDc5LCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAotIC8qNjggICBoICAgICBpICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICovCi0gICAgIDB4ODgsIDB4ODksIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCi0gLyo3MCAgIHAgICAgIHEgICAgIHIgICAgIHMgICAgIHQgICAgIHUgICAgIHYgICAgIHcgKi8KLSAgICAgMHg5NywgMHg5OCwgMHg5OSwgMHhBMiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwKLSAvKjc4ICAgeCAgICAgeSAgICAgeiAgICAgeyAgICAgfCAgICAgfSAgICAgfiAgICBETCAqLwotICAgICAweEE3LCAweEE4LCAweEE5LCAweEMwLCAweDRGLCAweEQwLCAweEExLCAweDA3LAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLAotICAgICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweEZGCi19OwotCi0vKgotICogRUJDRElDIC0+IEFTQ0lJCi0gKi8KLV9fdTggX2ViY2FzY1syNTZdID0KLXsKLSAvKiAweDAwICAgTlVMICAgU09IICAgU1RYICAgRVRYICAqU0VMICAgIEhUICAqUk5MICAgREVMICovCi0gICAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNywgMHgwOSwgMHgwNywgMHg3RiwKLSAvKiAweDA4ICAgLUdFICAtU1BTICAtUlBUICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAvKiAweDEwICAgRExFICAgREMxICAgREMyICAgREMzICAtUkVTICAgLU5MICAgIEJTICAtUE9DCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUVOUCAgLT5MRiAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MDcsIDB4MEEsIDB4MDgsIDB4MDcsCi0gLyogMHgxOCAgIENBTiAgICBFTSAgLVVCUyAgLUNVMSAgLUlGUyAgLUlHUyAgLUlSUyAgLUlUQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JVVMgKi8KLSAgICAgICAgICAweDE4LCAweDE5LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4MjAgICAtRFMgIC1TT1MgICAgRlMgIC1XVVMgIC1CWVAgICAgTEYgICBFVEIgICBFU0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSU5QICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxQywgMHgwNywgMHgwNywgMHgwQSwgMHgxNywgMHgxQiwKLSAvKiAweDI4ICAgLVNBICAtU0ZFICAgLVNNICAtQ1NQICAtTUZBICAgRU5RICAgQUNLICAgQkVMCi0gICAgICAgICAgICAgICAgICAgICAgIC1TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA1LCAweDA2LCAweDA3LAotIC8qIDB4MzAgIC0tLS0gIC0tLS0gICBTWU4gICAtSVIgICAtUFAgIC1UUk4gIC1OQlMgICBFT1QgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDE2LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA0LAotIC8qIDB4MzggIC1TQlMgICAtSVQgIC1SRkYgIC1DVTMgICBEQzQgICBOQUsgIC0tLS0gICBTVUIgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDE0LCAweDE1LCAweDA3LCAweDFBLAotIC8qIDB4NDAgICAgU1AgICBSU1AgICAgICAgICAgIIHkICAgICAgICAgICAgICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyMCwgMHhGRiwgMHg4MywgMHg4NCwgMHg4NSwgMHhBMCwgMHgwNywgMHg4NiwKLSAvKiAweDQ4ICAgICAgICAgICAgICAgICAgICAgICAuICAgICA8ICAgICAoICAgICArICAgICB8ICovCi0gICAgICAgICAgMHg4NywgMHhBNCwgMHg5QiwgMHgyRSwgMHgzQywgMHgyOCwgMHgyQiwgMHg3QywKLSAvKiAweDUwICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHgyNiwgMHg4MiwgMHg4OCwgMHg4OSwgMHg4QSwgMHhBMSwgMHg4QywgMHgwNywKLSAvKiAweDU4ICAgICAgICAgICCB3yAgICAgISAgICAgJCAgICAgKiAgICAgKSAgICAgOyAgICAgICAqLwotICAgICAgICAgIDB4OEQsIDB4RTEsIDB4MjEsIDB4MjQsIDB4MkEsIDB4MjksIDB4M0IsIDB4QUEsCi0gLyogMHg2MCAgICAgLSAgICAgLyAgLS0tLSAgICAggcQgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDJELCAweDJGLCAweDA3LCAweDhFLCAweDA3LCAweDA3LCAweDA3LCAweDhGLAotIC8qIDB4NjggICAgICAgICAgICAgIC0tLS0gICAgICwgICAgICUgICAgIF8gICAgID4gICAgID8gKi8gCi0gICAgICAgICAgMHg4MCwgMHhBNSwgMHgwNywgMHgyQywgMHgyNSwgMHg1RiwgMHgzRSwgMHgzRiwKLSAvKiAweDcwICAtLS0tICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgwNywgMHg5MCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweDc4ICAgICAqICAgICBgICAgICA6ICAgICAjICAgICBAICAgICAnICAgICA9ICAgICAiICovCi0gICAgICAgICAgMHg3MCwgMHg2MCwgMHgzQSwgMHgyMywgMHg0MCwgMHgyNywgMHgzRCwgMHgyMiwKLSAvKiAweDgwICAgICAqICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgICAgICAgMHgwNywgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLSAvKiAweDg4ICAgICBoICAgICBpICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHhBRSwgMHhBRiwgMHgwNywgMHgwNywgMHgwNywgMHhGMSwKLSAvKiAweDkwICAgICCBsCAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbyAgICAgcCAqLwotICAgICAgICAgIDB4RjgsIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsIDB4NzAsCi0gLyogMHg5OCAgICAgcSAgICAgciAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4QTYsIDB4QTcsIDB4OTEsIDB4MDcsIDB4OTIsIDB4MDcsCi0gLyogMHhBMCAgICAgICAgICAgfiAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAgICAgeCAqLwotICAgICAgICAgIDB4RTYsIDB4N0UsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0gLyogMHhBOCAgICAgeSAgICAgeiAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4QUQsIDB4QUIsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHhCMCAgICAgXiAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAggacgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDVFLCAweDlDLCAweDlELCAweEZBLCAweDA3LCAweDA3LCAweDA3LCAweEFDLAotIC8qIDB4QjggICAgICAgIC0tLS0gICAgIFsgICAgIF0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweEFCLCAweDA3LCAweDVCLCAweDVELCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4QzAgICAgIHsgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgKi8KLSAgICAgICAgICAweDdCLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAotIC8qIDB4QzggICAgIEggICAgIEkgIC0tLS0gICAgICAgICAgIIH2ICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg0OCwgMHg0OSwgMHgwNywgMHg5MywgMHg5NCwgMHg5NSwgMHhBMiwgMHgwNywKLSAvKiAweEQwICAgICB9ICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPICAgICBQICovCi0gICAgICAgICAgMHg3RCwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKLSAvKiAweEQ4ICAgICBRICAgICBSICAtLS0tICAgICAgICAgICCB/CAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4NTEsIDB4NTIsIDB4MDcsIDB4OTYsIDB4ODEsIDB4OTcsIDB4QTMsIDB4OTgsCi0gLyogMHhFMCAgICAgXCAgICAgICAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAgICAgWCAqLwotICAgICAgICAgIDB4NUMsIDB4RjYsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCi0gLyogMHhFOCAgICAgWSAgICAgWiAgICAgICAgLS0tLSAgICAggdYgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDU5LCAweDVBLCAweEZELCAweDA3LCAweDk5LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4RjAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KLSAgICAgICAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotIC8qIDB4RjggICAgIDggICAgIDkgIC0tLS0gIC0tLS0gICAgIIHcICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgzOCwgMHgzOSwgMHgwNywgMHgwNywgMHg5QSwgMHgwNywgMHgwNywgMHgwNwotfTsKLQotLyoKLSAqIEVCQ0RJQyAoY2FwaXRhbHMpIC0+IEFTQ0lJIChzbWFsbCBjYXNlKQotICovCi1fX3U4IF9lYmNhc2NfcmVkdWNlX2Nhc2VbMjU2XSA9Ci17Ci0gLyogMHgwMCAgIE5VTCAgIFNPSCAgIFNUWCAgIEVUWCAgKlNFTCAgICBIVCAgKlJOTCAgIERFTCAqLwotICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDcsIDB4MDksIDB4MDcsIDB4N0YsCi0KLSAvKiAweDA4ICAgLUdFICAtU1BTICAtUlBUICAgIFZUICAgIEZGICAgIENSICAgIFNPICAgIFNJICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLQotIC8qIDB4MTAgICBETEUgICBEQzEgICBEQzIgICBEQzMgIC1SRVMgICAtTkwgICAgQlMgIC1QT0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRU5QICAtPkxGICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgwNywgMHgwQSwgMHgwOCwgMHgwNywKLQotIC8qIDB4MTggICBDQU4gICAgRU0gIC1VQlMgIC1DVTEgIC1JRlMgIC1JR1MgIC1JUlMgIC1JVEIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSVVTICovCi0gICAgICAgICAgMHgxOCwgMHgxOSwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4MjAgICAtRFMgIC1TT1MgICAgRlMgIC1XVVMgIC1CWVAgICAgTEYgICBFVEIgICBFU0MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSU5QICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxQywgMHgwNywgMHgwNywgMHgwQSwgMHgxNywgMHgxQiwKLQotIC8qIDB4MjggICAtU0EgIC1TRkUgICAtU00gIC1DU1AgIC1NRkEgICBFTlEgICBBQ0sgICBCRUwKLSAgICAgICAgICAgICAgICAgICAgICAgLVNXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDcsCi0KLSAvKiAweDMwICAtLS0tICAtLS0tICAgU1lOICAgLUlSICAgLVBQICAtVFJOICAtTkJTICAgRU9UICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxNiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNCwKLQotIC8qIDB4MzggIC1TQlMgICAtSVQgIC1SRkYgIC1DVTMgICBEQzQgICBOQUsgIC0tLS0gICBTVUIgKi8KLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDE0LCAweDE1LCAweDA3LCAweDFBLAotCi0gLyogMHg0MCAgICBTUCAgIFJTUCAgICAgICAgICAggeQgICAgICAgICAgICAgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDIwLCAweEZGLCAweDgzLCAweDg0LCAweDg1LCAweEEwLCAweDA3LCAweDg2LAotCi0gLyogMHg0OCAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgPCAgICAgKCAgICAgKyAgICAgfCAqLwotICAgICAgICAgIDB4ODcsIDB4QTQsIDB4OUIsIDB4MkUsIDB4M0MsIDB4MjgsIDB4MkIsIDB4N0MsCi0KLSAvKiAweDUwICAgICAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHgyNiwgMHg4MiwgMHg4OCwgMHg4OSwgMHg4QSwgMHhBMSwgMHg4QywgMHgwNywKLQotIC8qIDB4NTggICAgICAgICAgIIHfICAgICAhICAgICAkICAgICAqICAgICApICAgICA7ICAgICAgICovCi0gICAgICAgICAgMHg4RCwgMHhFMSwgMHgyMSwgMHgyNCwgMHgyQSwgMHgyOSwgMHgzQiwgMHhBQSwKLQotIC8qIDB4NjAgICAgIC0gICAgIC8gIC0tLS0gICAgIIHEICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyRCwgMHgyRiwgMHgwNywgMHg4NCwgMHgwNywgMHgwNywgMHgwNywgMHg4RiwKLQotIC8qIDB4NjggICAgICAgICAgICAgIC0tLS0gICAgICwgICAgICUgICAgIF8gICAgID4gICAgID8gKi8gCi0gICAgICAgICAgMHg4MCwgMHhBNSwgMHgwNywgMHgyQywgMHgyNSwgMHg1RiwgMHgzRSwgMHgzRiwKLQotIC8qIDB4NzAgIC0tLS0gICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDA3LCAweDkwLCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHg3OCAgICAgKiAgICAgYCAgICAgOiAgICAgIyAgICAgQCAgICAgJyAgICAgPSAgICAgIiAqLwotICAgICAgICAgIDB4NzAsIDB4NjAsIDB4M0EsIDB4MjMsIDB4NDAsIDB4MjcsIDB4M0QsIDB4MjIsCi0KLSAvKiAweDgwICAgICAqICAgICBhICAgICBiICAgICBjICAgICBkICAgICBlICAgICBmICAgICBnICovCi0gICAgICAgICAgMHgwNywgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQotIC8qIDB4ODggICAgIGggICAgIGkgICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDY4LCAweDY5LCAweEFFLCAweEFGLCAweDA3LCAweDA3LCAweDA3LCAweEYxLAotCi0gLyogMHg5MCAgICAggbAgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gICAgIHAgKi8KLSAgICAgICAgICAweEY4LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotCi0gLyogMHg5OCAgICAgcSAgICAgciAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NzEsIDB4NzIsIDB4QTYsIDB4QTcsIDB4OTEsIDB4MDcsIDB4OTIsIDB4MDcsCi0KLSAvKiAweEEwICAgICAgICAgICB+ICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICAgICB4ICovCi0gICAgICAgICAgMHhFNiwgMHg3RSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKLQotIC8qIDB4QTggICAgIHkgICAgIHogICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDc5LCAweDdBLCAweEFELCAweEFCLCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHhCMCAgICAgXiAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAggacgIC0tLS0gICAgICAgKi8KLSAgICAgICAgICAweDVFLCAweDlDLCAweDlELCAweEZBLCAweDA3LCAweDA3LCAweDA3LCAweEFDLAotCi0gLyogMHhCOCAgICAgICAgLS0tLSAgICAgWyAgICAgXSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4QUIsIDB4MDcsIDB4NUIsIDB4NUQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEMwICAgICB7ICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICovCi0gICAgICAgICAgMHg3QiwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQotIC8qIDB4QzggICAgIEggICAgIEkgIC0tLS0gICAgICAgICAgIIH2ICAgICAgICAgICAgICAtLS0tICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHgwNywgMHg5MywgMHg5NCwgMHg5NSwgMHhBMiwgMHgwNywKLQotIC8qIDB4RDAgICAgIH0gICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gICAgIFAgKi8KLSAgICAgICAgICAweDdELCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotCi0gLyogMHhEOCAgICAgUSAgICAgUiAgLS0tLSAgICAgICAgICAggfwgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDcxLCAweDcyLCAweDA3LCAweDk2LCAweDgxLCAweDk3LCAweEEzLCAweDk4LAotCi0gLyogMHhFMCAgICAgXCAgICAgICAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAgICAgWCAqLwotICAgICAgICAgIDB4NUMsIDB4RjYsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0KLSAvKiAweEU4ICAgICBZICAgICBaICAgICAgICAtLS0tICAgICCB1iAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4NzksIDB4N0EsIDB4RkQsIDB4MDcsIDB4OTQsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweEYwICAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICovCi0gICAgICAgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQotIC8qIDB4RjggICAgIDggICAgIDkgIC0tLS0gIC0tLS0gICAgIIHcICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgzOCwgMHgzOSwgMHgwNywgMHgwNywgMHg4MSwgMHgwNywgMHgwNywgMHgwNwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDYzODJjMDQuLjk2ZWRkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAKIG9iai0kKENPTkZJR19TTVNHSVVDVikgKz0gc21zZ2l1Y3Yubwogb2JqLSQoQ09ORklHX0xDUykgKz0gbGNzLm8gY3UzMDg4Lm8KIG9iai0kKENPTkZJR19DTEFXKSArPSBjbGF3Lm8gY3UzMDg4Lm8KLXFldGgteSArPSBxZXRoX2NvcmVfc3lzLm8gcWV0aF9jb3JlX21haW4ubyBxZXRoX2NvcmVfbXBjLm8gcWV0aF9jb3JlX29mZmwubworcWV0aC15ICs9IHFldGhfY29yZV9zeXMubyBxZXRoX2NvcmVfbWFpbi5vIHFldGhfY29yZV9tcGMubwogb2JqLSQoQ09ORklHX1FFVEgpICs9IHFldGgubwogcWV0aF9sMi15ICs9IHFldGhfbDJfbWFpbi5vCiBvYmotJChDT05GSUdfUUVUSF9MMikgKz0gcWV0aF9sMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IGY1ZTYxODUuLjMwYTQzY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC02MCw2ICs2MCw5IEBACiAgKiAgICAxLjI1ICBBZGRlZCBQYWNraW5nIHN1cHBvcnQKICAqICAgIDEuNQogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImNsYXciCisKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CkBAIC05NCw3ICs5Nyw3IEBACiAgICBDTEFXIHVzZXMgdGhlIHMzOTBkYmYgZmlsZSBzeXN0ZW0gIHNlZSBjbGF3X3RyYWNlIGFuZCBjbGF3X3NldHVwCiAqLwogCi0KK3N0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gIkNMQVcgZHJpdmVyIjsKIHN0YXRpYyBjaGFyIGRlYnVnX2J1ZmZlclsyNTVdOwogLyoqCiAgKiBEZWJ1ZyBGYWNpbGl0eSBTdHVmZgpAQCAtMjA2LDIwICsyMDksMzAgQEAKIHN0YXRpYyBpbnQgcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKGludCBudW1fb2ZfcGFnZXMpOwogc3RhdGljIHN0cnVjdCBza19idWZmICpjbGF3X3BhY2tfc2tiKHN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdnB0cik7CiAvKiBzeXNmcyBGdW5jdGlvbnMgKi8KLXN0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19obmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X3didWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCitzdGF0aWMgc3NpemVfdCBjbGF3X3JidWZmX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogc3RhdGljIGludCBjbGF3X2FkZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgY2xhd19yZW1vdmVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTI5OCw4ICszMTEsOCBAQAogCWlmIChyYykgewogCQlwcm9iZV9lcnJvcihjZ2Rldik7CiAJCXB1dF9kZXZpY2UoJmNnZGV2LT5kZXYpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZGRfZmlsZXMgZmFpbGVkICVzICVzIEV4aXQgTGluZSAlZCBcbiIsCi0JCQlkZXZfbmFtZSgmY2dkZXYtPmNkZXZbMF0tPmRldiksIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCWRldl9lcnIoJmNnZGV2LT5kZXYsICJDcmVhdGluZyB0aGUgL3Byb2MgZmlsZXMgZm9yIGEgbmV3IgorCQkiIENMQVcgZGV2aWNlIGZhaWxlZFxuIik7CiAJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAicHJvYmV4JWQiLCByYyk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0zMzUsNiArMzQ4LDggQEAKICAgICAgICAgcmM9Y2xhd19od190eCggc2tiLCBkZXYsIDEgKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2socF9jaC0+Y2RldiksIHNhdmVmbGFncyk7CiAJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJjbGF3dHglZCIsIHJjKTsKKwlpZiAocmMpCisJCXJjID0gTkVUREVWX1RYX0JVU1k7CiAgICAgICAgIHJldHVybiByYzsKIH0gICAvKiAgZW5kIG9mIGNsYXdfdHggKi8KIApAQCAtNDk2LDcgKzUxMSw4IEBACiAgICAgICAgICAgIH4oREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpKSAhPSAweDAwKSB8fAogICAgICAgICAgICAoKChwcml2cHRyLT5jaGFubmVsW1JFQURdLmZsYWcgfAogCSAgIAlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5mbGFnKSAmIENMQVdfVElNRVIpICE9IDB4MDApKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBzaWRlIGlzIG5vdCByZWFkeVxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2LAorCQkJIiVzOiByZW1vdGUgc2lkZSBpcyBub3QgcmVhZHlcbiIsIGRldi0+bmFtZSk7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJub3RyZHkiKTsKIAogICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMjsgIGkrKykgewpAQCAtNTgyLDEwICs1OTgsOSBAQAogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJjbGF3aXJxIik7CiAgICAgICAgIC8qIEJ5cGFzcyBhbGwgJ3Vuc29saWNpdGVkIGludGVycnVwdHMnICovCiAJaWYgKCFjZGV2LT5kZXYuZHJpdmVyX2RhdGEpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiB1bnNvbGljaXRlZCBpbnRlcnJ1cHQgZm9yIGRldmljZToiCi0JCSAJIiVzIHJlY2VpdmVkIGMtJTAyeCBkLSUwMnhcbiIsCi0JCSAgICAgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgaXJiLT5zY3N3LmNtZC5jc3RhdCwKLQkJICAgICAgIGlyYi0+c2Nzdy5jbWQuZHN0YXQpOworCQlkZXZfd2FybigmY2Rldi0+ZGV2LCAiQW4gdW5pbml0aWFsaXplZCBDTEFXIGRldmljZSByZWNlaXZlZCBhbiIKKwkJCSIgSVJRLCBjLSUwMnggZC0lMDJ4XG4iLAorCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5kc3RhdCk7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRpcnEiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTU5Nyw4ICs2MTIsNyBAQAogCWVsc2UgaWYgKHByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmNkZXYgPT0gY2RldikKIAkJcF9jaCA9ICZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKIAllbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogQ2FuJ3QgZGV0ZXJtaW5lIGNoYW5uZWwgZm9yICIKLQkJCSJpbnRlcnJ1cHQsIGRldmljZSAlc1xuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlkZXZfd2FybigmY2Rldi0+ZGV2LCAiVGhlIGRldmljZSBpcyBub3QgYSBDTEFXIGRldmljZVxuIik7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJiYWRjaGFuIik7CiAJCXJldHVybjsKIAl9CkBAIC02MTIsNyArNjI2LDggQEAKIAogCS8qIENoZWNrIGZvciBnb29kIHN1YmNoYW5uZWwgcmV0dXJuIGNvZGUsIG90aGVyd2lzZSBpbmZvIG1lc3NhZ2UgKi8KIAlpZiAoaXJiLT5zY3N3LmNtZC5jc3RhdCAmJiAhKGlyYi0+c2Nzdy5jbWQuY3N0YXQgJiBTQ0hOX1NUQVRfUENJKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBzdWJjaGFubmVsIGNoZWNrIGZvciBkZXZpY2U6ICUwNHggLSIKKwkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCSIlczogc3ViY2hhbm5lbCBjaGVjayBmb3IgZGV2aWNlOiAlMDR4IC0iCiAJCQkiIFNjaCBTdGF0ICUwMnggIERldiBTdGF0ICUwMnggQ1BBIC0gJTA0eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9jaC0+ZGV2bm8sCiAJCQlpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmRzdGF0LApAQCAtNjUxLDcgKzY2Niw3IEBACiAJCQl3YWtlX3VwKCZwX2NoLT53YWl0KTsgLyogd2FrZSBjbGF3X29wZW4gKFJFQUQpKi8KIAkJfSBlbHNlIGlmIChwX2NoLT5mbGFnID09IENMQVdfV1JJVEUpIHsKIAkJCXBfY2gtPmNsYXdfc3RhdGUgPSBDTEFXX1NUQVJUX1dSSVRFOwotCQkJLyoJc2VuZCBTWVNURU1fVkFMSURBVEUJCQkqLworCQkJLyogICAgICBzZW5kIFNZU1RFTV9WQUxJREFURSAgICAgICAgICAgICAgICAgICAgKi8KIAkJCWNsYXdfc3RydF9yZWFkKGRldiwgTE9DS19OTyk7CiAJCQljbGF3X3NlbmRfY29udHJvbChkZXYsCiAJCQkJU1lTVEVNX1ZBTElEQVRFX1JFUVVFU1QsCkBAIC02NTksMTAgKzY3NCw5IEBACiAJCQkJcF9lbnYtPmhvc3RfbmFtZSwKIAkJCQlwX2Vudi0+YWRhcHRlcl9uYW1lKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IHVuc29saWNpdGVkICIKLQkJCQkiaW50ZXJydXB0IGZvciBkZXZpY2U6IgotCQkJCSIlcyByZWNlaXZlZCBjLSUwMnggZC0lMDJ4XG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLAorCQkJZGV2X3dhcm4oJmNkZXYtPmRldiwgIlRoZSBDTEFXIGRldmljZSByZWNlaXZlZCIKKwkJCQkiIGFuIHVuZXhwZWN0ZWQgSVJRLCAiCisJCQkJImMtJTAyeCBkLSUwMnhcbiIsCiAJCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwKIAkJCQlpcmItPnNjc3cuY21kLmRzdGF0KTsKIAkJCXJldHVybjsKQEAgLTY3Nyw4ICs2OTEsOCBAQAogCQkJICAgIChwX2NoLT5pcmItPmVjd1swXSAmIDB4NDApID09IDB4NDAgfHwKIAkJCSAgICAocF9jaC0+aXJiLT5lY3dbMF0pICAgICAgICA9PSAwKSB7CiAJCQkJcHJpdnB0ci0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc3RhcnQgaXMgIgotCQkJCQkicmVxdWlyZWQgYWZ0ZXIgcmVtb3RlICIKKwkJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCQkiJXM6IFJlc3RhcnQgaXMgcmVxdWlyZWQgYWZ0ZXIgcmVtb3RlICIKIAkJCQkJInNpZGUgcmVjb3ZlcnMgXG4iLAogCQkJCQlkZXYtPm5hbWUpOwogCQkJfQpAQCAtNzEzLDExICs3MjcsMTMgQEAKIAkJcmV0dXJuOwogCWNhc2UgQ0xBV19TVEFSVF9XUklURToKIAkJaWYgKHBfY2gtPmlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBDaGVjayBPY2N1cmVkIGluICIKKwkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJIiVzOiBVbml0IENoZWNrIE9jY3VyZWQgaW4gIgogCQkJCSJ3cml0ZSBjaGFubmVsXG4iLCBkZXYtPm5hbWUpOwogCQkJY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7CiAJCQlpZiAocF9jaC0+aXJiLT5lY3dbMF0gJiAweDgwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlc2V0dGluZyBFdmVudCAiCisJCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkJIiVzOiBSZXNldHRpbmcgRXZlbnQgIgogCQkJCQkib2NjdXJyZWQ6XG4iLCBkZXYtPm5hbWUpOwogCQkJCWluaXRfdGltZXIoJnBfY2gtPnRpbWVyKTsKIAkJCQlwX2NoLT50aW1lci5mdW5jdGlvbiA9CkBAIC03MjUsNyArNzQxLDggQEAKIAkJCQlwX2NoLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcF9jaDsKIAkJCQlwX2NoLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIDEwKkhaOwogCQkJCWFkZF90aW1lcigmcF9jaC0+dGltZXIpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3cml0ZSBjb25uZWN0aW9uICIKKwkJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCQkiJXM6IHdyaXRlIGNvbm5lY3Rpb24gIgogCQkJCQkicmVzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCX0KIAkJCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJyc3RydHdydCIpOwpAQCAtNzMzLDkgKzc1MCwxMCBAQAogCQl9CiAJCWlmIChwX2NoLT5pcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9FWENFUCkgewogCQkJY2xlYXJfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBFeGNlcHRpb24gIgotCQkJICAgICAgICJPY2N1cmVkIGluIHdyaXRlIGNoYW5uZWxcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJIiVzOiBVbml0IEV4Y2VwdGlvbiAiCisJCQkJIm9jY3VycmVkIGluIHdyaXRlIGNoYW5uZWxcbiIsCisJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQlpZiAoISgocF9jaC0+aXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU0VDX1NUQVRVUykgfHwKIAkJKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgPT0gU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKQEAgLTc1Nyw4ICs3NzUsOSBAQAogCQlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiU3RXdEV4aXQiKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3cm9uZyBzZWxlY3Rpb24gY29kZSAtIGlycSAiCi0JCQkic3RhdGU9JWRcbiIsIGRldi0+bmFtZSwgcF9jaC0+Y2xhd19zdGF0ZSk7CisJCWRldl93YXJuKCZjZGV2LT5kZXYsCisJCQkiVGhlIENMQVcgZGV2aWNlIGZvciAlcyByZWNlaXZlZCBhbiB1bmV4cGVjdGVkIElSUVxuIiwKKwkJCSBkZXYtPm5hbWUpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiYmFkSVJRIik7CiAJCXJldHVybjsKICAgICAgICAgfQpAQCAtOTEwLDggKzkyOSwxMCBAQAogICAgICAgICBpZiAoKChwcml2cHRyLT5jaGFubmVsW1JFQURdLmxhc3RfZHN0YXQgfAogCQlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5sYXN0X2RzdGF0KSAmCiAJCX4oREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpKSAhPSAweDAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNoYW5uZWwgcHJvYmxlbXMgZHVyaW5nIGNsb3NlIC0gIgotCQkJInJlYWQ6ICUwMnggLSAgd3JpdGU6ICUwMnhcbiIsCisJCWRldl93YXJuKCZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldiwKKwkJCSJEZWFjdGl2YXRpbmcgJXMgY29tcGxldGVkIHdpdGggaW5jb3JyZWN0IgorCQkJIiBzdWJjaGFubmVsIHN0YXR1cyAiCisJCQkiKHJlYWQgJTAyeCwgd3JpdGUgJTAyeClcbiIsCiAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLAogCQlwcml2cHRyLT5jaGFubmVsW1JFQURdLmxhc3RfZHN0YXQsCiAJCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLmxhc3RfZHN0YXQpOwpAQCAtMTAxMiw3ICsxMDMzLDcgQEAKIHBhZ2VzX3RvX29yZGVyX29mX21hZyhpbnQgbnVtX29mX3BhZ2VzKQogewogCWludAlvcmRlcl9vZl9tYWc9MTsJCS8qIGFzc3VtZSAyIHBhZ2VzICovCi0JaW50CW51bXA9MjsKKwlpbnQJbnVtcDsKIAogCUNMQVdfREJGX1RFWFRfKDUsIHRyYWNlLCAicGFnZXMlZCIsIG51bV9vZl9wYWdlcyk7CiAJaWYgKG51bV9vZl9wYWdlcyA9PSAxKSAgIHtyZXR1cm4gMDsgfSAgLyogbWFnbml0dWRlIG9mIDAgPSAxIHBhZ2UgKi8KQEAgLTEwNzYsOCArMTA5Nyw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0ID09TlVMTCApIHsKLSAgICAgICAgICAgICAgICBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdD0gcF9maXJzdDsgIC8qICAgIHNldCBuZXcgZmlyc3QgKi8KLSAgICAgICAgICAgICAgICBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9sYXN0ID0gcF9sYXN0OyAgIC8qICAgIHNldCBuZXcgbGFzdCAgKi8KKwkJcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9maXJzdCA9IHBfZmlyc3Q7ICAvKiAgc2V0IG5ldyBmaXJzdCAqLworCQlwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3QgID0gcF9sYXN0OyAgIC8qICBzZXQgbmV3IGxhc3QgICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAKQEAgLTExMTMsNyArMTEzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3QtPnJfVElDXzIuY2RhPQogCQkJCShfX3UzMilfX3BhKCZwX2ZpcnN0LT5yZWFkKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogICAgICBjaGFpbiBpbiBuZXcgc2V0IG9mIGJsb2NrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qICAgICAgY2hhaW4gaW4gbmV3IHNldCBvZiBibG9ja3MgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3QtPm5leHQgPSBwX2ZpcnN0OwogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfcmVhZF9hY3RpdmVfbGFzdD1wX2xhc3Q7CiAgICAgICAgIH0gLyogZW5kIG9mIGlmICggcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3QgPT1OVUxMKSAgKi8KQEAgLTExMzUsMjEgKzExNTYsMTggQEAKIAkJY2FzZSAtRUJVU1k6IC8qIEJVU1kgaXMgYSB0cmFuc2llbnQgc3RhdGUgbm8gYWN0aW9uIG5lZWRlZCAqLwogCQkJYnJlYWs7CiAJCWNhc2UgLUVOT0RFVjoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogTWlzc2luZyBkZXZpY2UgY2FsbGVkICIKLQkJCQkiZm9yIElPIEVOT0RFVlxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVJTzoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogU3RhdHVzIHBlbmRpbmcuLi4gRUlPIFxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCQlkZXZfZXJyKCZjZGV2LT5kZXYsICJUaGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciBpcyBub3QiCisJCQkJIiBhdmFpbGFibGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVJTlZBTDoKLQkJCXByaW50ayhLRVJOX0VNRVJHICIlczogSW52YWxpZCBEZXYgU3RhdGUgRUlOVkFMIFxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCQlkZXZfZXJyKCZjZGV2LT5kZXYsCisJCQkJIlRoZSBzdGF0dXMgb2YgdGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIiCisJCQkJIiBpcyBub3QgdmFsaWRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFVua25vd24gZXJyb3IgaW4gIgotCQkJCSAiRG9fSU8gJWRcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpLAotCQkJICAgICAgIHJldHVybl9jb2RlKTsKKwkJCWRldl9lcnIoJmNkZXYtPmRldiwgIlRoZSBjb21tb24gZGV2aWNlIGxheWVyIgorCQkJCSIgcmV0dXJuZWQgZXJyb3IgY29kZSAlZFxuIiwKKwkJCQkgIHJldHVybl9jb2RlKTsKIAkJfQogCX0KIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2N3cmV0Iik7CkBAIC0xMTYzLDQyICsxMTgxLDM3IEBACiBjY3dfY2hlY2tfdW5pdF9jaGVjayhzdHJ1Y3QgY2hiayAqIHBfY2gsIHVuc2lnbmVkIGNoYXIgc2Vuc2UgKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcF9jaC0+bmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcF9jaC0+Y2Rldi0+ZGV2OwogCiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgInVuaXRjaGVrIik7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBVbml0IENoZWNrIHdpdGggc2Vuc2UgYnl0ZToweCUwNHhcbiIsCi0JICAgICAgIG5kZXYtPm5hbWUsIHNlbnNlKTsKKwlkZXZfd2FybihkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIGRpc2Nvbm5lY3RlZFxuIiwKKwkJbmRldi0+bmFtZSk7CiAKLSAgICAgICAgaWYgKHNlbnNlICYgMHg0MCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnRlcmZhY2UgZGlzY29ubmVjdCBvciAiCi0JCQkJIlNlbGVjdGl2ZSByZXNldCAiCi0JCQkJIm9jY3VycmVkIChyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTeXN0ZW0gcmVzZXQgb2NjdXJlZCIKLQkJCQkiIChyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzZW5zZSAmIDB4MjApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDA0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogRGF0YS1zdHJlYW1pbmcgIgotCQkJCSJ0aW1lb3V0KVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEYXRhLXRyYW5zZmVyIHBhcml0eSIKLQkJCQkiIGVycm9yXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2Vuc2UgJiAweDEwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbnNlICYgMHgyMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEhhcmR3YXJlIG1hbGZ1bmN0aW9uICIKLQkJCQkiKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlYWQtZGF0YSBwYXJpdHkgZXJyb3IgIgotCQkJCSIocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoc2Vuc2UgJiAweDQwKSB7CisJCWlmIChzZW5zZSAmIDB4MDEpIHsKKwkJCWRldl93YXJuKGRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGZvciIKKwkJCQkiICVzIGhhcyBiZWVuIHJlc2V0XG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9CisJfSBlbHNlIGlmIChzZW5zZSAmIDB4MjApIHsKKwkJaWYgKHNlbnNlICYgMHgwNCkgeworCQkJZGV2X3dhcm4oZGV2LCAiQSBkYXRhIHN0cmVhbWluZyB0aW1lb3V0IG9jY3VycmVkIgorCQkJCSIgZm9yICVzXG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9IGVsc2UgaWYgKHNlbnNlICYgMHgxMCkgeworCQkJZGV2X3dhcm4oZGV2LCAiVGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIgZm9yICVzIgorCQkJCSIgaXMgZmF1bHR5XG4iLAorCQkJCW5kZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4oZGV2LCAiQSBkYXRhIHRyYW5zZmVyIHBhcml0eSBlcnJvciBvY2N1cnJlZCIKKwkJCQkiIGZvciAlc1xuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfQorCX0gZWxzZSBpZiAoc2Vuc2UgJiAweDEwKSB7CisJCWRldl93YXJuKGRldiwgIkEgcmVhZCBkYXRhIHBhcml0eSBlcnJvciBvY2N1cnJlZCIKKwkJCSIgZm9yICVzXG4iLAorCQkJbmRldi0+bmFtZSk7CisJfQogCiB9ICAgLyogICAgZW5kIG9mIGNjd19jaGVja191bml0X2NoZWNrICAgICovCiAKQEAgLTEyMzUsNyArMTI0OCw3IEBACiAJCQlicmVhazsKIAl9CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfSAgICAvKiAgICBlbmQgb2YgZmluZF9saW5rICAgICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKQEAgLTEzNDcsNyArMTM2MCwxMCBAQAogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfd3JpdGVfZnJlZV9jaGFpbj1wX3RoaXNfY2N3LT5uZXh0OwogICAgICAgICAgICAgICAgIHBfdGhpc19jY3ctPm5leHQ9TlVMTDsKICAgICAgICAgICAgICAgICAtLXByaXZwdHItPndyaXRlX2ZyZWVfY291bnQ7IC8qIC0xICovCi0gICAgICAgICAgICAgICAgYnl0ZXNJblRoaXNCdWZmZXI9bGVuX29mX2RhdGE7CisJCWlmIChsZW5fb2ZfZGF0YSA+PSBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkKKwkJCWJ5dGVzSW5UaGlzQnVmZmVyID0gcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CisJCWVsc2UKKwkJCWJ5dGVzSW5UaGlzQnVmZmVyID0gbGVuX29mX2RhdGE7CiAgICAgICAgICAgICAgICAgbWVtY3B5KCBwX3RoaXNfY2N3LT5wX2J1ZmZlcixwRGF0YUFkZHJlc3MsIGJ5dGVzSW5UaGlzQnVmZmVyKTsKICAgICAgICAgICAgICAgICBsZW5fb2ZfZGF0YS09Ynl0ZXNJblRoaXNCdWZmZXI7CiAgICAgICAgICAgICAgICAgcERhdGFBZGRyZXNzKz0odW5zaWduZWQgbG9uZylieXRlc0luVGhpc0J1ZmZlcjsKQEAgLTEzNzUsNyArMTM5MSw3IEBACiAgICAgICAgICovCiAKICAgICAgICAgaWYgKHBfZmlyc3RfY2N3IT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgLyogICAgICBzZXR1cCBlbmRpbmcgY2N3IHNlcXVlbmNlIGZvciB0aGlzIHNlZ21lbnQgICAgICAgICAgICAgICovCisJCS8qICAgICAgc2V0dXAgZW5kaW5nIGNjdyBzZXF1ZW5jZSBmb3IgdGhpcyBzZWdtZW50ICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHBFbmQ9cHJpdnB0ci0+cF9lbmRfY2N3OwogICAgICAgICAgICAgICAgIGlmIChwRW5kLT53cml0ZTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBFbmQtPndyaXRlMT0weDAwOyAgIC8qIHNlY29uZCBlbmQgY2N3IGlzIG5vdyBhY3RpdmUgKi8KQEAgLTE2OTcsMTAgKzE3MTMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT4gd19USUNfMS5mbGFncyAgICAgID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT4gd19USUNfMS5jb3VudCAgICAgID0gMDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpID49CisJCQlpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZiArCisJCQkJCSAgICBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgPj0KIAkJCSAgICgodW5zaWduZWQgbG9uZykocF9idWZmKzIqCi0JCQkJKHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSAtMSkgJiBQQUdFX01BU0spKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmY9IHBfYnVmZitwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJCSAgICAocHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpIC0gMSkgJiBQQUdFX01BU0spKSB7CisJCQkJcF9idWZmID0gcF9idWZmK3ByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQpAQCAtMTg0MCwxNSArMTg1NywxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWYtPmhlYWRlci5vcGNvZGU9MHhmZjsKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT5oZWFkZXIuZmxhZz1DTEFXX1BFTkRJTkc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmK3ByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpID49Ci0JCQkJKCh1bnNpZ25lZCBsb25nKShwX2J1ZmYrMioocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSkgLTEpCi0JCQkJICYgUEFHRV9NQVNLKSApIHsKKwkJCWlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmK3ByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpID49CisJCQkgICgodW5zaWduZWQgbG9uZykocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpCisJCQkJIC0xKQorCQkJICAgJiBQQUdFX01BU0spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZj0gcF9idWZmK3ByaXZwdHItPnBfZW52LT5yZWFkX3NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmPQogCQkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKQotCQkJCQkocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpIC0xKQorCQkJCQkocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpLTEpCiAJCQkJCSAmIFBBR0VfTUFTSykgOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gICAvKiBmb3IgcmVhZF9idWZmZXJzICAgKi8KQEAgLTE4NTYsMjQgKzE4NzQsMjggQEAKICAgICAgICAgICBlbHNlIHsgIC8qIHJlYWQgU2l6ZSA+PSBQQUdFX1NJWkUgICovCiAgICAgICAgICAgICAgICAgZm9yIChpPTAgOyBpPCBwcml2cHRyLT5wX2Vudi0+cmVhZF9idWZmZXJzIDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoX19HRlBfRE1BLAotCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKSApOworCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAorCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBfYnVmZj09TlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXZwdHItPnBfYnVmZl9jY3csCi0JCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPnBfYnVmZl9jY3dfbnVtKSk7CisJCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPgorCQkJCQlwX2J1ZmZfY2N3X251bSkpOwogCQkJCS8qIGZyZWUgdGhlIHdyaXRlIHBhZ2VzICAqLwogCSAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXByaXZwdHItPnBfYnVmZl93cml0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCi0JCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKLQkJCQkJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJ3cml0ZSApKTsKKwkJCQkJZnJlZV9wYWdlcygKKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKKwkJCQkJICAgIChpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAorCQkJCQkgICAgcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcndyaXRlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cF9idWYtPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJCQkvKiBmcmVlIGFueSByZWFkIHBhZ2VzIGFscmVhZHkgYWxsb2MgICovCiAJICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cHJpdnB0ci0+cF9idWZmX3JlYWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAotCQkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCi0JCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCApKTsKKwkJCQkJZnJlZV9wYWdlcygKKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKKwkJCQkJICAgIChpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAorCQkJCQkgICAgIHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9idWY9cF9idWYtPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9idWZmX2Njdz1OVUxMOwpAQCAtMjAwMyw3ICsyMDI1LDcgQEAKIAl0ZGV2ID0gJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2OwogCW1lbWNweSggJnRlbXBfaG9zdF9uYW1lLCBwX2Vudi0+aG9zdF9uYW1lLCA4KTsKICAgICAgICAgbWVtY3B5KCAmdGVtcF93c19uYW1lLCBwX2Vudi0+YWRhcHRlcl9uYW1lICwgOCk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiAiCisJZGV2X2luZm8odGRldiwgIiVzOiBDTEFXIGRldmljZSAlLjhzOiAiCiAJCSJSZWNlaXZlZCBDb250cm9sIFBhY2tldFxuIiwKIAkJZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOwogICAgICAgICBpZiAocHJpdnB0ci0+cmVsZWFzZV9wZW5kPT0xKSB7CkBAIC0yMDIyLDMyICsyMDQ0LDMwIEBACiAJCWlmIChwX2N0bGJrLT52ZXJzaW9uICE9IENMQVdfVkVSU0lPTl9JRCkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19XUk9OR19WRVJTSU9OKTsKLQkJCXByaW50aygiJXM6ICVkIGlzIHdyb25nIHZlcnNpb24gaWQuICIKLQkJCSAgICAgICAiRXhwZWN0ZWQgJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAotCQkJICAgICAgIENMQVdfVkVSU0lPTl9JRCk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyIKKwkJCQkiIHVzZXMgYW4gaW5jb3JyZWN0IEFQSSB2ZXJzaW9uICVkXG4iLAorCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbik7CiAJCX0KIAkJcF9zeXN2YWwgPSAoc3RydWN0IHN5c3ZhbCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50aygiJXM6IFJlY3YgU3lzIFZhbGlkYXRlIFJlcXVlc3Q6ICIKLQkJICAgICAgICJWZXJzPSVkLGxpbmtfaWQ9JWQsQ29ycj0lZCxXUyBuYW1lPSUuIgotCQkgICAgICAgIjhzLEhvc3QgbmFtZT0lLjhzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAotCQkgICAgICAgcF9jdGxiay0+bGlua2lkLAotCQkgICAgICAgcF9jdGxiay0+Y29ycmVsYXRvciwKLQkJICAgICAgIHBfc3lzdmFsLT5XU19uYW1lLAotCQkgICAgICAgcF9zeXN2YWwtPmhvc3RfbmFtZSk7CisJCWRldl9pbmZvKHRkZXYsICIlczogUmVjdiBTeXMgVmFsaWRhdGUgUmVxdWVzdDogIgorCQkJIlZlcnM9JWQsbGlua19pZD0lZCxDb3JyPSVkLFdTIG5hbWU9JS44cywiCisJCQkiSG9zdCBuYW1lPSUuOHNcbiIsCisJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCisJCQlwX2N0bGJrLT5saW5raWQsCisJCQlwX2N0bGJrLT5jb3JyZWxhdG9yLAorCQkJcF9zeXN2YWwtPldTX25hbWUsCisJCQlwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKIAkJaWYgKG1lbWNtcCh0ZW1wX2hvc3RfbmFtZSwgcF9zeXN2YWwtPmhvc3RfbmFtZSwgOCkpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfTkFNRV9NSVNNQVRDSCk7CiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiSFNUQkFEIik7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgcF9zeXN2YWwtPmhvc3RfbmFtZSk7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgdGVtcF9ob3N0X25hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICBIb3N0IG5hbWUgbWlzbWF0Y2hcbiIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCA6JXM6ICIKLQkJCQkiZXhwZWN0ZWQgOiVzOiBcbiIsCi0JCQkJZGV2LT5uYW1lLAorCQkJZGV2X3dhcm4odGRldiwKKwkJCQkiSG9zdCBuYW1lICVzIGZvciAlcyBkb2VzIG5vdCBtYXRjaCB0aGUiCisJCQkJIiByZW1vdGUgYWRhcHRlciBuYW1lICVzXG4iLAogCQkJCXBfc3lzdmFsLT5ob3N0X25hbWUsCisJCQkJZGV2LT5uYW1lLAogCQkJCXRlbXBfaG9zdF9uYW1lKTsKIAkJfQogCQlpZiAobWVtY21wKHRlbXBfd3NfbmFtZSwgcF9zeXN2YWwtPldTX25hbWUsIDgpKSB7CkBAIC0yMDU2LDM1ICsyMDc2LDM4IEBACiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiV1NOQkFEIik7CiAJCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgcF9zeXN2YWwtPldTX25hbWUpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHRlbXBfd3NfbmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogV1MgbmFtZSBtaXNtYXRjaFxuIiwKLQkJCQlkZXYtPm5hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmVkIDolczogIgotCQkJICAgICAgICJleHBlY3RlZCA6JXM6IFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkgICAgICAgcF9zeXN2YWwtPldTX25hbWUsCi0JCQkgICAgICAgdGVtcF93c19uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsICJBZGFwdGVyIG5hbWUgJXMgZm9yICVzIGRvZXMgbm90IG1hdGNoIgorCQkJCSIgdGhlIHJlbW90ZSBob3N0IG5hbWUgJXNcbiIsCisJCQkJcF9zeXN2YWwtPldTX25hbWUsCisJCQkJZGV2LT5uYW1lLAorCQkJCXRlbXBfd3NfbmFtZSk7CiAJCX0KIAkJaWYgKChwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSA8IHBfZW52LT53cml0ZV9zaXplKSAmJgogCQkgICAgKHBfZW52LT5wYWNraW5nID09IDApKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX0hPU1RfUkNWX1RPT19TTUFMTCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaG9zdCB3cml0ZSBzaXplIGlzIHRvbyAiCi0JCQkJInNtYWxsXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4odGRldiwKKwkJCQkiVGhlIGxvY2FsIHdyaXRlIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gdGhlIgorCQkJCSIgcmVtb3RlIHJlYWQgYnVmZmVyXG4iKTsKIAkJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJ3cnRzemJhZCIpOwogCQl9CiAJCWlmICgocF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSA8IHBfZW52LT5yZWFkX3NpemUpICYmCiAJCSAgICAocF9lbnYtPnBhY2tpbmcgPT0gMCkpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBob3N0IHJlYWQgc2l6ZSBpcyB0b28gIgotCQkJCSJzbWFsbFxuIiwgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsCisJCQkJIlRoZSBsb2NhbCByZWFkIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gdGhlIgorCQkJCSIgcmVtb3RlIHdyaXRlIGJ1ZmZlclxuIik7CiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAicmRzaXpiYWQiKTsKIAkJfQogCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywgMCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgIgotCQkJImNvbXBsZXRlZC5cbiIsIGRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKLQkJcHJpbnRrKCIlczogc3lzIFZhbGlkYXRlIFJzaXplOiVkIFdzaXplOiVkXG4iLCBkZXYtPm5hbWUsCi0JCQlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplLCBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSk7CisJCWRldl9pbmZvKHRkZXYsCisJCQkiQ0xBVyBkZXZpY2UgJS44czogU3lzdGVtIHZhbGlkYXRlIgorCQkJIiBjb21wbGV0ZWQuXG4iLCB0ZW1wX3dzX25hbWUpOworCQlkZXZfaW5mbyh0ZGV2LAorCQkJIiVzOiBzeXMgVmFsaWRhdGUgUnNpemU6JWQgV3NpemU6JWRcbiIsCisJCQlkZXYtPm5hbWUsIHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUsCisJCQlwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSk7CiAJCXByaXZwdHItPnN5c3RlbV92YWxpZGF0ZV9jb21wID0gMTsKIAkJaWYgKHN0cm5jbXAocF9lbnYtPmFwaV90eXBlLCBXU19BUFBMX05BTUVfUEFDS0VELCA2KSA9PSAwKQogCQkJcF9lbnYtPnBhY2tpbmcgPSBQQUNLSU5HX0FTSzsKQEAgLTIwOTIsOCArMjExNSwxMCBAQAogCQlicmVhazsKIAljYXNlIFNZU1RFTV9WQUxJREFURV9SRVNQT05TRToKIAkJcF9zeXN2YWwgPSAoc3RydWN0IHN5c3ZhbCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50aygiJXM6IFJlY3YgU3lzIFZhbGlkYXRlIFJlc3A6IFZlcnM9JWQsQ29ycj0lZCxSQz0lZCwiCi0JCQkiV1MgbmFtZT0lLjhzLEhvc3QgbmFtZT0lLjhzXG4iLAorCQlkZXZfaW5mbyh0ZGV2LAorCQkJIlNldHRpbmdzIGZvciAlcyB2YWxpZGF0ZWQgKHZlcnNpb249JWQsICIKKwkJCSJyZW1vdGUgZGV2aWNlPSVkLCByYz0lZCwgYWRhcHRlciBuYW1lPSUuOHMsICIKKwkJCSJob3N0IG5hbWU9JS44cylcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLAogCQkJcF9jdGxiay0+Y29ycmVsYXRvciwKQEAgLTIxMDIsNDEgKzIxMjcsMzkgQEAKIAkJCXBfc3lzdmFsLT5ob3N0X25hbWUpOwogCQlzd2l0Y2ggKHBfY3RsYmstPnJjKSB7CiAJCWNhc2UgMDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAiCi0JCQkJIiUuOHM6IFN5c3RlbSB2YWxpZGF0ZSAiCi0JCQkJImNvbXBsZXRlZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUpOworCQkJZGV2X2luZm8odGRldiwgIiVzOiBDTEFXIGRldmljZSAiCisJCQkJIiUuOHM6IFN5c3RlbSB2YWxpZGF0ZSBjb21wbGV0ZWQuXG4iLAorCQkJCWRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKIAkJCWlmIChwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9PSAwKQogCQkJCWNsYXdfc3RydF9jb25uX3JlcShkZXYpOwogCQkJcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXAgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0xBV19SQ19OQU1FX01JU01BVENIOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJIlJlc3AgOiBIb3N0LCBXUyBuYW1lIGlzICIKLQkJCQkibWlzbWF0Y2hcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsICJWYWxpZGF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIgorCQkJCSIgYSBob3N0IG9yIGFkYXB0ZXIgbmFtZSBtaXNtYXRjaFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0xBV19SQ19XUk9OR19WRVJTSU9OOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJIlJlc3AgOiBXcm9uZyB2ZXJzaW9uXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIlZhbGlkYXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YgYSIKKwkJCQkiIHZlcnNpb24gY29uZmxpY3RcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIENMQVdfUkNfSE9TVF9SQ1ZfVE9PX1NNQUxMOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN5cyBWYWxpZGF0ZSAiCi0JCQkJIlJlc3AgOiBiYWQgZnJhbWUgc2l6ZVxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJWYWxpZGF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIGEiCisJCQkJIiBmcmFtZSBzaXplIGNvbmZsaWN0XG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJlcnJvciBjb2RlPSVkIFxuIiwKLQkJCQkgZGV2LT5uYW1lLCBwX2N0bGJrLT5yYyk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyByZWplY3RlZCIKKwkJCQkiIHRoZSBjb25uZWN0aW9uXG4iLAorCQkJCSBkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIENPTk5FQ1RJT05fUkVRVUVTVDoKIAkJcF9jb25uZWN0ID0gKHN0cnVjdCBjb25uY21kICopJihwX2N0bGJrLT5kYXRhKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY3YgQ29ubiBSZXE6IFZlcnM9JWQsbGlua19pZD0lZCwiCisJCWRldl9pbmZvKHRkZXYsICIlczogUmVjdiBDb25uIFJlcTogVmVycz0lZCxsaW5rX2lkPSVkLCIKIAkJCSJDb3JyPSVkLEhPU1QgYXBwbD0lLjhzLFdTIGFwcGw9JS44c1xuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCkBAIC0yMTQ2LDIxICsyMTY5LDIxIEBACiAJCQlwX2Nvbm5lY3QtPldTX25hbWUpOwogCQlpZiAocHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgIT0gMCkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVxIGVycm9yIDogIgotCQkJCSJhbHJlYWR5IGxvZ2ljYWwgbGluayBpcyBhY3RpdmUgXG4iLAorCQkJZGV2X2luZm8odGRldiwgIiVzIHJlamVjdGVkIGEgY29ubmVjdGlvbiByZXF1ZXN0IgorCQkJCSIgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGFjdGl2ZVxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQl9CiAJCWlmIChwX2N0bGJrLT5saW5raWQgIT0gMSkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVxIGVycm9yIDogIgotCQkJCSJyZXEgbG9naWNhbCBsaW5rIGlkIGlzIG5vdCAxXG4iLAorCQkJZGV2X2luZm8odGRldiwgIiVzIHJlamVjdGVkIGEgcmVxdWVzdCB0byBvcGVuIG11bHRpcGxlIgorCQkJCSIgY29ubmVjdGlvbnNcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQlyYyA9IGZpbmRfbGluayhkZXYsIHBfY29ubmVjdC0+aG9zdF9uYW1lLCBwX2Nvbm5lY3QtPldTX25hbWUpOwogCQlpZiAocmMgIT0gMCkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVzcCBlcnJvcjogIgotCQkJCSJyZXEgYXBwbCBuYW1lIGRvZXMgbm90IG1hdGNoXG4iLAorCQkJZGV2X2luZm8odGRldiwgIiVzIHJlamVjdGVkIGEgY29ubmVjdGlvbiByZXF1ZXN0IgorCQkJCSIgYmVjYXVzZSBvZiBhIHR5cGUgbWlzbWF0Y2hcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQljbGF3X3NlbmRfY29udHJvbChkZXYsCkBAIC0yMTcyLDcgKzIxOTUsNyBAQAogCQkJcF9lbnYtPnBhY2tpbmcgPSBQQUNLX1NFTkQ7CiAJCQljbGF3X3NuZF9jb25uX3JlcShkZXYsIDApOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIGRldmljZSAlLjhzOiBDb25uZWN0aW9uICIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBDTEFXIGRldmljZSAlLjhzOiBDb25uZWN0aW9uICIKIAkJCSJjb21wbGV0ZWQgbGlua19pZD0lZC5cbiIsCiAJCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSwKIAkJCXBfY3RsYmstPmxpbmtpZCk7CkBAIC0yMTgyLDcgKzIyMDUsNyBAQAogCQlicmVhazsKIAljYXNlIENPTk5FQ1RJT05fUkVTUE9OU0U6CiAJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXZjIENvbm4gUmVzcDogVmVycz0lZCxsaW5rX2lkPSVkLCIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBSZWN2IENvbm4gUmVzcDogVmVycz0lZCxsaW5rX2lkPSVkLCIKIAkJCSJDb3JyPSVkLFJDPSVkLEhvc3QgYXBwbD0lLjhzLCBXUyBhcHBsPSUuOHNcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLApAQCAtMjE5MywxNiArMjIxNiwxOCBAQAogCQkJcF9jb25uZWN0LT5XU19uYW1lKTsKIAogCQlpZiAocF9jdGxiay0+cmMgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVzcCBlcnJvcjogcmM9JWQgXG4iLAotCQkJCWRldi0+bmFtZSwgcF9jdGxiay0+cmMpOworCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgcmVqZWN0ZWQiCisJCQkJIiBhIGNvbm5lY3Rpb24gcmVxdWVzdFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJcmMgPSBmaW5kX2xpbmsoZGV2LAogCQkJcF9jb25uZWN0LT5ob3N0X25hbWUsIHBfY29ubmVjdC0+V1NfbmFtZSk7CiAJCWlmIChyYyAhPSAwKSB7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBSZXNwIGVycm9yOiAiCi0JCQkJInJlcSBhcHBsIG5hbWUgZG9lcyBub3QgbWF0Y2hcbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyIKKwkJCQkiIHJlamVjdGVkIGEgY29ubmVjdGlvbiAiCisJCQkJInJlcXVlc3QgYmVjYXVzZSBvZiBhIHR5cGUgbWlzbWF0Y2hcbiIsCiAJCQkJIGRldi0+bmFtZSk7CiAJCX0KIAkJLyogc2hvdWxkIGJlIHVudGlsIENPTk5FQ1RJT05fQ09ORklSTSAqLwpAQCAtMjIxMCw3ICsyMjM1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBDT05ORUNUSU9OX0NPTkZJUk06CiAJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2IENvbm4gQ29uZmlybTpWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQlkZXZfaW5mbyh0ZGV2LAorCQkJIiVzOiBSZWN2IENvbm4gQ29uZmlybTpWZXJzPSVkLGxpbmtfaWQ9JWQsIgogCQkJIkNvcnI9JWQsSG9zdCBhcHBsPSUuOHMsV1MgYXBwbD0lLjhzXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKQEAgLTIyMjEsMjEgKzIyNDcsMjEgQEAKIAkJaWYgKHBfY3RsYmstPmxpbmtpZCA9PSAtKHByaXZwdHItPmFjdGl2ZV9saW5rX0lEKSkgewogCQkJcHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgPSBwX2N0bGJrLT5saW5raWQ7CiAJCQlpZiAocF9lbnYtPnBhY2tpbmcgPiBQQUNLSU5HX0FTSykgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25maXJtZWQgTm93IHBhY2tpbmdcbiIsCi0JCQkJCWRldi0+bmFtZSk7CisJCQkJZGV2X2luZm8odGRldiwKKwkJCQkiJXM6IENvbmZpcm1lZCBOb3cgcGFja2luZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCQlwX2Vudi0+cGFja2luZyA9IERPX1BBQ0tFRDsKIAkJCX0KIAkJCXBfY2ggPSAmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAJCQl3YWtlX3VwKCZwX2NoLT53YWl0KTsKIAkJfSBlbHNlIHsKLQkJICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIGNvbmZpcm06ICIKLQkJCQkidW5leHBlY3RlZCBsaW5raWQ9JWQgXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIkFjdGl2YXRpbmcgJXMgZmFpbGVkIGJlY2F1c2Ugb2YiCisJCQkJIiBhbiBpbmNvcnJlY3QgbGluayBJRD0lZFxuIiwKIAkJCQlkZXYtPm5hbWUsIHBfY3RsYmstPmxpbmtpZCk7CiAJCQljbGF3X3NuZF9kaXNjKGRldiwgcF9jdGxiayk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBESVNDT05ORUNUOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogRGlzY29ubmVjdDogIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IERpc2Nvbm5lY3Q6ICIKIAkJCSJWZXJzPSVkLGxpbmtfaWQ9JWQsQ29ycj0lZFxuIiwKIAkJCWRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKIAkJCXBfY3RsYmstPmxpbmtpZCwgcF9jdGxiay0+Y29ycmVsYXRvcik7CkBAIC0yMjQ3LDEyICsyMjczLDEzIEBACiAJCQlwcml2cHRyLT5hY3RpdmVfbGlua19JRCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQ0xBV19FUlJPUjoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENMQVcgRVJST1IgZGV0ZWN0ZWRcbiIsCisJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIGZhaWxlZFxuIiwKIAkJCWRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAgVW5leHBlY3RlZCBjb21tYW5kIGNvZGU9JWQgXG4iLAotCQkJZGV2LT5uYW1lLCAgcF9jdGxiay0+Y29tbWFuZCk7CisJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIHNlbnQiCisJCQkiIGFuIHVua25vd24gY29tbWFuZCBjb2RlXG4iLAorCQkJZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjI5NCwxMiArMjMyMSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZwX3N5c3ZhbC0+aG9zdF9uYW1lLCBsb2NhbF9uYW1lLCA4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcF9zeXN2YWwtPldTX25hbWUsIHJlbW90ZV9uYW1lLCA4KTsKIAkJCWlmIChwcml2cHRyLT5wX2Vudi0+cGFja2luZyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplPURFRl9QQUNLX0JVRlNJWkU7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemU9REVGX1BBQ0tfQlVGU0laRTsKKwkJCQlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplID0gREVGX1BBQ0tfQlVGU0laRTsKKwkJCQlwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSA9IERFRl9QQUNLX0JVRlNJWkU7CiAJCQl9IGVsc2UgewogCQkJCS8qIGhvdyBiaWcgaXMgdGhlIGJpZ2dlc3QgZ3JvdXAgb2YgcGFja2V0cyAqLwotCQkJCXBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemU9cHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZTsKLQkgICAgICAgICAgICAgICAgICAgICAgICBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZT1wcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJCSAgIHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPQorCQkJCXByaXZwdHItPnBfZW52LT5yZWFkX3NpemU7CisJCQkgICBwX3N5c3ZhbC0+d3JpdGVfZnJhbWVfc2l6ZSA9CisJCQkJcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CiAJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJnBfc3lzdmFsLT5yZXNlcnZlZCwgMHgwMCwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0ODUsNyArMjUxNCw2IEBACiAJcF9kZXYgPSAmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXY7CiAJcF9lbnYgPSBwcml2cHRyLT5wX2VudjsKICAgICAgICAgcF90aGlzX2Njdz1wcml2cHRyLT5wX3JlYWRfYWN0aXZlX2ZpcnN0OwotICAgICAgICBpPTA7CiAJd2hpbGUgKHBfdGhpc19jY3chPU5VTEwgJiYgcF90aGlzX2Njdy0+aGVhZGVyLmZsYWchPUNMQVdfUEVORElORykgewogCQlwYWNrX29mZiA9IDA7CiAJCXAgPSAwOwpAQCAtMjUxMSw4ICsyNTM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtdGNfdGhpc19mcm09MTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwX3RoaXNfY2N3LT5oZWFkZXIubGVuZ3RoIT0KIAkJCQlwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIgJXM6IEludmFsaWQgZnJhbWUgZGV0ZWN0ZWQgIgotCQkJCQkibGVuZ3RoIGlzICUwMnhcbiIgLAorCQkJCWRldl93YXJuKHBfZGV2LAorCQkJCQkiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyIKKwkJCQkJIiBzZW50IGEgZmF1bHR5IgorCQkJCQkiIGZyYW1lIG9mIGxlbmd0aCAlMDJ4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF90aGlzX2Njdy0+aGVhZGVyLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjU0NCw3ICsyNTc0LDcgQEAKIAkJCQlnb3RvIE5leHRGcmFtZTsKIAkJCXBfcGFja2QgPSBwX3RoaXNfY2N3LT5wX2J1ZmZlcitwYWNrX29mZjsKIAkJCXBfcGFja2ggPSAoc3RydWN0IGNsYXdwaCAqKSBwX3BhY2tkOwotCQkJaWYgKChwX3BhY2toLT5sZW4gPT0gMCkgfHwgLyogYWxsIGRvbmUgd2l0aCB0aGlzIGZyYW1lPyAqLworCQkJaWYgKChwX3BhY2toLT5sZW4gPT0gMCkgfHwgLyogZG9uZSB3aXRoIHRoaXMgZnJhbWU/ICovCiAJCQkgICAgKHBfcGFja2gtPmZsYWcgIT0gMCkpCiAJCQkJZ290byBOZXh0RnJhbWU7CiAJCQlieXRlc190b19tb3YgPSBwX3BhY2toLT5sZW47CkBAIC0yNTk0LDkgKzI2MjQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl9yeChza2IpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJCQkJZGV2X2luZm8ocF9kZXYsICJBbGxvY2F0aW5nIGEgYnVmZmVyIGZvciIKKwkJCQkJIiBpbmNvbWluZyBkYXRhIGZhaWxlZFxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzKCkgbG93IG9uIG1lbW9yeVxuIiwKLQkJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+bXRjX29mZnNldD0wOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+bXRjX2xvZ2ljYWxfbGluaz0tMTsKQEAgLTI3MjAsOCArMjc1MCw4IEBACiAgICAgICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopJnBfY2gtPklPX2FjdGl2ZSkgPT0gMCkgewogICAgICAgICAgICAgICAgIHBhcm0gPSAodW5zaWduZWQgbG9uZykgcF9jaDsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgIlN0V3J0SU8iKTsKLSAgICAgICAgICAgICAgICByYyA9IGNjd19kZXZpY2Vfc3RhcnQgKHBfY2gtPmNkZXYsJnBfZmlyc3RfY2N3LT53cml0ZSwgcGFybSwKLQkJCQkgICAgICAgMHhmZiwgMCk7CisJCXJjID0gY2N3X2RldmljZV9zdGFydChwX2NoLT5jZGV2LCAmcF9maXJzdF9jY3ctPndyaXRlLCBwYXJtLAorCQkJCSAgICAgIDB4ZmYsIDApOwogICAgICAgICAgICAgICAgIGlmIChyYyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjY3dfY2hlY2tfcmV0dXJuX2NvZGUocF9jaC0+Y2RldiwgcmMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4MTYsMjIgKzI4NDYsMjYgQEAKICAqIEluaXRpYWxpemUgZXZlcnl0aGluZyBvZiB0aGUgbmV0IGRldmljZSBleGNlcHQgdGhlIG5hbWUgYW5kIHRoZQogICogY2hhbm5lbCBzdHJ1Y3RzLgogICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNsYXdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY2xhd19vcGVuLAorCS5uZG9fc3RvcAkJPSBjbGF3X3JlbGVhc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gY2xhd19zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gY2xhd190eCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gY2xhd19jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQKIGNsYXdfaW5pdF9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCiB7CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRfZGV2Iik7CiAJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIGRldi0+bmFtZSk7CiAJZGV2LT5tdHUgPSBDTEFXX0RFRkFVTFRfTVRVX1NJWkU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjbGF3X3R4OwotCWRldi0+b3BlbiA9IGNsYXdfb3BlbjsKLQlkZXYtPnN0b3AgPSBjbGF3X3JlbGVhc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBjbGF3X3N0YXRzOwotCWRldi0+Y2hhbmdlX210dSA9IGNsYXdfY2hhbmdlX210dTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CiAJZGV2LT5hZGRyX2xlbiA9IDA7CiAJZGV2LT50eXBlID0gQVJQSFJEX1NMSVA7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMzAwOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5uZXRkZXZfb3BzID0gJmNsYXdfbmV0ZGV2X29wczsKIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdG9rIik7CiAJcmV0dXJuOwogfQpAQCAtMjg4MCw4ICsyOTE0LDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIAotCXByaW50ayhLRVJOX0lORk8gImNsYXc6IGFkZCBmb3IgJXNcbiIsCi0JICAgICAgIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltSRUFEXS0+ZGV2KSk7CisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICJhZGQgZm9yICVzXG4iLAorCQkgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1JFQURdLT5kZXYpKTsKIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAibmV3X2RldiIpOwogCXByaXZwdHIgPSBjZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCWNnZGV2LT5jZGV2W1JFQURdLT5kZXYuZHJpdmVyX2RhdGEgPSBwcml2cHRyOwpAQCAtMjg5NywyOSArMjkzMSwyOCBAQAogCWlmIChyZXQgPT0gMCkKIAkJcmV0ID0gYWRkX2NoYW5uZWwoY2dkZXYtPmNkZXZbMV0sMSxwcml2cHRyKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImFkZCBjaGFubmVsIGZhaWxlZCB3aXRoIHJldCA9ICVkXG4iLCByZXQpOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwgIkNyZWF0aW5nIGEgQ0xBVyBncm91cCBkZXZpY2UiCisJCQkiIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2dkZXYtPmNkZXZbUkVBRF0pOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFJFQUQgZmFpbGVkICIKLQkJICAgICAgICJ3aXRoIHJldCA9ICVkXG4iLCBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbUkVBRF0tPmRldiksCi0JCSAgICAgICByZXQpOworCQlkZXZfd2FybigmY2dkZXYtPmRldiwKKwkJCSJTZXR0aW5nIHRoZSByZWFkIHN1YmNoYW5uZWwgb25saW5lIgorCQkJIiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNnZGV2LT5jZGV2W1dSSVRFXSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJjbGF3OiBjY3dfZGV2aWNlX3NldF9vbmxpbmUgJXMgV1JJVEUgZmFpbGVkICIKLQkJICAgICAgICJ3aXRoIHJldCA9ICVkXG4iLCBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbV1JJVEVdLT5kZXYpLAotCQkgICAgICAgcmV0KTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsCisJCQkiU2V0dGluZyB0aGUgd3JpdGUgc3ViY2hhbm5lbCBvbmxpbmUgIgorCQkJImZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlkZXYgPSBhbGxvY19uZXRkZXYoMCwiY2xhdyVkIixjbGF3X2luaXRfbmV0ZGV2aWNlKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczphbGxvY19uZXRkZXYgZmFpbGVkXG4iLF9fZnVuY19fKTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsCisJCQkiQWN0aXZhdGluZyB0aGUgQ0xBVyBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCWRldi0+bWxfcHJpdiA9IHByaXZwdHI7CkBAIC0yOTQ3LDEzICsyOTgwLDEzIEBACiAJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0ubmRldiA9IGRldjsKIAlwcml2cHRyLT5wX2Vudi0+bmRldiA9IGRldjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOnJlYWRzaXplPSVkICB3cml0ZXNpemU9JWQgIgorCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiJXM6cmVhZHNpemU9JWQgIHdyaXRlc2l6ZT0lZCAiCiAJCSJyZWFkYnVmZmVyPSVkIHdyaXRlYnVmZmVyPSVkIHJlYWQ9MHglMDR4IHdyaXRlPTB4JTA0eFxuIiwKICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfZW52LT5yZWFkX3NpemUsCiAJCXBfZW52LT53cml0ZV9zaXplLCBwX2Vudi0+cmVhZF9idWZmZXJzLAogICAgICAgICAgICAgICAgIHBfZW52LT53cml0ZV9idWZmZXJzLCBwX2Vudi0+ZGV2bm9bUkVBRF0sCiAJCXBfZW52LT5kZXZub1tXUklURV0pOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczpob3N0X25hbWU6JS44cywgYWRhcHRlcl9uYW1lICIKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiVzOmhvc3RfbmFtZTolLjhzLCBhZGFwdGVyX25hbWUgIgogCQkiOiUuOHMgYXBpX3R5cGU6ICUuOHNcbiIsCiAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX2Vudi0+aG9zdF9uYW1lLAogCQlwX2Vudi0+YWRhcHRlcl9uYW1lICwgcF9lbnYtPmFwaV90eXBlKTsKQEAgLTI5OTcsOCArMzAzMCw4IEBACiAJbmRldiA9IHByaXYtPmNoYW5uZWxbUkVBRF0ubmRldjsKIAlpZiAobmRldikgewogCQkvKiBDbG9zZSB0aGUgZGV2aWNlICovCi0JCXByaW50ayhLRVJOX0lORk8KLQkJCSIlczogc2h1dGluZyBkb3duIFxuIixuZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIlczogc2h1dHRpbmcgZG93biBcbiIsCisJCQluZGV2LT5uYW1lKTsKIAkJaWYgKG5kZXYtPmZsYWdzICYgSUZGX1JVTk5JTkcpCiAJCQlyZXQgPSBjbGF3X3JlbGVhc2UobmRldik7CiAJCW5kZXYtPmZsYWdzICY9fklGRl9SVU5OSU5HOwpAQCAtMzAyMyw4ICszMDU2LDcgQEAKIAlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgZGV2X25hbWUoJmNnZGV2LT5kZXYpKTsKIAlwcml2ID0gY2dkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlCVUdfT04oIXByaXYpOwotCXByaW50ayhLRVJOX0lORk8gImNsYXc6ICVzKCkgY2FsbGVkICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIsCi0JCQlfX2Z1bmNfXywgZGV2X25hbWUoJmNnZGV2LT5jZGV2WzBdLT5kZXYpKTsKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiB3aWxsIGJlIHJlbW92ZWQuXG4iKTsKIAlpZiAoY2dkZXYtPnN0YXRlID09IENDV0dST1VQX09OTElORSkKIAkJY2xhd19zaHV0ZG93bl9kZXZpY2UoY2dkZXYpOwogCWNsYXdfcmVtb3ZlX2ZpbGVzKCZjZ2Rldi0+ZGV2KTsKQEAgLTMwNjMsNyArMzA5NSw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzEwMCw3ICszMTMzLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd19hZG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMxMzgsNyArMzE3Miw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfYXBuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMxODUsNyArMzIyMCw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X3didWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMjI2LDcgKzMyNjIsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICpwX2VudjsKQEAgLTMyODksNyArMzMyNiw3IEBACiB7CiAJdW5yZWdpc3Rlcl9jdTMwODhfZGlzY2lwbGluZSgmY2xhd19ncm91cF9kcml2ZXIpOwogCWNsYXdfdW5yZWdpc3Rlcl9kZWJ1Z19mYWNpbGl0eSgpOwotCXByaW50ayhLRVJOX0lORk8gImNsYXc6IERyaXZlciB1bmxvYWRlZFxuIik7CisJcHJfaW5mbygiRHJpdmVyIHVubG9hZGVkXG4iKTsKIAogfQogCkBAIC0zMzAzLDEyICszMzQwLDEyIEBACiBjbGF3X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiBzdGFydGluZyBkcml2ZXJcbiIpOwogCisJcHJfaW5mbygiTG9hZGluZyAlc1xuIiwgdmVyc2lvbik7CiAJcmV0ID0gY2xhd19yZWdpc3Rlcl9kZWJ1Z19mYWNpbGl0eSgpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogJXMoKSBkZWJ1Z19yZWdpc3RlciBmYWlsZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXyxyZXQpOworCQlwcl9lcnIoIlJlZ2lzdGVyaW5nIHdpdGggdGhlIFMvMzkwIGRlYnVnIGZlYXR1cmUiCisJCQkiIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0X21vZCIpOwpAQCAtMzMxNiw4ICszMzUzLDggQEAKIAlpZiAocmV0KSB7CiAJCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0X2JhZCIpOwogCQljbGF3X3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzsgJXMoKSBjdTMwODggcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAotCQkJX19mdW5jX18scmV0KTsKKwkJcHJfZXJyKCJSZWdpc3RlcmluZyB3aXRoIHRoZSBjdTMwODggZGV2aWNlIGRyaXZlciBmYWlsZWQgIgorCQkJICAgIndpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCmluZGV4IGYyOWM3MDguLjRkZWQ5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwpAQCAtNDEwLDkgKzQxMCw4IEBACiAJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQkJCWdvdG8gYWdhaW47CiAJfQotCWJsb2NrX2xlbiAtPSAyOwotCWlmIChibG9ja19sZW4gPiAwKSB7Ci0JCSooKF9fdTE2ICopc2tiLT5kYXRhKSA9IGJsb2NrX2xlbjsKKwlpZiAoYmxvY2tfbGVuID4gMikgeworCQkqKChfX3UxNiAqKXNrYi0+ZGF0YSkgPSBibG9ja19sZW4gLSAyOwogCQljdGNtX3VucGFja19za2IoY2gsIHNrYik7CiAJfQogIGFnYWluOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKaW5kZXggMjY3ODU3My4uNzdmNDAzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCkBAIC0xMDUsNyArMTA1LDggQEAKIAkJCXJldHVybjsKIAkJfQogCQlwc2tiLT5wcm90b2NvbCA9IG50b2hzKGhlYWRlci0+dHlwZSk7Ci0JCWlmIChoZWFkZXItPmxlbmd0aCA8PSBMTF9IRUFERVJfTEVOR1RIKSB7CisJCWlmICgoaGVhZGVyLT5sZW5ndGggPD0gTExfSEVBREVSX0xFTkdUSCkgfHwKKwkJICAgIChsZW4gPD0gTExfSEVBREVSX0xFTkdUSCkpIHsKIAkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX0lMTEVHQUxTSVpFKSkgewogCQkJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLAogCQkJCQkiJXMoJXMpOiBJbGxlZ2FsIHBhY2tldCBzaXplICVkKCVkLCVkKSIKQEAgLTE2NywxMSArMTY4LDkgQEAKIAkJaWYgKGxlbiA+IDApIHsKIAkJCXNrYl9wdWxsKHBza2IsIGhlYWRlci0+bGVuZ3RoKTsKIAkJCWlmIChza2JfdGFpbHJvb20ocHNrYikgPCBMTF9IRUFERVJfTEVOR1RIKSB7Ci0JCQkJaWYgKCEoY2gtPmxvZ2ZsYWdzICYgTE9HX0ZMQUdfT1ZFUlJVTikpIHsKLQkJCQkJQ1RDTV9EQkZfREVWX05BTUUoVFJBQ0UsIGRldiwKLQkJCQkJCSJPdmVycnVuIGluIGN0Y21fdW5wYWNrX3NrYiIpOwotCQkJCQljaC0+bG9nZmxhZ3MgfD0gTE9HX0ZMQUdfT1ZFUlJVTjsKLQkJCQl9CisJCQkJQ1RDTV9EQkZfREVWX05BTUUoVFJBQ0UsIGRldiwKKwkJCQkJIk92ZXJydW4gaW4gY3RjbV91bnBhY2tfc2tiIik7CisJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJc2tiX3B1dChwc2tiLCBMTF9IRUFERVJfTEVOR1RIKTsKQEAgLTkwNiwxMSArOTA1LDExIEBACiAJfQogCiAJaWYgKGN0Y21fdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJaWYgKGN0Y21fdHJhbnNtaXRfc2tiKHByaXYtPmNoYW5uZWxbV1JJVEVdLCBza2IpICE9IDApCi0JCXJldHVybiAxOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTksMTIgKzEwOTgsMjQgQEAKIAogc3RydWN0IG1wY19ncm91cCAqY3RjbXBjX2luaXRfbXBjX2dyb3VwKHN0cnVjdCBjdGNtX3ByaXYgKnByaXYpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN0Y21fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY3RjbV9vcGVuLAorCS5uZG9fc3RvcAkJPSBjdGNtX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGN0Y21fc3RhdHMsCisJLm5kb19jaGFuZ2VfbXR1CSAgIAk9IGN0Y21fY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gY3RjbV90eCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY3RjbV9tcGNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY3RjbV9vcGVuLAorCS5uZG9fc3RvcAkJPSBjdGNtX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGN0Y21fc3RhdHMsCisJLm5kb19jaGFuZ2VfbXR1CSAgIAk9IGN0Y21fY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gY3RjbXBjX3R4LAorfTsKKwogdm9pZCBzdGF0aWMgY3RjbV9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPm9wZW4gPSBjdGNtX29wZW47Ci0JZGV2LT5zdG9wID0gY3RjbV9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IGN0Y21fc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gY3RjbV9jaGFuZ2VfbXR1OwogCWRldi0+dHlwZSA9IEFSUEhSRF9TTElQOwogCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CkBAIC0xMTU3LDEyICsxMTY4LDEyIEBACiAJCWRldi0+bXR1ID0gTVBDX0JVRlNJWkVfREVGQVVMVCAtCiAJCQkJVEhfSEVBREVSX0xFTkdUSCAtIFBEVV9IRUFERVJfTEVOR1RIOwogCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY3RjbXBjX3R4OworCQlkZXYtPm5ldGRldl9vcHMgPSAmY3RjbV9tcGNfbmV0ZGV2X29wczsKIAkJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBUSF9IRUFERVJfTEVOR1RIICsgUERVX0hFQURFUl9MRU5HVEg7CiAJCXByaXYtPmJ1ZmZlcl9zaXplID0gTVBDX0JVRlNJWkVfREVGQVVMVDsKIAl9IGVsc2UgewogCQlkZXYtPm10dSA9IENUQ01fQlVGU0laRV9ERUZBVUxUIC0gTExfSEVBREVSX0xFTkdUSCAtIDI7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY3RjbV90eDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmN0Y21fbmV0ZGV2X29wczsKIAkJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBMTF9IRUFERVJfTEVOR1RIICsgMjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwppbmRleCAzZGI1Zjg0Li43ODFlMThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCkBAIC0zOTMsNyArMzkzLDYgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIHRoZXJlIGFyZSBwcm9ibGVtcy4uLmJhaWwgb3V0CSAgICAqLwogCQkJLyogdGhlcmUgbWF5IGJlIGEgc3RhdGUgbWlzbWF0Y2ggc28gcmVzdGFydCAqLwotCQkJZ3JwLT5wb3J0X3BlcnNpc3QgPSAxOwogCQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CiAJCQlncnAtPmFsbG9jY2hhbl9jYWxsYmFja19yZXRyaWVzID0gMDsKIAkJfQpAQCAtNjk5LDExICs2OTgsOSBAQAogCXJldHVybjsKIAogZG9uZToKLQlpZiAocmMgIT0gMCkgewotCQlncnAtPmluX3N3ZWVwID0gMDsKLQkJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7Ci0JCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwotCX0KKwlncnAtPmluX3N3ZWVwID0gMDsKKwljdGNtX2NsZWFyX2J1c3lfZG8oZGV2KTsKKwlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKIAogCXJldHVybjsKIH0KQEAgLTExMTgsNyArMTExNSw2IEBACiAKIAkJaWYgKHVubGlrZWx5KGZzbV9nZXRzdGF0ZShncnAtPmZzbSkgIT0gTVBDR19TVEFURV9SRUFEWSkpCiAJCQkJCWdvdG8gZG9uZTsKLQkJcGR1X2xhc3Rfc2VlbiA9IDA7CiAJCXdoaWxlICgocHNrYi0+bGVuID4gMCkgJiYgIXBkdV9sYXN0X3NlZW4pIHsKIAkJCWN1cnJfcGR1ID0gKHN0cnVjdCBwZHUgKilwc2tiLT5kYXRhOwogCkBAIC0xMzk2LDggKzEzOTIsNyBAQAogCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAlpZiAoKGdycC0+c2F2ZWRfc3RhdGUgIT0gTVBDR19TVEFURV9SRVNFVCkgfHwKIAkJLyogZGVhbGxvY19jaGFubmVsIGhhcyBiZWVuIGNhbGxlZCAqLwotCQkJKChncnAtPnNhdmVkX3N0YXRlID09IE1QQ0dfU1RBVEVfUkVTRVQpICYmCi0JCQkJCQkoZ3JwLT5wb3J0X3BlcnNpc3QgPT0gMCkpKQorCQkoZ3JwLT5wb3J0X3BlcnNpc3QgPT0gMCkpCiAJCWZzbV9kZWx0aW1lcigmcHJpdi0+cmVzdGFydF90aW1lcik7CiAKIAl3Y2ggPSBwcml2LT5jaGFubmVsW1dSSVRFXTsKQEAgLTE5MTcsMTAgKzE5MTIsOCBAQAogCiAJaWYgKHByaXYpCiAJCWdycCA9IHByaXYtPm1wY2c7Ci0JaWYgKGdycCA9PSBOVUxMKSB7Ci0JCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCWlmIChncnAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCX0KIAogCWZvciAoZGlyZWN0aW9uID0gUkVBRDsgZGlyZWN0aW9uIDw9IFdSSVRFOyBkaXJlY3Rpb24rKykJewogCQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBwcml2LT5jaGFubmVsW2RpcmVjdGlvbl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwppbmRleCA0OWMzYmZhLi5hNDViYzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lnbXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAKQEAgLTEyNTksNyArMTI2MCw2IEBACiAJc3RydWN0IGluX2RldmljZSAqaW40X2RldjsKIAogCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIGRhdGE7Ci0JZGFlbW9uaXplKCJyZWdpcG0iKTsKIAogCWlmICghbGNzX2RvX3J1bl90aHJlYWQoY2FyZCwgTENTX1NFVF9NQ19USFJFQUQpKQogCQlyZXR1cm4gMDsKQEAgLTE1NjIsNyArMTU2Miw3IEBACiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGNhcmQtPnN0YXRlICE9IERFVl9TVEFURV9VUCkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCQljYXJkLT50eF9idWZmZXIgPSBsY3NfZ2V0X2J1ZmZlcigmY2FyZC0+d3JpdGUpOwogCQlpZiAoY2FyZC0+dHhfYnVmZmVyID09IE5VTEwpIHsKIAkJCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJCXJjID0gLUVCVVNZOworCQkJcmMgPSBORVRERVZfVFhfQlVTWTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWNhcmQtPnR4X2J1ZmZlci0+Y2FsbGJhY2sgPSBsY3NfdHhidWZmZXJfY2I7CkBAIC0xNzUzLDExICsxNzUzLDEwIEBACiAJc3RydWN0IGxjc19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsY3NfY2FyZCwga2VybmVsX3RocmVhZF9zdGFydGVyKTsKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJrcm50aHJkIik7CiAJaWYgKGxjc19kb19zdGFydF90aHJlYWQoY2FyZCwgTENTX1JFQ09WRVJZX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQobGNzX3JlY292ZXJ5LCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKKwkJa3RocmVhZF9ydW4obGNzX3JlY292ZXJ5LCBjYXJkLCAibGNzX3JlY292ZXIiKTsKICNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUCiAJaWYgKGxjc19kb19zdGFydF90aHJlYWQoY2FyZCwgTENTX1NFVF9NQ19USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19yZWdpc3Rlcl9tY19hZGRyZXNzZXMsCi0JCQkJKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CisJCWt0aHJlYWRfcnVuKGxjc19yZWdpc3Rlcl9tY19hZGRyZXNzZXMsIGNhcmQsICJyZWdpcG0iKTsKICNlbmRpZgogfQogCkBAIC0yMTAxLDYgKzIxMDAsMjAgQEAKIC8qKgogICogbGNzX25ld19kZXZpY2Ugd2lsbCBiZSBjYWxsZWQgYnkgc2V0dGluZyB0aGUgZ3JvdXAgZGV2aWNlIG9ubGluZS4KICAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsY3NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGNzX29wZW5fZGV2aWNlLAorCS5uZG9fc3RvcAkJPSBsY3Nfc3RvcF9kZXZpY2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbGNzX2dldHN0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsY3Nfc3RhcnRfeG1pdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGNzX21jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxjc19vcGVuX2RldmljZSwKKwkubmRvX3N0b3AJCT0gbGNzX3N0b3BfZGV2aWNlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGxjc19nZXRzdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGNzX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBsY3Nfc2V0X211bHRpY2FzdF9saXN0LAorfTsKIAogc3RhdGljIGludAogbGNzX25ld19kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2N3Z2RldikKQEAgLTIxNjgsMTQgKzIxODEsMTEgQEAKIAkJZ290byBvdXQ7CiAJY2FyZC0+ZGV2ID0gZGV2OwogCWNhcmQtPmRldi0+bWxfcHJpdiA9IGNhcmQ7Ci0JY2FyZC0+ZGV2LT5vcGVuID0gbGNzX29wZW5fZGV2aWNlOwotCWNhcmQtPmRldi0+c3RvcCA9IGxjc19zdG9wX2RldmljZTsKLQljYXJkLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxjc19zdGFydF94bWl0OwotCWNhcmQtPmRldi0+Z2V0X3N0YXRzID0gbGNzX2dldHN0YXRzOworCWNhcmQtPmRldi0+bmV0ZGV2X29wcyA9ICZsY3NfbmV0ZGV2X29wczsKIAltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwgY2FyZC0+bWFjLCBMQ1NfTUFDX0xFTkdUSCk7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCWlmICghbGNzX2NoZWNrX211bHRpY2FzdF9zdXBwb3J0KGNhcmQpKQotCQljYXJkLT5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxjc19zZXRfbXVsdGljYXN0X2xpc3Q7CisJCWNhcmQtPmRldi0+bmV0ZGV2X29wcyA9ICZsY3NfbWNfbmV0ZGV2X29wczsKICNlbmRpZgogbmV0ZGV2X291dDoKIAlsY3Nfc2V0X2FsbG93ZWRfdGhyZWFkcyhjYXJkLDB4ZmZmZmZmZmYpOwpAQCAtMjI1OCw3ICsyMjY4LDYgQEAKICAgICAgICAgaW50IHJjOwogCiAJY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgcHRyOwotCWRhZW1vbml6ZSgibGNzX3JlY292ZXIiKTsKIAogCUxDU19EQkZfVEVYVCg0LCB0cmFjZSwgInJlY292ZXIxIik7CiAJaWYgKCFsY3NfZG9fcnVuX3RocmVhZChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKaW5kZXggOTMwZTJmYy4uYmU3MTZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKQEAgLTEzMTIsNyArMTMxMiw3IEBACiAKIAlpZiAobmV0aXVjdl90ZXN0X2FuZF9zZXRfYnVzeShkZXYpKSB7CiAJCUlVQ1ZfREJGX1RFWFQoZGF0YSwgMiwgIkVCVVNZIGZyb20gbmV0aXVjdl90eFxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJcmMgPSBuZXRpdWN2X3RyYW5zbWl0X3NrYihwcml2cHRyLT5jb25uLCBza2IpICE9IDA7CkBAIC0xODc2LDIwICsxODc2LDI0IEBACiAvKioKICAqIEluaXRpYWxpemUgYSBuZXQgZGV2aWNlLiAoQ2FsbGVkIGZyb20ga2VybmVsIGluIGFsbG9jX25ldGRldigpKQogICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGl1Y3ZfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbmV0aXVjdl9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXRpdWN2X2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IG5ldGl1Y3Zfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IG5ldGl1Y3ZfdHgsCisJLm5kb19jaGFuZ2VfbXR1CSAgIAk9IG5ldGl1Y3ZfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyB2b2lkIG5ldGl1Y3Zfc2V0dXBfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5tdHUJICAgICAgICAgPSBORVRJVUNWX01UVV9ERUZBVUxUOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgICA9IG5ldGl1Y3ZfdHg7Ci0JZGV2LT5vcGVuCSAgICAgICAgID0gbmV0aXVjdl9vcGVuOwotCWRldi0+c3RvcAkgICAgICAgICA9IG5ldGl1Y3ZfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICAgICAgPSBuZXRpdWN2X3N0YXRzOwotCWRldi0+Y2hhbmdlX210dSAgICAgICAgICA9IG5ldGl1Y3ZfY2hhbmdlX210dTsKIAlkZXYtPmRlc3RydWN0b3IgICAgICAgICAgPSBuZXRpdWN2X2ZyZWVfbmV0ZGV2aWNlOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuICAgICA9IE5FVElVQ1ZfSERSTEVOOwogCWRldi0+YWRkcl9sZW4gICAgICAgICAgICA9IDA7CiAJZGV2LT50eXBlICAgICAgICAgICAgICAgID0gQVJQSFJEX1NMSVA7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICAgICAgID0gTkVUSVVDVl9RVUVVRUxFTl9ERUZBVUxUOwogCWRldi0+ZmxhZ3MJICAgICAgICAgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5uZXRkZXZfb3BzCQkgPSAmbmV0aXVjdl9uZXRkZXZfb3BzOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCmluZGV4IGUwYzQ1NTcuLjQ0N2UxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaApAQCAtMTM0LDYgKzEzNCw3IEBACiAJdW5zaWduZWQgaW50IHNnX3NrYnNfcng7CiAJdW5zaWduZWQgaW50IHNnX2ZyYWdzX3J4OwogCXVuc2lnbmVkIGludCBzZ19hbGxvY19wYWdlX3J4OworCXVuc2lnbmVkIGludCB0eF9jc3VtOwogfTsKIAogLyogUm91dGluZyBzdHVmZiAqLwpAQCAtNDAzLDcgKzQwNCw2IEBACiAvKiBwb3NzaWJsZSB0eXBlcyBvZiBxZXRoIGxhcmdlX3NlbmQgc3VwcG9ydCAqLwogZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgewogCVFFVEhfTEFSR0VfU0VORF9OTywKLQlRRVRIX0xBUkdFX1NFTkRfRUREUCwKIAlRRVRIX0xBUkdFX1NFTkRfVFNPLAogfTsKIApAQCAtODM4LDExICs4MzgsOSBAQAogaW50IHFldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LCBpbnQpOwogaW50IHFldGhfZ2V0X2VsZW1lbnRzX25vKHN0cnVjdCBxZXRoX2NhcmQgKiwgdm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogaW50IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJCXN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQsCi0JCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKiwgaW50LCBpbnQpOworCQkJc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosIGludCwgaW50LCBpbnQpOwogaW50IHFldGhfZG9fc2VuZF9wYWNrZXQoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwKLQkJICAgIGludCwgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICopOworCQkgICAgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosIGludCk7CiBpbnQgcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHZvaWQgcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICosCiAJCQkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKiwgdTY0ICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCmluZGV4IGQxYjViZWIuLmM4MjdkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTI2LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgInFldGhfY29yZS5oIgotI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCiAKIHN0cnVjdCBxZXRoX2RiZl9pbmZvIHFldGhfZGJmW1FFVEhfREJGX0lORk9TXSA9IHsKIAkvKiBkZWZpbmUgZGJmIC0gTmFtZSwgUGFnZXMsIEFyZWFzLCBNYXhsZW4sIExldmVsLCBWaWV3LCBIYW5kbGUgKi8KQEAgLTI4NSwxNyArMjgzLDYgQEAKIAkJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOwogCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IHR5cGU7CiAJc3dpdGNoIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpIHsKLQljYXNlIFFFVEhfTEFSR0VfU0VORF9FRERQOgotCQlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewotCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAotCQkJCQlORVRJRl9GX0hXX0NTVU07Ci0JCX0gZWxzZSB7Ci0JCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJCU5FVElGX0ZfSFdfQ1NVTSk7Ci0JCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JCQlyYyA9IC1FT1BOT1RTVVBQOwotCQl9Ci0JCWJyZWFrOwogCWNhc2UgUUVUSF9MQVJHRV9TRU5EX1RTTzoKIAkJaWYgKHFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9PVVRCT1VORF9UU08pKSB7CiAJCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8CkBAIC05NTYsNyArOTQzLDYgQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJc2tiID0gc2tiX2RlcXVldWUoJmJ1Zi0+c2tiX2xpc3QpOwogCX0KLQlxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoYnVmKTsKIAlmb3IgKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKTsgKytpKSB7CiAJCWlmIChidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5hZGRyICYmIGJ1Zi0+aXNfaGVhZGVyW2ldKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsCkBAIC0xNjkwLDcgKzE2NzYsNyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCwgZXZlbnRfdGltZW91dDsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAic2VuZGN0bCIpOwpAQCAtMTcxNSw5ICsxNzAxLDEwIEBACiAJcWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YShjYXJkLCBsZW4sIGlvYik7CiAKIAlpZiAoSVNfSVBBKGlvYi0+ZGF0YSkpCi0JCXRpbWVvdXQgPSBqaWZmaWVzICsgUUVUSF9JUEFfVElNRU9VVDsKKwkJZXZlbnRfdGltZW91dCA9IFFFVEhfSVBBX1RJTUVPVVQ7CiAJZWxzZQotCQl0aW1lb3V0ID0gamlmZmllcyArIFFFVEhfVElNRU9VVDsKKwkJZXZlbnRfdGltZW91dCA9IFFFVEhfVElNRU9VVDsKKwl0aW1lb3V0ID0gamlmZmllcyArIGV2ZW50X3RpbWVvdXQ7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAibm9pcnFwbmQiKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2FyZC0+d3JpdGUuY2N3ZGV2KSwgZmxhZ3MpOwpAQCAtMTc0NSw3ICsxNzMyLDcgQEAKIAlpZiAoKGNtZC0+aGRyLmNvbW1hbmQgPT0gSVBBX0NNRF9TRVRJUCkgJiYKIAkgICAgKGNtZC0+aGRyLnByb3RfdmVyc2lvbiA9PSBRRVRIX1BST1RfSVBWNCkpIHsKIAkJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQocmVwbHktPndhaXRfcSwKLQkJICAgIGF0b21pY19yZWFkKCZyZXBseS0+cmVjZWl2ZWQpLCB0aW1lb3V0KSkKKwkJICAgIGF0b21pY19yZWFkKCZyZXBseS0+cmVjZWl2ZWQpLCBldmVudF90aW1lb3V0KSkKIAkJCWdvdG8gdGltZV9lcnI7CiAJfSBlbHNlIHsKIAkJd2hpbGUgKCFhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSkgewpAQCAtMjY5Myw0MCArMjY4MCwyMSBAQAogCQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHFkaW9fZXJyKQogewogCWludCBzYmFsZjE1ID0gYnVmZmVyLT5idWZmZXItPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZjsKLQlpbnQgY2MgPSBxZGlvX2VyciAmIDM7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiaGRzbmRlcnIiKTsKIAlxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLCBxZGlvX2VyciwgInFvdXRlcnIiKTsKLQlzd2l0Y2ggKGNjKSB7Ci0JY2FzZSAwOgotCQlpZiAocWRpb19lcnIpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJsbmtmYWlsIik7Ci0JCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlMDR4ICUwMngiLAotCQkJCSAgICAgICAodTE2KXFkaW9fZXJyLCAodTgpc2JhbGYxNSk7Ci0JCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0xJTktfRkFJTFVSRTsKLQkJfQorCisJaWYgKCFxZGlvX2VycikKIAkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9OT05FOwotCWNhc2UgMjoKLQkJaWYgKHFkaW9fZXJyICYgUURJT19FUlJPUl9TSUdBX0JVU1kpIHsKLQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJTSUdBY2MyQiIpOwotCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfS0lDS19JVDsKLQkJfQotCQlpZiAoKHNiYWxmMTUgPj0gMTUpICYmIChzYmFsZjE1IDw9IDMxKSkKLQkJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfUkVUUlk7Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwotCQkvKiBsb29rIGF0IHFkaW9fZXJyb3IgYW5kIHNiYWxmIDE1ICovCi0JY2FzZSAxOgotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAiU0lHQWNjMSIpOwotCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0xJTktfRkFJTFVSRTsKLQljYXNlIDM6Ci0JZGVmYXVsdDoKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgIlNJR0FjYzMiKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUOwotCX0KKworCWlmICgoc2JhbGYxNSA+PSAxNSkgJiYgKHNiYWxmMTUgPD0gMzEpKQorCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX1JFVFJZOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgImxua2ZhaWwiKTsKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOworCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0eCAlMDJ4IiwKKwkJICAgICAgICh1MTYpcWRpb19lcnIsICh1OClzYmFsZjE1KTsKKwlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0xJTktfRkFJTFVSRTsKIH0KIAogLyoKQEAgLTI4NjIsMTAgKzI4MzAsMTQgQEAKIAkJCXFldGhfZ2V0X21pY3JvcygpIC0KIAkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fc3RhcnRfdGltZTsKIAlpZiAocmMpIHsKKwkJcXVldWUtPmNhcmQtPnN0YXRzLnR4X2Vycm9ycyArPSBjb3VudDsKKwkJLyogaWdub3JlIHRlbXBvcmFyeSBTSUdBIGVycm9ycyB3aXRob3V0IGJ1c3kgY29uZGl0aW9uICovCisJCWlmIChyYyA9PSBRRElPX0VSUk9SX1NJR0FfVEFSR0VUKQorCQkJcmV0dXJuOwogCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZmx1c2hidWYiKTsKIAkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIgZXJyJWQiLCByYyk7CiAJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiJXMiLCBDQVJEX0RERVZfSUQocXVldWUtPmNhcmQpKTsKLQkJcXVldWUtPmNhcmQtPnN0YXRzLnR4X2Vycm9ycyArPSBjb3VudDsKKwogCQkvKiB0aGlzIG11c3Qgbm90IGhhcHBlbiB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcy4gaWYgaXQKIAkJICogaGFwcGVucyBzb21ldGhpbmcgaXMgcmVhbGx5IHdyb25nIC0+IHJlY292ZXIgKi8KIAkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShxdWV1ZS0+Y2FyZCk7CkBAIC0yOTQwLDEzICsyOTEyLDcgQEAKIAl9CiAJZm9yIChpID0gZmlyc3RfZWxlbWVudDsgaSA8IChmaXJzdF9lbGVtZW50ICsgY291bnQpOyArK2kpIHsKIAkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW2kgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQkJLyp3ZSBvbmx5IGhhbmRsZSB0aGUgS0lDS19JVCBlcnJvciBieSBkb2luZyBhIHJlY292ZXJ5ICovCi0JCWlmIChxZXRoX2hhbmRsZV9zZW5kX2Vycm9yKGNhcmQsIGJ1ZmZlciwgcWRpb19lcnJvcikKLQkJCQk9PSBRRVRIX1NFTkRfRVJST1JfS0lDS19JVCl7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7Ci0JCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwotCQkJcmV0dXJuOwotCQl9CisJCXFldGhfaGFuZGxlX3NlbmRfZXJyb3IoY2FyZCwgYnVmZmVyLCBxZGlvX2Vycm9yKTsKIAkJcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKHF1ZXVlLCBidWZmZXIpOwogCX0KIAlhdG9taWNfc3ViKGNvdW50LCAmcXVldWUtPnVzZWRfYnVmZmVycyk7CkBAIC0zMTg3LDExICszMTUzLDkgQEAKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKIAkJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXN0cnVjdCBxZXRoX2hkciAqaGRyLCBpbnQgZWxlbWVudHNfbmVlZGVkLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwgaW50IG9mZnNldCwgaW50IGhkX2xlbikKKwkJaW50IG9mZnNldCwgaW50IGhkX2xlbikKIHsKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlcjsKLQlpbnQgYnVmZmVyc19uZWVkZWQgPSAwOwotCWludCBmbHVzaF9jbnQgPSAwOwogCWludCBpbmRleDsKIAogCS8qIHNwaW4gdW50aWwgd2UgZ2V0IHRoZSBxdWV1ZSAuLi4gKi8KQEAgLTMyMDYsMjcgKzMxNzAsMTEgQEAKIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmJ1ZmZlci0+c3RhdGUpICE9IFFFVEhfUURJT19CVUZfRU1QVFkpCiAJCWdvdG8gb3V0OwotCWlmIChjdHggPT0gTlVMTCkKLQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPSAocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCisJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPSAocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCiAJCQkJCSAgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQllbHNlIHsKLQkJYnVmZmVyc19uZWVkZWQgPSBxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChxdWV1ZSwKLQkJCQkJCQkJCWN0eCk7Ci0JCWlmIChidWZmZXJzX25lZWRlZCA8IDApCi0JCQlnb3RvIG91dDsKLQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQotCQkJKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgYnVmZmVyc19uZWVkZWQpICUKLQkJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JfQogCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7Ci0JaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCXFldGhfZmlsbF9idWZmZXIocXVldWUsIGJ1ZmZlciwgc2tiLCBoZHIsIG9mZnNldCwgaGRfbGVuKTsKLQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBpbmRleCwgMSk7Ci0JfSBlbHNlIHsKLQkJZmx1c2hfY250ID0gcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHF1ZXVlLCBjdHgsIGluZGV4KTsKLQkJV0FSTl9PTihidWZmZXJzX25lZWRlZCAhPSBmbHVzaF9jbnQpOwotCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIGluZGV4LCBmbHVzaF9jbnQpOwotCX0KKwlxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCBvZmZzZXQsIGhkX2xlbik7CisJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBpbmRleCwgMSk7CiAJcmV0dXJuIDA7CiBvdXQ6CiAJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VEKTsKQEAgLTMyMzYsNyArMzE4NCw3IEBACiAKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKLQkJaW50IGVsZW1lbnRzX25lZWRlZCwgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCisJCWludCBlbGVtZW50c19uZWVkZWQpCiB7CiAJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7CiAJaW50IHN0YXJ0X2luZGV4OwpAQCAtMzI2Miw1MyArMzIxMCwzMiBAQAogCXFldGhfc3dpdGNoX3RvX3BhY2tpbmdfaWZfbmVlZGVkKHF1ZXVlKTsKIAlpZiAocXVldWUtPmRvX3BhY2spIHsKIAkJZG9fcGFjayA9IDE7Ci0JCWlmIChjdHggPT0gTlVMTCkgewotCQkJLyogZG9lcyBwYWNrZXQgZml0IGluIGN1cnJlbnQgYnVmZmVyPyAqLwotCQkJaWYgKChRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkgLQotCQkJICAgIGJ1ZmZlci0+bmV4dF9lbGVtZW50X3RvX2ZpbGwpIDwgZWxlbWVudHNfbmVlZGVkKSB7Ci0JCQkJLyogLi4uIG5vIC0+IHNldCBzdGF0ZSBQUklNRUQgKi8KLQkJCQlhdG9taWNfc2V0KCZidWZmZXItPnN0YXRlLAotCQkJCQlRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQkJZmx1c2hfY291bnQrKzsKLQkJCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9Ci0JCQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKLQkJCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQkJCQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbcXVldWUtPm5leHRfYnVmX3RvX2ZpbGxdOwotCQkJCS8qIHdlIGRpZCBhIHN0ZXAgZm9yd2FyZCwgc28gY2hlY2sgYnVmZmVyIHN0YXRlCi0JCQkJICogYWdhaW4gKi8KLQkJCQlpZiAoYXRvbWljX3JlYWQoJmJ1ZmZlci0+c3RhdGUpICE9Ci0JCQkJCQlRRVRIX1FESU9fQlVGX0VNUFRZKXsKLQkJCQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBzdGFydF9pbmRleCwKKwkJLyogZG9lcyBwYWNrZXQgZml0IGluIGN1cnJlbnQgYnVmZmVyPyAqLworCQlpZiAoKFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAtCisJCSAgICBidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsKSA8IGVsZW1lbnRzX25lZWRlZCkgeworCQkJLyogLi4uIG5vIC0+IHNldCBzdGF0ZSBQUklNRUQgKi8KKwkJCWF0b21pY19zZXQoJmJ1ZmZlci0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKKwkJCWZsdXNoX2NvdW50Kys7CisJCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9CisJCQkJKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQorCQkJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJCQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbcXVldWUtPm5leHRfYnVmX3RvX2ZpbGxdOworCQkJLyogd2UgZGlkIGEgc3RlcCBmb3J3YXJkLCBzbyBjaGVjayBidWZmZXIgc3RhdGUKKwkJCSAqIGFnYWluICovCisJCQlpZiAoYXRvbWljX3JlYWQoJmJ1ZmZlci0+c3RhdGUpICE9CisJCQkgICAgUUVUSF9RRElPX0JVRl9FTVBUWSkgeworCQkJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgc3RhcnRfaW5kZXgsCiAJCQkJCQkJICAgZmx1c2hfY291bnQpOwotCQkJCQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsCisJCQkJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLAogCQkJCQkJUUVUSF9PVVRfUV9VTkxPQ0tFRCk7Ci0JCQkJCXJldHVybiAtRUJVU1k7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJLyogY2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggZWxlbWVudHMgKGluY2x1ZGluZyBmb2xsb3dpbmcKLQkJCSAqIGZyZWUgYnVmZmVycykgdG8gaGFuZGxlIGVkZHAgY29udGV4dCAqLwotCQkJaWYgKHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHF1ZXVlLCBjdHgpCi0JCQkJPCAwKSB7Ci0JCQkJcmMgPSAtRUJVU1k7Ci0JCQkJZ290byBvdXQ7CisJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJfQogCX0KLQlpZiAoY3R4ID09IE5VTEwpCi0JCXRtcCA9IHFldGhfZmlsbF9idWZmZXIocXVldWUsIGJ1ZmZlciwgc2tiLCBoZHIsIC0xLCAwKTsKLQllbHNlIHsKLQkJdG1wID0gcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHF1ZXVlLCBjdHgsCi0JCQkJCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCk7Ci0JCWlmICh0bXAgPCAwKSB7Ci0JCQlyYyA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQorCXRtcCA9IHFldGhfZmlsbF9idWZmZXIocXVldWUsIGJ1ZmZlciwgc2tiLCBoZHIsIC0xLCAwKTsKIAlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIHRtcCkgJQogCQkJCSAgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKIAlmbHVzaF9jb3VudCArPSB0bXA7Ci1vdXQ6CiAJaWYgKGZsdXNoX2NvdW50KQogCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIHN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7CiAJZWxzZSBpZiAoIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpCkBAIC00MzI3LDYgKzQyNTQsNyBAQAogLyogMzAgKi97InR4IGNvdW50In0sCiAJeyJ0eCBkb19RRElPIHRpbWUifSwKIAl7InR4IGRvX1FESU8gY291bnQifSwKKwl7InR4IGNzdW0ifSwKIH07CiAKIGludCBxZXRoX2NvcmVfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00Mzc4LDYgKzQzMDYsNyBAQAogCWRhdGFbMzBdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9jbnQ7CiAJZGF0YVszMV0gPSBjYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fdGltZTsKIAlkYXRhWzMyXSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19jbnQ7CisJZGF0YVszM10gPSBjYXJkLT5wZXJmX3N0YXRzLnR4X2NzdW07CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKaW5kZXggNDA4MDEyNi4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYwpAQCAtMSw2OTkgKzAsMCBAQAotLyoKLSAqICBkcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKLSAqCi0gKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKLSAqICAgIEF1dGhvcihzKTogVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPiwKLSAqCQkgRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdGNwLmg+Ci0jaW5jbHVkZSA8bmV0L3RjcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bmV0L2lwLmg+Ci0jaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgotCi0jaW5jbHVkZSAicWV0aF9jb3JlLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX21wYy5oIgotI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCi0KLWludCBxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JaW50IGluZGV4ID0gcXVldWUtPm5leHRfYnVmX3RvX2ZpbGw7Ci0JaW50IGVsZW1lbnRzX25lZWRlZCA9IGN0eC0+bnVtX2VsZW1lbnRzOwotCWludCBlbGVtZW50c19pbl9idWZmZXI7Ci0JaW50IHNrYnNfaW5fYnVmZmVyOwotCWludCBidWZmZXJzX25lZWRlZCA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNiZmMiKTsKLQl3aGlsZSAoZWxlbWVudHNfbmVlZGVkID4gMCkgewotCQlidWZmZXJzX25lZWRlZCsrOwotCQlpZiAoYXRvbWljX3JlYWQoJnF1ZXVlLT5idWZzW2luZGV4XS5zdGF0ZSkgIT0KLQkJCQlRRVRIX1FESU9fQlVGX0VNUFRZKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQllbGVtZW50c19pbl9idWZmZXIgPSBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpIC0KLQkJCQkgICAgIHF1ZXVlLT5idWZzW2luZGV4XS5uZXh0X2VsZW1lbnRfdG9fZmlsbDsKLQkJc2tic19pbl9idWZmZXIgPSBlbGVtZW50c19pbl9idWZmZXIgLyBjdHgtPmVsZW1lbnRzX3Blcl9za2I7Ci0JCWVsZW1lbnRzX25lZWRlZCAtPSBza2JzX2luX2J1ZmZlciAqIGN0eC0+ZWxlbWVudHNfcGVyX3NrYjsKLQkJaW5kZXggPSAoaW5kZXggKyAxKSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JfQotCXJldHVybiBidWZmZXJzX25lZWRlZDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2ZyZWVfY29udGV4dChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwZmN0eCIpOwotCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9wYWdlczsgKytpKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3R4LT5wYWdlc1tpXSk7Ci0Ja2ZyZWUoY3R4LT5wYWdlcyk7Ci0Ja2ZyZWUoY3R4LT5lbGVtZW50cyk7Ci0Ja2ZyZWUoY3R4KTsKLX0KLQotCi1zdGF0aWMgdm9pZCBxZXRoX2VkZHBfZ2V0X2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JYXRvbWljX2luYygmY3R4LT5yZWZjbnQpOwotfQotCi12b2lkIHFldGhfZWRkcF9wdXRfY29udGV4dChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmN0eC0+cmVmY250KSA9PSAwKQotCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChxZXRoX2VkZHBfcHV0X2NvbnRleHQpOwotCi12b2lkIHFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlICpyZWY7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZWRkcHJjdHgiKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmJ1Zi0+Y3R4X2xpc3QpKSB7Ci0JCXJlZiA9IGxpc3RfZW50cnkoYnVmLT5jdHhfbGlzdC5uZXh0LAotCQkJCSBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlLCBsaXN0KTsKLQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KHJlZi0+Y3R4KTsKLQkJbGlzdF9kZWwoJnJlZi0+bGlzdCk7Ci0JCWtmcmVlKHJlZik7Ci0JfQotfQotCi1zdGF0aWMgaW50IHFldGhfZWRkcF9idWZfcmVmX2NvbnRleHQoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgKnJlZjsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJlZGRwcmZjeCIpOwotCXJlZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UpLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVmID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCXFldGhfZWRkcF9nZXRfY29udGV4dChjdHgpOwotCXJlZi0+Y3R4ID0gY3R4OwotCWxpc3RfYWRkX3RhaWwoJnJlZi0+bGlzdCwgJmJ1Zi0+Y3R4X2xpc3QpOwotCXJldHVybiAwOwotfQotCi1pbnQgcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwgaW50IGluZGV4KQotewotCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmID0gTlVMTDsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlcjsKLQlpbnQgZWxlbWVudHMgPSBjdHgtPm51bV9lbGVtZW50czsKLQlpbnQgZWxlbWVudCA9IDA7Ci0JaW50IGZsdXNoX2NudCA9IDA7Ci0JaW50IG11c3RfcmVmY250ID0gMTsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwZmlidSIpOwotCXdoaWxlIChlbGVtZW50cyA+IDApIHsKLQkJYnVmID0gJnF1ZXVlLT5idWZzW2luZGV4XTsKLQkJaWYgKGF0b21pY19yZWFkKCZidWYtPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKSB7Ci0JCQkvKiBub3JtYWxseSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIHdlIGNoZWNrZWQgZm9yCi0JCQkgKiBhdmFpbGFibGUgZWxlbWVudHMgaW4gcWV0aF9jaGVja19lbGVtZW50c19mb3JfY29udGV4dAotCQkJICovCi0JCQlpZiAoZWxlbWVudCA9PSAwKQotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQllbHNlIHsKLQkJCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJjb3VsZCBvbmx5IHBhcnRpYWxseSBmaWxsIgotCQkJCQkiZWRkcCBidWZmZXIhXG4iKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQkvKiBjaGVjayBpZiB0aGUgd2hvbGUgbmV4dCBza2IgZml0cyBpbnRvIGN1cnJlbnQgYnVmZmVyICovCi0JCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCi0JCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwpCi0JCQkJPCBjdHgtPmVsZW1lbnRzX3Blcl9za2IpewotCQkJLyogbm8gLT4gZ28gdG8gbmV4dCBidWZmZXIgKi8KLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWluZGV4ID0gKGluZGV4ICsgMSkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCQkJZmx1c2hfY250Kys7Ci0JCQkvKiBuZXcgYnVmZmVyLCBzbyB3ZSBoYXZlIHRvIGFkZCBjdHggdG8gYnVmZmVyJ2N0eF9saXN0Ci0JCQkgKiBhbmQgaW5jcmVtZW50IGN0eCdzIHJlZmNudCAqLwotCQkJbXVzdF9yZWZjbnQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKG11c3RfcmVmY250KSB7Ci0JCQltdXN0X3JlZmNudCA9IDA7Ci0JCQlpZiAocWV0aF9lZGRwX2J1Zl9yZWZfY29udGV4dChidWYsIGN0eCkpIHsKLQkJCQlnb3RvIG91dF9jaGVjazsKLQkJCX0KLQkJfQotCQlidWZmZXIgPSBidWYtPmJ1ZmZlcjsKLQkJLyogZmlsbCBvbmUgc2tiIGludG8gYnVmZmVyICovCi0JCWZvciAoaSA9IDA7IGkgPCBjdHgtPmVsZW1lbnRzX3Blcl9za2I7ICsraSkgewotCQkJaWYgKGN0eC0+ZWxlbWVudHNbZWxlbWVudF0ubGVuZ3RoICE9IDApIHsKLQkJCQlidWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbF0uCi0JCQkJYWRkciA9IGN0eC0+ZWxlbWVudHNbZWxlbWVudF0uYWRkcjsKLQkJCQlidWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbF0uCi0JCQkJbGVuZ3RoID0gY3R4LT5lbGVtZW50c1tlbGVtZW50XS5sZW5ndGg7Ci0JCQkJYnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGxdLgotCQkJCWZsYWdzID0gY3R4LT5lbGVtZW50c1tlbGVtZW50XS5mbGFnczsKLQkJCQlidWYtPm5leHRfZWxlbWVudF90b19maWxsKys7Ci0JCQl9Ci0JCQllbGVtZW50Kys7Ci0JCQllbGVtZW50cy0tOwotCQl9Ci0JfQotb3V0X2NoZWNrOgotCWlmICghcXVldWUtPmRvX3BhY2spIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImZpbGxiZm5wIik7Ci0JCS8qIHNldCBzdGF0ZSB0byBQUklNRUQgLT4gd2lsbCBiZSBmbHVzaGVkICovCi0JCWlmIChidWYtPm5leHRfZWxlbWVudF90b19maWxsID4gMCkgewotCQkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJZmx1c2hfY250Kys7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocXVldWUtPmNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCi0JCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5za2JzX3NlbnRfcGFjaysrOwotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZmlsbGJmcGEiKTsKLQkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPj0KLQkJCQlRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpKSB7Ci0JCQkvKgotCQkJICogcGFja2VkIGJ1ZmZlciBpZiBmdWxsIC0+IHNldCBzdGF0ZSBQUklNRUQKLQkJCSAqIC0+IHdpbGwgYmUgZmx1c2hlZAotCQkJICovCi0JCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQlmbHVzaF9jbnQrKzsKLQkJfQotCX0KLW91dDoKLQlyZXR1cm4gZmx1c2hfY250OwotfQotCi1zdGF0aWMgdm9pZCBxZXRoX2VkZHBfY3JlYXRlX3NlZ21lbnRfaGRycyhzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLCBpbnQgZGF0YV9sZW4pCi17Ci0JdTggKnBhZ2U7Ci0JaW50IHBhZ2VfcmVtYWluZGVyOwotCWludCBwYWdlX29mZnNldDsKLQlpbnQgcGt0X2xlbjsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgKmVsZW1lbnQ7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNyc2giKTsKLQlwYWdlID0gY3R4LT5wYWdlc1tjdHgtPm9mZnNldCA+PiBQQUdFX1NISUZUXTsKLQlwYWdlX29mZnNldCA9IGN0eC0+b2Zmc2V0ICUgUEFHRV9TSVpFOwotCWVsZW1lbnQgPSAmY3R4LT5lbGVtZW50c1tjdHgtPm51bV9lbGVtZW50c107Ci0JcGt0X2xlbiA9IGVkZHAtPm5obCArIGVkZHAtPnRobCArIGRhdGFfbGVuOwotCS8qIEZJWE1FOiBsYXllcjIgYW5kIFZMQU4gISEhICovCi0JaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikKLQkJcGt0X2xlbiArPSBFVEhfSExFTjsKLQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCXBrdF9sZW4gKz0gVkxBTl9ITEVOOwotCS8qIGRvZXMgY29tcGxldGUgcGFja2V0IGZpdCBpbiBjdXJyZW50IHBhZ2UgPyAqLwotCXBhZ2VfcmVtYWluZGVyID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7Ci0JaWYgKHBhZ2VfcmVtYWluZGVyIDwgKHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgcGt0X2xlbikpIHsKLQkJLyogbm8gLT4gZ28gdG8gc3RhcnQgb2YgbmV4dCBwYWdlICovCi0JCWN0eC0+b2Zmc2V0ICs9IHBhZ2VfcmVtYWluZGVyOwotCQlwYWdlID0gY3R4LT5wYWdlc1tjdHgtPm9mZnNldCA+PiBQQUdFX1NISUZUXTsKLQkJcGFnZV9vZmZzZXQgPSAwOwotCX0KLQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAmZWRkcC0+cWgsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQllbGVtZW50LT5hZGRyID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCWVsZW1lbnQtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpOwotCWN0eC0+b2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpOwotCXBhZ2Vfb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpOwotCS8qIGFkZCBtYWMgaGVhZGVyICg/KSAqLwotCWlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKLQkJbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgJmVkZHAtPm1hYywgRVRIX0hMRU4pOwotCQllbGVtZW50LT5sZW5ndGggKz0gRVRIX0hMRU47Ci0JCWN0eC0+b2Zmc2V0ICs9IEVUSF9ITEVOOwotCQlwYWdlX29mZnNldCArPSBFVEhfSExFTjsKLQl9Ci0JLyogYWRkIFZMQU4gdGFnICovCi0JaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT52bGFuLCBWTEFOX0hMRU4pOwotCQllbGVtZW50LT5sZW5ndGggKz0gVkxBTl9ITEVOOwotCQljdHgtPm9mZnNldCArPSBWTEFOX0hMRU47Ci0JCXBhZ2Vfb2Zmc2V0ICs9IFZMQU5fSExFTjsKLQl9Ci0JLyogYWRkIG5ldHdvcmsgaGVhZGVyICovCi0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgKHU4ICopJmVkZHAtPm5oLCBlZGRwLT5uaGwpOwotCWVsZW1lbnQtPmxlbmd0aCArPSBlZGRwLT5uaGw7Ci0JZWRkcC0+bmhfaW5fY3R4ID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCWN0eC0+b2Zmc2V0ICs9IGVkZHAtPm5obDsKLQlwYWdlX29mZnNldCArPSBlZGRwLT5uaGw7Ci0JLyogYWRkIHRyYW5zcG9ydCBoZWFkZXIgKi8KLQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAodTggKikmZWRkcC0+dGgsIGVkZHAtPnRobCk7Ci0JZWxlbWVudC0+bGVuZ3RoICs9IGVkZHAtPnRobDsKLQllZGRwLT50aF9pbl9jdHggPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JY3R4LT5vZmZzZXQgKz0gZWRkcC0+dGhsOwotfQotCi1zdGF0aWMgdm9pZCBxZXRoX2VkZHBfY29weV9kYXRhX3RjcChjaGFyICpkc3QsIHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwKLQkJaW50IGxlbiwgX193c3VtICpoY3N1bSkKLXsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwotCWludCBsZWZ0X2luX2ZyYWc7Ci0JaW50IGNvcHlfbGVuOwotCXU4ICpzcmM7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNkdGMiKTsKLQlpZiAoc2tiX3NoaW5mbyhlZGRwLT5za2IpLT5ucl9mcmFncyA9PSAwKSB7Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGVkZHAtPnNrYiwgZWRkcC0+c2tiX29mZnNldCwKLQkJCQkJCSBkc3QsIGxlbik7Ci0JCSpoY3N1bSA9IGNzdW1fcGFydGlhbChlZGRwLT5za2ItPmRhdGEgKyBlZGRwLT5za2Jfb2Zmc2V0LCBsZW4sCi0JCQkJICAgICAgKmhjc3VtKTsKLQkJZWRkcC0+c2tiX29mZnNldCArPSBsZW47Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKGxlbiA+IDApIHsKLQkJCWlmIChlZGRwLT5mcmFnIDwgMCkgewotCQkJCS8qIHdlJ3JlIGluIHNrYi0+ZGF0YSAqLwotCQkJCWxlZnRfaW5fZnJhZyA9IChlZGRwLT5za2ItPmxlbiAtCi0JCQkJCQllZGRwLT5za2ItPmRhdGFfbGVuKQotCQkJCQkJLSBlZGRwLT5za2Jfb2Zmc2V0OwotCQkJCXNyYyA9IGVkZHAtPnNrYi0+ZGF0YSArIGVkZHAtPnNrYl9vZmZzZXQ7Ci0JCQl9IGVsc2UgewotCQkJCWZyYWcgPSAmc2tiX3NoaW5mbyhlZGRwLT5za2IpLT5mcmFnc1sKLQkJCQkJZWRkcC0+ZnJhZ107Ci0JCQkJbGVmdF9pbl9mcmFnID0gZnJhZy0+c2l6ZSAtIGVkZHAtPmZyYWdfb2Zmc2V0OwotCQkJCXNyYyA9ICh1OCAqKSgocGFnZV90b19wZm4oZnJhZy0+cGFnZSkgPDwKLQkJCQkJUEFHRV9TSElGVCkgKyBmcmFnLT5wYWdlX29mZnNldCArCi0JCQkJCWVkZHAtPmZyYWdfb2Zmc2V0KTsKLQkJCX0KLQkJCWlmIChsZWZ0X2luX2ZyYWcgPD0gMCkgewotCQkJCWVkZHAtPmZyYWcrKzsKLQkJCQllZGRwLT5mcmFnX29mZnNldCA9IDA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQljb3B5X2xlbiA9IG1pbihsZWZ0X2luX2ZyYWcsIGxlbik7Ci0JCQltZW1jcHkoZHN0LCBzcmMsIGNvcHlfbGVuKTsKLQkJCSpoY3N1bSA9IGNzdW1fcGFydGlhbChzcmMsIGNvcHlfbGVuLCAqaGNzdW0pOwotCQkJZHN0ICs9IGNvcHlfbGVuOwotCQkJZWRkcC0+ZnJhZ19vZmZzZXQgKz0gY29weV9sZW47Ci0JCQllZGRwLT5za2Jfb2Zmc2V0ICs9IGNvcHlfbGVuOwotCQkJbGVuIC09IGNvcHlfbGVuOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBxZXRoX2VkZHBfY3JlYXRlX3NlZ21lbnRfZGF0YV90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwgaW50IGRhdGFfbGVuLCBfX3dzdW0gaGNzdW0pCi17Ci0JdTggKnBhZ2U7Ci0JaW50IHBhZ2VfcmVtYWluZGVyOwotCWludCBwYWdlX29mZnNldDsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgKmVsZW1lbnQ7Ci0JaW50IGZpcnN0X2xhcCA9IDE7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNzZHQiKTsKLQlwYWdlID0gY3R4LT5wYWdlc1tjdHgtPm9mZnNldCA+PiBQQUdFX1NISUZUXTsKLQlwYWdlX29mZnNldCA9IGN0eC0+b2Zmc2V0ICUgUEFHRV9TSVpFOwotCWVsZW1lbnQgPSAmY3R4LT5lbGVtZW50c1tjdHgtPm51bV9lbGVtZW50c107Ci0Jd2hpbGUgKGRhdGFfbGVuKSB7Ci0JCXBhZ2VfcmVtYWluZGVyID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7Ci0JCWlmIChwYWdlX3JlbWFpbmRlciA8IGRhdGFfbGVuKSB7Ci0JCQlxZXRoX2VkZHBfY29weV9kYXRhX3RjcChwYWdlICsgcGFnZV9vZmZzZXQsIGVkZHAsCi0JCQkJCQlwYWdlX3JlbWFpbmRlciwgJmhjc3VtKTsKLQkJCWVsZW1lbnQtPmxlbmd0aCArPSBwYWdlX3JlbWFpbmRlcjsKLQkJCWlmIChmaXJzdF9sYXApCi0JCQkJZWxlbWVudC0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7Ci0JCQllbHNlCi0JCQkJZWxlbWVudC0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX01JRERMRV9GUkFHOwotCQkJY3R4LT5udW1fZWxlbWVudHMrKzsKLQkJCWVsZW1lbnQrKzsKLQkJCWRhdGFfbGVuIC09IHBhZ2VfcmVtYWluZGVyOwotCQkJY3R4LT5vZmZzZXQgKz0gcGFnZV9yZW1haW5kZXI7Ci0JCQlwYWdlID0gY3R4LT5wYWdlc1tjdHgtPm9mZnNldCA+PiBQQUdFX1NISUZUXTsKLQkJCXBhZ2Vfb2Zmc2V0ID0gMDsKLQkJCWVsZW1lbnQtPmFkZHIgPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JCX0gZWxzZSB7Ci0JCQlxZXRoX2VkZHBfY29weV9kYXRhX3RjcChwYWdlICsgcGFnZV9vZmZzZXQsIGVkZHAsCi0JCQkJCQlkYXRhX2xlbiwgJmhjc3VtKTsKLQkJCWVsZW1lbnQtPmxlbmd0aCArPSBkYXRhX2xlbjsKLQkJCWlmICghZmlyc3RfbGFwKQotCQkJCWVsZW1lbnQtPmZsYWdzID0gU0JBTF9GTEFHU19MQVNUX0ZSQUc7Ci0JCQljdHgtPm51bV9lbGVtZW50cysrOwotCQkJY3R4LT5vZmZzZXQgKz0gZGF0YV9sZW47Ci0JCQlkYXRhX2xlbiA9IDA7Ci0JCX0KLQkJZmlyc3RfbGFwID0gMDsKLQl9Ci0JKChzdHJ1Y3QgdGNwaGRyICopZWRkcC0+dGhfaW5fY3R4KS0+Y2hlY2sgPSBjc3VtX2ZvbGQoaGNzdW0pOwotfQotCi1zdGF0aWMgX193c3VtIHFldGhfZWRkcF9jaGVja190Y3A0X2hkcihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsCi0JCWludCBkYXRhX2xlbikKLXsKLQlfX3dzdW0gcGhjc3VtOyAvKiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNrdDQiKTsKLQllZGRwLT50aC50Y3AuaC5jaGVjayA9IDA7Ci0JLyogY29tcHV0ZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0JcGhjc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKGVkZHAtPm5oLmlwNC5oLnNhZGRyLCBlZGRwLT5uaC5pcDQuaC5kYWRkciwKLQkJCQkgICAgZWRkcC0+dGhsICsgZGF0YV9sZW4sIElQUFJPVE9fVENQLCAwKTsKLQkvKiBjb21wdXRlIGNoZWNrc3VtIG9mIHRjcCBoZWFkZXIgKi8KLQlyZXR1cm4gY3N1bV9wYXJ0aWFsKCZlZGRwLT50aCwgZWRkcC0+dGhsLCBwaGNzdW0pOwotfQotCi1zdGF0aWMgX193c3VtIHFldGhfZWRkcF9jaGVja190Y3A2X2hkcihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsCi0JCWludCBkYXRhX2xlbikKLXsKLQlfX2JlMzIgcHJvdG87Ci0JX193c3VtIHBoY3N1bTsgLyogcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBja3Q2Iik7Ci0JZWRkcC0+dGgudGNwLmguY2hlY2sgPSAwOwotCS8qIGNvbXB1dGUgcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCXBoY3N1bSA9IGNzdW1fcGFydGlhbCgmZWRkcC0+bmguaXA2Lmguc2FkZHIsCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgMCk7Ci0JcGhjc3VtID0gY3N1bV9wYXJ0aWFsKCZlZGRwLT5uaC5pcDYuaC5kYWRkciwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCBwaGNzdW0pOwotCXByb3RvID0gaHRvbmwoSVBQUk9UT19UQ1ApOwotCXBoY3N1bSA9IGNzdW1fcGFydGlhbCgmcHJvdG8sIHNpemVvZih1MzIpLCBwaGNzdW0pOwotCXJldHVybiBwaGNzdW07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKnFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHN0cnVjdCBxZXRoX2hkciAqcWgsCi0JCXU4ICpuaCwgdTggbmhsLCB1OCAqdGgsIHU4IHRobCkKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHA7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNyZGEiKTsKLQllZGRwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9kYXRhKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGVkZHApIHsKLQkJZWRkcC0+bmhsID0gbmhsOwotCQllZGRwLT50aGwgPSB0aGw7Ci0JCW1lbWNweSgmZWRkcC0+cWgsIHFoLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JCW1lbWNweSgmZWRkcC0+bmgsIG5oLCBuaGwpOwotCQltZW1jcHkoJmVkZHAtPnRoLCB0aCwgdGhsKTsKLQkJZWRkcC0+ZnJhZyA9IC0xOyAvKiBpbml0aWFsbHkgd2UncmUgaW4gc2tiLT5kYXRhICovCi0JfQotCXJldHVybiBlZGRwOwotfQotCi1zdGF0aWMgdm9pZCBfX3FldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHApCi17Ci0Jc3RydWN0IHRjcGhkciAqdGNwaDsKLQlpbnQgZGF0YV9sZW47Ci0JX193c3VtIGhjc3VtOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmdGNwIik7Ci0JZWRkcC0+c2tiX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgZWRkcC0+bmhsICsgZWRkcC0+dGhsOwotCWlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKLQkJZWRkcC0+c2tiX29mZnNldCArPSBzaXplb2Yoc3RydWN0IGV0aGhkcik7Ci0JCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKLQkJCWVkZHAtPnNrYl9vZmZzZXQgKz0gVkxBTl9ITEVOOwotCX0KLQl0Y3BoID0gdGNwX2hkcihlZGRwLT5za2IpOwotCXdoaWxlIChlZGRwLT5za2Jfb2Zmc2V0IDwgZWRkcC0+c2tiLT5sZW4pIHsKLQkJZGF0YV9sZW4gPSBtaW4oKGludClza2Jfc2hpbmZvKGVkZHAtPnNrYiktPmdzb19zaXplLAotCQkJICAgICAgIChpbnQpKGVkZHAtPnNrYi0+bGVuIC0gZWRkcC0+c2tiX29mZnNldCkpOwotCQkvKiBwcmVwYXJlIHFkaW8gaGRyICovCi0JCWlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKLQkJCWVkZHAtPnFoLmhkci5sMi5wa3RfbGVuZ3RoID0gZGF0YV9sZW4gKyBFVEhfSExFTiArCi0JCQkJCQkgICAgIGVkZHAtPm5obCArIGVkZHAtPnRobDsKLQkJCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKLQkJCQllZGRwLT5xaC5oZHIubDIucGt0X2xlbmd0aCArPSBWTEFOX0hMRU47Ci0JCX0gZWxzZQotCQkJZWRkcC0+cWguaGRyLmwzLmxlbmd0aCA9IGRhdGFfbGVuICsgZWRkcC0+bmhsICsKLQkJCQkJCSBlZGRwLT50aGw7Ci0JCS8qIHByZXBhcmUgaXAgaGRyICovCi0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgewotCQkJZWRkcC0+bmguaXA0LmgudG90X2xlbiA9IGh0b25zKGRhdGFfbGVuICsgZWRkcC0+bmhsICsKLQkJCQkJCSBlZGRwLT50aGwpOwotCQkJZWRkcC0+bmguaXA0LmguY2hlY2sgPSAwOwotCQkJZWRkcC0+bmguaXA0LmguY2hlY2sgPQotCQkJCWlwX2Zhc3RfY3N1bSgodTggKikmZWRkcC0+bmguaXA0LmgsCi0JCQkJCQllZGRwLT5uaC5pcDQuaC5paGwpOwotCQl9IGVsc2UKLQkJCWVkZHAtPm5oLmlwNi5oLnBheWxvYWRfbGVuID0gaHRvbnMoZGF0YV9sZW4gKwotCQkJCQkJCQllZGRwLT50aGwpOwotCQkvKiBwcmVwYXJlIHRjcCBoZHIgKi8KLQkJaWYgKGRhdGFfbGVuID09IChlZGRwLT5za2ItPmxlbiAtIGVkZHAtPnNrYl9vZmZzZXQpKSB7Ci0JCQkvKiBsYXN0IHNlZ21lbnQgLT4gc2V0IEZJTiBhbmQgUFNIIGZsYWdzICovCi0JCQllZGRwLT50aC50Y3AuaC5maW4gPSB0Y3BoLT5maW47Ci0JCQllZGRwLT50aC50Y3AuaC5wc2ggPSB0Y3BoLT5wc2g7Ci0JCX0KLQkJaWYgKGVkZHAtPnNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQkJaGNzdW0gPSBxZXRoX2VkZHBfY2hlY2tfdGNwNF9oZHIoZWRkcCwgZGF0YV9sZW4pOwotCQllbHNlCi0JCQloY3N1bSA9IHFldGhfZWRkcF9jaGVja190Y3A2X2hkcihlZGRwLCBkYXRhX2xlbik7Ci0JCS8qIGZpbGwgdGhlIG5leHQgc2VnbWVudCBpbnRvIHRoZSBjb250ZXh0ICovCi0JCXFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9oZHJzKGN0eCwgZWRkcCwgZGF0YV9sZW4pOwotCQlxZXRoX2VkZHBfY3JlYXRlX3NlZ21lbnRfZGF0YV90Y3AoY3R4LCBlZGRwLCBkYXRhX2xlbiwgaGNzdW0pOwotCQlpZiAoZWRkcC0+c2tiX29mZnNldCA+PSBlZGRwLT5za2ItPmxlbikKLQkJCWJyZWFrOwotCQkvKiBwcmVwYXJlIGhlYWRlcnMgZm9yIG5leHQgcm91bmQgKi8KLQkJaWYgKGVkZHAtPnNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQkJZWRkcC0+bmguaXA0LmguaWQgPSBodG9ucyhudG9ocyhlZGRwLT5uaC5pcDQuaC5pZCkgKyAxKTsKLQkJZWRkcC0+dGgudGNwLmguc2VxID0gaHRvbmwobnRvaGwoZWRkcC0+dGgudGNwLmguc2VxKSArCi0JCQlkYXRhX2xlbik7Ci0JfQotfQotCi1zdGF0aWMgaW50IHFldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwID0gTlVMTDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwZmljeCIpOwotCS8qIGNyZWF0ZSBvdXIgc2VnbWVudGF0aW9uIGhlYWRlcnMgYW5kIGNvcHkgb3JpZ2luYWwgaGVhZGVycyAqLwotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJZWRkcCA9IHFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHFoZHIsCi0JCQkJCQkgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLAotCQkJCQkJICBpcF9oZHJsZW4oc2tiKSwKLQkJCQkJCSAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKLQkJCQkJCSAgdGNwX2hkcmxlbihza2IpKTsKLQllbHNlCi0JCWVkZHAgPSBxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShxaGRyLAotCQkJCQkJICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwKLQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKLQkJCQkJCSAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKLQkJCQkJCSAgdGNwX2hkcmxlbihza2IpKTsKLQotCWlmIChlZGRwID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImVkZHBmY25tIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlpZiAocWhkci0+aGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQkJbWVtY3B5KCZlZGRwLT5tYWMsIGV0aF9oZHIoc2tiKSwgRVRIX0hMRU4pOwotCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJCWVkZHAtPnZsYW5bMF0gPSBza2ItPnByb3RvY29sOwotCQkJZWRkcC0+dmxhblsxXSA9IGh0b25zKHZsYW5fdHhfdGFnX2dldChza2IpKTsKLQkJfQotCX0KLQkvKiB0aGUgbmV4dCBmbGFncyB3aWxsIG9ubHkgYmUgc2V0IG9uIHRoZSBsYXN0IHNlZ21lbnQgKi8KLQllZGRwLT50aC50Y3AuaC5maW4gPSAwOwotCWVkZHAtPnRoLnRjcC5oLnBzaCA9IDA7Ci0JZWRkcC0+c2tiID0gc2tiOwotCS8qIGJlZ2luIHNlZ21lbnRhdGlvbiBhbmQgZmlsbCBjb250ZXh0ICovCi0JX19xZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChjdHgsIGVkZHApOwotCWtmcmVlKGVkZHApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBxZXRoX2VkZHBfY2FsY19udW1fcGFnZXMoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuKQotewotCWludCBza2JzX3Blcl9wYWdlOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjYW5wIik7Ci0JLyogY2FuIHdlIHB1dCBtdWx0aXBsZSBza2JzIGluIG9uZSBwYWdlPyAqLwotCXNrYnNfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSArIGhkcl9sZW4pOwotCWlmIChza2JzX3Blcl9wYWdlID4gMSkgewotCQljdHgtPm51bV9wYWdlcyA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICsgMSkgLwotCQkJCSBza2JzX3Blcl9wYWdlICsgMTsKLQkJY3R4LT5lbGVtZW50c19wZXJfc2tiID0gMTsKLQl9IGVsc2UgewotCQkvKiBubyAtPiBob3cgbWFueSBlbGVtZW50cyBwZXIgc2tiPyAqLwotCQljdHgtPmVsZW1lbnRzX3Blcl9za2IgPSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSArIGhkcl9sZW4gKwotCQkJCSAgICAgUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUOwotCQljdHgtPm51bV9wYWdlcyA9IGN0eC0+ZWxlbWVudHNfcGVyX3NrYiAqCi0JCQkJIChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICsgMSk7Ci0JfQotCWN0eC0+bnVtX2VsZW1lbnRzID0gY3R4LT5lbGVtZW50c19wZXJfc2tiICoKLQkJCSAgICAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYygKLQkJc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4pCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwotCXU4ICphZGRyOwotCWludCBpOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImNyZWRkcGNnIik7Ci0JLyogY3JlYXRlIHRoZSBjb250ZXh0IGFuZCBhbGxvY2F0ZSBwYWdlcyAqLwotCWN0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCksIEdGUF9BVE9NSUMpOwotCWlmIChjdHggPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHBjbjEiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWN0eC0+dHlwZSA9IFFFVEhfTEFSR0VfU0VORF9FRERQOwotCXFldGhfZWRkcF9jYWxjX251bV9wYWdlcyhjdHgsIHNrYiwgaGRyX2xlbik7Ci0JaWYgKGN0eC0+ZWxlbWVudHNfcGVyX3NrYiA+IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHBjaXMiKTsKLQkJa2ZyZWUoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWN0eC0+cGFnZXMgPSBrY2FsbG9jKGN0eC0+bnVtX3BhZ2VzLCBzaXplb2YodTggKiksIEdGUF9BVE9NSUMpOwotCWlmIChjdHgtPnBhZ2VzID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY24yIik7Ci0JCWtmcmVlKGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fcGFnZXM7ICsraSkgewotCQlhZGRyID0gKHU4ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwotCQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHBjbjMiKTsKLQkJCWN0eC0+bnVtX3BhZ2VzID0gaTsKLQkJCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWN0eC0+cGFnZXNbaV0gPSBhZGRyOwotCX0KLQljdHgtPmVsZW1lbnRzID0ga2NhbGxvYyhjdHgtPm51bV9lbGVtZW50cywKLQkJCQlzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9lbGVtZW50KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGN0eC0+ZWxlbWVudHMgPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHBjbjQiKTsKLQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyogcmVzZXQgbnVtX2VsZW1lbnRzOyB3aWxsIGJlIGluY3JlbWVudGVkIGFnYWluIGluIGZpbGxfYnVmZmVyIHRvCi0JICogcmVmbGVjdCBudW1iZXIgb2YgYWN0dWFsbHkgdXNlZCBlbGVtZW50cyAqLwotCWN0eC0+bnVtX2VsZW1lbnRzID0gMDsKLQlyZXR1cm4gY3R4OwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfdGNwKAotCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQlzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImNyZWRkcGN0Iik7Ci0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYyhjYXJkLCBza2IsCi0JCQkJCQkoc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKwotCQkJCQkJaXBfaGRybGVuKHNrYikgKwotCQkJCQkJdGNwX2hkcmxlbihza2IpKSk7Ci0JZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoY2FyZCwgc2tiLAotCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKLQkJCXRjcF9oZHJsZW4oc2tiKSk7Ci0JZWxzZQotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2V0Y3BpbnYiKTsKLQotCWlmIChjdHggPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY3JlZGRwbmwiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmIChxZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChjdHgsIHNrYiwgcWhkcikpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwdGZlIik7Ci0JCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWF0b21pY19zZXQoJmN0eC0+cmVmY250LCAxKTsKLQlyZXR1cm4gY3R4OwotfQotCi1zdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIsCi0JCXVuc2lnbmVkIGNoYXIgc2tfcHJvdG9jb2wpCi17Ci0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImNyZWRkcGMiKTsKLQlzd2l0Y2ggKHNrX3Byb3RvY29sKSB7Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQkJcmV0dXJuIHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF90Y3AoY2FyZCwgc2tiLCBxaGRyKTsKLQlkZWZhdWx0OgotCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZWRkcGludnAiKTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQpOwotCi12b2lkIHFldGhfdHNvX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2hkciAqcWhkciwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcWV0aF9oZHJfdHNvICpoZHIgPSAoc3RydWN0IHFldGhfaGRyX3RzbyAqKXFoZHI7Ci0Jc3RydWN0IHRjcGhkciAqdGNwaCA9IHRjcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJ0c29maGRyIik7Ci0KLQkvKmZpeCBoZWFkZXIgdG8gVFNPIHZhbHVlcyAuLi4qLwotCWhkci0+aGRyLmhkci5sMy5pZCA9IFFFVEhfSEVBREVSX1RZUEVfVFNPOwotCS8qc2V0IHZhbHVlcyB3aGljaCBhcmUgZml4IGZvciB0aGUgZmlyc3QgYXBwcm9hY2ggLi4uKi8KLQloZHItPmV4dC5oZHJfdG90X2xlbiA9IChfX3UxNikgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl9leHRfdHNvKTsKLQloZHItPmV4dC5pbWJfaGRyX25vICA9IDE7Ci0JaGRyLT5leHQuaGRyX3R5cGUgICAgPSAxOwotCWhkci0+ZXh0Lmhkcl92ZXJzaW9uID0gMTsKLQloZHItPmV4dC5oZHJfbGVuICAgICA9IDI4OwotCS8qaW5zZXJ0IG5vbi1maXggdmFsdWVzICovCi0JaGRyLT5leHQubXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKLQloZHItPmV4dC5kZ19oZHJfbGVuID0gKF9fdTE2KShpcGgtPmlobCo0ICsgdGNwaC0+ZG9mZio0KTsKLQloZHItPmV4dC5wYXlsb2FkX2xlbiA9IChfX3UxNikoc2tiLT5sZW4gLSBoZHItPmV4dC5kZ19oZHJfbGVuIC0KLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pKTsKLQl0Y3BoLT5jaGVjayA9IDA7Ci0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVBWNikgewotCQlpcDZoLT5wYXlsb2FkX2xlbiA9IDA7Ci0JCXRjcGgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXA2aC0+c2FkZHIsICZpcDZoLT5kYWRkciwKLQkJCQkJICAgICAgIDAsIElQUFJPVE9fVENQLCAwKTsKLQl9IGVsc2UgewotCQkvKk9TQSB3YW50IHVzIHRvIHNldCB0aGVzZSB2YWx1ZXMgLi4uKi8KLQkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKLQkJCQkJIDAsIElQUFJPVE9fVENQLCAwKTsKLQkJaXBoLT50b3RfbGVuID0gMDsKLQkJaXBoLT5jaGVjayA9IDA7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF90c29fZmlsbF9oZWFkZXIpOwotCi12b2lkIHFldGhfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCB0bGVuOwotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgewotCQl0bGVuID0gbnRvaHMoaXBfaGRyKHNrYiktPnRvdF9sZW4pIC0gKGlwX2hkcihza2IpLT5paGwgPDwgMik7Ci0JCXN3aXRjaCAoaXBfaGRyKHNrYiktPnByb3RvY29sKSB7Ci0JCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gMDsKLQkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYygKLQkJCQlpcF9oZHIoc2tiKS0+c2FkZHIsIGlwX2hkcihza2IpLT5kYWRkciwKLQkJCQl0bGVuLCBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJdGxlbiwgMCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBQUk9UT19VRFA6Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gMDsKLQkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYygKLQkJCQlpcF9oZHIoc2tiKS0+c2FkZHIsIGlwX2hkcihza2IpLT5kYWRkciwKLQkJCQl0bGVuLCBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJdGxlbiwgMCkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKLQkJc3dpdGNoIChpcHY2X2hkcihza2IpLT5uZXh0aGRyKSB7Ci0JCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gMDsKLQkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoCi0JCQkJJmlwdjZfaGRyKHNrYiktPnNhZGRyLCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sCi0JCQkJaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciwKLQkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAotCQkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwgMCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBQUk9UT19VRFA6Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gMDsKLQkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoCi0JCQkJJmlwdjZfaGRyKHNrYiktPnNhZGRyLCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sCi0JCQkJaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciwKLQkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAotCQkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwgMCkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChxZXRoX3R4X2NzdW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCmluZGV4IDg2YmY3ZGYuLmU2OWRlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqICBkcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKLSAqCi0gKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKLSAqICAgIEF1dGhvcihzKTogVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPiwKLSAqCQkgRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+Ci0gKi8KLQotI2lmbmRlZiBfX1FFVEhfQ09SRV9PRkZMX0hfXwotI2RlZmluZSBfX1FFVEhfQ09SRV9PRkZMX0hfXwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgewotCXUzMiBmbGFnczsKLQl1MzIgbGVuZ3RoOwotCXZvaWQgKmFkZHI7Ci19OwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgewotCWF0b21pY190IHJlZmNudDsKLQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB0eXBlOwotCWludCBudW1fcGFnZXM7CQkJICAgIC8qICMgb2YgYWxsb2NhdGVkIHBhZ2VzICovCi0JdTggKipwYWdlczsJCQkgICAgLyogcG9pbnRlcnMgdG8gcGFnZXMgKi8KLQlpbnQgb2Zmc2V0OwkJCSAgICAvKiBvZmZzZXQgaW4gY3R4IGR1cmluZyBjcmVhdGlvbiAqLwotCWludCBudW1fZWxlbWVudHM7CQkgICAgLyogIyBvZiByZXF1aXJlZCAnU0JBTEVzJyAqLwotCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudHM7IC8qIGFycmF5IG9mICdTQkFMRXMnICovCi0JaW50IGVsZW1lbnRzX3Blcl9za2I7CQkgICAgLyogIyBvZiAnU0JBTEVzJyBwZXIgc2tiICoqLwotfTsKLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4OwotfTsKLQotc3RydWN0IHFldGhfZWRkcF9kYXRhIHsKLQlzdHJ1Y3QgcWV0aF9oZHIgcWg7Ci0Jc3RydWN0IGV0aGhkciBtYWM7Ci0JX19iZTE2IHZsYW5bMl07Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJc3RydWN0IGlwaGRyIGg7Ci0JCQl1OCBvcHRpb25zWzQwXTsKLQkJfSBpcDQ7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgaXB2NmhkciBoOwotCQl9IGlwNjsKLQl9IG5oOwotCXU4IG5obDsKLQl2b2lkICpuaF9pbl9jdHg7CS8qIGFkZHJlc3Mgb2Ygbmggd2l0aGluIHRoZSBjdHggKi8KLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgdGNwaGRyIGg7Ci0JCQl1OCBvcHRpb25zWzQwXTsKLQkJfSB0Y3A7Ci0JfSB0aDsKLQl1OCB0aGw7Ci0Jdm9pZCAqdGhfaW5fY3R4OwkvKiBhZGRyZXNzIG9mIHRoIHdpdGhpbiB0aGUgY3R4ICovCi0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgc2tiX29mZnNldDsKLQlpbnQgZnJhZzsKLQlpbnQgZnJhZ19vZmZzZXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZXh0ZXJuIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCB1bnNpZ25lZCBjaGFyKTsKLWV4dGVybiB2b2lkIHFldGhfZWRkcF9wdXRfY29udGV4dChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKik7Ci1leHRlcm4gaW50IHFldGhfZWRkcF9maWxsX2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqKTsKLWV4dGVybiBpbnQgcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKik7Ci0KLXZvaWQgcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwKLQkJc3RydWN0IHNrX2J1ZmYgKik7Ci12b2lkIHFldGhfdHhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotI2VuZGlmIC8qIF9fUUVUSF9DT1JFX0VERFBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCmluZGV4IGMyNmU4NDIuLjU2ODQ2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCkBAIC00MjcsOCArNDI3LDYgQEAKIAlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgewogCWNhc2UgUUVUSF9MQVJHRV9TRU5EX05POgogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIm5vIik7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfRUREUDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJFRERQIik7CiAJY2FzZSBRRVRIX0xBUkdFX1NFTkRfVFNPOgogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIlRTTyIpOwogCWRlZmF1bHQ6CkBAIC00NDksOCArNDQ3LDYgQEAKIAl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwogCWlmICghc3RyY21wKHRtcCwgIm5vIikpIHsKIAkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiRUREUCIpKSB7Ci0JCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiVFNPIikpIHsKIAkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9UU087CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCmluZGV4IDA3YWI4YTUuLjE3MjAzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAKICNpbmNsdWRlICJxZXRoX2NvcmUuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgogCiBzdGF0aWMgaW50IHFldGhfbDJfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sMl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwpAQCAtMzI4LDYgKzMyNywxMCBAQAogCXN0cnVjdCBxZXRoX3ZsYW5fdmlkICppZDsKIAogCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAiYWlkOiVkIiwgdmlkKTsKKwlpZiAocWV0aF93YWl0X2Zvcl90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJhaWRSRUMiKTsKKwkJcmV0dXJuOworCX0KIAlpZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3ZsYW5fdmlkKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGlkKSB7CiAJCWlkLT52aWQgPSB2aWQ7CkBAIC0zNDQsNiArMzQ3LDEwIEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAogCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAia2lkOiVkIiwgdmlkKTsKKwlpZiAocWV0aF93YWl0X2Zvcl90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJraWRSRUMiKTsKKwkJcmV0dXJuOworCX0KIAlzcGluX2xvY2tfYmgoJmNhcmQtPnZsYW5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlkLCAmY2FyZC0+dmlkX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGlkLT52aWQgPT0gdmlkKSB7CkBAIC0zNzksNyArMzg2LDggQEAKIAkJCWRldl9jbG9zZShjYXJkLT5kZXYpOwogCQkJcnRubF91bmxvY2soKTsKIAkJfQotCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3ApIHsKKwkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wIHx8CisJCQlyZWNvdmVyeV9tb2RlKSB7CiAJCQlfX3U4ICptYWMgPSAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXTsKIAkJCXJjID0gcWV0aF9sMl9zZW5kX2RlbG1hYyhjYXJkLCBtYWMpOwogCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICJMZXJyJWQiLCByYyk7CkBAIC0zODgsNyArMzk2LDggQEAKIAl9CiAJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfU09GVFNFVFVQKSB7CiAJCXFldGhfbDJfcHJvY2Vzc192bGFucyhjYXJkLCAxKTsKLQkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wKQorCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3AgfHwKKwkJCXJlY292ZXJ5X21vZGUpCiAJCQlxZXRoX2wyX2RlbF9hbGxfbWMoY2FyZCk7CiAJCXFldGhfY2xlYXJfaXBhY21kX2xpc3QoY2FyZCk7CiAJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9IQVJEU0VUVVA7CkBAIC01OTMsNiArNjAyLDEwIEBACiAJfQogCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAzLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CiAJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCBhZGRyLT5zYV9kYXRhLCBPU0FfQUREUl9MRU4pOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG1jUkVDIik7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQogCXJjID0gcWV0aF9sMl9zZW5kX2RlbG1hYyhjYXJkLCAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXSk7CiAJaWYgKCFyYykKIAkJcmMgPSBxZXRoX2wyX3NlbmRfc2V0bWFjKGNhcmQsIGFkZHItPnNhX2RhdGEpOwpAQCAtNjA4LDYgKzYyMSw5IEBACiAJCXJldHVybiA7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bXVsdGkiKTsKKwlpZiAocWV0aF90aHJlYWRzX3J1bm5pbmcoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApKQorCQlyZXR1cm47CiAJcWV0aF9sMl9kZWxfYWxsX21jKGNhcmQpOwogCXNwaW5fbG9ja19iaCgmY2FyZC0+bWNsb2NrKTsKIAlmb3IgKGRtID0gZGV2LT5tY19saXN0OyBkbTsgZG0gPSBkbS0+bmV4dCkKQEAgLTYzNCw4ICs2NTAsNiBAQAogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXMKIAkJW3FldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKGNhcmQsIHNrYiwgaXB2LCBjYXN0X3R5cGUpXTsKIAlpbnQgdHhfYnl0ZXMgPSBza2ItPmxlbjsKLQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKIAlpbnQgZGF0YV9vZmZzZXQgPSAtMTsKIAlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKIAlpbnQgaGRfbGVuID0gMDsKQEAgLTY1NSwxNCArNjY5LDEwIEBACiAJfQogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCWlmIChza2JfaXNfZ3NvKHNrYikpCi0JCWxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQogCQloZHIgPSAoc3RydWN0IHFldGhfaGRyICopc2tiLT5kYXRhOwogCWVsc2UgewotCQlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpICYmICghbGFyZ2Vfc2VuZCkgJiYKLQkJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApKSB7CisJCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CiAJCQluZXdfc2tiID0gc2tiOwogCQkJZGF0YV9vZmZzZXQgPSBFVEhfSExFTjsKIAkJCWhkX2xlbiA9IEVUSF9ITEVOOwpAQCAtNjg5LDU5ICs2OTksMjYgQEAKIAkJfQogCX0KIAotCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9FRERQKSB7Ci0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dChjYXJkLCBuZXdfc2tiLCBoZHIsCi0JCQkJCQlza2ItPnNrLT5za19wcm90b2NvbCk7Ci0JCWlmIChjdHggPT0gTlVMTCkgewotCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGQgbm90IGNyZWF0ZSBlZGRwIGNvbnRleHRcbiIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9Ci0JfSBlbHNlIHsKLQkJZWxlbWVudHMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKKwllbGVtZW50cyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLAogCQkJCQkJZWxlbWVudHNfbmVlZGVkKTsKLQkJaWYgKCFlbGVtZW50cykgewotCQkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCi0JCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7Ci0JCQlnb3RvIHR4X2Ryb3A7Ci0JCX0KKwlpZiAoIWVsZW1lbnRzKSB7CisJCWlmIChkYXRhX29mZnNldCA+PSAwKQorCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CisJCWdvdG8gdHhfZHJvcDsKIAl9CiAKLQlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSAmJgotCSAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCi0JCXFldGhfdHhfY3N1bShuZXdfc2tiKTsKLQogCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQogCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKLQkJCQkJIGVsZW1lbnRzLCBjdHgpOworCQkJCQkgZWxlbWVudHMpOwogCWVsc2UKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3QoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKLQkJCQkJZWxlbWVudHMsIGN0eCwgZGF0YV9vZmZzZXQsIGhkX2xlbik7CisJCQkJCWVsZW1lbnRzLCBkYXRhX29mZnNldCwgaGRfbGVuKTsKIAlpZiAoIXJjKSB7CiAJCWNhcmQtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJY2FyZC0+c3RhdHMudHhfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAJCWlmIChuZXdfc2tiICE9IHNrYikKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7Ci0JCQlpZiAobGFyZ2Vfc2VuZCAhPSBRRVRIX0xBUkdFX1NFTkRfTk8pIHsKLQkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7Ci0JCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOwotCQkJfQotCQkJaWYgKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzID4gMCkgewotCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19zZW50Kys7Ci0JCQkJLyogbnJfZnJhZ3MgKyBza2ItPmRhdGEgKi8KLQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3NlbnQgKz0KLQkJCQkJc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAxOwotCQkJfQotCQl9Ci0KLQkJaWYgKGN0eCAhPSBOVUxMKSB7Ci0JCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQoY3R4KTsKLQkJCWRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOwotCQl9CiAJfSBlbHNlIHsKLQkJaWYgKGN0eCAhPSBOVUxMKQotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0KIAkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCiAJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKIApAQCAtODc4LDMwICs4NTUsOCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBxZXRoX2wyX2V0aHRvb2xfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwotCi0JaWYgKGRhdGEpIHsKLQkJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pIHsKLQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOwotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJfQotCX0gZWxzZSB7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwotCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHFldGhfbDJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IHFldGhfbDJfZXRodG9vbF9zZXRfdHNvLAogCS5nZXRfc3RyaW5ncyA9IHFldGhfY29yZV9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zdGF0c19jb3VudCA9IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwppbmRleCAzZDA0OTIwLi4wYmEzODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKQEAgLTE5LDE1ICsxOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lnbXAuaD4KIAogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAKICNpbmNsdWRlICJxZXRoX2wzLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKIAogc3RhdGljIGludCBxZXRoX2wzX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHFldGhfbDNfcmVjb3Zlcih2b2lkICopOwpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKIAlyYyA9IHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKGNhcmQpOwogCWlmIChyYykgewogCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBjb3VsZG4ndCBzZXQgYWRhcHRlciBwYXJhbWV0ZXJzOiAiCi0JCQkiMHgleFxuIiwgY2FyZC0+Z2Rldi0+ZGV2LmJ1c19pZCwgcmMpOworCQkJIjB4JXhcbiIsIGRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAJaWYgKHFldGhfYWRwX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURQX0FMVEVSX01BQ19BRERSRVNTKSkgewpAQCAtMTgzOCw2ICsxODM4LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAia2lkOiVkIiwgdmlkKTsKKwlpZiAocWV0aF93YWl0X2Zvcl90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJraWRSRUMiKTsKKwkJcmV0dXJuOworCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKIAkvKiB1bnJlZ2lzdGVyIElQIGFkZHJlc3NlcyBvZiB2bGFuIGRldmljZSAqLwogCXFldGhfbDNfZnJlZV92bGFuX2FkZHJlc3NlcyhjYXJkLCB2aWQpOwpAQCAtMjEwMSw2ICsyMTA1LDkgQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG11bHRpIik7CisJaWYgKHFldGhfdGhyZWFkc19ydW5uaW5nKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSkKKwkJcmV0dXJuOwogCXFldGhfbDNfZGVsZXRlX21jX2FkZHJlc3NlcyhjYXJkKTsKIAlxZXRoX2wzX2FkZF9tdWx0aWNhc3RfaXB2NChjYXJkKTsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CkBAIC0yNTc3LDEyICsyNTg0LDYzIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBxZXRoX3Rzb19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQlzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHFldGhfaGRyX3RzbyAqaGRyID0gKHN0cnVjdCBxZXRoX2hkcl90c28gKilxaGRyOworCXN0cnVjdCB0Y3BoZHIgKnRjcGggPSB0Y3BfaGRyKHNrYik7CisJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKKwlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CisKKwkvKmZpeCBoZWFkZXIgdG8gVFNPIHZhbHVlcyAuLi4qLworCWhkci0+aGRyLmhkci5sMy5pZCA9IFFFVEhfSEVBREVSX1RZUEVfVFNPOworCS8qc2V0IHZhbHVlcyB3aGljaCBhcmUgZml4IGZvciB0aGUgZmlyc3QgYXBwcm9hY2ggLi4uKi8KKwloZHItPmV4dC5oZHJfdG90X2xlbiA9IChfX3UxNikgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl9leHRfdHNvKTsKKwloZHItPmV4dC5pbWJfaGRyX25vICA9IDE7CisJaGRyLT5leHQuaGRyX3R5cGUgICAgPSAxOworCWhkci0+ZXh0Lmhkcl92ZXJzaW9uID0gMTsKKwloZHItPmV4dC5oZHJfbGVuICAgICA9IDI4OworCS8qaW5zZXJ0IG5vbi1maXggdmFsdWVzICovCisJaGRyLT5leHQubXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwloZHItPmV4dC5kZ19oZHJfbGVuID0gKF9fdTE2KShpcGgtPmlobCo0ICsgdGNwaC0+ZG9mZio0KTsKKwloZHItPmV4dC5wYXlsb2FkX2xlbiA9IChfX3UxNikoc2tiLT5sZW4gLSBoZHItPmV4dC5kZ19oZHJfbGVuIC0KKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pKTsKKwl0Y3BoLT5jaGVjayA9IDA7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVBWNikgeworCQlpcDZoLT5wYXlsb2FkX2xlbiA9IDA7CisJCXRjcGgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXA2aC0+c2FkZHIsICZpcDZoLT5kYWRkciwKKwkJCQkJICAgICAgIDAsIElQUFJPVE9fVENQLCAwKTsKKwl9IGVsc2UgeworCQkvKk9TQSB3YW50IHVzIHRvIHNldCB0aGVzZSB2YWx1ZXMgLi4uKi8KKwkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJIDAsIElQUFJPVE9fVENQLCAwKTsKKwkJaXBoLT50b3RfbGVuID0gMDsKKwkJaXBoLT5jaGVjayA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBxZXRoX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlfX3dzdW0gY3N1bTsKKwlpbnQgb2Zmc2V0OworCisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYikpOworCW9mZnNldCA9IHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworCUJVR19PTihvZmZzZXQgPj0gc2tiX2hlYWRsZW4oc2tiKSk7CisJY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLT5sZW4gLSBvZmZzZXQsIDApOworCisJb2Zmc2V0ICs9IHNrYi0+Y3N1bV9vZmZzZXQ7CisJQlVHX09OKG9mZnNldCArIHNpemVvZihfX3N1bTE2KSA+IHNrYl9oZWFkbGVuKHNrYikpOworCSooX19zdW0xNiAqKShza2ItPmRhdGEgKyBvZmZzZXQpID0gY3N1bV9mb2xkKGNzdW0pOworfQorCiBzdGF0aWMgaW50IHFldGhfbDNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJjOwogCXUxNiAqdGFnOwogCXN0cnVjdCBxZXRoX2hkciAqaGRyID0gTlVMTDsKIAlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKKwlpbnQgZWxlbXM7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IE5VTEw7CiAJaW50IGlwdiA9IHFldGhfZ2V0X2lwX3ZlcnNpb24oc2tiKTsKQEAgLTI1OTEsOCArMjY0OSw4IEBACiAJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CiAJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47CiAJZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CiAJaW50IGRhdGFfb2Zmc2V0ID0gLTE7CisJaW50IG5yX2ZyYWdzOwogCiAJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJgogCSAgICAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSkgJiYKQEAgLTI2MTUsNiArMjY3MywxMiBAQAogCiAJaWYgKHNrYl9pc19nc28oc2tiKSkKIAkJbGFyZ2Vfc2VuZCA9IGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZDsKKwllbHNlCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQlxZXRoX3R4X2NzdW0oc2tiKTsKKwkJCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQkJCWNhcmQtPnBlcmZfc3RhdHMudHhfY3N1bSsrOworCQl9CiAKIAlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpICYmICghbGFyZ2Vfc2VuZCkgJiYKIAkgICAgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkpIHsKQEAgLTI2NjEsMTIgKzI3MjUsMTMgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAkvKiBmaXggaGFyZHdhcmUgbGltaXRhdGlvbjogYXMgbG9uZyBhcyB3ZSBkbyBub3QgaGF2ZSBzYmFsCi0JICogY2hhaW5pbmcgd2UgY2FuIG5vdCBzZW5kIGxvbmcgZnJhZyBsaXN0cyBzbyB3ZSB0ZW1wb3JhcnkKLQkgKiBzd2l0Y2ggdG8gRUREUAorCSAqIGNoYWluaW5nIHdlIGNhbiBub3Qgc2VuZCBsb25nIGZyYWcgbGlzdHMKIAkgKi8KIAlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX1RTTykgJiYKLQkJKChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDIpID4gMTYpKQotCQlsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CisJICAgICgoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAyKSA+IDE2KSkgeworCQlpZiAoc2tiX2xpbmVhcml6ZShuZXdfc2tiKSkKKwkJCWdvdG8gdHhfZHJvcDsKKwl9CiAKIAlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX1RTTykgJiYKIAkgICAgKGNhc3RfdHlwZSA9PSBSVE5fVU5TUEVDKSkgewpAQCAtMjY4OSwzNyArMjc1NCwyMiBAQAogCQl9CiAJfQogCi0JaWYgKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX0VERFApIHsKLQkJLyogbmV3X3NrYiBpcyBub3Qgb3duZWQgYnkgYSBzb2NrZXQgc28gd2UgdXNlIHNrYiB0byBnZXQKLQkJICogdGhlIHByb3RvY29sCi0JCSAqLwotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoY2FyZCwgbmV3X3NrYiwgaGRyLAotCQkJCQkJc2tiLT5zay0+c2tfcHJvdG9jb2wpOwotCQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJCVFFVEhfREJGX01FU1NBR0UoMiwgImNvdWxkIG5vdCBjcmVhdGUgZWRkcCBjb250ZXh0XG4iKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQotCX0gZWxzZSB7Ci0JCWludCBlbGVtcyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLAorCWVsZW1zID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCiAJCQkJCQkgZWxlbWVudHNfbmVlZGVkKTsKLQkJaWYgKCFlbGVtcykgewotCQkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCi0JCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7Ci0JCQlnb3RvIHR4X2Ryb3A7Ci0JCX0KLQkJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOworCWlmICghZWxlbXMpIHsKKwkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCisJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKKwkJZ290byB0eF9kcm9wOwogCX0KLQotCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pICYmCi0JICAgIChuZXdfc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCi0JCXFldGhfdHhfY3N1bShuZXdfc2tiKTsKKwllbGVtZW50c19uZWVkZWQgKz0gZWxlbXM7CisJbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFnczsKIAogCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQogCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKLQkJCQkJIGVsZW1lbnRzX25lZWRlZCwgY3R4KTsKKwkJCQkJIGVsZW1lbnRzX25lZWRlZCk7CiAJZWxzZQogCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChjYXJkLCBxdWV1ZSwgbmV3X3NrYiwgaGRyLAotCQkJCQllbGVtZW50c19uZWVkZWQsIGN0eCwgZGF0YV9vZmZzZXQsIDApOworCQkJCQllbGVtZW50c19uZWVkZWQsIGRhdGFfb2Zmc2V0LCAwKTsKIAogCWlmICghcmMpIHsKIAkJY2FyZC0+c3RhdHMudHhfcGFja2V0cysrOwpAQCAtMjczMSwyMiArMjc4MSwxMyBAQAogCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9ieXRlcyArPSB0eF9ieXRlczsKIAkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfY250Kys7CiAJCQl9Ci0JCQlpZiAoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgPiAwKSB7CisJCQlpZiAobnJfZnJhZ3MpIHsKIAkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCsrOwogCQkJCS8qIG5yX2ZyYWdzICsgc2tiLT5kYXRhICovCi0JCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9Ci0JCQkJCXNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMTsKKwkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3NlbnQgKz0gbnJfZnJhZ3MgKyAxOwogCQkJfQogCQl9Ci0KLQkJaWYgKGN0eCAhPSBOVUxMKSB7Ci0JCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQoY3R4KTsKLQkJCWRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOwotCQl9CiAJfSBlbHNlIHsKLQkJaWYgKGN0eCAhPSBOVUxMKQotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0KIAkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCiAJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKIApAQCAtMjg0MSw3ICsyODgyLDcgQEAKIAlpZiAoZGF0YSkgewogCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgewogCQkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCi0JCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CisJCQkJcmV0dXJuIC1FUEVSTTsKIAkJCWVsc2UKIAkJCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfVFNPOwogCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oIGIvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzOWY4YjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqICBkcml2ZXJzL3MzOTAvczM5MG1hY2guaAotICogICBTLzM5MCBkYXRhIGRlZmluaXRpb25zIGZvciBtYWNoaW5lIGNoZWNrIHByb2Nlc3NpbmcKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyAoYWRsdW5nQGRlLmlibS5jb20pCi0gKi8KLQotI2lmbmRlZiBfX3MzOTBtYWNoX2gKLSNkZWZpbmUgX19zMzkwbWFjaF9oCi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotc3RydWN0IG1jaSB7Ci0JX191MzIgICBzZCAgICAgICAgICAgICAgOiAgMTsgLyogMDAgc3lzdGVtIGRhbWFnZSAqLwotCV9fdTMyICAgcGQgICAgICAgICAgICAgIDogIDE7IC8qIDAxIGluc3RydWN0aW9uLXByb2Nlc3NpbmcgZGFtYWdlICovCi0JX191MzIgICBzciAgICAgICAgICAgICAgOiAgMTsgLyogMDIgc3lzdGVtIHJlY292ZXJ5ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzEgOiAgMTsgLyogMDMgKi8KLQlfX3UzMiAgIGNkICAgICAgICAgICAgICA6ICAxOyAvKiAwNCB0aW1pbmctZmFjaWxpdHkgZGFtYWdlICovCi0JX191MzIgICBlZCAgICAgICAgICAgICAgOiAgMTsgLyogMDUgZXh0ZXJuYWwgZGFtYWdlICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzIgOiAgMTsgLyogMDYgKi8KLQlfX3UzMiAgIGRnICAgICAgICAgICAgICA6ICAxOyAvKiAwNyBkZWdyYWRhdGlvbiAqLwotCV9fdTMyICAgdyAgICAgICAgICAgICAgIDogIDE7IC8qIDA4IHdhcm5pbmcgcGVuZGluZyAqLwotCV9fdTMyICAgY3AgICAgICAgICAgICAgIDogIDE7IC8qIDA5IGNoYW5uZWwtcmVwb3J0IHBlbmRpbmcgKi8KLQlfX3UzMiAgIHNwICAgICAgICAgICAgICA6ICAxOyAvKiAxMCBzZXJ2aWNlLXByb2Nlc3NvciBkYW1hZ2UgKi8KLQlfX3UzMiAgIGNrICAgICAgICAgICAgICA6ICAxOyAvKiAxMSBjaGFubmVsLXN1YnN5c3RlbSBkYW1hZ2UgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfMyA6ICAyOyAvKiAxMi0xMyAqLwotCV9fdTMyICAgYiAgICAgICAgICAgICAgIDogIDE7IC8qIDE0IGJhY2tlZCB1cCAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF80IDogIDE7IC8qIDE1ICovCi0JX191MzIgICBzZSAgICAgICAgICAgICAgOiAgMTsgLyogMTYgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAqLwotCV9fdTMyICAgc2MgICAgICAgICAgICAgIDogIDE7IC8qIDE3IHN0b3JhZ2UgZXJyb3IgY29ycmVjdGVkICovCi0JX191MzIgICBrZSAgICAgICAgICAgICAgOiAgMTsgLyogMTggc3RvcmFnZS1rZXkgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KLQlfX3UzMiAgIGRzICAgICAgICAgICAgICA6ICAxOyAvKiAxOSBzdG9yYWdlIGRlZ3JhZGF0aW9uICovCi0JX191MzIgICB3cCAgICAgICAgICAgICAgOiAgMTsgLyogMjAgcHN3IG13cCB2YWxpZGl0eSAqLwotCV9fdTMyICAgbXMgICAgICAgICAgICAgIDogIDE7IC8qIDIxIHBzdyBtYXNrIGFuZCBrZXkgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIHBtICAgICAgICAgICAgICA6ICAxOyAvKiAyMiBwc3cgcHJvZ3JhbSBtYXNrIGFuZCBjYyB2YWxpZGl0eSAqLwotCV9fdTMyICAgaWEgICAgICAgICAgICAgIDogIDE7IC8qIDIzIHBzdyBpbnN0cnVjdGlvbiBhZGRyZXNzIHZhbGlkaXR5ICovCi0JX191MzIgICBmYSAgICAgICAgICAgICAgOiAgMTsgLyogMjQgZmFpbGluZyBzdG9yYWdlIGFkZHJlc3MgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNSA6ICAxOyAvKiAyNSAqLwotCV9fdTMyICAgZWMgICAgICAgICAgICAgIDogIDE7IC8qIDI2IGV4dGVybmFsIGRhbWFnZSBjb2RlIHZhbGlkaXR5ICovCi0JX191MzIgICBmcCAgICAgICAgICAgICAgOiAgMTsgLyogMjcgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGdyICAgICAgICAgICAgICA6ICAxOyAvKiAyOCBnZW5lcmFsIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBjciAgICAgICAgICAgICAgOiAgMTsgLyogMjkgY29udHJvbCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF82IDogIDE7IC8qIDMwICovCi0JX191MzIgICBzdCAgICAgICAgICAgICAgOiAgMTsgLyogMzEgc3RvcmFnZSBsb2dpY2FsIHZhbGlkaXR5ICovCi0JX191MzIgICBpZSAgICAgICAgICAgICAgOiAgMTsgLyogMzIgaW5kaXJlY3Qgc3RvcmFnZSBlcnJvciAqLwotCV9fdTMyICAgYXIgICAgICAgICAgICAgIDogIDE7IC8qIDMzIGFjY2VzcyByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgZGEgICAgICAgICAgICAgIDogIDE7IC8qIDM0IGRlbGF5ZWQgYWNjZXNzIGV4Y2VwdGlvbiAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF83IDogIDc7IC8qIDM1LTQxICovCi0JX191MzIgICBwciAgICAgICAgICAgICAgOiAgMTsgLyogNDIgdG9kIHByb2dyYW1tYWJsZSByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgZmMgICAgICAgICAgICAgIDogIDE7IC8qIDQzIGZwIGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGFwICAgICAgICAgICAgICA6ICAxOyAvKiA0NCBhbmNpbGxhcnkgcmVwb3J0ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzggOiAgMTsgLyogNDUgKi8KLQlfX3UzMiAgIGN0ICAgICAgICAgICAgICA6ICAxOyAvKiA0NiBjcHUgdGltZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGNjICAgICAgICAgICAgICA6ICAxOyAvKiA0NyBjbG9jayBjb21wYXJhdG9yIHZhbGlkaXR5ICovCi0JX191MzIJdG9fYmVfZGVmaW5lZF85IDogMTY7IC8qIDQ3LTYzICovCi19OwotCi0vKgotICogQ2hhbm5lbCBSZXBvcnQgV29yZAotICovCi1zdHJ1Y3QgY3J3IHsKLQlfX3UzMiByZXMxICAgIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLwotCV9fdTMyIHNsY3QgICAgOiAgMTsgICAvKiBzb2xpY2l0ZWQgKi8KLQlfX3UzMiBvZmx3ICAgIDogIDE7ICAgLyogb3ZlcmZsb3cgKi8KLQlfX3UzMiBjaG4gICAgIDogIDE7ICAgLyogY2hhaW5lZCAqLwotCV9fdTMyIHJzYyAgICAgOiAgNDsgICAvKiByZXBvcnRpbmcgc291cmNlIGNvZGUgKi8KLQlfX3UzMiBhbmMgICAgIDogIDE7ICAgLyogYW5jaWxsYXJ5IHJlcG9ydCAqLwotCV9fdTMyIHJlczIgICAgOiAgMTsgICAvKiByZXNlcnZlZCB6ZXJvICovCi0JX191MzIgZXJjICAgICA6ICA2OyAgIC8qIGVycm9yLXJlY292ZXJ5IGNvZGUgKi8KLQlfX3UzMiByc2lkICAgIDogMTY7ICAgLyogcmVwb3J0aW5nLXNvdXJjZSBJRCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXR5cGVkZWYgdm9pZCAoKmNyd19oYW5kbGVyX3QpKHN0cnVjdCBjcncgKiwgc3RydWN0IGNydyAqLCBpbnQpOwotCi1leHRlcm4gaW50IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKTsKLWV4dGVybiB2b2lkIHMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihpbnQgcnNjKTsKLQotI2RlZmluZSBOUl9SU0NTIDE2Ci0KLSNkZWZpbmUgQ1JXX1JTQ19NT05JVE9SICAweDIgIC8qIG1vbml0b3JpbmcgZmFjaWxpdHkgKi8KLSNkZWZpbmUgQ1JXX1JTQ19TQ0ggICAgICAweDMgIC8qIHN1YmNoYW5uZWwgKi8KLSNkZWZpbmUgQ1JXX1JTQ19DUEFUSCAgICAweDQgIC8qIGNoYW5uZWwgcGF0aCAqLwotI2RlZmluZSBDUldfUlNDX0NPTkZJRyAgIDB4OSAgLyogY29uZmlndXJhdGlvbi1hbGVydCBmYWNpbGl0eSAqLwotI2RlZmluZSBDUldfUlNDX0NTUyAgICAgIDB4QiAgLyogY2hhbm5lbCBzdWJzeXN0ZW0gKi8KLQotI2RlZmluZSBDUldfRVJDX0VWRU5UICAgIDB4MDAgLyogZXZlbnQgaW5mb3JtYXRpb24gcGVuZGluZyAqLwotI2RlZmluZSBDUldfRVJDX0FWQUlMICAgIDB4MDEgLyogYXZhaWxhYmxlICovCi0jZGVmaW5lIENSV19FUkNfSU5JVCAgICAgMHgwMiAvKiBpbml0aWFsaXplZCAqLwotI2RlZmluZSBDUldfRVJDX1RFUlJPUiAgIDB4MDMgLyogdGVtcG9yYXJ5IGVycm9yICovCi0jZGVmaW5lIENSV19FUkNfSVBBUk0gICAgMHgwNCAvKiBpbnN0YWxsZWQgcGFybSBpbml0aWFsaXplZCAqLwotI2RlZmluZSBDUldfRVJDX1RFUk0gICAgIDB4MDUgLyogdGVybWluYWwgKi8KLSNkZWZpbmUgQ1JXX0VSQ19QRVJSTiAgICAweDA2IC8qIHBlcm0uIGVycm9yLCBmYWMuIG5vdCBpbml0ICovCi0jZGVmaW5lIENSV19FUkNfUEVSUkkgICAgMHgwNyAvKiBwZXJtLiBlcnJvciwgZmFjaWxpdHkgaW5pdCAqLwotI2RlZmluZSBDUldfRVJDX1BNT0QgICAgIDB4MDggLyogaW5zdGFsbGVkIHBhcmFtZXRlcnMgbW9kaWZpZWQgKi8KLQotc3RhdGljIGlubGluZSBpbnQgc3Rjcncoc3RydWN0IGNydyAqcGNydyApCi17Ci0JaW50IGNjb2RlOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJzdGNydyAwKCUyKVxuXHQiCi0JCSJpcG0gJTBcblx0IgotCQkic3JsICUwLDI4XG5cdCIKLQkJOiAiPWQiIChjY29kZSksICI9bSIgKCpwY3J3KQotCQk6ICJhIiAocGNydykKLQkJOiAiY2MiICk7Ci0JcmV0dXJuIGNjb2RlOwotfQotCi0jZGVmaW5lIEVEX0VUUl9TWU5DCTEyCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3luYyBjaGVjayAqLwotI2RlZmluZSBFRF9FVFJfU1dJVENICTEzCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3dpdGNoIHRvIGxvY2FsICovCi0KLSNkZWZpbmUgRURfU1RQX1NZTkMJNwkvKiBFeHRlcm5hbCBkYW1hZ2UgU1RQIHN5bmMgY2hlY2sgKi8KLSNkZWZpbmUgRURfU1RQX0lTTEFORAk2CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgaXNsYW5kIGNoZWNrICovCi0KLXN0cnVjdCBwdF9yZWdzOwotCi12b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCk7Ci12b2lkIHMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZW5kaWYgLyogX19zMzkwbWFjaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2E0MDAwdC5jIGIvZHJpdmVycy9zY3NpL2E0MDAwdC5jCmluZGV4IGQ0YmRhMjAuLjYxYWYzZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hNDAwMHQuYworKysgYi9kcml2ZXJzL3Njc2kvYTQwMDB0LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2RlZmluZSBBNDAwMFRfU0NTSV9BRERSIDB4ZGQwMDQwCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGE0MDAwdF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhNDAwMHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YTsKQEAgLTYxLDcgKzYxLDggQEAKIAlob3N0ZGF0YS0+ZGNudGxfZXh0cmEgPSBFQV83MTA7CiAKIAkvKiBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmE0MDAwdF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsIGRldik7CisJaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZhNDAwMHRfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLAorCQkJICAgICAgJmRldi0+ZGV2KTsKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhNDAwMHQtc2NzaTogTm8gaG9zdCBkZXRlY3RlZDsgIgogCQkJCSJib2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0/XG4iKTsKQEAgLTc4LDcgKzc5LDcgQEAKIAkJZ290byBvdXRfcHV0X2hvc3Q7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXJldHVybiAwOwpAQCAtOTMsOSArOTQsOSBAQAogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgX19kZXZleGl0IGludCBhNDAwMHRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgX19kZXZleGl0IGludCBhNDAwMHRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKQEAgLTEwOCwyNSArMTA5LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhNDAwMHRfc2NzaV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiYTQwMDB0LXNjc2kiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gYTQwMDB0X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChhNDAwMHRfZGV2aWNlX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhNDAwMHRfc2NzaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gImE0MDAwdC1zY3NpIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBhNDAwMHRfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AoYTQwMDB0X2RldmljZV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYTQwMDB0X3Njc2lfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAlhNDAwMHRfc2NzaV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJhNDAwMHQtc2NzaSIsCiAJCQktMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihhNDAwMHRfc2NzaV9kZXZpY2UpKSB7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CiAJCXJldHVybiBQVFJfRVJSKGE0MDAwdF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xMzYsNyArMTM5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhNDAwMHRfc2NzaV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYTQwMDB0X3Njc2lfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYTQwMDB0X3Njc2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwppbmRleCA5M2I2MWYxLi4wNDcxZjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKQEAgLTg0NCw3ICs4NDQsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IE5DUjUzODBfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgaW50IGZsYWdzKQorc3RhdGljIGludCBfX2luaXQgTkNSNTM4MF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlLCBpbnQgZmxhZ3MpCiB7CiAJaW50IGk7CiAJU0VUVVBfSE9TVERBVEEoaW5zdGFuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKaW5kZXggMjFmZTA3Zi4uYWQ3YTIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCkBAIC01ODksNyArNTg5LDcgQEAKICNlbmRpZgogCiAKLWludCBhdGFyaV9zY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0KQoraW50IF9faW5pdCBhdGFyaV9zY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0KQogewogCXN0YXRpYyBpbnQgY2FsbGVkID0gMDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jCmluZGV4IGQ4NThmM2QuLjU3OTljYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYwpAQCAtMzQsNyArMzQsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJ2bWU2MDAwX3Njc2lfZGV2aWNlOwogCiBzdGF0aWMgX19kZXZpbml0IGludAotYnZtZTYwMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorYnZtZTYwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YTsKQEAgLTU4LDcgKzU4LDggQEAKIAlob3N0ZGF0YS0+Y3Rlc3Q3X2V4dHJhID0gQ1RFU1Q3X1RUMTsKIAogCS8qIGFuZCByZWdpc3RlciB0aGUgY2hpcCAqLwotCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmYnZtZTYwMDBfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLCBkZXYpOworCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmYnZtZTYwMDBfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLAorCQkJICAgICAgJmRldi0+ZGV2KTsKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidm1lNjAwMC1zY3NpOiBObyBob3N0IGRldGVjdGVkOyAiCiAJCQkJImJvYXJkIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT9cbiIpOwpAQCAtNzMsNyArNzQsNyBAQAogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJcmV0dXJuIDA7CkBAIC04Nyw5ICs4OCw5IEBACiB9CiAKIHN0YXRpYyBfX2RldmV4aXQgaW50Ci1idm1lNjAwMF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2J2bWU2MDAwX2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihob3N0KTsKIAogCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7CkBAIC0xMDAsMjUgKzEwMSwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYnZtZTYwMDBfc2NzaV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiYnZtZTYwMDAtc2NzaSIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBidm1lNjAwMF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AoYnZtZTYwMDBfZGV2aWNlX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBidm1lNjAwMF9zY3NpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYnZtZTYwMDAtc2NzaSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBidm1lNjAwMF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGJ2bWU2MDAwX2RldmljZV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYnZtZTYwMDBfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAlidm1lNjAwMF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImJ2bWU2MDAwLXNjc2kiLAogCQkJCQkJCSAgICAgICAtMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihidm1lNjAwMF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIoYnZtZTYwMDBfc2NzaV9kZXZpY2UpOwogCX0KIApAQCAtMTI4LDcgKzEzMSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgYnZtZTYwMDBfc2NzaV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYnZtZTYwMDBfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYnZtZTYwMDBfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYwppbmRleCBiMjY0YjQ5Li5iNWZiZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXZtZTE2eF9zY3NpX2RldmljZTsKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQKLW12bWUxNnhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXZtZTE2eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqIGhvc3QgPSBOVUxMOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGE7CkBAIC02NCw3ICs2NCw4IEBACiAJaG9zdGRhdGEtPmN0ZXN0N19leHRyYSA9IENURVNUN19UVDE7CiAKIAkvKiBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJm12bWUxNnhfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLCBkZXYpOworCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmbXZtZTE2eF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgIm12bWUxNngtc2NzaTogTm8gaG9zdCBkZXRlY3RlZDsgIgogCQkJCSJib2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0/XG4iKTsKQEAgLTg4LDcgKzg5LDcgQEAKIAkJb3V0X2JlMzIoMHhmZmY0MjAyYywgdik7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXJldHVybiAwOwpAQCAtMTAyLDkgKzEwMyw5IEBACiB9CiAKIHN0YXRpYyBfX2RldmV4aXQgaW50Ci1tdm1lMTZ4X2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorbXZtZTE2eF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAkvKiBEaXNhYmxlIHNjc2kgY2hpcCBpbnRzICovCkBAIC0xMjMsMjUgKzEyNCwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXZtZTE2eF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJtdm1lMTZ4LXNjc2kiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gbXZtZTE2eF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AobXZtZTE2eF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12bWUxNnhfc2NzaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIm12bWUxNngtc2NzaSIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgICAgICAgID0gbXZtZTE2eF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChtdm1lMTZ4X2RldmljZV9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXZtZTE2eF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAltdm1lMTZ4X3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibXZtZTE2eC1zY3NpIiwKIAkJCQkJCQkgICAgICAtMSwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihtdm1lMTZ4X3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIobXZtZTE2eF9zY3NpX2RldmljZSk7CiAJfQogCkBAIC0xNTEsNyArMTU0LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtdm1lMTZ4X3Njc2lfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG12bWUxNnhfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG12bWUxNnhfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggNWY3NzQxNy4uM2VlNGViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTUzMywxMiArNTMzLDggQEAKIAlldmVudC0+ZXZlbnRfY29kZSA9IGV2ZW50X2NvZGU7CiAJZXZlbnQtPmV2ZW50X2RhdGEgPSBldmVudF9kYXRhOwogCi0JZXJyID0gbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyICYmIChlcnIgIT0gLUVTUkNIKSkJLyogZmlsdGVyIG5vIHJlY2lwaWVudCBlcnJvcnMgKi8KLQkJLyogbmxtc2dfbXVsdGljYXN0IGFscmVhZHkga2ZyZWVfc2tiJ2QgKi8KLQkJZ290byBzZW5kX2ZhaWw7Ci0KKwlubG1zZ19tdWx0aWNhc3Qoc2NzaV9ubF9zb2NrLCBza2IsIDAsIFNDU0lfTkxfR1JQX0ZDX0VWRU5UUywKKwkJCUdGUF9LRVJORUwpOwogCXJldHVybjsKIAogc2VuZF9mYWlsX3NrYjoKQEAgLTYwNywxMiArNjAzLDggQEAKIAlldmVudC0+ZXZlbnRfY29kZSA9IEZDSF9FVlRfVkVORE9SX1VOSVFVRTsKIAltZW1jcHkoJmV2ZW50LT5ldmVudF9kYXRhLCBkYXRhX2J1ZiwgZGF0YV9sZW4pOwogCi0JZXJyID0gbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyICYmIChlcnIgIT0gLUVTUkNIKSkJLyogZmlsdGVyIG5vIHJlY2lwaWVudCBlcnJvcnMgKi8KLQkJLyogbmxtc2dfbXVsdGljYXN0IGFscmVhZHkga2ZyZWVfc2tiJ2QgKi8KLQkJZ290byBzZW5kX3ZlbmRvcl9mYWlsOwotCisJbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCisJCQlHRlBfS0VSTkVMKTsKIAlyZXR1cm47CiAKIHNlbmRfdmVuZG9yX2ZhaWxfc2tiOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwppbmRleCA3NWM5Mjk3Li4yYWRmYWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwpAQCAtOTY2LDE1ICs5NjYsNyBAQAogc3RhdGljIGludAogaXNjc2lfYnJvYWRjYXN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnApCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBuZXRsaW5rX2Jyb2FkY2FzdChubHMsIHNrYiwgMCwgMSwgZ2ZwKTsKLQlpZiAocmMgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXNjc2k6IGNhbiBub3QgYnJvYWRjYXN0IHNrYiAoJWQpXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmV0bGlua19icm9hZGNhc3QobmxzLCBza2IsIDAsIDEsIGdmcCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEyMDcsNyArMTE5OSw3IEBACiAJICogdGhlIHVzZXIgYW5kIHdoZW4gdGhlIGRhZW1vbiBpcyByZXN0YXJ0ZWQgaXQgd2lsbCBoYW5kbGUgaXQKIAkgKi8KIAlyYyA9IGlzY3NpX2Jyb2FkY2FzdF9za2Ioc2tiLCBHRlBfS0VSTkVMKTsKLQlpZiAocmMgPCAwKQorCWlmIChyYyA9PSAtRVNSQ0gpCiAJCWlzY3NpX2Nsc19zZXNzaW9uX3ByaW50ayhLRVJOX0VSUiwgc2Vzc2lvbiwKIAkJCQkJICJDYW5ub3Qgbm90aWZ5IHVzZXJzcGFjZSBvZiBzZXNzaW9uICIKIAkJCQkJICJldmVudCAldS4gQ2hlY2sgaXNjc2kgZGFlbW9uXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA1MTY5MjVkLi5iNGVmMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTE1NCw3ICsxMTU0LDYgQEAKIHN0YXRpYyBpbnQKIHNnX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgbW9kZSkKIHsKLQlpbnQgcmV0dmFsOwogCVNnX2RldmljZSAqc2RwOwogCVNnX2ZkICpzZnA7CiAKQEAgLTExNjMsOCArMTE2Miw3IEBACiAJU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX2Zhc3luYzogJXMsIG1vZGU9JWRcbiIsCiAJCQkJICAgc2RwLT5kaXNrLT5kaXNrX25hbWUsIG1vZGUpKTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG1vZGUsICZzZnAtPmFzeW5jX3FwKTsKLQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgbW9kZSwgJnNmcC0+YXN5bmNfcXApOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDU1N2I1NGEuLmRiZjUzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAl9IHdoaWxlICghKHN0YXR1cyAmIFNDeFNSX1REeEUocG9ydCkpKTsKIAogCXNjaV9pbihwb3J0LCBTQ3hTUik7ICAgICAgICAgICAgLyogRHVtbXkgcmVhZCAqLwotCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkpOworCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkgJiB+U0N4U1JfVEVORChwb3J0KSk7CiAJc2NpX291dChwb3J0LCBTQ3hURFIsIGMpOwogfQogI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgfHwgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwpAQCAtMjYzLDYgKzI2Myw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7CkBAIC0yODQsNyArMjg1LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiBzdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmKTsKQEAgLTEwOTUsNiArMTA5Nyw3IEBACiAJCQkJIHVuc2lnbmVkIGNvdW50KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2VyaWFsX2NvbnNvbGVfcG9ydC0+cG9ydDsKKwl1bnNpZ25lZCBzaG9ydCBiaXRzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTExMDMsNiArMTEwNiwxMSBAQAogCiAJCXNjaV9wb2xsX3B1dF9jaGFyKHBvcnQsICpzKyspOwogCX0KKworCS8qIHdhaXQgdW50aWwgZmlmbyBpcyBlbXB0eSBhbmQgbGFzdCBiaXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgKi8KKwliaXRzID0gU0N4U1JfVER4RShwb3J0KSB8IFNDeFNSX1RFTkQocG9ydCk7CisJd2hpbGUgKChzY2lfaW4ocG9ydCwgU0N4U1IpICYgYml0cykgIT0gYml0cykKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNlcmlhbF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggMDIyZTg5Zi4uZDBhYTgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQogI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgpAQCAtMTI2LDcgKzEyNiw4IEBACiAjIGRlZmluZSBTQ1NQVFIxCTB4ZmZlMTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDSUZfT1JFUgkweDAwMDEJCS8qIE92ZXJydW4gZXJyb3IgYml0ICovCiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpCTB4M2EJLyogVElFPTAsUklFPTAsVEU9MSxSRT0xLFJFSUU9MSAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjIGRlZmluZSBTQ1NQVFIwCTB4ZmZlYTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjEJMHhmZmViMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NTUFRSMgkweGZmZWMwMDI0CS8qIDE2IGJpdCBTQ0lGICovCkBAIC0xODIsNiArMTgzLDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSAgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKICNkZWZpbmUgU0NJX0NUUkxfRkxBR1NfUkVJRSAweDA4IC8qIDc3NTAgU0NJRiAqLwogI2Vsc2UKQEAgLTQxMyw3ICs0MTUsOCBAQAogU0NJRl9GTlMoU0NGQ1IsICAgICAgICAgICAgICAgICAgICAgIDB4MGMsICA4LCAweDE4LCAxNikKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogU0NJRl9GTlMoU0NGRFIsCQkJICAgICAweDBlLCAxNiwgMHgxQywgMTYpCiBTQ0lGX0ZOUyhTQ1RGRFIsCQkgICAgIDB4MGUsIDE2LCAweDFDLCAxNikKIFNDSUZfRk5TKFNDUkZEUiwJCSAgICAgMHgwZSwgMTYsIDB4MjAsIDE2KQpAQCAtNjQ0LDcgKzY0Nyw4IEBACiAJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWEwMDAwKQpAQCAtNzQ2LDcgKzc1MCw4IEBACiAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKGNsaysxNipicHMpLygxNipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggNDVhMjk5Zi4uZTA5ZDNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0xNDM4LDEyICsxNDM4LDEyIEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEtleWJvYXJkIGF0IE1NSU8gMHglbGx4IChpcnEgPSAlZCkgIgogCQkgICAgICAgImlzIGEgJXNcbiIsCi0JCSAgICAgICBvcC0+ZGV2LmJ1c19pZCwKKwkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzBdLnBvcnQubWFwYmFzZSwKIAkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFswXS5wb3J0KSk7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb3VzZSBhdCBNTUlPIDB4JWxseCAoaXJxID0gJWQpICIKIAkJICAgICAgICJpcyBhICVzXG4iLAotCQkgICAgICAgb3AtPmRldi5idXNfaWQsCisJCSAgICAgICBkZXZfbmFtZSgmb3AtPmRldiksCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB1cFsxXS5wb3J0Lm1hcGJhc2UsCiAJCSAgICAgICBvcC0+aXJxc1swXSwgc3Vuemlsb2dfdHlwZSgmdXBbMV0ucG9ydCkpOwogCQlrYm1faW5zdCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCA1OGQyNGM1Li4yMjY5ZmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtNTY4LDYgKzU2OCwxMCBAQAogCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQogCQlwcmltYXJ5ID0gMTsKIAorCWlmICghZGF0YVswXSAmJiAhZGF0YVsxXSkKKwkJcHJfd2FybmluZygiaW50YzogbWlzc2luZyB1bmlxdWUgaXJxIG1hc2sgZm9yICIKKwkJCSAgICJpcnEgJWQgKHZlY3QgMHglMDR4KVxuIiwgaXJxLCBpcnEyZXZ0KGlycSkpOworCiAJZGF0YVswXSA9IGRhdGFbMF0gPyBkYXRhWzBdIDogaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAJZGF0YVsxXSA9IGRhdGFbMV0gPyBkYXRhWzFdIDogaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAKQEAgLTY0MSw2ICs2NDUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKmludGNfZXZ0MmlycV90YWJsZTsKKwordW5zaWduZWQgaW50IGludGNfZXZ0MmlycSh1bnNpZ25lZCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCBpcnEgPSBldnQyaXJxKHZlY3Rvcik7CisKKwlpZiAoaW50Y19ldnQyaXJxX3RhYmxlICYmIGludGNfZXZ0MmlycV90YWJsZVtpcnFdKQorCQlpcnEgPSBpbnRjX2V2dDJpcnFfdGFibGVbaXJxXTsKKworCXJldHVybiBpcnE7Cit9CiAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQogewpAQCAtNzA1LDggKzcyMCw0MCBAQAogCiAJQlVHX09OKGsgPiAyNTYpOyAvKiBfSU5UQ19BRERSX0UoKSBhbmQgX0lOVENfQUREUl9EKCkgYXJlIDggYml0cyAqLwogCisJLyoga2VlcCB0aGUgZmlyc3QgdmVjdG9yIG9ubHkgaWYgc2FtZSBlbnVtIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CiAJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKwkJaW50IGZpcnN0X2lycSA9IGV2dDJpcnEodmVjdC0+dmVjdCk7CisKKwkJaWYgKCF2ZWN0LT5lbnVtX2lkKQorCQkJY29udGludWU7CisKKwkJZm9yIChrID0gaSArIDE7IGsgPCBkZXNjLT5ucl92ZWN0b3JzOyBrKyspIHsKKwkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gZGVzYy0+dmVjdG9ycyArIGs7CisKKwkJCWlmICh2ZWN0LT5lbnVtX2lkICE9IHZlY3QyLT5lbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQl2ZWN0Mi0+ZW51bV9pZCA9IDA7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKQorCQkJCWludGNfZXZ0MmlycV90YWJsZSA9IGFsbG9jX2Jvb3RtZW0oTlJfSVJRUyk7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKSB7CisJCQkJcHJfd2FybmluZygiaW50YzogY2Fubm90IGFsbG9jYXRlIGV2dDJpcnEhXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaW50Y19ldnQyaXJxX3RhYmxlW2V2dDJpcnEodmVjdDItPnZlY3QpXSA9IGZpcnN0X2lycTsKKwkJfQorCX0KKworCS8qIHJlZ2lzdGVyIHRoZSB2ZWN0b3JzIG9uZSBieSBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKworCQlpZiAoIXZlY3QtPmVudW1faWQpCisJCQljb250aW51ZTsKIAogCQlpbnRjX3JlZ2lzdGVyX2lycShkZXNjLCBkLCB2ZWN0LT5lbnVtX2lkLCBldnQyaXJxKHZlY3QtPnZlY3QpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMgYi9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKaW5kZXggNjNmMGRlMi4uY2FiMWFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCisrKyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKICAqIENvcmUgbWFwbGUgYnVzIGZ1bmN0aW9uYWxpdHkKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFkcmlhbiBNY01lbmFtaW4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IEFkcmlhbiBNY01lbmFtaW4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA4IFBhdWwgTXVuZHQKLSAqCi0gKiBCYXNlZCBvbiAyLjQgY29kZSBieToKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgWUFFR0FTSEkgVGFrZXNoaQorICogIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDEgWUFFR0FTSEkgVGFrZXNoaQogICogIENvcHlyaWdodCAoQykgMjAwMSBNLiBSLiBCcm93bgotICogIENvcHlyaWdodCAoQykgMjAwMSBQYXVsIE11bmR0Ci0gKgotICogYW5kIG90aGVycy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMzIsNyArMjYsNyBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNhc2ljLmg+CiAKLU1PRFVMRV9BVVRIT1IoIllhZWdhc2hpIFRha2VzaGksIFBhdWwgTXVuZHQsIE0uIFIuIEJyb3duLCBBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIDxhZHJpYW5AbWNtZW4uZGVtb24uY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hcGxlIGJ1cyBkcml2ZXIgZm9yIERyZWFtY2FzdCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7U0VHQSwgRHJlYW1jYXN0L01hcGxlfX0iKTsKQEAgLTQ5LDcgKzQzLDcgQEAKIC8qIG11dGV4IHRvIHByb3RlY3QgcXVldWUgb2Ygd2FpdGluZyBwYWNrZXRzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKG1hcGxlX3dsaXN0X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiBzdGF0aWMgc3RydWN0IGRldmljZSBtYXBsZV9idXM7CiBzdGF0aWMgaW50IHN1YmRldmljZV9tYXBbTUFQTEVfUE9SVFNdOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKm1hcGxlX3NlbmRidWYsICptYXBsZV9zZW5kcHRyLCAqbWFwbGVfbGFzdHB0cjsKQEAgLTYyLDggKzU2LDkgQEAKIAlpbnQgdW5pdDsKIH07CiAKLXN0YXRpYyBib29sIGNoZWNrZWRbNF07Ci1zdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzWzRdOworc3RhdGljIGJvb2wgY2hlY2tlZFtNQVBMRV9QT1JUU107CitzdGF0aWMgYm9vbCBlbXB0eVtNQVBMRV9QT1JUU107CitzdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzW01BUExFX1BPUlRTXTsKIAogLyoqCiAgKiBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIgLSByZWdpc3RlciBhIG1hcGxlIGRyaXZlcgpAQCAtOTcsMTIgKzkyLDIwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9kcml2ZXJfdW5yZWdpc3Rlcik7CiAKIC8qIHNldCBoYXJkd2FyZSByZWdpc3RlcnMgdG8gZW5hYmxlIG5leHQgcm91bmQgb2YgZG1hICovCi1zdGF0aWMgdm9pZCBtYXBsZWJ1c19kbWFfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG1hcGxlX2RtYV9yZXNldCh2b2lkKQogewogCWN0cmxfb3V0bChNQVBMRV9NQUdJQywgTUFQTEVfUkVTRVQpOwogCS8qIHNldCB0cmlnIHR5cGUgdG8gMCBmb3Igc29mdHdhcmUgdHJpZ2dlciwgMSBmb3IgaGFyZHdhcmUgKFZCTEFOSykgKi8KIAljdHJsX291dGwoMSwgTUFQTEVfVFJJR1RZUEUpOwotCWN0cmxfb3V0bChNQVBMRV8yTUJQUyB8IE1BUExFX1RJTUVPVVQoNTAwMDApLCBNQVBMRV9TUEVFRCk7CisJLyoKKwkqIE1hcGxlIHN5c3RlbSByZWdpc3RlcgorCSogYml0cyAzMSAtIDE2CXRpbWVvdXQgaW4gdW5pdHMgb2YgMjBuc2VjCisJKiBiaXQgMTIJaGFyZCB0cmlnZ2VyIC0gc2V0IDAgdG8ga2VlcCByZXNwb25kaW5nIHRvIFZCTEFOSworCSogYml0cyA5IC0gOAlzZXQgMDAgZm9yIDIgTWJwcywgMDEgZm9yIDEgTWJwcworCSogYml0cyAzIC0gMAlkZWxheSAoaW4gMS4zbXMpIGJldHdlZW4gVkJMQU5LIGFuZCBzdGFydCBvZiBETUEKKwkqIG1heCBkZWxheSBpcyAxMQorCSovCisJY3RybF9vdXRsKE1BUExFXzJNQlBTIHwgTUFQTEVfVElNRU9VVCgweEZGRkYpLCBNQVBMRV9TUEVFRCk7CiAJY3RybF9vdXRsKFBIWVNBRERSKG1hcGxlX3NlbmRidWYpLCBNQVBMRV9ETUFBRERSKTsKIAljdHJsX291dGwoMSwgTUFQTEVfRU5BQkxFKTsKIH0KQEAgLTEzNCwyMSArMTM3LDE2IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKLQlpZiAoIWRldikKLQkJcmV0dXJuOworCiAJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOwogCW1xID0gbWRldi0+bXE7Ci0JaWYgKG1xKSB7Ci0JCWlmIChtcS0+cmVjdmJ1ZmRjc3ApCi0JCQlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmZGNzcCk7Ci0JCWtmcmVlKG1xKTsKLQkJbXEgPSBOVUxMOwotCX0KKwlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmKTsKKwlrZnJlZShtcSk7CiAJa2ZyZWUobWRldik7CiB9CiAKIC8qKgotICogbWFwbGVfYWRkX3BhY2tldCAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKKyAqIG1hcGxlX2FkZF9wYWNrZXQgLSBhZGQgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIG1hcGxlIGJ1cyBxdWV1ZQogICogQG1kZXY6IG1hcGxlIGRldmljZQogICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBvbiBkZXZpY2UgYmVpbmcgcXVlcmllZAogICogQGNvbW1hbmQ6IG1hcGxlIGNvbW1hbmQgdG8gYWRkCkBAIC0xNTgsMjMgKzE1NiwxMiBAQAogaW50IG1hcGxlX2FkZF9wYWNrZXQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLCB1MzIgY29tbWFuZCwKIAlzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCWludCBsb2NraW5nLCByZXQgPSAwOworCWludCByZXQgPSAwOwogCXZvaWQgKnNlbmRidWYgPSBOVUxMOwogCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JLyogYm91bmNlIGlmIGRldmljZSBhbHJlYWR5IGxvY2tlZCAqLwotCWxvY2tpbmcgPSBtdXRleF9pc19sb2NrZWQoJm1kZXYtPm1xLT5tdXRleCk7Ci0JaWYgKGxvY2tpbmcpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltdXRleF9sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCiAJaWYgKGxlbmd0aCkgewotCQlzZW5kYnVmID0ga21hbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKKwkJc2VuZGJ1ZiA9IGt6YWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xODcsODQgKzE3NCwzNiBAQAogCQltZW1jcHkoc2VuZGJ1ZiArIDQsIGRhdGEsIChsZW5ndGggLSAxKSAqIDQpOwogCW1kZXYtPm1xLT5zZW5kYnVmID0gc2VuZGJ1ZjsKIAotCWxpc3RfYWRkKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKLW91dDoKKwltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKIAltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOworb3V0OgogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9hZGRfcGFja2V0KTsKIAotLyoqCi0gKiBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKLSAqIEBtZGV2OiBtYXBsZSBkZXZpY2UKLSAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gZGV2aWNlIGJlaW5nIHF1ZXJpZWQKLSAqIEBjb21tYW5kOiBtYXBsZSBjb21tYW5kIHRvIGFkZAotICogQGxlbmd0aDogbGVuZ3RoIG9mIGNvbW1hbmQgc3RyaW5nIChpbiAzMiBiaXQgd29yZHMpCi0gKiBAZGF0YTogcmVtYWluZGVyIG9mIGNvbW1hbmQgc3RyaW5nCi0gKgotICogU2FtZSBhcyBtYXBsZV9hZGRfcGFja2V0KCksIGJ1dCB3YWl0cyBmb3IgdGhlIGxvY2sgdG8gYmVjb21lIGZyZWUuCi0gKi8KLWludCBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCi0JdTMyIGNvbW1hbmQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxvY2tpbmcsIHJldCA9IDA7Ci0Jdm9pZCAqc2VuZGJ1ZiA9IE5VTEw7Ci0KLQlsb2NraW5nID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZtZGV2LT5tcS0+bXV0ZXgpOwotCWlmIChsb2NraW5nKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChsZW5ndGgpIHsKLQkJc2VuZGJ1ZiA9IGttYWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCSgoX19iZTMyICopc2VuZGJ1ZilbMF0gPSBjcHVfdG9fYmUzMihmdW5jdGlvbik7Ci0JfQotCi0JbWRldi0+bXEtPmNvbW1hbmQgPSBjb21tYW5kOwotCW1kZXYtPm1xLT5sZW5ndGggPSBsZW5ndGg7Ci0JaWYgKGxlbmd0aCA+IDEpCi0JCW1lbWNweShzZW5kYnVmICsgNCwgZGF0YSwgKGxlbmd0aCAtIDEpICogNCk7Ci0JbWRldi0+bXEtPnNlbmRidWYgPSBzZW5kYnVmOwotCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKTsKLQogc3RhdGljIHN0cnVjdCBtYXBsZXEgKm1hcGxlX2FsbG9jcShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewogCXN0cnVjdCBtYXBsZXEgKm1xOwogCi0JbXEgPSBrbWFsbG9jKHNpemVvZigqbXEpLCBHRlBfS0VSTkVMKTsKKwltcSA9IGt6YWxsb2Moc2l6ZW9mKCptcSksIEdGUF9LRVJORUwpOwogCWlmICghbXEpCiAJCWdvdG8gZmFpbGVkX25vbWVtOwogCisJSU5JVF9MSVNUX0hFQUQoJm1xLT5saXN0KTsKIAltcS0+ZGV2ID0gbWRldjsKLQltcS0+cmVjdmJ1ZmRjc3AgPSBrbWVtX2NhY2hlX3phbGxvYyhtYXBsZV9xdWV1ZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JbXEtPnJlY3ZidWYgPSAodm9pZCAqKSBQMlNFR0FERFIobXEtPnJlY3ZidWZkY3NwKTsKKwltcS0+cmVjdmJ1ZiA9IGttZW1fY2FjaGVfemFsbG9jKG1hcGxlX3F1ZXVlX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1xLT5yZWN2YnVmKQogCQlnb3RvIGZhaWxlZF9wMjsKLQkvKgotCSAqIG1vc3QgZGV2aWNlcyBkbyBub3QgbmVlZCB0aGUgbXV0ZXggLSBidXQKLQkgKiBhbnl0aGluZyB0aGF0IGluamVjdHMgYmxvY2sgcmVhZHMgb3Igd3JpdGVzCi0JICogd2lsbCByZWx5IG9uIGl0Ci0JICovCi0JbXV0ZXhfaW5pdCgmbXEtPm11dGV4KTsKKwltcS0+cmVjdmJ1Zi0+YnVmID0gJigobXEtPnJlY3ZidWYtPmJ1ZngpWzBdKTsKIAogCXJldHVybiBtcTsKIAogZmFpbGVkX3AyOgogCWtmcmVlKG1xKTsKIGZhaWxlZF9ub21lbToKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgKCVkLCAlZClcbiIsCisJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzIsMTIgKzIxMSwxNiBAQAogewogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CiAKKwkvKiB6ZXJvIHRoaXMgb3V0IHRvIGF2b2lkIGtvYmogc3Vic3lzdGVtCisJKiB0aGlua2luZyBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgKi8KKwogCW1kZXYgPSBremFsbG9jKHNpemVvZigqbWRldiksIEdGUF9LRVJORUwpOwogCWlmICghbWRldikKIAkJcmV0dXJuIE5VTEw7CiAKIAltZGV2LT5wb3J0ID0gcG9ydDsKIAltZGV2LT51bml0ID0gdW5pdDsKKwogCW1kZXYtPm1xID0gbWFwbGVfYWxsb2NxKG1kZXYpOwogCiAJaWYgKCFtZGV2LT5tcSkgewpAQCAtMjg2LDE5ICsyMjksMTQgQEAKIAl9CiAJbWRldi0+ZGV2LmJ1cyA9ICZtYXBsZV9idXNfdHlwZTsKIAltZGV2LT5kZXYucGFyZW50ID0gJm1hcGxlX2J1czsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZGV2LT5tYXBsZV93YWl0KTsKIAlyZXR1cm4gbWRldjsKIH0KIAogc3RhdGljIHZvaWQgbWFwbGVfZnJlZV9kZXYoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKIHsKLQlpZiAoIW1kZXYpCi0JCXJldHVybjsKLQlpZiAobWRldi0+bXEpIHsKLQkJaWYgKG1kZXYtPm1xLT5yZWN2YnVmZGNzcCkKLQkJCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwKLQkJCQltZGV2LT5tcS0+cmVjdmJ1ZmRjc3ApOwotCQlrZnJlZShtZGV2LT5tcSk7Ci0JfQorCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbWRldi0+bXEtPnJlY3ZidWYpOworCWtmcmVlKG1kZXYtPm1xKTsKIAlrZnJlZShtZGV2KTsKIH0KIApAQCAtMzIwLDcgKzI1OCw3IEBACiAJbWFwbGVfbGFzdHB0ciA9IG1hcGxlX3NlbmRwdHI7CiAKIAkqbWFwbGVfc2VuZHB0cisrID0gKHBvcnQgPDwgMTYpIHwgbGVuIHwgMHg4MDAwMDAwMDsKLQkqbWFwbGVfc2VuZHB0cisrID0gUEhZU0FERFIobXEtPnJlY3ZidWYpOworCSptYXBsZV9zZW5kcHRyKysgPSBQSFlTQUREUihtcS0+cmVjdmJ1Zi0+YnVmKTsKIAkqbWFwbGVfc2VuZHB0cisrID0KIAkgICAgbXEtPmNvbW1hbmQgfCAodG8gPDwgOCkgfCAoZnJvbSA8PCAxNikgfCAobGVuIDw8IDI0KTsKIAl3aGlsZSAobGVuLS0gPiAwKQpAQCAtMzMzLDIwICsyNzEsMjggQEAKIAlpbnQgaSwgbWFwbGVfcGFja2V0cyA9IDA7CiAJc3RydWN0IG1hcGxlcSAqbXEsICpubXE7CiAKKwlpZiAoIW1hcGxlX2RtYV9kb25lKCkpCisJCXJldHVybjsKKworCS8qIGRpc2FibGUgRE1BICovCisJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CisKIAlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKLQkJcmV0dXJuOworCQlnb3RvIGZpbmlzaDsKKwogCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZtYXBsZV93YWl0cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpIHsKKwlpZiAobGlzdF9lbXB0eSgmbWFwbGVfd2FpdHEpKSB7CiAJCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JCXJldHVybjsKKwkJZ290byBmaW5pc2g7CiAJfQotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CisKIAltYXBsZV9sYXN0cHRyID0gbWFwbGVfc2VuZGJ1ZjsKIAltYXBsZV9zZW5kcHRyID0gbWFwbGVfc2VuZGJ1ZjsKLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfd2FpdHEsIGxpc3QpIHsKIAkJbWFwbGVfYnVpbGRfYmxvY2sobXEpOwotCQlsaXN0X21vdmUoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOworCQlsaXN0X2RlbF9pbml0KCZtcS0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOwogCQlpZiAobWFwbGVfcGFja2V0cysrID4gTUFQTEVfTUFYUEFDS0VUUykKIAkJCWJyZWFrOwogCX0KQEAgLTM1NiwxMCArMzAyLDEzIEBACiAJCQlkbWFfY2FjaGVfc3luYygwLCBtYXBsZV9zZW5kYnVmICsgaSAqIFBBR0VfU0laRSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CiAJfQorCitmaW5pc2g6CisJbWFwbGVfZG1hX3Jlc2V0KCk7CiB9CiAKIC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgZHJpdmVyIHJlZ2lzdGVyZWQgbGlrZWx5IHRvIG1hdGNoIHRoaXMgZGV2aWNlICovCi1zdGF0aWMgaW50IGNoZWNrX21hdGNoaW5nX21hcGxlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBtYXBsZV9jaGVja19tYXRjaGluZ19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKIAkJCQkJdm9pZCAqZGV2cHRyKQogewogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1hcGxlX2RydjsKQEAgLTM3NCwxMCArMzIzLDcgQEAKIAogc3RhdGljIHZvaWQgbWFwbGVfZGV0YWNoX2RyaXZlcihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmICghbWRldikKLQkJcmV0dXJuOwogCWRldmljZV91bnJlZ2lzdGVyKCZtZGV2LT5kZXYpOwotCW1kZXYgPSBOVUxMOwogfQogCiAvKiBwcm9jZXNzIGluaXRpYWwgTUFQTEVfQ09NTUFORF9ERVZJTkZPIGZvciBlYWNoIGRldmljZSBvciBwb3J0ICovCkBAIC0zODUsOSArMzMxLDkgQEAKIHsKIAljaGFyICpwLCAqcmVjdmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZ1bmN0aW9uOwotCWludCBtYXRjaGVkLCByZXR2YWw7CisJaW50IG1hdGNoZWQsIGVycm9yOwogCi0JcmVjdmJ1ZiA9IG1kZXYtPm1xLT5yZWN2YnVmOworCXJlY3ZidWYgPSBtZGV2LT5tcS0+cmVjdmJ1Zi0+YnVmOwogCS8qIGNvcHkgdGhlIGRhdGEgYXMgaW5kaXZpZHVhbCBlbGVtZW50cyBpbgogCSogY2FzZSBvZiBtZW1vcnkgb3B0aW1pc2F0aW9uICovCiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uLCByZWN2YnVmICsgNCwgNCk7CkBAIC0zOTUsNyArMzQxLDYgQEAKIAltZW1jcHkoJm1kZXYtPmRldmluZm8uYXJlYV9jb2RlLCByZWN2YnVmICsgMjAsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5jb25uZWN0b3JfZGlyZWN0aW9uLCByZWN2YnVmICsgMjEsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X25hbWVbMF0sIHJlY3ZidWYgKyAyMiwgMzApOwotCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X2xpY2VuY2VbMF0sIHJlY3ZidWYgKyA1MiwgNjApOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5zdGFuZGJ5X3Bvd2VyLCByZWN2YnVmICsgMTEyLCAyKTsKIAltZW1jcHkoJm1kZXYtPmRldmluZm8ubWF4X3Bvd2VyLCByZWN2YnVmICsgMTE0LCAyKTsKIAltZW1jcHkobWRldi0+cHJvZHVjdF9uYW1lLCBtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbmFtZSwgMzApOwpAQCAtNDE0LDQzICszNTksMzkgQEAKIAkJZWxzZQogCQkJYnJlYWs7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBkZXZpY2UgZGV0ZWN0ZWQ6ICVzXG4iLAotCQltZGV2LT5wcm9kdWN0X25hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZTogJXNcbiIsIG1kZXYtPnByb2R1Y3RfbGljZW5jZSk7Ci0KIAlmdW5jdGlvbiA9IGJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pOwogCisJZGV2X2luZm8oJm1kZXYtPmRldiwgImRldGVjdGVkICVzOiBmdW5jdGlvbiAweCVsWDogYXQgKCVkLCAlZClcbiIsCisJCW1kZXYtPnByb2R1Y3RfbmFtZSwgZnVuY3Rpb24sIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCiAJaWYgKGZ1bmN0aW9uID4gMHgyMDApIHsKIAkJLyogRG8gdGhpcyBzaWxlbnRseSAtIGFzIG5vdCBhIHJlYWwgZGV2aWNlICovCiAJCWZ1bmN0aW9uID0gMDsKLQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX2R1bW15X2RyaXZlcjsKLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CisJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIk1hcGxlIGJ1cyBhdCAoJWQsICVkKTogRnVuY3Rpb24gMHglbFhcbiIsCi0JCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBmdW5jdGlvbik7Ci0KIAkJbWF0Y2hlZCA9CiAJCQlidXNfZm9yX2VhY2hfZHJ2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgbWRldiwKLQkJCQljaGVja19tYXRjaGluZ19tYXBsZV9kcml2ZXIpOworCQkJCW1hcGxlX2NoZWNrX21hdGNoaW5nX2RyaXZlcik7CiAKIAkJaWYgKG1hdGNoZWQgPT0gMCkgewogCQkJLyogRHJpdmVyIGRvZXMgbm90IGV4aXN0IHlldCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJObyBtYXBsZSBkcml2ZXIgZm91bmQuXG4iKTsKLQkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV9kdW1teV9kcml2ZXI7CisJCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAibm8gZHJpdmVyIGZvdW5kXG4iKTsKKwkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiAJCX0KLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCi0JCQltZGV2LT51bml0LCBmdW5jdGlvbik7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCisJCQkgICAgIG1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKIAl9CisKIAltZGV2LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCW1kZXYtPmRldi5yZWxlYXNlID0gJm1hcGxlX3JlbGVhc2VfZGV2aWNlOwotCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJIk1hcGxlIGJ1czogQXR0ZW1wdCB0byByZWdpc3RlciBkZXZpY2UiCi0JCSIgKCV4LCAleCkgZmFpbGVkLlxuIiwKLQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisKKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwllcnJvciA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X3dhcm4oJm1kZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBkZXZpY2UgYXQiCisJCQkiICglZCwgJWQpLCB3aXRoIGVycm9yIDB4JVhcbiIsIG1kZXYtPnVuaXQsCisJCQltZGV2LT5wb3J0LCBlcnJvcik7CiAJCW1hcGxlX2ZyZWVfZGV2KG1kZXYpOwogCQltZGV2ID0gTlVMTDsKIAkJcmV0dXJuOwpAQCAtNDYyLDcgKzQwMyw3IEBACiAgKiBwb3J0IGFuZCB1bml0IHRoZW4gcmV0dXJuIDEgLSBhbGxvd3MgaWRlbnRpZmljYXRpb24KICAqIG9mIHdoaWNoIGRldmljZXMgbmVlZCB0byBiZSBhdHRhY2hlZCBvciBkZXRhY2hlZAogICovCi1zdGF0aWMgaW50IGRldGFjaF9tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQorc3RhdGljIGludCBjaGVja19tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQogewogCXN0cnVjdCBtYXBsZV9kZXZpY2Vfc3BlY2lmeSAqZHM7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKQEAgLTQ3NywyMSArNDE4LDI1IEBACiBzdGF0aWMgaW50IHNldHVwX21hcGxlX2NvbW1hbmRzKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqaWdub3JlZCkKIHsKIAlpbnQgYWRkOwotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlX2RldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOwotCi0JaWYgKChtYXBsZV9kZXYtPmludGVydmFsID4gMCkKLQkgICAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9kZXYtPndoZW4pKSB7Ci0JCS8qIGJvdW5jZSBpZiB3ZSBjYW5ub3QgbG9jayAqLwotCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1hcGxlX2RldiwKLQkJCWJlMzJfdG9fY3B1KG1hcGxlX2Rldi0+ZGV2aW5mby5mdW5jdGlvbiksCisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOworCWlmIChtZGV2LT5pbnRlcnZhbCA+IDAgJiYgYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAgJiYKKwkJdGltZV9hZnRlcihqaWZmaWVzLCBtZGV2LT53aGVuKSkgeworCQkvKiBib3VuY2UgaWYgd2UgY2Fubm90IGFkZCAqLworCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsCisJCQliZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKSwKIAkJCU1BUExFX0NPTU1BTkRfR0VUQ09ORCwgMSwgTlVMTCk7CiAJCWlmICghYWRkKQotCQkJbWFwbGVfZGV2LT53aGVuID0gamlmZmllcyArIG1hcGxlX2Rldi0+aW50ZXJ2YWw7CisJCQltZGV2LT53aGVuID0gamlmZmllcyArIG1kZXYtPmludGVydmFsOwogCX0gZWxzZSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKLQkJCS8qIFRoaXMgd2lsbCBhbHNvIGJvdW5jZSAqLwotCQkJbWFwbGVfYWRkX3BhY2tldChtYXBsZV9kZXYsIDAsCi0JCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCS8qIEVuc3VyZSB3ZSBkb24ndCBoYXZlIGJsb2NrIHJlYWRzIGFuZCBkZXZpbmZvCisJCQkqIGNhbGxzIGludGVyZmVyaW5nIHdpdGggb25lIGFub3RoZXIgLSBzbyBmbGFnIHRoZQorCQkJKiBkZXZpY2UgYXMgYnVzeSAqLworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwKSB7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLAorCQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OSwyOSArNDQ0LDUwIEBACiAvKiBWQkxBTksgYm90dG9tIGhhbGYgLSBpbXBsZW1lbnRlZCB2aWEgd29ya3F1ZXVlICovCiBzdGF0aWMgdm9pZCBtYXBsZV92YmxhbmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpCisJaW50IHgsIGxvY2tpbmc7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKworCWlmICghbWFwbGVfZG1hX2RvbmUoKSkKIAkJcmV0dXJuOwogCiAJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKKwkJZ290byBmaW5pc2g7CisKKwkvKgorCSogU2V0IHVwIGVzc2VudGlhbCBjb21tYW5kcyAtIHRvIGZldGNoIGRhdGEgYW5kCisJKiBjaGVjayBkZXZpY2VzIGFyZSBzdGlsbCBwcmVzZW50CisJKi8KIAlidXNfZm9yX2VhY2hfZGV2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgTlVMTCwKLQkJCSBzZXR1cF9tYXBsZV9jb21tYW5kcyk7CisJCXNldHVwX21hcGxlX2NvbW1hbmRzKTsKIAotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9wbnBfdGltZSkpIHsKKwkJLyoKKwkJKiBTY2FuIHRoZSBlbXB0eSBwb3J0cyAtIGJ1cyBpcyBmbGFrZXkgYW5kIG1heSBoYXZlCisJCSogbWlzLXJlcG9ydGVkIGVtcHR5bmVzcworCQkqLworCQlmb3IgKHggPSAwOyB4IDwgTUFQTEVfUE9SVFM7IHgrKykgeworCQkJaWYgKGNoZWNrZWRbeF0gJiYgZW1wdHlbeF0pIHsKKwkJCQltZGV2ID0gYmFzZXVuaXRzW3hdOworCQkJCWlmICghbWRldikKKwkJCQkJYnJlYWs7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbG9ja2luZyA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwKKwkJCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCQlpZiAoIWxvY2tpbmcpCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwogCQltYXBsZV9wbnBfdGltZSA9IGppZmZpZXMgKyBNQVBMRV9QTlBfSU5URVJWQUw7Ci0KLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3dhaXRxKSAmJiBsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkJbWFwbGVfc2VuZCgpOwotCX0gZWxzZSB7Ci0JCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CiAJfQogCi0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7CitmaW5pc2g6CisJbWFwbGVfc2VuZCgpOwogfQogCi0vKiBoYW5kbGUgZGV2aWNlcyBhZGRlZCB2aWEgaG90cGx1Z3MgLSBwbGFjaW5nIHRoZW0gb24gcXVldWUgZm9yIERFVklORk8qLworLyogaGFuZGxlIGRldmljZXMgYWRkZWQgdmlhIGhvdHBsdWdzIC0gcGxhY2luZyB0aGVtIG9uIHF1ZXVlIGZvciBERVZJTkZPICovCiBzdGF0aWMgdm9pZCBtYXBsZV9tYXBfc3VidW5pdHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgaW50IHN1Ym1hc2spCiB7CiAJaW50IHJldHZhbCwgaywgZGV2Y2hlY2s7CkBAIC01MzMsNyArNDk5LDcgQEAKIAkJZHMudW5pdCA9IGsgKyAxOwogCQlyZXR2YWwgPQogCQkgICAgYnVzX2Zvcl9lYWNoX2RldigmbWFwbGVfYnVzX3R5cGUsIE5VTEwsICZkcywKLQkJCQkgICAgIGRldGFjaF9tYXBsZV9kZXZpY2UpOworCQkJCSAgICAgY2hlY2tfbWFwbGVfZGV2aWNlKTsKIAkJaWYgKHJldHZhbCkgewogCQkJc3VibWFzayA9IHN1Ym1hc2sgPj4gMTsKIAkJCWNvbnRpbnVlOwpAQCAtNTQzLDYgKzUwOSw3IEBACiAJCQltZGV2X2FkZCA9IG1hcGxlX2FsbG9jX2RldihtZGV2LT5wb3J0LCBrICsgMSk7CiAJCQlpZiAoIW1kZXZfYWRkKQogCQkJCXJldHVybjsKKwkJCWF0b21pY19zZXQoJm1kZXZfYWRkLT5idXN5LCAxKTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldl9hZGQsIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywKIAkJCQkwLCBOVUxMKTsKIAkJCS8qIG1hcmsgdGhhdCB3ZSBhcmUgY2hlY2tpbmcgc3ViIGRldmljZXMgKi8KQEAgLTU2NCwyNyArNTMxLDQ1IEBACiB9CiAKIC8qIGhhbmRsZSBlbXB0eSBwb3J0IG9yIGhvdHBsdWcgcmVtb3ZhbCAqLwotc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LAotCQkJCXN0cnVjdCBtYXBsZXEgKm1xKQorc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmIChtZGV2LT51bml0ICE9IDApIHsKLQkJbGlzdF9kZWwoJm1xLT5saXN0KTsKLQkJbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzIGRldmljZSBkZXRhY2hpbmcgYXQgKCVkLCAlZClcbiIsCi0JCSAgICAgICBtZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7CisKKwlpZiAobGlrZWx5KG1kZXYtPnVuaXQgIT0gMCkpIHsKKwkJLyoKKwkJKiBCbG9jayBkZXZpY2VzIHBsYXkgdXAKKwkJKiBhbmQgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGV5IGhhdmUKKwkJKiBiZWVuIHJlbW92ZWQgZXZlbiB3aGVuIHN0aWxsIGluIHBsYWNlIG9yCisJCSogdHJpcCB0aGUgbXRkIGxheWVyIHdoZW4gdGhleSBoYXZlCisJCSogcmVhbGx5IGdvbmUgLSB0aGlzIGNvZGUgdHJhcHMgdGhhdCBldmVudHVhbGl0eQorCQkqIGFuZCBlbnN1cmVzIHdlIGFyZW4ndCBvdmVybG9hZGVkIHdpdGggdXNlbGVzcworCQkqIGVycm9yIG1lc3NhZ2VzCisJCSovCisJCWlmIChtZGV2LT5jYW5fdW5sb2FkKSB7CisJCQlpZiAoIW1kZXYtPmNhbl91bmxvYWQobWRldikpIHsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAyKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAiZGV0YWNoaW5nIGRldmljZSBhdCAoJWQsICVkKVxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCQltYXBsZV9kZXRhY2hfZHJpdmVyKG1kZXYpOwogCQlyZXR1cm47Ci0JfQotCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKLQkJaWYgKGNoZWNrZWRbbWRldi0+cG9ydF0gPT0gZmFsc2UpIHsKLQkJCWNoZWNrZWRbbWRldi0+cG9ydF0gPSB0cnVlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbWFwbGUgZGV2aWNlcyBhdHRhY2hlZCIKLQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCX0gZWxzZSB7CisJCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKKwkJCWlmIChjaGVja2VkW21kZXYtPnBvcnRdID09IGZhbHNlKSB7CisJCQkJY2hlY2tlZFttZGV2LT5wb3J0XSA9IHRydWU7CisJCQkJZW1wdHlbbWRldi0+cG9ydF0gPSB0cnVlOworCQkJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJubyBkZXZpY2VzIgorCQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCQkJfQorCQkJcmV0dXJuOwogCQl9Ci0JCXJldHVybjsKIAl9Ci0JbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOworCS8qIFNvbWUgaGFyZHdhcmUgZGV2aWNlcyBnZW5lcmF0ZSBmYWxzZSBkZXRhY2ggbWVzc2FnZXMgb24gdW5pdCAwICovCisJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiB9CiAKIC8qIHByZXByb2Nlc3MgaG90cGx1Z3Mgb3Igc2NhbnMgKi8KQEAgLTU5OSw4ICs1ODQsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChtZGV2LT51bml0ICE9IDApCiAJCQkJbWFwbGVfYXR0YWNoX2RyaXZlcihtZGV2KTsKKwkJCWlmIChtZGV2LT51bml0ID09IDApIHsKKwkJCQllbXB0eVttZGV2LT5wb3J0XSA9IGZhbHNlOworCQkJCW1hcGxlX2F0dGFjaF9kcml2ZXIobWRldik7CisJCQl9CiAJCX0KLQkJcmV0dXJuOwogCX0KIAlpZiAobWRldi0+dW5pdCA9PSAwKSB7CiAJCXN1Ym1hc2sgPSByZWN2YnVmWzJdICYgMHgxRjsKQEAgLTYxMSw2ICs1OTksMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1ZikKK3sKKwlpZiAobWRldi0+ZmlsZWVycl9oYW5kbGVyKSB7CisJCW1kZXYtPmZpbGVlcnJfaGFuZGxlcihtZGV2LCByZWN2YnVmKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiZGV2aWNlIGF0ICglZCwgJWQpIHJlcG9ydHMiCisJCQkiZmlsZSBlcnJvciAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LAorCQkJKChpbnQgKilyZWN2YnVmKVsxXSk7Cit9CisKIHN0YXRpYyB2b2lkIG1hcGxlX3BvcnRfcmVzY2FuKHZvaWQpCiB7CiAJaW50IGk7CkBAIC02MjEsMTIgKzYyMCw2IEBACiAJCWlmIChjaGVja2VkW2ldID09IGZhbHNlKSB7CiAJCQlmdWxsc2NhbiA9IDA7CiAJCQltZGV2ID0gYmFzZXVuaXRzW2ldOwotCQkJLyoKLQkJCSAqICB0ZXN0IGxvY2sgaW4gY2FzZSBzY2FuIGhhcyBmYWlsZWQKLQkJCSAqICBidXQgZGV2aWNlIGlzIHN0aWxsIGxvY2tlZAotCQkJICovCi0JCQlpZiAobXV0ZXhfaXNfbG9ja2VkKCZtZGV2LT5tcS0+bXV0ZXgpKQotCQkJCW11dGV4X3VubG9jaygmbWRldi0+bXEtPm11dGV4KTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwgTUFQTEVfQ09NTUFORF9ERVZJTkZPLAogCQkJCTAsIE5VTEwpOwogCQl9CkBAIC02MzcsNyArNjMwLDcgQEAKIHN0YXRpYyB2b2lkIG1hcGxlX2RtYV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbWFwbGVxICptcSwgKm5tcTsKLQlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAljaGFyICpyZWN2YnVmOwogCWVudW0gbWFwbGVfY29kZSBjb2RlOwogCkBAIC02NDYsNDMgKzYzOSw1NiBAQAogCWN0cmxfb3V0bCgwLCBNQVBMRV9FTkFCTEUpOwogCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfc2VudHEsIGxpc3QpIHsKLQkJCXJlY3ZidWYgPSBtcS0+cmVjdmJ1ZjsKKwkJCW1kZXYgPSBtcS0+ZGV2OworCQkJcmVjdmJ1ZiA9IG1xLT5yZWN2YnVmLT5idWY7CisJCQlkbWFfY2FjaGVfc3luYygmbWRldi0+ZGV2LCByZWN2YnVmLCAweDQwMCwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCQkJY29kZSA9IHJlY3ZidWZbMF07Ci0JCQlkZXYgPSBtcS0+ZGV2OwogCQkJa2ZyZWUobXEtPnNlbmRidWYpOwotCQkJbXV0ZXhfdW5sb2NrKCZtcS0+bXV0ZXgpOwogCQkJbGlzdF9kZWxfaW5pdCgmbXEtPmxpc3QpOwotCiAJCQlzd2l0Y2ggKGNvZGUpIHsKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfTk9ORToKLQkJCQltYXBsZV9yZXNwb25zZV9ub25lKGRldiwgbXEpOworCQkJCW1hcGxlX3Jlc3BvbnNlX25vbmUobWRldik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfREVWSU5GTzoKLQkJCQltYXBsZV9yZXNwb25zZV9kZXZpbmZvKGRldiwgcmVjdmJ1Zik7CisJCQkJbWFwbGVfcmVzcG9uc2VfZGV2aW5mbyhtZGV2LCByZWN2YnVmKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9EQVRBVFJGOgotCQkJCWlmIChkZXYtPmNhbGxiYWNrKQotCQkJCQlkZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlpZiAobWRldi0+Y2FsbGJhY2spCisJCQkJCW1kZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9GSUxFRVJSOgorCQkJCW1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIobWRldiwgcmVjdmJ1Zik7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUdBSU46CiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0JBRENNRDoKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQkFERlVOQzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgbm9uLWZhdGFsIGVycm9yIDB4JVhcbiIsCi0JCQkJICAgICAgIGNvZGUpOworCQkJCWRldl93YXJuKCZtZGV2LT5kZXYsICJub24tZmF0YWwgZXJyb3IiCisJCQkJCSIgMHglWCBhdCAoJWQsICVkKVxuIiwgY29kZSwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUxMSU5GTzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgLSBleHRlbmRlZCBkZXZpY2UgaW5mb3JtYXRpb24iCi0JCQkJCSIgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiZXh0ZW5kZWQiCisJCQkJIiBkZXZpY2UgaW5mb3JtYXRpb24gcmVxdWVzdCBmb3IgKCVkLCAlZCkiCisJCQkJIiBidXQgY2FsbCBpcyBub3Qgc3VwcG9ydGVkXG4iLCBtZGV2LT5wb3J0LAorCQkJCW1kZXYtPnVuaXQpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX09LOgorCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtNjk5LDIwICs3MDUsMTkgQEAKIAkJaWYgKCFmdWxsc2NhbikKIAkJCW1hcGxlX3BvcnRfcmVzY2FuKCk7CiAJCS8qIG1hcmsgdGhhdCB3ZSBoYXZlIGJlZW4gdGhyb3VnaCB0aGUgZmlyc3Qgc2NhbiAqLwotCQlpZiAoc3RhcnRlZCA9PSAwKQotCQkJc3RhcnRlZCA9IDE7CisJCXN0YXJ0ZWQgPSAxOwogCX0KLQltYXBsZWJ1c19kbWFfcmVzZXQoKTsKKwltYXBsZV9zZW5kKCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZWJ1c19kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZV9kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAkvKiBMb2FkIGV2ZXJ5dGhpbmcgaW50byB0aGUgYm90dG9tIGhhbGYgKi8KIAlzY2hlZHVsZV93b3JrKCZtYXBsZV9kbWFfcHJvY2Vzcyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVidXNfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc2NoZWR1bGVfd29yaygmbWFwbGVfdmJsYW5rX3Byb2Nlc3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTcyMCwxNCArNzI1LDE0IEBACiAKIHN0YXRpYyBpbnQgbWFwbGVfc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcih2b2lkKQogewotCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlYnVzX2RtYV9pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlX2RtYV9pbnRlcnJ1cHQsCisJCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UpOwogfQogCiBzdGF0aWMgaW50IG1hcGxlX3NldF92YmxhbmtfaW50ZXJydXB0X2hhbmRsZXIodm9pZCkKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfVlNZTkMsIG1hcGxlYnVzX3ZibGFua19pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIFZCTEFOSyIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9WU1lOQywgbWFwbGVfdmJsYW5rX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgVkJMQU5LIiwgJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFwbGVfZ2V0X2RtYV9idWZmZXIodm9pZCkKQEAgLTc0MCw3ICs3NDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1hdGNoX21hcGxlX2J1c19kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2cHRyLAorc3RhdGljIGludCBtYXBsZV9tYXRjaF9idXNfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnZwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RyaXZlciAqbWFwbGVfZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRydnB0cik7CkBAIC03NjUsMjIgKzc3MCwyNCBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UgPSB7CiAJLmRydiA9IHsKLQkJLm5hbWUgPSAibWFwbGVfZHVtbXlfZHJpdmVyIiwKKwkJLm5hbWUgPSAibWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlIiwKIAkJLmJ1cyA9ICZtYXBsZV9idXNfdHlwZSwKIAl9LAogfTsKLQorLyoqCisgKiBtYXBsZV9idXNfdHlwZSAtIGNvcmUgbWFwbGUgYnVzIHN0cnVjdHVyZQorICovCiBzdHJ1Y3QgYnVzX3R5cGUgbWFwbGVfYnVzX3R5cGUgPSB7CiAJLm5hbWUgPSAibWFwbGUiLAotCS5tYXRjaCA9IG1hdGNoX21hcGxlX2J1c19kcml2ZXIsCisJLm1hdGNoID0gbWFwbGVfbWF0Y2hfYnVzX2RyaXZlciwKIAkudWV2ZW50ID0gbWFwbGVfYnVzX3VldmVudCwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9idXNfdHlwZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIG1hcGxlX2J1cyA9IHsKLQkuYnVzX2lkID0gIm1hcGxlIiwKKwkuaW5pdF9uYW1lID0gIm1hcGxlIiwKIAkucmVsZWFzZSA9IG1hcGxlX2J1c19yZWxlYXNlLAogfTsKIApAQCAtNzg4LDcgKzc5NSw4IEBACiB7CiAJaW50IHJldHZhbCwgaTsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2W01BUExFX1BPUlRTXTsKLQljdHJsX291dGwoMCwgTUFQTEVfU1RBVEUpOworCisJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJm1hcGxlX2J1cyk7CiAJaWYgKHJldHZhbCkKQEAgLTc5OCwzNiArODA2LDMzIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBjbGVhbnVwX2RldmljZTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbWFwbGVfZHVtbXlfZHJpdmVyLmRydik7CisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UuZHJ2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfYnVzOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBtYXBsZSBidXMgZG1hICovCiAJcmV0dmFsID0gbWFwbGVfZ2V0X2RtYV9idWZmZXIoKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJNYXBsZSBidXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBNYXBsZSBETUEgYnVmZmVyc1xuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgYnVmZmVyc1xuIik7CiAJCWdvdG8gY2xlYW51cF9iYXNpYzsKIAl9CiAKIAkvKiBzZXQgdXAgRE1BIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0dmFsID0gbWFwbGVfc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIk1hcGxlIGJ1czogRmFpbGVkIHRvIGdyYWIgbWFwbGUgRE1BIElSUVxuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImJ1cyBmYWlsZWQgdG8gZ3JhYiBtYXBsZSAiCisJCQkiRE1BIElSUVxuIik7CiAJCWdvdG8gY2xlYW51cF9kbWE7CiAJfQogCiAJLyogc2V0IHVwIFZCTEFOSyBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXJldHZhbCA9IG1hcGxlX3NldF92YmxhbmtfaW50ZXJydXB0X2hhbmRsZXIoKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGJ1czogRmFpbGVkIHRvIGdyYWIgVkJMQU5LIElSUVxuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImJ1cyBmYWlsZWQgdG8gZ3JhYiBWQkxBTksgSVJRXG4iKTsKIAkJZ290byBjbGVhbnVwX2lycTsKIAl9CiAKLQltYXBsZV9xdWV1ZV9jYWNoZSA9Ci0JICAgIGttZW1fY2FjaGVfY3JlYXRlKCJtYXBsZV9xdWV1ZV9jYWNoZSIsIDB4NDAwLCAwLAotCQkJICAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwltYXBsZV9xdWV1ZV9jYWNoZSA9IEtNRU1fQ0FDSEUobWFwbGVfYnVmZmVyLCBTTEFCX0hXQ0FDSEVfQUxJR04pOwogCiAJaWYgKCFtYXBsZV9xdWV1ZV9jYWNoZSkKIAkJZ290byBjbGVhbnVwX2JvdGhpcnFzOwpAQCAtODM4LDIzICs4NDMsMjMgQEAKIAkvKiBzZXR1cCBtYXBsZSBwb3J0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVBMRV9QT1JUUzsgaSsrKSB7CiAJCWNoZWNrZWRbaV0gPSBmYWxzZTsKKwkJZW1wdHlbaV0gPSBmYWxzZTsKIAkJbWRldltpXSA9IG1hcGxlX2FsbG9jX2RldihpLCAwKTsKLQkJYmFzZXVuaXRzW2ldID0gbWRldltpXTsKIAkJaWYgKCFtZGV2W2ldKSB7CiAJCQl3aGlsZSAoaS0tID4gMCkKIAkJCQltYXBsZV9mcmVlX2RldihtZGV2W2ldKTsKIAkJCWdvdG8gY2xlYW51cF9jYWNoZTsKIAkJfQorCQliYXNldW5pdHNbaV0gPSBtZGV2W2ldOworCQlhdG9taWNfc2V0KCZtZGV2W2ldLT5idXN5LCAxKTsKIAkJbWFwbGVfYWRkX3BhY2tldChtZGV2W2ldLCAwLCBNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOwogCQlzdWJkZXZpY2VfbWFwW2ldID0gMDsKIAl9CiAKLQkvKiBzZXR1cCBtYXBsZWJ1cyBoYXJkd2FyZSAqLwotCW1hcGxlYnVzX2RtYV9yZXNldCgpOwotCS8qIGluaXRpYWwgZGV0ZWN0aW9uICovCisJbWFwbGVfcG5wX3RpbWUgPSBqaWZmaWVzICsgSFo7CisJLyogcHJlcGFyZSBpbml0aWFsIHF1ZXVlICovCiAJbWFwbGVfc2VuZCgpOwotCW1hcGxlX3BucF90aW1lID0gamlmZmllczsKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBidXMgY29yZSBub3cgcmVnaXN0ZXJlZC5cbiIpOworCWRldl9pbmZvKCZtYXBsZV9idXMsICJidXMgY29yZSBub3cgcmVnaXN0ZXJlZFxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODcxLDcgKzg3Niw3IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbWFwbGVfc2VuZGJ1ZiwgTUFQTEVfRE1BX1BBR0VTKTsKIAogY2xlYW51cF9iYXNpYzoKLQlkcml2ZXJfdW5yZWdpc3RlcigmbWFwbGVfZHVtbXlfZHJpdmVyLmRydik7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZS5kcnYpOwogCiBjbGVhbnVwX2J1czoKIAlidXNfdW5yZWdpc3RlcigmbWFwbGVfYnVzX3R5cGUpOwpAQCAtODgwLDcgKzg4NSw3IEBACiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1hcGxlX2J1cyk7CiAKIGNsZWFudXA6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCXByaW50ayhLRVJOX0VSUiAiTWFwbGUgYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCXJldHVybiByZXR2YWw7CiB9CiAvKiBQdXNoIGluaXQgdG8gbGF0ZXIgdG8gZW5zdXJlIGhhcmR3YXJlIGdldHMgZGV0ZWN0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMgYi9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jCmluZGV4IDRkMDI4MmIuLjJkOWU3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMKKysrIGIvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYwpAQCAtMjIsNyArMjIsNyBAQAogc3RhdGljIGludCBzdXBlcmh5d2F5X2RldmljZXM7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIHN1cGVyaHl3YXlfYnVzX2RldmljZSA9IHsKLQkuYnVzX2lkID0gInN1cGVyaHl3YXkiLAorCS5pbml0X25hbWUgPSAic3VwZXJoeXdheSIsCiB9OwogCiBzdGF0aWMgdm9pZCBzdXBlcmh5d2F5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTgzLDcgKzgzLDcgQEAKIAlkZXYtPmlkLmlkCQk9IGRldi0+dmNyLm1vZF9pZDsKIAogCXNwcmludGYoZGV2LT5uYW1lLCAiU3VwZXJIeXdheSBkZXZpY2UgJTA0eCIsIGRldi0+aWQuaWQpOwotCXNwcmludGYoZGV2LT5kZXYuYnVzX2lkLCAiJTAyeCIsIHN1cGVyaHl3YXlfZGV2aWNlcyk7CisJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiUwMngiLCBzdXBlcmh5d2F5X2RldmljZXMpOwogCiAJc3VwZXJoeXdheV9kZXZpY2VzKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKaW5kZXggNTZmZjNlNi4uMTJlNDQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXNwaSA9IG1zZy0+c3BpOwogCiAJZGV2X2RiZyhtYXN0ZXItPmRldi5wYXJlbnQsICJzdGFydCBtZXNzYWdlICVwIGZvciAlc1xuIiwKLQkJCW1zZywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJCW1zZywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAKIAkvKiBzZWxlY3QgY2hpcCBpZiBpdCdzIG5vdCBzdGlsbCBhY3RpdmUgKi8KIAlpZiAoYXMtPnN0YXkpIHsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCQlpZiAoIWFzZCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXJldCA9IGdwaW9fcmVxdWVzdChucGNzX3Bpbiwgc3BpLT5kZXYuYnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG5wY3NfcGluLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJaWYgKHJldCkgewogCQkJa2ZyZWUoYXNkKTsKIAkJCXJldHVybiByZXQ7CkBAIC02NjgsNyArNjY4LDcgQEAKIAlhcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCiAJZGV2X2RiZyhjb250cm9sbGVyLCAibmV3IG1lc3NhZ2UgJXAgc3VibWl0dGVkIGZvciAlc1xuIiwKLQkJCW1zZywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJCW1zZywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAKIAlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmbXNnLT50cmFuc2ZlcnMpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MDMsNyArODAzLDcgQEAKIAlhcy0+Y2xrID0gY2xrOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdG1lbF9zcGlfaW50ZXJydXB0LCAwLAotCQkJcGRldi0+ZGV2LmJ1c19pZCwgbWFzdGVyKTsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCBtYXN0ZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggM2I5NzgwMy4uNjhjNzdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtcHMtPnF1ZXVlKTsKIAogCW1wcy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCW1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKG1wcy0+d29ya3F1ZXVlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZyZWVfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggNDU0YTI3MS4uMWM2NWUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0xMDAzLDcgKzEwMDMsNyBAQAogCQlnb3RvIGVycjE7CiAJfQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSwKLQkJCXBkZXYtPmRldi5idXNfaWQpKSB7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIGVycjE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCmluZGV4IGJhYjZmZjAuLjYwYjUzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAjaWZkZWYJVkVSQk9TRQogCQkJcHJfZGVidWcoIiVzOiB3cml0ZS0lZCA9JTA0eFxuIiwKLQkJCQkJc3BpLT5kZXYuYnVzX2lkLCBiaXRzLCB2YWwpOworCQkJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLCBiaXRzLCB2YWwpOwogI2VuZGlmCiAJCQlpZiAod2FpdF91d2lyZV9jc3JfZmxhZyhDU1JCLCAwLCAwKSkKIAkJCQlnb3RvIGVpbzsKQEAgLTMwNSw3ICszMDUsNyBAQAogCQkJc3RhdHVzICs9IGJ5dGVzOwogI2lmZGVmCVZFUkJPU0UKIAkJCXByX2RlYnVnKCIlczogcmVhZC0lZCA9JTA0eFxuIiwKLQkJCQkJc3BpLT5kZXYuYnVzX2lkLCBiaXRzLCB2YWwpOworCQkJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLCBiaXRzLCB2YWwpOwogI2VuZGlmCiAKIAkJfQpAQCAtMzMxLDcgKzMzMSw3IEBACiAJdXdpcmUgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAogCWlmIChzcGktPmNoaXBfc2VsZWN0ID4gMykgewotCQlwcl9kZWJ1ZygiJXM6IGNzJWQ/XG4iLCBzcGktPmRldi5idXNfaWQsIHNwaS0+Y2hpcF9zZWxlY3QpOworCQlwcl9kZWJ1ZygiJXM6IGNzJWQ/XG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpLCBzcGktPmNoaXBfc2VsZWN0KTsKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwogCX0KQEAgLTM0Myw3ICszNDMsNyBAQAogCQliaXRzID0gODsKIAogCWlmIChiaXRzID4gMTYpIHsKLQkJcHJfZGVidWcoIiVzOiB3b3Jkc2l6ZSAlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCwgYml0cyk7CisJCXByX2RlYnVnKCIlczogd29yZHNpemUgJWQ/XG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpLCBiaXRzKTsKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwogCX0KQEAgLTM3OCw3ICszNzgsNyBAQAogCQloeiA9IHQtPnNwZWVkX2h6OwogCiAJaWYgKCFoeikgewotCQlwcl9kZWJ1ZygiJXM6IHplcm8gc3BlZWQ/XG4iLCBzcGktPmRldi5idXNfaWQpOworCQlwcl9kZWJ1ZygiJXM6IHplcm8gc3BlZWQ/XG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTQwNiw3ICs0MDYsNyBAQAogCX0KIAlpZiAoZGl2MV9pZHggPT0gNCkgewogCQlwcl9kZWJ1ZygiJXM6IGxvd2VzdCBjbG9jayAlbGQsIG5lZWQgJWRcbiIsCi0JCQlzcGktPmRldi5idXNfaWQsIHJhdGUgLyAxMCAvIDgsIGh6KTsKKwkJCWRldl9uYW1lKCZzcGktPmRldiksIHJhdGUgLyAxMCAvIDgsIGh6KTsKIAkJc3RhdHVzID0gLUVET007CiAJCWdvdG8gZG9uZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCmluZGV4IDAxNGJlY2IuLmM4YjBiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCkBAIC00OTYsNyArNDk2LDcgQEAKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEsCi0JCQkJcGRldi0+ZGV2LmJ1c19pZCkpIHsKKwkJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggZDBmYzRjYS4uZWMyNGYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMTMzMyw3ICsxMzMzLDcgQEAKIAogCUlOSVRfV09SSygmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOwogCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTQ2Miw3ICsxNDYyLDcgQEAKIAkJZHJ2X2RhdGEtPm1hc2tfc3IgPSBTU1NSX1RJTlQgfCBTU1NSX1JGUyB8IFNTU1JfVEZTIHwgU1NTUl9ST1I7CiAJfQogCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoc3NwLT5pcnEsIHNzcF9pbnQsIDAsIGRldi0+YnVzX2lkLCBkcnZfZGF0YSk7CisJc3RhdHVzID0gcmVxdWVzdF9pcnEoc3NwLT5pcnEsIHNzcF9pbnQsIDAsIGRldl9uYW1lKGRldiksIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IElSUSAlZFxuIiwgc3NwLT5pcnEpOwogCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwppbmRleCA3ZmVhM2NmLi4zNDEwYjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKQEAgLTExNjAsOCArMTE2MCw4IEBACiAKIAkvKiBpbml0IG1lc3NhZ2VzIHdvcmtxdWV1ZSAqLwogCUlOSVRfV09SSygmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOwotCWRydl9kYXRhLT53b3JrcXVldWUgPQotCSAgICBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2dwaW8uYyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKaW5kZXggZjVlZDk3Mi4uZDI4NjZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2dwaW8uYworKysgYi9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXNwaS0+Y29udHJvbGxlcl9zdGF0ZSkgewotCQlzdGF0dXMgPSBncGlvX3JlcXVlc3QoY3MsIHNwaS0+ZGV2LmJ1c19pZCk7CisJCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChjcywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR1cm4gc3RhdHVzOwogCQlzdGF0dXMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY3MsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCAyNjlhNTVlLi4wNDgwZDhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2lteC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpAQCAtMTM4MSw3ICsxMzgxLDcgQEAKIAogCUlOSVRfV09SSygmZHJ2X2RhdGEtPndvcmssIHB1bXBfbWVzc2FnZXMpOwogCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTUyNSw3ICsxNTI1LDggQEAKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBlcnJfbm9faXJxcmVzOwogCX0KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnEsIHNwaV9pbnQsIElSUUZfRElTQUJMRUQsIGRldi0+YnVzX2lkLCBkcnZfZGF0YSk7CisJc3RhdHVzID0gcmVxdWVzdF9pcnEoaXJxLCBzcGlfaW50LCBJUlFGX0RJU0FCTEVELAorCQkJICAgICBkZXZfbmFtZShkZXYpLCBkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBjYW5ub3QgZ2V0IElSUSAoJWQpXG4iLCBzdGF0dXMpOwogCQlnb3RvIGVycl9ub19pcnFyZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwppbmRleCBhYzBlM2U0Li40NGEyYjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKQEAgLTYzNyw3ICs2MzcsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtcGM4M3h4X3NwaS0+cXVldWUpOwogCiAJbXBjODN4eF9zcGktPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQltYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJCWRldl9uYW1lKG1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmIChtcGM4M3h4X3NwaS0+d29ya3F1ZXVlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZyZWVfaXJxOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICIlczogTVBDODN4eCBTUEkgQ29udHJvbGxlciBkcml2ZXIgYXQgMHglcCAoaXJxID0gJWQpXG4iLAotCSAgICAgICBkZXYtPmRldi5idXNfaWQsIG1wYzgzeHhfc3BpLT5iYXNlLCBtcGM4M3h4X3NwaS0+aXJxKTsKKwkgICAgICAgZGV2X25hbWUoJmRldi0+ZGV2KSwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOwogCiAJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKaW5kZXggMjI5NmYzNy4uMjljYmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCkBAIC00MDQsNyArNDA0LDggQEAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXQ7CiAKLQljLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShtYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJYy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKCFjLT53b3JrcXVldWUpCiAJCWdvdG8gZXhpdF9idXN5OwogCWMtPmxhc3RfY2hpcHNlbGVjdCA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvTWFrZWZpbGUgYi9kcml2ZXJzL3NzYi9NYWtlZmlsZQppbmRleCA2ZjI1NWU5Li5jZmJiNzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NzYi9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIAogIyBidWlsdC1pbiBkcml2ZXJzCiBzc2IteQkJCQkJKz0gZHJpdmVyX2NoaXBjb21tb24ubworc3NiLXkJCQkJCSs9IGRyaXZlcl9jaGlwY29tbW9uX3BtdS5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9NSVBTKQkJKz0gZHJpdmVyX21pcHNjb3JlLm8KIHNzYi0kKENPTkZJR19TU0JfRFJJVkVSX0VYVElGKQkJKz0gZHJpdmVyX2V4dGlmLm8KIHNzYi0kKENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUpCSs9IGRyaXZlcl9wY2ljb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2I0M19wY2lfYnJpZGdlLmMgYi9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jCmluZGV4IDJkMjdkNmQuLjI3YTY3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2I0M19wY2lfYnJpZGdlLmMKKysrIGIvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYwpAQCAtMjEsNiArMjEsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMDcpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxMSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzEyKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxOCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzE5KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjApIH0sCkBAIC0yOSw2ICszMCw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyNSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI4KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjkpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyYikgfSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGI0M19wY2lfYnJpZGdlX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYwppbmRleCA1NzFmNGZkLi45NjgxNTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKQEAgLTI2LDE5ICsyNiw2IEBACiB9OwogCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGNoaXBjb19yZWFkMzIoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKLQkJCQl1MTYgb2Zmc2V0KQotewotCXJldHVybiBzc2JfcmVhZDMyKGNjLT5kZXYsIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY29fd3JpdGUzMihzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAotCQkJCSAgdTE2IG9mZnNldCwKLQkJCQkgIHUzMiB2YWx1ZSkKLXsKLQlzc2Jfd3JpdGUzMihjYy0+ZGV2LCBvZmZzZXQsIHZhbHVlKTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgY2hpcGNvX3dyaXRlMzJfbWFza2VkKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUxNiBvZmZzZXQsCiAJCQkJCXUzMiBtYXNrLCB1MzIgdmFsdWUpCiB7CkBAIC0yNDYsNiArMjMzLDcgQEAKIHsKIAlpZiAoIWNjLT5kZXYpCiAJCXJldHVybjsgLyogV2UgZG9uJ3QgaGF2ZSBhIENoaXBDb21tb24gKi8KKwlzc2JfcG11X2luaXQoY2MpOwogCWNoaXBjb19wb3dlcmNvbnRyb2xfaW5pdChjYyk7CiAJc3NiX2NoaXBjb19zZXRfY2xvY2ttb2RlKGNjLCBTU0JfQ0xLTU9ERV9GQVNUKTsKIAljYWxjX2Zhc3RfcG93ZXJ1cF9kZWxheShjYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYWRkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYwpAQCAtMCwwICsxLDUwOCBAQAorLyoKKyAqIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorICogQnJvYWRjb20gQ2hpcENvbW1vbiBQb3dlciBNYW5hZ2VtZW50IFVuaXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDksIE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgKiBDb3B5cmlnaHQgMjAwNywgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX3JlZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInNzYl9wcml2YXRlLmgiCisKK3N0YXRpYyB1MzIgc3NiX2NoaXBjb19wbGxfcmVhZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MzIgb2Zmc2V0KQoreworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9BRERSLCBvZmZzZXQpOworCXJldHVybiBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9EQVRBKTsKK30KKworc3RhdGljIHZvaWQgc3NiX2NoaXBjb19wbGxfd3JpdGUoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKKwkJCQkgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9BRERSLCBvZmZzZXQpOworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9EQVRBLCB2YWx1ZSk7Cit9CisKK3N0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSB7CisJdTE2IGZyZXE7CS8qIENyeXN0YWwgZnJlcXVlbmN5IGluIGtIei4qLworCXU4IHhmOwkJLyogQ3J5c3RhbCBmcmVxdWVuY3kgdmFsdWUgZm9yIFBNVSBjb250cm9sICovCisJdTggd2JfaW50OworCXUzMiB3Yl9mcmFjOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSBwbXUwX3BsbHRhYltdID0geworCXsgLmZyZXEgPSAxMjAwMCwgLnhmID0gIDEsIC53Yl9pbnQgPSA3MywgLndiX2ZyYWMgPSAzNDk1MjUsIH0sCisJeyAuZnJlcSA9IDEzMDAwLCAueGYgPSAgMiwgLndiX2ludCA9IDY3LCAud2JfZnJhYyA9IDcyNTkzNywgfSwKKwl7IC5mcmVxID0gMTQ0MDAsIC54ZiA9ICAzLCAud2JfaW50ID0gNjEsIC53Yl9mcmFjID0gMTE2NTA4LCB9LAorCXsgLmZyZXEgPSAxNTM2MCwgLnhmID0gIDQsIC53Yl9pbnQgPSA1NywgLndiX2ZyYWMgPSAzMDU4MzQsIH0sCisJeyAuZnJlcSA9IDE2MjAwLCAueGYgPSAgNSwgLndiX2ludCA9IDU0LCAud2JfZnJhYyA9IDMzNjU3OSwgfSwKKwl7IC5mcmVxID0gMTY4MDAsIC54ZiA9ICA2LCAud2JfaW50ID0gNTIsIC53Yl9mcmFjID0gMzk5NDU3LCB9LAorCXsgLmZyZXEgPSAxOTIwMCwgLnhmID0gIDcsIC53Yl9pbnQgPSA0NSwgLndiX2ZyYWMgPSA4NzM4MTMsIH0sCisJeyAuZnJlcSA9IDE5ODAwLCAueGYgPSAgOCwgLndiX2ludCA9IDQ0LCAud2JfZnJhYyA9IDQ2NjAzMywgfSwKKwl7IC5mcmVxID0gMjAwMDAsIC54ZiA9ICA5LCAud2JfaW50ID0gNDQsIC53Yl9mcmFjID0gMCwgICAgICB9LAorCXsgLmZyZXEgPSAyNTAwMCwgLnhmID0gMTAsIC53Yl9pbnQgPSA3MCwgLndiX2ZyYWMgPSA0MTk0MzAsIH0sCisJeyAuZnJlcSA9IDI2MDAwLCAueGYgPSAxMSwgLndiX2ludCA9IDY3LCAud2JfZnJhYyA9IDcyNTkzNywgfSwKKwl7IC5mcmVxID0gMzAwMDAsIC54ZiA9IDEyLCAud2JfaW50ID0gNTgsIC53Yl9mcmFjID0gNjk5MDUwLCB9LAorCXsgLmZyZXEgPSAzODQwMCwgLnhmID0gMTMsIC53Yl9pbnQgPSA0NSwgLndiX2ZyYWMgPSA4NzM4MTMsIH0sCisJeyAuZnJlcSA9IDQwMDAwLCAueGYgPSAxNCwgLndiX2ludCA9IDQ1LCAud2JfZnJhYyA9IDAsICAgICAgfSwKK307CisjZGVmaW5lIFNTQl9QTVUwX0RFRkFVTFRfWFRBTEZSRVEJMjAwMDAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSAqIHBtdTBfcGxsdGFiX2ZpbmRfZW50cnkodTMyIGNyeXN0YWxmcmVxKQoreworCWNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSAqZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtdTBfcGxsdGFiKTsgaSsrKSB7CisJCWUgPSAmcG11MF9wbGx0YWJbaV07CisJCWlmIChlLT5mcmVxID09IGNyeXN0YWxmcmVxKQorCQkJcmV0dXJuIGU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFR1bmUgdGhlIFBMTCB0byB0aGUgY3J5c3RhbCBzcGVlZC4gY3J5c3RhbGZyZXEgaXMgaW4ga0h6LiAqLworc3RhdGljIHZvaWQgc3NiX3BtdTBfcGxsaW5pdF9yMChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJCXUzMiBjcnlzdGFsZnJlcSkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCWNvbnN0IHN0cnVjdCBwbXUwX3BsbHRhYl9lbnRyeSAqZSA9IE5VTEw7CisJdTMyIHBtdWN0bCwgdG1wLCBwbGxjdGw7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoKGJ1cy0+Y2hpcF9pZCA9PSAweDUzNTQpICYmICFjcnlzdGFsZnJlcSkgeworCQkvKiBUaGUgNTM1NCBjcnlzdGFsIGZyZXEgaXMgMjVNSHogKi8KKwkJY3J5c3RhbGZyZXEgPSAyNTAwMDsKKwl9CisJaWYgKGNyeXN0YWxmcmVxKQorCQllID0gcG11MF9wbGx0YWJfZmluZF9lbnRyeShjcnlzdGFsZnJlcSk7CisJaWYgKCFlKQorCQllID0gcG11MF9wbGx0YWJfZmluZF9lbnRyeShTU0JfUE1VMF9ERUZBVUxUX1hUQUxGUkVRKTsKKwlCVUdfT04oIWUpOworCWNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKwljYy0+cG11LmNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKworCS8qIENoZWNrIGlmIHRoZSBQTEwgYWxyZWFkeSBpcyBwcm9ncmFtbWVkIHRvIHRoaXMgZnJlcXVlbmN5LiAqLworCXBtdWN0bCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCk7CisJaWYgKCgocG11Y3RsICYgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRKSA+PiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQpID09IGUtPnhmKSB7CisJCS8qIFdlJ3JlIGFscmVhZHkgdGhlcmUuLi4gKi8KKwkJcmV0dXJuOworCX0KKworCXNzYl9wcmludGsoS0VSTl9JTkZPIFBGWCAiUHJvZ3JhbW1pbmcgUExMIHRvICV1LiUwM3UgTUh6XG4iLAorCQkgICAoY3J5c3RhbGZyZXEgLyAxMDAwKSwgKGNyeXN0YWxmcmVxICUgMTAwMCkpOworCisJLyogRmlyc3QgdHVybiB0aGUgUExMIG9mZi4gKi8KKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzI4OgorCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfUFUpKTsKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywKKwkJCSAgICAgIH4oMSA8PCBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVKSk7CisJCWJyZWFrOworCWNhc2UgMHg1MzU0OgorCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNTM1NF9CQl9QTExfUFUpKTsKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywKKwkJCSAgICAgIH4oMSA8PCBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX1BVKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNTQl9XQVJOX09OKDEpOworCX0KKwlmb3IgKGkgPSAxNTAwOyBpOyBpLS0pIHsKKwkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DTEtDVExTVCk7CisJCWlmICghKHRtcCAmIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwlpZiAodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpCisJCXNzYl9wcmludGsoS0VSTl9FTUVSRyBQRlggIkZhaWxlZCB0byB0dXJuIHRoZSBQTEwgb2ZmIVxuIik7CisKKwkvKiBTZXQgUERJViBpbiBQTEwgY29udHJvbCAwLiAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUwX1BMTENUTDApOworCWlmIChjcnlzdGFsZnJlcSA+PSBTU0JfUE1VMF9QTExDVEwwX1BESVZfRlJFUSkKKwkJcGxsY3RsIHw9IFNTQl9QTVUwX1BMTENUTDBfUERJVl9NU0s7CisJZWxzZQorCQlwbGxjdGwgJj0gflNTQl9QTVUwX1BMTENUTDBfUERJVl9NU0s7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUwX1BMTENUTDAsIHBsbGN0bCk7CisKKwkvKiBTZXQgV0lMRCBpbiBQTEwgY29udHJvbCAxLiAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUwX1BMTENUTDEpOworCXBsbGN0bCAmPSB+U1NCX1BNVTBfUExMQ1RMMV9TVE9QTU9EOworCXBsbGN0bCAmPSB+KFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLIHwgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0spOworCXBsbGN0bCB8PSAoKHUzMillLT53Yl9pbnQgPDwgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0tfU0hJRlQpICYgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0s7CisJcGxsY3RsIHw9ICgodTMyKWUtPndiX2ZyYWMgPDwgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0tfU0hJRlQpICYgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0s7CisJaWYgKGUtPndiX2ZyYWMgPT0gMCkKKwkJcGxsY3RsIHw9IFNTQl9QTVUwX1BMTENUTDFfU1RPUE1PRDsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTBfUExMQ1RMMSwgcGxsY3RsKTsKKworCS8qIFNldCBXSUxEIGluIFBMTCBjb250cm9sIDIuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTBfUExMQ1RMMik7CisJcGxsY3RsICY9IH5TU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJOworCXBsbGN0bCB8PSAoKCh1MzIpZS0+d2JfaW50ID4+IDQpIDw8IFNTQl9QTVUwX1BMTENUTDJfV0lMRF9JTVNLSElfU0hJRlQpICYgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISTsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTBfUExMQ1RMMiwgcGxsY3RsKTsKKworCS8qIFNldCB0aGUgY3J5c3RhbGZyZXF1ZW5jeSBhbmQgdGhlIGRpdmlzb3IuICovCisJcG11Y3RsID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMKTsKKwlwbXVjdGwgJj0gflNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWOworCXBtdWN0bCB8PSAoKChjcnlzdGFsZnJlcSArIDEyNykgLyAxMjggLSAxKSA8PCBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVl9TSElGVCkKKwkJCSYgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVY7CisJcG11Y3RsICY9IH5TU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVE7CisJcG11Y3RsIHw9ICgodTMyKWUtPnhmIDw8IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVCkgJiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVE7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwgcG11Y3RsKTsKK30KKworc3RydWN0IHBtdTFfcGxsdGFiX2VudHJ5IHsKKwl1MTYgZnJlcTsJLyogQ3J5c3RhbCBmcmVxdWVuY3kgaW4ga0h6LiovCisJdTggeGY7CQkvKiBDcnlzdGFsIGZyZXF1ZW5jeSB2YWx1ZSBmb3IgUE1VIGNvbnRyb2wgKi8KKwl1OCBuZGl2X2ludDsKKwl1MzIgbmRpdl9mcmFjOworCXU4IHAxZGl2OworCXU4IHAyZGl2OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSBwbXUxX3BsbHRhYltdID0geworCXsgLmZyZXEgPSAxMjAwMCwgLnhmID0gIDEsIC5wMWRpdiA9IDMsIC5wMmRpdiA9IDIyLCAubmRpdl9pbnQgPSAgMHg5LCAubmRpdl9mcmFjID0gMHhGRkZGRUYsIH0sCisJeyAuZnJlcSA9IDEzMDAwLCAueGYgPSAgMiwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDYsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAweDQ4MzQ4MywgfSwKKwl7IC5mcmVxID0gMTQ0MDAsIC54ZiA9ICAzLCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMCwgLm5kaXZfaW50ID0gIDB4YSwgLm5kaXZfZnJhYyA9IDB4MUM3MUM3LCB9LAorCXsgLmZyZXEgPSAxNTM2MCwgLnhmID0gIDQsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICA1LCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMHg3NTU1NTUsIH0sCisJeyAuZnJlcSA9IDE2MjAwLCAueGYgPSAgNSwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gMTAsIC5uZGl2X2ludCA9ICAweDUsIC5uZGl2X2ZyYWMgPSAweDZFOUUwNiwgfSwKKwl7IC5mcmVxID0gMTY4MDAsIC54ZiA9ICA2LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMCwgLm5kaXZfaW50ID0gIDB4NSwgLm5kaXZfZnJhYyA9IDB4M0NGM0NGLCB9LAorCXsgLmZyZXEgPSAxOTIwMCwgLnhmID0gIDcsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICA5LCAubmRpdl9pbnQgPSAgMHg1LCAubmRpdl9mcmFjID0gMHgxN0I0MjUsIH0sCisJeyAuZnJlcSA9IDE5ODAwLCAueGYgPSAgOCwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gMTEsIC5uZGl2X2ludCA9ICAweDQsIC5uZGl2X2ZyYWMgPSAweEE1N0VCLCAgfSwKKwl7IC5mcmVxID0gMjAwMDAsIC54ZiA9ICA5LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMSwgLm5kaXZfaW50ID0gIDB4NCwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorCXsgLmZyZXEgPSAyNDAwMCwgLnhmID0gMTAsIC5wMWRpdiA9IDMsIC5wMmRpdiA9IDExLCAubmRpdl9pbnQgPSAgMHhhLCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCisJeyAuZnJlcSA9IDI1MDAwLCAueGYgPSAxMSwgLnAxZGl2ID0gNSwgLnAyZGl2ID0gMTYsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKKwl7IC5mcmVxID0gMjYwMDAsIC54ZiA9IDEyLCAucDFkaXYgPSAxLCAucDJkaXYgPSAgMiwgLm5kaXZfaW50ID0gMHgxMCwgLm5kaXZfZnJhYyA9IDB4RUM0RUM0LCB9LAorCXsgLmZyZXEgPSAzMDAwMCwgLnhmID0gMTMsIC5wMWRpdiA9IDMsIC5wMmRpdiA9ICA4LCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCisJeyAuZnJlcSA9IDM4NDAwLCAueGYgPSAxNCwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDUsIC5uZGl2X2ludCA9ICAweDQsIC5uZGl2X2ZyYWMgPSAweDk1NTU1NSwgfSwKKwl7IC5mcmVxID0gNDAwMDAsIC54ZiA9IDE1LCAucDFkaXYgPSAxLCAucDJkaXYgPSAgMiwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorfTsKKworI2RlZmluZSBTU0JfUE1VMV9ERUZBVUxUX1hUQUxGUkVRCTE1MzYwCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgKiBwbXUxX3BsbHRhYl9maW5kX2VudHJ5KHUzMiBjcnlzdGFsZnJlcSkKK3sKKwljb25zdCBzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXUxX3BsbHRhYik7IGkrKykgeworCQllID0gJnBtdTFfcGxsdGFiW2ldOworCQlpZiAoZS0+ZnJlcSA9PSBjcnlzdGFsZnJlcSkKKwkJCXJldHVybiBlOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBUdW5lIHRoZSBQTEwgdG8gdGhlIGNyeXN0YWwgc3BlZWQuIGNyeXN0YWxmcmVxIGlzIGluIGtIei4gKi8KK3N0YXRpYyB2b2lkIHNzYl9wbXUxX3BsbGluaXRfcjAoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKKwkJCQl1MzIgY3J5c3RhbGZyZXEpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwljb25zdCBzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgKmUgPSBOVUxMOworCXUzMiBidWZmZXJfc3RyZW5ndGggPSAwOworCXUzMiB0bXAsIHBsbGN0bCwgcG11Y3RsOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGJ1cy0+Y2hpcF9pZCA9PSAweDQzMTIpIHsKKwkJLyogV2UgZG8gbm90IHRvdWNoIHRoZSBCQ000MzEyIFBMTCBhbmQgYXNzdW1lCisJCSAqIHRoZSBkZWZhdWx0IGNyeXN0YWwgc2V0dGluZ3Mgd29yayBvdXQtb2YtdGhlLWJveC4gKi8KKwkJY2MtPnBtdS5jcnlzdGFsZnJlcSA9IDIwMDAwOworCQlyZXR1cm47CisJfQorCisJaWYgKGNyeXN0YWxmcmVxKQorCQllID0gcG11MV9wbGx0YWJfZmluZF9lbnRyeShjcnlzdGFsZnJlcSk7CisJaWYgKCFlKQorCQllID0gcG11MV9wbGx0YWJfZmluZF9lbnRyeShTU0JfUE1VMV9ERUZBVUxUX1hUQUxGUkVRKTsKKwlCVUdfT04oIWUpOworCWNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKwljYy0+cG11LmNyeXN0YWxmcmVxID0gZS0+ZnJlcTsKKworCS8qIENoZWNrIGlmIHRoZSBQTEwgYWxyZWFkeSBpcyBwcm9ncmFtbWVkIHRvIHRoaXMgZnJlcXVlbmN5LiAqLworCXBtdWN0bCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCk7CisJaWYgKCgocG11Y3RsICYgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRKSA+PiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQpID09IGUtPnhmKSB7CisJCS8qIFdlJ3JlIGFscmVhZHkgdGhlcmUuLi4gKi8KKwkJcmV0dXJuOworCX0KKworCXNzYl9wcmludGsoS0VSTl9JTkZPIFBGWCAiUHJvZ3JhbW1pbmcgUExMIHRvICV1LiUwM3UgTUh6XG4iLAorCQkgICAoY3J5c3RhbGZyZXEgLyAxMDAwKSwgKGNyeXN0YWxmcmVxICUgMTAwMCkpOworCisJLyogRmlyc3QgdHVybiB0aGUgUExMIG9mZi4gKi8KKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzI1OgorCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLAorCQkJICAgICAgfigoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQkJQTExfUFdSU1dfUFUpIHwKKwkJCQkoMSA8PCBTU0JfUE1VUkVTXzQzMjVfSFRfQVZBSUwpKSk7CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01BWFJFU19NU0ssCisJCQkgICAgICB+KCgxIDw8IFNTQl9QTVVSRVNfNDMyNV9CQlBMTF9QV1JTV19QVSkgfAorCQkJCSgxIDw8IFNTQl9QTVVSRVNfNDMyNV9IVF9BVkFJTCkpKTsKKwkJLyogQWRqdXN0IHRoZSBCQlBMTCB0byAyIG9uIGFsbCBjaGFubmVscyBsYXRlci4gKi8KKwkJYnVmZmVyX3N0cmVuZ3RoID0gMHgyMjIyMjI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNTQl9XQVJOX09OKDEpOworCX0KKwlmb3IgKGkgPSAxNTAwOyBpOyBpLS0pIHsKKwkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DTEtDVExTVCk7CisJCWlmICghKHRtcCAmIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwlpZiAodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpCisJCXNzYl9wcmludGsoS0VSTl9FTUVSRyBQRlggIkZhaWxlZCB0byB0dXJuIHRoZSBQTEwgb2ZmIVxuIik7CisKKwkvKiBTZXQgcDFkaXYgYW5kIHAyZGl2LiAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUxX1BMTENUTDApOworCXBsbGN0bCAmPSB+KFNTQl9QTVUxX1BMTENUTDBfUDFESVYgfCBTU0JfUE1VMV9QTExDVEwwX1AyRElWKTsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+cDFkaXYgPDwgU1NCX1BNVTFfUExMQ1RMMF9QMURJVl9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwwX1AxRElWOworCXBsbGN0bCB8PSAoKHUzMillLT5wMmRpdiA8PCBTU0JfUE1VMV9QTExDVEwwX1AyRElWX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDBfUDJESVY7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDAsIHBsbGN0bCk7CisKKwkvKiBTZXQgbmRpdiBpbnQgYW5kIG5kaXYgbW9kZSAqLworCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUxX1BMTENUTDIpOworCXBsbGN0bCAmPSB+KFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVCB8IFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREUpOworCXBsbGN0bCB8PSAoKHUzMillLT5uZGl2X2ludCA8PCBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlRfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMMl9ORElWSU5UOworCXBsbGN0bCB8PSAoMSA8PCBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREU7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDIsIHBsbGN0bCk7CisKKwkvKiBTZXQgbmRpdiBmcmFjICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTFfUExMQ1RMMyk7CisJcGxsY3RsICY9IH5TU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDOworCXBsbGN0bCB8PSAoKHUzMillLT5uZGl2X2ZyYWMgPDwgU1NCX1BNVTFfUExMQ1RMM19ORElWRlJBQ19TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMV9QTExDVEwzLCBwbGxjdGwpOworCisJLyogQ2hhbmdlIHRoZSBkcml2ZSBzdHJlbmd0aCwgaWYgcmVxdWlyZWQuICovCisJaWYgKGJ1ZmZlcl9zdHJlbmd0aCkgeworCQlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMV9QTExDVEw1KTsKKwkJcGxsY3RsICY9IH5TU0JfUE1VMV9QTExDVEw1X0NMS0RSVjsKKwkJcGxsY3RsIHw9IChidWZmZXJfc3RyZW5ndGggPDwgU1NCX1BNVTFfUExMQ1RMNV9DTEtEUlZfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMNV9DTEtEUlY7CisJCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMV9QTExDVEw1LCBwbGxjdGwpOworCX0KKworCS8qIFR1bmUgdGhlIGNyeXN0YWxmcmVxIGFuZCB0aGUgZGl2aXNvci4gKi8KKwlwbXVjdGwgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwpOworCXBtdWN0bCAmPSB+KFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWIHwgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRKTsKKwlwbXVjdGwgfD0gKCgoKHUzMillLT5mcmVxICsgMTI3KSAvIDEyOCAtIDEpIDw8IFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWX1NISUZUKQorCQkJJiBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVjsKKwlwbXVjdGwgfD0gKCh1MzIpZS0+eGYgPDwgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUKSAmIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUTsKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMLCBwbXVjdGwpOworfQorCitzdGF0aWMgdm9pZCBzc2JfcG11X3BsbF9pbml0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbGZyZXEgPSAwOyAvKiBpbiBrSHouIDAgPSBrZWVwIGRlZmF1bHQgZnJlcS4gKi8KKworCWlmIChidXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfU1NCKSB7CisJCS8qIFRPRE86IFRoZSB1c2VyIG1heSBvdmVycmlkZSB0aGUgY3J5c3RhbCBmcmVxdWVuY3kuICovCisJfQorCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMxMjoKKwljYXNlIDB4NDMyNToKKwkJc3NiX3BtdTFfcGxsaW5pdF9yMChjYywgY3J5c3RhbGZyZXEpOworCQlicmVhazsKKwljYXNlIDB4NDMyODoKKwljYXNlIDB4NTM1NDoKKwkJc3NiX3BtdTBfcGxsaW5pdF9yMChjYywgY3J5c3RhbGZyZXEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgIkVSUk9SOiBQTEwgaW5pdCB1bmtub3duIGZvciBkZXZpY2UgJTA0WFxuIiwKKwkJCSAgIGJ1cy0+Y2hpcF9pZCk7CisJfQorfQorCitzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5IHsKKwl1OCByZXNvdXJjZTsJLyogVGhlIHJlc291cmNlIG51bWJlciAqLworCXUxNiB1cGRvd247CS8qIFRoZSB1cGRvd24gdmFsdWUgKi8KK307CisKK2VudW0gcG11X3Jlc19kZXBlbmRfdGFiX3Rhc2sgeworCVBNVV9SRVNfREVQX1NFVCA9IDEsCisJUE1VX1JFU19ERVBfQURELAorCVBNVV9SRVNfREVQX1JFTU9WRSwKK307CisKK3N0cnVjdCBwbXVfcmVzX2RlcGVuZF90YWJfZW50cnkgeworCXU4IHJlc291cmNlOwkvKiBUaGUgcmVzb3VyY2UgbnVtYmVyICovCisJdTggdGFzazsJLyogU0VUIHwgQUREIHwgUkVNT1ZFICovCisJdTMyIGRlcGVuZDsJLyogVGhlIGRlcGVuZCBtYXNrICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9yZXNfdXBkb3duX3RhYl9lbnRyeSBwbXVfcmVzX3VwZG93bl90YWJfNDMyOGEwW10gPSB7CisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTSwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNLAkJLnVwZG93biA9IDB4MUYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9CVVJTVCwJLnVwZG93biA9IDB4MDEwRiwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9FWFRfU1dJVENIRVJfQlVSU1QsCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfSUxQX1JFUVVFU1QsCQkudXBkb3duID0gMHgwMjAyLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX1BXTSwJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SQURJT19TV0lUQ0hFUl9CVVJTVCwJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9ST01fU1dJVENILAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9QQV9SRUZfTERPLAkJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SQURJT19MRE8sCQkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0FGRV9MRE8sCQkJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9QTExfTERPLAkJCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkdfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfVFhfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUlhfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfWFRBTF9QVSwJCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1hUQUxfRU4sCQkJLnVwZG93biA9IDB4QTAwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUkZfUExMX0ZJTFRCWVAsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX1BMTF9QVSwJCS51cGRvd24gPSAweDA3MDEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9yZXNfZGVwZW5kX3RhYl9lbnRyeSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyOGEwW10gPSB7CisJeworCQkvKiBBZGp1c3QgSUxQIFJlcXVlc3QgdG8gYXZvaWQgZm9yY2luZyBFWFQvQkIgaW50byBidXJzdCBtb2RlLiAqLworCQkucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfSUxQX1JFUVVFU1QsCisJCS50YXNrID0gUE1VX1JFU19ERVBfU0VULAorCQkuZGVwZW5kID0gKCgxIDw8IFNTQl9QTVVSRVNfNDMyOF9FWFRfU1dJVENIRVJfUFdNKSB8CisJCQkgICAoMSA8PCBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNKSksCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5IHBtdV9yZXNfdXBkb3duX3RhYl80MzI1YTBbXSA9IHsKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyNV9YVEFMX1BVLAkJCS51cGRvd24gPSAweDE1MDEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9yZXNfZGVwZW5kX3RhYl9lbnRyeSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyNWEwW10gPSB7CisJeworCQkvKiBBZGp1c3QgSFQtQXZhaWxhYmxlIGRlcGVuZGVuY2llcy4gKi8KKwkJLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMLAorCQkudGFzayA9IFBNVV9SRVNfREVQX0FERCwKKwkJLmRlcGVuZCA9ICgoMSA8PCBTU0JfUE1VUkVTXzQzMjVfUlhfUFdSU1dfUFUpIHwKKwkJCSAgICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9UWF9QV1JTV19QVSkgfAorCQkJICAgKDEgPDwgU1NCX1BNVVJFU180MzI1X0xPR0VOX1BXUlNXX1BVKSB8CisJCQkgICAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQUZFX1BXUlNXX1BVKSksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHNzYl9wbXVfcmVzb3VyY2VzX2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCXUzMiBtaW5fbXNrID0gMCwgbWF4X21zayA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3Qgc3RydWN0IHBtdV9yZXNfdXBkb3duX3RhYl9lbnRyeSAqdXBkb3duX3RhYiA9IE5VTEw7CisJdW5zaWduZWQgaW50IHVwZG93bl90YWJfc2l6ZTsKKwljb25zdCBzdHJ1Y3QgcG11X3Jlc19kZXBlbmRfdGFiX2VudHJ5ICpkZXBlbmRfdGFiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgZGVwZW5kX3RhYl9zaXplOworCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMxMjoKKwkJLyogV2Uga2VlcCB0aGUgZGVmYXVsdCBzZXR0aW5nczoKKwkJICogbWluX21zayA9IDB4Q0JCCisJCSAqIG1heF9tc2sgPSAweDdGRkZGCisJCSAqLworCQlicmVhazsKKwljYXNlIDB4NDMyNToKKwkJLyogUG93ZXIgT1RQIGRvd24gbGF0ZXIuICovCisJCW1pbl9tc2sgPSAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfQ0JVQ0tfQlVSU1QpIHwKKwkJCSAgKDEgPDwgU1NCX1BNVVJFU180MzI1X0xOTERPMl9QVSk7CisJCWlmIChjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NISVBTVEFUKSAmCisJCSAgICBTU0JfQ0hJUENPX0NIU1RfNDMyNV9QTVVUT1BfMkIpCisJCQltaW5fbXNrIHw9ICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9DTERPX0NCVUNLX0JVUlNUKTsKKwkJLyogVGhlIFBMTCBtYXkgdHVybiBvbiwgaWYgaXQgZGVjaWRlcyBzby4gKi8KKwkJbWF4X21zayA9IDB4RkZGRkY7CisJCXVwZG93bl90YWIgPSBwbXVfcmVzX3VwZG93bl90YWJfNDMyNWEwOworCQl1cGRvd25fdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfdXBkb3duX3RhYl80MzI1YTApOworCQlkZXBlbmRfdGFiID0gcG11X3Jlc19kZXBlbmRfdGFiXzQzMjVhMDsKKwkJZGVwZW5kX3RhYl9zaXplID0gQVJSQVlfU0laRShwbXVfcmVzX2RlcGVuZF90YWJfNDMyNWEwKTsKKwkJYnJlYWs7CisJY2FzZSAweDQzMjg6CisJCW1pbl9tc2sgPSAoMSA8PCBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTSkgfAorCQkJICAoMSA8PCBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNKSB8CisJCQkgICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9YVEFMX0VOKTsKKwkJLyogVGhlIFBMTCBtYXkgdHVybiBvbiwgaWYgaXQgZGVjaWRlcyBzby4gKi8KKwkJbWF4X21zayA9IDB4RkZGRkY7CisJCXVwZG93bl90YWIgPSBwbXVfcmVzX3VwZG93bl90YWJfNDMyOGEwOworCQl1cGRvd25fdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfdXBkb3duX3RhYl80MzI4YTApOworCQlkZXBlbmRfdGFiID0gcG11X3Jlc19kZXBlbmRfdGFiXzQzMjhhMDsKKwkJZGVwZW5kX3RhYl9zaXplID0gQVJSQVlfU0laRShwbXVfcmVzX2RlcGVuZF90YWJfNDMyOGEwKTsKKwkJYnJlYWs7CisJY2FzZSAweDUzNTQ6CisJCS8qIFRoZSBQTEwgbWF5IHR1cm4gb24sIGlmIGl0IGRlY2lkZXMgc28uICovCisJCW1heF9tc2sgPSAweEZGRkZGOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgIkVSUk9SOiBQTVUgcmVzb3VyY2UgY29uZmlnIHVua25vd24gZm9yIGRldmljZSAlMDRYXG4iLAorCQkJICAgYnVzLT5jaGlwX2lkKTsKKwl9CisKKwlpZiAodXBkb3duX3RhYikgeworCQlmb3IgKGkgPSAwOyBpIDwgdXBkb3duX3RhYl9zaXplOyBpKyspIHsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfVEFCU0VMLAorCQkJCSAgICAgICB1cGRvd25fdGFiW2ldLnJlc291cmNlKTsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfVVBETlRNLAorCQkJCSAgICAgICB1cGRvd25fdGFiW2ldLnVwZG93bik7CisJCX0KKwl9CisJaWYgKGRlcGVuZF90YWIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRlcGVuZF90YWJfc2l6ZTsgaSsrKSB7CisJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX1RBQlNFTCwKKwkJCQkgICAgICAgZGVwZW5kX3RhYltpXS5yZXNvdXJjZSk7CisJCQlzd2l0Y2ggKGRlcGVuZF90YWJbaV0udGFzaykgeworCQkJY2FzZSBQTVVfUkVTX0RFUF9TRVQ6CisJCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19ERVBNU0ssCisJCQkJCSAgICAgICBkZXBlbmRfdGFiW2ldLmRlcGVuZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBNVV9SRVNfREVQX0FERDoKKwkJCQljaGlwY29fc2V0MzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19ERVBNU0ssCisJCQkJCSAgICAgZGVwZW5kX3RhYltpXS5kZXBlbmQpOworCQkJCWJyZWFrOworCQkJY2FzZSBQTVVfUkVTX0RFUF9SRU1PVkU6CisJCQkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSywKKwkJCQkJICAgICAgfihkZXBlbmRfdGFiW2ldLmRlcGVuZCkpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlTU0JfV0FSTl9PTigxKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFNldCB0aGUgcmVzb3VyY2UgbWFza3MuICovCisJaWYgKG1pbl9tc2spCisJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLLCBtaW5fbXNrKTsKKwlpZiAobWF4X21zaykKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX01BWFJFU19NU0ssIG1heF9tc2spOworfQorCit2b2lkIHNzYl9wbXVfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJdTMyIHBtdWNhcDsKKworCWlmICghKGNjLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9QTVUpKQorCQlyZXR1cm47CisKKwlwbXVjYXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DQVApOworCWNjLT5wbXUucmV2ID0gKHBtdWNhcCAmIFNTQl9DSElQQ09fUE1VX0NBUF9SRVZJU0lPTik7CisKKwlzc2JfZHByaW50ayhLRVJOX0RFQlVHIFBGWCAiRm91bmQgcmV2ICV1IFBNVSAoY2FwYWJpbGl0aWVzIDB4JTA4WClcbiIsCisJCSAgICBjYy0+cG11LnJldiwgcG11Y2FwKTsKKworCWlmIChjYy0+cG11LnJldiA+PSAxKSB7CisJCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPCAyKSkgeworCQkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfQ1RMLAorCQkJCSAgICAgIH5TU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcpOworCQl9IGVsc2UgeworCQkJY2hpcGNvX3NldDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsCisJCQkJICAgICBTU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcpOworCQl9CisJfQorCXNzYl9wbXVfcGxsX2luaXQoY2MpOworCXNzYl9wbXVfcmVzb3VyY2VzX2luaXQoY2MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNpLmMgYi9kcml2ZXJzL3NzYi9wY2kuYwppbmRleCBkNWNkZTA1Li40MGVhNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2kuYworKysgYi9kcml2ZXJzL3NzYi9wY2kuYwpAQCAtNDY3LDYgKzQ2Nyw1MSBAQAogCS8qIFRPRE8gLSBnZXQgcmVtYWluaW5nIHJldiA0IHN0dWZmIG5lZWRlZCAqLwogfQogCitzdGF0aWMgdm9pZCBzcHJvbV9leHRyYWN0X3I4KHN0cnVjdCBzc2Jfc3Byb20gKm91dCwgY29uc3QgdTE2ICppbikKK3sKKwlpbnQgaTsKKwl1MTYgdjsKKworCS8qIGV4dHJhY3QgdGhlIE1BQyBhZGRyZXNzICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl2ID0gaW5bU1BPRkYoU1NCX1NQUk9NMV9JTDBNQUMpICsgaV07CisJCSooKChfX2JlMTYgKilvdXQtPmlsMG1hYykgKyBpKSA9IGNwdV90b19iZTE2KHYpOworCX0KKwlTUEVYKGNvdW50cnlfY29kZSwgU1NCX1NQUk9NOF9DQ09ERSwgMHhGRkZGLCAwKTsKKwlTUEVYKGJvYXJkZmxhZ3NfbG8sIFNTQl9TUFJPTThfQkZMTE8sIDB4RkZGRiwgMCk7CisJU1BFWChib2FyZGZsYWdzX2hpLCBTU0JfU1BST004X0JGTEhJLCAweEZGRkYsIDApOworCVNQRVgoYW50X2F2YWlsYWJsZV9hLCBTU0JfU1BST004X0FOVEFWQUlMLCBTU0JfU1BST004X0FOVEFWQUlMX0EsCisJICAgICBTU0JfU1BST004X0FOVEFWQUlMX0FfU0hJRlQpOworCVNQRVgoYW50X2F2YWlsYWJsZV9iZywgU1NCX1NQUk9NOF9BTlRBVkFJTCwgU1NCX1NQUk9NOF9BTlRBVkFJTF9CRywKKwkgICAgIFNTQl9TUFJPTThfQU5UQVZBSUxfQkdfU0hJRlQpOworCVNQRVgobWF4cHdyX2JnLCBTU0JfU1BST004X01BWFBfQkcsIFNTQl9TUFJPTThfTUFYUF9CR19NQVNLLCAwKTsKKwlTUEVYKGl0c3NpX2JnLCBTU0JfU1BST004X01BWFBfQkcsIFNTQl9TUFJPTThfSVRTU0lfQkcsCisJICAgICBTU0JfU1BST004X0lUU1NJX0JHX1NISUZUKTsKKwlTUEVYKG1heHB3cl9hLCBTU0JfU1BST004X01BWFBfQSwgU1NCX1NQUk9NOF9NQVhQX0FfTUFTSywgMCk7CisJU1BFWChpdHNzaV9hLCBTU0JfU1BST004X01BWFBfQSwgU1NCX1NQUk9NOF9JVFNTSV9BLAorCSAgICAgU1NCX1NQUk9NOF9JVFNTSV9BX1NISUZUKTsKKwlTUEVYKGdwaW8wLCBTU0JfU1BST004X0dQSU9BLCBTU0JfU1BST004X0dQSU9BX1AwLCAwKTsKKwlTUEVYKGdwaW8xLCBTU0JfU1BST004X0dQSU9BLCBTU0JfU1BST004X0dQSU9BX1AxLAorCSAgICAgU1NCX1NQUk9NOF9HUElPQV9QMV9TSElGVCk7CisJU1BFWChncGlvMiwgU1NCX1NQUk9NOF9HUElPQiwgU1NCX1NQUk9NOF9HUElPQl9QMiwgMCk7CisJU1BFWChncGlvMywgU1NCX1NQUk9NOF9HUElPQiwgU1NCX1NQUk9NOF9HUElPQl9QMywKKwkgICAgIFNTQl9TUFJPTThfR1BJT0JfUDNfU0hJRlQpOworCisJLyogRXh0cmFjdCB0aGUgYW50ZW5uYSBnYWluIHZhbHVlcy4gKi8KKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMCwgU1NCX1NQUk9NOF9BR0FJTjAxLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjAsIFNTQl9TUFJPTThfQUdBSU4wX1NISUZUKTsKKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMSwgU1NCX1NQUk9NOF9BR0FJTjAxLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjEsIFNTQl9TUFJPTThfQUdBSU4xX1NISUZUKTsKKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMiwgU1NCX1NQUk9NOF9BR0FJTjIzLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjIsIFNTQl9TUFJPTThfQUdBSU4yX1NISUZUKTsKKwlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMywgU1NCX1NQUk9NOF9BR0FJTjIzLAorCSAgICAgU1NCX1NQUk9NOF9BR0FJTjMsIFNTQl9TUFJPTThfQUdBSU4zX1NISUZUKTsKKwltZW1jcHkoJm91dC0+YW50ZW5uYV9nYWluLmdoejUsICZvdXQtPmFudGVubmFfZ2Fpbi5naHoyNCwKKwkgICAgICAgc2l6ZW9mKG91dC0+YW50ZW5uYV9nYWluLmdoejUpKTsKKworCS8qIFRPRE8gLSBnZXQgcmVtYWluaW5nIHJldiA4IHN0dWZmIG5lZWRlZCAqLworfQorCiBzdGF0aWMgaW50IHNwcm9tX2V4dHJhY3Qoc3RydWN0IHNzYl9idXMgKmJ1cywgc3RydWN0IHNzYl9zcHJvbSAqb3V0LAogCQkJIGNvbnN0IHUxNiAqaW4sIHUxNiBzaXplKQogewpAQCAtNDg3LDE1ICs1MzIsMjUgQEAKIAkJb3V0LT5yZXZpc2lvbiA9IDQ7CiAJCXNwcm9tX2V4dHJhY3RfcjQ1KG91dCwgaW4pOwogCX0gZWxzZSB7Ci0JCWlmIChvdXQtPnJldmlzaW9uID09IDApCi0JCQlnb3RvIHVuc3VwcG9ydGVkOwotCQlpZiAob3V0LT5yZXZpc2lvbiA+PSAxICYmIG91dC0+cmV2aXNpb24gPD0gMykgeworCQlzd2l0Y2ggKG91dC0+cmV2aXNpb24pIHsKKwkJY2FzZSAxOgorCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCWNhc2UgNToKKwkJCXNwcm9tX2V4dHJhY3RfcjQ1KG91dCwgaW4pOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXNwcm9tX2V4dHJhY3Rfcjgob3V0LCBpbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNzYl9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5zdXBwb3J0ZWQgU1BST00iCisJCQkJICAgIiAgcmV2aXNpb24gJWQgZGV0ZWN0ZWQuIFdpbGwgZXh0cmFjdCIKKwkJCQkgICAiIHYxXG4iLCBvdXQtPnJldmlzaW9uKTsKIAkJCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKIAkJfQotCQlpZiAob3V0LT5yZXZpc2lvbiA9PSA0IHx8IG91dC0+cmV2aXNpb24gPT0gNSkKLQkJCXNwcm9tX2V4dHJhY3RfcjQ1KG91dCwgaW4pOwotCQlpZiAob3V0LT5yZXZpc2lvbiA+IDUpCi0JCQlnb3RvIHVuc3VwcG9ydGVkOwogCX0KIAogCWlmIChvdXQtPmJvYXJkZmxhZ3NfbG8gPT0gMHhGRkZGKQpAQCAtNTA0LDE2ICs1NTksMTIgQEAKIAkJb3V0LT5ib2FyZGZsYWdzX2hpID0gMDsgIC8qIHBlciBzcGVjcyAqLwogCiAJcmV0dXJuIDA7Ci11bnN1cHBvcnRlZDoKLQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVuc3VwcG9ydGVkIFNQUk9NIHJldmlzaW9uICVkICIKLQkJICAgImRldGVjdGVkLiBXaWxsIGV4dHJhY3QgdjFcbiIsIG91dC0+cmV2aXNpb24pOwotCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzc2JfcGNpX3Nwcm9tX2dldChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAogCQkJICAgICBzdHJ1Y3Qgc3NiX3Nwcm9tICpzcHJvbSkKIHsKKwljb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpmYWxsYmFjazsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAl1MTYgKmJ1ZjsKIApAQCAtNTMzLDEyICs1ODQsMjMgQEAKIAkJYnVzLT5zcHJvbV9zaXplID0gU1NCX1NQUk9NU0laRV9XT1JEU19SNDsKIAkJc3Byb21fZG9fcmVhZChidXMsIGJ1Zik7CiAJCWVyciA9IHNwcm9tX2NoZWNrX2NyYyhidWYsIGJ1cy0+c3Byb21fc2l6ZSk7Ci0JCWlmIChlcnIpCisJCWlmIChlcnIpIHsKKwkJCS8qIEFsbCBDUkMgYXR0ZW1wdHMgZmFpbGVkLgorCQkJICogTWF5YmUgdGhlcmUgaXMgbm8gU1BST00gb24gdGhlIGRldmljZT8KKwkJCSAqIElmIHdlIGhhdmUgYSBmYWxsYmFjaywgdXNlIHRoYXQuICovCisJCQlmYWxsYmFjayA9IHNzYl9nZXRfZmFsbGJhY2tfc3Byb20oKTsKKwkJCWlmIChmYWxsYmFjaykgeworCQkJCW1lbWNweShzcHJvbSwgZmFsbGJhY2ssIHNpemVvZigqc3Byb20pKTsKKwkJCQllcnIgPSAwOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CiAJCQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldBUk5JTkc6IEludmFsaWQiCiAJCQkJICAgIiBTUFJPTSBDUkMgKGNvcnJ1cHQgU1BST00pXG4iKTsKKwkJfQogCX0KIAllcnIgPSBzcHJvbV9leHRyYWN0KGJ1cywgc3Byb20sIGJ1ZiwgYnVzLT5zcHJvbV9zaXplKTsKIAorb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3Byb20uYyBiL2RyaXZlcnMvc3NiL3Nwcm9tLmMKaW5kZXggMzY2OGVkYi4uODk0MzAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3Byb20uYworKysgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCkBAIC0xNCw2ICsxNCw5IEBACiAjaW5jbHVkZSAic3NiX3ByaXZhdGUuaCIKIAogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqZmFsbGJhY2tfc3Byb207CisKKwogc3RhdGljIGludCBzcHJvbTJoZXgoY29uc3QgdTE2ICpzcHJvbSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKIAkJICAgICBzaXplX3Qgc3Byb21fc2l6ZV93b3JkcykKIHsKQEAgLTEzMSwzICsxMzQsMzYgQEAKIAkJcmV0dXJuIHJlczsKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CisKKy8qKgorICogc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tIC0gU2V0IGEgZmFsbGJhY2sgU1BST00gZm9yIHVzZSBpZiBubyBTUFJPTSBpcyBmb3VuZC4KKyAqCisgKiBAc3Byb206IFRoZSBTUFJPTSBkYXRhIHN0cnVjdHVyZSB0byByZWdpc3Rlci4KKyAqCisgKiBXaXRoIHRoaXMgZnVuY3Rpb24gdGhlIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbiBtYXkgcmVnaXN0ZXIgYSBmYWxsYmFjaworICogU1BST00gZGF0YSBzdHJ1Y3R1cmUuIFRoZSBmYWxsYmFjayBpcyBvbmx5IHVzZWQgZm9yIFBDSSBiYXNlZCBTU0IgZGV2aWNlcywKKyAqIHdoZXJlIG5vIHZhbGlkIFNQUk9NIGNhbiBiZSBmb3VuZCBpbiB0aGUgc2hhZG93IHJlZ2lzdGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3Igd2VpcmQgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgYSBoYWxmLWFzc2VkIFNTQiBkZXZpY2UKKyAqIGhhcmR3aXJlZCB0byB0aGVpciBQQ0kgYnVzLgorICoKKyAqIE5vdGUgdGhhdCBpdCBkb2VzIG9ubHkgd29yayB3aXRoIFBDSSBhdHRhY2hlZCBTU0IgZGV2aWNlcy4gUENNQ0lBIGRldmljZXMgY3VycmVudGx5CisgKiBkb24ndCB1c2UgdGhpcyBmYWxsYmFjay4KKyAqIEFyY2hpdGVjdHVyZXMgbXVzdCBwcm92aWRlIHRoZSBTUFJPTSBmb3IgbmF0aXZlIFNTQiBkZXZpY2VzIGFueXdheSwKKyAqIHNvIHRoZSBmYWxsYmFjayBhbHNvIGlzbid0IHVzZWQgZm9yIG5hdGl2ZSBkZXZpY2VzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGZvciBhcmNoaXRlY3R1cmUgY29kZSwgb25seS4gU28gaXQgaXMgbm90IGV4cG9ydGVkLgorICovCitpbnQgc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tKGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQoreworCWlmIChmYWxsYmFja19zcHJvbSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisJZmFsbGJhY2tfc3Byb20gPSBzcHJvbTsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHZvaWQpCit7CisJcmV0dXJuIGZhbGxiYWNrX3Nwcm9tOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaCBiL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKaW5kZXggZWJjMzJkOC4uNTdmYTQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaAorKysgYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCkBAIC0xMzEsNiArMTMxLDcgQEAKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCiAJCQkgICAgIGludCAoKnNwcm9tX2NoZWNrX2NyYykoY29uc3QgdTE2ICpzcHJvbSwgc2l6ZV90IHNpemUpLAogCQkJICAgICBpbnQgKCpzcHJvbV93cml0ZSkoc3RydWN0IHNzYl9idXMgKmJ1cywgY29uc3QgdTE2ICpzcHJvbSkpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNzYl9nZXRfZmFsbGJhY2tfc3Byb20odm9pZCk7CiAKIAogLyogY29yZS5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jCmluZGV4IGE3ZGU0MDEuLmNkMTliZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jCkBAIC0yNDgsMTAgKzI0OCwxMSBAQAogCXNwaW5fbG9ja19pbml0KCZnb3NuZC0+bG9jayk7CiAJZ29zbmQtPmh3X3B0ciA9IGdvc25kLT53X2lkeCA9IGdvc25kLT5hdmFpbCA9IDA7CiAJZ29zbmQtPmNhcHR1cmluZyA9IDA7Ci0JZ29zbmQtPmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChnb3NuZC0+Y2FyZCA9PSBOVUxMKSB7CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLAorCQkJICAgICAgJmdvc25kLT5jYXJkKTsKKwlpZiAocmV0IDwgMCkgewogCQlrZnJlZShnb3NuZCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gcmV0OwogCX0KIAlyZXQgPSBzbmRfZGV2aWNlX25ldyhnb3NuZC0+Y2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBnbywKIAkJCSZnbzcwMDdfc25kX2RldmljZV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90Yy90Yy5jIGIvZHJpdmVycy90Yy90Yy5jCmluZGV4IGY3N2Y2MmEuLmU1YmQ0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGMvdGMuYworKysgYi9kcml2ZXJzL3RjL3RjLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAkJCSAgICAgICBzbG90KTsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQotCQlzcHJpbnRmKHRkZXYtPmRldi5idXNfaWQsICJ0YyV4Iiwgc2xvdCk7CisJCWRldl9zZXRfbmFtZSgmdGRldi0+ZGV2LCAidGMleCIsIHNsb3QpOwogCQl0ZGV2LT5idXMgPSB0YnVzOwogCQl0ZGV2LT5kZXYucGFyZW50ID0gJnRidXMtPmRldjsKIAkJdGRldi0+ZGV2LmJ1cyA9ICZ0Y19idXNfdHlwZTsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQl0ZGV2LT52ZW5kb3JbOF0gPSAwOwogCQl0ZGV2LT5uYW1lWzhdID0gMDsKIAotCQlwcl9pbmZvKCIlczogJXMgJXMgJXNcbiIsIHRkZXYtPmRldi5idXNfaWQsIHRkZXYtPnZlbmRvciwKKwkJcHJfaW5mbygiJXM6ICVzICVzICVzXG4iLCBkZXZfbmFtZSgmdGRldi0+ZGV2KSwgdGRldi0+dmVuZG9yLAogCQkJdGRldi0+bmFtZSwgdGRldi0+ZmlybXdhcmUpOwogCiAJCWRldnNpemUgPSByZWFkYihtb2R1bGUgKyBvZmZzZXQgKyBUQ19TTE9UX1NJWkUpOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcHJvdmlkZSBzbG90IHNwYWNlICIKIAkJCSAgICAgICAiKCVkTWlCIHJlcXVpcmVkLCB1cCB0byAlZE1pQiBzdXBwb3J0ZWQpXG4iLAotCQkJICAgICAgIHRkZXYtPmRldi5idXNfaWQsIGRldnNpemUgPj4gMjAsCisJCQkgICAgICAgZGV2X25hbWUoJnRkZXYtPmRldiksIGRldnNpemUgPj4gMjAsCiAJCQkgICAgICAgbWF4KHNsb3RzaXplLCBleHRzbG90c2l6ZSkgPj4gMjApOwogCQkJa2ZyZWUodGRldik7CiAJCQlnb3RvIG91dF9lcnI7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmdGNfYnVzLmRldmljZXMpOwotCXN0cmNweSh0Y19idXMuZGV2LmJ1c19pZCwgInRjIik7CisJZGV2X3NldF9uYW1lKCZ0Y19idXMuZGV2LCAidGMiKTsKIAlkZXZpY2VfcmVnaXN0ZXIoJnRjX2J1cy5kZXYpOwogCiAJaWYgKHRjX2J1cy5pbmZvLnNsb3Rfc2l6ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vS2NvbmZpZyBiL2RyaXZlcnMvdWlvL0tjb25maWcKaW5kZXggMDRiOTU0Yy4uN2Y4NjUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3Vpby9LY29uZmlnCkBAIC01OCw2ICs1OCwyNCBAQAogCiAJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB1aW9fc214LgogCitjb25maWcgVUlPX0FFQworCXRyaXN0YXRlICJBRUMgdmlkZW8gdGltZXN0YW1wIGRldmljZSIKKwlkZXBlbmRzIG9uIFBDSQorCWRlZmF1bHQgbgorCWhlbHAKKworCSAgVUlPIGRyaXZlciBmb3IgdGhlIEFkcmllbm5lIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIFBDSSB0aW1lCisJICBjb2RlIGRldmljZS4KKworCSAgVGhpcyBkZXZpY2UgZGlmZmVycyBmcm9tIG90aGVyIFVJTyBkZXZpY2VzIHNpbmNlIGl0IHVzZXMgSS9PCisJICBwb3J0cyBpbnN0ZWFkIG9mIG1lbW9yeSBtYXBwZWQgSS9PLiBJbiBvcmRlciB0byBtYWtlIGl0CisJICBwb3NzaWJsZSBmb3IgVUlPIHRvIHdvcmsgd2l0aCB0aGlzIGRldmljZSBhIHV0aWxpdHksIHVpb3BvcnQsCisJICBjYW4gYmUgdXNlZCB0byByZWFkIGFuZCB3cml0ZSB0aGUgcG9ydHM6CisKKwkgICAgZ2l0IGNsb25lIGdpdDovL2lmdXAub3JnL3BoaWxpcHMvdWlvcG9ydC5naXQKKworCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX2FlYy4KKwogY29uZmlnIFVJT19TRVJDT1MzCiAJdHJpc3RhdGUgIkF1dG9tYXRhIFNlcmNvcyBJSUkgUENJIGNhcmQgZHJpdmVyIgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vTWFrZWZpbGUgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQppbmRleCBlNjk1NTgxLi41YzI1ODZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQpAQCAtMyw0ICszLDUgQEAKIG9iai0kKENPTkZJR19VSU9fUERSVikJKz0gdWlvX3BkcnYubwogb2JqLSQoQ09ORklHX1VJT19QRFJWX0dFTklSUSkJKz0gdWlvX3BkcnZfZ2VuaXJxLm8KIG9iai0kKENPTkZJR19VSU9fU01YKQkrPSB1aW9fc214Lm8KK29iai0kKENPTkZJR19VSU9fQUVDKQkrPSB1aW9fYWVjLm8KIG9iai0kKENPTkZJR19VSU9fU0VSQ09TMykJKz0gdWlvX3NlcmNvczMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCA0Y2E4NWExLi4wM2VmYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtNjEsNiArNjEsMTQgQEAKIH07CiAjZGVmaW5lIHRvX21hcChtYXApIGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCB1aW9fbWFwLCBrb2JqKQogCitzdGF0aWMgc3NpemVfdCBtYXBfbmFtZV9zaG93KHN0cnVjdCB1aW9fbWVtICptZW0sIGNoYXIgKmJ1ZikKK3sKKwlpZiAodW5saWtlbHkoIW1lbS0+bmFtZSkpCisJCW1lbS0+bmFtZSA9ICIiOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1lbS0+bmFtZSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IG1hcF9hZGRyX3Nob3coc3RydWN0IHVpb19tZW0gKm1lbSwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBtZW0tPmFkZHIpOwpAQCAtODIsNiArOTAsOCBAQAogCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHVpb19tZW0gKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAorc3RhdGljIHN0cnVjdCBtYXBfc3lzZnNfZW50cnkgbmFtZV9hdHRyaWJ1dGUgPQorCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBtYXBfbmFtZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgbWFwX3N5c2ZzX2VudHJ5IGFkZHJfYXR0cmlidXRlID0KIAlfX0FUVFIoYWRkciwgU19JUlVHTywgbWFwX2FkZHJfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IG1hcF9zeXNmc19lbnRyeSBzaXplX2F0dHJpYnV0ZSA9CkBAIC05MCw2ICsxMDAsNyBAQAogCV9fQVRUUihvZmZzZXQsIFNfSVJVR08sIG1hcF9vZmZzZXRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphdHRyc1tdID0geworCSZuYW1lX2F0dHJpYnV0ZS5hdHRyLAogCSZhZGRyX2F0dHJpYnV0ZS5hdHRyLAogCSZzaXplX2F0dHJpYnV0ZS5hdHRyLAogCSZvZmZzZXRfYXR0cmlidXRlLmF0dHIsCkBAIC0xMzMsNiArMTQ0LDE0IEBACiB9OwogI2RlZmluZSB0b19wb3J0aW8ocG9ydGlvKSBjb250YWluZXJfb2YocG9ydGlvLCBzdHJ1Y3QgdWlvX3BvcnRpbywga29iaikKIAorc3RhdGljIHNzaXplX3QgcG9ydGlvX25hbWVfc2hvdyhzdHJ1Y3QgdWlvX3BvcnQgKnBvcnQsIGNoYXIgKmJ1ZikKK3sKKwlpZiAodW5saWtlbHkoIXBvcnQtPm5hbWUpKQorCQlwb3J0LT5uYW1lID0gIiI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcG9ydC0+bmFtZSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHBvcnRpb19zdGFydF9zaG93KHN0cnVjdCB1aW9fcG9ydCAqcG9ydCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBwb3J0LT5zdGFydCk7CkBAIC0xNTksNiArMTc4LDggQEAKIAlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCB1aW9fcG9ydCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiB9OwogCitzdGF0aWMgc3RydWN0IHBvcnRpb19zeXNmc19lbnRyeSBwb3J0aW9fbmFtZV9hdHRyaWJ1dGUgPQorCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBwb3J0aW9fbmFtZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgcG9ydGlvX3N5c2ZzX2VudHJ5IHBvcnRpb19zdGFydF9hdHRyaWJ1dGUgPQogCV9fQVRUUihzdGFydCwgU19JUlVHTywgcG9ydGlvX3N0YXJ0X3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBwb3J0aW9fc3lzZnNfZW50cnkgcG9ydGlvX3NpemVfYXR0cmlidXRlID0KQEAgLTE2Nyw2ICsxODgsNyBAQAogCV9fQVRUUihwb3J0dHlwZSwgU19JUlVHTywgcG9ydGlvX3BvcnR0eXBlX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG9ydGlvX2F0dHJzW10gPSB7CisJJnBvcnRpb19uYW1lX2F0dHJpYnV0ZS5hdHRyLAogCSZwb3J0aW9fc3RhcnRfYXR0cmlidXRlLmF0dHIsCiAJJnBvcnRpb19zaXplX2F0dHJpYnV0ZS5hdHRyLAogCSZwb3J0aW9fcG9ydHR5cGVfYXR0cmlidXRlLmF0dHIsCkBAIC02ODYsNyArNzA4LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXF1ZXN0ZWRfcGFnZXMgPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOwotCWFjdHVhbF9wYWdlcyA9IChpZGV2LT5pbmZvLT5tZW1bbWldLnNpemUgKyBQQUdFX1NJWkUgLTEpID4+IFBBR0VfU0hJRlQ7CisJYWN0dWFsX3BhZ2VzID0gKChpZGV2LT5pbmZvLT5tZW1bbWldLmFkZHIgJiB+UEFHRV9NQVNLKQorCQkJKyBpZGV2LT5pbmZvLT5tZW1bbWldLnNpemUgKyBQQUdFX1NJWkUgLTEpID4+IFBBR0VfU0hJRlQ7CiAJaWYgKHJlcXVlc3RlZF9wYWdlcyA+IGFjdHVhbF9wYWdlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19hZWMuYyBiL2RyaXZlcnMvdWlvL3Vpb19hZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzgzMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91aW8vdWlvX2FlYy5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogdWlvX2FlYy5jIC0tIHNpbXBsZSBkcml2ZXIgZm9yIEFkcmllbm5lIEVsZWN0cm9uaWNzIENvcnAgdGltZSBjb2RlIFBDSSBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQnJhbmRvbiBQaGlsaXBzIDxicmFuZG9uQGlmdXAub3JnPgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICAgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUVDIDB4YWVjYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FFQ19WSVRDTFRDIDB4NjI1MAorCisjZGVmaW5lIElOVF9FTkFCTEVfQUREUgkJMHhGQworI2RlZmluZSBJTlRfRU5BQkxFCQkweDEwCisjZGVmaW5lIElOVF9ESVNBQkxFCQkweDAKKworI2RlZmluZSBJTlRfTUFTS19BRERSCQkweDJFCisjZGVmaW5lIElOVF9NQVNLX0FMTAkJMHgzRgorCisjZGVmaW5lIElOVEFfRFJWUl9BRERSCQkweEZFCisjZGVmaW5lIElOVEFfRU5BQkxFRF9GTEFHCTB4MDgKKyNkZWZpbmUgSU5UQV9GTEFHCQkweDAxCisKKyNkZWZpbmUgTUFJTEJPWAkJCTB4MEYKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FFQywgUENJX0RFVklDRV9JRF9BRUNfVklUQ0xUQyksIH0sCisJeyAwLCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlkcyk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZWN0Y19pcnEoaW50IGlycSwgc3RydWN0IHVpb19pbmZvICpkZXZfaW5mbykKK3sKKwl2b2lkIF9faW9tZW0gKmludF9mbGFnID0gZGV2X2luZm8tPnByaXYgKyBJTlRBX0RSVlJfQUREUjsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IGlvcmVhZDgoaW50X2ZsYWcpOworCisKKwlpZiAoKHN0YXR1cyAmIElOVEFfRU5BQkxFRF9GTEFHKSAmJiAoc3RhdHVzICYgSU5UQV9GTEFHKSkgeworCQkvKiBhcHBsaWNhdGlvbiB3cml0ZXMgMHgwMCB0byAweDJGIHRvIGdldCBuZXh0IGludGVycnVwdCAqLworCQlzdGF0dXMgPSBpb3JlYWQ4KGRldl9pbmZvLT5wcml2ICsgTUFJTEJPWCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2JvYXJkX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1aW9faW5mbyAqaSkKK3sKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUENJLVRDIGJvYXJkIHZlbmRvcjogJXgleCBudW1iZXI6ICV4JXgiCisJCSIgcmV2aXNpb246ICVjJWNcbiIsCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDEpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAwKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMyksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDIpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDA2KSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwNykpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1aW9faW5mbyAqaW5mbzsKKwlpbnQgcmV0OworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1aW9faW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAiYWVjdGMiKSkKKwkJZ290byBvdXRfZGlzYWJsZTsKKworCWluZm8tPm5hbWUgPSAiYWVjdGMiOworCWluZm8tPnBvcnRbMF0uc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaWYgKCFpbmZvLT5wb3J0WzBdLnN0YXJ0KQorCQlnb3RvIG91dF9yZWxlYXNlOworCWluZm8tPnByaXYgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCFpbmZvLT5wcml2KQorCQlnb3RvIG91dF9yZWxlYXNlOworCWluZm8tPnBvcnRbMF0uc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJaW5mby0+cG9ydFswXS5wb3J0dHlwZSA9IFVJT19QT1JUX0dQSU87CisKKwlpbmZvLT52ZXJzaW9uID0gIjAuMC4xIjsKKwlpbmZvLT5pcnEgPSBwZGV2LT5pcnE7CisJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisJaW5mby0+aGFuZGxlciA9IGFlY3RjX2lycTsKKworCXByaW50X2JvYXJkX2RhdGEocGRldiwgaW5mbyk7CisJcmV0ID0gdWlvX3JlZ2lzdGVyX2RldmljZSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bm1hcDsKKworCWlvd3JpdGUzMihJTlRfRU5BQkxFLCBpbmZvLT5wcml2ICsgSU5UX0VOQUJMRV9BRERSKTsKKwlpb3dyaXRlOChJTlRfTUFTS19BTEwsIGluZm8tPnByaXYgKyBJTlRfTUFTS19BRERSKTsKKwlpZiAoIShpb3JlYWQ4KGluZm8tPnByaXYgKyBJTlRBX0RSVlJfQUREUikKKwkJCSYgSU5UQV9FTkFCTEVEX0ZMQUcpKQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhZWN0YzogaW50ZXJydXB0cyBub3QgZW5hYmxlZFxuIik7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCXBjaV9pb3VubWFwKHBkZXYsIGluZm8tPnByaXYpOworb3V0X3JlbGVhc2U6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK291dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK291dF9mcmVlOgorCWtmcmVlKGluZm8pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCByZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJaW93cml0ZTgoSU5UX0RJU0FCTEUsIGluZm8tPnByaXYgKyBJTlRfTUFTS19BRERSKTsKKwlpb3dyaXRlMzIoSU5UX0RJU0FCTEUsIGluZm8tPnByaXYgKyBJTlRfRU5BQkxFX0FERFIpOworCS8qIHJlYWQgbWFpbGJveCB0byBlbnN1cmUgYm9hcmQgZHJvcHMgaXJxICovCisJaW9yZWFkOChpbmZvLT5wcml2ICsgTUFJTEJPWCk7CisKKwl1aW9fdW5yZWdpc3Rlcl9kZXZpY2UoaW5mbyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlvdW5tYXAoaW5mby0+cHJpdik7CisKKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYWVjdGMiLAorCS5pZF90YWJsZSA9IGlkcywKKwkucHJvYmUgPSBwcm9iZSwKKwkucmVtb3ZlID0gcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWVjdGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFlY3RjX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGFlY3RjX2luaXQpOworbW9kdWxlX2V4aXQoYWVjdGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZwppbmRleCA4M2JhYmIwLi5jNmM4MTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL0tjb25maWcKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzIwCiAJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzcyMQogCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3NjMKKwlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJIyBtb3JlOgogCWRlZmF1bHQgUENJCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggYjJjZWI0YS4uODkyOTlhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAKIG9iai0kKENPTkZJR19VU0JfVTEzMl9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfSFdBX0hDRCkJKz0gaG9zdC8KK29iai0kKENPTkZJR19VU0JfSVNQMTc2MF9IQ0QpCSs9IGhvc3QvCiAKIG9iai0kKENPTkZJR19VU0JfQzY3WDAwX0hDRCkJKz0gYzY3eDAwLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCAzZjNlZTEzLi5kMjc0N2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTg4MCwxNiArODgwLDE5IEBACiAJCWlmIChyYyA8PSAwKQogCQkJYnJlYWs7CiAKLQkJaWYgKHVzYmxwLT5mbGFncyAmIExQX0FCT1JUKSB7Ci0JCQlpZiAoc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDUwMDApKSA9PSAwKSB7CisJCWlmIChzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMTUwMCkpID09IDApIHsKKwkJCWlmICh1c2JscC0+ZmxhZ3MgJiBMUF9BQk9SVCkgewogCQkJCWVyciA9IHVzYmxwX2NoZWNrX3N0YXR1cyh1c2JscCwgZXJyKTsKIAkJCQlpZiAoZXJyID09IDEpIHsJLyogUGFwZXIgb3V0ICovCiAJCQkJCXJjID0gLUVOT1NQQzsKIAkJCQkJYnJlYWs7CiAJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBQcm9kIHRoZSBwcmludGVyLCBHZW50b28jMjUxMjM3LiAqLworCQkJCW11dGV4X2xvY2soJnVzYmxwLT5tdXQpOworCQkJCXVzYmxwX3JlYWRfc3RhdHVzKHVzYmxwLCB1c2JscC0+c3RhdHVzYnVmKTsKKwkJCQltdXRleF91bmxvY2soJnVzYmxwLT5tdXQpOwogCQkJfQotCQl9IGVsc2UgewotCQkJc2NoZWR1bGUoKTsKIAkJfQogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCA2ZWMzODE3Li43M2MxMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJfQogCiAJLyogdGhpcyBpc24ndCBjaGVja2luZyBmb3IgaWxsZWdhbCB2YWx1ZXMgKi8KLQlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZShkZXNjKSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKIAkJdHlwZSA9ICJDdHJsIjsKIAkJaWYgKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggNjU4NWY1Mi4uZGYzYzUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAKICNkZWZpbmUJTUFYX1VTQkZTX0JVRkZFUl9TSVpFCTE2Mzg0CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvbm5lY3RlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3N0YXRpYyBpbnQgY29ubmVjdGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCXJldHVybiAoIWxpc3RfZW1wdHkoJnBzLT5saXN0KSAmJgogCQkJcHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCWtmcmVlKGFzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX25ld3BlbmRpbmcoc3RydWN0IGFzeW5jICphcykKK3N0YXRpYyB2b2lkIGFzeW5jX25ld3BlbmRpbmcoc3RydWN0IGFzeW5jICphcykKIHsKIAlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX3JlbW92ZXBlbmRpbmcoc3RydWN0IGFzeW5jICphcykKK3N0YXRpYyB2b2lkIGFzeW5jX3JlbW92ZXBlbmRpbmcoc3RydWN0IGFzeW5jICphcykKIHsKIAlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldGNvbXBsZXRlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3N0YXRpYyBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldGNvbXBsZXRlZChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhc3luYyAqYXMgPSBOVUxMOwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJcmV0dXJuIGFzOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0cGVuZGluZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywKK3N0YXRpYyBzdHJ1Y3QgYXN5bmMgKmFzeW5jX2dldHBlbmRpbmcoc3RydWN0IGRldl9zdGF0ZSAqcHMsCiAJCQkJCSAgICAgdm9pZCBfX3VzZXIgKnVzZXJ1cmIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMwMiw3ICszMDIsNyBAQAogCiBzdGF0aWMgdm9pZCBzbm9vcF91cmIoc3RydWN0IHVyYiAqdXJiLCB2b2lkIF9fdXNlciAqdXNlcnVyYikKIHsKLQlpbnQgajsKKwl1bnNpZ25lZCBqOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogCWlmICghdXNiZnNfc25vb3ApCkBAIC0zMTEsOSArMzExLDkgQEAKIAlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRpcmVjdGlvbj0lc1xuIiwKIAkJCXVzYl91cmJfZGlyX2luKHVyYikgPyAiSU4iIDogIk9VVCIpOwogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNlcnVyYj0lcFxuIiwgdXNlcnVyYik7Ci0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPSVkXG4iLAorCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0ldVxuIiwKIAkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0JZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJhY3R1YWxfbGVuZ3RoPSVkXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiYWN0dWFsX2xlbmd0aD0ldVxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRhdGE6ICIpOwogCWZvciAoaiA9IDA7IGogPCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7ICsraikKIAkJcHJpbnRrKCIlMDJ4ICIsIGRhdGFbal0pOwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJZGVzdHJveV9hc3luYyhwcywgJmhpdGxpc3QpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9hbGxfYXN5bmMoc3RydWN0IGRldl9zdGF0ZSAqcHMpCitzdGF0aWMgdm9pZCBkZXN0cm95X2FsbF9hc3luYyhzdHJ1Y3QgZGV2X3N0YXRlICpwcykKIHsKIAlkZXN0cm95X2FzeW5jKHBzLCAmcHMtPmFzeW5jX3BlbmRpbmcpOwogfQpAQCAtNTI1LDcgKzUyNSw4IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0FERFJFU1MKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRAorCSAmJiBwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQUREUkVTUwogCSAmJiBwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiAJaWYgKFVTQl9UWVBFX1ZFTkRPUiA9PSAoVVNCX1RZUEVfTUFTSyAmIHJlcXVlc3R0eXBlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCBlMTcxMGYyLi40MGRlZTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC02Niw3ICs2Niw3IEBACiAJc3RydWN0IGVwX2RldmljZSAqZXAgPSB0b19lcF9kZXZpY2UoZGV2KTsKIAljaGFyICp0eXBlID0gInVua25vd24iOwogCi0Jc3dpdGNoIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKGVwLT5kZXNjKSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKIAkJdHlwZSA9ICJDb250cm9sIjsKIAkJYnJlYWs7CkBAIC05NCw3ICs5NCw3IEBACiAKIAlpbiA9IChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pOwogCi0Jc3dpdGNoIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKGVwLT5kZXNjKSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKIAkJaWYgKGVwLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgCS8qIHVmcmFtZXMgcGVyIE5BSyAqLwogCQkJaW50ZXJ2YWwgPSBlcC0+ZGVzYy0+YkludGVydmFsOwpAQCAtMTMxLDEwICsxMzEsOSBAQAogCXN0cnVjdCBlcF9kZXZpY2UgKmVwID0gdG9fZXBfZGV2aWNlKGRldik7CiAJY2hhciAqZGlyZWN0aW9uOwogCi0JaWYgKChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCQlVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQorCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKGVwLT5kZXNjKSkKIAkJZGlyZWN0aW9uID0gImJvdGgiOwotCWVsc2UgaWYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwllbHNlIGlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwLT5kZXNjKSkKIAkJZGlyZWN0aW9uID0gImluIjsKIAllbHNlCiAJCWRpcmVjdGlvbiA9ICJvdXQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggM2M3MTFkYjUuLjgxZmE4NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMjc5LDkgKzI3OSw5IEBACiAgKiBoZWxwZXIgcm91dGluZSBmb3IgcmV0dXJuaW5nIHN0cmluZyBkZXNjcmlwdG9ycyBpbiBVVEYtMTZMRQogICogaW5wdXQgY2FuIGFjdHVhbGx5IGJlIElTTy04ODU5LTE7IEFTQ0lJIGlzIGl0cyA3LWJpdCBzdWJzZXQKICAqLwotc3RhdGljIGludCBhc2NpaTJ1dGYgKGNoYXIgKnMsIHU4ICp1dGYsIGludCB1dGZtYXgpCitzdGF0aWMgdW5zaWduZWQgYXNjaWkydXRmKGNoYXIgKnMsIHU4ICp1dGYsIGludCB1dGZtYXgpCiB7Ci0JaW50IHJldHZhbDsKKwl1bnNpZ25lZCByZXR2YWw7CiAKIAlmb3IgKHJldHZhbCA9IDA7ICpzICYmIHV0Zm1heCA+IDE7IHV0Zm1heCAtPSAyLCByZXR2YWwgKz0gMikgewogCQkqdXRmKysgPSAqcysrOwpAQCAtMzA0LDE5ICszMDQsMTUgQEAKICAqIFByb2R1Y2VzIGVpdGhlciBhIG1hbnVmYWN0dXJlciwgcHJvZHVjdCBvciBzZXJpYWwgbnVtYmVyIHN0cmluZyBmb3IgdGhlCiAgKiB2aXJ0dWFsIHJvb3QgaHViIGRldmljZS4KICAqLwotc3RhdGljIGludCByaF9zdHJpbmcgKAotCWludAkJaWQsCi0Jc3RydWN0IHVzYl9oY2QJKmhjZCwKLQl1OAkJKmRhdGEsCi0JaW50CQlsZW4KLSkgeworc3RhdGljIHVuc2lnbmVkIHJoX3N0cmluZyhpbnQgaWQsIHN0cnVjdCB1c2JfaGNkICpoY2QsIHU4ICpkYXRhLCB1bnNpZ25lZCBsZW4pCit7CiAJY2hhciBidWYgWzEwMF07CiAKIAkvLyBsYW5ndWFnZSBpZHMKIAlpZiAoaWQgPT0gMCkgewogCQlidWZbMF0gPSA0OyAgICBidWZbMV0gPSAzOwkvKiA0IGJ5dGVzIHN0cmluZyBkYXRhICovCiAJCWJ1ZlsyXSA9IDB4MDk7IGJ1ZlszXSA9IDB4MDQ7CS8qIE1TRlQtc3BlYWsgZm9yICJlbi11cyIgKi8KLQkJbGVuID0gbWluIChsZW4sIDQpOworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCwgbGVuLCA0KTsKIAkJbWVtY3B5IChkYXRhLCBidWYsIGxlbik7CiAJCXJldHVybiBsZW47CiAKQEAgLTMzMiwxMCArMzI4LDcgQEAKIAl9IGVsc2UgaWYgKGlkID09IDMpIHsKIAkJc25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzICVzICVzIiwgaW5pdF91dHNuYW1lKCktPnN5c25hbWUsCiAJCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwgaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uKTsKLQotCS8vIHVuc3VwcG9ydGVkIElEcyAtLT4gInByb3RvY29sIHN0YWxsIgotCX0gZWxzZQotCQlyZXR1cm4gLUVQSVBFOworCX0KIAogCXN3aXRjaCAobGVuKSB7CQkvKiBBbGwgY2FzZXMgZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKQEAgLTM2MCw5ICszNTMsOCBAQAogCXU4CQl0YnVmIFtzaXplb2YgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IpXQogCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7CiAJY29uc3QgdTgJKmJ1ZnAgPSB0YnVmOwotCWludAkJbGVuID0gMDsKKwl1bnNpZ25lZAlsZW4gPSAwOwogCWludAkJc3RhdHVzOwotCWludAkJbjsKIAl1OAkJcGF0Y2hfd2FrZXVwID0gMDsKIAl1OAkJcGF0Y2hfcHJvdG9jb2wgPSAwOwogCkBAIC00NTYsMTAgKzQ0OCwxMSBAQAogCQkJCXBhdGNoX3dha2V1cCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfRFRfU1RSSU5HIDw8IDg6Ci0JCQluID0gcmhfc3RyaW5nICh3VmFsdWUgJiAweGZmLCBoY2QsIHVidWYsIHdMZW5ndGgpOwotCQkJaWYgKG4gPCAwKQorCQkJaWYgKCh3VmFsdWUgJiAweGZmKSA8IDQpCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gcmhfc3RyaW5nKHdWYWx1ZSAmIDB4ZmYsCisJCQkJCQloY2QsIHVidWYsIHdMZW5ndGgpOworCQkJZWxzZSAvKiB1bnN1cHBvcnRlZCBJRHMgLS0+ICJwcm90b2NvbCBzdGFsbCIgKi8KIAkJCQlnb3RvIGVycm9yOwotCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZ290byBlcnJvcjsKQEAgLTYyOSw3ICs2MjIsNyBAQAogewogCWludAkJcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0JaW50CQlsZW4gPSAxICsgKHVyYi0+ZGV2LT5tYXhjaGlsZCAvIDgpOworCXVuc2lnbmVkCWxlbiA9IDEgKyAodXJiLT5kZXYtPm1heGNoaWxkIC8gOCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7CiAJaWYgKGhjZC0+c3RhdHVzX3VyYiB8fCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCBsZW4pIHsKQEAgLTkwMSw3ICs4OTQsNyBAQAogCiAJbXV0ZXhfbG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCi0JdXNiX2Rldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwl1c2JfZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KTsKIAlyZXR2YWwgPSB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9ERVZJQ0VfU0laRSk7CiAJaWYgKHJldHZhbCAhPSBzaXplb2YgdXNiX2Rldi0+ZGVzY3JpcHRvcikgewogCQltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGNkNTBkODYuLmJlODZhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMzkyLDcgKzM5Miw3IEBACiB7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVyYi0+Y29udGV4dDsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7Ci0JaW50IGk7CisJdW5zaWduZWQgaTsKIAl1bnNpZ25lZCBsb25nIGJpdHM7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewpAQCAtMTMwNSw2ICsxMzA1LDcgQEAKIAkJcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRCh1ZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NldF9kZXZpY2Vfc3RhdGUpOwogCiAvKgogICogV1VTQiBkZXZpY2VzIGFyZSBzaW1wbGU6IHRoZXkgaGF2ZSBubyBodWJzIGJlaGluZCwgc28gdGhlIG1hcHBpbmcKQEAgLTI0NzEsMjAgKzI0NzIsMjAgQEAKIAkgKi8KIAlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CiAJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CS8qIGZpeGVkIGF0IDUxMiAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig1MTIpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgkJLyogZml4ZWQgYXQgNjQgKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CQkvKiA4LCAxNiwgMzIsIG9yIDY0ICovCiAJCS8qIHRvIGRldGVybWluZSB0aGUgZXAwIG1heHBhY2tldCBzaXplLCB0cnkgdG8gcmVhZAogCQkgKiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgdG8gZ2V0IGJNYXhQYWNrZXRTaXplMCBhbmQKIAkJICogdGhlbiBjb3JyZWN0IG91ciBpbml0aWFsIGd1ZXNzLgogCQkgKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX0xPVzoJCS8qIGZpeGVkIGF0IDggKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDgpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlnb3RvIGZhaWw7CkBAIC0zMzkyLDEwICszMzkzLDEwIEBACiAJCXVkZXYtPmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwkvKiBmb3IgZGlzY29ubmVjdCgpIGNhbGxzICovCiAJCWdvdG8gcmVfZW51bWVyYXRlOwogICAJfQotICAKKworCS8qIFJlc3RvcmUgdGhlIGRldmljZSdzIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoIXVkZXYtPmFjdGNvbmZpZykKIAkJZ290byBkb25lOwotCiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIDAsCiAJCQl1ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMCwKQEAgLTM0MDgsMTYgKzM0MDksMjUgQEAKICAgCX0KIAl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfQ09ORklHVVJFRCk7CiAKKwkvKiBQdXQgaW50ZXJmYWNlcyBiYWNrIGludG8gdGhlIHNhbWUgYWx0c2V0dGluZ3MgYXMgYmVmb3JlLgorCSAqIERvbid0IGJvdGhlciB0byBzZW5kIHRoZSBTZXQtSW50ZXJmYWNlIHJlcXVlc3QgZm9yIGludGVyZmFjZXMKKwkgKiB0aGF0IHdlcmUgYWxyZWFkeSBpbiBhbHRzZXR0aW5nIDA7IGJlc2lkZXMgYmVpbmcgdW5uZWNlc3NhcnksCisJICogbWFueSBkZXZpY2VzIGNhbid0IGhhbmRsZSBpdC4gIEluc3RlYWQganVzdCByZXNldCB0aGUgaG9zdC1zaWRlCisJICogZW5kcG9pbnQgc3RhdGUuCisJICovCiAJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmRlc2M7CiAKLQkJLyogc2V0X2ludGVyZmFjZSByZXNldHMgaG9zdCBzaWRlIHRvZ2dsZSBldmVuCi0JCSAqIGZvciBhbHRzZXR0aW5nIHplcm8uICB0aGUgaW50ZXJmYWNlIG1heSBoYXZlIG5vIGRyaXZlci4KLQkJICovCiAJCWRlc2MgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0JCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCi0JCQlkZXNjLT5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCWlmIChkZXNjLT5iQWx0ZXJuYXRlU2V0dGluZyA9PSAwKSB7CisJCQl1c2JfZGlzYWJsZV9pbnRlcmZhY2UodWRldiwgaW50ZiwgdHJ1ZSk7CisJCQl1c2JfZW5hYmxlX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCB0cnVlKTsKKwkJCXJldCA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCQlkZXNjLT5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCX0KIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoJnVkZXYtPmRldiwgImZhaWxlZCB0byByZXN0b3JlIGludGVyZmFjZSAlZCAiCiAJCQkJImFsdHNldHRpbmcgJWQgKGVycm9yPSVkKVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggNDllN2Y1Ni4uMzBhMDY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAkJcmV0dmFsID0gKGN0eC5zdGF0dXMgPT0gLUVOT0VOVCA/IC1FVElNRURPVVQgOiBjdHguc3RhdHVzKTsKIAogCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAotCQkJIiVzIHRpbWVkIG91dCBvbiBlcCVkJXMgbGVuPSVkLyVkXG4iLAorCQkJIiVzIHRpbWVkIG91dCBvbiBlcCVkJXMgbGVuPSV1LyV1XG4iLAogCQkJY3VycmVudC0+Y29tbSwKIAkJCXVzYl9lbmRwb2ludF9udW0oJnVyYi0+ZXAtPmRlc2MpLAogCQkJdXNiX3VyYl9kaXJfaW4odXJiKSA/ICJpbiIgOiAib3V0IiwKQEAgLTgwNCwxOCArODA0LDE2IEBACiAJCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCQkic3RyaW5nIGRlc2NyaXB0b3IgMCByZWFkIGVycm9yOiAlZFxuIiwKIAkJCQllcnIpOwotCQkJZ290byBlcnJvdXQ7CiAJCX0gZWxzZSBpZiAoZXJyIDwgNCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJzdHJpbmcgZGVzY3JpcHRvciAwIHRvbyBzaG9ydFxuIik7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvdXQ7CiAJCX0gZWxzZSB7Ci0JCQlkZXYtPmhhdmVfbGFuZ2lkID0gMTsKIAkJCWRldi0+c3RyaW5nX2xhbmdpZCA9IHRidWZbMl0gfCAodGJ1ZlszXSA8PCA4KTsKIAkJCS8qIGFsd2F5cyB1c2UgdGhlIGZpcnN0IGxhbmdpZCBsaXN0ZWQgKi8KIAkJCWRldl9kYmcoJmRldi0+ZGV2LCAiZGVmYXVsdCBsYW5ndWFnZSAweCUwNHhcbiIsCiAJCQkJZGV2LT5zdHJpbmdfbGFuZ2lkKTsKIAkJfQorCisJCWRldi0+aGF2ZV9sYW5naWQgPSAxOwogCX0KIAogCWVyciA9IHVzYl9zdHJpbmdfc3ViKGRldiwgZGV2LT5zdHJpbmdfbGFuZ2lkLCBpbmRleCwgdGJ1Zik7CkBAIC0xNzE5LDcgKzE3MTcsOCBAQAogCX0KIAlrZnJlZShuZXdfaW50ZXJmYWNlcyk7CiAKLQlpZiAoY3AtPnN0cmluZyA9PSBOVUxMKQorCWlmIChjcC0+c3RyaW5nID09IE5VTEwgJiYKKwkJCSEoZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUykpCiAJCWNwLT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKGRldiwgY3AtPmRlc2MuaUNvbmZpZ3VyYXRpb24pOwogCiAJLyogTm93IHRoYXQgYWxsIHRoZSBpbnRlcmZhY2VzIGFyZSBzZXQgdXAsIHJlZ2lzdGVyIHRoZW0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IGMwNzBiMzQuLmFiOTM5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtNTQsNiArNTQsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNjM4LCAweDBhMTMpLCAuZHJpdmVyX2luZm8gPQogCSAgVVNCX1FVSVJLX1NUUklOR19GRVRDSF8yNTUgfSwKIAorCS8qIFNhaXRlayBDeWJvcmcgR29sZCBKb3lzdGljayAqLworCXsgVVNCX0RFVklDRSgweDA2YTMsIDB4MDAwNiksIC5kcml2ZXJfaW5mbyA9CisJCQlVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUyB9LAorCiAJLyogTS1TeXN0ZW1zIEZsYXNoIERpc2sgUGlvbmVlcnMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOGVjLCAweDEwMDApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwppbmRleCA0Y2MyNDU2Li5jNjY3ODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgogI2luY2x1ZGUgInVzYi5oIgogCiAvKiBBY3RpdmUgY29uZmlndXJhdGlvbiBmaWVsZHMgKi8KQEAgLTgxMyw3ICs4MTQsOCBAQAogCWlmIChpbnRmLT5zeXNmc19maWxlc19jcmVhdGVkIHx8IGludGYtPnVucmVnaXN0ZXJpbmcpCiAJCXJldHVybiAwOwogCi0JaWYgKGFsdC0+c3RyaW5nID09IE5VTEwpCisJaWYgKGFsdC0+c3RyaW5nID09IE5VTEwgJiYKKwkJCSEodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MpKQogCQlhbHQtPnN0cmluZyA9IHVzYl9jYWNoZV9zdHJpbmcodWRldiwgYWx0LT5kZXNjLmlJbnRlcmZhY2UpOwogCWlmIChhbHQtPnN0cmluZykKIAkJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnRlcmZhY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91cmIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKaW5kZXggNThiYzVlMy4uMzM3NjA1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91cmIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAlpZiAoIXVyYiB8fCB1cmItPmhjcHJpdiB8fCAhdXJiLT5jb21wbGV0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2ID0gdXJiLT5kZXY7Ci0JaWYgKCghZGV2KSB8fCAoZGV2LT5zdGF0ZSA8IFVTQl9TVEFURV9ERUZBVUxUKSkKKwlpZiAoKCFkZXYpIHx8IChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogRm9yIG5vdywgZ2V0IHRoZSBlbmRwb2ludCBmcm9tIHRoZSBwaXBlLiAgRXZlbnR1YWxseSBkcml2ZXJzCkBAIC0zNzAsNyArMzcwLDcgQEAKIAl9CiAKIAkvKiB0aGUgSS9PIGJ1ZmZlciBtdXN0IGJlIG1hcHBlZC91bm1hcHBlZCwgZXhjZXB0IHdoZW4gbGVuZ3RoPTAgKi8KLQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgMCkKKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gSU5UX01BWCkKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IGU1NWZlZjUuLjc3MGIzZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0yNTQsNiArMjU0LDcgQEAKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAogCWJvb2xlYW4gIlBYQSAyN3giCiAJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBQWEEyN3gKKwlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgICBJbnRlbCdzIFBYQSAyN3ggc2VyaWVzIFhTY2FsZSBBUk0gdjVURSBwcm9jZXNzb3JzIGluY2x1ZGUKIAkgICBhbiBpbnRlZ3JhdGVkIGZ1bGwgc3BlZWQgVVNCIDEuMSBkZXZpY2UgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCmluZGV4IGFiZjgxOTIuLjgyNmYzYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwpAQCAtNTUxLDcgKzU1MSw3IEBACiAJCWRtYV9kZXNjLT5zdGF0dXMgPSBBTURfQUREQklUUyhkbWFfZGVzYy0+c3RhdHVzLAogCQkJCQkJVURDX0RNQV9TVFBfU1RTX0JTX0hPU1RfQlVTWSwKIAkJCQkJCVVEQ19ETUFfU1RQX1NUU19CUyk7Ci0JCWRtYV9kZXNjLT5idWZwdHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKERNQV9ET05UX1VTRSk7CisJCWRtYV9kZXNjLT5idWZwdHIgPSBjcHVfdG9fbGUzMihETUFfRE9OVF9VU0UpOwogCQlyZXEtPnRkX2RhdGEgPSBkbWFfZGVzYzsKIAkJcmVxLT50ZF9kYXRhX2xhc3QgPSBOVUxMOwogCQlyZXEtPmNoYWluX2xlbiA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCmluZGV4IDY1YjAzZTMuLmMyMmZhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCkBAIC0xMDE3LDcgKzEwMTcsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPSAwLAogCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAotCS53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCS53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KSwKIAkvKiBGSVhNRTogSSBoYXZlIG5vIGlkZWEgd2hhdCB0byBwdXQgaGVyZSAqLwogCS5iSW50ZXJ2YWwgPSAxLAogfTsKQEAgLTEyMDcsMjEgKzEyMDcsMjEgQEAKIC8qIEF2b2lkIG92ZXJseSBsb25nIGV4cHJlc3Npb25zICovCiBzdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZV9pc19kZXZfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcnEpCiB7Ci0JaWYgKGNycS0+d1ZhbHVlID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZV9pc19kZXZfdGVzdF9tb2RlKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNycSkKIHsKLQlpZiAoY3JxLT53VmFsdWUgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfREVWSUNFX1RFU1RfTU9ERSkpCisJaWYgKGNycS0+d1ZhbHVlID09IGNwdV90b19sZTE2KFVTQl9ERVZJQ0VfVEVTVF9NT0RFKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZV9pc19lcF9oYWx0KHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNycSkKIHsKLQlpZiAoY3JxLT53VmFsdWUgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfRU5EUE9JTlRfSEFMVCkpCisJaWYgKGNycS0+d1ZhbHVlID09IGNwdV90b19sZTE2KFVTQl9FTkRQT0lOVF9IQUxUKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAkJCXN0YXR1cyA9IGNwdV90b19sZTE2KHVkYy0+ZGV2c3RhdHVzKTsKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZQogCQkJCT09IChVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkpIHsKLQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7CisJCQlzdGF0dXMgPSBjcHVfdG9fbGUxNigwKTsKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZQogCQkJCT09IChVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0VORFBPSU5UKSkgewogCQkJc3RydWN0IHVzYmFfZXAgKnRhcmdldDsKQEAgLTEyNTAsMTIgKzEyNTAsMTIgQEAKIAogCQkJc3RhdHVzID0gMDsKIAkJCWlmIChpc19zdGFsbGVkKHVkYywgdGFyZ2V0KSkKLQkJCQlzdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUxNigxKTsKKwkJCQlzdGF0dXMgfD0gY3B1X3RvX2xlMTYoMSk7CiAJCX0gZWxzZQogCQkJZ290byBkZWxlZ2F0ZTsKIAogCQkvKiBXcml0ZSBkaXJlY3RseSB0byB0aGUgRklGTy4gTm8gcXVldWVpbmcgaXMgZG9uZS4gKi8KLQkJaWYgKGNycS0+d0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHNpemVvZihzdGF0dXMpKSkKKwkJaWYgKGNycS0+d0xlbmd0aCAhPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RhdHVzKSkpCiAJCQlnb3RvIHN0YWxsOwogCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX0lOOwogCQlfX3Jhd193cml0ZXcoc3RhdHVzLCBlcC0+Zmlmbyk7CkBAIC0xMjc0LDcgKzEyNzQsNyBAQAogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgewogCQkJc3RydWN0IHVzYmFfZXAgKnRhcmdldDsKIAotCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApCisJCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KDApCiAJCQkJCXx8ICFmZWF0dXJlX2lzX2VwX2hhbHQoY3JxKSkKIAkJCQlnb3RvIHN0YWxsOwogCQkJdGFyZ2V0ID0gZ2V0X2VwX2J5X2FkZHIodWRjLCBsZTE2X3RvX2NwdShjcnEtPndJbmRleCkpOwpAQCAtMTMwOCw3ICsxMzA4LDcgQEAKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKIAkJCXN0cnVjdCB1c2JhX2VwICp0YXJnZXQ7CiAKLQkJCWlmIChjcnEtPndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKQorCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBjcHVfdG9fbGUxNigwKQogCQkJCQl8fCAhZmVhdHVyZV9pc19lcF9oYWx0KGNycSkpCiAJCQkJZ290byBzdGFsbDsKIApAQCAtMTUxNCw3ICsxNTE0LDcgQEAKIAkJCSAqLwogCQkJZXAtPnN0YXRlID0gREFUQV9TVEFHRV9JTjsKIAkJfSBlbHNlIHsKLQkJCWlmIChjcnEuY3JxLndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSkKKwkJCWlmIChjcnEuY3JxLndMZW5ndGggIT0gY3B1X3RvX2xlMTYoMCkpCiAJCQkJZXAtPnN0YXRlID0gREFUQV9TVEFHRV9PVVQ7CiAJCQllbHNlCiAJCQkJZXAtPnN0YXRlID0gU1RBVFVTX1NUQUdFX0lOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKaW5kZXggNTQ5NWIxNy4uOTI4MTM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCkBAIC02Niw3ICs2Niw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfQ09NTSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKQEAgLTc0LDggKzc0LDggQEAKIAkvKiAuYk1heFBhY2tldFNpemUwID0gZihoYXJkd2FyZSkgKi8KIAogCS8qIFZlbmRvciBhbmQgcHJvZHVjdCBpZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBtb2R1bGUgcGFyYW1ldGVycy4gICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0RDX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDRENfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihDRENfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihDRENfUFJPRFVDVF9OVU0pLAogCS8qIC5iY2REZXZpY2UgPSBmKGhhcmR3YXJlKSAqLwogCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLwogCS8qIC5pUHJvZHVjdCA9IERZTkFNSUMgKi8KQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkJCWdhZGdldC0+bmFtZSwKIAkJCQljZGNfY29uZmlnX2RyaXZlci5sYWJlbCk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CisJCQljcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCmluZGV4IGJlYmY5MTEuLjIyYzY1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI2MjYsNyArMjYyNSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOwogCXVkYy0+Z2FkZ2V0LmVwMCA9IE5VTEw7CiAKLQlzdHJjcHkodWRjLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCWRldl9zZXRfbmFtZSgmdWRjLT5nYWRnZXQuZGV2LCAiZ2FkZ2V0Iik7CiAJdWRjLT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gZGV2LT5kbWFfbWFzazsKIAl1ZGMtPmdhZGdldC5kZXYucGFyZW50ICAgPSBkZXY7CiAJdWRjLT5nYWRnZXQuZGV2LnJlbGVhc2UgID0gdWRjX3JlbGVhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKaW5kZXggNWQxMWMyOS4uNTllODUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpAQCAtMTQ5LDE2ICsxNDksMTcgQEAKIGludCB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmdW5jdGlvbikKIHsKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBmdW5jdGlvbi0+Y29uZmlnLT5jZGV2OworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKIAlpbnQJCQkJc3RhdHVzID0gMDsKIAotCXNwaW5fbG9jaygmY2Rldi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNkZXYtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChjZGV2LT5kZWFjdGl2YXRpb25zID09IDApCiAJCXN0YXR1cyA9IHVzYl9nYWRnZXRfZGlzY29ubmVjdChjZGV2LT5nYWRnZXQpOwogCWlmIChzdGF0dXMgPT0gMCkKIAkJY2Rldi0+ZGVhY3RpdmF0aW9ucysrOwogCi0Jc3Bpbl91bmxvY2soJmNkZXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNkZXYtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMDEzLDcgKzEwMTQsNyBAQAogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwogCXN0cnVjdCB1c2JfZnVuY3Rpb24JCSpmOwogCi0JLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBhbmQgZGV2aWNlIGxldmVsCisJLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBsZXZlbAogCSAqIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcz8KIAkgKi8KIAlEQkcoY2RldiwgInN1c3BlbmRcbiIpOwpAQCAtMTAyMyw2ICsxMDI0LDggQEAKIAkJCQlmLT5zdXNwZW5kKGYpOwogCQl9CiAJfQorCWlmIChjb21wb3NpdGUtPnN1c3BlbmQpCisJCWNvbXBvc2l0ZS0+c3VzcGVuZChjZGV2KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEwMzEsMTAgKzEwMzQsMTIgQEAKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKIAlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKIAotCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgYW5kIGRldmljZSBsZXZlbAorCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgbGV2ZWwKIAkgKiBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3M/CiAJICovCiAJREJHKGNkZXYsICJyZXN1bWVcbiIpOworCWlmIChjb21wb3NpdGUtPnJlc3VtZSkKKwkJY29tcG9zaXRlLT5yZXN1bWUoY2Rldik7CiAJaWYgKGNkZXYtPmNvbmZpZykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGYsICZjZGV2LT5jb25maWctPmZ1bmN0aW9ucywgbGlzdCkgewogCQkJaWYgKGYtPnJlc3VtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCA5MDY0Njk2Li5hNTZiMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC0xNDM3LDcgKzE0MzcsNyBAQAogCQkJCQl9CiAJCQkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAxKQogCQkJCQkJYnVmIFsxXSA9IDA7Ci0JCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG1pbiAoMiwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbWluX3QodTMyLCAyLAogCQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAkJCQkJdmFsdWUgPSAwOwogCQkJCQlzdGF0dXMgPSAwOwpAQCAtMTYyNiw3ICsxNjI2LDcgQEAKIAkJaHViX2Rlc2NyaXB0b3IgKChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopIGJ1Zik7CiAJCWJyZWFrOwogCWNhc2UgR2V0SHViU3RhdHVzOgotCQkqKF9fbGUzMiAqKSBidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlicmVhazsKIAljYXNlIEdldFBvcnRTdGF0dXM6CiAJCWlmICh3SW5kZXggIT0gMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCmluZGV4IGEzNmIxMTcuLmNkMDkxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQlyZXR1cm4gMDsKIAogCQkvKiBCT1RIOiAgImhpZ2ggYmFuZHdpZHRoIiB3b3JrcyBvbmx5IGF0IGhpZ2ggc3BlZWQgKi8KLQkJaWYgKChkZXNjLT53TWF4UGFja2V0U2l6ZSAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMzw8MTEpKSkgeworCQlpZiAoKGRlc2MtPndNYXhQYWNrZXRTaXplICYgY3B1X3RvX2xlMTYoMzw8MTEpKSkgewogCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKIAkJCQlyZXR1cm4gMDsKIAkJCS8qIGNvbmZpZ3VyZSB5b3VyIGhhcmR3YXJlIHdpdGggZW5vdWdoIGJ1ZmZlcmluZyEhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDM3MjUyZDAuLmQwMDZkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNiAoMHgwMjAwKSwKIAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCkBAIC0xNjcsOCArMTY3LDggQEAKIAkgKiB3ZSBzdXBwb3J0LiAgKEFzIGRvZXMgYk51bUNvbmZpZ3VyYXRpb25zLikgIFRoZXNlIHZhbHVlcyBjYW4KIAkgKiBhbHNvIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMuCiAJICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2IChDRENfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNiAoQ0RDX1BST0RVQ1RfTlVNKSwKIAkvKiAuYmNkRGV2aWNlID0gZihoYXJkd2FyZSkgKi8KIAkvKiAuaU1hbnVmYWN0dXJlciA9IERZTkFNSUMgKi8KIAkvKiAuaVByb2R1Y3QgPSBEWU5BTUlDICovCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJCQlnYWRnZXQtPm5hbWUsCiAJCQkJZXRoX2NvbmZpZ19kcml2ZXIubGFiZWwpOwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOworCQkJY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYwppbmRleCBjMWQzNGRmLi43OTUzOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mKGFjbV9oZWFkZXJfZGVzYyksCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yCkBAIC0xNTksNyArMTU5LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAogCS5iSW50ZXJ2YWwgPQkJMSA8PCBHU19MT0cyX05PVElGWV9JTlRFUlZBTCwKIH07CiAKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCiAJLmJJbnRlcnZhbCA9CQlHU19MT0cyX05PVElGWV9JTlRFUlZBTCs0LAogfTsKIApAQCAtMjA1LDE0ICsyMDUsMTQgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgYWNtX2hzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqYWNtX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKaW5kZXggNGFlNTc5OS4uZWNmNWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgZWNtX3VuaW9uX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTE0OCw5ICsxNDgsOSBAQAogCiAJLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLwogCS8qIC5pTUFDQWRkcmVzcyA9IERZTkFNSUMgKi8KLQkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCi0JLndNYXhTZWdtZW50U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCi0JLndOdW1iZXJNQ0ZpbHRlcnMgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLAorCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CWNwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCisJLndNYXhTZWdtZW50U2l6ZSA9CWNwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAorCS53TnVtYmVyTUNGaWx0ZXJzID0JY3B1X3RvX2xlMTYoMCksCiAJLmJOdW1iZXJQb3dlckZpbHRlcnMgPQkwLAogfTsKIApAQCAtMTkyLDcgKzE5Miw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJMSA8PCBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDLAogfTsKIApAQCAtMjM2LDcgKzIzNiw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQyArIDQsCiB9Owogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lY21fb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZWNtX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCmluZGV4IDhhZmZlMWQuLmViNmRkZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfbG9vcF9zaW5rX2Rlc2MgPSB7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX2xvb3BiYWNrX2Rlc2NzW10gPSB7CkBAIC0zNTksNyArMzU5LDcgQEAKICAqIGxvb3BiYWNrX2FkZCAtIGFkZCBhIGxvb3BiYWNrIHRlc3RpbmcgY29uZmlndXJhdGlvbiB0byBhIGRldmljZQogICogQGNkZXY6IHRoZSBkZXZpY2UgdG8gc3VwcG9ydCB0aGUgbG9vcGJhY2sgY29uZmlndXJhdGlvbgogICovCi1pbnQgX19pbml0IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCitpbnQgX19pbml0IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSkKIHsKIAlpbnQgaWQ7CiAKQEAgLTM3Miw2ICszNzIsMTAgQEAKIAlsb29wYmFja19pbnRmLmlJbnRlcmZhY2UgPSBpZDsKIAlsb29wYmFja19kcml2ZXIuaUNvbmZpZ3VyYXRpb24gPSBpZDsKIAorCS8qIHN1cHBvcnQgYXV0b3Jlc3VtZSBmb3IgcmVtb3RlIHdha2V1cCB0ZXN0aW5nICovCisJaWYgKGF1dG9yZXN1bWUpCisJCXNvdXJjZXNpbmtfZHJpdmVyLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisKIAkvKiBzdXBwb3J0IE9URyBzeXN0ZW1zICovCiAJaWYgKGdhZGdldF9pc19vdGcoY2Rldi0+Z2FkZ2V0KSkgewogCQlsb29wYmFja19kcml2ZXIuZGVzY3JpcHRvcnMgPSBvdGdfZGVzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwppbmRleCAzOGFhODk2Li40NmQ2MjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9jZGNfaGVhZGVyX2Rlc2MpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX0hFQURFUl9UWVBFLAotCS5iY2RDREMJCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTIwKSwKKwkuYmNkQ0RDCQkJPSBjcHVfdG9fbGUxNigweDAxMjApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2Mgb2JleF9jZGNfdW5pb25fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTM4LDcgKzEzOCw3IEBACiAJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfZGVzYyksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVTQl9DRENfT0JFWF9UWVBFLAotCS5iY2RWZXJzaW9uCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkuYmNkVmVyc2lvbgkJPSBjcHVfdG9fbGUxNigweDAxMDApLAogfTsKIAogLyogSGlnaC1TcGVlZCBTdXBwb3J0ICovCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplCQk9IGNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfaHNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTU4LDcgKzE1OCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplCQk9IGNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYwppbmRleCBjMDkxNmM3Li5jMWFiZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYwpAQCAtNzksNyArNzksNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBwbl9oZWFkZXJfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MKQEAgLTg3LDcgKzg3LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgcG5fcGhvbmV0X2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfUEhPTkVUX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MTUwNSksIC8qID8/PyAqLworCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgxNTA1KSwgLyogPz8/ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19wbl9mdW5jdGlvbltdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKaW5kZXggM2E4YmI1My4uMzI3OWE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKIAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY19jYWxsX21nbXRfZGVzY3JpcHRvciBjYWxsX21nbXRfZGVzY3JpcHRvciBfX2luaXRkYXRhID0gewpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKIH07CiAKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKIH07CiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTIzOSw3ICsyMzksNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKQEAgLTQzNyw3ICs0MzcsNyBAQAogCQlEQkcoY2RldiwgInJuZGlzIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCiAJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAogCQkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOwotCQlyZXEtPnplcm8gPSAwOworCQlyZXEtPnplcm8gPSAodmFsdWUgPCB3X2xlbmd0aCk7CiAJCXJlcS0+bGVuZ3RoID0gdmFsdWU7CiAJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGNkZXYtPmdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAodmFsdWUgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYwppbmRleCBmZTU2NzRkYi4uZGIwYWE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKQEAgLTg5LDE0ICs4OSwxNCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc2VyX2hzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3Nlcl9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKaW5kZXggZGM4NGQyNi4uYmZmZTkxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYwpAQCAtNTksNyArNTksNiBAQAogCiAJc3RydWN0IHVzYl9lcAkJKmluX2VwOwogCXN0cnVjdCB1c2JfZXAJCSpvdXRfZXA7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJcmVzdW1lOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9zb3VyY2VzaW5rICpmdW5jX3RvX3NzKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCkBAIC02NywxMCArNjYsNiBAQAogCXJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfc291cmNlc2luaywgZnVuY3Rpb24pOwogfQogCi1zdGF0aWMgdW5zaWduZWQgYXV0b3Jlc3VtZTsKLW1vZHVsZV9wYXJhbShhdXRvcmVzdW1lLCB1aW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoYXV0b3Jlc3VtZSwgInplcm8sIG9yIHNlY29uZHMgYmVmb3JlIHJlbW90ZSB3YWtldXAiKTsKLQogc3RhdGljIHVuc2lnbmVkIHBhdHRlcm47CiBtb2R1bGVfcGFyYW0ocGF0dGVybiwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBhdHRlcm4sICIwID0gYWxsIHplcm9lcywgMSA9IG1vZDYzICIpOwpAQCAtMTE4LDcgKzExMyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc2lua19kZXNjID0gewpAQCAtMTI2LDcgKzEyMSw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19zb3VyY2Vfc2lua19kZXNjc1tdID0gewpAQCAtMTU1LDIxICsxNTAsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBzb3VyY2VzaW5rX2F1dG9yZXN1bWUodW5zaWduZWQgbG9uZyBfYykKLXsKLQlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSAodm9pZCAqKV9jOwotCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnID0gY2Rldi0+Z2FkZ2V0OwotCi0JLyogTm9ybWFsbHkgdGhlIGhvc3Qgd291bGQgYmUgd29rZW4gdXAgZm9yIHNvbWV0aGluZwotCSAqIG1vcmUgc2lnbmlmaWNhbnQgdGhhbiBqdXN0IGEgdGltZXIgZmlyaW5nOyBsaWtlbHkKLQkgKiBiZWNhdXNlIG9mIHNvbWUgZGlyZWN0IHVzZXIgcmVxdWVzdC4KLQkgKi8KLQlpZiAoZy0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKLQkJaW50IHN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwKGcpOwotCQlEQkcoY2RldiwgIiVzIC0tPiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JfQotfQotCiBzdGF0aWMgaW50IF9faW5pdAogc291cmNlc2lua19iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKIHsKQEAgLTE5OCw5ICsxNzgsNiBAQAogCQlnb3RvIGF1dG9jb25mX2ZhaWw7CiAJc3MtPm91dF9lcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLwogCi0Jc2V0dXBfdGltZXIoJnNzLT5yZXN1bWUsIHNvdXJjZXNpbmtfYXV0b3Jlc3VtZSwKLQkJCSh1bnNpZ25lZCBsb25nKSBjLT5jZGV2KTsKLQogCS8qIHN1cHBvcnQgaGlnaCBzcGVlZCBoYXJkd2FyZSAqLwogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpIHsKIAkJaHNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CkBAIC0zNTksNyArMzM2LDYgQEAKIAogCWNkZXYgPSBzcy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2OwogCWRpc2FibGVfZW5kcG9pbnRzKGNkZXYsIHNzLT5pbl9lcCwgc3MtPm91dF9lcCk7Ci0JZGVsX3RpbWVyKCZzcy0+cmVzdW1lKTsKIAlWREJHKGNkZXYsICIlcyBkaXNhYmxlZFxuIiwgc3MtPmZ1bmN0aW9uLm5hbWUpOwogfQogCkBAIC00MjYsMzAgKzQwMiw2IEBACiAJZGlzYWJsZV9zb3VyY2Vfc2luayhzcyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNvdXJjZXNpbmtfc3VzcGVuZChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQotewotCXN0cnVjdCBmX3NvdXJjZXNpbmsJKnNzID0gZnVuY190b19zcyhmKTsKLQlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7Ci0KLQlpZiAoY2Rldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKLQkJcmV0dXJuOwotCi0JaWYgKGF1dG9yZXN1bWUpIHsKLQkJbW9kX3RpbWVyKCZzcy0+cmVzdW1lLCBqaWZmaWVzICsgKEhaICogYXV0b3Jlc3VtZSkpOwotCQlEQkcoY2RldiwgInN1c3BlbmQsIHdha2V1cCBpbiAlZCBzZWNvbmRzXG4iLCBhdXRvcmVzdW1lKTsKLQl9IGVsc2UKLQkJREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOwotfQotCi1zdGF0aWMgdm9pZCBzb3VyY2VzaW5rX3Jlc3VtZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQotewotCXN0cnVjdCBmX3NvdXJjZXNpbmsJKnNzID0gZnVuY190b19zcyhmKTsKLQlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7Ci0KLQlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JZGVsX3RpbWVyKCZzcy0+cmVzdW1lKTsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBfX2luaXQgc291cmNlc2lua19iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCkBAIC00NjcsOCArNDE5LDYgQEAKIAlzcy0+ZnVuY3Rpb24udW5iaW5kID0gc291cmNlc2lua191bmJpbmQ7CiAJc3MtPmZ1bmN0aW9uLnNldF9hbHQgPSBzb3VyY2VzaW5rX3NldF9hbHQ7CiAJc3MtPmZ1bmN0aW9uLmRpc2FibGUgPSBzb3VyY2VzaW5rX2Rpc2FibGU7Ci0Jc3MtPmZ1bmN0aW9uLnN1c3BlbmQgPSBzb3VyY2VzaW5rX3N1c3BlbmQ7Ci0Jc3MtPmZ1bmN0aW9uLnJlc3VtZSA9IHNvdXJjZXNpbmtfcmVzdW1lOwogCiAJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmc3MtPmZ1bmN0aW9uKTsKIAlpZiAoc3RhdHVzKQpAQCAtNTU5LDcgKzUwOSw3IEBACiAgKiBzb3VyY2VzaW5rX2FkZCAtIGFkZCBhIHNvdXJjZS9zaW5rIHRlc3RpbmcgY29uZmlndXJhdGlvbiB0byBhIGRldmljZQogICogQGNkZXY6IHRoZSBkZXZpY2UgdG8gc3VwcG9ydCB0aGUgY29uZmlndXJhdGlvbgogICovCi1pbnQgX19pbml0IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK2ludCBfX2luaXQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpCiB7CiAJaW50IGlkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCmluZGV4IGZlMTgzMjguLmE5Yzk4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKIAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY19tZGxtX2Rlc2MgbWRsbV9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xMTYsNyArMTE2LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19NRExNX1RZUEUsCiAKLQkuYmNkVmVyc2lvbiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCisJLmJjZFZlcnNpb24gPQkJY3B1X3RvX2xlMTYoMHgwMTAwKSwKIAkuYkdVSUQgPSB7CiAJCTB4NWQsIDB4MzQsIDB4Y2YsIDB4NjYsIDB4MTEsIDB4MTgsIDB4MTEsIDB4ZDYsCiAJCTB4YTIsIDB4MWEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2EsIDB4OWEsIDB4N2YsCkBAIC0xNDQsOSArMTQ0LDkgQEAKIAogCS8qIHRoaXMgZGVzY3JpcHRvciBhY3R1YWxseSBhZGRzIHZhbHVlLCBzdXJwcmlzZSEgKi8KIAkvKiAuaU1BQ0FkZHJlc3MgPSBEWU5BTUlDICovCi0JLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JX19jb25zdGFudF9jcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLwotCS53TWF4U2VnbWVudFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAotCS53TnVtYmVyTUNGaWx0ZXJzID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSwKKwkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQljcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLworCS53TWF4U2VnbWVudFNpemUgPQljcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CWNwdV90b19sZTE2KDApLAogCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKIH07CiAKQEAgLTE4Niw3ICsxODYsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTk0LDcgKzE5NCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IDFhYjlkYWMuLjVjMDMwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTg0NywxMyArODQ3LDEzIEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCiAKIAkvKiBUaGUgbmV4dCB0aHJlZSB2YWx1ZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX0lEKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfSUQpLAotCS5iY2REZXZpY2UgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweGZmZmYpLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX0lEKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX0lEKSwKKwkuYmNkRGV2aWNlID0JCWNwdV90b19sZTE2KDB4ZmZmZiksCiAKIAkuaU1hbnVmYWN0dXJlciA9CVNUUklOR19NQU5VRkFDVFVSRVIsCiAJLmlQcm9kdWN0ID0JCVNUUklOR19QUk9EVUNULApAQCAtOTI2LDcgKzkyNiw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNigyKSwKIAkuYkludGVydmFsID0JCTMyLAkvLyBmcmFtZXMgLT4gMzIgbXMKIH07CiAKQEAgLTk1NCw3ICs5NTQsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAogCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCkBAIC05NjcsNyArOTY3LDcgQEAKIAogCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfYnVsa19pbl9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgpAQCAtOTc3LDcgKzk3Nyw3IEBACiAKIAkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfb3V0X2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiAJLmJJbnRlcnZhbCA9CQkxLAkvLyBOQUsgZXZlcnkgMSB1ZnJhbWUKIH07CiAKQEAgLTk4OCw3ICs5ODgsNyBAQAogCiAJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19pbnRyX2luX2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDIpLAogCS5iSW50ZXJ2YWwgPQkJOSwJLy8gMioqKDktMSkgPSAyNTYgdWZyYW1lcyAtPiAzMiBtcwogfTsKIApAQCAtMTcxMSw3ICsxNzExLDkgQEAKIAkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfV1JJVEVfUFJPVEVDVEVEOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJc3Bpbl9sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CiAJY3VybHVuLT5maWxwLT5mX2ZsYWdzICY9IH5PX1NZTkM7CS8vIERlZmF1bHQgaXMgbm90IHRvIHdhaXQKKwlzcGluX3VubG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOwogCiAJLyogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncwogCSAqIG5vdCB0b28gYmlnICovCkBAIC0xNzI4LDggKzE3MzAsMTEgQEAKIAkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpCS8vIEZVQQorCQlpZiAoZnNnLT5jbW5kWzFdICYgMHgwOCkgewkvLyBGVUEKKwkJCXNwaW5fbG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOwogCQkJY3VybHVuLT5maWxwLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwkJCXNwaW5fdW5sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CisJCX0KIAl9CiAJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CkBAIC0yNjQ2LDcgKzI2NTEsNyBAQAogCQlzdHJ1Y3QgYnVsa19jc193cmFwCSpjc3cgPSBiaC0+YnVmOwogCiAJCS8qIFN0b3JlIGFuZCBzZW5kIHRoZSBCdWxrLW9ubHkgQ1NXICovCi0JCWNzdy0+U2lnbmF0dXJlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihVU0JfQlVMS19DU19TSUcpOworCQljc3ctPlNpZ25hdHVyZSA9IGNwdV90b19sZTMyKFVTQl9CVUxLX0NTX1NJRyk7CiAJCWNzdy0+VGFnID0gZnNnLT50YWc7CiAJCWNzdy0+UmVzaWR1ZSA9IGNwdV90b19sZTMyKGZzZy0+cmVzaWR1ZSk7CiAJCWNzdy0+U3RhdHVzID0gc3RhdHVzOwpAQCAtMzA4OSw3ICszMDk0LDcgQEAKIAogCS8qIElzIHRoZSBDQlcgdmFsaWQ/ICovCiAJaWYgKHJlcS0+YWN0dWFsICE9IFVTQl9CVUxLX0NCX1dSQVBfTEVOIHx8Ci0JCQljYnctPlNpZ25hdHVyZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJY2J3LT5TaWduYXR1cmUgIT0gY3B1X3RvX2xlMzIoCiAJCQkJVVNCX0JVTEtfQ0JfU0lHKSkgewogCQlEQkcoZnNnLCAiaW52YWxpZCBDQlc6IGxlbiAldSBzaWcgMHgleFxuIiwKIAkJCQlyZXEtPmFjdHVhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwppbmRleCBkOGQ5YTUyLi45ZDdiOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCkBAIC0xODAyLDcgKzE4MDIsOCBAQAogCiBvdXQ6CiAJaWYgKHJldHZhbCkKLQkJcHJpbnRrKCJnYWRnZXQgZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsCisJCSAgICAgICByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTE4NDcsNyArMTg0OCw4IEBACiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKIAotCXByaW50aygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKKwkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMjQ1NSw3ICsyNDU3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKLQlwcmludGsoIiVzIHVucmVnaXN0ZXJlZFxuIiwgZHJpdmVyX2Rlc2MpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIHVucmVnaXN0ZXJlZFxuIiwgZHJpdmVyX2Rlc2MpOwogfQogCiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmgKaW5kZXggZGQyZjE2YS4uZTg0YjNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaApAQCAtMTksNyArMTksNyBAQAogCQlzdHJ1Y3QgdXNiX2VwICppbiwgc3RydWN0IHVzYl9lcCAqb3V0KTsKIAogLyogY29uZmlndXJhdGlvbi1zcGVjaWZpYyBsaW5rdXAgKi8KLWludCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOwotaW50IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOworaW50IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKTsKK2ludCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpOwogCiAjZW5kaWYgLyogX19HX1pFUk9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwppbmRleCA2MGQzZjllLi5iOTMxMmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpAQCAtMTk5LDEwICsxOTksMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9ERVZJQ0VfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKQEAgLTI0MSw4ICsyNDEsOCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKLQkuYmNkQURDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpKSwKKwkuYmNkQURDID0JCWNwdV90b19sZTE2KDB4MDEwMCksCisJLndUb3RhbExlbmd0aCA9CQljcHVfdG9fbGUxNihVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSkpLAogCS5iSW5Db2xsZWN0aW9uID0JMSwKIAkuYmFJbnRlcmZhY2VOciA9IHsKIAkJWzBdID0JCUdNSURJX01TX0lOVEVSRkFDRSwKQEAgLTI2NSw4ICsyNjUsOCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9NU19IRUFERVJfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKLQkuYmNkTVNDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RUX01TX0hFQURFUl9TSVpFCisJLmJjZE1TQyA9CQljcHVfdG9fbGUxNigweDAxMDApLAorCS53VG90YWxMZW5ndGggPQkJY3B1X3RvX2xlMTYoVVNCX0RUX01TX0hFQURFUl9TSVpFCiAJCQkJKyAyKlVTQl9EVF9NSURJX0lOX1NJWkUKIAkJCQkrIDIqVVNCX0RUX01JRElfT1VUX1NJWkUoMSkpLAogfTsKQEAgLTEwOTksMTAgKzEwOTksOSBAQAogCQkuZGV2X2ZyZWUgPSBnbWlkaV9zbmRfZnJlZSwKIAl9OwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpIHsKLQkJRVJST1IoZGV2LCAic25kX2NhcmRfbmV3IGZhaWxlZFxuIik7Ci0JCWVyciA9IC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlFUlJPUihkZXYsICJzbmRfY2FyZF9jcmVhdGUgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAlkZXYtPmNhcmQgPSBjYXJkOwpAQCAtMTIyNyw3ICsxMjI2LDcgQEAKIAkJICovCiAJCXByX3dhcm5pbmcoIiVzOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCiAJCQlzaG9ydG5hbWUsIGdhZGdldC0+bmFtZSk7Ci0JCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg5OTk5KTsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHg5OTk5KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCA2MzQxOWM0Li5kZTAxMGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAKIAkJCQkvKiBhY3RpdmUgZW5kcG9pbnQgKi8KIAkJCQlpZiAodG1wID4gMyB8fCAoIWRldi0+ZXBbdG1wXS5kZXNjICYmIHRtcCAhPSAwKSkKIAkJCQkJZ290byBzdGFsbDsKLQkJCQlpZiAoY3RybC53SW5kZXggJiBfX2NvbnN0YW50X2NwdV90b19sZTE2KAorCQkJCWlmIChjdHJsLndJbmRleCAmIGNwdV90b19sZTE2KAogCQkJCQkJVVNCX0RJUl9JTikpIHsKIAkJCQkJaWYgKCFkZXYtPmVwW3RtcF0uaXNfaW4pCiAJCQkJCQlnb3RvIHN0YWxsOwpAQCAtMTQ4MCw3ICsxNDgwLDcgQEAKIAkJCQkJaWYgKGRldi0+ZXBbdG1wXS5pc19pbikKIAkJCQkJCWdvdG8gc3RhbGw7CiAJCQkJfQotCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KAorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigKIAkJCQkJCVVTQl9FTkRQT0lOVF9IQUxUKSkKIAkJCQkJZ290byBzdGFsbDsKIAkJCQlpZiAodG1wKQpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIAkJCQlyZXR1cm47CiAJCQljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CiAJCQkJLyogZGV2aWNlIHJlbW90ZSB3YWtldXA6IGFsd2F5cyBjbGVhciAqLwotCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpKQorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigxKSkKIAkJCQkJZ290byBzdGFsbDsKIAkJCQlWREJHKGRldiwgImNsZWFyIGRldiByZW1vdGUgd2FrZXVwXG4iKTsKIAkJCQlnb3RvIHN1Y2NlZWQ7CkBAIC0xNTE5LDcgKzE1MTksNyBAQAogCWRldi0+cmVxX2NvbmZpZyA9IChjdHJsLmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04KIAkJCQkmJiBjdHJsLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKTsKIAlpZiAodW5saWtlbHkoZGV2LT5yZXFfY29uZmlnKSkKLQkJZGV2LT5jb25maWd1cmVkID0gKGN0cmwud1ZhbHVlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkpOworCQlkZXYtPmNvbmZpZ3VyZWQgPSAoY3RybC53VmFsdWUgIT0gY3B1X3RvX2xlMTYoMCkpOwogCiAJLyogZGVsZWdhdGUgZXZlcnl0aGluZyB0byB0aGUgZ2FkZ2V0IGRyaXZlci4KIAkgKiBpdCBtYXkgcmVzcG9uZCBhZnRlciB0aGlzIGlycSBoYW5kbGVyIHJldHVybnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwppbmRleCA3N2M1ZDBhLi4xNjg2NThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJZHJpdmVyL3VzYi9nYWRnZXQvaW14X3VkYy5jCiAgKgotICoJQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgTGVlKGVlbWlrZUBnbWFpbC5jb20pCisgKglDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBMZWUgPGVlbWlrZUBnbWFpbC5jb20+CiAgKglDb3B5cmlnaHQgKEMpIDIwMDggRGFyaXVzIEF1Z3VsaXMgPGF1Z3VsaXMuZGFyaXVzQGdtYWlsLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KQEAgLTUxLDcgKzUyLDggQEAKIHZvaWQgaW14X3VkY19lbmFibGUoc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQogewogCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfRkVfRU5BIHwgQ1RSTF9BRkVfRU5BLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9GRV9FTkEgfCBDVFJMX0FGRV9FTkEsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwogfQogCkBAIC0xMjYsNyArMTI4LDggQEAKIAkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKIAkJCQlfX3Jhd193cml0ZWIoZXBfY29uZltqXSwKIAkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9EREFUKTsKLQkJCQlkbyB7fSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9EQURSKQorCQkJCWRvIHt9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlCisJCQkJCQkJCSsgVVNCX0RBRFIpCiAJCQkJCSYgREFEUl9CU1kpOwogCQkJfQogCQl9CkBAIC0xODMsNyArMTg2LDggQEAKIAkJdGVtcCA9IChFUF9ESVIoaW14X2VwKSA8PCA3KSB8IChtYXggPDwgNSkKIAkJCXwgKGlteF9lcC0+Ym1BdHRyaWJ1dGVzIDw8IDMpOwogCQlfX3Jhd193cml0ZWwodGVtcCwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKLQkJX19yYXdfd3JpdGVsKHRlbXAgfCBFUFNUQVRfRkxVU0gsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSk7CisJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgRVBTVEFUX0ZMVVNILAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKIAkJRF9JTkkoaW14X3VzYi0+ZGV2LCAiPCVzPiBlcCVkX3N0YXQgJTA4eFxuIiwgX19mdW5jX18sIGksCiAJCQlfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpKTsKIAl9CkBAIC0yNzgsMTUgKzI4MiwxOCBAQAogCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGlteF9lcC0+aW14X3VzYjsKIAlpbnQgdGVtcCwgaTsKIAotCURfRVJSKGlteF91c2ItPmRldiwgIjwlcz4gRm9yY2VkIHN0YWxsIG9uICVzXG4iLCBfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKKwlEX0VSUihpbXhfdXNiLT5kZXYsCisJCSI8JXM+IEZvcmNlZCBzdGFsbCBvbiAlc1xuIiwgX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CiAKIAlpbXhfZmx1c2goaW14X2VwKTsKIAogCS8qIFNwZWNpYWwgY2FyZSBmb3IgZXAwICovCi0JaWYgKEVQX05PKGlteF9lcCkpIHsKKwlpZiAoIUVQX05PKGlteF9lcCkpIHsKIAkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSIHwgQ1RSTF9DTURFUlJPUiwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJZG8geyB9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpICYgQ1RSTF9DTURPVkVSKTsKKwkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIgfCBDVFJMX0NNREVSUk9SLAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKKwkJZG8geyB9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpCisJCQkJCQkmIENUUkxfQ01ET1ZFUik7CiAJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCQlfX3Jhd193cml0ZWwodGVtcCAmIH5DVFJMX0NNREVSUk9SLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCX0KQEAgLTI5NiwxMiArMzAzLDEzIEBACiAJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkgKyspIHsKLQkJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOworCQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCQkJaWYgKCEodGVtcCAmIEVQU1RBVF9TVEFMTCkpCiAJIAkJCWJyZWFrOwogCSAJCXVkZWxheSgyMCk7CiAJIAl9Ci0JCWlmIChpID09IDUwKQorCQlpZiAoaSA9PSAxMDApCiAJCQlEX0VSUihpbXhfdXNiLT5kZXYsICI8JXM+IE5vbiBmaW5pc2hlZCBzdGFsbCBvbiAlc1xuIiwKIAkJCQlfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKIAl9CkBAIC0zMjUsNyArMzMzLDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAotc3RhdGljIHZvaWQgZXBfYWRkX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBlcF9hZGRfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQogewogCWlmICh1bmxpa2VseSghcmVxKSkKIAkJcmV0dXJuOwpAQCAtMzM0LDcgKzM0Myw4IEBACiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmlteF9lcC0+cXVldWUpOwogfQogCi1zdGF0aWMgdm9pZCBlcF9kZWxfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwX2RlbF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCiB7CiAJaWYgKHVubGlrZWx5KCFyZXEpKQogCQlyZXR1cm47CkBAIC0zNDMsNyArMzUzLDggQEAKIAlyZXEtPmluX3VzZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQogewogCWVwX2RlbF9yZXF1ZXN0KGlteF9lcCwgcmVxKTsKIApAQCAtNDk0LDcgKzUwNSw4IEBACiAJCQkJX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSwgcmVxLAogCQkJCWNvbXBsZXRlZCA/ICJjb21wbGV0ZWQiIDogIm5vdCBjb21wbGV0ZWQiKTsKIAkJCWlmICghRVBfTk8oaW14X2VwKSkKLQkJCQllcDBfY2hnX3N0YXQoX19mdW5jX18sIGlteF9lcC0+aW14X3VzYiwgRVAwX0lETEUpOworCQkJCWVwMF9jaGdfc3RhdChfX2Z1bmNfXywKKwkJCQkJCWlteF9lcC0+aW14X3VzYiwgRVAwX0lETEUpOwogCQl9CiAJfQogCkBAIC01MzksMTAgKzU1MSw5IEBACiAJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZpbXhfZXAtPnF1ZXVlKSkKKwlpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoaW14X2VwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgaW14X3JlcXVlc3QsIHF1ZXVlKTsKIAotCWlmIChyZXEpIHsKIAkJc3dpdGNoIChpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlKSB7CiAKIAkJY2FzZSBFUDBfSU5fREFUQV9QSEFTRToJCQkvKiBHRVRfREVTQ1JJUFRPUiAqLwpAQCAtNTYxLDYgKzU3MiwxMCBAQAogCQl9CiAJfQogCisJZWxzZQorCQlEX0VSUihpbXhfZXAtPmlteF91c2ItPmRldiwgIjwlcz4gbm8gcmVxdWVzdCBvbiAlc1xuIiwKKwkJCQkJCV9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTgzLDcgKzU5OCw4IEBACiAJCQkJIjwlcz4gbm8gc2V0dXAgcGFja2V0IHJlY2VpdmVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHN0YWxsOwogCQl9Ci0JCXUud29yZFtpXSA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKwlVU0JfRVBfRkRBVChFUF9OTyhpbXhfZXApKSk7CisJCXUud29yZFtpXSA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0ZEQVQoRVBfTk8oaW14X2VwKSkpOwogCX0KIAogCXRlbXAgPSBpbXhfZXBfZW1wdHkoaW14X2VwKTsKQEAgLTc1OSw3ICs3NzUsNyBAQAogCSovCiAJaWYgKGlteF91c2ItPnNldF9jb25maWcgJiYgIUVQX05PKGlteF9lcCkpIHsKIAkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCURfRVBYKGlteF91c2ItPmRldiwKKwkJRF9FUlIoaW14X3VzYi0+ZGV2LAogCQkJIjwlcz4gZ2FkZ2V0IHJlcGx5IHNldCBjb25maWdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzc5LDI4ICs3OTUsMjkgQEAKIAkJcmV0dXJuIC1FU0hVVERPV047CiAJfQogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCiAJLyogRGVidWcgKi8KIAlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IGVwJWQgJXMgcmVxdWVzdCBmb3IgWyVkXSBieXRlc1xuIiwKIAkJX19mdW5jX18sIEVQX05PKGlteF9lcCksCi0JCSgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSU5fREFUQV9QSEFTRSkKLQkJfHwgKEVQX05PKGlteF9lcCkgJiYgRVBfRElSKGlteF9lcCkpKSA/ICJJTiIgOiAiT1VUIiwgdXNiX3JlcS0+bGVuZ3RoKTsKKwkJKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlCisJCQkJCQkJPT0gRVAwX0lOX0RBVEFfUEhBU0UpCisJCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkKKwkJCQkJPyAiSU4iIDogIk9VVCIsIHVzYl9yZXEtPmxlbmd0aCk7CiAJZHVtcF9yZXEoX19mdW5jX18sIGlteF9lcCwgdXNiX3JlcSk7CiAKIAlpZiAoaW14X2VwLT5zdG9wcGVkKSB7CiAJCXVzYl9yZXEtPnN0YXR1cyA9IC1FU0hVVERPV047Ci0JCXJldCA9IC1FU0hVVERPV047Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVTSFVURE9XTjsKIAl9CiAKIAlpZiAocmVxLT5pbl91c2UpIHsKIAkJRF9FUlIoaW14X3VzYi0+ZGV2LAogCQkJIjwlcz4gcmVmdXNpbmcgdG8gcXVldWUgcmVxICVwIChhbHJlYWR5IHF1ZXVlZClcbiIsCiAJCQlfX2Z1bmNfXywgcmVxKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCXVzYl9yZXEtPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAl1c2JfcmVxLT5hY3R1YWwgPSAwOwogCkBAIC04MTAsNyArODI3LDcgQEAKIAkJcmV0ID0gaGFuZGxlX2VwMChpbXhfZXApOwogCWVsc2UKIAkJcmV0ID0gaGFuZGxlX2VwKGlteF9lcCk7Ci1vdXQ6CisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk5Nyw3MSArMTAxNCwzMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQorLyoKKyAqIENhbGxlZCB3aGVuIHRpbWVyIGV4cGlyZXMuCisgKiBUaW1lciBpcyBzdGFydGVkIHdoZW4gQ0ZHX0NIRyBpcyByZWNlaXZlZC4KKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NvbmZpZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9ICh2b2lkICopZGF0YTsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHU7CiAJaW50IHRlbXAsIGNmZywgaW50ZiwgYWx0OwotCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKIAotCWlmIChpbnRyICYgKElOVFJfV0FLRVVQIHwgSU5UUl9TVVNQRU5EIHwgSU5UUl9SRVNVTUUgfCBJTlRSX1JFU0VUX1NUQVJUCi0JCQl8IElOVFJfUkVTRVRfU1RPUCB8IElOVFJfQ0ZHX0NIRykpIHsKLQkJCQlkdW1wX2ludHIoX19mdW5jX18sIGludHIsIGlteF91c2ItPmRldik7Ci0JCQkJZHVtcF91c2Jfc3RhdChfX2Z1bmNfXywgaW14X3VzYik7Ci0JfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZiAoIWlteF91c2ItPmRyaXZlcikgewotCQkvKmlteF91ZGNfZGlzYWJsZShpbXhfdXNiKTsqLwotCQlnb3RvIGVuZF9pcnE7Ci0JfQorCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOworCWNmZyAgPSAodGVtcCAmIFNUQVRfQ0ZHKSA+PiA1OworCWludGYgPSAodGVtcCAmIFNUQVRfSU5URikgPj4gMzsKKwlhbHQgID0gIHRlbXAgJiBTVEFUX0FMVFNFVDsKIAotCWlmIChpbnRyICYgSU5UUl9XQUtFVVApIHsKLQkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTgotCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+cmVzdW1lKQotCQkJCWlteF91c2ItPmRyaXZlci0+cmVzdW1lKCZpbXhfdXNiLT5nYWRnZXQpOwotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7Ci0JfQorCURfUkVRKGlteF91c2ItPmRldiwKKwkJIjwlcz4gb3JpZyBjb25maWcgQz0lZCwgST0lZCwgQT0lZCAvICIKKwkJInJlcSBjb25maWcgQz0lZCwgST0lZCwgQT0lZFxuIiwKKwkJX19mdW5jX18sIGlteF91c2ItPmNmZywgaW14X3VzYi0+aW50ZiwgaW14X3VzYi0+YWx0LAorCQljZmcsIGludGYsIGFsdCk7CiAKLQlpZiAoaW50ciAmIElOVFJfU1VTUEVORCkgewotCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCi0JCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKQotCQkJCWlteF91c2ItPmRyaXZlci0+c3VzcGVuZCgmaW14X3VzYi0+Z2FkZ2V0KTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCX0KKwlpZiAoY2ZnID09IDEgfHwgY2ZnID09IDIpIHsKIAotCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVEFSVCkgewotCQlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKLQkJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgaW14X3VzYi0+ZHJpdmVyKTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCX0KLQotCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVE9QKQotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKLQotCWlmIChpbnRyICYgSU5UUl9DRkdfQ0hHKSB7Ci0JCV9fcmF3X3dyaXRlbChJTlRSX0NGR19DSEcsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7Ci0JCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOwotCQljZmcgID0gKHRlbXAgJiBTVEFUX0NGRykgPj4gNTsKLQkJaW50ZiA9ICh0ZW1wICYgU1RBVF9JTlRGKSA+PiAzOwotCQlhbHQgID0gIHRlbXAgJiBTVEFUX0FMVFNFVDsKLQotCQlEX1JFUShpbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBvcmlnIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkIC8gIgotCQkJInJlcSBjb25maWcgQz0lZCwgST0lZCwgQT0lZFxuIiwKLQkJCV9fZnVuY19fLCBpbXhfdXNiLT5jZmcsIGlteF91c2ItPmludGYsIGlteF91c2ItPmFsdCwKLQkJCWNmZywgaW50ZiwgYWx0KTsKLQotCQlpZiAoY2ZnICE9IDEgJiYgY2ZnICE9IDIpCi0JCQlnb3RvIGVuZF9pcnE7Ci0KLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0KLQkJLyogQ29uZmlnIHNldHVwICovCiAJCWlmIChpbXhfdXNiLT5jZmcgIT0gY2ZnKSB7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBjb25maWcgc3RhcnRcbiIsX19mdW5jX18pOwogCQkJdS5iUmVxdWVzdCA9IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT047CiAJCQl1LmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwKIAkJCQkJVVNCX1RZUEVfU1RBTkRBUkQgfApAQCAtMTA3MCwxNCArMTA0OCwxMCBAQAogCQkJdS53SW5kZXggPSAwOwogCQkJdS53TGVuZ3RoID0gMDsKIAkJCWlteF91c2ItPmNmZyA9IGNmZzsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAxOwogCQkJaW14X3VzYi0+ZHJpdmVyLT5zZXR1cCgmaW14X3VzYi0+Z2FkZ2V0LCAmdSk7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGNvbmZpZyBkb25lXG4iLF9fZnVuY19fKTsKIAogCQl9CiAJCWlmIChpbXhfdXNiLT5pbnRmICE9IGludGYgfHwgaW14X3VzYi0+YWx0ICE9IGFsdCkgewotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgaW50ZXJmYWNlIHN0YXJ0XG4iLF9fZnVuY19fKTsKIAkJCXUuYlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U7CiAJCQl1LmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwKIAkJCQkJICBVU0JfVFlQRV9TVEFOREFSRCB8CkBAIC0xMDg3LDIwICsxMDYxLDkyIEBACiAJCQl1LndMZW5ndGggPSAwOwogCQkJaW14X3VzYi0+aW50ZiA9IGludGY7CiAJCQlpbXhfdXNiLT5hbHQgPSBhbHQ7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMTsKIAkJCWlteF91c2ItPmRyaXZlci0+c2V0dXAoJmlteF91c2ItPmdhZGdldCwgJnUpOwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBpbnRlcmZhY2UgZG9uZVxuIixfX2Z1bmNfXyk7CiAJCX0KIAl9CiAKKwlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGlteF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBkZXY7CisJaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOworCWludCB0ZW1wOworCisJaWYgKGludHIgJiAoSU5UUl9XQUtFVVAgfCBJTlRSX1NVU1BFTkQgfCBJTlRSX1JFU1VNRSB8IElOVFJfUkVTRVRfU1RBUlQKKwkJCXwgSU5UUl9SRVNFVF9TVE9QIHwgSU5UUl9DRkdfQ0hHKSkgeworCQkJCWR1bXBfaW50cihfX2Z1bmNfXywgaW50ciwgaW14X3VzYi0+ZGV2KTsKKwkJCQlkdW1wX3VzYl9zdGF0KF9fZnVuY19fLCBpbXhfdXNiKTsKKwl9CisKKwlpZiAoIWlteF91c2ItPmRyaXZlcikKKwkJZ290byBlbmRfaXJxOworCiAJaWYgKGludHIgJiBJTlRSX1NPRikgeworCQkvKiBDb3B5IGZyb20gRnJlZXNjYWxlIEJTUC4KKwkJICAgV2UgbXVzdCBlbmFibGUgU09GIGludHIgYW5kIHNldCBDTURPVkVSLgorCQkgICBEYXRhc2hlZXQgZG9uJ3Qgc3BlY2lmaXkgdGhpcyBhY3Rpb24sIGJ1dCBpdAorCQkgICBpcyBkb25lIGluIEZyZWVzY2FsZSBCU1AsIHNvIGp1c3QgY29weSBpdC4KKwkJKi8KIAkJaWYgKGlteF91c2ItPmVwMHN0YXRlID09IEVQMF9JRExFKSB7CiAJCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCQkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCQl9CiAJfQogCisJaWYgKGludHIgJiBJTlRSX0NGR19DSEcpIHsKKwkJLyogQSB3b3JrYXJvdW5kIG9mIHNlcmlvdXMgSU1YIFVEQyBidWcuCisJCSAgIEhhbmRsaW5nIG9mIENGR19DSEcgc2hvdWxkIGJlIGRlbGF5ZWQgZm9yIHNvbWUgdGltZSwgYmVjYXVzZQorCQkgICBJTVggZG9lcyBub3QgTkFDSyB0aGUgaG9zdCB3aGVuIENGR19DSEcgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisJCSAgIFRoZXJlIGlzIG5vIHRpbWUgdG8gaGFuZGxlIGN1cnJlbnQgQ0ZHX0NIRworCQkgICBpZiBuZXh0IENGR19DSEcgb3IgU0VUVVAgcGFja2VkIGlzIHNlbmQgaW1tZWRpYXRlbHkuCisJCSAgIFdlIGhhdmUgdG8gY2xlYXIgQ0ZHX0NIRywgc3RhcnQgdGhlIHRpbWVyIGFuZAorCQkgICBOQUNLIHRoZSBob3N0IGJ5IHNldHRpbmcgQ1RSTF9DTURPVkVSCisJCSAgIGlmIGl0IHNlbmRzIGFueSBTRVRVUCBwYWNrZXQuCisJCSAgIFdoZW4gdGltZXIgZXhwaXJlcywgaGFuZGxlciBpcyBjYWxsZWQgdG8gaGFuZGxlIGNvbmZpZ3VyYXRpb24KKwkJICAgY2hhbmdlcy4gV2hpbGUgQ0ZHX0NIRyBpcyBub3QgaGFuZGxlZCAoc2V0X2NvbmZpZz0xKSwKKwkJICAgd2UgbXVzdCBOQUNLIHRoZSBob3N0IHRvIGV2ZXJ5IFNFVFVQIHBhY2tlZC4KKwkJICAgVGhpcyBkZWxheSBwcmV2ZW50cyBmcm9tIGdvaW5nIG91dCBvZiBzeW5jIHdpdGggaG9zdC4KKwkJICovCisJCV9fcmF3X3dyaXRlbChJTlRSX0NGR19DSEcsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAxOworCQltb2RfdGltZXIoJmlteF91c2ItPnRpbWVyLCBqaWZmaWVzICsgNSk7CisJCWdvdG8gZW5kX2lycTsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfV0FLRVVQKSB7CisJCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSkKKwkJCQlpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSgmaW14X3VzYi0+Z2FkZ2V0KTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfU1VTUEVORCkgeworCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCisJCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKQorCQkJCWlteF91c2ItPmRyaXZlci0+c3VzcGVuZCgmaW14X3VzYi0+Z2FkZ2V0KTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RBUlQpIHsKKwkJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJCXVkY19zdG9wX2FjdGl2aXR5KGlteF91c2IsIGlteF91c2ItPmRyaXZlcik7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCQlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJfQorCisJaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUT1ApCisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCiBlbmRfaXJxOgogCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTExMDksNiArMTE1NSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19jdHJsX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCXN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAgPSAmaW14X3VzYi0+aW14X2VwWzBdOwogCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKDApKTsKIAogCWR1bXBfZXBfaW50cihfX2Z1bmNfXywgMCwgaW50ciwgaW14X3VzYi0+ZGV2KTsKQEAgLTExMTgsMTYgKzExNjUsMTUgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCS8qIERFVlJFUSBJUlEgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KKwkvKiBERVZSRVEgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KIAlpZiAoaW50ciAmIChFUElOVFJfREVWUkVRIHwgRVBJTlRSX01ERVZSRVEpKQogCQloYW5kbGVfZXAwX2RldnJlcShpbXhfdXNiKTsKIAkvKiBTZWVtIGkuTVggaXMgbWlzc2luZyBFT0YgaW50ZXJydXB0IHNvbWV0aW1lcy4KLQkgKiBUaGVyZWZvcmUgd2UgbW9uaXRvciBib3RoIEVPRiBhbmQgRklGT19FTVBUWSBpbnRlcnJ1cHMKLQkgKiB3aGVuIHRyYW5zbWl0aW5nLCBhbmQgYm90aCBFT0YgYW5kIEZJRk9fRlVMTCB3aGVuCi0JICogcmVjZWl2aW5nIGRhdGEuCisJICogVGhlcmVmb3JlIHdlIGRvbid0IG1vbml0b3IgRU9GLgorCSAqIFdlIGNhbGwgaGFuZGxlX2VwMCgpIG9ubHkgaWYgYSByZXF1ZXN0IGlzIHF1ZXVlZCBmb3IgZXAwLgogCSAqLwotCWVsc2UgaWYgKGludHIgJiAoRVBJTlRSX0VPRiB8IEVQSU5UUl9GSUZPX0VNUFRZIHwgRVBJTlRSX0ZJRk9fRlVMTCkpCi0JCWhhbmRsZV9lcDAoJmlteF91c2ItPmlteF9lcFswXSk7CisJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKQorCQloYW5kbGVfZXAwKGlteF9lcCk7CiAKIAlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKDApKTsKIApAQCAtMTE4Niw4ICsxMjMyLDggQEAKIAkJLmVwMAkJPSAmY29udHJvbGxlci5pbXhfZXBbMF0uZXAsCiAJCS5uYW1lCQk9IGRyaXZlcl9uYW1lLAogCQkuZGV2ID0gewotCQkJIC5idXNfaWQJPSAiZ2FkZ2V0IiwKLQkJIH0sCisJCQkuaW5pdF9uYW1lCT0gImdhZGdldCIsCisJCX0sCiAJfSwKIAogCS5pbXhfZXBbMF0gPSB7CkBAIC0xMzE4LDYgKzEzNjQsNyBAQAogCiAJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgZHJpdmVyKTsKIAlpbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7CisJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CiAKIAlkcml2ZXItPnVuYmluZCgmaW14X3VzYi0+Z2FkZ2V0KTsKIAlpbXhfdXNiLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CkBAIC0xNDM1LDYgKzE0ODIsMTAgQEAKIAl1c2JfaW5pdF9kYXRhKGlteF91c2IpOwogCWlteF91ZGNfaW5pdChpbXhfdXNiKTsKIAorCWluaXRfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwlpbXhfdXNiLT50aW1lci5mdW5jdGlvbiA9IGhhbmRsZV9jb25maWc7CisJaW14X3VzYi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlteF91c2I7CisKIAlyZXR1cm4gMDsKIAogZmFpbDM6CkBAIC0xNDU3LDYgKzE1MDgsNyBAQAogCWludCBpOwogCiAJaW14X3VkY19kaXNhYmxlKGlteF91c2IpOworCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IElNWF9VU0JfTkJfRVAgKyAxOyBpKyspCiAJCWZyZWVfaXJxKGlteF91c2ItPnVzYmRfaW50W2ldLCBpbXhfdXNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCmluZGV4IDg1MDA3NjkuLmI0OGFkNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaApAQCAtMjMsNyArMjMsOCBAQAogLyogSGVscGVyIG1hY3JvcyAqLwogI2RlZmluZSBFUF9OTyhlcCkJKChlcC0+YkVuZHBvaW50QWRkcmVzcykgJiB+VVNCX0RJUl9JTikgLyogSU46MSwgT1VUOjAgKi8KICNkZWZpbmUgRVBfRElSKGVwKQkoKGVwLT5iRW5kcG9pbnRBZGRyZXNzKSAmIFVTQl9ESVJfSU4gPyAxIDogMCkKLSNkZWZpbmUgaXJxX3RvX2VwKGlycSkJKCgoaXJxKSA+PSBVU0JEX0lOVDApIHx8ICgoaXJxKSA8PSBVU0JEX0lOVDYpID8gKChpcnEpIC0gVVNCRF9JTlQwKSA6IChVU0JEX0lOVDYpKSAvKnNob3VsZCBub3QgaGFwcGVuKi8KKyNkZWZpbmUgaXJxX3RvX2VwKGlycSkJKCgoaXJxKSA+PSBVU0JEX0lOVDApIHx8ICgoaXJxKSA8PSBVU0JEX0lOVDYpIFwKKwkJPyAoKGlycSkgLSBVU0JEX0lOVDApIDogKFVTQkRfSU5UNikpIC8qc2hvdWxkIG5vdCBoYXBwZW4qLwogI2RlZmluZSBlcF90b19pcnEoZXApCShFUF9OTygoZXApKSArIFVTQkRfSU5UMCkKICNkZWZpbmUgSU1YX1VTQl9OQl9FUAk2CiAKQEAgLTU4LDYgKzU5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7CiAJc3RydWN0IGlteF9lcF9zdHJ1Y3QJCQlpbXhfZXBbSU1YX1VTQl9OQl9FUF07CiAJc3RydWN0IGNsawkJCQkqY2xrOworCXN0cnVjdCB0aW1lcl9saXN0CQkJdGltZXI7CiAJZW51bSBlcDBfc3RhdGUJCQkJZXAwc3RhdGU7CiAJc3RydWN0IHJlc291cmNlCQkJCSpyZXM7CiAJdm9pZCBfX2lvbWVtCQkJCSpiYXNlOwpAQCAtODgsOCArOTAsOCBAQAogI2RlZmluZSAgVVNCX0VQX0ZEQVQzKHgpCSgweDNGICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIGRhdGEgKi8KICNkZWZpbmUgIFVTQl9FUF9GU1RBVCh4KQkoMHg0MCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBzdGF0dXMgKi8KICNkZWZpbmUgIFVTQl9FUF9GQ1RSTCh4KQkoMHg0NCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBjb250cm9sICovCi0jZGVmaW5lICBVU0JfRVBfTFJGUCh4KQkJKDB4NDggKyAoeCoweDMwKSkgLyogVVNCIGxhc3QgcmVhZCBmcmFtZSBwb2ludGVyICovCi0jZGVmaW5lICBVU0JfRVBfTFdGUCh4KQkJKDB4NEMgKyAoeCoweDMwKSkgLyogVVNCIGxhc3Qgd3JpdGUgZnJhbWUgcG9pbnRlciAqLworI2RlZmluZSAgVVNCX0VQX0xSRlAoeCkJCSgweDQ4ICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHJkIGYuIHBvaW50ZXIgKi8KKyNkZWZpbmUgIFVTQl9FUF9MV0ZQKHgpCQkoMHg0QyArICh4KjB4MzApKSAvKiBVU0IgbGFzdCB3ciBmLiBwb2ludGVyICovCiAjZGVmaW5lICBVU0JfRVBfRkFMUk0oeCkJKDB4NTAgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gYWxhcm0gKi8KICNkZWZpbmUgIFVTQl9FUF9GUkRQKHgpCQkoMHg1NCArICh4KjB4MzApKSAvKiBVU0IgRklGTyByZWFkIHBvaW50ZXIgKi8KICNkZWZpbmUgIFVTQl9FUF9GV1JQKHgpCQkoMHg1OCArICh4KjB4MzApKSAvKiBVU0IgRklGTyB3cml0ZSBwb2ludGVyICovCkBAIC0xNzAsNyArMTcyLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfSVJRICovCiAvKiAjZGVmaW5lIERFQlVHX0VQSVJRICovCiAvKiAjZGVmaW5lIERFQlVHX0RVTVAgKi8KLSNkZWZpbmUgREVCVUdfRVJSCisvKiAjZGVmaW5lIERFQlVHX0VSUiAqLwogCiAjaWZkZWYgREVCVUdfUkVRCiAJI2RlZmluZSBEX1JFUShkZXYsIGFyZ3MuLi4pCWRldl9kYmcoZGV2LCAjIyBhcmdzKQpAQCAtMjI4LDcgKzIzMCw4IEBACiAjZW5kaWYgLyogREVCVUdfSVJRICovCiAKICNpZmRlZiBERUJVR19FUElSUQotCXN0YXRpYyB2b2lkIGR1bXBfZXBfaW50cihjb25zdCBjaGFyICpsYWJlbCwgaW50IG5yLCBpbnQgaXJxcmVnLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCisJc3RhdGljIHZvaWQgZHVtcF9lcF9pbnRyKGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgbnIsIGludCBpcnFyZWcsCisJCQkJCQkJc3RydWN0IGRldmljZSAqZGV2KQogCXsKIAkJZGV2X2RiZyhkZXYsICI8JXM+IEVQJWRfSU5UUj1bJXMlcyVzJXMlcyVzJXMlcyVzXVxuIiwgbGFiZWwsIG5yLAogCQkJKGlycXJlZyAmIEVQSU5UUl9GSUZPX0ZVTEwpID8gIiBmdWxsIiA6ICIiLApAQCAtMjQ2LDcgKzI0OSw4IEBACiAjZW5kaWYgLyogREVCVUdfSVJRICovCiAKICNpZmRlZiBERUJVR19EVU1QCi0Jc3RhdGljIHZvaWQgZHVtcF91c2Jfc3RhdChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQorCXN0YXRpYyB2b2lkIGR1bXBfdXNiX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsCisJCQkJCQlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IpCiAJewogCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfU1RBVCk7CiAKQEAgLTI1OSwxMiArMjYzLDE1IEBACiAJCQkodGVtcCAmIFNUQVRfQUxUU0VUKSk7CiAJfQogCi0Jc3RhdGljIHZvaWQgZHVtcF9lcF9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwKQorCXN0YXRpYyB2b2lkIGR1bXBfZXBfc3RhdChjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkJCXN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXApCiAJewotCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKEVQX05PKGlteF9lcCkpKTsKKwkJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0lOVFIoRVBfTk8oaW14X2VwKSkpOwogCiAJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBFUCVkX0lOVFI9WyVzJXMlcyVzJXMlcyVzJXMlc11cbiIsIGxhYmVsLCBFUF9OTyhpbXhfZXApLAorCQkJIjwlcz4gRVAlZF9JTlRSPVslcyVzJXMlcyVzJXMlcyVzJXNdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEVQSU5UUl9GSUZPX0ZVTEwpID8gIiBmdWxsIiA6ICIiLAogCQkJKHRlbXAgJiBFUElOVFJfRklGT19FTVBUWSkgPyAiIGZlbXB0eSIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0ZJRk9fRVJST1IpID8gIiBmZXJyIiA6ICIiLApAQCAtMjc1LDE4ICsyODIsMjIgQEAKIAkJCSh0ZW1wICYgRVBJTlRSX0RFVlJFUSkgPyAiIGRldnJlcSIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0VPVCkgPyAiIGVvdCIgOiAiIik7CiAKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKKwkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CiAKIAkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKLQkJCSI8JXM+IEVQJWRfU1RBVD1bJXMlcyBiY291bnQ9JWRdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfU1RBVD1bJXMlcyBiY291bnQ9JWRdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEVQU1RBVF9TSVApID8gIiBzaXAiIDogIiIsCiAJCQkodGVtcCAmIEVQU1RBVF9TVEFMTCkgPyAiIHN0YWxsIiA6ICIiLAogCQkJKHRlbXAgJiBFUFNUQVRfQkNPVU5UKSA+PiAxNik7CiAKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9GU1RBVChFUF9OTyhpbXhfZXApKSk7CisJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0ZTVEFUKEVQX05PKGlteF9lcCkpKTsKIAogCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gRVAlZF9GU1RBVD1bJXMlcyVzJXMlcyVzJXNdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfRlNUQVQ9WyVzJXMlcyVzJXMlcyVzXVxuIiwKKwkJCWxhYmVsLCBFUF9OTyhpbXhfZXApLAogCQkJKHRlbXAgJiBGU1RBVF9FUlIpID8gIiBmZXJyIiA6ICIiLAogCQkJKHRlbXAgJiBGU1RBVF9VRikgPyAiIGZ1bmRlciIgOiAiIiwKIAkJCSh0ZW1wICYgRlNUQVRfT0YpID8gIiBmb3ZlciIgOiAiIiwKQEAgLTI5NiwxOSArMzA3LDIzIEBACiAJCQkodGVtcCAmIEZTVEFUX0VNUFRZKSA/ICIgZmVtcHR5IiA6ICIiKTsKIAl9CiAKLQlzdGF0aWMgdm9pZCBkdW1wX3JlcShjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCisJc3RhdGljIHZvaWQgZHVtcF9yZXEoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCiAJewogCQlpbnQgaTsKIAogCQlpZiAoIXJlcSB8fCAhcmVxLT5idWYpIHsKLQkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsICI8JXM+IHJlcSBvciByZXEgYnVmIGlzIGZyZWVcbiIsIGxhYmVsKTsKKwkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCisJCQkJCSI8JXM+IHJlcSBvciByZXEgYnVmIGlzIGZyZWVcbiIsIGxhYmVsKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmICgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSU5fREFUQV9QSEFTRSkKKwkJaWYgKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlCisJCQk9PSBFUDBfSU5fREFUQV9QSEFTRSkKIAkJCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkgewogCi0JCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LCAiPCVzPiByZXF1ZXN0IGR1bXAgPCIsIGxhYmVsKTsKKwkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCisJCQkJCQkiPCVzPiByZXF1ZXN0IGR1bXAgPCIsIGxhYmVsKTsKIAkJCWZvciAoaSA9IDA7IGkgPCByZXEtPmxlbmd0aDsgaSsrKQogCQkJCXByaW50aygiJTAyeC0iLCAqKCh1OCAqKXJlcS0+YnVmICsgaSkpOwogCQkJcHJpbnRrKCI+XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggMzE3YjQ4Zi4uZDIwOTM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTEzMzQsNyArMTMzNCw3IEBACiAKIAlxdWFsLmJMZW5ndGggPSBzaXplb2YgcXVhbDsKIAlxdWFsLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOwotCXF1YWwuYmNkVVNCID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKTsKKwlxdWFsLmJjZFVTQiA9IGNwdV90b19sZTE2ICgweDAyMDApOwogCiAJZGVzYyA9IGRldi0+ZGV2OwogCXF1YWwuYkRldmljZUNsYXNzID0gZGVzYy0+YkRldmljZUNsYXNzOwpAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAkJCXx8IGRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKIAkJZ290byBmYWlsOwogCWRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgPSAxOwotCWRldi0+ZGV2LT5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApOworCWRldi0+ZGV2LT5iY2RVU0IgPSBjcHVfdG9fbGUxNiAoMHgwMjAwKTsKIAogCS8qIHRyaWdnZXJzIGdhZGdldGZzX2JpbmQoKTsgdGhlbiB3ZSBjYW4gZW51bWVyYXRlLiAqLwogCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IGQ1NTRiMDguLjZjZDNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC00MzIsOCArNDMyLDggQEAKIAlkZXZpY2VfYWRkKCZkZXYtPmdhZGdldC5kZXYpOwogCXJldHZhbCA9IGRyaXZlci0+YmluZCgmZGV2LT5nYWRnZXQpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKCIlczogYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLCBkZXYtPmdhZGdldC5uYW1lLAotCQkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJpbmQgdG8gZHJpdmVyICVzIC0tPiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGRldi0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CiAJCWRldmljZV9kZWwoJmRldi0+Z2FkZ2V0LmRldik7CiAKIAkJZGV2LT5kcml2ZXIgPSAwOwpAQCAtNDQ1LDggKzQ0NSw4IEBACiAJICogZm9yIHNldF9jb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgZXZlbnR1YWwgZGlzY29ubmVjdC4KIAkgKiBOT1RFOiAgdGhpcyBzaG91bGRuJ3QgcG93ZXIgdXAgdW50aWwgbGF0ZXIuCiAJICovCi0JcHJpbnRrKCIlczogcmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRldi0+Z2FkZ2V0Lm5hbWUsCi0JICAgICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKKwkgICAgICAgZGV2LT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKIAl1ZGNfZW5hYmxlKGRldik7CiAKQEAgLTU4MSw3ICs1ODEsOCBAQAogCQkJICogZGlzY2FyZCB0aGUgZXh0cmEgZGF0YS4KIAkJCSAqLwogCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQotCQkJCXByaW50aygiJXMgb3ZlcmZsb3cgJWRcbiIsIGVwLT5lcC5uYW1lLCBjb3VudCk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgb3ZlcmZsb3cgJWRcbiIsCisJCQkJICAgICAgIGVwLT5lcC5uYW1lLCBjb3VudCk7CiAJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOwogCQl9IGVsc2UgewogCQkJKmJ1ZisrID0gYnl0ZTsKQEAgLTgzMSw3ICs4MzIsOCBAQAogCQkJCQkJICAgICAgIHF1ZXVlKTsKIAogCQkJCWlmICghcmVxKSB7Ci0JCQkJCXByaW50aygiJXM6IE5VTEwgUkVRICVkXG4iLAorCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICAgICAiJXM6IE5VTEwgUkVRICVkXG4iLAogCQkJCQkgICAgICAgX19mdW5jX18sIGVwX2lkeCk7CiAJCQkJCWZsdXNoKGVwKTsKIAkJCQkJYnJlYWs7CkBAIC04NDQsNyArODQ2LDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIFRocm93IHBhY2tldCBhd2F5Li4gKi8KLQkJcHJpbnRrKCIlczogTm8gZGVzY3JpcHRvcj8hP1xuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gZGVzY3JpcHRvcj8hP1xuIiwgX19mdW5jX18pOwogCQlmbHVzaChlcCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggMTJjNmQ4My4uOTQ5OGJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0xNDIsOCArMTQyLDggQEAKIAogI2luY2x1ZGUgIm5ldDIyODAuaCIKIAotI2RlZmluZSB2YWxpZF9iaXQJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBWQUxJRF9CSVQpCi0jZGVmaW5lIGRtYV9kb25lX2llCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKKyNkZWZpbmUgdmFsaWRfYml0CWNwdV90b19sZTMyICgxIDw8IFZBTElEX0JJVCkKKyNkZWZpbmUgZG1hX2RvbmVfaWUJY3B1X3RvX2xlMzIgKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNDI1LDcgKzQyNSw3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQl0ZC0+ZG1hY291bnQgPSAwOwkvKiBub3QgVkFMSUQgKi8KLQkJdGQtPmRtYWFkZHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKKwkJdGQtPmRtYWFkZHIgPSBjcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CiAJCXRkLT5kbWFkZXNjID0gdGQtPmRtYWFkZHI7CiAJCXJlcS0+dGQgPSB0ZDsKIAl9CkBAIC03NzUsNyArNzc1LDcgQEAKIAlmaWxsX2RtYV9kZXNjIChlcCwgcmVxLCAxKTsKIAogCWlmICghdXNlX2RtYV9jaGFpbmluZykKLQkJcmVxLT50ZC0+ZG1hY291bnQgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBFTkRfT0ZfQ0hBSU4pOworCQlyZXEtPnRkLT5kbWFjb3VudCB8PSBjcHVfdG9fbGUzMiAoMSA8PCBFTkRfT0ZfQ0hBSU4pOwogCiAJc3RhcnRfcXVldWUgKGVwLCB0bXAsIHJlcS0+dGRfZG1hKTsKIH0KQEAgLTI0MDcsOSArMjQwNyw5IEBACiAKIAkJCWlmIChyZWFkbCAoJmUtPnJlZ3MtPmVwX3JzcCkKIAkJCQkJJiAoMSA8PCBTRVRfRU5EUE9JTlRfSEFMVCkpCi0JCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJCQkJc3RhdHVzID0gY3B1X3RvX2xlMzIgKDEpOwogCQkJZWxzZQotCQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJCXN0YXR1cyA9IGNwdV90b19sZTMyICgwKTsKIAogCQkJLyogZG9uJ3QgYm90aGVyIHdpdGggYSByZXF1ZXN0IG9iamVjdCEgKi8KIAkJCXdyaXRlbCAoMCwgJmRldi0+ZXByZWdzIFswXS5lcF9pcnFlbmIpOwpAQCAtMjY2Nyw3ICsyNjY3LDcgQEAKIAkJCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKIAkJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKIAkJCQlkbWFjb3VudCA9IHJlcS0+dGQtPmRtYWNvdW50OwotCQkJCWRtYWNvdW50ICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJCWRtYWNvdW50ICY9IGNwdV90b19sZTMyICgKIAkJCQkJCSgxIDw8IFZBTElEX0JJVCkKIAkJCQkJCXwgRE1BX0JZVEVfQ09VTlRfTUFTSyk7CiAJCQkJaWYgKGRtYWNvdW50ICYmIChkbWFjb3VudCAmIHZhbGlkX2JpdCkgPT0gMCkKQEAgLTI4ODEsNyArMjg4MSw3IEBACiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJdGQtPmRtYWNvdW50ID0gMDsJLyogbm90IFZBTElEICovCi0JCXRkLT5kbWFhZGRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CisJCXRkLT5kbWFhZGRyID0gY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOwogCQl0ZC0+ZG1hZGVzYyA9IHRkLT5kbWFhZGRyOwogCQlkZXYtPmVwIFtpXS5kdW1teSA9IHRkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDVhMzAzNGYuLjI5NTAwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMjI1LDEyICsyMjUsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKIAkuYkRldmljZVByb3RvY29sID0JMCwKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pLAogCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKIAkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCiAJLmlTZXJpYWxOdW1iZXIgPQlTVFJJTkdfU0VSSUFMTlVNLApAQCAtMjk5LDIwICsyOTksMjAgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMikKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VwX291dF9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKQorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIGRldl9xdWFsaWZpZXIgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QUklOVEVSLAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxCiB9OwpAQCAtMTQwNiwxNiArMTQwNiwxNiBAQAogCQkJZ2FkZ2V0LT5uYW1lKTsKIAkJLyogdW5yZWNvZ25pemVkLCBidXQgc2FmZSB1bmxlc3MgYnVsayBpcyBSRUFMTFkgcXVpcmt5ICovCiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4RkZGRik7CisJCQljcHVfdG9fbGUxNigweEZGRkYpOwogCX0KIAlzbnByaW50ZihtYW51ZmFjdHVyZXIsIHNpemVvZihtYW51ZmFjdHVyZXIpLCAiJXMgJXMgd2l0aCAlcyIsCiAJCWluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJZ2FkZ2V0LT5uYW1lKTsKIAogCWRldmljZV9kZXNjLmlkVmVuZG9yID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pOworCQljcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pOwogCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSk7CisJCWNwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pOwogCiAJLyogc3VwcG9ydCBvcHRpb25hbCB2ZW5kb3IvZGlzdHJvIGN1c3RvbWl6YXRpb24gKi8KIAlpZiAoaWRWZW5kb3IpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCmluZGV4IDk5MGY0MGYuLjhjYzY3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMjc4LDcgKzI3OSw3IEBACiAJCWdvdG8gZXJyX3F1ZXVlczsKIAllcHMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlcHN0YXRlIiwgMDQwMCwgcm9vdCwgdWRjLAogCQkJJmVwc19kYmdfZm9wcyk7Ci0JaWYgKCFxdWV1ZXMpCisJaWYgKCFlcHMpCiAJCWdvdG8gZXJyX2VwczsKIAogCXVkYy0+ZGVidWdmc19yb290ID0gcm9vdDsKQEAgLTc0NywxMyArNzQ4LDEzIEBACiB9CiAKIC8qKgotICogZXBfZW5kX291dF9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgaW4gcmVxdWVzdAorICogZXBfZW5kX291dF9yZXEgLSBFbmRzIGVuZHBvaW50IE9VVCByZXF1ZXN0CiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGVuZHBvaW50IGluIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCisgKiBFbmRzIGVuZHBvaW50IE9VVCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgogICovCiBzdGF0aWMgdm9pZCBlcF9lbmRfb3V0X3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCiB7CkBAIC03NjIsMTMgKzc2MywxMyBAQAogfQogCiAvKioKLSAqIGVwMF9lbmRfb3V0X3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBpbiByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCisgKiBlcDBfZW5kX291dF9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBpbiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cworICogRW5kcyBjb250cm9sIGVuZHBvaW50IE9VVCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cwogICogY29udHJvbCBlbmRwb2ludCBpbnRvIGlkbGUgc3RhdGUKICAqLwogc3RhdGljIHZvaWQgZXAwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKQEAgLTc3OSwxMyArNzgwLDEzIEBACiB9CiAKIC8qKgotICogZXBfZW5kX2luX3JlcSAtIEVuZHMgZW5kcG9pbnQgb3V0IHJlcXVlc3QKKyAqIGVwX2VuZF9pbl9yZXEgLSBFbmRzIGVuZHBvaW50IElOIHJlcXVlc3QKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgZW5kcG9pbnQgb3V0IHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCisgKiBFbmRzIGVuZHBvaW50IElOIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCiAgKi8KIHN0YXRpYyB2b2lkIGVwX2VuZF9pbl9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewpAQCAtNzk0LDIwICs3OTUsMTggQEAKIH0KIAogLyoqCi0gKiBlcDBfZW5kX2luX3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBvdXQgcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQorICogZXAwX2VuZF9pbl9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgSU4gcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBjb250cm9sIGVuZHBvaW50IG91dCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cworICogRW5kcyBjb250cm9sIGVuZHBvaW50IElOIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCiAgKiBjb250cm9sIGVuZHBvaW50IGludG8gc3RhdHVzIHN0YXRlCiAgKi8KIHN0YXRpYyB2b2lkIGVwMF9lbmRfaW5fcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gZXAtPmRldjsKLQotCXNldF9lcDBzdGF0ZSh1ZGMsIElOX1NUQVRVU19TVEFHRSk7CisJc2V0X2VwMHN0YXRlKGVwLT5kZXYsIElOX1NUQVRVU19TVEFHRSk7CiAJZXBfZW5kX2luX3JlcShlcCwgcmVxKTsKIH0KIApAQCAtMTE2Nyw3ICsxMTY2LDcgQEAKIAkJCQllcF9lbmRfaW5fcmVxKGVwLCByZXEpOwogCQkJfSBlbHNlIHsKIAkJCQllcF9lcnIoZXAsICJnb3QgYSByZXF1ZXN0IG9mICVkIGJ5dGVzIHdoaWxlIgotCQkJCQkiaW4gc3RhdGUgV0FUSV9BQ0tfU0VUX0NPTkZfSU5URVJGXG4iLAorCQkJCQkiaW4gc3RhdGUgV0FJVF9BQ0tfU0VUX0NPTkZfSU5URVJGXG4iLAogCQkJCQlsZW5ndGgpOwogCQkJCWVwX2RlbF9yZXF1ZXN0KGVwLCByZXEpOwogCQkJCXJjID0gLUVMMkhMVDsKQEAgLTEyMTMsMzAgKzEyMTIsMjYgQEAKIAlzdHJ1Y3QgdWRjX3VzYl9lcAkqdWRjX3VzYl9lcDsKIAlzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QJKnJlcTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlpbnQJCQlyYzsKKwlpbnQJCQlyYyA9IC1FSU5WQUw7CiAKIAlpZiAoIV9lcCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByYzsKIAl1ZGNfdXNiX2VwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHVkY191c2JfZXAsIHVzYl9lcCk7CiAJZXAgPSB1ZGNfdXNiX2VwLT5weGFfZXA7CiAJaWYgKCFlcCB8fCBpc19lcDAoZXApKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewotCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkgeworCQkJcmVxX2RvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCQkJcmMgPSAwOwogCQkJYnJlYWs7CisJCX0KIAl9CiAKLQlyYyA9IC1FSU5WQUw7Ci0JaWYgKCZyZXEtPnJlcSAhPSBfcmVxKQotCQlnb3RvIG91dDsKLQotCXJjID0gMDsKLQlyZXFfZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7Ci1vdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNDcxLDYgKzE0NjYsMzIgQEAKIAkuZmlmb19mbHVzaAk9IHB4YV9lcF9maWZvX2ZsdXNoLAogfTsKIAorLyoqCisgKiBkcGx1c19wdWxsdXAgLSBDb25uZWN0IG9yIGRpc2Nvbm5lY3QgcHVsbHVwIHJlc2lzdG9yIHRvIEQrIHBpbgorICogQHVkYzogdWRjIGRldmljZQorICogQG9uOiAwIGlmIGRpc2Nvbm5lY3QgcHVsbHVwIHJlc2lzdG9yLCAxIG90aGVyd2lzZQorICogQ29udGV4dDogYW55CisgKgorICogSGFuZGxlIEQrIHB1bGx1cCByZXNpc3RvciwgbWFrZSB0aGUgZGV2aWNlIHZpc2libGUgdG8gdGhlIHVzYiBidXMsIGFuZAorICogZGVjbGFyZSBpdCBhcyBhIGZ1bGwgc3BlZWQgdXNiIGRldmljZQorICovCitzdGF0aWMgdm9pZCBkcGx1c19wdWxsdXAoc3RydWN0IHB4YV91ZGMgKnVkYywgaW50IG9uKQoreworCWlmIChvbikgeworCQlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXAsCisJCQkJICAgICAgICF1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwX2ludmVydGVkKTsKKwkJaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0NPTk5FQ1QpOworCX0gZWxzZSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXApKQorCQkJZ3Bpb19zZXRfdmFsdWUodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCwKKwkJCQkgICAgICAgdWRjLT5tYWNoLT5ncGlvX3B1bGx1cF9pbnZlcnRlZCk7CisJCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQorCQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUKTsKKwl9CisJdWRjLT5wdWxsdXBfb24gPSBvbjsKK30KIAogLyoqCiAgKiBweGFfdWRjX2dldF9mcmFtZSAtIFJldHVybnMgdXNiIGZyYW1lIG51bWJlcgpAQCAtMTUwMCwyMSArMTUyMSwxNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworCisvKioKKyAqIHNob3VsZF9lbmFibGVfdWRjIC0gVGVsbHMgaWYgVURDIHNob3VsZCBiZSBlbmFibGVkCisgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBDb250ZXh0OiBhbnkKKyAqCisgKiBUaGUgVURDIHNob3VsZCBiZSBlbmFibGVkIGlmIDoKKworICogIC0gdGhlIHB1bGx1cCByZXNpc3RvciBpcyBjb25uZWN0ZWQKKyAqICAtIGFuZCBhIGdhZGdldCBkcml2ZXIgaXMgYm91bmQKKyAqICAtIGFuZCB2YnVzIGlzIHNlbnNlZCAob3Igbm8gdmJ1cyBzZW5zZSBpcyBhdmFpbGFibGUpCisgKgorICogUmV0dXJucyAxIGlmIFVEQyBzaG91bGQgYmUgZW5hYmxlZCwgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBzaG91bGRfZW5hYmxlX3VkYyhzdHJ1Y3QgcHhhX3VkYyAqdWRjKQoreworCWludCBwdXRfb247CisKKwlwdXRfb24gPSAoKHVkYy0+cHVsbHVwX29uKSAmJiAodWRjLT5kcml2ZXIpKTsKKwlwdXRfb24gJj0gKCh1ZGMtPnZidXNfc2Vuc2VkKSB8fCAoIXVkYy0+dHJhbnNjZWl2ZXIpKTsKKwlyZXR1cm4gcHV0X29uOworfQorCisvKioKKyAqIHNob3VsZF9kaXNhYmxlX3VkYyAtIFRlbGxzIGlmIFVEQyBzaG91bGQgYmUgZGlzYWJsZWQKKyAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIENvbnRleHQ6IGFueQorICoKKyAqIFRoZSBVREMgc2hvdWxkIGJlIGRpc2FibGVkIGlmIDoKKyAqICAtIHRoZSBwdWxsdXAgcmVzaXN0b3IgaXMgbm90IGNvbm5lY3RlZAorICogIC0gb3Igbm8gZ2FkZ2V0IGRyaXZlciBpcyBib3VuZAorICogIC0gb3Igbm8gdmJ1cyBpcyBzZW5zZWQgKHdoZW4gdmJ1cyBzZXNpbmcgaXMgYXZhaWxhYmxlKQorICoKKyAqIFJldHVybnMgMSBpZiBVREMgc2hvdWxkIGJlIGRpc2FibGVkCisgKi8KK3N0YXRpYyBpbnQgc2hvdWxkX2Rpc2FibGVfdWRjKHN0cnVjdCBweGFfdWRjICp1ZGMpCit7CisJaW50IHB1dF9vZmY7CisKKwlwdXRfb2ZmID0gKCghdWRjLT5wdWxsdXBfb24pIHx8ICghdWRjLT5kcml2ZXIpKTsKKwlwdXRfb2ZmIHw9ICgoIXVkYy0+dmJ1c19zZW5zZWQpICYmICh1ZGMtPnRyYW5zY2VpdmVyKSk7CisJcmV0dXJuIHB1dF9vZmY7Cit9CisKKy8qKgorICogcHhhX3VkY19wdWxsdXAgLSBPZmZlciBtYW51YWwgRCsgcHVsbHVwIGNvbnRyb2wKKyAqIEBfZ2FkZ2V0OiB1c2IgZ2FkZ2V0IHVzaW5nIHRoZSBjb250cm9sCisgKiBAaXNfYWN0aXZlOiAwIGlmIGRpc2Nvbm5lY3QsIGVsc2UgY29ubmVjdCBEKyBwdWxsdXAgcmVzaXN0b3IKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldHVybnMgMCBpZiBPSywgLUVPUE5PVFNVUFAgaWYgdWRjIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBEKyBwdWxsdXAKKyAqLworc3RhdGljIGludCBweGFfdWRjX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gdG9fZ2FkZ2V0X3VkYyhfZ2FkZ2V0KTsKKworCWlmICghZ3Bpb19pc192YWxpZCh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwKSAmJiAhdWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZHBsdXNfcHVsbHVwKHVkYywgaXNfYWN0aXZlKTsKKworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CisJaWYgKHNob3VsZF9kaXNhYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZGlzYWJsZSh1ZGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CisKKy8qKgorICogcHhhX3VkY192YnVzX3Nlc3Npb24gLSBDYWxsZWQgYnkgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgdG8gZW5hYmxlL2Rpc2FibGUgdWRjCisgKiBAX2dhZGdldDogdXNiIGdhZGdldAorICogQGlzX2FjdGl2ZTogMCBpZiBzaG91bGQgZGlzYWJsZSB0aGUgdWRjLCAxIGlmIHNob3VsZCBlbmFibGUKKyAqCisgKiBFbmFibGVzIHRoZSB1ZGMsIGFuZCBvcHRpb25uYWx5IGFjdGl2YXRlcyBEKyBwdWxsdXAgcmVzaXN0b3IuIE9yIGRpc2FibGVzIHRoZQorICogdWRjLCBhbmQgZGVhY3RpdmF0ZXMgRCsgcHVsbHVwIHJlc2lzdG9yLgorICoKKyAqIFJldHVybnMgMAorICovCitzdGF0aWMgaW50IHB4YV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBweGFfdWRjICp1ZGMgPSB0b19nYWRnZXRfdWRjKF9nYWRnZXQpOworCisJdWRjLT52YnVzX3NlbnNlZCA9IGlzX2FjdGl2ZTsKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOworCWlmIChzaG91bGRfZGlzYWJsZV91ZGModWRjKSkKKwkJdWRjX2Rpc2FibGUodWRjKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHB4YV91ZGNfdmJ1c19kcmF3IC0gQ2FsbGVkIGJ5IGdhZGdldCBkcml2ZXIgYWZ0ZXIgU0VUX0NPTkZJR1VSQVRJT04gY29tcGxldGVkCisgKiBAX2dhZGdldDogdXNiIGdhZGdldAorICogQG1BOiBjdXJyZW50IGRyYXduCisgKgorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQ2FsbGVkIGFmdGVyIGEgY29uZmlndXJhdGlvbiB3YXMgY2hvc2VuIGJ5IGEgVVNCIGhvc3QsIHRvIGluZm9ybSBob3cgbXVjaAorICogY3VycmVudCBjYW4gYmUgZHJhd24gYnkgdGhlIGRldmljZSBmcm9tIFZCdXMgbGluZS4KKyAqCisgKiBSZXR1cm5zIDAgb3IgLUVPUE5PVFNVUFAgaWYgbm8gdHJhbnNjZWl2ZXIgaXMgaGFuZGxpbmcgdGhlIHVkYworICovCitzdGF0aWMgaW50IHB4YV91ZGNfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCB1bnNpZ25lZCBtQSkKK3sKKwlzdHJ1Y3QgcHhhX3VkYyAqdWRjOworCisJdWRjID0gdG9fZ2FkZ2V0X3VkYyhfZ2FkZ2V0KTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJcmV0dXJuIG90Z19zZXRfcG93ZXIodWRjLT50cmFuc2NlaXZlciwgbUEpOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBweGFfdWRjX29wcyA9IHsKIAkuZ2V0X2ZyYW1lCT0gcHhhX3VkY19nZXRfZnJhbWUsCiAJLndha2V1cAkJPSBweGFfdWRjX3dha2V1cCwKLQkvKiBjdXJyZW50IHZlcnNpb25zIG11c3QgYWx3YXlzIGJlIHNlbGYtcG93ZXJlZCAqLworCS5wdWxsdXAJCT0gcHhhX3VkY19wdWxsdXAsCisJLnZidXNfc2Vzc2lvbgk9IHB4YV91ZGNfdmJ1c19zZXNzaW9uLAorCS52YnVzX2RyYXcJPSBweGFfdWRjX3ZidXNfZHJhdywKIH07CiAKIC8qKgogICogdWRjX2Rpc2FibGUgLSBkaXNhYmxlIHVkYyBkZXZpY2UgY29udHJvbGxlcgogICogQHVkYzogdWRjIGRldmljZQorICogQ29udGV4dDogYW55CiAgKgogICogRGlzYWJsZXMgdGhlIHVkYyBkZXZpY2UgOiBkaXNhYmxlcyBjbG9ja3MsIHVkYyBpbnRlcnJ1cHRzLCBjb250cm9sIGVuZHBvaW50CiAgKiBpbnRlcnJ1cHRzLgogICovCiBzdGF0aWMgdm9pZCB1ZGNfZGlzYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKQogeworCWlmICghdWRjLT5lbmFibGVkKQorCQlyZXR1cm47CisKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMCwgMCk7CiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjEsIDApOwogCkBAIC0xNTIzLDggKzE2NjgsOCBAQAogCiAJZXAwX2lkbGUodWRjKTsKIAl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQotCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpOworCisJdWRjLT5lbmFibGVkID0gMDsKIH0KIAogLyoqCkBAIC0xNTU1LDEwICsxNzAwLDkgQEAKIAl9CiAKIAkvKiBVU0IgZW5kcG9pbnRzIGluaXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfVVNCX0VORFBPSU5UUzsgaSsrKQotCQlpZiAoaSAhPSAwKQotCQkJbGlzdF9hZGRfdGFpbCgmZGV2LT51ZGNfdXNiX2VwW2ldLnVzYl9lcC5lcF9saXN0LAotCQkJCQkmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJZm9yIChpID0gMTsgaSA8IE5SX1VTQl9FTkRQT0lOVFM7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgmZGV2LT51ZGNfdXNiX2VwW2ldLnVzYl9lcC5lcF9saXN0LAorCQkJCSZkZXYtPmdhZGdldC5lcF9saXN0KTsKIH0KIAogLyoqCkBAIC0xNTcwLDYgKzE3MTQsOSBAQAogICovCiBzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpCiB7CisJaWYgKHVkYy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjAsIDApOwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IxLCAwKTsKIAl1ZGNfY2xlYXJfbWFza19VRENDUih1ZGMsIFVEQ0NSX1VERSk7CkBAIC0xNTk4LDkgKzE3NDUsNyBAQAogCS8qIGVuYWJsZSBlcDAgaXJxcyAqLwogCXBpb19pcnFfZW5hYmxlKCZ1ZGMtPnB4YV9lcFswXSk7CiAKLQlkZXZfaW5mbyh1ZGMtPmRldiwgIlVEQyBjb25uZWN0aW5nXG4iKTsKLQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKLQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9DT05ORUNUKTsKKwl1ZGMtPmVuYWJsZWQgPSAxOwogfQogCiAvKioKQEAgLTE2MTIsNiArMTc1Nyw5IEBACiAgKiB1c2IgdHJhZmZpYyBmb2xsb3dzIHVudGlsIGEgZGlzY29ubmVjdCBpcyByZXBvcnRlZC4gIFRoZW4gYSBob3N0IG1heSBjb25uZWN0CiAgKiBhZ2Fpbiwgb3IgdGhlIGRyaXZlciBtaWdodCBnZXQgdW5ib3VuZC4KICAqCisgKiBOb3RlIHRoYXQgdGhlIHVkYyBpcyBub3QgYXV0b21hdGljYWxseSBlbmFibGVkLiBDaGVjayBmdW5jdGlvbgorICogc2hvdWxkX2VuYWJsZV91ZGMoKS4KKyAqCiAgKiBSZXR1cm5zIDAgaWYgbm8gZXJyb3IsIC1FSU5WQUwsIC1FTk9ERVYsIC1FQlVTWSBvdGhlcndpc2UKICAqLwogaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQpAQCAtMTYzMCw2ICsxNzc4LDcgQEAKIAkvKiBmaXJzdCBob29rIHVwIHRoZSBkcml2ZXIgLi4uICovCiAJdWRjLT5kcml2ZXIgPSBkcml2ZXI7CiAJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwlkcGx1c19wdWxsdXAodWRjLCAxKTsKIAogCXJldHZhbCA9IGRldmljZV9hZGQoJnVkYy0+Z2FkZ2V0LmRldik7CiAJaWYgKHJldHZhbCkgewpAQCAtMTY0NSw5ICsxNzk0LDIxIEBACiAJZGV2X2RiZyh1ZGMtPmRldiwgInJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAogCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKIAotCXVkY19lbmFibGUodWRjKTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikgeworCQlyZXR2YWwgPSBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgJnVkYy0+Z2FkZ2V0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2Vycih1ZGMtPmRldiwgImNhbid0IGJpbmQgdG8gdHJhbnNjZWl2ZXJcbiIpOworCQkJZ290byB0cmFuc2NlaXZlcl9mYWlsOworCQl9CisJfQorCisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKIAlyZXR1cm4gMDsKIAordHJhbnNjZWl2ZXJfZmFpbDoKKwlpZiAoZHJpdmVyLT51bmJpbmQpCisJCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CiBiaW5kX2ZhaWw6CiAJZGV2aWNlX2RlbCgmdWRjLT5nYWRnZXQuZGV2KTsKIGFkZF9mYWlsOgpAQCAtMTY5OSwxNCArMTg2MCwxNyBAQAogCiAJc3RvcF9hY3Rpdml0eSh1ZGMsIGRyaXZlcik7CiAJdWRjX2Rpc2FibGUodWRjKTsKKwlkcGx1c19wdWxsdXAodWRjLCAwKTsKIAogCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CiAJdWRjLT5kcml2ZXIgPSBOVUxMOwogCiAJZGV2aWNlX2RlbCgmdWRjLT5nYWRnZXQuZGV2KTsKLQogCWRldl9pbmZvKHVkYy0+ZGV2LCAidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKIAkJIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCXJldHVybiBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTgyMywxNCArMTk4NywxNCBAQAogCXN0cnVjdCBweGEyN3hfcmVxdWVzdAkqcmVxID0gTlVMTDsKIAlpbnQJCQljb21wbGV0ZWQgPSAwOwogCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QsIHF1ZXVlKTsKKwogCXVkY2NzcjAgPSB1ZGNfZXBfcmVhZGwoZXAsIFVEQ0NTUik7CiAJZXBfZGJnKGVwLCAic3RhdGU9JXMsIHJlcT0lcCwgdWRjY3NyMD0weCUwM3gsIHVkY2Jjcj0lZCwgaXJxX21zaz0leFxuIiwKIAkJRVAwX1NUTkFNRSh1ZGMpLCByZXEsIHVkY2NzcjAsIHVkY19lcF9yZWFkbChlcCwgVURDQkNSKSwKIAkJKGZpZm9faXJxIDw8IDEgfCBvcGNfaXJxKSk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCi0JCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCwgcXVldWUpOwotCiAJaWYgKHVkY2NzcjAgJiBVRENDU1IwX1NTVCkgewogCQllcF9kYmcoZXAsICJjbGVhcmluZyBzdGFsbCBzdGF0dXNcbiIpOwogCQludWtlKGVwLCAtRVBJUEUpOwpAQCAtMjIxMiw3ICsyMzc2LDcgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CiAJc3RydWN0IHB4YV91ZGMgKnVkYyA9ICZtZW1vcnk7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMCwgZ3BpbzsKIAogCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVncykKQEAgLTIyMjMsNiArMjM4NywyMCBAQAogCiAJdWRjLT5kZXYgPSAmcGRldi0+ZGV2OwogCXVkYy0+bWFjaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVkYy0+dHJhbnNjZWl2ZXIgPSBvdGdfZ2V0X3RyYW5zY2VpdmVyKCk7CisKKwlncGlvID0gdWRjLT5tYWNoLT5ncGlvX3B1bGx1cDsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgeworCQlyZXR2YWwgPSBncGlvX3JlcXVlc3QoZ3BpbywgIlVTQiBEKyBwdWxsdXAiKTsKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sCisJCQkJICAgICAgIHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXBfaW52ZXJ0ZWQpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkbid0IHJlcXVlc3QgZ3BpbyAlZCA6ICVkXG4iLAorCQkJZ3BpbywgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAl1ZGMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUih1ZGMtPmNsaykpIHsKQEAgLTIyNDAsNiArMjQxOCw3IEBACiAJZGV2aWNlX2luaXRpYWxpemUoJnVkYy0+Z2FkZ2V0LmRldik7CiAJdWRjLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJdWRjLT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gTlVMTDsKKwl1ZGMtPnZidXNfc2Vuc2VkID0gMDsKIAogCXRoZV9jb250cm9sbGVyID0gdWRjOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHVkYyk7CkBAIC0yMjczLDE0ICsyNDUyLDIxIEBACiBzdGF0aWMgaW50IF9fZXhpdCBweGFfdWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBweGFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlpbnQgZ3BpbyA9IHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXA7CiAKIAl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHVkYy0+ZHJpdmVyKTsKIAlmcmVlX2lycSh1ZGMtPmlycSwgdWRjKTsKIAlweGFfY2xlYW51cF9kZWJ1Z2ZzKHVkYyk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpCisJCWdwaW9fZnJlZShncGlvKTsKIAorCW90Z19wdXRfdHJhbnNjZWl2ZXIodWRjLT50cmFuc2NlaXZlcik7CisKKwl1ZGMtPnRyYW5zY2VpdmVyID0gTlVMTDsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJY2xrX3B1dCh1ZGMtPmNsayk7CisJaW91bm1hcCh1ZGMtPnJlZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzE5LDYgKzI1MDUsOCBAQAogCX0KIAogCXVkY19kaXNhYmxlKHVkYyk7CisJdWRjLT5wdWxsdXBfcmVzdW1lID0gdWRjLT5wdWxsdXBfb247CisJZHBsdXNfcHVsbHVwKHVkYywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNDYsNyArMjUzNCw5IEBACiAJCQkJZXAtPnVkY2Nzcl92YWx1ZSwgZXAtPnVkY2NyX3ZhbHVlKTsKIAl9CiAKLQl1ZGNfZW5hYmxlKHVkYyk7CisJZHBsdXNfcHVsbHVwKHVkYywgdWRjLT5wdWxsdXBfcmVzdW1lKTsKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOwogCS8qCiAJICogV2UgZG8gbm90IGhhbmRsZSBPVEcgeWV0LgogCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaAppbmRleCAxZDFiNzkzNi4uZGI1ODEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogCiAvKgogICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMKQEAgLTQyMSwxMCArNDIyLDE0IEBACiAgKiBAZHJpdmVyOiBib3VuZCBnYWRnZXQgKHplcm8sIGdfZXRoZXIsIGdfZmlsZV9zdG9yYWdlLCAuLi4pCiAgKiBAZGV2OiBkZXZpY2UKICAqIEBtYWNoOiBtYWNoaW5lIGluZm8sIHVzZWQgdG8gYWN0aXZhdGUgc3BlY2lmaWMgR1BJTworICogQHRyYW5zY2VpdmVyOiBleHRlcm5hbCB0cmFuc2NlaXZlciB0byBoYW5kbGUgdmJ1cyBzZW5zZSBhbmQgRCsgcHVsbHVwCiAgKiBAZXAwc3RhdGU6IGNvbnRyb2wgZW5kcG9pbnQgc3RhdGUgbWFjaGluZSBzdGF0ZQogICogQHN0YXRzOiBzdGF0aXN0aWNzIG9uIHVkYyB1c2FnZQogICogQHVkY191c2JfZXA6IGFycmF5IG9mIHVzYiBlbmRwb2ludHMgb2ZmZXJlZCBieSB0aGUgZ2FkZ2V0CiAgKiBAcHhhX2VwOiBhcnJheSBvZiBweGEgYXZhaWxhYmxlIGVuZHBvaW50cworICogQGVuYWJsZWQ6IFVEQyB3YXMgZW5hYmxlZCBieSBhIHByZXZpb3VzIHVkY19lbmFibGUoKQorICogQHB1bGx1cF9vbjogaWYgcHVsbHVwIHJlc2lzdG9yIGNvbm5lY3RlZCB0byBEKyBwaW4KKyAqIEBwdWxsdXBfcmVzdW1lOiBpZiBwdWxsdXAgcmVzaXN0b3Igc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBEKyBwaW4gb24gcmVzdW1lCiAgKiBAY29uZmlnOiBVREMgYWN0aXZlIGNvbmZpZ3VyYXRpb24KICAqIEBsYXN0X2ludGVyZmFjZTogVURDIGludGVyZmFjZSBvZiB0aGUgbGFzdCBTRVRfSU5URVJGQUNFIGhvc3QgcmVxdWVzdAogICogQGxhc3RfYWx0ZXJuYXRlOiBVREMgYWx0c2V0dGluZyBvZiB0aGUgbGFzdCBTRVRfSU5URVJGQUNFIGhvc3QgcmVxdWVzdApAQCAtNDQzLDYgKzQ0OCw3IEBACiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyCQkqZHJpdmVyOwogCXN0cnVjdCBkZXZpY2UJCQkJKmRldjsKIAlzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8JCSptYWNoOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJCQkqdHJhbnNjZWl2ZXI7CiAKIAllbnVtIGVwMF9zdGF0ZQkJCQllcDBzdGF0ZTsKIAlzdHJ1Y3QgdWRjX3N0YXRzCQkJc3RhdHM7CkBAIC00NTAsNiArNDU2LDEwIEBACiAJc3RydWN0IHVkY191c2JfZXAJCQl1ZGNfdXNiX2VwW05SX1VTQl9FTkRQT0lOVFNdOwogCXN0cnVjdCBweGFfZXAJCQkJcHhhX2VwW05SX1BYQV9FTkRQT0lOVFNdOwogCisJdW5zaWduZWQJCQkJZW5hYmxlZDoxOworCXVuc2lnbmVkCQkJCXB1bGx1cF9vbjoxOworCXVuc2lnbmVkCQkJCXB1bGx1cF9yZXN1bWU6MTsKKwl1bnNpZ25lZAkJCQl2YnVzX3NlbnNlZDoxOwogCXVuc2lnbmVkCQkJCWNvbmZpZzoyOwogCXVuc2lnbmVkCQkJCWxhc3RfaW50ZXJmYWNlOjM7CiAJdW5zaWduZWQJCQkJbGFzdF9hbHRlcm5hdGU6MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKaW5kZXggOGMyNmY1ZS4uMmI0NjYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTYzLDcgKzYzLDcgQEAKIHN0YXRpYyBybmRpc19wYXJhbXMgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW1JORElTX01BWF9DT05GSUdTXTsKIAogLyogRHJpdmVyIFZlcnNpb24gKi8KLXN0YXRpYyBjb25zdCBfX2xlMzIgcm5kaXNfZHJpdmVyX3ZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKK3N0YXRpYyBjb25zdCBfX2xlMzIgcm5kaXNfZHJpdmVyX3ZlcnNpb24gPSBjcHVfdG9fbGUzMiAoMSk7CiAKIC8qIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KIHN0YXRpYyBybmRpc19yZXNwX3QgKnJuZGlzX2FkZF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1MzIgbGVuZ3RoKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWludAkJCWksIGNvdW50OwogCXJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUJKnJlc3A7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkqc3RhdHM7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJKnN0YXRzOwogCiAJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKikgci0+YnVmOwpAQCAtMTkwLDEzICsxOTAsMTAgQEAKIAogCS8qIHJlc3BvbnNlIGdvZXMgaGVyZSwgcmlnaHQgYWZ0ZXIgdGhlIGhlYWRlciAqLwogCW91dGJ1ZiA9IChfX2xlMzIgKikgJnJlc3BbMV07Ci0JcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMTYpOwogCiAJbmV0ID0gcm5kaXNfcGVyX2Rldl9wYXJhbXNbY29uZmlnTnJdLmRldjsKLQlpZiAobmV0LT5nZXRfc3RhdHMpCi0JCXN0YXRzID0gbmV0LT5nZXRfc3RhdHMobmV0KTsKLQllbHNlCi0JCXN0YXRzID0gTlVMTDsKKwlzdGF0cyA9IGRldl9nZXRfc3RhdHMobmV0KTsKIAogCXN3aXRjaCAoT0lEKSB7CiAKQEAgLTIyMSw3ICsyMTgsNyBAQAogCQkgKiByZWRkaXRlIGVyZ28gcXVhZSBzdW50IENhZXNhcmlzIENhZXNhcmkKIAkJICogZXQgcXVhZSBzdW50IERlaSBEZW8hCiAJCSAqLwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC0yNTYsNyArMjUzLDcgQEAKIAkJCXByX2RlYnVnKCIlczogT0lEX0dFTl9MSU5LX1NQRUVEXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLm1lZGlhX3N0YXRlCiAJCQkJPT0gTkRJU19NRURJQV9TVEFURV9ESVNDT05ORUNURUQpCi0JCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQllbHNlCiAJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKAogCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3BlZWQpOwpAQCAtMzE3LDcgKzMxNCw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRToKIAkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRVxuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihSTkRJU19NQVhfVE9UQUxfU0laRSk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMihSTkRJU19NQVhfVE9UQUxfU0laRSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC0zMzIsNyArMzI5LDcgQEAKIAogCWNhc2UgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU06CiAJCXByX2RlYnVnKCIlczogT0lEX0dFTl9QSFlTSUNBTF9NRURJVU1cbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtMzQyLDcgKzMzOSw3IEBACiAJICovCiAJY2FzZSBPSURfR0VOX01BQ19PUFRJT05TOgkJLyogZnJvbSBXaW5NRSAqLwogCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTUFDX09QVElPTlNcbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoCisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMigKIAkJCSAgTkRJU19NQUNfT1BUSU9OX1JFQ0VJVkVfU0VSSUFMSVpFRAogCQkJfCBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVgpOwogCQlyZXR2YWwgPSAwOwpAQCAtNDMxLDcgKzQyOCw3IEBACiAJY2FzZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1Q6CiAJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIE11bHRpY2FzdCBiYXNlIGFkZHJlc3Mgb25seSAqLwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMHhFMDAwMDAwMCk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMHhFMDAwMDAwMCk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC00MzksNyArNDM2LDcgQEAKIAljYXNlIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRToKIAkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkVcbiIsIF9fZnVuY19fKTsKIAkJLyogTXVsdGljYXN0IGJhc2UgYWRkcmVzcyBvbmx5ICovCi0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgxKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTQ2MSwxNCArNDU4LDE0IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT05cbiIsIF9fZnVuY19fKTsKLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OU1xuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC01NzIsMjQgKzU2OSwyNCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX2luaXRfY21wbHRfdHlwZSAqKSByLT5idWY7CiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKAogCQkJUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCk7Ci0JcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDUyKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDUyKTsKIAlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLwotCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKLQlyZXNwLT5NYWpvclZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NQUpPUl9WRVJTSU9OKTsKLQlyZXNwLT5NaW5vclZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NSU5PUl9WRVJTSU9OKTsKLQlyZXNwLT5EZXZpY2VGbGFncyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX0RGX0NPTk5FQ1RJT05MRVNTKTsKLQlyZXNwLT5NZWRpdW0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NRURJVU1fODAyXzMpOwotCXJlc3AtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJcmVzcC0+TWFqb3JWZXJzaW9uID0gY3B1X3RvX2xlMzIgKFJORElTX01BSk9SX1ZFUlNJT04pOworCXJlc3AtPk1pbm9yVmVyc2lvbiA9IGNwdV90b19sZTMyIChSTkRJU19NSU5PUl9WRVJTSU9OKTsKKwlyZXNwLT5EZXZpY2VGbGFncyA9IGNwdV90b19sZTMyIChSTkRJU19ERl9DT05ORUNUSU9OTEVTUyk7CisJcmVzcC0+TWVkaXVtID0gY3B1X3RvX2xlMzIgKFJORElTX01FRElVTV84MDJfMyk7CisJcmVzcC0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0gY3B1X3RvX2xlMzIgKDEpOwogCXJlc3AtPk1heFRyYW5zZmVyU2l6ZSA9IGNwdV90b19sZTMyICgKIAkJICBwYXJhbXMtPmRldi0+bXR1CiAJCSsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKQogCQkrIHNpemVvZiAoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSkKIAkJKyAyMik7Ci0JcmVzcC0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7Ci0JcmVzcC0+QUZMaXN0T2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7Ci0JcmVzcC0+QUZMaXN0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPlBhY2tldEFsaWdubWVudEZhY3RvciA9IGNwdV90b19sZTMyICgwKTsKKwlyZXNwLT5BRkxpc3RPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+QUZMaXN0U2l6ZSA9IGNwdV90b19sZTMyICgwKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNjE3LDcgKzYxNCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqKSByLT5idWY7CiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1FVRVJZX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyIChSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCk7CiAJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KIAogCWlmIChnZW5fbmRpc19xdWVyeV9yZXNwIChjb25maWdOciwgbGUzMl90b19jcHUgKGJ1Zi0+T0lEKSwKQEAgLTYyNiwxMyArNjIzLDEzIEBACiAJCQlsZTMyX3RvX2NwdShidWYtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKSwKIAkJCXIpKSB7CiAJCS8qIE9JRCBub3Qgc3VwcG9ydGVkICovCi0JCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoCiAJCQkJUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQpOwotCQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoc2l6ZW9mICpyZXNwKTsKLQkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyIChzaXplb2YgKnJlc3ApOworCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA9IGNwdV90b19sZTMyICgwKTsKKwkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMCk7CiAJfSBlbHNlCi0JCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwkJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNjY1LDE0ICs2NjIsMTQgQEAKIAlwcl9kZWJ1ZygiXG4iKTsKICNlbmRpZgogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfU0VUX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDE2KTsKIAlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLwogCWlmIChnZW5fbmRpc19zZXRfcmVzcCAoY29uZmlnTnIsIGxlMzJfdG9fY3B1IChidWYtPk9JRCksCiAJCQkoKHU4ICopIGJ1ZikgKyA4ICsgQnVmT2Zmc2V0LCBCdWZMZW5ndGgsIHIpKQotCQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRCk7CisJCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRCk7CiAJZWxzZQotCQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTY4OSwxMSArNjg2LDExIEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfcmVzZXRfY21wbHRfdHlwZSAqKSByLT5idWY7CiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOwotCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyIChSRU1PVEVfTkRJU19SRVNFVF9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgxNik7CisJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKIAkvKiByZXNlbnQgaW5mb3JtYXRpb24gKi8KLQlyZXNwLT5BZGRyZXNzaW5nUmVzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwlyZXNwLT5BZGRyZXNzaW5nUmVzZXQgPSBjcHVfdG9fbGUzMiAoMSk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTcxMywxMSArNzEwLDExIEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUgKikgci0+YnVmOwogCi0JcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyICgKIAkJCVJFTU9URV9ORElTX0tFRVBBTElWRV9DTVBMVCk7Ci0JcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDE2KTsKIAlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLwotCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC03NDIsMTIgKzczOSwxMiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXNwID0gKHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZSAqKSByLT5idWY7CiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKAogCQkJUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRyk7Ci0JcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDIwKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDIwKTsKIAlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoc3RhdHVzKTsKLQlyZXNwLT5TdGF0dXNCdWZmZXJMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQlyZXNwLT5TdGF0dXNCdWZmZXJPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwlyZXNwLT5TdGF0dXNCdWZmZXJMZW5ndGggPSBjcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+U3RhdHVzQnVmZmVyT2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDApOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC05NjMsOSArOTYwLDkgQEAKIAkJcmV0dXJuOwogCWhlYWRlciA9ICh2b2lkICopIHNrYl9wdXNoIChza2IsIHNpemVvZiAqaGVhZGVyKTsKIAltZW1zZXQgKGhlYWRlciwgMCwgc2l6ZW9mICpoZWFkZXIpOwotCWhlYWRlci0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpOworCWhlYWRlci0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMihSRU1PVEVfTkRJU19QQUNLRVRfTVNHKTsKIAloZWFkZXItPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMihza2ItPmxlbik7Ci0JaGVhZGVyLT5EYXRhT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMzYpOworCWhlYWRlci0+RGF0YU9mZnNldCA9IGNwdV90b19sZTMyICgzNik7CiAJaGVhZGVyLT5EYXRhTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4gLSBzaXplb2YgKmhlYWRlcik7CiB9CiAKQEAgLTEwMjksNyArMTAyNiw3IEBACiAJX19sZTMyCQkqdG1wID0gKHZvaWQgKikgc2tiLT5kYXRhOwogCiAJLyogTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZW5ndGggKi8KLQlpZiAoX19jb25zdGFudF9jcHVfdG9fbGUzMihSRU1PVEVfTkRJU19QQUNLRVRfTVNHKQorCWlmIChjcHVfdG9fbGUzMihSRU1PVEVfTkRJU19QQUNLRVRfTVNHKQogCQkJIT0gZ2V0X3VuYWxpZ25lZCh0bXArKykpCiAJCXJldHVybiAtRUlOVkFMOwogCXRtcCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCmluZGV4IDM3ODc5YWYuLmY0NmE2MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTg3LDEyICs4NywxMiBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0RFVklDRV9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkvKiAuYkRldmljZUNsYXNzID0gZih1c2VfYWNtKSAqLwogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAogCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAogCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLwotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFTkRPUl9JRCksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KEdTX1ZFTkRPUl9JRCksCiAJLyogLmlkUHJvZHVjdCA9CWYodXNlX2FjbSkgKi8KIAkvKiAuYmNkRGV2aWNlID0gZihoYXJkd2FyZSkgKi8KIAkvKiAuaU1hbnVmYWN0dXJlciA9IERZTkFNSUMgKi8KQEAgLTIxNiw3ICsyMTYsNyBAQAogCQlwcl93YXJuaW5nKCJnc19iaW5kOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCiAJCQlnYWRnZXQtPm5hbWUpOwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTSB8IDB4MDA5OSk7CisJCQljcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTSB8IDB4MDA5OSk7CiAJfQogCiAJaWYgKGdhZGdldF9pc19vdGcoY2Rldi0+Z2FkZ2V0KSkgewpAQCAtMjU1LDE5ICsyNTUsMTkgQEAKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDI7CiAJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19DT01NOwogCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfQ0RDX1BST0RVQ1RfSUQpOworCQkJCWNwdV90b19sZTE2KEdTX0NEQ19QUk9EVUNUX0lEKTsKIAl9IGVsc2UgaWYgKHVzZV9vYmV4KSB7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkNEQyBPQkVYIGNvbmZpZyI7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAzOwogCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQ09NTTsKIAkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfQ0RDX09CRVhfUFJPRFVDVF9JRCk7CisJCQljcHVfdG9fbGUxNihHU19DRENfT0JFWF9QUk9EVUNUX0lEKTsKIAl9IGVsc2UgewogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJHZW5lcmljIFNlcmlhbCBjb25maWciOwogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMTsKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDOwogCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfUFJPRFVDVF9JRCk7CisJCQkJY3B1X3RvX2xlMTYoR1NfUFJPRFVDVF9JRCk7CiAJfQogCXN0cmluZ3NfZGV2W1NUUklOR19ERVNDUklQVElPTl9JRFhdLnMgPSBzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYwppbmRleCA1M2Q1OTI4Li4wYTRkOTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOwogCWdzX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAKLQljb2RpbmcuZHdEVEVSYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMig5NjAwKTsKKwljb2RpbmcuZHdEVEVSYXRlID0gY3B1X3RvX2xlMzIoOTYwMCk7CiAJY29kaW5nLmJDaGFyRm9ybWF0ID0gODsKIAljb2RpbmcuYlBhcml0eVR5cGUgPSBVU0JfQ0RDX05PX1BBUklUWTsKIAljb2RpbmcuYkRhdGFCaXRzID0gVVNCX0NEQ18xX1NUT1BfQklUUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCmluZGV4IDM2MWQ5NjUuLjJkNzcyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtMTAyLDIyICsxMDIsMzIgQEAKICNpZm5kZWYJQ09ORklHX1VTQl9aRVJPX0hOUFRFU1QKICNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgwNTI1CQkvKiBOZXRDaGlwICovCiAjZGVmaW5lIERSSVZFUl9QUk9EVUNUX05VTQkweGE0YTAJCS8qIExpbnV4LVVTQiAiR2FkZ2V0IFplcm8iICovCisjZGVmaW5lIERFRkFVTFRfQVVUT1JFU1VNRQkwCiAjZWxzZQogI2RlZmluZSBEUklWRVJfVkVORE9SX05VTQkweDFhMGEJCS8qIE9URyB0ZXN0IGRldmljZSBJRHMgKi8KICNkZWZpbmUgRFJJVkVSX1BST0RVQ1RfTlVNCTB4YmFkZAorI2RlZmluZSBERUZBVUxUX0FVVE9SRVNVTUUJNQogI2VuZGlmCiAKKy8qIElmIHRoZSBvcHRpb25hbCAiYXV0b3Jlc3VtZSIgbW9kZSBpcyBlbmFibGVkLCBpdCBwcm92aWRlcyBnb29kCisgKiBmdW5jdGlvbmFsIGNvdmVyYWdlIGZvciB0aGUgIlVTQkNWIiB0ZXN0IGhhcm5lc3MgZnJvbSBVU0ItSUYuCisgKiBJdCdzIGFsd2F5cyBzZXQgaWYgT1RHIG1vZGUgaXMgZW5hYmxlZC4KKyAqLwordW5zaWduZWQgYXV0b3Jlc3VtZSA9IERFRkFVTFRfQVVUT1JFU1VNRTsKK21vZHVsZV9wYXJhbShhdXRvcmVzdW1lLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b3Jlc3VtZSwgInplcm8sIG9yIHNlY29uZHMgYmVmb3JlIHJlbW90ZSB3YWtldXAiKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAogCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkyLAogfTsKIApAQCAtMjEyLDYgKzIyMiw0NyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QJYXV0b3Jlc3VtZV90aW1lcjsKKworc3RhdGljIHZvaWQgemVyb19hdXRvcmVzdW1lKHVuc2lnbmVkIGxvbmcgX2MpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gKHZvaWQgKilfYzsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJKmcgPSBjZGV2LT5nYWRnZXQ7CisKKwkvKiB1bmNvbmZpZ3VyZWQgZGV2aWNlcyBjYW4ndCBpc3N1ZSB3YWtldXBzICovCisJaWYgKCFjZGV2LT5jb25maWcpCisJCXJldHVybjsKKworCS8qIE5vcm1hbGx5IHRoZSBob3N0IHdvdWxkIGJlIHdva2VuIHVwIGZvciBzb21ldGhpbmcKKwkgKiBtb3JlIHNpZ25pZmljYW50IHRoYW4ganVzdCBhIHRpbWVyIGZpcmluZzsgbGlrZWx5CisJICogYmVjYXVzZSBvZiBzb21lIGRpcmVjdCB1c2VyIHJlcXVlc3QuCisJICovCisJaWYgKGctPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCWludCBzdGF0dXMgPSB1c2JfZ2FkZ2V0X3dha2V1cChnKTsKKwkJSU5GTyhjZGV2LCAiJXMgLS0+ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHplcm9fc3VzcGVuZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJaWYgKGNkZXYtPmdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybjsKKworCWlmIChhdXRvcmVzdW1lKSB7CisJCW1vZF90aW1lcigmYXV0b3Jlc3VtZV90aW1lciwgamlmZmllcyArIChIWiAqIGF1dG9yZXN1bWUpKTsKKwkJREJHKGNkZXYsICJzdXNwZW5kLCB3YWtldXAgaW4gJWQgc2Vjb25kc1xuIiwgYXV0b3Jlc3VtZSk7CisJfSBlbHNlCisJCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHZvaWQgemVyb19yZXN1bWUoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlkZWxfdGltZXIoJmF1dG9yZXN1bWVfdGltZXIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IF9faW5pdCB6ZXJvX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCWludAkJCWdjbnVtOwpAQCAtMjM5LDE3ICsyOTAsMTkgQEAKIAlzdHJpbmdzX2RldltTVFJJTkdfU0VSSUFMX0lEWF0uaWQgPSBpZDsKIAlkZXZpY2VfZGVzYy5pU2VyaWFsTnVtYmVyID0gaWQ7CiAKKwlzZXR1cF90aW1lcigmYXV0b3Jlc3VtZV90aW1lciwgemVyb19hdXRvcmVzdW1lLCAodW5zaWduZWQgbG9uZykgY2Rldik7CisKIAkvKiBSZWdpc3RlciBwcmltYXJ5LCB0aGVuIHNlY29uZGFyeSBjb25maWd1cmF0aW9uLiAgTm90ZSB0aGF0CiAJICogU0gzIG9ubHkgYWxsb3dzIG9uZSBjb25maWcuLi4KIAkgKi8KIAlpZiAobG9vcGRlZmF1bHQpIHsKLQkJbG9vcGJhY2tfYWRkKGNkZXYpOworCQlsb29wYmFja19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAkJaWYgKCFnYWRnZXRfaXNfc2goZ2FkZ2V0KSkKLQkJCXNvdXJjZXNpbmtfYWRkKGNkZXYpOworCQkJc291cmNlc2lua19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAl9IGVsc2UgewotCQlzb3VyY2VzaW5rX2FkZChjZGV2KTsKKwkJc291cmNlc2lua19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAkJaWYgKCFnYWRnZXRfaXNfc2goZ2FkZ2V0KSkKLQkJCWxvb3BiYWNrX2FkZChjZGV2KTsKKwkJCWxvb3BiYWNrX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCX0KIAogCWdjbnVtID0gdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlcihnYWRnZXQpOwpAQCAtMjY1LDcgKzMxOCw3IEBACiAJCSAqLwogCQlwcl93YXJuaW5nKCIlczogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAogCQkJbG9uZ25hbWUsIGdhZGdldC0+bmFtZSk7Ci0JCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg5OTk5KTsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHg5OTk5KTsKIAl9CiAKIApAQCAtMjc4LDExICszMzEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB6ZXJvX3VuYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJZGVsX3RpbWVyX3N5bmMoJmF1dG9yZXN1bWVfdGltZXIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyIHplcm9fZHJpdmVyID0gewogCS5uYW1lCQk9ICJ6ZXJvIiwKIAkuZGV2CQk9ICZkZXZpY2VfZGVzYywKIAkuc3RyaW5ncwk9IGRldl9zdHJpbmdzLAogCS5iaW5kCQk9IHplcm9fYmluZCwKKwkudW5iaW5kCQk9IHplcm9fdW5iaW5kLAorCS5zdXNwZW5kCT0gemVyb19zdXNwZW5kLAorCS5yZXN1bWUJCT0gemVyb19yZXN1bWUsCiB9OwogCiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBCcm93bmVsbCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCmluZGV4IDJjNjNiZmIuLjg0NTQ3OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTI0LDEwICsyNCw3IEBACiAJICBUaGUgRW5oYW5jZWQgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoRUhDSSkgaXMgc3RhbmRhcmQgZm9yIFVTQiAyLjAKIAkgICJoaWdoIHNwZWVkIiAoNDgwIE1iaXQvc2VjLCA2MCBNYnl0ZS9zZWMpIGhvc3QgY29udHJvbGxlciBoYXJkd2FyZS4KIAkgIElmIHlvdXIgVVNCIGhvc3QgY29udHJvbGxlciBzdXBwb3J0cyBVU0IgMi4wLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bwotCSAgY29uZmlndXJlIHRoaXMgSG9zdCBDb250cm9sbGVyIERyaXZlci4gIEF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgCi0JICB0aGUgcHJpbWFyeSBpbXBsZW1lbnRhdGlvbiBvZiBFSENJIGlzIGEgY2hpcCBmcm9tIE5FQywgd2lkZWx5IGF2YWlsYWJsZQotCSAgaW4gYWRkLW9uIFBDSSBjYXJkcywgYnV0IGltcGxlbWVudGF0aW9ucyBhcmUgaW4gdGhlIHdvcmtzIGZyb20gb3RoZXIgCi0JICB2ZW5kb3JzIGluY2x1ZGluZyBJbnRlbCBhbmQgUGhpbGlwcy4gIE1vdGhlcmJvYXJkIHN1cHBvcnQgaXMgYXBwZWFyaW5nLgorCSAgY29uZmlndXJlIHRoaXMgSG9zdCBDb250cm9sbGVyIERyaXZlci4KIAogCSAgRUhDSSBjb250cm9sbGVycyBhcmUgcGFja2FnZWQgd2l0aCAiY29tcGFuaW9uIiBob3N0IGNvbnRyb2xsZXJzIChPSENJCiAJICBvciBVSENJKSB0byBoYW5kbGUgVVNCIDEuMSBkZXZpY2VzIGNvbm5lY3RlZCB0byByb290IGh1YiBwb3J0cy4gIFBvcnRzCkBAIC0xMjMsNyArMTIwLDcgQEAKIAogY29uZmlnIFVTQl9JU1AxNzYwX0hDRAogCXRyaXN0YXRlICJJU1AgMTc2MCBIQ0Qgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwgJiYgKFBDSSB8fCBQUENfT0YpCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQogCSAgVGhlIElTUDE3NjAgY2hpcCBpcyBhIFVTQiAyLjAgaG9zdCBjb250cm9sbGVyLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggZTU1MWJiMy4uZjI2MThkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMTEwLDYgKzExMCw0MiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgdm9pZAordGltZXJfYWN0aW9uKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCit7CisJLyogRG9uJ3Qgb3ZlcnJpZGUgdGltZW91dHMgd2hpY2ggc2hyaW5rIG9yIChsYXRlcikgZGlzYWJsZQorCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQorCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCisJICovCisJaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQorCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQorCQkJCSYgZWhjaS0+YWN0aW9ucykpCisJCXJldHVybjsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgeworCQl1bnNpZ25lZCBsb25nIHQ7CisKKwkJc3dpdGNoIChhY3Rpb24pIHsKKwkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKKwkJCXQgPSBFSENJX0lPX0pJRkZJRVM7CisJCQlicmVhazsKKwkJY2FzZSBUSU1FUl9BU1lOQ19PRkY6CisJCQl0ID0gRUhDSV9BU1lOQ19KSUZGSUVTOworCQkJYnJlYWs7CisJCS8qIGNhc2UgVElNRVJfQVNZTkNfU0hSSU5LOiAqLworCQlkZWZhdWx0OgorCQkJLyogYWRkIGEgamlmZmllIHNpbmNlIHdlIHN5bmNoIGFnYWluc3QgdGhlCisJCQkgKiA4IEtIeiB1ZnJhbWUgY291bnRlci4KKwkJCSAqLworCQkJdCA9IERJVl9ST1VORF9VUChFSENJX1NIUklOS19GUkFNRVMgKiBIWiwgMTAwMCkgKyAxOworCQkJYnJlYWs7CisJCX0KKwkJbW9kX3RpbWVyKCZlaGNpLT53YXRjaGRvZywgdCArIGppZmZpZXMpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogLyoKICAqIGhhbmRzaGFrZSAtIHNwaW4gcmVhZGluZyBoYyB1bnRpbCBoYW5kc2hha2UgY29tcGxldGVzIG9yIGZhaWxzCiAgKiBAcHRyOiBhZGRyZXNzIG9mIGhjIHJlZ2lzdGVyIHRvIGJlIHJlYWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCmluZGV4IGVjYzliNjYuLjE5NzZiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwpAQCAtMzMzLDEyICszMzMsNDAgQEAKIAkJdG9rZW4gPSBoYzMyX3RvX2NwdShlaGNpLCBxdGQtPmh3X3Rva2VuKTsKIAogCQkvKiBhbHdheXMgY2xlYW4gdXAgcXRkcyB0aGUgaGMgZGUtYWN0aXZhdGVkICovCisgcmV0cnlfeGFjdGVycjoKIAkJaWYgKCh0b2tlbiAmIFFURF9TVFNfQUNUSVZFKSA9PSAwKSB7CiAKIAkJCS8qIG9uIFNUQUxMLCBlcnJvciwgYW5kIHNob3J0IHJlYWRzIHRoaXMgdXJiIG11c3QKIAkJCSAqIGNvbXBsZXRlIGFuZCBhbGwgaXRzIHF0ZHMgbXVzdCBiZSByZWN5Y2xlZC4KIAkJCSAqLwogCQkJaWYgKCh0b2tlbiAmIFFURF9TVFNfSEFMVCkgIT0gMCkgeworCisJCQkJLyogcmV0cnkgdHJhbnNhY3Rpb24gZXJyb3JzIHVudGlsIHdlCisJCQkJICogcmVhY2ggdGhlIHNvZnR3YXJlIHhhY3RlcnIgbGltaXQKKwkJCQkgKi8KKwkJCQlpZiAoKHRva2VuICYgUVREX1NUU19YQUNUKSAmJgorCQkJCQkJUVREX0NFUlIodG9rZW4pID09IDAgJiYKKwkJCQkJCS0tcWgtPnhhY3RlcnJzID4gMCAmJgorCQkJCQkJIXVyYi0+dW5saW5rZWQpIHsKKwkJCQkJZWhjaV9kYmcoZWhjaSwKKwkiZGV0ZWN0ZWQgWGFjdEVyciBsZW4gJXp1LyV6dSByZXRyeSAlZFxuIiwKKwlxdGQtPmxlbmd0aCAtIFFURF9MRU5HVEgodG9rZW4pLCBxdGQtPmxlbmd0aCwKKwlRSF9YQUNURVJSX01BWCAtIHFoLT54YWN0ZXJycyk7CisKKwkJCQkJLyogcmVzZXQgdGhlIHRva2VuIGluIHRoZSBxdGQgYW5kIHRoZQorCQkJCQkgKiBxaCBvdmVybGF5ICh3aGljaCBzdGlsbCBjb250YWlucworCQkJCQkgKiB0aGUgcXRkKSBzbyB0aGF0IHdlIHBpY2sgdXAgZnJvbQorCQkJCQkgKiB3aGVyZSB3ZSBsZWZ0IG9mZgorCQkJCQkgKi8KKwkJCQkJdG9rZW4gJj0gflFURF9TVFNfSEFMVDsKKwkJCQkJdG9rZW4gfD0gUVREX1NUU19BQ1RJVkUgfAorCQkJCQkJCShFSENJX1RVTkVfQ0VSUiA8PCAxMCk7CisJCQkJCXF0ZC0+aHdfdG9rZW4gPSBjcHVfdG9faGMzMihlaGNpLAorCQkJCQkJCXRva2VuKTsKKwkJCQkJd21iKCk7CisJCQkJCXFoLT5od190b2tlbiA9IGNwdV90b19oYzMyKGVoY2ksIHRva2VuKTsKKwkJCQkJZ290byByZXRyeV94YWN0ZXJyOworCQkJCX0KIAkJCQlzdG9wcGVkID0gMTsKIAogCQkJLyogbWFnaWMgZHVtbXkgZm9yIHNvbWUgc2hvcnQgcmVhZHM7IHFoIHdvbid0IGFkdmFuY2UuCkBAIC00MjEsNiArNDQ5LDkgQEAKIAkJLyogcmVtb3ZlIHF0ZDsgaXQncyByZWN5Y2xlZCBhZnRlciBwb3NzaWJsZSB1cmIgY29tcGxldGlvbiAqLwogCQlsaXN0X2RlbCAoJnF0ZC0+cXRkX2xpc3QpOwogCQlsYXN0ID0gcXRkOworCisJCS8qIHJlaW5pdCB0aGUgeGFjdGVyciBjb3VudGVyIGZvciB0aGUgbmV4dCBxdGQgKi8KKwkJcWgtPnhhY3RlcnJzID0gUUhfWEFDVEVSUl9NQVg7CiAJfQogCiAJLyogbGFzdCB1cmIncyBjb21wbGV0aW9uIG1pZ2h0IHN0aWxsIG5lZWQgY2FsbGluZyAqLwpAQCAtODYyLDYgKzg5Myw3IEBACiAJaGVhZC0+cWhfbmV4dC5xaCA9IHFoOwogCWhlYWQtPmh3X25leHQgPSBkbWE7CiAKKwlxaC0+eGFjdGVycnMgPSBRSF9YQUNURVJSX01BWDsKIAlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9MSU5LRUQ7CiAJLyogcXRkIGNvbXBsZXRpb25zIHJlcG9ydGVkIGxhdGVyIGJ5IGludGVycnVwdCAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwppbmRleCAxZDBiNDllLi5hZGE1ZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJLy8gICBhbmQgdGhpcyBxaCBpcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgdWZyYW1lCiAJLy8gICAoYW5kIG92ZXJsYXkgdG9rZW4gU3BsaXRYc3RhdGUgaXMgZmFsc2U/KQogCS8vIFRIRU4KLQkvLyAgIHFoLT5od19pbmZvMSB8PSBfX2NvbnN0YW50X2NwdV90b19oYzMyKDEgPDwgNyAvKiAiaWdub3JlIiAqLyk7CisJLy8gICBxaC0+aHdfaW5mbzEgfD0gY3B1X3RvX2hjMzIoMSA8PCA3IC8qICJpZ25vcmUiICovKTsKIAogCS8qIGhpZ2ggYmFuZHdpZHRoLCBvciBvdGhlcndpc2UgcGFydCBvZiBldmVyeSBtaWNyb2ZyYW1lICovCiAJaWYgKChwZXJpb2QgPSBxaC0+cGVyaW9kKSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAppbmRleCAyNjJiMDBjLi42Y2ZmMTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaApAQCAtMTkwLDQwICsxOTAsNiBAQAogCWNsZWFyX2JpdCAoYWN0aW9uLCAmZWhjaS0+YWN0aW9ucyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotdGltZXJfYWN0aW9uIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGVudW0gZWhjaV90aW1lcl9hY3Rpb24gYWN0aW9uKQotewotCS8qIERvbid0IG92ZXJyaWRlIHRpbWVvdXRzIHdoaWNoIHNocmluayBvciAobGF0ZXIpIGRpc2FibGUKLQkgKiB0aGUgYXN5bmMgcmluZzsganVzdCB0aGUgSS9PIHdhdGNoZG9nLiAgTm90ZSB0aGF0IGlmIGEKLQkgKiBTSFJJTksgd2VyZSBwZW5kaW5nLCBPRkYgd291bGQgbmV2ZXIgYmUgcmVxdWVzdGVkLgotCSAqLwotCWlmICh0aW1lcl9wZW5kaW5nKCZlaGNpLT53YXRjaGRvZykKLQkJCSYmICgoQklUKFRJTUVSX0FTWU5DX1NIUklOSykgfCBCSVQoVElNRVJfQVNZTkNfT0ZGKSkKLQkJCQkmIGVoY2ktPmFjdGlvbnMpKQotCQlyZXR1cm47Ci0KLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQgKGFjdGlvbiwgJmVoY2ktPmFjdGlvbnMpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdDsKLQotCQlzd2l0Y2ggKGFjdGlvbikgewotCQljYXNlIFRJTUVSX0lPX1dBVENIRE9HOgotCQkJdCA9IEVIQ0lfSU9fSklGRklFUzsKLQkJCWJyZWFrOwotCQljYXNlIFRJTUVSX0FTWU5DX09GRjoKLQkJCXQgPSBFSENJX0FTWU5DX0pJRkZJRVM7Ci0JCQlicmVhazsKLQkJLy8gY2FzZSBUSU1FUl9BU1lOQ19TSFJJTks6Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBhZGQgYSBqaWZmaWUgc2luY2Ugd2Ugc3luY2ggYWdhaW5zdCB0aGUKLQkJCSAqIDggS0h6IHVmcmFtZSBjb3VudGVyLgotCQkJICovCi0JCQl0ID0gRElWX1JPVU5EX1VQKEVIQ0lfU0hSSU5LX0ZSQU1FUyAqIEhaLCAxMDAwKSArIDE7Ci0JCQlicmVhazsKLQkJfQotCQltb2RfdGltZXIoJmVoY2ktPndhdGNoZG9nLCB0ICsgamlmZmllcyk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBmcmVlX2NhY2hlZF9pdGRfbGlzdChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjg3LDcgKzI1Myw3IEBACiAKIC8qCiAgKiBOb3cgdGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBub3QgY29udmVydGVkIHVzaW5nIHRoZQotICogX19jb25zdGFudF9jcHVfdG9fbGUzMigpIG1hY3JvIGFueW1vcmUsIHNpbmNlIHdlIGhhdmUgdG8gc3VwcG9ydAorICogY3B1X3RvX2xlMzIoKSBtYWNybyBhbnltb3JlLCBzaW5jZSB3ZSBoYXZlIHRvIHN1cHBvcnQKICAqICJkeW5hbWljIiBzd2l0Y2hpbmcgYmV0d2VlbiBiZSBhbmQgbGUgc3VwcG9ydCwgc28gdGhhdCB0aGUgZHJpdmVyCiAgKiBjYW4gYmUgdXNlZCBvbiBvbmUgc3lzdGVtIHdpdGggU29DIEVIQ0kgY29udHJvbGxlciB1c2luZyBiaWctZW5kaWFuCiAgKiBkZXNjcmlwdG9ycyBhcyB3ZWxsIGFzIGEgbm9ybWFsIGxpdHRsZS1lbmRpYW4gUENJIEVIQ0kgY29udHJvbGxlci4KQEAgLTM3Niw2ICszNDIsOSBAQAogI2RlZmluZQlRSF9TVEFURV9VTkxJTktfV0FJVAk0CQkvKiBMSU5LRUQgYW5kIG9uIHJlY2xhaW0gcSAqLwogI2RlZmluZQlRSF9TVEFURV9DT01QTEVUSU5HCTUJCS8qIGRvbid0IHRvdWNoIHRva2VuLkhBTFQgKi8KIAorCXU4CQkJeGFjdGVycnM7CS8qIFhhY3RFcnIgcmV0cnkgY291bnRlciAqLworI2RlZmluZQlRSF9YQUNURVJSX01BWAkJMzIJCS8qIFhhY3RFcnIgcmV0cnkgbGltaXQgKi8KKwogCS8qIHBlcmlvZGljIHNjaGVkdWxlIGluZm8gKi8KIAl1OAkJCXVzZWNzOwkJLyogaW50ciBiYW5kd2lkdGggKi8KIAl1OAkJCWdhcF91ZjsJCS8qIHVmcmFtZXMgc3BsaXQvY3NwbGl0IGdhcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWRiZy5jCmluZGV4IDM0ZTE0ZWQuLmVhOGE0MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGZoY2lfdG9faGNkKGZoY2kpLT5zZWxmLmNvbnRyb2xsZXI7CiAKLQlmaGNpLT5kZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXYtPmJ1c19pZCwgTlVMTCk7CisJZmhjaS0+ZGZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoZGV2KSwgTlVMTCk7CiAJaWYgKCFmaGNpLT5kZnNfcm9vdCkgewogCQlXQVJOX09OKDEpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKaW5kZXggYmE2MjJjYy4uMDk1MTgxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYwpAQCAtNTgzLDcgKzU4Myw3IEBACiAJaWYgKHNwcm9wICYmIHN0cmNtcChzcHJvcCwgImhvc3QiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZmhjaV9kcml2ZXIsIGRldiwgZGV2LT5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZmaGNpX2RyaXZlciwgZGV2LCBkZXZfbmFtZShkZXYpKTsKIAlpZiAoIWhjZCkgewogCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBjcmVhdGUgaGNkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NTAsNyArNjUwLDcgQEAKIAkJCX0KIAkJfQogCi0JCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCBkZXYtPmJ1c19pZCk7CisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCBkZXZfbmFtZShkZXYpKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBncGlvICVkIiwgaSk7CiAJCQlnb3RvIGVycl9ncGlvczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCmluZGV4IDg1ODIyMzYuLmNiZjMwZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYwpAQCAtNDY0LDggKzQ2NCw3IEBACiAJCQlwb3J0X2lkeCA8PCA4IHwgaWZhY2Vfbm8sCiAJCQlrZXlkLCBrZXlkX2xlbiwgMTAwMCAvKiBGSVhNRTogYXJiaXRyYXJ5ICovKTsKIAotCW1lbXNldChrZXlkLCAwLCBzaXplb2YoKmtleWQpKTsJLyogY2xlYXIga2V5cyBldGMuICovCi0Ja2ZyZWUoa2V5ZCk7CisJa3pmcmVlKGtleWQpOyAvKiBjbGVhciBrZXlzIGV0Yy4gKi8KIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggNGRkYTMxYi4uYTJiMzA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtNzcyLDcgKzc3Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgUElQRV9JTlRFUlJVUFQ6CiAJCXVyYi0+aW50ZXJ2YWwgPSBlcC0+cGVyaW9kOwotCQllcC0+bGVuZ3RoID0gbWluKChpbnQpZXAtPm1heHBhY2tldCwKKwkJZXAtPmxlbmd0aCA9IG1pbl90KHUzMiwgZXAtPm1heHBhY2tldCwKIAkJCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAogCQkvKiB1cmIgc3VibWl0dGVkIGZvciBhbHJlYWR5IGV4aXN0aW5nIGVuZHBvaW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCmluZGV4IGFhMjExYmEuLjEyZGI5NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCkBAIC01NjMsNyArNTYzLDcgQEAKICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wdGQoc3RydWN0IHB0ZCAqcHRkKQogewotCXByaW50aygidGQ6ICV4ICVkJWMlZCAlZCwlZCwlZCAgJXggJXgleCV4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgInRkOiAleCAlZCVjJWQgJWQsJWQsJWQgICV4ICV4JXgleFxuIiwKIAkgICAgICAgUFREX0dFVF9DQyhwdGQpLCBQVERfR0VUX0ZBKHB0ZCksCiAJICAgICAgIFBURF9ESVJfU1RSKHB0ZCksIFBURF9HRVRfRVAocHRkKSwKIAkgICAgICAgUFREX0dFVF9DT1VOVChwdGQpLCBQVERfR0VUX0xFTihwdGQpLCBQVERfR0VUX01QUyhwdGQpLApAQCAtNTc2LDcgKzU3Niw3IEBACiAJaW50IGs7CiAKIAlpZiAoUFREX0dFVF9ESVIocHRkKSAhPSBQVERfRElSX0lOICYmIFBURF9HRVRfTEVOKHB0ZCkpIHsKLQkJcHJpbnRrKCItPiAiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiLT4gIik7CiAJCWZvciAoayA9IDA7IGsgPCBQVERfR0VUX0xFTihwdGQpOyArK2spCiAJCQlwcmludGsoIiUwMnggIiwgKCh1OCAqKSBidWYpW2tdKTsKIAkJcHJpbnRrKCJcbiIpOwpAQCAtNTg4LDEzICs1ODgsMTMgQEAKIAlpbnQgazsKIAogCWlmIChQVERfR0VUX0RJUihwdGQpID09IFBURF9ESVJfSU4gJiYgUFREX0dFVF9DT1VOVChwdGQpKSB7Ci0JCXByaW50aygiPC0gIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIjwtICIpOwogCQlmb3IgKGsgPSAwOyBrIDwgUFREX0dFVF9DT1VOVChwdGQpOyArK2spCiAJCQlwcmludGsoIiUwMnggIiwgKCh1OCAqKSBidWYpW2tdKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KIAlpZiAoUFREX0dFVF9MQVNUKHB0ZCkpCi0JCXByaW50aygiLVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIi1cbiIpOwogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCmluZGV4IGI4OTlmMWEuLmNkMDdlYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKQEAgLTY0NCw3ICs2NDQsNyBAQAogCiAJaWYgKHVyYi0+ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkgewogCQkvKiBzcGxpdCAqLwotCQlwdGQtPmR3NSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgxYyk7CisJCXB0ZC0+ZHc1ID0gY3B1X3RvX2xlMzIoMHgxYyk7CiAKIAkJaWYgKHFoLT5wZXJpb2QgPj0gMzIpCiAJCQlwZXJpb2QgPSBxaC0+cGVyaW9kIC8gMjsKQEAgLTgxOSw2ICs4MTksMTMgQEAKIAl1MzIgYXRsX3JlZ3MsIHBheWxvYWQ7CiAJdTMyIGJ1ZmZzdGF0dXM7CiAKKwkvKgorCSAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gZW5xdWV1ZQorCSAqIGEgZm9sbG93LXVwIHBhY2tldCwgdGhlIFNLSVAgcmVnaXN0ZXIgZ2V0cyB3cml0dGVuIGFuZCByZWFkIGJhY2sKKwkgKiBhbG1vc3QgaW1tZWRpYXRlbHkuIFdpdGggSVNQMTc2MSwgdGhpcyByZWdpc3RlciByZXF1aXJlcyBhIGRlbGF5IG9mCisJICogMTk1bnMgYmV0d2VlbiBhIHdyaXRlIGFuZCBzdWJzZXF1ZW50IHJlYWQgKHNlZSBzZWN0aW9uIDE1LjEuMS4zKS4KKwkgKi8KKwluZGVsYXkoMTk1KTsKIAlza2lwX21hcCA9IGlzcDE3NjBfcmVhZGwoaGNkLT5yZWdzICsgSENfQVRMX1BURF9TS0lQTUFQX1JFRyk7CiAKIAlCVUdfT04oIXNraXBfbWFwKTsKQEAgLTg1Myw2ICs4NjAsMTMgQEAKIAl1MzIgaW50X3JlZ3MsIHBheWxvYWQ7CiAJdTMyIGJ1ZmZzdGF0dXM7CiAKKwkvKgorCSAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gZW5xdWV1ZQorCSAqIGEgZm9sbG93LXVwIHBhY2tldCwgdGhlIFNLSVAgcmVnaXN0ZXIgZ2V0cyB3cml0dGVuIGFuZCByZWFkIGJhY2sKKwkgKiBhbG1vc3QgaW1tZWRpYXRlbHkuIFdpdGggSVNQMTc2MSwgdGhpcyByZWdpc3RlciByZXF1aXJlcyBhIGRlbGF5IG9mCisJICogMTk1bnMgYmV0d2VlbiBhIHdyaXRlIGFuZCBzdWJzZXF1ZW50IHJlYWQgKHNlZSBzZWN0aW9uIDE1LjEuMS4zKS4KKwkgKi8KKwluZGVsYXkoMTk1KTsKIAlza2lwX21hcCA9IGlzcDE3NjBfcmVhZGwoaGNkLT5yZWdzICsgSENfSU5UX1BURF9TS0lQTUFQX1JFRyk7CiAKIAlCVUdfT04oIXNraXBfbWFwKTsKQEAgLTEwNTQsNyArMTA2OCw3IEBACiAJCQlwcml2X3dyaXRlX2NvcHkocHJpdiwgKHUzMiAqKSZwdGQsIHVzYl9oY2QtPnJlZ3MgKwogCQkJCQlhdGxfcmVncywgc2l6ZW9mKHB0ZCkpOwogCi0JCQlwdGQuZHcwIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUFREX1ZBTElEKTsKKwkJCXB0ZC5kdzAgfD0gY3B1X3RvX2xlMzIoUFREX1ZBTElEKTsKIAkJCXByaXZfd3JpdGVfY29weShwcml2LCAodTMyICopJnB0ZCwgdXNiX2hjZC0+cmVncyArCiAJCQkJCWF0bF9yZWdzLCBzaXplb2YocHRkKSk7CiAKQEAgLTIyMzUsOSArMjI0OSwxMCBAQAogCWttZW1fY2FjaGVfZGVzdHJveShxaF9jYWNoZXApOwogfQogCi1zdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3Rlcih1NjQgcmVzX3N0YXJ0LCB1NjQgcmVzX2xlbiwgaW50IGlycSwKLQkJdTY0IGlycWZsYWdzLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c25hbWUsCi0JCXVuc2lnbmVkIGludCBkZXZmbGFncykKK3N0cnVjdCB1c2JfaGNkICppc3AxNzYwX3JlZ2lzdGVyKHBoeXNfYWRkcl90IHJlc19zdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHJlc19sZW4sCisJCQkJIGludCBpcnEsIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsCisJCQkJIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSwKKwkJCQkgdW5zaWduZWQgaW50IGRldmZsYWdzKQogewogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IGlzcDE3NjBfaGNkICpwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCmluZGV4IGE5ZGFlYTUuLjQ2MmY0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKQEAgLTIsOSArMiwxMCBAQAogI2RlZmluZSBfSVNQMTc2MF9IQ0RfSF8KIAogLyogZXhwb3J0cyBmb3IgaWYgKi8KLXN0cnVjdCB1c2JfaGNkICppc3AxNzYwX3JlZ2lzdGVyKHU2NCByZXNfc3RhcnQsIHU2NCByZXNfbGVuLCBpbnQgaXJxLAotCQl1NjQgaXJxZmxhZ3MsIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSwKLQkJdW5zaWduZWQgaW50IGRldmZsYWdzKTsKK3N0cnVjdCB1c2JfaGNkICppc3AxNzYwX3JlZ2lzdGVyKHBoeXNfYWRkcl90IHJlc19zdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHJlc19sZW4sCisJCQkJIGludCBpcnEsIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsCisJCQkJIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSwKKwkJCQkgdW5zaWduZWQgaW50IGRldmZsYWdzKTsKIGludCBpbml0X2ttZW1fb25jZSh2b2lkKTsKIHZvaWQgZGVpbml0X2ttZW1fY2FjaGUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKaW5kZXggNGNmN2NhNC4uM2ZhM2ExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgogI2luY2x1ZGUgImlzcDE3NjAtaGNkLmgiCkBAIC0zMDAsMzkgKzMwMSwxMDEgQEAKIH07CiAjZW5kaWYKIAorc3RhdGljIGludCBfX2RldmluaXQgaXNwMTc2MF9wbGF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7CisJc3RydWN0IHJlc291cmNlICppcnFfcmVzOworCXJlc291cmNlX3NpemVfdCBtZW1fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVEOworCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW1fcmVzKSB7CisJCXByX3dhcm5pbmcoImlzcDE3NjA6IE1lbW9yeSByZXNvdXJjZSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCW1lbV9zaXplID0gcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUsICJpc3AxNzYwIikpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogQ2Fubm90IHJlc2VydmUgdGhlIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnFfcmVzKSB7CisJCXByX3dhcm5pbmcoImlzcDE3NjA6IElSUSByZXNvdXJjZSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlycWZsYWdzIHw9IGlycV9yZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CisKKwloY2QgPSBpc3AxNzYwX3JlZ2lzdGVyKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSwgaXJxX3Jlcy0+c3RhcnQsCisJCQkgICAgICAgaXJxZmxhZ3MsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCAwKTsKKwlpZiAoSVNfRVJSKGhjZCkpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogRmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBIQ0QgZGV2aWNlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXByX2luZm8oIklTUDE3NjAgVVNCIGRldmljZSBpbml0aWFsaXNlZFxuIik7CisJcmV0dXJuIHJldDsKKworY2xlYW51cDoKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBpc3AxNzYwX3BsYXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzOworCXJlc291cmNlX3NpemVfdCBtZW1fc2l6ZTsKKworCW1lbV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1lbV9zaXplID0gcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpc3AxNzYwX3BsYXRfZHJpdmVyID0geworCS5wcm9iZQk9IGlzcDE3NjBfcGxhdF9wcm9iZSwKKwkucmVtb3ZlCT0gaXNwMTc2MF9wbGF0X3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJpc3AxNzYwIiwKKwl9LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaXNwMTc2MF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBhbnlfcmV0ID0gLUVOT0RFVjsKIAogCWluaXRfa21lbV9vbmNlKCk7CiAKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlzcDE3NjBfcGxhdF9kcml2ZXIpOworCWlmICghcmV0KQorCQlhbnlfcmV0ID0gMDsKICNpZmRlZiBDT05GSUdfUFBDX09GCiAJcmV0ID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpc3AxNzYwX29mX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlkZWluaXRfa21lbV9jYWNoZSgpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAoIXJldCkKKwkJYW55X3JldCA9IDA7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUENJCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXNwMTc2MV9wY2lfZHJpdmVyKTsKLQlpZiAocmV0KQotCQlnb3RvIHVucmVnX29mOworCWlmICghcmV0KQorCQlhbnlfcmV0ID0gMDsKICNlbmRpZgotCXJldHVybiByZXQ7CiAKLSNpZmRlZiBDT05GSUdfUENJCi11bnJlZ19vZjoKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QUENfT0YKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXNwMTc2MF9vZl9kcml2ZXIpOwotI2VuZGlmCi0JZGVpbml0X2ttZW1fY2FjaGUoKTsKLQlyZXR1cm4gcmV0OworCWlmIChhbnlfcmV0KQorCQlkZWluaXRfa21lbV9jYWNoZSgpOworCXJldHVybiBhbnlfcmV0OwogfQogbW9kdWxlX2luaXQoaXNwMTc2MF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGlzcDE3NjBfZXhpdCh2b2lkKQogeworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpc3AxNzYwX3BsYXRfZHJpdmVyKTsKICNpZmRlZiBDT05GSUdfUFBDX09GCiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlzcDE3NjBfb2ZfZHJpdmVyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDVjZjVmMWUuLjI1ZGI3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTk5Nyw3ICs5OTcsNyBAQAogI2RlZmluZSBTQTExMTFfRFJJVkVSCQlvaGNpX2hjZF9zYTExMTFfZHJpdmVyCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX1MzQzI0MTAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzI0MTApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfUzNDNjRYWCkKICNpbmNsdWRlICJvaGNpLXMzYzI0MTAuYyIKICNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9zM2MyNDEwX2RyaXZlcgogI2VuZGlmCkBAIC0xMDQ5LDcgKzEwNDksOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKICNpbmNsdWRlICJvaGNpLXNoLmMiCiAjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJb2hjaV9oY2Rfc2hfZHJpdmVyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCmluZGV4IGY0NmFmN2EuLmE2OGFmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwpAQCAtMjEsOSArMjEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC91c2ItY29udHJvbC5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLWNvbnRyb2wuaD4KIAogI2RlZmluZSB2YWxpZF9wb3J0KGlkeCkgKChpZHgpID09IDEgfHwgKGlkeCkgPT0gMikKIApAQCAtMzcyLDcgKzM3MCw3IEBACiAKIAl1c2JfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJ1c2ItYnVzLWhvc3QiKTsKIAlpZiAoSVNfRVJSKHVzYl9jbGspKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiY2Fubm90IGdldCB1c2ItaG9zdCBjbG9ja1xuIik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiY2Fubm90IGdldCB1c2ItYnVzLWhvc3QgY2xvY2tcbiIpOwogCQlyZXR2YWwgPSAtRU5PRU5UOwogCQlnb3RvIGVycl9jbGs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKaW5kZXggNzU1NDhmNy4uNWFjNDg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCkBAIC04NDUsMTQgKzg0NSwxNCBAQAogCQlpc19vdXQgPSAhKHF0ZC0+aHdfdG9rZW4gJiBjcHVfdG9fbGUzMigxIDw8IDgpKTsKIAkJZXBudW0gPSAobGUzMl90b19jcHVwKCZxaC0+aHdfaW5mbzEpID4+IDgpICYgMHgwZjsKIAkJaWYgKHVubGlrZWx5KCF1c2JfZ2V0dG9nZ2xlKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQpKSkgewotCQkJcWgtPmh3X3Rva2VuICY9IH5fX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9UT0dHTEUpOworCQkJcWgtPmh3X3Rva2VuICY9IH5jcHVfdG9fbGUzMihRVERfVE9HR0xFKTsKIAkJCXVzYl9zZXR0b2dnbGUocWgtPmRldiwgZXBudW0sIGlzX291dCwgMSk7CiAJCX0KIAl9CiAKIAkvKiBIQyBtdXN0IHNlZSBsYXRlc3QgcXRkIGFuZCBxaCBkYXRhIGJlZm9yZSB3ZSBjbGVhciBBQ1RJVkUrSEFMVCAqLwogCXdtYigpOwotCXFoLT5od190b2tlbiAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9UT0dHTEUgfCBRVERfU1RTX1BJTkcpOworCXFoLT5od190b2tlbiAmPSBjcHVfdG9fbGUzMihRVERfVE9HR0xFIHwgUVREX1NUU19QSU5HKTsKIH0KIAogLyogSWYgaXQgd2VyZW4ndCBmb3IgYSBjb21tb24gc2lsaWNvbiBxdWlyayAod3JpdGluZyB0aGUgZHVtbXkgaW50byB0aGUgcWgKQEAgLTkzNyw3ICs5MzcsNyBAQAogCQlzdHJ1Y3QgZWhjaV9xaAkqcWggPSAoc3RydWN0IGVoY2lfcWggKikgdXJiLT5oY3ByaXY7CiAKIAkJLyogUy1tYXNrIGluIGEgUUggbWVhbnMgaXQncyBhbiBpbnRlcnJ1cHQgdXJiICovCi0JCWlmICgocWgtPmh3X2luZm8yICYgX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9TTUFTSykpICE9IDApIHsKKwkJaWYgKChxaC0+aHdfaW5mbzIgJiBjcHVfdG9fbGUzMihRSF9TTUFTSykpICE9IDApIHsKIAogCQkJLyogLi4uIHVwZGF0ZSBoYy13aWRlIHBlcmlvZGljIHN0YXRzIChmb3IgdXNiZnMpICovCiAJCQlveHVfdG9faGNkKG94dSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzLS07CkBAIC05ODEsNyArOTgxLDcgQEAKIHN0YXRpYyB2b2lkIGludHJfZGVzY2hlZHVsZShzdHJ1Y3Qgb3h1X2hjZCAqb3h1LCBzdHJ1Y3QgZWhjaV9xaCAqcWgpOwogc3RhdGljIGludCBxaF9zY2hlZHVsZShzdHJ1Y3Qgb3h1X2hjZCAqb3h1LCBzdHJ1Y3QgZWhjaV9xaCAqcWgpOwogCi0jZGVmaW5lIEhBTFRfQklUIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX1NUU19IQUxUKQorI2RlZmluZSBIQUxUX0JJVCBjcHVfdG9fbGUzMihRVERfU1RTX0hBTFQpCiAKIC8qIFByb2Nlc3MgYW5kIGZyZWUgY29tcGxldGVkIHF0ZHMgZm9yIGEgcWgsIHJldHVybmluZyBVUkJzIHRvIGRyaXZlcnMuCiAgKiBDaGFzZXMgdXAgdG8gcWgtPmh3X2N1cnJlbnQuICBSZXR1cm5zIG51bWJlciBvZiBjb21wbGV0aW9ucyBjYWxsZWQsCkBAIC0xMTYwLDcgKzExNjAsNyBAQAogCQkJLyogc2hvdWxkIGJlIHJhcmUgZm9yIHBlcmlvZGljIHRyYW5zZmVycywKIAkJCSAqIGV4Y2VwdCBtYXliZSBoaWdoIGJhbmR3aWR0aCAuLi4KIAkJCSAqLwotCQkJaWYgKChfX2NvbnN0YW50X2NwdV90b19sZTMyKFFIX1NNQVNLKQorCQkJaWYgKChjcHVfdG9fbGUzMihRSF9TTUFTSykKIAkJCQkJJiBxaC0+aHdfaW5mbzIpICE9IDApIHsKIAkJCQlpbnRyX2Rlc2NoZWR1bGUob3h1LCBxaCk7CiAJCQkJKHZvaWQpIHFoX3NjaGVkdWxlKG94dSwgcWgpOwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAKIAl9CiAKIAkvKiBieSBkZWZhdWx0LCBlbmFibGUgaW50ZXJydXB0IG9uIHVyYiBjb21wbGV0aW9uICovCi0JCXF0ZC0+aHdfdG9rZW4gfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfSU9DKTsKKwkJcXRkLT5od190b2tlbiB8PSBjcHVfdG9fbGUzMihRVERfSU9DKTsKIAlyZXR1cm4gaGVhZDsKIAogY2xlYW51cDoKQEAgLTE1MzksNyArMTUzOSw3IEBACiAJLyogcXRkIGNvbXBsZXRpb25zIHJlcG9ydGVkIGxhdGVyIGJ5IGludGVycnVwdCAqLwogfQogCi0jZGVmaW5lCVFIX0FERFJfTUFTSwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4N2YpCisjZGVmaW5lCVFIX0FERFJfTUFTSwljcHVfdG9fbGUzMigweDdmKQogCiAvKgogICogRm9yIGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQsIHJldHVybiBRSCB3aXRoIHRoZXNlIFREcyBhcHBlbmRlZC4KQEAgLTIwMTIsNyArMjAxMiw3IEBACiAJICogICBhbmQgdGhpcyBxaCBpcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgdWZyYW1lCiAJICogICAoYW5kIG92ZXJsYXkgdG9rZW4gU3BsaXRYc3RhdGUgaXMgZmFsc2U/KQogCSAqIFRIRU4KLQkgKiAgIHFoLT5od19pbmZvMSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEgPDwgNyAiaWdub3JlIik7CisJICogICBxaC0+aHdfaW5mbzEgfD0gY3B1X3RvX2xlMzIoMSA8PCA3ICJpZ25vcmUiKTsKIAkgKi8KIAogCS8qIGhpZ2ggYmFuZHdpZHRoLCBvciBvdGhlcndpc2UgcGFydCBvZiBldmVyeSBtaWNyb2ZyYW1lICovCkBAIC0yMDU3LDcgKzIwNTcsNyBAQAogCSAqIGFjdGl2ZSBoaWdoIHNwZWVkIHF1ZXVlcyBtYXkgbmVlZCBiaWdnZXIgZGVsYXlzLi4uCiAJICovCiAJaWYgKGxpc3RfZW1wdHkoJnFoLT5xdGRfbGlzdCkKLQkJfHwgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfQ01BU0spICYgcWgtPmh3X2luZm8yKSAhPSAwKQorCQl8fCAoY3B1X3RvX2xlMzIoUUhfQ01BU0spICYgcWgtPmh3X2luZm8yKSAhPSAwKQogCQl3YWl0ID0gMjsKIAllbHNlCiAJCXdhaXQgPSA1NTsJLyogd29yc3QgY2FzZTogMyAqIDEwMjQgKi8KQEAgLTIxODMsMTAgKzIxODMsMTAgQEAKIAkJcWgtPnN0YXJ0ID0gZnJhbWU7CiAKIAkJLyogcmVzZXQgUy1mcmFtZSBhbmQgKG1heWJlKSBDLWZyYW1lIG1hc2tzICovCi0JCXFoLT5od19pbmZvMiAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKH4oUUhfQ01BU0sgfCBRSF9TTUFTSykpOworCQlxaC0+aHdfaW5mbzIgJj0gY3B1X3RvX2xlMzIofihRSF9DTUFTSyB8IFFIX1NNQVNLKSk7CiAJCXFoLT5od19pbmZvMiB8PSBxaC0+cGVyaW9kCiAJCQk/IGNwdV90b19sZTMyKDEgPDwgdWZyYW1lKQotCQkJOiBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFIX1NNQVNLKTsKKwkJCTogY3B1X3RvX2xlMzIoUUhfU01BU0spOwogCQlxaC0+aHdfaW5mbzIgfD0gY19tYXNrOwogCX0gZWxzZQogCQlveHVfZGJnKG94dSwgInJldXNlZCBxaCAlcCBzY2hlZHVsZVxuIiwgcWgpOwpAQCAtMjY4NCw3ICsyNjg0LDcgQEAKIAlveHUtPnVyYl9sZW4gPSAwOwogCiAJLyogRklNWEUgKi8KLQloY2QtPnNlbGYuY29udHJvbGxlci0+ZG1hX21hc2sgPSAwVUw7CisJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrID0gTlVMTDsKIAogCWlmIChveHUtPmlzX290ZykgewogCQlveHUtPmNhcHMgPSBoY2QtPnJlZ3MgKyBPWFVfT1RHX0NBUF9PRkZTRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLmggYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLmgKaW5kZXggODkxMGUyNy4uMWMyMTZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaApAQCAtMjM1LDIxICsyMzUsMjEgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7CiAKIC8qIG1hc2sgTmFrQ250K1QgaW4gcWgtPmh3X2FsdF9uZXh0ICovCi0jZGVmaW5lIFFURF9NQVNLIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKH4weDFmKQorI2RlZmluZSBRVERfTUFTSyBjcHVfdG9fbGUzMiAofjB4MWYpCiAKICNkZWZpbmUgSVNfU0hPUlRfUkVBRCh0b2tlbikgKFFURF9MRU5HVEgodG9rZW4pICE9IDAgJiYgUVREX1BJRCh0b2tlbikgPT0gMSkKIAogLyogVHlwZSB0YWcgZnJvbSB7cWgsIGl0ZCwgc2l0ZCwgZnN0bn0tPmh3X25leHQgKi8KLSNkZWZpbmUgUV9ORVhUX1RZUEUoZG1hKSAoKGRtYSkgJiBfX2NvbnN0YW50X2NwdV90b19sZTMyICgzIDw8IDEpKQorI2RlZmluZSBRX05FWFRfVFlQRShkbWEpICgoZG1hKSAmIGNwdV90b19sZTMyICgzIDw8IDEpKQogCiAvKiB2YWx1ZXMgZm9yIHRoYXQgdHlwZSB0YWcgKi8KLSNkZWZpbmUgUV9UWVBFX1FICV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgMSkKKyNkZWZpbmUgUV9UWVBFX1FICWNwdV90b19sZTMyICgxIDw8IDEpCiAKIC8qIG5leHQgYXN5bmMgcXVldWUgZW50cnksIG9yIHBvaW50ZXIgdG8gaW50ZXJydXB0L3BlcmlvZGljIFFIICovCiAjZGVmaW5lCVFIX05FWFQoZG1hKQkoY3B1X3RvX2xlMzIoKCh1MzIpZG1hKSZ+MHgwMWYpfFFfVFlQRV9RSCkKIAogLyogZm9yIHBlcmlvZGljL2FzeW5jIHNjaGVkdWxlcyBhbmQgcXRkIGxpc3RzLCBtYXJrIGVuZCBvZiBsaXN0ICovCi0jZGVmaW5lCUVIQ0lfTElTVF9FTkQJX19jb25zdGFudF9jcHVfdG9fbGUzMigxKSAvKiAibnVsbCBwb2ludGVyIiB0byBodyAqLworI2RlZmluZQlFSENJX0xJU1RfRU5ECWNwdV90b19sZTMyKDEpIC8qICJudWxsIHBvaW50ZXIiIHRvIGh3ICovCiAKIC8qCiAgKiBFbnRyaWVzIGluIHBlcmlvZGljIHNoYWRvdyB0YWJsZSBhcmUgcG9pbnRlcnMgdG8gb25lIG9mIGZvdXIga2luZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggNzViNjk4NC4uMDMzYzI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCSAqLwogCWhjY19wYXJhbXMgPSByZWFkbChiYXNlICsgRUhDSV9IQ0NfUEFSQU1TKTsKIAlvZmZzZXQgPSAoaGNjX3BhcmFtcyA+PiA4KSAmIDB4ZmY7Ci0Jd2hpbGUgKG9mZnNldCAmJiBjb3VudC0tKSB7CisJd2hpbGUgKG9mZnNldCAmJiAtLWNvdW50KSB7CiAJCXUzMgkJY2FwOwogCQlpbnQJCW1zZWM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IDMxOTA0MTIuLmYxNjI2ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtNjYwLDkgKzY2MCw5IEBACiAJdTE2IGFycmF5W1I4QTY2NTk3X01BWF9OVU1fUElQRV0sIGkgPSAwLCBtaW47CiAKIAltZW1zZXQoYXJyYXksIDAsIHNpemVvZihhcnJheSkpOwotCXN3aXRjaCAoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJc3dpdGNoICh1c2JfZW5kcG9pbnRfdHlwZShlcCkpIHsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6Ci0JCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApKQogCQkJYXJyYXlbaSsrXSA9IDQ7CiAJCWVsc2UgewogCQkJYXJyYXlbaSsrXSA9IDM7CkBAIC02NzAsNyArNjcwLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKLQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkgewogCQkJYXJyYXlbaSsrXSA9IDY7CiAJCQlhcnJheVtpKytdID0gNzsKIAkJCWFycmF5W2krK10gPSA4OwpAQCAtNjc4LDcgKzY3OCw3IEBACiAJCQlhcnJheVtpKytdID0gOTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgotCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkKIAkJCWFycmF5W2krK10gPSAyOwogCQllbHNlCiAJCQlhcnJheVtpKytdID0gMTsKQEAgLTkyOCwxMCArOTI4LDkgQEAKIAogCWluZm8ucGlwZW51bSA9IGdldF9lbXB0eV9waXBlbnVtKHI4YTY2NTk3LCBlcCk7CiAJaW5mby5hZGRyZXNzID0gZ2V0X3VyYl90b19yOGE2NjU5N19hZGRyKHI4YTY2NTk3LCB1cmIpOwotCWluZm8uZXBudW0gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwlpbmZvLmVwbnVtID0gdXNiX2VuZHBvaW50X251bShlcCk7CiAJaW5mby5tYXhwYWNrZXQgPSBsZTE2X3RvX2NwdShlcC0+d01heFBhY2tldFNpemUpOwotCWluZm8udHlwZSA9IGdldF9yOGE2NjU5N190eXBlKGVwLT5ibUF0dHJpYnV0ZXMKLQkJCQkgICAgICAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKTsKKwlpbmZvLnR5cGUgPSBnZXRfcjhhNjY1OTdfdHlwZSh1c2JfZW5kcG9pbnRfdHlwZShlcCkpOwogCWluZm8uYnVmbnVtID0gZ2V0X2J1Zm51bShpbmZvLnBpcGVudW0pOwogCWluZm8uYnVmX2JzaXplID0gZ2V0X2J1Zl9ic2l6ZShpbmZvLnBpcGVudW0pOwogCWlmIChpbmZvLnR5cGUgPT0gUjhBNjY1OTdfQlVMSykgewpAQCAtOTQxLDcgKzk0MCw3IEBACiAJCWluZm8uaW50ZXJ2YWwgPSBnZXRfaW50ZXJ2YWwodXJiLCBlcC0+YkludGVydmFsKTsKIAkJaW5mby50aW1lcl9pbnRlcnZhbCA9IGdldF90aW1lcl9pbnRlcnZhbCh1cmIsIGVwLT5iSW50ZXJ2YWwpOwogCX0KLQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApKQogCQlpbmZvLmRpcl9pbiA9IDE7CiAJZWxzZQogCQlpbmZvLmRpcl9pbiA9IDA7CkBAIC0xMDE0LDYgKzEwMTMsOSBAQAogCiAJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5EVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CiAJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgRFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKKworCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKKwkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZGlzYWJsZWQgKi8KQEAgLTEzOTUsNyArMTM5Nyw3IEBACiAJCQkgICAoaW50KXVyYi0+aXNvX2ZyYW1lX2Rlc2NbdGQtPmlzb19jbnRdLmxlbmd0aCk7CiAJfSBlbHNlIHsKIAkJYnVmID0gKHUxNiAqKSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCXNpemUgPSBtaW4oKGludClidWZzaXplLAorCQlzaXplID0gbWluX3QodTMyLCBidWZzaXplLAogCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CiAKQEAgLTE2MTUsNiArMTYxNywxMSBAQAogCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgRFRDSEUsIElOVEVOQjIpOwogCQkJcjhhNjY1OTdfdXNiX2Rpc2Nvbm5lY3QocjhhNjY1OTcsIDEpOwogCQl9CisJCWlmIChtYXNrMiAmIEJDSEcpIHsKKwkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QkNIRywgSU5UU1RTMik7CisJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBCQ0hHRSwgSU5URU5CMik7CisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKKwkJfQogCX0KIAogCWlmIChtYXNrMSkgewpAQCAtMTYzMCw2ICsxNjM3LDEyIEBACiAJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBEVENIRSwgSU5URU5CMSk7CiAJCQlyOGE2NjU5N191c2JfZGlzY29ubmVjdChyOGE2NjU5NywgMCk7CiAJCX0KKwkJaWYgKG1hc2sxICYgQkNIRykgeworCQkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5CQ0hHLCBJTlRTVFMxKTsKKwkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEJDSEdFLCBJTlRFTkIxKTsKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOworCQl9CisKIAkJaWYgKG1hc2sxICYgU0lHTikgewogCQkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5TSUdOLCBJTlRTVFMxKTsKIAkJCXN0YXR1cyA9IGdldF91cmJfZXJyb3IocjhhNjY1OTcsIDApOwpAQCAtMjE0MSw3ICsyMTU0LDcgQEAKIAogCQlzd2l0Y2ggKHdWYWx1ZSkgewogCQljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxFOgotCQkJcmgtPnBvcnQgJj0gKDEgPDwgVVNCX1BPUlRfRkVBVF9QT1dFUik7CisJCQlyaC0+cG9ydCAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9QT1dFUik7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CiAJCQlicmVhazsKQEAgLTIyMTMsNiArMjIyNiw2OCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKK3N0YXRpYyBpbnQgcjhhNjY1OTdfYnVzX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3ID0gaGNkX3RvX3I4YTY2NTk3KGhjZCk7CisJaW50IHBvcnQ7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFI4QTY2NTk3X01BWF9ST09UX0hVQjsgcG9ydCsrKSB7CisJCXN0cnVjdCByOGE2NjU5N19yb290X2h1YiAqcmggPSAmcjhhNjY1OTctPnJvb3RfaHViW3BvcnRdOworCQl1bnNpZ25lZCBsb25nIGR2c3RjdHJfcmVnID0gZ2V0X2R2c3RjdHJfcmVnKHBvcnQpOworCisJCWlmICghKHJoLT5wb3J0ICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpKSkKKwkJCWNvbnRpbnVlOworCisJCWRiZygic3VzcGVuZCBwb3J0ID0gJWQiLCBwb3J0KTsKKwkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgVUFDVCwgZHZzdGN0cl9yZWcpOwkvKiBzdXNwZW5kICovCisJCXJoLT5wb3J0IHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOworCisJCWlmIChyaC0+ZGV2LT51ZGV2LT5kb19yZW1vdGVfd2FrZXVwKSB7CisJCQltc2xlZXAoMyk7CS8qIHdhaXRpbmcgbGFzdCBTT0YgKi8KKwkJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIFJXVVBFLCBkdnN0Y3RyX3JlZyk7CisJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkJDSEcsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKKwkJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEJDSEdFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7CisJCX0KKwl9CisKKwlyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByOGE2NjU5N19idXNfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NyA9IGhjZF90b19yOGE2NjU5NyhoY2QpOworCWludCBwb3J0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBSOEE2NjU5N19NQVhfUk9PVF9IVUI7IHBvcnQrKykgeworCQlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKKwkJdW5zaWduZWQgbG9uZyBkdnN0Y3RyX3JlZyA9IGdldF9kdnN0Y3RyX3JlZyhwb3J0KTsKKworCQlpZiAoIShyaC0+cG9ydCAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpKQorCQkJY29udGludWU7CisKKwkJZGJnKCJyZXN1bWUgcG9ydCA9ICVkIiwgcG9ydCk7CisJCXJoLT5wb3J0ICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCQlyaC0+cG9ydCB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOworCQlyOGE2NjU5N19tZGZ5KHI4YTY2NTk3LCBSRVNVTUUsIFJFU1VNRSB8IFVBQ1QsIGR2c3RjdHJfcmVnKTsKKwkJbXNsZWVwKDUwKTsKKwkJcjhhNjY1OTdfbWRmeShyOGE2NjU5NywgVUFDVCwgUkVTVU1FIHwgVUFDVCwgZHZzdGN0cl9yZWcpOworCX0KKworCXJldHVybiAwOworCit9CisjZWxzZQorI2RlZmluZQlyOGE2NjU5N19idXNfc3VzcGVuZAlOVUxMCisjZGVmaW5lCXI4YTY2NTk3X2J1c19yZXN1bWUJTlVMTAorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIHI4YTY2NTk3X2hjX2RyaXZlciA9IHsKIAkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCiAJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IHI4YTY2NTk3KSwKQEAgLTIyNDMsMTYgKzIzMTgsMzkgQEAKIAkgKi8KIAkuaHViX3N0YXR1c19kYXRhID0JcjhhNjY1OTdfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbCA9CQlyOGE2NjU5N19odWJfY29udHJvbCwKKwkuYnVzX3N1c3BlbmQgPQkJcjhhNjY1OTdfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJcjhhNjY1OTdfYnVzX3Jlc3VtZSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTSkKIHN0YXRpYyBpbnQgcjhhNjY1OTdfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IHI4YTY2NTk3CQkqcjhhNjY1OTcgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJaW50IHBvcnQ7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJZGlzYWJsZV9jb250cm9sbGVyKHI4YTY2NTk3KTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBSOEE2NjU5N19NQVhfUk9PVF9IVUI7IHBvcnQrKykgeworCQlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKKworCQlyaC0+cG9ydCA9IDB4MDAwMDAwMDA7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcjhhNjY1OTdfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHI4YTY2NTk3CQkqcjhhNjY1OTcgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSByOGE2NjU5N190b19oY2QocjhhNjY1OTcpOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWVuYWJsZV9jb250cm9sbGVyKHI4YTY2NTk3KTsKKwl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihoY2QtPnNlbGYucm9vdF9odWIpOworCiAJcmV0dXJuIDA7CiB9CiAjZWxzZQkvKiBpZiBkZWZpbmVkKENPTkZJR19QTSkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTcuaCBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTcuaAppbmRleCBlY2FjZGU0Li5mNDkyMDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oCkBAIC01MDQsNiArNTA0LDggQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRfZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgY2hpbGRfY29ubmVjdF9tYXBbNF07CisKKwl1bnNpZ25lZCBidXNfc3VzcGVuZGVkOjE7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByOGE2NjU5NyAqaGNkX3RvX3I4YTY2NTk3KHN0cnVjdCB1c2JfaGNkICpoY2QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCBlMTA2ZTlkLi5hOTQ5MjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCXdyaXRlYih1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCBkYXRhX3JlZyk7CiAKIAlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0hPU1RDVExSRUcsIGNvbnRyb2wpOwotCWVwLT5sZW5ndGggPSBtaW4oKGludClsZW4sCisJZXAtPmxlbmd0aCA9IG1pbl90KHUzMiwgbGVuLAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAlQQUNLRVQoIklOJXMvJWQgcWglcCBsZW4lZFxuIiwgZXAtPm5ha19jb3VudCA/ICIvcmV0cnkiIDogIiIsCiAJCQkhIXVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIGVwLT5lcG51bSwgMCksIGVwLCBsZW4pOwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CiAJcHJlZmV0Y2goYnVmKTsKIAotCWxlbiA9IG1pbigoaW50KWVwLT5tYXhwYWNrZXQsCisJbGVuID0gbWluX3QodTMyLCBlcC0+bWF4cGFja2V0LAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAogCWlmICghKGNvbnRyb2wgJiBTTDExSF9IQ1RMTUFTS19JU09DSCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKaW5kZXggMjBjYzU4Yi4uZTUyYjk1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKQEAgLTExOCw3ICsxMTgsOSBAQAogCX0KIAogCW91dCArPSBzcHJpbnRmKG91dCwgIiVzJXMiLCBwdHlwZSwgKHVyYnAtPmZzYnIgPyAiIEZTQlIiIDogIiIpKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICIgQWN0bGVuPSVkIiwgdXJicC0+dXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIgQWN0bGVuPSVkJXMiLCB1cmJwLT51cmItPmFjdHVhbF9sZW5ndGgsCisJCQkodXJicC0+cWgtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCA/CisJCQkJIi04IiA6ICIiKSk7CiAKIAlpZiAodXJicC0+dXJiLT51bmxpbmtlZCkKIAkJb3V0ICs9IHNwcmludGYob3V0LCAiIFVubGlua2VkPSVkIiwgdXJicC0+dXJiLT51bmxpbmtlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKaW5kZXggN2QwMWM1Ni4uMjZiZDFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaApAQCAtNzMsMTEgKzczLDExIEBACiAjZGVmaW5lICAgVVNCTEVHU1VQX1JXQwkJMHg4ZjAwCS8qIHRoZSBSL1dDIGJpdHMgKi8KICNkZWZpbmUgICBVU0JMRUdTVVBfUk8JCTB4NTA0MAkvKiBSL08gYW5kIHJlc2VydmVkIGJpdHMgKi8KIAotI2RlZmluZSBVSENJX1BUUl9CSVRTCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwRikKLSNkZWZpbmUgVUhDSV9QVFJfVEVSTQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDEpCi0jZGVmaW5lIFVIQ0lfUFRSX1FICQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMikKLSNkZWZpbmUgVUhDSV9QVFJfREVQVEgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDA0KQotI2RlZmluZSBVSENJX1BUUl9CUkVBRFRICV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwKQorI2RlZmluZSBVSENJX1BUUl9CSVRTCQljcHVfdG9fbGUzMigweDAwMEYpCisjZGVmaW5lIFVIQ0lfUFRSX1RFUk0JCWNwdV90b19sZTMyKDB4MDAwMSkKKyNkZWZpbmUgVUhDSV9QVFJfUUgJCWNwdV90b19sZTMyKDB4MDAwMikKKyNkZWZpbmUgVUhDSV9QVFJfREVQVEgJCWNwdV90b19sZTMyKDB4MDAwNCkKKyNkZWZpbmUgVUhDSV9QVFJfQlJFQURUSAljcHVfdG9fbGUzMigweDAwMDApCiAKICNkZWZpbmUgVUhDSV9OVU1GUkFNRVMJCTEwMjQJLyogaW4gdGhlIGZyYW1lIGxpc3QgW2FycmF5XSAqLwogI2RlZmluZSBVSENJX01BWF9TT0ZfTlVNQkVSCTIwNDcJLyogaW4gYW4gU09GIHBhY2tldCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKaW5kZXggNTYzMWQ4OS4uM2U1ODA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAkJLyogT3RoZXJ3aXNlIGFsbCB0aGUgdG9nZ2xlcyBpbiB0aGUgVVJCIGhhdmUgdG8gYmUgc3dpdGNoZWQgKi8KIAkJfSBlbHNlIHsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7Ci0JCQkJdGQtPnRva2VuIF49IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoCisJCQkJdGQtPnRva2VuIF49IGNwdV90b19sZTMyKAogCQkJCQkJCVREX1RPS0VOX1RPR0dMRSk7CiAJCQkJdG9nZ2xlIF49IDE7CiAJCQl9CkBAIC04ODMsNyArODgzLDcgQEAKIAogCXVoY2lfZmlsbF90ZCh0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CiAJd21iKCk7Ci0JcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CisJcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOwogCXFoLT5kdW1teV90ZCA9IHRkOwogCiAJLyogTG93LXNwZWVkIHRyYW5zZmVycyBnZXQgYSBkaWZmZXJlbnQgcXVldWUsIGFuZCB3b24ndCBob2cgdGhlIGJ1cy4KQEAgLTg5OSw4ICs4OTksNiBAQAogCX0KIAlpZiAocWgtPnN0YXRlICE9IFFIX1NUQVRFX0FDVElWRSkKIAkJcWgtPnNrZWwgPSBza2VsOwotCi0JdXJiLT5hY3R1YWxfbGVuZ3RoID0gLTg7CS8qIEFjY291bnQgZm9yIHRoZSBTRVRVUCBwYWNrZXQgKi8KIAlyZXR1cm4gMDsKIAogbm9tZW06CkBAIC0xMDAzLDcgKzEwMDEsNyBAQAogCSAqIGZhc3Qgc2lkZSBidXQgbm90IGVub3VnaCB0byBqdXN0aWZ5IGRlbGF5aW5nIGFuIGludGVycnVwdAogCSAqIG1vcmUgdGhhbiAyIG9yIDMgVVJCcywgc28gd2Ugd2lsbCBpZ25vcmUgdGhlIFVSQl9OT19JTlRFUlJVUFQKIAkgKiBmbGFnIHNldHRpbmcuICovCi0JdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKKwl0ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKIAogCS8qCiAJICogQnVpbGQgdGhlIG5ldyBkdW1teSBURCBhbmQgYWN0aXZhdGUgdGhlIG9sZCBvbmUKQEAgLTEwMTUsNyArMTAxMyw3IEBACiAKIAl1aGNpX2ZpbGxfdGQodGQsIDAsIFVTQl9QSURfT1VUIHwgdWhjaV9leHBsZW4oMCksIDApOwogCXdtYigpOwotCXFoLT5kdW1teV90ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOworCXFoLT5kdW1teV90ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKIAlxaC0+ZHVtbXlfdGQgPSB0ZDsKIAogCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKQEAgLTEzMTcsNyArMTMxNSw3IEBACiAJfQogCiAJLyogU2V0IHRoZSBpbnRlcnJ1cHQtb24tY29tcGxldGlvbiBmbGFnIG9uIHRoZSBsYXN0IHBhY2tldC4gKi8KLQl0ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOwogCiAJLyogQWRkIHRoZSBURHMgdG8gdGhlIGZyYW1lIGxpc3QgKi8KIAlmcmFtZSA9IHVyYi0+c3RhcnRfZnJhbWU7CkBAIC0xNDk0LDExICsxNDkyLDEwIEBACiAKIAlpZiAocWgtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkgewogCi0JCS8qIHVyYi0+YWN0dWFsX2xlbmd0aCA8IDAgbWVhbnMgdGhlIHNldHVwIHRyYW5zYWN0aW9uIGRpZG4ndAotCQkgKiBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuICBFaXRoZXIgaXQgZmFpbGVkIG9yIHRoZSBVUkIgd2FzCi0JCSAqIHVubGlua2VkIGZpcnN0LiAgUmVnYXJkbGVzcywgZG9uJ3QgY29uZnVzZSBwZW9wbGUgd2l0aCBhCi0JCSAqIG5lZ2F0aXZlIGxlbmd0aC4gKi8KLQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbWF4KHVyYi0+YWN0dWFsX2xlbmd0aCwgMCk7CisJCS8qIFN1YnRyYWN0IG9mZiB0aGUgbGVuZ3RoIG9mIHRoZSBTRVRVUCBwYWNrZXQgZnJvbQorCQkgKiB1cmItPmFjdHVhbF9sZW5ndGguCisJCSAqLworCQl1cmItPmFjdHVhbF9sZW5ndGggLT0gbWluX3QodTMyLCA4LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0KIAogCS8qIFdoZW4gZ2l2aW5nIGJhY2sgdGhlIGZpcnN0IFVSQiBpbiBhbiBJc29jaHJvbm91cyBxdWV1ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKaW5kZXggOTcyZjIwYi4uZWNhMzU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCQkuYkRlc2NyaXB0b3JUeXBlID0JMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPQkweDAxLAogCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDIsCi0JCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOCksCisJCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDgpLAogCQkuYkludGVydmFsID0gCQkwLAogCQkuYlJlZnJlc2ggPSAJCTAsCiAJCS5iU3luY2hBZGRyZXNzID0gCTAsCkBAIC0xOTgsNyArMTk4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9IAkwLAogCQkuYkVuZHBvaW50QWRkcmVzcyA9IAkweDgyLAogCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDMsCi0JCS53TWF4UGFja2V0U2l6ZSA9IAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpLAorCQkud01heFBhY2tldFNpemUgPSAJY3B1X3RvX2xlMTYoOCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKQEAgLTIwOCw3ICsyMDgsNyBAQAogCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4MDMsCiAJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKLQkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCQkud01heFBhY2tldFNpemUgPSAJY3B1X3RvX2xlMTYoNjQpLAogCQkuYkludGVydmFsID0gCQkwLAogCQkuYlJlZnJlc2ggPSAJCTAsCiAJCS5iU3luY2hBZGRyZXNzID0gCTAsCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJLmJEZXNjcmlwdG9yVHlwZSA9IAkwLAogCQkuYkVuZHBvaW50QWRkcmVzcyA9IAkweDg0LAogCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDIsCi0JCS53TWF4UGFja2V0U2l6ZSA9IAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KSwKKwkJLndNYXhQYWNrZXRTaXplID0gCWNwdV90b19sZTE2KDY0KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCmluZGV4IGU0NjNkYjUuLmE2OGQ5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKQEAgLTEzNSw0NSArMTM1LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN5dGhlcm0uCiAKLWNvbmZpZyBVU0JfUEhJREdFVAotCXRyaXN0YXRlICJVU0IgUGhpZGdldHMgZHJpdmVycyIKLQlkZXBlbmRzIG9uIFVTQgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSB2YXJpb3VzIGRyaXZlcnMgZm9yIGRldmljZXMgZnJvbQotCSAgUGhpZGdldHMgaW5jLgotCi1jb25maWcgVVNCX1BISURHRVRLSVQKLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9QSElER0VUCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgUGhpZGdldEludGVyZmFjZUtpdCBVU0IgZGV2aWNlCi0JICBmcm9tIFBoaWRnZXRzIEluYy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGhpZGdldGtpdC4KLQotY29uZmlnIFVTQl9QSElER0VUTU9UT1JDT05UUk9MCi0JdHJpc3RhdGUgIlVTQiBQaGlkZ2V0TW90b3JDb250cm9sIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfUEhJREdFVAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFBoaWRnZXRNb3RvckNvbnRyb2wgVVNCIGRldmljZQotCSAgZnJvbSBQaGlkZ2V0cyBJbmMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRtb3RvcmNvbnRyb2wuCi0KLWNvbmZpZyBVU0JfUEhJREdFVFNFUlZPCi0JdHJpc3RhdGUgIlVTQiBQaGlkZ2V0U2Vydm8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9QSElER0VUCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGFuIDEgb3IgNCBNb3RvciBQaGlkZ2V0U2Vydm8gCi0JICBzZXJ2byBjb250cm9sbGVyIHZlcnNpb24gMi4wIG9yIDMuMC4KLQotCSAgUGhpZGdldHMgSW5jLiBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5waGlkZ2V0cy5jb20vPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGhpZGdldHNlcnZvLgotCiBjb25maWcgVVNCX0lETU9VU0UKIAl0cmlzdGF0ZSAiU2llbWVucyBJRCBVU0IgTW91c2UgRmluZ2VycHJpbnQgc2Vuc29yIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCmluZGV4IDEzMzRmN2IuLjA4MjZhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQpAQCAtMTgsMTAgKzE4LDYgQEAKIG9iai0kKENPTkZJR19VU0JfTEQpCQkrPSBsZHVzYi5vCiBvYmotJChDT05GSUdfVVNCX0xFRCkJCSs9IHVzYmxlZC5vCiBvYmotJChDT05GSUdfVVNCX0xFR09UT1dFUikJKz0gbGVnb3VzYnRvd2VyLm8KLW9iai0kKENPTkZJR19VU0JfUEhJREdFVCkJKz0gcGhpZGdldC5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVRLSVQpCSs9IHBoaWRnZXRraXQubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUTU9UT1JDT05UUk9MKQkrPSBwaGlkZ2V0bW90b3Jjb250cm9sLm8KLW9iai0kKENPTkZJR19VU0JfUEhJREdFVFNFUlZPKQkrPSBwaGlkZ2V0c2Vydm8ubwogb2JqLSQoQ09ORklHX1VTQl9SSU81MDApCSs9IHJpbzUwMC5vCiBvYmotJChDT05GSUdfVVNCX1RFU1QpCQkrPSB1c2J0ZXN0Lm8KIG9iai0kKENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IpCSs9IHRyYW5jZXZpYnJhdG9yLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCmluZGV4IDc5YTc2NjguLjlkMDY3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwpAQCAtMTU2OCw3ICsxNTY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmhlYWRlciA9IDB4ODIgfCAoZWQgPDwgNSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nX2xlbmd0aCA9PSAwKSB7CkBAIC0xNzAyLDcgKzE3MDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChhZGRyZXNzIDw8IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IG1pbigxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IG1pbl90KHUzMiwgMTAyNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKQEAgLTE3NjYsNyArMTc2Niw3IEBACiAgICAgICAgICAgICAgICAgbXV0ZXhfbG9jaygmZnRkaS0+dTEzMl9sb2NrKTsKICAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CiAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ19sZW5ndGggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQorICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHJlbWFpbmluZ19sZW5ndGggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRdOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM1ZWQzMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldHMgY2xhc3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotCi1zdHJ1Y3QgY2xhc3MgKnBoaWRnZXRfY2xhc3M7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcGhpZGdldCh2b2lkKQotewotCXBoaWRnZXRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwaGlkZ2V0Iik7Ci0KLQlpZiAoSVNfRVJSKHBoaWRnZXRfY2xhc3MpKQotCQlyZXR1cm4gUFRSX0VSUihwaGlkZ2V0X2NsYXNzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9waGlkZ2V0KHZvaWQpCi17Ci0JY2xhc3NfZGVzdHJveShwaGlkZ2V0X2NsYXNzKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwocGhpZGdldF9jbGFzcyk7Ci0KLW1vZHVsZV9pbml0KGluaXRfcGhpZGdldCk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3BoaWRnZXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb250YWluZXIgbW9kdWxlIGZvciBwaGlkZ2V0IGNsYXNzIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5oIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MDExOTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRzIGNsYXNzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotZXh0ZXJuIHN0cnVjdCBjbGFzcyAqcGhpZGdldF9jbGFzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOGUwYTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NDAgKzAsMCBAQAotLyoKLSAqIFVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IGRyaXZlciAxLjAKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBEYW5pZWwgU2Fha2VzIDxkYW5pZWxAc2Fha2VzLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJwaGlkZ2V0LmgiCi0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCBEcml2ZXIiCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HTEFCCQkweDA2YzIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMDQJMHgwMDQwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDE2MTYJMHgwMDQ0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg4CTB4MDA0NQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA0NwkweDAwNTEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwODgJMHgwMDUzCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAJCTB4MDkyNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4NAkweDgyMDEKLQotI2RlZmluZSBNQVhfSU5URVJGQUNFUwkJCTE2Ci0KLSNkZWZpbmUgVVJCX0lOVF9TSVpFCQkJOAotCi1zdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCB7Ci0JaW50IHNlbnNvcnM7Ci0JaW50IGlucHV0czsKLQlpbnQgb3V0cHV0czsKLQlpbnQgaGFzX2xjZDsKLQlpbnQgYW1uZXNpYWM7Ci19OwotCi0jZGVmaW5lIGlma2l0KF9zZW5zb3JzLCBfaW5wdXRzLCBfb3V0cHV0cywgX2xjZCwgX2FtbmVzaWFjKQkJXAotewkJCQkJCQkJCVwKLQkuc2Vuc29ycwk9IF9zZW5zb3JzLAkJCQkJXAotCS5pbnB1dHMJCT0gX2lucHV0cywJCQkJCVwKLQkub3V0cHV0cwk9IF9vdXRwdXRzLAkJCQkJXAotCS5oYXNfbGNkCT0gX2xjZCwJCQkJCQlcCi0JLmFtbmVzaWFjCT0gX2FtbmVzaWFjCQkJCQlcCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfMDA0ID0gaWZraXQoMCwgMCwgNCwgMCwgMCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfODg4biA9IGlma2l0KDgsIDgsIDgsIDAsIDEpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzg4OG8gPSBpZmtpdCg4LCA4LCA4LCAwLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF8wNDcgPSBpZmtpdCgwLCA0LCA3LCAxLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF84ODQgPSBpZmtpdCg4LCA4LCA0LCAwLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF8wODggPSBpZmtpdCgwLCA4LCA4LCAxLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF8wMTYxNiA9IGlma2l0KDAsIDE2LCAxNiwgMCwgMCk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRldmljZV9ubzsKLQotc3RydWN0IGludGVyZmFjZWtpdCB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7Ci0Jc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgKmlma2l0OwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQl1bnNpZ25lZCBsb25nIG91dHB1dHM7Ci0JaW50IGRldl9ubzsKLQl1OCBpbnB1dHNbTUFYX0lOVEVSRkFDRVNdOwotCXUxNiBzZW5zb3JzW01BWF9JTlRFUkZBQ0VTXTsKLQl1OCBsY2RfZmlsZXNfb247Ci0KLQlzdHJ1Y3QgdXJiICppcnE7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQlkbWFfYWRkcl90IGRhdGFfZG1hOwotCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBkb19ub3RpZnk7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBkb19yZXN1Ym1pdDsKLQl1bnNpZ25lZCBsb25nIGlucHV0X2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHNlbnNvcl9ldmVudHM7Ci19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDA0KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF8wMDR9LAotCXtVU0JfREVWSUNFX1ZFUihVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg4LCAwLCAweDgxNCksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfODg4b30sCi0Je1VTQl9ERVZJQ0VfVkVSKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgsIDB4MDgxNSwgMHhmZmZmKSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF84ODhufSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDQ3KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF8wNDd9LAotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwODgpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzA4OH0sCi0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAxNjE2KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF8wMTYxNn0sCi0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg0KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF84ODR9LAotCXt9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotc3RhdGljIGludCBzZXRfb3V0cHV0cyhzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQpCi17Ci0JdTggKmJ1ZmZlcjsKLQlpbnQgcmV0dmFsOwotCi0JYnVmZmVyID0ga3phbGxvYyg0LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JYnVmZmVyWzBdID0gKHU4KWtpdC0+b3V0cHV0czsKLQlidWZmZXJbMV0gPSAodTgpKGtpdC0+b3V0cHV0cyA+PiA4KTsKLQotCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAic2VuZGluZyBkYXRhOiAweCUwNHhcbiIsICh1MTYpa2l0LT5vdXRwdXRzKTsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCi0JCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCi0JCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgNCwgMjAwMCk7Ci0KLQlpZiAocmV0dmFsICE9IDQpCi0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCAKLQkJCQlyZXR2YWwpOwotCWtmcmVlKGJ1ZmZlcik7Ci0KLQlpZiAoa2l0LT5pZmtpdC0+YW1uZXNpYWMpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygma2l0LT5kb19yZXN1Ym1pdCwgSFogLyAyKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKLX0KLQotc3RhdGljIGludCBjaGFuZ2Vfc3RyaW5nKHN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCwgY29uc3QgY2hhciAqZGlzcGxheSwgdW5zaWduZWQgY2hhciByb3cpCi17Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCXVuc2lnbmVkIGNoYXIgKmZvcm1fYnVmZmVyOwotCWludCByZXR2YWwgPSAtRU5PTUVNOwotCWludCBpLGosIGxlbiwgYnVmX3B0cjsKLQkKLQlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOwotCWZvcm1fYnVmZmVyID0ga21hbGxvYygzMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCghYnVmZmVyKSB8fCAoIWZvcm1fYnVmZmVyKSkgewotCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbGVuID0gc3RybGVuKGRpc3BsYXkpOwotCWlmIChsZW4gPiAyMCkKLQkJbGVuID0gMjA7Ci0KLQlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIlNldHRpbmcgTENEIGxpbmUgJWQgdG8gJXNcbiIsIHJvdywgZGlzcGxheSk7Ci0KLQlmb3JtX2J1ZmZlclswXSA9IHJvdyAqIDB4NDAgKyAweDgwOwotCWZvcm1fYnVmZmVyWzFdID0gMHgwMjsKLQlidWZfcHRyID0gMjsKLQlmb3IgKGkgPSAwOyBpPGxlbjsgaSsrKQotCQlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gZGlzcGxheVtpXTsKLQotCWZvciAoaSA9IDA7IGkgPCAoMjAgLSBsZW4pOyBpKyspCi0JCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSAweDIwOwotCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSAweDAxOwotCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSByb3cgKiAweDQwICsgMHg4MCArIHN0cmxlbihkaXNwbGF5KTsKLQotCWZvciAoaSA9IDA7IGkgPCBidWZfcHRyOyBpICs9IDcpIHsKLQkJaWYgKChidWZfcHRyIC0gaSkgPiA3KQotCQkJbGVuID0gNzsKLQkJZWxzZQotCQkJbGVuID0gKGJ1Zl9wdHIgLSBpKTsKLQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQotCQkJYnVmZmVyW2pdID0gZm9ybV9idWZmZXJbaSArIGpdOwotCQlidWZmZXJbN10gPSBsZW47Ci0KLQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCi0JCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDgsIDIwMDApOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCWdvdG8gZXhpdDsKLQl9Ci0KLQlyZXR2YWwgPSAwOwotZXhpdDoKLQlrZnJlZShidWZmZXIpOwotCWtmcmVlKGZvcm1fYnVmZmVyKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLSNkZWZpbmUgc2V0X2xjZF9saW5lKG51bWJlcikJXAotc3RhdGljIHNzaXplX3QgbGNkX2xpbmVfIyNudW1iZXIoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JY2hhbmdlX3N0cmluZyhraXQsIGJ1ZiwgbnVtYmVyIC0gMSk7CQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0KLQotI2RlZmluZSBsY2RfbGluZV9hdHRyKG51bWJlcikJCQkJCQlcCi0JX19BVFRSKGxjZF9saW5lXyMjbnVtYmVyLCBTX0lXVUdPLCBOVUxMLCBsY2RfbGluZV8jI251bWJlcikKLQotc2V0X2xjZF9saW5lKDEpOwotc2V0X2xjZF9saW5lKDIpOwotCi1zdGF0aWMgc3NpemVfdCBzZXRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQlpbnQgcmV0dmFsID0gLUVOT01FTTsKLQkKLQlidWZmZXIgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZWQpIDwgMSkgewotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCWlmIChlbmFibGVkKQotCQlidWZmZXJbMF0gPSAweDAxOwotCWJ1ZmZlcls3XSA9IDB4MTE7Ci0KLQlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIlNldHRpbmcgYmFja2xpZ2h0IHRvICVzXG4iLCBlbmFibGVkID8gIm9uIiA6ICJvZmYiKTsKLQkKLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAotCQkJIHVzYl9zbmRjdHJscGlwZShraXQtPnVkZXYsIDApLAotCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDgsIDIwMDApOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGV4aXQ7Ci0KLQlyZXR2YWwgPSBjb3VudDsKLWV4aXQ6Ci0Ja2ZyZWUoYnVmZmVyKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2xjZF9saW5lX2F0dHJzW10gPSB7Ci0JbGNkX2xpbmVfYXR0cigxKSwKLQlsY2RfbGluZV9hdHRyKDIpLAotCV9fQVRUUihiYWNrbGlnaHQsIFNfSVdVR08sIE5VTEwsIHNldF9iYWNrbGlnaHQpCi19OwotCi1zdGF0aWMgdm9pZCByZW1vdmVfbGNkX2ZpbGVzKHN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCkKLXsKLQlpbnQgaTsKLQotCWlmIChraXQtPmxjZF9maWxlc19vbikgewotCQlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIlJlbW92aW5nIGxjZCBmaWxlc1xuIik7Ci0KLQkJZm9yIChpPTA7IGk8QVJSQVlfU0laRShkZXZfbGNkX2xpbmVfYXR0cnMpOyBpKyspCi0JCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfbGNkX2xpbmVfYXR0cnNbaV0pOwotCX0KLX0KLQotc3RhdGljIHNzaXplX3QgZW5hYmxlX2xjZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgZW5hYmxlOwotCWludCBpLCByYzsKLQkKLQlpZiAoa2l0LT5pZmtpdC0+aGFzX2xjZCA9PSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlKSA8IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVuYWJsZSkgewotCQlpZiAoIWtpdC0+bGNkX2ZpbGVzX29uKSB7Ci0JCQlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIkFkZGluZyBsY2QgZmlsZXNcbiIpOwotCQkJZm9yIChpPTA7IGk8QVJSQVlfU0laRShkZXZfbGNkX2xpbmVfYXR0cnMpOyBpKyspIHsKLQkJCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShraXQtPmRldiwKLQkJCQkJJmRldl9sY2RfbGluZV9hdHRyc1tpXSk7Ci0JCQkJaWYgKHJjKQotCQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWtpdC0+bGNkX2ZpbGVzX29uID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChraXQtPmxjZF9maWxlc19vbikgewotCQkJcmVtb3ZlX2xjZF9maWxlcyhraXQpOwotCQkJa2l0LT5sY2RfZmlsZXNfb24gPSAwOwotCQl9Ci0JfQotCQotCXJldHVybiBjb3VudDsKLW91dDoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2xjZF9saW5lX2F0dHJzW2ldKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGxjZCwgU19JV1VHTywgTlVMTCwgZW5hYmxlX2xjZF9maWxlcyk7Ci0KLXN0YXRpYyB2b2lkIGludGVyZmFjZWtpdF9pcnEoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IHVyYi0+Y29udGV4dDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBraXQtPmRhdGE7Ci0JaW50IGksIGxldmVsLCBzZW5zb3I7Ci0JaW50IHJldHZhbDsKLQlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7Ci0KLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCi0JCWJyZWFrOwotCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLwotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCXJldHVybjsKLQkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KLQlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJZ290byByZXN1Ym1pdDsKLQl9Ci0KLQkvKiBkaWdpdGFsIGlucHV0cyAqLwotCWlmIChraXQtPmlma2l0LT5pbnB1dHMgPT0gMTYpIHsKLQkJZm9yIChpPTA7IGkgPCA4OyBpKyspIHsKLQkJCWxldmVsID0gKGJ1ZmZlclswXSA+PiBpKSAmIDE7Ci0JCQlpZiAoa2l0LT5pbnB1dHNbaV0gIT0gbGV2ZWwpIHsKLQkJCQlraXQtPmlucHV0c1tpXSA9IGxldmVsOwotCQkJCXNldF9iaXQoaSwgJmtpdC0+aW5wdXRfZXZlbnRzKTsKLQkJCX0KLQkJCWxldmVsID0gKGJ1ZmZlclsxXSA+PiBpKSAmIDE7Ci0JCQlpZiAoa2l0LT5pbnB1dHNbOCArIGldICE9IGxldmVsKSB7Ci0JCQkJa2l0LT5pbnB1dHNbOCArIGldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdCg4ICsgaSwgJmtpdC0+aW5wdXRfZXZlbnRzKTsKLQkJCX0KLQkJfQotCX0KLQllbHNlIGlmIChraXQtPmlma2l0LT5pbnB1dHMgPT0gOCkgewotCQlmb3IgKGk9MDsgaSA8IDg7IGkrKykgewotCQkJbGV2ZWwgPSAoYnVmZmVyWzFdID4+IGkpICYgMTsKLQkJCWlmIChraXQtPmlucHV0c1tpXSAhPSBsZXZlbCkgewotCQkJCWtpdC0+aW5wdXRzW2ldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdChpLCAma2l0LT5pbnB1dF9ldmVudHMpOwotCQkJfQotCQl9Ci0JfQotCi0JLyogYW5hbG9nIGlucHV0cyAqLwotCWlmIChraXQtPmlma2l0LT5zZW5zb3JzKSB7Ci0JCXNlbnNvciA9IChidWZmZXJbMF0gJiAxKSA/IDQgOiAwOwotCi0JCWxldmVsID0gYnVmZmVyWzJdICsgKGJ1ZmZlclszXSAmIDB4MGYpICogMjU2OwotCQlpZiAobGV2ZWwgIT0ga2l0LT5zZW5zb3JzW3NlbnNvcl0pIHsKLQkJCWtpdC0+c2Vuc29yc1tzZW5zb3JdID0gbGV2ZWw7Ci0JCQlzZXRfYml0KHNlbnNvciwgJmtpdC0+c2Vuc29yX2V2ZW50cyk7Ci0JCX0KLQkJc2Vuc29yKys7Ci0JCWxldmVsID0gYnVmZmVyWzRdICsgKGJ1ZmZlclszXSAmIDB4ZjApICogMTY7Ci0JCWlmIChsZXZlbCAhPSBraXQtPnNlbnNvcnNbc2Vuc29yXSkgewotCQkJa2l0LT5zZW5zb3JzW3NlbnNvcl0gPSBsZXZlbDsKLQkJCXNldF9iaXQoc2Vuc29yLCAma2l0LT5zZW5zb3JfZXZlbnRzKTsKLQkJfQotCQlzZW5zb3IrKzsKLQkJbGV2ZWwgPSBidWZmZXJbNV0gKyAoYnVmZmVyWzZdICYgMHgwZikgKiAyNTY7Ci0JCWlmIChsZXZlbCAhPSBraXQtPnNlbnNvcnNbc2Vuc29yXSkgewotCQkJa2l0LT5zZW5zb3JzW3NlbnNvcl0gPSBsZXZlbDsKLQkJCXNldF9iaXQoc2Vuc29yLCAma2l0LT5zZW5zb3JfZXZlbnRzKTsKLQkJfQotCQlzZW5zb3IrKzsKLQkJbGV2ZWwgPSBidWZmZXJbN10gKyAoYnVmZmVyWzZdICYgMHhmMCkgKiAxNjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JfQotCi0JaWYgKGtpdC0+aW5wdXRfZXZlbnRzIHx8IGtpdC0+c2Vuc29yX2V2ZW50cykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZraXQtPmRvX25vdGlmeSwgMCk7Ci0KLXJlc3VibWl0OgotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldHZhbCkKLQkJZXJyKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnRlcmZhY2VraXQwLCByZXR2YWwgJWQiLAotCQkJa2l0LT51ZGV2LT5idXMtPmJ1c19uYW1lLAotCQkJa2l0LT51ZGV2LT5kZXZwYXRoLCByZXR2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBkb19ub3RpZnkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW50ZXJmYWNla2l0LCBkb19ub3RpZnkud29yayk7Ci0JaW50IGk7Ci0JY2hhciBzeXNmc19maWxlWzhdOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+aW5wdXRzOyBpKyspIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpLCAma2l0LT5pbnB1dF9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJpbnB1dCVkIiwgaSArIDEpOwotCQkJc3lzZnNfbm90aWZ5KCZraXQtPmRldi0+a29iaiwgTlVMTCwgc3lzZnNfZmlsZSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5zZW5zb3JzOyBpKyspIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpLCAma2l0LT5zZW5zb3JfZXZlbnRzKSkgewotCQkJc3ByaW50ZihzeXNmc19maWxlLCAic2Vuc29yJWQiLCBpICsgMSk7Ci0JCQlzeXNmc19ub3RpZnkoJmtpdC0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgZG9fcmVzdWJtaXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW50ZXJmYWNla2l0LCBkb19yZXN1Ym1pdC53b3JrKTsKLQlzZXRfb3V0cHV0cyhraXQpOwotfQotCi0jZGVmaW5lIHNob3dfc2V0X291dHB1dCh2YWx1ZSkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9vdXRwdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCWludCBlbmFibGU7CQkJCQkJCVwKLQlpbnQgcmV0dmFsOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGUpIDwgMSkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKGVuYWJsZSkJCQkJCQkJXAotCQlzZXRfYml0KHZhbHVlIC0gMSwgJmtpdC0+b3V0cHV0cyk7CQkJXAotCWVsc2UJCQkJCQkJCVwKLQkJY2xlYXJfYml0KHZhbHVlIC0gMSwgJmtpdC0+b3V0cHV0cyk7IAkJCVwKLQkJCQkJCQkJCVwKLQlyZXR2YWwgPSBzZXRfb3V0cHV0cyhraXQpOwkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiBjb3VudDsJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X291dHB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhIXRlc3RfYml0KHZhbHVlIC0gMSwgJmtpdC0+b3V0cHV0cykpO1wKLX0KLQotI2RlZmluZSBvdXRwdXRfYXR0cih2YWx1ZSkJCQkJCQlcCi0JX19BVFRSKG91dHB1dCMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCVwKLQkJc2hvd19vdXRwdXQjI3ZhbHVlLCBzZXRfb3V0cHV0IyN2YWx1ZSkKLQotc2hvd19zZXRfb3V0cHV0KDEpOwotc2hvd19zZXRfb3V0cHV0KDIpOwotc2hvd19zZXRfb3V0cHV0KDMpOwotc2hvd19zZXRfb3V0cHV0KDQpOwotc2hvd19zZXRfb3V0cHV0KDUpOwotc2hvd19zZXRfb3V0cHV0KDYpOwotc2hvd19zZXRfb3V0cHV0KDcpOwotc2hvd19zZXRfb3V0cHV0KDgpOwotc2hvd19zZXRfb3V0cHV0KDkpOwotc2hvd19zZXRfb3V0cHV0KDEwKTsKLXNob3dfc2V0X291dHB1dCgxMSk7Ci1zaG93X3NldF9vdXRwdXQoMTIpOwotc2hvd19zZXRfb3V0cHV0KDEzKTsKLXNob3dfc2V0X291dHB1dCgxNCk7Ci1zaG93X3NldF9vdXRwdXQoMTUpOwotc2hvd19zZXRfb3V0cHV0KDE2KTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9vdXRwdXRfYXR0cnNbXSA9IHsKLQlvdXRwdXRfYXR0cigxKSwgb3V0cHV0X2F0dHIoMiksIG91dHB1dF9hdHRyKDMpLCBvdXRwdXRfYXR0cig0KSwKLQlvdXRwdXRfYXR0cig1KSwgb3V0cHV0X2F0dHIoNiksIG91dHB1dF9hdHRyKDcpLCBvdXRwdXRfYXR0cig4KSwKLQlvdXRwdXRfYXR0cig5KSwgb3V0cHV0X2F0dHIoMTApLCBvdXRwdXRfYXR0cigxMSksIG91dHB1dF9hdHRyKDEyKSwKLQlvdXRwdXRfYXR0cigxMyksIG91dHB1dF9hdHRyKDE0KSwgb3V0cHV0X2F0dHIoMTUpLCBvdXRwdXRfYXR0cigxNikKLX07Ci0KLSNkZWZpbmUgc2hvd19pbnB1dCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19pbnB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCi0JCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWtpdC0+aW5wdXRzW3ZhbHVlIC0gMV0pOwlcCi19Ci0KLSNkZWZpbmUgaW5wdXRfYXR0cih2YWx1ZSkJCQkJCQlcCi0JX19BVFRSKGlucHV0IyN2YWx1ZSwgU19JUlVHTywgc2hvd19pbnB1dCMjdmFsdWUsIE5VTEwpCi0KLXNob3dfaW5wdXQoMSk7Ci1zaG93X2lucHV0KDIpOwotc2hvd19pbnB1dCgzKTsKLXNob3dfaW5wdXQoNCk7Ci1zaG93X2lucHV0KDUpOwotc2hvd19pbnB1dCg2KTsKLXNob3dfaW5wdXQoNyk7Ci1zaG93X2lucHV0KDgpOwotc2hvd19pbnB1dCg5KTsKLXNob3dfaW5wdXQoMTApOwotc2hvd19pbnB1dCgxMSk7Ci1zaG93X2lucHV0KDEyKTsKLXNob3dfaW5wdXQoMTMpOwotc2hvd19pbnB1dCgxNCk7Ci1zaG93X2lucHV0KDE1KTsKLXNob3dfaW5wdXQoMTYpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2lucHV0X2F0dHJzW10gPSB7Ci0JaW5wdXRfYXR0cigxKSwgaW5wdXRfYXR0cigyKSwgaW5wdXRfYXR0cigzKSwgaW5wdXRfYXR0cig0KSwKLQlpbnB1dF9hdHRyKDUpLCBpbnB1dF9hdHRyKDYpLCBpbnB1dF9hdHRyKDcpLCBpbnB1dF9hdHRyKDgpLAotCWlucHV0X2F0dHIoOSksIGlucHV0X2F0dHIoMTApLCBpbnB1dF9hdHRyKDExKSwgaW5wdXRfYXR0cigxMiksCi0JaW5wdXRfYXR0cigxMyksIGlucHV0X2F0dHIoMTQpLCBpbnB1dF9hdHRyKDE1KSwgaW5wdXRfYXR0cigxNikKLX07Ci0KLSNkZWZpbmUgc2hvd19zZW5zb3IodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGludClraXQtPnNlbnNvcnNbdmFsdWUgLSAxXSk7CVwKLX0KLQotI2RlZmluZSBzZW5zb3JfYXR0cih2YWx1ZSkJCQkJCQlcCi0JX19BVFRSKHNlbnNvciMjdmFsdWUsIFNfSVJVR08sIHNob3dfc2Vuc29yIyN2YWx1ZSwgTlVMTCkKLQotc2hvd19zZW5zb3IoMSk7Ci1zaG93X3NlbnNvcigyKTsKLXNob3dfc2Vuc29yKDMpOwotc2hvd19zZW5zb3IoNCk7Ci1zaG93X3NlbnNvcig1KTsKLXNob3dfc2Vuc29yKDYpOwotc2hvd19zZW5zb3IoNyk7Ci1zaG93X3NlbnNvcig4KTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9zZW5zb3JfYXR0cnNbXSA9IHsKLQlzZW5zb3JfYXR0cigxKSwgc2Vuc29yX2F0dHIoMiksIHNlbnNvcl9hdHRyKDMpLCBzZW5zb3JfYXR0cig0KSwKLQlzZW5zb3JfYXR0cig1KSwgc2Vuc29yX2F0dHIoNiksIHNlbnNvcl9hdHRyKDcpLCBzZW5zb3JfYXR0cig4KQotfTsKLQotc3RhdGljIGludCBpbnRlcmZhY2VraXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQ7Ci0Jc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgKmlma2l0OwotCWludCBwaXBlLCBtYXhwLCByYyA9IC1FTk9NRU07Ci0JaW50IGJpdCwgdmFsdWUsIGk7Ci0KLQlpZmtpdCA9IChzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqKWlkLT5kcml2ZXJfaW5mbzsKLQlpZiAoIWlma2l0KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKLQlpZiAoIXVzYl9lbmRwb2ludF9kaXJfaW4oZW5kcG9pbnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQkvKgotCSAqIGJtQXR0cmlidXRlcwotCSAqLwotCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKLQltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKLQkKLQlraXQgPSBremFsbG9jKHNpemVvZigqa2l0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFraXQpCi0JCWdvdG8gb3V0OwotCi0Ja2l0LT5kZXZfbm8gPSAtMTsKLQlraXQtPmlma2l0ID0gaWZraXQ7Ci0Ja2l0LT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFVSQl9JTlRfU0laRSwgR0ZQX0FUT01JQywgJmtpdC0+ZGF0YV9kbWEpOwotCWlmICgha2l0LT5kYXRhKQotCQlnb3RvIG91dDsKLQotCWtpdC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtpdC0+aXJxKQotCQlnb3RvIG91dDsKLQotCWtpdC0+dWRldiA9IHVzYl9nZXRfZGV2KGRldik7Ci0Ja2l0LT5pbnRmID0gaW50ZjsKLQlJTklUX0RFTEFZRURfV09SSygma2l0LT5kb19ub3RpZnksIGRvX25vdGlmeSk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmtpdC0+ZG9fcmVzdWJtaXQsIGRvX3Jlc3VibWl0KTsKLQl1c2JfZmlsbF9pbnRfdXJiKGtpdC0+aXJxLCBraXQtPnVkZXYsIHBpcGUsIGtpdC0+ZGF0YSwKLQkJCW1heHAgPiBVUkJfSU5UX1NJWkUgPyBVUkJfSU5UX1NJWkUgOiBtYXhwLAotCQkJaW50ZXJmYWNla2l0X2lycSwga2l0LCBlbmRwb2ludC0+YkludGVydmFsKTsKLQlraXQtPmlycS0+dHJhbnNmZXJfZG1hID0ga2l0LT5kYXRhX2RtYTsKLQlraXQtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGtpdCk7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGJpdCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmRldmljZV9ubywgc2l6ZW9mKGRldmljZV9ubykpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gdGVzdF9hbmRfc2V0X2JpdChiaXQsICZkZXZpY2Vfbm8pOwotICAgICAgICB9IHdoaWxlKHZhbHVlKTsKLSAgICAgICAga2l0LT5kZXZfbm8gPSBiaXQ7Ci0KLQlraXQtPmRldiA9IGRldmljZV9jcmVhdGUocGhpZGdldF9jbGFzcywgJmtpdC0+dWRldi0+ZGV2LCBNS0RFVigwLCAwKSwKLQkJCQkga2l0LCAiaW50ZXJmYWNla2l0JWQiLCBraXQtPmRldl9ubyk7Ci0gICAgICAgIGlmIChJU19FUlIoa2l0LT5kZXYpKSB7Ci0gICAgICAgICAgICAgICAgcmMgPSBQVFJfRVJSKGtpdC0+ZGV2KTsKLSAgICAgICAgICAgICAgICBraXQtPmRldiA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQotCWlmICh1c2Jfc3VibWl0X3VyYihraXQtPmlycSwgR0ZQX0tFUk5FTCkpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxpZmtpdC0+b3V0cHV0czsgaSsrICkgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShraXQtPmRldiwgJmRldl9vdXRwdXRfYXR0cnNbaV0pOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDI7Ci0JfQotCi0JZm9yIChpPTA7IGk8aWZraXQtPmlucHV0czsgaSsrICkgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShraXQtPmRldiwgJmRldl9pbnB1dF9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0MzsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxpZmtpdC0+c2Vuc29yczsgaSsrICkgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShraXQtPmRldiwgJmRldl9zZW5zb3JfYXR0cnNbaV0pOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDQ7Ci0JfQotCi0JaWYgKGlma2l0LT5oYXNfbGNkKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2F0dHJfbGNkKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQ0OwotCi0JfQotCi0JZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0ICVkLyVkLyVkIGF0dGFjaGVkXG4iLAotCQkJaWZraXQtPnNlbnNvcnMsIGlma2l0LT5pbnB1dHMsIGlma2l0LT5vdXRwdXRzKTsKLQotCXJldHVybiAwOwotCi1vdXQ0OgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfc2Vuc29yX2F0dHJzW2ldKTsKLQotCWkgPSBpZmtpdC0+aW5wdXRzOwotb3V0MzoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2lucHV0X2F0dHJzW2ldKTsKLQotCWkgPSBpZmtpdC0+b3V0cHV0czsKLW91dDI6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9vdXRwdXRfYXR0cnNbaV0pOwotb3V0OgotCWlmIChraXQpIHsKLQkJdXNiX2ZyZWVfdXJiKGtpdC0+aXJxKTsKLQkJaWYgKGtpdC0+ZGF0YSkKLQkJCXVzYl9idWZmZXJfZnJlZShkZXYsIFVSQl9JTlRfU0laRSwga2l0LT5kYXRhLCBraXQtPmRhdGFfZG1hKTsKLQkJaWYgKGtpdC0+ZGV2KQotCQkJZGV2aWNlX3VucmVnaXN0ZXIoa2l0LT5kZXYpOwotCQlpZiAoa2l0LT5kZXZfbm8gPj0gMCkKLQkJCWNsZWFyX2JpdChraXQtPmRldl9ubywgJmRldmljZV9ubyk7Ci0KLQkJa2ZyZWUoa2l0KTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVyZmFjZWtpdF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0OwotCWludCBpOwotCi0Ja2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQlpZiAoIWtpdCkKLQkJcmV0dXJuOwotCi0JdXNiX2tpbGxfdXJiKGtpdC0+aXJxKTsKLQl1c2JfZnJlZV91cmIoa2l0LT5pcnEpOwotCXVzYl9idWZmZXJfZnJlZShraXQtPnVkZXYsIFVSQl9JTlRfU0laRSwga2l0LT5kYXRhLCBraXQtPmRhdGFfZG1hKTsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fbm90aWZ5KTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZraXQtPmRvX3Jlc3VibWl0KTsKLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPm91dHB1dHM7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7Ci0KLQlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5pbnB1dHM7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2lucHV0X2F0dHJzW2ldKTsKLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPnNlbnNvcnM7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X3NlbnNvcl9hdHRyc1tpXSk7Ci0KLQlpZiAoa2l0LT5pZmtpdC0+aGFzX2xjZCkgewotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfYXR0cl9sY2QpOwotCQlyZW1vdmVfbGNkX2ZpbGVzKGtpdCk7Ci0JfQotCi0JZGV2aWNlX3VucmVnaXN0ZXIoa2l0LT5kZXYpOwotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgZGV0YWNoZWRcbiIsCi0JCWtpdC0+aWZraXQtPnNlbnNvcnMsIGtpdC0+aWZraXQtPmlucHV0cywga2l0LT5pZmtpdC0+b3V0cHV0cyk7Ci0KLQl1c2JfcHV0X2RldihraXQtPnVkZXYpOwotCWNsZWFyX2JpdChraXQtPmRldl9ubywgJmRldmljZV9ubyk7Ci0KLQlrZnJlZShraXQpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaW50ZXJmYWNla2l0X2RyaXZlciA9IHsKLQkubmFtZSA9ICJwaGlkZ2V0a2l0IiwKLQkucHJvYmUgPSBpbnRlcmZhY2VraXRfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBpbnRlcmZhY2VraXRfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPSBpZF90YWJsZQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW50ZXJmYWNla2l0X2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaW50ZXJmYWNla2l0X2RyaXZlcik7Ci0JaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGludGVyZmFjZWtpdF9leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJmludGVyZmFjZWtpdF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChpbnRlcmZhY2VraXRfaW5pdCk7Ci1tb2R1bGVfZXhpdChpbnRlcmZhY2VraXRfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwODhiNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDQ2NSArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXQgTW90b3JDb250cm9sIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiAgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgInBoaWRnZXQuaCIKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0TW90b3JDb250cm9sIERyaXZlciIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX01PVE9SQ09OVFJPTAkweDAwNTgKLQotI2RlZmluZSBVUkJfSU5UX1NJWkUJCQk4Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRldmljZV9ubzsKLQotc3RydWN0IG1vdG9yY29udHJvbCB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCWludCBkZXZfbm87Ci0JdTggaW5wdXRzWzRdOwotCXM4IGRlc2lyZWRfc3BlZWRbMl07Ci0Jczggc3BlZWRbMl07Ci0JczE2IF9jdXJyZW50WzJdOwotCXM4IGFjY2VsZXJhdGlvblsyXTsKLQlzdHJ1Y3QgdXJiICppcnE7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQlkbWFfYWRkcl90IGRhdGFfZG1hOwotCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBkb19ub3RpZnk7Ci0JdW5zaWduZWQgbG9uZyBpbnB1dF9ldmVudHM7Ci0JdW5zaWduZWQgbG9uZyBzcGVlZF9ldmVudHM7Ci0JdW5zaWduZWQgbG9uZyBleGNlZWRfZXZlbnRzOwotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Ci0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9NT1RPUkNPTlRST0wpIH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1zdGF0aWMgaW50IHNldF9tb3RvcihzdHJ1Y3QgbW90b3Jjb250cm9sICptYywgaW50IG1vdG9yKQotewotCXU4ICpidWZmZXI7Ci0JaW50IHNwZWVkLCBzcGVlZDIsIGFjY2VsZXJhdGlvbjsKLQlpbnQgcmV0dmFsOwotCi0JYnVmZmVyID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlkZXZfZXJyKCZtYy0+aW50Zi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWFjY2VsZXJhdGlvbiA9IG1jLT5hY2NlbGVyYXRpb25bbW90b3JdICogMTA7Ci0JLyogLTEyNyA8PSBzcGVlZCA8PSAxMjcgKi8KLQlzcGVlZCA9IChtYy0+ZGVzaXJlZF9zcGVlZFttb3Rvcl0gKiAxMjcpIC8gMTAwOwotCS8qIC0weDczMDAgPD0gc3BlZWQyIDw9IDB4NzMwMCAqLwotCXNwZWVkMiA9IChtYy0+ZGVzaXJlZF9zcGVlZFttb3Rvcl0gKiAyMzAgKiAxMjgpIC8gMTAwOwotCi0JYnVmZmVyWzBdID0gbW90b3I7Ci0JYnVmZmVyWzFdID0gc3BlZWQ7Ci0JYnVmZmVyWzJdID0gYWNjZWxlcmF0aW9uID4+IDg7Ci0JYnVmZmVyWzNdID0gYWNjZWxlcmF0aW9uOwotCWJ1ZmZlcls0XSA9IHNwZWVkMiA+PiA4OwotCWJ1ZmZlcls1XSA9IHNwZWVkMjsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhtYy0+dWRldiwKLQkJCSB1c2Jfc25kY3RybHBpcGUobWMtPnVkZXYsIDApLAotCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDgsIDIwMDApOwotCi0JaWYgKHJldHZhbCAhPSA4KQotCQlkZXZfZXJyKCZtYy0+aW50Zi0+ZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAotCQkJCXJldHZhbCk7Ci0Ja2ZyZWUoYnVmZmVyKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKLX0KLQotc3RhdGljIHZvaWQgbW90b3Jjb250cm9sX2lycShzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSB1cmItPmNvbnRleHQ7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyID0gbWMtPmRhdGE7Ci0JaW50IGksIGxldmVsOwotCWludCByZXR2YWw7Ci0JaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOzsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCi0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJcmV0dXJuOwotCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwotCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlnb3RvIHJlc3VibWl0OwotCX0KLQotCS8qIGRpZ2l0YWwgaW5wdXRzICovCi0JZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCWxldmVsID0gKGJ1ZmZlclswXSA+PiBpKSAmIDE7Ci0JCWlmIChtYy0+aW5wdXRzW2ldICE9IGxldmVsKSB7Ci0JCQltYy0+aW5wdXRzW2ldID0gbGV2ZWw7Ci0JCQlzZXRfYml0KGksICZtYy0+aW5wdXRfZXZlbnRzKTsKLQkJfQotCX0KLQotCS8qIG1vdG9yIHNwZWVkICovCi0JaWYgKGJ1ZmZlclsyXSA9PSAwKSB7Ci0JCWZvciAoaT0wOyBpPDI7IGkrKykgewotCQlsZXZlbCA9ICgoczgpYnVmZmVyWzQraV0pICogMTAwIC8gMTI3OwotCQkJaWYgKG1jLT5zcGVlZFtpXSAhPSBsZXZlbCkgewotCQkJCW1jLT5zcGVlZFtpXSA9IGxldmVsOwotCQkJCXNldF9iaXQoaSwgJm1jLT5zcGVlZF9ldmVudHMpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGluZGV4ID0gYnVmZmVyWzNdICYgMTsKLQotCQlsZXZlbCA9ICgoczgpYnVmZmVyWzRdIDw8IDgpIHwgYnVmZmVyWzVdOwotCQlsZXZlbCA9IGxldmVsICogMTAwIC8gMjk0NDA7Ci0JCWlmIChtYy0+c3BlZWRbaW5kZXhdICE9IGxldmVsKSB7Ci0JCQltYy0+c3BlZWRbaW5kZXhdID0gbGV2ZWw7Ci0JCQlzZXRfYml0KGluZGV4LCAmbWMtPnNwZWVkX2V2ZW50cyk7Ci0JCX0KLQotCQlsZXZlbCA9ICgoczgpYnVmZmVyWzZdIDw8IDgpIHwgYnVmZmVyWzddOwotCQltYy0+X2N1cnJlbnRbaW5kZXhdID0gbGV2ZWwgKiAxMDAgLyAxNTcyOwotCX0KLQotCWlmIChidWZmZXJbMV0gJiAxKQotCQlzZXRfYml0KDAsICZtYy0+ZXhjZWVkX2V2ZW50cyk7Ci0KLQlpZiAoYnVmZmVyWzFdICYgMikKLQkJc2V0X2JpdCgxLCAmbWMtPmV4Y2VlZF9ldmVudHMpOwotCi0JaWYgKG1jLT5pbnB1dF9ldmVudHMgfHwgbWMtPmV4Y2VlZF9ldmVudHMgfHwgbWMtPnNwZWVkX2V2ZW50cykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtYy0+ZG9fbm90aWZ5LCAwKTsKLQotcmVzdWJtaXQ6Ci0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0dmFsKQotCQlkZXZfZXJyKCZtYy0+aW50Zi0+ZGV2LAotCQkJImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL21vdG9yY29udHJvbDAsIHJldHZhbCAlZFxuIiwKLQkJCW1jLT51ZGV2LT5idXMtPmJ1c19uYW1lLAotCQkJbWMtPnVkZXYtPmRldnBhdGgsIHJldHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX25vdGlmeShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1vdG9yY29udHJvbCwgZG9fbm90aWZ5LndvcmspOwotCWludCBpOwotCWNoYXIgc3lzZnNfZmlsZVs4XTsKLQotCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZtYy0+aW5wdXRfZXZlbnRzKSkgewotCQkJc3ByaW50ZihzeXNmc19maWxlLCAiaW5wdXQlZCIsIGkpOwotCQkJc3lzZnNfbm90aWZ5KCZtYy0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKLQkJfQotCX0KLQotCWZvciAoaT0wOyBpPDI7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZtYy0+c3BlZWRfZXZlbnRzKSkgewotCQkJc3ByaW50ZihzeXNmc19maWxlLCAic3BlZWQlZCIsIGkpOwotCQkJc3lzZnNfbm90aWZ5KCZtYy0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKLQkJfQotCX0KLQotCWZvciAoaT0wOyBpPDI7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZtYy0+ZXhjZWVkX2V2ZW50cykpCi0JCQlkZXZfd2FybigmbWMtPmludGYtPmRldiwKLQkJCQkibW90b3IgIyVkIGV4Y2VlZHMgMS41IEFtcCBjdXJyZW50IGxpbWl0XG4iLCBpKTsKLQl9Ci19Ci0KLSNkZWZpbmUgc2hvd19zZXRfc3BlZWQodmFsdWUpCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfc3BlZWQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAotCWludCBzcGVlZDsJCQkJCQkJXAotCWludCByZXR2YWw7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnNwZWVkKSA8IDEpCQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzcGVlZCA8IC0xMDAgfHwgc3BlZWQgPiAxMDApCQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCW1jLT5kZXNpcmVkX3NwZWVkW3ZhbHVlXSA9IHNwZWVkOwkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dmFsID0gc2V0X21vdG9yKG1jLCB2YWx1ZSk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3BlZWQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBtYy0+c3BlZWRbdmFsdWVdKTsJCQlcCi19Ci0KLSNkZWZpbmUgc3BlZWRfYXR0cih2YWx1ZSkgCQkJCQkJXAotCV9fQVRUUihzcGVlZCMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCAJCQlcCi0JCXNob3dfc3BlZWQjI3ZhbHVlLCBzZXRfc3BlZWQjI3ZhbHVlKQotCi1zaG93X3NldF9zcGVlZCgwKTsKLXNob3dfc2V0X3NwZWVkKDEpOwotCi0jZGVmaW5lIHNob3dfc2V0X2FjY2VsZXJhdGlvbih2YWx1ZSkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9hY2NlbGVyYXRpb24jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAotCWludCBhY2NlbGVyYXRpb247CQkJCQkJXAotCWludCByZXR2YWw7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmFjY2VsZXJhdGlvbikgPCAxKQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChhY2NlbGVyYXRpb24gPCAwIHx8IGFjY2VsZXJhdGlvbiA+IDEwMCkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQltYy0+YWNjZWxlcmF0aW9uW3ZhbHVlXSA9IGFjY2VsZXJhdGlvbjsJCQkJXAotCQkJCQkJCQkJXAotCXJldHZhbCA9IHNldF9tb3RvcihtYywgdmFsdWUpOwkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiBjb3VudDsJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2FjY2VsZXJhdGlvbiMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkgCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJCQljaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1jLT5hY2NlbGVyYXRpb25bdmFsdWVdKTsJCVwKLX0KLQotI2RlZmluZSBhY2NlbGVyYXRpb25fYXR0cih2YWx1ZSkJXAotCV9fQVRUUihhY2NlbGVyYXRpb24jI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQlcCi0JCXNob3dfYWNjZWxlcmF0aW9uIyN2YWx1ZSwgc2V0X2FjY2VsZXJhdGlvbiMjdmFsdWUpCi0KLXNob3dfc2V0X2FjY2VsZXJhdGlvbigwKTsKLXNob3dfc2V0X2FjY2VsZXJhdGlvbigxKTsKLQotI2RlZmluZSBzaG93X2N1cnJlbnQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfY3VycmVudCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRtQVxuIiwgKGludCltYy0+X2N1cnJlbnRbdmFsdWVdKTsJXAotfQotCi0jZGVmaW5lIGN1cnJlbnRfYXR0cih2YWx1ZSkJXAotCV9fQVRUUihjdXJyZW50IyN2YWx1ZSwgU19JUlVHTywgc2hvd19jdXJyZW50IyN2YWx1ZSwgTlVMTCkKLQotc2hvd19jdXJyZW50KDApOwotc2hvd19jdXJyZW50KDEpOwotCi0jZGVmaW5lIHNob3dfaW5wdXQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfaW5wdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KW1jLT5pbnB1dHNbdmFsdWVdKTsJCVwKLX0KLQotI2RlZmluZSBpbnB1dF9hdHRyKHZhbHVlKQlcCi0JX19BVFRSKGlucHV0IyN2YWx1ZSwgU19JUlVHTywgc2hvd19pbnB1dCMjdmFsdWUsIE5VTEwpCi0KLXNob3dfaW5wdXQoMCk7Ci1zaG93X2lucHV0KDEpOwotc2hvd19pbnB1dCgyKTsKLXNob3dfaW5wdXQoMyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cnNbXSA9IHsKLQlpbnB1dF9hdHRyKDApLAotCWlucHV0X2F0dHIoMSksCi0JaW5wdXRfYXR0cigyKSwKLQlpbnB1dF9hdHRyKDMpLAotCXNwZWVkX2F0dHIoMCksCi0Jc3BlZWRfYXR0cigxKSwKLQlhY2NlbGVyYXRpb25fYXR0cigwKSwKLQlhY2NlbGVyYXRpb25fYXR0cigxKSwKLQljdXJyZW50X2F0dHIoMCksCi0JY3VycmVudF9hdHRyKDEpCi19OwotCi1zdGF0aWMgaW50IG1vdG9yY29udHJvbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jOwotCWludCBwaXBlLCBtYXhwLCByYyA9IC1FTk9NRU07Ci0JaW50IGJpdCwgdmFsdWUsIGk7Ci0KLQlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKLQlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7Ci0JaWYgKCF1c2JfZW5kcG9pbnRfZGlyX2luKGVuZHBvaW50KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSAqIGJtQXR0cmlidXRlcwotCSAqLwotCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKLQltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKLQotCW1jID0ga3phbGxvYyhzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYykKLQkJZ290byBvdXQ7Ci0KLQltYy0+ZGV2X25vID0gLTE7Ci0JbWMtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgVVJCX0lOVF9TSVpFLCBHRlBfQVRPTUlDLCAmbWMtPmRhdGFfZG1hKTsKLQlpZiAoIW1jLT5kYXRhKQotCQlnb3RvIG91dDsKLQotCW1jLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghbWMtPmlycSkKLQkJZ290byBvdXQ7Ci0KLQltYy0+dWRldiA9IHVzYl9nZXRfZGV2KGRldik7Ci0JbWMtPmludGYgPSBpbnRmOwotCW1jLT5hY2NlbGVyYXRpb25bMF0gPSBtYy0+YWNjZWxlcmF0aW9uWzFdID0gMTA7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJm1jLT5kb19ub3RpZnksIGRvX25vdGlmeSk7Ci0JdXNiX2ZpbGxfaW50X3VyYihtYy0+aXJxLCBtYy0+dWRldiwgcGlwZSwgbWMtPmRhdGEsCi0JCQltYXhwID4gVVJCX0lOVF9TSVpFID8gVVJCX0lOVF9TSVpFIDogbWF4cCwKLQkJCW1vdG9yY29udHJvbF9pcnEsIG1jLCBlbmRwb2ludC0+YkludGVydmFsKTsKLQltYy0+aXJxLT50cmFuc2Zlcl9kbWEgPSBtYy0+ZGF0YV9kbWE7Ci0JbWMtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1jKTsKLQotCWRvIHsKLQkJYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZGV2aWNlX25vLCBzaXplb2YoZGV2aWNlX25vKSk7Ci0JCXZhbHVlID0gdGVzdF9hbmRfc2V0X2JpdChiaXQsICZkZXZpY2Vfbm8pOwotCX0gd2hpbGUodmFsdWUpOwotCW1jLT5kZXZfbm8gPSBiaXQ7Ci0KLQltYy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAmbWMtPnVkZXYtPmRldiwgTUtERVYoMCwgMCksIG1jLAotCQkJCSJtb3RvcmNvbnRyb2wlZCIsIG1jLT5kZXZfbm8pOwotCWlmIChJU19FUlIobWMtPmRldikpIHsKLQkJcmMgPSBQVFJfRVJSKG1jLT5kZXYpOwotCQltYy0+ZGV2ID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHVzYl9zdWJtaXRfdXJiKG1jLT5pcnEsIEdGUF9LRVJORUwpKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yIChpPTA7IGk8QVJSQVlfU0laRShkZXZfYXR0cnMpOyBpKyspIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUobWMtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0MjsKLQl9Ci0KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgYXR0YWNoZWRcbiIpOwotCi0JcmV0dXJuIDA7Ci1vdXQyOgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUobWMtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci1vdXQ6Ci0JaWYgKG1jKSB7Ci0JCXVzYl9mcmVlX3VyYihtYy0+aXJxKTsKLQkJaWYgKG1jLT5kYXRhKQotCQkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgVVJCX0lOVF9TSVpFLCBtYy0+ZGF0YSwgbWMtPmRhdGFfZG1hKTsKLQkJaWYgKG1jLT5kZXYpCi0JCQlkZXZpY2VfdW5yZWdpc3RlcihtYy0+ZGV2KTsKLQkJaWYgKG1jLT5kZXZfbm8gPj0gMCkKLQkJCWNsZWFyX2JpdChtYy0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCQlrZnJlZShtYyk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBtb3RvcmNvbnRyb2xfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jOwotCWludCBpOwotCi0JbWMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCWlmICghbWMpCi0JCXJldHVybjsKLQotCXVzYl9raWxsX3VyYihtYy0+aXJxKTsKLQl1c2JfZnJlZV91cmIobWMtPmlycSk7Ci0JdXNiX2J1ZmZlcl9mcmVlKG1jLT51ZGV2LCBVUkJfSU5UX1NJWkUsIG1jLT5kYXRhLCBtYy0+ZGF0YV9kbWEpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmbWMtPmRvX25vdGlmeSk7Ci0KLQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9hdHRycyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKG1jLT5kZXYsICZkZXZfYXR0cnNbaV0pOwotCi0JZGV2aWNlX3VucmVnaXN0ZXIobWMtPmRldik7Ci0KLQl1c2JfcHV0X2RldihtYy0+dWRldik7Ci0JY2xlYXJfYml0KG1jLT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCWtmcmVlKG1jKTsKLQotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBQaGlkZ2V0TW90b3JDb250cm9sIGRldGFjaGVkXG4iKTsKLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1vdG9yY29udHJvbF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAicGhpZGdldG1vdG9yY29udHJvbCIsCi0JLnByb2JlID0gbW90b3Jjb250cm9sX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gbW90b3Jjb250cm9sX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0gaWRfdGFibGUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1vdG9yY29udHJvbF9pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJm1vdG9yY29udHJvbF9kcml2ZXIpOwotCWlmIChyZXR2YWwpCi0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBtb3RvcmNvbnRyb2xfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZtb3RvcmNvbnRyb2xfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQobW90b3Jjb250cm9sX2luaXQpOwotbW9kdWxlX2V4aXQobW90b3Jjb250cm9sX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWY2ZmUxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAqIFVTQiBQaGlkZ2V0U2Vydm8gZHJpdmVyIDEuMAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFVTQiBQaGlkZ2V0U2Vydm8gdmVyc2lvbiAyLjAgYW5kIDMuMCBzZXJ2byAKLSAqIGNvbnRyb2xsZXJzIGF2YWlsYWJsZSBhdDogaHR0cDovL3d3dy5waGlkZ2V0cy5jb20vIAotICoKLSAqIE5vdGUgdGhhdCB0aGUgZHJpdmVyIHRha2VzIGlucHV0IGFzOiBkZWdyZWVzLm1pbnV0ZXMKLSAqCi0gKiBDQVVUSU9OOiBHZW5lcmFsbHkgeW91IHNob3VsZCB1c2UgMCA8IGRlZ3JlZXMgPCAxODAgYXMgYW55dGhpbmcgZWxzZQotICogaXMgcHJvYmFibHkgYmV5b25kIHRoZSByYW5nZSBvZiB5b3VyIHNlcnZvIGFuZCBtYXkgZGFtYWdlIGl0LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJwaGlkZ2V0LmgiCi0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUGhpZGdldFNlcnZvIERyaXZlciIKLQotI2RlZmluZSBWRU5ET1JfSURfR0xBQgkJCQkweDA2YzIKLSNkZWZpbmUgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1FVQUQJMHgwMDM4Ci0jZGVmaW5lIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19VTkkJCTB4MDAzOQotCi0jZGVmaW5lIFZFTkRPUl9JRF9XSVNFR1JPVVAJCQkweDA5MjUKLSNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fUVVBRAkweDgxMDEKLSNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fVU5JCTB4ODEwNAotCi0jZGVmaW5lIFNFUlZPX1ZFUlNJT05fMzAJCQkweDAxCi0jZGVmaW5lIFNFUlZPX0NPVU5UX1FVQUQJCQkweDAyCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsKLQkJVVNCX0RFVklDRShWRU5ET1JfSURfR0xBQiwgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1FVQUQpLCAKLQkJLmRyaXZlcl9pbmZvID0gU0VSVk9fVkVSU0lPTl8zMCB8IFNFUlZPX0NPVU5UX1FVQUQgCi0JfSwKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX0dMQUIsIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19VTkkpLAotCQkuZHJpdmVyX2luZm8gPSBTRVJWT19WRVJTSU9OXzMwIAotCX0sCi0JewotCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9XSVNFR1JPVVAsIAotCQkJCVZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1FVQUQpLAotCQkuZHJpdmVyX2luZm8gPSBTRVJWT19DT1VOVF9RVUFEIAotCX0sCi0JewotCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9XSVNFR1JPVVAsIAotCQkJCVZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1VOSSksCi0JCS5kcml2ZXJfaW5mbyA9IDAKLQl9LAotCXt9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1zdGF0aWMgaW50IHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOwotCi1zdHJ1Y3QgcGhpZGdldF9zZXJ2byB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCWludCBkZXZfbm87Ci0JdWxvbmcgdHlwZTsKLQlpbnQgcHVsc2VbNF07Ci0JaW50IGRlZ3JlZXNbNF07Ci0JaW50IG1pbnV0ZXNbNF07Ci19OwotCi1zdGF0aWMgaW50Ci1jaGFuZ2VfcG9zaXRpb25fdjMwKHN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2bywgaW50IHNlcnZvX25vLCBpbnQgZGVncmVlcywgCi0JCQkJCQkJCWludCBtaW51dGVzKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCi0JaWYgKGRlZ3JlZXMgPCAtMjMgfHwgZGVncmVlcyA+IDM2MikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWZmZXIgPSBrbWFsbG9jKDYsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJnNlcnZvLT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogcHVsc2UgPSAwIC0gNDA5NQotCSAqIGFuZ2xlID0gMCAtIDE4MCBkZWdyZWVzCi0JICoKLQkgKiBwdWxzZSA9IGFuZ2xlICogMTAuNiArIDI0My44CQotCSAqLwotCXNlcnZvLT5wdWxzZVtzZXJ2b19ub10gPSAoKGRlZ3JlZXMqNjAgKyBtaW51dGVzKSoxMDYgKyAyNDM4KjYwKS82MDA7CQotCXNlcnZvLT5kZWdyZWVzW3NlcnZvX25vXT0gZGVncmVlczsKLQlzZXJ2by0+bWludXRlc1tzZXJ2b19ub109IG1pbnV0ZXM7CQotCi0JLyogCi0JICogVGhlIFBoaWRnZXRTZXJ2byB2My4wIGlzIGNvbnRyb2xsZWQgYnkgc2VuZGluZyA2IGJ5dGVzLAotCSAqIDQgKiAxMiBiaXRzIGZvciBlYWNoIHNlcnZvLgotCSAqCi0JICogbG93ID0gbG93ZXIgOCBiaXRzIHB1bHNlCi0JICogaGlnaCA9IGhpZ2hlciA0IGJpdHMgcHVsc2UKLQkgKgotCSAqIG9mZnNldCAgICAgYml0cwotCSAqICstLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogfCAwIHwgICAgICBsb3cgMCAgICAgIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgMSB8IGhpZ2ggMSB8IGhpZ2ggMCB8Ci0JICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKLQkgKiB8IDIgfCAgICAgIGxvdyAxICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogfCAzIHwgICAgICBsb3cgMiAgICAgIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgNCB8IGhpZ2ggMyB8IGhpZ2ggMiB8Ci0JICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKLQkgKiB8IDUgfCAgICAgIGxvdyAzICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0JICovCi0KLQlidWZmZXJbMF0gPSBzZXJ2by0+cHVsc2VbMF0gJiAweGZmOwotCWJ1ZmZlclsxXSA9IChzZXJ2by0+cHVsc2VbMF0gPj4gOCAmIDB4MGYpCi0JICAgIHwgKHNlcnZvLT5wdWxzZVsxXSA+PiA0ICYgMHhmMCk7Ci0JYnVmZmVyWzJdID0gc2Vydm8tPnB1bHNlWzFdICYgMHhmZjsKLQlidWZmZXJbM10gPSBzZXJ2by0+cHVsc2VbMl0gJiAweGZmOwotCWJ1ZmZlcls0XSA9IChzZXJ2by0+cHVsc2VbMl0gPj4gOCAmIDB4MGYpCi0JICAgIHwgKHNlcnZvLT5wdWxzZVszXSA+PiA0ICYgMHhmMCk7Ci0JYnVmZmVyWzVdID0gc2Vydm8tPnB1bHNlWzNdICYgMHhmZjsKLQotCWRldl9kYmcoJnNlcnZvLT51ZGV2LT5kZXYsCi0JCSJkYXRhOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJYnVmZmVyWzBdLCBidWZmZXJbMV0sIGJ1ZmZlclsyXSwKLQkJYnVmZmVyWzNdLCBidWZmZXJbNF0sIGJ1ZmZlcls1XSk7Ci0KLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2Vydm8tPnVkZXYsCi0JCQkJIHVzYl9zbmRjdHJscGlwZShzZXJ2by0+dWRldiwgMCksCi0JCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDYsIDIwMDApOwotCi0Ja2ZyZWUoYnVmZmVyKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQKLWNoYW5nZV9wb3NpdGlvbl92MjAoc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvLCBpbnQgc2Vydm9fbm8sIGludCBkZWdyZWVzLAotCQkJCQkJCQlpbnQgbWludXRlcykKLXsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQotCWlmIChkZWdyZWVzIDwgLTIzIHx8IGRlZ3JlZXMgPiAyNzgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlkZXZfZXJyKCZzZXJ2by0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLAotCQkJX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIGFuZ2xlID0gMCAtIDE4MCBkZWdyZWVzCi0JICogcHVsc2UgPSBhbmdsZSArIDIzCi0JICovCi0Jc2Vydm8tPnB1bHNlW3NlcnZvX25vXT0gZGVncmVlcyArIDIzOwotCXNlcnZvLT5kZWdyZWVzW3NlcnZvX25vXT0gZGVncmVlczsKLQlzZXJ2by0+bWludXRlc1tzZXJ2b19ub109IDA7Ci0KLQkvKgotCSAqIFRoZSBQaGlkZ2V0U2Vydm8gdjIuMCBpcyBjb250cm9sbGVkIGJ5IHNlbmRpbmcgdHdvIGJ5dGVzLiBUaGUKLQkgKiBmaXJzdCBieXRlIGlzIHRoZSBzZXJ2byBudW1iZXIgeG9yJ2VkIHdpdGggMjoKLQkgKgotCSAqIHNlcnZvIDAgPSAyCi0JICogc2Vydm8gMSA9IDMKLQkgKiBzZXJ2byAyID0gMAotCSAqIHNlcnZvIDMgPSAxCi0JICoKLQkgKiBUaGUgc2Vjb25kIGJ5dGUgaXMgdGhlIHBvc2l0aW9uLgotCSAqLwotCi0JYnVmZmVyWzBdID0gc2Vydm9fbm8gXiAyOwotCWJ1ZmZlclsxXSA9IHNlcnZvLT5wdWxzZVtzZXJ2b19ub107Ci0KLQlkZXZfZGJnKCZzZXJ2by0+dWRldi0+ZGV2LCAiZGF0YTogJTAyeCAlMDJ4XG4iLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7Ci0KLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2Vydm8tPnVkZXYsCi0JCQkJIHVzYl9zbmRjdHJscGlwZShzZXJ2by0+dWRldiwgMCksCi0JCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDIsIDIwMDApOwotCi0Ja2ZyZWUoYnVmZmVyKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLSNkZWZpbmUgc2hvd19zZXQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9zZXJ2byMjdmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlpbnQgZGVncmVlcywgbWludXRlcywgcmV0dmFsOwkJCQkJXAotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCW1pbnV0ZXMgPSAwOwkJCQkJCQlcCi0JLyogbXVzdCBhdCBsZWFzdCBjb252ZXJ0IGRlZ3JlZXMgKi8JCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQuJWQiLCAmZGVncmVlcywgJm1pbnV0ZXMpIDwgMSkgewkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpIAkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoc2Vydm8tPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwKQkJCQlcCi0JCXJldHZhbCA9IGNoYW5nZV9wb3NpdGlvbl92MzAoc2Vydm8sIHZhbHVlLCBkZWdyZWVzLCAJXAotCQkJCQkJCW1pbnV0ZXMpOwlcCi0JZWxzZSAJCQkJCQkJCVwKLQkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YyMChzZXJ2bywgdmFsdWUsIGRlZ3JlZXMsIAlcCi0JCQkJCQkJbWludXRlcyk7CVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IGNvdW50OwkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zZXJ2byMjdmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikgCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDJkXG4iLCBzZXJ2by0+ZGVncmVlc1t2YWx1ZV0sCQlcCi0JCQkJc2Vydm8tPm1pbnV0ZXNbdmFsdWVdKTsJCQlcCi19Ci0KLSNkZWZpbmUgc2Vydm9fYXR0cih2YWx1ZSkJCQkJCQlcCi0JX19BVFRSKHNlcnZvIyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJCVwKLQkJc2hvd19zZXJ2byMjdmFsdWUsIHNldF9zZXJ2byMjdmFsdWUpCi1zaG93X3NldCgwKTsKLXNob3dfc2V0KDEpOwotc2hvd19zZXQoMik7Ci1zaG93X3NldCgzKTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyc1tdID0gewotCXNlcnZvX2F0dHIoMCksIHNlcnZvX2F0dHIoMSksIHNlcnZvX2F0dHIoMiksIHNlcnZvX2F0dHIoMykKLX07Ci0KLXN0YXRpYyBpbnQKLXNlcnZvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKLQlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqZGV2OwotCWludCBiaXQsIHZhbHVlLCByYzsKLQlpbnQgc2Vydm9fY291bnQsIGk7Ci0KLQlkZXYgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IHBoaWRnZXRfc2Vydm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKLQlkZXYtPnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87Ci0JZGV2LT5kZXZfbm8gPSAtMTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZGV2aWNlX25vLCBzaXplb2YoZGV2aWNlX25vKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7Ci0gICAgICAgIH0gd2hpbGUgKHZhbHVlKTsKLQlkZXYtPmRldl9ubyA9IGJpdDsKLQotCWRldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAmZGV2LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAotCQkJCSBkZXYsICJzZXJ2byVkIiwgZGV2LT5kZXZfbm8pOwotCWlmIChJU19FUlIoZGV2LT5kZXYpKSB7Ci0JCXJjID0gUFRSX0VSUihkZXYtPmRldik7Ci0JCWRldi0+ZGV2ID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc2Vydm9fY291bnQgPSBkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEID8gNCA6IDE7Ci0KLQlmb3IgKGk9MDsgaTxzZXJ2b19jb3VudDsgaSsrKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldi0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQyOwotCX0KLQotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiAlZC1Nb3RvciBQaGlkZ2V0U2Vydm8gdiVkLjAgYXR0YWNoZWRcbiIsCi0JCXNlcnZvX2NvdW50LCBkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOwotCi0JaWYgKCEoZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCkpCi0JCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKLQkJCSAiV0FSTklORzogdjIuMCBub3QgdGVzdGVkISBQbGVhc2UgcmVwb3J0IGlmIGl0IHdvcmtzLlxuIik7Ci0KLQlyZXR1cm4gMDsKLW91dDI6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci1vdXQ6Ci0JaWYgKGRldikgewotCQlpZiAoZGV2LT5kZXYpCi0JCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYtPmRldik7Ci0JCWlmIChkZXYtPmRldl9ubyA+PSAwKQotCQkJY2xlYXJfYml0KGRldi0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCQlrZnJlZShkZXYpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQKLXNlcnZvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKLXsKLQlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqZGV2OwotCWludCBzZXJ2b19jb3VudCwgaTsKLQotCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuOwotCi0Jc2Vydm9fY291bnQgPSBkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEID8gNCA6IDE7Ci0KLQlmb3IgKGk9MDsgaTxzZXJ2b19jb3VudDsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cnNbaV0pOwotCi0JZGV2aWNlX3VucmVnaXN0ZXIoZGV2LT5kZXYpOwotCXVzYl9wdXRfZGV2KGRldi0+dWRldik7Ci0KLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgJWQtTW90b3IgUGhpZGdldFNlcnZvIHYlZC4wIGRldGFjaGVkXG4iLAotCQlzZXJ2b19jb3VudCwgZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCA/IDMgOiAyKTsKLQotCWNsZWFyX2JpdChkZXYtPmRldl9ubywgJmRldmljZV9ubyk7Ci0Ja2ZyZWUoZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlcnZvX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwaGlkZ2V0c2Vydm8iLAotCS5wcm9iZSA9IHNlcnZvX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gc2Vydm9fZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPSBpZF90YWJsZQotfTsKLQotc3RhdGljIGludCBfX2luaXQKLXBoaWRnZXRfc2Vydm9faW5pdCh2b2lkKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNlcnZvX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1waGlkZ2V0X3NlcnZvX2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3Rlcigmc2Vydm9fZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocGhpZGdldF9zZXJ2b19pbml0KTsKLW1vZHVsZV9leGl0KHBoaWRnZXRfc2Vydm9fZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggNGNmMjdjNy4uZjhkOTA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0zNywxMCArMzcsMTMgQEAKICNkZWZpbmUgTU9OX0lPQ1hfR0VUICAgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2Jpbl9nZXQpCiAjZGVmaW5lIE1PTl9JT0NYX01GRVRDSCBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX2Jpbl9tZmV0Y2gpCiAjZGVmaW5lIE1PTl9JT0NIX01GTFVTSCBfSU8oTU9OX0lPQ19NQUdJQywgOCkKKy8qICM5IHdhcyBNT05fSU9DVF9TRVRBUEkgKi8KKyNkZWZpbmUgTU9OX0lPQ1hfR0VUWCAgIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fYmluX2dldCkKIAogI2lmZGVmIENPTkZJR19DT01QQVQKICNkZWZpbmUgTU9OX0lPQ1hfR0VUMzIgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2Jpbl9nZXQzMikKICNkZWZpbmUgTU9OX0lPQ1hfTUZFVENIMzIgX0lPV1IoTU9OX0lPQ19NQUdJQywgNywgc3RydWN0IG1vbl9iaW5fbWZldGNoMzIpCisjZGVmaW5lIE1PTl9JT0NYX0dFVFgzMiAgIF9JT1coTU9OX0lPQ19NQUdJQywgMTAsIHN0cnVjdCBtb25fYmluX2dldDMyKQogI2VuZGlmCiAKIC8qCkBAIC05Miw3ICs5NSwyOSBAQAogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGxlbl91cmI7CS8qIExlbmd0aCBvZiBkYXRhIChzdWJtaXR0ZWQgb3IgYWN0dWFsKSAqLwogCXVuc2lnbmVkIGludCBsZW5fY2FwOwkvKiBEZWxpdmVyZWQgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCQlzdHJ1Y3QgaXNvX3JlYyB7CisJCQlpbnQgZXJyb3JfY291bnQ7CisJCQlpbnQgbnVtZGVzYzsKKwkJfSBpc287CisJfSBzOworCWludCBpbnRlcnZhbDsKKwlpbnQgc3RhcnRfZnJhbWU7CisJdW5zaWduZWQgaW50IHhmZXJfZmxhZ3M7CisJdW5zaWduZWQgaW50IG5kZXNjOwkvKiBBY3R1YWwgbnVtYmVyIG9mIElTTyBkZXNjcmlwdG9ycyAqLworfTsKKworLyoKKyAqIElTTyB2ZWN0b3IsIHBhY2tlZCBpbnRvIHRoZSBoZWFkIG9mIGRhdGEgc3RyZWFtLgorICogVGhpcyBoYXMgdG8gdGFrZSAxNiBieXRlcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW5kIG9mIGJ1ZmZlcgorICogd3JhcCBpcyBub3QgaGFwcGVuaW5nIGluIHRoZSBtaWRkbGUgb2YgYSBkZXNjcmlwdG9yLgorICovCitzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjIHsKKwlpbnQgICAgICAgICAgaXNvX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgaXNvX29mZjsKKwl1bnNpZ25lZCBpbnQgaXNvX2xlbjsKKwl1MzIgX3BhZDsKIH07CiAKIC8qIHBlciBmaWxlIHN0YXRpc3RpYyAqLwpAQCAtMTAyLDcgKzEyNyw3IEBACiB9OwogCiBzdHJ1Y3QgbW9uX2Jpbl9nZXQgewotCXN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkcjsJLyogT25seSA0OCBieXRlcywgbm90IDY0LiAqLworCXN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkcjsJLyogQ2FuIGJlIDQ4IGJ5dGVzIG9yIDY0LiAqLwogCXZvaWQgX191c2VyICpkYXRhOwogCXNpemVfdCBhbGxvYzsJCS8qIExlbmd0aCBvZiBkYXRhIChjYW4gYmUgemVybykgKi8KIH07CkBAIC0xMzEsNiArMTU2LDExIEBACiAjZGVmaW5lIFBLVF9BTElHTiAgIDY0CiAjZGVmaW5lIFBLVF9TSVpFICAgIDY0CiAKKyNkZWZpbmUgUEtUX1NaX0FQSTAgNDgJLyogQVBJIDAgKDIuNi4yMCkgc2l6ZSAqLworI2RlZmluZSBQS1RfU1pfQVBJMSA2NAkvKiBBUEkgMSBzaXplOiBleHRyYSBmaWVsZHMgKi8KKworI2RlZmluZSBJU09ERVNDX01BWCAgIDEyOAkvKiBTYW1lIG51bWJlciBhcyB1c2JmcyBhbGxvd3MsIDIwNDggYnl0ZXMuICovCisKIC8qIG1heCBudW1iZXIgb2YgVVNCIGJ1cyBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTU9OX0JJTl9NQVhfTUlOT1IgMTI4CiAKQEAgLTM2MCwxMiArMzkwLDggQEAKICAgICBjb25zdCBzdHJ1Y3QgdXJiICp1cmIsIGNoYXIgZXZfdHlwZSkKIHsKIAotCWlmICghdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmdXJiLT5lcC0+ZGVzYykgfHwgZXZfdHlwZSAhPSAnUycpCi0JCXJldHVybiAnLSc7Ci0KIAlpZiAodXJiLT5zZXR1cF9wYWNrZXQgPT0gTlVMTCkKIAkJcmV0dXJuICdaJzsKLQogCW1lbWNweShzZXR1cGIsIHVyYi0+c2V0dXBfcGFja2V0LCBTRVRVUF9MRU4pOwogCXJldHVybiAwOwogfQpAQCAtMzg3LDYgKzQxMywyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBtb25fYmluX2dldF9pc29kZXNjKGNvbnN0IHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCisgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IHVyYiAqdXJiLCBjaGFyIGV2X3R5cGUsIHVuc2lnbmVkIGludCBuZGVzYykKK3sKKwlzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjICpkcDsKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZnA7CisKKwlmcCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2M7CisJd2hpbGUgKG5kZXNjLS0gIT0gMCkgeworCQlkcCA9IChzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjICopCisJCSAgICAocnAtPmJfdmVjW29mZnNldCAvIENIVU5LX1NJWkVdLnB0ciArIG9mZnNldCAlIENIVU5LX1NJWkUpOworCQlkcC0+aXNvX3N0YXR1cyA9IGZwLT5zdGF0dXM7CisJCWRwLT5pc29fb2ZmID0gZnAtPm9mZnNldDsKKwkJZHAtPmlzb19sZW4gPSAoZXZfdHlwZSA9PSAnUycpID8gZnAtPmxlbmd0aCA6IGZwLT5hY3R1YWxfbGVuZ3RoOworCQlkcC0+X3BhZCA9IDA7CisJCWlmICgob2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjKSkgPj0gcnAtPmJfc2l6ZSkKKwkJCW9mZnNldCA9IDA7CisJCWZwKys7CisJfQorfQorCiBzdGF0aWMgdm9pZCBtb25fYmluX2V2ZW50KHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsIHN0cnVjdCB1cmIgKnVyYiwKICAgICBjaGFyIGV2X3R5cGUsIGludCBzdGF0dXMpCiB7CkBAIC0zOTYsNiArNDQyLDcgQEAKIAl1bnNpZ25lZCBpbnQgdXJiX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IG5kZXNjLCBsZW5kZXNjOwogCXVuc2lnbmVkIGNoYXIgZGlyOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CiAJY2hhciBkYXRhX3RhZyA9IDA7CkBAIC00MDcsNiArNDU0LDE5IEBACiAJLyoKIAkgKiBGaW5kIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBsZW5ndGgsIHRoZW4gYWxsb2NhdGUgc3BhY2UuCiAJICovCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSkgeworCQlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8IDApIHsKKwkJCW5kZXNjID0gMDsKKwkJfSBlbHNlIGlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID49IElTT0RFU0NfTUFYKSB7CisJCQluZGVzYyA9IElTT0RFU0NfTUFYOworCQl9IGVsc2UgeworCQkJbmRlc2MgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQl9CisJfSBlbHNlIHsKKwkJbmRlc2MgPSAwOworCX0KKwlsZW5kZXNjID0gbmRlc2Mqc2l6ZW9mKHN0cnVjdCBtb25fYmluX2lzb2Rlc2MpOworCiAJdXJiX2xlbmd0aCA9IChldl90eXBlID09ICdTJykgPwogCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggOiB1cmItPmFjdHVhbF9sZW5ndGg7CiAJbGVuZ3RoID0gdXJiX2xlbmd0aDsKQEAgLTQyOSwxMCArNDg5LDEyIEBACiAJCWRpciA9IDA7CiAJfQogCi0JaWYgKHJwLT5tbWFwX2FjdGl2ZSkKLQkJb2Zmc2V0ID0gbW9uX2J1ZmZfYXJlYV9hbGxvY19jb250aWd1b3VzKHJwLCBsZW5ndGggKyBQS1RfU0laRSk7Ci0JZWxzZQotCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jKHJwLCBsZW5ndGggKyBQS1RfU0laRSk7CisJaWYgKHJwLT5tbWFwX2FjdGl2ZSkgeworCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jX2NvbnRpZ3VvdXMocnAsCisJCQkJCQkgbGVuZ3RoICsgUEtUX1NJWkUgKyBsZW5kZXNjKTsKKwl9IGVsc2UgeworCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jKHJwLCBsZW5ndGggKyBQS1RfU0laRSArIGxlbmRlc2MpOworCX0KIAlpZiAob2Zmc2V0ID09IH4wKSB7CiAJCXJwLT5jbnRfbG9zdCsrOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycC0+Yl9sb2NrLCBmbGFncyk7CkBAIC00NTYsOSArNTE4LDMxIEBACiAJZXAtPnRzX3VzZWMgPSB0cy50dl91c2VjOwogCWVwLT5zdGF0dXMgPSBzdGF0dXM7CiAJZXAtPmxlbl91cmIgPSB1cmJfbGVuZ3RoOwotCWVwLT5sZW5fY2FwID0gbGVuZ3RoOworCWVwLT5sZW5fY2FwID0gbGVuZ3RoICsgbGVuZGVzYzsKKwllcC0+eGZlcl9mbGFncyA9IHVyYi0+dHJhbnNmZXJfZmxhZ3M7CiAKLQllcC0+ZmxhZ19zZXR1cCA9IG1vbl9iaW5fZ2V0X3NldHVwKGVwLT5zZXR1cCwgdXJiLCBldl90eXBlKTsKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkpIHsKKwkJZXAtPmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwl9IGVsc2UgaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSkgeworCQllcC0+aW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCQllcC0+c3RhcnRfZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOworCQllcC0+cy5pc28uZXJyb3JfY291bnQgPSB1cmItPmVycm9yX2NvdW50OworCQllcC0+cy5pc28ubnVtZGVzYyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJfQorCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woZXBkKSAmJiBldl90eXBlID09ICdTJykgeworCQllcC0+ZmxhZ19zZXR1cCA9IG1vbl9iaW5fZ2V0X3NldHVwKGVwLT5zLnNldHVwLCB1cmIsIGV2X3R5cGUpOworCX0gZWxzZSB7CisJCWVwLT5mbGFnX3NldHVwID0gJy0nOworCX0KKworCWlmIChuZGVzYyAhPSAwKSB7CisJCWVwLT5uZGVzYyA9IG5kZXNjOworCQltb25fYmluX2dldF9pc29kZXNjKHJwLCBvZmZzZXQsIHVyYiwgZXZfdHlwZSwgbmRlc2MpOworCQlpZiAoKG9mZnNldCArPSBsZW5kZXNjKSA+PSBycC0+Yl9zaXplKQorCQkJb2Zmc2V0IC09IHJwLT5iX3NpemU7CisJfQorCiAJaWYgKGxlbmd0aCAhPSAwKSB7CiAJCWVwLT5mbGFnX2RhdGEgPSBtb25fYmluX2dldF9kYXRhKHJwLCBvZmZzZXQsIHVyYiwgbGVuZ3RoKTsKIAkJaWYgKGVwLT5mbGFnX2RhdGEgIT0gMCkgewkvKiBZZXMsIGl0J3MgMHgwMCwgbm90ICcwJyAqLwpAQCAtNTkyLDcgKzY3Niw4IEBACiAgKiBSZXR1cm5zIHplcm8gb3IgZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQgbW9uX2Jpbl9nZXRfZXZlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsCi0gICAgc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyLCB2b2lkIF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKKyAgICBzdHJ1Y3QgbW9uX2Jpbl9oZHIgX191c2VyICpoZHIsIHVuc2lnbmVkIGludCBoZHJieXRlcywKKyAgICB2b2lkIF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CkBAIC02MDksNyArNjk0LDcgQEAKIAogCWVwID0gTU9OX09GRjJIRFIocnAsIHJwLT5iX291dCk7CiAKLQlpZiAoY29weV90b191c2VyKGhkciwgZXAsIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpKSkgeworCWlmIChjb3B5X3RvX3VzZXIoaGRyLCBlcCwgaGRyYnl0ZXMpKSB7CiAJCW11dGV4X3VubG9jaygmcnAtPmZldGNoX2xvY2spOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC02NTcsNiArNzQyLDcgQEAKICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaGRyYnl0ZXMgPSBQS1RfU1pfQVBJMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKQEAgLTY3NCw4ICs3NjAsOCBAQAogCiAJZXAgPSBNT05fT0ZGMkhEUihycCwgcnAtPmJfb3V0KTsKIAotCWlmIChycC0+Yl9yZWFkIDwgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpIHsKLQkJc3RlcF9sZW4gPSBtaW4obmJ5dGVzLCBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSAtIHJwLT5iX3JlYWQpOworCWlmIChycC0+Yl9yZWFkIDwgaGRyYnl0ZXMpIHsKKwkJc3RlcF9sZW4gPSBtaW4obmJ5dGVzLCAoc2l6ZV90KShoZHJieXRlcyAtIHJwLT5iX3JlYWQpKTsKIAkJcHRyID0gKChjaGFyICopZXApICsgcnAtPmJfcmVhZDsKIAkJaWYgKHN0ZXBfbGVuICYmIGNvcHlfdG9fdXNlcihidWYsIHB0ciwgc3RlcF9sZW4pKSB7CiAJCQltdXRleF91bmxvY2soJnJwLT5mZXRjaF9sb2NrKTsKQEAgLTY4NywxMyArNzczLDEzIEBACiAJCWRvbmUgKz0gc3RlcF9sZW47CiAJfQogCi0JaWYgKHJwLT5iX3JlYWQgPj0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpIHsKKwlpZiAocnAtPmJfcmVhZCA+PSBoZHJieXRlcykgewogCQlzdGVwX2xlbiA9IGVwLT5sZW5fY2FwOwotCQlzdGVwX2xlbiAtPSBycC0+Yl9yZWFkIC0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcik7CisJCXN0ZXBfbGVuIC09IHJwLT5iX3JlYWQgLSBoZHJieXRlczsKIAkJaWYgKHN0ZXBfbGVuID4gbmJ5dGVzKQogCQkJc3RlcF9sZW4gPSBuYnl0ZXM7CiAJCW9mZnNldCA9IHJwLT5iX291dCArIFBLVF9TSVpFOwotCQlvZmZzZXQgKz0gcnAtPmJfcmVhZCAtIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpOworCQlvZmZzZXQgKz0gcnAtPmJfcmVhZCAtIGhkcmJ5dGVzOwogCQlpZiAob2Zmc2V0ID49IHJwLT5iX3NpemUpCiAJCQlvZmZzZXQgLT0gcnAtPmJfc2l6ZTsKIAkJaWYgKGNvcHlfZnJvbV9idWYocnAsIG9mZnNldCwgYnVmLCBzdGVwX2xlbikpIHsKQEAgLTcwOSw3ICs3OTUsNyBAQAogCS8qCiAJICogQ2hlY2sgaWYgd2hvbGUgcGFja2V0IHdhcyByZWFkLCBhbmQgaWYgc28sIGp1bXAgdG8gdGhlIG5leHQgb25lLgogCSAqLwotCWlmIChycC0+Yl9yZWFkID49IHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpICsgZXAtPmxlbl9jYXApIHsKKwlpZiAocnAtPmJfcmVhZCA+PSBoZHJieXRlcyArIGVwLT5sZW5fY2FwKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZycC0+Yl9sb2NrLCBmbGFncyk7CiAJCW1vbl9idWZmX2FyZWFfZnJlZShycCwgUEtUX1NJWkUgKyBlcC0+bGVuX2NhcCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKQEAgLTkwOCw2ICs5OTQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTU9OX0lPQ1hfR0VUOgorCWNhc2UgTU9OX0lPQ1hfR0VUWDoKIAkJewogCQlzdHJ1Y3QgbW9uX2Jpbl9nZXQgZ2V0YjsKIApAQCAtOTE3LDggKzEwMDQsOSBAQAogCiAJCWlmIChnZXRiLmFsbG9jID4gMHgxMDAwMDAwMCkJLyogV2FudCB0byBjYXN0IHRvIHUzMiAqLwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLAotCQkJICBnZXRiLmhkciwgZ2V0Yi5kYXRhLCAodW5zaWduZWQgaW50KWdldGIuYWxsb2MpOworCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwgZ2V0Yi5oZHIsCisJCSAgICAoY21kID09IE1PTl9JT0NYX0dFVCk/IFBLVF9TWl9BUEkwOiBQS1RfU1pfQVBJMSwKKwkJICAgIGdldGIuZGF0YSwgKHVuc2lnbmVkIGludClnZXRiLmFsbG9jKTsKIAkJfQogCQlicmVhazsKIApAQCAtOTg0LDE2ICsxMDcyLDE4IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCi0JY2FzZSBNT05fSU9DWF9HRVQzMjogeworCWNhc2UgTU9OX0lPQ1hfR0VUMzI6CisJY2FzZSBNT05fSU9DWF9HRVRYMzI6CisJCXsKIAkJc3RydWN0IG1vbl9iaW5fZ2V0MzIgZ2V0YjsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmdldGIsICh2b2lkIF9fdXNlciAqKWFyZywKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9nZXQzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsCi0JCSAgICBjb21wYXRfcHRyKGdldGIuaGRyMzIpLCBjb21wYXRfcHRyKGdldGIuZGF0YTMyKSwKLQkJICAgIGdldGIuYWxsb2MzMik7CisJCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLCBjb21wYXRfcHRyKGdldGIuaGRyMzIpLAorCQkgICAgKGNtZCA9PSBNT05fSU9DWF9HRVQzMik/IFBLVF9TWl9BUEkwOiBQS1RfU1pfQVBJMSwKKwkJICAgIGNvbXBhdF9wdHIoZ2V0Yi5kYXRhMzIpLCBnZXRiLmFsbG9jMzIpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA5OTg1ZGIwLi5iNjZlODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0yMCw4ICsyMCw4IEBACiAJICBpdCdzIGJlaW5nIHVzZWQgd2l0aCwgaW5jbHVkaW5nIHRoZSBVU0IgcGVyaXBoZXJhbCByb2xlLAogCSAgb3IgdGhlIFVTQiBob3N0IHJvbGUsIG9yIGJvdGguCiAKLQkgIFRleGFzIEluc3RydW1lbnRzIHBhcnRzIHVzaW5nIHRoaXMgSVAgaW5jbHVkZSBEYVZpbmNpIDY0NHgsCi0JICBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KKwkgIFRleGFzIEluc3RydW1lbnRzIGZhbWlsaWllcyB1c2luZyB0aGlzIElQIGluY2x1ZGUgRGFWaW5jaQorCSAgKDM1eCwgNjQ0eCAuLi4pLCBPTUFQIDI0M3gsIE9NQVAgMywgYW5kIFRVU0IgNjAxMC4KIAogCSAgQW5hbG9nIERldmljZXMgcGFydHMgdXNpbmcgdGhpcyBJUCBpbmNsdWRlIEJsYWNrZmluIEJGNTR4LAogCSAgQkY1MjUgYW5kIEJGNTI3LgpAQCAtNDAsNyArNDAsNyBAQAogCWRlZmF1bHQgeSBpZiAoQkY1NHggJiYgIUJGNTQ0KQogCWRlZmF1bHQgeSBpZiAoQkY1MnggJiYgIUJGNTIyICYmICFCRjUyMykKIAotY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgorY29tbWVudCAiRGFWaW5jaSAzNXggYW5kIDY0NHggVVNCIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIEFSQ0hfREFWSU5DSQogCiBjb21tZW50ICJPTUFQIDI0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggMmRjNzYwNi4uMTBkMTFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTQ4LDYgKzQ4LDkgQEAKICNpbmNsdWRlICJjcHBpX2RtYS5oIgogCiAKKyNkZWZpbmUgVVNCX1BIWV9DVFJMCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikKKyNkZWZpbmUgRE0zNTVfREVFUFNMRUVQCUlPX0FERFJFU1MoRE0zNTVfREVFUFNMRUVQX1BBRERSKQorCiAvKiBSRVZJU0lUIChQTSkgd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2VlcCB0aGUgUEhZIGluIGxvdyBwb3dlciBtb2RlIG1vc3QKICAqIG9mIHRoZSB0aW1lICgyNCBNSFogb3NjaWxsYXRvciBhbmQgUExMIG9mZiwgZXRjKSBieSBzZXR0aW5nIFBPV0VSLkQwCiAgKiBhbmQsIHdoZW4gaW4gaG9zdCBtb2RlLCBhdXRvc3VzcGVuZGluZyBpZGxlIHJvb3QgcG9ydHMuLi4gUEhZUExMT04KQEAgLTU2LDIwICs1OSwyNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29uKHZvaWQpCiB7Ci0JLyogc3RhcnQgdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgUExMICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9TRVNOREVOIHwgVVNCUEhZX1ZCRFRDVEVOIHwgVVNCUEhZX1BIWVBMTE9OLAotCQkJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopIElPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpOwotCXdoaWxlICgoX19yYXdfcmVhZGwoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSkKLQkJCSYgVVNCUEhZX1BIWUNMS0dEKSA9PSAwKQorCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkvKiBwb3dlciBldmVyeXRoaW5nIHVwOyBzdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwgKi8KKwlwaHlfY3RybCAmPSB+KFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX09UR1BEV04gfCBVU0JQSFlfUEhZUERXTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX1NFU05ERU4gfCBVU0JQSFlfVkJEVENURU4gfCBVU0JQSFlfUEhZUExMT047CisJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCisJLyogd2FpdCBmb3IgUExMIHRvIGxvY2sgYmVmb3JlIHByb2NlZWRpbmcgKi8KKwl3aGlsZSAoKF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCkgJiBVU0JQSFlfUEhZQ0xLR0QpID09IDApCiAJCWNwdV9yZWxheCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X29mZih2b2lkKQogewotCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBvc2NpbGxhdG9yICovCi0JX19yYXdfd3JpdGVsKFVTQlBIWV9PU0NQRFdOIHwgVVNCUEhZX1BIWVBEV04sICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQotCQkJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSk7CisJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCS8qIHBvd2VyZG93biB0aGUgb24tY2hpcCBQSFksIGl0cyBQTEwsIGFuZCB0aGUgT1RHIGJsb2NrICovCisJcGh5X2N0cmwgJj0gfihVU0JQSFlfU0VTTkRFTiB8IFVTQlBIWV9WQkRUQ1RFTiB8IFVTQlBIWV9QSFlQTExPTik7CisJcGh5X2N0cmwgfD0gVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfT1RHUERXTiB8IFVTQlBIWV9QSFlQRFdOOworCV9fcmF3X3dyaXRlbChwaHlfY3RybCwgVVNCX1BIWV9DVFJMKTsKIH0KIAogc3RhdGljIGludCBkbWFfb2ZmID0gMTsKQEAgLTEyNiwxMCArMTM1LDYgQEAKIH0KIAogCi0vKiBSRVZJU0lUIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgRGFWaW5jaSBjYW4gc3VwcG9ydCBmdWxsIE9URy4gICovCi0KLXN0YXRpYyBpbnQgdmJ1c19zdGF0ZSA9IC0xOwotCiAjaWZkZWYgQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECiAjZGVmaW5lCXBvcnRzdGF0ZShzdG10KQkJc3RtdAogI2Vsc2UKQEAgLTEzNywxMCArMTQyLDE5IEBACiAjZW5kaWYKIAogCi0vKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAqLworLyoKKyAqIFZCVVMgU1dJVENISU5HIElTIEJPQVJELVNQRUNJRklDIC4uLiBhdCBsZWFzdCBmb3IgdGhlIERNNjQ0NiBFVk0sCisgKiB3aGljaCBkb2Vzbid0IHdpcmUgRFJWVkJVUyB0byB0aGUgRkVUIHRoYXQgc3dpdGNoZXMgaXQuICBVbmNsZWFyCisgKiBpZiB0aGF0J3MgYSBwcm9ibGVtIHdpdGggdGhlIERNNjQ0NiBjaGlwIG9yIGp1c3Qgd2l0aCB0aGF0IGJvYXJkLgorICoKKyAqIEluIGVpdGhlciBjYXNlLCB0aGUgRE0zNTUgRVZNIGF1dG9tYXRlcyBEUlZWQlVTIHRoZSBub3JtYWwgd2F5LAorICogd2hlbiBKMTAgaXMgb3V0LCBhbmQgVEkgZG9jdW1lbnRzIGl0IGFzIGhhbmRsaW5nIE9URy4KKyAqLwogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAorc3RhdGljIGludCB2YnVzX3N0YXRlID0gLTE7CisKIC8qIEkyQyBvcGVyYXRpb25zIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGFuZCByZXF1aXJlIGEgdGFzayBjb250ZXh0LgogICogV2l0aCB1bmxvYWRlZCBzeXN0ZW1zLCB1c2luZyB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBzZWVtcyB0byBzdWZmaWNlCiAgKiB0byBzYXRpc2Z5IHRoZSAxMDBtc2VjIEFfV0FJVF9WUklTRSB0aW1lb3V0Li4uCkBAIC0xNTAsMTIgKzE2NCwxMiBAQAogCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAl2YnVzX3N0YXRlID0gIXZidXNfc3RhdGU7CiB9Ci1zdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKIAogI2VuZGlmCS8qIEVWTSAqLwogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NvdXJjZV9wb3dlcihzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uLCBpbnQgaW1tZWRpYXRlKQogeworI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAJaWYgKGlzX29uKQogCQlpc19vbiA9IDE7CiAKQEAgLTE2MywxNiArMTc3LDE3IEBACiAJCXJldHVybjsKIAl2YnVzX3N0YXRlID0gIWlzX29uOwkJLyogMC8xIHZzICItMSA9PSB1bmtub3duL2luaXQiICovCiAKLSNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZXZtKCkpIHsKKwkJc3RhdGljIERFQ0xBUkVfV09SSyhldm1fdmJ1c193b3JrLCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyk7CisKIAkJaWYgKGltbWVkaWF0ZSkKIAkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmZXZtX3ZidXNfd29yayk7CiAJfQotI2VuZGlmCiAJaWYgKGltbWVkaWF0ZSkKIAkJdmJ1c19zdGF0ZSA9IGlzX29uOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc2V0X3ZidXMoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbikKQEAgLTM5MSw2ICs0MDYsMTcgQEAKIAltdXNiLT5ib2FyZF9zZXRfdmJ1cyA9IGRhdmluY2lfc2V0X3ZidXM7CiAJZGF2aW5jaV9zb3VyY2VfcG93ZXIobXVzYiwgMCwgMSk7CiAKKwkvKiBkbTM1NSBFVk0gc3dhcHMgRCsvRC0gZm9yIHNpZ25hbCBpbnRlZ3JpdHksIGFuZAorCSAqIGlzIGNsb2NrZWQgZnJvbSB0aGUgbWFpbiAyNCBNSHogY3J5c3RhbC4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19kYXZpbmNpX2RtMzU1X2V2bSgpKSB7CisJCXUzMglwaHlfY3RybCA9IF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCk7CisKKwkJcGh5X2N0cmwgJj0gfigzIDw8IDkpOworCQlwaHlfY3RybCB8PSBVU0JQSFlfREFUQVBPTDsKKwkJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOworCX0KKwogCS8qIHJlc2V0IHRoZSBjb250cm9sbGVyICovCiAJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRywgMHgxKTsKIApAQCAtNDAxLDggKzQyNyw3IEBACiAKIAkvKiBOT1RFOiAgaXJxcyBhcmUgaW4gbWl4ZWQgbW9kZSwgbm90IGJ5cGFzcyB0byBwdXJlLW11c2IgKi8KIAlwcl9kZWJ1ZygiRGFWaW5jaSBPVEcgcmV2aXNpb24gJTA4eCBwaHkgJTAzeCBjb250cm9sICUwMnhcbiIsCi0JCXJldmlzaW9uLCBfX3Jhd19yZWFkbCgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKSwKKwkJcmV2aXNpb24sIF9fcmF3X3JlYWRsKFVTQl9QSFlfQ1RSTCksCiAJCW11c2JfcmVhZGIodGliYXNlLCBEQVZJTkNJX1VTQl9DVFJMX1JFRykpOwogCiAJbXVzYi0+aXNyID0gZGF2aW5jaV9pbnRlcnJ1cHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuaCBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCmluZGV4IDdmYjYyMzguLjA0NmM4NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oCkBAIC0xNSwxNCArMTUsMjEgQEAKICAqLwogCiAvKiBJbnRlZ3JhdGVkIGhpZ2hzcGVlZC9vdGcgUEhZICovCi0jZGVmaW5lCVVTQlBIWV9DVExfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHgzNCkKLSNkZWZpbmUJVVNCUEhZX1BIWUNMS0dECQkoMSA8PCA4KQotI2RlZmluZQlVU0JQSFlfU0VTTkRFTgkJKDEgPDwgNykJLyogdihzZXNzX2VuZCkgY29tcGFyYXRvciAqLwotI2RlZmluZQlVU0JQSFlfVkJEVENURU4JCSgxIDw8IDYpCS8qIHYoYnVzKSBjb21wYXJhdG9yICovCi0jZGVmaW5lCVVTQlBIWV9QSFlQTExPTgkJKDEgPDwgNCkJLyogb3ZlcnJpZGUgcGxsIHN1c3BlbmQgKi8KLSNkZWZpbmUJVVNCUEhZX0NMS08xU0VMCQkoMSA8PCAzKQotI2RlZmluZQlVU0JQSFlfT1NDUERXTgkJKDEgPDwgMikKLSNkZWZpbmUJVVNCUEhZX1BIWVBEV04JCSgxIDw8IDApCisjZGVmaW5lIFVTQlBIWV9DVExfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHgzNCkKKyNkZWZpbmUgVVNCUEhZX0RBVEFQT0wJCUJJVCgxMSkJLyogKGRtMzU1KSBzd2l0Y2ggRCsvRC0gKi8KKyNkZWZpbmUgVVNCUEhZX1BIWUNMS0dECQlCSVQoOCkKKyNkZWZpbmUgVVNCUEhZX1NFU05ERU4JCUJJVCg3KQkvKiB2KHNlc3NfZW5kKSBjb21wYXJhdG9yICovCisjZGVmaW5lIFVTQlBIWV9WQkRUQ1RFTgkJQklUKDYpCS8qIHYoYnVzKSBjb21wYXJhdG9yICovCisjZGVmaW5lIFVTQlBIWV9WQlVTU0VOUwkJQklUKDUpCS8qIChkbTM1NSxybykgaXMgdmJ1cyA+IDAuNVYgKi8KKyNkZWZpbmUgVVNCUEhZX1BIWVBMTE9OCQlCSVQoNCkJLyogb3ZlcnJpZGUgcGxsIHN1c3BlbmQgKi8KKyNkZWZpbmUgVVNCUEhZX0NMS08xU0VMCQlCSVQoMykKKyNkZWZpbmUgVVNCUEhZX09TQ1BEV04JCUJJVCgyKQorI2RlZmluZSBVU0JQSFlfT1RHUERXTgkJQklUKDEpCisjZGVmaW5lIFVTQlBIWV9QSFlQRFdOCQlCSVQoMCkKKworI2RlZmluZSBETTM1NV9ERUVQU0xFRVBfUEFERFIJKERBVklOQ0lfU1lTVEVNX01PRFVMRV9CQVNFICsgMHg0OCkKKyNkZWZpbmUgRFJWVkJVU19GT1JDRQkJQklUKDIpCisjZGVmaW5lIERSVlZCVVNfT1ZFUlJJREUJQklUKDEpCiAKIC8qIEZvciBub3cgaW5jbHVkZSB1c2IgT1RHIG1vZHVsZSByZWdpc3RlcnMgaGVyZSAqLwogI2RlZmluZSBEQVZJTkNJX1VTQl9WRVJTSU9OX1JFRwkJMHgwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYWY3N2U0Ni4uMzM4Y2QxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC03NjksNyArNzY5LDcgQEAKIAkJY2FzZSBPVEdfU1RBVEVfQV9TVVNQRU5EOgogCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIobXVzYl90b19oY2QobXVzYikpOwogCQkJbXVzYl9yb290X2Rpc2Nvbm5lY3QobXVzYik7Ci0JCQlpZiAobXVzYi0+YV93YWl0X2Jjb24gIT0gMCkKKwkJCWlmIChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwICYmIGlzX290Z19lbmFibGVkKG11c2IpKQogCQkJCW11c2JfcGxhdGZvcm1fdHJ5X2lkbGUobXVzYiwgamlmZmllcwogCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMobXVzYi0+YV93YWl0X2Jjb24pKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggNjMwOTQ2YS4uZWZiMzliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC0zMzEsNyArMzMxLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWNvbnRyb2w7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWluX2J1bGs7CS8qIG9mIG11c2JfcWggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCW91dF9idWxrOwkvKiBvZiBtdXNiX3FoICovCi0Jc3RydWN0IG11c2JfcWgJCSpwZXJpb2RpY1szMl07CS8qIHRyZWUgb2YgaW50ZXJydXB0K2lzbyAqLwogI2VuZGlmCiAKIAkvKiBjYWxsZWQgd2l0aCBJUlFzIGJsb2NrZWQ7IE9OL25vbnplcm8gaW1wbGllcyBzdGFydGluZyBhIHNlc3Npb24sCkBAIC00NzksMTAgKzQ3OCwxMSBAQAogc3RhdGljIGlubGluZSBpbnQgbXVzYl9yZWFkX2ZpZm9zaXplKHN0cnVjdCBtdXNiICptdXNiLAogCQlzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHU4IGVwbnVtKQogeworCXZvaWQgKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJdTggcmVnID0gMDsKIAogCS8qIHJlYWQgZnJvbSBjb3JlIHVzaW5nIGluZGV4ZWQgbW9kZWwgKi8KLQlyZWcgPSBtdXNiX3JlYWRiKGh3X2VwLT5yZWdzLCAweDEwICsgTVVTQl9GSUZPU0laRSk7CisJcmVnID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9FUF9PRkZTRVQoZXBudW0sIE1VU0JfRklGT1NJWkUpKTsKIAkvKiAwJ3MgcmV0dXJuZWQgd2hlbiBubyBtb3JlIGVuZHBvaW50cyAqLwogCWlmICghcmVnKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTUwOSw2ICs1MDksNyBAQAogewogCW11c2ItPmVuZHBvaW50c1swXS5tYXhfcGFja2V0X3N6X3R4ID0gTVVTQl9FUDBfRklGT1NJWkU7CiAJbXVzYi0+ZW5kcG9pbnRzWzBdLm1heF9wYWNrZXRfc3pfcnggPSBNVVNCX0VQMF9GSUZPU0laRTsKKwltdXNiLT5lbmRwb2ludHNbMF0uaXNfc2hhcmVkX2ZpZm8gPSB0cnVlOwogfQogI2VuZGlmIC8qIENPTkZJR19CTEFDS0ZJTiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwppbmRleCA2ZGJiZDA3Li40OTljNDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTY0LDExICs2NCw4IEBACiAgKgogICogLSBETUEgKE1lbnRvci9PTUFQKSAuLi5oYXMgYXQgbGVhc3QgdG9nZ2xlIHVwZGF0ZSBwcm9ibGVtcwogICoKLSAqIC0gU3RpbGwgbm8gdHJhZmZpYyBzY2hlZHVsaW5nIGNvZGUgdG8gbWFrZSBOQUtpbmcgZm9yIGJ1bGsgb3IgY29udHJvbAotICogICB0cmFuc2ZlcnMgdW5hYmxlIHRvIHN0YXJ2ZSBvdGhlciByZXF1ZXN0czsgb3IgdG8gbWFrZSBlZmZpY2llbnQgdXNlCi0gKiAgIG9mIGhhcmR3YXJlIHdpdGggcGVyaW9kaWMgdHJhbnNmZXJzLiAgKE5vdGUgdGhhdCBuZXR3b3JrIGRyaXZlcnMKLSAqICAgY29tbW9ubHkgcG9zdCBidWxrIHJlYWRzIHRoYXQgc3RheSBwZW5kaW5nIGZvciBhIGxvbmcgdGltZTsgdGhlc2UKLSAqICAgd291bGQgbWFrZSB2ZXJ5IHZpc2libGUgdHJvdWJsZS4pCisgKiAtIFsyMy1mZWItMjAwOV0gbWluaW1hbCB0cmFmZmljIHNjaGVkdWxpbmcgdG8gYXZvaWQgYnVsayBSWCBwYWNrZXQKKyAqICAgc3RhcnZhdGlvbiAuLi4gbm90aGluZyB5ZXQgZm9yIFRYLCBpbnRlcnJ1cHQsIG9yIGJ1bGsuCiAgKgogICogLSBOb3QgdGVzdGVkIHdpdGggSE5QLCBidXQgc29tZSBTUlAgcGF0aHMgc2VlbSB0byBiZWhhdmUuCiAgKgpAQCAtODgsMTEgKzg1LDggQEAKICAqCiAgKiBDT05UUk9MIHRyYW5zZmVycyBhbGwgZ28gdGhyb3VnaCBlcDAuICBCVUxLIG9uZXMgZ28gdGhyb3VnaCBkZWRpY2F0ZWQgSU4KICAqIGFuZCBPVVQgZW5kcG9pbnRzIC4uLiBoYXJkd2FyZSBpcyBkZWRpY2F0ZWQgZm9yIHRob3NlICJhc3luYyIgcXVldWUocykuCi0gKgogICogKFllcywgYnVsayBfY291bGRfIHVzZSBtb3JlIG9mIHRoZSBlbmRwb2ludHMgdGhhbiB0aGF0LCBhbmQgd291bGQgZXZlbgotICogYmVuZWZpdCBmcm9tIGl0IC4uLiBvbmUgcmVtb3RlIGRldmljZSBtYXkgZWFzaWx5IGJlIE5BS2luZyB3aGlsZSBvdGhlcnMKLSAqIG5lZWQgdG8gcGVyZm9ybSB0cmFuc2ZlcnMgaW4gdGhhdCBzYW1lIGRpcmVjdGlvbi4gIFRoZSBzYW1lIHRoaW5nIGNvdWxkCi0gKiBiZSBkb25lIGluIHNvZnR3YXJlIHRob3VnaCwgYXNzdW1pbmcgZG1hIGNvb3BlcmF0ZXMuKQorICogYmVuZWZpdCBmcm9tIGl0LikKICAqCiAgKiBJTlRFUlVQUFQgYW5kIElTT0NIUk9OT1VTIHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkIHRvIHRoZSBvdGhlciBlbmRwb2ludHMuCiAgKiBTbyBmYXIgdGhhdCBzY2hlZHVsaW5nIGlzIGJvdGggZHVtYiBhbmQgb3B0aW1pc3RpYzogIHRoZSBlbmRwb2ludCB3aWxsIGJlCkBAIC0yMDEsOCArMTk1LDkgQEAKIAkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkvKiBidWxrLCBpbnRlcnJ1cHQgKi8KLQkJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJLyogYWN0dWFsX2xlbmd0aCBtYXkgYmUgbm9uemVybyBvbiByZXRyeSBwYXRocyAqLworCQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCX0KIAogCURCRyg0LCAicWggJXAgdXJiICVwIGRldiVkIGVwJWQlcyVzLCBod19lcCAlZCwgJXAvJWRcbiIsCkBAIC0zOTUsNyArMzkwLDYgQEAKIAkJCSAqIGRlLWFsbG9jYXRlZCBpZiBpdCdzIHRyYWNrZWQgYW5kIGFsbG9jYXRlZDsKIAkJCSAqIGFuZCB3aGVyZSB3ZSdkIHVwZGF0ZSB0aGUgc2NoZWR1bGUgdHJlZS4uLgogCQkJICovCi0JCQltdXNiLT5wZXJpb2RpY1tlcC0+ZXBudW1dID0gTlVMTDsKIAkJCWtmcmVlKHFoKTsKIAkJCXFoID0gTlVMTDsKIAkJCWJyZWFrOwpAQCAtMTA0NSw3ICsxMDM5LDggQEAKIAogCQkvKiBOT1RFOiAgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKIAkJICogY29udHJvbCB0cmFuc2ZlciwgaWYgYW5vdGhlciBvbmUgaXMgcXVldWVkLCBzbyB0aGF0Ci0JCSAqIGVwMCBpcyBtb3JlIGxpa2VseSB0byBzdGF5IGJ1c3kuCisJCSAqIGVwMCBpcyBtb3JlIGxpa2VseSB0byBzdGF5IGJ1c3kuICBUaGF0J3MgYWxyZWFkeSBkb25lCisJCSAqIGZvciBidWxrIFJYIHRyYW5zZmVycy4KIAkJICoKIAkJICogaWYgKHFoLT5yaW5nLm5leHQgIT0gJm11c2ItPmNvbnRyb2wpLCB0aGVuCiAJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCkBAIC0xMTk3LDYgKzExOTIsNyBAQAogCQkvKiBOT1RFOiAgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKIAkJICogdHJhbnNmZXIsIGlmIHRoZXJlJ3Mgc29tZSBvdGhlciAobm9ucGVyaW9kaWMpIHR4IHVyYgogCQkgKiB0aGF0IGNvdWxkIHVzZSB0aGlzIGZpZm8uICAoZG1hIGNvbXBsaWNhdGVzIGl0Li4uKQorCQkgKiBUaGF0J3MgYWxyZWFkeSBkb25lIGZvciBidWxrIFJYIHRyYW5zZmVycy4KIAkJICoKIAkJICogaWYgKGJ1bGsgJiYgcWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+b3V0X2J1bGspLCB0aGVuCiAJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCkBAIC0xMzU4LDYgKzEzNTQsNTAgQEAKIAogI2VuZGlmCiAKKy8qIFNjaGVkdWxlIG5leHQgUUggZnJvbSBtdXNiLT5pbl9idWxrIGFuZCBtb3ZlIHRoZSBjdXJyZW50IHFoIHRvCisgKiB0aGUgZW5kOyBhdm9pZHMgc3RhcnZhdGlvbiBmb3Igb3RoZXIgZW5kcG9pbnRzLgorICovCitzdGF0aWMgdm9pZCBtdXNiX2J1bGtfcnhfbmFrX3RpbWVvdXQoc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCBtdXNiX2h3X2VwICplcCkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwJKmRtYTsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXZvaWQgX19pb21lbQkJKm1iYXNlID0gbXVzYi0+bXJlZ3M7CisJdm9pZCBfX2lvbWVtCQkqZXBpbyA9IGVwLT5yZWdzOworCXN0cnVjdCBtdXNiX3FoCQkqY3VyX3FoLCAqbmV4dF9xaDsKKwl1MTYJCQlyeF9jc3I7CisKKwltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXAtPmVwbnVtKTsKKwlkbWEgPSBpc19kbWFfY2FwYWJsZSgpID8gZXAtPnJ4X2NoYW5uZWwgOiBOVUxMOworCisJLyogY2xlYXIgbmFrIHRpbWVvdXQgYml0ICovCisJcnhfY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKTsKKwlyeF9jc3IgfD0gTVVTQl9SWENTUl9IX1daQ19CSVRTOworCXJ4X2NzciAmPSB+TVVTQl9SWENTUl9EQVRBRVJST1I7CisJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgcnhfY3NyKTsKKworCWN1cl9xaCA9IGZpcnN0X3FoKCZtdXNiLT5pbl9idWxrKTsKKwlpZiAoY3VyX3FoKSB7CisJCXVyYiA9IG5leHRfdXJiKGN1cl9xaCk7CisJCWlmIChkbWFfY2hhbm5lbF9zdGF0dXMoZG1hKSA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgeworCQkJZG1hLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfQ09SRV9BQk9SVDsKKwkJCW11c2ItPmRtYV9jb250cm9sbGVyLT5jaGFubmVsX2Fib3J0KGRtYSk7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gZG1hLT5hY3R1YWxfbGVuOworCQkJZG1hLT5hY3R1YWxfbGVuID0gMEw7CisJCX0KKwkJbXVzYl9zYXZlX3RvZ2dsZShlcCwgMSwgdXJiKTsKKworCQkvKiBtb3ZlIGN1cl9xaCB0byBlbmQgb2YgcXVldWUgKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJmN1cl9xaC0+cmluZywgJm11c2ItPmluX2J1bGspOworCisJCS8qIGdldCB0aGUgbmV4dCBxaCBmcm9tIG11c2ItPmluX2J1bGsgKi8KKwkJbmV4dF9xaCA9IGZpcnN0X3FoKCZtdXNiLT5pbl9idWxrKTsKKworCQkvKiBzZXQgcnhfcmVpbml0IGFuZCBzY2hlZHVsZSB0aGUgbmV4dCBxaCAqLworCQllcC0+cnhfcmVpbml0ID0gMTsKKwkJbXVzYl9zdGFydF91cmIobXVzYiwgMSwgbmV4dF9xaCk7CisJfQorfQorCiAvKgogICogU2VydmljZSBhbiBSWCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBJTiBlbmRwb2ludDsgZG9jcyBjb3ZlciBidWxrLCBpc28sCiAgKiBhbmQgaGlnaC1iYW5kd2lkdGggSU4gdHJhbnNmZXIgY2FzZXMuCkBAIC0xNDIxLDE4ICsxNDYxLDI2IEBACiAJfSBlbHNlIGlmIChyeF9jc3IgJiBNVVNCX1JYQ1NSX0RBVEFFUlJPUikgewogCiAJCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9JU09DICE9IHFoLT50eXBlKSB7Ci0JCQkvKiBOT1RFIHRoaXMgY29kZSBwYXRoIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBQQVVTRSBhCi0JCQkgKiB0cmFuc2ZlciwgaWYgdGhlcmUncyBzb21lIG90aGVyIChub25wZXJpb2RpYykgcnggdXJiCi0JCQkgKiB0aGF0IGNvdWxkIHVzZSB0aGlzIGZpZm8uICAoZG1hIGNvbXBsaWNhdGVzIGl0Li4uKQotCQkJICoKLQkJCSAqIGlmIChidWxrICYmIHFoLT5yaW5nLm5leHQgIT0gJm11c2ItPmluX2J1bGspLCB0aGVuCi0JCQkgKiB3ZSBoYXZlIGEgY2FuZGlkYXRlLi4uIE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvcgotCQkJICovCiAJCQlEQkcoNiwgIlJYIGVuZCAlZCBOQUsgdGltZW91dFxuIiwgZXBudW0pOworCisJCQkvKiBOT1RFOiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IsIHNvIHdlIHdhbnQgdG8KKwkJCSAqIGNvbnRpbnVlLiAgRXhjZXB0IC4uLiBpZiB0aGVyZSdzIGEgcmVxdWVzdCBmb3IKKwkJCSAqIGFub3RoZXIgUUgsIHVzZSB0aGF0IGluc3RlYWQgb2Ygc3RhcnZpbmcgaXQuCisJCQkgKgorCQkJICogRGV2aWNlcyBsaWtlIEV0aGVybmV0IGFuZCBzZXJpYWwgYWRhcHRlcnMga2VlcAorCQkJICogcmVhZHMgcG9zdGVkIGF0IGFsbCB0aW1lcywgd2hpY2ggd2lsbCBzdGFydmUKKwkJCSAqIG90aGVyIGRldmljZXMgd2l0aG91dCB0aGlzIGxvZ2ljLgorCQkJICovCisJCQlpZiAodXNiX3BpcGVidWxrKHVyYi0+cGlwZSkKKwkJCQkJJiYgcWgtPm11eCA9PSAxCisJCQkJCSYmICFsaXN0X2lzX3Npbmd1bGFyKCZtdXNiLT5pbl9idWxrKSkgeworCQkJCW11c2JfYnVsa19yeF9uYWtfdGltZW91dChtdXNiLCBod19lcCk7CisJCQkJcmV0dXJuOworCQkJfQogCQkJbXVzYl9lcF9zZWxlY3QobWJhc2UsIGVwbnVtKTsKLQkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsCi0JCQkJCU1VU0JfUlhDU1JfSF9XWkNfQklUUwotCQkJCQl8IE1VU0JfUlhDU1JfSF9SRVFQS1QpOworCQkJcnhfY3NyIHw9IE1VU0JfUlhDU1JfSF9XWkNfQklUUzsKKwkJCXJ4X2NzciAmPSB+TVVTQl9SWENTUl9EQVRBRVJST1I7CisJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLCByeF9jc3IpOwogCiAJCQlnb3RvIGZpbmlzaDsKIAkJfSBlbHNlIHsKQEAgLTE3MTEsMzEgKzE3NTksMjcgQEAKIAogCS8qIGVsc2UsIHBlcmlvZGljIHRyYW5zZmVycyBnZXQgbXV4ZWQgdG8gb3RoZXIgZW5kcG9pbnRzICovCiAKLQkvKiBGSVhNRSB0aGlzIGRvZXNuJ3QgY29uc2lkZXIgZGlyZWN0aW9uLCBzbyBpdCBjYW4gb25seQotCSAqIHdvcmsgZm9yIG9uZSBoYWxmIG9mIHRoZSBlbmRwb2ludCBoYXJkd2FyZSwgYW5kIGFzc3VtZXMKLQkgKiB0aGUgcHJldmlvdXMgY2FzZXMgaGFuZGxlZCBhbGwgbm9uLXNoYXJlZCBlbmRwb2ludHMuLi4KLQkgKi8KLQotCS8qIHdlIGtub3cgdGhpcyBxaCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsIHNvIGFsbCB3ZSBuZWVkIHRvIGRvCisJLyoKKwkgKiBXZSBrbm93IHRoaXMgcWggaGFzbid0IGJlZW4gc2NoZWR1bGVkLCBzbyBhbGwgd2UgbmVlZCB0byBkbwogCSAqIGlzIGNob29zZSB3aGljaCBoYXJkd2FyZSBlbmRwb2ludCB0byBwdXQgaXQgb24gLi4uCiAJICoKIAkgKiBSRVZJU0lUIHdoYXQgd2UgcmVhbGx5IHdhbnQgaGVyZSBpcyBhIHJlZ3VsYXIgc2NoZWR1bGUgdHJlZQotCSAqIGxpa2UgZS5nLiBPSENJIHVzZXMsIGJ1dCBmb3Igbm93IG11c2ItPnBlcmlvZGljIGlzIGp1c3QgYW4KLQkgKiBhcnJheSBvZiB0aGUgX3NpbmdsZV8gbG9naWNhbCBlbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggYQotCSAqIGdpdmVuIHBoeXNpY2FsIG9uZSAoaWRlbnRpdHkgbWFwcGluZyBsb2dpY2FsLT5waHlzaWNhbCkuCi0JICoKLQkgKiB0aGF0IHNpbXBsaXN0aWMgYXBwcm9hY2ggbWFrZXMgVFQgc2NoZWR1bGluZyBhIGxvdCBzaW1wbGVyOwotCSAqIHRoZXJlIGlzIG5vbmUsIGFuZCB0aHVzIG5vbmUgb2YgaXRzIGNvbXBsZXhpdHkuLi4KKwkgKiBsaWtlIGUuZy4gT0hDSSB1c2VzLgogCSAqLwogCWJlc3RfZGlmZiA9IDQwOTY7CiAJYmVzdF9lbmQgPSAtMTsKIAotCWZvciAoZXBudW0gPSAxOyBlcG51bSA8IG11c2ItPm5yX2VuZHBvaW50czsgZXBudW0rKykgeworCWZvciAoZXBudW0gPSAxLCBod19lcCA9IG11c2ItPmVuZHBvaW50cyArIDE7CisJCQllcG51bSA8IG11c2ItPm5yX2VuZHBvaW50czsKKwkJCWVwbnVtKyssIGh3X2VwKyspIHsKIAkJaW50CWRpZmY7CiAKLQkJaWYgKG11c2ItPnBlcmlvZGljW2VwbnVtXSkKKwkJaWYgKGlzX2luIHx8IGh3X2VwLT5pc19zaGFyZWRfZmlmbykgeworCQkJaWYgKGh3X2VwLT5pbl9xaCAgIT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlCWlmIChod19lcC0+b3V0X3FoICE9IE5VTEwpCiAJCQljb250aW51ZTsKLQkJaHdfZXAgPSAmbXVzYi0+ZW5kcG9pbnRzW2VwbnVtXTsKKwogCQlpZiAoaHdfZXAgPT0gbXVzYi0+YnVsa19lcCkKIAkJCWNvbnRpbnVlOwogCkBAIC0xNzU2LDYgKzE4MDAsMTcgQEAKIAkJCWhlYWQgPSAmbXVzYi0+aW5fYnVsazsKIAkJZWxzZQogCQkJaGVhZCA9ICZtdXNiLT5vdXRfYnVsazsKKworCQkvKiBFbmFibGUgYnVsayBSWCBOQUsgdGltZW91dCBzY2hlbWUgd2hlbiBidWxrIHJlcXVlc3RzIGFyZQorCQkgKiBtdWx0aXBsZXhlZC4gIFRoaXMgc2NoZW1lIGRvZW4ndCB3b3JrIGluIGhpZ2ggc3BlZWQgdG8gZnVsbAorCQkgKiBzcGVlZCBzY2VuYXJpbyBhcyBOQUsgaW50ZXJydXB0cyBhcmUgbm90IGNvbWluZyBmcm9tIGEKKwkJICogZnVsbCBzcGVlZCBkZXZpY2UgY29ubmVjdGVkIHRvIGEgaGlnaCBzcGVlZCBkZXZpY2UuCisJCSAqIE5BSyB0aW1lb3V0IGludGVydmFsIGlzIDggKDEyOCB1ZnJhbWUgb3IgMTZtcykgZm9yIEhTIGFuZAorCQkgKiA0ICg4IGZyYW1lIG9yIDhtcykgZm9yIEZTIGRldmljZS4KKwkJICovCisJCWlmIChpc19pbiAmJiBxaC0+ZGV2KQorCQkJcWgtPmludHZfcmVnID0KKwkJCQkoVVNCX1NQRUVEX0hJR0ggPT0gcWgtPmRldi0+c3BlZWQpID8gOCA6IDQ7CiAJCWdvdG8gc3VjY2VzczsKIAl9IGVsc2UgaWYgKGJlc3RfZW5kIDwgMCkgewogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTE3NjQsNyArMTgxOSw2IEBACiAJaWRsZSA9IDE7CiAJcWgtPm11eCA9IDA7CiAJaHdfZXAgPSBtdXNiLT5lbmRwb2ludHMgKyBiZXN0X2VuZDsKLQltdXNiLT5wZXJpb2RpY1tiZXN0X2VuZF0gPSBxaDsKIAlEQkcoNCwgInFoICVwIHBlcmlvZGljIHNsb3QgJWRcbiIsIHFoLCBiZXN0X2VuZCk7CiBzdWNjZXNzOgogCWlmIChoZWFkKSB7CkBAIC0xODg4LDEzICsxOTQyLDExIEBACiAJCSAqCiAJCSAqIFRoZSBkb3duc2lkZSBvZiBkaXNhYmxpbmcgdGhpcyBpcyB0aGF0IHRyYW5zZmVyIHNjaGVkdWxpbmcKIAkJICogZ2V0cyBWRVJZIHVuZmFpciBmb3Igbm9ucGVyaW9kaWMgdHJhbnNmZXJzOyBhIG1pc2JlaGF2aW5nCi0JCSAqIHBlcmlwaGVyYWwgY291bGQgbWFrZSB0aGF0IGh1cnQuICBPciBmb3IgcmVhZHMsIG9uZSB0aGF0J3MKLQkJICogcGVyZmVjdGx5IG5vcm1hbDogIG5ldHdvcmsgYW5kIG90aGVyIGRyaXZlcnMga2VlcCByZWFkcwotCQkgKiBwb3N0ZWQgYXQgYWxsIHRpbWVzLCBoYXZpbmcgb25lIHBlbmRpbmcgZm9yIGEgd2VlayBzaG91bGQKLQkJICogYmUgcGVyZmVjdGx5IHNhZmUuCisJCSAqIHBlcmlwaGVyYWwgY291bGQgbWFrZSB0aGF0IGh1cnQuICBUaGF0J3MgcGVyZmVjdGx5IG5vcm1hbAorCQkgKiBmb3IgcmVhZHMgZnJvbSBuZXR3b3JrIG9yIHNlcmlhbCBhZGFwdGVycyAuLi4gc28gd2UgaGF2ZQorCQkgKiBwYXJ0aWFsIE5BS2xpbWl0IHN1cHBvcnQgZm9yIGJ1bGsgUlguCiAJCSAqCi0JCSAqIFRoZSB1cHNpZGUgb2YgZGlzYWJsaW5nIGl0IGlzIGF2b2lkbmcgdHJhbnNmZXIgc2NoZWR1bGluZwotCQkgKiBjb2RlIHRvIHB1dCB0aGlzIGFzaWRlIGZvciB3aGlsZS4KKwkJICogVGhlIHVwc2lkZSBvZiBkaXNhYmxpbmcgaXQgaXMgc2ltcGxlciB0cmFuc2ZlciBzY2hlZHVsaW5nLgogCQkgKi8KIAkJaW50ZXJ2YWwgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCmluZGV4IGUwZTljZTUuLmJmNjc3YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCWRlc2MtPmJEZXNjTGVuZ3RoID0gOTsKIAkJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKIAkJZGVzYy0+Yk5iclBvcnRzID0gMTsKLQkJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBjcHVfdG9fbGUxNigKIAkJCQkgIDB4MDAwMQkvKiBwZXItcG9ydCBwb3dlciBzd2l0Y2hpbmcgKi8KIAkJCQl8IDB4MDAxMAkvKiBubyBvdmVyY3VycmVudCByZXBvcnRpbmcgKi8KIAkJCQkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcgYi9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZwppbmRleCBlZTU1YjQ0Li5hYTg4NGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZwpAQCAtNDMsNyArNDMsNyBAQAogCiBjb25maWcgVFdMNDAzMF9VU0IKIAl0cmlzdGF0ZSAiVFdMNDAzMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgotCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgUkVHVUxBVE9SX1RXTDQwMzAKIAlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgdGhlIFVTQiBPVEcgdHJhbnNjZWl2ZXIgb24gVFdMNDAzMApAQCAtNTEsNCArNTEsMTIgQEAKIAkgIFRoaXMgdHJhbnNjZWl2ZXIgc3VwcG9ydHMgaGlnaCBhbmQgZnVsbCBzcGVlZCBkZXZpY2VzIHBsdXMsCiAJICBpbiBob3N0IG1vZGUsIGxvdyBzcGVlZC4KIAorY29uZmlnIE5PUF9VU0JfWENFSVYKKwl0cmlzdGF0ZSAiTk9QIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKKwloZWxwCisJIHRoaXMgZHJpdmVyIGlzIHRvIGJlIHVzZWQgYnkgYWxsIHRoZSB1c2IgdHJhbnNjZWl2ZXIgd2hpY2ggYXJlIGVpdGhlcgorCSBidWlsdC1pbiB3aXRoIHVzYiBpcCBvciB3aGljaCBhcmUgYXV0b25vbW91cyBhbmQgZG9lc24ndCByZXF1aXJlIGFueQorCSBwaHkgcHJvZ3JhbW1pbmcgc3VjaCBhcyBJU1AxeDA0IGV0Yy4KKwogZW5kaWYgIyBVU0IgfHwgT1RHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKaW5kZXggZDczYzdjZi4uMjA4MTY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIG9iai0kKENPTkZJR19VU0JfR1BJT19WQlVTKQkrPSBncGlvX3ZidXMubwogb2JqLSQoQ09ORklHX0lTUDEzMDFfT01BUCkJKz0gaXNwMTMwMV9vbWFwLm8KIG9iai0kKENPTkZJR19UV0w0MDMwX1VTQikJKz0gdHdsNDAzMC11c2Iubworb2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpCSs9IG5vcC11c2IteGNlaXYubwogCiBjY2ZsYWdzLSQoQ09ORklHX1VTQl9ERUJVRykJKz0gLURERUJVRwogY2NmbGFncy0kKENPTkZJR19VU0JfR0FER0VUX0RFQlVHKSArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMgYi9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMKaW5kZXggNjNhNjAzNi4uMWMyNmM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCkBAIC0zNCw2ICszNSw3IEBACiAJc3RydWN0IHJlZ3VsYXRvciAgICAgICAqdmJ1c19kcmF3OwogCWludAkJCXZidXNfZHJhd19lbmFibGVkOwogCXVuc2lnbmVkCQltQTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKIApAQCAtNzYsMjQgKzc4LDI2IEBACiAJZ3Bpb192YnVzLT5tQSA9IG1BOwogfQogCi0vKiBWQlVTIGNoYW5nZSBJUlEgaGFuZGxlciAqLwotc3RhdGljIGlycXJldHVybl90IGdwaW9fdmJ1c19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaXNfdmJ1c19wb3dlcmVkKHN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEgKmdwaW9fdmJ1cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBncGlvLCB2YnVzOworCWludCB2YnVzOwogCiAJdmJ1cyA9IGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5ncGlvX3ZidXMpOwogCWlmIChwZGF0YS0+Z3Bpb192YnVzX2ludmVydGVkKQogCQl2YnVzID0gIXZidXM7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJWQlVTICVzIChnYWRnZXQ6ICVzKVxuIiwKLQkJdmJ1cyA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiLAotCQlncGlvX3ZidXMtPm90Zy5nYWRnZXQgPyBncGlvX3ZidXMtPm90Zy5nYWRnZXQtPm5hbWUgOiAibm9uZSIpOworCXJldHVybiB2YnVzOworfQorCitzdGF0aWMgdm9pZCBncGlvX3ZidXNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGdwaW9fdmJ1c19kYXRhICpncGlvX3ZidXMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGdwaW9fdmJ1c19kYXRhLCB3b3JrKTsKKwlzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyAqcGRhdGEgPSBncGlvX3ZidXMtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbnQgZ3BpbzsKIAogCWlmICghZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCXJldHVybjsKIAogCS8qIFBlcmlwaGVyYWwgY29udHJvbGxlcnMgd2hpY2ggbWFuYWdlIHRoZSBwdWxsdXAgdGhlbXNlbHZlcyB3b24ndCBoYXZlCiAJICogZ3Bpb19wdWxsdXAgY29uZmlndXJlZCBoZXJlLiAgSWYgaXQncyBjb25maWd1cmVkIGhlcmUsIHdlJ2xsIGRvIHdoYXQKQEAgLTEwMSw3ICsxMDUsNyBAQAogCSAqIHRoYXQgbWF5IGNvbXBsaWNhdGUgdXNiX2dhZGdldF97LGRpc31jb25uZWN0KCkgc3VwcG9ydC4KIAkgKi8KIAlncGlvID0gcGRhdGEtPmdwaW9fcHVsbHVwOwotCWlmICh2YnVzKSB7CisJaWYgKGlzX3ZidXNfcG93ZXJlZChwZGF0YSkpIHsKIAkJZ3Bpb192YnVzLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOwogCQl1c2JfZ2FkZ2V0X3ZidXNfY29ubmVjdChncGlvX3ZidXMtPm90Zy5nYWRnZXQpOwogCkBAIC0xMjEsNiArMTI1LDIxIEBACiAJCXVzYl9nYWRnZXRfdmJ1c19kaXNjb25uZWN0KGdwaW9fdmJ1cy0+b3RnLmdhZGdldCk7CiAJCWdwaW9fdmJ1cy0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKIAl9Cit9CisKKy8qIFZCVVMgY2hhbmdlIElSUSBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb192YnVzX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkYXRhOworCXN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBncGlvX3ZidXNfZGF0YSAqZ3Bpb192YnVzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJWQlVTICVzIChnYWRnZXQ6ICVzKVxuIiwKKwkJaXNfdmJ1c19wb3dlcmVkKHBkYXRhKSA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiLAorCQlncGlvX3ZidXMtPm90Zy5nYWRnZXQgPyBncGlvX3ZidXMtPm90Zy5nYWRnZXQtPm5hbWUgOiAibm9uZSIpOworCisJaWYgKGdwaW9fdmJ1cy0+b3RnLmdhZGdldCkKKwkJc2NoZWR1bGVfd29yaygmZ3Bpb192YnVzLT53b3JrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTI1Nyw2ICsyNzYsNyBAQAogCQkJaXJxLCBlcnIpOwogCQlnb3RvIGVycl9pcnE7CiAJfQorCUlOSVRfV09SSygmZ3Bpb192YnVzLT53b3JrLCBncGlvX3ZidXNfd29yayk7CiAKIAkvKiBvbmx5IGFjdGl2ZSB3aGVuIGEgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQgKi8KIAllcnIgPSBvdGdfc2V0X3RyYW5zY2VpdmVyKCZncGlvX3ZidXMtPm90Zyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkzM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKKyAqCisgKiBOT1AgVVNCIHRyYW5zY2VpdmVyIGZvciBhbGwgVVNCIHRyYW5zY2VpdmVyIHdoaWNoIGFyZSBlaXRoZXIgYnVpbHQtaW4KKyAqIGludG8gVVNCIElQIG9yIHdoaWNoIGFyZSBtb3N0bHkgYXV0b25vbW91cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IEFqYXkgS3VtYXIgR3VwdGEgPGFqYXkuZ3VwdGFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIEN1cnJlbnQgc3RhdHVzOgorICogCXRoaXMgaXMgdG8gYWRkICJub3AiIHRyYW5zY2VpdmVyIGZvciBhbGwgdGhvc2UgcGh5IHdoaWNoIGlzCisgKiAJYXV0b25vbW91cyBzdWNoIGFzIGlzcDE1MDQgZXRjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKworc3RydWN0IG5vcF91c2JfeGNlaXYgeworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJb3RnOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cit9OworCitzdGF0aWMgdTY0IG5vcF94Y2Vpdl9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcF94Y2Vpdl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm5vcF91c2JfeGNlaXYiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJm5vcF94Y2Vpdl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV8zMkJJVF9NQVNLLAorCQkucGxhdGZvcm1fZGF0YSAgICAgICAgICA9IE5VTEwsCisJfSwKK307CisKK3ZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKQoreworCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5vcF94Y2Vpdl9kZXZpY2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciB1c2Igbm9wIHRyYW5zY2VpdmVyXG4iKTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCB1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmbm9wX3hjZWl2X2RldmljZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5vcF91c2JfeGNlaXYgKnhjZWl2X3RvX25vcChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4KQoreworCXJldHVybiBjb250YWluZXJfb2YoeCwgc3RydWN0IG5vcF91c2JfeGNlaXYsIG90Zyk7Cit9CisKK3N0YXRpYyBpbnQgbm9wX3NldF9zdXNwZW5kKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngsIGludCBzdXNwZW5kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vcF9zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LAorCQlzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2ICpub3A7CisKKwlpZiAoIXgpCisJCXJldHVybiAtRU5PREVWOworCisJbm9wID0geGNlaXZfdG9fbm9wKHgpOworCisJaWYgKCFnYWRnZXQpIHsKKwkJbm9wLT5vdGcuZ2FkZ2V0ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbm9wLT5vdGcuZ2FkZ2V0ID0gZ2FkZ2V0OworCW5vcC0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub3Bfc2V0X2hvc3Qoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCwgc3RydWN0IHVzYl9idXMgKmhvc3QpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYgKm5vcDsKKworCWlmICgheCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlub3AgPSB4Y2Vpdl90b19ub3AoeCk7CisKKwlpZiAoIWhvc3QpIHsKKwkJbm9wLT5vdGcuaG9zdCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW5vcC0+b3RnLmhvc3QgPSBob3N0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBub3BfdXNiX3hjZWl2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYJKm5vcDsKKwlpbnQgZXJyOworCisJbm9wID0ga3phbGxvYyhzaXplb2YgKm5vcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFub3ApCisJCXJldHVybiAtRU5PTUVNOworCisJbm9wLT5kZXYJCT0gJnBkZXYtPmRldjsKKwlub3AtPm90Zy5kZXYJCT0gbm9wLT5kZXY7CisJbm9wLT5vdGcubGFiZWwJCT0gIm5vcC14Y2VpdiI7CisJbm9wLT5vdGcuc3RhdGUJCT0gT1RHX1NUQVRFX1VOREVGSU5FRDsKKwlub3AtPm90Zy5zZXRfaG9zdAk9IG5vcF9zZXRfaG9zdDsKKwlub3AtPm90Zy5zZXRfcGVyaXBoZXJhbAk9IG5vcF9zZXRfcGVyaXBoZXJhbDsKKwlub3AtPm90Zy5zZXRfc3VzcGVuZAk9IG5vcF9zZXRfc3VzcGVuZDsKKworCWVyciA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJm5vcC0+b3RnKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIHRyYW5zY2VpdmVyLCBlcnI6ICVkXG4iLAorCQkJZXJyKTsKKwkJZ290byBleGl0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5vcCk7CisKKwlyZXR1cm4gMDsKK2V4aXQ6CisJa2ZyZWUobm9wKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBub3BfdXNiX3hjZWl2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBub3BfdXNiX3hjZWl2ICpub3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW90Z19zZXRfdHJhbnNjZWl2ZXIoTlVMTCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShub3ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5vcF91c2JfeGNlaXZfZHJpdmVyID0geworCS5wcm9iZQkJPSBub3BfdXNiX3hjZWl2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aobm9wX3VzYl94Y2Vpdl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJub3BfdXNiX3hjZWl2IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5vcF91c2JfeGNlaXZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm5vcF91c2JfeGNlaXZfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChub3BfdXNiX3hjZWl2X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbm9wX3VzYl94Y2Vpdl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5vcF91c2JfeGNlaXZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG5vcF91c2JfeGNlaXZfZXhpdCk7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06bm9wX3VzYl94Y2VpdiIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMgSW5jIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5PUCBVU0IgVHJhbnNjZWl2ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYyBiL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCmluZGV4IDQxNmU0NDEuLmQ5NDc4ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogCiAvKiBSZWdpc3RlciBkZWZpbmVzICovCkBAIC0yNDYsNiArMjQ4LDExIEBACiAJc3RydWN0IG90Z190cmFuc2NlaXZlcglvdGc7CiAJc3RydWN0IGRldmljZQkJKmRldjsKIAorCS8qIFRXTDQwMzAgaW50ZXJuYWwgVVNCIHJlZ3VsYXRvciBzdXBwbGllcyAqLworCXN0cnVjdCByZWd1bGF0b3IJKnVzYjF2NTsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp1c2Ixdjg7CisJc3RydWN0IHJlZ3VsYXRvcgkqdXNiM3YxOworCiAJLyogZm9yIHZidXMgcmVwb3J0aW5nIHdpdGggaXJxcyBkaXNhYmxlZCAqLwogCXNwaW5sb2NrX3QJCWxvY2s7CiAKQEAgLTQzNCw2ICs0NDEsMTggQEAKIAogCXB3ciA9IHR3bDQwMzBfdXNiX3JlYWQodHdsLCBQSFlfUFdSX0NUUkwpOwogCWlmIChvbikgeworCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiM3YxKTsKKwkJcmVndWxhdG9yX2VuYWJsZSh0d2wtPnVzYjF2OCk7CisJCS8qCisJCSAqIERpc2FibGluZyB1c2IzdjEgcmVndWxhdG9yICg9IHdyaXRpbmcgMCB0byBWVVNCM1YxX0RFVl9HUlAKKwkJICogaW4gdHdsNDAzMCkgcmVzZXRzIHRoZSBWVVNCX0RFRElDQVRFRDIgcmVnaXN0ZXIuIFRoaXMgcmVzZXQKKwkJICogZW5hYmxlcyBWVVNCM1YxX1NMRUVQIGJpdCB0aGF0IHJlbWFwcyB1c2IzdjEgQUNUSVZFIHN0YXRlIHRvCisJCSAqIFNMRUVQLiBXZSB3b3JrIGFyb3VuZCB0aGlzIGJ5IGNsZWFyaW5nIHRoZSBiaXQgYWZ0ZXIgdXN2M3YxCisJCSAqIGlzIHJlLWFjdGl2YXRlZC4gVGhpcyBlbnN1cmVzIHRoYXQgVlVTQjNWMSBpcyByZWFsbHkgYWN0aXZlLgorCQkgKi8KKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsCisJCQkJCQkJVlVTQl9ERURJQ0FURUQyKTsKKwkJcmVndWxhdG9yX2VuYWJsZSh0d2wtPnVzYjF2NSk7CiAJCXB3ciAmPSB+UEhZX1BXUl9QSFlQV0Q7CiAJCVdBUk5fT04odHdsNDAzMF91c2Jfd3JpdGVfdmVyaWZ5KHR3bCwgUEhZX1BXUl9DVFJMLCBwd3IpIDwgMCk7CiAJCXR3bDQwMzBfdXNiX3dyaXRlKHR3bCwgUEhZX0NMS19DVFJMLApAQCAtNDQzLDYgKzQ2Miw5IEBACiAJfSBlbHNlICB7CiAJCXB3ciB8PSBQSFlfUFdSX1BIWVBXRDsKIAkJV0FSTl9PTih0d2w0MDMwX3VzYl93cml0ZV92ZXJpZnkodHdsLCBQSFlfUFdSX0NUUkwsIHB3cikgPCAwKTsKKwkJcmVndWxhdG9yX2Rpc2FibGUodHdsLT51c2IxdjUpOworCQlyZWd1bGF0b3JfZGlzYWJsZSh0d2wtPnVzYjF2OCk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHR3bC0+dXNiM3YxKTsKIAl9CiB9CiAKQEAgLTQ2OCw3ICs0OTAsNyBAQAogCXR3bC0+YXNsZWVwID0gMDsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF91c2JfbGRvX2luaXQoc3RydWN0IHR3bDQwMzBfdXNiICp0d2wpCitzdGF0aWMgaW50IHR3bDQwMzBfdXNiX2xkb19pbml0KHN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsKQogewogCS8qIEVuYWJsZSB3cml0aW5nIHRvIHBvd2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAweEMwLCBQUk9URUNUX0tFWSk7CkBAIC00ODAsMjAgKzUwMiw0NSBAQAogCS8qIGlucHV0IHRvIFZVU0IzVjEgTERPIGlzIGZyb20gVkJBVCwgbm90IFZCVVMgKi8KIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgxNCwgVlVTQl9ERURJQ0FURUQxKTsKIAotCS8qIHR1cm4gb24gMy4xViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgyMCwgVlVTQjNWMV9ERVZfR1JQKTsKKwkvKiBJbml0aWFsaXplIDMuMVYgcmVndWxhdG9yICovCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IzVjFfREVWX0dSUCk7CisKKwl0d2wtPnVzYjN2MSA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IzdjEiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiM3YxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjNWMV9UWVBFKTsKIAotCS8qIHR1cm4gb24gMS41ViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgyMCwgVlVTQjFWNV9ERVZfR1JQKTsKKwkvKiBJbml0aWFsaXplIDEuNVYgcmVndWxhdG9yICovCisJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjVfREVWX0dSUCk7CisKKwl0d2wtPnVzYjF2NSA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IxdjUiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiMXY1KSkKKwkJZ290byBmYWlsMTsKKwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY1X1RZUEUpOwogCi0JLyogdHVybiBvbiAxLjhWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDIwLCBWVVNCMVY4X0RFVl9HUlApOworCS8qIEluaXRpYWxpemUgMS44ViByZWd1bGF0b3IgKi8KKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWOF9ERVZfR1JQKTsKKworCXR3bC0+dXNiMXY4ID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInVzYjF2OCIpOworCWlmIChJU19FUlIodHdsLT51c2IxdjgpKQorCQlnb3RvIGZhaWwyOworCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjhfVFlQRSk7CiAKIAkvKiBkaXNhYmxlIGFjY2VzcyB0byBwb3dlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMCwgUFJPVEVDVF9LRVkpOworCisJcmV0dXJuIDA7CisKK2ZhaWwyOgorCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjUpOworCXR3bC0+dXNiMXY1ID0gTlVMTDsKK2ZhaWwxOgorCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IzdjEpOworCXR3bC0+dXNiM3YxID0gTlVMTDsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHNzaXplX3QgdHdsNDAzMF91c2JfdmJ1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTU5OCw3ICs2NDUsNyBAQAogewogCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0d2w0MDMwX3VzYgkqdHdsOwotCWludAkJCXN0YXR1czsKKwlpbnQJCQlzdGF0dXMsIGVycjsKIAogCWlmICghcGRhdGEpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm1fZGF0YSBub3QgYXZhaWxhYmxlXG4iKTsKQEAgLTYyMiw3ICs2NjksMTIgQEAKIAkvKiBpbml0IHNwaW5sb2NrIGZvciB3b3JrcXVldWUgKi8KIAlzcGluX2xvY2tfaW5pdCgmdHdsLT5sb2NrKTsKIAotCXR3bDQwMzBfdXNiX2xkb19pbml0KHR3bCk7CisJZXJyID0gdHdsNDAzMF91c2JfbGRvX2luaXQodHdsKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImxkbyBpbml0IGZhaWxlZFxuIik7CisJCWtmcmVlKHR3bCk7CisJCXJldHVybiBlcnI7CisJfQogCW90Z19zZXRfdHJhbnNjZWl2ZXIoJnR3bC0+b3RnKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHR3bCk7CkBAIC02ODgsNiArNzQwLDkgQEAKIAl0d2w0MDMwX3VzYl9jbGVhcl9iaXRzKHR3bCwgUE9XRVJfQ1RSTCwgUE9XRVJfQ1RSTF9PVEdfRU5BQik7CiAKIAl0d2w0MDMwX3BoeV9wb3dlcih0d2wsIDApOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjUpOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IxdjgpOworCXJlZ3VsYXRvcl9wdXQodHdsLT51c2IzdjEpOwogCiAJa2ZyZWUodHdsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCBiMzYxZjA1Li5hNjVmOTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRpZ2lfYWNjZWxlcG9ydC4KIAotY29uZmlnIFVTQl9TRVJJQUxfQ1AyMTAxCi0JdHJpc3RhdGUgIlVTQiBDUDIxMDEgVUFSVCBCcmlkZ2UgQ29udHJvbGxlciIKK2NvbmZpZyBVU0JfU0VSSUFMX0NQMjEwWAorCXRyaXN0YXRlICJVU0IgQ1AyMTB4IGZhbWlseSBvZiBVQVJUIEJyaWRnZSBDb250cm9sbGVycyIKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENQMjEwMS9DUDIxMDIgYmFzZWQgVVNCIHRvIFJTMjMyCi0JICBjb252ZXJ0ZXIuCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENQMjEwMS9DUDIxMDIvQ1AyMTAzIGJhc2VkIFVTQgorCSAgdG8gUlMyMzIgY29udmVydGVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3AyMTAxLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNwMjEweC4KIAogY29uZmlnIFVTQl9TRVJJQUxfQ1lQUkVTU19NOAogCXRyaXN0YXRlICJVU0IgQ3lwcmVzcyBNOCBVU0IgU2VyaWFsIERyaXZlciIKQEAgLTQ3Miw2ICs0NzIsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG90aTY4NTguCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1FVQUxDT01NCisJdHJpc3RhdGUgIlVTQiBRdWFsY29tbSBTZXJpYWwgbW9kZW0iCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFF1YWxjb21tIFVTQiBtb2RlbSBkZXZpY2UuICBUaGVzZSBhcmUKKwkgIHVzdWFsbHkgd2lyZWxlc3MgY2VsbHVsYXIgbW9kZW1zLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxY3NlcmlhbC4KKwogY29uZmlnIFVTQl9TRVJJQUxfU1BDUDhYNQogCXRyaXN0YXRlICJVU0IgU1BDUDh4NSBVU0IgVG8gU2VyaWFsIERyaXZlciIKIAloZWxwCkBAIC01MTUsNiArNTI0LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaWVycmEuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1NZTUJPTAorCXRyaXN0YXRlICJVU0IgU3ltYm9sIEJhcmNvZGUgZHJpdmVyIChzZXJpYWwgbW9kZSkiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBTeW1ib2wgVVNCIEJhcmNvZGUgZGV2aWNlCisJICBpbiBzZXJpYWwgZW11bGF0aW9uIG1vZGUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHN5bWJvbHNlcmlhbC4KKwogY29uZmlnIFVTQl9TRVJJQUxfVEkKIAl0cmlzdGF0ZSAiVVNCIFRJIDM0MTAvNTA1MiBTZXJpYWwgRHJpdmVyIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQppbmRleCBiNzViZTkxLi42NjYxOWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw3IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2KQkJKz0gYXJrMzExNi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4pCQkJKz0gYmVsa2luX3NhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NIMzQxKQkJCSs9IGNoMzQxLm8KLW9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSkJCQkrPSBjcDIxMDEubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYKQkJCSs9IGNwMjEweC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0spCQkrPSBjeWJlcmphY2subwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCkJCSs9IGN5cHJlc3NfbTgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfREVCVUcpCQkJKz0gdXNiX2RlYnVnLm8KQEAgLTQ1LDEwICs0NSwxMiBAQAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OKQkJCSs9IG9wdGlvbi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4KQkJKz0gb3RpNjg1OC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMpCQkJKz0gcGwyMzAzLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NKQkJKz0gcWNzZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0FGRSkJCQkrPSBzYWZlX3NlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSkJCSs9IHNpZW1lbnNfbXBpLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTKQkJKz0gc2llcnJhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUpCQkrPSBzcGNwOHg1Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCkJCQkrPSBzeW1ib2xzZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfVEkpCQkJKz0gdGlfdXNiXzM0MTBfNTA1Mi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9WSVNPUikJCQkrPSB2aXNvci5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQpCQkrPSB3aGl0ZWhlYXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwppbmRleCBmNjFlM2NhLi5hYjRjYzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNywgRnJhbmsgQSBLaW5nc3dvb2QgPGZyYW5rQGtpbmdzd29vZC1jb25zdWx0aW5nLmNvLnVrPgorICogQ29weXJpZ2h0IDIwMDcsIFdlcm5lciBDb3JuZWxpdXMgPHdlcm5lckBjb3JuZWxpdXMtY29uc3VsdC5kZT4KKyAqIENvcHlyaWdodCAyMDA5LCBCb3JpcyBIYWpkdWsgPGJvcmlzQGhhamR1ay5vcmc+CiAgKgogICogY2gzNDEuYyBpbXBsZW1lbnRzIGEgc2VyaWFsIHBvcnQgZHJpdmVyIGZvciB0aGUgV2luY2hpcGhlYWQgQ0gzNDEuCiAgKgpAQCAtMjEsOSArMjMsMzkgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAKLSNkZWZpbmUgREVGQVVMVF9CQVVEX1JBVEUgMjQwMAorI2RlZmluZSBERUZBVUxUX0JBVURfUkFURSA5NjAwCiAjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgIDEwMDAKIAorLyogZmxhZ3MgZm9yIElPLUJpdHMgKi8KKyNkZWZpbmUgQ0gzNDFfQklUX1JUUyAoMSA8PCA2KQorI2RlZmluZSBDSDM0MV9CSVRfRFRSICgxIDw8IDUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBpbnRlcnJ1cHQgcGlwZSBkZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGFsd2F5cyA0IGludGVycnVwdCBieXRlcyAqLworLyogZmlyc3QgaXJxIGJ5dGUgbm9ybWFsbHkgMHgwOCAqLworLyogc2Vjb25kIGlycSBieXRlIGJhc2UgMHg3ZCArIGJlbG93ICovCisvKiB0aGlyZCBpcnEgYnl0ZSBiYXNlIDB4OTQgKyBiZWxvdyAqLworLyogZm91cnRoIGlycSBieXRlIG5vcm1hbGx5IDB4ZWUgKi8KKworLyogc2Vjb25kIGludGVycnVwdCBieXRlICovCisjZGVmaW5lIENIMzQxX01VTFRfU1RBVCAweDA0IC8qIG11bHRpcGxlIHN0YXR1cyBzaW5jZSBsYXN0IGludGVycnVwdCBldmVudCAqLworCisvKiBzdGF0dXMgcmV0dXJuZWQgaW4gdGhpcmQgaW50ZXJydXB0IGFuc3dlciBieXRlLCBpbnZlcnRlZCBpbiBkYXRhCisgICBmcm9tIGlycSAqLworI2RlZmluZSBDSDM0MV9CSVRfQ1RTIDB4MDEKKyNkZWZpbmUgQ0gzNDFfQklUX0RTUiAweDAyCisjZGVmaW5lIENIMzQxX0JJVF9SSSAgMHgwNAorI2RlZmluZSBDSDM0MV9CSVRfRENEIDB4MDgKKyNkZWZpbmUgQ0gzNDFfQklUU19NT0RFTV9TVEFUIDB4MGYgLyogYWxsIGJpdHMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBmYWN0b3IgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9GQUNUT1IgMTUzMjYyMDgwMAorI2RlZmluZSBDSDM0MV9CQVVEQkFTRV9ESVZNQVggMworCiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC0zNCw5ICs2NiwxMiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogc3RydWN0IGNoMzQxX3ByaXZhdGUgewotCXVuc2lnbmVkIGJhdWRfcmF0ZTsKLQl1OCBkdHI7Ci0JdTggcnRzOworCXNwaW5sb2NrX3QgbG9jazsgLyogYWNjZXNzIGxvY2sgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgLyogd2FpdCBxdWV1ZSBmb3IgbW9kZW0gc3RhdHVzICovCisJdW5zaWduZWQgYmF1ZF9yYXRlOyAvKiBzZXQgYmF1ZCByYXRlICovCisJdTggbGluZV9jb250cm9sOyAvKiBzZXQgbGluZSBjb250cm9sIHZhbHVlIFJUUy9EVFIgKi8KKwl1OCBsaW5lX3N0YXR1czsgLyogYWN0aXZlIHN0YXR1cyBvZiBtb2RlbSBjb250cm9sIGlucHV0cyAqLworCXU4IG11bHRpX3N0YXR1c19jaGFuZ2U7IC8qIHN0YXR1cyBjaGFuZ2VkIG11bHRpcGxlIHNpbmNlIGxhc3QgY2FsbCAqLwogfTsKIAogc3RhdGljIGludCBjaDM0MV9jb250cm9sX291dChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCByZXF1ZXN0LApAQCAtNzIsMzcgKzEwNywyOCBAQAogewogCXNob3J0IGEsIGI7CiAJaW50IHI7CisJdW5zaWduZWQgbG9uZyBmYWN0b3I7CisJc2hvcnQgZGl2aXNvcjsKIAogCWRiZygiY2gzNDFfc2V0X2JhdWRyYXRlKCVkKSIsIHByaXYtPmJhdWRfcmF0ZSk7Ci0Jc3dpdGNoIChwcml2LT5iYXVkX3JhdGUpIHsKLQljYXNlIDI0MDA6Ci0JCWEgPSAweGQ5MDE7Ci0JCWIgPSAweDAwMzg7Ci0JCWJyZWFrOwotCWNhc2UgNDgwMDoKLQkJYSA9IDB4NjQwMjsKLQkJYiA9IDB4MDAxZjsKLQkJYnJlYWs7Ci0JY2FzZSA5NjAwOgotCQlhID0gMHhiMjAyOwotCQliID0gMHgwMDEzOwotCQlicmVhazsKLQljYXNlIDE5MjAwOgotCQlhID0gMHhkOTAyOwotCQliID0gMHgwMDBkOwotCQlicmVhazsKLQljYXNlIDM4NDAwOgotCQlhID0gMHg2NDAzOwotCQliID0gMHgwMDBhOwotCQlicmVhazsKLQljYXNlIDExNTIwMDoKLQkJYSA9IDB4Y2MwMzsKLQkJYiA9IDB4MDAwODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKworCWlmICghcHJpdi0+YmF1ZF9yYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlmYWN0b3IgPSAoQ0gzNDFfQkFVREJBU0VfRkFDVE9SIC8gcHJpdi0+YmF1ZF9yYXRlKTsKKwlkaXZpc29yID0gQ0gzNDFfQkFVREJBU0VfRElWTUFYOworCisJd2hpbGUgKChmYWN0b3IgPiAweGZmZjApICYmIGRpdmlzb3IpIHsKKwkJZmFjdG9yID4+PSAzOworCQlkaXZpc29yLS07CiAJfQogCisJaWYgKGZhY3RvciA+IDB4ZmZmMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmYWN0b3IgPSAweDEwMDAwIC0gZmFjdG9yOworCWEgPSAoZmFjdG9yICYgMHhmZjAwKSB8IGRpdmlzb3I7CisJYiA9IGZhY3RvciAmIDB4ZmY7CisKIAlyID0gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweDlhLCAweDEzMTIsIGEpOwogCWlmICghcikKIAkJciA9IGNoMzQxX2NvbnRyb2xfb3V0KGRldiwgMHg5YSwgMHgwZjJjLCBiKTsKQEAgLTExMCwxOSArMTM2LDE4IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgY2gzNDFfc2V0X2hhbmRzaGFrZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2KQorc3RhdGljIGludCBjaDM0MV9zZXRfaGFuZHNoYWtlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4IGNvbnRyb2wpCiB7Ci0JZGJnKCJjaDM0MV9zZXRfaGFuZHNoYWtlKCVkLCVkKSIsIHByaXYtPmR0ciwgcHJpdi0+cnRzKTsKLQlyZXR1cm4gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweGE0LAotCQl+KChwcml2LT5kdHI/MTw8NTowKXwocHJpdi0+cnRzPzE8PDY6MCkpLCAwKTsKKwlkYmcoImNoMzQxX3NldF9oYW5kc2hha2UoMHglMDJ4KSIsIGNvbnRyb2wpOworCXJldHVybiBjaDM0MV9jb250cm9sX291dChkZXYsIDB4YTQsIH5jb250cm9sLCAwKTsKIH0KIAotc3RhdGljIGludCBjaDM0MV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNoMzQxX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYpCiB7CiAJY2hhciAqYnVmZmVyOwogCWludCByOwogCWNvbnN0IHVuc2lnbmVkIHNpemUgPSA4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoImNoMzQxX2dldF9zdGF0dXMoKSIpOwogCkBAIC0xMzQsMTAgKzE1OSwxNSBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQkvKiBOb3QgaGF2aW5nIHRoZSBkYXRhc2hlZXQgZm9yIHRoZSBDSDM0MSwgd2UgaWdub3JlIHRoZSBieXRlcyByZXR1cm5lZAotCSAqIGZyb20gdGhlIGRldmljZS4gUmV0dXJuIGVycm9yIGlmIHRoZSBkZXZpY2UgZGlkIG5vdCByZXNwb25kIGluIHRpbWUuCi0JICovCi0JciA9IDA7CisJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RhdHVzIGlmIGF2YWlsYWJsZSAqLworCWlmIChyID09IDIpIHsKKwkJciA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oKmJ1ZmZlcikpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOworCQlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0gZWxzZQorCQlyID0gLUVQUk9UTzsKIAogb3V0OglrZnJlZShidWZmZXIpOwogCXJldHVybiByOwpAQCAtMTgwLDcgKzIxMCw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhwZWN0IDB4ZmYgMHhlZSAqLwotCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldik7CisJciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2LCBwcml2KTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xOTIsMTIgKzIyMiwxMiBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShkZXYsIHByaXYpOworCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKGRldiwgcHJpdi0+bGluZV9jb250cm9sKTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCiAJLyogZXhwZWN0IDB4OWYgMHhlZSAqLwotCXIgPSBjaDM0MV9nZXRfc3RhdHVzKGRldik7CisJciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2LCBwcml2KTsKIAogb3V0OglrZnJlZShidWZmZXIpOwogCXJldHVybiByOwpAQCAtMjE2LDkgKzI0NiwxMCBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwogCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOwotCXByaXYtPmR0ciA9IDE7Ci0JcHJpdi0+cnRzID0gMTsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSBDSDM0MV9CSVRfUlRTIHwgQ0gzNDFfQklUX0RUUjsKIAogCXIgPSBjaDM0MV9jb25maWd1cmUoc2VyaWFsLT5kZXYsIHByaXYpOwogCWlmIChyIDwgMCkKQEAgLTIzMSw2ICsyNjIsMzUgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIHZvaWQgY2gzNDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjX2NmbGFnOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fZnVuY19fKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKworCWlmICh0dHkpIHsKKwkJY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJaWYgKGNfY2ZsYWcgJiBIVVBDTCkgeworCQkJLyogZHJvcCBEVFIgYW5kIFJUUyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQljaDM0MV9zZXRfaGFuZHNoYWtlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKTsKKwkJfQorCX0KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKK30KKworCiAvKiBvcGVuIHRoaXMgZGV2aWNlLCBzZXQgZGVmYXVsdCBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IGNoMzQxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTI0MiwxNCArMzAyLDEzIEBACiAJZGJnKCJjaDM0MV9vcGVuKCkiKTsKIAogCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOwotCXByaXYtPmR0ciA9IDE7Ci0JcHJpdi0+cnRzID0gMTsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSBDSDM0MV9CSVRfUlRTIHwgQ0gzNDFfQklUX0RUUjsKIAogCXIgPSBjaDM0MV9jb25maWd1cmUoc2VyaWFsLT5kZXYsIHByaXYpOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAotCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKHNlcmlhbC0+ZGV2LCBwcml2KTsKKwlyID0gY2gzNDFfc2V0X2hhbmRzaGFrZShzZXJpYWwtPmRldiwgcHJpdi0+bGluZV9jb250cm9sKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKQEAgLTI1Nyw2ICszMTYsMTYgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKKwlkYmcoIiVzIC0gc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXIgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIgorCQkJIiBlcnJvciAlZFxuIiwgX19mdW5jX18sIHIpOworCQljaDM0MV9jbG9zZSh0dHksIHBvcnQsIE5VTEwpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKIAlyID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4odHR5LCBwb3J0LCBmaWxwKTsKIAogb3V0OglyZXR1cm4gcjsKQEAgLTI3MCw0NiArMzM5LDIyNCBAQAogewogCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGJhdWRfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCJjaDM0MV9zZXRfdGVybWlvcygpIik7CiAKKwlpZiAoIXR0eSB8fCAhdHR5LT50ZXJtaW9zKQorCQlyZXR1cm47CisKIAliYXVkX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCi0Jc3dpdGNoIChiYXVkX3JhdGUpIHsKLQljYXNlIDI0MDA6Ci0JY2FzZSA0ODAwOgotCWNhc2UgOTYwMDoKLQljYXNlIDE5MjAwOgotCWNhc2UgMzg0MDA6Ci0JY2FzZSAxMTUyMDA6Ci0JCXByaXYtPmJhdWRfcmF0ZSA9IGJhdWRfcmF0ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGJnKCJSYXRlICVkIG5vdCBzdXBwb3J0ZWQsIHVzaW5nICVkIiwKLQkJCWJhdWRfcmF0ZSwgREVGQVVMVF9CQVVEX1JBVEUpOwotCQlwcml2LT5iYXVkX3JhdGUgPSBERUZBVUxUX0JBVURfUkFURTsKKwlwcml2LT5iYXVkX3JhdGUgPSBiYXVkX3JhdGU7CisKKwlpZiAoYmF1ZF9yYXRlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfY29udHJvbCB8PSAoQ0gzNDFfQklUX0RUUiB8IENIMzQxX0JJVF9SVFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWNoMzQxX3NldF9iYXVkcmF0ZShwb3J0LT5zZXJpYWwtPmRldiwgcHJpdik7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH4oQ0gzNDFfQklUX0RUUiB8IENIMzQxX0JJVF9SVFMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJfQogCi0JY2gzNDFfc2V0X2JhdWRyYXRlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2KTsKKwljaDM0MV9zZXRfaGFuZHNoYWtlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2LT5saW5lX2NvbnRyb2wpOwogCiAJLyogVW5pbXBsZW1lbnRlZDoKIAkgKiAoY2ZsYWcgJiBDU0laRSkgOiBkYXRhIGJpdHMgWzUsIDhdCiAJICogKGNmbGFnICYgUEFSRU5CKSA6IHBhcml0eSB7Tk9ORSwgRVZFTiwgT0REfQogCSAqIChjZmxhZyAmIENTVE9QQikgOiBzdG9wIGJpdHMgWzEsIDJdCiAJICovCit9CiAKLQkgLyogQ29weSBiYWNrIHRoZSBvbGQgaGFyZHdhcmUgc2V0dGluZ3MgKi8KLQkgdHR5X3Rlcm1pb3NfY29weV9odyh0dHktPnRlcm1pb3MsIG9sZF90ZXJtaW9zKTsKLQkgLyogQW5kIHJlLWVuY29kZSB3aXRoIHRoZSBuZXcgYmF1ZCAqLwotCSB0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWRfcmF0ZSwgYmF1ZF9yYXRlKTsKK3N0YXRpYyBpbnQgY2gzNDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGNvbnRyb2w7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDSDM0MV9CSVRfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDSDM0MV9CSVRfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DSDM0MV9CSVRfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DSDM0MV9CSVRfRFRSOworCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNoMzQxX3NldF9oYW5kc2hha2UocG9ydC0+c2VyaWFsLT5kZXYsIGNvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZCBjaDM0MV9yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgKCVkKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlpZiAoYWN0dWFsX2xlbmd0aCA+PSA0KSB7CisJCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oZGF0YVsyXSkpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOworCQlpZiAoKGRhdGFbMV0gJiBDSDM0MV9NVUxUX1NUQVQpKQorCQkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOworfQorCitzdGF0aWMgaW50IHdhaXRfbW9kZW1faW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgYXJnKQoreworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcHJldnN0YXR1czsKKwl1OCBzdGF0dXM7CisJdTggY2hhbmdlZDsKKwl1OCBtdWx0aV9jaGFuZ2UgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2c3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKCFtdWx0aV9jaGFuZ2UpIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJCW11bHRpX2NoYW5nZSA9IHByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQljaGFuZ2VkID0gcHJldnN0YXR1cyBeIHN0YXR1czsKKworCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX1JJKSkgfHwKKwkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY2hhbmdlZCAmIENIMzQxX0JJVF9EU1IpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX0RDRCkpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfQ1RTKSkpIHsKKwkJCXJldHVybiAwOworCQl9CisJCXByZXZzdGF0dXMgPSBzdGF0dXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qc3RhdGljIGludCBjaDM0MV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwqLworc3RhdGljIGludCBjaDM0MV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWRiZygiJXMgKCVkKSBjbWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NNSVdBSVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gd2FpdF9tb2RlbV9pbmZvKHBvcnQsIGFyZyk7CisKKwlkZWZhdWx0OgorCQlkYmcoIiVzIG5vdCBzdXBwb3J0ZWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgY21kKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBjaDM0MV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IG1jcjsKKwl1OCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCWRiZygiJXMgKCVkKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltY3IgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmVzdWx0ID0gKChtY3IgJiBDSDM0MV9CSVRfRFRSKQkJPyBUSU9DTV9EVFIgOiAwKQorCQkgIHwgKChtY3IgJiBDSDM0MV9CSVRfUlRTKQk/IFRJT0NNX1JUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIENIMzQxX0JJVF9DVFMpCT8gVElPQ01fQ1RTIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0RTUikJPyBUSU9DTV9EU1IgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfUkkpCT8gVElPQ01fUkkgIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0RDRCkJPyBUSU9DTV9DRCAgOiAwKTsKKworCWRiZygiJXMgLSByZXN1bHQgPSAleCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IGNoMzQxX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gTlVMTDsKKwlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdjsKKworCXNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCisJLypyZWNvbmZpZ3VyZSBjaDM0MSBzZXJpYWwgcG9ydCBhZnRlciBidXMtcmVzZXQqLworCWNoMzQxX2NvbmZpZ3VyZShkZXYsIHByaXYpOworCisJdXNiX3NlcmlhbF9yZXN1bWUoaW50Zik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoMzQxX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiY2gzNDEiLAogCS5wcm9iZQkJPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kCT0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdXNiX3NlcmlhbF9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZQk9IGNoMzQxX3Jlc2V0X3Jlc3VtZSwKIAkuaWRfdGFibGUJPSBpZF90YWJsZSwKIAkubm9fZHluYW1pY19pZAk9IDEsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0JMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY2gzNDFfZGV2aWNlID0gewpAQCAtMzE3LDEyICs1NjQsMTcgQEAKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gImNoMzQxLXVhcnQiLAogCX0sCi0JLmlkX3RhYmxlICAgICAgICAgPSBpZF90YWJsZSwKLQkudXNiX2RyaXZlciAgICAgICA9ICZjaDM0MV9kcml2ZXIsCi0JLm51bV9wb3J0cyAgICAgICAgPSAxLAotCS5vcGVuICAgICAgICAgICAgID0gY2gzNDFfb3BlbiwKLQkuc2V0X3Rlcm1pb3MgICAgICA9IGNoMzQxX3NldF90ZXJtaW9zLAotCS5hdHRhY2ggICAgICAgICAgID0gY2gzNDFfYXR0YWNoLAorCS5pZF90YWJsZSAgICAgICAgICA9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyICAgICAgICA9ICZjaDM0MV9kcml2ZXIsCisJLm51bV9wb3J0cyAgICAgICAgID0gMSwKKwkub3BlbiAgICAgICAgICAgICAgPSBjaDM0MV9vcGVuLAorCS5jbG9zZSAgICAgICAgICAgICA9IGNoMzQxX2Nsb3NlLAorCS5pb2N0bCAgICAgICAgICAgICA9IGNoMzQxX2lvY3RsLAorCS5zZXRfdGVybWlvcyAgICAgICA9IGNoMzQxX3NldF90ZXJtaW9zLAorCS50aW9jbWdldCAgICAgICAgICA9IGNoMzQxX3Rpb2NtZ2V0LAorCS50aW9jbXNldCAgICAgICAgICA9IGNoMzQxX3Rpb2Ntc2V0LAorCS5yZWFkX2ludF9jYWxsYmFjayA9IGNoMzQxX3JlYWRfaW50X2NhbGxiYWNrLAorCS5hdHRhY2ggICAgICAgICAgICA9IGNoMzQxX2F0dGFjaCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNoMzQxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCA5YjQwODJiLi5lOGQ1MTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0xMSwxMCArMTEsNiBAQAogICogdGhhbmtzIHRvIEthcmwgSGlyYW1vdG8ga2FybEBoaXJhbW90by5vcmcuIFJUU0NUUyBoYXJkd2FyZSBmbG93CiAgKiBjb250cm9sIHRoYW5rcyB0byBNdW5pciBOYXNzYXIgbmFzc2FybXVAcmVhbC10aW1lLmNvbQogICoKLSAqIE91dHN0YW5kaW5nIElzc3VlczoKLSAqICBCdWZmZXJzIGFyZSBub3QgZmx1c2hlZCB3aGVuIHRoZSBwb3J0IGlzIG9wZW5lZC4KLSAqICBNdWx0aXBsZSBjYWxscyB0byB3cml0ZSgpIG1heSBmYWlsIHdpdGggIlJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIgotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMSw3ICsyNyw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wNyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjA4IgogI2RlZmluZSBEUklWRVJfREVTQyAiU2lsaWNvbiBMYWJzIENQMjEwMS9DUDIxMDIgUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyIgogCiAvKgpAQCAtNDIsMTcgKzM4LDIxIEBACiBzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopOwogc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKIAkJCQkJCQlzdHJ1Y3QgZmlsZSopOwotc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICopOworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGludCAqY2ZsYWdwLCB1bnNpZ25lZCBpbnQgKmJhdWRwKTsKIHN0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCiAJCQkJCQkJc3RydWN0IGt0ZXJtaW9zKik7CiBzdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0X3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiwKKwkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEwMV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIAotCiBzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CkBAIC05MSw2ICs5MSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBjNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzNDEpIH0sIC8qIFNpZW1lbnMgTUMzNVBVIEdQUlMgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzQTgpIH0sIC8qIEFtYmVyIFdpcmVsZXNzIEFNQjI1NjAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NkUpIH0sIC8qIEJFSSBVU0IgU2Vuc29yIEludGVyZmFjZSAoVkNQKSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MSkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RjAwMSkgfSwgLyogRWxhbiBEaWdpdGFsIFN5c3RlbXMgVVNCc2NvcGU1MCAqLwpAQCAtMjI1LDcgKzIyNiw3IEBACiAJa2ZyZWUoYnVmKTsKIAogCWlmIChyZXN1bHQgIT0gc2l6ZSkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCisJCWRiZygiJXMgLSBVbmFibGUgdG8gc2VuZCBjb25maWcgcmVxdWVzdCwgIgogCQkJCSJyZXF1ZXN0PTB4JXggc2l6ZT0lZCByZXN1bHQ9JWRcbiIsCiAJCQkJX19mdW5jX18sIHJlcXVlc3QsIHNpemUsIHJlc3VsdCk7CiAJCXJldHVybiAtRVBST1RPOwpAQCAtMjc2LDcgKzI3Nyw3IEBACiAJa2ZyZWUoYnVmKTsKIAogCWlmICgoc2l6ZSA+IDIgJiYgcmVzdWx0ICE9IHNpemUpIHx8IHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gc2VuZCByZXF1ZXN0LCAiCisJCWRiZygiJXMgLSBVbmFibGUgdG8gc2VuZCByZXF1ZXN0LCAiCiAJCQkJInJlcXVlc3Q9MHgleCBzaXplPSVkIHJlc3VsdD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgcmVxdWVzdCwgc2l6ZSwgcmVzdWx0KTsKIAkJcmV0dXJuIC1FUFJPVE87CkBAIC0zMDEsNiArMzAyLDQ3IEBACiAJcmV0dXJuIGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIHJlcXVlc3QsICZkYXRhLCAyKTsKIH0KIAorLyoKKyAqIGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZQorICogUXVhbnRpc2VzIHRoZSBiYXVkIHJhdGUgYXMgcGVyIEFOMjA1IFRhYmxlIDEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUodW5zaWduZWQgaW50IGJhdWQpIHsKKwlpZiAgICAgIChiYXVkIDw9IDU2KSAgICAgICBiYXVkID0gMDsKKwllbHNlIGlmIChiYXVkIDw9IDMwMCkgICAgICBiYXVkID0gMzAwOworCWVsc2UgaWYgKGJhdWQgPD0gNjAwKSAgICAgIGJhdWQgPSA2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjAwKSAgICAgYmF1ZCA9IDEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxODAwKSAgICAgYmF1ZCA9IDE4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDAwKSAgICAgYmF1ZCA9IDI0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0MDAwKSAgICAgYmF1ZCA9IDQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0ODAzKSAgICAgYmF1ZCA9IDQ4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3MjA3KSAgICAgYmF1ZCA9IDcyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA5NjEyKSAgICAgYmF1ZCA9IDk2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDQyOCkgICAgYmF1ZCA9IDE0NDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTYwNjIpICAgIGJhdWQgPSAxNjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE5MjUwKSAgICBiYXVkID0gMTkyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyODkxMikgICAgYmF1ZCA9IDI4ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMzg2MDEpICAgIGJhdWQgPSAzODQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDUxNTU4KSAgICBiYXVkID0gNTEyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjI4MCkgICAgYmF1ZCA9IDU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTgwNTMpICAgIGJhdWQgPSA1NzYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY0MTExKSAgICBiYXVkID0gNjQwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA3NzYwOCkgICAgYmF1ZCA9IDc2ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTE3MDI4KSAgIGJhdWQgPSAxMTUyMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMjkzNDcpICAgYmF1ZCA9IDEyODAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE1Njg2OCkgICBiYXVkID0gMTUzNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjM3ODMyKSAgIGJhdWQgPSAyMzA0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNTQyMzQpICAgYmF1ZCA9IDI1MDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI3MzA2NikgICBiYXVkID0gMjU2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDkxNTIwKSAgIGJhdWQgPSA0NjA4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1NjcxMzgpICAgYmF1ZCA9IDUwMDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDY3MDI1NCkgICBiYXVkID0gNTc2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTA1MzI1NykgIGJhdWQgPSA5MjE2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNDc0NTYwKSAgYmF1ZCA9IDEyMjg4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNDU3NjAwKSAgYmF1ZCA9IDE4NDMyMDA7CisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgYmF1ZCA9IDM2ODY0MDA7CisJcmV0dXJuIGJhdWQ7Cit9CisKIHN0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKQEAgLTMzMSwxMCArMzczLDEyIEBACiAJfQogCiAJLyogQ29uZmlndXJlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZSAqLwotCWNwMjEwMV9nZXRfdGVybWlvcyh0dHkpOworCWNwMjEwMV9nZXRfdGVybWlvcyh0dHksIHBvcnQpOwogCiAJLyogU2V0IHRoZSBEVFIgYW5kIFJUUyBwaW5zIGxvdyAqLwotCWNwMjEwMV90aW9jbXNldCh0dHksIE5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7CisJY3AyMTAxX3Rpb2Ntc2V0X3BvcnQodHR5ID8gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YQorCQkJOiBwb3J0LAorCQlOVUxMLCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNzYsOSArNDIwLDMxIEBACiAgKiBmcm9tIHRoZSBkZXZpY2UsIGNvcnJlY3RzIGFueSB1bnN1cHBvcnRlZCB2YWx1ZXMsIGFuZCBjb25maWd1cmVzIHRoZQogICogdGVybWlvcyBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhlIGRldmljZQogICovCi1zdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3MgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBiYXVkOworCisJaWYgKHR0eSkgeworCQljcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydCh0dHktPmRyaXZlcl9kYXRhLAorCQkJJnR0eS0+dGVybWlvcy0+Y19jZmxhZywgJmJhdWQpOworCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOworCX0KKworCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJCWNmbGFnID0gMDsKKwkJY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQocG9ydCwgJmNmbGFnLCAmYmF1ZCk7CisJfQorfQorCisvKgorICogY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQKKyAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIGNwMjEwMV9nZXRfdGVybWlvcyB3aGljaCBhbHdheXMgdXNlcyBhICZ1c2Jfc2VyaWFsX3BvcnQuCisgKi8KK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50ICpjZmxhZ3AsIHVuc2lnbmVkIGludCAqYmF1ZHApCit7CiAJdW5zaWduZWQgaW50IGNmbGFnLCBtb2RlbV9jdGxbNF07CiAJdW5zaWduZWQgaW50IGJhdWQ7CiAJdW5zaWduZWQgaW50IGJpdHM7CkBAIC0zODgsMTIgKzQ1NCwxMiBAQAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwgJmJhdWQsIDIpOwogCS8qIENvbnZlcnQgdG8gYmF1ZHJhdGUgKi8KIAlpZiAoYmF1ZCkKLQkJYmF1ZCA9IEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQ7CisJCWJhdWQgPSBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUoKEJBVURfUkFURV9HRU5fRlJFUSArIGJhdWQvMikvIGJhdWQpOwogCiAJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19mdW5jX18sIGJhdWQpOworCSpiYXVkcCA9IGJhdWQ7CiAKLQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwotCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gKmNmbGFncDsKIAogCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CiAJY2ZsYWcgJj0gfkNTSVpFOwpAQCAtNDk5LDcgKzU2NSw3IEBACiAJCWNmbGFnICY9IH5DUlRTQ1RTOwogCX0KIAotCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IGNmbGFnOworCSpjZmxhZ3AgPSBjZmxhZzsKIH0KIAogc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC01MTcsNDYgKzU4MywxNiBAQAogCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOwogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCW9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwotCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWJhdWQgPSBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUodHR5X2dldF9iYXVkX3JhdGUodHR5KSk7CiAKIAkvKiBJZiB0aGUgYmF1ZCByYXRlIGlzIHRvIGJlIHVwZGF0ZWQqLwotCWlmIChiYXVkICE9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcykpIHsKLQkJc3dpdGNoIChiYXVkKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSA2MDA6Ci0JCWNhc2UgMTIwMDoKLQkJY2FzZSAxODAwOgotCQljYXNlIDI0MDA6Ci0JCWNhc2UgNDgwMDoKLQkJY2FzZSA3MjAwOgotCQljYXNlIDk2MDA6Ci0JCWNhc2UgMTQ0MDA6Ci0JCWNhc2UgMTkyMDA6Ci0JCWNhc2UgMjg4MDA6Ci0JCWNhc2UgMzg0MDA6Ci0JCWNhc2UgNTU4NTQ6Ci0JCWNhc2UgNTc2MDA6Ci0JCWNhc2UgMTE1MjAwOgotCQljYXNlIDEyNzExNzoKLQkJY2FzZSAyMzA0MDA6Ci0JCWNhc2UgNDYwODAwOgotCQljYXNlIDkyMTYwMDoKLQkJY2FzZSAzNjg2NDAwOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliYXVkID0gOTYwMDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGJhdWQpIHsKLQkJCWRiZygiJXMgLSBTZXR0aW5nIGJhdWQgcmF0ZSB0byAlZCBiYXVkIiwgX19mdW5jX18sCi0JCQkJCWJhdWQpOwotCQkJaWYgKGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfQkFVRFJBVEUsCi0JCQkJCQkoQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZCkpKSB7Ci0JCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3QgIgotCQkJCQkJInN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwotCQkJCWJhdWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpOwotCQkJfQorCWlmIChiYXVkICE9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcykgJiYgYmF1ZCAhPSAwKSB7CisJCWRiZygiJXMgLSBTZXR0aW5nIGJhdWQgcmF0ZSB0byAlZCBiYXVkIiwgX19mdW5jX18sCisJCQkJYmF1ZCk7CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX0JBVURSQVRFLAorCQkJCQkoKEJBVURfUkFURV9HRU5fRlJFUSArIGJhdWQvMikgLyBiYXVkKSkpIHsKKwkJCWRiZygiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJCQliYXVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKTsKIAkJfQogCX0KIAkvKiBSZXBvcnQgYmFjayB0aGUgcmVzdWx0aW5nIGJhdWQgcmF0ZSAqLwpAQCAtNTg4LDE0ICs2MjQsMTQgQEAKIAkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA5IiwgX19mdW5jX18pOwogCQkJYnJlYWs7Ki8KIAkJZGVmYXVsdDoKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgImNwMjEwMSBkcml2ZXIgZG9lcyBub3QgIgorCQkJZGJnKCJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKIAkJCQkJInN1cHBvcnQgdGhlIG51bWJlciBvZiBiaXRzIHJlcXVlc3RlZCwiCiAJCQkJCSIgdXNpbmcgOCBiaXQgbW9kZVxuIik7CiAJCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBkYXRhIGJpdHMgcmVxdWVzdGVkICIKKwkJCWRiZygiTnVtYmVyIG9mIGRhdGEgYml0cyByZXF1ZXN0ZWQgIgogCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjEyLDcgKzY0OCw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJQYXJpdHkgbW9kZSBub3Qgc3VwcG9ydGVkICIKKwkJCWRiZygiUGFyaXR5IG1vZGUgbm90IHN1cHBvcnRlZCAiCiAJCQkJCSJieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjI3LDcgKzY2Myw3IEBACiAJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fZnVuY19fKTsKIAkJfQogCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBzdG9wIGJpdHMgcmVxdWVzdGVkICIKKwkJCWRiZygiTnVtYmVyIG9mIHN0b3AgYml0cyByZXF1ZXN0ZWQgIgogCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwogCX0KIApAQCAtNjYxLDYgKzY5NywxMiBAQAogCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIGNwMjEwMV90aW9jbXNldF9wb3J0KHBvcnQsIGZpbGUsIHNldCwgY2xlYXIpOworfQorCitzdGF0aWMgaW50IGNwMjEwMV90aW9jbXNldF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CiAJdW5zaWduZWQgaW50IGNvbnRyb2wgPSAwOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTY4NSw3ICs3MjcsNiBAQAogCWRiZygiJXMgLSBjb250cm9sID0gMHglLjR4IiwgX19mdW5jX18sIGNvbnRyb2wpOwogCiAJcmV0dXJuIGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9DT05UUk9MLCAmY29udHJvbCwgMik7Ci0KIH0KIAogc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBhZTg0YzMyLi5kY2M4N2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTkzOCwxOCArMTkzOCwxNiBAQAogCQkvKiBDb21wYXJlIG5ldyBsaW5lIHN0YXR1cyB0byB0aGUgb2xkIG9uZSwgc2lnbmFsIGlmIGRpZmZlcmVudC8KIAkJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCiAJCSAgIGFyZSBvbmx5IHByb2Nlc3NlZCBvbmNlLiAgKi8KLQkJaWYgKHByaXYgIT0gTlVMTCkgewotCQkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0ICsgMF0gJgotCQkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7Ci0JCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgewotCQkJCXByaXYtPmRpZmZfc3RhdHVzIHw9Ci0JCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7Ci0JCQl9CisJCWNoYXIgbmV3X3N0YXR1cyA9IGRhdGFbcGFja2V0X29mZnNldCArIDBdICYKKwkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7CisJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7CisJCQlwcml2LT5kaWZmX3N0YXR1cyB8PQorCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJcHJpdi0+cHJldl9zdGF0dXMgPSBuZXdfc3RhdHVzOwogCQl9CiAKLQkJbGVuZ3RoID0gbWluKFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKKwkJbGVuZ3RoID0gbWluX3QodTMyLCBQS1RTWiwgdXJiLT5hY3R1YWxfbGVuZ3RoLXBhY2tldF9vZmZzZXQpLTI7CiAJCWlmIChsZW5ndGggPCAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBwYWNrZXQgbGVuZ3RoOiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgbGVuZ3RoKzIpOwpAQCAtMjI5NCwxMSArMjI5Miw4IEBACiAJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKIAkJCSAgIDAsIDAsCiAJCQkgICBidWYsIDEsIFdEUl9USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRiZygiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fZnVuY19fLAotCQkJICAgIHJldCk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlicmVhazsKIAljYXNlIEZUOFUyMzJBTToKIAljYXNlIEZUMjMyQk06CkBAIC0yMzEzLDE1ICsyMzA4LDExIEBACiAJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCiAJCQkJICAgMCwgcHJpdi0+aW50ZXJmYWNlLAogCQkJCSAgIGJ1ZiwgMiwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGJnKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCi0JCQkgICAgcmV0KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gIChidWZbMF0gJiBGVERJX1NJT19EU1JfTUFTSyA/IFRJT0NNX0RTUiA6IDApIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDgxNDkwOWYuLjlkNTdjYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMTc3LDE0ICsxNzcsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IGksIGMgPSAwLCByOwogCi0jaWZkZWYgQ09ORklHX1BNCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGFuIGF1dG9yZXN1bWUsIGRvbid0IHN1Ym1pdCBVUkJzLgotCSAqIFRoZXkgd2lsbCBiZSBzdWJtaXR0ZWQgaW4gdGhlIG9wZW4gZnVuY3Rpb24gaW5zdGVhZC4KLQkgKi8KLQlpZiAoc2VyaWFsLT5kZXYtPmF1dG9fcG0pCi0JCXJldHVybiAwOwotI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgcG9ydC0+cmVhZF91cmIpIHsKQEAgLTE5Niw2ICsxODgsNyBAQAogCiAJcmV0dXJuIGMgPyAtRUlPIDogMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1bWUpOwogCiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAxMzJiZTc0Li5lZjkyMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTc4LDYgKzc4LDcgQEAKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkIGlwYXFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGlwYXFfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCBpcGFxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCkBAIC01NzIsMTUgKzU3MywxMCBAQAogCS5kZXNjcmlwdGlvbiA9CQkiUG9ja2V0UEMgUERBIiwKIAkudXNiX2RyaXZlciA9IAkJJmlwYXFfZHJpdmVyLAogCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAotCS8qCi0JICogc29tZSBkZXZpY2VzIGhhdmUgYW4gZXh0cmEgZW5kcG9pbnQsIHdoaWNoCi0JICogbXVzdCBiZSBpZ25vcmVkIGFzIGl0IHdvdWxkIG1ha2UgdGhlIGNvcmUKLQkgKiBjcmVhdGUgYSBzZWNvbmQgcG9ydCB3aGljaCBvb3BzZXMgd2hlbiB1c2VkCi0JICovCi0JLm51bV9wb3J0cyA9CQkxLAogCS5vcGVuID0JCQlpcGFxX29wZW4sCiAJLmNsb3NlID0JCWlwYXFfY2xvc2UsCiAJLmF0dGFjaCA9CQlpcGFxX3N0YXJ0dXAsCisJLmNhbGNfbnVtX3BvcnRzID0JaXBhcV9jYWxjX251bV9wb3J0cywKIAkuc2h1dGRvd24gPQkJaXBhcV9zaHV0ZG93biwKIAkud3JpdGUgPQkJaXBhcV93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQlpcGFxX3dyaXRlX3Jvb20sCkBAIC05NTYsMTQgKzk1Miw0OSBAQAogfQogCiAKK3N0YXRpYyBpbnQgaXBhcV9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCS8qCisJICogc29tZSBkZXZpY2VzIGhhdmUgMyBlbmRwb2ludHMsIHRoZSAzcmQgb2Ygd2hpY2gKKwkgKiBtdXN0IGJlIGlnbm9yZWQgYXMgaXQgd291bGQgbWFrZSB0aGUgY29yZQorCSAqIGNyZWF0ZSBhIHNlY29uZCBwb3J0IHdoaWNoIG9vcHNlcyB3aGVuIHVzZWQKKwkgKi8KKwlpbnQgaXBhcV9udW1fcG9ydHMgPSAxOworCisJZGJnKCIlcyAtIG51bWJlcm9mZW5kcG9pbnRzOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJKGludClzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwkvKgorCSAqIGEgZmV3IGRldmljZXMgaGF2ZSA0IGVuZHBvaW50cywgc2VlbWluZ2x5IFlha3VtYSBkZXZpY2VzLAorCSAqIGFuZCB3ZSBuZWVkIHRoZSBzZWNvbmQgcGFpciwgc28gbGV0IHRoZW0gaGF2ZSAyIHBvcnRzCisJICoKKwkgKiBUT0RPOiBjYW4gd2UgZHJvcCBwb3J0IDEgPworCSAqLworCWlmIChzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyA+IDMpIHsKKwkJaXBhcV9udW1fcG9ydHMgPSAyOworCX0KKworCXJldHVybiBpcGFxX251bV9wb3J0czsKK30KKworCiBzdGF0aWMgaW50IGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCS8qCisJCSAqIEZJWE1FOiBIUCBpUGFxIHJ4MzcxNSwgcG9zc2libHkgb3RoZXJzLCBoYXZlIDEgY29uZmlnIHRoYXQKKwkJICogaXMgbGFiZWxlZCBhcyAyCisJCSAqLworCiAJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisJZGJnKCIlcyAtIGlQQVEgbW9kdWxlIGNvbmZpZ3VyZWQgZm9yICVkIHBvcnRzIiwKKwkJX19GVU5DVElPTl9fLCBzZXJpYWwtPm51bV9wb3J0cyk7CisKIAlyZXR1cm4gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24oc2VyaWFsLT5kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCA5ODc4YzBmLi4wMGRhYThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTE1MDcsNyArMTUwNyw3IEBACiAJfSBlbHNlIHsKIAkJZGV2X3dhcm4oJnNlcmlhbC0+aW50ZXJmYWNlLT5kZXYsCiAJCQkgInVuc3VwcG9ydGVkIGVuZHBvaW50IHR5cGUgJXhcbiIsCi0JCQkgZXBfZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spOworCQkJIHVzYl9lbmRwb2ludF90eXBlKGVwX2Rlc2MpKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCmluZGV4IGNlYTMyNmYuLjgzOTU4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPcHRpY29uIFVTQiBiYXJjb2RlIHRvIHNlcmlhbCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IC0gMjAwOSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA4IC0gMjAwOSBOb3ZlbGwgSW5jLgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CkBAIC00MCw4ICs0MSwxMiBAQAogCWJvb2wgdGhyb3R0bGVkOwogCWJvb2wgYWN0dWFsbHlfdGhyb3R0bGVkOwogCWJvb2wgcnRzOworCWludCBvdXRzdGFuZGluZ191cmJzOwogfTsKIAorLyogbWF4IG51bWJlciBvZiB3cml0ZSB1cmJzIGluIGZsaWdodCAqLworI2RlZmluZSBVUkJfVVBQRVJfTElNSVQJNAorCiBzdGF0aWMgdm9pZCBvcHRpY29uX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1cmItPmNvbnRleHQ7CkBAIC0xMDYsNyArMTExLDYgQEAKIAkJCQkJcHJpdi0+cnRzID0gZmFsc2U7CiAJCQkJZWxzZQogCQkJCQlwcml2LT5ydHMgPSB0cnVlOwotCQkJCS8qIEZJWE1FIGNoYW5nZSB0aGUgUlRTIGxldmVsICovCiAJCQl9IGVsc2UgewogCQkJZGV2X2RiZygmcHJpdi0+dWRldi0+ZGV2LAogCQkJCSJVbmtub3duIGRhdGEgcGFja2V0IHJlY2VpdmVkIGZyb20gdGhlIGRldmljZToiCkBAIC0xODgsNiArMTkyLDEyMCBAQAogCXVzYl9raWxsX3VyYihwcml2LT5idWxrX3JlYWRfdXJiKTsKIH0KIAorc3RhdGljIHZvaWQgb3B0aWNvbl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXJiLT5jb250ZXh0OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaWYgKHN0YXR1cykKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwktLXByaXYtPm91dHN0YW5kaW5nX3VyYnM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocHJpdi0+cG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5vdXRzdGFuZGluZ191cmJzID4gVVJCX1VQUEVSX0xJTUlUKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisJcHJpdi0+b3V0c3RhbmRpbmdfdXJicysrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWJ1ZmZlciA9IGttYWxsb2MoY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQljb3VudCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfbm9fYnVmZmVyOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOworCQljb3VudCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfbm9fdXJiOworCX0KKworCW1lbWNweShidWZmZXIsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGJ1ZmZlcik7CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCSAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgYnVmZmVyLCBjb3VudCwgb3B0aWNvbl93cml0ZV9idWxrX2NhbGxiYWNrLCBwcml2KTsKKworCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCSAgICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQljb3VudCA9IHN0YXR1czsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCisJICogcmVhbGx5IGZyZWUgaXQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0ICovCisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwlyZXR1cm4gY291bnQ7CitlcnJvcjoKKwl1c2JfZnJlZV91cmIodXJiKTsKK2Vycm9yX25vX3VyYjoKKwlrZnJlZShidWZmZXIpOworZXJyb3Jfbm9fYnVmZmVyOgorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLS1wcml2LT5vdXRzdGFuZGluZ191cmJzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qCisJICogV2UgcmVhbGx5IGNhbiB0YWtlIGFsbW9zdCBhbnl0aGluZyB0aGUgdXNlciB0aHJvd3MgYXQgdXMKKwkgKiBidXQgbGV0J3MgcGljayBhIG5pY2UgYmlnIG51bWJlciB0byB0ZWxsIHRoZSB0dHkKKwkgKiBsYXllciB0aGF0IHdlIGhhdmUgbG90cyBvZiBmcmVlIHNwYWNlLCB1bmxlc3Mgd2UgZG9uJ3QuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCAqIDIgLyAzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDIwNDg7Cit9CisKIHN0YXRpYyB2b2lkIG9wdGljb25fdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTIyMyw2ICszNDEsNjcgQEAKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIH0KIAorc3RhdGljIGludCBvcHRpY29uX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5ydHMpCisJCXJlc3VsdCA9IFRJT0NNX1JUUzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gJXgiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2LAorCQkJICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzZXJpYWwpCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZ0bXAsIDB4MDAsIHNpemVvZih0bXApKTsKKworCS8qIGZha2UgZW11bGF0ZSBhIDE2NTUwIHVhcnQgdG8gbWFrZSB1c2Vyc3BhY2UgY29kZSBoYXBweSAqLworCXRtcC50eXBlCQk9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lCQk9IHByaXYtPnNlcmlhbC0+bWlub3I7CisJdG1wLnBvcnQJCT0gMDsKKwl0bXAuaXJxCQkJPSAwOworCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUJPSAxMDI0OworCXRtcC5iYXVkX2Jhc2UJCT0gOTYwMDsKKwl0bXAuY2xvc2VfZGVsYXkJCT0gNSpIWjsKKwl0bXAuY2xvc2luZ193YWl0CT0gMzAqSFo7CisKKwlpZiAoY29weV90b191c2VyKHNlcmlhbCwgJnRtcCwgc2l6ZW9mKCpzZXJpYWwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aWNvbl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKHByaXYsCisJCQkJICAgICAgIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKIHN0YXRpYyBpbnQgb3B0aWNvbl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdjsKQEAgLTMwNiwxMSArNDg1LDM3IEBACiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOwogfQogCitzdGF0aWMgaW50IG9wdGljb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCXVzYl9raWxsX3VyYihwcml2LT5idWxrX3JlYWRfdXJiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpY29uX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJaW50IHJlc3VsdDsKKworCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKKwlpZiAocG9ydC0+cG9ydC5jb3VudCkKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+YnVsa19yZWFkX3VyYiwgR0ZQX05PSU8pOworCWVsc2UKKwkJcmVzdWx0ID0gMDsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb3B0aWNvbl9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJIm9wdGljb24iLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQlvcHRpY29uX3N1c3BlbmQsCisJLnJlc3VtZSA9CW9wdGljb25fcmVzdW1lLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwpAQCAtMzI2LDkgKzUzMSwxMyBAQAogCS5hdHRhY2ggPQkJb3B0aWNvbl9zdGFydHVwLAogCS5vcGVuID0JCQlvcHRpY29uX29wZW4sCiAJLmNsb3NlID0JCW9wdGljb25fY2xvc2UsCisJLndyaXRlID0JCW9wdGljb25fd3JpdGUsCisJLndyaXRlX3Jvb20gPSAJCW9wdGljb25fd3JpdGVfcm9vbSwKIAkuc2h1dGRvd24gPQkJb3B0aWNvbl9zaHV0ZG93biwKIAkudGhyb3R0bGUgPSAJCW9wdGljb25fdGhyb3R0bGUsCiAJLnVudGhyb3R0bGUgPQkJb3B0aWNvbl91bnRocm90dGxlLAorCS5pb2N0bCA9CQlvcHRpY29uX2lvY3RsLAorCS50aW9jbWdldCA9CQlvcHRpY29uX3Rpb2NtZ2V0LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb3B0aWNvbl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNjFlYmRkYzQuLmQ1NjBjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTYyLDYgKzYyLDggQEAKIHN0YXRpYyBpbnQgIG9wdGlvbl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIGludCAgb3B0aW9uX3NlbmRfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CitzdGF0aWMgaW50ICBvcHRpb25fcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogCiAvKiBWZW5kb3IgYW5kIHByb2R1Y3QgSURzICovCiAjZGVmaW5lIE9QVElPTl9WRU5ET1JfSUQJCQkweDBBRjAKQEAgLTUyMyw2ICs1MjUsOCBAQAogCS5uYW1lICAgICAgID0gIm9wdGlvbiIsCiAJLnByb2JlICAgICAgPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kICAgID0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gdXNiX3NlcmlhbF9yZXN1bWUsCiAJLmlkX3RhYmxlICAgPSBvcHRpb25faWRzLAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwpAQCAtNTUxLDYgKzU1NSw4IEBACiAJLmF0dGFjaCAgICAgICAgICAgID0gb3B0aW9uX3N0YXJ0dXAsCiAJLnNodXRkb3duICAgICAgICAgID0gb3B0aW9uX3NodXRkb3duLAogCS5yZWFkX2ludF9jYWxsYmFjayA9IG9wdGlvbl9pbnN0YXRfY2FsbGJhY2ssCisJLnN1c3BlbmQgICAgICAgICAgID0gb3B0aW9uX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgICAgID0gb3B0aW9uX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7CkBAIC04MjEsMTAgKzgyNywxMCBAQAogCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwgcmVxX3BrdC0+YlJlcXVlc3QpOwogCQl9CiAJfSBlbHNlCi0JCWRiZygiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWVycigiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nIElSUSBkYXRhICovCi0JaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CisJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOICYmIHN0YXR1cyAhPSAtRU5PRU5UKSB7CiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIpCkBAIC04NDMsNyArODQ5LDYgQEAKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0KIAlmb3IgKGkgPSAwOyBpIDwgTl9PVVRfVVJCOyBpKyspIHsKIAkJdGhpc191cmIgPSBwb3J0ZGF0YS0+b3V0X3VyYnNbaV07CiAJCWlmICh0aGlzX3VyYiAmJiAhdGVzdF9iaXQoaSwgJnBvcnRkYXRhLT5vdXRfYnVzeSkpCkBAIC0xMTA1LDE0ICsxMTEwLDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIG9wdGlvbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0KIAkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKQEAgLTExMjIsNiArMTEyNSwxNyBAQAogCQlmb3IgKGogPSAwOyBqIDwgTl9PVVRfVVJCOyBqKyspCiAJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPm91dF91cmJzW2pdKTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpLCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCXN0b3BfcmVhZF93cml0ZV91cmJzKHNlcmlhbCk7CiAKIAkvKiBOb3cgZnJlZSB0aGVtICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKQEAgLTExNTIsNiArMTE2Niw2NiBAQAogCX0KIH0KIAorc3RhdGljIGludCBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlkYmcoIiVzIGVudGVyZWQiLCBfX2Z1bmNfXyk7CisJc3RvcF9yZWFkX3dyaXRlX3VyYnMoc2VyaWFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgZXJyLCBpLCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKworCWRiZygiJXMgZW50ZXJlZCIsIF9fZnVuY19fKTsKKwkvKiBnZXQgdGhlIGludGVycnVwdCBVUkJzIHJlc3VibWl0dGVkIHVuY29uZGl0aW9uYWxseSAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgeworCQkJZGJnKCIlczogTm8gaW50ZXJydXB0IFVSQiBmb3IgcG9ydCAlZFxuIiwgX19mdW5jX18sIGkpOworCQkJY29udGludWU7CisJCX0KKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPKTsKKwkJZGJnKCJTdWJtaXR0ZWQgaW50ZXJydXB0IFVSQiBmb3IgcG9ydCAlZCAocmVzdWx0ICVkKSIsIGksIGVycik7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgaW50ZXJydXB0IFVSQiBvZiBwb3J0JWQiLAorCQkJCSBfX2Z1bmNfXywgZXJyLCBpKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQkvKiB3YWxrIGFsbCBwb3J0cyAqLworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCisJCS8qIHNraXAgY2xvc2VkIHBvcnRzICovCisJCWlmICghcG9ydC0+cG9ydC5jb3VudCkgeworCQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKSB7CisJCQl1cmIgPSBwb3J0ZGF0YS0+aW5fdXJic1tqXTsKKwkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX05PSU8pOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgYnVsayBVUkIgJWQiLAorCQkJCQkgX19mdW5jX18sIGVyciwgaSk7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmQ2YjBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBRdWFsY29tbSBTZXJpYWwgVVNCIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoYykgMjAwOCBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQuCisgKglDb3B5cmlnaHQgKGMpIDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCUNvcHlyaWdodCAoYykgMjAwOSBOb3ZlbGwgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJRdWFsY29tbSBJbmMiCisjZGVmaW5lIERSSVZFUl9ERVNDICJRdWFsY29tbSBVU0IgU2VyaWFsIGRyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMTEpfSwJLyogQWNlciBHb2JpIFFETCBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIxMil9LAkvKiBBY2VyIEdvYmkgTW9kZW0gRGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDFmMWQpfSwJLyogSFAgdW4yNDAwIEdvYmkgTW9kZW0gRGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDIwMWQpfSwJLyogSFAgdW4yNDAwIEdvYmkgUURMIERldmljZSAqLworCXsgfQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBxY2RyaXZlciA9IHsKKwkubmFtZQkJCT0gInFjc2VyaWFsIiwKKwkucHJvYmUJCQk9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKKwkuc3VzcGVuZAkJPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gdXNiX3NlcmlhbF9yZXN1bWUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kCT0gdHJ1ZSwKK307CisKK3N0YXRpYyBpbnQgcWNwcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJX191OCBuaW50ZjsKKwlfX3U4IGlmbnVtOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCW5pbnRmID0gc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKKwlkYmcoIk51bSBJbnRlcmZhY2VzID0gJWQiLCBuaW50Zik7CisJaWZudW0gPSBzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlkYmcoIlRoaXMgSW50ZXJmYWNlID0gJWQiLCBpZm51bSk7CisKKwlzd2l0Y2ggKG5pbnRmKSB7CisJY2FzZSAxOgorCQkvKiBRREwgbW9kZSAqLworCQlpZiAoc2VyaWFsLT5pbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nID09IDIpIHsKKwkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisKKwkJCWludGYgPSAmc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmdbMV07CisJCQlpZiAoaW50Zi0+ZGVzYy5iTnVtRW5kcG9pbnRzID09IDIpIHsKKwkJCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oJmludGYtPmVuZHBvaW50WzBdLmRlc2MpICYmCisJCQkJICAgIHVzYl9lbmRwb2ludF9pc19idWxrX291dCgmaW50Zi0+ZW5kcG9pbnRbMV0uZGVzYykpIHsKKwkJCQkJZGJnKCJRREwgcG9ydCBmb3VuZCIpOworCQkJCQlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShzZXJpYWwtPmRldiwgaWZudW0sIDEpOworCQkJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCQkJCQkiQ291bGQgbm90IHNldCBpbnRlcmZhY2UsIGVycm9yICVkXG4iLAorCQkJCQkJCXJldHZhbCk7CisJCQkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCQl9CisJCQkJCXJldHVybiByZXR2YWw7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSA0OgorCQkvKiBDb21wb3NpdGUgbW9kZSAqLworCQlpZiAoaWZudW0gPT0gMikgeworCQkJZGJnKCJNb2RlbSBwb3J0IGZvdW5kIik7CisJCQlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShzZXJpYWwtPmRldiwgaWZudW0sIDApOworCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiQ291bGQgbm90IHNldCBpbnRlcmZhY2UsIGVycm9yICVkXG4iLAorCQkJCQlyZXR2YWwpOworCQkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQl9CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSJ1bmtub3duIG51bWJlciBvZiBpbnRlcmZhY2VzOiAlZFxuIiwgbmludGYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHFjZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciAgICAgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgICAgICA9ICJxY3NlcmlhbCIsCisJfSwKKwkuZGVzY3JpcHRpb24gICAgICAgICA9ICJRdWFsY29tbSBVU0IgbW9kZW0iLAorCS5pZF90YWJsZSAgICAgICAgICAgID0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgICAgICAgICAgPSAmcWNkcml2ZXIsCisJLm51bV9wb3J0cyAgICAgICAgICAgPSAxLAorCS5wcm9iZSAgICAgICAgICAgICAgID0gcWNwcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFjaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZxY2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmcWNkcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZxY2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxY2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcWNkcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcWNkZXZpY2UpOworfQorCittb2R1bGVfaW5pdChxY2luaXQpOworbW9kdWxlX2V4aXQocWNleGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzY2JjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIFN5bWJvbCBVU0IgYmFyY29kZSB0byBzZXJpYWwgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm92ZWxsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDVlMCwgMHgwNjAwKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbGwgb2YgdGhlIGluZGl2aWR1YWwgZGV2aWNlIGluZm9ybWF0aW9uICovCitzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBjaGFyICppbnRfYnVmZmVyOworCXN0cnVjdCB1cmIgKmludF91cmI7CisJaW50IGJ1ZmZlcl9zaXplOworCXU4IGJJbnRlcnZhbDsKKwl1OCBpbnRfYWRkcmVzczsKKwlzcGlubG9ja190IGxvY2s7CS8qIHByb3RlY3RzIHRoZSBmb2xsb3dpbmcgZmxhZ3MgKi8KKwlib29sIHRocm90dGxlZDsKKwlib29sIGFjdHVhbGx5X3Rocm90dGxlZDsKKwlib29sIHJ0czsKK307CisKK3N0YXRpYyB2b2lkIHN5bWJvbF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHByaXYtPnBvcnQ7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHJlc3VsdDsKKwlpbnQgYXZhaWxhYmxlX3Jvb20gPSAwOworCWludCBkYXRhX2xlbmd0aDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCSAgICAgIGRhdGEpOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDEpIHsKKwkJZGF0YV9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGggLSAxOworCisJCS8qCisJCSAqIERhdGEgZnJvbSB0aGUgZGV2aWNlIGNvbWVzIHdpdGggYSAxIGJ5dGUgaGVhZGVyOgorCQkgKgorCQkgKiA8c2l6ZSBvZiBkYXRhPmRhdGEuLi4KKwkJICogCVRoaXMgaXMgcmVhbCBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHR0eSBsYXllcgorCQkgKiB3ZSBwcmV0dHkgbXVjaCBqdXN0IGlnbm9yZSB0aGUgc2l6ZSBhbmQgc2VuZCBldmVyeXRoaW5nCisJCSAqIGVsc2UgdG8gdGhlIHR0eSBsYXllci4KKwkJICovCisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQlpZiAodHR5KSB7CisJCQlhdmFpbGFibGVfcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwKKwkJCQkJCQlkYXRhX2xlbmd0aCk7CisJCQlpZiAoYXZhaWxhYmxlX3Jvb20pIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgJmRhdGFbMV0sCisJCQkJCQkgICAgICAgYXZhaWxhYmxlX3Jvb20pOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKKwkJCSJJbXByb3BlciBhbW1vdW50IG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLCAiCisJCQkiJWQgYnl0ZXMiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0KKworZXhpdDoKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkIGlmIHdlIHNob3VsZCAqLworCWlmICghcHJpdi0+dGhyb3R0bGVkKSB7CisJCXVzYl9maWxsX2ludF91cmIocHJpdi0+aW50X3VyYiwgcHJpdi0+dWRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUocHJpdi0+dWRldiwKKwkJCQkgCQlwcml2LT5pbnRfYWRkcmVzcyksCisJCQkJIHByaXYtPmludF9idWZmZXIsIHByaXYtPmJ1ZmZlcl9zaXplLAorCQkJCSBzeW1ib2xfaW50X2NhbGxiYWNrLCBwcml2LCBwcml2LT5iSW50ZXJ2YWwpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSAgICAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9IGVsc2UKKwkJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gdHJ1ZTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCXN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+cG9ydCA9IHBvcnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBGb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEKKwkgKiB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2UKKwkgKiB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCWlmICh0dHkpCisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKHByaXYtPmludF91cmIsIHByaXYtPnVkZXYsCisJCQkgdXNiX3JjdmludHBpcGUocHJpdi0+dWRldiwgcHJpdi0+aW50X2FkZHJlc3MpLAorCQkJIHByaXYtPmludF9idWZmZXIsIHByaXYtPmJ1ZmZlcl9zaXplLAorCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJdXNiX2tpbGxfdXJiKHByaXYtPmludF91cmIpOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcHJpdi0+aW50X3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IHN5bWJvbF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisKKwkvKgorCSAqIFJpZ2h0IG5vdyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21tYW5kcworCSAqIG1vc3QgdXNlcnNwYWNlIHRvb2xzIHdhbnQgdG8gc2VlIGZvciB0aGlzIGRyaXZlciwKKwkgKiBzbyBqdXN0IGxvZyB0aGUgdGhpbmdzLgorCSAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DU0VSR0VUTFNSOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ1NFUkdFVExTUlxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ0dTRVJJQUw6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DR1NFUklBTFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IFRJT0NNSVdBSVRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ0dJQ09VTlRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IHVua25vd24gKCVkKVxuIiwgX19mdW5jX18sIGNtZCk7CisJfQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisKKwkvKiBUT0RPICovCisJLyogcHJvYmFibHkganVzdCBuZWVkIHRvIHNoYWRvdyB3aGF0ZXZlciB3YXMgc2VudCB0byB1cyBoZXJlICovCisJZGV2X2luZm8oZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW1ib2xfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvcnQtPmRldjsKKworCS8qIFRPRE8gKi8KKwkvKiBwcm9iYWJseSBqdXN0IG5lZWQgdG8gc2hhZG93IHdoYXRldmVyIHdhcyBzZW50IHRvIHVzIGhlcmUgKi8KKwlkZXZfaW5mbyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bWJvbF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisJaW50IGk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJYm9vbCBpbnRfaW5fZm91bmQgPSBmYWxzZTsKKworCS8qIGNyZWF0ZSBvdXIgcHJpdmF0ZSBzZXJpYWwgc3RydWN0dXJlICovCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+c2VyaWFsID0gc2VyaWFsOworCXByaXYtPnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJcHJpdi0+dWRldiA9IHNlcmlhbC0+ZGV2OworCisJLyogZmluZCBvdXIgaW50ZXJydXB0IGVuZHBvaW50ICovCisJaW50ZiA9IHNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCisJCWVuZHBvaW50ID0gJmludGYtPmVuZHBvaW50W2ldLmRlc2M7CisJCWlmICghdXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpCisJCQljb250aW51ZTsKKworCQlwcml2LT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5pbnRfdXJiKSB7CisJCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlwcml2LT5idWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgKiAyOworCQlwcml2LT5pbnRfYnVmZmVyID0ga21hbGxvYyhwcml2LT5idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+aW50X2J1ZmZlcikgeworCQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcHJpdi0+aW50X2FkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcHJpdi0+YkludGVydmFsID0gZW5kcG9pbnQtPmJJbnRlcnZhbDsKKworCQkvKiBzZXQgdXAgb3VyIGludCB1cmIgKi8KKwkJdXNiX2ZpbGxfaW50X3VyYihwcml2LT5pbnRfdXJiLCBwcml2LT51ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZShwcml2LT51ZGV2LAorCQkJCSAJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgcHJpdi0+aW50X2J1ZmZlciwgcHJpdi0+YnVmZmVyX3NpemUsCisJCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisKKwkJaW50X2luX2ZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJCX0KKworCWlmICghaW50X2luX2ZvdW5kKSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwKKwkJCSJFcnJvciAtIHRoZSBwcm9wZXIgZW5kcG9pbnRzIHdlcmUgbm90IGZvdW5kIVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHByaXYpOworCXJldHVybiAwOworCitlcnJvcjoKKwl1c2JfZnJlZV91cmIocHJpdi0+aW50X3VyYik7CisJa2ZyZWUocHJpdi0+aW50X2J1ZmZlcik7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCXVzYl9raWxsX3VyYihwcml2LT5pbnRfdXJiKTsKKwl1c2JfZnJlZV91cmIocHJpdi0+aW50X3VyYik7CisJa2ZyZWUocHJpdi0+aW50X2J1ZmZlcik7CisJa2ZyZWUocHJpdik7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3ltYm9sX2RyaXZlciA9IHsKKwkubmFtZSA9CQkJInN5bWJvbCIsCisJLnByb2JlID0JCXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQkJdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBzeW1ib2xfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkic3ltYm9sIiwKKwl9LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9IAkJJnN5bWJvbF9kcml2ZXIsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJc3ltYm9sX3N0YXJ0dXAsCisJLm9wZW4gPQkJCXN5bWJvbF9vcGVuLAorCS5jbG9zZSA9CQlzeW1ib2xfY2xvc2UsCisJLnNodXRkb3duID0JCXN5bWJvbF9zaHV0ZG93biwKKwkudGhyb3R0bGUgPSAJCXN5bWJvbF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlzeW1ib2xfdW50aHJvdHRsZSwKKwkuaW9jdGwgPSAJCXN5bWJvbF9pb2N0bCwKKwkudGlvY21nZXQgPSAJCXN5bWJvbF90aW9jbWdldCwKKwkudGlvY21zZXQgPSAJCXN5bWJvbF90aW9jbXNldCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN5bWJvbF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZzeW1ib2xfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzeW1ib2xfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzeW1ib2xfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChzeW1ib2xfaW5pdCk7Cittb2R1bGVfZXhpdChzeW1ib2xfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBjZmNmZDVhLi43NDJhNWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTIwNCw2ICsyMDQsMTEgQEAKIAkJZ290byBiYWlsb3V0X2tyZWZfcHV0OwogCX0KIAorCWlmIChwb3J0LT5zZXJpYWwtPmRpc2Nvbm5lY3RlZCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CisJfQorCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKSB7CiAJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBiYWlsb3V0X2tyZWZfcHV0OwpAQCAtMTA2Nyw2ICsxMDcyLDggQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCWludCBpLCByID0gMDsKIAorCXNlcmlhbC0+c3VzcGVuZGluZyA9IDE7CisKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlpZiAocG9ydCkKQEAgLTEwODMsMTAgKzEwOTAsMTUgQEAKIGludCB1c2Jfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcnY7CiAKKwlzZXJpYWwtPnN1c3BlbmRpbmcgPSAwOwogCWlmIChzZXJpYWwtPnR5cGUtPnJlc3VtZSkKLQkJcmV0dXJuIHNlcmlhbC0+dHlwZS0+cmVzdW1lKHNlcmlhbCk7Ci0JcmV0dXJuIDA7CisJCXJ2ID0gc2VyaWFsLT50eXBlLT5yZXN1bWUoc2VyaWFsKTsKKwllbHNlCisJCXJ2ID0gdXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZShzZXJpYWwpOworCisJcmV0dXJuIHJ2OwogfQogRVhQT1JUX1NZTUJPTCh1c2Jfc2VyaWFsX3Jlc3VtZSk7CiAKQEAgLTEyMjIsNyArMTIzNCw2IEBACiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHJlYWRfYnVsa19jYWxsYmFjayk7CiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHdyaXRlX2J1bGtfY2FsbGJhY2spOwogCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBzaHV0ZG93bik7Ci0Jc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHJlc3VtZSk7CiB9CiAKIGludCB1c2Jfc2VyaWFsX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyKQpAQCAtMTIzMCw2ICsxMjQxLDkgQEAKIAkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCiAJaW50IHJldHZhbDsKIAorCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlmaXh1cF9nZW5lcmljKGRyaXZlcik7CiAKIAlpZiAoIWRyaXZlci0+ZGVzY3JpcHRpb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKaW5kZXggOWRmNjg4Ny4uOGEzNzJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpAQCAtMiw4ICsyLDggQEAKICMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb24KICMKIAotY29tbWVudCAiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsiCi1jb21tZW50ICJzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK2NvbW1lbnQgIk5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkiCitjb21tZW50ICJhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbyIKIAlkZXBlbmRzIG9uIFVTQgogCiBjb25maWcgVVNCX1NUT1JBR0UKQEAgLTMyLDIxICszMiwyNSBAQAogCSAgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCiAKIGNvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCCi0JYm9vbCAiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0IgorCXRyaXN0YXRlICJEYXRhZmFiIENvbXBhY3QgRmxhc2ggUmVhZGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNlcnRhaW4gRGF0YWZhYiBDb21wYWN0Rmxhc2ggcmVhZGVycy4KIAkgIERhdGFmYWIgaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuZGF0YWZhYnVzYS5jb20vPi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWRhdGFmYWIuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9GUkVFQ09NCi0JYm9vbCAiRnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIkZyZWVjb20gVVNCL0FUQVBJIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IgdG8gSURFL0FUQVBJIGFkYXB0b3IuCiAJICBGcmVlY29tIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LmZyZWVjb20uZGUvPi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWZyZWVjb20uCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9JU0QyMDAKLQlib29sICJJU0QtMjAwIFVTQi9BVEEgQnJpZGdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIE1hc3MgU3RvcmUgZGV2aWNlcyBiYXNlZApAQCAtNjEsOCArNjUsMTAgQEAKIAkgIC0gQ3lRJ3ZlIENRODA2MEEgQ0RSVyBkcml2ZQogCSAgLSBQbGFuZXggZVh0cmVtZSBEcml2ZSBSWC0yNUhVIFVTQi1JREUgY2FibGUgKG5vdCBtb2RlbCBSWC0yNVUpCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1pc2QyMDAuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9VU0JBVAotCWJvb2wgIlVTQkFUL1VTQkFUMDItYmFzZWQgc3RvcmFnZSBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHN0b3JhZ2UgZGV2aWNlcwpAQCAtODIsMzAgKzg4LDM4IEBACiAJICAtIFJDQSBMWVJBIE1QMyBwb3J0YWJsZQogCSAgLSBTYW5kaXNrIEltYWdlTWF0ZSBTRERSLTA1YgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtdXNiYXQuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9TRERSMDkKLQlib29sICJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhLCBpbmNsdWRpbmcgRFBDTSkgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiU2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgU2FuZGlzayBTRERSLTA5CiAJICBTbWFydE1lZGlhIHJlYWRlciBpbiB0aGUgVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIuCiAJICBBbHNvIHdvcmtzIGZvciB0aGUgTWljcm90ZWNoIFppbyEgQ29tcGFjdEZsYXNoL1NtYXJ0TWVkaWEgcmVhZGVyLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtc2RkcjA5LgorCiBjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1Ci0JYm9vbCAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBTYW5kaXNrIFNERFItNTUKIAkgIFNtYXJ0TWVkaWEgcmVhZGVyIGluIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLXNkZHI1NS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0pVTVBTSE9UCi0JYm9vbCAiTGV4YXIgSnVtcHNob3QgQ29tcGFjdCBGbGFzaCBSZWFkZXIiCisJdHJpc3RhdGUgIkxleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90CiAJICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWp1bXBzaG90LgorCiBjb25maWcgVVNCX1NUT1JBR0VfQUxBVURBCi0JYm9vbCAiT2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0IgorCXRyaXN0YXRlICJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMApAQCAtMTE0LDggKzEyOCwxMCBAQAogCSAgVGhlc2UgZGV2aWNlcyBhcmUgYmFzZWQgb24gdGhlIEFsYXVkYSBjaGlwIGFuZCBzdXBwb3J0IGJvdGgKIAkgIFhEIGFuZCBTbWFydE1lZGlhIGNhcmRzLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtYWxhdWRhLgorCiBjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0gKLQlib29sICJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXMiCisJdHJpc3RhdGUgIlN1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlcyIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJZGVwZW5kcyBvbiBJTlBVVD15IHx8IElOUFVUPVVTQl9TVE9SQUdFCiAJaGVscApAQCAtMTI3LDggKzE0MywxMCBAQAogCSAgdGhpcyBpbnB1dCBpbiBhbnkga2V5YmluZGluZyBzb2Z0d2FyZS4gKGUuZy4gZ25vbWUncyBrZXlib2FyZCBzaG9ydC0KIAkgIGN1dHMpCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1vbmV0b3VjaC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0tBUk1BCi0JYm9vbCAiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllciIKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllciIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBSaW8gS2FybWEKQEAgLTEzOSw4ICsxNTcsMTAgQEAKIAkgIG9uIHRoZSByZXN1bHRpbmcgc2NzaSBkZXZpY2Ugbm9kZSByZXR1cm5zIHRoZSBLYXJtYSB0byBub3JtYWwKIAkgIG9wZXJhdGlvbi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWthcm1hLgorCiBjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWJvb2wgIlNBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCIgorCXRyaXN0YXRlICJTQVQgZW11bGF0aW9uIG9uIEN5cHJlc3MgVVNCL0FUQSBCcmlkZ2Ugd2l0aCBBVEFDQiIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCkBAIC0xNTAsNiArMTcwLDggQEAKIAkgIElmIHlvdSBzYXkgbm8gaGVyZSB5b3VyIGRldmljZSB3aWxsIHN0aWxsIHdvcmsgd2l0aCB0aGUgc3RhbmRhcmQgdXNiCiAJICBtYXNzIHN0b3JhZ2UgY2xhc3MuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1jeXByZXNzLgorCiBjb25maWcgVVNCX0xJQlVTVUFMCiAJYm9vbCAiVGhlIHNoYXJlZCB0YWJsZSBvZiBjb21tb24gKG9yIHVzdWFsKSBzdG9yYWdlIGRldmljZXMiCiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCmluZGV4IGIzMjA2OTMuLjViZTU0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQpAQCAtMTAsMjEgKzEwLDM2IEBACiBvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHVzYi1zdG9yYWdlLm8KIAogdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHKQkrPSBkZWJ1Zy5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpCSs9IHNodXR0bGVfdXNiYXQubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkJKz0gc2RkcjA5Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUpCSs9IHNkZHI1NS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkJKz0gZnJlZWNvbS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwKQkrPSBpc2QyMDAubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpCSs9IGRhdGFmYWIubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSBqdW1wc2hvdC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKQkrPSBhbGF1ZGEubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKQkrPSBvbmV0b3VjaC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpCSs9IGthcm1hLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSBjeXByZXNzX2F0YWNiLm8KIAogdXNiLXN0b3JhZ2Utb2JqcyA6PQlzY3NpZ2x1ZS5vIHByb3RvY29sLm8gdHJhbnNwb3J0Lm8gdXNiLm8gXAogCQkJaW5pdGlhbGl6ZXJzLm8gc2llcnJhX21zLm8gb3B0aW9uX21zLm8gJCh1c2Itc3RvcmFnZS1vYmoteSkKIAotaWZuZXEgKCQoQ09ORklHX1VTQl9MSUJVU1VBTCksKQotCW9iai0kKENPTkZJR19VU0IpCSs9IGxpYnVzdWFsLm8KK2lmZXEgKCQoQ09ORklHX1VTQl9MSUJVU1VBTCksKQorCXVzYi1zdG9yYWdlLW9ianMJKz0gdXN1YWwtdGFibGVzLm8KK2Vsc2UKKwlvYmotJChDT05GSUdfVVNCKQkrPSBsaWJ1c3VhbC5vIHVzdWFsLXRhYmxlcy5vCiBlbmRpZgorCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKQkrPSB1bXMtYWxhdWRhLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSB1bXMtY3lwcmVzcy5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gdW1zLWRhdGFmYWIubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00pCSs9IHVtcy1mcmVlY29tLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IHVtcy1pc2QyMDAubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSB1bXMtanVtcHNob3Qubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BKQkJKz0gdW1zLWthcm1hLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkJKz0gdW1zLW9uZXRvdWNoLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkpCSs9IHVtcy1zZGRyMDkubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkJKz0gdW1zLXNkZHI1NS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpCQkrPSB1bXMtdXNiYXQubworCit1bXMtYWxhdWRhLW9ianMJCTo9IGFsYXVkYS5vCit1bXMtY3lwcmVzcy1vYmpzCTo9IGN5cHJlc3NfYXRhY2IubwordW1zLWRhdGFmYWItb2Jqcwk6PSBkYXRhZmFiLm8KK3Vtcy1mcmVlY29tLW9ianMJOj0gZnJlZWNvbS5vCit1bXMtaXNkMjAwLW9ianMJCTo9IGlzZDIwMC5vCit1bXMtanVtcHNob3Qtb2Jqcwk6PSBqdW1wc2hvdC5vCit1bXMta2FybWEtb2JqcwkJOj0ga2FybWEubwordW1zLW9uZXRvdWNoLW9ianMJOj0gb25ldG91Y2gubwordW1zLXNkZHIwOS1vYmpzCQk6PSBzZGRyMDkubwordW1zLXNkZHI1NS1vYmpzCQk6PSBzZGRyNTUubwordW1zLXVzYmF0LW9ianMJCTo9IHNodXR0bGVfdXNiYXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggOGQzNzExYS4uNjdlZGM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC0zMSw2ICszMSw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTM5LDcgKzQxLDc5IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImFsYXVkYS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQWxhdWRhLWJhc2VkIGNhcmQgcmVhZGVycyIpOworTU9EVUxFX0FVVEhPUigiRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFN0YXR1cyBieXRlcworICovCisjZGVmaW5lIEFMQVVEQV9TVEFUVVNfRVJST1IJCTB4MDEKKyNkZWZpbmUgQUxBVURBX1NUQVRVU19SRUFEWQkJMHg0MAorCisvKgorICogQ29udHJvbCBvcGNvZGVzIChmb3IgcmVxdWVzdCBmaWVsZCkKKyAqLworI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NUQVRVUwkweDA4CisjZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU1RBVFVTCTB4OTgKKyNkZWZpbmUgQUxBVURBX0FDS19YRF9NRURJQV9DSEFOR0UJMHgwYQorI2RlZmluZSBBTEFVREFfQUNLX1NNX01FRElBX0NIQU5HRQkweDlhCisjZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU0lHCQkweDg2CisjZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU0lHCQkweDk2CisKKy8qCisgKiBCdWxrIGNvbW1hbmQgaWRlbnRpdHkgKGJ5dGUgMCkKKyAqLworI2RlZmluZSBBTEFVREFfQlVMS19DTUQJCQkweDQwCisKKy8qCisgKiBCdWxrIG9wY29kZXMgKGJ5dGUgMSkKKyAqLworI2RlZmluZSBBTEFVREFfQlVMS19HRVRfUkVEVV9EQVRBCTB4ODUKKyNkZWZpbmUgQUxBVURBX0JVTEtfUkVBRF9CTE9DSwkJMHg5NAorI2RlZmluZSBBTEFVREFfQlVMS19FUkFTRV9CTE9DSwkJMHhhMworI2RlZmluZSBBTEFVREFfQlVMS19XUklURV9CTE9DSwkJMHhiNAorI2RlZmluZSBBTEFVREFfQlVMS19HRVRfU1RBVFVTMgkJMHhiNworI2RlZmluZSBBTEFVREFfQlVMS19SRVNFVF9NRURJQQkJMHhlMAorCisvKgorICogUG9ydCB0byBvcGVyYXRlIG9uIChieXRlIDgpCisgKi8KKyNkZWZpbmUgQUxBVURBX1BPUlRfWEQJCQkweDAwCisjZGVmaW5lIEFMQVVEQV9QT1JUX1NNCQkJMHgwMQorCisvKgorICogTEJBIGFuZCBQQkEgYXJlIHVuc2lnbmVkIGludHMuIFNwZWNpYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFVOREVGICAgIDB4ZmZmZgorI2RlZmluZSBTUEFSRSAgICAweGZmZmUKKyNkZWZpbmUgVU5VU0FCTEUgMHhmZmZkCisKK3N0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsJCS8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNpemU7CQkvKiBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOwkJLyogbnVtYmVyIG9mIHBhZ2VzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGludCB1em9uZXNpemU7CQkvKiBudW1iZXIgb2YgdXNhYmxlIGJsb2NrcyBwZXIgem9uZSAqLworCXVuc2lnbmVkIGludCB6b25lc2l6ZTsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIHpvbmUgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2ttYXNrOwkJLyogbWFzayB0byBnZXQgcGFnZSBmcm9tIGFkZHJlc3MgKi8KKworCXVuc2lnbmVkIGNoYXIgcGFnZXNoaWZ0OworCXVuc2lnbmVkIGNoYXIgYmxvY2tzaGlmdDsKKwl1bnNpZ25lZCBjaGFyIHpvbmVzaGlmdDsKKworCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLworCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLworfTsKKworc3RydWN0IGFsYXVkYV9pbmZvIHsKKwlzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gcG9ydFsyXTsKKwlpbnQgd3JfZXA7CQkJLyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi8KKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQogI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQpAQCAtNTIsNiArMTI2LDQ4IEBACiAjZGVmaW5lIFBCQV9ISShwYmEpIChwYmEgPj4gMykKICNkZWZpbmUgUEJBX1pPTkUocGJhKSAocGJhID4+IDExKQogCitzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgYWxhdWRhX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9hbGF1ZGEuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFsYXVkYV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIC8qCiAgKiBNZWRpYSBoYW5kbGluZwogICovCkBAIC0zMDcsNyArNDIzLDggQEAKIAkJZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7CiAJbWVkaWFfaW5mbyA9IGFsYXVkYV9jYXJkX2ZpbmRfaWQoZGF0YVsxXSk7CiAJaWYgKG1lZGlhX2luZm8gPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV9pbml0X21lZGlhOiBVbnJlY29nbmlzZWQgbWVkaWEgc2lnbmF0dXJlOiAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJhbGF1ZGFfaW5pdF9tZWRpYTogVW5yZWNvZ25pc2VkIG1lZGlhIHNpZ25hdHVyZTogIgogCQkJIiUwMlggJTAyWCAlMDJYICUwMlhcbiIsCiAJCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKQEAgLTUxOCw3ICs2MzUsOCBAQAogCiAJCS8qIGNoZWNrIGV2ZW4gcGFyaXR5ICovCiAJCWlmIChwYXJpdHlbZGF0YVs2XSBeIGRhdGFbN11dKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKIAkJCSAgICAgICAiICglMDJYICUwMlgpXG4iLCBpLCBkYXRhWzZdLCBkYXRhWzddKTsKIAkJCXBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKIAkJCWNvbnRpbnVlOwpAQCAtNTM4LDEzICs2NTYsMTYgQEAKIAkJICovCiAKIAkJaWYgKGxiYV9vZmZzZXQgPj0gdXpvbmVzaXplKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKIAkJCSAgICAgICBsYmFfcmVhbCwgYmxvY2tudW0pOwogCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAobGJhX3RvX3BiYVtsYmFfb2Zmc2V0XSAhPSBVTkRFRikgewotCQkJcHJpbnRrKCJhbGF1ZGFfcmVhZF9tYXA6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6ICIKKwkJCSAgICAgICAiTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCiAJCQkgICAgICAgbGJhX3JlYWwsIGxiYV90b19wYmFbbGJhX29mZnNldF0sIGJsb2NrbnVtKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC03MTIsMTMgKzgzMywxNSBAQAogCWlmIChwYmEgPT0gMSkgewogCQkvKiBNYXliZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHdyaXRlIHRvIFBCQSAxLgogCQkgICBGYWtlIHN1Y2Nlc3MsIGJ1dCBkb24ndCBkbyBhbnl0aGluZy4gKi8KLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfbGJhOiBhdm9pZCB3cml0aW5nIHRvIHBiYSAxXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiAJfQogCiAJbmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoJk1FRElBX0lORk8odXMpLCB6b25lKTsKIAlpZiAoIW5ld19wYmEpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJhbGF1ZGFfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC04MTgsNyArOTQxLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplKSAqIChwYWdlc2l6ZSArIDY0KTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTkxMSw3ICsxMDM0LDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplKSAqIHBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC05MjEsNyArMTA0NCw3IEBACiAJICovCiAJYmxvY2tidWZmZXIgPSBrbWFsbG9jKChwYWdlc2l6ZSArIDY0KSAqIGJsb2Nrc2l6ZSwgR0ZQX05PSU8pOwogCWlmIChibG9ja2J1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCWtmcmVlKGJ1ZmZlcik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQpAQCAtOTkxLDcgKzExMTQsNyBAQAogLyoKICAqIEluaXRpYWxpemUgYWxhdWRhX2luZm8gc3RydWN0IGFuZCBmaW5kIHRoZSBkYXRhLXdyaXRlIGVuZHBvaW50CiAgKi8KLWludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm87CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZyA9IHVzLT5wdXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nOwpAQCAtMTAxMyw3ICsxMTM2LDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByYzsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLT5leHRyYTsKQEAgLTExMjEsMyArMTI0NCw0OCBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQogCitzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGFsYXVkYV91c2JfaWRzKSArIGFsYXVkYV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJBbGF1ZGEgQ29udHJvbC9CdWxrIjsKKwl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtYWxhdWRhIiwKKwkucHJvYmUgPQlhbGF1ZGFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JYWxhdWRhX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsYXVkYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmYWxhdWRhX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbGF1ZGFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZhbGF1ZGFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxhdWRhX2luaXQpOworbW9kdWxlX2V4aXQoYWxhdWRhX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MDBmODcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogRHJpdmVyIGZvciBBbGF1ZGEtYmFzZWQgY2FyZCByZWFkZXJzCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgICAoYykgMjAwNSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgotICoKLSAqIFNlZSBhbGF1ZGEuYyBmb3IgbW9yZSBleHBsYW5hdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfQUxBVURBX0gKLSNkZWZpbmUgX1VTQl9BTEFVREFfSAotCi0vKgotICogU3RhdHVzIGJ5dGVzCi0gKi8KLSNkZWZpbmUgQUxBVURBX1NUQVRVU19FUlJPUgkJMHgwMQotI2RlZmluZSBBTEFVREFfU1RBVFVTX1JFQURZCQkweDQwCi0KLS8qCi0gKiBDb250cm9sIG9wY29kZXMgKGZvciByZXF1ZXN0IGZpZWxkKQotICovCi0jZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU1RBVFVTCTB4MDgKLSNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TVEFUVVMJMHg5OAotI2RlZmluZSBBTEFVREFfQUNLX1hEX01FRElBX0NIQU5HRQkweDBhCi0jZGVmaW5lIEFMQVVEQV9BQ0tfU01fTUVESUFfQ0hBTkdFCTB4OWEKLSNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TSUcJCTB4ODYKLSNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TSUcJCTB4OTYKLQotLyoKLSAqIEJ1bGsgY29tbWFuZCBpZGVudGl0eSAoYnl0ZSAwKQotICovCi0jZGVmaW5lIEFMQVVEQV9CVUxLX0NNRAkJCTB4NDAKLQotLyoKLSAqIEJ1bGsgb3Bjb2RlcyAoYnl0ZSAxKQotICovCi0jZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9SRURVX0RBVEEJMHg4NQotI2RlZmluZSBBTEFVREFfQlVMS19SRUFEX0JMT0NLCQkweDk0Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX0VSQVNFX0JMT0NLCQkweGEzCi0jZGVmaW5lIEFMQVVEQV9CVUxLX1dSSVRFX0JMT0NLCQkweGI0Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9TVEFUVVMyCQkweGI3Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX1JFU0VUX01FRElBCQkweGUwCi0KLS8qCi0gKiBQb3J0IHRvIG9wZXJhdGUgb24gKGJ5dGUgOCkKLSAqLwotI2RlZmluZSBBTEFVREFfUE9SVF9YRAkJCTB4MDAKLSNkZWZpbmUgQUxBVURBX1BPUlRfU00JCQkweDAxCi0KLS8qCi0gKiBMQkEgYW5kIFBCQSBhcmUgdW5zaWduZWQgaW50cy4gU3BlY2lhbCB2YWx1ZXMuCi0gKi8KLSNkZWZpbmUgVU5ERUYgICAgMHhmZmZmCi0jZGVmaW5lIFNQQVJFICAgIDB4ZmZmZQotI2RlZmluZSBVTlVTQUJMRSAweGZmZmQKLQotaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1pbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsJCS8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgcGFnZXNpemU7CQkvKiBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOwkJLyogbnVtYmVyIG9mIHBhZ2VzIHBlciBibG9jayAqLwotCXVuc2lnbmVkIGludCB1em9uZXNpemU7CQkvKiBudW1iZXIgb2YgdXNhYmxlIGJsb2NrcyBwZXIgem9uZSAqLwotCXVuc2lnbmVkIGludCB6b25lc2l6ZTsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIHpvbmUgKi8KLQl1bnNpZ25lZCBpbnQgYmxvY2ttYXNrOwkJLyogbWFzayB0byBnZXQgcGFnZSBmcm9tIGFkZHJlc3MgKi8KLQotCXVuc2lnbmVkIGNoYXIgcGFnZXNoaWZ0OwotCXVuc2lnbmVkIGNoYXIgYmxvY2tzaGlmdDsKLQl1bnNpZ25lZCBjaGFyIHpvbmVzaGlmdDsKLQotCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLwotCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLwotfTsKLQotc3RydWN0IGFsYXVkYV9pbmZvIHsKLQlzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gcG9ydFsyXTsKLQlpbnQgd3JfZXA7CQkJLyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi8KLQotCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KLQl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLX07Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCmluZGV4IDg5OGU2N2QuLmM4NDQ3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KQEAgLTI5LDYgKzMwLDQ5IEBACiAjaW5jbHVkZSAic2NzaWdsdWUuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCitNT0RVTEVfREVTQ1JJUFRJT04oIlNBVCBzdXBwb3J0IGZvciBDeXByZXNzIFVTQi9BVEEgYnJpZGdlcyB3aXRoIEFUQUNCIik7CitNT0RVTEVfQVVUSE9SKCJNYXR0aGlldSBDYXN0ZXQgPGNhc3RldC5tYXR0aGlldUBmcmVlLmZyPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBjeXByZXNzX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9jeXByZXNzLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjeXByZXNzX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGN5cHJlc3NfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiAvKgogICogQVRBQ0IgaXMgYSBwcm90b2NvbCB1c2VkIG9uIGN5cHJlc3MgdXNiPC0+YXRhIGJyaWRnZSB0bwogICogc2VuZCByYXcgQVRBIGNvbW1hbmQgb3ZlciBtYXNzIHN0b3JhZ2UKQEAgLTM2LDcgKzgwLDcgQEAKICAqIE1vcmUgaW5mbyB0aGF0IGJlIGZvdW5kIG9uIGN5N2M2ODMxMF84LnBkZiBhbmQgY3k3YzY4MzAwY184LnBkZgogICogZGF0YXNoZWV0IGZyb20gY3lwcmVzcy5jb20uCiAgKi8KLXZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJdW5zaWduZWQgY2hhciBzYXZlX2NtbmRbTUFYX0NPTU1BTkRfU0laRV07CiAKQEAgLTEzMywxOSArMTc3LDE4IEBACiAKIAkJLyogYnVpbGQgdGhlIGNvbW1hbmQgZm9yCiAJCSAqIHJlYWRpbmcgdGhlIEFUQSByZWdpc3RlcnMgKi8KLQkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCAwKTsKLQkJc3JiLT5zZGIubGVuZ3RoID0gc2l6ZW9mKHJlZ3MpOwotCQlzZ19pbml0X29uZSgmc2VzLnNlbnNlX3NnbCwgcmVncywgc3JiLT5zZGIubGVuZ3RoKTsKLQkJc3JiLT5zZGIudGFibGUuc2dsID0gJnNlcy5zZW5zZV9zZ2w7Ci0JCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7Ci0JCXNyYi0+c2RiLnRhYmxlLm5lbnRzID0gMTsKKwkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCBzaXplb2YocmVncykpOworCiAJCS8qIHdlIHVzZSB0aGUgc2FtZSBjb21tYW5kIGFzIGJlZm9yZSwgYnV0IHdlIHNldAogCQkgKiB0aGUgcmVhZCB0YXNrZmlsZSBiaXQsIGZvciBub3QgZXhlY3V0aW5nIGF0YWNiIGNvbW1hbmQsCiAJCSAqIGJ1dCByZWFkaW5nIHJlZ2lzdGVyIHNlbGVjdGVkIGluIHNyYi0+Y21uZFs0XQogCQkgKi8KKwkJc3JiLT5jbWRfbGVuID0gMTY7CisJCXNyYi0+Y21uZCA9IHNlcy5jbW5kOwogCQlzcmItPmNtbmRbMl0gPSAxOwogCiAJCXVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZChzcmIsIHVzKTsKKwkJbWVtY3B5KHJlZ3MsIHNyYi0+c2Vuc2VfYnVmZmVyLCBzaXplb2YocmVncykpOwogCQl0bXBfcmVzdWx0ID0gc3JiLT5yZXN1bHQ7CiAJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKHNyYiwgJnNlcyk7CiAJCS8qIHdlIGZhaWwgdG8gZ2V0IHJlZ2lzdGVycywgcmVwb3J0IGludmFsaWQgY29tbWFuZCAqLwpAQCAtMTYyLDggKzIwNSw4IEBACiAKIAkJLyogWFhYIHdlIHNob3VsZCBnZW5lcmF0ZSBzaywgYXNjLCBhc2NxIGZyb20gc3RhdHVzIGFuZCBlcnJvcgogCQkgKiByZWdzCi0JCSAqIChzZWUgMTEuMSBFcnJvciB0cmFuc2xhdGlvbiCtIEFUQSBkZXZpY2UgZXJyb3IgdG8gU0NTSSBlcnJvciBtYXApCi0JCSAqIGFuZCBhdGFfdG9fc2Vuc2VfZXJyb3IgZnJvbSBsaWJhdGEuCisJCSAqIChzZWUgMTEuMSBFcnJvciB0cmFuc2xhdGlvbiBBVEEgZGV2aWNlIGVycm9yIHRvIFNDU0kgZXJyb3IKKwkJICogIG1hcCwgYW5kIGF0YV90b19zZW5zZV9lcnJvciBmcm9tIGxpYmF0YS4pCiAJCSAqLwogCiAJCS8qIFNlbnNlIGRhdGEgaXMgY3VycmVudCBhbmQgZm9ybWF0IGlzIGRlc2NyaXB0b3IuICovCkBAIC0xOTgsMyArMjQxLDQ4IEBACiAJaWYgKHNyYi0+Y21uZFswXSA9PSBBVEFfMTIpCiAJCXNyYi0+Y21kX2xlbiA9IDEyOwogfQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGN5cHJlc3NfdXNiX2lkcykgKyBjeXByZXNzX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7CisJdXMtPnByb3RvX2hhbmRsZXIgPSBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3lwcmVzc19kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1jeXByZXNzIiwKKwkucHJvYmUgPQljeXByZXNzX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWN5cHJlc3NfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3lwcmVzc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3lwcmVzc19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmN5cHJlc3NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3lwcmVzc19pbml0KTsKK21vZHVsZV9leGl0KGN5cHJlc3NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCmluZGV4IDE3ZjFhZTIuLjJiNmU1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCkBAIC00OSw2ICs0OSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC01OCwxMiArNTksNjUgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiZGF0YWZhYi5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRGF0YWZhYiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIkppbW1pZSBNYXlmaWVsZCA8bWF5ZmllbGQrZGF0YWZhYkBzYWNraGVhZHMub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3QgZGF0YWZhYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICAgc2VjdG9yczsJLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyAgIHNzaXplOwkJLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKwlzaWduZWQgY2hhcglsdW47CQkvKiB1c2VkIGZvciBkdWFsLXNsb3QgcmVhZGVycyAqLworCisJLyogdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQgKi8KKwl1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCit9OwogCiBzdGF0aWMgaW50IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMsCiAJCQkJIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8pOwogCiAKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGRhdGFmYWJfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2RhdGFmYWIuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRhdGFmYWJfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgZGF0YWZhYl91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGF0YWZhYi5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIHN0YXRpYyBpbmxpbmUgaW50CiBkYXRhZmFiX2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKIAlpZiAobGVuID09IDApCkBAIC01MDAsNyArNTU0LDcgQEAKIAogLy8gVHJhbnNwb3J0IGZvciB0aGUgRGF0YWZhYiBNRENGRS1CCiAvLwotaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbzsKIAlpbnQgcmM7CkBAIC02NjUsMyArNzE5LDQ5IEBACiAJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CisKK3N0YXRpYyBpbnQgZGF0YWZhYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGRhdGFmYWJfdXNiX2lkcykgKyBkYXRhZmFiX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKKwl1cy0+dHJhbnNwb3J0ID0gZGF0YWZhYl90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGF0YWZhYl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1kYXRhZmFiIiwKKwkucHJvYmUgPQlkYXRhZmFiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWRhdGFmYWJfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGF0YWZhYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZGF0YWZhYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGF0YWZhYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmRhdGFmYWJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGF0YWZhYl9pbml0KTsKK21vZHVsZV9leGl0KGRhdGFmYWJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmUzZjI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyogRHJpdmVyIGZvciBEYXRhZmFiIE1EQ0ZFLUIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBKaW1taWUgTWF5ZmllbGQgKG1heWZpZWxkK2RhdGFmYWJAc2Fja2hlYWRzLm9yZykKLSAqCi0gKiBTZWUgZGF0YWZhYi5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX0RBVEFGQUJfTURDRkVfQl9ICi0jZGVmaW5lIF9VU0JfREFUQUZBQl9NRENGRV9CX0gKLQotZXh0ZXJuIGludCBkYXRhZmFiX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBkYXRhZmFiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOwkvLyB0b3RhbCBzZWN0b3IgY291bnQKLQl1bnNpZ25lZCBsb25nICAgc3NpemU7CQkvLyBzZWN0b3Igc2l6ZSBpbiBieXRlcwotCXNpZ25lZCBjaGFyCWx1bjsJCS8vIHVzZWQgZm9yIGR1YWwtc2xvdCByZWFkZXJzCi0JCi0JLy8gdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQKLQl1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7CS8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQotCXVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOwkvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKaW5kZXggNzNhYzcyNi4uNTRjYzk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqIChodHRwOi8vd3d3LmZyZWVjb20uZGUvKQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogCkBAIC0zMyw3ICszNCwxMCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJmcmVlY29tLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvciIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKIHN0YXRpYyB2b2lkIHBkdW1wICh2b2lkICosIGludCk7CkBAIC0xMDMsNiArMTA3LDQ3IEBACiAjZGVmaW5lIEZDTV9QQUNLRVRfTEVOR1RICQk2NAogI2RlZmluZSBGQ01fU1RBVFVTX1BBQ0tFVF9MRU5HVEgJNAogCitzdGF0aWMgaW50IGluaXRfZnJlZWNvbShzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGZyZWVjb21fdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2ZyZWVjb20uaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGZyZWVjb21fdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgZnJlZWNvbV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCiBzdGF0aWMgaW50CiBmcmVlY29tX3JlYWRkYXRhIChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cywKIAkJdW5zaWduZWQgaW50IGlwaXBlLCB1bnNpZ25lZCBpbnQgb3BpcGUsIGludCBjb3VudCkKQEAgLTE3Myw3ICsyMTgsNyBAQAogICogVHJhbnNwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IuCiAgKgogICovCi1pbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGZyZWVjb21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBmcmVlY29tX2NiX3dyYXAgKmZjYjsKIAlzdHJ1Y3QgZnJlZWNvbV9zdGF0dXMgICpmc3Q7CkBAIC0zNzcsOCArNDIyLDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludAotZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfZnJlZWNvbShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJlc3VsdDsKIAljaGFyICpidWZmZXIgPSB1cy0+aW9idWY7CkBAIC00MTcsNyArNDYxLDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJcHJpbnRrIChLRVJOX0NSSVQgImZyZWVjb20gcmVzZXQgY2FsbGVkXG4iKTsKIApAQCAtNDc5LDMgKzUyMyw0OCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgZnJlZWNvbV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGZyZWVjb21fdXNiX2lkcykgKyBmcmVlY29tX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7CisJdXMtPnRyYW5zcG9ydCA9IGZyZWVjb21fdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZyZWVjb21fZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtZnJlZWNvbSIsCisJLnByb2JlID0JZnJlZWNvbV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlmcmVlY29tX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZyZWVjb21faW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmZyZWVjb21fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZyZWVjb21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZmcmVlY29tX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGZyZWVjb21faW5pdCk7Cittb2R1bGVfZXhpdChmcmVlY29tX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkMGZlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qIERyaXZlciBmb3IgRnJlZWNvbSBVU0IvSURFIGFkYXB0b3IKLSAqCi0gKiBGcmVlY29tIHYwLjE6Ci0gKgotICogRmlyc3QgcmVsZWFzZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBEYXZpZCBCcm93biA8dXNiLXN0b3JhZ2VAZGF2aWRiLm9yZz4KLSAqCi0gKiBTZWUgZnJlZWNvbS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfRlJFRUNPTV9VU0JfSAotI2RlZmluZSBfRlJFRUNPTV9VU0JfSAotCi1leHRlcm4gaW50IGZyZWVjb21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgdXNiX3N0b3JfZnJlZWNvbV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBmcmVlY29tX2luaXQgKHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKaW5kZXggMzgzYWJmMi4uODgyYzU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC00NCw2ICs0NCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgpAQCAtNTcsNyArNTgsNTMgQEAKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAic2NzaWdsdWUuaCIKLSNpbmNsdWRlICJpc2QyMDAuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMiKTsKK01PRFVMRV9BVVRIT1IoIkJq9nJuIFN0ZW5iZXJnIDxiam9ybkBoYXh4LnNlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGlzZDIwMF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfaXNkMjAwLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpc2QyMDBfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIFVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgaXNkMjAwX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9pc2QyMDAuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKIAogCiAvKiBUaW1lb3V0IGRlZmluZXMgKGluIFNlY29uZHMpICovCkBAIC0xNTE4LDcgKzE1NjUsNyBAQAogICogSW5pdGlhbGl6YXRpb24gZm9yIHRoZSBJU0QyMDAgCiAgKi8KIAotaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJVVNfREVCVUdQKCJJU0QyMDAgSW5pdGlhbGl6YXRpb24uLi5cbiIpOwogCkBAIC0xNTQ5LDcgKzE1OTYsNyBAQAogICoKICAqLwogCi12b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMSwgb3JpZ19idWZmbGVuOwogCXVuaW9uIGF0YV9jZGIgYXRhQ2RiOwpAQCAtMTU3MCwzICsxNjE3LDQ3IEBACiAKIAlpc2QyMDBfc3JiX3NldF9idWZmbGVuKHNyYiwgb3JpZ19idWZmbGVuKTsKIH0KKworc3RhdGljIGludCBpc2QyMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBpc2QyMDBfdXNiX2lkcykgKyBpc2QyMDBfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT5wcm90b2NvbF9uYW1lID0gIklTRDIwMCBBVEEvQVRBUEkiOworCXVzLT5wcm90b19oYW5kbGVyID0gaXNkMjAwX2F0YV9jb21tYW5kOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXNkMjAwX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWlzZDIwMCIsCisJLnByb2JlID0JaXNkMjAwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWlzZDIwMF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2QyMDBfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmlzZDIwMF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXNkMjAwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmaXNkMjAwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlzZDIwMF9pbml0KTsKK21vZHVsZV9leGl0KGlzZDIwMF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTM1ZjRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKiBIZWFkZXIgRmlsZSBmb3IgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiBJU0QyMDAgQVNJQwotICoKLSAqIEZpcnN0IHJlbGVhc2UKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiAoc3VwcG9ydEBpbi1zeXN0ZW0uY29tKQotICoKLSAqIFNlZSBpc2QyMDAuYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfSVNEMjAwX0gKLSNkZWZpbmUgX1VTQl9JU0QyMDBfSAotCi1leHRlcm4gdm9pZCBpc2QyMDBfYXRhX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKaW5kZXggZGY2N2YxMy4uMWM2OTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwpAQCAtNDYsNiArNDYsNyBAQAogICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTU1LDkgKzU2LDYxIEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImp1bXBzaG90LmgiCiAKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIExleGFyIFwiSnVtcHNob3RcIiBDb21wYWN0IEZsYXNoIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiSmltbWllIE1heWZpZWxkIDxtYXlmaWVsZCt1c2JAc2Fja2hlYWRzLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQganVtcHNob3RfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBqdW1wc2hvdF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBqdW1wc2hvdF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfanVtcHNob3QuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCitzdHJ1Y3QganVtcHNob3RfaW5mbyB7CisgICB1bnNpZ25lZCBsb25nICAgc2VjdG9yczsgICAgIC8qIHRvdGFsIHNlY3RvciBjb3VudCAqLworICAgdW5zaWduZWQgbG9uZyAgIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworCisgICAvKiB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldCAqLworICAgdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisgICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CisKIHN0YXRpYyBpbmxpbmUgaW50IGp1bXBzaG90X2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCiAJCQkJICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAKIAkJCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCkBAIC00MjksNyArNDgyLDcgQEAKIAogLy8gVHJhbnNwb3J0IGZvciB0aGUgTGV4YXIgJ0p1bXBzaG90JwogLy8KLWludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm87CiAJaW50IHJjOwpAQCAtNTkyLDMgKzY0NSw0OSBAQAogCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQorCitzdGF0aWMgaW50IGp1bXBzaG90X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0ganVtcHNob3RfdXNiX2lkcykgKyBqdW1wc2hvdF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOworCXVzLT50cmFuc3BvcnQgPSBqdW1wc2hvdF90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIganVtcHNob3RfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtanVtcHNob3QiLAorCS5wcm9iZSA9CWp1bXBzaG90X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWp1bXBzaG90X3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp1bXBzaG90X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZqdW1wc2hvdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQganVtcHNob3RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZqdW1wc2hvdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChqdW1wc2hvdF9pbml0KTsKK21vZHVsZV9leGl0KGp1bXBzaG90X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWJhYzlkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIERyaXZlciBmb3IgTGV4YXIgIkp1bXBzaG90IiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrdXNiQHNhY2toZWFkcy5vcmcpCi0gKgotICogU2VlIGp1bXBzaG90LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfSlVNUFNIT1RfSAotI2RlZmluZSBfVVNCX0pVTVBTSE9UX0gKLQotZXh0ZXJuIGludCBqdW1wc2hvdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QganVtcHNob3RfaW5mbyB7Ci0gICB1bnNpZ25lZCBsb25nICAgc2VjdG9yczsgICAgIC8vIHRvdGFsIHNlY3RvciBjb3VudAotICAgdW5zaWduZWQgbG9uZyAgIHNzaXplOyAgICAgICAvLyBzZWN0b3Igc2l6ZSBpbiBieXRlcwotIAotICAgLy8gdGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCB5ZXQKLSAgIHVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7Ci0gICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOyAgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQotICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7ICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYwppbmRleCAwZDc5YWU1Li43OTUzZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jCkBAIC0xOCw2ICsxOCw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTI1LDcgKzI3LDEwIEBACiAjaW5jbHVkZSAidXNiLmgiCiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJrYXJtYS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUmlvIEthcm1hIik7CitNT0RVTEVfQVVUSE9SKCJCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4sIEtlaXRoIEJlbm5ldHQgPGtlaXRoQG1jcy5zdC1hbmQuYWMudWs+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgUklPX1BSRUZJWCAiUklPUFx4MDAiCiAjZGVmaW5lIFJJT19QUkVGSVhfTEVOIDUKQEAgLTM2LDEzICs0MSw1MyBAQAogI2RlZmluZSBSSU9fTEVBVkVfU1RPUkFHRSAweDIKICNkZWZpbmUgUklPX1JFU0VUIDB4QwogCi1leHRlcm4gaW50IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEgKik7Ci0KIHN0cnVjdCBrYXJtYV9kYXRhIHsKIAlpbnQgaW5fc3RvcmFnZTsKIAljaGFyICpyZWN2OwogfTsKIAorc3RhdGljIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGthcm1hX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9rYXJtYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwga2FybWFfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYga2FybWFfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2thcm1hLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogLyoKICAqIFNlbmQgY29tbWFuZHMgdG8gUmlvIEthcm1hLgogICoKQEAgLTEwNCw3ICsxNDksNyBAQAogICogVHJhcCBTVEFSVF9TVE9QIGFuZCBSRUFEXzEwIHRvIGxlYXZlL3JlLWVudGVyIHN0b3JhZ2UgbW9kZS4KICAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBwcm9wYWdhdGVkIHRvIHRoZSBub3JtYWwgYnVsayBsYXllci4KICAqLwotaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qga2FybWFfZGF0YSAqZGF0YSA9IChzdHJ1Y3Qga2FybWFfZGF0YSAqKSB1cy0+ZXh0cmE7CkBAIC0xMzMsNyArMTc4LDcgQEAKIAlrZnJlZShkYXRhLT5yZWN2KTsKIH0KIAotaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBrYXJtYV9kYXRhICpkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGthcm1hX2RhdGEpLCBHRlBfTk9JTyk7CkBAIC0xNTMsMyArMTk4LDQ4IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludCBrYXJtYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGthcm1hX3VzYl9pZHMpICsga2FybWFfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7CisJdXMtPnRyYW5zcG9ydCA9IHJpb19rYXJtYV90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrYXJtYV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1rYXJtYSIsCisJLnByb2JlID0Ja2FybWFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0Ja2FybWFfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQga2FybWFfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmthcm1hX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrYXJtYV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmthcm1hX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGthcm1hX2luaXQpOworbW9kdWxlX2V4aXQoa2FybWFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNjA5NzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9LQVJNQV9VU0JfSAotI2RlZmluZSBfS0FSTUFfVVNCX0gKLQotZXh0ZXJuIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCByaW9fa2FybWFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKaW5kZXggZjk3MGIyNy4uZmUzZmZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYwpAQCAtMzgsMzcgKzM4LDYgQEAKIHN0YXRpYyBpbnQgdXN1X3Byb2JlX3RocmVhZCh2b2lkICphcmcpOwogCiAvKgotICogVGhlIHRhYmxlLgotICovCi0jZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKLQkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKLQkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKLXsgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sYmNkRGV2aWNlTWF4KSwgXAotICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQotCi0jZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKLQkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKLXsgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKLSAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9Ci0KLSNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoteyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAotICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQotCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0jCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgotCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotI3VuZGVmIFVTVUFMX0RFVgotI3VuZGVmIFVOVVNVQUxfREVWCi0jdW5kZWYgQ09NUExJQU5UX0RFVgotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHN0b3JhZ2VfdXNiX2lkcyk7Ci0KLS8qCiAgKiBAdHlwZTogdGhlIG1vZHVsZSB0eXBlIGFzIGFuIGludGVnZXIKICAqLwogdm9pZCB1c2JfdXN1YWxfc2V0X3ByZXNlbnQoaW50IHR5cGUpCkBAIC0xNjcsNyArMTM2LDcgQEAKIAkubmFtZSA9CQkibGlidXN1YWwiLAogCS5wcm9iZSA9CXVzdV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXVzdV9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXN0b3JhZ2VfdXNiX2lkcywKKwkuaWRfdGFibGUgPQl1c2Jfc3RvcmFnZV91c2JfaWRzLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwppbmRleCBjN2JmODk1Li4zODAyMzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCkBAIC0zNSw5ICszNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgogI2luY2x1ZGUgInVzYi5oIgotI2luY2x1ZGUgIm9uZXRvdWNoLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXh0b3IgVVNCIE9uZVRvdWNoIGhhcmQgZHJpdmUgYnV0dG9uIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgT05FVE9VQ0hfUEtUX0xFTiAgICAgICAgMHgwMgorI2RlZmluZSBPTkVUT1VDSF9CVVRUT04gICAgICAgICBLRVlfUFJPRzEKKworc3RhdGljIGludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcyk7CiBzdGF0aWMgdm9pZCBvbmV0b3VjaF9yZWxlYXNlX2lucHV0KHZvaWQgKm9uZXRvdWNoXyk7CiAKIHN0cnVjdCB1c2Jfb25ldG91Y2ggewpAQCAtNTIsNiArNTksNDYgQEAKIAl1bnNpZ25lZCBpbnQgaXNfb3BlbjoxOwogfTsKIAorCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBvbmV0b3VjaF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfb25ldG91Y2guaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9uZXRvdWNoX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IG9uZXRvdWNoX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIHN0YXRpYyB2b2lkIHVzYl9vbmV0b3VjaF9pcnEoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfb25ldG91Y2ggKm9uZXRvdWNoID0gdXJiLT5jb250ZXh0OwpAQCAtMTI3LDcgKzE3NCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLWludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcykKK3N0YXRpYyBpbnQgb25ldG91Y2hfY29ubmVjdF9pbnB1dChzdHJ1Y3QgdXNfZGF0YSAqc3MpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzcy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwpAQCAtMjM2LDMgKzI4Myw0NiBAQAogCQkJCW9uZXRvdWNoLT5kYXRhLCBvbmV0b3VjaC0+ZGF0YV9kbWEpOwogCX0KIH0KKworc3RhdGljIGludCBvbmV0b3VjaF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIG9uZXRvdWNoX3VzYl9pZHMpICsgb25ldG91Y2hfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFVzZSBkZWZhdWx0IHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgKi8KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG9uZXRvdWNoX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLW9uZXRvdWNoIiwKKwkucHJvYmUgPQlvbmV0b3VjaF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlvbmV0b3VjaF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbmV0b3VjaF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmb25ldG91Y2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9uZXRvdWNoX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmb25ldG91Y2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob25ldG91Y2hfaW5pdCk7Cittb2R1bGVfZXhpdChvbmV0b3VjaF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFjN2FhOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX09ORVRPVUNIX0hfCi0jZGVmaW5lIF9PTkVUT1VDSF9IXwotCi0jZGVmaW5lIE9ORVRPVUNIX1BLVF9MRU4gICAgICAgIDB4MDIKLSNkZWZpbmUgT05FVE9VQ0hfQlVUVE9OICAgICAgICAgS0VZX1BST0cxCi0KLWludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCmluZGV4IGJlNDQxZDguLmZjMzEwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKQEAgLTEyMSw2ICsxMjEsNyBAQAogCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLwogCXVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3JiLCB1cyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyIGJ1ZmZlciBhY2Nlc3Mgcm91dGluZXMKQEAgLTE5OSw2ICsyMDAsNyBAQAogCS8qIFJldHVybiB0aGUgYW1vdW50IGFjdHVhbGx5IHRyYW5zZmVycmVkICovCiAJcmV0dXJuIGNudDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1Zik7CiAKIC8qIFN0b3JlIHRoZSBjb250ZW50cyBvZiBidWZmZXIgaW50byBzcmIncyB0cmFuc2ZlciBidWZmZXIgYW5kIHNldCB0aGUKICAqIFNDU0kgcmVzaWR1ZS4KQEAgLTIxNSwzICsyMTcsNCBAQAogCWlmIChidWZsZW4gPCBzY3NpX2J1ZmZsZW4oc3JiKSkKIAkJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIGJ1Zmxlbik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zZXRfeGZlcl9idWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCmluZGV4IDcyN2M1MDYuLjRjYTNiNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKQEAgLTEzNSw2ICsxMzUsMTIgQEAKIAkJaWYgKHNkZXYtPnJlcXVlc3RfcXVldWUtPm1heF9zZWN0b3JzID4gbWF4X3NlY3RvcnMpCiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICAgbWF4X3NlY3RvcnMpOworCX0gZWxzZSBpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKKwkJLyogVGFwZXMgbmVlZCBtdWNoIGhpZ2hlciBtYXhfc2VjdG9yIGxpbWl0cywgc28ganVzdAorCQkgKiByYWlzZSBpdCB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSAoNCBHQiAvIDUxMikgYW5kCisJCSAqIGxldCB0aGUgcXVldWUgc2VnbWVudCBzaXplIHNvcnQgb3V0IHRoZSByZWFsIGxpbWl0LgorCQkgKi8KKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDB4N0ZGRkZGKTsKIAl9CiAKIAkvKiBTb21lIFVTQiBob3N0IGNvbnRyb2xsZXJzIGNhbid0IGRvIERNQTsgdGhleSBoYXZlIHRvIHVzZSBQSU8uCkBAIC01NjMsNCArNTY5LDQgQEAKIAlbN10JPSAweDBhLAkJCSAgICAvKiBhZGRpdGlvbmFsIGxlbmd0aCAqLwogCVsxMl0JPSAweDI0CQkJICAgIC8qIEludmFsaWQgRmllbGQgaW4gQ0RCICovCiB9OwotCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCmluZGV4IDUzMWFlNWMuLmFiNWY5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwpAQCAtNDEsNiArNDEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtNTEsNyArNTIsNTMgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic2RkcjA5LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJpZXMgQnJvdXdlciA8YWViQGN3aS5ubD4sIFJvYmVydCBCYXJ1Y2ggPGF1dG9waGlsZUBzdGFyYmFuZC5uZXQ+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKK3N0YXRpYyBpbnQgdXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBzZGRyMDlfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc2RkcjA5X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHNkZHIwOV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjA5LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCiAKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCkBAIC03MjMsNyArNzcwLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplKSAqIGluZm8tPnBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTgzOCw3ICs4ODUsOCBAQAogCWlmIChwYmEgPT0gVU5ERUYpIHsKIAkJcGJhID0gc2RkcjA5X2ZpbmRfdW51c2VkX3BiYShpbmZvLCBsYmEpOwogCQlpZiAoIXBiYSkgewotCQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKIAkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAJCWluZm8tPnBiYV90b19sYmFbcGJhXSA9IGxiYTsKQEAgLTg0OSw3ICs4OTcsNyBAQAogCWlmIChwYmEgPT0gMSkgewogCQkvKiBNYXliZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHdyaXRlIHRvIFBCQSAxLgogCQkgICBGYWtlIHN1Y2Nlc3MsIGJ1dCBkb24ndCBkbyBhbnl0aGluZy4gKi8KLQkJcHJpbnRrKCJzZGRyMDk6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTk1NCw3ICsxMDAyLDcgQEAKIAlibG9ja2xlbiA9IChwYWdlbGVuIDw8IGluZm8tPmJsb2Nrc2hpZnQpOwogCWJsb2NrYnVmZmVyID0ga21hbGxvYyhibG9ja2xlbiwgR0ZQX05PSU8pOwogCWlmICghYmxvY2tidWZmZXIpIHsKLQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC05NjUsNyArMTAxMyw3IEBACiAJbGVuID0gbWluKHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSkgKiBpbmZvLT5wYWdlc2l6ZTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlrZnJlZShibG9ja2J1ZmZlcik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTExMTIsNyArMTE2MCw3IEBACiAKIAlpZiAocmVzdWx0KSB7CiAJCVVTX0RFQlVHUCgiUmVzdWx0IG9mIHJlYWRfZGV2aWNlSUQgaXMgJWRcbiIsIHJlc3VsdCk7Ci0JCXByaW50aygic2RkcjA5OiBjb3VsZCBub3QgcmVhZCBjYXJkIGluZm9cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IGNvdWxkIG5vdCByZWFkIGNhcmQgaW5mb1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTE1Myw3ICsxMjAxLDcgQEAKIAkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCiAJCQkiLCBXUCIpOwogCi0JcHJpbnRrKCIlc1xuIiwgYmx1cmJ0eHQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzXG4iLCBibHVyYnR4dCk7CiAKIAlyZXR1cm4gY2FyZGluZm87CiB9CkBAIC0xMTg0LDcgKzEyMzIsNyBAQAogCWFsbG9jX2xlbiA9IChhbGxvY19ibG9ja3MgPDwgQ09OVFJPTF9TSElGVCk7CiAJYnVmZmVyID0ga21hbGxvYyhhbGxvY19sZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXN1bHQgPSAtMTsKIAkJZ290byBkb25lOwogCX0KQEAgLTExOTgsNyArMTI0Niw3IEBACiAJaW5mby0+cGJhX3RvX2xiYSA9IGttYWxsb2MobnVtYmxvY2tzKnNpemVvZihpbnQpLCBHRlBfTk9JTyk7CiAKIAlpZiAoaW5mby0+bGJhX3RvX3BiYSA9PSBOVUxMIHx8IGluZm8tPnBiYV90b19sYmEgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJlc3VsdCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTIzOCw3ICsxMjg2LDggQEAKIAkJCWlmIChwdHJbal0gIT0gMCkKIAkJCQlnb3RvIG5vbno7CiAJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKLQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nXG4iLCBpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZ1xuIiwKKwkJICAgICAgIGkpOwogCQljb250aW51ZTsKIAogCW5vbno6CkBAIC0xMjUxLDcgKzEzMDAsOCBAQAogCW5vbmZmOgogCQkvKiBub3JtYWwgUEJBcyBzdGFydCB3aXRoIHNpeCBGRnMgKi8KIAkJaWYgKGogPCA2KSB7Ci0JCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmc6ICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgogCQkJICAgICAgICJyZXNlcnZlZCBhcmVhID0gJTAyWCUwMlglMDJYJTAyWCAiCiAJCQkgICAgICAgImRhdGEgc3RhdHVzICUwMlggYmxvY2sgc3RhdHVzICUwMlhcbiIsCiAJCQkgICAgICAgaSwgcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdLApAQCAtMTI2MSw3ICsxMzExLDggQEAKIAkJfQogCiAJCWlmICgocHRyWzZdID4+IDQpICE9IDB4MDEpIHsKLQkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIGludmFsaWQgYWRkcmVzcyBmaWVsZCAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogUEJBICVkIGhhcyBpbnZhbGlkIGFkZHJlc3MgZmllbGQgIgogCQkJICAgICAgICIlMDJYJTAyWC8lMDJYJTAyWFxuIiwKIAkJCSAgICAgICBpLCBwdHJbNl0sIHB0cls3XSwgcHRyWzExXSwgcHRyWzEyXSk7CiAJCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CkBAIC0xMjcwLDcgKzEzMjEsOCBAQAogCiAJCS8qIGNoZWNrIGV2ZW4gcGFyaXR5ICovCiAJCWlmIChwYXJpdHlbcHRyWzZdIF4gcHRyWzddXSkgewotCQkJcHJpbnRrKCJzZGRyMDk6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCiAJCQkgICAgICAgIiAoJTAyWCAlMDJYKVxuIiwgaSwgcHRyWzZdLCBwdHJbN10pOwogCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwogCQkJY29udGludWU7CkBAIC0xMjg5LDcgKzEzNDEsOCBAQAogCQkgKi8KIAogCQlpZiAobGJhID49IDEwMDApIHsKLQkJCXByaW50aygic2RkcjA5OiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAogCQkJICAgICAgIGxiYSwgaSk7CiAJCQlnb3RvIHBvc3NpYmx5X2VyYXNlOwogCQl9CkBAIC0xMjk3LDcgKzEzNTAsOCBAQAogCQlsYmEgKz0gMTAwMCooaS8weDQwMCk7CiAKIAkJaWYgKGluZm8tPmxiYV90b19wYmFbbGJhXSAhPSBVTkRFRikgewotCQkJcHJpbnRrKCJzZGRyMDk6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAogCQkJICAgICAgIGxiYSwgaW5mby0+bGJhX3RvX3BiYVtsYmFdLCBpKTsKIAkJCWdvdG8gcG9zc2libHlfZXJhc2U7CiAJCX0KQEAgLTEzOTksNyArMTQ1Myw3IEBACiAgKiB1bnVzdWFsIGRldmljZXMgbGlzdCBidXQgY2FsbGVkIGZyb20gaGVyZSB0aGVuIExVTiAwIG9mIHRoZSBjb21ibyByZWFkZXIKICAqIGlzIG5vdCByZWNvZ25pemVkLiBCdXQgSSBkbyBub3Qga25vdyB3aGF0IHByZWNpc2VseSB0aGVzZSBjYWxscyBkby4KICAqLwotaW50CitzdGF0aWMgaW50CiB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykgewogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVzLT5pb2J1ZjsKQEAgLTE0NDksNyArMTUwMyw3IEBACiAvKgogICogVHJhbnNwb3J0IGZvciB0aGUgTWljcm90ZWNoIERQQ00tVVNCCiAgKi8KLWludCBkcGNtX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldDsKIApAQCAtMTQ5MSw3ICsxNTQ1LDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBTYW5kaXNrIFNERFItMDkKICAqLwotaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgc2Vuc2VrZXkgPSAwLCBzZW5zZWNvZGUgPSAwOwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGhhdmVmYWtlc2Vuc2UgPSAwOwpAQCAtMTY5MCw3ICsxNzQ0LDYwIEBACiAvKgogICogSW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIHNkZHIwOSBzdWJkcml2ZXIKICAqLwotaW50CitzdGF0aWMgaW50CiB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKIAlyZXR1cm4gc2RkcjA5X2NvbW1vbl9pbml0KHVzKTsKIH0KKworc3RhdGljIGludCBzZGRyMDlfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBzZGRyMDlfdXNiX2lkcykgKyBzZGRyMDlfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmICh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfRFBDTV9VU0IpIHsKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wvQnVsay1FVVNCL1NERFIwOSI7CisJCXVzLT50cmFuc3BvcnQgPSBkcGNtX3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDE7CisJfSBlbHNlIHsKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkVVU0IvU0REUjA5IjsKKwkJdXMtPnRyYW5zcG9ydCA9IHNkZHIwOV90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAwOworCX0KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkZHIwOV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1zZGRyMDkiLAorCS5wcm9iZSA9CXNkZHIwOV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlzZGRyMDlfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RkcjA5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZGRyMDlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkZHIwOV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkZHIwOV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZGRyMDlfaW5pdCk7Cittb2R1bGVfZXhpdChzZGRyMDlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcwMTE3Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQotICogICAoYykgMjAwMiBBbmRyaWVzIEJyb3V3ZXIgKGFlYkBjd2kubmwpCi0gKgotICogU2VlIHNkZHIwOS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAotI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAotCi0vKiBTYW5kaXNrIFNERFItMDkgc3R1ZmYgKi8KLQotZXh0ZXJuIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgdXNiX3N0b3Jfc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotLyogTWljcm90ZWNoIERQQ00tVVNCIHN0dWZmICovCi0KLWV4dGVybiBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKaW5kZXggMGQ4ZGY3NS4uNDRkZmVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTMzLDcgKzM0LDQ4IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInNkZHI1NS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJTaW1vbiBNdW50b24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgc2RkcjU1X3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9zZGRyNTUuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNkZHI1NV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBzZGRyNTVfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgogCiAKICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQpAQCAtNTEzLDcgKzU1NSw4IEBACiB9CiAKIAotaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKK3N0YXRpYyBpbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzAzLDcgKzc0Niw5IEBACiAJCQogCQlpZiAoaW5mby0+bGJhX3RvX3BiYVtsYmEgKyB6b25lICogMTAwMF0gIT0gTk9UX0FMTE9DQVRFRCAmJgogCQkgICAgIWluZm8tPmZvcmNlX3JlYWRfb25seSkgewotCQkJcHJpbnRrKCJzZGRyNTU6IG1hcCBpbmNvbnNpc3RlbmN5IGF0IExCQSAlMDRYXG4iLCBsYmEgKyB6b25lICogMTAwMCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHI1NTogbWFwIGluY29uc2lzdGVuY3kgYXQgTEJBICUwNFhcbiIsCisJCQkgICAgICAgbGJhICsgem9uZSAqIDEwMDApOwogCQkJaW5mby0+Zm9yY2VfcmVhZF9vbmx5ID0gMTsKIAkJfQogCkBAIC03MzIsNyArNzc3LDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBTYW5kaXNrIFNERFItNTUKICAqLwotaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJlc3VsdDsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbnF1aXJ5X3Jlc3BvbnNlWzhdID0gewpAQCAtOTI5LDMgKzk3NCw0OSBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOyAvLyBGSVhNRTogc2Vuc2UgYnVmZmVyPwogfQogCisKK3N0YXRpYyBpbnQgc2RkcjU1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gc2RkcjU1X3VzYl9pZHMpICsgc2RkcjU1X3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU0REUjU1IjsKKwl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gc2RkcjU1X3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkZHI1NV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1zZGRyNTUiLAorCS5wcm9iZSA9CXNkZHI1NV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlzZGRyNTVfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RkcjU1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZGRyNTVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkZHI1NV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkZHI1NV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZGRyNTVfaW5pdCk7Cittb2R1bGVfZXhpdChzZGRyNTVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgxNWEwNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyogRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAyIFNpbW9uIE11bnRvbgotICoKLSAqIFNlZSBzZGRyNTUuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX0VVU0JfU0REUjU1X0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX0VVU0JfU0REUjU1X0gKLQotLyogU2FuZGlzayBTRERSLTU1IHN0dWZmICovCi0KLWV4dGVybiBpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHNkZHI1NV9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKaW5kZXggYWU2ZDY0ODEuLmI2MmEyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCkBAIC00Miw2ICs0Miw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CiAKQEAgLTUyLDcgKzUzLDEwMCBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlIik7CitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPiwgUm9iZXJ0IEJhcnVjaCA8YXV0b3BoaWxlQHN0YXJiYW5kLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKKyNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCisKKyNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKKyNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKKyNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCisjZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAorCisvKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKKyNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0CisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNworCisvKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KKyNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKKyNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKKyNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgorCisvKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQorI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAorCisvKiBRdWFsaWZpZXIgYml0cyAqLworI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLworI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLworCisvKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKKworLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKKworLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCisjZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCisjZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLworCisvKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLworCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCisjZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCisjZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCisjZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLworI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCisjZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KKworLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLworI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KKyNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLworI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KKworLyogVVNCQVQgRmVhdHVyZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KKyNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4CisjZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAorI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKKworc3RydWN0IHVzYmF0X2luZm8geworCWludCBkZXZpY2V0eXBlOworCisJLyogVXNlZCBmb3IgRmxhc2ggcmVhZGVycyBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLyogc2VjdG9yIHNpemUgaW4gYnl0ZXMgKi8KKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKICNkZWZpbmUgc2hvcnRfcGFjayhMU0IsTVNCKSAoICgodTE2KShMU0IpKSB8ICggKCh1MTYpKE1TQikpPDw4ICkgKQogI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQpAQCAtNjMsNiArMTU3LDQ4IEBACiBzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CiAKK3N0YXRpYyBpbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCBpbml0X3VzYmF0X2ZsYXNoKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiYXRfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JhdF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiB1c2JhdF91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfdXNiYXQuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKwogLyoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBIHJlYWQvd3JpdGUgc2VjdG9ycyBjb21tYW5kCiAgKiBVc2UgY21kPTB4MjAgZm9yIHJlYWQsIGNtZD0weDMwIGZvciB3cml0ZQpAQCAtMTY4NCwzNyArMTgyMCw2MSBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQogCi1pbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfY2Qoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfSFA4MjAwKTsKIH0KIAotCi1pbnQgaW5pdF91c2JhdF9mbGFzaChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXJldHVybiBpbml0X3VzYmF0KHVzLCBVU0JBVF9ERVZfRkxBU0gpOwogfQogCi1pbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IHVzYmF0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gaW5pdF91c2JhdCh1cywgMCk7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIHVzYmF0X3VzYl9pZHMpICsgdXNiYXRfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIFRoZSBhY3R1YWwgdHJhbnNwb3J0IHdpbGwgYmUgZGV0ZXJtaW5lZCBsYXRlciBieSB0aGUKKwkgKiBpbml0aWFsaXphdGlvbiByb3V0aW5lOyB0aGlzIGlzIGp1c3QgYSBwbGFjZWhvbGRlci4KKwkgKi8KKwl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU2h1dHRsZSBVU0JBVCI7CisJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAxOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCi0vKgotICogRGVmYXVsdCB0cmFuc3BvcnQgZnVuY3Rpb24uIEF0dGVtcHRzIHRvIGRldGVjdCB3aGljaCB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHNob3VsZCBiZSBjYWxsZWQsIG1ha2VzIGl0IHRoZSBuZXcgZGVmYXVsdCwgYW5kIGNhbGxzIGl0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gT3VyIHVzYmF0X2luaXQoKSBmdW5jdGlvbiBkZXRlY3RzIHRoZQotICogZGV2aWNlIHR5cGUgYW5kIGNoYW5nZXMgdGhlIHVzLT50cmFuc3BvcnQgcHRyIHRvIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24KLSAqIHJlbGV2YW50IHRvIHRoZSBkZXZpY2UuCi0gKiBIb3dldmVyLCB3ZSdsbCBzdXBwb3J0IHRoaXMgaW1wb3NzaWJsZSg/KSBjYXNlIGFueXdheS4KLSAqLwotaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JhdF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy11c2JhdCIsCisJLnByb2JlID0JdXNiYXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiYXRfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiYXRfaW5pdCh2b2lkKQogewotCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvKikgKHVzLT5leHRyYSk7Ci0KLQlpZiAodXNiYXRfc2V0X3RyYW5zcG9ydCh1cywgaW5mbywgMCkpCi0JCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Ci0KLQlyZXR1cm4gdXMtPnRyYW5zcG9ydChzcmIsIHVzKTsJCisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKIH0KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmF0X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiYXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiYXRfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JhdF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YmZjNDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIFVTQi1BVEFQSSBjYWJsZQotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCi0gKiAgIChjKSAyMDA0LCAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+Ci0gKgotICogU2VlIHNodXR0bGVfdXNiYXQuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9TSFVUVExFX1VTQkFUX0gKLSNkZWZpbmUgX1VTQl9TSFVUVExFX1VTQkFUX0gKLQotLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLwotI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKLSNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCi0KLSNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKLSNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKLSNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCi0jZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAotCi0vKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAotI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCi0jZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKLSNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0Ci0jZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKLSNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNwotCi0vKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KLSNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKLSNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKLSNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgotCi0vKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQotI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAotCi0vKiBRdWFsaWZpZXIgYml0cyAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwCS8qIGZ1bGwgY29tcGFyZSAqLwotI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwCS8qIGF1dG8gbG9hZCBzdWJjb3VudCAqLwotCi0vKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKLQotLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAotI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKLQotLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8qIHJlYWQvd3JpdGUgZGF0YSAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8qIHNldCBmZWF0dXJlcyAoVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvKiBlcnJvciAoUikgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvKiBzZWN0b3IgY291bnQgKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvKiBzZWN0b3IgbnVtYmVyIChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLyogY3lsaW5kZXIgbG93IChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLyogY3lsaW5kZXIgaGlnaCAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8qIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8qIGRldmljZSBzdGF0dXMgKFIpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLyogZGV2aWNlIGNvbW1hbmQgKFcpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLyogc3RhdHVzIChubyBjbGVhciBJUlEpIChSKSAqLwotCi0vKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvKiBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvKiBDYXJkIERldGVjdCAoUmVhZCBPbmx5KSAqLwotCQkJCSAgICAgLyogQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwICovCi0jZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8qIEkvTyAxICovCi0jZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8qIEkvTyAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLyogMT1FUFAgbW9kZSwgMD1BVEEgbW9kZSAqLwotI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8qIElucHV0IDEgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvKiBJbnB1dCAwICovCi0jZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8qIEludGVycnVwdCAoQVRBL0lTQSkvQWNrbm93bGVkZ2UgKEVQUCkgKi8KLQotLyogVVNCQVQgVXNlciBJL08gRW5hYmxlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBVU0JBVF9VSU9fRFJWUlNUCTB4ODAgLyogUmVzZXQgUGVyaXBoZXJhbCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQUNLRAkJMHg0MCAvKiBFbmFibGUgQ2FyZCBEZXRlY3QgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMQkJMHgyMCAvKiBJL08gMSBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotCQkJCSAgICAgLyogSWYgQUNLRD0xLCBzZXQgT0UxIHRvIDEgYWxzby4gKi8KLSNkZWZpbmUgVVNCQVRfVUlPX09FMAkJMHgxMCAvKiBJL08gMCBzZXQ9b3V0cHV0L2Nscj1pbnB1dCAqLwotI2RlZmluZSBVU0JBVF9VSU9fQURQUlNUCTB4MDEgLyogUmVzZXQgU0NNIGNoaXAgKi8KLQotLyogVVNCQVQgRmVhdHVyZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9FVEVOCTB4ODAJLyogRXh0ZXJuYWwgdHJpZ2dlciBlbmFibGUgKi8KLSNkZWZpbmUgVVNCQVRfRkVBVF9VMQkweDA4Ci0jZGVmaW5lIFVTQkFUX0ZFQVRfVTAJMHgwNAotI2RlZmluZSBVU0JBVF9GRUFUX0VUMQkweDAyCi0jZGVmaW5lIFVTQkFUX0ZFQVRfRVQyCTB4MDEKLQotZXh0ZXJuIGludCB1c2JhdF90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpbml0X3VzYmF0X2NkKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgaW5pdF91c2JhdF9wcm9iZShzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QgdXNiYXRfaW5mbyB7Ci0JaW50IGRldmljZXR5cGU7Ci0KLQkvKiBVc2VkIGZvciBGbGFzaCByZWFkZXJzIG9ubHkgKi8KLQl1bnNpZ25lZCBsb25nIHNlY3RvcnM7ICAgICAvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KLQl1bnNpZ25lZCBsb25nIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLwotCi0JdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCi0JdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOyAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBmYjY1ZDIyMS4uZDQ4Yzg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC0yMjAsNiArMjIwLDcgQEAKIAkJc3RhdHVzID0gdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXJldHVybiBzdGF0dXM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jb250cm9sX21zZyk7CiAKIC8qIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHVzYl9jbGVhcl9oYWx0KCkgdGhhdCBhbGxvd3MgZWFybHkgdGVybWluYXRpb24gYW5kCiAgKiBkb2Vzbid0IHJlYWQgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgLS0gdGhpcyBpcyBiZWNhdXNlIHNvbWUgZGV2aWNlcwpAQCAtMjU0LDYgKzI1NSw3IEBACiAJVVNfREVCVUdQKCIlczogcmVzdWx0ID0gJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jbGVhcl9oYWx0KTsKIAogCiAvKgpAQCAtMzUyLDYgKzM1NCw3IEBACiAJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBzaXplLCByZXN1bHQsCiAJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfY3RybF90cmFuc2Zlcik7CiAKIC8qCiAgKiBSZWNlaXZlIG9uZSBpbnRlcnJ1cHQgYnVmZmVyLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKQEAgLTQwNyw2ICs0MTAsNyBAQAogCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsIAogCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKTsKIAogLyoKICAqIFRyYW5zZmVyIGEgc2NhdHRlci1nYXRoZXIgbGlzdCB2aWEgYnVsayB0cmFuc2ZlcgpAQCAtNDc0LDYgKzQ3OCw3IEBACiAJc2NzaV9zZXRfcmVzaWQoc3JiLCBzY3NpX2J1ZmZsZW4oc3JiKSAtIHBhcnRpYWwpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9idWxrX3NyYik7CiAKIC8qCiAgKiBUcmFuc2ZlciBhbiBlbnRpcmUgU0NTSSBjb21tYW5kJ3Mgd29ydGggb2YgZGF0YSBwYXlsb2FkIG92ZXIgdGhlIGJ1bGsKQEAgLTUwOSw2ICs1MTQsNyBAQAogCQkqcmVzaWR1YWwgPSBsZW5ndGhfbGVmdDsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVHJhbnNwb3J0IHJvdXRpbmVzCkBAIC05NDAsNiArOTQ2LDcgQEAKIAkJdXNiX3N0b3JfY2xlYXJfaGFsdCh1cywgcGlwZSk7CiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9DQl90cmFuc3BvcnQpOwogCiAvKgogICogQnVsayBvbmx5IHRyYW5zcG9ydApAQCAtMTE1Niw2ICsxMTYzLDcgQEAKIAkvKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkbywgd2UncmUgaW4gdHJvdWJsZSAqLwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVzZXQgcm91dGluZXMKQEAgLTEyMzAsNiArMTIzOCw3IEBACiAJCQkJIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKIAkJCQkgMCwgdXMtPmlmbnVtLCB1cy0+aW9idWYsIENCX1JFU0VUX0NNRF9TSVpFKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0NCX3Jlc2V0KTsKIAogLyogVGhpcyBpc3N1ZXMgYSBCdWxrLW9ubHkgUmVzZXQgdG8gdGhlIGRldmljZSBpbiBxdWVzdGlvbiwgaW5jbHVkaW5nCiAgKiBjbGVhcmluZyB0aGUgc3Vic2VxdWVudCBlbmRwb2ludCBoYWx0cyB0aGF0IG1heSBvY2N1ci4KQEAgLTEyNDIsNiArMTI1MSw3IEBACiAJCQkJIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKIAkJCQkgMCwgdXMtPmlmbnVtLCBOVUxMLCAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0J1bGtfcmVzZXQpOwogCiAvKiBJc3N1ZSBhIFVTQiBwb3J0IHJlc2V0IHRvIHRoZSBkZXZpY2UuICBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQKICAqIHVzLT5kZXZfbXV0ZXguCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaApzaW1pbGFyaXR5IGluZGV4IDYwJQpjb3B5IGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKY29weSB0byBkcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgKaW5kZXggZmJhZGE4OS4uOGM0MTJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIEFsYXVkYS1iYXNlZCBjYXJkIHJlYWRlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xOSw3ICsxNSwxNyBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBfQ1lQUkVTU19BVEFDQl9IXwotI2RlZmluZSBfQ1lQUkVTU19BVEFDQl9IXwotZXh0ZXJuIHZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kKiwgc3RydWN0IHVzX2RhdGEqKTsKLSNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMiwKKwkJIkZ1amlmaWxtIiwKKwkJIkRQQy1SMSAoQWxhdWRhKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMiwKKwkJIk9seW1wdXMiLAorCQkiTUFVU0ItMTAgKEFsYXVkYSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGJlNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApAQCAtMCwwICsxLDM0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgZGV2aWNlcyBiYXNlZCBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZQorICoJd2l0aCBzdXBwb3J0IGZvciBBVEFDQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0JfTU9EVUxFKQorCisvKiBDWTdDNjgzMDAgOiBzdXBwb3J0IGF0YWNiICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMwLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBBVDJMUCIsCisJCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKKworLyogQ1k3QzY4MzEwIDogc3VwcG9ydCBhdGFjYiBhbmQgYXRhY2IyICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBJU0QtMzAwTFAiLAorCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kYXRhZmFiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Mjk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCkBAIC0wLDAgKzEsOTggQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgRGF0YWZhYiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTAwMCwgMHgwMDAwLCAweDAwMTUsCisJCSJEYXRhZmFiIiwKKwkJIk1EQ0ZFLUIgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKgorICogVGhlIGZvbGxvd2luZyBEYXRhZmFiLWJhc2VkIGRldmljZXMgbWF5IG9yIG1heSBub3Qgd29yaworICogdXNpbmcgdGhlIGN1cnJlbnQgZHJpdmVyLi4udGhlIDB4ZmZmZiBpcyBhcmJpdHJhcnkgc2luY2UgSQorICogZG9uJ3Qga25vdyB3aGF0IGRldmljZSB2ZXJzaW9ucyBleGlzdCBmb3IgdGhlc2UgZ3V5cy4KKyAqCisgKiBUaGUgMHhhMDAzIGFuZCAweGEwMDQgZGV2aWNlcyBpbiBwYXJ0aWN1bGFyIEknbSBjdXJpb3VzIGFib3V0LgorICogSSdtIHRvbGQgdGhleSBleGlzdCBidXQgc28gZmFyIG5vYm9keSBoYXMgY29tZSBmb3J3YXJkIHRvIHNheSB0aGF0CisgKiB0aGV5IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4gIEdpdmVuIHRoZSBzdWNjZXNzIHdlJ3ZlIGhhZCBnZXR0aW5nCisgKiBvdGhlciBEYXRhZmFiLWJhc2VkIGNhcmRzIG9wZXJhdGlvbmFsIHdpdGggdGhpcyBkcml2ZXIsIEkndmUgZGVjaWRlZAorICogdG8gbGVhdmUgdGhlc2UgdHdvIGRldmljZXMgaW4gdGhlIGxpc3QuCisgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMSwgMHgwMDAwLCAweGZmZmYsCisJCSJTSUlHL0RhdGFmYWIiLAorCQkiU0lJRy9EYXRhZmFiIE1lbW9yeSBTdGljaytDRiBSZWFkZXIvV3JpdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAzLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDQsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCisJCSJQTlkvRGF0YWZhYiIsCisJCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA2LCAweDAwMDAsIDB4ZmZmZiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIiLAorCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEZlbGl4IE1vZWxsZXIgPGZlbGl4QGRlcmtsZWNrcy5kZT4KKyAqIGluIEdlcm1hbnkgdGhpcyBpcyBzb2xkIGJ5IEhhbWEgd2l0aCB0aGUgcHJvZHVjdG51bWJlciA0Njk1MgorICogYXMgIkR1YWxTbG90IENvbXBhY3RGbGFzaChUTSkgJiBNU3RpY2sgRHJpdmUgVVNCIgorICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTBiLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFGYWIgU3lzdGVtcyBJbmMuIiwKKwkJIlVTQiBDRitNUyIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiQWNvbWRhdGEiLAorCQkiQ0YiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggY2ZkZTc0YS4uMWMxZjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC01Myw2ICs1MywxMSBAQAogICogYXMgb3Bwb3NlZCB0byBkZXZpY2VzIHRoYXQgZG8gc29tZXRoaW5nIHN0cmFuZ2VseSBvciB3cm9uZ2x5LgogICovCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSAmJiBcCisJCSFkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorI2RlZmluZSBOT19TRERSMDkKKyNlbmRpZgorCiAvKiBwYXRjaCBzdWJtaXR0ZWQgYnkgVml2aWFuIEJyZWdpZXIgPFZpdmlhbi5CcmVnaWVyQGltYWcuZnI+CiAgKi8KIFVOVVNVQUxfREVWKCAgMHgwM2ViLCAweDIwMDIsIDB4MDEwMCwgMHgwMTAwLApAQCAtODAsMTggKzg1LDYgQEAKIAkJIkNELVdyaXRlcisiLAogCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAyMDcsIDB4MDAwMSwgMHgwMDAxLAotCQkiSFAiLAotCQkiQ0QtV3JpdGVyKyA4MjAwZSIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKLQotVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDMwNywgMHgwMDAxLCAweDAwMDEsCi0JCSJIUCIsCi0JCSJDRC1Xcml0ZXIrIENELTRlIiwKLQkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwNzBjLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhQIiwKQEAgLTI0NiwxMiArMjM5LDcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiTWljcm90ZWNoIiwKLQkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAogCQkiTWljcm90ZWNoIiwKIAkJIkNhbWVyYU1hdGUiLApAQCAtMjg4LDEzICsyNzYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9UX0xPQ0tBQkxFICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKLVVOVVNVQUxfREVWKCAgMHgwNDVhLCAweDUyMTAsIDB4MDEwMSwgMHgwMTAxLAotCQkiUmlvIiwKLQkJIlJpbyBLYXJtYSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0tBUk1BLCByaW9fa2FybWFfaW5pdCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgVGFtYXMgS2VyZWNzZW4gPGtlcmVjc2VuQGJpZ2Zvb3QuY29tPgogICogT2J2aW91c2x5IHRoZSBQUk9NIGhhcyBub3QgYmVlbiBjdXN0b21pemVkIGJ5IHRoZSBWQVI7CiAgKiB0aGUgVmVuZG9yIGFuZCBQcm9kdWN0IHN0cmluZyBkZXNjcmlwdG9ycyBhcmU6CkBAIC0zNzUsMjIgKzM1Niw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfQ0IsIE5VTEwsCiAJCVVTX0ZMX01BWF9TRUNUT1JTX01JTiksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotLyogQ1k3QzY4MzAwIDogc3VwcG9ydCBhdGFjYiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMCwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgQVQyTFAiLAotCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJMCksCi0KLS8qIENZN0M2ODMxMCA6IHN1cHBvcnQgYXRhY2IgYW5kIGF0YWNiMiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMSwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgSVNELTMwMExQIiwKLQkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFNpbW9uIExldml0dCA8c2ltb25Ad2hhdHRmLmNvbT4KICAqIFRoaXMgZW50cnkgbmVlZHMgU3ViIGFuZCBQcm90byBmaWVsZHMgKi8KIFVOVVNVQUxfREVWKCAgMHgwNGI4LCAweDA2MDEsIDB4MDEwMCwgMHgwMTAwLApAQCAtNDY3LDIwICs0MzIsNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsIAogCQlVU19GTF9TQ01fTVVMVF9UQVJHICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDAzLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFIwOSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKLQkJMCksCi0KLS8qIFRoaXMgZW50cnkgaXMgZnJvbSBBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sICovCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKLQkJIlNDTSBNaWNyb3N5c3RlbXMiLAotCQkiZVVTQiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdCwKLQkJMCksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCiAJCSJTQ00gTWljcm9zeXN0ZW1zIiwKIAkJImVVU0IgQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLApAQCAtNTM1LDE0ICs0ODcsNiBAQAogCQkiQ0QtUlcgRGV2aWNlIiwKIAkJVVNfU0NfODAyMCwgVVNfUFJfQ0IsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgxMDEwLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNodXR0bGUvU0NNIiwKLQkJIlVTQkFULTAyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfZmxhc2gsCi0JCVVTX0ZMX1NJTkdMRV9MVU4pLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERtaXRyeSBLaGx5c3RvdiA8YWRtaW5pbXVzQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNGU4LCAweDUwN2MsIDB4MDIyMCwgMHgwMjIwLAogCQkiU2Ftc3VuZyIsCkBAIC02NDUsMTQgKzU4OSw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi1VTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKLQkJIlNvbnkiLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0jZW5kaWYKLQogLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nLCA8b2xoQHN1c2UuZGU+IFN1U0UgQnVnemlsbGEgIzQ5MDQ5ICovCiBVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJjLCAweDA1MDEsIDB4MjAwMCwKIAkJIlNvbnkiLApAQCAtNzQ5LDEzICs2ODUsNiBAQAogCQkiU2lsaWNvbiBNZWRpYSBSL1ciLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi1VTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMiwKLQkJIkZ1amlmaWxtIiwKLQkJIkRQQy1SMSAoQWxhdWRhKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwICksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgUlRFIDxyYXN6aWxraUB5YW5kZXgucnU+ICovCiBVTlVTVUFMX0RFViggIDB4MDU4ZiwgMHg2Mzg3LCAweDAxNDEsIDB4MDE0MSwKIAkJIkpldEZsYXNoIiwKQEAgLTc5OCwzMiArNzI3LDYgQEAKIAkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwKIAkJVVNfRkxfTkVFRF9PVkVSUklERSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMzAxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDM1MSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KIC8qIFN1Ym1pdHRlZCBieSBTdmVuIEFuZGVyc29uIDxzdmVuLWxpbnV4QGFuZGVyc29uLmRlPgogICogVGhlcmUgYXJlIGF0IGxlYXN0IGZvdXIgUHJvZHVjdElEcyB1c2VkIGZvciBpUG9kcywgc28gSSBhZGRlZCAweDEyMDIgYW5kCiAgKiAweDEyMDQuIFRoZXkganVzdCBuZWVkIHRoZSBVU19GTF9GSVhfQ0FQQUNJVFkuIEFzIHRoZSBiY2REZXZpY2UgYXBwZWFycwpAQCAtODc3LDE0ICs3ODAsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb3B0aW9uX21zX2luaXQsCiAJCTApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi1VTlVTVUFMX0RFViggIDB4MDVkYywgMHgwMDAxLCAweDAwMDAsIDB4MDAwMSwKLQkJIkxleGFyIiwKLQkJIkp1bXBzaG90IFVTQiBDRiBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9KVU1QU0hPVCwgTlVMTCwKLQkJVVNfRkxfTkVFRF9PVkVSUklERSApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJsYWtlIE1hdGhlbnkgPGJtYXRoZW55QHB1cmR1ZS5lZHU+ICovCiBVTlVTVUFMX0RFViggIDB4MDVkYywgMHhiMDAyLCAweDAwMDAsIDB4MDExMywKIAkJIkxleGFyIiwKQEAgLTkzNSwxNCArODMwLDYgQEAKIAkJIkZsb3BweSBEcml2ZSIsCiAJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsIDAgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNjZiLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiT2x5bXB1cyIsCi0JCSJDYW1lZGlhIE1BVVNCLTIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERhcnNlbiBMdSA8ZGFyc2VuQG1pY3JvLmVlLm50aHUuZWR1LnR3PiAqLwogVU5VU1VBTF9ERVYoIDB4MDY2ZiwgMHg4MDAwLCAweDAwMDEsIDB4MDAwMSwKIAkJIlNpZ21hVGVsIiwKQEAgLTEwNDMsMzUgKzkzMCwxMiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0NBUEFDSVRZICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAotCQkiU2FuZGlzayIsCi0JCSJJbWFnZU1hdGUgU0REUi0wNWIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0KIFVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLAogCQkiU2FuZGlzayIsCiAJCSJJbWFnZU1hdGUgU0REUi0xMiIsCiAJCVVTX1NDX1NDU0ksIFVTX1BSX0NCLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMjAwLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFItMDkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQotVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCi0JCSJGcmVlY29tIiwKLQkJIlVTQi1JREUiLAotCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGZyZWVjb21faW5pdCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgRWVybyBWb2xvdGluZW4gPGVlcm9AcGluZy12aWluaS5vcmc+ICovCiBVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmY2NkLCAweDAwMDAsIDB4OTk5OSwKIAkJIkZyZWVjb20gVGVjaG5vbG9naWVzIiwKQEAgLTEwOTEsMTIgKzk1NSw3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKIAkJVVNfRkxfU0NNX01VTFRfVEFSRyApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCi0JCSJNaWNyb3RlY2giLAotCQkiQ2FtZXJhTWF0ZSAoRFBDTV9VU0IpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwICksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCiAJCSJNaWNyb3RlY2giLAogCQkiQ2FtZXJhTWF0ZSIsCkBAIC0xMTA0LDEwOCArOTYzLDYgQEAKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi1VTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMiwKLQkJIk9seW1wdXMiLAotCQkiTUFVU0ItMTAgKEFsYXVkYSkiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTAwMCwgMHgwMDAwLCAweDAwMTUsCi0JCSJEYXRhZmFiIiwKLQkJIk1EQ0ZFLUIgVVNCIENGIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgRGF0YWZhYi1iYXNlZCBkZXZpY2VzIG1heSBvciBtYXkgbm90IHdvcmsKLSAqIHVzaW5nIHRoZSBjdXJyZW50IGRyaXZlci4uLnRoZSAweGZmZmYgaXMgYXJiaXRyYXJ5IHNpbmNlIEkKLSAqIGRvbid0IGtub3cgd2hhdCBkZXZpY2UgdmVyc2lvbnMgZXhpc3QgZm9yIHRoZXNlIGd1eXMuCi0gKgotICogVGhlIDB4YTAwMyBhbmQgMHhhMDA0IGRldmljZXMgaW4gcGFydGljdWxhciBJJ20gY3VyaW91cyBhYm91dC4KLSAqIEknbSB0b2xkIHRoZXkgZXhpc3QgYnV0IHNvIGZhciBub2JvZHkgaGFzIGNvbWUgZm9yd2FyZCB0byBzYXkgdGhhdAotICogdGhleSB3b3JrIHdpdGggdGhpcyBkcml2ZXIuICBHaXZlbiB0aGUgc3VjY2VzcyB3ZSd2ZSBoYWQgZ2V0dGluZwotICogb3RoZXIgRGF0YWZhYi1iYXNlZCBjYXJkcyBvcGVyYXRpb25hbCB3aXRoIHRoaXMgZHJpdmVyLCBJJ3ZlIGRlY2lkZWQKLSAqIHRvIGxlYXZlIHRoZXNlIHR3byBkZXZpY2VzIGluIHRoZSBsaXN0LgotICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDEsIDB4MDAwMCwgMHhmZmZmLAotCQkiU0lJRy9EYXRhZmFiIiwKLQkJIlNJSUcvRGF0YWZhYiBNZW1vcnkgU3RpY2srQ0YgUmVhZGVyL1dyaXRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotLyogUmVwb3J0ZWQgYnkgSm9zZWYgUmVpc2luZ2VyIDxqb3NlZi5yZWlzaW5nZXJAbmV0Y29sb2duZS5kZT4gKi8KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMiwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiTUQyL01EMyBEaXNrIGVuY2xvc3VyZSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAzLCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIvVW5rbm93biIsCi0JCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA0LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIvVW5rbm93biIsCi0JCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA1LCAweDAwMDAsIDB4ZmZmZiwKLQkJIlBOWS9EYXRhZmFiIiwKLQkJIlBOWS9EYXRhZmFiIENGK1NNIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA2LCAweDAwMDAsIDB4ZmZmZiwKLQkJIlNpbXBsZSBUZWNoL0RhdGFmYWIiLAotCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0jZW5kaWYKLQkJCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotLyogQ29udHJpYnV0ZWQgYnkgUGV0ZXIgV2FlY2h0bGVyICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LAotCQkiRGF0YWZhYiIsCi0JCSJNRFNNLUIgcmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9GSVhfSU5RVUlSWSApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKLQkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKLQkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0vKiBSZXBvcnRlZCBieSBGZWxpeCBNb2VsbGVyIDxmZWxpeEBkZXJrbGVja3MuZGU+Ci0gKiBpbiBHZXJtYW55IHRoaXMgaXMgc29sZCBieSBIYW1hIHdpdGggdGhlIHByb2R1Y3RudW1iZXIgNDY5NTIKLSAqIGFzICJEdWFsU2xvdCBDb21wYWN0Rmxhc2goVE0pICYgTVN0aWNrIERyaXZlIFVTQiIKLSAqLwotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwYiwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhRmFiIFN5c3RlbXMgSW5jLiIsCi0JCSJVU0IgQ0YrTVMiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLSNlbmRpZgotCiAvKiBEYXRhZmFiIEtFQ0YtVVNCIC8gU2FnYXRlayBEQ1MtQ0YgLyBTaW1wbGV0ZWNoIEZsYXNobGluayBVQ0YtMTAwCiAgKiBPbmx5IHJldmlzaW9uIDEuMTMgdGVzdGVkIChzYW1lIGZvciBhbGwgb2YgdGhlIGFib3ZlIGRldmljZXMsCiAgKiBiYXNlZCBvbiB0aGUgRGF0YWZhYiBERi1VRy0wNyBjaGlwKS4gIE5lZWRlZCBmb3IgVVNfRkxfRklYX0lOUVVJUlkuCkBAIC0xNDA5LDI5ICsxMTY2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NBTkVfU0VOU0UgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiQVRJIiwKLQkJIlVTQiBDYWJsZSAyMDUiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIkNGIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIlNNIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQogVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzMxMCwgMHgwMDAwLCAweDk5OTksCiAJCSJNYXh0b3IiLAogCQkiVVNCIHRvIFNBVEEiLApAQCAtMTQ0OCwyMyArMTE4Miw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLS8qIFN1Ym1pdHRlZCBieTogTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Ci0gKiBOZWVkZWQgZm9yIE9uZVRvdWNoIGV4dGVuc2lvbiB0byB1c2Itc3RvcmFnZQotICoKLSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAotCVVOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMDAsIDB4MDAwMCwgMHg5OTk5LAotCQkJIk1heHRvciIsCi0JCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKLQkJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAotCQkJMCksCi0JVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAxMCwgMHgwMDAwLCAweDk5OTksCi0JCQkiTWF4dG9yIiwKLQkJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAotCQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCi0JCQkwKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgSm9yaXMgU3RydXl2ZSA8am9yaXNAc3RydXl2ZS5iZT4gKi8KIFVOVVNVQUxfREVWKCAweDBkOTYsIDB4NDEwYSwgMHgwMDAxLCAweGZmZmYsCiAJCSJNZWRpb24iLApAQCAtMjExNywxNCArMTgzNCw2IEBACiAJCSJNaWNybyBNaW5pIDFHQiIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLVVOVVNVQUxfREVWKCAgMHg1NWFhLCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LCAKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFI1NSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgQW5kcmV3IFNpbW1vbnMgPGFuZHJldy5zaW1tb25zQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHhlZDA2LCAweDQ1MDAsIDB4MDAwMSwgMHgwMDAxLAogCQkiRGF0YVN0b3IiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZnJlZWNvbS5oCnNpbWlsYXJpdHkgaW5kZXggNjclCmNvcHkgZnJvbSBkcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaApjb3B5IHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmgKaW5kZXggZmJhZGE4OS4uMzc1ODY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2ZyZWVjb20uaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCisJCSJGcmVlY29tIiwKKwkJIlVTQi1JREUiLAorCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGluaXRfZnJlZWNvbSwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9pc2QyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk5ZGRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDBfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKKwkJIlNvbnkiLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAorCQkiQVRJIiwKKwkJIlVTQiBDYWJsZSAyMDUiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKY29weSB0byBkcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaAppbmRleCBmYmFkYTg5Li4yZTU0OWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApAQCAtMSw4ICsxLDQgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBlbXVsYXRpbmcgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCi0gKiAgICAgICBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZSBzdXBwb3J0aW5nIEFUQUNCLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGlldSBDYXN0ZXQgKGNhc3RldC5tYXR0aGlldUBmcmVlLmZyKQorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBMZXhhciAiSnVtcHNob3QiIENvbXBhY3QgRmxhc2ggcmVhZGVyCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTksNyArMTUsMTMgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NZUFJFU1NfQVRBQ0JfSF8KLSNkZWZpbmUgX0NZUFJFU1NfQVRBQ0JfSF8KLWV4dGVybiB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVF9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNWRjLCAweDAwMDEsIDB4MDAwMCwgMHgwMDAxLAorCQkiTGV4YXIiLAorCQkiSnVtcHNob3QgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0pVTVBTSE9ULCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmgKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKcmVuYW1lIHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCmluZGV4IGZiYWRhODkuLjEyYWUzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIFJpbyBLYXJtYQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDEyIEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKKwkJIlJpbyIsCisJCSJSaW8gS2FybWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9LQVJNQSwgcmlvX2thcm1hX2luaXQsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkzMDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX29uZXRvdWNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBNYXh0b3IgT25lVG91Y2ggVVNCIGhhcmQgZHJpdmUncyBidXR0b24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0hfTU9EVUxFKQorCisvKiBTdWJtaXR0ZWQgYnk6IE5pY2sgU2lsbGlrIDxuLnNpbGxpa0B0ZW1wbGUuZWR1PgorICogTmVlZGVkIGZvciBPbmVUb3VjaCBleHRlbnNpb24gdG8gdXNiLXN0b3JhZ2UKKyAqLworVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAwMCwgMHgwMDAwLCAweDk5OTksCisJCSJNYXh0b3IiLAorCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDEwLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1heHRvciIsCisJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKKwkJMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjA5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWI1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaApAQCAtMCwwICsxLDU2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDQzNiwgMHgwMDA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUjA5IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworLyogVGhpcyBlbnRyeSBpcyBmcm9tIEFuZHJpZXMuQnJvdXdlckBjd2kubmwgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAorCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCisJCSJlVVNCIFNtYXJ0TWVkaWEgLyBDb21wYWN0Rmxhc2ggQWRhcHRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA2NmIsIDB4MDEwNSwgMHgwMTAwLCAweDAxMDAsCisJCSJPbHltcHVzIiwKKwkJIkNhbWVkaWEgTUFVU0ItMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDYsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfc2RkcjU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4MWVmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTVfTU9EVUxFKQorCisvKiBDb250cmlidXRlZCBieSBQZXRlciBXYWVjaHRsZXIgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJEYXRhZmFiIiwKKwkJIk1EU00tQiByZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkFjb21kYXRhIiwKKwkJIlNNIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDU1YWEsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSNTUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlODY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91c2JhdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTQ00gTWljcm9zeXN0ZW1zIChhLmsuYS4gU2h1dHRsZSkgVVNCLUFUQVBJIGNhYmxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDIwNywgMHgwMDAxLCAweDAwMDEsCisJCSJIUCIsCisJCSJDRC1Xcml0ZXIrIDgyMDBlIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMzA3LCAweDAwMDEsIDB4MDAwMSwKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgQ0QtNGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU2h1dHRsZS9TQ00iLAorCQkiVVNCQVQtMDIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKK1VOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCA0YmVjZjQ5Li44MDYwYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CiAgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCi0gKiAgIChjKSAyMDAzIEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKiAgIChjKSAyMDAzLTIwMDkgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdSkKICAqCiAgKiBJbml0aWFsIHdvcmsgYnk6CiAgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQpAQCAtNjYsMzkgKzY2LDYgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0jaW5jbHVkZSAic2h1dHRsZV91c2JhdC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotI2luY2x1ZGUgInNkZHIwOS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotI2luY2x1ZGUgInNkZHI1NS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLSNpbmNsdWRlICJmcmVlY29tLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi0jaW5jbHVkZSAiaXNkMjAwLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotI2luY2x1ZGUgImRhdGFmYWIuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAotI2luY2x1ZGUgImp1bXBzaG90LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0gKLSNpbmNsdWRlICJvbmV0b3VjaC5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotI2luY2x1ZGUgImFsYXVkYS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi0jaW5jbHVkZSAia2FybWEuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0jaW5jbHVkZSAiY3lwcmVzc19hdGFjYi5oIgotI2VuZGlmCiAjaW5jbHVkZSAic2llcnJhX21zLmgiCiAjaW5jbHVkZSAib3B0aW9uX21zLmgiCiAKQEAgLTExOCwzNiArODUsOCBAQAogCiAvKgogICogVGhlIGVudHJpZXMgaW4gdGhpcyB0YWJsZSBjb3JyZXNwb25kLCBsaW5lIGZvciBsaW5lLAotICogd2l0aCB0aGUgZW50cmllcyBvZiB1c191bnVzdWFsX2Rldl9saXN0W10uCisgKiB3aXRoIHRoZSBlbnRyaWVzIGluIHVzYl9zdG9yYWdlX3VzYl9pZHNbXSwgZGVmaW5lZCBpbiB1c3VhbC10YWJsZXMuYy4KICAqLwotI2lmbmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCi0KLSNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLSNkZWZpbmUgQ09NUExJQU5UX0RFVglVTlVTVUFMX0RFVgotCi0jZGVmaW5lIFVTVUFMX0RFVih1c2VQcm90bywgdXNlVHJhbnMsIHVzZVR5cGUpIFwKLXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIHVzZVByb3RvLCB1c2VUcmFucyksIFwKLSAgLmRyaXZlcl9pbmZvID0gKFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHMgW10gPSB7Ci0KLSMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCi0jdW5kZWYgVU5VU1VBTF9ERVYKLSN1bmRlZiBDT01QTElBTlRfREVWCi0jdW5kZWYgVVNVQUxfREVWCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc3RvcmFnZV91c2JfaWRzKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNCX0xJQlVTVUFMICovCi0KLS8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGV2aWNlcyB3ZSByZWNvZ25pemUsIGFsb25nIHdpdGggdGhlaXIgZmxhZyBkYXRhICovCiAKIC8qIFRoZSB2ZW5kb3IgbmFtZSBzaG91bGQgYmUga2VwdCBhdCBlaWdodCBjaGFyYWN0ZXJzIG9yIGxlc3MsIGFuZAogICogdGhlIHByb2R1Y3QgbmFtZSBzaG91bGQgYmUga2VwdCBhdCAxNiBjaGFyYWN0ZXJzIG9yIGxlc3MuIElmIGEgZGV2aWNlCkBAIC0xNzksMTggKzExOCwxNyBAQAogCiBzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHVzX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKICMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiIAotIwl1bmRlZiBVTlVTVUFMX0RFVgotIwl1bmRlZiBDT01QTElBTlRfREVWCi0jCXVuZGVmIFVTVUFMX0RFVgotCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IE5VTEwgfQorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIENPTVBMSUFOVF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKwogCiAjaWZkZWYgQ09ORklHX1BNCS8qIE1pbmltYWwgc3VwcG9ydCBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lICovCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMDcsOCArMTQ1LDkgQEAKIAltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3Jfc3VzcGVuZCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIyMSw4ICsxNjAsOSBAQAogCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXN1bWUpOwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yMzUsNiArMTc1LDcgQEAKIAkgKiB0aGUgZGV2aWNlICovCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9yZXNldF9yZXN1bWUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKQEAgLTI0Myw3ICsxODQsNyBAQAogICogYSBVU0IgcG9ydCByZXNldCwgd2hldGhlciBmcm9tIHRoaXMgZHJpdmVyIG9yIGEgZGlmZmVyZW50IG9uZS4KICAqLwogCi1zdGF0aWMgaW50IHN0b3JhZ2VfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yNTMsOCArMTk0LDkgQEAKIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3ByZV9yZXNldCk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK2ludCB1c2Jfc3Rvcl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIApAQCAtMjY5LDYgKzIxMSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Bvc3RfcmVzZXQpOwogCiAvKgogICogZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlIHRha2VzIGFuIHVuc2lnbmVkIGNoYXIgYXJyYXkgKHdoaWNoIG11c3QKQEAgLTMxMSw2ICsyNTQsNyBAQAogCiAJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKGRhdGEsIGRhdGFfbGVuLCB1cy0+c3JiKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbGxfaW5xdWlyeV9yZXNwb25zZSk7CiAKIHN0YXRpYyBpbnQgdXNiX3N0b3JfY29udHJvbF90aHJlYWQodm9pZCAqIF9fdXMpCiB7CkBAIC01NTEsMjAgKzQ5NSwxMyBAQAogCQkJdmlkLCBwaWQsIGYpOwogfQogCi0vKiBGaW5kIGFuIHVudXN1YWxfZGV2IGRlc2NyaXB0b3IgKGFsd2F5cyBzdWNjZWVkcyBpbiB0aGUgY3VycmVudCBjb2RlKSAqLwotc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiAqZmluZF91bnVzdWFsKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBpbnQgaWRfaW5kZXggPSBpZCAtIHN0b3JhZ2VfdXNiX2lkczsKLQlyZXR1cm4gJnVzX3VudXN1YWxfZGV2X2xpc3RbaWRfaW5kZXhdOwotfQotCiAvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgc3RyaW5nIGRlc2NyaXB0b3JzICovCi1zdGF0aWMgaW50IGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLAorCQlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1cy0+cHVzYl9kZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2MgPQogCQkmdXMtPnB1c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0Jc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldiA9IGZpbmRfdW51c3VhbChpZCk7CiAKIAkvKiBTdG9yZSB0aGUgZW50cmllcyAqLwogCXVzLT51bnVzdWFsX2RldiA9IHVudXN1YWxfZGV2OwpAQCAtNjI5LDcgKzU2Niw3IEBACiB9CiAKIC8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgZ2V0X3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3dpdGNoICh1cy0+cHJvdG9jb2wpIHsKIAljYXNlIFVTX1BSX0NCOgpAQCAtNjUxLDEwMCArNTg4LDExIEBACiAJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydDsKIAkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi0JY2FzZSBVU19QUl9VU0JBVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNodXR0bGUgVVNCQVQiOwotCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLQljYXNlIFVTX1BSX0VVU0JfU0REUjA5OgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0JY2FzZSBVU19QUl9TRERSNTU6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOwotCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjU1X3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHNkZHI1NV9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAwOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KLQljYXNlIFVTX1BSX0RQQ01fVVNCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCi0JY2FzZSBVU19QUl9GUkVFQ09NOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRnJlZWNvbSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBmcmVlY29tX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0JY2FzZSBVU19QUl9EQVRBRkFCOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkRhdGFmYWIgQnVsay1Pbmx5IjsKLQkJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi0JY2FzZSBVU19QUl9KVU1QU0hPVDoKLQkJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJMZXhhciBKdW1wc2hvdCBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0ganVtcHNob3RfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQotCWNhc2UgVVNfUFJfQUxBVURBOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkFsYXVkYSBDb250cm9sL0J1bGsiOwotCQl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKLQkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQotCWNhc2UgVVNfUFJfS0FSTUE6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJSaW8gS2FybWEvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSByaW9fa2FybWFfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlRyYW5zcG9ydDogJXNcbiIsIHVzLT50cmFuc3BvcnRfbmFtZSk7Ci0KLQkvKiBmaXggZm9yIHNpbmdsZS1sdW4gZGV2aWNlcyAqLwotCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKLQkJdXMtPm1heF9sdW4gPSAwOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHByb3RvY29sIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBnZXRfcHJvdG9jb2woc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN3aXRjaCAodXMtPnN1YmNsYXNzKSB7CiAJY2FzZSBVU19TQ19SQkM6CkBAIC03NzksMjYgKzYyNyw3IEBACiAJCXVzLT5wcm90b2NvbF9uYW1lID0gIlVuaWZvcm0gRmxvcHB5IEludGVyZmFjZSAoVUZJKSI7CiAJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdWZpX2NvbW1hbmQ7CiAJCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotCWNhc2UgVVNfU0NfSVNEMjAwOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKLQkJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWNhc2UgVVNfU0NfQ1lQX0FUQUNCOgotCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7Ci0JCXVzLT5wcm90b19oYW5kbGVyID0gY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwogCX0KLQlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOwotCXJldHVybiAwOwogfQogCiAvKiBHZXQgdGhlIHBpcGUgc2V0dGluZ3MgKi8KQEAgLTg0NiwxMiArNjc1LDEyIEBACiAJdXMtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKHVzLT5wdXNiX2RldiwgMCk7CiAJdXMtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzLT5wdXNiX2RldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAl1cy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXMtPnB1c2JfZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAJaWYgKGVwX2ludCkgewogCQl1cy0+cmVjdl9pbnRyX3BpcGUgPSB1c2JfcmN2aW50cGlwZSh1cy0+cHVzYl9kZXYsCi0JCQllcF9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQkJdXNiX2VuZHBvaW50X251bShlcF9pbnQpKTsKIAkJdXMtPmVwX2JJbnRlcnZhbCA9IGVwX2ludC0+YkludGVydmFsOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMTIsMTcgKzg0MSwxNSBAQAogfQogCiAKLS8qIFByb2JlIHRvIHNlZSBpZiB3ZSBjYW4gZHJpdmUgYSBuZXdseS1jb25uZWN0ZWQgVVNCIGRldmljZSAqLwotc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKy8qIEZpcnN0IHBhcnQgb2YgZ2VuZXJhbCBVU0IgbWFzcy1zdG9yYWdlIHByb2JpbmcgKi8KK2ludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXM7CiAJaW50IHJlc3VsdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwotCi0JaWYgKHVzYl91c3VhbF9jaGVja190eXBlKGlkLCBVU0JfVVNfVFlQRV9TVE9SKSkKLQkJcmV0dXJuIC1FTlhJTzsKIAogCVVTX0RFQlVHUCgiVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2UgZGV0ZWN0ZWRcbiIpOwogCkBAIC0xMDQxLDcgKzg2OCw3IEBACiAJICogQWxsb3cgMTYtYnl0ZSBDREJzIGFuZCB0aHVzID4gMlRCCiAJICovCiAJaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKLQl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CisJKnB1cyA9IHVzID0gaG9zdF90b191cyhob3N0KTsKIAltZW1zZXQodXMsIDAsIHNpemVvZihzdHJ1Y3QgdXNfZGF0YSkpOwogCW11dGV4X2luaXQoJih1cy0+ZGV2X211dGV4KSk7CiAJaW5pdF9jb21wbGV0aW9uKCZ1cy0+Y21uZF9yZWFkeSk7CkBAIC0xMDU0LDI0ICs4ODEsNDYgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKIAotCS8qCi0JICogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzCi0JICoKLQkgKiBpZF9pbmRleCBpcyBjYWxjdWxhdGVkIGluIHRoZSBkZWNsYXJhdGlvbiB0byBiZSB0aGUgaW5kZXggbnVtYmVyCi0JICogb2YgdGhlIG1hdGNoIGZyb20gdGhlIHVzYl9kZXZpY2VfaWQgdGFibGUsIHNvIHdlIGNhbiBmaW5kIHRoZQotCSAqIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHByaXZhdGUgdGFibGUuCi0JICovCi0JcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCk7CisJLyogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIGRlc2NyaXB0b3JzICovCisJcmVzdWx0ID0gZ2V0X2RldmljZV9pbmZvKHVzLCBpZCwgdW51c3VhbF9kZXYpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwogCi0JLyogR2V0IHRoZSB0cmFuc3BvcnQsIHByb3RvY29sLCBhbmQgcGlwZSBzZXR0aW5ncyAqLwotCXJlc3VsdCA9IGdldF90cmFuc3BvcnQodXMpOwotCWlmIChyZXN1bHQpCisJLyogR2V0IHN0YW5kYXJkIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgc2V0dGluZ3MgKi8KKwlnZXRfdHJhbnNwb3J0KHVzKTsKKwlnZXRfcHJvdG9jb2wodXMpOworCisJLyogR2l2ZSB0aGUgY2FsbGVyIGEgY2hhbmNlIHRvIGZpbGwgaW4gc3BlY2lhbGl6ZWQgdHJhbnNwb3J0CisJICogb3IgcHJvdG9jb2wgc2V0dGluZ3MuCisJICovCisJcmV0dXJuIDA7CisKK0JhZERldmljZToKKwlVU19ERUJVR1AoInN0b3JhZ2VfcHJvYmUoKSBmYWlsZWRcbiIpOworCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Byb2JlMSk7CisKKy8qIFNlY29uZCBwYXJ0IG9mIGdlbmVyYWwgVVNCIG1hc3Mtc3RvcmFnZSBwcm9iaW5nICovCitpbnQgdXNiX3N0b3JfcHJvYmUyKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOworCWludCByZXN1bHQ7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wgaGF2ZSBib3RoIGJlZW4gc2V0ICovCisJaWYgKCF1cy0+dHJhbnNwb3J0IHx8ICF1cy0+cHJvdG9faGFuZGxlcikgeworCQlyZXN1bHQgPSAtRU5YSU87CiAJCWdvdG8gQmFkRGV2aWNlOwotCXJlc3VsdCA9IGdldF9wcm90b2NvbCh1cyk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBCYWREZXZpY2U7CisJfQorCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKwlVU19ERUJVR1AoIlByb3RvY29sOiAlc1xuIiwgdXMtPnByb3RvY29sX25hbWUpOworCisJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KKwlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NJTkdMRV9MVU4pCisJCXVzLT5tYXhfbHVuID0gMDsKKworCS8qIEZpbmQgdGhlIGVuZHBvaW50cyBhbmQgY2FsY3VsYXRlIHBpcGUgdmFsdWVzICovCiAJcmVzdWx0ID0gZ2V0X3BpcGVzKHVzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKQEAgLTEwODAsNyArOTI5LDcgQEAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyh1cyk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7Ci0JcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKKwlyZXN1bHQgPSBzY3NpX2FkZF9ob3N0KHVzX3RvX2hvc3QodXMpLCAmdXMtPnB1c2JfaW50Zi0+ZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UKIAkJCSJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOwpAQCAtMTEwOCw5ICs5NTcsMTAgQEAKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9wcm9iZTIpOwogCi0vKiBIYW5kbGUgYSBkaXNjb25uZWN0IGV2ZW50IGZyb20gdGhlIFVTQiBjb3JlICovCi1zdGF0aWMgdm9pZCBzdG9yYWdlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCisvKiBIYW5kbGUgYSBVU0IgbWFzcy1zdG9yYWdlIGRpc2Nvbm5lY3QgKi8KK3ZvaWQgdXNiX3N0b3JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCkBAIC0xMTE4LDYgKzk2OCw0MiBAQAogCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHVzKTsKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfZGlzY29ubmVjdCk7CisKKy8qIFRoZSBtYWluIHByb2JlIHJvdXRpbmUgZm9yIHN0YW5kYXJkIGRldmljZXMgKi8KK3N0YXRpYyBpbnQgc3RvcmFnZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwkvKgorCSAqIElmIGxpYnVzdWFsIGlzIGNvbmZpZ3VyZWQsIGxldCBpdCBkZWNpZGUgd2hldGhlciBhIHN0YW5kYXJkCisJICogZGV2aWNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHVzYi1zdG9yYWdlIG9yIGJ5IHViLgorCSAqIElmIHRoZSBkZXZpY2UgaXNuJ3Qgc3RhbmRhcmQgKGlzIGhhbmRsZWQgYnkgYSBzdWJkcml2ZXIKKwkgKiBtb2R1bGUpIHRoZW4gZG9uJ3QgYWNjZXB0IGl0LgorCSAqLworCWlmICh1c2JfdXN1YWxfY2hlY2tfdHlwZShpZCwgVVNCX1VTX1RZUEVfU1RPUikgfHwKKwkJCXVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKGludGYpKQorCQlyZXR1cm4gLUVOWElPOworCisJLyoKKwkgKiBDYWxsIHRoZSBnZW5lcmFsIHByb2JlIHByb2NlZHVyZXMuCisJICoKKwkgKiBUaGUgdW51c3VhbF9kZXZfbGlzdCBhcnJheSBpcyBwYXJhbGxlbCB0byB0aGUgdXNiX3N0b3JhZ2VfdXNiX2lkcworCSAqIHRhYmxlLCBzbyB3ZSB1c2UgdGhlIGluZGV4IG9mIHRoZSBpZCBlbnRyeSB0byBmaW5kIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgdW51c3VhbF9kZXZzIGVudHJ5LgorCSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gdXNiX3N0b3JhZ2VfdXNiX2lkcykgKyB1c191bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogTm8gc3BlY2lhbCB0cmFuc3BvcnQgb3IgcHJvdG9jb2wgc2V0dGluZ3MgaW4gdGhlIG1haW4gbW9kdWxlICovCisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbgpAQCAtMTEyNiwxNSArMTAxMiwxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zdG9yYWdlX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNiLXN0b3JhZ2UiLAogCS5wcm9iZSA9CXN0b3JhZ2VfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQlzdG9yYWdlX2Rpc2Nvbm5lY3QsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPQlzdG9yYWdlX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXN0b3JhZ2VfcmVzdW1lLAotCS5yZXNldF9yZXN1bWUgPQlzdG9yYWdlX3Jlc2V0X3Jlc3VtZSwKLSNlbmRpZgotCS5wcmVfcmVzZXQgPQlzdG9yYWdlX3ByZV9yZXNldCwKLQkucG9zdF9yZXNldCA9CXN0b3JhZ2VfcG9zdF9yZXNldCwKLQkuaWRfdGFibGUgPQlzdG9yYWdlX3VzYl9pZHMsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JdXNiX3N0b3JhZ2VfdXNiX2lkcywKIAkuc29mdF91bmJpbmQgPQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggNjVlNjc0ZS4uMjYwOWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC0xNzcsNCArMTc3LDI1IEBACiAjZGVmaW5lIHNjc2lfdW5sb2NrKGhvc3QpCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAjZGVmaW5lIHNjc2lfbG9jayhob3N0KQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCiAKKy8qIEdlbmVyYWwgcm91dGluZXMgcHJvdmlkZWQgYnkgdGhlIHVzYi1zdG9yYWdlIHN0YW5kYXJkIGNvcmUgKi8KKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBpbnQgdXNiX3N0b3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworI2Vsc2UKKyNkZWZpbmUgdXNiX3N0b3Jfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHVzYl9zdG9yX3Jlc3VtZQkJTlVMTAorI2RlZmluZSB1c2Jfc3Rvcl9yZXNldF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CitleHRlcm4gaW50IHVzYl9zdG9yX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTEoc3RydWN0IHVzX2RhdGEgKipwdXMsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcm9iZTIoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGJkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcworICogVXN1YWwgVGFibGVzIEZpbGUgZm9yIHVzYi1zdG9yYWdlIGFuZCBsaWJ1c3VhbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfdXN1YWwuaD4KKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCisjZGVmaW5lIENPTVBMSUFOVF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKSB9CisKKyNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoreyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAorICAuZHJpdmVyX2luZm8gPSAoKHVzZVR5cGUpPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3RvcmFnZV91c2JfaWRzKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9zdG9yYWdlX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyN1bmRlZiBDT01QTElBTlRfREVWCisjdW5kZWYgVVNVQUxfREVWCisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzIHRvIGlnbm9yZQorICovCitzdHJ1Y3QgaWdub3JlX2VudHJ5IHsKKwl1MTYJdmlkLCBwaWQsIGJjZG1pbiwgYmNkbWF4OworfTsKKworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAorewkJCQkJXAorCS52aWQJPSBpZF92ZW5kb3IsCQlcCisJLnBpZCAJPSBpZF9wcm9kdWN0LAkJXAorCS5iY2RtaW4JPSBiY2REZXZpY2VNaW4sCQlcCisJLmJjZG1heCA9IGJjZERldmljZU1heCwJCVwKK30KKworc3RhdGljIHN0cnVjdCBpZ25vcmVfZW50cnkgaWdub3JlX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2p1bXBzaG90LmgiCisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHIwOS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX3VzYmF0LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKworLyogUmV0dXJuIGFuIGVycm9yIGlmIGEgZGV2aWNlIGlzIGluIHRoZSBpZ25vcmVfaWRzIGxpc3QgKi8KK2ludCB1c2JfdXN1YWxfaWdub3JlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1bnNpZ25lZCB2aWQsIHBpZCwgYmNkOworCXN0cnVjdCBpZ25vcmVfZW50cnkgKnA7CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl2aWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJYmNkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJZm9yIChwID0gaWdub3JlX2lkczsgcC0+dmlkOyArK3ApIHsKKwkJaWYgKHAtPnZpZCA9PSB2aWQgJiYgcC0+cGlkID09IHBpZCAmJgorCQkJCXAtPmJjZG1pbiA8PSBiY2QgJiYgcC0+YmNkbWF4ID49IGJjZCkKKwkJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3VzdWFsX2lnbm9yZV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCBiZTc2MDg0Li42MGJhNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtNDEwLDcgKzQxMCw5IEBACiAJfQogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWluZm8oIlVTQiBTa2VsZXRvbiBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQlNrZWwtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCSAiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsCisJCSBpbnRlcmZhY2UtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC00NDEsNyArNDQzLDcgQEAKIAkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOwogCi0JaW5mbygiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBTa2VsZXRvbiAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKIH0KIAogc3RhdGljIHZvaWQgc2tlbF9kcmF3X2Rvd24oc3RydWN0IHVzYl9za2VsICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKaW5kZXggMTMzNWNiZS4uMjVlYWU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwpAQCAtNjM4LDggKzYzOCw3IEBACiAJdXNiX3B1dF9pbnRmKGlmYWNlKTsKIAlrZnJlZShjYmFmLT5idWZmZXIpOwogCS8qIHBhcmFub2lhOiBjbGVhbiB1cCBjcnlwdG8ga2V5cyAqLwotCW1lbXNldChjYmFmLCAwLCBzaXplb2YoKmNiYWYpKTsKLQlrZnJlZShjYmFmKTsKKwlremZyZWUoY2JhZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjYmFmX2lkX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKaW5kZXggOGUxODE0MS4uZjBhYWMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwpAQCAtODg5LDYgKzg4OSw4IEBACiAJaWYgKHVzYl9kZXYtPnd1c2IgPT0gMCB8fCB1c2JfZGV2LT5kZXZudW0gPT0gMSkKIAkJcmV0dXJuOwkJLyogc2tpcCBub24gd3VzYiBhbmQgd3VzYiBSSHMgKi8KIAorCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpOworCiAJd3VzYmhjID0gd3VzYmhjX2dldF9ieV91c2JfZGV2KHVzYl9kZXYpOwogCWlmICh3dXNiaGMgPT0gTlVMTCkKIAkJZ290byBlcnJvcl9ub2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGY0YWEyOGUuLjgxMThkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMzEyLDYgKzMxMiw3IEBACiAJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgMCk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYWRkcjA7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0RFRkFVTFQpOwogCXVzYl9lcDBfcmVpbml0KHVzYl9kZXYpOwogCiAJLyogU2V0IG5ldyAoYXV0aGVudGljYXRlZCkgYWRkcmVzcy4gKi8KQEAgLTMyNyw2ICszMjgsNyBAQAogCXJlc3VsdCA9IHd1c2Jfc2V0X2Rldl9hZGRyKHd1c2JoYywgd3VzYl9kZXYsIG5ld19hZGRyZXNzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcl9hZGRyOworCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKIAl1c2JfZXAwX3JlaW5pdCh1c2JfZGV2KTsKIAl1c2JfZGV2LT5hdXRoZW50aWNhdGVkID0gMTsKIGVycm9yX2FkZHI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKaW5kZXggNjJiZDQ0NC4uMzc4ZjI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAKIC8qIEFVMTEwMCBMQ0QgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTExMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3NfcmVzOwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAKIAlmYmRldi0+cGFuZWwgPSAma25vd25fbGNkX3BhbmVsc1tkcnZfaW5mby5wYW5lbF9pZHhdOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgKHZvaWQqKWZiZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopZmJkZXYpOwogCiAJLyogQWxsb2NhdGUgcmVnaW9uIGZvciBvdXIgcmVnaXN0ZXJzIGFuZCBtYXAgdGhlbSAqLwogCWlmICghKHJlZ3NfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLApAQCAtNTgzLDE5ICs1ODMsMTkgQEAKIAkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+aW5mby5jbWFwKTsKIAl9CiAJa2ZyZWUoZmJkZXYpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWZiZGV2ID0gKHN0cnVjdCBhdTExMDBmYl9kZXZpY2UqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlmYmRldiA9IChzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKIAlhdTExMDBmYl9mYl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgJmZiZGV2LT5pbmZvKTsKQEAgLTYyMCw5ICs2MjAsOSBAQAogc3RhdGljIHUzMiBzeXNfY2xrc3JjOwogc3RhdGljIHN0cnVjdCBhdTExMDBmYl9yZWdzIGZicmVnczsKIAotaW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NDEsOSArNjQxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NjMsMTAgKzY2MywxMSBAQAogI2RlZmluZSBhdTExMDBmYl9kcnZfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxMTAwZmJfZHJ2X3Byb2JlLAogICAgICAgICAucmVtb3ZlCQk9IGF1MTEwMGZiX2Rydl9yZW1vdmUsCiAJLnN1c3BlbmQJPSBhdTExMDBmYl9kcnZfc3VzcGVuZCwKQEAgLTc1MywxMiArNzU0LDEyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOwogfQogCiB2b2lkIF9fZXhpdCBhdTExMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CiAKIAlrZnJlZShkcnZfaW5mby5vcHRfbW9kZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKaW5kZXggMDNlNTdlZi4uMGQ5NmYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwpAQCAtMTYyMiw3ICsxNjIyLDcgQEAKIAogLyogQVUxMjAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJCS8qIEFsbG9jYXRlIHRoZSBmcmFtZWJ1ZmZlciB0byB0aGUgbWF4aW11bSBzY3JlZW4gc2l6ZSAqLwogCQlmYmRldi0+ZmJfbGVuID0gKHdpbi0+d1twbGFuZV0ueHJlcyAqIHdpbi0+d1twbGFuZV0ueXJlcyAqIGJwcCkgLyA4OwogCi0JCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZGV2LAorCQlmYmRldi0+ZmJfbWVtID0gZG1hX2FsbG9jX25vbmNvaGVyZW50KCZkZXYtPmRldiwKIAkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCSZmYmRldi0+ZmJfcGh5cywgR0ZQX0tFUk5FTCk7CiAJCWlmICghZmJkZXYtPmZiX21lbSkgewpAQCAtMTcxNSw3ICsxNzE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKIAlpbnQgcGxhbmU7CkBAIC0xNzMzLDcgKzE3MzMsOCBAQAogCQkvKiBDbGVhbiB1cCBhbGwgcHJvYmUgZGF0YSAqLwogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmRldi0+ZmJfaW5mbyk7CiAJCWlmIChmYmRldi0+ZmJfbWVtKQotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoZGV2LCBQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAorCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoJmRldi0+ZGV2LAorCQkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7CiAJCWlmIChmYmRldi0+ZmJfaW5mby5jbWFwLmxlbiAhPSAwKQogCQkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+ZmJfaW5mby5jbWFwKTsKQEAgLTE3NDcsMjIgKzE3NDgsMjQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJLyogVE9ETyAqLwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMjAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTEyMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTIwMGZiX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxMjAwLWxjZCIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MTIwMGZiX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IGF1MTIwMGZiX2Rydl9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xOTA2LDEyICsxOTA5LDEyIEBACiAJCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIgbG9hZGVkLlxuIik7CiAJI2VuZGlmCiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTEyMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MTIwMGZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwppbmRleCAzYTNmODBmLi4wNTczZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWFnYmFmYl9wYXIpLCBkZXYpOwogCWlmICghaW5mbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldl9uYW1lKGRldikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciBtYXBcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2M7CiAJfQpAQCAtMTczLDggKzE3Myw5IEBACiAJLyogUmVxdWVzdCB0aGUgSS9PIE1FTSByZXNvdXJjZS4gICovCiAJc3RhcnQgPSB0ZGV2LT5yZXNvdXJjZS5zdGFydDsKIAlsZW4gPSB0ZGV2LT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2LT5idXNfaWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwgZGV2LT5idXNfaWQpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldl9uYW1lKGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2NtYXA7CiAJfQpAQCAtMTgzLDcgKzE4NCw3IEBACiAJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBzdGFydDsKIAlwYXItPm1taW8gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJaWYgKCFwYXItPm1taW8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3Jlc291cmNlOwogCX0KQEAgLTE5NCw3ICsxOTUsNyBAQAogCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5zbWVtX3N0YXJ0LAogCQkJCQkgICAgaW5mby0+Zml4LnNtZW1fbGVuKTsKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX21taW9fbWFwOwogCX0KQEAgLTIwNSwxNCArMjA2LDE0IEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWdvdG8gZXJyX3NtZW1fbWFwOwogCX0KIAogCWdldF9kZXZpY2UoZGV2KTsKIAogCXByX2luZm8oImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYXQgJXNcbiIsCi0JCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2LT5idXNfaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldl9uYW1lKGRldikpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKaW5kZXggOWI4MDU5Ny4uOTg3NDg3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgcG1hZ2JiZmJfcGFyKSwgZGV2KTsKIAlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yNjcsNyArMjY3LDcgQEAKIAogCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgbWFwXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KQEAgLTI4MCw4ICsyODAsOSBAQAogCS8qIFJlcXVlc3QgdGhlIEkvTyBNRU0gcmVzb3VyY2UuICAqLwogCXN0YXJ0ID0gdGRldi0+cmVzb3VyY2Uuc3RhcnQ7CiAJbGVuID0gdGRldi0+cmVzb3VyY2UuZW5kIC0gc3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldi0+YnVzX2lkKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsIGRldi0+YnVzX2lkKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXZfbmFtZShkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsCisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9jbWFwOwogCX0KQEAgLTI5MCw3ICsyOTEsNyBAQAogCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gc3RhcnQ7CiAJcGFyLT5tbWlvID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwogCWlmICghcGFyLT5tbWlvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAl9CkBAIC0zMDEsNyArMzAyLDcgQEAKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IHN0YXJ0ICsgUE1BR0JfQl9GQk1FTTsKIAlwYXItPnNtZW0gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbik7CiAJaWYgKCFwYXItPnNtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfbW1pb19tYXA7CiAJfQpAQCAtMzE2LDcgKzMxNyw3IEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWdvdG8gZXJyX3NtZW1fbWFwOwogCX0KIApAQCAtMzI4LDcgKzMyOSw3IEBACiAJCSBwYXItPm9zYzEgLyAxMDAwLCBwYXItPm9zYzEgJSAxMDAwKTsKIAogCXByX2luZm8oImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgYXQgJXNcbiIsCi0JCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2LT5idXNfaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldl9uYW1lKGRldikpOwogCXByX2luZm8oImZiJWQ6IE9zYzA6ICVzLCBPc2MxOiAlcywgT3NjJXUgc2VsZWN0ZWRcbiIsCiAJCWluZm8tPm5vZGUsIGZyZXEwLCBwYXItPm9zYzEgPyBmcmVxMSA6ICJkaXNhYmxlZCIsCiAJCXBhci0+b3NjMSAhPSAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwppbmRleCA4N2Y4MjZlLi5lMDBjMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wczNmYi5jCkBAIC0xMjEzLDcgKzEyMTMsNyBAQAogCWRldi0+Y29yZS5kcml2ZXJfZGF0YSA9IGluZm87CiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICIlcyAlcywgdXNpbmcgJXUgS2lCIG9mIHZpZGVvIG1lbW9yeVxuIiwKLQkJIGRldl9kcml2ZXJfc3RyaW5nKGluZm8tPmRldiksIGluZm8tPmRldi0+YnVzX2lkLAorCQkgZGV2X2RyaXZlcl9zdHJpbmcoaW5mby0+ZGV2KSwgZGV2X25hbWUoaW5mby0+ZGV2KSwKIAkJIGluZm8tPmZpeC5zbWVtX2xlbiA+PiAxMCk7CiAKIAl0YXNrID0ga3RocmVhZF9ydW4ocHMzZmJkLCBpbmZvLCBERVZJQ0VfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwppbmRleCAwYTBmZDQ4Li41M2Y4ZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNpbmNsdWRlIDxtYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaD4KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KQEAgLTE4OCw3ICsxODgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHZyMmZiX21hcDsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogc3RhdGljIHVuc2lnbmVkIGludCBzaGRtYSA9IFBWUjJfQ0FTQ0FERV9DSEFOOwogc3RhdGljIHVuc2lnbmVkIGludCBwdnIyZG1hID0gT05DSElQX05SX0RNQV9DSEFOTkVMUzsKICNlbmRpZgpAQCAtMjA3LDcgKzIwNyw3IEBACiBzdGF0aWMgaW50IHB2cjJfaW5pdF9jYWJsZSh2b2lkKTsKIHN0YXRpYyBpbnQgcHZyMl9nZXRfcGFyYW0oY29uc3Qgc3RydWN0IHB2cjJfcGFyYW1zICpwLCBjb25zdCBjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwsIGludCBzaXplKTsKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiBzdGF0aWMgc3NpemVfdCBwdnIyZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CiAjZW5kaWYKQEAgLTIxOCw3ICsyMTgsNyBAQAogCS5mYl9ibGFuawk9IHB2cjJmYl9ibGFuaywKIAkuZmJfY2hlY2tfdmFyCT0gcHZyMmZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3Bhcgk9IHB2cjJmYl9zZXRfcGFyLAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAkuZmJfd3JpdGUJPSBwdnIyZmJfd3JpdGUsCiAjZW5kaWYKIAkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCkBAIC02NzEsNyArNjcxLDcgQEAKIAlyZXR1cm4gY2FibGVfdHlwZTsKIH0KIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIHN0YXRpYyBzc2l6ZV90IHB2cjJmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewpAQCAtNzQzLDcgKzc0Myw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotI2VuZGlmIC8qIENPTkZJR19TSF9ETUEgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFZSMl9ETUEgKi8KIAogLyoqCiAgKiBwdnIyZmJfY29tbW9uX2luaXQKQEAgLTg5Myw3ICs4OTMsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAlpZiAocmVxdWVzdF9kbWEocHZyMmRtYSwgInB2cjIiKSAhPSAwKSB7CiAJCWZyZWVfaXJxKEhXX0VWRU5UX1ZTWU5DLCAwKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTkxNSw3ICs5MTUsNyBAQAogCX0KIAogCWZyZWVfaXJxKEhXX0VWRU5UX1ZTWU5DLCAwKTsKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAJZnJlZV9kbWEocHZyMmRtYSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggMmM1ZDA2OS4uOTJlYTBhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTMzLDYgKzMzLDggQEAKIAlzdHJ1Y3QgZmJfaW5mbyBpbmZvOwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKIAlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gZGVmaW87CisJdW5zaWduZWQgbG9uZyBmcmFtZV9lbmQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfZW5kX3dhaXQ7CiB9OwogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CkBAIC0yMjYsNyArMjI4LDEwIEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfbW9iaWxlX2xjZGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaDsKIAl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgaXNfc3ViOworCWludCBrOwogCiAJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCiAJdG1wID0gbGNkY19yZWFkKHByaXYsIF9MRElOVFIpOwpAQCAtMjM0LDggKzIzOSwyNCBAQAogCXRtcCB8PSAweDAwMDAwMGZmIF4gTERJTlRSX0ZTOyAvKiBzdGF0dXMgaW4gbG93IDggKi8KIAlsY2RjX3dyaXRlKHByaXYsIF9MRElOVFIsIHRtcCk7CiAKLQkvKiBkaXNhYmxlIGNsb2NrcyAqLwotCXNoX21vYmlsZV9sY2RjX2Nsa19vZmYocHJpdik7CisJLyogZmlndXJlIG91dCBpZiB0aGlzIGludGVycnVwdCBpcyBmb3IgbWFpbiBvciBzdWIgbGNkICovCisJaXNfc3ViID0gKGxjZGNfcmVhZChwcml2LCBfTERTUikgJiAoMSA8PCAxMCkpID8gMSA6IDA7CisKKwkvKiB3YWtlIHVwIGNoYW5uZWwgYW5kIGRpc2FibGUgY2xvY2tzKi8KKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShwcml2LT5jaCk7IGsrKykgeworCQljaCA9ICZwcml2LT5jaFtrXTsKKworCQlpZiAoIWNoLT5lbmFibGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzX3N1YiA9PSBsY2RjX2NoYW5faXNfc3VibGNkKGNoKSkgeworCQkJY2gtPmZyYW1lX2VuZCA9IDE7CisJCQl3YWtlX3VwKCZjaC0+ZnJhbWVfZW5kX3dhaXQpOworCisJCQlzaF9tb2JpbGVfbGNkY19jbGtfb2ZmKHByaXYpOworCQl9CisJfQorCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC00NDgsMTggKzQ2OSwyNyBAQAogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcJKmJvYXJkX2NmZzsKIAlpbnQgazsKIAotCS8qIHRlbGwgdGhlIGJvYXJkIGNvZGUgdG8gZGlzYWJsZSB0aGUgcGFuZWwgKi8KKwkvKiBjbGVhbiB1cCBkZWZlcnJlZCBpbyBhbmQgYXNrIGJvYXJkIGNvZGUgdG8gZGlzYWJsZSBwYW5lbCAqLwogCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKSB7CiAJCWNoID0gJnByaXYtPmNoW2tdOworCisJCS8qIGRlZmVycmVkIGlvIG1vZGU6CisJCSAqIGZsdXNoIGZyYW1lLCBhbmQgd2FpdCBmb3IgZnJhbWUgZW5kIGludGVycnVwdAorCQkgKiBjbGVhbiB1cCBkZWZlcnJlZCBpbyBhbmQgZW5hYmxlIGNsb2NrCisJCSAqLworCQlpZiAoY2gtPmluZm8uZmJkZWZpbykgeworCQkJY2gtPmZyYW1lX2VuZCA9IDA7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoLT5pbmZvLmRlZmVycmVkX3dvcmssIDApOworCQkJd2FpdF9ldmVudChjaC0+ZnJhbWVfZW5kX3dhaXQsIGNoLT5mcmFtZV9lbmQpOworCQkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cCgmY2gtPmluZm8pOworCQkJY2gtPmluZm8uZmJkZWZpbyA9IE5VTEw7CisJCQlzaF9tb2JpbGVfbGNkY19jbGtfb24ocHJpdik7CisJCX0KKwogCQlib2FyZF9jZmcgPSAmY2gtPmNmZy5ib2FyZF9jZmc7CiAJCWlmIChib2FyZF9jZmctPmRpc3BsYXlfb2ZmKQogCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29mZihib2FyZF9jZmctPmJvYXJkX2RhdGEpOwogCi0JCS8qIGNsZWFudXAgZGVmZXJyZWQgaW8gaWYgZW5hYmxlZCAqLwotCQlpZiAoY2gtPmluZm8uZmJkZWZpbykgewotCQkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cCgmY2gtPmluZm8pOwotCQkJY2gtPmluZm8uZmJkZWZpbyA9IE5VTEw7Ci0JCX0KIAl9CiAKIAkvKiBzdG9wIHRoZSBsY2RjICovCkBAIC02NTIsNiArNjgyLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJc2hfbW9iaWxlX2xjZGNfc3RvcChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlyZXR1cm4gc2hfbW9iaWxlX2xjZGNfc3RhcnQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfbW9iaWxlX2xjZGNfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNoX21vYmlsZV9sY2RjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNoX21vYmlsZV9sY2RjX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9tb2JpbGVfbGNkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNjg3LDcgKzczNyw3IEBACiAJfQogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShpLCBzaF9tb2JpbGVfbGNkY19pcnEsIElSUUZfRElTQUJMRUQsCi0JCQkgICAgcGRldi0+ZGV2LmJ1c19pZCwgcHJpdik7CisJCQkgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIHByaXYpOwogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBpcnFcbiIpOwogCQlnb3RvIGVycjE7CkBAIC03MDcsNiArNzU3LDcgQEAKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlXG4iKTsKIAkJCWdvdG8gZXJyMTsKIAkJfQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5jaFtpXS5mcmFtZV9lbmRfd2FpdCk7CiAKIAkJc3dpdGNoIChwZGF0YS0+Y2hbaV0uY2hhbikgewogCQljYXNlIExDRENfQ0hBTl9NQUlOTENEOgpAQCAtODYwLDYgKzkxMSw3IEBACiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJzaF9tb2JpbGVfbGNkY19mYiIsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBtCQk9ICZzaF9tb2JpbGVfbGNkY19kZXZfcG1fb3BzLAogCX0sCiAJLnByb2JlCQk9IHNoX21vYmlsZV9sY2RjX3Byb2JlLAogCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2xjZGNfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90bWlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKaW5kZXggN2JhZjJkZC4uYTFlYjA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90bWlvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCkBAIC03NTEsNyArNzUxLDcgQEAKIAl9CiAKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsICZ0bWlvZmJfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJCQlkZXYtPmRldi5idXNfaWQsIGluZm8pOworCQkJCQlkZXZfbmFtZSgmZGV2LT5kZXYpLCBpbmZvKTsKIAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwppbmRleCA2YzJkMzdmLi43NGFlNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwpAQCAtMjA0LDggKzIwNCwxMSBAQAogCQl9IGVsc2UgewogCQkJdjg2ZF9zdGFydGVkID0gMTsKIAkJCWVyciA9IGNuX25ldGxpbmtfc2VuZChtLCAwLCBnZnBfYW55KCkpOworCQkJaWYgKGVyciA9PSAtRU5PQlVGUykKKwkJCQllcnIgPSAwOwogCQl9Ci0JfQorCX0gZWxzZSBpZiAoZXJyID09IC1FTk9CVUZTKQorCQllcnIgPSAwOwogCiAJaWYgKCFlcnIgJiYgISh0YXNrLT50LmZsYWdzICYgVEZfRVhJVCkpCiAJCWVyciA9ICF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQodGFzay0+ZG9uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAzMjVjMTBmLi41NWY2NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC05NDAsMjEgKzk0MCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3ZHQuCiAKLWNvbmZpZyBXRFRfNTAxCi0JYm9vbCAiV0RUNTAxIGZlYXR1cmVzIgotCWRlcGVuZHMgb24gV0RUCi0JaGVscAotCSAgU2F5aW5nIFkgaGVyZSBhbmQgY3JlYXRpbmcgYSBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlIC9kZXYvdGVtcGVyYXR1cmUKLQkgIHdpdGggbWFqb3IgbnVtYmVyIDEwIGFuZCBtaW5vciBudW1iZXIgMTMxICgibWFuIG1rbm9kIikgd2lsbCBnaXZlCi0JICB5b3UgYSB0aGVybW9tZXRlciBpbnNpZGUgeW91ciBjb21wdXRlcjogcmVhZGluZyBmcm9tCi0JICAvZGV2L3RlbXBlcmF0dXJlIHlpZWxkcyBvbmUgYnl0ZSwgdGhlIHRlbXBlcmF0dXJlIGluIGRlZ3JlZXMKLQkgIEZhaHJlbmhlaXQuIFRoaXMgd29ya3Mgb25seSBpZiB5b3UgaGF2ZSBhIFdEVDUwMVAgd2F0Y2hkb2cgYm9hcmQKLQkgIGluc3RhbGxlZC4KLQotCSAgSWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBGYW4gVGFjaG9tZXRlciBvbiB0aGUgV0RUNTAxUCwgdGhlbiB5b3UKLQkgIGNhbiBkbyB0aGlzIHZpYSB0aGUgdGFjaG9tZXRlciBwYXJhbWV0ZXIuIE9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhCi0JICBmYW4gdGFjaG9tZXRlciBhY3R1YWxseSBzZXQgdXAuCi0KICMKICMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCmluZGV4IDNlNTdhYTQuLjRkMThjODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCUFjcXVpcmUgU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIFRpbWVyIGRyaXZlcgogICoKLSAqICAgICAgQmFzZWQgb24gd2R0LmMuIE9yaWdpbmFsIGNvcHlyaWdodCBtZXNzYWdlczoKKyAqCUJhc2VkIG9uIHdkdC5jLiBPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgpAQCAtMTcsOSArMTcsOSBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKLSAqICAgICAgMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICAgICAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLSAqICAgICAgICAgIENhbid0IGFkZCB0aW1lb3V0IC0gZHJpdmVyIGRvZXNuJ3QgYWxsb3cgY2hhbmdpbmcgdmFsdWUKKyAqCTE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqCSAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorICoJICAgIENhbid0IGFkZCB0aW1lb3V0IC0gZHJpdmVyIGRvZXNuJ3QgYWxsb3cgY2hhbmdpbmcgdmFsdWUKICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKaW5kZXggYTFkNzg1Ni4uODI0ZDA3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYwpAQCAtMTM4LDcgKzEzOCw5IEBACiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewotCQkub3B0aW9ucyA9IFdESU9GX0tFRVBBTElWRVBJTkcgfCBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfTUFHSUNDTE9TRSwKKwkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwKKwkJCSAgIFdESU9GX1NFVFRJTUVPVVQgfAorCQkJICAgV0RJT0ZfTUFHSUNDTE9TRSwKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAxLAogCQkuaWRlbnRpdHkgPSBXQVRDSERPR19OQU1FLAogCX07CkBAIC0yNTksNyArMjYxLDggQEAKIAkJZ290byB1bnJlZ19zdG9wOwogCX0KIAotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKGFkdndkdF9zZXRfaGVhcnRiZWF0KHRpbWVvdXQpKSB7CiAJCWFkdndkdF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX1RJTUVPVVQpOwogCQlwcmludGsoS0VSTl9JTkZPIFBGWApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKaW5kZXggMmE3NjkwZS4uOTM3YTgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCkBAIC02MCw3ICs2MCw3IEBACiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgJnZhbCk7CiAJdmFsICY9IH4weDNGOwkvKiBNYXNrIGNvdW50ICovCi0JdmFsIHw9ICgxPDwyNSkgfCBhbGlfdGltZW91dF9iaXRzOworCXZhbCB8PSAoMSA8PCAyNSkgfCBhbGlfdGltZW91dF9iaXRzOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgdmFsKTsKIAogCXNwaW5fdW5sb2NrKCZhbGlfbG9jayk7CkBAIC03OSw4ICs3OSw4IEBACiAJc3Bpbl9sb2NrKCZhbGlfbG9jayk7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgJnZhbCk7Ci0JdmFsICY9IH4weDNGOwkvKiBNYXNrIGNvdW50IHRvIHplcm8gKGRpc2FibGVkKSAqLwotCXZhbCAmPSB+KDE8PDI1KTsvKiBhbmQgZm9yIHNhZmV0eSBtYXNrIHRoZSByZXNldCBlbmFibGUgKi8KKwl2YWwgJj0gfjB4M0Y7CQkvKiBNYXNrIGNvdW50IHRvIHplcm8gKGRpc2FibGVkKSAqLworCXZhbCAmPSB+KDEgPDwgMjUpOwkvKiBhbmQgZm9yIHNhZmV0eSBtYXNrIHRoZSByZXNldCBlbmFibGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsIHZhbCk7CiAKIAlzcGluX3VubG9jaygmYWxpX2xvY2spOwpAQCAtODksNyArODksNyBAQAogLyoKICAqCWFsaV9rZWVwYWxpdmUJLQlzZW5kIGEga2VlcGFsaXZlIHRvIHRoZSB3YXRjaGRvZwogICoKLSAqICAgICAgU2VuZCBhIGtlZXBhbGl2ZSB0byB0aGUgdGltZXIgKGFjdHVhbGx5IHdlIHJlc3RhcnQgdGhlIHRpbWVyKS4KKyAqCVNlbmQgYSBrZWVwYWxpdmUgdG8gdGhlIHRpbWVyIChhY3R1YWxseSB3ZSByZXN0YXJ0IHRoZSB0aW1lcikuCiAgKi8KIAogc3RhdGljIHZvaWQgYWxpX2tlZXBhbGl2ZSh2b2lkKQpAQCAtMTA5LDExICsxMDksMTEgQEAKIAlpZiAodCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWVsc2UgaWYgKHQgPCA2MCkKLQkJYWxpX3RpbWVvdXRfYml0cyA9IHR8KDE8PDYpOworCQlhbGlfdGltZW91dF9iaXRzID0gdHwoMSA8PCA2KTsKIAllbHNlIGlmICh0IDwgMzYwMCkKLQkJYWxpX3RpbWVvdXRfYml0cyA9ICh0LzYwKXwoMTw8Nyk7CisJCWFsaV90aW1lb3V0X2JpdHMgPSAodCAvIDYwKXwoMSA8PCA3KTsKIAllbHNlIGlmICh0IDwgMTgwMDApCi0JCWFsaV90aW1lb3V0X2JpdHMgPSAodC8zMDApfCgxPDw2KXwoMTw8Nyk7CisJCWFsaV90aW1lb3V0X2JpdHMgPSAodCAvIDMwMCl8KDEgPDwgNil8KDEgPDwgNyk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAgKi8KIAogc3RhdGljIHNzaXplX3QgYWxpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKKwkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKIAkvKiBTZWUgaWYgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgJ1YnIGFuZCByZWxvYWQgdGhlIHRpbWVyICovCiAJaWYgKGxlbikgewpAQCAtMzQ4LDkgKzM0OCw5IEBACiAJLyogVGltZXIgYml0cyAqLwogCXdkb2cgJj0gfjB4M0Y7CiAJLyogSXNzdWVkIGV2ZW50cyAqLwotCXdkb2cgJj0gfigoMTw8MjcpfCgxPDwyNil8KDE8PDI1KXwoMTw8MjQpKTsKKwl3ZG9nICY9IH4oKDEgPDwgMjcpfCgxIDw8IDI2KXwoMSA8PCAyNSl8KDEgPDwgMjQpKTsKIAkvKiBObyBtb25pdG9yIGJpdHMgKi8KLQl3ZG9nICY9IH4oKDE8PDE2KXwoMTw8MTMpfCgxPDwxMil8KDE8PDExKXwoMTw8MTApfCgxPDw5KSk7CisJd2RvZyAmPSB+KCgxIDw8IDE2KXwoMSA8PCAxMyl8KDEgPDwgMTIpfCgxIDw8IDExKXwoMSA8PCAxMCl8KDEgPDwgOSkpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweENDLCB3ZG9nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKaW5kZXggYTA0NWVmOC4uOTBmOThkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCkBAIC0zNTUsNyArMzU1LDggQEAKIAlhbGltNzEwMV9wbXUgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX003MTAxLAogCQlOVUxMKTsKIAlpZiAoIWFsaW03MTAxX3BtdSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUxpIE03MTAxIFBNVSBub3QgcHJlc2VudCAtIFdEVCBub3Qgc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJBTGkgTTcxMDEgUE1VIG5vdCBwcmVzZW50IC0gV0RUIG5vdCBzZXRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzk5LDcgKzQwMCw4IEBACiAKIAlyYyA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCXdkdF9taXNjZGV2Lm1pbm9yLCByYyk7CiAJCWdvdG8gZXJyX291dF9yZWJvb3Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMKaW5kZXggYTU2YWM4NC4uNDM1YjA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFzYW05X3dkdC5jCkBAIC0yMDEsNyArMjAxLDcgQEAKICAqIFBhdCB0aGUgd2F0Y2hkb2cgd2hlbmV2ZXIgZGV2aWNlIGlzIHdyaXR0ZW4gdG8uCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGF0OTFfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLAotICAgICAgbG9mZl90ICpwcG9zKQorCQkJCQkJCQlsb2ZmX3QgKnBwb3MpCiB7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwppbmRleCAwODRkZmU5Li40MTA3MGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwpAQCAtMSwxMyArMSwxMyBAQAogLyogY3B3ZC5jIC0gZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciBoYXJkd2FyZSB3YXRjaGRvZwogICogdGltZXJzIGZvdW5kIG9uIFN1biBNaWNyb3N5c3RlbXMgQ1AxNDAwIGFuZCBDUDE1MDAgYm9hcmRzLgogICoKLSAqIFRoaXMgZGV2aWNlIHN1cHBvcnRzIGJvdGggdGhlIGdlbmVyaWMgTGludXggd2F0Y2hkb2cgCisgKiBUaGlzIGRldmljZSBzdXBwb3J0cyBib3RoIHRoZSBnZW5lcmljIExpbnV4IHdhdGNoZG9nCiAgKiBpbnRlcmZhY2UgYW5kIFNvbGFyaXMtY29tcGF0aWJsZSBpb2N0bHMgYXMgYmVzdCBpdCBpcwogICogYWJsZS4KICAqCiAgKiBOT1RFOiAJQ1AxNDAwIHN5c3RlbXMgYXBwZWFyIHRvIGhhdmUgYSBkZWZlY3RpdmUgaW50cl9tYXNrCiAgKiAJCQlyZWdpc3RlciBvbiB0aGUgUExELCBwcmV2ZW50aW5nIHRoZSBkaXNhYmxpbmcgb2YKLSAqIAkJCXRpbWVyIGludGVycnVwdHMuICBXZSB1c2UgYSB0aW1lciB0byBwZXJpb2RpY2FsbHkgCisgKiAJCQl0aW1lciBpbnRlcnJ1cHRzLiAgV2UgdXNlIGEgdGltZXIgdG8gcGVyaW9kaWNhbGx5CiAgKiAJCQlyZXNldCAnc3RvcHBlZCcgd2F0Y2hkb2dzIG9uIGFmZmVjdGVkIHBsYXRmb3Jtcy4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgRXJpYyBCcm93ZXIgKGVicm93ZXJAdXNhLm5ldCkKQEAgLTI4LDEwICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAjaW5jbHVkZSA8YXNtL3dhdGNoZG9nLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUJImNwd2QiCkBAIC00Myw4ICs0Miw4IEBACiAjZGVmaW5lIFdEX0JMSU1JVAkweEZGRkYKIAogI2RlZmluZSBXRDBfTUlOT1IJMjEyCi0jZGVmaW5lIFdEMV9NSU5PUgkyMTMJCi0jZGVmaW5lIFdEMl9NSU5PUgkyMTQJCisjZGVmaW5lIFdEMV9NSU5PUgkyMTMKKyNkZWZpbmUgV0QyX01JTk9SCTIxNAogCiAvKiBJbnRlcm5hbCBkcml2ZXIgZGVmaW5pdGlvbnMuICAqLwogI2RlZmluZSBXRDBfSUQJCQkwCkBAIC05MSwxNiArOTAsMTYgQEAKIAogc3RhdGljIHN0cnVjdCBjcHdkICpjcHdkX2RldmljZTsKIAotLyogU3VuIHVzZXMgQWx0ZXJhIFBMRCBFUEY4ODIwQVRDMTQ0LTQgCisvKiBTdW4gdXNlcyBBbHRlcmEgUExEIEVQRjg4MjBBVEMxNDQtNAogICogcHJvdmlkaW5nIHRocmVlIGhhcmR3YXJlIHdhdGNoZG9nczoKICAqCi0gKiAJMSkgUklDIC0gc2VuZHMgYW4gaW50ZXJydXB0IHdoZW4gdHJpZ2dlcmVkCi0gKiAJMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQotICogCTMpIFBPUiAtIGFzc2VydHMgUE9SX0JfUkVTRVQgd2hlbiB0cmlnZ2VyZWQsIHJlc2V0cyBDUFUsIGJhY2twbGFuZSwgYm9hcmQKKyAqIDEpIFJJQyAtIHNlbmRzIGFuIGludGVycnVwdCB3aGVuIHRyaWdnZXJlZAorICogMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQorICogMykgUE9SIC0gYXNzZXJ0cyBQT1JfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVSwgYmFja3BsYW5lLCBib2FyZAogICoKICAqKiogVGltZXIgcmVnaXN0ZXIgYmxvY2sgZGVmaW5pdGlvbiAoc3RydWN0IHdkX3RpbWVyX3JlZ2JsaykKICAqCi0gKiBkY250ciBhbmQgbGltaXQgcmVnaXN0ZXJzIChoYWxmd29yZCBhY2Nlc3MpOiAgICAgIAorICogZGNudHIgYW5kIGxpbWl0IHJlZ2lzdGVycyAoaGFsZndvcmQgYWNjZXNzKToKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHwgMTUgfCAuLi58IDEgfCAwIHwKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwOCw3ICsxMDcsOCBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLQogICogZGNudHIgLSAJQ3VycmVudCAxNi1iaXQgZG93bmNvdW50ZXIgdmFsdWUuCiAgKiAJCQlXaGVuIGRvd25jb3VudGVyIHJlYWNoZXMgJzAnIHdhdGNoZG9nIGV4cGlyZXMuCi0gKiAJCQlSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgcmVzZXRzIGRvd25jb3VudGVyIHdpdGggJ2xpbWl0JyB2YWx1ZS4KKyAqIAkJCVJlYWRpbmcgdGhpcyByZWdpc3RlciByZXNldHMgZG93bmNvdW50ZXIgd2l0aAorICogCQkJJ2xpbWl0JyB2YWx1ZS4KICAqIGxpbWl0IC0gCTE2LWJpdCBjb3VudGRvd24gdmFsdWUgaW4gMS8xMHRoIHNlY29uZCBpbmNyZW1lbnRzLgogICogCQkJV3JpdGluZyB0aGlzIHJlZ2lzdGVyIGJlZ2lucyBjb3VudGRvd24gd2l0aCBpbnB1dCB2YWx1ZS4KICAqIAkJCVJlYWRpbmcgZnJvbSB0aGlzIHJlZ2lzdGVyIGRvZXMgbm90IGFmZmVjdCBjb3VudGVyLgpAQCAtMTU4LDExICsxNTgsMTEgQEAKIHN0YXRpYyBpbnQgd2QxX3RpbWVvdXQgPSAwOwogc3RhdGljIGludCB3ZDJfdGltZW91dCA9IDA7CiAKLW1vZHVsZV9wYXJhbQkod2QwX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QwX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMF90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzAgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QxX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QxX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMV90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzEgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QyX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QyX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMl90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzIgdGltZW91dCBpbiAxLzEwc2VjcyIpOwogCiBNT0RVTEVfQVVUSE9SKCJFcmljIEJyb3dlciA8ZWJyb3dlckB1c2EubmV0PiIpOwpAQCAtMjAxLDkgKzIwMSw5IEBACiBzdGF0aWMgdm9pZCBjcHdkX3RvZ2dsZWludHIoc3RydWN0IGNwd2QgKnAsIGludCBpbmRleCwgaW50IGVuYWJsZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGN1cnJlZ3MgPSBjcHdkX3JlYWRiKHAtPnJlZ3MgKyBQTERfSU1BU0spOwotCXVuc2lnbmVkIGNoYXIgc2V0cmVncyA9IAotCQkoaW5kZXggPT0gLTEpID8gCi0JCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDogCisJdW5zaWduZWQgY2hhciBzZXRyZWdzID0KKwkJKGluZGV4ID09IC0xKSA/CisJCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDoKIAkJKHAtPmRldnNbaW5kZXhdLmludHJfbWFzayk7CiAKIAlpZiAoZW5hYmxlID09IFdEX0lOVFJfT04pCkBAIC0zMDMsMjQgKzMwMywyNCBAQAogCXVuc2lnbmVkIGNoYXIgcmV0ICA9IFdEX1NUT1BQRUQ7CiAKIAkvKiBkZXRlcm1pbmUgU1RPUFBFRCAqLwotCWlmICghc3RhdCkgCisJaWYgKCFzdGF0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogZGV0ZXJtaW5lIEVYUElSRUQgdnMgRlJFRVJVTiB2cyBSVU5OSU5HICovCiAJZWxzZSBpZiAoV0RfU19FWFBJUkVEICYgc3RhdCkgewogCQlyZXQgPSBXRF9FWFBJUkVEOwotCX0gZWxzZSBpZihXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CisJfSBlbHNlIGlmIChXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CiAJCWlmIChpbnRyICYgcC0+ZGV2c1tpbmRleF0uaW50cl9tYXNrKSB7CiAJCQlyZXQgPSBXRF9GUkVFUlVOOwogCQl9IGVsc2UgewogCQkJLyogRnVkZ2UgV0RfRVhQSVJFRCBzdGF0dXMgZm9yIGRlZmVjdGl2ZSBDUDE0MDAtLQotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIGFuIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0VYUElSRUQuCiAJCQkgKgotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIG5vIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0ZSRUVSVU4uCiAJCQkgKi8KQEAgLTMyOSw3ICszMjksOCBAQAogCQkJCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpIHsKIAkJCQkJcmV0ID0gV0RfRVhQSVJFRDsKIAkJCQl9IGVsc2UgewotCQkJCQkvKiB3ZSBjb3VsZCBhcyB3ZWxsIHByZXRlbmQgd2UgYXJlIGV4cGlyZWQgKi8KKwkJCQkJLyogd2UgY291bGQgYXMgd2VsbCBwcmV0ZW5kCisJCQkJCSAqIHdlIGFyZSBleHBpcmVkICovCiAJCQkJCXJldCA9IFdEX0ZSRUVSVU47CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTM0Miw3ICszNDMsNyBAQAogCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpCiAJCXJldCB8PSBXRF9TRVJWSUNFRDsKIAotCXJldHVybihyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjcHdkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0zNjcsMjIgKzM2OCwyMiBAQAogCXN0cnVjdCBjcHdkICpwID0gY3B3ZF9kZXZpY2U7CiAKIAlsb2NrX2tlcm5lbCgpOwotCXN3aXRjaChpbWlub3IoaW5vZGUpKSB7Ci0JCWNhc2UgV0QwX01JTk9SOgotCQljYXNlIFdEMV9NSU5PUjoKLQkJY2FzZSBXRDJfTUlOT1I6Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGltaW5vcihpbm9kZSkpIHsKKwljYXNlIFdEMF9NSU5PUjoKKwljYXNlIFdEMV9NSU5PUjoKKwljYXNlIFdEMl9NSU5PUjoKKwkJYnJlYWs7CiAKLQkJZGVmYXVsdDoKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAtRU5PREVWOworCWRlZmF1bHQ6CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogUmVnaXN0ZXIgSVJRIG9uIGZpcnN0IG9wZW4gb2YgZGV2aWNlICovCiAJaWYgKCFwLT5pbml0aWFsaXplZCkgewotCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsIAorCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgSVJRICVkXG4iLAogCQkJCXAtPmlycSk7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtNDAwLDggKzQwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3B3ZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgCi0JCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgY3B3ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQsCkBAIC00MDksNiArNDA5LDcgQEAKIAkJLmlkZW50aXR5CQk9IERSSVZFUl9OQU1FLAogCX07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGluZGV4ID0gaW1pbm9yKGlub2RlKSAtIFdEMF9NSU5PUjsKIAlzdHJ1Y3QgY3B3ZCAqcCA9IGNwd2RfZGV2aWNlOwogCWludCBzZXRvcHQgPSAwOwpAQCAtNDQyLDcgKzQ0Myw3IEBACiAJCQljcHdkX3N0YXJ0dGltZXIocCwgaW5kZXgpOwogCQl9IGVsc2UgewogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0JCisJCX0KIAkJYnJlYWs7CiAKIAkvKiBTb2xhcmlzLWNvbXBhdGlibGUgSU9DVExzICovCkBAIC00NTgsNyArNDU5LDcgQEAKIAogCWNhc2UgV0lPQ1NUT1A6CiAJCWlmIChwLT5lbmFibGVkKQotCQkJcmV0dXJuKC1FSU5WQUwpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY3B3ZF9zdG9wdGltZXIocCwgaW5kZXgpOwogCQlicmVhazsKQEAgLTQ4MSw3ICs0ODIsNyBAQAogCWNhc2UgV0lPQ1NUT1A6CiAJY2FzZSBXSU9DR1NUQVQ6CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJ2YWwgPSBjcHdkX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcnZhbCA9IGNwd2RfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCkBAIC00OTMsNyArNDk0LDcgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgCitzdGF0aWMgc3NpemVfdCBjcHdkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTUwOCwyMCArNTA5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNwd2RfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCitzdGF0aWMgc3NpemVfdCBjcHdkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkuaW9jdGwgPQljcHdkX2lvY3RsLAotCS5jb21wYXRfaW9jdGwgPQljcHdkX2NvbXBhdF9pb2N0bCwKLQkub3BlbiA9CQljcHdkX29wZW4sCi0JLndyaXRlID0JY3B3ZF93cml0ZSwKLQkucmVhZCA9CQljcHdkX3JlYWQsCi0JLnJlbGVhc2UgPQljcHdkX3JlbGVhc2UsCisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS51bmxvY2tlZF9pb2N0bCA9CWNwd2RfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9CQljcHdkX2NvbXBhdF9pb2N0bCwKKwkub3BlbiA9CQkJY3B3ZF9vcGVuLAorCS53cml0ZSA9CQljcHdkX3dyaXRlLAorCS5yZWFkID0JCQljcHdkX3JlYWQsCisJLnJlbGVhc2UgPQkJY3B3ZF9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgY3B3ZF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwppbmRleCAyZTEzNjAyLi5jNTFkMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNkZWZpbmUgTU9EVUxFX05BTUUgIkRBVklOQ0ktV0RUOiAiCiAKQEAgLTc1LDkgKzc1LDkgQEAKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCiAJLyogcHV0IHdhdGNoZG9nIGluIHNlcnZpY2Ugc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVEwLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCwgd2R0X2Jhc2UgKyBXRFRDUik7CiAJLyogcHV0IHdhdGNoZG9nIGluIGFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTEsIHdkdF9iYXNlICsgV0RUQ1IpOworCWlvd3JpdGUzMihXREtFWV9TRVExLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTkwLDI5ICs5MCwyOSBAQAogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKIAkvKiBkaXNhYmxlLCBpbnRlcm5hbCBjbG9jayBzb3VyY2UgKi8KLQlkYXZpbmNpX3dyaXRlbCgwLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVENSKTsKIAkvKiByZXNldCB0aW1lciwgc2V0IG1vZGUgdG8gNjQtYml0IHdhdGNoZG9nLCBhbmQgdW5yZXNldCAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVEdDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVEdDUik7CiAJdGdjciA9IFRJTU1PREVfNjRCSVRfV0RPRyB8IFRJTTEyUlNfVU5SRVNFVCB8IFRJTTM0UlNfVU5SRVNFVDsKLQlkYXZpbmNpX3dyaXRlbCh0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOworCWlvd3JpdGUzMih0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOwogCS8qIGNsZWFyIGNvdW50ZXIgcmVncyAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMTIpOwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMzQpOworCWlvd3JpdGUzMigwLCB3ZHRfYmFzZSArIFRJTTEyKTsKKwlpb3dyaXRlMzIoMCwgd2R0X2Jhc2UgKyBUSU0zNCk7CiAJLyogc2V0IHRpbWVvdXQgcGVyaW9kICovCiAJdGltZXJfbWFyZ2luID0gKCgodTY0KWhlYXJ0YmVhdCAqIENMT0NLX1RJQ0tfUkFURSkgJiAweGZmZmZmZmZmKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOwogCXRpbWVyX21hcmdpbiA9ICgoKHU2NCloZWFydGJlYXQgKiBDTE9DS19USUNLX1JBVEUpID4+IDMyKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOwogCS8qIGVuYWJsZSBydW4gY29udGludW91c2x5ICovCi0JZGF2aW5jaV93cml0ZWwoRU5BTU9ERTEyX1BFUklPRElDLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKEVOQU1PREUxMl9QRVJJT0RJQywgd2R0X2Jhc2UgKyBUQ1IpOwogCS8qIE9uY2UgdGhlIFdEVCBpcyBpbiBwcmUtYWN0aXZlIHN0YXRlIHdyaXRlIHRvCiAJICogVElNMTIsIFRJTTM0LCBQUkQxMiwgUFJEMzQsIFRDUiwgVEdDUiwgV0RUQ1IgYXJlCiAJICogd3JpdGUgcHJvdGVjdGVkIChleGNlcHQgZm9yIHRoZSBXREtFWSBmaWVsZCkKIAkgKi8KIAkvKiBwdXQgd2F0Y2hkb2cgaW4gcHJlLWFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTAgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCB8IFdERU4sIHdkdF9iYXNlICsgV0RUQ1IpOwogCS8qIHB1dCB3YXRjaGRvZyBpbiBhY3RpdmUgc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVExIHwgV0RFTiwgd2R0X2Jhc2UgKyBXRFRDUik7CisJaW93cml0ZTMyKFdES0VZX1NFUTEgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTE5NywxNyArMTk3LDE2IEBACiB7CiAJaW50IHJldCA9IDAsIHNpemU7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAogCWlmIChoZWFydGJlYXQgPCAxIHx8IGhlYXJ0YmVhdCA+IE1BWF9IRUFSVEJFQVQpCiAJCWhlYXJ0YmVhdCA9IERFRkFVTFRfSEVBUlRCRUFUOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkiRGFWaW5jaSBXYXRjaGRvZyBUaW1lcjogaGVhcnRiZWF0ICVkIHNlY1xuIiwgaGVhcnRiZWF0KTsKKwlkZXZfaW5mbyhkZXYsICJoZWFydGJlYXQgJWQgc2VjXG4iLCBoZWFydGJlYXQpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkJImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC0yMTUsMjAgKzIxNCwyNiBAQAogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAKIAlpZiAod2R0X21lbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCXdkdF9iYXNlID0gKHZvaWQgX19pb21lbSAqKShyZXMtPnN0YXJ0KTsKKworCXdkdF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoIXdkdF9iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZGF2aW5jaV93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CiAJCWtmcmVlKHdkdF9tZW0pOwogCX0gZWxzZSB7CiAJCXNldF9iaXQoV0RUX0RFVklDRV9JTklURUQsICZ3ZHRfc3RhdHVzKTsKIAl9CiAKKwlpb3VubWFwKHdkdF9iYXNlKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKaW5kZXggYTE3MWZjNi4uOWFkZDM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwpAQCAtOCwxOSArOCwxOSBAQAogICoJQmFzZWQgb24gd2R0LmMuCiAgKglPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKKyAqCShjKSBDb3B5cmlnaHQgMTk5Ni0xOTk3IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgICBOZWl0aGVyIEFsYW4gQ294IG5vciBDeW1ydU5ldCBMdGQuIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQotICogICAgICB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKLSAqICAgICAgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoJTmVpdGhlciBBbGFuIENveCBub3IgQ3ltcnVOZXQgTHRkLiBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKKyAqCXdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZAorICoJIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKLSAqICAgICAgKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgorICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgogICovCiAKIC8qIENoYW5nZWxvZzoKQEAgLTM3LDcgKzM3LDcgQEAKICAqCWFkZCBleHBlY3RfY2xvc2Ugc3VwcG9ydAogICoKICAqIDIwMDIuMDUuMzAgLSBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KLSAqIAlBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCisgKglBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCiAgKi8KIAogLyoKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWlmIChpcnEgPT0gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiOiBpbnRlcnJ1cHQgZGlzYWJsZWRcbiIpOwogCi0JZXVyd2R0X3dyaXRlX3JlZyhXRFRfVElNRVJfQ0ZHLCBpcnE8PDQpOworCWV1cndkdF93cml0ZV9yZWcoV0RUX1RJTUVSX0NGRywgaXJxIDw8IDQpOwogCiAJZXVyd2R0X3dyaXRlX3JlZyhXRFRfVU5JVF9TRUwsIFdEVF9VTklUX1NFQ1MpOwkvKiB3ZSB1c2Ugc2Vjb25kcyAqLwogCWV1cndkdF9zZXRfdGltZW91dCgwKTsJLyogdGhlIGRlZmF1bHQgdGltZW91dCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCmluZGV4IDY3OTlhNmQuLjlhY2YwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKQEAgLTM0LDExICszNCwxNSBAQAogCiBzdGF0aWMgaW50IHRpbWVvdXQgPSBXQVRDSERPR19USU1FT1VUOwogbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMuIDE8PSB0aW1lb3V0IDw9MTMxLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsCisJIldhdGNoZG9nIHRpbWVvdXQgaW4gc2Vjb25kcy4gMTw9IHRpbWVvdXQgPD0xMzEsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19USU1FT1VUKSAiLiIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwKKwkiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2U7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfZmxhZ3M7CkBAIC0yNjksNyArMjczLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwgLTEsIE5VTEwsIDApOworCWdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJWX05BTUUsCisJCQkJCQkJCS0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UpOwogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwppbmRleCA3NjNjMWVhLi42Y2YxNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjZGVmaW5lIFBDSV9CSU9TMzJfUEFSQUdSQVBIX0xFTgkxNgogI2RlZmluZSBQQ0lfUk9NX0JBU0UxCQkJMHgwMDBGMDAwMAogI2RlZmluZSBST01fU0laRQkJCTB4MTAwMDAKKyNkZWZpbmUgSFBXRFRfVkVSU0lPTgkJCSIxLjAxIgogCiBzdHJ1Y3QgYmlvczMyX3NlcnZpY2VfZGlyIHsKIAl1MzIgc2lnbmF0dXJlOwpAQCAtMTMwLDE3ICsxMzEsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgY21uX3JlZ2lzdGVycyBjbW5fcmVnczsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwd2R0X2RldmljZXNbXSA9IHsKLQl7Ci0JIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0NPTVBBUSwKLQkgLmRldmljZSA9IDB4QjIwMywKLQkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCi0JIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAotCX0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweEIyMDMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSFAsIDB4MzMwNikgfSwKIAl7MH0sCQkJLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaHB3ZHRfZGV2aWNlcyk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgYXNtaW5saW5lX2NhbGwoc3RydWN0IGNtbl9yZWdpc3RlcnMgKnBpODZSZWdzLCB1bnNpZ25lZCBsb25nICpwUm9tRW50cnkpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBhc21pbmxpbmVfY2FsbChzdHJ1Y3QgY21uX3JlZ2lzdGVycyAqcGk4NlJlZ3MsCisJCQkJCQl1bnNpZ25lZCBsb25nICpwUm9tRW50cnkpOwogCiAjaWZuZGVmIENPTkZJR19YODZfNjQKIC8qIC0tMzIgQml0IEJpb3MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTYwNSw3ICs2MDMsNyBAQAogLyoKICAqCUtlcm5lbCBpbnRlcmZhY2VzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhwd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocHdkdF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLndyaXRlID0gaHB3ZHRfd3JpdGUsCkBAIC03MDQsMTAgKzcwMiwxMSBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8KLQkJImhwIFdhdGNoZG9nIFRpbWVyIERyaXZlcjogMS4wMCIKKwkJImhwIFdhdGNoZG9nIFRpbWVyIERyaXZlcjogJXMiCiAJCSIsIHRpbWVyIG1hcmdpbjogJWQgc2Vjb25kcyAobm93YXlvdXQ9JWQpIgogCQkiLCBhbGxvdyBrZXJuZWwgZHVtcDogJXMgKGRlZmF1bHQgPSAwL09GRikuXG4iLAotCQlzb2Z0X21hcmdpbiwgbm93YXlvdXQsIChhbGxvd19rZHVtcCA9PSAwKSA/ICJPRkYiIDogIk9OIik7CisJCUhQV0RUX1ZFUlNJT04sIHNvZnRfbWFyZ2luLCBub3dheW91dCwKKwkJKGFsbG93X2tkdW1wID09IDApID8gIk9GRiIgOiAiT04iKTsKIAogCXJldHVybiAwOwogCkBAIC03NTcsNiArNzU2LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlRvbSBNaW5nYXJlbGxpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImhwIHdhdGNoZG9nIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oSFBXRFRfVkVSU0lPTik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CiAKIG1vZHVsZV9wYXJhbShzb2Z0X21hcmdpbiwgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYwppbmRleCA3NGY5NTFjLi4yZGJlODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKgogICoJVGhlIHRpbWVyIGlzIGltcGxlbWVudGVkIGluIHRoZSBmb2xsb3dpbmcgSS9PIGNvbnRyb2xsZXIgaHViczoKICAqCShTZWUgdGhlIGludGVsIGRvY3VtZW50YXRpb24gb24gaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20uKQotICoJNjMwMEVTQiBjaGlwIDogZG9jdW1lbnQgbnVtYmVyIDMwMDY0MS0wMDMKKyAqCTYzMDBFU0IgY2hpcCA6IGRvY3VtZW50IG51bWJlciAzMDA2NDEtMDA0CiAgKgogICogIDIwMDRZWVpaIFJvc3MgQmlybwogICoJSW5pdGlhbCB2ZXJzaW9uIDAuMDEKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRVNCX1ZFUlNJT04gIjAuMDMiCisjZGVmaW5lIEVTQl9WRVJTSU9OICIwLjA0IgogI2RlZmluZSBFU0JfTU9EVUxFX05BTUUgImk2MzAwRVNCIHRpbWVyIgogI2RlZmluZSBFU0JfRFJJVkVSX05BTUUgRVNCX01PRFVMRV9OQU1FICIsIHYiIEVTQl9WRVJTSU9OCiAjZGVmaW5lIFBGWCBFU0JfTU9EVUxFX05BTUUgIjogIgpAQCAtODEsNiArODEsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICplc2JfcGNpOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHRyaWdnZXJlZDsgLyogVGhlIHN0YXR1cyBvZiB0aGUgd2F0Y2hkb2cgdXBvbiBib290ICovCiBzdGF0aWMgY2hhciBlc2JfZXhwZWN0X2Nsb3NlOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVzYl9wbGF0Zm9ybV9kZXZpY2U7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiAvKiAzMCBzZWMgZGVmYXVsdCBoZWFydGJlYXQgKDEgPCBoZWFydGJlYXQgPCAyKjEwMjMpICovCkBAIC0xMTQsMTMgKzExNSwxOCBAQAogCXdyaXRlYihFU0JfVU5MT0NLMiwgRVNCX1JFTE9BRF9SRUcpOwogfQogCi1zdGF0aWMgdm9pZCBlc2JfdGltZXJfc3RhcnQodm9pZCkKK3N0YXRpYyBpbnQgZXNiX3RpbWVyX3N0YXJ0KHZvaWQpCiB7CiAJdTggdmFsOwogCisJc3Bpbl9sb2NrKCZlc2JfbG9jayk7CisJZXNiX3VubG9ja19yZWdpc3RlcnMoKTsKKwl3cml0ZXcoRVNCX1dEVF9SRUxPQUQsIEVTQl9SRUxPQURfUkVHKTsKIAkvKiBFbmFibGUgb3IgRW5hYmxlICsgTG9jaz8gKi8KIAl2YWwgPSAweDAyIHwgKG5vd2F5b3V0ID8gMHgwMSA6IDB4MDApOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShlc2JfcGNpLCBFU0JfTE9DS19SRUcsIHZhbCk7CisJc3Bpbl91bmxvY2soJmVzYl9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBlc2JfdGltZXJfc3RvcCh2b2lkKQpAQCAtMjA3LDcgKzIxMyw2IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBSZWxvYWQgYW5kIGFjdGl2YXRlIHRpbWVyICovCi0JZXNiX3RpbWVyX2tlZXBhbGl2ZSgpOwogCWVzYl90aW1lcl9zdGFydCgpOwogCiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwpAQCAtMjQwLDcgKzI0NSw4IEBACiAJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KIAkJCWVzYl9leHBlY3RfY2xvc2UgPSAwOwogCi0JCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAqLworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZQorCQkJICogbWFnaWMgY2hhcmFjdGVyICovCiAJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CiAJCQkJY2hhciBjOwogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCkBAIC0yOTIsNyArMjk4LDYgQEAKIAkJfQogCiAJCWlmIChuZXdfb3B0aW9ucyAmIFdESU9TX0VOQUJMRUNBUkQpIHsKLQkJCWVzYl90aW1lcl9rZWVwYWxpdmUoKTsKIAkJCWVzYl90aW1lcl9zdGFydCgpOwogCQkJcmV0dmFsID0gMDsKIAkJfQpAQCAtMzE5LDE5ICszMjQsNiBAQAogfQogCiAvKgotICogICAgICBOb3RpZnkgc3lzdGVtCi0gKi8KLQotc3RhdGljIGludCBlc2Jfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0JCQkJCXVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQotewotCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCi0JCWVzYl90aW1lcl9zdG9wKCk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KLQotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotLyoKICAqICAgICAgS2VybmVsIEludGVyZmFjZXMKICAqLwogCkBAIC0zNTAsMTAgKzM0Miw2IEBACiAJLmZvcHMgPSAmZXNiX2ZvcHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGVzYl9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGVzYl9ub3RpZnlfc3lzLAotfTsKLQogLyoKICAqIERhdGEgZm9yIFBDSSBkcml2ZXIgaW50ZXJmYWNlCiAgKgpAQCAtMzcyLDcgKzM2MCw3IEBACiAgKiAgICAgIEluaXQgJiBleGl0IHJvdXRpbmVzCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGVzYl9nZXRkZXZpY2Uodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fZGV2aW5pdCBlc2JfZ2V0ZGV2aWNlKHZvaWQpCiB7CiAJdTggdmFsMTsKIAl1bnNpZ25lZCBzaG9ydCB2YWwyOwpAQCAtNDQzLDcgKzQzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIApAQCAtNDU5LDE5ICs0NDcsMTMgQEAKIAkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAxPGhlYXJ0YmVhdDwyMDQ2LCB1c2luZyAlZFxuIiwKIAkJCQkJCQkJaGVhcnRiZWF0KTsKIAl9Ci0JcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZXNiX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7Ci0JCWdvdG8gZXJyX25vdGlmaWVyOworCQlnb3RvIGVycl91bm1hcDsKIAl9CiAJZXNiX3RpbWVyX3N0b3AoKTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWApAQCAtNDc5LDggKzQ2MSw2IEBACiAJCQkJCQlCQVNFQUREUiwgaGVhcnRiZWF0LCBub3dheW91dCk7CiAJcmV0dXJuIDA7CiAKLWVycl9ub3RpZmllcjoKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZXNiX25vdGlmaWVyKTsKIGVycl91bm1hcDoKIAlpb3VubWFwKEJBU0VBRERSKTsKIC8qIGVycl9yZWxlYXNlOiAqLwpAQCAtNDkyLDcgKzQ3Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCS8qIFN0b3AgdGhlIHRpbWVyIGJlZm9yZSB3ZSBsZWF2ZSAqLwogCWlmICghbm93YXlvdXQpCkBAIC01MDAsMTEgKzQ4MCw1OCBAQAogCiAJLyogRGVyZWdpc3RlciAqLwogCW1pc2NfZGVyZWdpc3RlcigmZXNiX21pc2NkZXYpOwotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOwogCWlvdW5tYXAoQkFTRUFERFIpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbihlc2JfcGNpLCAwKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZXNiX3BjaSk7CiAJcGNpX2Rldl9wdXQoZXNiX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVzYl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZXNiX3RpbWVyX3N0b3AoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXNiX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgICAgICAgICAgPSBlc2JfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AoZXNiX3JlbW92ZSksCisJLnNodXRkb3duICAgICAgID0gZXNiX3NodXRkb3duLAorCS5kcml2ZXIgICAgICAgICA9IHsKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgID0gRVNCX01PRFVMRV9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByaW50ayhLRVJOX0lORk8gUEZYICJJbnRlbCA2MzAwRVNCIFdhdGNoRG9nIFRpbWVyIERyaXZlciB2JXNcbiIsCisJCUVTQl9WRVJTSU9OKTsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVzYl9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEVTQl9NT0RVTEVfTkFNRSwKKwkJCQkJCQkJLTEsIE5VTEwsIDApOworCWlmIChJU19FUlIoZXNiX3BsYXRmb3JtX2RldmljZSkpIHsKKwkJZXJyID0gUFRSX0VSUihlc2JfcGxhdGZvcm1fZGV2aWNlKTsKKwkJZ290byB1bnJlZ19wbGF0Zm9ybV9kcml2ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK3VucmVnX3BsYXRmb3JtX2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihlc2JfcGxhdGZvcm1fZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhdGNoZG9nIE1vZHVsZSBVbmxvYWRlZC5cbiIpOwogfQogCiBtb2R1bGVfaW5pdCh3YXRjaGRvZ19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKaW5kZXggZDgyNjRhZC4uZDNjMGY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKQEAgLTQ3LDcgKzQ3LDggQEAKIAogc3RhdGljIGludCB2ZW5kb3JzdXBwb3J0OwogbW9kdWxlX3BhcmFtKHZlbmRvcnN1cHBvcnQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZlbmRvcnN1cHBvcnQsICJpVENPIHZlbmRvciBzcGVjaWZpYyBzdXBwb3J0IG1vZGUsIGRlZmF1bHQ9MCAobm9uZSksIDE9U3VwZXJNaWNybyBQZW50MywgMj1TdXBlck1pY3JvIFBlbnQ0KyIpOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3JzdXBwb3J0LCAiaVRDTyB2ZW5kb3Igc3BlY2lmaWMgc3VwcG9ydCBtb2RlLCBkZWZhdWx0PSIKKwkJCSIwIChub25lKSwgMT1TdXBlck1pY3JvIFBlbnQzLCAyPVN1cGVyTWljcm8gUGVudDQrIik7CiAKIC8qCiAgKglWZW5kb3IgU3BlY2lmaWMgU3VwcG9ydApAQCAtMzA1LDcgKzMwNiw4IEBACiBtb2R1bGVfaW5pdChpVENPX3ZlbmRvcl9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChpVENPX3ZlbmRvcl9leGl0X21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+LCBSLiBTZXJldG55IDxsa3BhdGNoZXNAcGF5cGMuY29tPiIpOworTU9EVUxFX0FVVEhPUigiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4sICIKKwkJIlIuIFNlcmV0bnkgPGxrcGF0Y2hlc0BwYXlwYy5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIFRDTyBWZW5kb3IgU3BlY2lmaWMgV2F0Y2hEb2cgVGltZXIgRHJpdmVyIFN1cHBvcnQiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCAzNTIzMzQ5Li42NDgyNTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0yNzMsNyArMjczLDkgQEAKICNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDMwCS8qIDMwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdCAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7ICAvKiBpbiBzZWNvbmRzICovCiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDI8aGVhcnRiZWF0PDM5IChUQ08gdjEpIG9yIDYxMyAoVENPIHYyKSwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigyPGhlYXJ0YmVhdDwzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTM0Niw3ICszNDgsOCBAQAogCS8qIGRpc2FibGUgY2hpcHNldCdzIE5PX1JFQk9PVCBiaXQgKi8KIAlpZiAoaVRDT193ZHRfdW5zZXRfTk9fUkVCT09UX2JpdCgpKSB7CiAJCXNwaW5fdW5sb2NrKCZpVENPX3dkdF9wcml2YXRlLmlvX2xvY2spOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsIHJlYm9vdCBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgIgorCQkJCQkicmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02NjksNyArNjcyLDggQEAKIAogCS8qIENoZWNrIGNoaXBzZXQncyBOT19SRUJPT1QgYml0ICovCiAJaWYgKGlUQ09fd2R0X3Vuc2V0X05PX1JFQk9PVF9iaXQoKSAmJiBpVENPX3ZlbmRvcl9jaGVja19ub3JlYm9vdF9vbigpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgcmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCisJCQkJCSJyZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOwogCQlyZXQgPSAtRU5PREVWOwkvKiBDYW5ub3QgcmVzZXQgTk9fUkVCT09UIGJpdCAqLwogCQlnb3RvIG91dDsKIAl9CkBAIC03MTYsOCArNzIwLDkgQEAKIAkgICBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAoaVRDT193ZHRfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CiAJCWlUQ09fd2R0X3NldF9oZWFydGJlYXQoV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDIgPCBoZWFydGJlYXQgPCAzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIHVzaW5nICVkXG4iLAotCQkJCQkJCWhlYXJ0YmVhdCk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMiA8IGhlYXJ0YmVhdCA8IDM5IChUQ08gdjEpICIKKwkJCQkib3IgNjEzIChUQ08gdjIpLCB1c2luZyAlZFxuIiwgaGVhcnRiZWF0KTsKIAl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZpVENPX3dkdF9taXNjZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYwppbmRleCBhZmI4YWYzLi5jYzEzM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jCkBAIC0xODgsOCArMTg4LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fb3V0YihpbnQgdmFsLCBpbnQgcmVnKQogewotICAgICAgIG91dGIocmVnLCBSRUcpOwotICAgICAgIG91dGIodmFsLCBWQUwpOworCW91dGIocmVnLCBSRUcpOworCW91dGIodmFsLCBWQUwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2ludyhpbnQgcmVnKQpAQCAtMjA0LDEwICsyMDQsMTAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fb3V0dyhpbnQgdmFsLCBpbnQgcmVnKQogewotICAgICAgIG91dGIocmVnKyssIFJFRyk7Ci0gICAgICAgb3V0Yih2YWwgPj4gOCwgVkFMKTsKLSAgICAgICBvdXRiKHJlZywgUkVHKTsKLSAgICAgICBvdXRiKHZhbCwgVkFMKTsKKwlvdXRiKHJlZysrLCBSRUcpOworCW91dGIodmFsID4+IDgsIFZBTCk7CisJb3V0YihyZWcsIFJFRyk7CisJb3V0Yih2YWwsIFZBTCk7CiB9CiAKIC8qIHdhdGNoZG9nIHRpbWVyIGhhbmRsaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKaW5kZXggZGI5MTg5Mi4uNDY1ZmUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYwpAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogCiAKLSNkZWZpbmUgR1BUX01PREVfV0RUCQkoMTw8MTUpCi0jZGVmaW5lIEdQVF9NT0RFX0NFCQkoMTw8MTIpCisjZGVmaW5lIEdQVF9NT0RFX1dEVAkJKDEgPDwgMTUpCisjZGVmaW5lIEdQVF9NT0RFX0NFCQkoMSA8PCAxMikKICNkZWZpbmUgR1BUX01PREVfTVNfVElNRVIJKDB4NCkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCmluZGV4IDExMzBhZDYuLjE1MTJhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqCUJhc2VkIG9uIHRoZSBTb2Z0RG9nIGRyaXZlcjoKICAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKLSAqIAkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCmluZGV4IDNhY2NlNjIuLjUzOWI2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqCQkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuNGctc3lzdGVtcy5iaXoKICAqCi0gKiAJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jCmluZGV4IGI2NGFlMWEuLmU4MTQ0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMKQEAgLTE2LDExICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9vcmlvbjV4X3dkdC5oPgogCiAvKgogICogV2F0Y2hkb2cgdGltZXIgYmxvY2sgcmVnaXN0ZXJzLgpAQCAtMjksMTMgKzMxLDE0IEBACiAjZGVmaW5lICBXRFRfRU4JCQkweDAwMTAKICNkZWZpbmUgV0RUX1ZBTAkJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMjQpCiAKLSNkZWZpbmUgT1JJT041WF9UQ0xLCQkxNjY2NjY2NjcKLSNkZWZpbmUgV0RUX01BWF9EVVJBVElPTgkoMHhmZmZmZmZmZiAvIE9SSU9ONVhfVENMSykKKyNkZWZpbmUgV0RUX01BWF9DWUNMRV9DT1VOVAkweGZmZmZmZmZmCiAjZGVmaW5lIFdEVF9JTl9VU0UJCTAKICNkZWZpbmUgV0RUX09LX1RPX0NMT1NFCQkxCiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKLXN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gIFdEVF9NQVhfRFVSQVRJT047CS8qIChzZWNvbmRzKSAqLworc3RhdGljIGludCBoZWFydGJlYXQgPSAtMTsJCS8qIG1vZHVsZSBwYXJhbWV0ZXIgKHNlY29uZHMpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHdkdF9tYXhfZHVyYXRpb247CS8qIChzZWNvbmRzKSAqLworc3RhdGljIHVuc2lnbmVkIGludCB3ZHRfdGNsazsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdkdF9zdGF0dXM7CiBzdGF0aWMgc3BpbmxvY2tfdCB3ZHRfbG9jazsKIApAQCAtNDYsNyArNDksNyBAQAogCXNwaW5fbG9jaygmd2R0X2xvY2spOwogCiAJLyogU2V0IHdhdGNoZG9nIGR1cmF0aW9uICovCi0Jd3JpdGVsKE9SSU9ONVhfVENMSyAqIGhlYXJ0YmVhdCwgV0RUX1ZBTCk7CisJd3JpdGVsKHdkdF90Y2xrICogaGVhcnRiZWF0LCBXRFRfVkFMKTsKIAogCS8qIENsZWFyIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCAqLwogCXJlZyA9IHJlYWRsKEJSSURHRV9DQVVTRSk7CkBAIC04OCw3ICs5MSw3IEBACiBzdGF0aWMgaW50IG9yaW9uNXhfd2R0X2dldF90aW1lbGVmdChpbnQgKnRpbWVfbGVmdCkKIHsKIAlzcGluX2xvY2soJndkdF9sb2NrKTsKLQkqdGltZV9sZWZ0ID0gcmVhZGwoV0RUX1ZBTCkgLyBPUklPTjVYX1RDTEs7CisJKnRpbWVfbGVmdCA9IHJlYWRsKFdEVF9WQUwpIC8gd2R0X3RjbGs7CiAJc3Bpbl91bmxvY2soJndkdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OCw3ICsxNjEsNyBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKLQkJaWYgKHRpbWUgPD0gMCB8fCB0aW1lID4gV0RUX01BWF9EVVJBVElPTikgeworCQlpZiAodGltZSA8PSAwIHx8IHRpbWUgPiB3ZHRfbWF4X2R1cmF0aW9uKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIxMCwyMyArMjEzLDY5IEBACiAJLmZvcHMJCT0gJm9yaW9uNXhfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvcmlvbjV4X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlpZiAocGRhdGEpIHsKKwkJd2R0X3RjbGsgPSBwZGF0YS0+dGNsazsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIk9yaW9uNXggV2F0Y2hkb2cgbWlzc2VzIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAob3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQpCisJCXJldHVybiAtRUJVU1k7CisJb3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJd2R0X21heF9kdXJhdGlvbiA9IFdEVF9NQVhfQ1lDTEVfQ09VTlQgLyB3ZHRfdGNsazsKKwlpZiAoaGVhcnRiZWF0IDw9IDAgfHwgaGVhcnRiZWF0ID4gd2R0X21heF9kdXJhdGlvbikKKwkJaGVhcnRiZWF0ID0gd2R0X21heF9kdXJhdGlvbjsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJPcmlvbjV4IFdhdGNoZG9nIFRpbWVyOiBJbml0aWFsIHRpbWVvdXQgJWQgc2VjJXNcbiIsCisJCQkJaGVhcnRiZWF0LCBub3dheW91dCA/ICIsIG5vd2F5b3V0IiA6ICIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgb3Jpb241eF93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pbml0KCZ3ZHRfbG9jayk7CisJaWYgKHRlc3RfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKSkgeworCQl3ZHRfZGlzYWJsZSgpOworCQljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOworCX0KIAotCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X21pc2NkZXYpOwotCWlmIChyZXQgPT0gMCkKLQkJcHJpbnRrKCJPcmlvbjV4IFdhdGNoZG9nIFRpbWVyOiBoZWFydGJlYXQgJWQgc2VjXG4iLAotCQkJCQkJCQloZWFydGJlYXQpOworCXJldCA9IG1pc2NfZGVyZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJaWYgKCFyZXQpCisJCW9yaW9uNXhfd2R0X21pc2NkZXYucGFyZW50ID0gTlVMTDsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9yaW9uNXhfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb3Jpb241eF93ZHRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvcmlvbjV4X3dkdF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAib3Jpb241eF93ZHQiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvcmlvbjV4X3dkdF9pbml0KHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJndkdF9sb2NrKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kcml2ZXIpOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgb3Jpb241eF93ZHRfZXhpdCh2b2lkKQogewotCW1pc2NfZGVyZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9yaW9uNXhfd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG9yaW9uNXhfd2R0X2luaXQpOwpAQCAtMjM2LDggKzI4NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk9yaW9uNXggUHJvY2Vzc29yIFdhdGNoZG9nIik7CiAKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzICIKLQkJCQkJX19NT0RVTEVfU1RSSU5HKFdEVF9NQVhfRFVSQVRJT04pICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIik7CiAKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYwppbmRleCA0ODRjMjE1Li4xYTJiOTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCkBAIC01MzYsNyArNTM2LDggQEAKIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBjODc0MTNfbWlzY2Rldik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlXQVRDSERPR19NSU5PUiwgcmV0KTsKIAkJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBjODc0MTNfbm90aWZpZXIpOwogCQlyZXR1cm4gcmV0OwpAQCAtNTc0LDcgKzU3NSw4IEBACiBtb2R1bGVfaW5pdChwYzg3NDEzX2luaXQpOwogbW9kdWxlX2V4aXQocGM4NzQxM19leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPiwgTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCIpOworTU9EVUxFX0FVVEhPUigiU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPiwgIgorCQkiTWFyY3VzIEp1bmtlciA8anVua2VyQGFuZHVyYXMuZGU+LCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQzg3NDEzIFdEVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwppbmRleCA5ZTEzMzFhLi5hYTk1MTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwpAQCAtMjQsMjUgKzI0LDI1IEBACiAgKgkJdmVyc2lvbiByZXBvcnRpbmcuICBBZGRlZCByZWFkIHJvdXRpbmUgZm9yIHRlbXBlcmF0dXJlLgogICoJCVJlbW92ZWQgc29tZSBleHRyYSBkZWZpbmVzLCBhZGRlZCBhbiBhdXRvZGV0ZWN0IFJldmlzaW9uCiAgKgkJcm91dGluZS4KLSAqIDk2MTAwNiAgICAgICBSZXZpc2VkIHNvbWUgZG9jdW1lbnRhdGlvbiwgZml4ZWQgc29tZSBjb3NtZXRpYyBidWdzLiAgTWFkZQotICogICAgICAgICAgICAgIGRyaXZlcnMgdG8gcGFuaWMgdGhlIHN5c3RlbSBpZiBpdCdzIG92ZXJoZWF0aW5nIGF0IGJvb3R1cC4KKyAqIDk2MTAwNglSZXZpc2VkIHNvbWUgZG9jdW1lbnRhdGlvbiwgZml4ZWQgc29tZSBjb3NtZXRpYyBidWdzLiAgTWFkZQorICoJCWRyaXZlcnMgdG8gcGFuaWMgdGhlIHN5c3RlbSBpZiBpdCdzIG92ZXJoZWF0aW5nIGF0IGJvb3R1cC4KICAqIDk2MTExOAlDaGFuZ2VkIHNvbWUgdmVyYmlhZ2Ugb24gc29tZSBvZiB0aGUgb3V0cHV0LCB0aWRpZWQgdXAKICAqCQljb2RlIGJpdHMsIGFuZCBhZGRlZCBjb21wYXRpYmlsaXR5IHRvIDIuMS54LgotICogOTcwOTEyICAgICAgIEVuYWJsZWQgYm9hcmQgb24gb3BlbiBhbmQgZGlzYWJsZSBvbiBjbG9zZS4KKyAqIDk3MDkxMglFbmFibGVkIGJvYXJkIG9uIG9wZW4gYW5kIGRpc2FibGUgb24gY2xvc2UuCiAgKiA5NzExMDcJVG9vayBhY2NvdW50IG9mIHJlY2VudCBWRlMgY2hhbmdlcyAoYnJva2UgcmVhZCkuCi0gKiA5NzEyMTAgICAgICAgRGlzYWJsZSBib2FyZCBvbiBpbml0aWFsaXNhdGlvbiBpbiBjYXNlIGJvYXJkIGFscmVhZHkgdGlja2luZy4KLSAqIDk3MTIyMiAgICAgICBDaGFuZ2VkIG9wZW4vY2xvc2UgZm9yIHRlbXBlcmF0dXJlIGhhbmRsaW5nCi0gKiAgICAgICAgICAgICAgTWljaGFlbCBNZXNrZXMgPG1lc2tlc0BkZWJpYW4ub3JnPi4KLSAqIDk4MDExMiAgICAgICBVc2VkIG1pbm9yIG51bWJlcnMgZnJvbSBpbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAotICogOTkwNDAzICAgICAgIENsZWFyIHJlc2V0IHN0YXR1cyBhZnRlciByZWFkaW5nIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGluCi0gKiAgICAgICAgICAgICAgcGN3ZF9zaG93cHJldnN0YXRlKCkuIFtNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT5dCisgKiA5NzEyMTAJRGlzYWJsZSBib2FyZCBvbiBpbml0aWFsaXNhdGlvbiBpbiBjYXNlIGJvYXJkIGFscmVhZHkgdGlja2luZy4KKyAqIDk3MTIyMglDaGFuZ2VkIG9wZW4vY2xvc2UgZm9yIHRlbXBlcmF0dXJlIGhhbmRsaW5nCisgKgkJTWljaGFlbCBNZXNrZXMgPG1lc2tlc0BkZWJpYW4ub3JnPi4KKyAqIDk4MDExMglVc2VkIG1pbm9yIG51bWJlcnMgZnJvbSBpbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorICogOTkwNDAzCUNsZWFyIHJlc2V0IHN0YXR1cyBhZnRlciByZWFkaW5nIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGluCisgKgkJcGN3ZF9zaG93cHJldnN0YXRlKCkuIFtNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT5dCiAgKiA5OTA2MDUJTWFkZSBjaGFuZ2VzIHRvIGNvZGUgdG8gc3VwcG9ydCBGaXJtd2FyZSAxLjIyYSwgYWRkZWQKICAqCQlmYWlybHkgdXNlbGVzcyBwcm9jIGVudHJ5LgogICogOTkwNjEwCXJlbW92ZWQgc2FpZCB1c2VsZXNzIHByb2MgY29kZSBmb3IgdGhlIG1lcmdlIDxhbGFuPgogICogMDAwNDAzCVJlbW92ZWQgbGFzdCB0cmFjZXMgb2YgcHJvYyBjb2RlLiA8ZGF2ZWo+CiAgKiAwMTEyMTQJQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZQogICoJCUNPTkZJR19XQVRDSERPR19OT1dBWU9VVCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+Ci0gKiAgICAgICAgICAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKKyAqCQlBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAogICovCiAKIC8qCkBAIC03Niw4ICs3Niw3IEBACiAjZGVmaW5lIFdBVENIRE9HX0RSSVZFUl9OQU1FICJJU0EtUEMgV2F0Y2hkb2ciCiAjZGVmaW5lIFdBVENIRE9HX05BTUUgInBjd2QiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIiAoIiBXQVRDSERPR19EQVRFICIpXG4iCi0jZGVmaW5lIFdEX1ZFUiBXQVRDSERPR19WRVJTSU9OICIgKCIgV0FUQ0hET0dfREFURSAiKSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIlxuIgogCiAvKgogICogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgUENXRF9SRVZJU0lPTl9CIHdhcyByZW1vdmVkIGJlY2F1c2UgQSBhbmQgQgpAQCAtMjAwLDcgKzE5OSw5IEBACiAjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMiA8PSBoZWFydGJlYXQgPD0gNzIwMCBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMiA8PSBoZWFydGJlYXQgPD0gNzIwMCBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTIzOSw3ICsyNDAsOCBAQAogCX0KIAogCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJyZWNlaXZlZCBmb2xsb3dpbmcgZGF0YSBmb3IgY21kPTB4JTAyeDogcG9ydDA9MHglMDJ4IGxhc3RfcG9ydDA9MHglMDJ4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciAiCisJCQkiY21kPTB4JTAyeDogcG9ydDA9MHglMDJ4IGxhc3RfcG9ydDA9MHglMDJ4XG4iLAogCQkJY21kLCBwb3J0MCwgbGFzdF9wb3J0MCk7CiAKIAlyZXR1cm4gcG9ydDA7CkBAIC0zMzksMTAgKzM0MSwxMiBAQAogCQkJCQkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyKTsKIAllbHNlIGlmIChwY3dkX3ByaXZhdGUucmV2aXNpb24gPT0gUENXRF9SRVZJU0lPTl9DKSB7CiAJCXBjd2RfZ2V0X2Zpcm13YXJlKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJJU0EtUEMgV2F0Y2hkb2cgKFJFVi5DKSBkZXRlY3RlZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmUgdmVyc2lvbjogJXMpXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSVNBLVBDIFdhdGNoZG9nIChSRVYuQykgZGV0ZWN0ZWQgYXQgcG9ydCAiCisJCQkiMHglMDR4IChGaXJtd2FyZSB2ZXJzaW9uOiAlcylcbiIsCiAJCQlwY3dkX3ByaXZhdGUuaW9fYWRkciwgcGN3ZF9wcml2YXRlLmZ3X3Zlcl9zdHIpOwogCQlvcHRpb25fc3dpdGNoZXMgPSBwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogIgorCQkJIlRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCQlvcHRpb25fc3dpdGNoZXMsCiAJCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MTApID8gIk9OIiA6ICJPRkYiKSwKIAkJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgwOCkgPyAiT04iIDogIk9GRiIpKTsKQEAgLTM1OCw3ICszNjIsOCBAQAogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVGVtcGVyYXR1cmUgT3B0aW9uIERldGVjdGVkXG4iKTsKIAogCWlmIChwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9DQVJEUkVTRVQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQcmV2aW91cyByZWJvb3Qgd2FzIGNhdXNlZCBieSB0aGUgY2FyZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiUHJldmlvdXMgcmVib290IHdhcyBjYXVzZWQgYnkgdGhlIGNhcmRcbiIpOwogCiAJaWYgKHBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX09WRVJIRUFUKSB7CiAJCXByaW50ayhLRVJOX0VNRVJHIFBGWApAQCAtODcxLDcgKzg3Niw3IEBACiAJY2FyZHNfZm91bmQrKzsKIAlpZiAoY2FyZHNfZm91bmQgPT0gMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInYlcyBLZW4gSG9sbGlzIChrZW5qaUBiaXRnYXRlLmNvbSlcbiIsCi0JCQkJCQkJCVdEX1ZFUik7CisJCQkJCQkJV0FUQ0hET0dfVkVSU0lPTik7CiAKIAlpZiAoY2FyZHNfZm91bmQgPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgMSBkZXZpY2VcbiIpOwpAQCAtMTAyNiw3ICsxMDMxLDggQEAKIG1vZHVsZV9pbml0KHBjd2RfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQocGN3ZF9jbGVhbnVwX21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIktlbiBIb2xsaXMgPGtlbmppQGJpdGdhdGUuY29tPiwgV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iKTsKK01PRFVMRV9BVVRIT1IoIktlbiBIb2xsaXMgPGtlbmppQGJpdGdhdGUuY29tPiwgIgorCQkiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQmVya3NoaXJlIElTQS1QQyBXYXRjaGRvZyBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKFdBVENIRE9HX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCmluZGV4IDVkNzY0MjIuLjY5OGY1MWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCkBAIC0yNCw3ICsyNCw4IEBACiAgKglBIGJlbGxzIGFuZCB3aGlzdGxlcyBkcml2ZXIgaXMgYXZhaWxhYmxlIGZyb206CiAgKglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvd2ltL3Bjd2QvcGN3ZF9wY2kvCiAgKgotICoJTW9yZSBpbmZvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmJlcmtwcm9kLmNvbS8gb3IgaHR0cDovL3d3dy5wY3dhdGNoZG9nLmNvbS8KKyAqCU1vcmUgaW5mbyBhdmFpbGFibGUgYXQKKyAqCWh0dHA6Ly93d3cuYmVya3Byb2QuY29tLyBvciBodHRwOi8vd3d3LnBjd2F0Y2hkb2cuY29tLwogICovCiAKIC8qCkBAIC01MSwxMSArNTIsMTAgQEAKIAogLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAjZGVmaW5lIFdBVENIRE9HX1ZFUlNJT04gIjEuMDMiCi0jZGVmaW5lIFdBVENIRE9HX0RBVEUgIjIxIEphbiAyMDA3IgogI2RlZmluZSBXQVRDSERPR19EUklWRVJfTkFNRSAiUENJLVBDIFdhdGNoZG9nIgogI2RlZmluZSBXQVRDSERPR19OQU1FICJwY3dkX3BjaSIKICNkZWZpbmUgUEZYIFdBVENIRE9HX05BTUUgIjogIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiICgiIFdBVENIRE9HX0RBVEUgIilcbiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gV0FUQ0hET0dfRFJJVkVSX05BTUUgIiBkcml2ZXIsIHYiIFdBVENIRE9HX1ZFUlNJT04gIlxuIgogCiAvKiBTdHVmZiBmb3IgdGhlIFBDSSBJRCdzICAqLwogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1FVSUNLTE9HSUMKQEAgLTc2LDcgKzc2LDggQEAKICNkZWZpbmUgV0RfUENJX1RUUlAJCTB4MDQJLyogVGVtcGVyYXR1cmUgVHJpcCBzdGF0dXMgKi8KICNkZWZpbmUgV0RfUENJX1JMMkEJCTB4MDgJLyogUmVsYXkgMiBBY3RpdmUgKi8KICNkZWZpbmUgV0RfUENJX1JMMUEJCTB4MTAJLyogUmVsYXkgMSBBY3RpdmUgKi8KLSNkZWZpbmUgV0RfUENJX1IyRFMJCTB4NDAJLyogUmVsYXkgMiBEaXNhYmxlIFRlbXBlcmF0dXJlLXRyaXAvcmVzZXQgKi8KKyNkZWZpbmUgV0RfUENJX1IyRFMJCTB4NDAJLyogUmVsYXkgMiBEaXNhYmxlIFRlbXBlcmF0dXJlLXRyaXAgLworCQkJCQkJCQkJcmVzZXQgKi8KICNkZWZpbmUgV0RfUENJX1JMWTIJCTB4ODAJLyogQWN0aXZhdGUgUmVsYXkgMiBvbiB0aGUgYm9hcmQgKi8KIC8qIFBvcnQgMiA6IENvbnRyb2wgU3RhdHVzICMyICovCiAjZGVmaW5lIFdEX1BDSV9XRElTCQkweDEwCS8qIFdhdGNoZG9nIERpc2FibGUgKi8KQEAgLTExNCwxMiArMTE1LDE4IEBACiBzdGF0aWMgaW50IHRlbXBfcGFuaWM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc19hY3RpdmU7CiBzdGF0aWMgY2hhciBleHBlY3RfcmVsZWFzZTsKLXN0YXRpYyBzdHJ1Y3QgewkJCQkvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBQQ0ktUEMgd2F0Y2hkb2cgY2FyZCAqLwotCWludCBzdXBwb3J0c190ZW1wOwkJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBoYXMgYSB0ZW1wZXJhdHVyZSBkZXZpY2UgKi8KLQlpbnQgYm9vdF9zdGF0dXM7CQkvKiBUaGUgY2FyZCdzIGJvb3Qgc3RhdHVzICovCi0JdW5zaWduZWQgbG9uZyBpb19hZGRyOwkJLyogVGhlIGNhcmRzIEkvTyBhZGRyZXNzICovCi0Jc3BpbmxvY2tfdCBpb19sb2NrOwkJLyogdGhlIGxvY2sgZm9yIGlvIG9wZXJhdGlvbnMgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJCS8qIHRoZSBQQ0ktZGV2aWNlICovCisvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBQQ0ktUEMgd2F0Y2hkb2cgY2FyZCAqLworc3RhdGljIHN0cnVjdCB7CisJLyogV2V0aGVyIG9yIG5vdCB0aGUgY2FyZCBoYXMgYSB0ZW1wZXJhdHVyZSBkZXZpY2UgKi8KKwlpbnQgc3VwcG9ydHNfdGVtcDsKKwkvKiBUaGUgY2FyZCdzIGJvb3Qgc3RhdHVzICovCisJaW50IGJvb3Rfc3RhdHVzOworCS8qIFRoZSBjYXJkcyBJL08gYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsKKwkvKiB0aGUgbG9jayBmb3IgaW8gb3BlcmF0aW9ucyAqLworCXNwaW5sb2NrX3QgaW9fbG9jazsKKwkvKiB0aGUgUENJLWRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogfSBwY2lwY3dkX3ByaXZhdGU7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC0xMzAsMTQgKzEzNywxOCBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsOiAwPVF1aWV0LCAxPVZlcmJvc2UsIDI9RGVidWcgKGRlZmF1bHQ9MCkiKTsKIAotI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9IGRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPQorCQkJCQkJZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7CiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAvKgogICoJSW50ZXJuYWwgZnVuY3Rpb25zCkBAIC0xNDgsOCArMTU5LDggQEAKIAlpbnQgZ290X3Jlc3BvbnNlLCBjb3VudDsKIAogCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzZW5kaW5nIGZvbGxvd2luZyBkYXRhIGNtZD0weCUwMnggbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAotCQljbWQsICptc2IsICpsc2IpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInNlbmRpbmcgZm9sbG93aW5nIGRhdGEgIgorCQkiY21kPTB4JTAyeCBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsIGNtZCwgKm1zYiwgKmxzYik7CiAKIAlzcGluX2xvY2soJnBjaXBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKIAkvKiBJZiBhIGNvbW1hbmQgcmVxdWlyZXMgZGF0YSBpdCBzaG91bGQgYmUgd3JpdHRlbiBmaXJzdC4KQEAgLTE2NiwxNyArMTc3LDIwIEBACiAJICogdGhlIFdSU1AgYml0IGluIHBvcnQgMiBhbmQgZ2l2ZSBpdCBhIG1heC4gdGltZW91dCBvZgogCSAqIFBDSV9DT01NQU5EX1RJTUVPVVQgdG8gcHJvY2VzcyAqLwogCWdvdF9yZXNwb25zZSA9IGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMikgJiBXRF9QQ0lfV1JTUDsKLQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgUENJX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOyBjb3VudCsrKSB7CisJZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFBDSV9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsKKwkJCQkJCQkJY291bnQrKykgewogCQltZGVsYXkoMSk7CiAJCWdvdF9yZXNwb25zZSA9IGluYl9wKHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMikgJiBXRF9QQ0lfV1JTUDsKIAl9CiAKIAlpZiAoZGVidWcgPj0gREVCVUcpIHsKIAkJaWYgKGdvdF9yZXNwb25zZSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ0aW1lIHRvIHByb2Nlc3MgY29tbWFuZCB3YXM6ICVkIG1zXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkJInRpbWUgdG8gcHJvY2VzcyBjb21tYW5kIHdhczogJWQgbXNcbiIsCiAJCQkJY291bnQpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJjYXJkIGRpZCBub3QgcmVzcG9uZCBvbiBjb21tYW5kIVxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkiY2FyZCBkaWQgbm90IHJlc3BvbmQgb24gY29tbWFuZCFcbiIpOwogCQl9CiAJfQogCkBAIC0xODksNyArMjAzLDggQEAKIAkJaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyA2KTsKIAogCQlpZiAoZGVidWcgPj0gREVCVUcpCi0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciBjbWQ9MHglMDJ4OiBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciAiCisJCQkJImNtZD0weCUwMng6IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwKIAkJCQljbWQsICptc2IsICpsc2IpOwogCX0KIApAQCAtMjE4LDcgKzIzMyw4IEBACiAJY2hhciBmd192ZXJfc3RyWzIwXTsJCS8qIFRoZSBjYXJkcyBmaXJtd2FyZSB2ZXJzaW9uICovCiAJaW50IG9wdGlvbl9zd2l0Y2hlczsKIAotCWdvdF9md19yZXYgPSBzZW5kX2NvbW1hbmQoQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKKwlnb3RfZndfcmV2ID0gc2VuZF9jb21tYW5kKENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwKKwkJCQkJCQkJJmZ3X3Jldl9taW5vcik7CiAJaWYgKGdvdF9md19yZXYpCiAJCXNwcmludGYoZndfdmVyX3N0ciwgIiV1LiUwMnUiLCBmd19yZXZfbWFqb3IsIGZ3X3Jldl9taW5vcik7CiAJZWxzZQpAQCAtMjI3LDIzICsyNDMsMjcgQEAKIAkvKiBHZXQgc3dpdGNoIHNldHRpbmdzICovCiAJb3B0aW9uX3N3aXRjaGVzID0gcGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgY2FyZCBhdCBwb3J0IDB4JTA0eCAoRmlybXdhcmU6ICVzKSAlcyB0ZW1wIG9wdGlvblxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgY2FyZCBhdCBwb3J0ICIKKwkJIjB4JTA0eCAoRmlybXdhcmU6ICVzKSAlcyB0ZW1wIG9wdGlvblxuIiwKIAkJKGludCkgcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIsIGZ3X3Zlcl9zdHIsCiAJCShwY2lwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCA/ICJ3aXRoIiA6ICJ3aXRob3V0IikpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQlvcHRpb25fc3dpdGNoZXMsCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfQ0FSRFJFU0VUKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJldmlvdXMgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUgV2F0Y2hkb2cgY2FyZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiUHJldmlvdXMgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUgV2F0Y2hkb2cgY2FyZFxuIik7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfT1ZFUkhFQVQpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJDYXJkIHNlbnNlZCBhIENQVSBPdmVyaGVhdFxuIik7CiAKIAlpZiAocGNpcGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBwcmV2aW91cyB0cmlwIGRldGVjdGVkIC0gQ29sZCBib290IG9yIHJlc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJObyBwcmV2aW91cyB0cmlwIGRldGVjdGVkIC0gQ29sZCBib290IG9yIHJlc2V0XG4iKTsKIH0KIAogc3RhdGljIGludCBwY2lwY3dkX3N0YXJ0KHZvaWQpCkBAIC0yODMsNyArMzAzLDggQEAKIAlzcGluX3VubG9jaygmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCiAJaWYgKCEoc3RhdF9yZWcgJiBXRF9QQ0lfV0RJUykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzY0LDcgKzM4NSw4IEBACiAJfQogCiAJLyogY2xlYXIgdHJpcCBzdGF0dXMgJiBMRUQgYW5kIGtlZXAgbW9kZSBvZiByZWxheSAyICovCi0Jb3V0Yl9wKChjb250cm9sX3N0YXR1cyAmIFdEX1BDSV9SMkRTKSB8IFdEX1BDSV9XVFJQLCBwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDEpOworCW91dGJfcCgoY29udHJvbF9zdGF0dXMgJiBXRF9QQ0lfUjJEUykgfCBXRF9QQ0lfV1RSUCwKKwkJCQkJCXBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CiAKIAkvKiBjbGVhciByZXNldCBjb3VudGVyICovCiAJbXNiID0gMDsKQEAgLTQzNyw3ICs0NTksOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQlleHBlY3RfcmVsZWFzZSA9IDA7CiAKLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlCisJCQkgKiBtYWdpYyBjaGFyYWN0ZXIgKi8KIAkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKIAkJCQljaGFyIGM7CiAJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKQEAgLTUzMSw3ICs1NTQsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChuZXdfaGVhcnRiZWF0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcGNpcGN3ZF9rZWVwYWxpdmUoKTsKIAkJLyogRmFsbCAqLwpAQCAtNTYwLDcgKzU4Myw4IEBACiAJLyogL2Rldi93YXRjaGRvZyBjYW4gb25seSBiZSBvcGVuZWQgb25jZSAqLwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZpc19hY3RpdmUpKSB7CiAJCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQXR0ZW1wdCB0byBvcGVuIGFscmVhZHkgb3BlbmVkIGRldmljZS5cbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSJBdHRlbXB0IHRvIG9wZW4gYWxyZWFkeSBvcGVuZWQgZGV2aWNlLlxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC01NzgsNyArNjAyLDggQEAKIAlpZiAoZXhwZWN0X3JlbGVhc2UgPT0gNDIpIHsKIAkJcGNpcGN3ZF9zdG9wKCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQlwY2lwY3dkX2tlZXBhbGl2ZSgpOwogCX0KIAlleHBlY3RfcmVsZWFzZSA9IDA7CkBAIC02MjEsNyArNjQ2LDggQEAKICAqCU5vdGlmeSBzeXN0ZW0KICAqLwogCi1zdGF0aWMgaW50IHBjaXBjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQorc3RhdGljIGludCBwY2lwY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkJCQkJCXZvaWQgKnVudXNlZCkKIHsKIAlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQogCQlwY2lwY3dkX3N0b3AoKTsJLyogVHVybiB0aGUgV0RUIG9mZiAqLwpAQCAtNzIyLDM0ICs3NDgsMzggQEAKIAogCS8qIElmIGhlYXJ0YmVhdCA9IDAgdGhlbiB3ZSB1c2UgdGhlIGhlYXJ0YmVhdCBmcm9tIHRoZSBkaXAtc3dpdGNoZXMgKi8KIAlpZiAoaGVhcnRiZWF0ID09IDApCi0JCWhlYXJ0YmVhdCA9IGhlYXJ0YmVhdF90YmxbKHBjaXBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpICYgMHgwNyldOworCQloZWFydGJlYXQgPQorCQkJaGVhcnRiZWF0X3RibFsocGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCkgJiAweDA3KV07CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmIChwY2lwY3dkX3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQlwY2lwY3dkX3NldF9oZWFydGJlYXQoV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCiAJCQlXQVRDSERPR19IRUFSVEJFQVQpOwogCX0KIAogCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcGNpcGN3ZF9ub3RpZmllcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCi0JCQlyZXQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2VfcmVnaW9uOwogCX0KIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCkgewogCQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwY2lwY3dkX3RlbXBfbWlzY2Rldik7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCi0JCQkJVEVNUF9NSU5PUiwgcmV0KTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uICIKKwkJCQkibWlub3I9JWQgKGVycj0lZClcbiIsIFRFTVBfTUlOT1IsIHJldCk7CiAJCQlnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9yZWJvb3Q7CiAJCX0KIAl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwY2lwY3dkX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CiAJCWdvdG8gZXJyX291dF9taXNjX2RlcmVnaXN0ZXI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCmluZGV4IGFmYjA4OTYuLjA1MmZlNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKQEAgLTUxLDEyICs1MSwxMSBAQAogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KICN1bmRlZiBkYmcKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGZvcm1hdCAiXG4iICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IGlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGZvcm1hdCAiXG4iICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogLyogTW9kdWxlIGFuZCBWZXJzaW9uIEluZm9ybWF0aW9uICovCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAyIgotI2RlZmluZSBEUklWRVJfREFURSAiMjEgSmFuIDIwMDciCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+IgogI2RlZmluZSBEUklWRVJfREVTQyAiQmVya3NoaXJlIFVTQi1QQyBXYXRjaGRvZyBkcml2ZXIiCiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCkBAIC03MywxNCArNzIsMTggQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwogCi0jZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0gZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLworI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9CisJCQkJCQlkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogLyogVGhlIHZlbmRvciBhbmQgcHJvZHVjdCBpZCdzIGZvciB0aGUgVVNCLVBDIFdhdGNoZG9nIGNhcmQgKi8KICNkZWZpbmUgVVNCX1BDV0RfVkVORE9SX0lECTB4MGM5OApAQCAtOTEsMjAgKzk0LDIxIEBACiAJeyBVU0JfREVWSUNFKFVTQl9QQ1dEX1ZFTkRPUl9JRCwgVVNCX1BDV0RfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfcGN3ZF90YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX3Bjd2RfdGFibGUpOwogCiAvKiBhY2NvcmRpbmcgdG8gZG9jdW1lbnRhdGlvbiBtYXguIHRpbWUgdG8gcHJvY2VzcyBhIGNvbW1hbmQgZm9yIHRoZSBVU0IKICAqIHdhdGNoZG9nIGNhcmQgaXMgMTAwIG9yIDIwMCBtcywgc28gd2UgZ2l2ZSBpdCAyNTAgbXMgdG8gZG8gaXQncyBqb2IgKi8KICNkZWZpbmUgVVNCX0NPTU1BTkRfVElNRU9VVAkyNTAKIAogLyogV2F0Y2hkb2cncyBpbnRlcm5hbCBjb21tYW5kcyAqLwotI2RlZmluZSBDTURfUkVBRF9URU1QCQkJMHgwMgkvKiBSZWFkIFRlbXBlcmF0dXJlOyBSZS10cmlnZ2VyIFdhdGNoZG9nICovCisjZGVmaW5lIENNRF9SRUFEX1RFTVAJCQkweDAyCS8qIFJlYWQgVGVtcGVyYXR1cmU7CisJCQkJCQkJUmUtdHJpZ2dlciBXYXRjaGRvZyAqLwogI2RlZmluZSBDTURfVFJJR0dFUgkJCUNNRF9SRUFEX1RFTVAKICNkZWZpbmUgQ01EX0dFVF9TVEFUVVMJCQkweDA0CS8qIEdldCBTdGF0dXMgSW5mb3JtYXRpb24gKi8KICNkZWZpbmUgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OCTB4MDgJLyogR2V0IEZpcm13YXJlIFZlcnNpb24gKi8KICNkZWZpbmUgQ01EX0dFVF9ESVBfU1dJVENIX1NFVFRJTkdTCTB4MGMJLyogR2V0IERpcCBTd2l0Y2ggU2V0dGluZ3MgKi8KICNkZWZpbmUgQ01EX1JFQURfV0FUQ0hET0dfVElNRU9VVAkweDE4CS8qIFJlYWQgQ3VycmVudCBXYXRjaGRvZyBUaW1lICovCi0jZGVmaW5lIENNRF9XUklURV9XQVRDSERPR19USU1FT1VUCTB4MTkJLyogV3JpdGUgQ3VycmVudCBXYXRjaGRvZyBUaW1lICovCisjZGVmaW5lIENNRF9XUklURV9XQVRDSERPR19USU1FT1VUCTB4MTkJLyogV3JpdGUgQ3VycmVudCBXYXRjaGRvZ1RpbWUgKi8KICNkZWZpbmUgQ01EX0VOQUJMRV9XQVRDSERPRwkJMHgzMAkvKiBFbmFibGUgLyBEaXNhYmxlIFdhdGNoZG9nICovCiAjZGVmaW5lIENNRF9ESVNBQkxFX1dBVENIRE9HCQlDTURfRU5BQkxFX1dBVENIRE9HCiAKQEAgLTEyOSwyMyArMTMzLDM2IEBACiAKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiBzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkJLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CQkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCS8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CiAKLQl1bnNpZ25lZCBpbnQJCWludGVyZmFjZV9udW1iZXI7CS8qIHRoZSBpbnRlcmZhY2UgbnVtYmVyIHVzZWQgZm9yIGNtZCdzICovCisJLyogdGhlIGludGVyZmFjZSBudW1iZXIgdXNlZCBmb3IgY21kJ3MgKi8KKwl1bnNpZ25lZCBpbnQJCWludGVyZmFjZV9udW1iZXI7CiAKLQl1bnNpZ25lZCBjaGFyCQkqaW50cl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHRvIGludHIgZGF0YSAqLwotCWRtYV9hZGRyX3QJCWludHJfZG1hOwkJLyogdGhlIGRtYSBhZGRyZXNzIGZvciB0aGUgaW50ciBidWZmZXIgKi8KLQlzaXplX3QJCQlpbnRyX3NpemU7CQkvKiB0aGUgc2l6ZSBvZiB0aGUgaW50ciBidWZmZXIgKi8KLQlzdHJ1Y3QgdXJiCQkqaW50cl91cmI7CQkvKiB0aGUgdXJiIHVzZWQgZm9yIHRoZSBpbnRyIHBpcGUgKi8KKwkvKiB0aGUgYnVmZmVyIHRvIGludHIgZGF0YSAqLworCXVuc2lnbmVkIGNoYXIJCSppbnRyX2J1ZmZlcjsKKwkvKiB0aGUgZG1hIGFkZHJlc3MgZm9yIHRoZSBpbnRyIGJ1ZmZlciAqLworCWRtYV9hZGRyX3QJCWludHJfZG1hOworCS8qIHRoZSBzaXplIG9mIHRoZSBpbnRyIGJ1ZmZlciAqLworCXNpemVfdAkJCWludHJfc2l6ZTsKKwkvKiB0aGUgdXJiIHVzZWQgZm9yIHRoZSBpbnRyIHBpcGUgKi8KKwlzdHJ1Y3QgdXJiCQkqaW50cl91cmI7CiAKLQl1bnNpZ25lZCBjaGFyCQljbWRfY29tbWFuZDsJCS8qIFRoZSBjb21tYW5kIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLwotCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX21zYjsJCS8qIFRoZSBkYXRhIE1TQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KLQl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9sc2I7CQkvKiBUaGUgZGF0YSBMU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCi0JYXRvbWljX3QJCWNtZF9yZWNlaXZlZDsJCS8qIHRydWUgaWYgd2UgcmVjZWl2ZWQgYSByZXBvcnQgYWZ0ZXIgYSBjb21tYW5kICovCisJLyogVGhlIGNvbW1hbmQgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2NvbW1hbmQ7CisJLyogVGhlIGRhdGEgTVNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLworCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX21zYjsKKwkvKiBUaGUgZGF0YSBMU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbHNiOworCS8qIHRydWUgaWYgd2UgcmVjZWl2ZWQgYSByZXBvcnQgYWZ0ZXIgYSBjb21tYW5kICovCisJYXRvbWljX3QJCWNtZF9yZWNlaXZlZDsKIAotCWludAkJCWV4aXN0czsJCQkvKiBXZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgZXhpc3RzICovCi0Jc3RydWN0IG11dGV4CQltdHg7CQkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwkvKiBXZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgZXhpc3RzICovCisJaW50CQkJZXhpc3RzOworCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IG11dGV4CQltdHg7CiB9Owogc3RhdGljIHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZF9kZXZpY2U7CiAKQEAgLTE1Myw3ICsxNzAsOCBAQAogc3RhdGljIERFRklORV9NVVRFWChkaXNjb25uZWN0X211dGV4KTsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIHVzYl9wY3dkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KQEAgLTE2Nyw3ICsxODUsOCBAQAogCiBzdGF0aWMgdm9pZCB1c2JfcGN3ZF9pbnRyX2RvbmUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCA9IChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QgPQorCQkJCShzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqKXVyYi0+Y29udGV4dDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXNiX3Bjd2QtPmludHJfYnVmZmVyOwogCWludCByZXR2YWw7CiAKQEAgLTE3OCwxMSArMTk3LDEzIEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCiAJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOwogCQlnb3RvIHJlc3VibWl0OwogCX0KIApAQCAtMTk5LDIyICsyMjAsMjMgQEAKIHJlc3VibWl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgcmVzdWJtaXQgaW50ciwgdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAotCQkJcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgcmVzdWJtaXQgaW50ciwgIgorCQkJInVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwgcmV0dmFsKTsKIH0KIAotc3RhdGljIGludCB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCB1bnNpZ25lZCBjaGFyIGNtZCwKLQl1bnNpZ25lZCBjaGFyICptc2IsIHVuc2lnbmVkIGNoYXIgKmxzYikKK3N0YXRpYyBpbnQgdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJdW5zaWduZWQgY2hhciBjbWQsIHVuc2lnbmVkIGNoYXIgKm1zYiwgdW5zaWduZWQgY2hhciAqbHNiKQogewogCWludCBnb3RfcmVzcG9uc2UsIGNvdW50OwogCXVuc2lnbmVkIGNoYXIgYnVmWzZdOwogCi0JLyogV2Ugd2lsbCBub3Qgc2VuZCBhbnkgY29tbWFuZHMgaWYgdGhlIFVTQiBQQ1dEIGRldmljZSBkb2VzIG5vdCBleGlzdCAqLworCS8qIFdlIHdpbGwgbm90IHNlbmQgYW55IGNvbW1hbmRzIGlmIHRoZSBVU0IgUENXRCBkZXZpY2UgZG9lcworCSAqIG5vdCBleGlzdCAqLwogCWlmICgoIXVzYl9wY3dkKSB8fCAoIXVzYl9wY3dkLT5leGlzdHMpKQogCQlyZXR1cm4gLTE7CiAKLQkvKiBUaGUgVVNCIFBDIFdhdGNoZG9nIHVzZXMgYSA2IGJ5dGUgcmVwb3J0IGZvcm1hdC4gVGhlIGJvYXJkIGN1cnJlbnRseSB1c2VzCi0JICogb25seSAzIG9mIHRoZSBzaXggYnl0ZXMgb2YgdGhlIHJlcG9ydC4gKi8KKwkvKiBUaGUgVVNCIFBDIFdhdGNoZG9nIHVzZXMgYSA2IGJ5dGUgcmVwb3J0IGZvcm1hdC4KKwkgKiBUaGUgYm9hcmQgY3VycmVudGx5IHVzZXMgb25seSAzIG9mIHRoZSBzaXggYnl0ZXMgb2YgdGhlIHJlcG9ydC4gKi8KIAlidWZbMF0gPSBjbWQ7CQkJLyogQnl0ZSAwID0gQ01EICovCiAJYnVmWzFdID0gKm1zYjsJCQkvKiBCeXRlIDEgPSBEYXRhIE1TQiAqLwogCWJ1ZlsyXSA9ICpsc2I7CQkJLyogQnl0ZSAyID0gRGF0YSBMU0IgKi8KQEAgLTIyOSwxMiArMjUxLDE0IEBACiAJCQlISURfUkVRX1NFVF9SRVBPUlQsIEhJRF9EVF9SRVBPUlQsCiAJCQkweDAyMDAsIHVzYl9wY3dkLT5pbnRlcmZhY2VfbnVtYmVyLCBidWYsIHNpemVvZihidWYpLAogCQkJVVNCX0NPTU1BTkRfVElNRU9VVCkgIT0gc2l6ZW9mKGJ1ZikpIHsKLQkJZGJnKCJ1c2JfcGN3ZF9zZW5kX2NvbW1hbmQ6IGVycm9yIGluIHVzYl9jb250cm9sX21zZyBmb3IgY21kIDB4JXggMHgleCAweCV4XG4iLCBjbWQsICptc2IsICpsc2IpOworCQlkYmcoInVzYl9wY3dkX3NlbmRfY29tbWFuZDogZXJyb3IgaW4gdXNiX2NvbnRyb2xfbXNnIGZvciAiCisJCQkJImNtZCAweCV4IDB4JXggMHgleFxuIiwgY21kLCAqbXNiLCAqbHNiKTsKIAl9CiAJLyogd2FpdCB0aWxsIHRoZSB1c2IgY2FyZCBwcm9jZXNzZWQgdGhlIGNvbW1hbmQsCiAJICogd2l0aCBhIG1heC4gdGltZW91dCBvZiBVU0JfQ09NTUFORF9USU1FT1VUICovCiAJZ290X3Jlc3BvbnNlID0gMDsKLQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgVVNCX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOyBjb3VudCsrKSB7CisJZm9yIChjb3VudCA9IDA7IChjb3VudCA8IFVTQl9DT01NQU5EX1RJTUVPVVQpICYmICghZ290X3Jlc3BvbnNlKTsKKwkJCQkJCQkJY291bnQrKykgewogCQltZGVsYXkoMSk7CiAJCWlmIChhdG9taWNfcmVhZCgmdXNiX3Bjd2QtPmNtZF9yZWNlaXZlZCkpCiAJCQlnb3RfcmVzcG9uc2UgPSAxOwpAQCAtMjU2LDEwICsyODAsMTIgQEAKIAlpbnQgcmV0dmFsOwogCiAJLyogRW5hYmxlIFdhdGNoZG9nICovCi0JcmV0dmFsID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfRU5BQkxFX1dBVENIRE9HLCAmbXNiLCAmbHNiKTsKKwlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9FTkFCTEVfV0FUQ0hET0csCisJCQkJCQkJCSZtc2IsICZsc2IpOwogCiAJaWYgKChyZXR2YWwgPT0gMCkgfHwgKGxzYiA9PSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZW5hYmxlIGF0dGVtcHRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBlbmFibGUgYXR0ZW1wdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTI3MywxMCArMjk5LDEyIEBACiAJaW50IHJldHZhbDsKIAogCS8qIERpc2FibGUgV2F0Y2hkb2cgKi8KLQlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9ESVNBQkxFX1dBVENIRE9HLCAmbXNiLCAmbHNiKTsKKwlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9ESVNBQkxFX1dBVENIRE9HLAorCQkJCQkJCQkmbXNiLCAmbHNiKTsKIAogCWlmICgocmV0dmFsID09IDApIHx8IChsc2IgIT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGRpc2FibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzA4LDcgKzMzNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwgaW50ICp0ZW1wZXJhdHVyZSkKK3N0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwKKwkJCQkJCQlpbnQgKnRlbXBlcmF0dXJlKQogewogCXVuc2lnbmVkIGNoYXIgbXNiLCBsc2I7CiAKQEAgLTMyMyw3ICszNTIsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYl9wY3dkX2dldF90aW1lbGVmdChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsIGludCAqdGltZV9sZWZ0KQorc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGltZWxlZnQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLAorCQkJCQkJCQlpbnQgKnRpbWVfbGVmdCkKIHsKIAl1bnNpZ25lZCBjaGFyIG1zYiwgbHNiOwogCkBAIC0zNDEsNyArMzcxLDcgQEAKICAqLwogCiBzdGF0aWMgc3NpemVfdCB1c2JfcGN3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCi0JCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCisJCQkJCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLwogCWlmIChsZW4pIHsKQEAgLTM1Miw3ICszODIsOCBAQAogCQkJICogZml2ZSBtb250aHMgYWdvLi4uICovCiAJCQlleHBlY3RfcmVsZWFzZSA9IDA7CiAKLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlCisJCQkgKiBtYWdpYyBjaGFyYWN0ZXIgKi8KIAkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKIAkJCQljaGFyIGM7CiAJCQkJaWYgKGdldF91c2VyKGMsIGRhdGEgKyBpKSkKQEAgLTQzMSw3ICs0NjIsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHVzYl9wY3dkX3NldF9oZWFydGJlYXQodXNiX3Bjd2RfZGV2aWNlLCBuZXdfaGVhcnRiZWF0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJdXNiX3Bjd2Rfa2VlcGFsaXZlKHVzYl9wY3dkX2RldmljZSk7CiAJCS8qIEZhbGwgKi8KQEAgLTQ3NSw3ICs1MDYsOCBAQAogCWlmIChleHBlY3RfcmVsZWFzZSA9PSA0MikgewogCQl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkX2RldmljZSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWAorCQkJIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQl1c2JfcGN3ZF9rZWVwYWxpdmUodXNiX3Bjd2RfZGV2aWNlKTsKIAl9CiAJZXhwZWN0X3JlbGVhc2UgPSAwOwpAQCAtNTE1LDcgKzU0Nyw4IEBACiAgKglOb3RpZnkgc3lzdGVtCiAgKi8KIAotc3RhdGljIGludCB1c2JfcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IHVzYl9wY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkJCQkJCXZvaWQgKnVudXNlZCkKIHsKIAlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQogCQl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkX2RldmljZSk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KQEAgLTU3OCw3ICs2MTEsOCBAQAogICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKICAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCiAgKi8KLXN0YXRpYyBpbnQgdXNiX3Bjd2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CkBAIC02MDIsMTYgKzYzNiwxNSBAQAogCiAJLyogY2hlY2sgb3V0IHRoYXQgd2UgaGF2ZSBhIEhJRCBkZXZpY2UgKi8KIAlpZiAoIShpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfSElEKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGUgZGV2aWNlIGlzbid0IGEgSHVtYW4gSW50ZXJmYWNlIERldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJUaGUgZGV2aWNlIGlzbid0IGEgSHVtYW4gSW50ZXJmYWNlIERldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnQ6IGl0IGhhcyB0byBiZSBJbnRlcnJ1cHQgJiBJTiAqLwogCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50WzBdLmRlc2M7CiAKLQlpZiAoISgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgotCSAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkpIHsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKSB7CiAJCS8qIHdlIGRpZG4ndCBmaW5kIGEgSW50ZXJydXB0IGVuZHBvaW50IHdpdGggZGlyZWN0aW9uIElOICovCiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkbid0IGZpbmQgYW4gSU5UUiAmIElOIGVuZHBvaW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MzQsMTAgKzY2NywxMiBAQAogCXVzYl9wY3dkLT51ZGV2ID0gdWRldjsKIAl1c2JfcGN3ZC0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwogCXVzYl9wY3dkLT5pbnRlcmZhY2VfbnVtYmVyID0gaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCXVzYl9wY3dkLT5pbnRyX3NpemUgPSAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA+IDggPyBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpIDogOCk7CisJdXNiX3Bjd2QtPmludHJfc2l6ZSA9IChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID4gOCA/CisJCQkJbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6IDgpOwogCiAJLyogc2V0IHVwIHRoZSBtZW1vcnkgYnVmZmVyJ3MgKi8KLQl1c2JfcGN3ZC0+aW50cl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHVzYl9wY3dkLT5pbnRyX3NpemUsIEdGUF9BVE9NSUMsICZ1c2JfcGN3ZC0+aW50cl9kbWEpOworCXVzYl9wY3dkLT5pbnRyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgdXNiX3Bjd2QtPmludHJfc2l6ZSwKKwkJCQkJR0ZQX0FUT01JQywgJnVzYl9wY3dkLT5pbnRyX2RtYSk7CiAJaWYgKCF1c2JfcGN3ZC0+aW50cl9idWZmZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiT3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC02NzEsNyArNzA2LDggQEAKIAl1c2JfcGN3ZF9zdG9wKHVzYl9wY3dkKTsKIAogCS8qIEdldCB0aGUgRmlybXdhcmUgVmVyc2lvbiAqLwotCWdvdF9md19yZXYgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRklSTVdBUkVfVkVSU0lPTiwgJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CisJZ290X2Z3X3JldiA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLAorCQkJCQkJJmZ3X3Jldl9tYWpvciwgJmZ3X3Jldl9taW5vcik7CiAJaWYgKGdvdF9md19yZXYpCiAJCXNwcmludGYoZndfdmVyX3N0ciwgIiV1LiUwMnUiLCBmd19yZXZfbWFqb3IsIGZ3X3Jldl9taW5vcik7CiAJZWxzZQpAQCAtNjgxLDkgKzcxNywxMSBAQAogCQlmd192ZXJfc3RyKTsKIAogCS8qIEdldCBzd2l0Y2ggc2V0dGluZ3MgKi8KLQl1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUywgJmR1bW15LCAmb3B0aW9uX3N3aXRjaGVzKTsKKwl1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9HRVRfRElQX1NXSVRDSF9TRVRUSU5HUywgJmR1bW15LAorCQkJCQkJCSZvcHRpb25fc3dpdGNoZXMpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9wdGlvbiBzd2l0Y2hlcyAoMHglMDJ4KTogVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCSJUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAogCQlvcHRpb25fc3dpdGNoZXMsCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkoKG9wdGlvbl9zd2l0Y2hlcyAmIDB4MDgpID8gIk9OIiA6ICJPRkYiKSk7CkBAIC02OTIsMzAgKzczMCwzNSBAQAogCWlmIChoZWFydGJlYXQgPT0gMCkKIAkJaGVhcnRiZWF0ID0gaGVhcnRiZWF0X3RibFsob3B0aW9uX3N3aXRjaGVzICYgMHgwNyldOwogCi0JLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlIDsKKwkgKiBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAodXNiX3Bjd2Rfc2V0X2hlYXJ0YmVhdCh1c2JfcGN3ZCwgaGVhcnRiZWF0KSkgewogCQl1c2JfcGN3ZF9zZXRfaGVhcnRiZWF0KHVzYl9wY3dkLCBXQVRDSERPR19IRUFSVEJFQVQpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKIAkJCVdBVENIRE9HX0hFQVJUQkVBVCk7CiAJfQogCiAJcmV0dmFsID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ1c2JfcGN3ZF9ub3RpZmllcik7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAogCQkJcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAlyZXR2YWwgPSBtaXNjX3JlZ2lzdGVyKCZ1c2JfcGN3ZF90ZW1wZXJhdHVyZV9taXNjZGV2KTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVRFTVBfTUlOT1IsIHJldHZhbCk7CiAJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX3JlYm9vdDsKIAl9CiAKIAlyZXR2YWwgPSBtaXNjX3JlZ2lzdGVyKCZ1c2JfcGN3ZF9taXNjZGV2KTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVdBVENIRE9HX01JTk9SLCByZXR2YWwpOwogCQlnb3RvIGVycl9vdXRfbWlzY19kZXJlZ2lzdGVyOwogCX0KQEAgLTgwMSw3ICs4NDQsNyBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUEZYIERSSVZFUl9ERVNDICIgdiIgRFJJVkVSX1ZFUlNJT04gIiAoIiBEUklWRVJfREFURSAiKVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJJVkVSX0RFU0MgIiB2IiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IDZkOWYzZDQuLjY0MTM1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKQEAgLTU0LDIyICs1NCwyMiBAQAogCiAvKiBXRFRJTV9DVFJMIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBDT1VOVF9FTkFCICAgICAxCi0jZGVmaW5lIFJFU0VUX0NPVU5UICAgICgxPDwxKQotI2RlZmluZSBERUJVR19FTiAgICAgICAoMTw8MikKKyNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDEgPDwgMSkKKyNkZWZpbmUgREVCVUdfRU4gICAgICAgKDEgPDwgMikKIAogLyogV0RUSU1fTUNUUkwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1SMF9JTlQgICAgICAgIDEKICN1bmRlZiAgUkVTRVRfQ09VTlQwCi0jZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxPDwyKQotI2RlZmluZSBTVE9QX0NPVU5UMCAgICAoMTw8MikKLSNkZWZpbmUgTV9SRVMxICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIE1fUkVTMiAgICAgICAgICgxPDw0KQotI2RlZmluZSBSRVNGUkMxICAgICAgICAoMTw8NSkKLSNkZWZpbmUgUkVTRlJDMiAgICAgICAgKDE8PDYpCisjZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxIDw8IDIpCisjZGVmaW5lIFNUT1BfQ09VTlQwICAgICgxIDw8IDIpCisjZGVmaW5lIE1fUkVTMSAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIE1fUkVTMiAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFJFU0ZSQzEgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFJFU0ZSQzIgICAgICAgICgxIDw8IDYpCiAKIC8qIFdEVElNX0VNUiBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRVhUX01BVENIMCAgICAgIDEKLSNkZWZpbmUgTUFUQ0hfT1VUUFVUX0hJR0ggKDI8PDQpCS8qYSBNQVRDSF9DVFJMIHNldHRpbmcgKi8KKyNkZWZpbmUgTUFUQ0hfT1VUUFVUX0hJR0ggKDIgPDwgNCkJLyphIE1BVENIX0NUUkwgc2V0dGluZyAqLwogCiAvKiBXRFRJTV9SRVMgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIFdET0dfUkVTRVQgICAgICAxCS8qIHJlYWQgb25seSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCmluZGV4IGYzNTUzZmEuLmY2Y2NjYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKQEAgLTE3LDI3ICsxNywyOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkJLyogRm9yIG1vZHVsZSBzcGVjaWZpYyBpdGVtcyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CQkvKiBGb3IgbmV3IG1vZHVsZXBhcmFtJ3MgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogRm9yIHN0YW5kYXJkIHR5cGVzIChsaWtlIHNpemVfdCkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkJLyogRm9yIHRoZSAtRU5PREVWLy4uLiB2YWx1ZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JCS8qIEZvciBwcmludGsvcGFuaWMvLi4uICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCQkvKiBGb3IgZmlsZSBvcGVyYXRpb25zICovCisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgkJLyogRm9yIE1PRFVMRV9BTElBU19NSVNDREVWCisJCQkJCQkJKFdBVENIRE9HX01JTk9SKSAqLworI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CQkvKiBGb3IgdGhlIHdhdGNoZG9nIHNwZWNpZmljIGl0ZW1zICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJCS8qIEZvciBfX2luaXQvX19leGl0Ly4uLiAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgkvKiBGb3IgcGxhdGZvcm1fZHJpdmVyIGZyYW1ld29yayAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CQkvKiBGb3Igc3Bpbl9sb2NrL3NwaW5fdW5sb2NrLy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4JCS8qIEZvciBjb3B5X3RvX3VzZXIvcHV0X3VzZXIvLi4uICovCiAKLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvaW50ZWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2ludGVnLmg+CS8qIEZvciB0aGUgV2F0Y2hkb2cgcmVnaXN0ZXJzICovCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40IgorI2RlZmluZSBQRlggS0JVSUxEX01PRE5BTUUgIjogIgorCisjZGVmaW5lIFZFUlNJT04gIjEuMCIKIAogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBpbnVzZTsKKwlzcGlubG9ja190IGlvX2xvY2s7CiB9IHJjMzI0MzRfd2R0X2RldmljZTsKIAogc3RhdGljIHN0cnVjdCBpbnRlZyBfX2lvbWVtICp3ZHRfcmVnOwpAQCAtNTgsNiArNjAsOSBAQAogI2RlZmluZSBXQVRDSERPR19USU1FT1VUIDIwCiAKIHN0YXRpYyBpbnQgdGltZW91dCA9IFdBVENIRE9HX1RJTUVPVVQ7Cittb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIldhdGNoZG9nIHRpbWVvdXQgdmFsdWUsIGluIHNlY29uZHMgKGRlZmF1bHQ9IgorCQlXQVRDSERPR19USU1FT1VUICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTY4LDEwICs3MywyOSBAQAogI2RlZmluZSBTRVRfQklUUyhhZGRyLCBvciwgbmFuZCkgXAogCXdyaXRlbCgocmVhZGwoJmFkZHIpIHwgb3IpICYgfm5hbmQsICZhZGRyKQogCitzdGF0aWMgaW50IHJjMzI0MzRfd2R0X3NldChpbnQgbmV3X3RpbWVvdXQpCit7CisJaW50IG1heF90byA9IFdUQ09NUDJTRUMoKHUzMiktMSk7CisKKwlpZiAobmV3X3RpbWVvdXQgPCAwIHx8IG5ld190aW1lb3V0ID4gbWF4X3RvKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInRpbWVvdXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkIiwKKwkJCW1heF90byk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0aW1lb3V0ID0gbmV3X3RpbWVvdXQ7CisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisJd3JpdGVsKFNFQzJXVENPTVAodGltZW91dCksICZ3ZHRfcmVnLT53dGNvbXBhcmUpOworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfc3RhcnQodm9pZCkKIHsKIAl1MzIgb3IsIG5hbmQ7CiAKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwogCS8qIHplcm8gdGhlIGNvdW50ZXIgYmVmb3JlIGVuYWJsaW5nICovCiAJd3JpdGVsKDAsICZ3ZHRfcmVnLT53dGNvdW50KTsKIApAQCAtODUsMzggKzEwOSwzNSBAQAogCiAJU0VUX0JJVFMod2R0X3JlZy0+ZXJyY3MsIG9yLCBuYW5kKTsKIAorCS8qIHNldCB0aGUgdGltZW91dCAoZWl0aGVyIGRlZmF1bHQgb3IgYmFzZWQgb24gbW9kdWxlIHBhcmFtKSAqLworCXJjMzI0MzRfd2R0X3NldCh0aW1lb3V0KTsKKwogCS8qIHJlc2V0IFdUQyB0aW1lb3V0IGJpdCBhbmQgZW5hYmxlIFdEVCAqLwogCW5hbmQgPSAxIDw8IFJDMzI0MzRfV1RDX1RPOwogCW9yID0gMSA8PCBSQzMyNDM0X1dUQ19FTjsKIAogCVNFVF9CSVRTKHdkdF9yZWctPnd0Yywgb3IsIG5hbmQpOworCisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiU3RhcnRlZCB3YXRjaGRvZyB0aW1lci5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9zdG9wKHZvaWQpCiB7CisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKIAkvKiBEaXNhYmxlIFdEVCAqLwogCVNFVF9CSVRTKHdkdF9yZWctPnd0YywgMCwgMSA8PCBSQzMyNDM0X1dUQ19FTik7Ci19CiAKLXN0YXRpYyBpbnQgcmMzMjQzNF93ZHRfc2V0KGludCBuZXdfdGltZW91dCkKLXsKLQlpbnQgbWF4X3RvID0gV1RDT01QMlNFQygodTMyKS0xKTsKLQotCWlmIChuZXdfdGltZW91dCA8IDAgfHwgbmV3X3RpbWVvdXQgPiBtYXhfdG8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiOiB0aW1lb3V0IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCIsCi0JCQltYXhfdG8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdGltZW91dCA9IG5ld190aW1lb3V0OwotCXdyaXRlbChTRUMyV1RDT01QKHRpbWVvdXQpLCAmd2R0X3JlZy0+d3Rjb21wYXJlKTsKLQotCXJldHVybiAwOworCXNwaW5fdW5sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlN0b3BwZWQgd2F0Y2hkb2cgdGltZXIuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfcGluZyh2b2lkKQogeworCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOwogCXdyaXRlbCgwLCAmd2R0X3JlZy0+d3Rjb3VudCk7CisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKIH0KIAogc3RhdGljIGludCByYzMyNDM0X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTM3LDExICsxNTgsMTAgQEAKIHsKIAlpZiAoZXhwZWN0X2Nsb3NlID09IDQyKSB7CiAJCXJjMzI0MzRfd2R0X3N0b3AoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBkaXNhYmxpbmcgd2F0Y2hkb2cgdGltZXJcbiIpOwogCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FCi0JCQkiOiBkZXZpY2UgY2xvc2VkIHVuZXhwZWN0ZWRseS4gV0RUIHdpbGwgbm90IHN0b3AgIVxuIik7CisJCXByaW50ayhLRVJOX0NSSVQgUEZYCisJCQkiZGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkuIFdEVCB3aWxsIG5vdCBzdG9wIVxuIik7CiAJCXJjMzI0MzRfd2R0X3BpbmcoKTsKIAl9CiAJY2xlYXJfYml0KDAsICZyYzMyNDM0X3dkdF9kZXZpY2UuaW51c2UpOwpAQCAtMTg1LDggKzIwNSw5IEBACiAJCS5pZGVudGl0eSA9CQkiUkMzMjQzNF9XRFQgV2F0Y2hkb2ciLAogCX07CiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFdESU9DX0tFRVBBTElWRToKLQkJcmMzMjQzNF93ZHRfcGluZygpOworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgogCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKQEAgLTE5NCwxMCArMjE1LDYgQEAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFsdWUsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKLQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAljYXNlIFdESU9DX1NFVE9QVElPTlM6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMjEyLDYgKzIyOSw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJcmMzMjQzNF93ZHRfcGluZygpOworCQlicmVhazsKIAljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3RpbWVvdXQsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMjI3LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjMzI0MzRfd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYzMyNDM0X3dkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gcmMzMjQzNF93ZHRfd3JpdGUsCkBAIC0yNDIsOCArMjYyLDggQEAKIAkuZm9wcwk9ICZyYzMyNDM0X3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19kZXZpbml0ZGF0YSA9IEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQotCQkiOiBXYXRjaGRvZyBUaW1lciB2ZXJzaW9uICIgVkVSU0lPTiAiLCB0aW1lciBtYXJnaW46ICVkIHNlY1xuIjsKK3N0YXRpYyBjaGFyIGJhbm5lcltdIF9fZGV2aW5pdGRhdGEgPSBLRVJOX0lORk8gUEZYCisJCSJXYXRjaGRvZyBUaW1lciB2ZXJzaW9uICIgVkVSU0lPTiAiLCB0aW1lciBtYXJnaW46ICVkIHNlY1xuIjsKIAogc3RhdGljIGludCBfX2RldmluaXQgcmMzMjQzNF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTI1MiwyMiArMjcyLDMzIEBACiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJiNTMyX3dkdF9yZXMiKTsKIAlpZiAoIXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiZmFpbGVkIHRvIHJldHJpZXZlIHJlc291cmNlc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXRyaWV2ZSByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAl3ZHRfcmVnID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CiAJaWYgKCF3ZHRfcmVnKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkJImZhaWxlZCB0byByZW1hcCBJL08gcmVzb3VyY2VzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlbWFwIEkvTyByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAorCXNwaW5fbG9ja19pbml0KCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHdhdGNoZG9nIGlzIG5vdCBydW5uaW5nICovCisJcmMzMjQzNF93ZHRfc3RvcCgpOworCisJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCWlmIChyYzMyNDM0X3dkdF9zZXQodGltZW91dCkpIHsKKwkJcmMzMjQzNF93ZHRfc2V0KFdBVENIRE9HX1RJTUVPVVQpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJInRpbWVvdXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkXG4iLAorCQkJV1RDT01QMlNFQygodTMyKS0xKSk7CisJfQorCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmcmMzMjQzNF93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIHdhdGNoZG9nIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZWdpc3RlciB3YXRjaGRvZyBkZXZpY2VcbiIpOwogCQlnb3RvIHVubWFwOwogCX0KIApAQCAtMjg3LDIyICszMTgsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmMzMjQzNF93ZHQgPSB7Ci0JLnByb2JlCT0gcmMzMjQzNF93ZHRfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHJjMzI0MzRfd2R0X3JlbW92ZSksCi0JLmRyaXZlcgk9IHsKLQkJLm5hbWUgPSAicmMzMjQzNF93ZHQiLAorc3RhdGljIHZvaWQgcmMzMjQzNF93ZHRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyYzMyNDM0X3dkdF9zdG9wKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJjMzI0MzRfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcmMzMjQzNF93ZHRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChyYzMyNDM0X3dkdF9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHJjMzI0MzRfd2R0X3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkJLm5hbWUgPSAicmMzMjQzNF93ZHQiLAogCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJjMzI0MzRfd2R0X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdCk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcmMzMjQzNF93ZHRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJjMzI0MzRfd2R0X2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcmMzMjQzNF93ZHQpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyYzMyNDM0X3dkdF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChyYzMyNDM0X3dkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCAwOWNiMTgzLi4xZThmMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogCiAvKiBSSU8gdXNlcyB0aGUgTmF0U2VtaSBTdXBlciBJL08gcG93ZXIgbWFuYWdlbWVudCBsb2dpY2FsIGRldmljZQpAQCAtODYsOCArODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJpb3dkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyByaW93ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQsCkBAIC0xNDcsNyArMTQ1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgcmlvd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3Qgcmlvd2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3Qgcmlvd2QgKnAgPSByaW93ZF9kZXZpY2U7CiAKQEAgLTE2MCwxMiArMTU5LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJpb3dkX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9CW5vX2xsc2VlaywKLQkuaW9jdGwgPQlyaW93ZF9pb2N0bCwKLQkub3BlbiA9CQlyaW93ZF9vcGVuLAotCS53cml0ZSA9CXJpb3dkX3dyaXRlLAotCS5yZWxlYXNlID0Jcmlvd2RfcmVsZWFzZSwKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CQlub19sbHNlZWssCisJLnVubG9ja2VkX2lvY3RsID0Jcmlvd2RfaW9jdGwsCisJLm9wZW4gPQkJCXJpb3dkX29wZW4sCisJLndyaXRlID0JCXJpb3dkX3dyaXRlLAorCS5yZWxlYXNlID0JCXJpb3dkX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugcmlvd2RfbWlzY2RldiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYwppbmRleCBmMWFlMzcyOS4uY2NlMTk4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYwpAQCAtNTksOCArNTksOCBAQAogc3RhdGljIGludCB3ZHRfZ3BpX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKndkdF9ncGlfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwKIAkJCQkJCWNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKLXN0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CitzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitzdGF0aWMgaW50IF9fZXhpdCB3ZHRfZ3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCiAKIHN0YXRpYyBjb25zdCBjaGFyIHdkdF9ncGlfbmFtZVtdID0gIndkdF9ncGkiOwpAQCAtMzQ2LDEwICszNDYsOSBAQAogfQogCiAvKiBObyBob3RwbHVnZ2luZyBvbiB0aGUgcGxhdGZvcm0gYnVzIC0gdXNlIF9faW5pdCAqLwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkdikKIHsKIAlpbnQgcmVzOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBjb25zdCBwZHYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmVzb3VyY2UKIAkJKiBjb25zdCByciA9IHdkdF9ncGlfZ2V0X3Jlc291cmNlKHBkdiwgV0RUX1JFU09VUkNFX1JFR1MsCiAJCQkJCQkgIElPUkVTT1VSQ0VfTUVNKSwKQEAgLTM3NCw3ICszNzMsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmVzOwogCkBAIC0zODcsMTUgKzM4NiwxMyBAQAogCiAKIC8qIERldmljZSBkcml2ZXIgaW5pdCAmIGV4aXQgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB3ZHRfZ3BpX2RyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKSB3ZHRfZ3BpX25hbWUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2d0X2dwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gd2R0X2dwaV9uYW1lLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gd2R0X2dwaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKLQkuc2h1dGRvd24JPSBOVUxMLAotCS5zdXNwZW5kCT0gTlVMTCwKLQkucmVzdW1lCQk9IE5VTEwsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3ZHRfZ3BpX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX2luaXRfbW9kdWxlKHZvaWQpCkBAIC00MDMsMTIgKzQwMCwxMiBAQAogCWF0b21pY19zZXQoJm9wZW5jbnQsIDEpOwogCWlmICh0aW1lb3V0ID4gTUFYX1RJTUVPVVRfU0VDT05EUykKIAkJdGltZW91dCA9IE1BWF9USU1FT1VUX1NFQ09ORFM7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHdkdF9ncGlfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHdkdF9ncGlfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYTExMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYwppbmRleCBlMTliNDU3Li41YmQ3ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKglXYXRjaGRvZyBkcml2ZXIgZm9yIHRoZSBTQTExeDAvUFhBMnh4CiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDIwMDAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+Ci0gKiAgICAgICAgICBCYXNlZCBvbiBTb2Z0RG9nIGRyaXZlciBieSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICoJKGMpIENvcHlyaWdodCAyMDAwIE9sZWcgRHJva2luIDxncmVlbkBjcmltZWEuZWR1PgorICoJICAgIEJhc2VkIG9uIFNvZnREb2cgZHJpdmVyIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDAgICAgICAgICAgIE9sZWcgRHJva2luIDxncmVlbkBjcmltZWEuZWR1PgogICoKLSAqICAgICAgMjcvMTEvMjAwMCBJbml0aWFsIHJlbGVhc2UKKyAqCTI3LzExLzIwMDAgSW5pdGlhbCByZWxlYXNlCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYwppbmRleCAzMjY2ZGFhYWUuLmQxYzM5MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCTYweHggU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIFRpbWVyIGRyaXZlciBmb3IgTGludXggMi4yLngKICAqCi0gKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KKyAqCUJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwppbmRleCBhZTc0ZjZiLi5iNmU2Nzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwpAQCAtNCwxMiArNCwxMiBAQAogICoJKGMpIENvcHlyaWdodCAyMDA1IFdlYmNvbiwgSW5jLgogICoKICAqCUJhc2VkIG9uIGliNzAwd2R0LmMsIHdoaWNoIGlzIGJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkCi0gKiAgICAgIG9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCW9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDEgQ2hhcmxlcyBIb3dlcyA8Y2hvd2VzQHZzb2wubmV0PgogICoKLSAqICAgICAgQmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gYWNxdWlyZXdkdC5jIHdoaWNoCi0gKiAgICAgICBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCUJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIGFjcXVpcmV3ZHQuYyB3aGljaAorICoJaXMgYmFzZWQgb24gd2R0LmMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAwLTIwMDEgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGxpbnV4Lm9yZy5wbD4KICAqCkBAIC0zMCw5ICszMCw5IEBACiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgotICogICAgICAxNC1EZWMtMjAwMSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+Ci0gKiAgICAgICAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLSAqICAgICAgICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAorICoJMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICoJICAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorICoJICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCmluZGV4IDA2NTUzZGUuLmU0NjdkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCkBAIC0zNSw3ICszNSw4IEBACiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAjZGVmaW5lIEVQWEMzX1dBVENIRE9HX0NUTF9SRUcgMHgxZWUgLyogd3JpdGUgMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZSAqLwogI2RlZmluZSBFUFhDM19XQVRDSERPR19QRVRfUkVHIDB4MWVmIC8qIHdyaXRlIGFueXRoaW5nIHRvIHBldCBvbmNlIGVuYWJsZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCmluZGV4IDIzZGEzY2MuLmI1ZTE5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYwpAQCAtNzEsNyArNzEsNyBAQAogI2RlZmluZSBVQVJUMl9JUlEJMHgwNAkvKiBTZXJpYWwxICovCiAvKiA1IC03IGFyZSByZXNlcnZlZCAqLwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFBGWCBTQzEyMDBfTU9EVUxFX1ZFUjsKK3N0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBQRlggU0MxMjAwX01PRFVMRV9WRVI7CiBzdGF0aWMgaW50IHRpbWVvdXQgPSAxOwogc3RhdGljIGludCBpbyA9IC0xOwogc3RhdGljIGludCBpb19sZW4gPSAyOwkJLyogZm9yIG5vbiBwbHVnIGFuZCBwbGF5ICovCkBAIC0zOTIsNyArMzkyLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKCIlc1xuIiwgYmFubmVyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgYmFubmVyKTsKIAogI2lmIGRlZmluZWQgQ09ORklHX1BOUAogCWlmIChpc2FwbnApIHsKQEAgLTQ3Nyw2ICs0NzcsNyBAQAogbW9kdWxlX2V4aXQoc2MxMjAwd2R0X2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IHdhdGNoZG9nIGNvbXBvbmVudCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKAorCSJEcml2ZXIgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IHdhdGNoZG9nIGNvbXBvbmVudCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKaW5kZXggYTJiNmMxMC4uNTJiNjNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NjNTIwX3dkdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqCUFNRCBFbGFuIFNDNTIwIHByb2Nlc3NvciBXYXRjaGRvZyBUaW1lciBkcml2ZXIKICAqCi0gKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveCwKLSAqICAgICAgICAgICBhbmQgc2JjNjB4eHdkdC5jIGJ5IEpha29iIE9lc3RlcmdhYXJkIDxqYWtvYkB1bnRob3VnaHQubmV0PgorICoJQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294LAorICoJICAgICBhbmQgc2JjNjB4eHdkdC5jIGJ5IEpha29iIE9lc3RlcmdhYXJkIDxqYWtvYkB1bnRob3VnaHQubmV0PgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICoJVGhlIGF1dGhvcnMgZG8gTk9UIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZSB3YXJyYW50eSBmb3IKICAqCWFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkICJBUy1JUyIgaW4KLSAqICAgICAgdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCisgKgl0aGUgaG9wZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDEgICAgU2NvdHQgSmVubmluZ3MgPGxpbnV4ZHJpdmVyc0Bvcm8ubmV0PgogICogICAgICAgICAgIDkvMjcgLSAyMDAxICAgICAgW0luaXRpYWwgcmVsZWFzZV0KQEAgLTQzOCw2ICs0MzgsNyBAQAogbW9kdWxlX2V4aXQoc2M1MjBfd2R0X3VubG9hZCk7CiAKIE1PRFVMRV9BVVRIT1IoIlNjb3R0IGFuZCBCaWxsIEplbm5pbmdzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3Igd2F0Y2hkb2cgdGltZXIgaW4gQU1EIFwiRWxhblwiIFNDNTIwIHVQcm9jZXNzb3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigKKwkiRHJpdmVyIGZvciB3YXRjaGRvZyB0aW1lciBpbiBBTUQgXCJFbGFuXCIgU0M1MjAgdVByb2Nlc3NvciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCmluZGV4IDJlNTZjYWQuLjhhMWYwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKQEAgLTIsNyArMiw3IEBACiAgKglTTXNDIDM3Qjc4NyBXYXRjaGRvZyBUaW1lciBkcml2ZXIgZm9yIExpbnV4IDIuNi54LngKICAqCiAgKglCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqICAgICAgIGFuZCBzb21lIG90aGVyIGV4aXN0aW5nIGRyaXZlcnMKKyAqCWFuZCBzb21lIG90aGVyIGV4aXN0aW5nIGRyaXZlcnMKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTEsNyArMTEsNyBAQAogICoKICAqCVRoZSBhdXRob3JzIGRvIE5PVCBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUgd2FycmFudHkgZm9yCiAgKglhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZCAiQVMtSVMiIGluCi0gKiAgICAgIHRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgorICoJdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCiAgKgogICoJKEMpIENvcHlyaWdodCAyMDAzLTIwMDYgIFN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4KICAqCkBAIC0yMiwxOSArMjIsMTkgQEAKICAqCiAgKiAgVGhlb3J5IG9mIG9wZXJhdGlvbjoKICAqCi0gKiAgICAgIEEgV2F0Y2hkb2cgVGltZXIgKFdEVCkgaXMgYSBoYXJkd2FyZSBjaXJjdWl0IHRoYXQgY2FuCi0gKiAgICAgIHJlc2V0IHRoZSBjb21wdXRlciBzeXN0ZW0gaW4gY2FzZSBvZiBhIHNvZnR3YXJlIGZhdWx0LgotICogICAgICBZb3UgcHJvYmFibHkga25ldyB0aGF0IGFscmVhZHkuCisgKglBIFdhdGNoZG9nIFRpbWVyIChXRFQpIGlzIGEgaGFyZHdhcmUgY2lyY3VpdCB0aGF0IGNhbgorICoJcmVzZXQgdGhlIGNvbXB1dGVyIHN5c3RlbSBpbiBjYXNlIG9mIGEgc29mdHdhcmUgZmF1bHQuCisgKglZb3UgcHJvYmFibHkga25ldyB0aGF0IGFscmVhZHkuCiAgKgotICogICAgICBVc3VhbGx5IGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIG5vdGlmeSB0aGUga2VybmVsIFdEVCBkcml2ZXIKLSAqICAgICAgdmlhIHRoZSAvZGV2L3dhdGNoZG9nIHNwZWNpYWwgZGV2aWNlIGZpbGUgdGhhdCB1c2Vyc3BhY2UgaXMKLSAqICAgICAgc3RpbGwgYWxpdmUsIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLiAgV2hlbiBzdWNoIGEgbm90aWZpY2F0aW9uCi0gKiAgICAgIG9jY3VycywgdGhlIGRyaXZlciB3aWxsIHVzdWFsbHkgdGVsbCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cKLSAqICAgICAgdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLCBhbmQgdGhhdCB0aGUgd2F0Y2hkb2cgc2hvdWxkIHdhaXQKLSAqICAgICAgZm9yIHlldCBhbm90aGVyIGxpdHRsZSB3aGlsZSB0byByZXNldCB0aGUgc3lzdGVtLgotICogICAgICBJZiB1c2Vyc3BhY2UgZmFpbHMgKFJBTSBlcnJvciwga2VybmVsIGJ1Zywgd2hhdGV2ZXIpLCB0aGUKLSAqICAgICAgbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsCi0gKiAgICAgIHJlc2V0IHRoZSBzeXN0ZW0gKGNhdXNpbmcgYSByZWJvb3QpIGFmdGVyIHRoZSB0aW1lb3V0IG9jY3Vycy4KKyAqCVVzdWFsbHkgYSB1c2Vyc3BhY2UgZGFlbW9uIHdpbGwgbm90aWZ5IHRoZSBrZXJuZWwgV0RUIGRyaXZlcgorICoJdmlhIHRoZSAvZGV2L3dhdGNoZG9nIHNwZWNpYWwgZGV2aWNlIGZpbGUgdGhhdCB1c2Vyc3BhY2UgaXMKKyAqCXN0aWxsIGFsaXZlLCBhdCByZWd1bGFyIGludGVydmFscy4gIFdoZW4gc3VjaCBhIG5vdGlmaWNhdGlvbgorICoJb2NjdXJzLCB0aGUgZHJpdmVyIHdpbGwgdXN1YWxseSB0ZWxsIHRoZSBoYXJkd2FyZSB3YXRjaGRvZworICoJdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLCBhbmQgdGhhdCB0aGUgd2F0Y2hkb2cgc2hvdWxkIHdhaXQKKyAqCWZvciB5ZXQgYW5vdGhlciBsaXR0bGUgd2hpbGUgdG8gcmVzZXQgdGhlIHN5c3RlbS4KKyAqCUlmIHVzZXJzcGFjZSBmYWlscyAoUkFNIGVycm9yLCBrZXJuZWwgYnVnLCB3aGF0ZXZlciksIHRoZQorICoJbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsCisgKglyZXNldCB0aGUgc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCiAgKgogICogQ3JlYXRlIGRldmljZSB3aXRoOgogICogIG1rbm9kIC9kZXYvd2F0Y2hkb2cgYyAxMCAxMzAKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKIAkJbmV3X3RpbWVvdXQgPSB0aW1lb3V0OwogCQlpZiAodW5pdCA9PSBVTklUX01JTlVURSkKLQkJCSAgbmV3X3RpbWVvdXQgKj0gNjA7CisJCQluZXdfdGltZW91dCAqPSA2MDsKIAkJcmV0dXJuIHB1dF91c2VyKG5ld190aW1lb3V0LCB1YXJnLmkpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYwppbmRleCA3MjA0Zjk2Li5lYmNjOWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKglTb2Z0RG9nCTAuMDc6CUEgU29mdHdhcmUgV2F0Y2hkb2cgRGV2aWNlCiAgKgotICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAorICoJCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzIsNyArMzMsNyBAQAogICoJQWRkZWQgV0RJT0NfR0VUVElNRU9VVCBhbmQgV0RJT0NfU0VUVElNT1VULgogICoKICAqICAyMDAyMDUzMCBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KLSAqICAJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgorICoJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCmluZGV4IDNjN2FhNDEuLmE5YzdmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTdoZl93ZHQuYwpAQCAtNDYyLDYgKzQ2Miw3IEBACiBtb2R1bGVfZXhpdCh3ZHRfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwgU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwgIgorCQkiU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigidzgzNjk3aGYvaGcgV0RUIGRyaXZlciIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMKaW5kZXggYWRhOGFkOC4uODgzYjVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jCkBAIC0yLDcgKzIsNyBAQAogICoJdzgzNjk3dWcvdWYgV0RUIGRyaXZlcgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwOCBGbGVtbWluZyBGcmFuc2VuIDxmZkBucnZpc3NpbmcubmV0PgotICogICAgICAgICAgICAgIHJldXNlZCBvcmlnaW5hbCBjb2RlIHRvIHN1cG9wcnQgdzgzNjk3dWcvdWYuCisgKgkJcmV1c2VkIG9yaWdpbmFsIGNvZGUgdG8gc3VwcG9ydCB3ODM2OTd1Zy91Zi4KICAqCiAgKglCYXNlZCBvbiB3ODM2MjdoZl93ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYwogICoJd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCkBAIC03OSw3ICs3OSw3IEBACiAJCQkJCQkJKHNhbWUgYXMgRUZFUikgKi8KICNkZWZpbmUgV0RUX0VGRFIgKFdEVF9FRklSKzEpIC8qIEV4dGVuZGVkIEZ1bmN0aW9uIERhdGEgUmVnaXN0ZXIgKi8KIAotc3RhdGljIHZvaWQgdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKHZvaWQpCitzdGF0aWMgaW50IHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBjaGFyIHZlcnNpb247CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIFc4MzY5N1VHL1VGIGNvdWxkIGJlIGZvdW5kXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlvdXRiX3AoMHgwNywgV0RUX0VGRVIpOyAvKiBwb2ludCB0byBsb2dpY2FsIGRldmljZSBudW1iZXIgcmVnICovCkBAIC0xMTAsNiArMTEwLDggQEAKIAlvdXRiX3AoMHgzMCwgV0RUX0VGRVIpOyAvKiBzZWxlY3QgQ1IzMCAqLwogCWMgPSBpbmJfcChXRFRfRUZEUik7CiAJb3V0Yl9wKGMgfHwgMHgwMSwgV0RUX0VGRFIpOyAvKiBzZXQgYml0IDAgdG8gYWN0aXZhdGUgR1BJTzIgKi8KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3ODM2OTd1Z191bnNlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQpAQCAtMTE3LDExICsxMTksMTQgQEAKIAlvdXRiX3AoMHhBQSwgV0RUX0VGRVIpOyAvKiBMZWF2ZSBleHRlbmRlZCBmdW5jdGlvbiBtb2RlICovCiB9CiAKLXN0YXRpYyB2b2lkIHc4MzY5N3VnX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgdzgzNjk3dWdfaW5pdCh2b2lkKQogeworCWludCByZXQ7CiAJdW5zaWduZWQgY2hhciB0OwogCi0JdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJcmV0ID0gdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OwogCiAJb3V0Yl9wKDB4RjYsIFdEVF9FRkVSKTsgLyogU2VsZWN0IENSRjYgKi8KIAl0ID0gaW5iX3AoV0RUX0VGRFIpOyAgICAvKiByZWFkIENSRjYgKi8KQEAgLTEzNywxMyArMTQyLDE1IEBACiAJb3V0Yl9wKHQsIFdEVF9FRkRSKTsgICAgLyogV3JpdGUgYmFjayB0byBDUkY1ICovCiAKIAl3ODM2OTd1Z191bnNlbGVjdF93ZF9yZWdpc3RlcigpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3ZHRfY3RybChpbnQgdGltZW91dCkKIHsKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCi0JdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJaWYgKHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpIDwgMCkKKwkJcmV0dXJuOwogCiAJb3V0Yl9wKDB4RjQsIFdEVF9FRkVSKTsgICAgLyogU2VsZWN0IENSRjQgKi8KIAlvdXRiX3AodGltZW91dCwgV0RUX0VGRFIpOyAvKiBXcml0ZSBUaW1lb3V0IGNvdW50ZXIgdG8gQ1JGNCAqLwpAQCAtMzQ3LDcgKzM1NCw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXc4MzY5N3VnX2luaXQoKTsKKwlyZXQgPSB3ODM2OTd1Z19pbml0KCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIHVucmVnX3JlZ2lvbnM7CiAKIAlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CiAJaWYgKHJldCAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKaW5kZXggMjUyNWRhNS4uMDU2MDE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAod2R0X3NldF90aW1lb3V0KG5ld190aW1lb3V0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJd2R0X2tlZXBhbGl2ZSgpOwogCQkvKiBGYWxsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oIGIvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaAppbmRleCBkYjM0ODUzLi4wZTNhNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2Q1MDFwLmgKQEAgLTExLDkgKzExLDkgQEAKICAqCiAgKglodHRwOi8vd3d3LmN5bXJ1Lm5ldAogICoKLSAqCVRoaXMgZHJpdmVyIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkCi0gKgloZXJlaW4gYnkgcmVmZXJlbmNlLiBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIHdpdGhvdXQgd2FycmFudHkgb3IKLSAqCXN1cHBvcnQuCisgKglUaGlzIGRyaXZlciBpcyBwcm92aWRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKglpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4gVGhlIGRyaXZlciBpcyBwcm92aWRlZCB3aXRob3V0CisgKgl3YXJyYW50eSBvciBzdXBwb3J0LgogICoKICAqCVJlbGVhc2UgMC4wNC4KICAqCkBAIC0zOSwxMyArMzksMTMgQEAKIC8qIHByb2dyYW1tYWJsZSBvdXRwdXRzOiAqLwogI2RlZmluZSBXRFRfUFJPR09VVAkJKGlvKzE1KQkvKiB3cj1lbmFibGUsIHJkPWRpc2FibGUgKi8KIAotCQkJCQkJCQkvKiBGQU4gNTAxIDUwMCAqLwotI2RlZmluZSBXRENfU1JfV0NDUgkJMQkvKiBBY3RpdmUgbG93ICovCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9UR09PRAkJMgkJCQkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfSVNPSTAJCTQJCQkJLyogIFggICBYICAgWCAgKi8KLSNkZWZpbmUgV0RDX1NSX0lTSUkxCQk4CQkJCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9GQU5HT09ECQkxNgkJCQkvKiAgWCAgIC0gICAtICAqLwotI2RlZmluZSBXRENfU1JfUFNVT1ZFUgkJMzIJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfUFNVVU5EUgkJNjQJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfSVJRCQkxMjgJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICBYICAqLworCQkJCQkJCSAvKiBGQU4gNTAxIDUwMCAqLworI2RlZmluZSBXRENfU1JfV0NDUgkJMQkvKiBBY3RpdmUgbG93ICovIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9UR09PRAkJMgkJCSAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfSVNPSTAJCTQJCQkgLyogIFggICBYICAgWCAgKi8KKyNkZWZpbmUgV0RDX1NSX0lTSUkxCQk4CQkJIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9GQU5HT09ECQkxNgkJCSAvKiAgWCAgIC0gICAtICAqLworI2RlZmluZSBXRENfU1JfUFNVT1ZFUgkJMzIJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfUFNVVU5EUgkJNjQJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfSVJRCQkxMjgJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICBYICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ZHQuYwppbmRleCBlZGRiOTE4Li4zYmJlZmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICoJSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UgV0RUNTAwLzUwMSBkcml2ZXIKKyAqCUluZHVzdHJpYWwgQ29tcHV0ZXIgU291cmNlIFdEVDUwMSBkcml2ZXIKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKICAqCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQEAgLTgyLDE0ICs4MiwxNiBAQAogbW9kdWxlX3BhcmFtKGlycSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiV0RUIGlycSAoZGVmYXVsdD0xMSkiKTsKIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiAvKiBTdXBwb3J0IGZvciB0aGUgRmFuIFRhY2hvbWV0ZXIgb24gdGhlIFdEVDUwMS1QICovCiBzdGF0aWMgaW50IHRhY2hvbWV0ZXI7Ci0KIG1vZHVsZV9wYXJhbSh0YWNob21ldGVyLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0YWNob21ldGVyLAogCQkiV0RUNTAxLVAgRmFuIFRhY2hvbWV0ZXIgc3VwcG9ydCAoMD1kaXNhYmxlLCBkZWZhdWx0PTApIik7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKworc3RhdGljIGludCB0eXBlID0gNTAwOworbW9kdWxlX3BhcmFtKHR5cGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHR5cGUsCisJCSJXRFQ1MDEtUCBDYXJkIHR5cGUgKDUwMCBvciA1MDEgLCBkZWZhdWx0PTUwMCkiKTsKIAogLyoKICAqCVByb2dyYW1taW5nIHN1cHBvcnQKQEAgLTE1OCw3ICsxNjAsNyBAQAogICoJcmVsb2FkaW5nIHRoZSBjYXNjYWRlIGNvdW50ZXIuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfcGluZyh2b2lkKQorc3RhdGljIHZvaWQgd2R0X3Bpbmcodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwpAQCAtMTY5LDcgKzE3MSw2IEBACiAJd2R0X2N0cl9sb2FkKDEsIHdkX2hlYXJ0YmVhdCk7CS8qIEhlYXJ0YmVhdCAqLwogCW91dGJfcCgwLCBXRFRfREMpOwkJLyogRW5hYmxlIHdhdGNoZG9nICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xOTMsNyArMTk0LDYgQEAKIAogLyoqCiAgKgl3ZHRfZ2V0X3N0YXR1czoKLSAqCUBzdGF0dXM6CQl0aGUgbmV3IHN0YXR1cy4KICAqCiAgKglFeHRyYWN0IHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSBhIFdEVCB3YXRjaGRvZyBkZXZpY2UuIFRoZXJlIGFyZQogICoJc2V2ZXJhbCBib2FyZCB2YXJpYW50cyBzbyB3ZSBoYXZlIHRvIGtub3cgd2hpY2ggYml0cyBhcmUgdmFsaWQuIFNvbWUKQEAgLTIwMiwzNiArMjAyLDM1IEBACiAgKgl3ZSB0aGVuIG1hcCB0aGUgYml0cyBvbnRvIHRoZSBzdGF0dXMgaW9jdGwgZmxhZ3MuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfZ2V0X3N0YXR1cyhpbnQgKnN0YXR1cykKK3N0YXRpYyBpbnQgd2R0X2dldF9zdGF0dXModm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIG5ld19zdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwogCW5ld19zdGF0dXMgPSBpbmJfcChXRFRfU1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7CiAKLQkqc3RhdHVzID0gMDsKIAlpZiAobmV3X3N0YXR1cyAmIFdEQ19TUl9JU09JMCkKLQkJKnN0YXR1cyB8PSBXRElPRl9FWFRFUk4xOworCQlzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMTsKIAlpZiAobmV3X3N0YXR1cyAmIFdEQ19TUl9JU0lJMSkKLQkJKnN0YXR1cyB8PSBXRElPRl9FWFRFUk4yOwotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9UR09PRCkpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7Ci0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VPVkVSKSkKLQkJKnN0YXR1cyB8PSBXRElPRl9QT1dFUk9WRVI7Ci0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VVTkRSKSkKLQkJKnN0YXR1cyB8PSBXRElPRl9QT1dFUlVOREVSOwotCWlmICh0YWNob21ldGVyKSB7Ci0JCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCi0JCQkqc3RhdHVzIHw9IFdESU9GX0ZBTkZBVUxUOworCQlzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMjsKKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9UR09PRCkpCisJCQlzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7CisJCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCisJCQlzdGF0dXMgfD0gV0RJT0ZfUE9XRVJPVkVSOworCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQorCQkJc3RhdHVzIHw9IFdESU9GX1BPV0VSVU5ERVI7CisJCWlmICh0YWNob21ldGVyKSB7CisJCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQorCQkJCXN0YXR1cyB8PSBXRElPRl9GQU5GQVVMVDsKKwkJfQogCX0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogLyoqCiAgKgl3ZHRfZ2V0X3RlbXBlcmF0dXJlOgogICoKQEAgLTIzOSw3ICsyMzgsNyBAQAogICoJZmFyZW5oZWl0LiBJdCB3YXMgZGVzaWduZWQgYnkgYW4gaW1wZXJpYWwgbWVhc3VyZW1lbnQgbHVkZGl0ZS4KICAqLwogCi1zdGF0aWMgaW50IHdkdF9nZXRfdGVtcGVyYXR1cmUoaW50ICp0ZW1wZXJhdHVyZSkKK3N0YXRpYyBpbnQgd2R0X2dldF90ZW1wZXJhdHVyZSh2b2lkKQogewogCXVuc2lnbmVkIHNob3J0IGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI0NywxMCArMjQ2LDE4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJndkdF9sb2NrLCBmbGFncyk7CiAJYyA9IGluYl9wKFdEVF9SVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKLQkqdGVtcGVyYXR1cmUgPSAoYyAqIDExIC8gMTUpICsgNzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKGMgKiAxMSAvIDE1KSArIDc7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKworc3RhdGljIHZvaWQgd2R0X2RlY29kZV81MDEoaW50IHN0YXR1cykKK3sKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfVEdPT0QpKQorCQlwcmludGsoS0VSTl9DUklUICJPdmVyaGVhdCBhbGFybS4oJWQpXG4iLCBpbmJfcChXRFRfUlQpKTsKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCisJCXByaW50ayhLRVJOX0NSSVQgIlBTVSBvdmVyIHZvbHRhZ2UuXG4iKTsKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCisJCXByaW50ayhLRVJOX0NSSVQgIlBTVSB1bmRlciB2b2x0YWdlLlxuIik7Cit9CiAKIC8qKgogICoJd2R0X2ludGVycnVwdDoKQEAgLTI3NSwxOCArMjgyLDEzIEBACiAKIAlwcmludGsoS0VSTl9DUklUICJXRFQgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfVEdPT0QpKQotCQlwcmludGsoS0VSTl9DUklUICJPdmVyaGVhdCBhbGFybS4oJWQpXG4iLCBpbmJfcChXRFRfUlQpKTsKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCi0JCXByaW50ayhLRVJOX0NSSVQgIlBTVSBvdmVyIHZvbHRhZ2UuXG4iKTsKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCi0JCXByaW50ayhLRVJOX0NSSVQgIlBTVSB1bmRlciB2b2x0YWdlLlxuIik7Ci0JaWYgKHRhY2hvbWV0ZXIpIHsKLQkJaWYgKCEoc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiUG9zc2libGUgZmFuIGZhdWx0LlxuIik7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCXdkdF9kZWNvZGVfNTAxKHN0YXR1cyk7CisJCWlmICh0YWNob21ldGVyKSB7CisJCQlpZiAoIShzdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCisJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiUG9zc2libGUgZmFuIGZhdWx0LlxuIik7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAlpZiAoIShzdGF0dXMgJiBXRENfU1JfV0NDUikpIHsKICNpZmRlZiBTT0ZUV0FSRV9SRUJPT1QKICNpZmRlZiBPTkxZX1RFU1RJTkcKQEAgLTM2NiwxNyArMzY4LDE4IEBACiAKIAkvKiBBZGQgb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGNhcmQgd2UgaGF2ZSAqLwogCWlkZW50Lm9wdGlvbnMgfD0gKFdESU9GX0VYVEVSTjF8V0RJT0ZfRVhURVJOMik7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlpZGVudC5vcHRpb25zIHw9IChXRElPRl9PVkVSSEVBVHxXRElPRl9QT1dFUlVOREVSfFdESU9GX1BPV0VST1ZFUik7Ci0JaWYgKHRhY2hvbWV0ZXIpCi0JCWlkZW50Lm9wdGlvbnMgfD0gV0RJT0ZfRkFORkFVTFQ7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJaWRlbnQub3B0aW9ucyB8PSAoV0RJT0ZfT1ZFUkhFQVR8V0RJT0ZfUE9XRVJVTkRFUnwKKwkJCQkJCQlXRElPRl9QT1dFUk9WRVIpOworCQlpZiAodGFjaG9tZXRlcikKKwkJCWlkZW50Lm9wdGlvbnMgfD0gV0RJT0ZfRkFORkFVTFQ7CisJfQogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CiAJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOwogCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgotCQl3ZHRfZ2V0X3N0YXR1cygmc3RhdHVzKTsKKwkJc3RhdHVzID0gd2R0X2dldF9zdGF0dXMoKTsKIAkJcmV0dXJuIHB1dF91c2VyKHN0YXR1cywgcCk7CiAJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgogCQlyZXR1cm4gcHV0X3VzZXIoMCwgcCk7CkBAIC00NDYsNyArNDQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiAvKioKICAqCXdkdF90ZW1wX3JlYWQ6CiAgKglAZmlsZTogZmlsZSBoYW5kbGUgdG8gdGhlIHdhdGNoZG9nIGJvYXJkCkBAIC00NjEsMTAgKzQ2Myw3IEBACiBzdGF0aWMgc3NpemVfdCB3ZHRfdGVtcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnB0cikKIHsKLQlpbnQgdGVtcGVyYXR1cmU7Ci0KLQlpZiAod2R0X2dldF90ZW1wZXJhdHVyZSgmdGVtcGVyYXR1cmUpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlpbnQgdGVtcGVyYXR1cmUgPSB3ZHRfZ2V0X3RlbXBlcmF0dXJlKCk7CiAKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgJnRlbXBlcmF0dXJlLCAxKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00OTcsNyArNDk2LDYgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCiAvKioKICAqCW5vdGlmeV9zeXM6CkBAIC01MzksNyArNTM3LDYgQEAKIAkuZm9wcwk9ICZ3ZHRfZm9wcywKIH07CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X3RlbXBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCkBAIC01NTMsNyArNTUwLDYgQEAKIAkubmFtZQk9ICJ0ZW1wZXJhdHVyZSIsCiAJLmZvcHMJPSAmd2R0X3RlbXBfZm9wcywKIH07Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogLyoKICAqCVRoZSBXRFQgY2FyZCBuZWVkcyB0byBsZWFybiBhYm91dCBzb2Z0IHNodXRkb3ducyBpbiBvcmRlciB0bwpAQCAtNTc3LDkgKzU3Myw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2V4aXQodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLworCWlmICh0eXBlID09IDUwMSkKKwkJbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwogCWZyZWVfaXJxKGlycSwgTlVMTCk7CiAJcmVsZWFzZV9yZWdpb24oaW8sIDgpOwpAQCAtNTk3LDEyICs1OTIsMTcgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKHR5cGUgIT0gNTAwICYmIHR5cGUgIT0gNTAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAid2R0OiB1bmtub3duIGNhcmQgdHlwZSAnJWQnLlxuIiwgdHlwZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZTsKIAkgICBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAod2R0X3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQl3ZHRfc2V0X2hlYXJ0YmVhdChXRF9USU1PKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwIDwgaGVhcnRiZWF0IDwgNjU1MzYsIHVzaW5nICVkXG4iLAotCQkJV0RfVElNTyk7CisJCXByaW50ayhLRVJOX0lORk8gIndkdDogaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgIgorCQkJIjAgPCBoZWFydGJlYXQgPCA2NTUzNiwgdXNpbmcgJWRcbiIsIFdEX1RJTU8pOwogCX0KIAogCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDgsICJ3ZHQ1MDFwIikpIHsKQEAgLTYyNSwxNSArNjI1LDE0IEBACiAJCWdvdG8gb3V0aXJxOwogCX0KIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JcmV0ID0gbWlzY19yZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIndkdDogY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCi0JCQkJCQkJVEVNUF9NSU5PUiwgcmV0KTsKLQkJZ290byBvdXRyYnQ7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAid2R0OiBjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiAiCisJCQkJIm9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLCBURU1QX01JTk9SLCByZXQpOworCQkJZ290byBvdXRyYnQ7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKIAlpZiAocmV0KSB7CkBAIC02NDMsMjggKzY0MiwyNSBAQAogCQlnb3RvIG91dG1pc2M7CiAJfQogCi0JcmV0ID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICJXRFQ1MDAvNTAxLVAgZHJpdmVyIDAuMTAgYXQgMHglMDR4IChJbnRlcnJ1cHQgJWQpLiBoZWFydGJlYXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiV0RUNTAwLzUwMS1QIGRyaXZlciAwLjEwICIKKwkJImF0IDB4JTA0eCAoSW50ZXJydXB0ICVkKS4gaGVhcnRiZWF0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAogCQlpbywgaXJxLCBoZWFydGJlYXQsIG5vd2F5b3V0KTsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCXByaW50ayhLRVJOX0lORk8gIndkdDogRmFuIFRhY2hvbWV0ZXIgaXMgJXNcbiIsCisJaWYgKHR5cGUgPT0gNTAxKQorCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IEZhbiBUYWNob21ldGVyIGlzICVzXG4iLAogCQkJCSh0YWNob21ldGVyID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIikpOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCi0KLW91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiBvdXRtaXNjOgotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOworCWlmICh0eXBlID09IDUwMSkKKwkJbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwogb3V0cmJ0OgotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CiBvdXRpcnE6CiAJZnJlZV9pcnEoaXJxLCBOVUxMKTsKIG91dHJlZzoKIAlyZWxlYXNlX3JlZ2lvbihpbywgOCk7Ci0JZ290byBvdXQ7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogbW9kdWxlX2luaXQod2R0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMKaW5kZXggNjBlMjhkNC4uOTBlZjcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmICh3ZHQ5Nzdfc2V0X3RpbWVvdXQobmV3X3RpbWVvdXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl3ZHQ5Nzdfa2VlcGFsaXZlKCk7CiAJCS8qIEZhbGwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvem9ycm8vem9ycm8uYyBiL2RyaXZlcnMvem9ycm8vem9ycm8uYwppbmRleCBhMTU4NWQ2Li5kNDVmYjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3pvcnJvL3pvcnJvLmMKKysrIGIvZHJpdmVycy96b3Jyby96b3Jyby5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFpvcnJvIGJ1cyAqLwogICAgIElOSVRfTElTVF9IRUFEKCZ6b3Jyb19idXMuZGV2aWNlcyk7Ci0gICAgc3RyY3B5KHpvcnJvX2J1cy5kZXYuYnVzX2lkLCAiem9ycm8iKTsKKyAgICBkZXZfc2V0X25hbWUoJnpvcnJvX2J1cy5kZXYsICJ6b3JybyIpOwogICAgIGVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZ6b3Jyb19idXMuZGV2KTsKICAgICBpZiAoZXJyb3IpIHsKIAlwcl9lcnIoIlpvcnJvOiBFcnJvciByZWdpc3RlcmluZyB6b3Jyb19idXNcbiIpOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJaWYgKHJlcXVlc3RfcmVzb3VyY2Uoem9ycm9fZmluZF9wYXJlbnRfcmVzb3VyY2UoeiksICZ6LT5yZXNvdXJjZSkpCiAJICAgIHByX2VycigiWm9ycm86IEFkZHJlc3Mgc3BhY2UgY29sbGlzaW9uIG9uIGRldmljZSAlcyAlcFJcbiIsCiAJCSAgIHotPm5hbWUsICZ6LT5yZXNvdXJjZSk7Ci0Jc3ByaW50Zih6LT5kZXYuYnVzX2lkLCAiJTAyeCIsIGkpOworCWRldl9zZXRfbmFtZSgmei0+ZGV2LCAiJTAyeCIsIGkpOwogCXotPmRldi5wYXJlbnQgPSAmem9ycm9fYnVzLmRldjsKIAl6LT5kZXYuYnVzID0gJnpvcnJvX2J1c190eXBlOwogCWVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZ6LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvM2NvbS90eXBob29uLmJpbi5paGV4IGIvZmlybXdhcmUvM2NvbS90eXBob29uLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTgzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS8zY29tL3R5cGhvb24uYmluLmloZXgKQEAgLTAsMCArMSwyODE5IEBACis6MTAwMDAwMDA1NDU5NTA0ODRGNEY0RTAwMDIwMDAwMDAwOTAwMDAwMEI0Cis6MTAwMDEwMDAwMDAwRkZGRkNCOTlCMUQ0NENCOEQwNEIzMjAyRDRFRUU0Cis6MTAwMDIwMDA3MzdFMEIxMzlCQzBBRUY0NDAwMTAwMDBFOEZDMDAwMDlGCis6MTAwMDMwMDAwMDAwRkZGRjM5MDAwMEVBMDUwMDAwRUEwNDAwMDBFQUMyCis6MTAwMDQwMDAwMzAwMDBFQTAyMDAwMEVBMDEwMDAwRUEzMjAyMDBFQUNFCis6MTAwMDUwMDBDNTE0MDBFQTA3MDAyREU5MEUwMEEwRTEwMDEwMEZFMTMxCis6MTAwMDYwMDBEMDIwOUZFNTEyRkYyRkUxRkVGRkZGRUEwMTAwODBFMEI0Cis6MTAwMDcwMDAwNDIwODFFNDAxMDA1MEUxRkNGRkZGMUEwRUYwQTBFMTMyCis6MTAwMDgwMDAwMEEwQTBFMTBFQjBBMEUxMDAwMEEwRTNBODEwOUZFNTUxCis6MTAwMDkwMDAwMDAwODFFNUE0MTA5RkU1MDAwMDgxRTUwMTE2QTBFM0MyCis6MTAwMEEwMDAwMDAwOTFFNTAxMDA4MEUzMDAwMDgxRTVENzAwQTBFM0I2Cis6MTAwMEIwMDAwMEYwMjFFMTg4RDA5RkU1REIwMEEwRTMwMEYwMjFFMTIyCis6MTAwMEMwMDA3Q0QwOUZFNUQyMDBBMEUzMDBGMDIxRTE3NEQwOUZFNTUxCis6MTAwMEQwMDBEMTAwQTBFMzAwRjAyMUUxNkNEMDlGRTU5QjE0MDBFQjgwCis6MTAwMEUwMDBEMzAwQTBFMzAwRjAyMUUxNjBEMDlGRTU2MDAwOUZFNTMwCis6MTAwMEYwMDA2MDEwOUZFNTYwMjA5RkU1REJGRkZGRUI1QzAwOUZFNTY0Cis6MTAwMTAwMDA1QzEwOUZFNTAwMjBBMEUzRDdGRkZGRUI1NDAwOUZFNUM0Cis6MTAwMTEwMDA1NDEwOUZFNUQ0RkZGRkVCMEEwMEEwRTEwQkYwQTBFMTMzCis6MTAwMTIwMDBEMzEwQTBFMzAxRjAyMUUxRDRGRkZGRUIzQ0EwOUZFNTU5Cis6MTAwMTMwMDAxQUZGMkZFMUM2RkZGRkVBMTUyMUZGRkYwQzAwMTAwMDk4Cis6MTAwMTQwMDAxQzAwMTAwMDNDMzgwMDgwRkMzNzAwODBGQzNGMDA4MDIxCis6MTAwMTUwMDA3QzM0MDA4MDgwMEYwMDAwODAzMDAwODBBRERFQURERTlBCis6MTAwMTYwMDBCMEJCMDAwMDI0QUIyMDQwNDgyOTAwMDAyODA1MDA4MEQ3Cis6MTAwMTcwMDBCREJBMjE0MDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEE5Cis6MTAwMTgwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDA1ODU3MDAwMEMyCis6MTAwMTkwMDA4NjRCMDAwMDYwMDFGRkZGQjBCNTA3MUMxMjREMDAyNDI0Cis6MTAwMUEwMDAyODY4MDAyODFFRDAzODFDMTA0OTA0RjA3QkZEMjk2OEZGCis6MTAwMUIwMDBDMDQ2MDg2MDAwMjgxNUQwMzgwMTBENDk0MDE4MTkyM0ExCis6MTAwMUMwMDBEQjAxQzAxODQxNkI4MDI5MENEMjAxMzE0MTYzMjg2OEUyCis6MTAwMUQwMDBDMTY5QzA0NjI5NjAzOTA3NDE2MDA0NjJDNzYyQjBCQzhBCis6MTAwMUUwMDAwOEJDMTg0NzIwMUNGQUU3RTgxNzAwODBFRTA1MDAwMDVECis6MTAwMUYwMDBBMDFDMDA4MDAyNDkwQTY4QzA0NkMyNjEwODYwNzA0N0JFCis6MTAwMjAwMDBFODE3MDA4MDcwNDcwMDAwNzA0NzAwMDA3MDQ3MDAwMDRBCis6MTAwMjEwMDAwMDAwMEZFMTAwMTBBMEUxQzAxMDgxRTMwMUYwMjFFMTM2Cis6MTAwMjIwMDAxRUZGMkZFMTAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMTkyCis6MTAwMjMwMDBDMDAwODBFMzAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMThDCis6MTAwMjQwMDBDMDAwQzBFMzAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMTNDCis6MTAwMjUwMDA0MDAwODBFMzAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMUVDCis6MTAwMjYwMDA4MDAwMTBFMzgwMDA4MEUzMDBGMDIxRTEwMDAwMDAxMjM0Cis6MTAwMjcwMDAxRUZGMkZFMTAwMDA1MEUzMDAwMDBGRTE4MDAwQzAxM0RCCis6MTAwMjgwMDAwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTE4MDAwQzBFMzNDCis6MTAwMjkwMDAwMEYwMjFFMTFFRkYyRkUxOTEwMDAwRTAxRUZGMkZFMUExCis6MTAwMkEwMDAwMTIwODBFMDAxMDA4MEUwMUVGRjJGRTE4MEI1MDg0RkIzCis6MTAwMkIwMDA2NDI4MDREMzY0MjAzODYzMDAyMEMwNDMwM0UwMzg2MzFCCis6MTAwMkMwMDAwNDQ5MDVGMDAxRkI3ODYzQjg2MzgwQkMwOEJDMTg0NzlCCis6MTAwMkQwMDA2ODBFMDA4MDg4MTMwMDAwODBCNDEwNEIwMDIyMUY2QjUyCis6MTAwMkUwMDA2NDJGMDNEMjA5NjgwOTY4NDkwODAyRDIxMDFDODBCQzM3Cis6MTAwMkYwMDA3MDQ3MTkxQ0RCNkI0RjZCQkI0MjA1RDI0MDY4MDAwNDkyCis6MTAwMzAwMDAwMDBDMTgxOEM4NjNGMUU3NDE2ODA1NEIxOTQzNDE2MEI4Cis6MTAwMzEwMDAwNDQ4QzE2QjAxMzFDMTYzMDIyMEU4RTc2ODBFMDA4MDI4Cis6MTAwMzIwMDAwMDAwMDA4MDBDMkIwMDgwOTBCNTA3MUMxNTRDMDAyMEFECis6MTAwMzMwMDAyMTZCNjQyOTBCRDJCOTZFNDkwODA4RDMyMTZDQTI2QkRBCis6MTAwMzQwMDA5MTQyMDdEMkZBMUQzOTMyNTI4Qjg5MTgyMTY0OTBCQzMwCis6MTAwMzUwMDAwOEJDMTg0Nzc4NkEzOTZCQzA0NjQ4NjIzODZCMDJGMEFGCis6MTAwMzYwMDAyREZFMzgxQzAyRjBFOEZBMDEyMEJCMjMxQjAxRTExODI2Cis6MTAwMzcwMDBDODczMDU0OTBBNkMxMjE4MEE2NDA0NDk4QTZEMTIxODc4Cis6MTAwMzgwMDA4QTY1RTRFNzY4MEUwMDgwMEMyQjAwODBBNDJBMDA4MEI4Cis6MTAwMzkwMDA4MEI0MEE0OEMwNkQwMjIzMTg0MDA5NEEwMDIxMDAyODkxCis6MTAwM0EwMDAwM0QwRDE2MzExNjQ4MEJDNzA0NzA2NDgwNzY4N0IxQzhBCis6MTAwM0IwMDAwMzYwMEEyRkY3RDMwMTYwRjNFNzAwMDBBNDJBMDA4MDRFCis6MTAwM0MwMDA2ODBFMDA4MEUwMDEwMDgwNzA0NzAyMDQxMjBDMDAwQ0VGCis6MTAwM0QwMDAxMDE4MEEwNDEyMEMwOTBDNTExODA4MTgwMTBDMDVEMDQ5Cis6MTAwM0UwMDAwMTA0MDkwQzAwMEMwODE4MDEwQ0Y5RDEwMDA0MDAwQ0UwCis6MTAwM0YwMDA3MDQ3ODBCNDAwMjIwMDI5MThEMDRGMDg3QjFFMDAyRkMwCis6MTAwNDAwMDAwNkQwMDc4OEJBMTgwMjMwMUYxQzAxM0IwMDJGRjhEMTE0Cis6MTAwNDEwMDA0OTA4MDNEMzAwODgwMDA2MDAwRTgyMTgxMDBDMDVEMDhFCis6MTAwNDIwMDAxMDA0MDAwQzExMEM0MjE4MTAwQ0Y5RDExMDA0MDAwQzJGCis6MTAwNDMwMDA4MEJDNzA0NzgwQjU4Mzg5Qzc4OUZCMTgwNzhBRkIxODgxCis6MTAwNDQwMDA0NzhBRkIxODQwN0EwMDAyQzcxODM4MEMwNUQwMzgwNEQ4Cis6MTAwNDUwMDAwMDBDM0IwQ0M3MTgzODBDRjlEMTA4MUMxMTFDRkZGNzE1Cis6MTAwNDYwMDBDOEZGMDExQzM4MUNGRkY3QjBGRjgwQkMwOEJDMTg0NzUwCis6MTAwNDcwMDA5MEI1MDIyMzgyNjgxQTQwMDAyNzAwMkEwRkQwMEE0QTRBCis6MTAwNDgwMDA5MzY5MDEzMzkzNjEwQTY4OEI2ODlBMTgwMDY4MUMxODk1Cis6MTAwNDkwMDA1NzgxMDk2OTEwMUNGRkY3QUNGRkMwNDM2MDgxMzgxQzBECis6MTAwNEEwMDA5MEJDMDhCQzE4NDcwMDAwMEMyQjAwODA5MEI1MDQyM0JBCis6MTAwNEIwMDA4MjY4MUE0MDAwMjcwMDJBMTFEMDRBNjg1MjA5MEVEM0Q4Cis6MTAwNEMwMDAwOTRBMTM2QTAxMzMxMzYyQ0I2ODAyNjg5QzE4MDEyMzNFCis6MTAwNEQwMDA5QjA3MDgzQTFBNDMxMjY4MDBGMDJFRjgyMDgyMzgxQzU1Cis6MTAwNEUwMDA5MEJDMDhCQzE4NDcwMDAwMEMyQjAwODA5MEI1ODAyM0ZFCis6MTAwNEYwMDA4MjY4MUE0MDAwMjQwMDJBMTVEMDRBNjg5MjA5MTJEMzUzCis6MTAwNTAwMDAwQjRBRDM2OTAxMzNEMzYxQ0I2ODAyNjg5RjE4MDEyMzdBCis6MTAwNTEwMDA5QjA3MDgzQTFBNDMxMjY4MDBGMDBFRjgwMDI4MDBEMTMxCis6MTAwNTIwMDAwNDQ4QzA0NkY4ODAyMDFDOTBCQzA4QkMxODQ3MDAwMDU2Cis6MTAwNTMwMDAwQzJCMDA4MEZGRkYwMDAwQjBCNTE0MUMwNTFDMEYxQzI1Cis6MTAwNTQwMDAzODY5Qjk2ODQxMTgzODY4RkZGNzUzRkZDMDQzMDEwNEEwCis6MTAwNTUwMDAwOTBDMjAxQ0ZGRjczOUZGMDQxQ0I4Njg3OTY5NDAxOEEyCis6MTAwNTYwMDA2OTY4ODg0MjBDRDIyQTY4MTIxODA5MUExMDFDMDBGMDE3Cis6MTAwNTcwMDAwNUY5QzA0MzAxMDQwOTBDMjAxQ0ZGRjcyNkZGMDQxQ0U5Cis6MTAwNTgwMDBFMDQzMDAwNDAwMENCMEJDMDhCQzE4NDc4MEI1MDcxQzUxCis6MTAwNTkwMDBCODZCQzAwODFBRDNCODZBRjk2QjQwMTg3OTZDMDBGMEQwCis6MTAwNUEwMDBFREY4QzA0MzAxMDQwOTBDMEE0ODA3RDAyMDIzQjk2OUJCCis6MTAwNUIwMDAxOTQzQjk2MTAxNkIwMTMxMDE2MzA3RTBGRjIzMDEzMzg2Cis6MTAwNUMwMDBCOTY5MTk0M0I5NjE0MTZBMDEzMTQxNjIwMDIwODBCQ0I3Cis6MTAwNUQwMDAwOEJDMTg0NzBDMkIwMDgwODBCNTA3MUNCODZCNDEwOTdDCis6MTAwNUUwMDAxQ0QzQzAwODFBRDNGODFEMzkzMDAwN0IwNjI4MTVEMTVBCis6MTAwNUYwMDAzODFDMDBGMDUzRjgwMTFDMEE0ODA3RDA0MDIzQjk2OUExCis6MTAwNjAwMDAxOTQzQjk2MTgxNkIwMTMxODE2MzA3RTAwMTIzOUIwMkNBCis6MTAwNjEwMDBCOTY5MTk0M0I5NjFDMTZBMDEzMUMxNjIwMDIwODBCQzY2Cis6MTAwNjIwMDAwOEJDMTg0NzBDMkIwMDgwQjBCNTA3MUNCODZCODEwOUJCCis6MTAwNjMwMDAyQ0QzQzAwODJBRDNGODFEMzkzMDAwN0IxMTI4MjVEMUNFCis6MTAwNjQwMDBCODZBMzk2QzQwMTgwMTIzOUIwNzA2MzAxODQzMDA2OENDCis6MTAwNjUwMDAwNTA0MkQwQzBGNEMxMUQwMzgxQzAwRjAxRkY4MDAyODk5Cis6MTAwNjYwMDAwQ0QwQTg0MjAyRDEwQzRCOTg0MjA3RDA4MDIzQjg2OTI1Cis6MTAwNjcwMDAxODQzQjg2MTYwNkIwMTMwNjA2MzA3RTAwMTIzNUIwMkRGCis6MTAwNjgwMDBCODY5MTg0M0I4NjFBMDZBMDEzMEEwNjIwMDIwQjBCQzBDCis6MTAwNjkwMDAwOEJDMTg0NzBDMkIwMDgwRkZGRjAwMDBGMEI1RkZCMDJFCis6MTAwNkEwMDA5OUIwMDQxQ0UwNkI2MTZDMDkxODAzQUE4NTE4QTM2QTUxCis6MTAwNkIwMDAwMDIwOEEwODAxMzI5NzkyMDdEMDgyMDA5RjU4MDNBRTJCCis6MTAwNkMwMDBCNzUwOTc5QTAxMzA4MjQyRjdEODYwNkEwMTIzOUIwNzlFCis6MTAwNkQwMDAwNDMwMTg0MzAwNjhDMDQ2MDI5MDAyQUYzRjg4MDNBODY4Cis6MTAwNkUwMDBGRkY3ODdGRUMwNDMwMTA0MDkwQzM4MUNGRkY3NkRGRUJECis6MTAwNkYwMDAwNzFDRTA2QkExNkM0MDE4NjE2QTAxMjM5QjA3MDgzMTVECis6MTAwNzAwMDAxOTQzMDk2OEMwNDYwMTkxMDFBOTA5ODgwMTMxODg0MjRECis6MTAwNzEwMDAwQ0QyQTI2QTEyMTgwOTFBMTAxQzAwRjAyRkY4QzA0MzVDCis6MTAwNzIwMDAwMTA0MDkwQzM4MUNGRkY3NTBGRTA3MUNBODg5RTk4OTUxCis6MTAwNzMwMDAwODE4Mjk4QTA4MTg2OThBMDgxODY5N0EwOTAyMDgxOEE1Cis6MTAwNzQwMDBBMTZDNjI2Qzg5MUEwQTA0MTIwQzExMDIxMjBBMTE0MzdDCis6MTAwNzUwMDAwOTA0MDkwQzA5MTgwODBDMDVEMDA4MDQwMDBDMDkwQzQwCis6MTAwNzYwMDA0MTE4MDgwQ0Y5RDEzODFDRkZGNzJGRkVDMDQzMDAwNEQ0Cis6MTAwNzcwMDAwMDBDN0ZCMDE5QjBGMEJDMDhCQzE4NDdCMEI0MDAyMjIwCis6MTAwNzgwMDAwMDI5MkVEMDgzMDc5QjBGREMwMDQ3MTgwNDI1RUYxQkEwCis6MTAwNzkwMDBCRjA3QkYwRkZGMDA4MDA4ODAwMDU5MTgwMzMxODkwODg4Cis6MTAwN0EwMDA0RDFFMDJDOEUxNDBBMTQwNkIxRTAwMkQwOUQwMEMwNDczCis6MTAwN0IwMDAyNDBDQTIxODA5MEM4QTE4MDJDODFDMUMwMTNCMDAyQzJFCis6MTAwN0MwMDBGNUQxQjk0MDA4MUNGODQwMDEwNDA5MEM4OTE4MDAwQzQ3Cis6MTAwN0QwMDA0MjE4MTAwQzA1RDAxMDA0MDAwQzExMEM0MjE4MTAwQzFCCis6MTAwN0UwMDBGOUQxMTAwNDAwMENCMEJDNzA0NzAwMDA5MEI0MDAyMDk4Cis6MTAwN0YwMDAwMTI3MTE0OTQyMDAxMjE4RDIwMDUzMTg5QzY4MDEyM0E2Cis6MTAwODAwMDA5QjA3MjM0MzFCNjgxQjAzMUIwQjhBNTgxMjAzMTIwQjA1Cis6MTAwODEwMDA5MzQyMENEMTAxMzAwNDI4RUNEMzA4NDhDMDZBMDEwMzhDCis6MTAwODIwMDAwOTBCMDc0ODAwNkYwMDAzMDAwQjgxNDIwMkQwMzgxQ0ZGCis6MTAwODMwMDA5MEJDNzA0NzAwMjBGQkU3QTgwMzAwODAwMDQwMTQ0MEY0Cis6MTAwODQwMDA2ODBFMDA4MDk4QjQxNDRBQzA0NjAwOTI4MzAwMTM0ODkyCis6MTAwODUwMDBDMDU4MDcwMzNGMEIxMjQ4QzA1ODAyMDMxMjBCMTE0ODNGCis6MTAwODYwMDBDMDU4MDAwMzAwMEIxMDRDRTQ1ODAxMjM5QjA3MjM0MzlFCis6MTAwODcwMDAxQjY4OUIwMENDMDAwMTIxOTg0MjAxRDEwODFDMDlFMEIzCis6MTAwODgwMDA5ODQyMDNEOTEwMUFEQTFCODAxODAwRTAxODFBODQ0MjIzCis6MTAwODkwMDBGNEQzMDAyMDk4QkM3MDQ3NTU1NTU1NTUyMDA0MDA4MDZFCis6MTAwOEEwMDAyODA0MDA4MDA4MDQwMDgwMTgwNDAwODA4MEI0MTMwNDI5Cis6MTAwOEIwMDAwMEQwMDEzQTgwMDAwQjFDMTM0OTBGNThDMDQ2M0I2MDIyCis6MTAwOEMwMDAwQjU4QzA0NjVBNjAwQTU4MDgzMjEwNEIxQjU4OUE0MkJGCis6MTAwOEQwMDAwMUQzMEY0QTEyNTgwRjRCMUY1ODAxMjM5QjA3M0I0MzZDCis6MTAwOEUwMDAxQjY4OUIwMDE3MDMzRjBCOUY0MjA2RDEwQTQ4QzE2ODUzCis6MTAwOEYwMDAwMTMxQzE2MDAxMjA4MEJDNzA0NzA4NEIxQjU4QzA0NkM1Cis6MTAwOTAwMDAxQTYwMEE1MDAwMjBGNkU3MDgwNDAwODAyODA0MDA4MERFCis6MTAwOTEwMDAyMDA0MDA4MDE4MDQwMDgwQTA4MjIwNDAxMDA0MDA4MDgxCis6MTAwOTIwMDBGRjVGMkRFOTQ4RkVGRkVCMDFCNkEwRTMwMUIxOEJFMkNBCis6MTAwOTMwMDAwMjhBQTBFMzAxN0FBMEUzMDFBOUEwRTMwMTU2QTBFM0EzCis6MTAwOTQwMDBDODYwOUZFNUM4OTA5RkU1MTQ0MDlCRTUwMDAwNTRFMzE0Cis6MTAwOTUwMDAyQzAwMDAwQTAzMEExNEUzMTEwMDAwMEEwQzAwOTZFNUJCCis6MTAwOTYwMDAwMDAwNTBFMzIxMDAwMDBBMDEwQTE0RTMwNTAwMDAwQTE4Cis6MTAwOTcwMDAxQzAwOTZFNTAxMEFDMEUzMUMwMDg2RTUxQzAwODVFNTI1Cis6MTAwOTgwMDAxNDcwODVFNTA2MDAwMEVBMDIwQTE0RTMwNDAwMDAwQTc4Cis6MTAwOTkwMDAxQzAwOTZFNTAyMEFDMEUzMUMwMDg2RTUxQzAwODVFNTA0Cis6MTAwOUEwMDAxNDgwODVFNTAxMDkxNEUzMDQwMDAwMEExQzAwOTZFNUEzCis6MTAwOUIwMDAwMTA5QzBFMzFDMDA4NkU1MUMwMDg1RTUxNEEwODVFNTVGCis6MTAwOUMwMDAwMjAwMTRFMzQwMDAwMDFCMDEwMDE0RTM1NDAwMDAxQjZDCis6MTAwOUQwMDAwMjBCMTRFMzY3MDAwMDFCMDEwQjE0RTMyMDAwMDAxQjUzCis6MTAwOUUwMDAxODAwOTlFNTAxMDA4MEUyMTgwMDg5RTVENUZGRkZFQUNCCis6MTAwOUYwMDAxQzAwOTZFNTAxMEFDMEUzMUMwMDg2RTUxQzAwODVFNUE1Cis6MTAwQTAwMDAxNDcwODVFNUUxRkZGRkVBRkY1RkJERTgwNEYwNUVFMkY4Cis6MTAwQTEwMDA2ODBFMDA4MDA4ODMyMDQwMTAxMDFGRTUxNDMwOTFFNTE3Cis6MTAwQTIwMDAwMDIwQzNFMTE0MjA4MUU1MDExNkEwRTMwQzIwODFFNTNDCis6MTAwQTMwMDAwQjEyQTBFMzAwMDA4MUU1MTgxMDlGRTVCMDI0RDFFMTdFCis6MTAwQTQwMDAwMTIwODJFMkIwMjRDMUUxM0MyMDkxRTUwMDAwODJFMTc2Cis6MTAwQTUwMDAzQzAwODFFNTFFRkYyRkUxQTA4MjIwNDBGRkZGRkZFQTVFCis6MTAwQTYwMDBGRUZGRkZFQTAxMEJBMEUzMDExNkEwRTMxNDAwODFFNUZECis6MTAwQTcwMDAwMDFBODFFMTI0MjA5MUU1NzAwMDFGRTUwMDAwMDAwMENDCis6MTAwQTgwMDAyNDIwODBFNTI4MTA5MUU1MDAwMDAwMDAyODEwODBFNTcyCis6MTAwQTkwMDAyQzIwOTBFNTAxMjA4MkUyMkMyMDgwRTUzRjAwMDFFMjNECis6MTAwQUEwMDAzRjAwNTBFMzFFRkYyRjExMTgwMDlGRTUwMDEwOTBFNTU2Cis6MTAwQUIwMDAwMTEwODFFMjAwMTA4MEU1MDIxOEEwRTMwQjAyQTBFMzIwCis6MTAwQUMwMDAwMDEwODBFNTFFRkYyRkUxMzAwNDAwODAwMTA2QTBFMzQ2Cis6MTAwQUQwMDAwMTAxODBFMjAwMTA5MEU1MDEwODExRTMwQjEwQTBFMzkyCis6MTAwQUUwMDAwMjE5ODFFMjA1MDAwMDFBMDAyMDkwRTU0MjI4QjBFMUQ5Cis6MTAwQUYwMDAwNTAwMDAxQTAwMDA5MEU1MDIwQzEwRTMwMjAwMDAwQTU1Cis6MTAwQjAwMDAwNjA3QTBFMzRDMTE4MEU1MDMwMDAwRUEwQzAwOUZFNTE2Cis6MTAwQjEwMDAwMDAwMDAwMDQwMTA4MEU1RkZGRkZGRUFGRUZGRkZFQTUzCis6MTAwQjIwMDAwMDAwMDA4MDAxMDZBMEUzMDEwMTgwRTIwMDEwOTBFNUQyCis6MTAwQjMwMDAwMTA4MTFFMzBDMTBBMEUzMDIxOTgxRTIwNTAwMDAxQTdDCis6MTAwQjQwMDAwMDIwOTBFNTQyMjhCMEUxMDUwMDAwMUEwMDAwOTBFNTgxCis6MTAwQjUwMDAwMjBDMTBFMzAyMDAwMDBBMDYwN0EwRTM0QzExODBFNTM2Cis6MTAwQjYwMDAwMzAwMDBFQTRDMDAxRkU1MDAwMDAwMDA0MDEwODBFNTkzCis6MTAwQjcwMDBGRkZGRkZFQUZFRkZGRkVBMDIxQkEwRTMwMTA2QTBFMzdFCis6MTAwQjgwMDAxNDEwODBFNTFFRkYyRkUxODAyMTFGRTUxNDMwOTJFNTRGCis6MTAwQjkwMDAwMDAwMDAwMDAwMzA4MEU1MUMwMDkyRTUwMDAwMDAwMDJECis6MTAwQkEwMDAwMDAwODFFNTAwMTBBMEUzMTQxMDgyRTUwMTA2QTBFMzM3Cis6MTAwQkIwMDAxQzEwODJFNTBDMTA4MEU1MUMxMDkyRTUwMDAwMDAwMDdFCis6MTAwQkMwMDAxQzEwODBFNTFFRkYyRkUxQzAyMTFGRTUwMDAwMDAwMDgyCis6MTAwQkQwMDAxQzEwODJFNTAxMTZBMEUzMTQwMDgyRTUwQzAwODFFNUZCCis6MTAwQkUwMDAxQzAwOTJFNTAwMDAwMDAwMUMwMDgxRTUxRUZGMkZFMUMzCis6MTAwQkYwMDA4MEI1MEYxQzM4MUMwMEYwMTdGODAwMjgwMkQwMzgxQ0Y0Cis6MTAwQzAwMDAwMEYwOTJGODAwMjA4MEJDMDhCQzE4NDc4MEI1MEYxQzhCCis6MTAwQzEwMDAzODFDMDBGMDA5RjgwMDI4MDJEMDM4MUMwMEYwODRGOEQ1Cis6MTAwQzIwMDAwMDIwODBCQzA4QkMxODQ3RjBCNDA3NjgzQTc4RDIwN0E3Cis6MTAwQzMwMDBEMjBGMDAyNDAwMkEwM0QwRkYyMjAxMzI0MjYwMDBFMERDCis6MTAwQzQwMDA0NDYwM0E3QjdCN0IxQjAyMUE0MzgxMkEwOEQxMDEyMzMzCis6MTAwQzUwMDA1QjAyNDI2ODFBNDM0MjYwMDQyMkJGMTg4MjYwMDBFMENGCis6MTAwQzYwMDA4NDYwM0E3QjdCN0IxQjAyMUE0MzA4MkEwNkQxMDYyMzQ5Cis6MTAwQzcwMDA0MTY4MTk0MzQxNjA4MTY4MEUzMTNDRTBDMTIzREIwMENCCis6MTAwQzgwMDA5QTQyMDNEMTQxNjgyNDRCMTk0MzNFRTAyMzRCOUE0MkQ4Cis6MTAwQzkwMDAwNEQxMDEyMzFCMDM0MTY4MTk0MzM2RTAxMzAyMTIwQUYxCis6MTAwQ0EwMDAxMjA2MTIwRTFBNDMxMjA0MTIwQzJFM0ExQzRCOUE0MkQwCis6MTAwQ0IwMDAyREQ4MDEyNTQyNjgxNTQzNDU2MEJBN0JGQjdCMUIwMjlBCis6MTAwQ0MwMDAxQTQzMTg0QjlBNDIyMkQxRkIxRDA5MzM0NENCOUIwNzkwCis6MTAwQ0QwMDBEQjBFREE0MDVCNDIyMDMzOUU0MDE2NDMwMzJFMThEMUQwCis6MTAwQ0UwMDAzOTdEN0I3RDFCMDIxOTQzMDgyOTA3RDEwNDIxMjk0MzQzCis6MTAwQ0YwMDA0MTYwODE2ODE2MzE4MTYwMDEyMTBBRTBDMTIzREIwMDc3Cis6MTAwRDAwMDA5OTQyMDREMTAxMjE4OTAzMjk0MzQxNjAwMEUwODQ2MEI0Cis6MTAwRDEwMDAwMDIxMDgxQ0YwQkM3MDQ3MDI0MDAwMDA4MTgwMDAwMEU4Cis6MTAwRDIwMDBBRTA1MDAwMEFBQUEwMDAwODBCNDQyNjhEMTA4M0ZEM0YzCis6MTAwRDMwMDAwMTY4ODM2ODU5MTgwMjM5OEY3ODNGMDczRjBGMDUyRkU0Cis6MTAwRDQwMDAwM0QxREExRDBEMzJDMjYwMDVFMEJGMDBEQjE5QzM2MEJDCis6MTAwRDUwMDAwODIzMUE0MzQyNjA4QTc4MTIwNzEyMEY5MjAwMDI2MTM4Cis6MTAwRDYwMDAwQTc5NEI3OTFCMDIxQTQzMTMwMjEyMEExMjA2MTIwRTU5Cis6MTAwRDcwMDAxQTQzMTIwNDEyMEM0MjYxQ0E3QTA2MkEwM0QxMTAyM0M0Cis6MTAwRDgwMDA0MjY4MUE0MzEwRTAxMTJBMDNEMTIwMjM0MjY4MUE0MzEzCis6MTAwRDkwMDAwQUUwMzMyQTAzRDE0MDIzNDI2ODFBNDMwNEUwMzIyQThFCis6MTAwREEwMDAwM0QxODAyMzQyNjgxQTQzNDI2MEM5N0FDMDQ2MDE3NjYzCis6MTAwREIwMDA4MEJDNzA0NzBBNzhDMDQ2MDI2MDRCNzgxQjAyMUE0MzE5Cis6MTAwREMwMDAwMjYwOEI3ODFCMDQxQTQzMDI2MEM5NzgwOTA2MTE0MzNDCis6MTAwREQwMDAwMTYwNzA0NzgwQjUwNzFDNDg2ODgwMDkyNkQzQjg2QTRGCis6MTAwREUwMDBDOTY4NDAxODAxMjM5QjA3MDIzMDE4NDMwMDY4MDAwNEJCCis6MTAwREYwMDAwMDBDMTEyMzlCMDI5ODQyMThEMTc4NkEzOTZCQzA0NkM3Cis6MTAwRTAwMDA0ODYyMzg2QjAyRjBEQUY4MzgxQzAxRjA5NUZEMDEyMEQ5Cis6MTAwRTEwMDAwNzQ5QzA0NkM4NzMwNzQ5NEE2QzEyMTg0QTY0MDY0OTE0Cis6MTAwRTIwMDA4QTZEMTIxODhBNjU4MEJDMDhCQzE4NDcwMDIwRkFFNzUyCis6MTAwRTMwMDAxODFBMDA4MDBDMkIwMDgwQTQyQTAwODA4MTA3MTlEMDhBCis6MTAwRTQwMDA4MDA4ODAwMDAxMjM5QjA3MDExRDE4NDMwMDY4MTk0Mzk3Cis6MTAwRTUwMDAwOTY4MDIwMjEyMEUxMjA2MDAwQUZGMjMxQjA0MTg0MDQyCis6MTAwRTYwMDAxMDQzMEEwQTEyMDYxMjBFMTA0MzA5MDIxQjBBMTk0MDA3Cis6MTAwRTcwMDAwODQzNzA0NzAxMjM5QjA3MTg0MzAwNjgwMTA2MDIwMkRDCis6MTAwRTgwMDBGRjIzMUIwNDFBNDAxMTQzMDIwQTFCMEExQTQwMTE0Mzk0Cis6MTAwRTkwMDAwMDBFMDg0M0VERTcwMDAwRjBCNTA0MjM4MTZCMTk0MDE0Cis6MTAwRUEwMDAwMDIyMDAyOTQ2RDBDNzFEMzkzNzM5N0IzMzI5MDFEMEFDCis6MTAwRUIwMDAzMjI5M0ZEMTAxNkJDMDQ2NEE2NUM0MUQyRDM0Q0QxRDdBCis6MTAwRUMwMDAyRDM1MDAyMjkzMDBFNjU4QzA0NkVFNTAwMTMyMDcyQTI1Cis6MTAwRUQwMDBGOEQzODI2QUMwNDY0QTYzODI2QUMwNDY4QTYyN0E4QkM1Cis6MTAwRUUwMDBDQjFEMzkzMzVBODM0MDZBQzA0NjQ4NjIxMjQ4MDEyN0Y1Cis6MTAwRUYwMDA0MjY4MDAyQTEwRDFDMjY4MDAyQTEzRDE0MjY5MDAyQTMwCis6MTAwRjAwMDAwREQxMDE2MUMxNjAwMTZBMDIyOTAyRDMyMDMwMDc3MTRECis6MTAwRjEwMDAwQ0UwMDBGMDEzRjgwOUUwQzI2ODAwMkEwMkQxMDE2MTc4Cis6MTAwRjIwMDBDMTYwMDNFMDAyNjlDMDQ2NTE2NTAxNjEzODFDRjBCQzM0Cis6MTAwRjMwMDAwOEJDMTg0NzEwMUNGQUU3NkMwNjAwODA4MEI1MUU0OUYzCis6MTAwRjQwMDAwMDIyQ0I2ODAwMkIzNEQwQzgxREY5MzA4MzYyQ0I2OEY3Cis6MTAwRjUwMDA5QjZBQzA0NkMzNjJDRjY5N0IwMERGMTk3RjAyMTc0QkQzCis6MTAwRjYwMDBGRjE4RkYzNzY1Mzc4MzYzMDc2M0NCMURGRjMzNUEzM0ExCis6MTAwRjcwMDAxQTcyQ0I2OTAwMkIwMUQwQ0E2MTAxRTAwMTIzQ0I2MTU5Cis6MTAwRjgwMDAwRjFDQzk2ODQ5NkEwOTg5MDEzMTQxNjNGODFERkYzMEE2Cis6MTAwRjkwMDAzQTMwNDI2MDAyODI4MjYwQzI2MDM4MUMwMEYwQ0VGQUIxCis6MTAwRkEwMDAzODZBMDEzMDM4NjIzODFDMDBGMDBBRjg4MEJDMDhCQzhFCis6MTAwRkIwMDAxODQ3MTAxQ0ZBRTcwMDAwNkMwNjAwODBBQ0FCMjA0MDFDCis6MTAwRkMwMDBGMEI1MDcxQ0Y5MURGOTMxODg2QUMyMUQyRDMyMDEyM0M1Cis6MTAwRkQwMDA5QjA3MDgzMjFBNDNDODZBMTI2ODEyMDQxMjBDODAxODYwCis6MTAwRkUwMDA4Mjc5QzM3OTFCMDIxQTQzMTMwMjEyMEExMjA2MTIwRUU3Cis6MTAwRkYwMDAxQTQzMTIwNDEyMEMwMjM4OTIwNDkyMEMwMDI2MjU0RDVBCis6MTAxMDAwMDBFQzFERkYzNDNBMzQwMDJBMDREMDIwOEEwMTIzOUIwMkNECis6MTAxMDEwMDAxODQzMkJFMDAxMjM5QjA3QzIxRDBEMzIxQTQzMTI2OEFGCis6MTAxMDIwMDAxMjA0MTIzMDE4NDMwMDY4MDAwNDAwMEMxMDQzMDMxQzIzCis6MTAxMDMwMDBGODFERkYzMDRBMzA4Mjc4Qzg2QjE5MUMwMkYwMDJGOEE0Cis6MTAxMDQwMDAwMDI4MDREQTIwOEFGRjIzMDEzMzE4NDMwRUUwRjkxRDNCCis6MTAxMDUwMDBGRjMxM0EzMTA4NjAwMTA0MDkwQzM4MUMwMEYwMUNGODFCCis6MTAxMDYwMDAwMDI4MTREMTIwOEEwMTIzNUIwMjE4NDMyMDgyMjE4QUEwCis6MTAxMDcwMDAzODFDMDBGMEEyRkJFODY4MDEyMzlCMDc1NDMwMTg0MzlBCis6MTAxMDgwMDAwMDY4QzA0NkU4NjAzMDFDRjBCQzA4QkMxODQ3MDEyMDZFCis6MTAxMDkwMDBGQUU3MDAwMDZDMDYwMDgwRjhCNTA3MUNGQzFERjkzNDY3Cis6MTAxMEEwMDBBMDZCQTY2QUM1MUQwRDM1Mzg0OEMwNkE0QjAwNTkxODlCCis6MTAxMEIwMDA0OTAxNDIxODAxMjA4MDA3MTA0MzAwNjgwMDA0MDAwQzE5Cis6MTAxMEMwMDAwMDkwMDEyMzlCMDdEMDFEMDUzMDE4NDMwMDY4MzgxQzkxCis6MTAxMEQwMDAyOTFDMDBGMEMyRkFBODg4NDEwNzAxRDAwMDIwNTFFMDg1Cis6MTAxMEUwMDAyOTg5MDkxODYwNkI4MTQyRjhEODY5ODlFQTg4ODkxOENBCis6MTAxMEYwMDA4MTQyRjNEODAwOTgwMTI4MjVEMUUwNkFGMTZCNDAxOEFECis6MTAxMTAwMDA3MTZDRkExRENEMzIwMUYwMzNGOUZBMURGRjMyM0EzMjFCCis6MTAxMTEwMDBFMDZBNTE2OTQwMThDMzFEMDMzMzAwMjA4MTAwNUU1ODA2Cis6MTAxMTIwMDBDOTE5RkYzMTAxMzE0RTYxMDEzMDA0MjhGNkQzRTA2QTVDCis6MTAxMTMwMDA1MTY5NDAxOEMxMUQwNTMxMDAyMDAwMjI0MzAwQ0E1MkU4Cis6MTAxMTQwMDAwMTMwMDYyOEZBRDMyOTFDMTE0QTAwMjBGRkY3QUVGQjE0Cis6MTAxMTUwMDAwMTIyNTIwNDYwNkIwMjQzMDEyMDIxNkJGRkY3QTZGQkMyCis6MTAxMTYwMDAwMTIyNTIwNDYwNkIwMjQzMDAyMEUxNkFGRkY3OUVGQkZDCis6MTAxMTcwMDBBMTZCMDg0QTAxMjBGRkY3OTlGQjAzMjAwNjQ5QzA0NkVFCis6MTAxMTgwMDA0ODYyMDEyMEY4QkMwOEJDMTg0NzAwMDA0QzJBMDA4MEM3Cis6MTAxMTkwMDA1NDAwMDMwMDE0MDAwRjAwNkMwNzAwODBGMEI1OERCMDAwCis6MTAxMUEwMDAwMDIwQjU0QUQ1MURGOTM1Njg2MjAxMjAwMDA1QjM0OTE0Cis6MTAxMUIwMDBDMDQ2MDg2MEE4NkFDNDFEMkQzNEIxNDhDMDZBRDcxRDU2Cis6MTAxMUMwMDBGRjM3M0EzNzM5Njg0QjAwNTkxODQ5MDE0MDE4MDEyMzU1Cis6MTAxMUQwMDA5QjA3QzExRDA1MzExOTQzMDk2ODA4MzAxODQzMDA2ODkxCis6MTAxMUUwMDBDMDQ2MDk5MEZGMjMxQjAyMTg0MDAwMEEwQTkwMEE5ODgzCis6MTAxMUYwMDBBNDRFMDEyODU5RDEyODZCQTI2ODgwMThBMjRBMjE2OUZGCis6MTAxMjAwMDAwOTA0MDkwQzAxRjAyNkY5Mjg2Qjc5Njk0MDE4QzExRDAxCis6MTAxMjEwMDAwNTMxMDAyMDgyMDA5ODRCRDMxOEZGMzMwMTMzNUI2OUZFCis6MTAxMjIwMDBDMDQ2OEI1MDAxMzAwNDI4RjREMzAwMjAzMTFDODIwMENBCis6MTAxMjMwMDA1NjE4MDEyMzlCMDczMzQzMUI2ODA0QUVCMzUwMDEzMDlCCis6MTAxMjQwMDAwMzI4RjREMzAwMjAwODkwOTA0OTQyMDA4QjVBQjI1QUU4Cis6MTAxMjUwMDA5MzQyMTNEMDhFNDhDMTg5MDEzMUMxODFCODY4MDAyOEZBCis6MTAxMjYwMDAwM0QxMzg4QTEwMjMxODQzNzFFMDM4OEE0MDIzMTg0Mzg5Cis6MTAxMjcwMDA2REUwMDBGMDExRjkwMUYwNjdGRkY1RTAwMTMwMDYyODlDCis6MTAxMjgwMDBFM0QzMDg5ODAwMjgwQ0QxQjg2ODQxMUNCOTYwMDAyODQ1Cis6MTAxMjkwMDAwM0QxMzg4QTAxMjMxODQzMDJFMDM4OEEwNDIzMTg0MzEzCis6MTAxMkEwMDAzODgyNzg2ODAxMzA3ODYwNjJFMDBBOTgwMjI4NUZEMTVECis6MTAxMkIwMDAwOTk4NDAwQzczRDMwMTIzOUIwN0UwMUQwMTMwMTg0M0FDCis6MTAxMkMwMDAwMDY4RTExRDBEMzExOTQzMDk2ODQwMTgwQzM4MDAwNDBECis6MTAxMkQwMDAwMDBDMDAyMThBMDA2QjRCRDYxODAxMjM5QjA3MzM0Mzc3Cis6MTAxMkUwMDAxQjY4MDRBRUIzNTAwMTMxMDMyOUYzRDMwMDIxODMxRUUwCis6MTAxMkYwMDAwQzkzNjg0QTE2NkJDMDQ2MEI5NjhBMDAwQzlCOUIxODkxCis6MTAxMzAwMDAwQjlFOUUxOTAxMjM5QjA3MzM0MzFCNjg2RTQ2QjM1MDA3Cis6MTAxMzEwMDAwMTMxMDQyOUYxRDM2OTQ2OEIxQzA3OTMwMDIxMDg5MTAwCis6MTAxMzIwMDAwNEFFNEEwMDA3OUI5QjVBQjI1QTkzNDIxMUQwNTg0OEM4Cis6MTAxMzMwMDBDMTg5MDEzMUMxODFGODY4NDExQ0Y5NjAwMDI4MDNEMURECis6MTAxMzQwMDAzODhBMjAyMzE4NDMwMkUwMzg4QTgwMjMxODQzMzg4MkUxCis6MTAxMzUwMDA4RkU3MDEzMTA2MjlFNEQzMDg5OTAwMjkwREQxRjk2OEY2Cis6MTAxMzYwMDA0QTFDRkE2MDAwMjkwNEQxMzk4QTAyMjMxOTQzMDNFMDk4Cis6MTAxMzcwMDAwQ0UwMzk4QTA4MjMxOTQzMzk4MjI5NkIwODE4MDEyM0E0Cis6MTAxMzgwMDA5QjA3MDEzODE4NDMwMDY4QzA0NjIwNzYwMTIzOUIwNzVECis6MTAxMzkwMDBFMDFEMTEzMDE4NDMwMDY4MDEwNjA5MEUwMEUwMTlFMDU1Cis6MTAxM0EwMDAzNTQ4MkE2QkMwNDZFQTYyMDQyOTRGRDEwMTIxQzYxRDg3Cis6MTAxM0IwMDBGRjM2NUEzNjMxNzIwQTk5MDIyOTFFRDEwOTk5MDkwRTRGCis6MTAxM0MwMDA0OTA2MUFEMUUxMUQwNTMxMTk0MzA5NjgwOTA2MDkwRUJDCis6MTAxM0QwMDAwODM5MUFFMDAxMjM5QjA3RTAxRDAxMzAxODQzMDA2ODFCCis6MTAxM0UwMDBFMTFEMEQzMTE5NDMwOTY4NDAxODAwMDQwMDBDRjk2ODJCCis6MTAxM0YwMDA0QTFDRkE2MDAwMjlCQ0QxQjZFNzAxMjM5QjA3RTExRDE2Cis6MTAxNDAwMDAwNTMxMTk0MzA5NjgwOTA2MDkwRUExNjBFODZBQzA0NjVBCis6MTAxNDEwMDAyMDYwMjAxQ0ZGRjc4OEZDMjA3RTMzMjgwMUQwMzIyODcyCis6MTAxNDIwMDAxMUQxMDEyMTE0NENDMDQ2Rjk2MEI5NjAyMDFDMDBGMEI0Cis6MTAxNDMwMDA4NUY4Mjg2QkE5NkFDMDQ2ODg2MjIwMUNGRkY3QzBGREFBCis6MTAxNDQwMDAwMDI4MTFEMTBFRTAwMDIwMzA3MjExRTAzMzI5MDFEMEM0Cis6MTAxNDUwMDAzMjI5MEREMTA3MUMwMEYwNzFGODM4MUNGRkY3QjBGREUwCis6MTAxNDYwMDAwMDI4MDFEMTAxRjA3MEZFMERCMEYwQkMwOEJDMTg0Nzk3Cis6MTAxNDcwMDAwMEYwMTJGOEY2RTcwMDAwNkMwNjAwODAwMDAwMDBCMEYzCis6MTAxNDgwMDA0QzJBMDA4MEFDQUIyMDQwNDAwNzAwODA4MjA3MDA4MERGCis6MTAxNDkwMDAwQzJCMDA4MDZDMDcwMDgwRjBCNTI1NDg0MTY4MDEzMUI1Cis6MTAxNEEwMDA0MTYwMjQ0RkY5MURGOTMxMDAyNDg4NkFGQTY4QzA0NjZBCis6MTAxNEIwMDA5NDYxMDQyMkZCNjhDMDQ2REE2MDEwMjJGQjY4QzA0NkQzCis6MTAxNEMwMDA5QTYxRkExREZGMzI1QTMyMTM3QTFCNEEwMDJCMEJEMDU1Cis6MTAxNEQwMDAxNThBMkUwQTM2MDIzMzIzMkI0MDlCMDAxRTQzQ0MyMzUxCis6MTAxNEUwMDAyQjQwOUIwODMzNDMxMzgyMTI4QUZCNjhDMDQ2REE4MzgxCis6MTAxNEYwMDA0QTZCRkI2OEMwNDZEQTgxMEE2QkMwNDY4MjYyQzQ2MkVFCis6MTAxNTAwMDBDMzFEMzkzMzRBNkJDMDQ2NUE4MzA0MjMwMjY4MUE0MzA5Cis6MTAxNTEwMDAwMjYwODg2QTAxRjAzMkZBRjg2ODAxMjM5QjA3NTQzMEIwCis6MTAxNTIwMDAxODQzMDA2OEMwNDZGODYwRjBCQzA4QkMxODQ3MDAwMENCCis6MTAxNTMwMDAwQzJCMDA4MDZDMDYwMDgwQUMwNzAwODA4MEI1QzExREJDCis6MTAxNTQwMDBGOTMxOEE2QTAxMjM5QjA3RDExRDQ1MzExOTQzMDk2ODg2Cis6MTAxNTUwMDAwQjA2MUIwRTAxMjdDMTFERkYzMTRBMzEzMzJCMDVEMTZDCis6MTAxNTYwMDA4QjcwMDExQzEwMUMwMEYwMEZGODA2RTAzMjJCMDhEMTI0Cis6MTAxNTcwMDA4QjcwMDExQzEwMUMwMEYwM0NGODM4MUM4MEJDMDhCQ0FGCis6MTAxNTgwMDAxODQ3MDAyMDg4NzBGOUU3OTBCNENBMURGOTMyMzMyNzU0Cis6MTAxNTkwMDBDQzFERkYzNDRBMzREMzZBQzA0NkE3NzBGRjMxNDEzMUI1Cis6MTAxNUEwMDAwNzZDQzA0NjRGNjFGQjE4MzkxQzlGMUUwMTIzOUIwNzI3Cis6MTAxNUIwMDBGQzFDMjM0MzFCNjgxQjA2MUIwRTlCMDAxQjA0MUIwQ0ZGCis6MTAxNUMwMDBDOTE4MDgzMTAxNjQwMTIzOUIwN0I5MUMxOTQzMDk2ODM0Cis6MTAxNUQwMDAzNDMwMDE3NkY4MUQwMTMwMTg0MzAwNjgwMDA0QjkxRDRECis6MTAxNUUwMDAxOTQzRDA2MzA5NjgwOTA0MDkwQzA4NDNEMDYzOTBCQzBGCis6MTAxNUYwMDA3MDQ3QjBCNUNBMURGOTMyQzUxRDJEMzUzMjIwQ0YxRDNCCis6MTAxNjAwMDBGRjM3NEEzN0QzNkFDMDQ2Qjg3MENDMURGRjM0M0EzNDJFCis6MTAxNjEwMDBFODY4QzA0NjYwNjExMDMwRTg2MDYwNjlDMDE4ODcxRUU1Cis6MTAxNjIwMDAwMTIzOUIwNzM4MUQxODQzMDA2ODAwMDRCOTFDMTk0M0E3Cis6MTAxNjMwMDBEMDYzMDk2ODA5MDQwOTBDMDg0M0QwNjNGODFEMDMzMDFFCis6MTAxNjQwMDBGRkY3RkNGQjIwNjJGODFEMDczMEZGRjdGN0ZCNjA2MjM1Cis6MTAxNjUwMDAwMDIwMjg3NkIwQkMwOEJDMTg0N0Y3QjU4MUIwMDE5OEM3Cis6MTAxNjYwMDBDNzFERjkzN0I4NkEwMTIzOUIwN0Q0MUQwNTM0MjM0M0VFCis6MTAxNjcwMDAxQzY4RkYyM0ZFMzMyMzQwN0Y2QjNGMDQzQjQzMEI2MDFBCis6MTAxNjgwMDAzNDMwMUMxQzgwMjMyMzQwMDE5RkZGMzc0MTM3MDAyQjNGCis6MTAxNjkwMDAzQ0QwMEMyMzAwOTMwMDIzOUQwMEFFMTgzNjY5NkQxOEQyCis6MTAxNkEwMDA2RTYxMDEzMzA1MkJGN0QzMDAyMzlEMDBBRTE4NzY2QUQ3Cis6MTAxNkIwMDA2RDE4QUU2MjAxMzMwNTJCRjdEMzAxOUJGRjMzNTEzMzE1Cis6MTAxNkMwMDA5Qjc4MzMyQjBFRDEwMTIzOUIwN0M1MUQwMTM1MkI0MzdFCis6MTAxNkQwMDAxQjY4QzA0NjRCODEwMTIzOUIwN0M1MUQwRDM1MkI0MzVECis6MTAxNkUwMDAxQjY4MTZFMDdCNjlDMDQ2NEI4MTAxMjM5QjA3QzUxRDIzCis6MTAxNkYwMDAwRDM1MkI0MzFCNjg3RDY5NUQxQjAxMjM5QjA3QzYxREIwCis6MTAxNzAwMDAwMTM2MzM0MzFCNjhFQjE4MEMzQjAyRTAwMDIzMDA5M0M3Cis6MTAxNzEwMDA0QjgxQ0I4MDYzMDk0OUQzMDEyMzlCMDdDNDFEMDUzNDRBCis6MTAxNzIwMDAyMzQzMUI2OEMwNDYwQjgxMDEyMzlCMDdDNDFEMEQzNDU2Cis6MTAxNzMwMDAyMzQzMUI2ODBDODkxQjFCMDA5QzFDMUIwMTIzOUIwNzVDCis6MTAxNzQwMDAwODMwMTg0MzAwNjgyMDE4ODg4MDM4NkEwNDBFRkYyMzg4Cis6MTAxNzUwMDAxQjA0MDM0MDFCMEExQzQzRkYyMzFCMDIwMzQwMUIwMjA0Cis6MTAxNzYwMDAyMzQzMDAwNjE4NDNDODYwNzg2QTA3MEVGRjIzMUIwNDUyCis6MTAxNzcwMDAwMzQwMUIwQTFGNDNGRjIzMUIwMjAzNDAxQjAyM0I0MzgyCis6MTAxNzgwMDAwMDA2MTg0MzA4NjFEMDZCQzA0NkM4NjM5MDZCQzA0NjIyCis6MTAxNzkwMDAwODY0NTA2Q0MwNDY0ODY0MTA2Q0MwNDY4ODY0RDA2Q0M1Cis6MTAxN0EwMDBDMDQ2Qzg2NDkwNkNDMDQ2MDg2NTAyRTAwMDIzMEI4MTA3Cis6MTAxN0IwMDA4QjgwMDRCMEYwQkMwOEJDMTg0NzAwQjUwRjRBOTM4OTcxCis6MTAxN0MwMDAwMTMzOTM4MUMyMURGOTMyMDQyMzkwNkFDMDQ2QzM2MDdECis6MTAxN0QwMDAxMDIzODM2MUNCMEEwMUQzMTgyMzgzNjFDMTgzNTE2QjJBCis6MTAxN0UwMDBDMDQ2QzE4MTUxNkJDMjFEMzkzMjUxODMwNDIzMDE2ODQ3Cis6MTAxN0YwMDAxOTQzMDE2MDAxRjBDMkY4MDhCQzE4NDcwQzJCMDA4MEE3Cis6MTAxODAwMDBCMEI1MUI0QzIwNkEwMjI4MUJEMjAwMjBFNzFEMTkzN0Y3Cis6MTAxODEwMDAzODcxRTE2OEUwMURGOTMwMDAyOTE1RDA0MjZBMDAyQUNDCis6MTAxODIwMDAxMkQxMDEyNTBBRTBGRkY3ODlGQjAwMjgwOUQxMjA2QUJGCis6MTAxODMwMDAwMjI4MDBEMzNENzFFMDY4MDAyODAyRDAzODc5MDAyOEUyCis6MTAxODQwMDBGMUQwQjBCQzA4QkMxODQ3NDA2QTAwMjhGOUQxMDAyOTgzCis6MTAxODUwMDBGN0QxNjA2OTAwMjgwNEQwMDY0ODAwNjgwM0YwQThGQ0FFCis6MTAxODYwMDBFRkU3NjA2ODAwMjhFQ0QwMDBGMDVBRjhFOUU3MDAwMEU0Cis6MTAxODcwMDA2QzA2MDA4MDM0MDQwMDgwQjBCNTA3MUMyMDIzQjg2OEQzCis6MTAxODgwMDAxODQwMDEyNDAwMjUwMDI4MEJEMTM4NkEwMDI4MDNEMTE0Cis6MTAxODkwMDAyODFDQjBCQzA4QkMxODQ3MUY0ODAxNkUwMTMxMDE2NjA2Cis6MTAxOEEwMDAwM0UwNDg2OEM0MjMxODQwMDNEMTM4NkEwMEYwMENGQ0Y4Cis6MTAxOEIwMDAyRkUwMzgxQzAwRjAxQ0ZDMzgxQzAwRjA3QkZBQjg2OEU0Cis6MTAxOEMwMDBDMDA4MDJEMzM4NkEwMEYwRDFGQkI4NjgzOTZBQzA0NjU0Cis6MTAxOEQwMDA4ODYwMzg2QUMwNDZDNTYwMTA0ODQxNjgwMDI5MTFEMTQ3Cis6MTAxOEUwMDBDMTY4MDAyOTA5RDE0MTY5MDAyOTA2RDEzOTZBQzA0Njc5Cis6MTAxOEYwMDA4MTYwNDE2MDAwRjAxNEY4MEJFMDM5NkFDMDQ2ODE2MEY1Cis6MTAxOTAwMDA0MTYwMDZFMDM5NkE4MjY4QzA0NkQxNjAzOTZBQzA0NkUzCis6MTAxOTEwMDA4MTYwMjAxQ0JERTcwMDAwQTQyQTAwODA2QzA2MDA4MEM2Cis6MTAxOTIwMDA5MEI1MEI0QzY3NjgwMDJGMEZEMDM4MUMwMEYwMTJGOEYwCis6MTAxOTMwMDAwMDI4MEFEMTYwNjhDMDY4QzA0NjYwNjAzODFDMDBGMEFBCis6MTAxOTQwMDBDM0ZCMDAyMDkwQkMwOEJDMTg0NzAxMjBGQUU3MDAwMDQ4Cis6MTAxOTUwMDA2QzA2MDA4MEYwQjUwNzFDRkUxRDQ5MzYzMDc4NDAwMDRCCis6MTAxOTYwMDBDMDE5ODU4QjMzNEMzNDRCOUQ0MjNDRDAzODFDMjExQzE0Cis6MTAxOTcwMDAyQTFDMDBGMDFERjkzMTQ4ODA2QTU4MjE2OTQzNDAxODNCCis6MTAxOTgwMDAwMTIzOUIwNzE4NDMwMDY4MDAwNDAwMEMyQzREMDEyODFDCis6MTAxOTkwMDAxQUQxMzA3OEMwMTlDMTFEMTkzMTA4N0EzQTY4ODAxOEY3Cis6MTAxOUEwMDAwOTdCRUExRDIxMzIwMEYwRTNGQzMwNzhDMDE5MjAzMEI5Cis6MTAxOUIwMDAwMDc5Mzk2ODQwMThDMTFEMDUzMTAwMjAwMDIzNDIwMDFDCis6MTAxOUMwMDA4QjUyMDEzMDA2MjhGQUQzQTA4ODQxMDcwQkQxMjE4OTE4Cis6MTAxOUQwMDAwOTE4Nzg2ODAwMDQwMDBDODE0MjA0RDg2MTg5RTI4ODAzCis6MTAxOUUwMDA4OTE4ODE0MjAzRDkwMDIwRjBCQzA4QkMxODQ3MjExQzhCCis6MTAxOUYwMDAxNDRBMDAyMEZFRjc1QUZGMDEyMjUyMDQ3ODY4MDI0MzdECis6MTAxQTAwMDAwMTIwMzk2OEZFRjc1MkZGMDEyMjUyMDQ3ODY4MDI0MzMwCis6MTAxQTEwMDAwMDIwMzk2OEZFRjc0QUZGMEI0OTBDNEEwMTIwRkVGNzA3Cis6MTAxQTIwMDA0NUZGMDEyMEU5MUQxOTMxNDg3MTAyMjFFQTFERjkzMkYzCis6MTAxQTMwMDA1MTYyRDlFNzI4QUMyMDQwRkZGRjAwMDA0QzJBMDA4MDBCCis6MTAxQTQwMDA2QzA2MDA4MDU0MDAwMzAwMTRBQzIwNDAxNDAwMDcwMDEyCis6MTAxQTUwMDBGMEI1ODNCMDAwMjE0RjQ4QzIxREY5MzI1MTYyMDEyMTE3Cis6MTAxQTYwMDBDOTA0NEQ0QUMwNDYxMTYwQzExRDE5MzE0OTc5MDAyOTg4Cis6MTAxQTcwMDAwNEQxNEE0ODAwNjgwM0YwOUJGQjg3RTA0NTQ4NDc2ODZCCis6MTAxQTgwMDBGQzFENDkzNDIxNzg0ODAwQzAxOTgwOEI0NDRBOTI2QTcxCis6MTAxQTkwMDA1ODIzNTg0MzE1MTgwMTIzOUIwN0VBMUQwNTMyMUE0M0EyCis6MTAxQUEwMDAxMjY4MDgzNTJCNDMxRDY4RkYyMzFCMDIyQjQwMUIwQUJECis6MTAxQUIwMDAzQzREMDEyQjI0RDFDODE5QzExRDE5MzEwODdBM0E2ODRGCis6MTAxQUMwMDA4MDE4Mzk0QTA5N0IwMEYwQzVGQzIwNzhDMDE5MjAzMDA1Cis6MTAxQUQwMDAwMDc5Mzk2ODQxMTgwMDIwODIwMDUzMTk5QjZFNkU0NkM4Cis6MTAxQUUwMDBCMzUwMDEzMDAzMjhGN0QzQ0ExRDA1MzI2OTQ2MDAyMEUwCis6MTAxQUYwMDA0MzAwQ0Q1QUMwNDZENTUyMDEzMDA2MjhGOEQzMkRFMDE4Cis6MTAxQjAwMDAwMjJCMkJEMTExMEEyOUQzMDAyMThBMDA1MzE5OUI2RTc1Cis6MTAxQjEwMDA2RTQ2QjM1MDAxMzEwMzI5RjdEMzIxNzg0OTAwQzkxOTIyCis6MTAxQjIwMDAwOThGM0E2ODhCMTg2QTQ2MDAyMTREMDA1NjVCQzA0NjAzCis6MTAxQjMwMDA1RTUzMDEzMTA2MjlGOEQzMTk0OThBNkExMzE4MUE2REMwCis6MTAxQjQwMDAwMDlENTU0MDE5NEFENjY4NzU0MDFENjU4OTZBMDgxODc4Cis6MTAxQjUwMDA0MTZEMDI5QjU5NDA5MjY5NTE0MDQxNjUyMDc4NDExRTc4Cis6MTAxQjYwMDAyMTcwMDAyODBERDAzODFDRkZGN0Y0RkUwMDI4MEREMTlECis6MTAxQjcwMDAwODRBNTA2OEMwNjhDMDQ2NTA2MDM4MUMwMEYwQTRGQTlCCis6MTAxQjgwMDAwMkUwMzgxQzAwRjA3M0ZBMDFGMERFRkEwM0IwRjBCQzlBCis6MTAxQjkwMDAwOEJDMTg0NzZDMDYwMDgwMDAwMDAwQjAzODA0MDA4MEM0Cis6MTAxQkEwMDA0QzJBMDA4MEFDQUIyMDQwOTQwNjAwODAwODgzMjA0MDgzCis6MTAxQkIwMDBGMEI1ODJCMDY5NEI5RjZBNTgyMzVBNDNCQTE4QzMxREM3Cis6MTAxQkMwMDA0OTMzMUY3ODAxMjM5QjA3RDQxRDAxMzQyMzQzMUQ2ODJCCis6MTAxQkQwMDA0MzY4MUMwNDAxMjM5QjA3RDYxRDA1MzYzMzQzMUI2ODRECis6MTAxQkUwMDAxQzQzNDIyMzFDNDMwQzYwRkYyNjM2MDIyRTQwMDEyMzc3Cis6MTAxQkYwMDA1QjAyOUU0Mjc0RDE2QjBDMkJEM0MzMTkyMDMzMUI3OTJCCis6MTAxQzAwMDBDMDQ2NEI4MTdCMDAxQjE4MUI4RjRDODkxQjFCQ0I4MDU0Cis6MTAxQzEwMDAwMDI0QTYwMDAxOTZCMzE4REUxRDA5MzYwMTIzOUIwNzk4Cis6MTAxQzIwMDAzMzQzMUI2ODAxOUU3NjE4NzM2MTAxMzQwNTJDRjBEMzkxCis6MTAxQzMwMDAwMDI0QTYwMDAwOTZCMzE4REUxRDFEMzYwMTIzOUIwNzY1Cis6MTAxQzQwMDAzMzQzMUI2ODAwOUU3NjE4QjM2MjAxMzQwNTJDRjBEMzMxCis6MTAxQzUwMDAwNkUwMDAyMzRCODFDQjgwNDAyMzlDNDMwQzYwMjMxQzc3Cis6MTAxQzYwMDA2QjBFNEFEM0MzMTkyMDMzMUI3OTEwMzMwQjgxN0IwMEQxCis6MTAxQzcwMDAxQjE4MUI4RjBGODlEQjFCOEI4MDAxMjM5QjA3RDQxRDM3Cis6MTAxQzgwMDAzNTM0MjM0MzFCNjhDMDQ2Q0I2MzAxMjM5QjA3RDQxRDE3Cis6MTAxQzkwMDAzMTM0MjM0MzFCNjhDMDQ2MEI2NEFCMEUyMUQyMDEyM0IxCis6MTAxQ0EwMDA5QjA3RDQxRDNEMzQyMzQzMUI2OEMwNDY0QjY0MDEyMzZFCis6MTAxQ0IwMDA5QjA3RDQxRDM5MzQyMzQzMUI2OEMwNDY4QjY0MDEyMzIyCis6MTAxQ0MwMDA5QjA3RDQxRDQ1MzQyMzQzMUI2OEMwNDZDQjY0MDEyM0M2Cis6MTAxQ0QwMDA5QjA3RDQxRDQxMzQyMzQzMUI2OEMwNDYwQjY1MDBFMEJECis6MTAxQ0UwMDAwRkUwRkIxRjAxM0IxQjA0MUIwQzA3NjhGRjE4MDM2OTc3Cis6MTAxQ0YwMDAwODFDMzkxQzAwRjAzNEY4MkNFMDAwMjMwQjgxOEI4MDg5Cis6MTAxRDAwMDAyOEUwMDAyMzhCODAwQjgxQzMxOTIwMzMxQjdBQzA0NjQ3Cis6MTAxRDEwMDA0QjgxN0IwMDE4MTgwMDhFQzA0NkM4ODAwMDIwODcwMEM5Cis6MTAxRDIwMDBCQjE4REMxRDA5MzQwMTIzOUIwNzIzNDMxQjY4N0YxODY0Cis6MTAxRDMwMDA3QjYxMDEzMDA1MjhGMkQzMDAyMDg3MDBCQjE4REMxRDMxCis6MTAxRDQwMDAxRDM0MDEyMzlCMDcyMzQzMUI2ODdGMThCQjYyMDEzMEFFCis6MTAxRDUwMDAwNTI4RjJEMzAyQjBGMEJDMDhCQzE4NDc0QzJBMDA4MDFBCis6MTAxRDYwMDA4MEI0MUYxQzNCMEMxOEQyMTc2RDExNEJDMDQ2REY2MEFFCis6MTAxRDcwMDA1MjZEQzA0NjFBNjFDNzYwMUE2OUMwNDYwMjYxRDg2OEQwCis6MTAxRDgwMDBDMDQ2MDg4MEQ4NjgwMDBDNDg4MDE4NjlDMDQ2ODg4MDIyCis6MTAxRDkwMDAxODY5MDAwQ0M4ODA4MEJDNzA0NzRBODgxMjA0MEI4ODAwCis6MTAxREEwMDAxQTQzQzI2MDhBODhDOTg4MDkwNDExNDMwMTYxRjJFN0I1Cis6MTAxREIwMDAyQzA3MDA4MEYxQjU4OEIwMDAyMjA4OTgwMDZBMDg5QkMzCis6MTAxREMwMDA5OTY4NDkwQTAyRDMwMTI3RkYwMzAwRTAwMDI3MDM4QjJCCis6MTAxREQwMDAwMDJCMTlEMEEzNDk4OTZBMUMxQzU4MjM2MzQzQzkxOEQ2Cis6MTAxREUwMDAwMTIzOUIwNzU4MzkxOTQzMDk2ODA5MDQwOTBDMDIyOTgyCis6MTAxREYwMDAwMkQxMDgyMzFGNDMwN0UwNDE4QjAwMjkwMkQwMEMyM0E2Cis6MTAxRTAwMDAxRjQzMDFFMDA0MjMxRjQzODM4QTAwMkIxOEQwOTU0OTA4Cis6MTAxRTEwMDA4OTZBMUMxQzU4MjM2MzQzQzkxODAxMjM5QjA3NTgzOTNFCis6MTAxRTIwMDAxOTQzMDk2ODA5MDQwOTBDMDIyOTAxRDEwRjQzMDdFMDhECis6MTAxRTMwMDBDMThBMDAyOTAyRDAwMzIzMUY0MzAxRTAwMTIzMUY0MzZECis6MTAxRTQwMDBDMTFEMzkzMTA3OTE0Qjg5MEM4OTFDMTkyNDA0MjQwQ0JDCis6MTAxRTUwMDAwODlEMkQ2OEMwNDYwMTk1Qzk4ODdEMDgxQUQzMUExQ0IzCis6MTAxRTYwMDBDMzFEMTkzMzFBNzIwNzlBOTI4OUMwNDYxQTczMDc5QUNBCis6MTAxRTcwMDAxMjg5QzA0NjAyODYwNDg3ODI4QTAxM0E4MjgzMDEyMjNGCis6MTAxRTgwMDAxOTcxMDg5QjFCNjg1QjE4NUI3ODlCMDAxQjA0MUIwQzdCCis6MTAxRTkwMDAwODMzNTkxOEJCMDg0N0QzMDc5QjVCODk4NTE4MDY5NUZCCis6MTAxRUEwMDAyMDM1MkI3MjA3OUI5Qjg5QzA0NjJCNzMwNzlCMUI4OTkwCis6MTAxRUIwMDAyRTFDNTUwMDJEMTgwNTk1MkI4NjAwMkEwMUQwQzM4QUFCCis6MTAxRUMwMDAwMEUwODM4QTAxM0IwNTlEQzA0NkFCODMzMTcxNjU0QkMxCis6MTAxRUQwMDA5RDZBMDU5QjlFOEI1ODIzNzM0M0VCMThERDFEMDEzNUNFCis6MTAxRUUwMDAwMTIzOUIwNzJCNDMxRDY4MkIwRTVCMDYwMUQxMDgzMTk0Cis6MTAxRUYwMDAwMEUwMTAzMTgxMjM1QjAyMUQ0MDlENDIwM0QxRTMxRkFFCis6MTAxRjAwMDAwNTNCMUMwNDI0MEMwNTlCQzA0NjFDODcwODlCMUI2OEQyCis6MTAxRjEwMDAxQjE5MTAzQjlCN0IwNjlENDAzNTJCNzAyQjc4MDIzM0ExCis6MTAxRjIwMDBFMzFBMUMwNDI0MEMwMTMyQkIwODlCMDc2REQwODMxOEY0Cis6MTAxRjMwMDAyMDMzMDQ5MzE5NzIwMTlCNUQxODAxMjM5QjA3MkI0M0U3Cis6MTAxRjQwMDAxQjY4MUIwNzFCMEY5QjAwMDQ5RUMwNDYzMzczMDA5NTQ0Cis6MTAxRjUwMDAyQjc4MUIwNzFCMEY5QjAwMDQ5REMwNDYyQjczMDA5RDE1Cis6MTAxRjYwMDBFQjc4QUQ3ODFCMDIxRDQzMkIwMjJEMEEyRDA2MkQwRTlBCis6MTAxRjcwMDAyQjQzNTUwMDJEMTgyQjg2MDQ5QkMwNDY1OTcyMDQ5Qjk5Cis6MTAxRjgwMDAxQjdCMkUxQzA0OURDMDQ2NkI3MzMzOEVDMDQ2NzM4NjJDCis6MTAxRjkwMDAwMDlEMkI3ODFCMDcxQjBGOUIwMDFCMDQxQjBDNTkxODYzCis6MTAxRkEwMDAwNDI1M0Q0MDBFRDAzNDg3MDM4QjAxM0JCMzgzMTMxQ0MzCis6MTAxRkIwMDAxQjE4MjAzMzE5NzEwMTlCNUIxODVCNzg5QjAwNTkxODIzCis6MTAxRkMwMDAwODMxMDEzMjNCMDkzN0QzMDAyRDAxRDA0MzhCMDBFMEFCCis6MTAxRkQwMDAwMzhCNTUwMDJEMTgwMTNCQUI4MzgzMTgwMzkzMjAzM0VCCis6MTAxRkUwMDAxOTcxMjA0QjlENkE1MzAwMUIxODAyOTM5RThCNTgyMzM2Cis6MTAxRkYwMDA3MzQzRUIxOEREMUQwMTM1MDEyMzlCMDcyQjQzMUQ2ODNGCis6MTAyMDAwMDAyQjBFNUIwNjAyRDEwODMxMDFFMDE1RTAxMDMxODEyMzZGCis6MTAyMDEwMDA1QjAyMUQ0MDlENDIwM0QxRTMxRjA1M0IxQzA0MjQwQ0MxCis6MTAyMDIwMDAwMjlCQzA0NjFDODcwODlCMUI2ODFCMTkxMDNCOUI3QkFGCis6MTAyMDMwMDAwMzlDNDAzNDIzNzAwMTMyMDc5QkMwNDZEOTgwNTExRTU3Cis6MTAyMDQwMDBDMzFENDkzMzE5NzAwNzYxMDQyQTA2RDIwNjQ5NTMwMDlCCis6MTAyMDUwMDAxQjE4OTk4MzAxMzIwNDJBRjlEMzA5QjBGMEJDMDhCQ0RCCis6MTAyMDYwMDAxODQ3MDAwMDRDMkEwMDgwRkZGRjAwMDA3MDQ3ODBCNTMxCis6MTAyMDcwMDA4Q0IwMDcxQzEyNDgwMTY4MDEzMTAxNjAzODY4QzA0NjA1Cis6MTAyMDgwMDAwMDkwNzg2OEMwNDYwMTkwQjg2OEMwNDYwMjkwMEQ0ODNDCis6MTAyMDkwMDA0MTY4Qzk2OEMwNDY0MTYwMzgxQzAwRjA0RkY4Qjg2ODE0Cis6MTAyMEEwMDA0MDA5MDZEMzEwMjMwMjk4MTg0MzAyOTA2ODQ2MDJGMEI0Cis6MTAyMEIwMDBFMUZGNjg0NjAyRjA5QUZFMENCMDgwQkMwOEJDMTg0N0VECis6MTAyMEMwMDAwQzJCMDA4MDZDMDYwMDgwMDBCNThDQjAwMTY4QzA0NjA3Cis6MTAyMEQwMDAwMDkxNDE2ODA1NEIxOTQzMDE5MTAwRjAyRkY4Njg0NkMzCis6MTAyMEUwMDAwMkYwODRGRTBDQjAwOEJDMTg0NzAwMDAwMDAwMDBBMEZECis6MTAyMEYwMDAwMjZBMDM2OEMwNDYxMzYwNDA2OEMwNDY1MDYwNDAzMkMwCis6MTAyMTAwMDA0ODY4QzA0NjkwODBDODY4QzA0NkQwODA0ODY5QzA0NkNDCis6MTAyMTEwMDAxMDgxODg2OEMwNDY1MDgxMDg3RUMwNDY5MDczMDg2OTY3Cis6MTAyMTIwMDBDMDQ2OTA4MTcwNDcwNDQ5MDg2ODAwMjgwMEQxNzA0Nzc0Cis6MTAyMTMwMDBDMjY4QzA0NjBBNjBGQUU3NkMwNjAwODAwMjQ5MEE2ODc1Cis6MTAyMTQwMDBDMDQ2QzI2MDA4NjA3MDQ3NkMwNjAwODBCMEI0MDAyMkQwCis6MTAyMTUwMDAxMjRGN0M3RjAxMzQ3Qzc3MDMyM0ZDMUQxOTM0Mzg2MkQ1Cis6MTAyMTYwMDA3OTYyMjM3MjBFNEMyNTY4NkIwQzA1RDIyMzY4MUIwQzE4Cis6MTAyMTcwMDAxMEQxMjQ2OEEzMEEwREQzMDEyMzBBNEZDMDQ2RkI2Mjg1Cis6MTAyMTgwMDAwOTRGMEE0QkMwNDZERjYwOTk2MDU4NjAxMDFDMTg2MDA4Cis6MTAyMTkwMDAwMTMyRkJFNzEwMUMzODY0MDEzMkZCRTcwMDAwMDA4MENECis6MTAyMUEwMDAwMDAwMTA0MEMwMDAxODAwMDI4MTAwMDA0MDAxMTgwMDJCCis6MTAyMUIwMDBGMEI1NDc0RjM4Njg0NzRFNDc0RDA3MjM1QjAyRUMxODkwCis6MTAyMUMwMDAwMDI4MUREMTIwNkIwMTMwMjA2MzQ0NDlDMDQ2MDg2MEJGCis6MTAyMUQwMDA0MzQ4NDE2OTAwMjkxM0QwQzExRDY5MzEwOTdCMDAyOTk5Cis6MTAyMUUwMDAwRUQwMDEyMzlCMDcwMTZEMTk0MzA5NjhDMDQ2ODE2MTI4Cis6MTAyMUYwMDBDMjY5OTE0MjA0RDBGMTZDMDEzMUYxNjQwMUYwNTBGRUVBCis6MTAyMjAwMDAzODY4MDEyODE3RDEzNzQ4NDE2OTAwMjkxM0QwQzExRDBBCis6MTAyMjEwMDA2OTMxMDk3QjAwMjkwRUQwMDEyMzlCMDcwMTZEMTk0MzA5Cis6MTAyMjIwMDAwOTY4QzA0NjgxNjFDMjY5OTE0MjA0RDBGMTZDMDEzMUY0Cis6MTAyMjMwMDBGMTY0MDFGMDM1RkUzODY4MDIyODJGRDFCQjIzMUIwMTYxCis6MTAyMjQwMDBFRTE4NzA3QjAwMjgwM0QwMDAyMDcwNzMwMEYwNEFGRDY4Cis6MTAyMjUwMDAzMDdCMDAyODAyRDA3ODY4MDJGMEFBRkYxQjIzREIwMTQ0Cis6MTAyMjYwMDBFODE4QzA4QjA0MjYwNjQwRTA2QUIwNDIxNEQwRjg2ODMzCis6MTAyMjcwMDAwMTMwRjg2MDE5MjgxMUQzMUI0ODAxN0IwMDI5MEREMUNBCis6MTAyMjgwMDBGRjMwNDEzMDQwNzgwMDI4MDhEMUI4NjgwMkYwOTBGRjU0Cis6MTAyMjkwMDAwMDIwRjg2MEU2NjIwMUUwMDAyMEY4NjAzODY4MDMyODVBCis6MTAyMkEwMDAwQkQxRUMxRDc5MzRFMDZCODAwODAyRDMwMjIwMDJGMEUwCis6MTAyMkIwMDAwN0ZDMDIyM0UwNkI5ODQzRTA2MzM4NjgwMTMwMzg2MDI0Cis6MTAyMkMwMDAwMzI4MDFEOTAwMjAzODYwRjBCQzA4QkMxODQ3MDAwMDgyCis6MTAyMkQwMDAzQzA0MDA4MEEwODIyMDQwNjgwRTAwODA0MDAxMTgwMDZECis6MTAyMkUwMDA2NDJEMDA4MEU0MkMwMDgwMjgwNTAwODBCMEI0MUQ0OEQ3Cis6MTAyMkYwMDA4NDhBMUQ0QTEzOEFDMTFEMDkzMTAxMjc5QzQyMDNEMURBCis6MTAyMzAwMDA0MzhBNTQ4QUEzNDIxMEQwMEI3ODAwMkIwREQwNEI3ODBGCis6MTAyMzEwMDAwMDJCMEFEMDQ0OEI5MzhBOUM0MjA0REMxMzRCQzA0NkFBCis6MTAyMzIwMDA1RjYwOTc4MjAxRTAwMTMzOTM4MkMzOEI1QzFDQzQ4MzlFCis6MTAyMzMwMDA4NDhCQTM0MjBFREI4NDhBMDU4QjAwMjNBQzQyMDVEQTMyCis6MTAyMzQwMDA0NDhBQzU4QUFDNDIwMURBNEI3MDAwRTA0RjcwNDM4Mjg4Cis6MTAyMzUwMDA4MzgyQzM4MzQxOEFDMDQ2NTE4MjgwOEFDMDQ2MTA4MkVDCis6MTAyMzYwMDBCMEJDNzA0N0U4MEUwMDgwM0MwNDAwODA0MDAxMTgwMEJCCis6MTAyMzcwMDBGN0I1OTFCMDZCNDY4NDFFMTI5OTE0MjkxQUQ5MDAyMDIyCis6MTAyMzgwMDA4MTAwNjc1OEMwNDY1NzUwMDEzMDAwMDYwMDBFMTAyOEUzCis6MTAyMzkwMDBGNkQzMDAyMTA1MjA4NzAwRDY1OTRGMUMzRDA2MkQwRThGCis6MTAyM0EwMDAwRjFDQkYwMERFNTEyOTFDMDEzMDAwMDYwMDBFMTAyODUyCis6MTAyM0IwMDBGMUQzMDlFMDAwMjA4MTAwNjM1OEMwNDY1MzUwMDEzMDNBCis6MTAyM0MwMDAwMDA2MDAwRTA2MjhGNkQzMDAyMEUwNzAyMDcyNjA3MjJFCis6MTAyM0QwMDBBMDcyMjA3MzYwNzMxMjk5MTQyOTM3RDk2OTQ2OEUxQzM0Cis6MTAyM0UwMDA5MTc4MDkwNzA5MEY4OTAwMTQzOTBEMDYyRDE2MDAyNzY5Cis6MTAyM0YwMDAwMDJEMUJEREYwMTkxMEE5MDBGMDNERjgwMDI4MEVEMENCCis6MTAyNDAwMDAwMDIwMTBBOTA5NzgwMDI5MDlERDAwMjIzOTE4NzI1NDJBCis6MTAyNDEwMDAwMTMwMDAwNjAwMEUxMEE5MDk3ODg4NDJGNkRCMTBBOEVBCis6MTAyNDIwMDAwMDc4MzgxODA3MDYzRjBFQUY0MkUzREI2ODQ2RTIxRDJFCis6MTAyNDMwMDAwRDMyMDAyMUFCMDg1RjFDMDhEMDhCMDBDNDU4QzA0Njg5Cis6MTAyNDQwMDBENDUwMDEzMTA5MDYwOTBFOEY0MkY2RDgxNEIwRjBCQzAxCis6MTAyNDUwMDAwOEJDMTg0NzkwQjQ4NzFFMDAyMDg5MDg0QjFDMDhEMDgwCis6MTAyNDYwMDA4MTAwNTQ1OEMwNDY3QzUwMDEzMDAwMDYwMDBFODM0MjYzCis6MTAyNDcwMDBGNkQ4OTBCQzcwNDc4MEI0MDI3OEQyMDZEMjBFMDAyMzAyCis6MTAyNDgwMDAwMTI3MDEyQTAxREMwRjcwMTFFMDQwNzhDMDQ2MDg3MDc2Cis6MTAyNDkwMDAxNDJBMDREMTA4NDgwMTdBMDEzMTAxNzIwN0UwMDIyQUE2Cis6MTAyNEEwMDAwNUQwMDUyQTAzRDAwNjJBMDFEMDE1MkEwMkQxMTgxQzBFCis6MTAyNEIwMDA4MEJDNzA0NzM4MUNGQkU3RTA4MjIwNDAwMEI1MEY0ODI1Cis6MTAyNEMwMDAwMTIzMUIwNjQxNjk5OTQzMUEwOTQxNjFEMTYwMDAyMTJBCis6MTAyNEQwMDBBMTIyNTIwMzkxNjExOTFDMDk0QUMwNDYxMTYwMUIyM0I1Cis6MTAyNEUwMDBEQjAxQzAxODgwNjkwMDI4MDNEMDAyRjA2MUZFMDhCQzNGCis6MTAyNEYwMDAxODQ3MDQ0ODQxODgwMTMxNDE4MEY4RTc2ODBFMDA4MEEwCis6MTAyNTAwMDAwMDAwMDBCMEUwODIyMDQwNzA0NzAwMDBGMEI1ODZCMEM3Cis6MTAyNTEwMDA5NTRBRDA2OEQ3MUQ3OTM3MDEyODA5RDEzODg5MDAyODE0Cis6MTAyNTIwMDAwNkQxRDA2RjAyMjMwMTY4OTk0MzAxNjAxNDIwMzg4MURECis6MTAyNTMwMDA4RTRDNjE2QThFNDhDMzZCNTkxOEMxNjNBMDZBMTkyMzE3Cis6MTAyNTQwMDBEQjAxRDQxOEEwNjIyMTZBMDkwMzA5MEI4MTQyMDVEMTdECis6MTAyNTUwMDAwMTIwNDAwNDg3NDlDMDQ2MDg2MEYzRTBCQjhBNTgxQzRDCis6MTAyNTYwMDBCODgyM0Q4QjAxMjAwMDIxQUI0MjA0REJEMzFEODkzM0FGCis6MTAyNTcwMDA1ODcwQjk4MkY5ODMzMzIzOUIwMUQzMTgwNTkzNUI2OUEzCis6MTAyNTgwMDAwRjJCNzNEMjAwMjE3QzRGQzA0NjM5NjEyMTZBOEE2OEMzCis6MTAyNTkwMDAxMjA0MTIwQzRCNjgxRTBDMzYwNEZEMUYwOTNEMDAyRTYwCis6MTAyNUEwMDAwNUQxM0IyQTAzRDMwMTIzREIwMjlBNDIwMUQ5QTg3MzQ4Cis6MTAyNUIwMDBDOEUwMDEyMzlCMDcwODMxMTk0MzA5NjhDMDQ2MDM5MTBECis6MTAyNUMwMDAwM0E5MDk4ODAxMzEwOTA0MDkwQzc5ODI0OTA5MDUzMUY3Cis6MTAyNUQwMDAwOTA2MDkwRTY5NEVDMDQ2MDI5NjY5NDg0MzZBQzA0NjFDCis6MTAyNUUwMDAwMTkzODM2QUMwNDYwMDkzQzIxRDExMzI4MDY5MDAwM0MzCis6MTAyNUYwMDAwMDBCOTI2OEIzMDcxQTQzMTI2ODkwNDIwMUQxMDEyMDgwCis6MTAyNjAwMDAwREUwOTA0MjA1RDkwMDlCMTgxQTAxOUJEMjFBODIxODNFCis6MTAyNjEwMDAwMEUwMTIxQTAxMjAwOTAxOTE0MjAwRDMwMDIwMDEyODk0Cis6MTAyNjIwMDA2NUQxNTE0OTIwNjkwMDI4NjJEMDA1OTk0ODY5MDEzMDc3Cis6MTAyNjMwMDA0ODYxMDIyMDIxNkFDMDQ2MDg2MDAwRjBBN0ZDNzg2MzY4Cis6MTAyNjQwMDBCRTYwNDk0OTIyNkFBMzZCRDMxODY2NkJCMzQyMDBEOUI2Cis6MTAyNjUwMDAyMjZCQzA0NkJBNjJCQTZBMEMzMkZBNjIwMDIyRkE2MTkwCis6MTAyNjYwMDAwM0FBNTI4OEQyMDkwM0QzMDEyMjAwRTA3QkUwMDBFMEY0Cis6MTAyNjcwMDAwMDIyN0E2MDdBNjhDMDQ2MDI2MDc4OEE0MTRFNjAyOEZCCis6MTAyNjgwMDAwNERDQjA4Mzc4OEFDMDQ2RjA4MzA4RTA2MDIwQjA4MzIxCis6MTAyNjkwMDA3OThBRjg2QTQyMTg2MzZCOUE0MjAzRDhGMTgzMDAyMjYwCis6MTAyNkEwMDAzQTYzMDVFMDIxNkJDMDQ2Mzk2MzYxNkIwODFBRjA4MzE5Cis6MTAyNkIwMDAyRDQ5Nzg2QjQyNjhDMDQ2QkE2MDgyNjhDMDQ2RkE2MEFECis6MTAyNkMwMDAwMjY5QzA0NjdBNjE0MDY5QzA0NkI4NjEyRTRCQzgxODlECis6MTAyNkQwMDAwNDkwMDBGMDM3RjkwNDk4MDBGMDg4RjgwMEYwRjZGQTVBCis6MTAyNkUwMDA3ODhBRjE4Qjg4NDIwNEQxRjk2QTA4MTgwNEUwMzhFMDRFCis6MTAyNkYwMDAzMkUwM0E2QjEwMTg0MDFBODEwNzAyRDA4MDA4ODAwMDNGCis6MTAyNzAwMDAwNDMwNjE2QjA5MUFBMjZCOTE0MjAwRDIyMDZCQzA0NjYzCis6MTAyNzEwMDAyMDYyRTg3QjAwMjgwOEQwMDAyMkVBNzMwNTk5NDg2OTA2Cis6MTAyNzIwMDAwMTM4NDg2MTc4NkIwMEYwNzNGQTE4NDg4MDZBODAwNkI3Cis6MTAyNzMwMDA4MDBFMDEyODBBRDEyMDZBMDAwMzAwMEIwQjRDQTE2QTBECis6MTAyNzQwMDA4ODQyMDNEMDA2QjBGMEJDMDhCQzE4NDcwMTIwNDAwNDAyCis6MTAyNzUwMDAwODQ5QzA0NjA4NjAwNkUwRTA2ODAwMjgwMUQwMDBGMEEzCis6MTAyNzYwMDBCNUZBMDEyMEE4NzNFREU3NjgwRTAwODAwMDQwMTQ0MDIwCis6MTAyNzcwMDBBNDJBMDA4MDAwMDAwMEIwMjgxQTAwODA1NTU1NTU1NTQ1Cis6MTAyNzgwMDBBODAzMDA4MDY4MUEwMDgwQzQwQjAwMDAwMDAwMTA0MEZECis6MTAyNzkwMDA4MEI1MDcxQzc4NkE0MDg5RkYyMTAxMzEwMTQwMTA0ODRCCis6MTAyN0EwMDAwMkQxODE2QzAxMzE4MTY0Nzk2QTQ5ODk0OTBCMDJEMjc1Cis6MTAyN0IwMDA0MTZDMDEzMTQxNjQwQjQ4NDE2QTAxMzE0MTYyNzg2QUUwCis6MTAyN0MwMDAzOTZCQzA0NjQ4NjIzODZCMDBGMEY4RkIzODFDMDBGMEVCCis6MTAyN0QwMDBCM0Y4MDEyMDA0NDlDMDQ2Qzg3MzgwQkMwOEJDMTg0NzQwCis6MTAyN0UwMDBBNDJBMDA4MEEwODIyMDQwMTgxQTAwODBGOEI1MDcxQzk3Cis6MTAyN0YwMDAwMDIyRjkxRDYxMzEwRDFDNzg2QUMwNDYwMDkwNDA4OUE1Cis6MTAyODAwMDAwMzBDMDFEMjQwMEEwM0QyMzgxQ0ZGRjdDMUZGNjdFMDc2Cis6MTAyODEwMDAzNTQ4QzA2QjAwMDkxRkQzMDg3ODQwMDgxQ0QyMDAyMDNGCis6MTAyODIwMDA0MzAwQ0M1QTMxNEU5RTE5MzMyMzlCMDFGMzE4MUI4ODY5Cis6MTAyODMwMDA5QzQyMEVEMEI4NjkzOTZCQzA0Njg4NjFGODY4Mzk2QjI0Cis6MTAyODQwMDBDMDQ2Qzg2MDM4MUMwMEYwMjdGOTM4MUMwMEYwNzRGODQ2Cis6MTAyODUwMDA0NkUwMDEzMDAzMjhFM0RCMDIyMDQzMDA1QzE4RTQ4OEYzCis6MTAyODYwMDAyMjRFOUUxOTMzMjM5QjAxRjMxODFCODg5QzQyMDNEMUVGCis6MTAyODcwMDAwMTIzMDEzOEQ4NDJGMERDMDEyM0Q4NDJDNEQwMUI0RURBCis6MTAyODgwMDAwQjIzMUIwMkYwMTg0MDY5MDAyODI0RDA3RDYzMDA5OEI4Cis6MTAyODkwMDA0MDg5MDAwQzFGRDIwMDI0MkQyMzlCMDFGMDE4QzA2QjJGCis6MTAyOEEwMDAzNTFDMDAyODE3RDBGRTFEMkQzNkEyMDA1MjE5MkQyM0VECis6MTAyOEIwMDA5QjAxRDIxOEQyNkIzODFDMzExQzAyRjA3QkZDMDEyODIyCis6MTAyOEMwMDAwRUQwMDEzNEEwMDA0MDE5MkQyMzlCMDFDMDE4QzA2QjBECis6MTAyOEQwMDAwMDI4RUFEMTAxRTAwMTJBMDJEMDM4MUMwMEYwMDhGOEYzCis6MTAyOEUwMDBGOEJDMDhCQzE4NDcwMDAwRTgxQTAwODA2ODBFMDA4MDk5Cis6MTAyOEYwMDA4MEI1MDcxQ0I4NjkzOTZCQzA0Njg4NjFGODY4Mzk2QkM4Cis6MTAyOTAwMDBDMDQ2Qzg2MDc4NkE0MDg5MDEwQzBFRDI0MDBBMENEM0Q4Cis6MTAyOTEwMDAzODY4NDAwODAyRDMzODFDMDJGMDBDRkMzODFDMDBGMDY4Cis6MTAyOTIwMDBCQkY4MzgxQzAwRjAwOEY4MDJFMDM4MUNGRkY3MzBGRjU1Cis6MTAyOTMwMDAwMTIwODBCQzA4QkMxODQ3MDEyMTAwNkI0MDZBQzA0NkRBCis6MTAyOTQwMDAwMTYwNzA0N0IwQjRDMTFEMzkzMTA5OEI4OTA4MDkwNDkxCis6MTAyOTUwMDAwOTBDODQ2QUMyMUQ2MTMyMDAyMDAwMjkwQ0REODcwMDQ5Cis6MTAyOTYwMDAzRDE5MDEyMzlCMDcyQjQzMUI2OEMwNDZEMzUxMDEzMEZGCis6MTAyOTcwMDAwMDA0MDAwQzg4NDJGMkRCQjBCQzcwNDdGMEI1QTBCMDk4Cis6MTAyOTgwMDAwMTIzOUIwN0MxMUQyMTMxMTk0MzA5NjhDMDQ2MEI5MUUyCis6MTAyOTkwMDBDMTFENTMzMTE5NDMxRjkxMDk2ODAxQUZGQTFEMzkzMjI2Cis6MTAyOUEwMDAxRTkyMTdBQjU5ODAzQTQ5MDEyMzlCMDcwQTZBMTM0M0M5Cis6MTAyOUIwMDBDQzFEMTEzNDg5NjkwOTAzMDkwQjIyNjlFNTY4QzA0NkY5Cis6MTAyOUMwMDAxRDk1RkMxRDM5MzQ2NDhCNjQwOTA1MzQyNDA2MjQwRURFCis6MTAyOUQwMDAxQzk0NTYxQTFCOTYxQzlDMkU0QUMwNDYwMDkyMDEyNjM3Cis6MTAyOUUwMDAxRDlEMUE2ODkxNDIwMUQxMzIxQzBCRTA5MTQyMDNEOTFFCis6MTAyOUYwMDA1MjFCMUI5RUI1MTgwMEUwNTUxQTAxMjIyNDAxQUM0MjVGCis6MTAyQTAwMDAwMEQzMDAyMjAxMkFFNkQxOTEwNzAxNDMwOTY4QzA0NjlDCis6MTAyQTEwMDAzOTYwOTMwNzAxMUQxOTQzMDk2OEMwNDY3OTYwQzExRERCCis6MTAyQTIwMDAwMTMxMTk0MzA5NjhDMDQ2Qjk2MDFGOTkwOTY4MUU5QUE3Cis6MTAyQTMwMDBDMDQ2NTE4M0MxMUQxRDMxMTk0MzA5NjhDMDQ2Mzg2MzIyCis6MTAyQTQwMDA3OTYyQzExRDExMzExOTQzMDk2OEMwNDZCOTYxQzExREMwCis6MTAyQTUwMDAwNTMxMTk0MzA5NjhDMDQ2Rjk2MEMxMUQxNzMxMTk0MzkyCis6MTAyQTYwMDAwOTY4QzA0NkY5ODMwRTMwMTg0MzAwNjhDMDQ2Rjg4MUYzCis6MTAyQTcwMDAzODY4NDAwODAyRDMzODFDMDJGMDVDRkIzODFDMDBGMEI4Cis6MTAyQTgwMDAwQkY4MzgxQ0ZGRjc1OEZGMjBCMEYwQkMwOEJDMTg0NzAzCis6MTAyQTkwMDBBODAzMDA4MDU1NTU1NTU1RjhCNTA3MUNGODFEMzkzMDY5Cis6MTAyQUEwMDA0MThCMzk0QTkxNDIwMERENDI4MzQyOEJDMDQ2MDA5MkZECis6MTAyQUIwMDAwMTIwM0ExRDA2Q0FCQjZBMDJGMDBFRkYzMzRBQzA0NjI3Cis6MTAyQUMwMDAwMDkyMzM0RTMwNkEzMzRDRTE2RDQxMTgzODZCQzMxREIwCis6MTAyQUQwMDAwNTMzMDEyMDcyNkEwMkYwRkJGRUUwNkQxODMwMDAyNTFDCis6MTAyQUUwMDBCMTZBODE0MjAxRDhFNTY1MDBFMEUwNjUyRjIzOUIwMUQyCis6MTAyQUYwMDAyMDFDRTE2REU0MTgyMjY4OTIwMDI3NEJDMDQ2OTk1MEQzCis6MTAyQjAwMDAyNjQ4QzE2QjRBMDgwNUQzNDkwODQ5MDBDMTYzMDEyMDIyCis6MTAyQjEwMDAwMUYwRDZGRjIyNEExRjQ4QzExRDg5MzEwQjc4MDAyQkQ2Cis6MTAyQjIwMDAwMkQwNDk3ODAwMjkwMEQxMUU0QUMwNDYwMDkyMjA2ODkwCis6MTAyQjMwMDA4MDAwMTk0QkMzMTgwNUNFQzExRDExMzEwMTIwMDJGMEQwCis6MTAyQjQwMDBDN0ZFMTQ0ODIxNjgwMTMxMjE2MDE3MjkwMEQzMjU2MDkwCis6MTAyQjUwMDAzOTZCQzA0NjBENjU3OTZBM0E2QkMwNDY1MTYyMzMyM0MyCis6MTAyQjYwMDA5QjAxQzAxODgxNjgwMDI5MDNEMTM5NkJDMDQ2ODE2MDgwCis6MTAyQjcwMDAwNEUwMzk2QkMyNjhDMDQ2MTE2NTM5NkJDMDQ2QzE2MDVDCis6MTAyQjgwMDBGOEJDMDhCQzE4NDcwMDAwRUEwNTAwMDAxODAwMTQwMjUxCis6MTAyQjkwMDA3QzI5MDA4MDY4MEUwMDgwNDQ4MjIwNDBFODBFMDA4MDdFCis6MTAyQkEwMDAwNDAwMDAwMjA0MDAwMDAzRjBCNTExNEVGRjI1MDEzNUJBCis6MTAyQkIwMDAxMDRGQzA0NjM1NjA3ODY5MDEzODc4NjFCQzY4MDAyQ0Q4Cis6MTAyQkMwMDAxMEQwMjA2REMwNDZCODYwMjAxQzAwRjAyMUY4MjAxQ0Y5Cis6MTAyQkQwMDAwMEYwMDRGQTA4NDg4MDZBMDAwQzAwMDdFOUQxRjBCQzU0Cis6MTAyQkUwMDAwOEJDMTg0NzA1NDhDMTc5MDEzMUMxNzFGN0U3MDAwMEY5Cis6MTAyQkYwMDAwMDAwMDBCMDI4MUIwMDgwMDAwMDEwNDBBMDgyMjA0MDkwCis6MTAyQzAwMDAwMTIwODAwMzAxNDlDMDQ2MDg2MDcwNDcwMDAwMDBCMDAxCis6MTAyQzEwMDA5MEI1MDcxQzM4NjhDMDA4MDlEMzFENDgwMTZBMDEzOUZFCis6MTAyQzIwMDAwMTYyMjAzMDAwNzkwMDI4MDFEMEZFRjdFOUZEMDEyMzgwCis6MTAyQzMwMDA5QjA3RjgxRDFEMzAxODQzMDA2ODE2NEM2MTZBODE0MkRECis6MTAyQzQwMDAyMUQxMDExQzE5NDMwOTY4MDkwNDA5MEMwMTI5MUFEMTcxCis6MTAyQzUwMDAwMEYwMjJGODYwNjI2MDZBMjE2QTg4NDIwNUQwMDEyMTkyCis6MTAyQzYwMDA4OTA3MDE0MzA5NjgwOTA0RjJEMDUxMjE4OTAzNjI2QTg2Cis6MTAyQzcwMDAyMzZCOUE0MjAyRDE2MDZCQTI2QjgwMUEwNDM4Qzg2MDQxCis6MTAyQzgwMDA5MEJDMDhCQzE4NDcwMDIwNzk2QUMwNDYwODYwRjdFNzg2Cis6MTAyQzkwMDA2QzA2MDA4MEU4MUEwMDgwMDEyMzlCMDdDMTFEMDEzMUVBCis6MTAyQ0EwMDAxOTQzMDk2ODA5MDQwOTBDMDgxODBEMzA4MTA3MDJEMDdFCis6MTAyQ0IwMDA4MDA4ODAwMDA0MzAwNDQ5OEE2QjEyMTg0QjZCOUE0MkRBCis6MTAyQ0MwMDAwMEQ5MDg2QjcwNDcwMDAwRTgxQTAwODAwMEI1MDQ0ODdFCis6MTAyQ0QwMDBDMDY4MTAyODAxRDMwMEYwMDVGODA4QkMxODQ3MDAwMEIwCis6MTAyQ0UwMDBFODFBMDA4MDg4QjUwQzRGMzg3OTAwMjgxMUQxMEI0OUJCCis6MTAyQ0YwMDAxMDIwMDJGMEY1RkQwMDI4MEJEMDAxMjAzODcxMDg0QUExCis6MTAyRDAwMDBDMDQ2MDA5MjA3NDg0MjY4MDc0QjAxNjgwMDIwMDJGMDY1Cis6MTAyRDEwMDBERkZEODhCQzA4QkMxODQ3RjgxQTAwODBGNTJDRkZGRkJGCis6MTAyRDIwMDAxMDAwMzUwMjdDMjkwMDgwNDQ4MDIwNDA5MEI1MDEyMEFECis6MTAyRDMwMDA0MDAyMTA0OUMwNDYwODYwMEY0RjEwMjFGODFEM0QzMDc5Cis6MTAyRDQwMDAwMkYwNENGQzE5MjNEQjAxRkMxOEUwNjgwMDI4MDFEMERDCis6MTAyRDUwMDAwMEYwMTRGODAwMjBDOTIzMUIwMUY5MTgwODcxRTA2ODdECis6MTAyRDYwMDAxMDI4MDREMzAxMjBCQjIzMUIwMUY5MTg0ODczOTBCQzIxCis6MTAyRDcwMDAwOEJDMTg0NzAwMDAwMEIwNjgwRTAwODBGOEI1Mzc0ODVFCis6MTAyRDgwMDAxOTIzREIwMUMxMThDOTY4MzU0RDEwMjkwMEQ5MTAyMTVDCis6MTAyRDkwMDA2OTYyMzI0OEMxNkMwMDZFODE0MjA3RDkwODFBMDcwOTdFCis6MTAyREEwMDAwMDI0Njg2QUI4NDIxMkQyMDcxQzEwRTA4MTQyMkFEMjdECis6MTAyREIwMDAyQzRBNTI2QjEwMUEwNzA5Njg2QUI4NDIwNUQ5MEMwOUU3Cis6MTAyREMwMDAzOTE5ODg0MjAzRDJDNDFCMDFFMDAwMjQwNzFDM0UxOUI0Cis6MTAyREQwMDAzMDAxMjU0OTAyRjA4NEZEMDAyODNERDAyMzQ4MDAyQzE1Cis6MTAyREUwMDAxQUQxMUU0OTNBMDE2RjYyMDk2RThDMTgxRDRENkI2QjJBCis6MTAyREYwMDBBMzQyMDBEOEU0MUExRTRCMUE0MzAwOTJFQTZBNTExODAzCis6MTAyRTAwMDAyQTZCMDMxQzIwRTAxQjQ4MDE2QjAxMzEwMTYzMDAyMDg5Cis6MTAyRTEwMDA2ODYyRjhCQzA4QkMxODQ3MTA0OTI0MDEzRjAxMTEyMjIwCis6MTAyRTIwMDA1MjA1M0E0MzZFNjIwMDkyMEU0REVBNkEwOTZFNTExOERECis6MTAyRTMwMDAwMzFDMDYxQzAwMjAyQTZCMDJGMDRBRkQwQzRBMjI0M0E4Cis6MTAyRTQwMDAwMDkyQkIxOUU5NkEyQTZCMDAyMDAyRjA0MUZEMDM0ODk5Cis6MTAyRTUwMDBDMDQ2MDQ2NjAwRjAxMEY4MDEyMERBRTc2ODBFMDA4MDMyCis6MTAyRTYwMDAyODFCMDA4MDdDMjkwMDgwNUQyRUZGRkY0NDgwMjA0MENECis6MTAyRTcwMDAwMDAwMzYwMkEwODIyMDQwMDQ0ODAxNkUwNDRBODAzMERGCis6MTAyRTgwMDBEMTYwMDIyM0MxNkIxOTQzQzE2MzcwNDc2ODBFMDA4MDkzCis6MTAyRTkwMDA5MEVFMjA0MEYwQjU4NEIwMDEyMDgwMDIxQzQ5QzA0NjZECis6MTAyRUEwMDAwODYwMDAyNzFCNEUzMzIzOUIwMUY1MTg2ODZBMDAyODMxCis6MTAyRUIwMDAxREQ5MTk0QzY4NDYxMDIxMDJGMDkwRkI2ODQ2MDBGMEJECis6MTAyRUMwMDAzM0Y4MDAyODA0RDAxNTQ5NDg2OTAxMzA0ODYxMEFFMDA4Cis6MTAyRUQwMDAxMzQ5NjA3QjAxMzA2MDczODg3OTAxMzA4ODcxMTE0ODMzCis6MTAyRUUwMDAwMDY4MDJGMDY1Rjk2ODZBMDEzN0I4NDJFMkQ4QkIyMzhFCis6MTAyRUYwMDAxQjAxRjAxODgxN0IwMDI5MDNEMDAwMjE4MTczRkZGN0FCCis6MTAyRjAwMDAwNUZCRkZGN0UzRkUwNEIwRjBCQzA4QkMxODQ3MDAwMDY3Cis6MTAyRjEwMDAwMDAwMDBCMDY4MEUwMDgwQjA4MjIwNDAwODgzMjA0MDhFCis6MTAyRjIwMDBBMDgyMjA0MDU4MDQwMDgwOTBCNDE3NEYxOTIzREIwMTgxCis6MTAyRjMwMDBGOTE4MDAyMkNCNjgwMDJCMjNEMDAxM0JDQjYwMzMyMzUwCis6MTAyRjQwMDA5QjAxRkYxOEJCNjkxQzZEQzA0NkJDNjEwNDY4QzA0NjhDCis6MTAyRjUwMDA1QzYwNDQ2OEMwNDY5QzYwODQ2OEMwNDYxQzYxQzA2ODcwCis6MTAyRjYwMDBDMDQ2NTg2MTFBNjUwODY5NDIxQzBBNjEwMDI4MDNEMEVFCis6MTAyRjcwMDAzODZBQzA0NjAzNjUwMEUwRkI2MTNCNjIxODFDOTBCQ0U4Cis6MTAyRjgwMDA3MDQ3MTAxQ0ZCRTcwMDAwNjgwRTAwODAwQTRBMzMyM0RDCis6MTAyRjkwMDA5QjAxRDExOEM4NjkxOTIzREIwMUQyMTgxMzY5MDAyQkQyCis6MTAyRkEwMDAwNkQwMDEzQjEzNjFDQTY5MTI2REMwNDZDQTYxNzA0NzAxCis6MTAyRkIwMDAwMDIxMTE2MUZCRTcwMDAwNjgwRTAwODAwNjRBMTE2OURDCis6MTAyRkMwMDA0QjFDMTM2MTQwMzIwMDI5MDFEMEQxNjkwMEUwMDAyMTdGCis6MTAyRkQwMDAwMTY1RDA2MTcwNDcwMDAwRTgxQTAwODAwNjRBRDE2ODk4Cis6MTAyRkUwMDA0QjFDRDM2MDQwMzIwMDI5MDFEMDkxNjkwMEUwMDAyMUUwCis6MTAyRkYwMDAwMTY1OTA2MTcwNDcwMDAwRTgxQTAwODA5MEI0MDAyMURDCis6MTAzMDAwMDAwRjRBOTc4OTkyNkE0QjAwMUIxODlCOEEwMDJCMTJEMDlCCis6MTAzMDEwMDBCQjQyMTBEQzFDMUM1ODIzNjM0M0QzMThEQzFGNDkzQzAzCis6MTAzMDIwMDAwMTIzOUIwNzIzNDMxQjY4MUIwNjFCMEUwMzJCMDJEMEE3Cis6MTAzMDMwMDAwMDIwOTBCQzcwNDcwMTMxMDQyOUU0RDMwMTIwRjhFNzU3Cis6MTAzMDQwMDA0QzJBMDA4MEY3QjU4NkIwM0Q0QTA3MUNEMTY5OEY0MEY1Cis6MTAzMDUwMDAwMzFDMTQ2QUUzNDA1RjQwMDc5RThFNDA3NzQwQ0Y0MEQ4Cis6MTAzMDYwMDA5NDY5QzA0NjA1OTQwMzFDQTM0MDAwMjUxNDY5QzA0NjFBCis6MTAzMDcwMDAwNDk0MDAyQzVERDkxQzFDMzI0RTI2NDM5NDY5RTY0MDEyCis6MTAzMDgwMDAzMzFDMDM5NjUzNkFDMDQ2MDI5M0QyNkFDMDQ2MDE5MjJCCis6MTAzMDkwMDBCQjAwMDI5QUQyNTgxMzFDMDU5Q0UzNDAwMzlDQTM0MjM4Cis6MTAzMEEwMDAzRUQxOEE0MENBNDAxNDFDNjMwMDFCMTk1QjAxMDE5QTdGCis6MTAzMEIwMDBEMjE4MDEyMzlCMDdENjFEMDEzNjMzNDMxQjY4MUIwNjFDCis6MTAzMEMwMDAxQjBFMDMyQjJDRDEwMTIzOUIwN0Q2MUQ1MTM2MzM0M0Y2Cis6MTAzMEQwMDAxQjY4MDc5RTFFNDAwMDk2MDEyMzlCMDdENjFENDkzNjlDCis6MTAzMEUwMDAzMzQzMUI2ODgzNDIxQkQxMDEyMzlCMDdENjFENEQzNkZBCis6MTAzMEYwMDAzMzQzMUI2ODAwOUVCMzQyMTJEMTAxMjM5QjA3MUE0MzNFCis6MTAzMTAwMDAxMjY4MTIwNDEyMEMwODlCMzIyQjA0RDEwMjJBMDdEMTM4Cis6MTAzMTEwMDAyMDA0MDAxNDBGRTAwODlCMzMyQjAxRDEwMTJBRjdEMEMzCis6MTAzMTIwMDAwNDlBMDEzNzk3NDIwMEQzMDAyNzA0OUEwMTM1QUE0MjM2Cis6MTAzMTMwMDBBRUQ4MDAyMEMwNDMwOUIwRjBCQzA4QkMxODQ3MDAwMDVFCis6MTAzMTQwMDA0QzJBMDA4MDAwMDAwMDgwRjBCNTI3NEQ2ODY5MDAyOEY3Cis6MTAzMTUwMDAwNkQwMjY0ODAwNjgwMkYwMkJGOEYwQkMwOEJDMTg0N0RGCis6MTAzMTYwMDAyMzRDMDAyNkEwNjgyMzRGMDAyODE2RDAwRkUwMjg2QUMxCis6MTAzMTcwMDAwMjI4MDJEMzAxMjAzODcxMEZFMEE2NjBGREY3REVGRUMxCis6MTAzMTgwMDAwMDI4RUFEMTI4NkEwMjI4MDFEMzAxMjAzODcxRTg2OEIyCis6MTAzMTkwMDAwMDI4MDJEMDM4NzkwMDI4RTlEMDY4NjgwMDI4MUJEMEMwCis6MTAzMUEwMDAwMTIwQTA2MEZFRjdCQ0ZCMDAyOEQ2RDE2ODY4MDAyODhCCis6MTAzMUIwMDBGNkQxMTFFMDAwMjhEMEQxMjg2QTAyMjgwMkQzMDEyMERDCis6MTAzMUMwMDAzODcxQ0FFN0E2NjBGREY3QjlGRTAwMjhDNUQxMjg2QUE0Cis6MTAzMUQwMDAwMjI4MDFEMzAxMjAzODcxRTg2ODAwMjhCREQwMzg3OTcxCis6MTAzMUUwMDAwMDI4RTdEMEI5RTcwMDAwNkMwNjAwODA1QzA0MDA4MDhFCis6MTAzMUYwMDA0QzJBMDA4MDhDMDYwMDgwNzA0NzAwMDA3MDQ3MDAwMDU5Cis6MTAzMjAwMDA3MDQ3MDAwMDkwQjU0MDIwMUQ0OUMwNDYwODYwMDFGMDlECis6MTAzMjEwMDA5REZDMDMyMzFCMDc0MTY4MTk0MDBDMEY2MTAxMDkxQjJBCis6MTAzMjIwMDA4OTAwMTg0QThGMTgwMTIxMzk4MDgxNkFDMDQ2Nzk2NTYyCis6MTAzMjMwMDA0MTZBQzA0Njc5NjdCOTZDRkE2Qzg5MThCOTY0MDAyMTkzCis6MTAzMjQwMDBGOTY0QkE2QjNCNkREMjE4QkE2MzM5NjU0MjZBMjAzMkIxCis6MTAzMjUwMDA1MTcxNzk2RDdBNkZEMjZEQzA0NjExNjBGQ0Y3Q0FGRjZCCis6MTAzMjYwMDAyMDAxMDk0OTQwMTgxOTIzREIwMUMwMTg0MTZCMDEzOUJECis6MTAzMjcwMDA0MTYzNzg2RjAxRjBDNkZCOTBCQzA4QkMxODQ3MDAwMEEyCis6MTAzMjgwMDAwMDAwMDBCMDVDMkIwMDgwQTAxQzAwODBGMEI1NDAyMDQ2Cis6MTAzMjkwMDAxMjQ5QzA0NjA4NjAwMUYwNTlGQzA3MUM0MDY4MDMyMzJFCis6MTAzMkEwMDAxQjA3MTg0MDA2MEY3MDAxODAxQjgwMDAwQzQ5NDQxODUyCis6MTAzMkIwMDBCODZBQzA0NjYwNjU3ODZBQzA0NjYwNjc4MDZGMDUxRDYxCis6MTAzMkMwMDBFNTYzQjk2OTI4MUMwMkYwODlGOTM4MUMyMTFDMzIxQ0ZECis6MTAzMkQwMDAyQjFDMDBGMDIwRjhGMEJDMDhCQzE4NDcwMDAwMDBCMDIwCis6MTAzMkUwMDA1QzJCMDA4MEYwQjU0QjZGOUI2RjFGMURDRjYzMDU2ODkzCis6MTAzMkYwMDAwMDIzODQ2OUE0MDgwOEQwOUMwMDJFNTlDMDQ2M0U1MTgyCis6MTAzMzAwMDA4NDY5QTQwODAxMzM5QzQyRjZEODNCMUMwMEYwMDNGODAyCis6MTAzMzEwMDBGMEJDMDhCQzE4NDdGRkI1ODFCMDA0MUMxRDFDMEYxQzc1Cis6MTAzMzIwMDA0NjQ4MDE2OTAxMzEwMTYxRjkxRDUxMzFCRDY1MDA5MUM2Cis6MTAzMzMwMDAyMDFDRkRGNzVERkNGODZENDAwOTM2RDJCODZEMDY3QkE4Cis6MTAzMzQwMDA0MzdCMUIwMjFFNDMxNzIxNDkwMjAxNzMwQjBBNDM3MzdGCis6MTAzMzUwMDAwMDk5MjAxQ0ZERjc0Q0ZDQjg2REMwNDYwNjczMzMwQTdCCis6MTAzMzYwMDA0MzczRjg2RDQwMDkyMEQyNjA2ODAxMDQwOTBDMDM5ODhBCis6MTAzMzcwMDAwMUYwQ0NGQzYwNjgzMjRCMTg0MzYwNjAyMDFDMDFGMDA3Cis6MTAzMzgwMDAzNUZEMDAyNTdENjBCRDYwM0Q2NDdENjQyMDFDRkNGNzNCCis6MTAzMzkwMDAzMUZGMzg4ODQwMjMxODQzMzg4MDdENjIyOTQ4QzA0NjcxCis6MTAzM0EwMDBCODYyMzgxQzAwRjBBMEZCNDRFMDIwNjgwMTIzOUIwN0IyCis6MTAzM0IwMDAwODM4MTg0MzAwNjhDMDQ2Nzg2NDYwNjgwMjA0MTIwQzNDCis6MTAzM0MwMDA3ODZFMDEyNkMxMUQwRDMxOEE0MjAyRDIzQTY0MDgxQzcyCis6MTAzM0QwMDAwRUUwNDExOTg5ODlGMDIzMTk0MDA5MDk4OTAwNDAxODM0Cis6MTAzM0UwMDBGODYwRjk2MTYxNjgwOTA0MDkwQzgxNDIxNkQyMzk2NEY4Cis6MTAzM0YwMDA2MzY4MTkwNDA5MEM0MDFBMDMzMDgwMDg4MjAwQTA2MTM4Cis6MTAzNDAwMDAyMDY4MDkxODlCMTg2MzYwQzMxRjA1M0IzODFDMDBGMDM3Cis6MTAzNDEwMDBCNkZBN0U4MDIwMUMwMEYwQkZGQjBCRTBCOTY4MDgxQUVBCis6MTAzNDIwMDAwMDI1Nzg2MkJENjIzODFDMDBGMDNDRkMyMDFDMzkxQzcxCis6MTAzNDMwMDAwMEYwNjRGODA1QjBGMEJDMDhCQzE4NDcwQzJCMDA4MDA1Cis6MTAzNDQwMDAwMDAwMDA4MDAxMDAwMEMwRjBCNTA0MUMwRjFDMzg2Q0E3Cis6MTAzNDUwMDBGOTZCMEQxODIxNjg0MTE4MDAyMEEyNjkwMDJBMEJEOUM4Cis6MTAzNDYwMDA4MjAwNTYxODAxMjM5QjA3MzM0MzFCNjhDMDQ2QUI1MEFDCis6MTAzNDcwMDBBMjY5MDEzMDgyNDJGM0Q4Nzg2RUY5NkIwOTE4ODk4OTA0Cis6MTAzNDgwMDBGMDIzMTk0MDA5MDk4OTAwNDAxOEY4NjBGOTYxMjA2OEEzCis6MTAzNDkwMDAwMTIzOUIwNzA4MzgxODQzMDE2ODc4NkNGQ0Y3OTVGRkY3Cis6MTAzNEEwMDA3ODY0NjA2ODAxMDQwOTBDRjg2ODgxNDIxOUQyMzk2NEIzCis6MTAzNEIwMDA2MzY4MTkwNDA5MEM0MDFBMDMzMDgwMDg4MjAwQTA2MTc3Cis6MTAzNEMwMDAyMDY4MDkxODlCMTg2MzYwQzMxRjA1M0IzODFDMDBGMDc3Cis6MTAzNEQwMDA1NkZBMDEyMDc4ODAyMDFDMDBGMDVFRkJGMEJDMDhCQzhFCis6MTAzNEUwMDAxODQ3Qjk2ODA4MUE3ODYyMDAyMEI4NjIzODFDMDBGMEUyCis6MTAzNEYwMDBEOUZCMjAxQzM5MUMwMEYwMDFGOEVGRTdGMEI1ODRCMENGCis6MTAzNTAwMDAwNDFDMEYxQzhFNDg0MTY5MDEzMTQxNjEwMzIwMDAwN0YyCis6MTAzNTEwMDA2MTY4MDg0MDA2MEYwQTA0MTIwQzIwNjgxMTE4RkI2ODQ1Cis6MTAzNTIwMDBEMjFBN0I2ODlEMUFDMzFGMDUzQjM4MUMyQTFDMDBGMDY5Cis6MTAzNTMwMDAyNkZBMDAyMDc4ODAyMDFDMDBGMDJFRkI2MDY4NDAxOURECis6MTAzNTQwMDAwMTA0MDkwQzYwNjAzMDFDMDFGMEUwRkI3RDRFMEIyMzkwCis6MTAzNTUwMDAxQjAyRjAxODAwNjkwMDI4MTlEMDAwMjUyRDIzOUIwMUJCCis6MTAzNTYwMDBGMDE4QzA2ODAwMjgxMkQwQUEwMDkyMTkyRDIzOUIwMUUwCis6MTAzNTcwMDBEMjE4RDI2ODIwMUMzOTFDMDFGMDFDRkUwMTM1QTgwMEFECis6MTAzNTgwMDA4MDE5MkQyMzlCMDFDMDE4QzA2ODAwMjhFQ0QxRjg2QjZFCis6MTAzNTkwMDAwMTFGOEExQ0ZBNjNGQTY4N0Q2QzAwRjBCQkY5QzA0MzE2Cis6MTAzNUEwMDAwMTA0MDkwQzI4MUNGQ0Y3MTBGRjAzOTBGOTZCM0E2RTFDCis6MTAzNUIwMDA4RTE4MjA2ODEyMTgwMTkyN0E2RThEMTgxMTE4MDI5MUQ3Cis6MTAzNUMwMDBDODFEMDkzMEUwNjBCMTg4MDgwMjA5MEEwOTA2MDkwRTIxCis6MTAzNUQwMDAwODQzMDAwNDAwMEM3ODYxNjg2ODAxMEVGRjIyMTIwNEExCis6MTAzNUUwMDAwMjQwMTIwQTExNDNGRjIyMTIwMjAyNDAxMjAyMTE0MzRBCis6MTAzNUYwMDAwMDA2MDg0MzM4NjFBODg5MDkyMzFCMDIxODQwQjg2MUY2Cis6MTAzNjAwMDBBODg5OTg0M0E4ODFBODg5MDI5OUMwNDY4ODgxMDAyMDhBCis6MTAzNjEwMDA3MDgwQjA4MDcwODE2ODYwMjg4MkI5NkUzMDFDRkNGN0MxCis6MTAzNjIwMDBFOEZFMzg4NkZBNjkzMDFDMjkxQ0ZDRjcwM0ZGNzg4NjBGCis6MTAzNjMwMDAzRDhFNzg4RTAzOTlGQ0Y3QzhGRTAwOTA2MDY4MDAwNDA4Cis6MTAzNjQwMDAwMDBDMzk2RTQxMUEwOTA0MDkwQzdBNkU4MjFBMTMwNEFGCis6MTAzNjUwMDAxQjBDMUEwMjFCMEExQTQzMTYwNDM2MENCQTY4ODI0MjYzCis6MTAzNjYwMDAwMUQyMDAyMDAwRTAxMDFBQjg2MDA4MDIwOTEyMDkwNjExCis6MTAzNjcwMDAwOTBFMDg0MzAxMDQwOTBDMDE5OEMwNDY0MTgwMjgxQzJBCis6MTAzNjgwMDBGQ0Y3QTNGRTA1MUMwMDk4MzExQ0ZDRjc5RUZFMDYxQ0VGCis6MTAzNjkwMDA3ODY5MDAwNDAwMEMwMTAyMDAwQTA4NDMwMTA0MDkwQ0M3Cis6MTAzNkEwMDAwMTk4QzA0NjgxODAyODFDRkNGNzhGRkU3OTY5MDEzMUEyCis6MTAzNkIwMDBDMDQzNzk2MTAxOUFDMDQ2NTA4MTM4NjkwMTBFRkYyMkVBCis6MTAzNkMwMDAxMjA0MDI0MDEyMEExMTQzRkYyMjEyMDIwMjQwMTIwMkE3Cis6MTAzNkQwMDAxMTQzMDAwNjAxNDMzMDFDRkNGNzc3RkUzOTY5N0E2ODE0Cis6MTAzNkUwMDA4OTE4Mzk2MUI5NjgwMDI5MDlEMTAyOTk4OTg5QkE2OUFCCis6MTAzNkYwMDAxMTQzMDI5QUMwNDY5MTgxQjk2OUZDRjc2NkZFMjA4MkE3Cis6MTAzNzAwMDAwMDIwNjA4MkY4NkQ0MTA4MTZEMzgwMEEwQUQzNjA2OEYxCis6MTAzNzEwMDAxMDM4MDEwNDA5MEMwODAyMDkwQTA4NDMyMTY4QzA0NjUwCis6MTAzNzIwMDAwODgyMDlFMDYwNjgwQzM4MDEwNDA5MEMwODAyMDkwQUUzCis6MTAzNzMwMDAwODQzMjE2OEMwNDY4ODgxMDRCMEYwQkMwOEJDMTg0NzIzCis6MTAzNzQwMDAwQzJCMDA4MDY4MEUwMDgwRjFCNTg0QjA2RTREMjg2OUE2Cis6MTAzNzUwMDAwMTIyMDQ5OThBNDA5MDQzMjg2MTA0OTg0MzAxMTgxQTcxCis6MTAzNzYwMDA4MDAwMTYxQzY5NDk0NDE4RTA2QkMwNDYwMDkwQTA2OEIwCis6MTAzNzcwMDAwMDI4MDFEMTAwMjYyNkUwNjU0ODQxNjkwMTMxNDE2MUY4Cis6MTAzNzgwMDAwNDk4RkNGNzA5RkQwNzFDMDNEMTI4NjkzMDQzMjg2MTIwCis6MTAzNzkwMDBCNUUwQTA2ODY1NjhBODQyMDBEMjA1MUNBMTZDQTk0MkVBCis6MTAzN0EwMDAxNkQyNDAxQTYyNkExMDFBMDAyNjYwNjJBNjYwQTY2MkVCCis6MTAzN0IwMDAyMDg4NDgyMzE4NDMyMDgwMEQxQzA5RDEzODFDRkNGN0IxCis6MTAzN0MwMDAxOUZEMDMyMDYwODA2NjYwMjAxQzAwRjA4REY5OTZFMEYyCis6MTAzN0QwMDBFMTY4Mzg2ODA5MThDMzFGMDUzQjIwMUMwMjM5MkExQzAwCis6MTAzN0UwMDAwMEYwQ0RGODM4MUMwMEYwRDdGOUUwNjg0NjE5Nzg2ODg5Cis6MTAzN0YwMDAzMDQzNzg2MDA0OTgzMTFDMDFGMDg4RkEyMTZFMDA5OEZCCis6MTAzODAwMDAwODE4MDE5MDcwMUEwMDA0MDAwQzYxNkU3MTFBMEEwNDA1Cis6MTAzODEwMDAxMjBDMTEwMjEyMEExMTQzMDkwNDA5MEMwMjkxMDEwMjRGCis6MTAzODIwMDAwMDBBMDg0MzAxMDQwOTBDMDE5OEMwNDY0MTgwMjA4RTFCCis6MTAzODMwMDBGQ0Y3Q0JGRDA2MUM2MDhFMDI5OUZDRjdDNkZEMDM5MEQ5Cis6MTAzODQwMDA2MDY5MDEwNDA5MEMwODAyMDkwQTA4NDMwMTA0MDkwQzEzCis6MTAzODUwMDAwMTk4QzA0NjgxODAzMDFDRkNGN0I3RkQ2MTY5MDEzMUQ5Cis6MTAzODYwMDBDMDQzNjE2MTAxOTlDMDQ2NDg4MTYwNkUwMDk5NDYxODY1Cis6MTAzODcwMDAyMDY5MDEwRUZGMjIxMjA0MDI0MDEyMEExMTQzRkYyMkE2Cis6MTAzODgwMDAxMjAyMDI0MDEyMDIxMTQzMDAwNjAxNDM3MTYwMDM5OEM0Cis6MTAzODkwMDBGQ0Y3OUJGRDIxNjk0OTE5MjE2MUExNjg0OTFCQTE2MEMxCis6MTAzOEEwMDAwNkQxQjE4OUEyNjkxMTQzQjE4MUExNjlGQ0Y3OERGREVGCis6MTAzOEIwMDAzODgyNjE2RTM4NjgwOTE4MEUzMUY5NjBFMjY4MDA5OTQzCis6MTAzOEMwMDAwNDM4MDBGMDRDRjgwMjIwNzg4MkUwNkQ0MTA4MTZEM0VECis6MTAzOEQwMDA4MDBBMEFEMzc4NjgxMDM4MDEwNDA5MEMwODAyMDkwQTIyCis6MTAzOEUwMDAwODQzMzk2OEMwNDZDODgxMDlFMDc4NjgwQzM4MDEwNDhCCis6MTAzOEYwMDAwOTBDMDgwMjA5MEEwODQzMzk2OEMwNDY0ODgxMDVCMDI2Cis6MTAzOTAwMDBGMEJDMDhCQzE4NDcwMDAwRDAyQzAwODA1QzJCMDA4MDY1Cis6MTAzOTEwMDAwQzJCMDA4MEY3QjUwMzFDMEYxQzAwMjAxQzY4MjYwNDJDCis6MTAzOTIwMDAzMTFDMUQxREZDRjc1MUZENDBDNzAyOUFEMTFDODkwOEFFCis6MTAzOTMwMDAwMTM5NEExRTAyOTIwMDI5MEREMDIxMEMxMENEMjIwNDFCCis6MTAzOTQwMDAwQTQzMTExQzE2MUNGQ0Y3NDBGRDQwQzcwMjk5NEExRTkxCis6MTAzOTUwMDAwMjkyMDAyOUYxRDEwM0IwRjBCQzA4QkMxODQ3ODAwOERFCis6MTAzOTYwMDA4MDAwODkwODg5MDAwMzMyOTMwODVBMUUwMDJCMDVEMDc1Cis6MTAzOTcwMDAwOEM5MDhDMDEzMUMwMTNBMDAyQkY5RDE3MDQ3RkZCNUU0Cis6MTAzOTgwMDA4NkIwMTcxQzAwMjYwNjk4ODA2Q0MwMUIwNjk5QzA0NjlFCis6MTAzOTkwMDA4ODY0MDEyMEMwMDUwNjk5ODk2QkMwNDYwMTkxMDY5OThCCis6MTAzOUEwMDA0QzZCNjdFMDIxNjhDMDQ2MDI5MTYxNjhDMDQ2MDM5MTk0Cis6MTAzOUIwMDBBMTY4QzA0NjA0OTEwMkE5NDk4OEI5NDIwOEQyMDJBRDYzCis6MTAzOUMwMDA2RDg4MDJBOTQ5ODg3RjFBMDAyMTAyQUI1OTgwMTlFMDRECis6MTAzOUQwMDAwMkE5NDk4OEM5MUIwMkFCNTk4MDNEMUMwMDI3MDEyMTVGCis6MTAzOUUwMDA0OTA2MDc5QjlBMDc5MjBGMEREMEVCMDZEQjBFMDhEMDE1Cis6MTAzOUYwMDAxRTJCMDhEMzFFMkIwMkQxMDMyQTA0RDEwMUUwMDIyQTc4Cis6MTAzQTAwMDAwMUQzMDEyNjAwMjEyOTQzMDE0MzBBMUMwMDkxMDAyMDEzCis6MTAzQTEwMDAwMzk5MDQ5QTA3OUIwMUYwNUJGRjA3OTk0OTE5MDc5MUU1Cis6MTAzQTIwMDAwMDJFMEFEMDFENEFDMDQ2MDA5MjFENDgwMTZENDI2RDBECis6MTAzQTMwMDAwMDIwMDc5QjAxRjA0Q0ZGMDAyNjAyQTg0MDg4MDAyOEM4Cis6MTAzQTQwMDAwQ0QwMDM5ODQwMTkwMzkwMDI5OEMwNDYyMDYwMDM5ODU4Cis6MTAzQTUwMDBDMDQ2NjA2MDA0OThDMDQ2QTA2MDAzRTAwMTk4MDEzODQ5Cis6MTAzQTYwMDAwMTkwMTAzNDA2OThDMDQ2NDQ2MzAxOTgwNjk5QzA0NkY4Cis6MTAzQTcwMDA4ODYzMDAyMDAwMkYwMkQwMDE5OTAwMjk5MkQxMDk0QUMxCis6MTAzQTgwMDBDMDQ2MDA5MjA2NDgwMTZENDI2RDAwMjAwOTlCMDFGMDdFCis6MTAzQTkwMDAxRkZGMEFCMEYwQkMwOEJDMTg0NzAwMDAwMTAwMDAwMjdDCis6MTAzQUEwMDA3QzI5MDA4MDA0MDA1MzAyOTBCNTBDMUMwNzFDMzg2ODY4Cis6MTAzQUIwMDAwMTIzOUIwNzA4MzgxODQzMDE2ODM4OEFGQ0Y3ODVGQzA2Cis6MTAzQUMwMDBDMDQzRjk2OEMwNDYwODgwNzg4QTM5NjgwODFBMzg2MEE3Cis6MTAzQUQwMDAzODFDMDFGMDhCRjkzODFDRkNGNzhDRkIyMDFDRkZGNzFECis6MTAzQUUwMDAzM0ZFOTBCQzA4QkMxODQ3ODBCNTAxODg4QTA5MjFEM0YxCis6MTAzQUYwMDBDQTA5MUZEMjhBMDgxREQzMDAyMTAxODA0MTgwNDc2RjY3Cis6MTAzQjAwMDA0MDZERkExRDE5MzI1MTcxRkE2REMwNDYxMDYwM0E2RTVGCis6MTAzQjEwMDBDMDQ2MTA2MDBDNDhDMDQ2ODE2M0MxNkI0OTA4NDkwMDJCCis6MTAzQjIwMDBDMTYzMDEyMDAwRjBDQ0ZGMzgxQzAwRjA2QkZGODBCQ0FCCis6MTAzQjMwMDAwOEJDMTg0NzgwMjMxOTQzMDE4MDAxODg0OTA5RjZEMjNGCis6MTAzQjQwMDAwMEYwQjBGOEYzRTcwMDAwRTgwRTAwODBGMEI1MDcxQ0M1Cis6MTAzQjUwMDAxMDFDMEQxQzAwMjQ1RTFFMDAyQjE5RDAwMTY4QzA0NkVECis6MTAzQjYwMDAzOTYwNDE4ODBDMTk0MTY4QzA0Njc5NjA4MTY4QzA0NjU3Cis6MTAzQjcwMDBCOTYwQzE2OEMwNDZGOTYwMTAzMDEwMzdFOTZBODE0MjA3Cis6MTAzQjgwMDAwMkQ4MjgxQzAwRjBFQ0ZGMzExQzAxM0UwMDI5RTVEMUQxCis6MTAzQjkwMDAyMDFDRjBCQzA4QkMxODQ3MDAyMUMxNjEwNTQ5MEE2ODE3Cis6MTAzQkEwMDAwMDJBMDFEMTA4NjAwMkUwNEE2OEMwNDZEMDYxNDg2MDNFCis6MTAzQkIwMDA3MDQ3MDAwMEQwMkMwMDgwMDM0OTA4NjgwMDI4MDJEMDFDCis6MTAzQkMwMDBDMjY5QzA0NjBBNjA3MDQ3RDAyQzAwODAwMDIxODE2NzFFCis6MTAzQkQwMDAwNTQ5OEE2ODAwMkEwMUQxODg2MDAyRTBDQTY4QzA0NkE3Cis6MTAzQkUwMDA5MDY3Qzg2MDcwNDcwMDAwRDAyQzAwODAwMzQ5ODg2ODQ3Cis6MTAzQkYwMDAwMDI4MDJEMDgyNkZDMDQ2OEE2MDcwNDdEMDJDMDA4MEI3Cis6MTAzQzAwMDAwMEI1ODAyMDEzNDlDMDQ2MDg2MEZGRjdENUZGMDAyOEEzCis6MTAzQzEwMDAxQkQwMDMyMzFCMDc0MTY4MTk0MDBBMEY1MTAxODkxQTYxCis6MTAzQzIwMDA4OTAwMEQ0QkM5MTg0Qjg4MDAyQjA0RDExMTFDRkZGN0RDCis6MTAzQzMwMDAzQkZGMDhCQzE4NDcwMTJCMDJEMUZGRjcwNUZDRjhFNzUyCis6MTAzQzQwMDAwMjJCRjZEMUZGRjc0RUZCRjNFNzA0NDgwMTZEMDEzMTdCCis6MTAzQzUwMDAwMTY1RUVFNzAwMDAwMEIwNUMyQjAwODBBMDgyMjA0MEYwCis6MTAzQzYwMDAwMEI1MjAyMDBENDlDMDQ2MDg2MEZGRjdCRkZGMDAyOEJGCis6MTAzQzcwMDAwRUQwMDE4ODIwMjMxOTQzMDE4MDAxODgxMDIzOTk0MzI1Cis6MTAzQzgwMDAwMTgwMDE4ODA5MEEwMUQzRkZGNzJFRkYwOEJDMTg0N0ZECis6MTAzQzkwMDAwMzQ4MDE2RDAxMzEwMTY1RjhFNzAwMDAwMDAwMDBCMDQ0Cis6MTAzQ0EwMDBBMDgyMjA0MDk4QjUwNzFDMjI0OEMwNDYwMDkwMjI0OEI4Cis6MTAzQ0IwMDBDMzFENDEzMzQxNkQ4MjZEODA2QzAwMDMwMDBCOUM2ODE1Cis6MTAzQ0MwMDAwMTIzOUIwNzIzNDMxQjY4OTg0MjAwRDEwQ0UwOTg0MkQ0Cis6MTAzQ0QwMDAwM0Q5MTAxQTU5MUE0MTE4MDBFMDE5MUEwMTIwMTAyOUE1Cis6MTAzQ0UwMDAwMEQ4MDAyMDAwMjgxRkQwNzg2QUY5NkFDMDQ2MDg2MDEyCis6MTAzQ0YwMDBCODZBRjk2QUMwNDY0ODYwMTA0QUMwNDYwMDkyRkI2QTNBCis6MTAzRDAwMDAwRjQ4NDI2RDAzMjAzOTZBMDFGMEUyRkQzODg4MTAyMzI0Cis6MTAzRDEwMDAxODQzMzg4MDM4ODg0MDIzOTg0MzM4ODAzODFDRkZGNzkwCis6MTAzRDIwMDA1NUZGOThCQzA4QkMxODQ3Mzg4ODQwMjMxODQzMzg4MDkyCis6MTAzRDMwMDBGN0U3MDAwMDU1NTU1NTU1QTgwMzAwODAwODAwMTEwMjBCCis6MTAzRDQwMDA3QzI5MDA4MEIwQjU0MDIwMkM0OUMwNDYwODYwMDBGMEI2Cis6MTAzRDUwMDBGREZFMDcxQzQwNjgwMzIzMUIwNzE4NDAwNTBGNjgwMTgwCis6MTAzRDYwMDA0MDFCODAwMDI2NDk0NDE4MjA4ODAyMjMxODQzMjA4MEU1Cis6MTAzRDcwMDAyMDg4NDEwODM0RDM0MDA4NDAwMDIwODBBMDZDRTE2Q0NBCis6MTAzRDgwMDA0MDE4QTA2NDAwMjBFMDY0QTE2QjIyNkQ4OTE4QTE2MzMzCis6MTAzRDkwMDAyMDY1Qjg2QUMwNDY2MDY1MDMyMzFCMDc3ODY4MTg0MDMxCis6MTAzREEwMDA3ODYwNjE2ODM2MzE5NDI5MDREODM4MjMxODQzNzg2MEU0Cis6MTAzREIwMDAzODIwMDNFMDk0MjMxODQzNzg2MDk0MjBCODYxMzk2ODcwCis6MTAzREMwMDA3ODY4MDIwNDEyMEMyMDFDQ0IxRjA1M0JGRkY3RDdGREJGCis6MTAzREQwMDAwMjIwNjA4MDM4MUNGRkY3REZGRUIwQkMwOEJDMTg0NzJCCis6MTAzREUwMDAzODFDRkNGNzA3RkEyODAxMDY0OTQwMTgxOTIzREIwMUEzCis6MTAzREYwMDBDMDE4NDE2QjAxMzk0MTYzRUZFNzAwMDAwMDAwMDBCMERCCis6MTAzRTAwMDA1QzJCMDA4MEEwMUMwMDgwOTBCNTAwMjcwRjRDMERFMEJCCis6MTAzRTEwMDA0MjZCMDEzQTQyNjMwMDJBMDVEQzAyNkJDMDQ2NDI2M0YyCis6MTAzRTIwMDBDMDZBMDFGMEM2RjkwMTM3MEIyRjA3RDIzODAxMDAxOTFCCis6MTAzRTMwMDAzMzIzOUIwMUMwMTg4MTZBMDAyOUU5RDEwMTIwNDAwNjgzCis6MTAzRTQwMDAwMzQ5QzA0NjA4NjA5MEJDMDhCQzE4NDc2ODBFMDA4MDUzCis6MTAzRTUwMDAwMDAwMDBCMDEwNDhDMTY4MDEzMUMxNjAwRjQ5Qzg2ODU2Cis6MTAzRTYwMDAwMTI4MTdEMUM4MUQ3OTMwMDI4OTAwMkExMkQwMDEzQUUxCis6MTAzRTcwMDAwMjgxMDI4OTAwMkEwREQxNDI4OTAwMkEwOEQxQzk2RjI2Cis6MTAzRTgwMDAwMjIzMEE2ODFBNDMwQTYwMDQyMTAxODEwMTIxMDBFMDJCCis6MTAzRTkwMDAwMDIxNDE4MTcwNDcwMDAwMDg4MzIwNDA2ODBFMDA4MEE3Cis6MTAzRUEwMDBCMEI1MDcxQzAxMjNGODFENjkzMDAzNzMxRTQ4QzIxREZECis6MTAzRUIwMDA3OTMyNTQ4QTYxMUM1MTgyRDU4QTAwMjFBQzQyMDREQkRDCis6MTAzRUMwMDBDNDFEODkzNDYzNzA1MTgyRDE4MzAxMjM5QjA3M0E2REVECis6MTAzRUQwMDAxQTQzMTI2OEMwNDZCQTYxRkI2OTlBNDIwNkQxRjg2QzZGCis6MTAzRUUwMDAxMjQ5QzA0NjA4NjBCMEJDMDhCQzE4NDc3OTYxNDE2OUY2Cis6MTAzRUYwMDBGQTZDOTE0MzQxNjEwMTIwMDAwNUMxNjAzODY5MDIyOEQ0Cis6MTAzRjAwMDBGMUQwQjg2OUY5Njk0MTFBMDFENTc4NkQ0MTE4MzgxQ0FBCis6MTAzRjEwMDAwMEYwMEVGOEY5NjkwOTE4Rjk2MTc4NkQ4MTQyRTJEMzcxCis6MTAzRjIwMDAwODFBRjg2MURGRTcwMDAwNjgwRTAwODAwMDAwMDBCMEFBCis6MTAzRjMwMDBGOEI1MDQxQzBGMUNGRjIzMjEzMzlGNDIwMUQ5RkYyNzMyCis6MTAzRjQwMDAyMTM3RTE2RTM4MUMwMUYwQ0JGQzJENEQwMDI4MTNEMTM4Cis6MTAzRjUwMDBFMDFENDkzMDAxN0EwMTIzMTk0MzAxNzIyOTRBQzA0NjA0Cis6MTAzRjYwMDAwMDkyMjk0ODAxNkQ0MjZEMDAyMDJCMUMwMUYwQjBGQzJECis6MTAzRjcwMDAwMDIwRjhCQzA4QkMxODQ3MjA2OTAxMzAyMDYxMjM0OUEzCis6MTAzRjgwMDBDODFEQjkzMDAyNkI5MjAwNTExOEMwMzEwRjYxMDE2QjJFCis6MTAzRjkwMDAwMTMxODkwNzg5MEYwMTYzMjA2QkMyMTk2MTZEOEE0MjYzCis6MTAzRkEwMDAwM0Q4MjMyMjEyMDUzQTQzMDVFMDA5MUE3RTFBMDdEMUU1Cis6MTAzRkIwMDAyMzIyMTIwNTBBNDMwMDkyNjE2RTA5MThBMjZFMTBFMEQ2Cis6MTAzRkMwMDAxMTIyNTIwNTBBNDMwMDkyNjE2RTA5MTgwMDIwQTI2RTY4Cis6MTAzRkQwMDAyQjFDMDFGMDdERkMyMzIyMTIwNTMyNDMwMDkyNjE2RUZFCis6MTAzRkUwMDBBMjZFMDAyMDJCMUMwMUYwNzNGQzIwNkJDMDE5MDAwOThECis6MTAzRkYwMDAwMDAxNjE2RDgxNDIwMEQ4NDAxQTIwNjMzODFDQjhFNzg3Cis6MTA0MDAwMDA0NDgwMjA0MDA0MDAxQjAyN0MyOTAwODA2ODBFMDA4MDUwCis6MTA0MDEwMDA4MEI1MDEyMEMwMDMwRDQ5QzA0NjA4NjAwQzQ5QzgxRDg5Cis6MTA0MDIwMDA0OTMwMDI3QTAwMjcwMDJBMDNEMDA3NzIwODFDRkZGN0U0Cis6MTA0MDMwMDAzN0ZGMDg0OUM4MUQ0OTMwMDI3QTAwMkEwM0QwMDc3MkE5Cis6MTA0MDQwMDAwODFDRkZGNzJERkY4MEJDMDhCQzE4NDcwMDAwMDBCMDFCCis6MTA0MDUwMDA2NDJEMDA4MEU0MkMwMDgwOTBCNTA3MUMxMDIwMTg0OUM2Cis6MTA0MDYwMDBDMDQ2MDg2MEY4NjgwMTMwRjg2MDE2NDhDNDFEQjkzNENECis6MTA0MDcwMDA2MTZCODkwMDA5MThDMDMxMDk2OTdBNjg5MjAwRDIxOTA4Cis6MTA0MDgwMDA1MTY0NjE2Qjg5MDAwODE4QzAzMDAxNjk3ODY4ODAwMDRDCis6MTA0MDkwMDBDMDE5QzA2QjAxRjBBMkZBMDEyMzc4Njg1ODQwNzg2MDFCCis6MTA0MEEwMDA2MDZCMDEzMDgwMDc4MDBGNjA2M0Y4MUQxOTMwNDA3OTI0Cis6MTA0MEIwMDAwMDI4MDJEMTM4MUMwMEYwMDdGODkwQkMwOEJDMTg0NzUzCis6MTA0MEMwMDAwMDAwMDBCMDY4MEUwMDgwOTBCNTA3MUMzOTQ4QzA2ODM5Cis6MTA0MEQwMDAwMDI4MDVEMEI4NkFDMDY4ODAwOTAxRDMwMjIwMDBFMDNBCis6MTA0MEUwMDA3ODZGRkNGNzU5RjgwNDFDMDZEMTAxMjBGOTFEMTkzMTJECis6MTA0MEYwMDAwODcxOTBCQzA4QkMxODQ3Rjg2QzJGNDlDMDQ2MDg2MDhFCis6MTA0MTAwMDBCQTZBMzgxQzIxMUMwMEYwNTlGODY3NjIwMDI4MDNEMUY0Cis6MTA0MTEwMDAyMDFDMDBGMDBCRkRFQ0U3Rjk2RDA5NjgwOTE4MDkwOThFCis6MTA0MTIwMDAwOTAxN0E2RDhBNDIwMEQ4ODkxQUExNjJCOTY4ODkwMEFBCis6MTA0MTMwMDBDOTE5NEE2QzAwMkEwN0QwNEE2QzEyMUE0QTY0ODAwOENFCis6MTA0MTQwMDA4MDAwQjk2QTA4MThCODYyMzg2OEI5NkE4MDAwQzAxOTc2Cis6MTA0MTUwMDA0MjZCOTE0MjBFRDMwMDIxNDE2NEI4NkEzOTY4ODkwMEVDCis6MTA0MTYwMDBDOTE5NDk2QjQwMUFCODYyQjk2ODg5MDBDOTE5Qzk2Qjg1Cis6MTA0MTcwMDA0MDE4Qjg2MkI4Njg4MTAwQzkxOTQ5NkMwMDI5QjhEMUUzCis6MTA0MTgwMDBCOTZBRkE2QjkxNDJCNEQwM0E2QzkxNDJCMUQwMDEyMzMyCis6MTA0MTkwMDA1ODQwQjg2MDgwMDBDMDE5QzA2QkMwNDZCODYyRjg2ODZCCis6MTA0MUEwMDAwMDI4MDFEMDAxMzhGODYwMzg2OTAwMjhBMUQwMDEzODEyCis6MTA0MUIwMDAzODYxOUVFNzY4MTkwMDgwMDAwMDAwQjBGN0I1OTBCMDQ0Cis6MTA0MUMwMDAwNDFDMEQxQzAwMjAwNTkwMDI5MDAwMjIwMTkyRjk0ODY5Cis6MTA0MUQwMDBDMDZBQzA0NkE4NjFBMDY4ODEwMDA5MTk0OTZCQzA0NjQxCis6MTA0MUUwMDAyMDYwRTE2MjEyOUFEMDY4QzA0NkE4NjAxMjlBNTE3OEE1Cis6MTA0MUYwMDBDMDQ2MEM5MUYwNDhDMDQ2MDM5MEQ3MUQwOTM3RTA2QUNECis6MTA0MjAwMDBDMTFCMDkwOUUzMUQxOTMzMEM5QUMwNDYwRjkzRUI0QkYwCis6MTA0MjEwMDBDMDQ2MEU5MzkxNDIwMUQzQjg0MjIxRDhFMTY4MDIyOUU5Cis6MTA0MjIwMDAxRUQyMDEyMDBGOTlDMDQ2NDg3MTAwMjAwMzk5MDFGMDY5Cis6MTA0MjMwMDA1N0ZCMDAyODAzRDEwRTlCRDg2QjAxMzBEODYzMDEyMEI3Cis6MTA0MjQwMDA4MDA2MDAyNzY4NjBBRjYxREQ0QUMwNDYwMDkyREQ0ODA1Cis6MTA0MjUwMDAwMTZENDI2RERDNEIwMDIwMDFGMDNBRkIzODFDNUNFMzQxCis6MTA0MjYwMDBCODQyMDNEODIwMUMwMEYwN0JGQzA3MUNENzQ4QzA2ODZDCis6MTA0MjcwMDAwMDI4NjREMDM4Nzg0MDA3NDAwRjAzMjg2MEQxMDU5OEEzCis6MTA0MjgwMDAwMTMwMDAwNjAwMEUwNTkwMzg3OEYwMjMxODQwNThEMTEwCis6MTA0MjkwMDBFMDZBQzAxQjAwMDkwQzk5ODg0MjAyRDJFMDY4MDIyODNCCis6MTA0MkEwMDAwNUQzQ0I0OTg4NjgwMEYwODNGRjA2MUMwNkQxMDM5QjI5Cis6MTA0MkIwMDAyODFDMzkxQzIyMUMwMEYwOEJGQzE2RTEyRTYyRjg2OEM5Cis6MTA0MkMwMDAwMDI4MEREMEI4ODkwMDI4MDNEMEMxNDlDOTY4MDBGMDgyCis6MTA0MkQwMDA3MEZGRjg4OTAwMjgwM0QwQkQ0OUM5NjgwMEYwNjlGRjY0Cis6MTA0MkUwMDA3QTY4QzA0NjcyNjFCOTY4QzA0NkIxNjEzMDFDQjg0OThECis6MTA0MkYwMDAwOTY4MDBGMDVFRkYwMDI4MTdEMTMwMUNCNDQ5NDk2OEY2Cis6MTA0MzAwMDAwMEYwNTdGRjEwMzdFMDZBQjg0MjAzRDgyMDFDMDBGMEQ1Cis6MTA0MzEwMDAyN0ZDMDcxQzY4NjhBRjRCMTg0MzY4NjAwMDIwQTg2MTQxCis6MTA0MzIwMDBBQzIzQTg2ODk4NDNBODYwQjBFMEE4NjlBODI4MDFEMjg3Cis6MTA0MzMwMDBBODIwQTg2MTEwMzdFMDZBQjg0MjZDRDg5Q0UwQTVFMERDCis6MTA0MzQwMDBBNEUwMTAyODY4RDEwMzIzMUIwNzY4NjgxODQwMDEwRkY4Cis6MTA0MzUwMDA0ODAxNDAxQTgwMDBBMDRBODIxODAxOTI3ODg4NDIwQkQ2Cis6MTA0MzYwMDAzMUQzODIwQjJGRDM5RDQ4QzA0NjAzOTAwMjIwMDE5QTdGCis6MTA0MzcwMDBDMDQ2MTA4MDc4ODgwMDA1MDAwRDAxOUFDMDQ2NTA2MDQ0Cis6MTA0MzgwMDBCODY4MDE5QUMwNDY5MDYwNzg2ODAxOUFDMDQ2MTA2Mjg5Cis6MTA0MzkwMDAwMDIwMDE5QUMwNDY5MDY0MDE5QUMwNDY5MDYzODgwMjRBCis6MTA0M0EwMDA4RjQ5NDAxODAxOUFDMDQ2NTA2MzAxOUE1MDY4MzYzMEQwCis6MTA0M0IwMDA5NDI4MDFEODM4MjAwMEUwOTQyMEE4NjExMDM3RTA2QUUyCis6MTA0M0MwMDBCODQyMjhEODU4RTA3QTg4OTIwQjAzRDM4NTQ4QzA0NjczCis6MTA0M0QwMDAwMzkwMjNFMDAxMjIxMjAzMDI0MDgzNEIxREQwMDM5MzdDCis6MTA0M0UwMDAwMDA1MDAwRDAxOUFDMDQ2NTA2MEI4NjgwMTlBQzA0NkE5Cis6MTA0M0YwMDA5MDYwNzg2ODAxOUFDMDQ2MTA2MjAwMjAwMTlBQzA0NjE5Cis6MTA0NDAwMDA5MDY0MDE5QUMwNDY5MDYzODgwMjc1NDk0MDE4MDE5QUU5Cis6MTA0NDEwMDBDMDQ2NTA2MzAyRTAzM0UwMkFFMDAzOTMwMTIwMEY5OTg1Cis6MTA0NDIwMDBDMDQ2NDg3MTEyOUE1MDc4MDU5OTQzMUEwQjkzMTAzNzc5Cis6MTA0NDMwMDBFMDZBQjg0MjAzRDgyMDFDMDBGMDkyRkIwNzFDMDE5QUU2Cis6MTA0NDQwMDA1MDZCOTE2QjA5MDE0MDE4MEI5QjIxMUMzQTFDRkZGNzI0Cis6MTA0NDUwMDA3REZCMDE5QUMwNDZEMDY0MDE5QTBCOUJDMDQ2MTM2NTUwCis6MTA0NDYwMDAwMTIzNUIwNjY4NjgxODQzNjg2MDAwMjBBODYxMERFMEJFCis6MTA0NDcwMDAxMDM3RTA2QUI4NDIwM0Q4MjAxQzAwRjA3MUZCMDcxQzFCCis6MTA0NDgwMDAzODc4NDAwNzQwMEYwMzI4MDBEMUY4RTZBODY5MDM5OTVGCis6MTA0NDkwMDAwMUYwMjZGQTAwMjgyQUQxMzgxQzIxMUMwMEYwNzlGQkYzCis6MTA0NEEwMDBBODY4ODAwOTA0RDMzMDFDNDk0OTQ5NjgwMEYwODFGRTlFCis6MTA0NEIwMDA0MTQ5MDAyMDAxRjAxNEZBMDAyODA0RDEwRTlCRDg2QjZBCis6MTA0NEMwMDAwMTMwRDg2MzExRTAwMTIwMEY5OUMwNDY0ODcxODAwNjgxCis6MTA0NEQwMDAwMDI3Njg2MEFGNjEzQTRBQzA0NjAwOTIzOTQ4MDE2REQyCis6MTA0NEUwMDA0MjZEMzk0QjAwMjAwMUYwRjNGOTAwMjAxNUUyMDU5OEU4Cis6MTA0NEYwMDAwQzk5MDgxQTAwMDQwMDBDMEM5MDBCOTAwQzk4MDAyOEUyCis6MTA0NTAwMDAwM0QwMDEyMDBGOTlDMDQ2NDg3MTI4NjhDMDQ2MDQ5MDI2Cis6MTA0NTEwMDAwMDI2MDAyMDA4OTAwMDIyMEE5MjBDOTgwMTM4MEQ5MDg1Cis6MTA0NTIwMDBBM0UwNzg4ODhBMUIxMjA0MTIwQzkwNDIwNUREMDc5MkUyCis6MTA0NTMwMDA4MDFBMDAwNDAwMEMwODkwMDBFMDA3OTAwODk4MDAyOEZBCis6MTA0NTQwMDAwN0QxMEQ5ODBBOUE5MDQyMDdERDA3OTgzMDE4ODg0MkUzCis6MTA0NTUwMDAwM0Q4MDEyMDQwMDUwNjkwMUNFMDExMjA0MDA1MDY5MDdDCis6MTA0NTYwMDBBODY4OEMyMzE4NDAwMkQxMjA0OEMwNDYwNjkwQjEwN0E1Cis6MTA0NTcwMDA4OTBGMEZEMDA3OThDMDA2QzAwRTA4RDAxRTI4MDlEQjhGCis6MTA0NTgwMDAxRTI4MDJEMTAzMjkwNUQxMDFFMDAyMjkwMkQzMDEyMDBFCis6MTA0NTkwMDAwMjkwREVFNzBBOUEwMDJBMDREMTAxMjNEQjA1MDY5ODdGCis6MTA0NUEwMDAxODQzMDY5MDA3OTgwNjk5MDg0MzAyMUMwMDkwMDQ5ODQ3Cis6MTA0NUIwMDA4MzE5MURFMEU4MEUwMDgwMDE0OUZGRkYyODBGMDA4MEVECis6MTA0NUMwMDAwNDAwMTIwMjdDMjkwMDgwNDQ4MDIwNDA2ODE5MDA4MDg5Cis6MTA0NUQwMDA2MDA0MDA4MDAwMDAwMDgwNUMyQjAwODA1NTMyRkZGRkVCCis6MTA0NUUwMDBBQzVFMjE0MDBEM0RGRkZGQ0QzMUZGRkYwMDAwMzIwMkU4Cis6MTA0NUYwMDAwMDIwM0ExRDA2Q0EwMUYwNkJGOTA3OTgzNjE4MDI5ODk4Cis6MTA0NjAwMDAwMDI4MTZEMEE4Njg4QzIzMTg0MDA0RDEwOTIzNUIwNDI1Cis6MTA0NjEwMDAwNjk4MTg0MzA2OTAwNjk4QzI0QTAyNDMwMDkyMDQ5OEVFCis6MTA0NjIwMDA4MzE5QzE0ODAxNkQ0MjZEMDAyMDAxRjA1MUY5MDAyMDRECis6MTA0NjMwMDAwMjkwMDg5ODAwMjgwQkQxMEI5QjAxM0IwQjkzMTAzNzdECis6MTA0NjQwMDBFMDZBQjg0MjBDRDgyMDFDMDBGMDhBRkEwNzFDMDdFMDg4Cis6MTA0NjUwMDA3ODY4MDc5QTgwMTg3ODYwNzg4ODA3OUE4MDFBNzg4MDM2Cis6MTA0NjYwMDAwQTlBNTAxQzAyMDQxMjBDMEE5MjBDOTgwQTlBODI0MjZFCis6MTA0NjcwMDAwM0RBQTk2OUIxNDIwMEQ5NTNFN0E4NjlCMDQyNkJEMTA2Cis6MTA0NjgwMDBBODY4MDEwOTY5RDIwODlBMDAyQTU2RDAwQzk5MEE5QTlBCis6MTA0NjkwMDA4QTQyM0VEQkIxMDc4OTBGMENEMDA4OUFEMjA2RDIwRUFGCis6MTA0NkEwMDAwQkQwMUUyQTA2REIxRTJBMDJEMTAzMjkwNUQwMDFFMDA5Cis6MTA0NkIwMDAwMjI5MDJEMjAyOTkwMDI5MjFEMDA4OUFDMDQ2MDA5MjBDCis6MTA0NkMwMDAwNDk4ODMxOTAwMjAzQTFEMDZDQTAxRjAwMUY5MDg5OEUwCis6MTA0NkQwMDAzNjE4QTg2ODhDMjMxODQwMDJEMDAxMjA0MDA2MDBFMDVDCis6MTA0NkUwMDA5MjQ4MDEyMjAyNDMwMDkyMDQ5ODgzMTk4RTQ4MDE2RDdBCis6MTA0NkYwMDA0MjZEMDAyMDAxRjBFQ0Y4MDAyMDAyOTAxNUUwOEMyM0MwCis6MTA0NzAwMDAxODQwMDJEMDAxMjA0MDA2MDBFMDg4NDgwODlBMDI0MzgxCis6MTA0NzEwMDAwMEUwMDg5QUMwNDYwMDkyMDQ5ODgzMTkwMDIwM0ExREQwCis6MTA0NzIwMDAwNkNBMDFGMEQ1RjgwODk4MzYxODEwMzdFMDZBQjg0MjgyCis6MTA0NzMwMDAwM0Q4MjAxQzAwRjAxNEZBMDcxQzY4Njg4MDBFNkJEMkE2Cis6MTA0NzQwMDAwQTk4QzA0NjA5OTAwQzk5ODg0MjVDREEwRDk4MDk5OTNDCis6MTA0NzUwMDA4ODQyMDNEMDdBODgxRUUwNUZFMDVFRTA3ODg4MDEyMjFDCis6MTA0NzYwMDA1MjA2MDI0M0E5Njg4QzIzMTk0MDAyRDEwOTIzNUIwNDM1Cis6MTA0NzcwMDAxQTQzQjEwNzg5MEYwRUQwQzMwNkRCMEUwOEQwMUUyQkRCCis6MTA0NzgwMDAwOURCMUUyQjAyRDEwMzI5MDVEMTAxRTAwMjI5MDJEMzQ2Cis6MTA0NzkwMDAwMTIxMDI5MTAyMUMwOTk4MDAyODAyRDEwMTIzREIwNUE2Cis6MTA0N0EwMDAxQTQzMDA5MjA0OTg4MzE5MDAyMDNBMUQwNkNBMDFGMEFBCis6MTA0N0IwMDA4RkY4Nzg4ODg2MTkxMDM3MDI5ODAwMjgxNEQwQTg2OEQ2Cis6MTA0N0MwMDA4QzIzMTg0MDAyRDAwMTIwNDAwNjAwRTA1NzQ4MDEyMjA3Cis6MTA0N0QwMDAwMjQzMDA5MjA0OTg4MzE5NTM0ODAxNkQ0MjZEMDAyMEYyCis6MTA0N0UwMDAwMUYwNzZGODAwMjAwMjkwRTA2QUI4NDIwM0Q4MjAxQzVECis6MTA0N0YwMDAwMEYwQjZGOTA3MUMwOTk4MDEzMDAwMDQwMDBDMDk5MDdDCis6MTA0ODAwMDAwQzk5ODg0MkEyREI2ODY4MzA0MzAxMDQwOTBDNjg2MDk3Cis6MTA0ODEwMDBFODZBMDBGMDdCRkEyOEUwMjdFMEE4NjgwMDA5MTREM0QyCis6MTA0ODIwMDA2ODY4ODAwRTE1RDIwMTlBMDAyQTEyRDAwMTlBNTA2QjQ2Cis6MTA0ODMwMDAwQjlCMjExQzNBMUNGRkY3ODlGOTAxOUFDMDQ2OTA2NDMyCis6MTA0ODQwMDAwMTlBMEI5QkMwNDY5MzYzMDNFMEU4NkEzMTFDMDBGMEI5Cis6MTA0ODUwMDA1REZBNjg2ODMwNDM2ODYwQTg2OUIwNDIwNUQ5MDAwNDExCis6MTA0ODYwMDAwMDBDODAxQjAwRjBFRUY5QUU2MUE4Njg4QzIzMTg0MEE0Cis6MTA0ODcwMDAwQkQwMkY0QUMwNDYwMDkyMDQ5OEMzMUYwNTNCMkE0ODFDCis6MTA0ODgwMDAwMTZENDI2RDAwMjAwMUYwMjNGODAxMjM5QjA3MjA2RDhDCis6MTA0ODkwMDAxODQzMDA2OEMwNDZBMDYxRTE2OTgxNDIxMkQwMjI2OUQ0Cis6MTA0OEEwMDAwMjJBMEZEMjQxMUEwMUQ1NjA2RDQxMTgyMDFDRkZGNzcyCis6MTA0OEIwMDAzRkZCRTE2OTQwMThFMDYxNjE2RDg4NDIyNEQzNDAxQUYyCis6MTA0OEMwMDBFMDYxMjFFMDgxNDIxRkQxMjA2OTAyMjgxQ0QyMDEyMDMxCis6MTA0OEQwMDA2MDYxMTg0ODQxNjlFMjZDMEE0MzQyNjE4MTY5RTM2Qzk2Cis6MTA0OEUwMDA5OTQzODE2MTAxMjEwOTA1Q0E2MDgwNjlDMDQ2MDg2MTU4Cis6MTA0OEYwMDA4QjAyMjA2RDE4NDMwMDY4QzA0NkEwNjFFMTY5ODE0MkM3Cis6MTA0OTAwMDAwMkQwMjAxQ0ZGRjdDQ0ZBMjgxQzAwRjAwRkY5MEM5OEZECis6MTA0OTEwMDAwNTk5NDAxODAwMDExMDMwNjg2MTEzQjBGMEJDMDhCQzY0Cis6MTA0OTIwMDAxODQ3MDAwMDAxMDAwMDAyN0MyOTAwODAwMDAwMTIwMkVDCis6MTA0OTMwMDAwNDAwNTIwMjY4MEUwMDgwRjBCNTQwMjAyRDQ5QzA0NkE4Cis6MTA0OTQwMDAwODYwMDBGMDAzRjkwNzFDODE2OTQ0NkFBMDZGMDBGMDU5Cis6MTA0OTUwMDA0NUZFMDAyMEUxMUQxOTMxNDg3MTc5NjhDOTBFMDlEMzVGCis6MTA0OTYwMDBGODZBMDAwMTI0NDk0MDE4MjQ0QkMwMTgwMTY4MDEzOTM1Cis6MTA0OTcwMDAwMTYwMzZFMEUxNkQwOTY4MjI2RUMwNDYxMTYwMjA0RThDCis6MTA0OTgwMDBGNTFENzkzNTAxMjNFOTZCMTk0M0U5NjNCOTZBRTI2REQ1Cis6MTA0OTkwMDBDMDQ2MTE2MEI5NkEyMjZFQzA0NjExNjA2MTY5MDAyOTgzCis6MTA0OUEwMDAwNEQxQTk2QjAxMzFBOTYzMDgyOTA3RDNBODYzMDEyMEE5Cis6MTA0OUIwMDAwMEYwODZGOEU4NkI0MDA4NDAwMEU4NjM3ODY4ODEwRUY0Cis6MTA0OUMwMDAwRkQyMEIyMzFCMDJGMTE4Qzk2ODAwMjkwNkQwMDAwODdBCis6MTA0OUQwMDAwNEQyMjAxQzM5MUMwMEYwNDNGODAyRTAzODFDMDBGMDFGCis6MTA0OUUwMDAwNUZBMzgxQ0ZCRjcwNkZDMjAxQzAwRjAwQkY4RjBCQ0E1Cis6MTA0OUYwMDAwOEJDMTg0NzAwMDAwMEIwQTAxQzAwODBCNDBDMDAwMEU4Cis6MTA0QTAwMDA2ODBFMDA4MDgwQjUwNzFDRjgxRDE5MzAwMTc5MDAyOTU3Cis6MTA0QTEwMDAwNEQwMDAyMTAxNzEzODFDRkZGNzU2RkJGODY4MDIyODBBCis6MTA0QTIwMDAwREQwQjg2ODgwMDBDMjE5NTA2QzAwMjgxMUQwQjg2QTQ3Cis6MTA0QTMwMDA0MTc4MDkwMTEwMzE1MjZCMTAxQTg4NDIwNUQzMzgxQzk1Cis6MTA0QTQwMDBGRkY3NDJGQjgwQkMwOEJDMTg0NzM4MUNGRkY3MjhGQTY4Cis6MTA0QTUwMDBGOEU3Nzg2ODgwMDBDMDE5QzA2QkMwNDZCODYyRjFFNzFCCis6MTA0QTYwMDBCMEI1ODdCMDBGMUM4MDZGQzA0NjAwOTAwMDI0MTM0RDc2Cis6MTA0QTcwMDAwQjIzMUIwMkU4MTg4MDY5MDAyODE3RDA2OTQ2QTIwMEEyCis6MTA0QTgwMDA1MjE5MEIyMzFCMDJEMjE4OTI2OTM4MUMwMEYwOTJGQkJBCis6MTA0QTkwMDAwMDI4MDlEMTAxMzRBMDAwNDAxOTBCMjMxQjAyQzAxOEMzCis6MTA0QUEwMDA4MDY5MDAyOEVBRDEwMUUwMDEyODAyRDAzODFDMDBGMDFBCis6MTA0QUIwMDA5REY5MDdCMEIwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MDI0Cis6MTA0QUMwMDBCOEI1QzIwN0QyMEYxNjRDMTY0OTAxRDAwODIyMDhFMDJCCis6MTA0QUQwMDA4MjA4MDVEMzBDMjJBNDE4MEI2OERGMUQxNTM3MDNFMEVDCis6MTA0QUUwMDAxQzIyMEI2OERGMUQwOTM3MEY0QjFENzgwMDJEMTNEMERBCis6MTA0QUYwMDA1Qjc4MDAyQjEwRDAwMTIzNUIwNjFBNDMwMDI4MDFEMUZDCis6MTA0QjAwMDA1QjA4MUE0MzAwOTI0QTY4MDEyMDM5MUMyMzFDMDBGMEZDCis6MTA0QjEwMDBERkZFQjhCQzA4QkMxODQ3MDMyMzFCMDYxQTQzRjFFN0E1Cis6MTA0QjIwMDA5MEVFMjA0MDdDMjkwMDgwRjgwRTAwODAwMDIxQzE2MUI5Cis6MTA0QjMwMDAwNTQ5OEE2ODAwMkEwMUQxODg2MDAyRTBDQTY4QzA0NjM3Cis6MTA0QjQwMDBEMDYxQzg2MDcwNDcwMDAwMjgwRjAwODAwMzQ5ODg2ODYyCis6MTA0QjUwMDAwMDI4MDJEMEMyNjlDMDQ2OEE2MDcwNDcyODBGMDA4MEQyCis6MTA0QjYwMDAwMTFDMDEyMzg4Njg1ODQwODg2MENBNjgwMTNBQ0E2MEZECis6MTA0QjcwMDAwQTY5MDEzQTgwMDAwQTYxNDIxOEQwNkI1MzZCQzA0NjQzCis6MTA0QjgwMDBDQjYyMEI2ODlCMDA1OTE4NDk2QzUzNkNDOTE4NTE2NDZGCis6MTA0QjkwMDA3MDQ3OEE2ODkyMDA1MjE4RDM2QjgzNDIxN0QxRDAxRDk4Cis6MTA0QkEwMDAzRDMwMEE2ODkyMDA1MjE4NTI2QzAzNjg5QTFBMDI2MEVCCis6MTA0QkIwMDAwMTIzODg2ODU4NDA4ODYwQ0E2ODAxMzJDQTYwMEE2OTVGCis6MTA0QkMwMDAwMTMyODAwMDQwMTgwQTYxNDA2QkMwNDZDODYyNzA0N0RECis6MTA0QkQwMDBCOEI1MDQxQzFEMUMxNzFDMDgxQzM5MUNGRkY3RDlGRjk1Cis6MTA0QkUwMDAwMDIwMjkxQzAwRjA3Q0ZFMDEyMEY5MUQxOTMxNDg3MUJDCis6MTA0QkYwMDA4MDA2NjA2MDAwMjBBMDYxMDY0QUMwNDYwMDkyMDY0ODE4Cis6MTA0QzAwMDAwMTZENDI2RDA1NEIwMDIwMDBGMDYyRkVCOEJDMDhCQzhGCis6MTA0QzEwMDAxODQ3MDAwMDA0MDAxMjAyN0MyOTAwODA0NDgwMjA0MEQ0Cis6MTA0QzIwMDAwNjQ5MEE2ODEwMTgwODYwMDEyMzVCMDI5ODQyMDNEOUZDCis6MTA0QzMwMDAwMzQ5MEE3OTAxMzIwQTcxNzA0NzAwMDBFNDJEMDA4MEFGCis6MTA0QzQwMDBBMDgyMjA0MDgwMDg4MDAwMDY0OTBBNjgxMDE4MDg2MDg5Cis6MTA0QzUwMDAwMTIzNUIwMjk4NDIwM0Q5MDM0OTBBNzkwMTMyMEE3MUEwCis6MTA0QzYwMDA3MDQ3MDAwMEU0MkQwMDgwQTA4MjIwNDAwMzMwODAwOEJGCis6MTA0QzcwMDA4MDAwMDY0OTBBNjgxMDE4MDg2MDAxMjM1QjAyOTg0MjA4Cis6MTA0QzgwMDAwM0Q5MDM0OTBBNzkwMTMyMEE3MTcwNDdFNDJEMDA4MDgzCis6MTA0QzkwMDBBMDgyMjA0MDAyNDg0MTc5MDEzMTQxNzE3MDQ3MDAwMEYzCis6MTA0Q0EwMDBBMDgyMjA0MDkwQjQ4MjAwMTc0QjlBNTg4QjA3MDJEMDA0Cis6MTA0Q0IwMDA4OTA4MEIxRDAxRTA4OTA4Q0IxQzExNjlENzY4MTI0Q0NCCis6MTA0Q0MwMDA4MDAwMjA1ODQwNjhCOTQyMDNEMTgxNDIxOUQ5MTE2ODQ3Cis6MTA0Q0QwMDAxN0UwMDAyNEI5NDIwOUQ5ODE0MjEyRDkxMTY4NzgxQTIzCis6MTA0Q0UwMDAwMEQ1MDMzMDgwMTA5ODQyMEJEODA3RTA4MTQyMDVEOEU4Cis6MTA0Q0YwMDA3ODFBMDBENTAzMzA4MDEwOTg0MjAyRDgyMDFDOTBCQzRFCis6MTA0RDAwMDA3MDQ3QzgxRDA1MzBGQUU3NzAwNDAwODA4MEI1ODAwMDQ4Cis6MTA0RDEwMDAwRjRBMTc1ODg4MDcwMkQwODgwODA0MzAwMUUwODgwODM1Cis6MTA0RDIwMDAwMzMwMzk2OTdBNjg5MTQyMDlEOTM5NjhDMDQ2Mzk2MUQ2Cis6MTA0RDMwMDBGOTY4N0E2ODkxNDIwMkQ5Mzk2OEMwNDZGOTYwODEwMDAxCis6MTA0RDQwMDAzODY5MDBGMEQxRkQzODYxODBCQzA4QkMxODQ3MDAwMDBDCis6MTA0RDUwMDA3MDA0MDA4MDkwQjUwMzIxMDkwNzAxNDAwQzBGMDEwNDg1Cis6MTA0RDYwMDAwOTBDMDEyMjkyMDcwMjQwQTMwMDFDNEZGRjU4ODkwNzNCCis6MTA0RDcwMDA4OTBGMDAwNDAwMEM4MDA4MDAyOTAwRDAwMTMwMDAyQUFGCis6MTA0RDgwMDAwMUQwMDIzMDAwRTAwMzMwRjk2ODdBNjg5MTQyMDJEOTFDCis6MTA0RDkwMDAzOTY4QzA0NkY5NjA4MTAwRjg2ODAwRjBBNUZERjg2MDQ4Cis6MTA0REEwMDAwRjQ4MDA2OTAwMjgwNUQwMDEyMEEwNDAwMkQwMjAxQzM3Cis6MTA0REIwMDBGRUY3Q0FGQzBCNDlDODFEMTkzMDAzNzkwMDIyMDAyQkVECis6MTA0REMwMDAwNUQxMDk0OUM4MUQxOTMwMDM3OTAwMkIwM0QwMDI3MUEwCis6MTA0REQwMDAwODFDRkZGNzc5Rjk5MEJDMDhCQzE4NDc3MDA0MDA4MEU0Cis6MTA0REUwMDBEMDJDMDA4MDY0MkQwMDgwRTQyQzAwODBCMEI1MkI0OUNECis6MTA0REYwMDAwOTc5MDAyOTAzRDE0MTY4Mjk0QjE5NDM0MTYwODE2ODMxCis6MTA0RTAwMDA0OTA4MDJEMzA5MjEwOTA0MDFFMDBEMjEwOTA0MENDODU1Cis6MTA0RTEwMDAwODM4MTk0Mzg3NjhCQjBBMDNEMzQzNjg1QjA4MDBEMzhCCis6MTA0RTIwMDAwMTMxNDA2ODAzMjMxQjA3MTg0MDA3MEZGODAwMUQ0QzkxCis6MTA0RTMwMDAwMDE5MjM2OEMwMTg1MDMwMDA3OTAxMjgxMEQxNjA2ODJCCis6MTA0RTQwMDAwMTI4MEREMDEwMUMwMEYwNzFGODM4MDEwMDE5MTkyMzQ5Cis6MTA0RTUwMDBEQjAxQzAxODQxNkIwMTM5NDE2M0IwQkMwOEJDMTg0Nzg1Cis6MTA0RTYwMDAzODAxMDAxOTE5MjNEQjAxQzAxODAzNkI1RDFDMDU2M0IxCis6MTA0RTcwMDBCRDAyMkQxOURCMDBFQjE4ODAzMzE5NjNEQTYyODE2QkY4Cis6MTA0RTgwMDAwMTMxODE2MzAxMjFCOTQwMjI2ODExNDMyMTYwMDE2QjI2Cis6MTA0RTkwMDA4MDI5RTJEMzAwMjEwMTYzREZFNzAwMDAyODBGMDA4MEIyCis6MTA0RUEwMDAwMDAwMDA4MEEwMUMwMDgwRjBCNTFGNEU3MDY4MDAyODM0Cis6MTA0RUIwMDAzNkQxMDAyNEIxNjg0ODFDQzkwMDg5MTlCMDYwMzI2ODM1Cis6MTA0RUMwMDA4OTE4NjAzMTBEN0IwODI4MDBEM0I0NjAyODAxODAxOTRGCis6MTA0RUQwMDAxOTIzREIwMUMwMTg4NzZCMDAyRjIxRDBDMTZBNEIxQzNFCis6MTA0RUUwMDBBQTAyOTIxOUM5MDA1MTE4ODAzMUMzNjJDQTZBMDk2QkJCCis6MTA0RUYwMDAwMTNGODc2MzgwMkIwMEQzQzQ2MjAwMkYwNkQxMDEyN0I2Cis6MTA0RjAwMDBBRjQwM0IxQ0RCNDMzNzY4M0I0MDMzNjA0MzZCMDEzQkE2Cis6MTA0RjEwMDA0MzYzMTAxQzM3MUMwMEYwMDlGODc4NjgwMDI4QzlEMERBCis6MTA0RjIwMDBGMEJDMDhCQzE4NDcwMDAwQTAxQzAwODBGMEI1Q0QwRkY1Cis6MTA0RjMwMDBFRDA3MDEyNDAwMjcyRTRCMkU0QTAwMkQxREQwRDg2QUU0Cis6MTA0RjQwMDAwMTMwRDg2MjEwMUM1MjY5MDAyQTEyRDAwMjY5NTMxQzI5Cis6MTA0RjUwMDA5MjAwMTIxODAzNjE5MTYxNDE2OTAxMzE0MTYxMDI2OTU2Cis6MTA0RjYwMDAwRjJBMDBEMzA3NjEwRjI5MDBEMzQ0NjBGMEJDMDhCQ0FFCis6MTA0RjcwMDAxODQ3MDgxQ0ZGRjdFRUZFRjhFNzE1Njk2RTFDQUQwMDM4Cis6MTA0RjgwMDBBRDE4MTY2MUE5NjE1NTY5MDEzNTU1NjExNjY5MEYyRTc1Cis6MTA0RjkwMDAwMEQzMTc2MTBGMkQwMEQzNTQ2MDhDMDJBNDBBMTY0RjYyCis6MTA0RkEwMDAzQTZGRkQ2OEY5MUQ3OTMxMDEyRDBDRDFEQjZENUIwODdECis6MTA0RkIwMDAwOUQzMEI4OTAwMkIwNkQxRkQ2RjAzM0IyRTY4MzM0MENDCis6MTA0RkMwMDAyQjYwMTQyMzBCODExMDYwODAwNzgwMEEyMDQzMDMwNEE4Cis6MTA0RkQwMDAwMEQwMDEzODUwNjAwOTZBMDgzMjkxNDIwMEQ4MDc0QTZGCis6MTA0RkUwMDAwMDBEMDJEMzUxMjA4MDAzODI2MTNBNjdCRUU3MDAwMEMyCis6MTA0RkYwMDBBNDJBMDA4MEEwMUMwMDgwNjgwRTAwODAyNEE3MjA0MDA2Cis6MTA1MDAwMDBCMEI1MDAyODA0RDEwMTIwQzAwNTE2NDlDMDQ2MDg2MDhCCis6MTA1MDEwMDAxNTRDMDAyNTY3NjkwMDJGMTZEMEUwNjg0MTFDODAwMDAwCis6MTA1MDIwMDAwMDE5RTE2MDgwNjkwMTNGRkZGNzk0RkVFMDY4MEYyOEY2Cis6MTA1MDMwMDAwMEQzRTU2MEUwNjg4MDAwMDAxOTgwNjkwMDA4MDFEM0IyCis6MTA1MDQwMDAwMDJGRUFEMTY3NjEwM0UwMDg0ODAxNkQwMTMxMDE2NTc1Cis6MTA1MDUwMDA2NTYwMjA2ODAwMjgwMUQwRkZGNzI2RkZCMEJDMDhCQ0JGCis6MTA1MDYwMDAxODQ3MDAwMDAwMDAwMEIwQTAxQzAwODBBMDgyMjA0MDczCis6MTA1MDcwMDAwMDIwNzA0N0IwQjQxMDIzODI2ODEzNDAwMDIxMDAyQjM5Cis6MTA1MDgwMDAxNUQwMEM0QjFBNDAxMjAxODEyNDE0NDMwMjY4MTU2ODk0Cis6MTA1MDkwMDAxMzFEODBDQjFCNjgwNDNBMDI2MDIwQzI4MEMyMDhDMjg0Cis6MTA1MEEwMDAxNDYwNDI2ODAxMjM5QjA3MDQzMjFBNDM0MjYwMDgxQ0MzCis6MTA1MEIwMDBCMEJDNzA0NzAwRjBGRjBGRjBCNDgyNjg1MzA5MzREM0RFCis6MTA1MEMwMDAxQjRCMUE0MDEyMDE4MTI2MTY0MzAzNjgxRDY4MUYxREUxCis6MTA1MEQwMDAxMENGM0Y2ODA0M0IwMzYwMjBDMzEwQzM4MEMzMUU2MDMxCis6MTA1MEUwMDA0MzY4MUYxRDAxMjM5QjA3M0I0MzQzNjBDQjZCMTgxRjg1Cis6MTA1MEYwMDBDODYzODBDQjgwQzAxQzY4MUYxRDAzMUQwNDYwMzgxQzYyCis6MTA1MTAwMDAzRjY4QzA0NjFGNjAxRjFENDM2ODFDMDQyNDBDODEyMzk4Cis6MTA1MTEwMDAyMzQzM0I2MDQwNjgwMDBDMDAwNDEwNDM3ODYwMDg2RTM1Cis6MTA1MTIwMDAwNDMwMDg2NjQ4NkUwNDMwNDg2NjAwMjBGMEJDNzA0N0MyCis6MTA1MTMwMDAwMEYwRkYwRjgwQjQ4MTZBMDEyMzlCMDdDQTFEMDUzMjZFCis6MTA1MTQwMDAxQTQzMTI2OENGMUQwMTM3M0I0MzFCNjhDMDQ2Q0I2MDMyCis6MTA1MTUwMDAwMTIzOUIwNzBGMUQzQjQzMUI2OEMwNDY4QjYwMDEyMzQ3Cis6MTA1MTYwMDA5QjA3MEI0MzFCNjgwQ0MxMDI2MjAxNkJDMDQ2MEE2MkJECis6MTA1MTcwMDAwNDIzODE2OTE5NDM4MTYxMDI2QkMwNDY5MTYxODE2QTkwCis6MTA1MTgwMDAwNDMxODE2MjAyNkJDMDQ2OTE2MkMxMUQzOTMxNEE4Qjg0Cis6MTA1MTkwMDAwNDNBNEE4MzQ5OEIwMjZCNDAzMjUxODNDMTg5MDQzOUY2Cis6MTA1MUEwMDBDMTgxQzE2ODAwNkJDMDQ2QzE2MDAwMjA4MEJDNzA0N0VGCis6MTA1MUIwMDAwMDQ3MDg0NzEwNDcxODQ3MjA0NzI4NDczMDQ3Mzg0N0Q3Cis6MTA1MUMwMDAzMDQwMkRFOTBDQzA5REU1MEM0OEEwRTEyNDQ4QjBFMTM5Cis6MTA1MUQwMDAxRTAwMDAwQTAxQzA0Q0UyMTg0MEEwRTM2NDUxOUZFNUE0Cis6MTA1MUUwMDA5NDUwMjBFMDAwNTA5MEU1MTQ0MDkwRTUwMDMwODVFNUIzCis6MTA1MUYwMDAwNEMwODVFNTA4MTA4NUU1MEMyMDg1RTUxMDEwOTBFNUQ0Cis6MTA1MjAwMDAxMDUwODVFMjAxMDA1NUUxMEM1MDkwNTUwNDAwNTVFMTI1Cis6MTA1MjEwMDAwNTAwMDAwQTA0MTA5MEU1MDA1MDgwRTUwMDUwODFFNThCCis6MTA1MjIwMDAwMDAwQTBFMzMwNDBCREU4MUVGRjJGRTEwMDMwOTNFNTExCis6MTA1MjMwMDAwODIwOTBFNTAxMzE4M0UzMDIzNjgzRTMwMzAwNTVFMTYyCis6MTA1MjQwMDAxNDMwODBFNUYyRkZGRjFBMDEwMEEwRTNGNEZGRkZFQTRCCis6MTA1MjUwMDAwMTA2MUNFM0YxRkZGRjBBRUMxMDlGRTUwMkM2Q0NFMzU4Cis6MTA1MjYwMDA1NDIwOTFFNUU0MzA5RkU1NTAxMDkxRTVEOUZGRkZFQTI1Cis6MTA1MjcwMDBGMDQ3MkRFOTIwQzA5REU1MEM2OEEwRTEyNjY4QjBFMTZCCis6MTA1MjgwMDAyNTAwMDAwQTE4NDBBMEUzQjg1MDlGRTU5NDAwMDBFMDE0Cis6MTA1MjkwMDAwNTAwODBFMDA4NDA5MEU1MDQ4MDkwRTUwMDcwQTBFMzAwCis6MTA1MkEwMDAxRkMwQTBFMzAyQzQ4Q0UzMDA1MDkwRTUxMDkwOTBFNThECis6MTA1MkIwMDAxNEEwOTBFNTAwMzA4NUU1MDRDMDg1RTUwODEwODVFNTdCCis6MTA1MkMwMDAwQzIwODVFNTEwNTA4NUUyMDkwMDU1RTEwQzUwOTA1NTAxCis6MTA1MkQwMDAwQTAwNTVFMTE1MDAwMDBBMDM3MDE3RTIyMDEwODFFMjcwCis6MTA1MkUwMDAyMDMwODNFMjBBMDAwMDBBMDA2MDk2RTIwMTcwODdFMjQzCis6MTA1MkYwMDAwOTAwMDAwQTIwNjA0NkUyMjAwMDU2RTNFQ0ZGRkZDQUU2Cis6MTA1MzAwMDAwMDcwQTBFMzAxQzA0NkUyMDJDNDhDRTMwMDYwQTBFM0E5Cis6MTA1MzEwMDBFN0ZGRkZFQTAwNTA4OEU1RjJGRkZGRUEwMDEwQTBFMzk0Cis6MTA1MzIwMDAwMDUwODBFNTAxMDBBMEUxRjA0N0JERTgxRUZGMkZFMTNECis6MTA1MzMwMDAwMEEwOTRFNTBBMDA1NUUxMTRBMDgwRTVFNUZGRkYxQUZFCis6MTA1MzQwMDAwMTEwQTBFM0Y1RkZGRkVBQTgwMzAwODA3QzI5MDA4MDlDCis6MTA1MzUwMDAwMDgwMjA0MDY4ODI5RkU1MEI5MkEwRTM2NEEyOUZFNTU1Cis6MTA1MzYwMDA1OEIwOUFFNTBFRjBBMEUxNTRCMDlBRTUxRUZGMkZFMTg3Cis6MTA1MzcwMDAzRjQwMkRFOTAwMDA0RkUxMUYwMDAwRTIxMjAwNTBFMzIyCis6MTA1MzgwMDA1NDAwMDAwQTAwMDAwRkUxODAwMEMwRTMwMEYwMjFFMUJBCis6MTA1MzkwMDAwNDUwQTBFMzAwNDA5OUU1MDkwMDAwRUEwMjAwMTRFMzhDCis6MTA1M0EwMDA1MzAwMDAxQjgwMDAxNEUzNTkwMDAwMUIyMDAwMTRFMzhECis6MTA1M0IwMDA1OTAwMDAxQjAyMDcxNEUzNTkwMDAwMUIwMTA2MTRFMzA3Cis6MTA1M0MwMDA1OTAwMDAxQjA4MDAxNEUzNDUwMDAwMUIwMjA1MTRFMzBDCis6MTA1M0QwMDA0QTAwMDAxQjAyMDgxNEUzNEIwMDAwMUJFNTBFMTRFMzE3Cis6MTA1M0UwMDAwNzAwMDAwQTA0MjA5OEU1MEMxMDk4RTUwNDMwNTJFMjBBCis6MTA1M0YwMDAzQzMwQTBCMzA0MzA4OEU1MDIwMDkxRTcwRkUwQTBFMTYzCis6MTA1NDAwMDAxMEZGMkZFMTAxNTA1NUUyMDMwMDAwMEEwMDQwOTlFNTJBCis6MTA1NDEwMDAwQzAwOUFFNTAwMDAxNEUxMUJGRjJGMTEwODAwOUFFNTJCCis6MTA1NDIwMDAwMDAwMTRFMTBCMDAwMDBBMDEwQzE0RTM5ODAxOUYxNTIxCis6MTA1NDMwMDAwRkUwQTAxMTEwRkYyRjExMDIwNDE0RTM4QzAxOUYxNTNGCis6MTA1NDQwMDAwRkUwQTAxMTEwRkYyRjExMDEwOTE0RTM4MDAxOUYxNTM3Cis6MTA1NDUwMDAwRkUwQTAxMTEwRkYyRjExMDQwMDlBRTUwMDAwMTRFMUU1Cis6MTA1NDYwMDAxNjAwMDAwQTU0RTA4RkUyMDQwMDE0RTM0MDAwOUExNThECis6MTA1NDcwMDAxMEZGMkYxMTAyMEExNEUzNDQwMDlBMTUxMEZGMkYxMTk4Cis6MTA1NDgwMDAwMjA5MTRFMzQ4MDA5QTE1MTBGRjJGMTEwMTAyMTRFM0RBCis6MTA1NDkwMDA0QzAwOUExNTEwRkYyRjExMDEwNDE0RTM1MDAwOUExNUM3Cis6MTA1NEEwMDAxMEZGMkYxMTAxMEExNEUzMjEwMDAwMUIwMjAwMTRFMzc2Cis6MTA1NEIwMDAwRTAwMDAxQjEwMDA5QUU1MDAwMDE0RTExQzAwMDAxQjA4Cis6MTA1NEMwMDAwMDQwOTlFNTA0NTBBMEUzMDA0MDk0RTIxQkZGMkYxMTM3Cis6MTA1NEQwMDAzRjQwQkRFODA0RjA1RUUyQzAwMDgwRTMwMEYwNjFFMTFGCis6MTA1NEUwMDBGQUZGRkZFQTE4MDA5QUU1MUMxMDlBRTUxMUZGMkZFMTc4Cis6MTA1NEYwMDA1NEIwOUFFNTFDMTA5QUU1MTQwMDlBRTUxMUZGMkZFMUNCCis6MTA1NTAwMDAyMDEwOUFFNTAwMDBBMEUzMTFGRjJGRTEyNDEwOUFFNTk2Cis6MTA1NTEwMDAxMUZGMkZFMTI4MTA5QUU1MTFGRjJGRTEyQzEwOUFFNUQ5Cis6MTA1NTIwMDAxMUZGMkZFMTMwMTA5QUU1MTFGRjJGRTEzNDEwOUFFNUI5Cis6MTA1NTMwMDAxMUZGMkZFMUZFRkZGRkVBMzhFMDlBRTUzQzEwOUFFNTAzCis6MTA1NTQwMDAxODAwOUFFNTExRkYyRkUxMzhFMDlBRTUzQzEwOUFFNTQyCis6MTA1NTUwMDAxNDAwOUFFNTExRkYyRkUxNjQyMDlGRTUwMDMwOTJFNUU5Cis6MTA1NTYwMDAwMDMwNTNFMDBBMDAwMEJBMDAzMDgyRTUwQzAwOTJFNUZBCis6MTA1NTcwMDAwODMwOTJFNTAwMTA5MUUyMDMwMDAwMEEwMzEwODBFNzcyCis6MTA1NTgwMDAwNDMwNTNFMjNDMzBBMEIzMDgzMDgyRTUwMTAwQTBFM0QwCis6MTA1NTkwMDAxRUZGMkZFMTNDMTA5RkU1MDAwMDkxRTUwMTAwODBFMjM1Cis6MTA1NUEwMDAwMDAwODFFNTAwMDBBMEUzRjhGRkZGRUExMDAwOUZFNTlFCis6MTA1NUIwMDAwODEwOTBFNTA0MTA1MUUyM0MxMEEwQjMwODEwODBFNUZCCis6MTA1NUMwMDAxRUZGMkZFMUU0MkQwMDgwQ0MwNDAwODA3MTJCRkZGRjMzCis6MTA1NUQwMDBEMTNERkZGRkM5MkJGRkZGQTA4MjIwNDBDOTFDODkwOEQ1Cis6MTA1NUUwMDA4OTAwMDEyMzg1NEE1QjA3MTg0MzEzNjg1QjE4MTM2MDIxCis6MTA1NUYwMDAwMDFGODFBMzVCMUExODQ3MDQyMEEwRTUwNDIwQTBFNTQyCis6MTA1NjAwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUY2Cis6MTA1NjEwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUU2Cis6MTA1NjIwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUQ2Cis6MTA1NjMwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUM2Cis6MTA1NjQwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUI2Cis6MTA1NjUwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUE2Cis6MTA1NjYwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTk2Cis6MTA1NjcwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTg2Cis6MTA1NjgwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTc2Cis6MTA1NjkwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTY2Cis6MTA1NkEwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTU2Cis6MTA1NkIwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTQ2Cis6MTA1NkMwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTM2Cis6MTA1NkQwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTI2Cis6MTA1NkUwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTE2Cis6MTA1NkYwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA2Cis6MTA1NzAwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUY1Cis6MTA1NzEwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUU1Cis6MTA1NzIwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUQ1Cis6MTA1NzMwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUM1Cis6MTA1NzQwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUI1Cis6MTA1NzUwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUE1Cis6MTA1NzYwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTk1Cis6MTA1NzcwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTg1Cis6MTA1NzgwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTc1Cis6MTA1NzkwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTY1Cis6MTA1N0EwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTU1Cis6MTA1N0IwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTQ1Cis6MTA1N0MwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTM1Cis6MTA1N0QwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTI1Cis6MTA1N0UwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTE1Cis6MTA1N0YwMDAwNDIwQTBFNTA0MjBBMEU1MUVGRjJGRTFFNDJEMDA4MDk5Cis6MTA1ODAwMDA5ODAwOUZFNTk4MTA5RkU1MDEyMDQwRTA5NDMwOUZFNUM3Cis6MTA1ODEwMDAwMDAwOTFFNTAzMDA1MEUxMDMwMDAwMUEwNDEwODFFMjRBCis6MTA1ODIwMDAwNDIwNTJFMjAwMDAwMDBBRjhGRkZGRUE3ODAwOUZFNTNBCis6MTA1ODMwMDAwMDIwODBFNTc0MDA5RkU1NzQxMDlGRTUwMTIwNDBFMEEyCis6MTA1ODQwMDA2MDMwOUZFNTAwMDA5MUU1MDMwMDUwRTEwMzAwMDAxQTdECis6MTA1ODUwMDAwNDEwODFFMjA0MjA1MkUyMDAwMDAwMEFGOEZGRkZFQThGCis6MTA1ODYwMDA1MDAwOUZFNTAwMjA4MEU1NEMwMDlGRTU0QzEwOUZFNTJGCis6MTA1ODcwMDAwMTIwNDBFMDJDMzA5RkU1MDAwMDkxRTUwMzAwNTBFMTVECis6MTA1ODgwMDAwMzAwMDAxQTA0MTA4MUUyMDQyMDUyRTIwMDAwMDAwQTIyCis6MTA1ODkwMDBGOEZGRkZFQTI4MDA5RkU1MDAyMDgwRTUxRUZGMkZFMUNBCis6MTA1OEEwMDA3QzM0MDA4MDgwMzAwMDgwQURERUFEREVDMDA0MDA4MDNFCis6MTA1OEIwMDBGQzM3MDA4MDgwMzQwMDgwQzQwNDAwODBGQzNGMDA4MEZFCis6MTA1OEMwMDA0MDM4MDA4MEM4MDQwMDgwNzg0NzAwMDA3MUVBRkZFQTkxCis6MTA1OEQwMDA3ODQ3MDAwMDM5RkVGRkVBNzg0NzAwMDA2M0ZFRkZFQUUwCis6MTA1OEUwMDA3ODQ3MDAwMDFCRkZGRkVBNzg0NzAwMDA2QkVBRkZFQUY5Cis6MTA1OEYwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwODAyODA0MDAwMEZFCis6MTA1OTAwMDBGODNEMDAwMDAwMDEwMDgwMDBGRjAwMDAwMDAwMDAwMEUyCis6MTA1OTEwMDBCOTBCRkZGRjAwMDAwMDAwRDUwQkZGRkYwM0ZGMDY1NDhCCis6MTA1OTIwMDAwMzAwMDAwMDc1MDRGRkZGMDAwMDAwMDBBMTA1RkZGRjU5Cis6MTA1OTMwMDAwNEZGMDc1NDAzMDAwMDAwQjUwNEZGRkYwMDAwMDAwMDRGCis6MTA1OTQwMDBGMTA1RkZGRjA1RkYwNTU0MDMwMDAwMDAzOTA0RkZGRkM4Cis6MTA1OTUwMDAwMDAwMDAwMDU1MDVGRkZGMDFGRjA0MDAwMzAwMDAwMEU4Cis6MTA1OTYwMDA0MTE4RkZGRjAwMDAwMDAwNjEwRUZGRkYwMkZGMDIwODY4Cis6MTA1OTcwMDAwMDAwMDAwMEExMDJGRkZGMDAwMDAwMDBGMTAyRkZGRjk1Cis6MTA1OTgwMDBGRkZGMDE0NDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1OTkwMDA5RDBERkZGRjA2MDBGRjAwMDAwMDAwMDAzRDUwRkZGRkNGCis6MTA1OUEwMDA4MTUwRkZGRjAwMDAwMDAwRkZGRkZGMDAwMDAwMDAwMDJCCis6MTA1OUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkYwMEVBCis6MTA1OUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTA1OUQwMDBGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTA1OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ODA1MDA4MEVBCis6MTA1OUYwMDAxMTc1MjE0MDFCNzUyMTQwMzE3NTIxNDA0OTc1MjE0MEE5Cis6MTA1QTAwMDA1NTc1MjE0MDYzNzUyMTQwN0Q3NTIxNDBBOTc1MjE0MDYwCis6MTA1QTEwMDA2RDc2MjE0MEM1NzYyMTQwRDM3NjIxNDBERDc2MjE0MDQ4Cis6MTA1QTIwMDBFNzc2MjE0MDk5NzcyMTQwQTc3NzIxNDBCNTc3MjE0MDNCCis6MTA1QTMwMDA2MTc4MjE0MDVGN0MyMTQwRTk3QzIxNDA4OTdEMjE0MEMzCis6MTA1QTQwMDBCRDdFMjE0MEM5N0UyMTQwMjk3RjIxNDA4RDdGMjE0MDlDCis6MTA1QTUwMDBCOTdGMjE0MEREN0YyMTQwMUQ4MDIxNDA0NTgwMjE0MENDCis6MTA1QTYwMDA4RDgwMjE0MDlEODAyMTQwQzU4MDIxNDBENTgwMjE0MEVFCis6MTA1QTcwMDAxRDgxMjE0MDVCODEyMTQwQjE4MTIxNDAxMTgyMjE0MDYzCis6MTA1QTgwMDAxQjgyMjE0MDFGODIyMTQwOEQ4MjIxNDBEOTgyMjE0MEVBCis6MTA1QTkwMDAzMTgzMjE0MDZEODMyMTQwRDE4MzIxNDAwOTg0MjE0MEZECis6MTA1QUEwMDAxOTg0MjE0MDUxODQyMTQwNjE4NDIxNDA3NTg0MjE0MDIyCis6MTA1QUIwMDA5RDg0MjE0MEE3ODQyMTQwQjE4NDIxNDAxNTg1MjE0MDQ3Cis6MTA1QUMwMDA0NTg1MjE0MDUxODUyMTQwQzU4NTIxNDBDRjg1MjE0MDE0Cis6MTA1QUQwMDBEOTg1MjE0MEUzODUyMTQwRUQ4NTIxNDBGNzg1MjE0MDhFCis6MTA1QUUwMDAwMTg2MjE0MDBCODYyMTQwMTU4NjIxNDAwMTg5MjE0MEY1Cis6MTA1QUYwMDAxRjg2MjE0MDI5ODYyMTQwMzM4NjIxNDAzRDg2MjE0MDUyCis6MTA1QjAwMDA2NTg2MjE0MDZGODYyMTQwRDE4NjIxNDBEQjg2MjE0MDc5Cis6MTA1QjEwMDBFNTg2MjE0MEVGODYyMTQwRjk4NjIxNDA5RDc0MjE0MDkxCis6MTA1QjIwMDAwMzg3MjE0MDY5ODcyMTQwQjU4NzIxNDBGOTg3MjE0MEJCCis6MTA1QjMwMDAwOTg4MjE0MDlENzQyMTQwNTU4ODIxNDA1OTg4MjE0MDgxCis6MTA1QjQwMDA1RDg4MjE0MEI1ODgyMTQwREQ4ODIxNDBFOTg4MjE0MEQ5Cis6MTA1QjUwMDBFRDg4MjE0MEYxODgyMTQwRjU4ODIxNDBGOTg4MjE0MEQ1Cis6MTA1QjYwMDBGRDg4MjE0MDJEODUyMTQwODk4NTIxNDA5RDc0MjE0MDVCCis6MTA1QjcwMDA5RDc0MjE0MDBEODkyMTQwOUQ3NDIxNDBFMTc0MjE0MDk0Cis6MTA1QjgwMDA5RDc0MjE0MDlENzQyMTQwOUQ3NDIxNDA5RDc0MjE0MDRECis6MTA1QjkwMDA5RDc0MjE0MDlENzQyMTQwNkI3ODIxNDBGNTdCMjE0MDBDCis6MTA1QkEwMDAzMTdDMjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTA1QkIwMDAwMDAwMDAwMDVDMDExODQwNTgwMTE4NDAyNEEzMjA0MDU4Cis6MTA1QkMwMDAyNEE3MjA0MDAwMDAwMDAwMDAwMDAwMDA2QzAxMTg0MEU1Cis6MTA1QkQwMDA2ODAxMTg0MDI0ODMyMDQwMjRBMzIwNDAwMDAwMDAwMEQ2Cis6MTA1QkUwMDAwMDAwMDAwMDdDMDExODQwNzgwMTE4NDAwMDAwMDAwMDBGCis6MTA1QkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QzAxMTg0MEMwCis6MTA1QzAwMDA4ODAxMTg0MDI0QTkyMDQwMjRBQjIwNDAwMDAwMDAwMDU3Cis6MTA1QzEwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDEyMDAxODAwMTIwMDQwCis6MTA1QzIwMDAwQzAwMTIwMDFDMDAxMjAwMjRBODIwNDBBNEE4MjA0MDUwCis6MTA1QzMwMDBBNEE4MjA0MDI0QTkyMDQwMDAwMDAwMDBEMUE4MjE0MEIxCis6MTA1QzQwMDAyREFBMjE0MDAwMDAwMDAwODk3MDIxNDBDOUExMjE0MEY3Cis6MTA1QzUwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDQzCis6MTA1QzYwMDA1Nzg5MjE0MEQxQTgyMTQwQzUyRkZGRkYwNTIxRkZGRjAzCis6MTA1QzcwMDBFRjIwRkZGRjU5QTcyMTQwMzQyRTAwODA0ODJFMDA4MERFCis6MTA1QzgwMDA1QzJFMDA4MDMwMzMzQTMxMzEzQTMxMzEwMDMwMzcyRkQ5Cis6MTA1QzkwMDAzMjMzMkYzMDMxMDAzMDMwMzAzMDMxMzUzNjM5MDA0MzM3Cis6MTA1Q0EwMDA2RjcwNzk3MjY5Njc2ODc0MjAyODYzMjkyMDMyMzAzMEY4Cis6MTA1Q0IwMDAzMTIwMzM0MzZGNkQyMDQzNkY3MjcwNkY3MjYxNzQ2OTZFCis6MTA1Q0MwMDA2RjZFMEEwMDA4MTAwMDAzMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1Q0QwMDAwMDAwMDAwMDhDNTNGRkZGMjdGMDdERkQwMDAxMDAwMjUzCis6MTA1Q0UwMDBEQTBFODIwMDAxNDA2NDA0NjQyRDAwODBFNDJDMDA4MDAwCis6MTA1Q0YwMDA2OTNFRkZGRkM5NEZGRkZGRDUyNEZGRkZDOTNCRkZGRkYwCis6MTA1RDAwMDAyOTNDRkZGRjE5MUFGRkZGNjUxMUZGRkZDQzUzRkZGRjZFCis6MTA1RDEwMDAyMTQwRkZGRjg5NzAyMTQwNDk3MjIxNDBEOTNGRkZGRjk4Cis6MTA1RDIwMDAyMTlBMjE0MDg1MjRGRkZGNjQ1M0ZGRkY4QzUzRkZGRjFFCis6MTA1RDMwMDAwMDAwMDAwMEZGRkYwMDAwODAzMDAwODAwMDAwMDAwMDM1Cis6MTA1RDQwMDBGRkZGMDAwMDAwMDAyMDQwQjA1MDAwMDA3QjBFMDAwMDZDCis6MTA1RDUwMDAwMDZFMjE0MDAwMDAwMDAwMDAwMDAwMDBFRDg5MjE0MDlECis6MTA1RDYwMDA4Qjg5MjE0MEE1OEMyMTQwMDU4RDIxNDBDRDhEMjE0MDdFCis6MTA1RDcwMDA4QjhCMjE0MEE5OEUyMTQwMTU4RjIxNDA2OThCMjE0MEJBCis6MTA1RDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTA1RDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTA1REEwMDAwMDAwMDAwMDU5QkQyMTQwQzFCRDIxNDAyREJFMjE0MDUxCis6MTA1REIwMDAwMDIwMEE0QTBCMjMxQjAyRDExODJEMjM5QjAxRDMxODY0Cis6MTA1REMwMDA4ODYxRDg2MEQ4NjM4MDMyQzg2MDA4NjE0ODYxRDA2MjU5Cis6MTA1REQwMDAwMzQ4QzA0NjQ4NjA4ODYwNzA0NzAwMDA2ODBFMDA4MDM1Cis6MTA1REUwMDBGRTAzMDAwMEYwQjU4NEIwMEMxQzA1MUMwMDIzMDA5M0RBCis6MTA1REYwMDBGRkY3REVGRjY4NDkwQjIzMUIwMkNGMTg3ODY4Mjg0MEE1Cis6MTA1RTAwMDAwMDIyRjg2MDNBNjFCQTY4MjI0MDdBNjEwQzFDNDEwOUFDCis6MTA1RTEwMDAwM0QyNTEwOTAxRDI4MDBBMDJEMzYwNDgwMEYwQzJGOENGCis6MTA1RTIwMDAwMTIwRjk2ODQ5MDkwM0QyNzk2OTQ5MDkwMEQyMDAyMEEzCis6MTA1RTMwMDAwMDA2MDAwRTAzRjBENEZBRjg2ODAwMjg3MEQwMDAyM0EyCis6MTA1RTQwMDAwMjkzMDE5MzU0NEEwMTIzMTg0M0Y4NjAwMDIwRDUxREEyCis6MTA1RTUwMDA3OTM1MDM5NTAxMjQwMDIxNEY0REZBNjgyMjQwMzlEMDRECis6MTA1RTYwMDA4QTAwNTIxODkyMDA0RTRCOUI1QzFFMUM4MzQyMDREMDQ5Cis6MTA1RTcwMDA0QjRCRDMxODVCNzg4MzQyMkNEMTQ5NEJEMjE4RDM3ODQzCis6MTA1RTgwMDAwMzlERUQ2QUFCNDIwMkQ5MDM5REMwNDZFQjYyNTM2OEE1Cis6MTA1RTkwMDA1QjA4MDFEMzAxMjMwMDkzODY0MjBBRDE5NTY4MDI5QkQ3Cis6MTA1RUEwMDA1RTFDMDI5NjlCMDAzQzRFOUUxOTBCMjMxQjAyRjMxOEFFCis6MTA1RUIwMDA5RDYxNTM3ODgzNDIwREQxRDI2ODAxOUI1RDFDMDE5NTkxCis6MTA1RUMwMDA5QjAwMzU0RDVEMTkyRDIzOUIwMUVCMThEQTYwM0E2OTczCis6MTA1RUQwMDAwMTMyM0E2MTY0MDAwMTMxMEIyOUJERDMwMTMwMDkyODM4Cis6MTA1RUUwMDBCOEQzMDAyMDAyOUI5OTAwMkI0QTg5MTgwQjIzMUIwMjcwCis6MTA1RUYwMDBDOTE4ODg2MTAxOUI5OTAwODkxODJEMjM5QjAxQzkxODM1Cis6MTA1RjAwMDBDODYwMDA5QjAwMkIwQ0QxODEwMDg5MTgwQjIzMUIwMjU5Cis6MTA1RjEwMDBDOTE4Q0I2OUMwNDY4QjYxMDEzMDBCMjhGNEQzMDhFMDY3Cis6MTA1RjIwMDAwN0UwMDM5REU4NkEzMDI4MDNEMjMwMjAwMzlEQzA0Njc1Cis6MTA1RjMwMDBFODYyMTk0QTc4NjkwMDI4MkFEMDAwMjEwMTIzMTg0MzExCis6MTA1RjQwMDA3ODYxMDAyMDAxMjQwMDIyMTM0RTdCNjkyMzQwMTBEMDg5Cis6MTA1RjUwMDA5MzAwOUIxODlCMDAxMjRENUIxOTlENzg4NTQyMDhEMUQ4Cis6MTA1RjYwMDAxRDY5MEIxQzlCMDA5RTE5MkQyMzlCMDFGMzE4REQ2M0ZCCis6MTA1RjcwMDAwMTMxNjQwMDAxMzIwQjJBRTZEMzAxMzAwOTI4RTFEMzU0Cis6MTA1RjgwMDAwMDIwODkwMDA0NEE4OTE4MkQyMzlCMDFDOTE4Qzg2MzgxCis6MTA1RjkwMDAwNEIwRjBCQzA4QkMxODQ3NjgwRTAwODAzMDUzRkZGRjA3Cis6MTA1RkEwMDAwMDAxMDA4MDAwNDcwODQ3MTA0NzE4NDc3ODQ3QzA0NjVGCis6MTA1RkIwMDAxOEMwOUZFNTFDRkYyRkUxNzg0N0MwNDYxMEMwOUZFNTQxCis6MTA1RkMwMDAxQ0ZGMkZFMTc4NDdDMDQ2MDhDMDlGRTUxQ0ZGMkZFMTZBCis6MTA1RkQwMDAzODUyRkZGRjg4NTFGRkZGRDVCMDIxNDBGMEI1MDQyMEIzCis6MTA1RkUwMDAxQTQ5MDEyNTA4NjAxQTRGQkIyMzFCMDFGODE4MDU3M0Q1Cis6MTA1RkYwMDAxODQ4NDE2QjJDMDUwMDIwN0E2RTE3NEI4QTQyMUREMDQxCis6MTA2MDAwMDAxOTdCMDAyOTE3RDFEOTFERkYzMTNBMzE0OTc4MUUxQzVGCis6MTA2MDEwMDAwMDI5MTBEMUIwNjAxMDIwNzA2MDEwNEExMDQ5RkZGN0JECis6MTA2MDIwMDBDM0ZGMDAyODA3RDAzNTczMDQyM0I4NjkxODQzQjg2MTRCCis6MTA2MDMwMDAyMDYxMDBGMDE3RjhGMEJDMDhCQzE4NDcxODczMDQyMzVGCis6MTA2MDQwMDBCODY5OTg0M0I4NjEyMDYxRjVFNzAwMDAwMDAwMDBCMDJFCis6MTA2MDUwMDA2ODBFMDA4MDAwMDExODQwMjgwNTAwODAyMDU1RkZGRkQxCis6MTA2MDYwMDA3RDcxMjE0MEY4QjUxNTRGMzk2QzE1NDg0MDZFMEMxQUZBCis6MTA2MDcwMDAxNDRFNzE2ODE0NERBMTQyMDZEODE0NEEwQTQzMDA5Mjg2Cis6MTA2MDgwMDBCOTZCMDkxOEZBNkIxMUUwMTEyMjUyMDUyMjQzMDA5MkY0Cis6MTA2MDkwMDBCOTZCMDkxODAwMjBGQTZCMkIxQ0ZGRjc4REZGNzA2ODk1Cis6MTA2MEEwMDAwMDFCMEE0QTAyNDMwMDkyQjk2QkZBNkIwMDIwMkIxQ0JBCis6MTA2MEIwMDBGRkY3ODJGRkY4QkMwOEJDMTg0NzAwMDA3QzI5MDA4MDZECis6MTA2MEMwMDA2ODBFMDA4MDI4MDUwMDgwNDQ4MDIwNDAwMDAwMzcwMkQwCis6MTA2MEQwMDBGMEI1MkI0RkI4Njg3OTY4QzAxOTIwMzAyOTRBRkZGNzBFCis6MTA2MEUwMDA2M0ZGMDEyMEMwMDIyODQ5QzA0NjA4NjBCOTY4MzgxQzE3Cis6MTA2MEYwMDAyNjREMDAyNDI2NEVFRjFENzkzNzAwMjkzMUQxMzE2ODE1Cis6MTA2MTAwMDAwQTc4MTIwQTAzRDIwNDczRjBCQzA4QkMxODQ3NDk3ODE1Cis6MTA2MTEwMDAwMDI5MENEMTA1MUM0MDY4MDBGMDNFRjkzMDY4MDBGMDAxCis6MTA2MTIwMDA2N0Y4MDAyODI2RDEyQzczRkZGNzU4RkYyMkUwMDkwMUY5Cis6MTA2MTMwMDAwNzFDNDE2MDA4MUMxNzRBMTc0OUZGRjczNUZGMDAyODY0Cis6MTA2MTQwMDAwN0QxM0M3MzA0MjNBODY5OTg0Mzk5MDRBODYxMDg2MUE2Cis6MTA2MTUwMDBEQUU3MTAyMDAwRjAyMEY5MTAyMEI4NjBGRkY3ODJGRjg2Cis6MTA2MTYwMDBEMkU3MDUxQzQwNjgwMEYwMTdGOTMwNjgwMEYwNDBGOEVECis6MTA2MTcwMDAwMDI4RDhEMDAyMjNGODZCMTg0M0Y4NjNDNEU3MDAwMDY2Cis6MTA2MTgwMDAyODA1MDA4MEE1NTVGRkZGMDAwMDAwQjA2ODBFMDA4MEM0Cis6MTA2MTkwMDBFNDAxMDA4MDIwNTVGRkZGN0Q3MTIxNDA5MEI1MDEyMDcyCis6MTA2MUEwMDA0MDAzMTA0OTAwMjcwODYwMEY0Q0UwMURGRjMwM0EzMEQzCis6MTA2MUIwMDA0NzcwRTA2OTgwMDAwMDE5MDA2OTAwRjBEN0Y4RTA2OUQ1Cis6MTA2MUMwMDAwMDI4MDFEMEU3NjEwMUUwMDEyMEUwNjEwNzQ4MDIyM0Q3Cis6MTA2MUQwMDBDMTZCMTk0M0MxNjMyNzczRkZGNzAwRkY5MEJDMDhCQzc0Cis6MTA2MUUwMDAxODQ3MDAwMDAwMDAwMEIwMjgwNTAwODBFODBFMDA4MDdECis6MTA2MUYwMDA4MEI1ODRCMDA3MUM3ODg4NkQyODAzREIzODFDMDBGMDVDCis6MTA2MjAwMDBGN0Y4MTdFMDgwMDAwRDQ5MDk1ODM4MUNGRkY3Q0JGRTVFCis6MTA2MjEwMDAwMDI4MEZEMTM5NzhDOTA5MENEMzY5NDYzODFDMDBGMDIxCis6MTA2MjIwMDBDRkY4Njg0NjAwMjEwMEYwMEJGODAwMjgwMUQxMDEyMENBCis6MTA2MjMwMDAwMEUwMDAyMDA0QjA4MEJDMDhCQzE4NDdFODAxMDA4MEUyCis6MTA2MjQwMDBGMEI1ODJCMDAyMUM0MTRCREQxREZGMzUzQTM1MkY3ODg5Cis6MTA2MjUwMDAwMDJGMDFEMDAwMjcwMEUwMDEyNzJGNzAyRjc4RkIwMENFCis6MTA2MjYwMDBEQjE5NUIwMTNBNEZEQzE5NDA3ODAwMDFDNzFEMDkzNzgzCis6MTA2MjcwMDAwMDIwODMwMEQ2NThDMDQ2RTY1MDAxMzAwNDI4RjhEM0U5Cis6MTA2MjgwMDAwMDI5MEZEMDAwMjJCQjA4MDE5MzgzNDIwQkQ5MTMxQ0I1Cis6MTA2MjkwMDA5QjAwQ0I1ODg2MDBBMzUxMDE5QjAxMzAwMTMyODM0MjAxCis6MTA2MkEwMDBGNUQ4MDBFMDEwMjcyQjQ4MDI2RDgwNkUyQTQ5ODI0MjAzCis6MTA2MkIwMDAwM0Q4ODIxQUNCNkM5QTFBMDBFMDEyMUFCQTQyMDVEODk3Cis6MTA2MkMwMDAyNjQ4ODE2QjAxMzE4MTYzMDEyMDM3RTBDMzE5Q0E2QzE0Cis6MTA2MkQwMDA5MzQyMDhEODIyNEEzQTQzMDA5MjBBMUM0OTZDMDkxODkyCis6MTA2MkUwMDA5MjZDMjMxQzEyRTAxNjFBMDA5NjFCNDk0OTZDMDkxODdGCis6MTA2MkYwMDAxOTQ4ODI2QzAzMjAyMzFDRkZGNzVFRkVCODFCMTg0QTY2Cis6MTA2MzAwMDAwMjQzMDA5MkEzMTkxNDQ4ODI2QzQxNkMwMzIwRkZGN0VBCis6MTA2MzEwMDA1M0ZFMDEyMDBENDlDMDQ2Njg3MDhBNjk5MjAwNTIxOEU4Cis6MTA2MzIwMDAxNzYxOEE2OTAwMkEwMkQwMDAyNzhGNjEwMEUwODg2MTI2Cis6MTA2MzMwMDAwQzQ4MDIyM0MxNkIxOTQzQzE2MzAwMjAwMTI3MEE0OTlECis6MTA2MzQwMDBDMDQ2NEY3MzAyQjBGMEJDMDhCQzE4NDcyODA1MDA4MDU3Cis6MTA2MzUwMDA1MEJBMjA0MDY4MEUwMDgwN0MyOTAwODBBMDgyMjA0MDM2Cis6MTA2MzYwMDAwMDAwMTkwMkU4MEUwMDgwMTgxQTAwODAwNzQ5OEE2RUEyCis6MTA2MzcwMDAxMDE4MDc0QUQyNkMxMzA0MUIwQzgzNDIwMEQ4ODAxQUYxCis6MTA2MzgwMDA4ODY2ODg2RTAzNDlDMDQ2NDg2MTcwNDc2ODBFMDA4MDgxCis6MTA2MzkwMDA3QzI5MDA4MDkwRUUyMDQwMDY0OTRBNkUxMDE4MDY0QTdCCis6MTA2M0EwMDAxMjZDODI0MjAwRDg4MDFBNDg2NjQ4NkUwMzQ5QzA0NjgzCis6MTA2M0IwMDAwODYxNzA0NzY4MEUwMDgwN0MyOTAwODA5MEVFMjA0MEM0Cis6MTA2M0MwMDAwNTIyMEE2MDgyODhDMDQ2OEE4MDAwMjI0QTcwNDA4ODdFCis6MTA2M0QwMDBDMDQ2NDg4MENBODA4QTYwQ0E2MDcwNDcwNTIyMDI2MDUxCis6MTA2M0UwMDAwMDIyODI4MDQyNzA0MTgwQzI4MDgyNjBDMjYwNzA0NzE5Cis6MTA2M0YwMDA4MEI1ODRCMDA3MUMwRTQ4NDE2QjAxMzE0MTYzNjk0NjhBCis6MTA2NDAwMDAzODFDRkZGN0RERkYzODY4QzA0NjAwOTA0NTIwMDBBQjIwCis6MTA2NDEwMDAxODcwMDEyN0RGODA2ODQ2MDAyMUZGRjcxMUZGMDAyODcwCis6MTA2NDIwMDAwMUQxMzgxQzAwRTAwMDIwMDRCMDgwQkMwOEJDMTg0NzMzCis6MTA2NDMwMDBBMDgyMjA0MDAwQjU4NEIwQzE4ODA5NEFDMDQ2OTE4MTNECis6MTA2NDQwMDA2OTQ2RkZGN0JERkYwMTIwNDAwMjAxQUI1ODgwNjg0NjU2Cis6MTA2NDUwMDAwMDIxRkZGN0Y1RkUwMTIwMDRCMDA4QkMxODQ3MDAwMDNBCis6MTA2NDYwMDBFODBFMDA4MDAwQjVGRkY3QzNGRjA4QkMxODQ3MDEyMDA1Cis6MTA2NDcwMDAwMzQ5QzA0NjA4NzFBMTIxNDkwMzg4NjAwMDIwNzA0Nzg0Cis6MTA2NDgwMDAyODBGMDA4MDAwMjAwNDQ5QzA0NjA4NzFGRjIxQTEyMjg2Cis6MTA2NDkwMDA1MjAzMDEzMTkxNjA3MDQ3MjgwRjAwODAwMjIwQTEyMTMyCis6MTA2NEEwMDA0OTAzODg2MDAwMjA3MDQ3MDEyMDQwMDJBMTIxNDkwMzcwCis6MTA2NEIwMDA4ODYwMDAyMDcwNDdDMDg4QzAwNkMwMEVBMTIxNDkwMzMzCis6MTA2NEMwMDA0ODYxMDI0OUMwNDZDODYzMDAyMDcwNDdFODFBMDA4MDRFCis6MTA2NEQwMDA4MEI1ODRCMDA4NDkwRjZCNjk0NkZGRjc3MUZGRjgwNjc1Cis6MTA2NEUwMDBDMDBFMDFBQjU4ODA2ODQ2MDAyMUZGRjdBOUZFMDEyMENECis6MTA2NEYwMDAwNEIwODBCQzA4QkMxODQ3ODAwMDE0NDA4MEI1ODVCMDRCCis6MTA2NTAwMDAwNzFDNjk0NjM4MUNGRkY3NUJGRkY4ODgwNEE5MDNGMEY1Cis6MTA2NTEwMDBDOUZGMDFBQjU4ODAwMUE4NDA4ODAwMjgwRkQwMDFBODBFCis6MTA2NTIwMDA0MDg4ODAwODAzMzg4MDA4MDEzMDA0M0I1ODcwMDQ5ODg0Cis6MTA2NTMwMDAwMTY4QzA0NjAyOTE0MDY4QzA0NjAzOTAwNUUwMDBBODhCCis6MTA2NTQwMDAwMDc4NDAyMzE4NDMwMEFCMTg3MDA0OThDMTFEMDEzMTM2Cis6MTA2NTUwMDA2ODQ2RkZGNzc1RkUwMTIwMDVCMDgwQkMwOEJDMTg0N0VGCis6MTA2NTYwMDA5MEI1ODRCMDE0NEYzOTdCMDAyOTIwRDFGOTFERkYzMTNCCis6MTA2NTcwMDAzQTMxNDk3ODAwMjkxQUQxMTA0OTA1MjIwMDkyMDgyMjlGCis6MTA2NTgwMDAwMEFCNUE4MDk4ODAwNjIwMDBBQjU4NzAwMDI0REM4MDU1Cis6MTA2NTkwMDAwODY4QzA0NjAyOTA0ODY4QzA0NjAzOTAwMTIwMzg3M0RFCis6MTA2NUEwMDA2ODQ2MDgzMUZGRjc0Q0ZFMDAyODAwRDAzQzczMDRCMDY5Cis6MTA2NUIwMDA5MEJDMDhCQzE4NDcwMDAwMjgwNTAwODBBNDJBMDA4MDcxCis6MTA2NUMwMDA5MEI1ODRCMDA3MUM2OTQ2MzgxQ0ZGRjdGOUZFQkE2ODFECis6MTA2NUQwMDAwRDRDMEU0ODAwMkEwNUQxMEQ0OUZGRjdFNEZDMDAyOEI4Cis6MTA2NUUwMDAwQ0RBMDVFMEI5ODgwQjRCRkZGN0RGRkMwMDI4MDVEQTcxCis6MTA2NUYwMDAwMUFCNUM4MDY4NDYwMDIxRkZGNzIyRkUwMDIwMDRCMDVBCis6MTA2NjAwMDA5MEJDMDhCQzE4NDcwMDAwRkZGRjAwMDAwRDc2MjE0MDM5Cis6MTA2NjEwMDBDMUJEMjE0MDU5QkQyMTQwMDBCNUMwODgwM0YwMkVGRjA3Cis6MTA2NjIwMDAwMDIwMDhCQzE4NDcwMEI1RkZGN0UyRkUwOEJDMTg0Nzc5Cis6MTA2NjMwMDAwMEI1RkZGN0RERkUwOEJDMTg0NzAwQjUwMTFDMDIyMEJECis6MTA2NjQwMDAwMEYwMDJGODA4QkMxODQ3QjBCNUM2QjAwNzFDMDgxQzFCCis6MTA2NjUwMDA2OTQ2RkZGN0I1RkUyMTQ4RkZGN0E0RkMwNDFDMjA0QTU5Cis6MTA2NjYwMDAwMDIxMzgxQ0ZGRjdBMEZDMDAyODI3RDAwNEE5MUQ0QUYwCis6MTA2NjcwMDAzODFDRkZGNzk5RkMwNEE4MDAyMzAxMkYwNkQxMENBQUFGCis6MTA2NjgwMDAwMjMyMDAyMTEzNjAwMTMxMTAyOUZCRDMwMTY4MDQyOTczCis6MTA2NjkwMDAwNEQ5ODkwODAzMzk4OTA4MDEzMTAwRTAxOTFDMDBBQkNECis6MTA2NkEwMDA1OTcwMDZBOTA5NzhDMDQ2RDk4MDAwNjhDMDQ2MDI5MDkyCis6MTA2NkIwMDAwNzk4QzA0NjAzOTAwNDMzMDhBRDAyRTA0NTIwMDBBQkM0Cis6MTA2NkMwMDAxODcwMDk0OTIwMUNGRkY3NkVGQzY4NDYyOTFDRkZGNzZCCis6MTA2NkQwMDBCN0ZEMDEyMDQ2QjBCMEJDMDhCQzE4NDcyNDAyRkZGRjNDCis6MTA2NkUwMDA1OUIxMjE0MDlEQUYyMTQwM0MwMkZGRkYwMEI1MDExQzg0Cis6MTA2NkYwMDAwMjIwMDBGMDEwRjgwOEJDMTg0NzAwQjUwMTFDMDEyMDZBCis6MTA2NzAwMDBGRkY3QTJGRjA4QkMxODQ3MDBCNTAxMUMwMTIwMDBGMEVDCis6MTA2NzEwMDAwMkY4MDhCQzE4NDdGMEI1QzdCMDA0MUMwRjFDMzgxQ0ExCis6MTA2NzIwMDAwMUE5RkZGNzRERkUyMTQ4RkZGNzNDRkMwMDkwNzg3ODY3Cis6MTA2NzMwMDAwMDAxQkE2ODA0MzBGQzJBMjVEOEZGMjMwOTMzOTg0MkE3Cis6MTA2NzQwMDAyMUQ4MTkyQzFGRDhGRDg4Rjg2OEMwNDYwNTkwRjkxRDdFCis6MTA2NzUwMDAwOTMxMDZBQjAwMjA3RTc4MDAyRTBEREQ0MEM5NDBDMzE0Cis6MTA2NzYwMDA0MEM5NDBDMzQwQzk0MEMzNDBDOTQwQzMwMTMwMDAwNEQwCis6MTA2NzcwMDAwMDBDN0U3ODg2NDJGMURDMjAxQzA1QTkyQjFDRkZGNzVCCis6MTA2NzgwMDAyMUZDMDAyODA1RDAwMUE4MDA3ODQwMjMxODQzMDFBQjY0Cis6MTA2NzkwMDAxODcwMDc0OTAwOThGRkY3MDZGQzAwMjEwMUE4RkZGN0QxCis6MTA2N0EwMDA0RkZEMDEyMDQ3QjBGMEJDMDhCQzE4NDcyNDAyRkZGRjkyCis6MTA2N0IwMDAzQzAyRkZGRjAwQjVGRkY3MUJGRTA4QkMxODQ3RjBCNTExCis6MTA2N0MwMDBDNkIwMDcxQ0ZDODgyNTRENjg2ODAxMzA2OTQ2Njg2MEMyCis6MTA2N0QwMDAzODFDRkZGN0Y1RkQxMDJDMDhEMzAwQTgwMDc4NDAyM0UzCis6MTA2N0UwMDAxODQzMDBBQjE4NzAwMjIwRDg4MDE3RTA3ODc4ODIwMDM4Cis6MTA2N0YwMDBGQjFEMDkzMzAwMjBCOTY4MDAyQTE1RDk0MENCMEYxQ0I2Cis6MTA2ODAwMDAwMTMxQkU0MjBERDAwMEFBMTI3ODQwMjMxQTQzMDBBQkRBCis6MTA2ODEwMDAxQTcwMDQyMkRBODAwMjkwMDM5MTA0MzM2ODQ2MDAyMTQyCis6MTA2ODIwMDAxNUUwMDEzMDkwNDJFOUQzMDBBQjVDNzAwMjk0Njk2OEQ2Cis6MTA2ODMwMDBDMDQ2MDM5MUEyMDAwMDIwMTAzMzAwMkEwNUQ5MEYxQzg2Cis6MTA2ODQwMDA4MEMzMDEzMDAxMzE5MDQyRjlEMzY4NDYwNEE5RkZGN0IzCis6MTA2ODUwMDBGN0ZDMDEyMDQ2QjBGMEJDMDhCQzE4NDc5QzAzMDA4MDQwCis6MTA2ODYwMDA5MEI0MjM0ODAwNjgwMTIxNDIwOTAwRDMwMDIxMDAyNzg5Cis6MTA2ODcwMDAzQTFDNDMwQjAwRDIwMjIyMTE0MzFFNEEyMDI0RDM2ODQzCis6MTA2ODgwMDAwMTJCMkVEMTgwMEEwMEQyMDAyNDBDNDMyMDFDMUIyMzk0Cis6MTA2ODkwMDBEQjAxRDExODg5OEIwOTBCMDBEMjA0MjczODQzRDE2RjUzCis6MTA2OEEwMDAwOTY4MDkwQTA3RDJEMTFENzkzMTA5NjgwOTY4MDkwQUZFCis6MTA2OEIwMDAwMUQzMDgyMzE4NDNFMzIzMUIwMUQxMTg4OTc5MDMyOTQ1Cis6MTA2OEMwMDAwMkQxRkYyMzAxMzMxODQzMEI0OTA5NkExMDIyNEIwQUY2Cis6MTA2OEQwMDAwMEQyMDAyMjEwNDM4OTA3ODkwRjg5MDEwODQzOTBCQzI4Cis6MTA2OEUwMDA3MDQ3NDAwQzAwRDIwMDI0MEM0MzIwMUNFQ0U3MDAwMDUxCis6MTA2OEYwMDAwMDAwMTA0MDY4MEUwMDgwQzAwMDE4NDBGMEI1M0E0QzBGCis6MTA2OTAwMDAyMDFDMDRGMDA3RkEzOTQ4RTMyMzFCMDFDNzE4Qjk3OUEyCis6MTA2OTEwMDAzNzRFQzUxRDc5MzUwNjI5NjJEMjAyQTM1QjVDNUIwMDQ4Cis6MTA2OTIwMDA5RjQ0MDAxQzAzMEUxRTM3NEU1NTAxMjBCODcxMDAyMEY1Cis6MTA2OTMwMDBCMDYwRkZGNzk1RkYwNTIzOTg0MzAwRjA2RkY4MENFMDc3Cis6MTA2OTQwMDBGRkY3OEVGRkMwMDgwNkQzQjA2ODQxMUNCMTYwMEEyODZCCis6MTA2OTUwMDAwM0Q5MDQyMDAwRTAwMjIwQjg3MTY0MjIyMDFDMkJFMDNGCis6MTA2OTYwMDAwNjFDQzA2RjgwMjMwMTY4MTk0MzAxNjAwMzIwQjg3MUMxCis6MTA2OTcwMDAyMDFDMjA0QTAwMjEwNEYwOTlGOUYwNkYwNDIzMDE2OERCCis6MTA2OTgwMDA5OTQzMDE2MDI4NjgwMTY4MTk0MzAxNjBGMEJDMDhCQ0E0Cis6MTA2OTkwMDAxODQ3MDUyMUI5NzEyOTY4MDQyMzBBNjg5QTQzMEE2MEQ3Cis6MTA2OUEwMDBDMDZGMDE2ODE5NDMwMTYwRkZGNzVBRkYwODIzMTg0M0JECis6MTA2OUIwMDAwMEYwMzRGODIwMUMxMDRBMDAyMTA0RjA3N0Y5RTVFN0Q0Cis6MTA2OUMwMDBGRkY3NEVGRjA0MjMxODQzMDBGMDI4RjhERUU3MDAyMDBECis6MTA2OUQwMDAyOTY4NjAyMzBBNjg5QTQzMEE2MEZGRjdFM0ZBRDVFNzVCCis6MTA2OUUwMDAwNjIwQjg3MUQyRTcwMDAwQTk3OTIxNDA2ODBFMDA4MDI2Cis6MTA2OUYwMDA5QzAzMDA4MDMwNzUwMDAwMTAyNzAwMDAwMEI1MDAyMEM3Cis6MTA2QTAwMDAwNDQ5QzA0Njg4NzEwNDQ4MDEyMjAwMjEwNEYwNEVGOTZGCis6MTA2QTEwMDAwOEJDMTg0Nzk4MUMwMDgwQTk3OTIxNDA5MEI1MDcxQzM0Cis6MTA2QTIwMDAzMTQ4MDA2ODc5MDgwM0QzMTAyMzAxMUM5OTQzMDFFMDIxCis6MTA2QTMwMDAxMDIxMDE0MzJENENFMjY4MDEyQTA1RDEyMjc5MDAyQTU4Cis6MTA2QTQwMDAwMkQwMDEyMzlCMDIxOTQzODE0MjAyRDAwMTIwMDAwNTlDCis6MTA2QTUwMDAwMTYwRTA2ODAxMjgyMEQxMUIyM0RCMDFFMDE4ODA4QjU2Cis6MTA2QTYwMDBGOTA4MDREMzAxMjNEQjAyMDExQzk5NDMwMUUwMDEyMTUxCis6MTA2QTcwMDBDOTAyODE0MjAyRDAwMDIwMDJGMDFBRkIzODA5MDdEMzc0Cis6MTA2QTgwMDBFMDZGODAyMzAxNjg5OTQzMDE2MEUwMTgwMDY4MDBFMDJFCis6MTA2QTkwMDBFMDZGODAyMzAxNjgxOTQzMDE2MDE1NDgwMTZBNzgwOTk1Cis6MTA2QUEwMDAwM0QzRkYyMDAxMzAwODQzMDNFMEZGMjMwODFDMDEzMzE4Cis6MTA2QUIwMDA5ODQzODAwODgwMDBCQTA5OTIwNzkyMEYxMDQzODg0MkQ5Cis6MTA2QUMwMDAwMkQwMEM0OUMwNDYwODYyRTE2ODAxMjkwOEQxNzkwQTYwCis6MTA2QUQwMDAwNkQzRkYyMzA0MzMxODQwMDMyODAxRDFGRkY3OEVGRkFDCis6MTA2QUUwMDA5MEJDMDhCQzE4NDcwMDAwMDAwMDEwNDA2ODBFMDA4MEYxCis6MTA2QUYwMDBDMDAwMTg0MEMwMDAxODAwODBCNUZGRjdCMUZFODAwOTQzCis6MTA2QjAwMDAxQkQyMEY0OEUzMjMxQjAxQzExODRBNzkwMDJBMTREMTc0Cis6MTA2QjEwMDAwMTIyNEE3MTAwMjc4MDMwMDA2ODYwMjMwMTY4OTk0MzkwCis6MTA2QjIwMDAwMTYwMDg0ODA2RTAwMjIwMDJGMDhDRkMwNzIwMDJGMDE5Cis6MTA2QjMwMDA1QkZDMzgxQ0ZGRjczNkZBRjVFNzgwQkMwOEJDMTg0NzQ5Cis6MTA2QjQwMDA2ODBFMDA4MEY0MDFGRkZGMDBCNTg0QjA2OTQ2RkZGN0NFCis6MTA2QjUwMDAzN0ZDRkZGNzg1RkUwMUFCNTg4MDA4NDgwMDY4QzA0NjQ3Cis6MTA2QjYwMDAwMjkwMDc0ODAwNkFDMDQ2MDM5MDY4NDYwMDIxRkZGNzdDCis6MTA2QjcwMDA2N0ZCMDEyMDA0QjAwOEJDMTg0NzAwMDAwMDAwMTA0MDZCCis6MTA2QjgwMDBDMDAwMTg0MDgwQjU4NEIwMDcxQzY5NDYzODFDRkZGNzY4Cis6MTA2QjkwMDAxN0ZDRjg4OEZGRjc0MkZGRkZGNzYyRkUwMUFCNTg4MDUxCis6MTA2QkEwMDA2ODQ2MDAyMUZGRjc0Q0ZCMDEyMDA0QjA4MEJDMDhCQzA0Cis6MTA2QkIwMDAxODQ3QjBCNUM2QjBDNzg4Njk0NkZGRjcwMUZDMDEyNDg1Cis6MTA2QkMwMDAxQTRCOUY0MjBBRDkwMEE4MDA3ODQwMjMxODQzMDBBQjEzCis6MTA2QkQwMDAxODcwMDIyMEQ4ODA2ODQ2MDAyMTIwRTAxNDQ4RkZGNzkyCis6MTA2QkUwMDBFMUY5MDUxQzEzNEEzODFDMDRBOUZGRjdEREY5MTI0OTI1Cis6MTA2QkYwMDAyODFDRkZGN0Q4RjkwMTJGMDZEMTBDQTkwMDIwMDAyMjhDCis6MTA2QzAwMDAwQTYwMDEzMDEwMjhGQkQzMTAyMDAwQUI1ODcwMDQ5OEE0Cis6MTA2QzEwMDBDMDQ2MDI5MDA1OThDMDQ2MDM5MDY4NDYwNkE5RkZGNzUzCis6MTA2QzIwMDAwRkZCMjAxQzQ2QjBCMEJDMDhCQzE4NDdGRjAxMDAwMDk5Cis6MTA2QzMwMDAyNDAyRkZGRjlEQUYyMTQwM0MwMkZGRkZGMEI1QzZCMDJDCis6MTA2QzQwMDAwNzFDNjk0NjM4MUNGRkY3QkJGQkZDODg3ODc4MDEyNUQ4Cis6MTA2QzUwMDAxMDI4MDFEMTE5MkMwOUQ5MDBBODAwNzg0MDIzMTg0MzI1Cis6MTA2QzYwMDAwMEFCMTg3MDAyMjBEODgwMDQzMzI3RTBCODY4QzA0NjEzCis6MTA2QzcwMDAwNDkwRjg2OEMwNDYwNTkwMDZBQUZCMUQwOTMzMDAyMTYwCis6MTA2QzgwMDA3ODc4MDAyODBEREQwMDIwNDBDQjQwQzIwMTMwMDAwNEEwCis6MTA2QzkwMDAwMDBDMDQyOEY4REI0ODFDMDEwNDA5MEM3ODc4ODg0MkIxCis6MTA2Q0EwMDBGMURDMEI0OEZGRjc3RUY5MDcxQzBBNEEyMDFDMDRBOUY3Cis6MTA2Q0IwMDBGRkY3N0FGOTA4NDkzODFDRkZGNzc1Rjk2ODQ2MDAyMTkzCis6MTA2Q0MwMDBGRkY3QkVGQTI4MUM0NkIwRjBCQzA4QkMxODQ3MDAwMDBECis6MTA2Q0QwMDAyNDAyRkZGRkM1QUYyMTQwM0MwMkZGRkZGMEI1ODRCMEE2Cis6MTA2Q0UwMDAwNDFDMDAyN0U2ODhBMjY4NDc0OTA4NzkwMDI4MDhEMEQ0Cis6MTA2Q0YwMDAwMDJFMDFEMDAxMkUwMUQxMDEyNzAxRTAwNDJFMDBEMTg4Cis6MTA2RDAwMDAwMzI2MDEyNTQxNDgwNTJFNjZEMjAyQTM5QjVENUIwMDQ4Cis6MTA2RDEwMDA5RjQ0MDAxQzAzMDYwODBDMTAwMDA1ODAwMDIzMDNFMEJDCis6MTA2RDIwMDAwNTgwMDVFMDAwMjMwMzgwNDM4MDA2RTAwMDIzMDM4MDA0Cis6MTA2RDMwMDA0NTgwMDJFMEZGMjMwMTMzMDM4MENCMUQ3OTMzOUU4OTE4Cis6MTA2RDQwMDAwMTIzNUIwMjlFNDIwMkRCRDIwN0QyMEYwMEUwMDEyMjQ4Cis6MTA2RDUwMDA2RDIzNUIwMUM5MTg4OTg4RkYyM0UxMzM5OTQzMDEyMzFGCis6MTA2RDYwMDAxOTQzMDY4OEZGMzM5RTQyMEREMUZGMjBFMTMwMDg0M0NFCis6MTA2RDcwMDAwMDJBMDREMTAxMjM5QjAyOTg0MzAxMUMyMEUwMDEyMTM5Cis6MTA2RDgwMDA4OTAyMDE0MzFDRTAwMTJFMEFEMTQwODgwMTI4MDREMTY4Cis6MTA2RDkwMDA2MDIzMTk0MzAwMkExM0QwMENFMDIwMjMxOTQzMEZFMDhECis6MTA2REEwMDAwMDJFMEREMTQwODgwMTI4MDhEMUZGMjM4MTMzMTk0M0RCCis6MTA2REIwMDAwMDJBMDVEMDAxMjM5QjAyMTk0MzAxRTA4MDIzMTk0M0Q3Cis6MTA2REMwMDAwNDIwMDJGMDc1RjkwOTIxNDkwMjAwMjAwMkYwNzBGOTRGCis6MTA2REQwMDAwMDJGMDJEMTAwMjAxMkUwRkZFNzY5NDYyMDFDRkZGN0Q4Cis6MTA2REUwMDBFRkZBMDBBODAwNzg0MDIzMTg0MzAwQUIxODcwMDIyMDg3Cis6MTA2REYwMDBEODgwNjg0NjAwMjEwNDMzRkZGNzIyRkEyODFDMDRCMDJCCis6MTA2RTAwMDBGMEJDMDhCQzE4NDcwMDAwNjgwRTAwODA4ODFDMDA4MDk5Cis6MTA2RTEwMDBDMDg4NTEyMTg5MDMwODYyMDAyMDcwNDc4MEI1MTY0RjUxCis6MTA2RTIwMDBGODY4MDEyODA3RDEzNzIzOUIwMUY4MTg0MDhBODAyMTkwCis6MTA2RTMwMDAwMTQzMUIyMDA3RTA2RDIzNUIwMUY4MTg4MDhCMDEyMUMzCis6MTA2RTQwMDA0OTAzMDE0MzEwMjAwMkYwMzNGOTAxMjA3MTIzNUIwMTUzCis6MTA2RTUwMDBGOTE4MDg4MDQ4ODAxQjIzREIwMUY4MTg4MDhCMDEyMzc4Cis6MTA2RTYwMDAxQjAzOTg0MzQxMjEwOTAyMDE0MzAwMjAwMkYwMjBGOTRECis6MTA2RTcwMDAwMDIwODBCQzA4QkMxODQ3NjgwRTAwODA4MEI1MTc0RjAyCis6MTA2RTgwMDBGODY4MDEyODA4RDEzNzIzOUIwMUY4MTg0MDhBODAyMzJECis6MTA2RTkwMDA5ODQzMDExQzFCMjAwOEUwNkQyMzVCMDFGODE4ODA4QkQwCis6MTA2RUEwMDAwMTIzNUIwMzk4NDMwMTFDMTAyMDAyRjAwMUY5RkYyMDJECis6MTA2RUIwMDA3MTIzNUIwMUY5MTgwMTMwMDg4MDFCMjNEQjAxRjgxOEVFCis6MTA2RUMwMDA4MDhCNDEyMzFCMDI5ODQzMDkyMTQ5MDIwMTQzMDAyMDgyCis6MTA2RUQwMDAwMkYwRUVGODAwMjA4MEJDMDhCQzE4NDc2ODBFMDA4MDY1Cis6MTA2RUUwMDA4MEI1ODRCMDA4NDlDRjZBNjk0NkZGRjc2OUZBQjgwNUVBCis6MTA2RUYwMDA4MDBEMDFBQjU4ODA2ODQ2MDAyMUZGRjdBMUY5MDEyMDAxCis6MTA2RjAwMDAwNEIwODBCQzA4QkMxODQ3NDAwMDE0NDBDMDg4OUYyM0QwCis6MTA2RjEwMDAxODQwMDU0OUM5NkExQjIzNUIwMTE5NDAwODQzMDM0OTBFCis6MTA2RjIwMDBDMDQ2Qzg2MjAwMjA3MDQ3NDAwMDE0NDA0MDAwMTQwMDcyCis6MTA2RjMwMDA4MEI1ODRCMDBENDkwRjZBMDEyRjAxRDFGRjAzMDdFMDJFCis6MTA2RjQwMDAwMjJGMDFEMTNGMDMwM0UwMDAyRjAxRDEwMTI3RkYwMkVGCis6MTA2RjUwMDA2OTQ2RkZGNzM1RkEwMUFCNUY4MDY4NDYwMDIxRkZGNzBECis6MTA2RjYwMDA2RkY5MDEyMDA0QjA4MEJDMDhCQzE4NDcwMDIwMTQ0MDExCis6MTA2RjcwMDBDMjg4QTEyMDQwMDMwMDIxMDEyMzVCMDM5QTQyMDFEMTcyCis6MTA2RjgwMDAwMjIyMDRFMDAxMjNEQjAzOUE0MjAyRDEwMTIyMDI2MkMxCis6MTA2RjkwMDAwMEUwMDE2MjA4MUM3MDQ3OTBCNTg0QjAwNzFDMDJGMDQ1Cis6MTA2RkEwMDA5RkY4Njk0NjA0MUMzODFDRkZGNzBBRkEwMUFCNUM4MEE1Cis6MTA2RkIwMDAwOTRGRjg2REMwNDYwMjkwNjg0NjAwMjFGRkY3NDBGOTdFCis6MTA2RkMwMDBGODZEQzAwN0MwMEYwNTQ5QzA0NkM4NjIwMTIwMDRCMDczCis6MTA2RkQwMDA5MEJDMDhCQzE4NDcwMDAwQTQyQTAwODA2ODFDMDA4MEYwCis6MTA2RkUwMDBDMDg4MDI0OUMwNDY0ODYxMDAyMDcwNDc4MDAwMTQwMEY0Cis6MTA2RkYwMDAwMEI1ODRCMDY5NDZGRkY3RTNGOTA2NDhDMDY4MDFBQjA1Cis6MTA3MDAwMDA1ODgwNjg0NjAwMjFGRkY3MUJGOTAxMjAwNEIwMDhCQzM2Cis6MTA3MDEwMDAxODQ3MDAwMDgwMDAxNDQwQzA4ODAyNDlDMDQ2Qzg2MDdDCis6MTA3MDIwMDAwMDIwNzA0NzgwMDAxNDAwODBCNTg0QjA2OTQ2ODc2OEVFCis6MTA3MDMwMDBGRkY3QzZGOTIwMkYwN0QyNzgwMDBDNDk0MDE4MUIyMzEwCis6MTA3MDQwMDBEQjAxQzAxODgwOEIwNkUwMDBBODAwNzg0MDIzMTg0M0JECis6MTA3MDUwMDAwMEFCMTg3MDAyMjAwMUFCNTg4MDY4NDYwMDIxRkZGNzkyCis6MTA3MDYwMDBFRkY4MDEyMDA0QjA4MEJDMDhCQzE4NDc2ODBFMDA4MDBGCis6MTA3MDcwMDAwMEI1ODRCMEMxODg4MjY4MjAyQTA0RDIxMDFDMDJGMEI2Cis6MTA3MDgwMDAxN0Y4MDAyMDEwRTA2OTQ2RkZGNzlBRjkwMEE4MDA3ODg5Cis6MTA3MDkwMDA0MDIzMTg0MzAwQUIxODcwMDIyMEQ4ODA2ODQ2MDAyMUI2Cis6MTA3MEEwMDAwNDMzRkZGN0NERjgwMTIwMDRCMDA4QkMxODQ3OTBCNUIxCis6MTA3MEIwMDA4NEIwQzc4ODY5NDZGRkY3ODNGOTEwNDhGRUY3NzJGRjZFCis6MTA3MEMwMDAwMjIwMzkxQzAyRjBGMkZGMDAyODA2RDAwMjIwMzkxQ0YxCis6MTA3MEQwMDAwMkYwMzZGRjAxQUI1ODgwMDJFMDQ1MjAwMEFCMTg3MDhCCis6MTA3MEUwMDAwNzQ5MjAxQ0ZFRjc1RkZGNjg0NjAwMjFGRkY3QThGODVDCis6MTA3MEYwMDAwMTIwMDRCMDkwQkMwOEJDMTg0NzAwMDAyNDAyRkZGRjI4Cis6MTA3MTAwMDAzQzAyRkZGRkIwQjU4NEIwQzc4ODY5NDY4NDY4RkZGN0NBCis6MTA3MTEwMDA1N0Y5MTA0OEZFRjc0NkZGMEY0QTAyMjAzOTFDRkVGN0M4Cis6MTA3MTIwMDA0M0ZGMDAyODA2RDAwRDRCMDIyMDM5MUMyMjFDRkVGNzFECis6MTA3MTMwMDAzQ0ZGMDJFMDQ1MjAwMEFCMTg3MDA5NDkyODFDRkVGNzBGCis6MTA3MTQwMDAzMkZGNjg0NjAwMjFGRkY3N0JGODAxMjAwNEIwQjBCQzk1Cis6MTA3MTUwMDAwOEJDMTg0NzI0MDJGRkZGNTlCMTIxNDA1OUIwMjE0MDEzCis6MTA3MTYwMDAzQzAyRkZGRjAwQjVGRkY3NDNGOTA4QkMxODQ3MDAyMEI5Cis6MTA3MTcwMDA3MDQ3ODBCNEMyODgxOTRCQTEyMTQ5MDMwMDJBMDNEMTZBCis6MTA3MTgwMDAxODZCMTAyMzk4NDMwNEUwMDEyQTA0RDExODZCMTAyM0Q0Cis6MTA3MTkwMDAxODQzNDg2MTFGRTAwMjJBMUREMUMyNjg4NzY4MDAyMDk5Cis6MTA3MUEwMDAzQjFDQzM0MERCMDdEQjBGOUIwMjAzNDMwQjYxMDEzMDM5Cis6MTA3MUIwMDAwMDA0MDAwQzIwMjhGM0RCMDAyMDEzMUNDMzQwREIwNzc1Cis6MTA3MUMwMDBEQjBGOUIwMkM3MUQxOTM3M0I0MzBCNjEwMTMwMDAwNEU1Cis6MTA3MUQwMDAwMDBDMjAyOEYxREIwMDIwODBCQzcwNDc4MDAwMTQ0MEE4Cis6MTA3MUUwMDA4MEI0QzI4ODgxNjgxMDAyMTIwQTEwNDMwMjA0MTIwQzkzCis6MTA3MUYwMDAwQzQ4QzA0NjAyNjAwQzRCQzA0NjFBODAwQTBDMTcwMkFECis6MTA3MjAwMDAxMjEyM0E0MzEyMDQxMjBDNDI2MDVBODAwOTA0MDkwQzBCCis6MTA3MjEwMDAwQTAyMDkwQTExNDMwOTA0MDkwQzgxNjA5OTgwMDAyMEJGCis6MTA3MjIwMDA4MEJDNzA0NzQwMDAxNDAwMjgxQjAwODBCMEI1ODRCMEJCCis6MTA3MjMwMDAxMzQ5MEE2ODEyMDQxMjBDMTMwMjEyMTIxMzQzNEE2ODBCCis6MTA3MjQwMDAxMjA0MTIwQzFGMUMxMzAyMTIxMjEzNDM4OTY4MDkwNDQyCis6MTA3MjUwMDAwOTBDMEEwMjA5MTIxMTQzMEMwNDI0MEM2OTQ2MUQxQzc2Cis6MTA3MjYwMDBGRkY3QUVGODAxQUI1RjgwMjgwNDIwNDMwMjkwNjg0NjI4Cis6MTA3MjcwMDAwMDIxRkVGN0U1RkYwMTIwMDRCMEIwQkMwOEJDMTg0N0IwCis6MTA3MjgwMDA0MDAwMTQ0MEMxODg4MjY4MDgwMjA5MEEwODQzMDAwNENCCis6MTA3MjkwMDAwMDBDMEE0OUMwNDZDODYwMTAwQzAzMDIwMDEyMTg0M0QzCis6MTA3MkEwMDAwMDA0MDAwQzA4NjExMDA0MDAwQzAyMDIwMDBBMTA0M0U0Cis6MTA3MkIwMDAwMDA0MDAwQzQ4NjEwMDIwNzA0NzAwMDA0MDAwMTQwMEVBCis6MTA3MkMwMDA5MEI1ODRCMDE2NEJEOTY4MDkwNDA5MEMwQTAyMDkxMjVBCis6MTA3MkQwMDAxMTQzMUE2OTEyMDQxMjBDMTcwMjEyMTIzQTQzNUI2OTI1Cis6MTA3MkUwMDAxQjA0MUIwQzFGMDIxQjEyM0I0MzFGMDQzRjBDMDUyM0Y2Cis6MTA3MkYwMDAwMDkzODQ4ODAxQUIxQzgwMDAyNDA0M0I1QzcwNDA4OEIwCis6MTA3MzAwMDAwMEFCNTg4MEQ5ODAxMDA0Mzg0MzAyOTAwMzk0Njg0NjNCCis6MTA3MzEwMDAwMDIxRkVGNzk1RkYwMTIwMDRCMDkwQkMwOEJDMTg0NzdGCis6MTA3MzIwMDA0MDAwMTQ0MDAwQjU4NEIwMEI0OThBNkEwNTIxMDA5MUUxCis6MTA3MzMwMDA4MTg4MDFBQjE5ODAwMDIxMDQzQjU5NzA0MDg4MDBBQjYzCis6MTA3MzQwMDA1ODgwREE4MDAyOTEwMzkxNjg0NkZFRjc3OUZGMDEyMEE4Cis6MTA3MzUwMDAwNEIwMDhCQzE4NDcwMDAwQzAwMDE0NDBDMDg4MDI0OUFGCis6MTA3MzYwMDBDMDQ2ODg2MjAwMjA3MDQ3QzAwMDE0MDAwMEI1ODRCMDk5Cis6MTA3MzcwMDAwQjQ5MEE2QTA1MjEwMDkxODE4ODAxQUIxOTgwMDAyMTFGCis6MTA3MzgwMDAwNDNCNTk3MDQwODgwMEFCNTg4MERBODAwMjkxMDM5MTI5Cis6MTA3MzkwMDA2ODQ2RkVGNzU1RkYwMTIwMDRCMDA4QkMxODQ3MDAwMEZFCis6MTA3M0EwMDBDMDAwMTQ0MEMwODgwMjQ5QzA0NjA4NjIwMDIwNzA0N0VGCis6MTA3M0IwMDBDMDAwMTQwMDAwQjVDMDg4MDI0OUZFRjdGNEZEMDAyMEFCCis6MTA3M0MwMDAwOEJDMTg0Nzc1MDJGRkZGMDBCNTg0QjA2OTQ2RkVGNzk4Cis6MTA3M0QwMDBGN0ZGMDY0ODAwNkIwMUFCNTg4MDY4NDYwMDIxRkVGN0I2Cis6MTA3M0UwMDAyRkZGMDEyMDA0QjAwOEJDMTg0NzAwMDA2ODBFMDA4MDgxCis6MTA3M0YwMDAwMEI1RkVGN0ZERkYwOEJDMTg0NzAwQjVGRUY3RjhGRjIzCis6MTA3NDAwMDAwOEJDMTg0NzAwQjVGRUY3RjNGRjA4QkMxODQ3ODBCNTY1Cis6MTA3NDEwMDAwNzFDMTA0OEZFRjdDNkZEMDEyMDQwMDJBMTIxNDkwM0M4Cis6MTA3NDIwMDA4ODYwMDAyMTBDNDhDMDQ2MDE3MTBDNDgwMjY4NTIwQzZCCis6MTA3NDMwMDAwNUQyMDI2ODEyMEMwNkQxMDA2ODgwMEEwM0QzMDg0OEZFCis6MTA3NDQwMDBDMDQ2Qzc2MDAyRTAwNzQ4QzA0NjA3NjQwODFDODBCQzBECis6MTA3NDUwMDAwOEJDMTg0N0Q1OTQyMTQwMjgwRjAwODAwMDAwMTA0MDM4Cis6MTA3NDYwMDA0MDAxMTgwMDAwMDAwMDgwMDBCNTAxMjAwMzQ5QzA0NjFCCis6MTA3NDcwMDAwODcyMTIyMEZGRjdDQkZGMDhCQzE4NDc4ODFDMDA4MDU5Cis6MTA3NDgwMDAwMEI1MDEyMDAzNDlDMDQ2NDg3MjE1MjBGRkY3QkZGRjMxCis6MTA3NDkwMDAwOEJDMTg0Nzg4MUMwMDgwMDBCNTAxRjBGOUZGMDEyMEU2Cis6MTA3NEEwMDAwOEJDMTg0NzgwQjU4NEIwMDcxQ0Y4ODgwMkYwRkVGOEM1Cis6MTA3NEIwMDAwMDI4MENEMTY5NDYzODFDRkVGNzgyRkYwNjQ4MDFBQjU0Cis6MTA3NEMwMDA1ODgwNjg0NjAwMjFGRUY3QkJGRTAxMjAwMEUwMDAyMDQ2Cis6MTA3NEQwMDAwNEIwODBCQzA4QkMxODQ3RkZGRjAwMDA4MEI1ODRCMDMyCis6MTA3NEUwMDA2OTQ2RkVGNzZERkYwMTI3MDFBQjVGODAwOTQ4ODE4OTdFCis6MTA3NEYwMDAwOTA0QzI4OTExNDMwMjkxODE4ODA5MDRDMDg4MDg0M0E0Cis6MTA3NTAwMDAwMzkwNjg0NjAwMjFGRUY3OUJGRTM4MUMwNEIwODBCQzQ3Cis6MTA3NTEwMDAwOEJDMTg0NzRDMkEwMDgwMDBCNUZFRjc2OUZGMDhCQzdDCis6MTA3NTIwMDAxODQ3MDBCNUZFRjc2NEZGMDhCQzE4NDcwMEI1RkVGNzIyCis6MTA3NTMwMDA1RkZGMDhCQzE4NDcwMEI1RkVGNzVBRkYwOEJDMTg0N0E0Cis6MTA3NTQwMDAwMEI1RkVGNzU1RkYwOEJDMTg0NzAwQjVGRUY3NTBGRjIxCis6MTA3NTUwMDAwOEJDMTg0NzAwQjVGRUY3NEJGRjA4QkMxODQ3MDBCNTNDCis6MTA3NTYwMDBGRUY3NDZGRjA4QkMxODQ3MDBCNUZFRjc0MUZGMDhCQzEwCis6MTA3NTcwMDAxODQ3MDBCNUZFRjczQ0ZGMDhCQzE4NDcwMEI1RkVGN0ZBCis6MTA3NTgwMDAzN0ZGMDhCQzE4NDcwMEI1RkVGNzMyRkYwOEJDMTg0N0E0Cis6MTA3NTkwMDAwMEI1OENCMDA4QTlGRUY3MTNGRjY5NDYwOEE4MDJGMEYxCis6MTA3NUEwMDBBOUZGMDIyMDA4QUI1ODcwNjk0NjA4QThGRUY3NDhGRUZDCis6MTA3NUIwMDAwMTIwMENCMDA4QkMxODQ3MDBCNUZFRjcxOUZGMDhCQzQ1Cis6MTA3NUMwMDAxODQ3OTBCNTg0QjAwNzFDNjk0NjM4MUNGRUY3RjhGRUQyCis6MTA3NUQwMDBGQTg4MTI0OTAxMjRDODFEODkzMDAwMkEwRkQwMDQ3MDhFCis6MTA3NUUwMDA0NDcwQjg2ODAwMEM4MDMxQzg4MkI4NjhDMDQ2MDg4MzBGCis6MTA3NUYwMDBGODY4MDAwQzQ4ODNGODY4QzA0Njg4ODMwMkUwMDAyMUUwCis6MTA3NjAwMDAwMTcwNDE3MDA2NDgwMUFCNTg4MDY4NDYwMDIxRkVGN0MyCis6MTA3NjEwMDAxN0ZFMjAxQzA0QjA5MEJDMDhCQzE4NDc2ODBFMDA4MDAwCis6MTA3NjIwMDBGRkZGMDAwMDAwQjVGRUY3RTNGRTA4QkMxODQ3MDBCNUY5Cis6MTA3NjMwMDBGRUY3REVGRTA4QkMxODQ3MDBCNUZFRjdEOUZFMDhCQzExCis6MTA3NjQwMDAxODQ3MDBCNUZFRjdENEZFMDhCQzE4NDcwMEI1RkVGNzkyCis6MTA3NjUwMDBDRkZFMDhCQzE4NDc5MEI1ODRCMDA3MUM2OTQ2MzgxQzlCCis6MTA3NjYwMDBGRUY3QUVGRUY4ODgwMzI0RTQwNDA0NDMwMzIzREIwNDlFCis6MTA3NjcwMDA5QzQyMDJEMzBGNEI5QzQyMDZEOTBGNDgwMUFCNTg4MDY1Cis6MTA3NjgwMDA2ODQ2MDAyMUZFRjdEQ0ZEMDEyMDgwMDcyMDQzMDA2OEVBCis6MTA3NjkwMDAwMDIxMDBBQjU5NzBGQTg4QzA0NkRBODAwMjkwMDM5MTRECis6MTA3NkEwMDA2ODQ2MDQzM0ZFRjdDQ0ZEMDEyMDA0QjA5MEJDMDhCQzUyCis6MTA3NkIwMDAxODQ3MDAwMEUwMDAxODAwRkZGRjAwMDA4MEI1ODRCMDBDCis6MTA3NkMwMDAwNzFDNjk0NjM4MUNGRUY3N0JGRUY4ODgwMzIzREIwNEExCis6MTA3NkQwMDAxODQzOTg0MjAyRDMwQTRCOTg0MjA4RDkwOTQ4MDFBQjkzCis6MTA3NkUwMDA1ODgwNjg0NjAwMjFGRUY3QUJGRDAxMjAwM0UwQjk2ODMxCis6MTA3NkYwMDBDMDQ2MDE2MDAwMjAwNEIwODBCQzA4QkMxODQ3MDAwMEYwCis6MTA3NzAwMDBFMDAwMTgwMEZGRkYwMDAwODBCNTg2QjAwMkE5RkVGNzc4Cis6MTA3NzEwMDA1N0ZFMDEyNzAyQUI1RjcwMDAyMEQ4ODAwQTQ4NDE2OEZECis6MTA3NzIwMDBDMDQ2MDQ5MTgxNjhDMDQ2MDU5MUMxNjhDMDQ2MDA5MTc5Cis6MTA3NzMwMDA0MDY5QzA0NjAxOTA2OTQ2MDJBOEZFRjc4MUZEMzgxQ0U5Cis6MTA3NzQwMDAwNkIwODBCQzA4QkMxODQ3NjgxOTAwODAwMEI1QzE2ODQ1Cis6MTA3NzUwMDA4MDY4RkVGNzQ3RkIwMDIwMDhCQzE4NDcwMDIwNzA0N0YwCis6MTA3NzYwMDA5MEI1ODRCMDA0MUMwRjFDNjg0NjUwMjFGRUY3MzZGRTBECis6MTA3NzcwMDAwMUFCNUM4MDAyOTc2ODQ2MDAyMUZFRjc2MUZEMDRCMDEyCis6MTA3NzgwMDA5MEJDMDhCQzE4NDc4MEI1ODRCMDA3MUM2ODQ2NTEyMURFCis6MTA3NzkwMDBGRUY3MjRGRTAxQUI1RjgwNjg0NjAwMjFGRUY3NTBGRDM2Cis6MTA3N0EwMDAwNEIwODBCQzA4QkMxODQ3MDAyMDcwNDcwMDIwNzA0NzE4Cis6MTA3N0IwMDA5MEI1ODRCMDAwMjcxMjQ5MDk2ODEyNEExMjZCMTAyMzUxCis6MTA3N0MwMDAxQTQwMDEyNDAwMkEwMEQwMDEyNzhBMEMwM0QzM0EwNDZFCis6MTA3N0QwMDAxMjBDMDIyNzE3NDNDOTBDMDNEMzM5MDQwOTBDMDQyN0UwCis6MTA3N0UwMDAwRjQzNjk0NkZFRjdFQ0ZEMDFBQjVGODA2ODQ2MDAyMTYwCis6MTA3N0YwMDBGRUY3MjZGRDIwMUMwNEIwOTBCQzA4QkMxODQ3MDAwMDEyCis6MTA3ODAwMDAwMDAwMTA0MEMwMDAxODQwMDBCNTg0QjA2OTQ2RkVGNzgzCis6MTA3ODEwMDBEN0ZEMDY0OEMwNkQwMUFCNTg4MDY4NDYwMDIxRkVGN0QxCis6MTA3ODIwMDAwRkZEMDEyMDA0QjAwOEJDMTg0NzAwMDBBNDJBMDA4MDA2Cis6MTA3ODMwMDAwMEI1RkVGN0RERkQwOEJDMTg0NzcwNDcwMDIwNzA0NzEzCis6MTA3ODQwMDAwMDIwNzA0NzAwMjA3MDQ3MDAyMDcwNDcwMDIwNzA0N0RDCis6MTA3ODUwMDAwMDIwNzA0NzAwQjVGRUY3Q0JGRDA4QkMxODQ3MDAwMEJDCis6MTA3ODYwMDA4MEI1ODVCMDAxQTlGRUY3QUJGRDAwMjAwMUFCNTg3MEQzCis6MTA3ODcwMDAwQzQ5Qzk2ODAxMjcwMTI5MDJEMTAzOTcwNDk3MDFFMDQ3Cis6MTA3ODgwMDAwMzk3MDQ5MDY4NDYwMUYwMzNGRDAyQUIwMDk4QzA0NkIwCis6MTA3ODkwMDA1ODgwMDAyMTAxQThGRUY3RDNGQzM4MUMwNUIwODBCQzNECis6MTA3OEEwMDAwOEJDMTg0NzY4MEUwMDgwNzA0NzA0NDkwMDIwMDAyMjc5Cis6MTA3OEIwMDAwQTcwMDEzMDAxMzE2ODI4RkFEMzcwNDdBMDgyMjA0MDU1Cis6MTA3OEMwMDAwMDIyODg0MjAzRDM0MDFBMDEzMjg4NDJGQkQyMTAxQ0E2Cis6MTA3OEQwMDA3MDQ3ODg0MjAyRDM0MDFBODg0MkZDRDI3MDQ3OTBCNDY1Cis6MTA3OEUwMDAwMTFDRkYyNzA0MjkyN0RBMDAyMDE0NEE0MzAwMUIxODMzCis6MTA3OEYwMDBEQjAwRDQ1ODYzMEMxQUQyNEIwMDU5MThDOTAwNTc1OEYyCis6MTA3OTAwMDA0MzAwMUIxOERCMDBENzUwODkxODlBMTg0RjY4QzA0NkVGCis6MTA3OTEwMDA1NzYwOEI2OEMwNDY5MzYwMEI2OUMwNDYxMzYxNEI2OTIyCis6MTA3OTIwMDBDMDQ2NTM2MUM5NjhDMDQ2RDE2MDkwQkM3MDQ3MDEzMDAxCis6MTA3OTMwMDAwMDA2MDAwRTA0MjhEOURCMzgxQ0Y2RTc0MEFCMjA0MEQ3Cis6MTA3OTQwMDBGN0I1QzRCMDA0MUMwMDIwNDY5QTExMjExMTQwNkVEMDM2Cis6MTA3OTUwMDAwMDI3NzkwMEM5MTlDOTAwNTc0QTUxNTg0OTBDMDNEMjY4Cis6MTA3OTYwMDAwMTMwMDAwNjAwMEUwNEUwNzkxQzBGMDYzRjBFMDQyRkM0Cis6MTA3OTcwMDBFRkRCMDAyODVCRDAwMDI2MDAyMjAwOTI0MDIzMDAyMThDCis6MTA3OTgwMDAwMDIwMDJBQTAwRjA4OEZBMDRBOTAwMjA4MjAwOEE1ODg4Cis6MTA3OTkwMDAxMjA2MTIwRUEyNDIwM0QxNzIxQzE2MDYzNjBFMDRFMDI1Cis6MTA3OUEwMDAwMTMwMDAwNjAwMEUxMDI4RjBEQjAwMkUzREQwMDQyQzI0Cis6MTA3OUIwMDAzRUQxODAwMDA4NTg0MDAxODAwRDAwMjIwMDkyMTAyMzIzCis6MTA3OUMwMDAwMDIxMDJBQTAwRjA2OEZBMDAyMTAxOTEwMkE4MDU5OTlECis6MTA3OUQwMDA0OTBDODkwNTI5RDBDMTY4MEEwNjEyMEU0NTlCOUE0MkI2Cis6MTA3OUUwMDAxMUQxQzA2ODQwMDE4NjBEMDAyMjAwOTIwQzIzMDAyMUI1Cis6MTA3OUYwMDAzMDFDMDJBQTAwRjA1MEZBMDE5OTAyOUQ0ODFDMDEwNkIxCis6MTA3QTAwMDAwOTBFMDE5MTBFRTA0ODAxODYwRDAwMjIwMDkyMTAyMzFDCis6MTA3QTEwMDAwMDIxMzAxQzAyQUEwMEYwM0ZGQTAyQTgwNTk5NDkwQzg3Cis6MTA3QTIwMDA4OTA1RDhEMTAxOTkwMDI5MEZEMUZGMjAzREUwNDBFMDIwCis6MTA3QTMwMDA4MDAwMDg1ODQwMDE4NjBEMDAyMjAwOTIwQzIzMDAyMThFCis6MTA3QTQwMDAzMDFDMDJBQTAwRjAyOEZBMDI5RDAxMjAwMDA0NDY5QTg4Cis6MTA3QTUwMDAxMDQzNzkwMEM5MTlDOTAwMTc0QUMwNDY1MDUwMzAxQzVDCis6MTA3QTYwMDA4RTE4NzA2MDEwMjAwNDJDMDBEMDBDMjAwNDFDQjA2MDE0Cis6MTA3QTcwMDAwMDIwMjAyMTQ2OUExMTQwMjAyOTAwRDAyODFDMzA2MTg2Cis6MTA3QTgwMDAyODE5RkYyMUZGMzAwODMwMDkzMUZGRjcxOUZGNDMwMUEyCis6MTA3QTkwMDAxODE4QzAwMDAwMUI3MDYxMDAyMDUwMjE0NjlBMTE0MDQ4Cis6MTA3QUEwMDA1MDI5MDBEMTI4MUNGMDYwMzgxQzQ3QjBGMEJDMDhCQzNECis6MTA3QUIwMDAxODQ3RkYyMEY5RTcwMDAwNDBBQjIwNDA4MEI0MDAyM0M2Cis6MTA3QUMwMDAwMDIyMDAyOTA2RDk4NzVDN0I0MDFCMDYxQjBFMDEzMjcxCis6MTA3QUQwMDA4QTQyRjhEM0Q4NDMwMDA2MDAwRTgwQkM3MDQ3RjBCNTQ4Cis6MTA3QUUwMDBDNkIwMDQyODA3REE0MTAwMDkxOEM5MDA0NTkxNDE0QTg3Cis6MTA3QUYwMDA1MTU4NEIwQzAyRDIwMDIwQzA0Mzc2RTAwMTIzNUIwNEI2Cis6MTA3QjAwMDAxOTQwNDMwMDE4MThDMDAwM0E0QTE0MTgwMDI5NjFEMERGCis6MTA3QjEwMDAwMDIxMDI5MTIwNjlBMTY4NDUxODMwRDBGRjIxNjgxRTFDCis6MTA3QjIwMDAwOTMxRkZGN0NERkU2MTY4NDAxODAxOTAwMTk4ODE0MjRDCis6MTA3QjMwMDAwMkQxQTY2OEFGMUIwOUUwMDAyNkZGMjEyODFDMDkzMUVECis6MTA3QjQwMDBGRkY3QzdGRTA3MUMwMUQxRkYyNzA5MzcwMDIyMDA5MjZCCis6MTA3QjUwMDAwMTk4MzExQzAzQUEzQjFDMDBGMDlFRjkwM0E4MzkxQ0I0Cis6MTA3QjYwMDBGRkY3QUNGRkMwNDMwMjk5NDg0MDAxMDYwOTBFMDI5MTlECis6MTA3QjcwMDBFRDFCQTA2OEE4NDIwMEQxMDAyNTAwMkRDRUQ4MDI5OUE3Cis6MTA3QjgwMDBDRjQzMDAyMjAwOTIwQzIzMDAyMTYwNjgwM0FBMDBGMDdBCis6MTA3QjkwMDA4M0Y5MjA2OUMwNDYwMzkwMDU5ODAwMEEwMDAyMzkwNjVGCis6MTA3QkEwMDAwOTBFMDg0MzA1OTBGRjIzMUIwMjk4NDMwNTkwMEMyMTAyCis6MTA3QkIwMDAwM0E4RkZGNzgzRkZGRjIzMUIwMjA1OTk5OTQzMDAwNkUzCis6MTA3QkMwMDAwMDBFMDAwMjA4NDMwNTkwMEMyMzAwMjE2MDY4MDNBQTAwCis6MTA3QkQwMDAwMEYwQ0FGOTAwMjA0NTk5MDY0QUMwNDY1MDUwQzE0M0ZBCis6MTA3QkUwMDA2MTYwQTE2MEUxNjAyMTYxNjE2MTQ2QjBGMEJDMDhCQ0U4Cis6MTA3QkYwMDAxODQ3MDAwMDQwQUIyMDQwQjBCNDRDNDIwMDI5MDBEQkU1Cis6MTA3QzAwMDAwQzFDMDAyN0ZGNDMwNDI4MjFEQTEyNEQ0MzAwMTgxOEVBCis6MTA3QzEwMDBDMDAwNDAxOTAxMkEwNUQwMDIyQTA5RDAwMzJBMTZEMTMyCis6MTA3QzIwMDAwMTY5MEJFMDAwMjkxMkRCMDI2OThBNDIwRkQzMDVFMEVCCis6MTA3QzMwMDAwMDI5MDdEQUMxNjhBMTQyMDlEMzA5MUJDMTYwQzA2OEU1Cis6MTA3QzQwMDBCMEJDNzA0N0MxNjgwOTE5MDI2OTkxNDJGNkQ5MzgxQzY1Cis6MTA3QzUwMDBGNkU3MDAwMDQwQUIyMDQwRjBCNTg0QjAxNzFDMEQxQ0M3Cis6MTA3QzYwMDAwMDIxMDI5MTQyMDAxMjE4RDIwMDJDNDk4QjU4MUIwNkE5Cis6MTA3QzcwMDAxQjBFMDE5MzAwMjNEQjQzMDQyODAyREEwMTk4NDAwODFECis6MTA3QzgwMDAwMUQyMTgxQzQ2RTA1NDE4RTA2OEMyMTkyMTY5OEE0MkUyCis6MTA3QzkwMDAwMEQ5MEYxQTAwMkYzQ0Q5QTA2OEUxNjg0MDE4RkYyMUQ1Cis6MTA3Q0EwMDAwOTMxRkZGNzBERkU2MTY4NDYxOEEwNjhFMTY4NDAxOEM5Cis6MTA3Q0IwMDBGRjIxMDkzMUZGRjcwREZFQzIxOUZGMjEwOTMxOEE0MjY4Cis6MTA3Q0MwMDAxNEQ5MDE5QUMwNDYwMDkyMEIxQTAzOTMwMTFDMzAxQzcwCis6MTA3Q0QwMDAyQTFDMDBGMEUxRjhFMDY4MDM5QkMwMThFMDYwMDM5QkY5Cis6MTA3Q0UwMDA1RDE5RkYxQTAyOTgxODE4MDI5MDEwRTAwMTlBQzA0NjE4Cis6MTA3Q0YwMDAwMDkyMDExQzMwMUMyQTFDM0IxQzAwRjBDREY4RTA2OEVGCis6MTA3RDAwMDBDMDE5RUQxOUUwNjAwMjk4QzAxOTAyOTAwMDI3MDAyRkY5Cis6MTA3RDEwMDBDMkQ4MDI5ODA0QjBGMEJDMDhCQzE4NDc0MEFCMjA0MDYxCis6MTA3RDIwMDBGMEI1ODNCMDE3MUMwRDFDMDAyMTAxOTE0MjAwMTIxODAwCis6MTA3RDMwMDBEMjAwMDI5MjMwNDk4QTU4MTIwNjEyMEUwMDI0RTQ0M0ZGCis6MTA3RDQwMDAwNDI4MDFEQTUwMDkwMUQyMjAxQzUxRTAwMjlBNTQxODhCCis6MTA3RDUwMDBFMDY4QzIxOTYwNjk4MjQyMDFEOTIyNjk4NzFBMDAyRjNFCis6MTA3RDYwMDA0NUQ5MjU0RUEwNjhFMTY4NDAxOEZGMjEwOTMxRkZGNzg5Cis6MTA3RDcwMDBBN0ZENjE2ODQwMTgwMDkwQTA2OEUxNjg0MDE4RkYyMUU1Cis6MTA3RDgwMDAwOTMxRkZGN0E2RkQwMjlBQjE1ODAxMjM1QjA0MTk0MzlDCis6MTA3RDkwMDBCMTUwQzExOUZGMjIwOTMyOTE0MjEzRDkxMzFBMDExQ0EzCis6MTA3REEwMDAwMDk4MkExQzFFMUMwMEYwREZGOEUwNjg4MDE5NzUxOTg1Cis6MTA3REIwMDBFMDYwMjE2OTg4NDIwMEQ5MjA2MUJGMUIwMTk4MzAxODFBCis6MTA3REMwMDAwMTkwMTJFMDAxMUMwMDlFMzAxQzJBMUMzQjFDMDBGMDlDCis6MTA3REQwMDBDQkY4RTA2OEMwMTlFRDE5RTA2MDIxNjk4ODQyMDBEOTRDCis6MTA3REUwMDAyMDYxMDE5OEMwMTkwMTkwMDAyNzAwMkZCOUQ4MDE5ODhGCis6MTA3REYwMDAwM0IwRjBCQzA4QkMxODQ3NDBBQjIwNDBCMEI1QzNCMERFCis6MTA3RTAwMDAwQzFDMDAyN0ZBNDMwNDI4MDZEQTQxMDAwOTE4QzkwMEFGCis6MTA3RTEwMDAxNDQ4NDU1ODZCMEMwNEQyMTAxQzQzQjBCMEJDMDhCQ0NECis6MTA3RTIwMDAxODQ3NjIwOTFCRDMwMDIyMDA5MjA4MTg0MDY4MEMyM0VGCis6MTA3RTMwMDAwMDIxMDFBQTAwRjAzMEY4MTEyQzBERDAxMjJDMEREMDI5Cis6MTA3RTQwMDAxMzJDMDVEMDE0MkMwQUQxMDM5ODAwMDQwNzBFMDZFMDY5Cis6MTA3RTUwMDAwMzk4MDcwNjNGMEUwMkUwMDE5RjAwRTAwMjlGMzgxQ0Q2Cis6MTA3RTYwMDBEQkU3MDAwMDQwQUIyMDQwMDM0OTAwMjAwMDIyMEE1NDE5Cis6MTA3RTcwMDAwMTMwNjAyOEZCRDM3MDQ3NDBBQjIwNDAwMEI1MDJGMEQyCis6MTA3RTgwMDA2RkZBNTcyMDAyRjBDQ0Y5MDJGMDQwRjkwMDBBRkJEMzU4Cis6MTA3RTkwMDAwMkYwNEVGQTA4QkMxODQ3RjBCNTgyQjAwNzlEMTQxQ0RBCis6MTA3RUEwMDAxRjFDMzA0QUQyNkYyMDIzMTY2ODlFNDMxNjYwMzMxQzc1Cis6MTA3RUIwMDBGRjIyMDEzMjJBNDA0MDAyMDg0MzA1MEEwNjFDMDAwQzNBCis6MTA3RUMwMDAwMTkwMDAyQTIwRDAwMkYwNEJGQTUzMjAwMkYwQThGOUNBCis6MTA3RUQwMDAwMTk4QzA0NjAwOTAwMkYwQTNGOTI4MUMwMkYwQTBGOTE2Cis6MTA3RUUwMDAzMDFDMDJGMDlERjkwMkYwMjNGQUZGRjdDN0ZGMDJGMDAxCis6MTA3RUYwMDAzN0ZBNTQyMDAyRjA5NEY5MDA5ODAyRjA5MUY5MjgxQzA2Cis6MTA3RjAwMDAwMkYwOEVGOTMwMUMxNEUwMDJGMDJBRkE1MjIwMDJGMDNFCis6MTA3RjEwMDA4N0Y5MDE5ODAyRjA4NEY5MjgxQzAyRjA4MUY5MzAxQ0RECis6MTA3RjIwMDAwMkYwN0VGOTAwMjAwMkYwN0JGOTAwMjAwMkYwNzhGOURGCis6MTA3RjMwMDAwMDIwMDJGMDc1RjkwMDIwMDJGMDcyRjkwMDJGMDVEOTM3Cis6MTA3RjQwMDAwMkYwRTRGODIwNzAwMTM0MDEzRkY5RDEwMkYwRjBGOUI5Cis6MTA3RjUwMDAwNDRBRDA2RjIwMjMwMTY4MTk0MzAxNjAwMkIwRjBCQ0NECis6MTA3RjYwMDAwOEJDMTg0NzY4MEUwMDgwRjBCNTgyQjAxNDFDMUYxQ0I2Cis6MTA3RjcwMDA0MjAyMEE0MzE1MUMwMTI4NTREMDJDNDlDODZGMjAyMzAzCis6MTA3RjgwMDAwMjY4OUE0MzAyNjBDODZGNDAyMzAxNjgxOTQzMDE2MDg4Cis6MTA3RjkwMDAwMkYwRTZGOTUzMjAwMkYwNDNGOTI4MEMwNjFDMDJGMDI3Cis6MTA3RkEwMDAzRkY5MjgwQTAxOTAwMDkwMDJGMDNBRjkyODFDMDJGMEVCCis6MTA3RkIwMDAzN0Y5MDJGMEJERjlGRkY3NjFGRjAyRjBEMUY5ODQyMDMzCis6MTA3RkMwMDAwMkYwMkVGOTMwMUMwMkYwMkJGOTAwOTgwMkYwMjhGOThCCis6MTA3RkQwMDAyODFDMDJGMDI1RjkwMDJGMDVEOTIwNzgwMTM0MDJGMDgxCis6MTA3RkUwMDAxRkY5MDEzRkY5RDEwMkYwQTNGOTAyRjBCOUY5ODMyMDlBCis6MTA3RkYwMDAwMkYwMTZGOTMwMUMwMkYwMTNGOTAxOTgwMkYwMTBGOUEyCis6MTA4MDAwMDAyODFDMDJGMDBERjkwMkYwOTNGOUZGRjczN0ZGMDc0OTNBCis6MTA4MDEwMDBDODZGNDAyMzAyNjg5QTQzMDI2MEM4NkYyMDIzMDE2ODNBCis6MTA4MDIwMDAxOTQzMDE2MDAyQjBGMEJDMDhCQzE4NDc2ODBFMDA4MDFDCis6MTA4MDMwMDA3MDQ3MDAwMDgwQjUwMUYwOEZGODA2NEZDMDQ2Rjg2MDI5Cis6MTA4MDQwMDAwMUYwRjJGODc4ODAwMUYwQjFGODM4NzE4MEJDMDhCQzFBCis6MTA4MDUwMDAxODQ3MDAwMDY4MEUwMDgwMDBCNTAxRjAwNUY5MDI0OURDCis6MTA4MDYwMDBDMDQ2MDg4MDA4QkMxODQ3NjgwRTAwODAwQjQ4QzE2OEVECis6MTA4MDcwMDAwMTI5MTFEMUMxNkYwMjIzMEE2ODFBNDMwQTYwQzE2RjM2Cis6MTA4MDgwMDA4MDIzMEE2ODFBNDMwQTYwQzExODA4Njg4MjIzMDI2OEJDCis6MTA4MDkwMDAxQTQzMDI2MDAwMjAwODgxNzA0NzAwMDA2ODBFMDA4MENCCis6MTA4MEEwMDBGMEI0NEE0OUNBMUQ5RDMyMDAyMDAwMjc4MzAwRDc1MEYyCis6MTA4MEIwMDAwMTMwMTcyOEZBRDM0NjRDMDAyMDgyMDBBNzUwMDEzMDI3Cis6MTA4MEMwMDAyMDI4RkFEMzQzNEEwMDIwODMwMEQ3NTAwMTMwMjAyOENCCis6MTA4MEQwMDBGQUQzQTc2MTk3NjE0RjY1OEY2NTNGNERDMDQ2MkY2MDBBCis6MTA4MEUwMDA2RjYwQUY2MEFGNjFFRjYwMkY2MTZGNjEwMDIwQzEwMDEyCis6MTA4MEYwMDAwOTE4NDkwMTM1NEJDOTE4ODYwMENCMURGOTMzMzQ0QzlBCis6MTA4MTAwMDAzNDE5RTM2MzExMjM1QjAxQ0IxODYzNjMwRDIzOUIwMUQ3Cis6MTA4MTEwMDBDQjE4QjQxOEUzNjMyMzIzNUIwMUM5MTg2MTYzMDEzMEYyCis6MTA4MTIwMDAwMjI4RTREQjI5NDhDMTFERjkzMTI5NENDMDQ2QTE2MjZGCis6MTA4MTMwMDA2MTZCMEQyMzlCMDFFMTYyQzExODkxNjI1MTZCQzA0NkQ2Cis6MTA4MTQwMDBEMTYyMDgyMUUxNjQyNTQ5QzA0NjIxNjUyNDQ5MEI2OUIzCis6MTA4MTUwMDBDMDQ2NjM2NUMzMUQ0RDMzRTM2NTI1NjY4QjY4QzA0NjI1Cis6MTA4MTYwMDA2MzY2Q0I2OEMwNDZBMzY2MUU0QkMwNDZFMzY2Mjc2N0JFCis6MTA4MTcwMDAwQjIzREIwMUMzMThBMzY3Njc2NzAxMjZFMzFENjkzMzdGCis6MTA4MTgwMDA2NjYxRTc2MTFGNzMwMjIzRDM2NDE3NEJDMDQ2MTM2NTEyCis6MTA4MTkwMDBDQjY5QzA0NjUzNjVDMzFENTEzM0QzNjUyQjFEMTM2NjkwCis6MTA4MUEwMDA0QjY5QzA0NjUzNjY4OTY5QzA0NjkxNjYwRjQ5QzA0NjBGCis6MTA4MUIwMDBEMTY2MTY2NzBGMjNEQjAxQzAxODkwNjc1NjY3RDc2MTM5Cis6MTA4MUMwMDBEMDFENjkzMDU2NjEwNzczRjBCQzcwNDc2ODBFMDA4MDlGCis6MTA4MUQwMDBFNDJDMDA4MDY0MkQwMDgwOTBFRTIwNDAzMDAxMTgwMEQ3Cis6MTA4MUUwMDA3QzI5MDA4MDAwNTVGRkZGMzgwMTE4MDAxMDU1RkZGRjYzCis6MTA4MUYwMDA5MEI0MDAyMTFFNEFCQjIzMUIwMUQ3MThGOTczMTkyMzIxCis6MTA4MjAwMDBEQjAxRDAxODAxMjRDRDIzMUIwMUQzMThDMTYxMUM3MEUwCis6MTA4MjEwMDAzMzIzOUIwMUQzMTg5OTYwQjk3MzU5NjEyRjIzOUIwMUI0Cis6MTA4MjIwMDBEMzE4MTk2MDEzNEI1MTI3QkYwMzAzNjMzQjYwODQ2OTY0Cis6MTA4MjMwMDBFNDE4NDQ2MzA0M0M3QzYwMDEyNEU0MDI4NDYzMEU0QzMzCis6MTA4MjQwMDBDMDQ2QkM2MDA0NkJDMDQ2NDQ2Mjg0NjlFNDE4MEI0QkIyCis6MTA4MjUwMDBFMzE4RkI2MDAzNkJDMDQ2ODM2MjQzNkFDMDQ2MDM2MjU3Cis6MTA4MjYwMDBDMTYzNTE2NDkxNjREMTY1RDE2NjkwQkM3MDQ3MDAwMEQwCis6MTA4MjcwMDA2ODBFMDA4MDAwMDAyMDQwRkMwNzAwMDBGQ0Y3RkZGRkI0Cis6MTA4MjgwMDA5MEI0MDAyMjFCNDlDOTIzMUIwMUM4MTgwMjcxMDEyMEE4Cis6MTA4MjkwMDBCQjIzMUIwMUNCMTg1ODczMTc0ODAzMUMwMDI3REMxRDk4Cis6MTA4MkEwMDBDMTM0MUM2NTIzMUMwMTM3M0YyRkY4RDMxQTY1MTkyM0VECis6MTA4MkIwMDBEQjAxQ0YxODMzMjM5QjAxQ0IxODNBNjE5ODYxNDAyMDMyCis6MTA4MkMwMDBGODYwREE2MTFBNjJDQTY0MEE2NjBDNDhDMDQ2QzI2MDg1Cis6MTA4MkQwMDAwQjQ4MDA2QkMwMDZDMDBFRjg2MzBBNDgwMTY4QzA0NjMwCis6MTA4MkUwMDAxOTgwNDE2OEMwNDY1OTgwODA2OEMwNDY5ODgwOTBCQzFCCis6MTA4MkYwMDA3MDQ3MDAwMDY4MEUwMDgwOTBCQzIwNDA5MEVFMjA0MDQ3Cis6MTA4MzAwMDA4MDAwMTQ0MDQwMDAxNDQwMDAyMDBBNDlDMDQ2MDg3MzExCis6MTA4MzEwMDBDQjFERkYzMzNBMzM4ODYxQzg2MTE4NzAwNjRBQzA0NkU2Cis6MTA4MzIwMDAxMDY1NTA2NjkwNjYwODcwNTg3MEJCMjMxQjAxRDExODA5Cis6MTA4MzMwMDAwODczNzA0NzI4MDUwMDgwNjgwRTAwODBGMEI0MkY0OTRDCis6MTA4MzQwMDAyRjRBQzA0NjExNjEwMTIzOUIwMkM4MTg1MDYxMkQ0ODc1Cis6MTA4MzUwMDBDMDQ2MTA2MkRCMDBDMzE4NTM2MjAwMjMxMzYzNTM2M0VCCis6MTA4MzYwMDAyOTRBMkE0RkQ0MURGRjM0RkEzNDE0QzcwODNGM0I2MTExCis6MTA4MzcwMDAxQzFGN0M2MTI2NEZDMDQ2Mzk2MEI4NjE3OTYxRjg2Mjg0Cis6MTA4MzgwMDAzQjYzN0I2NEJBNjRGQTY1MjI0RkZFMURGOTM2MjI0REM5Cis6MTA4MzkwMDBFQzFENzkzNDI2NjI1MTI2QjYwMzM3NjEyNDZBQzA0NjQzCis6MTA4M0EwMDA3NDYxMkY2NzFENEQwOTI3N0YwNEVDMUQ3NTM0N0M2MEI3Cis6MTA4M0IwMDAzRDYwMUI0Q0MwNDYzQzYxRTYxRDc1MzY3RTYxMTk0RjIxCis6MTA4M0MwMDBDMDQ2N0M2MDNENjAwRjFDMDAyMUZGMjQwMTM0MUQxQzUxCis6MTA4M0QwMDA4QjAwRkQ1MDAxMzFBMTQyRkFEMzAxMUMwMDIwMDEyNzdFCis6MTA4M0UwMDBGRjAyODMwMENENTAwMTMwQjg0MkZBRDMwMDIwODEwMDUzCis6MTA4M0YwMDA1NTUwMDEzMDgwMjhGQUQzRjBCQzcwNDcyNEEzMjA0MEE4Cis6MTA4NDAwMDA0MDAxMTgwMDI0ODMyMDQwMjRBOTIwNDA4MDAxMTgwMDQ2Cis6MTA4NDEwMDBBODAzMDA4MDI0QTcyMDQwNjgwRTAwODAyNEE4MjA0MEU0Cis6MTA4NDIwMDBBNEE4MjA0MDA4MDQwMDgwQjhCNTJDNDhGREY3QkFGRDg4Cis6MTA4NDMwMDAwMTIwMkI0OTBBNjg1MjBDMDZEMjBBNjgxMjBDMDJEMTlDCis6MTA4NDQwMDAwQTY4OTIwQTAwRDIwMDIwMDQwNjI0MEUyNTRBRDcxRDhECis6MTA4NDUwMDAwRDM3MDAyMzAwMjA5RDAwNzg1MTAxMzMwNDJCRkFEM0ZGCis6MTA4NDYwMDAwMTI3M0YwNTUwNjFGODYwRDA2MUY4NjEwMDIzREI0M0NDCis6MTA4NDcwMDA5MzYxM0I2MTEzNjIzQjYyMDAyNzFCNEI4RDY4QzA0NkQyCis6MTA4NDgwMDAwMDk1OEQ2OUMwNDYwMDk1MDAyQzBCRDBERDZCQzA0NjcxCis6MTA4NDkwMDAwMDk1OUQ2QkMwNDYwMDk1NUQ2QkMwNDYwMDk1MUQ2QkI5Cis6MTA4NEEwMDBDMDQ2MDA5NTAxMzc0MDJGRThEMzAwMjc2QzQ2MDEyM0QyCis6MTA4NEIwMDA1QjA3MUM0MzAxRTAyMDYwMDEzNzBENjgyQjA5MDJEMkU1Cis6MTA4NEMwMDA4MDJGRjhEMzAxRTA4MDJGMDNEMzA4NDk0QjZFMDEzMzhFCis6MTA4NEQwMDA0QjY2RDA2MkI4QkMwOEJDMTg0NzAwMDBGNDAxRkZGRjJGCis6MTA4NEUwMDAwMDAwMTA0MDY4MEUwMDgwMDAwMTE4NDBBMDgyMjA0MDZCCis6MTA4NEYwMDA5MEI0MDAyMTBFNEYwRjRBMDAyMDRDMDE2NDFBQTQwMEQyCis6MTA4NTAwMDBBMzE4NTg2MDk4NjAxODY0NTg2NDEwNTM1ODgwQ0MwMEMxCis6MTA4NTEwMDBFNDE5OTg2N0RDNjIwMTMxMDMyOUVFRDMwNjQ5QzA0NkFECis6MTA4NTIwMDAwODYwNDg2MDg4NjBDODYwMDg2MTkwQkM3MDQ3MDAwMEJGCis6MTA4NTMwMDBBQzY2MjE0MDVDMkIwMDgwRDAyQzAwODA2NDIxMDU0ODczCis6MTA4NTQwMDBDMDQ2MDE2MzAwMjFDOTQzNDE2MzgxNjMwMDIxQzE2M0M3Cis6MTA4NTUwMDAwMTY0NzA0NzY4MEUwMDgwODBCNDAxMjA0MDAyMEE0OTFGCis6MTA4NTYwMDBDMDQ2MDg2MDNDMjA0ODYwODg2MDA4NDhDMDQ2Qzg2MDMzCis6MTA4NTcwMDAwMDIwMDc0QTg3MDBDQjY4QzA0NkRBNTEwMTMwMTAyODM2Cis6MTA4NTgwMDBGOEQzODBCQzcwNDcwMDAwRTQyRDAwODBGNDJEMDA4MEZCCis6MTA4NTkwMDA1RDRDRkZGRjEyNDkxMzQ4NjcyMzlCMDFDQTE4MDZDMEIwCis6MTA4NUEwMDAwODM4MTE0QkNBMThDMTYwODI2MDAxNjEwRjQ5MTA0ODM4Cis6MTA4NUIwMDBBNzIzOUIwMUNBMTgwNkMwMDgzODBFNEJDQTE4QzE2MDExCis6MTA4NUMwMDA4MjYwMDE2MTBDNDgwRDQ5NjcyMzlCMDFDMjE4MDVDMUY3Cis6MTA4NUQwMDAwODM5MDU0QkMyMThDODYwOEE2MDA4NjE3MDQ3MDAwMEZFCis6MTA4NUUwMDBBQzFFMjE0MDQ4MkUwMDgwRkMxRjAwMDBBQ0VFMjA0MDU1Cis6MTA4NUYwMDAzNDJFMDA4MEZDMkYwMDAwQUMzRTIxNDA1QzJFMDA4MDE5Cis6MTA4NjAwMDA5MEI0MDAyMTQwNEMwMDIwMEEwMTEyMTkxOTIzREIwMTBCCis6MTA4NjEwMDBEMjE4RDA2MjEwNjM1MDYzOTA2MzAxMzEwMzI5RjNEMzAxCis6MTA4NjIwMDAzQTQ5QzA0NjA4NjM0ODYzODg2MzIwNjAwMTIxRTMxRDFFCis6MTA4NjMwMDA1OTMzNjA2MDE5NzExODcyOTg3MTk4NzI1OTcxNTg3MjMzCis6MTA4NjQwMDBEODcxRDg3MkUyMUQ0OTMyMTE3MzE5NzA5MDczOTg3MDA1Cis6MTA4NjUwMDA1MTczNTk3MEQwNzNEODcwMTE3MTExNzI5MDcxOTA3MkZBCis6MTA4NjYwMDA1MDcxNTA3MkQwNzFEMDcyMTg3MzAyMjJFNzFENjkzN0IxCis6MTA4NjcwMDAzQTcwOTk3M0JBNzA1ODczNzg3MEQ4NzNGODcwMzk3MTBBCis6MTA4NjgwMDAzQTcyQjk3MUI5NzI3ODcxN0E3MkY5NzFGOTcyMzk3MzkzCis6MTA4NjkwMDBFMzFENzkzMzFBNzBCOTczOTk3MDc4NzM1QTcwRjk3MzRFCis6MTA4NkEwMDBEOTcwMUE3MTFBNzI5OTcxOUE3MjU4NzE1QTcyRDk3MTc1Cis6MTA4NkIwMDBEQTcyMTk3M0U3MUQ4OTM3M0E3MDk5NzNCOTcwNTg3Mzc0Cis6MTA4NkMwMDA3QTcwRDk3M0Y5NzAzOTcxM0E3MkI5NzFCOTcyNzg3MTc3Cis6MTA4NkQwMDA3QTcyRjk3MUY5NzIzQTczRTMxRDk5MzMxQTcwQjk3M0FBCis6MTA4NkUwMDA5QTcwNzg3MzVBNzBGOTczREE3MDE5NzExQTcyOTk3MUY1Cis6MTA4NkYwMDA5OTcyNTg3MTVBNzJEOTcxRDk3MjIwNjFFMDYwNjA2MUMzCis6MTA4NzAwMDBBMDYwOTBCQzcwNDcwMDAwQTAxQzAwODBFODE5MDA4MEE5Cis6MTA4NzEwMDA4MTIwMDAwMjAxNDlDMDQ2ODg2MjcwNDdDMDAwMTQwMEYxCis6MTA4NzIwMDAwOTQ5MEE0QkM4MTgwNDNCQzkxODA4NjAwMDIxQzIxRDNBCis6MTA4NzMwMDAyOTMyQzI2MTEwMUMwMTMxMDgyOUY4RDNDMTFGMjkzOTFGCis6MTA4NzQwMDAwMDIwQzg2MTcwNDcwMDAwNjgwRTAwODA4NDA5MDAwMEE2Cis6MTA4NzUwMDAwNjQ4MDc0OUMwNDYwODgwNDg4MDAwMjA4ODgwQzg4MEI1Cis6MTA4NzYwMDA4ODYwMDQ0OUMwNDY0ODYxODg2MTcwNDdGRkZGMDAwMDg3Cis6MTA4NzcwMDA0QzJBMDA4MDZDMDYwMDgwMDAyMTA2NDhDMjFEMTkzMjc4Cis6MTA4NzgwMDBDMTYwMDE2MUMxNjEwMTYyMTE3MUZGMzAwMTMwNDE2MjVDCis6MTA4NzkwMDA3MDQ3MDAwMDZDMDYwMDgwMDk0ODBBNEJDMDQ2MTg2MDBDCis6MTA4N0EwMDAwMDIxQzIxRDREMzJDMjYwMTAxQzAxMzExNDI5RjhEM0MyCis6MTA4N0IwMDBDMTFGNEQzOTAwMjBDODYwNTg2MDk4NjA3MDQ3MDAwMEE0Cis6MTA4N0MwMDBEODA3MDA4MDZDMDYwMDgwMDBCNTBCNDkwQjQ4RkRGNzA4Cis6MTA4N0QwMDBFQUZCMEI0ODAwNkEwMTIzREIwMzk4NDMwOTQ5QzA0NkMyCis6MTA4N0UwMDAwODYyMDk0OEMxNjgwMTI5MDREMUMwNkY4MDIzMDE2ODZCCis6MTA4N0YwMDAxOTQzMDE2MDA4QkMxODQ3QzFCRDIxNDA3NTk4MjE0MDRDCis6MTA4ODAwMDBDMDAwMTg0MEMwMDAxODAwNjgwRTAwODAwMEI1MEY0ODc2Cis6MTA4ODEwMDBDMTY4MDEyOTA0RDFDMDZGODAyMzAxNjg5OTQzMDE2MEI4Cis6MTA4ODIwMDAwQjRCMEM0ODBDNEEwMDIxRkRGN0JGRkIwQjQ4NDE4RDU4Cis6MTA4ODMwMDAwMTMxNDE4NTAwMjFDMTg1MDk0ODAwNkEwMTIzREIwMzFDCis6MTA4ODQwMDAxODQzMDg0OUMwNDYwODYyMDhCQzE4NDc2ODBFMDA4MEYzCis6MTA4ODUwMDA1OUJEMjE0MDc1OTgyMTQwQjgwQjAwMDAwMDAwMDA4MEYwCis6MTA4ODYwMDBDMDAwMTg0MEMwMDAxODAwRjBCNTFCNEMxMDI2RTA2ODhFCis6MTA4ODcwMDAwMTI4MDhEMTYwODgwMDI4MDVEMTIwNzkwMDI4MDJEMTdDCis6MTA4ODgwMDAxOTIwQTA2NzAwRTBBNjY3MDAyMDA3MjM1QjAyRTUxODE3Cis6MTA4ODkwMDBDMTQzRTg2MTY5NjI1OTA4QTEyNzdGMDM3OTYwMEYyMTBDCis6MTA4OEEwMDA3OTYwRTExREI5MzEwODcxMDEyMEI4NjA0MDAyQjg2MEZCCis6MTA4OEIwMDAwMEYwNENGQTAwRjBGMEZBMDQyMEI4NjAwNzIwNzg2MTZDCis6MTA4OEMwMDA3RTYwMUIyM0RCMDFFMDE4QzA4QjA0MjMxODQwRTg2MkE0Cis6MTA4OEQwMDBGMEJDMDhCQzE4NDcwMDAwNjgwRTAwODA5MEI0MDIxQzcxCis6MTA4OEUwMDAwMDIwRkYyMzAxMzM5QTQyMDhEMDAxMjkwMEQxMDEyMDQyCis6MTA4OEYwMDAwMDJBMDFEMTAyMjMxODQzOTBCQzcwNDcxQjRBRDc2ODU1Cis6MTA4OTAwMDAxQTRCMTk3OTFDMUMzNzIzOUIwMUUzMTgwMTJGMEREMTM5Cis6MTA4OTEwMDA1Nzg4MDAyRjBBRDEwMDI5MEFEMTU5OEIwQTA5MDBEM0EwCis6MTA4OTIwMDAwMjIwNDkwOUU4RDMwMTIzMTg0M0U1RTcwMDI5MDNEMEQxCis6MTA4OTMwMDA5ODhBODAwNzgwMEZERkU3NkQyMzVCMDFEMTE4OEE4ODUyCis6MTA4OTQwMDBGRjI3MDEzNzE3NDAwQTQ5Qzk4ODAzRDA0QjBBMDFEM0QyCis6MTA4OTUwMDAwMzIwRDFFNzEzMEEwM0QzMEIwQTAxRDMwMjIwQ0JFNzhDCis6MTA4OTYwMDBEMjA5QzlEM0M5MDlDN0QzMDEyMEM1RTc2ODBFMDA4MDYxCis6MTA4OTcwMDAwODFDMDA4MEYwQjVDMUIwMDEyMDAwMDc1MjQ5QzA0Njc0Cis6MTA4OTgwMDAwODYwNTI0ODQyNjk0MDBEQTEyMTQ5MDM0ODYwNTA0ODlGCis6MTA4OTkwMDBDMDZBNTA0QjE4NDMwMDIxMDMwMzFCMEI0RTRDMjc2RjNBCis6MTA4OUEwMDAzRDAzMkQwQkU3MUQ3OTM3QUI0MjFDRDBFMzFENzkzMzE2Cis6MTA4OUIwMDAxQjZBQzA0NjQwOTMwMTIzOUIwNzAzNDMxQjY4Q0MwMEZFCis6MTA4OUMwMDA2RTQ2MzM1MTAxMjM5QjA3MDYxRDMzNDMxQjY4NkM0NERECis6MTA4OUQwMDA2MzYwMDgzMDAxMzE0MDlCODM0MjAwRDgzRjQ4MDMwMzY1Cis6MTA4OUUwMDAxQjBCQUI0MkU3RDEwMDIwMDEyMzFCMDMxMzQwM0M0QzdGCis6MTA4OUYwMDAwM0QwNjM2QTAxMzM2MzYyMDlFMDEzMEIwM0QzMjM2QTc0Cis6MTA4QTAwMDAwMTMzMjM2MjAzRTAzNzRCNUM2RDAxMzQ1QzY1MDAyOTYwCis6MTA4QTEwMDAwOUQwMDMxQ0RDMDAyMzFDNkI0NDVDNjgwMTMwMjMwRDZGCis6MTA4QTIwMDAwMUQyODg0MkY1RDEzMDRDMjU2ODZCMEMwNUQyMjM2ODAxCis6MTA4QTMwMDAxQjBDMDhEMTI0NjhBMzBBMDVEMzIwMjQyQjRCQzA0NjY1Cis6MTA4QTQwMDA1QzYyMDAyNDVDNjIyNTRCMjM0QzUxMjZCNjAzMjM2N0VECis6MTA4QTUwMDAzMzYxM0Q2QUMwNDY3NTYxMDIyNUExMjY3NjAzNzU2MEMzCis6MTA4QTYwMDAwMTI1QjU2MEU2MURCOTM2MzU3MTg4NDIyMUQwMjUxQzM3Cis6MTA4QTcwMDBDMzAwNkM0NkU0NTgyRTZGNkI0NDM0NjA1QjY4MkM2RjA3Cis6MTA4QTgwMDBDMDQ2NjM2MDJCNkYwODMzMkI2NzNDNkFBMzQyMDJEMzU2Cis6MTA4QTkwMDAxMjRCQzA0NjJCNjcwMzFDREIwMDZCNDQ1QzY4MDEzMDQzCis6MTA4QUEwMDAyMzBEMDREMzUxMjRBNDAzMkI2RkMwNDZBMzYxODg0MjM1Cis6MTA4QUIwMDBERUQxMTAwQjAzRDMwRTQ5MDEyMEZERjc3NEZBNDFCMDRCCis6MTA4QUMwMDBGMEJDMDhCQzE4NDcwMDAwMDAwMDAwQjAwMDAxMTQ0MEQyCis6MTA4QUQwMDAwMDQwMTQ0MDAwMDAyMDQwNjgwRTAwODAyNEE3MjA0MDgxCis6MTA4QUUwMDBBNDJBMDA4MEEwODIyMDQwMDAwMDEwNDBDMDAwMTgwMDhFCis6MTA4QUYwMDBDOTRGRkZGRkYwQjQwMDIxMDAyMzA3MjIwNjI0NDc0RjhGCis6MTA4QjAwMDBDMDQ2M0M2MTNBNjEwMTMzMjAyQkY5RDMwNDI1M0Q2MTE1Cis6MTA4QjEwMDAwNTIzM0I2MTNDNjEzQTYxM0M2MTNBNjEzRDYxM0I2MUU3Cis6MTA4QjIwMDAzRjREQUI2RkRFMDgwMjIzMUU0MDA0MjMzMzQzM0I2MUZECis6MTA4QjMwMDAwNTIzMzM0MzNCNjFBQjZGOUUwODAyMjMxRTQwMDQyMzkxCis6MTA4QjQwMDAzMzQzM0I2MTA1MjMzMzQzM0I2MUFCNkY1RTA4MDIyMzM0Cis6MTA4QjUwMDAxRTQwMDQyMzMzNDMzQjYxMDUyMzMzNDMzQjYxMDIyMzFGCis6MTA4QjYwMDBBRTZGMUU0MDA0MjMzMzQzM0I2MTA1MjMzMzQzM0I2MTE3Cis6MTA4QjcwMDBBQjZGNUQwMDAyMjMxRDQwMDQyMzJCNDMzQjYxMDUyM0EzCis6MTA4QjgwMDAyQjQzM0I2MUM1MDgwMjIzMUQ0MDA0MjMyQjQzM0I2MTVCCis6MTA4QjkwMDAwNTIzMkI0MzNCNjE4NTA4MDIyMzFENDAwNDIzMkI0M0ZGCis6MTA4QkEwMDAzQjYxMDUyMzJCNDMzQjYxNDUwODAyMjMxRDQwMDQyMzAxCis6MTA4QkIwMDAyQjQzM0I2MTA1MjMyQjQzM0I2MTAyMjUwNTQwMDQyM0U2Cis6MTA4QkMwMDAyQjQzM0I2MTA1MjMyQjQzM0I2MTQwMDAwMjIzMTg0MEFDCis6MTA4QkQwMDAwNDIzMDM0MzNCNjEwNTIzMTg0MzM4NjEwMDI1M0Q2MUFECis6MTA4QkUwMDAwMTIzM0I2MTNENjEzQjYxMDAyMDNENjEwRDRCMUI2OUYxCis6MTA4QkYwMDA0OTAwMUUxQzAyMjMzMzQwMTk0MzAxMjMzQjYxMDEzMDBECis6MTA4QzAwMDAxMDI4RjJEMzAyMjAzODYxMDMyMDM4NjEzQzYxM0E2MUI4Cis6MTA4QzEwMDAzQzYxM0E2MTM4NjE0ODA4RjBCQzcwNDc4MDAwMTQwMDNDCis6MTA4QzIwMDA2ODBFMDA4MDgwMDAxNDQwRjBCNDAwMjQwNzIzMDYyNzVCCis6MTA4QzMwMDA0NDRBQzA0NjE3NjExMzYxMDEzNDIwMkNGOUQzMDQyNjNECis6MTA4QzQwMDAxNjYxMDUyNDE0NjExNzYxMDcyMzEzNjExNjYxMTQ2MTBECis6MTA4QzUwMDAxNzYxMTM2MTNDNEI5QjZGREQwODAyMjMxRDQwMkIxQ0U5Cis6MTA4QzYwMDAzMzQzMTM2MTI1NDMxNTYxMzc0QjlCNkY5RDA4MDIyM0U2Cis6MTA4QzcwMDAxRDQwMkIxQzMzNDMxMzYxMjU0MzE1NjEzMjRCOUI2RjAxCis6MTA4QzgwMDA1RDA4MDIyMzFENDAyQjFDMzM0MzEzNjEyNTQzMTU2MUVFCis6MTA4QzkwMDAyRDRCOUQ2RjAyMjMxRDQwMkIxQzMzNDMxMzYxMjU0MzM1Cis6MTA4Q0EwMDAxNTYxMjk0QjlCNkY1RDAwMDIyMzFENDAyQjFDMzM0MzM0Cis6MTA4Q0IwMDAxMzYxMjU0MzE1NjFDNTA4MDIyMzFENDAyQjFDMzM0MzU2Cis6MTA4Q0MwMDAxMzYxMjU0MzE1NjE4NTA4MDIyMzFENDAyQjFDMzM0Mzg2Cis6MTA4Q0QwMDAxMzYxMjU0MzE1NjE0NTA4MDIyMzFENDAyQjFDMzM0M0I2Cis6MTA4Q0UwMDAxMzYxMjU0MzE1NjEwMjI1MDU0MDJCMUMzMzQzMTM2MTk1Cis6MTA4Q0YwMDAyNTQzMTU2MTQwMDAwMjIzMTg0MDAzMUMzMzQzMTM2MUQwCis6MTA4RDAwMDAyMDQzMTA2MTE3NjEwNzIzMTM2MTE2NjExNDYxNEMwMDQxCis6MTA4RDEwMDAwMDIwMEYyMTI1MUNDRDQwMDIyMzFENDAwNDIzMkI0MzlFCis6MTA4RDIwMDAxMzYxMDUyMzJCNDMxMzYxMDEzMDAxMzkxMDI4RjFEMzVFCis6MTA4RDMwMDAxNzYxMDcyMzEzNjExNzYxMTM2MTAzMjAxMDYxRjBCQ0YxCis6MTA4RDQwMDA3MDQ3MDAwMDgwMDAxNDAwNjgwRTAwODBGMEI1NEY0REExCis6MTA4RDUwMDAwODIxMDIyMDJBMUNGREY3MjdGOTRENEM3MTIzNUIwMUU1Cis6MTA4RDYwMDBFNzE4Mzg4MDFBMjEwMjIwMkExQ0ZERjcxREY5Nzg4MEE3Cis6MTA4RDcwMDAyMDc5MDAyODBCRDAwMDIwMzg4MEUwNjgwMTI4MTBEMTJECis6MTA4RDgwMDA0NDQ4MDA2ODAxMjM5QjAyMTg0Mzk5MDIwODYwRTA2ODg4Cis6MTA4RDkwMDAwMTI4MDZEMTYwODgwMDI4MDNEMUY5MjExMjIwRkZGN0FECis6MTA4REEwMDA0M0ZGMDEyMUM5MDMwMDIwRkZGNzNFRkYwMDI1N0QyNjc4Cis6MTA4REIwMDBGNjAwMDBFMDAxMzUwMDIwRkZGNzlDRkUwMDBDMDFEMzE3Cis6MTA4REMwMDBCNTQyRjdEMzAwMjUwNUUwMDMyMTA5MDMwMDIwRkZGNzkyCis6MTA4REQwMDAyQkZGMDEzNTAwMjBGRkY3OERGRTQwMEIwMUQyQjU0MjdECis6MTA4REUwMDBGMkQzMDQyMEZGRjc4NkZFRkYyM0UxMzM5ODQzMDEyMUVECis6MTA4REYwMDAwMTQzMzg4OEZGMjMwMTMzOTg0MjAzRDEyRjIzNUIwMUJECis6MTA4RTAwMDAxOTQzMTZFMDAxMjgwOUQxNzg4ODAxMjgwM0QxMjMyM0NBCis6MTA4RTEwMDA1QjAxMTk0MzBERTAyMDIzMTk0MzBBRTAwMDI4MDhEMTIzCis6MTA4RTIwMDA3ODg4MDEyODAzRDEwQjIzREIwMTE5NDMwMUUwODAyMzVCCis6MTA4RTMwMDAxOTQzMDQyMEZGRjdGOEZFMDkyMTQ5MDIwMDIwRkZGNzNCCis6MTA4RTQwMDBGM0ZFRTA2ODAwMjgwQ0QxMDAyMTFCMjBGRkY3RUNGRUE4Cis6MTA4RTUwMDAxQTIwRkZGNzRGRkUwMTIxQzkwMzAxNDMxQTIwRkZGNzMzCis6MTA4RTYwMDBFM0ZFMDAyNzAzRTAwODJGMDFEMzBGMkYwOEQ5MzgxQzk5Cis6MTA4RTcwMDBGRkY3NDBGRTc5MDAwOTE5MUIyM0RCMDFDOTE4ODg4MzFECis6MTA4RTgwMDAwMTM3MjAyRkVGRDNGMEJDMDhCQzE4NDdFREFGMjE0MENECis6MTA4RTkwMDA2ODBFMDA4MDAwMDAxMDQwODFCMDEzNDgwMTY4QzA0NjkxCis6MTA4RUEwMDAwMDkxNDE2OEMwNDYwMDkxODE2OEMwNDYwMDkxQzE2ODQ4Cis6MTA4RUIwMDBDMDQ2MDA5MTAxNjlDMDQ2MDA5MTQxNjlDMDQ2MDA5MUQ5Cis6MTA4RUMwMDA4MTY5QzA0NjAwOTFDMTY5QzA0NjAwOTEwMTZBQzA0NkVGCis6MTA4RUQwMDAwMDkxNDE2QUMwNDYwMDkxODE2QUMwNDYwMDkxQzA2QTEzCis6MTA4RUUwMDBDMDQ2MDA5MDAxQjA3MDQ3MDAwODE0NDBGMEI1ODNCMDUwCis6MTA4RUYwMDA2ODREMUIyM0RCMDFFRjE4Rjg4QjA0MjIwMjQwMDI5MjFECis6MTA4RjAwMDA3MTIzNUIwMUU4MTgwMTg4QzA0NjAxOTE0MDg4QzA0NjgyCis6MTA4RjEwMDAwMDkwMDAyNDAzRTAwODJDMDFEMzBGMkMwOEQ5MjAxQzVBCis6MTA4RjIwMDBGRkY3RThGRDYxMDA0OTE5MUIyM0RCMDFDOTE4ODg4MzlECis6MTA4RjMwMDAwMTM0MjAyQ0VGRDM1ODRDRTA2OTAwMjgxNUQwNTc0RTRGCis6MTA4RjQwMDAyMDI1MDEzRDUzNDlFMDY5MzA0MDBCRDA2ODAwNDAxOEFFCis6MTA4RjUwMDAzNzIzOUIwMUMwMTg4MThCMjgxQ0ZGRjc2NUZFRTA2OTUxCis6MTA4RjYwMDBCMDQzRTA2MTc2MDgwMDJERUJEMTAxMjBGRkY3QzJGRDkwCis6MTA4RjcwMDA0ODQ5QzA0NkY4ODNGODhCQzIwODI1RDNDQTY4MDEyQTNECis6MTA4RjgwMDAxM0QxMEE3OTAwMkExRkQxNDk4ODAwMjkxQ0QxMDE5OURGCis6MTA4RjkwMDA0MzRBMDAyOTA1RDAwMTI5MTZEMTUxOEJDOTA4MTNEMkEzCis6MTA4RkEwMDAwRkUwNTE4QjA5MDkwRkQyMEJFMDBBNzkwMDJBMEJEMThGCis6MTA4RkIwMDA2RDIzNUIwMUM5MTg4QTg4Qzk4ODExNDA0OTA5MDkwN0NFCis6MTA4RkMwMDAwMkQxMDQyMzk4NDNGODgzRjg4QjA0MjEwMTQwMDI5QUNDCis6MTA4RkQwMDAxRkQwQjk4QjRBMEIyN0QzODAwOTI1RDNGRjIzMDE5OEQzCis6MTA4RkUwMDAwMTMzOTg0MjIwRDAwMDI1MDA5ODAxMjgwMEQxMDUwMkM1Cis6MTA4RkYwMDAwMTk4MDAyODAyRDEwMTIzNUIwMzFENDNBOTQyMTNEMDJECis6MTA5MDAwMDAwMDIwMjkxQ0ZGRjcxMEZFQkQ4MzAwMjBDMDQzNjA2MkQyCis6MTA5MDEwMDAwQUUwQjg4QjQwMEIwN0QyMDkyMTQ5MDIwMDIwRkZGNzc0Cis6MTA5MDIwMDAwM0ZFMDkyMDQwMDJCODgzRjg4QkMwMDgyREQzMUQ0OEU5Cis6MTA5MDMwMDBDNzZBMDE5ODAwOTlGRkY3NTFGQ0MyMDdEMjBGMUE0OTdECis6MTA5MDQwMDAwM0QwMDQyM0NENkQyQjQzMDNFMDA0MjNDRDZEOUQ0MzVBCis6MTA5MDUwMDAyQjFDQ0I2NTgzMDgwM0QzMDIyM0NENkQyQjQzMDNFMDg4Cis6MTA5MDYwMDAwMjIzQ0Q2RDlENDMyQjFDQ0I2NTYxNkE4MTQyMENEMEUwCis6MTA5MDcwMDA2MDYyMEU0ODAwMkEwM0QwRkYyMTIxMzEzOTQzMDNFMDBBCis6MTA5MDgwMDBGRjIzMjEzMzlGNDMzOTFDQzE2MjAzQjBGMEJDMDhCQ0VECis6MTA5MDkwMDAxODQ3MDAwMDY4MEUwMDgwNjgxQzAwODAwMDAwMDA4MEY3Cis6MTA5MEEwMDAyODFDMDA4MDQwMDAxNDQwQTQyQTAwODA0MDAwMTQwMEM2Cis6MTA5MEIwMDA5MEI0MDEyMjIwMjgwRkQyNDMwMDBGMUMwNzQ5NUMxOEVFCis6MTA5MEMwMDAzNzIzOUIwMUUzMTg5RjgzODI0MDA3MjM1QjAyQzkxODYzCis6MTA5MEQwMDAxMDFDQ0E2OTEwNDNDODYxOTBCQzcwNDc2ODBFMDA4MEJDCis6MTA5MEUwMDAwQjQ4NDA2OTBCNDlDOThCMDQyMjBBNDAwQTQ5MDZEMDQzCis6MTA5MEYwMDAwMTIzREIwMjk4NDMwMTIzQ0E2RDFBNDMwNUUwMDEyM0QzCis6MTA5MTAwMDBEQjAyMTg0M0NBNkQ1MjA4NTIwMENBNjU3MDQ3MDAwMDVFCis6MTA5MTEwMDA4MDAwMTQ0MEU4MUIwMDgwQTQyQTAwODAwMEI1ODRCMEMxCis6MTA5MTIwMDBGRkY3REVGRjAxMUMwNTIwMDA5MDAwMjAwMUFCMTg4MDM2Cis6MTA5MTMwMDAwNDNCNTg3MDFCMjIwMEFCNUE4MEQ5ODAwNTQ5Qzk2RDg5Cis6MTA5MTQwMDBDMDQ2MDI5MTAzOTA2ODQ2MDAyMUZERjc3OUY4MDRCMDBCCis6MTA5MTUwMDAwOEJDMTg0N0E0MkEwMDgwMEY0ODAxNjg0OTBDMDVEMkIyCis6MTA5MTYwMDAwMTY4MDkwQzA2RDEwMDY4ODAwQTAzRDMwQjQ4MDA2ODI3Cis6MTA5MTcwMDAwMDBDMDFFMDBBNDg4MDZDMDAwNDAwMEMwOTRCOTg0Mjg2Cis6MTA5MTgwMDAwNUQwMDIzMzk4NDIwMkQwMDc0Qjk4NDIwMUQxMDEyMDBBCis6MTA5MTkwMDA3MDQ3MDAyMEZDRTcwMDAwMDAwMDEwNDAwMDAwMTg0MDZECis6MTA5MUEwMDAwMDAwMDA4MDA0OTkwMDAwMDc5OTAwMDA5MEI0MDEyNDk5Cis6MTA5MUIwMDAyMTFDMTg0ODAyNjg1MjBDMDZEMjAyNjgxMjBDMDJEMTE3Cis6MTA5MUMwMDAwMDY4ODAwQTAwRDIwMDIxMDkwNjA5MEUxMjRGMTM0QUQ2Cis6MTA5MUQwMDAwMkQwMzg2ODAwMEMwMEUwOTA2QzAwMDQwMDBDMTA0QkNBCis6MTA5MUUwMDA5ODQyMDhEMDAyMzM5ODQyMDVEMDBFNEI5ODQyMDJEMEU0Cis6MTA5MUYwMDAwMjNCOTg0MjBDRDEwMDI5MDJEMEY4NkEwMDBDMDBFMDMyCis6MTA5MjAwMDBEMDZDNDAwQTAwRDIwMDI0MjAwNjAwMEU5MEJDNzA0N0FCCis6MTA5MjEwMDAwMDIwRkJFNzAwMDAxMDQwMDAwMDE4NDAwMDAwMDA4MDI0Cis6MTA5MjIwMDAwNDk5MDAwMDA3OTkwMDAwMEM0ODAxNjg0OTBDMDVEMjE4Cis6MTA5MjMwMDAwMTY4MDkwQzA1RDEwMDY4ODAwQTAyRDMwODQ4ODA2OERCCis6MTA5MjQwMDAwMUUwMDg0ODQwNkMwMDA0MDAwQzAwMjEwMzI4MDNEMDEyCis6MTA5MjUwMDA0MDA4MDFEMzAxMjA3MDQ3MDgxQ0ZDRTcwMDAwMTA0MEMzCis6MTA5MjYwMDAwMDAwMTg0MDAwMDAwMDgwRjBCNTAxMjcxQTRDMjU2ODY2Cis6MTA5MjcwMDBGRkY3NzJGRjAzMUMxOTRBMDIyMTAxMjYxODQ4MDEyQjJGCis6MTA5MjgwMDAxQkQxQ0IwNDFFNjA1NTIzMDM2MDAwMjM0MzYwMDY2ODk2Cis6MTA5MjkwMDA1NTJFMUJEMUFBMjYwNjYwNDM2MDAzNjhBQTJCMTVEMTYwCis6MTA5MkEwMDAwOTIzMDM2MDA1MjMwRjRGQzA0NjNCNjAwMzIzMEU0Rjg1Cis6MTA5MkIwMDBDMDQ2M0I2MDExNjAwNzY4MDhFMDA4MjMyMzYwMDQyMzcwCis6MTA5MkMwMDAwQTRGQzA0NjNCNjAxMTYwMDY2MDI3NjhDMDQ2MjU2MEIzCis6MTA5MkQwMDAzODFDRjBCQzA4QkMxODQ3MDAwMDIwNDAwMDAwMjQ0MEE3Cis6MTA5MkUwMDAwMDAwMjI0MDAwMDAyQTQwMDAwMDI2NDAwMDAwMjg0MEU0Cis6MTA5MkYwMDA4MEI1MDcxQ0ZGRjczMEZGMDEyODA1RDExOTQ4MDA2ODI5Cis6MTA5MzAwMDAxOTQ5NDk2QjA4NDAyMkUwMTg0ODAxNjg0OTBDMDVEMjA4Cis6MTA5MzEwMDAwMTY4MDkwQzA2RDEwMDY4ODAwQTAzRDMxNDQ4MDA2ODZDCis6MTA5MzIwMDAwMDBDMDFFMDEzNDg4MDZDMDAwNDAwMEMxMjRCQzAxOEM0Cis6MTA5MzMwMDAwODI4MEJEMjAxQTMxQjVDNUIwMDlGNDQwNTAzMDcwM0I1Cis6MTA5MzQwMDAwNzA3MDUwMzAzMjAwMkUwMDEyMDAwRTAwMDIwMDEyMUJGCis6MTA5MzUwMDAzODYwODAwNzAwRDEwMDIxMDgwNjAwMEU4MEJDMDhCQ0UwCis6MTA5MzYwMDAxODQ3MDAwMDM0NkUyMTQwMDAwMDExNDAwMDAwMTA0MEZBCis6MTA5MzcwMDAwMDAwMTg0MDAwMDAwMDgwRkU2NkZGRkZGMEI1ODJCMERDCis6MTA5MzgwMDAwNzFDMDEyMDAxOTBGRkY3RTdGRTAxMjgxM0QxMzgyRkI5Cis6MTA5MzkwMDAwMUQwQTgyRjA3RDEwMDI2RjY0MzM0MUNBODJGMDJEMUY0Cis6MTA5M0EwMDAzMDFDMDA5NjM1MUMxMTIwMDAwNDA2NjI0NDYyODU2MjYwCis6MTA5M0IwMDAwMDk5QzA0NkMxNjIwMDIxMDg0OEMwNDYwMTYwMzgyRkFDCis6MTA5M0MwMDAwMUQwQTgyRjA1RDEwMTIxMDE2MEE4MkYwMUQxMDMyMUNGCis6MTA5M0QwMDAwMTYwMDE5ODAyQjBGMEJDMDhCQzE4NDczNDZFMjE0MDBGCis6MTA5M0UwMDA3MDQ3MDAwMDcwNDcwMDAwOTBCNTA3MUMxMjRDMjE2OEMwCis6MTA5M0YwMDAxMjQ4ODE0MjBCRDAwMDIzMjExQ0UyMURDMTMyMDBFMDQzCis6MTA5NDAwMDAwOEMxOTE0MkZDRDMyMDYwQzgyMEEwODA2NzcyMzgwMTU3Cis6MTA5NDEwMDAwMEYwMThGODI3NzIwQTQ4QzA0NkUwNjAwOTJGMDBEQjA4Cis6MTA5NDIwMDAwMDI3RTAxOTAxN0QwMTMxMDE3NUUwODgwMTMwRTA4MEZECis6MTA5NDMwMDAwMTIwOTBCQzA4QkMxODQ3MDAwMDAwODBFRUZGQzBEMDlGCis6MTA5NDQwMDAwODEwMDAwMzgwQjQwODRBRDExRDg5MzEwQjdBMjAyQjAzCis6MTA5NDUwMDAwMUQzMDAyMzBCNzIwNzFDMDg3QTQzMUMwQjcyODAxODdGCis6MTA5NDYwMDA5MDMwNDc3MjgwQkM3MDQ3MDAwMDAwODAwNzQ5MDEyMjlECis6MTA5NDcwMDAxMjA0MDg2ODAyNDAwMTIwMDAyQTA2RDEwQTY4MTIwQzcyCis6MTA5NDgwMDAwMkQxMDk2ODg5MEEwMEQyMDAyMDcwNDcwMDAwMTA0MDBDCis6MTA5NDkwMDA5MEI1MDcxQzA5NEMzODFDMjExQ0ZDRjc5MUZGMzgxQ0E3Cis6MTA5NEEwMDAwMEYwMEVGODAxMjNEODQyMDFEMTAwMENFMDgwMDAyMTI5Cis6MTA5NEIwMDAyMDFDRkNGN0M1RkU5MEJDMDhCQzE4NDdDNDY2MjE0MEMwCis6MTA5NEMwMDBGOEI1MDcxQzc5N0E3NjQ4MDAyMzc2NEMwMTI5NUREMURFCis6MTA5NEQwMDBBMjg4QzA0NjAwOTJBMTg5OEE0Mjc0REFGQTdBMDAyQUU4Cis6MTA5NEUwMDAxNUQwN0E2QzAwMkExMkQwOEE0MjEwRDgwMDlBNTExQ0VBCis6MTA5NEYwMDBBMTgwQTE4OEMwNDY0MTgxNzg2QzZCNEVDMDQ2RjA4MDQ3Cis6MTA5NTAwMDBBMDZBNTgyMzc5NkM1OTQzNDAxOEMxMUEyOEUwMjI4ODcwCis6MTA5NTEwMDAwMTMyMTIwNDEyMEMyMjgwOEE0MjAwREIyMzgwMDAyMkQ2Cis6MTA5NTIwMDAwMDI5NjlERDVGNENBNDZBNUU0QjFEODg1ODIzNkI0MzlDCis6MTA5NTMwMDBFMzE4REUxRDAxMzYwMTIzOUIwNzMzNDMxQjY4MUIwNjFFCis6MTA5NTQwMDAxNUQxNTg0OTAwOUEwMTMyOEE4MDhBODhDMDQ2NDI4MUUyCis6MTA5NTUwMDAwODg4MDEzMDU0NEVDMDQ2RjA4MDU4MjA2ODQzMjExOEQ2Cis6MTA5NTYwMDAzODFDMDBGMDM5RkJGMDg4MDAwNDAwMTQ5NUUwNEQ0QkU2Cis6MTA5NTcwMDAwMTM1MkQwNDJEMEMxRDgwOEQ0MjAxREIwMDI1MUQ4MDQxCis6MTA5NTgwMDAwMTMyMTIwNDEyMTQ5MTQyQ0VEQzgxRTBFMTg4RTI4OUJBCis6MTA5NTkwMDA5MTQyMThEQUY5N0EwMDI5MkZEMDc5NkM0OTA0NDkwQ0U0Cis6MTA5NUEwMDA3OTY0MkFEMEUyODk5MTQyMjdEOEUxODgwMTMxRTE4MEFCCis6MTA5NUIwMDBFMTg4QzA0NjgxODEwMTIzREIwMzc4NkMxODQzM0E0RTcxCis6MTA5NUMwMDBDMDQ2RjA4MDAwRTA2M0UwRTA2QTc5NkM0QjAwNTkxODE3Cis6MTA5NUQwMDA0OTAxNDAxOEMxMUY1OTM5MzgxQzAwRjAwRkZCRTA2QURGCis6MTA5NUUwMDA3OTZDNEEwMDUyMTg1MjAxODAxODAxMzkwOTA0MDkwQzlCCis6MTA5NUYwMDA2MDM4MDBGMDg5RkJCNkU3NEFFMDYxODgwMTMxMDkwNDcwCis6MTA5NjAwMDAwOTBDNjE4MEUyODk5MTQyMDBEQjYzODAwMDIxMDAyQTFECis6MTA5NjEwMDAzRUREMjQ0Q0U0NkEyMzRCNUQ4ODZCMDA1QjE5NUIwMUUzCis6MTA5NjIwMDBFMzE4REUxRDAxMzYwMTIzOUIwNzMzNDMxQjY4MUIwNjJECis6MTA5NjMwMDAyMEQxMUM0RUYxODgwMTMxRjE4MEYxODhDMDQ2ODE4MTMyCis6MTA5NjQwMDA3MDg4MDEyM0RCMDMwMTMwMTg0MzE3NDlDMDQ2Qzg4MEU2Cis6MTA5NjUwMDA2ODAwNDAxOTQwMDEyMTE4MzgxQzAwRjBDRkZBNzE4OEM5Cis6MTA5NjYwMDA0QTAwNTIxODUyMDFGMDZBODAxODAwRjA0REZCMEU0OTcyCis6MTA5NjcwMDBDODg4NzlFNzBCNEIwMTM1MkQwNDJEMEM1RDgwOTU0MjkwCis6MTA5NjgwMDAwMURCMDAyNTVEODAwMTMxMDkwNDA5MTQ4QTQyQzJEQzM2Cis6MTA5NjkwMDAwMTg5MDEzMTAxODEwMDIwQzA0M0Y4QkMwOEJDMTg0NzkyCis6MTA5NkEwMDA0QzJCMDA4MDRDMkEwMDgwQzQ2NjIxNDBGMEI0MDYxQzdDCis6MTA5NkIwMDAwMTIzREIwMzMzNDAwMTI0NDQ0RjAwMjA0NDRBNDU0RDNECis6MTA5NkMwMDBEMTFEMzkzMTAwMkI0MUQwRTMwM0YzMUE3M0QwRUU4OTU5Cis6MTA5NkQwMDA5RTQyNzFEM0VFODgwMDJFNkREMEVENkE1RTFFNzMwMDNGCis6MTA5NkUwMDA5QjE5NUIwMUVEMThBRTY4MzYwNjM2MEUwMzJFMDJEMENDCis6MTA5NkYwMDBDRTg5MDEzNkNFODE0MDM1QUQ4QkFEMDAzNTRFNzY2QUQwCis6MTA5NzAwMDBDMDQ2NzA1MTU1ODkwMTM1NTU4MTMyNEVGMjZBRDIxOEUyCis6MTA5NzEwMDA5MDYwRjI2QUQyMTg5MDYzRjI2QUQyMThEMDYzRjI2QTRCCis6MTA5NzIwMDBEMjE4MTA2NEYyNkFEMjE4NTA2NEYyNkFEMjE4OTA2NEE3Cis6MTA5NzMwMDBGMjZBRDIxOEQwNjRGMDg4MDEzOEYwODBGMDg4QzA0NjEwCis6MTA5NzQwMDA4ODgxMjQ0OTAwMjgzOUQxNEY4MDM3RTAwMDJFMzhEOTRDCis6MTA5NzUwMDBBQjg5QjM0MjMwRDNBQjg4MDAyQjJDRDA1Mzg5MDEzMzczCis6MTA5NzYwMDA1MzgxMkExQ0FENkE1ODIzMDEzRTczNDNFRDE4QUU2ODNECis6MTA5NzcwMDAzNjA2MzYwRTAzMkUwMkQwQ0U4OTAxMzZDRTgxQTg2MDgxCis6MTA5NzgwMDA5NTZBRUQxOEE4NjM5NTZBRUQxOEU4NjM5NTZBRUQxODc3Cis6MTA5NzkwMDAyODY0OTU2QUVEMTg2ODY0OTU2QUVEMThBODY0OTU2QTVFCis6MTA5N0EwMDBFQjE4RDg2NDkwODgwMTM4OTA4MDkwODhDMDQ2NDg4MTMyCis6MTA5N0IwMDAwMDI4MDNEMTAxRTAwNEUwMDNFMDE3ODAyMDFDRjBCQzg2Cis6MTA5N0MwMDA3MDQ3Q0E4OTAxMzJDQTgxRjlFNzAwMDBGRkZGMDAwMDMzCis6MTA5N0QwMDAwQzJCMDA4MDRDMkEwMDgwMDBCNTAwMjE0MTYwMTA0OTBDCis6MTA5N0UwMDA0QTY4MDAyQTEwRDFDQTY4MDAyQTA0RDBDQTFEMTkzMjVBCis6MTA5N0YwMDAxMjc5MDAyQTA4RDA0QTY5MDAyQTBCRDE4ODYxNDg2MTkxCis6MTA5ODAwMDAwMEYwMTBGODA4QkMxODQ3NEE2OTAwMkEwMkQxODg2MUE0Cis6MTA5ODEwMDA0ODYxRjdFNzhBNjlDMDQ2NTA2MDg4NjFGMkU3MDAwMDU2Cis6MTA5ODIwMDA2QzA2MDA4MEIwQjUyQTQ4NDA2OTAwMjg0Q0QwMDgyMjU4Cis6MTA5ODMwMDBDMTY4MEE0MDAwMjcyNzRCRDkxREI5MzEwMDJBMTFEMDMxCis6MTA5ODQwMDAwNDIyMjU0Q0MwNDYwQzYxMjQ0Q0MwNDY0QzYyMjQ0QzdBCis6MTA5ODUwMDBDMDQ2OEM2MjIzNENDMDQ2Q0M2MjIzNENDMDQ2MEM2MzhECis6MTA5ODYwMDA0RjYzMTJFMDA1MjIyMTRDQzA0NjBDNjEyMDRDQzA0NkRCCis6MTA5ODcwMDA0QzYyMjA0Q0MwNDY4QzYyMUY0Q0MwNDZDQzYyMUY0Q0QwCis6MTA5ODgwMDBDMDQ2MEM2MzFFNENDMDQ2NEM2MzQwMjRDQzgyNEY4M0MwCis6MTA5ODkwMDAxQzRGMDAyMTAwMkEwQ0Q5OEMwMDA1MTk2RDZBN0Q0MEVGCis6MTA5OEEwMDBFNDE4RkYzNDAxMzQ2NTYyMDEzMTkxNDJGNEQzMTAyOTg4Cis6MTA5OEIwMDAwN0QyOEEwMEQyMThGRjMyMDEzMjU3NjIwMTMxMTAyOUQzCis6MTA5OEMwMDBGN0QzMTE0OTAwRjAyMkY4QjBCQzA4QkMxODQ3MDAwMERCCis6MTA5OEQwMDA2QzA2MDA4MEFDQUIyMDQwMjgwMTQwMDAwMTIzNDU2N0E2Cis6MTA5OEUwMDA4OUFCQ0RFRkZFRENCQTk4NzY1NDMyMTAyMDAxNDAwMEVGCis6MTA5OEYwMDA2NzQ1MjMwMUVGQ0RBQjg5OThCQURDRkUxMDMyNTQ3NjcwCis6MTA5OTAwMDBDM0QyRTFGMDM2MzYzNjM2MzA4MDIwNDBCMEI1MEYxQzc5Cis6MTA5OTEwMDAxNTRERTkxREM5MzExNTRDMjMxQzE1NEEwMDIwRkNGN0QzCis6MTA5OTIwMDA0NEZCRTkxREZGMzExRTMxMjMxQzBEMUMxMTRBMDEyMDhGCis6MTA5OTMwMDBGQ0Y3M0JGQjI5MUMyMzFDMEU0QTAwMjBGQ0Y3MzVGQkRGCis6MTA5OTQwMDAzOTFDMjMxQzBDNEEwMTIwRkNGNzJGRkIwMDIxMEI0ODdCCis6MTA5OTUwMDBDMjFEMTkzMjUxNzEwMTIxRkYzMDAxMzA0MTYyMDgxQ0QyCis6MTA5OTYwMDBCMEJDMDhCQzE4NDcwMDAwQUNBQjIwNDA3NTA4RkZGRjM2Cis6MTA5OTcwMDAyODAwMDMwMDQwMDAwMjAwMTQwMDA3MDA2QzA2MDA4MDZECis6MTA5OTgwMDBGMEI1Mzc0QTUwNjkwMTIzOUIwNzA4MzAxODQzMDA2ODM3Cis6MTA5OTkwMDAwMTA2MDkwRTMzNEIwMTI5NDlEMTFGNjgxOTFDMzI0QkFFCis6MTA5OUEwMDA5RjQyMDREMUZGRjczRUZGRjBCQzA4QkMxODQ3MDAyM0RDCis6MTA5OUIwMDA5RjAwQ0M1OTU1NjlFRjE5M0M2MTAxMzMwNTJCRjdEMzUyCis6MTA5OUMwMDAwMDBBMDAwMjAyMjMxODQzNTM2OUMwNDY5ODYwNTA2OTk4Cis6MTA5OUQwMDAwODIzQzI2ODEzNDAyNTRGRkExREI5MzIwMDJCMDJEMDZDCis6MTA5OUUwMDAwNDIzMjM0QzAxRTAwNTIzMjI0Q0MwNDYxNDYxNDAyNDhCCis6MTA5OUYwMDBENDgyMDAyNDU0ODMyMDRDMDAyMjAwMkIwQ0Q5OTUwMEUzCis6MTA5QTAwMDA0NjE5NzY2QTY2NDBFRDE5RkYzNTAxMzU2RTYyMDEzMkZFCis6MTA5QTEwMDA5QTQyRjREMzEwMkEwN0QyOTMwMERCMTlGRjMzMDEzM0EzCis6MTA5QTIwMDA1QzYyMDEzMjEwMkFGN0QzRkZGNzcwRkZCQ0U3MDAyMTE4Cis6MTA5QTMwMDA4RjAwREM1OTU1NjlFRjE5N0M2MjAxMzEwNTI5RjdEMzk0Cis6MTA5QTQwMDAwMDBBMDAwMjAzMjMxODQzNTE2OUMwNDY4ODYwNTA2OTI4Cis6MTA5QTUwMDA0MDY4QzA0NjUwNjEwOTQ4RkNGN0E0RkFBNEU3MDAwMDNBCis6MTA5QTYwMDA2QzA2MDA4MDMwODAyMDQwNjc0NTIzMDFBQ0FCMjA0MDZECis6MTA5QTcwMDAyODAxNDAwMDIwMDE0MDAwNUM1QzVDNUMxMTMxRkZGRjZDCis6MTA5QTgwMDBGMEI1MDcxQzNCNDgzQzRDMDgyMTIwNjBBMTgwMDAyMDE5Cis6MTA5QTkwMDAyMDgxRTE4MDYwODEzOTQ4QzA0NkUwNjAzODQ4QzA0Njk2Cis6MTA5QUEwMDAyMDYxMzg0OEMwNDY2MDYxMzc0OEMwNDZBMDYxMzc0OEU5Cis6MTA5QUIwMDBDMDQ2RTA2MTM2NDhDMDQ2MjA2MjM2NDhDMDQ2NjA2MjEzCis6MTA5QUMwMDAzNTQ4QzA0NkEwNjIzNTQ4QzA0NkUwNjIzNDQ4QzA0NkNBCis6MTA5QUQwMDAyMDYzMzQ0OEMwNDY2MDYzMzM0OEMwNDZBMDYzMzM0OEJGCis6MTA5QUUwMDBDMDQ2RTA2MzMyNDhDMDQ2MjA2NDMyNDhDMDQ2NjA2NEU1Cis6MTA5QUYwMDAzMTQ4QzA0NkEwNjQzMTQ4QzA0NkUwNjQzMDQ4QzA0NkEyCis6MTA5QjAwMDAyMDY1MzA0OUM4NjgwMjA0ODk2OTRBNDBFMzFENzkzM0Y5Cis6MTA5QjEwMDAwOTA0Qzk0M0MwNDM0ODQwRTExREI5MzFEQTYzMDg2MDE0Cis6MTA5QjIwMDAyOTREMjExQzJCMUMyOTRBMDAyMEZDRjczRUZBMjg0QTBCCis6MTA5QjMwMDBFMTFEQjUzMTAxMjAyQjFDMEUxQ0ZDRjczNkZBMjQ0QTFFCis6MTA5QjQwMDAwMDIwMzExQzJCMUNGQ0Y3MzBGQUUxMUQ0RDMxMkIxQzgxCis6MTA5QjUwMDAyMDRBMDEyMEZDRjcyOUZBRTAxRDVEMzAwMTY4MDAyOTQ4Cis6MTA5QjYwMDBGQ0QwNjA2REMwNDYzODY1MjA2RUMwNDY3ODY1RjBCQzlDCis6MTA5QjcwMDAwOEJDMTg0NzgwMDAwODAwOENCOTIwNDA4MTgxNDhCRDhFCis6MTA5QjgwMDA3OTU2MjM4QzkzMEM4Mjk1MUQwRTEyQ0Y5QjNCQzBFOTE2Cis6MTA5QjkwMDBFNjU1N0M4Mjk5RjY3ODAyRDFENzI1NzM3MjhDMzMxMDAyCis6MTA5QkEwMDBGNzAzRjE0MjZDOUI0QUE3ODI4RTIzQTk5MEIxODI4RTYzCis6MTA5QkIwMDBEQzNGRkIyOTAwNjIyMjQ1ODgyQkYxODUxMjYxRDE3M0JECis6MTA5QkMwMDA2RUIxMTExNjA4ODMyMDQwNzUwOEZGRkY1NDAwMDMwMDkyCis6MTA5QkQwMDAwODAwMDIwMDE0MDAwMzAwODBCNTBGMUMzOTFDMDBGMEJGCis6MTA5QkUwMDAzM0Y4MzgxQ0ZGRjc0Q0ZGMDM0ODAxODkwMTMxMDE4MTJDCis6MTA5QkYwMDA4MEJDMDhCQzE4NDcwMDAwMEMyQjAwODA5MEI1MDQxQ0VBCis6MTA5QzAwMDAwRjFDMjAxQzM5MUMwMEYwMUZGOEUwNjgwMTBFRkYyMjE5Cis6MTA5QzEwMDAxMjA0MDI0MDEyMEExMTQzRkYyMjEyMDIwMjQwMTIwMkYxCis6MTA5QzIwMDAxMTQzMDAwNjA4NDMzODY1MjA2OUMwNDY3ODY1NjA2OUJECis6MTA5QzMwMDBDMDQ2Qjg2NTAzNDgwMTg5MDEzMTAxODE5MEJDMDhCQzY4Cis6MTA5QzQwMDAxODQ3MDAwMDBDMkIwMDgwOTBCNTAwMjI5MzAwMUYxOENECis6MTA5QzUwMDBCRjY5NUIxODVGNjIwMTMyMDUyQUY3RDMwNzdBRkIwOEY4Cis6MTA5QzYwMDAwM0QzMDAyMzkyMDA1MjE4MTM2MjA3NkJDMDQ2OEY2MzIwCis6MTA5QzcwMDBDNzZBQzA0NkNGNjM4NzZCQzA0NjBGNjQ0NzZCQzA0NjU4Cis6MTA5QzgwMDA0RjY0MDc2Q0MwNDY4RjY0QzI2QkMwNDZDQTY0QzI4ODBBCis6MTA5QzkwMDBDMDQ2MEE4MDgyN0ExMjA2MDM3QTFCMDQxQTQzQzM4OERDCis6MTA5Q0EwMDAxQjAyMUE0MzQzN0FEQjA3MUE0MzhBNjAxNzFDODM3QTI0Cis6MTA5Q0IwMDA1QTA4MDVEMzE0MjIxQzFDQTMwODAyRDIxNTIyMDBFMDY2Cis6MTA5Q0MwMDAwMDIyMDA3QTQzMDgxMEQzQzAwODAyRDM4ODIwMTA0MzMyCis6MTA5Q0QwMDAwMUUwODAyMDEwNDMzQTBBMTIwMjAxMjMxQTQzQzg2MEFGCis6MTA5Q0UwMDA4QTYwMDgxQ0ZGRjc3OEZEMDVFMDM4MEEwMDAyMDMyM0FDCis6MTA5Q0YwMDAxODQzODg2MENBNjAwMzQ4MDE4OTAxMzEwMTgxOTBCQzIyCis6MTA5RDAwMDAwOEJDMTg0NzBDMkIwMDgwRjBCNDAyNkQxNDRDMTUxQ0Q1Cis6MTA5RDEwMDBFNzY5QkQ0MDEzMUMyNjZBRjM0MDVENDAyRTFDNDU2RDZCCis6MTA5RDIwMDBCRDQwNkU0MDJCMUMzNTFDRkQ0MDJGMUNCQjAwNjU2QURFCis6MTA5RDMwMDBFQjU4MDAyQjA4RDAyMzY5MDEzNzlGNDIwMEQzMDAyNzNFCis6MTA5RDQwMDBCRTAwQUU1OTAwMkVGN0QxQTQ2OUEyNDAxMTQzMDU0QkM1Cis6MTA5RDUwMDAxOTQzQkEwMEE5NTA0MDMwODc4M0YwQkM3MDQ3MDAwMDE3Cis6MTA5RDYwMDA0QzJBMDA4MDAwMDAwMDgwODBCNDAwMjIwMDIzMDAyOURCCis6MTA5RDcwMDAwNUQ5MDc3ODdBNDAwMTMwMDEzMzhCNDJGOUQzRDA0M0JCCis6MTA5RDgwMDAwMDA2MDAwRTgwQkM3MDQ3RjBCNTA3MUMwMDI0RkYyNkJCCis6MTA5RDkwMDAwOTM2MjAxQzAwRjA5QUY4MDBGMEI4RjkwNTFDMDBGMDE0Cis6MTA5REEwMDBDN0ZBM0Q3MDI4MUMwMTM3MDEzNEI0NDJGMUQzRjBCQzJFCis6MTA5REIwMDAwOEJDMTg0NzgwQjUwMEYwOTNGODAwRjBBN0Y5MDcxQzFECis6MTA5REMwMDAwMEYwQjZGQTM4MEFGNkQzODBCQzA4QkMxODQ3RjNCNUUxCis6MTA5REQwMDA4MkIwMDI5ODQxMDI1MzIwMDBGMDY0RjgwMEYwQThGQTIzCis6MTA5REUwMDBGRkY3RThGRjAwMjQwMDIwMDE5MDJFMjAwMDkwMDAyNUJFCis6MTA5REYwMDAwMDI3MDI5ODAxMjgwNEQxMDA5ODg0NDIwMUQzMDAyNjRDCis6MTA5RTAwMDAwOUUwMDE5ODQxMUMwMTkxMDBGMDYwRjgwMEYwN0VGOTMyCis6MTA5RTEwMDAwNjFDMDBGMDhERkFGODAwODY0MDM1NDMwMTM0MDEzNzA2Cis6MTA5RTIwMDAwNDJGRTZEMzAzOTkyMEMxMDM5MUZGMjMwOTMzOUM0MkY5Cis6MTA5RTMwMDBEREQzMDRCMEYwQkMwOEJDMTg0N0YwQjUwNDFDMEYxQ0ZGCis6MTA5RTQwMDAwMTJDMkFEMDE2NDhDMDZGNDAyMzAxNjgxOTQzMDE2MEQ1Cis6MTA5RTUwMDAwMDI2MjBDRkIxMDA4NDIwMDBGMDI0RjgyODFDMDBGMDU4Cis6MTA5RTYwMDBERkY5MjgwQTAwRjBEQ0Y5MjgwQzAwRjBEOUY5MjgwRUY3Cis6MTA5RTcwMDAwMEYwRDZGOTAwRjA1Q0ZBMDEzNjQyMkVFOUQzNjEwMjE3Cis6MTA5RTgwMDA4MzIwMDBGMDBGRjgwMEYwNTNGQUZGRjc5M0ZGMDQ0ODI3Cis6MTA5RTkwMDBDMDZGNDAyMzAxNjg5OTQzMDE2MEYwQkMwOEJDMTg0N0JCCis6MTA5RUEwMDA2ODBFMDA4MDkwQjUwNDFDMEYxQzAwRjA1OUZBMjAxQ0FECis6MTA5RUIwMDAwMEYwQjZGOTM4MEMwMEYwQjNGOTM4MEEwMEYwQjBGOTQ4Cis6MTA5RUMwMDAzODFDMDBGMEFERjk5MEJDMDhCQzE4NDcwMEI1MDExQzY3Cis6MTA5RUQwMDA1NDIwRkZGN0U3RkYwMDIwMDBGMEEyRjkwOEJDMTg0NzY0Cis6MTA5RUUwMDAwMEI1MDBGMDNERkE1NzIwMDBGMDlBRjkwOEJDMTg0Nzc5Cis6MTA5RUYwMDA5MEI1MDg0RkZBNkYyMDIzMTQ2ODlDNDMxNDYwMjMxQzBDCis6MTA5RjAwMDBGRkY3NjVGRkY4NkYyMDIzMDE2ODE5NDMwMTYwOTBCQ0RCCis6MTA5RjEwMDAwOEJDMTg0NzY4MEUwMDgwOTBCNTA4NEZGQTZGMjAyM0UwCis6MTA5RjIwMDAxNDY4OUM0MzE0NjAyMzFDRkZGNzg3RkZGODZGMjAyM0ZECis6MTA5RjMwMDAwMTY4MTk0MzAxNjA5MEJDMDhCQzE4NDc2ODBFMDA4MDk2Cis6MTA5RjQwMDBGMEI1MDQxQzBGMUMxODRFRjA2RjIwMjMwMTY4OTk0M0Q0Cis6MTA5RjUwMDAwMTYwNjEwMjUzMjBGRkY3QTVGRjAwRjBFOUY5RkZGNzY4Cis6MTA5RjYwMDAyOUZGRjgxRDA1MzAwMTJDMDNEMTIyMkYwMUQzMDAyNzMyCis6MTA5RjcwMDAwRkUwNDQxQ0ZGRjdBQUZGMDBGMEM4RjgwNzFDMDBGMDMwCis6MTA5RjgwMDBEN0Y5MjAxQ0ZGRjdBMkZGMDBGMEMwRjgwNTFDMDBGMDc1Cis6MTA5RjkwMDBDRkY5RjA2RjIwMjMwMTY4MTk0MzAxNjAyODAyMzg0MzhDCis6MTA5RkEwMDBGMEJDMDhCQzE4NDcwMDAwNjgwRTAwODBGMEI1QzJCMEQ1Cis6MTA5RkIwMDAxNDFDMEQxQzA3MUMwMTJGMkZEMDc5MDIxOTRFRjA2RkI1Cis6MTA5RkMwMDAyMDIzMDI2ODlBNDMwMjYwNTMyMEZGRjc2QkZGMDBGMEUyCis6MTA5RkQwMDBBRkY5RkZGN0VGRkU2ODQ2RkZGN0Q2RkU2QTQ2RTgxREM5Cis6MTA5RkUwMDAwNTMwMTQ1NDIxMEE2ODQ0NDE3MDY4NDYwMDk5MEMzMEM5Cis6MTA5RkYwMDBGRkY3QkFGRTAyQUIxODcwMDAyMDU4NzA2ODQ2MEMyMUJCCis6MTBBMDAwMDBGRkY3QjJGRTAyQUI1ODcwNjk0NjM4MUNGRkY3MTVGRjI4Cis6MTBBMDEwMDBGMDZGMjAyMzAxNjgxOTQzMDE2MDQyQjBGMEJDMDhCQzE2Cis6MTBBMDIwMDAxODQ3MDAwMDY4MEUwMDgwRkZCNUMyQjAwNzFDMDEyRjYyCis6MTBBMDMwMDAwMUQxMDEyMDM2RTA2QjQ2MDAyMEM0NDMxMEMzMDEzMDNCCis6MTBBMDQwMDA0MjI4RkJEMzY4NDYwQzMwMDMxQzAwMjQwMDJBMEFEOTlFCis6MTBBMDUwMDAwRTg4QzA0NjA2NzAwRTg4MzYxMjQ2NzAwMjMwMDIzMUY1Cis6MTBBMDYwMDAwMjM0OTQ0MkY0RDMwMDkyMTgxQzExMUNGRkY3N0NGRUJBCis6MTBBMDcwMDAwNDFDMDAyMDAxOTAwMkFCMUM3MDU4NzA5RDcwNjg0NjUzCis6MTBBMDgwMDAwQzIxRkZGNzcxRkUwMkFCNTg3MDQ1OUIxRDA2MkQwRThCCis6MTBBMDkwMDBBQzQyMDNEMTY5NDYzODFDRkZGNzNFRkYwMTIwQUM0MkI5Cis6MTBBMEEwMDAwMEQxMDAyMDQ2QjBGMEJDMDhCQzE4NDdCMEI1QzJCMDIzCis6MTBBMEIwMDAwRjFDNDEwMjE0NENFMDZGMjAyMzAyNjg5QTQzMDI2MDk3Cis6MTBBMEMwMDA1MzIwRkZGN0VGRkUwMEYwMzNGOUZGRjc3M0ZFNjg0NjA5Cis6MTBBMEQwMDBGRkY3NUFGRUUwNkYyMDIzMDE2ODE5NDMwMkFEMDE2MENCCis6MTBBMEUwMDA2RDc4MDAyNDAyQUI1QzcwNjg0NjBDMjFGRkY3M0NGRUUzCis6MTBBMEYwMDBBODQyMDJEMTAwOTg4NzQyMDFEMzIwMUMwMEUwMDEyMDMxCis6MTBBMTAwMDA0MkIwQjBCQzA4QkMxODQ3NjgwRTAwODBGQzQ2NjA0N0VGCis6MTBBMTEwMDAwMDAwQTBFM0I0MjI5RkU1QjQzMjlGRTUwMTEwQTBFMzY0Cis6MTBBMTIwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTM3Cis6MTBBMTMwMDAwMDEwODJFNTAwMTA5M0U1ODEwMzgwRTEwMTEwQTBFM0E3Cis6MTBBMTQwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTE3Cis6MTBBMTUwMDAwMDEwODJFNTAwMTA5M0U1MDEwMzgwRTEwMTEwQTBFMzA3Cis6MTBBMTYwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNUY3Cis6MTBBMTcwMDAwMDEwODJFNTAwMTA5M0U1ODEwMjgwRTEwMTEwQTBFMzY4Cis6MTBBMTgwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNUQ3Cis6MTBBMTkwMDAwMDEwODJFNTAwMTA5M0U1MDEwMjgwRTEwMTEwQTBFM0M4Cis6MTBBMUEwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNUI3Cis6MTBBMUIwMDAwMDEwODJFNTAwMTA5M0U1ODEwMTgwRTEwMTEwQTBFMzI5Cis6MTBBMUMwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTk3Cis6MTBBMUQwMDAwMDEwODJFNTAwMTA5M0U1MDEwMTgwRTEwMTEwQTBFMzg5Cis6MTBBMUUwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTc3Cis6MTBBMUYwMDAwMDEwODJFNTAwMTA5M0U1ODEwMDgwRTEwMTEwQTBFM0VBCis6MTBBMjAwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTU2Cis6MTBBMjEwMDAwMDEwODJFNTAwMTA5M0U1MDEwMDgwRTExRUZGMkZFMUIwCis6MTBBMjIwMDBGQzQ2NjA0N0E0MjE5RkU1QTgzMTlGRTVBMDEzQTBFMTZCCis6MTBBMjMwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTI0Cis6MTBBMjQwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyMDEzQTBFMUQ5Cis6MTBBMjUwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTA0Cis6MTBBMjYwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBMDEyQTBFMTNBCis6MTBBMjcwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNUU0Cis6MTBBMjgwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyMDEyQTBFMTlBCis6MTBBMjkwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNUM0Cis6MTBBMkEwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBMDExQTBFMUZCCis6MTBBMkIwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNUE0Cis6MTBBMkMwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyMDExQTBFMTVCCis6MTBBMkQwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTg0Cis6MTBBMkUwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBMDEwQTBFMUJDCis6MTBBMkYwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTY0Cis6MTBBMzAwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMTNCCis6MTBBMzEwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTQzCis6MTBBMzIwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUxRUZGMkZFMTdGCis6MTBBMzMwMDBGQzQ2NjA0N0EwMzA5RkU1MDExMEEwRTMwMDEwODNFNUQ0Cis6MTBBMzQwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTJECis6MTBBMzUwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUxRUZGMkZFMTY4Cis6MTBBMzYwMDBGQzQ2NjA0NzcwMzA5RkU1MDAxMEEwRTMwMDEwODNFNUQ1Cis6MTBBMzcwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNUZECis6MTBBMzgwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUxRUZGMkZFMTM4Cis6MTBBMzkwMDBGQzQ2NjA0NzM0MjA5RkU1M0MzMDlGRTUwMDEwQTBFMzc5Cis6MTBBM0EwMDAwMDEwODJFNTAwMTA4MkU1MDExMEEwRTMwMDEwODNFNUIzCis6MTBBM0IwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNUJECis6MTBBM0MwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUxRUZGMkZFMUY4Cis6MTBBM0QwMDBGODAwMTg0MDA0MDExODQwMDAwMTE4NDBGQzAwMTg0MDIzCis6MTBBM0UwMDA4MEI1MDBGMDBDRjgwMDI3MzgxQzAwRjA0N0Y4NzgxQzA2Cis6MTBBM0YwMDAwNzA0M0YwQzBDMkZGN0REODBCQzA4QkMxODQ3MUQ0ODM0Cis6MTBBNDAwMDAwMjY4MUQ0OThCNjlEMjE4MDI2MDAyNjY4QTZBNDM2ODM1Cis6MTBBNDEwMDA5QjE4NDM2MDkzNDIwMkQyODI2ODAxMzI4MjYwQzI2ODE0Cis6MTBBNDIwMDAwQjZBRDIxOEMyNjA0MjY5Q0I2OEQyMTg0MjYxQzI2OTE1Cis6MTBBNDMwMDA4QjY4RDIxOEMyNjEwMjY5MEI2OUQyMTgwMjYxODI2OTA1Cis6MTBBNDQwMDAwQjY4RDIxODgyNjEwMjZCQ0I2OUQyMTgwMjYzNEE2QTI4Cis6MTBBNDUwMDA0MzZCOUIxODQzNjM5MzQyMDJEMjgyNkIwMTMyODI2MzQ3Cis6MTBBNDYwMDBDMjZCNEI2OUQyMThDMjYzMDI2Q0M5NkE1MTE4MDE2NDhECis6MTBBNDcwMDA3MDQ3MDAwMEE0MkEwMDgwMDAwODE0NDA4OEI1Njk0NjhGCis6MTBBNDgwMDAwMEYwMTdGODgxMDgwQUQwMDAyMDAwMjkwN0Q5MDAyMjFGCis6MTBBNDkwMDA4MzAwMDA5RkMwNDZGQTUwMDEzMDg4NDJGOEQzODhCQzQwCis6MTBBNEEwMDAwOEJDMTg0NzAwQjUwMEYwMDRGODAwMDQwMDBDMDhCQzE0Cis6MTBBNEIwMDAxODQ3MDAyMjAwMjgwQUQwMDEyODBBRDAwMjI4MENEMDEwCis6MTBBNEMwMDAwMzI4MDJEMTA3NDgxQzIyMDg2MDEwMUM3MDQ3MDY0ODY4Cis6MTBBNEQwMDAwNEUwMDY0ODUwMjIwODYwRjdFNzA1NDg2ODIyMDg2MDUzCis6MTBBNEUwMDBGM0U3MDAwMDA4ODMyMDQwQTQyQTAwODAwQzJCMDA4MEEyCis6MTBBNEYwMDBBMDgyMjA0MDgwQjQwMzIyQzI4MDE1NEFDMDQ2ODI2MEY4Cis6MTBBNTAwMDAxNDRBMTI4ODAxMzJDMjYwMDAyMDEzNEExMzVDQzA0NjBDCis6MTBBNTEwMDAwQjcwMDEzMDAxMzEwODI4RjhEMzIwMjIwQTcwMDEzMTc0Cis6MTBBNTIwMDAwMDIwMEU0QjFGNUNDMDQ2MEY3MDAxMzAwMTMxMDgyODFGCis6MTBBNTMwMDBGOEQzMEE3MDAxMzEwMDIwMDk0QTEzNUNDMDQ2MEI3MDQxCis6MTBBNTQwMDAwMTMwMDEzMTA4MjhGOEQzMDAyMDA4NzA4MEJDNzA0NzIyCis6MTBBNTUwMDAwODEwMDAwMzY4MEUwMDgwN0MwNDAwODA4NTA0MDA4MEUxCis6MTBBNTYwMDA4RTA0MDA4MDAwQjUwMTIzMEE0OEMxMUQ4OTMxNEI3MDVCCis6MTBBNTcwMDAwMDIyMEE3MDY0MjE4MDMwQzE4MjAxODM0MzgzN0QyMURGCis6MTBBNTgwMDBDOTAwODE4M0MyODMwNDQ4MDEyMjAwMjEwMEYwOEVGQkIwCis6MTBBNTkwMDAwOEJDMTg0NzY4MEUwMDgwQjUyMkZGRkYwMEI1RkZGNzIyCis6MTBBNUEwMDBFMUZGMTM0ODAyMjIwMDIxMDBGMDgwRkIwMTIzRDg0MjgyCis6MTBBNUIwMDAwQUQxMTA0OEMxMUQzOTMxQ0E4ODAxMzJDQTgwODE3OTU3Cis6MTBBNUMwMDAwMTMxODE3MUZERjc3MEY5MEI0OEMwNjgwMTI4MDVEMTkwCis6MTBBNUQwMDAwQTQ4N0QyMkQyMDAwMDIxMDBGMDY4RkIwODQ4RkJGNzAyCis6MTBBNUUwMDBFMUZDMDg0ODI4MjIwMDIxMDBGMDYwRkIwOEJDMTg0NzY1Cis6MTBBNUYwMDA3OTIxRkZGRkEwODIyMDQwNjgwRTAwODBBNTdCMjE0MENBCis6MTBBNjAwMDA5NTJDRkZGRjU5MDNGRkZGMDBCNTEwMjAwRjQ5QzA0NkVFCis6MTBBNjEwMDAwODYwMEY0QTBGNDg2NDIxRkJGN0M2RkMwRTQ4MDEyMjcwCis6MTBBNjIwMDAxMjA0MDE2ODBBNDAwODIxMDAyQTA1RDEwMjY4MTIwQ0IwCis6MTBBNjMwMDAwN0QxMDA2ODgwMEEwNEQzMDg0OEMwNDZDMTYwMDhCQzNFCis6MTBBNjQwMDAxODQ3MDc0OEMwNDYwMTY0RjlFNzAwMDAwMDAwMDBCMDYxCis6MTBBNjUwMDBBNTU1RkZGRjdDMjkwMDgwMDAwMDEwNDA0MDAxMTgwMDM0Cis6MTBBNjYwMDAwMDAwMDA4MEY4QjUyNzQ4MDEyMjEyMDQwMTY4MEE0MDYyCis6MTBBNjcwMDAwNzIxMDAyQTA1RDEwMjY4MTIwQzA2RDEwMDY4ODAwQTYxCis6MTBBNjgwMDAwM0QzMjE0OEMwNDZDMTYwMDJFMDIwNDhDMDQ2MDE2NEFGCis6MTBBNjkwMDAxRjQ4RkJGNzg3RkMxRjQ4QzE2QkZGMjlGQ0QxODE2QjZBCis6MTBBNkEwMDA0MjZCMTYxQzBGMUMxQzRDMTAyMzYwNjkxODQzNjA2MTIwCis6MTBBNkIwMDBBMTY5OTk0MzFEMDRBMTYxRTg2MEEwNjlDMDQ2Mjg2MUIxCis6MTBBNkMwMDAxNjRBMTc0OTY0MjBGQkY3NkZGQzE2NEFDMDQ2MDA5MkYxCis6MTBBNkQwMDAxNTRCMDAyMDM5MUMzMjFDRkJGNzZFRkMxMzQ4QzE2ODc3Cis6MTBBNkUwMDAwODI5RkNEMTEyNDhGQkY3NURGQzEwMjM2MDY5OTg0M0YwCis6MTBBNkYwMDA2MDYxRTg2MDAxMjBFMzIzMUIwMUUxMThDODcxRjhCQzI4Cis6MTBBNzAwMDAwOEJDMTg0NzAwMDAxMDQwNDAwMTE4MDAwMDAwMDA4MEZECis6MTBBNzEwMDAwNDAyRkZGRjAwMDExODQwNjgwRTAwODAyMDU1RkZGRjczCis6MTBBNzIwMDBCNUI2MjE0MDY0MDAzMDAyNDQ4MDIwNDA0MDAxMTg0MDBBCis6MTBBNzMwMDBGNDAxRkZGRjAwQjVGREY3MDFGRjA2NDhGQkY3MzJGQzBGCis6MTBBNzQwMDBGREY3RDZGRUZFRjcwNEY4RkVGNzE2RjhGRUY3MjRGODNDCis6MTBBNzUwMDAwOEJDMTg0NzkxMDNGRkZGOTBCNUZERjc2QkZDMzQ0RjIxCis6MTBBNzYwMDAwMDI0Rjk2OEY4MUQ3OTMwMDEyOTBGRDEzMTQ5QzA0NjFDCis6MTBBNzcwMDBGOTY3MzE0OUMwNDYwMTYwMzA0OUMwNDYwQzYwNEM2MDAxCis6MTBBNzgwMDA4QzYwQ0M2MDBDNjE0QzYxOEM2MTA0RTBGOTFEN0QzMTAyCis6MTBBNzkwMDBGOTY3MTJDMDA4MzgwMDY4NjAyMzAxNjgxOTQzMDE2MDM2Cis6MTBBN0EwMDBGODZGMjAyMzAxNjgxOTQzMDE2MEY4NkY0MDIzMDE2OEE2Cis6MTBBN0IwMDA5OTQzMDE2MDAwRjA1NEY4RkRGNzRFRkMwMEYwNUVGOTlCCis6MTBBN0MwMDBGREY3NzNGOEZGRjcwQ0ZFRkRGNzJFRkVGREY3QjZGRDYzCis6MTBBN0QwMDBGREY3QzJGRUZERjc1NEZERkRGNzBBRkRGREY3OTRGRDAwCis6MTBBN0UwMDAwMEYwMUFGQUZERjc5Q0ZGRkRGNzBBRkZGREY3RDJGRTE1Cis6MTBBN0YwMDBGREY3M0NGQ0ZCRjdEQ0ZBRkZGNzlDRkY3MTIzNUIwMUU0Cis6MTBBODAwMDBGODE4MDQ3MjQ0NzIwNzIzNUIwMkY4MTgwNDYzRjg2OEFFCis6MTBBODEwMDAwMTI4MDJEMUE4MjBGRUY3QjFGRDA5NDhDMDQ2NDQ2MkQ0Cis6MTBBODIwMDAwMEYwMThGQTA3NDhGQkY3QkRGQjkwQkMwOEJDMTg0N0JFCis6MTBBODMwMDA2ODBFMDA4MDAwMDExMTQwMDQwMTExNDAwMDAxMTEwMDY4Cis6MTBBODQwMDBDMDAwMTgwMDE1OEYyMTQwMDBCNTA0NDhGQkY3QUFGQjkzCis6MTBBODUwMDBGREY3NUVGRkZERjcyNEZDMDhCQzE4NDcxNTk5MjE0MDYxCis6MTBBODYwMDBGQTIxMDM0OEMwNDY0MTYyNDAyMTQxNjI3MDQ3MDAwMDFFCis6MTBBODcwMDBDMDAwMTgwMDA3NDg0MTY5MDc0QjE5NDM0MTYxODI2OUNDCis6MTBBODgwMDA5QTQzODI2MTAxMjIxMjA1RDE2MDgwNjlDMDQ2MTA2MTNECis6MTBBODkwMDA3MDQ3MDAwMDY4MEUwMDgwRkVBRjlBMTAwMEI1MDI0OEI1Cis6MTBBOEEwMDBGQkY3ODBGQjA4QkMxODQ3Qzg1N0ZGRkZGMEI1MjQ0Q0U2Cis6MTBBOEIwMDAwMTIxMDkwNDIwNjgwMTQwMDkyMDIyNEUyMjREMDAyOTZGCis6MTBBOEMwMDAwNUQxMjE2ODA5MEMwNEQxMjE2ODg5MEEwMUQzRjA2MEZGCis6MTBBOEQwMDAwMEUwMjg2NDFENDhGQkY3NjVGQjFENEYxRDQ5ODg2OTkyCis6MTBBOEUwMDAwMTMwODg2MTM4N0EwMDI4MDJEMTc4N0EwMDI4MUZEMDk4Cis6MTBBOEYwMDAxOTQ4RkJGNzU3RkIxOTQ4RkJGNzU0RkIwMDI4RkFEMTFFCis6MTBBOTAwMDAzODdBMDAyODAyRDAxNjQ4RkJGNzRDRkIwMTIxMDkwNEQ1Cis6MTBBOTEwMDAyMDY4MDE0MDE0MjAwMDI5MDVEMTIxNjgwOTBDMDREMUM4Cis6MTBBOTIwMDAyMTY4ODkwQTAxRDNGMDYwMDFFMDI4NjRGRkU3RkVFN0FGCis6MTBBOTMwMDBGRkY3NjVGRDBCNDhGQkY3MzVGQkZGRjdBRkZGQ0RFN0YyCis6MTBBOTQwMDAwMDAwMTA0MDQwMDExODAwMDAwMDAwODAwNDAyRkZGRkRBCis6MTBBOTUwMDA4ODFDMDA4MDA4ODMyMDQwRjQwMUZGRkZCNTA3RkZGRjNCCis6MTBBOTYwMDAwMDAwRkZGRjk5OUYyMTQwMDAyMDA3NEEwMTIxMDkwNUFGCis6MTBBOTcwMDA1MDYxQzg2MEQwNjFDODYxMDMyM0RCMDQwMzRBMDEyMTMwCis6MTBBOTgwMDBEMTYzNTg2MEZDRTcwMDAwNjgwRTAwODBDMDAwMTgwMDJBCis6MTBBOTkwMDA4MEI1QzBCMDAxMjIwMDIxMEEyMEZDRjdEMUZGMDcxQ0JFCis6MTBBOUEwMDBGRjJGMjhEMDY5NDZGRjIyMzgxQzAxMzJGREY3NTRGOUU5Cis6MTBBOUIwMDBGRjIzMDEzMzk4NDIxQkQxMEQ5ODAwMDkxOEQzMzgxQzhFCis6MTBBOUMwMDBGREY3OERGODBFNDkwMTIyMTIwNDA4NjgwMjQwMEQ0ODc3Cis6MTBBOUQwMDAwNUQxMEE2ODEyMEMwNkQxMDk2ODg5MEEwM0QzMEE0OTBECis6MTBBOUUwMDBDMDQ2Qzg2MDAyRTAwOTQ5QzA0NjA4NjRGRkY3QkNGRkUyCis6MTBBOUYwMDAzODFDRkRGNzc0Rjg0MEIwODBCQzA4QkMxODQ3MDAwMDU0Cis6MTBBQTAwMDAwMDAwMTA0MDA3ODAwMDAwNDAwMTE4MDAwMDAwMDA4MDk2Cis6MTBBQTEwMDAwMEI1MTc0OTAxMjIxMjA0MDg2ODAyNDAwNjIwMDAyQUU2Cis6MTBBQTIwMDAwNUQxMEE2ODEyMEMwNkQxMDk2ODg5MEEwM0QzMTE0OUI1Cis6MTBBQTMwMDBDMDQ2Qzg2MDAyRTAxMDQ5QzA0NjA4NjQwMzIwRkVGNzIzCis6MTBBQTQwMDBEM0ZDRkJGNzBERkYwMTIzMTg0M0ZCRjdFN0ZGRkZGN0VDCis6MTBBQTUwMDA4M0ZFRkZGNzlERkZGRkY3MDVGRUZGRjdGNUZFRkZGNzBCCis6MTBBQTYwMDAwOUZGRkZGNzlCRkRGRkY3MjFGRjA4QkMxODQ3MDAwMDE3Cis6MTBBQTcwMDAwMDAwMTA0MDQwMDExODAwMDAwMDAwODBGMEI0NDY0QTc5Cis6MTBBQTgwMDAwMTIxQzkwMzQ1NEQxOTIzREIwMUVDMThBMTYxMjg4ODc4Cis6MTBBQTkwMDA0MDA0NDM0QkMwMTg4NzFBMDQyMEFGNjA0MTRFQzA0NkEzCis6MTBBQUEwMDBCMDYxMDgyMEM4MjM0MzQzQkI0MjIxRDk0MTAwM0Q0RTM5Cis6MTBBQUIwMDBDMDQ2MzE2MUI2NjkyMDIzOUIxQjNBNEVDMDQ2RjM2MTA0Cis6MTBBQUMwMDAxMDNCMzM2MjhCMDBGRjFBNDAwODgxNDIxN0QzQjgyMzMyCis6MTBBQUQwMDA0MzQzQkI0MjA4RDk0MTFFMzI0QkMwNDY5OTgxRDk4MUJDCis6MTBBQUUwMDA0MDAwMDIzODU4NjEwQUUwMDEzMDgxNDJFRkQyMDZFMEFFCis6MTBBQUYwMDAyQzRFQjM2OTAxMzNCMzYxNDAwMDg4NDJEMkQ5MkE0OTUwCis6MTBBQjAwMDAwMDIwQTM2OTlCMDgwN0QwMjg0Qjg3MDBDQjUxQTc2OTc5Cis6MTBBQjEwMDBCRjA4MDEzMDg3NDJGOEQ4MjI0OUMwNDY4QTYyOEM4OTMyCis6MTBBQjIwMDA1ODIwNjA0Mzg3MTgwMDIwMDAyMjAwMkMwQURENTgyMzlCCis6MTBBQjMwMDA0MzQzOEM2QUUzMTgwMTMwMDAwNDAwMEM5QTYwOEI4OTRGCis6MTBBQjQwMDA4MzQyRjREQ0NGNjJDQzg5NjAwMDAwMTk0MDAxQzcxOTUwCis6MTBBQjUwMDAwMDIwMDAyQzBCREQ0MzAwMUIxODVCMDFDQzZBRTMxOEJFCis6MTBBQjYwMDAwMTMwMDAwNDAwMEM5QTYwQ0I4OTgzNDJGM0RDNEY2MjExCis6MTBBQjcwMDAwMDIwMEI2OTAwMkIwN0Q5ODcwMDRCNkFDMDQ2REE1MUM5Cis6MTBBQjgwMDAwQjY5MDEzMDgzNDJGN0Q4NDk2QTgwMDAwODE4MDQzOEZECis6MTBBQjkwMDAyODYxRjBCQzcwNDcwMDAwQjBCRTIxNDA2ODBFMDA4MDA0Cis6MTBBQkEwMDAwMDAwMjA0MDRDMkEwMDgwMDAwMDIwNDAwMEFEREUwMDY0Cis6MTBBQkIwMDAwQTQ4MDEyMzFCMDY0MTY5OTk0MzFBMDk0MTYxRDE2MDgyCis6MTBBQkMwMDAwMDIxQTEyMjUyMDM5MTYxMUIyM0RCMDFDMDE4ODE2MTg2Cis6MTBBQkQwMDAwMTIwMDAwNjU5MDUwODYwNzA0NzAwMDA2ODBFMDA4MERCCis6MTBBQkUwMDA4MEI0MDIxQzBCNDgxQjIzREIwMUMzMTg5QTYxMDEyM0FDCis6MTBBQkYwMDAxQjA2NDI2OTFBNDM0MjYxODc2OTlGNDMwMTIzMUIwNTczCis6MTBBQzAwMDA4NzYxREE2MDgwNjlDMDQ2MTg2MUExMjA0MDAzODE2MUQ0Cis6MTBBQzEwMDA4MEJDNzA0NzY4MEUwMDgwODBCNUZGRjdDOUZGMDAyMDM4Cis6MTBBQzIwMDAwMEYwMjBGODAwMjAwOTQ5MDAyMjAzMDE1RjE4MzMyM0I3Cis6MTBBQzMwMDA5QjAxRkIxODlBNjIwMTMwMEIyOEY2RDMwNDQ4MDEyMkNECis6MTBBQzQwMDAwMDIxMDBGMDMzRjg4MEJDMDhCQzE4NDc2ODBFMDA4MDczCis6MTBBQzUwMDAxRDNFRkZGRjAwQjUwMjQ4MDBGMDA0RjgwOEJDMTg0NzhECis6MTBBQzYwMDBBODYxMDAwMDgwQjQwMTIyMTIwNTBGNEJBMTIxNDkwMzA1Cis6MTBBQzcwMDAwMDI4MEVEMEM4NjExODFDNTk2OTUzMDExOTQzNDE2MTVECis6MTBBQzgwMDA4NzY5OUY0Mzg3NjFEMTYwODA2OUMwNDYxMDYxODBCQzNECis6MTBBQzkwMDA3MDQ3MTgxQzVGNjkwMTIzNUIwNjlGNDM0NzYxRDc2MEJCCis6MTBBQ0EwMDAwMDIwQzg2MUYzRTcwMDAwNjgwRTAwODBCMEI0MDcxQzA0Cis6MTBBQ0IwMDAwMDIwMTc0QzAzMDExRDE5MzMyMzlCMDFFQjE4OUQ2QURCCis6MTBBQ0MwMDBCRDQyMDVEMTFENkI5NTQyMDJEMURCNkE4QjQyMUNEMDdGCis6MTBBQ0QwMDAwMTMwMEIyOEVFRDMwMDIwMDMwMTFEMTkzMzIzOUIwMTAzCis6MTBBQ0UwMDBFQjE4OUI2QTAwMkIwOUQxMDMwMTFDMTkzMzIzOUIwMTJDCis6MTBBQ0YwMDBFMzE4MUE2M0Q5NjI1QTYzOUY2MjAyRTAwMTMwMEIyODlECis6MTBBRDAwMDBFQUQzMEIyODAxRDEwMDIwQzA0M0IwQkM3MDQ3MDAwMDNCCis6MTBBRDEwMDA2ODBFMDA4MDkwQjQwMTFDMDAyMjAxMjAxNjRGMDFFMDUzCis6MTBBRDIwMDAwMDJBMDdEMTAzMDFEQzE5MzMyMzlCMDFFMzE4OUI2OTM3Cis6MTBBRDMwMDA4QjQyMTFEMTAyMDFEMjE5MzMyMzlCMDFEMjE4OTM2QTlECis6MTBBRDQwMDBDMDQ2OTM2MUQzNkFDMDQ2RDM2MTEzNkJDMDQ2MTM2Mjk5Cis6MTBBRDUwMDA1MzZCQzA0NjUzNjIwMTIyMDEzMDBCMjhFMEQzMDc0QkVFCis6MTBBRDYwMDAwMDJBMDJEMTlBNjg4QTQyMDNEMTAwMjE5OTYwOTBCQ0RFCis6MTBBRDcwMDA3MDQ3MDAyMEMwNDNGQUU3NjgwRTAwODBFODFCMDA4MDlGCis6MTBBRDgwMDAwQjI4MTdEQTBDNDkwMTIzNUIwNjhBNjkxMzQzMDEyMjU5Cis6MTBBRDkwMDAxMjA1OEI2MTEzNjEwMDAxNDAxODMzMjM5QjAxQzAxODE5Cis6MTBBREEwMDAwMzZCQzA0NjQzNjM1MzAxODg2OTk4NDM4ODYxMTA2MTBGCis6MTBBREIwMDAwMTIwNzA0NzAwMjBGQ0U3NjgwRTAwODA5MEI0MDg0QTJDCis6MTBBREMwMDBEMDY5MDAyMTA3NEZEMzY5ODM0MjAyRDlGQzFBMjAxOEE5Cis6MTBBREQwMDAwMEUwQzAxQTA5MTgxODFDQjk0MkY0RDk5MEJDNzA0Nzk5Cis6MTBBREUwMDAwMDIwMTQ0MEE4NjEwMDAwOTBCNTA3MUMwMDI0MDAyRjJCCis6MTBBREYwMDAwNEQzRkZGN0UzRkYwMTM0QkM0MkZBRDk5MEJDMDhCQzhFCis6MDRBRTAwMDAxODQ3MDAwMEVGCis6MDAwMDAwMDFGRgorLyogdmVyIDAzLjAwMS4wMDggKi8KKy8qCisgKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgb2YgdGhlIDNjOTkwaW1nLmgKKyAqIG1pY3JvY29kZSBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIDNDb20gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDNDT00gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFBVUkNIQVNFIE9SIFVTRSBPRiBUSEUgM2M5OTBpbWcuaAorICogTUlDUk9DT0RFIFNPRlRXQVJFIFdJTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQorICogSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKKyAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQorICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgorICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCA0NjYxMDZmLi5jNmFmNjFiIDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtMzUsNyArMzUsNyBAQAogZnctc2hpcHBlZC0kKENPTkZJR19DT01QVVRPTkUpICs9IGludGVsbGlwb3J0Mi5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQ0hFTFNJT19UMykgKz0gY3hnYjMvdDNiX3BzcmFtLTEuMS4wLmJpbiBcCiAJCQkJICAgY3hnYjMvdDNjX3BzcmFtLTEuMS4wLmJpbiBcCi0JCQkJICAgY3hnYjMvdDNmdy03LjAuMC5iaW4KKwkJCQkgICBjeGdiMy90M2Z3LTcuMS4wLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19EVkJfVFRVU0JfQlVER0VUKSArPSB0dHVzYi1idWRnZXQvZHNwYm9vdGNvZGUuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0UxMDApICs9IGUxMDAvZDEwMW1fdWNvZGUuYmluIGUxMDAvZDEwMXNfdWNvZGUuYmluIFwKIAkJCSAgICAgZTEwMC9kMTAyZV91Y29kZS5iaW4KQEAgLTQ5LDggKzQ5LDEwIEBACiAJCQkJICAgICBzYjE2L2ltYV9hZHBjbV9jYXB0dXJlLmNzcAogZnctc2hpcHBlZC0kKENPTkZJR19TTkRfWU1GUENJKSArPSB5YW1haGEvZHMxX2N0cmwuZncgeWFtYWhhL2RzMV9kc3AuZncgXAogCQkJCSAgIHlhbWFoYS9kczFlX2N0cmwuZncKK2Z3LXNoaXBwZWQtJChDT05GSUdfVEVIVVRJKSArPSB0ZWh1dGkvYmR4LmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19USUdPTjMpICs9IHRpZ29uL3RnMy5iaW4gdGlnb24vdGczX3Rzby5iaW4gXAogCQkJICAgICAgIHRpZ29uL3RnM190c281LmJpbgorZnctc2hpcHBlZC0kKENPTkZJR19UWVBIT09OKSArPSAzY29tL3R5cGhvb24uYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1VTQl9EQUJVU0IpICs9IGRhYnVzYi9maXJtd2FyZS5mdyBkYWJ1c2IvYml0c3RyZWFtLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19VU0JfRU1JMjYpICs9IGVtaTI2L2xvYWRlci5mdyBlbWkyNi9maXJtd2FyZS5mdyBcCiAJCQkJICBlbWkyNi9iaXRzdHJlYW0uZncKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCA1MjQxMTNmLi4wMGI2ZTNjIDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC0zNjgsNyArMzY4LDcgQEAKIAogRmlsZTogY3hnYjMvdDNiX3BzcmFtLTEuMS4wLmJpbi5paGV4CiBGaWxlOiBjeGdiMy90M2NfcHNyYW0tMS4xLjAuYmluLmloZXgKLWZpbGU6IGN4Z2IzL3QzZnctNy4wLjAuYmluLmloZXgKK2ZpbGU6IGN4Z2IzL3QzZnctNy4xLjAuYmluLmloZXgKIAogTGljZW5zZTogR1BMdjIgb3IgT3BlbklCLm9yZyBCU0QgbGljZW5zZSwgbm8gc291cmNlIHZpc2libGUKIApAQCAtNDM1LDMgKzQzNSw2MSBAQAogIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBURUhVVEkgLSBUZWh1dGkgTmV0d29ya3MgMTBHIEV0aGVybmV0CisKK0ZpbGU6IHRlaHV0aS9iZHguYmluCisKK0xpY2VuY2U6CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworIGFjY29tcGFueWluZyBpdC4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBUWVBIT09OIC0gM2NyOTkwIHNlcmllcyBUeXBob29uCisKK0ZpbGU6IDNjb20vdHlwaG9vbi5iaW4KKworTGljZW5jZToKKy8qCisgKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgb2YgdGhlIDNjOTkwaW1nLmgKKyAqIG1pY3JvY29kZSBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIDNDb20gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDNDT00gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFBVUkNIQVNFIE9SIFVTRSBPRiBUSEUgM2M5OTBpbWcuaAorICogTUlDUk9DT0RFIFNPRlRXQVJFIFdJTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQorICogSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKKyAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQorICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgorICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKKyAqLworCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4wLjAuYmluLmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NjExNzkuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDE4ODEgKzAsMCBAQAotOjEwMDAwMDAwNjAwMDc0MDAyMDAzODAwMDIwMDM3MDAwMDAwMDEwMDBENgotOjEwMDAxMDAwMDAwMDIwMDBFMTAwMDI4NDAwMDcwMDAwRTEwMDAyODhFNwotOjEwMDAyMDAwMDAwMTAwMDBFMDAwMDAwMEUwMDAwMEEwMDEwMDAwMDA2RQotOjEwMDAzMDAwNDQ0NDQ0NDBFMzAwMDE4MzIwMDIwMDAwMjAwMUUwMDAyQQotOjEwMDA0MDAwMjAwMUZGMTAxRkZGRDAwMDFGRkZDMDAwRTMwMDA0M0M5MQotOjEwMDA1MDAwMDIwMDAwMDAyMDAwNjk1NDFGRkZDNTgwMjAwMDY5OUMzOQotOjEwMDA2MDAwMUZGRkM1ODQyMDAwNjlEQzFGRkZDNTg4MjAwMDZBNTA3RgotOjEwMDA3MDAwMUZGRkM1OEMyMDAwMDNDMEMwMDAwMEU0MzEwMEVBMzEzRQotOjEwMDA4MDAwMDBBMTMxMDBBMDMxMDMwMjAwMDJFRDMwNkUyQTA1MDAwQwotOjEwMDA5MDAwRUQzMTAwMDIwMDAyMTYwMDEyRkZEQkMwMzAxNEZGREE1RgotOjEwMDBBMDAwRDMwRkQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDM0NwotOjEwMDBCMDAwMEZEMzBGRDMwRjEyRkZENTIzMEEwMDI0MEEwMEQzMEY0QQotOjEwMDBDMDAwRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzBGRDMyNwotOjEwMDBEMDAwMEZEMzBGMTRGRkNFMDM0MjFGMTRGRkNCMDM0MjFGMTI5NgotOjEwMDBFMDAwRkZDQ0MwMzAyRDM3MzAyRDM3MzQyRDM3MzgyRDM3M0NFRAotOjEwMDBGMDAwMjMzRDAxNzIzM0VEMDAwMjAwMTJGRkM0QzAzMDJGMzdFMAotOjEwMDEwMDAwMDAyRjM3MTAyRjM3MjAyRjM3MzAyMzNEMDE3MjMzRUQ2QQotOjEwMDExMDAwMDAwMjAwMTJGRkJFQzAzMDI3MzcwMDI3MzcxMDI3MzdGNAotOjEwMDEyMDAwMjAyNzM3MzAyMzNEMDE3MjMzRUQwMzAyMDAxMkZGQjk1RgotOjEwMDEzMDAwMTNGRkJBMEMwMjAwOTMyMDEyRkZCOTEzRkZCOTBDMDI4RgotOjEwMDE0MDAwMDA5MzIwMTJGRkI4QzAzMTkzMjA4MjIwMTJGRkI3MTMxMgotOjEwMDE1MDAwRkZCNzkzMjAxMkZGQjcxNUZGQjMxNkZGQjZDMDMwRDcxNQotOjEwMDE2MDAwMjAwNTY2MDE2MDAwMUIwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwMDE3MDAwMDQzNjA1MDAwMjAwRDMwRkQzMEY3NTMxMTQwNzQ3MTQ1RQotOjEwMDE4MDAwMDUzMzBDMDcwNDQzNzYzMUU2MDQzNjA1NzUzOUVEMDA3NgotOjEwMDE5MDAwMDIwMDEyRkZBNzE1RkZBM0MwMzBENzIwNjAwMDA2MDBBMQotOjEwMDFBMDAwMDc0NzE0MDUzMzBDMDcwNDQzMDQzRTA1NzUzOUYwMDM3MwotOjEwMDFCMDAwMDIwMDEyRkZBMUMwMzAxNEZGQTFEMzBGRDMwRkQzMEY0MQotOjEwMDFDMDAwOTM0MEI0NDQ3MjQ5RjJEMzBGRDMwRkQzMEYxNEZGOUI2MwotOjEwMDFEMDAwODM0MDE0RkY5QjgzNDAxMkZGOUIyMzBBMDAxNEZGOUE2NQotOjEwMDFFMDAwRDMwRkQzMEZEMzBGOTM0MEI0NDQ3MjQ5RjJEMzBGRDMzQwotOjEwMDFGMDAwMEZEMzBGMTRGRjk1ODM0MDEyRkY5NUNBMjA4MzIwODRFQwotOjEwMDIwMDAwMjE4NTIyQkMyMjc0M0IxMDg2NTBCNDU1OTYzMEI0MzNGRAotOjEwMDIxMDAwNzQzM0Y0NjNGRkU2MDAwMDAwNjUzRkUwNjU1RkREMTJDNAotOjEwMDIyMDAwRkY3Q0MwMzAyODM3NDAyODM3NDQyODM3NDgyODM3NENDRgotOjEwMDIzMDAwMjMzRDAxNzIzM0VEMDMwMjAwMDAwMjAwMTJGRjdBQzA3OQotOjEwMDI0MDAwMzIwMzJFMDUwMzAyMDAxMkZGNzgxM0ZGODE5MzIwQzBCMgotOjEwMDI1MDAwMTEwMTQ5MzEwMDQ4MzEwMTAyMDBDMDAwMTRGRjdFMDQ0MQotOjEwMDI2MDAwRDIzMTE1RkY3RDk0NTAxNEZGN0QwNEQzMzExNUZGN0NFRQotOjEwMDI3MDAwOTQ1MDE0RkY3QzA0RDQzMTE1RkY3QzI0NTYwMDE0RkZFNQotOjEwMDI4MDAwN0IwNEQ1MzExNUZGN0IyNDU2MDAxMEZGN0EwMzAwMDA1NAotOjEwMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwMDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwMDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwMDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwMDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwMDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwMDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwMDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwMDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwMDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwMDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwMDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwMDQyMDAwNjNGRkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDBBMQotOjEwMDQ0MDAwMUZGQzAwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBBQgotOjEwMDQ1MDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwRTMwMDA1QzgwNgotOjEwMDQ2MDAwMUZGRkMwMDAxRkZGQzAwMEUzMDAwNUM4MUZGRkMwMDA0MgotOjEwMDQ3MDAwMUZGRkMwMThFMzAwMDVDODFGRkZDMDE4MUZGRkMwMThFQQotOjEwMDQ4MDAwRTMwMDA1RTAxRkZGQzAxODFGRkZDMjg4RTMwMDA1RTA3RQotOjEwMDQ5MDAwMUZGRkMyODgxRkZGQzI4OEUzMDAwODUwMUZGRkMyOTBFMQotOjEwMDRBMDAwMUZGRkM1N0NFMzAwMDg1MDIwMDAwMDAwMjAwMDAxNkEwNwotOjEwMDRCMDAwRTMwMDBCM0MyMDAwMDE4MDIwMDAwMTgwRTMwMDBDQTgzOQotOjEwMDRDMDAwMjAwMDAyMDAyMDAwMDIwM0UzMDAwQ0E4MjAwMDAyMUMxMAotOjEwMDREMDAwMjAwMDAyMjBFMzAwMENBQzIwMDAwMjIwMjAwMDAyMjZCNQotOjEwMDRFMDAwRTMwMDBDQjAyMDAwMDIzQzIwMDAwMjQwRTMwMDBDQjgwNgotOjEwMDRGMDAwMjAwMDAyNDAyMDAwMDI0OUUzMDAwQ0JDMjAwMDAyNEMxNgotOjEwMDUwMDAwMjAwMDAyNTBFMzAwMENDODIwMDAwMjUwMjAwMDAyNTlENQotOjEwMDUxMDAwRTMwMDBDQ0MyMDAwMDI1QzIwMDAwMjYwRTMwMDBDRDg1OQotOjEwMDUyMDAwMjAwMDAyNjAyMDAwMDI2OUUzMDAwQ0RDMjAwMDAyNkM2NQotOjEwMDUzMDAwMjAwMDAyNzBFMzAwMENFODIwMDAwMjcwMjAwMDAyNzkyNQotOjEwMDU0MDAwRTMwMDBDRUMyMDAwMDI4QzIwMDAwMjhDRTMwMDBDRjg4RAotOjEwMDU1MDAwMjAwMDAyOTAyMDAwMDI5M0UzMDAwQ0Y4MjAwMDAyQUM3RgotOjEwMDU2MDAwMjAwMDAyQjBFMzAwMENGQzIwMDAwMkQwMjAwMDAyRjJDOAotOjEwMDU3MDAwRTMwMDBEMDAyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMjREMQotOjEwMDU4MDAwMjAwMDAzQjAyMDAwMDNCMEUzMDAwRDI0MjAwMDAzQjBERQotOjEwMDU5MDAwMjAwMDAzQjBFMzAwMEQyNDIwMDAwM0IwMjAwMDAzQjBDRQotOjEwMDVBMDAwRTMwMDBEMjQyMDAwMDNCMDIwMDA2Qjc0RTMwMDBEMjQ1MQotOjEwMDVCMDAwMjAwMDZCNzQyMDAwNkI3NEUzMDA3NEU4MDAwMDAwMDBGRQotOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwMUZGQzAwMDBGNQotOjEwMDVEMDAwMUZGRkM1ODAxRkZGQzY3MDIwMDA2Qjc4MjAwMDZCNzg1RQotOjEwMDVFMDAwREVGRkZFMDAwMDAwMDgwQ0RFQURCRUVGMUZGRkMyOTA3NAotOjEwMDVGMDAwMUZGQ0ZFMDAxRkZGQzA4NDFGRkZDNUMwMzAwMDAwMDBBRAotOjEwMDYwMDAwMDAzRkZGRkY4MDQwMDAwMDEwMDAwMDAwMDgwRkZGRkZDOAotOjEwMDYxMDAwMUZGRkMyNUQwMDBGRkZGRjgwNEZGRkZGODAwMDAwMDA0MwotOjEwMDYyMDAwMDAwMDA4ODBCMDAwMDAwNTYwNTAwMDAwNjAwMDAwMDA3RAotOjEwMDYzMDAwNDAwMDAwMTEzNTAwMDAwMDQxMDAwMDAwMTAwMDAwMDFFMgotOjEwMDY0MDAwMjAwMDAwMDAwMDAwMTAwMDdGRkZGRkZGNDAwMDAwMDBCRQotOjEwMDY1MDAwMDUwMDAwMDA4MDAwMDAxOTA0MDAwMDAwMDAwMDA4MDBGMAotOjEwMDY2MDAwMTAwMDAwMDU4MDYwMDAwMDcwMDAwMDAwMjAwMDAwMDlGQwotOjEwMDY3MDAwMDAxRkY4MDA4MDAwMDAxRUEwMDAwMDAwRjgwMDAwMDAyRAotOjEwMDY4MDAwMDgwMDAwMDAwN0ZGRkZGRjE4MDAwMDAwMDEwMDgwMDFDNAotOjEwMDY5MDAwNDIwMDAwMDAxRkZGQzIwRDFGRkZDMENDMDAwMTAwODAwMAotOjEwMDZBMDAwNjA0MDAwMDAxQTAwMDAwMDBDMDAwMDAwMDAwMDMwMDA1NAotOjEwMDZCMDAwNjAwMDA4MDA4MDAwMDAxQzAwMDEwMDAwODAwMDAwMUE5QgotOjEwMDZDMDAwODAwMDAwMThGQzAwMDAwMDgwMDAwMDAxMDAwMDQwMDBENQotOjEwMDZEMDAwODAwMDA0MDAwMzAwMDAwMDUwMDAwMDAzRkZGRkJGRkY4NAotOjEwMDZFMDAwMDAwMDBGRkYxRkZGQzM5MEZGRkZGMDAwMDAwMDE2RDBCNwotOjEwMDZGMDAwMDAwMEZGRjdBNTAwMDAwMDFGRkZDNEEwMUZGRkM0NTFBQQotOjEwMDcwMDAwMDAwMTAwMDgwMDAwMEIyMDIwMkZGRjgwMUZGRkM0NDVDMAotOjEwMDcxMDAwMDAwMDJDMDBGRkZFRkZGODAwRkZGRkZGMUZGRkM1Njg3MQotOjEwMDcyMDAwMDAwMDIwMDBGRkZGREZGRjAwMDBGRkVGMDEwMDExMDBDRAotOjEwMDczMDAwMUZGRkM0NjExRkZGQzNDMjFGRkZDNDEwMUZGRkM1OTA2RQotOjEwMDc0MDAwRkZGRkVGRkYwMDAwRkZGQjFGRkZCRTkwRkZGRkY3RkY2MwotOjEwMDc1MDAwMUZGRkMwNTQwMDAwRkZGRDAwMDFGQkQwMUZGRkM1QjAwQwotOjEwMDc2MDAwMUZGRkM2NjAxRkZGQzU5MUUwRkZGRTAwMDAwMDgwMDA3NAotOjEwMDc3MDAwMUZGRkM1MkMxRkZGQzVCNDFGRkZDMDU4MUZGRkM0RDBFQgotOjEwMDc4MDAwMUZGQ0ZGRDgwMDAxMDA4MUUxMDAwNjAwMDAwMDI3MTBENwotOjEwMDc5MDAwMUZGQ0ZFMzAxRkZDRkU3MEUxMDAwMjAwMUZGRkM1Mjg5OQotOjEwMDdBMDAwMUZGRkM1NDAwMDAzRDA5MDFGRkZDNTU0MkI1MDYzODAyRQotOjEwMDdCMDAwMkI1MDc5ODAyQjUwOTA4MDJCNTBBNjgwMUZGRkM0NTk1RQotOjEwMDdDMDAwMDEwMDExMEYyMDJGRkUwMDIwMzAwMDgwMjAyRkZGMDA5RAotOjEwMDdEMDAwMDAwMEZGRkYwMDAxRkZGODJCNTBCMjAwMkI1MEIyMDhDMQotOjEwMDdFMDAwMDAwMTAwMTAyQjUwQjE4MDJCNTBCMjgwMkI1MEJBMDA2QQotOjEwMDdGMDAwMDAwMTAwMTEyQjUwQkQyODJCNTBCQzgwMkI1MEJEQTBGOAotOjEwMDgwMDAwMjAzMDAwMDBERkZGRkUwMDUwMDAwMDAyMDBDMDAwMDBBQQotOjEwMDgxMDAwMDIwMDAwMDBGRkZGRjdGNDFGRkZDMDVDMDAwRkY4MDBBQwotOjEwMDgyMDAwMDQ0MDAwMDAwMDEwMDAwMDBDNDAwMDAwMUM0MDAwMDBDQwotOjEwMDgzMDAwRTAwMDAwQTAxRkZGQzUzMDFGRkQwMDA4MUZGRkM1NDREQQotOjEwMDg0MDAwMUZGRkM1NTgxRkZGQzU2Q0UxMDAwNjkwRTEwMDA2RUNENAotOjEwMDg1MDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwMDg2MDAwMjAxMDAwNDAyMDEwMDA0MDIwMTAwMDQwMjAxNDAwODA4NAotOjEwMDg3MDAwMjAwQzAwMDAyMDBDMDAwMDIwMEMwMDAwMjAxMDAwNDA4NAotOjEwMDg4MDAwMjAxNDAwODAyMDE0MDA4MDIwMTQwMDgwMjAxODAwQzA1NAotOjEwMDg5MDAwMjAxQzAxMDAyMDFDMDEwMDIwMUMwMTAwMjAyMDAxNDAyMAotOjEwMDhBMDAwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwMjAxQzAxMDAyMwotOjEwMDhCMDAwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwMjAxQzAxMDAxMwotOjEwMDhDMDAwMjAyMDAxNDAyMDIwMDE0MDIwMjAwMTQwMjAyMDA5NDAxQwotOjEwMDhEMDAwMjAyMDA5NDAyMDIwMDk0MDIwMjAwOTQwMjAyNDA5ODBCMAotOjEwMDhFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAxNAotOjEwMDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwMDkwMDAwMjAwMDUyNTQyMDAwNTEyNDIwMDA1MjU0MjAwMDUyNTQwMAotOjEwMDkxMDAwMjAwMDUwNjAyMDAwNTA2MDIwMDA1MDYwMjAwMDRFOTQ2NQotOjEwMDkyMDAwMjAwMDRFOTQyMDAwNEU4QzIwMDA0REZDMjAwMDRDQTA1NgotOjEwMDkzMDAwMjAwMDRBODgyMDAwNDg4ODAwMDAwMDAwMDAwMDAwMDBENQotOjEwMDk0MDAwMjAwMDUyMjQyMDAwNTBGMDIwMDA1MTk0MjAwMDUxOTRBNwotOjEwMDk1MDAwMjAwMDRGMzgyMDAwNEYzODIwMDA0RjM4MjAwMDRGMzhGQgotOjEwMDk2MDAwMjAwMDRGMzgyMDAwNEU4NDIwMDA0RjM4MjAwMDRCQzQxOAotOjEwMDk3MDAwMjAwMDRBM0MyMDAwNDgzODAwMDAwMDAwMDAwMDAwMDAzMQotOjEwMDk4MDAwMjAwMDBCNzAyMDAwMzg0QzIwMDAwNEMwMjAwMDQ0MkNCNAotOjEwMDk5MDAwMjAwMDBCNjgyMDAwM0Y0MDIwMDAwM0YwMjAwMDQzRUNDMwotOjEwMDlBMDAwMjAwMDQ4MTQyMDAwM0M1MDIwMDAzQjZDMjAwMDM3QzgzOQotOjEwMDlCMDAwMjAwMDM2NTQyMDAwMzNDQzIwMDAyRUY4MjAwMDM5Q0MwMwotOjEwMDlDMDAwMjAwMDJCNUMyMDAwMjc5NDIwMDA2NDhDMjAwMDIzMjAzMgotOjEwMDlEMDAwMjAwMDIwMDQyMDAwMUZCODIwMDAxQ0E0MjAwMDE3QjAxNQotOjEwMDlFMDAwMjAwMDE0RjAyMDAwMEQ4QzIwMDAwQkI0MjAwMDEwQkM1RgotOjEwMDlGMDAwMjAwMDEyQTAyMDAwNDEzMDIwMDAzQzA0MjAwMDBCNzg5MQotOjEwMEEwMDAwMjAwMDA0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwMEExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwMEEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwMEEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwMEE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwMEE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwMEE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwMEE4MDAwMDAwMDAwMDAzMjY0MDAwMDAwMDAwMDAwMzI2NDAwMDAzQQotOjEwMEE5MDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDAzNgotOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDBGNgotOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwMEIwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwMEIxMDAwMDAwMDAwMDAwMDQzMjM4MDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Qzk0MDFDNAotOjEwMEI0MDAwNUQ5NDAyNUU5NDAzNUY5NDAwNDMwMDAwMDAwMDAwMDA4NwotOjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QzkwMDE4OAotOjEwMEI4MDAwNUQ5MDAyNUU5MDAzNUY5MDAwNTMwMDAwMDAwMDAwMDA0MwotOjEwMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Qzk0MDAwNQotOjEwMEJDMDAwMUQ5MDAxOUQ5NDAyOUU5NDAzOUY5NDA0MDg5NDA1MDkyRQotOjEwMEJEMDAwOTQwNjBBOTQwNzBCOTQwMDQzMDAwMDAwMDAwMDAwMDBGNAotOjEwMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QzkwMDFDOAotOjEwMEMwMDAwOUQ5MDAyOUU5MDA3MUQ5MDAzOUY5MDA0Nzg5MDA1NzkxNwotOjEwMEMxMDAwOTAwNjdBOTAwNzdCOTAwMDUzMDAwMDAwMDAwMDAwMDBDRgotOjEwMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQzk0MDA0NAotOjEwMEM0MDAwMUQ5MDAxREQ5NDAyREU5NDAzREY5NDA0MDQ5NDA1MDVGNQotOjEwMEM1MDAwOTQwNjA2OTQwNzA3OTQwODA4OTQwOTA5OTQwQTBBOTRDQwotOjEwMEM2MDAwMEIwQjk0MDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQzkwMDEwNwotOjEwMEM4MDAwREQ5MDAyREU5MDBCMUQ5MDAzREY5MDA0QjQ5MDA1QjU1QgotOjEwMEM5MDAwOTAwNkI2OTAwN0I3OTAwOEI4OTAwOUI5OTAwQUJBOTAzNAotOjEwMENBMDAwMEJCQjkwMDA1MzAwMDAwMDYzRkZGQzAwMjAwMDY5MzA4NAotOjEwMENCMDAwMTBGRkZGMEEwMDAwMDAwMDIwMDA2OTU0MDBEMjMxMTAyQwotOjEwMENDMDAwRkZGRTBBMDAwMDAwMDAwMDIwMDA2OTlDMDBEMzMxMTBFNAotOjEwMENEMDAwRkZGRTBBMDAwMDAwMDAwMDIwMDA2OURDMDBENDMxMTA5MwotOjEwMENFMDAwRkZGRTBBMDAwMDAwMDAwMDIwMDA2QTUwMDBENTMxMTAwRAotOjEwMENGMDAwRkZGRTBBMDAwMDAwMDAwMDYzRkZGQzAwRTAwMDAwQTAwRgotOjEwMEQwMDAwMTJGRkY3ODIyMDAyODI1N0M4MjE2M0ZGRkMxMkZGRjMxMwotOjEwMEQxMDAwMDNFODMwMDRFRTMwMDVDMDMwOTMyMDk0MjE5NTIyNjMxRgotOjEwMEQyMDAwRkZGQzAwMDAxRkZGRDAwMDAwMDQwMDIwMUZGRkM1ODA1MwotOjEwMEQzMDAwMUZGRkM2NzAyMDBBMDAxMUZGRkIxM0ZGRkIwM0U2MzEwMwotOjEwMEQ0MDAwMDEwMjAwMTZGRkZBMTdGRkZBRDMwRjc3NkIwNjkwNjBDNwotOjEwMEQ1MDAwQjQ2Njc3NjNGODU0MTUyNjU0MTlEOTBGMTQwMDYzRkY0RAotOjEwMEQ2MDAwRjkwMDAwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA2QzAwOAotOjEwMEQ3MDAwQzcxQUVGMDYwRDQ5MTFEODMwRDcyMDFCRUYwNUJDMjI0QQotOjEwMEQ4MDAwODU3MkFCNzY4MzcxMDU0NTBCOTU3MjA5MzMwQzIzNzYxQQotOjEwMEQ5MDAwMDE3MjNCMDUyMzNEMDgyMzc2MDFBMzlEMTlFRUZFN0REQwotOjEwMERBMDAwNjMyNkMwMjFDMEUwMDMyRTM4MEUwRTQyQzhFRTI5QTZFRAotOjEwMERCMDAwN0U2RDRBMDUwMDgwODgwMDMwOEM4MjcxRDEwRkMwRjBCMgotOjEwMERDMDAwMDgyRjM4N0ZDMEVBNjNGRkU0OTIxMDAzN0YwQ0FCRkY2QgotOjEwMEREMDAwMEYzRDEyREI4MDJFREMxMDBFNEUzNkMwMjFDMDUwMDNCQQotOjEwMERFMDAwMjUzODIyMTIwMDA1MDU0MkNCNTAyOUE2N0U2REVBMDU2MgotOjEwMERGMDAwMDBCMDg4MDAzMDhDQkM3NkMwNTBBOEYzQzA4MTA2ODU1NgotOjEwMEUwMDAwMzgwNTA1NDJDQTUxMjlBNjdFMEQ0ODBDRDMwRjZEOEFCQwotOjEwMEUxMDAwMDUwMDMwODgwMDIwOEM4MjcxRDEwRjAwQzA2MUMwNTA2NQotOjEwMEUyMDAwMDg2NTM4NzVDMEM2NjNGRkMwQzBCMDAzOEIzODdCQzA4RgotOjEwMEUzMDAwRDc2M0ZGRDE2QzEwMTIxNkVFRDgyQTIyMUUyRTIyMUQ2NwotOjEwMEU0MDAwQzBEMDdBRTExQjJDQTAwMEQ3QTAyOENDRTk2NDgxNDg0RgotOjEwMEU1MDAwMjlDQ0U4NjQ5MzQxQzFCOTdCQzEyNTY5Q0MxQjYwMDBGMgotOjEwMEU2MDAwMjIyQ0QwMDBEN0QwMjhDQ0U5NjQ4MTU0MjlDQ0U4NjQ2NgotOjEwMEU3MDAwOTNCQUMxQjk3QkMxMDk2OENDMDlDMDIwRDEwRjAwMDA2OQotOjEwMEU4MDAwMDAyRDI1MDI4QzMyQzA5MDBDNkY1MDY1RjU4NjI5MjQwOAotOjEwMEU5MDAwNjcwOTA4NDc2NTg1ODJCNDQ5MjcyMDBDMThFRUMwMEMwNQotOjEwMEVBMDAwN0YxMUE4RkYyOEYyODZEQjcwNzg5MzAyNjAwNTU0MTk0MQotOjEwMEVCMDAwRUVCQzA5NzkwQTI5OTJBMzY4OTAwODI4MjIwMDA5ODhDMwotOjEwMEVDMDAwMEM2NTg1M0YyOUYyODU2NDk1MzkyOTE2MUE2NTU1NjNBNQotOjEwMEVEMDAwN0FFMTA0REJBMDYwMDAwMUMwQjAyMjE2MUI4REI0MTJDMQotOjEwMEVFMDAwRUVCMTBEODgxNDgyMjQwRDBENDdBODIyMThFRUFGMDkyQgotOjEwMEVGMDAwREQxMDA4MjIwMjkyOTAxOEVFQUQxMkVFQUUwOEM4MDE4NQotOjEwMEYwMDAwMEQ4ODAyMDI0MjAyMURFRUFBOTI5MTBEODgwMjk4OTI2QgotOjEwMEYxMDAwMjJCMDIzMkRCMDIyMDQyODEwMDZERDEwMDI0MjEyMDg1MAotOjEwMEYyMDAwREQwMjI4QjAyMTA3MjIxMDBDODgxMDAyODgwMjBEODhFQgotOjEwMEYzMDAwMDIxMkVFQTE4RDMzMDJERDAxODIzNDBEODgwMjk4OTNGNgotOjEwMEY0MDAwOTJCOTkyOTQ4REI1ODIzOTlEOTU4OEI2OEQzODk4OTZEMAotOjEwMEY1MDAwODhCNzkyOTk5RDk4OTg5N0MwRDAyOEYyODUxMkVFOTdGRAotOjEwMEY2MDAwMDg0ODBCQTI3MjJEMjRDRjI4RjY4NTIyMTIxQjY1NTQ0NwotOjEwMEY3MDAwREU3QUUxMDREQkEwNjAwMDAxQzBCMDY0QkVGQjJDQjBFRgotOjEwMEY4MDAwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODBERQotOjEwMEY5MDAwMDBEQkEwNjVBRkU3NjNGRUUwMkVBMDAzMkIyMDY3RDkzRQotOjEwMEZBMDAwRTBENEUwNjVCMUFCOEIzMjBCRkM1MDY0QzRCMjE4RUVGOAotOjEwMEZCMDAwODQ4RjJBMDhCODAxMDhGRjBDNjRGMkNEQzA5MjYwMDE0QQotOjEwMEZDMDAwOEEyQUQwMDMyOTIwNjdENEEwNjU5NEM5OEIzMjBCRkNGMAotOjEwMEZEMDAwNTA2NEM0OEMxRkVFN0I4RTJBMEZCRjAxN0ZFOURDOEMyRQotOjEwMEZFMDAwMzMwQ0U4NTA2NDg0QjRDMEIwMENBNTExOEY1OTJCMTY5MwotOjEwMEZGMDAwMTI4QTU3OEU1ODJBMTYxMURCRTBBQUZBN0ZBQjAxQjE4QwotOjEwMTAwMDAwRUI3NUNFNTk5RTFGODkzNzk1MUNBRjk4OTgxRDc5OEIyQgotOjEwMTAxMDAwMDgyNTE2MEMyOUVDMDEyOTE2MEY5QTE2OEExRDg1MUYyMgotOjEwMTAyMDAwMkExNjE5MkEwQTAwN0JFMzBBN0JFOTA1MkIxMjA2N0ZBMAotOjEwMTAzMDAwQkIwMUMwQTE2NUE0Njk4QjM1QzBBMEMwODA3OEUzMDQ2MgotOjEwMTA0MDAwNjRFM0I1QzBBMTY1QTQ1ODg5MUMyOTE2MTcwQzRBNTQzRAotOjEwMTA1MDAwMkExNjE2QkNBQTJBMTYxODYwMDBBRjAwMDAwMDg4MzdBRQotOjEwMTA2MDAwODkzNjI4MTYxNDI5MTYxNTA4RjgwQzA5RTkwQzI5MTZEMgotOjEwMTA3MDAwMTM5ODFFNzhGQjA3MjgxMjEzQjA4ODI4MTYxMzg5MUVCMAotOjEwMTA4MDAwOUExODlGMTcyQTEyMTNDMEYwMjkxNjE5N0JFMzBDN0JCQwotOjEwMTA5MDAwRTkwNzhFMTcyQjEyMDg3RUJCMDFDMEYxNjVGNDA2QzA2QwotOjEwMTBBMDAwQjAyRjEyMTk4ODM1MkUxMjEyOTgxOTI4MTIxMUFBRUU5MwotOjEwMTBCMDAwQUY4Rjc4RkIwMjJFRUMwMTlGMTM4RjE5OUYxMkMwRjBBNwotOjEwMTBDMDAwN0JFMzBDN0VCOTA3ODkxMzI4MTIwMjc5OEIwMUMwRjFFQQotOjEwMTBEMDAwNjVGM0QyMjUxNjE3MjkxMjE1MEM0RjU0QzBFMTJGMTZBRgotOjEwMTBFMDAwMTZCQ0ZGMkYxNjE4MDBGMTA0MDBFRTFBMkYxMjE0QjBEMAotOjEwMTBGMDAwRUUwRUY4MTMwOTg4MDEwRkVFMDEyRjEyMTlBOEFBQUVGRgotOjEwMTEwMDAwRkU3RkVCMDFCMUFBRDVBMDJFMTYxOTJCMTIxOURBNTBDOQotOjEwMTExMDAwMkMxMjE4NTgxOEQzQzBEMEMwOTAyRTEyMTkwNzQ4MEFBNAotOjEwMTEyMDAwMkMxMjE4REFCMDhGMzRDMEIxQUFGRjAwQzEwNDJBMTIwMQotOjEwMTEzMDAwMTYyRjg2MTYyQzEyMTcwMEJCMUFCMEJCMEVCRTAxOUVDRQotOjEwMTE0MDAwQzkwQkZCMTMwNUJCMDE5QkM4MkE3NDEwMjkyNDY3MjkwRQotOjEwMTE1MDAwNzAwMzhFNzVCMTlGMkY3NDAzQjBFRTBFNEUwQzY1RURDQgotOjEwMTE2MDAwMTgyODIwNjcyRDI1MDI2NTgzMTMyQTIyMUUyOTIyMUQ5NwotOjEwMTE3MDAwN0E5MTA0REJBMDYwMDAwMUMwQjA2NEJDRkMyQ0IwMDcxNQotOjEwMTE4MDAwMjhCMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBFMwotOjEwMTE5MDAwREJBMDY1QUZFNzYzRkNFMTg5QUFCMTk5NjU5MDk0ODkwQQotOjEwMTFBMDAwMzQxQkVFMDg5OUFBODgzMzFGRUUwMjA4NDg1NDI4QTQ3RAotOjEwMTFCMDAwMkM4RTJBOEMzMjBGRUUwMjBCQ0IwMTdFQjk2NDBDNEJDNQotOjEwMTFDMDAwNTE2RkIyNUU4QjMzNzVCNjU5MkNBMDEzMEJFRTUxMEVENgotOjEwMTFEMDAwQ0UwMTBFMEU0MTBDMEM0MTdFQzk0NzJGQTAxMkIwRkY2QwotOjEwMTFFMDAwNjVGMkREOEUzNzhDQTg4QjM2OEZBOTdDQjMwNzdCQzk1RgotOjEwMTFGMDAwMDI3RUZCMDFDMEQxQ0VEOTg4MzVEREIwMEU4RTA4NzhENQotOjEwMTIwMDAwRUIwMUIxQkQ4OUE3REFDMDBGOUIwODc5QkIwMjJBQ0NEQwotOjEwMTIxMDAwMDFEQ0IwQzBCMDdEQTMwNzdBRDkwMjdDRUIwMUMwQjE3QwotOjEwMTIyMDAwNjRCMTYzQzA5MTI5MjQ2N0MwMjBEMTBGMDA4QkRBQjE2QgotOjEwMTIzMDAwQkI2NEIwQzAyQzIwNjcyRDI1MDI2NUMyMjgxREVERENFMwotOjEwMTI0MDAwOEMzMjFGRURFMTBEQ0QwMTBGREQwQzY1RDFDMTBDNEZDRQotOjEwMTI1MDAwNTE2RkYyMDI2MDAxQjhDMDkwMjkyNDY3MDkwODQ3NjUwMAotOjEwMTI2MDAwODIwRjdBRTEwNERCQTA2MDAwMDFDMEIwNjRCQzBBMkNFQwotOjEwMTI3MDAwQjAwNzI4QjAwMERBMjAwNjg4MEEyODgyNENDMEQxMEJCQgotOjEwMTI4MDAwODAwMERCQTA2NUFGRTc2M0ZCRUY4QzMzMENFOTUwNjRCMwotOjEwMTI5MDAwOTIwOTBDRUYxMUFGQUYyRjE2MTc4RUY4ODVGN0RCRTAzMAotOjEwMTJBMDAwOEZGOTI1MTYxMEE1RjU3RjVCMDIyQkVDMDEwQ0E4NTBEOQotOjEwMTJCMDAwNjU4MEREODgzN0RBRTBBRjg5MjkxNjBBNzg5QjAyMkEzMwotOjEwMTJDMDAwRUMwMTk1MTQ4OTFBRDVBMDI5MTYxOTJBMEEwMDdCRTM4NgotOjEwMTJEMDAwMEE3QkU5MDUyQjEyMDQ3RkJCMDFDMEExNjVBMUMxOEI2QwotOjEwMTJFMDAwMzVDMEEwQzA4MDc4RTMwNDY0RTEwNEMwQTE2NEFENUNCMwotOjEwMTJGMDAwNjAwMUFEMDAwMDhFMzQxOUVEQjM5RURBOEMzMzFCRUQyNgotOjEwMTMwMDAwQUMwQzRDNTQyQ0Q0MkM4QTJBOEMzMjBCQUEwMjA5Qzk1RQotOjEwMTMxMDAwMDEwQTk5MEM2NTlGMEIwQzRGNTE2RUYyMDI2M0ZGMDI5QwotOjEwMTMyMDAwOEIzMzBCQTg1MDY0OEVGQTI5RDAxMzBCRUE1MTBBOUExQQotOjEwMTMzMDAwMDEwQTBBNDEwOTA5NDEwQTk5MEM2NTlFRTUyQkQwMTI2MAotOjEwMTM0MDAwQjBCQjY1QjE4OEMwQTA4RTM3OENEODJCMzIwNjJGRDJBNwotOjEwMTM1MDAwMDk3Q0IzMDc3QkM5MDI3RUZCMDFDMEExNjVBRUMzODhDRgotOjEwMTM2MDAwMzVEM0IwQUU4RTc4RUIwMUIxQjM4OUQ3REFDMEFGOUI3RAotOjEwMTM3MDAwNzlCQjAxQjFDQURDQjBDMEIwNzNBMzA3N0EzOTAyN0M3MwotOjEwMTM4MDAwRUIwMUMwQjE2NUJFOUJDMDkwMjkyNDY3QzAyMEQxMEY3RQotOjEwMTM5MDAwMDA4QTM2ODgzNzJBMTYxNTI4MTYxNDBBRUEwQzA4RjgyNwotOjEwMTNBMDAwMEM5ODFCNzhGQjAxQjBBQTlGMTU4RjFCMkYxNjE5MkZDNQotOjEwMTNCMDAwMEEwMDdCRTMwQTdCRTkwNTI4MTIwNTc4NUIwMUMwRjE4RQotOjEwMTNDMDAwNjVGMEUyQUFERThCMzUyRjEyMTkyOTEyMTBDMDUwQUYzQQotOjEwMTNEMDAwOUY3OUZCMDFCMUVFOUYxMUMwRjA3NUUzMEE3RTU5MDVCQwotOjEwMTNFMDAwMjgxMjAxNzhCQjAxQzBGMTY0RkNFQTYwMDBCNzAwMDA3QwotOjEwMTNGMDAwN0ZCMzAyNjNGRUY2NjNGRUYxN0ZCMzAyNjNGQzQ1NjNENQotOjEwMTQwMDAwRkM0MDAwMDA2NDUwQTREQTIwNTgxNUM4QzAyMEQxMEY1OQotOjEwMTQxMDAwQzA5MTYzRkU0M0MwOTE2M0ZBNzNEQTIwREI3MEMwRDFFMAotOjEwMTQyMDAwMkUwQTgwQzA5QTI5MjQ2ODJDNzAwNzU4MTRCOEQyQTBCQwotOjEwMTQzMDAwRDEwRjAwMDAxOUVENjYwMzQ4MEI5ODEwMDg4QjAyMDlDNAotOjEwMTQ0MDAwMjkwODc5ODMwMjJCOERGODI5MTIxQTYzRkE4QjAwMDA4MAotOjEwMTQ1MDAwMkEyQzc0REI0MDU4MEU0NDJFMjIxRDJBMjIxRTYzRkJDOAotOjEwMTQ2MDAwMEZDMDkxNjNGQ0U1MDIyQTAyNTgwMjRDMEFBMjAyMDY1MAotOjEwMTQ3MDAwMDAwMDAyMkEwMjU4MDI0OTBBQTIwMjA2MDAwMERCNzA5QwotOjEwMTQ4MDAwREEyMEMwRDEyRTBBODBDMENFMkMyNDY4MkM3MDA3NThEOAotOjEwMTQ5MDAwMTQ5RkMwMjBEMTBGRDlBMDYzRkNCNjAwQzA5NDYzRkM5OAotOjEwMTRBMDAwQUFDMDk2NjNGQ0E1QzA5NjYzRkNBMDAwMkEyQzc0REIzRQotOjEwMTRCMDAwMzBEQzQwNUJGRTJFQzJEMDJEQTQwMDJCMjAwQzYzRkYzRAotOjEwMTRDMDAwNDU4RjM1OEVBNzdGRUIwMjYzRkVCQjYzRkQ1NDg5MzVFNAotOjEwMTREMDAwODhENzc5OEIwMjYzRkVBRTYzRkQ0NzAwNkMxMDA0QzBCMQotOjEwMTRFMDAwMjBEMTBGMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0MkIxMQotOjEwMTRGMDAwMjIxRTI4MjIxREMwQTBDMDk0MjkyNDA2MkEyNTAyN0I3MgotOjEwMTUwMDAwODkwMURCQTBDOUI5MTNFRDI0REEyMDI4QjAwMDJDQjA4MgotOjEwMTUxMDAwMDcwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUY4RQotOjEwMTUyMDAwRTdDMDIwRDEwRjAwMDAwMDZDMTAwNjAyMjYwMjI5MjAxRgotOjEwMTUzMDAwMDZDMEUwNjg5ODA1Mjg5Q0Y5NjU4MTIwMkE2MTAyMTc5OQotOjEwMTU0MDAwRUQxNzBBMEE0QzY1QTBGMDJCNzI5RTFBRUQxMzZGQjhDNgotOjEwMTU1MDAwMDI2MDAwRjQyQUEyMjY2OEEwMDk4QjYwRDMwRjBBQkJBMAotOjEwMTU2MDAwMEM2NUIwRTQyQTcyOUQ2NEEwREUyQjYwMEMwQ0JDMTFFQgotOjEwMTU3MDAwMDdDQzA4MkRDMjg2NkZEOTAyNjAwMEQ3MURFRDA5MEQ3QQotOjEwMTU4MDAwQkQwQTJERDJBMzY4RDAwNzhGNjAwREZGMEM2NUYwQzM5NAotOjEwMTU5MDAwMjJDMjg1QzBGMDY0MjBCQjFERUQwRTY4NDM0RDE4RURERQotOjEwMTVBMDAwMEQ4QzZCMDhDQzAyOUMyMDhBNjAwOEFBMTEwREFBMDIzRgotOjEwMTVCMDAwOUEyMTg5NkE5OTI0ODgzMjk4MjUyQzYxMDQwOENDMTFEMwotOjEwMTVDMDAwOUMyNzFDRUNGRTBDQkExMUE3QUEyOUEyODVBQ0JDMkY0MwotOjEwMTVEMDAwQzRDRjI5OUMyODI5QTY4NUM4NUEyQTZDNzREQjQwNTg5OAotOjEwMTVFMDAwMERFMkQyQTBEMTBGRDJFMEQxMEYwMDAwMjg5Q0Y5NjQwNwotOjEwMTVGMDAwODA5MTJDNjA2Njg5MzFCMUNDMEMwQzQ3MkM2NDY2NkZFRAotOjEwMTYwMDAwQzY2OTcwOUU2NjFBRUNGNDhDMzA4OTZCMEM4QzQwMEJBQQotOjEwMTYxMDAwQ0MxMDBDOTkwMjBBOTkwMjk5MjA4ODYwMDg4ODExMEQ1MwotOjEwMTYyMDAwODgwMjk4MjE4QzMzOUMyMzhBMzI5QTIyODk2QTk5MjREMQotOjEwMTYzMDAwODgzNDk4MjU2M0ZGODIwMDAwQ0M1N0RBNjBEQjMwREMwOQotOjEwMTY0MDAwNDA1ODE0QTdDMDIwRDEwRjAwREE2MEMwQjY1ODE1MzczMwotOjEwMTY1MDAwNjNGRkU1MDBEQTYwNTgxNTM1NjNGRkRDMDBEQTIwREI1NAotOjEwMTY2MDAwMzBEQzQwREQ1MDU4MTVCN0QyQTBEMTBGOUUxMDJCNjE1MQotOjEwMTY3MDAwMDQ1ODEzQzgxREVDRDc4RTEwMkI2MDBDQzBGMDJGNjREQgotOjEwMTY4MDAwNjY2M0ZGODAyOTYxMjNDMDg4Nzk4MzAyNjNGRjc1MkUxQQotOjEwMTY5MDAwMTYwMDJDNjA2NjJCNjEwNDJDQ0MwMTBDMEM0NzJDNjRDQQotOjEwMTZBMDAwNjY1ODEzQkMxREVDQ0I4RTEwMkI2MDBDQzBGMDJGNjQ2MQotOjEwMTZCMDAwNjY2M0ZGNTA2QzEwMDRDMEI3QzBBMTE2RUNDODE1RUNFRgotOjEwMTZDMDAwQkFENzIwRDg0MEI4MjJDMDQwMDUzNTAyOTY3MTk1NzAyRgotOjEwMTZEMDAwMDJBNDM4MDQwNDQyQzk0QjFBRUNBRDE5RUNBRTI5QTY5OQotOjEwMTZFMDAwN0VDMTQwRDMwRjZENEEwNTAwODA4ODAwMjA4QzIyMEFGRAotOjEwMTZGMDAwODhBMjcyRDEwRkMwNTAwOEE1Mzg3NUIwRTM2M0ZGRDczOAotOjEwMTcwMDAwNkMxMDA4OTMxNDk0MTIyOTIwMDY2NTUyNzBDMDcxNjhGOQotOjEwMTcxMDAwOTgwNTJBOUNGOTY1QTI4MDE2RUNBMTI5MjEwMjhBMTQ1OQotOjEwMTcyMDAwMDkwOTRDNjU5MEM3OEFBMDBBNkE1MTJBQUNGRDY1QTBEOAotOjEwMTczMDAwQkNDQzVGREIzMERBMjA4QzEyNTgxNDY5QzA1MTlBMTQ4QgotOjEwMTc0MDAwQzdCRjlCQTk4RTE0MkVFMjA5NjhFMDYwMkY2MjlFMUQyMAotOjEwMTc1MDAwRUM5MjZGRjgwMjYwMDA4MTJERDIyNjY4RDAwNTJGMjIwRQotOjEwMTc2MDAwMDA3REY5NzUyQzYyOURDNzkwNjRDMDZEOUMxMThBMTQzMAotOjEwMTc3MDAwMkIyMDBDMkFBMDIwMENCRDExQTZERDBBNEYxNEJGQThGNwotOjEwMTc4MDAwMDk4ODAxMjlEMjg2QUY4ODI4OEMwOTc5OEI1NTFGRUNFRQotOjEwMTc5MDAwODQwRkJGMEEyRkYyQTM2OEYwMDUyODIyMDA3Rjg5NDMzNwotOjEwMTdBMDAwMjlEMjg1RDQ5MDY1OTA3NzYwMDAzRDAwMDAyQjIwMENGNQotOjEwMTdCMDAwMUZFQzdDMENCRDExQTZERDI5RDI4NjBGQkYwQTZFOTZFOAotOjEwMTdDMDAwMTAyRkYyQTM2OEYwMDQ4ODIwN0Y4OTA1MjlEMjg1NjU0RgotOjEwMTdEMDAwOTE1NURBMjA1ODE0RDU2MDAwMTNEQTIwQzBCNjU4MTQ5OQotOjEwMTdFMDAwRDM2MDAwMDlDMDkwNjNGRkI5REEyMDU4MTREMDg5MTQ3RgotOjEwMTdGMDAwODk5MTA5RkU1MDY1NTFDQzhDMTI4RDE0REEyMERCRDAxMgotOjEwMTgwMDAwOEREMDlFMTAwRDZENTE1ODEzNDE5QTE0NjRBMUYwQzdFQwotOjEwMTgxMDAwNUY4RkExOTVBOUMwNTEwRjBGNDc5RjEyNjNGRUZCMDA3OAotOjEwMTgyMDAwQzA5MUMwRjEyODIwMDYyQzIwNjYyODhDRjlBN0NDMEM4QQotOjEwMTgzMDAwMEM0NzJDMjQ2NjZGQzYwODhEMTQ4REQxNzBERTAxQzA1NAotOjEwMTg0MDAwOTBERDkwNjQ4MTQxQzlEMjhBMTEyQjIxMDQ1ODEzNTEzMwotOjEwMTg1MDAwOEExNEMwQjAyQjI0NjY4RUE5MkFBMDIwQzE3MDFDRUM2QgotOjEwMTg2MDAwNUIwRTI4MTQxNUVDNTA4RTE0ODU1NkFDMkM5QzEzMkU1MAotOjEwMTg3MDAwRUMyOEE4NTVEREUwN0NFMzAyMkRFREY4RDNEMDBBNzcwMwotOjEwMTg4MDAwMzZEQTQwREI1MERDMzA1QkZGOEJENEEwMkUyMDBDQjQ2QQotOjEwMTg5MDAwNTUyOTBBODhDMEMwMUJFQzQ5MENFRjExQTZGRjI4RjI5RAotOjEwMThBMDAwODVBQkVFMkNFNENGQTk4ODI4RjY4NTI5MEE4MDg4MTMxOQotOjEwMThCMDAwQTkzM0REMzA4OTE0NzgzMzAyMkQzREY4Mjg5MDIwRDNFOAotOjEwMThDMDAwRDAwNzg4MENDMTcwMDgwODQ3Mjg5NDIwMDg3NzM2NjUyRgotOjEwMThEMDAwN0ZBRTg5MTQxM0VDNDM4OTkwQzBENDc3OTczRDE4RUMwMAotOjEwMThFMDAwNDFDMUJBMjcyMTA0ODUxNDA5OUM0MDA2Q0MxMTg2NTNCNgotOjEwMThGMDAwMDQ3NzExODU1MjBDNzcwMjBCNzcwMkMwQzA5OEEwOUQyNwotOjEwMTkwMDAwQTE4RDJCOUNBNTk3QTQ5NkE3OTVBNjAzREQwMjlEQTI2OQotOjEwMTkxMDAwMkJGMjg1MkNFNENGMkJCQzIwMkJGNjg1MkEyQzc0OEI0NAotOjEwMTkyMDAwMTI1ODBEMTFEMkEwRDEwRjI4MjAzREMwRTA3Qzg3NzczRQotOjEwMTkzMDAwMkUyNDY3MEUwQTQ3NjVBMDczMThFQzJCOEYyMDFDRUMzMQotOjEwMTk0MDAwMTk4RTE0OENDNDhFRTQwOEZGMTEwOEZGMDIwRThFMTQ0OQotOjEwMTk1MDAwQUVDQzFFRUMyNjlGOTEwRUNDMDI5QzkwQzA4MDFFRUM1QgotOjEwMTk2MDAwMjQyQzIxMDIxQUVDMTYyRkQyODVBQUJBQjhGRjJGRDY0MgotOjEwMTk3MDAwODUwRUNDMDIyOEE0Q0YyQzI1MDJDMDIwRDEwRjg3MTRCRAotOjEwMTk4MDAwODc3MDA3MDc0NzYzRkQ4NjI4MjEyM0MwOTk3OThCMDI1QQotOjEwMTk5MDAwNjNGRUIyRERGMDYzRkVBRDAwREEyMERCMzA4QzEyREREOQotOjEwMTlBMDAwNTA1ODE0RThEMkEwRDEwRkMwRTE2M0ZGODI4QjE0OEM5MQotOjEwMTlCMDAwMTJERDUwQzBBQTJFMEE4MDJBMjQ2OERBMjA1ODEzNTM1OAotOjEwMTlDMDAwRDJBMEQxMEYwMDcwOTY1NTJCNjI5RTZFQjg1MzFERUJCRQotOjEwMTlEMDAwRjIyREQyMjY2OEQwMDQ4RTIwN0RFOTQ1MkE2MjlEQ0I2NwotOjEwMTlFMDAwQUYyQjIxMDQyQzIwNjY1ODEyRUJDMDkwMjkyNDY2ODI2QwotOjEwMTlGMDAwMTQxOEVDMDA4RjIxMDhGRjAxOUYyMUMwMjBEMTBGMDA5NwotOjEwMUEwMDAwOEIxMEM5Qjg4Q0EwMEM2QzUxQ0NDQzhFMjQxRkVCRUU4MwotOjEwMUExMDAwOERFMTlFMTQwRkREMDI5REUxODgxMDY1OEZBOUMwMjAyNQotOjEwMUEyMDAwRDEwRkRBMjBDMEI2NTgxNDQxQzAyMEQxMEYwMDAwMDBGOQotOjEwMUEzMDAwNkMxMDA2QzBEMDJBMjEwMjk0MTE3NUE3MEU4OTM0N0YzQwotOjEwMUE0MDAwOTcwOThCMzU3RkJGMDQyRDI1MDJEQUQwMEEwQzRDNjUyRgotOjEwMUE1MDAwQzE3QjE2RUJEMjFGRUJEMDI4NjI5RUMwRUE3OEUzMDI2RQotOjEwMUE2MDAwNjAwMTgxMjlGMjI2Njg5MDA3OEEyMDA5QUEwQzY1QTFFNQotOjEwMUE3MDAwNzMyQTYyOURERUEwNjRBMTcwMkIyMDBDQzA3MDBDQkM4OAotOjEwMUE4MDAwMTEwNkNDMDgyOUMyODYyODBBMEM3OTgzMDI2MDAxNEMxMQotOjEwMUE5MDAwMTlFQkM0MDlCOTBBMjk5MkEzNjg5MDA3ODgyMDA5ODgxQwotOjEwMUFBMDAwMEM2NTgxMzgyNEMyODUxQ0VCQzY2NDQxMkY4OTMxMDkzRAotOjEwMUFCMDAwOEIxNDBDQkIwMTZGQjExRDJDMjA2NjlFMTBCMUNDMEM5OQotOjEwMUFDMDAwMEM0NzJDMjQ2NjZFQzYwMjYwMDEzNDA5RkU1MDY1RTFBNQotOjEwMUFEMDAwMkU4QTEwMkFBQzE4ODkzNEMwRTQ3Rjk3MzYxN0VCQzdEQQotOjEwMUFFMDAwQzA4MjFCRUJDNThDMzU5RTQxOUI0MDhCMjA5ODQ1OUQ0OQotOjEwMUFGMDAwNDQxOEVCQzMwN0JCMDI5QjQyMEMwNzQwMEY3NzExOThCOQotOjEwMUIwMDAwNDM5NzQ3RDdFMDdGQzcwQjJDMjEwMjI4NEEwMDA4Q0MxNwotOjEwMUIxMDAwMDIyQzI1MDI3RTk3MDQ4QjM2MkIyNTIyN0Q5NzA0OEM4MAotOjEwMUIyMDAwMzcyQzI1MjE3Qzk3M0EwQUFCMDIyQzBBMDFDMDgwMEE4NwotOjEwMUIzMDAwQzgzODJBM0MyMDA4MDg0MjY0ODA4MjFDRUI5NDE5RUJDOAotOjEwMUI0MDAwOTUyOUM2N0UwMEEwODgwMEIwOEMwMEEwODgwMEIwOENDQgotOjEwMUI1MDAwMDBBMDg4MDBCMDhDMjg2MjlEMkRGNEEyMjg4QzE4Mjg0MwotOjEwMUI2MDAwNjY5RDg5MzA3Nzk3MzUxRkVCOUY4QzMzODgzMjA0N0JENQotOjEwMUI3MDAwMEIyQTIxMDRCNDc3MDRBQTExOUVCMTlGQjA4RjJCOUQyQwotOjEwMUI4MDAwQjU5OEI2OUNCNzE4RUI5NjA5OUM0MDA2Q0MxMTBDQUFFOAotOjEwMUI5MDAwMDIwOEZGMDI5RkIyQzFDQzBDQUEwMjlBQjRDOTc3MkFFQwotOjEwMUJBMDAwMjAwQzFCRUI4NjBDQTkxMUE2OTkyODkyODVBQkFBMkRCNwotOjEwMUJCMDAwQTRDRjA4NzgwQjI4OTY4NUNGNThDMDIwRDEwRkMwODdCNgotOjEwMUJDMDAwQzA5MDBBQzkzODc5ODgwMjYzRkY3ODYzRkY2Q0NDNTdFQwotOjEwMUJEMDAwREEyMERCMzA4QzExNTgxMzQyQzAyMEQxMEZEQTIwNThBNAotOjEwMUJFMDAwMTNEMzYzRkZFOEMwQTA2M0ZFODlEQTIwQzBCNjU4MTNBMAotOjEwMUJGMDAwQ0Y2M0ZGRDkyQTJDNzQ4QjExNTgwQzVCRDJBMEQxMEY2NAotOjEwMUMwMDAwOEExMDJCMjEwNDU4MTI2MzFGRUI2NEMwRDAyRDI0NjY2OAotOjEwMUMxMDAwNjNGRUJEMDA2QzEwMDZENjIwMTlFQjVGMUVFQjYxMjgzOQotOjEwMUMyMDAwNjEwMjE3RUI1RTA4MDg0QzY1ODA1RjhBMzAwQTZBNTFEMgotOjEwMUMzMDAwNjlBMzU3MkI3MjlFNkVCODNGMkE5MjI2NjhBMDA0OEMyNwotOjEwMUM0MDAwNjA3QUM5MzQyQTcyOUQyQzRDRkVDQUFCMkI2MDBDQjY0QwotOjEwMUM1MDAwNEYwQ0JEMTFBN0REMjhEMjg2MEVCRTBBNzhGQjI2OUM0QwotOjEwMUM2MDAwMTEyRUUyQTMyQzE2MDA2OEUwMDUyRjYyMDA3RUY5MTUwNAotOjEwMUM3MDAwMjJEMjg1Q0YyNTYwMDAwRDAwREE2MEMwQjY1ODEzQUJDNAotOjEwMUM4MDAwQzg1QTYwMDEwRjAwREE2MDU4MTNBODY1NTEwNkRDNDA5RAotOjEwMUM5MDAwREIzMDhEMzBEQTYwMEQ2RDUxNTgxMjFDRDNBMDY0QTA3QQotOjEwMUNBMDAwRjM4NEExQzA1MTA0MDQ0NzYzRkY2RDAwQzBCMDJDNjBGMQotOjEwMUNCMDAwNjY4OTMxQjFDQzBDMEM0NzJDNjQ2NjZGQzYwMjcwOTZGNQotOjEwMUNDMDAwMEEyQjYxMDQ1ODEyMzNDMEIwMkI2NDY2NjU1MEI0MkFFNQotOjEwMUNEMDAwM0MxMEMwRTdEQzIwQzBEMUMwRjAwMkRGMzgwRjBGNDI1QgotOjEwMUNFMDAwNjRGMDkwMTlFQjJBMThFQjJCMjg5NjdFOEQxMDZEREE5NAotOjEwMUNGMDAwMDUwMEEwODgwMEMwOENDMEEwODkzMDFERUIzQTc3OTcwMgotOjEwMUQwMDAwNTM4ODMyOEMxMDhGMzMwMkNFMEJDMDI0OTJFMTIyNjFCMwotOjEwMUQxMDAwMDQ5REUwMDQyMjExOEQ2QjlCRTU5RkU3OThFNjFGRUI4NQotOjEwMUQyMDAwMzAwOTk4NDAwNjg4MTEwODIyMDIwRkREMDJDMThEOURGRQotOjEwMUQzMDAwRTIwODIyMDI5MkU0QjRDMjJFNjAwQzFGRUIyMDBDRThGMQotOjEwMUQ0MDAwMTFBNzg4MkM4Mjg1QUZFRTBDMjIwQjJCRTRDRjIyODZDNAotOjEwMUQ1MDAwODVEMkEwRDEwRjI4NjAwQ0QyQTA4QzExMTlFQjE4MENFMQotOjEwMUQ2MDAwOEQxMUE3REQyRUQyODVBOTg4MkI4NENGMEVDQzBCMkMwQwotOjEwMUQ3MDAwRDY4NUQxMEZDMEYwMEFERjM4N0ZFODAyNjNGRjZDNjNCRAotOjEwMUQ4MDAwRkY2MDAwMDAyQTZDNzRDMEIyREMyMERENDA1ODEyMTFFNAotOjEwMUQ5MDAwQzBCMDYzRkY2M0MwMjBEMTBGMDAwMDAwNkMxMDA0MkNBMgotOjEwMURBMDAwMjIxRDJBMjIxRUMwNDlEMzIwMjkzMDA2MjQzNDY4QzBBRgotOjEwMURCMDAwNDA3QUMxMDVEREEwNjAwMDAyMDBDMEQwNkU5NzM4QzAzNwotOjEwMURDMDAwOEYyRTBBODAyQjMwMTRDMDk2MjkzNDA2MEVCQjAyMkVBQgotOjEwMUREMDAwMzEwMjJCMzQxNDdFODAwNDI0MzUwMkRFNDA3QUMxMEU5OQotOjEwMURFMDAwQzhBQkRCRDBEQTMwMkMwQTAwNTgwQTc5MkUzMTAyMEU0QgotOjEwMURGMDAwMEY0Q0M4RkVDMDIwRDEwRjY4OTVGODI4MzEwMjA4MDhBMgotOjEwMUUwMDAwNEM2NThGRUYxQUVBRTYxQ0VBRTQyQkEyOUVDMDlBN0I4RgotOjEwMUUxMDAwOUI0NjJCQzIyNjY4QjAwNDhEMzA3QkQ5M0IyOUEyOURGRQotOjEwMUUyMDAwQzBFM0NCOTM5NDkwMUJFQUY3MkQzMTA0OUI5NjA4REQxOQotOjEwMUUzMDAwMTEwRUREMDI5RDk3OUQ5MTI0QzRBMjEyRUFGMzJGMzE2OQotOjEwMUU0MDAwMDIyOEEyOURDMEU1MkUzNDA2Mjg4QzMwMjhBNjlEMDJDQgotOjEwMUU1MDAwRkYwMjJGMzUwMkMwMjBEMTBGREEzMEMwQjY1ODEzMzMzRAotOjEwMUU2MDAwQzAyMEQxMEY2QzEwMDYyQTIwMDY5NDExNjhBODA1MjhGRQotOjEwMUU3MDAwQUNGOTY1ODI0RjI5MjEwMjA5MDk0QzY1OTIwNkNDNUZCNQotOjEwMUU4MDAwREIzMERBMjA4QzExNTgxMjk2QzA1MUQzQTBDN0FGOUExQwotOjEwMUU5MDAwM0FDMEUwMTlFQUMzMURFQUM5MUFFQUMyOEYzQTE2RUE0MwotOjEwMUVBMDAwQkZCMUZCNjRCMTM1MkM2MjlFNkZDODAyNjAwMUU5MjdBNwotOjEwMUVCMDAwREMzMzI3NzIyNjY4NzAwNzg4MjAwNzg4MEM2NTgxRDg3NAotOjEwMUVDMDAwMjQ2MjlEQzA3NjY0NDFEMDJCMjAwQzBDQkMxMUE2Q0NBMgotOjEwMUVEMDAwMjhDMjg2QzA5RTc4OTMwMjYwMDFDODE5RUFCMTA5Qjk4OAotOjEwMUVFMDAwMEEyOTkyQTM5NDEwNjg5MDA3ODgyMDA5ODgwQzY1ODFCQwotOjEwMUVGMDAwQjIyNEMyODU2NDQxQUMyOTIwMDYyOTlDRjk2NDkxREY5MwotOjEwMUYwMDAwMkMyMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI5RAotOjEwMUYxMDAwNjAwMTk4MDlGODUwNjU4MTkyMUFFQUEzOEMzNjE5RUE5MwotOjEwMUYyMDAwQTEwQzg4MTQ4OTk0MEMwQzQ3MDlDQzEwQTg5OTBBOTkyMwotOjEwMUYzMDAwMDIxOEVBQjYyQTIxMDQ5OTQwOTg0MTg4MkExOUVBQjQ3RAotOjEwMUY0MDAwMEM4ODAyMDk4ODAyOTg0MjI4MzAyQzJDMzAxMzI5MzA0MgotOjEwMUY1MDAwMTIwNENDMTAwNjk5MTAwQzg4MTA5RjQ0MDhBODAyMEM5QgotOjEwMUY2MDAwOTkwMjA5ODgwMjk4NDM4RjM3OUY0NThDMzg5QzQ2ODk4RgotOjEwMUY3MDAwMzlDMEYxOTk0NzE5RUFBNzg4MzU5RjRCOTg0ODA4ODhENgotOjEwMUY4MDAwMTQwOTg4MDI5ODRBOEYzMDE4RUE5Nzc3RjczMkMwNzQ5QwotOjEwMUY5MDAwODkzMjhDMzM5ODRDOTc0RDBGOTc0MDg4MkIyRTQ2MTFFMQotOjEwMUZBMDAwMDY3NzExMkM0NjEzMjk0NjEyMDRBQzExMTlFQThEMDc0NQotOjEwMUZCMDAwQ0MwMkMxNzkwOTg4MDI5ODRFMDdDQzAyMkM0NjEwQzA4OQotOjEwMUZDMDAwN0FBREJDMENCQTExQTZBQTI5QTI4NTJFQzRDRjA5Nzk3NAotOjEwMUZEMDAwMEIyOUE2ODU2NTUwRkNDMDIwRDEwRjAwMkIyMDBDMENDRQotOjEwMUZFMDAwQkMxMTA2Q0MwODJGQzI4NjA5QjkwQTZGRjkwMjYwMDEzQwotOjEwMUZGMDAwMUUyOTkyQTM2ODkwMDgyRjIyMDAwOUZGMEM2NUYxMEY5QgotOjEwMjAwMDAwMkZDMjg1NjRGMTA5MjgyMDNEMDgyODQwNjQ4MDg0ODQxQgotOjEwMjAxMDAwMzUwNDg0MTQ2NDQwN0M4NUE1NzQ1Mzc3ODQzNjA0ODQyNQotOjEwMjAyMDAwMTQ2NDQwNkY3NDUzNkMyOTMwMTNDMDhDNzk4ODY0QzA3OQotOjEwMjAzMDAwOTAyOTI0NjcwOTA4NDc2NTgwREQ4ODIwODlBNDg0MzVCNAotOjEwMjA0MDAwMUFFQTZCMDQ4NDE0QTQ5NDBBNDQwMjk0RjAxNEVBNjYxNQotOjEwMjA1MDAwMDg4ODExMDQ4ODAyOThGMTg0MzY5OEYzMDQ4NDE0QTQ0MwotOjEwMjA2MDAwOTkwQTk5MDI5OUYyMUFFQTYyMjkyMTAyMjRDMjg1QURERAotOjEwMjA3MDAwQjgyRTg0Q0YyNDRDMTAyNEM2ODUwQTk5MDIyOTI1MDI0MwotOjEwMjA4MDAwQzAyMEQxMEYwMENDNTdEQTIwREIzMDhDMTE1ODEyMTQ0RAotOjEwMjA5MDAwQzAyMEQxMEZDMDkxNjNGRjk3REEyMEMwQjY1ODEyQTNCOQotOjEwMjBBMDAwNjNGRkUxMDBEQTIwNTgxMkExNjNGRkQ4OEExMDJCMjFDOAotOjEwMjBCMDAwMDQ1ODExMzgxREVBNDIyQjIwMENDMEUwMkUyNDY2OEZGNAotOjEwMjBDMDAwM0E2M0ZFNTQwMERBMjBEQjMwREM0MERENTA1ODEzMUQ0QgotOjEwMjBEMDAwRDJBMEQxMEYyQTJDNzQ4QjExNTgwQjIzRDJBMEQxMEY3MAotOjEwMjBFMDAwMjkyMTIzQzA4ODc5ODMwMjYzRkUyRDJBMTIwMDJDMjAyNwotOjEwMjBGMDAwNjYyQjIxMDQyQ0NDMDEwQzBDNDcyQzI0NjY1ODExMjU4RQotOjEwMjEwMDAwMURFQTJGMkIyMDBDQzBFMDJFMjQ2NjhGM0E2M0ZFMDhCOAotOjEwMjExMDAwREEyMDU4MTI4NjYzRkY2Q0RBMjA1QkZGMjBEMkEwRDE1MAotOjEwMjEyMDAwMEYwMDAwMDA2QzEwMEE5NTE2QzA2MUMxQjBEOTQwMkE5QQotOjEwMjEzMDAwMjAzREMwNDAwQkFBMDEwQTY0MzgyQTIwMDYyOTE2MDc1MAotOjEwMjE0MDAwNjhBODA1MkNBQ0Y5NjVDMzNCMURFQTE2Qzg0NDJGMTJEQwotOjEwMjE1MDAwMDY2NEYyOUIyNjIxMDIxRUVBMTI5NjE0MDYwNjRDNjVCRQotOjEwMjE2MDAwNjJERTE1RUEwRTY0NDBDRjhBMzUyOTMwMDM5QTE1MEFEQgotOjEwMjE3MDAwOTkwQzY0OTBDMjJDMjAwQzhCMTU5QzEyMENDQzExQTVEMAotOjEwMjE4MDAwQ0M5QzEzMkNDMjg2QjRCQjdDQjMwMjYwMDJDRThGMTJFRgotOjEwMjE5MDAwMEVGRTBBMkVFMkEzNjhFMDA4MjYyMjAwMEU2NjBDNjVGOQotOjEwMjFBMDAwNjJCQTg4MTMyODgyODU2NDgyQjI4OTE1NjQ5MDVFREFFNwotOjEwMjFCMDAwODBEOTMwOEMyMDFFRUEwQzFGRUEwRDFERTlGQThCMTUyMAotOjEwMjFDMDAwOERENEQ0QjA3RkI3MThCODhBMjkzQzEwODUzNjA4QzY5QwotOjEwMjFEMDAwMTEwRTY2MDI5NjgxMDU4NTE0QTVENTBGNTUwMjk1ODBDRQotOjEwMjFFMDAwMDQxODE0NkQ4OTI3ODg5NjA4Q0IxMTA4ODgxNDBFQkIzMwotOjEwMjFGMDAwMDJBOEQ4Mjk5QzIwMEY4ODAyOUJBMTk4QTA4ODkyOUJCNgotOjEwMjIwMDAwQTMwODg4MTRBOEQ4MEY4ODAyOThBMjJBQUMxMEMwRDBCRQotOjEwMjIxMDAwOEExNTFGRTlFQThFMTIxOUU5RjY4QjEzODgxNDJDQjI3RAotOjEwMjIyMDAwODUwOTg4MDJBRkVFMENBQTBCMkRFNENGMkFCNjg1MjhDQgotOjEwMjIzMDAwMjUwMkMwMjBEMTBGMDAwMDI2NTI5RTE4RTlENzZGNjhGMgotOjEwMjI0MDAwMDI2MDAyMEQyODgyMjY2ODgwMDk4OTIwRDMwRjA4OTkzMAotOjEwMjI1MDAwMEM2NTkxRkQyQTUyOURDMEZEOUExMTY0QTFGMzJCMjBCQgotOjEwMjI2MDAwMENDMUNBMENCODExMDU4ODA4MkQ4Mjg2MEVCRTBBN0RFNQotOjEwMjI3MDAwQzMwMjYwMDIwQTJFRTJBMzY4RTAwODI2MjIwMDBFNjY2RQotOjEwMjI4MDAwMEM2NTYxRkIyODgyODVERTgwNjQ4MjA3MjkyMDA2OTgyMAotOjEwMjI5MDAwMTAyOTlDRjk2NDkyMDQyQzIwNjY4ODMxQjFDQzBDMEM3NgotOjEwMjJBMDAwNDcyQzI0NjY2RUM2MDI2MDAxQkQwOEZENTA2NUQxQjc5QgotOjEwMjJCMDAwMTdFOURBMUNFOUJEMTlFOUM0MkEyMTA0OEIyRDI4MzA1RAotOjEwMjJDMDAwMTAyRDIxMUQwQzg4MTAwQkRCMDkwQTg4MDIwOTg4MDJEOQotOjEwMjJEMDAwMENCQjAyNjQ0MTU1ODkxMDlCOTA5NzkxOTg5Mjg0MzU2QwotOjEwMjJFMDAwRDlFMDY0NDA2RkQ3MzBEQjQwRDgzMDdGNDcxNTI3M0NCQQotOjEwMjJGMDAwMTBCQ0U5MjYzMjE2OEMzOTk2RTY5Q0U3OEEzNzI4M0NEMgotOjEwMjMwMDAwMDQyQUU2MDgwQjEzMTQ2NDMwNEEyQTgyMTY4Njc5OUE0NgotOjEwMjMxMDAwOTY5Njk3OEM3NzhBN0Q5Qzk4MkI4MjE3MkM3QzIwOUE5NgotOjEwMjMyMDAwOUEyQTlDMTg5Qjk5ODY3QkIwM0IyOThDMDg2REI5MjExMQotOjEwMjMzMDAwOEJDOTk2QTUyNjkyMTYyQUFDMThCODk5OUJBMTk2QTA4RgotOjEwMjM0MDAwOEJDNzg2Q0Q5QkEyMkI5MjE1OTZBNDlCQTM4NkNCMkNFNAotOjEwMjM1MDAwQ0MyMDI2QTYwNUMwMzQ2QjQ0MjAwNDNCMEMwNDQ4MDk1RAotOjEwMjM2MDAwMEU4ODBBN0ZCNzA1QzA5MDk5ODhCQzg4QzA5MDBCMUE2OAotOjEwMjM3MDAwMTI2REFBMDY5OTg4OTk4QjI4OEMxODFDRTlBODFCRTk2QwotOjEwMjM4MDAwQTgxNkU5OURCMUREMkEyMTFDMjNFNjEzMEQwRDRGMjY2OQotOjEwMjM5MDAwRTYxMjJEMjUxREMwNjA4NzIwN0RBOTA3QzBEMDI4MEEyMAotOjEwMjNBMDAwMDAyODI1MUQyNkU2MTcyQ0U2MTYyQkU2MTUwNUQ4MTE2NAotOjEwMjNCMDAwMUFFOTkzMjhFNjE4MEE3QTAyMkFFNjE0MjkyMDA2MjkzRgotOjEwMjNDMDAwOUNGOTY0OTEwNjJBMjAwQ0MwOTAxQkU5N0MwQ0FEMTE4RAotOjEwMjNEMDAwQTVERDJDRDI4NUFCQUFDMEIwMjlBNENGMENGQzBCMkM1OAotOjEwMjNFMDAwRDY4NURBMjA4QzE3MkQxMjA2NTgxMTBERDJBMEQxMEZFOAotOjEwMjNGMDAwOEEzNTZGQTU0NkQ4MzA4QkQ1NkRBOTBDOEE4NjBBOEE5NgotOjEwMjQwMDAwMTRDQkE3N0FCMzM1Mjg4QzEwQzA4MDI4MjQ2NzA4MEIxQQotOjEwMjQxMDAwNDc2NUIxMUNEQTIwREIzMDhDMTc1ODExMzFEM0EwQzBDRQotOjEwMjQyMDAwQzFDMEQwMkRBNDAzOUMxNjYzRkQyODAwODYzNjY0NjFDQwotOjEwMjQzMDAwMTY4OTEwOUI5MDk3OTE5ODkyNjNGRUExQzA4MTYzRkZDQgotOjEwMjQ0MDAwQzk4QTE2Q0NBN0RBMjBEQjMwOEMxNzU4MTEyNUMwMjA5QQotOjEwMjQ1MDAwRDEwRkRBMjBDMEI2NTgxMUI1NjNGRkU0MDBEQTIwOEI0MwotOjEwMjQ2MDAwMTI1ODExQjI2M0ZGRDkwMDlGMTg5RTE5OEExMTJCMjFBRgotOjEwMjQ3MDAwMDQ1ODEwNDg4RTE5OEYxOEMwQjAyQjI0NjY2M0ZFMkZBNQotOjEwMjQ4MDAwQzA4MDYzRkUwMURBMjBEQjMwOEMxN0RENTA1ODEyMkQzRQotOjEwMjQ5MDAwRDJBMEQxMEZEQTIwNTgxMUE1NjNGRkE0MkQyMTIzQzBBQgotOjEwMjRBMDAwQzg3REMzMDI2M0ZFMDg5RjE4OEExMTJCMjEwNDJDMjBDQgotOjEwMjRCMDAwNjY5ODE5QjFDQzBDMEM0NzJDMjQ2NjU4MTAzNjhFMTkyRQotOjEwMjRDMDAwOEYxOEMwRDAyRDI0NjY2M0ZERTUwMDAwMjYyMTIzQjBCRgotOjEwMjREMDAwNjYwNjA2NEYyNjI1MjM2NTZFRUEyODIwNkE3Rjg3MDU1MwotOjEwMjRFMDAwMDgyOTQxNjQ5MEZEQzBEMDFCRTkzRjE5RTk0RTI2MjAyMAotOjEwMjRGMDAwMDcyM0U2MUJCMTY2MDk3QTAyMkJFNjFBMjgyMDBBMkQ2QgotOjEwMjUwMDAwRTYxRDJBRTYxRTA5ODgwMjI4RTYxQzg4MjYwNjA2NDdEQwotOjEwMjUxMDAwMjhFNjIwOEIyODI2RTUzRTJCRTYyMTJEMjQwNzJDMjBCQgotOjEwMjUyMDAwMDYyQTIwNjQyQ0NDRkQ2NEMwOURCNEZGNjNGRTk1MDA5OAotOjEwMjUzMDAwMDBEQjMwREEyMDhEMTZDMENFMkUwQTgwMkMyNDY4OEM2OQotOjEwMjU0MDAwMTc1ODEwNzJEMkEwRDEwRjhFMTAyNjMyMTYxRkU5MTUxRgotOjEwMjU1MDAwMDYyNjE0OEZGNjJCRTYxMjk3RTEyN0U2MTMyOEU2MTREOQotOjEwMjU2MDAwQTZGRjBDRkYwMjlGRTBDMUY2MkVFQzQ4MjZFQ0MwNjRFQgotOjEwMjU3MDAwNkQ2Qjg0MzVDMDgwNjQ0RERCRDlFMERDMzBEQkUwRERBMQotOjEwMjU4MDAwMzBCMTg4MTRFOTI5ODZDOThBQzgyNzlERkYyQ0NDMTA1MAotOjEwMjU5MDAwMjk5QzEwMkE3NjMyMkE3NjMwMDQ2NDAxMUFFOTI0MjQxMAotOjEwMjVBMDAwNzYzMUFBNDQyNDc2MzMyQUQyMTYxN0U5MjE5QUI2MDczRgotOjEwMjVCMDAwNjYwMTk2Qjc4NEMzQkNCQjk0QjU4NDM1QjRERDc0ODMxRgotOjEwMjVDMDAwQkYyRDIxMUQ2M0ZEOEQwMDY0QUY1RTFERThGNjJDMjAzQwotOjEwMjVEMDAwMTY4REQyMEFDQzBDMDBEMTA0MDBDQzFBQUNCQzlDMjlCQwotOjEwMjVFMDAwNjNGRjQ2MDAyQjIxMDQ2RUI4MjIyQzIwNjZCOENDMEM2OQotOjEwMjVGMDAwMEM0NzJDMjQ2NkM5QzQ5RjE4OUUxOThBMTE1ODBGRTVGMAotOjEwMjYwMDAwOEUxOThGMThDMDM0ODcyMEMwRDAyRDI0NjZDMDY4MjY0QwotOjEwMjYxMDAwMjQwNjYzRkVEMDAwMDAwMDZDMTAwODI5MjAwNjI4OUNDOAotOjEwMjYyMDAwRjg2NTgyQzMyOTIxMDJDMEFBMDkwOTRDNjU5MEU2MkJFRQotOjEwMjYzMDAwMjAwQzE2RThEQTBDQkMxMUE2Q0MyRUMyODZDMUQyN0VDNAotOjEwMjY0MDAwRDMwMjYwMDI4RTE5RThENjA5QjkwQTI5OTJBMzJBMTY4NAotOjEwMjY1MDAwMDI2ODkwMDc4QTIwMDlBQTBDNjVBMjc3MjlDMjg1NjRCRQotOjEwMjY2MDAwOTI3MTJCNjI5RTFBRThDQzZGQjgwMjYwMDI2RTJBQTJBOQotOjEwMjY3MDAwMjYyOTE2MDE2OEEwMDgyQjIyMDAwQUJCMEM2NUIyNUM1MwotOjEwMjY4MDAwMjk2MjlEQzE4QzY0OTI1NDJBMjEyMDBBODA2MDk5MTA4RAotOjEwMjY5MDAwMkMyMDNDQzdFRjAwMEYzRTAxMEIzRUIxQkQwRkRCMzlENAotOjEwMjZBMDAwMEJCQjA5OEYyNjBEQkQxMTJEREMxQzBEMEQ0MTBFREQ2MAotOjEwMjZCMDAwMDM4RTI3QjFERDBEMEQ0MTBGRUUwQzBEQkIwQjJCQkNCNgotOjEwMjZDMDAwMUMwQkI3MDI3RUM3MUMyQzIxMjU3QkNCMTYyRDFBRkNCOAotOjEwMjZEMDAwMENCQTBDMERBMTYwMDAwOTNFMDEwNzNFQjE3ODA5ODdENAotOjEwMjZFMDAwMzkwQjc3MEE3N0VCMDI2MDAyMDYyQjIxMjMyODIxMjE4MAotOjEwMjZGMDAwQjFCQjBCMEI0RjJCMjUyMzdCOEIyOUIwQkQyRDI1MjM4NQotOjEwMjcwMDAwQzg1NURBMjBEQjMwNTgwRkYwMjkyMTAyQ0M5NkMwRThGQQotOjEwMjcxMDAwMEU5RTAyMkUyNTAyQ0M1N0RBMjBEQjMwREM0MDU4MTAwQQotOjEwMjcyMDAwNzBDMDIwRDEwRjJDMjA2Njg5MzFCMUNDMEMwQzQ3MkMwNQotOjEwMjczMDAwMjQ2NjZFQzYwMjYwMDFDRjA5RkQ1MDY1RDFDOTJGMEExQgotOjEwMjc0MDAwMDEyODMwMTEyOTIyMTQ2NDgwMTEyQTIyMUIwOTBDNDQwQgotOjEwMjc1MDAwMDBDMTA0MDBGQjFBMEJBQTAyMkEyNjFCMkQzMDEwQzA1MAotOjEwMjc2MDAwQTBDMEUwODgzMDFCRTg4Rjk0MTM5NTE0MjQwQTAxMjUzQgotOjEwMjc3MDAwMjAzQzJCQjAyMjA4OEMxNDc3ODcwNEMwRjEwQkZBMzg2OAotOjEwMjc4MDAwQzBGMkMwODQwODU4MDEwRjVGMDEwRjRFMzgwNTM1NDA3NAotOjEwMjc5MDAwMDdFRTEwQzBGMDA4NEYzODA4RkYxMDBGRUUwMjI4RENEQgotOjEwMjdBMDAwRkVDMEYwMDg0RjM4ODQyQjBCQTgxMDBBRkYxMDJBMjExNgotOjEwMjdCMDAwMjAwRjg4MDIwRTg4MDIwODQ0MDIxOEU4OUU4RjExMDgzNAotOjEwMjdDMDAwNDQwMjI4MjEyNTBBMkExNDA4MjgxNDA0ODgxMTBBODg5QQotOjEwMjdEMDAwMDIyQTIxMDQ5NEYwOEUyMDA0RDQxMDA4RUUxMTA0RUU5NQotOjEwMjdFMDAwMDJDMDRBMDRFRTAyOUVGMTg0MkEwOEFFMTEwRURFMDJGNwotOjEwMjdGMDAwOTRGNDBBNTQxMTBFNDQwMjA1NTUxMDBDMUU0MDk0RjcyRgotOjEwMjgwMDAwMDdFRTEwMEU1NTAyMDg1NTAyQzA4MTk1RjY4NDMzQzBCQwotOjEwMjgxMDAwNTA5NEYzQjE5NDhFMzI5NUY4OThGOTlFRjJDMDgwQzEyRAotOjEwMjgyMDAwRUMyNDI2MTQ5OEZCOUVGNTk5RkE4NTM4OTVGQzg0M0E5OQotOjEwMjgzMDAwOTRGRDhFM0I5RUZFODgzOTk4RkY4NTM1MjVGNjEwODRFMQotOjEwMjg0MDAwMzY4NTE0MjRGNjExOEUzNzg0MTMyRUY2MTJDMEUwNjRGOAotOjEwMjg1MDAwQjA0OTg5MzA3Nzk3NDQyQjMwMTA4ODMzOEMxMTFGRThBQQotOjEwMjg2MDAwNjE4RDMyMkZDNjE0QzBGNDJGQzYxNThGMkIyRUM2MTlCQQotOjEwMjg3MDAwMkRDNjFBMjhDNjFCMDRBRDExMDk5ODQwMDY4ODExMDhGOAotOjEwMjg4MDAwREQwMjBEQkIwMjE4RTg1NkMxRDAwREJCMDIwOEZGMDJFNQotOjEwMjg5MDAwMkZDNjE2MkJDNjE4MjgwQTBFMjgxNjAyMkIyMDBDODhDNQotOjEwMjhBMDAwMTIxQ0U4NDYwQ0I5MTFBNjk5MkE5Mjg1QUNCQjJFQjQyRAotOjEwMjhCMDAwQ0YwQTg4MEIyODk2ODVDOTcxOEIyNjhBMjkwN0JCMDgwMQotOjEwMjhDMDAwMkIyNjA2MEJBQTBDMEEwQTQ4MkEyNTI1NjU1MDQ4QzA2MwotOjEwMjhEMDAwMjBEMTBGMDBEQTIwNTgxMDk1NjNGRTM5MDBEQTIwQzBBRAotOjEwMjhFMDAwQjY1ODEwOTI2M0ZFMkUwMDY4OTczOEMwMjBEMTBGMDBCMgotOjEwMjhGMDAwMDBEQTIwREI3MDU4MTA0RkMwQzBDMEQxMEFEQTM5MEFBNAotOjEwMjkwMDAwREMzODY1Q0RFNDYzRkUwRDhBMTAyQjIxMDQ1ODBGMjFCRAotOjEwMjkxMDAwQzBFMDJFMjQ2NjYzRkUyNURCNDAyQTJDNzQ1ODA5MTI4MQotOjEwMjkyMDAwRDJBMEQxMEZEQTIwNTgwRjI2NjNGQ0Y3NkMxMDA0QzAzOAotOjEwMjkzMDAwMjBEMTBGMDA2QzEwMDQyNzBBODAxQ0U4M0YxREU4M0ZERgotOjEwMjk0MDAwMUFFODE3MEMyOTExQUE5OTJBMkNGQzJCOTI4NTBEQUE5QQotOjEwMjk1MDAwMDI5Q0IxOUFCMEMwNTExM0U4M0MyODkyODUxNkU4MzgyMQotOjEwMjk2MDAwMTRFODM5QTYyNjA0MjQwQUI4ODgyODk2ODUyMzQ2OTFCNwotOjEwMjk3MDAwQTc2NjI1NjQ5RkQxMEYwMDZDMTAwQUQ2MzAyODMwMTA0RQotOjEwMjk4MDAwMjkyMDA2Mjg4Q0Y5NjQ4Mjk3Njg5ODBCMkE5Q0Y5NjU5RgotOjEwMjk5MDAwQTFCMjAyMkEwMjU4MEYwQTg5MzcxQkU4MDJDODkxNjRDMwotOjEwMjlBMDAwNTIwRTJBMjEwMjBBMEM0QzY1QzI1NThEMzAxOUU3RkJFNAotOjEwMjlCMDAwNzRENzA1MkUyMTIzNjVFMjlBMkY5MjlFMUFFN0Y3NkZBRQotOjEwMjlDMDAwRjgwMjYwMDI1MDJBQTIyNjY4QTAwODJDMjIwMDBBQ0MzNQotOjEwMjlEMDAwMEM2NUMyNDEyQTkyOUQ2NEEyM0I5QTE1MUZFN0YxOERCNgotOjEwMjlFMDAwNjdDMUU2QzhERDJCNjIwNjE4RTdFRjY0QjAwNTI4ODBGMgotOjEwMjlGMDAwMjE3QjhCNDMyQjIwMEMxOEU3RTkwQ0JDMTFBOENDMjlCOAotOjEwMkEwMDAwQzI4Njc5RUI0NjBGQkUwQTJFRTJBMzY4RTAwNTJGMjJBQwotOjEwMkExMDAwMDA3RUY5MzcyQ0MyODU5QzE4NjRDMjJGMkIyMTJGODc4QQotOjEwMkEyMDAwNjYwQjdCMzYwQjc5MEM2RjlEMjY2RUQyNDYyQzIwM0RCMwotOjEwMkEzMDAwN0JDNzQwQ0U1NTYwMDAxRTJBMjAwQ0MxQjI4QzIwNThBNgotOjEwMkE0MDAwMTA2RjlBMTg2NEEyNDE4RDY3NjNGRkNGQzBDMDYzRkYwNwotOjEwMkE1MDAwQzVEN0IwNjNGRkQzMDBDMEUwNjAwMDAyMkU2MDAzMEU1NAotOjEwMkE2MDAwREIwQzZFQjIwRURDNzAwQ0VBMTFBQTZBMkFBQzIwNTg5QwotOjEwMkE3MDAwMDE5OEQ3QTBEQTIwREI3MEMxQzgyRDIxMjA1ODEwMTU4RAotOjEwMkE4MDAwOEMyNjhCMjc5QTE2MENCQjBDN0FCMzM0OEYxODg5NjM2QgotOjEwMkE5MDAwOTlGMzg4NjI5OEYyOEU2NTlFRjgyRDYwMTA4QTE4OUREMQotOjEwMkFBMDAwMTc2OEQ3MjlDMEQwOURBOTJDMjIxODJCMjIxMzlDQUJDNAotOjEwMkFCMDAwOUJBQTk3QTU4RTY2N0U3MzAyNjAwMDk3Q0Y1ODYwMDAzMAotOjEwMkFDMDAwMUZEQTIwOEIxNjU4MEZEQjY1QTEzNTYzRkZCREMwODE2RgotOjEwMkFEMDAwQzA5MDhGMThDMEEyOUFGOTk5RkI5OEZBOTdGNTYzRkZGNgotOjEwMkFFMDAwRDJEQjMwREEyMERDNDA1ODBGN0VDMDUxRDZBMEMwQzAwNwotOjEwMkFGMDAwMkJBMDEwMkNBNDAzOUIxNzJDMTIwODAyMkEwMjA2NkI5MQotOjEwMkIwMDAwMDJERjcwMkQ2MDAzOEUxNzlEMTQ5RTEwMENERDExQzAyNgotOjEwMkIxMDAwRTBBRDZEMkREQzIwNTgwMTE3OEMxNDhCMTZBQ0FDMkM1RAotOjEwMkIyMDAwNjQwMzhBMjY4OTI5QUJBQTBBOTkwQzlBMjY4ODY2MDkyMQotOjEwMkIzMDAwMDk0ODI5MjUyNTA3ODgwQzk4NjYyRjIyMThBN0ZGMkZGQQotOjEwMkI0MDAwMjYxODYzRkU5NkRBMjBEQjMwREM0MERENTA1ODEwN0QxRAotOjEwMkI1MDAwRDJBMEQxMEZDMDMwMkMyMDY2ODk2MUIxQ0MwQzBDNDdCQgotOjEwMkI2MDAwMkMyNDY2NkVDNjAyNjAwMENFQzAzMDA5RkQ1MDY1RDBEMAotOjEwMkI3MDAwQzY4RTY3NjRFMDY5NjQ3MDY2REI2MDhDMThERjcwREFBQgotOjEwMkI4MDAwMjAyRDYwMDM4RTE3MENERDExOUUxMEFENkQyRERDMjAwNQotOjEwMkI5MDAwMUVFN0E3NTgwMEY4MjMyNjE4REEyMDhCMTZEQzQwMkZGMgotOjEwMkJBMDAwMjIxM0RENTBCMUZGMkYyNjEzNTgwRjFERDJBMEQxMEZENQotOjEwMkJCMDAwMDAyODIwM0QwODQ4NDA2NThERTc2Rjk1M0VEQTMwOEQ0RQotOjEwMkJDMDAwQjU2RDk5MEM4Q0E4MEM4QzE0Q0FDRjdDRDMyRDJBQUM3MwotOjEwMkJEMDAwMTBDMDkwMjkyNDY3MDkwRDQ3NjREREM1NjAwMDhFMDA5MAotOjEwMkJFMDAwMkMxMjA4MDY2QjAyMkQ2QzIwMDc3RjAyOEUxN0RBMjA0QwotOjEwMkJGMDAwOUUxMDFFRTc4RTU4MDA3QzYzRkY5QTAwQzA5MTYzRkYxMQotOjEwMkMwMDAwRDE2NTUwODBEQTIwREI2MERDNDA1ODBGMzVDMDIwQzAzMQotOjEwMkMxMDAwRjAyRkE0MDNEMTBGREEyMEMwQjY1ODBGQzQ2M0ZGRTAzMQotOjEwMkMyMDAwMDA2Rjk1MDI2M0ZENzBEQTIwREIzMERDNDBERDUwQzRCQwotOjEwMkMzMDAwRTA1ODBFQjZEMkEwRDEwRjhBMTUyQjIxMDQ1ODBFNTU5QwotOjEwMkM0MDAwMjMyNDY2Mjg2MDEwOTgxNzYzRkYyNTAwREEyMDU4MEZBOAotOjEwMkM1MDAwQjc2M0ZGQUNDODU4REIzMERBMjA1ODBFOUIyQTIxMDIzQwotOjEwMkM2MDAwNjVBRjlEQzA5NDA5QTkwMjI5MjUwMjYzRkY5MkRCMzA1QwotOjEwMkM3MDAwREM0MERENTBDMEEzMkUwQTgwMkEyNDY4REEyMDU4MEVEQQotOjEwMkM4MDAwQTNEMkEwRDEwRkMwMjBEMTBGREEyMDJCMjAwQzU4MEZENwotOjEwMkM5MDAwQzA2M0ZGNkM2QzEwMDQyODIwMDZDMDYyMjg4Q0Y4NjVBNQotOjEwMkNBMDAwODEyNUMwNTBDN0RGMkIyMjFCQzBFMTJBMjA2QjI5MjFDMAotOjEwMkNCMDAwMjMwMEExMDRCMDk5MjkyNTIzQjFBQTAwRUMxQTBCQzQ2MgotOjEwMkNDMDAwMDEwQTBBNDQyQTI0NkIwNEU0MzkwRENDMDMwQ0JCMDEyRAotOjEwMkNEMDAwMkIyNjFCNjQ0MDY5MjkyMDBDMUJFNzMwMEM5QTExMEIzMgotOjEwMkNFMDAwQUEwODJGQTI4NjFCRTcyRTZGRjkwMjYwMDBCNjBCOUI4NQotOjEwMkNGMDAwMEEyQkIyQTM2OEIwMDgyQzIyMDAwQkNDMEM2NUMwQTQzMAotOjEwMkQwMDAwMkJBMjg1MUNFNzUyNjRCMDlCODgyQjJGMjEwNDBDODhEMgotOjEwMkQxMDAwMDI5OEIwODQyMEMwODUwODQ0MTEwODQ0MDI5NEIxODQwQwotOjEwMkQyMDAwMkEwOEZGMTE5NEI0OEUzNDlGQjc5RUI1QzA0MDFERTdBQQotOjEwMkQzMDAwMjMyRUEyODUwRDlEMDgyRUVDMjgyRUE2ODUyNUQ0Q0YwNgotOjEwMkQ0MDAwMjkyMTAyMDkwOTRDNjg5NDFBNjg5ODIwQzk0MDJBMjE0RgotOjEwMkQ1MDAwMDI2NUEwMEIyQTIyMUUyQjIyMUQ3QUIxMDI2NUEwNzlFMgotOjEwMkQ2MDAwQzAyMEQxMEYyQzIxMjM2NUNGREU2MDAwMDgyRTIxMjE0OQotOjEwMkQ3MDAwMkQyMTIzN0VEQkQ1MkIyMjFFMkYyMjFEMjUyNTAyN0IxNAotOjEwMkQ4MDAwRjkwMUMwQjA2NEJGQzQxM0U3MDQyQ0IwMDcyOEIwMDAzOQotOjEwMkQ5MDAwREEyMDAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVCMgotOjEwMkRBMDAwQUZFNzYzRkZBNjJBMkM3NEMwQjAyQzBBMDI1ODBEOEQyMQotOjEwMkRCMDAwMUNFNzI4OUNBMDhCMjAwOEJCMTEwNkJCMDI5QkExODlBNQotOjEwMkRDMDAwMzQ5OUEyNjNGRjc5MDAwMDI2MjQ2OERBMjBEQjMwREMyNgotOjEwMkREMDAwNDBERDUwNTgwRkRDRDJBMEQxMEZEQTIwMkIyMDBDNTg0OAotOjEwMkRFMDAwMEY1M0MwMjBEMTBGMDAwMDZDMTAwNjA3M0QxNEMwODBBNwotOjEwMkRGMDAwREMzMERCNDBEQTIwQzA0N0MwMjEyM0JDMzAwMzI4Mzg1OAotOjEwMkUwMDAwMDgwODQyNzc0MDAyMkREQzAxNjQ4MTU3MUVFNkUwMTk3NAotOjEwMkUxMDAwRTZFMTI5RTY3RTZEREEwNTAwNTA4ODAwMzA4Q0MwRTBERQotOjEwMkUyMDAwQzAyMDI1QTAzQzE0RTZERkI2RDM4RkMwQzBEMDBGODdFQQotOjEwMkUzMDAwMTQyNDQwMjIwRjg5NDA5NDEwNzdGNzA0QzA4MTA0ODI0MwotOjEwMkU0MDAwMzhDMEYxMEIyODEwQzA0NEMwMjIwNDU0MDEwNEZEMzhERQotOjEwMkU1MDAwMDI1MjAxMDJGRTM4MDhERDEwODIxQzA3RUUxMDBFNkVEMQotOjEwMkU2MDAwMDIwRUREMDIyNDJDRkVDMEUwMDRGRTM4MEFFRTEwMEUzNQotOjEwMkU3MDAwODgwMjBEODgwMjhEQUIxRUU2Q0YwOEQ4MDIwRTg4MDJBQwotOjEwMkU4MDAwOThCMEMwRTgwNDI4MTAwRTVFMDE4NEEwMjVBMTI1MDg5MgotOjEwMkU5MDAwNDQxMTA4NDQwMjA1MjUxNDA0NTUxMTA0MzQwMkMwODE2QwotOjEwMkVBMDAwMEU4RTM5OTRCMThGQUE4NDEwOUZCNDc1NjYwQTI2QTEzQwotOjEwMkVCMDAwMUZDMEYyMDYyNjE0NjAwMDA3MjZBMTIwQzBGMjA2MjZENQotOjEwMkVDMDAwMTQwNTY1MDIwRjc3MDEwNzg3MzkwNUU2MTAwNzc4MTBBQQotOjEwMkVEMDAwMDg2NjAyMDY1NTAyOTVCNjI1QTEwNDBBRTYxMTA4NThBRgotOjEwMkVFMDAwMTEwODI4MDIwODY2MDI5NkI3QzA2MDY0NDA1NjY0OTBENAotOjEwMkVGMDAwNTMwNjdFMTFDMEY0ODlDMjg4QzMwQjM0MEI5NjQ1OThFMwotOjEwMkYwMDAwNDc5OTQ2MThFNkI3OUY0MTA0NTkxMTBFOTkwMjFGRTZFQQotOjEwMkYxMDAwQjUwMjBFNDcwOEQ4MDI5RjQwOTg0MjBFOTkwMkI0Mzg3NQotOjEwMkYyMDAwQzFFMDBFOTkwMjk5NDQyRkEwMEMwQ0Y5MTExNEU2QTNFQwotOjEwMkYzMDAwMUVFNjlCQTRGRkFFOTkyRTkyODUyNkY0Q0YwRTg4MEIzOQotOjEwMkY0MDAwMjg5Njg1RDEwRjJCQTAwQzBDQkUxMTFDRTY5QzFGRTYwOQotOjEwMkY1MDAwOTNBQ0JCQUZFRTJERTI4NTI2QjRDRjBEM0QwQjJERTYzNQotOjEwMkY2MDAwODVEMTBGMDBDMDgwMDUyODM4Nzg0ODAyNjNGRUE1NjMyQwotOjEwMkY3MDAwRkU5OTAwMDA2QzEwMDZDMEIwQzBBNkMwQzA2NTcwRjAxRAotOjEwMkY4MDAwODgzMEMwMzAwODg3MTQwODg4NDA2NTgwRDNDMEUwQzAwRQotOjEwMkY5MDAwOTFDMEQ0QzA4MjI1MjAzQzBCM0YxMDk3MTI4MzFDQzBFNwotOjEwMkZBMDAwNzAwODU4MDEwRDVEMDEwODk3MzhDMDgwMEI5ODM4MDdFQwotOjEwMkZCMDAwNzcxMDA0ODgxMDA4NjgwMjA4NzcwMkMwODAwRDk4MzhERQotOjEwMkZDMDAwMkQzQ0ZFMDg4ODEwMEQ5RTM4OEQyQjBBRUUxMDA4RUU2MQotOjEwMkZEMDAwMDIwN0VFMDIwQ0I4MTAwRkREMDIwNTNCNDAwRUREMDJDOQotOjEwMkZFMDAwOUQ0MDg5MjAwNDNEMTAwODk5MTEwRDk5MDIyRDIxMDQ1RQotOjEwMkZGMDAwMDlBOTAyMDhERDExOTk0MTg3MkEwNUI5MTAwRDNEMDI4MgotOjEwMzAwMDAwMEFCQjExMERCQjAyMDg3NzAyOTc0NDI4MjEyNTg3MTJCRAotOjEwMzAxMDAwMDgyODE0MDQ4ODExMDcxRTQwMDdFRTEwMEU5OTAyNzU0NwotOjEwMzAyMDAwNjYwOTI2MjExRjA2MjYxNDYwMDAwNjAwMjYyMTIwMDZCOAotOjEwMzAzMDAwMjYxNDA4NjgwMjlCNDcwOTg4MDI5ODQ2MjkyMDBDRDI2QQotOjEwMzA0MDAwQzBDMDgwMEM5RTExMUJFNjVEMUZFNjU0QUI5OUFGRUUyRAotOjEwMzA1MDAwMkRFMjg1Mjg5NENGMERBRDBCMkRFNjg1RDEwRjAwMDAxNAotOjEwMzA2MDAwMDAxRkU2NTAyRkYwMjJDMDMwNjVGRjIwQzAzMTYzRkYwMwotOjEwMzA3MDAwMUJERDQwOEU1MUNBRTAwRTc4MzY5ODEwMDg3NzBDQjJFRQotOjEwMzA4MDAwQUFCMUJCOEY1MDJEREMxMDk4RDk5RkQ4ODk1MzhGNTI4RAotOjEwMzA5MDAwOTkxMTk5REI5RkRBN0U4MzBBQjFDQzI1NUMxMEM5NzgzRgotOjEwMzBBMDAwNjNGRkNGMDA4ODEwOEQxMTA4RTcwQzk3NTFBRDhERDdDNQotOjEwMzBCMDAwRjA3OERCMDFCMUY3OUQ1Mzk3NTI4ODMwQzAzMDA4ODcxNAotOjEwMzBDMDAwMTQwODg4NDA2NDhFQzU2NUJGQTE2M0ZGOTMwMDAwMDBBQgotOjEwMzBEMDAwNkMxMDA0RDcyMEIwM0E4ODIwQzAzMDgyMjFDQUExNzQ3NQotOjEwMzBFMDAwMkIxRjI5NzIwNDZEMDgwRkM5ODFDOTkyODU3NUIxMzNGMAotOjEwMzBGMDAwQTI1MjdBM0IwQzc0MkIwOTYzRkZFOTAwMDA2NDlGRUIzQQotOjEwMzEwMDAwRDEwRkQyNDBEMTBGMDAwMDZDMTAwOEQ2MzBDMDcwOTU5RQotOjEwMzExMDAwMTVEQTQwOEUzOTE0RTYyMzlBMTQ2NEUwMDI2NDUxRjhGQgotOjEwMzEyMDAwMjkyMDA2MkE5Q0Y4NjVBMjVCMkEyMTAyMEEwQjRDNjUxRAotOjEwMzEzMDAwQjIxQjJDMzIwMDE1RTYxOTc0QzcwNTJEMjEyMzY1RDM2NwotOjEwMzE0MDAwMjAyRTUyOUUxQUU2MTU2RkU4MDI2MDAyMTcyQUEyMjY2OAotOjEwMzE1MDAwNjhBMDA4MkIyMjAwMEFCQjBDNjVCMjA4MkU1MjlEMURFOAotOjEwMzE2MDAwRTYxMDY0RTFGRjhCMzg2NEIyMjk5RTE2QzhCQzhENjlGNQotOjEwMzE3MDAwMUVFNjBENjREMDA1MkVFMDIxN0JFQjQ5MkUyMDBDMThCNQotOjEwMzE4MDAwRTYwNzBDRUYxMUE4RkYyOUYyODZDMTg2Nzk4QjRBMTc1MgotOjEwMzE5MDAwRTYwNDA3RTcwQTI3NzJBMzY4NzAwNDg4MjA3Nzg5Mzk1NAotOjEwMzFBMDAwMjVGMjg1NjQ1MjlFMjcyMTJFMDdCNzM2MDdCOTBDNkY4QQotOjEwMzFCMDAwOUQwMUQ3QjA4OTY5NkU5MjQyMjgyMDNEN0I4NzNDOEE2OQotOjEwMzFDMDAwMTVDREFGNjAwMDE4QzFCMjhDMjAyQTIwMEM1ODBFOEI5MAotOjEwMzFEMDAwRDVBMDY0QTJBODhCNjg2M0ZGQ0JDMDUwNjNGRkMzQzBCNwotOjEwMzFFMDAwRTA2MDAwMDIyRTYwMDMwRTlCMEM2RUIyMEVEQzcwMENEMQotOjEwMzFGMDAwRUExMUFBNkEyQUFDMjg1QkZGQjZEN0EwREEyMERCNzBGNgotOjEwMzIwMDAwQzFDNDJEMjExRjU4MEUzMzhDMjY4QjI3RDRBMDBDQkI5NAotOjEwMzIxMDAwMEM3QUIzMjU4QTYzQzA5MDlBNTM4ODYyOTk1ODk4NTI2MQotOjEwMzIyMDAwOEY2NTlGNTk4RTY3OUU1QjhENjY5NzU1OUQ1QThCNjhGQgotOjEwMzIzMDAwN0I3Qjc0OEIxNUNFQjM2MDAwMEREQTIwREI0MDU4MEQxQwotOjEwMzI0MDAwRkQ2NUExMDk2M0ZGQ0MwMERBMjBEQjMwOEMxNDU4MEQzQQotOjEwMzI1MDAwQTRENkEwQzBDMEMwRDE5RDE1MkNBNDAzREEyMERCNjA4OQotOjEwMzI2MDAwREY3MERDNTBDMEUwMjU2MDAzOUUxMDFFRTVFNjBDNURCQgotOjEwMzI3MDAwMTFBRDZEMkREQzI4NUJGRjNGOEU2NkE1QTg4RjY3MjhGQQotOjEwMzI4MDAwNjQwM0FGN0Y3N0ZCMDFCMUVFOUU2NjlGNjc4RDI2OEM0RQotOjEwMzI5MDAwMjlBNEREMERDQzBDOUQyNjhCNjgwQzBDNDgyQzI1MjUxMwotOjEwMzJBMDAwMDdCQjBDOUI2ODYzRkVDMzJDMjA2Njg5NjFCMUNDMEMwNAotOjEwMzJCMDAwMEM0NzJDMjQ2NjZFQzYwMjYwMDBCNDA5RkQ1MDY1RDAzMAotOjEwMzJDMDAwQUVDQkJCOEU2OUNCRTdEQjYwREM1MERGNzBEQTIwMUU1MwotOjEwMzJEMDAwRTVFMTJENjAwM0MwODA5ODEwMENERDExQUQ2RDJEREM5MwotOjEwMzJFMDAwMjg1QkZGMjQ4QjE1Qzg0RjhBMjY4OTI5QTRBQTlBMjYxMQotOjEwMzJGMDAwMEE5OTBDMDkwOTQ4MjkyNTI1NjVCMTNCQzAyMEQxMEY0MQotOjEwMzMwMDAwREI2MDJENkMyOERGNzBEQTIwQzBDMDFFRTVEMjlDMTA3NwotOjEwMzMxMDAwREM1MDVCRkVCNTYzRkZDQjAwMkQyMDNEMEQ0RDQwNjVCRAotOjEwMzMyMDAwRERGRDZGRTUyMkRBMzA4RjQ1NkRFOTBDOEVBQTBFOEUzOQotOjEwMzMzMDAwMTRDOUUzN0VGMzExMkFBQzEwQzA5MDI5MjQ2NzA5MEY0OQotOjEwMzM0MDAwNDc2NEZEREI2MDAxNDEwMEMwOTE2M0ZGRUQwMDg4MTUxQgotOjEwMzM1MDAwNjU4MTRDREEyMERCNjA4QzE0NTgwRDYxQzAyMEMwOTA3MAotOjEwMzM2MDAwMjlBNDAzRDEwRkRBMjBDMEI2NTgwREYwNjNGRkRFMDBBOAotOjEwMzM3MDAwOEExNjJCMjEwNDU4MEM4N0MwQTAyQTI0NjY4QjY4NjMwOAotOjEwMzM4MDAwRkYzRTAwMDAwMDJCOUNGOTY1QjBDNURBMjA1ODBDOEM3QwotOjEwMzM5MDAwNjNGRDk1MDAyQjIwMEMwQ0JBMTFBNUFBMkZBMjg2QzFBMwotOjEwMzNBMDAwQzI3RkMzMDI2MDAwRkMwREI5MEEyOTkyQTM2ODkwMDc4RQotOjEwMzNCMDAwOEMyMDA5Q0MwQzY1QzBFQjI2QTI4NTY0NjBFNTJDMjAyRQotOjEwMzNDMDAwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZGQzYwMjcwOTYwRQotOjEwMzNEMDAwMEFEQUUwMkIyMTA0NTgwQzZGMjcyNDY2ODkzMDc3OTc4RQotOjEwMzNFMDAwNEIxOEU1N0YxREU1ODA4QTMyOEIzM0MwRjQyQzIxMDQxNQotOjEwMzNGMDAwMDk5RTQwMDZFRTExMDRDQzExMEVDQzAyOUY2MUMxRTA4MwotOjEwMzQwMDAwMEVDQzAyOUQ2MDhGMkI5QTY2OUI2NzlDNjQ5NzY1MDgyMwotOjEwMzQxMDAwRkYwMjlGNjIyRjIwMEMxOEU1NjkwQ0ZFMTFBNUVFMkQwRQotOjEwMzQyMDAwRTI4NUE4RkYyN0Y0Q0YyRERDMjAyREU2ODU4RjE1NjVEQQotOjEwMzQzMDAwRjA5MUMwMjBEMTBGMDAwMDJBMkM3NDhCMTQ1ODA2NEEzQQotOjEwMzQ0MDAwRDJBMEQxMEYwMERBMjBEQkUwNTgwREI4NjNGRUZFMDBGOQotOjEwMzQ1MDAwMDBEQTIwREIzMDhDMTQ4RDE1NTgwRTNBRDJBMEQxMEYzMwotOjEwMzQ2MDAwMDAwMDg4MTVDODg4REEyMERCMzA1ODBDOTcyQTIxMDIyMgotOjEwMzQ3MDAwNjVBRURBQzA5NDA5QTkwMjI5MjUwMjYzRkVDRkRBMjBERAotOjEwMzQ4MDAwMkIyMDBDNTgwREMzNjNGRUM0MjcyNDY4REEyMERCMzBFMAotOjEwMzQ5MDAwMkMxMjA0MkQxMjA1MkUwQTgwNTgwQzlDNjNGQzgwMDAwRgotOjEwMzRBMDAwQzAyMEQxMEZEQTIwNTgwREExOEExNUNEQTFEQTIwMDM1MgotOjEwMzRCMDAwM0IwMjJDMTIwNDU4MEQwQTI3QTQwM0MwMjBEMTBGMDA5MAotOjEwMzRDMDAwQzAyMEQxMEYyQTJDNzQ4QjE0NTgwNjI3RDJBMEQxMEZGQwotOjEwMzREMDAwNkMxMDBFMjgyMTAyOTQxMDA4MDg0QzY1ODM1RTFGRTVDRAotOjEwMzRFMDAwMkYyOUYyOUU2Rjk4MDI2MDAzNjIxREU1MkIyOUQyMjZEOAotOjEwMzRGMDAwNjg5MDA4MkEyMjAwMDlBQTBDNjVBMzUwMkNGMjlENjQ0QQotOjEwMzUwMDAwQzM0QTJCMjAwQzBDQjYxMUFGNjYyODYyODZDMUVDNzgzQQotOjEwMzUxMDAwRTMwMjYwMDM0MjE5RTUyMjA5QjkwQTI5OTJBMzY4OTBERgotOjEwMzUyMDAwMDc4QTIwMDlBQTBDNjVBMzJFMjQ2Mjg1NjQ0MzI4QzA1QgotOjEwMzUzMDAwRTEyQTMxMDlDMDcwMjcyNDY2ODkzNTlBMTI5OTJBODhCMAotOjEwMzU0MDAwMzY5OTEzOTgyQjg5Mzc5ODE0OTkyQzg4Mzg5OTE1MDgyRgotOjEwMzU1MDAwNTgxNDk4MTY5ODJEODkzOTJBMjUwNDJFMjUxRDI5MjVCOQotOjEwMzU2MDAwMUMyODMwMjhDMDkyMjgyNDNDMkEzMDI5MDgwODQ3OTg3MwotOjEwMzU3MDAwMTcwOTg5MDEyQTI0M0QyQTMxMTU5OTE4MEEwOTQxMDk5OAotOjEwMzU4MDAwQTkwQzI5OUNFQzI5MjUxRjdFODcxOTJEMkEwMDBEQTA0NgotOjEwMzU5MDAwNjAwMDA4M0UwMTBBM0VCMUFEMDhEQTM5MEVBQTExMEFGMAotOjEwMzVBMDAwOTkwQzI5MjUxRjI3MjExRjE4RTUyQzA3ODE2MDAxMDg4OAotOjEwMzVCMDAwM0UwMDBEM0VCMThBMERBODM5MkQ5Q0ZDMkQyNTIwQzE2MQotOjEwMzVDMDAwOTAwOTg4MzYwOEREMUMwODc3MUM4OTNEOEEzQzJFMjYyOAotOjEwMzVEMDAwMTMyRTI2MTQyRTI2MTUyRTI0NkIyOTI1MjIyQTI1MjE2QQotOjEwMzVFMDAwMjgyMDE0QzBBMDI3MjUyRTJEMjUyRjA4MDg0MzJEMjE4MwotOjEwMzVGMDAwMUMyODI0MTRDMDcwMjcyNTI0MjcyNTI1MjcyNTJDMjc5RgotOjEwMzYwMDAwMjYxODI3MjYxQjI3MjQ2NzI3MjQ2ODI5MzIxMTI3MjVGNwotOjEwMzYxMDAwMjM5OTE5NkVEMjE1NkQwODBBQjFBQTAwQTEwNDAwRTkxOAotOjEwMzYyMDAwMUE3RDlCMDU2M0ZGRUUwMDAwMDA4OTE5MURFNEZEQzBCMwotOjEwMzYzMDAwRTBDMDcyOUIxRDg4MTM5NTFCOUYxRjlDMUU5NjFDMUMyRgotOjEwMzY0MDAwRTUwODI2MjAzREMwRjAwNjA1NDAwOERCMTQwNzY2MDFBQQotOjEwMzY1MDAwMEQ4ODEwQzA3MTA1N0UzODA2N0YzODg1MTIwQkZGMTA2QgotOjEwMzY2MDAwMTZFNEU2MEFFRTEwOTY0MDBGRUUwMjBENTUxMUIwQUZDQgotOjEwMzY3MDAwMDlGRjExMEZFRTAyMUZFNEY5MDg1NTAyMEZFRTAyQzAxOAotOjEwMzY4MDAwRjQ5RjQxOEEyMDlGNDk5NjQ4OUM0QjlCNEU5RDQzOUVBOAotOjEwMzY5MDAwNDY4RDE2MUVFNERBOEIxNUM3Q0Y5QzREOUM0QzlDNDU3RAotOjEwMzZBMDAwOUM0NDBCRDgxNDBFQUUwMjBEQkIxMDlFNEE5RTQyMDhERAotOjEwMzZCMDAwNTUwMjk1NEYwRDE4MTQxNUU0Q0QwRDg4MTEwNTg4MDI5QgotOjEwMzZDMDAwOTg0NzE4RTRFODg1MjYyRTQ2MTIyRTQ2MUEyRTQ2MjJFMgotOjEwMzZEMDAwMjY0NjEwMjY0NjE4MjY0NjIwMkY0NjExMkY0NjE5MkYxQgotOjEwMzZFMDAwNDYyMTI4NDYyNDI4NDYyNjJDNDYxNDJDNDYxNTk1MTE5QQotOjEwMzZGMDAwOEMxNzE4RTRERDA1MDU0ODhGMTgwNTU1MTEwOTA2NDg5MwotOjEwMzcwMDAwMjg0NjEzODkxNDBFNjYxMTA2NTUwMjBGN0YzOTBDM0VBOAotOjEwMzcxMDAwNDAwMkVFMTAxN0U0RDYwRDk5MTEwQzI2NDAwRjY2MTFFOQotOjEwMzcyMDAwMEI5OTAyMEMwQzQwOEIxRDAxQ0MxMDA2RkYwMjI3NDZBMgotOjEwMzczMDAwMUIyOTQ2MTZDMDcwMjkzMTE2MTZFNENEMEVDQzAyMDVBMQotOjEwMzc0MDAwRkYwMjFFRTQ5QzE1RTRDQjJGNDYxNzI2NDYxQ0MwRjA1MgotOjEwMzc1MDAwODYxQzJGNDYxRDJGNDYxRjJGNDYyNzI1NDYyMzBFQ0M5RAotOjEwMzc2MDAwMDI4NTFCMkM0NjFFMUVFNEM0MUNFNDhFOEYxRjhDQzdEMgotOjEwMzc3MDAwMkU0NjI1QURDQzI4MjAwNjI5MjQ2QTI0MzExNzlDMkRGRAotOjEwMzc4MDAwMjQyNTIzOEMxRUNDODEyNzI0MDdDMEQ3N0Y5NzE4OEUzMQotOjEwMzc5MDAwMTEwOTI4NDE5RTI5NjQ4MDhFNjQ0MDk4QzA5ODA5NDk4NwotOjEwMzdBMDAwMzYyRDI0MDY2MDAwMEIwMDY0NDA3NUMwOTgwOTQ5MzYyOAotOjEwMzdCMDAwMkQyNDA2MDFDNDA0MkQwQUEwMkUyMTA0Mjg2Mjg1MDhBOAotOjEwMzdDMDAwRUUxMUFEODgyODY2ODU4NjNGODQzRTJEMzIxMDA2NDg2RQotOjEwMzdEMDAwMTg5OEMzMDBDNDA0MDY0NjE4MThFNDc4MDRDNDUzMDBCQgotOjEwMzdFMDAwNjYxMTA2REQwMkE4QjgyNzg0Q0Y5REM0MDkwNjRFOTY0RgotOjEwMzdGMDAwQzUxREU0QTMwNUE2MTEwNjQ0MDIxNkU0QTA5REMwMDY1QgotOjEwMzgwMDAwNDQwMjk0QzJDMDQzMDRFRTAyOUVDMTE0RTQ2MzI2RjI1MwotOjEwMzgxMDAwOUQyNzQ0QTIyNjZDMTgyNkY2OUQ2NTUwNDJDMDIwRDFGMwotOjEwMzgyMDAwMEZDMDkwNjNGRjg5MDAwMDY1NEY3MEMwOThDMEU4MkVGQwotOjEwMzgzMDAwMjQwNjYzRkY3RDJEMjQwNkMwOTA2M0ZGNzVDQzU3REEwNAotOjEwMzg0MDAwMjBEQjMwOEMxMDU4MEMyNkMwMjBEMTBGMDBEQTIwQzBBRAotOjEwMzg1MDAwQjY1ODBDQjY2M0ZGRTUwMERBMjA1ODBDQjQ2M0ZGREMwMQotOjEwMzg2MDAwMkEyQzc0OEIxMDU4MDU0MEQyQTBEMTBGNkMxMDA2Mjg1QQotOjEwMzg3MDAwMjAwNjhBMzM2RjgyMDI2MDAxNjFDMDUwMTNFNDQ3MjkzOQotOjEwMzg4MDAwMjEwMjE2RTQ0NjY5OTIwNDI1MjUwMkQ5NTAyQzIwMTUwMAotOjEwMzg5MDAwOUEyODE0RTQ0NDhGMjYyNzIwMEIwQUZFMEMwNDc3MDk4QgotOjEwMzhBMDAwMkI3MTFDNjRFMTM5OEU0MjhENDM2RkJDMDI2MDAxNkY0NQotOjEwMzhCMDAwMDBFMTA0QjBDODAwODgxQTA4QTgwODA4RDgwMjk4MjdCMAotOjEwMzhDMDAwMkIyMDA2NjhCMzJFQ0U5NzJCMjIxRTJDMjIxRDAxMTExMQotOjEwMzhEMDAwMDI3QkM5MDFDMEIwNjRCMDE3MkNCMDA3MjhCMDAwREE3MQotOjEwMzhFMDAwMjAwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUY4MgotOjEwMzhGMDAwRTdDMDIwRDEwRjJEMjA2NDY0REZDQThCMjlDMEYxMEJGMwotOjEwMzkwMDAwQUIwQzY2QkZDMDJCMjAwQzBDQkMxMUE2Q0MyOEMyODYwOQotOjEwMzkxMDAwMkUwQTA4NzhFQjYxMUVFNDIyMEVCRTBBMkVFMkEzNjg4RQotOjEwMzkyMDAwRTAwNTI4MjIwMDdFODk0RjI5QzI4NTFFRTQyRTY0OTA3RQotOjEwMzkzMDAwNDYxRkU0M0M5RTkwQzA4NDk4OTEyODIwMEE5NTkzMEZERQotOjEwMzk0MDAwODgwMjk4OTI4RTIwMEZFRTAyOUU5NDJGMjAwNzg4MjZFMAotOjEwMzk1MDAwMkY5NTBBOTg5NjlBOTcyRTIwMDYyNTI0MDc2OEUzNDMwOAotOjEwMzk2MDAwMjkyMTAyMUFFNDE2MkRDMjg1QUFCQTJEREMyMDJEQzYwMwotOjEwMzk3MDAwODUyNUE0Q0Y2M0ZGNEUwMDJCMjA2NUNCQkRDMEMyMkM5NAotOjEwMzk4MDAwMjQ2NUM5RjYwNUU0MzEwMDAyMDAyRTYyODIxRkU0MUVBMAotOjEwMzk5MDAwMkQ0MTAyMEZFRTAyMkU2NjgyMERFNDMxMjkyMTAyNjNEMQotOjEwMzlBMDAwRkYyMzAwMDA2NERGQjg4OTQyMjgyMDE2MDA5MTA0MEQyRgotOjEwMzlCMDAwODgwQzAwODgxQUE4QTg5ODI5NjNGRkEzOEMyMDJEMzJCMAotOjEwMzlDMDAwMjFCMUNDOUNEMDJCMzIyMTJBMzIyM0I0QkIyQjM2MjFGRgotOjEwMzlEMDAwN0JBOUE5MkQzMjIyMkQzNjIxNjNGRkEwQzAyMEQxMEY1MwotOjEwMzlFMDAwOUYyNzI1MjQxNUFDQjgyODc1MUMyQjIwMDZDMEMxMkU5NgotOjEwMzlGMDAwQkNGRTY0RTBBQjY4Qjc3NzJEQkNGRDY1REVDNzJEMjA0QgotOjEwM0EwMDAwNjRDMEYwNjREMDg2OEUyOTBFQUUwQzY2RTA4OUMwRjFFOQotOjEwM0ExMDAwMjgyMDVBMjg4Q0ZFMDhDRjM4NjVGRUU4NjNGRjU4MDAzRQotOjEwM0EyMDAwMDBFMDA0OTMxMEMwODEwQUYzMEMwMzgzMzlDNzhGMDhBOAotOjEwM0EzMDAwRDgwMzA4QTgwMTA4RjgwQzA4MDgxOUE4MzMwM0M4MEMxMwotOjEwM0E0MDAwQThCODI4NzUxQzAzMEI0NzJCMjQxNTgzMTBDQkI3MDA4RgotOjEwM0E1MDAwRTEwNEIwQkMwMENDMUFBQ0FDMENEQzAyOUMyNzY1OUUyNwotOjEwM0E2MDAwNUVDMEIyMEI5OTAyMDkwOTRGMjkyNTAyNjNGRTUwMDA3RQotOjEwM0E3MDAwMkQyMDZBMEQyRDQxNjVERjdFREEyMEMwQjA1ODBDNzIxMgotOjEwM0E4MDAwNjRBRjE4QzBGMTYzRkVFRjlGMjc2M0ZGRDAyRTIyMUZBMwotOjEwM0E5MDAwNjVFRTMyNjNGRjc5MDAwMDI4MjIxRjY1OEUyNzYzRkZFMQotOjEwM0FBMDAwNkUyNTI0MDYyNTI1MDJDMDkwNjNGRTE5NkMxMDA2NjU1QwotOjEwM0FCMDAwNzEzMzJCNEMxOEMwQzcyOTNDMThDMEExQzA4MDA5QTg3RAotOjEwM0FDMDAwMzgwODA4NDI2NDgxMTAxQ0UzQjExQUUzQjIyQUM2N0VBQQotOjEwM0FEMDAwMkE1Q0ZERDMwRjZEQUEwNTAwQjA4ODAwOTA4Qzg4NDA0OQotOjEwM0FFMDAwQzBBMDA4ODk0NzFGRTNEQjA5MEI0NzA4NEM1MDA4MERBRAotOjEwM0FGMDAwNTMwNEREMTBCNENDMDRDQzEwMEQ1RDAyOUQzMTBDQkIyMQotOjEwM0IwMDAwMDI5QjMwODg0MzhFMjA5ODM1MEZFRTAyOUUzMjhEMjYyMAotOjEwM0IxMDAwRDg1MEE2REQ5RDI2OEU0MEMwOTAwRTVFNTA2NEUwOTc4MgotOjEwM0IyMDAwMUNFM0MxMUVFM0IwMDM4QjBCQzBGNDlGQjE5RUIwMkQwQwotOjEwM0IzMDAwMjAwQTk5QjMwQ0REMDI5REIyOEYyMDBDRkYwMjlGQjRDNgotOjEwM0I0MDAwOEUyNjJEMjAwNzlFQjY4QzI4MkRCNTBBOUNCNzI5MjREOQotOjEwM0I1MDAwMDcyRjIwMDYyQjIwNjQ2OUYzMzlDQkI2MURFMzkyMjM4RgotOjEwM0I2MDAwMjAxNjhERDIwQjMzMEMwMEQxMDQwMDMzMUFBM0MzQjQzQQotOjEwM0I3MDAwOEQ5MzI5MjIyMDBDMTNFMzkxMUZFMzg4MEMyRTExQUZBMwotOjEwM0I4MDAwRUVBMzIyMjkyNENGMkZFMjg1RDJBMDBGREQwQjJERTY1NAotOjEwM0I5MDAwODVEMTBGMDBCNDhDMkUyMDBDMENFQjExMUZFMzg4MUQ3NwotOjEwM0JBMDAwRTM3RkFGRUVBREJCMjJCMjg1MjlFNENGMDJDMjBCMjI4OAotOjEwM0JCMDAwQjY4NUQyQTBEMTBGMDAwMDJFMjAwQzBDRUIxMTFGRTMxNAotOjEwM0JDMDAwN0YxQ0UzNzZBRkVFQUNCQjIyQjI4NTI5RTRDRjAyODI0NAotOjEwM0JEMDAwMEIyMkI2ODVEMkEwRDEwRkMwRDAwQkFEMzg3REM4MDI2NAotOjEwM0JFMDAwNjNGRUVDNjNGRUUwOEU0MDI3MkM3NDdCRUUxMkRBNzBFRAotOjEwM0JGMDAwQzBCMzJDM0MxOERENTA1ODBBNzdDMDkwODg0MDYzRkU1MwotOjEwM0MwMDAwRTMwNjZFMDIwMjJBMDIwMzNCMDJEQzQwREQ1MDU4MDA0QwotOjEwM0MxMDAwMDQ5QTEwREI1MERBNzA1ODA0NTQ4ODEwNjNGRUY2MDBFMgotOjEwM0MyMDAwNkMxMDA4MkUzQzE4QzBBMDkyMTYxRkUzNjg4QzQwQUZBMQotOjEwM0MzMDAwMkYwQzhDNDdDMDIzMDRDQjBCRERCMDdGQjMwMjJEQkQwRQotOjEwM0M0MDAwRjhEOUQwQzBCMDc1QzMwMjYwMDA4RDlGMTQ2RDA4NEZDNQotOjEwM0M1MDAwOEQ5MDBENkQzNkFEQUEwRDY2MEMwRUI3MEIwRUJGMEExQQotOjEwM0M2MDAwOURGMEI4NzdCODlGRDhGMDAwODA4ODAwNzA4Qzk3MTFDRAotOjEwM0M3MDAwODc5MDk4MTA5NzE1NjhCMTJBQjIyMjc3RDMyRDg4OTEzMgotOjEwM0M4MDAwQzBEMENCOEY5ODkwMjc5QzEwMDA3MDg4OTcxMjAwRjBCRQotOjEwM0M5MDAwOEM5RjEzOUQ5MTY0NjBBMEMwODEwOEJCMDM3NUNCMzhENQotOjEwM0NBMDAwNjNGRkE5MDBCMTIyMkVFQzE4NjNGRkNFODU5MjBENzczOQotOjEwM0NCMDAwMEM4NjkzOTc5MEE2RDY3RDZCMDFCMTU1OTU5Mjk2OTNGRAotOjEwM0NDMDAwODk0MjYwMDAxN0IzQ0MyOTlDMTg4ODE0REQ5MDc4OTM0MgotOjEwM0NEMDAwMDIyRDlERjhEOUQwNjNGRkJCODk0MkRBOTA4NTE2MEM3RQotOjEwM0NFMDAwMEQ0NzJENDQwMjFCRTM2NzkyMzE5QjMwODY0MzdBOTE0NgotOjEwM0NGMDAwMjYxQkUzNTgxRUUzNjU4OTUwMEU2NjAxOTYzNTBCOTkyNQotOjEwM0QwMDAwMDI5OTMyODg0MjBBODgwQzk4NDI4NzU2QTdBNzk3NTY4QwotOjEwM0QxMDAwOEY0NEFGQUY5RjQ0RDEwRjFCRTM0Rjg5NTA5NjM1MEJCMwotOjEwM0QyMDAwOTkwMjk5MzI4ODQyMEE4ODBDOTg0Mjg3NTZBN0E3OTcyOQotOjEwM0QzMDAwNTY4RjQ0QUZBRjlGNDREMTBGODk0MjYzRkY5RTAwMDA2RQotOjEwM0Q0MDAwNkMxMDA2MUZFMzUyOTMxMEQ2MzA4ODMwQzA5MTA4NjM4MAotOjEwM0Q1MDAwNTEwODA4NDcwNTk4Mzg5ODExMjgyMTAyMjkzQ0ZEMDg4OAotOjEwM0Q2MDAwMDg0QzY1ODE1NzY1OTE1NDJBNjIwMzBBMkI1MDY1QjE0RQotOjEwM0Q3MDAwN0UwQTY4MTQyRTBBRkY3Q0E2MEEyQzIwNUFDQ0M0MkQ3OQotOjEwM0Q4MDAwMEEwMjJEMjQ1QTc4RTAwMjYwMDIwODhBMjg4OTI2MTgzRgotOjEwM0Q5MDAwRTM0MDBBOTkwQzY1OTIwMzJFMjAwQjFDRTMzRjA4RUVDQQotOjEwM0RBMDAwMEIyRUVEMDEyREUwMzIyRUUwMzMwOEREMTEwRUREMDI4OQotOjEwM0RCMDAwMUVFMzM5QUZERDBFREQwMTBEQ0MzNzJEMjAwQzg5NjBGRgotOjEwM0RDMDAwQzFFMDdCOTYyMzFBRTJGNzhCNjIyQUEwMjE5QzEyN0IyQQotOjEwM0REMDAwQTMxNkRBRDBDMUIwMEI0QjM3QjRCQjhDMjA1ODBCODc3RAotOjEwM0RFMDAwOEMxMkRCQTBDRUFCNjAwMUJGMEU0RTM3MUJFMkVDMEM5OQotOjEwM0RGMDAwREExMUFCQUEyOEEyODZCOEVFNzhFQjM1MUVFMkU5MEVGRQotOjEwM0UwMDAwREUwQTJFRTJBMzY4RTAwNDg4MjA3RTg5MjQyQkEyODVBNgotOjEwM0UxMDAwNjRCMEEyODc2MkRFNzAwQzc5MzY5QjEzODgyNjhEMjdFQQotOjEwM0UyMDAwMDk3QTBDMDhERDBDNkZBRDBFNzdEMzEwN0U3QjY5NjBDQwotOjEwM0UzMDAwMDAxRkMwQjA2M0ZGRDgwMEQ3OTA2M0ZGRUI5QzEyREE3RAotOjEwM0U0MDAwMjBEQjcwNTgwQUZDOEIxMzhDMTI2NUEwNkY4RTYyN0U4QgotOjEwM0U1MDAwN0I0NjlDMTI5QjEzQ0M1RkRBMjA4QjEwMDQ0QzAyNThEQgotOjEwM0U2MDAwMEFBMEQ2QTA4QjEzMjUwQTAxREU3MERBMjBEQzYwREQwMwotOjEwM0U3MDAwNDA1QkZGNkI4QzEyRDlBMDJEMjAwQ0MwRTAxQkUyQzc2OQotOjEwM0U4MDAwMTdFMkNGMENEQTExQTdEN0FCQUEyQkEyODUyRTc0Q0ZERAotOjEwM0U5MDAwMEI5OTBCMjlBNjg1NjNGRjI0REEyMERDNjBERDQwREU2OAotOjEwM0VBMDAwNzA4OTExMjgyMDA3REY1MEE5ODgyODI0MDc1QkZFRkZBRQotOjEwM0VCMDAwRDJBMEQxMEYwMDAwREJEMERBMjA1ODBCMUM2NTUwRjNFNAotOjEwM0VDMDAwMkEyMDE0MEEzQTQwNjVBMEVFREI2MERDNDBERDMwREFERgotOjEwM0VEMDAwMjA1ODA5OEUxRkUyRUVENkEwNjRBMEQ3ODRBMTgzQTA0QgotOjEwM0VFMDAwMDQwNDQ3MDMwNTQ3OTUxMTAzNjM1MUMwNTE2M0ZFNjhGRAotOjEwM0VGMDAwMkMyMDA2MjhDQ0ZENjQ4MEE4NjhDNzA0QzA5MzI5MjQyMAotOjEwM0YwMDAwMDZDMEMxOEU2NDE5RTJBNzlFMjY5RTI5OUUyODg5OTIyQQotOjEwM0YxMDAwOUUyNzAwOTEwNDAwQ0MxQTAwOTAwNEIwQzg4RDY1MDg1QgotOjEwM0YyMDAwRUUwMUFFQ0MwRDBFNUUwMUVFMTFBRUNDQjBDQzJFMEE4MQotOjEwM0YzMDAwRkUwQzBDMTkwRUNDMzZDMEUyMEMwQzQ3MEVDQzM3MkMwNAotOjEwM0Y0MDAwMjQxNkMwQjAyQjI0MDcyQzIwMDYxQkUyOUYwQTBFNDUyNgotOjEwM0Y1MDAwMEQwODQyMjgyNDBCMkUyNDBBQjQ4OTI5MjQwQzdEQjg4QwotOjEwM0Y2MDAwNUEyOTIwMTYwQTVENTJCMDlFMEVERDM2MkQyNDY0MkI5MAotOjEwM0Y3MDAwQ0NGRDY1QkRGQjBEMEM0NzY0Q0RGNTFERTI4QTg4Mjg5QwotOjEwM0Y4MDAwOEREMjBDOUIwQzAwRDEwNDAwQkIxQUFCODg5ODI5NjMxRQotOjEwM0Y5MDAwRkRERTAwMDAxQ0UyQjk2M0ZFMjAwMDAwMUNFMkFGNjNGRQotOjEwM0ZBMDAwRkUxODhENjU2M0ZGQTIwMDAwREEyMDJCMjAwQzU4MEE1MgotOjEwM0ZCMDAwRjg2NDVGMEJDMDIwRDEwRkMwMjBEMTBGQzA5M0MwRTNDNQotOjEwM0ZDMDAwMkUyNDE2NjNGRjlEMDAwMDZDMTAwNEMwNjAxN0UyNzI3RgotOjEwM0ZEMDAwMURFMjc1QzM4MTI5MzEwMTJBMzAwODI5MjQwQTc4QTFGQwotOjEwM0ZFMDAwMDhDM0IyN0JBMTcyRDI2MEQxMEZDMEMxNjU1MDUxMjYwNwotOjEwM0ZGMDAwMjUwMjJBRDAyMDJGMjAwQjI5MEFGQjJCMjAxNDJFMjA0QgotOjEwNDAwMDAwMTUyNjI0MTUwOUJCMDEwREZGMDkyOEYxMUMyQjI0MTRDQQotOjEwNDAxMDAwQThFRTJFRjUxQzY0QTBCNTJCMjIxRTI4MjIxRDAxMTEyRQotOjEwNDAyMDAwMDI3Qjg5MDFEQjYwNjRCMDE3MkNCMDA3MjhCMDAwREE4RQotOjEwNDAzMDAwMjAwNzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUYyNgotOjEwNDA0MDAwRTdEQjMwREM0MERENTBEQTIwNTgwMEQ4MjkyMTAyMDlCNgotOjEwNDA1MDAwMEI0Q0NBQjJEMkEwRDEwRjAwQ0M1QTJDMzAwODdCQzE3NQotOjEwNDA2MDAwMzcyRUQwMjA2NEUwMkQwMjJBMDIwMzNCMDJEQzQwREQyMwotOjEwNDA3MDAwNTA1ODAwQ0VEMkEwRDEwRjJCMjAxNEIwQkIyQjI0MTQ0QgotOjEwNDA4MDAwMEIwRjQxNjRGMDgyN0NCN0NBQzBDMTBDOUMwMjJDMjU4NgotOjEwNDA5MDAwMDJEMkEwRDEwRkMwMjBEMTBGMkUyMDA2NjlFMkMxMkY3RAotOjEwNDBBMDAwMjEwMjBGMEY0QzY5RjFCODI2MjQwNjI2MjUwMjJCMjI4NwotOjEwNDBCMDAwMUUyODIyMUQyQTIwMEIyOTIwMTUwREFBMDkyQ0ExMUMxRgotOjEwNDBDMDAwMjYyNDE1QUM5OTI5QTUxQzdCODE0QTYwMDA0OUIwQkIwOAotOjEwNDBEMDAwMkIyNDE0MEIwRDQxQ0JENjdDQjcwMjJDMjUwMjJCMjJBRQotOjEwNDBFMDAwMUUyRTIyMUQ3QkU5MDIyQjBBMDA2NEIwMTcyQ0IwMDc5QwotOjEwNDBGMDAwMjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMDA0MwotOjEwNDEwMDAwREJBMDY1QUZFN0MwMjBEMTBGMjYyNDA2RDJBMEQxMEZENwotOjEwNDExMDAwMjYyNDA2NjNGRkM3REI2MDFERTIyMzY0QkY0MjJDQjA4OAotOjEwNDEyMDAwMDcyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzBEMTBCODAwQgotOjEwNDEzMDAwMDBEQkEwNjVBRkU3MURFMjFCNjNGRjI0NkMxMDA0MjhDMQotOjEwNDE0MDAwMjAwNkMwNjQ2Rjg1NjRDQTVCMjkyMDE0N0Q5NzI2REEzNwotOjEwNDE1MDAwMjBEQjMwREM0MDA1NUQwMjU4MDAxOTI5MjEwMjA5MEFFNAotOjEwNDE2MDAwNENDOEEzQzAyMEQxMEYwMEMwQjEwQjlCMDIyQjI1MDI2RAotOjEwNDE3MDAwQzAyMEQxMEYwMDAwMDIyQTAyMDMzQjAyMkMwQTAxNTg4MgotOjEwNDE4MDAwMDBDOUM5QUFEQTIwREIzMERDNDA1ODA5RDUyOUEwMTFDMgotOjEwNDE5MDAwRDNBMDdFOTcwODJDMEFGRDBDOUMwMTJDQTQxMUMwNTFDMQotOjEwNDFBMDAwMkQyMDE0MDZERDAyMkQyNDE0NjNGRkEyREEyMERCMzA1QgotOjEwNDFCMDAwREM0MERENTBDMEUwNTgwOTU1RDJBMEQxMEYwMDAwMDAwRQotOjEwNDFDMDAwNkMxMDA2MTZFMUY2MUNFMUY2NjU1MTNCQzBFMTE3RTEwMwotOjEwNDFEMDAwRjIyODIxMDI4QjIwMDgwODRDNjU4MDdDMjkzMjAwMDlENgotOjEwNDFFMDAwNjk1MTY5OTM3MzJBNjI5RTZFQTg0ODJBNzIyNjY4QTA1NAotOjEwNDFGMDAwMDI3QUI5M0YyQTYyOURCNDRGQ0JBNzJCMjAwQzBDQkQ4RAotOjEwNDIwMDAwMTEwNkREMDgyOEQyODY3OEZCMTUwQ0JGMEEyRkYyQTMxMQotOjEwNDIxMDAwNjhGMDA0ODgyMDdGODkwNzJERDI4NUQzMEY2NUQwNjA5MAotOjEwNDIyMDAwMkEyMTA0MTlFMjFFRDMwRjdBOUIxRERBMjA1ODA4NTM2NQotOjEwNDIzMDAwNjAwMDI1MDAyQzIxMDQxQkUyMTk3Q0JCMTREQTIwQzA4RAotOjEwNDI0MDAwQjY1ODA4NEVDOTU0NjAwMEVGREEyMDU4MEEzODYwMDBBQQotOjEwNDI1MDAwMDcwMERBMjBDMEI2NTgwQTM1NjU1MERDREM0MERCMzA5OAotOjEwNDI2MDAwOEQzMERBMjAwRDZENTE1ODA4QTlEM0EwNjRBMEM5MUM2NwotOjEwNDI3MDAwRTFDQ0MwNTE4NEExOEVBMDA0MDQ0NzBFMEU0NzYzRkYxOQotOjEwNDI4MDAwNEYyQjIxMDRDMDhDODkzMUMwNzBERjcwMDlGOTUwMDlBRgotOjEwNDI5MDAwOEYzODZFQjgxNzJDMjA2NkFFQ0MwQzBDNDcyQzI0NjZEOQotOjEwNDJBMDAwN0NGQjA5OUQxMDU4MDhCQjhEMTAyNzI0NjY5NEQxMUVGNQotOjEwNDJCMDAwRTFEMkI4REM5RUQwNjU1MDU2QzBEN0I4M0FDMEIxQzA4NAotOjEwNDJDMDAwRjAwQ0JGMzgwRjBGNDJDQkYxMTlFMUIwMThFMUIyMjg2MgotOjEwNDJEMDAwOTY3RUIwNEJEMzBGNkRCQTA1MDBBMDg4MDBDMDhDMkMyMQotOjEwNDJFMDAwMjAwQ0MwMjAxREUxQjYwQ0NGMTFBNkZGMkVGMjg1QUQyQgotOjEwNDJGMDAwQ0MyN0M0Q0YwRTRFMEIyRUY2ODVEMTBGQzA4MDBBQjg0NgotOjEwNDMwMDAwMzg3OEQwQ0Q2M0ZGQzEwMDhFMzAwRTBFNDc2M0ZFQkRGRQotOjEwNDMxMDAwMkEyQzc0MkIwQTAxMDQ0RDAyNTgwOEFFMkYyMDBDMTJDRgotOjEwNDMyMDAwRTFBNzBDRjkxMUE2OTkyODkyODVBMkZGMjdGNENGRDIxNAotOjEwNDMzMDAwQTAwODQ4MEIyODk2ODVEMTBGQzAyMEQxMEYwMDAwMDA5RgotOjEwNDM0MDAwNkMxMDA0QzA2MENCNTVEQjMwREM0MDA1NUQwMjAyMkFGNgotOjEwNDM1MDAwMDI1QkZGOUIyOTIxMDIwOTA4NENDODgyRDJBMEQxMEYyMQotOjEwNDM2MDAwMkIyMDE0QjBCQjJCMjQxNDBCMEM0MUNCQzU3REI3RUIxOQotOjEwNDM3MDAwQzBDMTBDOUMwMjJDMjUwMkQyQTBEMTBGMDAwMDAyMkE0MQotOjEwNDM4MDAwMDIwMzNCMDIwNjZDMDJDMEQwQzdGNzJFMjAxNDI4MzE2RQotOjEwNDM5MDAwMDEyNjI1MDIyODI0MEEwRkVFMDEyRTI0MTQ1ODAxMENCMAotOjEwNDNBMDAwNjNGRkEzMDAyNjI0MDZEMkEwRDEwRjAwNkMxMDA2MjhCQwotOjEwNDNCMDAwMjEwMkQ2MjAwODA4NEM2NTgwOTkyQjIwMEMxMkUxNzc0OQotOjEwNDNDMDAwMENCODExQTI4ODJBODI4NkI1NDk3QTkzMDI2MDAwOTNCQwotOjEwNDNEMDAwMTlFMTc0MDlCOTBBMjk5MkEzNjg5MDA4MkE2MjAwMDlCMAotOjEwNDNFMDAwQUEwQzY1QTA3RTI4ODI4NTFDRTE3RjY0ODA3NTlDODA3NAotOjEwNDNGMDAwQjg4N0IxNEI5QjgxOUIxMDY1NTA3MkMwQTdEOTcwMjhCQwotOjEwNDQwMDAwMEEwMUMwRDAwNzhEMzgwRDBENDJDQkRCMUZFMTYwMUVDNQotOjEwNDQxMDAwRTE2MTJFRjY3RUQ4MzBEMzBGNkQ0QTA1MDA4MDg4MDAwQQotOjEwNDQyMDAwOTA4Q0MwODAyRjMwMDgyRjc0MDAyOTYwMEMxQUUxNjMzMwotOjEwNDQzMDAwMEM5RDExQTJERDJDRDI4NUMwMjBBQTk5MjI5NENGMEMwQwotOjEwNDQ0MDAwQkMwQjJDRDY4NUQyODBEMTBGQzBFMDAzOEUzODdFQTA2NQotOjEwNDQ1MDAwQzM2M0ZGQjdDQzU4MkE2Qzc0REIzMERDNDA1ODA3RTFFQgotOjEwNDQ2MDAwQzAyMEQxMEZEQTYwNTgwOUIxNjNGRkU3MDAwMERENDBEQQotOjEwNDQ3MDAwODUxMDJBNkM3NEMwQjBEQzcwNTgwODU2MkYzMDA4MkY5NQotOjEwNDQ4MDAwNzQwMDI4NjAwQ0MwRjAwQzhCMTFBMkJCMjlCMjg1MTJGRAotOjEwNDQ5MDAwRTE0QjA5NTkwQkEyODIyRjI0Q0YyOUI2ODVEMkEwRDE5NgotOjEwNDRBMDAwMEYwMDAwMDA2QzEwMDQyOTIwMTQyODIwMDZCMTk5Mjk1RgotOjEwNDRCMDAwMjQxNDY4ODEyNEMwQUYyQzBBMDEyQjIxMDIyQzI0MDY2RAotOjEwNDRDMDAwN0JBMDA0QzBEMDJEMjUwMjAyMkEwMjAzM0IwMjA0NEMyQgotOjEwNDREMDAwMDJDMEQwNTgwMEJGRDJBMEQxMEZDMDIwRDEwRjAwMDAyMQotOjEwNDRFMDAwNkMxMDA0MjkzMTAxQzJCNDI5MjQwQTJBMzAxMUMyODM3NAotOjEwNDRGMDAwNzhBMTZDN0JBMTY5NjQ1MDQ3MkMyMDA2QzA2ODZGQzUwOQotOjEwNDUwMDAwNjJDQTU3MkQyMDE0N0NENzIyREEyMERCMzBEQzQwREQ1NAotOjEwNDUxMDAwNTA1QkZGQTYyOTIxMDIwOTBFNENDOEUyQzAyMEQxMEYzMgotOjEwNDUyMDAwQzBGMTBGOUYwMjJGMjUwMkMwMjBEMTBGREEyMERCMzAwRgotOjEwNDUzMDAwQzBDMDVCRkZEQzI4MjAxNDA2ODgwMjI4MjQxNDYzRkYxNwotOjEwNDU0MDAwQzcyOTIwMTUxQkUxMTgyQTIwMEJDMEMwOUMyNDBCQUFFOAotOjEwNDU1MDAwMDkyQkExMUMyQzI0MTVBQjk5MjlBNTFDNjNGRjk5MDBEQwotOjEwNDU2MDAwQzAyMEQxMEZEQTIwREIzMERDNDBERDUwQzBFMDU4MDgzRAotOjEwNDU3MDAwNjdEMkEwRDEwRjAwMDAwMDZDMTAwNENCNTUxM0UxMTNEQgotOjEwNDU4MDAwMjUyMjFGMEQ0NjExMDY1NTBDQTMyMzI2MjIxRTI1MjY4MwotOjEwNDU5MDAwMUYwNjQ0MEIyNDI2MUU3MzRCMURDODUyRDI0MEQxMEY1OAotOjEwNDVBMDAwMjgwQTgwQzA0MDI0MjYxRkE4MjgyODI2MUUyODI2MUQ0OQotOjEwNDVCMDAwRDI0MEQxMEZDMDIwRDEwRjI0NERGODI0MjYxRTYzRkYxNgotOjEwNDVDMDAwRDgwMDAwMDA2QzEwMDQyODIwMDZENjIwNkU4NTAyNjBGQQotOjEwNDVEMDAwMDBERTE3RTBGMjFERTBGOTE5RTBGMkMwQzFDMDIwMkFBOAotOjEwNDVFMDAwOENGQzY0QTEzMjJCNjEwMkI0NEUwQjBCNEM2NUIwQTg1RAotOjEwNDVGMDAwMkI2MDBDMkE2MjAwMENCODExMDc4ODA4MkY4Mjg2MDlFQwotOjEwNDYwMDAwQjkwQTdGRTMwMjYwMDA5RjI5OTJBMzY4OTAwNTA5QUE3NgotOjEwNDYxMDAwMEM2NUEwOTMyODgyODU2NDgwOERCODg5MUJFMEY3OTQ4RgotOjEwNDYyMDAwODE5QjgwNjU1MTREQzBCN0I4MzhDMEExQzBFMDA5QUVDQwotOjEwNDYzMDAwMzgwRTBFNDI2NEUwNDgxQUUwRDUxRkUwRDYyRkE2N0U2MQotOjEwNDY0MDAwQjA0QTZEQUEwNTAwODA4ODAwOTA4Q0MwQTAyRTYwMEMzNgotOjEwNDY1MDAwMENFODExQTc4ODJGODI4NUFERUUwRjRGMEIyRjg2ODVCMgotOjEwNDY2MDAwMkI2MDA2MjJFNENGNjhCMTJBMjk2MDE1QzBCMkM5OUEyRQotOjEwNDY3MDAwRDJBMDJENjEwMjJCNjQwNjBDREQwMjJENjUwMkQxMEY0NAotOjEwNDY4MDAwQzBFMDA4QUUzODdFQjBCNzYzRkZBQjAwMjI2NDA2RDI0QwotOjEwNDY5MDAwQTBEMTBGMDBEMkEwRDEwRjAwQ0M1N0RBNjBEQjMwREMwNAotOjEwNDZBMDAwNDA1ODA4OEZDMDIwRDEwRkRBNjA1ODA5MjA2M0ZGRTgxNgotOjEwNDZCMDAwMDAyODIyMUUyOTIyMUQ3ODk5MDIyODBBMDBDMTc2QzFFRAotOjEwNDZDMDAwQzFDMUQyMUJFMEMyQzEyNEFCNkI2NDgwNDM3ODkxNDA2RQotOjEwNDZEMDAwMkE4MDAwMENBRjBDNjRGMEFFMERBRTBDNjRFMEE4MDJCMgotOjEwNDZFMDAwQUYwQzY0RjBBMjA3QUUwQzY0RTA5QzJGQUNFODY0RjA2MQotOjEwNDZGMDAwOTYyRUFDRTc2NEUwOTAyRkFDRTY2NEYwOEEyQTgwMDczRgotOjEwNDcwMDAwMDhBODBCMDg4QTAyN0I4MzAyMkE4REY4RDhBMDY1QUYxRgotOjEwNDcxMDAwQkJDMDkwNjAwMDczMDAwMDJCNjAwQzBDQjgxMUE3ODgyMAotOjEwNDcyMDAwMkU4Mjg2NkVFODc5MDlCQTBBMkFBMkEzNjhBMDA0OEVBRQotOjEwNDczMDAwNjA3QUU5NkIyQTgyODU2NEEwNjUxRkUwQUFDMEUzMkUzNwotOjEwNDc0MDAwNjQwNjlFQTE5RkEwMUZFMEQ2MkU2MDBBOTJBMzBGRUVFMgotOjEwNDc1MDAwMDI5RUEyOEU2MDBGRUUwMjlFQTQyRjYwMTQ3QUZGNDc4NQotOjEwNDc2MDAwMjJBNDE3MkY4Mjg1QURCRTIyRTRDRjJGRkMxODJGODZGRQotOjEwNDc3MDAwODU2M0ZFNzAyQTZDNzRDMEIxREM5MERENDA1ODA3OTVFQgotOjEwNDc4MDAwMURFMDhGQzBDMTYzRkVDNEQ5QTBEQTYwREIzMERDNDAxRAotOjEwNDc5MDAwREQ1MEMyRjBDMUUwMDlGRTM5NTgwN0RDRDJBMEQxMEZDQwotOjEwNDdBMDAwREE2MDU4MDhFMjYzRkVGMDJDQTQxNzI5ODI4NTBEQkU1QQotOjEwNDdCMDAwMDgyMkU0Q0YyOTlDMTgyOTg2ODU2NDUwMEMyQTZDNzQ0MQotOjEwNDdDMDAwMDQ0QjAyNTgwMTY5RDJBMEQxMEZDMDIwRDEwRjAwMDBDNAotOjEwNDdEMDAwNkMxMDA2MkIyMjFFMjgyMjFEOTMxMDdCODkwMUMwQjA2RAotOjEwNDdFMDAwQzBDOUMwM0JDMUYyMDQwNjQwMURFMDc4QzBFMkMwNzRGRAotOjEwNDdGMDAwMDc0NzAxMEU0RTAxQUQyRDlFMTFDMDQwMkUwQTE0NjRENAotOjEwNDgwMDAwQjA2RTZEMDg0NDI4MjIxRDdCODE2NTJBQjAwMDdFQTExMAotOjEwNDgxMDAwM0I3RkExNDc3QjUxMjA3Q0ExNDk2OEE5MTc2OEFBMTQ1NgotOjEwNDgyMDAwNzNBMTExQzA5Rjc5QTEwQ0MxOEI3OEExMDdDMUFFMjlEQQotOjEwNDgzMDAwMEExRTI5QjQwMDdDQTEyQjJBQjAwNzBCQUIwQkRBQjBGRgotOjEwNDg0MDAwN0RCMzAyMkFCREY4REJBMENBQTU2M0ZGQjQyOEIwMTA2RgotOjEwNDg1MDAwODkxMTY5ODdCQjY0OUZCODYzRkZEQzAwNjQ3RkI0NjMyMAotOjEwNDg2MDAwRkZENTAwMDA2NDZGRDBDMDQxQzFBRTJBQjQwMDYzRkYyMQotOjEwNDg3MDAwQzYyQjIxMDJDRUJFMkEyMjFEMkIyMjFFN0FCMTJBOENFMwotOjEwNDg4MDAwMTA3Q0IxMjE3QUI5MDFDMEIwQzlCOTEzRTA0M0RBMjA3NAotOjEwNDg5MDAwMjhCMDAwMkNCMDA3MDM4ODBBMjg4MjRDQzBEMTBCODBCNgotOjEwNDhBMDAwMDBEQkEwNjVBRkU3RDI0MEQxMEY4OTEwNjU5RkQ0NjNDQwotOjEwNDhCMDAwRkZGMzAwMDA2QzEwMDhDMDcwNjQ1MTcxOEYzMDI5MjEyMwotOjEwNDhDMDAwMDIwRjBGNDcxNkUwMzYwOTBDNEM2NUMwOEY4RDMwMEQ3NgotOjEwNDhEMDAwNkU1MTY4RTMwMjYwMDA4NDI4NjI5RTFBRTAyRjZFODhBMQotOjEwNDhFMDAwNTIyQUEyMjY2OEEwMDQ4QjIwN0FCOTQ3MkE2MjlEQjA3QQotOjEwNDhGMDAwNEVDQkFGOUExMDJCMjAwQzlFMTEwQ0JDMTFBNkNDMjlDQwotOjEwNDkwMDAwQzI4NkI3NDg3OThCNDExN0UwMjYwN0I3MEEyNzcyQTNGQQotOjEwNDkxMDAwNjg3MDA0ODgyMDc3ODkzMDJDQzI4NTlDMTJEN0MwNjVDNgotOjEwNDkyMDAwQzA2MjJDMjEwNDFBRTA1RDdDQUIyMkRBMjA1ODA2OTM4OQotOjEwNDkzMDAwNjAwMDI5MDAyRTIxMDQxREUwNTk3RURCMThEQTIwQzAxQQotOjEwNDk0MDAwQjY1ODA2OEVDOTU4NjAwMTU2QzBDMDYzRkZDQ0RBMjA0NQotOjEwNDk1MDAwNTgwODc2NjAwMDA2REEyMEMwQjY1ODA4NzQ2NTUxM0ZFMgotOjEwNDk2MDAwREM0MERCMzA4RDMwREEyMDBENkQ1MTU4MDZFOEQzQTBFNQotOjEwNDk3MDAwNjRBMTJDQzA1MTI5MjEwMjg0QTE4RkEwMDQwNDQ3MEZGNwotOjEwNDk4MDAwMEY0NzYzRkY0MTJCMjEwNEMwOEM4OTMxQzBBMDA5Rjk3NgotOjEwNDk5MDAwNTAwOThBMzg2RUI4MUUyQzIwNjZBRkNDMEMwQzQ3MkMwMAotOjEwNDlBMDAwMjQ2NjdDQUIxMDlFMTQyQTEyMDA1ODA2RkE4RTE0QzA5RQotOjEwNDlCMDAwRDAyRDI0NjY4RDMwQzA5MjFCRTAxMEMxRjg3RkQ2MEMzQwotOjEwNDlDMDAwODcxMjlCNzAyOTc2MDEyRjc0MDgyNzdDMTA2NTUwQjdEOQotOjEwNDlEMDAwQjgzQUMwRDdEQzcwQzA1MUMwODAwNzU4MzgwODA4NDJDOAotOjEwNDlFMDAwNjQ4MDc5MURERkVBMTlERkVCMjlENjdFNkE0MjBBRDM5QgotOjEwNDlGMDAwMEY2REU5MDUwMEEwODgwMEMwOENDMEEwODgzMEMwOTI2RgotOjEwNEEwMDAwN0Y4NjM4MDdFODBCMkY4NDA4OUI4MDk5ODFCNEU4MkNCNwotOjEwNEExMDAwMjAwQ0MwOTAxRERGRUEwQ0MzMTFBNjMzMjIzMjg1QURGNQotOjEwNEEyMDAwQ0MwMjgyMEIyOUM0Q0YyMjM2ODVEMkEwRDEwRjhBMzA4NgotOjEwNEEzMDAwQzBGMTdFQUUzMjI5MjEwMjYzRkU4ODAwMkMyMDBDOEU0QwotOjEwNEE0MDAwMTFDMEIwMURERkRFMENDRjExQTZGRjIyRjI4NUFEQ0M2OAotOjEwNEE1MDAwMkJDNENGMDJFRTBCMkVGNjg1RDJBMEQxMEZDMDgwMEE1OAotOjEwNEE2MDAwNTgzODc4RDA4NjYzRkY3QTlGMTNEQjMwREEyMEMwQzFENAotOjEwNEE3MDAwREQ3MDVCRkY1NzI5MjEwMjhGMTMyQTlDRkU2NUFFNDMzMAotOjEwNEE4MDAwMjcyNTAyQzA5MDYzRkUzQjlFMTQyQTJDNzRDMEIxREMyMwotOjEwNEE5MDAwNzBERDQwNTgwNkQwOEUxNDFCREZEOEMxRjg2M0ZGNUI3MQotOjEwNEFBMDAwQzAyMEQxMEY2QzEwMDYyODIxMDIxNkRGQkMwODA4NEM2QwotOjEwNEFCMDAwNjU4MjE1Mjk2MjlFNkY5ODAyNjAwMjFDMTlERkI3Mjk3MgotOjEwNEFDMDAwOTIyNjY4OTAwNzhBMjAwOUFBMEM2NUEyMEIyNzYyOUQ4RQotOjEwNEFEMDAwQzBDQzY0NzIwMzJCMjEwNDhFMzFDMEEwRERBMDBFRkU3OQotOjEwNEFFMDAwNTAwRUNEMzg2RUI4MTEyQzIwNjYyQ0NDMDEwQzBDNDcyMgotOjEwNEFGMDAwMkMyNDY2N0NEQjAyNjAwMUVBQzBDMTI5MzAwODFCREY4MAotOjEwNEIwMDAwQTk2NDkwOTcyRjBBRkZDMEQzQjA5RTY0RTBGRDY4OTIxRAotOjEwNEIxMDAwMEU2NDUwODMyQTJDNzREQjQwNTgwMDkzRDJBMEQxMEYyRQotOjEwNEIyMDAwMkIyMDBDMjcyMTA0MENCQzExQTZDQzI5QzI4NjI4MEFGNAotOjEwNEIzMDAwMDg3OTgzMDI2MDAxQjkxOURGOUEwOUI5MEEyOTkyQTM5OQotOjEwNEI0MDAwNjg5MDA4MkUyMjAwMDlFRTBDNjVFMUE0MkVDMjg1NjQ0RgotOjEwNEI1MDAwRTE5RTI2MjAwNzEzREZBMzZFN0IwMjYwMDE5QTE3REYxOAotOjEwNEI2MDAwOUExRkRGQTMxOURGRDBDMEQyMjgyMDBBOTNFMDlERTE2RAotOjEwNEI3MDAwQTk2OTBGODgwMjk4RTIyRjkwODAyQTk0ODBCMUZGMDdEQwotOjEwNEI4MDAwRkYwMjlGRTMxRURGOEUyRkMyODVBRUJFMEZERjBCMkYwRAotOjEwNEI5MDAwQzY4NTJBRTRDRjY1NUY3QkMwMjBEMTBGMkYzMDEwMjk1NgotOjEwNEJBMDAwMzAxMTJFMzAxMzAwOTkzMjAwRUQzMjY0RjBFRTJBMzBDRAotOjEwNEJCMDAwMTQxRkRGQkQwMEFBMzI3OEVGMDUwRjlFMDkyREU0N0Y5OAotOjEwNEJDMDAwMUVERkJCNjZBMDA1MEY5ODA5MkE4NDgwQjRBNzE4REZGMgotOjEwNEJEMDAwQjhDNzZGMDA5MTA0QUU5RURERTAwMEFGMUEwMEMzMUFBMwotOjEwNEJFMDAwNkVFMTA1MkRCMjAwMERFRDBDMUVERkIyMDhEODFDMDZEQgotOjEwNEJGMDAwMzMwM0FFODgyQTg0OEIyRUIwMkUyNzg0OEMwM0VFMDFEQgotOjEwNEMwMDAwMEZFRTAyMkVCNDJFNTgwMThGNjNGRjA0MjkzMTA4MjlCQwotOjEwNEMxMDAwMjUwNDI4MzAxNDJFMzEwOUIwODg2NDgwQTMyRTI0MEE3QwotOjEwNEMyMDAwQzA4MTJFMzAxNjJDQjQyMzJFMjQwQkI0RUYyRjI0MEM2RAotOjEwNEMzMDAwOEMzNzhCMzYyOTI1MDRERUIwREZDMDBGOEYzOTBFOEVGRQotOjEwNEM0MDAwMzkwRkVFMDI2NEVFQzkwODlGMTEwMUM0MDQ4RDM4MENCRgotOjEwNEM1MDAwQjgxODAwQzQwNDBDQkUxODAwRUUxMTBFREQwMkMwRTM0QgotOjEwNEM2MDAwMEVGRjAyMUVERjg3OUY3MTlFNzAxRURGODQ4RjIwOThDQgotOjEwNEM3MDAwNzM5RDc0MDVGRjExMEJDRDUzQzE4MDk4NzUwRkREMDIzNAotOjEwNEM4MDAwMEVERDAyOUQ3MjJBMjQ2NjFFREY0NDJGNjI5RDJBRTRGNwotOjEwNEM5MDAwQTIyRkZDMTgyRjY2OUQ2M0ZFNzYwMDAwMDAyRjMwMTJCNQotOjEwNENBMDAwMUJERjg2MDBGQTMyNzhGRjA1MEI5ODBCMkE4NDdGNjY5QgotOjEwNENCMDAwRDAwNTBCOUEwQjJEQTQ4MDJBMzAxMTAwQUEzMjYzRkY3NQotOjEwNENDMDAwNDQyRjI0MEE5RTJCNjNGRjU2Q0M1N0RBMjBEQjMwRENCRQotOjEwNENEMDAwNDA1ODA3MDNDMDIwRDEwRjAwREEyMEMwQjY1ODA3OTMxMAotOjEwNENFMDAwNjNGRkU1MDBEQTcwNTgwNjJCQzBBMDJBMjQ2NjYzRkUzNQotOjEwNENGMDAwMDdEQTIwNTgwNzhFNjNGRkNGQjE2OTI4MjAwQTg2MjA4MwotOjEwNEQwMDAwMDkwOTQ3OTkxMTI5MjQwNzk4MTA3RjgxMjY5M0UwMjdFNAotOjEwNEQxMDAwRTUwQTlBRTM4ODEwOURFMTE5REY2MjhEMTEwOTZGMDI5RgotOjEwNEQyMDAwOUZFNDJERTQxNjA5ODgwMkMwRDM5OEUyMkEyNDA3NjM4MQotOjEwNEQzMDAwRkU1MTAwMDAxRkRGMkIwODY5MTE4ODExOEQyQjkzRTBCNQotOjEwNEQ0MDAwMDk4ODAyQzA5Rjk4RTUwRkREMDIwNDc4MTE5REUyQzAzQQotOjEwNEQ1MDAwRjQ5RkUxQzBENDA5ODgwMjk4RTQ2M0ZGQ0UwMDAwMDAwQwotOjEwNEQ2MDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDg1MjEwRDM4MTE4NwotOjEwNEQ3MDAwMTRERjA4ODYyMkE0MjQwODY2MEM5NjIyMDUzMzBCOTNDMAotOjEwNEQ4MDAwMjE3NDNCMTNDODYyRDIzMEQxMEZDMDMwQkMyOTk5MjFBNQotOjEwNEQ5MDAwOTkyMDkzMjJEMjMwRDEwRjIzM0RGODkzMjE2M0ZGRTM3MgotOjEwNERBMDAwNkMxMDBBRDYyMDk0MTgxN0RFRkREOTMwQjgzODk4MTkzRgotOjEwNERCMDAwOTkxNDY1NTI1MkMwRTFEMkUwMkU2MTAyMURERUZBMEU1NgotOjEwNERDMDAwMEU0QzY1RTE2MzhGMzA4RTE5MEY2RjUxMkZGQ0ZENjUxRQotOjEwNEREMDAwRjE1NjhFRTEyOUQwMjMwRThGNTA3N0U2NkI4RjE4MUU4NwotOjEwNERFMDAwREYzN0IwRkYwRkY0MTEwRjFGMTQ2NTkwQ0UxOERGMzRCQQotOjEwNERGMDAwOEM2MEE4Q0NDMEIxMTlERUU4Mjg2MDBCMDlDQzBCMEQ4MwotOjEwNEUwMDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkFGNQotOjEwNEUxMDAwMzgxQkRGMkEwQ0E5MEEyOTkyOTQ3QjlCMDI2MDAwOEMyNAotOjEwNEUyMDAwMkI2MDBDOTQxNjBDQkQxMUE3REQyOUQyODZCODQ4NzlFOQotOjEwNEUzMDAwODMwMjYwMDBEMjE5REVEQTA5QjgwQTI4ODJBMzk4MTcyMwotOjEwNEU0MDAwNjg4MDAyNjAwMEEzNjAwMEE1MUFERjFFODQxODBBRUVDNQotOjEwNEU1MDAwMDFDQTk4MUJERUQxOEMxOTJCQjAwMDhDQzA2RUIzMTMyNQotOjEwNEU2MDAwMURERUNFMEMxQzUyMERDQzBCMkRDMjk1QzBBMTdFREJERAotOjEwNEU3MDAwQUU2MDAwMzgwQzBDNTM2MDAwMDkwMDAwMDAxOERGMTAxMQotOjEwNEU4MDAwOEM2MEE4Q0NDMEIxMTlERUM0Mjg2MDBCMDlDQzBCMEQxNgotOjEwNEU5MDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkE2NQotOjEwNEVBMDAwMzgwQ0E5MEEyOTkyOTQ3RTkzMDI2M0ZGNzJEQTYwQzBEQgotOjEwNEVCMDAwQkE1ODA3MUU2NDUwNzQ2MDAyNjYwMDAwMUFERUI3OEM5MAotOjEwNEVDMDAwMTkyQUEwMDA4Q0MwNkVBMzFBMThERUIzMEMxQzUyMDg1RAotOjEwNEVEMDAwQ0MwQjE4REVGQTJCQzI5NUMwQTE3OEIzMDI2M0ZGM0Y1QQotOjEwNEVFMDAwNjNGRkM5MDAwQzBDNTM2M0ZGMDk4OTYwNzg5OTE4Mjk4NgotOjEwNEVGMDAwRDI4NUM5OTIyQjcyOUUxRERFQTg2RUI4MjQyREQyMjZCMwotOjEwNEYwMDAwOTkxMzY5RDAwQzYwMDAwRURBNjA1ODA3MDg2MDAwMTgyOQotOjEwNEYxMDAwMDAwMDg4NjA3RDg5MEE5QTFBMjk3MjlEOUMxMjk5MTU1MQotOjEwNEYyMDAwQ0Y5NERBNjBDMEI2NTgwNzAxNjU1MUY0OEQxNDhDMTgxRgotOjEwNEYzMDAwREJEMDhERDBEQTYwMEQ2RDUxNTgwNTc0RDNBMDlBMTQ3MgotOjEwNEY0MDAwNjRBMUREODJBMDg1QTFCOEFGOUYxOTA1MDU0NzAyMDJDMwotOjEwNEY1MDAwNDc5NTE4QzA1MTYzRkU2MDJCNjEwNEMwOEM4OTMxQzAzNQotOjEwNEY2MDAwQTAwOUY5NTAwOThBMzg2RUI4MUYyQzYwNjZBMkNDMENEMwotOjEwNEY3MDAwMEM0NzJDNjQ2NjdDQUIxMTlGMTE5RTFCOEExNTU4MDU0QgotOjEwNEY4MDAwODU4RTFCOEYxMUMwQTAyQTY0NjY5RjExNjRGMEUxODk5MQotOjEwNEY5MDAwMTM4ODE5REVGMDZERTkxNzJGODEwMzAwOTA4REFFRkVBNgotOjEwNEZBMDAwMDA4MDg4OUY5MjAwOTA4QzAwODA4OEI4OTkwMDkwOEMzNwotOjEwNEZCMDAwNjU1MTRFOEExMDg1MUE4QjMwMUZERThBODgxMjI5NjA0RgotOjEwNEZDMDAwMDcwODU4MEEyQzgyOTQyRDYxMDQwRUNDMEMyQzg2OTQ3MAotOjEwNEZEMDAwNkZEQjNDMUNERUI0QUM5QzI5QzA4MDBCNUQ1MEEyOTlGOQotOjEwNEZFMDAwMDkwOTQ3MjlDNDgwNjVEMERBMkU2MDBDQzBEMDFGREVDNQotOjEwNEZGMDAwNzMwQ0U4MTFBNzg4MjI4Mjg1QUZFRTAyNDIwQjJERTRFNAotOjEwNTAwMDAwQ0YyMjg2ODVEMkEwRDEwRjhFMzAwRTBFNDc2M0ZEQTYyQgotOjEwNTAxMDAwQTI5QzBDMEM0NzJDNjQwNzdBQjZDRDhCNjAyRTYwMEFEQwotOjEwNTAyMDAwMjgwQUZGMDhFODBDNjQ4MTBFMThERTlEODMxNjgyMTM5RgotOjEwNTAzMDAwQjMzOTAyMzMwQjJDMzQxNjJEMzUwQUMwMjM5MjMxOUYxRAotOjEwNTA0MDAwMzBDMDIwOTIzMzA4QjIwMjA4RTgwMjkyMzQ5ODMyQzA4RAotOjEwNTA1MDAwODAyQjYwMEMyODY0MDdEMkEwMUNERTU4MENCRTExQTc2MAotOjEwNTA2MDAwRUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCMkRFNjg1RDE4RQotOjEwNTA3MDAwMEY4QjE4ODgxMzhEMzBCODhDMEQ4RjQ3MEQ0OTUwQjRBNQotOjEwNTA4MDAwOTkwNDk5MTAwRDBENUYwNEREMTAwOUZGMDI5RjgwMEQzQQotOjEwNTA5MDAwQkIwMjlCODE2NTUwOEQ4NTFBQjgzQUMwRjFDMDgwMEM2NwotOjEwNTBBMDAwRjgzODA4MDg0MjY0ODA2QjFCREUzOTE5REUzQTI5QjZFRAotOjEwNTBCMDAwN0U4RDE4QjBERDZEREEwNTAwQTA4ODAwQzA4Q0MwQTAyMAotOjEwNTBDMDAwNjNGRUYzMDAxRERFNEIyODYwMEE4MjEzOEIxNkMwRTBERQotOjEwNTBEMDAwMkVDNDgwMDJCMjBCMEQ4ODAyQjJCQjk5MjM5RjIwQzA2MAotOjEwNTBFMDAwRDI5ODIyOUQyMTIyNjAwQzBDMkQxMUE3REQyOEQyODU5QgotOjEwNTBGMDAwMDhCQjBCMThERTMyMkJENjg1QTgyMjJFMjRDRkQyQTBENwotOjEwNTEwMDAwRDEwRjlFMUI4NTFBMkE2Qzc0OEIxODVCRkYxNzhFMUJBMAotOjEwNTExMDAwNjNGRUEzMDBDMDg3QzA5MDBBRjkzODc5ODA5MjYzRkZDQwotOjEwNTEyMDAwODZDMDIwRDEwRjlFMUIyQTZDNzRDMEIxOEQxODU4MDUwMwotOjEwNTEzMDAwMjk4RTFCODUxQTYzRkU3RTg4NkI4MjEzODkxNjA4QkUzMgotOjEwNTE0MDAwMTEwRUNFMDIwMjkyMEI5RTI1QjQ5OTFFREUyNTlGMjBFMQotOjEwNTE1MDAwMEU4ODAyOTgyMkMwRUYwNEQ4MTEwRTg4MDI5ODI0QzA0RAotOjEwNTE2MDAwRTQ5RTIxQzA4MEQyQTAyQjYwMEMyODY0MDcxQ0RFMTNCMwotOjEwNTE3MDAwMENCRTExQTdFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEI2NAotOjEwNTE4MDAwMkRFNjg1RDEwRjAwMDAwMDZDMTAwNEMwMjBEMTBGMDA2NwotOjEwNTE5MDAwNkMxMDA0ODYzM0MwNzFDMDMwNjAwMDAxQjEzMzAwMzEzRgotOjEwNTFBMDAwMDQwMDc0MUEwNDYyMDE3NDYwRjFEMTBGNkMxMDA0MDJERgotOjEwNTFCMDAwMkEwMjAzM0IwMjVCRkZGNjFERERGQjFCREU0M0M3OUY5QwotOjEwNTFDMDAwODhCMDA5QTkwMzA5OEEwMTlBQjAyQkQxMDI3OTgwMUIwMgotOjEwNTFEMDAwMUNEREYzQzBFMDBFRTQzMTAwMDIwMDJBQzI4MjFEREVCNQotOjEwNTFFMDAwM0IwREFBMDIyQUM2ODIwQkU0MzFEMTBGQzFGMDBGQkZEQQotOjEwNTFGMDAwMDIwRjBGNEYyRkQ1MDIwRkU0MzFEMTBGNkMxMDA0MTJBNAotOjEwNTIwMDAwRERFOTFBRERFNkMwQzAwQ0U0MzEwMDAyMDAyOUEyODIwQgotOjEwNTIxMDAwMThERTMxMUJERTJGMjYyMTAyMEI5OTAxMDg2NjAxMjlCOQotOjEwNTIyMDAwQTY4MjI2MjUwMjA2RTQzMTE0REUyQzE1REUyNzIzNkEyOQotOjEwNTIzMDAwOTAyMzI2MTI4NTUwMjQyNjExMjUyNjEzMjIyQzQwRDE5NgotOjEwNTI0MDAwMEYwMDAwMDA2QzEwMDgxNkRFMjUyQjBBNjQyQzFBQjQxRgotOjEwNTI1MDAwMTdEREQ1MUREREQxMThERTIyMEYyRTExMEQyQTExQjI1QQotOjEwNTI2MDAwRTkwRUVFMTFBOEE4MEU5OTExQURBQUE3OTlBN0VFOUU3NgotOjEwNTI3MDAwMTY5OTExQUNBQTlBMTUyQzgwRkYyQTgwRkUyODhEMDE2MAotOjEwNTI4MDAwMjk4MDAxMDhBQTExMjg4MDAwMENBQTAyMDg4ODExMDlBNwotOjEwNTI5MDAwODgwMjA4QUExQ0I4ODgyODE2MDA1ODA4NUQyOTcxMTZDQgotOjEwNTJBMDAwOUExMjI5MTYwMzhBMTU4QjEyMkFBMDgwMEJBQTI4OEIyMgotOjEwNTJCMDAwMTA1ODA4NTdENDcwOEMxNjhCMTMxNURFMEEwQkFCMjhDOAotOjEwNTJDMDAwMjM1QzQxOUIxNDJCQzYyODJDMzA4MDcyQzkxNThDMTQ4QQotOjEwNTJEMDAwMkE1MEMwMkIzQTIwMENBQTI4NTgwODREQzBEMTBBREQwQwotOjEwNTJFMDAwMzcyRDQ1NDBCNDQ0QjI1NUIyMzM3NjM5REFCMjc3OEZCMAotOjEwNTJGMDAwMTE4RTE2ODgxNUI0RUVCMTg4OTgxNTlFMTY3RkU5QTQxNAotOjEwNTMwMDAwRDEwRjAwMDA2QzEwMDRDMDIxRDEwRjAwNkMxMDA2QzAzQQotOjEwNTMxMDAwNzAxQUREQTIxRUREQUQxREREQjMxQ0REQjUxQkREOUVFQgotOjEwNTMyMDAwMTNEREUxMjIwQTA4MThERDlGMTREREVGMjg4MDJFMjQwQQotOjEwNTMzMDAwNDAwMDI4MTYwMDZEMkE3MEEzNDkyODkwODBDMEYxNjRBRgotOjEwNTM0MDAwODA1OTg1MTAwMDQxMDRDMDYxMDA2NjFBMDY1NTAxMDVBOAotOjEwNTM1MDAwRjUzOTBDNTYxMTBBNjYwODJGNjI5NjZFRjc0RDBCNUZGMQotOjEwNTM2MDAwMEEyRkYyMjQ2OEYwMDgxMkRERDEwMjQyMDg3MkY5M0JEQwotOjEwNTM3MDAwMjM2Mjk1MEM0MjAyQ0IzNDkyMzJDMEYyOUQzMDlGMzFCMQotOjEwNTM4MDAwMEU4RjAyOUYzMzIzNjI5NUFCNTIyRjBBMDAyRjk0ODAxOQotOjEwNTM5MDAwMkYyNEEwMjMzQzEwMjM2Njk1MTNEREMyQjE3NzEyRERDNAotOjEwNTNBMDAwRDJCMTQ0MDQwNDQyMjQyNDAwRDEwRjAwRDEwRkQxMEYwNAotOjEwNTNCMDAwNkMxMDA0MUFERDc5MkFBMDAwNTgwMjFCNUJGRkQzMDI4RgotOjEwNTNDMDAwMkEwMjAzM0IwMjVCRkZDRjFCREQ3N0MwQzQyOUIxMDI3OQotOjEwNTNEMDAwQzhBQzBDOUMwMjBDMEM0RjJDQjUwMjBDRTQzMUQxMEY2NAotOjEwNTNFMDAwMUVERDZGQzA4MDA4RTQzMTAwMDIwMDJERTI4MjFGREQ2NwotOjEwNTNGMDAwODAwRkREMDIyREU2ODIwOUU0MzFEMTBGNkMxMDA0MTUxNwotOjEwNTQwMDAwREQ2NzE2REQ2OEMwMjAwMkU0MzEwMDAyMDAyNDUyODIwQwotOjEwNTQxMDAwMjI2MTAyNzM0RjA2MDJFNDMxQzAyMEQxMEYxOEREQjRCRgotOjEwNTQyMDAwMTlEREIzMDgyODAxMDk0OTAxMjk1NjgyMjg2NTAyMDhCNwotOjEwNTQzMDAwRTQzMTEzRERBOTIyNkM3MDIzNjYxREQxMEYwMDAwMDAzQQotOjEwNTQ0MDAwNkMxMDA0MjkyMDA2Mjg5Q0Y5NjQ4MEEwMkE5Q0ZENjUyNAotOjEwNTQ1MDAwQTA5NjhBMjg4RDI2MkYwQTA4N0FEOTA0MkIyMjFGQzhFNQotOjEwNTQ2MDAwQkQyQzIwNjQ2NEMwODEyRTIyMDkwRUFFMEM2NkUwNzg0QgotOjEwNTQ3MDAwMkIyMDBDMUVERDRBMENCQzExQUVDQzI4QzI4NjE5RERENwotOjEwNTQ4MDAwNDg3OEYzMDI2MDAwQTkwOUI5MEEyOTkyQTM2ODkwMDgzNAotOjEwNTQ5MDAwMkUyMjAwMDlFRTBDNjVFMDk3MjlDMjg1MUZERDUyNjRCQgotOjEwNTRBMDAwOTA4RTlGOTBDMEU0MUZERDVGOUU5MTI4MjAwQUMwRTA4RgotOjEwNTRCMDAwOUU5MzBGODgwMjk4OTI4ODIwMEY4ODAyOTg5NDJGMjAzQwotOjEwNTRDMDAwMDc5QTk3OUQ5NjJGOTUwQTJFMjQwNzI4MjAwNjI5MjBCMwotOjEwNTREMDAwNjQ2ODgzMkYyOEMyODUxMkREMzkyODhDMjBBMkIyMkU2MQotOjEwNTRFMDAwMjRDRjI4QzY4NUMwMjBEMTBGQzAyMEQxMEYyQTIwNkEyMgotOjEwNTRGMDAwMEEyQTQxNjVBRjU1REEyMEMwQjA1ODA1RDM2NEFGRTgzOQotOjEwNTUwMDAwQzAyMUQxMEY2NDlGQ0MxRkREMjcyRDIwMTY4RkYyMDlGQgotOjEwNTUxMDAwREQwQzAwRjEwNDAwREQxQUFEQUQ5RDI5MjhDMjg1MTIxNQotOjEwNTUyMDAwREQyNzI4OEMyMEEyQjIyRTI0Q0YyOEM2ODVDMDIwRDEwQQotOjEwNTUzMDAwMEZDMDIxRDEwRjAwMDAwMDZDMTAwNDI2MEEwMDFCRERGMwotOjEwNTU0MDAwNkQxNUREMTgyODIwNjUxN0REMTUyODhDRkU2NDgwOTQwNAotOjEwNTU1MDAwMEM0RDExQURCRDJDRDJGNTJCRDJGNDJBNTEwMjdDQjFFOQotOjEwNTU2MDAwNDIyQTUxMDJCNEJCMkVEMkY3MkJENkY0N0JFOTA1MkI4RAotOjEwNTU3MDAwRDJGNjJCRDZGNDdDQjkyQjI5RDJGNjI5RDZGNTI5RDYyQQotOjEwNTU4MDAwRjQwNkU0MzEwMDAyMDAyRjcyODJDNzlGMDA0MTA0QzA3QwotOjEwNTU5MDAwODEwMDg4MUEwOTg4MDMwOEZGMDEyRjc2ODIwQUU0MzEwNgotOjEwNTVBMDAwNjAwMDAwMDAyNjI0NjUyQkQyRjQ4RTVBMkNEMkY1QjA3MAotOjEwNTVCMDAwRUU5RTVBN0JDQjE2MjlEMkY2MkZEMkY3MENCODBDMDlFNwotOjEwNTVDMDAwRkYwQzA4RkYwQzBGMkYxNEM4Rjk2MDAwMkYwQkNEMEMzNwotOjEwNTVEMDAwMEQyRDE0Q0VENkMwRTIwRUFFMDIwRTBFNEYyRTU1MDI4OQotOjEwNTVFMDAwMEVFNDMxRDEwRkRCMzBEQTIwNUJGRjk1MUJERDQyNjQyNgotOjEwNTVGMDAwQUY1RDJBNTEwMjBDNEQxMUFEQkQ2M0ZGQTkwNkU0MzEyOAotOjEwNTYwMDAwMDAwMjAwMkU3MjgyMUZERDAwMEZFRTAyMkU3NjgyMEE0QgotOjEwNTYxMDAwRTQzMUQxMEY2QzEwMDQxNkRDRTExNURDRTJDMDMwMDM3QwotOjEwNTYyMDAwRTQzMTAwMDIwMDI0NjI4Mjc0NDcyMTE4REQzMzg3NUE3NgotOjEwNTYzMDAwMDg0ODAxMjg2NjgyQ0Q3MzE5REQzMTBDMkExMUFBOTkxOAotOjEwNTY0MDAwMjI5MjgzMjk5Mjg0NzI5MTAzODIyMENDMjkyQjUxMDJDOQotOjEwNTY1MDAwMEJFNDMxQzAyMEQxMEYwMDFGREQyQTJFNTEwMjBGRUVDNgotOjEwNTY2MDAwMDEyRTU1MDIwRUU0MzFCMDJEQjE3QzlDNUEyMjVDNjBCMwotOjEwNTY3MDAwMDhERDExMkQ1NjE5RDEwRjZDMTAwQTFBRENDNzFEREM3QwotOjEwNTY4MDAwQzkyM0EwMDAxOUREMjA2RjMzNzkxQ0REMDdDMDI4MTU2MAotOjEwNTY5MDAwREQxRjFFREQxRDJCMUMxMEQ0QjA4M0UwMDA1MDg2OTU0RAotOjEwNTZBMDAwMTAwMDQwOEE5NDE4NkQyQTRGMEYzNTExMEMzNDA5MjRDQwotOjEwNTZCMDAwNDA4MDBBNTYwQTI4NjI5NDBENTUwOTJGNTE0MDBGNDQyNAotOjEwNTZDMDAwMTEwQjQ0MEEwODk3MEMwRjc3MzY4RjQwMEY3NzM2MjI1QwotOjEwNTZEMDAwNTE0MTA3RkYwQzlGNDBBODc3MkY2Mjk1Mjc2Njk0MEZEMgotOjEwNTZFMDAwOTgwQzAyODgzNjg3NDEwNzg4MzZCMTMzMDg3NzBDQUZBQgotOjEwNTZGMDAwOEYyRjY2OTU5NzQxMDMwMzQyQjEzODA4MDg0Mjk4RTAxRQotOjEwNTcwMDAwRDEwRjAwMDAxQ0REMDMxNEREMDNCRkM1MjQ0MkI1NjRDNgotOjEwNTcxMDAwMzA1NUMwOTFDMEQwMTZERDAwMDQ4ODQzMkJDMDAwQzBCNgotOjEwNTcyMDAwNDA2RDM5M0UwMDQxMDQwMDk3MUE3NzgwMTYyRkEyOTVFQwotOjEwNTczMDAwOEU1MEFGRUUyRUVEMjAwNkVFMzY5RTUwMkRBNjk1NjBEMwotOjEwNTc0MDAwMDAxQTAwMDA3N0IwMDk4MzUwOUQ1MDIzQTY5NTYwMDA5MQotOjEwNTc1MDAwMDIyM0EyOTUyMjNEMjAwNjIyMzYyMkE2OTVCMTQ0QjQwQQotOjEwNTc2MDAwNTVCOEFBMjhDNDAwRDEwRjA0ODg0MzI4QzQwMEQxMEYxQgotOjEwNTc3MDAwNkMxMDA0MTVEQ0VBMTNEQ0VBQzA0MDA0RTQzMTAwMDJEQQotOjEwNTc4MDAwMDA4ODUwQ0I4MTVCRkZCQzFDRENFNzBDMkQxMUFEQ0MzRAotOjEwNTc5MDAwMkJDMjgyMkFDMjgzOTQ1MDdCQUIxNDJFQzI4NDI5QzJBRQotOjEwNTdBMDAwODUwQUJEMEMwRTk5MEMwRDk5MEMwOTI5MTQ2MDAwMDU5MQotOjEwNTdCMDAwMEJBOTBDMDkyOTE0OTkzMDE1REM3QjJBNTEwMjBBRTQ0MwotOjEwNTdDMDAwMzEyQTJDRkM1ODAwNDkyQjMyMDAxRURDNzQyQkJDRkYwNAotOjEwNTdEMDAwMkIzNjAwQ0NCNUM4QTNEMkEwRDEwRjAwRDJBMDA0RTREMAotOjEwNTdFMDAwMzEwMDAyMDAyREUyODIyQzUxMDIyRkJBRkYwRkREMDFBMQotOjEwNTdGMDAwMkRFNjgyMENFNDMxRDEwRjZDMTAwNEQxMEYwMDAwMDBCMwotOjEwNTgwMDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDEzRENDN0MwRDE5MQotOjEwNTgxMDAwMDMyMzA5MjMzMThEQzBBMDZGMzQwMjYwMDA4OTFCREM5MwotOjEwNTgyMDAwNjFDN0NGMThEQ0MwMEMyOTExQTk4ODI2ODI4MzI1ODI4NAotOjEwNTgzMDAwODIxOURDNUE3NjUxNDQyNzUyMDAyRTgyODUyNTVDMDQ1OQotOjEwNTg0MDAwMjU4NjgyNzVFOTA1MjU4Mjg0MjU4NjgyNzY1OTU0MjYyNwotOjEwNTg1MDAwODI4NEQ1NjAyNjg2ODIyNjg2ODMwQUU0MzEwMDAyMDA4RgotOjEwNTg2MDAwMjM5MjgyMkZCMTAyMDAyMTA0MDBENDFBMEM0NDAzMDRCNQotOjEwNTg3MDAwMzMwMTIzOTY4MjBGRTQzMTYwMDAwMjAwRDdBMDc2NTlFRAotOjEwNTg4MDAwMjIwQUU0MzEwMDAyMDAyRTkyODIwMDIxMDQyOEIxMDI5MwotOjEwNTg5MDAwMDBERjFBMENGRjAzMEZFRTAxMkU5NjgyMDhFNDMxRDJDRQotOjEwNThBMDAwNzBEMTBGMDBEMjcwRDEwRkMwMjBEMTBGNkMxMDA0REI2QgotOjEwNThCMDAwMzA4NjIwMTVEQzM5MjgwQTAwMjgyNTAyREEyMDI4QjA5NQotOjEwNThDMDAwMDAyQ0IwMDcwNTg4MEEyODgyNEMyRDBBMDEwQjgwMDBBNQotOjEwNThEMDAwREJBMDY1QUZFNjFBREMzMjBBNEEwQTI5QTJBM0M3QkZEOQotOjEwNThFMDAwNzY5MTAxRDEwRjJCQTZBM0QxMEYwMDAwNkMxMDA0QzAzQwotOjEwNThGMDAwRDFDN0NGMUJEQzJDQzBBMDE4REMyODBDMjkxMUE5ODgyQgotOjEwNTkwMDAwODc4NTg1ODQxOURDMjY3NzUxNzk4NjUwOEU4N0I0NTUzMgotOjEwNTkxMDAwOTU4NDc1RTkwMzg1ODY5NTg0Nzc1OTZDOEY4NjlGODU3NAotOjEwNTkyMDAwOUY4NDBBRTQzMTAwMDIwMDIzOTI4MkI0MkUwMEUxMDQzNQotOjEwNTkzMDAwMkZCMTAyMDBENDFBMEM0NDAzMDQzMzAxMjM5NjgyMEZDMgotOjEwNTk0MDAwRTQzMTBBRTQzMTAwMDIwMDIzOTI4MjAwRDQxQTBDNDRBQwotOjEwNTk1MDAwMDMwNDMzMDEyMzk2ODIwRkU0MzFEMjYwRDEwRjAwMDA5QgotOjEwNTk2MDAwMEFFNDMxMDAwMjAwMjM5MjgyQjQyODAwODEwNDIyQjFBQgotOjEwNTk3MDAwMDIwMEQ0MUEwQzQ0MDMwNDMzMDEyMzk2ODIwMkU0MzE1QQotOjEwNTk4MDAwRDJBMEQxMEZENkEwNzc1MUQ2RDI2MEQxMEYwMDAwMDA5RgotOjEwNTk5MDAwNkMxMDA0MjcwQTgwMUNEQzI4MUREQzI4MUFEQzAwMEM5MwotOjEwNTlBMDAwMjkxMUFBOTkyQTJDRkMyQjkyODUwREFBMDI5Q0IxOUE0NgotOjEwNTlCMDAwQjBDMDUxMTNEQzI1Mjg5Mjg1MTZEQzIxMTREQzIyQTYwOAotOjEwNTlDMDAwMjYwNDI0MEFCODg4Mjg5Njg1MjM0NjkxQTc2NjI1NjQ2QwotOjEwNTlEMDAwOUZEMTBGMDA2QzEwMDQxOURDNTUwQzJBMTFBOUE5ODk1QwotOjEwNTlFMDAwOTBDNDg0Nzk4Qjc2MUJEQzQ1QUJBQzJBQzI4MzJDQzI3NQotOjEwNTlGMDAwODQ3QUMxNjg4QUEwMkJCQzMwRDNBMDY0QTA1RTBCMkIzNAotOjEwNUEwMDAwMEEyQ0IyQTMxOURDMEY2OEMwMDcxRERDNDlEMzBGN0QzNwotOjEwNUExMDAwQzk0QUE5MjkyOTlEMDEyOTkwMUY2ODkxMzI3MEE2MDNCRQotOjEwNUEyMDAwRDNBMENBOUU2ODkyMTBDN0FGMkFCNkEzMkEyQ0ZDNUJFQgotOjEwNUEzMDAwRkZBRkQyMzBEMTBGMDAwMDEzREJFRjAzQTMwMThDMzE5NQotOjEwNUE0MDAwMUREQkUwMEM4QzE0MERDQzAxMkNCNkEzNjNGRkRDMDAzNQotOjEwNUE1MDAwQzAyMEQxMEZEQTIwNUJGRkNFQzAyMEQxMEZDMDIwRDFGMwotOjEwNUE2MDAwMEYwMDAwMDA2QzEwMDREQjMwQzBEMDE5REJDQkRBMjA1MwotOjEwNUE3MDAwMjgzMDAwMjIzMDA3MDg0ODEyMDk4ODBBMjg4MjRDRENBNgotOjEwNUE4MDAwMjAwQjgwMDAxQkRCQzYwQzRBMTFBQkFBMjlBMjg0MDk5QgotOjEwNUE5MDAwMjkwQjI5QTY4NEQxMEYwMDZDMTAwNEMwNDExOERCQkY2QwotOjEwNUFBMDAwMTdEQkMxMEMyNjExQTcyNzI3NzAzMEE4NjYyNTYyODY1MAotOjEwNUFCMDAwMDA3MTA0QTM1NTAwNDQxQTc1NDE0ODIyNjI4NDE1REIyNQotOjEwNUFDMDAwRTIwMjMyMEJDOTIyODgyMTE3REJCRTA4ODQxNDA3NDQ4NgotOjEwNUFEMDAwMDE3NTQ5MDVDODM0QzAyMEQxMEZEMTBGMUREQzE1QzA5OAotOjEwNUFFMDAwQjI4RTIwMUZEQkFEMEUwRTQzQUZFQzBGRUUwQTJCQzRCRgotOjEwNUFGMDAwQTAyREU2MjRDMDIwMkE2Mjg0MDgwOTQ3MEE5OTBCMjlCMAotOjEwNUIwMDAwNjY4NEQxMEZDMDIwRDEwRjZDMTAwNERCMzBDMEQwMThEOAotOjEwNUIxMDAwREJBMkRBMjAyNTMwMDAyMjMwMDcwODU4MEEyODgyNEMwMAotOjEwNUIyMDAwREMyMDBCODAwMDg5MzE3MDlFMTIxQkRCOUMwQzRBMTExQgotOjEwNUIzMDAwQUJBQTI5QTI4NDA5MjkwQjI5QTY4NEQxMEYwOUM5NTIyRAotOjEwNUI0MDAwNjg1MzI2MDA5MTA0MThEQjk3QzBBMTJGODExMjAwQUE4OAotOjEwNUI1MDAwMUEwQUZGMDIyRjg1MTIxRURCOTEwQzREMTFBRUREMkNBRgotOjEwNUI2MDAwRDI4NDBDMkMwQjJDRDY4NEQxMEZDMDgxMUZEQjhFQjhCNQotOjEwNUI3MDAwOUEwQTBBNDcwMEExMDQyRUYxMTIwMDg4MUEwOEVFMDJDMAotOjEwNUI4MDAwMkVGNTEyMUREQjg2MEM0QzExQURDQzJCQzI4NDBCMkJEOQotOjEwNUI5MDAwMEIyQkM2ODREMTBGMDAwMDZDMTAwNERCMzBDMEQwMTk3MQotOjEwNUJBMDAwREI3RURBMjAyODMwMDAyMjMwMDcwOTg4MEEyODgyNEM2MAotOjEwNUJCMDAwREMyMDBCODAwMDFDREI3OTBDNEIxMUFDQkIyQUIyODRCRgotOjEwNUJDMDAwMEEyQTBCMkFCNjg0RDEwRjZDMTAwNEMwNDExOERCNzM2QgotOjEwNUJEMDAwMTZEQjc1MEMyNzExQTYyNjI2NjAzMEE4NzIyNTIyODZCMgotOjEwNUJFMDAwMDA2MTA0QTM1NTAwNDQxQTc1NDEwODIyMjI4NDAyMzI0MAotOjEwNUJGMDAwMEJEMTBGMDBDMDIwRDEwRjZDMTAwNDE1REJDRTAyNDk3MQotOjEwNUMwMDAwMTQyOTU2MTEyNDUyMTJDMDczMDIwODQzMEY4ODExMDA0MAotOjEwNUMxMDAwODEwNDAwMzYxQUM3OEYwMDc3MUEwODc3MDMwNzQ0MDFGQQotOjEwNUMyMDAwMDY0NDAyMjQ1NjEyRDEwRjZDMTAwNkMwQjA2RTIzMDIzNwotOjEwNUMzMDAwNjAwMEEyNjQyMDlEODUxMDEzREJBQTE2REJCRUMwNDA2NQotOjEwNUM0MDAwQTZCQTJCQTJBRTBCMTk0MTY0OTA1RTY4OTE1NTY4OTI3QQotOjEwNUM1MDAwNEE2ODkzMzcyOTMwRkYyODMwRkUyQUEyQUEwODg4MTEwMwotOjEwNUM2MDAwMEEwQTREMkFBQ0YyMDk4ODAyNzU4OTQ0MkIzRDAxMjlBNAotOjEwNUM3MDAwQjAwMDJCQjAwMTA4OTkxMTBCOTkwMjdBOTkzMkI4MzMxMAotOjEwNUM4MDAwMkIyQTAwQjE0NDcyNDlCNzYwMDA0ODAwN0ZCRjA1MTU1OAotOjEwNUM5MDAwREJBQTYzRkZCRTI1M0FFODYzRkZCODAwMjUzQUU4NjM1NAotOjEwNUNBMDAwRkZCMTAwMDAyNTBBNjQ2M0ZGQTlDMDVBNjNGRkE0MDA4NgotOjEwNUNCMDAwMDA3MDVGMDgyNTM0RkYwNThDMTQyQzM0RkU3MEFGMEI4OAotOjEwNUNDMDAwMEE4RDE0MkUzRDAxMkFFNDAxMkRFNDAwREE0MDVCRkQyQgotOjEwNUNEMDAwNUQ2M0ZGQTlEMTBGRDEwRjZDMTAwNDFBREIzMjE5REIwMQotOjEwNUNFMDAwMkYxQ0RCOTYxQkRCOTdDMDgwQzA3MTYwMDAwRDAwMDA4RAotOjEwNUNGMDAwMDAyMkE0MzBCMUFBMjk5QzEwN0I5MTVGMjY5Mjg2Nzk1QwotOjEwNUQwMDAwQzIxNUMwMjA2RTYyRTk2RDA4MEFCMTIyMDAyMTA0MDBBQwotOjEwNUQxMDAwNzQxQTc2NEJEQjYzRkZFRTIyOTI4NTBENjMxMTAzMjUyNwotOjEwNUQyMDAwMTQ2NDVGQ0ZENjUwMDMyRDQzNkREOTAzOTgyMEI0MjI1RAotOjEwNUQzMDAwMDY0NDE0NkQ0OTIyOTgyMDk4MjE5ODIyOTgyMzk4MjQ4QgotOjEwNUQ0MDAwOTgyNTk4MjY5ODI3OTgyODk4Mjk5ODJBOTgyQjk4MkM0RgotOjEwNUQ1MDAwOTgyRDk4MkU5ODJGMjIyQzQwNjNGRjk3MUVEQjEwMjczQQotOjEwNUQ2MDAwRTY4MDI3RTY4MUQxMEYwMDZDMTAwNEMwNjJDMDQxMTJBQQotOjEwNUQ3MDAwREIwRDEzREI3NDIzMzIyRDFBREIwODE5REI2RTJBQTAyRQotOjEwNUQ4MDAwMDAyOTkyQUU2RUEzMDI2MDAwOTEyOEFDRkUwOTBENDA3RQotOjEwNUQ5MDAwMkMxQUMyQzJCRDBEQ0IzOTJCMjUxNjY0ODA4OTVCRkYzRQotOjEwNURBMDAwQTIxNURCNjkxQURCMTQyQjNBRTgwQTNBMDE1ODA1OTg2OAotOjEwNURCMDAwMkIyMTE2MEFCQjI4RDNBMDJCNTYwMDU4MDVBRjhCNTBCOQotOjEwNURDMDAwMEFCQjA4MkEwQTAwNTgwNUFFMTVEQjYwMkQyMTAyMkNGQgotOjEwNUREMDAwM0FFODBDM0MyODA0REQwMjJEMjUwMjlDNTA1ODA1QTYwQgotOjEwNURFMDAwOEI1MEFBQkJDMEExNTgwNUE2MUNEQjU5MkQyMTAyMEM2MwotOjEwNURGMDAwM0MyODA2REQwMjEzREI1NzJEMjUwMjlDMzA1ODA1OUVGQQotOjEwNUUwMDAwOEIzMEFBQkJDMEEyNTgwNTlFMkEyMTAyQzBCNDBCQUE5RgotOjEwNUUxMDAwMDIwQTBBNEYyQTI1MDI1ODA1QjJEMTBGMjQyNDIzQzNBRgotOjEwNUUyMDAwQ0MyQzI1MTY2M0ZGNzYwMDE4REI0RjFDREI0QjE5REJFRgotOjEwNUUzMDAwNEMxQkRCNEExN0RCMUY4NTIwMkUwQUZEMUZEQjRCMkQ3OQotOjEwNUU0MDAwMjAyRTI0RjQ3QTI0RjQ3RTI0RjQ4MjBFREQwMTI0RjQzRQotOjEwNUU1MDAwODYyRTBBRjcwNzU1MjgwNkREMDJDMDc1MEVERDAxMDVGRQotOjEwNUU2MDAwMDUwNkFCNUJBOTU5QzBFOEFDNUMyNEM0QUIwRUREMDJFRgotOjEwNUU3MDAwMjdDNEFDMkUwQURGQTg1NTI3QjRFQzBFREQwMTI0QjRFQwotOjEwNUU4MDAwRUJDMkUwMjc5NDJDMEVERDAyMjQ5NDJCMkUwQTgwMEQwOQotOjEwNUU5MDAwMEQ0NjI3NTQ2QzI0NTQ2QjBFREQwMjJEMjQyRTYzRkUxOAotOjEwNUVBMDAwRkMwMDAwMDA2QzEwMDRDM0EwQzBCMzVCRkY1M0MwNEFFOQotOjEwNUVCMDAwMTJEQjIxQzM4MDI4MjYxNjI0MjYxN0MzQTFDMEIzNUI5QQotOjEwNUVDMDAwRkY0RUMwM0NDM0ExMkEyNjE2MTlEQUI2Mjk5MDIwMjMxQQotOjEwNUVEMDAwMjYxNzY0OTA4RjJBMEEzMjJCMEEwMTVCRkY0N0MzQTI2MAotOjEwNUVFMDAwMkIwQTAxNUJGRjQ1QzNCMjJCMjYxNjIzMjYxN0MyQUYzMAotOjEwNUVGMDAwQzBCMTVCRkY0MUMyRkYyRjI2MTZDMEVFMkUyNjE3QzI4RgotOjEwNUYwMDAwRDIyRDI2MTZDMEM4MkMyNjE3MjQyNjExMkEyMjEyQzdFNQotOjEwNUYxMDAwQjMwQkFBMDFDMEI0MEJBQTAyMkEyNjEyMjkwQUExMjk4RQotOjEwNUYyMDAwMjYxNkMxODIyODI2MTdDMEIzMkIyNjExMkUyMjEyMUYzNwotOjEwNUYzMDAwREFDQTBGRUUwMjJFMjYxMkMzRDYyRDI2MTYyQTBBQTI4MAotOjEwNUY0MDAwQzFDMzJDMjYxNzVCRkYyQzJDMEFBMjJDMjYxNkMxQjUyOAotOjEwNUY1MDAwMkIyNjE3QzJBQjJBMjYxNkMwOTcyOTI2MTcxOERCMDM1MwotOjEwNUY2MDAwMjgyNjEwRDEwRkMzQTJDMEIzNUJGRjIzNjNGRjZFMDBDRQotOjEwNUY3MDAwNkMxMDA0MUNEQUNFMUJEQUJCMThEQUZEMTdEQUZFMTYzOQotOjEwNUY4MDAwREFGRTE1REFGRUMwRTBDMEQ0MTREQUNBMUZEQTg2MjJCRgotOjEwNUY5MDAwMEEwODJGRjIwMDZEMkEzNkRBQzBEOUMwN0M1QjAyMEZFNgotOjEwNUZBMDAwQzkwQzFDREFDMzBDOUMyOEE4QzNBNkMyMkEzNjgwMkFCNgotOjEwNUZCMDAwMjU4NEE0QzJBN0NDMkQyNDhDMkIyNDhBMkIyNDg3MkVBNQotOjEwNUZDMDAwMjQ4QkIxQkIyRTM2OUYyQzM2OUUyQzM2OURCMUFDMUMzQgotOjEwNUZEMDAwREFBNTFCREFFQkMwMjg2RDJBMzNEQUMwRDlDMDdDNUJBNgotOjEwNUZFMDAwMDIwRkM5MEMxQ0RBQjMwQzlDMjhBOEMzQTZDMjJBMzYxRgotOjEwNUZGMDAwODAyQjI1ODRBNEMyQjFCQkE3Q0MyRDI0OEMyRTI0OEI0RQotOjEwNjAwMDAwMkEyNDhBMkUzNjlGMkMzNjlFMkMzNjlEQjFBQ0MwNzkyMAotOjEwNjAxMDAwMTlEQUEzMUJEQURFMTNEQURCMUFEQURCMThEQUREMTQ5RAotOjEwNjAyMDAwREFBNDE2REFEQzA0RjQyODEyREFEQzA0NjYwQzA0MDVCRgotOjEwNjAzMDAwMDZBMjUyQTg1OEFBNUFBMzUzOUIzMDI5QTUwMDI3ODQyOAotOjEwNjA0MDAwOEFDMDkxQzBBNTJBODQ4QzI5ODQ4QjE3REFENTE4REFFNgotOjEwNjA1MDAwRDNBNzU3MjYzNjFEMjYzNjFFMkUzNjFGMTZEQUQyMTMyNAotOjEwNjA2MDAwREFEMkE2NTUwNDMzMEMyODI2QzgyRTc1MDAyRDU0QUM2MAotOjEwNjA3MDAwMkU1NEFCMkU1NEFBMjMyNkU2MjMyNkU1MkUyNkU3RDE1RQotOjEwNjA4MDAwMEYwMDAwMDA2QzEwMDYxM0RBQUYxN0RBQUEyNDcyM0Q3NQotOjEwNjA5MDAwMjIzMjkzN0YyRjBCNkQwODA1MjgzMjkzN0Y4RjAyNjM4NgotOjEwNjBBMDAwRkZGM0MwQzRDMEIwMUVEQTNGQzA2MUQ5NDAwOTY5MzlFRQotOjEwNjBCMDAwMjlFNDIwNkU0NDAxRDZCMEMzMjhERkIwMjZFNDIyMDZDRQotOjEwNjBDMDAwMkYzOTJGRTQyMUMwNTAxRkRBQjkxOURBQUExNkRBQUIzQQotOjEwNjBEMDAwMThEQTc5OTQxMDJBNzI0NThERTAxN0RBQTU5RDExMUQwMgotOjEwNjBFMDAwREFCNDZEQTk0QkQ0NTAyNTVDMDM3QTVCMThERTUwNzU4OQotOjEwNjBGMDAwNkIwNTJFMTIwMTBFNUUwQzEyREE2RTAyRTIyODAxMTFGRgotOjEwNjEwMDAwMDJBRjIyMjJENjgxRDU0MDEzREE2QTc0NkIwNTI1MTJCQwotOjEwNjExMDAwMDEwNTQ1MEMwMzUzMjhCMTQ1QTgzRUE5MzJBNzMzMjJGNwotOjEwNjEyMDAwMzY5RDIyMzY5RTI0MzY4MDJCMzY5RjJCRTQ4QjJDRTQyMgotOjEwNjEzMDAwOEMxNERBODQyNDQyNERDMDMwMDQxNDE0Qzg0QzZEMDgwOQotOjEwNjE0MDAwMDZCMTMzMDQxNDE0Qzg0MjYzRkZGMjAwMTZEQTEzQzQxNAotOjEwNjE1MDAwNDBDMTU4MDAzMTA0MUFEQTEzQzBCMTkzQTIwMEJCMUEyRgotOjEwNjE2MDAwQjBCQjlCQTMxOERBNzgyOTgyNEQyMzgyNEUyODgyNTMzNAotOjEwNjE3MDAwN0E4NzFDMkM2NDAwOEMxMDZGQzQ0ODFFREEwQTA0M0QxOAotOjEwNjE4MDAwMEMyREU1MUMyRkUxMUQyREU1MUEyRkU1MUJEMTBGMDA2RAotOjEwNjE5MDAwQzA3MjEyREE2ODgyMjA3RTI3REIwMzAzNEYyNzY0MDA3NwotOjEwNjFBMDAwODgxMEMwNjE2Rjg0MzBDMEEwMDMxOTE0MEE1NDM5MUFEMgotOjEwNjFCMDAwRDlGRDA0OTkwQzI5QTUxQzI5QTUxRDI5QTUxQTI5QTVENQotOjEwNjFDMDAwMUJEMTBGMDAxQ0Q5RjgwNTNCMEMyQkM1MUMyREMxMUQ4NAotOjEwNjFEMDAwMkJDNTFBMkRDNTFCRDEwRjA2NTQzOTAzMUUxNDA0RUUwRQotOjEwNjFFMDAwMEMyRUE1MUMyRUE1MUQyRUE1MUEyRUE1MUJEMTBGMDAwOQotOjEwNjFGMDAwNkMxMDA4MUFEOUVDMTREQTRGMTNEQTUyQzcyRkMwNTBCQQotOjEwNjIwMDAwMTZEQTZDMjU2NkE4MjU2NkE5MjU2NkFBMjU2NkFCMjIzRQotOjEwNjIxMDAwMzYyOTJCNDI0NTE5REExM0Q4MTAxQ0RBNjZDMEQ0OURGMgotOjEwNjIyMDAwMTE5QzEwMDA4MDg5MEI5OTBDOTlBMDI4MTYwMjVCRkYyNQotOjEwNjIzMDAwOTUyQTMyRTMxRkQ5REMwQTVBMTQ5QUY0MjkzMkU0QjFDMAotOjEwNjI0MDAwOTkwOTU5MTQwQTk5MEM5OUY1MjgzMkU1MDg1ODE0OThCNwotOjEwNjI1MDAwRjYyRTMyQ0QwRTVFMTQyRUY2MDc1QkZGNDU1QkZGMTE2NgotOjEwNjI2MDAwMjI0NjNCMUNEOUQwMkFDMTAyQzFCMDBCQUEwMjFCREFCQwotOjEwNjI3MDAwMkEwQTBBNEYyQUM1MDIyQjQ2M0E1ODA0OTk1QkZFQkFFRAotOjEwNjI4MDAwNUJGRTk1QzBCMDg2MTMxN0Q5QzUyNTM2MkRDNzRFQzAwNQotOjEwNjI5MDAwMzA5NDE0QzA1MDE0RDlDQTYwMDA0MzAwMDA3RjlGMEY4RgotOjEwNjJBMDAwQjE1NTA5MTkxNDY1OUZGNEMwNTAwQUE5MDI3RkE3RUZFMAotOjEwNjJCMDAwMThEOUJBREE1MDA4NTgwQTI4ODIyQzJCMEEwMDBCODAwOQotOjEwNjJDMDAwMDAwMDUxMDREMkEwQzA5MUM3QUYwMDk5MUEwQTk5MDNFNwotOjEwNjJEMDAwMjkxNjA0Q0UzMzY0MjA2M0QzMjAyQjIwMDdENjUwOEM5QwotOjEwNjJFMDAwMTQyQTcyODI3Q0E4NUMxOEQ5QUMwODU4MEEyODgyMkMxRgotOjEwNjJGMDAwREE1MDBCODAwMEQyQTA2NDNGREE4QTMxMEE4QTE0MDQ5MwotOjEwNjMwMDAwQUEwMUM4MkEyQjIyMDEwQjhCMTQwNEJCMDE3QUI5NDBDNQotOjEwNjMxMDAwRERBMDZFQTEwODFERDlBMzJERDIwMDBEQUQwQ0RCMzA4MAotOjEwNjMyMDAwREM2MDFBRDlFMzE4RDk5QzBBREEyODA4NjgwQTFEREE1MQotOjEwNjMzMDAwMUYyODgyM0NBREFBMEI4MDAwNjUyRjlCRDMyMEMwQjBFNAotOjEwNjM0MDAwNjNGRjlCMDBDQTVDQjE1NTAwNTAwNDBBMDkxOTYzRkY0MgotOjEwNjM1MDAwNEJEQ0IwNkVCMTA5MUNEOTkzOENDMEQzMEYwQ0JDMENCNAotOjEwNjM2MDAwMUREOUQ0MUVEQTEyMERDRDI4QUVERDFFREExMTJERTZCMAotOjEwNjM3MDAwODE2M0ZGOUI3RkE3Q0U2M0ZGNkMwMDAwNkMxMDA0MUI0MgotOjEwNjM4MDAwRDk4NzI3MjIxRUMwODAwOEU0MzEwMDAyMDAyQUIyODI4OQotOjEwNjM5MDAwMTlEOTg1MDAzMTA0QzA2MTAwNjYxQTI5OTEwMjBBNkE4MAotOjEwNjNBMDAwMDIyQUI2ODIwOUU0MzExNUQ5REYwQzM4MTFBODUzMjgyNgotOjEwNjNCMDAwMzI4MjI0MzI4NDJBOENGQzc4NDExMDI5MjEwMjJBMzYyOAotOjEwNjNDMDAwODI5N0EwMDk2OTAyMjkyNTAyRDEwRjAwMkIyMTAyMkNGNgotOjEwNjNEMDAwMzI4NTBCNkIwMjJDQ0NGQzJDMzY4Mjk3QzAyQjI1MDIwRAotOjEwNjNFMDAwRDEwRjAwMDA2QzEwMDZDMEM3MUJEOTY4MUFEOTZBMERGRQotOjEwNjNGMDAwNEUxMUQ3MjA4ODIwODUyMkQ5ODAwNTQ1MEIwMjgyMENCQQotOjEwNjQwMDAwOTU3MjIyMkNGNEM4MzQ2RjJFMDI2MDAwQUIxRkQ5NjA0NQotOjEwNjQxMDAwQTlFMkFGN0Q3MkQzMzRDOTNEQzAyMTJGMEEwMDA5MkZGNAotOjEwNjQyMDAwMzgwRjBGNDJDOUY5MkFCNjdFNkQ0QTA1MDAzMDg4MDA0MAotOjEwNjQzMDAwOTA4QzIyNzIwMDAyRTIwODcyRDE3NDkyNzBEMjgwRDFFNAotOjEwNjQ0MDAwMEZDMDUwMDMyNTM4NzVDMERGNjNGRkQ5MDk3RDBDQUYzRAotOjEwNjQ1MDAwREQwREVFMEM2NDMwNEVEMjMwMEQzRjEyOTYxMTJGMTYyQQotOjEwNjQ2MDAwMDAyRkZDMTAwRjRGMzYyNjBBMDEyNTBBMDAwOTY1Mzg1NwotOjEwNjQ3MDAwMDUwNTQyNjQ1MDcxMkFCNjdFNkRGQTA1MDAyMDg4MDAzOQotOjEwNjQ4MDAwOTA4Q0MwNTBBM0QyODkxMDIzN0MwQzA5NDQwQzI5MEE5QgotOjEwNjQ5MDAwMDEwMzk1MzgwNTA1NDI2NDUwNUEyQUI2N0U2RDRBMDVCNwotOjEwNjRBMDAwMDAyMDg4MDAzMDhDRDI4MEE3RUFCQ0FBOUE3MEQxMEY1NQotOjEwNjRCMDAwRDI4MEJDN0I5QjcwRDEwRjAwMDIzRjE0QzFEMEQyMzA4MAotOjEwNjRDMDAwMEZERDBDMEQ0RDM2Mjk4RDA4QzBGMTI1MEEwMDA5RjVBOAotOjEwNjREMDAwMzgwNTA1NDJDQTU4MkFCNjdFNkREQTA1MDAyMDg4MDBDNAotOjEwNjRFMDAwOTA4Qzg5NzA2M0ZGMjUwMEMwNjFDMDUwMDM2NTM4NzVDQQotOjEwNjRGMDAwQzA4NjYzRkY4MEMwRDAwMjlEMzg3REMwOUY2M0ZGOTkzNgotOjEwNjUwMDAwQzA1MDAzRjUzODc1QzBEMDYzRkZDQTAwNkMxMDA0RDZDNAotOjEwNjUxMDAwMjA2ODUyMEY2OTUzMjREQTIwREIzMERDNDA1ODAwRjA0OQotOjEwNjUyMDAwRDJBMEQxMEZEQTIwREIzMERDNDA1ODAwRUQ5QTI0MjREMQotOjEwNjUzMDAwMjQwRUMwMjEyMjY0MEZDMDIwRDEwRjAwQjgzQkIwNEMwNAotOjEwNjU0MDAwMkEyQzc0ODkyNDJEMjAwRTJFMjAwRkE0RERCMUVFMkVDRQotOjEwNjU1MDAwMjQwRkIwREQyRDI0MEUyODkwMDcyRDkwMDNBNDg4QjBDMQotOjEwNjU2MDAwODhCMUREMkQ5NDAzMjg5NDA3NUJGRjlFNjk1MTFEQzBGRgotOjEwNjU3MDAwRTA4MjI0MkE2MDBGMThEOTkwMkEyNDAzMjk2MDBFOEYwNAotOjEwNjU4MDAwMjAyOTI0MDcwOEZGMDI5RjIwOUU2NEQxMEZDMDIwRDEzQwotOjEwNjU5MDAwMEYwMDAwMDA2QzEwMDQ5NDIzMTlEOTg4QzBCMzA4M0E4NgotOjEwNjVBMDAwMTEwQkFBMDI5OTIwMTlEOEZEOUEyMTI4OTI5RDE2RDg3QwotOjEwNjVCMDAwRkFDMDUwMjU2NEEyMjg4QzE4Mjg5NjlERDEwRjAwMDA5RgotOjEwNjVDMDAwNkMxMDA0MjgyMDY2QzAzODIzMjQwNkI3ODgyODI0NjY2NwotOjEwNjVEMDAwRDEwRjAwMDA2QzEwMDYwMzVBMEMwRDM2MTEwRDVDMTEyMgotOjEwNjVFMDAwRDgyMDhCMjI4MjIxMENCQjBDMDY1NTBGOUI4MjAyMzJENQotOjEwNjVGMDAwMEI5MjgxMTNEOEU3RDkyMEEzOEY2NDUwNTMxQ0Q4RTNBMgotOjEwNjYwMDAwQzBENzFCRDhFNEEyNTZDMEUxMjkwQTAwMDRFOTM4MDkyMgotOjEwNjYxMDAwMDk0Mjc2RjM0QTA0NDMwMkM5OUUyQkM2N0U2REFBMDU0MQotOjEwNjYyMDAwMDAyMDg4MDAzMDhDODk4MUE5NTkwOUZBMEM2NEEwNzk2RQotOjEwNjYzMDAwOTk4MThBODJDOEFERDI5MEQxMEZDMDYwMDJFNjM4NzZDNwotOjEwNjY0MDAwRDBEQTYzRkZENEMwMjBCQzg5OTk4MTk5ODA5MjgyRDEyRAotOjEwNjY1MDAwMEY3RjIzMDQyOTJERjg5OTgxNjVCRkQ5NjNGRkU1MDBEOQotOjEwNjY2MDAwMDI4RjBDQTNGRjBGMzMxMjkzMTAwM0FBMENEMzQwQ0I1RAotOjEwNjY3MDAwOUUyQkM2N0U4NjEwNkQ2QTA1MDAyMDg4MDAzMDhDQkM3QgotOjEwNjY4MDAwODIyOTBBMDAwNEYzMDgyNDBBMDEwMzQ5MzgwOTA5NDI0RgotOjEwNjY5MDAwQ0E5ODJCQzY3RTZEQUEwNTAwMjA4ODAwMzA4QzBGNTk0MQotOjEwNjZBMDAwMENBOTg5QkM5OTk5ODE2M0ZGODdCQzg5OTk4MTYzRkY5MwotOjEwNjZCMDAwODBDMDYwMDJFNjM4NzZEMEJBNjNGRkI0QzA3MDAyNDc4QgotOjEwNjZDMDAwMzg3N0QwRDA2M0ZGQ0EwMDZDMTAwNDE0RDhDMEMxNTIxMAotOjEwNjZEMDAwQTQyNEM5M0UyODIyMUQ3MzgxMTkyOTIxMDJDRDkzMkFBMQotOjEwNjZFMDAwMzAwMDc1QTkxMkRBMjBEQjMwMkMzMDA3QzBEMjU4MDFGNwotOjEwNjZGMDAwQzQ2NTNGREZEMTBGMDAwMDJCMzAwNzAzQkIwQkRBQjBCRQotOjEwNjcwMDAwNzRCMzAyMkFCREY4RDNBMDYzRkZDNjAwNkMxMDA0MjkzRAotOjEwNjcxMDAwMjAwNkMwNzA2RTk3NDEyOTIxMDJDMDhGMkEyMDE0QzAyNAotOjEwNjcyMDAwQjYyQjI0MDYwNkFBMDIyQTI0MTQ3OTgwMDIyNzI1MDIwMQotOjEwNjczMDAwMkEyMjFFMkMyMjFEN0FDMTBFQzhBQkRBMjBEQjMwMkM5NwotOjEwNjc0MDAwMEEwMDAzM0QwMjVCRjgyMjY0NTA3NTJEMjEwMjBEMERGNQotOjEwNjc1MDAwNENDOUQzQzAyMEQxMEYwMDAwMkU5Q0ZCNjRFMDgyMkZENwotOjEwNjc2MDAwMjEwMjBGMEY0QzY1RjA5MTFBRDg4RDFDRDg4QjI5QTJFRAotOjEwNjc3MDAwOUVDMDhBNzk4QjVEMkJDMjI2NjhCMDA0OEQyMDdCRDlBMAotOjEwNjc4MDAwNTIyOUEyOURDMEYzNjQ5MDRBOTc5MDFERDg5RTJFMjE1NQotOjEwNjc5MDAwMDQ5RDk2MDhFRTExMEZFRTAyOUU5NzlFOTEyN0M0QTJDQgotOjEwNjdBMDAwMThEODlBMkYyMTAyMkJBMjlEQzBFNTJFMjQwNjJCQkNCRgotOjEwNjdCMDAwMzAwOEZGMDIyQkE2OUQyRjI1MDJDMDIwRDEwRjAwMDAxQwotOjEwNjdDMDAwMDAyRjMwMDA2OEY5MzhEQTIwREIzMERDNDA1ODAwNDQxNAotOjEwNjdEMDAwNjNGRjc3MDAwMjJBMDIyQjBBMDY1ODAwRDQyMjBBMDAxRgotOjEwNjdFMDAwRDEwRjY1NTAxMDI4MzAwMDY4ODkyNDAyMkEwMjAzM0IyQgotOjEwNjdGMDAwMDJEQzQwNTgwMDNCQzAyMEQxMEZEMjcwRDEwRjAwMDAwNgotOjEwNjgwMDAwMkEyQzc0MDMzQjAyMDQ0QzAyNUJGRUY2NjNGRjNCMDA0MAotOjEwNjgxMDAwREIzMERDNDAyQTJDNzQ1QkZFRjNDMDIwRDEwRjAwMDA3QgotOjEwNjgyMDAwNkMxMDA0QzgzRjg5MjY4ODI5QTM5OTk5MjYwOTg4MENFOQotOjEwNjgzMDAwMDgwODQ4MjgyNTI1Q0M1MkMwMjBEMTBGREI0MDJBMkMzRgotOjEwNjg0MDAwNzQ1QkY5NDlEMkEwRDEwRjZDMTAwNEQ4MjBENzMwODJFNAotOjEwNjg1MDAwMjIwRDQ1MTEwNTIyMEM5MjgyNjQyMDc0MDc0MjBCMTMwRAotOjEwNjg2MDAwRDg0Q0Q0MjBBMzgzNzMyMzAyMjQyREY4ODU4MDc0NTEzRgotOjEwNjg3MDAwNENCQzgyQzA5MDZEMDgxNjAwNDA4ODAwNzA4Qzc3MzkzRgotOjEwNjg4MDAwMDNENzIwQzA5MTg2ODA3NDM5MDFENDIwNzQ2MTAyNjNEQgotOjEwNjg5MDAwRkZFMkNBOThDMDk3QzA0MTFCRDhDQUMwQTAwQjhCMEM5RQotOjEwNjhBMDAwMEI0QTM4MEEwQTQyQzlBQTFERDgzOTFDRDgzQTJDRDYzNAotOjEwNjhCMDAwN0VDMTQwRDMwRjZENEEwNTAwMjA4ODAwMzA4Qzk3ODA0MAotOjEwNjhDMDAwRDI3MEQxMEZCQzhGQzBFMDBGNEUzODdFOTBFMjYzRkZENAotOjEwNjhEMDAwRDZCQzgyOTI4MTkyODBDMDIwOTI4MkQxMEYwMDAwMDBBQgotOjEwNjhFMDAwNkMxMDA2QzBENzFDRDgyOTFCRDgyQjBENDkxMUQ3MjBGNgotOjEwNjhGMDAwMkEyMjFGMjgyMjFEMEE0QTBCRDI4MDA3ODYwQzJBNzZEQwotOjEwNjkwMDAwMUYyNjZDODBDODM0NkY2RTAyNjAwMEQwMkYwQTgwMUE3OAotOjEwNjkxMDAwRDgyRkEyOUVBQTdBN0VBMzNGQzkzRkMwRTFDMDUwMDJGMQotOjEwNjkyMDAwRTUzODA1MDU0MkNBNTUyQkM2N0VEQjIwRDMwRjZENEFEQwotOjEwNjkzMDAwMDUwMDMwODgwMEIwOEMyRTcyMURBRTlFMEVBNTBDNjQzMgotOjEwNjk0MDAwNTA4QUQyODAyRTc2MURDMDkxMjk4NDAzRDEwRkMwNTA2OQotOjEwNjk1MDAwMDNFNTM4NzVEMEQzNjNGRkNEMTVEODFDMDI3RTBDQTU5NgotOjEwNjk2MDAwRUU2NDMwNTVEQTMwMEUzNTEyOTYxMjk1MTEyNTVDMTAxMgotOjEwNjk3MDAwMDU0NTM2QzA2MTk1MTBDMDUwMDI2NTM4MDUwNTQyNjQ3MgotOjEwNjk4MDAwNTA4OTJCQzY3RTg1MTBEMzBGNkQ1QTA1MDBBMDg4MDA1NAotOjEwNjk5MDAwMjA4Q0MwQTFBM0UyQzA1MDIzRkE4MDAzNzMwQzAzQTU4RQotOjEwNjlBMDAwMzhBRjczMDUwNTQyNjQ1MDcyMkJDNjdFODUxMTA1NDVDQwotOjEwNjlCMDAwMEM2RDVBMDUwMDIwODgwMDMwOENEMjgwQzBBMTBFOUIzRgotOjEwNjlDMDAwMENBQjdCQUZCQjJCNzYxRDJBODQwM0QxMEZEMjgwQzBDQQotOjEwNjlEMDAwQzFBRjdEMkQ3NjFEMkM4NDAzRDEwRjAwMDAwNjNGMTQxRQotOjEwNjlFMDAwQzFFMEQyMzAwRkVFMEMwRTRFMzYyQThEMDhDMEYxMjVENAotOjEwNjlGMDAwMEEwMDBBRjUzODA1MDU0MkNBNUMyQkM2N0U2REVBMDUxOQotOjEwNkEwMDAwMDAyMDg4MDBBMDhDMjI3MjFENjNGRUZGQzA2MUMwNTA3MAotOjEwNkExMDAwMDM2NTM4NzVEODAyNjNGRjZCNjNGRjY1QzA1MDAyQTUzQwotOjEwNkEyMDAwMzg3NUQwODc2M0ZGODEwMEMwNjAwM0Y2Mzg3NkQwQ0MxQwotOjEwNkEzMDAwNjNGRkM2MDA2QzEwMDQyQTIwMTUyOTIwMTYxNEQ3RDkyQwotOjEwNkE0MDAwMEE5OTBDQ0I5RDJFMjAwQjA0RUQwOTJCRDExQzA5QkNGRgotOjEwNkE1MDAwMzZBQ0FBMENCQjBDMkJENTFDMEEwQTQ3MkEyNDE1Q0IzMgotOjEwNkE2MDAwQTE4QjQzOEYyODg5NDJCMEE4MDA5MTA0MDA4ODFBQThGRQotOjEwNkE3MDAwRkYwRkJCMDI5QjI3OEYyNjBGQjgwQzc4M0IxQUMwMjA1NAotOjEwNkE4MDAwRDEwRjAwMDAyOTIxMDJDMEEyMEE5OTAyMjkyNTAyQzBDMwotOjEwNkE5MDAwMjFEMTBGMDA4QjI3NjNGRkRDMkJEMTFDMENBQTBDMEEyMQotOjEwNkFBMDAwMEE0NzJBMjQxNUFDQkIyQkQ1MUNDOUFFOEI0MzhDMjhCNgotOjEwNkFCMDAwOEY0MkIwQUQwMEYxMDQwMEREMUFBRENDMENCQjAyOUJERgotOjEwNkFDMDAwMjdEQTIwQjdFQjU4MDAxOUMwMjFEMTBGOUYyNzYzRkZBOQotOjEwNkFEMDAwRUYwMDAwMDA2QzEwMDQyODIwM0M2NDMwNDcwNTMwNjA1MwotOjEwNkFFMDAwMDAwNzNFMDEwNTNFQjE1NjA3NjUzOTA1NDkyOEM3N0ZCNQotOjEwNkFGMDAwQTkzMzAzMDY0MTA3NjYwM0IxNjYwNjA2NDFBNjMzN0U0NQotOjEwNkIwMDAwODcxRTIyMjEyNTI5MUFGQzczMkIxNTAyMzgwQzA5ODFCNgotOjEwNkIxMDAwNjAwMDA2M0UwMTAyM0VCMTI0MDY0MjM5MDMyMjBBRDEzQQotOjEwNkIyMDAwMEZEMjMwRDEwRkMwNTE2M0ZGQzAwMDAwNkMxMDA0MURBNAotOjEwNkIzMDAwRDc5QjI3MjIxRUMwODAwOEU0MzEwMDAyMDAyQ0QyODI5RAotOjEwNkI0MDAwMUJENzk5MDAzMTA0QzA2MTAwNjYxQTJCQjEwMjBDNkM4RQotOjEwNkI1MDAwMDIyQ0Q2ODIwQkU0MzExOUQ4MUIwQzNBMTFBQTkzMjhDNwotOjEwNkI2MDAwMzI4Mjk3ODAyNTMyODIyNDMyODRCNDU1MjUzNjgyNzU0QwotOjEwNkI3MDAwNDEwQTI5MjEwMjA5NjkwMjI5MjUwMkQxMEYyQTIxMDI4RAotOjEwNkI4MDAwMkIzMjgzMEE2QTAyMkIzNjgyMkEyNTAyRDEwRjAwMDA5QgotOjEwNkI5MDAwNkMxMDA0MURENzgyMTlENzhDMjcyMjFFQzA4MDA5Nzc1QwotOjEwNkJBMDAwMDIwOEU0MzEwMDAyMDAyQ0QyODIxQkQ3N0UwMDMxMDQ5RgotOjEwNkJCMDAwQzA2MTAwNjYxQTJCQjEwMjBDNkMwMjJDRDY4MjBCRTQ2OQotOjEwNkJDMDAwMzExOUQ4MDAwQzNBMTFBQTkzMjgzMjgyOTc4MDI1MzJDNQotOjEwNkJEMDAwODIyNDMyODRCNDU1MjUzNjgyNzU0MTBCMkEyMTAyMEE1QgotOjEwNkJFMDAwNkEwMjJBMjUwMkQxMEYwMDJCMjEwMjJDMzI4MzBCNkI2MwotOjEwNkJGMDAwMDIyQzM2ODIyQjI1MDJEMTBGMDAwMDAwNkMxMDA0MUJFMgotOjEwNkMwMDAwRDc2NzBDMkExMUFCQUEyOUEyODZCNDM4Nzk4QjIyMUIyQwotOjEwNkMxMDAwRDc2NDE5RDc4QjBCMkIwQTJCQjJBMzA5MjkwODY4QjBBQwotOjEwNkMyMDAwMDI3NEI5MEQyOTlEMDEyOTkwMUY2RTkyMDgyMkEyODUzOAotOjEwNkMzMDAwRDEwRkMwMjBEMTBGQzg5MkMwMjBEMTBGREEyMDVCRUY1NgotOjEwNkM0MDAwM0RDMDIwRDEwRjAwMDAwMDZDMTAwNDE0RDc1NDI4NDIxRQotOjEwNkM1MDAwOUUxOUQ3NTE2Rjg4MDI2MDAwQjkyOTkyMjY2ODkwMDc2MwotOjEwNkM2MDAwOEEyMDA5QUEwQzY1QTBBQjJBNDI5REMwREM2NEEwQTNCRgotOjEwNkM3MDAwMkIyMDBDMTlENzRCMENCQzExQTRDQzJFQzI4NjA5QjkwMQotOjEwNkM4MDAwMEE3RUQzMDI2MDAwOTkyOTkyQTM2ODkwMDc4RDIwMDk5QgotOjEwNkM5MDAwREQwQzY1RDA4QjI1QzI4NTY0NTA4NTJEMjEwNEMwMzA2NAotOjEwNkNBMDAwNkVEODBEMkMyMDY2QjhDQzBDMEM0NzJDMjQ2NjY1QzAyMQotOjEwNkNCMDAwN0ExQUQ3NTIxQ0Q3NUIxREQ3NDgxRUQ3NEZDMDg0OTg2RAotOjEwNkNDMDAwNTE5RTUwODkyMDlENTY5RDU0OTM1NzkzNTU5QzUzMEEyRAotOjEwNkNEMDAwOTkwMjFDRDdCRDFBRDc2NDk5NTI4RjI2OTk1QTk4NTk5MAotOjEwNkNFMDAwOUU1ODkzNUU5QzVEOTM1QzlBNUIwRjBENDgwNUREMTE4OQotOjEwNkNGMDAwOUQ1RkMwRDgxRUQ3MzIwQ0I5MTFBNDk5Mjg5Mjg1QUVEOQotOjEwNkQwMDAwQkUyM0U0Q0YyODhDNDAyODk2ODU5RjI5MkQyNDA2QzBEOQotOjEwNkQxMDAwMjBEMTBGMDBDQTMyREEyMEMwQjY1QkZGODRDNzJGRDE2MgotOjEwNkQyMDAwMEZDOTM5REEyMDVCRkY4MUM3MkZEMTBGREJEMDVCRkVBMwotOjEwNkQzMDAwMTkyMzI0NjYyQjIwMEM2M0ZGNzZDNzJGRDEwRkM3MkY5MgotOjEwNkQ0MDAwRDEwRjAwMDA2QzEwMDRDODVCMjkyMDA2Njg5NDFDNjhGMQotOjEwNkQ1MDAwOTYwN0MwMjBEMTBGQzAyMEQxMEZEQTIwREIzMERDNDBGNQotOjEwNkQ2MDAwREQ1MDJFMEEwMDVCRkU2OUQyQTBEMTBGMkUyMDBDMTgzOAotOjEwNkQ3MDAwRDcwQjBDRUYxMUE4RkYyOUYyODZDMDg4Nzk4Qjc1MUEwMgotOjEwNkQ4MDAwRDcwODBBRUEwQTJBQTJBMzY4QTAwNDhCMjA3QUI5NjQ2OQotOjEwNkQ5MDAwMjNGMjg1NjQzMDVFMUNENzEyMkEwQTgwMkQyMDY4MjlEMAotOjEwNkRBMDAwMjA2NzI4MjEwNDBCOTkxMTA0ODgxMTA5ODgwMjA4REQ0NQotOjEwNkRCMDAwMDJDMDk0Mjg0QTEwMDhERDAyMThENzBBOTkzMTk4MzA4OQotOjEwNkRDMDAwOEIyQjlBMzc5RDM0MENCQjAyOUIzMkMwQzA5QzM1OUNFOAotOjEwNkREMDAwMzYyQTJDNzREQjQwQzBEMzE4RDZGOTI5RjI4NUE4RUVFOAotOjEwNkRFMDAwMjk5QzIwMjlGNjg1MkNFNENGMkQyNDA2REQ0MDVCRkQ2RgotOjEwNkRGMDAwRjlEMkEwRDEwRkRBMjBEQkUwNUJGRjRDQzAyMEQxMEYyRAotOjEwNkUwMDAwNkMxMDBBRDYzMDJBMjAwNjk0MTAyOEFDRjg2NTgzRkY0RgotOjEwNkUxMDAwMkIyMTIyMjcwQTAyMkEyMTI0Q0M1NzJBQUMwMTBBMEE1NAotOjEwNkUyMDAwNEYyQTI1MjQ3QUJCMDI2MDAzRjcyQzIxMDIyQTIwMEM2QQotOjEwNkUzMDAwMEMwQzRDNjVDMzhFMkUyMjE1OEQzMkMwRjEwRUREMEM2QwotOjEwNkU0MDAwNjVENDA0ODgzODFFRDZENTY0ODNFMThGMzdDMEM4QzBBNgotOjEwNkU1MDAwOTYwRkM5Mzk5OTE0QjQ5QjlCMTEwRDk5MTE5OTEzQzlCNwotOjEwNkU2MDAwRkIxOUQ2RDAyOTkwMjE3RjkzMTM4QjE0OEMyMDVCRkZDNAotOjEwNkU3MDAwNjMxRUQ2Q0FEREEwNjRBNDFDOEY2NzYwMDAyOThDMTEzNAotOjEwNkU4MDAwMENBRDExQUVERDI4RDI4NjBBQUIwMjc4Q0I2MjFBRDZFMQotOjEwNkU5MDAwQzQwQUJBMEEyQUEyQTM2OEEwMDUyQzIyMDA3QUM5NTAwMwotOjEwNkVBMDAwMkFEMjg1RERBMDY0QTNENzI5MjEyRTA5RjkzNjJBMjAwQwotOjEwNkVCMDAwM0MwOUY4MEM2RjhEM0VEN0YwQ0I3RjI4MjExRjA4NzA1RQotOjEwNkVDMDAwNjAwMTBCM0UwMDA0M0VCMUJDMDRDQjM5Qzc0RjBCQkI4NQotOjEwNkVEMDAwMEEwN0JCMEEwQjBDNDEwNENDMDNCMUNDMEMwQzQxQUMyRgotOjEwNkVFMDAwQkJENEIwQzBDMjdDQTA0QzJBMjEyNTdCQUI0NjYwMDAzRAotOjEwNkVGMDAwMkNDMEEwNjNGRkFDRDc5MDYzRkZCRDAwQzA5MkM3NEYwQQotOjEwNkYwMDAwMkM3QzE0MEMwQjQxMDRCQjAzQjFCQjBCMEI0MUFCNzRDOQotOjEwNkYxMDAwMjQ0QzE0NzlBMDFFMkEyMTI1NzRBQjE4QUNCQjI0MUE2QQotOjEwNkYyMDAwRkMwQUJDMEMwNEMxNjAwMDA5M0UwMTA0M0VCMTQ4MDlFMgotOjEwNkYzMDAwODQzOTBCNDQwQTg5MjY4ODI3MDk4ODBDNzQ4MzFEQzA2QwotOjEwNkY0MDAwODA5OEQ4OEM2NDlDRDk4QjY2OEE2NTlCREI5QURBOTc4QgotOjEwNkY1MDAwRDU3RjczMDI2MDAxM0FDRTVFNjAwMDE2MDA5RDE1REE5RgotOjEwNkY2MDAwMjBEQjQwNUJGRUI0OEQxNTFFRDY4RDY1QTI1NjhGNjc2MwotOjEwNkY3MDAwNjNGRkNCOUQxNURBMjBEQjMwOEMxMDVCRkU1OThEMTUzRAotOjEwNkY4MDAwMUVENjg3QzA1MUQ2QTA4RkE3QzBDMDhBNjg5N0REOUE0OQotOjEwNkY5MDAwREM4ODY5ODk2QTk4REU5OURGOEI2QThBNjlBQjdCNzdCRQotOjEwNkZBMDAwQkIwMjJBQUMwMTlCNkE5QTY5ODg2MEMwQTAwODhCMTQ1NgotOjEwNkZCMDAwNzc4NzAxQzBBMUMwOTAyODIwM0M5NDE3OTUxODkzMTY5QwotOjEwNkZDMDAwQzA1MEMwMzFDMDQ0MDQ4NDAxMDQzOTM4MDg5OTEwQzA0RAotOjEwNkZEMDAwNDIwNDg0MDEwNDM1MzgwODM4NDA4MzJCMEJBNDEwMDc4MQotOjEwNkZFMDAwNTUxMDJBMjExRjA5NTUwMjA1NDQwMjBCMTk0MDBBMkE4RgotOjEwNkZGMDAwMTQwNzk5MTAwNTg1MTAwNDMzMDIwQTg4MTExNEQ2RjM3QQotOjEwNzAwMDAwMDk1NTAyMjkyMTA0MDQzMzAyMDg5OTExMDk4ODAyQzA5NAotOjEwNzAxMDAwOTIwOTg4MDIyOTIxMjU5M0QwMDkyOTE0MDQ5OTExMEE3QgotOjEwNzAyMDAwOTkwMjA5NTUwMjhBMjA4OTE0MDhBQTExMEE5OTAyMUE5QwotOjEwNzAzMDAwRDY2RjE0RDZFNzBBOTkwMjk5RDE4MzJBOTVENjk4RDdBNAotOjEwNzA0MDAwODUxODA0MzMwMjkzRDQ4NDE3ODMxNjhBNjU4RDY2QUE0MwotOjEwNzA1MDAwQ0FBRDdENzdEQjAxQjFBQTA3RkYwQzlBNjU5RDY2ODhGMgotOjEwNzA2MDAwMjY4QzI5QTQ4ODA4Q0MwQzk4MjYwQzBDNDgyQzI1MjVBNQotOjEwNzA3MDAwOUY2NzJBMjAwQ0MwQzAxQkQ2NTEwQ0E5MTFBRTk5QUIzQQotOjEwNzA4MDAwQUIyODkyODUyQ0I0Q0Y4QjEzQUI4ODI4OTY4NTYzRkRGMwotOjEwNzA5MDAwQ0QwMEMwOTFDMEYwQzBCMkMwQzQ4ODYwMjMyMDNDOTgyRAotOjEwNzBBMDAwMTIwQzNDMDEwQjNBMDEwODg4MTQwQjg4MDEwQTlGMzgyNgotOjEwNzBCMDAwMDdGRjEwMDg5ODM5QzBBMDBDOUEzODA3ODgxMDA4QUE1MgotOjEwNzBDMDAwMTAwQUZGMDJDMEE4MEEzMzAxMDM5MzM5MkEyMTA0MjlCOAotOjEwNzBEMDAwMjEyNTA1M0MxMDA4Q0MwMjBBMzMxMTA4QUExMTA5MjkwMAotOjEwNzBFMDAwMTQwM0FBMDIwNDk5MTEwQkFBMDIyQjIxMUY4MzE0MEI2QgotOjEwNzBGMDAwMkIxNDBCOTkwMjBDOTkwMjhCMjAxQ0Q2M0MwOEJCMTE1NwotOjEwNzEwMDAwMDNCQjAyMENCQjAyODMyQThDMkI2NDcwODQ4ODY4OTdCMwotOjEwNzExMDAwREQ5OERDODc2OTg4NkE5N0RFOThERjg4MTJDMDcwNzcwRgotOjEwNzEyMDAwODcwMUMwNzE5QkQxOTlENjBCNzgxMDlBRDcxN0Q2QTkzMQotOjEwNzEzMDAwMDhGODAyMDhDODAyMDc4ODAyMTdENkE1OThEMDA3MzdCMgotOjEwNzE0MDAwMDI5N0Q0MjgyMDBDMjk1Q0ZFMkIyMTI0QzBGMDFBRDZFQgotOjEwNzE1MDAwMUIwQzhEMTFBRUREMkNEMjg1QUE4ODJGODRDRjhGMTMwNgotOjEwNzE2MDAwQjBCQkFGQ0MyQ0Q2ODUyQTIyMTUyQjI1MjRCMUFBMkE1OAotOjEwNzE3MDAwMjYxNTY0OTBEQ0M4NEY4QzI2OEIyOUE0Q0M5QzI2MEM0OQotOjEwNzE4MDAwQkIwQzBCMEI0ODJCMjUyNTY1NTBFOEMwMjBEMTBGMDAwOAotOjEwNzE5MDAwMDAwMEMwNzA5QkQxOTlENjlBRDc4ODEyOTNENDc3ODc3NAotOjEwNzFBMDAwMEUxOEQ2MDA5MjFBMjg4MDIyQzAyMTA4MjczODgyMUE4OQotOjEwNzFCMDAwMThENjhBMEI3MzEwMDNGMzAyMDNDMzAyMDgzMzAyOTMzOQotOjEwNzFDMDAwRDA2M0ZGN0UwMENDNTdEQTIwREI2MDhDMTA1QkZEQzRGRgotOjEwNzFEMDAwMjkyMTAyNjg5ODA2Njg5NDAzQzAyMEQxMEYyQjIyMUUzMwotOjEwNzFFMDAwQzA5MDI4MjIxRDI5MjUwMjdCODkwMUMwQjA2NEJGRTgxOAotOjEwNzFGMDAwMTNENUVBMkNCMDA3MjhCMDAwREEyMDAzODgwQTI4ODJDOQotOjEwNzIwMDAwNENDMEQxMEI4MDAwREJBMDY1QUZFNzYzRkZDQTAwMDA3NAotOjEwNzIxMDAwNjhBNzc1REEyMERCMzBEQzQwREQ1MDVCRkVDQUQyQTAwNwotOjEwNzIyMDAwRDEwRkMxRkRDMTlEMjkyNTJDNjAwMDAzMDAyRjI1MkMwNQotOjEwNzIzMDAwMkYyNDY3MjcyNDY4REEyMERCMzA4QzEwREQ1MDJFMEFEQgotOjEwNzI0MDAwODA1QkZEMzJEMkEwRDEwRkMxRjhDMUE4MkEyNTJDNjNFMgotOjEwNzI1MDAwRkZEREM4NEY4QzI2OEIyOUE0Q0M5QzI2MENCQjBDMEJDNQotOjEwNzI2MDAwMEI0ODJCMjUyNTJBMkM3NERCNjAyQzEyMDA1QkZENzY0NQotOjEwNzI3MDAwRDJBMEQxMEYyQTJDNzQ4QjEwNUJGNkJCRDJBMEQxMEZGOQotOjEwNzI4MDAwREEyMDVCRkUyQTYzRkYzQzAwREEyMEMwQjE1QkZFNkVCMQotOjEwNzI5MDAwNjVBRjMxNjNGQjc5REEyMDJCMjAwQzVCRkUzRDYzRkY4OQotOjEwNzJBMDAwMjMwMDAwMDAxMkQ2NEU4MjIwMDI4MjU3QzgyMTYzRkZCRAotOjEwNzJCMDAwRkMxMkQ2NEEwM0U4MzAwNEVFMzAwNUIxMzA5MzIwOTQzNgotOjEwNzJDMDAwMjE5NTIyNjNGRkZDMDAwMDEwRDY0NjkxMDA5MjAxOTNBNQotOjEwNzJEMDAwMDI5NDAzMTFENjFEODIxMDAxRUEzMEEyMTEwMUYwMzE4RgotOjEwNzJFMDAwQzA0MDA0RTQxNjAwMDIwMDExRDYzRjgyMTAyMzRBMDA3OQotOjEwNzJGMDAwMDMyMjAyOTIxMDExRDYwOUMwMjE5MjEwMDRFNDMxODRCNQotOjEwNzMwMDAwMDM4MzAyODIwMTgxMDAwMEQyMzAwMTIzMDAwMDAwMDBDQgotOjEwNzMxMDAwMTBENjM2OTEwMDkyMDE5MzAyOTQwMzExRDYwQzgyMTA3QwotOjEwNzMyMDAwMDFFQTMwQTIxMTAxRjEzMUMwNDAwNEU0MTYwMDAyMDA2QwotOjEwNzMzMDAwMTFENjJEODIxMDEzRDVCNDAzMjIwMjkyMTAwNEU0MzEyOQotOjEwNzM0MDAwODQwMzgzMDI4MjAxODEwMDAwRDMzMDAxMzMwMDAwMDBGNgotOjEwNzM1MDAwMTBENjI3OTEwMDgxMDE2NTEwNDk4MTAyNjUxMDQ0ODE5MgotOjEwNzM2MDAwMDNDRjFGOTIwMTkzMDI5NDAzMTFENUZBODIxMDAxRUExMAotOjEwNzM3MDAwMzBBMjExMDFGMjMxQzA0MDA0RTQxNjAwMDIwMDExRDYxRgotOjEwNzM4MDAwMTk4MjEwMTNENTlCMDMyMjAyOTIxMDA0RTQzMTg0MDM2NgotOjEwNzM5MDAwODMwMjgyMDFDMDEwOTEwMzkxMDI5MTAxODEwMDAwRDQwNwotOjEwNzNBMDAwMzAwMTQzMDAxMkQ1Q0FDMDMwMjgzNzQwMjgzNzQ0Mjg1RQotOjEwNzNCMDAwMzc0ODI4Mzc0QzIzM0QwMTcyMzNFRDAzMDIwMDYzRkY0OQotOjEwNzNDMDAwRkMwMDAwMDAxMEQ2MEI5MTAwOTIwMTkzMDI5NDAzMTE2RgotOjEwNzNEMDAwRDYwOTgyMTA5MjEwMTFENUJDODMxMDAzMjIwMjkyMTA5QwotOjEwNzNFMDAwMTFENjA2MTJENUNEOTIxMEMwNDAwNEU0MTYwMDAyMDA1QQotOjEwNzNGMDAwMTFENUZEODIxMDEzRDVCNTAzMjIwMjkyMTAwNEU0MzE5OQotOjEwNzQwMDAwODQwMzgzMDI4MjAxODEwMDAwRDUzMDAxNTMwMDAwMDAxMwotOjEwNzQxMDAwNkMxMDAyNkUzMjJGRDYyMDA1NkYwNDA0M0YwNDc0NUI5QgotOjEwNzQyMDAwMkEwNTQ0MEMwMDQxMDQwMDMzMUEyMjBBMDA2RDQ5MEQ1QwotOjEwNzQzMDAwNzM2MzA0MDM2NjBDQjEyMjBGMjIxMTAzMTMxNDczNjNFOAotOjEwNzQ0MDAwMDIyMjJDMDFEMTBGQzgzQkQxMEYwMDAwNzM2MzBDQzA4NgotOjEwNzQ1MDAwMjFEMTBGMDAwMDAwMDAwMDQ0NDk1NjMwQzAyMEQxMEY1OAotOjEwNzQ2MDAwNkMxMDAyMDA0MDA0NkI0QzA3MDMyMzE4MDIwMjE5RDE3MAotOjEwNzQ3MDAwMEYwMjAzMTlDMDIwRDEwRjZDMTAwMjAyRUEzMEQxMEZBNQotOjEwNzQ4MDAwNkMxMDAyQ0MyNTAzRjAzMTYwMDAwRjAwNkYyMjA1MDM2MQotOjEwNzQ5MDAwRjEzMTYwMDAwNTZGMjMwNTAzRjIzMTAwMDIwMEQxMEZDNgotOjEwNzRBMDAwNkMxMDAyQ0MyNTAyRjAzMEQxMEYwMDAwNkYyMjA0MDJENAotOjEwNzRCMDAwRjEzMEQxMEY2RjIzMDQwMkYyMzBEMTBGQzAyMEQxMEY3MQotOjEwNzRDMDAwNkMxMDAyMjIwQTIwMjMwQTAwNkQyODBFMjgzNzQwMjg1QgotOjEwNzREMDAwMzc0NDI4Mzc0ODI4Mzc0QzIzM0QwMTAzMDIwMEQxMEY5OQotOjEwNzRFMDAwNkMxMDAyMDJFNDMxRDEwRjBBMDA0MzY4NjU2QzczNjlDNQotOjEwNzRGMDAwNkYyMDQ2NTcyMDQ0NDU0MjU1NDczRDMwMjAyODQyNzU2RAotOjEwNzUwMDAwNjk2Qzc0MjA1NDc1NjUyMDQxNzU2NzIwMzEzMjIwMzBENAotOjEwNzUxMDAwMzkzQTM0MzMzQTMwMzQyMDUwNDQ1NDIwMzIzMDMwMzgwMQotOjEwNzUyMDAwMjA2RjZFMjA2NjY1NkM2OTc4MkU2MTczNjk2MzY0NjU4RgotOjEwNzUzMDAwNzM2OTY3NkU2NTcyNzMyRTYzNkY2RDNBMkY2ODZGNkQzNgotOjEwNzU0MDAwNjUyRjY2NjU2QzY5NzgyRjc3MkY2Njc3NUYzNjJFMzBFQQotOjEwNzU1MDAwMjkyQzIwNTY2NTcyNzM2OTZGNkUyMDU0MzM3ODc4MjAxOQotOjEwNzU2MDAwMzAzMDM3MkUzMDMwMkUzMDMwMjAyRDIwMzEzMDMwMzczMwotOjBDNzU3MDAwMzAzMDMwMzAxMDA3MDAwMENDNDRBMEQ2QjIKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4IGIvZmlybXdhcmUvY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQyZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleApAQCAtMCwwICsxLDE4ODUgQEAKKzoxMDAwMDAwMDYwMDA3NDAwMjAwMzgwMDAyMDAzNzAwMDAwMDAxMDAwRDYKKzoxMDAwMTAwMDAwMDAyMDAwRTEwMDAyODQwMDA3MDAwMEUxMDAwMjg4RTcKKzoxMDAwMjAwMDAwMDEwMDAwRTAwMDAwMDBFMDAwMDBBMDAxMDAwMDAwNkUKKzoxMDAwMzAwMDQ0NDQ0NDQwRTMwMDAxODMyMDAyMDAwMDIwMDFFMDAwMkEKKzoxMDAwNDAwMDIwMDFGRjEwMUZGRkQwMDAxRkZGQzAwMEUzMDAwNDNDOTEKKzoxMDAwNTAwMDAyMDAwMDAwMjAwMDY5ODgxRkZGQzI5MDIwMDA2OUQwQzQKKzoxMDAwNjAwMDFGRkZDMjk0MjAwMDZBMTAxRkZGQzI5ODIwMDA2QTg0RkMKKzoxMDAwNzAwMDFGRkZDMjlDMjAwMDAzQzBDMDAwMDBFNDMxMDBFQTMxMzEKKzoxMDAwODAwMDAwQTEzMTAwQTAzMTAzMDIwMDAyRUQzMDZFMkEwNTAwMEMKKzoxMDAwOTAwMEVEMzEwMDAyMDAwMjE2MDAxMkZGREJDMDMwMTRGRkRBNUYKKzoxMDAwQTAwMEQzMEZEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzNDcKKzoxMDAwQjAwMDBGRDMwRkQzMEYxMkZGRDUyMzBBMDAyNDBBMDBEMzBGNEEKKzoxMDAwQzAwMEQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDMwRkQzMjcKKzoxMDAwRDAwMDBGRDMwRjE0RkZDRTAzNDIxRjE0RkZDQjAzNDIxRjEyOTYKKzoxMDAwRTAwMEZGQ0NDMDMwMkQzNzMwMkQzNzM0MkQzNzM4MkQzNzNDRUQKKzoxMDAwRjAwMDIzM0QwMTcyMzNFRDAwMDIwMDEyRkZDNEMwMzAyRjM3RTAKKzoxMDAxMDAwMDAwMkYzNzEwMkYzNzIwMkYzNzMwMjMzRDAxNzIzM0VENkEKKzoxMDAxMTAwMDAwMDIwMDEyRkZCRUMwMzAyNzM3MDAyNzM3MTAyNzM3RjQKKzoxMDAxMjAwMDIwMjczNzMwMjMzRDAxNzIzM0VEMDMwMjAwMTJGRkI5NUYKKzoxMDAxMzAwMDEzRkZCQTBDMDIwMDkzMjAxMkZGQjkxM0ZGQjkwQzAyOEYKKzoxMDAxNDAwMDAwOTMyMDEyRkZCOEMwMzE5MzIwODIyMDEyRkZCNzEzMTIKKzoxMDAxNTAwMEZGQjc5MzIwMTJGRkI3MTVGRkIzMTZGRkI2QzAzMEQ3MTUKKzoxMDAxNjAwMDIwMDU2NjAxNjAwMDFCMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDAxNzAwMDA0MzYwNTAwMDIwMEQzMEZEMzBGMDUzMzBDNkUzQjE0NzkKKzoxMDAxODAwMDA3NDcxNDA3MDQ0Mzc2MzFFNjA0MzYwNTA1MzMwQzZGNDAKKzoxMDAxOTAwMDNCRUQwMDAyMDAxMkZGQTYxNUZGQTMyMzBBMDBENzIwQTMKKzoxMDAxQTAwMDA3MDQ0MzA0M0UwNTA1MzMwQzA3NDcxNDZGM0JGMDAzNzcKKzoxMDAxQjAwMDAyMDAxMkZGQTFDMDMwMTRGRkExRDMwRkQzMEZEMzBGNDEKKzoxMDAxQzAwMDkzNDBCNDQ0NzI0OUYyRDMwRkQzMEZEMzBGMTRGRjlCNjMKKzoxMDAxRDAwMDgzNDAxNEZGOUI4MzQwMTJGRjlCMjMwQTAwMTRGRjlBNjUKKzoxMDAxRTAwMEQzMEZEMzBGRDMwRjkzNDBCNDQ0NzI0OUYyRDMwRkQzM0MKKzoxMDAxRjAwMDBGRDMwRjE0RkY5NTgzNDAxMkZGOTVDOTJGODMyMDg0REUKKzoxMDAyMDAwMDIxODUyMkJDMjI3NDNCMEY4NjUwQjQ1NTk2MzBCNDMzRkUKKzoxMDAyMTAwMDc0MzNGNDYzRkZFNjAwMDA2NTNGRTE2NTVGREUxMkZGQzMKKzoxMDAyMjAwMDdDMjMwQTAwMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDOTEKKzoxMDAyMzAwMDIzM0QwMTcyMzNFRDAzMDIwMDAwMDIwMDEyRkY3QUMwNzkKKzoxMDAyNDAwMDMyMDMyRTA1MDMwMjAwMTJGRjc4MTNGRjgxOTMyMEMwQjIKKzoxMDAyNTAwMDExMDE0OTMxMDA0ODMxMDEwMjAwQzAwMDE0RkY3RTA0NDEKKzoxMDAyNjAwMEQyMzExNUZGN0Q5NDUwMTRGRjdEMDREMzMxMTVGRjdDRUUKKzoxMDAyNzAwMDk0NTAxNEZGN0MwNEQ0MzExNUZGN0MyNDU2MDAxNEZGRTUKKzoxMDAyODAwMDdCMDRENTMxMTVGRjdCMjQ1NjAwMTBGRjdBMDMwMDAwNTQKKzoxMDAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDAzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDAzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDAzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDAzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDAzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDAzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDA0MjAwMDYzRkZGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwQTEKKzoxMDA0NDAwMDFGRkMwMDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwQUIKKzoxMDA0NTAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEUzMDAwNUM4MDYKKzoxMDA0NjAwMDFGRkZDMDAwMUZGRkMwMDBFMzAwMDVDODFGRkZDMDAwNDIKKzoxMDA0NzAwMDFGRkZDMDE4RTMwMDA1QzgxRkZGQzAxODFGRkZDMDE4RUEKKzoxMDA0ODAwMEUzMDAwNUUwMUZGRkMwMTgxRkZGQzI4Q0UzMDAwNUUwN0EKKzoxMDA0OTAwMDFGRkZDMjhDMUZGRkMyOENFMzAwMDg1NDFGRkZDMjkwRDUKKzoxMDA0QTAwMDFGRkZDNThDRTMwMDA4NTQyMDAwMDAwMDIwMDAwMTZBRjMKKzoxMDA0QjAwMEUzMDAwQjUwMjAwMDAxODAyMDAwMDE4MEUzMDAwQ0JDMTEKKzoxMDA0QzAwMDIwMDAwMjAwMjAwMDAyMDNFMzAwMENCQzIwMDAwMjFDRkMKKzoxMDA0RDAwMDIwMDAwMjIwRTMwMDBDQzAyMDAwMDIyMDIwMDAwMjI2QTEKKzoxMDA0RTAwMEUzMDAwQ0M0MjAwMDAyM0MyMDAwMDI0MEUzMDAwQ0NDREUKKzoxMDA0RjAwMDIwMDAwMjQwMjAwMDAyNDlFMzAwMENEMDIwMDAwMjRDMDIKKzoxMDA1MDAwMDIwMDAwMjUwRTMwMDBDREMyMDAwMDI1MDIwMDAwMjU5QzEKKzoxMDA1MTAwMEUzMDAwQ0UwMjAwMDAyNUMyMDAwMDI2MEUzMDAwQ0VDMzEKKzoxMDA1MjAwMDIwMDAwMjYwMjAwMDAyNjlFMzAwMENGMDIwMDAwMjZDNTEKKzoxMDA1MzAwMDIwMDAwMjcwRTMwMDBDRkMyMDAwMDI3MDIwMDAwMjc5MTEKKzoxMDA1NDAwMEUzMDAwRDAwMjAwMDAyOEMyMDAwMDI4Q0UzMDAwRDBDNjMKKzoxMDA1NTAwMDIwMDAwMjkwMjAwMDAyOTNFMzAwMEQwQzIwMDAwMkFDNkEKKzoxMDA1NjAwMDIwMDAwMkIwRTMwMDBEMTAyMDAwMDJEMDIwMDAwMkYyQjMKKzoxMDA1NzAwMEUzMDAwRDE0MjAwMDAzQjAyMDAwMDNCMEUzMDAwRDM4QTkKKzoxMDA1ODAwMDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQzODIwMDAwM0IwQ0EKKzoxMDA1OTAwMDIwMDAwM0IwRTMwMDBEMzgyMDAwMDNCMDIwMDAwM0IwQkEKKzoxMDA1QTAwMEUzMDAwRDM4MjAwMDAzQjAyMDAwNkJBOEUzMDAwRDM4RjUKKzoxMDA1QjAwMDIwMDA2QkE4MjAwMDZCQThFMzAwNzUzMDAwMDAwMDAwNEQKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMDFGRkMwMDAwRjUKKzoxMDA1RDAwMDFGRkZDNTkwMUZGRkM2NzAyMDAwNkJBODIwMDA2QkE4RUUKKzoxMDA1RTAwMERFRkZGRTAwMDAwMDA4MENERUFEQkVFRjFGRkZDMkEwNjQKKzoxMDA1RjAwMDFGRkNGRTAwMUZGRkMwOTQxRkZGQzVDMDMwMDAwMDAwOUQKKzoxMDA2MDAwMDAwM0ZGRkZGODA0MDAwMDAxMDAwMDAwMDA4MEZGRkZGQzgKKzoxMDA2MTAwMDFGRkZDMjZEMDAwRkZGRkY4MDRGRkZGRjgwMDAwMDAwMzMKKzoxMDA2MjAwMDAwMDAwODgwQjAwMDAwMDU2MDUwMDAwMDYwMDAwMDAwN0QKKzoxMDA2MzAwMDQwMDAwMDExMzUwMDAwMDA0MTAwMDAwMDEwMDAwMDAxRTIKKzoxMDA2NDAwMDIwMDAwMDAwMDAwMDEwMDA3RkZGRkZGRjQwMDAwMDAwQkUKKzoxMDA2NTAwMDA1MDAwMDAwODAwMDAwMTkwNDAwMDAwMDAwMDAwODAwRjAKKzoxMDA2NjAwMDEwMDAwMDA1ODA2MDAwMDA3MDAwMDAwMDIwMDAwMDA5RkMKKzoxMDA2NzAwMDAwMUZGODAwODAwMDAwMUVBMDAwMDAwMEY4MDAwMDAwMkQKKzoxMDA2ODAwMDA3RkZGRkZGMDgwMDAwMDAxODAwMDAwMDAxMDA4MDAxQzQKKzoxMDA2OTAwMDQyMDAwMDAwMUZGRkMyMUQxRkZGQzBEQzAwMDEwMDgwRTAKKzoxMDA2QTAwMDYwNDAwMDAwMUEwMDAwMDAwQzAwMDAwMDAwMDAzMDAwNTQKKzoxMDA2QjAwMDYwMDAwODAwODAwMDAwMUMwMDAxMDAwMDgwMDAwMDFBOUIKKzoxMDA2QzAwMDgwMDAwMDE4RkMwMDAwMDA4MDAwMDAwMTAwMDA0MDAwRDUKKzoxMDA2RDAwMDAzMDAwMDAwODAwMDA0MDA1MDAwMDAwM0ZGRkZCRkZGODQKKzoxMDA2RTAwMDFGRkZDM0Q0MDAwMDBGRkZGRkZGRjAwMDAwMDAxNkQwNzMKKzoxMDA2RjAwMDAwMDBGRkY3QTUwMDAwMDAxRkZGQzRCMDFGRkZDNDYxOEEKKzoxMDA3MDAwMDAwMDEwMDA4MDAwMDBCMjAyMDJGRkY4MDFGRkZDNDU1QjAKKzoxMDA3MTAwMDAwMDAyQzAwRkZGRUZGRjgwMEZGRkZGRjFGRkZDNTc4NjEKKzoxMDA3MjAwMDAwMDAyMDAwRkZGRkRGRkYwMDAwRkZFRjAxMDAxMTAwQ0QKKzoxMDA3MzAwMDFGRkZDM0QyMUZGRkM1OTBGRkZGRUZGRjAwMDBGRkZCQUQKKzoxMDA3NDAwMDFGRkZDNjMwMUZGRkJFQTBGRkZGRjdGRjFGRkZDMDY0RTMKKzoxMDA3NTAwMDAwMDBGRkZEMUZGRkM2MjAwMDAxRkJEMDFGRkZDNUIwM0EKKzoxMDA3NjAwMDFGRkZDNjYwMUZGRkM1OTFFMEZGRkUwMDFGRkZDNUEwNzEKKzoxMDA3NzAwMDAwMDA4MDAwMUZGRkM1M0MxRkZGQzVCNDFGRkZDMDY4RkQKKzoxMDA3ODAwMDFGRkZDNEQwMUZGQ0ZGRDgwMDAxMDA4MUUxMDAwNjAwNUMKKzoxMDA3OTAwMDAwMDAyNzEwMUZGQ0ZFMzAxRkZDRkU3MEUxMDAwMjAwNkQKKzoxMDA3QTAwMDFGRkZDNTM4MUZGRkM1NTAwMDAzRDA5MDFGRkZDNTY0NTEKKzoxMDA3QjAwMDJCNTA2MzgwMkI1MDc5ODAyQjUwOTA4MDJCNTBBNjgwM0IKKzoxMDA3QzAwMDFGRkZDNDY5MDEwMDExMEYyMDJGRkUwMDIwMzAwMDgwQTAKKzoxMDA3RDAwMDIwMkZGRjAwMDAwMEZGRkYwMDAxRkZGODJCNTBCMjAwQTgKKzoxMDA3RTAwMDJCNTBCMjA4MDAwMTAwMTAyQjUwQjE4MDJCNTBCMjgwNkEKKzoxMDA3RjAwMDJCNTBCQTAwMDAwMTAwMTEyQjUwQkQyODJCNTBCQzgwOUIKKzoxMDA4MDAwMDJCNTBCREEwMjAzMDAwMDBERkZGRkUwMDUwMDAwMDAyOTIKKzoxMDA4MTAwMDAwQzAwMDAwMDIwMDAwMDBGRkZGRjdGNDFGRkZDMDZDRTMKKzoxMDA4MjAwMDAwMEZGODAwMDQ0MDAwMDAwMDEwMDAwMDBDNDAwMDAwMjEKKzoxMDA4MzAwMDFDNDAwMDAwRTAwMDAwQTAxRkZGQzU0MDFGRkQwMDA4OTUKKzoxMDA4NDAwMDFGRkZDNTU0MUZGRkM1NjgxRkZGQzU3Q0UxMDAwNjkwNTAKKzoxMDA4NTAwMEUxMDAwNkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDA4NjAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDA4NzAwMDAwMDAwMDAwMjAxMDAwNDAyMDEwMDA0MDIwMTAwMDQwMjgKKzoxMDA4ODAwMDIwMTQwMDgwMjAwQzAwMDAyMDBDMDAwMDIwMEMwMDAwMzAKKzoxMDA4OTAwMDIwMTAwMDQwMjAxNDAwODAyMDE0MDA4MDIwMTQwMDgwQ0MKKzoxMDA4QTAwMDIwMTgwMEMwMjAxQzAxMDAyMDFDMDEwMDIwMUMwMTAwOTkKKzoxMDA4QjAwMDIwMjAwMTQwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwQ0YKKzoxMDA4QzAwMDIwMUMwMTAwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwMDMKKzoxMDA4RDAwMDIwMUMwMTAwMjAyMDAxNDAyMDIwMDE0MDIwMjAwMTQwNTgKKzoxMDA4RTAwMDIwMjAwOTQwMjAyMDA5NDAyMDIwMDk0MDIwMjAwOTQwRTQKKzoxMDA4RjAwMDIwMjQwOTgwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzcKKzoxMDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDA5MTAwMDAwMDAwMDAwMjAwMDUyRkMyMDAwNTFDQzIwMDA1MkZDQkUKKzoxMDA5MjAwMDIwMDA1MkZDMjAwMDUxMDgyMDAwNTEwODIwMDA1MTA4RUUKKzoxMDA5MzAwMDIwMDA0RjQ4MjAwMDRGNDgyMDAwNEY0MDIwMDA0RUFDODAKKzoxMDA5NDAwMDIwMDA0RDU0MjAwMDRCMzQyMDAwNDkwODAwMDAwMDAwRDYKKzoxMDA5NTAwMDAwMDAwMDAwMjAwMDUyQ0MyMDAwNTE5ODIwMDA1MjNDQTIKKzoxMDA5NjAwMDIwMDA1MjNDMjAwMDRGRjAyMDAwNEZGMDIwMDA0RkYwQkMKKzoxMDA5NzAwMDIwMDA0RkYwMjAwMDRGRjAyMDAwNEYzODIwMDA0RkYwQjMKKzoxMDA5ODAwMDIwMDA0Qzc0MjAwMDRBRTQyMDAwNDhCNDAwMDAwMDAwMUQKKzoxMDA5OTAwMDAwMDAwMDAwMjAwMDBCRTAyMDAwMzhCQzIwMDAwNEMwNTQKKzoxMDA5QTAwMDIwMDA0NEE4MjAwMDBCRDgyMDAwM0ZCNDIwMDAwM0YwMTIKKzoxMDA5QjAwMDIwMDA0NDY4MjAwMDQ4OTAyMDAwM0NDNDIwMDAzQkUwMTgKKzoxMDA5QzAwMDIwMDAzODM4MjAwMDM2QzQyMDAwMzQzNDIwMDAyRjk0MTIKKzoxMDA5RDAwMDIwMDAzQTNDMjAwMDJCRjQyMDAwMjgyODIwMDA2NTM0MTkKKzoxMDA5RTAwMDIwMDAyM0I0MjAwMDIwOTQyMDAwMjA0MDIwMDAxRDJDNTMKKzoxMDA5RjAwMDIwMDAxODQwMjAwMDE1NzAyMDAwMERFQzIwMDAwQzI0NzEKKzoxMDBBMDAwMDIwMDAxMTM0MjAwMDEzMjAyMDAwNDFBQzIwMDAzQzc4NEQKKzoxMDBBMTAwMDIwMDAwQkU4MjAwMDA0QzAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMDBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDBBOTAwMDAwMDAwMDAwMDAwMDAwMDAzMjY0MDAwMDAwMDAwMDAwQzAKKzoxMDBBQTAwMDMyNjQwMDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNTgKKzoxMDBBQjAwMDY0MDA2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwRTYKKzoxMDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDBCMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzMjM4MDAwMDAwMDAwREYKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDBCNTAwMDAwNUM5NDAxNUQ5NDAyNUU5NDAzNUY5NDAwNDMwMDAwODYKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDBCOTAwMDAwNUM5MDAxNUQ5MDAyNUU5MDAzNUY5MDAwNTMwMDAwNDYKKzoxMDBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDBCRDAwMDAwOUM5NDAwMUQ5MDAxOUQ5NDAyOUU5NDAzOUY5NDA0OTgKKzoxMDBCRTAwMDA4OTQwNTA5OTQwNjBBOTQwNzBCOTQwMDQzMDAwMDAwM0EKKzoxMDBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDBDMTAwMDAwOUM5MDAxOUQ5MDAyOUU5MDA3MUQ5MDAzOUY5MDA0NjAKKzoxMDBDMjAwMDc4OTAwNTc5OTAwNjdBOTAwNzdCOTAwMDUzMDAwMDAwMzkKKzoxMDBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDBDNTAwMDAwREM5NDAwMUQ5MDAxREQ5NDAyREU5NDAzREY5NDA0MTcKKzoxMDBDNjAwMDA0OTQwNTA1OTQwNjA2OTQwNzA3OTQwODA4OTQwOTA5NTYKKzoxMDBDNzAwMDk0MEEwQTk0MEIwQjk0MDA0MzAwMDAwMDAwMDAwMDAwNEIKKzoxMDBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDBDOTAwMDAwREM5MDAxREQ5MDAyREU5MDBCMUQ5MDAzREY5MDA0REMKKzoxMDBDQTAwMEI0OTAwNUI1OTAwNkI2OTAwN0I3OTAwOEI4OTAwOUI5MEEKKzoxMDBDQjAwMDkwMEFCQTkwMEJCQjkwMDA1MzAwMDAwMDYzRkZGQzAwNDkKKzoxMDBDQzAwMDIwMDA2OTY0MTBGRkZGMEEwMDAwMDAwMDIwMDA2OTg4MEUKKzoxMDBDRDAwMDAwRDIzMTEwRkZGRTBBMDAwMDAwMDAwMDIwMDA2OUQwQTEKKzoxMDBDRTAwMDAwRDMzMTEwRkZGRTBBMDAwMDAwMDAwMDIwMDA2QTEwNEYKKzoxMDBDRjAwMDAwRDQzMTEwRkZGRTBBMDAwMDAwMDAwMDIwMDA2QTg0Q0EKKzoxMDBEMDAwMDAwRDUzMTEwRkZGRTBBMDAwMDAwMDAwMDYzRkZGQzAwNjgKKzoxMDBEMTAwMEUwMDAwMEEwMTJGRkY3ODIyMDAyODI1N0M4MjE2M0ZGODMKKzoxMDBEMjAwMEZDMTJGRkYzMDNFODMwMDRFRTMwMDVDMDMwOTMyMDk0NEEKKzoxMDBEMzAwMDIxOTUyMjYzRkZGQzAwMDAxRkZGRDAwMDAwMDQwMDIwNkIKKzoxMDBENDAwMDFGRkZDNTkwMUZGRkM2NzAyMDBBMDAxMUZGRkIxM0ZGOTUKKzoxMDBENTAwMEZCMDNFNjMxMDEwMjAwMTZGRkZBMTdGRkZBRDMwRjc3MDMKKzoxMDBENjAwMDZCMDY5MDYwQjQ2Njc3NjNGODU0MTU1MDU0MTlFNjBGMUIKKzoxMDBENzAwMDE0MDA2M0ZGRjkwMDAwMDA2QzEwMDRDMDIwRDEwRjAwQzQKKzoxMDBEODAwMDZDMTAwNEMwQzcxQUVGMDZEODMwQkMyQkQ3MjA4NTcyNzAKKzoxMDBEOTAwMDBENDIxMTgzNzEwNTQ1MEI5NTcyMDIzMzBDMjM3NjAxQzgKKzoxMDBEQTAwMDdCM0IwNDIzM0QwODkzNzFBMzJEMTJFRUZFMTlFRUZFNEEKKzoxMDBEQjAwMEEyNzY3RDYzMkMyRTBBMDAwODgyMDIyODBBMDEwMzhFODcKKzoxMDBEQzAwMDM4MEUwRTQyQzhFRTI5QTY3RTZENEEwNTAwMjA4ODAwMjYKKzoxMDBERDAwMDMwOEM4MjcxRDEwRkMwRjAwMjhGMzg3RkMwRUE2M0ZGODAKKzoxMDBERTAwMEU0MDBDMEYxQzA1MDAzN0UwQ0EyRUUwRTNEMTIwODgyNUEKKzoxMDBERjAwMDAyMDNGNTM4MDUwNTQyQ0I1NzI5QTY3RTJGREMxMDBGREMKKzoxMDBFMDAwMDRGMzY2REZBMDUwMDIwODgwMDMwOENCQzc1QzAzMDA4NjQKKzoxMDBFMTAwMEUyMDgyODBBMDEwNTgzMzgwMzAzNDJDOTNFMjlBNjdFNTkKKzoxMDBFMjAwMDBENDgwQ0QzMEY2RDhBMDUwMDIwODgwMEIwOEM4MjcxQUMKKzoxMDBFMzAwMEQxMEZDMDUwMDhGNTM4NzVDMEMxNjNGRkJCQzA2MDAyNTgKKzoxMDBFNDAwMDg2Mzg3NkMwREE2M0ZGRDQ2QzEwMTIxNkVFRDhDMUY4N0IKKzoxMDBFNTAwMEMxRTcyQjIyMUUyQzIyMURDMEQwN0JDMTJGMjkyMDA2Q0EKKzoxMDBFNjAwMEQ3QjAyOTlDRkFDQzU3MjgyMDcwMjg4Q0ZGMjgyNDcwRjIKKzoxMDBFNzAwMDY0OTE1QzJBQjAwMDBFQTgwQzY0ODE2NzBGQTkwQzY0MTEKKzoxMDBFODAwMDkyQjNDMUU5N0VBMTM5NjlBQzJGNjAwMDM2MjkyMDA2RjIKKzoxMDBFOTAwMEQ3RDAyOTlDRkFDQzU3MjgyMDcwMjg4Q0ZGMjgyNDcwQTIKKzoxMDBFQTAwMDY0OTEzNTJBRDAwMDBFQTgwQzY0ODE2NDBGQTkwQzY0RUIKKzoxMDBFQjAwMDkzMUJDMUU5N0VBMTA5NjhBQzA5QzAyMEQxMEYwMDAwRDUKKzoxMDBFQzAwMDAwMkQyNTAyOEEzMkMwOTAwQTZGNTA2NUY1QUQyOTI0QTUKKzoxMDBFRDAwMDY3MDkwODQ3NjU4NUE5MkYyMDBDMThFRUI1MENGRTExOEYKKzoxMDBFRTAwMEE4RUUyOEUyODZCNDQ5Nzg5MzAyNjAwNTdBMTlFRUIxM0IKKzoxMDBFRjAwMDA5RjkwQTI5OTJBMzY4OTAwNzg4MjAwOTg4MEM2NTg1NUEKKzoxMDBGMDAwMDY2MjdFMjg1NjQ3NTYwNjU1NThFN0JDMTA0RDlCMDYwNDMKKzoxMDBGMTAwMDAwMDFDMDkwOEI5NDFDRUVBODBCODgxNDhDQzQwQjBCQTIKKzoxMDBGMjAwMDQ3QThDQzE4RUVBNjA5QkIxMDA4Q0MwMjlDNzAxOEVFOUUKKzoxMDBGMzAwMEE0MUNFRUE1MDhBODAxMEI4ODAyMEM0QzAyMUJFRUExMTQKKzoxMDBGNDAwMDlDNzEwQjg4MDI5ODcyMkM5MDIzMkI5MDIyMDRDODEwNUQKKzoxMDBGNTAwMDA2QkIxMDBDNEMxMjA4QkIwMjI4OTAyMTA3Q0MxMDBDQzkKKzoxMDBGNjAwMDg4MTAwQzg4MDIwQjg4MDIxQ0VFOTk4QjMzMENCQjAxOTUKKzoxMDBGNzAwMDhDMzQwQjg4MDI5ODczOUM5OTlDNzQ4Qjk1OEMzOTlCNEMKKzoxMDBGODAwMDc1ODg5NjhCMzg5ODc2ODg5NzlDNzk5Qjc4OTg3NzFDOEIKKzoxMDBGOTAwMEVFOTAyOEUyODUwQ0ZDMDgyREM0Q0YwODQ4MEIyOEU2MEIKKzoxMDBGQTAwMDg1NjU1NTBCMkIyMjFFMkQyMjFEN0JEOTAyMkIwQTAwOTUKKzoxMDBGQjAwMDY0QkYwNjJDQjAwNzI4QjAwMERBMjAwNjg4MEEyODgyMTEKKzoxMDBGQzAwMDRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZFRUIwMDAwRjcKKzoxMDBGRDAwMDI5MjA3MDY1OUU5QzYwMDRFNDJBMjA3MDY1QUVDMzYwODEKKzoxMDBGRTAwMDA0REIwMDAwMkVCMDAzMkMyMDY3RDRFMDY1QzEwNThBMjUKKzoxMDBGRjAwMDMyOEMzMzBBRkY1MDBDNDU1NEJDNTU2NEY0RTYxOUVFQUMKKzoxMDEwMDAwMDc1ODgyQTA5QTkwMTA5ODgwQzY0ODIxQkMwOTI2MDAwQjYKKzoxMDEwMTAwMEREMkVEMDAzMkEyMDY3RDRFMDY1QTBEODhBMzI4QjMzMzYKKzoxMDEwMjAwMDBBRkM1MDBCNDU1NEJDNTU2NEM0QjkxOUVFNkE4ODJBQjEKKzoxMDEwMzAwMDA5QTkwMTc5ODlENTBCRUE1MDY0QTRERDBDRUUxMUMwMzEKKzoxMDEwNDAwMEYwMkYxNjEzMkUxNjE2OEFFNzhDRTgyQTE2MTI4RUU5NTAKKzoxMDEwNTAwMERGQzBBQUVBN0VBQjAxQjFDRjBCQTg1MDY1ODM0Mjg4RkUKKzoxMDEwNjAwMDM3REJDMEFFODk5OTFFNzg5QjAyMkJDQzAxMkIxNjFCNTcKKzoxMDEwNzAwMDI5MTIwRTJCMEEwMDI5MTYxQTdGQzMwNzdGQzkwMjdFODgKKzoxMDEwODAwMEFCMDFDMEIxNjVCNDk4OEIzNTJGMEEwMDJBMEEwMDdBRUIKKzoxMDEwOTAwMEMzMDU2NEMzQzcyRjBBMDE2NUY0ODQyQjEyMTYyQjE2RUYKKzoxMDEwQTAwMDE5MDA1MTA0QzBDMTAwQ0MxQTJDQ0NGRjJDMTYxNzBDMEYKKzoxMDEwQjAwMEZDMTMyQzE2MTgyQjEyMUEyQTEyMUJEQzUwNTgxOEZBODMKKzoxMDEwQzAwMEMwRDBDMDkwMkU1Q0Y0MkMxMjE3MjgxMjE4MkYxMjFCQkYKKzoxMDEwRDAwMDJBMTIxQTA4RkYwMTBDQUEwMTg4MzQwNzRDMEFBQjhCQUMKKzoxMDEwRTAwMDI4MTIxOTJCQzYxNjJGODYwODJBODYwOTJFNzQxMDI5NTUKKzoxMDEwRjAwMDI0NjcyRTcwMDM4OTc1QjFFQTJBNzQwM0IwOTkwOTQ5RUYKKzoxMDExMDAwMDBDNjU5REI1MkIyMDY3MkQyNTAyNjVCM0Y0MkIyMjFFOUYKKzoxMDExMTAwMDJDMjIxRDdCQzkwMUMwQjA2NEJEOUUyQ0IwMDcyOEIwMzUKKzoxMDExMjAwMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwQTAKKzoxMDExMzAwMDY1QUZFNzYzRkQ4Mzg5QkFCMTk5NjU5MDk3ODgzNDFDRTAKKzoxMDExNDAwMEVFMjY5OEJBOEYzMzFFRUUxRjBGNEY1NDJGQjQyQzhERkUKKzoxMDExNTAwMDJBOEEzMjBFREQwMjBDQUMwMTdEQzk2NjBBNDk1MTZGNDQKKzoxMDExNjAwMDkyNjA4QTMzNzVBNjVCMkNCMDEzMEFFRDUxMERDRDAxNDgKKzoxMDExNzAwMDBEMEQ0MTBDMEM0MTdEQzk0OTJFQjAxMkIwRUU2NUUzNTYKKzoxMDExODAwMEMyQzBEMDhFMzc4Q0I4OEEzNjhGQjk3Q0EzMDc3QUM5OTMKKzoxMDExOTAwMDAyN0VGQjAxQzBEMUNFRDk4ODM1MEFBRDAyMEU4RTA4ODEKKzoxMDExQTAwMDc4RUIwMjJEQUMwMTg5QjdEQUMwQUY5Qjc5QkIwMUIxRjYKKzoxMDExQjAwMENBRENCMEMwQjA3REEzMDc3QUQ5MDI3Q0VCMDFDMEIxMTQKKzoxMDExQzAwMDY0QjE1REMwOTEyOTI0NjdDMDIwRDEwRjAwMDA4QURBODQKKzoxMDExRDAwMEIxQUE2NEEwQkMyRTIwNjcyRDI1MDI2NUUzMEIxRkVEOEMKKzoxMDExRTAwMEY5OEEzMjE4RURGRTBGQUYwMTA4RkYwQzY1RjI4NjBBOEUKKzoxMDExRjAwMDQ4NTE2RjgyMDI2MDAyN0RDMDkwMjkyNDY3MDkwQTQ3MjYKKzoxMDEyMDAwMDY1QTJGMjdCQzkwMUMwQjA2NEJDQUUyQ0IwMDcyOEIwQTcKKzoxMDEyMTAwMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwQUYKKzoxMDEyMjAwMDY1QUZFNzYzRkM5MzAwMDAwQ0U5NTA2NDkyRUIwQ0VGQjAKKzoxMDEyMzAwMDExQzA4MDI4MTYxMUFGQkYyRjE2MTk4RUY4OEJGN0RBNjAKKzoxMDEyNDAwMEUwOEZGOTJCMTYxMEFCRkI3RkJCMDFCMUVBMENBODUwNjUKKzoxMDEyNTAwMDY1ODBENjg4MzdEQ0UwQUY4OTk5MUM3ODlCMDIyQ0VDM0UKKzoxMDEyNjAwMDAxMkMxNjFCMjkxMjBDMkMwQTAwMjkxNjFBN0FFMzA3RTYKKzoxMDEyNzAwMDdBRTkwMjdGQkIwMUMwQzE2NUMyQTQ4QjM1MkMwQTAwOEMKKzoxMDEyODAwMDJBMEEwMDdBRTMwNTY0RTFDQTJDMEEwMTY0Q0UxMTYwREYKKzoxMDEyOTAwMDAyOEQ4ODM0MUJFREQxOThEQThGMzMxRUVEQ0EwRjRGQzMKKzoxMDEyQTAwMDU0MkZENDJDOEMyQThBMzIwRUNDMDIwQkFCMDEwQ0JCRUYKKzoxMDEyQjAwMDBDNjVCRjBFMEE0OTUxNkU5MjAyNjNGRjA1OEEzMzBBMUMKKzoxMDEyQzAwMEFCNTA2NEJFRkQyQ0QwMTMwQUVFNTEwRUNFMDEwRTBFQjMKKzoxMDEyRDAwMDQxMEMwQzQxMEVDQzBDNjVDRUU4MkZEMDEyQjBGRjY1NEUKKzoxMDEyRTAwMEYyNkVDMEIwOEUzNzhDRDg4QTM2MkZEMjA5N0NBMzA3MTUKKzoxMDEyRjAwMDdBQzkwMjdFRkIwMUMwQjE2NUJFQzc4ODM1REJBMEFFRUUKKzoxMDEzMDAwMDhFNzhFQjAxQjFBQjg5RDdEQUMwQUY5RDc5REIwMUIxNDMKKzoxMDEzMTAwMENBQzBDMDdCQTMwNzdBQjkwMjdERUIwMUMwQzE2NUNFMEMKKzoxMDEzMjAwMEExQzA5MDI5MjQ2N0MwMjBEMTBGODgzNzhDMzY5ODE0MkIKKzoxMDEzMzAwMDBDRTkwQzI5MTYxNDA4RjgwQzk4MUQ3OEZCMDcyODEyRTQKKzoxMDEzNDAwMDE0QjA4ODI4MTYxNDg5MUQ5RjE1OUIxNkMwRjAyQjEyMDcKKzoxMDEzNTAwMDE0MjkxNjFBMkIxNjFCOEIxNDdBRTMwQjdBRTkwNjg4Q0MKKzoxMDEzNjAwMDE1OEUxNjc4RUIwMUMwRjE2NUYxQjkyOTEyMUEyRjEyMEEKKzoxMDEzNzAwMDExOEEzNTJFMTIxQjlBMUFBRkVFMkYxMjEwQzBBMEFGOTEKKzoxMDEzODAwMDlGNzlGQjAxQjFFRTlGMTE4ODFBQzBGMDk4MTA3QUUzQTMKKzoxMDEzOTAwMDBBN0VBOTA1MkExMjAxN0E4QjAxQzBGMTY0RjA4MTYwRUUKKzoxMDEzQTAwMDAxODI4OTM2OEIzNzk5MTcwQkU4MEM5ODFGMDlDOTBDRjUKKzoxMDEzQjAwMDI5MTYxNTc4RUIwNzI4MTIxNUIwODgyODE2MTVEOUMwRkMKKzoxMDEzQzAwMDlBMTk5RTE4OEExRjJFMTIxNTJBMTYxQTJFMTYxQkRBMjMKKzoxMDEzRDAwMEMwQzBFMDhDMTc3RjkzMEI3RkE5MDY4ODE4OEYxOTc4RkYKKzoxMDEzRTAwMEZCMDFDMEUxNjVFMTNEMjkxMjFBMkYxMjEzOEEzNTJFNDcKKzoxMDEzRjAwMDEyMUI5QTFCQUZFRTJGMTIxMkMwQTBBRjlGNzlGQjAxRjgKKzoxMDE0MDAwMEIxRUU5RjEzODgxQkMwRjA5ODEyN0FFMzBBN0VBOTA1RkIKKzoxMDE0MTAwMDJBMTIwMzdBOEIwMUMwRjE2NUYxMDkyRTEyMTYyRTE2REQKKzoxMDE0MjAwMDE5MkExMjFCMDA1MTA0QzBFMTAwRUUxQUIwRUUyRTE2NkMKKzoxMDE0MzAwMDE3MEVGRjEzMkYxNjE4MEZDQzAxQUNBQTJGMTIxQTBFN0QKKzoxMDE0NDAwMEJDMDFBQ0ZDN0ZDQjAxQjFBQTJBMTYxQjJDMTYxQTYzNzcKKzoxMDE0NTAwMEZDNjIwMDAwN0ZCMzAyNjNGRTMxNjNGRTJCN0VCMzAyQTkKKzoxMDE0NjAwMDYzRkMzNDYzRkMyRTAwMDA2NDUwQzBEQTIwREJGMDU4Q0IKKzoxMDE0NzAwMDE1REVDMDIwRDEwRkMwOTE2M0ZEN0UwMEMwOTE2M0ZBREMKKzoxMDE0ODAwMDRDREEyMERCNzBDMEQxMkUwQTgwQzA5QTI5MjQ2ODJDNDcKKzoxMDE0OTAwMDcwMDc1ODE0Q0VEMkEwRDEwRjAzNEMwQjE4RUQ1MURCQkUKKzoxMDE0QTAwMEMwQTgyODc4QzMwMjJCQ0RGOEQ5QjA2M0ZBNjUwMDAwMzQKKzoxMDE0QjAwMDJBMkM3NERCNDA1ODBFNTA2M0ZBRTgwMDAwMDAyRDI1RkEKKzoxMDE0QzAwMDAyN0JDOTAxQzBCMDY0QjAxNzJDQjAwNzI4QjAwMERBQTUKKzoxMDE0RDAwMDIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGQjMKKzoxMDE0RTAwMEU3QzAyMEQxMEZDMDkxNjNGQzA0MDIyQTAyNTgwMjUwQzkKKzoxMDE0RjAwMDBBQTIwMjA2MDAwMDAyMkEwMjU4MDI0RDBBQTIwMjA2QUYKKzoxMDE1MDAwMDAwMDBEQjcwREEyMEMwRDEyRTBBODBDMDlFMjkyNDY4M0EKKzoxMDE1MTAwMDJDNzAwNzU4MTRBRUMwMjBEMTBGQzA5NDYzRkJDRjAwQ0QKKzoxMDE1MjAwMEMwOTY2M0ZCQzlDMDk2NjNGQkM0MDAwMDJBMkM3NERCMjEKKzoxMDE1MzAwMDMwREM0MDVCRkUxM0RCQTBDMkEwMkFCNDAwMkYyMDBDREQKKzoxMDE1NDAwMDYzRkYyNzAwOEQzNThDQjc3RENCMDI2M0ZERDI2M0ZDMzIKKzoxMDE1NTAwMDcxOEYzNThFRDc3RkVCMDI2M0ZEQzU2M0ZDNjQwMDAwOUQKKzoxMDE1NjAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDRDMDIwRDEwRjAwRkIKKzoxMDE1NzAwMDZDMTAwNDJCMjIxRTI4MjIxREMwQTBDMDk0MjkyNDA2MTIKKzoxMDE1ODAwMDJBMjUwMjdCODkwMURCQTBDOUI5MTNFRDA4REEyMDI4REUKKzoxMDE1OTAwMEIwMDAyQ0IwMDcwMzg4MEEyODgyNENDMEQxMEI4MDAwMTEKKzoxMDE1QTAwMERCQTA2NUFGRTdDMDIwRDEwRjAwMDAwMDZDMTAwNDI5NUMKKzoxMDE1QjAwMDIwMDYyQTIxMDI2ODk4MDUyODlDRjk2NTgxMUEwQTBBRTIKKzoxMDE1QzAwMDRDNjVBMEYwMTZFQ0ZCMkI2MjlFMUFFQ0Y4NkZCODAyOEIKKzoxMDE1RDAwMDYwMDBGMTJBQTIyNjY4QTAwNzhCMjAwQUJCMEM2NUIwMjgKKzoxMDE1RTAwMEUzMkE2MjlENjRBMEREMkIyMDBDMENCQzExQTZDQzJEM0YKKzoxMDE1RjAwMEMyODY2RkQ5MDI2MDAwRDcxREVDRUYwREJEMEEyREQyNTcKKzoxMDE2MDAwMEEzNjhEMDA3OEUyMDBERUUwQzY1RTBDMzI3QzI4NUMwMEQKKzoxMDE2MTAwMEUwNjQ3MEJCMURFQ0Y0Njg0MzREMUNFQ0YzOEEyQjBDQUEKKzoxMDE2MjAwMEFBMDI5QTcwODkyMDA4OTkxMTBEOTkwMjk5NzE4ODJBNDUKKzoxMDE2MzAwMDk4NzQ4RjMyOUY3NTI4MjEwNDA4ODgxMTk4NzcxOEVDQzgKKzoxMDE2NDAwMEU0MENCRjExQTZGRjJERjI4NUE4QjgyRTg0Q0YyRERDQTcKKzoxMDE2NTAwMDI4MkRGNjg1Qzg1QTJBMkM3NERCNDA1ODBERTdEMkEwRjUKKzoxMDE2NjAwMEQxMEZDMDIwRDEwRjAwMDAyQzlDRjk2NEMwOEQyQzIwMUMKKzoxMDE2NzAwMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RkM2Njk3MDlFMEMKKzoxMDE2ODAwMDY2MThFQ0RBODkzMDhGMkIwOTg5NDAwQjk5MTAwOUZGMTUKKzoxMDE2OTAwMDAyMDhGRjAyOUY3MDhDMjAwOENDMTEwRENDMDI5QzcxQjcKKzoxMDE2QTAwMDhBMzM5QTczODkzMjk5NzI4ODJBOTg3NDhGMzQ5Rjc1MTUKKzoxMDE2QjAwMDYzRkY4MjAwMDBDQzU3REEyMERCMzBEQzQwNTgxNEI4REUKKzoxMDE2QzAwMEMwMjBEMTBGMDBEQTIwQzBCNjU4MTU0NzYzRkZFNTAwRUYKKzoxMDE2RDAwMERBMjA1ODE1NDU2M0ZGREMwMERBMjBEQjMwREM0MEREMjIKKzoxMDE2RTAwMDUwNTgxNUM3RDJBMEQxMEYyQjIxMDQ1ODEzREExREVDODYKKzoxMDE2RjAwMEJEMkIyMDBDQzBFMDJFMjQ2NjYzRkY4NDJGMjEyM0MwNjUKKzoxMDE3MDAwMEM4N0ZDMzAyNjNGRjc5MkMyMDY2MkIyMTA0QjFDQzBDNjcKKzoxMDE3MTAwMDBDNDcyQzI0NjY1ODEzQ0YxREVDQjMyQjIwMENDMEUwRDMKKzoxMDE3MjAwMDJFMjQ2NjYzRkY1QTAwMDA2QzEwMDRDMEI3QzBBMTE2RDcKKzoxMDE3MzAwMEVDQjAxNUVDQTJENzIwRDg0MEI4MjJDMDQwMDUzNTAyNDUKKzoxMDE3NDAwMDk2NzE5NTcwMDJBNDM4MDQwNDQyQzk0QjFBRUM5NTE5OUQKKzoxMDE3NTAwMEVDOTYyOUE2N0VDMTQwRDMwRjZENEEwNTAwODA4ODAwMTMKKzoxMDE3NjAwMDIwOEMyMjBBODhBMjcyRDEwRkMwNTAwOEE1Mzg3NUIwMEIKKzoxMDE3NzAwMEUzNjNGRkQ3NkMxMDA4OTMxNDk0MTIyOTIwMDY2NTUyNzYKKzoxMDE3ODAwMDg4QzA3MTY4OTgwNTJBOUNGOTY1QTI5ODE2RUM4OTI5ODkKKzoxMDE3OTAwMDIxMDI4QTE0MDkwOTRDNjU5MEM3OEFBMDBBNkE1MTJBNTUKKzoxMDE3QTAwMEFDRkQ2NUEwQkNDQzVGREIzMERBMjA4QzEyNTgxNDdDMTkKKzoxMDE3QjAwMEMwNTE5QTE0QzdCRjlCQTk4RTE0MkVFMjA5NjhFMDYwM0QKKzoxMDE3QzAwMDJGNjI5RTFERUM3QTZGRjgwMjYwMDA4MTJERDIyNjY4OTAKKzoxMDE3RDAwMEQwMDUyRjIyMDA3REY5NzUyQzYyOURDNzkwNjRDMDZERTUKKzoxMDE3RTAwMDlDMTE4QTE0MkIyMDBDMkFBMDIwMENCRDExQTZERDBBMDYKKzoxMDE3RjAwMDRGMTRCRkE4MDk4ODAxMjlEMjg2QUY4ODI4OEMwOTc5OUYKKzoxMDE4MDAwMDhCNTUxRkVDNkMwRkJGMEEyRkYyQTM2OEYwMDUyODIyM0UKKzoxMDE4MTAwMDAwN0Y4OTQzMjlEMjg1RDQ5MDY1OTA3NzYwMDAzRDAwOTAKKzoxMDE4MjAwMDAwMkIyMDBDMUZFQzY0MENCRDExQTZERDI5RDI4NjBGMDUKKzoxMDE4MzAwMEJGMEE2RTk2MTAyRkYyQTM2OEYwMDQ4ODIwN0Y4OTA1RjYKKzoxMDE4NDAwMDI5RDI4NTY1OTE2NURBMjA1ODE0RTc2MDAwMTNEQTIwMDMKKzoxMDE4NTAwMEMwQjY1ODE0RTU2MDAwMDlDMDkwNjNGRkI5REEyMDU4OUIKKzoxMDE4NjAwMDE0RTI4OTE0ODk5MTA5RkU1MDY1NTFFNDhDMTI4RDE0OUIKKzoxMDE4NzAwMERBMjBEQkQwOEREMDlFMTAwRDZENTE1ODEzNTQ5QTE0ODAKKzoxMDE4ODAwMDY0QTIwOEM3NUY4RkExOTVBOUMwNTEwRjBGNDc5RjEyOEYKKzoxMDE4OTAwMDYzRkVGQjAwQzA5MUMwRjEyODIwMDYyQzIwNjYyODhDMzYKKzoxMDE4QTAwMEY5QTdDQzBDMEM0NzJDMjQ2NjZGQzYwODhEMTQ4REQxN0IKKzoxMDE4QjAwMDcwREUwMUMwOTBERDkwNjQ4MTU5QzlEMzJBMTIwMTJCREEKKzoxMDE4QzAwMDIxMDQ1ODEzNjQ4QTE0QzBCMDJCMjQ2NjhFQTkyQUEwNjAKKzoxMDE4RDAwMDIwMEUyODE0MUNFQzQzOEQxNDE1RUMzN0MxNzAwQTc3QzgKKzoxMDE4RTAwMDM2ODU1NjJEREMyOEFDMkM5QzEzREVEMEE4NTU3Q0QzMzUKKzoxMDE4RjAwMDAyMkVEREY4RDNFMERBNDAwNTVCMDJEQzMwNUJGRjhBQzQKKzoxMDE5MDAwMEQ0QTAyODIwMENCNDU1QzBEMDJCMEE4ODJGMEE4MDBDRjQKKzoxMDE5MTAwMDhDMTFBNkNDMjlDMjg1QUYzRkFCOTkyOUM2ODUxQ0VDOUEKKzoxMDE5MjAwMDJDREVGMEFDODgyRDg0Q0YyODEyMDMyOTEyMDQ3OEYzMjIKKzoxMDE5MzAwMDAyMkVGREY4Mjg5MDIwRDNFMDA3ODgwQ0MxNzAwODA4MUIKKzoxMDE5NDAwMDQ3Mjg5NDIwMDg3NzM2NjU3RkFCODkxNDEzRUMyQTg5RTEKKzoxMDE5NTAwMDkwQzBGNDc3OTc0OTFCRUMyOEMxQ0EyODIxMDQ4NTE0NEMKKzoxMDE5NjAwMDA5OUU0MDA2RUUxMTg3NTMwNDg4MTE4NTUyMEU4ODAyQTUKKzoxMDE5NzAwMDBDODgwMjlCQTA5RkExOEYyQjlEQTU5OEE0OTdBNzk1NEIKKzoxMDE5ODAwMEE2MDNGRjAyOUZBMjJDMjAwQzFFRUMxMUFFQ0UwQ0NDQTUKKzoxMDE5OTAwMDExMDZDQzA4MkJDMjg1MkRFNENGMkJCQzIwMkJDNjg1OEQKKzoxMDE5QTAwMDJBMkM3NDhCMTI1ODBEMTREMkEwRDEwRjI4MjAzREMwQzAKKzoxMDE5QjAwMEUwN0M4NzdGMkUyNDY3MEUwQTQ3NjVBMDdCMUFFQzBGMTgKKzoxMDE5QzAwMDg4MjAxRUVCRkQ4RjE0OEVFNDhGRjQwODg4MTEwQTg4OUUKKzoxMDE5RDAwMDAyMEY4RjE0QUZFRTFGRUMwQTk4OTEwRkVFMDI5RTkwNEIKKzoxMDE5RTAwMDFFRUMwOUMwODAxQUVCRkEyQ0QyODVBQUJBQjhDQzI4MTIKKzoxMDE5RjAwMEE0Q0YyQ0Q2ODUyQzIxMDIyRjIwNzAwRUNDMDJCMUZGNTMKKzoxMDFBMDAwMDJGMjQ3MDJDMjUwMkMwMjBEMTBGODcxNDg3NzAwNzA3NjAKKzoxMDFBMTAwMDQ3NjNGRDZFMjgyMTIzQzA5OTc5OEIwMjYzRkU5QUREMEUKKzoxMDFBMjAwMEYwNjNGRTk1MDBEQTIwREIzMDhDMTJERDUwNTgxNEY0QTAKKzoxMDFBMzAwMEQyQTBEMTBGQzBFMTYzRkY3QThCMTQ4QzEyREQ1MEMwQUQKKzoxMDFBNDAwMEFBMkUwQTgwMkEyNDY4REEyMDU4MTM2MEQyQTBEMTBGNjcKKzoxMDFBNTAwMDAwNzA5NjU1MkI2MjlFNkVCODUzMURFQkQ0MkREMjI2ODYKKzoxMDFBNjAwMDY4RDAwNDhFMjA3REU5NDUyQTYyOURDQkFGMkIyMTA0RUUKKzoxMDFBNzAwMDJDMjA2NjU4MTJGOEMwOTAyOTI0NjY4MjE0MThFQkUyRDQKKzoxMDFBODAwMDhGMjEwOEZGMDE5RjIxQzAyMEQxMEYwMDhCMTBDOUI4MDIKKzoxMDFBOTAwMDhDQTAwQzZDNTFDQ0NDOEUyNDFGRUJEMDhERTE5RTE0MEQKKzoxMDFBQTAwMDBGREQwMjlERTE4ODEwNjU4RkE5QzAyMEQxMEZEQTIwREIKKzoxMDFBQjAwMEMwQjY1ODE0NERDMDIwRDEwRjAwMDAwMDZDMTAwNjI5OEMKKzoxMDFBQzAwMDIxMDJDMEQwNzU5NzEwMkEzMjA0N0ZBNzBBOEIzNTdGNzgKKzoxMDFBRDAwMEJGMDUyRDI1MDIwREQ5MDIwOTBDNEM2NUMxODIxNkVCRkMKKzoxMDFBRTAwMEI0MUVFQkIyMjg2MjlFQzBGQTc4RjMwMjYwMDE4ODI5MjYKKzoxMDFBRjAwMEUyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMTdBMkE2MjlEQ0QKKzoxMDFCMDAwMERGQTA2NEExNzcyQjIwMEMwQ0JDMTFBNkNDMjlDMjg2QzcKKzoxMDFCMTAwMEMwOEM3OTgzMDI2MDAxNTcxOUVCQTcwOUI5MEEyOTkyOTEKKzoxMDFCMjAwMEEzNjg5MDA3ODgyMDA5ODgwQzY1ODE0MzI3QzI4NTFDMUIKKzoxMDFCMzAwMEVCQTk2NDcxM0E4OTMxMDk4QjE0MENCQjAxNkZCMTFEOUIKKzoxMDFCNDAwMDJDMjA2NjlGMTBCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyNkMKKzoxMDFCNTAwMDYwMDE0MDA5RkY1MDY1RjEzQThBMTAyQUFDMTg4OTM0QjcKKzoxMDFCNjAwMEMwQzQ3Rjk3M0MxOEVCQUExQkVCQTk4RjM1OUM3MTlCRDcKKzoxMDFCNzAwMDcwOEIyMDlENzQwOEJCMDI5QjcyQzA4Mjk4NzUxQkVCMTIKKzoxMDFCODAwMEE1MEYwODQwOUI3MzBGODgxMTk4Nzc3RkY3MEIyRjIxQzMKKzoxMDFCOTAwMDAyMjg0QTAwMDhGRjAyMkYyNTAyQzBCNDYwMDAwNDAwOUEKKzoxMDFCQTAwMDAwMDBDMEIwN0U5NzA0OEYzNjJGMjUyMjdEOTcwNDg4RDEKKzoxMDFCQjAwMDM3MjgyNTIxN0M5NzM2QzBGMUMwOTAwQUY5MzgyRjNDOTAKKzoxMDFCQzAwMDIwMDkwOTQyNjQ5MDg2MTlFQjc2MThFQjc3Mjg5NjdFRjcKKzoxMDFCRDAwMDAwRjA4ODAwQTA4QzAwRjA4ODAwQTA4QzAwRjA4ODAwNDUKKzoxMDFCRTAwMEEwOEMyQTYyOUQyREU0QTIyQUFDMTgyQTY2OUQ4OTMwMTkKKzoxMDFCRjAwMDc3OTczODhGMzM4QTMyMThFQjgwMDdCRTBCMkMyMTA0N0QKKzoxMDFDMDAwMEI0QkIwNENDMTE5OEUwQzA4NDk4RTE4ODJCOURFNTlBODAKKzoxMDFDMTAwMEU2OUZFNzFBRUI3ODA5OUY0MDA2RkYxMTBGQ0MwMjBBRjYKKzoxMDFDMjAwMDg4MDI5OEUyQzFGQzBGQ0MwMjJDRTYwNEM5QjgyQzIwMzMKKzoxMDFDMzAwMDBDMUVFQjY3MENDQTExQUVDQzA2QUEwODI5QTI4NTJEOTIKKzoxMDFDNDAwMEM0Q0YwOUI5MEIyOUE2ODVDRjVDQzAyMEQxMEZDMDgxQjQKKzoxMDFDNTAwMEMwOTAwRjg5MzhDMDg3Nzk4ODAyNjNGRjcyNjNGRjY2N0UKKzoxMDFDNjAwMDAwQ0M1N0RBMjBEQjMwREM0MDU4MTM0REMwMjBEMTBGQjgKKzoxMDFDNzAwMERBMjA1ODEzREQ2M0ZGRThDMEEwNjNGRTgyREEyMEMwREIKKzoxMDFDODAwMEI2NTgxM0Q5NjNGRkQ5MDBEQjQwMkEyQzc0NTgwQzVBN0MKKzoxMDFDOTAwMEQyQTBEMTBGOEExMDJCMjEwNDU4MTI2RTFFRUI0NEMwMjMKKzoxMDFDQTAwMEQwMkQyNDY2NjNGRUIxMDA2QzEwMDZENjIwMTlFQjNGRTAKKzoxMDFDQjAwMDFFRUI0MTI4NjEwMjE3RUIzRTA4MDg0QzY1ODA1RjhBRTUKKzoxMDFDQzAwMDMwMEE2QTUxNjlBMzU3MkI3MjlFNkVCODNGMkE5MjI2M0EKKzoxMDFDRDAwMDY4QTAwNDhDNjA3QUM5MzQyQTcyOUQyQzRDRkVDQUFCNzEKKzoxMDFDRTAwMDJCNjAwQ0I2NEYwQ0JEMTFBN0REMjhEMjg2MEVCRTBBQTQKKzoxMDFDRjAwMDc4RkIyNjlDMTEyRUUyQTMyQzE2MDA2OEUwMDUyRjYyQ0IKKzoxMDFEMDAwMDAwN0VGOTE1MjJEMjg1Q0YyNTYwMDAwRDAwREE2MEMwNzMKKzoxMDFEMTAwMEI2NTgxM0I1Qzg1QTYwMDEwRjAwREE2MDU4MTNCMjY1OUYKKzoxMDFEMjAwMDUxMDZEQzQwREIzMDhEMzBEQTYwMEQ2RDUxNTgxMjI3RTIKKzoxMDFEMzAwMEQzQTA2NEEwRjM4NEExQzA1MTA0MDQ0NzYzRkY2RDAwRTUKKzoxMDFENDAwMEMwQjAyQzYwNjY4OTMxQjFDQzBDMEM0NzJDNjQ2NjZGMzYKKzoxMDFENTAwMEM2MDI3MDk2MEEyQjYxMDQ1ODEyM0VDMEIwMkI2NDY2MEUKKzoxMDFENjAwMDY1NTBCNDJBM0MxMEMwRTdEQzIwQzBEMUMwRjAwMkRGQ0YKKzoxMDFENzAwMDM4MEYwRjQyNjRGMDkwMTlFQjBBMThFQjBCMjg5NjdFOEYKKzoxMDFEODAwMDhEMTA2RERBMDUwMEEwODgwMEMwOENDMEEwODkzMDFEQzAKKzoxMDFEOTAwMEVCMUE3Nzk3NTM4ODMyOEMxMDhGMzMwMkNFMEJDMDI0MDYKKzoxMDFEQTAwMDkyRTEyMjYxMDQ5REUwMDQyMjExOEQ2QjlCRTU5RkU3ODcKKzoxMDFEQjAwMDk4RTYxRkVCMTAwOTk4NDAwNjg4MTEwODIyMDIwRkRERjMKKzoxMDFEQzAwMDAyQzE4RDlERTIwODIyMDI5MkU0QjRDMjJFNjAwQzFGNzMKKzoxMDFERDAwMEVCMDAwQ0U4MTFBNzg4MkM4Mjg1QUZFRTBDMjIwQjJCQjAKKzoxMDFERTAwMEU0Q0YyMjg2ODVEMkEwRDEwRjI4NjAwQ0QyQTA4QzExMUUKKzoxMDFERjAwMDE5RUFGODBDOEQxMUE5ODhBN0REMkVEMjg1MkI4NENGODYKKzoxMDFFMDAwMDBFQ0MwQjJDRDY4NUQxMEZDMEYwMEFERjM4N0ZFODAyNEMKKzoxMDFFMTAwMDYzRkY2QzYzRkY2MDAwMDAyQTZDNzRDMEIyREMyMEREREQKKzoxMDFFMjAwMDQwNTgxMjFDQzBCMDYzRkY2M0MwMjBEMTBGMDAwMDAwRjcKKzoxMDFFMzAwMDZDMTAwNDJDMjIxRDJBMjIxRUMwNDlEMzIwMjkzMDA2RjIKKzoxMDFFNDAwMDI0MzQ2OEMwNDA3QUMxMDVEREEwNjAwMDAyMDBDMEQwMjMKKzoxMDFFNTAwMDZFOTczOEMwOEYyRTBBODAyQjMwMTRDMDk2MjkzNDA2MTYKKzoxMDFFNjAwMDBFQkIwMjJFMzEwMjJCMzQxNDdFODAwNDI0MzUwMkRFOTgKKzoxMDFFNzAwMDQwN0FDMTBFQzhBQkRCRDBEQTMwMkMwQTAwNTgwQTc2QTMKKzoxMDFFODAwMDJFMzEwMjBFMEY0Q0M4RkVDMDIwRDEwRjY4OTVGODI4RTUKKzoxMDFFOTAwMDMxMDIwODA4NEM2NThGRUYxQUVBQzYxQ0VBQzQyQkEyNkYKKzoxMDFFQTAwMDlFQzA5QTdCOUI0NjJCQzIyNjY4QjAwNDhEMzA3QkQ5OUUKKzoxMDFFQjAwMDNCMjlBMjlEQzBFM0NCOTM5NDkwMUJFQUQ3MkQzMTA0MUMKKzoxMDFFQzAwMDlCOTYwOEREMTEwRUREMDI5RDk3OUQ5MTEyRUFENEMwMEMKKzoxMDFFRDAwMEU1MjRDNEEyMkUzNDA2MkYzMTAyMjhBMjlEMDJGRjAyNUYKKzoxMDFFRTAwMDI4OEMzMDI4QTY5RDJGMzUwMkMwMjBEMTBGREEzMEMwQjMKKzoxMDFFRjAwMEI2NTgxMzNEQzAyMEQxMEY2QzEwMDYyOTIwMDY2ODk4RjMKKzoxMDFGMDAwMDA1Mjg5Q0Y5NjU4MjVEMjkyMTAyMDkwOTRDNjU5MjEwMUEKKzoxMDFGMTAwMENENTFEQjMwREEyMDA0NEMwMjU4MTJBMUMwNTFEM0EwQkQKKzoxMDFGMjAwMEM3QUYyQTM2MEFDMEUwMTlFQUEzMURFQUE5MUZFQUEyMzAKKzoxMDFGMzAwMDhBM0ExNkVBOUZCMUFDNjRDMTM1Mjg2MjlFNkY4ODAyNjYKKzoxMDFGNDAwMDYwMDFGMTI5REMzMzI5OTIyNjY4OTAwNzhCMjAwOUJCQjgKKzoxMDFGNTAwMDBDNjVCMUUwMjc2MjlEQzA4RTY0NzFEODJCMjAwQzBDRkIKKzoxMDFGNjAwMEJDMTFBNkNDMjlDMjg2Nzk4MzAyNjAwMUQyMTlFQTkxRkMKKzoxMDFGNzAwMDA5QjkwQTI5OTJBMzk3MTA2ODkwMDgyODIyMDAwOTg4QjUKKzoxMDFGODAwMDBDNjU4MUJCMjdDMjg1NjQ3MUI1MjkyMDA2Mjk5Q0Y5OUYKKzoxMDFGOTAwMDY0OTFFQzJDMjA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NjIKKzoxMDFGQTAwMDZFQzYwMjYwMDFBMTA5Rjg1MDY1ODE5Qjg4MzY4OUY0RUMKKzoxMDFGQjAwMDA4OEMxNEFDOTkxQ0VBODEwQzk5MDIyQzIxMDQ5OTcwQUMKKzoxMDFGQzAwMDE5RUE5ODA4MDg0Nzk5NzE4OTJBMDk4ODEwMDg5OTAyMUUKKzoxMDFGRDAwMDE4RUE5NTA4OTkwMjk5NzIyODMwMTMyOTMwMTIwNDg4NUEKKzoxMDFGRTAwMDEwMDY5OTEwMDg5OTAyMjgzMDJDOUE3NDBDODgxMDA4NTEKKzoxMDFGRjAwMEM4MDIwOTg4MDI5ODczODkzNzk5NzU4ODM4OTg3NjhBNTMKKzoxMDIwMDAwMDM5QzA4MTlBNzcxQUVBODg4OTM1OTg3Qjk5NzgwOTg5NDUKKzoxMDIwMTAwMDE0MEE5OTAyOTk3QThBMzA4OTMyNzdBNzM2MThFQTc2QjMKKzoxMDIwMjAwMDhGMzM5ODdDQzA4NDk4N0Q4ODJCMkU3NjExMjk3NjEyNjgKKzoxMDIwMzAwMDJGNzYxMzE5RUE3MDBBOUY0MDA2RkYxMTA0Q0ExMTA5OEUKKzoxMDIwNDAwMDg4MDIwRkFBMDI5ODdFQzFGOTBGQUEwMjJBNzYxMEMwNTAKKzoxMDIwNTAwMEFBNjAwMDAxQzBBNkFEQkYwQ0JDMTFBNkNDMjlDMjg1RTgKKzoxMDIwNjAwMDJFRjRDRjA5QTkwQjI5QzY4NTY1NTEwN0MwMjBEMTBGRDEKKzoxMDIwNzAwMDJCMjAwQzBDQkMxMTA2Q0MwODI4QzI4NjA5QjkwQTZGQUIKKzoxMDIwODAwMDg5MDI2MDAxMkUyOTkyQTM2ODkwMDgyQTIyMDAwOUFBRDkKKzoxMDIwOTAwMDBDNjVBMTFGMkFDMjg1NjRBMTE5MjgyMDNEMDgyODQwOEIKKzoxMDIwQTAwMDY0ODA4Qzg0MzUwNDg0MTQ2NDQwODQ4NUY1NzQ1MzdGODMKKzoxMDIwQjAwMDg0MzYwNDg0MTQ2NDQwNzc3NDUzNzQyOTMwMTNDMDhDQkMKKzoxMDIwQzAwMDc5ODg2Q0MwOTAyOTI0NjcwOTA4NDc2NTgwRUQ4ODIwQ0QKKzoxMDIwRDAwMDg5RjQ4NDM1MUZFQTRCMDQ4NDE0QTQ5NDBGNDQwMjk0QjkKKzoxMDIwRTAwMEEwMTRFQTQ2MDg4ODExMDQ4ODAyOThBMTg0MzY5OEEzQUYKKzoxMDIwRjAwMDA0ODQxNEE0OTkwRjk5MDI5OUEyMTlFQTQyQURCNDI4NTQKKzoxMDIxMDAwMEMyODUyRTQ0Q0YyODhDMTAyOEM2ODUyODIxMDIyRjIwNzYKKzoxMDIxMTAwMDcwMDk4ODAyQjJGRjJGMjQ3MDI4MjUwMkMwMjBEMTBGMzkKKzoxMDIxMjAwMDAwQ0M1N0RBMjBEQjMwREM0MDU4MTIxREMwMjBEMTBGMjQKKzoxMDIxMzAwMEMwOTE2M0ZGOEZEQTIwQzBCNjU4MTJBQjYzRkZFMTAwOTUKKzoxMDIxNDAwMERBMjA1ODEyQTk2M0ZGRDg4QTEwMkIyMTA0NTgxMTQxQjQKKzoxMDIxNTAwMDFERUEyMDFGRUExOTJCMjAwQ0MwRTAyRTI0NjY4QTNBQzMKKzoxMDIxNjAwMDYzRkU0ODAwMDBEQTIwREIzMERDNDBERDUwNTgxMzI0RTkKKzoxMDIxNzAwMEQyQTBEMTBGMkEyQzc0REI0MDU4MEIxRkQyQTBEMTBGNTQKKzoxMDIxODAwMDI5MjEyM0MwODg3OTgzMDI2M0ZFMjAyQTEyMDAyQzIwOTMKKzoxMDIxOTAwMDY2MkIyMTA0MkNDQzAxMEMwQzQ3MkMyNDY2NTgxMTJERTUKKzoxMDIxQTAwMDFERUEwQzFGRUEwNTJCMjAwQ0MwRTAyRTI0NjY4QTNBOUIKKzoxMDIxQjAwMDYzRkRGODAwREEyMDU4MTI4QzYzRkY2NERBMjA1QkZGQkQKKzoxMDIxQzAwMDFDRDJBMEQxMEYwMDAwMDA2QzEwMDg5NTE1QzA2MUMxOTEKKzoxMDIxRDAwMEIwRDk0MDJBMjAzREMwNDAwQkFBMDEwQTY0MzgyQTIwMDkKKzoxMDIxRTAwMDA2MjkxNjA2NjhBODA1MkNBQ0Y5NjVDMzNCMURFOUYyNjMKKzoxMDIxRjAwMDY0NDAwNTJGMTIwNTY0RjI5QzI2MjEwMjFFRTlFRTA2QkEKKzoxMDIyMDAwMDA2NEM2NTYyRTMxNUU5RUE2NDQwRDk4QTM1MjkzMDAzNTIKKzoxMDIyMTAwMDlBMTQwQTk5MEM2NDkwQ0MyQzIwMEM4QjE0OUMxMTBDRjEKKzoxMDIyMjAwMENDMTFBNUNDOUMxMjJDQzI4NkI0QkI3Q0IzMDI2MDAyM0MKKzoxMDIyMzAwMEQzOEYxMTBFRkUwQTJFRTJBMzY4RTAwOTg2MjBEMzBGODkKKzoxMDIyNDAwMDBFNjYwQzY1NjJCRTg4MTIyODgyODU2NDgyQjY4OTE0ODcKKzoxMDIyNTAwMDY0OTA1RURBODBEOTMwOEMyMDFFRTlFODFGRTlFOTFEMjAKKzoxMDIyNjAwMEU5RDY4QjE0OERENEQ0QjA3RkI3MThCODhBMjkzQzEwMjYKKzoxMDIyNzAwMDg1MzYwOEM2MTEwRTY2MDI5NjgxMDU4NTE0QTVENTBGMTAKKzoxMDIyODAwMDU1MDI5NTgwMDQxODE0NkQ4OTI3ODg5NjA4Q0IxMTA4OEIKKzoxMDIyOTAwMDg4MTQwRUJCMDJBOEQ4Mjk5QzIwMEY4ODAyOUJBMTk4MDUKKzoxMDIyQTAwMEEwODg5MjlCQTMwODg4MTRBOEQ4MEY4ODAyOThBMjJBMTUKKzoxMDIyQjAwMEFDMTAxOUU5RDRDMEMwOEYxNDFFRTlDNTg2MTI4RDExNjcKKzoxMDIyQzAwMDI4NjI4NUFFREQwOEZGMEIyQ0Q0Q0YyODIxMDIyRjY2QjMKKzoxMDIyRDAwMDg1OEIzNTJBMjA3MDA5ODgwMkFCQUEyODI1MDIyQTI0N0EKKzoxMDIyRTAwMDcwQzAyMEQxMEYyOTUyOUUxOEU5QjE2Rjk4MDI2MDAyODgKKzoxMDIyRjAwMDA4Mjg4MjI2Njg4MDA4MjkyMjAwMDg5OTBDNjU5MUY5MkYKKzoxMDIzMDAwMDJBNTI5REMxQ0E5QTEzNjRBMUVGMkIyMDBDMjYyMDA2RTUKKzoxMDIzMTAwMDBDQjgxMUE1ODgyRDgyODYwRUJFMEE3REMzMDI2MDAyMEMKKzoxMDIzMjAwMDAyMkVFMkEzNjhFMDA4MkYyMjAwMEVGRjBDNjVGMUYzRjUKKzoxMDIzMzAwMDI4ODI4NURFODA2NDgxRkY5ODEwMjY2Q0Y5NjQ2MUZGMzUKKzoxMDIzNDAwMDJDMjA2Njg4MzFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyNUEKKzoxMDIzNTAwMDYwMDFCQzA4RkQ1MDY1RDFCNjE3RTlCNDE5RTk5ODFBQjcKKzoxMDIzNjAwMEU5OUYyQzIxMDQ4QjJEMjgzMDEwMkYyMTFEMEM4ODEwNjMKKzoxMDIzNzAwMDBCRkIwOTBDODgwMjBBODgwMjA5QkIwMjY0NDE1Mjg5REUKKzoxMDIzODAwMDEwQzA0RDlCOTA5NzkxOTg5MjhEMzVEOUUwNjREMDZDOTgKKzoxMDIzOTAwMEQ3MzBEQkQwRDgzMDdGRDcxMzI3M0MxMEJDRTkyNjMyQUEKKzoxMDIzQTAwMDE2OEMzOTk2RTY5Q0U3OEEzN0I0Mzg5QUU4MEIxMzE0RjIKKzoxMDIzQjAwMDY0MzA0OTJBODIxNjg2Nzk5QTk2OTY5NzhDNzc4QTdEMTgKKzoxMDIzQzAwMDlDOTgyQjgyMTcyQzdDMjA5QTlBMkE5QzE4OUI5OTg2ODEKKzoxMDIzRDAwMDdCQjAzQkI4ODk2REI5MjE4QkM5OTZBNTI2OTIxNjJBODgKKzoxMDIzRTAwMEFDMThCODk5OUJBMTk2QTA4QkM3ODZDRDlCQTIyQjkyQzcKKzoxMDIzRjAwMDE1OTZBNDlCQTM4NkNCMkNDQzIwMjZBNjA1QzAzNDZCQjcKKzoxMDI0MDAwMEQ0MjAwRDNCMEMwREQ4MDkwRTg4MEE3RkI3MDVDMDkwNkIKKzoxMDI0MTAwMDk5ODhCQzg4QzA5MDBCMUExMjZEQUEwNjk5ODg5OThCNkUKKzoxMDI0MjAwMDI4OEMxOEMwRDAxQkU5ODMxQ0U5ODIxNkU5NzhCMUZGMUIKKzoxMDI0MzAwMDJBMjExQzIzRTYxMzBGMEY0RjI2RTYxMjJGMjUxRDdGOUUKKzoxMDI0NDAwMEE5MDZDMEYwQzA4MDI4MjUxRDA1RjYxMTFBRTk3MThGNzQKKzoxMDI0NTAwMDIwMkJFNjE1MkNFNjE2MkRFNjE3MjZFNjE4MEFGQTAyQkEKKzoxMDI0NjAwMDJBRTYxNDI5MjAwNjI5OUNGOTY0OTBGRjI5MjAwQzhENjYKKzoxMDI0NzAwMDE1QzA4MDFBRTk1NzBDOUMxMUFBOTlBNUNDREEyMDJCMUIKKzoxMDI0ODAwMEMyODUyODk0Q0YwQjRCMEIyQkM2ODVDMEIwOEMxNjU4MzkKKzoxMDI0OTAwMDExMTREMkEwRDEwRjhBMzU2RkE1NDhEODMwOEJENTZERDUKKzoxMDI0QTAwMEE5MEM4QTg2MEE4QTE0Q0JBOTdBQjMzNzI4OEMxMEMwNjMKKzoxMDI0QjAwMDgwMjgyNDY3MDgwQjQ3NjVCMTEyREEyMERCMzAyQzEyMjQKKzoxMDI0QzAwMDA2NTgxMTM3RDNBMEMwQzFDMEQwMkRBNDAzOUMxNTYzRkEKKzoxMDI0RDAwMEZEMjY4NjM2NjQ2MTBDODkxMEMwNEQ5QjkwOTc5MTk4QkIKKzoxMDI0RTAwMDkyNjNGRUE0QzA4MTYzRkZDNzhBMTVDQ0E3REEyMERCMDQKKzoxMDI0RjAwMDMwOEMxNjU4MTEyQkMwMjBEMTBGREEyMEMwQjY1ODExREQKKzoxMDI1MDAwMEJBNjNGRkU0MDBEQTIwOEIxMTU4MTFCNzYzRkZEOTAwREEKKzoxMDI1MTAwMDlFMTc4QTEzMkIyMTA0NTgxMDRGOEUxN0MwQjAyQjI0RkUKKzoxMDI1MjAwMDY2NjNGRTM0QzA4MDYzRkUwOURBMjBEQjMwOEMxNkREODIKKzoxMDI1MzAwMDUwNTgxMjMzRDJBMEQxMEZEQTIwNTgxMUFCNjNGRkE4NDQKKzoxMDI1NDAwMDJEMjEyM0MwQzg3REMzMDI2M0ZFMEQ4QTEzMkIyMTA0RjUKKzoxMDI1NTAwMDJDMjA2Njk4MTdCMUNDMEMwQzQ3MkMyNDY2NTgxMDNERTMKKzoxMDI1NjAwMDhFMTdDMEQwMkQyNDY2NjNGREVFMDAwMDI2MjEyM0IwMTcKKzoxMDI1NzAwMDY2MDYwNjRGMjYyNTIzNjU2RUYxMjgyMDZBN0Y4NzA1QUIKKzoxMDI1ODAwMDA4Mjk0MTY0OTBBNUMwRDAxQkU5MUMxOUU5MkIyNjIwMUQKKzoxMDI1OTAwMDA3MjNFNjFCQjE2NjA5RkEwMjJCRTYxQTI4MjAwQTJENEEKKzoxMDI1QTAwMEU2MUQyQUU2MUUwOTg4MDIyOEU2MUM4ODI2MDYwNjQ3M0MKKzoxMDI1QjAwMDI4RTYyMDJCMjIwODI2RTUzRTJCRTYyMTJEMjQwNzJDOTkKKzoxMDI1QzAwMDIwMDYyQTIwNjQ2OEMzNDdCNDQ0NjNGRTlFREIzMERBRTkKKzoxMDI1RDAwMDIwOEQxNUMwQ0UyRTBBODAyQzI0Njg4QzE2NTgxMDdCQjYKKzoxMDI1RTAwMEQyQTBEMTBGOEUxMDJBMzIxNjE2RThGMzBBMkExNDg2Q0EKKzoxMDI1RjAwMDY2MkJFNjEyOTdFMTI3RTYxMzI4RTYxNEFBNjYwOTY2MTkKKzoxMDI2MDAwMDAyOTZFMDJFRUM0ODY5RUQ1MEMxNDY2M0ZEN0EwMDAwNjkKKzoxMDI2MTAwMDY0QUZCNDE5RThFOTI4MjAxNjg5OTIwQTg4MEMwMDkxNjEKKzoxMDI2MjAwMDA0MDA4ODFBQThCODk4Mjk2M0ZGOUMwMDJCMjEwNDZFMjcKKzoxMDI2MzAwMEI4MUUyQzIwNjZCOENDMEMwQzQ3MkMyNDY2QzlDMDlFNTIKKzoxMDI2NDAwMDE3OEExMzU4MTAwNDhFMTdDMDM0OEYyMEMwRDAyRDI0NDEKKzoxMDI2NTAwMDY2QzA2ODI2MjQwNjYzRkYyQzAwOEQzNUMwODA2NEQwRDgKKzoxMDI2NjAwMDRBRDlFMERDMzBEQkUwREYzMDFBRThGNEIxODhCNEZGQUYKKzoxMDI2NzAwMDE3RThGNDg2QzkyNDlERkY4REM4MkNDQzEwMkQ0NjMwNTgKKzoxMDI2ODAwMDA3NjcwMTJENDYzMjBBNjYwMTFERThFRTI2NDYzMUFEODgKKzoxMDI2OTAwMDZEMkQ0NjMzMjZGMjE1OTdCNzk2QjY4NEMzQkNCQjk0MEUKKzoxMDI2QTAwMEI1OEQzNTI5OUMxMDdEODNDMjJGMjExREMxNDY2M0ZENDgKKzoxMDI2QjAwMDRCMDAwMDAwNkMxMDA2MjkyMDA2Mjg5Q0Y4NjU4MkMzOTgKKzoxMDI2QzAwMDI5MjEwMjJCMjAwQzA5MDk0QzY1OTBFMTE2RThCOTBDNzAKKzoxMDI2RDAwMEJBMTFBNkFBMkRBMjg2MkMwQTEyN0RDMzAyNjAwMjkwMEUKKzoxMDI2RTAwMDE5RThCNTA5QjkwQTI5OTJBMzY4OTAwNzhDMjAwOUNDOEEKKzoxMDI2RjAwMDBDNjVDMjdDMjlBMjg1NjQ5Mjc2MkQ2MjlFMUFFOEFCOTUKKzoxMDI3MDAwMDZGRDgwMjYwMDI3MjJBQTIyNjI5MTYwMTY4QTAwODJCM0YKKzoxMDI3MTAwMDIyMDAwQUJCMEM2NUIyNjAyOTYyOURDMThDNjQ5MjU4OEMKKzoxMDI3MjAwMDJBMjEyMDBBODA2MDk5MTAyQzIwM0NDN0VGMDAwRjNFMjAKKzoxMDI3MzAwMDAxMEIzRUIxQkQwRkRCMzkwQkJCMDk4RjI2MERCRDExNUYKKzoxMDI3NDAwMDJEREMxQzBEMEQ0MTBFREQwMzhFMjdCMUREMEQwRDQxN0QKKzoxMDI3NTAwMDBGRUUwQzBEQkIwQjJCQkMxQzBCQjcwMjdFQzcxQzJDNDkKKzoxMDI3NjAwMDIxMjU3QkNCMTYyRDFBRkMwQ0JBMEMwREExNjAwMDA5OUIKKzoxMDI3NzAwMDNFMDEwNzNFQjE3ODA5ODczOTBCNzcwQTc3RUIwMjYwOTMKKzoxMDI3ODAwMDAyMEEyQzIxMjMyODIxMjFCMUNDMEMwQzRGMkMyNTIzMEIKKzoxMDI3OTAwMDdDOEIyOUIwQ0QyRDI1MjNDODU1REEyMERCMzA1ODBGOEUKKzoxMDI3QTAwMEZBMjkyMTAyQ0M5NkMwRTgwRTlFMDIyRTI1MDJDQzU3QjMKKzoxMDI3QjAwMERBMjBEQjMwREM0MDU4MTA3QUMwMjBEMTBGMkMyMDY2QTQKKzoxMDI3QzAwMDg5MzFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyNjAwMUQzNTMKKzoxMDI3RDAwMDA5RkQ1MDY1RDFDRDJGMEEwMTJFMzAxMTI5MjIxNDY0MzQKKzoxMDI3RTAwMEUwMTEyODIyMUIwOTBDNDQwMEMxMDQwMEZBMUEwQTg4Q0YKKzoxMDI3RjAwMDAyMjgyNjFCMkUzMDEwQzBBMEMwQjA4ODMwMUNFODZFMDYKKzoxMDI4MDAwMDk0MTI5NTEzQzA0MTI1MjAzQzJDQzAyMjA4OEQxNDc3Q0EKKzoxMDI4MTAwMDg3MDUyRjBBMDEwQ0ZBMzhDMEYyQzA4NDA4NTgwMTBGNEUKKzoxMDI4MjAwMDVGMDEwRjRCMzgwNTM1NDAwN0JCMTBDMEYwMDg0RjM4MkIKKzoxMDI4MzAwMDA4RkYxMDBGQkIwMjI4RUNGRUMwRjAwODRGMzg4NDJCQjUKKzoxMDI4NDAwMDBCQTgxMDBBRkYxMDJBMjEyMDBGODgwMjBCODgwMjA4MEIKKzoxMDI4NTAwMDQ0MDIxOEU4N0Q4RjExMDg0NDAyMjgyMTI1MEEyQTE0MTEKKzoxMDI4NjAwMDA4MjgxNDA0ODgxMTBBODgwMjJBMjEwNDk0RjA4QjIwNzUKKzoxMDI4NzAwMDA0RTQxMDA4QkIxMTA0QkIwMkMwNEEwNEJCMDI5QkYxNzQKKzoxMDI4ODAwMDg0MkEwOEFCMTEwQkVCMDI5NEY0MEE1NDExMEI0NDAyOTYKKzoxMDI4OTAwMDA1NTUxMDBEMUI0MDk0RjcwN0JCMTAwQjU1MDIwODU1NEEKKzoxMDI4QTAwMDAyQzA4MTk1RjY4NDMzQzA1MDk0RjNCMTk0OEIzMjk1NzUKKzoxMDI4QjAwMEY4OThGOTlCRjJDMDgwQzFCQzI0MjYxNDk4RkI5QkY1QzQKKzoxMDI4QzAwMDk5RkE4NTM4OTVGQzg0M0E5NEZEOEIzQjlCRkU4ODM5QjgKKzoxMDI4RDAwMDk4RkY4NTM1MjVGNjEwODQzNjg1MTMyNEY2MTE4QjM3M0QKKzoxMDI4RTAwMDg0MTIyQkY2MTJDMEIwNjRDMDgxODkzMDc3OTc0NjhENzAKKzoxMDI4RjAwMDMyODgzMzJFMzAxMDhGMTExQ0U4NDAwOTk5NDAwNjk5MTgKKzoxMDI5MDAwMDExMkNGNjE0QzBDNDJDRjYxNThDMkIyREY2MUEyOEY2QjMKKzoxMDI5MTAwMDFCMkJGNjE5MDRBODExMDk4ODAyMDhFRTAyMTlFODM1RTQKKzoxMDI5MjAwMEMxODAwOEVFMDIwOUM5MDIyOUY2MTYyRUY2MThDMDlFQ0IKKzoxMDI5MzAwMDYwMDAwNDAwMDAwMEMwOUEyRjIwMEMxOEU4MjUwQ0ZFNEYKKzoxMDI5NDAwMDExQThGRkE2RUUyREUyODUyQkY0Q0YwRDlEMEIyREU2RjEKKzoxMDI5NTAwMDg1Qzg3RjhBMjY4OTI5QTdBQTlBMjYwQTk5MEMwOTA5NzcKKzoxMDI5NjAwMDQ4MjkyNTI1NjU1MDRDQzAyMEQxMEYwMEMwOUE2M0ZGMkYKKzoxMDI5NzAwMEM2REEyMDU4MTA5RDYzRkUzNERBMjBDMEI2NTgxMDlBOEIKKzoxMDI5ODAwMDYzRkUyQTAwNjg5NzM4QzAyMEQxMEYwMDAwREEyMERCRjAKKzoxMDI5OTAwMDcwNTgxMDU3QzBCMEMwQzEwQUNBMzkwQUNCMzg2NUJEREIKKzoxMDI5QTAwMEUwNjNGRTA5OEExMDJCMjEwNDU4MEYyQUMwQjAyQjI0QTMKKzoxMDI5QjAwMDY2NjNGRTIxREI0MDJBMkM3NDU4MDkwRkQyQTBEMTBGODgKKzoxMDI5QzAwMERBMjA1ODBGMkY2M0ZDRjc2QzEwMDRDMDIwRDEwRjAwRTEKKzoxMDI5RDAwMDZDMTAwNDI5MEE4MDFFRTgxRDFGRTgxRDFDRTdGNTBDNzkKKzoxMDI5RTAwMDJCMTFBQ0JCMkMyQ0ZDMkRCMjg1MEZDQzAyOUVEMTlDQTQKKzoxMDI5RjAwMEQwQzA1MUMwNzAxM0U4MTkxNEU4MTgxOEU4MTYyQUIyQUMKKzoxMDJBMDAwMDg1QTgyODA0MjQwQTIzNDY5MUE5ODZCOEFBMkFCNjg1NEYKKzoxMDJBMTAwMEE5ODgyNzg0OUYyNTY0OUZEMTBGMDAwMDZDMTAwQUQ2RDcKKzoxMDJBMjAwMDMwMjgzMDEwMjkyMDA2Mjg4Q0Y5NjQ4MjlCNjg5ODBCODYKKzoxMDJBMzAwMDJBOUNGOTY1QTFCMjAyMkEwMjU4MEYxMTg5MzcxQkU3QjcKKzoxMDJBNDAwMERFQzg5MTY0NTIwRTJBMjEwMjBBMEM0QzY1QzI1ODhERDAKKzoxMDJBNTAwMDMwMTlFN0Q3NzRENzA1MkUyMTIzNjVFMjlFMkY5MjlFNjkKKzoxMDJBNjAwMDFBRTdEMzZGRjgwMjYwMDI1MzJBQTIyNjY4QTAwODJDNDYKKzoxMDJBNzAwMDIyMDAwQUNDMEM2NUMyNDQyQTkyOUQ2NEEyM0U5QTE1OUIKKzoxMDJBODAwMDFGRTdDRDhENjdDMUU2NjREMDBFMkI2MjA2MThFN0NBM0EKKzoxMDJBOTAwMDY0QjAwNTI4ODAyMTdCOEI0MjJCMjAwQzE4RTdDNTBDRTUKKzoxMDJBQTAwMEJDMTFBOENDMjlDMjg2NzlFQjQ1MEZCRTBBMkVFMkEzNDEKKzoxMDJBQjAwMDY4RTAwNDhGMjA3RUY5MzcyQ0MyODU5QzE4NjRDMjMzRUQKKzoxMDJBQzAwMDJCMjEyRjg3NjYwQjdCMzYwQjc5MEM2RjlEMjY2RUQyRTAKKzoxMDJBRDAwMDQ2MkMyMDNEN0JDNzQwQ0U1NTYwMDAxRTJBMjAwQ0MxRUQKKzoxMDJBRTAwMEIyOEMyMDU4MTA3NTlBMTg2NEEyNDU4RDY3NjNGRkNGODkKKzoxMDJBRjAwMEMwQzA2M0ZGQzVEN0IwNjNGRkQzMDBDMEUwNjAwMDAyNzEKKzoxMDJCMDAwMDJFNjAwMzBFREIwQzZFQjIwRURDNzAwQ0VBMTFBQTZBQUEKKzoxMDJCMTAwMDJBQUMyMDU4MDE5OUQ3QTBEQTIwREI3MEMxQzgyRDIxM0EKKzoxMDJCMjAwMDIwNTgxMDFCOEMyNjhCMjc5QTE2MENCQjBDN0FCMzM0QkEKKzoxMDJCMzAwMDhGMTg4OTYzOTlGMzg4NjI5OEYyOEU2NTlFRjgyRDYwRUMKKzoxMDJCNDAwMDEwOEExODlEMTc2OEQ3MjlDMEQwOURBOTJDMjIxODJCNTAKKzoxMDJCNTAwMDIyMTM5Q0FCOUJBQTk3QTU4RTY2N0U3MzAyNjAwMDk3OUEKKzoxMDJCNjAwMENGNTg2MDAwMUZEQTIwOEIxNjU4MEZFMTY1QTEzODYzM0IKKzoxMDJCNzAwMEZGQkRDMDgxQzA5MDhGMThDMEEyOUFGOTk5RkI5OEZBNDYKKzoxMDJCODAwMDk3RjU2M0ZGRDJEQjMwREEyMERDNDA1ODBGODVDMDUxNjcKKzoxMDJCOTAwMEQ2QTBDMEMwMkJBMDEwMkNBNDAzOUIxNzJDMTIwODAyOTcKKzoxMDJCQTAwMDJBMDIwNjZCMDJERjcwMkQ2MDAzOEUxNzlEMTQ5RTEwQTMKKzoxMDJCQjAwMDBDREQxMUMwRTBBRDZEMkREQzIwNTgwMTE4OEMxNDhCOUMKKzoxMDJCQzAwMDE2QUNBQzJDNjQwMzhBMjY4OTI5QUJBQTBBOTkwQzlBMDQKKzoxMDJCRDAwMDI2ODg2NjA5MDk0ODI5MjUyNTA3ODgwQzk4NjYyRjIyMkEKKzoxMDJCRTAwMDE4QTdGRjJGMjYxODYzRkU5NkRBMjBEQjMwREM0MEREQzUKKzoxMDJCRjAwMDUwNTgxMDgzRDJBMEQxMEZDMDMwMkMyMDY2ODk2MUIxMEIKKzoxMDJDMDAwMENDMEMwQzQ3MkMyNDY2NkVDNjAyNjAwMEQyQzAzMDA5ODIKKzoxMDJDMTAwMEZENTA2NUQwQ0E4RTY3NjRFMDY5NjQ3MDY2REI2MDhDQzUKKzoxMDJDMjAwMDE4REY3MERBMjAyRDYwMDM4RTE3MENERDExOUUxMEFEQjkKKzoxMDJDMzAwMDZEMkREQzIwMUVFNzg0NTgwMEY5MjMyNjE4REEyMDhCM0UKKzoxMDJDNDAwMDE2REM0MDJGMjIxM0RENTBCMUZGMkYyNjEzNTgwRjI0MUUKKzoxMDJDNTAwMEQyQTBEMTBGMDAyODIwM0QwODQ4NDA2NThERTc2Rjk1MzAKKzoxMDJDNjAwMDNFREEzMDhEQjU2RDk5MEM4Q0E4MEM4QzE0Q0FDRjdDRDMKKzoxMDJDNzAwMEQzMkQyQUFDMTBDMDkwMjkyNDY3MDkwRDQ3NjREREM1MDcKKzoxMDJDODAwMDYwMDA5MjAwMkMxMjA4MDY2QjAyMkQ2QzIwMDc3RjAyNTgKKzoxMDJDOTAwMDhFMTdEQTIwOUUxMDFFRTc2QjU4MDA3RDYzRkY5QTAwQTYKKzoxMDJDQTAwMEMwOTE2M0ZGRDEwMDAwMDA2NTUwODFEQTIwREI2MERDNTkKKzoxMDJDQjAwMDQwNTgwRjNCQzAyMEMwRjAyRkE0MDNEMTBGREEyMEMwMzIKKzoxMDJDQzAwMEI2NTgwRkM5NjNGRkUwMDAwMDZGOTUwMjYzRkQ2Q0RBMzAKKzoxMDJDRDAwMDIwREIzMERDNDBERDUwQzRFMDU4MEVCQ0QyQTBEMTBGNjgKKzoxMDJDRTAwMDhBMTUyQjIxMDQ1ODBFNUIyMzI0NjYyODYwMTA5ODE3NDAKKzoxMDJDRjAwMDYzRkYyMTAwREEyMDU4MEZCQzYzRkZBQkM4NThEQjMwRkMKKzoxMDJEMDAwMERBMjA1ODBFQTEyQTIxMDI2NUFGOUNDMDk0MDlBOTAyQkQKKzoxMDJEMTAwMDI5MjUwMjYzRkY5MURCMzBEQzQwREQ1MEMwQTMyRTBBODEKKzoxMDJEMjAwMDgwMkEyNDY4REEyMDU4MEVBOUQyQTBEMTBGQzAyMEQxNjEKKzoxMDJEMzAwMDBGREEyMDJCMjAwQzU4MEZDNTYzRkY2QjZDMTAwNDI4OTIKKzoxMDJENDAwMDIwMDZDMDYyMjg4Q0Y4NjU4MTI1QzA1MEM3REYyQjIyODEKKzoxMDJENTAwMDFCQzBFMTJBMjA2QjI5MjEyMzAwQTEwNEIwOTkyOTI1NTkKKzoxMDJENjAwMDIzQjFBQTAwRUMxQTBCQzQwMTBBMEE0NDJBMjQ2QjA0RkEKKzoxMDJENzAwMEU0MzkwRENDMDMwQ0JCMDEyQjI2MUI2NDQwNjkyOTIwRDAKKzoxMDJEODAwMDBDMUJFNzBCMEM5QTExMEJBQTA4MkZBMjg2MUJFNzA5NTQKKzoxMDJEOTAwMDZGRjkwMjYwMDBCNjBCOUIwQTJCQjJBMzY4QjAwODJDMzcKKzoxMDJEQTAwMDIyMDAwQkNDMEM2NUMwQTQyQkEyODUxREU3MkQ2NEIwQkUKKzoxMDJEQjAwMDlCOEMyQjI0MjEwNDBEQ0MwMjlDQjA4ODIwQzBDNTA4MUMKKzoxMDJEQzAwMDg4MTEwQzg4MDI5OEIxODgyQTA4NDQxMTk4QjQ4RjM0NkQKKzoxMDJERDAwMDk0Qjc5RkI1QzA0MDFFRTZGRTJEQTI4NTBFOUUwODI1MjUKKzoxMDJERTAwMEU0Q0YyRERDMjgyREE2ODUyOTIxMDIwOTA5NEM2ODk0MDEKKzoxMDJERjAwMDFBNjg5ODIwQzk0MDJBMjEwMjY1QTAwQjJBMjIxRTJCOUUKKzoxMDJFMDAwMDIyMUQ3QUIxMDI2NUEwNzlDMDIwRDEwRjJDMjEyMzY1NDMKKzoxMDJFMTAwMENGREU2MDAwMDgyRTIxMjEyRDIxMjM3RURCRDUyQjIyNDEKKzoxMDJFMjAwMDFFMkYyMjFEMjUyNTAyN0JGOTAxQzBCMDY0QkZDNDEzRUIKKzoxMDJFMzAwMEU2REYyQ0IwMDcyOEIwMDBEQTIwMDM4ODBBMjg4MjRDOEQKKzoxMDJFNDAwMEMwRDEwQjgwMDBEQkEwNjVBRkU3NjNGRkE2MkEyQzc0MUUKKzoxMDJFNTAwMEMwQjAyQzBBMDI1ODBEOTUxQ0U3MDM5Q0EwOEIyMDA4REIKKzoxMDJFNjAwMEJCMTEwNkJCMDI5QkExODkzNDk5QTI2M0ZGNzkwMDAwQzQKKzoxMDJFNzAwMDI2MjQ2OERBMjBEQjMwREM0MERENTA1ODBGRTFEMkEwOTgKKzoxMDJFODAwMEQxMEZEQTIwMkIyMDBDNTgwRjU4QzAyMEQxMEYwMDAwOTIKKzoxMDJFOTAwMDZDMTAwNjA3M0QxNEMwODBEQzMwREI0MERBMjBDMDQ3RjAKKzoxMDJFQTAwMEMwMjEyM0JDMzAwMzI4MzgwODA4NDI3NzQwMDFCMUREMzcKKzoxMDJFQjAwMDY0ODE1QTFFRTZCQjE5RTZCQzI5RTY3RUQzMEY2RERBQTMKKzoxMDJFQzAwMDA1MDA1MDg4MDAzMDhDQzBFMEMwMjAyNUEwM0MxNEU2RUUKKzoxMDJFRDAwMEJBQjZEMzhGQzBDMEQwMEY4NzE0MjQ0MDIyMEY4OTQwQzgKKzoxMDJFRTAwMDk0MTA3N0Y3MDRDMDgxMDQ4MjM4QzBGMTBCMjgxMEMwMTkKKzoxMDJFRjAwMDQ0QzAyMjA0NTQwMTA0RkQzODAyNTIwMTAyRkUzODA4ODUKKzoxMDJGMDAwMEREMTA4MjFDMDdFRTEwMEU2RTAyMEVERDAyMjQyQ0ZFNzgKKzoxMDJGMTAwMEMwRTAwNEZFMzgwQUVFMTAwRTg4MDIwRDg4MDI4REFCNjgKKzoxMDJGMjAwMDFFRTZBQTA4RDgwMjBFODgwMjk4QjBDMEU4MDQyODEwNEQKKzoxMDJGMzAwMDBFNUUwMTg0QTAyNUExMjUwODQ0MTEwODQ0MDIwNTI1NDAKKzoxMDJGNDAwMDE0MDQ1NTExMDQzNDAyQzA4MTBFOEUzOTk0QjE4RkFBMzUKKzoxMDJGNTAwMDg0MTA5RkI0NzU2NjBDMjZBMTFGQzBGMjA2MjYxNDYwNkIKKzoxMDJGNjAwMDAwMDkwMDAwMjZBMTIwQzBGMjA2MjYxNDA1NjUwMjBGMDQKKzoxMDJGNzAwMDc3MDEwNzg3MzkwNUU2MTAwNzc4MTAwODY2MDIwNjU1QkQKKzoxMDJGODAwMDAyOTVCNjI1QTEwNDBBRTYxMTA4NTgxMTA4MjgwMjA4N0UKKzoxMDJGOTAwMDY2MDI5NkI3QzA2MDY0NDA1NjY0OTA1MzA2N0UxMUMwQzYKKzoxMDJGQTAwMEY0ODlDMjg4QzMwQjM0MEI5NjQ1OTg0Nzk5NDYxOEU2QjYKKzoxMDJGQjAwMDkxOUY0MTA0NTkxMTBFOTkwMjFGRTY4RjAyMEU0NzA4OTYKKzoxMDJGQzAwMEQ4MDI5ODQyMEU5OTAyOUY0MEMxRTAwRTk5MDI5OTQ0OUUKKzoxMDJGRDAwMDJGQTAwQ0I0MzgwQ0Y5MTExNEU2N0UxRUU2NzVBNEZGODAKKzoxMDJGRTAwMEFFOTkyRTkyODUyNkY0Q0YwRTg4MEIyODk2ODVEMTBGQTgKKzoxMDJGRjAwMDJCQTAwQzFGRTY2RjFDRTY3NjBDQkUxMUFDQkJBRkVFMkYKKzoxMDMwMDAwMDJERTI4NTI2QjRDRjBEM0QwQjJERTY4NUQxMEZDMDgwNzYKKzoxMDMwMTAwMDA1MjgzODc4NDgwMjYzRkVBMjYzRkU5NjZDMTAwNkMwNEQKKzoxMDMwMjAwMEMwNjU3MEYxODgzMEMwMzAwODg3MTQ3Nzg3MTJDMEIwNEYKKzoxMDMwMzAwMEMwQTYxOUU2NjEyOTkwMjJDMDMwQ0M5N0MwMzE2MDAwNEIKKzoxMDMwNDAwMDAzQzBCMEMwQTZDMEUwQzA5MUMwRDRDMDgyMjUyMDNDNUYKKzoxMDMwNTAwMDBCM0YxMDk3MTI4MzFDQzA3MDA4NTgwMTBENUQwMTA4Q0EKKzoxMDMwNjAwMDk3MzhDMDgwMEI5ODM4MDc3NzEwMDQ4ODEwMDg2ODAyREEKKzoxMDMwNzAwMDA4NzcwMkMwODAwRDk4MzgyRDNDRkUwODg4MTAwRDlFMDAKKzoxMDMwODAwMDM4OEQyQjBBRUUxMDA4RUUwMjA3RUUwMjBDQjgxMDBGNzYKKzoxMDMwOTAwMEREMDIwNTNCNDAwRUREMDI5RDQwODkyMDA0M0QxMDA4MDUKKzoxMDMwQTAwMDk5MTEwRDk5MDIyRDIxMDQwOUE5MDIwOEREMTE5OTQxRjgKKzoxMDMwQjAwMDg3MkEwNUI5MTAwRDNEMDIwQUJCMTEwREJCMDIwODc3MjYKKzoxMDMwQzAwMDAyOTc0NDI4MjEyNTg3MTIwODI4MTQwNDg4MTEwNzFFMTYKKzoxMDMwRDAwMDQwMDdFRTEwMEU5OTAyNzU2NjA5MjYyMTFGMDYyNjE0NzgKKzoxMDMwRTAwMDYwMDAwNjAwMjYyMTIwMDYyNjE0MDg2ODAyOUI0NzA5NzYKKzoxMDMwRjAwMDg4MDI5ODQ2MjkyMDBDRDJDMEMwODAwQzlFMTExQkU2ODUKKzoxMDMxMDAwMDM0MUZFNjJCQUI5OUFGRUUyREUyODUyODk0Q0YwREFEQTEKKzoxMDMxMTAwMDBCMkRFNjg1RDEwRkRENDBDMEE2QzBCMDhFNTFDQUUwQjAKKzoxMDMxMjAwMEIyQUFCMUJCMkREQzEwOEY1MDBFNzgzNjk4MTAwODc3RkMKKzoxMDMxMzAwMDBDOUZEODk4RDk4OTUzOEY1Mjk5MTE5OURCOUZEQTdFQzkKKzoxMDMxNDAwMDgzMDlCMUNDMjU1QzEwQzk3NzYzRkZDRjg4MTA4RDExM0UKKzoxMDMxNTAwMDA4RTcwQzk3NTFBRDhERDdGMDc4REIwMUIxRjc5RDUzOUYKKzoxMDMxNjAwMDk3NTI4ODMwQzAzMDA4ODcxNDA4ODg0MDY0OEVENTY1MkYKKzoxMDMxNzAwMEJFQzk2M0ZFQkMwMDAwMDA2QzEwMDRENzIwQjAzQTg4QzIKKzoxMDMxODAwMDIwQzAzMDgyMjFDQUEwNzQyQjFFMjk3MjA0NkQwODBGNDIKKzoxMDMxOTAwMEM5ODBDOTkxODU3NUIxMzNBMjUyN0EzQjBCNzQyQjA4NTMKKzoxMDMxQTAwMDYzRkZFOTAwNjQ5RkVDRDEwRkQyNDBEMTBGMDAwMDAwMTMKKzoxMDMxQjAwMDZDMTAwOEQ2MzBDMDcwOTUxNURBNDA4RTM5MTRFNUZFRDMKKzoxMDMxQzAwMDlBMTQ2NEUwMDI2NDUxRkMyOTIwMDYyQTlDRjg2NUEyNDYKKzoxMDMxRDAwMDVGMkEyMTAyMEEwQjRDNjVCMjFGMkMzMjAwMTVFNUY0NjAKKzoxMDMxRTAwMDc0QzcwNTJEMjEyMzY1RDMyNDJFNTI5RTFBRTVGMDZGNTYKKzoxMDMxRjAwMEU4MDI2MDAyMUIyQUEyMjY2OEEwMDgyQjIyMDAwQUJCNTQKKzoxMDMyMDAwMDBDNjVCMjBDMkU1MjlEMURFNUVCNjRFMjAzOEIzODY0MTUKKzoxMDMyMTAwMEIyMkQ5RTE2QzhCQzhENjkxRUU1RTg2NEQwMDUyRUUwNkYKKzoxMDMyMjAwMDIxN0JFQjQ5MkUyMDBDMThFNUUyMENFRjExQThGRjI5QjkKKzoxMDMyMzAwMEYyODZDMTg2Nzk4QjRBMTdFNURGMDdFNzBBMjc3MkEzNzIKKzoxMDMyNDAwMDY4NzAwNDg4MjA3Nzg5MzkyNUYyODU2NDUyQTIyNzIxODUKKzoxMDMyNTAwMDJFMDdCNzM2MDdCOTBDNkY5RDAxRDdCMDg5Njk2RTkyRkEKKzoxMDMyNjAwMDQyMjgyMDNEN0I4NzNDOEExNUNEQUY2MDAwMThDMUIyNTMKKzoxMDMyNzAwMDhDMjAyQTIwMEM1ODBFOTBENUEwNjRBMkFDOEI2ODYzRDkKKzoxMDMyODAwMEZGQ0JDMDUwNjNGRkMzQzBFMDYwMDAwMjJFNjAwMzBFOUUKKzoxMDMyOTAwMDlCMEM2RUIyMEVEQzcwMENFQTExQUE2QTJBQUMyODVCOTkKKzoxMDMyQTAwMEZGQjZEN0EwREEyMERCNzBDMUM0MkQyMTFGNTgwRTM4MUQKKzoxMDMyQjAwMDhDMjY4QjI3RDRBMDBDQkIwQzdBQjMyNThBNjNDMDkwRDQKKzoxMDMyQzAwMDlBNTM4ODYyOTk1ODk4NTI4RjY1OUY1OThFNjc5RTVCNzIKKzoxMDMyRDAwMDhENjY5NzU1OUQ1QThCNjg3QjdCNzQ4QjE1Q0VCMzYwM0EKKzoxMDMyRTAwMDAwMEREQTIwREI0MDU4MEUwMjY1QTEwRDYzRkZDQzAwMTMKKzoxMDMyRjAwMERBMjBEQjMwOEMxNDU4MERBQUQ2QTBDMEMwQzBEMTlERjYKKzoxMDMzMDAwMDE1MkNBNDAzREEyMERCNjBERjcwREM1MEMwRTAyNTYwMDAKKzoxMDMzMTAwMDAzOUUxMDFFRTVDMTBDNUQxMUFENkQyRERDMjg1QkZGMTkKKzoxMDMzMjAwMDNGOEU2NkE1QTg4RjY3Mjg2NDAzQUY3Rjc3RkIwMUIxNDYKKzoxMDMzMzAwMEVFOUU2NjlGNjc4RDI2OEMyOUE0REQwRENDMEM5RDI2MDQKKzoxMDMzNDAwMDhCNjgwQzBDNDgyQzI1MjUwN0JCMEM5QjY4NjNGRUMzQkYKKzoxMDMzNTAwMDJDMjA2Njg5NjFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyMDkKKzoxMDMzNjAwMDYwMDBCODA5RkQ1MDY1RDBCMkNCQkY4RTY5Q0JFQkRCRjYKKzoxMDMzNzAwMDYwREM1MERGNzBEQTIwMUVFNUJDMkQ2MDAzQzA4MDk4NTEKKzoxMDMzODAwMDEwMENERDExQUQ2RDJEREMyODVCRkYyNDhCMTVDOTQyQkYKKzoxMDMzOTAwMDhBMjYyOTIyMDkwNEFBMDgyQTI2MDYwQTk5MEMwOTA5NUMKKzoxMDMzQTAwMDQ4MjkyNTI1NjVCMTNDQzAyMEQxMEYwMERCNjAyRDZDN0MKKzoxMDMzQjAwMDI4REY3MERBMjBDMEMwMUVFNUFDOUMxMERDNTA1QkZFM0MKKzoxMDMzQzAwMEI0NjNGRkM3MDAyRDIwM0QwRDRENDA2NURERjk2RkU1NkQKKzoxMDMzRDAwMDIyREEzMDhGNDU2REU5MEM4RUFBMEU4RTE0QzlFMzdFNzkKKzoxMDMzRTAwMEYzMTEyQUFDMTBDMDkwMjkyNDY3MDkwRjQ3NjRGREQ3NTgKKzoxMDMzRjAwMDYwMDE0MTAwQzA5MTYzRkZFRDAwODgxNTY1ODE0Q0RBRTIKKzoxMDM0MDAwMDIwREI2MDhDMTQ1ODBENjZDMDIwQzA5MDI5QTQwM0QxMjUKKzoxMDM0MTAwMDBGREEyMEMwQjY1ODBERjQ2M0ZGREUwMDhBMTYyQjIxQTgKKzoxMDM0MjAwMDA0NTgwQzhDQzBBMDJBMjQ2NjhCNjg2M0ZGM0EwMDAwMDUKKzoxMDM0MzAwMDAwMkI5Q0Y5NjVCMEM1REEyMDU4MEM5MTYzRkQ5MTAwMTIKKzoxMDM0NDAwMDJCMjAwQzBDQkExMUE1QUEyRkEyODZDMUMyN0ZDMzAyRTEKKzoxMDM0NTAwMDYwMDBGQzBEQjkwQTI5OTJBMzY4OTAwNzhDMjAwOUNDNjIKKzoxMDM0NjAwMDBDNjVDMEVCMjZBMjg1NjQ2MEU1MkMyMDY2ODkzMUIxMkQKKzoxMDM0NzAwMENDMEMwQzQ3MkMyNDY2NkZDNjAyNzA5NjBBREFFMDJCM0YKKzoxMDM0ODAwMDIxMDQ1ODBDNzQyNzI0NjY4OTMwNzc5NzRCMThFNTU5MjYKKzoxMDM0OTAwMDFERTU1QThBMzI4QjMzQzBGNDJDMjEwNDA5OUU0MDA2NjQKKzoxMDM0QTAwMEVFMTEwNENDMTEwRUNDMDI5RjYxQzFFMDBFQ0MwMjlENDYKKzoxMDM0QjAwMDYwOEYyQjlBNjY5QjY3OUM2NDk3NjUwOEZGMDI5RjYyRUEKKzoxMDM0QzAwMDJGMjAwQzE4RTU0MzBDRkUxMUE1RUUyREUyODVBOEZGNzgKKzoxMDM0RDAwMDI3RjRDRjJEREMyMDJERTY4NThGMTU2NUYwOTFDMDIwRDcKKzoxMDM0RTAwMEQxMEYwMDAwMkEyQzc0OEIxNDU4MDY0M0QyQTBEMTBGQTAKKzoxMDM0RjAwMDAwREEyMERCRTA1ODBEQkM2M0ZFRkUwMDAwREEyMERCQzIKKzoxMDM1MDAwMDMwOEMxNDhEMTU1ODBFM0VEMkEwRDEwRjAwMDA4ODE1QjYKKzoxMDM1MTAwMEM4ODhEQTIwREIzMDU4MEM5QzJBMjEwMjY1QUVEQUMwNUMKKzoxMDM1MjAwMDk0MDlBOTAyMjkyNTAyNjNGRUNGREEyMDJCMjAwQzU4MkEKKzoxMDM1MzAwMDBEQzc2M0ZFQzQyNzI0NjhEQTIwREIzMDJDMTIwNDJENkIKKzoxMDM1NDAwMDEyMDUyRTBBODA1ODBDQTE2M0ZDN0MwMEMwMjBEMTBGMEMKKzoxMDM1NTAwMERBMjA1ODBEQTU4QTE1Q0RBMURBMjAwMzNCMDIyQzEyRTIKKzoxMDM1NjAwMDA0NTgwRDBGMjdBNDAzQzAyMEQxMEYwMEMwMjBEMTBGOTUKKzoxMDM1NzAwMDJBMkM3NDhCMTQ1ODA2MjBEMkEwRDEwRjZDMTAwQzI4NjIKKzoxMDM1ODAwMDIxMDI5NDEwMDgwODRDNjU4MzYyMUZFNTA5MjlGMjlFMDgKKzoxMDM1OTAwMDZGOTgwMjYwMDM2NjFERTUwNTI5RDIyNjY4OTAwODJBMDcKKzoxMDM1QTAwMDIyMDAwOUFBMEM2NUEzNTQyQ0YyOUQ2NEMzNEUyQjIwNjMKKzoxMDM1QjAwMDBDMENCNjExQUY2NjI4NjI4NkMxRUM3OEUzMDI2MDAzOUEKKzoxMDM1QzAwMDQ2MTlFNEZDMDlCOTBBMjk5MkEzNjg5MDA3OEEyMDA5RTAKKzoxMDM1RDAwMEFBMEM2NUEzMzIyNDYyODU2NDQzMkNDMEUxMkEzMTA5MTgKKzoxMDM1RTAwMEMwNzAyNzI0NjY4OTM1OUExMTk5MkE4ODM2OTkxMjk4Q0QKKzoxMDM1RjAwMDJCODkzNzk4MTM5OTJDODgzODk5MTQwODU4MTQ5ODE1RTIKKzoxMDM2MDAwMDk4MkQ4OTM5MkEyNTA0MkUyNTFEMjkyNTFDMjgzMDI4ODYKKzoxMDM2MTAwMEMwOTIyODI0M0MyQTMwMjkwODA4NDc5ODE2MDk4OTAxQjUKKzoxMDM2MjAwMDJBMjQzRDJBMzExNTk5MTcwQTA5NDEwOUE5MEMyOTlDMTgKKzoxMDM2MzAwMEVDMjkyNTFGN0U4NzE5MkQyQTAwMERBMDYwMDAwODNFNjkKKzoxMDM2NDAwMDAxMEEzRUIxQUQwOERBMzkwRUFBMTEwQTk5MEMyOTI1RjIKKzoxMDM2NTAwMDFGMkEyMTFGMThFNTA2MEE4MTYwQzFEMDk0MUE5NTFCMDQKKzoxMDM2NjAwMDAxMDgzRTAwMDUzRUIxODQwNTQ4Mzk4NDNDMjU5Q0ZDOTgKKzoxMDM2NzAwMDBEODgzNjI5MjAxNDA4QUExQzhEM0QyNzI2MTgyRTI2RDEKKzoxMDM2ODAwMDEzMkUyNjE0MkUyNjE1MjcyNjFCMkUyNDZCMjcyNDY3N0YKKzoxMDM2OTAwMDI3MjQ2ODA4NTgxQzA5MDk0MzI5MjQxNDI5MzIxMTJBQUYKKzoxMDM2QTAwMDI1MkUyODI1MkYyNzI1MjQyNzI1MjUyNzI1MkMyNzI1QTYKKzoxMDM2QjAwMDIzMjUyNTIwMjQyNTIxMkQyNTIyODQxQTJEMjExQzg1MTIKKzoxMDM2QzAwMDFCNkZEMjAyNjAwMjA5QzBBMDk5MTg2RDA4MEFCMUFBNDYKKzoxMDM2RDAwMDAwQTEwNDAwRTkxQTdEOUIwMjYzRkZFRTg5MThDMDgwRjcKKzoxMDM2RTAwMEMwRTFDMDcwQzBEMjlCMUQ5NTFCOTYxQzlDMUUxNkU0QTkKKzoxMDM2RjAwMEQxMkMyMDNEMTVFNEUwMEMwQjQwMERDQzAxMEJFNzM4M0MKKzoxMDM3MDAwMDFERTRDMzBBNzcxMDBDRTgzODBCODgxMEMwQzQ5QzQxMzQKKzoxMDM3MTAwMDA4NzcwMjlENDBCMEE4MDk4ODExOEIyMDlDNDk5RDQ4REMKKzoxMDM3MjAwMDk1NEI5NjQzMDg3NzAyODYxNDE4RTREMTE1RTRCOTA4M0UKKzoxMDM3MzAwMDc3MDIwNUJCMDI5QjRBOUI0Mjk3NDY4ODEyODcxMTA4NzUKKzoxMDM3NDAwMERBMTQ5QTRFMEQ4ODEwMEQ3NzExMDg3NzAyMUFFNEFDM0UKKzoxMDM3NTAwMDA2RDgxNDBENjYxMDA4NzcwMjk3NEZDNzhGOTg0RDk4QkEKKzoxMDM3NjAwMDRDOTg0NTg3MTU5ODQ0MDcxNTE0MEQ1NTExMEE1NTAyQjQKKzoxMDM3NzAwMDk1NDcxNUU0QzE4QTI2MkQ0NjEwMkQ0NjE4MkQ0NjIwNjIKKzoxMDM3ODAwMDJDNDYxMTJDNDYxOTJDNDYyMTJCNDYxMjJCNDYxQTI4NjIKKzoxMDM3OTAwMDQ2MTQyODQ2MTUyQjQ2MjI4ODE2MjU0NjI0MjU0NjI2RkIKKzoxMDM3QTAwMDhCMTcwQTBDNDgwOTBENDg4NTEzMEVERDExMDVDQzExNDUKKzoxMDM3QjAwMDA4Mzk0MDBCRUIzOTAyOTkxMDFFRTRCMDBEQ0MwMjBEMTQKKzoxMDM3QzAwMDU1MTEwODJENDAwNjU1MDIyRTQ2MTMxNkU0N0IwRkRERDkKKzoxMDM3RDAwMDExMjU0NjE2MDgwODQwODUxQjAxODgxMDBEQkIwMjg2N0UKKzoxMDM3RTAwMDY3MURFNEE3MDk4ODAyMENCQjAyMTlFNDc3MUNFNEE1NTUKKzoxMDM3RjAwMDJCNDYxNzJENDYxQkE3NjYxQkU0QTRDMDcwMkM0NjFDNDUKKzoxMDM4MDAwMDA5ODgwMjhDMUUyODQ2MUUyQjQ2MjNDMDkwOEIxRDI5M0EKKzoxMDM4MTAwMDQ2MUQyOTQ2MUYxOEU0OUQyOTQ2MjcyODQ2MjUyOTMxOUIKKzoxMDM4MjAwMDE2MkUyMDA2MjkyNDZBMjQzMTE3OTYyRDI0MjUyMzg2NTYKKzoxMDM4MzAwMDFDQ0NFMTI3MjQwN0MwRDcwOTBFNDA2NEUwODI5QTI5RjYKKzoxMDM4NDAwMDA5Mjg0MTY0ODA5MTY0NDA5QjJEMjQwNkMwOTgwOTQ5NTEKKzoxMDM4NTAwMDM2MjgwQUEwMjQ2Mjg1MDFDNDA0QTg0NDI4MjEwNDI0MkYKKzoxMDM4NjAwMDY2ODUwODg4MTE4RTNGOEEzRTJEMzIxMDBFQTQxODAwRkUKKzoxMDM4NzAwMEM0MDQwRUFFMTgwMEVFMTEwQUNBNTMwRUREMDJDMEUzRjYKKzoxMDM4ODAwMDBFODgwMjk4QzExRUU0ODIwOTA4NEU5RUMwOEUyMDk0QzQKKzoxMDM4OTAwMEMzOThDNTlEQzQxOEU0NEUxREU0N0YwNUVFMTEwRUFBMjEKKzoxMDM4QTAwMDAyMERBQTAyQThCODI3ODRDRjlBQzIxRUU0NDAyNEYyQ0YKKzoxMDM4QjAwMDlEMjdFNEEyMjQ0QzE4MjRGNjlENjU1MDUyQzAyMEQxQzcKKzoxMDM4QzAwMDBGMkQyNDA2QzBBMEMwOTgwOTQ5MzYwNEE5Mzg2M0ZGMEIKKzoxMDM4RDAwMDdGQzBBMDYzRkUwNzAwMDA2NTRGNkRDMDk4QzBBODJBOTYKKzoxMDM4RTAwMDI0MDY2M0ZGNkIyRDI0MDZDMDkwNjNGRjYzQ0M1N0RBNzgKKzoxMDM4RjAwMDIwREIzMDhDMTA1ODBDMkFDMDIwRDEwRjAwREEyMEMwRjkKKzoxMDM5MDAwMEI2NTgwQ0I5NjNGRkU1MDBEQTIwNTgwQ0I3NjNGRkRDNEEKKzoxMDM5MTAwMDJBMkM3NDhCMTA1ODA1MzhEMkEwRDEwRjZDMTAwNjI4QjEKKzoxMDM5MjAwMDIwMDY4QTMzNkY4MjAyNjAwMTYxQzA1MDEzRTQyMDI5QUYKKzoxMDM5MzAwMDIxMDIxNkU0MUY2OTkyMDQyNTI1MDJEOTUwMkMyMDE1NzYKKzoxMDM5NDAwMDlBMjgxNEU0MUQ4RjI2MjcyMDBCMEFGRTBDMDQ3NzA5MDEKKzoxMDM5NTAwMDJCNzExQzY0RTEzOThFNDI4RDQzNkZCQzAyNjAwMTZGOTQKKzoxMDM5NjAwMDAwRTEwNEIwQzgwMDg4MUEwOEE4MDgwOEQ4MDI5ODI3RkYKKzoxMDM5NzAwMDJCMjAwNjY4QjMyRUNFOTcyQjIyMUUyQzIyMUQwMTExNjAKKzoxMDM5ODAwMDAyN0JDOTAxQzBCMDY0QjAxNzJDQjAwNzI4QjAwMERBQzAKKzoxMDM5OTAwMDIwMDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRDEKKzoxMDM5QTAwMEU3QzAyMEQxMEYyRDIwNjQ2NERGQ0E4QjI5QzBGMTBCNDIKKzoxMDM5QjAwMEFCMEM2NkJGQzAyQjIwMEMwQ0JDMTFBNkNDMjhDMjg2NTkKKzoxMDM5QzAwMDJFMEEwODc4RUI2MTFFRTNGQjBFQkUwQTJFRTJBMzY4MDYKKzoxMDM5RDAwMEUwMDUyODIyMDA3RTg5NEYyOUMyODUxRUU0MDc2NDkwRjUKKzoxMDM5RTAwMDQ2MUZFNDE1OUU5MEMwODQ5ODkxMjgyMDBBOTU5MzBGNTUKKzoxMDM5RjAwMDg4MDI5ODkyOEUyMDBGRUUwMjlFOTQyRjIwMDc4ODI2MzAKKzoxMDNBMDAwMDJGOTUwQTk4OTY5QTk3MkUyMDA2MjUyNDA3NjhFMzQzNTcKKzoxMDNBMTAwMDI5MjEwMjJBQzI4NTFERTNFRTJBQUMyMEFEQkQyNUQ0QTIKKzoxMDNBMjAwMENGMkFDNjg1NjNGRjRFMDAyRTIwNjVDQkVEQzA4MjI4Q0QKKzoxMDNBMzAwMDI0NjVDOUY2MDVFNDMxMDAwMjAwMkE2MjgyMUJFM0Y3MUYKKzoxMDNBNDAwMDI5NDEwMjBCQUEwMjJBNjY4MjA5RTQzMTI5MjEwMjYzNzQKKzoxMDNBNTAwMEZGMjMwMDAwNjRERkI4OEY0MjJFMjAxNjAwRjEwNDBEMTIKKzoxMDNBNjAwMEVFMEMwMEVFMUFBRUFFOUUyOTYzRkZBMzhBMjAyQjMyMjUKKzoxMDNBNzAwMDIxQjFBQTlBQjAyOTMyMjEyODMyMjNCNDk5MjkzNjIxQkEKKzoxMDNBODAwMDc5ODlBOTJCMzIyMjJCMzYyMTYzRkZBMEMwMjBEMTBGQzgKKzoxMDNBOTAwMDlGMjcyNTI0MTVBQ0I4Mjg3NTFDMkIyMDA2QzBDMTJFRTUKKzoxMDNBQTAwMEJDRkU2NEUwQUI2OEI3NzcyREJDRkQ2NURFQzcyRDIwOUEKKzoxMDNBQjAwMDY0QzBGMDY0RDA4NjhFMjkwRUFFMEM2NkUwODlDMEYxMzkKKzoxMDNBQzAwMDI4MjA1QTI4OENGRTA4Q0YzODY1RkVFODYzRkY1ODAwOEUKKzoxMDNBRDAwMDAwRTAwNDkzMTBDMDgxMEFGMzBDMDM4MzM5Qzc4RjA4RjgKKzoxMDNBRTAwMEQ4MDMwOEE4MDEwOEY4MEMwODA4MTlBODMzMDNDODBDNjMKKzoxMDNBRjAwMEE4QjgyODc1MUMwMzBCNDcyQjI0MTU4MzEwQ0JCNzAwREYKKzoxMDNCMDAwMEUxMDRCMEJDMDBDQzFBQUNBQzBDREMwMjlDMjc2NTlFNzYKKzoxMDNCMTAwMDVFQzBCMjBCOTkwMjA5MDk0RjI5MjUwMjYzRkU1MDAwQ0QKKzoxMDNCMjAwMDJEMjA2QTBEMkQ0MTY1REY3RURBMjBDMEIwNTgwQzc1NUUKKzoxMDNCMzAwMDY0QUYxOEMwRjE2M0ZFRUY5RjI3NjNGRkQwMkUyMjFGRjIKKzoxMDNCNDAwMDY1RUUzMjYzRkY3OTAwMDAyODIyMUY2NThFMjc2M0ZGMzAKKzoxMDNCNTAwMDZFMjUyNDA2MjUyNTAyQzA5MDYzRkUxOTZDMTAwNjY1QUIKKzoxMDNCNjAwMDcxMzMyQjRDMThDMEM3MjkzQzE4QzBBMUMwODAwOUE4Q0MKKzoxMDNCNzAwMDM4MDgwODQyNjQ4MTEwMUNFMzhBMUFFMzhCMkFDNjdFNDcKKzoxMDNCODAwMDJBNUNGREQzMEY2REFBMDUwMEIwODgwMDkwOEM4OTQwOTcKKzoxMDNCOTAwMEMwQTAwOTg4NDcxRkUzQjQwODBCNDcwOTRDNTAwOTBEMjIKKzoxMDNCQTAwMDUzMDRERDEwQjRDQzA0Q0MxMDBENUQwMjlEMzEwQ0JCNzAKKzoxMDNCQjAwMDAyOUIzMDg4NDM4RTIwOTgzNTBGRUUwMjlFMzI4RDI2NzAKKzoxMDNCQzAwMEQ4NTBBNkREOUQyNjhFNDBDMDkwMEU1RTUwNjRFMDk3RDIKKzoxMDNCRDAwMDFDRTM5QTFFRTM4OTAzOEIwQkMwRjQ5RkIxOUVCMDJEQUEKKzoxMDNCRTAwMDIwMEE5OUIzMENERDAyOURCMjhGMjAwQ0ZGMDI5RkI0MTYKKzoxMDNCRjAwMDhFMjYyRDIwMDc5RUI2OEMyODJEQjUwQTlDQjcyOTI0MjkKKzoxMDNDMDAwMDA3MkYyMDA2MkIyMDY0NjlGMzM5Q0JCNjFERTM2QjIzMDUKKzoxMDNDMTAwMDIwMTY4REQyMEIzMzBDMDBEMTA0MDAzMzFBQjQ4REEzQkYKKzoxMDNDMjAwMEMzOTMyOTIyMjAwQzEzRTM2QTFGRTM2MTBDMkUxMUFGMEEKKzoxMDNDMzAwMEVFQTMyMjI5MjRDRjJGRTI4NUQyQTAwRkREMEIyREU2QTMKKzoxMDNDNDAwMDg1RDEwRjAwMkUyMDBDQjQ4QzBDRUIxMTFGRTM2MTFERUQKKzoxMDNDNTAwMEUzNThBRkVFQURCQjIyQjI4NTI5RTRDRjAyQzIwQjIyRkUKKzoxMDNDNjAwMEI2ODVEMkEwRDEwRjAwMDAyRTIwMEMxQ0UzNTExRkUzMUIKKzoxMDNDNzAwMDU4MENFQjExQUZFRUFDQkIyMkIyODUyOUU0Q0YwMjgyMjcKKzoxMDNDODAwMDBCMjJCNjg1RDJBMEQxMEZDMEQwMEJBRDM4N0RDODAyQjMKKzoxMDNDOTAwMDYzRkVFQzYzRkVFMDhFNDAyNzJDNzQ3QkVFMTJEQTcwM0MKKzoxMDNDQTAwMEMwQjMyQzNDMThERDUwNTgwQTdCODk0MEMwODA2M0ZFQUQKKzoxMDNDQjAwMEUzREU2MERBMjBEQjMwREM0MERENTA1ODAwMDU5QTEwOEUKKzoxMDNDQzAwMERCNTAwNzdBMDI1ODA0NEM4ODEwNjNGRUY4MDAwMDAwQUQKKzoxMDNDRDAwMDZDMTAwNjkyMTIxRUUzNDI4QzQwQUUyRDBDOEM0NzJFQzcKKzoxMDNDRTAwMDNDMTgwNENBMEJEOUEwN0RBMzAyMjlBREY4NzVDMzAyMDQKKzoxMDNDRjAwMDYwMDA4NEMwQjBDMDIzQzBBMDlEMTA2RDA4NDRCODlGNzAKKzoxMDNEMDAwMDBFQjgwQThEOTAwRUI3MEJCODc3MEQ2RDM2QURBQTlEMjMKKzoxMDNEMTAwMDgwMEQ2NjBDRDhGMDAwODA4ODAwNzA4Qzg3OTA2OEIxQTgKKzoxMDNEMjAwMDI0QjIyMjc3RDMyNzg4OTFDMEQwQ0I4Nzk4OTAyNzlDNDQKKzoxMDNEMzAwMDEwMDA3MDg4MDBGMDhDOUQ5MUNCNkZDMDgxMDhCQjAzOTAKKzoxMDNENDAwMDc1Q0IzNjYzRkZCNEIxMjIyRUVDMTg2M0ZGRDQ4NTkyOTUKKzoxMDNENTAwMDBENzcwQzg2OTM5NzkwQTZENjdENkIwMUIxNTU5NjkzRkYKKzoxMDNENjAwMDk1OTI2MDAwMTZCM0NDMkQ5QzE4ODgxMEQ5RDA3OEQzQ0EKKzoxMDNENzAwMEM3MjlEREY4NjNGRkMxMDBDMDIzOEE0MjFCRTM0NzAwNjcKKzoxMDNEODAwMENEMzIyRDQ0MDI5QjMwOTIzMTg5NDI4NTQzNzlBMTA1ODEKKzoxMDNEOTAwMDFFRTM0MzBFNTUwMTg3MTIxQkUzMzQ4OTcwOTUzNTBCRTIKKzoxMDNEQTAwMDk5MDI5OTMyODg0MjBBODgwQzk4NDI4Njc2QTZBNjk2OEQKKzoxMDNEQjAwMDc2OEY0NEFGQUY5RjQ0RDEwRjAwMDAwMDZDMTAwODkzODIKKzoxMDNEQzAwMDExRDYzMDg4MzBDMDkxMDg2MzUxMDgwODQ3MDU5ODM4RUIKKzoxMDNERDAwMDk4MTIyODIxMDIyOTNDRkQwODA4NEM2NTgxNjU2NTkxRUYKKzoxMDNERTAwMDYyOEE2MzBBMkI1MDY1QjE4QjBBNkYxNDJFMEFGRjdDMUUKKzoxMDNERjAwMEE2MEEyQzIwNUFDQ0M0MkQwQTAyMkQyNDVBN0ZFMDAyOTgKKzoxMDNFMDAwMDYwMDIxNTg5Mjg4ODI2MUZFMzI2MDk4ODBDNjU4MjBGMjEKKzoxMDNFMTAwMDJFMjAwQjBGRUUwQjJERTBGRTJFRTBGRjA4REQxMTBFMjUKKzoxMDNFMjAwMEREMDIxRUUzMjBBRUREMUVFMzIwMUNFMzIwMEVERDAxREIKKzoxMDNFMzAwMDBEQ0MzN0MxODAwODQ4MzdCODhEQjQ4ODk4MTA4OTYwOTgKKzoxMDNFNDAwMDFBRTJERTdCOTYyMThCNjIyQUEwMjE5QzE0N0JBMzE3QTkKKzoxMDNFNTAwMDlEMTMyQTIwMEM4QjEwOEMyMDU4MEI5NzhDMTQ4RDEzREIKKzoxMDNFNjAwMERCQTBDRUFDNjAwMUM0MDAyRTIwMEMxQkUyRDEwQ0VBMUEKKzoxMDNFNzAwMDExMEJBQTA4MkJBMjg2MUZFMkNGN0JEQjNCMEZFRjBBQjgKKzoxMDNFODAwMDJGRjJBMzY4RjAwNTI4MjIwMDdGODkyQzJCQTI4NTY0REQKKzoxMDNFOTAwMEIwQUE4NzYyODgyNkRFNzAwQzc5MzYwOTdBMEM2RkFEN0QKKzoxMDNFQTAwMDFDOEYyNzlCMTUwOEZGMEM3N0YzMTk3RTdCNzI5RDEzREYKKzoxMDNFQjAwMDlDMTQ5QjE1Q0Y1NjYwMDAyNUMwQjA2M0ZGRDBENzkwRUYKKzoxMDNFQzAwMDYzRkZERDAwMDA5RDEzOUMxNERBMjBEQjcwNTgwQjA4QTMKKzoxMDNFRDAwMDhCMTU4QzE0OEQxMzY1QTA2QThFNjI2M0ZGQ0MwMERBOUIKKzoxMDNFRTAwMDIwOEIxMURDNDA1ODBBQUVENkEwOEIxNUMwNTFERTcwNzUKKzoxMDNFRjAwMERBMjBEQzYwREQ0MDVCRkY3NjhEMTM4QzE0RDlBMDJFQjgKKzoxMDNGMDAwMDIwMEMxQkUyQUIxRkUyQjIwQ0VBMTFBRkVGQzBFMEFCM0EKKzoxMDNGMTAwMEFBMkJBMjg1MkVGNENGMEI5OTBCMjlBNjg1NjNGRjFEMzIKKzoxMDNGMjAwMDAwREEyMERDNjBERDQwREU3MDg5MTIyODIwMDdERjUwRDcKKzoxMDNGMzAwMEE5ODgyODI0MDc1QkZGMDlEMkEwRDEwRjAwREJFMERBQjMKKzoxMDNGNDAwMDIwNTgwQjI5NjU1MEVGMkEyMDE0MEEzQTQwNjVBMEVCNEYKKzoxMDNGNTAwMERCNjBEQzQwREQzMDAyMkEwMjU4MDk5Q0Q2QTA2NEEwNTgKKzoxMDNGNjAwMEQ1ODRBMTgzQTAwNDA0NDcwMzA1NDc5NTEyMDM2MzUxMzgKKzoxMDNGNzAwMEMwNTE2M0ZFNUMyQzIwMDZEMzBGMjhDQ0ZENjQ4MEE1QzUKKzoxMDNGODAwMDY4QzcwNEMwOTMyOTI0MDYyQzIwMDZDMEIxOEQ2NDFGODUKKzoxMDNGOTAwMEUyOEE5RDI3OUQyODlEMjk4RkYyOUQyNjAwRjEwNDAwMkQKKzoxMDNGQTAwMEJCMUEwMEYwMDRCMEJFMEVERDAxQzBGMEFEQkI4RDY1RTQKKzoxMDNGQjAwMDJGMjQwNzBEMEU1RTAxRUUxMUFFQkIyRTBBRkVCMEJCMjQKKzoxMDNGQzAwMDBCMEIxOTBFQkIzNkMwRTIwQjBCNDcwRUJCMzcyQjI0NzUKKzoxMDNGRDAwMDE2MThFMjgyMEEwOTQ1MEQwQjQyMkIyNDBCMjkyNDBBRUMKKzoxMDNGRTAwMEI0QkUyRTI0MEM3RDg4NTcyOTIwMTYyRkNDRkRCMDlEMDEKKzoxMDNGRjAwMDBBNUM1MjBEQ0MzNjJDMjQ2NDY1RkRFQzBDMEM0NzY0MzUKKzoxMDQwMDAwMENERTYxOEUyNkQ4RTI4ODg4MjBDOUYwQzAwODEwNDAwOUEKKzoxMDQwMTAwMEZGMUFBRkVFOUUyOTYzRkRDRjFDRTI5QzYzRkUxMzAwRTYKKzoxMDQwMjAwMDFDRTI5MzYzRkUwQzhENjU2M0ZGQTUwMERBMjAyQjIwNTQKKzoxMDQwMzAwMDBDNTgwQjA2NjQ1RjBGQzAyMEQxMEYwMEMwMjBEMTBGQjkKKzoxMDQwNDAwMEMwOTMyOTI0MTZDMDkzNjNGRkEwMDAwMDZDMTAwNEMwMjUKKzoxMDQwNTAwMDYwMTdFMjU2MURFMjU5QzM4MTI5MzEwMTJBMzAwODI5MkYKKzoxMDQwNjAwMDI0MEE3OEExMDhDM0IyN0JBMTcyRDI2MEQxMEZDMEMxNkIKKzoxMDQwNzAwMDY1NTA1MTI2MjUwMjJBRDAyMDJGMjAwQjI5MEFGQjJCMjAKKzoxMDQwODAwMDIwMTQyRTIwMTUyNjI0MTUwOUJCMDEwREZGMDkyOEYxNDcKKzoxMDQwOTAwMDFDMkIyNDE0QThFRTJFRjUxQzY0QTBCNTJCMjIxRTI4ODAKKzoxMDQwQTAwMDIyMUQwMTExMDI3Qjg5MDFEQjYwNjRCMDE3MkNCMDA3NkYKKzoxMDQwQjAwMDI4QjAwMERBMjAwNzg4MEEyODgyNENDMEQxMEI4MDAwODMKKzoxMDQwQzAwMERCQTA2NUFGRTdEQjMwREM0MERENTBEQTIwNTgwMEQ4RkMKKzoxMDQwRDAwMDI5MjEwMjA5MEI0Q0NBQjJEMkEwRDEwRjAwQ0M1QTJDMTQKKzoxMDQwRTAwMDMwMDg3QkMxMzcyRUQwMjA2NEUwMkQwMjJBMDIwMzNCMkEKKzoxMDQwRjAwMDAyREM0MERENTA1ODAwQ0VEMkEwRDEwRjJCMjAxNEIwRUUKKzoxMDQxMDAwMEJCMkIyNDE0MEIwRjQxNjRGMDgyN0NCN0NBQzBDMTBDRDYKKzoxMDQxMTAwMDlDMDIyQzI1MDJEMkEwRDEwRkMwMjBEMTBGMkUyMDA2NDgKKzoxMDQxMjAwMDY5RTJDMTJGMjEwMjBGMEY0QzY5RjFCODI2MjQwNjI2M0YKKzoxMDQxMzAwMDI1MDIyQjIyMUUyODIyMUQyQTIwMEIyOTIwMTUwREFBMUMKKzoxMDQxNDAwMDA5MkNBMTFDMjYyNDE1QUM5OTI5QTUxQzdCODE0QTYwNDkKKzoxMDQxNTAwMDAwNDlCMEJCMkIyNDE0MEIwRDQxQ0JENjdDQjcwMjJDRUQKKzoxMDQxNjAwMDI1MDIyQjIyMUUyRTIyMUQ3QkU5MDIyQjBBMDA2NEIwQTEKKzoxMDQxNzAwMDE3MkNCMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwMjQKKzoxMDQxODAwMEQxMEI4MDAwREJBMDY1QUZFN0MwMjBEMTBGMjYyNDA2NEQKKzoxMDQxOTAwMEQyQTBEMTBGMjYyNDA2NjNGRkM3REI2MDFERTIwNzY0QUYKKzoxMDQxQTAwMEJGNDIyQ0IwMDcyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQ0EKKzoxMDQxQjAwMEMwRDEwQjgwMDBEQkEwNjVBRkU3MURFMUZGNjNGRjI0RUEKKzoxMDQxQzAwMDZDMTAwNDI4MjAwNkMwNjQ2Rjg1NjRDQTVCMjkyMDE0MjMKKzoxMDQxRDAwMDdEOTcyNkRBMjBEQjMwREM0MDA1NUQwMjU4MDAxOTI5ODYKKzoxMDQxRTAwMDIxMDIwOTBBNENDOEEzQzAyMEQxMEYwMEMwQjEwQjlCMEIKKzoxMDQxRjAwMDAyMkIyNTAyQzAyMEQxMEYwMDAwMDIyQTAyMDMzQjAyM0QKKzoxMDQyMDAwMDJDMEEwMTU4MDBDQUM5QUFEQTIwREIzMERDNDA1ODA5NjAKKzoxMDQyMTAwMEU0MjlBMDExRDNBMDdFOTcwODJDMEFGRDBDOUMwMTJDNDgKKzoxMDQyMjAwMEE0MTFDMDUxMkQyMDE0MDZERDAyMkQyNDE0NjNGRkEyMTkKKzoxMDQyMzAwMERBMjBEQjMwREM0MERENTBDMEUwNTgwOTY0RDJBMEQxODgKKzoxMDQyNDAwMDBGMDAwMDAwNkMxMDA2MTZFMURBMUNFMURBNjU1MTNCNDQKKzoxMDQyNTAwMEMwRTExN0UxRDYyODIxMDI4QjIwMDgwODRDNjU4MDdCM0QKKzoxMDQyNjAwMDI5MzIwMDA5Njk1MTY5OTM3MjJBNjI5RTZFQTg0ODJBMTAKKzoxMDQyNzAwMDcyMjY2OEEwMDI3QUI5M0YyQTYyOURCNDRGQ0JBNzJCNjEKKzoxMDQyODAwMDIwMEMwQ0JEMTEwNkREMDgyOEQyODY3OEZCMTUwQ0JGNkEKKzoxMDQyOTAwMDBBMkZGMkEzNjhGMDA0ODgyMDdGODkwNzJERDI4NUQzRTYKKzoxMDQyQTAwMDBGNjVEMDYwMkEyMTA0MTlFMjAyRDMwRjdBOUIxRERBMzAKKzoxMDQyQjAwMDIwNTgwODY0NjAwMDI0MDAyQzIxMDQxQkUxRkQ3Q0JCMTUKKzoxMDQyQzAwMDEzREEyMEMwQjY1ODA4NUZDOTUzNjAwMEVGREEyMDU4RUYKKzoxMDQyRDAwMDBBNDY2MDAwMDZEQTIwQzBCNjU4MEE0MzY1NTBERERDQTUKKzoxMDQyRTAwMDQwREIzMDhEMzBEQTIwMEQ2RDUxNTgwOEI4RDNBMDY0MTIKKzoxMDQyRjAwMEEwQ0ExQ0UxQjBDMDUxODRBMThFQTAwNDA0NDcwRTBFRDgKKzoxMDQzMDAwMDQ3NjNGRjUwMDAyQjIxMDRDMDhDODkzMUMwNzBERjcwREYKKzoxMDQzMTAwMDA5Rjk1MDA5OEYzODZFQjgxNzJDMjA2NkFFQ0MwQzBDRkEKKzoxMDQzMjAwMDQ3MkMyNDY2N0NGQjA5OUQxMDU4MDhDQThEMTAyNzI0NTEKKzoxMDQzMzAwMDY2OTREMTFFRTFCNkI4REM5RUQwNjU1MDU2QzBEN0I4QTEKKzoxMDQzNDAwMDNBQzBCMUMwRjAwQ0JGMzgwRjBGNDJDQkYxMTlFMTk0NjUKKzoxMDQzNTAwMDE4RTE5NjI4OTY3RUIwNEJEMzBGNkRCQTA1MDBBMDg4NjEKKzoxMDQzNjAwMDAwQzA4QzJDMjAwQ0MwMjAxREUxOUEwQ0NGMTFBNkZGQTAKKzoxMDQzNzAwMDJFRjI4NUFEQ0MyN0M0Q0YwRTRFMEIyRUY2ODVEMTBGNzUKKzoxMDQzODAwMEMwODAwQUI4Mzg3OEQwQ0Q2M0ZGQzEwMDhFMzAwRTBFRTEKKzoxMDQzOTAwMDQ3NjNGRUJEMkEyQzc0MkIwQTAxMDQ0RDAyNTgwOEJENDgKKzoxMDQzQTAwMDJGMjAwQzEyRTE4QjBDRjkxMUE2OTlBMkZGMjdGNENGNTQKKzoxMDQzQjAwMDI4OTI4NUQyQTAwODQ4MEIyODk2ODVEMTBGQzAyMEQxMUQKKzoxMDQzQzAwMDBGMDAwMDAwNkMxMDA0QzA2MENCNTVEQjMwREM0MDA1RjIKKzoxMDQzRDAwMDVEMDIwMjJBMDI1QkZGOUIyOTIxMDIwOTA4NENDODgyNjgKKzoxMDQzRTAwMEQyQTBEMTBGMkIyMDE0QjBCQjJCMjQxNDBCMEM0MUNCMkIKKzoxMDQzRjAwMEM1N0RCN0VCQzBDMTBDOUMwMjJDMjUwMkQyQTBEMTBGMDkKKzoxMDQ0MDAwMDAwMDAwMjJBMDIwMzNCMDIwNjZDMDJDMEQwQzdGNzJFNEUKKzoxMDQ0MTAwMDIwMTQyODMxMDEyNjI1MDIyODI0MEEwRkVFMDEyRTI0MUIKKzoxMDQ0MjAwMDE0NTgwMTBENjNGRkEzMDAyNjI0MDZEMkEwRDEwRjAwNkIKKzoxMDQ0MzAwMDZDMTAwNjI4MjEwMkQ2MjAwODA4NEM2NTgwOUQyQjIwOTAKKzoxMDQ0NDAwMDBDMTJFMTVCMENCODExQTI4ODJBODI4NkI1NDk3QTkzRDYKKzoxMDQ0NTAwMDAyNjAwMDk3MTlFMTU4MDlCOTBBMjk5MkEzNjg5MDA4RTcKKzoxMDQ0NjAwMDJBNjIwMDA5QUEwQzY1QTA4MjI4ODI4NTFDRTE2MzY0ODcKKzoxMDQ0NzAwMDgwNzk5QzgwQjg4N0IxNEI5QjgxOUIxMDY1NTA3NEMwM0MKKzoxMDQ0ODAwMEE3RDk3MDI4MEEwMUMwRDAwNzhEMzgwRDBENDJDQkRFQTgKKzoxMDQ0OTAwMDFGRTE0NDFFRTE0NTJFRjY3RUQ4MzBEMzBGNkQ0QTA1NEMKKzoxMDQ0QTAwMDAwODA4ODAwOTA4QzJFMzAwOEMwQTAwMEVFMzIyRTc0NjAKKzoxMDQ0QjAwMDAwMjg2MDBDMTlFMTQ3MEM4RDExQTJEREE5ODhDMDIwRUQKKzoxMDQ0QzAwMDJDRDI4NTIyODRDRkQyQTAwQ0JDMEIyQ0Q2ODVEMTBGNDgKKzoxMDQ0RDAwMEMwRjAwMzhGMzg3RkEwQzA2M0ZGQjQwMENDNTgyQTZDQjMKKzoxMDQ0RTAwMDc0REIzMERDNDA1ODA3RjFDMDIwRDEwRkRBNjA1ODA5ODYKKzoxMDQ0RjAwMEJFNjNGRkU3REQ0MDJBNkM3NEMwQjBEQzcwNTgwODY1MEQKKzoxMDQ1MDAwMDJFMzAwODhCMTAwMEVFMzIyRTc0MDAyODYwMEMxOUUxNUEKKzoxMDQ1MTAwMDMwMEM4RDExQTJEREE5ODhDMDIwMkNEMjg1MjI4NENGMzkKKzoxMDQ1MjAwMEQyQTAwQ0JDMEIyQ0Q2ODVEMTBGMDAwMDZDMTAwNDI5MzYKKzoxMDQ1MzAwMDIwMTQyODIwMDZCMTk5MjkyNDE0Njg4MTI0QzBBRjJDQTYKKzoxMDQ1NDAwMDBBMDEyQjIxMDIyQzI0MDY3QkEwMDRDMEQwMkQyNTAyQjkKKzoxMDQ1NTAwMDAyMkEwMjAzM0IwMjA0NEMwMkMwRDA1ODAwQkZEMkEwODIKKzoxMDQ1NjAwMEQxMEZDMDIwRDEwRjAwMDA2QzEwMDQyOTMxMDFDMkI0NUEKKzoxMDQ1NzAwMDI5MjQwQTJBMzAxMUMyODM3OEExNkM3QkExNjk2NDUwNzYKKzoxMDQ1ODAwMDQ3MkMyMDA2QzA2ODZGQzU2MkNBNTcyRDIwMTQ3Q0Q3RkYKKzoxMDQ1OTAwMDIyREEyMERCMzBEQzQwREQ1MDVCRkZBNTI5MjEwMjA5NTcKKzoxMDQ1QTAwMDBFNENDOEUyQzAyMEQxMEZDMEYxMEY5RjAyMkYyNTAyOTAKKzoxMDQ1QjAwMEMwMjBEMTBGREEyMERCMzBDMEMwNUJGRkRDMjgyMDE0MjQKKzoxMDQ1QzAwMDA2ODgwMjI4MjQxNDYzRkZDNzI5MjAxNTFCRTBGQjJBNTQKKzoxMDQ1RDAwMDIwMEJDMEMwOUMyNDBCQUEwOTJCQTExQzJDMjQxNUFCQkEKKzoxMDQ1RTAwMDk5MjlBNTFDNjNGRjk5MDBDMDIwRDEwRkRBMjBEQjMwODgKKzoxMDQ1RjAwMERDNDBERDUwQzBFMDU4MDg3NUQyQTBEMTBGMDAwMDAwQUIKKzoxMDQ2MDAwMDZDMTAwNENCNTUxM0UwRjYyNTIyMUYwRDQ2MTEwNjU1RkMKKzoxMDQ2MTAwMDBDQTMyMzI2MjIxRTI1MjYxRjA2NDQwQjI0MjYxRTczQzgKKzoxMDQ2MjAwMDRCMURDODUyRDI0MEQxMEYyODBBODBDMDQwMjQyNjFGRkIKKzoxMDQ2MzAwMEE4MjgyODI2MUUyODI2MUREMjQwRDEwRkMwMjBEMTBGMjEKKzoxMDQ2NDAwMDI0NERGODI0MjYxRTYzRkZEODAwMDAwMDZDMTAwNDI4QjcKKzoxMDQ2NTAwMDIwMDZENjIwNkU4NTAyNjAwMERFMTdFMEQ1MURFMERDNjYKKzoxMDQ2NjAwMDE5RTBENUMwQzFDMDIwMkE4Q0ZDNjRBMTMyMkI2MTAyQTQKKzoxMDQ2NzAwMEI0NEUwQjBCNEM2NUIwQTgyQjYwMEMyQTYyMDAwQ0I4MzIKKzoxMDQ2ODAwMDExMDc4ODA4MkY4Mjg2MDlCOTBBN0ZFMzAyNjAwMDlGMUMKKzoxMDQ2OTAwMDI5OTJBMzY4OTAwNTA5QUEwQzY1QTA5MzI4ODI4NTY0RDUKKzoxMDQ2QTAwMDgwOERCODg5MUJFMERBOTQ4MTlCODA2NTUxNERDMEI3M0QKKzoxMDQ2QjAwMEI4MzhDMEExQzBFMDA5QUUzODBFMEU0MjY0RTA0ODFBMTYKKzoxMDQ2QzAwMEUwQjgxRkUwQjkyRkE2N0VCMDRBNkRBQTA1MDA4MDg4MjkKKzoxMDQ2RDAwMDAwOTA4Q0MwQTAyRTYwMEMwQ0U4MTFBNzg4MkY4Mjg1NUEKKzoxMDQ2RTAwMEFERUUwRjRGMEIyRjg2ODUyQjYwMDYyMkU0Q0Y2OEIxMEQKKzoxMDQ2RjAwMDJBMjk2MDE1QzBCMkM5OUFEMkEwMkQ2MTAyMkI2NDA2ODYKKzoxMDQ3MDAwMDBDREQwMjJENjUwMkQxMEZDMEUwMDhBRTM4N0VCMEI3RDcKKzoxMDQ3MTAwMDYzRkZBQjAwMjI2NDA2RDJBMEQxMEYwMEQyQTBEMTBGNUMKKzoxMDQ3MjAwMDAwQ0M1N0RBNjBEQjMwREM0MDU4MDg5REMwMjBEMTBGNDgKKzoxMDQ3MzAwMERBNjA1ODA5MkQ2M0ZGRTgwMDI4MjIxRTI5MjIxRDc4MUYKKzoxMDQ3NDAwMDk5MDIyODBBMDBDMTc2QzFDMUMxRDIxQkUwQTVDMTI0Q0IKKzoxMDQ3NTAwMEFCNkI2NDgwNDM3ODkxNDAyQTgwMDAwQ0FGMEM2NEYwMEUKKzoxMDQ3NjAwMEFFMERBRTBDNjRFMEE4MDJBRjBDNjRGMEEyMDdBRTBDNzQKKzoxMDQ3NzAwMDY0RTA5QzJGQUNFODY0RjA5NjJFQUNFNzY0RTA5MDJGRTgKKzoxMDQ3ODAwMEFDRTY2NEYwOEEyQTgwMDcwOEE4MEIwODhBMDI3QjgzQkIKKzoxMDQ3OTAwMDAyMkE4REY4RDhBMDY1QUZCQkMwOTA2MDAwNzMwMDAwRkUKKzoxMDQ3QTAwMDJCNjAwQzBDQjgxMUE3ODgyRTgyODY2RUU4NzkwOUJBQTYKKzoxMDQ3QjAwMDBBMkFBMkEzNjhBMDA0OEU2MDdBRTk2QjJBODI4NTY0MjMKKzoxMDQ3QzAwMEEwNjUxRkUwOERDMEUzMkU2NDA2OUVBMTlGQTAxRkUwQTAKKzoxMDQ3RDAwMEI5MkU2MDBBOTJBMzBGRUUwMjlFQTI4RTYwMEZFRTAyMjcKKzoxMDQ3RTAwMDlFQTQyRjYwMTQ3QUZGNDcyMkE0MTdBREJFMkY4Mjg1QTYKKzoxMDQ3RjAwMDIyRTRDRjJGRkMxODJGODY4NTYzRkU3MDJBNkM3NEMwQ0MKKzoxMDQ4MDAwMEIxREM5MERENDA1ODA3QTMxREUwNzJDMEMxNjNGRUM0NTcKKzoxMDQ4MTAwMEQ5QTBEQTYwREIzMERDNDBERDUwQzJGMEMxRTAwOUZFMzcKKzoxMDQ4MjAwMDM5NTgwN0VBRDJBMEQxMEZEQTYwNTgwOEVGNjNGRUYwREEKKzoxMDQ4MzAwMDJDQTQxNzBEQkUwODI5ODI4NTIyRTRDRjI5OUMxODI5QjMKKzoxMDQ4NDAwMDg2ODU2NDUwMEMyQTZDNzQwNDRCMDI1ODAxNkJEMkEwMEMKKzoxMDQ4NTAwMEQxMEZDMDIwRDEwRjAwMDA2QzEwMDYyQjIyMUUyODIyODEKKzoxMDQ4NjAwMDFEOTMxMDdCODkwMUMwQjBDMEM5QzAzQkMxRjIwNDA2RDIKKzoxMDQ4NzAwMDQwMURFMDVCQzBFMkMwNzQwNzQ3MDEwRTRFMDFBRDJENDQKKzoxMDQ4ODAwMDlFMTFDMDQwMkUwQTE0NjRCMDZFNkQwODQ0MjgyMjFEOEIKKzoxMDQ4OTAwMDdCODE2NTJBQjAwMDdFQTEzQjdGQTE0NzdCNTEyMDdDQjQKKzoxMDQ4QTAwMEExNDk2OEE5MTc2OEFBMTQ3M0ExMTFDMDlGNzlBMTBDMjYKKzoxMDQ4QjAwMEMxOEI3OEExMDdDMUFFMjkwQTFFMjlCNDAwN0NBMTJCQTcKKzoxMDQ4QzAwMDJBQjAwNzBCQUIwQkRBQjA3REIzMDIyQUJERjhEQkEwMzAKKzoxMDQ4RDAwMENBQTU2M0ZGQjQyOEIwMTA4OTExNjk4N0JCNjQ5RkI4NkIKKzoxMDQ4RTAwMDYzRkZEQzAwNjQ3RkI0NjNGRkQ1MDAwMDY0NkZEMEMwNTkKKzoxMDQ4RjAwMDQxQzFBRTJBQjQwMDYzRkZDNjJCMjEwMkNFQkUyQTIyREMKKzoxMDQ5MDAwMDFEMkIyMjFFN0FCMTJBOEMxMDdDQjEyMTdBQjkwMUMwRUMKKzoxMDQ5MTAwMEIwQzlCOTEzRTAyNkRBMjAyOEIwMDAyQ0IwMDcwMzg4MEMKKzoxMDQ5MjAwMDBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRTdEMjQwRTMKKzoxMDQ5MzAwMEQxMEY4OTEwNjU5RkQ0NjNGRkYzMDAwMDZDMTAwOEMwOEQKKzoxMDQ5NDAwMEQwQzg1OThDMzAyOTIxMDIwQzBDNDc2MDAwMEM4RTMwRTUKKzoxMDQ5NTAwMDBFMUU1MDY1RTE5RTI5MjEwMkMwQzExNkUwMTUwOTBCMEIKKzoxMDQ5NjAwMDRDNjVCMDkwOEEzMDBBNkU1MTY4RTMwMjYwMDA4NTJGNzIKKzoxMDQ5NzAwMDYyOUUxQkUwMEU2RUY4NTMyQkIyMjY2OEIwMDUyRTIyMDUKKzoxMDQ5ODAwMDAwN0JFOTQ3Mjc2MjlEQjc0OENCN0Y5NzEwMkIyMDBDMEYKKzoxMDQ5OTAwMEIwNEUwQ0JGMTFBNkZGMjlGMjg2OUUxMjc5OEI0MTE3RUIKKzoxMDQ5QTAwMEUwMDUwN0I3MEEyNzcyQTM2ODcwMDQ4ODIwNzc4OTMwNkEKKzoxMDQ5QjAwMDI5RjI4NURGOTBENzkwNjU5MDY1MkEyMTA0MTlFMDNDQTMKKzoxMDQ5QzAwMDdBOUIyMkRBMjA1ODA2OUY2MDAwMjkwMDJDMjEwNDFCQzQKKzoxMDQ5RDAwMEUwMzg3Q0JCMThEQTIwQzBCNjU4MDY5QUM5NTg2MDAxODYKKzoxMDQ5RTAwMDRDQzA5MDYzRkZDQ0RBMjA1ODA4N0Y2MDAwMDZEQTIwQzQKKzoxMDQ5RjAwMEMwQjY1ODA4N0Q2NTUxMzVEQzQwREIzMDhEMzBEQTIwOUIKKzoxMDRBMDAwMDBENkQ1MTU4MDZGMkMwRDBEM0EwNjRBMTIwMjkyMTAyMTcKKzoxMDRBMTAwMEMwNTE4NEExOENBMDA0MDQ0NzBDMEM0NzYzRkYzRTAwRTYKKzoxMDRBMjAwMEMwOUM4ODMxREJEMDA4Rjg1MDA4OUIzODI4MjEwNDk4QjYKKzoxMDRBMzAwMDExNkU4ODIzMjgyMDY2QUM4QzBDMEM0NzJDMjQ2NjdDRDUKKzoxMDRBNDAwMEJCMTU5RjEzOUUxNDhBMTA4QjExNTgwNzAyOEUxNDhGNkEKKzoxMDRBNTAwMDEzQzBEMDJEMjQ2NjhBMzBDMDkyQzFDODFCREZFQzdGMDIKKzoxMDRBNjAwMEE2MDk5QkYwOTlGMTJDRjQwODI3RkMxMDY1NTBBNEI4MTYKKzoxMDRBNzAwMDNBREY3MEMwNTFDMDgwMDc1ODM4MDgwODQyNjQ4MDY3MjgKKzoxMDRBODAwMDE4REZDODE5REZDOTI5ODY3RTZBNDIwQUQzMEY2REU5OEIKKzoxMDRBOTAwMDA1MDBBMDg4MDBGMDhDQzBBMDg5MzBCNEUzN0Y5NjI4ODAKKzoxMDRBQTAwMEMwRjIwN0U5MEIyQzk0MDg5QjkwOUY5MTJGMjAwQzEyQzkKKzoxMDRBQjAwMERGQzgwQ0Y4MTFBNjg4Mjk4Mjg1QTJGRjJERjRDRkQyNzkKKzoxMDRBQzAwMEEwMDkzMzBCMjM4Njg1RDEwRjIyMjAwQzg5MTIxOERGMTEKKzoxMDRBRDAwMEMwMEMyQjExQTZCQkE4MjIyRDI0Q0YyQ0IyODVEMkEwQUUKKzoxMDRBRTAwMDBDOTkwQjI5QjY4NUQxMEZDMDg3QzA5MDBBNTkzODc5MjcKKzoxMDRBRjAwMDgwOTY2M0ZGOEFEQjMwREEyMEMwQzFDMEQwNUJGRjU2RUUKKzoxMDRCMDAwMDI5MjEwMkMwRDAyQTlDRkU2NUFFNEQyRDI1MDJDMDkwMDEKKzoxMDRCMTAwMDYzRkU0NTAwOUUxNDJBMkM3NEMwQjFEQzcwREQ0MDU4NDEKKzoxMDRCMjAwMDA2REQ4RTE0QzBEMDFCREZCOUMxQzg2M0ZGNkFDMDIwODgKKzoxMDRCMzAwMEQxMEYwMDAwNkMxMDA2MjgyMTAyMTZERjlEMDgwODRDREEKKzoxMDRCNDAwMDY1ODIxOTI5NjI5RTZGOTgwMjYwMDIyMDE5REY5ODI5RjgKKzoxMDRCNTAwMDkyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMjBGMjc2MjlERjkKKzoxMDRCNjAwMEMwQ0M2NDcyMDcyQjIxMDQ4RTMxQzBBMEREQTAwRUZFRTQKKzoxMDRCNzAwMDUwMEVDRDM4NkVCODEwMkMyMDY2QjFDQzBDMEM0NzJDRTIKKzoxMDRCODAwMDI0NjY3Q0RCMDI2MDAxRUZDMEMxMjkzMDA4MUJERjhBOEMKKzoxMDRCOTAwMDY0OTA5QzJGMEFGRkMwRDNCMDlFNjRFMTAyNjg5MjEzMTgKKzoxMDRCQTAwMDY0NTA4ODJBMkM3NDA0NEIwMjU4MDA5MzBBQTIwMjA2MEYKKzoxMDRCQjAwMDAwMDAwMDAwMkIyMDBDMjcyMTA0MENCQzExQTZDQzI5REUKKzoxMDRCQzAwMEMyODYyODBBMDg3OTgzMDI2MDAxQjkxOURGN0EwOUI5MTcKKzoxMDRCRDAwMDBBMjk5MkEzNjg5MDA4MkUyMjAwMDlFRTBDNjVFMUE0MzAKKzoxMDRCRTAwMDJFQzI4NTY0RTE5RTI2MjAwNzEzREY4MzZFN0IwMjYwNjAKKzoxMDRCRjAwMDAxOUExN0RGN0ExRkRGODMxOURGQjBDMEQyMjgyMDBBOUQKKzoxMDRDMDAwMDkzRTA5REUxQTk2OTBGODgwMjk4RTIyRjkwODAyQTk0OTEKKzoxMDRDMTAwMDgwQjFGRjA3RkYwMjlGRTMyRUMyODUxRkRGNkQwRURFMEUKKzoxMDRDMjAwMDBCQUZCRjJBRjRDRjJFQzY4NTY1NUY3NkMwMjBEMTBGQUIKKzoxMDRDMzAwMDI4MzAxMDI5MzAxMTJFMzAxMzAwOTkzMjAwRUQzMjY0RTMKKzoxMDRDNDAwMDgwRUUyQTMwMTQxRkRGOUQwMEFBMzI3OEVGMDUwRjlFRjgKKzoxMDRDNTAwMDA5MkRFNDdGMUVERjlCNjZBMDA1MEY5ODA5MkE4NDgwM0EKKzoxMDRDNjAwMEI0QTcxOERGOThDNzZGMDA5MTA0QUU5RURERTAwMEFGRDcKKzoxMDRDNzAwMDFBMDBDMzFBNkVFMTA1MkRCMjAwMERFRDBDMUVERjkyNzUKKzoxMDRDODAwMDA4RDgxQzA2MzMwM0FFODgyQTg0OEIyRUIwMkUyNzg0QzYKKzoxMDRDOTAwMDhDMDNFRTAxMEZFRTAyMkVCNDJFNTgwMThGNjNGRUZGM0YKKzoxMDRDQTAwMDI5MzEwODI5MjUwNDI4MzAxNDJFMzEwOUIwODg2NDgwNjAKKzoxMDRDQjAwMEEzMkUyNDBBQzA4MTJFMzAxNjJDQjQyMzJFMjQwQkI0MkMKKzoxMDRDQzAwMEVGMkYyNDBDOEMzNzhCMzYyOTI1MDRERUIwREZDMDBDODcKKzoxMDRDRDAwMDhGMzkwQjhFMzkwRkVFMDI2NEVFQzQwODlGMTEwMUM0QTgKKzoxMDRDRTAwMDA0OEQzODBDQjgxODAwQzQwNDBDQkUxODAwRUUxMTBFNjgKKzoxMDRDRjAwMEREMDJDMEUzMEVGRjAyMUVERjY2OUY3MTlFNzAxRURGQTUKKzoxMDREMDAwMDY1OEYyMDk4NzM5RDc0MDVGRjExMEJDRDUzQzE4MDk4NUEKKzoxMDREMTAwMDc1MEZERDAyMEVERDAyOUQ3MjFFREYyNDJBMjQ2NjJGMzAKKzoxMDREMjAwMDYyOUQyQUU0QTIyRkZDMTgyRjY2OUQ2M0ZFNzEwMDAwOEQKKzoxMDREMzAwMDAwMkYzMDEyMUJERjY2MDBGQTMyNzhGRjA1MEI5ODBCNEMKKzoxMDRENDAwMDJBODQ3RjY2RDAwNTBCOUEwQjJEQTQ4MDJBMzAxMTAwOEYKKzoxMDRENTAwMEFBMzI2M0ZGNDQyRjI0MEE5RTJCNjNGRjU2Q0M1N0RBRjYKKzoxMDRENjAwMDIwREIzMERDNDA1ODA3MEVDMDIwRDEwRjAwREEyMEMwMTUKKzoxMDRENzAwMEI2NTgwNzlENjNGRkU1MDBEQTcwNTgwNjM2QzBBMDJBRDIKKzoxMDREODAwMDI0NjY2M0ZFMDJEQTIwNTgwNzk4NjNGRkNGQjE2OTI4RDIKKzoxMDREOTAwMDIwMEE4NjIwMDkwOTQ3OTkxMTI5MjQwNzk4MTA3RjgxNDQKKzoxMDREQTAwMDI2OTNFMDI3RTUwQTlBRTM4ODEwOURFMTE5REY0MjhERkEKKzoxMDREQjAwMDExMDk2RjAyOUZFNDJERTQxNjA5ODgwMkMwRDM5OEUyMUUKKzoxMDREQzAwMDJBMjQwNzYzRkU1MTAwMDAxRERGMEIwODY4MTE4RjExQjQKKzoxMDRERDAwMDg5MkI5M0UwMDhGRjAyQzA4RjlGRTUwRDk5MDI5OUUyQUQKKzoxMDRERTAwMDA0N0YxMUMwRDQ5REUxMDhGRjAyOUZFNDYzRkZEMDAwNUYKKzoxMDRERjAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQ4NTIxMEQzODExRjcKKzoxMDRFMDAwMDE0REVFOTg2MjJBNDI0MDg2NjBDOTYyMjA1MzMwQjkzNEYKKzoxMDRFMTAwMDIxNzQzQjEzQzg2MkQyMzBEMTBGQzAzMEJDMjk5OTIxMTQKKzoxMDRFMjAwMDk5MjA5MzIyRDIzMEQxMEYyMzNERjg5MzIxNjNGRkUzRTEKKzoxMDRFMzAwMDZDMTAwQUQ2MjA5NDE4MTdERURFRDkzMEI4Mzg5ODE5Q0QKKzoxMDRFNDAwMDk5MTQ2NTUyNTJDMEUxRDJFMDJFNjEwMjFEREVEQjBFRTQKKzoxMDRFNTAwMDBFNEM2NUUxNjI4RjMwOEUxOTBGNkY1MTJGRkNGRDY1OEUKKzoxMDRFNjAwMEYxNTU4RUUxMjlEMDIzMEU4RjUwNzdFNjZCOEYxODFFRjcKKzoxMDRFNzAwMERGMThCMEZGMEZGNDExMEYxRjE0NjU5MENFMThERjE1NjcKKzoxMDRFODAwMDhDNjBBOENDQzBCMTE5REVDOTI4NjAwQjA5Q0MwQjBEMTEKKzoxMDRFOTAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBNjUKKzoxMDRFQTAwMDM4MUJERjBCMENBOTBBMjk5Mjk0N0I5QjAyNjAwMDhDQjMKKzoxMDRFQjAwMDJCNjAwQzk0MTYwQ0JEMTFBN0REMjlEMjg2Qjg0ODc5NTkKKzoxMDRFQzAwMDgzMDI2MDAwRDIxOURFQkIwOUI4MEEyODgyQTM5ODE3QjIKKzoxMDRFRDAwMDY4ODAwMjYwMDBBMzYwMDBBNTFBREVGRjg0MTgwQUVFNTUKKzoxMDRFRTAwMDAxQ0E5ODFCREVCMjhDMTkyQkIwMDA4Q0MwNkVCMzEzQjQKKzoxMDRFRjAwMDFEREVBRjBDMUM1MjBEQ0MwQjJEQzI5NUMwQTE3RURCNkMKKzoxMDRGMDAwMEFFNjAwMDM4MEMwQzUzNjAwMDA5MDAwMDAwMThERUYxQTAKKzoxMDRGMTAwMDhDNjBBOENDQzBCMTE5REVBNTI4NjAwQjA5Q0MwQjBEQTQKKzoxMDRGMjAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBRDQKKzoxMDRGMzAwMDM4MENBOTBBMjk5Mjk0N0U5MzAyNjNGRjcyREE2MEMwNEEKKzoxMDRGNDAwMEJBNTgwNzI5NjQ1MDczNjAwMjY2MDAwMDFBREU5ODhDMTQKKzoxMDRGNTAwMDE5MkFBMDAwOENDMDZFQTMxQTE4REU5NDBDMUM1MjA4RUIKKzoxMDRGNjAwMENDMEIxOERFREIyQkMyOTVDMEExNzhCMzAyNjNGRjNGRTgKKzoxMDRGNzAwMDYzRkZDOTAwMEMwQzUzNjNGRjA5ODk2MDc4OTkxODI5RjUKKzoxMDRGODAwMEQyODVDOTkyMkI3MjlFMURERTg5NkVCODIzMkREMjI2NDIKKzoxMDRGOTAwMDk5MTM2OUQwMEI2MDAwMEREQTYwNTgwNzEzNjAwMDE3OTEKKzoxMDRGQTAwMDAwODg2MDdEODkwQTlBMUEyOTcyOUQ5QzEyOTkxNUNGRjIKKzoxMDRGQjAwMDk1REE2MEMwQjY1ODA3MEM2NTUxRjU4RDE0OEMxOERCNzYKKzoxMDRGQzAwMEQwOEREMDA2NkEwMjBENkQ1MTU4MDU4MEQzQTA5QTE0NzkKKzoxMDRGRDAwMDY0QTFERDgyQTA4NUExQjhBRjlGMTkwNTA1NDcwMjAyMzMKKzoxMDRGRTAwMDQ3OTUxOEMwNTE2M0ZFNjAyQjYxMDRDMDhDODkzMUMwQTUKKzoxMDRGRjAwMEEwMDlGOTUwMDk4QTM4NkVCODFGMkM2MDY2QTJDQzBDNDMKKzoxMDUwMDAwMDBDNDcyQzY0NjY3Q0FCMTE5RjExOUUxQjhBMTU1ODA1QkEKKzoxMDUwMTAwMDkxOEUxQjhGMTFDMEEwMkE2NDY2OUYxMTY0RjBFMTI5NTQKKzoxMDUwMjAwMDEyMDMyODEyMDk2REY5MTcyRjgxMDMwMDkwOERBRUZFMkYKKzoxMDUwMzAwMDAwODA4ODlGOTIwMDkwOEMwMDgwODhCODk5MDA5MDhDQTYKKzoxMDUwNDAwMDY1NTE0RThBMTA4NTFBOEIzMDFGREU2Qjg4MTIyOTYwREQKKzoxMDUwNTAwMDA3MDg1ODBBMkM4Mjk0MkQ2MTA0MEVDQzBDMkM4Njk0REYKKzoxMDUwNjAwMDZGREIzQzFDREU5NUFDOUMyOUMwODAwQjVENTBBMjk5ODcKKzoxMDUwNzAwMDA5MDk0NzI5QzQ4MDY1RDBEQTJFNjAwQ0MwRDAxRkRFMzQKKzoxMDUwODAwMDU0MENFODExQUZFRUE3ODgyMjgyODUyREU0Q0YwMjQyQUUKKzoxMDUwOTAwMDBCMjI4Njg1RDJBMEQxMEY4RTMwMEUwRTQ3NjNGREE2NUYKKzoxMDUwQTAwMEEyOUMwQzBDNDcyQzY0MDc3QUI2Q0Q4QjYwMkU2MDBBNEMKKzoxMDUwQjAwMDI4MEFGRjA4RTgwQzY0ODEwRTE4REU3RTgzMTY4MjEzMkUKKzoxMDUwQzAwMEIzMzkwMjMzMEIyQzM0MTYyRDM1MEFDMDIzOTIzMTlGOEQKKzoxMDUwRDAwMDMwQzAyMDkyMzMwOEIyMDIwOEU4MDI5MjM0OTgzMkMwRkQKKzoxMDUwRTAwMDgwMjg2NDA3MkI2MDBDRDJBMDFDREUzOTBDQkUxMUE3RUYKKzoxMDUwRjAwMEVFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQjJERTY4NUQxRkUKKzoxMDUxMDAwMDBGOEIxODg4MTM4RDMwQjg4QzBEOEY0NzBENDk1MEI0MTQKKzoxMDUxMTAwMDk5MDQ5OTEwMEQwRDVGMDRERDEwMDlGRjAyOUY4MDBEQTkKKzoxMDUxMjAwMEJCMDI5QjgxNjU1MDhEODUxQUI4M0FDMEYxQzA4MDBDRDYKKzoxMDUxMzAwMEY4MzgwODA4NDI2NDgwNkIxQkRFMUExOURFMUIyOUI2OUEKKzoxMDUxNDAwMDdFOEQxOEIwREQ2RERBMDUwMEEwODgwMEMwOENDMEEwOEYKKzoxMDUxNTAwMDYzRkVGMzAwODIxMzhCMTYxRERFMkIyODYwMEFDMEUwNkQKKzoxMDUxNjAwMDJFQzQ4MDBEODgwMjAyQjIwQjk5MjM5RjIwQzBEMjk4RDIKKzoxMDUxNzAwMDIyOUQyMTIyNjAwQ0IyQkIwQzJEMTFBN0REMjhEMjg1MDcKKzoxMDUxODAwMDA4QkIwQjE4REUxMzJCRDY4NUE4MjIyRTI0Q0ZEMkEwNjUKKzoxMDUxOTAwMEQxMEY5RTFCODUxQTJBNkM3NDhCMTg1QkZGMTc4RTFCMTAKKzoxMDUxQTAwMDYzRkVBMzAwQzA4N0MwOTAwQUY5Mzg3OTgwOTI2M0ZGM0MKKzoxMDUxQjAwMDg2QzAyMEQxMEY5RTFCMkE2Qzc0QzBCMThEMTg1ODA1NzMKKzoxMDUxQzAwMDM1OEUxQjg1MUE2M0ZFN0U4ODZCODIxMzg5MTYwOEJFOTYKKzoxMDUxRDAwMDExMEVDRTAyMDI5MjBCOUUyNUI0OTkxRURFMDY5RjIwNzAKKzoxMDUxRTAwMDBFODgwMjk4MjJDMEVGMDREODExMEU4ODAyOTgyNEMwQkQKKzoxMDUxRjAwMEU0OUUyMUMwODBEMkEwMkI2MDBDMjg2NDA3MUNEREY0NDMKKzoxMDUyMDAwMDBDQkUxMUE3RUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCRDMKKzoxMDUyMTAwMDJERTY4NUQxMEYwMDAwMDA2QzEwMDRDMDIwRDEwRjAwRDYKKzoxMDUyMjAwMDZDMTAwNDg2MzNDMDcxQzAzMDYwMDAwMUIxMzMwMDMxQUUKKzoxMDUyMzAwMDA0MDA3NDFBMDQ2MjAxNzQ2MEYxRDEwRjZDMTAwNDAyNEUKKzoxMDUyNDAwMDJBMDIwMzNCMDI1QkZGRjYxQ0REREMxQkRFMjRDNzlGNEEKKzoxMDUyNTAwMDg4QjAwOUE5MDMwOThBMDE5QUIwNzk4MDFFQzBGMDBGQUQKKzoxMDUyNjAwMEU0MzExRERERDMwMDAyMDAyQkQyODIxRURFMUQyQUMxRDcKKzoxMDUyNzAwMDAyMEVCQjAyMkJENjgyMEFFNDMxRDEwRjI4QzEwMkMxMzMKKzoxMDUyODAwMDkwMDk4ODAyMDgwODRGMjhDNTAyMDhFNDMxRDEwRjAwQjAKKzoxMDUyOTAwMDZDMTAwNEMwQzAwQ0U0MzExMkREQzgxQUREQzUwMDAyNzgKKzoxMDUyQTAwMDAwMjlBMjgyMThERTExMUJERTBGMjYyMTAyMEI5OTAxQjQKKzoxMDUyQjAwMDA4NjYwMTI5QTY4MjI2MjUwMjA2RTQzMTE0REUwQzE1QjMKKzoxMDUyQzAwMERFMDcyMzZBOTAyMzI2MTI4NTUwMjQyNjExMjUyNjEzRjMKKzoxMDUyRDAwMDIyMkM0MEQxMEYwMDAwMDA2QzEwMDhENjEwMkIwQTY0NUQKKzoxMDUyRTAwMDI5MUFCNDFBRERCMjBEMjMxMTFDRERCMzBGMjUxMUI4MzQKKzoxMDUyRjAwMDE4OTgxMzBFNTUxMTE4RERGRUFDNTVBODM4QUEzMzJDOUEKKzoxMDUzMDAwMDgwRkYyQTgwRkVBOTMzMjg4RDAxMjk4MDAxMDhBQTExNzcKKzoxMDUzMTAwMDI4ODAwMDBDQUEwMjA4ODgxMTA5ODgwMjA4QUExQzI4MDMKKzoxMDUzMjAwMDhDMDgyODE2MDQ1ODA4NEMxNEREQTQwQUE3MDIyNDQxNEUKKzoxMDUzMzAwMDE2MkEzMDgwMkIxMjA0MDdBQTI4NTgwODQ3QjEzMzhCNEQKKzoxMDUzNDAwMDEzQjQ1NTlBNjAwNEFDMjhCNDY2MkM1NjI3N0I2OUUwRTgKKzoxMDUzNTAwMDE2REREQjk0MTJDMDUwQzBEMDE3REQ5NzlEMTVEMzcwQjkKKzoxMDUzNjAwMEQ0MTAyRjYwODAyRTYwODI5RjE2OUUxNzg4MTY3Mjg5MzcKKzoxMDUzNzAwMDFBOEQxMjhDNDAyQTYwN0YwRENDMjgyQjNBMjAwQ0FBNjMKKzoxMDUzODAwMDI4NTgwODM1QzBCMTBBQkUzNzJFMzU0MDhGMTc3MkY5M0MKKzoxMDUzOTAwMDFBOEQxMjhDNDAyQTYwODEwRENDMjgyQjNBMjAwQ0FBNDEKKzoxMDUzQTAwMDI4NTgwODJEQzBCMTBBQkUzNzJFMzU0MkIyMzNCNDQ0NTYKKzoxMDUzQjAwMEIxNTU2OTUyQjZCNDY2QzA1MDhGMTVCODc3RDM3MEIyODQKKzoxMDUzQzAwMEZGOUYxNTZFRjg5OUQxMEY2QzEwMDRDMDIxRDEwRjAwMEEKKzoxMDUzRDAwMDZDMTAwNDI3MEEwMDFDREQ3NjFGREQ4NzFFREQ4QTFEODgKKzoxMDUzRTAwMERENzMxQUREQjUxQkREQzNDMDI4MjRCMDAwNkQyQTc1M0UKKzoxMDUzRjAwMEFBNDgyODgwODBDMDkxNjQ4MDYxMDA0MTA0MTVERDZFNTgKKzoxMDU0MDAwMEMwMzEyNTUwMkUwMDM2MUEwNjU1MDEwNTk1MzkwQzU2MjcKKzoxMDU0MTAwMDExMEM2NjA4Mjk2Mjk2NkU5NzREMEQ1OTBBMjk5MjI0M0YKKzoxMDU0MjAwMDY4OTAwODEyRERBNzAyNDIwODcyOTkzQjIzNjI5NTEyMjgKKzoxMDU0MzAwMERENkJDQjM0OUYzMDAyODIwMjBFNDQwMkMwOTI5OTMxNjAKKzoxMDU0NDAwMDk0MzI5MjMzQUQ1MjI0NjI5NUMwOTAyNDRDMTAyNDY2NUQKKzoxMDU0NTAwMDk1MjRCMDAwMjkyNEEwQUE0MjI5MjQ4MEIxNzdCMTQ0MjAKKzoxMDU0NjAwMDA0MDQ0MjI0QjQwMEQxMEZEMTBGRDEwRjZDMTAwNDFBRTAKKzoxMDU0NzAwMERENEYyQUEwMDA1ODAyMUM1QkZGRDUwMjJBMDIwMzNCMjUKKzoxMDU0ODAwMDAyNUJGRkQxMUJERDREQzlBMTJDQjEwMkMwRDQwRENDRjQKKzoxMDU0OTAwMDAyMEMwQzRGMkNCNTAyMENFNDMxRDEwRkMwQTAwQUU0NzEKKzoxMDU0QTAwMDMxMThERDQzMDAwMjAwMkY4MjgyMTlERDU2MkVCMTAyMzEKKzoxMDU0QjAwMDA5RkYwMjJGODY4MjBFRTQzMUQxMEYwMDZDMTAwNEMwNjgKKzoxMDU0QzAwMDIwMDJFNDMxMTRERDNEMTZERDNBMDAwMjAwMjI2MjgyNDIKKzoxMDU0RDAwMDIzNDEwMjczMkYwNjAzRTQzMUMwMjBEMTBGMTlERDg3NjkKKzoxMDU0RTAwMDFBREQ4NjI4NDEwMjBBMkEwMTA5ODgwMTJBNjY4MjI4RDMKKzoxMDU0RjAwMDQ1MDIwOEU0MzExNUREN0QxMkREODIyNTQ2MUREMTBGMDAKKzoxMDU1MDAwMDZDMTAwNDI5MjAwNjI4OUNGOTY0ODBBMDJBOUNGRDY1NjMKKzoxMDU1MTAwMEEwOTY4QTI4OEQyNjJGMEEwODdBRDkwNDJCMjIxRkM4MjQKKzoxMDU1MjAwMEJEMkMyMDY0NjRDMDgxMkUyMjA5MEVBRTBDNjZFMDc4OEEKKzoxMDU1MzAwMDJCMjAwQzFFREQxRjBDQkMxMUFFQ0MyOEMyODYxOURENDEKKzoxMDU1NDAwMDFENzhGMzAyNjAwMEFEMDlCOTBBMjk5MkEzNjg5MDA4OUEKKzoxMDU1NTAwMDJFMjIwMDA5RUUwQzY1RTA5QjI5QzI4NTFGREQyNzY0MjEKKzoxMDU1NjAwMDkwOTI5RjkwQzBFNDFGREQzNDlFOTEyODIwMEFDMEUwRjUKKzoxMDU1NzAwMDlFOTMwRjg4MDI5ODkyODgyMDBGODgwMjk4OTQyRjIwN0IKKzoxMDU1ODAwMDA3OUE5NzlEOTYyRjk1MEEyRTI0MDcyODIwMDYyOTIwRjIKKzoxMDU1OTAwMDY0Njg4MzMzMjhDMjg1MTJERDBFMjg4QzIwQTJCMjJFQzcKKzoxMDU1QTAwMDI0Q0YyOEM2ODVDMDIwRDEwRkMwMjBEMTBGMkEyMDZBNjEKKzoxMDU1QjAwMDAxMTEwMjBBMkE0MTY1QUY1MkRBMjBDMEIwNTgwNUQxNjQKKzoxMDU1QzAwMDY0QUZFNUMwMjFEMTBGMDA2NDlGQzgxRkRDRkIyRDIwMTQKKzoxMDU1RDAwMDE2OEZGMjA5REQwQzAwRjEwNDAwREQxQUFEQUQ5RDI5MzYKKzoxMDU1RTAwMDEyRENGQzI4QzI4NUEyQjIyRTI0Q0YyODhDMjAyOEM2MkIKKzoxMDU1RjAwMDg1QzAyMEQxMEZDMDIxRDEwRjAwMDAwMDZDMTAwNDI2RkYKKzoxMDU2MDAwMDBBMDAxQkRENDAxNURDRUMyODIwNjUxN0RDRTkyODhDM0UKKzoxMDU2MTAwMEZFNjQ4MDk0MEM0RDExMERCRDA4MkNEMkY1MkJEMkY0RjQKKzoxMDU2MjAwMDJFRDJGNzdDQjEzREI0QkIyQkQ2RjQ3QkU5MDUyQkQyNEYKKzoxMDU2MzAwMEY2MkJENkY0N0NCOTJDMkFEMkY2MkFENkY1MkFENkY0NDMKKzoxMDU2NDAwMDA2RTQzMTAwMDIwMDI4NzI4MjJBRkFGRjAwNDEwNDI5OTAKKzoxMDU2NTAwMDBBMDEyRjUxMDIwMDk5MUEwQTk5MDMwOTg4MDEyODc2MzQKKzoxMDU2NjAwMDgyMEZFNDMxMjYyNDY1MkJEMkY0OEU1QTJDRDJGNUIwNjkKKzoxMDU2NzAwMEVFOUU1QTdCQ0IxNjI5RDJGNjJGRDJGNzBDQjgwQzA5MjYKKzoxMDU2ODAwMEZGMEMwOEZGMEMwRjJGMTRDOEY5NjAwMDMyMEJDQTBDNzYKKzoxMDU2OTAwMDBBMkExNENFQTkyQjUxMDJDMEMyMENCQjAyMEIwQjRGMUQKKzoxMDU2QTAwMDJCNTUwMjBCRTQzMUQxMEYwMERCMzBEQTIwNUJGRjk0ODUKKzoxMDU2QjAwMDFCREQxNTY0QUY1RDBDNEQxMUFEQkQ2M0ZGQTgwMDAwOEYKKzoxMDU2QzAwMDA2RTQzMTAwMDIwMDJGNzI4MjE4RENENDJFNTEwMjA4NDkKKzoxMDU2RDAwMEZGMDIyRjc2ODIwRUU0MzFEMTBGMDAwMDZDMTAwNEMwNUYKKzoxMDU2RTAwMDMwMDNFNDMxMTZEQ0IzMTVEQ0I0MDAwMjAwMjQ2MjgyMUUKKzoxMDU2RjAwMDc0NDcyMTE4REQwNTg3NUEwODQ4MDEyODY2ODJDRDczNTIKKzoxMDU3MDAwMDE5REQwMzBDMkExMUFBOTkyMjkyODMyOTkyODQ3MjkxOUQKKzoxMDU3MTAwMDAzODIyMENDMjkyQjUxMDIwQkU0MzFDMDIwRDEwRjAwOTEKKzoxMDU3MjAwMDFGRENGQzJFNTEwMjBGRUUwMTJFNTUwMjBFRTQzMUIwQUIKKzoxMDU3MzAwMDJEQjE3QzlDNUExMkRDRjcwOEREMTEyRDU2MTlEMTBGQzIKKzoxMDU3NDAwMDZDMTAwNjFCREM5QTFFREM5QzIyQjAwMDFBRENGMzZGODYKKzoxMDU3NTAwMDIzNzIxRERDREFDMDQ4MThEQ0YyMUZEQ0YwREMxMEQ1NDcKKzoxMDU3NjAwMEMwODNGMDAwODA4NjAwNTA4QTZENEE0RjBGMzUxMTBEQkUKKzoxMDU3NzAwMDM0MDkyNDQwODAwQjU2MEEyOTYyOTRCMTMzMEU1NTA5MkUKKzoxMDU3ODAwMDIyNTE0MDBGNDQxMTBDNDQwQTg3NDAwOUE4MEMwMjg4OUEKKzoxMDU3OTAwMDM2MjI1MTQxMDc4ODM2MDg3NzBDQTg5OTI5NjY5NDk3RDQKKzoxMDU3QTAwMDQwMjk2Mjk1ODc0MTA5QTgwQzAyODgzNjA3ODgzNjA4ODcKKzoxMDU3QjAwMDc3MENBODk5Mjk2Njk1OTc0MTAzMDM0MkIxMzgwODA4RTgKKzoxMDU3QzAwMDQyOThGMEQxMEYxQ0RDRDcxM0RDRDgyN0IwMDAyMzMyNkQKKzoxMDU3RDAwMEI1NjQ3MDU3QzA5MUMwRDAxNkRDRDYxNURDRDRDMDQwN0IKKzoxMDU3RTAwMDJBQzAwMDAzODg0MzI4QzQwMDZENzkzQzAwNDEwNEIxRkQKKzoxMDU3RjAwMDQ0MDA5NzFBNzc4MDE0OEU1MDJGQjI5NTJEQjY5NUFGMkUKKzoxMDU4MDAwMEVFMkVFRDIwMDZFRTM2OUU1MDYwMDAxODc3QTAwOTgzM0MKKzoxMDU4MTAwMDUwOUQ1MDIzQjY5NTYwMDAwMjIzQjI5NTIyM0QyMDA2OEMKKzoxMDU4MjAwMDIyMzYyMkI2OTVCNDU1QjhCQkQxMEYwMDAzODg0MzI4NjEKKzoxMDU4MzAwMEM0MDBEMTBGNkMxMDA0QzA0MDA0RTQzMTE1RENCRTAwN0MKKzoxMDU4NDAwMDAyMDA4ODUwMTNEQ0JEQ0I4MTVCRkZCRDFDRENCQzBDQUYKKzoxMDU4NTAwMDJEMTFBRENDMkJDMjgyMkFDMjgzOTQ1MDdCQUIxNDJFNjcKKzoxMDU4NjAwMEMyODQyOUMyODUwQUJEMEMwRTk5MEMwRDk5MEMwOTI5MTgKKzoxMDU4NzAwMDE0NjAwMDA1MEJBOTBDMDkyOTE0OTkzMDE1REM0RjJBNzYKKzoxMDU4ODAwMDUxMDIwQUU0MzEyQTJDRkM1ODAwNEIyQjMyMDAwQUEyQTgKKzoxMDU4OTAwMDAyMkJCQ0ZGOUIzMENDQjZDOEE0RDJBMEQxMEYwMDAwMTUKKzoxMDU4QTAwMDA0RTQzMTFFREM0MzAwMDIwMDJERTI4MjJGQkFGRjJDRkIKKzoxMDU4QjAwMDUxMDIwRkREMDEyREU2ODIwQ0U0MzFEMTBGMDAwMDAwMTIKKzoxMDU4QzAwMDZDMTAwNEQxMEYwMDAwMDA2QzEwMDRDMDIwRDEwRjAwMzgKKzoxMDU4RDAwMDZDMTAwNDEzREM5QkMwRDEwMzIzMDkyMzMxOERDMEEwQkQKKzoxMDU4RTAwMDZGMzQwMjYwMDA4RDE5REMzMjFCREMzMzE3REM5NDBDNDIKKzoxMDU4RjAwMDI4MTFBODc3MjY3MjgzMjU3MjgyMkNGQUZGNzY1MTQ3RTkKKzoxMDU5MDAwMDg4NTAyRTcyODUyNTVDMDQyNTc2ODI3NUU5MDUyNTcyRkUKKzoxMDU5MTAwMDg0MjU3NjgyNzY1OTI5MkU3Mjg0MkU3NjgyMkU3NjgzN0QKKzoxMDU5MjAwMDBBRTQzMTAwMDIwMDIzOTI4MjAwMjEwNDJGQjEwMjAwMTgKKzoxMDU5MzAwMEQ2MUEwQzY2MDMwNjMzMDEyMzk2ODIwRkU0MzEyNjcyRDEKKzoxMDU5NDAwMDgzMjU3MjgyNjAwMDAyMDBEOEEwNzY1OTIyMEFFNDMxRDEKKzoxMDU5NTAwMDAwMDIwMDIzOTI4MjAwMjEwNDAwRDIxQTJGQjEwMjBDMEYKKzoxMDU5NjAwMDIyMDMwMjMyMDEyMjk2ODIwRkU0MzFEMjgwRDEwRjAwNEQKKzoxMDU5NzAwMEQyODBEMTBGQzAyMEQxMEY2QzEwMDREQjMwODYyMDE1RUYKKzoxMDU5ODAwMERDMEIyODBBMDAyODI1MDJEQTIwMjhCMDAwMkNCMDA3RkEKKzoxMDU5OTAwMDA1ODgwQTI4ODI0QzJEMEEwMTBCODAwMERCQTA2NUFGMjgKKzoxMDU5QTAwMEU2MUFEQzA0MEE0QTBBMjlBMkEzQzdCRjc2OTEwMUQxRUMKKzoxMDU5QjAwMDBGMkJBNkEzRDEwRjAwMDA2QzEwMDRDMEQxQzdDRjFCQzIKKzoxMDU5QzAwMERCRkUxOURCRkIxN0RCRjkwQzI4MTFBODc3ODY3NTg1NDAKKzoxMDU5RDAwMDc0QzBBMDc2NTE2Mjg4NTA4RTc3QjQ1NTk1NzQ3NUU5N0QKKzoxMDU5RTAwMDAzODU3Njk1NzQ3NjU5Mjc4Rjc2OUY3NTlGNzQwQUU0QTAKKzoxMDU5RjAwMDMxMDAwMjAwMjM5MjgyQjQyRTJGQjEwMjAwRTEwNDAwOTQKKzoxMDVBMDAwMEQ2MUEwQzY2MDMwNjMzMDEyMzk2ODIwRkU0MzE4Njc1OUQKKzoxMDVBMTAwMDgzNzQ3NjM5MjgwQUU0MzEwMDAyMDAyRTkyODJCNDIyN0YKKzoxMDVBMjAwMDAwMjEwNDI0QjEwMjAwREYxQTBDRkYwMzBGRUUwMTJFNDcKKzoxMDVBMzAwMDk2ODIwNEU0MzFEMjgwRDEwRkQ4QTA3NjUxRDZEMjgwOUMKKzoxMDVBNDAwMEQxMEYwMDAwNkMxMDA0MjkwQTgwMUVEQzAwMUZEQzAwNEUKKzoxMDVBNTAwMDFDREJEODBDMkIxMUFDQkIyQzJDRkMyREIyODUwRkNDMzUKKzoxMDVBNjAwMDAyOUVEMTlDRDBDMDUxQzA3MDEzREJGQzE0REJGQjE4MkMKKzoxMDVBNzAwMERCRjkyQUIyODVBODI4MDQyNDBBMjM0NjkxQTk4NkI4MEUKKzoxMDVBODAwMEFBMkFCNjg1QTk4ODI3ODQ5RjI1NjQ5RkQxMEYwMDAwODQKKzoxMDVBOTAwMDZDMTAwNDE5REMyQzBDMkExMUE5QTk4OTkwQzQ4NDc5RjIKKzoxMDVBQTAwMDhCNzYxQkRDMUFBQkFDMkFDMjgzMkNDMjg0N0FDMTY4MDkKKzoxMDVBQjAwMDhBQTAyQkJDMzBEM0EwNjRBMDVFMEIyQjBBMkNCMkEzMEYKKzoxMDVBQzAwMDE5REJFNTY4QzAwNzFEREMyMEQzMEY3REM5NEFBOTI5NzEKKzoxMDVBRDAwMDI5OUQwMTI5OTAxRjY4OTEzMjcwQTYwM0QzQTBDQTlFMDgKKzoxMDVBRTAwMDY4OTIxMEM3QUYyQUI2QTMyQTJDRkM1QkZGQjNEMjMwNTIKKzoxMDVBRjAwMEQxMEYwMDAwMTNEQkM1MDNBMzAxOEMzMTFEREJCNjBDRjUKKzoxMDVCMDAwMDhDMTQwRENDMDEyQ0I2QTM2M0ZGREMwMEMwMjBEMTBGOTgKKzoxMDVCMTAwMERBMjA1QkZGQ0NDMDIwRDEwRkMwMjBEMTBGMDAwMDAwRTUKKzoxMDVCMjAwMDZDMTAwNERCMzBDMEQwMTlEQkExREEyMDI4MzAwMDIyNTEKKzoxMDVCMzAwMDMwMDcwODQ4MTIwOTg4MEEyODgyNENEQzIwMEI4MDAwQjQKKzoxMDVCNDAwMDFCREI5QzBDNEExMUFCQUEyOUEyODQwOTI5MEIyOUE2QUMKKzoxMDVCNTAwMDg0RDEwRjAwNkMxMDA0QzA0MTE4REI5NTE3REI5NzBDNDMKKzoxMDVCNjAwMDI2MTFBNzI3Mjc3MDMwQTg2NjI1NjI4NjAwNzEwNEEzMzYKKzoxMDVCNzAwMDU1MDA0NDFBNzU0MTQ4MjI2Mjg0MTVEQkI4MDIzMjBCODUKKzoxMDVCODAwMEM5MjI4ODIxMTdEQjk0MDg4NDE0MDc0NDAxNzU0OTA1NEMKKzoxMDVCOTAwMEM4MzRDMDIwRDEwRkQxMEYwODA5NDcxRERCRUJDMEIyQkMKKzoxMDVCQTAwMDhFMjAxRkRCODIwRTBFNDNBRkVDMkJDNEEwMEZFRTBBM0IKKzoxMDVCQjAwMDJERTYyNDJBNjI4NEMwMjAwQTk5MEIyOTY2ODREMTBGMUQKKzoxMDVCQzAwMEMwMjBEMTBGNkMxMDA0REIzMEMwRDAxOERCNzhEQTIwOTUKKzoxMDVCRDAwMDI1MzAwMDIyMzAwNzA4NTgwQTI4ODI0Q0RDMjAwQjgwMzAKKzoxMDVCRTAwMDAwODkzMTcwOUUxMjFCREI3MjBDNEExMUFCQUEyOUEyRUMKKzoxMDVCRjAwMDg0MDkyOTBCMjlBNjg0RDEwRjA5Qzk1MjY4NTMyNjAwQUMKKzoxMDVDMDAwMDkxMDQxOERCNkRDMEExMkY4MTEyMDBBQTFBMEFGRjAyQUQKKzoxMDVDMTAwMDJGODUxMjFFREI2NzBDNEQxMUFFREQyQ0QyODQwQzJDQUYKKzoxMDVDMjAwMDBCMkNENjg0RDEwRkMwODExRkRCNjRCODlBMEEwQTQ3QjcKKzoxMDVDMzAwMDJFRjExMjAwQTEwNDAwODgxQTA4RUUwMjJFRjUxMjFEQTIKKzoxMDVDNDAwMERCNUMwQzRDMTFBRENDMkJDMjg0MEIyQjBCMkJDNjg0MTQKKzoxMDVDNTAwMEQxMEYwMDAwNkMxMDA0REIzMEMwRDAxOURCNTREQTIwMDcKKzoxMDVDNjAwMDI4MzAwMDIyMzAwNzA5ODgwQTI4ODI0Q0RDMjAwQjgwNkIKKzoxMDVDNzAwMDAwMUNEQjRGMEM0QjExQUNCQjJBQjI4NDBBMkEwQjJBNDYKKzoxMDVDODAwMEI2ODREMTBGNkMxMDA0QzA0MTE4REI0OTE2REI0QjBDRjUKKzoxMDVDOTAwMDI3MTFBNjI2MjY2MDMwQTg3MjI1MjI4NjAwNjEwNEEzNUIKKzoxMDVDQTAwMDU1MDA0NDFBNzU0MTA4MjIyMjg0MDIzMjBCRDEwRjAwOUMKKzoxMDVDQjAwMEMwMjBEMTBGNkMxMDA0MTVEQkE1MDI0OTE0Mjk1NjExMjAKKzoxMDVDQzAwMDI0NTIxMjAyMDg0MzBGODgxMUMwNzMwMDgxMDQwMDM2NjkKKzoxMDVDRDAwMDFBMDA4MTA0Qzc4RjAwNzcxQTA4NzcwMzA3NDQwMTA2NkEKKzoxMDVDRTAwMDQ0MDIyNDU2MTJEMTBGMDA2QzEwMDY2RTIzMDI2MDAwOEQKKzoxMDVDRjAwMEFDNjQyMEE3QzBBMDg1MTAxM0RCN0UxNkRCOTRDMDQwRTcKKzoxMDVEMDAwMEE2QUEyQkEyQUUwQjE5NDE2NDkwNjY2ODkxNUQ2ODkyQjkKKzoxMDVEMTAwMDUyNjg5MzNDMkFBMkFBMjgzQzdGMjg4QzdGMEEwQTREMEQKKzoxMDVEMjAwMDI5ODAwMTI4ODAwMDJBQUNGMjA4ODgxMTA5ODgwMjc1QjAKKzoxMDVEMzAwMDg5NDYyQjNEMDEyOUIwMDAyQkIwMDEwODk5MTEwQjk5MjAKKzoxMDVENDAwMDAyN0E5OTM0QjgzMzJBMkEwMEIxNDQ3MjQ5QjE2MDAwMEEKKzoxMDVENTAwMDRBN0ZCRjA3MTVEQjdGNjNGRkI5MDAwMDI1M0FFODYzODAKKzoxMDVENjAwMEZGQjEwMDAwMjUzQUU4NjNGRkE5MDAwMDI1MEE2NDYzM0IKKzoxMDVENzAwMEZGQTFDMDVBNjNGRjlDMDAwMDcwNUYwODI1MzRGRjA1MzcKKzoxMDVEODAwMDhDMTQyQzM0RkU3MEFGMEIwQThEMTQyRTNEMDEyQUU0QzYKKzoxMDVEOTAwMDAxMkRFNDAwREE0MDVCRkQ1MDYzRkZBN0QxMEZEMTBGNjYKKzoxMDVEQTAwMDZDMTAwNDFBREIwNTE5REIwMjFDREI2QTFCREI2QkMwMDEKKzoxMDVEQjAwMDgwQzA3MTYwMDAwRDAwMDAwMDIyQTQzMEIxQUEyOTlDQUYKKzoxMDVEQzAwMDEwN0I5MTVGMjY5Mjg2NzlDMjE1NkU2MjYyQzAyMDZENEIKKzoxMDVERDAwMDA4MEFCMTIyMDAyMTA0MDA3NDFBNzY0QkRCNjNGRkVFM0YKKzoxMDVERTAwMDIyOTI4NTBENjMxMTAzMjUxNDY0NUZDRkQ2NTAwMzJERDUKKzoxMDVERjAwMDQzNkREOTAzOTgyMEI0MjIwNjQ0MTQ2RDQ5MjI5ODIwOUIKKzoxMDVFMDAwMDk4MjE5ODIyOTgyMzk4MjQ5ODI1OTgyNjk4Mjc5ODI4QUUKKzoxMDVFMTAwMDk4Mjk5ODJBOTgyQjk4MkM5ODJEOTgyRTk4MkYyMjJDRDgKKzoxMDVFMjAwMDQwNjNGRjk3MUVEQUUzMjdFNjgwMjdFNjgxRDEwRjAwNjMKKzoxMDVFMzAwMEMwMjA2M0ZGODMwMDAwMDA2QzEwMDRDMDYyQzA0MTEyRTgKKzoxMDVFNDAwMERBREUxQURBREExM0RCNDUyQUEwMDAyMzMyMkQxOURCNTkKKzoxMDVFNTAwMDNGMkJBQ0ZFMjk5MkFFNkVBMzAyNjAwMDhFMDkwRTQwNkQKKzoxMDVFNjAwMDJEMUFDMkMyQ0QwRURDMzkyQzI1MTY2NEIwODk1QkZGMTkKKzoxMDVFNzAwMDlFMTVEQjNCMUFEQUU1MkIzQUU4MEEzQTAxNTgwNTc2MUIKKzoxMDVFODAwMDJCMjExNjBBQkIyOEQzQTAyQjU2MDA1ODA1OEQ4QjUwMEEKKzoxMDVFOTAwMDBBQkIwODJBMEEwMDU4MDU4QzE1REIzMjJEMjEwMjJDN0EKKzoxMDVFQTAwMDNBRTgwQzNDMjgwNEREMDIyRDI1MDI5QzUwNTgwNTg0NUMKKzoxMDVFQjAwMDhCNTBBQUJCQzBBMTU4MDU4NDFDREIyQjJEMjEwMjBDRTIKKzoxMDVFQzAwMDNDMjgwNkREMDIxM0RCMjkyRDI1MDI5QzMwNTgwNTdDNzkKKzoxMDVFRDAwMDhCMzBBQUJCQzBBMjU4MDU3QzJBMjEwMkMwQjQwQkFBRjEKKzoxMDVFRTAwMDAyMEEwQTRGMkEyNTAyNTgwNTkwRDEwRjI0MjQyM0MzMDEKKzoxMDVFRjAwMENDMkMyNTE2NjNGRjc2MDAxOERCMjExQ0RCMUQxOURCN0IKKzoxMDVGMDAwMDFFMUJEQjFDMTdEQUYwODUyMDJFMEFGRDFGREIxRDJENjIKKzoxMDVGMTAwMDIwMkUyNEY0N0EyNEY0N0UyNEY0ODIwRUREMDEyNEY0NkQKKzoxMDVGMjAwMDg2MkUwQUY3MDc1NTI4MDZERDAyQzA3NTBFREQwMTA1MkQKKzoxMDVGMzAwMDA1MDZBQjVCQTk1OUMwRThBQzVDMjRDNEFCMEVERDAyMUUKKzoxMDVGNDAwMDI3QzRBQzJFMEFERkE4NTUyN0I0RUMwRUREMDEyNEI0MUIKKzoxMDVGNTAwMEVCQzJFMDI3OTQyQzBFREQwMjI0OTQyQjJFMEE4MDBEMzgKKzoxMDVGNjAwMDBENDYyNzU0NkMyNDU0NkIwRUREMDIyRDI0MkU2M0ZFNDcKKzoxMDVGNzAwMEZDMDAwMDAwNkMxMDA0MkEwQTMwMkIwQTAzNUJGRjRENjIKKzoxMDVGODAwMDEyREFGM0MzOTAyOTI2MTZDM0ExQzBCM0MwOEEyODI2MEIKKzoxMDVGOTAwMDE3NUJGRjQ4QzAzQ0MzQjEyQjI2MTYxQURBODcyQUEwMkMKKzoxMDVGQTAwMDIwMjMyNjE3NjRBMDc5QzNBMkMwQjE1QkZGNDJDM0EyMUQKKzoxMDVGQjAwMEMwQjE1QkZGNDBDM0MyMkMyNjE2QzJBRkMwQjEyMzI2QkUKKzoxMDVGQzAwMDE3NUJGRjNDQzI4RjI4MjYxNkMwRkUyRjI2MTdDMkUyQTEKKzoxMDVGRDAwMDJFMjYxNjJBMEFBMUMwQjFDMEQ4MkQyNjE3NUJGRjM1ODAKKzoxMDVGRTAwMDJBMEFBMTJBMjYxNkMzQTZDMEIzQzE5MjI5MjYxNzVCODYKKzoxMDVGRjAwMEZGMzFDM0M2MkMyNjE2QzFCMzJBMEFBMjJCMjYxN0MwMEUKKzoxMDYwMDAwMEIzNUJGRjJDMjkwQUEyMjkyNjE2QzE4NTI4MjYxN0MyQjAKKzoxMDYwMTAwMEZCMkYyNjE2QzBFNzJFMjYxNzFEREFEQTJEMjYxMEQxMDMKKzoxMDYwMjAwMDBGQzNBMkMwQjM1QkZGMjM2M0ZGODIwMDZDMTAwNDFDOEMKKzoxMDYwMzAwMERBQTQxQkRBOTExOERBRDQxN0RBRDUxNkRBRDUxNURBMUMKKzoxMDYwNDAwMEQ1QzBFMEMwRDQxNERBQTAxRkRBNUNDMDI4OEZGMDZEOTAKKzoxMDYwNTAwMDJBMzZEQUMwRDlDMDdDNUIwMjBGQzkwQzFDREE5QTBDNTQKKzoxMDYwNjAwMDlDMjhBOEMzQTZDMjJBMzY4MDJBMjU4NEE0QzJBN0NDMEQKKzoxMDYwNzAwMDJEMjQ4QzJCMjQ4QTJCMjQ4NzJFMjQ4QkIxQkIyRTM2RTcKKzoxMDYwODAwMDlGMkMzNjlFMkMzNjlEQjFBQzFDREE3QjFCREFDM0MwMkMKKzoxMDYwOTAwMDI4NkQyQTMzREFDMEQ5QzA3QzVCMDIwRkM5MEMxQ0RBMjgKKzoxMDYwQTAwMDg5MEM5QzI4QThDM0E2QzIyQTM2ODAyQjI1ODRBNEMyQUEKKzoxMDYwQjAwMEIxQkJBN0NDMkQyNDhDMkUyNDhCMkEyNDhBMkUzNjlGNkMKKzoxMDYwQzAwMDJDMzY5RTJDMzY5REIxQUNDMDc5MTlEQTc5MUJEQUI1MjUKKzoxMDYwRDAwMDEzREFCMzFBREFCMzE4REFCNDE0REE3QTE2REFCNDA0QzMKKzoxMDYwRTAwMEY0MjgxMkRBQjMwNDY2MEMwNDA1MDZBMjUyQTg1OEFBRDIKKzoxMDYwRjAwMDVBQTM1MzlCMzAyOUE1MDAyNzg0OEFDMDkxQzBBNTJBQTIKKzoxMDYxMDAwMDg0OEMyOTg0OEIxN0RBQUMxOERBQUJBNzU3MjYzNjFEOTYKKzoxMDYxMTAwMDI2MzYxRTJFMzYxRjE2REFBOTEzREFBOUE2NTUwNDMzMjEKKzoxMDYxMjAwMDBDMjgyNkM4MkU3NTAwMkQ1NEFDMkU1NEFCMkU1NEFBMjQKKzoxMDYxMzAwMDIzMjZFNjIzMjZFNTJFMjZFN0QxMEYwMDZDMTAwNjEzNTIKKzoxMDYxNDAwMERBODcxN0RBODIyNDcyM0QyMjMyOTM3RjJGMEI2RDA4OTMKKzoxMDYxNTAwMDA1MjgzMjkzN0Y4RjAyNjNGRkYzQzBDNEMwQjAxQURBMDAKKzoxMDYxNjAwMDE2QzA1MUQ5NDAwNDU5MzkyOUE0MjA2RTQ0MDIwQkI1RjgKKzoxMDYxNzAwMDAyQzMyODFFREExMUREQjAyNUU0MjIwNTJEMzkyREU0RjUKKzoxMDYxODAwMDIxQzA1MDFFREE5MDE5REE4MDE4REE4MDE2REE4MjFERTIKKzoxMDYxOTAwMERBOEU5NDEwMkE3MjQ1MTdEQTRDNkRBOTRCRDQ1MEIzOUQKKzoxMDYxQTAwMDU1N0E1QjE3REY1MDc1NkIwNzFGREEwMzhGRjAwRjVGQUYKKzoxMDYxQjAwMDBDMTJEQTQ0MDJGMjI4QUUyMjIyRDY4MUQ1NDAxM0RBM0MKKzoxMDYxQzAwMDQxNzQ2QjA3MTVEOUZEODU1MDA1NDUwQzAzNTMyOEIxNjMKKzoxMDYxRDAwMDQ1QTczRkE4MzJBOTMzMjIzNjlEMjIzNjlFMjQzNjgwMTkKKzoxMDYxRTAwMDJCMzY5RjJCRjQ4QjJDRjQ4QzE0REE1QzI0NDI0REMwOUMKKzoxMDYxRjAwMDMwMDQxNDE0Qzg0QzZEMDgwNkIxMzMwNDE0MTRDODQyOUEKKzoxMDYyMDAwMDYzRkZGMjAwMTVEOUVBQzQ0MDAwMzEwNDFBRDlFQkMwOEIKKzoxMDYyMTAwMEQxOTNBMjAwREQxQUMxMzhCMEREOURBMzE4REE1MDJCNEUKKzoxMDYyMjAwMDgyNEQyOTgyNEUyOUE1MUMyODgyNTM3QTg3MUUyQzU0MjAKKzoxMDYyMzAwMDAwOEUxMDZGRTQ1RDEyRDlFMDJGMjExRDIzMjExQzJGNDkKKzoxMDYyNDAwMDI1MUIwNDMzMEMyMzI1MUMyMzI1MUFEMTBGQzA2MjE4RUIKKzoxMDYyNTAwMERBM0Y4ODgwN0U4N0Q5ODkxMDI2NTQwMDZGOTQxOTFCRjUKKzoxMDYyNjAwMEQ5RDYyQUIxMUMwQTFBMTQwNEFBMEMyQUI1MUMyQUI1QkMKKzoxMDYyNzAwMDFEMkFCNTFBMkFCNTFCRDEwRjFCRDlDRjJBQjExQzBBNkEKKzoxMDYyODAwMDFBMTQwM0FBMEMyQUI1MUMyQUI1MUQyQUI1MUEyQUI1NTgKKzoxMDYyOTAwMDFCRDEwRjAwMUNEOUM5MkJDMTFEMkRDMTFDMkJDNTFCMjcKKzoxMDYyQTAwMDAzREQwQzJEQzUxQzJEQzUxQUQxMEYwMDZDMTAwNjE5NkQKKzoxMDYyQjAwMEQ5QzIxNERBMjYxMkRBMjkxNURBNDRDNzNGQzBFMDJFMTMKKzoxMDYyQzAwMDU2QTgyRTU2QTkyRTU2QUEyRTU2QUIyMzI2MjkxOEQ5RTMKKzoxMDYyRDAwMEVBREIxMDFDREEzRUMwRDQyQTQyNDUyRDE2MDE5QzEwODAKKzoxMDYyRTAwMDAwQjA4OTBBODgwQzI4OTYwMDVCRkY5NDJCMjJFMzE4RTMKKzoxMDYyRjAwMEQ5QjIwQjVCMTQ5Qjg0MkEyMkU0OEI4NEIxQUEwQTVBN0MKKzoxMDYzMDAwMDE0MEJBQTBDOUE4NTI5MjJFNTA5NTkxNDk5ODYyRjIyODMKKzoxMDYzMTAwMENEMEY1RjE0OUY4NzVCRkY0NTVCRkYxNjIzNDYzQkMxOTQKKzoxMDYzMjAwMEIwMUREOUE1MUNEQTAzMkFEMTAyMkM0NjNBMEJBQTAyQzkKKzoxMDYzMzAwMDBBMEE0RjJBRDUwMjU4MDQ3QzVCRkVCRjVCRkU5OEMwNTgKKzoxMDYzNDAwMDUwQzBCMDE2RDk5QjE0RDlBMzE3REExMkMwQzBDNzNFRUIKKzoxMDYzNTAwMDkzMTIyQzI2MkRDMDMwNjAwMDQzMDAwMDAwN0Y5RjBGNTkKKzoxMDYzNjAwMEIxNTUwOTE5MTQ2NTlGRjRDMDUwMEFBOTAyN0ZBN0VGMUYKKzoxMDYzNzAwMDE4RDk4RkRBNTAwODU4MEEyODgyMkMyQjBBMDAwQjgwNzMKKzoxMDYzODAwMDAwMDA1MTA0RDJBMEMwOTFDN0FGMDA5OTFBMEE5OTAzMjYKKzoxMDYzOTAwMDk5MTJDRTMzNjQyMDY3RDMyMDJCMjAwNzk1MTM4QzEyREIKKzoxMDYzQTAwMDJBNjI4MjdDQTg1RjE4RDk4MTA4NTgwQTI4ODIyQ0RBRDAKKzoxMDYzQjAwMDUwMEI4MDAwRDJBMDY0M0ZEQThBMzEwQThBMTQwNEFBMDIKKzoxMDYzQzAwMDAxQzgyOThCMjEwQjhCMTQwNEJCMDE3QkE5NDVEREEwREYKKzoxMDYzRDAwMDdBN0IwODFERDk3OTJERDIwMDBEQUQwQ0RCMzAxOUQ5OEYKKzoxMDYzRTAwMDczMUFEOUI4MjgxMjAzMEFEQTI4MDg4QzAyMUREOUY1QzUKKzoxMDYzRjAwMDA5ODgwQTI4ODIzQzBEQUEwODBCODAwMDY1MkY5N0QzRDQKKzoxMDY0MDAwMDIwQzBCMDYzRkY5N0NCNTNCMTU1MDA1MDA0MEEwOTE5NUYKKzoxMDY0MTAwMDYzRkY0OTAwREFCMDdCN0IwNzFBRDk2NzhBQTAwQUJBMDIKKzoxMDY0MjAwMDBDMUJEOUE4OEMzMTBCQUIyODBDOEExNDFDRDlFNkFDRjgKKzoxMDY0MzAwMEJCMUNEOUU1MDRBQTAxMkJDNjgxNjNGRjkwN0ZBN0M3QzcKKzoxMDY0NDAwMDYzRkY2MjAwNkMxMDA0MjcyMjFFQzA4MDA4RTQzMTFCMjkKKzoxMDY0NTAwMEQ5NTgwMDAyMDAyQUIyODIxOUQ5NTgwMDMxMDRDMDYxMEIKKzoxMDY0NjAwMDAwNjYxQTI5OTEwMjBBNkEwMjJBQjY4MjA5RTQzMTE1RTUKKzoxMDY0NzAwMEQ5QjMwQzM4MTFBODUzMjgzMjgyMjQzMjg0MkE4Q0ZDRDgKKzoxMDY0ODAwMDc4NDExMDI5MjEwMjJBMzY4Mjk3QTAwOTY5MDIyOTI1MUMKKzoxMDY0OTAwMDAyRDEwRjAwMkIyMTAyMkMzMjg1MEI2QjAyMkNDQ0ZDN0QKKzoxMDY0QTAwMDJDMzY4Mjk3QzAyQjI1MDJEMTBGMDAwMDZDMTAwNEMwM0YKKzoxMDY0QjAwMEU3MUREOTNCMUNEOTNEMEQ0OTExRDcyMDhCMjI4QTIwREQKKzoxMDY0QzAwMDBCNEIwQkQyQTAwN0E4MEM5QjcyMjg4Q0Y0QzgzNDZGMUUKKzoxMDY0RDAwMDhFMDI2MDAwQTIxRkQ5MzNBMjk4QUY3Qjc4QjMzNEM5NzMKKzoxMDY0RTAwMDNEQzA4MUMwRjAwMjhGMzgwRjBGNDJDOUZBMkNENjdFMTIKKzoxMDY0RjAwMEQ1MjA2RDRBMDUwMDMwODgwMDUwOEM4ODcwMDg5ODA4QjcKKzoxMDY1MDAwMDc4QjE2Q0QyQTA5ODcwRDEwRkMwRjAwMzhGMzg3RkUwQzMKKzoxMDY1MTAwMERFNjNGRkQ4MDI3QjBDQUZCQjBCOTkwQzY0MzA0NkQ4MEUKKzoxMDY1MjAwMDMwQzBGMUMwNTAwMkY1MzgwNTA1NDI2NDUwNzkyQ0Q2RDAKKzoxMDY1MzAwMDdFMEIzNjEyMkY2QzEwMEY0RjM2NkRGQTA1MDA4MDg4RDcKKzoxMDY1NDAwMDAwMjA4QzA2NDQwQ0MwODEyNTBBMDAwM0IyMDgyMzdDN0QKKzoxMDY1NTAwMDBDMDM4NTM4MDUwNTQyNjQ1MDU5MkNENjdFNkQ0QTA1REEKKzoxMDY1NjAwMDAwMjA4ODAwMzA4Q0QyQTBBNzk4QkM4ODk4NzBEMTBGRUEKKzoxMDY1NzAwMEQyQTBCQzc5OTk3MEQxMEZEMjMwMkJBRDA4QzBGMUMwMzgKKzoxMDY1ODAwMDUwMEJGNTM4MDUwNTQyQ0I1NTJDRDY3RTA4M0YxNEMxN0IKKzoxMDY1OTAwMDYwMEY2NjBDMDY0NjM2RDMwRjZENkEwNTAwMjA4ODAwMzIKKzoxMDY1QTAwMEIwOEM4MjcwNjNGRjJEMDBDMDUwMDNGNTM4NzVFMDgwMTkKKzoxMDY1QjAwMDYzRkY3QTAwQzA2MDAyODYzODc2RTBBMDYzRkY5QTAwMkQKKzoxMDY1QzAwMEMwNTAwM0Y1Mzg3NUUwQzM2M0ZGQkQwMDZDMTAwNEQ2RkUKKzoxMDY1RDAwMDIwNjg1MjBGNjk1MzI0REEyMERCMzBEQzQwNTgwMEYwODkKKzoxMDY1RTAwMEQyQTBEMTBGREEyMERCMzBEQzQwNTgwMEVEOUEyNDI0MTEKKzoxMDY1RjAwMDI0MEVDMDIxMjI2NDBGQzAyMEQxMEYwMEI4M0JCMDRDNDQKKzoxMDY2MDAwMDJBMkM3NDg5MjQyRDIwMEUyRTIwMEZBNEREQjFFRTJFMEQKKzoxMDY2MTAwMDI0MEZCMEREMkQyNDBFMjg5MDA3MkQ5MDAzQTQ4OEIwMDAKKzoxMDY2MjAwMDg4QjFERDJEOTQwMzI4OTQwNzVCRkZBMDY5NTExREMwM0MKKzoxMDY2MzAwMEUwODIyNDJBNjAwRjE4RDk2NjJBMjQwMzI5NjAwRThGNkQKKzoxMDY2NDAwMDIwMjkyNDA3MDhGRjAyOUYyMDlFNjREMTBGQzAyMEQxN0IKKzoxMDY2NTAwMDBGMDAwMDAwNkMxMDA0OTQyMzE5RDk1RUMwQjMwODNBRUYKKzoxMDY2NjAwMDExMEJBQTAyOTkyMDE5RDhEMjlBMjExNkQ4RDBDMDUwNUQKKzoxMDY2NzAwMDI4OTI5RDI1NjRBMjI4OEMxODI4OTY5REQxMEYwMDAwOTEKKzoxMDY2ODAwMDZDMTAwNDI4MjA2NkMwMzgyMzI0MDZCNzg4MjgyNDY2QTYKKzoxMDY2OTAwMEQxMEYwMDAwNkMxMDA2MDM1QTBDMEQzNjExMEQ1QzExNjEKKzoxMDY2QTAwMEQ4MjA4QjIyODIyMTBDQkIwQzA2NTUwRjlCODIwMjMyMTQKKzoxMDY2QjAwMDBCOTI4MTEzRDhCQ0Q5MjBBMzhGNjQ1MDUzMUNEOEI4MzcKKzoxMDY2QzAwMEMwRDcxQkQ4QjlBMjU2QzBFMTI5MEEwMDA0RTkzODA5OEQKKzoxMDY2RDAwMDA5NDI3NkYzNEEwNDQzMDJDOTlFMkJDNjdFNkRBQTA1ODEKKzoxMDY2RTAwMDAwMjA4ODAwMzA4Qzg5ODFBOTU5MDlGQTBDNjRBMDc5QUUKKzoxMDY2RjAwMDk5ODE4QTgyQzhBREQyOTBEMTBGQzA2MDAyRTYzODc2MDcKKzoxMDY3MDAwMEQwREE2M0ZGRDRDMDIwQkM4OTk5ODE5OTgwOTI4MkQxNkMKKzoxMDY3MTAwMDBGN0YyMzA0MjkyREY4OTk4MTY1QkZEOTYzRkZFNTAwMTgKKzoxMDY3MjAwMDAyOEYwQ0EzRkYwRjMzMTI5MzEwMDNBQTBDRDM0MENCOUMKKzoxMDY3MzAwMDlFMkJDNjdFODYxMDZENkEwNTAwMjA4ODAwMzA4Q0JDQkEKKzoxMDY3NDAwMDgyMjkwQTAwMDRGMzA4MjQwQTAxMDM0OTM4MDkwOTQyOEUKKzoxMDY3NTAwMENBOTgyQkM2N0U2REFBMDUwMDIwODgwMDMwOEMwRjU5ODAKKzoxMDY3NjAwMDBDQTk4OUJDOTk5OTgxNjNGRjg3QkM4OTk5ODE2M0ZGRDIKKzoxMDY3NzAwMDgwQzA2MDAyRTYzODc2RDBCQTYzRkZCNEMwNzAwMjQ3Q0EKKzoxMDY3ODAwMDM4NzdEMEQwNjNGRkNBMDA2QzEwMDQxNEQ4OTVDMTUyN0EKKzoxMDY3OTAwMEE0MjRDQTMwMjgyMjFENzM4MTFCMjkyMTAyQ0Q5NTJBRTkKKzoxMDY3QTAwMDMwMDA3NUE5MTJEQTIwMDMzQjAyMkMzMDA3MkQwQTAyQjMKKzoxMDY3QjAwMDU4MDFDMjY1M0ZEREQxMEYyQjMwMDcwM0JCMEJEQUIwQTgKKzoxMDY3QzAwMDc0QjMwMjJBQkRGOEQzQTA2M0ZGQzYwMDZDMTAwNDI5N0QKKzoxMDY3RDAwMDIwMDZDMDcwNkU5NzQxMjkyMTAyQzA4RjJBMjAxNEMwNjQKKzoxMDY3RTAwMEI2MkIyNDA2MDZBQTAyMkEyNDE0Nzk4MDAyMjcyNTAyNDEKKzoxMDY3RjAwMDJBMjIxRTJDMjIxRDdBQzEwRUM4QUJEQTIwREIzMDJDRDcKKzoxMDY4MDAwMDBBMDAwMzNEMDI1QkY4MTQ2NDUwNzUyRDIxMDIwRDBENDIKKzoxMDY4MTAwMDRDQzlEM0MwMjBEMTBGMDAwMDJFOUNGQjY0RTA4MjJGMTYKKzoxMDY4MjAwMDIxMDIwRjBGNEM2NUYwOTExQUQ4NjIxQ0Q4NjAyOUEyODIKKzoxMDY4MzAwMDlFQzA4QTc5OEI1RDJCQzIyNjY4QjAwNDhEMjA3QkQ5REYKKzoxMDY4NDAwMDUyMjlBMjlEQzBGMzY0OTA0QTk3OTAxREQ4NzMyRTIxQkYKKzoxMDY4NTAwMDA0OUQ5NjA4RUUxMTBGRUUwMjlFOTc5RTkxMThEODZGMzgKKzoxMDY4NjAwMEMwRTUyN0M0QTIyRTI0MDYyQkEyOUQyRjIxMDIyQkJDRkIKKzoxMDY4NzAwMDMwMDhGRjAyMkYyNTAyMkJBNjlEQzAyMEQxMEYwMDAwNUIKKzoxMDY4ODAwMDAwMkYzMDAwNjhGOTM4REEyMERCMzBEQzQwNTgwMDQ0NTMKKzoxMDY4OTAwMDYzRkY3NzAwMDIyQTAyMkIwQTA2NTgwMEQzMjIwQTAwNUYKKzoxMDY4QTAwMEQxMEY2NTUwMTAyODMwMDA2ODg5MjQwMjJBMDIwMzNCNkEKKzoxMDY4QjAwMDAyREM0MDU4MDAzQkMwMjBEMTBGRDI3MEQxMEYwMDAwNDUKKzoxMDY4QzAwMDJBMkM3NDAzM0IwMjA0NEMwMjVCRkVGODYzRkYzQjAwN0UKKzoxMDY4RDAwMERCMzBEQzQwMkEyQzc0NUJGRUY1QzAyMEQxMEYwMDAwQjkKKzoxMDY4RTAwMDZDMTAwNEM4M0Y4OTI2ODgyOUEzOTk5OTI2MDk4ODBDMjkKKzoxMDY4RjAwMDA4MDg0ODI4MjUyNUNDNTJDMDIwRDEwRkRCNDAyQTJDN0YKKzoxMDY5MDAwMDc0NUJGOTNERDJBMEQxMEY2QzEwMDREODIwRDczMDgyMkYKKzoxMDY5MTAwMDIyMEQ0NTExMDUyMjBDOTI4MjY0MjA3NDA3NDIwQjEzNEMKKzoxMDY5MjAwMEQ4MjFENDIwQTM4MzczMjMwMjI0MkRGODg1ODA3NDUxQTkKKzoxMDY5MzAwMDRDQkM4MkMwOTA2RDA4MTYwMDQwODgwMDcwOEM3NzM5N0UKKzoxMDY5NDAwMDAzRDcyMEMwOTE4NjgwNzQzOTAxRDQyMDc0NjEwMjYzMUEKKzoxMDY5NTAwMEZGRTJDQTk4QzA5N0MwNDExQkQ4QTBDMEEwMEI4QjBDMDcKKzoxMDY5NjAwMDBCNEEzODBBMEE0MkM5QUExREQ4MEUxQ0Q4MEYyQ0Q2QzkKKzoxMDY5NzAwMDdFQzE0MEQzMEY2RDRBMDUwMDIwODgwMDMwOEM5NzgwN0YKKzoxMDY5ODAwMEQyNzBEMTBGQkM4RkMwRTAwRjRFMzg3RTkwRTI2M0ZGMTMKKzoxMDY5OTAwMEQ2QkM4MjkyODE5MjgwQzAyMDkyODJEMTBGMDAwMDAwRUEKKzoxMDY5QTAwMDZDMTAwNkMwRDcxQ0Q3RkUxQkQ4MDAwRDQ5MTFENzIwOEMKKzoxMDY5QjAwMDJFMjIxRjI4MjIxRDBFNEUwQkQyODAwNzhBMEMyRTc2MDcKKzoxMDY5QzAwMDFGMkFBQzgwQzgzNDZGQUUwMjYwMDBDQjJGMEE4MDFBMzkKKzoxMDY5RDAwMEQ4MDRBMjlFQUE3QTdFQTMzRkM5M0ZDMEUxQzA1MDAyNUMKKzoxMDY5RTAwMEU1MzgwNTA1NDJDQTU1MkJDNjdFREIyMEQzMEY2RDRBMUMKKzoxMDY5RjAwMDA1MDAzMDg4MDBCMDhDMkU3MjFEQUU5RTBFQTUwQzY0NzIKKzoxMDZBMDAwMDUwODZEMjgwMkU3NjFEQzA5MTI5ODQwM0QxMEZDMDUwQUMKKzoxMDZBMTAwMDAzRTUzODc1RDBEMzYzRkZDRDE1RDdGMTAyN0UwQ0E1MDEKKzoxMDZBMjAwMEVFNjQzMDUxQzBBMTI1MEEwMDAyQTUzODAzM0EwMjA1RTAKKzoxMDZBMzAwMDA1NDI2NDUwOTIyQkM2N0UwRTM1MTI5NTEwMjU1QzEwQ0YKKzoxMDZBNDAwMDA1NDUzNkQzMEY2RDVBMDUwMEEwODgwMDIwOENDMEExRTMKKzoxMDZBNTAwMEEzRTJDMDUwMjNGQTgwMDM3MzBDMDNBNTM4QUY3MzA1N0IKKzoxMDZBNjAwMDA1NDI2NDUwNzIyQkM2N0U4NTEwMDU0NTBDNkQ1QTA1OTMKKzoxMDZBNzAwMDAwMjA4ODAwMzA4Q0QyODBDMEExMEU5QjBDQUI3QkFGNzUKKzoxMDZBODAwMEJCMkI3NjFEMkE4NDAzRDEwRkQyODBDMEMxQUY3RDJERDAKKzoxMDZBOTAwMDc2MUQyQzg0MDNEMTBGMDBEMjMwMkU4RDA4QzBGMUMwOUEKKzoxMDZBQTAwMDUwMEVGNTM4MDUwNTQyQ0I1OTJCQzY3RTBBM0YxNEMxNUUKKzoxMDZBQjAwMDYwMEY2NjBDMDY0NjM2RDMwRjZENkEwNTAwMjA4ODAwMEQKKzoxMDZBQzAwMEUwOEMyMjcyMUQ2M0ZGMDNDMDYxQzA1MDAzNjUzODc1RkUKKzoxMDZBRDAwMEQ4MDI2M0ZGNjI2M0ZGNUNDMDUwMDJBNTM4NzVEMDg3OUYKKzoxMDZBRTAwMDYzRkY4MTAwQzA2MDAzRjYzODc2RDBCRjYzRkZCOTAwNTIKKzoxMDZBRjAwMDZDMTAwNDJBMjAxNTI5MjAxNjE0RDdBRjBBOTkwQ0NCNDQKKzoxMDZCMDAwMDlEMkUyMDBCMDRFRDA5MkJEMTFDOEYyODA5QkMzNkFDMUYKKzoxMDZCMTAwMEFBMENCQjBDMkJENTFDMEEwQTQ3MkEyNDE1Q0FBRjhCMUEKKzoxMDZCMjAwMDQzODk0MkIwQTgwMDkxMDQwMDg4MUFBOEZGMEZCQjAyNTUKKzoxMDZCMzAwMDlCMjc4RjI2MEZCODBDNzgzQjFBQzAyMEQxMEYwMDAwN0UKKzoxMDZCNDAwMDI5MjEwMkMwQTIwQTk5MDIyOTI1MDJDMDIxRDEwRjAwRTEKKzoxMDZCNTAwMDhCMjc2M0ZGREMyQkQxMUMwQ0FBMEMwQTBBNDcyQTI0QzIKKzoxMDZCNjAwMDE1QUNCQjJCRDUxQ0M5QUU4QjQzOEMyODhGNDJCMEFENjYKKzoxMDZCNzAwMDAwRjEwNDAwREQxQUFEQ0MwQ0JCMDI5QjI3REEyMEI3NzQKKzoxMDZCODAwMEVCNTgwMDE5QzAyMUQxMEY5RjI3NjNGRkVGMDAwMDAwRDEKKzoxMDZCOTAwMDZDMTAwNDI4MjAzQzY0MzA0NzA1MzA2MDAwMDczRTAxM0IKKzoxMDZCQTAwMDA1M0VCMTU2MDc2NTM5MDU0OTI4Qzc3RkE5MzMwMzA2NTUKKzoxMDZCQjAwMDQxMDc2NjAzQjE2NjA2MDY0MUE2MzM3RTg3MUUyMjIxODEKKzoxMDZCQzAwMDI1MjkxQUZDNzMyQjE1MDIzODBDMDk4MTYwMDAwNjNFM0EKKzoxMDZCRDAwMDAxMDIzRUIxMjQwNjQyMzkwMzIyMEFEMTBGRDIzMEQxM0MKKzoxMDZCRTAwMDBGQzA1MTYzRkZDMDAwMDA2QzEwMDQyNzIyMUVDMDgwM0MKKzoxMDZCRjAwMDA4RTQzMTFERDc2RjAwMDIwMDJDRDI4MjFCRDc2RjAwMzIKKzoxMDZDMDAwMDMxMDRDMDYxMDA2NjFBMkJCMTAyMEM2QzAyMkNENjgyRDIKKzoxMDZDMTAwMDBCRTQzMTE5RDdGMjBDM0ExMUFBOTMyODMyODI5NzgwRUIKKzoxMDZDMjAwMDI1MzI4MjI0MzI4NEI0NTUyNTM2ODI3NTQxMEEyOTIxQzEKKzoxMDZDMzAwMDAyMDk2OTAyMjkyNTAyRDEwRjJBMjEwMjJCMzI4MzBBNzcKKzoxMDZDNDAwMDZBMDIyQjM2ODIyQTI1MDJEMTBGMDAwMDZDMTAwNDE5MkIKKzoxMDZDNTAwMEQ3NjMyNzIyMUVDMDgwMDk3NzAyMDhFNDMxMURENzU0NkMKKzoxMDZDNjAwMDAwMDIwMDJDRDI4MjFCRDc1NDAwMzEwNEMwNjEwMDY2QTAKKzoxMDZDNzAwMDFBMkJCMTAyMEM2QzAyMkNENjgyMEJFNDMxMTlEN0Q3MzcKKzoxMDZDODAwMDBDM0ExMUFBOTMyODMyODI5NzgwMjUzMjgyMjQzMjg0Q0EKKzoxMDZDOTAwMEI0NTUyNTM2ODI3NTQxMEIyQTIxMDIwQTZBMDIyQTI1M0IKKzoxMDZDQTAwMDAyRDEwRjAwMkIyMTAyMkMzMjgzMEI2QjAyMkMzNjgyNzcKKzoxMDZDQjAwMDJCMjUwMkQxMEYwMDAwMDA2QzEwMDQxQkQ3M0QwQzJBQkQKKzoxMDZDQzAwMDExQUJBQTI5QTI4NkI0Mzg3OThCMjIxQkQ3M0ExOUQ3REYKKzoxMDZDRDAwMDYxMEIyQjBBMkJCMkEzMDkyOTA4NjhCMDAyNzRCOTBEMDUKKzoxMDZDRTAwMDI5OUQwMTI5OTAxRjZFOTIwODIyQTI4NUQxMEZDMDIwRjQKKzoxMDZDRjAwMEQxMEZDODkyQzAyMEQxMEZEQTIwNUJFRjM1QzAyMEQxNzAKKzoxMDZEMDAwMDBGMDAwMDAwNkMxMDA0MTRENzJBMjg0MjlFMTlENzI3QzAKKzoxMDZEMTAwMDZGODgwMjYwMDBCQTI5OTIyNjY4OTAwNzhBMjAwOUFBMjMKKzoxMDZEMjAwMDBDNjVBMEFDMkE0MjlEQzBEQzY0QTBBNDJCMjAwQzE5RTkKKzoxMDZEMzAwMEQ3MjEwQ0JDMTFBNENDMkVDMjg2MDlCOTBBN0VEMzAyN0QKKzoxMDZENDAwMDYwMDA5QTI5OTJBMzY4OTAwNzhEMjAwOUREMEM2NUQwMTgKKzoxMDZENTAwMDhDMjVDMjg1NjQ1MDg2MkQyMTA0QzAzMDZFRDgwRDJDNDAKKzoxMDZENjAwMDIwNjZCOENDMEMwQzQ3MkMyNDY2NjVDMDdCMUNENzlDRDUKKzoxMDZENzAwMDE4RDcyODFBRDcxRTE5RDcyRjFERDcyNEMwRTQ5RTUxMjMKKzoxMDZEODAwMDlENTA4RjIwOTM1NzkzNTU5OTUzOUE1NjlBNTQwOEZGQzQKKzoxMDZEOTAwMDAyMUFENzNBOUY1Mjg4MjY5RjVBOUU1OTlENTg5MzVFNTEKKzoxMDZEQTAwMDlDNUQ5MzVDOUE1QjA4MDg0ODA1ODgxMTk4NUZDMEQ4ODEKKzoxMDZEQjAwMDFGRDcwODBDQjkxMUE0OTkyODkyODVBRkJGMjNGNENGMkYKKzoxMDZEQzAwMDI4OEM0MDI4OTY4NThFMjYyRDI0MDY5RTI5QzAyMEQxMDkKKzoxMDZERDAwMDBGQ0EzM0RBMjBDMEI2NUJGRjg0QzcyRkQxMEZDOTNBODAKKzoxMDZERTAwMERBMjA1QkZGODFDNzJGRDEwRkRCRDA1QkZFMUEyMzI0OTMKKzoxMDZERjAwMDY2MkIyMDBDNjNGRjc1MDBDNzJGRDEwRkM3MkZEMTBGNTMKKzoxMDZFMDAwMDZDMTAwNEM4NUIyOTIwMDY2ODk0MUM2ODk2MDdDMDIwOTMKKzoxMDZFMTAwMEQxMEZDMDIwRDEwRkRBMjBEQjMwREM0MERENTAyRTBBNEMKKzoxMDZFMjAwMDAwNUJGRTZBRDJBMEQxMEYyRTIwMEMxOEQ2RTEwQ0VGMjkKKzoxMDZFMzAwMDExQThGRjI5RjI4NkMwODg3OThCNzUxQUQ2REUwQUVBNzYKKzoxMDZFNDAwMDBBMkFBMkEzNjhBMDA0OEIyMDdBQjk2NDIzRjI4NTY0N0QKKzoxMDZFNTAwMDMwNUUxQ0Q2RTgyQTBBODAyRDIwNjgyOTIwNjcyODIxNjgKKzoxMDZFNjAwMDA0MEI5OTExMDQ4ODExMDk4ODAyMDhERDAyQzA5NDI4RDYKKzoxMDZFNzAwMDRBMTAwOEREMDIxOEQ2RTA5OTMxOTgzMDhCMkI5QTM3RUEKKzoxMDZFODAwMDlEMzQwQ0JCMDI5QjMyQzBDMDlDMzU5QzM2MkEyQzc0QUUKKzoxMDZFOTAwMERCNDBDMEQzMThENkNGMjlGMjg1QThFRTI5OUMyMDJDNDAKKzoxMDZFQTAwMEU0Q0YyOUY2ODUyRDI0MDZERDQwNUJGREZBRDJBMEQxODIKKzoxMDZFQjAwMDBGREEyMERCRTA1QkZGNENDMDIwRDEwRjZDMTAwQUQ2NEMKKzoxMDZFQzAwMDMwMkEyMDA2OTQxMTI4QUNGODY1ODM4NzJCMjEyMkMwMzQKKzoxMDZFRDAwMEYyMkEyMTI0NjU1MDA4MkFBQzAxMEEwQTRGMkEyNTI0RTcKKzoxMDZFRTAwMDdBQkIwMjYwMDM3RjJDMjEwMjBDMEM0QzY1QzMxOTJFNjcKKzoxMDZFRjAwMDIyMTU4RDMyQzA5MTBFREQwQzY1RDM5MDg4MzgxRUQ2RDgKKzoxMDZGMDAwMEFDNjQ4MzZCOEMzN0MwQjhDMDk2MENCOTM5OTkxNEI0OTMKKzoxMDZGMTAwMDlBOUExMjBEOTkxMTk5MTM4RjY3MThENkE3QzlGQjI4NTEKKzoxMDZGMjAwMDgwMjE3RjgzMTY4QjE0MkMyMjAwMkEyMDBDNUJGRjYyQTkKKzoxMDZGMzAwMEQ0QTA2NEEzQTg4RjY3NjAwMDI4MDAwMDJCMjAwQzg5RDAKKzoxMDZGNDAwMDEyMENCQTExQUVBQTJDQTI4NjFERDY5QTdDOUIzRTBEQkQKKzoxMDZGNTAwMEJEMEEyREQyQTM2OEQwMDQ4ODIwN0Q4OTMwMjRBMjg1NjMKKzoxMDZGNjAwMDY0NDM2NDI3MjEyRTA3RjczNjA3RjkwQzZGOUQwMUQ3N0MKKzoxMDZGNzAwMEYwREEyMERCNzBDMUM0MkQyMTFGNUJGRjA1ODkyNjg4NTQKKzoxMDZGODAwMDI3RERBMDA5ODgwQzdBOEIxNzlBMTA2MDAwMDZDMDQwOTQKKzoxMDZGOTAwMDYzRkZDQzAwMDBEQTIwOEIxMDVCRkVENThEMTA2NUEyNUMKKzoxMDZGQTAwMDY3QzBFMDlFNDg4QzY0OUM0OThCNjU4QTY2OUI0QTlBQzAKKzoxMDZGQjAwMDRCOTc0NThGNjc3RjczMDI2MDAxMjBDRDUyOUQxMERBOTkKKzoxMDZGQzAwMDIwREIzMDJDMTIwMTVCRkU3NjhEMTBDMDUxRDZBMDhGRDUKKzoxMDZGRDAwMEE3QzBDMDhBNjg5NzREOUE0Qzg4Njk4OTZBOTg0RTk5NkIKKzoxMDZGRTAwMDRGOEU2QThBNjlBRTdFNzdFQjAxQjFBQTlFNkE5QTY5NzIKKzoxMDZGRjAwMDhCNjBDMEEwMEI4RTE0NzdCNzAxQzBBMUMwOTFDMDg0NzQKKzoxMDcwMDAwMDkzMTU5RDE3OTUxNkMwRDAyNTIwM0NDMDMwMDg1ODAxMTcKKzoxMDcwMTAwMDA4OTMzOEMwODIwODMzMTAwODVCMDEwNTM1NDAwQjlEOEEKKzoxMDcwMjAwMDM4MDdERDEwMEJBQjEwMEUxOTQwMkEyMTFGMDc5OTEwRUQKKzoxMDcwMzAwMDAzREQwMjBEQkIwMjA1NTMxMDA5MzMwMjBBNTUxMTI5NjUKKzoxMDcwNDAwMDIxMjUwQTJBMTQwOTI5MTQwNDk5MTEwQTk5MDIwOTMzREQKKzoxMDcwNTAwMDAyOEEyQjI5MjEwNDBCQUEwMjFCRDZFMjA4OTkxMTA5RTYKKzoxMDcwNjAwMDU1MDIwODU1MDIwQkFBMDI5QTQwODkyMDg4MTQwODk5RjMKKzoxMDcwNzAwMDExMDk4ODAyMTlENjYzMURENkRDMDk4ODAyOTg0MThCNTQKKzoxMDcwODAwMDJBOTM0Njk1NDc4MzE1MERCQjAyODUxNjhEMTc5QjQ0QTEKKzoxMDcwOTAwMDhBNjU4OTY2QUFDQUE5N0M3N0NCMDFCMUFBMDdGQjBDQ0QKKzoxMDcwQTAwMDlDNjY5QTY1ODgyNjhFMjlBRDg3OTcyNjA3RUUwQzBFN0EKKzoxMDcwQjAwMDBFNDgyRTI1MjU5QjY3MkIyMDBDODcxMzFFRDYzRDBDRDIKKzoxMDcwQzAwMEI5MTFBRTk5Mjg5Mjg1QTc4ODI4OTY4NTE3RDY0MUMwMTAKKzoxMDcwRDAwMDkwQTdCQjI5QjRDRjg3MTg2M0ZFM0MwMDhDNjBDMEUwNEEKKzoxMDcwRTAwMEMwOTFDMEYwQzAzNEMwQjgyQTIxMDQyODIwM0MwOEFBQUUKKzoxMDcwRjAwMDExMEI4QjAxMDM4MzAxMDM5RjM4MEI5QjM5QzAzMjA4QUUKKzoxMDcxMDAwMEZGMTAwMzg4MDEwODlFMzgwQzg4MTQwN0VFMTAwRkVFNUMKKzoxMDcxMTAwMDAyMDM4ODAxMDg5ODM5MDVCRjEwMjkyMTFGMEFCQjExRjUKKzoxMDcxMjAwMDA3ODgxMDA4RkYwMjBCQUEwMjE4RDYzNTA5MjkxNDAzOTQKKzoxMDcxMzAwMEFBMDIyQjIxMjU4MzIwMEIyQjE0MDRCQjExMDgzMzExMjkKKzoxMDcxNDAwMDBGQkIwMjBCOTkwMjhCMTQ4RjJBMEIzMzAyMDgzMzAyRjgKKzoxMDcxNTAwMDhCMkI2NDcwODY4ODY4OTc0RDk4NEM4NzY5ODg2QTkzRjIKKzoxMDcxNjAwMDQxOTk0Njk3NEU5ODRGQzA3MDc3QzcwMUMwNzE5QTQ3QjIKKzoxMDcxNzAwMDE4RDY5RTBCN0MxMDBDRUMwMjA4RjgwMjk4NDQxOEQ2MjYKKzoxMDcxODAwMDlCMENCQzAyMDhDQzAyOUM0MDJBMjAwQzI5NUNGRUMwNEYKKzoxMDcxOTAwMDgwMUZENjA3MUNENjBGMENBRTExMkIyMTI0QUNBQUFGMzIKKzoxMDcxQTAwMEVFQjBCQjhGMTMyQ0UyODUyOEE0Q0ZBRkNDMkNFNjg1QTQKKzoxMDcxQjAwMDJBMjIxNTJCMjUyNEIxQUEyQTI2MTU2NDkwREJDOUQyRDAKKzoxMDcxQzAwMDhGMjYyRTIyMDkwREZGMDgyRjI2MDYwRkVFMEMwRTBFMUQKKzoxMDcxRDAwMDQ4MkUyNTI1NjU1MEU0QzAyMEQxMEYwMEMwNzA5MzQxOTIKKzoxMDcxRTAwMDlGNDQ5OTQ2OUE0Nzc3QzcwQTFDRDVGMzJDQzAyMkMwMDIKKzoxMDcxRjAwMDgxMEM4NzM4MUNENjdGMEI3ODEwMDhFODAyMDhCODAyOEIKKzoxMDcyMDAwMDBDODgwMjk4NDA2M0ZGODAwMENDNTdEQTIwREI2MDhDNEEKKzoxMDcyMTAwMDExNUJGREUzMjkyMTAyNjg5ODA2Njg5NDAzQzAyMEQxMjAKKzoxMDcyMjAwMDBGMkIyMjFFQzBBMDI5MjIxRDJBMjUwMjdCOTkwMUMwRjYKKzoxMDcyMzAwMEIwNjRCRkU4MTNENURFMkNCMDA3MjhCMDAwREEyMDAzMTUKKzoxMDcyNDAwMDg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZFNzYzQzEKKzoxMDcyNTAwMEZGQ0EwMDAwNjhBNzc5REEyMERCMzBEQzQwREQ1MDVCMzQKKzoxMDcyNjAwMEZFRThEMkEwRDEwRkMxNkRDMTlEMjkyNTJDNjAwMDA0N0MKKzoxMDcyNzAwMDI5MjUyQ0Q2OTAyNjI0NjcyRjI0NjhEQTIwREIzMDhDMzEKKzoxMDcyODAwMDExREQ1MDJFMEE4MDVCRkQ1MUQyQTBEMTBGQzE2OEMxMjMKKzoxMDcyOTAwMEE4MkEyNTJDNjNGRkREMDAwMDAwQzhERjhDMjY4QjI5N0YKKzoxMDcyQTAwMEFEQ0M5QzI2MENCQjBDMEIwQjQ4MkIyNTI1MkEyQzc0MzMKKzoxMDcyQjAwMERCNjAyQzEyMDE1QkZEOTREMkEwRDEwRjJBMkM3NDhCQzEKKzoxMDcyQzAwMDExNUJGNkNERDJBMEQxMEZEQTIwNUJGRTQ3NjNGRjM4MDkKKzoxMDcyRDAwMDAwREEyMEMwQjE1QkZFOEI2NUFGMkQ2M0ZCRUREQTIwRDkKKzoxMDcyRTAwMDJCMjAwQzVCRkU1QTYzRkYxRjAwMDAwMDEyRDY0MjgyNjcKKzoxMDcyRjAwMDIwMDI4MjU3QzgyMTYzRkZGQzEyRDYzRTAzRTgzMDA0MDcKKzoxMDczMDAwMEVFMzAwNUIxMzA5MzIwOTQyMTk1MjI2M0ZGRkMwMDAwRkMKKzoxMDczMTAwMDEwRDYzQTkxMDA5MjAxOTMwMjk0MDMxMUQ2MTE4MjEwNzMKKzoxMDczMjAwMDAxRUEzMEEyMTEwMUYwMzFDMDQwMDRFNDE2MDAwMjAwNkQKKzoxMDczMzAwMDExRDYzMzgyMTAyMzRBMDAwMzIyMDI5MjEwMTFENUZEODgKKzoxMDczNDAwMEMwMjE5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDAwOTEKKzoxMDczNTAwMEQyMzAwMTIzMDAwMDAwMDAxMEQ2MkE5MTAwOTIwMTkzNDAKKzoxMDczNjAwMDAyOTQwMzExRDYwMDgyMTAwMUVBMzBBMjExMDFGMTMxMUEKKzoxMDczNzAwMEMwNDAwNEU0MTYwMDAyMDAxMUQ2MjE4MjEwMTNENUE3RTQKKzoxMDczODAwMDAzMjIwMjkyMTAwNEU0MzE4NDAzODMwMjgyMDE4MTAwMEIKKzoxMDczOTAwMDAwRDMzMDAxMzMwMDAwMDAxMEQ2MUI5MTAwODEwMTY1M0QKKzoxMDczQTAwMDEwNDk4MTAyNjUxMDQ0ODEwM0NGMUY5MjAxOTMwMjk0MUEKKzoxMDczQjAwMDAzMTFENUVFODIxMDAxRUEzMEEyMTEwMUYyMzFDMDQwNzIKKzoxMDczQzAwMDA0RTQxNjAwMDIwMDExRDYwRDgyMTAxM0Q1OEUwMzIyOUMKKzoxMDczRDAwMDAyOTIxMDA0RTQzMTg0MDM4MzAyODIwMUMwMTA5MTAzRkQKKzoxMDczRTAwMDkxMDI5MTAxODEwMDAwRDQzMDAxNDMwMDEyRDVCREMwNEIKKzoxMDczRjAwMDMwMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDMjMzRDAxNjgKKzoxMDc0MDAwMDcyMzNFRDAzMDIwMDYzRkZGQzAwMDAwMDEwRDVGRjkxMTIKKzoxMDc0MTAwMDAwOTIwMTkzMDI5NDAzMTFENUZEODIxMDkyMTAxMUQ1QjAKKzoxMDc0MjAwMEFGODMxMDAzMjIwMjkyMTAxMUQ1RkExMkQ1QzE5MjEwMjcKKzoxMDc0MzAwMEMwNDAwNEU0MTYwMDAyMDAxMUQ1RjE4MjEwMTNENUE4NTMKKzoxMDc0NDAwMDAzMjIwMjkyMTAwNEU0MzE4NDAzODMwMjgyMDE4MTAwNEEKKzoxMDc0NTAwMDAwRDUzMDAxNTMwMDAwMDA2QzEwMDI2RTMyMkZENjIwOTAKKzoxMDc0NjAwMDA1NkYwNDA0M0YwNDc0NUIyQTA1NDQwQzAwNDEwNDAwQ0EKKzoxMDc0NzAwMDMzMUEyMjBBMDA2RDQ5MEQ3MzYzMDQwMzY2MENCMTIyQUUKKzoxMDc0ODAwMDBGMjIxMTAzMTMxNDczNjMwMjIyMkMwMUQxMEZDODNCODYKKzoxMDc0OTAwMEQxMEYwMDAwNzM2MzBDQzAyMUQxMEYwMDAwMDAwMDAwNjkKKzoxMDc0QTAwMDQ0NDk1NjMwQzAyMEQxMEY2QzEwMDIwMDQwMDQ2QjRDOTAKKzoxMDc0QjAwMDA3MDMyMzE4MDIwMjE5RDEwRjAyMDMxOUMwMjBEMTBGQUMKKzoxMDc0QzAwMDZDMTAwMjAyRUEzMEQxMEY2QzEwMDJDQzI1MDNGMDMxQUYKKzoxMDc0RDAwMDYwMDAwRjAwNkYyMjA1MDNGMTMxNjAwMDA1NkYyMzA1ODYKKzoxMDc0RTAwMDAzRjIzMTAwMDIwMEQxMEY2QzEwMDJDQzI1MDJGMDMwMDMKKzoxMDc0RjAwMEQxMEYwMDAwNkYyMjA0MDJGMTMwRDEwRjZGMjMwNDAyN0MKKzoxMDc1MDAwMEYyMzBEMTBGQzAyMEQxMEY2QzEwMDIyMjBBMjAyMzBBQzIKKzoxMDc1MTAwMDAwNkQyODBFMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDMzQKKzoxMDc1MjAwMDIzM0QwMTAzMDIwMEQxMEY2QzEwMDIwMkU0MzFEMTBGQTAKKzoxMDc1MzAwMDBBMDAwMDAwNDM2ODY1NkM3MzY5NkYyMDQ2NTcyMDQ0NTkKKzoxMDc1NDAwMDQ1NDI1NTQ3M0QzMDIwMjg0Mjc1Njk2Qzc0MjA1NzY1ODcKKzoxMDc1NTAwMDY0MjA0RjYzNzQyMDIwMzgyMDMxMzUzQTM1MzAzQTM1NzUKKzoxMDc1NjAwMDMwMjA1MDQ0NTQyMDMyMzAzMDM4MjA2RjZFMjA2MzZDMEQKKzoxMDc1NzAwMDY1NkY3MDYxNzQ3MjYxM0EyRjY4NkY2RDY1MkY2NjY1MTMKKzoxMDc1ODAwMDZDNjk3ODJGNzcyRjY2Nzc1RjM3MkUzMDI5MkMyMDU2M0QKKzoxMDc1OTAwMDY1NzI3MzY5NkY2RTIwNTQzMzc4NzgyMDMwMzAzNzJFREYKKzoxMDc1QTAwMDMwMzEyRTMwMzAyMDJEMjAzMTMwMzAzNzMwMzEzMDMwRjYKKzowODc1QjAwMDEwMDcwMTAwNkY0RUY4QkI0QgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3RlaHV0aS9iZHguYmluLmloZXggYi9maXJtd2FyZS90ZWh1dGkvYmR4LmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjllNGMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS90ZWh1dGkvYmR4LmJpbi5paGV4CkBAIC0wLDAgKzEsMjY3OCBAQAorOjEwMDAwMDAwMDIwMDBGMDAwMDgwNzE0MDJEMDAwMDAwMDAwMDAwQzBDMQorOjEwMDAxMDAwMDIwMDBGMDAwMTgwNzEwMDJEMDAwMDAwMDAwMDgwQzA3MAorOjEwMDAyMDAwMDIwMDBGMDAwMjgwNzEwMDJEMDAwMDAwMDAwMDAwQzFERQorOjEwMDAzMDAwMDIwMDBGMDAwMzgwNzEwMDJEMDAwMDAwMDAwMDgwQzE0RAorOjEwMDA0MDAwMDIwMDBGMDAwNDgwNzEwMDJEMDAwMDAwMDAwMDAwQzJCQgorOjEwMDA1MDAwMDIwMDBGMDAwNTgwNzEwMDJEMDAwMDAwMDAwMDgwQzIyQQorOjEwMDA2MDAwMDIwMDBGMDAwNjgwNzEwMDJEMDAwMDAwMDAwMDAwQzM5OAorOjEwMDA3MDAwMDIwMDBGMDAwNzgwNzEwMDJEMDAwMDAwMDAwMDgwQzMwNworOjEwMDA4MDAwMDIwMDBGMDAwODgwNzEwMDJEMDAwMDAwMDAwMDAwQzQ3NQorOjEwMDA5MDAwMDIwMDBGMDAwOTgwNzEwMDJEMDAwMDAwMDAwMDgwQzRFNAorOjEwMDBBMDAwMDIwMDBGMDAwQTgwNzEwMDJEMDAwMDAwMDAwMDAwQzU1MgorOjEwMDBCMDAwMDIwMDBGMDAwQjgwNzEwMDJEMDAwMDAwMDAwMDgwQzVDMQorOjEwMDBDMDAwMDIwMDBGMDAwQzgwNzEwMDJEMDAwMDAwMDAwMDAwQzYyRgorOjEwMDBEMDAwMDIwMDBGMDAwRDgwNzEwMDJEMDAwMDAwMDAwMDgwQzY5RQorOjEwMDBFMDAwMDIwMDBGMDAwRTgwNzEwMDJEMDAwMDAwMDAwMDAwQzcwQworOjEwMDBGMDAwMDIwMDBGMDAwRjgwNzEwMDJEMDAwMDAwMDAwMDgwQzc3QgorOjEwMDEwMDAwMDIwMDBGMDAxMDgwNzEwMDJEMDAwMDAwMDAwMDAwQzhFOAorOjEwMDExMDAwMDIwMDBGMDAxMTgwNzEwMDJEMDAwMDAwMDAwMDgwQzg1NworOjEwMDEyMDAwMDIwMDBGMDAxMjgwNzEwMDJEMDAwMDAwMDAwMDAwQzlDNQorOjEwMDEzMDAwMDIwMDBGMDAxMzgwNzEwMDJEMDAwMDAwMDAwMDgwQzkzNAorOjEwMDE0MDAwMDIwMDBGMDAxNDgwNzEwMDJEMDAwMDAwMDAwMDAwQ0FBMgorOjEwMDE1MDAwMDIwMDBGMDAxNTgwNzEwMDJEMDAwMDAwMDAwMDgwQ0ExMQorOjEwMDE2MDAwMDIwMDBGMDAxNjgwNzEwMDJEMDAwMDAwMDAwMDAwQ0I3RgorOjEwMDE3MDAwMDIwMDBGMDAxNzgwNzEwMDJEMDAwMDAwMDAwMDgwQ0JFRQorOjEwMDE4MDAwMDIwMDBGMDAxODgwNzEwMDJEMDAwMDAwMDAwMDAwQ0M1QworOjEwMDE5MDAwMDIwMDBGMDAxOTgwNzEwMDJEMDAwMDAwMDAwMDgwQ0NDQgorOjEwMDFBMDAwMDIwMDBGMDAxQTgwNzEwMDJEMDAwMDAwMDAwMDAwQ0QzOQorOjEwMDFCMDAwMDIwMDBGMDAxQjgwNzEwMDJEMDAwMDAwMDAwMDgwQ0RBOAorOjEwMDFDMDAwMDIwMDBGMDAxQzgwNzEwMDJEMDAwMDAwMDAwMDAwQ0UxNgorOjEwMDFEMDAwMDIwMDBGMDAxRDgwNzEwMDJEMDAwMDAwMDAwMDgwQ0U4NQorOjEwMDFFMDAwMDIwMDBGMDAxRTgwNzEwMDJEMDAwMDAwMDAwMDAwQ0ZGMworOjEwMDFGMDAwMDIwMDBGMDAxRjgwNzEwMDJEMDAwMDAwMDAwMDgwQ0Y2MgorOjEwMDIwMDAwMDIwMDBGMDAyMDgwNzEwMDJEMDAwMDAwMDAwMDAwRDBDRgorOjEwMDIxMDAwMDIwMDBGMDAyMTgwNzEwMDJEMDAwMDAwMDAwMDgwRDAzRQorOjEwMDIyMDAwMDIwMDBGMDAyMjgwNzEwMDJEMDAwMDAwMDAwMDAwRDFBQworOjEwMDIzMDAwMDIwMDBGMDAyMzgwNzEwMDJEMDAwMDAwMDAwMDgwRDExQgorOjEwMDI0MDAwMDIwMDBGMDAyNDgwNzEwMDJEMDAwMDAwMDAwMDAwRDI4OQorOjEwMDI1MDAwMDIwMDBGMDAyNTgwNzEwMDJEMDAwMDAwMDAwMDgwRDJGOAorOjEwMDI2MDAwMDIwMDBGMDAyNjgwNzEwMDJEMDAwMDAwMDAwMDAwRDM2NgorOjEwMDI3MDAwMDIwMDBGMDAyNzgwNzEwMDJEMDAwMDAwMDAwMDgwRDNENQorOjEwMDI4MDAwMDIwMDBGMDAyODgwNzEwMDJEMDAwMDAwMDAwMDAwRDQ0MworOjEwMDI5MDAwMDIwMDBGMDAyOTgwNzEwMDJEMDAwMDAwMDAwMDgwRDRCMgorOjEwMDJBMDAwMDIwMDBGMDAyQTgwNzEwMDJEMDAwMDAwMDAwMDAwRDUyMAorOjEwMDJCMDAwMDIwMDBGMDAyQjgwNzEwMDJEMDAwMDAwMDAwMDgwRDU4RgorOjEwMDJDMDAwMDIwMDBGMDAyQzgwNzEwMDJEMDAwMDAwMDAwMDAwRDZGRAorOjEwMDJEMDAwMDIwMDBGMDAyRDgwNzEwMDJEMDAwMDAwMDAwMDgwRDY2QworOjEwMDJFMDAwMDIwMDBGMDAyRTgwNzEwMDJEMDAwMDAwMDAwMDAwRDdEQQorOjEwMDJGMDAwMDIwMDBGMDAyRjgwNzEwMDJEMDAwMDAwMDAwMDgwRDc0OQorOjEwMDMwMDAwMDIwMDBGMDAzMDgwNzEwMDJEMDAwMDAwMDAwMDAwRDhCNgorOjEwMDMxMDAwMDIwMDBGMDAzMTgwNzEwMDJEMDAwMDAwMDAwMDgwRDgyNQorOjEwMDMyMDAwMDIwMDBGMDAzMjgwNzEwMDJEMDAwMDAwMDAwMDAwRDk5MworOjEwMDMzMDAwMDIwMDBGMDAzMzgwNzEwMDJEMDAwMDAwMDAwMDgwRDkwMgorOjEwMDM0MDAwMDIwMDBGMDAzNDgwNzEwMDJEMDAwMDAwMDAwMDAwREE3MAorOjEwMDM1MDAwMDIwMDBGMDAzNTgwNzEwMDJEMDAwMDAwMDAwMDgwREFERgorOjEwMDM2MDAwMDIwMDBGMDAzNjgwNzEwMDJEMDAwMDAwMDAwMDAwREI0RAorOjEwMDM3MDAwMDIwMDBGMDAzNzgwNzEwMDJEMDAwMDAwMDAwMDgwREJCQworOjEwMDM4MDAwMDIwMDBGMDAzODgwNzEwMDdCMDAwMDAwMDA4MDYwRERGQgorOjEwMDM5MDAwMDIwMDBGMDAzOTgwNzEwMDJEMDAwMDAwMDAwMDAwREQxOAorOjEwMDNBMDAwMDIwMDBGMDAzQTgwNzEwMDJEMDAwMDAwMDAwMDgwREI4OQorOjEwMDNCMDAwMDIwMDBGMDAzQjgwNzEwMDJEMDAwMDAwMDAwMDAwRERGNgorOjEwMDNDMDAwMDIwMDBGMDAzQzgwNzEwMDJEMDAwMDAwMDAwMDAwRERFNQorOjEwMDNEMDAwMDIwMDBGMDAzRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMDNFMDAwMDIwMDBGMDAzRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDNGMDAwMDIwMDBGMDAzRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMDQwMDAwMDIwMDBGMDA0MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwMDQxMDAwMDIwMDBGMDA0MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDQyMDAwMDIwMDBGMDA0MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDQzMDAwMDIwMDBGMDA0MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDQ0MDAwMDIwMDBGMDA0NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMDQ1MDAwMDIwMDBGMDA0NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMDQ2MDAwMDIwMDBGMDA0NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwMDQ3MDAwMDIwMDBGMDA0NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwMDQ4MDAwMDIwMDBGMDA0ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMDQ5MDAwMDIwMDBGMDA0OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMDRBMDAwMDIwMDBGMDA0QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMDRCMDAwMDIwMDBGMDA0QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDRDMDAwMDIwMDBGMDA0QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMDREMDAwMDIwMDBGMDA0RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDRFMDAwMDIwMDBGMDA0RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMDRGMDAwMDIwMDBGMDA0RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMDUwMDAwMDIwMDBGMDA1MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDUxMDAwMDIwMDBGMDA1MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDUyMDAwMDIwMDBGMDA1MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDUzMDAwMDIwMDBGMDA1MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMDU0MDAwMDIwMDBGMDA1NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMDU1MDAwMDIwMDBGMDA1NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwMDU2MDAwMDIwMDBGMDA1NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwMDU3MDAwMDIwMDBGMDA1NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMDU4MDAwMDIwMDBGMDA1ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMDU5MDAwMDIwMDBGMDA1OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMDVBMDAwMDIwMDBGMDA1QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDVCMDAwMDIwMDBGMDA1QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMDVDMDAwMDIwMDBGMDA1QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDVEMDAwMDIwMDBGMDA1RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMDVFMDAwMDIwMDBGMDA1RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMDVGMDAwMDIwMDBGMDA1RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwMDYwMDAwMDIwMDBGMDA2MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDYxMDAwMDIwMDBGMDA2MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDYyMDAwMDIwMDBGMDA2MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMDYzMDAwMDIwMDBGMDA2MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMDY0MDAwMDIwMDBGMDA2NDgwNzEwMDJEMDAwMDAwMDAwMDAwREIzQworOjEwMDY1MDAwMDIwMDBGMDA2NTgwNzEwMDNGMDAwMDAwMDQwMTAwREQxMgorOjEwMDY2MDAwMDIwMDBGMDA2NjgwNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMDY3MDAwMDIwMDBGMDA2NzgwNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMDY4MDAwMDIwMDBGMDA2ODgwNzEwMDNGMDAwMDAwMDQwODAwREREOAorOjEwMDY5MDAwMDIwMDBGMDA2OTgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDZBMDAwMDIwMDBGMDA2QTgwNzEwMDNGMDAwMDAwMDQzMDAwREQ4RQorOjEwMDZCMDAwMDIwMDBGMDA2QjgwNzEwMDNGMDAwMDAwMDEwMDE4REQ5OAorOjEwMDZDMDAwMDIwMDBGMDA2QzgwNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMDZEMDAwMDIwMDBGMDA2RDgwNzEwMDNGMDAwMDAwMDQwMDAwREQ4QgorOjEwMDZFMDAwMDIwMDBGMDA2RTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMDZGMDAwMDIwMDBGMDA2RjgwNzEwMDNGMDAwMDAwMDQzRDAwREQyQworOjEwMDcwMDAwMDIwMDBGMDA3MDgwNzEwMDNGMDAwMDAwMDEwMDE4REQ0MgorOjEwMDcxMDAwMDIwMDBGMDA3MTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMDcyMDAwMDIwMDBGMDA3MjgwNzEwMDNGMDAwMDAwMDQwNzAwREQyRQorOjEwMDczMDAwMDIwMDBGMDA3MzgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0NworOjEwMDc0MDAwMDIwMDBGMDA3NDgwNzEwMDNGMDAwMDAwODQyODAwREQ2QgorOjEwMDc1MDAwMDIwMDBGMDA3NTgwNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMDc2MDAwMDIwMDBGMDA3NjgwNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMDc3MDAwMDIwMDBGMDA3NzgwNzEwMDNGMDAwMDAwMDQzNzAwRERBOQorOjEwMDc4MDAwMDIwMDBGMDA3ODgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDc5MDAwMDIwMDBGMDA3OTgwNzEwMDNGMDAwMDAwMDQyOTAwREQ5NQorOjEwMDdBMDAwMDIwMDBGMDA3QTgwNzEwMDNGMDAwMDAwMDEwMDE4REQ5OAorOjEwMDdCMDAwMDIwMDBGMDA3QjgwNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMDdDMDAwMDIwMDBGMDA3QzgwNzEwMDNGMDAwMDAwMDRBQTA0RERERAorOjEwMDdEMDAwMDIwMDBGMDA3RDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMDdFMDAwMDIwMDBGMDA3RTgwNzEwMDNGMDAwMDAwMDQyODAwREQ0MQorOjEwMDdGMDAwMDIwMDBGMDA3RjgwNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMDgwMDAwMDIwMDBGMDA4MDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMDgxMDAwMDIwMDBGMDA4MTgwNzEwMDNGMDAwMDAwMDQzMTAwREQwNAorOjEwMDgyMDAwMDIwMDBGMDA4MjgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0NworOjEwMDgzMDAwMDIwMDBGMDA4MzgwNzEwMDNGMDAwMDAwODQyQjAwREQ2OAorOjEwMDg0MDAwMDIwMDBGMDA4NDgwNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMDg1MDAwMDIwMDBGMDA4NTgwNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMDg2MDAwMDIwMDBGMDA4NjgwNzEwMDNGMDAwMDAwMDRFNDAxRERGQgorOjEwMDg3MDAwMDIwMDBGMDA4NzgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDg4MDAwMDIwMDBGMDA4ODgwNzEwMDNGMDAwMDAwODQwMDgwRDdDNAorOjEwMDg5MDAwMDIwMDBGMDA4OTgwNzEwMDNGMDAwMDAwMDEwMDk4RDcxRQorOjEwMDhBMDAwMDIwMDBGMDA4QTgwNzEwMDU5MDAwMDAwRUYzNzgwRDdFNgorOjEwMDhCMDAwMDIwMDBGMDA4QjgwNzEwMDNEMDAwMDAwNkYwMDgwRjc4OAorOjEwMDhDMDAwMDIwMDBGMDA4QzgwNzEwMDNEMDAwMDAwNkYwMDgwRjc3NworOjEwMDhEMDAwMDIwMDBGMDA4RDgwNzEwMDNEMDAwMDAwNkYwMDgwRjc2NgorOjEwMDhFMDAwMDIwMDBGMDA4RTgwNzEwMDJEMDAwMDAwN0YwMkQ2RDcxRAorOjEwMDhGMDAwMDIwMDBGMDA4RjgwNzEwMDE4MDAwMDAwODEwMEZGMTdCOAorOjEwMDkwMDAwMDIwMDBGMDA5MDgwNzEwMDNEMDAwMDAwNkYwMDgwRjczMgorOjEwMDkxMDAwMDIwMDBGMDA5MTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyMQorOjEwMDkyMDAwMDIwMDBGMDA5MjgwNzEwMDJEMDAwMDAwQjgwMEQ4RDc5RgorOjEwMDkzMDAwMDIwMDBGMDA5MzgwNzEwMDE4MDAwMDAwODEwMEVCMTc4NworOjEwMDk0MDAwMDIwMDBGMDA5NDgwNzEwMDNGMDAwMDAwMDQyOTAwRERDOAorOjEwMDk1MDAwMDIwMDBGMDA5NTgwNzEwMDNGMDAwMDAwMDEwMDE4RERDQgorOjEwMDk2MDAwMDIwMDBGMDA5NjgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDk3MDAwMDIwMDBGMDA5NzgwNzEwMDNGMDAwMDAwODRBQTA0REQ5MAorOjEwMDk4MDAwMDIwMDBGMDA5ODgwNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMDk5MDAwMDIwMDBGMDA5OTgwNzEwMDNGMDAwMDAwMDQyQjAwREQ3MQorOjEwMDlBMDAwMDIwMDBGMDA5QTgwNzEwMDNGMDAwMDAwMDEwMDE4REQ3NgorOjEwMDlCMDAwMDIwMDBGMDA5QjgwNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMDlDMDAwMDIwMDBGMDA5QzgwNzEwMDNGMDAwMDAwMDQwMDAwREQ2OQorOjEwMDlEMDAwMDIwMDBGMDA5RDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ3QgorOjEwMDlFMDAwMDIwMDBGMDA5RTgwNzEwMDNGMDAwMDAwODQyOTAwREQ5RQorOjEwMDlGMDAwMDIwMDBGMDA5RjgwNzEwMDNGMDAwMDAwMDEwMDE4REQyMQorOjEwMEEwMDAwMDIwMDBGMDBBMDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0NworOjEwMEExMDAwMDIwMDBGMDBBMTgwNzEwMDNGMDAwMDAwMDQwMDAwREQxMworOjEwMEEyMDAwMDIwMDBGMDBBMjgwNzEwMDY5MDAwMDAwN0EzRDAwREQyNQorOjEwMEEzMDAwMDIwMDBGMDBBMzgwNzEwMDNGMDAwMDAwMDQyQTAwRERDNworOjEwMEE0MDAwMDIwMDBGMDBBNDgwNzEwMDNGMDAwMDAwMDEwMDE4RERDQgorOjEwMEE1MDAwMDIwMDBGMDBBNTgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMEE2MDAwMDIwMDBGMDBBNjgwNzEwMDNGMDAwMDAwODQ5MTAwRERBRAorOjEwMEE3MDAwMDIwMDBGMDBBNzgwNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMEE4MDAwMDIwMDBGMDBBODgwNzEwMDNGMDAwMDAwODQxOTgwRDY4QQorOjEwMEE5MDAwMDIwMDBGMDBBOTgwNzEwMDNGMDAwMDAwMDEwMDgwRDYxNQorOjEwMEFBMDAwMDIwMDBGMDBBQTgwNzEwMDM1MDAwMDAwRUQwMDgwRDYyMgorOjEwMEFCMDAwMDIwMDBGMDBBQjgwNzEwMDE4MDAwMDAwODEwMEZGMzdCQQorOjEwMEFDMDAwMDIwMDBGMDBBQzgwNzEwMDNGMDAwMDAwMDQyQjAwREQyRAorOjEwMEFEMDAwMDIwMDBGMDBBRDgwNzEwMDNGMDAwMDAwMDEwMDE4REQzMgorOjEwMEFFMDAwMDIwMDBGMDBBRTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ1OQorOjEwMEFGMDAwMDIwMDBGMDBBRjgwNzEwMDNGMDAwMDAwMDQwMDAwREQyNQorOjEwMEIwMDAwMDIwMDBGMDBCMDgwNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMEIxMDAwMDIwMDBGMDBCMTgwNzEwMDNGMDAwMDAwODQyQTAwREQ1OAorOjEwMEIyMDAwMDIwMDBGMDBCMjgwNzEwMDNGMDAwMDAwMDEwMDE4REREQworOjEwMEIzMDAwMDIwMDBGMDBCMzgwNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMEI0MDAwMDIwMDBGMDBCNDgwNzEwMDNGMDAwMDAwMDQwMDAwRERDRgorOjEwMEI1MDAwMDIwMDBGMDBCNTgwNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMEI2MDAwMDIwMDBGMDBCNjgwNzEwMDNGMDAwMDAwODQwQzgwRDZBOAorOjEwMEI3MDAwMDIwMDBGMDBCNzgwNzEwMDNGMDAwMDAwMDEwMDgwRDYyNgorOjEwMEI4MDAwMDIwMDBGMDBCODgwNzEwMDM1MDAwMDAwRUQwMDgwRDYzMworOjEwMEI5MDAwMDIwMDBGMDBCOTgwNzEwMDE4MDAwMDAwODEwMEZGMzdDQgorOjEwMEJBMDAwMDIwMDBGMDBCQTgwNzEwMDNGMDAwMDAwODQyQTAwRERCRgorOjEwMEJCMDAwMDIwMDBGMDBCQjgwNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMEJDMDAwMDIwMDBGMDBCQzgwNzEwMDY5MDAwMDAwN0EzRDAwREQ2QQorOjEwMEJEMDAwMDIwMDBGMDBCRDgwNzEwMDNGMDAwMDAwMDQwMDAwREQzNgorOjEwMEJFMDAwMDIwMDBGMDBCRTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0OAorOjEwMEJGMDAwMDIwMDBGMDBCRjgwNzEwMDNGMDAwMDAwODQwRjgwRDYwQworOjEwMEMwMDAwMDIwMDBGMDBDMDgwNzEwMDNGMDAwMDAwMDEwMDgwRDY4QworOjEwMEMxMDAwMDIwMDBGMDBDMTgwNzEwMDM1MDAwMDAwRUQwMDgwRDY5OQorOjEwMEMyMDAwMDIwMDBGMDBDMjgwNzEwMDE4MDAwMDAwODEwMEZGMzczMQorOjEwMEMzMDAwMDIwMDBGMDBDMzgwNzEwMDNGMDAwMDAwMDQyQTAwRERBNQorOjEwMEM0MDAwMDIwMDBGMDBDNDgwNzEwMDNGMDAwMDAwMDEwMDE4RERBOQorOjEwMEM1MDAwMDIwMDBGMDBDNTgwNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMEM2MDAwMDIwMDBGMDBDNjgwNzEwMDNGMDAwMDAwODQxMTAwREQwQgorOjEwMEM3MDAwMDIwMDBGMDBDNzgwNzEwMDY5MDAwMDAwN0EzRDAwRERBRQorOjEwMEM4MDAwMDIwMDBGMDBDODgwNzEwMDNGMDAwMDAwODQyODAwREREMgorOjEwMEM5MDAwMDIwMDBGMDBDOTgwNzEwMDNGMDAwMDAwMDEwMDE4REQ1NAorOjEwMENBMDAwMDIwMDBGMDBDQTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ3QgorOjEwMENCMDAwMDIwMDBGMDBDQjgwNzEwMDNGMDAwMDAwODQzNzAwREQ5MAorOjEwMENDMDAwMDIwMDBGMDBDQzgwNzEwMDY5MDAwMDAwN0EzRDAwREQ1OQorOjEwMENEMDAwMDIwMDBGMDBDRDgwNzEwMDJEMDAwMDAwMDAwMDgwRDNDNQorOjEwMENFMDAwMDIwMDBGMDBDRTgwNzEwMDNGMDAwMDAwODAzNzAwRDI2QworOjEwMENGMDAwMDIwMDBGMDBDRjgwNzEwMDNGMDAwMDAwMDQwNDgwRDE4QgorOjEwMEQwMDAwMDIwMDBGMDBEMDgwNzEwMDNGMDAwMDAwMDEwMDg0RDE3QworOjEwMEQxMDAwMDIwMDBGMDBEMTgwNzEwMDY5MDAwMDAwNzYzQjAwREQwOQorOjEwMEQyMDAwMDIwMDBGMDBEMjgwNzEwMDY5MDAwMDAwNzYzQjAwRERGOAorOjEwMEQzMDAwMDIwMDBGMDBEMzgwNzEwMDY5MDAwMDAwNzYzQjAwRERFNworOjEwMEQ0MDAwMDIwMDBGMDBENDgwNzEwMDNGMDAwMDAwODRGRjdGRDFCQgorOjEwMEQ1MDAwMDIwMDBGMDBENTgwNzEwMDNGMDAwMDAwODFGRjdGRDFBRAorOjEwMEQ2MDAwMDIwMDBGMDBENjgwNzEwMDY5MDAwMDAwNzYzQjAwRERCNAorOjEwMEQ3MDAwMDIwMDBGMDBENzgwNzEwMDY5MDAwMDAwNzYzQjAwRERBMworOjEwMEQ4MDAwMDIwMDBGMDBEODgwNzEwMDY5MDAwMDAwNzYzQjAwREQ5MgorOjEwMEQ5MDAwMDIwMDBGMDBEOTgwNzEwMDY5MDAwMDAwNzYzQjAwREQ4MQorOjEwMERBMDAwMDIwMDBGMDBEQTgwNzEwMDY5MDAwMDAwNzYzQjAwREQ3MAorOjEwMERCMDAwMDIwMDBGMDBEQjgwNzEwMDY5MDAwMDAwNzYzQjAwREQ1RgorOjEwMERDMDAwMDIwMDBGMDBEQzgwNzEwMDNGMDAwMDAwODQwNzgwRDYyNQorOjEwMEREMDAwMDIwMDBGMDBERDgwNzEwMDNGMDAwMDAwMDEwMDgwRDY5RQorOjEwMERFMDAwMDIwMDBGMDBERTgwNzEwMDM1MDAwMDAwRUQwMDgwRDZBQgorOjEwMERGMDAwMDIwMDBGMDBERjgwNzEwMDE4MDAwMDAwODEwMEZGMzc0MworOjEwMEUwMDAwMDIwMDBGMDBFMDgwNzEwMDQ5MDAwMDAwNjMzQjAwREQzQworOjEwMEUxMDAwMDIwMDBGMDBFMTgwNzEwMDU5MDAwMDAwNzYzQjAwREQwOAorOjEwMEUyMDAwMDIwMDBGMDBFMjgwNzEwMDNEMDAwMDAwNkYwMDgwRjdCQgorOjEwMEUzMDAwMDIwMDBGMDBFMzgwNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMEU0MDAwMDIwMDBGMDBFNDgwNzEwMDNEMDAwMDAwNkYwMDgwRjc5OQorOjEwMEU1MDAwMDIwMDBGMDBFNTgwNzEwMDJEMDAwMDAwN0YwMjA2REQxQQorOjEwMEU2MDAwMDIwMDBGMDBFNjgwNzEwMDE4MDAwMDAwN0EzRDdGMUQyRgorOjEwMEU3MDAwMDIwMDBGMDBFNzgwNzEwMDQ1MDAwMDAwMzkzMTAwRERGRAorOjEwMEU4MDAwMDIwMDBGMDBFODgwNzEwMDk0MDAwMDAwM0IzMTBCMDA2RAorOjEwMEU5MDAwMDIwMDBGMDBFOTgwNzEwMDk0MDAwMDAwM0QzMTA5MDA1QworOjEwMEVBMDAwMDIwMDBGMDBFQTgwNzEwMDk0MDAwMDAwM0YzMTA3MDA0QgorOjEwMEVCMDAwMDIwMDBGMDBFQjgwNzEwMDk0MDAwMDAwNzYzQjA1MDBGQgorOjEwMEVDMDAwMDIwMDBGMDBFQzgwNzEwMDA5MDAwMDAwN0EzREVEQzFDNgorOjEwMEVEMDAwMDIwMDBGMDBFRDgwNzEwMDNGMDAwMDAwODBCNzAwRDJEQgorOjEwMEVFMDAwMDIwMDBGMDBFRTgwNzEwMDNGMDAwMDAwODQyODAwREQ0QQorOjEwMEVGMDAwMDIwMDBGMDBFRjgwNzEwMDNGMDAwMDAwMDEwMDE4RERDQworOjEwMEYwMDAwMDIwMDBGMDBGMDgwNzEwMDY5MDAwMDAwNjQzMjAwREQxMworOjEwMEYxMDAwMDIwMDBGMDBGMTgwNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMEYyMDAwMDIwMDBGMDBGMjgwNzEwMDNGMDAwMDAwODQwNzgwRDZBRAorOjEwMEYzMDAwMDIwMDBGMDBGMzgwNzEwMDNGMDAwMDAwMDEwMDgwRDYyNgorOjEwMEY0MDAwMDIwMDBGMDBGNDgwNzEwMDM1MDAwMDAwRUQwMDgwRDYzMworOjEwMEY1MDAwMDIwMDBGMDBGNTgwNzEwMDE4MDAwMDAwODEwMEZGMzdDQgorOjEwMEY2MDAwMDIwMDBGMDBGNjgwNzEwMDQ5MDAwMDAwNjMzQjAwRERDNQorOjEwMEY3MDAwMDIwMDBGMDBGNzgwNzEwMDU5MDAwMDAwNzYzQjAwREQ5MQorOjEwMEY4MDAwMDIwMDBGMDBGODgwNzEwMDNEMDAwMDAwNkYwMDgwRjc0NAorOjEwMEY5MDAwMDIwMDBGMDBGOTgwNzEwMDNEMDAwMDAwNkYwMDgwRjczMworOjEwMEZBMDAwMDIwMDBGMDBGQTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyMgorOjEwMEZCMDAwMDIwMDBGMDBGQjgwNzEwMDJEMDAwMDAwN0YwMjA2RERBMworOjEwMEZDMDAwMDIwMDBGMDBGQzgwNzEwMDE4MDAwMDAwN0EzRDdGMURCOAorOjEwMEZEMDAwMDIwMDBGMDBGRDgwNzEwMDQ1MDAwMDAwM0EzMTAwREQ4NQorOjEwMEZFMDAwMDIwMDBGMDBGRTgwNzEwMDE4MDAwMDAwNzYzQjJEMURFRQorOjEwMEZGMDAwMDIwMDBGMDBGRjgwNzEwMDQ1MDAwMDAwM0MzMTAwREQ2MQorOjEwMTAwMDAwMDIwMDBGMDAwMDgxNzEwMDE4MDAwMDAwNzYzQjEzMURFNAorOjEwMTAxMDAwMDIwMDBGMDAwMTgxNzEwMDQ1MDAwMDAwM0UzMTAwREQzQgorOjEwMTAyMDAwMDIwMDBGMDAwMjgxNzEwMDE4MDAwMDAwNzYzQjFCMURCQQorOjEwMTAzMDAwMDIwMDBGMDAwMzgxNzEwMDNGMDAwMDAwMDQzMDAwREQ1QQorOjEwMTA0MDAwMDIwMDBGMDAwNDgxNzEwMDNGMDAwMDAwMDEwMDE4REQ2NAorOjEwMTA1MDAwMDIwMDBGMDAwNTgxNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMTA2MDAwMDIwMDBGMDAwNjgxNzEwMDNGMDAwMDAwMDQwMTAwREQ1NgorOjEwMTA3MDAwMDIwMDBGMDAwNzgxNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMTA4MDAwMDIwMDBGMDAwODgxNzEwMDA5MDAwMDAwN0EzRDJEQzVBMworOjEwMTA5MDAwMDIwMDBGMDAwOTgxNzEwMDI5MDAwMDAwNjQwMDAxRDJFNAorOjEwMTBBMDAwMDIwMDBGMDAwQTgxNzEwMDNGMDAwMDAwODQyODAwREQ2QgorOjEwMTBCMDAwMDIwMDBGMDAwQjgxNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMTBDMDAwMDIwMDBGMDAwQzgxNzEwMDY5MDAwMDAwNjQzMjAwREQzNQorOjEwMTBEMDAwMDIwMDBGMDAwRDgxNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMTBFMDAwMDIwMDBGMDAwRTgxNzEwMDA5MDAwMDAwN0EzRDI5QzI0NAorOjEwMTBGMDAwMDIwMDBGMDAwRjgxNzEwMDI5MDAwMDAwNjQwMDAwRDI3RgorOjEwMTEwMDAwMDIwMDBGMDAxMDgxNzEwMDNGMDAwMDAwODQyODAwREQwNAorOjEwMTExMDAwMDIwMDBGMDAxMTgxNzEwMDNGMDAwMDAwMDEwMDE4REQ4NgorOjEwMTEyMDAwMDIwMDBGMDAxMjgxNzEwMDY5MDAwMDAwNjQzMjAwRERDRQorOjEwMTEzMDAwMDIwMDBGMDAxMzgxNzEwMDY5MDAwMDAwN0EzRDAwREQ5QworOjEwMTE0MDAwMDIwMDBGMDAxNDgxNzEwMDQ5MDAwMDAwNjMzQjAwRERDNAorOjEwMTE1MDAwMDIwMDBGMDAxNTgxNzEwMDU5MDAwMDAwNzYzQjAwREQ5MAorOjEwMTE2MDAwMDIwMDBGMDAxNjgxNzEwMDNEMDAwMDAwNkYwMDgwRjc0MworOjEwMTE3MDAwMDIwMDBGMDAxNzgxNzEwMDNEMDAwMDAwNkYwMDgwRjczMgorOjEwMTE4MDAwMDIwMDBGMDAxODgxNzEwMDNEMDAwMDAwNkYwMDgwRjcyMQorOjEwMTE5MDAwMDIwMDBGMDAxOTgxNzEwMDJEMDAwMDAwN0YwMjA2RERBMgorOjEwMTFBMDAwMDIwMDBGMDAxQTgxNzEwMDE4MDAwMDAwN0EzRDdGMURCNworOjEwMTFCMDAwMDIwMDBGMDAxQjgxNzEwMDQ1MDAwMDAwM0EzMTAwREQ4NAorOjEwMTFDMDAwMDIwMDBGMDAxQzgxNzEwMDE4MDAwMDAwNzYzQjBGMUQwQgorOjEwMTFEMDAwMDIwMDBGMDAxRDgxNzEwMDNGMDAwMDAwMDQzMDAwREQ5RgorOjEwMTFFMDAwMDIwMDBGMDAxRTgxNzEwMDNGMDAwMDAwMDEwMDE4RERBOQorOjEwMTFGMDAwMDIwMDBGMDAxRjgxNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMTIwMDAwMDIwMDBGMDAyMDgxNzEwMDNGMDAwMDAwMDQwMTAwREQ5QQorOjEwMTIxMDAwMDIwMDBGMDAyMTgxNzEwMDY5MDAwMDAwN0EzRDAwRERBRAorOjEwMTIyMDAwMDIwMDBGMDAyMjgxNzEwMDA5MDAwMDAwN0EzRDJEQzVFNworOjEwMTIzMDAwMDIwMDBGMDAyMzgxNzEwMDJEMDAwMDAwODIwMDA4RDEwMAorOjEwMTI0MDAwMDIwMDBGMDAyNDgxNzEwMDA4MDAwMDAwN0EzREMzMjNEMgorOjEwMTI1MDAwMDIwMDBGMDAyNTgxNzEwMDQ5MDAwMDAwMEEzQjAwRDYwMgorOjEwMTI2MDAwMDIwMDBGMDAyNjgxNzEwMDNGMDAwMDAwMDQwMDAwRDMzRgorOjEwMTI3MDAwMDIwMDBGMDAyNzgxNzEwMDNGMDAwMDAwMDEwMDA0RDMyRAorOjEwMTI4MDAwMDIwMDBGMDAyODgxNzEwMDJGMDAwMDAwODU0MDgxRDZFOAorOjEwMTI5MDAwMDIwMDBGMDAyOTgxNzEwMDNGMDAwMDAwODRGRkZGRDQ4RAorOjEwMTJBMDAwMDIwMDBGMDAyQTgxNzEwMDNGMDAwMDAwODEwNzgwRDRGNgorOjEwMTJCMDAwMDIwMDBGMDAyQjgxNzEwMDNGMDAwMDAwODRGRkZGRDE2RQorOjEwMTJDMDAwMDIwMDBGMDAyQzgxNzEwMDNGMDAwMDAwMDEwMDgwRDE1RQorOjEwMTJEMDAwMDIwMDBGMDAyRDgxNzEwMDQ5MDAwMDAwNjYzNjAwREQxQworOjEwMTJFMDAwMDIwMDBGMDAyRTgxNzEwMDY5MDAwMDAwNzYzQjAwRERENgorOjEwMTJGMDAwMDIwMDBGMDAyRjgxNzEwMDY5MDAwMDAwNzYzQjAwRERDNQorOjEwMTMwMDAwMDIwMDBGMDAzMDgxNzEwMDY5MDAwMDAwNzYzQjAwRERCMworOjEwMTMxMDAwMDIwMDBGMDAzMTgxNzEwMDY5MDAwMDAwNjkzQjAwRERBRgorOjEwMTMyMDAwMDIwMDBGMDAzMjgxNzEwMDY5MDAwMDAwNzYzQjAwREQ5MQorOjEwMTMzMDAwMDIwMDBGMDAzMzgxNzEwMDY5MDAwMDAwNzYzQjAwREQ4MAorOjEwMTM0MDAwMDIwMDBGMDAzNDgxNzEwMDY5MDAwMDAwNzYzQjAwREQ2RgorOjEwMTM1MDAwMDIwMDBGMDAzNTgxNzEwMDY5MDAwMDAwNjkzQjAwREQ2QgorOjEwMTM2MDAwMDIwMDBGMDAzNjgxNzEwMDYxMDAwMDAwNkMwNDAwRjY3RAorOjEwMTM3MDAwMDIwMDBGMDAzNzgxNzEwMDM1MDAwMDAwRUQwMDgwRDZCQgorOjEwMTM4MDAwMDIwMDBGMDAzODgxNzEwMDE4MDAwMDAwODEwMDZCM0RFMQorOjEwMTM5MDAwMDIwMDBGMDAzOTgxNzEwMDQ5MDAwMDAwOEIwNTAwRDY2MgorOjEwMTNBMDAwMDIwMDBGMDAzQTgxNzEwMDJGMDAwMDAwMDYwMTgxRDY3MworOjEwMTNCMDAwMDIwMDBGMDAzQjgxNzEwMDJEMDAwMDAwMDAwMDAwRDJGMAorOjEwMTNDMDAwMDIwMDBGMDAzQzgxNzEwMDIxMDAwMDAwRTQwMDAwRDIwNworOjEwMTNEMDAwMDIwMDBGMDAzRDgxNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMTNFMDAwMDIwMDBGMDAzRTgxNzEwMDJEMDAwMDAwN0YwMTA2REQyQworOjEwMTNGMDAwMDIwMDBGMDAzRjgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ0MAorOjEwMTQwMDAwMDIwMDBGMDA0MDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhENgorOjEwMTQxMDAwMDIwMDBGMDA0MTgxNzEwMDY5MDAwMDAwRTczMzAwRDgyRAorOjEwMTQyMDAwMDIwMDBGMDA0MjgxNzEwMDY5MDAwMDAwRTczMzAwRDgxQworOjEwMTQzMDAwMDIwMDBGMDA0MzgxNzEwMDY5MDAwMDAwRUYzNzAwRDhGRgorOjEwMTQ0MDAwMDIwMDBGMDA0NDgxNzEwMDMxMDAwMDAwNkMwMTAwRDZFMQorOjEwMTQ1MDAwMDIwMDBGMDA0NTgxNzEwMDJEMDAwMDAwMDAwMDAwRDE0NgorOjEwMTQ2MDAwMDIwMDBGMDA0NjgxNzEwMDQ5MDAwMDAwRTQzMzdBRDE4OAorOjEwMTQ3MDAwMDIwMDBGMDA0NzgxNzEwMDJGMDAwMDAwNjIwMTcxRDE0RQorOjEwMTQ4MDAwMDIwMDBGMDA0ODgxNzEwMDJGMDAwMDAwNjIwMTYxRDE0RAorOjEwMTQ5MDAwMDIwMDBGMDA0OTgxNzEwMDQ5MDAwMDAwRTMzMzQwRDE5MAorOjEwMTRBMDAwMDIwMDBGMDA0QTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdDQworOjEwMTRCMDAwMDIwMDBGMDA0QjgxNzEwMDJEMDAwMDAwN0YwMTA2REQ0RQorOjEwMTRDMDAwMDIwMDBGMDA0QzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ2MgorOjEwMTREMDAwMDIwMDBGMDA0RDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhGOQorOjEwMTRFMDAwMDIwMDBGMDA0RTgxNzEwMDY5MDAwMDAwRTczMzAwRDg1MAorOjEwMTRGMDAwMDIwMDBGMDA0RjgxNzEwMDY5MDAwMDAwNjIzMTAwRDhDNgorOjEwMTUwMDAwMDIwMDBGMDA1MDgxNzEwMDY5MDAwMDAwRUYzNzAwRDgyMQorOjEwMTUxMDAwMDIwMDBGMDA1MTgxNzEwMDMxMDAwMDAwNkMwMTAwRDYwMworOjEwMTUyMDAwMDIwMDBGMDA1MjgxNzEwMDNEMDAwMDAwNkYwMDgwRjc0MworOjEwMTUzMDAwMDIwMDBGMDA1MzgxNzEwMDJEMDAwMDAwN0YwMTA2RERDNQorOjEwMTU0MDAwMDIwMDBGMDA1NDgxNzEwMDE4MDAwMDAwN0EzRDdGMUREOQorOjEwMTU1MDAwMDIwMDBGMDA1NTgxNzEwMDQ5MDAwMDAwNkMzNjAwRDg3MAorOjEwMTU2MDAwMDIwMDBGMDA1NjgxNzEwMDY5MDAwMDAwRTczMzAwRDhDNworOjEwMTU3MDAwMDIwMDBGMDA1NzgxNzEwMDY5MDAwMDAwRTczMzAwRDhCNgorOjEwMTU4MDAwMDIwMDBGMDA1ODgxNzEwMDY5MDAwMDAwRUYzNzAwRDg5OQorOjEwMTU5MDAwMDIwMDBGMDA1OTgxNzEwMDMxMDAwMDAwNkMwMTAwRDY3QgorOjEwMTVBMDAwMDIwMDBGMDA1QTgxNzEwMDJEMDAwMDAwMDAwMDAwRDFFMAorOjEwMTVCMDAwMDIwMDBGMDA1QjgxNzEwMDJEMDAwMDAwRTQwNzZDRDE3OAorOjEwMTVDMDAwMDIwMDBGMDA1QzgxNzEwMDQ5MDAwMDAwRTMzMzQwRDE0QworOjEwMTVEMDAwMDIwMDBGMDA1RDgxNzEwMDNEMDAwMDAwNkYwMDgwRjc4OAorOjEwMTVFMDAwMDIwMDBGMDA1RTgxNzEwMDJEMDAwMDAwN0YwMTA2REQwQQorOjEwMTVGMDAwMDIwMDBGMDA1RjgxNzEwMDE4MDAwMDAwN0EzRDdGMUQxRQorOjEwMTYwMDAwMDIwMDBGMDA2MDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhCNAorOjEwMTYxMDAwMDIwMDBGMDA2MTgxNzEwMDY5MDAwMDAwRTczMzAwRDgwQgorOjEwMTYyMDAwMDIwMDBGMDA2MjgxNzEwMDY5MDAwMDAwNjIzMTAwRDg4MQorOjEwMTYzMDAwMDIwMDBGMDA2MzgxNzEwMDY5MDAwMDAwRUYzNzAwRDhERAorOjEwMTY0MDAwMDIwMDBGMDA2NDgxNzEwMDMxMDAwMDAwNkMwMTAwRDZCRgorOjEwMTY1MDAwMDIwMDBGMDA2NTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdGRgorOjEwMTY2MDAwMDIwMDBGMDA2NjgxNzEwMDJEMDAwMDAwN0YwMTA2REQ4MQorOjEwMTY3MDAwMDIwMDBGMDA2NzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ5NQorOjEwMTY4MDAwMDIwMDBGMDA2ODgxNzEwMDQ5MDAwMDAwNkMzNjAwRDgyQworOjEwMTY5MDAwMDIwMDBGMDA2OTgxNzEwMDY5MDAwMDAwRTczMzAwRDg4MworOjEwMTZBMDAwMDIwMDBGMDA2QTgxNzEwMDY5MDAwMDAwRTczMzAwRDg3MgorOjEwMTZCMDAwMDIwMDBGMDA2QjgxNzEwMDY5MDAwMDAwRUYzNzAwRDg1NQorOjEwMTZDMDAwMDIwMDBGMDA2QzgxNzEwMDMxMDAwMDAwNkMwMTAwRDYzNworOjEwMTZEMDAwMDIwMDBGMDA2RDgxNzEwMDJEMDAwMDAwMDAwMDAwRDE5QworOjEwMTZFMDAwMDIwMDBGMDA2RTgxNzEwMDQ5MDAwMDAwRTQzMzc4RDFFMAorOjEwMTZGMDAwMDIwMDBGMDA2RjgxNzEwMDJGMDAwMDAwNjIwMTcxRDFBNAorOjEwMTcwMDAwMDIwMDBGMDA3MDgxNzEwMDJGMDAwMDAwNjIwMTYxRDFBMgorOjEwMTcxMDAwMDIwMDBGMDA3MTgxNzEwMDQ5MDAwMDAwRTMzMzQwRDFFNQorOjEwMTcyMDAwMDIwMDBGMDA3MjgxNzEwMDNEMDAwMDAwNkYwMDgwRjcyMQorOjEwMTczMDAwMDIwMDBGMDA3MzgxNzEwMDJEMDAwMDAwN0YwMTA2RERBMworOjEwMTc0MDAwMDIwMDBGMDA3NDgxNzEwMDE4MDAwMDAwN0EzRDdGMURCNworOjEwMTc1MDAwMDIwMDBGMDA3NTgxNzEwMDQ5MDAwMDAwNkMzNjAwRDg0RQorOjEwMTc2MDAwMDIwMDBGMDA3NjgxNzEwMDY5MDAwMDAwRTczMzAwRDhBNQorOjEwMTc3MDAwMDIwMDBGMDA3NzgxNzEwMDY5MDAwMDAwNjIzMTAwRDgxQgorOjEwMTc4MDAwMDIwMDBGMDA3ODgxNzEwMDY5MDAwMDAwRUYzNzAwRDg3NworOjEwMTc5MDAwMDIwMDBGMDA3OTgxNzEwMDMxMDAwMDAwNkMwMTAwRDY1OQorOjEwMTdBMDAwMDIwMDBGMDA3QTgxNzEwMDNEMDAwMDAwNkYwMDgwRjc5OQorOjEwMTdCMDAwMDIwMDBGMDA3QjgxNzEwMDJEMDAwMDAwN0YwMTA2REQxQgorOjEwMTdDMDAwMDIwMDBGMDA3QzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQyRgorOjEwMTdEMDAwMDIwMDBGMDA3RDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhDNgorOjEwMTdFMDAwMDIwMDBGMDA3RTgxNzEwMDY5MDAwMDAwRTczMzAwRDgxRAorOjEwMTdGMDAwMDIwMDBGMDA3RjgxNzEwMDY5MDAwMDAwRTczMzAwRDgwQworOjEwMTgwMDAwMDIwMDBGMDA4MDgxNzEwMDY5MDAwMDAwRUYzNzAwRDhFRQorOjEwMTgxMDAwMDIwMDBGMDA4MTgxNzEwMDMxMDAwMDAwNkMwMTAwRDZEMAorOjEwMTgyMDAwMDIwMDBGMDA4MjgxNzEwMDJEMDAwMDAwMDAwMDAwRDEzNQorOjEwMTgzMDAwMDIwMDBGMDA4MzgxNzEwMDJEMDAwMDAwRTQwNzY4RDFEMQorOjEwMTg0MDAwMDIwMDBGMDA4NDgxNzEwMDQ5MDAwMDAwRTMzMzQwRDFBMQorOjEwMTg1MDAwMDIwMDBGMDA4NTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdERAorOjEwMTg2MDAwMDIwMDBGMDA4NjgxNzEwMDJEMDAwMDAwN0YwMTA2REQ1RgorOjEwMTg3MDAwMDIwMDBGMDA4NzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ3MworOjEwMTg4MDAwMDIwMDBGMDA4ODgxNzEwMDQ5MDAwMDAwNkMzNjAwRDgwQQorOjEwMTg5MDAwMDIwMDBGMDA4OTgxNzEwMDY5MDAwMDAwRTczMzAwRDg2MQorOjEwMThBMDAwMDIwMDBGMDA4QTgxNzEwMDY5MDAwMDAwNjIzMTAwRDhENworOjEwMThCMDAwMDIwMDBGMDA4QjgxNzEwMDY5MDAwMDAwRUYzNzAwRDgzMworOjEwMThDMDAwMDIwMDBGMDA4QzgxNzEwMDMxMDAwMDAwNkMwMTAwRDYxNQorOjEwMThEMDAwMDIwMDBGMDA4RDgxNzEwMDM1MDAwMDAwRUQwMDgwRDYwMAorOjEwMThFMDAwMDIwMDBGMDA4RTgxNzEwMDA4MDAwMDAwODEwMDc5MjI0MworOjEwMThGMDAwMDIwMDBGMDA4RjgxNzEwMDQ5MDAwMDAwMEMwNjAwRDYyNQorOjEwMTkwMDAwMDIwMDBGMDA5MDgxNzEwMDJGMDAwMDAwMDYwMTgxRDZCNworOjEwMTkxMDAwMDIwMDBGMDA5MTgxNzEwMDNGMDAwMDAwMDIwMDgwRDQ5RQorOjEwMTkyMDAwMDIwMDBGMDA5MjgxNzEwMDNGMDAwMDAwODQwMDgwRDQwQgorOjEwMTkzMDAwMDIwMDBGMDA5MzgxNzEwMDNGMDAwMDAwMDIwMTAwRDVGQQorOjEwMTk0MDAwMDIwMDBGMDA5NDgxNzEwMDNGMDAwMDAwODQwMTAwRDU2NworOjEwMTk1MDAwMDIwMDBGMDA5NTgxNzEwMDNGMDAwMDAwMDIwMjgwRDU1NworOjEwMTk2MDAwMDIwMDBGMDA5NjgxNzEwMDNGMDAwMDAwMDQwMjgwRDU0NAorOjEwMTk3MDAwMDIwMDBGMDA5NzgxNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMTk4MDAwMDIwMDBGMDA5ODgxNzEwMDJEMDAwMDAwN0YwMTA2REQyQworOjEwMTk5MDAwMDIwMDBGMDA5OTgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ0MAorOjEwMTlBMDAwMDIwMDBGMDA5QTgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhENworOjEwMTlCMDAwMDIwMDBGMDA5QjgxNzEwMDY5MDAwMDAwRTkzNDAwRDgyQgorOjEwMTlDMDAwMDIwMDBGMDA5QzgxNzEwMDY5MDAwMDAwNkEzNTAwRDg5OAorOjEwMTlEMDAwMDIwMDBGMDA5RDgxNzEwMDY5MDAwMDAwRUYzNzAwRDgwMAorOjEwMTlFMDAwMDIwMDBGMDA5RTgxNzEwMDMxMDAwMDAwNkMwMTAwRDZFMgorOjEwMTlGMDAwMDIwMDBGMDA5RjgxNzEwMDQxMDAwMDAwRUIzNDgwRDQ5MQorOjEwMUEwMDAwMDIwMDBGMDBBMDgxNzEwMDQxMDAwMDAwNkIzNTAwRDU3RAorOjEwMUExMDAwMDIwMDBGMDBBMTgxNzEwMDM1MDAwMDAwRUQwMDgwRDZBQQorOjEwMUEyMDAwMDIwMDBGMDBBMjgxNzEwMDE4MDAwMDAwODEwMEVCMzc1NgorOjEwMUEzMDAwMDIwMDBGMDBBMzgxNzEwMDQ5MDAwMDAwMEQzQjAwRDY5OQorOjEwMUE0MDAwMDIwMDBGMDBBNDgxNzEwMDQ5MDAwMDAwMDczQjgwRDYwRQorOjEwMUE1MDAwMDIwMDBGMDBBNTgxNzEwMDJEMDAwMDAwMDAwMDAwRDFFMAorOjEwMUE2MDAwMDIwMDBGMDBBNjgxNzEwMDQ5MDAwMDAwNjYzNjAwREQwQgorOjEwMUE3MDAwMDIwMDBGMDBBNzgxNzEwMDY5MDAwMDAwNzYzQjAwRERDNQorOjEwMUE4MDAwMDIwMDBGMDBBODgxNzEwMDY5MDAwMDAwNzYzQjAwRERCNAorOjEwMUE5MDAwMDIwMDBGMDBBOTgxNzEwMDY5MDAwMDAwNzYzQjAwRERBMworOjEwMUFBMDAwMDIwMDBGMDBBQTgxNzEwMDY5MDAwMDAwNzYzQjAwREQ5MgorOjEwMUFCMDAwMDIwMDBGMDBBQjgxNzEwMDY5MDAwMDAwNzYzQjAwREQ4MQorOjEwMUFDMDAwMDIwMDBGMDBBQzgxNzEwMDY5MDAwMDAwNzYzQjAwREQ3MAorOjEwMUFEMDAwMDIwMDBGMDBBRDgxNzEwMDY5MDAwMDAwNzYzQjAwREQ1RgorOjEwMUFFMDAwMDIwMDBGMDBBRTgxNzEwMDY5MDAwMDAwNzYzQjAwREQ0RQorOjEwMUFGMDAwMDIwMDBGMDBBRjgxNzEwMDYxMDAwMDAwNkMwNDAwRjY2RAorOjEwMUIwMDAwMDIwMDBGMDBCMDgxNzEwMDM1MDAwMDAwRUQwMDgwRDZBQQorOjEwMUIxMDAwMDIwMDBGMDBCMTgxNzEwMDE4MDAwMDAwODEwMEVCMzc1NgorOjEwMUIyMDAwMDIwMDBGMDBCMjgxNzEwMDQ5MDAwMDAwMEUzQjAwRDY5OAorOjEwMUIzMDAwMDIwMDBGMDBCMzgxNzEwMDQ5MDAwMDAwMDgzQjgwRDYwRAorOjEwMUI0MDAwMDIwMDBGMDBCNDgxNzEwMDQ5MDAwMDAwMDkzQjgwRDVGQworOjEwMUI1MDAwMDIwMDBGMDBCNTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMUI2MDAwMDIwMDBGMDBCNjgxNzEwMDJEMDAwMDAwN0YwMTA2REQyQworOjEwMUI3MDAwMDIwMDBGMDBCNzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ0MAorOjEwMUI4MDAwMDIwMDBGMDBCODgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhENworOjEwMUI5MDAwMDIwMDBGMDBCOTgxNzEwMDY5MDAwMDAwRUIzNTAwRDgyOAorOjEwMUJBMDAwMDIwMDBGMDBCQTgxNzEwMDY5MDAwMDAwRTczMzAwRDgxRAorOjEwMUJCMDAwMDIwMDBGMDBCQjgxNzEwMDY5MDAwMDAwRUYzNzAwRDgwMAorOjEwMUJDMDAwMDIwMDBGMDBCQzgxNzEwMDQxMDAwMDAwRUMwNzAwRDY0QworOjEwMUJEMDAwMDIwMDBGMDBCRDgxNzEwMDQxMDAwMDAwNkIwODgwRDUzQworOjEwMUJFMDAwMDIwMDBGMDBCRTgxNzEwMDM1MDAwMDAwRUQwMDgwRDZCQworOjEwMUJGMDAwMDIwMDBGMDBCRjgxNzEwMDE4MDAwMDAwODEwMEVEMzc2NgorOjEwMUMwMDAwMDIwMDBGMDBDMDgxNzEwMDNGMDAwMDAwODBGRkZGRDQ4MAorOjEwMUMxMDAwMDIwMDBGMDBDMTgxNzEwMDNGMDAwMDAwMDQwMDAyRDVFNgorOjEwMUMyMDAwMDIwMDBGMDBDMjgxNzEwMDNGMDAwMDAwMDEwMDE4RDVDMgorOjEwMUMzMDAwMDIwMDBGMDBDMzgxNzEwMDQ5MDAwMDAwNkEzQjAwREQxMworOjEwMUM0MDAwMDIwMDBGMDBDNDgxNzEwMDY5MDAwMDAwNjkzQjAwRERFMworOjEwMUM1MDAwMDIwMDBGMDBDNTgxNzEwMDY5MDAwMDAwNjkzQjAwREREMgorOjEwMUM2MDAwMDIwMDBGMDBDNjgxNzEwMDIxMDAwMDAwRUEwMDAwRDVDQgorOjEwMUM3MDAwMDIwMDBGMDBDNzgxNzEwMDQ5MDAwMDAwNkEzQjBFRERDMQorOjEwMUM4MDAwMDIwMDBGMDBDODgxNzEwMDM1MDAwMDAwN0EwMDA0RDEwNQorOjEwMUM5MDAwMDIwMDBGMDBDOTgxNzEwMDE4MDAwMDAwODEwMEY1MzdCMworOjEwMUNBMDAwMDIwMDBGMDBDQTgxNzEwMDNGMDAwMDAwODBGRkZGRDRENgorOjEwMUNCMDAwMDIwMDBGMDBDQjgxNzEwMDNGMDAwMDAwMDQwMDA0RDUzQQorOjEwMUNDMDAwMDIwMDBGMDBDQzgxNzEwMDNGMDAwMDAwMDEwMDE4RDUxOAorOjEwMUNEMDAwMDIwMDBGMDBDRDgxNzEwMDY5MDAwMDAwNjkzQjAwREQ0QQorOjEwMUNFMDAwMDIwMDBGMDBDRTgxNzEwMDY5MDAwMDAwNjkzQjAwREQzOQorOjEwMUNGMDAwMDIwMDBGMDBDRjgxNzEwMDQ5MDAwMDAwNkEzQjAwREQ0NworOjEwMUQwMDAwMDIwMDBGMDBEMDgxNzEwMDUxMDAwMDAwRUEwMDAwRjVEMAorOjEwMUQxMDAwMDIwMDBGMDBEMTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdDQworOjEwMUQyMDAwMDIwMDBGMDBEMjgxNzEwMDNEMDAwMDAwNkYwMDgwRjdCQgorOjEwMUQzMDAwMDIwMDBGMDBEMzgxNzEwMDQ5MDAwMDAwNkEzQjBFRERGNAorOjEwMUQ0MDAwMDIwMDBGMDBENDgxNzEwMDM1MDAwMDAwN0E4MDA0RDFCOAorOjEwMUQ1MDAwMDIwMDBGMDBENTgxNzEwMDE4MDAwMDAwODEwMEY1MzdFNgorOjEwMUQ2MDAwMDIwMDBGMDBENjgxNzEwMDNGMDAwMDAwMDQ3RjdGQzc5MgorOjEwMUQ3MDAwMDIwMDBGMDBENzgxNzEwMDNGMDAwMDAwMDE3RjdGQzc4NAorOjEwMUQ4MDAwMDIwMDBGMDBEODgxNzEwMDNGMDAwMDAwMDA0MDgwRDZBMworOjEwMUQ5MDAwMDIwMDBGMDBEOTgxNzEwMDNGMDAwMDAwMDBDMDAzRDE5NAorOjEwMURBMDAwMDIwMDBGMDBEQTgxNzEwMDI1MDAwMDAwRTIwMDIwREU1MQorOjEwMURCMDAwMDIwMDBGMDBEQjgxNzEwMDQ5MDAwMDAwNEUyNzgwREUyOQorOjEwMURDMDAwMDIwMDBGMDBEQzgxNzEwMDNEMDAwMDAwNkYwMDgwRjcxMQorOjEwMUREMDAwMDIwMDBGMDBERDgxNzEwMDNEMDAwMDAwNkYwMDgwRjcwMAorOjEwMURFMDAwMDIwMDBGMDBERTgxNzEwMDM1MDAwMDAwRTIwMDAwRDEyQQorOjEwMURGMDAwMDIwMDBGMDBERjgxNzEwMDM1MDAwMDAwRUQwMDgwRDY4OQorOjEwMUUwMDAwMDIwMDBGMDBFMDgxNzEwMDE4MDAwMDAwODEwMEY1MzcyQQorOjEwMUUxMDAwMDIwMDBGMDBFMTgxNzEwMDNGMDAwMDAwMDQzMDAwREQ4RQorOjEwMUUyMDAwMDIwMDBGMDBFMjgxNzEwMDNGMDAwMDAwMDEwMDE4REQ5OAorOjEwMUUzMDAwMDIwMDBGMDBFMzgxNzEwMDY5MDAwMDAwM0ExRDAwREQxRgorOjEwMUU0MDAwMDIwMDBGMDBFNDgxNzEwMDY5MDAwMDAwN0EzRDAwRERBRQorOjEwMUU1MDAwMDIwMDBGMDBFNTgxNzEwMDdEMDAwMDAwMTNBNzYwQzczQworOjEwMUU2MDAwMDIwMDBGMDBFNjgxNzEwMDMxMDAwMDAwNDEwMDgwQzBENworOjEwMUU3MDAwMDIwMDBGMDBFNzgxNzEwMDMxMDAwMDAwNDgwMDAwQzQzQgorOjEwMUU4MDAwMDIwMDBGMDBFODgxNzEwMDMxMDAwMDAwNDUwMDgwQzJBRgorOjEwMUU5MDAwMDIwMDBGMDBFOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMUVBMDAwMDIwMDBGMDBFQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMUVCMDAwMDIwMDBGMDBFQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwMUVDMDAwMDIwMDBGMDBFQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMUVEMDAwMDIwMDBGMDBFRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwMUVFMDAwMDIwMDBGMDBFRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMUVGMDAwMDIwMDBGMDBFRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMUYwMDAwMDIwMDBGMDBGMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMUYxMDAwMDIwMDBGMDBGMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMUYyMDAwMDIwMDBGMDBGMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMUYzMDAwMDIwMDBGMDBGMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMUY0MDAwMDIwMDBGMDBGNDgxNzEwMDJEMDAwMDAwMDAwMDAwREI5MgorOjEwMUY1MDAwMDIwMDBGMDBGNTgxNzEwMDNGMDAwMDAwMDQzMDAwREQzOQorOjEwMUY2MDAwMDIwMDBGMDBGNjgxNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMUY3MDAwMDIwMDBGMDBGNzgxNzEwMDY5MDAwMDAwN0EzRDAwREQ2QQorOjEwMUY4MDAwMDIwMDBGMDBGODgxNzEwMDNGMDAwMDAwMDQwMDAwREQzNgorOjEwMUY5MDAwMDIwMDBGMDBGOTgxNzEwMDY5MDAwMDAwN0EzRDAwREQ0OAorOjEwMUZBMDAwMDIwMDBGMDBGQTgxNzEwMDJEMDAwMDAwMDAwMDgwRDNCNAorOjEwMUZCMDAwMDIwMDBGMDBGQjgxNzEwMDNGMDAwMDAwMDQwNDAwRERGRgorOjEwMUZDMDAwMDIwMDBGMDBGQzgxNzEwMDNGMDAwMDAwMDEwMDE4RERERAorOjEwMUZEMDAwMDIwMDBGMDBGRDgxNzEwMDY5MDAwMDAwMTQwQTAwREQ5RAorOjEwMUZFMDAwMDIwMDBGMDBGRTgxNzEwMDY5MDAwMDAwN0EzRDAwRERGMworOjEwMUZGMDAwMDIwMDBGMDBGRjgxNzEwMDQ5MDAwMDAwOTQzMzA0RDFGQQorOjEwMjAwMDAwMDIwMDBGMDAwMDgyNzEwMDNGMDAwMDAwODQwNDAwREQyOAorOjEwMjAxMDAwMDIwMDBGMDAwMTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ4NgorOjEwMjAyMDAwMDIwMDBGMDAwMjgyNzEwMDY5MDAwMDAwNjIzMTAwREREMQorOjEwMjAzMDAwMDIwMDBGMDAwMzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ5QworOjEwMjA0MDAwMDIwMDBGMDAwNDgyNzEwMDNGMDAwMDAwMDQwNTAwREQ2MworOjEwMjA1MDAwMDIwMDBGMDAwNTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ0MgorOjEwMjA2MDAwMDIwMDBGMDAwNjgyNzEwMDY5MDAwMDAwOTUwQTAwREQ4MQorOjEwMjA3MDAwMDIwMDBGMDAwNzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ1OAorOjEwMjA4MDAwMDIwMDBGMDAwODgyNzEwMDQ5MDAwMDAwOTUzMzA0RDE1RQorOjEwMjA5MDAwMDIwMDBGMDAwOTgyNzEwMDNGMDAwMDAwODQwNTAwREQ4RQorOjEwMjBBMDAwMDIwMDBGMDAwQTgyNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMjBCMDAwMDIwMDBGMDAwQjgyNzEwMDY5MDAwMDAwNjIzMTAwREQzOAorOjEwMjBDMDAwMDIwMDBGMDAwQzgyNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMjBEMDAwMDIwMDBGMDAwRDgyNzEwMDNGMDAwMDAwMDQwNjAwRERDOQorOjEwMjBFMDAwMDIwMDBGMDAwRTgyNzEwMDNGMDAwMDAwMDEwMDE4RERBOQorOjEwMjBGMDAwMDIwMDBGMDAwRjgyNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMjEwMDAwMDIwMDBGMDAxMDgyNzEwMDNGMDAwMDAwODQwMDAwREQxQgorOjEwMjExMDAwMDIwMDBGMDAxMTgyNzEwMDY5MDAwMDAwN0EzRDAwRERBRAorOjEwMjEyMDAwMDIwMDBGMDAxMjgyNzEwMDNGMDAwMDAwMDQwMDAwREQ3OQorOjEwMjEzMDAwMDIwMDBGMDAxMzgyNzEwMDNGMDAwMDAwMDEwMDE4REQ1MworOjEwMjE0MDAwMDIwMDBGMDAxNDgyNzEwMDY5MDAwMDAwMTYwQjAwREQxMAorOjEwMjE1MDAwMDIwMDBGMDAxNTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjE2MDAwMDIwMDBGMDAxNjgyNzEwMDNGMDAwMDAwMDQxMDAwREQyNQorOjEwMjE3MDAwMDIwMDBGMDAxNzgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjE4MDAwMDIwMDBGMDAxODgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjE5MDAwMDIwMDBGMDAxOTgyNzEwMDNGMDAwMDAwMDQwMDAwREQwMgorOjEwMjFBMDAwMDIwMDBGMDAxQTgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjFCMDAwMDIwMDBGMDAxQjgyNzEwMDNGMDAwMDAwODQxMDAwREQ1MAorOjEwMjFDMDAwMDIwMDBGMDAxQzgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjFEMDAwMDIwMDBGMDAxRDgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjFFMDAwMDIwMDBGMDAxRTgyNzEwMDNGMDAwMDAwMDQ4MDAxREQyQworOjEwMjFGMDAwMDIwMDBGMDAxRjgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjIwMDAwMDIwMDBGMDAyMDgyNzEwMDNGMDAwMDAwMDQxMTAwREQ3OQorOjEwMjIxMDAwMDIwMDBGMDAyMTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NAorOjEwMjIyMDAwMDIwMDBGMDAyMjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMjIzMDAwMDIwMDBGMDAyMzgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjI0MDAwMDIwMDBGMDAyNDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjI1MDAwMDIwMDBGMDAyNTgyNzEwMDNGMDAwMDAwODQxMTAwRERBNAorOjEwMjI2MDAwMDIwMDBGMDAyNjgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjI3MDAwMDIwMDBGMDAyNzgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjI4MDAwMDIwMDBGMDAyODgyNzEwMDNGMDAwMDAwMDQwMDE2RERFQworOjEwMjI5MDAwMDIwMDBGMDAyOTgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjJBMDAwMDIwMDBGMDAyQTgyNzEwMDNGMDAwMDAwMDQxMjAwRERDRQorOjEwMjJCMDAwMDIwMDBGMDAyQjgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjJDMDAwMDIwMDBGMDAyQzgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjJEMDAwMDIwMDBGMDAyRDgyNzEwMDNGMDAwMDAwMDQwMDAwRERBRAorOjEwMjJFMDAwMDIwMDBGMDAyRTgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjJGMDAwMDIwMDBGMDAyRjgyNzEwMDNGMDAwMDAwODQxMjAwRERGOQorOjEwMjMwMDAwMDIwMDBGMDAzMDgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NAorOjEwMjMxMDAwMDIwMDBGMDAzMTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMjMyMDAwMDIwMDBGMDAzMjgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjMzMDAwMDIwMDBGMDAzMzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjM0MDAwMDIwMDBGMDAzNDgyNzEwMDNGMDAwMDAwMDQxMzAwREQyMgorOjEwMjM1MDAwMDIwMDBGMDAzNTgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjM2MDAwMDIwMDBGMDAzNjgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjM3MDAwMDIwMDBGMDAzNzgyNzEwMDNGMDAwMDAwMDQwMDAwREQwMgorOjEwMjM4MDAwMDIwMDBGMDAzODgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjM5MDAwMDIwMDBGMDAzOTgyNzEwMDNGMDAwMDAwODQxMzAwREQ0RAorOjEwMjNBMDAwMDIwMDBGMDAzQTgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjNCMDAwMDIwMDBGMDAzQjgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjNDMDAwMDIwMDBGMDAzQzgyNzEwMDNGMDAwMDAwMDQwMDA1RERBOAorOjEwMjNEMDAwMDIwMDBGMDAzRDgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjNFMDAwMDIwMDBGMDAzRTgyNzEwMDNGMDAwMDAwMDQyMDAwREQ2QgorOjEwMjNGMDAwMDIwMDBGMDAzRjgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjQwMDAwMDIwMDBGMDA0MDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMjQxMDAwMDIwMDBGMDA0MTgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjQyMDAwMDIwMDBGMDA0MjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjQzMDAwMDIwMDBGMDA0MzgyNzEwMDNGMDAwMDAwODQyMDAwREQ5NQorOjEwMjQ0MDAwMDIwMDBGMDA0NDgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjQ1MDAwMDIwMDBGMDA0NTgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjQ2MDAwMDIwMDBGMDA0NjgyNzEwMDNGMDAwMDAwMDQ5MDAxREQ3MQorOjEwMjQ3MDAwMDIwMDBGMDA0NzgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjQ4MDAwMDIwMDBGMDA0ODgyNzEwMDNGMDAwMDAwMDQyMTAwRERCRgorOjEwMjQ5MDAwMDIwMDBGMDA0OTgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjRBMDAwMDIwMDBGMDA0QTgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjRCMDAwMDIwMDBGMDA0QjgyNzEwMDNGMDAwMDAwODQwMDAwREQyRAorOjEwMjRDMDAwMDIwMDBGMDA0QzgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjREMDAwMDIwMDBGMDA0RDgyNzEwMDNGMDAwMDAwODQyMTAwRERFQQorOjEwMjRFMDAwMDIwMDBGMDA0RTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjRGMDAwMDIwMDBGMDA0RjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QworOjEwMjUwMDAwMDIwMDBGMDA1MDgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjUxMDAwMDIwMDBGMDA1MTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjUyMDAwMDIwMDBGMDA1MjgyNzEwMDNGMDAwMDAwMDQyMjAwREQxMworOjEwMjUzMDAwMDIwMDBGMDA1MzgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjU0MDAwMDIwMDBGMDA1NDgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjU1MDAwMDIwMDBGMDA1NTgyNzEwMDNGMDAwMDAwODQwMjAwREQ4MAorOjEwMjU2MDAwMDIwMDBGMDA1NjgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjU3MDAwMDIwMDBGMDA1NzgyNzEwMDNGMDAwMDAwODQyMjAwREQzRQorOjEwMjU4MDAwMDIwMDBGMDA1ODgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjU5MDAwMDIwMDBGMDA1OTgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjVBMDAwMDIwMDBGMDA1QTgyNzEwMDNGMDAwMDAwMDQwMDAwRERBRAorOjEwMjVCMDAwMDIwMDBGMDA1QjgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjVDMDAwMDIwMDBGMDA1QzgyNzEwMDNGMDAwMDAwMDQyMzAwREQ2OAorOjEwMjVEMDAwMDIwMDBGMDA1RDgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjVFMDAwMDIwMDBGMDA1RTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QworOjEwMjVGMDAwMDIwMDBGMDA1RjgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1OAorOjEwMjYwMDAwMDIwMDBGMDA2MDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjYxMDAwMDIwMDBGMDA2MTgyNzEwMDNGMDAwMDAwMDQxODAwREQxRAorOjEwMjYyMDAwMDIwMDBGMDA2MjgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjYzMDAwMDIwMDBGMDA2MzgyNzEwMDY5MDAwMDAwOTcwQjAwREQ0QgorOjEwMjY0MDAwMDIwMDBGMDA2NDgyNzEwMDY5MDAwMDAwN0EzRDAwREQyNQorOjEwMjY1MDAwMDIwMDBGMDA2NTgyNzEwMDQ5MDAwMDAwOTczMzA0RDEyOQorOjEwMjY2MDAwMDIwMDBGMDA2NjgyNzEwMDNGMDAwMDAwODQxODAwREQ0OAorOjEwMjY3MDAwMDIwMDBGMDA2NzgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjY4MDAwMDIwMDBGMDA2ODgyNzEwMDY5MDAwMDAwNjIzMTAwREQwNQorOjEwMjY5MDAwMDIwMDBGMDA2OTgyNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMjZBMDAwMDIwMDBGMDA2QTgyNzEwMDNGMDAwMDAwMDQxOTAwREQ4MworOjEwMjZCMDAwMDIwMDBGMDA2QjgyNzEwMDNGMDAwMDAwMDEwMDE4REQ3NgorOjEwMjZDMDAwMDIwMDBGMDA2QzgyNzEwMDY5MDAwMDAwMTgwQzAwREQzMAorOjEwMjZEMDAwMDIwMDBGMDA2RDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QworOjEwMjZFMDAwMDIwMDBGMDA2RTgyNzEwMDQ5MDAwMDAwOTgzMzA0RDE4RgorOjEwMjZGMDAwMDIwMDBGMDA2RjgyNzEwMDNGMDAwMDAwODQxOTAwRERBRQorOjEwMjcwMDAwMDIwMDBGMDA3MDgyNzEwMDNGMDAwMDAwMDEwMDE4REQyMAorOjEwMjcxMDAwMDIwMDBGMDA3MTgyNzEwMDY5MDAwMDAwNjIzMTAwREQ2QgorOjEwMjcyMDAwMDIwMDBGMDA3MjgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjczMDAwMDIwMDBGMDA3MzgyNzEwMDNGMDAwMDAwMDQxQTAwRERFOAorOjEwMjc0MDAwMDIwMDBGMDA3NDgyNzEwMDNGMDAwMDAwMDEwMDE4REREQworOjEwMjc1MDAwMDIwMDBGMDA3NTgyNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMjc2MDAwMDIwMDBGMDA3NjgyNzEwMDNGMDAwMDAwMDQwMDAwRERDRgorOjEwMjc3MDAwMDIwMDBGMDA3NzgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjc4MDAwMDIwMDBGMDA3ODgyNzEwMDNGMDAwMDAwODQxQTAwREQxMworOjEwMjc5MDAwMDIwMDBGMDA3OTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ4NworOjEwMjdBMDAwMDIwMDBGMDA3QTgyNzEwMDY5MDAwMDAwMTYwQjAwREQ0NAorOjEwMjdCMDAwMDIwMDBGMDA3QjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMjdDMDAwMDIwMDBGMDA3QzgyNzEwMDNGMDAwMDAwMDQxQzAwREQ0RAorOjEwMjdEMDAwMDIwMDBGMDA3RDgyNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMjdFMDAwMDIwMDBGMDA3RTgyNzEwMDY5MDAwMDAwOTkwQzAwREQ3QworOjEwMjdGMDAwMDIwMDBGMDA3RjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ1OQorOjEwMjgwMDAwMDIwMDBGMDA4MDgyNzEwMDNGMDAwMDAwODQxQzAwREQ4OAorOjEwMjgxMDAwMDIwMDBGMDA4MTgyNzEwMDNGMDAwMDAwMDEwMDE4RERGRQorOjEwMjgyMDAwMDIwMDBGMDA4MjgyNzEwMDY5MDAwMDAwMUEwRDAwRERCNQorOjEwMjgzMDAwMDIwMDBGMDA4MzgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjg0MDAwMDIwMDBGMDA4NDgyNzEwMDNGMDAwMDAwMDQxRDAwRERDMworOjEwMjg1MDAwMDIwMDBGMDA4NTgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjg2MDAwMDIwMDBGMDA4NjgyNzEwMDY5MDAwMDAwOUIwRDAwRERGMAorOjEwMjg3MDAwMDIwMDBGMDA4NzgyNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMjg4MDAwMDIwMDBGMDA4ODgyNzEwMDQ5MDAwMDAwOUIzMzA0RDFEMAorOjEwMjg5MDAwMDIwMDBGMDA4OTgyNzEwMDNGMDAwMDAwODQxRDAwRERFRQorOjEwMjhBMDAwMDIwMDBGMDA4QTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjhCMDAwMDIwMDBGMDA4QjgyNzEwMDY5MDAwMDAwNjIzMTAwRERCMAorOjEwMjhDMDAwMDIwMDBGMDA4QzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ3QgorOjEwMjhEMDAwMDIwMDBGMDA4RDgyNzEwMDNGMDAwMDAwMDQxRTAwREQyOQorOjEwMjhFMDAwMDIwMDBGMDA4RTgyNzEwMDNGMDAwMDAwMDEwMDE4REQyMQorOjEwMjhGMDAwMDIwMDBGMDA4RjgyNzEwMDY5MDAwMDAwMUMwRTAwRERENQorOjEwMjkwMDAwMDIwMDBGMDA5MDgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjkxMDAwMDIwMDBGMDA5MTgyNzEwMDNGMDAwMDAwMDQwMTAwREQwMQorOjEwMjkyMDAwMDIwMDBGMDA5MjgyNzEwMDNGMDAwMDAwMDEwMDE4REREQworOjEwMjkzMDAwMDIwMDBGMDA5MzgyNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMjk0MDAwMDIwMDBGMDA5NDgyNzEwMDNGMDAwMDAwMDQwRjAwRERDMAorOjEwMjk1MDAwMDIwMDBGMDA5NTgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjk2MDAwMDIwMDBGMDA5NjgyNzEwMDdEMDAwMDAwMTNBNzYwQzc2RgorOjEwMjk3MDAwMDIwMDBGMDA5NzgyNzEwMDMxMDAwMDAwNDEwMDgwQzAwQQorOjEwMjk4MDAwMDIwMDBGMDA5ODgyNzEwMDMxMDAwMDAwNDgwMDAwQzQ2RQorOjEwMjk5MDAwMDIwMDBGMDA5OTgyNzEwMDMxMDAwMDAwNDUwMDgwQzJFMgorOjEwMjlBMDAwMDIwMDBGMDA5QTgyNzEwMDMxMDAwMDAwNkQwMDgwRDY5NQorOjEwMjlCMDAwMEYwMDBGMDA2NDAwNzAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMjlDMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDEwMDAwMDAwNDAwMDBDMgorOjEwMjlEMDAwNjQwMDAwMDA1NDAwMDAwMDAwMDAwMDAwMDAyNDAwMDAxQgorOjEwMjlFMDAwMDAyODAwMDAwMDA0MDAwMDgwMjgwMDAwODAwMTAwMDA5MgorOjEwMjlGMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMkEwMDAwNTEwMDAwMDA3RDAxMDAwMDA4MDAwMDAwNTEwMDAwMDA5RQorOjEwMkExMDAwNUQwMDAwMDAwMDAwMDAwMDA5MDAwMDAwMDA1MDAwMDAwMAorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDBGMDAwRjAwRjQwMTcwMDAyMworOjEwMkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDA1NgorOjEwMkE0MDAwMDAwMTAwMDAwMDA0MDAwMDY0MDAwMDAwNTQwMDAwMDBDOQorOjEwMkE1MDAwMDAwMDAwMDAwMDI0MDAwMDAwMjgwMDAwMDAwNDAwMDAyNgorOjEwMkE2MDAwODAyODAwMDA4MDAxMDAwMDAzMDAwMDAwMDAwMDAwMDAzQQorOjEwMkE3MDAwMDAwMDAwMDAwMDAwMDAwMDUxMDAwMDAwN0QwMTAwMDA4NworOjEwMkE4MDAwMDgwMDAwMDA1MTAwMDAwMDVEMDAwMDAwMDAwMDAwMDA5MAorOjEwMkE5MDAwMDkwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMkFBMDAwMDIwMDBGMDAwMDAwNzAwMDAxMDAwMDAwMDAwMDAwMDBBNAorOjEwMkFCMDAwMDIwMDBGMDAwMDAwNzAwMDAxMDAwMDAwMDAwMDAwMDA5NAorOjEwMkFDMDAwMDIwMDBGMDAwMDgwNzEwMDI1MDAwMDAwMDIwMDBFRERGMgorOjEwMkFEMDAwMDIwMDBGMDAwMTgwNzEwMDA0MDAwMDAwNzYzQkQxMDE2QworOjEwMkFFMDAwMDIwMDBGMDAwMjgwNzEwMDI1MDAwMDAwODIwMDBFREQ1MAorOjEwMkFGMDAwMDIwMDBGMDAwMzgwNzEwMDA0MDAwMDAwNzYzQjg5MDI5MQorOjEwMkIwMDAwMDIwMDBGMDAwNDgwNzEwMDI1MDAwMDAwMDIwMTBFRERBQworOjEwMkIxMDAwMDIwMDBGMDAwNTgwNzEwMDA0MDAwMDAwNzYzQjg1MDI3MgorOjEwMkIyMDAwMDIwMDBGMDAwNjgwNzEwMDI1MDAwMDAwODIwMTBFREQwQQorOjEwMkIzMDAwMDIwMDBGMDAwNzgwNzEwMDA0MDAwMDAwNzYzQkZEMDNENworOjEwMkI0MDAwMDIwMDBGMDAwODgwNzEwMDA5MDAwMDAwNzYzQjgxQ0Y3MQorOjEwMkI1MDAwMDIwMDBGMDAwOTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkI2MDAwMDIwMDBGMDAwQTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkI3MDAwMDIwMDBGMDAwQjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkI4MDAwMDIwMDBGMDAwQzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkI5MDAwMDIwMDBGMDAwRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkJBMDAwMDIwMDBGMDAwRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkJCMDAwMDIwMDBGMDAwRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkJDMDAwMDIwMDBGMDAxMDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkJEMDAwMDIwMDBGMDAxMTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkJFMDAwMDIwMDBGMDAxMjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkJGMDAwMDIwMDBGMDAxMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkMwMDAwMDIwMDBGMDAxNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMkMxMDAwMDIwMDBGMDAxNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMkMyMDAwMDIwMDBGMDAxNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMkMzMDAwMDIwMDBGMDAxNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkM0MDAwMDIwMDBGMDAxODgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkM1MDAwMDIwMDBGMDAxOTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkM2MDAwMDIwMDBGMDAxQTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkM3MDAwMDIwMDBGMDAxQjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkM4MDAwMDIwMDBGMDAxQzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkM5MDAwMDIwMDBGMDAxRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkNBMDAwMDIwMDBGMDAxRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkNCMDAwMDIwMDBGMDAxRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkNDMDAwMDIwMDBGMDAyMDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkNEMDAwMDIwMDBGMDAyMTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkNFMDAwMDIwMDBGMDAyMjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkNGMDAwMDIwMDBGMDAyMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMkQwMDAwMDIwMDBGMDAyNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMkQxMDAwMDIwMDBGMDAyNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMkQyMDAwMDIwMDBGMDAyNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkQzMDAwMDIwMDBGMDAyNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkQ0MDAwMDIwMDBGMDAyODgwNzEwMDQ5MDAwMDAwMDAzQjAwQzAxNQorOjEwMkQ1MDAwMDIwMDBGMDAyOTgwNzEwMDQ5MDAwMDAwMDIzQjgwQzA4MgorOjEwMkQ2MDAwMDIwMDBGMDAyQTgwNzEwMDQ5MDAwMDAwMDMzQjAwQzFFRgorOjEwMkQ3MDAwMDIwMDBGMDAyQjgwNzEwMDQ5MDAwMDAwMDQzQjgwQzE1RAorOjEwMkQ4MDAwMDIwMDBGMDAyQzgwNzEwMDI5MDAwMDAwNzYwMDYwREYzNworOjEwMkQ5MDAwMDIwMDBGMDAyRDgwNzEwMDQ5MDAwMDAwN0QzQjQ0REZFMAorOjEwMkRBMDAwMDIwMDBGMDAyRTgwNzEwMDc5MDAwMDAwNzY5MDYwRkQxNworOjEwMkRCMDAwMDIwMDBGMDAyRjgwNzEwMDNEMDAwMDAwNkYwMDgwRjdCRgorOjEwMkRDMDAwMDIwMDBGMDAzMDgwNzEwMDNEMDAwMDAwNkYwMDgwRjdBRQorOjEwMkREMDAwMDIwMDBGMDAzMTgwNzEwMDNEMDAwMDAwNkYwMDgwRjc5RAorOjEwMkRFMDAwMDIwMDBGMDAzMjgwNzEwMDNEMDAwMDAwNkYwMDgwRjc4QworOjEwMkRGMDAwMDIwMDBGMDAzMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMkUwMDAwMDIwMDBGMDAzNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMkUxMDAwMDIwMDBGMDAzNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkUyMDAwMDIwMDBGMDAzNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkUzMDAwMDIwMDBGMDAzNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkU0MDAwMDIwMDBGMDAzODgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkU1MDAwMDIwMDBGMDAzOTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkU2MDAwMDIwMDBGMDAzQTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkU3MDAwMDIwMDBGMDAzQjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkU4MDAwMDIwMDBGMDAzQzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkU5MDAwMDIwMDBGMDAzRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkVBMDAwMDIwMDBGMDAzRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkVCMDAwMDIwMDBGMDAzRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkVDMDAwMDIwMDBGMDA0MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkVEMDAwMDIwMDBGMDA0MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMkVFMDAwMDIwMDBGMDA0MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMkVGMDAwMDIwMDBGMDA0MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMkYwMDAwMDIwMDBGMDA0NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkYxMDAwMDIwMDBGMDA0NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkYyMDAwMDIwMDBGMDA0NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkYzMDAwMDIwMDBGMDA0NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkY0MDAwMDIwMDBGMDA0ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkY1MDAwMDIwMDBGMDA0OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkY2MDAwMDIwMDBGMDA0QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkY3MDAwMDIwMDBGMDA0QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkY4MDAwMDIwMDBGMDA0QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkY5MDAwMDIwMDBGMDA0RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkZBMDAwMDIwMDBGMDA0RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkZCMDAwMDIwMDBGMDA0RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkZDMDAwMDIwMDBGMDA1MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMkZEMDAwMDIwMDBGMDA1MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMkZFMDAwMDIwMDBGMDA1MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMkZGMDAwMDIwMDBGMDA1MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMzAwMDAwMDIwMDBGMDA1NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMzAxMDAwMDIwMDBGMDA1NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMzAyMDAwMDIwMDBGMDA1NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMzAzMDAwMDIwMDBGMDA1NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMzA0MDAwMDIwMDBGMDA1ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMzA1MDAwMDIwMDBGMDA1OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMzA2MDAwMDIwMDBGMDA1QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMzA3MDAwMDIwMDBGMDA1QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMzA4MDAwMDIwMDBGMDA1QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMzA5MDAwMDIwMDBGMDA1RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzBBMDAwMDIwMDBGMDA1RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzBCMDAwMDIwMDBGMDA1RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzBDMDAwMDIwMDBGMDA2MDgwNzEwMDNGMDAwMDAwMDMwMDAwREY3RAorOjEwMzBEMDAwMDIwMDBGMDA2MTgwNzEwMDJEMDAwMDAwODEwRkUwREQxMworOjEwMzBFMDAwMDIwMDBGMDA2MjgwNzEwMDNGMDAwMDAwODMwMjgwREQ1QgorOjEwMzBGMDAwMDIwMDBGMDA2MzgwNzEwMDJEMDAwMDAwODAwMTA0REREQworOjEwMzEwMDAwMDIwMDBGMDA2NDgwNzEwMDdEMDAwMDAwODAwMDE1RkQ0QQorOjEwMzExMDAwMDIwMDBGMDA2NTgwNzEwMDdBMDAwMDAwNzYzQjIwMTBFRAorOjEwMzEyMDAwMDIwMDBGMDA2NjgwNzEwMDdBMDAwMDAwNzY3QjIwMzA3QworOjEwMzEzMDAwMDIwMDBGMDA2NzgwNzEwMDIxMDAwMDAwNjAwMDI0RDBCMQorOjEwMzE0MDAwMDIwMDBGMDA2ODgwNzEwMDNGMDAwMDAwMDQwMTAwRERGNAorOjEwMzE1MDAwMDIwMDBGMDA2OTgwNzEwMDNGMDAwMDAwODEwMjQwREQyNQorOjEwMzE2MDAwMDIwMDBGMDA2QTgwNzEwMDc5MDAwMDAwMDNCQjMxRERBRQorOjEwMzE3MDAwMDIwMDBGMDA2QjgwNzEwMDc5MDAwMDAwMDRGQjMxREQ1QworOjEwMzE4MDAwMDIwMDBGMDA2QzgwNzEwMDc5MDAwMDAwNzZCQjMxREQxOQorOjEwMzE5MDAwMDIwMDBGMDA2RDgwNzEwMDc5MDAwMDAwNzZGQjMxRERDOAorOjEwMzFBMDAwMDIwMDBGMDA2RTgwNzEwMDc5MDAwMDAwMDEwMTIxRkQxNgorOjEwMzFCMDAwMDIwMDBGMDA2RjgwNzEwMDdEMDAwMDAwODE0MDJCRkQzOAorOjEwMzFDMDAwMDIwMDBGMDA3MDgwNzEwMDQwMDAwMDAwMDIzMDAwM0RERQorOjEwMzFEMDAwMDIwMDBGMDA3MTgwNzEwMDQ4MDAwMDAwMDIzQjAwMUREQQorOjEwMzFFMDAwMDIwMDBGMDA3MjgwNzEwMDc5MDAwMDAwNzY3QjIxREQwMworOjEwMzFGMDAwMDIwMDBGMDA3MzgwNzEwMDJEMDAwMDAwN0YwNTA0RERDOAorOjEwMzIwMDAwMDIwMDBGMDA3NDgwNzEwMDE4MDAwMDAwNzYzQjdGM0RDMworOjEwMzIxMDAwMDIwMDBGMDA3NTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcxNAorOjEwMzIyMDAwMDIwMDBGMDA3NjgwNzEwMDNEMDAwMDAwNkYwMDgwRjcwMworOjEwMzIzMDAwMDIwMDBGMDA3NzgwNzEwMDNEMDAwMDAwNkYwMDgwRjdGMgorOjEwMzI0MDAwMDIwMDBGMDA3ODgwNzEwMDIxMDAwMDAwNzYxRjM3RTMzNAorOjEwMzI1MDAwMDIwMDBGMDA3OTgwNzEwMDQ5MDAwMDAwNzkzQjAwREQxOQorOjEwMzI2MDAwMDIwMDBGMDA3QTgwNzEwMDc5MDAwMDAwNzZCQjIxREQzQQorOjEwMzI3MDAwMDIwMDBGMDA3QjgwNzEwMDQ5MDAwMDAwNzkzQjAwRERGNworOjEwMzI4MDAwMDIwMDBGMDA3QzgwNzEwMDc5MDAwMDAwNzZCQjIxREQxOAorOjEwMzI5MDAwMDIwMDBGMDA3RDgwNzEwMDQ5MDAwMDAwNzkzQjAwRERENQorOjEwMzJBMDAwMDIwMDBGMDA3RTgwNzEwMDc5MDAwMDAwNzZCQjIxRERGNgorOjEwMzJCMDAwMDIwMDBGMDA3RjgwNzEwMDc5MDAwMDAwNzY5MDYwRkRCMQorOjEwMzJDMDAwMDIwMDBGMDA4MDgwNzEwMDc5MDAwMDAwNzZGQjIxREQ5NAorOjEwMzJEMDAwMDIwMDBGMDA4MTgwNzEwMDNGMDAwMDAwODMwMDAwREZDQQorOjEwMzJFMDAwMDIwMDBGMDA4MjgwNzEwMDNEMDAwMDAwNkYwMDgwRjczNworOjEwMzJGMDAwMDIwMDBGMDA4MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMzMwMDAwMDIwMDBGMDA4NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMzMxMDAwMDIwMDBGMDA4NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMzMyMDAwMDIwMDBGMDA4NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMzMzMDAwMDIwMDBGMDA4NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMzM0MDAwMDIwMDBGMDA4ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMzM1MDAwMDIwMDBGMDA4OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMzM2MDAwMDIwMDBGMDA4QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzM3MDAwMDIwMDBGMDA4QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzM4MDAwMDIwMDBGMDA4QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzM5MDAwMDIwMDBGMDA4RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMzNBMDAwMDIwMDBGMDA4RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMzNCMDAwMDIwMDBGMDA4RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMzNDMDAwMDIwMDBGMDA5MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwMzNEMDAwMDIwMDBGMDA5MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMzNFMDAwMDIwMDBGMDA5MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMzNGMDAwMDIwMDBGMDA5MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwMzQwMDAwMDIwMDBGMDA5NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMzQxMDAwMDIwMDBGMDA5NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMzQyMDAwMDIwMDBGMDA5NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMzQzMDAwMDIwMDBGMDA5NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMzQ0MDAwMDIwMDBGMDA5ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMzQ1MDAwMDIwMDBGMDA5OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzQ2MDAwMDIwMDBGMDA5QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzQ3MDAwMDIwMDBGMDA5QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzQ4MDAwMDIwMDBGMDA5QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMzQ5MDAwMDIwMDBGMDA5RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMzRBMDAwMDIwMDBGMDA5RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMzRCMDAwMDIwMDBGMDA5RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwMzRDMDAwMDIwMDBGMDBBMDgwNzEwMDJEMDAwMDAwMDMwODA4RDA0QQorOjEwMzREMDAwMDIwMDBGMDBBMTgwNzEwMDA4MDAwMDAwNzZGQkI1MjFGQQorOjEwMzRFMDAwMDIwMDBGMDBBMjgwNzEwMDc5MDAwMDAwODEwMDAxREQ2MAorOjEwMzRGMDAwMDIwMDBGMDBBMzgwNzEwMDc5MDAwMDAwMDI4MTAxREQ0RAorOjEwMzUwMDAwMDIwMDBGMDBBNDgwNzEwMDdEMDAwMDAwODM4MDAxRkQ5NworOjEwMzUxMDAwMDIwMDBGMDBBNTgwNzEwMDc5MDAwMDAwNzYzQjkwRDA3QQorOjEwMzUyMDAwMDIwMDBGMDBBNjgwNzEwMDQ5MDAwMDAwN0EzQjU4RDBDRAorOjEwMzUzMDAwMDIwMDBGMDBBNzgwNzEwMDQ5MDAwMDAwMDAzQjA0RDI4OAorOjEwMzU0MDAwMDIwMDBGMDBBODgwNzEwMDNEMDAwMDAwMDMwMDQwREQ3NAorOjEwMzU1MDAwMDIwMDBGMDBBOTgwNzEwMDI0MDAwMDAwNjQwMjAwMzIwNAorOjEwMzU2MDAwMDIwMDBGMDBBQTgwNzEwMDNEMDAwMDAwMDNGODdGREQxQgorOjEwMzU3MDAwMDIwMDBGMDBBQjgwNzEwMDI5MDAwMDAwN0EwMTIwRDAwQQorOjEwMzU4MDAwMDIwMDBGMDBBQzgwNzEwMDQ5MDAwMDAwMEUzQkE0RDA4NworOjEwMzU5MDAwMDIwMDBGMDBBRDgwNzEwMDJEMDAwMDAwRkY0MjA0REQyRAorOjEwMzVBMDAwMDIwMDBGMDBBRTgwNzEwMDE4MDAwMDAwNzYzQjdGM0RFNgorOjEwMzVCMDAwMDIwMDBGMDBBRjgwNzEwMDJEMDAwMDAwODIwMDA2RERDOAorOjEwMzVDMDAwMDIwMDBGMDBCMDgwNzEwMDM4MDAwMDAwRTAwMTAwMzAwMAorOjEwMzVEMDAwMDIwMDBGMDBCMTgwNzEwMDM5MDAwMDAwNjAwMTAwRDBDRQorOjEwMzVFMDAwMDIwMDBGMDBCMjgwNzEwMDc5MDAwMDAwN0MzQkIxRDE3NQorOjEwMzVGMDAwMDIwMDBGMDBCMzgwNzEwMDJEMDAwMDAwRTMwRkUwREQzQQorOjEwMzYwMDAwMDIwMDBGMDBCNDgwNzEwMDQ5MDAwMDAwRTQzMDgwRDA1NworOjEwMzYxMDAwMDIwMDBGMDBCNTgwNzEwMDc5MDAwMDAwN0M3QjMxREQ3NQorOjEwMzYyMDAwMDIwMDBGMDBCNjgwNzEwMDc5MDAwMDAwN0MzQjMxRERBNAorOjEwMzYzMDAwMDIwMDBGMDBCNzgwNzEwMDdEMDAwMDAwODI0MDM3RkQ1RQorOjEwMzY0MDAwMDIwMDBGMDBCODgwNzEwMDA4MDAwMDAwNzYzQjdEMDE4OQorOjEwMzY1MDAwMDIwMDBGMDBCOTgwNzEwMDNEMDAwMDAwNkYwMDgwRjc4QworOjEwMzY2MDAwMDIwMDBGMDBCQTgwNzEwMDNEMDAwMDAwNkYwMDgwRjc3QgorOjEwMzY3MDAwMDIwMDBGMDBCQjgwNzEwMDQ5MDAwMDAwODcwMzAwRERERAorOjEwMzY4MDAwMDIwMDBGMDBCQzgwNzEwMDc5MDAwMDAwMDgwNDMxRERFOQorOjEwMzY5MDAwMDIwMDBGMDBCRDgwNzEwMDc5MDAwMDAwN0E3RDMxRERFRAorOjEwMzZBMDAwMDIwMDBGMDBCRTgwNzEwMDQ5MDAwMDAwN0MzQjAwRDM4NworOjEwMzZCMDAwMDIwMDBGMDBCRjgwNzEwMDc5MDAwMDAwN0NCQjgxRDM0NQorOjEwMzZDMDAwMDIwMDBGMDBDMDgwNzEwMDdGMDAwMDAwN0NCMjAxRDFCOQorOjEwMzZEMDAwMDIwMDBGMDBDMTgwNzEwMDQ4MDAwMDAwNjQzMjAwNTFGOAorOjEwMzZFMDAwMDIwMDBGMDBDMjgwNzEwMDNEMDAwMDAwMDMwMDQwRERCOQorOjEwMzZGMDAwMDIwMDBGMDBDMzgwNzEwMDA4MDAwMDAwNjIzMTk1MDFENAorOjEwMzcwMDAwMDIwMDBGMDBDNDgwNzEwMDIxMDAwMDAwNjYwNjAwRDM5MworOjEwMzcxMDAwMDIwMDBGMDBDNTgwNzEwMDIwMDAwMDAwRTcwMDgwNTMwOAorOjEwMzcyMDAwMDIwMDBGMDBDNjgwNzEwMDNGMDAwMDAwMDAwODAwRERBRAorOjEwMzczMDAwMDIwMDBGMDBDNzgwNzEwMDc5MDAwMDAwNjZCMzAxREQ1MAorOjEwMzc0MDAwMDIwMDBGMDBDODgwNzEwMDc5MDAwMDAwRTdCMzAxRERCRQorOjEwMzc1MDAwMDIwMDBGMDBDOTgwNzEwMDc1MDAwMDAwNjI4NjAxRjE0RgorOjEwMzc2MDAwMDIwMDBGMDBDQTgwNzEwMDc1MDAwMDAwNjRCMTAxRDIzMAorOjEwMzc3MDAwMDIwMDBGMDBDQjgwNzEwMDc4MDAwMDAwNzY3QjAwMURGNgorOjEwMzc4MDAwMDIwMDBGMDBDQzgwNzEwMDI1MDAwMDAwRTMwMTAwREQ4NQorOjEwMzc5MDAwMDIwMDBGMDBDRDgwNzEwMDA4MDAwMDAwNjIzMUIxMDEwRAorOjEwMzdBMDAwMDIwMDBGMDBDRTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyNgorOjEwMzdCMDAwMDIwMDBGMDBDRjgwNzEwMDNEMDAwMDAwNkYwMDgwRjcxNQorOjEwMzdDMDAwMDIwMDBGMDBEMDgwNzEwMDNEMDAwMDAwNkYwMDgwRjcwNAorOjEwMzdEMDAwMDIwMDBGMDBEMTgwNzEwMDIxMDAwMDAwNjM5RjM3RTNEOQorOjEwMzdFMDAwMDIwMDBGMDBEMjgwNzEwMDQ5MDAwMDAwN0MzQjAwRDMzMgorOjEwMzdGMDAwMDIwMDBGMDBEMzgwNzEwMDc5MDAwMDAwN0NCQjgxRDNGMAorOjEwMzgwMDAwMDIwMDBGMDBENDgwNzEwMDdGMDAwMDAwN0NCMjAxRDE2MworOjEwMzgxMDAwMDIwMDBGMDBENTgwNzEwMDQ4MDAwMDAwNjQzMjAwNTFBMgorOjEwMzgyMDAwMDIwMDBGMDBENjgwNzEwMDc1MDAwMDAwNjRCMTAxRDI2MworOjEwMzgzMDAwMDIwMDBGMDBENzgwNzEwMDc4MDAwMDAwNzY3QjAwMUQyOQorOjEwMzg0MDAwMDIwMDBGMDBEODgwNzEwMDNGMDAwMDAwMDQwMDAwREQ3RQorOjEwMzg1MDAwMDIwMDBGMDBEOTgwNzEwMDc5MDAwMDAwODFDMDAxRERGNQorOjEwMzg2MDAwMDIwMDBGMDBEQTgwNzEwMDc5MDAwMDAwNzY5MDYwRkRBMAorOjEwMzg3MDAwMDIwMDBGMDBEQjgwNzEwMDJEMDAwMDAwMDMwODA4REQ0RQorOjEwMzg4MDAwMDIwMDBGMDBEQzgwNzEwMDc4MDAwMDAwODFDMDAxM0Q2MworOjEwMzg5MDAwMDIwMDBGMDBERDgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyNgorOjEwMzhBMDAwMDIwMDBGMDBERTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwMzhCMDAwMDIwMDBGMDBERjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMzhDMDAwMDIwMDBGMDBFMDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMzhEMDAwMDIwMDBGMDBFMTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMzhFMDAwMDIwMDBGMDBFMjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMzhGMDAwMDIwMDBGMDBFMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMzkwMDAwMDIwMDBGMDBFNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzkxMDAwMDIwMDBGMDBFNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzkyMDAwMDIwMDBGMDBFNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzkzMDAwMDIwMDBGMDBFNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMzk0MDAwMDIwMDBGMDBFODgwNzEwMDQ5MDAwMDAwMDMzQjhFRDFBNworOjEwMzk1MDAwMDIwMDBGMDBFOTgwNzEwMDJGMDAwMDAwRTMwMDgxRDExOAorOjEwMzk2MDAwMDIwMDBGMDBFQTgwNzEwMDNGMDAwMDAwMDMxODgwRDFDMAorOjEwMzk3MDAwMDIwMDBGMDBFQjgwNzEwMDQ5MDAwMDAwMDMzQjA0RDFGRQorOjEwMzk4MDAwMDIwMDBGMDBFQzgwNzEwMDNGMDAwMDAwMDMwMjgwRERBOAorOjEwMzk5MDAwMDIwMDBGMDBFRDgwNzEwMDQ5MDAwMDAwMDIzQjA0RDJEQworOjEwMzlBMDAwMDIwMDBGMDBFRTgwNzEwMDQ5MDAwMDAwMDAzQjg0RDI0RAorOjEwMzlCMDAwMDIwMDBGMDBFRjgwNzEwMDI1MDAwMDAwRTIwMDAwREQzMgorOjEwMzlDMDAwMDIwMDBGMDBGMDgwNzEwMDk0MDAwMDAwNjI0MTEzMDBCQgorOjEwMzlEMDAwMDIwMDBGMDBGMTgwNzEwMDk0MDAwMDAwNjI0MzBCMDBCMAorOjEwMzlFMDAwMDIwMDBGMDBGMjgwNzEwMDk0MDAwMDAwRTI0ODE1MDAxMAorOjEwMzlGMDAwMDIwMDBGMDBGMzgwNzEwMDk0MDAwMDAwNjI0OTFCMDA3OAorOjEwM0EwMDAwMDIwMDBGMDBGNDgwNzEwMDk0MDAwMDAwNzY0MDJGMDA0NworOjEwM0ExMDAwMDIwMDBGMDBGNTgwNzEwMDA5MDAwMDAwN0EzRDgxQ0Y5RgorOjEwM0EyMDAwMDIwMDBGMDBGNjgwNzEwMDFEMDAwMDAwRTU4MDJCRkRGNAorOjEwM0EzMDAwMDIwMDBGMDBGNzgwNzEwMDMwMDAwMDAwNjM4MDgzMzFDNgorOjEwM0E0MDAwMDIwMDBGMDBGODgwNzEwMDMwMDAwMDAwNjM4MDgyMTFENgorOjEwM0E1MDAwMDIwMDBGMDBGOTgwNzEwMDFEMDAwMDAwRTU4MDI1RkRDNworOjEwM0E2MDAwMDIwMDBGMDBGQTgwNzEwMDMwMDAwMDAwNjMwMDgzMzExMworOjEwM0E3MDAwMDIwMDBGMDBGQjgwNzEwMDMwMDAwMDAwNjMwMDgyMTEyMworOjEwM0E4MDAwMDIwMDBGMDBGQzgwNzEwMDJGMDAwMDAwRTMwMDgxRDFENAorOjEwM0E5MDAwMDIwMDBGMDBGRDgwNzEwMDFEMDAwMDAwRTU4MDA5RkQ5RgorOjEwM0FBMDAwMDIwMDBGMDBGRTgwNzEwMDMwMDAwMDAwNjNEMzgzMzFGQworOjEwM0FCMDAwMDIwMDBGMDBGRjgwNzEwMDMwMDAwMDAwNjNEMjgzMTEwQworOjEwM0FDMDAwMDIwMDBGMDAwMDgxNzEwMDJGMDAwMDAwRTMwMDgxRDE4RgorOjEwM0FEMDAwMDIwMDBGMDAwMTgxNzEwMDNGMDAwMDAwODQwMTgwRDZDOAorOjEwM0FFMDAwMDIwMDBGMDAwMjgxNzEwMDNGMDAwMDAwMDEwMDgwRDYzQgorOjEwM0FGMDAwMDIwMDBGMDAwMzgxNzEwMDM1MDAwMDAwRUQwMDgwRDY0OAorOjEwM0IwMDAwMDIwMDBGMDAwNDgxNzEwMDE4MDAwMDAwODEwMEZGMzdERgorOjEwM0IxMDAwMDIwMDBGMDAwNTgxNzEwMDI1MDAwMDAwNjQwMjAwRDI0MAorOjEwM0IyMDAwMDIwMDBGMDAwNjgxNzEwMDE4MDAwMDAwN0FGRDc3N0QwOQorOjEwM0IzMDAwMDIwMDBGMDAwNzgxNzEwMDQ5MDAwMDAwNjMzQjIwREU5NgorOjEwM0I0MDAwMDIwMDBGMDAwODgxNzEwMDQ5MDAwMDAwNzkzQjgwREUwRgorOjEwM0I1MDAwMDIwMDBGMDAwOTgxNzEwMDIxMDAwMDAwRTMwMDgwRDEwNAorOjEwM0I2MDAwMDIwMDBGMDAwQTgxNzEwMDA5MDAwMDAwN0EzRDgxQ0YzOAorOjEwM0I3MDAwMDIwMDBGMDAwQjgxNzEwMDQ5MDAwMDAwRTMzMTAwRERGRAorOjEwM0I4MDAwMDIwMDBGMDAwQzgxNzEwMDY5MDAwMDAwNzgzQjBFREQxRgorOjEwM0I5MDAwMDIwMDBGMDAwRDgxNzEwMDYxMDAwMDAwNzYzQjAwREQyNgorOjEwM0JBMDAwMDIwMDBGMDAwRTgxNzEwMDNGMDAwMDAwODQwMTAwREQ2MworOjEwM0JCMDAwMDIwMDBGMDAwRjgxNzEwMDNGMDAwMDAwMDEwMDAwRERENgorOjEwM0JDMDAwMDIwMDBGMDAxMDgxNzEwMDM1MDAwMDAwRkEwMDAwRERENgorOjEwM0JEMDAwMDIwMDBGMDAxMTgxNzEwMDE4MDAwMDAwNzYzQjdGM0I0RQorOjEwM0JFMDAwMDIwMDBGMDAxMjgxNzEwMDNEMDAwMDAwNkYwMDgwRjc5RAorOjEwM0JGMDAwMDIwMDBGMDAxMzgxNzEwMDNEMDAwMDAwNkYwMDgwRjc4QworOjEwM0MwMDAwMDIwMDBGMDAxNDgxNzEwMDNEMDAwMDAwNkYwMDgwRjc3QQorOjEwM0MxMDAwMDIwMDBGMDAxNTgxNzEwMDIxMDAwMDAwRTMwMDgwRDEzNworOjEwM0MyMDAwMDIwMDBGMDAxNjgxNzEwMDY5MDAwMDAwNzkzQjA0REQ3RAorOjEwM0MzMDAwMDIwMDBGMDAxNzgxNzEwMDYxMDAwMDAwRTMwMDgwRjFCNQorOjEwM0M0MDAwMDIwMDBGMDAxODgxNzEwMDNGMDAwMDAwODQwMTgwRDYzRgorOjEwM0M1MDAwMDIwMDBGMDAxOTgxNzEwMDNGMDAwMDAwMDEwMDgwRDZCMgorOjEwM0M2MDAwMDIwMDBGMDAxQTgxNzEwMDM1MDAwMDAwRUQwMDgwRDZCRgorOjEwM0M3MDAwMDIwMDBGMDAxQjgxNzEwMDE4MDAwMDAwODEwMEZGMzc1NworOjEwM0M4MDAwMDIwMDBGMDAxQzgxNzEwMDI1MDAwMDAwNjQwMjAwRDJCOAorOjEwM0M5MDAwMDIwMDBGMDAxRDgxNzEwMDk4MDAwMDAwNzZCQjVENjA3RQorOjEwM0NBMDAwMDIwMDBGMDAxRTgxNzEwMDA5MDAwMDAwN0EzRDgxQ0ZFMworOjEwM0NCMDAwMDIwMDBGMDAxRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0NDMDAwMDIwMDBGMDAyMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwM0NEMDAwMDIwMDBGMDAyMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwM0NFMDAwMDIwMDBGMDAyMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwM0NGMDAwMDIwMDBGMDAyMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwM0QwMDAwMDIwMDBGMDAyNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwM0QxMDAwMDIwMDBGMDAyNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwM0QyMDAwMDIwMDBGMDAyNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwM0QzMDAwMDIwMDBGMDAyNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwM0Q0MDAwMDIwMDBGMDAyODgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwM0Q1MDAwMDIwMDBGMDAyOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwM0Q2MDAwMDIwMDBGMDAyQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwM0Q3MDAwMDIwMDBGMDAyQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwM0Q4MDAwMDIwMDBGMDAyQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwM0Q5MDAwMDIwMDBGMDAyRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwM0RBMDAwMDIwMDBGMDAyRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0RCMDAwMDIwMDBGMDAyRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwM0RDMDAwMDIwMDBGMDAzMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwM0REMDAwMDIwMDBGMDAzMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwM0RFMDAwMDIwMDBGMDAzMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwM0RGMDAwMDIwMDBGMDAzMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwM0UwMDAwMDIwMDBGMDAzNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwM0UxMDAwMDIwMDBGMDAzNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwM0UyMDAwMDIwMDBGMDAzNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwM0UzMDAwMDIwMDBGMDAzNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwM0U0MDAwMDIwMDBGMDAzODgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwM0U1MDAwMDIwMDBGMDAzOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwM0U2MDAwMDIwMDBGMDAzQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwM0U3MDAwMDIwMDBGMDAzQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwM0U4MDAwMDIwMDBGMDAzQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwM0U5MDAwMDIwMDBGMDAzRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0VBMDAwMDIwMDBGMDAzRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwM0VCMDAwMDIwMDBGMDAzRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwM0VDMDAwMDIwMDBGMDA0MDgxNzEwMDQ5MDAwMDAwMDEzQjA4RDQ0RQorOjEwM0VEMDAwMDIwMDBGMDA0MTgxNzEwMDA5MDAwMDAwN0EzRDhCQzI5MQorOjEwM0VFMDAwMDIwMDBGMDA0MjgxNzEwMDNGMDAwMDAwODAwMzAwRDRGNworOjEwM0VGMDAwMDIwMDBGMDA0MzgxNzEwMDA5MDAwMDAwN0EzRDhCQzI2RgorOjEwM0YwMDAwMDIwMDBGMDA0NDgxNzEwMDQ5MDAwMDAwMDMzQjBFRDQwMQorOjEwM0YxMDAwMDIwMDBGMDA0NTgxNzEwMDNGMDAwMDAwMDAwMDQyRDYwMgorOjEwM0YyMDAwMDIwMDBGMDA0NjgxNzEwMDJGMDAwMDAwODA0MDgxRDIwNgorOjEwM0YzMDAwMDIwMDBGMDA0NzgxNzEwMDJEMDAwMDAwNjUwMzg0RDI0QworOjEwM0Y0MDAwMDIwMDBGMDA0ODgxNzEwMDNGMDAwMDAwODAwMDgwRDYxMQorOjEwM0Y1MDAwMDIwMDBGMDA0OTgxNzEwMDNGMDAwMDAwMDQwMDA0RERGMQorOjEwM0Y2MDAwMDIwMDBGMDA0QTgxNzEwMDNGMDAwMDAwMDEwMDE4RERDRgorOjEwM0Y3MDAwMDIwMDBGMDA0QjgxNzEwMDY5MDAwMDAwNkQzQjAwREQwNQorOjEwM0Y4MDAwMDIwMDBGMDA0QzgxNzEwMDY5MDAwMDAwNkQzQjAwRERGNAorOjEwM0Y5MDAwMDIwMDBGMDA0RDgxNzEwMDMxMDAwMDAwNjVEMjAzRDM5MworOjEwM0ZBMDAwMDIwMDBGMDA0RTgxNzEwMDQ5MDAwMDAwNjYzQjQwREVCOAorOjEwM0ZCMDAwMDIwMDBGMDA0RjgxNzEwMDNGMDAwMDAwODQwMTgwRDY5NQorOjEwM0ZDMDAwMDIwMDBGMDA1MDgxNzEwMDNGMDAwMDAwMDEwMDgwRDYwOAorOjEwM0ZEMDAwMDIwMDBGMDA1MTgxNzEwMDM1MDAwMDAwRUQwMDgwRDYxNQorOjEwM0ZFMDAwMDIwMDBGMDA1MjgxNzEwMDE4MDAwMDAwODEwMEZGMzdBRAorOjEwM0ZGMDAwMDIwMDBGMDA1MzgxNzEwMDQ5MDAwMDAwN0UzQjgwRDUxNAorOjEwNDAwMDAwMDIwMDBGMDA1NDgxNzEwMDIxMDAwMDAwRTYwMDQwREUzNAorOjEwNDAxMDAwMDIwMDBGMDA1NTgxNzEwMDNGMDAwMDAwODQwMTgwRDYyRQorOjEwNDAyMDAwMDIwMDBGMDA1NjgxNzEwMDNGMDAwMDAwMDEwMDgwRDZBMQorOjEwNDAzMDAwMDIwMDBGMDA1NzgxNzEwMDM1MDAwMDAwRUQwMDgwRDZBRQorOjEwNDA0MDAwMDIwMDBGMDA1ODgxNzEwMDE4MDAwMDAwODEwMEZGMzc0NgorOjEwNDA1MDAwMDIwMDBGMDA1OTgxNzEwMDQ5MDAwMDAwN0UzQjAwRDUyRAorOjEwNDA2MDAwMDIwMDBGMDA1QTgxNzEwMDc5MDAwMDAwNzYzQjAxRERFQgorOjEwNDA3MDAwMDIwMDBGMDA1QjgxNzEwMDJEMDAwMDAwN0Y0MDA0REQxNQorOjEwNDA4MDAwMDIwMDBGMDA1QzgxNzEwMDE4MDAwMDAwNzYzQjdGM0Q0QworOjEwNDA5MDAwMDIwMDBGMDA1RDgxNzEwMDc5MDAwMDAwNzZCQjAxREQzOAorOjEwNDBBMDAwMDIwMDBGMDA1RTgxNzEwMDc1MDAwMDAwRTg4MDAxRkRENAorOjEwNDBCMDAwMDIwMDBGMDA1RjgxNzEwMDk0MDAwMDAwNjg0MTE1MDA0QworOjEwNDBDMDAwMDIwMDBGMDA2MDgxNzEwMDk0MDAwMDAwRTg0NDI1MDBBOAorOjEwNDBEMDAwMDIwMDBGMDA2MTgxNzEwMDk0MDAwMDAwRTg0MTIzMDA5QworOjEwNDBFMDAwMDIwMDBGMDA2MjgxNzEwMDk0MDAwMDAwNjg0NTE3MDAxMworOjEwNDBGMDAwMDIwMDBGMDA2MzgxNzEwMDk0MDAwMDAwNjg0MjE1MDAwNworOjEwNDEwMDAwMDIwMDBGMDA2NDgxNzEwMDk0MDAwMDAwRTg0MjI3MDA2MworOjEwNDExMDAwMDIwMDBGMDA2NTgxNzEwMDk0MDAwMDAwNjg0MzJEMDBDQgorOjEwNDEyMDAwMDIwMDBGMDA2NjgxNzEwMDk0MDAwMDAwNjg0NDJEMDBCOQorOjEwNDEzMDAwMDIwMDBGMDA2NzgxNzEwMDk0MDAwMDAwRTg0MzMzMDAyMworOjEwNDE0MDAwMDIwMDBGMDA2ODgxNzEwMDA0MDAwMDAwNzYzQjk3MDNCNQorOjEwNDE1MDAwMDIwMDBGMDA2OTgxNzEwMDBEMDAwMDAwNjVDMTBERTNEMAorOjEwNDE2MDAwMDIwMDBGMDA2QTgxNzEwMDMwMDAwMDAwNzYwMDAzMzIwNworOjEwNDE3MDAwMDIwMDBGMDA2QjgxNzEwMDMwMDAwMDAwNzYwMDAyMTIxNworOjEwNDE4MDAwMDIwMDBGMDA2QzgxNzEwMDNGMDAwMDAwMDAwMDgwRDQyRAorOjEwNDE5MDAwMDIwMDBGMDA2RDgxNzEwMDNGMDAwMDAwMDA4MDgwRDE5RgorOjEwNDFBMDAwMDIwMDBGMDA2RTgxNzEwMDBEMDAwMDAwNjVDMTNGRTM0OQorOjEwNDFCMDAwMDIwMDBGMDA2RjgxNzEwMDMwMDAwMDAwNzY2MDA0MzI1MQorOjEwNDFDMDAwMDIwMDBGMDA3MDgxNzEwMDMwMDAwMDAwNzY0MDA0MTI4MAorOjEwNDFEMDAwMDIwMDBGMDA3MTgxNzEwMDNGMDAwMDAwMDA4MDgyRDQ1NgorOjEwNDFFMDAwMDIwMDBGMDA3MjgxNzEwMDNGMDAwMDAwMDA4MDgwRDE0QQorOjEwNDFGMDAwMDIwMDBGMDA3MzgxNzEwMDBEMDAwMDAwNjVDMTNGRTNGNAorOjEwNDIwMDAwMDIwMDBGMDA3NDgxNzEwMDMwMDAwMDAwNzYyMDA0MzIzQgorOjEwNDIxMDAwMDIwMDBGMDA3NTgxNzEwMDMwMDAwMDAwNzYwMDA0MTI2QQorOjEwNDIyMDAwMDIwMDBGMDA3NjgxNzEwMDNGMDAwMDAwMDAwMDgyRDQ4MAorOjEwNDIzMDAwMDIwMDBGMDA3NzgxNzEwMDBEMDAwMDAwNjVDMTYzRTM4QgorOjEwNDI0MDAwMDIwMDBGMDA3ODgxNzEwMDMwMDAwMDAwNzYyMDAzMzJGOAorOjEwNDI1MDAwMDIwMDBGMDA3OTgxNzEwMDMwMDAwMDAwNzYwMDAzMTIyNworOjEwNDI2MDAwMDIwMDBGMDA3QTgxNzEwMDNGMDAwMDAwMDAwMDgzRDQzQgorOjEwNDI3MDAwMDIwMDBGMDA3QjgxNzEwMDQ5MDAwMDAwNzYzQjgwRDI3NAorOjEwNDI4MDAwMDIwMDBGMDA3QzgxNzEwMDBEMDAwMDAwNjVDMTBERTM4QworOjEwNDI5MDAwMDIwMDBGMDA3RDgxNzEwMDMwMDAwMDAwNzY4MDAzMzI0MworOjEwNDJBMDAwMDIwMDBGMDA3RTgxNzEwMDMwMDAwMDAwNzY4MDAyMTI1MworOjEwNDJCMDAwMDIwMDBGMDA3RjgxNzEwMDNGMDAwMDAwMDAwMDgxRDRFOAorOjEwNDJDMDAwMDIwMDBGMDA4MDgxNzEwMDNGMDAwMDAwMDAwMDAyRDY1NAorOjEwNDJEMDAwMDIwMDBGMDA4MTgxNzEwMDNGMDAwMDAwMDAwMDgxRDFDOQorOjEwNDJFMDAwMDIwMDBGMDA4MjgxNzEwMDBEMDAwMDAwNjVDMTNGRTNGNAorOjEwNDJGMDAwMDIwMDBGMDA4MzgxNzEwMDMwMDAwMDAwNzYyMDA0MzIzQworOjEwNDMwMDAwMDIwMDBGMDA4NDgxNzEwMDMwMDAwMDAwNzYwMDA0MTI2QQorOjEwNDMxMDAwMDIwMDBGMDA4NTgxNzEwMDNGMDAwMDAwMDAwMDgyRDQ4MAorOjEwNDMyMDAwMDIwMDBGMDA4NjgxNzEwMDQxMDAwMDAwRUIzNDgwRDQ1MAorOjEwNDMzMDAwMDIwMDBGMDA4NzgxNzEwMDc5MDAwMDAwNkFCQjAxREQ3NworOjEwNDM0MDAwMDIwMDBGMDA4ODgxNzEwMDc5MDAwMDAwNzZCQjAxREQ1QQorOjEwNDM1MDAwMDIwMDBGMDA4OTgxNzEwMDNGMDAwMDAwMDMxODAwRDJBNQorOjEwNDM2MDAwMDIwMDBGMDA4QTgxNzEwMDNGMDAwMDAwMDAwMDgxRDEyRgorOjEwNDM3MDAwMDIwMDBGMDA4QjgxNzEwMDc1MDAwMDAwNjM4MDAxRkQ1OQorOjEwNDM4MDAwMDIwMDBGMDA4QzgxNzEwMDk4MDAwMDAwNjQzQjY5ODA3RQorOjEwNDM5MDAwMDIwMDBGMDA4RDgxNzEwMDUxMDAwMDAwRTQwMDAwRjI2NgorOjEwNDNBMDAwMDIwMDBGMDA4RTgxNzEwMDNGMDAwMDAwODQwMTgwRDY2MgorOjEwNDNCMDAwMDIwMDBGMDA4RjgxNzEwMDNGMDAwMDAwMDEwMDgwRDZENQorOjEwNDNDMDAwMDIwMDBGMDA5MDgxNzEwMDM1MDAwMDAwRUQwMDgwRDZFMgorOjEwNDNEMDAwMDIwMDBGMDA5MTgxNzEwMDE4MDAwMDAwODEwMEZGMzc3QQorOjEwNDNFMDAwMDIwMDBGMDA5MjgxNzEwMDJEMDAwMDAwN0Y0MDA0REQ2QgorOjEwNDNGMDAwMDIwMDBGMDA5MzgxNzEwMDE4MDAwMDAwNzYzQjdGM0RBMgorOjEwNDQwMDAwMDIwMDBGMDA5NDgxNzEwMDQ5MDAwMDAwMzgzQkMwRDNDNgorOjEwNDQxMDAwMDIwMDBGMDA5NTgxNzEwMDQ5MDAwMDAwNjQzQjAwREQzRgorOjEwNDQyMDAwMDIwMDBGMDA5NjgxNzEwMDUxMDAwMDAwRTQwMDAwRjJDQworOjEwNDQzMDAwMDIwMDBGMDA5NzgxNzEwMDNGMDAwMDAwODQwMTgwRDZDOAorOjEwNDQ0MDAwMDIwMDBGMDA5ODgxNzEwMDNGMDAwMDAwMDEwMDgwRDYzQgorOjEwNDQ1MDAwMDIwMDBGMDA5OTgxNzEwMDM1MDAwMDAwRUQwMDgwRDY0OAorOjEwNDQ2MDAwMDIwMDBGMDA5QTgxNzEwMDE4MDAwMDAwODEwMEZGMzdFMAorOjEwNDQ3MDAwMDIwMDBGMDA5QjgxNzEwMDQ5MDAwMDAwMzgzQkEwRDM2RgorOjEwNDQ4MDAwMDIwMDBGMDA5QzgxNzEwMDE5MDAwMDAwNzZCQjYxREQwNQorOjEwNDQ5MDAwMDIwMDBGMDA5RDgxNzEwMDQ5MDAwMDAwNjczQjAwRERCNAorOjEwNDRBMDAwMDIwMDBGMDA5RTgxNzEwMDc1MDAwMDAwNjM4MjgxRjE5RgorOjEwNDRCMDAwMDIwMDBGMDA5RjgxNzEwMDQxMDAwMDAwRUIzNDgwRDRBNgorOjEwNDRDMDAwMDIwMDBGMDBBMDgxNzEwMDc5MDAwMDAwNkFCQjAxRERDRAorOjEwNDREMDAwMDIwMDBGMDBBMTgxNzEwMDc5MDAwMDAwNzZCQjAxRERCMAorOjEwNDRFMDAwMDIwMDBGMDBBMjgxNzEwMDNGMDAwMDAwMDMxODAwRDJGQgorOjEwNDRGMDAwMDIwMDBGMDBBMzgxNzEwMDNGMDAwMDAwMDA4MDgwRDEwNgorOjEwNDUwMDAwMDIwMDBGMDBBNDgxNzEwMDc1MDAwMDAwNjM4MDAxRkRBRQorOjEwNDUxMDAwMDIwMDBGMDBBNTgxNzEwMDk4MDAwMDAwNjQzQjM3ODAwNQorOjEwNDUyMDAwMDIwMDBGMDBBNjgxNzEwMDUxMDAwMDAwRTQwMDAwRjJCQgorOjEwNDUzMDAwMDIwMDBGMDBBNzgxNzEwMDNGMDAwMDAwODQwMTgwRDZCNworOjEwNDU0MDAwMDIwMDBGMDBBODgxNzEwMDNGMDAwMDAwMDEwMDgwRDYyQQorOjEwNDU1MDAwMDIwMDBGMDBBOTgxNzEwMDM1MDAwMDAwRUQwMDgwRDYzNworOjEwNDU2MDAwMDIwMDBGMDBBQTgxNzEwMDE4MDAwMDAwODEwMEZGMzdDRgorOjEwNDU3MDAwMDIwMDBGMDBBQjgxNzEwMDJEMDAwMDAwN0Y0MDA0RERDMAorOjEwNDU4MDAwMDIwMDBGMDBBQzgxNzEwMDE4MDAwMDAwNzYzQjdGM0RGNworOjEwNDU5MDAwMDIwMDBGMDBBRDgxNzEwMDQ5MDAwMDAwMzgzQjgwRDM1QworOjEwNDVBMDAwMDIwMDBGMDBBRTgxNzEwMDE5MDAwMDAwNzZCQjZGRERDNAorOjEwNDVCMDAwMDIwMDBGMDBBRjgxNzEwMDQ5MDAwMDAwNjczQjAwREQ4MQorOjEwNDVDMDAwMDIwMDBGMDBCMDgxNzEwMDc1MDAwMDAwNjM4MjgxRjE2QworOjEwNDVEMDAwMDIwMDBGMDBCMTgxNzEwMDQxMDAwMDAwRUIzNDgwRDQ3MworOjEwNDVFMDAwMDIwMDBGMDBCMjgxNzEwMDc5MDAwMDAwNkFCQjAxREQ5QQorOjEwNDVGMDAwMDIwMDBGMDBCMzgxNzEwMDc5MDAwMDAwNjNCQjAxREQ5MAorOjEwNDYwMDAwMDIwMDBGMDBCNDgxNzEwMDc1MDAwMDAwNjM4MDAxRkQ5RAorOjEwNDYxMDAwMDIwMDBGMDBCNTgxNzEwMDk4MDAwMDAwNjQzQjE3ODAxNAorOjEwNDYyMDAwMDIwMDBGMDBCNjgxNzEwMDQ5MDAwMDAwNjQzQjQwREVDQgorOjEwNDYzMDAwMDIwMDBGMDBCNzgxNzEwMDNGMDAwMDAwODQwMTgwRDZBNgorOjEwNDY0MDAwMDIwMDBGMDBCODgxNzEwMDNGMDAwMDAwMDEwMDgwRDYxOQorOjEwNDY1MDAwMDIwMDBGMDBCOTgxNzEwMDM1MDAwMDAwRUQwMDgwRDYyNgorOjEwNDY2MDAwMDIwMDBGMDBCQTgxNzEwMDE4MDAwMDAwODEwMEZGMzdCRQorOjEwNDY3MDAwMDIwMDBGMDBCQjgxNzEwMDJEMDAwMDAwN0Y0MDA0RERBRgorOjEwNDY4MDAwMDIwMDBGMDBCQzgxNzEwMDE4MDAwMDAwNzYzQjdGM0RFNgorOjEwNDY5MDAwMDIwMDBGMDBCRDgxNzEwMDIxMDAwMDAwRTQwMDAwRDI4MworOjEwNDZBMDAwMDIwMDBGMDBCRTgxNzEwMDE5MDAwMDAwN0U3QkVGRDM3NQorOjEwNDZCMDAwMDIwMDBGMDBCRjgxNzEwMDc1MDAwMDAwNjM4MjgxRjE2QworOjEwNDZDMDAwMDIwMDBGMDBDMDgxNzEwMDNGMDAwMDAwMDAwMDgwRDY5MgorOjEwNDZEMDAwMDIwMDBGMDBDMTgxNzEwMDNGMDAwMDAwMDQwMDA0RERGMgorOjEwNDZFMDAwMDIwMDBGMDBDMjgxNzEwMDNGMDAwMDAwMDEwMDE4REREMAorOjEwNDZGMDAwMDIwMDBGMDBDMzgxNzEwMDY5MDAwMDAwNkQzQjAwREQwNgorOjEwNDcwMDAwMDIwMDBGMDBDNDgxNzEwMDY5MDAwMDAwNkQzQjAwRERGNAorOjEwNDcxMDAwMDIwMDBGMDBDNTgxNzEwMDNGMDAwMDAwMDAwMDAwRERCNQorOjEwNDcyMDAwMDIwMDBGMDBDNjgxNzEwMDJEMDAwMDAwODAwMTU0RERFMQorOjEwNDczMDAwMDIwMDBGMDBDNzgxNzEwMDc5MDAwMDAwNzY4MEUwRjM2RAorOjEwNDc0MDAwMDIwMDBGMDBDODgxNzEwMDQ5MDAwMDAwN0EzNjAwRDZDRgorOjEwNDc1MDAwMDIwMDBGMDBDOTgxNzEwMDc5MDAwMDAwNzZGQjAxRERDNQorOjEwNDc2MDAwMDIwMDBGMDBDQTgxNzEwMDNEMDAwMDAwNkYwMDgwRjc1OQorOjEwNDc3MDAwMDIwMDBGMDBDQjgxNzEwMDQ5MDAwMDAwMDMzQjAwREQwNworOjEwNDc4MDAwMDIwMDBGMDBDQzgxNzEwMDU5MDAwMDAwNzYzQjAwRkQ1MworOjEwNDc5MDAwMDIwMDBGMDBDRDgxNzEwMDNGMDAwMDAwMDMxQzgwREQ4RQorOjEwNDdBMDAwMDIwMDBGMDBDRTgxNzEwMDNEMDAwMDAwNkYwMDgwRjcxNQorOjEwNDdCMDAwMDIwMDBGMDBDRjgxNzEwMDNEMDAwMDAwNkYwMDgwRjcwNAorOjEwNDdDMDAwMDIwMDBGMDBEMDgxNzEwMDNEMDAwMDAwNkYwMDgwRjdGMworOjEwNDdEMDAwMDIwMDBGMDBEMTgxNzEwMDJEMDAwMDAwN0YwMjA2REQ3NAorOjEwNDdFMDAwMDIwMDBGMDBEMjgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ4OQorOjEwNDdGMDAwMDIwMDBGMDBEMzgxNzEwMDMxMDAwMDAwNkI4ODgzRDQ2OAorOjEwNDgwMDAwMDIwMDBGMDBENDgxNzEwMDc5MDAwMDAwNkFCQjAxREQ1NQorOjEwNDgxMDAwMDIwMDBGMDBENTgxNzEwMDc5MDAwMDAwNzY5MDgxRjFDRgorOjEwNDgyMDAwMDIwMDBGMDBENjgxNzEwMDc1MDAwMDAwNjM4MDAxRkQ1OQorOjEwNDgzMDAwMDIwMDBGMDBENzgxNzEwMDk4MDAwMDAwNzZCQjUzODAwMgorOjEwNDg0MDAwMDIwMDBGMDBEODgxNzEwMDE5MDAwMDAwNzk3QjdGREQyNAorOjEwNDg1MDAwMDIwMDBGMDBEOTgxNzEwMDc1MDAwMDAwNjM4MjgxRjFCMAorOjEwNDg2MDAwMDIwMDBGMDBEQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNDg3MDAwMDIwMDBGMDBEQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNDg4MDAwMDIwMDBGMDBEQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNDg5MDAwMDIwMDBGMDBERDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNDhBMDAwMDIwMDBGMDBERTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNDhCMDAwMDIwMDBGMDBERjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNDhDMDAwMDIwMDBGMDBFMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNDhEMDAwMDIwMDBGMDBFMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNDhFMDAwMDIwMDBGMDBFMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNDhGMDAwMDIwMDBGMDBFMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNDkwMDAwMDIwMDBGMDBFNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNDkxMDAwMDIwMDBGMDBFNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNDkyMDAwMDIwMDBGMDBFNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNDkzMDAwMDIwMDBGMDBFNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNDk0MDAwMDIwMDBGMDBFODgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNDk1MDAwMDIwMDBGMDBFOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNDk2MDAwMDIwMDBGMDBFQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNDk3MDAwMDIwMDBGMDBFQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNDk4MDAwMDIwMDBGMDBFQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNDk5MDAwMDIwMDBGMDBFRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNDlBMDAwMDIwMDBGMDBFRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNDlCMDAwMDIwMDBGMDBFRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNDlDMDAwMDIwMDBGMDBGMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNDlEMDAwMDIwMDBGMDBGMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNDlFMDAwMDIwMDBGMDBGMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNDlGMDAwMDIwMDBGMDBGMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNEEwMDAwMDIwMDBGMDBGNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEExMDAwMDIwMDBGMDBGNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEEyMDAwMDIwMDBGMDBGNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEEzMDAwMDIwMDBGMDBGNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEE0MDAwMDIwMDBGMDBGODgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNEE1MDAwMDIwMDBGMDBGOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNEE2MDAwMDIwMDBGMDBGQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNEE3MDAwMDIwMDBGMDBGQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNEE4MDAwMDIwMDBGMDBGQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNEE5MDAwMDIwMDBGMDBGRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNEFBMDAwMDIwMDBGMDBGRTgxNzEwMDNGMDAwMDAwMDMwMjgwREQ2NAorOjEwNEFCMDAwMDIwMDBGMDBGRjgxNzEwMDQ5MDAwMDAwMDIzQjg0RDExOQorOjEwNEFDMDAwMDIwMDBGMDAwMDgyNzEwMDQ5MDAwMDAwMDMzQjAwREQ3RQorOjEwNEFEMDAwMDIwMDBGMDAwMTgyNzEwMDY5MDAwMDAwN0EzQjAwRERENgorOjEwNEFFMDAwMDIwMDBGMDAwMjgyNzEwMDQ5MDAwMDAwNzkzQjAwRERFNgorOjEwNEFGMDAwMDIwMDBGMDAwMzgyNzEwMDY1MDAwMDAwNjMwMjgwRjE3NAorOjEwNEIwMDAwMDIwMDBGMDAwNDgyNzEwMDE4MDAwMDAwNzYzQjdEN0REQQorOjEwNEIxMDAwMDIwMDBGMDAwNTgyNzEwMDA5MDAwMDAwN0EzRDgxQ0Y3QworOjEwNEIyMDAwMDIwMDBGMDAwNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNEIzMDAwMDIwMDBGMDAwNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEI0MDAwMDIwMDBGMDAwODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEI1MDAwMDIwMDBGMDAwOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEI2MDAwMDIwMDBGMDAwQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEI3MDAwMDIwMDBGMDAwQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEI4MDAwMDIwMDBGMDAwQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEI5MDAwMDIwMDBGMDAwRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEJBMDAwMDIwMDBGMDAwRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEJCMDAwMDIwMDBGMDAwRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEJDMDAwMDIwMDBGMDAxMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEJEMDAwMDIwMDBGMDAxMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNEJFMDAwMDIwMDBGMDAxMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEJGMDAwMDIwMDBGMDAxMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEMwMDAwMDIwMDBGMDAxNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwNEMxMDAwMDIwMDBGMDAxNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNEMyMDAwMDIwMDBGMDAxNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEMzMDAwMDIwMDBGMDAxNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEM0MDAwMDIwMDBGMDAxODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEM1MDAwMDIwMDBGMDAxOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEM2MDAwMDIwMDBGMDAxQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEM3MDAwMDIwMDBGMDAxQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEM4MDAwMDIwMDBGMDAxQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEM5MDAwMDIwMDBGMDAxRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNENBMDAwMDIwMDBGMDAxRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNENCMDAwMDIwMDBGMDAxRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNENDMDAwMDIwMDBGMDAyMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNENEMDAwMDIwMDBGMDAyMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNENFMDAwMDIwMDBGMDAyMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNENGMDAwMDIwMDBGMDAyMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEQwMDAwMDIwMDBGMDAyNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNEQxMDAwMDIwMDBGMDAyNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEQyMDAwMDIwMDBGMDAyNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEQzMDAwMDIwMDBGMDAyNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEQ0MDAwMDIwMDBGMDAyODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEQ1MDAwMDIwMDBGMDAyOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEQ2MDAwMDIwMDBGMDAyQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEQ3MDAwMDIwMDBGMDAyQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEQ4MDAwMDIwMDBGMDAyQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEQ5MDAwMDIwMDBGMDAyRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNERBMDAwMDIwMDBGMDAyRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNERCMDAwMDIwMDBGMDAyRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNERDMDAwMDIwMDBGMDAzMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEREMDAwMDIwMDBGMDAzMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNERFMDAwMDIwMDBGMDAzMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNERGMDAwMDIwMDBGMDAzMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEUwMDAwMDIwMDBGMDAzNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEUxMDAwMDIwMDBGMDAzNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEUyMDAwMDIwMDBGMDAzNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEUzMDAwMDIwMDBGMDAzNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEU0MDAwMDIwMDBGMDAzODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEU1MDAwMDIwMDBGMDAzOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEU2MDAwMDIwMDBGMDAzQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEU3MDAwMDIwMDBGMDAzQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEU4MDAwMDIwMDBGMDAzQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEU5MDAwMDIwMDBGMDAzRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEVBMDAwMDIwMDBGMDAzRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNEVCMDAwMDIwMDBGMDAzRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEVDMDAwMDIwMDBGMDA0MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEVEMDAwMDIwMDBGMDA0MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEVFMDAwMDIwMDBGMDA0MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEVGMDAwMDIwMDBGMDA0MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNEYwMDAwMDIwMDBGMDA0NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEYxMDAwMDIwMDBGMDA0NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEYyMDAwMDIwMDBGMDA0NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEYzMDAwMDIwMDBGMDA0NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEY0MDAwMDIwMDBGMDA0ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEY1MDAwMDIwMDBGMDA0OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEY2MDAwMDIwMDBGMDA0QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEY3MDAwMDIwMDBGMDA0QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEY4MDAwMDIwMDBGMDA0QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEY5MDAwMDIwMDBGMDA0RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNEZBMDAwMDIwMDBGMDA0RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEZCMDAwMDIwMDBGMDA0RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEZDMDAwMDIwMDBGMDA1MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEZEMDAwMDIwMDBGMDA1MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEZFMDAwMDIwMDBGMDA1MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNEZGMDAwMDIwMDBGMDA1MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTAwMDAwMDIwMDBGMDA1NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNTAxMDAwMDIwMDBGMDA1NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNTAyMDAwMDIwMDBGMDA1NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNTAzMDAwMDIwMDBGMDA1NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTA0MDAwMDIwMDBGMDA1ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTA1MDAwMDIwMDBGMDA1OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTA2MDAwMDIwMDBGMDA1QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTA3MDAwMDIwMDBGMDA1QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTA4MDAwMDIwMDBGMDA1QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTA5MDAwMDIwMDBGMDA1RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTBBMDAwMDIwMDBGMDA1RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTBCMDAwMDIwMDBGMDA1RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTBDMDAwMDIwMDBGMDA2MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTBEMDAwMDIwMDBGMDA2MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTBFMDAwMDIwMDBGMDA2MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTBGMDAwMDIwMDBGMDA2MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTEwMDAwMDIwMDBGMDA2NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNTExMDAwMDIwMDBGMDA2NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNTEyMDAwMDIwMDBGMDA2NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTEzMDAwMDIwMDBGMDA2NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTE0MDAwMDIwMDBGMDA2ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTE1MDAwMDIwMDBGMDA2OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTE2MDAwMDIwMDBGMDA2QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTE3MDAwMDIwMDBGMDA2QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTE4MDAwMDIwMDBGMDA2QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTE5MDAwMDIwMDBGMDA2RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTFBMDAwMDIwMDBGMDA2RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTFCMDAwMDIwMDBGMDA2RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTFDMDAwMDIwMDBGMDA3MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTFEMDAwMDIwMDBGMDA3MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTFFMDAwMDIwMDBGMDA3MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTFGMDAwMDIwMDBGMDA3MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTIwMDAwMDIwMDBGMDA3NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNTIxMDAwMDIwMDBGMDA3NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTIyMDAwMDIwMDBGMDA3NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTIzMDAwMDIwMDBGMDA3NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTI0MDAwMDIwMDBGMDA3ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTI1MDAwMDIwMDBGMDA3OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTI2MDAwMDIwMDBGMDA3QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTI3MDAwMDIwMDBGMDA3QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTI4MDAwMDIwMDBGMDA3QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTI5MDAwMDIwMDBGMDA3RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTJBMDAwMDIwMDBGMDA3RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTJCMDAwMDIwMDBGMDA3RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTJDMDAwMDIwMDBGMDA4MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTJEMDAwMDIwMDBGMDA4MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTJFMDAwMDIwMDBGMDA4MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTJGMDAwMDIwMDBGMDA4MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTMwMDAwMDIwMDBGMDA4NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTMxMDAwMDIwMDBGMDA4NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTMyMDAwMDIwMDBGMDA4NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTMzMDAwMDIwMDBGMDA4NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTM0MDAwMDIwMDBGMDA4ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTM1MDAwMDIwMDBGMDA4OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTM2MDAwMDIwMDBGMDA4QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTM3MDAwMDIwMDBGMDA4QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTM4MDAwMDIwMDBGMDA4QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTM5MDAwMDIwMDBGMDA4RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTNBMDAwMDIwMDBGMDA4RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTNCMDAwMDIwMDBGMDA4RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTNDMDAwMDIwMDBGMDA5MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTNEMDAwMDIwMDBGMDA5MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTNFMDAwMDIwMDBGMDA5MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTNGMDAwMDIwMDBGMDA5MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTQwMDAwMDIwMDBGMDA5NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTQxMDAwMDIwMDBGMDA5NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTQyMDAwMDIwMDBGMDA5NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTQzMDAwMDIwMDBGMDA5NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTQ0MDAwMDIwMDBGMDA5ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTQ1MDAwMDIwMDBGMDA5OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTQ2MDAwMDIwMDBGMDA5QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTQ3MDAwMDIwMDBGMDA5QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTQ4MDAwMDIwMDBGMDA5QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTQ5MDAwMDIwMDBGMDA5RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTRBMDAwMDIwMDBGMDA5RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTRCMDAwMDIwMDBGMDA5RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTRDMDAwMDIwMDBGMDBBMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTREMDAwMDIwMDBGMDBBMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTRFMDAwMDIwMDBGMDBBMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTRGMDAwMDIwMDBGMDBBMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTUwMDAwMDIwMDBGMDBBNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTUxMDAwMDIwMDBGMDBBNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTUyMDAwMDIwMDBGMDBBNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTUzMDAwMDIwMDBGMDBBNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTU0MDAwMDIwMDBGMDBBODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTU1MDAwMDIwMDBGMDBBOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTU2MDAwMDIwMDBGMDBBQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTU3MDAwMDIwMDBGMDBBQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTU4MDAwMDIwMDBGMDBBQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTU5MDAwMDIwMDBGMDBBRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTVBMDAwMDIwMDBGMDBBRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTVCMDAwMDIwMDBGMDBBRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTVDMDAwMDIwMDBGMDBCMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTVEMDAwMDIwMDBGMDBCMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTVFMDAwMDIwMDBGMDBCMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTVGMDAwMDIwMDBGMDBCMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTYwMDAwMDIwMDBGMDBCNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTYxMDAwMDIwMDBGMDBCNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTYyMDAwMDIwMDBGMDBCNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTYzMDAwMDIwMDBGMDBCNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTY0MDAwMDIwMDBGMDBCODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTY1MDAwMDIwMDBGMDBCOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTY2MDAwMDIwMDBGMDBCQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTY3MDAwMDIwMDBGMDBCQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTY4MDAwMDIwMDBGMDBCQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTY5MDAwMDIwMDBGMDBCRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTZBMDAwMDIwMDBGMDBCRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTZCMDAwMDIwMDBGMDBCRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTZDMDAwMDIwMDBGMDBDMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTZEMDAwMDIwMDBGMDBDMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTZFMDAwMDIwMDBGMDBDMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTZGMDAwMDIwMDBGMDBDMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNTcwMDAwMDIwMDBGMDBDNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTcxMDAwMDIwMDBGMDBDNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTcyMDAwMDIwMDBGMDBDNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTczMDAwMDIwMDBGMDBDNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTc0MDAwMDIwMDBGMDBDODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTc1MDAwMDIwMDBGMDBDOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTc2MDAwMDIwMDBGMDBDQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTc3MDAwMDIwMDBGMDBDQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTc4MDAwMDIwMDBGMDBDQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTc5MDAwMDIwMDBGMDBDRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTdBMDAwMDIwMDBGMDBDRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTdCMDAwMDIwMDBGMDBDRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTdDMDAwMDIwMDBGMDBEMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTdEMDAwMDIwMDBGMDBEMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTdFMDAwMDIwMDBGMDBEMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNTdGMDAwMDIwMDBGMDBEMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNTgwMDAwMDIwMDBGMDBENDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTgxMDAwMDIwMDBGMDBENTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTgyMDAwMDIwMDBGMDBENjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTgzMDAwMDIwMDBGMDBENzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTg0MDAwMDIwMDBGMDBEODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTg1MDAwMDIwMDBGMDBEOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTg2MDAwMDIwMDBGMDBEQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTg3MDAwMDIwMDBGMDBEQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTg4MDAwMDIwMDBGMDBEQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTg5MDAwMDIwMDBGMDBERDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNThBMDAwMDIwMDBGMDBERTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNThCMDAwMDIwMDBGMDBERjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNThDMDAwMDIwMDBGMDBFMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNThEMDAwMDIwMDBGMDBFMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNThFMDAwMDIwMDBGMDBFMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNThGMDAwMDIwMDBGMDBFMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNTkwMDAwMDIwMDBGMDBFNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTkxMDAwMDIwMDBGMDBFNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTkyMDAwMDIwMDBGMDBFNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTkzMDAwMDIwMDBGMDBFNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTk0MDAwMDIwMDBGMDBFODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTk1MDAwMDIwMDBGMDBFOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTk2MDAwMDIwMDBGMDBFQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTk3MDAwMDIwMDBGMDBFQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTk4MDAwMDIwMDBGMDBFQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTk5MDAwMDIwMDBGMDBFRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTlBMDAwMDIwMDBGMDBFRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTlCMDAwMDIwMDBGMDBFRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTlDMDAwMDIwMDBGMDBGMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNTlEMDAwMDIwMDBGMDBGMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNTlFMDAwMDIwMDBGMDBGMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNTlGMDAwMDIwMDBGMDBGMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNUEwMDAwMDIwMDBGMDBGNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUExMDAwMDIwMDBGMDBGNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUEyMDAwMDIwMDBGMDBGNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUEzMDAwMDIwMDBGMDBGNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUE0MDAwMDIwMDBGMDBGODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNUE1MDAwMDIwMDBGMDBGOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNUE2MDAwMDIwMDBGMDBGQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNUE3MDAwMDIwMDBGMDBGQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNUE4MDAwMDIwMDBGMDBGQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNUE5MDAwMDIwMDBGMDBGRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNUFBMDAwMDIwMDBGMDBGRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNUFCMDAwMDIwMDBGMDBGRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNUFDMDAwMDIwMDBGMDAwMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUFEMDAwMDIwMDBGMDAwMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUFFMDAwMDIwMDBGMDAwMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUFGMDAwMDIwMDBGMDAwMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUIwMDAwMDIwMDBGMDAwNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwNUIxMDAwMDIwMDBGMDAwNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNUIyMDAwMDIwMDBGMDAwNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNUIzMDAwMDIwMDBGMDAwNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUI0MDAwMDIwMDBGMDAwODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUI1MDAwMDIwMDBGMDAwOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUI2MDAwMDIwMDBGMDAwQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUI3MDAwMDIwMDBGMDAwQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUI4MDAwMDIwMDBGMDAwQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUI5MDAwMDIwMDBGMDAwRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUJBMDAwMDIwMDBGMDAwRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUJCMDAwMDIwMDBGMDAwRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUJDMDAwMDIwMDBGMDAxMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUJEMDAwMDIwMDBGMDAxMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUJFMDAwMDIwMDBGMDAxMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUJGMDAwMDIwMDBGMDAxMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUMwMDAwMDIwMDBGMDAxNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNUMxMDAwMDIwMDBGMDAxNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNUMyMDAwMDIwMDBGMDAxNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUMzMDAwMDIwMDBGMDAxNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUM0MDAwMDIwMDBGMDAxODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUM1MDAwMDIwMDBGMDAxOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUM2MDAwMDIwMDBGMDAxQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUM3MDAwMDIwMDBGMDAxQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUM4MDAwMDIwMDBGMDAxQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUM5MDAwMDIwMDBGMDAxRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUNBMDAwMDIwMDBGMDAxRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUNCMDAwMDIwMDBGMDAxRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUNDMDAwMDIwMDBGMDAyMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUNEMDAwMDIwMDBGMDAyMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUNFMDAwMDIwMDBGMDAyMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUNGMDAwMDIwMDBGMDAyMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUQwMDAwMDIwMDBGMDAyNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNUQxMDAwMDIwMDBGMDAyNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUQyMDAwMDIwMDBGMDAyNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUQzMDAwMDIwMDBGMDAyNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUQ0MDAwMDIwMDBGMDAyODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUQ1MDAwMDIwMDBGMDAyOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUQ2MDAwMDIwMDBGMDAyQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUQ3MDAwMDIwMDBGMDAyQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUQ4MDAwMDIwMDBGMDAyQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUQ5MDAwMDIwMDBGMDAyRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNURBMDAwMDIwMDBGMDAyRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNURCMDAwMDIwMDBGMDAyRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNURDMDAwMDIwMDBGMDAzMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUREMDAwMDIwMDBGMDAzMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNURFMDAwMDIwMDBGMDAzMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNURGMDAwMDIwMDBGMDAzMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUUwMDAwMDIwMDBGMDAzNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUUxMDAwMDIwMDBGMDAzNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUUyMDAwMDIwMDBGMDAzNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUUzMDAwMDIwMDBGMDAzNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUU0MDAwMDIwMDBGMDAzODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUU1MDAwMDIwMDBGMDAzOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUU2MDAwMDIwMDBGMDAzQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUU3MDAwMDIwMDBGMDAzQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUU4MDAwMDIwMDBGMDAzQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUU5MDAwMDIwMDBGMDAzRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUVBMDAwMDIwMDBGMDAzRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUVCMDAwMDIwMDBGMDAzRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUVDMDAwMDIwMDBGMDA0MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUVEMDAwMDIwMDBGMDA0MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUVFMDAwMDIwMDBGMDA0MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUVGMDAwMDIwMDBGMDA0MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNUYwMDAwMDIwMDBGMDA0NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUYxMDAwMDIwMDBGMDA0NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUYyMDAwMDIwMDBGMDA0NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUYzMDAwMDIwMDBGMDA0NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUY0MDAwMDIwMDBGMDA0ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUY1MDAwMDIwMDBGMDA0OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUY2MDAwMDIwMDBGMDA0QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUY3MDAwMDIwMDBGMDA0QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUY4MDAwMDIwMDBGMDA0QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUY5MDAwMDIwMDBGMDA0RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUZBMDAwMDIwMDBGMDA0RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUZCMDAwMDIwMDBGMDA0RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUZDMDAwMDIwMDBGMDA1MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUZEMDAwMDIwMDBGMDA1MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUZFMDAwMDIwMDBGMDA1MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNUZGMDAwMDIwMDBGMDA1MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjAwMDAwMDIwMDBGMDA1NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNjAxMDAwMDIwMDBGMDA1NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNjAyMDAwMDIwMDBGMDA1NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNjAzMDAwMDIwMDBGMDA1NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjA0MDAwMDIwMDBGMDA1ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjA1MDAwMDIwMDBGMDA1OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjA2MDAwMDIwMDBGMDA1QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjA3MDAwMDIwMDBGMDA1QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjA4MDAwMDIwMDBGMDA1QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjA5MDAwMDIwMDBGMDA1RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjBBMDAwMDIwMDBGMDA1RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjBCMDAwMDIwMDBGMDA1RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjBDMDAwMDIwMDBGMDA2MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjBEMDAwMDIwMDBGMDA2MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjBFMDAwMDIwMDBGMDA2MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjBGMDAwMDIwMDBGMDA2MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjEwMDAwMDIwMDBGMDA2NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNjExMDAwMDIwMDBGMDA2NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNjEyMDAwMDIwMDBGMDA2NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjEzMDAwMDIwMDBGMDA2NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjE0MDAwMDIwMDBGMDA2ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjE1MDAwMDIwMDBGMDA2OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjE2MDAwMDIwMDBGMDA2QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjE3MDAwMDIwMDBGMDA2QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjE4MDAwMDIwMDBGMDA2QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjE5MDAwMDIwMDBGMDA2RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjFBMDAwMDIwMDBGMDA2RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjFCMDAwMDIwMDBGMDA2RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjFDMDAwMDIwMDBGMDA3MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjFEMDAwMDIwMDBGMDA3MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjFFMDAwMDIwMDBGMDA3MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjFGMDAwMDIwMDBGMDA3MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjIwMDAwMDIwMDBGMDA3NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNjIxMDAwMDIwMDBGMDA3NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjIyMDAwMDIwMDBGMDA3NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjIzMDAwMDIwMDBGMDA3NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjI0MDAwMDIwMDBGMDA3ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjI1MDAwMDIwMDBGMDA3OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjI2MDAwMDIwMDBGMDA3QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjI3MDAwMDIwMDBGMDA3QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjI4MDAwMDIwMDBGMDA3QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjI5MDAwMDIwMDBGMDA3RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjJBMDAwMDIwMDBGMDA3RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjJCMDAwMDIwMDBGMDA3RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjJDMDAwMDIwMDBGMDA4MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjJEMDAwMDIwMDBGMDA4MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjJFMDAwMDIwMDBGMDA4MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjJGMDAwMDIwMDBGMDA4MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjMwMDAwMDIwMDBGMDA4NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjMxMDAwMDIwMDBGMDA4NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjMyMDAwMDIwMDBGMDA4NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjMzMDAwMDIwMDBGMDA4NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjM0MDAwMDIwMDBGMDA4ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjM1MDAwMDIwMDBGMDA4OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjM2MDAwMDIwMDBGMDA4QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjM3MDAwMDIwMDBGMDA4QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjM4MDAwMDIwMDBGMDA4QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjM5MDAwMDIwMDBGMDA4RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjNBMDAwMDIwMDBGMDA4RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjNCMDAwMDIwMDBGMDA4RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjNDMDAwMDIwMDBGMDA5MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjNEMDAwMDIwMDBGMDA5MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjNFMDAwMDIwMDBGMDA5MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjNGMDAwMDIwMDBGMDA5MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjQwMDAwMDIwMDBGMDA5NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjQxMDAwMDIwMDBGMDA5NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjQyMDAwMDIwMDBGMDA5NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjQzMDAwMDIwMDBGMDA5NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjQ0MDAwMDIwMDBGMDA5ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjQ1MDAwMDIwMDBGMDA5OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjQ2MDAwMDIwMDBGMDA5QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjQ3MDAwMDIwMDBGMDA5QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjQ4MDAwMDIwMDBGMDA5QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjQ5MDAwMDIwMDBGMDA5RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjRBMDAwMDIwMDBGMDA5RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjRCMDAwMDIwMDBGMDA5RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjRDMDAwMDIwMDBGMDBBMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjREMDAwMDIwMDBGMDBBMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjRFMDAwMDIwMDBGMDBBMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjRGMDAwMDIwMDBGMDBBMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjUwMDAwMDIwMDBGMDBBNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjUxMDAwMDIwMDBGMDBBNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjUyMDAwMDIwMDBGMDBBNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjUzMDAwMDIwMDBGMDBBNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjU0MDAwMDIwMDBGMDBBODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjU1MDAwMDIwMDBGMDBBOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjU2MDAwMDIwMDBGMDBBQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjU3MDAwMDIwMDBGMDBBQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjU4MDAwMDIwMDBGMDBBQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjU5MDAwMDIwMDBGMDBBRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjVBMDAwMDIwMDBGMDBBRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjVCMDAwMDIwMDBGMDBBRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjVDMDAwMDIwMDBGMDBCMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjVEMDAwMDIwMDBGMDBCMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjVFMDAwMDIwMDBGMDBCMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjVGMDAwMDIwMDBGMDBCMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjYwMDAwMDIwMDBGMDBCNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjYxMDAwMDIwMDBGMDBCNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjYyMDAwMDIwMDBGMDBCNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjYzMDAwMDIwMDBGMDBCNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjY0MDAwMDIwMDBGMDBCODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjY1MDAwMDIwMDBGMDBCOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjY2MDAwMDIwMDBGMDBCQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjY3MDAwMDIwMDBGMDBCQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjY4MDAwMDIwMDBGMDBCQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjY5MDAwMDIwMDBGMDBCRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjZBMDAwMDIwMDBGMDBCRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjZCMDAwMDIwMDBGMDBCRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjZDMDAwMDIwMDBGMDBDMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjZEMDAwMDIwMDBGMDBDMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjZFMDAwMDIwMDBGMDBDMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjZGMDAwMDIwMDBGMDBDMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjcwMDAwMDIwMDBGMDBDNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjcxMDAwMDIwMDBGMDBDNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjcyMDAwMDIwMDBGMDBDNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjczMDAwMDIwMDBGMDBDNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjc0MDAwMDIwMDBGMDBDODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjc1MDAwMDIwMDBGMDBDOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjc2MDAwMDIwMDBGMDBDQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjc3MDAwMDIwMDBGMDBDQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjc4MDAwMDIwMDBGMDBDQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjc5MDAwMDIwMDBGMDBDRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjdBMDAwMDIwMDBGMDBDRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjdCMDAwMDIwMDBGMDBDRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjdDMDAwMDIwMDBGMDBEMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjdEMDAwMDIwMDBGMDBEMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjdFMDAwMDIwMDBGMDBEMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjdGMDAwMDIwMDBGMDBEMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNjgwMDAwMDIwMDBGMDBENDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjgxMDAwMDIwMDBGMDBENTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjgyMDAwMDIwMDBGMDBENjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjgzMDAwMDIwMDBGMDBENzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjg0MDAwMDIwMDBGMDBEODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjg1MDAwMDIwMDBGMDBEOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjg2MDAwMDIwMDBGMDBEQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjg3MDAwMDIwMDBGMDBEQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjg4MDAwMDIwMDBGMDBEQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjg5MDAwMDIwMDBGMDBERDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjhBMDAwMDIwMDBGMDBERTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjhCMDAwMDIwMDBGMDBERjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjhDMDAwMDIwMDBGMDBFMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjhEMDAwMDIwMDBGMDBFMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjhFMDAwMDIwMDBGMDBFMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNjhGMDAwMDIwMDBGMDBFMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNjkwMDAwMDIwMDBGMDBFNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjkxMDAwMDIwMDBGMDBFNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjkyMDAwMDIwMDBGMDBFNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjkzMDAwMDIwMDBGMDBFNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjk0MDAwMDIwMDBGMDBFODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjk1MDAwMDIwMDBGMDBFOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjk2MDAwMDIwMDBGMDBFQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjk3MDAwMDIwMDBGMDBFQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjk4MDAwMDIwMDBGMDBFQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjk5MDAwMDIwMDBGMDBFRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjlBMDAwMDIwMDBGMDBFRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjlCMDAwMDIwMDBGMDBFRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjlDMDAwMDIwMDBGMDBGMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjlEMDAwMDIwMDBGMDBGMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNjlFMDAwMDIwMDBGMDBGMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNjlGMDAwMDIwMDBGMDBGMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNkEwMDAwMDIwMDBGMDBGNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkExMDAwMDIwMDBGMDBGNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkEyMDAwMDIwMDBGMDBGNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkEzMDAwMDIwMDBGMDBGNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkE0MDAwMDIwMDBGMDBGODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNkE1MDAwMDIwMDBGMDBGOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNkE2MDAwMDIwMDBGMDBGQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNkE3MDAwMDIwMDBGMDBGQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNkE4MDAwMDIwMDBGMDBGQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNkE5MDAwMDIwMDBGMDBGRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNkFBMDAwMDIwMDBGMDBGRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNkFCMDAwMDIwMDBGMDBGRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNkFDMDAwMDIwMDBGMDAwMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkFEMDAwMDIwMDBGMDAwMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkFFMDAwMDIwMDBGMDAwMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkFGMDAwMDIwMDBGMDAwMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkIwMDAwMDIwMDBGMDAwNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNkIxMDAwMDIwMDBGMDAwNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNkIyMDAwMDIwMDBGMDAwNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNkIzMDAwMDIwMDBGMDAwNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkI0MDAwMDIwMDBGMDAwODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkI1MDAwMDIwMDBGMDAwOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkI2MDAwMDIwMDBGMDAwQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkI3MDAwMDIwMDBGMDAwQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkI4MDAwMDIwMDBGMDAwQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkI5MDAwMDIwMDBGMDAwRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkJBMDAwMDIwMDBGMDAwRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkJCMDAwMDIwMDBGMDAwRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkJDMDAwMDIwMDBGMDAxMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkJEMDAwMDIwMDBGMDAxMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkJFMDAwMDIwMDBGMDAxMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkJGMDAwMDIwMDBGMDAxMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkMwMDAwMDIwMDBGMDAxNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNkMxMDAwMDIwMDBGMDAxNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNkMyMDAwMDIwMDBGMDAxNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkMzMDAwMDIwMDBGMDAxNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkM0MDAwMDIwMDBGMDAxODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkM1MDAwMDIwMDBGMDAxOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkM2MDAwMDIwMDBGMDAxQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkM3MDAwMDIwMDBGMDAxQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkM4MDAwMDIwMDBGMDAxQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkM5MDAwMDIwMDBGMDAxRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkNBMDAwMDIwMDBGMDAxRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkNCMDAwMDIwMDBGMDAxRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkNDMDAwMDIwMDBGMDAyMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkNEMDAwMDIwMDBGMDAyMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkNFMDAwMDIwMDBGMDAyMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkNGMDAwMDIwMDBGMDAyMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkQwMDAwMDIwMDBGMDAyNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNkQxMDAwMDIwMDBGMDAyNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkQyMDAwMDIwMDBGMDAyNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkQzMDAwMDIwMDBGMDAyNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkQ0MDAwMDIwMDBGMDAyODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkQ1MDAwMDIwMDBGMDAyOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkQ2MDAwMDIwMDBGMDAyQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkQ3MDAwMDIwMDBGMDAyQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkQ4MDAwMDIwMDBGMDAyQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkQ5MDAwMDIwMDBGMDAyRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkRBMDAwMDIwMDBGMDAyRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkRCMDAwMDIwMDBGMDAyRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkRDMDAwMDIwMDBGMDAzMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkREMDAwMDIwMDBGMDAzMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkRFMDAwMDIwMDBGMDAzMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkRGMDAwMDIwMDBGMDAzMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkUwMDAwMDIwMDBGMDAzNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkUxMDAwMDIwMDBGMDAzNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkUyMDAwMDIwMDBGMDAzNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkUzMDAwMDIwMDBGMDAzNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkU0MDAwMDIwMDBGMDAzODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkU1MDAwMDIwMDBGMDAzOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkU2MDAwMDIwMDBGMDAzQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkU3MDAwMDIwMDBGMDAzQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkU4MDAwMDIwMDBGMDAzQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkU5MDAwMDIwMDBGMDAzRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkVBMDAwMDIwMDBGMDAzRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkVCMDAwMDIwMDBGMDAzRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkVDMDAwMDIwMDBGMDA0MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkVEMDAwMDIwMDBGMDA0MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkVFMDAwMDIwMDBGMDA0Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkVGMDAwMDIwMDBGMDA0Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNkYwMDAwMDIwMDBGMDA0NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkYxMDAwMDIwMDBGMDA0NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkYyMDAwMDIwMDBGMDA0Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkYzMDAwMDIwMDBGMDA0Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkY0MDAwMDIwMDBGMDA0ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkY1MDAwMDIwMDBGMDA0OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkY2MDAwMDIwMDBGMDA0QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkY3MDAwMDIwMDBGMDA0Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkY4MDAwMDIwMDBGMDA0Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkY5MDAwMDIwMDBGMDA0RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkZBMDAwMDIwMDBGMDA0RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkZCMDAwMDIwMDBGMDA0Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkZDMDAwMDIwMDBGMDA1MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkZEMDAwMDIwMDBGMDA1MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkZFMDAwMDIwMDBGMDA1Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNkZGMDAwMDIwMDBGMDA1Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzAwMDAwMDIwMDBGMDA1NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNzAxMDAwMDIwMDBGMDA1NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNzAyMDAwMDIwMDBGMDA1Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNzAzMDAwMDIwMDBGMDA1Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzA0MDAwMDIwMDBGMDA1ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzA1MDAwMDIwMDBGMDA1OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzA2MDAwMDIwMDBGMDA1QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzA3MDAwMDIwMDBGMDA1Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzA4MDAwMDIwMDBGMDA1Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzA5MDAwMDIwMDBGMDA1RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzBBMDAwMDIwMDBGMDA1RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzBCMDAwMDIwMDBGMDA1Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzBDMDAwMDIwMDBGMDA2MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzBEMDAwMDIwMDBGMDA2MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzBFMDAwMDIwMDBGMDA2Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzBGMDAwMDIwMDBGMDA2Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzEwMDAwMDIwMDBGMDA2NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNzExMDAwMDIwMDBGMDA2NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNzEyMDAwMDIwMDBGMDA2Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzEzMDAwMDIwMDBGMDA2Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzE0MDAwMDIwMDBGMDA2ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzE1MDAwMDIwMDBGMDA2OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzE2MDAwMDIwMDBGMDA2QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzE3MDAwMDIwMDBGMDA2Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzE4MDAwMDIwMDBGMDA2Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzE5MDAwMDIwMDBGMDA2RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzFBMDAwMDIwMDBGMDA2RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzFCMDAwMDIwMDBGMDA2Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzFDMDAwMDIwMDBGMDA3MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzFEMDAwMDIwMDBGMDA3MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzFFMDAwMDIwMDBGMDA3Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzFGMDAwMDIwMDBGMDA3Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzIwMDAwMDIwMDBGMDA3NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNzIxMDAwMDIwMDBGMDA3NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzIyMDAwMDIwMDBGMDA3Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzIzMDAwMDIwMDBGMDA3Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzI0MDAwMDIwMDBGMDA3ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzI1MDAwMDIwMDBGMDA3OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzI2MDAwMDIwMDBGMDA3QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzI3MDAwMDIwMDBGMDA3Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzI4MDAwMDIwMDBGMDA3Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzI5MDAwMDIwMDBGMDA3RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzJBMDAwMDIwMDBGMDA3RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzJCMDAwMDIwMDBGMDA3Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzJDMDAwMDIwMDBGMDA4MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzJEMDAwMDIwMDBGMDA4MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzJFMDAwMDIwMDBGMDA4Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzJGMDAwMDIwMDBGMDA4Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzMwMDAwMDIwMDBGMDA4NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzMxMDAwMDIwMDBGMDA4NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzMyMDAwMDIwMDBGMDA4Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzMzMDAwMDIwMDBGMDA4Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzM0MDAwMDIwMDBGMDA4ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzM1MDAwMDIwMDBGMDA4OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzM2MDAwMDIwMDBGMDA4QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzM3MDAwMDIwMDBGMDA4Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzM4MDAwMDIwMDBGMDA4Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzM5MDAwMDIwMDBGMDA4RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzNBMDAwMDIwMDBGMDA4RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzNCMDAwMDIwMDBGMDA4Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzNDMDAwMDIwMDBGMDA5MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzNEMDAwMDIwMDBGMDA5MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzNFMDAwMDIwMDBGMDA5Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzNGMDAwMDIwMDBGMDA5Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzQwMDAwMDIwMDBGMDA5NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzQxMDAwMDIwMDBGMDA5NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzQyMDAwMDIwMDBGMDA5Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzQzMDAwMDIwMDBGMDA5Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzQ0MDAwMDIwMDBGMDA5ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzQ1MDAwMDIwMDBGMDA5OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzQ2MDAwMDIwMDBGMDA5QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzQ3MDAwMDIwMDBGMDA5Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzQ4MDAwMDIwMDBGMDA5Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzQ5MDAwMDIwMDBGMDA5RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzRBMDAwMDIwMDBGMDA5RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzRCMDAwMDIwMDBGMDA5Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzRDMDAwMDIwMDBGMDBBMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzREMDAwMDIwMDBGMDBBMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzRFMDAwMDIwMDBGMDBBMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzRGMDAwMDIwMDBGMDBBMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzUwMDAwMDIwMDBGMDBBNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzUxMDAwMDIwMDBGMDBBNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzUyMDAwMDIwMDBGMDBBNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzUzMDAwMDIwMDBGMDBBNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzU0MDAwMDIwMDBGMDBBODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzU1MDAwMDIwMDBGMDBBOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzU2MDAwMDIwMDBGMDBBQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzU3MDAwMDIwMDBGMDBBQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzU4MDAwMDIwMDBGMDBBQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzU5MDAwMDIwMDBGMDBBRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzVBMDAwMDIwMDBGMDBBRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzVCMDAwMDIwMDBGMDBBRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzVDMDAwMDIwMDBGMDBCMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzVEMDAwMDIwMDBGMDBCMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzVFMDAwMDIwMDBGMDBCMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzVGMDAwMDIwMDBGMDBCMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzYwMDAwMDIwMDBGMDBCNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzYxMDAwMDIwMDBGMDBCNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzYyMDAwMDIwMDBGMDBCNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzYzMDAwMDIwMDBGMDBCNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzY0MDAwMDIwMDBGMDBCODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzY1MDAwMDIwMDBGMDBCOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzY2MDAwMDIwMDBGMDBCQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzY3MDAwMDIwMDBGMDBCQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzY4MDAwMDIwMDBGMDBCQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzY5MDAwMDIwMDBGMDBCRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzZBMDAwMDIwMDBGMDBCRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzZCMDAwMDIwMDBGMDBCRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzZDMDAwMDIwMDBGMDBDMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzZEMDAwMDIwMDBGMDBDMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzZFMDAwMDIwMDBGMDBDMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzZGMDAwMDIwMDBGMDBDMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzcwMDAwMDIwMDBGMDBDNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzcxMDAwMDIwMDBGMDBDNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzcyMDAwMDIwMDBGMDBDNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzczMDAwMDIwMDBGMDBDNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzc0MDAwMDIwMDBGMDBDODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzc1MDAwMDIwMDBGMDBDOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzc2MDAwMDIwMDBGMDBDQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzc3MDAwMDIwMDBGMDBDQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzc4MDAwMDIwMDBGMDBDQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzc5MDAwMDIwMDBGMDBDRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzdBMDAwMDIwMDBGMDBDRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzdCMDAwMDIwMDBGMDBDRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzdDMDAwMDIwMDBGMDBEMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzdEMDAwMDIwMDBGMDBEMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzdFMDAwMDIwMDBGMDBEMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzdGMDAwMDIwMDBGMDBEMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNzgwMDAwMDIwMDBGMDBENDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzgxMDAwMDIwMDBGMDBENTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzgyMDAwMDIwMDBGMDBENjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzgzMDAwMDIwMDBGMDBENzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzg0MDAwMDIwMDBGMDBEODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzg1MDAwMDIwMDBGMDBEOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzg2MDAwMDIwMDBGMDBEQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzg3MDAwMDIwMDBGMDBEQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzg4MDAwMDIwMDBGMDBEQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzg5MDAwMDIwMDBGMDBERDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzhBMDAwMDIwMDBGMDBERTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzhCMDAwMDIwMDBGMDBERjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzhDMDAwMDIwMDBGMDBFMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzhEMDAwMDIwMDBGMDBFMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzhFMDAwMDIwMDBGMDBFMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNzhGMDAwMDIwMDBGMDBFMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNzkwMDAwMDIwMDBGMDBFNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzkxMDAwMDIwMDBGMDBFNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzkyMDAwMDIwMDBGMDBFNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzkzMDAwMDIwMDBGMDBFNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzk0MDAwMDIwMDBGMDBFODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzk1MDAwMDIwMDBGMDBFOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzk2MDAwMDIwMDBGMDBFQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzk3MDAwMDIwMDBGMDBFQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzk4MDAwMDIwMDBGMDBFQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzk5MDAwMDIwMDBGMDBFRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzlBMDAwMDIwMDBGMDBFRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzlCMDAwMDIwMDBGMDBFRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzlDMDAwMDIwMDBGMDBGMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzlEMDAwMDIwMDBGMDBGMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNzlFMDAwMDIwMDBGMDBGMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNzlGMDAwMDIwMDBGMDBGMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwN0EwMDAwMDIwMDBGMDBGNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0ExMDAwMDIwMDBGMDBGNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0EyMDAwMDIwMDBGMDBGNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0EzMDAwMDIwMDBGMDBGNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0E0MDAwMDIwMDBGMDBGODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwN0E1MDAwMDIwMDBGMDBGOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwN0E2MDAwMDIwMDBGMDBGQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwN0E3MDAwMDIwMDBGMDBGQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwN0E4MDAwMDIwMDBGMDBGQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwN0E5MDAwMDIwMDBGMDBGRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwN0FBMDAwMDIwMDBGMDBGRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwN0FCMDAwMDIwMDBGMDBGRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwN0FDMDAwMDIwMDBGMDAwMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0FEMDAwMDIwMDBGMDAwMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0FFMDAwMDIwMDBGMDAwMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0FGMDAwMDIwMDBGMDAwMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0IwMDAwMDIwMDBGMDAwNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwN0IxMDAwMDIwMDBGMDAwNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwN0IyMDAwMDIwMDBGMDAwNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwN0IzMDAwMDIwMDBGMDAwNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0I0MDAwMDIwMDBGMDAwODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0I1MDAwMDIwMDBGMDAwOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0I2MDAwMDIwMDBGMDAwQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0I3MDAwMDIwMDBGMDAwQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0I4MDAwMDIwMDBGMDAwQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0I5MDAwMDIwMDBGMDAwRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0JBMDAwMDIwMDBGMDAwRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0JCMDAwMDIwMDBGMDAwRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0JDMDAwMDIwMDBGMDAxMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0JEMDAwMDIwMDBGMDAxMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0JFMDAwMDIwMDBGMDAxMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0JGMDAwMDIwMDBGMDAxMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0MwMDAwMDIwMDBGMDAxNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwN0MxMDAwMDIwMDBGMDAxNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwN0MyMDAwMDIwMDBGMDAxNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0MzMDAwMDIwMDBGMDAxNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0M0MDAwMDIwMDBGMDAxODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0M1MDAwMDIwMDBGMDAxOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0M2MDAwMDIwMDBGMDAxQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0M3MDAwMDIwMDBGMDAxQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0M4MDAwMDIwMDBGMDAxQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0M5MDAwMDIwMDBGMDAxRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0NBMDAwMDIwMDBGMDAxRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0NCMDAwMDIwMDBGMDAxRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0NDMDAwMDIwMDBGMDAyMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0NEMDAwMDIwMDBGMDAyMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0NFMDAwMDIwMDBGMDAyMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0NGMDAwMDIwMDBGMDAyMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0QwMDAwMDIwMDBGMDAyNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwN0QxMDAwMDIwMDBGMDAyNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0QyMDAwMDIwMDBGMDAyNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0QzMDAwMDIwMDBGMDAyNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0Q0MDAwMDIwMDBGMDAyODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0Q1MDAwMDIwMDBGMDAyOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0Q2MDAwMDIwMDBGMDAyQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0Q3MDAwMDIwMDBGMDAyQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0Q4MDAwMDIwMDBGMDAyQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0Q5MDAwMDIwMDBGMDAyRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0RBMDAwMDIwMDBGMDAyRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0RCMDAwMDIwMDBGMDAyRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0RDMDAwMDIwMDBGMDAzMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0REMDAwMDIwMDBGMDAzMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0RFMDAwMDIwMDBGMDAzMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0RGMDAwMDIwMDBGMDAzMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0UwMDAwMDIwMDBGMDAzNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0UxMDAwMDIwMDBGMDAzNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0UyMDAwMDIwMDBGMDAzNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0UzMDAwMDIwMDBGMDAzNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0U0MDAwMDIwMDBGMDAzODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0U1MDAwMDIwMDBGMDAzOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0U2MDAwMDIwMDBGMDAzQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0U3MDAwMDIwMDBGMDAzQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0U4MDAwMDIwMDBGMDAzQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0U5MDAwMDIwMDBGMDAzRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0VBMDAwMDIwMDBGMDAzRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0VCMDAwMDIwMDBGMDAzRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0VDMDAwMDIwMDBGMDA0MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0VEMDAwMDIwMDBGMDA0MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0VFMDAwMDIwMDBGMDA0Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0VGMDAwMDIwMDBGMDA0Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwN0YwMDAwMDIwMDBGMDA0NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0YxMDAwMDIwMDBGMDA0NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0YyMDAwMDIwMDBGMDA0Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0YzMDAwMDIwMDBGMDA0Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0Y0MDAwMDIwMDBGMDA0ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0Y1MDAwMDIwMDBGMDA0OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0Y2MDAwMDIwMDBGMDA0QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0Y3MDAwMDIwMDBGMDA0Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0Y4MDAwMDIwMDBGMDA0Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0Y5MDAwMDIwMDBGMDA0RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0ZBMDAwMDIwMDBGMDA0RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0ZCMDAwMDIwMDBGMDA0Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0ZDMDAwMDIwMDBGMDA1MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0ZEMDAwMDIwMDBGMDA1MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0ZFMDAwMDIwMDBGMDA1Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwN0ZGMDAwMDIwMDBGMDA1Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODAwMDAwMDIwMDBGMDA1NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwODAxMDAwMDIwMDBGMDA1NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwODAyMDAwMDIwMDBGMDA1Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwODAzMDAwMDIwMDBGMDA1Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODA0MDAwMDIwMDBGMDA1ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODA1MDAwMDIwMDBGMDA1OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODA2MDAwMDIwMDBGMDA1QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODA3MDAwMDIwMDBGMDA1Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODA4MDAwMDIwMDBGMDA1Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODA5MDAwMDIwMDBGMDA1RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODBBMDAwMDIwMDBGMDA1RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODBCMDAwMDIwMDBGMDA1Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODBDMDAwMDIwMDBGMDA2MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODBEMDAwMDIwMDBGMDA2MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODBFMDAwMDIwMDBGMDA2Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODBGMDAwMDIwMDBGMDA2Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODEwMDAwMDIwMDBGMDA2NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwODExMDAwMDIwMDBGMDA2NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwODEyMDAwMDIwMDBGMDA2Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODEzMDAwMDIwMDBGMDA2Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODE0MDAwMDIwMDBGMDA2ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODE1MDAwMDIwMDBGMDA2OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODE2MDAwMDIwMDBGMDA2QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODE3MDAwMDIwMDBGMDA2Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODE4MDAwMDIwMDBGMDA2Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODE5MDAwMDIwMDBGMDA2RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODFBMDAwMDIwMDBGMDA2RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODFCMDAwMDIwMDBGMDA2Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODFDMDAwMDIwMDBGMDA3MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODFEMDAwMDIwMDBGMDA3MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODFFMDAwMDIwMDBGMDA3Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODFGMDAwMDIwMDBGMDA3Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODIwMDAwMDIwMDBGMDA3NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwODIxMDAwMDIwMDBGMDA3NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODIyMDAwMDIwMDBGMDA3Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODIzMDAwMDIwMDBGMDA3Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODI0MDAwMDIwMDBGMDA3ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODI1MDAwMDIwMDBGMDA3OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODI2MDAwMDIwMDBGMDA3QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODI3MDAwMDIwMDBGMDA3Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODI4MDAwMDIwMDBGMDA3Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODI5MDAwMDIwMDBGMDA3RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODJBMDAwMDIwMDBGMDA3RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODJCMDAwMDIwMDBGMDA3Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODJDMDAwMDIwMDBGMDA4MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODJEMDAwMDIwMDBGMDA4MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODJFMDAwMDIwMDBGMDA4Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODJGMDAwMDIwMDBGMDA4Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODMwMDAwMDIwMDBGMDA4NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODMxMDAwMDIwMDBGMDA4NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODMyMDAwMDIwMDBGMDA4Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODMzMDAwMDIwMDBGMDA4Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODM0MDAwMDIwMDBGMDA4ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODM1MDAwMDIwMDBGMDA4OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODM2MDAwMDIwMDBGMDA4QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODM3MDAwMDIwMDBGMDA4Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODM4MDAwMDIwMDBGMDA4Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODM5MDAwMDIwMDBGMDA4RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODNBMDAwMDIwMDBGMDA4RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODNCMDAwMDIwMDBGMDA4Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODNDMDAwMDIwMDBGMDA5MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODNEMDAwMDIwMDBGMDA5MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODNFMDAwMDIwMDBGMDA5Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODNGMDAwMDIwMDBGMDA5Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODQwMDAwMDIwMDBGMDA5NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODQxMDAwMDIwMDBGMDA5NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODQyMDAwMDIwMDBGMDA5Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODQzMDAwMDIwMDBGMDA5Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODQ0MDAwMDIwMDBGMDA5ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODQ1MDAwMDIwMDBGMDA5OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODQ2MDAwMDIwMDBGMDA5QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODQ3MDAwMDIwMDBGMDA5Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODQ4MDAwMDIwMDBGMDA5Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODQ5MDAwMDIwMDBGMDA5RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODRBMDAwMDIwMDBGMDA5RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODRCMDAwMDIwMDBGMDA5Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODRDMDAwMDIwMDBGMDBBMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODREMDAwMDIwMDBGMDBBMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODRFMDAwMDIwMDBGMDBBMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODRGMDAwMDIwMDBGMDBBMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODUwMDAwMDIwMDBGMDBBNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODUxMDAwMDIwMDBGMDBBNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODUyMDAwMDIwMDBGMDBBNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODUzMDAwMDIwMDBGMDBBNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODU0MDAwMDIwMDBGMDBBODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODU1MDAwMDIwMDBGMDBBOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODU2MDAwMDIwMDBGMDBBQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODU3MDAwMDIwMDBGMDBBQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODU4MDAwMDIwMDBGMDBBQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODU5MDAwMDIwMDBGMDBBRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODVBMDAwMDIwMDBGMDBBRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODVCMDAwMDIwMDBGMDBBRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODVDMDAwMDIwMDBGMDBCMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODVEMDAwMDIwMDBGMDBCMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODVFMDAwMDIwMDBGMDBCMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODVGMDAwMDIwMDBGMDBCMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODYwMDAwMDIwMDBGMDBCNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODYxMDAwMDIwMDBGMDBCNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODYyMDAwMDIwMDBGMDBCNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODYzMDAwMDIwMDBGMDBCNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODY0MDAwMDIwMDBGMDBCODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODY1MDAwMDIwMDBGMDBCOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODY2MDAwMDIwMDBGMDBCQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODY3MDAwMDIwMDBGMDBCQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODY4MDAwMDIwMDBGMDBCQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODY5MDAwMDIwMDBGMDBCRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODZBMDAwMDIwMDBGMDBCRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODZCMDAwMDIwMDBGMDBCRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODZDMDAwMDIwMDBGMDBDMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODZEMDAwMDIwMDBGMDBDMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODZFMDAwMDIwMDBGMDBDMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODZGMDAwMDIwMDBGMDBDMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODcwMDAwMDIwMDBGMDBDNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODcxMDAwMDIwMDBGMDBDNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODcyMDAwMDIwMDBGMDBDNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODczMDAwMDIwMDBGMDBDNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODc0MDAwMDIwMDBGMDBDODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODc1MDAwMDIwMDBGMDBDOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODc2MDAwMDIwMDBGMDBDQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODc3MDAwMDIwMDBGMDBDQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODc4MDAwMDIwMDBGMDBDQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODc5MDAwMDIwMDBGMDBDRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODdBMDAwMDIwMDBGMDBDRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODdCMDAwMDIwMDBGMDBDRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODdDMDAwMDIwMDBGMDBEMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODdEMDAwMDIwMDBGMDBEMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODdFMDAwMDIwMDBGMDBEMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODdGMDAwMDIwMDBGMDBEMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwODgwMDAwMDIwMDBGMDBENDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODgxMDAwMDIwMDBGMDBENTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODgyMDAwMDIwMDBGMDBENjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODgzMDAwMDIwMDBGMDBENzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODg0MDAwMDIwMDBGMDBEODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODg1MDAwMDIwMDBGMDBEOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODg2MDAwMDIwMDBGMDBEQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODg3MDAwMDIwMDBGMDBEQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODg4MDAwMDIwMDBGMDBEQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODg5MDAwMDIwMDBGMDBERDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODhBMDAwMDIwMDBGMDBERTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODhCMDAwMDIwMDBGMDBERjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODhDMDAwMDIwMDBGMDBFMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODhEMDAwMDIwMDBGMDBFMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODhFMDAwMDIwMDBGMDBFMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwODhGMDAwMDIwMDBGMDBFMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwODkwMDAwMDIwMDBGMDBFNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODkxMDAwMDIwMDBGMDBFNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODkyMDAwMDIwMDBGMDBFNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODkzMDAwMDIwMDBGMDBFNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODk0MDAwMDIwMDBGMDBFODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODk1MDAwMDIwMDBGMDBFOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODk2MDAwMDIwMDBGMDBFQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODk3MDAwMDIwMDBGMDBFQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODk4MDAwMDIwMDBGMDBFQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODk5MDAwMDIwMDBGMDBFRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODlBMDAwMDIwMDBGMDBFRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODlCMDAwMDIwMDBGMDBFRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODlDMDAwMDIwMDBGMDBGMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODlEMDAwMDIwMDBGMDBGMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwODlFMDAwMDIwMDBGMDBGMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwODlGMDAwMDIwMDBGMDBGMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwOEEwMDAwMDIwMDBGMDBGNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEExMDAwMDIwMDBGMDBGNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEEyMDAwMDIwMDBGMDBGNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEEzMDAwMDIwMDBGMDBGNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEE0MDAwMDIwMDBGMDBGODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOEE1MDAwMDIwMDBGMDBGOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOEE2MDAwMDIwMDBGMDBGQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOEE3MDAwMDIwMDBGMDBGQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOEE4MDAwMDIwMDBGMDBGQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOEE5MDAwMDIwMDBGMDBGRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOEFBMDAwMDIwMDBGMDBGRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOEFCMDAwMDIwMDBGMDBGRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOEFDMDAwMDIwMDBGMDAwMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEFEMDAwMDIwMDBGMDAwMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEFFMDAwMDIwMDBGMDAwMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEFGMDAwMDIwMDBGMDAwMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEIwMDAwMDIwMDBGMDAwNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwOEIxMDAwMDIwMDBGMDAwNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwOEIyMDAwMDIwMDBGMDAwNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOEIzMDAwMDIwMDBGMDAwNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEI0MDAwMDIwMDBGMDAwODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEI1MDAwMDIwMDBGMDAwOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEI2MDAwMDIwMDBGMDAwQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEI3MDAwMDIwMDBGMDAwQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEI4MDAwMDIwMDBGMDAwQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEI5MDAwMDIwMDBGMDAwRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEJBMDAwMDIwMDBGMDAwRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEJCMDAwMDIwMDBGMDAwRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEJDMDAwMDIwMDBGMDAxMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEJEMDAwMDIwMDBGMDAxMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEJFMDAwMDIwMDBGMDAxMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEJGMDAwMDIwMDBGMDAxMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEMwMDAwMDIwMDBGMDAxNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwOEMxMDAwMDIwMDBGMDAxNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOEMyMDAwMDIwMDBGMDAxNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEMzMDAwMDIwMDBGMDAxNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEM0MDAwMDIwMDBGMDAxODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEM1MDAwMDIwMDBGMDAxOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEM2MDAwMDIwMDBGMDAxQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEM3MDAwMDIwMDBGMDAxQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEM4MDAwMDIwMDBGMDAxQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEM5MDAwMDIwMDBGMDAxRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOENBMDAwMDIwMDBGMDAxRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOENCMDAwMDIwMDBGMDAxRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOENDMDAwMDIwMDBGMDAyMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOENEMDAwMDIwMDBGMDAyMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOENFMDAwMDIwMDBGMDAyMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOENGMDAwMDIwMDBGMDAyMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEQwMDAwMDIwMDBGMDAyNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOEQxMDAwMDIwMDBGMDAyNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEQyMDAwMDIwMDBGMDAyNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEQzMDAwMDIwMDBGMDAyNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEQ0MDAwMDIwMDBGMDAyODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEQ1MDAwMDIwMDBGMDAyOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEQ2MDAwMDIwMDBGMDAyQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEQ3MDAwMDIwMDBGMDAyQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEQ4MDAwMDIwMDBGMDAyQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEQ5MDAwMDIwMDBGMDAyRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOERBMDAwMDIwMDBGMDAyRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOERCMDAwMDIwMDBGMDAyRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOERDMDAwMDIwMDBGMDAzMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEREMDAwMDIwMDBGMDAzMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOERFMDAwMDIwMDBGMDAzMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOERGMDAwMDIwMDBGMDAzMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEUwMDAwMDIwMDBGMDAzNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEUxMDAwMDIwMDBGMDAzNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEUyMDAwMDIwMDBGMDAzNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEUzMDAwMDIwMDBGMDAzNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEU0MDAwMDIwMDBGMDAzODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEU1MDAwMDIwMDBGMDAzOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEU2MDAwMDIwMDBGMDAzQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEU3MDAwMDIwMDBGMDAzQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEU4MDAwMDIwMDBGMDAzQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEU5MDAwMDIwMDBGMDAzRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEVBMDAwMDIwMDBGMDAzRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEVCMDAwMDIwMDBGMDAzRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEVDMDAwMDIwMDBGMDA0MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEVEMDAwMDIwMDBGMDA0MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEVFMDAwMDIwMDBGMDA0Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEVGMDAwMDIwMDBGMDA0Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOEYwMDAwMDIwMDBGMDA0NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEYxMDAwMDIwMDBGMDA0NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEYyMDAwMDIwMDBGMDA0Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEYzMDAwMDIwMDBGMDA0Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEY0MDAwMDIwMDBGMDA0ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEY1MDAwMDIwMDBGMDA0OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEY2MDAwMDIwMDBGMDA0QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEY3MDAwMDIwMDBGMDA0Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEY4MDAwMDIwMDBGMDA0Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEY5MDAwMDIwMDBGMDA0RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEZBMDAwMDIwMDBGMDA0RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEZCMDAwMDIwMDBGMDA0Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEZDMDAwMDIwMDBGMDA1MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEZEMDAwMDIwMDBGMDA1MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEZFMDAwMDIwMDBGMDA1Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOEZGMDAwMDIwMDBGMDA1Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTAwMDAwMDIwMDBGMDA1NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOTAxMDAwMDIwMDBGMDA1NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOTAyMDAwMDIwMDBGMDA1Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOTAzMDAwMDIwMDBGMDA1Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTA0MDAwMDIwMDBGMDA1ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTA1MDAwMDIwMDBGMDA1OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTA2MDAwMDIwMDBGMDA1QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTA3MDAwMDIwMDBGMDA1Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTA4MDAwMDIwMDBGMDA1Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTA5MDAwMDIwMDBGMDA1RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTBBMDAwMDIwMDBGMDA1RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTBCMDAwMDIwMDBGMDA1Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTBDMDAwMDIwMDBGMDA2MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTBEMDAwMDIwMDBGMDA2MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTBFMDAwMDIwMDBGMDA2Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTBGMDAwMDIwMDBGMDA2Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTEwMDAwMDIwMDBGMDA2NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOTExMDAwMDIwMDBGMDA2NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOTEyMDAwMDIwMDBGMDA2Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTEzMDAwMDIwMDBGMDA2Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTE0MDAwMDIwMDBGMDA2ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTE1MDAwMDIwMDBGMDA2OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTE2MDAwMDIwMDBGMDA2QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTE3MDAwMDIwMDBGMDA2Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTE4MDAwMDIwMDBGMDA2Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTE5MDAwMDIwMDBGMDA2RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTFBMDAwMDIwMDBGMDA2RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTFCMDAwMDIwMDBGMDA2Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTFDMDAwMDIwMDBGMDA3MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTFEMDAwMDIwMDBGMDA3MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTFFMDAwMDIwMDBGMDA3Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTFGMDAwMDIwMDBGMDA3Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTIwMDAwMDIwMDBGMDA3NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOTIxMDAwMDIwMDBGMDA3NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTIyMDAwMDIwMDBGMDA3Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTIzMDAwMDIwMDBGMDA3Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTI0MDAwMDIwMDBGMDA3ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTI1MDAwMDIwMDBGMDA3OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTI2MDAwMDIwMDBGMDA3QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTI3MDAwMDIwMDBGMDA3Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTI4MDAwMDIwMDBGMDA3Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTI5MDAwMDIwMDBGMDA3RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTJBMDAwMDIwMDBGMDA3RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTJCMDAwMDIwMDBGMDA3Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTJDMDAwMDIwMDBGMDA4MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTJEMDAwMDIwMDBGMDA4MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTJFMDAwMDIwMDBGMDA4Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTJGMDAwMDIwMDBGMDA4Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTMwMDAwMDIwMDBGMDA4NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTMxMDAwMDIwMDBGMDA4NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTMyMDAwMDIwMDBGMDA4Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTMzMDAwMDIwMDBGMDA4Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTM0MDAwMDIwMDBGMDA4ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTM1MDAwMDIwMDBGMDA4OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTM2MDAwMDIwMDBGMDA4QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTM3MDAwMDIwMDBGMDA4Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTM4MDAwMDIwMDBGMDA4Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTM5MDAwMDIwMDBGMDA4RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTNBMDAwMDIwMDBGMDA4RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTNCMDAwMDIwMDBGMDA4Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTNDMDAwMDIwMDBGMDA5MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTNEMDAwMDIwMDBGMDA5MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTNFMDAwMDIwMDBGMDA5Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTNGMDAwMDIwMDBGMDA5Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTQwMDAwMDIwMDBGMDA5NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTQxMDAwMDIwMDBGMDA5NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTQyMDAwMDIwMDBGMDA5Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTQzMDAwMDIwMDBGMDA5Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTQ0MDAwMDIwMDBGMDA5ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTQ1MDAwMDIwMDBGMDA5OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTQ2MDAwMDIwMDBGMDA5QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTQ3MDAwMDIwMDBGMDA5Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTQ4MDAwMDIwMDBGMDA5Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTQ5MDAwMDIwMDBGMDA5RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTRBMDAwMDIwMDBGMDA5RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTRCMDAwMDIwMDBGMDA5Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTRDMDAwMDIwMDBGMDBBMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTREMDAwMDIwMDBGMDBBMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTRFMDAwMDIwMDBGMDBBMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTRGMDAwMDIwMDBGMDBBMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTUwMDAwMDIwMDBGMDBBNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTUxMDAwMDIwMDBGMDBBNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTUyMDAwMDIwMDBGMDBBNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTUzMDAwMDIwMDBGMDBBNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTU0MDAwMDIwMDBGMDBBODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTU1MDAwMDIwMDBGMDBBOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTU2MDAwMDIwMDBGMDBBQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTU3MDAwMDIwMDBGMDBBQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTU4MDAwMDIwMDBGMDBBQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTU5MDAwMDIwMDBGMDBBRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTVBMDAwMDIwMDBGMDBBRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTVCMDAwMDIwMDBGMDBBRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTVDMDAwMDIwMDBGMDBCMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTVEMDAwMDIwMDBGMDBCMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTVFMDAwMDIwMDBGMDBCMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTVGMDAwMDIwMDBGMDBCMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTYwMDAwMDIwMDBGMDBCNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTYxMDAwMDIwMDBGMDBCNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTYyMDAwMDIwMDBGMDBCNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTYzMDAwMDIwMDBGMDBCNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTY0MDAwMDIwMDBGMDBCODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTY1MDAwMDIwMDBGMDBCOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTY2MDAwMDIwMDBGMDBCQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTY3MDAwMDIwMDBGMDBCQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTY4MDAwMDIwMDBGMDBCQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTY5MDAwMDIwMDBGMDBCRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTZBMDAwMDIwMDBGMDBCRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTZCMDAwMDIwMDBGMDBCRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTZDMDAwMDIwMDBGMDBDMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTZEMDAwMDIwMDBGMDBDMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTZFMDAwMDIwMDBGMDBDMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTZGMDAwMDIwMDBGMDBDMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOTcwMDAwMDIwMDBGMDBDNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTcxMDAwMDIwMDBGMDBDNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTcyMDAwMDIwMDBGMDBDNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTczMDAwMDIwMDBGMDBDNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTc0MDAwMDIwMDBGMDBDODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTc1MDAwMDIwMDBGMDBDOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTc2MDAwMDIwMDBGMDBDQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTc3MDAwMDIwMDBGMDBDQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTc4MDAwMDIwMDBGMDBDQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTc5MDAwMDIwMDBGMDBDRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTdBMDAwMDIwMDBGMDBDRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTdCMDAwMDIwMDBGMDBDRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTdDMDAwMDIwMDBGMDBEMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTdEMDAwMDIwMDBGMDBEMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTdFMDAwMDIwMDBGMDBEMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOTdGMDAwMDIwMDBGMDBEMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwOTgwMDAwMDIwMDBGMDBENDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTgxMDAwMDIwMDBGMDBENTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTgyMDAwMDIwMDBGMDBENjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTgzMDAwMDIwMDBGMDBENzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTg0MDAwMDIwMDBGMDBEODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTg1MDAwMDIwMDBGMDBEOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTg2MDAwMDIwMDBGMDBEQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTg3MDAwMDIwMDBGMDBEQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTg4MDAwMDIwMDBGMDBEQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTg5MDAwMDIwMDBGMDBERDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOThBMDAwMDIwMDBGMDBERTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOThCMDAwMDIwMDBGMDBERjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOThDMDAwMDIwMDBGMDBFMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOThEMDAwMDIwMDBGMDBFMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOThFMDAwMDIwMDBGMDBFMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwOThGMDAwMDIwMDBGMDBFMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwOTkwMDAwMDIwMDBGMDBFNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTkxMDAwMDIwMDBGMDBFNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTkyMDAwMDIwMDBGMDBFNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTkzMDAwMDIwMDBGMDBFNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTk0MDAwMDIwMDBGMDBFODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTk1MDAwMDIwMDBGMDBFOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTk2MDAwMDIwMDBGMDBFQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTk3MDAwMDIwMDBGMDBFQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTk4MDAwMDIwMDBGMDBFQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTk5MDAwMDIwMDBGMDBFRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTlBMDAwMDIwMDBGMDBFRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTlCMDAwMDIwMDBGMDBFRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTlDMDAwMDIwMDBGMDBGMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOTlEMDAwMDIwMDBGMDBGMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwOTlFMDAwMDIwMDBGMDBGMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwOTlGMDAwMDIwMDBGMDBGMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwOUEwMDAwMDIwMDBGMDBGNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUExMDAwMDIwMDBGMDBGNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUEyMDAwMDIwMDBGMDBGNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUEzMDAwMDIwMDBGMDBGNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUE0MDAwMDIwMDBGMDBGODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOUE1MDAwMDIwMDBGMDBGOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOUE2MDAwMDIwMDBGMDBGQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOUE3MDAwMDIwMDBGMDBGQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOUE4MDAwMDIwMDBGMDBGQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOUE5MDAwMDIwMDBGMDBGRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOUFBMDAwMDIwMDBGMDBGRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOUFCMDAwMDIwMDBGMDBGRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOUFDMDAwMDIwMDBGMDAwMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUFEMDAwMDIwMDBGMDAwMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUFFMDAwMDIwMDBGMDAwMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUFGMDAwMDIwMDBGMDAwMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUIwMDAwMDIwMDBGMDAwNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwOUIxMDAwMDIwMDBGMDAwNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOUIyMDAwMDIwMDBGMDAwNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOUIzMDAwMDIwMDBGMDAwNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUI0MDAwMDIwMDBGMDAwODg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUI1MDAwMDIwMDBGMDAwOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUI2MDAwMDIwMDBGMDAwQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUI3MDAwMDIwMDBGMDAwQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUI4MDAwMDIwMDBGMDAwQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUI5MDAwMDIwMDBGMDAwRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUJBMDAwMDIwMDBGMDAwRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUJCMDAwMDIwMDBGMDAwRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUJDMDAwMDIwMDBGMDAxMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUJEMDAwMDIwMDBGMDAxMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUJFMDAwMDIwMDBGMDAxMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUJGMDAwMDIwMDBGMDAxMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUMwMDAwMDIwMDBGMDAxNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOUMxMDAwMDIwMDBGMDAxNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOUMyMDAwMDIwMDBGMDAxNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUMzMDAwMDIwMDBGMDAxNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUM0MDAwMDIwMDBGMDAxODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUM1MDAwMDIwMDBGMDAxOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUM2MDAwMDIwMDBGMDAxQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUM3MDAwMDIwMDBGMDAxQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUM4MDAwMDIwMDBGMDAxQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUM5MDAwMDIwMDBGMDAxRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUNBMDAwMDIwMDBGMDAxRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUNCMDAwMDIwMDBGMDAxRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUNDMDAwMDIwMDBGMDAyMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUNEMDAwMDIwMDBGMDAyMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUNFMDAwMDIwMDBGMDAyMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUNGMDAwMDIwMDBGMDAyMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUQwMDAwMDIwMDBGMDAyNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOUQxMDAwMDIwMDBGMDAyNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUQyMDAwMDIwMDBGMDAyNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUQzMDAwMDIwMDBGMDAyNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUQ0MDAwMDIwMDBGMDAyODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUQ1MDAwMDIwMDBGMDAyOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUQ2MDAwMDIwMDBGMDAyQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUQ3MDAwMDIwMDBGMDAyQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUQ4MDAwMDIwMDBGMDAyQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUQ5MDAwMDIwMDBGMDAyRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOURBMDAwMDIwMDBGMDAyRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOURCMDAwMDIwMDBGMDAyRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOURDMDAwMDIwMDBGMDAzMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUREMDAwMDIwMDBGMDAzMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOURFMDAwMDIwMDBGMDAzMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOURGMDAwMDIwMDBGMDAzMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUUwMDAwMDIwMDBGMDAzNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUUxMDAwMDIwMDBGMDAzNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUUyMDAwMDIwMDBGMDAzNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUUzMDAwMDIwMDBGMDAzNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUU0MDAwMDIwMDBGMDAzODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUU1MDAwMDIwMDBGMDAzOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUU2MDAwMDIwMDBGMDAzQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUU3MDAwMDIwMDBGMDAzQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUU4MDAwMDIwMDBGMDAzQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUU5MDAwMDIwMDBGMDAzRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUVBMDAwMDIwMDBGMDAzRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUVCMDAwMDIwMDBGMDAzRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUVDMDAwMDIwMDBGMDA0MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUVEMDAwMDIwMDBGMDA0MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUVFMDAwMDIwMDBGMDA0Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUVGMDAwMDIwMDBGMDA0Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOUYwMDAwMDIwMDBGMDA0NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUYxMDAwMDIwMDBGMDA0NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUYyMDAwMDIwMDBGMDA0Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUYzMDAwMDIwMDBGMDA0Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUY0MDAwMDIwMDBGMDA0ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUY1MDAwMDIwMDBGMDA0OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUY2MDAwMDIwMDBGMDA0QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUY3MDAwMDIwMDBGMDA0Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUY4MDAwMDIwMDBGMDA0Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUY5MDAwMDIwMDBGMDA0RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUZBMDAwMDIwMDBGMDA0RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUZCMDAwMDIwMDBGMDA0Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUZDMDAwMDIwMDBGMDA1MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUZEMDAwMDIwMDBGMDA1MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUZFMDAwMDIwMDBGMDA1Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOUZGMDAwMDIwMDBGMDA1Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTAwMDAwMDIwMDBGMDA1NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQTAxMDAwMDIwMDBGMDA1NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQTAyMDAwMDIwMDBGMDA1Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQTAzMDAwMDIwMDBGMDA1Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTA0MDAwMDIwMDBGMDA1ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTA1MDAwMDIwMDBGMDA1OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTA2MDAwMDIwMDBGMDA1QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTA3MDAwMDIwMDBGMDA1Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTA4MDAwMDIwMDBGMDA1Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTA5MDAwMDIwMDBGMDA1RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTBBMDAwMDIwMDBGMDA1RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTBCMDAwMDIwMDBGMDA1Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTBDMDAwMDIwMDBGMDA2MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTBEMDAwMDIwMDBGMDA2MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTBFMDAwMDIwMDBGMDA2Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTBGMDAwMDIwMDBGMDA2Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTEwMDAwMDIwMDBGMDA2NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQTExMDAwMDIwMDBGMDA2NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQTEyMDAwMDIwMDBGMDA2Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTEzMDAwMDIwMDBGMDA2Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTE0MDAwMDIwMDBGMDA2ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTE1MDAwMDIwMDBGMDA2OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTE2MDAwMDIwMDBGMDA2QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTE3MDAwMDIwMDBGMDA2Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTE4MDAwMDIwMDBGMDA2Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTE5MDAwMDIwMDBGMDA2RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTFBMDAwMDIwMDBGMDA2RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTFCMDAwMDIwMDBGMDA2Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTFDMDAwMDIwMDBGMDA3MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTFEMDAwMDIwMDBGMDA3MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTFFMDAwMDIwMDBGMDA3Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTFGMDAwMDIwMDBGMDA3Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTIwMDAwMDIwMDBGMDA3NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQTIxMDAwMDIwMDBGMDA3NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTIyMDAwMDIwMDBGMDA3Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTIzMDAwMDIwMDBGMDA3Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTI0MDAwMDIwMDBGMDA3ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTI1MDAwMDIwMDBGMDA3OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTI2MDAwMDIwMDBGMDA3QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTI3MDAwMDIwMDBGMDA3Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTI4MDAwMDIwMDBGMDA3Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTI5MDAwMDIwMDBGMDA3RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTJBMDAwMDIwMDBGMDA3RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTJCMDAwMDIwMDBGMDA3Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTJDMDAwMDIwMDBGMDA4MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTJEMDAwMDIwMDBGMDA4MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTJFMDAwMDIwMDBGMDA4Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTJGMDAwMDIwMDBGMDA4Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTMwMDAwMDIwMDBGMDA4NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTMxMDAwMDIwMDBGMDA4NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTMyMDAwMDIwMDBGMDA4Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTMzMDAwMDIwMDBGMDA4Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTM0MDAwMDIwMDBGMDA4ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTM1MDAwMDIwMDBGMDA4OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTM2MDAwMDIwMDBGMDA4QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTM3MDAwMDIwMDBGMDA4Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTM4MDAwMDIwMDBGMDA4Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTM5MDAwMDIwMDBGMDA4RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTNBMDAwMDIwMDBGMDA4RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTNCMDAwMDIwMDBGMDA4Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTNDMDAwMDIwMDBGMDA5MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTNEMDAwMDIwMDBGMDA5MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTNFMDAwMDIwMDBGMDA5Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTNGMDAwMDIwMDBGMDA5Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQTQwMDAwMDIwMDBGMDA5NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTQxMDAwMDIwMDBGMDA5NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTQyMDAwMDIwMDBGMDA5Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTQzMDAwMDIwMDBGMDA5Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTQ0MDAwMDIwMDBGMDA5ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTQ1MDAwMDIwMDBGMDA5OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTQ2MDAwMDIwMDBGMDA5QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTQ3MDAwMDIwMDBGMDA5Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTQ4MDAwMDIwMDBGMDA5Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTQ5MDAwMDIwMDBGMDA5RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTRBMDAwMDIwMDBGMDA5RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTRCMDAwMDIwMDBGMDA5Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTRDMDAwMDIwMDBGMDBBMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTREMDAwMDIwMDBGMDBBMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTRFMDAwMDIwMDBGMDBBMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQTRGMDAwMDIwMDBGMDBBMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQTUwMDAwMDIwMDBGMDBBNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTUxMDAwMDIwMDBGMDBBNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTUyMDAwMDIwMDBGMDBBNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTUzMDAwMDIwMDBGMDBBNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTU0MDAwMDIwMDBGMDBBODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTU1MDAwMDIwMDBGMDBBOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTU2MDAwMDIwMDBGMDBBQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTU3MDAwMDIwMDBGMDBBQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTU4MDAwMDIwMDBGMDBBQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTU5MDAwMDIwMDBGMDBBRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTVBMDAwMDIwMDBGMDBBRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTVCMDAwMDIwMDBGMDBBRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTVDMDAwMDIwMDBGMDBCMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTVEMDAwMDIwMDBGMDBCMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQTVFMDAwMDIwMDBGMDBCMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQTVGMDAwMDIwMDBGMDBCMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQTYwMDAwMDIwMDBGMDBCNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTYxMDAwMDIwMDBGMDBCNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTYyMDAwMDIwMDBGMDBCNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTYzMDAwMDIwMDBGMDBCNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTY0MDAwMDIwMDBGMDBCODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTY1MDAwMDIwMDBGMDBCOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTY2MDAwMDIwMDBGMDBCQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTY3MDAwMDIwMDBGMDBCQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTY4MDAwMDIwMDBGMDBCQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTY5MDAwMDIwMDBGMDBCRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTZBMDAwMDIwMDBGMDBCRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTZCMDAwMDIwMDBGMDBCRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTZDMDAwMDIwMDBGMDBDMDg3NzEwMDc5MDAwMDAwNzY5MDYwRkRFNQorOjEwQTZEMDAwMDIwMDBGMDBDMTg3NzEwMDNEMDAwMDAwNkYwMDgwRjc4RAorOjEwQTZFMDAwMDIwMDBGMDBDMjg3NzEwMDNEMDAwMDAwNkYwMDgwRjc3QworOjEwQTZGMDAwMDIwMDBGMDBDMzg3NzEwMDNEMDAwMDAwNkYwMDgwRjc2QgorOjEwQTcwMDAwMDIwMDBGMDBDNDg3NzE4MDNEMDAwMDAwNkYwMDgwRjdEOQorOjAwMDAwMDAxRkYKKy8qIExvYWRpbmcgRmlybXdhcmUgKi8KKy8qIElOVF9NRU0gVmVyICovCisgKiBUZWh1dGkgTmV0d29ya3MoUikgTmV0d29yayBEcml2ZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZWh1dGkgTmV0d29ya3MgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkCmRpZmYgLS1naXQgYS9mcy9iaW8taW50ZWdyaXR5LmMgYi9mcy9iaW8taW50ZWdyaXR5LmMKaW5kZXggZmUyYjFhYS4uMzFjNDZhMiAxMDA2NDQKLS0tIGEvZnMvYmlvLWludGVncml0eS5jCisrKyBiL2ZzL2Jpby1pbnRlZ3JpdHkuYwpAQCAtMjYsNTUgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmlvX2ludGVncml0eV9zbGFiIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgbWVtcG9vbF90ICpiaW9faW50ZWdyaXR5X3Bvb2w7CitzdGF0aWMgc3RydWN0IGJpb19zZXQgKmludGVncml0eV9iaW9fc2V0Owogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpraW50ZWdyaXR5ZF93cTsKIAogLyoqCi0gKiBiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldCAtIEFsbG9jYXRlIGludGVncml0eSBwYXlsb2FkIGFuZCBhdHRhY2ggaXQgdG8gYmlvCi0gKiBAYmlvOgliaW8gdG8gYXR0YWNoIGludGVncml0eSBtZXRhZGF0YSB0bwotICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCi0gKiBAbnJfdmVjczoJTnVtYmVyIG9mIGludGVncml0eSBtZXRhZGF0YSBzY2F0dGVyLWdhdGhlciBlbGVtZW50cwotICogQGJzOgkJYmlvX3NldCB0byBhbGxvY2F0ZSBmcm9tCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgYSBiaW8gZm9yIGF0dGFjaGluZyBpbnRlZ3JpdHkKLSAqIG1ldGFkYXRhLiAgbnJfdmVjcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGNvbnRhaW5pbmcKLSAqIGludGVncml0eSBtZXRhZGF0YSB0aGF0IGNhbiBiZSBhdHRhY2hlZC4KLSAqLwotc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoc3RydWN0IGJpbyAqYmlvLAotCQkJCQkJCSBnZnBfdCBnZnBfbWFzaywKLQkJCQkJCQkgdW5zaWduZWQgaW50IG5yX3ZlY3MsCi0JCQkJCQkJIHN0cnVjdCBiaW9fc2V0ICpicykKLXsKLQlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXA7Ci0Jc3RydWN0IGJpb192ZWMgKml2OwotCXVuc2lnbmVkIGxvbmcgaWR4OwotCi0JQlVHX09OKGJpbyA9PSBOVUxMKTsKLQotCWJpcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCwgZ2ZwX21hc2spOwotCWlmICh1bmxpa2VseShiaXAgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jIGJpcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltZW1zZXQoYmlwLCAwLCBzaXplb2YoKmJpcCkpOwotCi0JaXYgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl92ZWNzLCAmaWR4LCBicyk7Ci0JaWYgKHVubGlrZWx5KGl2ID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBfdmVjXG4iLCBfX2Z1bmNfXyk7Ci0JCW1lbXBvb2xfZnJlZShiaXAsIGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQliaXAtPmJpcF9wb29sID0gaWR4OwotCWJpcC0+YmlwX3ZlYyA9IGl2OwotCWJpcC0+YmlwX2JpbyA9IGJpbzsKLQliaW8tPmJpX2ludGVncml0eSA9IGJpcDsKLQotCXJldHVybiBiaXA7Ci19Ci1FWFBPUlRfU1lNQk9MKGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KTsKLQotLyoqCiAgKiBiaW9faW50ZWdyaXR5X2FsbG9jIC0gQWxsb2NhdGUgaW50ZWdyaXR5IHBheWxvYWQgYW5kIGF0dGFjaCBpdCB0byBiaW8KICAqIEBiaW86CWJpbyB0byBhdHRhY2ggaW50ZWdyaXR5IG1ldGFkYXRhIHRvCiAgKiBAZ2ZwX21hc2s6CU1lbW9yeSBhbGxvY2F0aW9uIG1hc2sKQEAgLTg4LDE5ICs0NCw0NCBAQAogCQkJCQkJICBnZnBfdCBnZnBfbWFzaywKIAkJCQkJCSAgdW5zaWduZWQgaW50IG5yX3ZlY3MpCiB7Ci0JcmV0dXJuIGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KGJpbywgZ2ZwX21hc2ssIG5yX3ZlY3MsIGZzX2Jpb19zZXQpOworCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqaXY7CisJdW5zaWduZWQgbG9uZyBpZHg7CisKKwlCVUdfT04oYmlvID09IE5VTEwpOworCisJYmlwID0gbWVtcG9vbF9hbGxvYyhiaW9faW50ZWdyaXR5X3Bvb2wsIGdmcF9tYXNrKTsKKwlpZiAodW5saWtlbHkoYmlwID09IE5VTEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KGJpcCwgMCwgc2l6ZW9mKCpiaXApKTsKKworCWl2ID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfdmVjcywgJmlkeCwgaW50ZWdyaXR5X2Jpb19zZXQpOworCWlmICh1bmxpa2VseShpdiA9PSBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwX3ZlY1xuIiwgX19mdW5jX18pOworCQltZW1wb29sX2ZyZWUoYmlwLCBiaW9faW50ZWdyaXR5X3Bvb2wpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwliaXAtPmJpcF9wb29sID0gaWR4OworCWJpcC0+YmlwX3ZlYyA9IGl2OworCWJpcC0+YmlwX2JpbyA9IGJpbzsKKwliaW8tPmJpX2ludGVncml0eSA9IGJpcDsKKworCXJldHVybiBiaXA7CiB9CiBFWFBPUlRfU1lNQk9MKGJpb19pbnRlZ3JpdHlfYWxsb2MpOwogCiAvKioKICAqIGJpb19pbnRlZ3JpdHlfZnJlZSAtIEZyZWUgYmlvIGludGVncml0eSBwYXlsb2FkCiAgKiBAYmlvOgliaW8gY29udGFpbmluZyBiaXAgdG8gYmUgZnJlZWQKLSAqIEBiczoJCWJpb19zZXQgdGhpcyBiaW8gd2FzIGFsbG9jYXRlZCBmcm9tCiAgKgogICogRGVzY3JpcHRpb246IFVzZWQgdG8gZnJlZSB0aGUgaW50ZWdyaXR5IHBvcnRpb24gb2YgYSBiaW8uIFVzdWFsbHkKICAqIGNhbGxlZCBmcm9tIGJpb19mcmVlKCkuCiAgKi8KLXZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb19zZXQgKmJzKQordm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcCA9IGJpby0+YmlfaW50ZWdyaXR5OwogCkBAIC0xMTEsOCArOTIsOCBAQAogCSAgICAmJiBiaXAtPmJpcF9idWYgIT0gTlVMTCkKIAkJa2ZyZWUoYmlwLT5iaXBfYnVmKTsKIAotCWJ2ZWNfZnJlZV9icyhicywgYmlwLT5iaXBfdmVjLCBiaXAtPmJpcF9wb29sKTsKLQltZW1wb29sX2ZyZWUoYmlwLCBicy0+YmlvX2ludGVncml0eV9wb29sKTsKKwlidmVjX2ZyZWVfYnMoaW50ZWdyaXR5X2Jpb19zZXQsIGJpcC0+YmlwX3ZlYywgYmlwLT5iaXBfcG9vbCk7CisJbWVtcG9vbF9mcmVlKGJpcCwgYmlvX2ludGVncml0eV9wb29sKTsKIAogCWJpby0+YmlfaW50ZWdyaXR5ID0gTlVMTDsKIH0KQEAgLTY4NiwxOSArNjY3LDE3IEBACiAgKiBAYmlvOglOZXcgYmlvCiAgKiBAYmlvX3NyYzoJT3JpZ2luYWwgYmlvCiAgKiBAZ2ZwX21hc2s6CU1lbW9yeSBhbGxvY2F0aW9uIG1hc2sKLSAqIEBiczoJCWJpb19zZXQgdG8gYWxsb2NhdGUgYmlwIGZyb20KICAqCiAgKiBEZXNjcmlwdGlvbjoJQ2FsbGVkIHRvIGFsbG9jYXRlIGEgYmlwIHdoZW4gY2xvbmluZyBhIGJpbwogICovCi1pbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsCi0JCQlnZnBfdCBnZnBfbWFzaywgc3RydWN0IGJpb19zZXQgKmJzKQoraW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXBfc3JjID0gYmlvX3NyYy0+YmlfaW50ZWdyaXR5OwogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcDsKIAogCUJVR19PTihiaXBfc3JjID09IE5VTEwpOwogCi0JYmlwID0gYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoYmlvLCBnZnBfbWFzaywgYmlwX3NyYy0+YmlwX3ZjbnQsIGJzKTsKKwliaXAgPSBiaW9faW50ZWdyaXR5X2FsbG9jKGJpbywgZ2ZwX21hc2ssIGJpcF9zcmMtPmJpcF92Y250KTsKIAogCWlmIChiaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CkBAIC03MTQsMzcgKzY5MywyNSBAQAogfQogRVhQT1JUX1NZTUJPTChiaW9faW50ZWdyaXR5X2Nsb25lKTsKIAotaW50IGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKHN0cnVjdCBiaW9fc2V0ICpicywgaW50IHBvb2xfc2l6ZSkKLXsKLQlicy0+YmlvX2ludGVncml0eV9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKHBvb2xfc2l6ZSwKLQkJCQkJCQkgIGJpb19pbnRlZ3JpdHlfc2xhYik7Ci0JaWYgKCFicy0+YmlvX2ludGVncml0eV9wb29sKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYmlvc2V0X2ludGVncml0eV9jcmVhdGUpOwotCi12b2lkIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvX3NldCAqYnMpCi17Ci0JaWYgKGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpCi0JCW1lbXBvb2xfZGVzdHJveShicy0+YmlvX2ludGVncml0eV9wb29sKTsKLX0KLUVYUE9SVF9TWU1CT0woYmlvc2V0X2ludGVncml0eV9mcmVlKTsKLQotdm9pZCBfX2luaXQgYmlvX2ludGVncml0eV9pbml0X3NsYWIodm9pZCkKLXsKLQliaW9faW50ZWdyaXR5X3NsYWIgPSBLTUVNX0NBQ0hFKGJpb19pbnRlZ3JpdHlfcGF5bG9hZCwKLQkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUMpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JpdHlfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmlvX2ludGVncml0eV9pbml0KHZvaWQpCiB7CiAJa2ludGVncml0eWRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJraW50ZWdyaXR5ZCIpOwogCiAJaWYgKCFraW50ZWdyaXR5ZF93cSkKIAkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUga2ludGVncml0eWRcbiIpOwogCisJYmlvX2ludGVncml0eV9zbGFiID0gS01FTV9DQUNIRShiaW9faW50ZWdyaXR5X3BheWxvYWQsCisJCQkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDKTsKKworCWJpb19pbnRlZ3JpdHlfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChCSU9fUE9PTF9TSVpFLAorCQkJCQkJICAgICAgYmlvX2ludGVncml0eV9zbGFiKTsKKwlpZiAoIWJpb19pbnRlZ3JpdHlfcG9vbCkKKwkJcGFuaWMoImJpb19pbnRlZ3JpdHk6IGNhbid0IGFsbG9jYXRlIGJpcCBwb29sXG4iKTsKKworCWludGVncml0eV9iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZShCSU9fUE9PTF9TSVpFLCAwKTsKKwlpZiAoIWludGVncml0eV9iaW9fc2V0KQorCQlwYW5pYygiYmlvX2ludGVncml0eTogY2FuJ3QgYWxsb2NhdGUgYmlvX3NldFxuIik7CisKIAlyZXR1cm4gMDsKIH0KLXN1YnN5c19pbml0Y2FsbChpbnRlZ3JpdHlfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoYmlvX2ludGVncml0eV9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggZDRmMDYzMi4uYTA0MGNkZSAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQlidmVjX2ZyZWVfYnMoYnMsIGJpby0+YmlfaW9fdmVjLCBCSU9fUE9PTF9JRFgoYmlvKSk7CiAKIAlpZiAoYmlvX2ludGVncml0eShiaW8pKQotCQliaW9faW50ZWdyaXR5X2ZyZWUoYmlvLCBicyk7CisJCWJpb19pbnRlZ3JpdHlfZnJlZShiaW8pOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGZyb250IHBhZGRpbmcsIGFkanVzdCB0aGUgYmlvIHBvaW50ZXIgYmVmb3JlIGZyZWVpbmcKQEAgLTMwMSw0OCArMzAxLDUxIEBACiAgKiovCiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfYmlvc2V0KGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzLCBzdHJ1Y3QgYmlvX3NldCAqYnMpCiB7CisJc3RydWN0IGJpb192ZWMgKmJ2bCA9IE5VTEw7CiAJc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKLQl2b2lkICp1bmluaXRpYWxpemVkX3ZhcihwKTsKKwl1bnNpZ25lZCBsb25nIGlkeCA9IDA7CisJdm9pZCAqcCA9IE5VTEw7CiAKIAlpZiAoYnMpIHsKIAkJcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19wb29sLCBnZnBfbWFzayk7Ci0KLQkJaWYgKHApCi0JCQliaW8gPSBwICsgYnMtPmZyb250X3BhZDsKLQl9IGVsc2UKKwkJaWYgKCFwKQorCQkJZ290byBlcnI7CisJCWJpbyA9IHAgKyBicy0+ZnJvbnRfcGFkOworCX0gZWxzZSB7CiAJCWJpbyA9IGttYWxsb2Moc2l6ZW9mKCpiaW8pLCBnZnBfbWFzayk7Ci0KLQlpZiAobGlrZWx5KGJpbykpIHsKLQkJc3RydWN0IGJpb192ZWMgKmJ2bCA9IE5VTEw7Ci0KLQkJYmlvX2luaXQoYmlvKTsKLQkJaWYgKGxpa2VseShucl9pb3ZlY3MpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGlkeCk7Ci0KLQkJCWlmIChucl9pb3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7Ci0JCQkJaWR4ID0gMDsKLQkJCQlidmwgPSBiaW8tPmJpX2lubGluZV92ZWNzOwotCQkJCW5yX2lvdmVjcyA9IEJJT19JTkxJTkVfVkVDUzsKLQkJCX0gZWxzZSB7Ci0JCQkJYnZsID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfaW92ZWNzLCAmaWR4LAotCQkJCQkJCWJzKTsKLQkJCQlucl9pb3ZlY3MgPSBidmVjX25yX3ZlY3MoaWR4KTsKLQkJCX0KLQkJCWlmICh1bmxpa2VseSghYnZsKSkgewotCQkJCWlmIChicykKLQkJCQkJbWVtcG9vbF9mcmVlKHAsIGJzLT5iaW9fcG9vbCk7Ci0JCQkJZWxzZQotCQkJCQlrZnJlZShiaW8pOwotCQkJCWJpbyA9IE5VTEw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQliaW8tPmJpX2ZsYWdzIHw9IGlkeCA8PCBCSU9fUE9PTF9PRkZTRVQ7Ci0JCQliaW8tPmJpX21heF92ZWNzID0gbnJfaW92ZWNzOwotCQl9Ci0JCWJpby0+YmlfaW9fdmVjID0gYnZsOworCQlpZiAoIWJpbykKKwkJCWdvdG8gZXJyOwogCX0KLW91dDoKKworCWJpb19pbml0KGJpbyk7CisKKwlpZiAodW5saWtlbHkoIW5yX2lvdmVjcykpCisJCWdvdG8gb3V0X3NldDsKKworCWlmIChucl9pb3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7CisJCWJ2bCA9IGJpby0+YmlfaW5saW5lX3ZlY3M7CisJCW5yX2lvdmVjcyA9IEJJT19JTkxJTkVfVkVDUzsKKwl9IGVsc2UgeworCQlidmwgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl9pb3ZlY3MsICZpZHgsIGJzKTsKKwkJaWYgKHVubGlrZWx5KCFidmwpKQorCQkJZ290byBlcnJfZnJlZTsKKworCQlucl9pb3ZlY3MgPSBidmVjX25yX3ZlY3MoaWR4KTsKKwl9CisJYmlvLT5iaV9mbGFncyB8PSBpZHggPDwgQklPX1BPT0xfT0ZGU0VUOworCWJpby0+YmlfbWF4X3ZlY3MgPSBucl9pb3ZlY3M7CitvdXRfc2V0OgorCWJpby0+YmlfaW9fdmVjID0gYnZsOworCiAJcmV0dXJuIGJpbzsKKworZXJyX2ZyZWU6CisJaWYgKGJzKQorCQltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKKwllbHNlCisJCWtmcmVlKGJpbyk7CitlcnI6CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhnZnBfdCBnZnBfbWFzaywgaW50IG5yX2lvdmVjcykKQEAgLTQ2Myw3ICs0NjYsNyBAQAogCWlmIChiaW9faW50ZWdyaXR5KGJpbykpIHsKIAkJaW50IHJldDsKIAotCQlyZXQgPSBiaW9faW50ZWdyaXR5X2Nsb25lKGIsIGJpbywgZ2ZwX21hc2ssIGZzX2Jpb19zZXQpOworCQlyZXQgPSBiaW9faW50ZWdyaXR5X2Nsb25lKGIsIGJpbywgZ2ZwX21hc2spOwogCiAJCWlmIChyZXQgPCAwKSB7CiAJCQliaW9fcHV0KGIpOwpAQCAtMTUyNiw3ICsxNTI5LDYgQEAKIAlpZiAoYnMtPmJpb19wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koYnMtPmJpb19wb29sKTsKIAotCWJpb3NldF9pbnRlZ3JpdHlfZnJlZShicyk7CiAJYmlvdmVjX2ZyZWVfcG9vbHMoYnMpOwogCWJpb19wdXRfc2xhYihicyk7CiAKQEAgLTE1NjcsOSArMTU2OSw2IEBACiAJaWYgKCFicy0+YmlvX3Bvb2wpCiAJCWdvdG8gYmFkOwogCi0JaWYgKGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKGJzLCBwb29sX3NpemUpKQotCQlnb3RvIGJhZDsKLQogCWlmICghYmlvdmVjX2NyZWF0ZV9wb29scyhicywgcG9vbF9zaXplKSkKIAkJcmV0dXJuIGJzOwogCkBAIC0xNTg2LDYgKzE1ODUsMTMgQEAKIAkJaW50IHNpemU7CiAJCXN0cnVjdCBiaW92ZWNfc2xhYiAqYnZzID0gYnZlY19zbGFicyArIGk7CiAKKyNpZm5kZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCisJCWlmIChidnMtPm5yX3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7CisJCQlidnMtPnNsYWIgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCiAJCXNpemUgPSBidnMtPm5yX3ZlY3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpOwogCQlidnMtPnNsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShidnMtPm5hbWUsIHNpemUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLCBOVUxMKTsKQEAgLTE2MDAsNyArMTYwNiw2IEBACiAJaWYgKCFiaW9fc2xhYnMpCiAJCXBhbmljKCJiaW86IGNhbid0IGFsbG9jYXRlIGJpb3NcbiIpOwogCi0JYmlvX2ludGVncml0eV9pbml0X3NsYWIoKTsKIAliaW92ZWNfaW5pdF9zbGFicygpOwogCiAJZnNfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoQklPX1BPT0xfU0laRSwgMCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggM2UxODE3NS4uNmVjODBjMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMjM4NSw3ICsyMzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRocmVzaCA9IDMyICogMTAyNCAqIDEwMjQ7CiAJdHJlZSA9ICZCVFJGU19JKHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlKS0+aW9fdHJlZTsKIAotCWlmIChjdXJyZW50X2lzX3BkZmx1c2goKSB8fCBjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQorCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQogCQlyZXR1cm47CiAKIAludW1fZGlydHkgPSBjb3VudF9yYW5nZV9iaXRzKHRyZWUsICZzdGFydCwgKHU2NCktMSwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA4NTEzODhmLi42NTk4NDAwIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC02LDcgKzYsMTYgQEAKIGFyZSBhdXRoZW50aWNhdGVkIGFzIGd1ZXN0LCBhcyByZWNvbm5lY3Rpb25zLCBpbnZhbGlkYXRpbmcgdGhlIGVhcmxpZXIKIHVzZXIncyBzbWIgc2Vzc2lvbi4gIFRoaXMgZml4IGFsbG93cyBjaWZzIHRvIG1vdW50IG11bHRpcGxlIHRpbWVzIHRvIHRoZQogc2FtZSBzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgdXNlcmlkcyB3aXRob3V0IHJpc2tpbmcgaW52YWxpZGF0aW5nIGVhcmxpZXIKLWVzdGFibGlzaGVkIHNlY3VyaXR5IGNvbnRleHRzLgorZXN0YWJsaXNoZWQgc2VjdXJpdHkgY29udGV4dHMuICBmc3luYyBub3cgc2VuZHMgU01CIEZsdXNoIG9wZXJhdGlvbgordG8gYmV0dGVyIGVuc3VyZSB0aGF0IHdlIHdhaXQgZm9yIHNlcnZlciB0byB3cml0ZSBhbGwgb2YgdGhlIGRhdGEgdG8KK3NlcnZlciBkaXNrIChub3QganVzdCB3cml0ZSBpdCBvdmVyIHRoZSBuZXR3b3JrKS4gIEFkZCBuZXcgbW91bnQKK3BhcmFtZXRlciB0byBhbGxvdyB1c2VyIHRvIGRpc2FibGUgc2VuZGluZyB0aGUgKHNsb3cpIFNNQiBmbHVzaCBvbgorZnN5bmMgaWYgZGVzaXJlZCAoZnN5bmMgc3RpbGwgZmx1c2hlcyBhbGwgY2FjaGVkIHdyaXRlIGRhdGEgdG8gdGhlIHNlcnZlcikuCitQb3NpeCBmaWxlIG9wZW4gc3VwcG9ydCBhZGRlZCAodHVybmVkIG9mZiBhZnRlciBvbmUgYXR0ZW1wdCBpZiBzZXJ2ZXIKK2ZhaWxzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHksIGFzIHdpdGggU2FtYmEgc2VydmVyIHZlcnNpb25zIHByaW9yIHRvIDMuMy4yKQorRml4ICJyZWR6b25lIG92ZXJ3cml0dGVuIiBidWcgaW4gY2lmc19wdXRfdGNvbiAoQ0lGU1Rjb24gbWF5IGFsbG9jYXRlIHRvbworbGl0dGxlIG1lbW9yeSBmb3IgdGhlICJuYXRpdmVGaWxlU3lzdGVtIiBmaWVsZCByZXR1cm5lZCBieSB0aGUgc2VydmVyCitkdXJpbmcgbW91bnQpLiAKIAogVmVyc2lvbiAxLjU2CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCAzNDFhOTg5Li42OTk0YTBmIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0xMTgsNiArMTE4LDE4IEBACiAJICAgb3B0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZwogCSAgIGNpZnMgcHJvYmxlbXMuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgQ0lGU19ERlNfVVBDQUxMCisJICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IgorCSAgZGVwZW5kcyBvbiBDSUZTICYmIEtFWVMKKwkgIGhlbHAKKwkgICAgRGlzdHJpYnV0ZWQgRmlsZSBTeXN0ZW0gKERGUykgc3VwcG9ydCBpcyB1c2VkIHRvIGFjY2VzcyBzaGFyZXMKKwkgICAgdHJhbnNwYXJlbnRseSBpbiBhbiBlbnRlcnByaXNlIG5hbWUgc3BhY2UsIGV2ZW4gaWYgdGhlIHNoYXJlCisJICAgIG1vdmVzIHRvIGEgZGlmZmVyZW50IHNlcnZlci4gIFRoaXMgZmVhdHVyZSBhbHNvIGVuYWJsZXMKKwkgICAgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UgaGVscGVyCisJICAgIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KKwkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KKwkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQ0lGU19FWFBFUklNRU5UQUwKIAkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgogCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTApAQCAtMTMxLDEyICsxNDMsMyBAQAogCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRQogCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIENJRlNfREZTX1VQQ0FMTAotCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKLQkgIGRlcGVuZHMgb24gS0VZUwotCSAgaGVscAotCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlCi0JICAgIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCi0JICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCi0JICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggZGE0NTE1ZS4uMDc0MzQxOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTQ3Miw2ICs0NzIsMTkgQEAKIAkJZXZlbiBpZiB0aGUgY2lmcyBzZXJ2ZXIgd291bGQgc3VwcG9ydCBwb3NpeCBhZHZpc29yeSBsb2Nrcy4KIAkJImZvcmNlbWFuZCIgaXMgYWNjZXB0ZWQgYXMgYSBzaG9ydGVyIGZvcm0gb2YgdGhpcyBtb3VudAogCQlvcHRpb24uCisgbm9zdHJpY3RzeW5jICAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgc2V0LCB3aGVuIGFuIGFwcGxpY2F0aW9uIGRvZXMgYW4KKwkJZnN5bmMgY2FsbCB0aGVuIHRoZSBjaWZzIGNsaWVudCBkb2VzIG5vdCBzZW5kIGFuIFNNQiBGbHVzaAorCQl0byB0aGUgc2VydmVyICh0byBmb3JjZSB0aGUgc2VydmVyIHRvIHdyaXRlIGFsbCBkaXJ0eSBkYXRhCisJCWZvciB0aGlzIGZpbGUgaW1tZWRpYXRlbHkgdG8gZGlzayksIGFsdGhvdWdoIGNpZnMgc3RpbGwgc2VuZHMKKwkJYWxsIGRpcnR5IChjYWNoZWQpIGZpbGUgZGF0YSB0byB0aGUgc2VydmVyIGFuZCB3YWl0cyBmb3IgdGhlCisJCXNlcnZlciB0byByZXNwb25kIHRvIHRoZSB3cml0ZS4gIFNpbmNlIFNNQiBGbHVzaCBjYW4gYmUKKwkJdmVyeSBzbG93LCBhbmQgc29tZSBzZXJ2ZXJzIG1heSBiZSByZWxpYWJsZSBlbm91Z2ggKHRvIHJpc2sKKwkJZGVsYXlpbmcgc2xpZ2h0bHkgZmx1c2hpbmcgdGhlIGRhdGEgdG8gZGlzayBvbiB0aGUgc2VydmVyKSwKKwkJdHVybmluZyBvbiB0aGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yCisJCWFwcGxpY2F0aW9ucyB0aGF0IGZzeW5jIHRvbyBtdWNoLCBhdCBhIHNtYWxsIHJpc2sgb2Ygc2VydmVyCisJCWNyYXNoLiAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgbm90IHNldCwgYnkgZGVmYXVsdCBjaWZzIHdpbGwKKwkJc2VuZCBhbiBTTUIgZmx1c2ggcmVxdWVzdCAoYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UpIG9uIGV2ZXJ5CisJCWZzeW5jIGNhbGwuCiAgbm9kZnMgICAgICAgICAgRGlzYWJsZSBERlMgKGdsb2JhbCBuYW1lIHNwYWNlIHN1cHBvcnQpIGV2ZW4gaWYgdGhlCiAJCXNlcnZlciBjbGFpbXMgdG8gc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGhlbHAgd29yayBhcm91bmQKIAkJYSBwcm9ibGVtIHdpdGggcGFyc2luZyBvZiBERlMgcGF0aHMgd2l0aCBTYW1iYSBzZXJ2ZXIKQEAgLTY5MiwxMyArNzA1LDE0IEBACiBjaWZzLnVwY2FsbCBoZWxwZXIgcHJvZ3JhbSksIGluc3RlYWQgb2YgdXNpbmcgS2VyYmVyb3MsIGlzIHN1ZmZpY2llbnQgZm9yCiBzb21lIHVzZSBjYXNlcy4KIAotRW5hYmxpbmcgREZTIHN1cHBvcnQgKHVzZWQgdG8gYWNjZXNzIHNoYXJlcyB0cmFuc3BhcmVudGx5IGluIGFuIE1TLURGUwotZ2xvYmFsIG5hbWUgc3BhY2UpIHJlcXVpcmVzIHRoYXQgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGJlIGVuYWJsZWQuICBJbgotYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCitERlMgc3VwcG9ydCBhbGxvd3MgdHJhbnNwYXJlbnQgcmVkaXJlY3Rpb24gdG8gc2hhcmVzIGluIGFuIE1TLURGUyBuYW1lIHNwYWNlLgorSW4gYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCiBuYW1lcyB3aGljaCBiZWdpbiB3aXRoIGhvc3QgbmFtZXMgKHJhdGhlciB0aGFuIElQIGFkZHJlc3NlcykgcmVxdWlyZXMKIGEgdXNlciBzcGFjZSBoZWxwZXIgKHN1Y2ggYXMgY2lmcy51cGNhbGwpIHRvIGJlIHByZXNlbnQgaW4gb3JkZXIgdG8KIHRyYW5zbGF0ZSBob3N0IG5hbWVzIHRvIGlwIGFkZHJlc3MsIGFuZCB0aGUgdXNlciBzcGFjZSBoZWxwZXIgbXVzdCBhbHNvCi1iZSBjb25maWd1cmVkIGluIHRoZSBmaWxlIC9ldGMvcmVxdWVzdC1rZXkuY29uZgorYmUgY29uZmlndXJlZCBpbiB0aGUgZmlsZSAvZXRjL3JlcXVlc3Qta2V5LmNvbmYuICBTYW1iYSwgV2luZG93cyBzZXJ2ZXJzIGFuZAorbWFueSBOQVMgYXBwbGlhbmNlcyBzdXBwb3J0IERGUyBhcyBhIHdheSBvZiBjb25zdHJ1Y3RpbmcgYSBnbG9iYWwgbmFtZQorc3BhY2UgdG8gZWFzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGltcHJvdmUgcmVsaWFiaWxpdHkuCiAKIFRvIHVzZSBjaWZzIEtlcmJlcm9zIGFuZCBERlMgc3VwcG9ydCwgdGhlIExpbnV4IGtleXV0aWxzIHBhY2thZ2Ugc2hvdWxkIGJlCiBpbnN0YWxsZWQgYW5kIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCA0OTBlMzRiLi44NzdlNGQ5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtMzQwLDYgKzM0MCw4IEBACiAJCQkJc2VxX3ByaW50ZihtLCAiXG5Xcml0ZXM6ICVkIEJ5dGVzOiAlbGxkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV93cml0ZXMpLAogCQkJCQkobG9uZyBsb25nKSh0Y29uLT5ieXRlc193cml0dGVuKSk7CisJCQkJc2VxX3ByaW50ZihtLCAiXG5GbHVzaGVzOiAlZCIsCisJCQkJCWF0b21pY19yZWFkKCZ0Y29uLT5udW1fZmx1c2hlcykpOwogCQkJCXNlcV9wcmludGYobSwgIlxuTG9ja3M6ICVkIEhhcmRMaW5rczogJWQgIgogCQkJCQkgICAgICAiU3ltbGlua3M6ICVkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV9sb2NrcyksCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA4NWMwYTc0Li41ZmRiZjhhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTEwNCw5ICsxMDQsOSBAQAogCiAKIC8qKgotICogY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKKyAqIGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKICAqIEBzYl9tb3VudGRhdGE6CXBhcmVudC9yb290IERGUyBtb3VudCBvcHRpb25zICh0ZW1wbGF0ZSkKLSAqIEBkZW50cnk6CQlwb2ludCB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gbW91bnQKKyAqIEBmdWxscGF0aDoJCWZ1bGwgcGF0aCBpbiBVTkMgZm9ybWF0CiAgKiBAcmVmOgkJc2VydmVyJ3MgcmVmZXJyYWwKICAqIEBkZXZuYW1lOgkJcG9pbnRlciBmb3Igc2F2aW5nIGRldmljZSBuYW1lCiAgKgpAQCAtMTE2LDggKzExNiw4IEBACiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIG5ldyBtb3VudCBvcHRpb25zIG9yIEVSUl9QVFIuCiAgKiBDYWxsZXIgaXMgcmVzcG9uY2libGUgZm9yIGZyZWVpbmcgcmV0dW5ybmVkIHZhbHVlIGlmIGl0IGlzIG5vdCBlcnJvci4KICAqLwotc3RhdGljIGNoYXIgKmNvbXBvc2VfbW91bnRfb3B0aW9ucyhjb25zdCBjaGFyICpzYl9tb3VudGRhdGEsCi0JCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorY2hhciAqY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqc2JfbW91bnRkYXRhLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKIAkJCQkgICBjaGFyICoqZGV2bmFtZSkKIHsKQEAgLTEyOCw3ICsxMjgsNiBAQAogCWNoYXIgKnNydklQID0gTlVMTDsKIAljaGFyIHNlcCA9ICcsJzsKIAlpbnQgb2ZmLCBub2ZmOwotCWNoYXIgKmZ1bGxwYXRoOwogCiAJaWYgKHNiX21vdW50ZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTIwMiwxNyArMjAxLDYgQEAKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwogCX0KIAotCS8qCi0JICogdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyBhIHBhdGggd2l0aCBhIGRvdWJsZSBiYWNrc2xhc2ggcHJlZml4LiBXZQotCSAqIHJlcXVpcmUgYSBzaW5nbGUgYmFja3NsYXNoIGZvciBERlMuIFRlbXBvcmFyaWx5IGluY3JlbWVudCBmdWxscGF0aAotCSAqIHRvIHB1dCBpdCBpbiB0aGUgcHJvcGVyIGZvcm0gYW5kIGRlY3JlbWVudCBiZWZvcmUgZnJlZWluZyBpdC4KLQkgKi8KLQlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKLQlpZiAoIWZ1bGxwYXRoKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwotCX0KLQkrK2Z1bGxwYXRoOwogCXRrbl9lID0gc3RyY2hyKHRrbl9lICsgMSwgJ1xcJyk7CiAJaWYgKHRrbl9lIHx8IChzdHJsZW4oZnVsbHBhdGgpIC0gcmVmLT5wYXRoX2NvbnN1bWVkKSkgewogCQlzdHJuY2F0KG1vdW50ZGF0YSwgJnNlcCwgMSk7CkBAIC0yMjEsOCArMjA5LDYgQEAKIAkJCXN0cmNhdChtb3VudGRhdGEsIHRrbl9lICsgMSk7CiAJCXN0cmNhdChtb3VudGRhdGEsIGZ1bGxwYXRoICsgcmVmLT5wYXRoX2NvbnN1bWVkKTsKIAl9Ci0JLS1mdWxscGF0aDsKLQlrZnJlZShmdWxscGF0aCk7CiAKIAkvKmNGWUkoMSwoIiVzOiBwYXJlbnQgbW91bnRkYXRhOiAlcyIsIF9fZnVuY19fLHNiX21vdW50ZGF0YSkpOyovCiAJLypjRllJKDEsICgiJXM6IHN1Ym1vdW50IG1vdW50ZGF0YTogJXMiLCBfX2Z1bmNfXywgbW91bnRkYXRhICkpOyovCkBAIC0yNDUsMTAgKzIzMSwyMCBAQAogCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCWNoYXIgKm1vdW50ZGF0YTsKIAljaGFyICpkZXZuYW1lID0gTlVMTDsKKwljaGFyICpmdWxscGF0aDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGRlbnRyeS0+ZF9pbm9kZS0+aV9zYik7Ci0JbW91bnRkYXRhID0gY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKLQkJCQkJCWRlbnRyeSwgcmVmLCAmZGV2bmFtZSk7CisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGdpdmVzIHVzIGEgcGF0aCB3aXRoIGEgZG91YmxlIGJhY2tzbGFzaCBwcmVmaXguIFdlCisJICogcmVxdWlyZSBhIHNpbmdsZSBiYWNrc2xhc2ggZm9yIERGUy4KKwkgKi8KKwlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKKwlpZiAoIWZ1bGxwYXRoKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1vdW50ZGF0YSA9IGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKKwkJCWZ1bGxwYXRoICsgMSwgcmVmLCAmZGV2bmFtZSk7CisJa2ZyZWUoZnVsbHBhdGgpOwogCiAJaWYgKElTX0VSUihtb3VudGRhdGEpKQogCQlyZXR1cm4gKHN0cnVjdCB2ZnNtb3VudCAqKW1vdW50ZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19mc19zYi5oIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKaW5kZXggYzRjMzA2Zi4uNDc5Nzc4NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKKysrIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgQ0lGU19NT1VOVF9PVkVSUl9HSUQgICAgMHg4MDAgLyogb3ZlcnJpZGUgZ2lkIHJldHVybmVkIGZyb20gc2VydmVyICAgICovCiAjZGVmaW5lIENJRlNfTU9VTlRfRFlOUEVSTSAgICAgIDB4MTAwMCAvKiBhbGxvdyBpbi1tZW1vcnkgb25seSBtb2RlIHNldHRpbmcgICAqLwogI2RlZmluZSBDSUZTX01PVU5UX05PUE9TSVhCUkwgICAweDIwMDAgLyogbWFuZGF0b3J5IG5vdCBwb3NpeCBieXRlIHJhbmdlIGxvY2sgKi8KKyNkZWZpbmUgQ0lGU19NT1VOVF9OT1NTWU5DICAgICAgMHg0MDAwIC8qIGRvbid0IGRvIHNsb3cgU01CZmx1c2ggb24gZXZlcnkgc3luYyovCiAKIHN0cnVjdCBjaWZzX3NiX2luZm8gewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CS8qIHByaW1hcnkgbW91bnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCBlMDA0ZjZkLi45ZmJmNGRmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0yNTQsNiArMjU0LDcgQEAKIAlhdG9taWNfdCBudW1fc21ic19zZW50OwogCWF0b21pY190IG51bV93cml0ZXM7CiAJYXRvbWljX3QgbnVtX3JlYWRzOworCWF0b21pY190IG51bV9mbHVzaGVzOwogCWF0b21pY190IG51bV9vcGxvY2tfYnJrczsKIAlhdG9taWNfdCBudW1fb3BlbnM7CiAJYXRvbWljX3QgbnVtX2Nsb3NlczsKQEAgLTI5OCw2ICsyOTksNyBAQAogCWJvb2wgdW5peF9leHQ6MTsgIC8qIGlmIGZhbHNlIGRpc2FibGUgTGludXggZXh0ZW5zaW9ucyB0byBDSUZTIHByb3RvY29sCiAJCQkJZm9yIHRoaXMgbW91bnQgZXZlbiBpZiBzZXJ2ZXIgd291bGQgc3VwcG9ydCAqLwogCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIChvbmx5KSBvbiBsb2NhbCBzeXN0ZW0gbm90IHJlbW90ZSAqLworCWJvb2wgYnJva2VuX3Bvc2l4X29wZW47IC8qIGUuZy4gU2FtYmEgc2VydmVyIHZlcnNpb25zIDwgMy4zLjIsIDMuMi45ICovCiAJYm9vbCBuZWVkX3JlY29ubmVjdDoxOyAvKiBjb25uZWN0aW9uIHJlc2V0LCB0aWQgbm93IGludmFsaWQgKi8KIAkvKiBCQiBhZGQgZmllbGQgZm9yIGJhY2sgcG9pbnRlciB0byBzYiBzdHJ1Y3Qocyk/ICovCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBiNGUyZTlmMC4uYjM3MDQ4OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNwZHUuaAogICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA4CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgX0NJRlNQRFVfSAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlICJzbWJmc2N0bC5oIgogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICiAjZGVmaW5lIExBTk1BTl9QUk9UIDAKQEAgLTM0LDE1ICszNSwxNSBAQAogI2RlZmluZSBQT1NJWF9QUk9UICAoQ0lGU19QUk9UKzEpCiAjZGVmaW5lIEJBRF9QUk9UIDB4RkZGRgogCi0vKiBTTUIgY29tbWFuZCBjb2RlcyAqLwotLyoKLSAqIFNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcworLyogU01CIGNvbW1hbmQgY29kZXM6CisgKiBOb3RlIHNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcwogICogKGllIHdoaWNoIGluY2x1ZGUgbm8gdXNlZnVsIGRhdGEgb3RoZXIgdGhhbiB0aGUgU01CIGVycm9yIGNvZGUgaXRzZWxmKS4KLSAqIEtub3dpbmcgdGhpcyBoZWxwcyBhdm9pZCByZXNwb25zZSBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHkgaW4gc29tZSBjYXNlcworICogVGhpcyBjYW4gYWxsb3cgdXMgdG8gYXZvaWQgcmVzcG9uc2UgYnVmZmVyIGFsbG9jYXRpb25zIGFuZCBjb3B5IGluIHNvbWUgY2FzZXMKICAqLwogI2RlZmluZSBTTUJfQ09NX0NSRUFURV9ESVJFQ1RPUlkgICAgICAweDAwIC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9ERUxFVEVfRElSRUNUT1JZICAgICAgMHgwMSAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fQ0xPU0UgICAgICAgICAgICAgICAgIDB4MDQgLyogdHJpdiByZXEvcnNwLCB0aW1lc3RhbXAgaWdub3JlZCAqLworI2RlZmluZSBTTUJfQ09NX0ZMVVNIICAgICAgICAgICAgICAgICAweDA1IC8qIHRyaXYgcmVxL3JzcCAqLwogI2RlZmluZSBTTUJfQ09NX0RFTEVURSAgICAgICAgICAgICAgICAweDA2IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9SRU5BTUUgICAgICAgICAgICAgICAgMHgwNyAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fUVVFUllfSU5GT1JNQVRJT04gICAgIDB4MDggLyogYWthIGdldGF0dHIgKi8KQEAgLTc5MCw2ICs3OTEsMTIgQEAKIAlfX3UxNiBCeXRlQ291bnQ7CS8qIGJjdCA9IDAgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgQ0xPU0VfUlNQOwogCit0eXBlZGVmIHN0cnVjdCBzbWJfY29tX2ZsdXNoX3JlcSB7CisJc3RydWN0IHNtYl9oZHIgaGRyOwkvKiB3Y3QgPSAxICovCisJX191MTYgRmlsZUlEOworCV9fdTE2IEJ5dGVDb3VudDsJLyogMCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGTFVTSF9SRVE7CisKIHR5cGVkZWYgc3RydWN0IHNtYl9jb21fZmluZGNsb3NlX3JlcSB7CiAJc3RydWN0IHNtYl9oZHIgaGRyOyAvKiB3Y3QgPSAxICovCiAJX191MTYgRmlsZUlEOwpAQCAtMTkyNCwxOSArMTkzMSwxOSBAQAogI2RlZmluZSBERlNfVFlQRV9ST09UIDB4MDAwMQogCiAvKiBSZWZlcnJhbCBFbnRyeSBGbGFncyAqLwotI2RlZmluZSBERlNfTkFNRV9MSVNUX1JFRiAweDAyMDAKKyNkZWZpbmUgREZTX05BTUVfTElTVF9SRUYgMHgwMjAwIC8qIHNldCBmb3IgZG9tYWluIG9yIERDIHJlZmVycmFsIHJlc3BvbnNlcyAqLworI2RlZmluZSBERlNfVEFSR0VUX1NFVF9CT1VOREFSWSAweDA0MDAgLyogb25seSB2YWxpZCB3aXRoIHZlcnNpb24gNCBkZnMgcmVxICovCiAKLXR5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsKLQlfX2xlMTYgVmVyc2lvbk51bWJlcjsKK3R5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsgLyogdmVyc2lvbiA0IGlzIHNhbWUsICsgb25lIGZsYWcgYml0ICovCisJX19sZTE2IFZlcnNpb25OdW1iZXI7ICAvKiBtdXN0IGJlIDMgb3IgNCAqLwogCV9fbGUxNiBTaXplOwogCV9fbGUxNiBTZXJ2ZXJUeXBlOyAvKiAweDAwMDEgPSByb290IHRhcmdldHM7IDB4MDAwMCA9IGxpbmsgdGFyZ2V0cyAqLwotCV9fbGUxNiBSZWZlcnJhbEVudHJ5RmxhZ3M7IC8qIDB4MDIwMCBiaXQgc2V0IG9ubHkgZm9yIGRvbWFpbgotCQkJCSAgICAgIG9yIERDIHJlZmVycmFsIHJlc3BvbmNlICovCisJX19sZTE2IFJlZmVycmFsRW50cnlGbGFnczsKIAlfX2xlMzIgVGltZVRvTGl2ZTsKIAlfX2xlMTYgRGZzUGF0aE9mZnNldDsKIAlfX2xlMTYgRGZzQWx0ZXJuYXRlUGF0aE9mZnNldDsKIAlfX2xlMTYgTmV0d29ya0FkZHJlc3NPZmZzZXQ7IC8qIG9mZnNldCBvZiB0aGUgbGluayB0YXJnZXQgKi8KLQlfX2xlMTYgU2VydmljZVNpdGVHdWlkOworCV9fdTggICBTZXJ2aWNlU2l0ZUd1aWRbMTZdOyAgLyogTUJaLCBpZ25vcmVkICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFJFRkVSUkFMMzsKIAogdHlwZWRlZiBzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbl9nZXRfZGZzX3JlZmVyX3JzcCB7CkBAIC0xOTQ2LDQ4ICsxOTUzLDE1IEBACiAJX191OCBQYWQ7CiAJX19sZTE2IFBhdGhDb25zdW1lZDsKIAlfX2xlMTYgTnVtYmVyT2ZSZWZlcnJhbHM7Ci0JX19sZTE2IERGU0ZsYWdzOwotCV9fdTE2IFBhZDI7CisJX19sZTMyIERGU0ZsYWdzOwogCVJFRkVSUkFMMyByZWZlcnJhbHNbMV07CS8qIGFycmF5IG9mIGxldmVsIDMgZGZzX3JlZmVycmFsIHN0cnVjdHVyZXMgKi8KIAkvKiBmb2xsb3dlZCBieSB0aGUgc3RyaW5ncyBwb2ludGVkIHRvIGJ5IHRoZSByZWZlcnJhbCBzdHJ1Y3R1cmVzICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFRSQU5TQUNUSU9OMl9HRVRfREZTX1JFRkVSX1JTUDsKIAogLyogREZTIEZsYWdzICovCi0jZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMQotI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDIKLQotLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KLS8qCi0gKiBMaXN0IG9mIGlvY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgbG9vayB0byBiZSBvZiBpbnRlcmVzdCB0byByZW1vdGUgY2xpZW50cwotICogbGlrZSB0aGlzIG9uZS4gIE5lZWQgdG8gZG8gc29tZSBleHBlcmltZW50YXRpb24gdG8gbWFrZSBzdXJlIHRoZXkgYWxsIHdvcmsKLSAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKLSAqIHdvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKLSAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCi0gKi8KLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAotI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKLSNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4Ci0jZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQwotI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MKLSNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QwotI2RlZmluZSBGU0NUTF9GSUxFU1lTX0dFVF9TVEFUSVNUSUNTIDB4MDAwOTAwOTAKLSNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0Ci0jZGVmaW5lIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5UICAgICAgMHgwMDA5MDBBOAotI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMKLSNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0Ci0jZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOAotI2RlZmluZSBGU0NUTF9TRVRfRU5DUllQVElPTiAgICAgICAgIDB4MDAwOTAwRDcKLSNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCCi0jZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERgotI2RlZmluZSBGU0NUTF9SRUFEX1JBV19FTkNSWVBURUQgICAgIDB4MDAwOTAwRTMKLSNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwCi0jZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAotCi0jZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMwotI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKLSNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CisjZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMDAwMDEgLyogYWxsIHRhcmdldHMgYXJlIERGUyByb290cyAqLworI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDAwMDAyIC8qIG5vIGZ1cnRoZXIgcmVmIHJlcXVlc3RzIG5lZWRlZCAqLworI2RlZmluZSBERlNSRUZfVEFSR0VUX0ZBSUxCQUNLICAweDAwMDAwMDA0IC8qIG9ubHkgZm9yIERGUyByZWZlcnJhbCB2ZXJzaW9uIDQgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MDgsOCArMjQ4Miw2IEBACiAJNikgVXNlIG5hbm9zZWNvbmQgdGltZXN0YW1wcyB0aHJvdWdob3V0IGFsbCB0aW1lIGZpZWxkcyBpZgogCSAgIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZsYWcgaXMgc2V0CiAJNykgc2VuZGZpbGUgLSBoYW5kbGUgYmFzZWQgY29weQotCTgpIERpcmVjdCBpL28KLQk5KSBNaXNjIGZjbnRscz8KIAogCXdoYXQgYWJvdXQgZml4aW5nIDY0IGJpdCBhbGlnbm1lbnQKIApAQCAtMjYyOCw3ICsyNjAwLDUgQEAKIAlfX2xlNjQJbW9kZTsgLyogbGlzdCBvZiBhY3R1YWwgYXR0cmlidXRlIGJpdHMgb24gdGhpcyBpbm9kZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGSUxFX0NIQVRUUl9JTkZPOyAgLyogZXh0IGF0dHJpYnV0ZXMKIAkJCQkJCShjaGF0dHIsIGNoZmxhZ3MpIGxldmVsIDB4MjA2ICovCi0KLSNlbmRpZgotCisjZW5kaWYgCQkJCS8qIFBPU0lYICovCiAjZW5kaWYJCQkJLyogX0NJRlNQRFVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggMDgzZGZjNS4uNDE2NzcxNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC00NCw2ICs0NCw5IEBACiBleHRlcm4gY2hhciAqYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGNoYXIgKmNpZnNfYnVpbGRfcGF0aF90b19yb290KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwogZXh0ZXJuIGNoYXIgKmJ1aWxkX3dpbGRjYXJkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGlyZW50cnkpOworZXh0ZXJuIGNoYXIgKmNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKnNiX21vdW50ZGF0YSwKKwkJY29uc3QgY2hhciAqZnVsbHBhdGgsIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKKwkJY2hhciAqKmRldm5hbWUpOwogLyogZXh0ZXJuIHZvaWQgcmVuZXdfcGFyZW50YWxfdGltZXN0YW1wcyhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7Ki8KIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUoY29uc3QgdW5zaWduZWQgaW50IC8qIHhpZCAqLyAsIHN0cnVjdCBjaWZzU2VzSW5mbyAqLAogCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCkBAIC05Miw2ICs5NSw5IEBACiBleHRlcm4gX19sZTY0IGNudnJ0RG9zQ2lmc1RtKF9fdTE2IGRhdGUsIF9fdTE2IHRpbWUpOwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBjbnZydERvc1VuaXhUbShfX3UxNiBkYXRlLCBfX3UxNiB0aW1lKTsKIAorZXh0ZXJuIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCisJCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKKwkJCSAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOwogZXh0ZXJuIHZvaWQgcG9zaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKIAkJCQlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcERhdGEsIGludCBpc05ld0lub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNpZnNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTY0ICppbnVtKTsKQEAgLTI4MSw2ICsyODcsOSBAQAogZXh0ZXJuIGludCBDSUZTU01CQ2xvc2UoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CiAKK2V4dGVybiBpbnQgQ0lGU1NNQkZsdXNoKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisJCQljb25zdCBpbnQgc21iX2ZpbGVfaWQpOworCiBleHRlcm4gaW50IENJRlNTTUJSZWFkKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQljb25zdCBfX3U2NCBsc2VlaywgdW5zaWduZWQgaW50ICpuYnl0ZXMsIGNoYXIgKipidWYsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDkzOWUyZjcuLmJjMDljOTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xOTM0LDYgKzE5MzQsMjcgQEAKIH0KIAogaW50CitDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgaW50IHNtYl9maWxlX2lkKQoreworCWludCByYyA9IDA7CisJRkxVU0hfUkVRICpwU01CID0gTlVMTDsKKwljRllJKDEsICgiSW4gQ0lGU1NNQkZsdXNoIikpOworCisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX0ZMVVNILCAxLCB0Y29uLCAodm9pZCAqKikgJnBTTUIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcFNNQi0+RmlsZUlEID0gKF9fdTE2KSBzbWJfZmlsZV9pZDsKKwlwU01CLT5CeXRlQ291bnQgPSAwOworCXJjID0gU2VuZFJlY2VpdmVOb1JzcCh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsIDApOworCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fZmx1c2hlcyk7CisJaWYgKHJjKQorCQljRVJST1IoMSwgKCJTZW5kIGVycm9yIGluIEZsdXNoID0gJWQiLCByYykpOworCisJcmV0dXJuIHJjOworfQorCitpbnQKIENJRlNTTUJSZW5hbWUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkgICAgICBjb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAogCSAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQpAQCAtMjM1Niw4ICsyMzc3LDEwIEBACiAJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKLQkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW5dID0gMDsJLyogcGFkICovCi0JCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDA0OworCisJCS8qIHByb3RvY29sIHNwZWNpZmllcyBBU0NJSSBidWZmZXIgZm9ybWF0ICgweDA0KSBmb3IgdW5pY29kZSAqLworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAweDA0OworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDFdID0gMHgwMDsgLyogcGFkICovCiAJCW5hbWVfbGVuMiA9CiAJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikmcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwKIAkJCQkgICAgIHRvTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCBkYTBmNGZmLi4wZGUzYjU2MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTk1LDYgKzk1LDcgQEAKIAlib29sIGxvY2FsX2xlYXNlOjE7IC8qIGNoZWNrIGxlYXNlcyBvbmx5IG9uIGxvY2FsIHN5c3RlbSwgbm90IHJlbW90ZSAqLwogCWJvb2wgbm9ibG9ja3NuZDoxOwogCWJvb2wgbm9hdXRvdHVuZToxOworCWJvb2wgbm9zdHJpY3RzeW5jOjE7IC8qIGRvIG5vdCBmb3JjZSBleHBlbnNpdmUgU01CZmx1c2ggb24gZXZlcnkgc3luYyAqLwogCXVuc2lnbmVkIGludCByc2l6ZTsKIAl1bnNpZ25lZCBpbnQgd3NpemU7CiAJdW5zaWduZWQgaW50IHNvY2tvcHQ7CkBAIC0xMjc0LDYgKzEyNzUsMTAgQEAKIAkJCXZvbC0+aW50ciA9IDA7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImludHIiLCA0KSA9PSAwKSB7CiAJCQl2b2wtPmludHIgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3N0cmljdHN5bmMiLCAxMikgPT0gMCkgeworCQkJdm9sLT5ub3N0cmljdHN5bmMgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzdHJpY3RzeW5jIiwgMTApID09IDApIHsKKwkJCXZvbC0+bm9zdHJpY3RzeW5jID0gMDsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic2VydmVyaW5vIiwgNykgPT0gMCkgewogCQkJdm9sLT5zZXJ2ZXJfaW5vID0gMTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibm9zZXJ2ZXJpbm8iLCA5KSA9PSAwKSB7CkBAIC0yMTYwLDYgKzIxNjUsOCBAQAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX1VOWF9FTVVMOwogCWlmIChwdm9sdW1lX2luZm8tPm5vYnJsKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX05PX0JSTDsKKwlpZiAocHZvbHVtZV9pbmZvLT5ub3N0cmljdHN5bmMpCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9TU1lOQzsKIAlpZiAocHZvbHVtZV9pbmZvLT5tYW5kX2xvY2spCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9QT1NJWEJSTDsKIAlpZiAocHZvbHVtZV9pbmZvLT5jaWZzX2FjbCkKQEAgLTM2NjcsNyArMzY3NCw3IEBACiAJCQkgICAgQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7CiAJCQkJa2ZyZWUodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSk7CiAJCQkJdGNvbi0+bmF0aXZlRmlsZVN5c3RlbSA9Ci0JCQkJICAgIGt6YWxsb2MobGVuZ3RoICsgMiwgR0ZQX0tFUk5FTCk7CisJCQkJICAgIGt6YWxsb2MoMioobGVuZ3RoICsgMSksIEdGUF9LRVJORUwpOwogCQkJCWlmICh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKQogCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoCiAJCQkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggODlmYjcyOC4uZjliNmY2OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi1zdGF0aWMgaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKK2ludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCiAJCSAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKIAkJICAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpCiB7CkBAIC0xODcsNyArMTg3LDkgQEAKIAlpZiAoIXBpbm9kZSkKIAkJZ290byBwb3NpeF9vcGVuX3JldDsgLyogY2FsbGVyIGRvZXMgbm90IG5lZWQgaW5mbyAqLwogCi0JKnBpbm9kZSA9IGNpZnNfbmV3X2lub2RlKHNiLCAmcHJlc3BfZGF0YS0+VW5pcXVlSWQpOworCWlmICgqcGlub2RlID09IE5VTEwpCisJCSpwaW5vZGUgPSBjaWZzX25ld19pbm9kZShzYiwgJnByZXNwX2RhdGEtPlVuaXF1ZUlkKTsKKwkvKiBlbHNlIGFuIGlub2RlIHdhcyBwYXNzZWQgaW4uIFVwZGF0ZSBpdHMgaW5mbywgZG9uJ3QgY3JlYXRlIG9uZSAqLwogCiAJLyogV2UgZG8gbm90IG5lZWQgdG8gY2xvc2UgdGhlIGZpbGUgaWYgbmV3X2lub2RlIGZhaWxzIHNpbmNlCiAJICAgdGhlIGNhbGxlciB3aWxsIHJldHJ5IHFwYXRoaW5mbyBhcyBsb25nIGFzIGlub2RlIGlzIG51bGwgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggMTJiYjY1Ni4uODE3NDdhYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTc4LDggKzc4LDM2IEBACiAJcmV0dXJuIChSRUFEX0NPTlRST0wgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMgfCBGSUxFX1JFQURfQVRUUklCVVRFUyB8CiAJCUZJTEVfV1JJVEVfRUEgfCBGSUxFX0FQUEVORF9EQVRBIHwgRklMRV9XUklURV9EQVRBIHwKIAkJRklMRV9SRUFEX0RBVEEpOworfQogCitzdGF0aWMgaW5saW5lIGZtb2RlX3QgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlmbW9kZV90IHBvc2l4X2ZsYWdzID0gMDsKIAorCWlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKQorCQlwb3NpeF9mbGFncyA9IEZNT0RFX1JFQUQ7CisJZWxzZSBpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkKKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9XUklURTsKKwllbHNlIGlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRXUikgeworCQkvKiBHRU5FUklDX0FMTCBpcyB0b28gbXVjaCBwZXJtaXNzaW9uIHRvIHJlcXVlc3QKKwkJICAgY2FuIGNhdXNlIHVubmVjZXNzYXJ5IGFjY2VzcyBkZW5pZWQgb24gY3JlYXRlICovCisJCS8qIHJldHVybiBHRU5FUklDX0FMTDsgKi8KKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEU7CisJfQorCS8qIGNhbiBub3QgbWFwIE9fQ1JFQVQgb3IgT19FWENMIG9yIE9fVFJVTkMgZmxhZ3Mgd2hlbgorCSAgIHJlb3BlbmluZyBhIGZpbGUuICBUaGV5IGhhZCB0aGVpciBlZmZlY3Qgb24gdGhlIG9yaWdpbmFsIG9wZW4gKi8KKwlpZiAoZmxhZ3MgJiBPX0FQUEVORCkKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19BUFBFTkQ7CisJaWYgKGZsYWdzICYgT19TWU5DKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX1NZTkM7CisJaWYgKGZsYWdzICYgT19ESVJFQ1RPUlkpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fRElSRUNUT1JZOworCWlmIChmbGFncyAmIE9fTk9GT0xMT1cpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fTk9GT0xMT1c7CisJaWYgKGZsYWdzICYgT19ESVJFQ1QpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fRElSRUNUOworCisJcmV0dXJuIHBvc2l4X2ZsYWdzOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaWZzX2dldF9kaXNwb3NpdGlvbih1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC05Nyw2ICsxMjUsODAgQEAKIH0KIAogLyogYWxsIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgaW4gY2FsbGVyICovCitzdGF0aWMgaW5saW5lIGludCBjaWZzX3Bvc2l4X29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGUsCisJCQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUsIGludCBvcGxvY2ssIHUxNiBuZXRmaWQpCit7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOworLyoJc3RydWN0IHRpbWVzcGVjIHRlbXA7ICovICAgLyogQkIgUkVNT1ZFTUUgQkIgKi8KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXBDaWZzRmlsZSA9IGNpZnNfaW5pdF9wcml2YXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgaW5vZGUsIGZpbGUsIG5ldGZpZCk7CisJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZjaWZzX3NiLT50Y29uLT5vcGVuRmlsZUxpc3QpOworCisJcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAocENpZnNJbm9kZSA9PSBOVUxMKSB7CisJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHdhbnQgaGFuZGxlcyB3ZSBjYW4gdXNlIHRvIHJlYWQgd2l0aCBmaXJzdAorCSAgIGluIHRoZSBsaXN0IHNvIHdlIGRvIG5vdCBoYXZlIHRvIHdhbGsgdGhlCisJICAgbGlzdCB0byBzZWFyY2ggZm9yIG9uZSBpbiB3cml0ZV9iZWdpbiAqLworCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKKwkJCSAgICAgICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LAorCQkJICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOworCX0KKworCWlmIChwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQpIHsKKwkJLyogd2UgaGF2ZSB0aGUgaW5vZGUgb3BlbiBzb21ld2hlcmUgZWxzZQorCQkgICBubyBuZWVkIHRvIGRpc2NhcmQgY2FjaGUgZGF0YSAqLworCQlnb3RvIHBzeF9jbGllbnRfY2FuX2NhY2hlOworCX0KKworCS8qIEJCIEZJWE1FIG5lZWQgdG8gZml4IHRoaXMgY2hlY2sgdG8gbW92ZSBpdCBlYXJsaWVyIGludG8gcG9zaXhfb3BlbgorCSAgIEJCICBmSVggZm9sbG93aW5nIHNlY3Rpb24gQkIgRklYTUUgKi8KKworCS8qIGlmIG5vdCBvcGxvY2tlZCwgaW52YWxpZGF0ZSBpbm9kZSBwYWdlcyBpZiBtdGltZSBvciBmaWxlCisJICAgc2l6ZSBjaGFuZ2VkICovCisvKgl0ZW1wID0gY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUoYnVmLT5MYXN0V3JpdGVUaW1lKSk7CisJaWYgKHRpbWVzcGVjX2VxdWFsKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX210aW1lLCAmdGVtcCkgJiYKKwkJCSAgIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemUgPT0KKwkJCSAgICAobG9mZl90KWxlNjRfdG9fY3B1KGJ1Zi0+RW5kT2ZGaWxlKSkpIHsKKwkJY0ZZSSgxLCAoImlub2RlIHVuY2hhbmdlZCBvbiBzZXJ2ZXIiKSk7CisJfSBlbHNlIHsKKwkJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZykgeworCQkJcmMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyk7CisJCQlpZiAocmMgIT0gMCkKKwkJCQlDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPndyaXRlX2JlaGluZF9yYyA9IHJjOworCQl9CisJCWNGWUkoMSwgKCJpbnZhbGlkYXRpbmcgcmVtb3RlIGlub2RlIHNpbmNlIG9wZW4gZGV0ZWN0ZWQgaXQgIgorCQkJICJjaGFuZ2VkIikpOworCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwl9ICovCisKK3BzeF9jbGllbnRfY2FuX2NhY2hlOgorCWlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfRVhDTFVTSVZFKSB7CisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gdHJ1ZTsKKwkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gdHJ1ZTsKKwkJY0ZZSSgxLCAoIkV4Y2x1c2l2ZSBPcGxvY2sgZ3JhbnRlZCBvbiBpbm9kZSAlcCIsCisJCQkgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOworCX0gZWxzZSBpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX1JFQUQpCisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IHRydWU7CisKKwkvKiB3aWxsIGhhdmUgdG8gY2hhbmdlIHRoZSB1bmxvY2sgaWYgd2UgcmVlbmFibGUgdGhlCisJICAgZmlsZW1hcF9mZGF0YXdyaXRlICh3aGljaCBkb2VzIG5vdCBzZWVtIG5lY2Vzc2FyeSAqLworCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGFsbCBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGluIGNhbGxlciAqLwogc3RhdGljIGlubGluZSBpbnQgY2lmc19vcGVuX2lub2RlX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwgc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uLCBpbnQgKm9wbG9jaywgRklMRV9BTExfSU5GTyAqYnVmLApAQCAtMTY3LDcgKzI2OSw3IEBACiAJaW50IHJjID0gLUVBQ0NFUzsKIAlpbnQgeGlkLCBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CkBAIC0xODAsNyArMjgyLDcgQEAKIAl4aWQgPSBHZXRYaWQoKTsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKLQlwVGNvbiA9IGNpZnNfc2ItPnRjb247CisJdGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fQ1JFQVQpIHsKIAkJLyogc2VhcmNoIGlub2RlIGZvciB0aGlzIGZpbGUgYW5kIGZpbGwgaW4gZmlsZS0+cHJpdmF0ZV9kYXRhICovCkBAIC0yMjAsNiArMzIyLDQ1IEBACiAKIAljRllJKDEsICgiaW5vZGUgPSAweCVwIGZpbGUgZmxhZ3MgYXJlIDB4JXggZm9yICVzIiwKIAkJIGlub2RlLCBmaWxlLT5mX2ZsYWdzLCBmdWxsX3BhdGgpKTsKKworCWlmIChvcGxvY2tFbmFibGVkKQorCQlvcGxvY2sgPSBSRVFfT1BMT0NLOworCWVsc2UKKwkJb3Bsb2NrID0gMDsKKworCWlmICghdGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gJiYgdGNvbi0+dW5peF9leHQgJiYKKwkgICAgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJICAgIChDSUZTX1VOSVhfUE9TSVhfUEFUSF9PUFNfQ0FQICYKKwkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CisJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmaW5vZGUsIGlub2RlLT5pX3NiLAorCQkJCSAgICAgY2lmc19zYi0+bW50X2ZpbGVfbW9kZSAvKiBpZ25vcmVkICovLAorCQkJCSAgICAgb2ZsYWdzLCAmb3Bsb2NrLCAmbmV0ZmlkLCB4aWQpOworCQlpZiAocmMgPT0gMCkgeworCQkJY0ZZSSgxLCAoInBvc2l4IG9wZW4gc3VjY2VlZGVkIikpOworCQkJLyogbm8gbmVlZCBmb3Igc3BlY2lhbCBjYXNlIGhhbmRsaW5nIG9mIHNldHRpbmcgbW9kZQorCQkJICAgb24gcmVhZCBvbmx5IGZpbGVzIG5lZWRlZCBoZXJlICovCisKKwkJCWNpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCisJCQkJCQkgICAgIHBDaWZzRmlsZSwgb3Bsb2NrLCBuZXRmaWQpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoKHJjID09IC1FSU5WQUwpIHx8IChyYyA9PSAtRU9QTk9UU1VQUCkpIHsKKwkJCWlmICh0Y29uLT5zZXMtPnNlcnZlck5PUykKKwkJCQljRVJST1IoMSwgKCJzZXJ2ZXIgJXMgb2YgdHlwZSAlcyByZXR1cm5lZCIKKwkJCQkJICAgIiB1bmV4cGVjdGVkIGVycm9yIG9uIFNNQiBwb3NpeCBvcGVuIgorCQkJCQkgICAiLCBkaXNhYmxpbmcgcG9zaXggb3BlbiBzdXBwb3J0LiIKKwkJCQkJICAgIiBDaGVjayBpZiBzZXJ2ZXIgdXBkYXRlIGF2YWlsYWJsZS4iLAorCQkJCQkgICB0Y29uLT5zZXMtPnNlcnZlck5hbWUsCisJCQkJCSAgIHRjb24tPnNlcy0+c2VydmVyTk9TKSk7CisJCQl0Y29uLT5icm9rZW5fcG9zaXhfb3BlbiA9IHRydWU7CisJCX0gZWxzZSBpZiAoKHJjICE9IC1FSU8pICYmIChyYyAhPSAtRVJFTU9URSkgJiYKKwkJCSAocmMgIT0gLUVPUE5PVFNVUFApKSAvKiBwYXRoIG5vdCBmb3VuZCBvciBuZXQgZXJyICovCisJCQlnb3RvIG91dDsKKwkJLyogZWxzZSBmYWxsdGhyb3VnaCB0byByZXRyeSBvcGVuIHRoZSBvbGQgd2F5IG9uIG5ldHdvcmsgaS9vCisJCSAgIG9yIERGUyBlcnJvcnMgKi8KKwl9CisKIAlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDgsMTEgKzM4OSw2IEBACiAKIAlkaXNwb3NpdGlvbiA9IGNpZnNfZ2V0X2Rpc3Bvc2l0aW9uKGZpbGUtPmZfZmxhZ3MpOwogCi0JaWYgKG9wbG9ja0VuYWJsZWQpCi0JCW9wbG9jayA9IFJFUV9PUExPQ0s7Ci0JZWxzZQotCQlvcGxvY2sgPSAwOwotCiAJLyogQkIgcGFzcyBPX1NZTkMgZmxhZyB0aHJvdWdoIG9uIGZpbGUgYXR0cmlidXRlcyAuLiBCQiAqLwogCiAJLyogQWxzbyByZWZyZXNoIGlub2RlIGJ5IHBhc3NpbmcgaW4gZmlsZV9pbmZvIGJ1ZiByZXR1cm5lZCBieSBTTUJPcGVuCkBAIC0yNjksNyArNDA1LDcgQEAKIAl9CiAKIAlpZiAoY2lmc19zYi0+dGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfTlRfU01CUykKLQkJcmMgPSBDSUZTU01CT3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAorCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKIAkJCSBkZXNpcmVkQWNjZXNzLCBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgYnVmLAogCQkJIGNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MKIAkJCQkgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0yNzgsNyArNDE0LDcgQEAKIAogCWlmIChyYyA9PSAtRUlPKSB7CiAJCS8qIE9sZCBzZXJ2ZXIsIHRyeSBsZWdhY3kgc3R5bGUgT3BlblggKi8KLQkJcmMgPSBTTUJMZWdhY3lPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCisJCXJjID0gU01CTGVnYWN5T3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCiAJCQlkZXNpcmVkQWNjZXNzLCBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgYnVmLAogCQkJY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncwogCQkJCSYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMjk1LDEyICs0MzEsMTIgQEAKIAl9CiAJcENpZnNGaWxlID0gY2lmc19pbml0X3ByaXZhdGUoZmlsZS0+cHJpdmF0ZV9kYXRhLCBpbm9kZSwgZmlsZSwgbmV0ZmlkKTsKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnBUY29uLT5vcGVuRmlsZUxpc3QpOworCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmdGNvbi0+b3BlbkZpbGVMaXN0KTsKIAogCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKHBDaWZzSW5vZGUpIHsKIAkJcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLAotCQkJCQkgICAgcENpZnNGaWxlLCBwVGNvbiwKKwkJCQkJICAgIHBDaWZzRmlsZSwgdGNvbiwKIAkJCQkJICAgICZvcGxvY2ssIGJ1ZiwgZnVsbF9wYXRoLCB4aWQpOwogCX0gZWxzZSB7CiAJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CkBAIC0zMDksNyArNDQ1LDcgQEAKIAlpZiAob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSB7CiAJCS8qIHRpbWUgdG8gc2V0IG1vZGUgd2hpY2ggd2UgY2FuIG5vdCBzZXQgZWFybGllciBkdWUgdG8KIAkJICAgcHJvYmxlbXMgY3JlYXRpbmcgbmV3IHJlYWQtb25seSBmaWxlcyAqLwotCQlpZiAocFRjb24tPnVuaXhfZXh0KSB7CisJCWlmICh0Y29uLT51bml4X2V4dCkgewogCQkJc3RydWN0IGNpZnNfdW5peF9zZXRfaW5mb19hcmdzIGFyZ3MgPSB7CiAJCQkJLm1vZGUJPSBpbm9kZS0+aV9tb2RlLAogCQkJCS51aWQJPSBOT19DSEFOR0VfNjQsCkBAIC0zMTksNyArNDU1LDcgQEAKIAkJCQkubXRpbWUJPSBOT19DSEFOR0VfNjQsCiAJCQkJLmRldmljZQk9IDAsCiAJCQl9OwotCQkJQ0lGU1NNQlVuaXhTZXRJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgJmFyZ3MsCisJCQlDSUZTU01CVW5peFNldEluZm8oeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZhcmdzLAogCQkJCQkgICAgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJCQkgICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMzQ5LDcgKzQ4NSw3IEBACiAJaW50IHJjID0gLUVBQ0NFUzsKIAlpbnQgeGlkLCBvcGxvY2s7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtMzg3LDcgKzUyMyw3IEBACiAJfQogCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwotCXBUY29uID0gY2lmc19zYi0+dGNvbjsKKwl0Y29uID0gY2lmc19zYi0+dGNvbjsKIAogLyogY2FuIG5vdCBncmFiIHJlbmFtZSBzZW0gaGVyZSBiZWNhdXNlIHZhcmlvdXMgb3BzLCBpbmNsdWRpbmcKICAgIHRob3NlIHRoYXQgYWxyZWFkeSBoYXZlIHRoZSByZW5hbWUgc2VtIGNhbiBlbmQgdXAgY2F1c2luZyB3cml0ZXBhZ2UKQEAgLTQwNCwyMCArNTQwLDM3IEBACiAKIAljRllJKDEsICgiaW5vZGUgPSAweCVwIGZpbGUgZmxhZ3MgMHgleCBmb3IgJXMiLAogCQkgaW5vZGUsIGZpbGUtPmZfZmxhZ3MsIGZ1bGxfcGF0aCkpOwotCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CiAKIAlpZiAob3Bsb2NrRW5hYmxlZCkKIAkJb3Bsb2NrID0gUkVRX09QTE9DSzsKIAllbHNlCiAJCW9wbG9jayA9IDA7CiAKKwlpZiAodGNvbi0+dW5peF9leHQgJiYgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJICAgIChDSUZTX1VOSVhfUE9TSVhfUEFUSF9PUFNfQ0FQICYKKwkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CisJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KKwkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCBOVUxMLCBpbm9kZS0+aV9zYiwKKwkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKKwkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWNGWUkoMSwgKCJwb3NpeCByZW9wZW4gc3VjY2VlZGVkIikpOworCQkJZ290byByZW9wZW5fc3VjY2VzczsKKwkJfQorCQkvKiBmYWxsdGhyb3VnaCB0byByZXRyeSBvcGVuIHRoZSBvbGQgd2F5IG9uIGVycm9ycywgZXNwZWNpYWxseQorCQkgICBpbiB0aGUgcmVjb25uZWN0IHBhdGggaXQgaXMgaW1wb3J0YW50IHRvIHJldHJ5IGhhcmQgKi8KKwl9CisKKwlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOworCiAJLyogQ2FuIG5vdCByZWZyZXNoIGlub2RlIGJ5IHBhc3NpbmcgaW4gZmlsZV9pbmZvIGJ1ZiB0byBiZSByZXR1cm5lZAogCSAgIGJ5IFNNQk9wZW4gYW5kIHRoZW4gY2FsbGluZyBnZXRfaW5vZGVfaW5mbyB3aXRoIHJldHVybmVkIGJ1ZgogCSAgIHNpbmNlIGZpbGUgbWlnaHQgaGF2ZSB3cml0ZSBiZWhpbmQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGZsdXNoZWQKIAkgICBhbmQgc2VydmVyIHZlcnNpb24gb2YgZmlsZSBzaXplIGNhbiBiZSBzdGFsZS4gSWYgd2Uga25ldyBmb3Igc3VyZQogCSAgIHRoYXQgaW5vZGUgd2FzIG5vdCBkaXJ0eSBsb2NhbGx5IHdlIGNvdWxkIGRvIHRoaXMgKi8KIAotCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwgZGVzaXJlZEFjY2VzcywKKwlyYyA9IENJRlNTTUJPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwgZGVzaXJlZEFjY2VzcywKIAkJCSBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgTlVMTCwKIAkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC00MjYsNiArNTc5LDcgQEAKIAkJY0ZZSSgxLCAoImNpZnNfb3BlbiByZXR1cm5lZCAweCV4IiwgcmMpKTsKIAkJY0ZZSSgxLCAoIm9wbG9jazogJWQiLCBvcGxvY2spKTsKIAl9IGVsc2UgeworcmVvcGVuX3N1Y2Nlc3M6CiAJCXBDaWZzRmlsZS0+bmV0ZmlkID0gbmV0ZmlkOwogCQlwQ2lmc0ZpbGUtPmludmFsaWRIYW5kbGUgPSBmYWxzZTsKIAkJdXAoJnBDaWZzRmlsZS0+Zmhfc2VtKTsKQEAgLTQzOSw3ICs1OTMsNyBAQAogCQkJICAgZ28gdG8gc2VydmVyIHRvIGdldCBpbm9kZSBpbmZvICovCiAJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSBmYWxzZTsKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBmYWxzZTsKLQkJCQlpZiAocFRjb24tPnVuaXhfZXh0KQorCQkJCWlmICh0Y29uLT51bml4X2V4dCkKIAkJCQkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJmlub2RlLAogCQkJCQkJZnVsbF9wYXRoLCBpbm9kZS0+aV9zYiwgeGlkKTsKIAkJCQllbHNlCkBAIC00NjcsNyArNjIxLDYgQEAKIAkJCWNpZnNfcmVsb2NrX2ZpbGUocENpZnNGaWxlKTsKIAkJfQogCX0KLQogCWtmcmVlKGZ1bGxfcGF0aCk7CiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKQEAgLTE1MjMsNiArMTY3Niw5IEBACiB7CiAJaW50IHhpZDsKIAlpbnQgcmMgPSAwOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqc21iZmlsZSA9CisJCShzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJeGlkID0gR2V0WGlkKCk7CkBAIC0xNTM0LDcgKzE2OTAsMTIgQEAKIAlpZiAocmMgPT0gMCkgewogCQlyYyA9IENJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYzsKIAkJQ0lGU19JKGlub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gMDsKKwkJdGNvbiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpLT50Y29uOworCQlpZiAoIXJjICYmIHRjb24gJiYgc21iZmlsZSAmJgorCQkgICAhKENJRlNfU0IoaW5vZGUtPmlfc2IpLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9TU1lOQykpCisJCQlyYyA9IENJRlNTTUJGbHVzaCh4aWQsIHRjb24sIHNtYmZpbGUtPm5ldGZpZCk7CiAJfQorCiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA0NjkwYTM2Li5hODc5N2NjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC03NjMsNiArNzYzLDkgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAJRklMRV9CQVNJQ19JTkZPCWluZm9fYnVmOwogCisJaWYgKGF0dHJzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfQVRJTUUpIHsKIAkJc2V0X3RpbWUgPSB0cnVlOwogCQlpbmZvX2J1Zi5MYXN0QWNjZXNzVGltZSA9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmZzY3RsLmggYi9mcy9jaWZzL3NtYmZzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NmI4OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NpZnMvc21iZnNjdGwuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogICBmcy9jaWZzL3NtYmZzY3RsLmg6IFNNQiwgQ0lGUywgU01CMiBGU0NUTCBkZWZpbml0aW9ucworICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA5CisgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiBJT0NUTCBpbmZvcm1hdGlvbiAqLworLyoKKyAqIExpc3Qgb2YgaW9jdGwvZnNjdGwgZnVuY3Rpb24gY29kZXMgdGhhdCBhcmUgb3IgY291bGQgYmUgdXNlZnVsIGluIHRoZQorICogZnV0dXJlIHRvIHJlbW90ZSBjbGllbnRzIGxpa2UgY2lmcyBvciBTTUIyIGNsaWVudC4gIFRoZXJlIGlzIHByb2JhYmx5CisgKiBhIHNsaWdodGx5IGxhcmdlciBzZXQgb2YgZnNjdGxzIHRoYXQgTlRGUyBsb2NhbCBmaWxlc3lzdGVtIGNvdWxkIGhhbmRsZSwKKyAqIGluY2x1ZGluZyB0aGUgc2V2ZW4gYmVsb3cgdGhhdCB3ZSBkbyBub3QgaGF2ZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgZm9yLgorICogRXZlbiB3aXRoIHByb3RvY29sIGRlZmluaXRpb25zIGZvciBtb3N0IG9mIHRoZXNlIG5vdyBhdmFpbGFibGUsIHdlIHN0aWxsCisgKiBuZWVkIHRvIGRvIHNvbWUgZXhwZXJpbWVudGF0aW9uIHRvIGlkZW50aWZ5IHdoaWNoIGFyZSBwcmFjdGljYWwgdG8gZG8KKyAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKKyAqIGNvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKKyAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCisgKi8KKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAorI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKKyNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4CisjZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQworI2RlZmluZSBGU0NUTF9JU19QQVRITkFNRV9WQUxJRCAgICAgIDB4MDAwOTAwMkMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOUMwNDAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9RVUVSWV9GQVRfQlBCICAgICAgICAgIDB4MDAwOTAwNTggLyogQkIgYWRkIHN0cnVjdCAqLworLyogVmVyaWZ5IHRoZSBuZXh0IEZTQ1RMIG51bWJlciwgd2UgaGFkIGl0IGFzIDB4MDAwOTAwOTAgYmVmb3JlICovCisjZGVmaW5lIEZTQ1RMX0ZJTEVTWVNURU1fR0VUX1NUQVRTICAgMHgwMDA5MDA2MCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9OVEZTX1ZPTFVNRV9EQVRBICAgMHgwMDA5MDA2NCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9SRVRSSUVWQUxfUE9JTlRFUlMgMHgwMDA5MDA3MyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0lTX1ZPTFVNRV9ESVJUWSAgICAgICAgMHgwMDA5MDA3OCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0FMTE9XX0VYVEVOREVEX0RBU0RfSU8gMHgwMDA5MDA4MyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QworI2RlZmluZSBGU0NUTF9GSU5EX0ZJTEVTX0JZX1NJRCAgICAgIDB4MDAwOTAwOEYgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfT0JKRUNUX0lEICAgICAgICAgIDB4MDAwOTAwOTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfT0JKRUNUX0lEICAgICAgICAgIDB4MDAwOTAwOUMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9ERUxFVEVfT0JKRUNUX0lEICAgICAgIDB4MDAwOTAwQTAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfT0JKRUNUX0lEX0VYVEVOREVEIDB4MDAwOTAwQkMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9DUkVBVEVfT1JfR0VUX09CSkVDVF9JRCAweDAwMDkwMEMwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1pFUk9fREFUQSAgICAgICAgICAweDAwMDkwMEM4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX0VOQ1JZUFRJT04gICAgICAgICAweDAwMDkwMEQ3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfV1JJVEVfUkFXX0VOQ1JZUFRFRCAgICAweDAwMDkwMERGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVBRF9SQVdfRU5DUllQVEVEICAgICAweDAwMDkwMEUzIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVBRF9GSUxFX1VTTl9EQVRBICAgICAweDAwMDkwMEVCIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfV1JJVEVfVVNOX0NMT1NFX1JFQ09SRCAweDAwMDkwMEVGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVDQUxMX0ZJTEUgICAgICAgICAgICAweDAwMDkwMTE3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUVVFUllfU1BBUklOR19JTkZPICAgICAweDAwMDkwMTM4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1pFUk9fT05fREVBTExPQyAgICAweDAwMDkwMTk0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1NIT1JUX05BTUVfQkVIQVZJT1IgMHgwMDA5MDFCNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX0FMTE9DQVRFRF9SQU5HRVMgMHgwMDA5NDBDRiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9ERUZFQ1RfTUFOQUdFTUVOVCAgMHgwMDA5ODEzNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAorI2RlZmluZSBGU0NUTF9QSVBFX1BFRUsgICAgICAgICAgICAgIDB4MDAxMTQwMEMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9QSVBFX1RSQU5TQ0VJVkUgICAgICAgIDB4MDAxMUMwMTcgLyogQkIgYWRkIHN0cnVjdCAqLworLyogc3RyYW5nZSB0aGF0IHRoZSBudW1iZXIgZm9yIHRoaXMgb3AgaXMgbm90IHNlcXVlbnRpYWwgd2l0aCBwcmV2aW91cyBvcCAqLworI2RlZmluZSBGU0NUTF9QSVBFX1dBSVQgICAgICAgICAgICAgIDB4MDAxMTAwMTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9MTVJfR0VUX0xJTktfVFJBQ0tfSU5GIDB4MDAxNDAwRTggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9MTVJfU0VUX0xJTktfVFJBQ0tfSU5GIDB4MDAxNDAwRUMgLyogQkIgYWRkIHN0cnVjdCAqLworCisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMworI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKKyNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGQwMTQ1Y2EuLjA5NDliNDMgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC0xNDAyLDYgKzE0MDIsNyBAQAogCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKKwljdXJyZW50LT5pbl9leGVjdmUgPSAxOwogCiAJcmV0dmFsID0gLUVOT01FTTsKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CkBAIC0xNDU0LDYgKzE0NTUsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CiAJZnJlZV9icHJtKGJwcm0pOwpAQCAtMTQ3MCw2ICsxNDcyLDcgQEAKIAl9CiAKIG91dF91bmxvY2s6CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCA0NWU1OWQzLi5mZjc4NjY4IDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtNTIyLDYgKzUyMiwxMSBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOworCWNhc2UgU0lPQ1NIV1RTVEFNUDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsIHVpZnIzMiwgc2l6ZW9mKCp1aWZyMzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZnIuaWZyX2RhdGEgPSBjb21wYXRfcHRyKHVpZnIzMi0+aWZyX2lmcnUuaWZydV9kYXRhKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsIHVpZnIzMiwgc2l6ZW9mKCp1aWZyMzIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTk5Myw2ICsxOTk4LDggQEAKIENPTVBBVElCTEVfSU9DVEwoVFVOR0VURkVBVFVSRVMpCiBDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVE9GRkxPQUQpCiBDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVFRYRklMVEVSKQorQ09NUEFUSUJMRV9JT0NUTChUVU5HRVRTTkRCVUYpCitDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVFNOREJVRikKIC8qIEJpZyBWICovCiBDT01QQVRJQkxFX0lPQ1RMKFZUX1NFVE1PREUpCiBDT01QQVRJQkxFX0lPQ1RMKFZUX0dFVE1PREUpCkBAIC0yNTY2LDYgKzI1NzMsNyBAQAogSEFORExFX0lPQ1RMKFNJT0NHSUZBRERSLCBkZXZfaWZzaW9jKQogSEFORExFX0lPQ1RMKFNJT0NTSUZBRERSLCBkZXZfaWZzaW9jKQogSEFORExFX0lPQ1RMKFNJT0NTSUZIV0JST0FEQ0FTVCwgZGV2X2lmc2lvYykKK0hBTkRMRV9JT0NUTChTSU9DU0hXVFNUQU1QLCBkZXZfaWZzaW9jKQogCiAvKiBpb2N0bHMgdXNlZCBieSBhcHBsZXRhbGsgZGRwLmMgKi8KIEhBTkRMRV9JT0NUTChTSU9DQVRBTEtESUZBRERSLCBkZXZfaWZzaW9jKQpkaWZmIC0tZ2l0IGEvZnMvZHF1b3QuYyBiL2ZzL2RxdW90LmMKaW5kZXggYmNhM2NhYy4uZDZhZGQwYiAxMDA2NDQKLS0tIGEvZnMvZHF1b3QuYworKysgYi9mcy9kcXVvdC5jCkBAIC0xMDU3LDEwICsxMDU3LDcgQEAKIAkJZ290byBhdHRyX2Vycl9vdXQ7CiAJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7CiAKLQlyZXQgPSBnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHF1b3RhX2dlbmxfZmFtaWx5LmlkLCBHRlBfTk9GUyk7Ci0JaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FU1JDSCkKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiVkZTOiBGYWlsZWQgdG8gc2VuZCBub3RpZmljYXRpb24gbWVzc2FnZTogJWRcbiIsIHJldCk7CisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBxdW90YV9nZW5sX2ZhbWlseS5pZCwgR0ZQX05PRlMpOwogCXJldHVybjsKIGF0dHJfZXJyX291dDoKIAlwcmludGsoS0VSTl9FUlIgIlZGUzogTm90IGVub3VnaCBzcGFjZSB0byBjb21wb3NlIHF1b3RhIG1lc3NhZ2UhXG4iKTsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggMDExYjliOC4uYzVjNDI0ZiAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTQxNywxMCArNDE3LDEwIEBACiAJZXBfdW5yZWdpc3Rlcl9wb2xsd2FpdChlcCwgZXBpKTsKIAogCS8qIFJlbW92ZSB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlIGxpc3Qgb2YgZXBvbGwgaG9va3MgKi8KLQlzcGluX2xvY2soJmZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWlmIChlcF9pc19saW5rZWQoJmVwaS0+ZmxsaW5rKSkKIAkJbGlzdF9kZWxfaW5pdCgmZXBpLT5mbGxpbmspOwotCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2VwX2xvY2spOworCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCiAJcmJfZXJhc2UoJmVwaS0+cmJuLCAmZXAtPnJicik7CiAKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXN0cnVjdCBlcGl0ZW0gKmVwaTsKIAogCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byBnZXQgImZpbGUtPmZfZXBfbG9jayIgYmVjYXVzZSBpdCBpcyBub3QKKwkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAogCSAqIG5lY2Vzc2FyeS4gSXQgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlJ3JlIGluIHRoZSAic3RydWN0IGZpbGUiCiAJICogY2xlYW51cCBwYXRoLCBhbmQgdGhpcyBtZWFucyB0aGF0IG5vb25lIGlzIHVzaW5nIHRoaXMgZmlsZSBhbnltb3JlLgogCSAqIFNvLCBmb3IgZXhhbXBsZSwgZXBvbGxfY3RsKCkgY2Fubm90IGhpdCBoZXJlIHNpY25lIGlmIHdlIHJlYWNoIHRoaXMKQEAgLTU0Nyw2ICs1NDcsOCBAQAogCSAqIHdpbGwgY29ycmVjdGx5IHNlcmlhbGl6ZSB0aGUgb3BlcmF0aW9uLiBXZSBkbyBuZWVkIHRvIGFjcXVpcmUKIAkgKiAiZXAtPm10eCIgYWZ0ZXIgImVwbXV0ZXgiIGJlY2F1c2UgZXBfcmVtb3ZlKCkgcmVxdWlyZXMgaXQgd2hlbiBjYWxsZWQKIAkgKiBmcm9tIGFueXdoZXJlIGJ1dCBlcF9mcmVlKCkuCisJICoKKwkgKiBCZXNpZGVzLCBlcF9yZW1vdmUoKSBhY3F1aXJlcyB0aGUgbG9jaywgc28gd2UgY2FuJ3QgaG9sZCBpdCBoZXJlLgogCSAqLwogCW11dGV4X2xvY2soJmVwbXV0ZXgpOwogCkBAIC03ODUsOSArNzg3LDkgQEAKIAkJZ290byBlcnJvcl91bnJlZ2lzdGVyOwogCiAJLyogQWRkIHRoZSBjdXJyZW50IGl0ZW0gdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGVwb2xsIGhvb2sgZm9yIHRoaXMgZmlsZSAqLwotCXNwaW5fbG9jaygmdGZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl9sb2NrKCZ0ZmlsZS0+Zl9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZlcGktPmZsbGluaywgJnRmaWxlLT5mX2VwX2xpbmtzKTsKLQlzcGluX3VubG9jaygmdGZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl91bmxvY2soJnRmaWxlLT5mX2xvY2spOwogCiAJLyoKIAkgKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgUkIgdHJlZS4gQWxsIFJCIHRyZWUgb3BlcmF0aW9ucyBhcmUKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA5MjliNTgwLi5iOWYxYzE0IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3RzYWNjdF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgpAQCAtMTI3LDYgKzEyOCw5IEBACiAJCQkJIE1BWV9SRUFEIHwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGV4aXQ7CisJZXJyb3IgPSBpbWFfcGF0aF9jaGVjaygmbmQucGF0aCwgTUFZX1JFQUQgfCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXhpdDsKIAogCWZpbGUgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIE9fUkRPTkxZfE9fTEFSR0VGSUxFKTsKIAllcnJvciA9IFBUUl9FUlIoZmlsZSk7CkBAIC02NzQsNiArNjc4LDkgQEAKIAllcnIgPSBpbm9kZV9wZXJtaXNzaW9uKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wYXRoX3B1dDsKKwllcnIgPSBpbWFfcGF0aF9jaGVjaygmbmQucGF0aCwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CisJaWYgKGVycikKKwkJZ290byBvdXRfcGF0aF9wdXQ7CiAKIAlmaWxlID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBPX1JET05MWXxPX0xBUkdFRklMRSk7CiAJaWYgKElTX0VSUihmaWxlKSkKQEAgLTExODQsNiArMTE5MSw5IEBACiAJcmV0dmFsID0gc2VjdXJpdHlfYnBybV9jaGVjayhicHJtKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGltYV9icHJtX2NoZWNrKGJwcm0pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKIAkvKiBrZXJuZWwgbW9kdWxlIGxvYWRlciBmaXh1cCAqLwogCS8qIHNvIHdlIGRvbid0IHRyeSB0byBsb2FkIHJ1biBtb2Rwcm9iZSBpbiBrZXJuZWwgc3BhY2UuICovCkBAIC0xMjg0LDYgKzEyOTQsNyBAQAogCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKKwljdXJyZW50LT5pbl9leGVjdmUgPSAxOwogCiAJcmV0dmFsID0gLUVOT01FTTsKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CkBAIC0xMzM3LDYgKzEzNDgsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CiAJZnJlZV9icHJtKGJwcm0pOwpAQCAtMTM1NSw2ICsxMzY3LDcgQEAKIAl9CiAKIG91dF91bmxvY2s6CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IDVmYTQ1M2IuLjA1ZTVjMmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTE0MzUsNiArMTQzNSwxMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJ1ZmZlcl91bm1hcHBlZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiAhYnVmZmVyX21hcHBlZChiaCk7Cit9CiAvKgogICogTm90ZSB0aGF0IHdlIGFsd2F5cyBzdGFydCBhIHRyYW5zYWN0aW9uIGV2ZW4gaWYgd2UncmUgbm90IGpvdXJuYWxsaW5nCiAgKiBkYXRhLiAgVGhpcyBpcyB0byBwcmVzZXJ2ZSBvcmRlcmluZzogYW55IGhvbGUgaW5zdGFudGlhdGlvbiB3aXRoaW4KQEAgLTE1MDUsNiArMTUwOSwxNSBAQAogCWlmIChleHQzX2pvdXJuYWxfY3VycmVudF9oYW5kbGUoKSkKIAkJZ290byBvdXRfZmFpbDsKIAorCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgeworCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsCisJCQkJKDEgPDwgQkhfRGlydHkpfCgxIDw8IEJIX1VwdG9kYXRlKSk7CisJfSBlbHNlIGlmICghd2Fsa19wYWdlX2J1ZmZlcnMoTlVMTCwgcGFnZV9idWZmZXJzKHBhZ2UpLCAwLCBQQUdFX0NBQ0hFX1NJWkUsIE5VTEwsIGJ1ZmZlcl91bm1hcHBlZCkpIHsKKwkJLyogUHJvdmlkZSBOVUxMIGluc3RlYWQgb2YgZ2V0X2Jsb2NrIHNvIHRoYXQgd2UgY2F0Y2ggYnVncyBpZiBidWZmZXJzIHdlcmVuJ3QgcmVhbGx5IG1hcHBlZCAqLworCQlyZXR1cm4gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsIE5VTEwsIHdiYyk7CisJfQorCXBhZ2VfYnVmcyA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgZXh0M193cml0ZXBhZ2VfdHJhbnNfYmxvY2tzKGlub2RlKSk7CiAKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKQEAgLTE1MTIsMTEgKzE1MjUsNiBAQAogCQlnb3RvIG91dF9mYWlsOwogCX0KIAotCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgewotCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsCi0JCQkJKDEgPDwgQkhfRGlydHkpfCgxIDw8IEJIX1VwdG9kYXRlKSk7Ci0JfQotCXBhZ2VfYnVmcyA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAl3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmcywgMCwKIAkJCVBBR0VfQ0FDSEVfU0laRSwgTlVMTCwgYmdldF9vbmUpOwogCmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBiZDIxNWNjLi5kODY1Y2E2NiAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZGVmaW5lIFNFVEZMX01BU0sgKE9fQVBQRU5EIHwgT19OT05CTE9DSyB8IE9fTkRFTEFZIHwgRkFTWU5DIHwgT19ESVJFQ1QgfCBPX05PQVRJTUUpCisjZGVmaW5lIFNFVEZMX01BU0sgKE9fQVBQRU5EIHwgT19OT05CTE9DSyB8IE9fTkRFTEFZIHwgT19ESVJFQ1QgfCBPX05PQVRJTUUpCiAKIHN0YXRpYyBpbnQgc2V0ZmwoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMTc3LDIxICsxNzcsMjEgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJLyoKLQkgKiBXZSBzdGlsbCBuZWVkIGEgbG9jayBoZXJlIGZvciBub3cgdG8ga2VlcCBtdWx0aXBsZSBGQVNZTkMgY2FsbHMKLQkgKiBmcm9tIHJhY2luZyB3aXRoIGVhY2ggb3RoZXIuCisJICogLT5mYXN5bmMoKSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgRkFTWU5DIGJpdC4KIAkgKi8KLQlsb2NrX2tlcm5lbCgpOwotCWlmICgoYXJnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpIHsKLQkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+ZmFzeW5jKSB7Ci0JCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgKGFyZyAmIEZBU1lOQykgIT0gMCk7Ci0JCQlpZiAoZXJyb3IgPCAwKQotCQkJCWdvdG8gb3V0OwotCQl9CisJaWYgKCgoYXJnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpICYmIGZpbHAtPmZfb3AgJiYKKwkJCWZpbHAtPmZfb3AtPmZhc3luYykgeworCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgKGFyZyAmIEZBU1lOQykgIT0gMCk7CisJCWlmIChlcnJvciA8IDApCisJCQlnb3RvIG91dDsKKwkJaWYgKGVycm9yID4gMCkKKwkJCWVycm9yID0gMDsKIAl9Ci0KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJZmlscC0+Zl9mbGFncyA9IChhcmcgJiBTRVRGTF9NQVNLKSB8IChmaWxwLT5mX2ZsYWdzICYgflNFVEZMX01BU0spOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOworCiAgb3V0OgotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTUxNiw3ICs1MTYsNyBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmYXN5bmNfY2FjaGUgX19yZWFkX21vc3RseTsKIAogLyoKLSAqIGZhc3luY19oZWxwZXIoKSBpcyB1c2VkIGJ5IHNvbWUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIChtYWlubHkgbWljZSkKKyAqIGZhc3luY19oZWxwZXIoKSBpcyB1c2VkIGJ5IGFsbW9zdCBhbGwgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzCiAgKiB0byBzZXQgdXAgdGhlIGZhc3luYyBxdWV1ZS4gSXQgcmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvciwgMCBpZiBpdCBkaWQKICAqIG5vIGNoYW5nZXMgYW5kIHBvc2l0aXZlIGlmIGl0IGFkZGVkL2RlbGV0ZWQgdGhlIGVudHJ5LgogICovCkBAIC01NTUsNiArNTU1LDEzIEBACiAJCXJlc3VsdCA9IDE7CiAJfQogb3V0OgorCS8qIEZpeCB1cCBGQVNZTkMgYml0IHdoaWxlIHN0aWxsIGhvbGRpbmcgZmFzeW5jX2xvY2sgKi8KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CisJaWYgKG9uKQorCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKKwllbHNlCisJCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAl3cml0ZV91bmxvY2tfaXJxKCZmYXN5bmNfbG9jayk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCBiYmVlYWM2Li5iNzRhOGUxIDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L2V2ZW50cG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTEyNyw2ICsxMjgsNyBAQAogCWF0b21pY19sb25nX3NldCgmZi0+Zl9jb3VudCwgMSk7CiAJcndsb2NrX2luaXQoJmYtPmZfb3duZXIubG9jayk7CiAJZi0+Zl9jcmVkID0gZ2V0X2NyZWQoY3JlZCk7CisJc3Bpbl9sb2NrX2luaXQoJmYtPmZfbG9jayk7CiAJZXZlbnRwb2xsX2luaXRfZmlsZShmKTsKIAkvKiBmLT5mX3ZlcnNpb246IDAgKi8KIAlyZXR1cm4gZjsKQEAgLTI3OSw2ICsyODEsNyBAQAogCWlmIChmaWxlLT5mX29wICYmIGZpbGUtPmZfb3AtPnJlbGVhc2UpCiAJCWZpbGUtPmZfb3AtPnJlbGVhc2UoaW5vZGUsIGZpbGUpOwogCXNlY3VyaXR5X2ZpbGVfZnJlZShmaWxlKTsKKwlpbWFfZmlsZV9mcmVlKGZpbGUpOwogCWlmICh1bmxpa2VseShTX0lTQ0hSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2NkZXYgIT0gTlVMTCkpCiAJCWNkZXZfcHV0KGlub2RlLT5pX2NkZXYpOwogCWZvcHNfcHV0KGZpbGUtPmZfb3ApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9LY29uZmlnIGIvZnMvZ2ZzMi9LY29uZmlnCmluZGV4IGU1NjNhNjQuLjNhOTgxYjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvS2NvbmZpZworKysgYi9mcy9nZnMyL0tjb25maWcKQEAgLTEsNiArMSwxMCBAQAogY29uZmlnIEdGUzJfRlMKIAl0cmlzdGF0ZSAiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICg2NEJJVCB8fCBMQkQpCisJc2VsZWN0IERMTSBpZiBHRlMyX0ZTX0xPQ0tJTkdfRExNCisJc2VsZWN0IENPTkZJR0ZTX0ZTIGlmIEdGUzJfRlNfTE9DS0lOR19ETE0KKwlzZWxlY3QgU1lTRlMgaWYgR0ZTMl9GU19MT0NLSU5HX0RMTQorCXNlbGVjdCBJUF9TQ1RQIGlmIERMTV9TQ1RQCiAJc2VsZWN0IEZTX1BPU0lYX0FDTAogCXNlbGVjdCBDUkMzMgogCWhlbHAKQEAgLTE4LDE3ICsyMiwxNiBAQAogCSAgdGhlIGxvY2tpbmcgbW9kdWxlIGJlbG93LiBEb2N1bWVudGF0aW9uIGFuZCB1dGlsaXRpZXMgZm9yIEdGUzIgY2FuCiAJICBiZSBmb3VuZCBoZXJlOiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2NsdXN0ZXIKIAotCSAgVGhlICJub2xvY2siIGxvY2sgbW9kdWxlIGlzIG5vdyBidWlsdCBpbiB0byBHRlMyIGJ5IGRlZmF1bHQuCisJICBUaGUgIm5vbG9jayIgbG9jayBtb2R1bGUgaXMgbm93IGJ1aWx0IGluIHRvIEdGUzIgYnkgZGVmYXVsdC4gSWYKKwkgIHlvdSB3YW50IHRvIHVzZSB0aGUgRExNLCBiZSBzdXJlIHRvIGVuYWJsZSBIT1RQTFVHIGFuZCBJUHY0LzYKKwkgIG5ldHdvcmtpbmcuCiAKIGNvbmZpZyBHRlMyX0ZTX0xPQ0tJTkdfRExNCi0JdHJpc3RhdGUgIkdGUzIgRExNIGxvY2tpbmcgbW9kdWxlIgotCWRlcGVuZHMgb24gR0ZTMl9GUyAmJiBTWVNGUyAmJiBORVQgJiYgSU5FVCAmJiAoSVBWNiB8fCBJUFY2PW4pCi0Jc2VsZWN0IElQX1NDVFAgaWYgRExNX1NDVFAKLQlzZWxlY3QgQ09ORklHRlNfRlMKLQlzZWxlY3QgRExNCisJYm9vbCAiR0ZTMiBETE0gbG9ja2luZyIKKwlkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSAmJiBORVQgJiYgSU5FVCAmJiAoSVBWNiB8fCBJUFY2PW4pICYmIEhPVFBMVUcKIAloZWxwCiAJICBNdWx0aXBsZSBub2RlIGxvY2tpbmcgbW9kdWxlIGZvciBHRlMyCiAKLQkgIE1vc3QgdXNlcnMgb2YgR0ZTMiB3aWxsIHJlcXVpcmUgdGhpcyBtb2R1bGUuIEl0IHByb3ZpZGVzIHRoZSBsb2NraW5nCisJICBNb3N0IHVzZXJzIG9mIEdGUzIgd2lsbCByZXF1aXJlIHRoaXMuIEl0IHByb3ZpZGVzIHRoZSBsb2NraW5nCiAJICBpbnRlcmZhY2UgYmV0d2VlbiBHRlMyIGFuZCB0aGUgRExNLCB3aGljaCBpcyByZXF1aXJlZCB0byB1c2UgR0ZTMgogCSAgaW4gYSBjbHVzdGVyIGVudmlyb25tZW50LgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9NYWtlZmlsZSBiL2ZzL2dmczIvTWFrZWZpbGUKaW5kZXggYzFiNGVjNmEuLmE4NTFlYTQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvTWFrZWZpbGUKKysrIGIvZnMvZ2ZzMi9NYWtlZmlsZQpAQCAtMSw5ICsxLDkgQEAKIG9iai0kKENPTkZJR19HRlMyX0ZTKSArPSBnZnMyLm8KIGdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8gZWFvcHMubyBlYXR0ci5vIGdsb2NrLm8gXAotCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbG9ja2luZy5vIG1haW4ubyBtZXRhX2lvLm8gXAorCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbWFpbi5vIG1ldGFfaW8ubyBcCiAJbW91bnQubyBvcHNfYWRkcmVzcy5vIG9wc19kZW50cnkubyBvcHNfZXhwb3J0Lm8gb3BzX2ZpbGUubyBcCiAJb3BzX2ZzdHlwZS5vIG9wc19pbm9kZS5vIG9wc19zdXBlci5vIHF1b3RhLm8gXAogCXJlY292ZXJ5Lm8gcmdycC5vIHN1cGVyLm8gc3lzLm8gdHJhbnMubyB1dGlsLm8KIAotb2JqLSQoQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0pICs9IGxvY2tpbmcvZGxtLworZ2ZzMi0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NrX2RsbS5vCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYWNsLmMgYi9mcy9nZnMyL2FjbC5jCmluZGV4IGUzMzVkY2UuLjQzNzY0ZjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYWNsLmMKKysrIGIvZnMvZ2ZzMi9hY2wuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2JtYXAuYyBiL2ZzL2dmczIvYm1hcC5jCmluZGV4IDExZmZjNTYuLjNhNWQzZjggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYm1hcC5jCisrKyBiL2ZzL2dmczIvYm1hcC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Rpci5jIGIvZnMvZ2ZzMi9kaXIuYwppbmRleCBiN2M4ZTVjLi5hZWY0ZDBjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2Rpci5jCisrKyBiL2ZzL2dmczIvZGlyLmMKQEAgLTYwLDcgKzYwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYW9wcy5jIGIvZnMvZ2ZzMi9lYW9wcy5jCmluZGV4IGYxMTRiYTIuLmRlZTliMDMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZWFvcHMuYworKysgYi9mcy9nZnMyL2Vhb3BzLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2VhdHRyLmMgYi9mcy9nZnMyL2VhdHRyLmMKaW5kZXggMGQxYzc2ZC4uODk5NzYzYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9lYXR0ci5jCisrKyBiL2ZzL2dmczIvZWF0dHIuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggNmI5ODNhZS4uMzk4NGU0NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CkBAIC0xOCw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KQEAgLTE1NSwxMyArMTUzLDEwIEBACiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwogCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gZ2wtPmdsX2FzcGFjZTsKIAotCWlmIChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdXRfbG9jaykKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2soZ2wtPmdsX2xvY2spOwotCiAJaWYgKGFzcGFjZSkKIAkJZ2ZzMl9hc3BhY2VfcHV0KGFzcGFjZSk7CiAKLQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKKwlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdXRfbG9jayhnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOwogfQogCiAvKioKQEAgLTE3Miw2ICsxNjcsNyBAQAogCiBzdGF0aWMgdm9pZCBnZnMyX2dsb2NrX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogeworCUdMT0NLX0JVR19PTihnbCwgYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpID09IDApOwogCWF0b21pY19pbmMoJmdsLT5nbF9yZWYpOwogfQogCkBAIC0yMTEsMTcgKzIwNywxNSBAQAogCQkJYXRvbWljX2RlYygmbHJ1X2NvdW50KTsKIAkJfQogCQlzcGluX3VubG9jaygmbHJ1X2xvY2spOwotCQlHTE9DS19CVUdfT04oZ2wsIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCk7Ci0JCUdMT0NLX0JVR19PTihnbCwgIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKTsKIAkJR0xPQ0tfQlVHX09OKGdsLCAhbGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpKTsKIAkJZ2xvY2tfZnJlZShnbCk7CiAJCXJ2ID0gMTsKIAkJZ290byBvdXQ7CiAJfQotCXdyaXRlX3VubG9jayhnbF9sb2NrX2FkZHIoZ2wtPmdsX2hhc2gpKTsKIAkvKiAxIGZvciBiZWluZyBoYXNoZWQsIDEgZm9yIGhhdmluZyBzdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAqLwogCWlmIChhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikgPT0gMikKIAkJZ2ZzMl9nbG9ja19zY2hlZHVsZV9mb3JfcmVjbGFpbShnbCk7CisJd3JpdGVfdW5sb2NrKGdsX2xvY2tfYWRkcihnbC0+Z2xfaGFzaCkpOwogb3V0OgogCXJldHVybiBydjsKIH0KQEAgLTI1NiwyNyArMjUwLDYgQEAKIH0KIAogLyoqCi0gKiBnZnMyX2dsb2NrX2ZpbmQoKSAtIEZpbmQgZ2xvY2sgYnkgbG9jayBudW1iZXIKLSAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKLSAqIEBuYW1lOiBUaGUgbG9jayBuYW1lCi0gKgotICogUmV0dXJuczogTlVMTCwgb3IgdGhlIHN0cnVjdCBnZnMyX2dsb2NrIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIKLSAqLwotCi1zdGF0aWMgc3RydWN0IGdmczJfZ2xvY2sgKmdmczJfZ2xvY2tfZmluZChjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUpCi17Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBnbF9oYXNoKHNkcCwgbmFtZSk7Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKmdsOwotCi0JcmVhZF9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7Ci0JZ2wgPSBzZWFyY2hfYnVja2V0KGhhc2gsIHNkcCwgbmFtZSk7Ci0JcmVhZF91bmxvY2soZ2xfbG9ja19hZGRyKGhhc2gpKTsKLQotCXJldHVybiBnbDsKLX0KLQotLyoqCiAgKiBtYXlfZ3JhbnQgLSBjaGVjayBpZiBpdHMgb2sgdG8gZ3JhbnQgYSBuZXcgbG9jawogICogQGdsOiBUaGUgZ2xvY2sKICAqIEBnaDogVGhlIGxvY2sgcmVxdWVzdCB3aGljaCB3ZSB3aXNoIHRvIGdyYW50CkBAIC01MjMsNyArNDk2LDcgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBnZnMyX2xtX2xvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssCi0JCQkJIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCisJCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCiAJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0ID0gTE1fT1VUX0VSUk9SOwpAQCAtNTMyLDcgKzUwNSw3IEBACiAJCXJldHVybiByZXFfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQgPyAwIDogcmVxX3N0YXRlOwogCiAJaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlyZXQgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9sb2NrKGxvY2ssIGN1cl9zdGF0ZSwKKwkJcmV0ID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jayhsb2NrLAogCQkJCQkJCSByZXFfc3RhdGUsIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTc1LDcgKzU0OCw3IEBACiAJICAgIGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9ERUZFUlJFRCkgJiYKIAkgICAgIShsY2tfZmxhZ3MgJiAoTE1fRkxBR19UUlkgfCBMTV9GTEFHX1RSWV8xQ0IpKSkKIAkJbGNrX2ZsYWdzIHw9IExNX0ZMQUdfVFJZXzFDQjsKLQlyZXQgPSBnZnMyX2xtX2xvY2soc2RwLCBnbC0+Z2xfbG9jaywgZ2wtPmdsX3N0YXRlLCB0YXJnZXQsIGxja19mbGFncyk7CisJcmV0ID0gZ2ZzMl9sbV9sb2NrKHNkcCwgZ2wsIHRhcmdldCwgbGNrX2ZsYWdzKTsKIAogCWlmICghKHJldCAmIExNX09VVF9BU1lOQykpIHsKIAkJZmluaXNoX3htb3RlKGdsLCByZXQpOwpAQCAtNjI0LDEwICs1OTcsMTEgQEAKIAogCUdMT0NLX0JVR19PTihnbCwgdGVzdF9iaXQoR0xGX0RFTU9URV9JTl9QUk9HUkVTUywgJmdsLT5nbF9mbGFncykpOwogCisJZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCWlmICh0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgogCSAgICBnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IGdsLT5nbF9zdGF0ZSkgewogCQlpZiAoZmluZF9maXJzdF9ob2xkZXIoZ2wpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmIChub25ibG9jaykKIAkJCWdvdG8gb3V0X3NjaGVkOwogCQlzZXRfYml0KEdMRl9ERU1PVEVfSU5fUFJPR1JFU1MsICZnbC0+Z2xfZmxhZ3MpOwpAQCAtNjM4LDIzICs2MTIsMjYgQEAKIAkJCWdmczJfZGVtb3RlX3dha2UoZ2wpOwogCQlyZXQgPSBkb19wcm9tb3RlKGdsKTsKIAkJaWYgKHJldCA9PSAwKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmIChyZXQgPT0gMikKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0X3NlbTsKIAkJZ2ggPSBmaW5kX2ZpcnN0X3dhaXRlcihnbCk7CiAJCWdsLT5nbF90YXJnZXQgPSBnaC0+Z2hfc3RhdGU7CiAJCWlmICghKGdoLT5naF9mbGFncyAmIChMTV9GTEFHX1RSWSB8IExNX0ZMQUdfVFJZXzFDQikpKQogCQkJZG9fZXJyb3IoZ2wsIDApOyAvKiBGYWlsIHF1ZXVlZCB0cnkgbG9ja3MgKi8KIAl9CiAJZG9feG1vdGUoZ2wsIGdoLCBnbC0+Z2xfdGFyZ2V0KTsKK291dF9zZW06CisJdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKIAlyZXR1cm47CiAKIG91dF9zY2hlZDoKIAlnZnMyX2dsb2NrX2hvbGQoZ2wpOwogCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKLW91dDoKK291dF91bmxvY2s6CiAJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnb3RvIG91dF9zZW07CiB9CiAKIHN0YXRpYyB2b2lkIGdsb2NrX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC02ODEsMTggKzY1OCw2IEBACiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKIH0KIAotc3RhdGljIGludCBnZnMyX2xtX2dldF9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgdm9pZCAqKmxvY2twKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9nZXRfbG9jaykKLQkJcmV0dXJuIDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2dldF9sb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGxvY2twKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIC8qKgogICogZ2ZzMl9nbG9ja19nZXQoKSAtIEdldCBhIGdsb2NrLCBvciBjcmVhdGUgb25lIGlmIG9uZSBkb2Vzbid0IGV4aXN0CiAgKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCkBAIC03MTksMTAgKzY4NCwxMSBAQAogCWdsID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsICZuYW1lKTsKIAlyZWFkX3VubG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwogCi0JaWYgKGdsIHx8ICFjcmVhdGUpIHsKLQkJKmdscCA9IGdsOworCSpnbHAgPSBnbDsKKwlpZiAoZ2wpCiAJCXJldHVybiAwOwotCX0KKwlpZiAoIWNyZWF0ZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlnbCA9IGttZW1fY2FjaGVfYWxsb2MoZ2ZzMl9nbG9ja19jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICghZ2wpCkBAIC03MzYsNyArNzAyLDkgQEAKIAlnbC0+Z2xfZGVtb3RlX3N0YXRlID0gTE1fU1RfRVhDTFVTSVZFOwogCWdsLT5nbF9oYXNoID0gaGFzaDsKIAlnbC0+Z2xfb3BzID0gZ2xvcHM7Ci0JZ2wtPmdsX3N0YW1wID0gamlmZmllczsKKwlzbnByaW50ZihnbC0+Z2xfc3RybmFtZSwgR0RMTV9TVFJOQU1FX0JZVEVTLCAiJTh4JTE2bGx4IiwgbmFtZS5sbl90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKW51bWJlcik7CisJbWVtc2V0KCZnbC0+Z2xfbGtzYiwgMCwgc2l6ZW9mKHN0cnVjdCBkbG1fbGtzYikpOworCWdsLT5nbF9sa3NiLnNiX2x2YnB0ciA9IGdsLT5nbF9sdmI7CiAJZ2wtPmdsX3RjaGFuZ2UgPSBqaWZmaWVzOwogCWdsLT5nbF9vYmplY3QgPSBOVUxMOwogCWdsLT5nbF9zYmQgPSBzZHA7CkBAIC03NTMsMTAgKzcyMSw2IEBACiAJCX0KIAl9CiAKLQllcnJvciA9IGdmczJfbG1fZ2V0X2xvY2soc2RwLCAmbmFtZSwgJmdsLT5nbF9sb2NrKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9hc3BhY2U7Ci0KIAl3cml0ZV9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CiAJdG1wID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsICZuYW1lKTsKIAlpZiAodG1wKSB7CkBAIC03NzIsOSArNzM2LDYgQEAKIAogCXJldHVybiAwOwogCi1mYWlsX2FzcGFjZToKLQlpZiAoZ2wtPmdsX2FzcGFjZSkKLQkJZ2ZzMl9hc3BhY2VfcHV0KGdsLT5nbF9hc3BhY2UpOwogZmFpbDoKIAlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC05NjYsNyArOTI3LDcgQEAKIAlpZiAoIShnaC0+Z2hfZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKSkgewogCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKQotCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKGdsLT5nbF9sb2NrKTsKKwkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbChnbCk7CiAJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCX0KIAlyZXR1cm47CkBAIC0xMDUxLDcgKzEwMTIsNiBAQAogCQkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJCQljbGVhcl9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpOwogCQl9Ci0JCWdsLT5nbF9zdGFtcCA9IGppZmZpZXM7CiAJCWlmIChsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykgJiYKIAkJICAgICF0ZXN0X2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJCSAgICAhdGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykpCkBAIC0xMjQwLDcwICsxMjAwLDEzIEBACiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaHNbeF0pOwogfQogCi1zdGF0aWMgaW50IGdmczJfbG1faG9sZF9sdmIoc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKQordm9pZCBnZnMyX2dsb2NrX2NiKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdW5zaWduZWQgaW50IHN0YXRlKQogewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9ob2xkX2x2YikKLQkJcmV0dXJuIDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2hvbGRfbHZiKGxvY2ssIGx2YnApOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX2x2Yl9ob2xkIC0gYXR0YWNoIGEgTFZCIGZyb20gYSBnbG9jawotICogQGdsOiBUaGUgZ2xvY2sgaW4gcXVlc3Rpb24KLSAqCi0gKi8KLQotaW50IGdmczJfbHZiX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCWludCBlcnJvcjsKLQotCWlmICghYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpKSB7Ci0JCWVycm9yID0gZ2ZzMl9sbV9ob2xkX2x2YihnbC0+Z2xfc2JkLCBnbC0+Z2xfbG9jaywgJmdsLT5nbF9sdmIpOwotCQlpZiAoZXJyb3IpIAotCQkJcmV0dXJuIGVycm9yOwotCQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwotCX0KLQlhdG9taWNfaW5jKCZnbC0+Z2xfbHZiX2NvdW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfbHZiX3VuaG9sZCAtIGRldGFjaCBhIExWQiBmcm9tIGEgZ2xvY2sKLSAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCi0gKgotICovCi0KLXZvaWQgZ2ZzMl9sdmJfdW5ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0KLQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwotCWdmczJfYXNzZXJ0KGdsLT5nbF9zYmQsIGF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KSA+IDApOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZnbC0+Z2xfbHZiX2NvdW50KSkgewotCQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fdW5ob2xkX2x2YikKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3VuaG9sZF9sdmIoZ2wtPmdsX2xvY2ssIGdsLT5nbF9sdmIpOwotCQlnbC0+Z2xfbHZiID0gTlVMTDsKLQkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwotCX0KLQlnZnMyX2dsb2NrX3B1dChnbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsb2NraW5nX2NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQl1bnNpZ25lZCBpbnQgc3RhdGUpCi17Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKmdsOwogCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOwogCXVuc2lnbmVkIGxvbmcgaG9sZHRpbWU7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCi0JZ2wgPSBnZnMyX2dsb2NrX2ZpbmQoc2RwLCBuYW1lKTsKLQlpZiAoIWdsKQotCQlyZXR1cm47Ci0KKwlnZnMyX2dsb2NrX2hvbGQoZ2wpOwogCWhvbGR0aW1lID0gZ2wtPmdsX3RjaGFuZ2UgKyBnbC0+Z2xfb3BzLT5nb19taW5faG9sZF90aW1lOwogCWlmICh0aW1lX2JlZm9yZShub3csIGhvbGR0aW1lKSkKIAkJZGVsYXkgPSBob2xkdGltZSAtIG5vdzsKQEAgLTEzMTcsNzQgKzEyMjAsMzMgQEAKIAkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX2pkZXNjX21ha2VfZGlydHkoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpCi17Ci0Jc3RydWN0IGdmczJfamRlc2MgKmpkOwotCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgewotCQlpZiAoamQtPmpkX2ppZCAhPSBqaWQpCi0JCQljb250aW51ZTsKLQkJamQtPmpkX2RpcnR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKLX0KLQogLyoqCi0gKiBnZnMyX2dsb2NrX2NiIC0gQ2FsbGJhY2sgdXNlZCBieSBsb2NraW5nIG1vZHVsZQotICogQHNkcDogUG9pbnRlciB0byB0aGUgc3VwZXJibG9jawotICogQHR5cGU6IFR5cGUgb2YgY2FsbGJhY2sKLSAqIEBkYXRhOiBUeXBlIGRlcGVuZGVudCBkYXRhIHBvaW50ZXIKKyAqIGdmczJfZ2xvY2tfY29tcGxldGUgLSBDYWxsYmFjayB1c2VkIGJ5IGxvY2tpbmcKKyAqIEBnbDogUG9pbnRlciB0byB0aGUgZ2xvY2sKKyAqIEByZXQ6IFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZGxtCiAgKgotICogQ2FsbGVkIGJ5IHRoZSBsb2NraW5nIG1vZHVsZSB3aGVuIGl0IHdhbnRzIHRvIHRlbGwgdXMgc29tZXRoaW5nLgotICogRWl0aGVyIHdlIG5lZWQgdG8gZHJvcCBhIGxvY2ssIG9uZSBvZiBvdXIgQVNZTkMgcmVxdWVzdHMgY29tcGxldGVkLCBvcgotICogYSBqb3VybmFsIGZyb20gYW5vdGhlciBjbGllbnQgbmVlZHMgdG8gYmUgcmVjb3ZlcmVkLgogICovCiAKLXZvaWQgZ2ZzMl9nbG9ja19jYih2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkKK3ZvaWQgZ2ZzMl9nbG9ja19jb21wbGV0ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCByZXQpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBjYl9kYXRhOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBMTV9DQl9ORUVEX0U6Ci0JCWJsb2NraW5nX2NiKHNkcCwgZGF0YSwgTE1fU1RfVU5MT0NLRUQpOwotCQlyZXR1cm47Ci0KLQljYXNlIExNX0NCX05FRURfRDoKLQkJYmxvY2tpbmdfY2Ioc2RwLCBkYXRhLCBMTV9TVF9ERUZFUlJFRCk7Ci0JCXJldHVybjsKLQotCWNhc2UgTE1fQ0JfTkVFRF9TOgotCQlibG9ja2luZ19jYihzZHAsIGRhdGEsIExNX1NUX1NIQVJFRCk7Ci0JCXJldHVybjsKLQotCWNhc2UgTE1fQ0JfQVNZTkM6IHsKLQkJc3RydWN0IGxtX2FzeW5jX2NiICphc3luYyA9IGRhdGE7Ci0JCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKLQotCQlkb3duX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7Ci0JCWdsID0gZ2ZzMl9nbG9ja19maW5kKHNkcCwgJmFzeW5jLT5sY19uYW1lKTsKLQkJaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBnbCkpCisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJZ2wtPmdsX3JlcGx5ID0gcmV0OworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpKSkgeworCQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdoOworCQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKKwkJZ2ggPSBmaW5kX2ZpcnN0X3dhaXRlcihnbCk7CisJCWlmICgoIShnaCAmJiAoZ2gtPmdoX2ZsYWdzICYgTE1fRkxBR19OT0VYUCkpICYmCisJCSAgICAgKGdsLT5nbF90YXJnZXQgIT0gTE1fU1RfVU5MT0NLRUQpKSB8fAorCQkgICAgKChyZXQgJiB+TE1fT1VUX1NUX01BU0spICE9IDApKQorCQkJc2V0X2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKKwkJaWYgKHRlc3RfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpKQogCQkJcmV0dXJuOwotCQlnbC0+Z2xfcmVwbHkgPSBhc3luYy0+bGNfcmV0OwotCQlzZXRfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCAmZ2wtPmdsX2ZsYWdzKTsKLQkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKLQkJCWdmczJfZ2xvY2tfcHV0KGdsKTsKLQkJdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJcmV0dXJuOwogCX0KLQotCWNhc2UgTE1fQ0JfTkVFRF9SRUNPVkVSWToKLQkJZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHNkcCwgKih1bnNpZ25lZCBpbnQgKilkYXRhKTsKLQkJaWYgKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2VzcykKLQkJCXdha2VfdXBfcHJvY2VzcyhzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpOwotCQlyZXR1cm47Ci0KLQlkZWZhdWx0OgotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgMCk7Ci0JCXJldHVybjsKLQl9CisJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKKwlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQorCQlnZnMyX2dsb2NrX3B1dChnbCk7CiB9CiAKIC8qKgpAQCAtMTUxNSw2ICsxMzc3LDI1IEBACiAJcmV0dXJuIGhhc19lbnRyaWVzOwogfQogCisKKy8qKgorICogdGhhd19nbG9jayAtIHRoYXcgb3V0IGEgZ2xvY2sgd2hpY2ggaGFzIGFuIHVucHJvY2Vzc2VkIHJlcGx5IHdhaXRpbmcKKyAqIEBnbDogVGhlIGdsb2NrIHRvIHRoYXcKKyAqCisgKiBOLkIuIFdoZW4gd2UgZnJlZXplIGEgZ2xvY2ssIHdlIGxlYXZlIGEgcmVmIHRvIHRoZSBnbG9jayBvdXRzdGFuZGluZywKKyAqIHNvIHRoaXMgaGFzIHRvIHJlc3VsdCBpbiB0aGUgcmVmIGNvdW50IGJlaW5nIGRyb3BwZWQgYnkgb25lLgorICovCisKK3N0YXRpYyB2b2lkIHRoYXdfZ2xvY2soc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CisJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKKwlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQorCQlnZnMyX2dsb2NrX3B1dChnbCk7Cit9CisKIC8qKgogICogY2xlYXJfZ2xvY2sgLSBsb29rIGF0IGEgZ2xvY2sgYW5kIHNlZSBpZiB3ZSBjYW4gZnJlZSBpdCBmcm9tIGdsb2NrIGNhY2hlCiAgKiBAZ2w6IHRoZSBnbG9jayB0byBsb29rIGF0CkBAIC0xNTQwLDYgKzE0MjEsMjAgQEAKIH0KIAogLyoqCisgKiBnZnMyX2dsb2NrX3RoYXcgLSBUaGF3IGFueSBmcm96ZW4gZ2xvY2tzCisgKiBAc2RwOiBUaGUgc3VwZXIgYmxvY2sKKyAqCisgKi8KKwordm9pZCBnZnMyX2dsb2NrX3RoYXcoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJdW5zaWduZWQgeDsKKworCWZvciAoeCA9IDA7IHggPCBHRlMyX0dMX0hBU0hfU0laRTsgeCsrKQorCQlleGFtaW5lX2J1Y2tldCh0aGF3X2dsb2NrLCBzZHAsIHgpOworfQorCisvKioKICAqIGdmczJfZ2xfaGFzaF9jbGVhciAtIEVtcHR5IG91dCB0aGUgZ2xvY2sgaGFzaCB0YWJsZQogICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KICAqIEB3YWl0OiB3YWl0IHVudGlsIGl0J3MgYWxsIGdvbmUKQEAgLTE2MTksNyArMTUxNCw3IEBACiAJaWYgKGZsYWdzICYgTE1fRkxBR19OT0VYUCkKIAkJKnArKyA9ICdlJzsKIAlpZiAoZmxhZ3MgJiBMTV9GTEFHX0FOWSkKLQkJKnArKyA9ICdhJzsKKwkJKnArKyA9ICdBJzsKIAlpZiAoZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKQogCQkqcCsrID0gJ3AnOwogCWlmIChmbGFncyAmIEdMX0FTWU5DKQpAQCAtMTY4Myw2ICsxNTc4LDEwIEBACiAJCSpwKysgPSAnaSc7CiAJaWYgKHRlc3RfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCBnZmxhZ3MpKQogCQkqcCsrID0gJ3InOworCWlmICh0ZXN0X2JpdChHTEZfSU5JVElBTCwgZ2ZsYWdzKSkKKwkJKnArKyA9ICdJJzsKKwlpZiAodGVzdF9iaXQoR0xGX0ZST1pFTiwgZ2ZsYWdzKSkKKwkJKnArKyA9ICdGJzsKIAkqcCA9IDA7CiAJcmV0dXJuIGJ1ZjsKIH0KQEAgLTE3MTcsMTQgKzE2MTYsMTMgQEAKIAlkdGltZSAqPSAxMDAwMDAwL0haOyAvKiBkZW1vdGUgdGltZSBpbiB1U2VjICovCiAJaWYgKCF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJZHRpbWUgPSAwOwotCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGw6JWQgYTolZCByOiVkXG4iLAorCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGE6JWQgcjolZFxuIiwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX3N0YXRlKSwKIAkJICBnbC0+Z2xfbmFtZS5sbl90eXBlLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2wtPmdsX25hbWUubG5fbnVtYmVyLAogCQkgIGdmbGFnczJzdHIoZ2ZsYWdzX2J1ZiwgJmdsLT5nbF9mbGFncyksCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF90YXJnZXQpLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfZGVtb3RlX3N0YXRlKSwgZHRpbWUsCi0JCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpLAogCQkgIGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSwKIAkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikpOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggNTQzZWM3ZS4uYTYwMmEyOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMTEsMTUgKzExLDEzMCBAQAogI2RlZmluZSBfX0dMT0NLX0RPVF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAKLS8qIEZsYWdzIGZvciBsb2NrIHJlcXVlc3RzOyB1c2VkIGluIGdmczJfaG9sZGVyIGdoX2ZsYWcgZmllbGQuCi0gICBGcm9tIGxtX2ludGVyZmFjZS5oOgorLyogT3B0aW9ucyBmb3IgaG9zdGRhdGEgcGFyc2VyICovCisKK2VudW0geworCU9wdF9qaWQsCisJT3B0X2lkLAorCU9wdF9maXJzdCwKKwlPcHRfbm9kaXIsCisJT3B0X2VyciwKK307CisKKy8qCisgKiBsbV9sb2NrbmFtZSB0eXBlcworICovCisKKyNkZWZpbmUgTE1fVFlQRV9SRVNFUlZFRAkweDAwCisjZGVmaW5lIExNX1RZUEVfTk9ORElTSwkJMHgwMQorI2RlZmluZSBMTV9UWVBFX0lOT0RFCQkweDAyCisjZGVmaW5lIExNX1RZUEVfUkdSUAkJMHgwMworI2RlZmluZSBMTV9UWVBFX01FVEEJCTB4MDQKKyNkZWZpbmUgTE1fVFlQRV9JT1BFTgkJMHgwNQorI2RlZmluZSBMTV9UWVBFX0ZMT0NLCQkweDA2CisjZGVmaW5lIExNX1RZUEVfUExPQ0sJCTB4MDcKKyNkZWZpbmUgTE1fVFlQRV9RVU9UQQkJMHgwOAorI2RlZmluZSBMTV9UWVBFX0pPVVJOQUwJCTB4MDkKKworLyoKKyAqIGxtX2xvY2soKSBzdGF0ZXMKKyAqCisgKiBTSEFSRUQgaXMgY29tcGF0aWJsZSB3aXRoIFNIQVJFRCwgbm90IHdpdGggREVGRVJSRUQgb3IgRVguCisgKiBERUZFUlJFRCBpcyBjb21wYXRpYmxlIHdpdGggREVGRVJSRUQsIG5vdCB3aXRoIFNIQVJFRCBvciBFWC4KKyAqLworCisjZGVmaW5lIExNX1NUX1VOTE9DS0VECQkwCisjZGVmaW5lIExNX1NUX0VYQ0xVU0lWRQkJMQorI2RlZmluZSBMTV9TVF9ERUZFUlJFRAkJMgorI2RlZmluZSBMTV9TVF9TSEFSRUQJCTMKKworLyoKKyAqIGxtX2xvY2soKSBmbGFncworICoKKyAqIExNX0ZMQUdfVFJZCisgKiBEb24ndCB3YWl0IHRvIGFjcXVpcmUgdGhlIGxvY2sgaWYgaXQgY2FuJ3QgYmUgZ3JhbnRlZCBpbW1lZGlhdGVseS4KKyAqCisgKiBMTV9GTEFHX1RSWV8xQ0IKKyAqIFNlbmQgb25lIGJsb2NraW5nIGNhbGxiYWNrIGlmIFRSWSBpcyBzZXQgYW5kIHRoZSBsb2NrIGlzIG5vdCBncmFudGVkLgorICoKKyAqIExNX0ZMQUdfTk9FWFAKKyAqIEdGUyBzZXRzIHRoaXMgZmxhZyBvbiBsb2NrIHJlcXVlc3RzIGl0IG1ha2VzIHdoaWxlIGRvaW5nIGpvdXJuYWwgcmVjb3ZlcnkuCisgKiBUaGVzZSBzcGVjaWFsIHJlcXVlc3RzIHNob3VsZCBub3QgYmUgYmxvY2tlZCBkdWUgdG8gdGhlIHJlY292ZXJ5IGxpa2UKKyAqIG9yZGluYXJ5IGxvY2tzIHdvdWxkIGJlLgorICoKKyAqIExNX0ZMQUdfQU5ZCisgKiBBIFNIQVJFRCByZXF1ZXN0IG1heSBhbHNvIGJlIGdyYW50ZWQgaW4gREVGRVJSRUQsIG9yIGEgREVGRVJSRUQgcmVxdWVzdCBtYXkKKyAqIGFsc28gYmUgZ3JhbnRlZCBpbiBTSEFSRUQuICBUaGUgcHJlZmVycmVkIHN0YXRlIGlzIHdoaWNoZXZlciBpcyBjb21wYXRpYmxlCisgKiB3aXRoIG90aGVyIGdyYW50ZWQgbG9ja3MsIG9yIHRoZSBzcGVjaWZpZWQgc3RhdGUgaWYgbm8gb3RoZXIgbG9ja3MgZXhpc3QuCisgKgorICogTE1fRkxBR19QUklPUklUWQorICogT3ZlcnJpZGUgZmFpcm5lc3MgY29uc2lkZXJhdGlvbnMuICBTdXBwb3NlIGEgbG9jayBpcyBoZWxkIGluIGEgc2hhcmVkIHN0YXRlCisgKiBhbmQgdGhlcmUgaXMgYSBwZW5kaW5nIHJlcXVlc3QgZm9yIHRoZSBkZWZlcnJlZCBzdGF0ZS4gIEEgc2hhcmVkIGxvY2sKKyAqIHJlcXVlc3Qgd2l0aCB0aGUgcHJpb3JpdHkgZmxhZyB3b3VsZCBiZSBhbGxvd2VkIHRvIGJ5cGFzcyB0aGUgZGVmZXJyZWQKKyAqIHJlcXVlc3QgYW5kIGRpcmVjdGx5IGpvaW4gdGhlIG90aGVyIHNoYXJlZCBsb2NrLiAgQSBzaGFyZWQgbG9jayByZXF1ZXN0CisgKiB3aXRob3V0IHRoZSBwcmlvcml0eSBmbGFnIG1pZ2h0IGJlIGZvcmNlZCB0byB3YWl0IHVudGlsIHRoZSBkZWZlcnJlZAorICogcmVxdWVzdGVkIGhhZCBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgdGhlIGxvY2suCisgKi8KKwogI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQogI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKICNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAogI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAgKi8KKyNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwCisjZGVmaW5lIEdMX0FTWU5DCQkweDAwMDAwMDQwCisjZGVmaW5lIEdMX0VYQUNUCQkweDAwMDAwMDgwCisjZGVmaW5lIEdMX1NLSVAJCQkweDAwMDAwMTAwCisjZGVmaW5lIEdMX0FUSU1FCQkweDAwMDAwMjAwCisjZGVmaW5lIEdMX05PQ0FDSEUJCTB4MDAwMDA0MDAKKyAgCisvKgorICogbG1fbG9jaygpIGFuZCBsbV9hc3luY19jYiByZXR1cm4gZmxhZ3MKKyAqCisgKiBMTV9PVVRfU1RfTUFTSworICogTWFza3MgdGhlIGxvd2VyIHR3byBiaXRzIG9mIGxvY2sgc3RhdGUgaW4gdGhlIHJldHVybmVkIHZhbHVlLgorICoKKyAqIExNX09VVF9DQU5DRUxFRAorICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQuCisgKgorICogTE1fT1VUX0FTWU5DCisgKiBUaGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gTE1fQ0JfQVNZTkMgY2FsbGJhY2suCisgKgorICovCisKKyNkZWZpbmUgTE1fT1VUX1NUX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgTE1fT1VUX0NBTkNFTEVECQkweDAwMDAwMDA4CisjZGVmaW5lIExNX09VVF9BU1lOQwkJMHgwMDAwMDA4MAorI2RlZmluZSBMTV9PVVRfRVJST1IJCTB4MDAwMDAxMDAKKworLyoKKyAqIGxtX3JlY292ZXJ5X2RvbmUoKSBtZXNzYWdlcworICovCisKKyNkZWZpbmUgTE1fUkRfR0FWRVVQCQkzMDgKKyNkZWZpbmUgTE1fUkRfU1VDQ0VTUwkJMzA5CisKKyNkZWZpbmUgR0xSX1RSWUZBSUxFRAkJMTMKKworc3RydWN0IGxtX2xvY2tvcHMgeworCWNvbnN0IGNoYXIgKmxtX3Byb3RvX25hbWU7CisJaW50ICgqbG1fbW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqZnNuYW1lKTsKKyAJdm9pZCAoKmxtX3VubW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CisJdm9pZCAoKmxtX3dpdGhkcmF3KSAoc3RydWN0IGdmczJfc2JkICpzZHApOworCXZvaWQgKCpsbV9wdXRfbG9jaykgKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKmdsKTsKKwl1bnNpZ25lZCBpbnQgKCpsbV9sb2NrKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsLAorCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCXZvaWQgKCpsbV9jYW5jZWwpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOworCWNvbnN0IG1hdGNoX3RhYmxlX3QgKmxtX3Rva2VuczsKK307CisKKyNkZWZpbmUgTE1fRkxBR19UUlkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTE1fRkxBR19UUllfMUNCCQkweDAwMDAwMDAyCisjZGVmaW5lIExNX0ZMQUdfTk9FWFAJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTE1fRkxBR19BTlkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwCiAKICNkZWZpbmUgR0xfQVNZTkMJCTB4MDAwMDAwNDAKICNkZWZpbmUgR0xfRVhBQ1QJCTB4MDAwMDAwODAKQEAgLTEyOCwxMCArMjQzLDEyIEBACiBpbnQgZ2ZzMl9sdmJfaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogdm9pZCBnZnMyX2x2Yl91bmhvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAotdm9pZCBnZnMyX2dsb2NrX2NiKHZvaWQgKmNiX2RhdGEsIHVuc2lnbmVkIGludCB0eXBlLCB2b2lkICpkYXRhKTsKK3ZvaWQgZ2ZzMl9nbG9ja19jYihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCBzdGF0ZSk7Cit2b2lkIGdmczJfZ2xvY2tfY29tcGxldGUoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgcmV0KTsKIHZvaWQgZ2ZzMl9yZWNsYWltX2dsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9nbF9oYXNoX2NsZWFyKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9nbG9ja19maW5pc2hfdHJ1bmNhdGUoc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKK3ZvaWQgZ2ZzMl9nbG9ja190aGF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogaW50IF9faW5pdCBnZnMyX2dsb2NrX2luaXQodm9pZCk7CiB2b2lkIGdmczJfZ2xvY2tfZXhpdCh2b2lkKTsKQEAgLTE0MSw0ICsyNTgsNiBAQAogaW50IGdmczJfcmVnaXN0ZXJfZGVidWdmcyh2b2lkKTsKIHZvaWQgZ2ZzMl91bnJlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZnMyX2RsbV9vcHM7CisKICNlbmRpZiAvKiBfX0dMT0NLX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuYyBiL2ZzL2dmczIvZ2xvcHMuYwppbmRleCA4NTIyZDNhLi5iZjIzYTYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmMKKysrIGIvZnMvZ2ZzMi9nbG9wcy5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTM4LDE5ICszNywyNCBAQAogc3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfZ2woc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKLQl1bnNpZ25lZCBpbnQgYmxvY2tzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmZ2wtPmdsX2FpbF9saXN0OwogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVycm9yOworCXN0cnVjdCBnZnMyX3RyYW5zIHRyOwogCi0JYmxvY2tzID0gYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpOwotCWlmICghYmxvY2tzKQorCW1lbXNldCgmdHIsIDAsIHNpemVvZih0cikpOworCXRyLnRyX3Jldm9rZXMgPSBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCk7CisKKwlpZiAoIXRyLnRyX3Jldm9rZXMpCiAJCXJldHVybjsKIAotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDAsIGJsb2Nrcyk7Ci0JaWYgKGdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWVycm9yKSkKLQkJcmV0dXJuOworCS8qIEEgc2hvcnRlbmVkLCBpbmxpbmUgdmVyc2lvbiBvZiBnZnMyX3RyYW5zX2JlZ2luKCkgKi8KKwl0ci50cl9yZXNlcnZlZCA9IDEgKyBnZnMyX3N0cnVjdDJibGsoc2RwLCB0ci50cl9yZXZva2VzLCBzaXplb2YodTY0KSk7CisJdHIudHJfaXAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJSU5JVF9MSVNUX0hFQUQoJnRyLnRyX2xpc3RfYnVmKTsKKwlnZnMyX2xvZ19yZXNlcnZlKHNkcCwgdHIudHJfcmVzZXJ2ZWQpOworCUJVR19PTihjdXJyZW50LT5qb3VybmFsX2luZm8pOworCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9ICZ0cjsKIAogCWdmczJfbG9nX2xvY2soc2RwKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTcyLDI5ICs3Niw3IEBACiB9CiAKIC8qKgotICogZ2ZzMl9wdGVfaW52YWwgLSBTeW5jIGFuZCBpbnZhbGlkYXRlIGFsbCBQVEVzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jawotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBnZnMyX3B0ZV9pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQlpcCA9IGdsLT5nbF9vYmplY3Q7Ci0JaW5vZGUgPSAmaXAtPmlfaW5vZGU7Ci0JaWYgKCFpcCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuOwotCi0JdW5tYXBfc2hhcmVkX21hcHBpbmdfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgMCwgMCk7Ci0JaWYgKHRlc3RfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKSkKLQkJc2V0X2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOwotCi19Ci0KLS8qKgotICogbWV0YV9nb19zeW5jIC0gc3luYyBvdXQgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCisgKiByZ3JwX2dvX3N5bmMgLSBzeW5jIG91dCB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZ2xvY2sKICAqIEBnbDogdGhlIGdsb2NrCiAgKgogICogQ2FsbGVkIHdoZW4gZGVtb3Rpbmcgb3IgdW5sb2NraW5nIGFuIEVYIGdsb2NrLiAgV2UgbXVzdCBmbHVzaApAQCAtMTAyLDM2ICs4NCw0MiBAQAogICogbm90IHJldHVybiB0byBjYWxsZXIgdG8gZGVtb3RlL3VubG9jayB0aGUgZ2xvY2sgdW50aWwgSS9PIGlzIGNvbXBsZXRlLgogICovCiAKLXN0YXRpYyB2b2lkIG1ldGFfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCitzdGF0aWMgdm9pZCByZ3JwX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKQotCQlyZXR1cm47CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCWludCBlcnJvcjsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkgewotCQlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBnbCk7Ci0JCWdmczJfbWV0YV9zeW5jKGdsKTsKLQkJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwotCX0KKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CisJQlVHX09OKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOworCisJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOworCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7CisJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisgICAgICAgIG1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7CisJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwogfQogCiAvKioKLSAqIG1ldGFfZ29faW52YWwgLSBpbnZhbGlkYXRlIHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jaworICogcmdycF9nb19pbnZhbCAtIGludmFsaWRhdGUgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCiAgKiBAZ2w6IHRoZSBnbG9jawogICogQGZsYWdzOgogICoKKyAqIFdlIG5ldmVyIHVzZWQgTE1fU1RfREVGRVJSRUQgd2l0aCByZXNvdXJjZSBncm91cHMsIHNvIHRoYXQgd2UKKyAqIHNob3VsZCBhbHdheXMgc2VlIHRoZSBtZXRhZGF0YSBmbGFnIHNldCBoZXJlLgorICoKICAqLwogCi1zdGF0aWMgdm9pZCBtZXRhX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKQorc3RhdGljIHZvaWQgcmdycF9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncykKIHsKLQlpZiAoIShmbGFncyAmIERJT19NRVRBREFUQSkpCi0JCXJldHVybjsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKIAotCWdmczJfbWV0YV9pbnZhbChnbCk7Ci0JaWYgKGdsLT5nbF9vYmplY3QgPT0gR0ZTMl9JKGdsLT5nbF9zYmQtPnNkX3JpbmRleCkpCi0JCWdsLT5nbF9zYmQtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDA7Ci0JZWxzZSBpZiAoZ2wtPmdsX29wcyA9PSAmZ2ZzMl9yZ3JwX2dsb3BzICYmIGdsLT5nbF9vYmplY3QpIHsKKwlCVUdfT04oIShmbGFncyAmIERJT19NRVRBREFUQSkpOworCWdmczJfYXNzZXJ0X3dpdGhkcmF3KGdsLT5nbF9zYmQsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOworCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIDApOworCisJaWYgKGdsLT5nbF9vYmplY3QpIHsKIAkJc3RydWN0IGdmczJfcmdycGQgKnJnZCA9IChzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqKWdsLT5nbF9vYmplY3Q7Ci0KIAkJcmdkLT5yZF9mbGFncyAmPSB+R0ZTMl9SREZfVVBUT0RBVEU7CiAJfQogfQpAQCAtMTQ4LDQ4ICsxMzYsNTQgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CiAJaW50IGVycm9yOwogCi0JaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCkKLQkJZ2ZzMl9wdGVfaW52YWwoZ2wpOwotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKQotCQlyZXR1cm47Ci0KIAlpZiAoaXAgJiYgIVNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKIAkJaXAgPSBOVUxMOworCWlmIChpcCAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoR0lGX1NXX1BBR0VELCAmaXAtPmlfZmxhZ3MpKQorCQl1bm1hcF9zaGFyZWRfbWFwcGluZ19yYW5nZShpcC0+aV9pbm9kZS5pX21hcHBpbmcsIDAsIDApOworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpCisJCXJldHVybjsKIAotCWlmICh0ZXN0X2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKSB7Ci0JCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKLQkJZmlsZW1hcF9mZGF0YXdyaXRlKG1ldGFtYXBwaW5nKTsKLQkJaWYgKGlwKSB7Ci0JCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX2lub2RlLmlfbWFwcGluZzsKLQkJCWZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKLQkJCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7Ci0JCQltYXBwaW5nX3NldF9lcnJvcihtYXBwaW5nLCBlcnJvcik7Ci0JCX0KLQkJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7Ci0JCW1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7Ci0JCWNsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOwotCQlnZnMyX2FpbF9lbXB0eV9nbChnbCk7CisJQlVHX09OKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOworCisJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOworCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7CisJaWYgKGlwKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaXAtPmlfaW5vZGUuaV9tYXBwaW5nOworCQlmaWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7CisJCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7CisJCW1hcHBpbmdfc2V0X2Vycm9yKG1hcHBpbmcsIGVycm9yKTsKIAl9CisJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisJbWFwcGluZ19zZXRfZXJyb3IobWV0YW1hcHBpbmcsIGVycm9yKTsKKwlnZnMyX2FpbF9lbXB0eV9nbChnbCk7CiB9CiAKIC8qKgogICogaW5vZGVfZ29faW52YWwgLSBwcmVwYXJlIGEgaW5vZGUgZ2xvY2sgdG8gYmUgcmVsZWFzZWQKICAqIEBnbDogdGhlIGdsb2NrCiAgKiBAZmxhZ3M6CisgKiAKKyAqIE5vcm1hbGx5IHdlIGludmxpZGF0ZSBldmVyeXRoaW5nLCBidXQgaWYgd2UgYXJlIG1vdmluZyBpbnRvCisgKiBMTV9TVF9ERUZFUlJFRCBmcm9tIExNX1NUX1NIQVJFRCBvciBMTV9TVF9FWENMVVNJVkUgdGhlbiB3ZQorICogY2FuIGtlZXAgaG9sZCBvZiB0aGUgbWV0YWRhdGEsIHNpbmNlIGl0IHdvbid0IGhhdmUgY2hhbmdlZC4KICAqCiAgKi8KIAogc3RhdGljIHZvaWQgaW5vZGVfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gZ2wtPmdsX29iamVjdDsKLQlpbnQgbWV0YSA9IChmbGFncyAmIERJT19NRVRBREFUQSk7CiAKLQlpZiAobWV0YSkgewotCQlnZnMyX21ldGFfaW52YWwoZ2wpOworCWdmczJfYXNzZXJ0X3dpdGhkcmF3KGdsLT5nbF9zYmQsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOworCisJaWYgKGZsYWdzICYgRElPX01FVEFEQVRBKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCAwKTsKIAkJaWYgKGlwKQogCQkJc2V0X2JpdChHSUZfSU5WQUxJRCwgJmlwLT5pX2ZsYWdzKTsKIAl9CiAKKwlpZiAoaXAgPT0gR0ZTMl9JKGdsLT5nbF9zYmQtPnNkX3JpbmRleCkpCisJCWdsLT5nbF9zYmQtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDA7CiAJaWYgKGlwICYmIFNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaXAtPmlfaW5vZGUuaV9tYXBwaW5nLCAwKTsKIH0KQEAgLTM5MCwyMCArMzg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBxdW90YV9nb19kZW1vdGVfb2sgLSBDaGVjayB0byBzZWUgaWYgaXQncyBvayB0byB1bmxvY2sgYSBxdW90YSBnbG9jawotICogQGdsOiB0aGUgZ2xvY2sKLSAqCi0gKiBSZXR1cm5zOiAxIGlmIGl0J3Mgb2sKLSAqLwotCi1zdGF0aWMgaW50IHF1b3RhX2dvX2RlbW90ZV9vayhjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0JcmV0dXJuICFhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCk7Ci19Ci0KIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9tZXRhX2dsb3BzID0gewotCS5nb194bW90ZV90aCA9IG1ldGFfZ29fc3luYywKIAkuZ29fdHlwZSA9IExNX1RZUEVfTUVUQSwKIH07CiAKQEAgLTQxOCw4ICszOTksOCBAQAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3JncnBfZ2xvcHMgPSB7Ci0JLmdvX3htb3RlX3RoID0gbWV0YV9nb19zeW5jLAotCS5nb19pbnZhbCA9IG1ldGFfZ29faW52YWwsCisJLmdvX3htb3RlX3RoID0gcmdycF9nb19zeW5jLAorCS5nb19pbnZhbCA9IHJncnBfZ29faW52YWwsCiAJLmdvX2RlbW90ZV9vayA9IHJncnBfZ29fZGVtb3RlX29rLAogCS5nb19sb2NrID0gcmdycF9nb19sb2NrLAogCS5nb191bmxvY2sgPSByZ3JwX2dvX3VubG9jaywKQEAgLTQ0OCw3ICs0MjksNiBAQAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3F1b3RhX2dsb3BzID0gewotCS5nb19kZW1vdGVfb2sgPSBxdW90YV9nb19kZW1vdGVfb2ssCiAJLmdvX3R5cGUgPSBMTV9UWVBFX1FVT1RBLAogfTsKIApAQCAtNDU2LDMgKzQzNiwxNSBAQAogCS5nb190eXBlID0gTE1fVFlQRV9KT1VSTkFMLAogfTsKIAorY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2ZzMl9nbG9wc19saXN0W10gPSB7CisJW0xNX1RZUEVfTUVUQV0gPSAmZ2ZzMl9tZXRhX2dsb3BzLAorCVtMTV9UWVBFX0lOT0RFXSA9ICZnZnMyX2lub2RlX2dsb3BzLAorCVtMTV9UWVBFX1JHUlBdID0gJmdmczJfcmdycF9nbG9wcywKKwlbTE1fVFlQRV9OT05ESVNLXSA9ICZnZnMyX3RyYW5zX2dsb3BzLAorCVtMTV9UWVBFX0lPUEVOXSA9ICZnZnMyX2lvcGVuX2dsb3BzLAorCVtMTV9UWVBFX0ZMT0NLXSA9ICZnZnMyX2Zsb2NrX2dsb3BzLAorCVtMTV9UWVBFX05PTkRJU0tdID0gJmdmczJfbm9uZGlza19nbG9wcywKKwlbTE1fVFlQRV9RVU9UQV0gPSAmZ2ZzMl9xdW90YV9nbG9wcywKKwlbTE1fVFlQRV9KT1VSTkFMXSA9ICZnZnMyX2pvdXJuYWxfZ2xvcHMsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmggYi9mcy9nZnMyL2dsb3BzLmgKaW5kZXggYTFkOWI1Yi4uYjNhYTJlMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5oCisrKyBiL2ZzL2dmczIvZ2xvcHMuaApAQCAtMjEsNSArMjEsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9ub25kaXNrX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9xdW90YV9nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfam91cm5hbF9nbG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnZnMyX2dsb3BzX2xpc3RbXTsKIAogI2VuZGlmIC8qIF9fR0xPUFNfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbmNvcmUuaCBiL2ZzL2dmczIvaW5jb3JlLmgKaW5kZXggNjA4ODQ5ZC4uMzk5ZDFiOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbmNvcmUuaAorKysgYi9mcy9nZnMyL2luY29yZS5oCkBAIC0xMiw2ICsxMiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAKICNkZWZpbmUgRElPX1dBSVQJMHgwMDAwMDAxMAogI2RlZmluZSBESU9fTUVUQURBVEEJMHgwMDAwMDAyMApAQCAtMjYsNiArMjgsNyBAQAogc3RydWN0IGdmczJfYWlsOwogc3RydWN0IGdmczJfamRlc2M7CiBzdHJ1Y3QgZ2ZzMl9zYmQ7CitzdHJ1Y3QgbG1fbG9ja29wczsKIAogdHlwZWRlZiB2b2lkICgqZ2ZzMl9nbG9wX2JoX3QpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCByZXQpOwogCkBAIC0xMjEsNiArMTI0LDI4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBiZF9haWxfZ2xfbGlzdDsKIH07CiAKKy8qCisgKiBJbnRlcm5hbGx5LCB3ZSBwcmVmaXggdGhpbmdzIHdpdGggZ2RsbV8gYW5kIEdETE1fIChmb3IgZ2ZzLWRsbSkgc2luY2UgYQorICogcHJlZml4IG9mIGxvY2tfZGxtXyBnZXRzIGF3a3dhcmQuCisgKi8KKworI2RlZmluZSBHRExNX1NUUk5BTUVfQllURVMJMjUKKyNkZWZpbmUgR0RMTV9MVkJfU0laRQkJMzIKKworZW51bSB7CisJREZMX0JMT0NLX0xPQ0tTCQk9IDAsCit9OworCitzdHJ1Y3QgbG1fbG9ja25hbWUgeworCXU2NCBsbl9udW1iZXI7CisJdW5zaWduZWQgaW50IGxuX3R5cGU7Cit9OworCisjZGVmaW5lIGxtX25hbWVfZXF1YWwobmFtZTEsIG5hbWUyKSBcCisgICAgICAgICgoKG5hbWUxKS0+bG5fbnVtYmVyID09IChuYW1lMiktPmxuX251bWJlcikgJiYgXAorICAgICAgICAgKChuYW1lMSktPmxuX3R5cGUgPT0gKG5hbWUyKS0+bG5fdHlwZSkpCisKKwogc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyB7CiAJdm9pZCAoKmdvX3htb3RlX3RoKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAlpbnQgKCpnb194bW90ZV9iaCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgc3RydWN0IGdmczJfaG9sZGVyICpnaCk7CkBAIC0xNjIsNiArMTg3LDggQEAKIAlHTEZfTEZMVVNICQkJPSA3LAogCUdMRl9JTlZBTElEQVRFX0lOX1BST0dSRVNTCT0gOCwKIAlHTEZfUkVQTFlfUEVORElORwkJPSA5LAorCUdMRl9JTklUSUFMCQkJPSAxMCwKKwlHTEZfRlJPWkVOCQkJPSAxMSwKIH07CiAKIHN0cnVjdCBnZnMyX2dsb2NrIHsKQEAgLTE3NiwxNiArMjAzLDE1IEBACiAJdW5zaWduZWQgaW50IGdsX3RhcmdldDsKIAl1bnNpZ25lZCBpbnQgZ2xfcmVwbHk7CiAJdW5zaWduZWQgaW50IGdsX2hhc2g7CisJdW5zaWduZWQgaW50IGdsX3JlcTsKIAl1bnNpZ25lZCBpbnQgZ2xfZGVtb3RlX3N0YXRlOyAvKiBzdGF0ZSByZXF1ZXN0ZWQgYnkgcmVtb3RlIG5vZGUgKi8KIAl1bnNpZ25lZCBsb25nIGdsX2RlbW90ZV90aW1lOyAvKiB0aW1lIG9mIGZpcnN0IGRlbW90ZSByZXF1ZXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBnbF9ob2xkZXJzOwogCiAJY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xfb3BzOwotCXZvaWQgKmdsX2xvY2s7Ci0JY2hhciAqZ2xfbHZiOwotCWF0b21pY190IGdsX2x2Yl9jb3VudDsKLQotCXVuc2lnbmVkIGxvbmcgZ2xfc3RhbXA7CisJY2hhciBnbF9zdHJuYW1lW0dETE1fU1RSTkFNRV9CWVRFU107CisJc3RydWN0IGRsbV9sa3NiIGdsX2xrc2I7CisJY2hhciBnbF9sdmJbMzJdOwogCXVuc2lnbmVkIGxvbmcgZ2xfdGNoYW5nZTsKIAl2b2lkICpnbF9vYmplY3Q7CiAKQEAgLTI4Myw3ICszMDksOSBAQAogCiBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHFkX2xpc3Q7Ci0JdW5zaWduZWQgaW50IHFkX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgcWRfcmVjbGFpbTsKKworCWF0b21pY190IHFkX2NvdW50OwogCiAJdTMyIHFkX2lkOwogCXVuc2lnbmVkIGxvbmcgcWRfZmxhZ3M7CQkvKiBRREZfLi4uICovCkBAIC0zMDMsNyArMzMxLDYgQEAKIAogCXU2NCBxZF9zeW5jX2dlbjsKIAl1bnNpZ25lZCBsb25nIHFkX2xhc3Rfd2FybjsKLQl1bnNpZ25lZCBsb25nIHFkX2xhc3RfdG91Y2hlZDsKIH07CiAKIHN0cnVjdCBnZnMyX3RyYW5zIHsKQEAgLTM5MCw3ICs0MTcsNyBAQAogCXVuc2lnbmVkIGludCBhcl9zdWlkZGlyOjE7CQkvKiBzdWlkZGlyIHN1cHBvcnQgKi8KIAl1bnNpZ25lZCBpbnQgYXJfZGF0YToyOwkJCS8qIG9yZGVyZWQvd3JpdGViYWNrICovCiAJdW5zaWduZWQgaW50IGFyX21ldGE6MTsJCQkvKiBtb3VudCBtZXRhZnMgKi8KLQl1bnNpZ25lZCBpbnQgYXJfbnVtX2dsb2NrZDsJCS8qIE51bWJlciBvZiBnbG9ja2QgdGhyZWFkcyAqLworCXVuc2lnbmVkIGludCBhcl9kaXNjYXJkOjE7CQkvKiBkaXNjYXJkIHJlcXVlc3RzICovCiB9OwogCiBzdHJ1Y3QgZ2ZzMl90dW5lIHsKQEAgLTQwNiw3ICs0MzMsNiBAQAogCXVuc2lnbmVkIGludCBndF9xdW90YV93YXJuX3BlcmlvZDsgLyogU2VjcyBiZXR3ZWVuIHF1b3RhIHdhcm4gbXNncyAqLwogCXVuc2lnbmVkIGludCBndF9xdW90YV9zY2FsZV9udW07IC8qIE51bWVyYXRvciAqLwogCXVuc2lnbmVkIGludCBndF9xdW90YV9zY2FsZV9kZW47IC8qIERlbm9taW5hdG9yICovCi0JdW5zaWduZWQgaW50IGd0X3F1b3RhX2NhY2hlX3NlY3M7CiAJdW5zaWduZWQgaW50IGd0X3F1b3RhX3F1YW50dW07IC8qIFNlY3MgYmV0d2VlbiBzeW5jcyB0byBxdW90YSBmaWxlICovCiAJdW5zaWduZWQgaW50IGd0X25ld19maWxlc19qZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3RfbWF4X3JlYWRhaGVhZDsgLyogTWF4IGJ5dGVzIHRvIHJlYWQtYWhlYWQgZnJvbSBkaXNrICovCkBAIC00NDUsNiArNDcxLDMxIEBACiAKIAljaGFyIHNiX2xvY2twcm90b1tHRlMyX0xPQ0tOQU1FX0xFTl07CiAJY2hhciBzYl9sb2NrdGFibGVbR0ZTMl9MT0NLTkFNRV9MRU5dOworCXU4IHNiX3V1aWRbMTZdOworfTsKKworLyoKKyAqIGxtX21vdW50KCkgcmV0dXJuIHZhbHVlcworICoKKyAqIGxzX2ppZCAtIHRoZSBqb3VybmFsIElEIHRoaXMgbm9kZSBzaG91bGQgdXNlCisgKiBsc19maXJzdCAtIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgdG8gbW91bnQgdGhlIGZpbGUgc3lzdGVtCisgKiBsc19sb2Nrc3BhY2UgLSBsb2NrIG1vZHVsZSdzIGNvbnRleHQgZm9yIHRoaXMgZmlsZSBzeXN0ZW0KKyAqIGxzX29wcyAtIGxvY2sgbW9kdWxlJ3MgZnVuY3Rpb25zCisgKi8KKworc3RydWN0IGxtX2xvY2tzdHJ1Y3QgeworCXUzMiBsc19pZDsKKwl1bnNpZ25lZCBpbnQgbHNfamlkOworCXVuc2lnbmVkIGludCBsc19maXJzdDsKKwl1bnNpZ25lZCBpbnQgbHNfZmlyc3RfZG9uZTsKKwl1bnNpZ25lZCBpbnQgbHNfbm9kaXI7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxzX29wczsKKwl1bnNpZ25lZCBsb25nIGxzX2ZsYWdzOworCWRsbV9sb2Nrc3BhY2VfdCAqbHNfZGxtOworCisJaW50IGxzX3JlY292ZXJfamlkOworCWludCBsc19yZWNvdmVyX2ppZF9kb25lOworCWludCBsc19yZWNvdmVyX2ppZF9zdGF0dXM7CiB9OwogCiBzdHJ1Y3QgZ2ZzMl9zYmQgewpAQCAtNTIwLDcgKzU3MSw2IEBACiAJc3BpbmxvY2tfdCBzZF9qaW5kZXhfc3BpbjsKIAlzdHJ1Y3QgbXV0ZXggc2RfamluZGV4X211dGV4OwogCXVuc2lnbmVkIGludCBzZF9qb3VybmFsczsKLQl1bnNpZ25lZCBsb25nIHNkX2ppbmRleF9yZWZyZXNoX3RpbWU7CiAKIAlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqc2RfamRlc2M7CiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2pvdXJuYWxfZ2g7CkBAIC01NDAsNyArNTkwLDYgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQgc2RfcXVvdGFfbGlzdDsKIAlhdG9taWNfdCBzZF9xdW90YV9jb3VudDsKLQlzcGlubG9ja190IHNkX3F1b3RhX3NwaW47CiAJc3RydWN0IG11dGV4IHNkX3F1b3RhX211dGV4OwogCXdhaXRfcXVldWVfaGVhZF90IHNkX3F1b3RhX3dhaXQ7CiAJc3RydWN0IGxpc3RfaGVhZCBzZF90cnVuY19saXN0OwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDNiODdjMTguLjdiMjc3ZDQ0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIApAQCAtMTM3LDE2ICsxMzYsMTYgQEAKIAogCWlmIChTX0lTUkVHKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfZmlsZV9pb3BzOwotCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzKQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZmlsZV9mb3BzX25vbG9jazsKKwkJaWYgKGdmczJfbG9jYWxmbG9ja3Moc2RwKSkKKwkJCWlub2RlLT5pX2ZvcCA9IGdmczJfZmlsZV9mb3BzX25vbG9jazsKIAkJZWxzZQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZmlsZV9mb3BzOworCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9maWxlX2ZvcHM7CiAJfSBlbHNlIGlmIChTX0lTRElSKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfZGlyX2lvcHM7Ci0JCWlmIChzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MpCi0JCQlpbm9kZS0+aV9mb3AgPSAmZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CisJCWlmIChnZnMyX2xvY2FsZmxvY2tzKHNkcCkpCisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2Rpcl9mb3BzX25vbG9jazsKIAkJZWxzZQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZGlyX2ZvcHM7CisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2Rpcl9mb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZnZnMyX3N5bWxpbmtfaW9wczsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5oIGIvZnMvZ2ZzMi9pbm9kZS5oCmluZGV4IGQ1MzI5MzYuLmRjYTRmZWUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuaAorKysgYi9mcy9nZnMyL2lub2RlLmgKQEAgLTEwMSwxMiArMTAxLDI2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX3N5bWxpbmtfaW9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzX25vbG9jazsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHNfbm9sb2NrOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzX25vbG9jazsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzX25vbG9jazsKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSk7CisgCisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzOworc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9sb2NhbGZsb2Nrcyhjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlyZXR1cm4gc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzOworfQorI2Vsc2UgLyogU2luZ2xlIG5vZGUgb25seSAqLworI2RlZmluZSBnZnMyX2ZpbGVfZm9wcyBOVUxMCisjZGVmaW5lIGdmczJfZGlyX2ZvcHMgTlVMTAorc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9sb2NhbGZsb2Nrcyhjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSAqLwogCiAjZW5kaWYgLyogX19JTk9ERV9ET1RfSF9fICovCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja19kbG0uYyBiL2ZzL2dmczIvbG9ja19kbG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmRmOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZ2ZzMi9sb2NrX2RsbS5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCisgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CisKKyNpbmNsdWRlICJpbmNvcmUuaCIKKyNpbmNsdWRlICJnbG9jay5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworCitzdGF0aWMgdm9pZCBnZGxtX2FzdCh2b2lkICphcmcpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gYXJnOworCXVuc2lnbmVkIHJldCA9IGdsLT5nbF9zdGF0ZTsKKworCUJVR19PTihnbC0+Z2xfbGtzYi5zYl9mbGFncyAmIERMTV9TQkZfREVNT1RFRCk7CisKKwlpZiAoZ2wtPmdsX2xrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX1ZBTE5PVFZBTElEKQorCQltZW1zZXQoZ2wtPmdsX2x2YiwgMCwgR0RMTV9MVkJfU0laRSk7CisKKwlzd2l0Y2ggKGdsLT5nbF9sa3NiLnNiX3N0YXR1cykgeworCWNhc2UgLURMTV9FVU5MT0NLOiAvKiBVbmxvY2tlZCwgc28gZ2xvY2sgY2FuIGJlIGZyZWVkICovCisJCWttZW1fY2FjaGVfZnJlZShnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOworCQlyZXR1cm47CisJY2FzZSAtRExNX0VDQU5DRUw6IC8qIENhbmNlbCB3aGlsZSBnZXR0aW5nIGxvY2sgKi8KKwkJcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKKwkJZ290byBvdXQ7CisJY2FzZSAtRUFHQUlOOiAvKiBUcnkgbG9jayBmYWlscyAqLworCQlnb3RvIG91dDsKKwljYXNlIC1FSU5WQUw6IC8qIEludmFsaWQgKi8KKwljYXNlIC1FTk9NRU06IC8qIE91dCBvZiBtZW1vcnkgKi8KKwkJcmV0IHw9IExNX09VVF9FUlJPUjsKKwkJZ290byBvdXQ7CisJY2FzZSAwOiAvKiBTdWNjZXNzICovCisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIFNvbWV0aGluZyB1bmV4cGVjdGVkICovCisJCUJVRygpOworCX0KKworCXJldCA9IGdsLT5nbF9yZXE7CisJaWYgKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9BTFRNT0RFKSB7CisJCWlmIChnbC0+Z2xfcmVxID09IExNX1NUX1NIQVJFRCkKKwkJCXJldCA9IExNX1NUX0RFRkVSUkVEOworCQllbHNlIGlmIChnbC0+Z2xfcmVxID09IExNX1NUX0RFRkVSUkVEKQorCQkJcmV0ID0gTE1fU1RfU0hBUkVEOworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlzZXRfYml0KEdMRl9JTklUSUFMLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnZnMyX2dsb2NrX2NvbXBsZXRlKGdsLCByZXQpOworCXJldHVybjsKK291dDoKKwlpZiAoIXRlc3RfYml0KEdMRl9JTklUSUFMLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9IDA7CisJZ2ZzMl9nbG9ja19jb21wbGV0ZShnbCwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgZ2RsbV9iYXN0KHZvaWQgKmFyZywgaW50IG1vZGUpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gYXJnOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBETE1fTE9DS19FWDoKKwkJZ2ZzMl9nbG9ja19jYihnbCwgTE1fU1RfVU5MT0NLRUQpOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX0NXOgorCQlnZnMyX2dsb2NrX2NiKGdsLCBMTV9TVF9ERUZFUlJFRCk7CisJCWJyZWFrOworCWNhc2UgRExNX0xPQ0tfUFI6CisJCWdmczJfZ2xvY2tfY2IoZ2wsIExNX1NUX1NIQVJFRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBiYXN0IG1vZGUgJWQiLCBtb2RlKTsKKwkJQlVHKCk7CisJfQorfQorCisvKiBjb252ZXJ0IGdmcyBsb2NrLXN0YXRlIHRvIGRsbSBsb2NrLW1vZGUgKi8KKworc3RhdGljIGludCBtYWtlX21vZGUoY29uc3QgdW5zaWduZWQgaW50IGxtc3RhdGUpCit7CisJc3dpdGNoIChsbXN0YXRlKSB7CisJY2FzZSBMTV9TVF9VTkxPQ0tFRDoKKwkJcmV0dXJuIERMTV9MT0NLX05MOworCWNhc2UgTE1fU1RfRVhDTFVTSVZFOgorCQlyZXR1cm4gRExNX0xPQ0tfRVg7CisJY2FzZSBMTV9TVF9ERUZFUlJFRDoKKwkJcmV0dXJuIERMTV9MT0NLX0NXOworCWNhc2UgTE1fU1RfU0hBUkVEOgorCQlyZXR1cm4gRExNX0xPQ0tfUFI7CisJfQorCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBMTSBzdGF0ZSAlZCIsIGxtc3RhdGUpOworCUJVRygpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHUzMiBtYWtlX2ZsYWdzKGNvbnN0IHUzMiBsa2lkLCBjb25zdCB1bnNpZ25lZCBpbnQgZ2ZzX2ZsYWdzLAorCQkgICAgICBjb25zdCBpbnQgcmVxKQoreworCXUzMiBsa2YgPSAwOworCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZKQorCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOworCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZXzFDQikgeworCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOworCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFQkFTVDsKKwl9CisKKwlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19QUklPUklUWSkgeworCQlsa2YgfD0gRExNX0xLRl9OT09SREVSOworCQlsa2YgfD0gRExNX0xLRl9IRUFEUVVFOworCX0KKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX0FOWSkgeworCQlpZiAocmVxID09IERMTV9MT0NLX1BSKQorCQkJbGtmIHw9IERMTV9MS0ZfQUxUQ1c7CisJCWVsc2UgaWYgKHJlcSA9PSBETE1fTE9DS19DVykKKwkJCWxrZiB8PSBETE1fTEtGX0FMVFBSOworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlpZiAobGtpZCAhPSAwKSAKKwkJbGtmIHw9IERMTV9MS0ZfQ09OVkVSVDsKKworCWxrZiB8PSBETE1fTEtGX1ZBTEJMSzsKKworCXJldHVybiBsa2Y7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisJaW50IHJlcTsKKwl1MzIgbGtmOworCisJZ2wtPmdsX3JlcSA9IHJlcV9zdGF0ZTsKKwlyZXEgPSBtYWtlX21vZGUocmVxX3N0YXRlKTsKKwlsa2YgPSBtYWtlX2ZsYWdzKGdsLT5nbF9sa3NiLnNiX2xraWQsIGZsYWdzLCByZXEpOworCisJLyoKKwkgKiBTdWJtaXQgdGhlIGFjdHVhbCBsb2NrIHJlcXVlc3QuCisJICovCisKKwllcnJvciA9IGRsbV9sb2NrKGxzLT5sc19kbG0sIHJlcSwgJmdsLT5nbF9sa3NiLCBsa2YsIGdsLT5nbF9zdHJuYW1lLAorCQkJIEdETE1fU1RSTkFNRV9CWVRFUyAtIDEsIDAsIGdkbG1fYXN0LCBnbCwgZ2RsbV9iYXN0KTsKKwlpZiAoZXJyb3IgPT0gLUVBR0FJTikKKwkJcmV0dXJuIDA7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gTE1fT1VUX0VSUk9SOworCXJldHVybiBMTV9PVVRfQVNZTkM7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fcHV0X2xvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IHB0cjsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9PSAwKSB7CisJCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdsKTsKKwkJcmV0dXJuOworCX0KKworCWVycm9yID0gZGxtX3VubG9jayhscy0+bHNfZGxtLCBnbC0+Z2xfbGtzYi5zYl9sa2lkLCBETE1fTEtGX1ZBTEJMSywKKwkJCSAgIE5VTEwsIGdsKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnZGxtX3VubG9jayAleCwlbGx4IGVycj0lZFxuIiwKKwkJICAgICAgIGdsLT5nbF9uYW1lLmxuX3R5cGUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWdsLT5nbF9uYW1lLmxuX251bWJlciwgZXJyb3IpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBnZGxtX2NhbmNlbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJZGxtX3VubG9jayhscy0+bHNfZGxtLCBnbC0+Z2xfbGtzYi5zYl9sa2lkLCBETE1fTEtGX0NBTkNFTCwgTlVMTCwgZ2wpOworfQorCitzdGF0aWMgaW50IGdkbG1fbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmZzbmFtZSkKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWludCBlcnJvcjsKKworCWlmIChmc25hbWUgPT0gTlVMTCkgeworCQlmc19pbmZvKHNkcCwgIm5vIGZzbmFtZSBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVycm9yID0gZGxtX25ld19sb2Nrc3BhY2UoZnNuYW1lLCBzdHJsZW4oZnNuYW1lKSwgJmxzLT5sc19kbG0sCisJCQkJICBETE1fTFNGTF9GUyB8IERMTV9MU0ZMX05FV0VYQ0wgfAorCQkJCSAgKGxzLT5sc19ub2RpciA/IERMTV9MU0ZMX05PRElSIDogMCksCisJCQkJICBHRExNX0xWQl9TSVpFKTsKKwlpZiAoZXJyb3IpCisJCXByaW50ayhLRVJOX0VSUiAiZGxtX25ld19sb2Nrc3BhY2UgZXJyb3IgJWQiLCBlcnJvcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCisJaWYgKGxzLT5sc19kbG0pIHsKKwkJZGxtX3JlbGVhc2VfbG9ja3NwYWNlKGxzLT5sc19kbG0sIDIpOworCQlscy0+bHNfZGxtID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGRsbV90b2tlbnMgPSB7CisJeyBPcHRfamlkLCAiamlkPSVkIn0sCisJeyBPcHRfaWQsICJpZD0lZCJ9LAorCXsgT3B0X2ZpcnN0LCAiZmlyc3Q9JWQifSwKKwl7IE9wdF9ub2RpciwgIm5vZGlyPSVkIn0sCisJeyBPcHRfZXJyLCBOVUxMIH0sCit9OworCitjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZnMyX2RsbV9vcHMgPSB7CisJLmxtX3Byb3RvX25hbWUgPSAibG9ja19kbG0iLAorCS5sbV9tb3VudCA9IGdkbG1fbW91bnQsCisJLmxtX3VubW91bnQgPSBnZGxtX3VubW91bnQsCisJLmxtX3B1dF9sb2NrID0gZ2RsbV9wdXRfbG9jaywKKwkubG1fbG9jayA9IGdkbG1fbG9jaywKKwkubG1fY2FuY2VsID0gZ2RsbV9jYW5jZWwsCisJLmxtX3Rva2VucyA9ICZkbG1fdG9rZW5zLAorfTsKKwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nLmMgYi9mcy9nZnMyL2xvY2tpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzMjQzYS4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgotCi1zdHJ1Y3QgbG1oX3dyYXBwZXIgewotCXN0cnVjdCBsaXN0X2hlYWQgbHdfbGlzdDsKLQljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbHdfb3BzOwotfTsKLQotc3RhdGljIGludCBub2xvY2tfbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaik7Ci0KLS8qIExpc3Qgb2YgcmVnaXN0ZXJlZCBsb3ctbGV2ZWwgbG9ja2luZyBwcm90b2NvbHMuICBBIGZpbGUgc3lzdGVtIHNlbGVjdHMgb25lCi0gICBvZiB0aGVtIGJ5IG5hbWUgYXQgbW91bnQgdGltZSwgZS5nLiBsb2NrX25vbG9jaywgbG9ja19kbG0uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0gewotCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKLQkubG1fbW91bnQgPSBub2xvY2tfbW91bnQsCi19OwotCi1zdGF0aWMgc3RydWN0IGxtaF93cmFwcGVyIG5vbG9ja19wcm90byAgPSB7Ci0JLmx3X2xpc3QgPSBMSVNUX0hFQURfSU5JVChub2xvY2tfcHJvdG8ubHdfbGlzdCksCi0JLmx3X29wcyA9ICZub2xvY2tfb3BzLAotfTsKLQotc3RhdGljIExJU1RfSEVBRChsbWhfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGxtaF9sb2NrKTsKLQotc3RhdGljIGludCBub2xvY2tfbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQljaGFyICpjOwotCXVuc2lnbmVkIGludCBqaWQ7Ci0KLQljID0gc3Ryc3RyKGhvc3RfZGF0YSwgImppZD0iKTsKLQlpZiAoIWMpCi0JCWppZCA9IDA7Ci0JZWxzZSB7Ci0JCWMgKz0gNDsKLQkJc3NjYW5mKGMsICIldSIsICZqaWQpOwotCX0KLQotCWxvY2tzdHJ1Y3QtPmxzX2ppZCA9IGppZDsKLQlsb2Nrc3RydWN0LT5sc19maXJzdCA9IDE7Ci0JbG9ja3N0cnVjdC0+bHNfbHZiX3NpemUgPSBtaW5fbHZiX3NpemU7Ci0JbG9ja3N0cnVjdC0+bHNfb3BzID0gJm5vbG9ja19vcHM7Ci0JbG9ja3N0cnVjdC0+bHNfZmxhZ3MgPSBMTV9MU0ZMQUdfTE9DQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX3JlZ2lzdGVyX2xvY2twcm90byAtIFJlZ2lzdGVyIGEgbG93LWxldmVsIGxvY2tpbmcgcHJvdG9jb2wKLSAqIEBwcm90bzogdGhlIHByb3RvY29sIGRlZmluaXRpb24KLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FWFhYIG9uIGZhaWx1cmUKLSAqLwotCi1pbnQgZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKQotewotCXN0cnVjdCBsbWhfd3JhcHBlciAqbHc7Ci0KLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGx3LCAmbG1oX2xpc3QsIGx3X2xpc3QpIHsKLQkJaWYgKCFzdHJjbXAobHctPmx3X29wcy0+bG1fcHJvdG9fbmFtZSwgcHJvdG8tPmxtX3Byb3RvX25hbWUpKSB7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IHByb3RvY29sICVzIGFscmVhZHkgZXhpc3RzXG4iLAotCQkJICAgICAgIHByb3RvLT5sbV9wcm90b19uYW1lKTsKLQkJCXJldHVybiAtRUVYSVNUOwotCQl9Ci0JfQotCi0JbHcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG1oX3dyYXBwZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWx3KSB7Ci0JCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlsdy0+bHdfb3BzID0gcHJvdG87Ci0JbGlzdF9hZGQoJmx3LT5sd19saXN0LCAmbG1oX2xpc3QpOwotCi0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvIC0gVW5yZWdpc3RlciBhIGxvdy1sZXZlbCBsb2NraW5nIHByb3RvY29sCi0gKiBAcHJvdG86IHRoZSBwcm90b2NvbCBkZWZpbml0aW9uCi0gKgotICovCi0KLXZvaWQgZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pCi17Ci0Jc3RydWN0IGxtaF93cmFwcGVyICpsdzsKLQotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobHcsICZsbWhfbGlzdCwgbHdfbGlzdCkgewotCQlpZiAoIXN0cmNtcChsdy0+bHdfb3BzLT5sbV9wcm90b19uYW1lLCBwcm90by0+bG1fcHJvdG9fbmFtZSkpIHsKLQkJCWxpc3RfZGVsKCZsdy0+bHdfbGlzdCk7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCWtmcmVlKGx3KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogY2FuJ3QgdW5yZWdpc3RlciBsb2NrIHByb3RvY29sICVzXG4iLAotCSAgICAgICBwcm90by0+bG1fcHJvdG9fbmFtZSk7Ci19Ci0KLS8qKgotICogZ2ZzMl9tb3VudF9sb2NrcHJvdG8gLSBNb3VudCBhIGxvY2sgcHJvdG9jb2wKLSAqIEBwcm90b19uYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHByb3RvY29sCi0gKiBAdGFibGVfbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBsb2NrIHNwYWNlCi0gKiBAaG9zdF9kYXRhIC0gZGF0YSBzcGVjaWZpYyB0byB0aGlzIGhvc3QKLSAqIEBjYiAtIHRoZSBjYWxsYmFjayB0byB0aGUgY29kZSB1c2luZyB0aGUgbG9jayBtb2R1bGUKLSAqIEBzZHAgLSBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAbWluX2x2Yl9zaXplIC0gdGhlIG1pbmludW0gTFZCIHNpemUgdGhhdCB0aGUgY2FsbGVyIGNhbiBkZWFsIHdpdGgKLSAqIEBmbGFncyAtIExNX01GTEFHXyoKLSAqIEBsb2Nrc3RydWN0IC0gYSBzdHJ1Y3R1cmUgcmV0dXJuZWQgZGVzY3JpYmluZyB0aGUgbW91bnQKLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FWFhYIG9uIGZhaWx1cmUKLSAqLwotCi1pbnQgZ2ZzMl9tb3VudF9sb2NrcHJvdG8oY2hhciAqcHJvdG9fbmFtZSwgY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJIGxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQkgdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJIHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0Jc3RydWN0IGxtaF93cmFwcGVyICpsdyA9IE5VTEw7Ci0JaW50IHRyeSA9IDA7Ci0JaW50IGVycm9yLCBmb3VuZDsKLQotCi1yZXRyeToKLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmbm9sb2NrX3Byb3RvLmx3X2xpc3QpKQotCQlsaXN0X2FkZCgmbm9sb2NrX3Byb3RvLmx3X2xpc3QsICZsbWhfbGlzdCk7Ci0KLQlmb3VuZCA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShsdywgJmxtaF9saXN0LCBsd19saXN0KSB7Ci0JCWlmICghc3RyY21wKGx3LT5sd19vcHMtPmxtX3Byb3RvX25hbWUsIHByb3RvX25hbWUpKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpIHsKLQkJaWYgKCF0cnkgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKLQkJCXRyeSA9IDE7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCXJlcXVlc3RfbW9kdWxlKHByb3RvX25hbWUpOwotCQkJZ290byByZXRyeTsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBjYW4ndCBmaW5kIHByb3RvY29sICVzXG4iLCBwcm90b19uYW1lKTsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobHctPmx3X29wcy0+bG1fb3duZXIgJiYKLQkgICAgIXRyeV9tb2R1bGVfZ2V0KGx3LT5sd19vcHMtPmxtX293bmVyKSkgewotCQl0cnkgPSAwOwotCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJbXNsZWVwKDEwMDApOwotCQlnb3RvIHJldHJ5OwotCX0KLQotCWVycm9yID0gbHctPmx3X29wcy0+bG1fbW91bnQodGFibGVfbmFtZSwgaG9zdF9kYXRhLCBjYiwgY2JfZGF0YSwKLQkJCQkgICAgIG1pbl9sdmJfc2l6ZSwgZmxhZ3MsIGxvY2tzdHJ1Y3QsIGZza29iaik7Ci0JaWYgKGVycm9yKQotCQltb2R1bGVfcHV0KGx3LT5sd19vcHMtPmxtX293bmVyKTsKLW91dDoKLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2ZzMl91bm1vdW50X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCkKLXsKLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fdW5tb3VudCkKLQkJbG9ja3N0cnVjdC0+bHNfb3BzLT5sbV91bm1vdW50KGxvY2tzdHJ1Y3QtPmxzX2xvY2tzcGFjZSk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpCi0JCW1vZHVsZV9wdXQobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcik7Ci0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci19Ci0KLS8qKgotICogZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8gLSBhYm5vcm1hbGx5IHVubW91bnQgYSBsb2NrIG1vZHVsZQotICogQGxvY2tzdHJ1Y3Q6IHRoZSBsb2Nrc3RydWN0IHBhc3NlZCBpbnRvIG1vdW50Ci0gKgotICovCi0KLXZvaWQgZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpCi17Ci0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCWxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fd2l0aGRyYXcobG9ja3N0cnVjdC0+bHNfbG9ja3NwYWNlKTsKLQlpZiAobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcikKLQkJbW9kdWxlX3B1dChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX293bmVyKTsKLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8pOwotRVhQT1JUX1NZTUJPTF9HUEwoZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byk7Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vTWFrZWZpbGUgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA5YmI2Li4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NrX2RsbS5vCi1sb2NrX2RsbS15IDo9IGxvY2subyBtYWluLm8gbW91bnQubyBzeXNmcy5vIHRocmVhZC5vCi0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9jay5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODJjOTAuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBjaGFyIGp1bmtfbHZiW0dETE1fTFZCX1NJWkVdOwotCi0KLS8qIGNvbnZlcnQgZGxtIGxvY2stbW9kZSB0byBnZnMgbG9jay1zdGF0ZSAqLwotCi1zdGF0aWMgczE2IGdkbG1fbWFrZV9sbXN0YXRlKHMxNiBkbG1tb2RlKQotewotCXN3aXRjaCAoZGxtbW9kZSkgewotCWNhc2UgRExNX0xPQ0tfSVY6Ci0JY2FzZSBETE1fTE9DS19OTDoKLQkJcmV0dXJuIExNX1NUX1VOTE9DS0VEOwotCWNhc2UgRExNX0xPQ0tfRVg6Ci0JCXJldHVybiBMTV9TVF9FWENMVVNJVkU7Ci0JY2FzZSBETE1fTE9DS19DVzoKLQkJcmV0dXJuIExNX1NUX0RFRkVSUkVEOwotCWNhc2UgRExNX0xPQ0tfUFI6Ci0JCXJldHVybiBMTV9TVF9TSEFSRUQ7Ci0JfQotCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIERMTSBtb2RlICVkIiwgZGxtbW9kZSk7Ci0JcmV0dXJuIC0xOwotfQotCi0vKiBBIGxvY2sgcGxhY2VkIG9uIHRoaXMgcXVldWUgaXMgcmUtc3VibWl0dGVkIHRvIERMTSBhcyBzb29uIGFzIHRoZSBsb2NrX2RsbQotICAgdGhyZWFkIGdldHMgdG8gaXQuICovCi0KLXN0YXRpYyB2b2lkIHF1ZXVlX3N1Ym1pdChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZscC0+ZGVsYXlfbGlzdCwgJmxzLT5zdWJtaXQpOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0Jd2FrZV91cCgmbHMtPnRocmVhZF93YWl0KTsKLX0KLQotc3RhdGljIHZvaWQgd2FrZV91cF9hc3Qoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0JY2xlYXJfYml0KExGTF9BU1RfV0FJVCwgJmxwLT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQl3YWtlX3VwX2JpdCgmbHAtPmZsYWdzLCBMRkxfQVNUX1dBSVQpOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX2RlbGV0ZV9scChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmxwLT5kZWxheV9saXN0KSkKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCWxzLT5hbGxfbG9ja3NfY291bnQtLTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0Ja2ZyZWUobHApOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX3F1ZXVlX2RlbGF5ZWQoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmbHAtPmRlbGF5X2xpc3QsICZscy0+ZGVsYXllZCk7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19jb21wbGV0ZShzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0Jc3RydWN0IGxtX2FzeW5jX2NiIGFjYjsKLQotCW1lbXNldCgmYWNiLCAwLCBzaXplb2YoYWNiKSk7Ci0KLQlpZiAobHAtPmxrc2Iuc2Jfc3RhdHVzID09IC1ETE1fRUNBTkNFTCkgewotCQlsb2dfaW5mbygiY29tcGxldGUgZGxtIGNhbmNlbCAleCwlbGx4IGZsYWdzICVseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSBscC0+ZmxhZ3MpOwotCi0JCWxwLT5yZXEgPSBscC0+Y3VyOwotCQlhY2IubGNfcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKLQkJaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCQlscC0+bGtzYi5zYl9sa2lkID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfRExNX1VOTE9DSywgJmxwLT5mbGFncykpIHsKLQkJaWYgKGxwLT5sa3NiLnNiX3N0YXR1cyAhPSAtRExNX0VVTkxPQ0spIHsKLQkJCWxvZ19pbmZvKCJ1bmxvY2sgc2Jfc3RhdHVzICVkICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJCQkgbHAtPmxrc2Iuc2Jfc3RhdHVzLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJCSBscC0+ZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJbHAtPmN1ciA9IERMTV9MT0NLX0lWOwotCQlscC0+cmVxID0gRExNX0xPQ0tfSVY7Ci0JCWxwLT5sa3NiLnNiX2xraWQgPSAwOwotCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX1VOTE9DS19ERUxFVEUsICZscC0+ZmxhZ3MpKSB7Ci0JCQlnZGxtX2RlbGV0ZV9scChscCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9WQUxOT1RWQUxJRCkKLQkJbWVtc2V0KGxwLT5sa3NiLnNiX2x2YnB0ciwgMCwgR0RMTV9MVkJfU0laRSk7Ci0KLQlpZiAobHAtPmxrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX0FMVE1PREUpIHsKLQkJaWYgKGxwLT5yZXEgPT0gRExNX0xPQ0tfUFIpCi0JCQlscC0+cmVxID0gRExNX0xPQ0tfQ1c7Ci0JCWVsc2UgaWYgKGxwLT5yZXEgPT0gRExNX0xPQ0tfQ1cpCi0JCQlscC0+cmVxID0gRExNX0xPQ0tfUFI7Ci0JfQotCi0JLyoKLQkgKiBBIGNhbmNlbGVkIGxvY2sgcmVxdWVzdC4gIFRoZSBsb2NrIHdhcyBqdXN0IHRha2VuIG9mZiB0aGUgZGVsYXllZAotCSAqIGxpc3QgYW5kIHdhcyBuZXZlciBldmVuIHN1Ym1pdHRlZCB0byBkbG0uCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9DQU5DRUwsICZscC0+ZmxhZ3MpKSB7Ci0JCWxvZ19pbmZvKCJjb21wbGV0ZSBpbnRlcm5hbCBjYW5jZWwgJXgsJWxseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JCWxwLT5yZXEgPSBscC0+Y3VyOwotCQlhY2IubGNfcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBBbiBlcnJvciBvY2N1cmVkLgotCSAqLwotCi0JaWYgKGxwLT5sa3NiLnNiX3N0YXR1cykgewotCQkvKiBhICJub3JtYWwiIGVycm9yICovCi0JCWlmICgobHAtPmxrc2Iuc2Jfc3RhdHVzID09IC1FQUdBSU4pICYmCi0JCSAgICAobHAtPmxrZiAmIERMTV9MS0ZfTk9RVUVVRSkpIHsKLQkJCWxwLT5yZXEgPSBscC0+Y3VyOwotCQkJaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCQkJbHAtPmxrc2Iuc2JfbGtpZCA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIHRoaXMgY291bGQgb25seSBoYXBwZW4gd2l0aCBjYW5jZWxzIEkgdGhpbmsgKi8KLQkJbG9nX2luZm8oImFzdCBzYl9zdGF0dXMgJWQgJXgsJWxseCBmbGFncyAlbHgiLAotCQkJIGxwLT5sa3NiLnNiX3N0YXR1cywgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJIGxwLT5mbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaXMgYW4gQVNUIGZvciBhbiBFWC0+RVggY29udmVyc2lvbiBmb3Igc3luY19sdmIgZnJvbSBHRlMuCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9TWU5DX0xWQiwgJmxwLT5mbGFncykpIHsKLQkJd2FrZV91cF9hc3QobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBIGxvY2sgaGFzIGJlZW4gZGVtb3RlZCB0byBOTCBiZWNhdXNlIGl0IGluaXRpYWxseSBjb21wbGV0ZWQgZHVyaW5nCi0JICogQkxPQ0tfTE9DS1MuICBOb3cgaXQgbXVzdCBiZSByZXF1ZXN0ZWQgaW4gdGhlIG9yaWdpbmFsbHkgcmVxdWVzdGVkCi0JICogbW9kZS4KLQkgKi8KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX1JFUkVRVUVTVCwgJmxwLT5mbGFncykpIHsKLQkJZ2RsbV9hc3NlcnQobHAtPnJlcSA9PSBETE1fTE9DS19OTCwgIiV4LCVsbHgiLAotCQkJICAgIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JCWdkbG1fYXNzZXJ0KGxwLT5wcmV2X3JlcSA+IERMTV9MT0NLX05MLCAiJXgsJWxseCIsCi0JCQkgICAgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQotCQlscC0+Y3VyID0gRExNX0xPQ0tfTkw7Ci0JCWxwLT5yZXEgPSBscC0+cHJldl9yZXE7Ci0JCWxwLT5wcmV2X3JlcSA9IERMTV9MT0NLX0lWOwotCQlscC0+bGtmICY9IH5ETE1fTEtGX0NPTlZERUFETEs7Ci0KLQkJc2V0X2JpdChMRkxfTk9DQUNIRSwgJmxwLT5mbGFncyk7Ci0KLQkJaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncykgJiYKLQkJICAgICF0ZXN0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncykpCi0JCQlnZGxtX3F1ZXVlX2RlbGF5ZWQobHApOwotCQllbHNlCi0JCQlxdWV1ZV9zdWJtaXQobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBIHJlcXVlc3QgaXMgZ3JhbnRlZCBkdXJpbmcgZGxtIHJlY292ZXJ5LiAgSXQgbWF5IGJlIGdyYW50ZWQKLQkgKiBiZWNhdXNlIHRoZSBsb2NrcyBvZiBhIGZhaWxlZCBub2RlIHdlcmUgY2xlYXJlZC4gIEluIHRoYXQgY2FzZSwKLQkgKiB0aGVyZSBtYXkgYmUgaW5jb25zaXN0ZW50IGRhdGEgYmVuZWF0aCB0aGlzIGxvY2sgYW5kIHdlIG11c3Qgd2FpdAotCSAqIGZvciByZWNvdmVyeSB0byBjb21wbGV0ZSB0byB1c2UgaXQuICBXaGVuIGdmcyByZWNvdmVyeSBpcyBkb25lIHRoaXMKLQkgKiBncmFudGVkIGxvY2sgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gTkwgYW5kIHRoZW4gcmVhY3F1aXJlZCBpbiB0aGlzCi0JICogZ3JhbnRlZCBzdGF0ZS4KLQkgKi8KLQotCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpICYmCi0JICAgICF0ZXN0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncykgJiYKLQkgICAgbHAtPnJlcSAhPSBETE1fTE9DS19OTCkgewotCi0JCWxwLT5jdXIgPSBscC0+cmVxOwotCQlscC0+cHJldl9yZXEgPSBscC0+cmVxOwotCQlscC0+cmVxID0gRExNX0xPQ0tfTkw7Ci0JCWxwLT5sa2YgfD0gRExNX0xLRl9DT05WRVJUOwotCQlscC0+bGtmICY9IH5ETE1fTEtGX0NPTlZERUFETEs7Ci0KLQkJbG9nX2RlYnVnKCJyZXJlcSAleCwlbGx4IGlkICV4ICVkLCVkIiwKLQkJCSAgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSAgbHAtPmxrc2Iuc2JfbGtpZCwgbHAtPmN1ciwgbHAtPnJlcSk7Ci0KLQkJc2V0X2JpdChMRkxfUkVSRVFVRVNULCAmbHAtPmZsYWdzKTsKLQkJcXVldWVfc3VibWl0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRExNIGRlbW90ZWQgdGhlIGxvY2sgdG8gTkwgYmVmb3JlIGl0IHdhcyBncmFudGVkIHNvIEdGUyBtdXN0IGJlCi0JICogdG9sZCBpdCBjYW5ub3QgY2FjaGUgZGF0YSBmb3IgdGhpcyBsb2NrLgotCSAqLwotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9ERU1PVEVEKQotCQlzZXRfYml0KExGTF9OT0NBQ0hFLCAmbHAtPmZsYWdzKTsKLQotb3V0OgotCS8qCi0JICogVGhpcyBpcyBhbiBpbnRlcm5hbCBsb2NrX2RsbSBsb2NrCi0JICovCi0KLQlpZiAodGVzdF9iaXQoTEZMX0lOTE9DSywgJmxwLT5mbGFncykpIHsKLQkJY2xlYXJfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKTsKLQkJbHAtPmN1ciA9IGxwLT5yZXE7Ci0JCXdha2VfdXBfYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogTm9ybWFsIGNvbXBsZXRpb24gb2YgYSBsb2NrIHJlcXVlc3QuICBUZWxsIEdGUyBpdCBub3cgaGFzIHRoZSBsb2NrLgotCSAqLwotCi0JY2xlYXJfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKTsKLQlscC0+Y3VyID0gbHAtPnJlcTsKLQotCWFjYi5sY19uYW1lID0gbHAtPmxvY2tuYW1lOwotCWFjYi5sY19yZXQgfD0gZ2RsbV9tYWtlX2xtc3RhdGUobHAtPmN1cik7Ci0KLQlscy0+ZnNjYihscy0+c2RwLCBMTV9DQl9BU1lOQywgJmFjYik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fYXN0KHZvaWQgKmFzdGFyZykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGFzdGFyZzsKLQljbGVhcl9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0JcHJvY2Vzc19jb21wbGV0ZShscCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfYmxvY2tpbmcoc3RydWN0IGdkbG1fbG9jayAqbHAsIGludCBiYXN0X21vZGUpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCXVuc2lnbmVkIGludCBjYiA9IDA7Ci0KLQlzd2l0Y2ggKGdkbG1fbWFrZV9sbXN0YXRlKGJhc3RfbW9kZSkpIHsKLQljYXNlIExNX1NUX0VYQ0xVU0lWRToKLQkJY2IgPSBMTV9DQl9ORUVEX0U7Ci0JCWJyZWFrOwotCWNhc2UgTE1fU1RfREVGRVJSRUQ6Ci0JCWNiID0gTE1fQ0JfTkVFRF9EOwotCQlicmVhazsKLQljYXNlIExNX1NUX1NIQVJFRDoKLQkJY2IgPSBMTV9DQl9ORUVEX1M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIGJhc3QgbW9kZSAldSIsIGJhc3RfbW9kZSk7Ci0JfQotCi0JbHMtPmZzY2IobHMtPnNkcCwgY2IsICZscC0+bG9ja25hbWUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGdkbG1fYmFzdCh2b2lkICphc3RhcmcsIGludCBtb2RlKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gYXN0YXJnOwotCi0JaWYgKCFtb2RlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBiYXN0IG1vZGUgemVybyAleCwlbGx4XG4iLAotCQkJbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJvY2Vzc19ibG9ja2luZyhscCwgbW9kZSk7Ci19Ci0KLS8qIGNvbnZlcnQgZ2ZzIGxvY2stc3RhdGUgdG8gZGxtIGxvY2stbW9kZSAqLwotCi1zdGF0aWMgczE2IG1ha2VfbW9kZShzMTYgbG1zdGF0ZSkKLXsKLQlzd2l0Y2ggKGxtc3RhdGUpIHsKLQljYXNlIExNX1NUX1VOTE9DS0VEOgotCQlyZXR1cm4gRExNX0xPQ0tfTkw7Ci0JY2FzZSBMTV9TVF9FWENMVVNJVkU6Ci0JCXJldHVybiBETE1fTE9DS19FWDsKLQljYXNlIExNX1NUX0RFRkVSUkVEOgotCQlyZXR1cm4gRExNX0xPQ0tfQ1c7Ci0JY2FzZSBMTV9TVF9TSEFSRUQ6Ci0JCXJldHVybiBETE1fTE9DS19QUjsKLQl9Ci0JZ2RsbV9hc3NlcnQoMCwgInVua25vd24gTE0gc3RhdGUgJWQiLCBsbXN0YXRlKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLQotLyogdmVyaWZ5IGFncmVlbWVudCB3aXRoIEdGUyBvbiB0aGUgY3VycmVudCBsb2NrIHN0YXRlLCBOQjogRExNX0xPQ0tfTkwgYW5kCi0gICBETE1fTE9DS19JViBhcmUgYm90aCBjb25zaWRlcmVkIExNX1NUX1VOTE9DS0VEIGJ5IEdGUy4gKi8KLQotc3RhdGljIHZvaWQgY2hlY2tfY3VyX3N0YXRlKHN0cnVjdCBnZGxtX2xvY2sgKmxwLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKQotewotCXMxNiBjdXIgPSBtYWtlX21vZGUoY3VyX3N0YXRlKTsKLQlpZiAobHAtPmN1ciAhPSBETE1fTE9DS19JVikKLQkJZ2RsbV9hc3NlcnQobHAtPmN1ciA9PSBjdXIsICIlZCwgJWQiLCBscC0+Y3VyLCBjdXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYWtlX2ZsYWdzKHN0cnVjdCBnZGxtX2xvY2sgKmxwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBnZnNfZmxhZ3MsCi0JCQkJICAgICAgczE2IGN1ciwgczE2IHJlcSkKLXsKLQl1bnNpZ25lZCBpbnQgbGtmID0gMDsKLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWSkKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWV8xQ0IpIHsKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRUJBU1Q7Ci0JfQotCi0JaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfUFJJT1JJVFkpIHsKLQkJbGtmIHw9IERMTV9MS0ZfTk9PUkRFUjsKLQkJbGtmIHw9IERMTV9MS0ZfSEVBRFFVRTsKLQl9Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19BTlkpIHsKLQkJaWYgKHJlcSA9PSBETE1fTE9DS19QUikKLQkJCWxrZiB8PSBETE1fTEtGX0FMVENXOwotCQllbHNlIGlmIChyZXEgPT0gRExNX0xPQ0tfQ1cpCi0JCQlsa2YgfD0gRExNX0xLRl9BTFRQUjsKLQl9Ci0KLQlpZiAobHAtPmxrc2Iuc2JfbGtpZCAhPSAwKSB7Ci0JCWxrZiB8PSBETE1fTEtGX0NPTlZFUlQ7Ci0JfQotCi0JaWYgKGxwLT5sdmIpCi0JCWxrZiB8PSBETE1fTEtGX1ZBTEJMSzsKLQotCXJldHVybiBsa2Y7Ci19Ci0KLS8qIG1ha2Vfc3RybmFtZSAtIGNvbnZlcnQgR0ZTIGxvY2sgbnVtYmVycyB0byBhIHN0cmluZyAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9zdHJuYW1lKGNvbnN0IHN0cnVjdCBsbV9sb2NrbmFtZSAqbG9ja25hbWUsCi0JCQkJc3RydWN0IGdkbG1fc3RybmFtZSAqc3RyKQotewotCXNwcmludGYoc3RyLT5uYW1lLCAiJTh4JTE2bGx4IiwgbG9ja25hbWUtPmxuX3R5cGUsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpbG9ja25hbWUtPmxuX251bWJlcik7Ci0Jc3RyLT5uYW1lbGVuID0gR0RMTV9TVFJOQU1FX0JZVEVTOwotfQotCi1zdGF0aWMgaW50IGdkbG1fY3JlYXRlX2xwKHN0cnVjdCBnZGxtX2xzICpscywgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJICBzdHJ1Y3QgZ2RsbV9sb2NrICoqbHBwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwOwotCi0JbHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2RsbV9sb2NrKSwgR0ZQX05PRlMpOwotCWlmICghbHApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHAtPmxvY2tuYW1lID0gKm5hbWU7Ci0JbWFrZV9zdHJuYW1lKG5hbWUsICZscC0+c3RybmFtZSk7Ci0JbHAtPmxzID0gbHM7Ci0JbHAtPmN1ciA9IERMTV9MT0NLX0lWOwotCUlOSVRfTElTVF9IRUFEKCZscC0+ZGVsYXlfbGlzdCk7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlscy0+YWxsX2xvY2tzX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCSpscHAgPSBscDsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGdkbG1fZ2V0X2xvY2sodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgdm9pZCAqKmxvY2twKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2RsbV9jcmVhdGVfbHAobG9ja3NwYWNlLCBuYW1lLCAmbHApOwotCi0JKmxvY2twID0gbHA7Ci0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fcHV0X2xvY2sodm9pZCAqbG9jaykKLXsKLQlnZGxtX2RlbGV0ZV9scChsb2NrKTsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fZG9fbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JaW50IGVycm9yLCBiYXN0ID0gMTsKLQotCS8qCi0JICogV2hlbiByZWNvdmVyeSBpcyBpbiBwcm9ncmVzcywgZGVsYXkgbG9jayByZXF1ZXN0cyBmb3Igc3VibWlzc2lvbgotCSAqIG9uY2UgcmVjb3ZlcnkgaXMgZG9uZS4gIFJlcXVlc3RzIGZvciByZWNvdmVyeSAoTk9FWFApIGFuZCB1bmxvY2tzCi0JICogY2FuIHBhc3MuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpICYmIGxwLT5yZXEgIT0gRExNX0xPQ0tfTkwpIHsKLQkJZ2RsbV9xdWV1ZV9kZWxheWVkKGxwKTsKLQkJcmV0dXJuIExNX09VVF9BU1lOQzsKLQl9Ci0KLQkvKgotCSAqIFN1Ym1pdCB0aGUgYWN0dWFsIGxvY2sgcmVxdWVzdC4KLQkgKi8KLQotCWlmICh0ZXN0X2JpdChMRkxfTk9CQVNULCAmbHAtPmZsYWdzKSkKLQkJYmFzdCA9IDA7Ci0KLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JbG9nX2RlYnVnKCJsayAleCwlbGx4IGlkICV4ICVkLCVkICV4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+bGtzYi5zYl9sa2lkLAotCQkgIGxwLT5jdXIsIGxwLT5yZXEsIGxwLT5sa2YpOwotCi0JZXJyb3IgPSBkbG1fbG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbHAtPnJlcSwgJmxwLT5sa3NiLCBscC0+bGtmLAotCQkJIGxwLT5zdHJuYW1lLm5hbWUsIGxwLT5zdHJuYW1lLm5hbWVsZW4sIDAsIGdkbG1fYXN0LAotCQkJIGxwLCBiYXN0ID8gZ2RsbV9iYXN0IDogTlVMTCk7Ci0KLQlpZiAoKGVycm9yID09IC1FQUdBSU4pICYmIChscC0+bGtmICYgRExNX0xLRl9OT1FVRVVFKSkgewotCQlscC0+bGtzYi5zYl9zdGF0dXMgPSAtRUFHQUlOOwotCQlnZGxtX2FzdChscCk7Ci0JCWVycm9yID0gMDsKLQl9Ci0KLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCIlczogZ2RsbV9sb2NrICV4LCVsbHggZXJyPSVkIGN1cj0lZCByZXE9JWQgbGtmPSV4ICIKLQkJCSAgImZsYWdzPSVseCIsIGxzLT5mc25hbWUsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGVycm9yLAotCQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm4gTE1fT1VUX0VSUk9SOwotCX0KLQlyZXR1cm4gTE1fT1VUX0FTWU5DOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdkbG1fZG9fdW5sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQl1bnNpZ25lZCBpbnQgbGtmID0gMDsKLQlpbnQgZXJyb3I7Ci0KLQlzZXRfYml0KExGTF9ETE1fVU5MT0NLLCAmbHAtPmZsYWdzKTsKLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JaWYgKGxwLT5sdmIpCi0JCWxrZiA9IERMTV9MS0ZfVkFMQkxLOwotCi0JbG9nX2RlYnVnKCJ1biAleCwlbGx4ICV4ICVkICV4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkgIGxwLT5sa3NiLnNiX2xraWQsIGxwLT5jdXIsIGxrZik7Ci0KLQllcnJvciA9IGRsbV91bmxvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIGxwLT5sa3NiLnNiX2xraWQsIGxrZiwgTlVMTCwgbHApOwotCi0JaWYgKGVycm9yKSB7Ci0JCWxvZ19lcnJvcigiJXM6IGdkbG1fdW5sb2NrICV4LCVsbHggZXJyPSVkIGN1cj0lZCByZXE9JWQgbGtmPSV4ICIKLQkJCSAgImZsYWdzPSVseCIsIGxzLT5mc25hbWUsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGVycm9yLAotCQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm4gTE1fT1VUX0VSUk9SOwotCX0KLQlyZXR1cm4gTE1fT1VUX0FTWU5DOwotfQotCi11bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JaWYgKHJlcV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCkKLQkJcmV0dXJuIGdkbG1fdW5sb2NrKGxvY2ssIGN1cl9zdGF0ZSk7Ci0KLQlpZiAocmVxX3N0YXRlID09IExNX1NUX1VOTE9DS0VEKQotCQlyZXR1cm4gZ2RsbV91bmxvY2sobG9jaywgY3VyX3N0YXRlKTsKLQotCWNsZWFyX2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JaWYgKGZsYWdzICYgTE1fRkxBR19OT0VYUCkKLQkJc2V0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncyk7Ci0KLQljaGVja19jdXJfc3RhdGUobHAsIGN1cl9zdGF0ZSk7Ci0JbHAtPnJlcSA9IG1ha2VfbW9kZShyZXFfc3RhdGUpOwotCWxwLT5sa2YgPSBtYWtlX2ZsYWdzKGxwLCBmbGFncywgbHAtPmN1ciwgbHAtPnJlcSk7Ci0KLQlyZXR1cm4gZ2RsbV9kb19sb2NrKGxwKTsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fdW5sb2NrKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JY2xlYXJfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQlpZiAobHAtPmN1ciA9PSBETE1fTE9DS19JVikKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGdkbG1fZG9fdW5sb2NrKGxwKTsKLX0KLQotdm9pZCBnZGxtX2NhbmNlbCh2b2lkICpsb2NrKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JaW50IGVycm9yLCBkZWxheV9saXN0ID0gMDsKLQotCWlmICh0ZXN0X2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncykpCi0JCXJldHVybjsKLQotCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCAleCwlbGx4IGZsYWdzICVseCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZscC0+ZGVsYXlfbGlzdCkpIHsKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCQlkZWxheV9saXN0ID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCWlmIChkZWxheV9saXN0KSB7Ci0JCXNldF9iaXQoTEZMX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JCXNldF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0JCWdkbG1fYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghdGVzdF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoTEZMX0RMTV9VTkxPQ0ssICZscC0+ZmxhZ3MpKSB7Ci0JCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCBza2lwICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJIAkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogdGhlIGxvY2sgaXMgYmxvY2tlZCBpbiB0aGUgZGxtICovCi0KLQlzZXRfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JZXJyb3IgPSBkbG1fdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBscC0+bGtzYi5zYl9sa2lkLCBETE1fTEtGX0NBTkNFTCwKLQkJCSAgIE5VTEwsIGxwKTsKLQotCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCBydiAlZCAleCwlbGx4IGZsYWdzICVseCIsIGVycm9yLAotCQkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGxwLT5mbGFncyk7Ci0KLQlpZiAoZXJyb3IgPT0gLUVCVVNZKQotCQljbGVhcl9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGdkbG1fYWRkX2x2YihzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQljaGFyICpsdmI7Ci0KLQlsdmIgPSBremFsbG9jKEdETE1fTFZCX1NJWkUsIEdGUF9OT0ZTKTsKLQlpZiAoIWx2YikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlscC0+bGtzYi5zYl9sdmJwdHIgPSBsdmI7Ci0JbHAtPmx2YiA9IGx2YjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9kZWxfbHZiKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCWtmcmVlKGxwLT5sdmIpOwotCWxwLT5sdmIgPSBOVUxMOwotCWxwLT5sa3NiLnNiX2x2YnB0ciA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9hc3Rfd2FpdCh2b2lkICp3b3JkKQotewotCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgY2FuIGRvIGEgc3luY2hyb25vdXMgZGxtIHJlcXVlc3QgKHJlcXVpcmluZyBhIGxvY2tfZGxtIHRocmVhZCB0byBnZXQKLSAgIHRoZSBjb21wbGV0aW9uKSBiZWNhdXNlIGdmcyB3b24ndCBjYWxsIGhvbGRfbHZiKCkgZHVyaW5nIGEgY2FsbGJhY2sgKGZyb20KLSAgIHRoZSBjb250ZXh0IG9mIGEgbG9ja19kbG0gdGhyZWFkKS4gKi8KLQotc3RhdGljIGludCBob2xkX251bGxfbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscG4gPSBOVUxMOwotCWludCBlcnJvcjsKLQotCWlmIChscC0+aG9sZF9udWxsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBsdmIgYWxyZWFkeSBoZWxkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZXJyb3IgPSBnZGxtX2NyZWF0ZV9scChscC0+bHMsICZscC0+bG9ja25hbWUsICZscG4pOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQlscG4tPmxrc2Iuc2JfbHZicHRyID0ganVua19sdmI7Ci0JbHBuLT5sdmIgPSBqdW5rX2x2YjsKLQotCWxwbi0+cmVxID0gRExNX0xPQ0tfTkw7Ci0JbHBuLT5sa2YgPSBETE1fTEtGX1ZBTEJMSyB8IERMTV9MS0ZfRVhQRURJVEU7Ci0Jc2V0X2JpdChMRkxfTk9CQVNULCAmbHBuLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfSU5MT0NLLCAmbHBuLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfQVNUX1dBSVQsICZscG4tPmZsYWdzKTsKLQotCWdkbG1fZG9fbG9jayhscG4pOwotCXdhaXRfb25fYml0KCZscG4tPmZsYWdzLCBMRkxfQVNUX1dBSVQsIGdkbG1fYXN0X3dhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQllcnJvciA9IGxwbi0+bGtzYi5zYl9zdGF0dXM7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBob2xkX251bGxfbG9jayBkbG0gZXJyb3IgJWRcbiIsCi0JCSAgICAgICBlcnJvcik7Ci0JCWdkbG1fZGVsZXRlX2xwKGxwbik7Ci0JCWxwbiA9IE5VTEw7Ci0JfQotb3V0OgotCWxwLT5ob2xkX251bGwgPSBscG47Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBUaGlzIGNhbm5vdCBkbyBhIHN5bmNocm9ub3VzIGRsbSByZXF1ZXN0IChyZXF1aXJpbmcgYSBsb2NrX2RsbSB0aHJlYWQgdG8gZ2V0Ci0gICB0aGUgY29tcGxldGlvbikgYmVjYXVzZSBnZnMgbWF5IGNhbGwgdW5ob2xkX2x2YigpIGR1cmluZyBhIGNhbGxiYWNrIChmcm9tCi0gICB0aGUgY29udGV4dCBvZiBhIGxvY2tfZGxtIHRocmVhZCkgd2hpY2ggY291bGQgY2F1c2UgYSBkZWFkbG9jayBzaW5jZSB0aGUKLSAgIG90aGVyIGxvY2tfZGxtIHRocmVhZCBjb3VsZCBiZSBlbmdhZ2VkIGluIHJlY292ZXJ5LiAqLwotCi1zdGF0aWMgdm9pZCB1bmhvbGRfbnVsbF9sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwbiA9IGxwLT5ob2xkX251bGw7Ci0KLQlnZGxtX2Fzc2VydChscG4sICIleCwlbGx4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCWxwbi0+bGtzYi5zYl9sdmJwdHIgPSBOVUxMOwotCWxwbi0+bHZiID0gTlVMTDsKLQlzZXRfYml0KExGTF9VTkxPQ0tfREVMRVRFLCAmbHBuLT5mbGFncyk7Ci0JZ2RsbV9kb191bmxvY2sobHBuKTsKLQlscC0+aG9sZF9udWxsID0gTlVMTDsKLX0KLQotLyogQWNxdWlyZSBhIE5MIGxvY2sgYmVjYXVzZSBnZnMgcmVxdWlyZXMgdGhlIHZhbHVlIGJsb2NrIHRvIHJlbWFpbgotICAgaW50YWN0IG9uIHRoZSByZXNvdXJjZSB3aGlsZSB0aGUgbHZiIGlzICJoZWxkIiBldmVuIGlmIGl0J3MgaG9sZGluZyBubyBsb2NrcwotICAgb24gdGhlIHJlc291cmNlLiAqLwotCi1pbnQgZ2RsbV9ob2xkX2x2Yih2b2lkICpsb2NrLCBjaGFyICoqbHZicCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZGxtX2FkZF9sdmIobHApOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JKmx2YnAgPSBscC0+bHZiOwotCi0JZXJyb3IgPSBob2xkX251bGxfbG9jayhscCk7Ci0JaWYgKGVycm9yKQotCQlnZGxtX2RlbF9sdmIobHApOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fdW5ob2xkX2x2Yih2b2lkICpsb2NrLCBjaGFyICpsdmIpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JdW5ob2xkX251bGxfbG9jayhscCk7Ci0JZ2RsbV9kZWxfbHZiKGxwKTsKLX0KLQotdm9pZCBnZGxtX3N1Ym1pdF9kZWxheWVkKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCwgKnNhZmU7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHAsIHNhZmUsICZscy0+ZGVsYXllZCwgZGVsYXlfbGlzdCkgewotCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JCWxpc3RfYWRkX3RhaWwoJmxwLT5kZWxheV9saXN0LCAmbHMtPnN1Ym1pdCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0Jd2FrZV91cCgmbHMtPnRocmVhZF93YWl0KTsKLX0KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzk4ZTdjLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIExPQ0tfRExNX0RPVF9ICi0jZGVmaW5lIExPQ0tfRExNX0RPVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RsbV9wbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgotCi0vKgotICogSW50ZXJuYWxseSwgd2UgcHJlZml4IHRoaW5ncyB3aXRoIGdkbG1fIGFuZCBHRExNXyAoZm9yIGdmcy1kbG0pIHNpbmNlIGEKLSAqIHByZWZpeCBvZiBsb2NrX2RsbV8gZ2V0cyBhd2t3YXJkLiAgRXh0ZXJuYWxseSwgR0ZTIHJlZmVycyB0byB0aGlzIG1vZHVsZQotICogYXMgImxvY2tfZGxtIi4KLSAqLwotCi0jZGVmaW5lIEdETE1fU1RSTkFNRV9CWVRFUwkyNAotI2RlZmluZSBHRExNX0xWQl9TSVpFCQkzMgotI2RlZmluZSBHRExNX0RST1BfQ09VTlQJCTAKLSNkZWZpbmUgR0RMTV9EUk9QX1BFUklPRAk2MAotI2RlZmluZSBHRExNX05BTUVfTEVOCQkxMjgKLQotLyogR0ZTIHVzZXMgMTIgYnl0ZXMgdG8gaWRlbnRpZnkgYSByZXNvdXJjZSAoMzIgYml0IHR5cGUgKyA2NCBiaXQgbnVtYmVyKS4KLSAgIFdlIHNwcmludGYgdGhlc2UgbnVtYmVycyBpbnRvIGEgMjQgYnl0ZSBzdHJpbmcgb2YgaGV4IHZhbHVlcyB0byBtYWtlIHRoZW0KLSAgIGh1bWFuLXJlYWRhYmxlICh0byBtYWtlIGRlYnVnZ2luZyBzaW1wbGVyLikgKi8KLQotc3RydWN0IGdkbG1fc3RybmFtZSB7Ci0JdW5zaWduZWQgY2hhcgkJbmFtZVtHRExNX1NUUk5BTUVfQllURVNdOwotCXVuc2lnbmVkIHNob3J0CQluYW1lbGVuOwotfTsKLQotZW51bSB7Ci0JREZMX0JMT0NLX0xPQ0tTCQk9IDAsCi0JREZMX1NQRUNUQVRPUgkJPSAxLAotCURGTF9XSVRIRFJBVwkJPSAyLAotfTsKLQotc3RydWN0IGdkbG1fbHMgewotCXUzMgkJaWQ7Ci0JaW50CQkJamlkOwotCWludAkJCWZpcnN0OwotCWludAkJCWZpcnN0X2RvbmU7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0Jc3RydWN0IGtvYmplY3QJCWtvYmo7Ci0JY2hhcgkJCWNsdXN0ZXJuYW1lW0dETE1fTkFNRV9MRU5dOwotCWNoYXIJCQlmc25hbWVbR0RMTV9OQU1FX0xFTl07Ci0JaW50CQkJZnNmbGFnczsKLQlkbG1fbG9ja3NwYWNlX3QJCSpkbG1fbG9ja3NwYWNlOwotCWxtX2NhbGxiYWNrX3QJCWZzY2I7Ci0Jc3RydWN0IGdmczJfc2JkCQkqc2RwOwotCWludAkJCXJlY292ZXJfamlkOwotCWludAkJCXJlY292ZXJfamlkX2RvbmU7Ci0JaW50CQkJcmVjb3Zlcl9qaWRfc3RhdHVzOwotCXNwaW5sb2NrX3QJCWFzeW5jX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkZWxheWVkOwotCXN0cnVjdCBsaXN0X2hlYWQJc3VibWl0OwotCXUzMgkJYWxsX2xvY2tzX2NvdW50OwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY29udHJvbDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl0aHJlYWRfd2FpdDsKLX07Ci0KLWVudW0gewotCUxGTF9OT0JMT0NLCQk9IDAsCi0JTEZMX05PQ0FDSEUJCT0gMSwKLQlMRkxfRExNX1VOTE9DSwkJPSAyLAotCUxGTF9ETE1fQ0FOQ0VMCQk9IDMsCi0JTEZMX1NZTkNfTFZCCQk9IDQsCi0JTEZMX0ZPUkNFX1BST01PVEUJPSA1LAotCUxGTF9SRVJFUVVFU1QJCT0gNiwKLQlMRkxfQUNUSVZFCQk9IDcsCi0JTEZMX0lOTE9DSwkJPSA4LAotCUxGTF9DQU5DRUwJCT0gOSwKLQlMRkxfTk9CQVNUCQk9IDEwLAotCUxGTF9IRUFEUVVFCQk9IDExLAotCUxGTF9VTkxPQ0tfREVMRVRFCT0gMTIsCi0JTEZMX0FTVF9XQUlUCQk9IDEzLAotfTsKLQotc3RydWN0IGdkbG1fbG9jayB7Ci0Jc3RydWN0IGdkbG1fbHMJCSpsczsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUJbG9ja25hbWU7Ci0Jc3RydWN0IGdkbG1fc3RybmFtZQlzdHJuYW1lOwotCWNoYXIJCQkqbHZiOwotCXN0cnVjdCBkbG1fbGtzYgkJbGtzYjsKLQotCXMxNgkJCWN1cjsKLQlzMTYJCQlyZXE7Ci0JczE2CQkJcHJldl9yZXE7Ci0JdTMyCQkJbGtmOwkJLyogZGxtIGZsYWdzIERMTV9MS0ZfICovCi0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb2NrX2RsbSBmbGFncyBMRkxfICovCi0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWRlbGF5X2xpc3Q7CS8qIGRlbGF5ZWQgKi8KLQlzdHJ1Y3QgZ2RsbV9sb2NrCSpob2xkX251bGw7CS8qIE5MIGxvY2sgZm9yIGhvbGRfbHZiICovCi19OwotCi0jZGVmaW5lIGdkbG1fYXNzZXJ0KGFzc2VydGlvbiwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKHVubGlrZWx5KCEoYXNzZXJ0aW9uKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJcHJpbnRrKEtFUk5fRU1FUkcgImxvY2tfZGxtOiBmYXRhbCBhc3NlcnRpb24gZmFpbGVkIFwiJXNcIlxuIiBcCi0JCQkJICAibG9ja19kbG06ICAiIGZtdCAiXG4iLCAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkgICNhc3NlcnRpb24sICMjYXJncyk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlCVUcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBsb2dfcHJpbnQobGV2LCBmbXQsIGFyZy4uLikgcHJpbnRrKGxldiAibG9ja19kbG06ICIgZm10ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGxvZ19pbmZvKGZtdCwgYXJnLi4uKSAgbG9nX3ByaW50KEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZykKLSNkZWZpbmUgbG9nX2Vycm9yKGZtdCwgYXJnLi4uKSBsb2dfcHJpbnQoS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmcpCi0jaWZkZWYgTE9DS19ETE1fTE9HX0RFQlVHCi0jZGVmaW5lIGxvZ19kZWJ1ZyhmbXQsIGFyZy4uLikgbG9nX3ByaW50KEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSBsb2dfZGVidWcoZm10LCBhcmcuLi4pCi0jZW5kaWYKLQotLyogc3lzZnMuYyAqLwotCi1pbnQgZ2RsbV9zeXNmc19pbml0KHZvaWQpOwotdm9pZCBnZGxtX3N5c2ZzX2V4aXQodm9pZCk7Ci1pbnQgZ2RsbV9rb2JqZWN0X3NldHVwKHN0cnVjdCBnZGxtX2xzICosIHN0cnVjdCBrb2JqZWN0ICopOwotdm9pZCBnZGxtX2tvYmplY3RfcmVsZWFzZShzdHJ1Y3QgZ2RsbV9scyAqKTsKLQotLyogdGhyZWFkLmMgKi8KLQotaW50IGdkbG1faW5pdF90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICopOwotdm9pZCBnZGxtX3JlbGVhc2VfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqKTsKLQotLyogbG9jay5jICovCi0KLXZvaWQgZ2RsbV9zdWJtaXRfZGVsYXllZChzdHJ1Y3QgZ2RsbV9scyAqKTsKLXVuc2lnbmVkIGludCBnZGxtX2RvX2xvY2soc3RydWN0IGdkbG1fbG9jayAqKTsKLQotaW50IGdkbG1fZ2V0X2xvY2sodm9pZCAqLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKiwgdm9pZCAqKik7Ci12b2lkIGdkbG1fcHV0X2xvY2sodm9pZCAqKTsKLXVuc2lnbmVkIGludCBnZGxtX2xvY2sodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIGludCBnZGxtX3VubG9jayh2b2lkICosIHVuc2lnbmVkIGludCk7Ci12b2lkIGdkbG1fY2FuY2VsKHZvaWQgKik7Ci1pbnQgZ2RsbV9ob2xkX2x2Yih2b2lkICosIGNoYXIgKiopOwotdm9pZCBnZGxtX3VuaG9sZF9sdmIodm9pZCAqLCBjaGFyICopOwotCi0vKiBtb3VudC5jICovCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTAzYTcuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9sb2NrX2RsbSh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8oJmdkbG1fb3BzKTsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9ja19kbG06ICBjYW4ndCByZWdpc3RlciBwcm90b2NvbDogJWRcbiIsCi0JCSAgICAgICBlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQllcnJvciA9IGdkbG1fc3lzZnNfaW5pdCgpOwotCWlmIChlcnJvcikgewotCQlnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJMb2NrX0RMTSAoYnVpbHQgJXMgJXMpIGluc3RhbGxlZFxuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbG9ja19kbG0odm9pZCkKLXsKLQlnZGxtX3N5c2ZzX2V4aXQoKTsKLQlnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfbG9ja19kbG0pOwotbW9kdWxlX2V4aXQoZXhpdF9sb2NrX2RsbSk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiR0ZTIERMTSBMb2NraW5nIE1vZHVsZSIpOwotTU9EVUxFX0FVVEhPUigiUmVkIEhhdCwgSW5jLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL21vdW50LmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL21vdW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYTdlYjYuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tb3VudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1jb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKLQotCi1zdGF0aWMgc3RydWN0IGdkbG1fbHMgKmluaXRfZ2RsbShsbV9jYWxsYmFja190IGNiLCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCQkgaW50IGZsYWdzLCBjaGFyICp0YWJsZV9uYW1lKQotewotCXN0cnVjdCBnZGxtX2xzICpsczsKLQljaGFyIGJ1ZlsyNTZdLCAqcDsKLQotCWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdkbG1fbHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxzKQotCQlyZXR1cm4gTlVMTDsKLQotCWxzLT5mc2NiID0gY2I7Ci0JbHMtPnNkcCA9IHNkcDsKLQlscy0+ZnNmbGFncyA9IGZsYWdzOwotCXNwaW5fbG9ja19pbml0KCZscy0+YXN5bmNfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxzLT5kZWxheWVkKTsKLQlJTklUX0xJU1RfSEVBRCgmbHMtPnN1Ym1pdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbHMtPnRocmVhZF93YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZscy0+d2FpdF9jb250cm9sKTsKLQlscy0+amlkID0gLTE7Ci0KLQlzdHJuY3B5KGJ1ZiwgdGFibGVfbmFtZSwgMjU2KTsKLQlidWZbMjU1XSA9ICdcMCc7Ci0KLQlwID0gc3RyY2hyKGJ1ZiwgJzonKTsKLQlpZiAoIXApIHsKLQkJbG9nX2luZm8oImludmFsaWQgdGFibGVfbmFtZSBcIiVzXCIiLCB0YWJsZV9uYW1lKTsKLQkJa2ZyZWUobHMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JKnAgPSAnXDAnOwotCXArKzsKLQotCXN0cm5jcHkobHMtPmNsdXN0ZXJuYW1lLCBidWYsIEdETE1fTkFNRV9MRU4pOwotCXN0cm5jcHkobHMtPmZzbmFtZSwgcCwgR0RMTV9OQU1FX0xFTik7Ci0KLQlyZXR1cm4gbHM7Ci19Ci0KLXN0YXRpYyBpbnQgbWFrZV9hcmdzKHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqZGF0YV9hcmcsIGludCAqbm9kaXIpCi17Ci0JY2hhciBkYXRhWzI1Nl07Ci0JY2hhciAqb3B0aW9ucywgKngsICp5OwotCWludCBlcnJvciA9IDA7Ci0KLQltZW1zZXQoZGF0YSwgMCwgMjU2KTsKLQlzdHJuY3B5KGRhdGEsIGRhdGFfYXJnLCAyNTUpOwotCi0JaWYgKCFzdHJsZW4oZGF0YSkpIHsKLQkJbG9nX2Vycm9yKCJubyBtb3VudCBvcHRpb25zLCAodSltb3VudCBoZWxwZXJzIG5vdCBpbnN0YWxsZWQiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChvcHRpb25zID0gZGF0YTsgKHggPSBzdHJzZXAoJm9wdGlvbnMsICI6IikpOyApIHsKLQkJaWYgKCEqeCkKLQkJCWNvbnRpbnVlOwotCi0JCXkgPSBzdHJjaHIoeCwgJz0nKTsKLQkJaWYgKHkpCi0JCQkqeSsrID0gMDsKLQotCQlpZiAoIXN0cmNtcCh4LCAiamlkIikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBqaWQiKTsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzc2NhbmYoeSwgIiV1IiwgJmxzLT5qaWQpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAiZmlyc3QiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIGZpcnN0Iik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+Zmlyc3QpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAiaWQiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIGlkIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+aWQpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAibm9kaXIiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIG5vZGlyIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsIG5vZGlyKTsKLQotCQl9IGVsc2UgewotCQkJbG9nX2Vycm9yKCJ1bmtvbnduIG9wdGlvbjogJXMiLCB4KTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGdkbG1fbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHM7Ci0JaW50IGVycm9yID0gLUVOT01FTSwgbm9kaXIgPSAwOwotCi0JaWYgKG1pbl9sdmJfc2l6ZSA+IEdETE1fTFZCX1NJWkUpCi0JCWdvdG8gb3V0OwotCi0JbHMgPSBpbml0X2dkbG0oY2IsIGNiX2RhdGEsIGZsYWdzLCB0YWJsZV9uYW1lKTsKLQlpZiAoIWxzKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gbWFrZV9hcmdzKGxzLCBob3N0X2RhdGEsICZub2Rpcik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gZ2RsbV9pbml0X3RocmVhZHMobHMpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnJlZTsKLQotCWVycm9yID0gZ2RsbV9rb2JqZWN0X3NldHVwKGxzLCBmc2tvYmopOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfdGhyZWFkOwotCi0JZXJyb3IgPSBkbG1fbmV3X2xvY2tzcGFjZShscy0+ZnNuYW1lLCBzdHJsZW4obHMtPmZzbmFtZSksCi0JCQkJICAmbHMtPmRsbV9sb2Nrc3BhY2UsCi0JCQkJICBETE1fTFNGTF9GUyB8IERMTV9MU0ZMX05FV0VYQ0wgfAotCQkJCSAgKG5vZGlyID8gRExNX0xTRkxfTk9ESVIgOiAwKSwKLQkJCQkgIEdETE1fTFZCX1NJWkUpOwotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoImRsbV9uZXdfbG9ja3NwYWNlIGVycm9yICVkIiwgZXJyb3IpOwotCQlnb3RvIG91dF9rb2JqOwotCX0KLQotCWxvY2tzdHJ1Y3QtPmxzX2ppZCA9IGxzLT5qaWQ7Ci0JbG9ja3N0cnVjdC0+bHNfZmlyc3QgPSBscy0+Zmlyc3Q7Ci0JbG9ja3N0cnVjdC0+bHNfbG9ja3NwYWNlID0gbHM7Ci0JbG9ja3N0cnVjdC0+bHNfb3BzID0gJmdkbG1fb3BzOwotCWxvY2tzdHJ1Y3QtPmxzX2ZsYWdzID0gMDsKLQlsb2Nrc3RydWN0LT5sc19sdmJfc2l6ZSA9IEdETE1fTFZCX1NJWkU7Ci0JcmV0dXJuIDA7Ci0KLW91dF9rb2JqOgotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLW91dF90aHJlYWQ6Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUobHMpOwotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV91bm1vdW50KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0KLQlsb2dfZGVidWcoInVubW91bnQgZmxhZ3MgJWx4IiwgbHMtPmZsYWdzKTsKLQotCS8qIEZJWE1FOiBzZXJpYWxpemUgdW5tb3VudCBhbmQgd2l0aGRyYXcgaW4gY2FzZSB0aGV5Ci0JICAgaGFwcGVuIGF0IG9uY2UuICBBbHNvLCBpZiB1bm1vdW50IGZvbGxvd3Mgd2l0aGRyYXcsCi0JICAgd2FpdCBmb3Igd2l0aGRyYXcgdG8gZmluaXNoLiAqLwotCi0JaWYgKHRlc3RfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncykpCi0JCWdvdG8gb3V0OwotCi0JZ2RsbV9rb2JqZWN0X3JlbGVhc2UobHMpOwotCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+ZGxtX2xvY2tzcGFjZSwgMik7Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotCUJVR19PTihscy0+YWxsX2xvY2tzX2NvdW50KTsKLW91dDoKLQlrZnJlZShscyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fcmVjb3ZlcnlfZG9uZSh2b2lkICpsb2Nrc3BhY2UsIHVuc2lnbmVkIGludCBqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCi17Ci0JY2hhciBlbnZfamlkWzIwXTsKLQljaGFyIGVudl9zdGF0dXNbMjBdOwotCWNoYXIgKmVudnBbXSA9IHsgZW52X2ppZCwgZW52X3N0YXR1cywgTlVMTCB9OwotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlscy0+cmVjb3Zlcl9qaWRfZG9uZSA9IGppZDsKLQlscy0+cmVjb3Zlcl9qaWRfc3RhdHVzID0gbWVzc2FnZTsKLQlzcHJpbnRmKGVudl9qaWQsICJKSUQ9JWQiLCBqaWQpOwotCXNwcmludGYoZW52X3N0YXR1cywgIlJFQ09WRVJZPSVzIiwKLQkJbWVzc2FnZSA9PSBMTV9SRF9TVUNDRVNTID8gIkRvbmUiIDogIkZhaWxlZCIpOwotCWtvYmplY3RfdWV2ZW50X2VudigmbHMtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9vdGhlcnNfbWF5X21vdW50KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQljaGFyICptZXNzYWdlID0gIkZJUlNUTU9VTlQ9RG9uZSI7Ci0JY2hhciAqZW52cFtdID0geyBtZXNzYWdlLCBOVUxMIH07Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCWxzLT5maXJzdF9kb25lID0gMTsKLQlrb2JqZWN0X3VldmVudF9lbnYoJmxzLT5rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7Ci19Ci0KLS8qIFVzZXJzcGFjZSBnZXRzIHRoZSBvZmZsaW5lIHVldmVudCwgYmxvY2tzIG5ldyBnZnMgbG9ja3Mgb24KLSAgIG90aGVyIG1vdW50ZXJzLCBhbmQgbGV0cyB1cyBrbm93IChzZXRzIFdJVEhEUkFXIGZsYWcpLiAgVGhlbiwKLSAgIHVzZXJzcGFjZSBsZWF2ZXMgdGhlIG1vdW50IGdyb3VwIHdoaWxlIHdlIGxlYXZlIHRoZSBsb2Nrc3BhY2UuICovCi0KLXN0YXRpYyB2b2lkIGdkbG1fd2l0aGRyYXcodm9pZCAqbG9ja3NwYWNlKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQotCWtvYmplY3RfdWV2ZW50KCZscy0+a29iaiwgS09CSl9PRkZMSU5FKTsKLQotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShscy0+d2FpdF9jb250cm9sLAotCQkJCSB0ZXN0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpKTsKLQotCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+ZGxtX2xvY2tzcGFjZSwgMik7Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3Bsb2NrKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCXJldHVybiBkbG1fcG9zaXhfbG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBjbWQsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3B1bmxvY2sodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCXJldHVybiBkbG1fcG9zaXhfdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBuYW1lLT5sbl9udW1iZXIsIGZpbGUsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3Bsb2NrX2dldCh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlyZXR1cm4gZGxtX3Bvc2l4X2dldChscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBmbCk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIGdkbG1fb3BzID0gewotCS5sbV9wcm90b19uYW1lID0gImxvY2tfZGxtIiwKLQkubG1fbW91bnQgPSBnZGxtX21vdW50LAotCS5sbV9vdGhlcnNfbWF5X21vdW50ID0gZ2RsbV9vdGhlcnNfbWF5X21vdW50LAotCS5sbV91bm1vdW50ID0gZ2RsbV91bm1vdW50LAotCS5sbV93aXRoZHJhdyA9IGdkbG1fd2l0aGRyYXcsCi0JLmxtX2dldF9sb2NrID0gZ2RsbV9nZXRfbG9jaywKLQkubG1fcHV0X2xvY2sgPSBnZGxtX3B1dF9sb2NrLAotCS5sbV9sb2NrID0gZ2RsbV9sb2NrLAotCS5sbV91bmxvY2sgPSBnZGxtX3VubG9jaywKLQkubG1fcGxvY2sgPSBnZGxtX3Bsb2NrLAotCS5sbV9wdW5sb2NrID0gZ2RsbV9wdW5sb2NrLAotCS5sbV9wbG9ja19nZXQgPSBnZGxtX3Bsb2NrX2dldCwKLQkubG1fY2FuY2VsID0gZ2RsbV9jYW5jZWwsCi0JLmxtX2hvbGRfbHZiID0gZ2RsbV9ob2xkX2x2YiwKLQkubG1fdW5ob2xkX2x2YiA9IGdkbG1fdW5ob2xkX2x2YiwKLQkubG1fcmVjb3ZlcnlfZG9uZSA9IGdkbG1fcmVjb3ZlcnlfZG9uZSwKLQkubG1fb3duZXIgPSBUSElTX01PRFVMRSwKLX07Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3ZWRjZi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIHNzaXplX3QgcHJvdG9fbmFtZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBnZGxtX29wcy5sbV9wcm90b19uYW1lKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxvY2tfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlzc2l6ZV90IHJldDsKLQlpbnQgdmFsID0gMDsKLQotCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpKQotCQl2YWwgPSAxOwotCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxvY2tfc3RvcmUoc3RydWN0IGdkbG1fbHMgKmxzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3NpemVfdCByZXQgPSBsZW47Ci0JaW50IHZhbDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKLQotCWlmICh2YWwgPT0gMSkKLQkJc2V0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpOwotCWVsc2UgaWYgKHZhbCA9PSAwKSB7Ci0JCWNsZWFyX2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpOwotCQlnZGxtX3N1Ym1pdF9kZWxheWVkKGxzKTsKLQl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCB3aXRoZHJhd19zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXNzaXplX3QgcmV0OwotCWludCB2YWwgPSAwOwotCi0JaWYgKHRlc3RfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncykpCi0JCXZhbCA9IDE7Ci0JcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCB3aXRoZHJhd19zdG9yZShzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzc2l6ZV90IHJldCA9IGxlbjsKLQlpbnQgdmFsOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOwotCi0JaWYgKHZhbCA9PSAxKQotCQlzZXRfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncyk7Ci0JZWxzZQotCQlyZXQgPSAtRUlOVkFMOwotCXdha2VfdXAoJmxzLT53YWl0X2NvbnRyb2wpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGlkX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGxzLT5pZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGppZF9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+amlkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZmlyc3Rfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmZpcnN0KTsKLX0KLQotc3RhdGljIHNzaXplX3QgZmlyc3RfZG9uZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+Zmlyc3RfZG9uZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPnJlY292ZXJfamlkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlscy0+cmVjb3Zlcl9qaWQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7Ci0JbHMtPmZzY2IobHMtPnNkcCwgTE1fQ0JfTkVFRF9SRUNPVkVSWSwgJmxzLT5yZWNvdmVyX2ppZCk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9kb25lX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5yZWNvdmVyX2ppZF9kb25lKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdGF0dXNfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPnJlY292ZXJfamlkX3N0YXR1cyk7Ci19Ci0KLXN0cnVjdCBnZGxtX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdkbG1fbHMgKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBnZGxtX2xzICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLX07Ci0KLSNkZWZpbmUgR0RMTV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgXAotc3RhdGljIHN0cnVjdCBnZGxtX2F0dHIgZ2RsbV9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQotCi1HRExNX0FUVFIocHJvdG9fbmFtZSwgICAgIDA0NDQsIHByb3RvX25hbWVfc2hvdywgICAgIE5VTEwpOwotR0RMTV9BVFRSKGJsb2NrLCAgICAgICAgICAwNjQ0LCBibG9ja19zaG93LCAgICAgICAgICBibG9ja19zdG9yZSk7Ci1HRExNX0FUVFIod2l0aGRyYXcsICAgICAgIDA2NDQsIHdpdGhkcmF3X3Nob3csICAgICAgIHdpdGhkcmF3X3N0b3JlKTsKLUdETE1fQVRUUihpZCwgICAgICAgICAgICAgMDQ0NCwgaWRfc2hvdywgICAgICAgICAgICAgTlVMTCk7Ci1HRExNX0FUVFIoamlkLCAgICAgICAgICAgIDA0NDQsIGppZF9zaG93LCAgICAgICAgICAgIE5VTEwpOwotR0RMTV9BVFRSKGZpcnN0LCAgICAgICAgICAwNDQ0LCBmaXJzdF9zaG93LCAgICAgICAgICBOVUxMKTsKLUdETE1fQVRUUihmaXJzdF9kb25lLCAgICAgMDQ0NCwgZmlyc3RfZG9uZV9zaG93LCAgICAgTlVMTCk7Ci1HRExNX0FUVFIocmVjb3ZlciwgICAgICAgIDA2NDQsIHJlY292ZXJfc2hvdywgICAgICAgIHJlY292ZXJfc3RvcmUpOwotR0RMTV9BVFRSKHJlY292ZXJfZG9uZSwgICAwNDQ0LCByZWNvdmVyX2RvbmVfc2hvdywgICBOVUxMKTsKLUdETE1fQVRUUihyZWNvdmVyX3N0YXR1cywgMDQ0NCwgcmVjb3Zlcl9zdGF0dXNfc2hvdywgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpnZGxtX2F0dHJzW10gPSB7Ci0JJmdkbG1fYXR0cl9wcm90b19uYW1lLmF0dHIsCi0JJmdkbG1fYXR0cl9ibG9jay5hdHRyLAotCSZnZGxtX2F0dHJfd2l0aGRyYXcuYXR0ciwKLQkmZ2RsbV9hdHRyX2lkLmF0dHIsCi0JJmdkbG1fYXR0cl9qaWQuYXR0ciwKLQkmZ2RsbV9hdHRyX2ZpcnN0LmF0dHIsCi0JJmdkbG1fYXR0cl9maXJzdF9kb25lLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyX2RvbmUuYXR0ciwKLQkmZ2RsbV9hdHRyX3JlY292ZXJfc3RhdHVzLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGdkbG1fYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0Jc3RydWN0IGdkbG1fYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZ2RsbV9hdHRyLCBhdHRyKTsKLQlyZXR1cm4gYS0+c2hvdyA/IGEtPnNob3cobHMsIGJ1ZikgOiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBnZGxtX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0Jc3RydWN0IGdkbG1fYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZ2RsbV9hdHRyLCBhdHRyKTsKLQlyZXR1cm4gYS0+c3RvcmUgPyBhLT5zdG9yZShscywgYnVmLCBsZW4pIDogbGVuOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBnZGxtX2F0dHJfb3BzID0gewotCS5zaG93ICA9IGdkbG1fYXR0cl9zaG93LAotCS5zdG9yZSA9IGdkbG1fYXR0cl9zdG9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGdkbG1fa3R5cGUgPSB7Ci0JLmRlZmF1bHRfYXR0cnMgPSBnZGxtX2F0dHJzLAotCS5zeXNmc19vcHMgICAgID0gJmdkbG1fYXR0cl9vcHMsCi19OwotCi1zdGF0aWMgc3RydWN0IGtzZXQgKmdkbG1fa3NldDsKLQotaW50IGdkbG1fa29iamVjdF9zZXR1cChzdHJ1Y3QgZ2RsbV9scyAqbHMsIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0JaW50IGVycm9yOwotCi0JbHMtPmtvYmoua3NldCA9IGdkbG1fa3NldDsKLQllcnJvciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZscy0+a29iaiwgJmdkbG1fa3R5cGUsIGZza29iaiwKLQkJCQkgICAgICJsb2NrX21vZHVsZSIpOwotCWlmIChlcnJvcikKLQkJbG9nX2Vycm9yKCJjYW4ndCByZWdpc3RlciBrb2JqICVkIiwgZXJyb3IpOwotCWtvYmplY3RfdWV2ZW50KCZscy0+a29iaiwgS09CSl9BREQpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fa29iamVjdF9yZWxlYXNlKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlrb2JqZWN0X3B1dCgmbHMtPmtvYmopOwotfQotCi1zdGF0aWMgaW50IGdkbG1fdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJICAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKLXsKLSAgICAgICAgc3RydWN0IGdkbG1fbHMgKmxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZGxtX2xzLCBrb2JqKTsKLSAgICAgICAgYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1RBQkxFPSVzOiVzIiwgbHMtPmNsdXN0ZXJuYW1lLCBscy0+ZnNuYW1lKTsKLSAgICAgICAgYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPWxvY2tfZGxtIik7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBnZGxtX3VldmVudF9vcHMgPSB7Ci0JLnVldmVudCA9IGdkbG1fdWV2ZW50LAotfTsKLQotCi1pbnQgZ2RsbV9zeXNmc19pbml0KHZvaWQpCi17Ci0JZ2RsbV9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgibG9ja19kbG0iLCAmZ2RsbV91ZXZlbnRfb3BzLCBrZXJuZWxfa29iaik7Ci0JaWYgKCFnZGxtX2tzZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbiBub3QgY3JlYXRlIGtzZXRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIGdkbG1fc3lzZnNfZXhpdCh2b2lkKQotewotCWtzZXRfdW5yZWdpc3RlcihnZGxtX2tzZXQpOwotfQotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg4MjNlZi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBpbmxpbmUgaW50IG5vX3dvcmsoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCWludCByZXQ7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlyZXQgPSBsaXN0X2VtcHR5KCZscy0+c3VibWl0KTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnZGxtX3RocmVhZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IChzdHJ1Y3QgZ2RsbV9scyAqKSBkYXRhOwotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gTlVMTDsKLQotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShscy0+dGhyZWFkX3dhaXQsCi0JCQkJIW5vX3dvcmsobHMpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7Ci0KLQkJc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZscy0+c3VibWl0KSkgewotCQkJbHAgPSBsaXN0X2VudHJ5KGxzLT5zdWJtaXQubmV4dCwgc3RydWN0IGdkbG1fbG9jaywKLQkJCQkJZGVsYXlfbGlzdCk7Ci0JCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JCQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCQkJZ2RsbV9kb19sb2NrKGxwKTsKLQkJCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBnZGxtX2luaXRfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWludCBlcnJvcjsKLQotCXAgPSBrdGhyZWFkX3J1bihnZGxtX3RocmVhZCwgbHMsICJsb2NrX2RsbSIpOwotCWVycm9yID0gSVNfRVJSKHApOwotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoImNhbid0IHN0YXJ0IGxvY2tfZGxtIHRocmVhZCAlZCIsIGVycm9yKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQlscy0+dGhyZWFkID0gcDsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGdkbG1fcmVsZWFzZV90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlrdGhyZWFkX3N0b3AobHMtPnRocmVhZCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9nLmMgYi9mcy9nZnMyL2xvZy5jCmluZGV4IGFkMzA1ODUuLjk4OTE4YTcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9nLmMKKysrIGIvZnMvZ2ZzMi9sb2cuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggNDM5MGY2Zi4uODBlNGY1ZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKKysrIGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCA3Y2FjZmRlLi5hNjg5MmVkIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTIzLDYgKzIyLDEyIEBACiAjaW5jbHVkZSAic3lzLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImdsb2NrLmgiCisjaW5jbHVkZSAicXVvdGEuaCIKKworc3RhdGljIHN0cnVjdCBzaHJpbmtlciBxZF9zaHJpbmtlciA9IHsKKwkuc2hyaW5rID0gZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5LAorCS5zZWVrcyA9IERFRkFVTFRfU0VFS1MsCit9OwogCiBzdGF0aWMgdm9pZCBnZnMyX2luaXRfaW5vZGVfb25jZSh2b2lkICpmb28pCiB7CkBAIC00MSw4ICs0Niw2IEBACiAJSU5JVF9ITElTVF9OT0RFKCZnbC0+Z2xfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmdsLT5nbF9zcGluKTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2hvbGRlcnMpOwotCWdsLT5nbF9sdmIgPSBOVUxMOwotCWF0b21pY19zZXQoJmdsLT5nbF9sdmJfY291bnQsIDApOwogCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfbHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2FpbF9saXN0KTsKIAlhdG9taWNfc2V0KCZnbC0+Z2xfYWlsX2NvdW50LCAwKTsKQEAgLTEwMCw2ICsxMDMsOCBAQAogCWlmICghZ2ZzMl9xdW90YWRfY2FjaGVwKQogCQlnb3RvIGZhaWw7CiAKKwlyZWdpc3Rlcl9zaHJpbmtlcigmcWRfc2hyaW5rZXIpOworCiAJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtMTE3LDYgKzEyMiw3IEBACiBmYWlsX3VucmVnaXN0ZXI6CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogZmFpbDoKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZxZF9zaHJpbmtlcik7CiAJZ2ZzMl9nbG9ja19leGl0KCk7CiAKIAlpZiAoZ2ZzMl9xdW90YWRfY2FjaGVwKQpAQCAtMTQ1LDYgKzE1MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2dmczJfZnModm9pZCkKIHsKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZxZF9zaHJpbmtlcik7CiAJZ2ZzMl9nbG9ja19leGl0KCk7CiAJZ2ZzMl91bnJlZ2lzdGVyX2RlYnVnZnMoKTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJfZnNfdHlwZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uYyBiL2ZzL2dmczIvbWV0YV9pby5jCmluZGV4IDA5ODUzNjIuLjhkNmYxMzIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5jCisrKyBiL2ZzL2dmczIvbWV0YV9pby5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtOTAsMjcgKzg5LDYgQEAKIH0KIAogLyoqCi0gKiBnZnMyX21ldGFfaW52YWwgLSBJbnZhbGlkYXRlIGFsbCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jawotICoKLSAqLwotCi12b2lkIGdmczJfbWV0YV9pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gZ2wtPmdsX2FzcGFjZTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKLQotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSk7Ci0KLQlhdG9taWNfaW5jKCZhc3BhY2UtPmlfd3JpdGVjb3VudCk7Ci0JdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7Ci0JYXRvbWljX2RlYygmYXNwYWNlLT5pX3dyaXRlY291bnQpOwotCi0JZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhbWFwcGluZy0+bnJwYWdlcyk7Ci19Ci0KLS8qKgogICogZ2ZzMl9tZXRhX3N5bmMgLSBTeW5jIGFsbCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCiAgKiBAZ2w6IFRoZSBnbG9jawogICoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWV0YV9pby5oIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKaW5kZXggYjFhNWYzNi4uZGUyNzBjMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tZXRhX2lvLmgKKysrIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKQEAgLTQwLDcgKzQwLDYgQEAKIHN0cnVjdCBpbm9kZSAqZ2ZzMl9hc3BhY2VfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9hc3BhY2VfcHV0KHN0cnVjdCBpbm9kZSAqYXNwYWNlKTsKIAotdm9pZCBnZnMyX21ldGFfaW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIHZvaWQgZ2ZzMl9tZXRhX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAogc3RydWN0IGJ1ZmZlcl9oZWFkICpnZnMyX21ldGFfbmV3KHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdTY0IGJsa25vKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbW91bnQuYyBiL2ZzL2dmczIvbW91bnQuYwppbmRleCAzY2IwYTQ0Li5mN2U4NTI3IDEwMDY0NAotLS0gYS9mcy9nZnMyL21vdW50LmMKKysrIGIvZnMvZ2ZzMi9tb3VudC5jCkBAIC0xMiwxMiArMTIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgotI2luY2x1ZGUgIm1vdW50LmgiCisjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJzeXMuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAKQEAgLTM3LDExICszNiwxNSBAQAogCU9wdF9xdW90YV9vZmYsCiAJT3B0X3F1b3RhX2FjY291bnQsCiAJT3B0X3F1b3RhX29uLAorCU9wdF9xdW90YSwKKwlPcHRfbm9xdW90YSwKIAlPcHRfc3VpZGRpciwKIAlPcHRfbm9zdWlkZGlyLAogCU9wdF9kYXRhX3dyaXRlYmFjaywKIAlPcHRfZGF0YV9vcmRlcmVkLAogCU9wdF9tZXRhLAorCU9wdF9kaXNjYXJkLAorCU9wdF9ub2Rpc2NhcmQsCiAJT3B0X2VyciwKIH07CiAKQEAgLTYxLDExICs2NCwxNSBAQAogCXtPcHRfcXVvdGFfb2ZmLCAicXVvdGE9b2ZmIn0sCiAJe09wdF9xdW90YV9hY2NvdW50LCAicXVvdGE9YWNjb3VudCJ9LAogCXtPcHRfcXVvdGFfb24sICJxdW90YT1vbiJ9LAorCXtPcHRfcXVvdGEsICJxdW90YSJ9LAorCXtPcHRfbm9xdW90YSwgIm5vcXVvdGEifSwKIAl7T3B0X3N1aWRkaXIsICJzdWlkZGlyIn0sCiAJe09wdF9ub3N1aWRkaXIsICJub3N1aWRkaXIifSwKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKIAl7T3B0X2RhdGFfb3JkZXJlZCwgImRhdGE9b3JkZXJlZCJ9LAogCXtPcHRfbWV0YSwgIm1ldGEifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCisJe09wdF9ub2Rpc2NhcmQsICJub2Rpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKQEAgLTc3LDEwMSArODQsNDYgQEAKICAqIFJldHVybjogZXJybm8KICAqLwogCi1pbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpkYXRhX2FyZywgaW50IHJlbW91bnQpCitpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpvcHRpb25zKQogewotCXN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MgPSAmc2RwLT5zZF9hcmdzOwotCWNoYXIgKmRhdGEgPSBkYXRhX2FyZzsKLQljaGFyICpvcHRpb25zLCAqbywgKnY7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmICghcmVtb3VudCkgewotCQkvKiAgU2V0IHNvbWUgZGVmYXVsdHMgICovCi0JCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9ERUZBVUxUOwotCQlhcmdzLT5hcl9kYXRhID0gR0ZTMl9EQVRBX0RFRkFVTFQ7Ci0JfQorCWNoYXIgKm87CisJaW50IHRva2VuOworCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOwogCiAJLyogU3BsaXQgdGhlIG9wdGlvbnMgaW50byB0b2tlbnMgd2l0aCB0aGUgIiwiIGNoYXJhY3RlciBhbmQKIAkgICBwcm9jZXNzIHRoZW0gKi8KIAotCWZvciAob3B0aW9ucyA9IGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKTsgKSB7Ci0JCWludCB0b2tlbjsKLQkJc3Vic3RyaW5nX3QgdG1wW01BWF9PUFRfQVJHU107Ci0KLQkJaWYgKCEqbykKKwl3aGlsZSAoMSkgeworCQlvID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpOworCQlpZiAobyA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmICgqbyA9PSAnXDAnKQogCQkJY29udGludWU7CiAKIAkJdG9rZW4gPSBtYXRjaF90b2tlbihvLCB0b2tlbnMsIHRtcCk7CiAJCXN3aXRjaCAodG9rZW4pIHsKIAkJY2FzZSBPcHRfbG9ja3Byb3RvOgotCQkJdiA9IG1hdGNoX3N0cmR1cCgmdG1wWzBdKTsKLQkJCWlmICghdikgewotCQkJCWZzX2luZm8oc2RwLCAibm8gbWVtb3J5IGZvciBsb2NrcHJvdG9cbiIpOwotCQkJCWVycm9yID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dF9lcnJvcjsKLQkJCX0KLQotCQkJaWYgKHJlbW91bnQgJiYgc3RyY21wKHYsIGFyZ3MtPmFyX2xvY2twcm90bykpIHsKLQkJCQlrZnJlZSh2KTsKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKLQkJCX0KLQkJCQotCQkJc3RybmNweShhcmdzLT5hcl9sb2NrcHJvdG8sIHYsIEdGUzJfTE9DS05BTUVfTEVOKTsKLQkJCWFyZ3MtPmFyX2xvY2twcm90b1tHRlMyX0xPQ0tOQU1FX0xFTiAtIDFdID0gMDsKLQkJCWtmcmVlKHYpOworCQkJbWF0Y2hfc3RybGNweShhcmdzLT5hcl9sb2NrcHJvdG8sICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2t0YWJsZToKLQkJCXYgPSBtYXRjaF9zdHJkdXAoJnRtcFswXSk7Ci0JCQlpZiAoIXYpIHsKLQkJCQlmc19pbmZvKHNkcCwgIm5vIG1lbW9yeSBmb3IgbG9ja3RhYmxlXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9sb2NrdGFibGUpKSB7Ci0JCQkJa2ZyZWUodik7Ci0JCQkJZ290byBjYW50X3JlbW91bnQ7Ci0JCQl9Ci0KLQkJCXN0cm5jcHkoYXJncy0+YXJfbG9ja3RhYmxlLCB2LCBHRlMyX0xPQ0tOQU1FX0xFTik7Ci0JCQlhcmdzLT5hcl9sb2NrdGFibGVbR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSAgPSAwOwotCQkJa2ZyZWUodik7CisJCQltYXRjaF9zdHJsY3B5KGFyZ3MtPmFyX2xvY2t0YWJsZSwgJnRtcFswXSwKKwkJCQkgICAgICBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaG9zdGRhdGE6Ci0JCQl2ID0gbWF0Y2hfc3RyZHVwKCZ0bXBbMF0pOwotCQkJaWYgKCF2KSB7Ci0JCQkJZnNfaW5mbyhzZHAsICJubyBtZW1vcnkgZm9yIGhvc3RkYXRhXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9ob3N0ZGF0YSkpIHsKLQkJCQlrZnJlZSh2KTsKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKLQkJCX0KLQotCQkJc3RybmNweShhcmdzLT5hcl9ob3N0ZGF0YSwgdiwgR0ZTMl9MT0NLTkFNRV9MRU4pOwotCQkJYXJncy0+YXJfaG9zdGRhdGFbR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSA9IDA7Ci0JCQlrZnJlZSh2KTsKKwkJCW1hdGNoX3N0cmxjcHkoYXJncy0+YXJfaG9zdGRhdGEsICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3NwZWN0YXRvcjoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9zcGVjdGF0b3IpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9zcGVjdGF0b3IgPSAxOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lnbm9yZV9sb2NhbF9mczoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9pZ25vcmVfbG9jYWxfZnMpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9pZ25vcmVfbG9jYWxfZnMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2FsZmxvY2tzOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX2xvY2FsZmxvY2tzKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbG9jYWxmbG9ja3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2FsY2FjaGluZzoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9sb2NhbGNhY2hpbmcpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9sb2NhbGNhY2hpbmcgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgpAQCAtMTgxLDI1ICsxMzMsMjMgQEAKIAkJCWFyZ3MtPmFyX2RlYnVnID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF91cGdyYWRlOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX3VwZ3JhZGUpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl91cGdyYWRlID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9hY2w6CiAJCQlhcmdzLT5hcl9wb3NpeF9hY2wgPSAxOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9hY2w6CiAJCQlhcmdzLT5hcl9wb3NpeF9hY2wgPSAwOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJj0gfk1TX1BPU0lYQUNMOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX29mZjoKKwkJY2FzZSBPcHRfbm9xdW90YToKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9PRkY7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfcXVvdGFfYWNjb3VudDoKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9BQ0NPVU5UOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX29uOgorCQljYXNlIE9wdF9xdW90YToKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9PTjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9zdWlkZGlyOgpAQCAtMjE1LDI5ICsxNjUsMjEgQEAKIAkJCWFyZ3MtPmFyX2RhdGEgPSBHRlMyX0RBVEFfT1JERVJFRDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9tZXRhOgotCQkJaWYgKHJlbW91bnQgJiYgYXJncy0+YXJfbWV0YSAhPSAxKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbWV0YSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZGlzY2FyZDoKKwkJCWFyZ3MtPmFyX2Rpc2NhcmQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vZGlzY2FyZDoKKwkJCWFyZ3MtPmFyX2Rpc2NhcmQgPSAwOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2VycjoKIAkJZGVmYXVsdDoKLQkJCWZzX2luZm8oc2RwLCAidW5rbm93biBvcHRpb246ICVzXG4iLCBvKTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0X2Vycm9yOworCQkJZnNfaW5mbyhzZHAsICJpbnZhbGlkIG1vdW50IG9wdGlvbjogJXNcbiIsIG8pOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLW91dF9lcnJvcjoKLQlpZiAoZXJyb3IpCi0JCWZzX2luZm8oc2RwLCAiaW52YWxpZCBtb3VudCBvcHRpb24ocylcbiIpOwotCi0JaWYgKGRhdGEgIT0gZGF0YV9hcmcpCi0JCWtmcmVlKGRhdGEpOwotCi0JcmV0dXJuIGVycm9yOwotCi1jYW50X3JlbW91bnQ6Ci0JZnNfaW5mbyhzZHAsICJjYW4ndCByZW1vdW50IHdpdGggb3B0aW9uICVzXG4iLCBvKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tb3VudC5oIGIvZnMvZ2ZzMi9tb3VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDEyODhhLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbW91bnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX19NT1VOVF9ET1RfSF9fCi0jZGVmaW5lIF9fTU9VTlRfRE9UX0hfXwotCi1zdHJ1Y3QgZ2ZzMl9zYmQ7Ci0KLWludCBnZnMyX21vdW50X2FyZ3Moc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmRhdGFfYXJnLCBpbnQgcmVtb3VudCk7Ci0KLSNlbmRpZiAvKiBfX01PVU5UX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2FkZHJlc3MuYyBiL2ZzL2dmczIvb3BzX2FkZHJlc3MuYwppbmRleCA0ZGRhYjY3Li5hNmRkZTE3IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19hZGRyZXNzLmMKKysrIGIvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTQ0Miw2ICs0NDEsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseShwYWdlLT5pbmRleCkpIHsKIAkJemVyb191c2VyKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDk2LDYgKzEwOTYsNyBAQAogCS5yZWxlYXNlcGFnZSA9IGdmczJfcmVsZWFzZXBhZ2UsCiAJLmRpcmVjdF9JTyA9IGdmczJfZGlyZWN0X0lPLAogCS5taWdyYXRlcGFnZSA9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGdmczJfb3JkZXJlZF9hb3BzID0gewpAQCAtMTExMSw2ICsxMTEyLDcgQEAKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAogCS5kaXJlY3RfSU8gPSBnZnMyX2RpcmVjdF9JTywKIAkubWlncmF0ZXBhZ2UgPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX2pkYXRhX2FvcHMgPSB7CkBAIC0xMTI1LDYgKzExMjcsNyBAQAogCS5ibWFwID0gZ2ZzMl9ibWFwLAogCS5pbnZhbGlkYXRlcGFnZSA9IGdmczJfaW52YWxpZGF0ZXBhZ2UsCiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKIAogdm9pZCBnZnMyX3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19kZW50cnkuYyBiL2ZzL2dmczIvb3BzX2RlbnRyeS5jCmluZGV4IGMyYWQzNjMuLjVlYjU3YjAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2RlbnRyeS5jCisrKyBiL2ZzL2dmczIvb3BzX2RlbnRyeS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19leHBvcnQuYyBiL2ZzL2dmczIvb3BzX2V4cG9ydC5jCmluZGV4IDdmZGViMTQuLjkyMDBlZjIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2V4cG9ydC5jCisrKyBiL2ZzL2dmczIvb3BzX2V4cG9ydC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19maWxlLmMgYi9mcy9nZnMyL29wc19maWxlLmMKaW5kZXggOTNmZTQxYi4uM2I5ZThkZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZmlsZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwpAQCAtMjAsOSArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZGxtLmg+CisjaW5jbHVkZSA8bGludXgvZGxtX3Bsb2NrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0zNTQsNyArMzU1LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAorCXNldF9iaXQoR0xGX0RJUlRZLCAmaXAtPmlfZ2wtPmdsX2ZsYWdzKTsKIAlzZXRfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKTsKKwogCXJldCA9IGdmczJfd3JpdGVfYWxsb2NfcmVxdWlyZWQoaXAsIHBvcywgUEFHRV9DQUNIRV9TSVpFLCAmYWxsb2NfcmVxdWlyZWQpOwogCWlmIChyZXQgfHwgIWFsbG9jX3JlcXVpcmVkKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC01NjAsNTcgKzU2MywyNCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTQorCiAvKioKICAqIGdmczJfc2V0bGVhc2UgLSBhY3F1aXJlL3JlbGVhc2UgYSBmaWxlIGxlYXNlCiAgKiBAZmlsZTogdGhlIGZpbGUgcG9pbnRlcgogICogQGFyZzogbGVhc2UgdHlwZQogICogQGZsOiBmaWxlIGxvY2sKICAqCisgKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBlbmZvcmNlIGEgbGVhc2UgYWNyb3NzIHRoZSB3aG9sZQorICogY2x1c3RlcjsgdW50aWwgd2UgZG8sIGRpc2FibGUgbGVhc2VzIChieSBqdXN0IHJldHVybmluZyAtRUlOVkFMKSwKKyAqIHVubGVzcyB0aGUgYWRtaW5pc3RyYXRvciBoYXMgcmVxdWVzdGVkIHB1cmVseSBsb2NhbCBsb2NraW5nLgorICoKICAqIFJldHVybnM6IGVycm5vCiAgKi8KIAogc3RhdGljIGludCBnZnMyX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxlLCBsb25nIGFyZywgc3RydWN0IGZpbGVfbG9jayAqKmZsKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihmaWxlLT5mX21hcHBpbmctPmhvc3QpOwotCi0JLyoKLQkgKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBlbmZvcmNlIGEgbGVhc2UgYWNyb3NzIHRoZSB3aG9sZQotCSAqIGNsdXN0ZXI7IHVudGlsIHdlIGRvLCBkaXNhYmxlIGxlYXNlcyAoYnkganVzdCByZXR1cm5pbmcgLUVJTlZBTCksCi0JICogdW5sZXNzIHRoZSBhZG1pbmlzdHJhdG9yIGhhcyByZXF1ZXN0ZWQgcHVyZWx5IGxvY2FsIGxvY2tpbmcuCi0JICovCi0JaWYgKCFzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBnZW5lcmljX3NldGxlYXNlKGZpbGUsIGFyZywgZmwpOwotfQotCi1zdGF0aWMgaW50IGdmczJfbG1fcGxvY2tfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wbG9ja19nZXQoCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgZmwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3Bsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3Bsb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGNtZCwgZmwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3B1bmxvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdW5sb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGZsKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgpAQCAtNjI2LDkgKzU5Niw3IEBACiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lIG5hbWUgPQotCQl7IC5sbl9udW1iZXIgPSBpcC0+aV9ub19hZGRyLAotCQkgIC5sbl90eXBlID0gTE1fVFlQRV9QTE9DSyB9OworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CiAKIAlpZiAoIShmbC0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkpCiAJCXJldHVybiAtRU5PTENLOwpAQCAtNjQwLDEyICs2MDgsMTQgQEAKIAkJY21kID0gRl9TRVRMSzsKIAkJZmwtPmZsX3R5cGUgPSBGX1VOTENLOwogCX0KKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQorCQlyZXR1cm4gLUVJTzsKIAlpZiAoSVNfR0VUTEsoY21kKSkKLQkJcmV0dXJuIGdmczJfbG1fcGxvY2tfZ2V0KHNkcCwgJm5hbWUsIGZpbGUsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF9nZXQobHMtPmxzX2RsbSwgaXAtPmlfbm9fYWRkciwgZmlsZSwgZmwpOwogCWVsc2UgaWYgKGZsLT5mbF90eXBlID09IEZfVU5MQ0spCi0JCXJldHVybiBnZnMyX2xtX3B1bmxvY2soc2RwLCAmbmFtZSwgZmlsZSwgZmwpOworCQlyZXR1cm4gZGxtX3Bvc2l4X3VubG9jayhscy0+bHNfZGxtLCBpcC0+aV9ub19hZGRyLCBmaWxlLCBmbCk7CiAJZWxzZQotCQlyZXR1cm4gZ2ZzMl9sbV9wbG9jayhzZHAsICZuYW1lLCBmaWxlLCBjbWQsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF9sb2NrKGxzLT5sc19kbG0sIGlwLT5pX25vX2FkZHIsIGZpbGUsIGNtZCwgZmwpOwogfQogCiBzdGF0aWMgaW50IGRvX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKQEAgLTczMiw3ICs3MDIsNyBAQAogCX0KIH0KIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkubGxzZWVrCQk9IGdmczJfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCkBAIC03NTAsNyArNzIwLDcgQEAKIAkuc2V0bGVhc2UJPSBnZnMyX3NldGxlYXNlLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wcyA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLnJlYWRkaXIJPSBnZnMyX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ2ZzMl9pb2N0bCwKIAkub3BlbgkJPSBnZnMyX29wZW4sCkBAIC03NjAsNyArNzMwLDkgQEAKIAkuZmxvY2sJCT0gZ2ZzMl9mbG9jaywKIH07CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrID0geworI2VuZGlmIC8qIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNICovCisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzX25vbG9jayA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLmxsc2VlawkJPSBnZnMyX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLApAQCAtNzczLDEwICs3NDUsMTAgQEAKIAkuZnN5bmMJCT0gZ2ZzMl9mc3luYywKIAkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLnNldGxlYXNlCT0gZ2ZzMl9zZXRsZWFzZSwKKwkuc2V0bGVhc2UJPSBnZW5lcmljX3NldGxlYXNlLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzX25vbG9jayA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZGlyX2ZvcHNfbm9sb2NrID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkucmVhZGRpcgk9IGdmczJfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGwJPSBnZnMyX2lvY3RsLAogCS5vcGVuCQk9IGdmczJfb3BlbiwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggZjkxZWViZC4uNTE4ODNiMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTI1LDcgKzI0LDYgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImdsb3BzLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKLSNpbmNsdWRlICJtb3VudC5oIgogI2luY2x1ZGUgInJlY292ZXJ5LmgiCiAjaW5jbHVkZSAicmdycC5oIgogI2luY2x1ZGUgInN1cGVyLmgiCkBAIC02NCw3ICs2Miw2IEBACiAJZ3QtPmd0X3F1b3RhX3dhcm5fcGVyaW9kID0gMTA7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX251bSA9IDE7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX2RlbiA9IDE7Ci0JZ3QtPmd0X3F1b3RhX2NhY2hlX3NlY3MgPSAzMDA7CiAJZ3QtPmd0X3F1b3RhX3F1YW50dW0gPSA2MDsKIAlndC0+Z3RfbmV3X2ZpbGVzX2pkYXRhID0gMDsKIAlndC0+Z3RfbWF4X3JlYWRhaGVhZCA9IDEgPDwgMTg7CkBAIC0xMDAsNyArOTcsNiBAQAogCW11dGV4X2luaXQoJnNkcC0+c2RfamluZGV4X211dGV4KTsKIAogCUlOSVRfTElTVF9IRUFEKCZzZHAtPnNkX3F1b3RhX2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX3F1b3RhX3NwaW4pOwogCW11dGV4X2luaXQoJnNkcC0+c2RfcXVvdGFfbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkcC0+c2RfcXVvdGFfd2FpdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnNkcC0+c2RfdHJ1bmNfbGlzdCk7CkBAIC0yMzgsNiArMjM0LDcgQEAKIAogCW1lbWNweShzYi0+c2JfbG9ja3Byb3RvLCBzdHItPnNiX2xvY2twcm90bywgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCW1lbWNweShzYi0+c2JfbG9ja3RhYmxlLCBzdHItPnNiX2xvY2t0YWJsZSwgR0ZTMl9MT0NLTkFNRV9MRU4pOworCW1lbWNweShzYi0+c2JfdXVpZCwgc3RyLT5zYl91dWlkLCAxNik7CiB9CiAKIC8qKgpAQCAtMjk5LDE1ICsyOTYsMTUgQEAKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIAlyZXR1cm4gMDsKIH0KKwogLyoqCiAgKiBnZnMyX3JlYWRfc2IgLSBSZWFkIHN1cGVyIGJsb2NrCiAgKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jayBmb3IgdGhlIHN1cGVyYmxvY2sgKGFzc3VtZWQgdG8gYmUgaGVsZCkKICAqIEBzaWxlbnQ6IERvbid0IHByaW50IG1lc3NhZ2UgaWYgbW91bnQgZmFpbHMKICAqCiAgKi8KIAotc3RhdGljIGludCBnZnMyX3JlYWRfc2Ioc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IHNpbGVudCkKK3N0YXRpYyBpbnQgZ2ZzMl9yZWFkX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KQogewogCXUzMiBoYXNoX2Jsb2NrcywgaW5kX2Jsb2NrcywgbGVhZl9ibG9ja3M7CiAJdTMyIHRtcF9ibG9ja3M7CkBAIC01MjcsNyArNTI0LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBnZnMyX3JlYWRfc2Ioc2RwLCBzYl9naC5naF9nbCwgc2lsZW50KTsKKwlyZXQgPSBnZnMyX3JlYWRfc2Ioc2RwLCBzaWxlbnQpOwogCWlmIChyZXQpIHsKIAkJZnNfZXJyKHNkcCwgImNhbid0IHJlYWQgc3VwZXJibG9jazogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNjMwLDEzICs2MjcsMTMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfbG1fb3RoZXJzX21heV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3N0YXRpYyB2b2lkIGdmczJfb3RoZXJzX21heV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlpZiAoIXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX290aGVyc19tYXlfbW91bnQpCi0JCXJldHVybjsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX290aGVyc19tYXlfbW91bnQoCi0JCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UpOworCWNoYXIgKm1lc3NhZ2UgPSAiRklSU1RNT1VOVD1Eb25lIjsKKwljaGFyICplbnZwW10gPSB7IG1lc3NhZ2UsIE5VTEwgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWxzLT5sc19maXJzdF9kb25lID0gMTsKKwlrb2JqZWN0X3VldmVudF9lbnYoJnNkcC0+c2Rfa29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCiAvKioKQEAgLTc5Niw3ICs3OTMsNyBAQAogCQkJfQogCQl9CiAKLQkJZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHNkcCk7CisJCWdmczJfb3RoZXJzX21heV9tb3VudChzZHApOwogCX0gZWxzZSBpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpIHsKIAkJZXJyb3IgPSBnZnMyX3JlY292ZXJfam91cm5hbChzZHAtPnNkX2pkZXNjKTsKIAkJaWYgKGVycm9yKSB7CkBAIC0xMDA1LDcgKzEwMDIsNiBAQAogCQlnb3RvIGZhaWxfcXVvdGFkOwogCiAJc2RwLT5zZF9sb2dfZmx1c2hfdGltZSA9IGppZmZpZXM7Ci0Jc2RwLT5zZF9qaW5kZXhfcmVmcmVzaF90aW1lID0gamlmZmllczsKIAogCXAgPSBrdGhyZWFkX3J1bihnZnMyX2xvZ2QsIHNkcCwgImdmczJfbG9nZCIpOwogCWVycm9yID0gSVNfRVJSKHApOwpAQCAtMTAzMyw2ICsxMDI5LDE3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBub2xvY2tfdG9rZW5zID0geworCXsgT3B0X2ppZCwgImppZD0lZFxuIiwgfSwKKwl7IE9wdF9lcnIsIE5VTEwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0geworCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKKwkubG1fcHV0X2xvY2sgPSBrbWVtX2NhY2hlX2ZyZWUsCisJLmxtX3Rva2VucyA9ICZub2xvY2tfdG9rZW5zLAorfTsKKwogLyoqCiAgKiBnZnMyX2xtX21vdW50IC0gbW91bnQgYSBsb2NraW5nIHByb3RvY29sCiAgKiBAc2RwOiB0aGUgZmlsZXN5c3RlbQpAQCAtMTA0NCwzMSArMTA1MSw3MyBAQAogCiBzdGF0aWMgaW50IGdmczJfbG1fbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBzaWxlbnQpCiB7Ci0JY2hhciAqcHJvdG8gPSBzZHAtPnNkX3Byb3RvX25hbWU7Ci0JY2hhciAqdGFibGUgPSBzZHAtPnNkX3RhYmxlX25hbWU7Ci0JaW50IGZsYWdzID0gTE1fTUZMQUdfQ09OVl9OT0RST1A7Ci0JaW50IGVycm9yOworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsbTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MgPSAmc2RwLT5zZF9hcmdzOworCWNvbnN0IGNoYXIgKnByb3RvID0gc2RwLT5zZF9wcm90b19uYW1lOworCWNvbnN0IGNoYXIgKnRhYmxlID0gc2RwLT5zZF90YWJsZV9uYW1lOworCWNvbnN0IGNoYXIgKmZzbmFtZTsKKwljaGFyICpvLCAqb3B0aW9uczsKKwlpbnQgcmV0OwogCi0JaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCi0JCWZsYWdzIHw9IExNX01GTEFHX1NQRUNUQVRPUjsKKwlpZiAoIXN0cmNtcCgibG9ja19ub2xvY2siLCBwcm90bykpIHsKKwkJbG0gPSAmbm9sb2NrX29wczsKKwkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzID0gMTsKKwkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsY2FjaGluZyA9IDE7CisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoImxvY2tfZGxtIiwgcHJvdG8pKSB7CisJCWxtID0gJmdmczJfZGxtX29wczsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNhbid0IGZpbmQgcHJvdG9jb2wgJXNcbiIsIHByb3RvKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQogCiAJZnNfaW5mbyhzZHAsICJUcnlpbmcgdG8gam9pbiBjbHVzdGVyIFwiJXNcIiwgXCIlc1wiXG4iLCBwcm90bywgdGFibGUpOwogCi0JZXJyb3IgPSBnZnMyX21vdW50X2xvY2twcm90byhwcm90bywgdGFibGUsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSwKLQkJCQkgICAgIGdmczJfZ2xvY2tfY2IsIHNkcCwKLQkJCQkgICAgIEdGUzJfTUlOX0xWQl9TSVpFLCBmbGFncywKLQkJCQkgICAgICZzZHAtPnNkX2xvY2tzdHJ1Y3QsICZzZHAtPnNkX2tvYmopOwotCWlmIChlcnJvcikgewotCQlmc19pbmZvKHNkcCwgImNhbid0IG1vdW50IHByb3RvPSVzLCB0YWJsZT0lcywgaG9zdGRhdGE9JXNcbiIsCi0JCQlwcm90bywgdGFibGUsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlscy0+bHNfb3BzID0gbG07CisJbHMtPmxzX2ZpcnN0ID0gMTsKKwlscy0+bHNfaWQgPSAwOwogCi0JaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzKSB8fAotCSAgICBnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2x2Yl9zaXplID49Ci0JCQkJICBHRlMyX01JTl9MVkJfU0laRSkpIHsKLQkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKLQkJZ290byBvdXQ7CisJZm9yIChvcHRpb25zID0gYXJncy0+YXJfaG9zdGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiOiIpKTsgKSB7CisJCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOworCQlpbnQgdG9rZW4sIG9wdGlvbjsKKworCQlpZiAoIW8gfHwgISpvKQorCQkJY29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihvLCAqbG0tPmxtX3Rva2VucywgdG1wKTsKKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9qaWQ6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IG9wdGlvbiA8IDApIAorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfamlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2lkOgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX2lkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZpcnN0OgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCB8fCAob3B0aW9uICE9IDAgJiYgb3B0aW9uICE9IDEpKQorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfZmlyc3QgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9kaXI6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IChvcHRpb24gIT0gMCAmJiBvcHRpb24gIT0gMSkpCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19ub2RpciA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9lcnI6CisJCWRlZmF1bHQ6Citob3N0ZGF0YV9lcnJvcjoKKwkJCWZzX2luZm8oc2RwLCAidW5rbm93biBob3N0ZGF0YSAoJXMpXG4iLCBvKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCkBAIC0xMDc3LDIyICsxMTI2LDI1IEBACiAJCXNucHJpbnRmKHNkcC0+c2RfZnNuYW1lLCBHRlMyX0ZTTkFNRV9MRU4sICIlcy4ldSIsIHRhYmxlLAogCQkJIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpOwogCi0JZnNfaW5mbyhzZHAsICJKb2luZWQgY2x1c3Rlci4gTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKLQotCWlmICgoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ZsYWdzICYgTE1fTFNGTEFHX0xPQ0FMKSAmJgotCSAgICAhc2RwLT5zZF9hcmdzLmFyX2lnbm9yZV9sb2NhbF9mcykgewotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MgPSAxOwotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxjYWNoaW5nID0gMTsKKwlmc25hbWUgPSBzdHJjaHIodGFibGUsICc6Jyk7CisJaWYgKGZzbmFtZSkKKwkJZnNuYW1lKys7CisJaWYgKGxtLT5sbV9tb3VudCA9PSBOVUxMKSB7CisJCWZzX2luZm8oc2RwLCAiTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQotCi1vdXQ6Ci0JcmV0dXJuIGVycm9yOworCXJldCA9IGxtLT5sbV9tb3VudChzZHAsIGZzbmFtZSk7CisJaWYgKHJldCA9PSAwKQorCQlmc19pbmZvKHNkcCwgIkpvaW5lZCBjbHVzdGVyLiBOb3cgbW91bnRpbmcgRlMuLi5cbiIpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzOworCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSAmJgorCSAgICBsbS0+bG1fdW5tb3VudCkKKwkJbG0tPmxtX3VubW91bnQoc2RwKTsKIH0KIAogLyoqCkBAIC0xMTE2LDEyICsxMTY4LDIwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgKGNoYXIgKilkYXRhLCAwKTsKKwlzZHAtPnNkX2FyZ3MuYXJfcXVvdGEgPSBHRlMyX1FVT1RBX0RFRkFVTFQ7CisJc2RwLT5zZF9hcmdzLmFyX2RhdGEgPSBHRlMyX0RBVEFfREVGQVVMVDsKKworCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJnNkcC0+c2RfYXJncywgZGF0YSk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGNhbid0IHBhcnNlIG1vdW50IGFyZ3VtZW50c1xuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKKyAgICAgICAgICAgICAgICBzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9wb3NpeF9hY2wpCisJCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworCiAJc2ItPnNfbWFnaWMgPSBHRlMyX01BR0lDOwogCXNiLT5zX29wID0gJmdmczJfc3VwZXJfb3BzOwogCXNiLT5zX2V4cG9ydF9vcCA9ICZnZnMyX2V4cG9ydF9vcHM7CkBAIC0xMTk5LDYgKzEyNTksOCBAQAogCQlkcHV0KHNkcC0+c2Rfcm9vdF9kaXIpOwogCWlmIChzZHAtPnNkX21hc3Rlcl9kaXIpCiAJCWRwdXQoc2RwLT5zZF9tYXN0ZXJfZGlyKTsKKwlpZiAoc2ItPnNfcm9vdCkKKwkJZHB1dChzYi0+c19yb290KTsKIAlzYi0+c19yb290ID0gTlVMTDsKIGZhaWxfbG9ja2luZzoKIAlpbml0X2xvY2tpbmcoc2RwLCAmbW91bnRfZ2gsIFVORE8pOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKaW5kZXggNDk4Nzc1NC4uYWJkNTQyOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYworKysgYi9mcy9nZnMyL29wc19pbm9kZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX3N1cGVyLmMgYi9mcy9nZnMyL29wc19zdXBlci5jCmluZGV4IDMyMDMyM2QuLjQ1ODAxOTUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9vcHNfc3VwZXIuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTI3LDcgKzI2LDYgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAibG9nLmgiCi0jaW5jbHVkZSAibW91bnQuaCIKICNpbmNsdWRlICJxdW90YS5oIgogI2luY2x1ZGUgInJlY292ZXJ5LmgiCiAjaW5jbHVkZSAicmdycC5oIgpAQCAtNDAsNiArMzgsOCBAQAogI2luY2x1ZGUgImJtYXAuaCIKICNpbmNsdWRlICJtZXRhX2lvLmgiCiAKKyNkZWZpbmUgYXJnc19uZXEoYTEsIGEyLCB4KSAoKGExKS0+YXJfIyN4ICE9IChhMiktPmFyXyMjeCkKKwogLyoqCiAgKiBnZnMyX3dyaXRlX2lub2RlIC0gTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBzdGFibGUgb24gdGhlIGRpc2sKICAqIEBpbm9kZTogVGhlIGlub2RlCkBAIC00MzUsMjUgKzQzNSw0NSBAQAogc3RhdGljIGludCBnZnMyX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IGdmczJfYXJncyBhcmdzID0gc2RwLT5zZF9hcmdzOyAvKiBEZWZhdWx0IHRvIGN1cnJlbnQgc2V0dGluZ3MgKi8KIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsIGRhdGEsIDEpOworCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJmFyZ3MsIGRhdGEpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCisJLyogTm90IGFsbG93ZWQgdG8gY2hhbmdlIGxvY2tpbmcgZGV0YWlscyAqLworCWlmIChzdHJjbXAoYXJncy5hcl9sb2NrcHJvdG8sIHNkcC0+c2RfYXJncy5hcl9sb2NrcHJvdG8pIHx8CisJICAgIHN0cmNtcChhcmdzLmFyX2xvY2t0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2xvY2t0YWJsZSkgfHwKKwkgICAgc3RyY21wKGFyZ3MuYXJfaG9zdGRhdGEsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU29tZSBmbGFncyBtdXN0IG5vdCBiZSBjaGFuZ2VkICovCisJaWYgKGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBzcGVjdGF0b3IpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBpZ25vcmVfbG9jYWxfZnMpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBsb2NhbGZsb2NrcykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIGxvY2FsY2FjaGluZykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIG1ldGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQogCQkqZmxhZ3MgfD0gTVNfUkRPTkxZOwotCWVsc2UgewotCQlpZiAoKmZsYWdzICYgTVNfUkRPTkxZKSB7Ci0JCQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCi0JCQkJZXJyb3IgPSBnZnMyX21ha2VfZnNfcm8oc2RwKTsKLQkJfSBlbHNlIGlmICghKCpmbGFncyAmIE1TX1JET05MWSkgJiYKLQkJCSAgIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKworCWlmICgoc2ItPnNfZmxhZ3MgXiAqZmxhZ3MpICYgTVNfUkRPTkxZKSB7CisJCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpCisJCQllcnJvciA9IGdmczJfbWFrZV9mc19ybyhzZHApOworCQllbHNlCiAJCQllcnJvciA9IGdmczJfbWFrZV9mc19ydyhzZHApOwotCQl9CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJc2RwLT5zZF9hcmdzID0gYXJnczsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisJZWxzZQorCQlzYi0+c19mbGFncyAmPSB+TVNfUE9TSVhBQ0w7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNTg4LDYgKzYwOCw4IEBACiAJCX0KIAkJc2VxX3ByaW50ZihzLCAiLGRhdGE9JXMiLCBzdGF0ZSk7CiAJfQorCWlmIChhcmdzLT5hcl9kaXNjYXJkKQorCQlzZXFfcHJpbnRmKHMsICIsZGlzY2FyZCIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggYjA4ZDA5Ni4uOGQ1M2Y2NiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCkBAIC04MCw2ICs3OSw1MSBAQAogCXUzMiBxY19pZDsKIH07CiAKK3N0YXRpYyBMSVNUX0hFQUQocWRfbHJ1X2xpc3QpOworc3RhdGljIGF0b21pY190IHFkX2xydV9jb3VudCA9IEFUT01JQ19JTklUKDApOworc3RhdGljIHNwaW5sb2NrX3QgcWRfbHJ1X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK2ludCBnZnMyX3Nocmlua19xZF9tZW1vcnkoaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcDsKKworCWlmIChuciA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQorCQlyZXR1cm4gLTE7CisKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKKwl3aGlsZSAobnIgJiYgIWxpc3RfZW1wdHkoJnFkX2xydV9saXN0KSkgeworCQlxZCA9IGxpc3RfZW50cnkocWRfbHJ1X2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9yZWNsYWltKTsKKwkJc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CisKKwkJLyogRnJlZSBmcm9tIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGxpc3QgKi8KKwkJbGlzdF9kZWwoJnFkLT5xZF9saXN0KTsKKworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9zbG90X2NvdW50KTsKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfYmhfY291bnQpOworCisJCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7CisJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOworCisJCS8qIERlbGV0ZSBpdCBmcm9tIHRoZSBjb21tb24gcmVjbGFpbSBsaXN0ICovCisJCWxpc3RfZGVsX2luaXQoJnFkLT5xZF9yZWNsYWltKTsKKwkJYXRvbWljX2RlYygmcWRfbHJ1X2NvdW50KTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKwkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKKwkJbnItLTsKKwl9CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKworb3V0OgorCXJldHVybiAoYXRvbWljX3JlYWQoJnFkX2xydV9jb3VudCkgKiBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlKSAvIDEwMDsKK30KKwogc3RhdGljIHU2NCBxZDJvZmZzZXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJdTY0IG9mZnNldDsKQEAgLTEwMCwyMiArMTQ0LDE4IEBACiAJaWYgKCFxZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlxZC0+cWRfY291bnQgPSAxOworCWF0b21pY19zZXQoJnFkLT5xZF9jb3VudCwgMSk7CiAJcWQtPnFkX2lkID0gaWQ7CiAJaWYgKHVzZXIpCiAJCXNldF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpOwogCXFkLT5xZF9zbG90ID0gLTE7CisJSU5JVF9MSVNUX0hFQUQoJnFkLT5xZF9yZWNsYWltKTsKIAogCWVycm9yID0gZ2ZzMl9nbG9ja19nZXQoc2RwLCAyICogKHU2NClpZCArICF1c2VyLAogCQkJICAgICAgJmdmczJfcXVvdGFfZ2xvcHMsIENSRUFURSwgJnFkLT5xZF9nbCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWw7CiAKLQllcnJvciA9IGdmczJfbHZiX2hvbGQocWQtPnFkX2dsKTsKLQlnZnMyX2dsb2NrX3B1dChxZC0+cWRfZ2wpOwotCWlmIChlcnJvcikKLQkJZ290byBmYWlsOwotCiAJKnFkcCA9IHFkOwogCiAJcmV0dXJuIDA7CkBAIC0xMzUsMTEgKzE3NSwxNyBAQAogCiAJZm9yICg7OykgewogCQlmb3VuZCA9IDA7Ci0JCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocWQsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKIAkJCWlmIChxZC0+cWRfaWQgPT0gaWQgJiYKIAkJCSAgICAhdGVzdF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpID09ICF1c2VyKSB7Ci0JCQkJcWQtPnFkX2NvdW50Kys7CisJCQkJaWYgKCFhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSAmJgorCQkJCSAgICAhbGlzdF9lbXB0eSgmcWQtPnFkX3JlY2xhaW0pKSB7CisJCQkJCS8qIFJlbW92ZSBpdCBmcm9tIHJlY2xhaW0gbGlzdCAqLworCQkJCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCQkJCWF0b21pY19kZWMoJnFkX2xydV9jb3VudCk7CisJCQkJfQorCQkJCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTU1LDExICsyMDEsMTEgQEAKIAkJCW5ld19xZCA9IE5VTEw7CiAJCX0KIAotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQlpZiAocWQgfHwgIWNyZWF0ZSkgewogCQkJaWYgKG5ld19xZCkgewotCQkJCWdmczJfbHZiX3VuaG9sZChuZXdfcWQtPnFkX2dsKTsKKwkJCQlnZnMyX2dsb2NrX3B1dChuZXdfcWQtPnFkX2dsKTsKIAkJCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBuZXdfcWQpOwogCQkJfQogCQkJKnFkcCA9IHFkOwpAQCAtMTc1LDIxICsyMjEsMTggQEAKIHN0YXRpYyB2b2lkIHFkX2hvbGQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKLQotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9jb3VudCk7Ci0JcWQtPnFkX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJZ2ZzMl9hc3NlcnQoc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIH0KIAogc3RhdGljIHZvaWQgcWRfcHV0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7Ci0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX2NvdW50KTsKLQlpZiAoIS0tcWQtPnFkX2NvdW50KQotCQlxZC0+cWRfbGFzdF90b3VjaGVkID0gamlmZmllczsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmcWQtPnFkX2NvdW50LCAmcWRfbHJ1X2xvY2spKSB7CisJCS8qIEFkZCB0byB0aGUgcmVjbGFpbSBsaXN0ICovCisJCWxpc3RfYWRkX3RhaWwoJnFkLT5xZF9yZWNsYWltLCAmcWRfbHJ1X2xpc3QpOworCQlhdG9taWNfaW5jKCZxZF9scnVfY291bnQpOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOworCX0KIH0KIAogc3RhdGljIGludCBzbG90X2dldChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKQEAgLTE5OCwxMCArMjQxLDEwIEBACiAJdW5zaWduZWQgaW50IGMsIG8gPSAwLCBiOwogCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAocWQtPnFkX3Nsb3RfY291bnQrKykgewotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjUsMTMgKzI2OCwxMyBAQAogCiAJc2RwLT5zZF9xdW90YV9iaXRtYXBbY11bb10gfD0gMSA8PCBiOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCXJldHVybiAwOwogCiBmYWlsOgogCXFkLT5xZF9zbG90X2NvdW50LS07Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIApAQCAtMjM5LDIzICsyODIsMjMgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCXFkLT5xZF9zbG90X2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgc2xvdF9wdXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlpZiAoIS0tcWQtPnFkX3Nsb3RfY291bnQpIHsKIAkJZ2ZzMl9pY2JpdF9tdW5nZShzZHAsIHNkcC0+c2RfcXVvdGFfYml0bWFwLCBxZC0+cWRfc2xvdCwgMCk7CiAJCXFkLT5xZF9zbG90ID0gLTE7CiAJfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgYmhfZ2V0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQpAQCAtMzMwLDcgKzM3Myw3IEBACiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocWQsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKIAkJaWYgKHRlc3RfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpIHx8CkBAIC0zNDEsOCArMzg0LDggQEAKIAkJbGlzdF9tb3ZlX3RhaWwoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAogCQlzZXRfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NvdW50KTsKLQkJcWQtPnFkX2NvdW50Kys7CisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJCXFkLT5xZF9jaGFuZ2Vfc3luYyA9IHFkLT5xZF9jaGFuZ2U7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJCXFkLT5xZF9zbG90X2NvdW50Kys7CkBAIC0zNTQsNyArMzk3LDcgQEAKIAlpZiAoIWZvdW5kKQogCQlxZCA9IE5VTEw7CiAKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHFkKSB7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY2hhbmdlX3N5bmMpOwpAQCAtMzc5LDI0ICs0MjIsMjQgQEAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHRlc3RfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpIHx8CiAJICAgICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkgewotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJbGlzdF9tb3ZlX3RhaWwoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAogCXNldF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncyk7Ci0JZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jb3VudCk7Ci0JcWQtPnFkX2NvdW50Kys7CisJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKTsKKwlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogCXFkLT5xZF9jaGFuZ2Vfc3luYyA9IHFkLT5xZF9jaGFuZ2U7CiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlxZC0+cWRfc2xvdF9jb3VudCsrOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY2hhbmdlX3N5bmMpOwogCWlmIChiaF9nZXQocWQpKSB7CkBAIC01NTYsOSArNTk5LDkgQEAKIAl4ID0gYmU2NF90b19jcHUocWMtPnFjX2NoYW5nZSkgKyBjaGFuZ2U7CiAJcWMtPnFjX2NoYW5nZSA9IGNwdV90b19iZTY0KHgpOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXFkLT5xZF9jaGFuZ2UgPSB4OwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAoIXgpIHsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKTsKQEAgLTgwMiw4ICs4NDUsOCBAQAogCQlsb2ZmX3QgcG9zOwogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdChxX2doKTsKIAkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocWQtPnFkX2dsLAotCQkJCQkgIExNX1NUX0VYQ0xVU0lWRSwgR0xfTk9DQUNIRSwKLQkJCQkJICBxX2doKTsKKwkJCQkJICAgTE1fU1RfRVhDTFVTSVZFLCBHTF9OT0NBQ0hFLAorCQkJCQkgICBxX2doKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCkBAIC04MjAsNyArODYzLDYgQEAKIAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CiAKLQogCQlnZnMyX3F1b3RhX2luKCZxLCBidWYpOwogCQlxbHZiID0gKHN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqKXFkLT5xZF9nbC0+Z2xfbHZiOwogCQlxbHZiLT5xYl9tYWdpYyA9IGNwdV90b19iZTMyKEdGUzJfTUFHSUMpOwpAQCAtODkwLDkgKzkzMiw5IEBACiAJaWYgKCFxZC0+cWRfcWIucWJfbGltaXQpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXZhbHVlID0gcWQtPnFkX2NoYW5nZTsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJc3Bpbl9sb2NrKCZndC0+Z3Rfc3Bpbik7CiAJbnVtID0gZ3QtPmd0X3F1b3RhX3NjYWxlX251bTsKQEAgLTk4NSw5ICsxMDI3LDkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXZhbHVlID0gKHM2NCliZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfdmFsdWUpOwotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQl2YWx1ZSArPSBxZC0+cWRfY2hhbmdlOwotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQlpZiAoYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSAmJiAoczY0KWJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkgPCB2YWx1ZSkgewogCQkJcHJpbnRfbWVzc2FnZShxZCwgImV4Y2VlZGVkIik7CkBAIC0xMTcxLDEzICsxMjEzLDEyIEBACiAJCQlxZC0+cWRfY2hhbmdlID0gcWMucWNfY2hhbmdlOwogCQkJcWQtPnFkX3Nsb3QgPSBzbG90OwogCQkJcWQtPnFkX3Nsb3RfY291bnQgPSAxOwotCQkJcWQtPnFkX2xhc3RfdG91Y2hlZCA9IGppZmZpZXM7CiAKLQkJCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQkJZ2ZzMl9pY2JpdF9tdW5nZShzZHAsIHNkcC0+c2RfcXVvdGFfYml0bWFwLCBzbG90LCAxKTsKIAkJCWxpc3RfYWRkKCZxZC0+cWRfbGlzdCwgJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAJCQlhdG9taWNfaW5jKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQkJZm91bmQrKzsKIAkJfQpAQCAtMTE5Nyw3MyArMTIzOCw0OCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9xdW90YV9zY2FuKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQotewotCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkLCAqc2FmZTsKLQlMSVNUX0hFQUQoZGVhZCk7Ci0KLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHFkLCBzYWZlLCAmc2RwLT5zZF9xdW90YV9saXN0LCBxZF9saXN0KSB7Ci0JCWlmICghcWQtPnFkX2NvdW50ICYmCi0JCSAgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHFkLT5xZF9sYXN0X3RvdWNoZWQgKwotCQkJICAgICAgICBnZnMyX3R1bmVfZ2V0KHNkcCwgZ3RfcXVvdGFfY2FjaGVfc2VjcykgKiBIWikpIHsKLQkJCWxpc3RfbW92ZSgmcWQtPnFkX2xpc3QsICZkZWFkKTsKLQkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLAotCQkJCQkgYXRvbWljX3JlYWQoJnNkcC0+c2RfcXVvdGFfY291bnQpID4gMCk7Ci0JCQlhdG9taWNfZGVjKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmZGVhZCkpIHsKLQkJcWQgPSBsaXN0X2VudHJ5KGRlYWQubmV4dCwgc3RydWN0IGdmczJfcXVvdGFfZGF0YSwgcWRfbGlzdCk7Ci0JCWxpc3RfZGVsKCZxZC0+cWRfbGlzdCk7Ci0KLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfY2hhbmdlKTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2JoX2NvdW50KTsKLQotCQlnZnMyX2x2Yl91bmhvbGQocWQtPnFkX2dsKTsKLQkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOwotCX0KLX0KLQogdm9pZCBnZnMyX3F1b3RhX2NsZWFudXAoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZzZHAtPnNkX3F1b3RhX2xpc3Q7CiAJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CiAJdW5zaWduZWQgaW50IHg7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCXFkID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9saXN0KTsKIAotCQlpZiAocWQtPnFkX2NvdW50ID4gMSB8fAotCQkgICAgKHFkLT5xZF9jb3VudCAmJiAhdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSA+IDEgfHwKKwkJICAgIChhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSAmJgorCQkgICAgICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkpIHsKIAkJCWxpc3RfbW92ZSgmcWQtPnFkX2xpc3QsIGhlYWQpOwotCQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCQkJc2NoZWR1bGUoKTsKLQkJCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAogCQlsaXN0X2RlbCgmcWQtPnFkX2xpc3QpOworCQkvKiBBbHNvIHJlbW92ZSBpZiB0aGlzIHFkIGV4aXN0cyBpbiB0aGUgcmVjbGFpbSBsaXN0ICovCisJCWlmICghbGlzdF9lbXB0eSgmcWQtPnFkX3JlY2xhaW0pKSB7CisJCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCQlhdG9taWNfZGVjKCZxZF9scnVfY291bnQpOworCQl9CiAJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOwotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAotCQlpZiAoIXFkLT5xZF9jb3VudCkgeworCQlpZiAoIWF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKSB7CiAJCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOwogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7CiAJCX0gZWxzZQogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50ID09IDEpOwogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9iaF9jb3VudCk7CiAKLQkJZ2ZzMl9sdmJfdW5ob2xkKHFkLT5xZF9nbCk7CisJCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7CiAJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIHFkKTsKIAotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFhdG9taWNfcmVhZCgmc2RwLT5zZF9xdW90YV9jb3VudCkpOwogCkBAIC0xMzQxLDkgKzEzNTcsNiBAQAogCQlxdW90YWRfY2hlY2tfdGltZW8oc2RwLCAic3luYyIsIGdmczJfcXVvdGFfc3luYywgdCwKIAkJCQkgICAmcXVvdGFkX3RpbWVvLCAmdHVuZS0+Z3RfcXVvdGFfcXVhbnR1bSk7CiAKLQkJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIHR1cm5lZCBpbnRvIGEgc2hyaW5rZXIgKi8KLQkJZ2ZzMl9xdW90YV9zY2FuKHNkcCk7Ci0KIAkJLyogQ2hlY2sgZm9yICYgcmVjb3ZlciBwYXJ0aWFsbHkgdHJ1bmNhdGVkIGlub2RlcyAqLwogCQlxdW90YWRfY2hlY2tfdHJ1bmNfbGlzdChzZHApOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmggYi9mcy9nZnMyL3F1b3RhLmgKaW5kZXggY2VjOTAzMi4uMGZhNWZhNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5oCisrKyBiL2ZzL2dmczIvcXVvdGEuaApAQCAtNDksNCArNDksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2V4dGVybiBpbnQgZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spOworCiAjZW5kaWYgLyogX19RVU9UQV9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JlY292ZXJ5LmMgYi9mcy9nZnMyL3JlY292ZXJ5LmMKaW5kZXggZWZkMDljMy4uMjQ3ZThmNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKQEAgLTQyNywyMCArNDI2LDIzIEBACiB9CiAKIAotc3RhdGljIHZvaWQgZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkLAotCQkJCSAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCitzdGF0aWMgdm9pZCBnZnMyX3JlY292ZXJ5X2RvbmUoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCiB7Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9yZWNvdmVyeV9kb25lKQotCQlyZXR1cm47Ci0KLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3JlY292ZXJ5X2RvbmUoCi0JCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBqaWQsIG1lc3NhZ2UpOworCWNoYXIgZW52X2ppZFsyMF07CisJY2hhciBlbnZfc3RhdHVzWzIwXTsKKwljaGFyICplbnZwW10gPSB7IGVudl9qaWQsIGVudl9zdGF0dXMsIE5VTEwgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworICAgICAgICBscy0+bHNfcmVjb3Zlcl9qaWRfZG9uZSA9IGppZDsKKyAgICAgICAgbHMtPmxzX3JlY292ZXJfamlkX3N0YXR1cyA9IG1lc3NhZ2U7CisJc3ByaW50ZihlbnZfamlkLCAiSklEPSVkIiwgamlkKTsKKwlzcHJpbnRmKGVudl9zdGF0dXMsICJSRUNPVkVSWT0lcyIsCisJCW1lc3NhZ2UgPT0gTE1fUkRfU1VDQ0VTUyA/ICJEb25lIiA6ICJGYWlsZWQiKTsKKyAgICAgICAga29iamVjdF91ZXZlbnRfZW52KCZzZHAtPnNkX2tvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KIAotCiAvKioKLSAqIGdmczJfcmVjb3Zlcl9qb3VybmFsIC0gcmVjb3ZlcnkgYSBnaXZlbiBqb3VybmFsCisgKiBnZnMyX3JlY292ZXJfam91cm5hbCAtIHJlY292ZXIgYSBnaXZlbiBqb3VybmFsCiAgKiBAamQ6IHRoZSBzdHJ1Y3QgZ2ZzMl9qZGVzYyBkZXNjcmliaW5nIHRoZSBqb3VybmFsCiAgKgogICogQWNxdWlyZSB0aGUgam91cm5hbCdzIGxvY2ssIGNoZWNrIHRvIHNlZSBpZiB0aGUgam91cm5hbCBpcyBjbGVhbiwgYW5kCkBAIC01NjEsNyArNTYzLDcgQEAKIAlpZiAoamQtPmpkX2ppZCAhPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmamlfZ2gpOwogCi0JZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfU1VDQ0VTUyk7CisJZ2ZzMl9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfU1VDQ0VTUyk7CiAKIAlpZiAoamQtPmpkX2ppZCAhPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmal9naCk7CkBAIC01ODEsNyArNTgzLDcgQEAKIAlmc19pbmZvKHNkcCwgImppZD0ldTogJXNcbiIsIGpkLT5qZF9qaWQsIChlcnJvcikgPyAiRmFpbGVkIiA6ICJEb25lIik7CiAKIGZhaWw6Ci0JZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfR0FWRVVQKTsKKwlnZnMyX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9HQVZFVVApOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCA4YjAxYzYzLi5mMDNkMDI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtMTMsOCArMTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0xMzIsODEgKzEzMiw5MCBAQAogfQogCiAvKioKKyAqIGdmczJfYml0X3NlYXJjaAorICogQHB0cjogUG9pbnRlciB0byBiaXRtYXAgZGF0YQorICogQG1hc2s6IE1hc2sgdG8gdXNlIChub3JtYWxseSAweDU1NTU1Li4uLiBidXQgYWRqdXN0ZWQgZm9yIHNlYXJjaCBzdGFydCkKKyAqIEBzdGF0ZTogVGhlIHN0YXRlIHdlIGFyZSBzZWFyY2hpbmcgZm9yCisgKgorICogV2UgeG9yIHRoZSBiaXRtYXAgZGF0YSB3aXRoIGEgcGF0dGVyIHdoaWNoIGlzIHRoZSBiaXR3aXNlIG9wcG9zaXRlCisgKiBvZiB3aGF0IHdlIGFyZSBsb29raW5nIGZvciwgdGhpcyBnaXZlcyByaXNlIHRvIGEgcGF0dGVybiBvZiBvbmVzCisgKiB3aGVyZXZlciB0aGVyZSBpcyBhIG1hdGNoLiBTaW5jZSB3ZSBoYXZlIHR3byBiaXRzIHBlciBlbnRyeSwgd2UKKyAqIHRha2UgdGhpcyBwYXR0ZXJuLCBzaGlmdCBpdCBkb3duIGJ5IG9uZSBwbGFjZSBhbmQgdGhlbiBhbmQgaXQgd2l0aAorICogdGhlIG9yaWdpbmFsLiBBbGwgdGhlIGV2ZW4gYml0IHBvc2l0aW9ucyAoMCwyLDQsIGV0YykgdGhlbiByZXByZXNlbnQKKyAqIHN1Y2Nlc3NmdWwgbWF0Y2hlcywgc28gd2UgbWFzayB3aXRoIDB4NTU1NTUuLi4uLiB0byByZW1vdmUgdGhlIHVud2FudGVkCisgKiBvZGQgYml0IHBvc2l0aW9ucy4KKyAqCisgKiBUaGlzIGFsbG93cyBzZWFyY2hpbmcgb2YgYSB3aG9sZSB1NjQgYXQgb25jZSAoMzIgYmxvY2tzKSB3aXRoIGEKKyAqIHNpbmdsZSB0ZXN0IChvbiA2NCBiaXQgYXJjaGVzKS4KKyAqLworCitzdGF0aWMgaW5saW5lIHU2NCBnZnMyX2JpdF9zZWFyY2goY29uc3QgX19sZTY0ICpwdHIsIHU2NCBtYXNrLCB1OCBzdGF0ZSkKK3sKKwl1NjQgdG1wOworCXN0YXRpYyBjb25zdCB1NjQgc2VhcmNoW10gPSB7CisJCVswXSA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCwKKwkJWzFdID0gMHhhYWFhYWFhYWFhYWFhYWFhVUxMLAorCQlbMl0gPSAweDU1NTU1NTU1NTU1NTU1NTVVTEwsCisJCVszXSA9IDB4MDAwMDAwMDAwMDAwMDAwMFVMTCwKKwl9OworCXRtcCA9IGxlNjRfdG9fY3B1KCpwdHIpIF4gc2VhcmNoW3N0YXRlXTsKKwl0bXAgJj0gKHRtcCA+PiAxKTsKKwl0bXAgJj0gbWFzazsKKwlyZXR1cm4gdG1wOworfQorCisvKioKICAqIGdmczJfYml0Zml0IC0gU2VhcmNoIGFuIHJncnAncyBiaXRtYXAgYnVmZmVyIHRvIGZpbmQgYSBiaXQtcGFpciByZXByZXNlbnRpbmcKICAqICAgICAgIGEgYmxvY2sgaW4gYSBnaXZlbiBhbGxvY2F0aW9uIHN0YXRlLgogICogQGJ1ZmZlcjogdGhlIGJ1ZmZlciB0aGF0IGhvbGRzIHRoZSBiaXRtYXBzCi0gKiBAYnVmbGVuOiB0aGUgbGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIGJ1ZmZlcgorICogQGxlbjogdGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBidWZmZXIKICAqIEBnb2FsOiBzdGFydCBzZWFyY2ggYXQgdGhpcyBibG9jaydzIGJpdC1wYWlyICh3aXRoaW4gQGJ1ZmZlcikKLSAqIEBvbGRfc3RhdGU6IEdGUzJfQkxLU1RfWFhYIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgd2UncmUgbG9va2luZyBmb3IuCisgKiBAc3RhdGU6IEdGUzJfQkxLU1RfWFhYIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgd2UncmUgbG9va2luZyBmb3IuCiAgKgogICogU2NvcGUgb2YgQGdvYWwgYW5kIHJldHVybmVkIGJsb2NrIG51bWJlciBpcyBvbmx5IHdpdGhpbiB0aGlzIGJpdG1hcCBidWZmZXIsCiAgKiBub3QgZW50aXJlIHJncnAgb3IgZmlsZXN5c3RlbS4gIEBidWZmZXIgd2lsbCBiZSBvZmZzZXQgZnJvbSB0aGUgYWN0dWFsCi0gKiBiZWdpbm5pbmcgb2YgYSBiaXRtYXAgYmxvY2sgYnVmZmVyLCBza2lwcGluZyBhbnkgaGVhZGVyIHN0cnVjdHVyZXMuCisgKiBiZWdpbm5pbmcgb2YgYSBiaXRtYXAgYmxvY2sgYnVmZmVyLCBza2lwcGluZyBhbnkgaGVhZGVyIHN0cnVjdHVyZXMsIGJ1dAorICogaGVhZGVycyBhcmUgYWx3YXlzIGEgbXVsdGlwbGUgb2YgNjQgYml0cyBsb25nIHNvIHRoYXQgdGhlIGJ1ZmZlciBpcworICogYWx3YXlzIGFsaWduZWQgdG8gYSA2NCBiaXQgYm91bmRhcnkuCisgKgorICogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBpbiBieXRlcywgYnV0IGlzIGl0IGFzc3VtZWQgdGhhdCBpdCBpcworICogYWx3YXlzIG9rIHRvIHRvIHJlYWQgYSBjb21wbGV0ZSBtdWx0aXBsZSBvZiA2NCBiaXRzIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBibG9jayBpbiBjYXNlIHRoZSBlbmQgaXMgbm8gYWxpZ25lZCB0byBhIG5hdHVyYWwgYm91bmRhcnkuCiAgKgogICogUmV0dXJuOiB0aGUgYmxvY2sgbnVtYmVyIChiaXRtYXAgYnVmZmVyIHNjb3BlKSB0aGF0IHdhcyBmb3VuZAogICovCiAKLXN0YXRpYyB1MzIgZ2ZzMl9iaXRmaXQoY29uc3QgdTggKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdTMyIGdvYWwsCi0JCSAgICAgICB1OCBvbGRfc3RhdGUpCitzdGF0aWMgdTMyIGdmczJfYml0Zml0KGNvbnN0IHU4ICpidWYsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4sCisJCSAgICAgICB1MzIgZ29hbCwgdTggc3RhdGUpCiB7Ci0JY29uc3QgdTggKmJ5dGUsICpzdGFydCwgKmVuZDsKLQlpbnQgYml0LCBzdGFydGJpdDsKLQl1MzIgZzEsIGcyLCBtaXNhbGlnbmVkOwotCXVuc2lnbmVkIGxvbmcgKnBsb25nOwotCXVuc2lnbmVkIGxvbmcgbHNraXB2YWw7CisJdTMyIHNwb2ludCA9IChnb2FsIDw8IDEpICYgKCg4KnNpemVvZih1NjQpKSAtIDEpOworCWNvbnN0IF9fbGU2NCAqcHRyID0gKChfX2xlNjQgKilidWYpICsgKGdvYWwgPj4gNSk7CisJY29uc3QgX19sZTY0ICplbmQgPSAoX19sZTY0ICopKGJ1ZiArIEFMSUdOKGxlbiwgc2l6ZW9mKHU2NCkpKTsKKwl1NjQgdG1wOworCXU2NCBtYXNrID0gMHg1NTU1NTU1NTU1NTU1NTU1VUxMOworCXUzMiBiaXQ7CiAKLQlsc2tpcHZhbCA9IChvbGRfc3RhdGUgJiBHRlMyX0JMS1NUX1VTRUQpID8gTEJJVFNLSVAwMCA6IExCSVRTS0lQNTU7Ci0JZzEgPSAoZ29hbCAvIEdGUzJfTkJCWSk7Ci0Jc3RhcnQgPSBidWZmZXIgKyBnMTsKLQlieXRlID0gc3RhcnQ7Ci0gICAgICAgIGVuZCA9IGJ1ZmZlciArIGJ1ZmxlbjsKLQlnMiA9IEFMSUdOKGcxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCXBsb25nID0gKHVuc2lnbmVkIGxvbmcgKikoYnVmZmVyICsgZzIpOwotCXN0YXJ0Yml0ID0gYml0ID0gKGdvYWwgJSBHRlMyX05CQlkpICogR0ZTMl9CSVRfU0laRTsKLQltaXNhbGlnbmVkID0gZzIgLSBnMTsKLQlpZiAoIW1pc2FsaWduZWQpCi0JCWdvdG8gdWxvbmdfYWxpZ25lZDsKLS8qIHBhcnNlIHRoZSBiaXRtYXAgYSBieXRlIGF0IGEgdGltZSAqLwotbWlzYWxpZ25lZDoKLQl3aGlsZSAoYnl0ZSA8IGVuZCkgewotCQlpZiAoKCgqYnl0ZSA+PiBiaXQpICYgR0ZTMl9CSVRfTUFTSykgPT0gb2xkX3N0YXRlKSB7Ci0JCQlyZXR1cm4gZ29hbCArCi0JCQkJKCgoYnl0ZSAtIHN0YXJ0KSAqIEdGUzJfTkJCWSkgKwotCQkJCSAoKGJpdCAtIHN0YXJ0Yml0KSA+PiAxKSk7Ci0JCX0KLQkJYml0ICs9IEdGUzJfQklUX1NJWkU7Ci0JCWlmIChiaXQgPj0gR0ZTMl9OQkJZICogR0ZTMl9CSVRfU0laRSkgewotCQkJYml0ID0gMDsKLQkJCWJ5dGUrKzsKLQkJCW1pc2FsaWduZWQtLTsKLQkJCWlmICghbWlzYWxpZ25lZCkgewotCQkJCXBsb25nID0gKHVuc2lnbmVkIGxvbmcgKilieXRlOwotCQkJCWdvdG8gdWxvbmdfYWxpZ25lZDsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gQkZJVE5PRU5UOworCUJVR19PTihzdGF0ZSA+IDMpOwogCi0vKiBwYXJzZSB0aGUgYml0bWFwIGEgdW5zaWduZWQgbG9uZyBhdCBhIHRpbWUgKi8KLXVsb25nX2FsaWduZWQ6Ci0JLyogU3RvcCBhdCAiZW5kIC0gMSIgb3IgZWxzZSBwcmVmZXRjaCBjYW4gZ28gcGFzdCB0aGUgZW5kIGFuZCBzZWdmYXVsdC4KLQkgICBXZSBjb3VsZCAiaWYiIGl0IGJ1dCB3ZSdkIGxvc2Ugc29tZSBvZiB0aGUgcGVyZm9ybWFuY2UgZ2FpbmVkLgotCSAgIFRoaXMgd2F5IHdpbGwgb25seSBzbG93IGRvd24gc2VhcmNoaW5nIHRoZSB2ZXJ5IGxhc3QgNC84IGJ5dGVzCi0JICAgZGVwZW5kaW5nIG9uIGFyY2hpdGVjdHVyZS4gIEkndmUgZXhwZXJpbWVudGVkIHdpdGggc2V2ZXJhbCB3YXlzCi0JICAgb2Ygd3JpdGluZyB0aGlzIHNlY3Rpb24gc3VjaCBhcyB1c2luZyBhbiBlbHNlIGJlZm9yZSB0aGUgZ290bwotCSAgIGJ1dCB0aGlzIG9uZSBzZWVtcyB0byBiZSB0aGUgZmFzdGVzdC4gKi8KLQl3aGlsZSAoKHVuc2lnbmVkIGNoYXIgKilwbG9uZyA8IGVuZCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgewotCQlwcmVmZXRjaChwbG9uZyArIDEpOwotCQlpZiAoKCgqcGxvbmcpICYgTEJJVE1BU0spICE9IGxza2lwdmFsKQotCQkJYnJlYWs7Ci0JCXBsb25nKys7CisJLyogTWFzayBvZmYgYml0cyB3ZSBkb24ndCBjYXJlIGFib3V0IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VhcmNoICovCisJbWFzayA8PD0gc3BvaW50OworCXRtcCA9IGdmczJfYml0X3NlYXJjaChwdHIsIG1hc2ssIHN0YXRlKTsKKwlwdHIrKzsKKwl3aGlsZSh0bXAgPT0gMCAmJiBwdHIgPCBlbmQpIHsKKwkJdG1wID0gZ2ZzMl9iaXRfc2VhcmNoKHB0ciwgMHg1NTU1NTU1NTU1NTU1NTU1VUxMLCBzdGF0ZSk7CisJCXB0cisrOwogCX0KLQlpZiAoKHVuc2lnbmVkIGNoYXIgKilwbG9uZyA8IGVuZCkgewotCQlieXRlID0gKGNvbnN0IHU4ICopcGxvbmc7Ci0JCW1pc2FsaWduZWQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMTsKLQkJZ290byBtaXNhbGlnbmVkOwotCX0KLQlyZXR1cm4gQkZJVE5PRU5UOworCS8qIE1hc2sgb2ZmIGFueSBiaXRzIHdoaWNoIGFyZSBtb3JlIHRoYW4gbGVuIGJ5dGVzIGZyb20gdGhlIHN0YXJ0ICovCisJaWYgKHB0ciA9PSBlbmQgJiYgKGxlbiAmIChzaXplb2YodTY0KSAtIDEpKSkKKwkJdG1wICY9ICgoKHU2NCl+MCkgPj4gKDY0IC0gOCoobGVuICYgKHNpemVvZih1NjQpIC0gMSkpKSk7CisJLyogRGlkbid0IGZpbmQgYW55dGhpbmcsIHNvIHJldHVybiAqLworCWlmICh0bXAgPT0gMCkKKwkJcmV0dXJuIEJGSVROT0VOVDsKKwlwdHItLTsKKwliaXQgPSBmbHM2NCh0bXApOworCWJpdC0tOwkJLyogZmxzNjQgYWx3YXlzIGFkZHMgb25lIHRvIHRoZSBiaXQgY291bnQgKi8KKwliaXQgLz0gMjsJLyogdHdvIGJpdHMgcGVyIGVudHJ5IGluIHRoZSBiaXRtYXAgKi8KKwlyZXR1cm4gKCgoY29uc3QgdW5zaWduZWQgY2hhciAqKXB0ciAtIGJ1ZikgKiBHRlMyX05CQlkpICsgYml0OwogfQogCiAvKioKQEAgLTgzMSw2ICs4NDAsNTggQEAKIAlzcGluX3VubG9jaygmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfcmdycF9zZW5kX2Rpc2NhcmRzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgb2Zmc2V0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZ2ZzMl9iaXRtYXAgKmJpKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gc2ItPnNfYmRldjsKKwljb25zdCB1bnNpZ25lZCBpbnQgc2VjdHNfcGVyX2JsayA9IHNkcC0+c2Rfc2Iuc2JfYnNpemUgLworCQkJCQkgICBiZGV2X2hhcmRzZWN0X3NpemUoc2ItPnNfYmRldik7CisJdTY0IGJsazsKKwlzZWN0b3JfdCBzdGFydCA9IDA7CisJc2VjdG9yX3QgbnJfc2VjdHMgPSAwOworCWludCBydjsKKwl1bnNpZ25lZCBpbnQgeDsKKworCWZvciAoeCA9IDA7IHggPCBiaS0+YmlfbGVuOyB4KyspIHsKKwkJY29uc3QgdTggKm9yaWcgPSBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQgKyB4OworCQljb25zdCB1OCAqY2xvbmUgPSBiaS0+YmlfY2xvbmUgKyBiaS0+Ymlfb2Zmc2V0ICsgeDsKKwkJdTggZGlmZiA9IH4oKm9yaWcgfCAoKm9yaWcgPj4gMSkpICYgKCpjbG9uZSB8ICgqY2xvbmUgPj4gMSkpOworCQlkaWZmICY9IDB4NTU7CisJCWlmIChkaWZmID09IDApCisJCQljb250aW51ZTsKKwkJYmxrID0gb2Zmc2V0ICsgKChiaS0+Ymlfc3RhcnQgKyB4KSAqIEdGUzJfTkJCWSk7CisJCWJsayAqPSBzZWN0c19wZXJfYmxrOyAvKiBjb252ZXJ0IHRvIHNlY3RvcnMgKi8KKwkJd2hpbGUoZGlmZikgeworCQkJaWYgKGRpZmYgJiAxKSB7CisJCQkJaWYgKG5yX3NlY3RzID09IDApCisJCQkJCWdvdG8gc3RhcnRfbmV3X2V4dGVudDsKKwkJCQlpZiAoKHN0YXJ0ICsgbnJfc2VjdHMpICE9IGJsaykgeworCQkJCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LAorCQkJCQkJCSAgICBucl9zZWN0cywgR0ZQX05PRlMpOworCQkJCQlpZiAocnYpCisJCQkJCQlnb3RvIGZhaWw7CisJCQkJCW5yX3NlY3RzID0gMDsKK3N0YXJ0X25ld19leHRlbnQ6CisJCQkJCXN0YXJ0ID0gYmxrOworCQkJCX0KKwkJCQlucl9zZWN0cyArPSBzZWN0c19wZXJfYmxrOworCQkJfQorCQkJZGlmZiA+Pj0gMjsKKwkJCWJsayArPSBzZWN0c19wZXJfYmxrOworCQl9CisJfQorCWlmIChucl9zZWN0cykgeworCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LCBucl9zZWN0cywgR0ZQX05PRlMpOworCQlpZiAocnYpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybjsKK2ZhaWw6CisJZnNfd2FybihzZHAsICJlcnJvciAlZCBvbiBkaXNjYXJkIHJlcXVlc3QsIHR1cm5pbmcgZGlzY2FyZHMgb2ZmIGZvciB0aGlzIGZpbGVzeXN0ZW0iLCBydik7CisJc2RwLT5zZF9hcmdzLmFyX2Rpc2NhcmQgPSAwOworfQorCiB2b2lkIGdmczJfcmdycF9yZXBvbGlzaF9jbG9uZXMoc3RydWN0IGdmczJfcmdycGQgKnJnZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHJnZC0+cmRfc2JkOwpAQCAtODQxLDYgKzkwMiw4IEBACiAJCXN0cnVjdCBnZnMyX2JpdG1hcCAqYmkgPSByZ2QtPnJkX2JpdHMgKyB4OwogCQlpZiAoIWJpLT5iaV9jbG9uZSkKIAkJCWNvbnRpbnVlOworCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2Rpc2NhcmQpCisJCQlnZnMyX3JncnBfc2VuZF9kaXNjYXJkcyhzZHAsIHJnZC0+cmRfZGF0YTAsIGJpKTsKIAkJbWVtY3B5KGJpLT5iaV9jbG9uZSArIGJpLT5iaV9vZmZzZXQsCiAJCSAgICAgICBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQsIGJpLT5iaV9sZW4pOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCAxNDFiNzgxLi42MDE5MTNlIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMzM5LDcgKzMzOCw2IEBACiAJCQkJICAgIHN0cnVjdCBnZnMyX2hvbGRlciAqdF9naCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGppX2doOwogCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKIAlzdHJ1Y3QgbGZjYyAqbGZjYzsKIAlMSVNUX0hFQUQobGlzdCk7CkBAIC0zODcsNyArMzg1LDYgQEAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmxmY2MtPmdoKTsKIAkJa2ZyZWUobGZjYyk7CiAJfQotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqaV9naCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmggYi9mcy9nZnMyL3N1cGVyLmgKaW5kZXggZjZiOGIwMC4uOTFhYmRiZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5oCisrKyBiL2ZzL2dmczIvc3VwZXIuaApAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgImluY29yZS5oIgogCi12b2lkIGdmczJfbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gdm9pZCBnZnMyX2xtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZnMyX2ppbmRleF9zaXplKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewpAQCAtMjcsMjEgKzI3LDIzIEBACiAKIHZvaWQgZ2ZzMl9qaW5kZXhfZnJlZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKLXN0cnVjdCBnZnMyX2pkZXNjICpnZnMyX2pkZXNjX2ZpbmQoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpOwotaW50IGdmczJfamRlc2NfY2hlY2soc3RydWN0IGdmczJfamRlc2MgKmpkKTsKK2V4dGVybiBpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpkYXRhKTsKIAotaW50IGdmczJfbG9va3VwX2luX21hc3Rlcl9kaXIoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZpbGVuYW1lLAotCQkJICAgICAgc3RydWN0IGdmczJfaW5vZGUgKippcHApOworZXh0ZXJuIHN0cnVjdCBnZnMyX2pkZXNjICpnZnMyX2pkZXNjX2ZpbmQoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpOworZXh0ZXJuIGludCBnZnMyX2pkZXNjX2NoZWNrKHN0cnVjdCBnZnMyX2pkZXNjICpqZCk7CiAKLWludCBnZnMyX21ha2VfZnNfcncoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX2xvb2t1cF9pbl9tYXN0ZXJfZGlyKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgIHN0cnVjdCBnZnMyX2lub2RlICoqaXBwKTsKIAotaW50IGdmczJfc3RhdGZzX2luaXQoc3RydWN0IGdmczJfc2JkICpzZHApOwotdm9pZCBnZnMyX3N0YXRmc19jaGFuZ2Uoc3RydWN0IGdmczJfc2JkICpzZHAsCi0JCQlzNjQgdG90YWwsIHM2NCBmcmVlLCBzNjQgZGlub2Rlcyk7Ci1pbnQgZ2ZzMl9zdGF0ZnNfc3luYyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gaW50IGdmczJfbWFrZV9mc19ydyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKLWludCBnZnMyX2ZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci12b2lkIGdmczJfdW5mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX3N0YXRmc19pbml0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfc3RhdGZzX2NoYW5nZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgczY0IHRvdGFsLCBzNjQgZnJlZSwKKwkJCSAgICAgICBzNjQgZGlub2Rlcyk7CitleHRlcm4gaW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IGdmczJfc2JkICpzZHApOworCitleHRlcm4gaW50IGdmczJfZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfdW5mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOwogCiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2ZzMl9mc190eXBlOwogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdmczJtZXRhX2ZzX3R5cGU7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCAyNmMxZmE3Li43NjU1ZjUwMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zeXMuYworKysgYi9mcy9nZnMyL3N5cy5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0yNSw2ICsyNCw3IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJxdW90YS5oIgogI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJnbG9wcy5oIgogCiBzdGF0aWMgc3NpemVfdCBpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CkBAIC0zNyw2ICszNywzMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzZHAtPnNkX2ZzbmFtZSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl91dWlkX3ZhbGlkKGNvbnN0IHU4ICp1dWlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHV1aWRbaV0pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHV1aWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCWNvbnN0IHU4ICp1dWlkID0gc2RwLT5zZF9zYi5zYl91dWlkOworCWJ1ZlswXSA9ICdcMCc7CisJaWYgKCFnZnMyX3V1aWRfdmFsaWQodXVpZCkpCisJCXJldHVybiAwOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtIgorCQkJIiUwMlglMDJYLSUwMlglMDJYLSUwMlglMDJYJTAyWCUwMlglMDJYJTAyWFxuIiwKKwkJCXV1aWRbMF0sIHV1aWRbMV0sIHV1aWRbMl0sIHV1aWRbM10sIHV1aWRbNF0sIHV1aWRbNV0sCisJCQl1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLCB1dWlkWzEwXSwgdXVpZFsxMV0sCisJCQl1dWlkWzEyXSwgdXVpZFsxM10sIHV1aWRbMTRdLCB1dWlkWzE1XSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGZyZWV6ZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtMTQ4LDYgKzE3Miw0NiBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGRlbW90ZV9ycV9zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKKwljb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnbG9wczsKKwl1bnNpZ25lZCBpbnQgZ2xtb2RlOworCXVuc2lnbmVkIGludCBnbHR5cGU7CisJdW5zaWduZWQgbG9uZyBsb25nIGdsbnVtOworCWNoYXIgbW9kZVsxNl07CisJaW50IHJ2OworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXJ2ID0gc3NjYW5mKGJ1ZiwgIiV1OiVsbHUgJTE1cyIsICZnbHR5cGUsICZnbG51bSwKKwkJICAgIG1vZGUpOworCWlmIChydiAhPSAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJjbXAobW9kZSwgIkVYIikgPT0gMCkKKwkJZ2xtb2RlID0gTE1fU1RfVU5MT0NLRUQ7CisJZWxzZSBpZiAoKHN0cmNtcChtb2RlLCAiQ1ciKSA9PSAwKSB8fCAoc3RyY21wKG1vZGUsICJERiIpID09IDApKQorCQlnbG1vZGUgPSBMTV9TVF9ERUZFUlJFRDsKKwllbHNlIGlmICgoc3RyY21wKG1vZGUsICJQUiIpID09IDApIHx8IChzdHJjbXAobW9kZSwgIlNIIikgPT0gMCkpCisJCWdsbW9kZSA9IExNX1NUX1NIQVJFRDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGdsdHlwZSA+IExNX1RZUEVfSk9VUk5BTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZ2xvcHMgPSBnZnMyX2dsb3BzX2xpc3RbZ2x0eXBlXTsKKwlpZiAoZ2xvcHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcnYgPSBnZnMyX2dsb2NrX2dldChzZHAsIGdsbnVtLCBnbG9wcywgMCwgJmdsKTsKKwlpZiAocnYpCisJCXJldHVybiBydjsKKwlnZnMyX2dsb2NrX2NiKGdsLCBnbG1vZGUpOworCWdmczJfZ2xvY2tfcHV0KGdsKTsKKwlyZXR1cm4gbGVuOworfQorCiBzdHJ1Y3QgZ2ZzMl9hdHRyIHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZnMyX3NiZCAqLCBjaGFyICopOwpAQCAtMTU5LDIyICsyMjMsMjYgQEAKIAogR0ZTMl9BVFRSKGlkLCAgICAgICAgICAgICAgICAgIDA0NDQsIGlkX3Nob3csICAgICAgIE5VTEwpOwogR0ZTMl9BVFRSKGZzbmFtZSwgICAgICAgICAgICAgIDA0NDQsIGZzbmFtZV9zaG93LCAgIE5VTEwpOworR0ZTMl9BVFRSKHV1aWQsICAgICAgICAgICAgICAgIDA0NDQsIHV1aWRfc2hvdywgICAgIE5VTEwpOwogR0ZTMl9BVFRSKGZyZWV6ZSwgICAgICAgICAgICAgIDA2NDQsIGZyZWV6ZV9zaG93LCAgIGZyZWV6ZV9zdG9yZSk7CiBHRlMyX0FUVFIod2l0aGRyYXcsICAgICAgICAgICAgMDY0NCwgd2l0aGRyYXdfc2hvdywgd2l0aGRyYXdfc3RvcmUpOwogR0ZTMl9BVFRSKHN0YXRmc19zeW5jLCAgICAgICAgIDAyMDAsIE5VTEwsICAgICAgICAgIHN0YXRmc19zeW5jX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9zeW5jLCAgICAgICAgICAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9zeW5jX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9yZWZyZXNoX3VzZXIsICAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9yZWZyZXNoX3VzZXJfc3RvcmUpOwogR0ZTMl9BVFRSKHF1b3RhX3JlZnJlc2hfZ3JvdXAsIDAyMDAsIE5VTEwsICAgICAgICAgIHF1b3RhX3JlZnJlc2hfZ3JvdXBfc3RvcmUpOworR0ZTMl9BVFRSKGRlbW90ZV9ycSwgICAgICAgICAgIDAyMDAsIE5VTEwsCSAgICBkZW1vdGVfcnFfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ2ZzMl9hdHRyc1tdID0gewogCSZnZnMyX2F0dHJfaWQuYXR0ciwKIAkmZ2ZzMl9hdHRyX2ZzbmFtZS5hdHRyLAorCSZnZnMyX2F0dHJfdXVpZC5hdHRyLAogCSZnZnMyX2F0dHJfZnJlZXplLmF0dHIsCiAJJmdmczJfYXR0cl93aXRoZHJhdy5hdHRyLAogCSZnZnMyX2F0dHJfc3RhdGZzX3N5bmMuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3N5bmMuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3JlZnJlc2hfdXNlci5hdHRyLAogCSZnZnMyX2F0dHJfcXVvdGFfcmVmcmVzaF9ncm91cC5hdHRyLAorCSZnZnMyX2F0dHJfZGVtb3RlX3JxLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTIyNCwxNCArMjkyLDE0NSBAQAogCiBMT0NLU1RSVUNUX0FUVFIoamlkLCAgICAgICIldVxuIik7CiBMT0NLU1RSVUNUX0FUVFIoZmlyc3QsICAgICIldVxuIik7Ci1MT0NLU1RSVUNUX0FUVFIobHZiX3NpemUsICIldVxuIik7Ci1MT0NLU1RSVUNUX0FUVFIoZmxhZ3MsICAgICIlZFxuIik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsb2Nrc3RydWN0X2F0dHJzW10gPSB7CiAJJmxvY2tzdHJ1Y3RfYXR0cl9qaWQuYXR0ciwKIAkmbG9ja3N0cnVjdF9hdHRyX2ZpcnN0LmF0dHIsCi0JJmxvY2tzdHJ1Y3RfYXR0cl9sdmJfc2l6ZS5hdHRyLAotCSZsb2Nrc3RydWN0X2F0dHJfZmxhZ3MuYXR0ciwKKwlOVUxMLAorfTsKKworLyoKKyAqIGxvY2tfbW9kdWxlLiBPcmlnaW5hbGx5IGZyb20gbG9ja19kbG0KKyAqLworCitzdGF0aWMgc3NpemVfdCBwcm90b19uYW1lX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqb3BzID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wczsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3BzLT5sbV9wcm90b19uYW1lKTsKK30KKworc3RhdGljIHNzaXplX3QgYmxvY2tfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJc3NpemVfdCByZXQ7CisJaW50IHZhbCA9IDA7CisKKwlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKSkKKwkJdmFsID0gMTsKKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsb2NrX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlzc2l6ZV90IHJldCA9IGxlbjsKKwlpbnQgdmFsOworCisJdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOworCisJaWYgKHZhbCA9PSAxKQorCQlzZXRfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncyk7CisJZWxzZSBpZiAodmFsID09IDApIHsKKwkJY2xlYXJfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCWdmczJfZ2xvY2tfdGhhdyhzZHApOworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxraWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGxzLT5sc19pZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxrZmlyc3Rfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19maXJzdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpcnN0X2RvbmVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19maXJzdF9kb25lKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkKTsKK30KKworc3RhdGljIHZvaWQgZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKQoreworCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKKworCXNwaW5fbG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShqZCwgJnNkcC0+c2RfamluZGV4X2xpc3QsIGpkX2xpc3QpIHsKKwkJaWYgKGpkLT5qZF9qaWQgIT0gamlkKQorCQkJY29udGludWU7CisJCWpkLT5qZF9kaXJ0eSA9IDE7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWxzLT5sc19yZWNvdmVyX2ppZCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKwlnZnMyX2pkZXNjX21ha2VfZGlydHkoc2RwLCBscy0+bHNfcmVjb3Zlcl9qaWQpOworCWlmIChzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpCisJCXdha2VfdXBfcHJvY2VzcyhzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfZG9uZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkX2RvbmUpOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0YXR1c19zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkX3N0YXR1cyk7Cit9CisKK3N0cnVjdCBnZGxtX2F0dHIgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworI2RlZmluZSBHRExNX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSBcCitzdGF0aWMgc3RydWN0IGdkbG1fYXR0ciBnZGxtX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK0dETE1fQVRUUihwcm90b19uYW1lLCAgICAgMDQ0NCwgcHJvdG9fbmFtZV9zaG93LCAgICAgTlVMTCk7CitHRExNX0FUVFIoYmxvY2ssICAgICAgICAgIDA2NDQsIGJsb2NrX3Nob3csICAgICAgICAgIGJsb2NrX3N0b3JlKTsKK0dETE1fQVRUUih3aXRoZHJhdywgICAgICAgMDY0NCwgd2l0aGRyYXdfc2hvdywgICAgICAgd2l0aGRyYXdfc3RvcmUpOworR0RMTV9BVFRSKGlkLCAgICAgICAgICAgICAwNDQ0LCBsa2lkX3Nob3csICAgICAgICAgICBOVUxMKTsKK0dETE1fQVRUUihmaXJzdCwgICAgICAgICAgMDQ0NCwgbGtmaXJzdF9zaG93LCAgICAgICAgTlVMTCk7CitHRExNX0FUVFIoZmlyc3RfZG9uZSwgICAgIDA0NDQsIGZpcnN0X2RvbmVfc2hvdywgICAgIE5VTEwpOworR0RMTV9BVFRSKHJlY292ZXIsICAgICAgICAwNjQ0LCByZWNvdmVyX3Nob3csICAgICAgICByZWNvdmVyX3N0b3JlKTsKK0dETE1fQVRUUihyZWNvdmVyX2RvbmUsICAgMDQ0NCwgcmVjb3Zlcl9kb25lX3Nob3csICAgTlVMTCk7CitHRExNX0FUVFIocmVjb3Zlcl9zdGF0dXMsIDA0NDQsIHJlY292ZXJfc3RhdHVzX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG9ja19tb2R1bGVfYXR0cnNbXSA9IHsKKwkmZ2RsbV9hdHRyX3Byb3RvX25hbWUuYXR0ciwKKwkmZ2RsbV9hdHRyX2Jsb2NrLmF0dHIsCisJJmdkbG1fYXR0cl93aXRoZHJhdy5hdHRyLAorCSZnZGxtX2F0dHJfaWQuYXR0ciwKKwkmbG9ja3N0cnVjdF9hdHRyX2ppZC5hdHRyLAorCSZnZGxtX2F0dHJfZmlyc3QuYXR0ciwKKwkmZ2RsbV9hdHRyX2ZpcnN0X2RvbmUuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXIuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXJfZG9uZS5hdHRyLAorCSZnZGxtX2F0dHJfcmVjb3Zlcl9zdGF0dXMuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzczLDcgKzU3Miw2IEBACiBUVU5FX0FUVFIoc3RhdGZzX3Nsb3csIDApOwogVFVORV9BVFRSKG5ld19maWxlc19qZGF0YSwgMCk7CiBUVU5FX0FUVFIocXVvdGFfc2ltdWxfc3luYywgMSk7Ci1UVU5FX0FUVFIocXVvdGFfY2FjaGVfc2VjcywgMSk7CiBUVU5FX0FUVFIoc3RhbGxfc2VjcywgMSk7CiBUVU5FX0FUVFIoc3RhdGZzX3F1YW50dW0sIDEpOwogVFVORV9BVFRSX0RBRU1PTihyZWNvdmVyZF9zZWNzLCByZWNvdmVyZF9wcm9jZXNzKTsKQEAgLTM4OSw3ICs1ODcsNiBAQAogCSZ0dW5lX2F0dHJfY29tcGxhaW5fc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhdGZzX3Nsb3cuYXR0ciwKIAkmdHVuZV9hdHRyX3F1b3RhX3NpbXVsX3N5bmMuYXR0ciwKLQkmdHVuZV9hdHRyX3F1b3RhX2NhY2hlX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YWxsX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YXRmc19xdWFudHVtLmF0dHIsCiAJJnR1bmVfYXR0cl9yZWNvdmVyZF9zZWNzLmF0dHIsCkBAIC00MTQsNiArNjExLDExIEBACiAJLmF0dHJzID0gdHVuZV9hdHRycywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxvY2tfbW9kdWxlX2dyb3VwID0geworCS5uYW1lID0gImxvY2tfbW9kdWxlIiwKKwkuYXR0cnMgPSBsb2NrX21vZHVsZV9hdHRycywKK307CisKIGludCBnZnMyX3N5c19mc19hZGQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJaW50IGVycm9yOwpAQCAtNDM2LDkgKzYzOCwxNSBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2FyZ3M7CiAKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja19tb2R1bGVfZ3JvdXApOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX3R1bmU7CisKIAlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CiAKK2ZhaWxfdHVuZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJnR1bmVfZ3JvdXApOwogZmFpbF9hcmdzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmYXJnc19ncm91cCk7CiBmYWlsX2xvY2tzdHJ1Y3Q6CkBAIC00NTUsMTUgKzY2MywyNyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmdHVuZV9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZhcmdzX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmxvY2tzdHJ1Y3RfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja19tb2R1bGVfZ3JvdXApOwogCWtvYmplY3RfcHV0KCZzZHAtPnNkX2tvYmopOwogfQogCisKIHN0YXRpYyBpbnQgZ2ZzMl91ZXZlbnQoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkgICAgICAgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZnMyX3NiZCwgc2Rfa29iaik7CisJY29uc3QgdTggKnV1aWQgPSBzZHAtPnNkX3NiLnNiX3V1aWQ7CisKIAlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLVEFCTEU9JXMiLCBzZHAtPnNkX3RhYmxlX25hbWUpOwogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tQUk9UTz0lcyIsIHNkcC0+c2RfcHJvdG9fbmFtZSk7CisJaWYgKGdmczJfdXVpZF92YWxpZCh1dWlkKSkgeworCQlhZGRfdWV2ZW50X3ZhcihlbnYsICJVVUlEPSUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlgtIgorCQkJICAgICAgICIlMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiLAorCQkJICAgICAgIHV1aWRbMF0sIHV1aWRbMV0sIHV1aWRbMl0sIHV1aWRbM10sIHV1aWRbNF0sCisJCQkgICAgICAgdXVpZFs1XSwgdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwKKwkJCSAgICAgICB1dWlkWzEwXSwgdXVpZFsxMV0sIHV1aWRbMTJdLCB1dWlkWzEzXSwKKwkJCSAgICAgICB1dWlkWzE0XSwgdXVpZFsxNV0pOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi90cmFucy5jIGIvZnMvZ2ZzMi90cmFucy5jCmluZGV4IGY2NzdiOGEuLjA1Mzc1MmQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdHJhbnMuYworKysgYi9mcy9nZnMyL3RyYW5zLmMKQEAgLTEyLDkgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtODgsOSArODcsMTEgQEAKIAogCWlmICghdHItPnRyX3RvdWNoZWQpIHsKIAkJZ2ZzMl9sb2dfcmVsZWFzZShzZHAsIHRyLT50cl9yZXNlcnZlZCk7Ci0JCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKLQkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7Ci0JCWtmcmVlKHRyKTsKKwkJaWYgKHRyLT50cl90X2doLmdoX2dsKSB7CisJCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7CisJCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKKwkJCWtmcmVlKHRyKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xMDYsOSArMTA3LDExIEBACiAJfQogCiAJZ2ZzMl9sb2dfY29tbWl0KHNkcCwgdHIpOwotICAgICAgICBnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7Ci0gICAgICAgIGdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOwotICAgICAgICBrZnJlZSh0cik7CisJaWYgKHRyLT50cl90X2doLmdoX2dsKSB7CisJCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKKwkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7CisJCWtmcmVlKHRyKTsKKwl9CiAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19TWU5DSFJPTk9VUykKIAkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdXRpbC5jIGIvZnMvZ2ZzMi91dGlsLmMKaW5kZXggMzc0ZjUwZS4uOWQxMmIxMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi91dGlsLmMKKysrIGIvZnMvZ2ZzMi91dGlsLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtMzUsNiArMzQsOCBAQAogCiBpbnQgZ2ZzMl9sbV93aXRoZHJhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBscy0+bHNfb3BzOwogCXZhX2xpc3QgYXJnczsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQpAQCAtNDcsOCArNDgsMTIgQEAKIAlmc19lcnIoc2RwLCAiYWJvdXQgdG8gd2l0aGRyYXcgdGhpcyBmaWxlIHN5c3RlbVxuIik7CiAJQlVHX09OKHNkcC0+c2RfYXJncy5hcl9kZWJ1Zyk7CiAKLQlmc19lcnIoc2RwLCAidGVsbGluZyBMTSB0byB3aXRoZHJhd1xuIik7Ci0JZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7CisJa29iamVjdF91ZXZlbnQoJnNkcC0+c2Rfa29iaiwgS09CSl9PRkZMSU5FKTsKKworCWlmIChsbS0+bG1fdW5tb3VudCkgeworCQlmc19lcnIoc2RwLCAidGVsbGluZyBMTSB0byB1bm1vdW50XG4iKTsKKwkJbG0tPmxtX3VubW91bnQoc2RwKTsKKwl9CiAJZnNfZXJyKHNkcCwgIndpdGhkcmF3blxuIik7CiAJZHVtcF9zdGFjaygpOwogCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCA4MjZmYjBiLi42NDNhYzQzIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC0xNDcsMTMgKzE0OCwxMyBAQAogCWlub2RlLT5pX2NkZXYgPSBOVUxMOwogCWlub2RlLT5pX3JkZXYgPSAwOwogCWlub2RlLT5kaXJ0aWVkX3doZW4gPSAwOwotCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpIHsKLQkJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKQotCQkJaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUoaW5vZGUpOwotCQllbHNlCi0JCQlrbWVtX2NhY2hlX2ZyZWUoaW5vZGVfY2FjaGVwLCAoaW5vZGUpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCisJaWYgKHNlY3VyaXR5X2lub2RlX2FsbG9jKGlub2RlKSkKKwkJZ290byBvdXRfZnJlZV9pbm9kZTsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlfaW50ZWdyaXR5ICovCisJaWYgKGltYV9pbm9kZV9hbGxvYyhpbm9kZSkpCisJCWdvdG8gb3V0X2ZyZWVfc2VjdXJpdHk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfbG9jayk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmlub2RlLT5pX2xvY2ssICZzYi0+c190eXBlLT5pX2xvY2tfa2V5KTsKQEAgLTE4OSw2ICsxOTAsMTUgQEAKIAlpbm9kZS0+aV9tYXBwaW5nID0gbWFwcGluZzsKIAogCXJldHVybiBpbm9kZTsKKworb3V0X2ZyZWVfc2VjdXJpdHk6CisJc2VjdXJpdHlfaW5vZGVfZnJlZShpbm9kZSk7CitvdXRfZnJlZV9pbm9kZToKKwlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUpCisJCWlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKGlub2RlKTsKKwllbHNlCisJCWttZW1fY2FjaGVfZnJlZShpbm9kZV9jYWNoZXAsIChpbm9kZSkpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X2Fsd2F5cyk7CiAKQEAgLTEyOTAsNiArMTMwMCw0MCBAQAogfQogRVhQT1JUX1NZTUJPTChibWFwKTsKIAorLyoKKyAqIFdpdGggcmVsYXRpdmUgYXRpbWUsIG9ubHkgdXBkYXRlIGF0aW1lIGlmIHRoZSBwcmV2aW91cyBhdGltZSBpcworICogZWFybGllciB0aGFuIGVpdGhlciB0aGUgY3RpbWUgb3IgbXRpbWUgb3IgaWYgYXQgbGVhc3QgYSBkYXkgaGFzCisgKiBwYXNzZWQgc2luY2UgdGhlIGxhc3QgYXRpbWUgdXBkYXRlLgorICovCitzdGF0aWMgaW50IHJlbGF0aW1lX25lZWRfdXBkYXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBzdHJ1Y3QgdGltZXNwZWMgbm93KQoreworCisJaWYgKCEobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIElzIG10aW1lIHlvdW5nZXIgdGhhbiBhdGltZT8gSWYgeWVzLCB1cGRhdGUgYXRpbWU6CisJICovCisJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLCAmaW5vZGUtPmlfYXRpbWUpID49IDApCisJCXJldHVybiAxOworCS8qCisJICogSXMgY3RpbWUgeW91bmdlciB0aGFuIGF0aW1lPyBJZiB5ZXMsIHVwZGF0ZSBhdGltZToKKwkgKi8KKwlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfY3RpbWUsICZpbm9kZS0+aV9hdGltZSkgPj0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElzIHRoZSBwcmV2aW91cyBhdGltZSB2YWx1ZSBvbGRlciB0aGFuIGEgZGF5PyBJZiB5ZXMsCisJICogdXBkYXRlIGF0aW1lOgorCSAqLworCWlmICgobG9uZykobm93LnR2X3NlYyAtIGlub2RlLT5pX2F0aW1lLnR2X3NlYykgPj0gMjQqNjAqNjApCisJCXJldHVybiAxOworCS8qCisJICogR29vZCwgd2UgY2FuIHNraXAgdGhlIGF0aW1lIHVwZGF0ZToKKwkgKi8KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKgl0b3VjaF9hdGltZQktCXVwZGF0ZSB0aGUgYWNjZXNzIHRpbWUKICAqCUBtbnQ6IG1vdW50IHRoZSBpbm9kZSBpcyBhY2Nlc3NlZCBvbgpAQCAtMTMxNywxNyArMTM2MSwxMiBAQAogCQlnb3RvIG91dDsKIAlpZiAoKG1udC0+bW50X2ZsYWdzICYgTU5UX05PRElSQVRJTUUpICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gb3V0OwotCWlmIChtbnQtPm1udF9mbGFncyAmIE1OVF9SRUxBVElNRSkgewotCQkvKgotCQkgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUgcHJldmlvdXMKLQkJICogYXRpbWUgaXMgZWFybGllciB0aGFuIGVpdGhlciB0aGUgY3RpbWUgb3IgbXRpbWUuCi0JCSAqLwotCQlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfbXRpbWUsICZpbm9kZS0+aV9hdGltZSkgPCAwICYmCi0JCSAgICB0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9jdGltZSwgJmlub2RlLT5pX2F0aW1lKSA8IDApCi0JCQlnb3RvIG91dDsKLQl9CiAKIAlub3cgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOworCisJaWYgKCFyZWxhdGltZV9uZWVkX3VwZGF0ZShtbnQsIGlub2RlLCBub3cpKQorCQlnb3RvIG91dDsKKwogCWlmICh0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfYXRpbWUsICZub3cpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggMjQwZWM2MzkuLmFjMmQ0N2UgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtNDA0LDEwICs0MDQsMTIgQEAKIAlpZiAoT19OT05CTE9DSyAhPSBPX05ERUxBWSkKIAkJZmxhZyB8PSBPX05ERUxBWTsKICNlbmRpZgorCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAlpZiAob24pCiAJCWZpbHAtPmZfZmxhZ3MgfD0gZmxhZzsKIAllbHNlCiAJCWZpbHAtPmZfZmxhZ3MgJj0gfmZsYWc7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC00MjUsMTggKzQyNywxMiBAQAogCS8qIERpZCBGQVNZTkMgc3RhdGUgY2hhbmdlID8gKi8KIAlpZiAoKGZsYWcgXiBmaWxwLT5mX2ZsYWdzKSAmIEZBU1lOQykgewogCQlpZiAoZmlscC0+Zl9vcCAmJiBmaWxwLT5mX29wLT5mYXN5bmMpCisJCQkvKiBmYXN5bmMoKSBhZGp1c3RzIGZpbHAtPmZfZmxhZ3MgKi8KIAkJCWVycm9yID0gZmlscC0+Zl9vcC0+ZmFzeW5jKGZkLCBmaWxwLCBvbik7CiAJCWVsc2UKIAkJCWVycm9yID0gLUVOT1RUWTsKIAl9Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAob24pCi0JCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOwotCWVsc2UKLQkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAwOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX2ZzZnJlZXplKHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNDk5LDE3ICs0OTUsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZJT05CSU86Ci0JCS8qIEJLTCBuZWVkZWQgdG8gYXZvaWQgcmFjZXMgdHdlYWtpbmcgZl9mbGFncyAqLwotCQlsb2NrX2tlcm5lbCgpOwogCQllcnJvciA9IGlvY3RsX2Zpb25iaW8oZmlscCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZJT0FTWU5DOgotCQkvKiBCS0wgbmVlZGVkIHRvIGF2b2lkIHJhY2VzIHR3ZWFraW5nIGZfZmxhZ3MgKi8KLQkJbG9ja19rZXJuZWwoKTsKIAkJZXJyb3IgPSBpb2N0bF9maW9hc3luYyhmZCwgZmlscCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZJT1FTSVpFOgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggYmJjMTVjMi4uMTk5MzE3NiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CkBAIC04NTAsNiArODUxLDggQEAKIAkJaWYgKGVyciA9PSAtRUFHQUlOKQogCQkJZXJyID0gaW5vZGVfcGVybWlzc2lvbihuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUsCiAJCQkJCSAgICAgICBNQVlfRVhFQyk7CisJCWlmICghZXJyKQorCQkJZXJyID0gaW1hX3BhdGhfY2hlY2soJm5kLT5wYXRoLCBNQVlfRVhFQyk7CiAgCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKQEAgLTE1MDksNiArMTUxMiwxMSBAQAogCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgYWNjX21vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBpbWFfcGF0aF9jaGVjayhwYXRoLAorCQkJICAgICAgIGFjY19tb2RlICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAkvKgogCSAqIEFuIGFwcGVuZC1vbmx5IGZpbGUgbXVzdCBiZSBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgZm9yIHdyaXRpbmcuCiAJICovCmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IDA2ZjhlNjMuLmYwZTc1MzAgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC03ODAsNiArNzgwLDcgQEAKIAkJeyBNTlRfTk9BVElNRSwgIixub2F0aW1lIiB9LAogCQl7IE1OVF9OT0RJUkFUSU1FLCAiLG5vZGlyYXRpbWUiIH0sCiAJCXsgTU5UX1JFTEFUSU1FLCAiLHJlbGF0aW1lIiB9LAorCQl7IE1OVF9TVFJJQ1RBVElNRSwgIixzdHJpY3RhdGltZSIgfSwKIAkJeyAwLCBOVUxMIH0KIAl9OwogCWNvbnN0IHN0cnVjdCBwcm9jX2ZzX2luZm8gKmZzX2luZm9wOwpAQCAtMTkxOSw2ICsxOTIwLDkgQEAKIAlpZiAoZGF0YV9wYWdlKQogCQkoKGNoYXIgKilkYXRhX3BhZ2UpW1BBR0VfU0laRSAtIDFdID0gMDsKIAorCS8qIERlZmF1bHQgdG8gcmVsYXRpbWUgKi8KKwltbnRfZmxhZ3MgfD0gTU5UX1JFTEFUSU1FOworCiAJLyogU2VwYXJhdGUgdGhlIHBlci1tb3VudHBvaW50IGZsYWdzICovCiAJaWYgKGZsYWdzICYgTVNfTk9TVUlEKQogCQltbnRfZmxhZ3MgfD0gTU5UX05PU1VJRDsKQEAgLTE5MzAsMTMgKzE5MzQsMTQgQEAKIAkJbW50X2ZsYWdzIHw9IE1OVF9OT0FUSU1FOwogCWlmIChmbGFncyAmIE1TX05PRElSQVRJTUUpCiAJCW1udF9mbGFncyB8PSBNTlRfTk9ESVJBVElNRTsKLQlpZiAoZmxhZ3MgJiBNU19SRUxBVElNRSkKLQkJbW50X2ZsYWdzIHw9IE1OVF9SRUxBVElNRTsKKwlpZiAoZmxhZ3MgJiBNU19TVFJJQ1RBVElNRSkKKwkJbW50X2ZsYWdzICY9IH4oTU5UX1JFTEFUSU1FIHwgTU5UX05PQVRJTUUpOwogCWlmIChmbGFncyAmIE1TX1JET05MWSkKIAkJbW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWTsKIAogCWZsYWdzICY9IH4oTVNfTk9TVUlEIHwgTVNfTk9FWEVDIHwgTVNfTk9ERVYgfCBNU19BQ1RJVkUgfAotCQkgICBNU19OT0FUSU1FIHwgTVNfTk9ESVJBVElNRSB8IE1TX1JFTEFUSU1FfCBNU19LRVJOTU9VTlQpOworCQkgICBNU19OT0FUSU1FIHwgTVNfTk9ESVJBVElNRSB8IE1TX1JFTEFUSU1FfCBNU19LRVJOTU9VTlQgfAorCQkgICBNU19TVFJJQ1RBVElNRSk7CiAKIAkvKiAuLi4gYW5kIGdldCB0aGUgbW91bnRwb2ludCAqLwogCXJldHZhbCA9IGtlcm5fcGF0aChkaXJfbmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggNmU1MGFhYS4uYzE2NWE2NCAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC05OTgsOCArOTk4LDExIEBACiAKIAlpZiAoIUVYX0lTU1lOQyhleHApKQogCQlzdGFibGUgPSAwOwotCWlmIChzdGFibGUgJiYgIUVYX1dHQVRIRVIoZXhwKSkKKwlpZiAoc3RhYmxlICYmICFFWF9XR0FUSEVSKGV4cCkpIHsKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CisJfQogCiAJLyogV3JpdGUgdGhlIGRhdGEuICovCiAJb2xkZnMgPSBnZXRfZnMoKTsgc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggNmQ3MjAyNC4uMzhlMzM3ZCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJcGRldi0+ZGV2dCA9IGRldnQ7CiAKIAkvKiBkZWxheSB1ZXZlbnQgdW50aWwgJ2hvbGRlcnMnIHN1YmRpciBpcyBjcmVhdGVkICovCi0JcGRldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhwZGV2LCAxKTsKIAllcnIgPSBkZXZpY2VfYWRkKHBkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmICghcC0+aG9sZGVyX2RpcikKIAkJZ290byBvdXRfZGVsOwogCi0JcGRldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhwZGV2LCAwKTsKIAlpZiAoZmxhZ3MgJiBBRERQQVJUX0ZMQUdfV0hPTEVESVNLKSB7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShwZGV2LCAmZGV2X2F0dHJfd2hvbGVfZGlzayk7CiAJCWlmIChlcnIpCkBAIC00MjIsNyArNDIyLDcgQEAKIAlyY3VfYXNzaWduX3BvaW50ZXIocHRibC0+cGFydFtwYXJ0bm9dLCBwKTsKIAogCS8qIHN1cHByZXNzIHVldmVudCBpZiB0aGUgZGlzayBzdXByZXNzZXMgaXQgKi8KLQlpZiAoIWRkZXYtPnVldmVudF9zdXBwcmVzcykKKwlpZiAoIWRldl9nZXRfdWV2ZW50X3N1cHByZXNzKHBkZXYpKQogCQlrb2JqZWN0X3VldmVudCgmcGRldi0+a29iaiwgS09CSl9BREQpOwogCiAJcmV0dXJuIHA7CkBAIC00NTUsNyArNDU1LDcgQEAKIAlkZXZfc2V0X25hbWUoZGRldiwgZGlzay0+ZGlza19uYW1lKTsKIAogCS8qIGRlbGF5IHVldmVudHMsIHVudGlsIHdlIHNjYW5uZWQgcGFydGl0aW9uIHRhYmxlICovCi0JZGRldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAxKTsKIAogCWlmIChkZXZpY2VfYWRkKGRkZXYpKQogCQlyZXR1cm47CkBAIC00OTAsNyArNDkwLDcgQEAKIAogZXhpdDoKIAkvKiBhbm5vdW5jZSBkaXNrIGFmdGVyIHBvc3NpYmxlIHBhcnRpdGlvbnMgYXJlIGNyZWF0ZWQgKi8KLQlkZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRkZXYsIDApOwogCWtvYmplY3RfdWV2ZW50KCZkZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAKIAkvKiBhbm5vdW5jZSBwb3NzaWJsZSBwYXJ0aXRpb25zICovCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2libS5jIGIvZnMvcGFydGl0aW9ucy9pYm0uYwppbmRleCAxZTA2NGM0Li40NjI5NzY4IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2libS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKQEAgLTIxLDIwICsyMSwzOCBAQAogICogY29tcHV0ZSB0aGUgYmxvY2sgbnVtYmVyIGZyb20gYQogICogY3lsLWN5bC1oZWFkLWhlYWQgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgc2VjdG9yX3QKIGNjaGgyYmxrIChzdHJ1Y3QgdnRvY19jY2hoICpwdHIsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKSB7Ci0gICAgICAgIHJldHVybiBwdHItPmNjICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCi0JICAgICAgIHB0ci0+aGggKiBnZW8tPnNlY3RvcnM7CisKKwlzZWN0b3JfdCBjeWw7CisJX191MTYgaGVhZDsKKworCS8qZGVjb2RlIGN5bGluZGVyIGFuZCBoZWFkcyBmb3IgbGFyZ2Ugdm9sdW1lcyAqLworCWN5bCA9IHB0ci0+aGggJiAweEZGRjA7CisJY3lsIDw8PSAxMjsKKwljeWwgfD0gcHRyLT5jYzsKKwloZWFkID0gcHRyLT5oaCAmIDB4MDAwRjsKKwlyZXR1cm4gY3lsICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCisJICAgICAgIGhlYWQgKiBnZW8tPnNlY3RvcnM7CiB9CiAKIC8qCiAgKiBjb21wdXRlIHRoZSBibG9jayBudW1iZXIgZnJvbSBhCiAgKiBjeWwtY3lsLWhlYWQtaGVhZC1ibG9jayBzdHJ1Y3R1cmUKICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBzZWN0b3JfdAogY2NoaGIyYmxrIChzdHJ1Y3QgdnRvY19jY2hoYiAqcHRyLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykgewotICAgICAgICByZXR1cm4gcHRyLT5jYyAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKwotCQlwdHItPmhoICogZ2VvLT5zZWN0b3JzICsKKworCXNlY3Rvcl90IGN5bDsKKwlfX3UxNiBoZWFkOworCisJLypkZWNvZGUgY3lsaW5kZXIgYW5kIGhlYWRzIGZvciBsYXJnZSB2b2x1bWVzICovCisJY3lsID0gcHRyLT5oaCAmIDB4RkZGMDsKKwljeWwgPDw9IDEyOworCWN5bCB8PSBwdHItPmNjOworCWhlYWQgPSBwdHItPmhoICYgMHgwMDBGOworCXJldHVybgljeWwgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKKwkJaGVhZCAqIGdlby0+c2VjdG9ycyArCiAJCXB0ci0+YjsKIH0KIApAQCAtNDMsMTQgKzYxLDE1IEBACiBpbnQKIGlibV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlpbnQgYmxvY2tzaXplLCBvZmZzZXQsIHNpemUscmVzOwotCWxvZmZfdCBpX3NpemU7CisJaW50IGJsb2Nrc2l6ZSwgcmVzOworCWxvZmZfdCBpX3NpemUsIG9mZnNldCwgc2l6ZSwgZm10X3NpemU7CiAJZGFzZF9pbmZvcm1hdGlvbjJfdCAqaW5mbzsKIAlzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbzsKIAljaGFyIHR5cGVbNV0gPSB7MCx9OwogCWNoYXIgbmFtZVs3XSA9IHswLH07CiAJdW5pb24gbGFiZWxfdCB7Ci0JCXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbCB2b2w7CisJCXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9jZGwgdm9sOworCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfbGRsIGxueDsKIAkJc3RydWN0IHZ0b2NfY21zX2xhYmVsIGNtczsKIAl9ICpsYWJlbDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwpAQCAtODUsMTQgKzEwNCwxNiBAQAogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gb3V0X3JlYWRlcnI7CiAKLQlzdHJuY3B5ICh0eXBlLCBkYXRhLCA0KTsKLQlpZiAoKCFpbmZvLT5GQkFfbGF5b3V0KSAmJiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSkKLQkJc3RybmNweShuYW1lLCBkYXRhICsgOCwgNik7Ci0JZWxzZQotCQlzdHJuY3B5KG5hbWUsIGRhdGEgKyA0LCA2KTsKIAltZW1jcHkobGFiZWwsIGRhdGEsIHNpemVvZih1bmlvbiBsYWJlbF90KSk7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAKKwlpZiAoKCFpbmZvLT5GQkFfbGF5b3V0KSAmJiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSkgeworCQlzdHJuY3B5KHR5cGUsIGxhYmVsLT52b2wudm9sbGJsLCA0KTsKKwkJc3RybmNweShuYW1lLCBsYWJlbC0+dm9sLnZvbGlkLCA2KTsKKwl9IGVsc2UgeworCQlzdHJuY3B5KHR5cGUsIGxhYmVsLT5sbngudm9sbGJsLCA0KTsKKwkJc3RybmNweShuYW1lLCBsYWJlbC0+bG54LnZvbGlkLCA2KTsKKwl9CiAJRUJDQVNDKHR5cGUsIDQpOwogCUVCQ0FTQyhuYW1lLCA2KTsKIApAQCAtMTEwLDM2ICsxMzEsNTQgQEAKIAkJCS8qCiAJCQkgKiBWTSBzdHlsZSBDTVMxIGxhYmVsZWQgZGlzawogCQkJICovCisJCQlibG9ja3NpemUgPSBsYWJlbC0+Y21zLmJsb2NrX3NpemU7CiAJCQlpZiAobGFiZWwtPmNtcy5kaXNrX29mZnNldCAhPSAwKSB7CiAJCQkJcHJpbnRrKCJDTVMxLyU4cyhNRFNLKToiLCBuYW1lKTsKIAkJCQkvKiBkaXNrIGlzIHJlc2VydmVkIG1pbmlkaXNrICovCi0JCQkJYmxvY2tzaXplID0gbGFiZWwtPmNtcy5ibG9ja19zaXplOwogCQkJCW9mZnNldCA9IGxhYmVsLT5jbXMuZGlza19vZmZzZXQ7CiAJCQkJc2l6ZSA9IChsYWJlbC0+Y21zLmJsb2NrX2NvdW50IC0gMSkKIAkJCQkJKiAoYmxvY2tzaXplID4+IDkpOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoIkNNUzEvJThzOiIsIG5hbWUpOwogCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOwotCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKKwkJCQlzaXplID0gbGFiZWwtPmNtcy5ibG9ja19jb3VudAorCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogT2xkIHN0eWxlIExOWDEgb3IgdW5sYWJlbGVkIGRpc2sKLQkJCSAqLwotCQkJaWYgKHN0cm5jbXAodHlwZSwgIkxOWDEiLCA0KSA9PSAwKQotCQkJCXByaW50ayAoIkxOWDEvJThzOiIsIG5hbWUpOwotCQkJZWxzZQotCQkJCXByaW50aygiKG5vbmwpIik7Ci0JCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKLQkJCXNpemUgPSBpX3NpemUgPj4gOTsKLQkJfQotCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKKwkJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIDEsIG9mZnNldCooYmxvY2tzaXplID4+IDkpLAogCQkJCSAgICAgIHNpemUtb2Zmc2V0KihibG9ja3NpemUgPj4gOSkpOworCQl9IGVsc2UgeworCQkJaWYgKHN0cm5jbXAodHlwZSwgIkxOWDEiLCA0KSA9PSAwKSB7CisJCQkJcHJpbnRrKCJMTlgxLyU4czoiLCBuYW1lKTsKKwkJCQlpZiAobGFiZWwtPmxueC5sZGxfdmVyc2lvbiA9PSAweGYyKSB7CisJCQkJCWZtdF9zaXplID0gbGFiZWwtPmxueC5mb3JtYXR0ZWRfYmxvY2tzCisJCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CisJCQkJfSBlbHNlIGlmICghc3RyY21wKGluZm8tPnR5cGUsICJFQ0tEIikpIHsKKwkJCQkJLyogZm9ybWF0ZWQgdy9vIGxhcmdlIHZvbHVtZSBzdXBwb3J0ICovCisJCQkJCWZtdF9zaXplID0gZ2VvLT5jeWxpbmRlcnMgKiBnZW8tPmhlYWRzCisJCQkJCSAgICAgICogZ2VvLT5zZWN0b3JzICogKGJsb2Nrc2l6ZSA+PiA5KTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBvbGQgbGFiZWwgYW5kIG5vIHVzYWJsZSBkaXNrIGdlb21ldHJ5CisJCQkJCSAqIChlLmcuIERJQUcpICovCisJCQkJCWZtdF9zaXplID0gaV9zaXplID4+IDk7CisJCQkJfQorCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKKwkJCQlpZiAoZm10X3NpemUgPCBzaXplKQorCQkJCQlzaXplID0gZm10X3NpemU7CisJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHVubGFiZWxlZCBkaXNrICovCisJCQkJcHJpbnRrKCIobm9ubCkiKTsKKwkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7CisJCQl9CisJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKKwkJCQkgICAgICBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKKwkJfQogCX0gZWxzZSBpZiAoaW5mby0+Zm9ybWF0ID09IERBU0RfRk9STUFUX0NETCkgewogCQkvKgogCQkgKiBOZXcgc3R5bGUgQ0RMIGZvcm1hdHRlZCBkaXNrCiAJCSAqLwotCQl1bnNpZ25lZCBpbnQgYmxrOworCQlzZWN0b3JfdCBibGs7CiAJCWludCBjb3VudGVyOwogCiAJCS8qCkBAIC0xNjYsNyArMjA1LDggQEAKIAkJCQkvKiBza2lwIEZNVDQgLyBGTVQ1IC8gRk1UNyBsYWJlbHMgKi8KIAkJCQlpZiAoZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNCddCiAJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzUnXQotCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc3J10pIHsKKwkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNyddCisJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzknXSkgewogCQkJCQlibGsrKzsKIAkJCQkJZGF0YSA9IHJlYWRfZGV2X3NlY3RvcihiZGV2LCBibGsgKgogCQkJCQkJCSAgICAgICAoYmxvY2tzaXplLzUxMiksCkBAIC0xNzQsOCArMjE0LDkgQEAKIAkJCQkJY29udGludWU7CiAJCQkJfQogCi0JCQkJLyogb25seSBGTVQxIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KLQkJCQlpZiAoZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snMSddKQorCQkJCS8qIG9ubHkgRk1UMSBhbmQgOCBsYWJlbHMgdmFsaWQgYXQgdGhpcyBwb2ludCAqLworCQkJCWlmIChmMS5EUzFGTVRJRCAhPSBfYXNjZWJjWycxJ10gJiYKKwkJCQkgICAgZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snOCddKQogCQkJCQlicmVhazsKIAogCQkJCS8qIE9LLCB3ZSBnb3QgdmFsaWQgcGFydGl0aW9uIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAxNGY1MDJiLi45NGFkMTU5IDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC02NjcsMTAgKzY2Nyw3IEBACiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZpbm9kZS0+aV9waXBlLT5mYXN5bmNfcmVhZGVycyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtNjg0LDEwICs2ODEsNyBAQAogCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTcwNiwxMSArNzAwLDcgQEAKIAkJCWZhc3luY19oZWxwZXIoLTEsIGZpbHAsIDAsICZwaXBlLT5mYXN5bmNfcmVhZGVycyk7CiAJfQogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDZjZTUwMTQuLmRkNGFjYjEgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX2VtZXJnZW5jeV9yZW1vdW50KHVuc2lnbmVkIGxvbmcgZm9vKQorc3RhdGljIHZvaWQgZG9fZW1lcmdlbmN5X3JlbW91bnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAKQEAgLTY5NywxMiArNjk3LDE5IEBACiAJCXNwaW5fbG9jaygmc2JfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKKwlrZnJlZSh3b3JrKTsKIAlwcmludGsoIkVtZXJnZW5jeSBSZW1vdW50IGNvbXBsZXRlXG4iKTsKIH0KIAogdm9pZCBlbWVyZ2VuY3lfcmVtb3VudCh2b2lkKQogewotCXBkZmx1c2hfb3BlcmF0aW9uKGRvX2VtZXJnZW5jeV9yZW1vdW50LCAwKTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcms7CisKKwl3b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBHRlBfQVRPTUlDKTsKKwlpZiAod29yaykgeworCQlJTklUX1dPUksod29yaywgZG9fZW1lcmdlbmN5X3JlbW91bnQpOworCQlzY2hlZHVsZV93b3JrKHdvcmspOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3N5bmMuYyBiL2ZzL3N5bmMuYwppbmRleCBhMTZkNTNlLi5lYzk1YTY5IDEwMDY0NAotLS0gYS9mcy9zeW5jLmMKKysrIGIvZnMvc3luYy5jCkBAIC00Miw5ICs0MiwyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBkb19zeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRvX3N5bmMoMCk7CisJa2ZyZWUod29yayk7Cit9CisKIHZvaWQgZW1lcmdlbmN5X3N5bmModm9pZCkKIHsKLQlwZGZsdXNoX29wZXJhdGlvbihkb19zeW5jLCAwKTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcms7CisKKwl3b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBHRlBfQVRPTUlDKTsKKwlpZiAod29yaykgeworCQlJTklUX1dPUksod29yaywgZG9fc3luY193b3JrKTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9iaW4uYyBiL2ZzL3N5c2ZzL2Jpbi5jCmluZGV4IGYyYzQ3OGMuLjA3NzAzZDMgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Jpbi5jCisrKyBiL2ZzL3N5c2ZzL2Jpbi5jCkBAIC0yMSwxNSArMjEsMjggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInN5c2ZzLmgiCiAKKy8qCisgKiBUaGVyZSdzIG9uZSBiaW5fYnVmZmVyIGZvciBlYWNoIG9wZW4gZmlsZS4KKyAqCisgKiBmaWxwLT5wcml2YXRlX2RhdGEgcG9pbnRzIHRvIGJpbl9idWZmZXIgYW5kCisgKiBzeXNmc19kaXJlbnQtPnNfYmluX2F0dHIuYnVmZmVycyBwb2ludHMgdG8gYSB0aGUgYmluX2J1ZmZlciBzCisgKiBzeXNmc19kaXJlbnQtPnNfYmluX2F0dHIuYnVmZmVycyBpcyBwcm90ZWN0ZWQgYnkgc3lzZnNfYmluX2xvY2sKKyAqLworc3RhdGljIERFRklORV9NVVRFWChzeXNmc19iaW5fbG9jayk7CisKIHN0cnVjdCBiaW5fYnVmZmVyIHsKLQlzdHJ1Y3QgbXV0ZXgJbXV0ZXg7Ci0Jdm9pZAkJKmJ1ZmZlcjsKLQlpbnQJCW1tYXBwZWQ7CisJc3RydWN0IG11dGV4CQkJbXV0ZXg7CisJdm9pZAkJCQkqYnVmZmVyOworCWludAkJCQltbWFwcGVkOworCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAJKnZtX29wczsKKwlzdHJ1Y3QgZmlsZQkJCSpmaWxlOworCXN0cnVjdCBobGlzdF9ub2RlCQlsaXN0OwogfTsKIAogc3RhdGljIGludApAQCAtMTY4LDYgKzE4MSwxNzUgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyB2b2lkIGJpbl92bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5vcGVuKQorCQlyZXR1cm47CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm47CisKKwliYi0+dm1fb3BzLT5vcGVuKHZtYSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKK30KKworc3RhdGljIHZvaWQgYmluX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5jbG9zZSkKKwkJcmV0dXJuOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuOworCisJYmItPnZtX29wcy0+Y2xvc2Uodm1hKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworfQorCitzdGF0aWMgaW50IGJpbl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5mYXVsdCkKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5mYXVsdCh2bWEsIHZtZik7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJpbl9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWJiLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGJiLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSh2bWEsIHBhZ2UpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiaW5fYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5hY2Nlc3MpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5hY2Nlc3Modm1hLCBhZGRyLCBidWYsIGxlbiwgd3JpdGUpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19OVU1BCitzdGF0aWMgaW50IGJpbl9zZXRfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbWVtcG9saWN5ICpuZXcpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5zZXRfcG9saWN5KQorCQlyZXR1cm4gMDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gYmItPnZtX29wcy0+c2V0X3BvbGljeSh2bWEsIG5ldyk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG1lbXBvbGljeSAqYmluX2dldF9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCXN0cnVjdCBtZW1wb2xpY3kgKnBvbDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+Z2V0X3BvbGljeSkKKwkJcmV0dXJuIHZtYS0+dm1fcG9saWN5OworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIHZtYS0+dm1fcG9saWN5OworCisJcG9sID0gYmItPnZtX29wcy0+Z2V0X3BvbGljeSh2bWEsIGFkZHIpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHBvbDsKK30KKworc3RhdGljIGludCBiaW5fbWlncmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSwKKwkJCWNvbnN0IG5vZGVtYXNrX3QgKnRvLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+bWlncmF0ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGJiLT52bV9vcHMtPm1pZ3JhdGUodm1hLCBmcm9tLCB0bywgZmxhZ3MpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJpbl92bV9vcHMgPSB7CisJLm9wZW4JCT0gYmluX3ZtYV9vcGVuLAorCS5jbG9zZQkJPSBiaW5fdm1hX2Nsb3NlLAorCS5mYXVsdAkJPSBiaW5fZmF1bHQsCisJLnBhZ2VfbWt3cml0ZQk9IGJpbl9wYWdlX21rd3JpdGUsCisJLmFjY2VzcwkJPSBiaW5fYWNjZXNzLAorI2lmZGVmIENPTkZJR19OVU1BCisJLnNldF9wb2xpY3kJPSBiaW5fc2V0X3BvbGljeSwKKwkuZ2V0X3BvbGljeQk9IGJpbl9nZXRfcG9saWN5LAorCS5taWdyYXRlCT0gYmluX21pZ3JhdGUsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtMTc5LDE4ICszNjEsMzcgQEAKIAltdXRleF9sb2NrKCZiYi0+bXV0ZXgpOwogCiAJLyogbmVlZCBhdHRyX3NkIGZvciBhdHRyLCBpdHMgcGFyZW50IGZvciBrb2JqICovCisJcmMgPSAtRU5PREVWOwogCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyYyA9IC1FSU5WQUw7Ci0JaWYgKGF0dHItPm1tYXApCi0JCXJjID0gYXR0ci0+bW1hcChrb2JqLCBhdHRyLCB2bWEpOworCWlmICghYXR0ci0+bW1hcCkKKwkJZ290byBvdXRfcHV0OwogCi0JaWYgKHJjID09IDAgJiYgIWJiLT5tbWFwcGVkKQotCQliYi0+bW1hcHBlZCA9IDE7Ci0JZWxzZQotCQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlyYyA9IGF0dHItPm1tYXAoa29iaiwgYXR0ciwgdm1hKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X3B1dDsKIAorCS8qCisJICogUG93ZXJQQydzIHBjaV9tbWFwIG9mIGxlZ2FjeV9tZW0gdXNlcyBzaG1lbV96ZXJvX3NldHVwKCkKKwkgKiB0byBzYXRpc2Z5IHZlcnNpb25zIG9mIFggd2hpY2ggY3Jhc2ggaWYgdGhlIG1tYXAgZmFpbHM6IHRoYXQKKwkgKiBzdWJzdGl0dXRlcyBhIG5ldyB2bV9maWxlLCBhbmQgd2UgZG9uJ3QgdGhlbiB3YW50IGJpbl92bV9vcHMuCisJICovCisJaWYgKHZtYS0+dm1fZmlsZSAhPSBmaWxlKQorCQlnb3RvIG91dF9wdXQ7CisKKwlyYyA9IC1FSU5WQUw7CisJaWYgKGJiLT5tbWFwcGVkICYmIGJiLT52bV9vcHMgIT0gdm1hLT52bV9vcHMpCisJCWdvdG8gb3V0X3B1dDsKKworCXJjID0gMDsKKwliYi0+bW1hcHBlZCA9IDE7CisJYmItPnZtX29wcyA9IHZtYS0+dm1fb3BzOworCXZtYS0+dm1fb3BzID0gJmJpbl92bV9vcHM7CitvdXRfcHV0OgorCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmJiLT5tdXRleCk7CiAKIAlyZXR1cm4gcmM7CkBAIC0yMjMsOCArNDI0LDEzIEBACiAJCWdvdG8gZXJyX291dDsKIAogCW11dGV4X2luaXQoJmJiLT5tdXRleCk7CisJYmItPmZpbGUgPSBmaWxlOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGJiOwogCisJbXV0ZXhfbG9jaygmc3lzZnNfYmluX2xvY2spOworCWhsaXN0X2FkZF9oZWFkKCZiYi0+bGlzdCwgJmF0dHJfc2QtPnNfYmluX2F0dHIuYnVmZmVycyk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc19iaW5fbG9jayk7CisKIAkvKiBvcGVuIHN1Y2NlZWRlZCwgcHV0IGFjdGl2ZSByZWZlcmVuY2VzICovCiAJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CiAJcmV0dXJuIDA7CkBAIC0yMzcsMTEgKzQ0MywxMiBAQAogCiBzdGF0aWMgaW50IHJlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKIHsKLQlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CiAJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGJiLT5tbWFwcGVkKQotCQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwltdXRleF9sb2NrKCZzeXNmc19iaW5fbG9jayk7CisJaGxpc3RfZGVsKCZiYi0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc19iaW5fbG9jayk7CisKIAlrZnJlZShiYi0+YnVmZmVyKTsKIAlrZnJlZShiYik7CiAJcmV0dXJuIDA7CkBAIC0yNTYsNiArNDYzLDI2IEBACiAJLnJlbGVhc2UJPSByZWxlYXNlLAogfTsKIAorCit2b2lkIHVubWFwX2Jpbl9maWxlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QpCit7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisKKwlpZiAoc3lzZnNfdHlwZShhdHRyX3NkKSAhPSBTWVNGU19LT0JKX0JJTl9BVFRSKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZzeXNmc19iaW5fbG9jayk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShiYiwgdG1wLCAmYXR0cl9zZC0+c19iaW5fYXR0ci5idWZmZXJzLCBsaXN0KSB7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBiYi0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCQl1bm1hcF9tYXBwaW5nX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIDAsIDAsIDEpOworCX0KKworCW11dGV4X3VubG9jaygmc3lzZnNfYmluX2xvY2spOworfQorCiAvKioKICAqCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSAtIGNyZWF0ZSBiaW5hcnkgZmlsZSBmb3Igb2JqZWN0LgogICoJQGtvYmo6CW9iamVjdC4KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggODJkM2I3OS4uNjZhZWI0ZiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTQzNCw2ICs0MzQsMjYgQEAKIH0KIAogLyoqCisgKglzeXNmc19wYXRobmFtZSAtIHJldHVybiBmdWxsIHBhdGggdG8gc3lzZnMgZGlyZW50CisgKglAc2Q6IHN5c2ZzX2RpcmVudCB3aG9zZSBwYXRoIHdlIHdhbnQKKyAqCUBwYXRoOiBjYWxsZXIgYWxsb2NhdGVkIGJ1ZmZlcgorICoKKyAqCUdpdmVzIHRoZSBuYW1lICIvIiB0byB0aGUgc3lzZnNfcm9vdCBlbnRyeTsgYW55IHBhdGggcmV0dXJuZWQKKyAqCWlzIHJlbGF0aXZlIHRvIHdoZXJldmVyIHN5c2ZzIGlzIG1vdW50ZWQuCisgKgorICoJWFhYOiBkb2VzIG5vIGVycm9yIGNoZWNraW5nIG9uIEBwYXRoIHNpemUKKyAqLworc3RhdGljIGNoYXIgKnN5c2ZzX3BhdGhuYW1lKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkLCBjaGFyICpwYXRoKQoreworCWlmIChzZC0+c19wYXJlbnQpIHsKKwkJc3lzZnNfcGF0aG5hbWUoc2QtPnNfcGFyZW50LCBwYXRoKTsKKwkJc3RyY2F0KHBhdGgsICIvIik7CisJfQorCXN0cmNhdChwYXRoLCBzZC0+c19uYW1lKTsKKwlyZXR1cm4gcGF0aDsKK30KKworLyoqCiAgKglzeXNmc19hZGRfb25lIC0gYWRkIHN5c2ZzX2RpcmVudCB0byBwYXJlbnQKICAqCUBhY3h0OiBhZGRybSBjb250ZXh0IHRvIHVzZQogICoJQHNkOiBzeXNmc19kaXJlbnQgdG8gYmUgYWRkZWQKQEAgLTQ1OCw4ICs0NzgsMTYgQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gX19zeXNmc19hZGRfb25lKGFjeHQsIHNkKTsKLQlXQVJOKHJldCA9PSAtRUVYSVNULCBLRVJOX1dBUk5JTkcgInN5c2ZzOiBkdXBsaWNhdGUgZmlsZW5hbWUgJyVzJyAiCi0JCSAgICAgICAiY2FuIG5vdCBiZSBjcmVhdGVkXG4iLCBzZC0+c19uYW1lKTsKKwlpZiAocmV0ID09IC1FRVhJU1QpIHsKKwkJY2hhciAqcGF0aCA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCQlXQVJOKDEsIEtFUk5fV0FSTklORworCQkgICAgICJzeXNmczogY2Fubm90IGNyZWF0ZSBkdXBsaWNhdGUgZmlsZW5hbWUgJyVzJ1xuIiwKKwkJICAgICAocGF0aCA9PSBOVUxMKSA/IHNkLT5zX25hbWUgOgorCQkgICAgIHN0cmNhdChzdHJjYXQoc3lzZnNfcGF0aG5hbWUoYWN4dC0+cGFyZW50X3NkLCBwYXRoKSwgIi8iKSwKKwkJICAgICAgICAgICAgc2QtPnNfbmFtZSkpOworCQlrZnJlZShwYXRoKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODEsNiArNjA5LDcgQEAKIAogCQlzeXNmc19kcm9wX2RlbnRyeShzZCk7CiAJCXN5c2ZzX2RlYWN0aXZhdGUoc2QpOworCQl1bm1hcF9iaW5fZmlsZShzZCk7CiAJCXN5c2ZzX3B1dChzZCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IDFmNGEzZjguLjI4OWM0M2EgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTY1OSwxMyArNjU5LDE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKTsKIAogc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCB7Ci0Jc3RydWN0IGtvYmplY3QgCQkqa29iajsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtxX2xpc3Q7CisJc3RydWN0IGtvYmplY3QJCSprb2JqOwogCXZvaWQJCQkoKmZ1bmMpKHZvaWQgKik7CiAJdm9pZAkJCSpkYXRhOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoc3lzZnNfd29ya3FfbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChzeXNmc193b3JrcSk7CiBzdGF0aWMgdm9pZCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzcyA9IGNvbnRhaW5lcl9vZih3b3JrLApAQCAtNjc0LDYgKzY3Nyw5IEBACiAJKHNzLT5mdW5jKShzcy0+ZGF0YSk7CiAJa29iamVjdF9wdXQoc3MtPmtvYmopOwogCW1vZHVsZV9wdXQoc3MtPm93bmVyKTsKKwltdXRleF9sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJbGlzdF9kZWwoJnNzLT53b3JrcV9saXN0KTsKKwltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKIAlrZnJlZShzcyk7CiB9CiAKQEAgLTY5NSwxNSArNzAxLDI1IEBACiAgKiB1bnRpbCBAZnVuYyByZXR1cm5zLgogICoKICAqIFJldHVybnMgMCBpZiB0aGUgcmVxdWVzdCB3YXMgc3VibWl0dGVkLCAtRU5PTUVNIGlmIHN0b3JhZ2UgY291bGQgbm90Ci0gKiBiZSBhbGxvY2F0ZWQsIC1FTk9ERVYgaWYgYSByZWZlcmVuY2UgdG8gQG93bmVyIGlzbid0IGF2YWlsYWJsZS4KKyAqIGJlIGFsbG9jYXRlZCwgLUVOT0RFViBpZiBhIHJlZmVyZW5jZSB0byBAb3duZXIgaXNuJ3QgYXZhaWxhYmxlLAorICogLUVBR0FJTiBpZiBhIGNhbGxiYWNrIGhhcyBhbHJlYWR5IGJlZW4gc2NoZWR1bGVkIGZvciBAa29iai4KICAqLwogaW50IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCB2b2lkICgqZnVuYykodm9pZCAqKSwKIAkJdm9pZCAqZGF0YSwgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7Ci0Jc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCAqc3M7CisJc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCAqc3MsICp0bXA7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNzLCB0bXAsICZzeXNmc193b3JrcSwgd29ya3FfbGlzdCkKKwkJaWYgKHNzLT5rb2JqID09IGtvYmopIHsKKwkJCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwogCXNzID0ga21hbGxvYyhzaXplb2YoKnNzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcykgewogCQltb2R1bGVfcHV0KG93bmVyKTsKQEAgLTcxNSw2ICs3MzEsMTAgQEAKIAlzcy0+ZGF0YSA9IGRhdGE7CiAJc3MtPm93bmVyID0gb3duZXI7CiAJSU5JVF9XT1JLKCZzcy0+d29yaywgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfd29yayk7CisJSU5JVF9MSVNUX0hFQUQoJnNzLT53b3JrcV9saXN0KTsKKwltdXRleF9sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmc3MtPndvcmtxX2xpc3QsICZzeXNmc193b3JrcSk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CiAJc2NoZWR1bGVfd29yaygmc3MtPndvcmspOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvaW5vZGUuYyBiL2ZzL3N5c2ZzL2lub2RlLmMKaW5kZXggZGZhM2Q5NC4uNTU1ZjBmZiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvaW5vZGUuYworKysgYi9mcy9zeXNmcy9pbm9kZS5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIHsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHI7CiAKKwlpbm9kZS0+aV9wcml2YXRlID0gc3lzZnNfZ2V0KHNkKTsKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZzeXNmc19hb3BzOwogCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmc3lzZnNfYmFja2luZ19kZXZfaW5mbzsKIAlpbm9kZS0+aV9vcCA9ICZzeXNmc19pbm9kZV9vcGVyYXRpb25zOwpAQCAtMjE0LDYgKzIxNSwyMiBAQAogCXJldHVybiBpbm9kZTsKIH0KIAorLyoKKyAqIFRoZSBzeXNmc19kaXJlbnQgc2VydmVzIGFzIGJvdGggYW4gaW5vZGUgYW5kIGEgZGlyZWN0b3J5IGVudHJ5IGZvciBzeXNmcy4KKyAqIFRvIHByZXZlbnQgdGhlIHN5c2ZzIGlub2RlIG51bWJlcnMgZnJvbSBiZWluZyBmcmVlZCBwcmVtYXR1cmVseSB3ZSB0YWtlIGEKKyAqIHJlZmVyZW5jZSB0byBzeXNmc19kaXJlbnQgZnJvbSB0aGUgc3lzZnMgaW5vZGUuICBBCisgKiBzdXBlcl9vcGVyYXRpb25zLmRlbGV0ZV9pbm9kZSgpIGltcGxlbWVudGF0aW9uIGlzIG5lZWRlZCB0byBkcm9wIHRoYXQKKyAqIHJlZmVyZW5jZSB1cG9uIGlub2RlIGRlc3RydWN0aW9uLgorICovCit2b2lkIHN5c2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzeXNmc19kaXJlbnQgKnNkICA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJY2xlYXJfaW5vZGUoaW5vZGUpOworCXN5c2ZzX3B1dChzZCk7Cit9CisKIGludCBzeXNmc19oYXNoX2FuZF9yZW1vdmUoc3RydWN0IHN5c2ZzX2RpcmVudCAqZGlyX3NkLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBzeXNmc19hZGRybV9jeHQgYWN4dDsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL21vdW50LmMgYi9mcy9zeXNmcy9tb3VudC5jCmluZGV4IGFiMzQzZTMuLjQ5NzQ5OTUgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL21vdW50LmMKKysrIGIvZnMvc3lzZnMvbW91bnQuYwpAQCAtMTcsMTEgKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiAjaW5jbHVkZSAic3lzZnMuaCIKIAotLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqLwotI2RlZmluZSBTWVNGU19NQUdJQyAweDYyNjU2NTcyCiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnN5c2ZzX21vdW50Owogc3RydWN0IHN1cGVyX2Jsb2NrICogc3lzZnNfc2IgPSBOVUxMOwpAQCAtMzAsNiArMjksNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHN5c2ZzX29wcyA9IHsKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKKwkuZGVsZXRlX2lub2RlCT0gc3lzZnNfZGVsZXRlX2lub2RlLAogfTsKIAogc3RydWN0IHN5c2ZzX2RpcmVudCBzeXNmc19yb290ID0gewpAQCAtNTMsNyArNTMsOSBAQAogCXN5c2ZzX3NiID0gc2I7CiAKIAkvKiBnZXQgcm9vdCBpbm9kZSwgaW5pdGlhbGl6ZSBhbmQgdW5sb2NrIGl0ICovCisJbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOwogCWlub2RlID0gc3lzZnNfZ2V0X2lub2RlKCZzeXNmc19yb290KTsKKwltdXRleF91bmxvY2soJnN5c2ZzX211dGV4KTsKIAlpZiAoIWlub2RlKSB7CiAJCXByX2RlYnVnKCJzeXNmczogY291bGQgbm90IGdldCByb290IGlub2RlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9zeXNmcy5oIGIvZnMvc3lzZnMvc3lzZnMuaAppbmRleCA5M2M2ZDZiLi4zZmEwZDk4NCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAKIHN0cnVjdCBzeXNmc19lbGVtX2Jpbl9hdHRyIHsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQkqYmluX2F0dHI7CisJc3RydWN0IGhsaXN0X2hlYWQJYnVmZmVyczsKIH07CiAKIC8qCkBAIC0xNDUsNiArMTQ2LDcgQEAKICAqIGlub2RlLmMKICAqLwogc3RydWN0IGlub2RlICpzeXNmc19nZXRfaW5vZGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwordm9pZCBzeXNmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgc3lzZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwogaW50IHN5c2ZzX2hhc2hfYW5kX3JlbW92ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IHN5c2ZzX2lub2RlX2luaXQodm9pZCk7CkBAIC0xNjMsNiArMTY1LDcgQEAKICAqIGJpbi5jCiAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJpbl9mb3BzOwordm9pZCB1bm1hcF9iaW5fZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkKTsKIAogLyoKICAqIHN5bWxpbmsuYwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjEwNzY2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qIGlkZS5oOiBGUlYgSURFIGRlY2xhcmF0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fSURFX0gKLSNkZWZpbmUgX0FTTV9JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKaW5kZXggZTUxY2E2Ny4uNTdjM2Q0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaApAQCAtNTQsNSArNTQsOCBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaCBiL2luY2x1ZGUvYXNtLWZydi9zd2FiLmgKaW5kZXggYWZiMzM5Ni4uZjMwNTgzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQVNNX1NXQUJfSAogI2RlZmluZSBfQVNNX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCBiODQ3NzQxLi40ZDNlNDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0xMTcsOSArMTE3LDkgQEAKIHN0cnVjdCBmbG9jayB7CiAJc2hvcnQJbF90eXBlOwogCXNob3J0CWxfd2hlbmNlOwotCW9mZl90CWxfc3RhcnQ7Ci0Jb2ZmX3QJbF9sZW47Ci0JcGlkX3QJbF9waWQ7CisJX19rZXJuZWxfb2ZmX3QJbF9zdGFydDsKKwlfX2tlcm5lbF9vZmZfdAlsX2xlbjsKKwlfX2tlcm5lbF9waWRfdAlsX3BpZDsKIAlfX0FSQ0hfRkxPQ0tfUEFECiB9OwogI2VuZGlmCkBAIC0xNDAsOSArMTQwLDkgQEAKIHN0cnVjdCBmbG9jazY0IHsKIAlzaG9ydCAgbF90eXBlOwogCXNob3J0ICBsX3doZW5jZTsKLQlsb2ZmX3QgbF9zdGFydDsKLQlsb2ZmX3QgbF9sZW47Ci0JcGlkX3QgIGxfcGlkOworCV9fa2VybmVsX2xvZmZfdCBsX3N0YXJ0OworCV9fa2VybmVsX2xvZmZfdCBsX2xlbjsKKwlfX2tlcm5lbF9waWRfdCAgbF9waWQ7CiAJX19BUkNIX0ZMT0NLNjRfUEFECiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCmluZGV4IDk2OTU3MDEuLjM1NzUyZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FSQ0hfU0lfVUlEX1QKLSNkZWZpbmUgX19BUkNIX1NJX1VJRF9UCXVpZF90CisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAlfX2tlcm5lbF91aWQzMl90CiAjZW5kaWYKIAogLyoKQEAgLTQ3LDEzICs0NywxMyBAQAogCiAJCS8qIGtpbGwoKSAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCiAJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCiAJCX0gX2tpbGw7CiAKIAkJLyogUE9TSVguMWIgdGltZXJzICovCiAJCXN0cnVjdCB7Ci0JCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJX19rZXJuZWxfdGltZXJfdCBfdGlkOwkvKiB0aW1lciBpZCAqLwogCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLwogCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKIAkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KQEAgLTYyLDE4ICs2MiwxOCBAQAogCiAJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KIAkJc3RydWN0IHsKLQkJCXBpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJc2lndmFsX3QgX3NpZ3ZhbDsKIAkJfSBfcnQ7CiAKIAkJLyogU0lHQ0hMRCAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHdoaWNoIGNoaWxkICovCisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNsb2NrX3QgX3V0aW1lOwotCQkJY2xvY2tfdCBfc3RpbWU7CisJCQlfX2tlcm5lbF9jbG9ja190IF91dGltZTsKKwkJCV9fa2VybmVsX2Nsb2NrX3QgX3N0aW1lOwogCQl9IF9zaWdjaGxkOwogCiAJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCmluZGV4IDYxMjlkNjguLjNiNGZiM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaApAQCAtMSw4ICsxLDkgQEAKICNpZm5kZWYgX0dFTkVSSUNfU1RBVEZTX0gKICNkZWZpbmUgX0dFTkVSSUNfU1RBVEZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBjNjFmYWIxLi5hY2E0MGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC04MCw2ICs4MCwxMSBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKIAkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAorCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCisJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkKIApAQCAtMzA5LDE1ICszMTQsNyBAQAogCUNQVV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKLQlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKLQkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2Vfc3RyaW5ncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICAgXAotCS4gPSBBTElHTig4KTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CisJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCiAKICNkZWZpbmUgSU5JVF9URVhUCQkJCQkJCVwKIAkqKC5pbml0LnRleHQpCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oCmluZGV4IDlhMGUyMDAuLmJlN2VkNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fTTMyUl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zd2FiLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaAppbmRleCA5Nzk3M2UxLi41NGRhYjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FTTV9NMzJSX1NXQUJfSAogI2RlZmluZSBfQVNNX00zMlJfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZGNkZDkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIE1OMTAzMDAgQXJjaC1zcGVjaWZpYyBJREUgY29kZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKiAtIERlcml2ZWQgZnJvbSBpbmNsdWRlL2FzbS1pMzg2L2lkZS5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fSURFX0gKLSNkZWZpbmUgX0FTTV9JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL2ludGN0bC1yZWdzLmg+Ci0KLSN1bmRlZiBTVVBQT1JUX1NMT1dfREFUQV9QT1JUUwotI2RlZmluZSBTVVBQT1JUX1NMT1dfREFUQV9QT1JUUyAwCi0KLSN1bmRlZiBTVVBQT1JUX1ZMQl9TWU5DCi0jZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAotCi0vKgotICogc29tZSBiaXRzIG5lZWRlZCBmb3IgcGFydHMgb2YgdGhlIElERSBzdWJzeXN0ZW0gdG8gY29tcGlsZQotICovCi0jZGVmaW5lIF9faWRlX21tX2luc3cocG9ydCwgYWRkciwgbikgXAotCWluc3coKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikgXAotCWluc2woKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsIGFkZHIsIG4pIFwKLQlvdXRzdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLSNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCwgYWRkciwgbikgXAotCW91dHNsKCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oCmluZGV4IGNkOWNjNWMuLjA1MTdiNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaApAQCAtMTIxLDQgKzEyMSw5IEBACiAKICNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAogCitzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQoreworCXJldHVybiBjaGFubmVsID8gMTUgOiAxNDsKK30KKwogI2VuZGlmIC8qIF9BU01fUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oCmluZGV4IDgwYWY5YzQuLmZiNWRhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKaW5kZXggNDUwNGQxYi4uYmQ4MThhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKQEAgLTExLDcgKzExLDcgQEAKICNpZm5kZWYgX0FTTV9TV0FCX0gKICNkZWZpbmUgX0FTTV9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBfX0dOVUNfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9hZXMuaCBiL2luY2x1ZGUvY3J5cHRvL2Flcy5oCmluZGV4IDY1NmE0YzYuLjc1MjRiYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3J5cHRvL2Flcy5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2Flcy5oCkBAIC0xNywxMCArMTcsMTQgQEAKICNkZWZpbmUgQUVTX01BWF9LRVlMRU5HVEgJKDE1ICogMTYpCiAjZGVmaW5lIEFFU19NQVhfS0VZTEVOR1RIX1UzMgkoQUVTX01BWF9LRVlMRU5HVEggLyBzaXplb2YodTMyKSkKIAorLyoKKyAqIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZmlyc3QgdHdvIGZpZWxkcyBhcmUgMTYtYnl0ZSBhbGlnbmVkCisgKiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cnVjdHVyZSwgaS5lLiwgZG9uJ3QgbW92ZSB0aGVtIQorICovCiBzdHJ1Y3QgY3J5cHRvX2Flc19jdHggewotCXUzMiBrZXlfbGVuZ3RoOwogCXUzMiBrZXlfZW5jW0FFU19NQVhfS0VZTEVOR1RIX1UzMl07CiAJdTMyIGtleV9kZWNbQUVTX01BWF9LRVlMRU5HVEhfVTMyXTsKKwl1MzIga2V5X2xlbmd0aDsKIH07CiAKIGV4dGVybiBjb25zdCB1MzIgY3J5cHRvX2Z0X3RhYls0XVsyNTZdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY29tcHJlc3MuaCBiL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNjNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb21wcmVzczogQ29tcHJlc3Npb24gYWxnb3JpdGhtcyB1bmRlciB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0NSWVBUT19DT01QUkVTU19ICisjZGVmaW5lIF9DUllQVE9fQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisKKworc3RydWN0IGNvbXBfcmVxdWVzdCB7CisJY29uc3Qgdm9pZCAqbmV4dF9pbjsJCS8qIG5leHQgaW5wdXQgYnl0ZSAqLworCXZvaWQgKm5leHRfb3V0OwkJCS8qIG5leHQgb3V0cHV0IGJ5dGUgKi8KKwl1bnNpZ25lZCBpbnQgYXZhaWxfaW47CQkvKiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbiAqLworCXVuc2lnbmVkIGludCBhdmFpbF9vdXQ7CQkvKiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9vdXQgKi8KK307CisKK2VudW0gemxpYl9jb21wX3BhcmFtcyB7CisJWkxJQl9DT01QX0xFVkVMID0gMSwJCS8qIGUuZy4gWl9ERUZBVUxUX0NPTVBSRVNTSU9OICovCisJWkxJQl9DT01QX01FVEhPRCwJCS8qIGUuZy4gWl9ERUZMQVRFRCAqLworCVpMSUJfQ09NUF9XSU5ET1dCSVRTLAkJLyogZS5nLiBNQVhfV0JJVFMgKi8KKwlaTElCX0NPTVBfTUVNTEVWRUwsCQkvKiBlLmcuIERFRl9NRU1fTEVWRUwgKi8KKwlaTElCX0NPTVBfU1RSQVRFR1ksCQkvKiBlLmcuIFpfREVGQVVMVF9TVFJBVEVHWSAqLworCV9fWkxJQl9DT01QX01BWCwKK307CisKKyNkZWZpbmUgWkxJQl9DT01QX01BWAkoX19aTElCX0NPTVBfTUFYIC0gMSkKKworCitlbnVtIHpsaWJfZGVjb21wX3BhcmFtcyB7CisJWkxJQl9ERUNPTVBfV0lORE9XQklUUyA9IDEsCS8qIGUuZy4gREVGX1dCSVRTICovCisJX19aTElCX0RFQ09NUF9NQVgsCit9OworCisjZGVmaW5lIFpMSUJfREVDT01QX01BWAkoX19aTElCX0RFQ09NUF9NQVggLSAxKQorCisKK3N0cnVjdCBjcnlwdG9fcGNvbXAgeworCXN0cnVjdCBjcnlwdG9fdGZtIGJhc2U7Cit9OworCitzdHJ1Y3QgcGNvbXBfYWxnIHsKKwlpbnQgKCpjb21wcmVzc19zZXR1cCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKKwlpbnQgKCpjb21wcmVzc19pbml0KShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pOworCWludCAoKmNvbXByZXNzX3VwZGF0ZSkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJICAgICAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqY29tcHJlc3NfZmluYWwpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCSAgICAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGVjb21wcmVzc19zZXR1cCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkJdW5zaWduZWQgaW50IGxlbik7CisJaW50ICgqZGVjb21wcmVzc19pbml0KShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pOworCWludCAoKmRlY29tcHJlc3NfdXBkYXRlKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGVjb21wcmVzc19maW5hbCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisKKwlzdHJ1Y3QgY3J5cHRvX2FsZyBiYXNlOworfTsKKworZXh0ZXJuIHN0cnVjdCBjcnlwdG9fcGNvbXAgKmNyeXB0b19hbGxvY19wY29tcChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCisJCQkJCSAgICAgICB1MzIgbWFzayk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19wY29tcF90Zm0oc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiAmdGZtLT5iYXNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2ZyZWVfcGNvbXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWNyeXB0b19kZXN0cm95X3RmbSh0Zm0sIGNyeXB0b19wY29tcF90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjb21wX2FsZyAqX19jcnlwdG9fcGNvbXBfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihhbGcsIHN0cnVjdCBwY29tcF9hbGcsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY29tcF9hbGcgKmNyeXB0b19wY29tcF9hbGcoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiBfX2NyeXB0b19wY29tcF9hbGcoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pLT5fX2NydF9hbGcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQl2b2lkICpwYXJhbXMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3Nfc2V0dXAodGZtLCBwYXJhbXMsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19pbml0KHRmbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX3VwZGF0ZSh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19maW5hbCh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICB2b2lkICpwYXJhbXMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19zZXR1cCh0Zm0sIHBhcmFtcywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19pbml0KHRmbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX3VwZGF0ZSh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19maW5hbCh0Zm0sIHJlcSk7Cit9CisKKyNlbmRpZgkvKiBfQ1JZUFRPX0NPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmYTdiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBTb2Z0d2FyZSBhc3luYyBjcnlwdG8gZGFlbW9uCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX0NSWVBUX0gKKyNkZWZpbmUgX0NSWVBUT19DUllQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyIHsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgYmFzZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpfX2NyeXB0ZF9hYmxrY2lwaGVyX2Nhc3QoCisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0pCit7CisJcmV0dXJuIChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKil0Zm07Cit9CisKKy8qIGFsZ19uYW1lIHNob3VsZCBiZSBhbGdvcml0aG0gdG8gYmUgY3J5cHRkLWVkICovCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spOworc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKTsKK3ZvaWQgY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcihzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmggYi9pbmNsdWRlL2NyeXB0by9jcnlwdG9fd3EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QyNTJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIENSWVBUT19XUV9ICisjZGVmaW5lIENSWVBUT19XUV9ICisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprY3J5cHRvX3dxOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9oYXNoLmggYi9pbmNsdWRlL2NyeXB0by9oYXNoLmgKaW5kZXggZDc5N2UxMS4uZDU2YmI3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2hhc2guaApAQCAtMjMxLDYgKzIzMSwxMSBAQAogCXJldHVybiBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2soY3J5cHRvX3NoYXNoX3RmbSh0Zm0pKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShjcnlwdG9fc2hhc2hfdGZtKHRmbSkpOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzaGFzaF9hbGcgKl9fY3J5cHRvX3NoYXNoX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewogCXJldHVybiBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3Qgc2hhc2hfYWxnLCBiYXNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmggYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGE4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb21wcmVzczogQ29tcHJlc3Npb24gYWxnb3JpdGhtcyB1bmRlciB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0NSWVBUT19JTlRFUk5BTF9DT01QUkVTU19ICisjZGVmaW5lIF9DUllQVE9fSU5URVJOQUxfQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKK2V4dGVybiBpbnQgY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZyk7CitleHRlcm4gaW50IGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZyk7CisKKyNlbmRpZgkvKiBfQ1JZUFRPX0lOVEVSTkFMX0NPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybS5oIGIvaW5jbHVkZS9kcm0vZHJtLmgKaW5kZXggOGU3NzM1Ny4uN2NiNTBiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTM2LDggKzM2LDcgQEAKICNpZm5kZWYgX0RSTV9IXwogI2RlZmluZSBfRFJNX0hfCiAKLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgkJLyogRm9yIF9JTyogbWFjcm9zICovCiAjZGVmaW5lIERSTV9JT0NUTF9OUihuKQkJX0lPQ19OUihuKQogI2RlZmluZSBEUk1fSU9DX1ZPSUQJCV9JT0NfTk9ORQpAQCAtNDk3LDggKzQ5Niw4IEBACiAgKiBcc2EgZHJtTW9kZXNldEN0bCgpLgogICovCiBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsIHsKLQl1aW50MzJfdCBjcnRjOwotCXVpbnQzMl90IGNtZDsKKwlfX3UzMiBjcnRjOworCV9fdTMyIGNtZDsKIH07CiAKIC8qKgpAQCAtNTc0LDI5ICs1NzMsMjkgQEAKIC8qKiBEUk1fSU9DVExfR0VNX0NMT1NFIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX2Nsb3NlIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBvYmplY3QgdG8gYmUgY2xvc2VkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIH07CiAKIC8qKiBEUk1fSU9DVExfR0VNX0ZMSU5LIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG5hbWVkICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBSZXR1cm5lZCBnbG9iYWwgbmFtZSAqLwotCXVpbnQzMl90IG5hbWU7CisJX191MzIgbmFtZTsKIH07CiAKIC8qKiBEUk1fSU9DVExfR0VNX09QRU4gaW9jdGwgYXJndW1lbnQgdHlwZSAqLwogc3RydWN0IGRybV9nZW1fb3BlbiB7CiAJLyoqIE5hbWUgb2Ygb2JqZWN0IGJlaW5nIG9wZW5lZCAqLwotCXVpbnQzMl90IG5hbWU7CisJX191MzIgbmFtZTsKIAogCS8qKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybmVkIHNpemUgb2YgdGhlIG9iamVjdCAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIH07CiAKICNpbmNsdWRlICJkcm1fbW9kZS5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggNjAxZDJiZC4uYWUzMDRjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC0yNywxMSArMjcsOCBAQAogI2lmbmRlZiBfRFJNX01PREVfSAogI2RlZmluZSBfRFJNX01PREVfSAogCi0jaWYgIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIERSTV9ESVNQTEFZX0lORk9fTEVOCTMyCiAjZGVmaW5lIERSTV9DT05ORUNUT1JfTkFNRV9MRU4JMzIKQEAgLTgxLDQxICs3OCw0MSBAQAogI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT04JMQogCiBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gewotCXVpbnQzMl90IGNsb2NrOwotCXVpbnQxNl90IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OwotCXVpbnQxNl90IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOworCV9fdTMyIGNsb2NrOworCV9fdTE2IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OworCV9fdTE2IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOwogCi0JdWludDMyX3QgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCisJX191MzIgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCiAKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHR5cGU7CiAJY2hhciBuYW1lW0RSTV9ESVNQTEFZX01PREVfTEVOXTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9jYXJkX3JlcyB7Ci0JdWludDY0X3QgZmJfaWRfcHRyOwotCXVpbnQ2NF90IGNydGNfaWRfcHRyOwotCXVpbnQ2NF90IGNvbm5lY3Rvcl9pZF9wdHI7Ci0JdWludDY0X3QgZW5jb2Rlcl9pZF9wdHI7Ci0JdWludDMyX3QgY291bnRfZmJzOwotCXVpbnQzMl90IGNvdW50X2NydGNzOwotCXVpbnQzMl90IGNvdW50X2Nvbm5lY3RvcnM7Ci0JdWludDMyX3QgY291bnRfZW5jb2RlcnM7Ci0JdWludDMyX3QgbWluX3dpZHRoLCBtYXhfd2lkdGg7Ci0JdWludDMyX3QgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKKwlfX3U2NCBmYl9pZF9wdHI7CisJX191NjQgY3J0Y19pZF9wdHI7CisJX191NjQgY29ubmVjdG9yX2lkX3B0cjsKKwlfX3U2NCBlbmNvZGVyX2lkX3B0cjsKKwlfX3UzMiBjb3VudF9mYnM7CisJX191MzIgY291bnRfY3J0Y3M7CisJX191MzIgY291bnRfY29ubmVjdG9yczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBtaW5fd2lkdGgsIG1heF93aWR0aDsKKwlfX3UzMiBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0OwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGMgewotCXVpbnQ2NF90IHNldF9jb25uZWN0b3JzX3B0cjsKLQl1aW50MzJfdCBjb3VudF9jb25uZWN0b3JzOworCV9fdTY0IHNldF9jb25uZWN0b3JzX3B0cjsKKwlfX3UzMiBjb3VudF9jb25uZWN0b3JzOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCAqLwotCXVpbnQzMl90IGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCAqLworCV9fdTMyIGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCiAKLQl1aW50MzJfdCB4LCB5OyAvKio8IFBvc2l0aW9uIG9uIHRoZSBmcmFtZXVmZmVyICovCisJX191MzIgeCwgeTsgLyoqPCBQb3NpdGlvbiBvbiB0aGUgZnJhbWV1ZmZlciAqLwogCi0JdWludDMyX3QgZ2FtbWFfc2l6ZTsKLQl1aW50MzJfdCBtb2RlX3ZhbGlkOworCV9fdTMyIGdhbW1hX3NpemU7CisJX191MzIgbW9kZV92YWxpZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTEyNiwxMyArMTIzLDEzIEBACiAjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMJNAogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2VuY29kZXIgewotCXVpbnQzMl90IGVuY29kZXJfaWQ7Ci0JdWludDMyX3QgZW5jb2Rlcl90eXBlOworCV9fdTMyIGVuY29kZXJfaWQ7CisJX191MzIgZW5jb2Rlcl90eXBlOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCiAKLQl1aW50MzJfdCBwb3NzaWJsZV9jcnRjczsKLQl1aW50MzJfdCBwb3NzaWJsZV9jbG9uZXM7CisJX191MzIgcG9zc2libGVfY3J0Y3M7CisJX191MzIgcG9zc2libGVfY2xvbmVzOwogfTsKIAogLyogVGhpcyBpcyBmb3IgY29ubmVjdG9ycyB3aXRoIG11bHRpcGxlIHNpZ25hbCB0eXBlcy4gKi8KQEAgLTE2MSwyMyArMTU4LDIzIEBACiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIHsKIAotCXVpbnQ2NF90IGVuY29kZXJzX3B0cjsKLQl1aW50NjRfdCBtb2Rlc19wdHI7Ci0JdWludDY0X3QgcHJvcHNfcHRyOwotCXVpbnQ2NF90IHByb3BfdmFsdWVzX3B0cjsKKwlfX3U2NCBlbmNvZGVyc19wdHI7CisJX191NjQgbW9kZXNfcHRyOworCV9fdTY0IHByb3BzX3B0cjsKKwlfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CiAKLQl1aW50MzJfdCBjb3VudF9tb2RlczsKLQl1aW50MzJfdCBjb3VudF9wcm9wczsKLQl1aW50MzJfdCBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBjb3VudF9tb2RlczsKKwlfX3UzMiBjb3VudF9wcm9wczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKIAotCXVpbnQzMl90IGVuY29kZXJfaWQ7IC8qKjwgQ3VycmVudCBFbmNvZGVyICovCi0JdWludDMyX3QgY29ubmVjdG9yX2lkOyAvKio8IElkICovCi0JdWludDMyX3QgY29ubmVjdG9yX3R5cGU7Ci0JdWludDMyX3QgY29ubmVjdG9yX3R5cGVfaWQ7CisJX191MzIgZW5jb2Rlcl9pZDsgLyoqPCBDdXJyZW50IEVuY29kZXIgKi8KKwlfX3UzMiBjb25uZWN0b3JfaWQ7IC8qKjwgSWQgKi8KKwlfX3UzMiBjb25uZWN0b3JfdHlwZTsKKwlfX3UzMiBjb25uZWN0b3JfdHlwZV9pZDsKIAotCXVpbnQzMl90IGNvbm5lY3Rpb247Ci0JdWludDMyX3QgbW1fd2lkdGgsIG1tX2hlaWdodDsgLyoqPCBIeFcgaW4gbWlsbGltZXRlcnMgKi8KLQl1aW50MzJfdCBzdWJwaXhlbDsKKwlfX3UzMiBjb25uZWN0aW9uOworCV9fdTMyIG1tX3dpZHRoLCBtbV9oZWlnaHQ7IC8qKjwgSHhXIGluIG1pbGxpbWV0ZXJzICovCisJX191MzIgc3VicGl4ZWw7CiB9OwogCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfUEVORElORwkoMTw8MCkKQEAgLTE4Nyw0NiArMTg0LDQ2IEBACiAjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQgkoMTw8NCkKIAogc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gewotCXVpbnQ2NF90IHZhbHVlOworCV9fdTY0IHZhbHVlOwogCWNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5IHsKLQl1aW50NjRfdCB2YWx1ZXNfcHRyOyAvKiB2YWx1ZXMgYW5kIGJsb2IgbGVuZ3RocyAqLwotCXVpbnQ2NF90IGVudW1fYmxvYl9wdHI7IC8qIGVudW0gYW5kIGJsb2IgaWQgcHRycyAqLworCV9fdTY0IHZhbHVlc19wdHI7IC8qIHZhbHVlcyBhbmQgYmxvYiBsZW5ndGhzICovCisJX191NjQgZW51bV9ibG9iX3B0cjsgLyogZW51bSBhbmQgYmxvYiBpZCBwdHJzICovCiAKLQl1aW50MzJfdCBwcm9wX2lkOwotCXVpbnQzMl90IGZsYWdzOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgZmxhZ3M7CiAJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKIAotCXVpbnQzMl90IGNvdW50X3ZhbHVlczsKLQl1aW50MzJfdCBjb3VudF9lbnVtX2Jsb2JzOworCV9fdTMyIGNvdW50X3ZhbHVlczsKKwlfX3UzMiBjb3VudF9lbnVtX2Jsb2JzOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgewotCXVpbnQ2NF90IHZhbHVlOwotCXVpbnQzMl90IHByb3BfaWQ7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTY0IHZhbHVlOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgY29ubmVjdG9yX2lkOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIHsKLQl1aW50MzJfdCBibG9iX2lkOwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50NjRfdCBkYXRhOworCV9fdTMyIGJsb2JfaWQ7CisJX191MzIgbGVuZ3RoOworCV9fdTY0IGRhdGE7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIHsKLQl1aW50MzJfdCBmYl9pZDsKLQl1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OwotCXVpbnQzMl90IHBpdGNoOwotCXVpbnQzMl90IGJwcDsKLQl1aW50MzJfdCBkZXB0aDsKKwlfX3UzMiBmYl9pZDsKKwlfX3UzMiB3aWR0aCwgaGVpZ2h0OworCV9fdTMyIHBpdGNoOworCV9fdTMyIGJwcDsKKwlfX3UzMiBkZXB0aDsKIAkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCB7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTMyIGNvbm5lY3Rvcl9pZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTI0OCwyNCArMjQ1LDI0IEBACiAgKiAgICB5CiAgKi8KIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IgewotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IGNydGNfaWQ7Ci0JaW50MzJfdCB4OwotCWludDMyX3QgeTsKLQl1aW50MzJfdCB3aWR0aDsKLQl1aW50MzJfdCBoZWlnaHQ7CisJX191MzIgZmxhZ3M7CisJX191MzIgY3J0Y19pZDsKKwlfX3MzMiB4OworCV9fczMyIHk7CisJX191MzIgd2lkdGg7CisJX191MzIgaGVpZ2h0OwogCS8qIGRyaXZlciBzcGVjaWZpYyBoYW5kbGUgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IHsKLQl1aW50MzJfdCBjcnRjX2lkOwotCXVpbnQzMl90IGdhbW1hX3NpemU7CisJX191MzIgY3J0Y19pZDsKKwlfX3UzMiBnYW1tYV9zaXplOwogCiAJLyogcG9pbnRlcnMgdG8gYXJyYXlzICovCi0JdWludDY0X3QgcmVkOwotCXVpbnQ2NF90IGdyZWVuOwotCXVpbnQ2NF90IGJsdWU7CisJX191NjQgcmVkOworCV9fdTY0IGdyZWVuOworCV9fdTY0IGJsdWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDkxMmNkNTIuLjY3ZTMzNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMzAsNyArMzAsNyBAQAogLyogUGxlYXNlIG5vdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIGFsbCBzdHJ1Y3RzIGRlZmluZWQgaGVyZSBhcmUKICAqIHN1YmplY3QgdG8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgY29uc3RyYWludHMuCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiZHJtLmgiCiAKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KQEAgLTExNiwxNSArMTE2LDE1IEBACiAKIAkvKiBmaWxsIG91dCBzb21lIHNwYWNlIGZvciBvbGQgdXNlcnNwYWNlIHRyaXBsZSBidWZmZXIgKi8KIAlkcm1faGFuZGxlX3QgdW51c2VkX2hhbmRsZTsKLQl1aW50MzJfdCB1bnVzZWQxLCB1bnVzZWQyLCB1bnVzZWQzOworCV9fdTMyIHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CiAKIAkvKiBidWZmZXIgb2JqZWN0IGhhbmRsZXMgZm9yIHN0YXRpYyBidWZmZXJzLiBNYXkgY2hhbmdlCiAJICogb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNsaWVudC4KIAkgKi8KLQl1aW50MzJfdCBmcm9udF9ib19oYW5kbGU7Ci0JdWludDMyX3QgYmFja19ib19oYW5kbGU7Ci0JdWludDMyX3QgdW51c2VkX2JvX2hhbmRsZTsKLQl1aW50MzJfdCBkZXB0aF9ib19oYW5kbGU7CisJX191MzIgZnJvbnRfYm9faGFuZGxlOworCV9fdTMyIGJhY2tfYm9faGFuZGxlOworCV9fdTMyIHVudXNlZF9ib19oYW5kbGU7CisJX191MzIgZGVwdGhfYm9faGFuZGxlOwogCiB9IGRybV9pOTE1X3NhcmVhX3Q7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogfSBkcm1faTkxNV92Ymxhbmtfc3dhcF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9od3NfYWRkciB7Ci0JdWludDY0X3QgYWRkcjsKKwlfX3U2NCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgewpAQCAtMzM1LDEyICszMzUsMTIgQEAKIAkgKiBCZWdpbm5pbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X3N0YXJ0OworCV9fdTY0IGd0dF9zdGFydDsKIAkvKioKIAkgKiBFbmRpbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X2VuZDsKKwlfX3U2NCBndHRfZW5kOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgewpAQCAtMzQ5LDk0ICszNDksOTQgQEAKIAkgKgogCSAqIFRoZSAocGFnZS1hbGlnbmVkKSBhbGxvY2F0ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdCB3aWxsIGJlIHJldHVybmVkLgogCSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCiAJICoKIAkgKiBPYmplY3QgaGFuZGxlcyBhcmUgbm9uemVyby4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHJlYWQgZnJvbSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byB3cml0ZSB0aGUgZGF0YSBpbnRvLgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBkYXRhX3B0cjsKKwlfX3U2NCBkYXRhX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHdyaXR0ZW4gdG8uICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHdyaXRlIHRvICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAkvKiogTGVuZ3RoIG9mIGRhdGEgdG8gd3JpdGUgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byByZWFkIHRoZSBkYXRhIGZyb20uCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGRhdGFfcHRyOworCV9fdTY0IGRhdGFfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCS8qKgogCSAqIExlbmd0aCBvZiBkYXRhIHRvIG1hcC4KIAkgKgogCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIHBhZ2UtYWxpZ25lZC4KIAkgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBhZGRyX3B0cjsKKwlfX3U2NCBhZGRyX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKioKIAkgKiBGYWtlIG9mZnNldCB0byB1c2UgZm9yIHN1YnNlcXVlbnQgbW1hcCBjYWxsCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4gewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE5ldyByZWFkIGRvbWFpbnMgKi8KLQl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisJX191MzIgcmVhZF9kb21haW5zOwogCiAJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHsKQEAgLTQ0OCwxNiArNDQ4LDE2IEBACiAJICogYSByZWxvY2F0aW9uIGxpc3QgZm9yIHN0YXRlIGJ1ZmZlcnMgYW5kIG5vdCByZS13cml0ZSBpdCBwZXIKIAkgKiBleGVjIHVzaW5nIHRoZSBidWZmZXIuCiAJICovCi0JdWludDMyX3QgdGFyZ2V0X2hhbmRsZTsKKwlfX3UzMiB0YXJnZXRfaGFuZGxlOwogCiAJLyoqCiAJICogVmFsdWUgdG8gYmUgYWRkZWQgdG8gdGhlIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0byBtYWtlIHVwCiAJICogdGhlIHJlbG9jYXRpb24gZW50cnkuCiAJICovCi0JdWludDMyX3QgZGVsdGE7CisJX191MzIgZGVsdGE7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBidWZmZXIgdGhlIHJlbG9jYXRpb24gZW50cnkgd2lsbCBiZSB3cml0dGVuIGludG8gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCiAJLyoqCiAJICogT2Zmc2V0IHZhbHVlIG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRoYXQgdGhlIHJlbG9jYXRpb24gZW50cnkgd2FzIGxhc3QKQEAgLTQ2NywxMiArNDY3LDEyIEBACiAJICogYW5kIHdyaXRpbmcgdGhlIHJlbG9jYXRpb24uICBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gYmFjayBvdXQgYnkKIAkgKiB0aGUgZXhlY2J1ZmZlciBpb2N0bCB3aGVuIHRoZSByZWxvY2F0aW9uIGlzIHdyaXR0ZW4uCiAJICovCi0JdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0OworCV9fdTY0IHByZXN1bWVkX29mZnNldDsKIAogCS8qKgogCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyByZWFkIGJ5IHRoaXMgb3BlcmF0aW9uLgogCSAqLwotCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwlfX3UzMiByZWFkX2RvbWFpbnM7CiAKIAkvKioKIAkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KQEAgLTQ4MSw3ICs0ODEsNyBAQAogCSAqIGV4ZWNidWZmZXIgb3BlcmF0aW9uLCBzbyB0aGF0IHdoZXJlIHRoZXJlIGFyZSBjb25mbGljdHMsCiAJICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgZ2V0IC1FSU5WQUwgYmFjay4KIAkgKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogLyoqIEB7CkBAIC01MTIsMjQgKzUxMiwyNCBAQAogCSAqIFVzZXIncyBoYW5kbGUgZm9yIGEgYnVmZmVyIHRvIGJlIGJvdW5kIGludG8gdGhlIEdUVCBmb3IgdGhpcwogCSAqIG9wZXJhdGlvbi4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE51bWJlciBvZiByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBidWZmZXIgKi8KLQl1aW50MzJfdCByZWxvY2F0aW9uX2NvdW50OworCV9fdTMyIHJlbG9jYXRpb25fY291bnQ7CiAJLyoqCiAJICogUG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgY29udGFpbmluZwogCSAqIHRoZSByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgaW4gdGhpcyBidWZmZXIuCiAJICovCi0JdWludDY0X3QgcmVsb2NzX3B0cjsKKwlfX3U2NCByZWxvY3NfcHRyOwogCiAJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKioKIAkgKiBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgdXBkYXRlZCBvZmZzZXQgb2YgdGhlIG9iamVjdCwgZm9yIGZ1dHVyZQogCSAqIHByZXN1bWVkX29mZnNldCB3cml0ZXMuCiAJICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciB7CkBAIC01NDMsNDQgKzU0Myw0NCBAQAogCSAqIGEgYnVmZmVyIGlzIHBlcmZvcm1pbmcgcmVmZXIgdG8gYnVmZmVycyB0aGF0IGhhdmUgYWxyZWFkeSBhcHBlYXJlZAogCSAqIGluIHRoZSB2YWxpZGF0ZSBsaXN0LgogCSAqLwotCXVpbnQ2NF90IGJ1ZmZlcnNfcHRyOwotCXVpbnQzMl90IGJ1ZmZlcl9jb3VudDsKKwlfX3U2NCBidWZmZXJzX3B0cjsKKwlfX3UzMiBidWZmZXJfY291bnQ7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KLQl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJX191MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OwogCS8qKiBCeXRlcyB1c2VkIGluIGJhdGNoYnVmZmVyIGZyb20gYmF0Y2hfc3RhcnRfb2Zmc2V0ICovCi0JdWludDMyX3QgYmF0Y2hfbGVuOwotCXVpbnQzMl90IERSMTsKLQl1aW50MzJfdCBEUjQ7Ci0JdWludDMyX3QgbnVtX2NsaXByZWN0czsKKwlfX3UzMiBiYXRjaF9sZW47CisJX191MzIgRFIxOworCV9fdTMyIERSNDsKKwlfX3UzMiBudW1fY2xpcHJlY3RzOwogCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLwotCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7CisJX191NjQgY2xpcHJlY3RzX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgcGlubmVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAogCS8qKiBhbGlnbm1lbnQgcmVxdWlyZWQgd2l0aGluIHRoZSBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKiogUmV0dXJuZWQgR1RUIG9mZnNldCBvZiB0aGUgYnVmZmVyLiAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9idXN5IHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gY2hlY2sgZm9yIGJ1c3kgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCi0JdWludDMyX3QgYnVzeTsKKwlfX3UzMiBidXN5OwogfTsKIAogI2RlZmluZSBJOTE1X1RJTElOR19OT05FCTAKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBoYXZlIGl0cyB0aWxpbmcgc3RhdGUgdXBkYXRlZCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKQEAgLTYxMSw0NyArNjExLDQ3IEBACiAJICoKIAkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgogCSAqIEk5MTVfVElMSU5HX1kuCiAJICovCi0JdWludDMyX3Qgc3RyaWRlOworCV9fdTMyIHN0cmlkZTsKIAogCS8qKgogCSAqIFJldHVybmVkIGFkZHJlc3MgYml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBDUFUgYWNjZXNzIHRocm91Z2gKIAkgKiBtbWFwIG1hcHBpbmcuCiAJICovCi0JdWludDMyX3Qgc3dpenpsZV9tb2RlOworCV9fdTMyIHN3aXp6bGVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGdldCB0aWxpbmcgc3RhdGUgZm9yLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAogCSAqIEk5MTVfVElMSU5HX1kpLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAogCSAqIG1tYXAgbWFwcGluZy4KIAkgKi8KLQl1aW50MzJfdCBzd2l6emxlX21vZGU7CisJX191MzIgc3dpenpsZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfYXBlcnR1cmUgewogCS8qKiBUb3RhbCBzaXplIG9mIHRoZSBhcGVydHVyZSB1c2VkIGJ5IGk5MTVfZ2VtX2V4ZWNidWZmZXIsIGluIGJ5dGVzICovCi0JdWludDY0X3QgYXBlcl9zaXplOworCV9fdTY0IGFwZXJfc2l6ZTsKIAogCS8qKgogCSAqIEF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgYXBlcnR1cmUgdXNlZCBieSBpOTE1X2dlbV9leGVjYnVmZmVyLCBpbgogCSAqIGJ5dGVzCiAJICovCi0JdWludDY0X3QgYXBlcl9hdmFpbGFibGVfc2l6ZTsKKwlfX3U2NCBhcGVyX2F2YWlsYWJsZV9zaXplOwogfTsKIAogI2VuZGlmCQkJCS8qIF9JOTE1X0RSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oIGIvaW5jbHVkZS9kcm0vbWdhX2RybS5oCmluZGV4IDk0NGI1MGEuLjMyNWZkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL21nYV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKQEAgLTM1LDYgKzM1LDggQEAKICNpZm5kZWYgX19NR0FfRFJNX0hfXwogI2RlZmluZSBfX01HQV9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWHNlcnZlciBmaWxlIChtZ2Ffc2FyZWEuaCkKICAqLwpAQCAtMjU1LDggKzI1Nyw4IEBACiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfSUxPQUQgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfSUxPQUQsIGRybV9tZ2FfaWxvYWRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9CTElUICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9CTElULCBkcm1fbWdhX2JsaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9HRVRQQVJBTSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9HRVRQQVJBTSwgZHJtX21nYV9nZXRwYXJhbV90KQotI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCB1aW50MzJfdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIHVpbnQzMl90KQorI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCBfX3UzMikKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIF9fdTMyKQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfRE1BX0JPT1RTVFJBUCwgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QpCiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fbWdhX3dhcnBfaW5kZXggewpAQCAtMzEwLDcgKzMxMiw3IEBACiAJICovCiAJLypAeyAqLwogCXVuc2lnbmVkIGxvbmcgdGV4dHVyZV9oYW5kbGU7IC8qKjwgSGFuZGxlIHVzZWQgdG8gbWFwIEFHUCB0ZXh0dXJlcy4gKi8KLQl1aW50MzJfdCB0ZXh0dXJlX3NpemU7CSAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgQUdQIHRleHR1cmUgcmVnaW9uLiAqLworCV9fdTMyIHRleHR1cmVfc2l6ZTsJICAgICAgLyoqPCBTaXplIG9mIHRoZSBBR1AgdGV4dHVyZSByZWdpb24uICovCiAJLypAfSAqLwogCiAJLyoqCkBAIC0zMTksNyArMzIxLDcgQEAKIAkgKiBPbiByZXR1cm4gZnJvbSB0aGUgRFJNX01HQV9ETUFfQk9PVFNUUkFQIGlvY3RsLCB0aGlzIGZpZWxkIHdpbGwgYmUKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICovCi0JdWludDMyX3QgcHJpbWFyeV9zaXplOworCV9fdTMyIHByaW1hcnlfc2l6ZTsKIAogCS8qKgogCSAqIFJlcXVlc3RlZCBudW1iZXIgb2Ygc2Vjb25kYXJ5IERNQSBidWZmZXJzLgpAQCAtMzI5LDcgKzMzMSw3IEBACiAJICogYWxsb2NhdGVkLiAgUGFydGljdWxhcmx5IHdoZW4gUENJIERNQSBpcyB1c2VkLCB0aGlzIG1heSBiZQogCSAqIChzdWJ0YW50aWFsbHkpIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX2NvdW50OworCV9fdTMyIHNlY29uZGFyeV9iaW5fY291bnQ7CiAKIAkvKioKIAkgKiBSZXF1ZXN0ZWQgc2l6ZSBvZiBlYWNoIHNlY29uZGFyeSBETUEgYnVmZmVyLgpAQCAtMzM4LDcgKzM0MCw3IEBACiAJICogZG1hX21nYV9kbWFfYm9vdHN0cmFwOjpzZWNvbmRhcnlfYmluX2NvdW50LCBpdCBpcyBcYiBub3QgYWxsb3dlZAogCSAqIHRvIHJlZHVjZSBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fc2l6ZS4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX3NpemU7CisJX191MzIgc2Vjb25kYXJ5X2Jpbl9zaXplOwogCiAJLyoqCiAJICogQml0LXdpc2UgbWFzayBvZiBBR1BTVEFUMl8qIHZhbHVlcy4gIEN1cnJlbnRseSBvbmx5IFxjIEFHUFNUQVQyXzFYLApAQCAtMzUwLDEyICszNTIsMTIgQEAKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICogKGkuZS4sIFBDSSBETUEgd2FzIHVzZWQpLCB0aGlzIHZhbHVlIHdpbGwgYmUgemVyby4KIAkgKi8KLQl1aW50MzJfdCBhZ3BfbW9kZTsKKwlfX3UzMiBhZ3BfbW9kZTsKIAogCS8qKgogCSAqIERlc2lyZWQgQUdQIEdBUlQgc2l6ZSwgbWVhc3VyZWQgaW4gbWVnYWJ5dGVzLgogCSAqLwotCXVpbnQ4X3QgYWdwX3NpemU7CisJX191OCBhZ3Bfc2l6ZTsKIH0gZHJtX21nYV9kbWFfYm9vdHN0cmFwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfY2xlYXIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDczZmY1MWYuLjcyZWNmNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTMzLDYgKzMzLDggQEAKICNpZm5kZWYgX19SQURFT05fRFJNX0hfXwogI2RlZmluZSBfX1JBREVPTl9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWCBzZXJ2ZXIgZmlsZSAocmFkZW9uX3NhcmVhLmgpCiAgKi8KQEAgLTcyMiw3ICs3MjQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3NldHBhcmFtIHsKIAl1bnNpZ25lZCBpbnQgcGFyYW07Ci0JaW50NjRfdCB2YWx1ZTsKKwlfX3M2NCB2YWx1ZTsKIH0gZHJtX3JhZGVvbl9zZXRwYXJhbV90OwogCiAjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9GQl9MT0NBVElPTiAgICAxCS8qIGRldGVybWluZWQgZnJhbWVidWZmZXIgbG9jYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaCBiL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaAppbmRleCBhM2I1YzEwLi4xNzA3ODZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS92aWFfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vdmlhX2RybS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIF9WSUFfRFJNX0hfCiAjZGVmaW5lIF9WSUFfRFJNX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBUaGVzZSBkZWZpbmVzIG11c3QgYmUgdGhlIHNhbWUgYXMgd2hhdCB0aGUgWHNlcnZlciB1c2VzLgogICogaWYgeW91IGNoYW5nZSB0aGVtLCB5b3UgbXVzdCBjaGFuZ2UgdGhlIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIuCiAgKi8KQEAgLTExNCwxOSArMTE2LDE5IEBACiAjZGVmaW5lIFZJQV9NRU1fVU5LTk9XTiA0CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgc2l6ZTsKIH0gZHJtX3ZpYV9hZ3BfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2ZiX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBjb250ZXh0OwotCXVpbnQzMl90IHR5cGU7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBjb250ZXh0OworCV9fdTMyIHR5cGU7CisJX191MzIgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogfSBkcm1fdmlhX21lbV90OwpAQCAtMTQ4LDkgKzE1MCw5IEBACiAJCVZJQV9GVVRFWF9XQUlUID0gMHgwMCwKIAkJVklBX0ZVVEVYX1dBS0UgPSAwWDAxCiAJfSBmdW5jOwotCXVpbnQzMl90IG1zOwotCXVpbnQzMl90IGxvY2s7Ci0JdWludDMyX3QgdmFsOworCV9fdTMyIG1zOworCV9fdTMyIGxvY2s7CisJX191MzIgdmFsOwogfSBkcm1fdmlhX2Z1dGV4X3Q7CiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fdmlhX2RtYV9pbml0IHsKQEAgLTIxMSw3ICsyMTMsNyBAQAogCQlWSUFfQ01EQlVGX0xBRyA9IDB4MDIKIAl9IGZ1bmM7CiAJaW50IHdhaXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2NtZGJ1Zl9zaXplX3Q7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0yMzYsOCArMjM4LDggQEAKIHN0cnVjdCBkcm1fdmlhX3dhaXRfaXJxX3JlcXVlc3QgewogCXVuc2lnbmVkIGlycTsKIAl2aWFfaXJxX3NlcV90eXBlX3QgdHlwZTsKLQl1aW50MzJfdCBzZXF1ZW5jZTsKLQl1aW50MzJfdCBzaWduYWw7CisJX191MzIgc2VxdWVuY2U7CisJX191MzIgc2lnbmFsOwogfTsKIAogdHlwZWRlZiB1bmlvbiBkcm1fdmlhX2lycXdhaXQgewpAQCAtMjQ2LDcgKzI0OCw3IEBACiB9IGRybV92aWFfaXJxd2FpdF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX2JsaXRzeW5jIHsKLQl1aW50MzJfdCBzeW5jX2hhbmRsZTsKKwlfX3UzMiBzeW5jX2hhbmRsZTsKIAl1bnNpZ25lZCBlbmdpbmU7CiB9IGRybV92aWFfYmxpdHN5bmNfdDsKIApAQCAtMjU3LDE2ICsyNTksMTYgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX2RtYWJsaXQgewotCXVpbnQzMl90IG51bV9saW5lczsKLQl1aW50MzJfdCBsaW5lX2xlbmd0aDsKKwlfX3UzMiBudW1fbGluZXM7CisJX191MzIgbGluZV9sZW5ndGg7CiAKLQl1aW50MzJfdCBmYl9hZGRyOwotCXVpbnQzMl90IGZiX3N0cmlkZTsKKwlfX3UzMiBmYl9hZGRyOworCV9fdTMyIGZiX3N0cmlkZTsKIAogCXVuc2lnbmVkIGNoYXIgKm1lbV9hZGRyOwotCXVpbnQzMl90IG1lbV9zdHJpZGU7CisJX191MzIgbWVtX3N0cmlkZTsKIAotCXVpbnQzMl90IGZsYWdzOworCV9fdTMyIGZsYWdzOwogCWludCB0b19mYjsKIAogCWRybV92aWFfYmxpdHN5bmNfdCBzeW5jOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCAxMDZjM2JhLi5lOTU4MWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTE1LDYgKzExNSw3IEBACiBoZWFkZXIteSArPSBtdGlvLmgKIGhlYWRlci15ICs9IG5jcF9uby5oCiBoZWFkZXIteSArPSBuZWlnaGJvdXIuaAoraGVhZGVyLXkgKz0gbmV0X2Ryb3Btb24uaAogaGVhZGVyLXkgKz0gbmV0ZmlsdGVyX2FycC5oCiBoZWFkZXIteSArPSBuZXRyb20uaAogaGVhZGVyLXkgKz0gbmZzMi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaCBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCmluZGV4IDExMGM2MDAuLmY2Nzc4ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCkBAIC03NywyMCArNzcsMjAgQEAKICAqIFRoZSAicHJvdCIgZG93biBiZWxvdyBuZWVkcyBzdGlsbCBhICJzbGVlcCIgZmxhZyBzb21laG93IC4uLgogICovCiB0eXBlZGVmIHN0cnVjdCBfYWdwX3NlZ21lbnQgewotCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLwotCXNpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLwotCWludCBwcm90OwkJLyogcHJvdCBmbGFncyBmb3IgbW1hcCAgICAgICAgICAqLworCV9fa2VybmVsX29mZl90IHBnX3N0YXJ0OwkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJX19rZXJuZWxfc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJaW50IHByb3Q7CQkJLyogcHJvdCBmbGFncyBmb3IgbW1hcCAgICAgICAgICAqLwogfSBhZ3Bfc2VnbWVudDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9yZWdpb24gewotCXBpZF90IHBpZDsJCS8qIHBpZCBvZiBwcm9jZXNzICAgICAgICAgICAgICAgKi8KLQlzaXplX3Qgc2VnX2NvdW50OwkvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAgICAgICAgICovCisJX19rZXJuZWxfcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgKi8KKwlfX2tlcm5lbF9zaXplX3Qgc2VnX2NvdW50OwkvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAqLwogCXN0cnVjdCBfYWdwX3NlZ21lbnQgKnNlZ19saXN0OwogfSBhZ3BfcmVnaW9uOwogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX2FsbG9jYXRlIHsKIAlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLwotCXNpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLworCV9fa2VybmVsX3NpemVfdCBwZ19jb3VudDsvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgKi8KIAlfX3UzMiB0eXBlOwkJLyogMCA9PSBub3JtYWwsIG90aGVyIGRldnNwZWMgICAqLwogICAgCV9fdTMyIHBoeXNpY2FsOyAgICAgICAgIC8qIGRldmljZSBzcGVjaWZpYyAoc29tZSBkZXZpY2VzICAKIAkJCQkgKiBuZWVkIGEgcGh5cyBhZGRyZXNzIG9mIHRoZSAgICAgCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9iaW5kIHsKIAlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLwotCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLworCV9fa2VybmVsX29mZl90IHBnX3N0YXJ0Oy8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KIH0gYWdwX2JpbmQ7CiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfdW5iaW5kIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCmluZGV4IGExOTE2MDcuLmNkNGJjYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMjM1LDggKzIzNSw2IEBACiAKIAogc3RydWN0IGFyY25ldF9sb2NhbCB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KIAl1aW50OF90IGNvbmZpZywJCS8qIGN1cnJlbnQgdmFsdWUgb2YgQ09ORklHIHJlZ2lzdGVyICovCiAJCXRpbWVvdXQsCS8qIEV4dGVuZGVkIHRpbWVvdXQgZm9yIENPTTIwMDIwICovCiAJCWJhY2twbGFuZSwJLyogQmFja3BsYW5lIGZsYWcgZm9yIENPTTIwMDIwICovCkBAIC0zMzUsNyArMzMzLDEyIEBACiAKIHZvaWQgYXJjbmV0X3VucmVnaXN0ZXJfcHJvdG8oc3RydWN0IEFyY1Byb3RvICpwcm90byk7CiBpcnFyZXR1cm5fdCBhcmNuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNoYXIgKm5hbWUpOworc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2Rldihjb25zdCBjaGFyICpuYW1lKTsKKworaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCQkJCS8qIF9MSU5VWF9BUkNERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggOWEwNjFhYy4uNjYxN2M5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC0xMDgsNiArMTA4LDggQEAKIAlBVEFfUElPNQkJPSBBVEFfUElPNCB8ICgxIDw8IDUpLAogCUFUQV9QSU82CQk9IEFUQV9QSU81IHwgKDEgPDwgNiksCiAKKwlBVEFfUElPNF9PTkxZCQk9ICgxIDw8IDQpLAorCiAJQVRBX1NXRE1BMAkJPSAoMSA8PCAwKSwKIAlBVEFfU1dETUExCQk9IEFUQV9TV0RNQTAgfCAoMSA8PCAxKSwKIAlBVEFfU1dETUEyCQk9IEFUQV9TV0RNQTEgfCAoMSA8PCAyKSwKQEAgLTExNyw2ICsxMTksOCBAQAogCUFUQV9NV0RNQTAJCT0gKDEgPDwgMCksCiAJQVRBX01XRE1BMQkJPSBBVEFfTVdETUEwIHwgKDEgPDwgMSksCiAJQVRBX01XRE1BMgkJPSBBVEFfTVdETUExIHwgKDEgPDwgMiksCisJQVRBX01XRE1BMwkJPSBBVEFfTVdETUEyIHwgKDEgPDwgMyksCisJQVRBX01XRE1BNAkJPSBBVEFfTVdETUEzIHwgKDEgPDwgNCksCiAKIAlBVEFfTVdETUExMl9PTkxZCT0gKDEgPDwgMSkgfCAoMSA8PCAyKSwKIAlBVEFfTVdETUEyX09OTFkJCT0gKDEgPDwgMiksCkBAIC0xMzEsNiArMTM1LDggQEAKIAlBVEFfVURNQTcJCT0gQVRBX1VETUE2IHwgKDEgPDwgNyksCiAJLyogQVRBX1VETUE3IGlzIGp1c3QgZm9yIGNvbXBsZXRlbmVzcy4uLiBkb2Vzbid0IGV4aXN0ICh5ZXQ/KS4gICovCiAKKwlBVEFfVURNQTI0X09OTFkJCT0gKDEgPDwgMikgfCAoMSA8PCA0KSwKKwogCUFUQV9VRE1BX01BU0tfNDBDCT0gQVRBX1VETUEyLAkvKiB1ZG1hMC0yICovCiAKIAkvKiBETUEtcmVsYXRlZCAqLwpAQCAtMjQ0LDggKzI1MCw2IEBACiAJQVRBX0NNRF9NRURJQV9VTkxPQ0sJPSAweERGLAogCS8qIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgQVRBL0FUQVBJLTcgc3BlYyAqLwogCUFUQV9DTURfUkVTVE9SRQkJPSAweDEwLAotCS8qIEVYQUJZVEUgc3BlY2lmaWMgKi8KLQlBVEFfRVhBQllURV9FTkFCTEVfTkVTVAk9IDB4RjAsCiAKIAkvKiBSRUFEX0xPR19FWFQgcGFnZXMgKi8KIAlBVEFfTE9HX1NBVEFfTkNRCT0gMHgxMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQ3ZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9BVEg5S19QTEFURk9STV9ICisjZGVmaW5lIF9MSU5VWF9BVEg5S19QTEFURk9STV9ICisKKyNkZWZpbmUgQVRIOUtfUExBVF9FRVBfTUFYX1dPUkRTCTIwNDgKKworc3RydWN0IGF0aDlrX3BsYXRmb3JtX2RhdGEgeworCXUxNiBlZXByb21fZGF0YVtBVEg5S19QTEFUX0VFUF9NQVhfV09SRFNdOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9BVEg5S19QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oIGIvaW5jbHVkZS9saW51eC9hdG1sZWMuaAppbmRleCA2ZjVhMWJhYi4uMzljOTE3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1sZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBBVE0gbGVjIGRhZW1vbiBjb250cm9sIHNvY2tldCAqLwogI2RlZmluZSBBVE1MRUNfQ1RSTAlfSU8oJ2EnLCBBVE1JT0NfTEFORSkKQEAgLTc4LDggKzc5LDggQEAKIAkJfSBub3JtYWw7CiAJCXN0cnVjdCBhdG1sZWNfY29uZmlnX21zZyBjb25maWc7CiAJCXN0cnVjdCB7Ci0JCQl1aW50MTZfdCBsZWNfaWQ7CQkJLyogcmVxdWVzdG9yIGxlY19pZCAgKi8KLQkJCXVpbnQzMl90IHRyYW5faWQ7CQkJLyogdHJhbnNhY3Rpb24gaWQgICAgKi8KKwkJCV9fdTE2IGxlY19pZDsJCQkJLyogcmVxdWVzdG9yIGxlY19pZCAgKi8KKwkJCV9fdTMyIHRyYW5faWQ7CQkJCS8qIHRyYW5zYWN0aW9uIGlkICAgICovCiAJCQl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsJLyogZHN0IG1hYyBhZGRyICAgICAgKi8KIAkJCXVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOwkvKiByZXFlc3RvciBBVE0gYWRkciAqLwogCQl9IHByb3h5OwkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaCBiL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKaW5kZXggZWExNjUwNC4uMmFiYTU3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgQVRNTVBDX0NUUkwgX0lPKCdhJywgQVRNSU9DX01QT0EpCiAjZGVmaW5lIEFUTU1QQ19EQVRBIF9JTygnYScsIEFUTUlPQ19NUE9BKzEpCkBAIC0xOCwzOSArMTksMzkgQEAKIH07CiAKIHR5cGVkZWYgc3RydWN0IGluX2N0cmxfaW5mbyB7Ci0gICAgICAgIHVpbnQ4X3QgICBMYXN0X05IUlBfQ0lFX2NvZGU7Ci0gICAgICAgIHVpbnQ4X3QgICBMYXN0X1EyOTMxX2NhdXNlX3ZhbHVlOyAgICAgCi0gICAgICAgIHVpbnQ4X3QgICBlZ19NUENfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3U4ICAgTGFzdF9OSFJQX0NJRV9jb2RlOworICAgICAgICBfX3U4ICAgTGFzdF9RMjkzMV9jYXVzZV92YWx1ZTsKKyAgICAgICAgX191OCAgIGVnX01QQ19BVE1fYWRkcltBVE1fRVNBX0xFTl07CiAgICAgICAgIF9fYmUzMiAgdGFnOwogICAgICAgICBfX2JlMzIgIGluX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRoaXMgaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyB0byAqLwotICAgICAgICB1aW50MTZfdCAgaG9sZGluZ190aW1lOwotICAgICAgICB1aW50MzJfdCAgcmVxdWVzdF9pZDsKKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKKyAgICAgICAgX191MzIgIHJlcXVlc3RfaWQ7CiB9IGluX2N0cmxfaW5mbzsKIAogdHlwZWRlZiBzdHJ1Y3QgZWdfY3RybF9pbmZvIHsKLSAgICAgICAgdWludDhfdCAgIERMTF9oZWFkZXJbMjU2XTsKLSAgICAgICAgdWludDhfdCAgIERIX2xlbmd0aDsKKyAgICAgICAgX191OCAgIERMTF9oZWFkZXJbMjU2XTsKKyAgICAgICAgX191OCAgIERIX2xlbmd0aDsKICAgICAgICAgX19iZTMyICBjYWNoZV9pZDsKICAgICAgICAgX19iZTMyICB0YWc7CiAgICAgICAgIF9fYmUzMiAgbXBzX2lwOwogICAgICAgICBfX2JlMzIgIGVnX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRvIHdoaWNoIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgKi8KLSAgICAgICAgdWludDhfdCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKLSAgICAgICAgdWludDE2X3QgIGhvbGRpbmdfdGltZTsKKyAgICAgICAgX191OCAgIGluX01QQ19kYXRhX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191MTYgIGhvbGRpbmdfdGltZTsKIH0gZWdfY3RybF9pbmZvOwogCiBzdHJ1Y3QgbXBjX3BhcmFtZXRlcnMgewotICAgICAgICB1aW50MTZfdCBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCi0gICAgICAgIHVpbnQ4X3QgbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLyAgICAgIAorICAgICAgICBfX3UxNiBtcGNfcDE7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgQ291bnQgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3AyOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIFRpbWUgICAgICovCisgICAgICAgIF9fdTggbXBjX3AzWzhdOyAvKiBGbG93LWRldGVjdGlvbiBQcm90b2NvbHMgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDQ7ICAgLyogTVBDIEluaXRpYWwgUmV0cnkgVGltZSAgICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A1OyAgIC8qIE1QQyBSZXRyeSBUaW1lIE1heGltdW0gICAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNjsgICAvKiBIb2xkIERvd24gVGltZSAgICAgICAgICAgICAgICAqLwogfSA7CiAKIHN0cnVjdCBrX21lc3NhZ2UgewotICAgICAgICB1aW50MTZfdCB0eXBlOworICAgICAgICBfX3UxNiB0eXBlOwogICAgICAgICBfX2JlMzIgaXBfbWFzazsKLSAgICAgICAgdWludDhfdCAgTVBTX2N0cmxbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3U4ICBNUFNfY3RybFtBVE1fRVNBX0xFTl07CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICBpbl9jdHJsX2luZm8gaW5faW5mbzsKICAgICAgICAgICAgICAgICBlZ19jdHJsX2luZm8gZWdfaW5mbzsKQEAgLTYxLDExICs2MiwxMSBAQAogCiBzdHJ1Y3QgbGxjX3NuYXBfaGRyIHsKIAkvKiBSRkMgMTQ4MyBMTEMvU05BUCBlbmNhcHN1bGF0aW9uIGZvciByb3V0ZWQgSVAgUERVcyAqLwotICAgICAgICB1aW50OF90ICBkc2FwOyAgICAvKiBEZXN0aW5hdGlvbiBTZXJ2aWNlIEFjY2VzcyBQb2ludCAoMHhBQSkgICAgICovCi0gICAgICAgIHVpbnQ4X3QgIHNzYXA7ICAgIC8qIFNvdXJjZSBTZXJ2aWNlIEFjY2VzcyBQb2ludCAgICAgICgweEFBKSAgICAgKi8KLSAgICAgICAgdWludDhfdCAgdWk7ICAgICAgLyogVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAgICAgICAgICAgKDB4MDMpICAgICAqLwotICAgICAgICB1aW50OF90ICBvcmdbM107ICAvKiBPcmdhbml6YXRpb25hbCBpZGVudGlmaWNhdGlvbiAgICAoMHgwMDAwMDApICovCi0gICAgICAgIHVpbnQ4X3QgIHR5cGVbMl07IC8qIEV0aGVyIHR5cGUgKGZvciBJUCkgICAgICAgICAgICAgICgweDA4MDApICAgKi8KKyAgICAgICAgX191OCAgZHNhcDsgICAgLyogRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQgKDB4QUEpICAgICAqLworICAgICAgICBfX3U4ICBzc2FwOyAgICAvKiBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQgICAgICAoMHhBQSkgICAgICovCisgICAgICAgIF9fdTggIHVpOyAgICAgIC8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gICAgICAgICAgICgweDAzKSAgICAgKi8KKyAgICAgICAgX191OCAgb3JnWzNdOyAgLyogT3JnYW5pemF0aW9uYWwgaWRlbnRpZmljYXRpb24gICAgKDB4MDAwMDAwKSAqLworICAgICAgICBfX3U4ICB0eXBlWzJdOyAvKiBFdGhlciB0eXBlIChmb3IgSVApICAgICAgICAgICAgICAoMHgwODAwKSAgICovCiB9OwogCiAvKiBUTFZzIHRoaXMgTVBDIHJlY29nbml6ZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCA2N2U1ZGJmLi40ZmEyODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0zNiw3ICszNiw4IEBACiAgKiAxNTAwIC0gMTU5OSBrZXJuZWwgTFNQUCBldmVudHMKICAqIDE2MDAgLSAxNjk5IGtlcm5lbCBjcnlwdG8gZXZlbnRzCiAgKiAxNzAwIC0gMTc5OSBrZXJuZWwgYW5vbWFseSByZWNvcmRzCi0gKiAxODAwIC0gMTk5OSBmdXR1cmUga2VybmVsIHVzZSAobWF5YmUgaW50ZWdyaXR5IGxhYmVscyBhbmQgcmVsYXRlZCBldmVudHMpCisgKiAxODAwIC0gMTg5OSBrZXJuZWwgaW50ZWdyaXR5IGV2ZW50cworICogMTkwMCAtIDE5OTkgZnV0dXJlIGtlcm5lbCB1c2UKICAqIDIwMDAgaXMgZm9yIG90aGVyd2lzZSB1bmNsYXNzaWZpZWQga2VybmVsIGF1ZGl0IG1lc3NhZ2VzIChsZWdhY3kpCiAgKiAyMDAxIC0gMjA5OSB1bnVzZWQgKGtlcm5lbCkKICAqIDIxMDAgLSAyMTk5IHVzZXIgc3BhY2UgYW5vbWFseSByZWNvcmRzCkBAIC0xMjUsNiArMTI2LDEyIEBACiAjZGVmaW5lIEFVRElUX0xBU1RfS0VSTl9BTk9NX01TRyAgICAxNzk5CiAjZGVmaW5lIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgICAgICAxNzAwIC8qIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUgKi8KICNkZWZpbmUgQVVESVRfQU5PTV9BQkVORCAgICAgICAgICAgIDE3MDEgLyogUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5ICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9EQVRBCSAgICAxODAwIC8qIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgICAgMTgwMSAvKiBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9TVEFUVVMJICAgIDE4MDIgLyogSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0hBU0gJICAgIDE4MDMgLyogSW50ZWdyaXR5IEhBU0ggdHlwZSAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUENSCSAgICAxODA0IC8qIFBDUiBpbnZhbGlkYXRpb24gbXNncyAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUlVMRQkgICAgMTgwNSAvKiBwb2xpY3kgcnVsZSAqLwogCiAjZGVmaW5lIEFVRElUX0tFUk5FTAkJMjAwMAkvKiBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCBkOGJkNDNiLi5iMDViMWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTQyNiw5ICs0MjYsNiBAQAogCXVuc2lnbmVkIGludCBmcm9udF9wYWQ7CiAKIAltZW1wb29sX3QgKmJpb19wb29sOwotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQotCW1lbXBvb2xfdCAqYmlvX2ludGVncml0eV9wb29sOwotI2VuZGlmCiAJbWVtcG9vbF90ICpidmVjX3Bvb2w7CiB9OwogCkBAIC01MTksOSArNTE2LDggQEAKIAogI2RlZmluZSBiaW9faW50ZWdyaXR5KGJpbykgKGJpby0+YmlfaW50ZWdyaXR5ICE9IE5VTEwpCiAKLWV4dGVybiBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldChzdHJ1Y3QgYmlvICosIGdmcF90LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBiaW9fc2V0ICopOwogZXh0ZXJuIHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpb19pbnRlZ3JpdHlfYWxsb2Moc3RydWN0IGJpbyAqLCBnZnBfdCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fc2V0ICopOworZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKik7CiBleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfYWRkX3BhZ2Uoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfZW5hYmxlZChzdHJ1Y3QgYmlvICpiaW8pOwogZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X3NldF90YWcoc3RydWN0IGJpbyAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CkBAIC01MzEsMjcgKzUyNywyMSBAQAogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9hZHZhbmNlKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfdHJpbShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfc3BsaXQoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvX3BhaXIgKiwgaW50KTsKLWV4dGVybiBpbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW8gKiwgZ2ZwX3QsIHN0cnVjdCBiaW9fc2V0ICopOwotZXh0ZXJuIGludCBiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShzdHJ1Y3QgYmlvX3NldCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgYmlvc2V0X2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW9fc2V0ICopOwotZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9pbml0X3NsYWIodm9pZCk7CitleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvICosIGdmcF90KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKICNkZWZpbmUgYmlvX2ludGVncml0eShhKQkJKDApCi0jZGVmaW5lIGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKGEsIGIpCSgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3ByZXAoYSkJCSgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2VuYWJsZWQoYSkJKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfY2xvbmUoYSwgYiwgYyxkICkJKDApCi0jZGVmaW5lIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShhKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfZnJlZShhLCBiKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGJpb19pbnRlZ3JpdHlfY2xvbmUoYSwgYiwgYykJKDApCisjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZnJlZShhKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2VuZGlvKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9hZHZhbmNlKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV90cmltKGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9zcGxpdChhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfc2V0X3RhZyhhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZ2V0X3RhZyhhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKGEpCWRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JzZy5oIGIvaW5jbHVkZS9saW51eC9ic2cuaAppbmRleCBjZjAzMDNhNi4uM2YwYzY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ic2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JzZy5oCkBAIC03LDYgKzcsMTQgQEAKICNkZWZpbmUgQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX1RNRgkxCiAjZGVmaW5lIEJTR19TVUJfUFJPVE9DT0xfU0NTSV9UUkFOU1BPUlQJMgogCisvKgorICogRm9yIGZsYWdzIG1lbWJlciBiZWxvdworICogc2cuaCBzZ19pb19oZHIgYWxzbyBoYXMgYml0cyBkZWZpbmVkIGZvciBpdCdzIGZsYWdzIG1lbWJlci4gSG93ZXZlcgorICogbm9uZSBvZiB0aGVzZSBiaXRzIGFyZSBpbXBsZW1lbnRlZC91c2VkIGJ5IGJzZy4gVGhlIGJpdHMgYmVsb3cgYXJlCisgKiBhbGxvY2F0ZWQgdG8gbm90IGNvbmZsaWN0IHdpdGggc2cuaCBvbmVzIGFueXdheS4KKyAqLworI2RlZmluZSBCU0dfRkxBR19RX0FUX1RBSUwgMHgxMCAvKiBkZWZhdWx0LCA9PSAwIGF0IHRoaXMgYml0LCBpcyBRX0FUX0hFQUQgKi8KKwogc3RydWN0IHNnX2lvX3Y0IHsKIAlfX3MzMiBndWFyZDsJCS8qIFtpXSAnUScgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIHYzICovCiAJX191MzIgcHJvdG9jb2w7CQkvKiBbaV0gMCAtPiBTQ1NJICwgLi4uLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IGY4OGQzMmYuLjU3MzgxOWVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0yMiw4ICsyMiwxMDkgQEAKIHN0cnVjdCBjbG9ja3NvdXJjZTsKIAogLyoqCisgKiBzdHJ1Y3QgY3ljbGVjb3VudGVyIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKKyAqCVByb3ZpZGVzIGNvbXBsZXRlbHkgc3RhdGUtZnJlZSBhY2Nlc3NvcnMgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCisgKglEZXBlbmRpbmcgb24gd2hpY2ggaGFyZHdhcmUgaXQgcmVhZHMsIHRoZSBjeWNsZSBjb3VudGVyIG1heSB3cmFwCisgKglhcm91bmQgcXVpY2tseS4gTG9ja2luZyBydWxlcyAoaWYgbmVjZXNzYXJ5KSBoYXZlIHRvIGJlIGRlZmluZWQKKyAqCWJ5IHRoZSBpbXBsZW1lbnRvciBhbmQgdXNlciBvZiBzcGVjaWZpYyBpbnN0YW5jZXMgb2YgdGhpcyBBUEkuCisgKgorICogQHJlYWQ6CQlyZXR1cm5zIHRoZSBjdXJyZW50IGN5Y2xlIHZhbHVlCisgKiBAbWFzazoJCWJpdG1hc2sgZm9yIHR3bydzIGNvbXBsZW1lbnQKKyAqCQkJc3VidHJhY3Rpb24gb2Ygbm9uIDY0IGJpdCBjb3VudGVycywKKyAqCQkJc2VlIENMT0NLU09VUkNFX01BU0soKSBoZWxwZXIgbWFjcm8KKyAqIEBtdWx0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyCisgKiBAc2hpZnQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIGRpdmlzb3IgKHBvd2VyIG9mIHR3bykKKyAqLworc3RydWN0IGN5Y2xlY291bnRlciB7CisJY3ljbGVfdCAoKnJlYWQpKGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKTsKKwljeWNsZV90IG1hc2s7CisJdTMyIG11bHQ7CisJdTMyIHNoaWZ0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgdGltZWNvdW50ZXIgLSBsYXllciBhYm92ZSBhICVzdHJ1Y3QgY3ljbGVjb3VudGVyIHdoaWNoIGNvdW50cyBuYW5vc2Vjb25kcworICoJQ29udGFpbnMgdGhlIHN0YXRlIG5lZWRlZCBieSB0aW1lY291bnRlcl9yZWFkKCkgdG8gZGV0ZWN0CisgKgljeWNsZSBjb3VudGVyIHdyYXAgYXJvdW5kLiBJbml0aWFsaXplIHdpdGgKKyAqCXRpbWVjb3VudGVyX2luaXQoKS4gQWxzbyB1c2VkIHRvIGNvbnZlcnQgY3ljbGUgY291bnRzIGludG8gdGhlCisgKgljb3JyZXNwb25kaW5nIG5hbm9zZWNvbmQgY291bnRzIHdpdGggdGltZWNvdW50ZXJfY3ljMnRpbWUoKS4gVXNlcnMKKyAqCW9mIHRoaXMgY29kZSBhcmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgdW5kZXJseWluZworICoJY3ljbGUgY291bnRlciBoYXJkd2FyZSwgbG9ja2luZyBpc3N1ZXMgYW5kIHJlYWRpbmcgdGhlIHRpbWUKKyAqCW1vcmUgb2Z0ZW4gdGhhbiB0aGUgY3ljbGUgY291bnRlciB3cmFwcyBhcm91bmQuIFRoZSBuYW5vc2Vjb25kCisgKgljb3VudGVyIHdpbGwgb25seSB3cmFwIGFyb3VuZCBhZnRlciB+NTg1IHllYXJzLgorICoKKyAqIEBjYzoJCQl0aGUgY3ljbGUgY291bnRlciB1c2VkIGJ5IHRoaXMgaW5zdGFuY2UKKyAqIEBjeWNsZV9sYXN0OgkJbW9zdCByZWNlbnQgY3ljbGUgY291bnRlciB2YWx1ZSBzZWVuIGJ5CisgKgkJCXRpbWVjb3VudGVyX3JlYWQoKQorICogQG5zZWM6CQljb250aW51b3VzbHkgaW5jcmVhc2luZyBjb3VudAorICovCitzdHJ1Y3QgdGltZWNvdW50ZXIgeworCWNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjOworCWN5Y2xlX3QgY3ljbGVfbGFzdDsKKwl1NjQgbnNlYzsKK307CisKKy8qKgorICogY3ljbGVjb3VudGVyX2N5YzJucyAtIGNvbnZlcnRzIGN5Y2xlIGNvdW50ZXIgY3ljbGVzIHRvIG5hbm9zZWNvbmRzCisgKiBAdGM6CQlQb2ludGVyIHRvIGN5Y2xlIGNvdW50ZXIuCisgKiBAY3ljbGVzOglDeWNsZXMKKyAqCisgKiBYWFggLSBUaGlzIGNvdWxkIHVzZSBzb21lIG11bHRfbHhsX2xsKCkgYXNtIG9wdGltaXphdGlvbi4gU2FtZSBjb2RlCisgKiBhcyBpbiBjeWMybnMsIGJ1dCB3aXRoIHVuc2lnbmVkIHJlc3VsdC4KKyAqLworc3RhdGljIGlubGluZSB1NjQgY3ljbGVjb3VudGVyX2N5YzJucyhjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYywKKwkJCQkgICAgICBjeWNsZV90IGN5Y2xlcykKK3sKKwl1NjQgcmV0ID0gKHU2NCljeWNsZXM7CisJcmV0ID0gKHJldCAqIGNjLT5tdWx0KSA+PiBjYy0+c2hpZnQ7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB0aW1lY291bnRlcl9pbml0IC0gaW5pdGlhbGl6ZSBhIHRpbWUgY291bnRlcgorICogQHRjOgkJCVBvaW50ZXIgdG8gdGltZSBjb3VudGVyIHdoaWNoIGlzIHRvIGJlIGluaXRpYWxpemVkL3Jlc2V0CisgKiBAY2M6CQkJQSBjeWNsZSBjb3VudGVyLCByZWFkeSB0byBiZSB1c2VkLgorICogQHN0YXJ0X3RzdGFtcDoJQXJiaXRyYXJ5IGluaXRpYWwgdGltZSBzdGFtcC4KKyAqCisgKiBBZnRlciB0aGlzIGNhbGwgdGhlIGN1cnJlbnQgY3ljbGUgcmVnaXN0ZXIgKHJvdWdobHkpIGNvcnJlc3BvbmRzIHRvCisgKiB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wLiBFdmVyeSBjYWxsIHRvIHRpbWVjb3VudGVyX3JlYWQoKSBpbmNyZW1lbnRzCisgKiB0aGUgdGltZSBzdGFtcCBjb3VudGVyIGJ5IHRoZSBudW1iZXIgb2YgZWxhcHNlZCBuYW5vc2Vjb25kcy4KKyAqLworZXh0ZXJuIHZvaWQgdGltZWNvdW50ZXJfaW5pdChzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYywKKwkJCSAgICAgdTY0IHN0YXJ0X3RzdGFtcCk7CisKKy8qKgorICogdGltZWNvdW50ZXJfcmVhZCAtIHJldHVybiBuYW5vc2Vjb25kcyBlbGFwc2VkIHNpbmNlIHRpbWVjb3VudGVyX2luaXQoKQorICogICAgICAgICAgICAgICAgICAgIHBsdXMgdGhlIGluaXRpYWwgdGltZSBzdGFtcAorICogQHRjOiAgICAgICAgICBQb2ludGVyIHRvIHRpbWUgY291bnRlci4KKyAqCisgKiBJbiBvdGhlciB3b3Jkcywga2VlcHMgdHJhY2sgb2YgdGltZSBzaW5jZSB0aGUgc2FtZSBlcG9jaCBhcworICogdGhlIGZ1bmN0aW9uIHdoaWNoIGdlbmVyYXRlZCB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wLgorICovCitleHRlcm4gdTY0IHRpbWVjb3VudGVyX3JlYWQoc3RydWN0IHRpbWVjb3VudGVyICp0Yyk7CisKKy8qKgorICogdGltZWNvdW50ZXJfY3ljMnRpbWUgLSBjb252ZXJ0IGEgY3ljbGUgY291bnRlciB0byBzYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgYmFzZSBhcyB2YWx1ZXMgcmV0dXJuZWQgYnkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGltZWNvdW50ZXJfcmVhZCgpCisgKiBAdGM6CQlQb2ludGVyIHRvIHRpbWUgY291bnRlci4KKyAqIEBjeWNsZToJYSB2YWx1ZSByZXR1cm5lZCBieSB0Yy0+Y2MtPnJlYWQoKQorICoKKyAqIEN5Y2xlIGNvdW50cyB0aGF0IGFyZSBjb252ZXJ0ZWQgY29ycmVjdGx5IGFzIGxvbmcgYXMgdGhleQorICogZmFsbCBpbnRvIHRoZSBpbnRlcnZhbCBbLTEvMiBtYXggY3ljbGUgY291bnQsICsxLzIgbWF4IGN5Y2xlIGNvdW50XSwKKyAqIHdpdGggIm1heCBjeWNsZSBjb3VudCIgPT0gY3MtPm1hc2srMS4KKyAqCisgKiBUaGlzIGFsbG93cyBjb252ZXJzaW9uIG9mIGN5Y2xlIGNvdW50ZXIgdmFsdWVzIHdoaWNoIHdlcmUgZ2VuZXJhdGVkCisgKiBpbiB0aGUgcGFzdC4KKyAqLworZXh0ZXJuIHU2NCB0aW1lY291bnRlcl9jeWMydGltZShzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjLAorCQkJCWN5Y2xlX3QgY3ljbGVfdHN0YW1wKTsKKworLyoqCiAgKiBzdHJ1Y3QgY2xvY2tzb3VyY2UgLSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBmb3IgYSBmcmVlIHJ1bm5pbmcgY291bnRlcgogICoJUHJvdmlkZXMgbW9zdGx5IHN0YXRlLWZyZWUgYWNjZXNzb3JzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgorICoJVGhpcyBpcyB0aGUgc3RydWN0dXJlIHVzZWQgZm9yIHN5c3RlbSB0aW1lLgogICoKICAqIEBuYW1lOgkJcHRyIHRvIGNsb2Nrc291cmNlIG5hbWUKICAqIEBsaXN0OgkJbGlzdCBoZWFkIGZvciByZWdpc3RyYXRpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmggYi9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCmluZGV4IDYwNWViZTIuLjcyYmZlZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYJX0NNNDAwMF9IXwogI2RlZmluZQlfQ000MDAwX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lCU1BWF9BVFIJCQkzMwogCiAjZGVmaW5lCUNNNDAwMF9NQVhfREVWCQk0CkBAIC0xMCw5ICsxMiw5IEBACiAgKiBub3QgdG8gYnJlYWsgY29tcGlsYXRpb24gb2YgdXNlcnNwYWNlIGFwcHMuIC1IVyAqLwogCiB0eXBlZGVmIHN0cnVjdCBhdHJlcSB7Ci0JaW50MzJfdCBhdHJfbGVuOworCV9fczMyIGF0cl9sZW47CiAJdW5zaWduZWQgY2hhciBhdHJbNjRdOwotCWludDMyX3QgcG93ZXJfYWN0OworCV9fczMyIHBvd2VyX2FjdDsKIAl1bnNpZ25lZCBjaGFyIGJJRlNEOwogCXVuc2lnbmVkIGNoYXIgYklGU0M7CiB9IGF0cmVxX3Q7CkBAIC0yMiwxMyArMjQsMTMgQEAKICAqIG1lbWJlciBzaXplcy4gVGhpcyBsZWFkcyB0byBDT05GSUdfQ09NUEFUIGJyZWFrYWdlLCBzaW5jZSAzMmJpdCB1c2Vyc3BhY2UKICAqIHdpbGwgbGF5IG91dCB0aGUgc3RydWN0dXJlIG1lbWJlcnMgZGlmZmVyZW50bHkgdGhhbiB0aGUgNjRiaXQga2VybmVsLgogICoKLSAqIEkndmUgY2hhbmdlZCAicHRzcmVxLnByb3RvY29sIiBmcm9tICJ1bnNpZ25lZCBsb25nIiB0byAidV9pbnQzMl90Ii4KKyAqIEkndmUgY2hhbmdlZCAicHRzcmVxLnByb3RvY29sIiBmcm9tICJ1bnNpZ25lZCBsb25nIiB0byAiX191MzIiLgogICogT24gMzJiaXQgdGhpcyB3aWxsIG1ha2Ugbm8gZGlmZmVyZW5jZS4gIFdpdGggNjRiaXQga2VybmVscywgaXQgd2lsbCBtYWtlCiAgKiAzMmJpdCBhcHBzIHdvcmssIHRvby4KICAqLwogCiB0eXBlZGVmIHN0cnVjdCBwdHNyZXEgewotCXVfaW50MzJfdCBwcm90b2NvbDsgLypUPTA6IDJeMCwgVD0xOiAgMl4xKi8KKwlfX3UzMiBwcm90b2NvbDsgLypUPTA6IDJeMCwgVD0xOiAgMl4xKi8KICAJdW5zaWduZWQgY2hhciBmbGFnczsKICAJdW5zaWduZWQgY2hhciBwdHMxOwogIAl1bnNpZ25lZCBjaGFyIHB0czI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaCBiL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCmluZGV4IDFjODZkNjUuLmI4MTI1YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCkBAIC02NSwyMCArNjUsMjAgQEAKIAkJfSBhY2s7CiAKIAkJc3RydWN0IGZvcmtfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwYXJlbnRfcGlkOwotCQkJcGlkX3QgcGFyZW50X3RnaWQ7Ci0JCQlwaWRfdCBjaGlsZF9waWQ7Ci0JCQlwaWRfdCBjaGlsZF90Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcGFyZW50X3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHBhcmVudF90Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgY2hpbGRfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgY2hpbGRfdGdpZDsKIAkJfSBmb3JrOwogCiAJCXN0cnVjdCBleGVjX3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcHJvY2Vzc19waWQ7Ci0JCQlwaWRfdCBwcm9jZXNzX3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfdGdpZDsKIAkJfSBleGVjOwogCiAJCXN0cnVjdCBpZF9wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCQl1bmlvbiB7CiAJCQkJX191MzIgcnVpZDsgLyogdGFzayB1aWQgKi8KIAkJCQlfX3UzMiByZ2lkOyAvKiB0YXNrIGdpZCAqLwpAQCAtOTAsOCArOTAsOCBAQAogCQl9IGlkOwogCiAJCXN0cnVjdCBleGl0X3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcHJvY2Vzc19waWQ7Ci0JCQlwaWRfdCBwcm9jZXNzX3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfdGdpZDsKIAkJCV9fdTMyIGV4aXRfY29kZSwgZXhpdF9zaWduYWw7CiAJCX0gZXhpdDsKIAl9IGV2ZW50X2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaCBiL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCmluZGV4IDA3YWU4ZjguLjViNWQ0NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCkBAIC02LDYgKzYsNyBAQAogI2RlZmluZSBDT0RBX1BTREVWX01BSk9SIDY3CiAjZGVmaW5lIE1BWF9DT0RBREVWUyAgNQkgICAvKiBob3cgbWFueSBkbyB3ZSBhbGxvdyAqLwogCisjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IGtzdGF0ZnM7CiAKIC8qIGNvbW11bmljYXRpb24gcGVuZGluZy9wcm9jZXNzaW5nIHF1ZXVlcyAqLwpAQCAtMjQsNyArMjUsNiBAQAogCXJldHVybiAoc3RydWN0IHZlbnVzX2NvbW0gKikoKHNiKS0+c19mc19pbmZvKTsKIH0KIAotCiAvKiB1cGNhbGxzICovCiBpbnQgdmVudXNfcm9vdGZpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkcCk7CiBpbnQgdmVudXNfZ2V0YXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkLApAQCAtNjQsNiArNjQsMTIgQEAKIGludCB2ZW51c19mc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkKTsKIGludCB2ZW51c19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqc2ZzKTsKIAorLyoKKyAqIFN0YXRpc3RpY3MKKyAqLworCitleHRlcm4gc3RydWN0IHZlbnVzX2NvbW0gY29kYV9jb21tc1tdOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogbWVzc2FnZXMgYmV0d2VlbiBjb2RhIGZpbGVzeXN0ZW0gaW4ga2VybmVsIGFuZCBWZW51cyAqLwogc3RydWN0IHVwY19yZXEgewpAQCAtODIsMTEgKzg4LDQgQEAKICNkZWZpbmUgUkVRX1dSSVRFICAweDQKICNkZWZpbmUgUkVRX0FCT1JUICAweDgKIAotCi0vKgotICogU3RhdGlzdGljcwotICovCi0KLWV4dGVybiBzdHJ1Y3QgdmVudXNfY29tbSBjb2RhX2NvbW1zW107Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oIGIvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oCmluZGV4IGFjNmQ5YTQuLjVkY2ZiOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogaW50IGNvbTIwMDIwX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGNvbTIwMDIwX2ZvdW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzaGFyZWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjb20yMDAyMF9uZXRkZXZfb3BzOwogCiAvKiBUaGUgbnVtYmVyIG9mIGxvdyBJL08gcG9ydHMgdXNlZCBieSB0aGUgY2FyZC4gKi8KICNkZWZpbmUgQVJDTkVUX1RPVEFMX1NJWkUgOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaAppbmRleCAwOTk5MjcxLi40NTBmYTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaApAQCAtMyw4ICszLDEwIEBACiAjZW5kaWYKIAogLyogR0NDIDQuMS5bMDFdIG1pc2NvbXBpbGVzIF9fd2VhayAqLwotI2lmIF9fR05VQ19NSU5PUl9fID09IDEgJiYgX19HTlVDX1BBVENITEVWRUxfXyA8PSAxCi0jIGVycm9yIFlvdXIgdmVyc2lvbiBvZiBnY2MgbWlzY29tcGlsZXMgdGhlIF9fd2VhayBkaXJlY3RpdmUKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmIF9fR05VQ19NSU5PUl9fID09IDEgJiYgX19HTlVDX1BBVENITEVWRUxfXyA8PSAxCisjICBlcnJvciBZb3VyIHZlcnNpb24gb2YgZ2NjIG1pc2NvbXBpbGVzIHRoZSBfX3dlYWsgZGlyZWN0aXZlCisjIGVuZGlmCiAjZW5kaWYKIAogI2RlZmluZSBfX3VzZWQJCQlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAppbmRleCAzNGYyNzg5Li5mYzY1ZDIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKQEAgLTEwOSw2ICsxMDksMTIgQEAKIAl1bnNpZ25lZCBjaGFyIG5hbWVbQ05fQ0JRX05BTUVMRU5dOwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNuX3F1ZXVlOworCS8qIFNlbnQgdG8ga2V2ZW50IHRvIGNyZWF0ZSBjbl9xdWV1ZSBvbmx5IHdoZW4gbmVlZGVkICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdxX2NyZWF0aW9uOworCS8qIFRlbGwgaWYgdGhlIHdxX2NyZWF0aW9uIGpvYiBpcyBwZW5kaW5nL2NvbXBsZXRlZCAqLworCWF0b21pY190IHdxX3JlcXVlc3RlZDsKKwkvKiBXYWl0IGZvciBjbl9xdWV1ZSB0byBiZSBjcmVhdGVkICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FfY3JlYXRlZDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVfbGlzdDsKIAlzcGlubG9ja190IHF1ZXVlX2xvY2s7CkBAIC0xNjQsNiArMTcwLDggQEAKIGludCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2JfaWQgKmlkLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKikpOwogdm9pZCBjbl9xdWV1ZV9kZWxfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY2JfaWQgKmlkKTsKIAoraW50IHF1ZXVlX2NuX3dvcmsoc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmNuX3F1ZXVlX2FsbG9jX2RldihjaGFyICpuYW1lLCBzdHJ1Y3Qgc29jayAqKTsKIHZvaWQgY25fcXVldWVfZnJlZV9kZXYoc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAppbmRleCBhNjdhOTBjLi5kY2NhNTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaApAQCAtMTM3LDggKzEzNyw4IEBACiBpbnQgbWRhX2NvbnNvbGVfaW5pdCh2b2lkKTsKIHZvaWQgcHJvbV9jb25faW5pdCh2b2lkKTsKIAotdm9pZCB2Y3NfbWFrZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3ZvaWQgdmNzX21ha2Vfc3lzZnMoaW50IGluZGV4KTsKK3ZvaWQgdmNzX3JlbW92ZV9zeXNmcyhpbnQgaW5kZXgpOwogCiAvKiBTb21lIGRlYnVnIHN0dWIgdG8gY2F0Y2ggc29tZSBvZiB0aGUgb2J2aW91cyByYWNlcyBpbiB0aGUgVlQgY29kZSAqLwogI2lmIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCmluZGV4IDFmMmU5MDIuLmVjMjlmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfU0hBU0gJCTB4MDAwMDAwMDkKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0FIQVNICQkweDAwMDAwMDBhCiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9STkcJCTB4MDAwMDAwMGMKKyNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUwkweDAwMDAwMDBmCiAKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSwkweDAwMDAwMDBlCiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9BSEFTSF9NQVNLCTB4MDAwMDAwMGMKQEAgLTU0OCw5ICs1NDksNiBAQAogICogVHJhbnNmb3JtIHVzZXIgaW50ZXJmYWNlLgogICovCiAgCi1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwKLQkJCQkgICAgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIHN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfYmFzZShjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIHZvaWQgY3J5cHRvX2Rlc3Ryb3lfdGZtKHZvaWQgKm1lbSwgc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaCBiL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAppbmRleCBkMDZmYmYyLi43ODg4NTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCkBAIC04Miw5ICs4Miw5IEBACiAgKiBvcGVuKQogICovCiBzdHJ1Y3QgY3ljbGFkZXNfaWRsZV9zdGF0cyB7Ci0gICAgdGltZV90CSAgIGluX3VzZTsJLyogVGltZSBkZXZpY2UgaGFzIGJlZW4gaW4gdXNlIChzZWNzKSAqLwotICAgIHRpbWVfdAkgICByZWN2X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHJlY2VpdmVkIChzZWNzKSAqLwotICAgIHRpbWVfdAkgICB4bWl0X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHRyYW5zbWl0dGVkIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCBpbl91c2U7CS8qIFRpbWUgZGV2aWNlIGhhcyBiZWVuIGluIHVzZSAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgcmVjdl9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciByZWNlaXZlZCAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgeG1pdF9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciB0cmFuc21pdHRlZCAoc2VjcykgKi8KICAgICB1bnNpZ25lZCBsb25nICByZWN2X2J5dGVzOwkvKiBCeXRlcyByZWNlaXZlZCAqLwogICAgIHVuc2lnbmVkIGxvbmcgIHhtaXRfYnl0ZXM7CS8qIEJ5dGVzIHRyYW5zbWl0dGVkICovCiAgICAgdW5zaWduZWQgbG9uZyAgb3ZlcnJ1bnM7CS8qIElucHV0IG92ZXJydW5zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjY3AuaCBiL2luY2x1ZGUvbGludXgvZGNjcC5oCmluZGV4IDYxNzM0ZTIuLjc0MzRhODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNjcC5oCkBAIC0zNTUsNDYgKzM1NSw2IEBACiAJcmV0dXJuIF9fZGNjcF9oZHJfbGVuKGRjY3BfaGRyKHNrYikpOwogfQogCi0KLS8qIGluaXRpYWwgdmFsdWVzIGZvciBlYWNoIGZlYXR1cmUgKi8KLSNkZWZpbmUgRENDUEZfSU5JVElBTF9TRVFVRU5DRV9XSU5ET1cJCTEwMAotI2RlZmluZSBEQ0NQRl9JTklUSUFMX0FDS19SQVRJTwkJCTIKLSNkZWZpbmUgRENDUEZfSU5JVElBTF9DQ0lECQkJRENDUENfQ0NJRDIKLS8qIEZJWE1FOiBmb3Igbm93IHdlJ3JlIGRlZmF1bHQgdG8gMSBidXQgaXQgc2hvdWxkIHJlYWxseSBiZSAwICovCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfU0VORF9ORFBfQ09VTlQJCTEKLQotLyoqCi0gICogc3RydWN0IGRjY3BfbWluaXNvY2sgLSBNaW5pbWFsIERDQ1AgY29ubmVjdGlvbiByZXByZXNlbnRhdGlvbgotICAqCi0gICogV2lsbCBiZSB1c2VkIHRvIHBhc3MgdGhlIHN0YXRlIGZyb20gZGNjcF9yZXF1ZXN0X3NvY2sgdG8gZGNjcF9zb2NrLgotICAqCi0gICogQGRjY3Btc19zZXF1ZW5jZV93aW5kb3cgLSBTZXF1ZW5jZSBXaW5kb3cgRmVhdHVyZSAoc2VjdGlvbiA3LjUuMikKLSAgKiBAZGNjcG1zX3BlbmRpbmcgLSBMaXN0IG9mIGZlYXR1cmVzIGJlaW5nIG5lZ290aWF0ZWQKLSAgKiBAZGNjcG1zX2NvbmYgLQotICAqLwotc3RydWN0IGRjY3BfbWluaXNvY2sgewotCV9fdTY0CQkJZGNjcG1zX3NlcXVlbmNlX3dpbmRvdzsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWRjY3Btc19wZW5kaW5nOwotCXN0cnVjdCBsaXN0X2hlYWQJZGNjcG1zX2NvbmY7Ci19OwotCi1zdHJ1Y3QgZGNjcF9vcHRfY29uZiB7Ci0JX191OAkJCSpkY2Nwb2NfdmFsOwotCV9fdTgJCQlkY2Nwb2NfbGVuOwotfTsKLQotc3RydWN0IGRjY3Bfb3B0X3BlbmQgewotCXN0cnVjdCBsaXN0X2hlYWQJZGNjcG9wX25vZGU7Ci0JX191OAkJCWRjY3BvcF90eXBlOwotCV9fdTgJCQlkY2Nwb3BfZmVhdDsKLQlfX3U4CQkgICAgICAgICpkY2Nwb3BfdmFsOwotCV9fdTgJCQlkY2Nwb3BfbGVuOwotCWludAkJCWRjY3BvcF9jb25mOwotCXN0cnVjdCBkY2NwX29wdF9jb25mICAgICpkY2Nwb3Bfc2M7Ci19OwotCi1leHRlcm4gdm9pZCBkY2NwX21pbmlzb2NrX2luaXQoc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2spOwotCiAvKioKICAqIHN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAgLSAgcmVwcmVzZW50IERDQ1Atc3BlY2lmaWMgY29ubmVjdGlvbiByZXF1ZXN0CiAgKiBAZHJlcV9pbmV0X3Jzazogc3RydWN0dXJlIGluaGVyaXRlZCBmcm9tCkBAIC00ODMsMTMgKzQ0MywxNCBAQAogICogQGRjY3BzX3RpbWVzdGFtcF90aW1lIC0gdGltZSBvZiByZWNlaXZpbmcgbGF0ZXN0IEBkY2Nwc190aW1lc3RhbXBfZWNobwogICogQGRjY3BzX2xfYWNrX3JhdGlvIC0gZmVhdHVyZS1sb2NhbCBBY2sgUmF0aW8KICAqIEBkY2Nwc19yX2Fja19yYXRpbyAtIGZlYXR1cmUtcmVtb3RlIEFjayBSYXRpbworICogQGRjY3BzX2xfc2VxX3dpbiAtIGxvY2FsIFNlcXVlbmNlIFdpbmRvdyAoaW5mbHVlbmNlcyBhY2sgbnVtYmVyIHZhbGlkaXR5KQorICogQGRjY3BzX3Jfc2VxX3dpbiAtIHJlbW90ZSBTZXF1ZW5jZSBXaW5kb3cgKGluZmx1ZW5jZXMgc2VxIG51bWJlciB2YWxpZGl0eSkKICAqIEBkY2Nwc19wY3NsZW4gLSBzZW5kZXIgICBwYXJ0aWFsIGNoZWNrc3VtIGNvdmVyYWdlICh2aWEgc29ja29wdCkKICAqIEBkY2Nwc19wY3JsZW4gLSByZWNlaXZlciBwYXJ0aWFsIGNoZWNrc3VtIGNvdmVyYWdlICh2aWEgc29ja29wdCkKICAqIEBkY2Nwc19zZW5kX25kcF9jb3VudCAtIGxvY2FsIFNlbmQgTkRQIENvdW50IGZlYXR1cmUgKDcuNy4yKQogICogQGRjY3BzX25kcF9jb3VudCAtIG51bWJlciBvZiBOb24gRGF0YSBQYWNrZXRzIHNpbmNlIGxhc3QgZGF0YSBwYWNrZXQKICAqIEBkY2Nwc19tc3NfY2FjaGUgLSBjdXJyZW50IHZhbHVlIG9mIE1TUyAocGF0aCBNVFUgbWludXMgaGVhZGVyIHNpemVzKQogICogQGRjY3BzX3JhdGVfbGFzdCAtIHRpbWVzdGFtcCBmb3IgcmF0ZS1saW1pdGluZyBEQ0NQLVN5bmMgKFJGQyA0MzQwLCA3LjUuNCkKLSAqIEBkY2Nwc19taW5pc29jayAtIGFzc29jaWF0ZWQgbWluaXNvY2sgKGFjY2Vzc2VkIHZpYSBkY2NwX21zaykKICAqIEBkY2Nwc19mZWF0bmVnIC0gdHJhY2tzIGZlYXR1cmUtbmVnb3RpYXRpb24gc3RhdGUgKG1vc3RseSBkdXJpbmcgaGFuZHNoYWtlKQogICogQGRjY3BzX2hjX3J4X2Fja3ZlYyAtIHJ4IGhhbGYgY29ubmVjdGlvbiBhY2sgdmVjdG9yCiAgKiBAZGNjcHNfaGNfcnhfY2NpZCAtIENDSUQgdXNlZCBmb3IgdGhlIHJlY2VpdmVyIChvciByZWNlaXZpbmcgaGFsZi1jb25uZWN0aW9uKQpAQCAtNTIzLDEyICs0ODQsMTMgQEAKIAlfX3UzMgkJCQlkY2Nwc190aW1lc3RhbXBfdGltZTsKIAlfX3UxNgkJCQlkY2Nwc19sX2Fja19yYXRpbzsKIAlfX3UxNgkJCQlkY2Nwc19yX2Fja19yYXRpbzsKKwlfX3U2NAkJCQlkY2Nwc19sX3NlcV93aW46NDg7CisJX191NjQJCQkJZGNjcHNfcl9zZXFfd2luOjQ4OwogCV9fdTgJCQkJZGNjcHNfcGNzbGVuOjQ7CiAJX191OAkJCQlkY2Nwc19wY3JsZW46NDsKIAlfX3U4CQkJCWRjY3BzX3NlbmRfbmRwX2NvdW50OjE7CiAJX191NjQJCQkJZGNjcHNfbmRwX2NvdW50OjQ4OwogCXVuc2lnbmVkIGxvbmcJCQlkY2Nwc19yYXRlX2xhc3Q7Ci0Jc3RydWN0IGRjY3BfbWluaXNvY2sJCWRjY3BzX21pbmlzb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJCWRjY3BzX2ZlYXRuZWc7CiAJc3RydWN0IGRjY3BfYWNrdmVjCQkqZGNjcHNfaGNfcnhfYWNrdmVjOwogCXN0cnVjdCBjY2lkCQkJKmRjY3BzX2hjX3J4X2NjaWQ7CkBAIC01NDYsMTEgKzUwOCw2IEBACiAJcmV0dXJuIChzdHJ1Y3QgZGNjcF9zb2NrICopc2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfbWluaXNvY2sgKmRjY3BfbXNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQlyZXR1cm4gKHN0cnVjdCBkY2NwX21pbmlzb2NrICopJmRjY3Bfc2soc2spLT5kY2Nwc19taW5pc29jazsKLX0KLQogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkY2NwX3JvbGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCXN3aXRjaCAoZGNjcF9zayhzayktPmRjY3BzX3JvbGUpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDQ3ZjM0M2MuLjI5MThjMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBCVVNfSURfU0laRQkJMjAKIAogc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2VfcHJpdmF0ZTsKIHN0cnVjdCBkZXZpY2VfZHJpdmVyOwogc3RydWN0IGRyaXZlcl9wcml2YXRlOwogc3RydWN0IGNsYXNzOwpAQCAtMTQ3LDcgKzE0OCw3IEBACiBleHRlcm4gc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7CiBleHRlcm4gaW50IGRyaXZlcl9wcm9iZV9kb25lKHZvaWQpOwotZXh0ZXJuIGludCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCk7CiAKIAogLyogc3lzZnMgaW50ZXJmYWNlIGZvciBleHBvcnRpbmcgZHJpdmVyIGF0dHJpYnV0ZXMgKi8KQEAgLTM2NywxNSArMzY4LDExIEBACiB9OwogCiBzdHJ1Y3QgZGV2aWNlIHsKLQlzdHJ1Y3Qga2xpc3QJCWtsaXN0X2NoaWxkcmVuOwotCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX3BhcmVudDsJLyogbm9kZSBpbiBzaWJsaW5nIGxpc3QgKi8KLQlzdHJ1Y3Qga2xpc3Rfbm9kZQlrbm9kZV9kcml2ZXI7Ci0Jc3RydWN0IGtsaXN0X25vZGUJa25vZGVfYnVzOwogCXN0cnVjdCBkZXZpY2UJCSpwYXJlbnQ7CiAKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUJKnA7CisKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwotCWNoYXIJYnVzX2lkW0JVU19JRF9TSVpFXTsJLyogcG9zaXRpb24gb24gcGFyZW50IGJ1cyAqLwotCXVuc2lnbmVkCQl1ZXZlbnRfc3VwcHJlc3M6MTsKIAljb25zdCBjaGFyCQkqaW5pdF9uYW1lOyAvKiBpbml0aWFsIG5hbWUgb2YgdGhlIGRldmljZSAqLwogCXN0cnVjdCBkZXZpY2VfdHlwZQkqdHlwZTsKIApAQCAtMzg3LDggKzM4NCwxMyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXI7CS8qIHdoaWNoIGRyaXZlciBoYXMgYWxsb2NhdGVkIHRoaXMKIAkJCQkJICAgZGV2aWNlICovCiAJdm9pZAkJKmRyaXZlcl9kYXRhOwkvKiBkYXRhIHByaXZhdGUgdG8gdGhlIGRyaXZlciAqLwotCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOwkvKiBQbGF0Zm9ybSBzcGVjaWZpYyBkYXRhLCBkZXZpY2UKLQkJCQkJICAgY29yZSBkb2Vzbid0IHRvdWNoIGl0ICovCisKKwl2b2lkCQkqcGxhdGZvcm1fZGF0YTsJLyogV2Ugd2lsbCByZW1vdmUgcGxhdGZvcm1fZGF0YQorCQkJCQkgICBmaWVsZCBpZiBhbGwgcGxhdGZvcm0gZGV2aWNlcworCQkJCQkgICBwYXNzIGl0cyBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhCisJCQkJCSAgIGZyb20gcGxhdGZvcm1fZGV2aWNlLT5wbGF0Zm9ybV9kYXRhLAorCQkJCQkgICBvdGhlciBraW5kIG9mIGRldmljZXMgc2hvdWxkIG5vdAorCQkJCQkgICB1c2UgcGxhdGZvcm1fZGF0YS4gKi8KIAlzdHJ1Y3QgZGV2X3BtX2luZm8JcG93ZXI7CiAKICNpZmRlZiBDT05GSUdfTlVNQQpAQCAtNDI3LDggKzQyOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZGV2X25hbWUoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQogewotCS8qIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSBpbiB0aGUgbmVhciBmdXR1cmUgKi8KLQlyZXR1cm4gZGV2LT5idXNfaWQ7CisJcmV0dXJuIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKTsKIH0KIAogZXh0ZXJuIGludCBkZXZfc2V0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLCAuLi4pCkBAIC00NjMsNiArNDY0LDE2IEBACiAJZGV2LT5kcml2ZXJfZGF0YSA9IGRhdGE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRldl9nZXRfdWV2ZW50X3N1cHByZXNzKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5rb2JqLnVldmVudF9zdXBwcmVzczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldl9zZXRfdWV2ZW50X3N1cHByZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHZhbCkKK3sKKwlkZXYtPmtvYmoudWV2ZW50X3N1cHByZXNzID0gdmFsOworfQorCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfaXNfcmVnaXN0ZXJlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIGRldi0+a29iai5zdGF0ZV9pbl9zeXNmczsKQEAgLTQ4Myw3ICs0OTQsOCBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmRldmljZV9maW5kX2NoaWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKSk7CiBleHRlcm4gaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpuZXdfbmFtZSk7Ci1leHRlcm4gaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCk7CitleHRlcm4gaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCwKKwkJICAgICAgIGVudW0gZHBtX29yZGVyIGRwbV9vcmRlcik7CiAKIC8qCiAgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXMKQEAgLTU3MCw3ICs1ODIsNyBAQAogI2lmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKIAlkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCiAjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgZG8geyBcCiAJZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAjI19fVkFfQVJHU19fKTsgXAogCX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmgKaW5kZXggMTkyNzYzMy4uNjQ3YzhlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaApAQCAtOSw2ICs5LDggQEAKICNpZm5kZWYgX0RMTV9ORVRMSU5LX0gKICNkZWZpbmUgX0RMTV9ORVRMSU5LX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCURMTV9TVEFUVVNfV0FJVElORyA9IDEsCiAJRExNX1NUQVRVU19HUkFOVEVEID0gMiwKQEAgLTE4LDE2ICsyMCwxNiBAQAogI2RlZmluZSBETE1fTE9DS19EQVRBX1ZFUlNJT04gMQogCiBzdHJ1Y3QgZGxtX2xvY2tfZGF0YSB7Ci0JdWludDE2X3QgdmVyc2lvbjsKLQl1aW50MzJfdCBsb2Nrc3BhY2VfaWQ7CisJX191MTYgdmVyc2lvbjsKKwlfX3UzMiBsb2Nrc3BhY2VfaWQ7CiAJaW50IG5vZGVpZDsKIAlpbnQgb3ducGlkOwotCXVpbnQzMl90IGlkOwotCXVpbnQzMl90IHJlbWlkOwotCXVpbnQ2NF90IHhpZDsKLQlpbnQ4X3Qgc3RhdHVzOwotCWludDhfdCBncm1vZGU7Ci0JaW50OF90IHJxbW9kZTsKKwlfX3UzMiBpZDsKKwlfX3UzMiByZW1pZDsKKwlfX3U2NCB4aWQ7CisJX19zOCBzdGF0dXM7CisJX19zOCBncm1vZGU7CisJX19zOCBycW1vZGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CiAJaW50IHJlc291cmNlX25hbWVsZW47CiAJY2hhciByZXNvdXJjZV9uYW1lW0RMTV9SRVNOQU1FX01BWExFTl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmggYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKaW5kZXggMjhjMjk0MC4uNDhlNDRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaApAQCAtMTEzLDIwICsxMTMsMjAgQEAKIAkgKiByZXR1cm4gLUVOT1RUWSkgZmlsbCBvdXQgdGhpcyBmaWVsZCwgZXZlbiBpZiB0aGUKIAkgKiBjb21tYW5kIGZhaWxlZC4KIAkgKi8KLQl1aW50MzJfdCB2ZXJzaW9uWzNdOwkvKiBpbi9vdXQgKi8KLQl1aW50MzJfdCBkYXRhX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KKwlfX3UzMiB2ZXJzaW9uWzNdOwkvKiBpbi9vdXQgKi8KKwlfX3UzMiBkYXRhX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KIAkJCQkgKiBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QgKi8KIAotCXVpbnQzMl90IGRhdGFfc3RhcnQ7CS8qIG9mZnNldCB0byBzdGFydCBvZiBkYXRhCisJX191MzIgZGF0YV9zdGFydDsJLyogb2Zmc2V0IHRvIHN0YXJ0IG9mIGRhdGEKIAkJCQkgKiByZWxhdGl2ZSB0byBzdGFydCBvZiB0aGlzIHN0cnVjdCAqLwogCi0JdWludDMyX3QgdGFyZ2V0X2NvdW50OwkvKiBpbi9vdXQgKi8KLQlpbnQzMl90IG9wZW5fY291bnQ7CS8qIG91dCAqLwotCXVpbnQzMl90IGZsYWdzOwkJLyogaW4vb3V0ICovCi0JdWludDMyX3QgZXZlbnRfbnI7ICAgICAgCS8qIGluL291dCAqLwotCXVpbnQzMl90IHBhZGRpbmc7CisJX191MzIgdGFyZ2V0X2NvdW50OwkvKiBpbi9vdXQgKi8KKwlfX3MzMiBvcGVuX2NvdW50OwkvKiBvdXQgKi8KKwlfX3UzMiBmbGFnczsJCS8qIGluL291dCAqLworCV9fdTMyIGV2ZW50X25yOyAgICAgIAkvKiBpbi9vdXQgKi8KKwlfX3UzMiBwYWRkaW5nOwogCi0JdWludDY0X3QgZGV2OwkJLyogaW4vb3V0ICovCisJX191NjQgZGV2OwkJLyogaW4vb3V0ICovCiAKIAljaGFyIG5hbWVbRE1fTkFNRV9MRU5dOwkvKiBkZXZpY2UgbmFtZSAqLwogCWNoYXIgdXVpZFtETV9VVUlEX0xFTl07CS8qIHVuaXF1ZSBpZGVudGlmaWVyIGZvcgpAQCAtMTM5LDkgKzEzOSw5IEBACiAgKiBkbV9pb2N0bC4KICAqLwogc3RydWN0IGRtX3RhcmdldF9zcGVjIHsKLQl1aW50NjRfdCBzZWN0b3Jfc3RhcnQ7Ci0JdWludDY0X3QgbGVuZ3RoOwotCWludDMyX3Qgc3RhdHVzOwkJLyogdXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBrZXJuZWwgb25seSAqLworCV9fdTY0IHNlY3Rvcl9zdGFydDsKKwlfX3U2NCBsZW5ndGg7CisJX19zMzIgc3RhdHVzOwkJLyogdXNlZCB3aGVuIHJlYWRpbmcgZnJvbSBrZXJuZWwgb25seSAqLwogCiAJLyoKIAkgKiBMb2NhdGlvbiBvZiB0aGUgbmV4dCBkbV90YXJnZXRfc3BlYy4KQEAgLTE1Myw3ICsxNTMsNyBAQAogCSAqICAgKHRoYXQgZm9sbG93cyB0aGUgZG1faW9jdGwgc3RydWN0KSB0byB0aGUgc3RhcnQgb2YgdGhlICJuZXh0IgogCSAqICAgZG1fdGFyZ2V0X3NwZWMuCiAJICovCi0JdWludDMyX3QgbmV4dDsKKwlfX3UzMiBuZXh0OwogCiAJY2hhciB0YXJnZXRfdHlwZVtETV9NQVhfVFlQRV9OQU1FXTsKIApAQCAtMTY4LDE3ICsxNjgsMTcgQEAKICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCBkZXBlbmRlbmNpZXMuCiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfZGVwcyB7Ci0JdWludDMyX3QgY291bnQ7CS8qIEFycmF5IHNpemUgKi8KLQl1aW50MzJfdCBwYWRkaW5nOwkvKiB1bnVzZWQgKi8KLQl1aW50NjRfdCBkZXZbMF07CS8qIG91dCAqLworCV9fdTMyIGNvdW50OwkvKiBBcnJheSBzaXplICovCisJX191MzIgcGFkZGluZzsJLyogdW51c2VkICovCisJX191NjQgZGV2WzBdOwkvKiBvdXQgKi8KIH07CiAKIC8qCiAgKiBVc2VkIHRvIGdldCBhIGxpc3Qgb2YgYWxsIGRtIGRldmljZXMuCiAgKi8KIHN0cnVjdCBkbV9uYW1lX2xpc3QgewotCXVpbnQ2NF90IGRldjsKLQl1aW50MzJfdCBuZXh0OwkJLyogb2Zmc2V0IHRvIHRoZSBuZXh0IHJlY29yZCBmcm9tCisJX191NjQgZGV2OworCV9fdTMyIG5leHQ7CQkvKiBvZmZzZXQgdG8gdGhlIG5leHQgcmVjb3JkIGZyb20KIAkJCQkgICB0aGUgX3N0YXJ0XyBvZiB0aGlzICovCiAJY2hhciBuYW1lWzBdOwogfTsKQEAgLTE4Nyw4ICsxODcsOCBAQAogICogVXNlZCB0byByZXRyaWV2ZSB0aGUgdGFyZ2V0IHZlcnNpb25zCiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfdmVyc2lvbnMgewotICAgICAgICB1aW50MzJfdCBuZXh0OwotICAgICAgICB1aW50MzJfdCB2ZXJzaW9uWzNdOworICAgICAgICBfX3UzMiBuZXh0OworICAgICAgICBfX3UzMiB2ZXJzaW9uWzNdOwogCiAgICAgICAgIGNoYXIgbmFtZVswXTsKIH07CkBAIC0xOTcsNyArMTk3LDcgQEAKICAqIFVzZWQgdG8gcGFzcyBtZXNzYWdlIHRvIGEgdGFyZ2V0CiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfbXNnIHsKLQl1aW50NjRfdCBzZWN0b3I7CS8qIERldmljZSBzZWN0b3IgKi8KKwlfX3U2NCBzZWN0b3I7CS8qIERldmljZSBzZWN0b3IgKi8KIAogCWNoYXIgbWVzc2FnZVswXTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaAppbmRleCBiYjBkZjJhLi5mZWM2NmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKQEAgLTc2LDcgKzc2LDcgQEAKIH0gYXVkaW9fa2FyYW9rZV90OyAgICAgLyogaW50byBsZWZ0IGFuZCByaWdodCAgKi8KIAogCi10eXBlZGVmIHVpbnQxNl90IGF1ZGlvX2F0dHJpYnV0ZXNfdDsKK3R5cGVkZWYgX191MTYgYXVkaW9fYXR0cmlidXRlc190OwogLyogICBiaXRzOiBkZXNjci4gKi8KIC8qICAgMTUtMTMgYXVkaW8gY29kaW5nIG1vZGUgKDA9YWMzLCAyPW1wZWcxLCAzPW1wZWcyZXh0LCA0PUxQQ00sIDY9RFRTLCAqLwogLyogICAxMiAgICBtdWx0aWNoYW5uZWwgZXh0ZW5zaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oIGIvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaAppbmRleCBiZDQ5YzNlLi4xZDc1MGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAjZGVmaW5lIFZJREVPX1ZTWU5DX0ZJRUxEX1BST0dSRVNTSVZFCSgzKQogCiBzdHJ1Y3QgdmlkZW9fZXZlbnQgewotCWludDMyX3QgdHlwZTsKKwlfX3MzMiB0eXBlOwogI2RlZmluZSBWSURFT19FVkVOVF9TSVpFX0NIQU5HRUQJMQogI2RlZmluZSBWSURFT19FVkVOVF9GUkFNRV9SQVRFX0NIQU5HRUQJMgogI2RlZmluZSBWSURFT19FVkVOVF9ERUNPREVSX1NUT1BQRUQgCTMKICNkZWZpbmUgVklERU9fRVZFTlRfVlNZTkMgCQk0Ci0JdGltZV90IHRpbWVzdGFtcDsKKwlfX2tlcm5lbF90aW1lX3QgdGltZXN0YW1wOwogCXVuaW9uIHsKIAkJdmlkZW9fc2l6ZV90IHNpemU7CiAJCXVuc2lnbmVkIGludCBmcmFtZV9yYXRlOwkvKiBpbiBmcmFtZXMgcGVyIDEwMDBzZWMgKi8KQEAgLTE1NywyNSArMTU3LDI1IEBACiAKIHN0cnVjdCB2aWRlb19zdGlsbF9waWN0dXJlIHsKIAljaGFyIF9fdXNlciAqaUZyYW1lOyAgICAgICAgLyogcG9pbnRlciB0byBhIHNpbmdsZSBpZnJhbWUgaW4gbWVtb3J5ICovCi0JaW50MzJfdCBzaXplOworCV9fczMyIHNpemU7CiB9OwogCiAKIHR5cGVkZWYKIHN0cnVjdCB2aWRlb19oaWdobGlnaHQgewogCWludCAgICAgYWN0aXZlOyAgICAgIC8qICAgIDE9c2hvdyBoaWdobGlnaHQsIDA9aGlkZSBoaWdobGlnaHQgKi8KLQl1aW50OF90IGNvbnRyYXN0MTsgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbnRyYXN0ICovCisJX191OCAgICBjb250cmFzdDE7ICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb250cmFzdCAqLwogCQkJICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbnRyYXN0ICovCi0JdWludDhfdCBjb250cmFzdDI7ICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb250cmFzdCAqLworCV9fdTggICAgY29udHJhc3QyOyAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29udHJhc3QgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb250cmFzdCAqLwotCXVpbnQ4X3QgY29sb3IxOyAgICAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29sb3IgKi8KKwlfX3U4ICAgIGNvbG9yMTsgICAgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbG9yICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEJhY2tncm91bmQgcGl4ZWwgY29sb3IgKi8KLQl1aW50OF90IGNvbG9yMjsgICAgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbG9yICovCisJX191OCAgICBjb2xvcjI7ICAgICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb2xvciAqLwogCQkJICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbG9yICovCi0JdWludDMyX3QgeXBvczsgICAgICAgLyogICAyMy0yMiAgYXV0byBhY3Rpb24gbW9kZSAqLworCV9fdTMyICAgIHlwb3M7ICAgICAgIC8qICAgMjMtMjIgIGF1dG8gYWN0aW9uIG1vZGUgKi8KIAkJCSAgICAgLyogICAyMS0xMiAgc3RhcnQgeSAqLwogCQkJICAgICAvKiAgICA5LSAwICBlbmQgeSAqLwotCXVpbnQzMl90IHhwb3M7ICAgICAgIC8qICAgMjMtMjIgIGJ1dHRvbiBjb2xvciBudW1iZXIgKi8KKwlfX3UzMiAgICB4cG9zOyAgICAgICAvKiAgIDIzLTIyICBidXR0b24gY29sb3IgbnVtYmVyICovCiAJCQkgICAgIC8qICAgMjEtMTIgIHN0YXJ0IHggKi8KIAkJCSAgICAgLyogICAgOS0gMCAgZW5kIHggKi8KIH0gdmlkZW9faGlnaGxpZ2h0X3Q7CkBAIC0xODksMTcgKzE4OSwxNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB2aWRlb19zcHVfcGFsZXR0ZSB7ICAgICAgLyogU1BVIFBhbGV0dGUgaW5mb3JtYXRpb24gKi8KIAlpbnQgbGVuZ3RoOwotCXVpbnQ4X3QgX191c2VyICpwYWxldHRlOworCV9fdTggX191c2VyICpwYWxldHRlOwogfSB2aWRlb19zcHVfcGFsZXR0ZV90OwogCiAKIHR5cGVkZWYgc3RydWN0IHZpZGVvX25hdmlfcGFjayB7CiAJaW50IGxlbmd0aDsgICAgICAgICAgLyogMCAuLi4gMTAyNCAqLwotCXVpbnQ4X3QgZGF0YVsxMDI0XTsKKwlfX3U4IGRhdGFbMTAyNF07CiB9IHZpZGVvX25hdmlfcGFja190OwogCiAKLXR5cGVkZWYgdWludDE2X3QgdmlkZW9fYXR0cmlidXRlc190OwordHlwZWRlZiBfX3UxNiB2aWRlb19hdHRyaWJ1dGVzX3Q7CiAvKiAgIGJpdHM6IGRlc2NyLiAqLwogLyogICAxNS0xNCBWaWRlbyBjb21wcmVzc2lvbiBtb2RlICgwPU1QRUctMSwgMT1NUEVHLTIpICovCiAvKiAgIDEzLTEyIFRWIHN5c3RlbSAoMD01MjUvNjAsIDE9NjI1LzUwKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFiZjMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBfRFlOQU1JQ19ERUJVR19ICisjZGVmaW5lIF9EWU5BTUlDX0RFQlVHX0gKKworLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAorICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQorICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK2V4dGVybiBsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkOworZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQyOworCisvKgorICogQW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgY3JlYXRlZCBpbiBhIHNwZWNpYWwKKyAqIEVMRiBzZWN0aW9uIGF0IGV2ZXJ5IGR5bmFtaWMgZGVidWcgY2FsbHNpdGUuICBBdCBydW50aW1lLAorICogdGhlIHNwZWNpYWwgc2VjdGlvbiBpcyB0cmVhdGVkIGFzIGFuIGFycmF5IG9mIHRoZXNlLgorICovCitzdHJ1Y3QgX2RkZWJ1ZyB7CisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgdG8gZHJpdmUgdGhlIHVzZXIgaW50ZXJmYWNlCisJICogZm9yIHNlbGVjdGluZyBhbmQgZGlzcGxheWluZyBkZWJ1ZyBjYWxsc2l0ZXMuCisJICovCisJY29uc3QgY2hhciAqbW9kbmFtZTsKKwljb25zdCBjaGFyICpmdW5jdGlvbjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljb25zdCBjaGFyICpmb3JtYXQ7CisJY2hhciBwcmltYXJ5X2hhc2g7CisJY2hhciBzZWNvbmRhcnlfaGFzaDsKKwl1bnNpZ25lZCBpbnQgbGluZW5vOjI0OworCS8qCisgCSAqIFRoZSBmbGFncyBmaWVsZCBjb250cm9scyB0aGUgYmVoYXZpb3VyIGF0IHRoZSBjYWxsc2l0ZS4KKyAJICogVGhlIGJpdHMgaGVyZSBhcmUgY2hhbmdlZCBkeW5hbWljYWxseSB3aGVuIHRoZSB1c2VyCisgCSAqIHdyaXRlcyBjb21tYW5kcyB0byA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKKwkgKi8KKyNkZWZpbmUgX0RQUklOVEtfRkxBR1NfUFJJTlQgICAoMTw8MCkgIC8qIHByaW50aygpIGEgbWVzc2FnZSB1c2luZyB0aGUgZm9ybWF0ICovCisjZGVmaW5lIF9EUFJJTlRLX0ZMQUdTX0RFRkFVTFQgMAorCXVuc2lnbmVkIGludCBmbGFnczo4OworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisKKworaW50IGRkZWJ1Z19hZGRfbW9kdWxlKHN0cnVjdCBfZGRlYnVnICp0YWIsIHVuc2lnbmVkIGludCBuLAorCQkJCWNvbnN0IGNoYXIgKm1vZG5hbWUpOworCisjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKK2V4dGVybiBpbnQgZGRlYnVnX3JlbW92ZV9tb2R1bGUoY2hhciAqbW9kX25hbWUpOworCisjZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChkZCkgICh7CSAgICAgXAorCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgXAorCWlmICh1bmxpa2VseSgoZHluYW1pY19kZWJ1Z19lbmFibGVkICYgKDFMTCA8PCBERUJVR19IQVNIKSkgJiYJICAgICBcCisJCQkoZHluYW1pY19kZWJ1Z19lbmFibGVkMiAmICgxTEwgPDwgREVCVUdfSEFTSDIpKSkpICAgXAorCQkJCWlmICh1bmxpa2VseShkZC5mbGFncykpCQkJICAgICBcCisJCQkJCV9fcmV0ID0gMTsJCQkgICAgIFwKKwlfX3JldDsgfSkKKworI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSBkbyB7CQkJCQlcCisJc3RhdGljIHN0cnVjdCBfZGRlYnVnIGRlc2NyaXB0b3IJCQkJXAorCV9fdXNlZAkJCQkJCQkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJXAorCXsgS0JVSUxEX01PRE5BTUUsIF9fZnVuY19fLCBfX0ZJTEVfXywgZm10LCBERUJVR19IQVNILAlcCisJCURFQlVHX0hBU0gyLCBfX0xJTkVfXywgX0RQUklOVEtfRkxBR1NfREVGQVVMVCB9OwlcCisJaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChkZXNjcmlwdG9yKSkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiIgcHJfZm10KGZtdCksCVwKKwkJCQkjI19fVkFfQVJHU19fKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKworI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmbXQsIC4uLikgZG8gewkJCQlcCisJc3RhdGljIHN0cnVjdCBfZGRlYnVnIGRlc2NyaXB0b3IJCQkJXAorCV9fdXNlZAkJCQkJCQkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJXAorCXsgS0JVSUxEX01PRE5BTUUsIF9fZnVuY19fLCBfX0ZJTEVfXywgZm10LCBERUJVR19IQVNILAlcCisJCURFQlVHX0hBU0gyLCBfX0xJTkVfXywgX0RQUklOVEtfRkxBR1NfREVGQVVMVCB9OwlcCisJaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChkZXNjcmlwdG9yKSkJCQkJXAorCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCQkJXAorCQkJCQlLQlVJTERfTU9ETkFNRSAiOiAiIHByX2ZtdChmbXQpLFwKKwkJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJXAorCX0gd2hpbGUgKDApCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGRkZWJ1Z19yZW1vdmVfbW9kdWxlKGNoYXIgKm1vZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1MjhkMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jaWZuZGVmIF9EWU5BTUlDX1BSSU5US19ICi0jZGVmaW5lIF9EWU5BTUlDX1BSSU5US19ICi0KLSNkZWZpbmUgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMgNgotI2RlZmluZSBERUJVR19IQVNIX1RBQkxFX1NJWkUgKDEgPDwgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMpCi0KLSNkZWZpbmUgVFlQRV9CT09MRUFOIDEKLQotI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfQUxMIDAKLSNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX05PTkUgMQotI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfU09NRSAyCi0KLWV4dGVybiBpbnQgZHluYW1pY19lbmFibGVkOwotCi0vKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCi0gKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5Ci0gKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KLSAqLwotZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkOwotZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkMjsKLQotc3RydWN0IG1vZF9kZWJ1ZyB7Ci0JY2hhciAqbW9kbmFtZTsKLQljaGFyICpsb2dpY2FsX21vZG5hbWU7Ci0JY2hhciAqZmxhZ19uYW1lczsKLQlpbnQgdHlwZTsKLQlpbnQgaGFzaDsKLQlpbnQgaGFzaDI7Ci19IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKLQotaW50IHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgY2hhciAqc2hhcmVfbmFtZSwKLQkJCQkJY2hhciAqZmxhZ3MsIGludCBoYXNoLCBpbnQgaGFzaDIpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCi1leHRlcm4gaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUpOwotZXh0ZXJuIGludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZG5hbWUsIGludCB0eXBlLAotCQkJCQlpbnQgdmFsdWUsIGludCBoYXNoKTsKLQotI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQobW9kdWxlLCB0eXBlLCB2YWx1ZSwgbGV2ZWwsIGhhc2gpICAoewkgICAgIFwKLQlpbnQgX19yZXQgPSAwOwkJCQkJCQkgICAgIFwKLQlpZiAodW5saWtlbHkoKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgJiAoMUxMIDw8IERFQlVHX0hBU0gpKSAmJgkgICAgIFwKLQkJCShkeW5hbWljX3ByaW50a19lbmFibGVkMiAmICgxTEwgPDwgREVCVUdfSEFTSDIpKSkpICAgXAotCQkJX19yZXQgPSBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKG1vZHVsZSwgdHlwZSwgICBcCi0JCQkJCQkJCXZhbHVlLCBoYXNoKTtcCi0JX19yZXQ7IH0pCi0KLSNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgZG8gewkJCQkJICAgIFwKLQlzdGF0aWMgY2hhciBtb2RfbmFtZVtdCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2Vfc3RyaW5ncyIpKSkJCQkgICAgXAotCSA9IEtCVUlMRF9NT0ROQU1FOwkJCQkJCSAgICBcCi0Jc3RhdGljIHN0cnVjdCBtb2RfZGVidWcgZGVzY3JpcHRvcgkJCQkgICAgXAotCV9fdXNlZAkJCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCSAgICBcCi0JeyBtb2RfbmFtZSwgbW9kX25hbWUsIE5VTEwsIFRZUEVfQk9PTEVBTiwgREVCVUdfSEFTSCwgREVCVUdfSEFTSDIgfTtcCi0JaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChLQlVJTERfTU9ETkFNRSwgVFlQRV9CT09MRUFOLAkJICAgIFwKLQkJCQkJCTAsIDAsIERFQlVHX0hBU0gpKQkgICAgXAotCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiIgZm10LAkJICAgIFwKLQkJCQkjI19fVkFfQVJHU19fKTsJCQkJICAgIFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7CQkJCSAgICBcCi0Jc3RhdGljIGNoYXIgbW9kX25hbWVbXQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlX3N0cmluZ3MiKSkpCQkJICAgIFwKLQkgPSBLQlVJTERfTU9ETkFNRTsJCQkJCQkgICAgXAotCXN0YXRpYyBzdHJ1Y3QgbW9kX2RlYnVnIGRlc2NyaXB0b3IJCQkJICAgIFwKLQlfX3VzZWQJCQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQkgICAgXAotCXsgbW9kX25hbWUsIG1vZF9uYW1lLCBOVUxMLCBUWVBFX0JPT0xFQU4sIERFQlVHX0hBU0gsIERFQlVHX0hBU0gyIH07XAotCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoS0JVSUxEX01PRE5BTUUsIFRZUEVfQk9PTEVBTiwJCSAgICBcCi0JCQkJCQkwLCAwLCBERUJVR19IQVNIKSkJICAgIFwKLQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAkJCSAgICBcCi0JCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIgZm9ybWF0LAkgICAgXAotCQkJCQkjI19fVkFfQVJHU19fKTsJCQkgICAgXAotCX0gd2hpbGUgKDApCi0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY29uc3QgY2hhciAqbW9kX25hbWUpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZG5hbWUsIGludCB0eXBlLAotCQkJCQkJaW50IHZhbHVlLCBpbnQgaGFzaCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQobW9kdWxlLCB0eXBlLCB2YWx1ZSwgbGV2ZWwsIGhhc2gpICAoeyAwOyB9KQotI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXJycXVldWUuaCBiL2luY2x1ZGUvbGludXgvZXJycXVldWUuaAppbmRleCBjZWIxNDU0Li5lYzEyY2M3NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXJycXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNkZWZpbmUgU09fRUVfT1JJR0lOX0xPQ0FMCTEKICNkZWZpbmUgU09fRUVfT1JJR0lOX0lDTVAJMgogI2RlZmluZSBTT19FRV9PUklHSU5fSUNNUDYJMworI2RlZmluZSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HIDQKIAogI2RlZmluZSBTT19FRV9PRkZFTkRFUihlZSkJKChzdHJ1Y3Qgc29ja2FkZHIqKSgoZWUpKzEpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKaW5kZXggMWNiMGYwYi4uYTFmMTdhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaApAQCAtMTg0LDQgKzE4NCwyNSBAQAogfQogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAorLyoqCisgKiBjb21wYXJlX2V0aGVyX2hlYWRlciAtIENvbXBhcmUgdHdvIEV0aGVybmV0IGhlYWRlcnMKKyAqIEBhOiBQb2ludGVyIHRvIEV0aGVybmV0IGhlYWRlcgorICogQGI6IFBvaW50ZXIgdG8gRXRoZXJuZXQgaGVhZGVyCisgKgorICogQ29tcGFyZSB0d28gZXRoZXJuZXQgaGVhZGVycywgcmV0dXJucyAwIGlmIGVxdWFsLgorICogVGhpcyBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgaGVhZGVyIChpLmUuLCBJUCBoZWFkZXIpIGlzIDQtYnl0ZQorICogYWxpZ25lZCBPUiB0aGUgcGxhdGZvcm0gY2FuIGhhbmRsZSB1bmFsaWduZWQgYWNjZXNzLiAgVGhpcyBpcyB0aGUKKyAqIGNhc2UgZm9yIGFsbCBwYWNrZXRzIGNvbWluZyBpbnRvIG5ldGlmX3JlY2VpdmVfc2tiIG9yIHNpbWlsYXIKKyAqIGVudHJ5IHBvaW50cy4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBjb21wYXJlX2V0aGVyX2hlYWRlcihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXUzMiAqYTMyID0gKHUzMiAqKSgodTggKilhICsgMik7CisJdTMyICpiMzIgPSAodTMyICopKCh1OCAqKWIgKyAyKTsKKworCXJldHVybiAoKih1MTYgKilhIF4gKih1MTYgKiliKSB8IChhMzJbMF0gXiBiMzJbMF0pIHwKKwkgICAgICAgKGEzMlsxXSBeIGIzMlsxXSkgfCAoYTMyWzJdIF4gYjMyWzJdKTsKK30KKwogI2VuZGlmCS8qIF9MSU5VWF9FVEhFUkRFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDI3YzY3YTUuLjEzMWIxMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC03LDYgKzcsNyBAQAogICogUG9ydGlvbnMgQ29weXJpZ2h0IDIwMDIgSW50ZWwgKGVsaS5rdXBlcm1hbm5AaW50ZWwuY29tLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocmlzdG9waGVyLmxlZWNoQGludGVsLmNvbSwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY290dC5mZWxkbWFuQGludGVsLmNvbSkKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgU3VuIE1pY3Jvc3lzdGVtcyAyMDA4CiAgKi8KIAogI2lmbmRlZiBfTElOVVhfRVRIVE9PTF9ICkBAIC0yODcsMTAgKzI4OCw3NSBAQAogCUVUSF9GTEFHX0xSTwkJPSAoMSA8PCAxNSksCS8qIExSTyBpcyBlbmFibGVkICovCiB9OwogCi1zdHJ1Y3QgZXRodG9vbF9yeG5mYyB7Ci0JX191MzIJCWNtZDsKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhcmUgZm9yIHN1cHBvcnRpbmcgUlggbmV0d29yayBmbG93CisgKiBjbGFzc2lmaWNhdGlvbiBjb25maWd1cmF0aW9uLiBOb3RlLCBhbGwgbXVsdGlieXRlIGZpZWxkcywgZS5nLiwKKyAqIGlwNHNyYywgaXA0ZHN0LCBwc3JjLCBwZHN0LCBzcGksIGV0Yy4gYXJlIGV4cGVjdGVkIHRvIGJlIGluIG5ldHdvcmsKKyAqIGJ5dGUgb3JkZXIuCisgKi8KK3N0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTE2CXBzcmM7CisJX19iZTE2CXBkc3Q7CisJX191OCAgICB0b3M7Cit9OworCitzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fYmUzMglzcGk7CisJX191OCAgICB0b3M7Cit9OworCitzdHJ1Y3QgZXRodG9vbF9yYXdpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fdTgJaGRhdGFbNjRdOworfTsKKworc3RydWN0IGV0aHRvb2xfZXRoZXJfc3BlYyB7CisJX19iZTE2CWV0aGVyX3R5cGU7CisJX191OAlmcmFtZV9zaXplOworCV9fdTgJZWZyYW1lWzE2XTsKK307CisKKyNkZWZpbmUJRVRIX1JYX05GQ19JUDQJMQorI2RlZmluZQlFVEhfUlhfTkZDX0lQNgkyCisKK3N0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTMyCWw0XzRfYnl0ZXM7CisJX191OCAgICB0b3M7CisJX191OCAgICBpcF92ZXI7CisJX191OCAgICBwcm90bzsKK307CisKK3N0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyB7CiAJX191MzIJCWZsb3dfdHlwZTsKLQlfX3U2NAkJZGF0YTsKKwl1bmlvbiB7CisJCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl0Y3BfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl1ZHBfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQlzY3RwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJYWhfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQllc3BfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3Jhd2lwNF9zcGVjCQlyYXdfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2V0aGVyX3NwZWMJCWV0aGVyX3NwZWM7CisJCXN0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjCQl1c3JfaXA0X3NwZWM7CisJCV9fdTgJCQkJCWhkYXRhWzY0XTsKKwl9IGhfdSwgbV91OyAvKiBlbnRyeSwgbWFzayAqLworCV9fdTY0CQlyaW5nX2Nvb2tpZTsKKwlfX3UzMgkJbG9jYXRpb247Cit9OworCitzdHJ1Y3QgZXRodG9vbF9yeG5mYyB7CisJX191MzIJCQkJY21kOworCV9fdTMyCQkJCWZsb3dfdHlwZTsKKwkvKiBUaGUgcnggZmxvdyBoYXNoIHZhbHVlIG9yIHRoZSBydWxlIERCIHNpemUgKi8KKwlfX3U2NAkJCQlkYXRhOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYwlmczsKKwlfX3UzMgkJCQlydWxlX2NudDsKKwlfX3UzMgkJCQlydWxlX2xvY3NbMF07CiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtNDE3LDggKzQ4Myw4IEBACiAJLyogdGhlIGZvbGxvd2luZyBob29rcyBhcmUgb2Jzb2xldGUgKi8KIAlpbnQJKCpzZWxmX3Rlc3RfY291bnQpKHN0cnVjdCBuZXRfZGV2aWNlICopOy8qIHVzZSBnZXRfc3NldF9jb3VudCAqLwogCWludAkoKmdldF9zdGF0c19jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7LyogdXNlIGdldF9zc2V0X2NvdW50ICovCi0JaW50CSgqZ2V0X3J4aGFzaCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKik7Ci0JaW50CSgqc2V0X3J4aGFzaCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKik7CisJaW50CSgqZ2V0X3J4bmZjKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqLCB2b2lkICopOworCWludAkoKnNldF9yeG5mYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKik7CiB9OwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApAQCAtNDY5LDYgKzUzNSwxMiBAQAogI2RlZmluZQlFVEhUT09MX1NSWEZICQkweDAwMDAwMDJhIC8qIFNldCBSWCBmbG93IGhhc2ggY29uZmlndXJhdGlvbiAqLwogI2RlZmluZSBFVEhUT09MX0dHUk8JCTB4MDAwMDAwMmIgLyogR2V0IEdSTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCiAjZGVmaW5lIEVUSFRPT0xfU0dSTwkJMHgwMDAwMDAyYyAvKiBTZXQgR1JPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhSSU5HUwkweDAwMDAwMDJkIC8qIEdldCBSWCByaW5ncyBhdmFpbGFibGUgZm9yIExCICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUkxDTlQJMHgwMDAwMDAyZSAvKiBHZXQgUlggY2xhc3MgcnVsZSBjb3VudCAqLworI2RlZmluZQlFVEhUT09MX0dSWENMU1JVTEUJMHgwMDAwMDAyZiAvKiBHZXQgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLworI2RlZmluZQlFVEhUT09MX0dSWENMU1JMQUxMCTB4MDAwMDAwMzAgLyogR2V0IGFsbCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfU1JYQ0xTUkxERUwJMHgwMDAwMDAzMSAvKiBEZWxldGUgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLworI2RlZmluZQlFVEhUT09MX1NSWENMU1JMSU5TCTB4MDAwMDAwMzIgLyogSW5zZXJ0IFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KIAogLyogY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGNvZGUgKi8KICNkZWZpbmUgU1BBUkNfRVRIX0dTRVQJCUVUSFRPT0xfR1NFVApAQCAtNTY1LDkgKzYzNywxMyBAQAogI2RlZmluZQlVRFBfVjZfRkxPVwkweDA2CiAjZGVmaW5lCVNDVFBfVjZfRkxPVwkweDA3CiAjZGVmaW5lCUFIX0VTUF9WNl9GTE9XCTB4MDgKKyNkZWZpbmUJQUhfVjRfRkxPVwkweDA5CisjZGVmaW5lCUVTUF9WNF9GTE9XCTB4MGEKKyNkZWZpbmUJQUhfVjZfRkxPVwkweDBiCisjZGVmaW5lCUVTUF9WNl9GTE9XCTB4MGMKKyNkZWZpbmUJSVBfVVNFUl9GTE9XCTB4MGQKIAogLyogTDMtTDQgbmV0d29yayB0cmFmZmljIGZsb3cgaGFzaCBvcHRpb25zICovCi0jZGVmaW5lCVJYSF9ERVZfUE9SVAkoMSA8PCAwKQogI2RlZmluZQlSWEhfTDJEQQkoMSA8PCAxKQogI2RlZmluZQlSWEhfVkxBTgkoMSA8PCAyKQogI2RlZmluZQlSWEhfTDNfUFJPVE8JKDEgPDwgMykKQEAgLTU3Nyw1ICs2NTMsNiBAQAogI2RlZmluZQlSWEhfTDRfQl8yXzMJKDEgPDwgNykgLyogZHN0IHBvcnQgaW4gY2FzZSBvZiBUQ1AvVURQL1NDVFAgKi8KICNkZWZpbmUJUlhIX0RJU0NBUkQJKDEgPDwgMzEpCiAKKyNkZWZpbmUJUlhfQ0xTX0ZMT1dfRElTQwkweGZmZmZmZmZmZmZmZmZmZmZVTEwKIAogI2VuZGlmIC8qIF9MSU5VWF9FVEhUT09MX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCmluZGV4IGYxZTFkM2MuLmY2ODU2YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaApAQCAtNjEsNyArNjEsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9pbml0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJmZpbGUtPmZfZXBfbGlua3MpOwotCXNwaW5fbG9ja19pbml0KCZmaWxlLT5mX2VwX2xvY2spOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA5MjczNGMwLi4xY2Q0NGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xNDEsNiArMTQxLDcgQEAKICNkZWZpbmUgTVNfUkVMQVRJTUUJKDE8PDIxKQkvKiBVcGRhdGUgYXRpbWUgcmVsYXRpdmUgdG8gbXRpbWUvY3RpbWUuICovCiAjZGVmaW5lIE1TX0tFUk5NT1VOVAkoMTw8MjIpIC8qIHRoaXMgaXMgYSBrZXJuX21vdW50IGNhbGwgKi8KICNkZWZpbmUgTVNfSV9WRVJTSU9OCSgxPDwyMykgLyogVXBkYXRlIGlub2RlIElfdmVyc2lvbiBmaWVsZCAqLworI2RlZmluZSBNU19TVFJJQ1RBVElNRQkoMTw8MjQpIC8qIEFsd2F5cyBwZXJmb3JtIGF0aW1lIHVwZGF0ZXMgKi8KICNkZWZpbmUgTVNfQUNUSVZFCSgxPDwzMCkKICNkZWZpbmUgTVNfTk9VU0VSCSgxPDwzMSkKIApAQCAtODQ4LDYgKzg0OSw3IEBACiAjZGVmaW5lIGZfZGVudHJ5CWZfcGF0aC5kZW50cnkKICNkZWZpbmUgZl92ZnNtbnQJZl9wYXRoLm1udAogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMJKmZfb3A7CisJc3BpbmxvY2tfdAkJZl9sb2NrOyAgLyogZl9lcF9saW5rcywgZl9mbGFncyAqLwogCWF0b21pY19sb25nX3QJCWZfY291bnQ7CiAJdW5zaWduZWQgaW50IAkJZl9mbGFnczsKIAlmbW9kZV90CQkJZl9tb2RlOwpAQCAtODY2LDcgKzg2OCw2IEBACiAjaWZkZWYgQ09ORklHX0VQT0xMCiAJLyogVXNlZCBieSBmcy9ldmVudHBvbGwuYyB0byBsaW5rIGFsbCB0aGUgaG9va3MgdG8gdGhpcyBmaWxlICovCiAJc3RydWN0IGxpc3RfaGVhZAlmX2VwX2xpbmtzOwotCXNwaW5sb2NrX3QJCWZfZXBfbG9jazsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0VQT0xMICovCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKmZfbWFwcGluZzsKICNpZmRlZiBDT05GSUdfREVCVUdfV1JJVEVDT1VOVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaCBiL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKaW5kZXggMTNmNGU3NC4uMGZmYTQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCkBAIC0yMiw3ICsyMiw3IEBACiB7CiAJX191NjQJYnl0ZXM7CiAJX191MzIJcGFja2V0czsKLX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoqCiAgKiBzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCAtIHJhdGUgZXN0aW1hdG9yCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggMTY5NDhlYS4uNjM0YzUzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtMzMzLDExICszMzMsMTAgQEAKIAkJcGFydF90b19kaXNrKHBhcnQpLT5wYXJ0MC5pbl9mbGlnaHQtLTsKIH0KIAotLyogZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYyAqLworLyogYmxvY2svYmxrLWNvcmUuYyAqLwogZXh0ZXJuIHZvaWQgcGFydF9yb3VuZF9zdGF0cyhpbnQgY3B1LCBzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0KTsKIAotLyogZHJpdmVycy9ibG9jay9nZW5oZC5jICovCi1leHRlcm4gaW50IGdldF9ibGtkZXZfbGlzdChjaGFyICosIGludCk7CisvKiBibG9jay9nZW5oZC5jICovCiBleHRlcm4gdm9pZCBhZGRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiBleHRlcm4gdm9pZCBkZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ3ApOwogZXh0ZXJuIHZvaWQgdW5saW5rX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmdwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRsYy5oIGIvaW5jbHVkZS9saW51eC9oZGxjLmgKaW5kZXggZmQ0N2ExNS4uNmE2ZTcwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZGxjLmgKKysrIGIvaW5jbHVkZS9saW51eC9oZGxjLmgKQEAgLTM4LDYgKzM4LDcgQEAKIAlpbnQgKCppb2N0bCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpOwogCV9fYmUxNiAoKnR5cGVfdHJhbnMpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCWludCAoKm5ldGlmX3J4KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQgKCp4bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAJc3RydWN0IGhkbGNfcHJvdG8gKm5leHQ7IC8qIG5leHQgcHJvdG9jb2wgaW4gdGhlIGxpc3QgKi8KIH07CkBAIC0xMDIsNiArMTAzLDEwIEBACiBpbnQgaGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogLyogTXVzdCBiZSBjYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHdoZW4gSERMQyBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkICovCiB2b2lkIGhkbGNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisvKiBNYXkgYmUgdXNlZCBieSBoYXJkd2FyZSBkcml2ZXIgKi8KK2ludCBoZGxjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOworLyogTXVzdCBiZSBwb2ludGVkIHRvIGJ5IGh3IGRyaXZlcidzIGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQgKi8KK2ludCBoZGxjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGludCBhdHRhY2hfaGRsY19wcm90b2NvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaGRsY19wcm90byAqcHJvdG8sCiAJCQkgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmggYi9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaAppbmRleCBiZjYzMDJmLi5jMDEwYjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaApAQCAtMjE1LDcgKzIxNSw3IEBACiAKIAlzdHJ1Y3QgaGRsY2Rydl9oZGxjdHggewogCQlzdHJ1Y3QgaGRsY2Rydl9oZGxjYnVmZmVyIGhidWY7Ci0JCWxvbmcgaW5faGRsY190eDsKKwkJdW5zaWduZWQgbG9uZyBpbl9oZGxjX3R4OwogCQkvKgogCQkgKiAwID0gc2VuZCBmbGFncwogCQkgKiAxID0gc2VuZCB0eHRhaWwgKGZsYWdzKQpAQCAtMjQxLDcgKzI0MSw2IEBACiAJc3RydWN0IGhkbGNkcnZfYml0YnVmZmVyIGJpdGJ1Zl9oZGxjOwogI2VuZGlmIC8qIEhETENEUlZfREVCVUcgKi8KIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCWludCBwdHRfa2V5ZWQ7CiAKIAkvKiBxdWV1ZWQgc2tiIGZvciB0cmFuc21pc3Npb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWJtdHIuaCBiL2luY2x1ZGUvbGludXgvaWJtdHIuaAppbmRleCAxYzdhMGRkLi4wNjY5NWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2libXRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pYm10ci5oCkBAIC0yMDcsNyArMjA3LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBleHNhcF9zdGF0aW9uX2lkOwogCXVuc2lnbmVkIHNob3J0IGdsb2JhbF9pbnRfZW5hYmxlOwogCXN0cnVjdCBza19idWZmICpjdXJyZW50X3NrYjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyB0cl9zdGF0czsKKwogCXVuc2lnbmVkIGNoYXIgYXV0b19zcGVlZHNhdmU7CiAJb3Blbl9zdGF0ZQkJCW9wZW5fc3RhdHVzLCBzYXBfc3RhdHVzOwogCWVudW0ge01BTlVBTCwgQVVUT01BVElDfQlvcGVuX21vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCAyNTA4N2FlLi44NTRlYmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXV0ZXguaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0NSSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZSVikKKyNpZiBkZWZpbmVkKENPTkZJR19DUklTKSB8fCBkZWZpbmVkKENPTkZJR19GUlYpIHx8IGRlZmluZWQoQ09ORklHX01OMTAzMDApCiAjIGRlZmluZSBTVVBQT1JUX1ZMQl9TWU5DIDAKICNlbHNlCiAjIGRlZmluZSBTVVBQT1JUX1ZMQl9TWU5DIDEKQEAgLTE5MywyNCArMTkzLDggQEAKIAlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdGxfYWRkcjsKIH0KIAotLyogZm9yIElERSBQQ0kgY29udHJvbGxlcnMgaW4gbGVnYWN5IG1vZGUsIHRlbXBvcmFyeSAqLwotc3RhdGljIGlubGluZSBpbnQgX19pZGVfZGVmYXVsdF9pcnEodW5zaWduZWQgbG9uZyBiYXNlKQotewotCXN3aXRjaCAoYmFzZSkgewotI2lmZGVmIENPTkZJR19JQTY0Ci0JY2FzZSAweDFmMDogcmV0dXJuIGlzYV9pcnFfdG9fdmVjdG9yKDE0KTsKLQljYXNlIDB4MTcwOiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTUpOwotI2Vsc2UKLQljYXNlIDB4MWYwOiByZXR1cm4gMTQ7Ci0JY2FzZSAweDE3MDogcmV0dXJuIDE1OwotI2VuZGlmCi0JfQotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19GUlYpIHx8IGRlZmluZWQoQ09ORklHX002OEspIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBkZWZpbmVkKENPTkZJR19NTjEwMzAwKSB8fCBkZWZpbmVkKENPTkZJR19QQVJJU0MpIFwKLSAgICB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQzY0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgZGVmaW5lZChDT05GSUdfTUlQUykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQykKICNpbmNsdWRlIDxhc20vaWRlLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+CkBAIC04NjYsNyArODUwLDcgQEAKIAlpZGVfaHdpZl90CSpwb3J0c1tNQVhfSE9TVF9QT1JUUyArIDFdOwogCXVuc2lnbmVkIGludAluX3BvcnRzOwogCXN0cnVjdCBkZXZpY2UJKmRldlsyXTsKLQl1bnNpZ25lZCBpbnQJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCWludAkJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOwogCWlycV9oYW5kbGVyX3QJaXJxX2hhbmRsZXI7CiAJdW5zaWduZWQgbG9uZwlob3N0X2ZsYWdzOwogCXZvaWQJCSpob3N0X3ByaXY7CkBAIC0xMTQ2LDExICsxMTMwLDE0IEBACiBleHRlcm4gaW50IGlkZV92bGJfY2xrOwogZXh0ZXJuIGludCBpZGVfcGNpX2NsazsKIAotZXh0ZXJuIGludCBpZGVfZW5kX3JlcXVlc3QgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJzZWNzKTsKLWludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICAgIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpOworaW50IGlkZV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7CitpbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIGludCwgaW50KTsKK3ZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiAKLWV4dGVybiB2b2lkIGlkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpOwordm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKKwkJICAgICAgIGlkZV9leHBpcnlfdCAqKTsKK3ZvaWQgaWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAorCQkgICAgIGlkZV9leHBpcnlfdCAqKTsKIAogdm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICosIHU4LCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKIAkJCSBpZGVfZXhwaXJ5X3QgKik7CkBAIC0xMTY5LDEzICsxMTU2LDE0IEBACiAKIGludCBpZGVfd2FpdF9zdGF0KGlkZV9zdGFydHN0b3BfdCAqLCBpZGVfZHJpdmVfdCAqLCB1OCwgdTgsIHVuc2lnbmVkIGxvbmcpOwogCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3BhcmtfdW5wYXJrKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19kZXZzZXQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKIGV4dGVybiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0IChpZGVfZHJpdmVfdCAqKTsKIAogZXh0ZXJuIGludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsIGludCBhcmcpOwogCi1leHRlcm4gdm9pZCBpZGVfZG9fZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotCiBleHRlcm4gdm9pZCBpZGVfZW5kX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqLCB1OCwgdTgpOwogCiB2b2lkIGlkZV90Zl9kdW1wKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlkZV90YXNrZmlsZSAqKTsKQEAgLTEyMDAsMTAgKzExODgsNiBAQAogdTggaWRlX3JlYWRfZXJyb3IoaWRlX2RyaXZlX3QgKik7CiB2b2lkIGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbihpZGVfZHJpdmVfdCAqLCB1MTYgKiwgdTggKik7CiAKLWV4dGVybiBpbnQgZHJpdmVfaXNfcmVhZHkoaWRlX2RyaXZlX3QgKik7Ci0KLXZvaWQgaWRlX3BrdGNtZF90Zl9sb2FkKGlkZV9kcml2ZV90ICosIHUzMiwgdTE2LCB1OCk7Ci0KIGludCBpZGVfY2hlY2tfYXRhcGlfZGV2aWNlKGlkZV9kcml2ZV90ICosIGNvbnN0IGNoYXIgKik7CiAKIHZvaWQgaWRlX2luaXRfcGMoc3RydWN0IGlkZV9hdGFwaV9wYyAqKTsKQEAgLTEyNTEsNiArMTIzNSw4IEBACiAKIGludCBpZGVfdGFza2ZpbGVfaW9jdGwoaWRlX2RyaXZlX3QgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAoraW50IGlkZV9kZXZfcmVhZF9pZChpZGVfZHJpdmVfdCAqLCB1OCwgdTE2ICopOworCiBleHRlcm4gaW50IGlkZV9kcml2ZWlkX3VwZGF0ZShpZGVfZHJpdmVfdCAqKTsKIGV4dGVybiBpbnQgaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChpZGVfZHJpdmVfdCAqLCB1OCk7CiBleHRlcm4gdTggZWlnaHR5X25pbnR5X3RocmVlIChpZGVfZHJpdmVfdCAqKTsKQEAgLTEyODAsNyArMTI2Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLCBpbnQsCit2b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwKIAkJCSBod19yZWdzX3QgKiwgaHdfcmVnc190ICoqKTsKIHZvaWQgaWRlX3NldHVwX3BjaV9ub2lzZShzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqKTsKIApAQCAtMTM0OSwxMCArMTMzNSw2IEBACiAJSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8JPSAoMSA8PCAxOSksCiAJLyogc2VyaWFsaXplIHBvcnRzICovCiAJSURFX0hGTEFHX1NFUklBTElaRQkJPSAoMSA8PCAyMCksCi0JLyogdXNlIGxlZ2FjeSBJUlFzICovCi0JSURFX0hGTEFHX0xFR0FDWV9JUlFTCQk9ICgxIDw8IDIxKSwKLQkvKiBmb3JjZSB1c2Ugb2YgbGVnYWN5IElSUXMgKi8KLQlJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVMJPSAoMSA8PCAyMiksCiAJLyogaG9zdCBpcyBUUk0yOTAgKi8KIAlJREVfSEZMQUdfVFJNMjkwCQk9ICgxIDw8IDIzKSwKIAkvKiB1c2UgMzItYml0IEkvTyBvcHMgKi8KQEAgLTEzODAsNyArMTM2Miw3IEBACiAKIHN0cnVjdCBpZGVfcG9ydF9pbmZvIHsKIAljaGFyCQkJKm5hbWU7Ci0JdW5zaWduZWQgaW50CQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisJaW50CQkJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOwogCXZvaWQJCQkoKmluaXRfaW9wcykoaWRlX2h3aWZfdCAqKTsKIAl2b2lkICAgICAgICAgICAgICAgICAgICAoKmluaXRfaHdpZikoaWRlX2h3aWZfdCAqKTsKIAlpbnQJCQkoKmluaXRfZG1hKShpZGVfaHdpZl90ICosCkBAIC0xNDcxLDYgKzE0NTMsNyBAQAogCiB2b2lkIGlkZV9kbWFfbG9zdF9pcnEoaWRlX2RyaXZlX3QgKik7CiB2b2lkIGlkZV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqKTsKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKiwgaW50KTsKIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9pZF9kbWFfYnVnKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMDsgfQpAQCAtMTQ4MiwyMSArMTQ2NSwyNCBAQAogc3RhdGljIGlubGluZSB2b2lkIGlkZV9kbWFfdmVyYm9zZShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9CiBzdGF0aWMgaW5saW5lIGludCBpZGVfc2V0X2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDE7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfY2hlY2tfZG1hX2NyYyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9CitzdGF0aWMgaW5saW5lIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IpIHsgcmV0dXJuIGlkZV9zdG9wcGVkOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICpod2lmKSB7IDsgfQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQoraW50IGlkZV9hY3BpX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGlkZV9hY3BpX2V4ZWNfdGZzKGlkZV9kcml2ZV90ICpkcml2ZSk7CiBleHRlcm4gdm9pZCBpZGVfYWNwaV9nZXRfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpOwogZXh0ZXJuIHZvaWQgaWRlX2FjcGlfcHVzaF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZik7Ci1leHRlcm4gdm9pZCBpZGVfYWNwaV9pbml0KGlkZV9od2lmX3QgKmh3aWYpOwordm9pZCBpZGVfYWNwaV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqKTsKIHZvaWQgaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaWRlX2h3aWZfdCAqKTsKIGV4dGVybiB2b2lkIGlkZV9hY3BpX3NldF9zdGF0ZShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pOwogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGlkZV9hY3BpX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgaWRlX2FjcGlfZXhlY190ZnMoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfZ2V0X3RpbWluZyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX3B1c2hfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfaW5pdChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX2luaXRfcG9ydChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfc2V0X3N0YXRlKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikge30KICNlbmRpZgpAQCAtMTUzMCw5ICsxNTE2LDcgQEAKIAlod2lmLT5od2lmX2RhdGEgPSBkYXRhOwogfQogCi1jb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4IG1vZGUpOwogZXh0ZXJuIHZvaWQgaWRlX3RvZ2dsZV9ib3VuY2UoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pOwotZXh0ZXJuIGludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpOwogCiB1NjQgaWRlX2dldF9sYmFfYWRkcihzdHJ1Y3QgaWRlX3Rhc2tmaWxlICosIGludCk7CiB1OCBpZGVfZHVtcF9zdGF0dXMoaWRlX2RyaXZlX3QgKiwgY29uc3QgY2hhciAqLCB1OCk7CkBAIC0xNTcxLDE0ICsxNTU1LDE4IEBACiAJCSAgICAgIHN0cnVjdCBpZGVfdGltaW5nICosIHVuc2lnbmVkIGludCk7CiBpbnQgaWRlX3RpbWluZ19jb21wdXRlKGlkZV9kcml2ZV90ICosIHU4LCBzdHJ1Y3QgaWRlX3RpbWluZyAqLCBpbnQsIGludCk7CiAKKyNpZmRlZiBDT05GSUdfSURFX1hGRVJfTU9ERQogaW50IGlkZV9zY2FuX3Bpb19ibGFja2xpc3QoY2hhciAqKTsKLQorY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCk7CiB1OCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoaWRlX2RyaXZlX3QgKiwgdTgsIHU4KTsKLQogaW50IGlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKiwgdTgpOwogaW50IGlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKiwgdTgpOwotCiB2b2lkIGlkZV9zZXRfcGlvKGlkZV9kcml2ZV90ICosIHU4KTsKK2ludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqLCB1OCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9zZXRfcGlvKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKSB7IDsgfQorc3RhdGljIGlubGluZSBpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKSB7IHJldHVybiAtMTsgfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfc2V0X21heF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlKQogewpAQCAtMTYxMSw2ICsxNTk5LDEwIEBACiAjZGVmaW5lIGlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkZXYsIHBvcnQpIFwKIAlmb3IgKChpKSA9IDA7ICgoZGV2KSA9IChwb3J0KS0+ZGV2aWNlc1tpXSkgfHwgKGkpIDwgTUFYX0RSSVZFUzsgKGkpKyspCiAKKyNkZWZpbmUgaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZGV2LCBwb3J0KSBcCisJZm9yICgoaSkgPSAwOyAoKGRldikgPSAocG9ydCktPmRldmljZXNbaV0pIHx8IChpKSA8IE1BWF9EUklWRVM7IChpKSsrKSBcCisJCWlmICgoZGV2KS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpCisKICNkZWZpbmUgaWRlX2hvc3RfZm9yX2VhY2hfcG9ydChpLCBwb3J0LCBob3N0KSBcCiAJZm9yICgoaSkgPSAwOyAoKHBvcnQpID0gKGhvc3QpLT5wb3J0c1tpXSkgfHwgKGkpIDwgTUFYX0hPU1RfUE9SVFM7IChpKSsrKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAppbmRleCBjNGU2Y2ExLi5iMWJiODE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKQEAgLTUyNyw2ICs1MjcsOCBAQAogCXU4IHZpcnR1YWxfbWFwWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU4gMTYKKwogc3RydWN0IGllZWU4MDIxMV9tZ210IHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKIAlfX2xlMTYgZHVyYXRpb247CkBAIC02NDYsNiArNjQ4LDEwIEBACiAJCQkJCXU4IGFjdGlvbl9jb2RlOwogCQkJCQl1OCB2YXJpYWJsZVswXTsKIAkJCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG1lc2hfYWN0aW9uOworCQkJCXN0cnVjdCB7CisJCQkJCXU4IGFjdGlvbjsKKwkJCQkJdTggdHJhbnNfaWRbV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU5dOworCQkJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNhX3F1ZXJ5OwogCQkJfSB1OwogCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhY3Rpb247CiAJfSB1OwpAQCAtNjU1LDYgKzY2MSwxNSBAQAogI2RlZmluZSBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5hY3Rpb24udSkKIAogCisvKiBNYW5hZ2VtZW50IE1JQyBpbmZvcm1hdGlvbiBlbGVtZW50IChJRUVFIDgwMi4xMXcpICovCitzdHJ1Y3QgaWVlZTgwMjExX21taWUgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuZ3RoOworCV9fbGUxNiBrZXlfaWQ7CisJdTggc2VxdWVuY2VfbnVtYmVyWzZdOworCXU4IG1pY1s4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKiBDb250cm9sIGZyYW1lcyAqLwogc3RydWN0IGllZWU4MDIxMV9ydHMgewogCV9fbGUxNiBmcmFtZV9jb250cm9sOwpAQCAtODk5LDYgKzkxNCw5IEBACiAJLyogODAyLjExZyAqLwogCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT1NIT1JUVElNRSA9IDI1LAogCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT0RTU1NPRkRNID0gMjYsCisJLyogODAyLjExdyAqLworCVdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZID0gMzAsCisJV0xBTl9TVEFUVVNfUk9CVVNUX01HTVRfRlJBTUVfUE9MSUNZX1ZJT0xBVElPTiA9IDMxLAogCS8qIDgwMi4xMWkgKi8KIAlXTEFOX1NUQVRVU19JTlZBTElEX0lFID0gNDAsCiAJV0xBTl9TVEFUVVNfSU5WQUxJRF9HUk9VUF9DSVBIRVIgPSA0MSwKQEAgLTEwMTgsNiArMTAzNiw4IEBACiAJV0xBTl9FSURfSFRfSU5GT1JNQVRJT04gPSA2MSwKIAkvKiA4MDIuMTFpICovCiAJV0xBTl9FSURfUlNOID0gNDgsCisJV0xBTl9FSURfVElNRU9VVF9JTlRFUlZBTCA9IDU2LAorCVdMQU5fRUlEX01NSUUgPSA3NiAvKiA4MDIuMTF3ICovLAogCVdMQU5fRUlEX1dQQSA9IDIyMSwKIAlXTEFOX0VJRF9HRU5FUklDID0gMjIxLAogCVdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQyA9IDIyMSwKQEAgLTEwMzAsNiArMTA1MCw4IEBACiAJV0xBTl9DQVRFR09SWV9RT1MgPSAxLAogCVdMQU5fQ0FURUdPUllfRExTID0gMiwKIAlXTEFOX0NBVEVHT1JZX0JBQ0sgPSAzLAorCVdMQU5fQ0FURUdPUllfUFVCTElDID0gNCwKKwlXTEFOX0NBVEVHT1JZX1NBX1FVRVJZID0gOCwKIAlXTEFOX0NBVEVHT1JZX1dNTSA9IDE3LAogfTsKIApAQCAtMTEwNCw2ICsxMTI2LDEyIEBACiAJfTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitlbnVtIGllZWU4MDIxMV90aW1lb3V0X2ludGVydmFsX3R5cGUgeworCVdMQU5fVElNRU9VVF9SRUFTU09DX0RFQURMSU5FID0gMSAvKiA4MDIuMTFyICovLAorCVdMQU5fVElNRU9VVF9LRVlfTElGRVRJTUUgPSAyIC8qIDgwMi4xMXIgKi8sCisJV0xBTl9USU1FT1VUX0FTU09DX0NPTUVCQUNLID0gMyAvKiA4MDIuMTF3ICovLAorfTsKKwogLyogQkFDSyBhY3Rpb24gY29kZSAqLwogZW51bSBpZWVlODAyMTFfYmFja19hY3Rpb25jb2RlIHsKIAlXTEFOX0FDVElPTl9BRERCQV9SRVEgPSAwLApAQCAtMTExOCw2ICsxMTQ2LDEzIEBACiAJV0xBTl9CQUNLX1RJTUVSID0gMiwKIH07CiAKKy8qIFNBIFF1ZXJ5IGFjdGlvbiAqLworZW51bSBpZWVlODAyMTFfc2FfcXVlcnlfYWN0aW9uIHsKKwlXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVFVRVNUID0gMCwKKwlXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVNQT05TRSA9IDEsCit9OworCisKIC8qIEEtTVNEVSA4MDIuMTFuICovCiAjZGVmaW5lIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCAweDAwODAKIApAQCAtMTEyOCw2ICsxMTYzLDcgQEAKIC8qIHJlc2VydmVkOiAJCQkJMHgwMDBGQUMwMyAqLwogI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QCQkweDAwMEZBQzA0CiAjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNAkweDAwMEZBQzA1CisjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDCTB4MDAwRkFDMDYKIAogI2RlZmluZSBXTEFOX01BWF9LRVlfTEVOCQkzMgogCkBAIC0xMTg1LDQgKzEyMjEsMTQ5IEBACiAJCXJldHVybiBoZHItPmFkZHIxOwogfQogCisvKioKKyAqIGllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZSAtIGNoZWNrIGlmIGZyYW1lIGlzIGEgcm9idXN0IG1hbmFnZW1lbnQgZnJhbWUKKyAqIEBoZHI6IHRoZSBmcmFtZSAoYnVmZmVyIG11c3QgaW5jbHVkZSBhdCBsZWFzdCB0aGUgZmlyc3Qgb2N0ZXQgb2YgcGF5bG9hZCkKKyAqLworc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCWlmIChpZWVlODAyMTFfaXNfZGlzYXNzb2MoaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCSAgICBpZWVlODAyMTFfaXNfZGVhdXRoKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiB0cnVlOworCisJaWYgKGllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQl1OCAqY2F0ZWdvcnk7CisKKwkJLyoKKwkJICogQWN0aW9uIGZyYW1lcywgZXhjbHVkaW5nIFB1YmxpYyBBY3Rpb24gZnJhbWVzLCBhcmUgUm9idXN0CisJCSAqIE1hbmFnZW1lbnQgRnJhbWVzLiBIb3dldmVyLCBpZiB3ZSBhcmUgbG9va2luZyBhdCBhIFByb3RlY3RlZAorCQkgKiBmcmFtZSwgc2tpcCB0aGUgY2hlY2sgc2luY2UgdGhlIGRhdGEgbWF5IGJlIGVuY3J5cHRlZCBhbmQKKwkJICogdGhlIGZyYW1lIGhhcyBhbHJlYWR5IGJlZW4gZm91bmQgdG8gYmUgYSBSb2J1c3QgTWFuYWdlbWVudAorCQkgKiBGcmFtZSAoYnkgdGhlIG90aGVyIGVuZCkuCisJCSAqLworCQlpZiAoaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJCXJldHVybiB0cnVlOworCQljYXRlZ29yeSA9ICgodTggKikgaGRyKSArIDI0OworCQlyZXR1cm4gKmNhdGVnb3J5ICE9IFdMQU5fQ0FURUdPUllfUFVCTElDOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZmhzc19jaGFuX3RvX2ZyZXEgLSBnZXQgY2hhbm5lbCBmcmVxdWVuY3kKKyAqIEBjaGFubmVsOiB0aGUgRkhTUyBjaGFubmVsCisgKgorICogQ29udmVydCBJRUVFODAyLjExIEZIU1MgY2hhbm5lbCB0byBmcmVxdWVuY3kgKE1IeikKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTQuNgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZmhzc19jaGFuX3RvX2ZyZXEoaW50IGNoYW5uZWwpCit7CisJaWYgKChjaGFubmVsID4gMSkgJiYgKGNoYW5uZWwgPCA5NikpCisJCXJldHVybiBjaGFubmVsICsgMjQwMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZnJlcV90b19maHNzX2NoYW4gLSBnZXQgY2hhbm5lbAorICogQGZyZXE6IHRoZSBjaGFubmVscyBmcmVxdWVuY3kKKyAqCisgKiBDb252ZXJ0IGZyZXF1ZW5jeSAoTUh6KSB0byBJRUVFODAyLjExIEZIU1MgY2hhbm5lbAorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNC42CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9mcmVxX3RvX2Zoc3NfY2hhbihpbnQgZnJlcSkKK3sKKwlpZiAoKGZyZXEgPiAyNDAxKSAmJiAoZnJlcSA8IDI0OTYpKQorCQlyZXR1cm4gZnJlcSAtIDI0MDA7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxIC0gZ2V0IGNoYW5uZWwgY2VudGVyIGZyZXF1ZW5jeQorICogQGNoYW5uZWw6IHRoZSBEU1NTIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgRFNTUyBjaGFubmVsIHRvIHRoZSBjZW50ZXIgZnJlcXVlbmN5IChNSHopLgorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNS42CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpbnQgY2hhbm5lbCkKK3sKKwlpZiAoKGNoYW5uZWwgPiAwKSAmJiAoY2hhbm5lbCA8IDE0KSkKKwkJcmV0dXJuIDI0MDcgKyAoY2hhbm5lbCAqIDUpOworCWVsc2UgaWYgKGNoYW5uZWwgPT0gMTQpCisJCXJldHVybiAyNDg0OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbiAtIGdldCBjaGFubmVsCisgKiBAZnJlcTogdGhlIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgRFNTUyBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE1LjYKKyAqCisgKiBUaGlzIHJvdXRpbmUgc2VsZWN0cyB0aGUgY2hhbm5lbCB3aXRoIHRoZSBjbG9zZXN0IGNlbnRlciBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihpbnQgZnJlcSkKK3sKKwlpZiAoKGZyZXEgPj0gMjQxMCkgJiYgKGZyZXEgPCAyNDc1KSkKKwkJcmV0dXJuIChmcmVxIC0gMjQwNSkgLyA1OworCWVsc2UgaWYgKChmcmVxID49IDI0ODIpICYmIChmcmVxIDwgMjQ4NykpCisJCXJldHVybiAxNDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyogQ29udmVydCBJRUVFODAyLjExIEhSIERTU1MgY2hhbm5lbCB0byBmcmVxdWVuY3kgKE1IeikgYW5kIGJhY2sKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTguNC42LjIKKyAqCisgKiBUaGUgY2hhbm5lbHMgYW5kIGZyZXF1ZW5jaWVzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBkZWZpbmVkIGZvciBEU1NTCisgKi8KKyNkZWZpbmUgaWVlZTgwMjExX2hyX2NoYW5fdG9fZnJlcShjaGFuKSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2hhbikKKyNkZWZpbmUgaWVlZTgwMjExX2ZyZXFfdG9faHJfY2hhbihmcmVxKSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZnJlcSkKKworLyogQ29udmVydCBJRUVFODAyLjExIEVSUCBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KSBhbmQgYmFjaworICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxOS40LjIKKyAqLworI2RlZmluZSBpZWVlODAyMTFfZXJwX2NoYW5fdG9fZnJlcShjaGFuKSBpZWVlODAyMTFfaHJfY2hhbl90b19mcmVxKGNoYW4pCisjZGVmaW5lIGllZWU4MDIxMV9mcmVxX3RvX2VycF9jaGFuKGZyZXEpIGllZWU4MDIxMV9mcmVxX3RvX2hyX2NoYW4oZnJlcSkKKworLyoqCisgKiBpZWVlODAyMTFfb2ZkbV9jaGFuX3RvX2ZyZXEgLSBnZXQgY2hhbm5lbCBjZW50ZXIgZnJlcXVlbmN5CisgKiBAc19mcmVxOiBzdGFydGluZyBmcmVxdWVuY3kgPT0gKGRvdENoYW5uZWxTdGFydGluZ0ZhY3Rvci8yKSBNSHoKKyAqIEBjaGFubmVsOiB0aGUgT0ZETSBjaGFubmVsCisgKgorICogQ29udmVydCBJRUVFODAyLjExIE9GRE0gY2hhbm5lbCB0byBjZW50ZXIgZnJlcXVlbmN5IChNSHopCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE3LjMuOC4zLjIKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX29mZG1fY2hhbl90b19mcmVxKGludCBzX2ZyZXEsIGludCBjaGFubmVsKQoreworCWlmICgoY2hhbm5lbCA+IDApICYmIChjaGFubmVsIDw9IDIwMCkgJiYKKwkgICAgKHNfZnJlcSA+PSA0MDAwKSkKKwkJcmV0dXJuIHNfZnJlcSArIChjaGFubmVsICogNSk7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2ZyZXFfdG9fb2ZkbV9jaGFubmVsIC0gZ2V0IGNoYW5uZWwKKyAqIEBzX2ZyZXE6IHN0YXJ0aW5nIGZyZXF1ZW5jeSA9PSAoZG90Q2hhbm5lbFN0YXJ0aW5nRmFjdG9yLzIpIE1IegorICogQGZyZXE6IHRoZSBmcmVxdWVuY3kKKyAqCisgKiBDb252ZXJ0IGZyZXF1ZW5jeSAoTUh6KSB0byBJRUVFODAyLjExIE9GRE0gY2hhbm5lbAorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNy4zLjguMy4yCisgKgorICogVGhpcyByb3V0aW5lIHNlbGVjdHMgdGhlIGNoYW5uZWwgd2l0aCB0aGUgY2xvc2VzdCBjZW50ZXIgZnJlcXVlbmN5LgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZnJlcV90b19vZmRtX2NoYW4oaW50IHNfZnJlcSwgaW50IGZyZXEpCit7CisJaWYgKChmcmVxID4gKHNfZnJlcSArIDIpKSAmJiAoZnJlcSA8PSAoc19mcmVxICsgMTIwMikpICYmCisJICAgIChzX2ZyZXEgPj0gNDAwMCkpCisJCXJldHVybiAoZnJlcSArIDIgLSBzX2ZyZXEpIC8gNTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKwogI2VuZGlmIC8qIExJTlVYX0lFRUU4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmLmggYi9pbmNsdWRlL2xpbnV4L2lmLmgKaW5kZXggMmE2ZTI5Ni4uMTEwOGYzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWYuaApAQCAtNjYsNiArNjYsNyBAQAogI2RlZmluZSBJRkZfU0xBVkVfTkVFREFSUCAweDQwCQkvKiBuZWVkIEFSUHMgZm9yIHZhbGlkYXRpb24JKi8KICNkZWZpbmUgSUZGX0lTQVRBUAkweDgwCQkvKiBJU0FUQVAgaW50ZXJmYWNlIChSRkM0MjE0KQkqLwogI2RlZmluZSBJRkZfTUFTVEVSX0FSUE1PTiAweDEwMAkJLyogYm9uZGluZyBtYXN0ZXIsIEFSUCBtb24gaW4gdXNlICovCisjZGVmaW5lIElGRl9XQU5fSERMQwkweDIwMAkJLyogV0FOIEhETEMgZGV2aWNlCQkqLwogCiAjZGVmaW5lIElGX0dFVF9JRkFDRQkweDAwMDEJCS8qIGZvciBxdWVyeWluZyBvbmx5ICovCiAjZGVmaW5lIElGX0dFVF9QUk9UTwkweDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmggYi9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCmluZGV4IDI3ZWEyYWMuLjA4MzVkZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaApAQCAtMTYsNiArMTYsNyBAQAogI2lmbmRlZiBfTElOVVhfSUZfQVJDTkVUX0gKICNkZWZpbmUgX0xJTlVYX0lGX0FSQ05FVF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKIApAQCAtNTcsMTAgKzU4LDEwIEBACiAgKi8KIHN0cnVjdCBhcmNfcmZjMTIwMQogewotICAgIHVpbnQ4X3QgIHByb3RvOwkJLyogcHJvdG9jb2wgSUQgZmllbGQgLSB2YXJpZXMJCSovCi0gICAgdWludDhfdCAgc3BsaXRfZmxhZzsJLyogZm9yIHVzZSB3aXRoIHNwbGl0IHBhY2tldHMJCSovCisgICAgX191OCAgcHJvdG87CQkvKiBwcm90b2NvbCBJRCBmaWVsZCAtIHZhcmllcwkJKi8KKyAgICBfX3U4ICBzcGxpdF9mbGFnOwkvKiBmb3IgdXNlIHdpdGggc3BsaXQgcGFja2V0cwkJKi8KICAgICBfX2JlMTYgICBzZXF1ZW5jZTsJCS8qIHNlcXVlbmNlIG51bWJlcgkJCSovCi0gICAgdWludDhfdCAgcGF5bG9hZFswXTsJLyogc3BhY2UgcmVtYWluaW5nIGluIHBhY2tldCAoNTA0IGJ5dGVzKSovCisgICAgX191OCAgcGF5bG9hZFswXTsJLyogc3BhY2UgcmVtYWluaW5nIGluIHBhY2tldCAoNTA0IGJ5dGVzKSovCiB9OwogI2RlZmluZSBSRkMxMjAxX0hEUl9TSVpFIDQKIApAQCAtNzAsOCArNzEsOCBAQAogICovCiBzdHJ1Y3QgYXJjX3JmYzEwNTEKIHsKLSAgICB1aW50OF90IHByb3RvOwkJLyogQVJDX1BfUkZDMTA1MV9BUlAvUkZDMTA1MV9JUAkqLwotICAgIHVpbnQ4X3QgcGF5bG9hZFswXTsJCS8qIDUwNyBieXRlcwkJCSovCisgICAgX191OCBwcm90bzsJCS8qIEFSQ19QX1JGQzEwNTFfQVJQL1JGQzEwNTFfSVAJKi8KKyAgICBfX3U4IHBheWxvYWRbMF07CQkvKiA1MDcgYnl0ZXMJCQkqLwogfTsKICNkZWZpbmUgUkZDMTA1MV9IRFJfU0laRSAxCiAKQEAgLTgyLDIwICs4MywyMCBAQAogICovCiBzdHJ1Y3QgYXJjX2V0aF9lbmNhcAogewotICAgIHVpbnQ4X3QgcHJvdG87CQkvKiBBbHdheXMgQVJDX1BfRVRIRVIJCQkqLworICAgIF9fdTggcHJvdG87CQkvKiBBbHdheXMgQVJDX1BfRVRIRVIJCQkqLwogICAgIHN0cnVjdCBldGhoZHIgZXRoOwkJLyogc3RhbmRhcmQgZXRoZXJuZXQgaGVhZGVyICh5dWNrISkJKi8KLSAgICB1aW50OF90IHBheWxvYWRbMF07CQkvKiA0OTMgYnl0ZXMJCQkJKi8KKyAgICBfX3U4IHBheWxvYWRbMF07CQkvKiA0OTMgYnl0ZXMJCQkJKi8KIH07CiAjZGVmaW5lIEVUSF9FTkNBUF9IRFJfU0laRSAxNAogCiAKIHN0cnVjdCBhcmNfY2FwCiB7Ci0JdWludDhfdCBwcm90bzsKLQl1aW50OF90IGNvb2tpZVtzaXplb2YoaW50KV07ICAgLyogQWN0dWFsbHkgTk9UIHNlbnQgb3ZlciB0aGUgbmV0d29yayAqLworCV9fdTggcHJvdG87CisJX191OCBjb29raWVbc2l6ZW9mKGludCldOyAgIC8qIEFjdHVhbGx5IE5PVCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgKi8KIAl1bmlvbiB7Ci0JCXVpbnQ4X3QgYWNrOwotCQl1aW50OF90IHJhd1swXTsJCS8qIDUwNyBieXRlcyAqLworCQlfX3U4IGFjazsKKwkJX191OCByYXdbMF07CQkvKiA1MDcgYnl0ZXMgKi8KIAl9IG1lczsKIH07CiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogICovCiBzdHJ1Y3QgYXJjX2hhcmR3YXJlCiB7Ci0gICAgdWludDhfdCAgc291cmNlLAkJLyogc291cmNlIEFSQ25ldCAtIGZpbGxlZCBpbiBhdXRvbWFnaWNhbGx5ICovCisgICAgX191OCAgc291cmNlLAkJLyogc291cmNlIEFSQ25ldCAtIGZpbGxlZCBpbiBhdXRvbWFnaWNhbGx5ICovCiAgICAgICAgICAgICAgZGVzdCwJCS8qIGRlc3RpbmF0aW9uIEFSQ25ldCAtIDAgZm9yIGJyb2FkY2FzdCAgICAqLwogICAgIAkgICAgIG9mZnNldFsyXTsJCS8qIG9mZnNldCBieXRlcyAoc29tZSB3ZWlyZCBzZW1hbnRpY3MpICAgICAqLwogfTsKQEAgLTEzMCw3ICsxMzEsNyBAQAogCXN0cnVjdCBhcmNfcmZjMTA1MSAgIHJmYzEwNTE7CiAJc3RydWN0IGFyY19ldGhfZW5jYXAgZXRoX2VuY2FwOwogCXN0cnVjdCBhcmNfY2FwICAgICAgIGNhcDsKLQl1aW50OF90IHJhd1swXTsJCS8qIDUwOCBieXRlcwkJCQkqLworCV9fdTggcmF3WzBdOwkJLyogNTA4IGJ5dGVzCQkJCSovCiAgICAgfSBzb2Z0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IDdmM2M3MzUuLjAyMTZlMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTE3LDcgKzE3LDcgQEAKICAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0gCisKICNpZm5kZWYgX0xJTlVYX0lGX0VUSEVSX0gKICNkZWZpbmUgX0xJTlVYX0lGX0VUSEVSX0gKIApAQCAtMjUsNyArMjUsNyBAQAogCiAvKgogICoJSUVFRSA4MDIuMyBFdGhlcm5ldCBtYWdpYyBjb25zdGFudHMuICBUaGUgZnJhbWUgc2l6ZXMgb21pdCB0aGUgcHJlYW1ibGUKLSAqCWFuZCBGQ1MvQ1JDIChmcmFtZSBjaGVjayBzZXF1ZW5jZSkuIAorICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4KICAqLwogCiAjZGVmaW5lIEVUSF9BTEVOCTYJCS8qIE9jdGV0cyBpbiBvbmUgZXRoZXJuZXQgYWRkcgkgKi8KQEAgLTgzLDcgKzgzLDcgQEAKIC8qCiAgKglOb24gRElYIHR5cGVzLiBXb24ndCBjbGFzaCBmb3IgMTUwMCB0eXBlcy4KICAqLwotIAorCiAjZGVmaW5lIEVUSF9QXzgwMl8zCTB4MDAwMQkJLyogRHVtbXkgdHlwZSBmb3IgODAyLjMgZnJhbWVzICAqLwogI2RlZmluZSBFVEhfUF9BWDI1CTB4MDAwMgkJLyogRHVtbXkgcHJvdG9jb2wgaWQgZm9yIEFYLjI1ICAqLwogI2RlZmluZSBFVEhfUF9BTEwJMHgwMDAzCQkvKiBFdmVyeSBwYWNrZXQgKGJlIGNhcmVmdWwhISEpICovCkBAIC0xMDksNyArMTA5LDcgQEAKIC8qCiAgKglUaGlzIGlzIGFuIEV0aGVybmV0IGZyYW1lIGhlYWRlci4KICAqLwotIAorCiBzdHJ1Y3QgZXRoaGRyIHsKIAl1bnNpZ25lZCBjaGFyCWhfZGVzdFtFVEhfQUxFTl07CS8qIGRlc3RpbmF0aW9uIGV0aCBhZGRyCSovCiAJdW5zaWduZWQgY2hhcgloX3NvdXJjZVtFVEhfQUxFTl07CS8qIHNvdXJjZSBldGhlciBhZGRyCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmggYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKaW5kZXggYzdhNjY4OC4uM2ExNGIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaApAQCAtMjYsNyArMjYsNyBAQAogICovCiBzdHJ1Y3QgcHBwb2wydHBfYWRkcgogewotCXBpZF90CXBpZDsJCQkvKiBwaWQgdGhhdCBvd25zIHRoZSBmZC4KKwlfX2tlcm5lbF9waWRfdAlwaWQ7CQkvKiBwaWQgdGhhdCBvd25zIHRoZSBmZC4KIAkJCQkJICogMCA9PiBjdXJyZW50ICovCiAJaW50CWZkOwkJCS8qIEZEIG9mIFVEUCBzb2NrZXQgdG8gdXNlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAppbmRleCAzMGM4OGIyLi45MGI1ZmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCkBAIC05NSwxNiArOTUsMTYgQEAKIH0gX19hdHRyaWJ1dGUgKChwYWNrZWQpKTsKIAogLyogVGFnIGlkZW50aWZpZXJzICovCi0jZGVmaW5lIFBUVF9FT0wJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAwKQotI2RlZmluZSBQVFRfU1JWX05BTUUJX19jb25zdGFudF9odG9ucygweDAxMDEpCi0jZGVmaW5lIFBUVF9BQ19OQU1FCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAyKQotI2RlZmluZSBQVFRfSE9TVF9VTklRCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAzKQotI2RlZmluZSBQVFRfQUNfQ09PS0lFCV9fY29uc3RhbnRfaHRvbnMoMHgwMTA0KQotI2RlZmluZSBQVFRfVkVORE9SIAlfX2NvbnN0YW50X2h0b25zKDB4MDEwNSkKLSNkZWZpbmUgUFRUX1JFTEFZX1NJRAlfX2NvbnN0YW50X2h0b25zKDB4MDExMCkKLSNkZWZpbmUgUFRUX1NSVl9FUlIgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMjAxKQotI2RlZmluZSBQVFRfU1lTX0VSUiAgCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAyKQotI2RlZmluZSBQVFRfR0VOX0VSUiAgCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAzKQorI2RlZmluZSBQVFRfRU9MCQlfX2NwdV90b19iZTE2KDB4MDAwMCkKKyNkZWZpbmUgUFRUX1NSVl9OQU1FCV9fY3B1X3RvX2JlMTYoMHgwMTAxKQorI2RlZmluZSBQVFRfQUNfTkFNRQlfX2NwdV90b19iZTE2KDB4MDEwMikKKyNkZWZpbmUgUFRUX0hPU1RfVU5JUQlfX2NwdV90b19iZTE2KDB4MDEwMykKKyNkZWZpbmUgUFRUX0FDX0NPT0tJRQlfX2NwdV90b19iZTE2KDB4MDEwNCkKKyNkZWZpbmUgUFRUX1ZFTkRPUiAJX19jcHVfdG9fYmUxNigweDAxMDUpCisjZGVmaW5lIFBUVF9SRUxBWV9TSUQJX19jcHVfdG9fYmUxNigweDAxMTApCisjZGVmaW5lIFBUVF9TUlZfRVJSICAgICBfX2NwdV90b19iZTE2KDB4MDIwMSkKKyNkZWZpbmUgUFRUX1NZU19FUlIgIAlfX2NwdV90b19iZTE2KDB4MDIwMikKKyNkZWZpbmUgUFRUX0dFTl9FUlIgIAlfX2NwdV90b19iZTE2KDB4MDIwMykKIAogc3RydWN0IHBwcG9lX2hkciB7CiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaAppbmRleCA4NTI5ZjU3Li4wNDlkNmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKQEAgLTQ2LDYgKzQ2LDggQEAKICNkZWZpbmUgVFVOU0VUT0ZGTE9BRCAgX0lPVygnVCcsIDIwOCwgdW5zaWduZWQgaW50KQogI2RlZmluZSBUVU5TRVRUWEZJTFRFUiBfSU9XKCdUJywgMjA5LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFRVTkdFVElGRiAgICAgIF9JT1IoJ1QnLCAyMTAsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVFVOR0VUU05EQlVGICAgX0lPUignVCcsIDIxMSwgaW50KQorI2RlZmluZSBUVU5TRVRTTkRCVUYgICBfSU9XKCdUJywgMjEyLCBpbnQpCiAKIC8qIFRVTlNFVElGRiBpZnIgZmxhZ3MgKi8KICNkZWZpbmUgSUZGX1RVTgkJMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaAppbmRleCA4MmM0MzYyNC4uNWE5YWFlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCkBAIC0xNiwxNCArMTYsMTQgQEAKICNkZWZpbmUgU0lPQ0RFTFBSTCAgICAgIChTSU9DREVWUFJJVkFURSArIDYpCiAjZGVmaW5lIFNJT0NDSEdQUkwgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA3KQogCi0jZGVmaW5lIEdSRV9DU1VNCV9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKQotI2RlZmluZSBHUkVfUk9VVElORwlfX2NvbnN0YW50X2h0b25zKDB4NDAwMCkKLSNkZWZpbmUgR1JFX0tFWQkJX19jb25zdGFudF9odG9ucygweDIwMDApCi0jZGVmaW5lIEdSRV9TRVEJCV9fY29uc3RhbnRfaHRvbnMoMHgxMDAwKQotI2RlZmluZSBHUkVfU1RSSUNUCV9fY29uc3RhbnRfaHRvbnMoMHgwODAwKQotI2RlZmluZSBHUkVfUkVDCQlfX2NvbnN0YW50X2h0b25zKDB4MDcwMCkKLSNkZWZpbmUgR1JFX0ZMQUdTCV9fY29uc3RhbnRfaHRvbnMoMHgwMEY4KQotI2RlZmluZSBHUkVfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNykKKyNkZWZpbmUgR1JFX0NTVU0JX19jcHVfdG9fYmUxNigweDgwMDApCisjZGVmaW5lIEdSRV9ST1VUSU5HCV9fY3B1X3RvX2JlMTYoMHg0MDAwKQorI2RlZmluZSBHUkVfS0VZCQlfX2NwdV90b19iZTE2KDB4MjAwMCkKKyNkZWZpbmUgR1JFX1NFUQkJX19jcHVfdG9fYmUxNigweDEwMDApCisjZGVmaW5lIEdSRV9TVFJJQ1QJX19jcHVfdG9fYmUxNigweDA4MDApCisjZGVmaW5lIEdSRV9SRUMJCV9fY3B1X3RvX2JlMTYoMHgwNzAwKQorI2RlZmluZSBHUkVfRkxBR1MJX19jcHVfdG9fYmUxNigweDAwRjgpCisjZGVmaW5lIEdSRV9WRVJTSU9OCV9fY3B1X3RvX2JlMTYoMHgwMDA3KQogCiBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0KIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW1hLmggYi9pbmNsdWRlL2xpbnV4L2ltYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMmFhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ltYS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSUJNIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSU1BX0gKKyNkZWZpbmUgX0xJTlVYX0lNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorc3RydWN0IGxpbnV4X2JpbnBybTsKKworI2lmZGVmIENPTkZJR19JTUEKK2V4dGVybiBpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CitleHRlcm4gaW50IGltYV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiB2b2lkIGltYV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spOworZXh0ZXJuIHZvaWQgaW1hX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CitleHRlcm4gaW50IGltYV9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCk7CitleHRlcm4gdm9pZCBpbWFfc2htX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlKTsKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hX2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWFfc2htX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybjsKK30KKyNlbmRpZiAvKiBDT05GSUdfSU1BX0ggKi8KKyNlbmRpZiAvKiBfTElOVVhfSU1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW42LmggYi9pbmNsdWRlL2xpbnV4L2luNi5oCmluZGV4IGJjNDkyMDQuLjcxOGJmMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW42LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbjYuaApAQCAtNDQsMTEgKzQ0LDExIEBACiAgKiBOT1RFOiBCZSBhd2FyZSB0aGUgSU42QUREUl8qIGNvbnN0YW50cyBhbmQgaW42YWRkcl8qIGV4dGVybmFscyBhcmUgZGVmaW5lZAogICogaW4gbmV0d29yayBieXRlIG9yZGVyLCBub3QgaW4gaG9zdCBieXRlIG9yZGVyIGFzIGFyZSB0aGUgSVB2NCBlcXVpdmFsZW50cwogICovCisjaWZkZWYgX19LRVJORUxfXwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsKICNkZWZpbmUgSU42QUREUl9BTllfSU5JVCB7IHsgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0gfSB9CiBleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9vcGJhY2s7CiAjZGVmaW5lIElONkFERFJfTE9PUEJBQ0tfSU5JVCB7IHsgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxIH0gfSB9Ci0jaWZkZWYgX19LRVJORUxfXwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xpbmtsb2NhbF9hbGxub2RlczsKICNkZWZpbmUgSU42QUREUl9MSU5LTE9DQUxfQUxMTk9ERVNfSU5JVAlcCiAJCXsgeyB7IDB4ZmYsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEgfSB9IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKaW5kZXggMDZmY2RiNC4uYWNlZjJhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKQEAgLTEwOCw2ICsxMDgsNyBAQAogI2RlZmluZSBJTl9ERVZfQVJQRklMVEVSKGluX2RldikJSU5fREVWX09SQ09ORigoaW5fZGV2KSwgQVJQRklMVEVSKQogI2RlZmluZSBJTl9ERVZfQVJQX0FOTk9VTkNFKGluX2RldikJSU5fREVWX01BWENPTkYoKGluX2RldiksIEFSUF9BTk5PVU5DRSkKICNkZWZpbmUgSU5fREVWX0FSUF9JR05PUkUoaW5fZGV2KQlJTl9ERVZfTUFYQ09ORigoaW5fZGV2KSwgQVJQX0lHTk9SRSkKKyNkZWZpbmUgSU5fREVWX0FSUF9OT1RJRlkoaW5fZGV2KQlJTl9ERVZfTUFYQ09ORigoaW5fZGV2KSwgQVJQX05PVElGWSkKIAogc3RydWN0IGluX2lmYWRkcgogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggZTc1MmQ5Ny4uYWYxZGU5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJLm5yX2NwdXNfYWxsb3dlZCA9IE5SX0NQVVMsCQkJCVwKIAl9LAkJCQkJCQkJXAogCS50YXNrcwkJPSBMSVNUX0hFQURfSU5JVCh0c2sudGFza3MpLAkJCVwKKwkucHVzaGFibGVfdGFza3MgPSBQTElTVF9OT0RFX0lOSVQodHNrLnB1c2hhYmxlX3Rhc2tzLCBNQVhfUFJJTyksIFwKIAkucHRyYWNlZAk9IExJU1RfSEVBRF9JTklUKHRzay5wdHJhY2VkKSwJCQlcCiAJLnB0cmFjZV9lbnRyeQk9IExJU1RfSEVBRF9JTklUKHRzay5wdHJhY2VfZW50cnkpLAkJXAogCS5yZWFsX3BhcmVudAk9ICZ0c2ssCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDEyNDlhMGMuLjZiMjgwNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTY2MSw2ICs2NjEsNyBAQAogI2RlZmluZSBTV19ET0NLCQkJMHgwNSAgLyogc2V0ID0gcGx1Z2dlZCBpbnRvIGRvY2sgKi8KICNkZWZpbmUgU1dfTElORU9VVF9JTlNFUlQJMHgwNiAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KICNkZWZpbmUgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQgMHgwNyAgLyogc2V0ID0gbWVjaGFuaWNhbCBzd2l0Y2ggc2V0ICovCisjZGVmaW5lIFNXX1ZJREVPT1VUX0lOU0VSVAkweDA4ICAvKiBzZXQgPSBpbnNlcnRlZCAqLwogI2RlZmluZSBTV19NQVgJCQkweDBmCiAjZGVmaW5lIFNXX0NOVAkJCShTV19NQVgrMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggOTEyN2Y2Yi4uOTE2NThkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC02MSw2ICs2MSwxNyBAQAogCiB0eXBlZGVmIGlycXJldHVybl90ICgqaXJxX2hhbmRsZXJfdCkoaW50LCB2b2lkICopOwogCisvKioKKyAqIHN0cnVjdCBpcnFhY3Rpb24gLSBwZXIgaW50ZXJydXB0IGFjdGlvbiBkZXNjcmlwdG9yCisgKiBAaGFuZGxlcjoJaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24KKyAqIEBmbGFnczoJZmxhZ3MgKHNlZSBJUlFGXyogYWJvdmUpCisgKiBAbWFzazoJbm8gY29tbWVudCBhcyBpdCBpcyB1c2VsZXNzIGFuZCBhYm91dCB0byBiZSByZW1vdmVkCisgKiBAbmFtZToJbmFtZSBvZiB0aGUgZGV2aWNlCisgKiBAZGV2X2lkOgljb29raWUgdG8gaWRlbnRpZnkgdGhlIGRldmljZQorICogQG5leHQ6CXBvaW50ZXIgdG8gdGhlIG5leHQgaXJxYWN0aW9uIGZvciBzaGFyZWQgaW50ZXJydXB0cworICogQGlycToJaW50ZXJydXB0IG51bWJlcgorICogQGRpcjoJcG9pbnRlciB0byB0aGUgcHJvYy9pcnEvTk4vbmFtZSBlbnRyeQorICovCiBzdHJ1Y3QgaXJxYWN0aW9uIHsKIAlpcnFfaGFuZGxlcl90IGhhbmRsZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ2Miw2ICs0NzMsMTIgQEAKIH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19IQVJESVJRUykgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfU0hJUlEpCitleHRlcm4gdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkgeyB9CisjZW5kaWYKKwogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpOwogCiBzdHJ1Y3QgaXJxX2Rlc2M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwX3ZzLmggYi9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKaW5kZXggMGY0MzRhMi4uMTQ4MjY1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBfdnMuaApAQCAtOTYsMTAgKzk2LDEwIEBACiAgKi8KIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXIgewogCS8qIHZpcnR1YWwgc2VydmljZSBhZGRyZXNzZXMgKi8KLQl1X2ludDE2X3QJCXByb3RvY29sOworCV9fdTE2CQlwcm90b2NvbDsKIAlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBpcCBhZGRyZXNzICovCiAJX19iZTE2CQkJcG9ydDsKLQl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCisJX191MzIJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiB2aXJ0dWFsIHNlcnZpY2Ugb3B0aW9ucyAqLwogCWNoYXIJCQlzY2hlZF9uYW1lW0lQX1ZTX1NDSEVETkFNRV9NQVhMRU5dOwpAQCAtMTE5LDggKzExOSw4IEBACiAJaW50CQkJd2VpZ2h0OwkJLyogZGVzdGluYXRpb24gd2VpZ2h0ICovCiAKIAkvKiB0aHJlc2hvbGRzIGZvciBhY3RpdmUgY29ubmVjdGlvbnMgKi8KLQl1X2ludDMyX3QJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KLQl1X2ludDMyX3QJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLworCV9fdTMyCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCiB9OwogCiAKQEAgLTE1OSwxMCArMTU5LDEwIEBACiAvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX1NFUlZJQ0UgKi8KIHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5IHsKIAkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCi0JdV9pbnQxNl90CQlwcm90b2NvbDsKKwlfX3UxNgkJcHJvdG9jb2w7CiAJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyAqLwogCV9fYmUxNgkJCXBvcnQ7Ci0JdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogc2VydmljZSBvcHRpb25zICovCiAJY2hhcgkJCXNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CkBAIC0xODQsMTIgKzE4NCwxMiBAQAogCXVuc2lnbmVkCQljb25uX2ZsYWdzOwkvKiBjb25uZWN0aW9uIGZsYWdzICovCiAJaW50CQkJd2VpZ2h0OwkJLyogZGVzdGluYXRpb24gd2VpZ2h0ICovCiAKLQl1X2ludDMyX3QJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KLQl1X2ludDMyX3QJCWxfdGhyZXNob2xkOwkvKiBsb3dlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJdV90aHJlc2hvbGQ7CS8qIHVwcGVyIHRocmVzaG9sZCAqLworCV9fdTMyCQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCiAKLQl1X2ludDMyX3QJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KLQl1X2ludDMyX3QJCWluYWN0Y29ubnM7CS8qIGluYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQlwZXJzaXN0Y29ubnM7CS8qIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJYWN0aXZlY29ubnM7CS8qIGFjdGl2ZSBjb25uZWN0aW9ucyAqLworCV9fdTMyCQlpbmFjdGNvbm5zOwkvKiBpbmFjdGl2ZSBjb25uZWN0aW9ucyAqLworCV9fdTMyCQlwZXJzaXN0Y29ubnM7CS8qIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgKi8KIAogCS8qIHN0YXRpc3RpY3MgKi8KIAlzdHJ1Y3QgaXBfdnNfc3RhdHNfdXNlciBzdGF0czsKQEAgLTE5OSwxMCArMTk5LDEwIEBACiAvKiBUaGUgYXJndW1lbnQgdG8gSVBfVlNfU09fR0VUX0RFU1RTICovCiBzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzIHsKIAkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCi0JdV9pbnQxNl90CQlwcm90b2NvbDsKKwlfX3UxNgkJcHJvdG9jb2w7CiAJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyAqLwogCV9fYmUxNgkJCXBvcnQ7Ci0JdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogbnVtYmVyIG9mIHJlYWwgc2VydmVycyAqLwogCXVuc2lnbmVkIGludAkJbnVtX2Rlc3RzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggZjg5OWI1MC4uNmRiOTM5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0xNjAsMTIgKzE2MCwxMCBAQAogICovCiBzdHJ1Y3QgaXJxX2Rlc2MgewogCXVuc2lnbmVkIGludAkJaXJxOwotI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCiAJc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnRpbWVyX3JhbmRfc3RhdGU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgKmtzdGF0X2lycXM7Ci0jIGlmZGVmIENPTkZJR19JTlRSX1JFTUFQCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgICAgICAqaXJxXzJfaW9tbXU7Ci0jIGVuZGlmCiAjZW5kaWYKIAlpcnFfZmxvd19oYW5kbGVyX3QJaGFuZGxlX2lycTsKIAlzdHJ1Y3QgaXJxX2NoaXAJCSpjaGlwOwpAQCAtMjAyLDEyICsyMDAsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXTsKICNlbHNlIC8qIENPTkZJR19TUEFSU0VfSVJRICovCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICptb3ZlX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIGludCBjcHUpOwotCi0jZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoREVTQykgXAotCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKLSNkZWZpbmUga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycW5vLCBERVNDKSBcCi0JKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKyspCi0KICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFX0lSUSAqLwogCiBleHRlcm4gc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzY19hbGxvY19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CkBAIC0yMjYsNyArMjE4LDYgQEAKICAqIE1pZ3JhdGlvbiBoZWxwZXJzIGZvciBvYnNvbGV0ZSBuYW1lcywgdGhleSB3aWxsIGdvIGF3YXk6CiAgKi8KICNkZWZpbmUgaHdfaW50ZXJydXB0X3R5cGUJaXJxX2NoaXAKLXR5cGVkZWYgc3RydWN0IGlycV9jaGlwCQlod19pcnFfY29udHJvbGxlcjsKICNkZWZpbmUgbm9faXJxX3R5cGUJCW5vX2lycV9jaGlwCiB0eXBlZGVmIHN0cnVjdCBpcnFfZGVzYwkJaXJxX2Rlc2NfdDsKIApAQCAtMjM2LDYgKzIyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogCiBleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3QpOwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIApAQCAtMjgwLDcgKzI3Miw3IEBACiB9CiAKIC8qIEhhbmRsZSBpcnEgYWN0aW9uIGNoYWluczogKi8KLWV4dGVybiBpbnQgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworZXh0ZXJuIGlycXJldHVybl90IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAogLyoKICAqIEJ1aWx0LWluIElSUSBoYW5kbGVycyBmb3IgdmFyaW91cyBJUlEgdHlwZXMsCkBAIC0zMjUsNyArMzE3LDcgQEAKIAogLyogSGFuZGxpbmcgb2YgdW5oYW5kbGVkIGFuZCBzcHVyaW91cyBpbnRlcnJ1cHRzOiAqLwogZXh0ZXJuIHZvaWQgbm90ZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAotCQkJICAgaW50IGFjdGlvbl9yZXQpOworCQkJICAgaXJxcmV0dXJuX3QgYWN0aW9uX3JldCk7CiAKIC8qIFJlc2VuZGluZyBvZiBpbnRlcnJ1cHRzIDoqLwogdm9pZCBjaGVja19pcnFfcmVzZW5kKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycW5yLmggYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKaW5kZXggODZhZjkyZS4uNTJlYmJiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFuci5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxbnIuaApAQCAtMjgsMTMgKzI4LDE3IEBACiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCQkJCQlcCiAJZm9yIChpcnEgPSAwLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsgaXJxIDwgbnJfaXJxczsJCVwKIAkgICAgIGlycSsrLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKSkJCQkJXAotCQlpZiAoZGVzYykKKwkJaWYgKCFkZXNjKQkJCQkJCVwKKwkJCTsJCQkJCQlcCisJCWVsc2UKIAogCiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGlycSwgZGVzYykJCQkJXAogCWZvciAoaXJxID0gbnJfaXJxcyAtIDEsIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOyBpcnEgPj0gMDsJXAogCSAgICAgaXJxLS0sIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpKQkJCQlcCi0JCWlmIChkZXNjKQorCQlpZiAoIWRlc2MpCQkJCQkJXAorCQkJOwkJCQkJCVwKKwkJZWxzZQogCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaCBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKaW5kZXggODgxODgzYy4uYzU1ODRjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCkBAIC0xLDI1ICsxLDE3IEBACi0vKiBpcnFyZXR1cm4uaCAqLwogI2lmbmRlZiBfTElOVVhfSVJRUkVUVVJOX0gKICNkZWZpbmUgX0xJTlVYX0lSUVJFVFVSTl9ICiAKLS8qCi0gKiBGb3IgMi40LnggY29tcGF0aWJpbGl0eSwgMi40LnggY2FuIHVzZQotICoKLSAqCXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKLSAqCSNkZWZpbmUgSVJRX05PTkUKLSAqCSNkZWZpbmUgSVJRX0hBTkRMRUQKLSAqCSNkZWZpbmUgSVJRX1JFVFZBTCh4KQotICoKLSAqIFRvIG1peCBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBpcnEgaGFuZGxlciByZXR1cm5zLgotICoKLSAqIElSUV9OT05FIG1lYW5zIHdlIGRpZG4ndCBoYW5kbGUgaXQuCi0gKiBJUlFfSEFORExFRCBtZWFucyB0aGF0IHdlIGRpZCBoYXZlIGEgdmFsaWQgaW50ZXJydXB0IGFuZCBoYW5kbGVkIGl0LgotICogSVJRX1JFVFZBTCh4KSBzZWxlY3RzIG9uIHRoZSB0d28gZGVwZW5kaW5nIG9uIHggYmVpbmcgbm9uLXplcm8gKGZvciBoYW5kbGVkKQorLyoqCisgKiBlbnVtIGlycXJldHVybgorICogQElSUV9OT05FCQlpbnRlcnJ1cHQgd2FzIG5vdCBmcm9tIHRoaXMgZGV2aWNlCisgKiBASVJRX0hBTkRMRUQJCWludGVycnVwdCB3YXMgaGFuZGxlZCBieSB0aGlzIGRldmljZQogICovCi10eXBlZGVmIGludCBpcnFyZXR1cm5fdDsKK2VudW0gaXJxcmV0dXJuIHsKKwlJUlFfTk9ORSwKKwlJUlFfSEFORExFRCwKK307CiAKLSNkZWZpbmUgSVJRX05PTkUJKDApCi0jZGVmaW5lIElSUV9IQU5ETEVECSgxKQotI2RlZmluZSBJUlFfUkVUVkFMKHgpCSgoeCkgIT0gMCkKK3R5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CisjZGVmaW5lIElSUV9SRVRWQUwoeCkJKCh4KSAhPSBJUlFfTk9ORSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oIGIvaW5jbHVkZS9saW51eC9pdnR2ZmIuaAppbmRleCBlMjBhZjQ3Li45ZDg4YjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKQEAgLTMzLDYgKzMzLDYgQEAKIH07CiAKICNkZWZpbmUgSVZUVkZCX0lPQ19ETUFfRlJBTUUgCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2ZmJfZG1hX2ZyYW1lKQotI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgdV9pbnQzMl90KQorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMi5oIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCmluZGV4IGRhNzIwYmMuLjJiMzJkNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamZmczIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpZm5kZWYgX19MSU5VWF9KRkZTMl9IX18KICNkZWZpbmUgX19MSU5VWF9KRkZTMl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogLyogWW91IG11c3QgaW5jbHVkZSBzb21ldGhpbmcgd2hpY2ggZGVmaW5lcyB0aGUgQzk5IHVpbnRYWF90IHR5cGVzLiAKQEAgLTkxLDE1ICs5MiwxNSBAQAogICAgYnl0ZXN3YXBwaW5nICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCB2MzI7CisJX191MzIgdjMyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqaW50MzJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG07CisJX191MzIgbTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgam1vZGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQxNl90IHYxNjsKKwlfX3UxNiB2MTY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGppbnQxNl90OwogCiBzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlCkBAIC0xMjEsMTIgKzEyMiwxMiBAQAogCWppbnQzMl90IHZlcnNpb247CiAJamludDMyX3QgaW5vOyAvKiA9PSB6ZXJvIGZvciB1bmxpbmsgKi8KIAlqaW50MzJfdCBtY3RpbWU7Ci0JdWludDhfdCBuc2l6ZTsKLQl1aW50OF90IHR5cGU7Ci0JdWludDhfdCB1bnVzZWRbMl07CisJX191OCBuc2l6ZTsKKwlfX3U4IHR5cGU7CisJX191OCB1bnVzZWRbMl07CiAJamludDMyX3Qgbm9kZV9jcmM7CiAJamludDMyX3QgbmFtZV9jcmM7Ci0JdWludDhfdCBuYW1lWzBdOworCV9fdTggbmFtZVswXTsKIH07CiAKIC8qIFRoZSBKRkZTMiByYXcgaW5vZGUgc3RydWN0dXJlOiBVc2VkIGZvciBzdG9yYWdlIG9uIHBoeXNpY2FsIG1lZGlhLiAgKi8KQEAgLTE1MywxMiArMTU0LDEyIEBACiAJamludDMyX3Qgb2Zmc2V0OyAgICAgLyogV2hlcmUgdG8gYmVnaW4gdG8gd3JpdGUuICAqLwogCWppbnQzMl90IGNzaXplOyAgICAgIC8qIChDb21wcmVzc2VkKSBkYXRhIHNpemUgKi8KIAlqaW50MzJfdCBkc2l6ZTsJICAgICAvKiBTaXplIG9mIHRoZSBub2RlJ3MgZGF0YS4gKGFmdGVyIGRlY29tcHJlc3Npb24pICovCi0JdWludDhfdCBjb21wcjsgICAgICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgKi8KLQl1aW50OF90IHVzZXJjb21wcjsgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCisJX191OCBjb21wcjsgICAgICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgKi8KKwlfX3U4IHVzZXJjb21wcjsgICAvKiBDb21wcmVzc2lvbiBhbGdvcml0aG0gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyICovCiAJamludDE2X3QgZmxhZ3M7CSAgICAgLyogU2VlIEpGRlMyX0lOT19GTEFHXyogKi8KIAlqaW50MzJfdCBkYXRhX2NyYzsgICAvKiBDUkMgZm9yIHRoZSAoY29tcHJlc3NlZCkgZGF0YS4gICovCiAJamludDMyX3Qgbm9kZV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgcmF3IGlub2RlIChleGNsdWRpbmcgZGF0YSkgICovCi0JdWludDhfdCBkYXRhWzBdOworCV9fdTggZGF0YVswXTsKIH07CiAKIHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgewpAQCAtMTY4LDEyICsxNjksMTIgQEAKIAlqaW50MzJfdCBoZHJfY3JjOwogCWppbnQzMl90IHhpZDsJCS8qIFhBVFRSIGlkZW50aWZpZXIgbnVtYmVyICovCiAJamludDMyX3QgdmVyc2lvbjsKLQl1aW50OF90IHhwcmVmaXg7Ci0JdWludDhfdCBuYW1lX2xlbjsKKwlfX3U4IHhwcmVmaXg7CisJX191OCBuYW1lX2xlbjsKIAlqaW50MTZfdCB2YWx1ZV9sZW47CiAJamludDMyX3QgZGF0YV9jcmM7CiAJamludDMyX3Qgbm9kZV9jcmM7Ci0JdWludDhfdCBkYXRhWzBdOworCV9fdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBqZmZzMl9yYXdfeHJlZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggN2ZhMzcxOC4uOTE0OTE4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVjaGVjay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvZHluYW1pY19kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAKQEAgLTM1OCw5ICszNTgsMTAgQEAKICNpZiBkZWZpbmVkKERFQlVHKQogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgXAogCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQotI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorLyogZHluYW1pY19wcl9kZWJ1ZygpIHVzZXMgcHJfZm10KCkgaW50ZXJuYWxseSBzbyB3ZSBkb24ndCBuZWVkIGl0IGhlcmUgKi8KICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIGRvIHsgXAotCWR5bmFtaWNfcHJfZGVidWcocHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pOyBcCisJZHluYW1pY19wcl9kZWJ1ZyhmbXQsICMjX19WQV9BUkdTX18pOyBcCiAJfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggNTcwZDIwNC4uMGM4Yjg5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMjgsNyArMjgsNyBAQAogCiBzdHJ1Y3Qga2VybmVsX3N0YXQgewogCXN0cnVjdCBjcHVfdXNhZ2Vfc3RhdAljcHVzdGF0OwotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogICAgICAgIHVuc2lnbmVkIGludCBpcnFzW05SX0lSUVNdOwogI2VuZGlmCiB9OwpAQCAtNDEsNyArNDEsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5yX2NvbnRleHRfc3dpdGNoZXModm9pZCk7CiAKLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKICNkZWZpbmUga3N0YXRfaXJxc190aGlzX2NwdShpcnEpIFwKIAkoa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKQogCkBAIC01MiwxNiArNTIsMTkgQEAKIHsKIAlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKIH0KLSNlbmRpZgogCi0KLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCiB7CiAgICAgICAgcmV0dXJuIGtzdGF0X2NwdShjcHUpLmlycXNbaXJxXTsKIH0KICNlbHNlCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiBleHRlcm4gdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOworI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KERFU0MpIFwKKwkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0pCisjZGVmaW5lIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnFubywgREVTQykgXAorCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSsrKQorCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdC5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKaW5kZXggNTQzN2FjMC4uNThhZThlMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva29iamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC02OCwxMCArNjgsMTMgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdGVfaW5fc3lzZnM6MTsKIAl1bnNpZ25lZCBpbnQgc3RhdGVfYWRkX3VldmVudF9zZW50OjE7CiAJdW5zaWduZWQgaW50IHN0YXRlX3JlbW92ZV91ZXZlbnRfc2VudDoxOworCXVuc2lnbmVkIGludCB1ZXZlbnRfc3VwcHJlc3M6MTsKIH07CiAKIGV4dGVybiBpbnQga29iamVjdF9zZXRfbmFtZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqbmFtZSwgLi4uKQogCQkJICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkgIHZhX2xpc3QgdmFyZ3MpOwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmtvYmplY3RfbmFtZShjb25zdCBzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtLmggYi9pbmNsdWRlL2xpbnV4L2t2bS5oCmluZGV4IDA0MjQzMjZmLi4zMTFhMDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtLmgKQEAgLTQ4LDcgKzQ4LDEwIEBACiAJICogRm9yIElBLTY0IChBUElDIG1vZGVsKSBJT0FQSUMwOiBpcnEgMC0yMzsgSU9BUElDMTogaXJxIDI0LTQ3Li4KIAkgKiBGb3IgWDg2IChzdGFuZGFyZCBBVCBtb2RlKSBQSUMwLzE6IGlycSAwLTE1LiBJT0FQSUMwOiAwLTIzLi4KIAkgKi8KLQlfX3UzMiBpcnE7CisJdW5pb24geworCQlfX3UzMiBpcnE7CisJCV9fczMyIHN0YXR1czsKKwl9OwogCV9fdTMyIGxldmVsOwogfTsKIApAQCAtMTI2LDYgKzEyOSw3IEBACiAJCQlfX3U2NCBkYXRhX29mZnNldDsgLyogcmVsYXRpdmUgdG8ga3ZtX3J1biBzdGFydCAqLwogCQl9IGlvOwogCQlzdHJ1Y3QgeworCQkJc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggYXJjaDsKIAkJfSBkZWJ1ZzsKIAkJLyogS1ZNX0VYSVRfTU1JTyAqLwogCQlzdHJ1Y3QgewpAQCAtMjE3LDIxICsyMjEsNiBAQAogCV9fdTMyIGlycTsKIH07CiAKLXN0cnVjdCBrdm1fYnJlYWtwb2ludCB7Ci0JX191MzIgZW5hYmxlZDsKLQlfX3UzMiBwYWRkaW5nOwotCV9fdTY0IGFkZHJlc3M7Ci19OwotCi0vKiBmb3IgS1ZNX0RFQlVHX0dVRVNUICovCi1zdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0IHsKLQkvKiBpbnQgKi8KLQlfX3UzMiBlbmFibGVkOwotCV9fdTMyIHBhZDsKLQlzdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgYnJlYWtwb2ludHNbNF07Ci0JX191MzIgc2luZ2xlc3RlcDsKLX07Ci0KIC8qIGZvciBLVk1fR0VUX0RJUlRZX0xPRyAqLwogc3RydWN0IGt2bV9kaXJ0eV9sb2cgewogCV9fdTMyIHNsb3Q7CkBAIC0yOTIsNiArMjgxLDE3IEBACiAJX191NjQgcGFybTY0OwogfTsKIAorLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KKworI2RlZmluZSBLVk1fR1VFU1REQkdfRU5BQkxFCQkweDAwMDAwMDAxCisjZGVmaW5lIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQCQkweDAwMDAwMDAyCisKK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgeworCV9fdTMyIGNvbnRyb2w7CisJX191MzIgcGFkOworCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCBhcmNoOworfTsKKwogI2RlZmluZSBLVk1fVFJDX1NISUZUICAgICAgICAgICAxNgogLyoKICAqIGt2bSB0cmFjZSBjYXRlZ29yaWVzCkBAIC0zOTYsNiArMzk2LDU3IEBACiAjaWZkZWYgX19LVk1fSEFWRV9VU0VSX05NSQogI2RlZmluZSBLVk1fQ0FQX1VTRVJfTk1JIDIyCiAjZW5kaWYKKyNpZmRlZiBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCisjZGVmaW5lIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHIDIzCisjZW5kaWYKKyNpZmRlZiBfX0tWTV9IQVZFX1BJVAorI2RlZmluZSBLVk1fQ0FQX1JFSU5KRUNUX0NPTlRST0wgMjQKKyNlbmRpZgorI2lmZGVmIF9fS1ZNX0hBVkVfSU9BUElDCisjZGVmaW5lIEtWTV9DQVBfSVJRX1JPVVRJTkcgMjUKKyNlbmRpZgorI2RlZmluZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTIDI2CisjaWZkZWYgX19LVk1fSEFWRV9ERVZJQ0VfQVNTSUdOTUVOVAorI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9ERUFTU0lHTk1FTlQgMjcKKyNlbmRpZgorCisjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORworCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgeworCV9fdTMyIGlycWNoaXA7CisJX191MzIgcGluOworfTsKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgeworCV9fdTMyIGFkZHJlc3NfbG87CisJX191MzIgYWRkcmVzc19oaTsKKwlfX3UzMiBkYXRhOworCV9fdTMyIHBhZDsKK307CisKKy8qIGdzaSByb3V0aW5nIGVudHJ5IHR5cGVzICovCisjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19JUlFDSElQIDEKKyNkZWZpbmUgS1ZNX0lSUV9ST1VUSU5HX01TSSAyCisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgeworCV9fdTMyIGdzaTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHBhZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCBpcnFjaGlwOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSBtc2k7CisJCV9fdTMyIHBhZFs4XTsKKwl9IHU7Cit9OworCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIHsKKwlfX3UzMiBucjsKKwlfX3UzMiBmbGFnczsKKwlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGVudHJpZXNbMF07Cit9OworCisjZW5kaWYKIAogLyoKICAqIGlvY3RscyBmb3IgVk0gZmRzCkBAIC00MjEsMTQgKzQ3MiwxOSBAQAogI2RlZmluZSBLVk1fQ1JFQVRFX1BJVAkJICBfSU8oS1ZNSU8sICAweDY0KQogI2RlZmluZSBLVk1fR0VUX1BJVAkJICBfSU9XUihLVk1JTywgMHg2NSwgc3RydWN0IGt2bV9waXRfc3RhdGUpCiAjZGVmaW5lIEtWTV9TRVRfUElUCQkgIF9JT1IoS1ZNSU8sICAweDY2LCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkKKyNkZWZpbmUgS1ZNX0lSUV9MSU5FX1NUQVRVUwkgIF9JT1dSKEtWTUlPLCAweDY3LCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCkKICNkZWZpbmUgS1ZNX1JFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIFwKIAkJCV9JT1coS1ZNSU8sICAweDY3LCBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUpCiAjZGVmaW5lIEtWTV9VTlJFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIFwKIAkJCV9JT1coS1ZNSU8sICAweDY4LCBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUpCiAjZGVmaW5lIEtWTV9BU1NJR05fUENJX0RFVklDRSBfSU9SKEtWTUlPLCAweDY5LCBcCiAJCQkJICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQorI2RlZmluZSBLVk1fU0VUX0dTSV9ST1VUSU5HICAgICAgIF9JT1coS1ZNSU8sIDB4NmEsIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcpCiAjZGVmaW5lIEtWTV9BU1NJR05fSVJRIF9JT1IoS1ZNSU8sIDB4NzAsIFwKIAkJCSAgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSkKKyNkZWZpbmUgS1ZNX1JFSU5KRUNUX0NPTlRST0wgICAgICBfSU8oS1ZNSU8sIDB4NzEpCisjZGVmaW5lIEtWTV9ERUFTU0lHTl9QQ0lfREVWSUNFIF9JT1coS1ZNSU8sIDB4NzIsIFwKKwkJCQkgICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldikKIAogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKQEAgLTQ0MCw3ICs0OTYsOCBAQAogI2RlZmluZSBLVk1fU0VUX1NSRUdTICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg0LCBzdHJ1Y3Qga3ZtX3NyZWdzKQogI2RlZmluZSBLVk1fVFJBTlNMQVRFICAgICAgICAgICAgIF9JT1dSKEtWTUlPLCAweDg1LCBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uKQogI2RlZmluZSBLVk1fSU5URVJSVVBUICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg2LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCkKLSNkZWZpbmUgS1ZNX0RFQlVHX0dVRVNUICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4Nywgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCkKKy8qIEtWTV9ERUJVR19HVUVTVCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgS1ZNX1NFVF9HVUVTVF9ERUJVRyBpbnN0ZWFkICovCisjZGVmaW5lIEtWTV9ERUJVR19HVUVTVCAgICAgICAgICAgX19LVk1fREVQUkVDQVRFRF9ERUJVR19HVUVTVAogI2RlZmluZSBLVk1fR0VUX01TUlMgICAgICAgICAgICAgIF9JT1dSKEtWTUlPLCAweDg4LCBzdHJ1Y3Qga3ZtX21zcnMpCiAjZGVmaW5lIEtWTV9TRVRfTVNSUyAgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODksIHN0cnVjdCBrdm1fbXNycykKICNkZWZpbmUgS1ZNX1NFVF9DUFVJRCAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4YSwgc3RydWN0IGt2bV9jcHVpZCkKQEAgLTQ2OSw2ICs1MjYsMjkgQEAKICNkZWZpbmUgS1ZNX1NFVF9NUF9TVEFURSAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg5OSwgc3RydWN0IGt2bV9tcF9zdGF0ZSkKIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTk1JICovCiAjZGVmaW5lIEtWTV9OTUkgICAgICAgICAgICAgICAgICAgX0lPKEtWTUlPLCAgMHg5YSkKKy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHICovCisjZGVmaW5lIEtWTV9TRVRfR1VFU1RfREVCVUcgICAgICAgX0lPVyhLVk1JTywgIDB4OWIsIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcpCisKKy8qCisgKiBEZXByZWNhdGVkIGludGVyZmFjZXMKKyAqLworc3RydWN0IGt2bV9icmVha3BvaW50IHsKKwlfX3UzMiBlbmFibGVkOworCV9fdTMyIHBhZGRpbmc7CisJX191NjQgYWRkcmVzczsKK307CisKK3N0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgeworCV9fdTMyIGVuYWJsZWQ7CisJX191MzIgcGFkOworCXN0cnVjdCBrdm1fYnJlYWtwb2ludCBicmVha3BvaW50c1s0XTsKKwlfX3UzMiBzaW5nbGVzdGVwOworfTsKKworI2RlZmluZSBfX0tWTV9ERVBSRUNBVEVEX0RFQlVHX0dVRVNUIF9JT1coS1ZNSU8sICAweDg3LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0KQorCisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLICAgX0lPUihLVk1JTywgIDB4OWEsIHZvaWQgKikKKyNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0sgICBfSU9XKEtWTUlPLCAgMHg5Yiwgdm9pZCAqKQogCiAjZGVmaW5lIEtWTV9UUkNfSU5KX1ZJUlEgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMikKICNkZWZpbmUgS1ZNX1RSQ19SRURFTElWRVJfRVZUICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAzKQpAQCAtNTIyLDYgKzYwMiw3IEBACiAKICNkZWZpbmUgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VCSgxIDw8IDApCiAKKyNkZWZpbmUgS1ZNX0RFVl9JUlFfQVNTSUdOX01TSV9BQ1RJT04JS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kKICNkZWZpbmUgS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kJKDEgPDwgMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYmY2ZjcwMy4uODk0YTU2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtMzcsNiArMzcsNyBAQAogI2RlZmluZSBLVk1fUkVRX1BFTkRJTkdfVElNRVIgICAgICA1CiAjZGVmaW5lIEtWTV9SRVFfVU5IQUxUICAgICAgICAgICAgIDYKICNkZWZpbmUgS1ZNX1JFUV9NTVVfU1lOQyAgICAgICAgICAgNworI2RlZmluZSBLVk1fUkVRX0tWTUNMT0NLX1VQREFURSAgICA4CiAKICNkZWZpbmUgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lECTAKIApAQCAtNzMsNyArNzQsNyBAQAogCXN0cnVjdCBrdm1fcnVuICpydW47CiAJaW50IGd1ZXN0X21vZGU7CiAJdW5zaWduZWQgbG9uZyByZXF1ZXN0czsKLQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIGd1ZXN0X2RlYnVnOworCXVuc2lnbmVkIGxvbmcgZ3Vlc3RfZGVidWc7CiAJaW50IGZwdV9hY3RpdmU7CiAJaW50IGd1ZXN0X2ZwdV9sb2FkZWQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CkBAIC0xMDcsNiArMTA4LDIwIEBACiAJaW50IHVzZXJfYWxsb2M7CiB9OwogCitzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSB7CisJdTMyIGdzaTsKKwlpbnQgKCpzZXQpKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGlycWNoaXA7CisJCQl1bnNpZ25lZCBwaW47CisJCX0gaXJxY2hpcDsKKwkJc3RydWN0IG1zaV9tc2cgbXNpOworCX07CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworfTsKKwogc3RydWN0IGt2bSB7CiAJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB2Y3B1cyBhcnJheSBhbmQgQVBJQyBhY2Nlc3NlcyAqLwogCXNwaW5sb2NrX3QgbW11X2xvY2s7CkBAIC0xMjcsNiArMTQyLDExIEBACiAJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19yaW5nICpjb2FsZXNjZWRfbW1pb19yaW5nOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCXN0cnVjdCBsaXN0X2hlYWQgaXJxX3JvdXRpbmc7IC8qIG9mIGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZCBtYXNrX25vdGlmaWVyX2xpc3Q7CisjZW5kaWYKKwogI2lmZGVmIEtWTV9BUkNIX1dBTlRfTU1VX05PVElGSUVSCiAJc3RydWN0IG1tdV9ub3RpZmllciBtbXVfbm90aWZpZXI7CiAJdW5zaWduZWQgbG9uZyBtbXVfbm90aWZpZXJfc2VxOwpAQCAtMjM3LDcgKzI1Nyw2IEBACiAJCQkJICAgaW50IHVzZXJfYWxsb2MpOwogbG9uZyBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJICAgICAgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpOwotdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KTsKQEAgLTI1NSw4ICsyNzQsOCBAQAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSk7CiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKTsKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKTsKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyk7CiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bik7CiAKIGludCBrdm1fYXJjaF9pbml0KHZvaWQgKm9wYXF1ZSk7CkBAIC0zMTAsNyArMzI5LDYgQEAKIAlpbnQgaG9zdF9pcnE7CiAJYm9vbCBob3N0X2lycV9kaXNhYmxlZDsKIAlpbnQgZ3Vlc3RfaXJxOwotCXN0cnVjdCBtc2lfbXNnIGd1ZXN0X21zaTsKICNkZWZpbmUgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYCSgxIDw8IDApCiAjZGVmaW5lIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJCSgxIDw8IDEpCiAjZGVmaW5lIEtWTV9BU1NJR05FRF9ERVZfSE9TVF9JTlRYCSgxIDw8IDgpCkBAIC0zMjEsOCArMzM5LDIxIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3Qga3ZtICprdm07CiB9Owotdm9pZCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwotdm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGdzaSk7CisKK3N0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgeworCXZvaWQgKCpmdW5jKShzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uLCBib29sIG1hc2tlZCk7CisJaW50IGlycTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaW5rOworfTsKKwordm9pZCBrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKTsKK3ZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pOwordm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGJvb2wgbWFzayk7CisKK2ludCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwordm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbik7CiB2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOwogdm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7CkBAIC00NjQsNCArNDk1LDIxIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisKKyNkZWZpbmUgS1ZNX01BWF9JUlFfUk9VVEVTIDEwMjQKKworaW50IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSk7CitpbnQga3ZtX3NldF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0sCisJCQljb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICplbnRyaWVzLAorCQkJdW5zaWduZWQgbnIsCisJCQl1bnNpZ25lZCBmbGFncyk7Cit2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pIHt9CisKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCmluZGV4IDliNmYzOTUuLjJiODMxOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaApAQCAtNDAsMTcgKzQwLDQgQEAKIAogdHlwZWRlZiBoZm5fdCBwZm5fdDsKIAotc3RydWN0IGt2bV9waW9fcmVxdWVzdCB7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKLQlpbnQgY3VyX2NvdW50OwotCXN0cnVjdCBwYWdlICpndWVzdF9wYWdlc1syXTsKLQl1bnNpZ25lZCBndWVzdF9wYWdlX29mZnNldDsKLQlpbnQgaW47Ci0JaW50IHBvcnQ7Ci0JaW50IHNpemU7Ci0JaW50IHN0cmluZzsKLQlpbnQgZG93bjsKLQlpbnQgcmVwOwotfTsKLQogI2VuZGlmIC8qIF9fS1ZNX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmggYi9pbmNsdWRlL2xpbnV4L2xhdGVuY3l0b3AuaAppbmRleCA5MDFjMmQ2Li5iMGU5OTg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xhdGVuY3l0b3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xhdGVuY3l0b3AuaApAQCAtOSw2ICs5LDcgQEAKICNpZm5kZWYgX0lOQ0xVREVfR1VBUkRfTEFURU5DWVRPUF9IXwogI2RlZmluZSBfSU5DTFVERV9HVUFSRF9MQVRFTkNZVE9QX0hfCiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2lmZGVmIENPTkZJR19MQVRFTkNZVE9QCiAKICNkZWZpbmUgTFRfU0FWRUNPVU5UCQkzMgpAQCAtMjQsNyArMjUsMTQgQEAKIAogc3RydWN0IHRhc2tfc3RydWN0OwogCi12b2lkIGFjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgdXNlY3MsIGludCBpbnRlcik7CitleHRlcm4gaW50IGxhdGVuY3l0b3BfZW5hYmxlZDsKK3ZvaWQgX19hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpOworc3RhdGljIGlubGluZSB2b2lkCithY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpCit7CisJaWYgKHVubGlrZWx5KGxhdGVuY3l0b3BfZW5hYmxlZCkpCisJCV9fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeSh0YXNrLCB1c2VjcywgaW50ZXIpOworfQogCiB2b2lkIGNsZWFyX2FsbF9sYXRlbmN5X3RyYWNpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggZGMxOGI4Ny4uNzYyNjJkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC03OTUsNiArNzk1LDcgQEAKIAlhdGFfcmVzZXRfZm5fdAkJcG1wX2hhcmRyZXNldDsKIAlhdGFfcG9zdHJlc2V0X2ZuX3QJcG1wX3Bvc3RyZXNldDsKIAl2b2lkICgqZXJyb3JfaGFuZGxlcikoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdm9pZCAoKmxvc3RfaW50ZXJydXB0KShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAl2b2lkICgqcG9zdF9pbnRlcm5hbF9jbWQpKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCiAJLyoKQEAgLTgzNiw2ICs4MzcsOCBAQAogCXZvaWQgKCpibWRtYV9zdGFydCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAJdm9pZCAoKmJtZG1hX3N0b3ApKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCXU4ICAgKCpibWRtYV9zdGF0dXMpKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCisJdm9pZCAoKmRyYWluX2ZpZm8pKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogI2VuZGlmIC8qIENPTkZJR19BVEFfU0ZGICovCiAKIAlzc2l6ZV90ICgqZW1fc2hvdykoc3RydWN0IGF0YV9wb3J0ICphcCwgY2hhciAqYnVmKTsKQEAgLTEwMDgsNiArMTAxMSw5IEBACiBleHRlcm4gaW50IGF0YV9jYWJsZV9pZ25vcmUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IGF0YV9jYWJsZV91bmtub3duKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCitleHRlcm4gdm9pZCBhdGFfcGlvX3F1ZXVlX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCAqZGF0YSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlbGF5KTsKKwogLyogVGltaW5nIGhlbHBlcnMgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3Bpb19uZWVkX2lvcmR5KGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICopOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdGFfdGltaW5nICphdGFfdGltaW5nX2ZpbmRfbW9kZSh1OCB4ZmVyX21vZGUpOwpAQCAtMTU3Miw2ICsxNTc4LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3NmZl9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJCQkgICAgICBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBhdGFfc2ZmX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOworZXh0ZXJuIHZvaWQgYXRhX3NmZl9sb3N0X2ludGVycnVwdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgYXRhX3NmZl90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfc2ZmX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CkBAIC0xNTg0LDYgKzE1OTEsNyBAQAogZXh0ZXJuIGludCBzYXRhX3NmZl9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwogZXh0ZXJuIHZvaWQgYXRhX3NmZl9wb3N0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOworZXh0ZXJuIHZvaWQgYXRhX3NmZl9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHZvaWQgYXRhX3NmZl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgYXRhX3NmZl9wb3N0X2ludGVybmFsX2NtZChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpbnQgYXRhX3NmZl9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sbV9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZDhmYTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9sbV9pbnRlcmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIF9fTE1fSU5URVJGQUNFX0RPVF9IX18KLSNkZWZpbmUgX19MTV9JTlRFUkZBQ0VfRE9UX0hfXwotCi0KLXR5cGVkZWYgdm9pZCAoKmxtX2NhbGxiYWNrX3QpICh2b2lkICpwdHIsIHVuc2lnbmVkIGludCB0eXBlLCB2b2lkICpkYXRhKTsKLQotLyoKLSAqIGxtX21vdW50KCkgZmxhZ3MKLSAqCi0gKiBMTV9NRkxBR19TUEVDVEFUT1IKLSAqIEdGUyBpcyBhc2tpbmcgdG8gam9pbiB0aGUgZmlsZXN5c3RlbSdzIGxvY2tzcGFjZSwgYnV0IGl0IGRvZXNuJ3Qgd2FudCB0bwotICogbW9kaWZ5IHRoZSBmaWxlc3lzdGVtLiAgVGhlIGxvY2sgbW9kdWxlIHNob3VsZG4ndCBhc3NpZ24gYSBqb3VybmFsIHRvIHRoZSBGUwotICogbW91bnQuICBJdCBzaG91bGRuJ3Qgc2VuZCByZWNvdmVyeSBjYWxsYmFja3MgdG8gdGhlIEZTIG1vdW50LiAgSWYgdGhlIG5vZGUKLSAqIGRpZXMgb3Igd2l0aGRyYXdzLCBhbGwgbG9ja3MgY2FuIGJlIHdpcGVkIGltbWVkaWF0ZWx5LgotICoKLSAqIExNX01GTEFHX0NPTlZfTk9EUk9QCi0gKiBEbyBub3QgYWxsb3cgdGhlIGRsbSB0byBpbnRlcm5hbGx5IHJlc29sdmUgY29udmVyc2lvbiBkZWFkbG9ja3MgYnkgZGVtb3RpbmcKLSAqIHRoZSBsb2NrIHRvIHVubG9ja2VkIGFuZCB0aGVuIHJlYWNxdWlyaW5nIGl0IGluIHRoZSByZXF1ZXN0ZWQgbW9kZS4gSW5zdGVhZCwKLSAqIGl0IHNob3VsZCBjYW5jZWwgdGhlIHJlcXVlc3QgYW5kIHJldHVybiBMTV9PVVRfQ09OVl9ERUFETEsuCi0gKi8KLQotI2RlZmluZSBMTV9NRkxBR19TUEVDVEFUT1IJMHgwMDAwMDAwMQotI2RlZmluZSBMTV9NRkxBR19DT05WX05PRFJPUAkweDAwMDAwMDAyCi0KLS8qCi0gKiBsbV9sb2Nrc3RydWN0IGZsYWdzCi0gKgotICogTE1fTFNGTEFHX0xPQ0FMCi0gKiBUaGUgbG9ja19ub2xvY2sgbW9kdWxlIHJldHVybnMgTE1fTFNGTEFHX0xPQ0FMIHRvIEdGUywgaW5kaWNhdGluZyB0aGF0IEdGUwotICogY2FuIG1ha2Ugc2luZ2xlLW5vZGUgb3B0aW1pemF0aW9ucy4KLSAqLwotCi0jZGVmaW5lIExNX0xTRkxBR19MT0NBTAkJMHgwMDAwMDAwMQotCi0vKgotICogbG1fbG9ja25hbWUgdHlwZXMKLSAqLwotCi0jZGVmaW5lIExNX1RZUEVfUkVTRVJWRUQJMHgwMAotI2RlZmluZSBMTV9UWVBFX05PTkRJU0sJCTB4MDEKLSNkZWZpbmUgTE1fVFlQRV9JTk9ERQkJMHgwMgotI2RlZmluZSBMTV9UWVBFX1JHUlAJCTB4MDMKLSNkZWZpbmUgTE1fVFlQRV9NRVRBCQkweDA0Ci0jZGVmaW5lIExNX1RZUEVfSU9QRU4JCTB4MDUKLSNkZWZpbmUgTE1fVFlQRV9GTE9DSwkJMHgwNgotI2RlZmluZSBMTV9UWVBFX1BMT0NLCQkweDA3Ci0jZGVmaW5lIExNX1RZUEVfUVVPVEEJCTB4MDgKLSNkZWZpbmUgTE1fVFlQRV9KT1VSTkFMCQkweDA5Ci0KLS8qCi0gKiBsbV9sb2NrKCkgc3RhdGVzCi0gKgotICogU0hBUkVEIGlzIGNvbXBhdGlibGUgd2l0aCBTSEFSRUQsIG5vdCB3aXRoIERFRkVSUkVEIG9yIEVYLgotICogREVGRVJSRUQgaXMgY29tcGF0aWJsZSB3aXRoIERFRkVSUkVELCBub3Qgd2l0aCBTSEFSRUQgb3IgRVguCi0gKi8KLQotI2RlZmluZSBMTV9TVF9VTkxPQ0tFRAkJMAotI2RlZmluZSBMTV9TVF9FWENMVVNJVkUJCTEKLSNkZWZpbmUgTE1fU1RfREVGRVJSRUQJCTIKLSNkZWZpbmUgTE1fU1RfU0hBUkVECQkzCi0KLS8qCi0gKiBsbV9sb2NrKCkgZmxhZ3MKLSAqCi0gKiBMTV9GTEFHX1RSWQotICogRG9uJ3Qgd2FpdCB0byBhY3F1aXJlIHRoZSBsb2NrIGlmIGl0IGNhbid0IGJlIGdyYW50ZWQgaW1tZWRpYXRlbHkuCi0gKgotICogTE1fRkxBR19UUllfMUNCCi0gKiBTZW5kIG9uZSBibG9ja2luZyBjYWxsYmFjayBpZiBUUlkgaXMgc2V0IGFuZCB0aGUgbG9jayBpcyBub3QgZ3JhbnRlZC4KLSAqCi0gKiBMTV9GTEFHX05PRVhQCi0gKiBHRlMgc2V0cyB0aGlzIGZsYWcgb24gbG9jayByZXF1ZXN0cyBpdCBtYWtlcyB3aGlsZSBkb2luZyBqb3VybmFsIHJlY292ZXJ5LgotICogVGhlc2Ugc3BlY2lhbCByZXF1ZXN0cyBzaG91bGQgbm90IGJlIGJsb2NrZWQgZHVlIHRvIHRoZSByZWNvdmVyeSBsaWtlCi0gKiBvcmRpbmFyeSBsb2NrcyB3b3VsZCBiZS4KLSAqCi0gKiBMTV9GTEFHX0FOWQotICogQSBTSEFSRUQgcmVxdWVzdCBtYXkgYWxzbyBiZSBncmFudGVkIGluIERFRkVSUkVELCBvciBhIERFRkVSUkVEIHJlcXVlc3QgbWF5Ci0gKiBhbHNvIGJlIGdyYW50ZWQgaW4gU0hBUkVELiAgVGhlIHByZWZlcnJlZCBzdGF0ZSBpcyB3aGljaGV2ZXIgaXMgY29tcGF0aWJsZQotICogd2l0aCBvdGhlciBncmFudGVkIGxvY2tzLCBvciB0aGUgc3BlY2lmaWVkIHN0YXRlIGlmIG5vIG90aGVyIGxvY2tzIGV4aXN0LgotICoKLSAqIExNX0ZMQUdfUFJJT1JJVFkKLSAqIE92ZXJyaWRlIGZhaXJuZXNzIGNvbnNpZGVyYXRpb25zLiAgU3VwcG9zZSBhIGxvY2sgaXMgaGVsZCBpbiBhIHNoYXJlZCBzdGF0ZQotICogYW5kIHRoZXJlIGlzIGEgcGVuZGluZyByZXF1ZXN0IGZvciB0aGUgZGVmZXJyZWQgc3RhdGUuICBBIHNoYXJlZCBsb2NrCi0gKiByZXF1ZXN0IHdpdGggdGhlIHByaW9yaXR5IGZsYWcgd291bGQgYmUgYWxsb3dlZCB0byBieXBhc3MgdGhlIGRlZmVycmVkCi0gKiByZXF1ZXN0IGFuZCBkaXJlY3RseSBqb2luIHRoZSBvdGhlciBzaGFyZWQgbG9jay4gIEEgc2hhcmVkIGxvY2sgcmVxdWVzdAotICogd2l0aG91dCB0aGUgcHJpb3JpdHkgZmxhZyBtaWdodCBiZSBmb3JjZWQgdG8gd2FpdCB1bnRpbCB0aGUgZGVmZXJyZWQKLSAqIHJlcXVlc3RlZCBoYWQgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIHRoZSBsb2NrLgotICovCi0KLSNkZWZpbmUgTE1fRkxBR19UUlkJCTB4MDAwMDAwMDEKLSNkZWZpbmUgTE1fRkxBR19UUllfMUNCCQkweDAwMDAwMDAyCi0jZGVmaW5lIExNX0ZMQUdfTk9FWFAJCTB4MDAwMDAwMDQKLSNkZWZpbmUgTE1fRkxBR19BTlkJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwCi0KLS8qCi0gKiBsbV9sb2NrKCkgYW5kIGxtX2FzeW5jX2NiIHJldHVybiBmbGFncwotICoKLSAqIExNX09VVF9TVF9NQVNLCi0gKiBNYXNrcyB0aGUgbG93ZXIgdHdvIGJpdHMgb2YgbG9jayBzdGF0ZSBpbiB0aGUgcmV0dXJuZWQgdmFsdWUuCi0gKgotICogTE1fT1VUX0NBQ0hFQUJMRQotICogVGhlIGxvY2sgaGFzbid0IGJlZW4gcmVsZWFzZWQgc28gR0ZTIGNhbiBjb250aW51ZSB0byBjYWNoZSBkYXRhIGZvciBpdC4KLSAqCi0gKiBMTV9PVVRfQ0FOQ0VMRUQKLSAqIFRoZSBsb2NrIHJlcXVlc3Qgd2FzIGNhbmNlbGVkLgotICoKLSAqIExNX09VVF9BU1lOQwotICogVGhlIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCB3aWxsIGJlIHJldHVybmVkIGluIGFuIExNX0NCX0FTWU5DIGNhbGxiYWNrLgotICoKLSAqIExNX09VVF9DT05WX0RFQURMSwotICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQgZG8gdG8gYSBjb252ZXJzaW9uIGRlYWRsb2NrLgotICovCi0KLSNkZWZpbmUgTE1fT1VUX1NUX01BU0sJCTB4MDAwMDAwMDMKLSNkZWZpbmUgTE1fT1VUX0NBTkNFTEVECQkweDAwMDAwMDA4Ci0jZGVmaW5lIExNX09VVF9BU1lOQwkJMHgwMDAwMDA4MAotI2RlZmluZSBMTV9PVVRfRVJST1IJCTB4MDAwMDAxMDAKLQotLyoKLSAqIGxtX2NhbGxiYWNrX3QgdHlwZXMKLSAqCi0gKiBMTV9DQl9ORUVEX0UgTE1fQ0JfTkVFRF9EIExNX0NCX05FRURfUwotICogQmxvY2tpbmcgY2FsbGJhY2ssIGEgcmVtb3RlIG5vZGUgaXMgcmVxdWVzdGluZyB0aGUgZ2l2ZW4gbG9jayBpbgotICogRVhDTFVTSVZFLCBERUZFUlJFRCwgb3IgU0hBUkVELgotICoKLSAqIExNX0NCX05FRURfUkVDT1ZFUlkKLSAqIFRoZSBnaXZlbiBqb3VybmFsIG5lZWRzIHRvIGJlIHJlY292ZXJlZC4KLSAqCi0gKiBMTV9DQl9BU1lOQwotICogVGhlIGdpdmVuIGxvY2sgaGFzIGJlZW4gZ3JhbnRlZC4KLSAqLwotCi0jZGVmaW5lIExNX0NCX05FRURfRQkJMjU3Ci0jZGVmaW5lIExNX0NCX05FRURfRAkJMjU4Ci0jZGVmaW5lIExNX0NCX05FRURfUwkJMjU5Ci0jZGVmaW5lIExNX0NCX05FRURfUkVDT1ZFUlkJMjYwCi0jZGVmaW5lIExNX0NCX0FTWU5DCQkyNjIKLQotLyoKLSAqIGxtX3JlY292ZXJ5X2RvbmUoKSBtZXNzYWdlcwotICovCi0KLSNkZWZpbmUgTE1fUkRfR0FWRVVQCQkzMDgKLSNkZWZpbmUgTE1fUkRfU1VDQ0VTUwkJMzA5Ci0KLQotc3RydWN0IGxtX2xvY2tuYW1lIHsKLQl1NjQgbG5fbnVtYmVyOwotCXVuc2lnbmVkIGludCBsbl90eXBlOwotfTsKLQotI2RlZmluZSBsbV9uYW1lX2VxdWFsKG5hbWUxLCBuYW1lMikgXAotCSgoKG5hbWUxKS0+bG5fbnVtYmVyID09IChuYW1lMiktPmxuX251bWJlcikgJiYgXAotCSAoKG5hbWUxKS0+bG5fdHlwZSA9PSAobmFtZTIpLT5sbl90eXBlKSkgXAotCi1zdHJ1Y3QgbG1fYXN5bmNfY2IgewotCXN0cnVjdCBsbV9sb2NrbmFtZSBsY19uYW1lOwotCWludCBsY19yZXQ7Ci19OwotCi1zdHJ1Y3QgbG1fbG9ja3N0cnVjdDsKLQotc3RydWN0IGxtX2xvY2tvcHMgewotCWNvbnN0IGNoYXIgKmxtX3Byb3RvX25hbWU7Ci0KLQkvKgotCSAqIE1vdW50L1VubW91bnQKLQkgKi8KLQotCWludCAoKmxtX21vdW50KSAoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJIGxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQkgdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJIHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopOwotCi0Jdm9pZCAoKmxtX290aGVyc19tYXlfbW91bnQpICh2b2lkICpsb2Nrc3BhY2UpOwotCi0Jdm9pZCAoKmxtX3VubW91bnQpICh2b2lkICpsb2Nrc3BhY2UpOwotCi0Jdm9pZCAoKmxtX3dpdGhkcmF3KSAodm9pZCAqbG9ja3NwYWNlKTsKLQotCS8qCi0JICogTG9jayBvcmllbnRlZCBvcGVyYXRpb25zCi0JICovCi0KLQlpbnQgKCpsbV9nZXRfbG9jaykgKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLCB2b2lkICoqbG9ja3ApOwotCi0Jdm9pZCAoKmxtX3B1dF9sb2NrKSAodm9pZCAqbG9jayk7Ci0KLQl1bnNpZ25lZCBpbnQgKCpsbV9sb2NrKSAodm9pZCAqbG9jaywgdW5zaWduZWQgaW50IGN1cl9zdGF0ZSwKLQkJCQkgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLQotCXVuc2lnbmVkIGludCAoKmxtX3VubG9jaykgKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpOwotCi0Jdm9pZCAoKmxtX2NhbmNlbCkgKHZvaWQgKmxvY2spOwotCi0JaW50ICgqbG1faG9sZF9sdmIpICh2b2lkICpsb2NrLCBjaGFyICoqbHZicCk7Ci0Jdm9pZCAoKmxtX3VuaG9sZF9sdmIpICh2b2lkICpsb2NrLCBjaGFyICpsdmIpOwotCi0JLyoKLQkgKiBQb3NpeCBMb2NrIG9yaWVudGVkIG9wZXJhdGlvbnMKLQkgKi8KLQotCWludCAoKmxtX3Bsb2NrX2dldCkgKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwotCi0JaW50ICgqbG1fcGxvY2spICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwotCi0JaW50ICgqbG1fcHVubG9jaykgKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLQotCS8qCi0JICogQ2xpZW50IG9yaWVudGVkIG9wZXJhdGlvbnMKLQkgKi8KLQotCXZvaWQgKCpsbV9yZWNvdmVyeV9kb25lKSAodm9pZCAqbG9ja3NwYWNlLCB1bnNpZ25lZCBpbnQgamlkLAotCQkJCSAgdW5zaWduZWQgaW50IG1lc3NhZ2UpOwotCi0Jc3RydWN0IG1vZHVsZSAqbG1fb3duZXI7Ci19OwotCi0vKgotICogbG1fbW91bnQoKSByZXR1cm4gdmFsdWVzCi0gKgotICogbHNfamlkIC0gdGhlIGpvdXJuYWwgSUQgdGhpcyBub2RlIHNob3VsZCB1c2UKLSAqIGxzX2ZpcnN0IC0gdGhpcyBub2RlIGlzIHRoZSBmaXJzdCB0byBtb3VudCB0aGUgZmlsZSBzeXN0ZW0KLSAqIGxzX2x2Yl9zaXplIC0gc2l6ZSBpbiBieXRlcyBvZiBsb2NrIHZhbHVlIGJsb2NrcwotICogbHNfbG9ja3NwYWNlIC0gbG9jayBtb2R1bGUncyBjb250ZXh0IGZvciB0aGlzIGZpbGUgc3lzdGVtCi0gKiBsc19vcHMgLSBsb2NrIG1vZHVsZSdzIGZ1bmN0aW9ucwotICogbHNfZmxhZ3MgLSBsb2NrIG1vZHVsZSBmZWF0dXJlcwotICovCi0KLXN0cnVjdCBsbV9sb2Nrc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgbHNfamlkOwotCXVuc2lnbmVkIGludCBsc19maXJzdDsKLQl1bnNpZ25lZCBpbnQgbHNfbHZiX3NpemU7Ci0Jdm9pZCAqbHNfbG9ja3NwYWNlOwotCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsc19vcHM7Ci0JaW50IGxzX2ZsYWdzOwotfTsKLQotLyoKLSAqIExvY2sgbW9kdWxlIGJvdHRvbSBpbnRlcmZhY2UuICBBIGxvY2sgbW9kdWxlIG1ha2VzIGl0c2VsZiBhdmFpbGFibGUgdG8gR0ZTCi0gKiB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotCi1pbnQgZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKTsKLXZvaWQgZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pOwotCi0vKgotICogTG9jayBtb2R1bGUgdG9wIGludGVyZmFjZS4gIEdGUyBjYWxscyB0aGVzZSBmdW5jdGlvbnMgd2hlbiBtb3VudGluZyBvcgotICogdW5tb3VudGluZyBhIGZpbGUgc3lzdGVtLgotICovCi0KLWludCBnZnMyX21vdW50X2xvY2twcm90byhjaGFyICpwcm90b19uYW1lLCBjaGFyICp0YWJsZV9uYW1lLCBjaGFyICpob3N0X2RhdGEsCi0JCQkgbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCSB1bnNpZ25lZCBpbnQgbWluX2x2Yl9zaXplLCBpbnQgZmxhZ3MsCi0JCQkgc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QsCi0JCQkgc3RydWN0IGtvYmplY3QgKmZza29iaik7Ci0KLXZvaWQgZ2ZzMl91bm1vdW50X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCk7Ci0KLXZvaWQgZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpOwotCi0jZW5kaWYgLyogX19MTV9JTlRFUkZBQ0VfRE9UX0hfXyAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlLmggYi9pbmNsdWRlL2xpbnV4L21hcGxlLmgKaW5kZXggYzIzZDNmNS4uZDlhNTFiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFwbGUuaApAQCAtOCwzMyArOCw0OSBAQAogCiAvKiBNYXBsZSBCdXMgY29tbWFuZCBhbmQgcmVzcG9uc2UgY29kZXMgKi8KIGVudW0gbWFwbGVfY29kZSB7Ci0JTUFQTEVfUkVTUE9OU0VfRklMRUVSUiA9IC01LAotCU1BUExFX1JFU1BPTlNFX0FHQUlOID0gLTQsCS8qIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJhbnNtaXR0ZWQgKi8KLQlNQVBMRV9SRVNQT05TRV9CQURDTUQgPSAtMywKLQlNQVBMRV9SRVNQT05TRV9CQURGVU5DID0gLTIsCi0JTUFQTEVfUkVTUE9OU0VfTk9ORSA9IC0xLAkvKiB1bml0IGRpZG4ndCByZXNwb25kIGF0IGFsbCAqLwotCU1BUExFX0NPTU1BTkRfREVWSU5GTyA9IDEsCi0JTUFQTEVfQ09NTUFORF9BTExJTkZPID0gMiwKLQlNQVBMRV9DT01NQU5EX1JFU0VUID0gMywKLQlNQVBMRV9DT01NQU5EX0tJTEwgPSA0LAotCU1BUExFX1JFU1BPTlNFX0RFVklORk8gPSA1LAotCU1BUExFX1JFU1BPTlNFX0FMTElORk8gPSA2LAotCU1BUExFX1JFU1BPTlNFX09LID0gNywKLQlNQVBMRV9SRVNQT05TRV9EQVRBVFJGID0gOCwKLQlNQVBMRV9DT01NQU5EX0dFVENPTkQgPSA5LAotCU1BUExFX0NPTU1BTkRfR0VUTUlORk8gPSAxMCwKLQlNQVBMRV9DT01NQU5EX0JSRUFEID0gMTEsCi0JTUFQTEVfQ09NTUFORF9CV1JJVEUgPSAxMiwKLQlNQVBMRV9DT01NQU5EX1NFVENPTkQgPSAxNAorCU1BUExFX1JFU1BPTlNFX0ZJTEVFUlIgPQktNSwKKwlNQVBMRV9SRVNQT05TRV9BR0FJTiwJLyogcmV0cmFuc21pdCAqLworCU1BUExFX1JFU1BPTlNFX0JBRENNRCwKKwlNQVBMRV9SRVNQT05TRV9CQURGVU5DLAorCU1BUExFX1JFU1BPTlNFX05PTkUsCS8qIHVuaXQgZGlkbid0IHJlc3BvbmQqLworCU1BUExFX0NPTU1BTkRfREVWSU5GTyA9CQkxLAorCU1BUExFX0NPTU1BTkRfQUxMSU5GTywKKwlNQVBMRV9DT01NQU5EX1JFU0VULAorCU1BUExFX0NPTU1BTkRfS0lMTCwKKwlNQVBMRV9SRVNQT05TRV9ERVZJTkZPLAorCU1BUExFX1JFU1BPTlNFX0FMTElORk8sCisJTUFQTEVfUkVTUE9OU0VfT0ssCisJTUFQTEVfUkVTUE9OU0VfREFUQVRSRiwKKwlNQVBMRV9DT01NQU5EX0dFVENPTkQsCisJTUFQTEVfQ09NTUFORF9HRVRNSU5GTywKKwlNQVBMRV9DT01NQU5EX0JSRUFELAorCU1BUExFX0NPTU1BTkRfQldSSVRFLAorCU1BUExFX0NPTU1BTkRfQlNZTkMsCisJTUFQTEVfQ09NTUFORF9TRVRDT05ELAorCU1BUExFX0NPTU1BTkRfTUlDQ09OVFJPTAorfTsKKworZW51bSBtYXBsZV9maWxlX2Vycm9ycyB7CisJTUFQTEVfRklMRUVSUl9JTlZBTElEX1BBUlRJVElPTiA9CTB4MDEwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9QSEFTRV9FUlJPUiA9CQkweDAyMDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfSU5WQUxJRF9CTE9DSyA9CQkweDA0MDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfV1JJVEVfRVJST1IgPQkJMHgwODAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX0lOVkFMSURfV1JJVEVfTEVOR1RIID0JMHgxMDAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX0JBRF9DUkMgPSAJCTB4MjAwMDAwMDAKK307CisKK3N0cnVjdCBtYXBsZV9idWZmZXIgeworCWNoYXIgYnVmeFsweDQwMF07CisJdm9pZCAqYnVmOwogfTsKIAogc3RydWN0IG1hcGxlcSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKmRldjsKLQl2b2lkICpzZW5kYnVmLCAqcmVjdmJ1ZiwgKnJlY3ZidWZkY3NwOworCXN0cnVjdCBtYXBsZV9idWZmZXIgKnJlY3ZidWY7CisJdm9pZCAqc2VuZGJ1ZiwgKnJlY3ZidWZfcDI7CiAJdW5zaWduZWQgY2hhciBsZW5ndGg7CiAJZW51bSBtYXBsZV9jb2RlIGNvbW1hbmQ7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwogfTsKIAogc3RydWN0IG1hcGxlX2RldmluZm8gewpAQCAtNTIsMTEgKzY4LDE1IEBACiAJc3RydWN0IG1hcGxlX2RyaXZlciAqZHJpdmVyOwogCXN0cnVjdCBtYXBsZXEgKm1xOwogCXZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCBtYXBsZXEgKiBtcSk7CisJdm9pZCAoKmZpbGVlcnJfaGFuZGxlcikoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1Zik7CisJaW50ICgqY2FuX3VubG9hZCkoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldik7CiAJdW5zaWduZWQgbG9uZyB3aGVuLCBpbnRlcnZhbCwgZnVuY3Rpb247CiAJc3RydWN0IG1hcGxlX2RldmluZm8gZGV2aW5mbzsKIAl1bnNpZ25lZCBjaGFyIHBvcnQsIHVuaXQ7CiAJY2hhciBwcm9kdWN0X25hbWVbMzJdOwogCWNoYXIgcHJvZHVjdF9saWNlbmNlWzY0XTsKKwlhdG9taWNfdCBidXN5OworCXdhaXRfcXVldWVfaGVhZF90IG1hcGxlX3dhaXQ7CiAJc3RydWN0IGRldmljZSBkZXY7CiB9OwogCkBAIC03Miw3ICs5Miw3IEBACiBpbnQgbWFwbGVfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBtYXBsZV9kcml2ZXIgKik7CiB2b2lkIG1hcGxlX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBtYXBsZV9kcml2ZXIgKik7CiAKLWludCBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCitpbnQgbWFwbGVfYWRkX3BhY2tldChzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCiAJdTMyIGNvbW1hbmQsIHUzMiBsZW5ndGgsIHZvaWQgKmRhdGEpOwogdm9pZCBtYXBsZV9jbGVhcl9kZXYoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaCBiL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaAppbmRleCA0MDRmNjc4Li4yMjAzMTIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCkBAIC0zNyw3ICszNyw3IEBACiAgIE1BVFJPWEZCX0NJRF9MQVNUCiB9OwogCi0jZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DCV9JT1coJ0YnLCAweDIwLCB1X2ludDMyX3QpCisjZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DCV9JT1coJ0YnLCAweDIwLCBfX3UzMikKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmgKaW5kZXggYWY5NWExZC4uZDg5OWRjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmgKQEAgLTQ5MCw2ICs0OTAsNyBAQAogLyoKICAqIFIyMzEgKDB4RTcpIC0gSmFjayBTdGF0dXMKICAqLworI2RlZmluZSBXTTgzNTBfSkFDS19MX0xWTAkJCTB4MDgwMAogI2RlZmluZSBXTTgzNTBfSkFDS19SX0xWTCAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCmluZGV4IGI2NjQwZTAuLmUwNmVkM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCkBAIC0xMTgxLDYgKzExODEsNyBAQAogI2RlZmluZSBXTTg0MDBfRkxMX09VVERJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfT1VURElWIC0gWzI6MF0gKi8KICNkZWZpbmUgV004NDAwX0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX09VVERJViAtIFsyOjBdICovCiAKK3N0cnVjdCB3bTg0MDA7CiB2b2lkIHdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUoc3RydWN0IHdtODQwMCAqd204NDAwKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvY21kLmggYi9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKaW5kZXggY2Y5YzY3OS4uMGY4MjI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaApAQCAtNTUsNiArNTUsNyBAQAogCU1MWDRfQ01EX0NMT1NFX1BPUlQJID0gMHhhLAogCU1MWDRfQ01EX1FVRVJZX0hDQQkgPSAweGIsCiAJTUxYNF9DTURfUVVFUllfUE9SVAkgPSAweDQzLAorCU1MWDRfQ01EX1NFTlNFX1BPUlQJID0gMHg0ZCwKIAlNTFg0X0NNRF9TRVRfUE9SVAkgPSAweGMsCiAJTUxYNF9DTURfQUNDRVNTX0REUgkgPSAweDJlLAogCU1MWDRfQ01EX01BUF9JQ00JID0gMHhmZmEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKaW5kZXggOGY2NTljYy4uM2FmZjhhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaApAQCAtMTU1LDggKzE1NSw5IEBACiB9OwogCiBlbnVtIG1seDRfcG9ydF90eXBlIHsKLQlNTFg0X1BPUlRfVFlQRV9JQgk9IDEgPDwgMCwKLQlNTFg0X1BPUlRfVFlQRV9FVEgJPSAxIDw8IDEsCisJTUxYNF9QT1JUX1RZUEVfSUIJPSAxLAorCU1MWDRfUE9SVF9UWVBFX0VUSAk9IDIsCisJTUxYNF9QT1JUX1RZUEVfQVVUTwk9IDMKIH07CiAKIGVudW0gbWx4NF9zcGVjaWFsX3ZsYW5faWR4IHsKQEAgLTIzNyw2ICsyMzgsNyBAQAogCWVudW0gbWx4NF9wb3J0X3R5cGUJcG9ydF90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CiAJdTgJCQlzdXBwb3J0ZWRfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOwogCXUzMgkJCXBvcnRfbWFzazsKKwllbnVtIG1seDRfcG9ydF90eXBlCXBvc3NpYmxlX3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIH07CiAKIHN0cnVjdCBtbHg0X2J1Zl9saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IGZkZTg2NjcuLjFiZjU5MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtNDU0LDQgKzQ1NCwxMyBAQAogCiAjZGVmaW5lIERNSV9NQVRDSChhLCBiKQl7IGEsIGIgfQogCisjZGVmaW5lIFBMQVRGT1JNX05BTUVfU0laRQkyMAorI2RlZmluZSBQTEFURk9STV9NT0RVTEVfUFJFRklYCSJwbGF0Zm9ybToiCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgeworCWNoYXIgbmFtZVtQTEFURk9STV9OQU1FX1NJWkVdOworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhCisJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7Cit9OworCiAjZW5kaWYgLyogTElOVVhfTU9EX0RFVklDRVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBjYWIyYTg1Li41MWY1NWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIE1OVF9OT0RJUkFUSU1FCTB4MTAKICNkZWZpbmUgTU5UX1JFTEFUSU1FCTB4MjAKICNkZWZpbmUgTU5UX1JFQURPTkxZCTB4NDAJLyogZG9lcyB0aGUgdXNlciB3YW50IHRoaXMgdG8gYmUgci9vPyAqLworI2RlZmluZSBNTlRfU1RSSUNUQVRJTUUgMHg4MAogCiAjZGVmaW5lIE1OVF9TSFJJTktBQkxFCTB4MTAwCiAjZGVmaW5lIE1OVF9JTUJBTEFOQ0VEX1dSSVRFX0NPVU5UCTB4MjAwIC8qIGp1c3QgZm9yIGRlYnVnZ2luZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKaW5kZXggOGE0NTU2OS4uMGQ0NWI0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0xOTMsNiArMTkzLDkgQEAKIHN0cnVjdCBtZmNfY2FjaGUgCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqbmV4dDsJCQkvKiBOZXh0IGVudHJ5IG9uIGNhY2hlIGxpbmUgCSovCisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKm1mY19uZXQ7CisjZW5kaWYKIAlfX2JlMzIgbWZjX21jYXN0Z3JwOwkJCS8qIEdyb3VwIHRoZSBlbnRyeSBiZWxvbmdzIHRvIAkqLwogCV9fYmUzMiBtZmNfb3JpZ2luOwkJCS8qIFNvdXJjZSBvZiBwYWNrZXQgCQkqLwogCXZpZmlfdCBtZmNfcGFyZW50OwkJCS8qIFNvdXJjZSBpbnRlcmZhY2UJCSovCkBAIC0yMTUsNiArMjE4LDE4IEBACiAJfSBtZmNfdW47CiB9OwogCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgbmV0ICptZmNfbmV0KGNvbnN0IHN0cnVjdCBtZmNfY2FjaGUgKm1mYykKK3sKKwlyZXR1cm4gcmVhZF9wbmV0KCZtZmMtPm1mY19uZXQpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIG1mY19uZXRfc2V0KHN0cnVjdCBtZmNfY2FjaGUgKm1mYywgc3RydWN0IG5ldCAqbmV0KQoreworCXdyaXRlX3BuZXQoJm1mYy0+bWZjX25ldCwgaG9sZF9uZXQobmV0KSk7Cit9CisKICNkZWZpbmUgTUZDX1NUQVRJQwkJMQogI2RlZmluZSBNRkNfTk9USUZZCQkyCiAKQEAgLTI0MSw3ICsyNTYsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IHJ0bXNnOwotZXh0ZXJuIGludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCk7CitleHRlcm4gaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAppbmRleCA1Mzc1ZmFjLi40M2RjOTdlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTY1LDcgKzY1LDcgQEAKIAltaWZpX3QJbWlmNmNfbWlmaTsJCS8qIEluZGV4IG9mIE1JRiAqLwogCXVuc2lnbmVkIGNoYXIgbWlmNmNfZmxhZ3M7CS8qIE1JRkZfIGZsYWdzICovCiAJdW5zaWduZWQgY2hhciB2aWZjX3RocmVzaG9sZDsJLyogdHRsIGxpbWl0ICovCi0JdV9zaG9ydAkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KKwlfX3UxNgkgbWlmNmNfcGlmaTsJCS8qIHRoZSBpbmRleCBvZiB0aGUgcGh5c2ljYWwgSUYgKi8KIAl1bnNpZ25lZCBpbnQgdmlmY19yYXRlX2xpbWl0OwkvKiBSYXRlIGxpbWl0ZXIgdmFsdWVzIChOSSkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmNwX25vLmggYi9pbmNsdWRlL2xpbnV4L25jcF9uby5oCmluZGV4IGY1NmE2OTYuLmNkZGFhNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmNwX25vLmgKKysrIGIvaW5jbHVkZS9saW51eC9uY3Bfbm8uaApAQCAtMiwxOCArMiwxOCBAQAogI2RlZmluZSBfTkNQX05PCiAKIC8qIHRoZXNlIGRlZmluZSB0aGUgYXR0cmlidXRlIGJ5dGUgYXMgc2VlbiBieSBOQ1AgKi8KLSNkZWZpbmUgYVJPTkxZCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSkpCi0jZGVmaW5lIGFISURERU4JCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigyKSkKLSNkZWZpbmUgYVNZU1RFTQkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDQpKQotI2RlZmluZSBhRVhFQ1VURQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoOCkpCi0jZGVmaW5lIGFESVIJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDEwKSkKLSNkZWZpbmUgYUFSQ0gJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDIwKSkKLSNkZWZpbmUgYVNIQVJFRAkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ODApKQotI2RlZmluZSBhRE9OVFNVQkFMTE9DQVRFCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxMSkpCi0jZGVmaW5lIGFUUkFOU0FDVElPTkFMCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTIpKQotI2RlZmluZSBhUFVSR0UJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTYpKQotI2RlZmluZSBhUkVOQU1FSU5ISUJJVAkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE3KSkKLSNkZWZpbmUgYURFTEVURUlOSElCSVQJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxOCkpCi0jZGVmaW5lIGFET05UQ09NUFJFU1MJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwyNykpCisjZGVmaW5lIGFST05MWQkJCShfX2NwdV90b19sZTMyKDEpKQorI2RlZmluZSBhSElEREVOCQkJKF9fY3B1X3RvX2xlMzIoMikpCisjZGVmaW5lIGFTWVNURU0JCQkoX19jcHVfdG9fbGUzMig0KSkKKyNkZWZpbmUgYUVYRUNVVEUJCShfX2NwdV90b19sZTMyKDgpKQorI2RlZmluZSBhRElSCQkJKF9fY3B1X3RvX2xlMzIoMHgxMCkpCisjZGVmaW5lIGFBUkNICQkJKF9fY3B1X3RvX2xlMzIoMHgyMCkpCisjZGVmaW5lIGFTSEFSRUQJCQkoX19jcHVfdG9fbGUzMigweDgwKSkKKyNkZWZpbmUgYURPTlRTVUJBTExPQ0FURQkoX19jcHVfdG9fbGUzMigxTDw8MTEpKQorI2RlZmluZSBhVFJBTlNBQ1RJT05BTAkJKF9fY3B1X3RvX2xlMzIoMUw8PDEyKSkKKyNkZWZpbmUgYVBVUkdFCQkJKF9fY3B1X3RvX2xlMzIoMUw8PDE2KSkKKyNkZWZpbmUgYVJFTkFNRUlOSElCSVQJCShfX2NwdV90b19sZTMyKDFMPDwxNykpCisjZGVmaW5lIGFERUxFVEVJTkhJQklUCQkoX19jcHVfdG9fbGUzMigxTDw8MTgpKQorI2RlZmluZSBhRE9OVENPTVBSRVNTCQkoX19jcHVfdG9fbGUzMigxTDw8MjcpKQogCiAjZW5kaWYgLyogX05DUF9OTyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKaW5kZXggODczMGQ1ZC4uMTJjOWRlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oCkBAIC0zMSw2ICszMSw3IEBACiAgKglOZWlnaGJvciBDYWNoZSBFbnRyeSBGbGFncwogICovCiAKKyNkZWZpbmUgTlRGX1VTRQkJMHgwMQogI2RlZmluZSBOVEZfUFJPWFkJMHgwOAkvKiA9PSBBVEZfUFVCTCAqLwogI2RlZmluZSBOVEZfUk9VVEVSCTB4ODAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggNDUxNWVmYS4uNGZjMmZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC0xMjksMTEgKzEyOSwxNSBAQAogCXNvY2tldF9zdGF0ZQkJc3RhdGU7CiAJc2hvcnQJCQl0eXBlOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCWNvbnN0IHN0cnVjdCBwcm90b19vcHMJKm9wczsKKwkvKgorCSAqIFBsZWFzZSBrZWVwIGZhc3luY19saXN0ICYgd2FpdCBmaWVsZHMgaW4gdGhlIHNhbWUgY2FjaGUgbGluZQorCSAqLwogCXN0cnVjdCBmYXN5bmNfc3RydWN0CSpmYXN5bmNfbGlzdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCiAJc3RydWN0IGZpbGUJCSpmaWxlOwogCXN0cnVjdCBzb2NrCQkqc2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKwljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CiB9OwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmggYi9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxN2ZiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fTkVUX0RST1BNT05fSAorI2RlZmluZSBfX05FVF9EUk9QTU9OX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKworc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50IHsKKwlfX3U4IHBjWzhdOworCV9fdTMyIGNvdW50OworfTsKKworI2RlZmluZSBORVRfRE1fQ0ZHX1ZFUlNJT04gIDAKKyNkZWZpbmUgTkVUX0RNX0NGR19BTEVSVF9DT1VOVCAgMQorI2RlZmluZSBORVRfRE1fQ0ZHX0FMRVJUX0RFTEFZIDIKKyNkZWZpbmUgTkVUX0RNX0NGR19NQVggMworCitzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19lbnRyeSB7CisJX191MzIgdHlwZTsKKwlfX3U2NCBkYXRhIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKK3N0cnVjdCBuZXRfZG1fY29uZmlnX21zZyB7CisJX191MzIgZW50cmllczsKKwlzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19lbnRyeSBvcHRpb25zWzBdOworfTsKKworc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgeworCV9fdTMyIGVudHJpZXM7CisJc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50IHBvaW50c1swXTsKK307CisKK3N0cnVjdCBuZXRfZG1fdXNlcl9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IG5ldF9kbV9jb25maWdfbXNnIHVzZXI7CisJCXN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnIGFsZXJ0OworCX0gdTsKK307CisKKworLyogVGhlc2UgYXJlIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgZm9yIHRoaXMgcHJvdG9jb2wgKi8KKworZW51bSB7CisJTkVUX0RNX0NNRF9VTlNQRUMgPSAwLAorCU5FVF9ETV9DTURfQUxFUlQsCisJTkVUX0RNX0NNRF9DT05GSUcsCisJTkVUX0RNX0NNRF9TVEFSVCwKKwlORVRfRE1fQ01EX1NUT1AsCisJX05FVF9ETV9DTURfTUFYLAorfTsKKworI2RlZmluZSBORVRfRE1fQ01EX01BWCAoX05FVF9ETV9DTURfTUFYIC0gMSkKKworLyoKKyAqIE91ciBncm91cCBpZGVudGlmaWVycworICovCisjZGVmaW5lIE5FVF9ETV9HUlBfQUxFUlQgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaCBiL2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjg1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIFVzZXJzcGFjZSBBUEkgZm9yIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgb2YgbmV0d29yayBwYWNrZXRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9ORVRfVElNRVNUQU1QSU5HX0gKKyNkZWZpbmUgX05FVF9USU1FU1RBTVBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+ICAgLyogZm9yIFNPX1RJTUVTVEFNUElORyAqLworCisvKiBTT19USU1FU1RBTVBJTkcgZ2V0cyBhbiBpbnRlZ2VyIGJpdCBmaWVsZCBjb21wcmlzZWQgb2YgdGhlc2UgdmFsdWVzICovCitlbnVtIHsKKwlTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFID0gKDE8PDApLAorCVNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgPSAoMTw8MSksCisJU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSA9ICgxPDwyKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFID0gKDE8PDMpLAorCVNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgPSAoMTw8NCksCisJU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgPSAoMTw8NSksCisJU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgPSAoMTw8NiksCisJU09GX1RJTUVTVEFNUElOR19NQVNLID0KKwkoU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgLSAxKSB8CisJU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUKK307CisKKy8qKgorICogc3RydWN0IGh3dHN0YW1wX2NvbmZpZyAtICVTSU9DU0hXVFNUQU1QIHBhcmFtZXRlcgorICoKKyAqIEBmbGFnczoJbm8gZmxhZ3MgZGVmaW5lZCByaWdodCBub3csIG11c3QgYmUgemVybworICogQHR4X3R5cGU6CW9uZSBvZiBIV1RTVEFNUF9UWF8qCisgKiBAcnhfdHlwZToJb25lIG9mIG9uZSBvZiBIV1RTVEFNUF9GSUxURVJfKgorICoKKyAqICVTSU9DU0hXVFNUQU1QIGV4cGVjdHMgYSAmc3RydWN0IGlmcmVxIHdpdGggYSBpZnJfZGF0YSBwb2ludGVyIHRvCisgKiB0aGlzIHN0cnVjdHVyZS4gZGV2X2lmc2lvYygpIGluIHRoZSBrZXJuZWwgdGFrZXMgY2FyZSBvZiB0aGUKKyAqIHRyYW5zbGF0aW9uIGJldHdlZW4gMzIgYml0IHVzZXJzcGFjZSBhbmQgNjQgYml0IGtlcm5lbC4gVGhlCisgKiBzdHJ1Y3R1cmUgaXMgaW50ZW50aW9uYWxseSBjaG9zZW4gc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgbGF5b3V0IG9uCisgKiAzMiBhbmQgNjQgYml0IHN5c3RlbXMsIGRvbid0IGJyZWFrIHRoaXMhCisgKi8KK3N0cnVjdCBod3RzdGFtcF9jb25maWcgeworCWludCBmbGFnczsKKwlpbnQgdHhfdHlwZTsKKwlpbnQgcnhfZmlsdGVyOworfTsKKworLyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctPnR4X3R5cGUgKi8KK2VudW0geworCS8qCisJICogTm8gb3V0Z29pbmcgcGFja2V0IHdpbGwgbmVlZCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nOworCSAqIHNob3VsZCBhIHBhY2tldCBhcnJpdmUgd2hpY2ggYXNrcyBmb3IgaXQsIG5vIGhhcmR3YXJlCisJICogdGltZSBzdGFtcGluZyB3aWxsIGJlIGRvbmUuCisJICovCisJSFdUU1RBTVBfVFhfT0ZGLAorCisJLyoKKwkgKiBFbmFibGVzIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgZm9yIG91dGdvaW5nIHBhY2tldHM7CisJICogdGhlIHNlbmRlciBvZiB0aGUgcGFja2V0IGRlY2lkZXMgd2hpY2ggYXJlIHRvIGJlCisJICogdGltZSBzdGFtcGVkIGJ5IHNldHRpbmcgJVNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUKKwkgKiBiZWZvcmUgc2VuZGluZyB0aGUgcGFja2V0LgorCSAqLworCUhXVFNUQU1QX1RYX09OLAorfTsKKworLyogcG9zc2libGUgdmFsdWVzIGZvciBod3RzdGFtcF9jb25maWctPnJ4X2ZpbHRlciAqLworZW51bSB7CisJLyogdGltZSBzdGFtcCBubyBpbmNvbWluZyBwYWNrZXQgYXQgYWxsICovCisJSFdUU1RBTVBfRklMVEVSX05PTkUsCisKKwkvKiB0aW1lIHN0YW1wIGFueSBpbmNvbWluZyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfQUxMLAorCisJLyogcmV0dXJuIHZhbHVlOiB0aW1lIHN0YW1wIGFsbCBwYWNrZXRzIHJlcXVlc3RlZCBwbHVzIHNvbWUgb3RoZXJzICovCisJSFdUU1RBTVBfRklMVEVSX1NPTUUsCisKKwkvKiBQVFAgdjEsIFVEUCwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9FVkVOVCwKKwkvKiBQVFAgdjEsIFVEUCwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkMsCisJLyogUFRQIHYxLCBVRFAsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUSwKKwkvKiBQVFAgdjIsIFVEUCwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVCwKKwkvKiBQVFAgdjIsIFVEUCwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkMsCisJLyogUFRQIHYyLCBVRFAsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0RFTEFZX1JFUSwKKworCS8qIDgwMi5BUzEsIEV0aGVybmV0LCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5ULAorCS8qIDgwMi5BUzEsIEV0aGVybmV0LCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfU1lOQywKKwkvKiA4MDIuQVMxLCBFdGhlcm5ldCwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfREVMQVlfUkVRLAorCisJLyogUFRQIHYyLzgwMi5BUzEsIGFueSBsYXllciwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVCwKKwkvKiBQVFAgdjIvODAyLkFTMSwgYW55IGxheWVyLCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQywKKwkvKiBQVFAgdjIvODAyLkFTMSwgYW55IGxheWVyLCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVEsCit9OworCisjZW5kaWYgLyogX05FVF9USU1FU1RBTVBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNjU5MzY2Ny4uYmUzZWJkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC05Niw3ICs5Niw3IEBACiAgKglDb21wdXRlIHRoZSB3b3JzdCBjYXNlIGhlYWRlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBwcm90b2NvbHMKICAqCXVzZWQuCiAgKi8KLSAKKwogI2lmIGRlZmluZWQoQ09ORklHX1dMQU5fODAyMTEpIHx8IGRlZmluZWQoQ09ORklHX0FYMjUpIHx8IGRlZmluZWQoQ09ORklHX0FYMjVfTU9EVUxFKQogIyBpZiBkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9NRVNIKQogIyAgZGVmaW5lIExMX01BWF9IRUFERVIgMTI4CkBAIC0xMjQsNyArMTI0LDcgQEAKICAqCU5ldHdvcmsgZGV2aWNlIHN0YXRpc3RpY3MuIEFraW4gdG8gdGhlIDIuMCBldGhlciBzdGF0cyBidXQKICAqCXdpdGggYnl0ZSBjb3VudGVycy4KICAqLwotIAorCiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwogewogCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsJCS8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQJKi8KQEAgLTI4NSw3ICsyODUsNyBAQAogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYXQgYm9vdCB0aW1lIGNvbmZpZ3VyZWQgbmV0ZGV2aWNlIHNldHRpbmdzLiBUaGV5Ci0gKiBhcmUgdGhlbiB1c2VkIGluIHRoZSBkZXZpY2UgcHJvYmluZy4gCisgKiBhcmUgdGhlbiB1c2VkIGluIHRoZSBkZXZpY2UgcHJvYmluZy4KICAqLwogc3RydWN0IG5ldGRldl9ib290X3NldHVwIHsKIAljaGFyIG5hbWVbSUZOQU1TSVpdOwpAQCAtMzE0LDYgKzMxNCw5IEBACiAJc3BpbmxvY2tfdAkJcG9sbF9sb2NrOwogCWludAkJCXBvbGxfb3duZXI7CiAjZW5kaWYKKworCXVuc2lnbmVkIGludAkJZ3JvX2NvdW50OworCiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWRldl9saXN0OwogCXN0cnVjdCBza19idWZmCQkqZ3JvX2xpc3Q7CkBAIC0zMjcsNiArMzMwLDE0IEBACiAJTkFQSV9TVEFURV9OUFNWQywJLyogTmV0cG9sbCAtIGRvbid0IGRlcXVldWUgZnJvbSBwb2xsX2xpc3QgKi8KIH07CiAKK2VudW0geworCUdST19NRVJHRUQsCisJR1JPX01FUkdFRF9GUkVFLAorCUdST19IRUxELAorCUdST19OT1JNQUwsCisJR1JPX0RST1AsCit9OworCiBleHRlcm4gdm9pZCBfX25hcGlfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKTsKIAogc3RhdGljIGlubGluZSBpbnQgbmFwaV9kaXNhYmxlX3BlbmRpbmcoc3RydWN0IG5hcGlfc3RydWN0ICpuKQpAQCAtNzQwLDcgKzc1MSw3IEBACiAJdm9pZAkJCSpkc2FfcHRyOwkvKiBkc2Egc3BlY2lmaWMgZGF0YSAqLwogI2VuZGlmCiAJdm9pZCAJCQkqYXRhbGtfcHRyOwkvKiBBcHBsZVRhbGsgbGluayAJKi8KLQl2b2lkCQkJKmlwX3B0cjsJLyogSVB2NCBzcGVjaWZpYyBkYXRhCSovICAKKwl2b2lkCQkJKmlwX3B0cjsJLyogSVB2NCBzcGVjaWZpYyBkYXRhCSovCiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKmRuX3B0cjsgICAgICAgIC8qIERFQ25ldCBzcGVjaWZpYyBkYXRhICovCiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKmlwNl9wdHI7ICAgICAgIC8qIElQdjYgc3BlY2lmaWMgZGF0YSAqLwogCXZvaWQJCQkqZWNfcHRyOwkvKiBFY29uZXQgc3BlY2lmaWMgZGF0YQkqLwpAQCAtNzUzLDcgKzc2NCw3IEBACiAgKi8KIAl1bnNpZ25lZCBsb25nCQlsYXN0X3J4OwkvKiBUaW1lIG9mIGxhc3QgUngJKi8KIAkvKiBJbnRlcmZhY2UgYWRkcmVzcyBpbmZvIHVzZWQgaW4gZXRoX3R5cGVfdHJhbnMoKSAqLwotCXVuc2lnbmVkIGNoYXIJCWRldl9hZGRyW01BWF9BRERSX0xFTl07CS8qIGh3IGFkZHJlc3MsIChiZWZvcmUgYmNhc3QgCisJdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsJLyogaHcgYWRkcmVzcywgKGJlZm9yZSBiY2FzdAogCQkJCQkJCSAgIGJlY2F1c2UgbW9zdCBwYWNrZXRzIGFyZSB1bmljYXN0KSAqLwogCiAJdW5zaWduZWQgY2hhcgkJYnJvYWRjYXN0W01BWF9BRERSX0xFTl07CS8qIGh3IGJjYXN0IGFkZAkqLwpAQCAtOTg0LDYgKzk5NSw5IEBACiB2b2lkIG5ldGlmX25hcGlfZGVsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiAKIHN0cnVjdCBuYXBpX2dyb19jYiB7CisJLyogVGhpcyBpbmRpY2F0ZXMgd2hlcmUgd2UgYXJlIHByb2Nlc3NpbmcgcmVsYXRpdmUgdG8gc2tiLT5kYXRhLiAqLworCWludCBkYXRhX29mZnNldDsKKwogCS8qIFRoaXMgaXMgbm9uLXplcm8gaWYgdGhlIHBhY2tldCBtYXkgYmUgb2YgdGhlIHNhbWUgZmxvdy4gKi8KIAlpbnQgc2FtZV9mbG93OwogCkBAIC0xMDg4LDYgKzExMDIsMzYgQEAKICNpZmRlZiBDT05GSUdfTkVUUE9MTF9UUkFQCiBleHRlcm4gaW50CQluZXRwb2xsX3RyYXAodm9pZCk7CiAjZW5kaWYKK2V4dGVybiB2b2lkCSAgICAgICpza2JfZ3JvX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGxlbik7CitleHRlcm4gaW50CSAgICAgICBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2dyb19vZmZzZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gTkFQSV9HUk9fQ0Ioc2tiKS0+ZGF0YV9vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9ncm9fbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+bGVuIC0gTkFQSV9HUk9fQ0Ioc2tiKS0+ZGF0YV9vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfZ3JvX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldCArPSBsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfZ3JvX3Jlc2V0X29mZnNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCU5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zmc2V0ID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpza2JfZ3JvX21hY19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiX21hY19oZWFkZXIoc2tiKSA8IHNrYi0+ZGF0YSA/IHNrYl9tYWNfaGVhZGVyKHNrYikgOgorCSAgICAgICBwYWdlX2FkZHJlc3Moc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlKSArCisJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQ7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldl9oYXJkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgdW5zaWduZWQgc2hvcnQgdHlwZSwKQEAgLTEzNzYsMTIgKzE0MjAsMTUgQEAKIGV4dGVybiB2b2lkCQluYXBpX2dyb19mbHVzaChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpOwogZXh0ZXJuIGludAkJZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQluYXBpX3NrYl9maW5pc2goaW50IHJldCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50CQluYXBpX2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJCW5hcGlfcmV1c2Vfc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKgluYXBpX2ZyYWdpbmZvX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJCSAgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKTsKK2V4dGVybiBpbnQJCW5hcGlfZnJhZ3NfZmluaXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmV0KTsKIGV4dGVybiBpbnQJCW5hcGlfZ3JvX2ZyYWdzKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgICAgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKTsKIGV4dGVybiB2b2lkCQluZXRpZl9uaXRfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTE1NzUsNTYgKzE2MjIsNiBAQAogCXJldHVybiAoMSA8PCBkZWJ1Z192YWx1ZSkgLSAxOwogfQogCi0vKiBUZXN0IGlmIHJlY2VpdmUgbmVlZHMgdG8gYmUgc2NoZWR1bGVkIGJ1dCBvbmx5IGlmIHVwICovCi1zdGF0aWMgaW5saW5lIGludCBuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlyZXR1cm4gbmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpOwotfQotCi0vKiBBZGQgaW50ZXJmYWNlIHRvIHRhaWwgb2YgcnggcG9sbCBsaXN0LiBUaGlzIGFzc3VtZXMgdGhhdCBfcHJlcCBoYXMKLSAqIGFscmVhZHkgYmVlbiBjYWxsZWQgYW5kIHJldHVybmVkIDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3J4X3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlfX25hcGlfc2NoZWR1bGUobmFwaSk7Ci19Ci0KLS8qIFRyeSB0byByZXNjaGVkdWxlIHBvbGwuIENhbGxlZCBieSBpcnEgaGFuZGxlci4gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3J4X3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuYXBpKSkKLQkJX19uZXRpZl9yeF9zY2hlZHVsZShuYXBpKTsKLX0KLQotLyogVHJ5IHRvIHJlc2NoZWR1bGUgcG9sbC4gQ2FsbGVkIGJ5IGRldi0+cG9sbCgpIGFmdGVyIG5ldGlmX3J4X2NvbXBsZXRlKCkuICAqLwotc3RhdGljIGlubGluZSBpbnQgbmV0aWZfcnhfcmVzY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JaWYgKG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKSkgewotCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHNhbWUgYXMgbmV0aWZfcnhfY29tcGxldGUsIGV4Y2VwdCB0aGF0IGxvY2FsX2lycV9zYXZlKGZsYWdzKQotICogaGFzIGFscmVhZHkgYmVlbiBpc3N1ZWQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfY29tcGxldGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKLX0KLQotLyogUmVtb3ZlIGludGVyZmFjZSBmcm9tIHBvbGwgbGlzdDogaXQgbXVzdCBiZSBpbiB0aGUgcG9sbCBsaXN0Ci0gKiBvbiBjdXJyZW50IGNwdS4gVGhpcyBwcmltaXRpdmUgaXMgY2FsbGVkIGJ5IGRldi0+cG9sbCgpLCB3aGVuCi0gKiBpdCBjb21wbGV0ZXMgdGhlIHdvcmsuIFRoZSBkZXZpY2UgY2Fubm90IGJlIG91dCBvZiBwb2xsIGxpc3QgYXQgdGhpcwotICogbW9tZW50LCBpdCBpcyBCVUcoKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3J4X2NvbXBsZXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQluYXBpX2NvbXBsZXRlKG5hcGkpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl90eF9sb2NrKHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSwgaW50IGNwdSkKIHsKIAlzcGluX2xvY2soJnR4cS0+X3htaXRfbG9jayk7CkBAIC0xODc1LDcgKzE4NzIsNyBAQAogCiAJCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfSU5BQ1RJVkUpIHsKIAkJCWlmICgoZGV2LT5wcml2X2ZsYWdzICYgSUZGX1NMQVZFX05FRURBUlApICYmCi0JCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSUCkpCisJCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0FSUCkpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCWlmIChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSX0FMQikgewpAQCAtMTg4NCw3ICsxODgxLDcgQEAKIAkJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlpZiAobWFzdGVyLT5wcml2X2ZsYWdzICYgSUZGX01BU1RFUl84MDIzQUQgJiYKLQkJCSAgICBza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfU0xPVykpCisJCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX1NMT1cpKQogCQkJCXJldHVybiAwOwogCiAJCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAppbmRleCA1YThhZjg3Li5hZjlkMmZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCkBAIC03LDE2ICs3LDIxIEBACiBoZWFkZXIteSArPSB4dF9DT05OTUFSSy5oCiBoZWFkZXIteSArPSB4dF9DT05OU0VDTUFSSy5oCiBoZWFkZXIteSArPSB4dF9EU0NQLmgKK2hlYWRlci15ICs9IHh0X0xFRC5oCiBoZWFkZXIteSArPSB4dF9NQVJLLmgKIGhlYWRlci15ICs9IHh0X05GTE9HLmgKIGhlYWRlci15ICs9IHh0X05GUVVFVUUuaAogaGVhZGVyLXkgKz0geHRfUkFURUVTVC5oCiBoZWFkZXIteSArPSB4dF9TRUNNQVJLLmgKIGhlYWRlci15ICs9IHh0X1RDUE1TUy5oCitoZWFkZXIteSArPSB4dF9UQ1BPUFRTVFJJUC5oCitoZWFkZXIteSArPSB4dF9UUFJPWFkuaAogaGVhZGVyLXkgKz0geHRfY29tbWVudC5oCiBoZWFkZXIteSArPSB4dF9jb25uYnl0ZXMuaAoraGVhZGVyLXkgKz0geHRfY29ubmxpbWl0LmgKIGhlYWRlci15ICs9IHh0X2Nvbm5tYXJrLmgKIGhlYWRlci15ICs9IHh0X2Nvbm50cmFjay5oCitoZWFkZXIteSArPSB4dF9jbHVzdGVyLmgKIGhlYWRlci15ICs9IHh0X2RjY3AuaAogaGVhZGVyLXkgKz0geHRfZHNjcC5oCiBoZWFkZXIteSArPSB4dF9lc3AuaApAQCAtMzAsNiArMzUsNyBAQAogaGVhZGVyLXkgKz0geHRfbXVsdGlwb3J0LmgKIGhlYWRlci15ICs9IHh0X293bmVyLmgKIGhlYWRlci15ICs9IHh0X3BrdHR5cGUuaAoraGVhZGVyLXkgKz0geHRfcXVvdGEuaAogaGVhZGVyLXkgKz0geHRfcmF0ZWVzdC5oCiBoZWFkZXIteSArPSB4dF9yZWFsbS5oCiBoZWFkZXIteSArPSB4dF9yZWNlbnQuaApAQCAtMzksNiArNDUsOCBAQAogaGVhZGVyLXkgKz0geHRfc3RyaW5nLmgKIGhlYWRlci15ICs9IHh0X3RjcG1zcy5oCiBoZWFkZXIteSArPSB4dF90Y3B1ZHAuaAoraGVhZGVyLXkgKz0geHRfdGltZS5oCitoZWFkZXIteSArPSB4dF91MzIuaAogCiB1bmlmZGVmLXkgKz0gbmZfY29ubnRyYWNrX2NvbW1vbi5oCiB1bmlmZGVmLXkgKz0gbmZfY29ubnRyYWNrX2Z0cC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKaW5kZXggYTA0OWRmNC4uMzA2Njc4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaApAQCAtMiw2ICsyLDggQEAKICNkZWZpbmUgX05GX0NPTk5UUkFDS19UQ1BfSAogLyogVENQIHRyYWNraW5nLiAqLwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVGhpcyBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSAoY3RuZXRsaW5rKSAqLwogZW51bSB0Y3BfY29ubnRyYWNrIHsKIAlUQ1BfQ09OTlRSQUNLX05PTkUsCkBAIC0zNCw4ICszNiw4IEBACiAjZGVmaW5lIElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQJMHgxMAogCiBzdHJ1Y3QgbmZfY3RfdGNwX2ZsYWdzIHsKLQl1X2ludDhfdCBmbGFnczsKLQl1X2ludDhfdCBtYXNrOworCV9fdTggZmxhZ3M7CisJX191OCBtYXNrOwogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKaW5kZXggN2Q4ZTA0NS4uYzYwMDA4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTI1LDggKzI1LDggQEAKIC8qIEdlbmVyYWwgZm9ybSBvZiBhZGRyZXNzIGZhbWlseSBkZXBlbmRlbnQgbWVzc2FnZS4KICAqLwogc3RydWN0IG5mZ2VubXNnIHsKLQl1X2ludDhfdCAgbmZnZW5fZmFtaWx5OwkJLyogQUZfeHh4ICovCi0JdV9pbnQ4X3QgIHZlcnNpb247CQkvKiBuZm5ldGxpbmsgdmVyc2lvbiAqLworCV9fdTggIG5mZ2VuX2ZhbWlseTsJCS8qIEFGX3h4eCAqLworCV9fdTggIHZlcnNpb247CQkvKiBuZm5ldGxpbmsgdmVyc2lvbiAqLwogCV9fYmUxNiAgICByZXNfaWQ7CQkvKiByZXNvdXJjZSBpZCAqLwogfTsKIApAQCAtNzYsNiArNzYsNyBAQAogZXh0ZXJuIGludCBuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyh1bnNpZ25lZCBpbnQgZ3JvdXApOwogZXh0ZXJuIGludCBuZm5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1bnNpZ25lZCBncm91cCwgCiAJCQkgIGludCBlY2hvKTsKK2V4dGVybiB2b2lkIG5mbmV0bGlua19zZXRfZXJyKHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVycm9yKTsKIGV4dGVybiBpbnQgbmZuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKTsKIAogZXh0ZXJuIHZvaWQgbmZubF9sb2NrKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCmluZGV4IGUxNDUxNzYuLmVkYTU1Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKQEAgLTEsNSArMSw4IEBACiAjaWZuZGVmIF9ORk5FVExJTktfQ09NUEFUX0gKICNkZWZpbmUgX05GTkVUTElOS19DT01QQVRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmbmRlZiBfX0tFUk5FTF9fCiAvKiBPbGQgbmZuZXRsaW5rIG1hY3JvcyBmb3IgdXNlcnNwYWNlICovCiAKQEAgLTIwLDggKzIzLDggQEAKIAogc3RydWN0IG5mYXR0cgogewotCXVfaW50MTZfdCBuZmFfbGVuOwotCXVfaW50MTZfdCBuZmFfdHlwZTsJLyogd2UgdXNlIDE1IGJpdHMgZm9yIHRoZSB0eXBlLCBhbmQgdGhlIGhpZ2hlc3QKKwlfX3UxNiBuZmFfbGVuOworCV9fdTE2IG5mYV90eXBlOwkvKiB3ZSB1c2UgMTUgYml0cyBmb3IgdGhlIHR5cGUsIGFuZCB0aGUgaGlnaGVzdAogCQkJCSAqIGJpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIG5lc3RlZCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCmluZGV4IGY2NjE3MzEuLmQzYmFiN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKQEAgLTE3LDE0ICsxNywxNCBAQAogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaGRyIHsKIAlfX2JlMTYJCWh3X3Byb3RvY29sOwkvKiBodyBwcm90b2NvbCAobmV0d29yayBvcmRlcikgKi8KLQl1X2ludDhfdAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KLQl1X2ludDhfdAlfcGFkOworCV9fdTgJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCisJX191OAlfcGFkOwogfTsKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X2h3IHsKIAlfX2JlMTYJCWh3X2FkZHJsZW47Ci0JdV9pbnQxNl90CV9wYWQ7Ci0JdV9pbnQ4X3QJaHdfYWRkcls4XTsKKwlfX3UxNglfcGFkOworCV9fdTgJaHdfYWRkcls4XTsKIH07CiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgewpAQCAtMzUsMTIgKzM1LDEyIEBACiBlbnVtIG5mdWxubF9hdHRyX3R5cGUgewogCU5GVUxBX1VOU1BFQywKIAlORlVMQV9QQUNLRVRfSERSLAotCU5GVUxBX01BUkssCQkJLyogdV9pbnQzMl90IG5mbWFyayAqLworCU5GVUxBX01BUkssCQkJLyogX191MzIgbmZtYXJrICovCiAJTkZVTEFfVElNRVNUQU1QLAkJLyogbmZ1bG5sX21zZ19wYWNrZXRfdGltZXN0YW1wICovCi0JTkZVTEFfSUZJTkRFWF9JTkRFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9PVVRERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GVUxBX0lGSU5ERVhfUEhZU0lOREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GVUxBX0lGSU5ERVhfUEhZU09VVERFViwJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX0lOREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfT1VUREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfUEhZU0lOREVWLAkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiBfX3UzMiBpZmluZGV4ICovCiAJTkZVTEFfSFdBRERSLAkJCS8qIG5mdWxubF9tc2dfcGFja2V0X2h3ICovCiAJTkZVTEFfUEFZTE9BRCwJCQkvKiBvcGFxdWUgZGF0YSBwYXlsb2FkICovCiAJTkZVTEFfUFJFRklYLAkJCS8qIHN0cmluZyBwcmVmaXggKi8KQEAgLTY1LDIzICs2NSwyMyBAQAogfTsKIAogc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX2NtZCB7Ci0JdV9pbnQ4X3QJY29tbWFuZDsJLyogbmZ1bG5sX21zZ19jb25maWdfY21kcyAqLworCV9fdTgJY29tbWFuZDsJLyogbmZ1bG5sX21zZ19jb25maWdfY21kcyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBuZnVsbmxfbXNnX2NvbmZpZ19tb2RlIHsKIAlfX2JlMzIJCWNvcHlfcmFuZ2U7Ci0JdV9pbnQ4X3QJY29weV9tb2RlOwotCXVfaW50OF90CV9wYWQ7CisJX191OAljb3B5X21vZGU7CisJX191OAlfcGFkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIGVudW0gbmZ1bG5sX2F0dHJfY29uZmlnIHsKIAlORlVMQV9DRkdfVU5TUEVDLAogCU5GVUxBX0NGR19DTUQsCQkJLyogbmZ1bG5sX21zZ19jb25maWdfY21kICovCiAJTkZVTEFfQ0ZHX01PREUsCQkJLyogbmZ1bG5sX21zZ19jb25maWdfbW9kZSAqLwotCU5GVUxBX0NGR19OTEJVRlNJWiwJCS8qIHVfaW50MzJfdCBidWZmZXIgc2l6ZSAqLwotCU5GVUxBX0NGR19USU1FT1VULAkJLyogdV9pbnQzMl90IGluIDEvMTAwIHMgKi8KLQlORlVMQV9DRkdfUVRIUkVTSCwJCS8qIHVfaW50MzJfdCAqLwotCU5GVUxBX0NGR19GTEFHUywJCS8qIHVfaW50MTZfdCAqLworCU5GVUxBX0NGR19OTEJVRlNJWiwJCS8qIF9fdTMyIGJ1ZmZlciBzaXplICovCisJTkZVTEFfQ0ZHX1RJTUVPVVQsCQkvKiBfX3UzMiBpbiAxLzEwMCBzICovCisJTkZVTEFfQ0ZHX1FUSFJFU0gsCQkvKiBfX3UzMiAqLworCU5GVUxBX0NGR19GTEFHUywJCS8qIF9fdTE2ICovCiAJX19ORlVMQV9DRkdfTUFYCiB9OwogI2RlZmluZSBORlVMQV9DRkdfTUFYIChfX05GVUxBX0NGR19NQVggLTEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCmluZGV4IDgzZTc4OTYuLjI0NTVmZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCkBAIC0xNSwxMyArMTUsMTMgQEAKIHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X2hkciB7CiAJX19iZTMyCQlwYWNrZXRfaWQ7CS8qIHVuaXF1ZSBJRCBvZiBwYWNrZXQgaW4gcXVldWUgKi8KIAlfX2JlMTYJCWh3X3Byb3RvY29sOwkvKiBodyBwcm90b2NvbCAobmV0d29yayBvcmRlcikgKi8KLQl1X2ludDhfdAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KKwlfX3U4CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X2h3IHsKIAlfX2JlMTYJCWh3X2FkZHJsZW47Ci0JdV9pbnQxNl90CV9wYWQ7Ci0JdV9pbnQ4X3QJaHdfYWRkcls4XTsKKwlfX3UxNglfcGFkOworCV9fdTgJaHdfYWRkcls4XTsKIH07CiAKIHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7CkBAIC0zMywxMiArMzMsMTIgQEAKIAlORlFBX1VOU1BFQywKIAlORlFBX1BBQ0tFVF9IRFIsCiAJTkZRQV9WRVJESUNUX0hEUiwJCS8qIG5mcW5sX21zZ192ZXJkaWN0X2hyZCAqLwotCU5GUUFfTUFSSywJCQkvKiB1X2ludDMyX3QgbmZtYXJrICovCisJTkZRQV9NQVJLLAkJCS8qIF9fdTMyIG5mbWFyayAqLwogCU5GUUFfVElNRVNUQU1QLAkJCS8qIG5mcW5sX21zZ19wYWNrZXRfdGltZXN0YW1wICovCi0JTkZRQV9JRklOREVYX0lOREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlFBX0lGSU5ERVhfT1VUREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlFBX0lGSU5ERVhfUEhZU0lOREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlFBX0lGSU5ERVhfUEhZU09VVERFViwJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX09VVERFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfUEhZU0lOREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiBfX3UzMiBpZmluZGV4ICovCiAJTkZRQV9IV0FERFIsCQkJLyogbmZxbmxfbXNnX3BhY2tldF9odyAqLwogCU5GUUFfUEFZTE9BRCwJCQkvKiBvcGFxdWUgZGF0YSBwYXlsb2FkICovCiAKQEAgLTYxLDggKzYxLDggQEAKIH07CiAKIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX2NtZCB7Ci0JdV9pbnQ4X3QJY29tbWFuZDsJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWRzICovCi0JdV9pbnQ4X3QJX3BhZDsKKwlfX3U4CWNvbW1hbmQ7CS8qIG5mcW5sX21zZ19jb25maWdfY21kcyAqLworCV9fdTgJX3BhZDsKIAlfX2JlMTYJCXBmOwkJLyogQUZfeHh4IGZvciBQRl9bVU5dQklORCAqLwogfTsKIApAQCAtNzQsNyArNzQsNyBAQAogCiBzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19wYXJhbXMgewogCV9fYmUzMgkJY29weV9yYW5nZTsKLQl1X2ludDhfdAljb3B5X21vZGU7CS8qIGVudW0gbmZxbmxfY29uZmlnX21vZGUgKi8KKwlfX3U4CWNvcHlfbW9kZTsJLyogZW51bSBuZnFubF9jb25maWdfbW9kZSAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIApAQCAtODIsNyArODIsNyBAQAogCU5GUUFfQ0ZHX1VOU1BFQywKIAlORlFBX0NGR19DTUQsCQkJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWQgKi8KIAlORlFBX0NGR19QQVJBTVMsCQkvKiBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyAqLwotCU5GUUFfQ0ZHX1FVRVVFX01BWExFTiwJCS8qIHVfaW50MzJfdCAqLworCU5GUUFfQ0ZHX1FVRVVFX01BWExFTiwJCS8qIF9fdTMyICovCiAJX19ORlFBX0NGR19NQVgKIH07CiAjZGVmaW5lIE5GUUFfQ0ZHX01BWCAoX19ORlFBX0NGR19NQVgtMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCmluZGV4IGM3ZWU4NzQuLmFkYmM1MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hfVEFCTEVTX0gKICNkZWZpbmUgX1hfVEFCTEVTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfRlVOQ1RJT05fTUFYTkFNRUxFTiAzMAogI2RlZmluZSBYVF9UQUJMRV9NQVhOQU1FTEVOIDMyCiAKQEAgLTgsMjIgKzEwLDIyIEBACiB7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisJCQlfX3UxNiBtYXRjaF9zaXplOwogCiAJCQkvKiBVc2VkIGJ5IHVzZXJzcGFjZSAqLwogCQkJY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CiAKLQkJCXVfaW50OF90IHJldmlzaW9uOworCQkJX191OCByZXZpc2lvbjsKIAkJfSB1c2VyOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisJCQlfX3UxNiBtYXRjaF9zaXplOwogCiAJCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCiAJCQlzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOwogCQl9IGtlcm5lbDsKIAogCQkvKiBUb3RhbCBsZW5ndGggKi8KLQkJdV9pbnQxNl90IG1hdGNoX3NpemU7CisJCV9fdTE2IG1hdGNoX3NpemU7CiAJfSB1OwogCiAJdW5zaWduZWQgY2hhciBkYXRhWzBdOwpAQCAtMzMsMjIgKzM1LDIyIEBACiB7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCQkJX191MTYgdGFyZ2V0X3NpemU7CiAKIAkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCiAJCQljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCQkJdV9pbnQ4X3QgcmV2aXNpb247CisJCQlfX3U4IHJldmlzaW9uOwogCQl9IHVzZXI7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCQlfX3UxNiB0YXJnZXRfc2l6ZTsKIAogCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLwogCQkJc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogCQl9IGtlcm5lbDsKIAogCQkvKiBUb3RhbCBsZW5ndGggKi8KLQkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCQlfX3UxNiB0YXJnZXRfc2l6ZTsKIAl9IHU7CiAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbMF07CkBAIC03NCw3ICs3Niw3IEBACiB7CiAJY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CiAKLQl1X2ludDhfdCByZXZpc2lvbjsKKwlfX3U4IHJldmlzaW9uOwogfTsKIAogLyogQ09OVElOVUUgdmVyZGljdCBmb3IgdGFyZ2V0cyAqLwpAQCAtOTAsMTAgKzkyLDEwIEBACiAgKi8KIHN0cnVjdCBfeHRfYWxpZ24KIHsKLQl1X2ludDhfdCB1ODsKLQl1X2ludDE2X3QgdTE2OwotCXVfaW50MzJfdCB1MzI7Ci0JdV9pbnQ2NF90IHU2NDsKKwlfX3U4IHU4OworCV9fdTE2IHUxNjsKKwlfX3UzMiB1MzI7CisJX191NjQgdTY0OwogfTsKIAogI2RlZmluZSBYVF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKS0xKSkgCVwKQEAgLTEwOSw3ICsxMTEsNyBAQAogCiBzdHJ1Y3QgeHRfY291bnRlcnMKIHsKLQl1X2ludDY0X3QgcGNudCwgYmNudDsJCQkvKiBQYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMgKi8KKwlfX3U2NCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLwogfTsKIAogLyogVGhlIGFyZ3VtZW50IHRvIElQVF9TT19BRERfQ09VTlRFUlMuICovCkBAIC0zNDksMjMgKzM1MSwyMiBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAotCS8qIEEgdW5pcXVlIG5hbWUuLi4gKi8KLQljb25zdCBjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07Ci0KIAkvKiBXaGF0IGhvb2tzIHlvdSB3aWxsIGVudGVyIG9uICovCiAJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOwogCiAJLyogTG9jayBmb3IgdGhlIGN1cnRhaW4gKi8KLQlyd2xvY2tfdCBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCiAJLyogTWFuIGJlaGluZCB0aGUgY3VydGFpbi4uLiAqLwotCS8vc3RydWN0IGlwNnRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKLQl2b2lkICpwcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCiAJLyogU2V0IHRoaXMgdG8gVEhJU19NT0RVTEUgaWYgeW91IGFyZSBhIG1vZHVsZSwgb3RoZXJ3aXNlIE5VTEwgKi8KIAlzdHJ1Y3QgbW9kdWxlICptZTsKIAogCXVfaW50OF90IGFmOwkJLyogYWRkcmVzcy9wcm90b2NvbCBmYW1pbHkgKi8KKworCS8qIEEgdW5pcXVlIG5hbWUuLi4gKi8KKwljb25zdCBjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07CiB9OwogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KQEAgLTM4Niw3ICszODcsNyBAQAogCiAJLyogaXB0X2VudHJ5IHRhYmxlczogb25lIHBlciBDUFUgKi8KIAkvKiBOb3RlIDogdGhpcyBmaWVsZCBNVVNUIGJlIHRoZSBsYXN0IG9uZSwgc2VlIFhUX1RBQkxFX0lORk9fU1ogKi8KLQljaGFyICplbnRyaWVzWzFdOworCXZvaWQgKmVudHJpZXNbMV07CiB9OwogCiAjZGVmaW5lIFhUX1RBQkxFX0lORk9fU1ogKG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSBcCkBAIC00MzMsNiArNDM0LDggQEAKIAogZXh0ZXJuIHN0cnVjdCB4dF90YWJsZV9pbmZvICp4dF9hbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7CitleHRlcm4gdm9pZCB4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkLAorCQkJCSAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3KTsKIAogI2lmZGVmIENPTkZJR19DT01QQVQKICNpbmNsdWRlIDxuZXQvY29tcGF0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaAppbmRleCA1ODExMTM1Li5hODEzYmYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKQEAgLTEsOCArMSwxMCBAQAogI2lmbmRlZiBfWFRfQ0xBU1NJRllfSAogI2RlZmluZSBfWFRfQ0xBU1NJRllfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X2NsYXNzaWZ5X3RhcmdldF9pbmZvIHsKLQl1X2ludDMyX3QgcHJpb3JpdHk7CisJX191MzIgcHJpb3JpdHk7CiB9OwogCiAjZW5kaWYgLypfWFRfQ0xBU1NJRllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKaW5kZXggNGU1OGJhNC4uNzYzNWM4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfQ09OTk1BUktfSF90YXJnZXQKICNkZWZpbmUgX1hUX0NPTk5NQVJLX0hfdGFyZ2V0CiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgogICogYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KICAqCkBAIC0xOSwxMiArMjEsMTIgQEAKIHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIH07CiAKIHN0cnVjdCB4dF9jb25ubWFya190Z2luZm8xIHsKLQl1X2ludDMyX3QgY3RtYXJrLCBjdG1hc2ssIG5mbWFzazsKLQl1X2ludDhfdCBtb2RlOworCV9fdTMyIGN0bWFyaywgY3RtYXNrLCBuZm1hc2s7CisJX191OCBtb2RlOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5NQVJLX0hfdGFyZ2V0Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCmluZGV4IGM2YmQ3NTQuLmI5NzNmZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaApAQCAtMSwxMyArMSwxNSBAQAogI2lmbmRlZiBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKICNkZWZpbmUgX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0CiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHsKIAlDT05OU0VDTUFSS19TQVZFID0gMSwKIAlDT05OU0VDTUFSS19SRVNUT1JFLAogfTsKIAogc3RydWN0IHh0X2Nvbm5zZWNtYXJrX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIH07CiAKICNlbmRpZiAvKl9YVF9DT05OU0VDTUFSS19IX3RhcmdldCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCmluZGV4IDE0ZGExOTYuLjY0OGUwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKQEAgLTExLDE1ICsxMSwxNiBAQAogI2lmbmRlZiBfWFRfRFNDUF9UQVJHRVRfSAogI2RlZmluZSBfWFRfRFNDUF9UQVJHRVRfSAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9kc2NwLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogdGFyZ2V0IGluZm8gKi8KIHN0cnVjdCB4dF9EU0NQX2luZm8gewotCXVfaW50OF90IGRzY3A7CisJX191OCBkc2NwOwogfTsKIAogc3RydWN0IHh0X3Rvc190YXJnZXRfaW5mbyB7Ci0JdV9pbnQ4X3QgdG9zX3ZhbHVlOwotCXVfaW50OF90IHRvc19tYXNrOworCV9fdTggdG9zX3ZhbHVlOworCV9fdTggdG9zX21hc2s7CiB9OwogCiAjZW5kaWYgLyogX1hUX0RTQ1BfVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0xFRC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5MWEwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0xFRC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX1hUX0xFRF9ICisjZGVmaW5lIF9YVF9MRURfSAorCitzdHJ1Y3QgeHRfbGVkX2luZm8geworCWNoYXIgaWRbMjddOyAgICAgICAgLyogVW5pcXVlIElEIGZvciB0aGlzIHRyaWdnZXIgaW4gdGhlIExFRCBjbGFzcyAqLworCV9fdTggYWx3YXlzX2JsaW5rOyAgLyogQmxpbmsgZXZlbiBpZiB0aGUgTEVEIGlzIGFscmVhZHkgb24gKi8KKwlfX3UzMiBkZWxheTsgICAgICAgIC8qIERlbGF5IHVudGlsIExFRCBpcyBzd2l0Y2hlZCBvZmYgYWZ0ZXIgdHJpZ2dlciAqLworCisJLyogS2VybmVsIGRhdGEgdXNlZCBpbiB0aGUgbW9kdWxlICovCisJdm9pZCAqaW50ZXJuYWxfZGF0YSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCisjZW5kaWYgLyogX1hUX0xFRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKaW5kZXggNzc4YjI3OC4uMDI4MzA0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX01BUktfSF90YXJnZXQKICNkZWZpbmUgX1hUX01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFZlcnNpb24gMCAqLwogc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8gewogCXVuc2lnbmVkIGxvbmcgbWFyazsKQEAgLTE1LDExICsxNywxMSBAQAogCiBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mb192MSB7CiAJdW5zaWduZWQgbG9uZyBtYXJrOwotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogc3RydWN0IHh0X21hcmtfdGdpbmZvMiB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7CisJX191MzIgbWFyaywgbWFzazsKIH07CiAKICNlbmRpZiAvKl9YVF9NQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaAppbmRleCA0YjM2YWViLi44N2I1ODMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKQEAgLTEsMTcgKzEsMTkgQEAKICNpZm5kZWYgX1hUX05GTE9HX1RBUkdFVAogI2RlZmluZSBfWFRfTkZMT0dfVEFSR0VUCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfR1JPVVAJCTB4MQogI2RlZmluZSBYVF9ORkxPR19ERUZBVUxUX1RIUkVTSE9MRAkwCiAKICNkZWZpbmUgWFRfTkZMT0dfTUFTSwkJCTB4MAogCiBzdHJ1Y3QgeHRfbmZsb2dfaW5mbyB7Ci0JdV9pbnQzMl90CWxlbjsKLQl1X2ludDE2X3QJZ3JvdXA7Ci0JdV9pbnQxNl90CXRocmVzaG9sZDsKLQl1X2ludDE2X3QJZmxhZ3M7Ci0JdV9pbnQxNl90CXBhZDsKKwlfX3UzMglsZW47CisJX191MTYJZ3JvdXA7CisJX191MTYJdGhyZXNob2xkOworCV9fdTE2CWZsYWdzOworCV9fdTE2CXBhZDsKIAljaGFyCQlwcmVmaXhbNjRdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oCmluZGV4IDlhOWFmNzlmLi45ODJhODlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oCkBAIC04LDkgKzgsMTEgQEAKICNpZm5kZWYgX1hUX05GUV9UQVJHRVRfSAogI2RlZmluZSBfWFRfTkZRX1RBUkdFVF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0YXJnZXQgaW5mbyAqLwogc3RydWN0IHh0X05GUV9pbmZvIHsKLQl1X2ludDE2X3QgcXVldWVudW07CisJX191MTYgcXVldWVudW07CiB9OwogCiAjZW5kaWYgLyogX1hUX05GUV9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCmluZGV4IGY3OWUzMTMuLjY2MDVlMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmgKQEAgLTEsMTAgKzEsMTIgQEAKICNpZm5kZWYgX1hUX1JBVEVFU1RfVEFSR0VUX0gKICNkZWZpbmUgX1hUX1JBVEVFU1RfVEFSR0VUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9yYXRlZXN0X3RhcmdldF9pbmZvIHsKIAljaGFyCQkJbmFtZVtJRk5BTVNJWl07Ci0JaW50OF90CQkJaW50ZXJ2YWw7Ci0JdV9pbnQ4X3QJCWV3bWFfbG9nOworCV9fczgJCQlpbnRlcnZhbDsKKwlfX3U4CQlld21hX2xvZzsKIAogCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCiAJc3RydWN0IHh0X3JhdGVlc3QJKmVzdCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKaW5kZXggYzUzZmJmZi4uNmZjZDM0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1NFQ01BUktfSF90YXJnZXQKICNkZWZpbmUgX1hUX1NFQ01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKiBUaGlzIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdmFyaW91cyBzZWN1cml0eSBzdWJzeXN0ZW1zIChidXQgbm90CiAgKiBhdCB0aGUgc2FtZSB0aW1lKS4KQEAgLTEyLDEyICsxNCwxMiBAQAogI2RlZmluZSBTRUNNQVJLX1NFTENUWF9NQVgJMjU2CiAKIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gewotCXVfaW50MzJfdCBzZWxzaWQ7CisJX191MzIgc2Vsc2lkOwogCWNoYXIgc2VsY3R4W1NFQ01BUktfU0VMQ1RYX01BWF07CiB9OwogCiBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyB7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfc2VsaW51eF9pbmZvIHNlbDsKIAl9IHU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UQ1BNU1MuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oCmluZGV4IDUzYTI5MmMuLjlhNjk2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oCkBAIC0xLDggKzEsMTAgQEAKICNpZm5kZWYgX1hUX1RDUE1TU19ICiAjZGVmaW5lIF9YVF9UQ1BNU1NfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3RjcG1zc19pbmZvIHsKLQl1X2ludDE2X3QgbXNzOworCV9fdTE2IG1zczsKIH07CiAKICNkZWZpbmUgWFRfVENQTVNTX0NMQU1QX1BNVFUgMHhmZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jbHVzdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jbHVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwYTBkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9YVF9DTFVTVEVSX01BVENIX0gKKyNkZWZpbmUgX1hUX0NMVVNURVJfTUFUQ0hfSAorCitlbnVtIHh0X2NsdXN0ZXJfZmxhZ3MgeworCVhUX0NMVVNURVJfRl9JTlYJPSAoMSA8PCAwKQorfTsKKworc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyB7CisJdV9pbnQzMl90CQl0b3RhbF9ub2RlczsKKwl1X2ludDMyX3QJCW5vZGVfbWFzazsKKwl1X2ludDMyX3QJCWhhc2hfc2VlZDsKKwl1X2ludDMyX3QJCWZsYWdzOworfTsKKworI2VuZGlmIC8qIF9YVF9DTFVTVEVSX01BVENIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKaW5kZXggYzAyMmM5OC4uNTJiZDYxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OQllURVNfSAogI2RlZmluZSBfWFRfQ09OTkJZVEVTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfY29ubmJ5dGVzX3doYXQgewogCVhUX0NPTk5CWVRFU19QS1RTLAogCVhUX0NPTk5CWVRFU19CWVRFUywKQEAgLTE5LDcgKzIxLDcgQEAKIAkJYWxpZ25lZF91NjQgZnJvbTsJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwogCQlhbGlnbmVkX3U2NCB0bzsJCS8qIGNvdW50IHRvIGJlIG1hdGNoZWQgKi8KIAl9IGNvdW50OwotCXVfaW50OF90IHdoYXQ7CQkvKiBpcHRfY29ubmJ5dGVzX3doYXQgKi8KLQl1X2ludDhfdCBkaXJlY3Rpb247CS8qIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uICovCisJX191OCB3aGF0OwkJLyogaXB0X2Nvbm5ieXRlc193aGF0ICovCisJX191OCBkaXJlY3Rpb247CS8qIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uICovCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaAppbmRleCAzNTllZjg2Li41NzFlMjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OTUFSS19ICiAjZGVmaW5lIF9YVF9DT05OTUFSS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgogICogYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KICAqCkBAIC0xMiwxMiArMTQsMTIgQEAKIAogc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8gewogCXVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCBpbnZlcnQ7CiB9OwogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfbXRpbmZvMSB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIG1hcmssIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTk1BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCmluZGV4IDhmNTM0NTIuLjM0MzBjNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC02Myw5ICs2Myw5IEBACiAJdW5zaWduZWQgbG9uZyBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7CiAKIAkvKiBGbGFncyB3b3JkICovCi0JdV9pbnQ4X3QgZmxhZ3M7CisJX191OCBmbGFnczsKIAkvKiBJbnZlcnNlIGZsYWdzICovCi0JdV9pbnQ4X3QgaW52ZmxhZ3M7CisJX191OCBpbnZmbGFnczsKIH07CiAKIHN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMSB7CkBAIC03MywxMiArNzMsMTIgQEAKIAl1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrOwogCXVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzazsKLQl1X2ludDMyX3QgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OwotCXVfaW50MTZfdCBsNHByb3RvOworCV9fdTMyIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKKwlfX3UxNiBsNHByb3RvOwogCV9fYmUxNiBvcmlnc3JjX3BvcnQsIG9yaWdkc3RfcG9ydDsKIAlfX2JlMTYgcmVwbHNyY19wb3J0LCByZXBsZHN0X3BvcnQ7Ci0JdV9pbnQxNl90IG1hdGNoX2ZsYWdzLCBpbnZlcnRfZmxhZ3M7Ci0JdV9pbnQ4X3Qgc3RhdGVfbWFzaywgc3RhdHVzX21hc2s7CisJX191MTYgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKKwlfX3U4IHN0YXRlX21hc2ssIHN0YXR1c19tYXNrOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5UUkFDS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaAppbmRleCBlMDIyMWI5Li5hNTc5ZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfRENDUF9IXwogI2RlZmluZSBfWFRfRENDUF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9EQ0NQX1NSQ19QT1JUUwkgICAgICAgIDB4MDEKICNkZWZpbmUgWFRfRENDUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgogI2RlZmluZSBYVF9EQ0NQX1RZUEUJCQkweDA0CkBAIC05LDE0ICsxMSwxNCBAQAogI2RlZmluZSBYVF9EQ0NQX1ZBTElEX0ZMQUdTCQkweDBmCiAKIHN0cnVjdCB4dF9kY2NwX2luZm8gewotCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCiAKLQl1X2ludDE2X3QgZmxhZ3M7Ci0JdV9pbnQxNl90IGludmZsYWdzOworCV9fdTE2IGZsYWdzOworCV9fdTE2IGludmZsYWdzOwogCi0JdV9pbnQxNl90IHR5cGVtYXNrOwotCXVfaW50OF90IG9wdGlvbjsKKwlfX3UxNiB0eXBlbWFzazsKKwlfX3U4IG9wdGlvbjsKIH07CiAKICNlbmRpZiAvKiBfWFRfRENDUF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCmluZGV4IGY0OWJjMWEuLjE1Zjg5MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmgKQEAgLTEwLDIwICsxMCwyMiBAQAogI2lmbmRlZiBfWFRfRFNDUF9ICiAjZGVmaW5lIF9YVF9EU0NQX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfRFNDUF9NQVNLCTB4ZmMJLyogMTExMTExMDAgKi8KICNkZWZpbmUgWFRfRFNDUF9TSElGVAkyCiAjZGVmaW5lIFhUX0RTQ1BfTUFYCTB4M2YJLyogMDAxMTExMTEgKi8KIAogLyogbWF0Y2ggaW5mbyAqLwogc3RydWN0IHh0X2RzY3BfaW5mbyB7Ci0JdV9pbnQ4X3QgZHNjcDsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCBkc2NwOworCV9fdTggaW52ZXJ0OwogfTsKIAogc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvIHsKLQl1X2ludDhfdCB0b3NfbWFzazsKLQl1X2ludDhfdCB0b3NfdmFsdWU7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTggdG9zX21hc2s7CisJX191OCB0b3NfdmFsdWU7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLyogX1hUX0RTQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAppbmRleCA5MzgwZmIxYy4uZWY2ZmE0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKQEAgLTEsMTAgKzEsMTIgQEAKICNpZm5kZWYgX1hUX0VTUF9ICiAjZGVmaW5lIF9YVF9FU1BfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X2VzcAogewotCXVfaW50MzJfdCBzcGlzWzJdOwkvKiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKi8KLQl1X2ludDhfdCAgaW52ZmxhZ3M7CS8qIEludmVyc2UgZmxhZ3MgKi8KKwlfX3UzMiBzcGlzWzJdOwkvKiBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXggKi8KKwlfX3U4ICBpbnZmbGFnczsJLyogSW52ZXJzZSBmbGFncyAqLwogfTsKIAogLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCB4dF9lc3AuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCmluZGV4IDUxYjE4ZDguLmIxOTI1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfSEFTSExJTUlUX0gKICNkZWZpbmUgX1hUX0hBU0hMSU1JVF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCiAjZGVmaW5lIFhUX0hBU0hMSU1JVF9TQ0FMRSAxMDAwMAogLyogMS8xMCwwMDAgc2VjIHBlcmlvZCA9PiBtYXggb2YgMTAsMDAwL3NlYy4gIE1pbiByYXRlIGlzIHRoZW4gNDI5NDkwCkBAIC0xOCwxNSArMjAsMTUgQEAKIH07CiAKIHN0cnVjdCBoYXNobGltaXRfY2ZnIHsKLQl1X2ludDMyX3QgbW9kZTsJICAvKiBiaXRtYXNrIG9mIFhUX0hBU0hMSU1JVF9IQVNIXyogKi8KLQl1X2ludDMyX3QgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KLQl1X2ludDMyX3QgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCisJX191MzIgbW9kZTsJICAvKiBiaXRtYXNrIG9mIFhUX0hBU0hMSU1JVF9IQVNIXyogKi8KKwlfX3UzMiBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCV9fdTMyIGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLwogCiAJLyogdXNlciBzcGVjaWZpZWQgKi8KLQl1X2ludDMyX3Qgc2l6ZTsJCS8qIGhvdyBtYW55IGJ1Y2tldHMgKi8KLQl1X2ludDMyX3QgbWF4OwkJLyogbWF4IG51bWJlciBvZiBlbnRyaWVzICovCi0JdV9pbnQzMl90IGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLwotCXVfaW50MzJfdCBleHBpcmU7CS8qIHdoZW4gZG8gZW50cmllcyBleHBpcmU/ICovCisJX191MzIgc2l6ZTsJCS8qIGhvdyBtYW55IGJ1Y2tldHMgKi8KKwlfX3UzMiBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlfX3UzMiBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KKwlfX3UzMiBleHBpcmU7CS8qIHdoZW4gZG8gZW50cmllcyBleHBpcmU/ICovCiB9OwogCiBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gewpAQCAtNDIsMTcgKzQ0LDE3IEBACiB9OwogCiBzdHJ1Y3QgaGFzaGxpbWl0X2NmZzEgewotCXVfaW50MzJfdCBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLwotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKwlfX3UzMiBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiB1c2VyIHNwZWNpZmllZCAqLwotCXVfaW50MzJfdCBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLwotCXVfaW50MzJfdCBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KLQl1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCi0JdV9pbnQzMl90IGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KIAotCXVfaW50OF90IHNyY21hc2ssIGRzdG1hc2s7CisJX191OCBzcmNtYXNrLCBkc3RtYXNrOwogfTsKIAogc3RydWN0IHh0X2hhc2hsaW1pdF9tdGluZm8xIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaAppbmRleCBhNDI5OWM3Li5jMWYyMWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSAogI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSCAxCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHsKIAlJUFJBTkdFX1NSQyAgICAgPSAxIDw8IDAsCS8qIG1hdGNoIHNvdXJjZSBJUCBhZGRyZXNzICovCiAJSVBSQU5HRV9EU1QgICAgID0gMSA8PCAxLAkvKiBtYXRjaCBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzICovCkBAIC0xMSw3ICsxMyw3IEBACiBzdHJ1Y3QgeHRfaXByYW5nZV9tdGluZm8gewogCXVuaW9uIG5mX2luZXRfYWRkciBzcmNfbWluLCBzcmNfbWF4OwogCXVuaW9uIG5mX2luZXRfYWRkciBkc3RfbWluLCBkc3RfbWF4OwotCXVfaW50OF90IGZsYWdzOworCV9fdTggZmxhZ3M7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX05FVEZJTFRFUl9YVF9JUFJBTkdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKaW5kZXggN2MyYjQzOS4uYjgyZWQ3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfWFRfTEVOR1RIX0gKICNkZWZpbmUgX1hUX0xFTkdUSF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfbGVuZ3RoX2luZm8gewotICAgIHVfaW50MTZfdAltaW4sIG1heDsKLSAgICB1X2ludDhfdAlpbnZlcnQ7CisgICAgX191MTYJbWluLCBtYXg7CisgICAgX191OAlpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfTEVOR1RIX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKaW5kZXggYjNjZTY1My4uYmI0N2ZjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCkBAIC0xLDIxICsxLDI0IEBACiAjaWZuZGVmIF9YVF9SQVRFX0gKICNkZWZpbmUgX1hUX1JBVEVfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogdGltaW5ncyBhcmUgaW4gbWlsbGlzZWNvbmRzLiAqLwogI2RlZmluZSBYVF9MSU1JVF9TQ0FMRSAxMDAwMAogCitzdHJ1Y3QgeHRfbGltaXRfcHJpdjsKKwogLyogMS8xMCwwMDAgc2VjIHBlcmlvZCA9PiBtYXggb2YgMTAsMDAwL3NlYy4gIE1pbiByYXRlIGlzIHRoZW4gNDI5NDkwCiAgICBzZWNvbmRzLCBvciBvbmUgZXZlcnkgNTkgaG91cnMuICovCiBzdHJ1Y3QgeHRfcmF0ZWluZm8gewotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKwlfX3UzMiBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCV9fdTMyIGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0JdV9pbnQzMl90IGNyZWRpdDsKLQl1X2ludDMyX3QgY3JlZGl0X2NhcCwgY29zdDsKKwl1bnNpZ25lZCBsb25nIHByZXY7IC8qIG1vdmVkIHRvIHh0X2xpbWl0X3ByaXYgKi8KKwlfX3UzMiBjcmVkaXQ7IC8qIG1vdmVkIHRvIHh0X2xpbWl0X3ByaXYgKi8KKwlfX3UzMiBjcmVkaXRfY2FwLCBjb3N0OwogCi0JLyogVWdseSwgdWdseSBmdWNrZXIuICovCi0Jc3RydWN0IHh0X3JhdGVpbmZvICptYXN0ZXI7CisJc3RydWN0IHh0X2xpbWl0X3ByaXYgKm1hc3RlcjsKIH07CiAjZW5kaWYgLypfWFRfUkFURV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaAppbmRleCBmYWU3NGJjLi42ZmE0NjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCkBAIC0xLDE0ICsxLDE2IEBACiAjaWZuZGVmIF9YVF9NQVJLX0gKICNkZWZpbmUgX1hUX01BUktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X21hcmtfaW5mbyB7CiAgICAgdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotICAgIHVfaW50OF90IGludmVydDsKKyAgICBfX3U4IGludmVydDsKIH07CiAKIHN0cnVjdCB4dF9tYXJrX210aW5mbzEgewotCXVfaW50MzJfdCBtYXJrLCBtYXNrOwotCXVfaW50OF90IGludmVydDsKKwlfX3UzMiBtYXJrLCBtYXNrOworCV9fdTggaW52ZXJ0OwogfTsKIAogI2VuZGlmIC8qX1hUX01BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCmluZGV4IGQ0OWVlNDEuLjE4NWRiNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfTVVMVElQT1JUX0gKICNkZWZpbmUgX1hUX01VTFRJUE9SVF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHh0X211bHRpcG9ydF9mbGFncwogewogCVhUX01VTFRJUE9SVF9TT1VSQ0UsCkBAIC0xMywxOCArMTUsMTggQEAKIC8qIE11c3QgZml0IGluc2lkZSB1bmlvbiB4dF9tYXRjaGluZm86IDE2IGJ5dGVzICovCiBzdHJ1Y3QgeHRfbXVsdGlwb3J0CiB7Ci0JdV9pbnQ4X3QgZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLwotCXVfaW50OF90IGNvdW50OwkJCQkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KLQl1X2ludDE2X3QgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworCV9fdTggZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLworCV9fdTggY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLworCV9fdTE2IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KIH07CiAKIHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEKIHsKLQl1X2ludDhfdCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCi0JdV9pbnQ4X3QgY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLwotCXVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCi0JdV9pbnQ4X3QgcGZsYWdzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydCBmbGFncyAqLwotCXVfaW50OF90IGludmVydDsJCQkvKiBJbnZlcnQgZmxhZyAqLworCV9fdTggZmxhZ3M7CQkJCS8qIFR5cGUgb2YgY29tcGFyaXNvbiAqLworCV9fdTggY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLworCV9fdTE2IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KKwlfX3U4IHBmbGFnc1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnQgZmxhZ3MgKi8KKwlfX3U4IGludmVydDsJCQkvKiBJbnZlcnQgZmxhZyAqLwogfTsKIAogI2VuZGlmIC8qX1hUX01VTFRJUE9SVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oCmluZGV4IGM4NGU1MmMuLjIwODE3NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX09XTkVSX01BVENIX0gKICNkZWZpbmUgX1hUX09XTkVSX01BVENIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCVhUX09XTkVSX1VJRCAgICA9IDEgPDwgMCwKIAlYVF9PV05FUl9HSUQgICAgPSAxIDw8IDEsCkBAIC04LDkgKzEwLDkgQEAKIH07CiAKIHN0cnVjdCB4dF9vd25lcl9tYXRjaF9pbmZvIHsKLQl1X2ludDMyX3QgdWlkX21pbiwgdWlkX21heDsKLQl1X2ludDMyX3QgZ2lkX21pbiwgZ2lkX21heDsKLQl1X2ludDhfdCBtYXRjaCwgaW52ZXJ0OworCV9fdTMyIHVpZF9taW4sIHVpZF9tYXg7CisJX191MzIgZ2lkX21pbiwgZ2lkX21heDsKKwlfX3U4IG1hdGNoLCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLyogX1hUX09XTkVSX01BVENIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAppbmRleCAyNWE3YTE4Li44NTU1ZTM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfUEhZU0RFVl9ICiAjZGVmaW5lIF9YVF9QSFlTREVWX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNlbmRpZgpAQCAtMTcsOCArMTksOCBAQAogCWNoYXIgaW5fbWFza1tJRk5BTVNJWl07CiAJY2hhciBwaHlzb3V0ZGV2W0lGTkFNU0laXTsKIAljaGFyIG91dF9tYXNrW0lGTkFNU0laXTsKLQl1X2ludDhfdCBpbnZlcnQ7Ci0JdV9pbnQ4X3QgYml0bWFzazsKKwlfX3U4IGludmVydDsKKwlfX3U4IGJpdG1hc2s7CiB9OwogCiAjZW5kaWYgLypfWFRfUEhZU0RFVl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgKaW5kZXggMDUzZDhjYy4uN2JiNjRlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9QT0xJQ1lfSAogI2RlZmluZSBfWFRfUE9MSUNZX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfUE9MSUNZX01BWF9FTEVNCTQKIAogZW51bSB4dF9wb2xpY3lfZmxhZ3MKQEAgLTE5LDcgKzIxLDcgQEAKIAogc3RydWN0IHh0X3BvbGljeV9zcGVjCiB7Ci0JdV9pbnQ4X3QJc2FkZHI6MSwKKwlfX3U4CXNhZGRyOjEsCiAJCQlkYWRkcjoxLAogCQkJcHJvdG86MSwKIAkJCW1vZGU6MSwKQEAgLTU1LDkgKzU3LDkgQEAKICNlbmRpZgogCX07CiAJX19iZTMyCQkJc3BpOwotCXVfaW50MzJfdAkJcmVxaWQ7Ci0JdV9pbnQ4X3QJCXByb3RvOwotCXVfaW50OF90CQltb2RlOworCV9fdTMyCQlyZXFpZDsKKwlfX3U4CQlwcm90bzsKKwlfX3U4CQltb2RlOwogCiAJc3RydWN0IHh0X3BvbGljeV9zcGVjCW1hdGNoOwogCXN0cnVjdCB4dF9wb2xpY3lfc3BlYwlpbnZlcnQ7CkBAIC02Niw4ICs2OCw4IEBACiBzdHJ1Y3QgeHRfcG9saWN5X2luZm8KIHsKIAlzdHJ1Y3QgeHRfcG9saWN5X2VsZW0gcG9sW1hUX1BPTElDWV9NQVhfRUxFTV07Ci0JdV9pbnQxNl90IGZsYWdzOwotCXVfaW50MTZfdCBsZW47CisJX191MTYgZmxhZ3M7CisJX191MTYgbGVuOwogfTsKIAogI2VuZGlmIC8qIF9YVF9QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKaW5kZXggNGM4MzY4ZC4uOGRjODlkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCkBAIC02LDEzICs2LDE1IEBACiB9OwogI2RlZmluZSBYVF9RVU9UQV9NQVNLCQkweDEKIAorc3RydWN0IHh0X3F1b3RhX3ByaXY7CisKIHN0cnVjdCB4dF9xdW90YV9pbmZvIHsKIAl1X2ludDMyX3QJCWZsYWdzOwogCXVfaW50MzJfdAkJcGFkOwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlhbGlnbmVkX3U2NAkJcXVvdGE7Ci0Jc3RydWN0IHh0X3F1b3RhX2luZm8JKm1hc3RlcjsKKwlzdHJ1Y3QgeHRfcXVvdGFfcHJpdgkqbWFzdGVyOwogfTsKIAogI2VuZGlmIC8qIF9YVF9RVU9UQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yYXRlZXN0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yYXRlZXN0LmgKaW5kZXggMjAxMGNiNy4uZDQwYTYxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1JBVEVFU1RfTUFUQ0hfSAogI2RlZmluZSBfWFRfUkFURUVTVF9NQVRDSF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHh0X3JhdGVlc3RfbWF0Y2hfZmxhZ3MgewogCVhUX1JBVEVFU1RfTUFUQ0hfSU5WRVJUCT0gMTw8MCwKIAlYVF9SQVRFRVNUX01BVENIX0FCUwk9IDE8PDEsCkBAIC0yMCwxMiArMjIsMTIgQEAKIHN0cnVjdCB4dF9yYXRlZXN0X21hdGNoX2luZm8gewogCWNoYXIJCQluYW1lMVtJRk5BTVNJWl07CiAJY2hhcgkJCW5hbWUyW0lGTkFNU0laXTsKLQl1X2ludDE2X3QJCWZsYWdzOwotCXVfaW50MTZfdAkJbW9kZTsKLQl1X2ludDMyX3QJCWJwczE7Ci0JdV9pbnQzMl90CQlwcHMxOwotCXVfaW50MzJfdAkJYnBzMjsKLQl1X2ludDMyX3QJCXBwczI7CisJX191MTYJCWZsYWdzOworCV9fdTE2CQltb2RlOworCV9fdTMyCQlicHMxOworCV9fdTMyCQlwcHMxOworCV9fdTMyCQlicHMyOworCV9fdTMyCQlwcHMyOwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlzdHJ1Y3QgeHRfcmF0ZWVzdAkqZXN0MSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaAppbmRleCAyMjBlODcyLi5kNGE4MmVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKQEAgLTEsMTAgKzEsMTIgQEAKICNpZm5kZWYgX1hUX1JFQUxNX0gKICNkZWZpbmUgX1hUX1JFQUxNX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9yZWFsbV9pbmZvIHsKLQl1X2ludDMyX3QgaWQ7Ci0JdV9pbnQzMl90IG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIGlkOworCV9fdTMyIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLyogX1hUX1JFQUxNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmgKaW5kZXggNWNmZWI4MS4uZDJjMjc2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9MSU5VWF9ORVRGSUxURVJfWFRfUkVDRU5UX0gKICNkZWZpbmUgX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSCAxCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHsKIAlYVF9SRUNFTlRfQ0hFQ0sgICAgPSAxIDw8IDAsCiAJWFRfUkVDRU5UX1NFVCAgICAgID0gMSA8PCAxLApAQCAtMTUsMTIgKzE3LDEyIEBACiB9OwogCiBzdHJ1Y3QgeHRfcmVjZW50X210aW5mbyB7Ci0JdV9pbnQzMl90IHNlY29uZHM7Ci0JdV9pbnQzMl90IGhpdF9jb3VudDsKLQl1X2ludDhfdCBjaGVja19zZXQ7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIHNlY29uZHM7CisJX191MzIgaGl0X2NvdW50OworCV9fdTggY2hlY2tfc2V0OworCV9fdTggaW52ZXJ0OwogCWNoYXIgbmFtZVtYVF9SRUNFTlRfTkFNRV9MRU5dOwotCXVfaW50OF90IHNpZGU7CisJX191OCBzaWRlOwogfTsKIAogI2VuZGlmIC8qIF9MSU5VWF9ORVRGSUxURVJfWFRfUkVDRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaAppbmRleCAzMjAwMGJhLi4yOTI4N2JlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU0NUUF9IXwogI2RlZmluZSBfWFRfU0NUUF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9TQ1RQX1NSQ19QT1JUUwkgICAgICAgIDB4MDEKICNkZWZpbmUgWFRfU0NUUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgogI2RlZmluZSBYVF9TQ1RQX0NIVU5LX1RZUEVTCQkweDA0CkBAIC04LDQ5ICsxMCw0OSBAQAogI2RlZmluZSBYVF9TQ1RQX1ZBTElEX0ZMQUdTCQkweDA3CiAKIHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyB7Ci0JdV9pbnQ4X3QgY2h1bmt0eXBlOwotCXVfaW50OF90IGZsYWc7Ci0JdV9pbnQ4X3QgZmxhZ19tYXNrOworCV9fdTggY2h1bmt0eXBlOworCV9fdTggZmxhZzsKKwlfX3U4IGZsYWdfbWFzazsKIH07CiAKICNkZWZpbmUgWFRfTlVNX1NDVFBfRkxBR1MJNAogCiBzdHJ1Y3QgeHRfc2N0cF9pbmZvIHsKLQl1X2ludDE2X3QgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCi0JdV9pbnQxNl90IHNwdHNbMl07ICAvKiBNaW4sIE1heCAqLworCV9fdTE2IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLworCV9fdTE2IHNwdHNbMl07ICAvKiBNaW4sIE1heCAqLwogCi0JdV9pbnQzMl90IGNodW5rbWFwWzI1NiAvIHNpemVvZiAodV9pbnQzMl90KV07ICAvKiBCaXQgbWFzayBvZiBjaHVua3MgdG8gYmUgbWF0Y2hlZCBhY2NvcmRpbmcgdG8gUkZDIDI5NjAgKi8KKwlfX3UzMiBjaHVua21hcFsyNTYgLyBzaXplb2YgKF9fdTMyKV07ICAvKiBCaXQgbWFzayBvZiBjaHVua3MgdG8gYmUgbWF0Y2hlZCBhY2NvcmRpbmcgdG8gUkZDIDI5NjAgKi8KIAogI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FOWSAgIDB4MDEgIC8qIE1hdGNoIGlmIGFueSBvZiB0aGUgY2h1bmsgdHlwZXMgYXJlIHByZXNlbnQgKi8KICNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTEwgICAweDAyICAvKiBNYXRjaCBpZiBhbGwgb2YgdGhlIGNodW5rIHR5cGVzIGFyZSBwcmVzZW50ICovCiAjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfT05MWSAgMHgwNCAgLyogTWF0Y2ggaWYgdGhlc2UgYXJlIHRoZSBvbmx5IGNodW5rIHR5cGVzIHByZXNlbnQgKi8KIAotCXVfaW50MzJfdCBjaHVua19tYXRjaF90eXBlOworCV9fdTMyIGNodW5rX21hdGNoX3R5cGU7CiAJc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIGZsYWdfaW5mb1tYVF9OVU1fU0NUUF9GTEFHU107CiAJaW50IGZsYWdfY291bnQ7CiAKLQl1X2ludDMyX3QgZmxhZ3M7Ci0JdV9pbnQzMl90IGludmZsYWdzOworCV9fdTMyIGZsYWdzOworCV9fdTMyIGludmZsYWdzOwogfTsKIAogI2RlZmluZSBieXRlcyh0eXBlKSAoc2l6ZW9mKHR5cGUpICogOCkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1NFVChjaHVua21hcCwgdHlwZSkgCQlcCiAJZG8geyAJCQkJCQlcCi0JCShjaHVua21hcClbdHlwZSAvIGJ5dGVzKHVfaW50MzJfdCldIHw9IAlcCi0JCQkxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSk7CVwKKwkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMoX191MzIpXSB8PSAJXAorCQkJMSA8PCAodHlwZSAlIGJ5dGVzKF9fdTMyKSk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ0xFQVIoY2h1bmttYXAsIHR5cGUpCQkgCVwKIAlkbyB7CQkJCQkJCVwKLQkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gJj0gCQlcCi0JCQl+KDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKSk7CVwKKwkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMoX191MzIpXSAmPSAJCVwKKwkJCX4oMSA8PCAodHlwZSAlIGJ5dGVzKF9fdTMyKSkpOwlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX1NFVChjaHVua21hcCwgdHlwZSkgCQkJXAogKHsJCQkJCQkJCVwKLQkoKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMgKHVfaW50MzJfdCldICYgCQlcCi0JCSgxIDw8ICh0eXBlICUgYnl0ZXMgKHVfaW50MzJfdCkpKSkgPyAxOiAwOwlcCisJKChjaHVua21hcClbdHlwZSAvIGJ5dGVzIChfX3UzMildICYgCQlcCisJCSgxIDw8ICh0eXBlICUgYnl0ZXMgKF9fdTMyKSkpKSA/IDE6IDA7CVwKIH0pCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9SRVNFVChjaHVua21hcCkgXApAQCAtNjUsNyArNjcsNyBAQAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0NMRUFSKGNodW5rbWFwKSBcCiAJX19zY3RwX2NodW5rbWFwX2lzX2NsZWFyKChjaHVua21hcCksIEFSUkFZX1NJWkUoY2h1bmttYXApKQogc3RhdGljIGlubGluZSBib29sCi1fX3NjdHBfY2h1bmttYXBfaXNfY2xlYXIoY29uc3QgdV9pbnQzMl90ICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCitfX3NjdHBfY2h1bmttYXBfaXNfY2xlYXIoY29uc3QgX191MzIgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQpAQCAtNzcsNyArNzksNyBAQAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0FMTF9TRVQoY2h1bmttYXApIFwKIAlfX3NjdHBfY2h1bmttYXBfaXNfYWxsX3NldCgoY2h1bmttYXApLCBBUlJBWV9TSVpFKGNodW5rbWFwKSkKIHN0YXRpYyBpbmxpbmUgYm9vbAotX19zY3RwX2NodW5rbWFwX2lzX2FsbF9zZXQoY29uc3QgdV9pbnQzMl90ICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCitfX3NjdHBfY2h1bmttYXBfaXNfYWxsX3NldChjb25zdCBfX3UzMiAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCmluZGV4IDNkMzhiYzkuLjRlOTgzZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU1RBVElTVElDX0gKICNkZWZpbmUgX1hUX1NUQVRJU1RJQ19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHh0X3N0YXRpc3RpY19tb2RlIHsKIAlYVF9TVEFUSVNUSUNfTU9ERV9SQU5ET00sCiAJWFRfU1RBVElTVElDX01PREVfTlRILApAQCAtMTMsMjEgKzE1LDIyIEBACiB9OwogI2RlZmluZSBYVF9TVEFUSVNUSUNfTUFTSwkJMHgxCiAKK3N0cnVjdCB4dF9zdGF0aXN0aWNfcHJpdjsKKwogc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvIHsKLQl1X2ludDE2X3QJCQltb2RlOwotCXVfaW50MTZfdAkJCWZsYWdzOworCV9fdTE2CQkJbW9kZTsKKwlfX3UxNgkJCWZsYWdzOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVfaW50MzJfdAlwcm9iYWJpbGl0eTsKKwkJCV9fdTMyCXByb2JhYmlsaXR5OwogCQl9IHJhbmRvbTsKIAkJc3RydWN0IHsKLQkJCXVfaW50MzJfdAlldmVyeTsKLQkJCXVfaW50MzJfdAlwYWNrZXQ7Ci0JCQkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwotCQkJdV9pbnQzMl90CWNvdW50OworCQkJX191MzIJZXZlcnk7CisJCQlfX3UzMglwYWNrZXQ7CisJCQlfX3UzMgljb3VudDsgLyogdW51c2VkICovCiAJCX0gbnRoOwogCX0gdTsKLQlzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8JKm1hc3RlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisJc3RydWN0IHh0X3N0YXRpc3RpY19wcml2ICptYXN0ZXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwogfTsKIAogI2VuZGlmIC8qIF9YVF9TVEFUSVNUSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaAppbmRleCA4YTZiYTdiLi5lY2JiOTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1NUUklOR19ICiAjZGVmaW5lIF9YVF9TVFJJTkdfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRSAxMjgKICNkZWZpbmUgWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRSAxNgogCkBAIC0xMSwxOCArMTMsMTggQEAKIAogc3RydWN0IHh0X3N0cmluZ19pbmZvCiB7Ci0JdV9pbnQxNl90IGZyb21fb2Zmc2V0OwotCXVfaW50MTZfdCB0b19vZmZzZXQ7CisJX191MTYgZnJvbV9vZmZzZXQ7CisJX191MTYgdG9fb2Zmc2V0OwogCWNoYXIJICBhbGdvW1hUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkVdOwogCWNoYXIgCSAgcGF0dGVybltYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRV07Ci0JdV9pbnQ4X3QgIHBhdGxlbjsKKwlfX3U4ICBwYXRsZW47CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQ4X3QgIGludmVydDsKKwkJCV9fdTggIGludmVydDsKIAkJfSB2MDsKIAogCQlzdHJ1Y3QgewotCQkJdV9pbnQ4X3QgIGZsYWdzOworCQkJX191OCAgZmxhZ3M7CiAJCX0gdjE7CiAJfSB1OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oCmluZGV4IGUwMzI3NGMuLmZiYWM1NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oCkBAIC0xLDkgKzEsMTEgQEAKICNpZm5kZWYgX1hUX1RDUE1TU19NQVRDSF9ICiAjZGVmaW5lIF9YVF9UQ1BNU1NfTUFUQ0hfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3RjcG1zc19tYXRjaF9pbmZvIHsKLSAgICB1X2ludDE2X3QgbXNzX21pbiwgbXNzX21heDsKLSAgICB1X2ludDhfdCBpbnZlcnQ7CisgICAgX191MTYgbXNzX21pbiwgbXNzX21heDsKKyAgICBfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9UQ1BNU1NfTUFUQ0hfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oCmluZGV4IDc4YmM2NWYuLmE0OTBhMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oCkBAIC0xLDE1ICsxLDE3IEBACiAjaWZuZGVmIF9YVF9UQ1BVRFBfSAogI2RlZmluZSBfWFRfVENQVURQX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFRDUCBtYXRjaGluZyBzdHVmZiAqLwogc3RydWN0IHh0X3RjcAogewotCXVfaW50MTZfdCBzcHRzWzJdOwkJCS8qIFNvdXJjZSBwb3J0IHJhbmdlLiAqLwotCXVfaW50MTZfdCBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQ4X3Qgb3B0aW9uOwkJCS8qIFRDUCBPcHRpb24gaWZmIG5vbi16ZXJvKi8KLQl1X2ludDhfdCBmbGdfbWFzazsJCQkvKiBUQ1AgZmxhZ3MgbWFzayBieXRlICovCi0JdV9pbnQ4X3QgZmxnX2NtcDsJCQkvKiBUQ1AgZmxhZ3MgY29tcGFyZSBieXRlICovCi0JdV9pbnQ4X3QgaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworCV9fdTE2IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCisJX191MTYgZHB0c1syXTsJCQkvKiBEZXN0aW5hdGlvbiBwb3J0IHJhbmdlLiAqLworCV9fdTggb3B0aW9uOwkJCS8qIFRDUCBPcHRpb24gaWZmIG5vbi16ZXJvKi8KKwlfX3U4IGZsZ19tYXNrOwkJCS8qIFRDUCBmbGFncyBtYXNrIGJ5dGUgKi8KKwlfX3U4IGZsZ19jbXA7CQkJLyogVENQIGZsYWdzIGNvbXBhcmUgYnl0ZSAqLworCV9fdTggaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLwogfTsKIAogLyogVmFsdWVzIGZvciAiaW52IiBmaWVsZCBpbiBzdHJ1Y3QgaXB0X3RjcC4gKi8KQEAgLTIyLDkgKzI0LDkgQEAKIC8qIFVEUCBtYXRjaGluZyBzdHVmZiAqLwogc3RydWN0IHh0X3VkcAogewotCXVfaW50MTZfdCBzcHRzWzJdOwkJCS8qIFNvdXJjZSBwb3J0IHJhbmdlLiAqLwotCXVfaW50MTZfdCBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQ4X3QgaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLworCV9fdTE2IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCisJX191MTYgZHB0c1syXTsJCQkvKiBEZXN0aW5hdGlvbiBwb3J0IHJhbmdlLiAqLworCV9fdTggaW52ZmxhZ3M7CQkJLyogSW52ZXJzZSBmbGFncyAqLwogfTsKIAogLyogVmFsdWVzIGZvciAiaW52ZmxhZ3MiIGZpZWxkIGluIHN0cnVjdCBpcHRfdWRwLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaAppbmRleCA0OTlhYTkzLi5mODEwNWU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApAQCAtNTksOSArNTksOSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpOgorCWNhc2UgX19jcHVfdG9fYmUxNihFVEhfUF84MDIxUSk6CiAJCXJldHVybiBWTEFOX0hMRU47Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1BQUF9TRVMpOgorCWNhc2UgX19jcHVfdG9fYmUxNihFVEhfUF9QUFBfU0VTKToKIAkJcmV0dXJuIFBQUE9FX1NFU19ITEVOOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmgKaW5kZXggOTJmNGJkYS4uYTc4NDQ1YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaApAQCAtOSwxMCArOSwxMCBAQAogI2RlZmluZSBJUFRfT1dORVJfQ09NTQkweDEwCiAKIHN0cnVjdCBpcHRfb3duZXJfaW5mbyB7Ci0gICAgdWlkX3QgdWlkOwotICAgIGdpZF90IGdpZDsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgcGlkX3Qgc2lkOworICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOworICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOworICAgIF9fa2VybmVsX3BpZF90IHBpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBzaWQ7CiAgICAgY2hhciBjb21tWzE2XTsKICAgICB1X2ludDhfdCBtYXRjaCwgaW52ZXJ0OwkvKiBmbGFncyAqLwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQKaW5kZXggODg4N2E1Zi4uYWNhNGJkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQKQEAgLTExLDYgKzExLDcgQEAKIGhlYWRlci15ICs9IGlwNnRfbGltaXQuaAogaGVhZGVyLXkgKz0gaXA2dF9tYWMuaAogaGVhZGVyLXkgKz0gaXA2dF9tYXJrLmgKK2hlYWRlci15ICs9IGlwNnRfbWguaAogaGVhZGVyLXkgKz0gaXA2dF9tdWx0aXBvcnQuaAogaGVhZGVyLXkgKz0gaXA2dF9vcHRzLmgKIGhlYWRlci15ICs9IGlwNnRfb3duZXIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaAppbmRleCAxOTkzN2RhLi5lYzVjYzdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaApAQCAtOCwxMCArOCwxMCBAQAogI2RlZmluZSBJUDZUX09XTkVSX1NJRAkweDA4CiAKIHN0cnVjdCBpcDZ0X293bmVyX2luZm8gewotICAgIHVpZF90IHVpZDsKLSAgICBnaWRfdCBnaWQ7Ci0gICAgcGlkX3QgcGlkOwotICAgIHBpZF90IHNpZDsKKyAgICBfX2tlcm5lbF91aWQzMl90IHVpZDsKKyAgICBfX2tlcm5lbF9naWQzMl90IGdpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBwaWQ7CisgICAgX19rZXJuZWxfcGlkX3Qgc2lkOwogICAgIHVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CS8qIGZsYWdzICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCmluZGV4IDUxYjA5YTEuLjViYTM5OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCkBAIC0xMDMsNiArMTAzLDggQEAKICNkZWZpbmUgTkVUTElOS19BRERfTUVNQkVSU0hJUAkxCiAjZGVmaW5lIE5FVExJTktfRFJPUF9NRU1CRVJTSElQCTIKICNkZWZpbmUgTkVUTElOS19QS1RJTkZPCQkzCisjZGVmaW5lIE5FVExJTktfQlJPQURDQVNUX0VSUk9SCTQKKyNkZWZpbmUgTkVUTElOS19OT19FTk9CVUZTCTUKIAogc3RydWN0IG5sX3BrdGluZm8KIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggZTM4ZDNjOS4uZGU5OTAyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKQEAgLTYzLDYgKzYzLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbmV0cG9sbF9yeF9vbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9IHNrYi0+ZGV2LT5ucGluZm87CisKKwlyZXR1cm4gbnBpbmZvICYmIChucGluZm8tPnJ4X25wIHx8IG5waW5mby0+cnhfZmxhZ3MpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKCFsaXN0X2VtcHR5KCZza2ItPmRldi0+bmFwaV9saXN0KSkKQEAgLTk5LDYgKzEwNiwxMCBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgbmV0cG9sbF9yeF9vbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAwOworfQogc3RhdGljIGlubGluZSBpbnQgbmV0cG9sbF9yZWNlaXZlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAppbmRleCBlODZlZDU5Li5mMzNhYTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaApAQCAtNDcsNyArNDcsNyBAQAogICogQE5MODAyMTFfQ01EX1NFVF9XSVBIWTogc2V0IHdpcGh5IHBhcmFtZXRlcnMsIG5lZWRzICVOTDgwMjExX0FUVFJfV0lQSFkgb3IKICAqCSVOTDgwMjExX0FUVFJfSUZJTkRFWDsgY2FuIGJlIHVzZWQgdG8gc2V0ICVOTDgwMjExX0FUVFJfV0lQSFlfTkFNRSwKICAqCSVOTDgwMjExX0FUVFJfV0lQSFlfVFhRX1BBUkFNUywgJU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRLCBhbmQvb3IKLSAqCSVOTDgwMjExX0FUVFJfV0lQSFlfU0VDX0NIQU5fT0ZGU0VULgorICoJJU5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUuCiAgKiBATkw4MDIxMV9DTURfTkVXX1dJUEhZOiBOZXdseSBjcmVhdGVkIHdpcGh5LCByZXNwb25zZSB0byBnZXQgcmVxdWVzdAogICoJb3IgcmVuYW1lIG5vdGlmaWNhdGlvbi4gSGFzIGF0dHJpYnV0ZXMgJU5MODAyMTFfQVRUUl9XSVBIWSBhbmQKICAqCSVOTDgwMjExX0FUVFJfV0lQSFlfTkFNRS4KQEAgLTcyLDggKzcyLDggQEAKICAqCiAgKiBATkw4MDIxMV9DTURfR0VUX0tFWTogR2V0IHNlcXVlbmNlIGNvdW50ZXIgaW5mb3JtYXRpb24gZm9yIGEga2V5IHNwZWNpZmllZAogICoJYnkgJU5MODAyMTFfQVRUUl9LRVlfSURYIGFuZC9vciAlTkw4MDIxMV9BVFRSX01BQy4KLSAqIEBOTDgwMjExX0NNRF9TRVRfS0VZOiBTZXQga2V5IGF0dHJpYnV0ZXMgJU5MODAyMTFfQVRUUl9LRVlfREVGQVVMVCBvcgotICoJJU5MODAyMTFfQVRUUl9LRVlfVEhSRVNIT0xELgorICogQE5MODAyMTFfQ01EX1NFVF9LRVk6IFNldCBrZXkgYXR0cmlidXRlcyAlTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxULAorICoJJU5MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01ULCBvciAlTkw4MDIxMV9BVFRSX0tFWV9USFJFU0hPTEQuCiAgKiBATkw4MDIxMV9DTURfTkVXX0tFWTogYWRkIGEga2V5IHdpdGggZ2l2ZW4gJU5MODAyMTFfQVRUUl9LRVlfREFUQSwKICAqCSVOTDgwMjExX0FUVFJfS0VZX0lEWCwgJU5MODAyMTFfQVRUUl9NQUMgYW5kICVOTDgwMjExX0FUVFJfS0VZX0NJUEhFUgogICoJYXR0cmlidXRlcy4KQEAgLTg0LDcgKzg0LDcgQEAKICAqCSVOTDgwMjIyX0NNRF9ORVdfQkVBQ09OIG1lc3NhZ2UpCiAgKiBATkw4MDIxMV9DTURfU0VUX0JFQUNPTjogc2V0IHRoZSBiZWFjb24gb24gYW4gYWNjZXNzIHBvaW50IGludGVyZmFjZQogICoJdXNpbmcgdGhlICVOTDgwMjExX0FUVFJfQkVBQ09OX0lOVEVSVkFMLCAlTkw4MDIxMV9BVFRSX0RUSU1fUEVSSU9ELAotICoJJU5MODAyMTFfQkVBQ09OX0hFQUQgYW5kICVOTDgwMjExX0JFQUNPTl9UQUlMIGF0dHJpYnV0ZXMuCisgKgklTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEIGFuZCAlTkw4MDIxMV9BVFRSX0JFQUNPTl9UQUlMIGF0dHJpYnV0ZXMuCiAgKiBATkw4MDIxMV9DTURfTkVXX0JFQUNPTjogYWRkIGEgbmV3IGJlYWNvbiB0byBhbiBhY2Nlc3MgcG9pbnQgaW50ZXJmYWNlLAogICoJcGFyYW1ldGVycyBhcmUgbGlrZSBmb3IgJU5MODAyMTFfQ01EX1NFVF9CRUFDT04uCiAgKiBATkw4MDIxMV9DTURfREVMX0JFQUNPTjogcmVtb3ZlIHRoZSBiZWFjb24sIHN0b3Agc2VuZGluZyBpdApAQCAtMTEzLDYgKzExMyw4IEBACiAgKiBATkw4MDIxMV9DTURfU0VUX0JTUzogU2V0IEJTUyBhdHRyaWJ1dGVzIGZvciBCU1MgaWRlbnRpZmllZCBieQogICoJJU5MODAyMTFfQVRUUl9JRklOREVYLgogICoKKyAqIEBOTDgwMjExX0NNRF9HRVRfUkVHOiBhc2sgdGhlIHdpcmVsZXNzIGNvcmUgdG8gc2VuZCB1cyBpdHMgY3VycmVudGx5IHNldAorICogCXJlZ3VsYXRvcnkgZG9tYWluLgogICogQE5MODAyMTFfQ01EX1NFVF9SRUc6IFNldCBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLiBDUkRBIHNlbmRzIHRoaXMgY29tbWFuZAogICoJYWZ0ZXIgYmVpbmcgcXVlcmllZCBieSB0aGUga2VybmVsLiBDUkRBIHJlcGxpZXMgYnkgc2VuZGluZyBhIHJlZ3VsYXRvcnkKICAqCWRvbWFpbiBzdHJ1Y3R1cmUgd2hpY2ggY29uc2lzdHMgb2YgJU5MODAyMTFfQVRUUl9SRUdfQUxQSEEgc2V0IHRvIG91cgpAQCAtMTMzLDYgKzEzNSwzMiBAQAogICogQE5MODAyMTFfQ01EX1NFVF9NRVNIX1BBUkFNUzogU2V0IG1lc2ggbmV0d29ya2luZyBwcm9wZXJ0aWVzIGZvciB0aGUKICAqICAgICAgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkgJU5MODAyMTFfQVRUUl9JRklOREVYCiAgKgorICogQE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFOiBTZXQgZXh0cmEgSUVzIGZvciBtYW5hZ2VtZW50IGZyYW1lcy4gVGhlCisgKglpbnRlcmZhY2UgaXMgaWRlbnRpZmllZCB3aXRoICVOTDgwMjExX0FUVFJfSUZJTkRFWCBhbmQgdGhlIG1hbmFnZW1lbnQKKyAqCWZyYW1lIHN1YnR5cGUgd2l0aCAlTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRS4gVGhlIGV4dHJhIElFIGRhdGEgdG8gYmUKKyAqCWFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHNwZWNpZmllZCBtYW5hZ2VtZW50IGZyYW1lIGlzIHNwZWNpZmllZCB3aXRoCisgKgklTkw4MDIxMV9BVFRSX0lFLiBJZiB0aGUgY29tbWFuZCBzdWNjZWVkcywgdGhlIHJlcXVlc3RlZCBkYXRhIHdpbGwgYmUKKyAqCWFkZGVkIHRvIGFsbCBzcGVjaWZpZWQgbWFuYWdlbWVudCBmcmFtZXMgZ2VuZXJhdGVkIGJ5CisgKglrZXJuZWwvZmlybXdhcmUvZHJpdmVyLgorICoKKyAqIEBOTDgwMjExX0NNRF9HRVRfU0NBTjogZ2V0IHNjYW4gcmVzdWx0cworICogQE5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTjogdHJpZ2dlciBhIG5ldyBzY2FuIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMKKyAqIEBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTOiBzY2FuIG5vdGlmaWNhdGlvbiAoYXMgYSByZXBseSB0bworICoJTkw4MDIxMV9DTURfR0VUX1NDQU4gYW5kIG9uIHRoZSAic2NhbiIgbXVsdGljYXN0IGdyb3VwKQorICogQE5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRDogc2NhbiB3YXMgYWJvcnRlZCwgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbnMsCisgKglwYXJ0aWFsIHNjYW4gcmVzdWx0cyBtYXkgYmUgYXZhaWxhYmxlCisgKgorICogQE5MODAyMTFfQ01EX1JFR19DSEFOR0U6IGluZGljYXRlcyB0byB1c2Vyc3BhY2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJaGFzIGJlZW4gY2hhbmdlZCBhbmQgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgcmVxdWVzdCBpbmZvcm1hdGlvbgorICogCXRoYXQgY2F1c2VkIHRoZSBjaGFuZ2Ugc3VjaCBhcyB3aG8gaW5pdGlhdGVkIHRoZSByZWd1bGF0b3J5IHJlcXVlc3QKKyAqIAkoJU5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SKSwgdGhlIHdpcGh5X2lkeAorICogCSglTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIpIG9uIHdoaWNoIHRoZSByZXF1ZXN0IHdhcyBtYWRlIGZyb20gaWYKKyAqIAl0aGUgaW5pdGlhdG9yIHdhcyAlTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgb3IKKyAqIAklTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiwgdGhlIHR5cGUgb2YgcmVndWxhdG9yeSBkb21haW4KKyAqIAlzZXQgKCVOTDgwMjExX0FUVFJfUkVHX1RZUEUpLCBpZiB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbiBpcworICogCSVOTDgwMjExX1JFR19UWVBFX0NPVU5UUlkgdGhlIGFscGhhMiB0byB3aGljaCB3ZSBoYXZlIG1vdmVkIG9uCisgKiAJdG8gKCVOTDgwMjExX0FUVFJfUkVHX0FMUEhBMikuCisgKgogICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyCiAgKiBAX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMTc4LDYgKzIwNiwxNyBAQAogCU5MODAyMTFfQ01EX0dFVF9NRVNIX1BBUkFNUywKIAlOTDgwMjExX0NNRF9TRVRfTUVTSF9QQVJBTVMsCiAKKwlOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRSwKKworCU5MODAyMTFfQ01EX0dFVF9SRUcsCisKKwlOTDgwMjExX0NNRF9HRVRfU0NBTiwKKwlOTDgwMjExX0NNRF9UUklHR0VSX1NDQU4sCisJTkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUywKKwlOTDgwMjExX0NNRF9TQ0FOX0FCT1JURUQsCisKKwlOTDgwMjExX0NNRF9SRUdfQ0hBTkdFLAorCiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KQEAgLTE5MCw2ICsyMjksOSBAQAogICogaGVyZQogICovCiAjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9CU1MgTkw4MDIxMV9DTURfU0VUX0JTUworI2RlZmluZSBOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRSBOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRQorCisjZGVmaW5lIE5MODAyMTFfQ01EX1JFR19DSEFOR0UgTkw4MDIxMV9DTURfUkVHX0NIQU5HRQogCiAvKioKICAqIGVudW0gbmw4MDIxMV9hdHRycyAtIG5sODAyMTEgbmV0bGluayBhdHRyaWJ1dGVzCkBAIC0yODQsNiArMzI2LDI5IEBACiAgKglzdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGVzLCBlYWNoIGEgZmxhZyBhdHRyaWJ1dGUgd2l0aCB0aGUgbnVtYmVyCiAgKglvZiB0aGUgaW50ZXJmYWNlIG1vZGUuCiAgKgorICogQE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEU6IE1hbmFnZW1lbnQgZnJhbWUgc3VidHlwZSBmb3IKKyAqCSVOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0lFOiBJbmZvcm1hdGlvbiBlbGVtZW50KHMpIGRhdGEgKHVzZWQsIGUuZy4sIHdpdGgKKyAqCSVOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRSkuCisgKgorICogQE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFM6IG51bWJlciBvZiBTU0lEcyB5b3UgY2FuIHNjYW4gd2l0aAorICoJYSBzaW5nbGUgc2NhbiByZXF1ZXN0LCBhIHdpcGh5IGF0dHJpYnV0ZS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVM6IG5lc3RlZCBhdHRyaWJ1dGUgd2l0aCBmcmVxdWVuY2llcyAoaW4gTUh6KQorICogQE5MODAyMTFfQVRUUl9TQ0FOX1NTSURTOiBuZXN0ZWQgYXR0cmlidXRlIHdpdGggU1NJRHMsIGxlYXZlIG91dCBmb3IgcGFzc2l2ZQorICoJc2Nhbm5pbmcgYW5kIGluY2x1ZGUgYSB6ZXJvLWxlbmd0aCBTU0lEICh3aWxkY2FyZCkgZm9yIHdpbGRjYXJkIHNjYW4KKyAqIEBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OOiB0aGUgc2NhbiBnZW5lcmF0aW9uIGluY3JlYXNlcyB3aGVuZXZlciB0aGUKKyAqCXNjYW4gcmVzdWx0IGxpc3QgY2hhbmdlcyAoQlNTIGV4cGlyZWQgb3IgYWRkZWQpIHNvIHRoYXQgYXBwbGljYXRpb25zCisgKgljYW4gdmVyaWZ5IHRoYXQgdGhleSBnb3QgYSBzaW5nbGUsIGNvbnNpc3RlbnQgc25hcHNob3QgKHdoZW4gYWxsIGR1bXAKKyAqCW1lc3NhZ2VzIGNhcnJpZWQgdGhlIHNhbWUgZ2VuZXJhdGlvbiBudW1iZXIpCisgKiBATkw4MDIxMV9BVFRSX0JTUzogc2NhbiByZXN1bHQgQlNTCisgKgorICogQE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SOiBpbmRpY2F0ZXMgd2hvIHJlcXVlc3RlZCB0aGUgcmVndWxhdG9yeSBkb21haW4KKyAqIAljdXJyZW50bHkgaW4gZWZmZWN0LiBUaGlzIGNvdWxkIGJlIGFueSBvZiB0aGUgJU5MODAyMTFfUkVHRE9NX1NFVF9CWV8qCisgKiBATkw4MDIxMV9BVFRSX1JFR19UWVBFOiBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGN1cnJlbnRseQorICogCXNldC4gVGhpcyBjYW4gYmUgb25lIG9mIHRoZSBubDgwMjExX3JlZ190eXBlICglTkw4MDIxMV9SRUdET01fVFlQRV8qKQorICoKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMzQ2LDYgKzQxMSwyMSBAQAogCU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRLAogCU5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUsCiAKKwlOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVCwKKworCU5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUsCisJTkw4MDIxMV9BVFRSX0lFLAorCisJTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKKworCU5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTLAorCU5MODAyMTFfQVRUUl9TQ0FOX1NTSURTLAorCU5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04sCisJTkw4MDIxMV9BVFRSX0JTUywKKworCU5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLAorCU5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKQEAgLTM2MCw3ICs0NDAsMTEgQEAKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUyBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRCi0jZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9TRUNfQ0hBTl9PRkZTRVQgTkw4MDIxMV9BVFRSX1dJUEhZX1NFQ19DSEFOX09GRlNFVAorI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRSBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9JRSBOTDgwMjExX0FUVFJfSUUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19UWVBFIE5MODAyMTFfQVRUUl9SRUdfVFlQRQogCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkFURVMJCQkzMgogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUwkJMzIKQEAgLTQxMiwxMiArNDk2LDE0IEBACiAgKiBATkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRTogc3RhdGlvbiBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZyBmcmFtZXMKICAqCXdpdGggc2hvcnQgYmFya2VyIHByZWFtYmxlCiAgKiBATkw4MDIxMV9TVEFfRkxBR19XTUU6IHN0YXRpb24gaXMgV01FL1FvUyBjYXBhYmxlCisgKiBATkw4MDIxMV9TVEFfRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KICAqLwogZW51bSBubDgwMjExX3N0YV9mbGFncyB7CiAJX19OTDgwMjExX1NUQV9GTEFHX0lOVkFMSUQsCiAJTkw4MDIxMV9TVEFfRkxBR19BVVRIT1JJWkVELAogCU5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUsCiAJTkw4MDIxMV9TVEFfRkxBR19XTUUsCisJTkw4MDIxMV9TVEFfRkxBR19NRlAsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKQEAgLTQ2NSw2ICs1NTEsOSBAQAogICogQE5MODAyMTFfU1RBX0lORk9fU0lHTkFMOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBQUERVICh1OCwgZEJtKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURTogY3VycmVudCB1bmljYXN0IHR4IHJhdGUsIG5lc3RlZCBhdHRyaWJ1dGUKICAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvX3R4cmF0ZS4KKyAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFM6IHRvdGFsIHJlY2VpdmVkIHBhY2tldCAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFM6IHRvdGFsIHRyYW5zbWl0dGVkIHBhY2tldHMgKHUzMiwgdG8gdGhpcworICoJc3RhdGlvbikKICAqLwogZW51bSBubDgwMjExX3N0YV9pbmZvIHsKIAlfX05MODAyMTFfU1RBX0lORk9fSU5WQUxJRCwKQEAgLTQ3Niw2ICs1NjUsOCBAQAogCU5MODAyMTFfU1RBX0lORk9fUExJTktfU1RBVEUsCiAJTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwsCiAJTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFLAorCU5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKKwlOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKQEAgLTYwNyw2ICs2OTgsNDggQEAKIH07CiAKIC8qKgorICogZW51bSBubDgwMjExX2luaXRpYXRvciAtIEluZGljYXRlcyB0aGUgaW5pdGlhdG9yIG9mIGEgcmVnIGRvbWFpbiByZXF1ZXN0CisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6IENvcmUgcXVlcmllZCBDUkRBIGZvciBhIGR5bmFtaWMgd29ybGQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUjogVXNlciBhc2tlZCB0aGUgd2lyZWxlc3MgY29yZSB0byBzZXQgdGhlCisgKiAJcmVndWxhdG9yeSBkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjogYSB3aXJlbGVzcyBkcml2ZXJzIGhhcyBoaW50ZWQgdG8gdGhlCisgKiAJd2lyZWxlc3MgY29yZSBpdCB0aGlua3MgaXRzIGtub3dzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3ZSBzaG91bGQgYmUgaW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbgorICogCTgwMi4xMSBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQgd2l0aCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGl0CisgKiAJdGhpbmtzIHdlIHNob3VsZCBjb25zaWRlci4KKyAqLworZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgeworCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUsCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9yZWdfdHlwZSAtIHNwZWNpZmllcyB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfQ09VTlRSWTogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyBvbmUgdGhhdCBwZXJ0YWlucworICoJdG8gYSBzcGVjaWZpYyBjb3VudHJ5LiBXaGVuIHRoaXMgaXMgc2V0IHlvdSBjYW4gY291bnQgb24gdGhlCisgKglJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGJlaW5nIHZhbGlkLgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQ6IHRoZSByZWd1bGF0b3J5IHNldCBkb21haW4gaXMgdGhlIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQ6IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgYSBjdXN0b20KKyAqIAlkcml2ZXIgc3BlY2lmaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4uIFRoZXNlIGRvIG5vdCBhcHBseSBzeXN0ZW0td2lkZQorICogCWFuZCBhcmUgb25seSBhcHBsaWNhYmxlIHRvIHRoZSBpbmRpdmlkdWFsIGRldmljZXMgd2hpY2ggaGF2ZSByZXF1ZXN0ZWQKKyAqIAl0aGVtIHRvIGJlIGFwcGxpZWQuCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT046IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgdGhlIHByb2R1Y3QKKyAqCW9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbnMgLS0gdGhlIHByZXZpb3VzbHkKKyAqCXNldCByZWd1bGF0b3J5IGRvbWFpbiBvbiB0aGUgc3lzdGVtIGFuZCB0aGUgbGFzdCBhY2NlcHRlZCByZWd1bGF0b3J5CisgKglkb21haW4gcmVxdWVzdCB0byBiZSBwcm9jZXNzZWQuCisgKi8KK2VudW0gbmw4MDIxMV9yZWdfdHlwZSB7CisJTkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZLAorCU5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT04sCit9OworCisvKioKICAqIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9hdHRyIC0gcmVndWxhdG9yeSBydWxlIGF0dHJpYnV0ZXMKICAqIEBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1M6IGEgc2V0IG9mIGZsYWdzIHdoaWNoIHNwZWNpZnkgYWRkaXRpb25hbAogICogCWNvbnNpZGVyYXRpb25zIGZvciBhIGdpdmVuIGZyZXF1ZW5jeSByYW5nZS4gVGhlc2UgYXJlIHRoZQpAQCAtODExLDQgKzk0NCwzOCBAQAogCU5MODAyMTFfQ0hBTl9IVDQwTUlOVVMsCiAJTkw4MDIxMV9DSEFOX0hUNDBQTFVTCiB9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9ic3MgLSBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGEgQlNTCisgKgorICogQF9fTkw4MDIxMV9CU1NfSU5WQUxJRDogaW52YWxpZAorICogQE5MODAyMTFfQlNTX0ZSRVFVRU5DWTogZnJlcXVlbmN5IGluIE1IeiAodTMyKQorICogQE5MODAyMTFfQlNTX1RTRjogVFNGIG9mIHRoZSByZWNlaXZlZCBwcm9iZSByZXNwb25zZS9iZWFjb24gKHU2NCkKKyAqIEBOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUw6IGJlYWNvbiBpbnRlcnZhbCBvZiB0aGUgKEkpQlNTICh1MTYpCisgKiBATkw4MDIxMV9CU1NfQ0FQQUJJTElUWTogY2FwYWJpbGl0eSBmaWVsZCAoQ1BVIG9yZGVyLCB1MTYpCisgKiBATkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFM6IGJpbmFyeSBhdHRyaWJ1dGUgY29udGFpbmluZyB0aGUKKyAqCXJhdyBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24gKGJpbikKKyAqIEBOTDgwMjExX0JTU19TSUdOQUxfTUJNOiBzaWduYWwgc3RyZW5ndGggb2YgcHJvYmUgcmVzcG9uc2UvYmVhY29uCisgKglpbiBtQm0gKDEwMCAqIGRCbSkgKHMzMikKKyAqIEBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDOiBzaWduYWwgc3RyZW5ndGggb2YgdGhlIHByb2JlIHJlc3BvbnNlL2JlYWNvbgorICoJaW4gdW5zcGVjaWZpZWQgdW5pdHMsIHNjYWxlZCB0byAwLi4xMDAgKHU4KQorICogQF9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVDogaW50ZXJuYWwKKyAqIEBOTDgwMjExX0JTU19NQVg6IGhpZ2hlc3QgQlNTIGF0dHJpYnV0ZQorICovCitlbnVtIG5sODAyMTFfYnNzIHsKKwlfX05MODAyMTFfQlNTX0lOVkFMSUQsCisJTkw4MDIxMV9CU1NfQlNTSUQsCisJTkw4MDIxMV9CU1NfRlJFUVVFTkNZLAorCU5MODAyMTFfQlNTX1RTRiwKKwlOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUwsCisJTkw4MDIxMV9CU1NfQ0FQQUJJTElUWSwKKwlOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUywKKwlOTDgwMjExX0JTU19TSUdOQUxfTUJNLAorCU5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfQlNTX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9CU1NfTUFYID0gX19OTDgwMjExX0JTU19BRlRFUl9MQVNUIC0gMQorfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L251YnVzLmggYi9pbmNsdWRlL2xpbnV4L251YnVzLmgKaW5kZXggNzM4MmFmMy4uZTEzN2IzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9udWJ1cy5oCisrKyBiL2luY2x1ZGUvbGludXgvbnVidXMuaApAQCAtMjM3LDYgKzIzNyw3IEBACiAJaW50IG1hc2s7CiB9OwogCisjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IG51YnVzX2JvYXJkIHsKIAlzdHJ1Y3QgbnVidXNfYm9hcmQqIG5leHQ7CiAJc3RydWN0IG51YnVzX2RldiogZmlyc3RfZGV2OwpAQCAtMzUxLDYgKzM1Miw3IEBACiB2b2lkIG51YnVzX2dldF9yc3JjX3N0cih2b2lkKiBkZXN0LAogCQkJY29uc3Qgc3RydWN0IG51YnVzX2RpcmVudCAqZGlyZW50LAogCQkJaW50IG1heGxlbik7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKiBXZSdkIGxpa2UgdG8gZ2V0IHJpZCBvZiB0aGlzIGV2ZW50dWFsbHkuICBPbmx5IGRheW5hcG9ydC5jIHVzZXMgaXQgbm93LiAqLwogc3RhdGljIGlubGluZSB2b2lkICpudWJ1c19zbG90X2FkZHIoaW50IHNsb3QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGFjYThjNDUuLjA5N2Y0MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC04MzQsNiArODM0LDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc2CTB4NTI3NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzcJMHg3Mjc1CiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GT1hDT05OCQkweDEwNWIKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1VNQwkJMHgxMDYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODY3M0YJMHgwMTAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODg4NkJGCTB4NjczYQpAQCAtMTk3MSw2ICsxOTczLDggQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcJCTB4MTQ0ZAogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1CSVQJCTB4MTQ2OAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTVlSSUNPTQkJMHgxNGMxCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USVRBTgkJMHgxNEQyCkBAIC0yMTEyLDYgKzIxMTYsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJX09MRCAweDVlOGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9TSU5BSQkweDYyNzQKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RGSQkJMHgxNWJkCisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RVUlDS05FVAkJMHgxNWUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVJQ0tORVRfWEoJMHgwNTAwCiAKQEAgLTIyMTUsNiArMjIyMSw4IEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1BTUElOCQkweDE4NjcKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJTEFOCQkweDE5MDQKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RESSAgICAgICAgICAgICAgIDB4MTkyRQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RESV9FSENJICAgICAgICAgIDB4MDEwMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IDAxYjI2MjkuLjIyOGIwYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0xMiwxODcgKzEyLDE4NyBAQAogI2RlZmluZSBQRktFWVYyX1JFVklTSU9OCTE5OTgwNkwKIAogc3RydWN0IHNhZGJfbXNnIHsKLQl1aW50OF90CQlzYWRiX21zZ192ZXJzaW9uOwotCXVpbnQ4X3QJCXNhZGJfbXNnX3R5cGU7Ci0JdWludDhfdAkJc2FkYl9tc2dfZXJybm87Ci0JdWludDhfdAkJc2FkYl9tc2dfc2F0eXBlOwotCXVpbnQxNl90CXNhZGJfbXNnX2xlbjsKLQl1aW50MTZfdAlzYWRiX21zZ19yZXNlcnZlZDsKLQl1aW50MzJfdAlzYWRiX21zZ19zZXE7Ci0JdWludDMyX3QJc2FkYl9tc2dfcGlkOworCV9fdTgJCXNhZGJfbXNnX3ZlcnNpb247CisJX191OAkJc2FkYl9tc2dfdHlwZTsKKwlfX3U4CQlzYWRiX21zZ19lcnJubzsKKwlfX3U4CQlzYWRiX21zZ19zYXR5cGU7CisJX191MTYJc2FkYl9tc2dfbGVuOworCV9fdTE2CXNhZGJfbXNnX3Jlc2VydmVkOworCV9fdTMyCXNhZGJfbXNnX3NlcTsKKwlfX3UzMglzYWRiX21zZ19waWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX21zZykgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfZXh0IHsKLQl1aW50MTZfdAlzYWRiX2V4dF9sZW47Ci0JdWludDE2X3QJc2FkYl9leHRfdHlwZTsKKwlfX3UxNglzYWRiX2V4dF9sZW47CisJX191MTYJc2FkYl9leHRfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfZXh0KSA9PSA0ICovCiAKIHN0cnVjdCBzYWRiX3NhIHsKLQl1aW50MTZfdAlzYWRiX3NhX2xlbjsKLQl1aW50MTZfdAlzYWRiX3NhX2V4dHR5cGU7CisJX191MTYJc2FkYl9zYV9sZW47CisJX191MTYJc2FkYl9zYV9leHR0eXBlOwogCV9fYmUzMgkJc2FkYl9zYV9zcGk7Ci0JdWludDhfdAkJc2FkYl9zYV9yZXBsYXk7Ci0JdWludDhfdAkJc2FkYl9zYV9zdGF0ZTsKLQl1aW50OF90CQlzYWRiX3NhX2F1dGg7Ci0JdWludDhfdAkJc2FkYl9zYV9lbmNyeXB0OwotCXVpbnQzMl90CXNhZGJfc2FfZmxhZ3M7CisJX191OAkJc2FkYl9zYV9yZXBsYXk7CisJX191OAkJc2FkYl9zYV9zdGF0ZTsKKwlfX3U4CQlzYWRiX3NhX2F1dGg7CisJX191OAkJc2FkYl9zYV9lbmNyeXB0OworCV9fdTMyCXNhZGJfc2FfZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NhKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9saWZldGltZSB7Ci0JdWludDE2X3QJc2FkYl9saWZldGltZV9sZW47Ci0JdWludDE2X3QJc2FkYl9saWZldGltZV9leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7Ci0JdWludDY0X3QJc2FkYl9saWZldGltZV9ieXRlczsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9saWZldGltZV91c2V0aW1lOworCV9fdTE2CXNhZGJfbGlmZXRpbWVfbGVuOworCV9fdTE2CXNhZGJfbGlmZXRpbWVfZXh0dHlwZTsKKwlfX3UzMglzYWRiX2xpZmV0aW1lX2FsbG9jYXRpb25zOworCV9fdTY0CXNhZGJfbGlmZXRpbWVfYnl0ZXM7CisJX191NjQJc2FkYl9saWZldGltZV9hZGR0aW1lOworCV9fdTY0CXNhZGJfbGlmZXRpbWVfdXNldGltZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfbGlmZXRpbWUpID09IDMyICovCiAKIHN0cnVjdCBzYWRiX2FkZHJlc3MgewotCXVpbnQxNl90CXNhZGJfYWRkcmVzc19sZW47Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX2V4dHR5cGU7Ci0JdWludDhfdAkJc2FkYl9hZGRyZXNzX3Byb3RvOwotCXVpbnQ4X3QJCXNhZGJfYWRkcmVzc19wcmVmaXhsZW47Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfYWRkcmVzc19sZW47CisJX191MTYJc2FkYl9hZGRyZXNzX2V4dHR5cGU7CisJX191OAkJc2FkYl9hZGRyZXNzX3Byb3RvOworCV9fdTgJCXNhZGJfYWRkcmVzc19wcmVmaXhsZW47CisJX191MTYJc2FkYl9hZGRyZXNzX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9hZGRyZXNzKSA9PSA4ICovCiAKIHN0cnVjdCBzYWRiX2tleSB7Ci0JdWludDE2X3QJc2FkYl9rZXlfbGVuOwotCXVpbnQxNl90CXNhZGJfa2V5X2V4dHR5cGU7Ci0JdWludDE2X3QJc2FkYl9rZXlfYml0czsKLQl1aW50MTZfdAlzYWRiX2tleV9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX2tleV9sZW47CisJX191MTYJc2FkYl9rZXlfZXh0dHlwZTsKKwlfX3UxNglzYWRiX2tleV9iaXRzOworCV9fdTE2CXNhZGJfa2V5X3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9rZXkpID09IDggKi8KIAogc3RydWN0IHNhZGJfaWRlbnQgewotCXVpbnQxNl90CXNhZGJfaWRlbnRfbGVuOwotCXVpbnQxNl90CXNhZGJfaWRlbnRfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX2lkZW50X3R5cGU7Ci0JdWludDE2X3QJc2FkYl9pZGVudF9yZXNlcnZlZDsKLQl1aW50NjRfdAlzYWRiX2lkZW50X2lkOworCV9fdTE2CXNhZGJfaWRlbnRfbGVuOworCV9fdTE2CXNhZGJfaWRlbnRfZXh0dHlwZTsKKwlfX3UxNglzYWRiX2lkZW50X3R5cGU7CisJX191MTYJc2FkYl9pZGVudF9yZXNlcnZlZDsKKwlfX3U2NAlzYWRiX2lkZW50X2lkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9pZGVudCkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfc2VucyB7Ci0JdWludDE2X3QJc2FkYl9zZW5zX2xlbjsKLQl1aW50MTZfdAlzYWRiX3NlbnNfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3NlbnNfZHBkOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19zZW5zX2xldmVsOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19zZW5zX2xlbjsKLQl1aW50OF90CQlzYWRiX3NlbnNfaW50ZWdfbGV2ZWw7Ci0JdWludDhfdAkJc2FkYl9zZW5zX2ludGVnX2xlbjsKLQl1aW50MzJfdAlzYWRiX3NlbnNfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9zZW5zX2xlbjsKKwlfX3UxNglzYWRiX3NlbnNfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3NlbnNfZHBkOworCV9fdTgJCXNhZGJfc2Vuc19zZW5zX2xldmVsOworCV9fdTgJCXNhZGJfc2Vuc19zZW5zX2xlbjsKKwlfX3U4CQlzYWRiX3NlbnNfaW50ZWdfbGV2ZWw7CisJX191OAkJc2FkYl9zZW5zX2ludGVnX2xlbjsKKwlfX3UzMglzYWRiX3NlbnNfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NlbnMpID09IDE2ICovCiAKIC8qIGZvbGxvd2VkIGJ5OgotCXVpbnQ2NF90CXNhZGJfc2Vuc19iaXRtYXBbc2Vuc19sZW5dOwotCXVpbnQ2NF90CXNhZGJfaW50ZWdfYml0bWFwW2ludGVnX2xlbl07ICAqLworCV9fdTY0CXNhZGJfc2Vuc19iaXRtYXBbc2Vuc19sZW5dOworCV9fdTY0CXNhZGJfaW50ZWdfYml0bWFwW2ludGVnX2xlbl07ICAqLwogCiBzdHJ1Y3Qgc2FkYl9wcm9wIHsKLQl1aW50MTZfdAlzYWRiX3Byb3BfbGVuOwotCXVpbnQxNl90CXNhZGJfcHJvcF9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfcHJvcF9yZXBsYXk7Ci0JdWludDhfdAkJc2FkYl9wcm9wX3Jlc2VydmVkWzNdOworCV9fdTE2CXNhZGJfcHJvcF9sZW47CisJX191MTYJc2FkYl9wcm9wX2V4dHR5cGU7CisJX191OAkJc2FkYl9wcm9wX3JlcGxheTsKKwlfX3U4CQlzYWRiX3Byb3BfcmVzZXJ2ZWRbM107CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApID09IDggKi8KIAogLyogZm9sbG93ZWQgYnk6CiAJc3RydWN0IHNhZGJfY29tYiBzYWRiX2NvbWJzWyhzYWRiX3Byb3BfbGVuICsKLQkJc2l6ZW9mKHVpbnQ2NF90KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9wcm9wKSkgLworCQlzaXplb2YoX191NjQpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApKSAvCiAJCXNpemVvZihzdHJ1Y3Qgc2FkYl9jb21iKV07ICovCiAKIHN0cnVjdCBzYWRiX2NvbWIgewotCXVpbnQ4X3QJCXNhZGJfY29tYl9hdXRoOwotCXVpbnQ4X3QJCXNhZGJfY29tYl9lbmNyeXB0OwotCXVpbnQxNl90CXNhZGJfY29tYl9mbGFnczsKLQl1aW50MTZfdAlzYWRiX2NvbWJfYXV0aF9taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfY29tYl9hdXRoX21heGJpdHM7Ci0JdWludDE2X3QJc2FkYl9jb21iX2VuY3J5cHRfbWluYml0czsKLQl1aW50MTZfdAlzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOwotCXVpbnQzMl90CXNhZGJfY29tYl9yZXNlcnZlZDsKLQl1aW50MzJfdAlzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKLQl1aW50MzJfdAlzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF9ieXRlczsKLQl1aW50NjRfdAlzYWRiX2NvbWJfaGFyZF9ieXRlczsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF9hZGR0aW1lOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9jb21iX3NvZnRfdXNldGltZTsKLQl1aW50NjRfdAlzYWRiX2NvbWJfaGFyZF91c2V0aW1lOworCV9fdTgJCXNhZGJfY29tYl9hdXRoOworCV9fdTgJCXNhZGJfY29tYl9lbmNyeXB0OworCV9fdTE2CXNhZGJfY29tYl9mbGFnczsKKwlfX3UxNglzYWRiX2NvbWJfYXV0aF9taW5iaXRzOworCV9fdTE2CXNhZGJfY29tYl9hdXRoX21heGJpdHM7CisJX191MTYJc2FkYl9jb21iX2VuY3J5cHRfbWluYml0czsKKwlfX3UxNglzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOworCV9fdTMyCXNhZGJfY29tYl9yZXNlcnZlZDsKKwlfX3UzMglzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKKwlfX3UzMglzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF9ieXRlczsKKwlfX3U2NAlzYWRiX2NvbWJfaGFyZF9ieXRlczsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF9hZGR0aW1lOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX2FkZHRpbWU7CisJX191NjQJc2FkYl9jb21iX3NvZnRfdXNldGltZTsKKwlfX3U2NAlzYWRiX2NvbWJfaGFyZF91c2V0aW1lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9jb21iKSA9PSA3MiAqLwogCiBzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQgewotCXVpbnQxNl90CXNhZGJfc3VwcG9ydGVkX2xlbjsKLQl1aW50MTZfdAlzYWRiX3N1cHBvcnRlZF9leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfc3VwcG9ydGVkX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfc3VwcG9ydGVkX2xlbjsKKwlfX3UxNglzYWRiX3N1cHBvcnRlZF9leHR0eXBlOworCV9fdTMyCXNhZGJfc3VwcG9ydGVkX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpID09IDggKi8KIAogLyogZm9sbG93ZWQgYnk6CiAJc3RydWN0IHNhZGJfYWxnIHNhZGJfYWxnc1soc2FkYl9zdXBwb3J0ZWRfbGVuICsKLQkJc2l6ZW9mKHVpbnQ2NF90KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCisJCXNpemVvZihfX3U2NCkgLSBzaXplb2Yoc3RydWN0IHNhZGJfc3VwcG9ydGVkKSkgLwogCQlzaXplb2Yoc3RydWN0IHNhZGJfYWxnKV07ICovCiAKIHN0cnVjdCBzYWRiX2FsZyB7Ci0JdWludDhfdAkJc2FkYl9hbGdfaWQ7Ci0JdWludDhfdAkJc2FkYl9hbGdfaXZsZW47Ci0JdWludDE2X3QJc2FkYl9hbGdfbWluYml0czsKLQl1aW50MTZfdAlzYWRiX2FsZ19tYXhiaXRzOwotCXVpbnQxNl90CXNhZGJfYWxnX3Jlc2VydmVkOworCV9fdTgJCXNhZGJfYWxnX2lkOworCV9fdTgJCXNhZGJfYWxnX2l2bGVuOworCV9fdTE2CXNhZGJfYWxnX21pbmJpdHM7CisJX191MTYJc2FkYl9hbGdfbWF4Yml0czsKKwlfX3UxNglzYWRiX2FsZ19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfYWxnKSA9PSA4ICovCiAKIHN0cnVjdCBzYWRiX3NwaXJhbmdlIHsKLQl1aW50MTZfdAlzYWRiX3NwaXJhbmdlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3NwaXJhbmdlX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9zcGlyYW5nZV9taW47Ci0JdWludDMyX3QJc2FkYl9zcGlyYW5nZV9tYXg7Ci0JdWludDMyX3QJc2FkYl9zcGlyYW5nZV9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3NwaXJhbmdlX2xlbjsKKwlfX3UxNglzYWRiX3NwaXJhbmdlX2V4dHR5cGU7CisJX191MzIJc2FkYl9zcGlyYW5nZV9taW47CisJX191MzIJc2FkYl9zcGlyYW5nZV9tYXg7CisJX191MzIJc2FkYl9zcGlyYW5nZV9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc3BpcmFuZ2UpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX3hfa21wcml2YXRlIHsKLQl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl94X2ttcHJpdmF0ZV9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfa21wcml2YXRlX2xlbjsKKwlfX3UxNglzYWRiX3hfa21wcml2YXRlX2V4dHR5cGU7CisJX191MzIJc2FkYl94X2ttcHJpdmF0ZV9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbXByaXZhdGUpID09IDggKi8KIAogc3RydWN0IHNhZGJfeF9zYTIgewotCXVpbnQxNl90CXNhZGJfeF9zYTJfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9zYTJfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX3hfc2EyX21vZGU7Ci0JdWludDhfdAkJc2FkYl94X3NhMl9yZXNlcnZlZDE7Ci0JdWludDE2X3QJc2FkYl94X3NhMl9yZXNlcnZlZDI7Ci0JdWludDMyX3QJc2FkYl94X3NhMl9zZXF1ZW5jZTsKLQl1aW50MzJfdAlzYWRiX3hfc2EyX3JlcWlkOworCV9fdTE2CXNhZGJfeF9zYTJfbGVuOworCV9fdTE2CXNhZGJfeF9zYTJfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3hfc2EyX21vZGU7CisJX191OAkJc2FkYl94X3NhMl9yZXNlcnZlZDE7CisJX191MTYJc2FkYl94X3NhMl9yZXNlcnZlZDI7CisJX191MzIJc2FkYl94X3NhMl9zZXF1ZW5jZTsKKwlfX3UzMglzYWRiX3hfc2EyX3JlcWlkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3NhMikgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9wb2xpY3kgewotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX3hfcG9saWN5X3R5cGU7Ci0JdWludDhfdAkJc2FkYl94X3BvbGljeV9kaXI7Ci0JdWludDhfdAkJc2FkYl94X3BvbGljeV9yZXNlcnZlZDsKLQl1aW50MzJfdAlzYWRiX3hfcG9saWN5X2lkOwotCXVpbnQzMl90CXNhZGJfeF9wb2xpY3lfcHJpb3JpdHk7CisJX191MTYJc2FkYl94X3BvbGljeV9sZW47CisJX191MTYJc2FkYl94X3BvbGljeV9leHR0eXBlOworCV9fdTE2CXNhZGJfeF9wb2xpY3lfdHlwZTsKKwlfX3U4CQlzYWRiX3hfcG9saWN5X2RpcjsKKwlfX3U4CQlzYWRiX3hfcG9saWN5X3Jlc2VydmVkOworCV9fdTMyCXNhZGJfeF9wb2xpY3lfaWQ7CisJX191MzIJc2FkYl94X3BvbGljeV9wcmlvcml0eTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9wb2xpY3kpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0IHsKLQl1aW50MTZfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X3Byb3RvOwotCXVpbnQ4X3QJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKLQl1aW50OF90CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOwotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOwotCXVpbnQzMl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7Ci0JdWludDMyX3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7CisJX191MTYJc2FkYl94X2lwc2VjcmVxdWVzdF9sZW47CisJX191MTYJc2FkYl94X2lwc2VjcmVxdWVzdF9wcm90bzsKKwlfX3U4CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X21vZGU7CisJX191OAkJc2FkYl94X2lwc2VjcmVxdWVzdF9sZXZlbDsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMTsKKwlfX3UzMglzYWRiX3hfaXBzZWNyZXF1ZXN0X3JlcWlkOworCV9fdTMyCXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X2lwc2VjcmVxdWVzdCkgPT0gMTYgKi8KIApAQCAtMjAwLDM4ICsyMDAsMzggQEAKICAqIHR5cGUgb2YgTkFULVQgaXMgc3VwcG9ydGVkLCBkcmFmdC1pZXRmLWlwc2VjLXVkcC1lbmNhcHMtMDYKICAqLwogc3RydWN0IHNhZGJfeF9uYXRfdF90eXBlIHsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfdHlwZV9sZW47Ci0JdWludDE2X3QJc2FkYl94X25hdF90X3R5cGVfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX3hfbmF0X3RfdHlwZV90eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9uYXRfdF90eXBlX3Jlc2VydmVkWzNdOworCV9fdTE2CXNhZGJfeF9uYXRfdF90eXBlX2xlbjsKKwlfX3UxNglzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOworCV9fdTgJCXNhZGJfeF9uYXRfdF90eXBlX3R5cGU7CisJX191OAkJc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfbmF0X3RfdHlwZSkgPT0gOCAqLwogCiAvKiBQYXNzIGEgTkFUIFRyYXZlcnNhbCBwb3J0IChTb3VyY2Ugb3IgRGVzdCBwb3J0KSAqLwogc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0IHsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9sZW47Ci0JdWludDE2X3QJc2FkYl94X25hdF90X3BvcnRfZXh0dHlwZTsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9sZW47CisJX191MTYJc2FkYl94X25hdF90X3BvcnRfZXh0dHlwZTsKIAlfX2JlMTYJCXNhZGJfeF9uYXRfdF9wb3J0X3BvcnQ7Ci0JdWludDE2X3QJc2FkYl94X25hdF90X3BvcnRfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl94X25hdF90X3BvcnRfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfbmF0X3RfcG9ydCkgPT0gOCAqLwogCiAvKiBHZW5lcmljIExTTSBzZWN1cml0eSBjb250ZXh0ICovCiBzdHJ1Y3Qgc2FkYl94X3NlY19jdHggewotCXVpbnQxNl90CXNhZGJfeF9zZWNfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9zZWNfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX3hfY3R4X2FsZzsgIC8qIExTTXM6IGUuZy4sIHNlbGludXggPT0gMSAqLwotCXVpbnQ4X3QJCXNhZGJfeF9jdHhfZG9pOwotCXVpbnQxNl90CXNhZGJfeF9jdHhfbGVuOworCV9fdTE2CXNhZGJfeF9zZWNfbGVuOworCV9fdTE2CXNhZGJfeF9zZWNfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3hfY3R4X2FsZzsgIC8qIExTTXM6IGUuZy4sIHNlbGludXggPT0gMSAqLworCV9fdTgJCXNhZGJfeF9jdHhfZG9pOworCV9fdTE2CXNhZGJfeF9jdHhfbGVuOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zZWNfY3R4KSA9IDggKi8KIAogLyogVXNlZCBieSBNSUdSQVRFIHRvIHBhc3MgYWRkcmVzc2VzIElLRSB3aWxsIHVzZSB0byBwZXJmb3JtCiAgKiBuZWdvdGlhdGlvbiB3aXRoIHRoZSBwZWVyICovCiBzdHJ1Y3Qgc2FkYl94X2ttYWRkcmVzcyB7Ci0JdWludDE2X3QJc2FkYl94X2ttYWRkcmVzc19sZW47Ci0JdWludDE2X3QJc2FkYl94X2ttYWRkcmVzc19leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfeF9rbWFkZHJlc3NfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl94X2ttYWRkcmVzc19sZW47CisJX191MTYJc2FkYl94X2ttYWRkcmVzc19leHR0eXBlOworCV9fdTMyCXNhZGJfeF9rbWFkZHJlc3NfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfa21hZGRyZXNzKSA9PSA4ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IGQ3ZTU0ZDkuLjMyY2YxNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMzE1LDggKzMxNSw3IEBACiAKIAkvKiBJbnRlcnJ1cHQgYW5kIFBvbGxpbmcgaW5mcmFzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGh5X3F1ZXVlOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGF0ZV9xdWV1ZTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBwaHlfdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBzdGF0ZV9xdWV1ZTsKIAlhdG9taWNfdCBpcnFfZGlzYWJsZTsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waW0uaCBiL2luY2x1ZGUvbGludXgvcGltLmgKaW5kZXggMWJhMDY2MS4uMjUyYmY2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BpbS5oCkBAIC00LDE0ICs0LDE0IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKiBNZXNzYWdlIHR5cGVzIC0gVjEgKi8KLSNkZWZpbmUgUElNX1YxX1ZFUlNJT04JCV9fY29uc3RhbnRfaHRvbmwoMHgxMDAwMDAwMCkKKyNkZWZpbmUgUElNX1YxX1ZFUlNJT04JCWNwdV90b19iZTMyKDB4MTAwMDAwMDApCiAjZGVmaW5lIFBJTV9WMV9SRUdJU1RFUgkJMQogCiAvKiBNZXNzYWdlIHR5cGVzIC0gVjIgKi8KICNkZWZpbmUgUElNX1ZFUlNJT04JCTIKICNkZWZpbmUgUElNX1JFR0lTVEVSCQkxCiAKLSNkZWZpbmUgUElNX05VTExfUkVHSVNURVIJX19jb25zdGFudF9odG9ubCgweDQwMDAwMDAwKQorI2RlZmluZSBQSU1fTlVMTF9SRUdJU1RFUgljcHVfdG9fYmUzMigweDQwMDAwMDAwKQogCiAvKiBQSU12MiByZWdpc3RlciBtZXNzYWdlIGhlYWRlciBsYXlvdXQgKGlldGYtZHJhZnQtaWRtci1waW12c20tdjItMDAucHMgKi8KIHN0cnVjdCBwaW1yZWdoZHIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCmluZGV4IDlhMzQyNjkuLjc2ZTQ3MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBfUExBVEZPUk1fREVWSUNFX0hfCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSB7CiAJY29uc3QgY2hhcgkqIG5hbWU7CkBAIC0xOSw4ICsyMCwxMyBAQAogCXN0cnVjdCBkZXZpY2UJZGV2OwogCXUzMgkJbnVtX3Jlc291cmNlczsKIAlzdHJ1Y3QgcmVzb3VyY2UJKiByZXNvdXJjZTsKKwl2b2lkCQkqcGxhdGZvcm1fZGF0YTsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQJKmlkX2VudHJ5OwogfTsKIAorI2RlZmluZSBwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpCSgocGRldiktPmlkX2VudHJ5KQorCiAjZGVmaW5lIHRvX3BsYXRmb3JtX2RldmljZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpCiAKIGV4dGVybiBpbnQgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CkBAIC01Niw2ICs2Miw3IEBACiAJaW50ICgqcmVzdW1lX2Vhcmx5KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfdGFibGU7CiB9OwogCiBleHRlcm4gaW50IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGlzdC5oIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCmluZGV4IDg1ZGUyZjAuLjQ1OTI2ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKQEAgLTk2LDYgKzk2LDEwIEBACiAjIGRlZmluZSBQTElTVF9IRUFEX0xPQ0tfSU5JVChfbG9jaykKICNlbmRpZgogCisjZGVmaW5lIF9QTElTVF9IRUFEX0lOSVQoaGVhZCkJCQkJXAorCS5wcmlvX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkucHJpb19saXN0KSwJXAorCS5ub2RlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkubm9kZV9saXN0KQorCiAvKioKICAqIFBMSVNUX0hFQURfSU5JVCAtIHN0YXRpYyBzdHJ1Y3QgcGxpc3RfaGVhZCBpbml0aWFsaXplcgogICogQGhlYWQ6CXN0cnVjdCBwbGlzdF9oZWFkIHZhcmlhYmxlIG5hbWUKQEAgLTEwMyw4ICsxMDcsNyBAQAogICovCiAjZGVmaW5lIFBMSVNUX0hFQURfSU5JVChoZWFkLCBfbG9jaykJCQlcCiB7CQkJCQkJCVwKLQkucHJpb19saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLnByaW9fbGlzdCksCVwKLQkubm9kZV9saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLm5vZGVfbGlzdCksCVwKKyAgICAgICAgX1BMSVNUX0hFQURfSU5JVChoZWFkKSwgICAgICAgICAgICAgICAgICAgICAgICAgXAogCVBMSVNUX0hFQURfTE9DS19JTklUKCYoX2xvY2spKQkJCVwKIH0KIApAQCAtMTE2LDcgKzExOSw3IEBACiAjZGVmaW5lIFBMSVNUX05PREVfSU5JVChub2RlLCBfX3ByaW8pCQkJXAogewkJCQkJCQlcCiAJLnByaW8gID0gKF9fcHJpbyksCQkJCVwKLQkucGxpc3QgPSBQTElTVF9IRUFEX0lOSVQoKG5vZGUpLnBsaXN0LCBOVUxMKSwJXAorCS5wbGlzdCA9IHsgX1BMSVNUX0hFQURfSU5JVCgobm9kZSkucGxpc3QpIH0sIAlcCiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDI0YmE1ZjYuLjFkNGUyZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTQwMCw2ICs0MDAsOSBAQAogCiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKKyNkZWZpbmUgZGV2aWNlX3BtX2xvY2soKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZGV2aWNlX3BtX3VubG9jaygpIGRvIHt9IHdoaWxlICgwKQorCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJcmV0dXJuIDA7CkBAIC00MDksNiArNDEyLDE0IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKKy8qIEhvdyB0byByZW9yZGVyIGRwbV9saXN0IGFmdGVyIGRldmljZV9tb3ZlKCkgKi8KK2VudW0gZHBtX29yZGVyIHsKKwlEUE1fT1JERVJfTk9ORSwKKwlEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVCwKKwlEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYsCisJRFBNX09SREVSX0RFVl9MQVNULAorfTsKKwogLyoKICAqIEdsb2JhbCBQb3dlciBNYW5hZ2VtZW50IGZsYWdzCiAgKiBVc2VkIHRvIGtlZXAgQVBNIGFuZCBBQ1BJIGZyb20gYm90aCBiZWluZyBhY3RpdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAppbmRleCBhOTQyODkyLi4wZDNmYTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCiBzdHJ1Y3QgcHBwX2NoYW5uZWw7CiAKQEAgLTM5LDggKzQwLDggQEAKIAlpbnQJCW10dTsJCS8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqLwogCWludAkJaGRybGVuOwkJLyogYW1vdW50IG9mIGhlYWRyb29tIGNoYW5uZWwgbmVlZHMgKi8KIAl2b2lkCQkqcHBwOwkJLyogb3BhcXVlIHRvIGNoYW5uZWwgKi8KLQkvKiB0aGUgZm9sbG93aW5nIGFyZSBub3QgdXNlZCBhdCBwcmVzZW50ICovCiAJaW50CQlzcGVlZDsJCS8qIHRyYW5zZmVyIHJhdGUgKGJ5dGVzL3NlY29uZCkgKi8KKwkvKiB0aGUgZm9sbG93aW5nIGlzIG5vdCB1c2VkIGF0IHByZXNlbnQgKi8KIAlpbnQJCWxhdGVuY3k7CS8qIG92ZXJoZWFkIHRpbWUgaW4gbWlsbGlzZWNvbmRzICovCiB9OwogCkBAIC01Niw2ICs1Nyw5IEBACiAgICB0aGF0IHdlIG1heSBoYXZlIG1pc3NlZCBhIHBhY2tldC4gKi8KIGV4dGVybiB2b2lkIHBwcF9pbnB1dF9lcnJvcihzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgaW50IGNvZGUpOwogCisvKiBBdHRhY2ggYSBjaGFubmVsIHRvIGEgZ2l2ZW4gUFBQIHVuaXQgaW4gc3BlY2lmaWVkIG5ldC4gKi8KK2V4dGVybiBpbnQgcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKHN0cnVjdCBuZXQgKiwgc3RydWN0IHBwcF9jaGFubmVsICopOworCiAvKiBBdHRhY2ggYSBjaGFubmVsIHRvIGEgZ2l2ZW4gUFBQIHVuaXQuICovCiBleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCmluZGV4IDFjODY2YmQuLjBmOTNlZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKQEAgLTE3Nyw4ICsxNzcsOCBAQAogICogdGhlIGxhc3QgTlAgcGFja2V0IHdhcyBzZW50IG9yIHJlY2VpdmVkLgogICovCiBzdHJ1Y3QgcHBwX2lkbGUgewotICAgIHRpbWVfdCB4bWl0X2lkbGU7CQkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHNlbnQgKi8KLSAgICB0aW1lX3QgcmVjdl9pZGxlOwkJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCByZWNlaXZlZCAqLworICAgIF9fa2VybmVsX3RpbWVfdCB4bWl0X2lkbGU7CS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgc2VudCAqLworICAgIF9fa2VybmVsX3RpbWVfdCByZWN2X2lkbGU7CS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgcmVjZWl2ZWQgKi8KIH07CiAKICNlbmRpZiAvKiBfUFBQX0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmRzLmggYi9pbmNsdWRlL2xpbnV4L3Jkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWRjOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Jkcy5oCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfUkRTX0gKKyNkZWZpbmUgX0xJTlVYX1JEU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBUaGVzZSBzcGFyc2UgYW5ub3RhdGVkIHR5cGVzIHNob3VsZG4ndCBiZSBpbiBhbnkgdXNlcgorICogdmlzaWJsZSBoZWFkZXIgZmlsZS4gV2Ugc2hvdWxkIGNsZWFuIHRoaXMgdXAgcmF0aGVyCisgKiB0aGFuIGtsdWRnaW5nIGFyb3VuZCB0aGVtLiAqLworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fYmUxNgl1X2ludDE2X3QKKyNkZWZpbmUgX19iZTMyCXVfaW50MzJfdAorI2RlZmluZSBfX2JlNjQJdV9pbnQ2NF90CisjZW5kaWYKKworI2RlZmluZSBSRFNfSUJfQUJJX1ZFUlNJT04JCTB4MzAxCisKKy8qCisgKiBzZXRzb2Nrb3B0L2dldHNvY2tvcHQgZm9yIFNPTF9SRFMKKyAqLworI2RlZmluZSBSRFNfQ0FOQ0VMX1NFTlRfVE8gICAgICAJMQorI2RlZmluZSBSRFNfR0VUX01SCQkJMgorI2RlZmluZSBSRFNfRlJFRV9NUgkJCTMKKy8qIGRlcHJlY2F0ZWQ6IFJEU19CQVJSSUVSIDQgKi8KKyNkZWZpbmUgUkRTX1JFQ1ZFUlIJCQk1CisjZGVmaW5lIFJEU19DT05HX01PTklUT1IJCTYKKworLyoKKyAqIENvbnRyb2wgbWVzc2FnZSB0eXBlcyBmb3IgU09MX1JEUy4KKyAqCisgKiBDTVNHX1JETUFfQVJHUyAoc2VuZG1zZykKKyAqCVJlcXVlc3QgYSBSRE1BIHRyYW5zZmVyIHRvL2Zyb20gdGhlIHNwZWNpZmllZAorICoJbWVtb3J5IHJhbmdlcy4KKyAqCVRoZSBjbXNnX2RhdGEgaXMgYSBzdHJ1Y3QgcmRzX3JkbWFfYXJncy4KKyAqIFJEU19DTVNHX1JETUFfREVTVCAocmVjdm1zZywgc2VuZG1zZykKKyAqCUtlcm5lbCBpbmZvcm1zIGFwcGxpY2F0aW9uIGFib3V0IGludGVuZGVkCisgKglzb3VyY2UvZGVzdGluYXRpb24gb2YgYSBSRE1BIHRyYW5zZmVyCisgKiBSRFNfQ01TR19SRE1BX01BUCAoc2VuZG1zZykKKyAqCUFwcGxpY2F0aW9uIGFza3Mga2VybmVsIHRvIG1hcCB0aGUgZ2l2ZW4KKyAqCW1lbW9yeSByYW5nZSBpbnRvIGEgSUIgTVIsIGFuZCBzZW5kIHRoZQorICoJUl9LZXkgYWxvbmcgaW4gYW4gUkRTIGV4dGVuc2lvbiBoZWFkZXIuCisgKglUaGUgY21zZ19kYXRhIGlzIGEgc3RydWN0IHJkc19nZXRfbXJfYXJncywKKyAqCXRoZSBzYW1lIGFzIGZvciB0aGUgR0VUX01SIHNldHNvY2tvcHQuCisgKiBSRFNfQ01TR19SRE1BX1NUQVRVUyAocmVjdm1zZykKKyAqCVJldHVybnMgdGhlIHN0YXR1cyBvZiBhIGNvbXBsZXRlZCBSRE1BIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBSRFNfQ01TR19SRE1BX0FSR1MJCTEKKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9ERVNUCQkyCisjZGVmaW5lIFJEU19DTVNHX1JETUFfTUFQCQkzCisjZGVmaW5lIFJEU19DTVNHX1JETUFfU1RBVFVTCQk0CisjZGVmaW5lIFJEU19DTVNHX0NPTkdfVVBEQVRFCQk1CisKKyNkZWZpbmUgUkRTX0lORk9fRklSU1QJCQkxMDAwMAorI2RlZmluZSBSRFNfSU5GT19DT1VOVEVSUwkJMTAwMDAKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTlMJCTEwMDAxCisvKiAxMDAwMiBha2EgUkRTX0lORk9fRkxPV1MgaXMgZGVwcmVjYXRlZCAqLworI2RlZmluZSBSRFNfSU5GT19TRU5EX01FU1NBR0VTCQkxMDAwMworI2RlZmluZSBSRFNfSU5GT19SRVRSQU5TX01FU1NBR0VTICAgICAgIDEwMDA0CisjZGVmaW5lIFJEU19JTkZPX1JFQ1ZfTUVTU0FHRVMgICAgICAgICAgMTAwMDUKKyNkZWZpbmUgUkRTX0lORk9fU09DS0VUUyAgICAgICAgICAgICAgICAxMDAwNgorI2RlZmluZSBSRFNfSU5GT19UQ1BfU09DS0VUUyAgICAgICAgICAgIDEwMDA3CisjZGVmaW5lIFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TCQkxMDAwOAorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX1NUQVRTCTEwMDA5CisjZGVmaW5lIFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TCTEwMDEwCisjZGVmaW5lIFJEU19JTkZPX0xBU1QJCQkxMDAxMAorCitzdHJ1Y3QgcmRzX2luZm9fY291bnRlciB7CisJdV9pbnQ4X3QJbmFtZVszMl07CisJdV9pbnQ2NF90CXZhbHVlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfU0VORElORwkweDAxCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19DT05ORUNUSU5HCTB4MDIKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHX0NPTk5FQ1RFRAkweDA0CisKKyNkZWZpbmUgVFJBTlNOQU1TSVoJMTYKKworc3RydWN0IHJkc19pbmZvX2Nvbm5lY3Rpb24geworCXVfaW50NjRfdAluZXh0X3R4X3NlcTsKKwl1X2ludDY0X3QJbmV4dF9yeF9zZXE7CisJX19iZTMyCQlsYWRkcjsKKwlfX2JlMzIJCWZhZGRyOworCXVfaW50OF90CXRyYW5zcG9ydFtUUkFOU05BTVNJWl07CQkvKiBudWxsIHRlcm0gYXNjaWkgKi8KKwl1X2ludDhfdAlmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCByZHNfaW5mb19mbG93IHsKKwlfX2JlMzIJCWxhZGRyOworCV9fYmUzMgkJZmFkZHI7CisJdV9pbnQzMl90CWJ5dGVzOworCV9fYmUxNgkJbHBvcnQ7CisJX19iZTE2CQlmcG9ydDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lORk9fTUVTU0FHRV9GTEFHX0FDSyAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkRTX0lORk9fTUVTU0FHRV9GTEFHX0ZBU1RfQUNLICAgICAgICAgIDB4MDIKKworc3RydWN0IHJkc19pbmZvX21lc3NhZ2UgeworCXVfaW50NjRfdAlzZXE7CisJdV9pbnQzMl90CWxlbjsKKwlfX2JlMzIJCWxhZGRyOworCV9fYmUzMgkJZmFkZHI7CisJX19iZTE2CQlscG9ydDsKKwlfX2JlMTYJCWZwb3J0OworCXVfaW50OF90CWZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJkc19pbmZvX3NvY2tldCB7CisJdV9pbnQzMl90CXNuZGJ1ZjsKKwlfX2JlMzIJCWJvdW5kX2FkZHI7CisJX19iZTMyCQljb25uZWN0ZWRfYWRkcjsKKwlfX2JlMTYJCWJvdW5kX3BvcnQ7CisJX19iZTE2CQljb25uZWN0ZWRfcG9ydDsKKwl1X2ludDMyX3QJcmN2YnVmOworCXVfaW50NjRfdAlpbnVtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBSRFNfSUJfR0lEX0xFTgkxNgorc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiB7CisJX19iZTMyCQlzcmNfYWRkcjsKKwlfX2JlMzIJCWRzdF9hZGRyOworCXVpbnQ4X3QJCXNyY19naWRbUkRTX0lCX0dJRF9MRU5dOworCXVpbnQ4X3QJCWRzdF9naWRbUkRTX0lCX0dJRF9MRU5dOworCisJdWludDMyX3QJbWF4X3NlbmRfd3I7CisJdWludDMyX3QJbWF4X3JlY3Zfd3I7CisJdWludDMyX3QJbWF4X3NlbmRfc2dlOworCXVpbnQzMl90CXJkbWFfbXJfbWF4OworCXVpbnQzMl90CXJkbWFfbXJfc2l6ZTsKK307CisKKy8qCisgKiBDb25nZXN0aW9uIG1vbml0b3JpbmcuCisgKiBDb25nZXN0aW9uIGNvbnRyb2wgaW4gUkRTIGhhcHBlbnMgYXQgdGhlIGhvc3QgY29ubmVjdGlvbgorICogbGV2ZWwgYnkgZXhjaGFuZ2luZyBhIGJpdG1hcCBtYXJraW5nIGNvbmdlc3RlZCBwb3J0cy4KKyAqIEJ5IGRlZmF1bHQsIGEgcHJvY2VzcyBzbGVlcGluZyBpbiBwb2xsKCkgaXMgYWx3YXlzIHdva2VuCisgKiB1cCB3aGVuIHRoZSBjb25nZXN0aW9uIG1hcCBpcyB1cGRhdGVkLgorICogV2l0aCBleHBsaWNpdCBtb25pdG9yaW5nLCBhbiBhcHBsaWNhdGlvbiBjYW4gaGF2ZSBtb3JlCisgKiBmaW5lLWdyYWluZWQgY29udHJvbC4KKyAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YWxscyBhIDY0Yml0IG1hc2sgdmFsdWUgaW4gdGhlIHNvY2tldCwKKyAqIHdoZXJlIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIGEgZ3JvdXAgb2YgcG9ydHMuCisgKiBXaGVuIGEgY29uZ2VzdGlvbiB1cGRhdGUgYXJyaXZlcywgUkRTIGNoZWNrcyB0aGUgc2V0IG9mCisgKiBwb3J0cyB0aGF0IGFyZSBub3cgdW5jb25nZXN0ZWQgYWdhaW5zdCB0aGUgbGlzdCBiaXQgbWFzaworICogaW5zdGFsbGVkIGluIHRoZSBzb2NrZXQsIGFuZCBpZiB0aGV5IG92ZXJsYXAsIHdlIHF1ZXVlIGEKKyAqIGNvbmdfbm90aWZpY2F0aW9uIG9uIHRoZSBzb2NrZXQuCisgKgorICogVG8gaW5zdGFsbCB0aGUgY29uZ2VzdGlvbiBtb25pdG9yIGJpdG1hc2ssIHVzZSBSRFNfQ09OR19NT05JVE9SCisgKiB3aXRoIHRoZSA2NGJpdCBtYXNrLgorICogQ29uZ2VzdGlvbiB1cGRhdGVzIGFyZSByZWNlaXZlZCB2aWEgUkRTX0NNU0dfQ09OR19VUERBVEUKKyAqIGNvbnRyb2wgbWVzc2FnZXMuCisgKgorICogVGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gYml0cyBhbmQgcG9ydHMgaXMKKyAqCTEgPDwgKHBvcnRudW0gJSA2NCkKKyAqLworI2RlZmluZSBSRFNfQ09OR19NT05JVE9SX1NJWkUJNjQKKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUl9CSVQocG9ydCkgICgoKHVuc2lnbmVkIGludCkgcG9ydCkgJSBSRFNfQ09OR19NT05JVE9SX1NJWkUpCisjZGVmaW5lIFJEU19DT05HX01PTklUT1JfTUFTSyhwb3J0KSAoMVVMTCA8PCBSRFNfQ09OR19NT05JVE9SX0JJVChwb3J0KSkKKworLyoKKyAqIFJETUEgcmVsYXRlZCB0eXBlcworICovCisKKy8qCisgKiBUaGlzIGVuY2Fwc3VsYXRlcyBhIHJlbW90ZSBtZW1vcnkgbG9jYXRpb24uCisgKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgaXQgY29udGFpbnMgdGhlIFJfS2V5CisgKiBvZiB0aGUgcmVtb3RlIG1lbW9yeSByZWdpb24sIGFuZCB0aGUgb2Zmc2V0IGludG8gaXQKKyAqIChzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0CisgKiBhbGlnbm1lbnQpLgorICovCit0eXBlZGVmIHVfaW50NjRfdAlyZHNfcmRtYV9jb29raWVfdDsKKworc3RydWN0IHJkc19pb3ZlYyB7CisJdV9pbnQ2NF90CWFkZHI7CisJdV9pbnQ2NF90CWJ5dGVzOworfTsKKworc3RydWN0IHJkc19nZXRfbXJfYXJncyB7CisJc3RydWN0IHJkc19pb3ZlYyB2ZWM7CisJdV9pbnQ2NF90CWNvb2tpZV9hZGRyOworCXVpbnQ2NF90CWZsYWdzOworfTsKKworc3RydWN0IHJkc19mcmVlX21yX2FyZ3MgeworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1X2ludDY0X3QJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcmRzX3JkbWFfYXJncyB7CisJcmRzX3JkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCByZHNfaW92ZWMgcmVtb3RlX3ZlYzsKKwl1X2ludDY0X3QJbG9jYWxfdmVjX2FkZHI7CisJdV9pbnQ2NF90CW5yX2xvY2FsOworCXVfaW50NjRfdAlmbGFnczsKKwl1X2ludDY0X3QJdXNlcl90b2tlbjsKK307CisKK3N0cnVjdCByZHNfcmRtYV9ub3RpZnkgeworCXVfaW50NjRfdAl1c2VyX3Rva2VuOworCWludDMyX3QJCXN0YXR1czsKK307CisKKyNkZWZpbmUgUkRTX1JETUFfU1VDQ0VTUwkwCisjZGVmaW5lIFJEU19SRE1BX1JFTU9URV9FUlJPUgkxCisjZGVmaW5lIFJEU19SRE1BX0NBTkNFTEVECTIKKyNkZWZpbmUgUkRTX1JETUFfRFJPUFBFRAkzCisjZGVmaW5lIFJEU19SRE1BX09USEVSX0VSUk9SCTQKKworLyoKKyAqIENvbW1vbiBzZXQgb2YgZmxhZ3MgZm9yIGFsbCBSRE1BIHJlbGF0ZWQgc3RydWN0cworICovCisjZGVmaW5lIFJEU19SRE1BX1JFQURXUklURQkweDAwMDEKKyNkZWZpbmUgUkRTX1JETUFfRkVOQ0UJCTB4MDAwMgkvKiB1c2UgRkVOQ0UgZm9yIGltbWVkaWF0ZSBzZW5kICovCisjZGVmaW5lIFJEU19SRE1BX0lOVkFMSURBVEUJMHgwMDA0CS8qIGludmFsaWRhdGUgUl9LZXkgYWZ0ZXIgZnJlZWluZyBNUiAqLworI2RlZmluZSBSRFNfUkRNQV9VU0VfT05DRQkweDAwMDgJLyogZnJlZSBNUiBhZnRlciB1c2UgKi8KKyNkZWZpbmUgUkRTX1JETUFfRE9OVFdBSVQJMHgwMDEwCS8qIERvbid0IHdhaXQgaW4gU0VUX0JBUlJJRVIgKi8KKyNkZWZpbmUgUkRTX1JETUFfTk9USUZZX01FCTB4MDAyMAkvKiBOb3RpZnkgd2hlbiBvcGVyYXRpb24gY29tcGxldGVzICovCisKKyNlbmRpZiAvKiBJQl9SRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGJjNTExNGQuLmUzNTZjOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mc19zYi5oPgogI2VuZGlmCiAKLXN0cnVjdCBmaWQ7Ci0KIC8qCiAgKiAgaW5jbHVkZS9saW51eC9yZWlzZXJfZnMuaAogICoKQEAgLTM3LDYgKzM1LDMzIEBACiAgKgogICovCiAKKy8qIGlvY3RsJ3MgY29tbWFuZCAqLworI2RlZmluZSBSRUlTRVJGU19JT0NfVU5QQUNLCQlfSU9XKDB4Q0QsMSxsb25nKQorLyogZGVmaW5lIGZvbGxvd2luZyBmbGFncyB0byBiZSB0aGUgc2FtZSBhcyBpbiBleHQyLCBzbyB0aGF0IGNoYXR0cigxKSwKKyAgIGxzYXR0cigxKSB3aWxsIHdvcmsgd2l0aCB1cy4gKi8KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVEZMQUdTCQlGU19JT0NfR0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVEZMQUdTCQlGU19JT0NfU0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVFZFUlNJT04JCUZTX0lPQ19HRVRWRVJTSU9OCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRWRVJTSU9OCQlGU19JT0NfU0VUVkVSU0lPTgorCisjaWZkZWYgX19LRVJORUxfXworLyogdGhlIDMyIGJpdCBjb21wYXQgZGVmaW5pdGlvbnMgd2l0aCBpbnQgYXJndW1lbnQgKi8KKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfVU5QQUNLCQlfSU9XKDB4Q0QsIDEsIGludCkKKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VURkxBR1MJCUZTX0lPQzMyX0dFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVEZMQUdTCQlGU19JT0MzMl9TRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRWRVJTSU9OCUZTX0lPQzMyX0dFVFZFUlNJT04KKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VUVkVSU0lPTglGU19JT0MzMl9TRVRWRVJTSU9OCisKKy8qIExvY2tpbmcgcHJpbWl0aXZlcyAqLworLyogUmlnaHQgbm93IHdlIGFyZSBzdGlsbCBmYWxsaW5nIGJhY2sgdG8gKHVuKWxvY2tfa2VybmVsLCBidXQgZXZlbnR1YWxseSB0aGF0CisgICB3b3VsZCBldm9sdmUgaW50byByZWFsIHBlci1mcyBsb2NrcyAqLworI2RlZmluZSByZWlzZXJmc193cml0ZV9sb2NrKCBzYiApIGxvY2tfa2VybmVsKCkKKyNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfdW5sb2NrKCBzYiApIHVubG9ja19rZXJuZWwoKQorCisvKiB4YXR0ciBzdHVmZiAqLworI2RlZmluZSBSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHMpIChSRUlTRVJGU19TQihzKS0+eGF0dHJfZGlyX3NlbSkKK3N0cnVjdCBmaWQ7CisKIC8qIGluIHJlYWRpbmcgdGhlICNkZWZpbmVzLCBpdCBtYXkgaGVscCB0byB1bmRlcnN0YW5kIHRoYXQgdGhleSBlbXBsb3kKICAgIHRoZSBmb2xsb3dpbmcgYWJicmV2aWF0aW9uczoKIApAQCAtNjk4LDYgKzcyMyw3IEBACiAvKiBvYmplY3QgaWRlbnRpZmllciBmb3Igcm9vdCBkaXIgKi8KICNkZWZpbmUgUkVJU0VSRlNfUk9PVF9PQkpFQ1RJRCAyCiAjZGVmaW5lIFJFSVNFUkZTX1JPT1RfUEFSRU5UX09CSkVDVElEIDEKKwogZXh0ZXJuIHN0cnVjdCByZWlzZXJmc19rZXkgcm9vdF9rZXk7CiAKIC8qIApAQCAtMTU0MCw3ICsxNTY2LDYgQEAKIC8qICAgICAgICAgICAgICAgICAgICBGVU5DVElPTiBERUNMQVJBVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiNpZmRlZiBfX0tFUk5FTF9fKi8KICNkZWZpbmUgZ2V0X2pvdXJuYWxfZGVzY19tYWdpYyhiaCkgKGJoLT5iX2RhdGEgKyBiaC0+Yl9zaXplIC0gMTIpCiAKICNkZWZpbmUgam91cm5hbF90cmFuc19oYWxmKGJsb2Nrc2l6ZSkgXApAQCAtMjE3OCwyOSArMjIwMyw2IEBACiAJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGludCByZWlzZXJmc191bnBhY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogCi0vKiBpb2N0bCdzIGNvbW1hbmQgKi8KLSNkZWZpbmUgUkVJU0VSRlNfSU9DX1VOUEFDSwkJX0lPVygweENELDEsbG9uZykKLS8qIGRlZmluZSBmb2xsb3dpbmcgZmxhZ3MgdG8gYmUgdGhlIHNhbWUgYXMgaW4gZXh0Miwgc28gdGhhdCBjaGF0dHIoMSksCi0gICBsc2F0dHIoMSkgd2lsbCB3b3JrIHdpdGggdXMuICovCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRGTEFHUwkJRlNfSU9DX0dFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRGTEFHUwkJRlNfSU9DX1NFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRWRVJTSU9OCQlGU19JT0NfR0VUVkVSU0lPTgotI2RlZmluZSBSRUlTRVJGU19JT0NfU0VUVkVSU0lPTgkJRlNfSU9DX1NFVFZFUlNJT04KIAotLyogdGhlIDMyIGJpdCBjb21wYXQgZGVmaW5pdGlvbnMgd2l0aCBpbnQgYXJndW1lbnQgKi8KLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfVU5QQUNLCQlfSU9XKDB4Q0QsIDEsIGludCkKLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VURkxBR1MJCUZTX0lPQzMyX0dFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVEZMQUdTCQlGU19JT0MzMl9TRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRWRVJTSU9OCUZTX0lPQzMyX0dFVFZFUlNJT04KLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VUVkVSU0lPTglGU19JT0MzMl9TRVRWRVJTSU9OCi0KLS8qIExvY2tpbmcgcHJpbWl0aXZlcyAqLwotLyogUmlnaHQgbm93IHdlIGFyZSBzdGlsbCBmYWxsaW5nIGJhY2sgdG8gKHVuKWxvY2tfa2VybmVsLCBidXQgZXZlbnR1YWxseSB0aGF0Ci0gICB3b3VsZCBldm9sdmUgaW50byByZWFsIHBlci1mcyBsb2NrcyAqLwotI2RlZmluZSByZWlzZXJmc193cml0ZV9sb2NrKCBzYiApIGxvY2tfa2VybmVsKCkKLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfdW5sb2NrKCBzYiApIHVubG9ja19rZXJuZWwoKQotCi0vKiB4YXR0ciBzdHVmZiAqLwotI2RlZmluZSBSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHMpIChSRUlTRVJGU19TQihzKS0+eGF0dHJfZGlyX3NlbSkKLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkJCQkvKiBfTElOVVhfUkVJU0VSX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IDFlNWY2NzMuLmJhMzI1NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMjE3LDYgKzIxNyw3IEBACiAjZGVmaW5lIFJUUFJPVF9ETlJPVVRFRAkxMwkvKiBERUNuZXQgcm91dGluZyBkYWVtb24gKi8KICNkZWZpbmUgUlRQUk9UX1hPUlAJMTQJLyogWE9SUCAqLwogI2RlZmluZSBSVFBST1RfTlRLCTE1CS8qIE5ldHN1a3VrdSAqLworI2RlZmluZSBSVFBST1RfREhDUAkxNiAgICAgIC8qIERIQ1AgY2xpZW50ICovCiAKIC8qIHJ0bV9zY29wZQogCkBAIC02MjIsOCArNjIzLDggQEAKIAogZXh0ZXJuIGludCBydG5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVjaG8pOwogZXh0ZXJuIGludCBydG5sX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkKTsKLWV4dGVybiBpbnQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCi0JCSAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpOworZXh0ZXJuIHZvaWQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLAorCQkJdTMyIGdyb3VwLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcnRubF9zZXRfc2tfZXJyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGludCBydG5ldGxpbmtfcHV0X21ldHJpY3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICptZXRyaWNzKTsKIGV4dGVybiBpbnQgcnRubF9wdXRfY2FjaGVpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAwMTFkYjJmLi5mZjkwNGIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC05OTgsNiArOTk4LDcgQEAKIAkJCSAgICAgIHN0cnVjdCBycSAqYnVzaWVzdCwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCiAJCQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSk7CiAJdm9pZCAoKnByZV9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwlpbnQgKCpuZWVkc19wb3N0X3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxKTsKIAl2b2lkICgqcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7CiAJdm9pZCAoKnRhc2tfd2FrZV91cCkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIApAQCAtMTA1Miw2ICsxMDUzLDEwIEBACiAJdTY0CQkJbGFzdF93YWtldXA7CiAJdTY0CQkJYXZnX292ZXJsYXA7CiAKKwl1NjQJCQlzdGFydF9ydW50aW1lOworCXU2NAkJCWF2Z193YWtldXA7CisJdTY0CQkJbnJfbWlncmF0aW9uczsKKwogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJdTY0CQkJd2FpdF9zdGFydDsKIAl1NjQJCQl3YWl0X21heDsKQEAgLTEwNjcsNyArMTA3Miw2IEBACiAJdTY0CQkJZXhlY19tYXg7CiAJdTY0CQkJc2xpY2VfbWF4OwogCi0JdTY0CQkJbnJfbWlncmF0aW9uczsKIAl1NjQJCQlucl9taWdyYXRpb25zX2NvbGQ7CiAJdTY0CQkJbnJfZmFpbGVkX21pZ3JhdGlvbnNfYWZmaW5lOwogCXU2NAkJCW5yX2ZhaWxlZF9taWdyYXRpb25zX3J1bm5pbmc7CkBAIC0xMTY0LDYgKzExNjgsNyBAQAogI2VuZGlmCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tzOworCXN0cnVjdCBwbGlzdF9ub2RlIHB1c2hhYmxlX3Rhc2tzOwogCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICphY3RpdmVfbW07CiAKQEAgLTExNzUsNiArMTE4MCw4IEBACiAJLyogPz8/ICovCiAJdW5zaWduZWQgaW50IHBlcnNvbmFsaXR5OwogCXVuc2lnbmVkIGRpZF9leGVjOjE7CisJdW5zaWduZWQgaW5fZXhlY3ZlOjE7CS8qIFRlbGwgdGhlIExTTXMgdGhhdCB0aGUgcHJvY2VzcyBpcyBkb2luZyBhbgorCQkJCSAqIGV4ZWN2ZSAqLwogCXBpZF90IHBpZDsKIAlwaWRfdCB0Z2lkOwogCkBAIC0xNjczLDYgKzE2ODAsMTYgQEAKIAlyZXR1cm4gc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgJm5ld19tYXNrKTsKIH0KIAorLyoKKyAqIEFyY2hpdGVjdHVyZXMgY2FuIHNldCB0aGlzIHRvIDEgaWYgdGhleSBoYXZlIHNwZWNpZmllZAorICogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgaW4gdGhlaXIgYXJjaCBLY29uZmlnLAorICogYnV0IHRoZW4gZHVyaW5nIGJvb3R1cCBpdCB0dXJucyBvdXQgdGhhdCBzY2hlZF9jbG9jaygpCisgKiBpcyByZWxpYWJsZSBhZnRlciBhbGw6CisgKi8KKyNpZmRlZiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSworZXh0ZXJuIGludCBzY2hlZF9jbG9ja19zdGFibGU7CisjZW5kaWYKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgc2NoZWRfY2xvY2tfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2N0cC5oIGIvaW5jbHVkZS9saW51eC9zY3RwLmgKaW5kZXggOGJhMWMzMi4uYzI3MzFiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY3RwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY3RwLmgKQEAgLTYwLDcgKzYwLDcgQEAKIAlfX2JlMTYgc291cmNlOwogCV9fYmUxNiBkZXN0OwogCV9fYmUzMiB2dGFnOwotCV9fYmUzMiBjaGVja3N1bTsKKwlfX2xlMzIgY2hlY2tzdW07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfc2N0cGhkcl90OwogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtMTcyLDM1ICsxNzIsMzUgQEAKIHR5cGVkZWYgZW51bSB7CiAKIAkvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy41ICovCi0JU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTwkJPSBfX2NvbnN0YW50X2h0b25zKDEpLAorCVNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk8JCT0gY3B1X3RvX2JlMTYoMSksCiAJLyogUkZDIDI5NjAgU2VjdGlvbiAzLjMuMi4xICovCi0JU0NUUF9QQVJBTV9JUFY0X0FERFJFU1MJCQk9IF9fY29uc3RhbnRfaHRvbnMoNSksCi0JU0NUUF9QQVJBTV9JUFY2X0FERFJFU1MJCQk9IF9fY29uc3RhbnRfaHRvbnMoNiksCi0JU0NUUF9QQVJBTV9TVEFURV9DT09LSUUJCQk9IF9fY29uc3RhbnRfaHRvbnMoNyksCi0JU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUwk9IF9fY29uc3RhbnRfaHRvbnMoOCksCi0JU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFCQk9IF9fY29uc3RhbnRfaHRvbnMoOSksCi0JU0NUUF9QQVJBTV9IT1NUX05BTUVfQUREUkVTUwkJPSBfX2NvbnN0YW50X2h0b25zKDExKSwKLQlTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTCT0gX19jb25zdGFudF9odG9ucygxMiksCi0JU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRQkJCT0gX19jb25zdGFudF9odG9ucygweDgwMDApLAorCVNDVFBfUEFSQU1fSVBWNF9BRERSRVNTCQkJPSBjcHVfdG9fYmUxNig1KSwKKwlTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUwkJCT0gY3B1X3RvX2JlMTYoNiksCisJU0NUUF9QQVJBTV9TVEFURV9DT09LSUUJCQk9IGNwdV90b19iZTE2KDcpLAorCVNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlMJPSBjcHVfdG9fYmUxNig4KSwKKwlTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkUJCT0gY3B1X3RvX2JlMTYoOSksCisJU0NUUF9QQVJBTV9IT1NUX05BTUVfQUREUkVTUwkJPSBjcHVfdG9fYmUxNigxMSksCisJU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUwk9IGNwdV90b19iZTE2KDEyKSwKKwlTQ1RQX1BBUkFNX0VDTl9DQVBBQkxFCQkJPSBjcHVfdG9fYmUxNigweDgwMDApLAogCiAJLyogQVVUSCBFeHRlbnNpb24gU2VjdGlvbiAzICovCi0JU0NUUF9QQVJBTV9SQU5ET00JCQk9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDAyKSwKLQlTQ1RQX1BBUkFNX0NIVU5LUwkJCT0gX19jb25zdGFudF9odG9ucygweDgwMDMpLAotCVNDVFBfUEFSQU1fSE1BQ19BTEdPCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwNCksCisJU0NUUF9QQVJBTV9SQU5ET00JCQk9IGNwdV90b19iZTE2KDB4ODAwMiksCisJU0NUUF9QQVJBTV9DSFVOS1MJCQk9IGNwdV90b19iZTE2KDB4ODAwMyksCisJU0NUUF9QQVJBTV9ITUFDX0FMR08JCQk9IGNwdV90b19iZTE2KDB4ODAwNCksCiAKIAkvKiBBZGQtSVA6IFN1cHBvcnRlZCBFeHRlbnNpb25zLCBTZWN0aW9uIDQuMiAqLwotCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVAk9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDA4KSwKKwlTQ1RQX1BBUkFNX1NVUFBPUlRFRF9FWFQJPSBjcHVfdG9fYmUxNigweDgwMDgpLAogCiAJLyogUFItU0NUUCBTZWMgMy4xICovCi0JU0NUUF9QQVJBTV9GV0RfVFNOX1NVUFBPUlQJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMCksCisJU0NUUF9QQVJBTV9GV0RfVFNOX1NVUFBPUlQJPSBjcHVfdG9fYmUxNigweGMwMDApLAogCiAJLyogQWRkLUlQIEV4dGVuc2lvbi4gU2VjdGlvbiAzLjIgKi8KLQlTQ1RQX1BBUkFNX0FERF9JUAkJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMSksCi0JU0NUUF9QQVJBTV9ERUxfSVAJCT0gX19jb25zdGFudF9odG9ucygweGMwMDIpLAotCVNDVFBfUEFSQU1fRVJSX0NBVVNFCQk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAzKSwKLQlTQ1RQX1BBUkFNX1NFVF9QUklNQVJZCQk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDA0KSwKLQlTQ1RQX1BBUkFNX1NVQ0NFU1NfUkVQT1JUCT0gX19jb25zdGFudF9odG9ucygweGMwMDUpLAotCVNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQgPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwNiksCisJU0NUUF9QQVJBTV9BRERfSVAJCT0gY3B1X3RvX2JlMTYoMHhjMDAxKSwKKwlTQ1RQX1BBUkFNX0RFTF9JUAkJPSBjcHVfdG9fYmUxNigweGMwMDIpLAorCVNDVFBfUEFSQU1fRVJSX0NBVVNFCQk9IGNwdV90b19iZTE2KDB4YzAwMyksCisJU0NUUF9QQVJBTV9TRVRfUFJJTUFSWQkJPSBjcHVfdG9fYmUxNigweGMwMDQpLAorCVNDVFBfUEFSQU1fU1VDQ0VTU19SRVBPUlQJPSBjcHVfdG9fYmUxNigweGMwMDUpLAorCVNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQgPSBjcHVfdG9fYmUxNigweGMwMDYpLAogCiB9IHNjdHBfcGFyYW1fdDsgLyogZW51bSAqLwogCkBAIC0yMTIsMTMgKzIxMiwxMyBAQAogICoKICAqLwogdHlwZWRlZiBlbnVtIHsKLQlTQ1RQX1BBUkFNX0FDVElPTl9ESVNDQVJEICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMDAwKSwKLQlTQ1RQX1BBUkFNX0FDVElPTl9ESVNDQVJEX0VSUiA9IF9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKSwKLQlTQ1RQX1BBUkFNX0FDVElPTl9TS0lQICAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKSwKLQlTQ1RQX1BBUkFNX0FDVElPTl9TS0lQX0VSUiAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAwKSwKKwlTQ1RQX1BBUkFNX0FDVElPTl9ESVNDQVJEICAgICA9IGNwdV90b19iZTE2KDB4MDAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fRElTQ0FSRF9FUlIgPSBjcHVfdG9fYmUxNigweDQwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVAgICAgICAgID0gY3B1X3RvX2JlMTYoMHg4MDAwKSwKKwlTQ1RQX1BBUkFNX0FDVElPTl9TS0lQX0VSUiAgICA9IGNwdV90b19iZTE2KDB4YzAwMCksCiB9IHNjdHBfcGFyYW1fYWN0aW9uX3Q7CiAKLWVudW0geyBTQ1RQX1BBUkFNX0FDVElPTl9NQVNLID0gX19jb25zdGFudF9odG9ucygweGMwMDApLCB9OworZW51bSB7IFNDVFBfUEFSQU1fQUNUSU9OX01BU0sgPSBjcHVfdG9fYmUxNigweGMwMDApLCB9OwogCiAvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4xIFBheWxvYWQgRGF0YSAoREFUQSkgKDApICovCiAKQEAgLTQ1NywxNyArNDU3LDE3IEBACiAgKi8KIHR5cGVkZWYgZW51bSB7CiAKLQlTQ1RQX0VSUk9SX05PX0VSUk9SCSAgID0gX19jb25zdGFudF9odG9ucygweDAwKSwKLQlTQ1RQX0VSUk9SX0lOVl9TVFJNCSAgID0gX19jb25zdGFudF9odG9ucygweDAxKSwKLQlTQ1RQX0VSUk9SX01JU1NfUEFSQU0gCSAgID0gX19jb25zdGFudF9odG9ucygweDAyKSwKLQlTQ1RQX0VSUk9SX1NUQUxFX0NPT0tJRQkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMyksCi0JU0NUUF9FUlJPUl9OT19SRVNPVVJDRSAJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDQpLAotCVNDVFBfRVJST1JfRE5TX0ZBSUxFRCAgICAgID0gX19jb25zdGFudF9odG9ucygweDA1KSwKLQlTQ1RQX0VSUk9SX1VOS05PV05fQ0hVTksgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNiksCi0JU0NUUF9FUlJPUl9JTlZfUEFSQU0gICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDcpLAotCVNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTSAgID0gX19jb25zdGFudF9odG9ucygweDA4KSwKLQlTQ1RQX0VSUk9SX05PX0RBVEEgICAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwOSksCi0JU0NUUF9FUlJPUl9DT09LSUVfSU5fU0hVVERPV04gPSBfX2NvbnN0YW50X2h0b25zKDB4MGEpLAorCVNDVFBfRVJST1JfTk9fRVJST1IJICAgPSBjcHVfdG9fYmUxNigweDAwKSwKKwlTQ1RQX0VSUk9SX0lOVl9TVFJNCSAgID0gY3B1X3RvX2JlMTYoMHgwMSksCisJU0NUUF9FUlJPUl9NSVNTX1BBUkFNIAkgICA9IGNwdV90b19iZTE2KDB4MDIpLAorCVNDVFBfRVJST1JfU1RBTEVfQ09PS0lFCSAgID0gY3B1X3RvX2JlMTYoMHgwMyksCisJU0NUUF9FUlJPUl9OT19SRVNPVVJDRSAJICAgPSBjcHVfdG9fYmUxNigweDA0KSwKKwlTQ1RQX0VSUk9SX0ROU19GQUlMRUQgICAgICA9IGNwdV90b19iZTE2KDB4MDUpLAorCVNDVFBfRVJST1JfVU5LTk9XTl9DSFVOSyAgID0gY3B1X3RvX2JlMTYoMHgwNiksCisJU0NUUF9FUlJPUl9JTlZfUEFSQU0gICAgICAgPSBjcHVfdG9fYmUxNigweDA3KSwKKwlTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU0gICA9IGNwdV90b19iZTE2KDB4MDgpLAorCVNDVFBfRVJST1JfTk9fREFUQSAgICAgICAgID0gY3B1X3RvX2JlMTYoMHgwOSksCisJU0NUUF9FUlJPUl9DT09LSUVfSU5fU0hVVERPV04gPSBjcHVfdG9fYmUxNigweDBhKSwKIAogCiAJLyogU0NUUCBJbXBsZW1lbnRhdGlvbiBHdWlkZToKQEAgLTQ3Niw5ICs0NzYsOSBAQAogCSAqICAxMyAgUHJvdG9jb2wgVmlvbGF0aW9uCiAJICovCiAKLQlTQ1RQX0VSUk9SX1JFU1RBUlQgICAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYiksCi0JU0NUUF9FUlJPUl9VU0VSX0FCT1JUICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MGMpLAotCVNDVFBfRVJST1JfUFJPVE9fVklPTEFUSU9OID0gX19jb25zdGFudF9odG9ucygweDBkKSwKKwlTQ1RQX0VSUk9SX1JFU1RBUlQgICAgICAgICA9IGNwdV90b19iZTE2KDB4MGIpLAorCVNDVFBfRVJST1JfVVNFUl9BQk9SVCAgICAgID0gY3B1X3RvX2JlMTYoMHgwYyksCisJU0NUUF9FUlJPUl9QUk9UT19WSU9MQVRJT04gPSBjcHVfdG9fYmUxNigweDBkKSwKIAogCS8qIEFERElQIFNlY3Rpb24gMy4zICBOZXcgRXJyb3IgQ2F1c2VzCiAJICoKQEAgLTQ5MywxMSArNDkzLDExIEBACiAJICogMHgwMTAzICAgICAgICAgIEFzc29jaWF0aW9uIEFib3J0ZWQgZHVlIHRvIGlsbGVnYWwgQVNDT05GLUFDSwogCSAqIDB4MDEwNCAgICAgICAgICBSZXF1ZXN0IHJlZnVzZWQgLSBubyBhdXRob3JpemF0aW9uLgogCSAqLwotCVNDVFBfRVJST1JfREVMX0xBU1RfSVAJPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwMCksCi0JU0NUUF9FUlJPUl9SU1JDX0xPVwk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAxKSwKLQlTQ1RQX0VSUk9SX0RFTF9TUkNfSVAJPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwMiksCi0JU0NUUF9FUlJPUl9BU0NPTkZfQUNLICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwMyksCi0JU0NUUF9FUlJPUl9SRVFfUkVGVVNFRAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTA0KSwKKwlTQ1RQX0VSUk9SX0RFTF9MQVNUX0lQCT0gY3B1X3RvX2JlMTYoMHgwMTAwKSwKKwlTQ1RQX0VSUk9SX1JTUkNfTE9XCT0gY3B1X3RvX2JlMTYoMHgwMTAxKSwKKwlTQ1RQX0VSUk9SX0RFTF9TUkNfSVAJPSBjcHVfdG9fYmUxNigweDAxMDIpLAorCVNDVFBfRVJST1JfQVNDT05GX0FDSyAgID0gY3B1X3RvX2JlMTYoMHgwMTAzKSwKKwlTQ1RQX0VSUk9SX1JFUV9SRUZVU0VECT0gY3B1X3RvX2JlMTYoMHgwMTA0KSwKIAogCS8qIEFVVEggU2VjdGlvbiA0LiAgTmV3IEVycm9yIENhdXNlCiAJICoKQEAgLTUwOSw3ICs1MDksNyBAQAogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogMHgwMTA1ICAgICAgICAgIFVuc3VwcG9ydGVkIEhNQUMgSWRlbnRpZmllcgogCSAqLwotCSBTQ1RQX0VSUk9SX1VOU1VQX0hNQUMJPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwNSkKKwkgU0NUUF9FUlJPUl9VTlNVUF9ITUFDCT0gY3B1X3RvX2JlMTYoMHgwMTA1KQogfSBzY3RwX2Vycm9yX3Q7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmgKaW5kZXggYmJmNDg5ZC4uZDIzOTc5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCkBAIC0xMiw2ICsxMiw4IEBACiAjaWZuZGVmIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSAogI2RlZmluZSBfTElOVVhfU0VMSU5VWF9ORVRMSU5LX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIE1lc3NhZ2UgdHlwZXMuICovCiAjZGVmaW5lIFNFTE5MX01TR19CQVNFIDB4MTAKIGVudW0gewpAQCAtMzgsMTEgKzQwLDExIEBACiAKIC8qIE1lc3NhZ2Ugc3RydWN0dXJlcyAqLwogc3RydWN0IHNlbG5sX21zZ19zZXRlbmZvcmNlIHsKLQlpbnQzMl90CQl2YWw7CisJX19zMzIJCXZhbDsKIH07CiAKIHN0cnVjdCBzZWxubF9tc2dfcG9saWN5bG9hZCB7Ci0JdV9pbnQzMl90CXNlcW5vOworCV9fdTMyCXNlcW5vOwogfTsKIAogI2VuZGlmIC8qIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9jbXQuaCBiL2luY2x1ZGUvbGludXgvc2hfY210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjYWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2hfY210LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX1NIX0NNVF9IX18KKyNkZWZpbmUgX19TSF9DTVRfSF9fCisKK3N0cnVjdCBzaF9jbXRfY29uZmlnIHsKKwljaGFyICpuYW1lOworCXVuc2lnbmVkIGxvbmcgY2hhbm5lbF9vZmZzZXQ7CisJaW50IHRpbWVyX2JpdDsKKwljaGFyICpjbGs7CisJdW5zaWduZWQgbG9uZyBjbG9ja2V2ZW50X3JhdGluZzsKKwl1bnNpZ25lZCBsb25nIGNsb2Nrc291cmNlX3JhdGluZzsKK307CisKKyNlbmRpZiAvKiBfX1NIX0NNVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oIGIvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKaW5kZXggNjhlMjEyZi4uZWIxNDIzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKQEAgLTg1LDYgKzg1LDcgQEAKIH0KICNlbmRpZgogCit1bnNpZ25lZCBpbnQgaW50Y19ldnQyaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpOwogdm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpOwogaW50IGludGNfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmlvKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggOWRjZjk1Ni4uYmIxOTgxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0yOSw5ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogCi0jZGVmaW5lIEhBVkVfQUxMT0NfU0tCCQkvKiBGb3IgdGhlIGRyaXZlcnMgdG8ga25vdyAqLwotI2RlZmluZSBIQVZFX0FMSUdOQUJMRV9TS0IJLyogRGl0dG8gOCkJCSAgICovCi0KIC8qIERvbid0IGNoYW5nZSB0aGlzIHdpdGhvdXQgY2hhbmdpbmcgc2tiX2NzdW1fdW5uZWNlc3NhcnkhICovCiAjZGVmaW5lIENIRUNLU1VNX05PTkUgMAogI2RlZmluZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSAxCkBAIC0xMzUsNiArMTMyLDU1IEBACiAJX191MzIgc2l6ZTsKIH07CiAKKyNkZWZpbmUgSEFWRV9IV19USU1FX1NUQU1QCisKKy8qKgorICogc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIC0gaGFyZHdhcmUgdGltZSBzdGFtcHMKKyAqIEBod3RzdGFtcDoJaGFyZHdhcmUgdGltZSBzdGFtcCB0cmFuc2Zvcm1lZCBpbnRvIGR1cmF0aW9uCisgKgkJc2luY2UgYXJiaXRyYXJ5IHBvaW50IGluIHRpbWUKKyAqIEBzeXN0c3RhbXA6CWh3dHN0YW1wIHRyYW5zZm9ybWVkIHRvIHN5c3RlbSB0aW1lIGJhc2UKKyAqCisgKiBTb2Z0d2FyZSB0aW1lIHN0YW1wcyBnZW5lcmF0ZWQgYnkga3RpbWVfZ2V0X3JlYWwoKSBhcmUgc3RvcmVkIGluCisgKiBza2ItPnRzdGFtcC4gVGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBraW5kcyBvZiB0aW1lCisgKiBzdGFtcHMgaXMgYXMgZm9sbG93czoKKyAqCisgKiBzeXN0c3RhbXAgYW5kIHRzdGFtcCBjYW4gYmUgY29tcGFyZWQgYWdhaW5zdCBlYWNoIG90aGVyIGluCisgKiBhcmJpdHJhcnkgY29tYmluYXRpb25zLiAgVGhlIGFjY3VyYWN5IG9mIGEKKyAqIHN5c3RzdGFtcC90c3RhbXAvInN5c3RzdGFtcCBmcm9tIG90aGVyIGRldmljZSIgY29tcGFyaXNvbiBpcworICogbGltaXRlZCBieSB0aGUgYWNjdXJhY3kgb2YgdGhlIHRyYW5zZm9ybWF0aW9uIGludG8gc3lzdGVtIHRpbWUKKyAqIGJhc2UuIFRoaXMgZGVwZW5kcyBvbiB0aGUgZGV2aWNlIGRyaXZlciBhbmQgaXRzIHVuZGVybHlpbmcKKyAqIGhhcmR3YXJlLgorICoKKyAqIGh3dHN0YW1wcyBjYW4gb25seSBiZSBjb21wYXJlZCBhZ2FpbnN0IG90aGVyIGh3dHN0YW1wcyBmcm9tCisgKiB0aGUgc2FtZSBkZXZpY2UuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgYXR0YWNoZWQgdG8gcGFja2V0cyBhcyBwYXJ0IG9mIHRoZQorICogJnNrYl9zaGFyZWRfaW5mby4gVXNlIHNrYl9od3RzdGFtcHMoKSB0byBnZXQgYSBwb2ludGVyLgorICovCitzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgeworCWt0aW1lX3QJaHd0c3RhbXA7CisJa3RpbWVfdAlzeXN0c3RhbXA7Cit9OworCisvKioKKyAqIHN0cnVjdCBza2Jfc2hhcmVkX3R4IC0gaW5zdHJ1Y3Rpb25zIGZvciB0aW1lIHN0YW1waW5nIG9mIG91dGdvaW5nIHBhY2tldHMKKyAqIEBoYXJkd2FyZToJCWdlbmVyYXRlIGhhcmR3YXJlIHRpbWUgc3RhbXAKKyAqIEBzb2Z0d2FyZToJCWdlbmVyYXRlIHNvZnR3YXJlIHRpbWUgc3RhbXAKKyAqIEBpbl9wcm9ncmVzczoJZGV2aWNlIGRyaXZlciBpcyBnb2luZyB0byBwcm92aWRlCisgKgkJCWhhcmR3YXJlIHRpbWUgc3RhbXAKKyAqCisgKiBUaGVzZSBmbGFncyBhcmUgYXR0YWNoZWQgdG8gcGFja2V0cyBhcyBwYXJ0IG9mIHRoZQorICogJnNrYl9zaGFyZWRfaW5mby4gVXNlIHNrYl90eCgpIHRvIGdldCBhIHBvaW50ZXIuCisgKi8KK3VuaW9uIHNrYl9zaGFyZWRfdHggeworCXN0cnVjdCB7CisJCV9fdTgJaGFyZHdhcmU6MSwKKwkJCXNvZnR3YXJlOjEsCisJCQlpbl9wcm9ncmVzczoxOworCX07CisJX191OCBmbGFnczsKK307CisKIC8qIFRoaXMgZGF0YSBpcyBpbnZhcmlhbnQgYWNyb3NzIGNsb25lcyBhbmQgbGl2ZXMgYXQKICAqIHRoZSBlbmQgb2YgdGhlIGhlYWRlciBkYXRhLCBpZS4gYXQgc2tiLT5lbmQuCiAgKi8KQEAgLTE0NiwxMCArMTkyLDEyIEBACiAJdW5zaWduZWQgc2hvcnQJZ3NvX3NlZ3M7CiAJdW5zaWduZWQgc2hvcnQgIGdzb190eXBlOwogCV9fYmUzMiAgICAgICAgICBpcDZfZnJhZ19pZDsKKwl1bmlvbiBza2Jfc2hhcmVkX3R4IHR4X2ZsYWdzOwogI2lmZGVmIENPTkZJR19IQVNfRE1BCiAJdW5zaWduZWQgaW50CW51bV9kbWFfbWFwczsKICNlbmRpZgogCXN0cnVjdCBza19idWZmCSpmcmFnX2xpc3Q7CisJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIGh3dHN0YW1wczsKIAlza2JfZnJhZ190CWZyYWdzW01BWF9TS0JfRlJBR1NdOwogI2lmZGVmIENPTkZJR19IQVNfRE1BCiAJZG1hX2FkZHJfdAlkbWFfbWFwc1tNQVhfU0tCX0ZSQUdTICsgMV07CkBAIC0zNzMsNiArNDIxLDcgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBjb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkCSAgICAgICBfX2tmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsCiAJCQkJICAgZ2ZwX3QgcHJpb3JpdHksIGludCBmY2xvbmUsIGludCBub2RlKTsKQEAgLTQxMSw3ICs0NjAsOCBAQAogZXh0ZXJuIGludAkgICAgICAgc2tiX2Nvd19kYXRhKHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWlsYml0cywKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKip0cmFpbGVyKTsKIGV4dGVybiBpbnQJICAgICAgIHNrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCk7Ci0jZGVmaW5lIGRldl9rZnJlZV9za2IoYSkJa2ZyZWVfc2tiKGEpCisjZGVmaW5lIGRldl9rZnJlZV9za2IoYSkJY29uc3VtZV9za2IoYSkKKyNkZWZpbmUgZGV2X2NvbnN1bWVfc2tiKGEpCWtmcmVlX3NrYl9jbGVhbihhKQogZXh0ZXJuIHZvaWQJICAgICAgc2tiX292ZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwKIAkJCQkgICAgIHZvaWQgKmhlcmUpOwogZXh0ZXJuIHZvaWQJICAgICAgc2tiX3VuZGVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCkBAIC00NTksNiArNTA5LDE2IEBACiAvKiBJbnRlcm5hbCAqLwogI2RlZmluZSBza2Jfc2hpbmZvKFNLQikJKChzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICopKHNrYl9lbmRfcG9pbnRlcihTS0IpKSkKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNrYl9od3RzdGFtcHMoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gJnNrYl9zaGluZm8oc2tiKS0+aHd0c3RhbXBzOworfQorCitzdGF0aWMgaW5saW5lIHVuaW9uIHNrYl9zaGFyZWRfdHggKnNrYl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAmc2tiX3NoaW5mbyhza2IpLT50eF9mbGFnczsKK30KKwogLyoqCiAgKglza2JfcXVldWVfZW1wdHkgLSBjaGVjayBpZiBhIHF1ZXVlIGlzIGVtcHR5CiAgKglAbGlzdDogcXVldWUgaGVhZApAQCAtMTI3OCw3ICsxMzM4LDcgQEAKICAqIFRoZSBuZXR3b3JraW5nIGxheWVyIHJlc2VydmVzIHNvbWUgaGVhZHJvb20gaW4gc2tiIGRhdGEgKHZpYQogICogZGV2X2FsbG9jX3NrYikuIFRoaXMgaXMgdXNlZCB0byBhdm9pZCBoYXZpbmcgdG8gcmVhbGxvY2F0ZSBza2IgZGF0YSB3aGVuCiAgKiB0aGUgaGVhZGVyIGhhcyB0byBncm93LiBJbiB0aGUgZGVmYXVsdCBjYXNlLCBpZiB0aGUgaGVhZGVyIGhhcyB0byBncm93Ci0gKiAxNiBieXRlcyBvciBsZXNzIHdlIGF2b2lkIHRoZSByZWFsbG9jYXRpb24uCisgKiAzMiBieXRlcyBvciBsZXNzIHdlIGF2b2lkIHRoZSByZWFsbG9jYXRpb24uCiAgKgogICogVW5mb3J0dW5hdGVseSB0aGlzIGhlYWRyb29tIGNoYW5nZXMgdGhlIERNQSBhbGlnbm1lbnQgb2YgdGhlIHJlc3VsdGluZwogICogbmV0d29yayBwYWNrZXQuIEFzIGZvciBORVRfSVBfQUxJR04sIHRoaXMgdW5hbGlnbmVkIERNQSBpcyBleHBlbnNpdmUKQEAgLTEyODYsMTEgKzEzNDYsMTEgQEAKICAqIHBlcmhhcHMgc2V0dGluZyBpdCB0byBhIGNhY2hlbGluZSBpbiBzaXplIChzaW5jZSB0aGF0IHdpbGwgbWFpbnRhaW4KICAqIGNhY2hlbGluZSBhbGlnbm1lbnQgb2YgdGhlIERNQSkuIEl0IG11c3QgYmUgYSBwb3dlciBvZiAyLgogICoKLSAqIFZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgbGF5ZXIgZXhwZWN0IGF0IGxlYXN0IDE2IGJ5dGVzIG9mCisgKiBWYXJpb3VzIHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIGxheWVyIGV4cGVjdCBhdCBsZWFzdCAzMiBieXRlcyBvZgogICogaGVhZHJvb20sIHlvdSBzaG91bGQgbm90IHJlZHVjZSB0aGlzLgogICovCiAjaWZuZGVmIE5FVF9TS0JfUEFECi0jZGVmaW5lIE5FVF9TS0JfUEFECTE2CisjZGVmaW5lIE5FVF9TS0JfUEFECTMyCiAjZW5kaWYKIAogZXh0ZXJuIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CkBAIC0xNjc4LDggKzE3MzgsNiBAQAogCQkJCSBpbnQgc2hpZnRsZW4pOwogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcyk7Ci1leHRlcm4gaW50CSAgICAgICBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogc3RhdGljIGlubGluZSB2b2lkICpza2JfaGVhZGVyX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAkJCQkgICAgICAgaW50IGxlbiwgdm9pZCAqYnVmZmVyKQpAQCAtMTcyNiw2ICsxNzg0LDExIEBACiAKIGV4dGVybiB2b2lkIHNrYl9pbml0KHZvaWQpOwogCitzdGF0aWMgaW5saW5lIGt0aW1lX3Qgc2tiX2dldF9rdGltZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPnRzdGFtcDsKK30KKwogLyoqCiAgKglza2JfZ2V0X3RpbWVzdGFtcCAtIGdldCB0aW1lc3RhbXAgZnJvbSBhIHNrYgogICoJQHNrYjogc2tiIHRvIGdldCBzdGFtcCBmcm9tCkBAIC0xNzM1LDExICsxNzk4LDE4IEBACiAgKglUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBvZmZzZXQgYmFjayB0byBhIHN0cnVjdCB0aW1ldmFsIGFuZCBzdG9yZXMKICAqCWl0IGluIHN0YW1wLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dldF90aW1lc3RhbXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRpbWV2YWwgKnN0YW1wKQorc3RhdGljIGlubGluZSB2b2lkIHNrYl9nZXRfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgdGltZXZhbCAqc3RhbXApCiB7CiAJKnN0YW1wID0ga3RpbWVfdG9fdGltZXZhbChza2ItPnRzdGFtcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfZ2V0X3RpbWVzdGFtcG5zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqc3RhbXApCit7CisJKnN0YW1wID0ga3RpbWVfdG9fdGltZXNwZWMoc2tiLT50c3RhbXApOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX19uZXRfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc2tiLT50c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpOwpAQCAtMTc1NSw2ICsxODI1LDIwIEBACiAJcmV0dXJuIGt0aW1lX3NldCgwLCAwKTsKIH0KIAorLyoqCisgKiBza2JfdHN0YW1wX3R4IC0gcXVldWUgY2xvbmUgb2Ygc2tiIHdpdGggc2VuZCB0aW1lIHN0YW1wcworICogQG9yaWdfc2tiOgl0aGUgb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0CisgKiBAaHd0c3RhbXBzOgloYXJkd2FyZSB0aW1lIHN0YW1wcywgbWF5IGJlIE5VTEwgaWYgbm90IGF2YWlsYWJsZQorICoKKyAqIElmIHRoZSBza2IgaGFzIGEgc29ja2V0IGFzc29jaWF0ZWQsIHRoZW4gdGhpcyBmdW5jdGlvbiBjbG9uZXMgdGhlCisgKiBza2IgKHRodXMgc2hhcmluZyB0aGUgYWN0dWFsIGRhdGEgYW5kIG9wdGlvbmFsIHN0cnVjdHVyZXMpLCBzdG9yZXMKKyAqIHRoZSBvcHRpb25hbCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGluZm9ybWF0aW9uIChpZiBub24gTlVMTCkgb3IKKyAqIGdlbmVyYXRlcyBhIHNvZnR3YXJlIHRpbWUgc3RhbXAgKG90aGVyd2lzZSksIHRoZW4gcXVldWVzIHRoZSBjbG9uZQorICogdG8gdGhlIGVycm9yIHF1ZXVlIG9mIHRoZSBzb2NrZXQuICBFcnJvcnMgYXJlIHNpbGVudGx5IGlnbm9yZWQuCisgKi8KK2V4dGVybiB2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLAorCQkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpOworCiBleHRlcm4gX19zdW0xNiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pOwogZXh0ZXJuIF9fc3VtMTYgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTE4ODUsNyArMTk2OSw3IEBACiAJc2tiLT5xdWV1ZV9tYXBwaW5nID0gcXVldWVfbWFwcGluZzsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nOwogfQpAQCAtMTg5NSw2ICsxOTc5LDI0IEBACiAJdG8tPnF1ZXVlX21hcHBpbmcgPSBmcm9tLT5xdWV1ZV9tYXBwaW5nOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3JlY29yZF9yeF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgcnhfcXVldWUpCit7CisJc2tiLT5xdWV1ZV9tYXBwaW5nID0gcnhfcXVldWUgKyAxOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3J4X3F1ZXVlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+cXVldWVfbWFwcGluZyAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBza2JfcnhfcXVldWVfcmVjb3JkZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHNrYi0+cXVldWVfbWFwcGluZyAhPSAwKTsKK30KKworZXh0ZXJuIHUxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKICNpZmRlZiBDT05GSUdfWEZSTQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VjX3BhdGggKnNrYl9zZWNfcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oIGIvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oCmluZGV4IDFjYmYwMzEuLmIzMjcyNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21zYzkxMXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ntc2M5MTF4LmgKQEAgLTQzLDUgKzQzLDggQEAKIC8qIENvbnN0YW50cyBmb3IgZmxhZ3MgKi8KICNkZWZpbmUgU01TQzkxMVhfVVNFXzE2QklUIAkJCShCSVQoMCkpCiAjZGVmaW5lIFNNU0M5MTFYX1VTRV8zMkJJVCAJCQkoQklUKDEpKQorI2RlZmluZSBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkJCShCSVQoMikpCisjZGVmaW5lIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSAJCShCSVQoMykpCisjZGVmaW5lIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MJCShCSVQoNCkpCiAKICNlbmRpZiAvKiBfX0xJTlVYX1NNU0M5MTFYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMjBmYzRiYi4uNDIxYWZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogcGlkX3QJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CQkvKiBfX3VzZXIJCQkqLwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBleHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpOwotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXNhX2ZhbWlseV90OwogCkBAIC0xNzksNiArMTgxLDcgQEAKICNkZWZpbmUgQUZfQVNICQkxOAkvKiBBc2gJCQkJKi8KICNkZWZpbmUgQUZfRUNPTkVUCTE5CS8qIEFjb3JuIEVjb25ldAkJCSovCiAjZGVmaW5lIEFGX0FUTVNWQwkyMAkvKiBBVE0gU1ZDcwkJCSovCisjZGVmaW5lIEFGX1JEUwkJMjEJLyogUkRTIHNvY2tldHMgCQkJKi8KICNkZWZpbmUgQUZfU05BCQkyMgkvKiBMaW51eCBTTkEgUHJvamVjdCAobnV0dGVycyEpICovCiAjZGVmaW5lIEFGX0lSREEJCTIzCS8qIElSREEgc29ja2V0cwkJCSovCiAjZGVmaW5lIEFGX1BQUE9YCTI0CS8qIFBQUG9YIHNvY2tldHMJCSovCkBAIC0yMTcsNiArMjIwLDcgQEAKICNkZWZpbmUgUEZfQVNICQlBRl9BU0gKICNkZWZpbmUgUEZfRUNPTkVUCUFGX0VDT05FVAogI2RlZmluZSBQRl9BVE1TVkMJQUZfQVRNU1ZDCisjZGVmaW5lIFBGX1JEUwkJQUZfUkRTCiAjZGVmaW5lIFBGX1NOQQkJQUZfU05BCiAjZGVmaW5lIFBGX0lSREEJCUFGX0lSREEKICNkZWZpbmUgUEZfUFBQT1gJQUZfUFBQT1gKQEAgLTI5OCw2ICszMDIsNyBAQAogI2RlZmluZSBTT0xfUFBQT0wyVFAJMjczCiAjZGVmaW5lIFNPTF9CTFVFVE9PVEgJMjc0CiAjZGVmaW5lIFNPTF9QTlBJUEUJMjc1CisjZGVmaW5lIFNPTF9SRFMJCTI3NgogCiAvKiBJUFggb3B0aW9ucyAqLwogI2RlZmluZSBJUFhfVFlQRQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaCBiL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCmluZGV4IGFiZWY3NTkuLjI0MWYxNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCkBAIC0xMjIsNiArMTIyLDkgQEAKICNkZWZpbmUgU0lPQ0JSQURESUYJMHg4OWEyCQkvKiBhZGQgaW50ZXJmYWNlIHRvIGJyaWRnZSAgICAgICovCiAjZGVmaW5lIFNJT0NCUkRFTElGCTB4ODlhMwkJLyogcmVtb3ZlIGludGVyZmFjZSBmcm9tIGJyaWRnZSAqLwogCisvKiBoYXJkd2FyZSB0aW1lIHN0YW1waW5nOiBwYXJhbWV0ZXJzIGluIGxpbnV4L25ldF90c3RhbXAuaCAqLworI2RlZmluZSBTSU9DU0hXVFNUQU1QICAgMHg4OWIwCisKIC8qIERldmljZSBwcml2YXRlIGlvY3RsIGNhbGxzICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL2xpYmVydGFzX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTA2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogYm9hcmQtc3BlY2lmaWMgZGF0YSBmb3IgdGhlIGxpYmVydGFzX3NwaSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJQkVSVEFTX1NQSV9IXworI2RlZmluZSBfTElCRVJUQVNfU1BJX0hfCisKK3N0cnVjdCBzcGlfZGV2aWNlOworCitzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgeworCS8qIFRoZXJlIGFyZSB0d28gd2F5cyB0byByZWFkIGRhdGEgZnJvbSB0aGUgV0xBTiBtb2R1bGUncyBTUEkKKwkgKiBpbnRlcmZhY2UuIFNldHRpbmcgMCBvciAxIGhlcmUgY29udHJvbHMgd2hpY2ggb25lIGlzIHVzZWQuCisJICoKKwkgKiBVc3VhbGx5IHlvdSB3YW50IHRvIHNldCB1c2VfZHVtbXlfd3JpdGVzID0gMS4KKwkgKiBIb3dldmVyLCBpZiB0aGF0IGRvZXNuJ3Qgd29yayBvciBpZiB5b3UgYXJlIHVzaW5nIGEgc2xvdyBTUEkgY2xvY2sKKwkgKiBzcGVlZCwgeW91IG1heSB3YW50IHRvIHVzZSAwIGhlcmUuICovCisJdTE2IHVzZV9kdW1teV93cml0ZXM7CisKKwkvKiBHUElPIG51bWJlciB0byB1c2UgYXMgY2hpcCBzZWxlY3QgKi8KKwl1MTYgZ3Bpb19jczsKKworCS8qIEJvYXJkIHNwZWNpZmljIHNldHVwL3RlYXJkb3duICovCisJaW50ICgqc2V0dXApKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOworCWludCAoKnRlYXJkb3duKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKaW5kZXggMTdkOWI1OC4uNWFlOGZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKQEAgLTMzOSw2ICszMzksMTAgQEAKIAogZXh0ZXJuIHZvaWQgc3NiX2J1c191bnJlZ2lzdGVyKHN0cnVjdCBzc2JfYnVzICpidXMpOwogCisvKiBTZXQgYSBmYWxsYmFjayBTUFJPTS4KKyAqIFNlZSBrZG9jIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLiAqLworZXh0ZXJuIGludCBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pOworCiAvKiBTdXNwZW5kIGEgU1NCIGJ1cy4KICAqIENhbGwgdGhpcyBmcm9tIHRoZSBwYXJlbnQgYnVzIHN1c3BlbmQgcm91dGluZS4gKi8KIGV4dGVybiBpbnQgc3NiX2J1c19zdXNwZW5kKHN0cnVjdCBzc2JfYnVzICpidXMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAppbmRleCA3ZDdlMDNkLi5kM2IxZDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaApAQCAtMTgxLDYgKzE4MSwxNiBAQAogI2RlZmluZSBTU0JfQ0hJUENPX1BST0dfV0FJVENOVAkJMHgwMTI0CiAjZGVmaW5lIFNTQl9DSElQQ09fRkxBU0hfQ0ZHCQkweDAxMjgKICNkZWZpbmUgU1NCX0NISVBDT19GTEFTSF9XQUlUQ05UCTB4MDEyQworI2RlZmluZSBTU0JfQ0hJUENPX0NMS0NUTFNUCQkweDAxRTAgLyogQ2xvY2sgY29udHJvbCBhbmQgc3RhdHVzIChyZXYgPj0gMjApICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0ZPUkNFQUxQCTB4MDAwMDAwMDEgLyogRm9yY2UgQUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfRk9SQ0VIVAkweDAwMDAwMDAyIC8qIEZvcmNlIEhUIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfRk9SQ0VJTFAJMHgwMDAwMDAwNCAvKiBGb3JjZSBJTFAgcmVxdWVzdCAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFQUxQUkVRCTB4MDAwMDAwMDggLyogQUxQIGF2YWlsYWJsZSByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVFJFUQkweDAwMDAwMDEwIC8qIEhUIGF2YWlsYWJsZSByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hXQ1JPRkYJMHgwMDAwMDAyMCAvKiBGb3JjZSBIVyBjbG9jayByZXF1ZXN0IG9mZiAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQJMHgwMDAxMDAwMCAvKiBIVCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUFMUAkweDAwMDIwMDAwIC8qIEFQTCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19IV19XT1JLQVJPVU5ECTB4MDFFNCAvKiBIYXJkd2FyZSB3b3JrYXJvdW5kIChyZXYgPj0gMjApICovCiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfREFUQQkJMHgwMzAwCiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfSU1SCQkweDAzMDQKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMF9GQ1IJCTB4MDMwOApAQCAtMTk3LDYgKzIwNywxOTYgQEAKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMV9MU1IJCTB4MDQxNAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQxX01TUgkJMHgwNDE4CiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDFfU0NSQVRDSAkweDA0MUMKKy8qIFBNVSByZWdpc3RlcnMgKHJldiA+PSAyMCkgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfQ1RMCQkJMHgwNjAwIC8qIFBNVSBjb250cm9sICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVgkJMHhGRkZGMDAwMCAvKiBJTFAgZGl2IG1hc2sgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWX1NISUZUCTE2CisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcJCTB4MDAwMDAyMDAgLyogTm8gSUxQIG9uIHdhaXQgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9IVFJFUUVOCQkweDAwMDAwMTAwIC8qIEhUIHJlcSBlbmFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9BTFBSRVFFTgkJMHgwMDAwMDA4MCAvKiBBTFAgcmVxIGVuYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRCQkweDAwMDAwMDdDIC8qIENyeXN0YWwgZnJlcSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUCTIKKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBESVZFTgkJMHgwMDAwMDAwMiAvKiBJTFAgZGl2IGVuYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX0xQT1NFTAkJMHgwMDAwMDAwMSAvKiBMUE8gc2VsICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX0NBUAkJCTB4MDYwNCAvKiBQTVUgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DQVBfUkVWSVNJT04JCTB4MDAwMDAwRkYgLyogUmV2aXNpb24gbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9TVEFUCQkJMHgwNjA4IC8qIFBNVSBzdGF0dXMgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX1NUQVRfSU5UUEVORAkJMHgwMDAwMDA0MCAvKiBJbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9TQkNMS1NUCQkweDAwMDAwMDMwIC8qIEJhY2twbGFuZSBjbG9jayBzdGF0dXM/ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX0hBVkVBTFAJCTB4MDAwMDAwMDggLyogQUxQIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9IQVZFSFQJCTB4MDAwMDAwMDQgLyogSFQgYXZhaWxhYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX1JFU0lOSVQJCTB4MDAwMDAwMDMgLyogUmVzIGluaXQgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1NUQVQJCQkweDA2MEMgLyogUE1VIHJlcyBzdGF0dXMgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1BFTkQJCQkweDA2MTAgLyogUE1VIHJlcyBwZW5kaW5nICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1RJTUVSCQkJMHgwNjE0IC8qIFBNVSB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLCQkweDA2MTggLyogUE1VIG1pbiByZXMgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLCQkweDA2MUMgLyogUE1VIG1heCByZXMgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfVEFCU0VMCQkweDA2MjAgLyogUE1VIHJlcyB0YWJsZSBzZWwgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSwkJMHgwNjI0IC8qIFBNVSByZXMgZGVwIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1VQRE5UTQkJMHgwNjI4IC8qIFBNVSByZXMgdXBkb3duIHRpbWVyICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19USU1FUgkJMHgwNjJDIC8qIFBNVSByZXMgdGltZXIgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfQ0xLU1RSRVRDSAkJMHgwNjMwIC8qIFBNVSBjbG9ja3N0cmV0Y2ggKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfV0FUQ0hET0cJCQkweDA2MzQgLyogUE1VIHdhdGNoZG9nICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19SRVFUUwkJMHgwNjQwIC8qIFBNVSByZXMgcmVxIHRpbWVyIHNlbCAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRVAkJCTB4MDY0NCAvKiBQTVUgcmVzIHJlcSB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRTQkJCTB4MDY0OCAvKiBQTVUgcmVzIHJlcSBtYXNrICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hJUENUTF9BRERSCQkJMHgwNjUwCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hJUENUTF9EQVRBCQkJMHgwNjU0CisjZGVmaW5lIFNTQl9DSElQQ09fUkVHQ1RMX0FERFIJCQkweDA2NTgKKyNkZWZpbmUgU1NCX0NISVBDT19SRUdDVExfREFUQQkJCTB4MDY1QworI2RlZmluZSBTU0JfQ0hJUENPX1BMTENUTF9BRERSCQkJMHgwNjYwCisjZGVmaW5lIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEJCQkweDA2NjQKKworCisKKy8qKiBQTVUgUExMIHJlZ2lzdGVycyAqLworCisvKiBQTVUgcmV2IDAgUExMIHJlZ2lzdGVycyAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwwCQkJMAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMF9QRElWX01TSwkJMHgwMDAwMDAwMQorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMF9QRElWX0ZSRVEJCTI1MDAwIC8qIGtIeiAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwxCQkJMQorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0sJCTB4RjAwMDAwMDAgLyogV2lsZCBpbnQgbWFzayAobG93IG5pYmJsZSkgKi8KKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLX1NISUZUCTI4CisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TSwkJMHgwRkZGRkYwMCAvKiBXaWxkIGZyYWMgbWFzayAqLworI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0tfU0hJRlQJOAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9TVE9QTU9ECQkweDAwMDAwMDQwIC8qIFN0b3AgbW9kICovCisjZGVmaW5lIFNTQl9QTVUwX1BMTENUTDIJCQkyCisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJCQkweDAwMDAwMDBGIC8qIFdpbGQgaW50IG1hc2sgKGhpZ2ggbmliYmxlKSAqLworI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISV9TSElGVAkwCisKKy8qIFBNVSByZXYgMSBQTEwgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDAJCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AxRElWCQkJMHgwMEYwMDAwMCAvKiBQMSBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDBfUDFESVZfU0hJRlQJCTIwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AyRElWCQkJMHgwRjAwMDAwMCAvKiBQMiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDBfUDJESVZfU0hJRlQJCTI0CisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDEJCQkxCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00xRElWCQkJMHgwMDAwMDBGRiAvKiBNMSBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTFESVZfU0hJRlQJCTAKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTJESVYJCQkweDAwMDBGRjAwIC8qIE0yIGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NMkRJVl9TSElGVAkJOAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NM0RJVgkJCTB4MDBGRjAwMDAgLyogTTMgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00zRElWX1NISUZUCQkxNgorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NNERJVgkJCTB4RkYwMDAwMDAgLyogTTQgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX000RElWX1NISUZUCQkyNAorI2RlZmluZSBTU0JfUE1VMV9QTExDVEwyCQkJMgorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9NNURJVgkJCTB4MDAwMDAwRkYgLyogTTUgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX001RElWX1NISUZUCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX002RElWCQkJMHgwMDAwRkYwMCAvKiBNNiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTTZESVZfU0hJRlQJCTgKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREUJCTB4MDAwRTAwMDAgLyogTkRJViBtb2RlICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFX1NISUZUCTE3CisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlQJCTB4MUZGMDAwMDAgLyogTkRJViBpbnQgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVF9TSElGVAkJMjAKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMMwkJCTMKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUMJCTB4MDBGRkZGRkYgLyogTkRJViBmcmFjICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDX1NISUZUCTAKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMNAkJCTQKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMNQkJCTUKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWCQkweEZGRkZGRjAwIC8qIGNsayBkcnYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWX1NISUZUCQk4CisKKy8qIEJDTTQzMTIgUExMIHJlc291cmNlIG51bWJlcnMuICovCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9TV0lUQ0hFUl9CVVJTVAkJMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfU1dJVENIRVJfUFdNICAgIAkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9QQV9SRUZfTERPCQkyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9DT1JFX0xET19CVVJTVAkJMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfQ09SRV9MRE9fUFdNCQk0CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9SQURJT19MRE8JCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0lMUF9SRVFVRVNUCQk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9CR19GSUxUQllQCQk3CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9UWF9GSUxUQllQCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9SWF9GSUxUQllQCQk5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9YVEFMX1BVCQkJMTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0FMUF9BVkFJTAkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0JCX1BMTF9GSUxUQllQCQkxMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUkZfUExMX0ZJTFRCWVAJCTEzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9IVF9BVkFJTAkJMTQKKworLyogQkNNNDMyNSBQTEwgcmVzb3VyY2UgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0JVQ0tfQk9PU1RfQlVSU1QJMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0JVQ0tfQlVSU1QJCTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0NCVUNLX1BXTQkJMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0xET19DQlVDS19CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9DTERPX0NCVUNLX1BXTQkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQlVDS19CT09TVF9QV00JCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0lMUF9SRVFVRVNUCQk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9BQlVDS19CVVJTVAkJNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUJVQ0tfUFdNCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzFfUFUJCTkKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPMl9QVQkJMTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPM19QVQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPNF9QVQkJMTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1hUQUxfUFUJCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUxQX0FWQUlMCQkxNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfUlhfUFdSU1dfUFUJCTE1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9UWF9QV1JTV19QVQkJMTYKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1JGUExMX1BXUlNXX1BVCQkxNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfTE9HRU5fUFdSU1dfUFUJCTE4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9BRkVfUFdSU1dfUFUJCTE5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9CQlBMTF9QV1JTV19QVQkJMjAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMCQkyMQorCisvKiBCQ000MzI4IFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTQkwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00JCTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX0JVUlNUCTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9JTFBfUkVRVUVTVAkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUkFESU9fU1dJVENIRVJfUFdNCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX0JVUlNUCTYKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JPTV9TV0lUQ0gJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1BBX1JFRl9MRE8JCTgKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX0xETwkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQUZFX0xETwkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9QTExfTERPCQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JHX0ZJTFRCWVAJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9UWF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUlhfRklMVEJZUAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1hUQUxfUFUJCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfWFRBTF9FTgkJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfRklMVEJZUAkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JGX1BMTF9GSUxUQllQCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVCQkxOQorCisvKiBCQ001MzU0IFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfRVhUX1NXSVRDSEVSX1BXTQkwCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9TV0lUQ0hFUl9QV00JCTEKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX1NXSVRDSEVSX0JVUlNUCTIKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9JTFBfUkVRVUVTVAkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUkFESU9fU1dJVENIRVJfUFdNCTUKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX1NXSVRDSEVSX0JVUlNUCTYKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JPTV9TV0lUQ0gJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1BBX1JFRl9MRE8JCTgKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX0xETwkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQUZFX0xETwkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9QTExfTERPCQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JHX0ZJTFRCWVAJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9UWF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUlhfRklMVEJZUAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1hUQUxfUFUJCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfWFRBTF9FTgkJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9QTExfRklMVEJZUAkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JGX1BMTF9GSUxUQllQCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX1BVCQkxOQorCisKKworLyoqIENoaXAgc3BlY2lmaWMgQ2hpcC1TdGF0dXMgcmVnaXN0ZXIgY29udGVudHMuICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NQUk9NX09UUF9TRUwJMHgwMDAwMDAwMworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9ERUZDSVNfU0VMCQkwIC8qIE9UUCBpcyBwb3dlcmVkIHVwLCB1c2UgZGVmLiBDSVMsIG5vIFNQUk9NICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NQUk9NX1NFTAkJMSAvKiBPVFAgaXMgcG93ZXJlZCB1cCwgU1BST00gaXMgcHJlc2VudCAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9PVFBfU0VMCQkyIC8qIE9UUCBpcyBwb3dlcmVkIHVwLCBubyBTUFJPTSAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9PVFBfUFdSRE4JCTMgLyogT1RQIGlzIHBvd2VyZWQgZG93biwgU1BST00gaXMgcHJlc2VudCAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9TRElPX1VTQl9NT0RFCTB4MDAwMDAwMDQKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfU0RJT19VU0JfTU9ERV9TSElGVCAgMgorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTElECQkweDAwMDAwMDA4CisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1JDQUxfVkFMSURfU0hJRlQJMworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTFVFCQkweDAwMDAwMUYwCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1JDQUxfVkFMVUVfU0hJRlQJNAorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9QTVVUT1BfMkIgCQkweDAwMDAwMjAwIC8qIDEgZm9yIDJiLCAwIGZvciB0byAyYSAqLwogCiAKIApAQCAtMzUzLDExICs1NTMsMjAgQEAKIHN0cnVjdCBzc2JfZGV2aWNlOwogc3RydWN0IHNzYl9zZXJpYWxfcG9ydDsKIAorLyogRGF0YSBmb3IgdGhlIFBNVSwgaWYgYXZhaWxhYmxlLgorICogQ2hlY2sgYXZhaWxhYmlsaXR5IHdpdGggKChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24pLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9QTVUpCisgKi8KK3N0cnVjdCBzc2JfY2hpcGNvbW1vbl9wbXUgeworCXU4IHJldjsJCQkvKiBQTVUgcmV2aXNpb24gKi8KKwl1MzIgY3J5c3RhbGZyZXE7CS8qIFRoZSBhY3RpdmUgY3J5c3RhbCBmcmVxdWVuY3kgKGluIGtIeikgKi8KK307CisKIHN0cnVjdCBzc2JfY2hpcGNvbW1vbiB7CiAJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKIAl1MzIgY2FwYWJpbGl0aWVzOwogCS8qIEZhc3QgUG93ZXJ1cCBEZWxheSBjb25zdGFudCAqLwogCXUxNiBmYXN0X3B3cnVwX2RlbGF5OworCXN0cnVjdCBzc2JfY2hpcGNvbW1vbl9wbXUgcG11OwogfTsKIAogc3RhdGljIGlubGluZSBib29sIHNzYl9jaGlwY29fYXZhaWxhYmxlKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCkBAIC0zNjUsNiArNTc0LDE3IEBACiAJcmV0dXJuIChjYy0+ZGV2ICE9IE5VTEwpOwogfQogCisvKiBSZWdpc3RlciBhY2Nlc3MgKi8KKyNkZWZpbmUgY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KQlzc2JfcmVhZDMyKChjYyktPmRldiwgb2Zmc2V0KQorI2RlZmluZSBjaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCB2YWwpCXNzYl93cml0ZTMyKChjYyktPmRldiwgb2Zmc2V0LCB2YWwpCisKKyNkZWZpbmUgY2hpcGNvX21hc2szMihjYywgb2Zmc2V0LCBtYXNrKSBcCisJCWNoaXBjb193cml0ZTMyKGNjLCBvZmZzZXQsIGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkgJiAobWFzaykpCisjZGVmaW5lIGNoaXBjb19zZXQzMihjYywgb2Zmc2V0LCBzZXQpIFwKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIG9mZnNldCwgY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KSB8IChzZXQpKQorI2RlZmluZSBjaGlwY29fbWFza3NldDMyKGNjLCBvZmZzZXQsIG1hc2ssIHNldCkgXAorCQljaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCAoY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KSAmIChtYXNrKSkgfCAoc2V0KSkKKwogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb21tb25faW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKIAogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb19zdXNwZW5kKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpOwpAQCAtNDA2LDQgKzYyNiw4IEBACiAJCQkJICBzdHJ1Y3Qgc3NiX3NlcmlhbF9wb3J0ICpwb3J0cyk7CiAjZW5kaWYgLyogQ09ORklHX1NTQl9TRVJJQUwgKi8KIAorLyogUE1VIHN1cHBvcnQgKi8KK2V4dGVybiB2b2lkIHNzYl9wbXVfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKKworCiAjZW5kaWYgLyogTElOVVhfU1NCX0NISVBDT19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKaW5kZXggOTlhMGY5OS4uYTAxYjk4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCkBAIC0zMjYsNiArMzI2LDQyIEBACiAjZGVmaW5lICBTU0JfU1BST001X0dQSU9CX1AzCQkweEZGMDAJLyogUGluIDMgKi8KICNkZWZpbmUgIFNTQl9TUFJPTTVfR1BJT0JfUDNfU0hJRlQJOAogCisvKiBTUFJPTSBSZXZpc2lvbiA4ICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMTE8JCTB4MTA4NAkvKiBCb2FyZGZsYWdzIChsb3cgMTYgYml0cykgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9CRkxISQkJMHgxMDg2CS8qIEJvYXJkZmxhZ3MgSGkgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9JTDBNQUMJCTB4MTA4QwkvKiA2IGJ5dGUgTUFDIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9DQ09ERQkJMHgxMDkyCS8qIDIgYnl0ZSBjb3VudHJ5IGNvZGUgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTAkJMHgxMDlDICAvKiBBbnRlbm5hIGF2YWlsYWJsZSBiaXRmaWVsZHMqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0EJCTB4RkYwMAkvKiBBLVBIWSBiaXRmaWVsZCAqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0FfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0JHCQkweDAwRkYJLyogQi1QSFkgYW5kIEctUEhZIGJpdGZpZWxkICovCisjZGVmaW5lIFNTQl9TUFJPTThfQU5UQVZBSUxfQkdfU0hJRlQJMAorI2RlZmluZSBTU0JfU1BST004X0FHQUlOMDEJCTB4MTA5RQkvKiBBbnRlbm5hIEdhaW4gKGluIGRCbSBRNS4yKSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjAJCTB4MDBGRgkvKiBBbnRlbm5hIDAgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4wX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4xCQkweEZGMDAJLyogQW50ZW5uYSAxICovCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMV9TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTThfQUdBSU4yMwkJMHgxMEEwCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMgkJMHgwMEZGCS8qIEFudGVubmEgMiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjJfU0hJRlQJMAorI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjMJCTB4RkYwMAkvKiBBbnRlbm5hIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4zX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9HUElPQQkJMHgxMDk2CS8qR2VuLiBQdXJwb3NlIElPICMgMCBhbmQgMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQV9QMAkJMHgwMEZGCS8qIFBpbiAwICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9BX1AxCQkweEZGMDAJLyogUGluIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0FfUDFfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0dQSU9CCQkweDEwOTgJLyogR2VuLiBQdXJwb3NlIElPICMgMiBhbmQgMyAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQl9QMgkJMHgwMEZGCS8qIFBpbiAyICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9CX1AzCQkweEZGMDAJLyogUGluIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0JfUDNfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQkcJCTB4MTBDMCAgLyogTWF4IFBvd2VyIEJHIGluIHBhdGggMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0JHX01BU0sJMHgwMEZGICAvKiBNYXNrIGZvciBNYXggUG93ZXIgQkcgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQkcJCTB4RkYwMAkvKiBNYXNrIGZvciBwYXRoIDEgaXRzc2lfYmcgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQkdfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQQkJMHgxMEM4ICAvKiBNYXggUG93ZXIgQSBpbiBwYXRoIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9BX01BU0sJCTB4MDBGRiAgLyogTWFzayBmb3IgTWF4IFBvd2VyIEEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQQkJMHhGRjAwCS8qIE1hc2sgZm9yIHBhdGggMSBpdHNzaV9hICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0FfU0hJRlQJOAogCiAvKiBWYWx1ZXMgZm9yIFNTQl9TUFJPTTFfQklORl9DQ09ERSAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmgKaW5kZXggMmM2ZmFlYy4uMGIzMDM4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaApAQCAtMSwxNCArMSwxNSBAQAogI2lmbmRlZiBfTElOVVhfU1VTUEVORF9JT0NUTFNfSAogI2RlZmluZSBfTElOVVhfU1VTUEVORF9JT0NUTFNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgdGhlIHZhbHVlcyBuZWVkZWQgZm9yIHRoZSBpZGVudGlmaWNhdGlvbgogICogb2YgdGhlIHJlc3VtZSBzd2FwIGFyZWEgZnJvbSBhIHVzZXIgc3BhY2UgdG8gdGhlIGtlcm5lbCB2aWEgdGhlCiAgKiBTTkFQU0hPVF9TRVRfU1dBUF9BUkVBIGlvY3RsCiAgKi8KIHN0cnVjdCByZXN1bWVfc3dhcF9hcmVhIHsKLQlsb2ZmX3Qgb2Zmc2V0OwotCXVfaW50MzJfdCBkZXY7CisJX19rZXJuZWxfbG9mZl90IG9mZnNldDsKKwlfX3UzMiBkZXY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZGVmaW5lIFNOQVBTSE9UX0lPQ19NQUdJQwknMycKQEAgLTIwLDEzICsyMSwxMyBAQAogI2RlZmluZSBTTkFQU0hPVF9TMlJBTQkJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDExKQogI2RlZmluZSBTTkFQU0hPVF9TRVRfU1dBUF9BUkVBCQlfSU9XKFNOQVBTSE9UX0lPQ19NQUdJQywgMTMsIFwKIAkJCQkJCQlzdHJ1Y3QgcmVzdW1lX3N3YXBfYXJlYSkKLSNkZWZpbmUgU05BUFNIT1RfR0VUX0lNQUdFX1NJWkUJCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxNCwgbG9mZl90KQorI2RlZmluZSBTTkFQU0hPVF9HRVRfSU1BR0VfU0laRQkJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE0LCBfX2tlcm5lbF9sb2ZmX3QpCiAjZGVmaW5lIFNOQVBTSE9UX1BMQVRGT1JNX1NVUFBPUlQJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTUpCiAjZGVmaW5lIFNOQVBTSE9UX1BPV0VSX09GRgkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTYpCiAjZGVmaW5lIFNOQVBTSE9UX0NSRUFURV9JTUFHRQkJX0lPVyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE3LCBpbnQpCiAjZGVmaW5lIFNOQVBTSE9UX1BSRUZfSU1BR0VfU0laRQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxOCkKLSNkZWZpbmUgU05BUFNIT1RfQVZBSUxfU1dBUF9TSVpFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxOSwgbG9mZl90KQotI2RlZmluZSBTTkFQU0hPVF9BTExPQ19TV0FQX1BBR0UJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDIwLCBsb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX0FWQUlMX1NXQVBfU0laRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTksIF9fa2VybmVsX2xvZmZfdCkKKyNkZWZpbmUgU05BUFNIT1RfQUxMT0NfU1dBUF9QQUdFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAyMCwgX19rZXJuZWxfbG9mZl90KQogI2RlZmluZSBTTkFQU0hPVF9JT0NfTUFYTlIJMjAKIAogI2VuZGlmIC8qIF9MSU5VWF9TVVNQRU5EX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCAzOWQ0NzFkLi5lNzZkM2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTQ5MCw2ICs0OTAsNyBAQAogCU5FVF9JUFY0X0NPTkZfQVJQX0lHTk9SRT0xOSwKIAlORVRfSVBWNF9DT05GX1BST01PVEVfU0VDT05EQVJJRVM9MjAsCiAJTkVUX0lQVjRfQ09ORl9BUlBfQUNDRVBUPTIxLAorCU5FVF9JUFY0X0NPTkZfQVJQX05PVElGWT0yMiwKIAlfX05FVF9JUFY0X0NPTkZfTUFYCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCBmZTc3ZTE0Li45ZDUwNzhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTY5LDE2ICs2OSwxNiBAQAogI2RlZmluZSB0Y3BfZmxhZ193b3JkKHRwKSAoICgodW5pb24gdGNwX3dvcmRfaGRyICopKHRwKSktPndvcmRzIFszXSkgCiAKIGVudW0geyAKLQlUQ1BfRkxBR19DV1IgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA4MDAwMDApLCAKLQlUQ1BfRkxBR19FQ0UgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA0MDAwMDApLCAKLQlUQ1BfRkxBR19VUkcgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAyMDAwMDApLCAKLQlUQ1BfRkxBR19BQ0sgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAxMDAwMDApLCAKLQlUQ1BfRkxBR19QU0ggPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwODAwMDApLCAKLQlUQ1BfRkxBR19SU1QgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwNDAwMDApLCAKLQlUQ1BfRkxBR19TWU4gPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMjAwMDApLCAKLQlUQ1BfRkxBR19GSU4gPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMTAwMDApLAotCVRDUF9SRVNFUlZFRF9CSVRTID0gX19jb25zdGFudF9odG9ubCgweDBGMDAwMDAwKSwKLQlUQ1BfREFUQV9PRkZTRVQgPSBfX2NvbnN0YW50X2h0b25sKDB4RjAwMDAwMDApCisJVENQX0ZMQUdfQ1dSID0gX19jcHVfdG9fYmUzMigweDAwODAwMDAwKSwKKwlUQ1BfRkxBR19FQ0UgPSBfX2NwdV90b19iZTMyKDB4MDA0MDAwMDApLAorCVRDUF9GTEFHX1VSRyA9IF9fY3B1X3RvX2JlMzIoMHgwMDIwMDAwMCksCisJVENQX0ZMQUdfQUNLID0gX19jcHVfdG9fYmUzMigweDAwMTAwMDAwKSwKKwlUQ1BfRkxBR19QU0ggPSBfX2NwdV90b19iZTMyKDB4MDAwODAwMDApLAorCVRDUF9GTEFHX1JTVCA9IF9fY3B1X3RvX2JlMzIoMHgwMDA0MDAwMCksCisJVENQX0ZMQUdfU1lOID0gX19jcHVfdG9fYmUzMigweDAwMDIwMDAwKSwKKwlUQ1BfRkxBR19GSU4gPSBfX2NwdV90b19iZTMyKDB4MDAwMTAwMDApLAorCVRDUF9SRVNFUlZFRF9CSVRTID0gX19jcHVfdG9fYmUzMigweDBGMDAwMDAwKSwKKwlUQ1BfREFUQV9PRkZTRVQgPSBfX2NwdV90b19iZTMyKDB4RjAwMDAwMDApCiB9OyAKIAogLyogVENQIHNvY2tldCBvcHRpb25zICovCkBAIC0yMTgsNyArMjE4LDYgQEAKIAkJc25kX3dzY2FsZSA6IDQsCS8qIFdpbmRvdyBzY2FsaW5nIHJlY2VpdmVkIGZyb20gc2VuZGVyCSovCiAJCXJjdl93c2NhbGUgOiA0OwkvKiBXaW5kb3cgc2NhbGluZyB0byBzZW5kIHRvIHJlY2VpdmVyCSovCiAvKglTQUNLcyBkYXRhCSovCi0JdTgJZWZmX3NhY2tzOwkvKiBTaXplIG9mIFNBQ0sgYXJyYXkgdG8gc2VuZCB3aXRoIG5leHQgcGFja2V0ICovCiAJdTgJbnVtX3NhY2tzOwkvKiBOdW1iZXIgb2YgU0FDSyBibG9ja3MJCSovCiAJdTE2CXVzZXJfbXNzOyAgCS8qIG1zcyByZXF1ZXN0ZWQgYnkgdXNlciBpbiBpb2N0bCAqLwogCXUxNgltc3NfY2xhbXA7CS8qIE1heGltYWwgbXNzLCBuZWdvdGlhdGVkIGF0IGNvbm5lY3Rpb24gc2V0dXAgKi8KQEAgLTI0OSw3ICsyNDgsNyBAQAogCS8qIGluZXRfY29ubmVjdGlvbl9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHRjcF9zb2NrICovCiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrCWluZXRfY29ubjsKIAl1MTYJdGNwX2hlYWRlcl9sZW47CS8qIEJ5dGVzIG9mIHRjcCBoZWFkZXIgdG8gc2VuZAkJKi8KLQl1MTYJeG1pdF9zaXplX2dvYWw7CS8qIEdvYWwgZm9yIHNlZ21lbnRpbmcgb3V0cHV0IHBhY2tldHMJKi8KKwl1MTYJeG1pdF9zaXplX2dvYWxfc2VnczsgLyogR29hbCBmb3Igc2VnbWVudGluZyBvdXRwdXQgcGFja2V0cyAqLwogCiAvKgogICoJSGVhZGVyIHByZWRpY3Rpb24gZmxhZ3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZS5oIGIvaW5jbHVkZS9saW51eC90aW1lLmgKaW5kZXggZmJiZDJhMS4uMjQyZjYyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTEyLDE0ICsxMiwxNCBAQAogI2lmbmRlZiBfU1RSVUNUX1RJTUVTUEVDCiAjZGVmaW5lIF9TVFJVQ1RfVElNRVNQRUMKIHN0cnVjdCB0aW1lc3BlYyB7Ci0JdGltZV90CXR2X3NlYzsJCS8qIHNlY29uZHMgKi8KLQlsb25nCXR2X25zZWM7CS8qIG5hbm9zZWNvbmRzICovCisJX19rZXJuZWxfdGltZV90CXR2X3NlYzsJCQkvKiBzZWNvbmRzICovCisJbG9uZwkJdHZfbnNlYzsJCS8qIG5hbm9zZWNvbmRzICovCiB9OwogI2VuZGlmCiAKIHN0cnVjdCB0aW1ldmFsIHsKLQl0aW1lX3QJCXR2X3NlYzsJCS8qIHNlY29uZHMgKi8KLQlzdXNlY29uZHNfdAl0dl91c2VjOwkvKiBtaWNyb3NlY29uZHMgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXR2X3NlYzsJCS8qIHNlY29uZHMgKi8KKwlfX2tlcm5lbF9zdXNlY29uZHNfdAl0dl91c2VjOwkvKiBtaWNyb3NlY29uZHMgKi8KIH07CiAKIHN0cnVjdCB0aW1lem9uZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVjb21wYXJlLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVjb21wYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2ZTIyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGltZWNvbXBhcmUuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIFV0aWxpdHkgY29kZSB3aGljaCBoZWxwcyB0cmFuc2Zvcm1pbmcgYmV0d2VlbiB0d28gZGlmZmVyZW50IHRpbWUKKyAqIGJhc2VzLCBjYWxsZWQgInNvdXJjZSIgYW5kICJ0YXJnZXQiIHRpbWUgaW4gdGhpcyBjb2RlLgorICoKKyAqIFNvdXJjZSB0aW1lIGhhcyB0byBiZSBwcm92aWRlZCB2aWEgdGhlIHRpbWVjb3VudGVyIEFQSSB3aGlsZSB0YXJnZXQKKyAqIHRpbWUgaXMgYWNjZXNzZWQgdmlhIGEgZnVuY3Rpb24gY2FsbGJhY2sgd2hvc2UgcHJvdG90eXBlCisgKiBpbnRlbnRpb25hbGx5IG1hdGNoZXMga3RpbWVfZ2V0KCkgYW5kIGt0aW1lX2dldF9yZWFsKCkuIFRoZXNlCisgKiBpbnRlcmZhY2VzIHdoZXJlIGNob3NlbiBsaWtlIHRoaXMgc28gdGhhdCB0aGUgY29kZSBzZXJ2ZXMgaXRzCisgKiBpbml0aWFsIHB1cnBvc2Ugd2l0aG91dCBhZGRpdGlvbmFsIGdsdWUgY29kZS4KKyAqCisgKiBUaGlzIHB1cnBvc2UgaXMgc3luY2hyb25pemluZyBhIGhhcmR3YXJlIGNsb2NrIGluIGEgTklDIHdpdGggc3lzdGVtCisgKiB0aW1lLCBpbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFAsCisgKiBJRUVFMTU4OCkgd2l0aCBtb3JlIGFjY3VyYXRlIGhhcmR3YXJlIGFzc2lzdGVkIHRpbWUgc3RhbXBpbmcuICBJbgorICogdGhhdCBjb250ZXh0IG9ubHkgc3luY2hyb25pemF0aW9uIGFnYWluc3Qgc3lzdGVtIHRpbWUgKD0KKyAqIGt0aW1lX2dldF9yZWFsKCkpIGlzIGN1cnJlbnRseSBuZWVkZWQuIEJ1dCB0aGlzIHV0aWxpdHkgY29kZSBtaWdodAorICogYmVjb21lIHVzZWZ1bCBpbiBvdGhlciBzaXR1YXRpb25zLCB3aGljaCBpcyB3aHkgaXQgd2FzIHdyaXR0ZW4gYXMKKyAqIGdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IGNvZGUuCisgKgorICogVGhlIHNvdXJjZSB0aW1lY291bnRlciBpcyBhc3N1bWVkIHRvIHJldHVybiBtb25vdG9uaWNhbGx5CisgKiBpbmNyZWFzaW5nIHRpbWUgKGJ1dCB0aGlzIGNvZGUgZG9lcyBpdHMgYmVzdCB0byBjb21wZW5zYXRlIGlmIHRoYXQKKyAqIGlzIG5vdCB0aGUgY2FzZSkgd2hlcmVhcyB0YXJnZXQgdGltZSBtYXkganVtcC4KKyAqCisgKiBUaGUgdGFyZ2V0IHRpbWUgY29ycmVzcG9uZGluZyB0byBhIHNvdXJjZSB0aW1lIGlzIGRldGVybWluZWQgYnkKKyAqIHJlYWRpbmcgdGFyZ2V0IHRpbWUsIHJlYWRpbmcgc291cmNlIHRpbWUsIHJlYWRpbmcgdGFyZ2V0IHRpbWUKKyAqIGFnYWluLCB0aGVuIGFzc3VtaW5nIHRoYXQgYXZlcmFnZSB0YXJnZXQgdGltZSBjb3JyZXNwb25kcyB0byBzb3VyY2UKKyAqIHRpbWUuIEluIG90aGVyIHdvcmRzLCB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IHJlYWRpbmcgdGhlIHNvdXJjZQorICogdGltZSBpcyBzbG93IGFuZCBpbnZvbHZlcyBlcXVhbCB0aW1lIGZvciBzZW5kaW5nIHRoZSByZXF1ZXN0IGFuZAorICogcmVjZWl2aW5nIHRoZSByZXBseSwgd2hlcmVhcyByZWFkaW5nIHRhcmdldCB0aW1lIGlzIGFzc3VtZWQgdG8gYmUKKyAqIGZhc3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKyNpZm5kZWYgX0xJTlVYX1RJTUVDT01QQVJFX0gKKyNkZWZpbmUgX0xJTlVYX1RJTUVDT01QQVJFX0gKKworI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKworLyoqCisgKiBzdHJ1Y3QgdGltZWNvbXBhcmUgLSBzdG9yZXMgc3RhdGUgYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0d28gY2xvY2tzCisgKgorICogSW5pdGlhbGl6ZSB0byB6ZXJvLCB0aGVuIHNldCBzb3VyY2UvdGFyZ2V0L251bV9zYW1wbGVzLgorICoKKyAqIFRyYW5zZm9ybWF0aW9uIGJldHdlZW4gc291cmNlIHRpbWUgYW5kIHRhcmdldCB0aW1lIGlzIGRvbmUgd2l0aDoKKyAqIHRhcmdldF90aW1lID0gc291cmNlX3RpbWUgKyBvZmZzZXQgKworICogICAgICAgICAgICAgICAoc291cmNlX3RpbWUgLSBsYXN0X3VwZGF0ZSkgKiBza2V3IC8KKyAqICAgICAgICAgICAgICAgVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OCisgKgorICogQHNvdXJjZTogICAgICAgICAgdXNlZCB0byBnZXQgc291cmNlIHRpbWUgc3RhbXBzIHZpYSB0aW1lY291bnRlcl9yZWFkKCkKKyAqIEB0YXJnZXQ6ICAgICAgICAgIGZ1bmN0aW9uIHJldHVybmluZyB0YXJnZXQgdGltZSAoZm9yIGV4YW1wbGUsIGt0aW1lX2dldAorICogICAgICAgICAgICAgICAgICAgZm9yIG1vbm90b25pYyB0aW1lLCBvciBrdGltZV9nZXRfcmVhbCBmb3Igd2FsbCBjbG9jaykKKyAqIEBudW1fc2FtcGxlczogICAgIG51bWJlciBvZiB0aW1lcyB0aGF0IHNvdXJjZSB0aW1lIGFuZCB0YXJnZXQgdGltZSBhcmUgdG8KKyAqICAgICAgICAgICAgICAgICAgIGJlIGNvbXBhcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlaXIgb2Zmc2V0CisgKiBAb2Zmc2V0OiAgICAgICAgICAodGFyZ2V0IHRpbWUgLSBzb3VyY2UgdGltZSkgYXQgdGhlIHRpbWUgb2YgdGhlIGxhc3QgdXBkYXRlCisgKiBAc2tldzogICAgICAgICAgICBhdmVyYWdlICh0YXJnZXQgdGltZSAtIHNvdXJjZSB0aW1lKSAvIGRlbHRhIHNvdXJjZSB0aW1lICoKKyAqICAgICAgICAgICAgICAgICAgIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTgorICogQGxhc3RfdXBkYXRlOiAgICAgbGFzdCBzb3VyY2UgdGltZSBzdGFtcCB3aGVuIHRpbWUgb2Zmc2V0IHdhcyBtZWFzdXJlZAorICovCitzdHJ1Y3QgdGltZWNvbXBhcmUgeworCXN0cnVjdCB0aW1lY291bnRlciAqc291cmNlOworCWt0aW1lX3QgKCp0YXJnZXQpKHZvaWQpOworCWludCBudW1fc2FtcGxlczsKKworCXM2NCBvZmZzZXQ7CisJczY0IHNrZXc7CisJdTY0IGxhc3RfdXBkYXRlOworfTsKKworLyoqCisgKiB0aW1lY29tcGFyZV90cmFuc2Zvcm0gLSB0cmFuc2Zvcm0gc291cmNlIHRpbWUgc3RhbXAgaW50byB0YXJnZXQgdGltZSBiYXNlCisgKiBAc3luYzogICAgICAgICAgICBjb250ZXh0IGZvciB0aW1lIHN5bmMKKyAqIEBzb3VyY2VfdHN0YW1wOiAgIHRoZSByZXN1bHQgb2YgdGltZWNvdW50ZXJfcmVhZCgpIG9yCisgKiAgICAgICAgICAgICAgICAgICB0aW1lY291bnRlcl9jeWMydGltZSgpCisgKi8KK2V4dGVybiBrdGltZV90IHRpbWVjb21wYXJlX3RyYW5zZm9ybShzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCQkJICAgICB1NjQgc291cmNlX3RzdGFtcCk7CisKKy8qKgorICogdGltZWNvbXBhcmVfb2Zmc2V0IC0gbWVhc3VyZSBjdXJyZW50ICh0YXJnZXQgdGltZSAtIHNvdXJjZSB0aW1lKSBvZmZzZXQKKyAqIEBzeW5jOiAgICAgICAgICAgIGNvbnRleHQgZm9yIHRpbWUgc3luYworICogQG9mZnNldDogICAgICAgICAgYXZlcmFnZSBvZmZzZXQgZHVyaW5nIHNhbXBsZSBwZXJpb2QgcmV0dXJuZWQgaGVyZQorICogQHNvdXJjZV90c3RhbXA6ICAgYXZlcmFnZSBzb3VyY2UgdGltZSBkdXJpbmcgc2FtcGxlIHBlcmlvZCByZXR1cm5lZCBoZXJlCisgKgorICogUmV0dXJucyBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkLiBNaWdodCBiZSB6ZXJvICg9IG5vIHJlc3VsdCkgaW4gdGhlCisgKiB1bmxpa2VseSBjYXNlIHRoYXQgdGFyZ2V0IHRpbWUgd2FzIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBmb3IgYWxsCisgKiBzYW1wbGVzICg9IGJyb2tlbikuCisgKi8KK2V4dGVybiBpbnQgdGltZWNvbXBhcmVfb2Zmc2V0KHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgICAgIHM2NCAqb2Zmc2V0LAorCQkJICAgICAgdTY0ICpzb3VyY2VfdHN0YW1wKTsKKworZXh0ZXJuIHZvaWQgX190aW1lY29tcGFyZV91cGRhdGUoc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJCSB1NjQgc291cmNlX3RzdGFtcCk7CisKKy8qKgorICogdGltZWNvbXBhcmVfdXBkYXRlIC0gdXBkYXRlIG9mZnNldCBhbmQgc2tldyBieSBtZWFzdXJpbmcgY3VycmVudCBvZmZzZXQKKyAqIEBzeW5jOiAgICAgICAgICAgIGNvbnRleHQgZm9yIHRpbWUgc3luYworICogQHNvdXJjZV90c3RhbXA6ICAgdGhlIHJlc3VsdCBvZiB0aW1lY291bnRlcl9yZWFkKCkgb3IKKyAqICAgICAgICAgICAgICAgICAgIHRpbWVjb3VudGVyX2N5YzJ0aW1lKCksIHBhc3MgemVybyB0byBmb3JjZSB1cGRhdGUKKyAqCisgKiBVcGRhdGVzIGFyZSBvbmx5IGRvbmUgYXQgbW9zdCBvbmNlIHBlciBzZWNvbmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lY29tcGFyZV91cGRhdGUoc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJCSAgICAgIHU2NCBzb3VyY2VfdHN0YW1wKQoreworCWlmICghc291cmNlX3RzdGFtcCB8fAorCSAgICAoczY0KShzb3VyY2VfdHN0YW1wIC0gc3luYy0+bGFzdF91cGRhdGUpID49IE5TRUNfUEVSX1NFQykKKwkJX190aW1lY29tcGFyZV91cGRhdGUoc3luYywgc291cmNlX3RzdGFtcCk7Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfVElNRUNPTVBBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lci5oIGIvaW5jbHVkZS9saW51eC90aW1lci5oCmluZGV4IGRhZjk2ODUuLmUyZDY2MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKQEAgLTg2LDggKzg2LDggQEAKIAogZXh0ZXJuIHZvaWQgYWRkX3RpbWVyX29uKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgaW50IGNwdSk7CiBleHRlcm4gaW50IGRlbF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKLWV4dGVybiBpbnQgX19tb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwogZXh0ZXJuIGludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOworZXh0ZXJuIGludCBtb2RfdGltZXJfcGVuZGluZyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CiAKIC8qCiAgKiBUaGUgamlmZmllcyB2YWx1ZSB3aGljaCBpcyBhZGRlZCB0byBub3csIHdoZW4gdGhlcmUgaXMgbm8gdGltZXIKQEAgLTE0NiwyNSArMTQ2LDcgQEAKIH0KICNlbmRpZgogCi0vKioKLSAqIGFkZF90aW1lciAtIHN0YXJ0IGEgdGltZXIKLSAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCi0gKgotICogVGhlIGtlcm5lbCB3aWxsIGRvIGEgLT5mdW5jdGlvbigtPmRhdGEpIGNhbGxiYWNrIGZyb20gdGhlCi0gKiB0aW1lciBpbnRlcnJ1cHQgYXQgdGhlIC0+ZXhwaXJlcyBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUKLSAqIGN1cnJlbnQgdGltZSBpcyAnamlmZmllcycuCi0gKgotICogVGhlIHRpbWVyJ3MgLT5leHBpcmVzLCAtPmZ1bmN0aW9uIChhbmQgaWYgdGhlIGhhbmRsZXIgdXNlcyBpdCwgLT5kYXRhKQotICogZmllbGRzIG11c3QgYmUgc2V0IHByaW9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBUaW1lcnMgd2l0aCBhbiAtPmV4cGlyZXMgZmllbGQgaW4gdGhlIHBhc3Qgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dAotICogdGltZXIgdGljay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCi17Ci0JQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpKTsKLQlfX21vZF90aW1lcih0aW1lciwgdGltZXItPmV4cGlyZXMpOwotfQorZXh0ZXJuIHZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAgIGV4dGVybiBpbnQgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyNTMxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCitzdHJ1Y3QgdGltZXJpb21lbV9ybmdfZGF0YSB7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKKwl1bnNpZ25lZCBpbnQJCXByZXNlbnQ6MTsKKworCXUzMiBfX2lvbWVtCQkqYWRkcmVzczsKKworCS8qIG1lYXN1cmVzIGluIHVzZWNzICovCisJdW5zaWduZWQgaW50CQlwZXJpb2Q7Cit9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcy5oIGIvaW5jbHVkZS9saW51eC90aW1lcy5oCmluZGV4IGUyZDMwMjAuLjg3YjYyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKQEAgLTQsMTAgKzQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgdG1zIHsKLQljbG9ja190IHRtc191dGltZTsKLQljbG9ja190IHRtc19zdGltZTsKLQljbG9ja190IHRtc19jdXRpbWU7Ci0JY2xvY2tfdCB0bXNfY3N0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX3V0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX3N0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX2N1dGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19jc3RpbWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXguaCBiL2luY2x1ZGUvbGludXgvdGltZXguaAppbmRleCA5OThhNTVkLi5hYTM0NzVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1leC5oCkBAIC0xOTAsNyArMTkwLDcgQEAKICAqIG9mZnNldCBhbmQgbWF4aW11bSBmcmVxdWVuY3kgdG9sZXJhbmNlLgogICovCiAjZGVmaW5lIFNISUZUX1VTRUMgMTYJCS8qIGZyZXF1ZW5jeSBvZmZzZXQgc2NhbGUgKHNoaWZ0KSAqLwotI2RlZmluZSBQUE1fU0NBTEUgKE5TRUNfUEVSX1VTRUMgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX1VTRUMpKQorI2RlZmluZSBQUE1fU0NBTEUgKChzNjQpTlNFQ19QRVJfVVNFQyA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfVVNFQykpCiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlZfU0hJRlQgMTkKICNkZWZpbmUgUFBNX1NDQUxFX0lOViAoKDFsbCA8PCAoUFBNX1NDQUxFX0lOVl9TSElGVCArIE5UUF9TQ0FMRV9TSElGVCkpIC8gXAogCQkgICAgICAgUFBNX1NDQUxFICsgMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHBtLmggYi9pbmNsdWRlL2xpbnV4L3RwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzhiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RwbS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgorICogRGF2ZSBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICogRGVib3JhIFZlbGFyZGUgPGR2ZWxhcmRlQHVzLmlibS5jb20+CisgKgorICogTWFpbnRhaW5lZCBieTogPHRwbWRkX2RldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBEZXZpY2UgZHJpdmVyIGZvciBUQ0cvVENQQSBUUE0gKHRydXN0ZWQgcGxhdGZvcm0gbW9kdWxlKS4KKyAqIFNwZWNpZmljYXRpb25zIGF0IHd3dy50cnVzdGVkY29tcHV0aW5nZ3JvdXAub3JnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqLworI2lmbmRlZiBfX0xJTlVYX1RQTV9IX18KKyNkZWZpbmUgX19MSU5VWF9UUE1fSF9fCisKKy8qCisgKiBDaGlwIG51bSBpcyB0aGlzIHZhbHVlIG9yIGEgdmFsaWQgdHBtIGlkeAorICovCisjZGVmaW5lCVRQTV9BTllfTlVNIDB4RkZGRgorCisjaWYgZGVmaW5lZChDT05GSUdfVENHX1RQTSkKKworZXh0ZXJuIGludCB0cG1fcGNyX3JlYWQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgdTggKnJlc19idWYpOworZXh0ZXJuIGludCB0cG1fcGNyX2V4dGVuZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCBjb25zdCB1OCAqaGFzaCk7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IDcxMmNhNTMuLjVhYmUzNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIF9MSU5VWF9UWVBFU19ICiAjZGVmaW5lIF9MSU5VWF9UWVBFU19ICiAKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpZmRlZglfX0tFUk5FTF9fCiAKICNkZWZpbmUgREVDTEFSRV9CSVRNQVAobmFtZSxiaXRzKSBcCkBAIC05LDkgKzEyLDggQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKyNpZmRlZiBfX0tFUk5FTF9fCiAKIHR5cGVkZWYgX191MzIgX19rZXJuZWxfZGV2X3Q7CiAKQEAgLTI5LDcgKzMxLDYgQEAKIHR5cGVkZWYgX19rZXJuZWxfY2xvY2tpZF90CWNsb2NraWRfdDsKIHR5cGVkZWYgX19rZXJuZWxfbXFkX3QJCW1xZF90OwogCi0jaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiBfQm9vbAkJCWJvb2w7CiAKIHR5cGVkZWYgX19rZXJuZWxfdWlkMzJfdAl1aWRfdDsKQEAgLTQ1LDE0ICs0Niw2IEBACiB0eXBlZGVmIF9fa2VybmVsX29sZF9naWRfdAlvbGRfZ2lkX3Q7CiAjZW5kaWYgLyogQ09ORklHX1VJRDE2ICovCiAKLS8qIGxpYmM1IGluY2x1ZGVzIHRoaXMgZmlsZSB0byBkZWZpbmUgdWlkX3QsIHRodXMgdWlkX3QgY2FuIG5ldmVyIGNoYW5nZQotICogd2hlbiBpdCBpcyBpbmNsdWRlZCBieSBub24ta2VybmVsIGNvZGUKLSAqLwotI2Vsc2UKLXR5cGVkZWYgX19rZXJuZWxfdWlkX3QJCXVpZF90OwotdHlwZWRlZiBfX2tlcm5lbF9naWRfdAkJZ2lkX3Q7Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKIHR5cGVkZWYgX19rZXJuZWxfbG9mZl90CQlsb2ZmX3Q7CiAjZW5kaWYKQEAgLTE1NCw3ICsxNDcsNyBAQAogI2RlZmluZSBwZ29mZl90IHVuc2lnbmVkIGxvbmcKICNlbmRpZgogCi0jZW5kaWYgLyogX19LRVJORUxfU1RSSUNUX05BTUVTICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgogICogQmVsb3cgYXJlIHRydWx5IExpbnV4LXNwZWNpZmljIHR5cGVzIHRoYXQgc2hvdWxkIG5ldmVyIGNvbGxpZGUgd2l0aApAQCAtMjEyLDUgKzIwNSw1IEBACiB9OwogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwotCisjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCmluZGV4IGEwYmI2YmQuLjVkY2M5ZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCkBAIC0yMiw2ICsyMiw3IEBACiAKIC8qKgogICogc3RydWN0IHVpb19tZW0gLSBkZXNjcmlwdGlvbiBvZiBhIFVJTyBtZW1vcnkgcmVnaW9uCisgKiBAbmFtZToJCW5hbWUgb2YgdGhlIG1lbW9yeSByZWdpb24gZm9yIGlkZW50aWZpY2F0aW9uCiAgKiBAYWRkcjoJCWFkZHJlc3Mgb2YgdGhlIGRldmljZSdzIG1lbW9yeQogICogQHNpemU6CQlzaXplIG9mIElPCiAgKiBAbWVtdHlwZToJCXR5cGUgb2YgbWVtb3J5IGFkZHIgcG9pbnRzIHRvCkBAIC0yOSw2ICszMCw3IEBACiAgKiBAbWFwOgkJZm9yIHVzZSBieSB0aGUgVUlPIGNvcmUgb25seS4KICAqLwogc3RydWN0IHVpb19tZW0geworCWNvbnN0IGNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGxvbmcJCWFkZHI7CiAJdW5zaWduZWQgbG9uZwkJc2l6ZTsKIAlpbnQJCQltZW10eXBlOwpAQCAtNDIsMTIgKzQ0LDE0IEBACiAKIC8qKgogICogc3RydWN0IHVpb19wb3J0IC0gZGVzY3JpcHRpb24gb2YgYSBVSU8gcG9ydCByZWdpb24KKyAqIEBuYW1lOgkJbmFtZSBvZiB0aGUgcG9ydCByZWdpb24gZm9yIGlkZW50aWZpY2F0aW9uCiAgKiBAc3RhcnQ6CQlzdGFydCBvZiBwb3J0IHJlZ2lvbgogICogQHNpemU6CQlzaXplIG9mIHBvcnQgcmVnaW9uCiAgKiBAcG9ydHR5cGU6CQl0eXBlIG9mIHBvcnQgKHNlZSBVSU9fUE9SVF8qIGJlbG93KQogICogQHBvcnRpbzoJCWZvciB1c2UgYnkgdGhlIFVJTyBjb3JlIG9ubHkuCiAgKi8KIHN0cnVjdCB1aW9fcG9ydCB7CisJY29uc3QgY2hhcgkJKm5hbWU7CiAJdW5zaWduZWQgbG9uZwkJc3RhcnQ7CiAJdW5zaWduZWQgbG9uZwkJc2l6ZTsKIAlpbnQJCQlwb3J0dHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IDg4MDc5ZmQuLmM2YjJhYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtNjQzLDE4NiArNjQzLDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoqCi0gKiB1c2JfZW5kcG9pbnRfbnVtIC0gZ2V0IHRoZSBlbmRwb2ludCdzIG51bWJlcgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgQGVwZCdzIG51bWJlcjogMCB0byAxNS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X251bShjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF90eXBlIC0gZ2V0IHRoZSBlbmRwb2ludCdzIHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIG9uZSBvZiBVU0JfRU5EUE9JTlRfWEZFUl97Q09OVFJPTCwgSVNPQywgQlVMSywgSU5UfSBhY2NvcmRpbmcKLSAqIHRvIEBlcGQncyB0cmFuc2ZlciB0eXBlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfdHlwZShjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfZGlyX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBJTiBkaXJlY3Rpb24KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgSU4sIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTik7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2Rpcl9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIE9VVCBkaXJlY3Rpb24KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgT1VULCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfYnVsayAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGJ1bGssIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2wgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGNvbnRyb2wgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBjb250cm9sLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQlVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9pbnQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGludGVycnVwdCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAqIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pbnQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfSU5UKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9pc29jIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGlzb2Nocm9ub3VzLCBvdGhlcndpc2UgaXQgcmV0dXJucwotICogZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQyk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBJTgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19idWxrX2luKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgT1VUCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19idWxrX291dCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaW50X2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBJTgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9pbigKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2ludF9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4oCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgT1VUCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgXAogCQkoVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1QpCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1JBTkdFIFwKQEAgLTEzNTcsOCArMTE3Nyw4IEBACiAJdW5zaWduZWQgaW50IHRyYW5zZmVyX2ZsYWdzOwkvKiAoaW4pIFVSQl9TSE9SVF9OT1RfT0sgfCAuLi4qLwogCXZvaWQgKnRyYW5zZmVyX2J1ZmZlcjsJCS8qIChpbikgYXNzb2NpYXRlZCBkYXRhIGJ1ZmZlciAqLwogCWRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hOwkvKiAoaW4pIGRtYSBhZGRyIGZvciB0cmFuc2Zlcl9idWZmZXIgKi8KLQlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsJLyogKGluKSBkYXRhIGJ1ZmZlciBsZW5ndGggKi8KLQlpbnQgYWN0dWFsX2xlbmd0aDsJCS8qIChyZXR1cm4pIGFjdHVhbCB0cmFuc2ZlciBsZW5ndGggKi8KKwl1MzIgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsJLyogKGluKSBkYXRhIGJ1ZmZlciBsZW5ndGggKi8KKwl1MzIgYWN0dWFsX2xlbmd0aDsJCS8qIChyZXR1cm4pIGFjdHVhbCB0cmFuc2ZlciBsZW5ndGggKi8KIAl1bnNpZ25lZCBjaGFyICpzZXR1cF9wYWNrZXQ7CS8qIChpbikgc2V0dXAgcGFja2V0IChjb250cm9sIG9ubHkpICovCiAJZG1hX2FkZHJfdCBzZXR1cF9kbWE7CQkvKiAoaW4pIGRtYSBhZGRyIGZvciBzZXR1cF9wYWNrZXQgKi8KIAlpbnQgc3RhcnRfZnJhbWU7CQkvKiAobW9kaWZ5KSBzdGFydCBmcmFtZSAoSVNPKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAppbmRleCA5YjQyYmFlLi5iMTQ1MTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaApAQCAtMTAyLDcgKzEwMiw3IEBACiAjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9SRUFECTB4MTYKICNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFX0RTCTB4MTcKIAotLyogVGhlIExpbmsgUG93ZXIgTWFuZ2VtZW50IChMUE0pIEVDTiBkZWZpbmVzIFVTQl9SRVFfVEVTVF9BTkRfU0VUIGNvbW1hbmQsCisvKiBUaGUgTGluayBQb3dlciBNYW5hZ2VtZW50IChMUE0pIEVDTiBkZWZpbmVzIFVTQl9SRVFfVEVTVF9BTkRfU0VUIGNvbW1hbmQsCiAgKiB1c2VkIGJ5IGh1YnMgdG8gcHV0IHBvcnRzIGludG8gYSBuZXcgTDEgc3VzcGVuZCBzdGF0ZSwgZXhjZXB0IHRoYXQgaXQKICAqIGZvcmdvdCB0byBkZWZpbmUgaXRzIG51bWJlciAuLi4KICAqLwpAQCAtMzUzLDYgKzM1MywxODUgQEAKICNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfSU5UCQkzCiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9NQVhfQURKVVNUQUJMRQkweDgwCiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2VuZHBvaW50X251bSAtIGdldCB0aGUgZW5kcG9pbnQncyBudW1iZXIKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIEBlcGQncyBudW1iZXI6IDAgdG8gMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9udW0oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfdHlwZSAtIGdldCB0aGUgZW5kcG9pbnQncyB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyBvbmUgb2YgVVNCX0VORFBPSU5UX1hGRVJfe0NPTlRST0wsIElTT0MsIEJVTEssIElOVH0gYWNjb3JkaW5nCisgKiB0byBAZXBkJ3MgdHJhbnNmZXIgdHlwZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3R5cGUoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2Rpcl9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgSU4gZGlyZWN0aW9uCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIElOLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBPVVQgZGlyZWN0aW9uCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIE9VVCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBidWxrLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfYnVsaygKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBjb250cm9sIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgY29udHJvbCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfaW50IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpbnRlcnJ1cHQsIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfaXNvYyAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpc29jaHJvbm91cywgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19idWxrX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbigKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19idWxrX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIE9VVAorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2ludF9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pbnRfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pc29jX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX2luKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIE9VVAorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01ODQsOCArNzYzLDggQEAKIAkvKiBjaGFwdGVyIDkgYW5kIGF1dGhlbnRpY2F0aW9uICh3aXJlbGVzcykgZGV2aWNlIHN0YXRlcyAqLwogCVVTQl9TVEFURV9BVFRBQ0hFRCwKIAlVU0JfU1RBVEVfUE9XRVJFRCwJCQkvKiB3aXJlZCAqLwotCVVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQsCQkvKiBhdXRoICovCiAJVVNCX1NUQVRFX1JFQ09OTkVDVElORywJCQkvKiBhdXRoICovCisJVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCwJCS8qIGF1dGggKi8KIAlVU0JfU1RBVEVfREVGQVVMVCwJCQkvKiBsaW1pdGVkIGZ1bmN0aW9uICovCiAJVVNCX1NUQVRFX0FERFJFU1MsCiAJVVNCX1NUQVRFX0NPTkZJR1VSRUQsCQkJLyogbW9zdCBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKaW5kZXggOTM1YzM4MC4uYWNkN2IwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKQEAgLTI0NCw2ICsyNDQsMTAgQEAKICAqCXZhbHVlOyBpdCBzaG91bGQgcmV0dXJuIHplcm8gb24gc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4KICAqIEB1bmJpbmQ6IFJldmVyc2VzIEBiaW5kKCk7IGNhbGxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVucmVnaXN0ZXJpbmcKICAqCXRoaXMgZHJpdmVyLgorICogQHN1c3BlbmQ6IE5vdGlmaWVzIHdoZW4gdGhlIGhvc3Qgc3RvcHMgc2VuZGluZyBVU0IgdHJhZmZpYywKKyAqCWFmdGVyIGZ1bmN0aW9uIG5vdGlmaWNhdGlvbnMKKyAqIEByZXN1bWU6IE5vdGlmaWVzIGNvbmZpZ3VyYXRpb24gd2hlbiB0aGUgaG9zdCByZXN0YXJ0cyBVU0IgdHJhZmZpYywKKyAqCWJlZm9yZSBmdW5jdGlvbiBub3RpZmljYXRpb25zCiAgKgogICogRGV2aWNlcyBkZWZhdWx0IHRvIHJlcG9ydGluZyBzZWxmIHBvd2VyZWQgb3BlcmF0aW9uLiAgRGV2aWNlcyB3aGljaCByZWx5CiAgKiBvbiBidXMgcG93ZXJlZCBvcGVyYXRpb24gc2hvdWxkIHJlcG9ydCB0aGlzIGluIHRoZWlyIEBiaW5kKCkgbWV0aG9kLgpAQCAtMjY4LDYgKzI3MiwxMCBAQAogCiAJaW50CQkJKCpiaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CiAJaW50CQkJKCp1bmJpbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKKworCS8qIGdsb2JhbCBzdXNwZW5kIGhvb2tzICovCisJdm9pZAkJCSgqc3VzcGVuZCkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOworCXZvaWQJCQkoKnJlc3VtZSkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOwogfTsKIAogZXh0ZXJuIGludCB1c2JfY29tcG9zaXRlX3JlZ2lzdGVyKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKaW5kZXggMDQ2MGE3NC4uYmJmNDVkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKQEAgLTU5OCw2ICs1OTgsNyBAQAogLyoqCiAgKiB1c2JfZ2FkZ2V0X3ZidXNfY29ubmVjdCAtIE5vdGlmeSBjb250cm9sbGVyIHRoYXQgVkJVUyBpcyBwb3dlcmVkCiAgKiBAZ2FkZ2V0OlRoZSBkZXZpY2Ugd2hpY2ggbm93IGhhcyBWQlVTIHBvd2VyLgorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgYnkgYSBkcml2ZXIgZm9yIGFuIGV4dGVybmFsIHRyYW5zY2VpdmVyIChvciBHUElPKQogICogdGhhdCBkZXRlY3RzIGEgVkJVUyBwb3dlciBzZXNzaW9uIHN0YXJ0aW5nLiAgQ29tbW9uIHJlc3BvbnNlcyBpbmNsdWRlCkBAIC02MzYsNiArNjM3LDcgQEAKIC8qKgogICogdXNiX2dhZGdldF92YnVzX2Rpc2Nvbm5lY3QgLSBub3RpZnkgY29udHJvbGxlciBhYm91dCBWQlVTIHNlc3Npb24gZW5kCiAgKiBAZ2FkZ2V0OnRoZSBkZXZpY2Ugd2hvc2UgVkJVUyBzdXBwbHkgaXMgYmVpbmcgZGVzY3JpYmVkCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBhIGRyaXZlciBmb3IgYW4gZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKG9yIEdQSU8pCiAgKiB0aGF0IGRldGVjdHMgYSBWQlVTIHBvd2VyIHNlc3Npb24gZW5kaW5nLiAgQ29tbW9uIHJlc3BvbnNlcyBpbmNsdWRlCkBAIC03OTIsMTkgKzc5NCwyMCBAQAogLyoqCiAgKiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgogICogQGRyaXZlcjp0aGUgZHJpdmVyIGJlaW5nIHJlZ2lzdGVyZWQKKyAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIENhbGwgdGhpcyBpbiB5b3VyIGdhZGdldCBkcml2ZXIncyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sCiAgKiB0byB0ZWxsIHRoZSB1bmRlcmx5aW5nIHVzYiBjb250cm9sbGVyIGRyaXZlciBhYm91dCB5b3VyIGRyaXZlci4KICAqIFRoZSBkcml2ZXIncyBiaW5kKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gYmluZCBpdCB0byBhCiAgKiBnYWRnZXQgYmVmb3JlIHRoaXMgcmVnaXN0cmF0aW9uIGNhbGwgcmV0dXJucy4gIEl0J3MgZXhwZWN0ZWQgdGhhdAogICogdGhlIGJpbmQoKSBmdW5jdGlvbnMgd2lsbCBiZSBpbiBpbml0IHNlY3Rpb25zLgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgdGhhdCBjYW4gc2xlZXAuCiAgKi8KIGludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiAKIC8qKgogICogdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXIgYSBnYWRnZXQgZHJpdmVyCiAgKiBAZHJpdmVyOnRoZSBkcml2ZXIgYmVpbmcgdW5yZWdpc3RlcmVkCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBDYWxsIHRoaXMgaW4geW91ciBnYWRnZXQgZHJpdmVyJ3MgbW9kdWxlIGNsZWFudXAgZnVuY3Rpb24sCiAgKiB0byB0ZWxsIHRoZSB1bmRlcmx5aW5nIHVzYiBjb250cm9sbGVyIHRoYXQgeW91ciBkcml2ZXIgaXMKQEAgLTgxMyw3ICs4MTYsNiBAQAogICogdG8gdW5iaW5kKCkgYW5kIGNsZWFuIHVwIGFueSBkZXZpY2Ugc3RhdGUsIGJlZm9yZSB0aGlzIHByb2NlZHVyZQogICogZmluYWxseSByZXR1cm5zLiAgSXQncyBleHBlY3RlZCB0aGF0IHRoZSB1bmJpbmQoKSBmdW5jdGlvbnMKICAqIHdpbGwgaW4gaW4gZXhpdCBzZWN0aW9ucywgc28gbWF5IG5vdCBiZSBsaW5rZWQgaW4gc29tZSBrZXJuZWxzLgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgdGhhdCBjYW4gc2xlZXAuCiAgKi8KIGludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAppbmRleCA5NGRmNGZlLi4xYWFhODI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaApAQCAtODAsMTIgKzgwLDE3IEBACiAKIC8qIGZvciBib2FyZC1zcGVjaWZpYyBpbml0IGxvZ2ljICovCiBleHRlcm4gaW50IG90Z19zZXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKKyNpZmRlZiBDT05GSUdfTk9QX1VTQl9YQ0VJVgorZXh0ZXJuIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKTsKKyNlbmRpZgogCiAKIC8qIGZvciB1c2IgaG9zdCBhbmQgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMgKi8KIGV4dGVybiBzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGdfZ2V0X3RyYW5zY2VpdmVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgb3RnX3B1dF90cmFuc2NlaXZlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICopOwogCisvKiBDb250ZXh0OiBjYW4gc2xlZXAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBvdGdfc3RhcnRfaG5wKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKIHsKQEAgLTEwMiw2ICsxMDcsOCBAQAogCiAKIC8qIGZvciB1c2IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMgKi8KKworLyogQ29udGV4dDogY2FuIHNsZWVwICovCiBzdGF0aWMgaW5saW5lIGludAogb3RnX3NldF9wZXJpcGhlcmFsKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Zywgc3RydWN0IHVzYl9nYWRnZXQgKnBlcmlwaCkKIHsKQEAgLTExNCw2ICsxMjEsNyBAQAogCXJldHVybiBvdGctPnNldF9wb3dlcihvdGcsIG1BKTsKIH0KIAorLyogQ29udGV4dDogY2FuIHNsZWVwICovCiBzdGF0aWMgaW5saW5lIGludAogb3RnX3NldF9zdXNwZW5kKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgaW50IHN1c3BlbmQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaCBiL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCmluZGV4IDdmNmM2MDMuLjI1MjZmM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCkBAIC0xNiw0ICsxNiw3IEBACiAvKiBkZXZpY2UgY2FuJ3QgaGFuZGxlIFNldC1JbnRlcmZhY2UgcmVxdWVzdHMgKi8KICNkZWZpbmUgVVNCX1FVSVJLX05PX1NFVF9JTlRGCQkweDAwMDAwMDA0CiAKKy8qIGRldmljZSBjYW4ndCBoYW5kbGUgaXRzIENvbmZpZ3VyYXRpb24gb3IgSW50ZXJmYWNlIHN0cmluZ3MgKi8KKyNkZWZpbmUgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MJMHgwMDAwMDAwOAorCiAjZW5kaWYgLyogX19MSU5VWF9VU0JfUVVJUktTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaCBiL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaAppbmRleCAwYTZlNmQ0Li4zNzgzNmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCkBAIC00OSw0OCArNDksNDUgQEAKICAqLwogI2RlZmluZQlSTkRJU19DT05UUk9MX1RJTUVPVVRfTVMJKDUgKiAxMDAwKQogCi0KLSNkZWZpbmUgY2NwdTIgX19jb25zdGFudF9jcHVfdG9fbGUzMgotCi0jZGVmaW5lIFJORElTX01TR19DT01QTEVUSU9OCWNjcHUyKDB4ODAwMDAwMDApCisjZGVmaW5lIFJORElTX01TR19DT01QTEVUSU9OCWNwdV90b19sZTMyKDB4ODAwMDAwMDApCiAKIC8qIGNvZGVzIGZvciAibXNnX3R5cGUiIGZpZWxkIG9mIHJuZGlzIG1lc3NhZ2VzOwogICogb25seSB0aGUgZGF0YSBjaGFubmVsIHVzZXMgcGFja2V0IG1lc3NhZ2VzIChtYXliZSBiYXRjaGVkKTsKICAqIGV2ZXJ5dGhpbmcgZWxzZSBnb2VzIG9uIHRoZSBjb250cm9sIGNoYW5uZWwuCiAgKi8KLSNkZWZpbmUgUk5ESVNfTVNHX1BBQ0tFVAljY3B1MigweDAwMDAwMDAxKQkvKiAxLU4gcGFja2V0cyAqLwotI2RlZmluZSBSTkRJU19NU0dfSU5JVAkJY2NwdTIoMHgwMDAwMDAwMikKKyNkZWZpbmUgUk5ESVNfTVNHX1BBQ0tFVAljcHVfdG9fbGUzMigweDAwMDAwMDAxKQkvKiAxLU4gcGFja2V0cyAqLworI2RlZmluZSBSTkRJU19NU0dfSU5JVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKICNkZWZpbmUgUk5ESVNfTVNHX0lOSVRfQwkoUk5ESVNfTVNHX0lOSVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCi0jZGVmaW5lIFJORElTX01TR19IQUxUCQljY3B1MigweDAwMDAwMDAzKQotI2RlZmluZSBSTkRJU19NU0dfUVVFUlkJCWNjcHUyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFJORElTX01TR19IQUxUCQljcHVfdG9fbGUzMigweDAwMDAwMDAzKQorI2RlZmluZSBSTkRJU19NU0dfUVVFUlkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCiAjZGVmaW5lIFJORElTX01TR19RVUVSWV9DCShSTkRJU19NU0dfUVVFUll8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCi0jZGVmaW5lIFJORElTX01TR19TRVQJCWNjcHUyKDB4MDAwMDAwMDUpCisjZGVmaW5lIFJORElTX01TR19TRVQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDUpCiAjZGVmaW5lIFJORElTX01TR19TRVRfQwkJKFJORElTX01TR19TRVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCi0jZGVmaW5lIFJORElTX01TR19SRVNFVAkJY2NwdTIoMHgwMDAwMDAwNikKKyNkZWZpbmUgUk5ESVNfTVNHX1JFU0VUCQljcHVfdG9fbGUzMigweDAwMDAwMDA2KQogI2RlZmluZSBSTkRJU19NU0dfUkVTRVRfQwkoUk5ESVNfTVNHX1JFU0VUfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfSU5ESUNBVEUJY2NwdTIoMHgwMDAwMDAwNykKLSNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRQljY3B1MigweDAwMDAwMDA4KQorI2RlZmluZSBSTkRJU19NU0dfSU5ESUNBVEUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKKyNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRQljcHVfdG9fbGUzMigweDAwMDAwMDA4KQogI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFX0MJKFJORElTX01TR19LRUVQQUxJVkV8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCiAKIC8qIGNvZGVzIGZvciAic3RhdHVzIiBmaWVsZCBvZiBjb21wbGV0aW9uIG1lc3NhZ2VzICovCi0jZGVmaW5lCVJORElTX1NUQVRVU19TVUNDRVNTCQljY3B1MigweDAwMDAwMDAwKQotI2RlZmluZQlSTkRJU19TVEFUVVNfRkFJTFVSRQkJY2NwdTIoMHhjMDAwMDAwMSkKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX0lOVkFMSURfREFUQQljY3B1MigweGMwMDEwMDE1KQotI2RlZmluZQlSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRAljY3B1MigweGMwMDAwMGJiKQotI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVAljY3B1MigweDQwMDEwMDBiKQotI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVAljY3B1MigweDQwMDEwMDBjKQorI2RlZmluZQlSTkRJU19TVEFUVVNfU1VDQ0VTUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX0ZBSUxVUkUJCWNwdV90b19sZTMyKDB4YzAwMDAwMDEpCisjZGVmaW5lCVJORElTX1NUQVRVU19JTlZBTElEX0RBVEEJY3B1X3RvX2xlMzIoMHhjMDAxMDAxNSkKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQJY3B1X3RvX2xlMzIoMHhjMDAwMDBiYikKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QJY3B1X3RvX2xlMzIoMHg0MDAxMDAwYikKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QJY3B1X3RvX2xlMzIoMHg0MDAxMDAwYykKIAogLyogY29kZXMgZm9yIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNICovCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9VTlNQRUNJRklFRAljY3B1MigweDAwMDAwMDAwKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fV0lSRUxFU1NfTEFOCWNjcHUyKDB4MDAwMDAwMDEpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9DQUJMRV9NT0RFTQljY3B1MigweDAwMDAwMDAyKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fUEhPTkVfTElORQljY3B1MigweDAwMDAwMDAzKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fUE9XRVJfTElORQljY3B1MigweDAwMDAwMDA0KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fRFNMCQljY3B1MigweDAwMDAwMDA1KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fRklCUkVfQ0hBTk5FTAljY3B1MigweDAwMDAwMDA2KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fMTM5NAkJY2NwdTIoMHgwMDAwMDAwNykKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX1dBTgljY3B1MigweDAwMDAwMDA4KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fTUFYCQljY3B1MigweDAwMDAwMDA5KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fVU5TUEVDSUZJRUQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTgljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fQ0FCTEVfTU9ERU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BIT05FX0xJTkUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BPV0VSX0xJTkUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0RTTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0ZJQlJFX0NIQU5ORUwJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNikKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNXzEzOTQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9XSVJFTEVTU19XQU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX01BWAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOSkKIAogc3RydWN0IHJuZGlzX2RhdGFfaGRyIHsKIAlfX2xlMzIJbXNnX3R5cGU7CQkvKiBSTkRJU19NU0dfUEFDS0VUICovCkBAIC0yMjgsMjQgKzIyNSwyNCBAQAogICogdGhlcmUgYXJlIGdvYnMgbW9yZSB0aGF0IG1heSBvcHRpb25hbGx5IGJlIHN1cHBvcnRlZC4gIFdlJ2xsIGF2b2lkIGFzIG11Y2gKICAqIG9mIHRoYXQgbWVzcyBhcyBwb3NzaWJsZS4KICAqLwotI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJY2NwdTIoMHgwMTAxMDEwMSkKLSNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUJY2NwdTIoMHgwMDAxMDEwNikKLSNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIJY2NwdTIoMHgwMDAxMDEwZSkKLSNkZWZpbmUgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0JCWNjcHUyKDB4MDAwMTAyMDIpCisjZGVmaW5lIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUwljcHVfdG9fbGUzMigweDAxMDEwMTAxKQorI2RlZmluZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRQljcHVfdG9fbGUzMigweDAwMDEwMTA2KQorI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUgljcHVfdG9fbGUzMigweDAwMDEwMTBlKQorI2RlZmluZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTQkJY3B1X3RvX2xlMzIoMHgwMDAxMDIwMikKIAogLyogcGFja2V0IGZpbHRlciBiaXRzIHVzZWQgYnkgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIgKi8KLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQJCWNjcHUyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJY2NwdTIoMHgwMDAwMDAwMikKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkJY2NwdTIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUCQljY3B1MigweDAwMDAwMDA4KQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORwljY3B1MigweDAwMDAwMDEwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJY2NwdTIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU01UCQkJY2NwdTIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMCQljY3B1MigweDAwMDAwMDgwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9HUk9VUAkJCWNjcHUyKDB4MDAwMDEwMDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElPTkFMCWNjcHUyKDB4MDAwMDIwMDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0ZVTkNUSU9OQUwJCWNjcHUyKDB4MDAwMDQwMDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRQkJY2NwdTIoMHgwMDAwODAwMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUCQljcHVfdG9fbGUzMigweDAwMDAwMDA4KQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORwljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU01UCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMCQljcHVfdG9fbGUzMigweDAwMDAwMDgwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9HUk9VUAkJCWNwdV90b19sZTMyKDB4MDAwMDEwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElPTkFMCWNwdV90b19sZTMyKDB4MDAwMDIwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0ZVTkNUSU9OQUwJCWNwdV90b19sZTMyKDB4MDAwMDQwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRQkJY3B1X3RvX2xlMzIoMHgwMDAwODAwMCkKIAogLyogZGVmYXVsdCBmaWx0ZXIgdXNlZCB3aXRoIFJORElTIGRldmljZXMgKi8KICNkZWZpbmUgUk5ESVNfREVGQVVMVF9GSUxURVIgKCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDBiODYxN2EuLmI5NTg0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xMzAsNyArMTMwLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZQkJKmRldjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIJKnR5cGU7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJCSppbnRlcmZhY2U7Ci0JdW5zaWduZWQgY2hhcgkJCWRpc2Nvbm5lY3RlZDsKKwl1bnNpZ25lZCBjaGFyCQkJZGlzY29ubmVjdGVkOjE7CisJdW5zaWduZWQgY2hhcgkJCXN1c3BlbmRpbmc6MTsKIAl1bnNpZ25lZCBjaGFyCQkJbWlub3I7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0czsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRfcG9pbnRlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCmluZGV4IDdkMzgyMjIuLjM2ZmFiYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCkBAIC0xNzYsNiArMTc2LDExIEBACiAJc2l6ZV90CQkJbGVuZ3RoOwogfTsKIAorZXh0ZXJuIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gaW50IHVzYm5ldF9zdG9wIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiBpbnQgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpOwogCiBleHRlcm4gaW50IHVzYm5ldF9nZXRfZW5kcG9pbnRzKHN0cnVjdCB1c2JuZXQgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CiBleHRlcm4gdm9pZCB1c2JuZXRfZGVmZXJfa2V2ZW50IChzdHJ1Y3QgdXNibmV0ICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAppbmRleCAxZWVhMWFiLi4zZDE1ZmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKQEAgLTk2LDM5ICs5NiwyNiBAQAogI2RlZmluZSBVU19QUl9DQkkJMHgwMAkJLyogQ29udHJvbC9CdWxrL0ludGVycnVwdCAqLwogI2RlZmluZSBVU19QUl9DQgkweDAxCQkvKiBDb250cm9sL0J1bGsgdy9vIGludGVycnVwdCAqLwogI2RlZmluZSBVU19QUl9CVUxLCTB4NTAJCS8qIGJ1bGsgb25seSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAorCiAjZGVmaW5lIFVTX1BSX1VTQkFUCTB4ODAJCS8qIFNDTS1BVEFQSSBicmlkZ2UgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKICNkZWZpbmUgVVNfUFJfRVVTQl9TRERSMDkJMHg4MQkvKiBTQ00tU0NTSSBicmlkZ2UgZm9yIFNERFItMDkgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKICNkZWZpbmUgVVNfUFJfU0REUjU1CTB4ODIJCS8qIFNERFItNTUgKG1hZGUgdXApICovCi0jZW5kaWYKICNkZWZpbmUgVVNfUFJfRFBDTV9VU0IgIDB4ZjAJCS8qIENvbWJpbmF0aW9uIENCL1NERFIwOSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCiAjZGVmaW5lIFVTX1BSX0ZSRUVDT00gICAweGYxCQkvKiBGcmVlY29tICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgogI2RlZmluZSBVU19QUl9EQVRBRkFCICAgMHhmMgkJLyogRGF0YWZhYiBjaGlwc2V0cyAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCiAjZGVmaW5lIFVTX1BSX0pVTVBTSE9UICAweGYzCQkvKiBMZXhhciBKdW1wc2hvdCAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQogI2RlZmluZSBVU19QUl9BTEFVREEgICAgMHhmNAkJLyogQWxhdWRhIGNoaXBzZXRzICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKICNkZWZpbmUgVVNfUFJfS0FSTUEgICAgIDB4ZjUJCS8qIFJpbyBLYXJtYSAqLwotI2VuZGlmCiAKICNkZWZpbmUgVVNfUFJfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLwogCiAvKgogICovCitleHRlcm4gaW50IHVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK2V4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW107CisKICNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCiAKLWV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHNbXTsKIGV4dGVybiB2b2lkIHVzYl91c3VhbF9zZXRfcHJlc2VudChpbnQgdHlwZSk7CiBleHRlcm4gdm9pZCB1c2JfdXN1YWxfY2xlYXJfcHJlc2VudChpbnQgdHlwZSk7CiBleHRlcm4gaW50IHVzYl91c3VhbF9jaGVja190eXBlKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICosIGludCB0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXRpbWUuaCBiL2luY2x1ZGUvbGludXgvdXRpbWUuaAppbmRleCA2NDBiZTZhLi41Y2RmNjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC91dGltZS5oCkBAIC00LDggKzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHN0cnVjdCB1dGltYnVmIHsKLQl0aW1lX3QgYWN0aW1lOwotCXRpbWVfdCBtb2R0aW1lOworCV9fa2VybmVsX3RpbWVfdCBhY3RpbWU7CisJX19rZXJuZWxfdGltZV90IG1vZHRpbWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKaW5kZXggM2VmYTg2Yy4uMjQyMzQ4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKQEAgLTIyLDExICsyMiwxOSBAQAogI2RlZmluZSBWSVJUSU9fTkVUX0ZfSE9TVF9FQ04JMTMJLyogSG9zdCBjYW4gaGFuZGxlIFRTT1s2XSB3LyBFQ04gaW4uICovCiAjZGVmaW5lIFZJUlRJT19ORVRfRl9IT1NUX1VGTwkxNAkvKiBIb3N0IGNhbiBoYW5kbGUgVUZPIGluLiAqLwogI2RlZmluZSBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGCTE1CS8qIEhvc3QgY2FuIG1lcmdlIHJlY2VpdmUgYnVmZmVycy4gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX1NUQVRVUwkxNgkvKiB2aXJ0aW9fbmV0X2NvbmZpZy5zdGF0dXMgYXZhaWxhYmxlICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9DVFJMX1ZRCTE3CS8qIENvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0NUUkxfUlgJMTgJLyogQ29udHJvbCBjaGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCTE5CS8qIENvbnRyb2wgY2hhbm5lbCBWTEFOIGZpbHRlcmluZyAqLworCisjZGVmaW5lIFZJUlRJT19ORVRfU19MSU5LX1VQCTEJLyogTGluayBpcyB1cCAqLwogCiBzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcKIHsKIAkvKiBUaGUgY29uZmlnIGRlZmluaW5nIG1hYyBhZGRyZXNzIChpZiBWSVJUSU9fTkVUX0ZfTUFDKSAqLwogCV9fdTggbWFjWzZdOworCS8qIFNlZSBWSVJUSU9fTkVUX0ZfU1RBVFVTIGFuZCBWSVJUSU9fTkVUX1NfKiBhYm92ZSAqLworCV9fdTE2IHN0YXR1czsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFRoaXMgaXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QuICBJZiB5b3UgZG9uJ3QKQEAgLTU0LDQgKzYyLDY3IEBACiAJX191MTYgbnVtX2J1ZmZlcnM7CS8qIE51bWJlciBvZiBtZXJnZWQgcnggYnVmZmVycyAqLwogfTsKIAorLyoKKyAqIENvbnRyb2wgdmlydHF1ZXVlIGRhdGEgc3RydWN0dXJlcworICoKKyAqIFRoZSBjb250cm9sIHZpcnRxdWV1ZSBleHBlY3RzIGEgaGVhZGVyIGluIHRoZSBmaXJzdCBzZyBlbnRyeQorICogYW5kIGFuIGFjay9zdGF0dXMgcmVzcG9uc2UgaW4gdGhlIGxhc3QgZW50cnkuICBEYXRhIGZvciB0aGUKKyAqIGNvbW1hbmQgZ29lcyBpbiBiZXR3ZWVuLgorICovCitzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX2hkciB7CisJX191OCBjbGFzczsKKwlfX3U4IGNtZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgX191OCB2aXJ0aW9fbmV0X2N0cmxfYWNrOworCisjZGVmaW5lIFZJUlRJT19ORVRfT0sgICAgIDAKKyNkZWZpbmUgVklSVElPX05FVF9FUlIgICAgMQorCisvKgorICogQ29udHJvbCB0aGUgUlggbW9kZSwgaWUuIHByb21pc3Vjb3VzIGFuZCBhbGxtdWx0aS4gIFBST01JU0MgYW5kCisgKiBBTExNVUxUSSBjb21tYW5kcyByZXF1aXJlIGFuICJvdXQiIHNnIGVudHJ5IGNvbnRhaW5pbmcgYSAxIGJ5dGUKKyAqIHN0YXRlIHZhbHVlLCB6ZXJvID0gZGlzYWJsZSwgbm9uLXplcm8gPSBlbmFibGUuICBUaGVzZSBjb21tYW5kcworICogYXJlIHN1cHBvcnRlZCB3aXRoIHRoZSBWSVJUSU9fTkVUX0ZfQ1RSTF9SWCBmZWF0dXJlLgorICovCisjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9SWCAgICAwCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlhfUFJPTUlTQyAgICAgIDAKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9SWF9BTExNVUxUSSAgICAgMQorCisvKgorICogQ29udHJvbCB0aGUgTUFDIGZpbHRlciB0YWJsZS4KKyAqCisgKiBUaGUgTUFDIGZpbHRlciB0YWJsZSBpcyBtYW5hZ2VkIGJ5IHRoZSBoeXBlcnZpc29yLCB0aGUgZ3Vlc3Qgc2hvdWxkCisgKiBhc3N1bWUgdGhlIHNpemUgaXMgaW5maW5pdGUuICBGaWx0ZXJpbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQKKyAqIG5vbi1wZXJmZWN0LCBpZS4gYmFzZWQgb24gaHlwZXJ2aXNvciByZXNvdXJjZXMsIHRoZSBndWVzdCBtYXkKKyAqIHJlY2VpdmVkIHBhY2tldHMgZnJvbSBzb3VyY2VzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGZpbHRlciBsaXN0LgorICoKKyAqIEluIGFkZGl0aW9uIHRvIHRoZSBjbGFzcy9jbWQgaGVhZGVyLCB0aGUgVEFCTEVfU0VUIGNvbW1hbmQgcmVxdWlyZXMKKyAqIHR3byBvdXQgc2NhdHRlcmxpc3RzLiAgRWFjaCBjb250YWlucyBhIDQgYnl0ZSBjb3VudCBvZiBlbnRyaWVzIGZvbGxvd2VkCisgKiBieSBhIGNvbmNhdGVuYXRlZCBieXRlIHN0cmVhbSBvZiB0aGUgRVRIX0FMRU4gTUFDIGFkZHJlc3Nlcy4gIFRoZQorICogZmlyc3Qgc2cgbGlzdCBjb250YWlucyB1bmljYXN0IGFkZHJlc3NlcywgdGhlIHNlY29uZCBpcyBmb3IgbXVsdGljYXN0LgorICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgaWYgdGhlIFZJUlRJT19ORVRfRl9DVFJMX1JYIGZlYXR1cmUKKyAqIGlzIGF2YWlsYWJsZS4KKyAqLworc3RydWN0IHZpcnRpb19uZXRfY3RybF9tYWMgeworCV9fdTMyIGVudHJpZXM7CisJX191OCBtYWNzW11bRVRIX0FMRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfTUFDICAgIDEKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9NQUNfVEFCTEVfU0VUICAgICAgICAwCisKKy8qCisgKiBDb250cm9sIFZMQU4gZmlsdGVyaW5nCisgKgorICogVGhlIFZMQU4gZmlsdGVyIHRhYmxlIGlzIGNvbnRyb2xsZWQgdmlhIGEgc2ltcGxlIEFERC9ERUwgaW50ZXJmYWNlLgorICogVkxBTiBJRHMgbm90IGFkZGVkIG1heSBiZSBmaWx0ZXJkIGJ5IHRoZSBoeXBlcnZpc29yLiAgRGVsIGlzIHRoZQorICogb3Bwb3NpdGUgb2YgYWRkLiAgQm90aCBjb21tYW5kcyBleHBlY3QgYW4gb3V0IGVudHJ5IGNvbnRhaW5pbmcgYSAyCisgKiBieXRlIFZMQU4gSUQuICBWTEFOIGZpbHRlcnRpbmcgaXMgYXZhaWxhYmxlIHdpdGggdGhlCisgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOIGZlYXR1cmUgYml0LgorICovCisjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9WTEFOICAgICAgIDIKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0FERCAgICAgICAgICAgICAwCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTl9ERUwgICAgICAgICAgICAgMQorCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19ORVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oCmluZGV4IGJhMGM0OTMuLmM3MDNlMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2ltYXgvZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlXQVJOX09OKDEpOwogCX0gZWxzZQogCQlzbnByaW50ZihoZWFkLCBoZWFkX3NpemUsICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXYtPmJ1c19pZCk7CisJCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaCBiL2luY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKaW5kZXggNzQxOThmNS4uZDUxNDhhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCkBAIC0yMDcsNiArMjA3LDcgQEAKIAlJMjQwME1fUFRfVFJBQ0UsCS8qIEZvciBkZXZpY2UgZGVidWcgKi8KIAlJMjQwME1fUFRfUkVTRVRfV0FSTSwJLyogZGV2aWNlIHJlc2V0ICovCiAJSTI0MDBNX1BUX1JFU0VUX0NPTEQsCS8qIFVTQlt0cmFuc3BvcnRdIHJlc2V0LCBsaWtlIHJlY29ubmVjdCAqLworCUkyNDAwTV9QVF9FREFUQSwJLyogRXh0ZW5kZWQgUlggZGF0YSAqLwogCUkyNDAwTV9QVF9JTExFR0FMCiB9OwogCkBAIC0yMjEsNiArMjIyLDQ4IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAKKy8qCisgKiBQYXlsb2FkIGZvciBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIE5ldyBpbiBmdyB2MS40CisgKgorICogQHJlb3JkZXI6IGlmIHRoaXMgcGF5bG9hZCBoYXMgdG8gYmUgcmVvcmRlciBvciBub3QgKGFuZCBob3cpCisgKiBAY3M6IHRoZSB0eXBlIG9mIGRhdGEgaW4gdGhlIHBhY2tldCwgYXMgZGVmaW5lZCBwZXIgKDgwMi4xNmUKKyAqICAgICBUMTEuMTMuMTkuMSkuIEN1cnJlbnRseSBvbmx5IDIgKElQdjQgcGFja2V0KSBzdXBwb3J0ZWQuCisgKgorICogVGhpcyBpcyBwcmVmaXhlZCB0byBlYWNoIGFuZCBldmVyeSBJTkNPTUlORyBEQVRBIHBhY2tldC4KKyAqLworc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIgeworCV9fbGUzMiByZW9yZGVyOwkJLyogYml0cyBkZWZpbmVkIGluIGkyNDAwbV9ybyAqLworCV9fdTggY3M7CisJX191OCByZXNlcnZlZFsxMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIGkyNDAwbV9jcyB7CisJSTI0MDBNX0NTX0lQVjRfMCA9IDAsCisJSTI0MDBNX0NTX0lQVjQgPSAyLAorfTsKKworZW51bSBpMjQwMG1fcm8geworCUkyNDAwTV9ST19ORUVERUQgICAgID0gMHgwMSwKKwlJMjQwME1fUk9fVFlQRSAgICAgICA9IDB4MDMsCisJSTI0MDBNX1JPX1RZUEVfU0hJRlQgPSAxLAorCUkyNDAwTV9ST19DSU4gICAgICAgID0gMHgwZiwKKwlJMjQwME1fUk9fQ0lOX1NISUZUICA9IDQsCisJSTI0MDBNX1JPX0ZCTiAgICAgICAgPSAweDA3ZmYsCisJSTI0MDBNX1JPX0ZCTl9TSElGVCAgPSA4LAorCUkyNDAwTV9ST19TTiAgICAgICAgID0gMHgwN2ZmLAorCUkyNDAwTV9ST19TTl9TSElGVCAgID0gMjEsCit9OworCitlbnVtIGkyNDAwbV9yb190eXBlIHsKKwlJMjQwME1fUk9fVFlQRV9SRVNFVCA9IDAsCisJSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCUkyNDAwTV9ST19UWVBFX1dTLAorCUkyNDAwTV9ST19UWVBFX1BBQ0tFVF9XUywKK307CisKKwogLyogTWlzYyBjb25zdGFudHMgKi8KIGVudW0gewogCUkyNDAwTV9QTF9QQUQgPSAxNiwJLyogUGF5bG9hZCBkYXRhIHNpemUgYWxpZ25tZW50ICovCkBAIC0zODEsNiArNDI0LDkgQEAKIAlJMjQwME1fVExWX1JGX1NUQVRVUyA9IDE2MywKIAlJMjQwME1fVExWX0RFVklDRV9SRVNFVF9UWVBFID0gMTMyLAogCUkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyA9IDYwMSwKKwlJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQgPSA2MTEsCisJSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUID0gNjE0LAorCUkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUiA9IDYxNSwKIH07CiAKIApAQCAtNTA5LDQgKzU1NSwyNyBAQAogCV9fbGUzMiBtZWRpYV9zdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisKKy8qIE5ldyBpbiB2MS40ICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fbGUzMiB0aW1lb3V0OwkvKiAxMDAgdG8gMzAwMDAwIG1zIFs1bWluXSwgMTAwIGluY3JlbWVudHMKKwkJCSAqIDAgZGlzYWJsZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE5ldyBpbiB2MS40IC0tIGZvciBiYWNrd2FyZCBjb21wYXQsIHdpbGwgYmUgcmVtb3ZlZCAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2QyaF9kYXRhX2Zvcm1hdCB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX3U4IGZvcm1hdDsgCQkvKiAwIG9sZCBmb3JtYXQsIDEgZW5oYW5jZWQgKi8KKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTmV3IGluIHYxLjQgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kbF9ob3N0X3Jlb3JkZXIgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX191OCByZW9yZGVyOyAJCS8qIDAgZGlzYWJsZWQsIDEgZW5hYmxlZCAqLworCV9fdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKICNlbmRpZiAvKiAjaWZuZGVmIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggZDc5NThmOS4uY2IyNDIwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtNTc3LDE4ICs1NzcsMjIgQEAKICNkZWZpbmUgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTAk4CiAjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19DT05UUk9MCQk5CiAjZGVmaW5lIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VECQkxMAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9HUk9VUF9NR01UCTExCisjZGVmaW5lIElXX0FVVEhfTUZQCQkJMTIKIAogLyogSVdfQVVUSF9XUEFfVkVSU0lPTiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KICNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRAkweDAwMDAwMDAxCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBCQkweDAwMDAwMDAyCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMgkweDAwMDAwMDA0CiAKLS8qIElXX0FVVEhfUEFJUldJU0VfQ0lQSEVSIGFuZCBJV19BVVRIX0dST1VQX0NJUEhFUiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KKy8qIElXX0FVVEhfUEFJUldJU0VfQ0lQSEVSLCBJV19BVVRIX0dST1VQX0NJUEhFUiwgYW5kIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQKKyAqIHZhbHVlcyAoYml0IGZpZWxkKSAqLwogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9OT05FCTB4MDAwMDAwMDEKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfV0VQNDAJMHgwMDAwMDAwMgogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9US0lQCTB4MDAwMDAwMDQKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfQ0NNUAkweDAwMDAwMDA4CiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1dFUDEwNAkweDAwMDAwMDEwCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0FFU19DTUFDCTB4MDAwMDAwMjAKIAogLyogSVdfQVVUSF9LRVlfTUdNVCB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KICNkZWZpbmUgSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgJMQpAQCAtNjA0LDYgKzYwOCwxMSBAQAogI2RlZmluZSBJV19BVVRIX1JPQU1JTkdfRElTQUJMRQkxCS8qIHVzZXIgc3BhY2UgcHJvZ3JhbSB1c2VkIGZvciByb2FtaW5nCiAJCQkJCSAqIGNvbnRyb2wgKi8KIAorLyogSVdfQVVUSF9NRlAgKG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbikgdmFsdWVzICovCisjZGVmaW5lIElXX0FVVEhfTUZQX0RJU0FCTEVECTAJLyogTUZQIGRpc2FibGVkICovCisjZGVmaW5lIElXX0FVVEhfTUZQX09QVElPTkFMCTEJLyogTUZQIG9wdGlvbmFsICovCisjZGVmaW5lIElXX0FVVEhfTUZQX1JFUVVJUkVECTIJLyogTUZQIHJlcXVpcmVkICovCisKIC8qIFNJT0NTSVdFTkNPREVFWFQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVdfRU5DT0RFX1NFUV9NQVhfU0laRQk4CiAvKiBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAtPmFsZyAqLwpAQCAtNjEyLDYgKzYyMSw3IEBACiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfVEtJUAkyCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfQ0NNUAkzCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfUE1LCTQKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19BRVNfQ01BQwk1CiAvKiBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAtPmV4dF9mbGFncyAqLwogI2RlZmluZSBJV19FTkNPREVfRVhUX1RYX1NFUV9WQUxJRAkweDAwMDAwMDAxCiAjZGVmaW5lIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElECTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveGZybS5oIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKaW5kZXggNTJmM2FiZC4uMmQ0ZWMxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC94ZnJtLmgKKysrIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKQEAgLTU4LDcgKzU4LDcgQEAKIAlfX3U4CXByZWZpeGxlbl9zOwogCV9fdTgJcHJvdG87CiAJaW50CWlmaW5kZXg7Ci0JdWlkX3QJdXNlcjsKKwlfX2tlcm5lbF91aWQzMl90CXVzZXI7CiB9OwogCiAjZGVmaW5lIFhGUk1fSU5GICh+KF9fdTY0KTApCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmgKaW5kZXggZDQwOWQ0OC4uODM3NmJkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaApAQCAtMTYsMzMgKzE2LDMzIEBACiAvKiBCbG9jayBDb250cm9sIEluZm9ybWF0aW9uICovCiAKIHN0cnVjdCBpbmZ0bF9iY2kgewotCXVpbnQ4X3QgRUNDc2lnWzZdOwotCXVpbnQ4X3QgU3RhdHVzOwotCXVpbnQ4X3QgU3RhdHVzMTsKKwlfX3U4IEVDQ3NpZ1s2XTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQxIHsKLQl1aW50MTZfdCB2aXJ0dWFsVW5pdE5vOwotCXVpbnQxNl90IHByZXZVbml0Tm87Ci0JdWludDhfdCBBTkFDOwotCXVpbnQ4X3QgTkFDczsKLQl1aW50OF90IHBhcml0eVBlckZpZWxkOwotCXVpbnQ4X3QgZGlzY2FyZGVkOworCV9fdTE2IHZpcnR1YWxVbml0Tm87CisJX191MTYgcHJldlVuaXRObzsKKwlfX3U4IEFOQUM7CisJX191OCBOQUNzOworCV9fdTggcGFyaXR5UGVyRmllbGQ7CisJX191OCBkaXNjYXJkZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQyIHsKLQl1aW50OF90IHBhcml0eVBlckZpZWxkOwotCXVpbnQ4X3QgQU5BQzsKLQl1aW50MTZfdCBwcmV2VW5pdE5vOwotCXVpbnQxNl90IHZpcnR1YWxVbml0Tm87Ci0JdWludDhfdCBOQUNzOwotCXVpbnQ4X3QgZGlzY2FyZGVkOworCV9fdTggcGFyaXR5UGVyRmllbGQ7CisJX191OCBBTkFDOworCV9fdTE2IHByZXZVbml0Tm87CisJX191MTYgdmlydHVhbFVuaXRObzsKKwlfX3U4IE5BQ3M7CisJX191OCBkaXNjYXJkZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdHRhaWwgewotCXVpbnQ4X3QgUmVzZXJ2ZWRbNF07Ci0JdWludDE2X3QgRXJhc2VNYXJrOwotCXVpbnQxNl90IEVyYXNlTWFyazE7CisJX191OCBSZXNlcnZlZFs0XTsKKwlfX3UxNiBFcmFzZU1hcms7CisJX191MTYgRXJhc2VNYXJrMTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGluZnRsX3VjaSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmggYi9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmgKaW5kZXggMDAxNjg1ZC4uZmE5NGIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvamZmczItdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaApAQCAtNyw2ICs3LDcgQEAKIAogLyogVGhpcyBmaWxlIGlzIGJsZXNzZWQgZm9yIGluY2x1c2lvbiBieSB1c2Vyc3BhY2UgKi8KICNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8ZW5kaWFuLmg+CiAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KIApAQCAtMTksOCArMjAsOCBAQAogCiBleHRlcm4gaW50IHRhcmdldF9lbmRpYW47CiAKLSNkZWZpbmUgdDE2KHgpICh7IHVpbnQxNl90IF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzE2KF9fYik7IH0pCi0jZGVmaW5lIHQzMih4KSAoeyB1aW50MzJfdCBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8zMihfX2IpOyB9KQorI2RlZmluZSB0MTYoeCkgKHsgX191MTYgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMTYoX19iKTsgfSkKKyNkZWZpbmUgdDMyKHgpICh7IF9fdTMyIF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzMyKF9fYik7IH0pCiAKICNkZWZpbmUgY3B1X3RvX2plMTYoeCkgKChqaW50MTZfdCl7dDE2KHgpfSkKICNkZWZpbmUgY3B1X3RvX2plMzIoeCkgKChqaW50MzJfdCl7dDMyKHgpfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaCBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaAppbmRleCBjNmM2MWNkLi5iNjU5NWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9tdGQtYWJpLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCkBAIC01LDE0ICs1LDE2IEBACiAjaWZuZGVmIF9fTVREX0FCSV9IX18KICNkZWZpbmUgX19NVERfQUJJX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IGVyYXNlX2luZm9fdXNlciB7Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKIH07CiAKIHN0cnVjdCBtdGRfb29iX2J1ZiB7Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKIAl1bnNpZ25lZCBjaGFyIF9fdXNlciAqcHRyOwogfTsKIApAQCAtNDgsMzAgKzUwLDMwIEBACiAjZGVmaW5lIE1URF9PVFBfVVNFUgkJMgogCiBzdHJ1Y3QgbXRkX2luZm9fdXNlciB7Ci0JdWludDhfdCB0eXBlOwotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IHNpemU7CSAvLyBUb3RhbCBzaXplIG9mIHRoZSBNVEQKLQl1aW50MzJfdCBlcmFzZXNpemU7Ci0JdWludDMyX3Qgd3JpdGVzaXplOwotCXVpbnQzMl90IG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKKwlfX3U4IHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAorCV9fdTMyIGVyYXNlc2l6ZTsKKwlfX3UzMiB3cml0ZXNpemU7CisJX191MzIgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQogCS8qIFRoZSBiZWxvdyB0d28gZmllbGRzIGFyZSBvYnNvbGV0ZSBhbmQgYnJva2VuLCBkbyBub3QgdXNlIHRoZW0KIAkgKiAoVE9ETzogcmVtb3ZlIGF0IHNvbWUgcG9pbnQpICovCi0JdWludDMyX3QgZWNjdHlwZTsKLQl1aW50MzJfdCBlY2NzaXplOworCV9fdTMyIGVjY3R5cGU7CisJX191MzIgZWNjc2l6ZTsKIH07CiAKIHN0cnVjdCByZWdpb25faW5mb191c2VyIHsKLQl1aW50MzJfdCBvZmZzZXQ7CQkvKiBBdCB3aGljaCB0aGlzIHJlZ2lvbiBzdGFydHMsCisJX191MzIgb2Zmc2V0OwkJLyogQXQgd2hpY2ggdGhpcyByZWdpb24gc3RhcnRzLAogCQkJCQkgKiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE1URCAqLwotCXVpbnQzMl90IGVyYXNlc2l6ZTsJCS8qIEZvciB0aGlzIHJlZ2lvbiAqLwotCXVpbnQzMl90IG51bWJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3MgaW4gdGhpcyByZWdpb24gKi8KLQl1aW50MzJfdCByZWdpb25pbmRleDsKKwlfX3UzMiBlcmFzZXNpemU7CQkvKiBGb3IgdGhpcyByZWdpb24gKi8KKwlfX3UzMiBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoaXMgcmVnaW9uICovCisJX191MzIgcmVnaW9uaW5kZXg7CiB9OwogCiBzdHJ1Y3Qgb3RwX2luZm8gewotCXVpbnQzMl90IHN0YXJ0OwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50MzJfdCBsb2NrZWQ7CisJX191MzIgc3RhcnQ7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGxvY2tlZDsKIH07CiAKICNkZWZpbmUgTUVNR0VUSU5GTwkJX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQpAQCAtODQsOCArODYsOCBAQAogI2RlZmluZSBNRU1HRVRSRUdJT05JTkZPCV9JT1dSKCdNJywgOCwgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTVNFVE9PQlNFTAkJX0lPVygnTScsIDksIHN0cnVjdCBuYW5kX29vYmluZm8pCiAjZGVmaW5lIE1FTUdFVE9PQlNFTAkJX0lPUignTScsIDEwLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQotI2RlZmluZSBNRU1HRVRCQURCTE9DSwkJX0lPVygnTScsIDExLCBsb2ZmX3QpCi0jZGVmaW5lIE1FTVNFVEJBREJMT0NLCQlfSU9XKCdNJywgMTIsIGxvZmZfdCkKKyNkZWZpbmUgTUVNR0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMSwgX19rZXJuZWxfbG9mZl90KQorI2RlZmluZSBNRU1TRVRCQURCTE9DSwkJX0lPVygnTScsIDEyLCBfX2tlcm5lbF9sb2ZmX3QpCiAjZGVmaW5lIE9UUFNFTEVDVAkJX0lPUignTScsIDEzLCBpbnQpCiAjZGVmaW5lIE9UUEdFVFJFR0lPTkNPVU5UCV9JT1coJ00nLCAxNCwgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05JTkZPCV9JT1coJ00nLCAxNSwgc3RydWN0IG90cF9pbmZvKQpAQCAtOTksMTUgKzEwMSwxNSBAQAogICogaW50ZXJmYWNlcwogICovCiBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKLQl1aW50MzJfdCB1c2VlY2M7Ci0JdWludDMyX3QgZWNjYnl0ZXM7Ci0JdWludDMyX3Qgb29iZnJlZVs4XVsyXTsKLQl1aW50MzJfdCBlY2Nwb3NbMzJdOworCV9fdTMyIHVzZWVjYzsKKwlfX3UzMiBlY2NieXRlczsKKwlfX3UzMiBvb2JmcmVlWzhdWzJdOworCV9fdTMyIGVjY3Bvc1szMl07CiB9OwogCiBzdHJ1Y3QgbmFuZF9vb2JmcmVlIHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBsZW5ndGg7CiB9OwogCiAjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTCTgKQEAgLTExNiw5ICsxMTgsOSBAQAogICogZGlhZ25vc2lzIGFuZCB0byBhbGxvdyBjcmVhdGlvbiBvZiByYXcgaW1hZ2VzCiAgKi8KIHN0cnVjdCBuYW5kX2VjY2xheW91dCB7Ci0JdWludDMyX3QgZWNjYnl0ZXM7Ci0JdWludDMyX3QgZWNjcG9zWzY0XTsKLQl1aW50MzJfdCBvb2JhdmFpbDsKKwlfX3UzMiBlY2NieXRlczsKKwlfX3UzMiBlY2Nwb3NbNjRdOworCV9fdTMyIG9vYmF2YWlsOwogCXN0cnVjdCBuYW5kX29vYmZyZWUgb29iZnJlZVtNVERfTUFYX09PQkZSRUVfRU5UUklFU107CiB9OwogCkBAIC0xMzEsMTAgKzEzMywxMCBAQAogICogQGJidGJsb2NrczoJbnVtYmVyIG9mIGJsb2NrcyByZXNlcnZlZCBmb3IgYmFkIGJsb2NrIHRhYmxlcwogICovCiBzdHJ1Y3QgbXRkX2VjY19zdGF0cyB7Ci0JdWludDMyX3QgY29ycmVjdGVkOwotCXVpbnQzMl90IGZhaWxlZDsKLQl1aW50MzJfdCBiYWRibG9ja3M7Ci0JdWludDMyX3QgYmJ0YmxvY2tzOworCV9fdTMyIGNvcnJlY3RlZDsKKwlfX3UzMiBmYWlsZWQ7CisJX191MzIgYmFkYmxvY2tzOworCV9fdTMyIGJidGJsb2NrczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaCBiL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCmluZGV4IDM5MGQyMWMuLjk4ZTllNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCkBAIC02LDMzICs2LDM1IEBACiAjaWZuZGVmIF9fTVREX05GVExfVVNFUl9IX18KICNkZWZpbmUgX19NVERfTkZUTF9VU0VSX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQmxvY2sgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgbmZ0bF9iY2kgewogCXVuc2lnbmVkIGNoYXIgRUNDU2lnWzZdOwotCXVpbnQ4X3QgU3RhdHVzOwotCXVpbnQ4X3QgU3RhdHVzMTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7CiB9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFVuaXQgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgbmZ0bF91Y2kwIHsKLQl1aW50MTZfdCBWaXJ0VW5pdE51bTsKLQl1aW50MTZfdCBSZXBsVW5pdE51bTsKLQl1aW50MTZfdCBTcGFyZVZpcnRVbml0TnVtOwotCXVpbnQxNl90IFNwYXJlUmVwbFVuaXROdW07CisJX191MTYgVmlydFVuaXROdW07CisJX191MTYgUmVwbFVuaXROdW07CisJX191MTYgU3BhcmVWaXJ0VW5pdE51bTsKKwlfX3UxNiBTcGFyZVJlcGxVbml0TnVtOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdGxfdWNpMSB7Ci0JdWludDMyX3QgV2VhckluZm87Ci0JdWludDE2X3QgRXJhc2VNYXJrOwotCXVpbnQxNl90IEVyYXNlTWFyazE7CisJX191MzIgV2VhckluZm87CisJX191MTYgRXJhc2VNYXJrOworCV9fdTE2IEVyYXNlTWFyazE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZ0bF91Y2kyIHsKLSAgICAgICAgdWludDE2X3QgRm9sZE1hcms7Ci0gICAgICAgIHVpbnQxNl90IEZvbGRNYXJrMTsKLQl1aW50MzJfdCB1bnVzZWQ7CisgICAgICAgIF9fdTE2IEZvbGRNYXJrOworICAgICAgICBfX3UxNiBGb2xkTWFyazE7CisJX191MzIgdW51c2VkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gbmZ0bF91Y2kgewpAQCAtNTAsOSArNTIsOSBAQAogCiBzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyIHsKIAljaGFyIERhdGFPcmdJRFs2XTsKLQl1aW50MTZfdCBOdW1FcmFzZVVuaXRzOwotCXVpbnQxNl90IEZpcnN0UGh5c2ljYWxFVU47Ci0JdWludDMyX3QgRm9ybWF0dGVkU2l6ZTsKKwlfX3UxNiBOdW1FcmFzZVVuaXRzOworCV9fdTE2IEZpcnN0UGh5c2ljYWxFVU47CisJX191MzIgRm9ybWF0dGVkU2l6ZTsKIAl1bnNpZ25lZCBjaGFyIFVuaXRTaXplRmFjdG9yOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaCBiL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKaW5kZXggMjk2ZWZhZS4uNDY2YTgzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC91YmktdXNlci5oCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIF9fVUJJX1VTRVJfSF9fCiAjZGVmaW5lIF9fVUJJX1VTRVJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKgogICogVUJJIGRldmljZSBjcmVhdGlvbiAodGhlIHNhbWUgYXMgTVREIGRldmljZSBhdHRhY2htZW50KQogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTE1Miw3ICsxNTQsNyBAQAogLyogQ3JlYXRlIGFuIFVCSSB2b2x1bWUgKi8KICNkZWZpbmUgVUJJX0lPQ01LVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMCwgc3RydWN0IHViaV9ta3ZvbF9yZXEpCiAvKiBSZW1vdmUgYW4gVUJJIHZvbHVtZSAqLwotI2RlZmluZSBVQklfSU9DUk1WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAxLCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DUk1WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAxLCBfX3MzMikKIC8qIFJlLXNpemUgYW4gVUJJIHZvbHVtZSAqLwogI2RlZmluZSBVQklfSU9DUlNWT0wgX0lPVyhVQklfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSkKIC8qIFJlLW5hbWUgdm9sdW1lcyAqLwpAQCAtMTY1LDI0ICsxNjcsMjQgQEAKIC8qIEF0dGFjaCBhbiBNVEQgZGV2aWNlICovCiAjZGVmaW5lIFVCSV9JT0NBVFQgX0lPVyhVQklfQ1RSTF9JT0NfTUFHSUMsIDY0LCBzdHJ1Y3QgdWJpX2F0dGFjaF9yZXEpCiAvKiBEZXRhY2ggYW4gTVREIGRldmljZSAqLwotI2RlZmluZSBVQklfSU9DREVUIF9JT1coVUJJX0NUUkxfSU9DX01BR0lDLCA2NSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0RFVCBfSU9XKFVCSV9DVFJMX0lPQ19NQUdJQywgNjUsIF9fczMyKQogCiAvKiBpb2N0bCBjb21tYW5kcyBvZiBVQkkgdm9sdW1lIGNoYXJhY3RlciBkZXZpY2VzICovCiAKICNkZWZpbmUgVUJJX1ZPTF9JT0NfTUFHSUMgJ08nCiAKIC8qIFN0YXJ0IFVCSSB2b2x1bWUgdXBkYXRlICovCi0jZGVmaW5lIFVCSV9JT0NWT0xVUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAwLCBpbnQ2NF90KQorI2RlZmluZSBVQklfSU9DVk9MVVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMCwgX19zNjQpCiAvKiBMRUIgZXJhc3VyZSBjb21tYW5kLCB1c2VkIGZvciBkZWJ1Z2dpbmcsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCRVIgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCRVIgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMSwgX19zMzIpCiAvKiBBdG9taWMgTEVCIGNoYW5nZSBjb21tYW5kICovCi0jZGVmaW5lIFVCSV9JT0NFQkNIIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDIsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NFQkNIIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDIsIF9fczMyKQogLyogTWFwIExFQiBjb21tYW5kICovCiAjZGVmaW5lIFVCSV9JT0NFQk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAzLCBzdHJ1Y3QgdWJpX21hcF9yZXEpCiAvKiBVbm1hcCBMRUIgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJVTk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA0LCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJVTk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA0LCBfX3MzMikKIC8qIENoZWNrIGlmIExFQiBpcyBtYXBwZWQgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJJU01BUCBfSU9SKFVCSV9WT0xfSU9DX01BR0lDLCA1LCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJJU01BUCBfSU9SKFVCSV9WT0xfSU9DX01BR0lDLCA1LCBfX3MzMikKIC8qIFNldCBhbiBVQkkgdm9sdW1lIHByb3BlcnR5ICovCiAjZGVmaW5lIFVCSV9JT0NTRVRQUk9QIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDYsIHN0cnVjdCB1Ymlfc2V0X3Byb3BfcmVxKQogCkBAIC0yNjAsMTAgKzI2MiwxMCBAQAogICogc3ViLXBhZ2Ugb2YgdGhlIGZpcnN0IHBhZ2UgYW5kIGFkZCBuZWVkZWQgcGFkZGluZy4KICAqLwogc3RydWN0IHViaV9hdHRhY2hfcmVxIHsKLQlpbnQzMl90IHViaV9udW07Ci0JaW50MzJfdCBtdGRfbnVtOwotCWludDMyX3QgdmlkX2hkcl9vZmZzZXQ7Ci0JaW50OF90IHBhZGRpbmdbMTJdOworCV9fczMyIHViaV9udW07CisJX19zMzIgbXRkX251bTsKKwlfX3MzMiB2aWRfaGRyX29mZnNldDsKKwlfX3M4IHBhZGRpbmdbMTJdOwogfTsKIAogLyoqCkBAIC0yOTgsMTMgKzMwMCwxMyBAQAogICogQkxPQnMsIHdpdGhvdXQgY2FyaW5nIGFib3V0IGhvdyB0byBwcm9wZXJseSBhbGlnbiB0aGVtLgogICovCiBzdHJ1Y3QgdWJpX21rdm9sX3JlcSB7Ci0JaW50MzJfdCB2b2xfaWQ7Ci0JaW50MzJfdCBhbGlnbm1lbnQ7Ci0JaW50NjRfdCBieXRlczsKLQlpbnQ4X3Qgdm9sX3R5cGU7Ci0JaW50OF90IHBhZGRpbmcxOwotCWludDE2X3QgbmFtZV9sZW47Ci0JaW50OF90IHBhZGRpbmcyWzRdOworCV9fczMyIHZvbF9pZDsKKwlfX3MzMiBhbGlnbm1lbnQ7CisJX19zNjQgYnl0ZXM7CisJX19zOCB2b2xfdHlwZTsKKwlfX3M4IHBhZGRpbmcxOworCV9fczE2IG5hbWVfbGVuOworCV9fczggcGFkZGluZzJbNF07CiAJY2hhciBuYW1lW1VCSV9NQVhfVk9MVU1FX05BTUUgKyAxXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zMjAsOCArMzIyLDggQEAKICAqIHplcm8gbnVtYmVyIG9mIGJ5dGVzKS4KICAqLwogc3RydWN0IHViaV9yc3ZvbF9yZXEgewotCWludDY0X3QgYnl0ZXM7Ci0JaW50MzJfdCB2b2xfaWQ7CisJX19zNjQgYnl0ZXM7CisJX19zMzIgdm9sX2lkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgpAQCAtMzU2LDEyICszNTgsMTIgQEAKICAqIHJlLW5hbWUgcmVxdWVzdC4KICAqLwogc3RydWN0IHViaV9ybnZvbF9yZXEgewotCWludDMyX3QgY291bnQ7Ci0JaW50OF90IHBhZGRpbmcxWzEyXTsKKwlfX3MzMiBjb3VudDsKKwlfX3M4IHBhZGRpbmcxWzEyXTsKIAlzdHJ1Y3QgewotCQlpbnQzMl90IHZvbF9pZDsKLQkJaW50MTZfdCBuYW1lX2xlbjsKLQkJaW50OF90ICBwYWRkaW5nMlsyXTsKKwkJX19zMzIgdm9sX2lkOworCQlfX3MxNiBuYW1lX2xlbjsKKwkJX19zOCAgcGFkZGluZzJbMl07CiAJCWNoYXIgICAgbmFtZVtVQklfTUFYX1ZPTFVNRV9OQU1FICsgMV07CiAJfSBlbnRzW1VCSV9NQVhfUk5WT0xdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0zNzUsMTAgKzM3NywxMCBAQAogICogQHBhZGRpbmc6IHJlc2VydmVkIGZvciBmdXR1cmUsIG5vdCB1c2VkLCBoYXMgdG8gYmUgemVyb2VkCiAgKi8KIHN0cnVjdCB1YmlfbGViX2NoYW5nZV9yZXEgewotCWludDMyX3QgbG51bTsKLQlpbnQzMl90IGJ5dGVzOwotCWludDhfdCAgZHR5cGU7Ci0JaW50OF90ICBwYWRkaW5nWzddOworCV9fczMyIGxudW07CisJX19zMzIgYnl0ZXM7CisJX19zOCAgZHR5cGU7CisJX19zOCAgcGFkZGluZ1s3XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKQEAgLTM4OCw5ICszOTAsOSBAQAogICogQHBhZGRpbmc6IHJlc2VydmVkIGZvciBmdXR1cmUsIG5vdCB1c2VkLCBoYXMgdG8gYmUgemVyb2VkCiAgKi8KIHN0cnVjdCB1YmlfbWFwX3JlcSB7Ci0JaW50MzJfdCBsbnVtOwotCWludDhfdCAgZHR5cGU7Ci0JaW50OF90ICBwYWRkaW5nWzNdOworCV9fczMyIGxudW07CisJX19zOCAgZHR5cGU7CisJX19zOCAgcGFkZGluZ1szXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKQEAgLTQwMiw5ICs0MDQsOSBAQAogICogQHZhbHVlOiB2YWx1ZSB0byBzZXQKICAqLwogc3RydWN0IHViaV9zZXRfcHJvcF9yZXEgewotICAgICAgIHVpbnQ4X3QgIHByb3BlcnR5OwotICAgICAgIHVpbnQ4X3QgIHBhZGRpbmdbN107Ci0gICAgICAgdWludDY0X3QgdmFsdWU7CisgICAgICAgX191OCAgcHJvcGVydHk7CisgICAgICAgX191OCAgcGFkZGluZ1s3XTsKKyAgICAgICBfX3U2NCB2YWx1ZTsKIH0gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2VuZGlmIC8qIF9fVUJJX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCBjMjE2ZGU1Li43YjU1YWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTg4LDggKzg4LDggQEAKIGV4dGVybiBpbnQJCQlpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkJCXVuc2lnbmVkIGNoYXIgYmFubmVkX2ZsYWdzKTsKLWV4dGVybiBpbnQJCQlpcHY2X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIAotCQkJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrMik7CitleHRlcm4gaW50IAkJCWlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfam9pbl9zb2xpY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfbGVhdmVfc29saWN0KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hdG1jbGlwLmggYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKaW5kZXggYjVhNTFhNy4uNDY3YzUzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCisrKyBiL2luY2x1ZGUvbmV0L2F0bWNsaXAuaApAQCAtNTAsNyArNTAsNiBAQAogc3RydWN0IGNsaXBfcHJpdiB7CiAJaW50IG51bWJlcjsJCQkvKiBmb3IgY29udmVuaWVuY2UgLi4uICovCiAJc3BpbmxvY2tfdCB4b2ZmX2xvY2s7CQkvKiBlbnN1cmVzIHRoYXQgcG9wIGlzIGF0b21pYyAoU01QKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXh0OwkvKiBuZXh0IENMSVAgaW50ZXJmYWNlICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9heDg4Nzk2LmggYi9pbmNsdWRlL25ldC9heDg4Nzk2LmgKaW5kZXggNTEzMjlkYS4uYjlhM2JlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2F4ODg3OTYuaApAQCAtMTUsMTQgKzE1LDE3IEBACiAjZGVmaW5lIEFYRkxHX0hBU19FRVBST00JCSgxPDwwKQogI2RlZmluZSBBWEZMR19NQUNfRlJPTURFVgkJKDE8PDEpCS8qIGRldmljZSBhbHJlYWR5IGhhcyBNQUMgKi8KICNkZWZpbmUgQVhGTEdfSEFTXzkzQ1g2CQkJKDE8PDIpCS8qIHVzZSBlZXByb21fOTNjeDYgZHJpdmVyICovCisjZGVmaW5lIEFYRkxHX01BQ19GUk9NUExBVEZPUk0JCSgxPDwzKQkvKiBNQUMgZ2l2ZW4gYnkgcGxhdGZvcm0gZGF0YSAqLwogCiBzdHJ1Y3QgYXhfcGxhdF9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIJIHdvcmRsZW5ndGg7CQkvKiAxIG9yIDIgKi8KLQl1bnNpZ25lZCBjaGFyCSBkY3JfdmFsOwkJLyogZGVmYXVsdCB2YWx1ZSBmb3IgRENSICovCi0JdW5zaWduZWQgY2hhcgkgcmNyX3ZhbDsJCS8qIGRlZmF1bHQgdmFsdWUgZm9yIFJDUiAqLwotCXVuc2lnbmVkIGNoYXIJIGdwb2NfdmFsOwkJLyogZGVmYXVsdCB2YWx1ZSBmb3IgR1BPQyAqLwotCXUzMgkJKnJlZ19vZmZzZXRzOwkJLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLworCXVuc2lnbmVkIGNoYXIJIHdvcmRsZW5ndGg7CS8qIDEgb3IgMiAqLworCXVuc2lnbmVkIGNoYXIJIGRjcl92YWw7CS8qIGRlZmF1bHQgdmFsdWUgZm9yIERDUiAqLworCXVuc2lnbmVkIGNoYXIJIHJjcl92YWw7CS8qIGRlZmF1bHQgdmFsdWUgZm9yIFJDUiAqLworCXVuc2lnbmVkIGNoYXIJIGdwb2NfdmFsOwkvKiBkZWZhdWx0IHZhbHVlIGZvciBHUE9DICovCisJdTMyCQkqcmVnX29mZnNldHM7CS8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KKwl1OAkJKm1hY19hZGRyOwkvKiBNQUMgYWRkciAob25seSB1c2VkIHdoZW4KKwkJCQkJICAgQVhGTEdfTUFDX0ZST01QTEFURk9STSBpcyB1c2VkICovCiB9OwogCiAjZW5kaWYgLyogX19ORVRfQVg4ODc5Nl9QTEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAppbmRleCBhMDRmODQ2Li4zYWQ1MzkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCkBAIC01Myw2ICs1MywxNyBAQAogI2RlZmluZSBTT0xfU0NPCQkxNwogI2RlZmluZSBTT0xfUkZDT01NCTE4CiAKKyNkZWZpbmUgQlRfU0VDVVJJVFkJNAorc3RydWN0IGJ0X3NlY3VyaXR5IHsKKwlfX3U4IGxldmVsOworfTsKKyNkZWZpbmUgQlRfU0VDVVJJVFlfU0RQCQkwCisjZGVmaW5lIEJUX1NFQ1VSSVRZX0xPVwkJMQorI2RlZmluZSBCVF9TRUNVUklUWV9NRURJVU0JMgorI2RlZmluZSBCVF9TRUNVUklUWV9ISUdICTMKKworI2RlZmluZSBCVF9ERUZFUl9TRVRVUAk3CisKICNkZWZpbmUgQlRfSU5GTyhmbXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiQmx1ZXRvb3RoOiAiIGZtdCAiXG4iICwgIyMgYXJnKQogI2RlZmluZSBCVF9FUlIoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCAiXG4iICwgX19mdW5jX18gLCAjIyBhcmcpCiAjZGVmaW5lIEJUX0RCRyhmbXQsIGFyZy4uLikgIHByX2RlYnVnKCIlczogIiBmbXQgIlxuIiAsIF9fZnVuY19fICwgIyMgYXJnKQpAQCAtMTA4LDYgKzExOSw3IEBACiAJYmRhZGRyX3QgICAgZHN0OwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3E7CiAJc3RydWN0IHNvY2sgKnBhcmVudDsKKwl1MzIgZGVmZXJfc2V0dXA7CiB9OwogCiBzdHJ1Y3QgYnRfc29ja19saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAppbmRleCAzNjQ1MTM5Li5mNjlmMDE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCkBAIC0xMzMsOCArMTMzLDEzIEBACiAjZGVmaW5lIEVTQ09fRVYzCTB4MDAwOAogI2RlZmluZSBFU0NPX0VWNAkweDAwMTAKICNkZWZpbmUgRVNDT19FVjUJMHgwMDIwCisjZGVmaW5lIEVTQ09fMkVWMwkweDAwNDAKKyNkZWZpbmUgRVNDT18zRVYzCTB4MDA4MAorI2RlZmluZSBFU0NPXzJFVjUJMHgwMTAwCisjZGVmaW5lIEVTQ09fM0VWNQkweDAyMDAKIAogI2RlZmluZSBTQ09fRVNDT19NQVNLICAoRVNDT19IVjEgfCBFU0NPX0hWMiB8IEVTQ09fSFYzKQorI2RlZmluZSBFRFJfRVNDT19NQVNLICAoRVNDT18yRVYzIHwgRVNDT18zRVYzIHwgRVNDT18yRVY1IHwgRVNDT18zRVY1KQogCiAvKiBBQ0wgZmxhZ3MgKi8KICNkZWZpbmUgQUNMX0NPTlQJCTB4MDEKQEAgLTE3Niw2ICsxODEsOSBAQAogI2RlZmluZSBMTVBfRVY1CQkweDAyCiAKICNkZWZpbmUgTE1QX1NOSUZGX1NVQlIJMHgwMgorI2RlZmluZSBMTVBfRURSX0VTQ09fMk0JMHgyMAorI2RlZmluZSBMTVBfRURSX0VTQ09fM00JMHg0MAorI2RlZmluZSBMTVBfRURSXzNTX0VTQ08JMHg4MAogCiAjZGVmaW5lIExNUF9TSU1QTEVfUEFJUgkweDA4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggNDZhNDNiNy4uMDFmOTMxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTE2OSw2ICsxNjksNyBAQAogCV9fdTE2ICAgICAgICAgICAgbGlua19wb2xpY3k7CiAJX191MzIJCSBsaW5rX21vZGU7CiAJX191OCAgICAgICAgICAgICBhdXRoX3R5cGU7CisJX191OCAgICAgICAgICAgICBzZWNfbGV2ZWw7CiAJX191OCAgICAgICAgICAgICBwb3dlcl9zYXZlOwogCXVuc2lnbmVkIGxvbmcJIHBlbmQ7CiAKQEAgLTMyNSwxMiArMzI2LDExIEBACiB2b2lkIGhjaV9jb25uX2hhc2hfZmx1c2goc3RydWN0IGhjaV9kZXYgKmhkZXYpOwogdm9pZCBoY2lfY29ubl9jaGVja19wZW5kaW5nKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIAotc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggYXV0aF90eXBlKTsKK3N0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5lY3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0LCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpOwogaW50IGhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwotaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uKTsKLWludCBoY2lfY29ubl9lbmNyeXB0KHN0cnVjdCBoY2lfY29ubiAqY29ubik7CitpbnQgaGNpX2Nvbm5fc2VjdXJpdHkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpOwogaW50IGhjaV9jb25uX2NoYW5nZV9saW5rX2tleShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwotaW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdWludDhfdCByb2xlKTsKK2ludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSk7CiAKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfc25pZmZfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwpAQCAtNDcwLDI2ICs0NzAsMjYgQEAKIAogLyogLS0tLS0gSENJIHByb3RvY29scyAtLS0tLSAqLwogc3RydWN0IGhjaV9wcm90byB7Ci0JY2hhciAJCSpuYW1lOworCWNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGludAlpZDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJdm9pZAkJKnByaXY7CiAKLQlpbnQgKCpjb25uZWN0X2luZCkgCShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKTsKKwlpbnQgKCpjb25uZWN0X2luZCkJKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpOwogCWludCAoKmNvbm5lY3RfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7Ci0JaW50ICgqZGlzY29ubl9pbmQpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKKwlpbnQgKCpkaXNjb25uX2luZCkJKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CisJaW50ICgqZGlzY29ubl9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKIAlpbnQgKCpyZWN2X2FjbGRhdGEpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKTsKIAlpbnQgKCpyZWN2X3Njb2RhdGEpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpOwotCWludCAoKmF1dGhfY2ZtKQkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCWludCAoKmVuY3J5cHRfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKKwlpbnQgKCpzZWN1cml0eV9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgaGNpX3Byb3RvX2Nvbm5lY3RfaW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAJaW50IG1hc2sgPSAwOwotCQorCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKIAlpZiAoaHAgJiYgaHAtPmNvbm5lY3RfaW5kKQogCQltYXNrIHw9IGhwLT5jb25uZWN0X2luZChoZGV2LCBiZGFkZHIsIHR5cGUpOwpAQCAtNTE0LDMwICs1MTQsNTIgQEAKIAkJaHAtPmNvbm5lY3RfY2ZtKGNvbm4sIHN0YXR1cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbikKK3N0YXRpYyBpbmxpbmUgaW50IGhjaV9wcm90b19kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CisJaW50IHJlYXNvbiA9IDB4MTM7CisKKwlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCisJCXJlYXNvbiA9IGhwLT5kaXNjb25uX2luZChjb25uKTsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCisJCXJlYXNvbiA9IGhwLT5kaXNjb25uX2luZChjb25uKTsKKworCXJldHVybiByZWFzb247Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZGlzY29ubl9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbikKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKLQkJaHAtPmRpc2Nvbm5faW5kKGNvbm4sIHJlYXNvbik7CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2NmbSkKKwkJaHAtPmRpc2Nvbm5fY2ZtKGNvbm4sIHJlYXNvbik7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKLQlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQotCQlocC0+ZGlzY29ubl9pbmQoY29ubiwgcmVhc29uKTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5fY2ZtKQorCQlocC0+ZGlzY29ubl9jZm0oY29ubiwgcmVhc29uKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKQogewogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOworCV9fdTggZW5jcnlwdDsKKworCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKKwkJcmV0dXJuOworCisJZW5jcnlwdCA9IChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgPyAweDAxIDogMHgwMDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5hdXRoX2NmbSkKLQkJaHAtPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOwotCWlmIChocCAmJiBocC0+YXV0aF9jZm0pCi0JCWhwLT5hdXRoX2NmbShjb25uLCBzdGF0dXMpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KQpAQCAtNTQ1LDEyICs1NjcsMTIgQEAKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5lbmNyeXB0X2NmbSkKLQkJaHAtPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOwotCWlmIChocCAmJiBocC0+ZW5jcnlwdF9jZm0pCi0JCWhwLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiB9CiAKIGludCBoY2lfcmVnaXN0ZXJfcHJvdG8oc3RydWN0IGhjaV9wcm90byAqaHByb3RvKTsKQEAgLTU2Miw4ICs1ODQsNyBAQAogCiAJY2hhciAqbmFtZTsKIAotCXZvaWQgKCphdXRoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCXZvaWQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CisJdm9pZCAoKnNlY3VyaXR5X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CiAJdm9pZCAoKmtleV9jaGFuZ2VfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7CiAJdm9pZCAoKnJvbGVfc3dpdGNoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggcm9sZSk7CiB9OwpAQCAtNTcxLDE0ICs1OTIsMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCV9fdTggZW5jcnlwdDsKIAogCWhjaV9wcm90b19hdXRoX2NmbShjb25uLCBzdGF0dXMpOwogCisJaWYgKHRlc3RfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQorCQlyZXR1cm47CisKKwllbmNyeXB0ID0gKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKSA/IDB4MDEgOiAweDAwOworCiAJcmVhZF9sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZoY2lfY2JfbGlzdCkgewogCQlzdHJ1Y3QgaGNpX2NiICpjYiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jYiwgbGlzdCk7Ci0JCWlmIChjYi0+YXV0aF9jZm0pCi0JCQljYi0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKKwkJaWYgKGNiLT5zZWN1cml0eV9jZm0pCisJCQljYi0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAJfQogCXJlYWRfdW5sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIH0KQEAgLTU4NywxMyArNjE0LDE2IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAorCWlmIChjb25uLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQorCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKIAloY2lfcHJvdG9fZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCXJlYWRfbG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGNpX2NiX2xpc3QpIHsKIAkJc3RydWN0IGhjaV9jYiAqY2IgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoY2lfY2IsIGxpc3QpOwotCQlpZiAoY2ItPmVuY3J5cHRfY2ZtKQotCQkJY2ItPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CisJCWlmIChjYi0+c2VjdXJpdHlfY2ZtKQorCQkJY2ItPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCX0KIAlyZWFkX3VubG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCmluZGV4IDczZTExNWIuLmY1NjZhYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCkBAIC0zNyw2ICszNyw3IEBACiAJc2FfZmFtaWx5X3QJbDJfZmFtaWx5OwogCV9fbGUxNgkJbDJfcHNtOwogCWJkYWRkcl90CWwyX2JkYWRkcjsKKwlfX2xlMTYJCWwyX2NpZDsKIH07CiAKIC8qIEwyQ0FQIHNvY2tldCBvcHRpb25zICovCkBAIC0xODUsNiArMTg2LDcgQEAKIC8qIGluZm8gdHlwZSAqLwogI2RlZmluZSBMMkNBUF9JVF9DTF9NVFUgICAgIDB4MDAwMQogI2RlZmluZSBMMkNBUF9JVF9GRUFUX01BU0sgIDB4MDAwMgorI2RlZmluZSBMMkNBUF9JVF9GSVhFRF9DSEFOIDB4MDAwMwogCiAvKiBpbmZvIHJlc3VsdCAqLwogI2RlZmluZSBMMkNBUF9JUl9TVUNDRVNTICAgIDB4MDAwMApAQCAtMjE5LDExICsyMjEsMTQgQEAKIAlfX3U4CQlyeF9pZGVudDsKIAlfX3U4CQl0eF9pZGVudDsKIAorCV9fdTgJCWRpc2NfcmVhc29uOworCiAJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCBjaGFuX2xpc3Q7CiB9OwogCiAjZGVmaW5lIEwyQ0FQX0lORk9fQ0xfTVRVX1JFUV9TRU5UCTB4MDEKLSNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQJMHgwMgorI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVAkweDA0CisjZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FCTB4MDgKIAogLyogLS0tLS0gTDJDQVAgY2hhbm5lbCBhbmQgc29ja2V0IGluZm8gLS0tLS0gKi8KICNkZWZpbmUgbDJjYXBfcGkoc2spICgoc3RydWN0IGwyY2FwX3BpbmZvICopIHNrKQpAQCAtMjM3LDggKzI0Miw5IEBACiAJX191MTYJCWltdHU7CiAJX191MTYJCW9tdHU7CiAJX191MTYJCWZsdXNoX3RvOwotCi0JX191MzIJCWxpbmtfbW9kZTsKKwlfX3U4ICAgICAgICAgICAgc2VjX2xldmVsOworCV9fdTgJCXJvbGVfc3dpdGNoOworCV9fdTggICAgICAgICAgICBmb3JjZV9yZWxpYWJsZTsKIAogCV9fdTgJCWNvbmZfcmVxWzY0XTsKIAlfX3U4CQljb25mX2xlbjsKQEAgLTI1Nyw2ICsyNjMsNyBAQAogI2RlZmluZSBMMkNBUF9DT05GX1JFUV9TRU5UCTB4MDEKICNkZWZpbmUgTDJDQVBfQ09ORl9JTlBVVF9ET05FCTB4MDIKICNkZWZpbmUgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORQkweDA0CisjZGVmaW5lIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5ECTB4ODAKIAogI2RlZmluZSBMMkNBUF9DT05GX01BWF9SRVRSSUVTCTIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCmluZGV4IDRkYzhkOTIuLjgwMDcyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKQEAgLTE4Myw4ICsxODMsOSBAQAogCXU4ICAgICAgICAgICAgcmVtb3RlX3YyNF9zaWc7CiAJdTggICAgICAgICAgICBtc2NleDsKIAl1OCAgICAgICAgICAgIG91dDsKLQotCXUzMiAgICAgICAgICAgbGlua19tb2RlOworCXU4ICAgICAgICAgICAgc2VjX2xldmVsOworCXU4ICAgICAgICAgICAgcm9sZV9zd2l0Y2g7CisJdTMyICAgICAgICAgICBkZWZlcl9zZXR1cDsKIAogCXVpbnQgICAgICAgICAgbXR1OwogCXVpbnQgICAgICAgICAgY2ZjOwpAQCAtMjAyLDEwICsyMDMsMTIgQEAKICNkZWZpbmUgUkZDT01NX1JYX1RIUk9UVExFRCAwCiAjZGVmaW5lIFJGQ09NTV9UWF9USFJPVFRMRUQgMQogI2RlZmluZSBSRkNPTU1fVElNRURfT1VUICAgIDIKLSNkZWZpbmUgUkZDT01NX01TQ19QRU5ESU5HICAzIAotI2RlZmluZSBSRkNPTU1fQVVUSF9QRU5ESU5HIDQKLSNkZWZpbmUgUkZDT01NX0FVVEhfQUNDRVBUICA1Ci0jZGVmaW5lIFJGQ09NTV9BVVRIX1JFSkVDVCAgNgorI2RlZmluZSBSRkNPTU1fTVNDX1BFTkRJTkcgIDMKKyNkZWZpbmUgUkZDT01NX1NFQ19QRU5ESU5HICA0CisjZGVmaW5lIFJGQ09NTV9BVVRIX1BFTkRJTkcgNQorI2RlZmluZSBSRkNPTU1fQVVUSF9BQ0NFUFQgIDYKKyNkZWZpbmUgUkZDT01NX0FVVEhfUkVKRUNUICA3CisjZGVmaW5lIFJGQ09NTV9ERUZFUl9TRVRVUCAgOAogCiAvKiBTY2hlZHVsaW5nIGZsYWdzIGFuZCBldmVudHMgKi8KICNkZWZpbmUgUkZDT01NX1NDSEVEX1NUQVRFICAwCkBAIC0yMzksNiArMjQyLDcgQEAKIGludCAgcmZjb21tX2RsY19zZW5kKHN0cnVjdCByZmNvbW1fZGxjICpkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCAgcmZjb21tX2RsY19zZXRfbW9kZW1fc3RhdHVzKHN0cnVjdCByZmNvbW1fZGxjICpkLCB1OCB2MjRfc2lnKTsKIGludCAgcmZjb21tX2RsY19nZXRfbW9kZW1fc3RhdHVzKHN0cnVjdCByZmNvbW1fZGxjICpkLCB1OCAqdjI0X3NpZyk7Cit2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKTsKIAogI2RlZmluZSByZmNvbW1fZGxjX2xvY2soZCkgICAgIHNwaW5fbG9jaygmZC0+bG9jaykKICNkZWZpbmUgcmZjb21tX2RsY191bmxvY2soZCkgICBzcGluX3VubG9jaygmZC0+bG9jaykKQEAgLTMwNCw3ICszMDgsOCBAQAogCXN0cnVjdCBidF9zb2NrIGJ0OwogCXN0cnVjdCByZmNvbW1fZGxjICAgKmRsYzsKIAl1OCAgICAgY2hhbm5lbDsKLQl1MzIgICAgbGlua19tb2RlOworCXU4ICAgICBzZWNfbGV2ZWw7CisJdTggICAgIHJvbGVfc3dpdGNoOwogfTsKIAogaW50ICByZmNvbW1faW5pdF9zb2NrZXRzKHZvaWQpOwpAQCAtMzMzLDcgKzMzOCw2IEBACiAJYmRhZGRyX3Qgc3JjOwogCWJkYWRkcl90IGRzdDsKIAl1OCAgICAgICBjaGFubmVsOwotCQogfTsKIAogc3RydWN0IHJmY29tbV9kZXZfaW5mbyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCAyM2MwYWI3Li41MGYzZmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTQsNiArNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogLyogcmVtb3ZlIG9uY2Ugd2UgcmVtb3ZlIHRoZSB3ZXh0IHN0dWZmICovCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KQEAgLTExMiwxMiArMTE2LDE0IEBACiAgKiBAU1RBVElPTl9GTEFHX1NIT1JUX1BSRUFNQkxFOiBzdGF0aW9uIGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGZyYW1lcwogICoJd2l0aCBzaG9ydCBwcmVhbWJsZXMKICAqIEBTVEFUSU9OX0ZMQUdfV01FOiBzdGF0aW9uIGlzIFdNRS9Rb1MgY2FwYWJsZQorICogQFNUQVRJT05fRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KICAqLwogZW51bSBzdGF0aW9uX2ZsYWdzIHsKIAlTVEFUSU9OX0ZMQUdfQ0hBTkdFRAkJPSAxPDwwLAogCVNUQVRJT05fRkxBR19BVVRIT1JJWkVECQk9IDE8PE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCwKIAlTVEFUSU9OX0ZMQUdfU0hPUlRfUFJFQU1CTEUJPSAxPDxOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFLAogCVNUQVRJT05fRkxBR19XTUUJCT0gMTw8Tkw4MDIxMV9TVEFfRkxBR19XTUUsCisJU1RBVElPTl9GTEFHX01GUAkJPSAxPDxOTDgwMjExX1NUQV9GTEFHX01GUCwKIH07CiAKIC8qKgpAQCAtMTcyLDYgKzE3OCw4IEBACiAgKiBAU1RBVElPTl9JTkZPX1NJR05BTDogQHNpZ25hbCBmaWxsZWQKICAqIEBTVEFUSU9OX0lORk9fVFhfQklUUkFURTogQHR4X2JpdHJhdGUgZmllbGRzIGFyZSBmaWxsZWQKICAqICAodHhfYml0cmF0ZSwgdHhfYml0cmF0ZV9mbGFncyBhbmQgdHhfYml0cmF0ZV9tY3MpCisgKiBAU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFM6IEByeF9wYWNrZXRzIGZpbGxlZAorICogQFNUQVRJT05fSU5GT19UWF9QQUNLRVRTOiBAdHhfcGFja2V0cyBmaWxsZWQKICAqLwogZW51bSBzdGF0aW9uX2luZm9fZmxhZ3MgewogCVNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FCT0gMTw8MCwKQEAgLTE4Miw2ICsxOTAsOCBAQAogCVNUQVRJT05fSU5GT19QTElOS19TVEFURQk9IDE8PDUsCiAJU1RBVElPTl9JTkZPX1NJR05BTAkJPSAxPDw2LAogCVNUQVRJT05fSU5GT19UWF9CSVRSQVRFCQk9IDE8PDcsCisJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMJCT0gMTw8OCwKKwlTVEFUSU9OX0lORk9fVFhfUEFDS0VUUwkJPSAxPDw5LAogfTsKIAogLyoqCkBAIC0yMjksNiArMjM5LDggQEAKICAqIEBwbGlua19zdGF0ZTogbWVzaCBwZWVyIGxpbmsgc3RhdGUKICAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldCBpbiBkQm0KICAqIEB0eHJhdGU6IGN1cnJlbnQgdW5pY2FzdCBiaXRyYXRlIHRvIHRoaXMgc3RhdGlvbgorICogQHJ4X3BhY2tldHM6IHBhY2tldHMgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KKyAqIEB0eF9wYWNrZXRzOiBwYWNrZXRzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgogICovCiBzdHJ1Y3Qgc3RhdGlvbl9pbmZvIHsKIAl1MzIgZmlsbGVkOwpAQCAtMjQwLDYgKzI1Miw4IEBACiAJdTggcGxpbmtfc3RhdGU7CiAJczggc2lnbmFsOwogCXN0cnVjdCByYXRlX2luZm8gdHhyYXRlOworCXUzMiByeF9wYWNrZXRzOworCXUzMiB0eF9wYWNrZXRzOwogfTsKIAogLyoqCkBAIC0zMzUsMjQgKzM0OSw1MCBAQAogfTsKIAogLyoqCi0gKiBlbnVtIHJlZ19zZXRfYnkgLSBJbmRpY2F0ZXMgd2hvIGlzIHRyeWluZyB0byBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAUkVHRE9NX1NFVF9CWV9JTklUOiByZWd1bGF0b3J5IGRvbWFpbiB3YXMgc2V0IGJ5IGluaXRpYWxpemF0aW9uLiBXZSB3aWxsIGJlCi0gKiAJdXNpbmcgYSBzdGF0aWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4gYnkgZGVmYXVsdC4KLSAqIEBSRUdET01fU0VUX0JZX0NPUkU6IENvcmUgcXVlcmllZCBDUkRBIGZvciBhIGR5bmFtaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4uCi0gKiBAUkVHRE9NX1NFVF9CWV9VU0VSOiBVc2VyIGFza2VkIHRoZSB3aXJlbGVzcyBjb3JlIHRvIHNldCB0aGUKLSAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KLSAqIEBSRUdET01fU0VUX0JZX0RSSVZFUjogYSB3aXJlbGVzcyBkcml2ZXJzIGhhcyBoaW50ZWQgdG8gdGhlIHdpcmVsZXNzIGNvcmUKLSAqCWl0IHRoaW5rcyBpdHMga25vd3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHdlIHNob3VsZCBiZSBpbi4KLSAqIEBSRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbiA4MDIuMTEgY291bnRyeQotICoJaW5mb3JtYXRpb24gZWxlbWVudCB3aXRoIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gaXQgdGhpbmtzIHdlCi0gKglzaG91bGQgY29uc2lkZXIuCisgKiBlbnVtIGVudmlyb25tZW50X2NhcCAtIEVudmlyb25tZW50IHBhcnNlZCBmcm9tIGNvdW50cnkgSUUKKyAqIEBFTlZJUk9OX0FOWTogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyB0byBib3RoIGluZG9vciBhbmQKKyAqCW91dGRvb3Igb3BlcmF0aW9uLgorICogQEVOVklST05fSU5ET09SOiBpbmRpY2F0ZXMgY291bnRyeSBJRSBhcHBsaWVzIG9ubHkgdG8gaW5kb29yIG9wZXJhdGlvbgorICogQEVOVklST05fT1VURE9PUjogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyBvbmx5IHRvIG91dGRvb3Igb3BlcmF0aW9uCiAgKi8KLWVudW0gcmVnX3NldF9ieSB7Ci0JUkVHRE9NX1NFVF9CWV9JTklULAotCVJFR0RPTV9TRVRfQllfQ09SRSwKLQlSRUdET01fU0VUX0JZX1VTRVIsCi0JUkVHRE9NX1NFVF9CWV9EUklWRVIsCi0JUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAorZW51bSBlbnZpcm9ubWVudF9jYXAgeworCUVOVklST05fQU5ZLAorCUVOVklST05fSU5ET09SLAorCUVOVklST05fT1VURE9PUiwKK307CisKKy8qKgorICogc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAtIHVzZWQgdG8ga2VlcCB0cmFjayBvZiByZWd1bGF0b3J5IHJlcXVlc3RzCisgKgorICogQHdpcGh5X2lkeDogdGhpcyBpcyBzZXQgaWYgdGhpcyByZXF1ZXN0J3MgaW5pdGlhdG9yIGlzCisgKiAJJVJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSBvciAlUkVHRE9NX1NFVF9CWV9EUklWRVIuIFRoaXMKKyAqIAljYW4gYmUgdXNlZCBieSB0aGUgd2lyZWxlc3MgY29yZSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisgKiAJYW5kIHBvdGVudGlhbGx5IGluZm9ybSB1c2VycyBvZiB3aGljaCBkZXZpY2VzIHNwZWNpZmljYWxseQorICogCWNhc2VkIHRoZSBjb25mbGljdHMuCisgKiBAaW5pdGlhdG9yOiBpbmRpY2F0ZXMgd2hvIHNlbnQgdGhpcyByZXF1ZXN0LCBjb3VsZCBiZSBhbnkgb2YKKyAqIAlvZiB0aG9zZSBzZXQgaW4gbmw4MDIxMV9yZWdfaW5pdGlhdG9yICglTkw4MDIxMV9SRUdET01fU0VUX0JZXyopCisgKiBAYWxwaGEyOiB0aGUgSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBvZiB0aGUgcmVxdWVzdGVkCisgKiAJcmVndWxhdG9yeSBkb21haW4uIFdlIGhhdmUgYSBmZXcgc3BlY2lhbCBjb2RlczoKKyAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJOTkgLSBidWlsdCBieSBkcml2ZXIgYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCisgKiAJOTggLSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICogQGludGVyc2VjdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdpcmVsZXNzIGNvcmUgc2hvdWxkIGludGVyc2VjdAorICogCXRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gd2l0aCB0aGUgcHJlc2VudGx5IHNldCByZWd1bGF0b3J5CisgKiAJZG9tYWluLgorICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQKKyAqIAljb3VudHJ5IElFCisgKiBAY291bnRyeV9pZV9lbnY6IGxldHMgdXMga25vdyBpZiB0aGUgQVAgaXMgdGVsbGluZyB1cyB3ZSBhcmUgb3V0ZG9vciwKKyAqIAlpbmRvb3IsIG9yIGlmIGl0IGRvZXNuJ3QgbWF0dGVyCisgKiBAbGlzdDogdXNlZCB0byBpbnNlcnQgaW50byB0aGUgcmVnX3JlcXVlc3RzX2xpc3QgbGlua2VkIGxpc3QKKyAqLworc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCB7CisJaW50IHdpcGh5X2lkeDsKKwllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3I7CisJY2hhciBhbHBoYTJbMl07CisJYm9vbCBpbnRlcnNlY3Q7CisJdTMyIGNvdW50cnlfaWVfY2hlY2tzdW07CisJZW51bSBlbnZpcm9ubWVudF9jYXAgY291bnRyeV9pZV9lbnY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAogc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlIHsKQEAgLTQzMSw2ICs0NzEsMjYgQEAKIAl1OCBhaWZzOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgbWdtdF9leHRyYV9pZV9wYXJhbXMgLSBFeHRyYSBtYW5hZ2VtZW50IGZyYW1lIElFIHBhcmFtZXRlcnMKKyAqCisgKiBVc2VkIHRvIGFkZCBleHRyYSBJRShzKSBpbnRvIG1hbmFnZW1lbnQgZnJhbWVzLiBJZiB0aGUgZHJpdmVyIGNhbm5vdCBhZGQgdGhlCisgKiByZXF1ZXN0ZWQgZGF0YSBpbnRvIGFsbCBtYW5hZ2VtZW50IGZyYW1lcyBvZiB0aGUgc3BlY2lmaWVkIHN1YnR5cGUgdGhhdCBhcmUKKyAqIGdlbmVyYXRlZCBpbiBrZXJuZWwgb3IgZmlybXdhcmUvaGFyZHdhcmUsIGl0IG11c3QgcmVqZWN0IHRoZSBjb25maWd1cmF0aW9uCisgKiBjYWxsLiBUaGUgSUUgZGF0YSBidWZmZXIgaXMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3BlY2lmaWVkIG1hbmFnZW1lbnQKKyAqIGZyYW1lIGJvZHkgYWZ0ZXIgYWxsIG90aGVyIElFcy4gVGhpcyBhZGRpdGlvbiBpcyBub3QgYXBwbGllZCB0byBmcmFtZXMgdGhhdAorICogYXJlIGluamVjdGVkIHRocm91Z2ggYSBtb25pdG9yIGludGVyZmFjZS4KKyAqCisgKiBAc3VidHlwZTogTWFuYWdlbWVudCBmcmFtZSBzdWJ0eXBlCisgKiBAaWVzOiBJRSBkYXRhIGJ1ZmZlciBvciAlTlVMTCB0byByZW1vdmUgcHJldmlvdXMgZGF0YQorICogQGllc19sZW46IExlbmd0aCBvZiBAaWVzIGluIG9jdGV0cworICovCitzdHJ1Y3QgbWdtdF9leHRyYV9pZV9wYXJhbXMgeworCXU4IHN1YnR5cGU7CisJdTggKmllczsKKwlpbnQgaWVzX2xlbjsKK307CisKIC8qIGZyb20gbmV0L3dpcmVsZXNzLmggKi8KIHN0cnVjdCB3aXBoeTsKIApAQCAtNDM4LDYgKzQ5OCw4NyBAQAogc3RydWN0IGllZWU4MDIxMV9jaGFubmVsOwogCiAvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9zc2lkIC0gU1NJRCBkZXNjcmlwdGlvbgorICogQHNzaWQ6IHRoZSBTU0lECisgKiBAc3NpZF9sZW46IGxlbmd0aCBvZiB0aGUgc3NpZAorICovCitzdHJ1Y3QgY2ZnODAyMTFfc3NpZCB7CisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAtIHNjYW4gcmVxdWVzdCBkZXNjcmlwdGlvbgorICoKKyAqIEBzc2lkczogU1NJRHMgdG8gc2NhbiBmb3IgKGFjdGl2ZSBzY2FuIG9ubHkpCisgKiBAbl9zc2lkczogbnVtYmVyIG9mIFNTSURzCisgKiBAY2hhbm5lbHM6IGNoYW5uZWxzIHRvIHNjYW4gb24uCisgKiBAbl9jaGFubmVsczogbnVtYmVyIG9mIGNoYW5uZWxzIGZvciBlYWNoIGJhbmQKKyAqIEBpZTogb3B0aW9uYWwgaW5mb3JtYXRpb24gZWxlbWVudChzKSB0byBhZGQgaW50byBQcm9iZSBSZXF1ZXN0IG9yICVOVUxMCisgKiBAaWVfbGVuOiBsZW5ndGggb2YgaWUgaW4gb2N0ZXRzCisgKiBAd2lwaHk6IHRoZSB3aXBoeSB0aGlzIHdhcyBmb3IKKyAqIEBpZmlkeDogdGhlIGludGVyZmFjZSBpbmRleAorICovCitzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHsKKwlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZHM7CisJaW50IG5fc3NpZHM7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoqY2hhbm5lbHM7CisJdTMyIG5fY2hhbm5lbHM7CisJdTggKmllOworCXNpemVfdCBpZV9sZW47CisKKwkvKiBpbnRlcm5hbCAqLworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGlmaWR4OworfTsKKworLyoqCisgKiBlbnVtIGNmZzgwMjExX3NpZ25hbF90eXBlIC0gc2lnbmFsIHR5cGUKKyAqCisgKiBAQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTk9ORTogbm8gc2lnbmFsIHN0cmVuZ3RoIGluZm9ybWF0aW9uIGF2YWlsYWJsZQorICogQENGRzgwMjExX1NJR05BTF9UWVBFX01CTTogc2lnbmFsIHN0cmVuZ3RoIGluIG1CbSAoMTAwKmRCbSkKKyAqIEBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6IHNpZ25hbCBzdHJlbmd0aCwgaW5jcmVhc2luZyBmcm9tIDAgdGhyb3VnaCAxMDAKKyAqLworZW51bSBjZmc4MDIxMV9zaWduYWxfdHlwZSB7CisJQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTk9ORSwKKwlDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk0sCisJQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfYnNzIC0gQlNTIGRlc2NyaXB0aW9uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgQlNTICh3aGljaCBtYXkgYWxzbyBiZSBhIG1lc2ggbmV0d29yaykKKyAqIGZvciB1c2UgaW4gc2NhbiByZXN1bHRzIGFuZCBzaW1pbGFyLgorICoKKyAqIEBic3NpZDogQlNTSUQgb2YgdGhlIEJTUworICogQHRzZjogdGltZXN0YW1wIG9mIGxhc3QgcmVjZWl2ZWQgdXBkYXRlCisgKiBAYmVhY29uX2ludGVydmFsOiB0aGUgYmVhY29uIGludGVydmFsIGFzIGZyb20gdGhlIGZyYW1lCisgKiBAY2FwYWJpbGl0eTogdGhlIGNhcGFiaWxpdHkgZmllbGQgaW4gaG9zdCBieXRlIG9yZGVyCisgKiBAaW5mb3JtYXRpb25fZWxlbWVudHM6IHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cyAoTm90ZSB0aGF0IHRoZXJlCisgKglpcyBubyBndWFyYW50ZWUgdGhhdCB0aGVzZSBhcmUgd2VsbC1mb3JtZWQhKQorICogQGxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czogdG90YWwgbGVuZ3RoIG9mIHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cworICogQHNpZ25hbDogc2lnbmFsIHN0cmVuZ3RoIHZhbHVlICh0eXBlIGRlcGVuZHMgb24gdGhlIHdpcGh5J3Mgc2lnbmFsX3R5cGUpCisgKiBAZnJlZV9wcml2OiBmdW5jdGlvbiBwb2ludGVyIHRvIGZyZWUgcHJpdmF0ZSBkYXRhCisgKiBAcHJpdjogcHJpdmF0ZSBhcmVhIGZvciBkcml2ZXIgdXNlLCBoYXMgYXQgbGVhc3Qgd2lwaHktPmJzc19wcml2X3NpemUgYnl0ZXMKKyAqLworc3RydWN0IGNmZzgwMjExX2JzcyB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU2NCB0c2Y7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsKKwl1MTYgY2FwYWJpbGl0eTsKKwl1OCAqaW5mb3JtYXRpb25fZWxlbWVudHM7CisJc2l6ZV90IGxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czsKKworCXMzMiBzaWduYWw7CisKKwl2b2lkICgqZnJlZV9wcml2KShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOworCXU4IHByaXZbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oc2l6ZW9mKHZvaWQgKikpKSk7Cit9OworCisvKioKICAqIHN0cnVjdCBjZmc4MDIxMV9vcHMgLSBiYWNrZW5kIGRlc2NyaXB0aW9uIGZvciB3aXJlbGVzcyBjb25maWd1cmF0aW9uCiAgKgogICogVGhpcyBzdHJ1Y3QgaXMgcmVnaXN0ZXJlZCBieSBmdWxsbWFjIGNhcmQgZHJpdmVycyBhbmQvb3Igd2lyZWxlc3Mgc3RhY2tzCkBAIC00NTAsNiArNTkxLDkgQEAKICAqIHdpcmVsZXNzIGV4dGVuc2lvbnMgYnV0IHRoaXMgaXMgc3ViamVjdCB0byByZWV2YWx1YXRpb24gYXMgc29vbiBhcyB0aGlzCiAgKiBjb2RlIGlzIHVzZWQgbW9yZSB3aWRlbHkgYW5kIHdlIGhhdmUgYSBmaXJzdCB1c2VyIHdpdGhvdXQgd2V4dC4KICAqCisgKiBAc3VzcGVuZDogd2lwaHkgZGV2aWNlIG5lZWRzIHRvIGJlIHN1c3BlbmRlZAorICogQHJlc3VtZTogd2lwaHkgZGV2aWNlIG5lZWRzIHRvIGJlIHJlc3VtZWQKKyAqCiAgKiBAYWRkX3ZpcnR1YWxfaW50ZjogY3JlYXRlIGEgbmV3IHZpcnR1YWwgaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUsCiAgKgltdXN0IHNldCB0aGUgc3RydWN0IHdpcmVsZXNzX2RldidzIGlmdHlwZS4KICAqCkBAIC00NzEsNiArNjE1LDggQEAKICAqCiAgKiBAc2V0X2RlZmF1bHRfa2V5OiBzZXQgdGhlIGRlZmF1bHQga2V5IG9uIGFuIGludGVyZmFjZQogICoKKyAqIEBzZXRfZGVmYXVsdF9tZ210X2tleTogc2V0IHRoZSBkZWZhdWx0IG1hbmFnZW1lbnQgZnJhbWUga2V5IG9uIGFuIGludGVyZmFjZQorICoKICAqIEBhZGRfYmVhY29uOiBBZGQgYSBiZWFjb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLCBAaGVhZCwgQGludGVydmFsCiAgKglhbmQgQGR0aW1fcGVyaW9kIHdpbGwgYmUgdmFsaWQsIEB0YWlsIGlzIG9wdGlvbmFsLgogICogQHNldF9iZWFjb246IENoYW5nZSB0aGUgYmVhY29uIHBhcmFtZXRlcnMgZm9yIGFuIGFjY2VzcyBwb2ludCBtb2RlCkBAIC00OTcsOCArNjQzLDE4IEBACiAgKiBAc2V0X3R4cV9wYXJhbXM6IFNldCBUWCBxdWV1ZSBwYXJhbWV0ZXJzCiAgKgogICogQHNldF9jaGFubmVsOiBTZXQgY2hhbm5lbAorICoKKyAqIEBzZXRfbWdtdF9leHRyYV9pZTogU2V0IGV4dHJhIElFIGRhdGEgZm9yIG1hbmFnZW1lbnQgZnJhbWVzCisgKgorICogQHNjYW46IFJlcXVlc3QgdG8gZG8gYSBzY2FuLiBJZiByZXR1cm5pbmcgemVybywgdGhlIHNjYW4gcmVxdWVzdCBpcyBnaXZlbgorICoJdGhlIGRyaXZlciwgYW5kIHdpbGwgYmUgdmFsaWQgdW50aWwgcGFzc2VkIHRvIGNmZzgwMjExX3NjYW5fZG9uZSgpLgorICoJRm9yIHNjYW4gcmVzdWx0cywgY2FsbCBjZmc4MDIxMV9pbmZvcm1fYnNzKCk7IHlvdSBjYW4gY2FsbCB0aGlzIG91dHNpZGUKKyAqCXRoZSBzY2FuL3NjYW5fZG9uZSBicmFja2V0IHRvby4KICAqLwogc3RydWN0IGNmZzgwMjExX29wcyB7CisJaW50CSgqc3VzcGVuZCkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisJaW50CSgqcmVzdW1lKShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKwogCWludAkoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGNoYXIgKm5hbWUsCiAJCQkJICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKIAkJCQkgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CkBAIC01MTgsNiArNjc0LDkgQEAKIAlpbnQJKCpzZXRfZGVmYXVsdF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICB1OCBrZXlfaW5kZXgpOworCWludAkoKnNldF9kZWZhdWx0X21nbXRfa2V5KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQl1OCBrZXlfaW5kZXgpOwogCiAJaW50CSgqYWRkX2JlYWNvbikoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBiZWFjb25fcGFyYW1ldGVycyAqaW5mbyk7CkBAIC01NjQsNiArNzIzLDEzIEBACiAJaW50CSgqc2V0X2NoYW5uZWwpKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKTsKKworCWludAkoKnNldF9tZ210X2V4dHJhX2llKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBtZ210X2V4dHJhX2llX3BhcmFtcyAqcGFyYW1zKTsKKworCWludAkoKnNjYW4pKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0KTsKIH07CiAKIC8qIHRlbXBvcmFyeSB3ZXh0IGhhbmRsZXJzICovCkBAIC01NzQsNSArNzQwLDcxIEBACiAJCQkgIHUzMiAqbW9kZSwgY2hhciAqZXh0cmEpOwogaW50IGNmZzgwMjExX3dleHRfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICB1MzIgKm1vZGUsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CisKKy8qKgorICogY2ZnODAyMTFfc2Nhbl9kb25lIC0gbm90aWZ5IHRoYXQgc2NhbiBmaW5pc2hlZAorICoKKyAqIEByZXF1ZXN0OiB0aGUgY29ycmVzcG9uZGluZyBzY2FuIHJlcXVlc3QKKyAqIEBhYm9ydGVkOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgc2NhbiB3YXMgYWJvcnRlZCBmb3IgYW55IHJlYXNvbiwKKyAqCXVzZXJzcGFjZSB3aWxsIGJlIG5vdGlmaWVkIG9mIHRoYXQKKyAqLwordm9pZCBjZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCwgYm9vbCBhYm9ydGVkKTsKKworLyoqCisgKiBjZmc4MDIxMV9pbmZvcm1fYnNzIC0gaW5mb3JtIGNmZzgwMjExIG9mIGEgbmV3IEJTUworICoKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHJlcG9ydGluZyB0aGUgQlNTCisgKiBAYnNzOiB0aGUgZm91bmQgQlNTCisgKiBAc2lnbmFsOiB0aGUgc2lnbmFsIHN0cmVuZ3RoLCB0eXBlIGRlcGVuZHMgb24gdGhlIHdpcGh5J3Mgc2lnbmFsX3R5cGUKKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKKyAqCisgKiBUaGlzIGluZm9ybXMgY2ZnODAyMTEgdGhhdCBCU1MgaW5mb3JtYXRpb24gd2FzIGZvdW5kIGFuZAorICogdGhlIEJTUyBzaG91bGQgYmUgdXBkYXRlZC9hZGRlZC4KKyAqLworc3RydWN0IGNmZzgwMjExX2JzcyoKK2NmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCisJCQkgIHMzMiBzaWduYWwsIGdmcF90IGdmcCk7CisKK3N0cnVjdCBjZmc4MDIxMV9ic3MgKmNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgY29uc3QgdTggKmJzc2lkLAorCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgdTE2IGNhcGFfbWFzaywgdTE2IGNhcGFfdmFsKTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqCitjZmc4MDIxMV9nZXRfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQoreworCXJldHVybiBjZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBjaGFubmVsLCBOVUxMLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQlXTEFOX0NBUEFCSUxJVFlfSUJTUywgV0xBTl9DQVBBQklMSVRZX0lCU1MpOworfQorCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjZmc4MDIxMV9nZXRfbWVzaChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgIGNvbnN0IHU4ICptZXNoaWQsIHNpemVfdCBtZXNoaWRsZW4sCisJCQkJICAgICAgIGNvbnN0IHU4ICptZXNoY2ZnKTsKK3ZvaWQgY2ZnODAyMTFfcHV0X2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOworLyoqCisgKiBjZmc4MDIxMV91bmxpbmtfYnNzIC0gdW5saW5rIEJTUyBmcm9tIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICogQHdpcGh5OiB0aGUgd2lwaHkKKyAqIEBic3M6IHRoZSBic3MgdG8gcmVtb3ZlCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBnaXZlbiBCU1MgZnJvbSB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgKiB0aGVyZWJ5IG1ha2luZyBpdCBubyBsb25nZXIgc2hvdyB1cCBpbiBzY2FuIHJlc3VsdHMgZXRjLiBVc2UgdGhpcworICogZnVuY3Rpb24gd2hlbiB5b3UgZGV0ZWN0IGEgQlNTIGlzIGdvbmUuIE5vcm1hbGx5IEJTU2VzIHdpbGwgYWxzbyB0aW1lCisgKiBvdXQsIHNvIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXQgYWxsLgorICovCit2b2lkIGNmZzgwMjExX3VubGlua19ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKIAogI2VuZGlmIC8qIF9fTkVUX0NGRzgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggNTJlOTdiZi4uODM5Zjc2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKKysrIGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogaW5jbHVkZS9uZXQvZHNhLmggLSBEcml2ZXIgZm9yIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgc3dpdGNoIGNoaXBzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTExLDIzICsxMSw0NyBAQAogI2lmbmRlZiBfX0xJTlVYX05FVF9EU0FfSAogI2RlZmluZSBfX0xJTlVYX05FVF9EU0FfSAogCi0jZGVmaW5lIERTQV9NQVhfUE9SVFMJMTIKKyNkZWZpbmUgRFNBX01BWF9TV0lUQ0hFUwk0CisjZGVmaW5lIERTQV9NQVhfUE9SVFMJCTEyCisKK3N0cnVjdCBkc2FfY2hpcF9kYXRhIHsKKwkvKgorCSAqIEhvdyB0byBhY2Nlc3MgdGhlIHN3aXRjaCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KKwkgKi8KKwlzdHJ1Y3QgZGV2aWNlCSptaWlfYnVzOworCWludAkJc3dfYWRkcjsKKworCS8qCisJICogVGhlIG5hbWVzIG9mIHRoZSBzd2l0Y2gncyBwb3J0cy4gIFVzZSAiY3B1IiB0bworCSAqIGRlc2lnbmF0ZSB0aGUgc3dpdGNoIHBvcnQgdGhhdCB0aGUgY3B1IGlzIGNvbm5lY3RlZCB0bywKKwkgKiAiZHNhIiB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgcG9ydCBpcyBhIERTQSBsaW5rIHRvCisJICogYW5vdGhlciBzd2l0Y2gsIE5VTEwgdG8gaW5kaWNhdGUgdGhlIHBvcnQgaXMgdW51c2VkLAorCSAqIG9yIGFueSBvdGhlciBzdHJpbmcgdG8gaW5kaWNhdGUgdGhpcyBpcyBhIHBoeXNpY2FsIHBvcnQuCisJICovCisJY2hhcgkJKnBvcnRfbmFtZXNbRFNBX01BWF9QT1JUU107CisKKwkvKgorCSAqIEFuIGFycmF5ICh3aXRoIG5yX2NoaXBzIGVsZW1lbnRzKSBvZiB3aGljaCBlbGVtZW50IFthXQorCSAqIGluZGljYXRlcyB3aGljaCBwb3J0IG9uIHRoaXMgc3dpdGNoIHNob3VsZCBiZSB1c2VkIHRvCisJICogc2VuZCBwYWNrZXRzIHRvIHRoYXQgYXJlIGRlc3RpbmVkIGZvciBzd2l0Y2ggYS4gIENhbiBiZQorCSAqIE5VTEwgaWYgdGhlcmUgaXMgb25seSBvbmUgc3dpdGNoIGNoaXAuCisJICovCisJczgJCSpydGFibGU7Cit9OwogCiBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgewogCS8qCiAJICogUmVmZXJlbmNlIHRvIGEgTGludXggbmV0d29yayBpbnRlcmZhY2UgdGhhdCBjb25uZWN0cwotCSAqIHRvIHRoZSBzd2l0Y2ggY2hpcC4KKwkgKiB0byB0aGUgcm9vdCBzd2l0Y2ggY2hpcCBvZiB0aGUgdHJlZS4KIAkgKi8KIAlzdHJ1Y3QgZGV2aWNlCSpuZXRkZXY7CiAKIAkvKgotCSAqIEhvdyB0byBhY2Nlc3MgdGhlIHN3aXRjaCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycywgYW5kCi0JICogdGhlIG5hbWVzIG9mIHRoZSBzd2l0Y2ggcG9ydHMgKHVzZSAiY3B1IiB0byBkZXNpZ25hdGUKLQkgKiB0aGUgc3dpdGNoIHBvcnQgdGhhdCB0aGUgY3B1IGlzIGNvbm5lY3RlZCB0bykuCisJICogSW5mbyBzdHJ1Y3RzIGRlc2NyaWJpbmcgZWFjaCBvZiB0aGUgc3dpdGNoIGNoaXBzCisJICogY29ubmVjdGVkIHZpYSB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlLgogCSAqLwotCXN0cnVjdCBkZXZpY2UJKm1paV9idXM7Ci0JaW50CQlzd19hZGRyOwotCWNoYXIJCSpwb3J0X25hbWVzW0RTQV9NQVhfUE9SVFNdOworCWludAkJbnJfY2hpcHM7CisJc3RydWN0IGRzYV9jaGlwX2RhdGEJKmNoaXA7CiB9OwogCiBleHRlcm4gYm9vbCBkc2FfdXNlc19kc2FfdGFncyh2b2lkICpkc2FfcHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmggYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCmluZGV4IGM4ZWZmYTQuLjM4Yjc4MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKKysrIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApAQCAtMzksOCArMzksNiBAQAogCQogCV9fdTMyCQkJdmFsaWRfbGZ0OwogCV9fdTMyCQkJcHJlZmVyZWRfbGZ0OwotCXVuc2lnbmVkIGxvbmcJCWNzdGFtcDsJLyogY3JlYXRlZCB0aW1lc3RhbXAgKi8KLQl1bnNpZ25lZCBsb25nCQl0c3RhbXA7IC8qIHVwZGF0ZWQgdGltZXN0YW1wICovCiAJYXRvbWljX3QJCXJlZmNudDsKIAlzcGlubG9ja190CQlsb2NrOwogCkBAIC00OSw2ICs0Nyw5IEBACiAKIAlfX3UxNgkJCXNjb3BlOwogCisJdW5zaWduZWQgbG9uZwkJY3N0YW1wOwkvKiBjcmVhdGVkIHRpbWVzdGFtcCAqLworCXVuc2lnbmVkIGxvbmcJCXRzdGFtcDsgLyogdXBkYXRlZCB0aW1lc3RhbXAgKi8KKwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCiAJc3RydWN0IGluZXQ2X2RldgkqaWRldjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmggYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCmluZGV4IDcwNDBhNzguLjliNWQwOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaApAQCAtMTEzLDEyICsxMTMsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IElORVRfRUNOX3NldF9jZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChza2ItPm5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgPD0gc2tiLT50YWlsKQogCQkJcmV0dXJuIElQX0VDTl9zZXRfY2UoaXBfaGRyKHNrYikpOwogCQlicmVhazsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlpZiAoc2tiLT5uZXR3b3JrX2hlYWRlciArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgPD0gc2tiLT50YWlsKQogCQkJcmV0dXJuIElQNl9FQ05fc2V0X2NlKGlwdjZfaGRyKHNrYikpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKaW5kZXggZTA4MWVlZi4uMzlmMmRjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKQEAgLTYxLDcgKzYxLDggQEAKIAkJCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgaW50ICp3b3JrKTsKIGludCBpbmV0X2ZyYWdfZXZpY3RvcihzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLCBzdHJ1Y3QgaW5ldF9mcmFncyAqZik7CiBzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfZmluZChzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLAotCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCk7CisJCXN0cnVjdCBpbmV0X2ZyYWdzICpmLCB2b2lkICprZXksIHVuc2lnbmVkIGludCBoYXNoKQorCV9fcmVsZWFzZXMoJmYtPmxvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9mcmFnX3B1dChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCBzdHJ1Y3QgaW5ldF9mcmFncyAqZikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKaW5kZXggZDBhMDQzMS4uYTQ0ZTIyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKQEAgLTgyLDYgKzgyLDcgQEAKICNlbmRpZgogCXVuc2lnbmVkIHNob3J0CQlwb3J0OwogCXNpZ25lZCBzaG9ydAkJZmFzdHJldXNlOworCWludAkJCW51bV9vd25lcnM7CiAJc3RydWN0IGhsaXN0X25vZGUJbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAlvd25lcnM7CiB9OwpAQCAtMTMzLDcgKzEzNCw3IEBACiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0CSpiaGFzaDsKIAogCXVuc2lnbmVkIGludAkJCWJoYXNoX3NpemU7Ci0JLyogTm90ZSA6IDQgYnl0ZXMgcGFkZGluZyBvbiA2NCBiaXQgYXJjaGVzICovCisJLyogNCBieXRlcyBob2xlIG9uIDY0IGJpdCAqLwogCiAJc3RydWN0IGttZW1fY2FjaGUJCSpiaW5kX2J1Y2tldF9jYWNoZXA7CiAKQEAgLTE1MCw2ICsxNTEsNyBAQAogCXN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0CWxpc3RlbmluZ19oYXNoW0lORVRfTEhUQUJMRV9TSVpFXQogCQkJCQlfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCisJYXRvbWljX3QJCQlic29ja2V0czsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICppbmV0X2VoYXNoX2J1Y2tldCgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDEwODY4MTMuLjRhYzc1NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTUsNiArNTUsNyBAQAogCV9fYmUzMgkJCWFkZHI7CiAJaW50CQkJb2lmOwogCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CisJdW5pb24gc2tiX3NoYXJlZF90eAlzaHR4OwogfTsKIAogI2RlZmluZSBJUENCKHNrYikgKChzdHJ1Y3QgaW5ldF9za2JfcGFybSopKChza2IpLT5jYikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBhYjliMDAzLi5iYmFlMWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTE4NCw4ICsxODQsOCBAQAogLyoKICAqICAgICAgVGhlIHBvcnQgbnVtYmVyIG9mIEZUUCBzZXJ2aWNlIChpbiBuZXR3b3JrIG9yZGVyKS4KICAqLwotI2RlZmluZSBGVFBQT1JUICBfX2NvbnN0YW50X2h0b25zKDIxKQotI2RlZmluZSBGVFBEQVRBICBfX2NvbnN0YW50X2h0b25zKDIwKQorI2RlZmluZSBGVFBQT1JUICBjcHVfdG9fYmUxNigyMSkKKyNkZWZpbmUgRlRQREFUQSAgY3B1X3RvX2JlMTYoMjApCiAKIC8qCiAgKiAgICAgIFRDUCBTdGF0ZSBWYWx1ZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA2ZDViNThhLi5jMWYxNmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0xOTYsOCArMTk2LDggQEAKIAlzdHJ1Y3QgbmV0CQkqZmxfbmV0OwogfTsKIAotI2RlZmluZSBJUFY2X0ZMT1dJTkZPX01BU0sJX19jb25zdGFudF9odG9ubCgweDBGRkZGRkZGKQotI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NQVNLCV9fY29uc3RhbnRfaHRvbmwoMHgwMDBGRkZGRikKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19NQVNLCWNwdV90b19iZTMyKDB4MEZGRkZGRkYpCisjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01BU0sJY3B1X3RvX2JlMzIoMHgwMDBGRkZGRikKIAogc3RydWN0IGlwdjZfZmxfc29ja2xpc3QKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lweC5oIGIvaW5jbHVkZS9uZXQvaXB4LmgKaW5kZXggNGNjMGI0ZS4uYTE0MTIxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB4LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB4LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogc3RydWN0IGlweGhkciB7CiAJX19iZTE2CQkJaXB4X2NoZWNrc3VtIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLSNkZWZpbmUgSVBYX05PX0NIRUNLU1VNCV9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKQorI2RlZmluZSBJUFhfTk9fQ0hFQ0tTVU0JY3B1X3RvX2JlMTYoMHhGRkZGKQogCV9fYmUxNgkJCWlweF9wa3RzaXplIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAlfX3U4CQkJaXB4X3RjdHJsOwogCV9fdTgJCQlpcHhfdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDU1OTQyMmYuLjEyYTUyZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtMjA3LDcgKzIwNyw3IEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJdTE2IGFzc29jX2NhcGFiaWxpdHk7CiAJdTY0IHRpbWVzdGFtcDsKLQl1NjQgYmFzaWNfcmF0ZXM7CisJdTMyIGJhc2ljX3JhdGVzOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2h0X2NvbmYgaHQ7CiB9OwogCkBAIC0yNjIsNiArMjYyLDI2IEBACiAJSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUJPSBCSVQoMTIpLAogfTsKIAorLyoqCisgKiBlbnVtIG1hYzgwMjExX3JhdGVfY29udHJvbF9mbGFncyAtIHBlci1yYXRlIGZsYWdzIHNldCBieSB0aGUKKyAqCVJhdGUgQ29udHJvbCBhbGdvcml0aG0uCisgKgorICogVGhlc2UgZmxhZ3MgYXJlIHNldCBieSB0aGUgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBmb3IgZWFjaCByYXRlIGR1cmluZyB0eCwKKyAqIGluIHRoZSBAZmxhZ3MgbWVtYmVyIG9mIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZS4KKyAqCisgKiBASUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOiBVc2UgUlRTL0NUUyBleGNoYW5nZSBmb3IgdGhpcyByYXRlLgorICogQElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1Q6IENUUy10by1zZWxmIHByb3RlY3Rpb24gaXMgcmVxdWlyZWQuCisgKglUaGlzIGlzIHNldCBpZiB0aGUgY3VycmVudCBCU1MgcmVxdWlyZXMgRVJQIHByb3RlY3Rpb24uCisgKiBASUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTogVXNlIHNob3J0IHByZWFtYmxlLgorICogQElFRUU4MDIxMV9UWF9SQ19NQ1M6IEhUIHJhdGUuCisgKiBASUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJhdGUgc2hvdWxkIGJlIHVzZWQgaW4KKyAqCUdyZWVuZmllbGQgbW9kZS4KKyAqIEBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgaWYgdGhlIENoYW5uZWwgV2lkdGggc2hvdWxkIGJlIDQwIE1Iei4KKyAqIEBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEE6IFRoZSBmcmFtZSBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgb24gYm90aCBvZiB0aGUKKyAqCWFkamFjZW50IDIwIE1IeiBjaGFubmVscywgaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCB0eXBlIGlzCisgKglOTDgwMjExX0NIQU5fSFQ0ME1JTlVTIG9yIE5MODAyMTFfQ0hBTl9IVDQwUExVUy4KKyAqIEBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k6IFNob3J0IEd1YXJkIGludGVydmFsIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzIHJhdGUuCisgKi8KIGVudW0gbWFjODAyMTFfcmF0ZV9jb250cm9sX2ZsYWdzIHsKIAlJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMJCT0gQklUKDApLAogCUlFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QJCT0gQklUKDEpLApAQCAtNTA3LDExICs1MjcsNiBAQAogfQogI2RlZmluZSBJRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUgKF9fSUVFRTgwMjExX0NPTkZfU0hPUlRfU0xPVF9USU1FKCkpCiAKLXN0cnVjdCBpZWVlODAyMTFfaHRfY29uZiB7Ci0JYm9vbCBlbmFibGVkOwotCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlOwotfTsKLQogLyoqCiAgKiBlbnVtIGllZWU4MDIxMV9jb25mX2NoYW5nZWQgLSBkZW5vdGVzIHdoaWNoIGNvbmZpZ3VyYXRpb24gY2hhbmdlZAogICoKQEAgLTUyMCwxMCArNTM1LDEwIEBACiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTDogdGhlIGxpc3RlbiBpbnRlcnZhbCBjaGFuZ2VkCiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPVEFQOiB0aGUgcmFkaW90YXAgZmxhZyBjaGFuZ2VkCiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTOiB0aGUgUFMgZmxhZyBjaGFuZ2VkCisgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0RZTlBTX1RJTUVPVVQ6IHRoZSBkeW5hbWljIFBTIHRpbWVvdXQgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUjogdGhlIFRYIHBvd2VyIGNoYW5nZWQKLSAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDogdGhlIGNoYW5uZWwgY2hhbmdlZAorICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMOiB0aGUgY2hhbm5lbC9jaGFubmVsX3R5cGUgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFM6IHJldHJ5IGxpbWl0cyBjaGFuZ2VkCi0gKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUOiBIVCBjb25maWd1cmF0aW9uIGNoYW5nZWQKICAqLwogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIHsKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9fRU5BQkxFRAk9IEJJVCgwKSwKQEAgLTUzMSwxMCArNTQ2LDEwIEBACiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTAk9IEJJVCgyKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9UQVAJCT0gQklUKDMpLAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QUwkJPSBCSVQoNCksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSCQk9IEJJVCg1KSwKLQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTAkJPSBCSVQoNiksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUwk9IEJJVCg3KSwKLQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfSFQJCT0gQklUKDgpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUCT0gQklUKDUpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUgkJPSBCSVQoNiksCisJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwJCT0gQklUKDcpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMJPSBCSVQoOCksCiB9OwogCiAvKioKQEAgLTU0Nyw4ICs1NjIsOSBAQAogICogQGxpc3Rlbl9pbnRlcnZhbDogbGlzdGVuIGludGVydmFsIGluIHVuaXRzIG9mIGJlYWNvbiBpbnRlcnZhbAogICogQGZsYWdzOiBjb25maWd1cmF0aW9uIGZsYWdzIGRlZmluZWQgYWJvdmUKICAqIEBwb3dlcl9sZXZlbDogcmVxdWVzdGVkIHRyYW5zbWl0IHBvd2VyIChpbiBkQm0pCisgKiBAZHluYW1pY19wc190aW1lb3V0OiBkeW5hbWljIHBvd2Vyc2F2ZSB0aW1lb3V0IChpbiBtcykKICAqIEBjaGFubmVsOiB0aGUgY2hhbm5lbCB0byB0dW5lIHRvCi0gKiBAaHQ6IHRoZSBIVCBjb25maWd1cmF0aW9uIGZvciB0aGUgZGV2aWNlCisgKiBAY2hhbm5lbF90eXBlOiB0aGUgY2hhbm5lbCAoSFQpIHR5cGUKICAqIEBsb25nX2ZyYW1lX21heF90eF9jb3VudDogTWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBmb3IgYSAibG9uZyIgZnJhbWUKICAqICAgIChhIGZyYW1lIG5vdCBSVFMgcHJvdGVjdGVkKSwgY2FsbGVkICJkb3QxMUxvbmdSZXRyeUxpbWl0IiBpbiA4MDIuMTEsCiAgKiAgICBidXQgYWN0dWFsbHkgbWVhbnMgdGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIG5vdCB0aGUgbnVtYmVyIG9mIHJldHJpZXMKQEAgLTU1OSw3ICs1NzUsNyBAQAogc3RydWN0IGllZWU4MDIxMV9jb25mIHsKIAlpbnQgYmVhY29uX2ludDsKIAl1MzIgZmxhZ3M7Ci0JaW50IHBvd2VyX2xldmVsOworCWludCBwb3dlcl9sZXZlbCwgZHluYW1pY19wc190aW1lb3V0OwogCiAJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKIAlib29sIHJhZGlvX2VuYWJsZWQ7CkBAIC01NjcsNyArNTgzLDcgQEAKIAl1OCBsb25nX2ZyYW1lX21heF90eF9jb3VudCwgc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OwogCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCXN0cnVjdCBpZWVlODAyMTFfaHRfY29uZiBodDsKKwllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZTsKIH07CiAKIC8qKgpAQCAtNjMwLDEwICs2NDYsMTIgQEAKICAqIEBJRUVFODAyMTFfSUZDQ19CU1NJRDogVGhlIEJTU0lEIGNoYW5nZWQuCiAgKiBASUVFRTgwMjExX0lGQ0NfQkVBQ09OOiBUaGUgYmVhY29uIGZvciB0aGlzIGludGVyZmFjZSBjaGFuZ2VkCiAgKgkoY3VycmVudGx5IEFQIGFuZCBNRVNIIG9ubHkpLCB1c2UgaWVlZTgwMjExX2JlYWNvbl9nZXQoKS4KKyAqIEBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRDogVGhlIGVuYWJsZV9iZWFjb24gdmFsdWUgY2hhbmdlZC4KICAqLwogZW51bSBpZWVlODAyMTFfaWZfY29uZl9jaGFuZ2UgewotCUlFRUU4MDIxMV9JRkNDX0JTU0lECT0gQklUKDApLAotCUlFRUU4MDIxMV9JRkNDX0JFQUNPTgk9IEJJVCgxKSwKKwlJRUVFODAyMTFfSUZDQ19CU1NJRAkJPSBCSVQoMCksCisJSUVFRTgwMjExX0lGQ0NfQkVBQ09OCQk9IEJJVCgxKSwKKwlJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRAk9IEJJVCgyKSwKIH07CiAKIC8qKgpAQCAtNjQxLDEzICs2NTksMTYgQEAKICAqCiAgKiBAY2hhbmdlZDogcGFyYW1ldGVycyB0aGF0IGhhdmUgY2hhbmdlZCwgc2VlICZlbnVtIGllZWU4MDIxMV9pZl9jb25mX2NoYW5nZS4KICAqIEBic3NpZDogQlNTSUQgb2YgdGhlIG5ldHdvcmsgd2UgYXJlIGFzc29jaWF0ZWQgdG8vY3JlYXRpbmcuCisgKiBAZW5hYmxlX2JlYWNvbjogSW5kaWNhdGVzIHdoZXRoZXIgYmVhY29ucyBjYW4gYmUgc2VudC4KKyAqCVRoaXMgaXMgdmFsaWQgb25seSBmb3IgQVAvSUJTUy9NRVNIIG1vZGVzLgogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUgY29uZmlnX2ludGVyZmFjZSgpIGNhbGxiYWNrIG9mCiAgKiAmc3RydWN0IGllZWU4MDIxMV9ody4KICAqLwogc3RydWN0IGllZWU4MDIxMV9pZl9jb25mIHsKIAl1MzIgY2hhbmdlZDsKLQl1OCAqYnNzaWQ7CisJY29uc3QgdTggKmJzc2lkOworCWJvb2wgZW5hYmxlX2JlYWNvbjsKIH07CiAKIC8qKgpAQCAtNjU1LDExICs2NzYsMTMgQEAKICAqIEBBTEdfV0VQOiBXRVA0MCBvciBXRVAxMDQKICAqIEBBTEdfVEtJUDogVEtJUAogICogQEFMR19DQ01QOiBDQ01QIChBRVMpCisgKiBAQUxHX0FFU19DTUFDOiBBRVMtMTI4LUNNQUMKICAqLwogZW51bSBpZWVlODAyMTFfa2V5X2FsZyB7CiAJQUxHX1dFUCwKIAlBTEdfVEtJUCwKIAlBTEdfQ0NNUCwKKwlBTEdfQUVTX0NNQUMsCiB9OwogCiAvKioKQEAgLTY4OCwxMiArNzExLDE2IEBACiAgKglnZW5lcmF0aW9uIGluIHNvZnR3YXJlLgogICogQElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTogU2V0IGJ5IG1hYzgwMjExLCB0aGlzIGZsYWcgaW5kaWNhdGVzCiAgKgl0aGF0IHRoZSBrZXkgaXMgcGFpcndpc2UgcmF0aGVyIHRoZW4gYSBzaGFyZWQga2V5LgorICogQElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UOiBUaGlzIGZsYWcgc2hvdWxkIGJlIHNldCBieSB0aGUgZHJpdmVyIGZvciBhCisgKglDQ01QIGtleSBpZiBpdCByZXF1aXJlcyBDQ01QIGVuY3J5cHRpb24gb2YgbWFuYWdlbWVudCBmcmFtZXMgKE1GUCkgdG8KKyAqCWJlIGRvbmUgaW4gc29mdHdhcmUuCiAgKi8KIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7CiAJSUVFRTgwMjExX0tFWV9GTEFHX1dNTV9TVEEJPSAxPDwwLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVgk9IDE8PDEsCiAJSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM9IDE8PDIsCiAJSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFCT0gMTw8MywKKwlJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVAk9IDE8PDQsCiB9OwogCiAvKioKQEAgLTcxNCw4ICs3NDEsOCBAQAogICogCS0gVGVtcG9yYWwgRW5jcnlwdGlvbiBLZXkgKDEyOCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBUeCBNSUMgS2V5ICg2NCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBSeCBNSUMgS2V5ICg2NCBiaXRzKQotICogQGljdl9sZW46IEZJWE1FCi0gKiBAaXZfbGVuOiBGSVhNRQorICogQGljdl9sZW46IFRoZSBJQ1YgbGVuZ3RoIGZvciB0aGlzIGtleSB0eXBlCisgKiBAaXZfbGVuOiBUaGUgSVYgbGVuZ3RoIGZvciB0aGlzIGtleSB0eXBlCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgewogCWVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnOwpAQCAtNzU5LDcgKzc4Niw3IEBACiAgKglzaXplb2Yodm9pZCAqKSwgc2l6ZSBpcyBkZXRlcm1pbmVkIGluIGh3IGluZm9ybWF0aW9uLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3N0YSB7Ci0JdTY0IHN1cHBfcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU107CisJdTMyIHN1cHBfcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU107CiAJdTggYWRkcltFVEhfQUxFTl07CiAJdTE2IGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgaHRfY2FwOwpAQCAtODMzLDExICs4NjAsNiBAQAogICoJZXhwZWN0IHZhbHVlcyBiZXR3ZWVuIDAgYW5kIEBtYXhfc2lnbmFsLgogICoJSWYgcG9zc2libGUgcGxlYXNlIHByb3ZpZGUgZEIgb3IgZEJtIGluc3RlYWQuCiAgKgotICogQElFRUU4MDIxMV9IV19TSUdOQUxfREI6Ci0gKglIYXJkd2FyZSBnaXZlcyBzaWduYWwgdmFsdWVzIGluIGRCLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbSBhbgotICoJYXJiaXRyYXJ5LCBmaXhlZCByZWZlcmVuY2UuIFdlIGV4cGVjdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCBAbWF4X3NpZ25hbC4KLSAqCUlmIHBvc3NpYmxlIHBsZWFzZSBwcm92aWRlIGRCbSBpbnN0ZWFkLgotICoKICAqIEBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTToKICAqCUhhcmR3YXJlIGdpdmVzIHNpZ25hbCB2YWx1ZXMgaW4gZEJtLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbQogICoJb25lIG1pbGxpd2F0dC4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBzaW5jZSBpdCBpcyBzdGFuZGFyZGl6ZWQKQEAgLTg1NCwxMCArODc2LDE4IEBACiAgKiBASUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOgogICoJSGFyZHdhcmUgc3VwcG9ydHMgMTFuIEEtTVBEVSBhZ2dyZWdhdGlvbi4KICAqCi0gKiBASUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFM6Ci0gKglIYXJkd2FyZSB3aGljaCBoYXMgZHluYW1pYyBwb3dlciBzYXZlIHN1cHBvcnQsIG1lYW5pbmcKLSAqCXRoYXQgcG93ZXIgc2F2ZSBpcyBlbmFibGVkIGluIGlkbGUgcGVyaW9kcywgYW5kIGRvbid0IG5lZWQgc3VwcG9ydAotICoJZnJvbSBzdGFjay4KKyAqIEBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFM6CisgKglIYXJkd2FyZSBoYXMgcG93ZXIgc2F2ZSBzdXBwb3J0IChpLmUuIGNhbiBnbyB0byBzbGVlcCkuCisgKgorICogQElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzoKKyAqCUhhcmR3YXJlIHJlcXVpcmVzIG51bGxmdW5jIGZyYW1lIGhhbmRsaW5nIGluIHN0YWNrLCBpbXBsaWVzCisgKglzdGFjayBzdXBwb3J0IGZvciBkeW5hbWljIFBTLgorICoKKyAqIEBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzoKKyAqCUhhcmR3YXJlIGhhcyBzdXBwb3J0IGZvciBkeW5hbWljIFBTLgorICoKKyAqIEBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU6CisgKglIYXJkd2FyZSBzdXBwb3J0cyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gKE1GUCwgSUVFRSA4MDIuMTF3KS4KICAqLwogZW51bSBpZWVlODAyMTFfaHdfZmxhZ3MgewogCUlFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MJCQk9IDE8PDEsCkBAIC04NjUsMTIgKzg5NSwxNCBAQAogCUlFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFCQk9IDE8PDMsCiAJSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFCT0gMTw8NCwKIAlJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQwkJCT0gMTw8NSwKLQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCCQkJCT0gMTw8NiwKLQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTQkJCQk9IDE8PDcsCi0JSUVFRTgwMjExX0hXX05PSVNFX0RCTQkJCQk9IDE8PDgsCi0JSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQJCQk9IDE8PDksCi0JSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OCQkJPSAxPDwxMCwKLQlJRUVFODAyMTFfSFdfTk9fU1RBQ0tfRFlOQU1JQ19QUwkJPSAxPDwxMSwKKwlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTQkJCQk9IDE8PDYsCisJSUVFRTgwMjExX0hXX05PSVNFX0RCTQkJCQk9IDE8PDcsCisJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQJCQk9IDE8PDgsCisJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OCQkJPSAxPDw5LAorCUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUwkJCT0gMTw8MTAsCisJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLCQkJPSAxPDwxMSwKKwlJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUwkJPSAxPDwxMiwKKwlJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUJCQk9IDE8PDEzLAogfTsKIAogLyoqCkBAIC04OTAsOSArOTIyLDggQEAKICAqIEB3b3JrcXVldWU6IHNpbmdsZSB0aHJlYWRlZCB3b3JrcXVldWUgYXZhaWxhYmxlIGZvciBkcml2ZXIgdXNlLAogICoJYWxsb2NhdGVkIGJ5IG1hYzgwMjExIG9uIHJlZ2lzdHJhdGlvbiBhbmQgZmx1c2hlZCB3aGVuIGFuCiAgKglpbnRlcmZhY2UgaXMgcmVtb3ZlZC4KLSAqCU5PVElDRTogQWxsIHdvcmsgcGVyZm9ybWVkIG9uIHRoaXMgd29ya3F1ZXVlIHNob3VsZCBORVZFUgotICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrIChpLmUuIERvbid0IHVzZSB0aGUgZnVuY3Rpb24KLSAqCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKCkpCisgKglOT1RJQ0U6IEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGlzIHdvcmtxdWV1ZSBtdXN0IG5vdAorICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrLgogICoKICAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgYXJlYSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIGRyaXZlciB1c2UKICAqCWFsb25nIHdpdGggdGhpcyBzdHJ1Y3R1cmUuCkBAIC05NTIsNiArOTgzLDE5IEBACiB9OwogCiAvKioKKyAqIHdpcGh5X3RvX2llZWU4MDIxMV9odyAtIHJldHVybiBhIG1hYzgwMjExIGRyaXZlciBodyBzdHJ1Y3QgZnJvbSBhIHdpcGh5CisgKgorICogQHdpcGh5OiB0aGUgJnN0cnVjdCB3aXBoeSB3aGljaCB3ZSB3YW50IHRvIHF1ZXJ5CisgKgorICogbWFjODAyMTEgZHJpdmVycyBjYW4gdXNlIHRoaXMgdG8gZ2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUKKyAqICZzdHJ1Y3QgaWVlZTgwMjExX2h3LiBEcml2ZXJzIHdpc2hpbmcgdG8gZ2V0IHRvIHRoZWlyIG93biBwcml2YXRlCisgKiBzdHJ1Y3R1cmUgY2FuIHRoZW4gYWNjZXNzIGl0IHZpYSBody0+cHJpdi4gTm90ZSB0aGF0IG1hYzgwMjExMSBkcml2ZXJzIHNob3VsZAorICogbm90IHVzZSB3aXBoeV9wcml2KCkgdG8gdHJ5IHRvIGdldCB0aGVpciBwcml2YXRlIGRyaXZlciBzdHJ1Y3R1cmUgYXMgdGhpcworICogaXMgYWxyZWFkeSB1c2VkIGludGVybmFsbHkgYnkgbWFjODAyMTEuCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfaHcgKndpcGh5X3RvX2llZWU4MDIxMV9odyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKworLyoqCiAgKiBTRVRfSUVFRTgwMjExX0RFViAtIHNldCBkZXZpY2UgZm9yIDgwMi4xMSBoYXJkd2FyZQogICoKICAqIEBodzogdGhlICZzdHJ1Y3QgaWVlZTgwMjExX2h3IHRvIHNldCB0aGUgZGV2aWNlIGZvcgpAQCAtOTc4LDExICsxMDIyLDYgQEAKIAlyZXR1cm4gaHctPnF1ZXVlczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX251bV9xdWV1ZXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0JcmV0dXJuIGh3LT5xdWV1ZXMgKyBody0+YW1wZHVfcXVldWVzOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqCiBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqYykKQEAgLTEwMTgsMTYgKzEwNTcsMTIgQEAKICAqCiAgKiBUaGUgc2V0X2tleSgpIGNhbGxiYWNrIGluIHRoZSAmc3RydWN0IGllZWU4MDIxMV9vcHMgZm9yIGEgZ2l2ZW4KICAqIGRldmljZSBpcyBjYWxsZWQgdG8gZW5hYmxlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBlbmNyeXB0aW9uIGFuZAotICogZGVjcnlwdGlvbi4gVGhlIGNhbGxiYWNrIHRha2VzIGFuIEBhZGRyZXNzIHBhcmFtZXRlciB0aGF0IHdpbGwgYmUKLSAqIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBmb3IgZGVmYXVsdCBrZXlzLCB0aGUgb3RoZXIgc3RhdGlvbidzIGhhcmR3YXJlCi0gKiBhZGRyZXNzIGZvciBpbmRpdmlkdWFsIGtleXMgb3IgdGhlIHplcm8gYWRkcmVzcyBmb3Iga2V5cyB0aGF0IHdpbGwKLSAqIGJlIHVzZWQgb25seSBmb3IgdHJhbnNtaXNzaW9uLgorICogZGVjcnlwdGlvbi4gVGhlIGNhbGxiYWNrIHRha2VzIGEgQHN0YSBwYXJhbWV0ZXIgdGhhdCB3aWxsIGJlIE5VTEwKKyAqIGZvciBkZWZhdWx0IGtleXMgb3Iga2V5cyB1c2VkIGZvciB0cmFuc21pc3Npb24gb25seSwgb3IgcG9pbnQgdG8KKyAqIHRoZSBzdGF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgcGVlciBmb3IgaW5kaXZpZHVhbCBrZXlzLgogICogTXVsdGlwbGUgdHJhbnNtaXNzaW9uIGtleXMgd2l0aCB0aGUgc2FtZSBrZXkgaW5kZXggbWF5IGJlIHVzZWQgd2hlbgogICogVkxBTnMgYXJlIGNvbmZpZ3VyZWQgZm9yIGFuIGFjY2VzcyBwb2ludC4KICAqCi0gKiBUaGUgQGxvY2FsX2FkZHJlc3MgcGFyYW1ldGVyIHdpbGwgYWx3YXlzIGJlIHNldCB0byBvdXIgb3duIGFkZHJlc3MsCi0gKiB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgaWYgeW91IHN1cHBvcnQgbXVsdGlwbGUgbG9jYWwgYWRkcmVzc2VzLgotICoKICAqIFdoZW4gdHJhbnNtaXR0aW5nLCB0aGUgVFggY29udHJvbCBkYXRhIHdpbGwgdXNlIHRoZSBAaHdfa2V5X2lkeAogICogc2VsZWN0ZWQgYnkgdGhlIGRyaXZlciBieSBtb2RpZnlpbmcgdGhlICZzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mCiAgKiBwb2ludGVkIHRvIGJ5IHRoZSBAa2V5IHBhcmFtZXRlciB0byB0aGUgc2V0X2tleSgpIGZ1bmN0aW9uLgpAQCAtMTA2MSw2ICsxMDk2LDQyIEBACiAgKi8KIAogLyoqCisgKiBET0M6IFBvd2Vyc2F2ZSBzdXBwb3J0CisgKgorICogbWFjODAyMTEgaGFzIHN1cHBvcnQgZm9yIHZhcmlvdXMgcG93ZXJzYXZlIGltcGxlbWVudGF0aW9ucy4KKyAqCisgKiBGaXJzdCwgaXQgY2FuIHN1cHBvcnQgaGFyZHdhcmUgdGhhdCBoYW5kbGVzIGFsbCBwb3dlcnNhdmluZyBieQorICogaXRzZWxmLCBzdWNoIGhhcmR3YXJlIHNob3VsZCBzaW1wbHkgc2V0IHRoZSAlSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTCisgKiBoYXJkd2FyZSBmbGFnLiBJbiB0aGF0IGNhc2UsIGl0IHdpbGwgYmUgdG9sZCBhYm91dCB0aGUgZGVzaXJlZAorICogcG93ZXJzYXZlIG1vZGUgZGVwZW5kaW5nIG9uIHRoZSBhc3NvY2lhdGlvbiBzdGF0dXMsIGFuZCB0aGUgZHJpdmVyCisgKiBtdXN0IHRha2UgY2FyZSBvZiBzZW5kaW5nIG51bGxmdW5jIGZyYW1lcyB3aGVuIG5lY2Vzc2FyeSwgaS5lLiB3aGVuCisgKiBlbnRlcmluZyBhbmQgbGVhdmluZyBwb3dlcnNhdmUgbW9kZS4gVGhlIGRyaXZlciBpcyByZXF1aXJlZCB0byBsb29rIGF0CisgKiB0aGUgQUlEIGluIGJlYWNvbnMgYW5kIHNpZ25hbCB0byB0aGUgQVAgdGhhdCBpdCB3b2tlIHVwIHdoZW4gaXQgZmluZHMKKyAqIHRyYWZmaWMgZGlyZWN0ZWQgdG8gaXQuIFRoaXMgbW9kZSBzdXBwb3J0cyBkeW5hbWljIFBTIGJ5IHNpbXBseQorICogZW5hYmxpbmcvZGlzYWJsaW5nIFBTLgorICoKKyAqIEFkZGl0aW9uYWxseSwgc3VjaCBoYXJkd2FyZSBtYXkgc2V0IHRoZSAlSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMKKyAqIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBpdCBjYW4gc3VwcG9ydCBkeW5hbWljIFBTIG1vZGUgaXRzZWxmIChzZWUgYmVsb3cpLgorICoKKyAqIE90aGVyIGhhcmR3YXJlIGRlc2lnbnMgY2Fubm90IHNlbmQgbnVsbGZ1bmMgZnJhbWVzIGJ5IHRoZW1zZWx2ZXMgYW5kIGFsc28KKyAqIG5lZWQgc29mdHdhcmUgc3VwcG9ydCBmb3IgcGFyc2luZyB0aGUgVElNIGJpdG1hcC4gVGhpcyBpcyBhbHNvIHN1cHBvcnRlZAorICogYnkgbWFjODAyMTEgYnkgY29tYmluaW5nIHRoZSAlSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIGFuZAorICogJUlFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBmbGFncy4gVGhlIGhhcmR3YXJlIGlzIG9mIGNvdXJzZSBzdGlsbAorICogcmVxdWlyZWQgdG8gcGFzcyB1cCBiZWFjb25zLiBBZGRpdGlvbmFsbHksIGluIHRoaXMgY2FzZSwgbWFjODAyMTEgd2lsbAorICogd2FrZSB1cCB0aGUgaGFyZHdhcmUgd2hlbiBtdWx0aWNhc3QgdHJhZmZpYyBpcyBhbm5vdW5jZWQgaW4gdGhlIGJlYWNvbi4KKyAqCisgKiBGSVhNRTogSSBkb24ndCB0aGluayB3ZSBjYW4gYmUgZmFzdCBlbm91Z2ggaW4gc29mdHdhcmUgd2hlbiB3ZSB3YW50IHRvCisgKgkgIHJlY2VpdmUgbXVsdGljYXN0IHRyYWZmaWM/CisgKgorICogRHluYW1pYyBwb3dlcnNhdmUgbW9kZSBpcyBhbiBleHRlbnNpb24gdG8gbm9ybWFsIHBvd2Vyc2F2ZSBtb2RlIGluIHdoaWNoCisgKiB0aGUgaGFyZHdhcmUgc3RheXMgYXdha2UgZm9yIGEgdXNlci1zcGVjaWZpZWQgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgc2VuZGluZworICogYSBmcmFtZSBzbyB0aGF0IHJlcGx5IGZyYW1lcyBuZWVkIG5vdCBiZSBidWZmZXJlZCBhbmQgdGhlcmVmb3JlIGRlbGF5ZWQKKyAqIHRvIHRoZSBuZXh0IHdha2V1cC4gVGhpcyBjYW4gZWl0aGVyIGJlIHN1cHBvcnRlZCBieSBoYXJkd2FyZSwgaW4gd2hpY2ggY2FzZQorICogdGhlIGRyaXZlciBuZWVkcyB0byBsb29rIGF0IHRoZSBAZHluYW1pY19wc190aW1lb3V0IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24KKyAqIHZhbHVlLCBvciBieSB0aGUgc3RhY2sgaWYgYWxsIG51bGxmdW5jIGhhbmRsaW5nIGlzIGluIHRoZSBzdGFjay4KKyAqLworCisvKioKICAqIERPQzogRnJhbWUgZmlsdGVyaW5nCiAgKgogICogbWFjODAyMTEgcmVxdWlyZXMgdG8gc2VlIG1hbnkgbWFuYWdlbWVudCBmcmFtZXMgZm9yIHByb3BlcgpAQCAtMTE3Miw2ICsxMjQzLDggQEAKICAqCWNvbmZpZ3VyYXRpb24gaW4gdGhlIFRYIGNvbnRyb2wgZGF0YS4gVGhpcyBoYW5kbGVyIHNob3VsZCwKICAqCXByZWZlcmFibHksIG5ldmVyIGZhaWwgYW5kIHN0b3AgcXVldWVzIGFwcHJvcHJpYXRlbHksIG1vcmUKICAqCWltcG9ydGFudGx5LCBob3dldmVyLCBpdCBtdXN0IG5ldmVyIGZhaWwgZm9yIEEtTVBEVS1xdWV1ZXMuCisgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gTkVUREVWX1RYX09LIGV4Y2VwdCBpbiB2ZXJ5CisgKglsaW1pdGVkIGNhc2VzLgogICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgYXRvbWljLgogICoKICAqIEBzdGFydDogQ2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZQpAQCAtMTIxMiw5ICsxMjg1LDEyIEBACiAgKgogICogQGNvbmZpZzogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cy4gSUVFRSA4MDIuMTEgY29kZSBjYWxscyB0aGlzCiAgKglmdW5jdGlvbiB0byBjaGFuZ2UgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgZS5nLiwgY2hhbm5lbC4KKyAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGZhaWwgYnV0IHJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKglpZiBpdCBkb2VzLgogICoKICAqIEBjb25maWdfaW50ZXJmYWNlOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzIHJlbGF0ZWQgdG8gaW50ZXJmYWNlcwogICoJKGUuZy4gQlNTSUQgY2hhbmdlcy4pCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSB3aGljaCB3aWxsIGJlIHNlZW4gaW4gdXNlcnNwYWNlLgogICoKICAqIEBic3NfaW5mb19jaGFuZ2VkOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzIHJlbGF0ZWQgdG8gQlNTCiAgKglwYXJhbWV0ZXJzIHRoYXQgbWF5IHZhcnkgZHVyaW5nIEJTUydzIGxpZmVzcGFuLCBhbmQgbWF5IGFmZmVjdCBsb3cKQEAgLTEyMzIsOCArMTMwOCw5IEBACiAgKgogICogQHNldF9rZXk6IFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlvbiIKICAqCVRoaXMgY2FsbGJhY2sgY2FuIHNsZWVwLCBhbmQgaXMgb25seSBjYWxsZWQgYmV0d2VlbiBhZGRfaW50ZXJmYWNlCi0gKglhbmQgcmVtb3ZlX2ludGVyZmFjZSBjYWxscywgaS5lLiB3aGlsZSB0aGUgaW50ZXJmYWNlIHdpdGggdGhlCi0gKglnaXZlbiBsb2NhbF9hZGRyZXNzIGlzIGVuYWJsZWQuCisgKglhbmQgcmVtb3ZlX2ludGVyZmFjZSBjYWxscywgaS5lLiB3aGlsZSB0aGUgZ2l2ZW4gdmlydHVhbCBpbnRlcmZhY2UKKyAqCWlzIGVuYWJsZWQuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGUga2V5IGNhbid0IGJlIGFkZGVkLgogICoKICAqIEB1cGRhdGVfdGtpcF9rZXk6IFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlvbiIKICAqIAlUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIFJ4LiBDYWxsZWQgZm9yIGRyaXZlcnMKQEAgLTEyNDUsOCArMTMyMiwxNiBAQAogICoJYmFuZHMuIFdoZW4gdGhlIHNjYW4gZmluaXNoZXMsIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgpIG11c3QgYmUKICAqCWNhbGxlZDsgbm90ZSB0aGF0IGl0IGFsc28gbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgc2NhbiBjYW5ub3QgZmluaXNoCiAgKgliZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyB0dXJuZWQgb2ZmISBBbnl0aGluZyBlbHNlIGlzIGEgYnVnIQorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4KICAqCi0gKiBAZ2V0X3N0YXRzOiByZXR1cm4gbG93LWxldmVsIHN0YXRpc3RpY3MKKyAqIEBzd19zY2FuX3N0YXJ0OiBOb3RpZmllciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBhIHNvZnR3YXJlIHNjYW4KKyAqCWlzIHN0YXJ0ZWQuIENhbiBiZSBOVUxMLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAc3dfc2Nhbl9jb21wbGV0ZTogTm90aWZpZXIgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQganVzdCBhZnRlciBhIHNvZnR3YXJlIHNjYW4KKyAqCWZpbmlzaGVkLiBDYW4gYmUgTlVMTCwgaWYgdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdGhpcyBub3RpZmljYXRpb24uCisgKgorICogQGdldF9zdGF0czogUmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzLgorICogCVJldHVybnMgemVybyBpZiBzdGF0aXN0aWNzIGFyZSBhdmFpbGFibGUuCiAgKgogICogQGdldF90a2lwX3NlcTogSWYgeW91ciBkZXZpY2UgaW1wbGVtZW50cyBUS0lQIGVuY3J5cHRpb24gaW4gaGFyZHdhcmUgdGhpcwogICoJY2FsbGJhY2sgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHJlYWQgdGhlIFRLSVAgdHJhbnNtaXQgSVZzIChib3RoIElWMzIKQEAgLTEyNjAsNiArMTM0NSw3IEBACiAgKgogICogQGNvbmZfdHg6IENvbmZpZ3VyZSBUWCBxdWV1ZSBwYXJhbWV0ZXJzIChFRENGIChhaWZzLCBjd19taW4sIGN3X21heCksCiAgKglidXJzdGluZykgZm9yIGEgaGFyZHdhcmUgVFggcXVldWUuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICoKICAqIEBnZXRfdHhfc3RhdHM6IEdldCBzdGF0aXN0aWNzIG9mIHRoZSBjdXJyZW50IFRYIHF1ZXVlIHN0YXR1cy4gVGhpcyBpcyB1c2VkCiAgKgl0byBnZXQgbnVtYmVyIG9mIGN1cnJlbnRseSBxdWV1ZWQgcGFja2V0cyAocXVldWUgbGVuZ3RoKSwgbWF4aW11bSBxdWV1ZQpAQCAtMTI2OCw4ICsxMzU0LDEyIEBACiAgKglody0+YW1wZHVfcXVldWVzIGl0ZW1zLgogICoKICAqIEBnZXRfdHNmOiBHZXQgdGhlIGN1cnJlbnQgVFNGIHRpbWVyIHZhbHVlIGZyb20gZmlybXdhcmUvaGFyZHdhcmUuIEN1cnJlbnRseSwKLSAqCXRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgZGVidWdnaW5nIGFuZCwgYXMgc3VjaCwgaXMgbm90IGEKLSAqCXJlcXVpcmVkIGZ1bmN0aW9uLiBNdXN0IGJlIGF0b21pYy4KKyAqCXRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgQlNTSUQgbWVyZ2luZyBhbmQgZGVidWdnaW5nLiBJcyBub3QgYQorICoJcmVxdWlyZWQgZnVuY3Rpb24uCisgKgorICogQHNldF90c2Y6IFNldCB0aGUgVFNGIHRpbWVyIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGZpcm13YXJlL2hhcmR3YXJlLgorICogICAgICBDdXJyZW50bHksIHRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgZGVidWdnaW5nLiBJcyBub3QgYQorICoJcmVxdWlyZWQgZnVuY3Rpb24uCiAgKgogICogQHJlc2V0X3RzZjogUmVzZXQgdGhlIFRTRiB0aW1lciBhbmQgYWxsb3cgZmlybXdhcmUvaGFyZHdhcmUgdG8gc3luY2hyb25pemUKICAqCXdpdGggb3RoZXIgU1RBcyBpbiB0aGUgSUJTUy4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLiBUaGlzCkBAIC0xMjc5LDEzICsxMzY5LDE1IEBACiAgKiBAdHhfbGFzdF9iZWFjb246IERldGVybWluZSB3aGV0aGVyIHRoZSBsYXN0IElCU1MgYmVhY29uIHdhcyBzZW50IGJ5IHVzLgogICoJVGhpcyBpcyBuZWVkZWQgb25seSBmb3IgSUJTUyBtb2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMKICAqCXVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVwbHkgdG8gUHJvYmUgUmVxdWVzdHMuCisgKglSZXR1cm5zIG5vbi16ZXJvIGlmIHRoaXMgZGV2aWNlIHNlbnQgdGhlIGxhc3QgYmVhY29uLgogICoKICAqIEBhbXBkdV9hY3Rpb246IFBlcmZvcm0gYSBjZXJ0YWluIEEtTVBEVSBhY3Rpb24KICAqIAlUaGUgUkEvVElEIGNvbWJpbmF0aW9uIGRldGVybWluZXMgdGhlIGRlc3RpbmF0aW9uIGFuZCBUSUQgd2Ugd2FudAogICogCXRoZSBhbXBkdSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGZvci4gVGhlIGFjdGlvbiBpcyBkZWZpbmVkIHRocm91Z2gKICAqIAlpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24uIFN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciAoQHNzbikKLSAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4gbm90aWNlCisgKiAJaXMgdGhlIGZpcnN0IGZyYW1lIHdlIGV4cGVjdCB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uIE5vdGljZQogICogCXRoYXQgVFgvUlhfU1RPUCBjYW4gcGFzcyBOVUxMIGZvciB0aGlzIHBhcmFtZXRlci4KKyAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfb3BzIHsKIAlpbnQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTMxMCwxMiArMTQwMiwxNSBAQAogCWludCAoKnNldF90aW0pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICAgYm9vbCBzZXQpOwogCWludCAoKnNldF9rZXkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJICAgICAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyZXNzLCBjb25zdCB1OCAqYWRkcmVzcywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogCXZvaWQgKCp1cGRhdGVfdGtpcF9rZXkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqY29uZiwgY29uc3QgdTggKmFkZHJlc3MsCiAJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpOwotCWludCAoKmh3X3NjYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3NpZCwgc2l6ZV90IGxlbik7CisJaW50ICgqaHdfc2Nhbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOworCXZvaWQgKCpzd19zY2FuX3N0YXJ0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnN3X3NjYW5fY29tcGxldGUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCpnZXRfc3RhdHMpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cyk7CiAJdm9pZCAoKmdldF90a2lwX3NlcSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X2tleV9pZHgsCkBAIC0xMzI4LDYgKzE0MjMsNyBAQAogCWludCAoKmdldF90eF9zdGF0cykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogCXU2NCAoKmdldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqc2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpOwogCXZvaWQgKCpyZXNldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCp0eF9sYXN0X2JlYWNvbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmFtcGR1X2FjdGlvbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xNzUyLDggKzE4NDgsOSBAQAogICogbWFjODAyMTEgdGhhdCB0aGUgc2NhbiBmaW5pc2hlZC4KICAqCiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGF0IGZpbmlzaGVkIHRoZSBzY2FuCisgKiBAYWJvcnRlZDogc2V0IHRvIHRydWUgaWYgc2NhbiB3YXMgYWJvcnRlZAogICovCi12b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9ydGVkKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyAtIGl0ZXJhdGUgYWN0aXZlIGludGVyZmFjZXMKQEAgLTE4ODYsNiArMTk4MywxNiBAQAogLyogUmF0ZSBjb250cm9sIEFQSSAqLwogCiAvKioKKyAqIGVudW0gcmF0ZV9jb250cm9sX2NoYW5nZWQgLSBmbGFncyB0byBpbmRpY2F0ZSB3aGljaCBwYXJhbWV0ZXIgY2hhbmdlZAorICoKKyAqIEBJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRDogVGhlIEhUIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGluZyBjaGFubmVsIGhhdmUKKyAqCWNoYW5nZWQsIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FuIHVwZGF0ZSBpdHMgaW50ZXJuYWwgc3RhdGUgaWYgbmVlZGVkLgorICovCitlbnVtIHJhdGVfY29udHJvbF9jaGFuZ2VkIHsKKwlJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRCA9IEJJVCgwKQorfTsKKworLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAtIHJhdGUgY29udHJvbCBpbmZvcm1hdGlvbiBmb3IvZnJvbSBSQyBhbGdvCiAgKgogICogQGh3OiBUaGUgaGFyZHdhcmUgdGhlIGFsZ29yaXRobSBpcyBpbnZva2VkIGZvci4KQEAgLTE5MjEsNiArMjAyOCw5IEBACiAJdm9pZCAqKCphbGxvY19zdGEpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGdmcF90IGdmcCk7CiAJdm9pZCAoKnJhdGVfaW5pdCkodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhKTsKKwl2b2lkICgqcmF0ZV91cGRhdGUpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgdm9pZCAqcHJpdl9zdGEsIHUzMiBjaGFuZ2VkKTsKIAl2b2lkICgqZnJlZV9zdGEpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgdm9pZCAqcHJpdl9zdGEpOwogCkBAIC0xOTYyLDQgKzIwNzIsMzQgQEAKIGludCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwogdm9pZCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcyk7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29uZl9pc19odDIwKHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlyZXR1cm4gY29uZi0+Y2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDIwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQ0MF9taW51cyhzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQ0MF9wbHVzKHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlyZXR1cm4gY29uZi0+Y2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUzsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDAoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mX2lzX2h0NDBfbWludXMoY29uZikgfHwgY29uZl9pc19odDQwX3BsdXMoY29uZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29uZl9pc19odChzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fTk9fSFQ7Cit9CisKICNlbmRpZiAvKiBNQUM4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggMmUwYzUzNi4uNGRmYjc5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMjg3LDcgKzI4Nyw3IEBACiAKIGV4dGVybiBpbnQgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwotZXh0ZXJuIGludCBuZl9jb25udHJhY2tfbWF4OworZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfbWF4OwogCiAjZGVmaW5lIE5GX0NUX1NUQVRfSU5DKG5ldCwgY291bnQpCVwKIAkocGVyX2NwdV9wdHIoKG5ldCktPmN0LnN0YXQsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLT5jb3VudCsrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAppbmRleCBkZWJkYWY3Li5iMDEwNzBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaApAQCAtOTAsMTAgKzkwLDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICptZTsKIH07CiAKLS8qIEV4aXN0aW5nIGJ1aWx0LWluIHByb3RvY29scyAqLwotZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b190Y3A2OwotZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b191ZHA0OwotZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b191ZHA2OworLyogRXhpc3RpbmcgYnVpbHQtaW4gZ2VuZXJpYyBwcm90b2NvbCAqLwogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOwogCiAjZGVmaW5lIE1BWF9ORl9DVF9QUk9UTyAyNTYKQEAgLTEwMSwxMSArOTgsNiBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqCiBfX25mX2N0X2w0cHJvdG9fZmluZCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgbDRwcm90byk7CiAKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgotbmZfY3RfbDRwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgcHJvdG9jb2wpOwotCi1leHRlcm4gdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApOwotCiAvKiBQcm90b2NvbCByZWdpc3RyYXRpb24uICovCiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcHJvdG8pOwogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnByb3RvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaAppbmRleCA3MTgyYzA2Li45MjA5OTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTkZfTE9HX0gKICNkZWZpbmUgX05GX0xPR19ICiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKwogLyogdGhvc2UgTkZfTE9HXyogZGVmaW5lcyBhbmQgc3RydWN0IG5mX2xvZ2luZm8gYXJlIGxlZ2FjeSBkZWZpbml0aW9zIHRoYXQgd2lsbAogICogZGlzYXBwZWFyIG9uY2UgaXB0YWJsZXMgaXMgcmVwbGFjZWQgd2l0aCBwa3R0YWJsZXMuICBQbGVhc2UgRE8gTk9UIHVzZSB0aGVtCiAgKiBmb3IgYW55IG5ldyBjb2RlISAqLwpAQCAtNDAsMTIgKzQyLDE1IEBACiAJc3RydWN0IG1vZHVsZQkqbWU7CiAJbmZfbG9nZm4gCSpsb2dmbjsKIAljaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3RbTkZQUk9UT19OVU1QUk9UT107CiB9OwogCiAvKiBGdW5jdGlvbiB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGxvZyBmdW5jdGlvbi4gKi8KLWludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyX3BmKHVfaW50OF90IHBmKTsKK2ludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Cit2b2lkIG5mX2xvZ191bnJlZ2lzdGVyKHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7CisKK2ludCBuZl9sb2dfYmluZF9wZih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKTsKK3ZvaWQgbmZfbG9nX3VuYmluZF9wZih1X2ludDhfdCBwZik7CiAKIC8qIENhbGxzIHRoZSByZWdpc3RlcmVkIGJhY2tlbmQgbG9nZ2luZyBmdW5jdGlvbiAqLwogdm9pZCBuZl9sb2dfcGFja2V0KHVfaW50OF90IHBmLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCmluZGV4IDk3N2Y0ODIuLjJlYjM4MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKQEAgLTU0LDUgKzU0LDE4IEBACiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBydF9zZWNyZXRfdGltZXI7CiAJYXRvbWljX3QgcnRfZ2VuaWQ7CisKKyNpZmRlZiBDT05GSUdfSVBfTVJPVVRFCisJc3RydWN0IHNvY2sJCSptcm91dGVfc2s7CisJc3RydWN0IG1mY19jYWNoZQkqKm1mY19jYWNoZV9hcnJheTsKKwlzdHJ1Y3QgdmlmX2RldmljZQkqdmlmX3RhYmxlOworCWludAkJCW1heHZpZjsKKwlhdG9taWNfdAkJY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW47CisJaW50CQkJbXJvdXRlX2RvX2Fzc2VydDsKKwlpbnQJCQltcm91dGVfZG9fcGltOworI2lmIGRlZmluZWQoQ09ORklHX0lQX1BJTVNNX1YxKSB8fCBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMikKKwlpbnQJCQltcm91dGVfcmVnX3ZpZl9udW07CisjZW5kaWYKKyNlbmRpZgogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0cm9tLmggYi9pbmNsdWRlL25ldC9uZXRyb20uaAppbmRleCBmMDY4NTJiLi4xNTY5NmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRyb20uaAorKysgYi9pbmNsdWRlL25ldC9uZXRyb20uaApAQCAtNTksMTAgKzU5LDYgQEAKICNkZWZpbmUgTlJfTUFYX1dJTkRPV19TSVpFCQkxMjcJCQkvKiBNYXhpbXVtIFdpbmRvdyBBbGxvd2FibGUgLSAxMjcgKi8KICNkZWZpbmUJTlJfTUFYX1BBQ0tFVF9TSVpFCQkyMzYJCQkvKiBNYXhpbXVtIFBhY2tldCBMZW5ndGggLSAyMzYgKi8KIAotc3RydWN0IG5yX3ByaXZhdGUgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwotfTsKLQogc3RydWN0IG5yX3NvY2sgewogCXN0cnVjdCBzb2NrCQlzb2NrOwogCWF4MjVfYWRkcmVzcwkJdXNlcl9hZGRyLCBzb3VyY2VfYWRkciwgZGVzdF9hZGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oCmluZGV4IDA1N2IwYTguLmQ0M2Y3MWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcGhvbmV0LmgKQEAgLTEwNSw3ICsxMDUsNiBAQAogCiBpbnQgcGhvbmV0X3N5c2N0bF9pbml0KHZvaWQpOwogdm9pZCBwaG9uZXRfc3lzY3RsX2V4aXQodm9pZCk7Ci12b2lkIHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpOwogaW50IGlzaV9yZWdpc3Rlcih2b2lkKTsKIHZvaWQgaXNpX3VucmVnaXN0ZXIodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaCBiL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaAppbmRleCBhYTFjNTlhLi41MDU0ZGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKKysrIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCkBAIC0yOCw3ICsyOCw3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgcG5kZXZzOworc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcGhvbmV0X2RldmljZV9saXN0KHN0cnVjdCBuZXQgKm5ldCk7CiAKIHN0cnVjdCBwaG9uZXRfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0zNiw4ICszNiw5IEBACiAJREVDTEFSRV9CSVRNQVAoYWRkcnMsIDY0KTsKIH07CiAKLXZvaWQgcGhvbmV0X2RldmljZV9pbml0KHZvaWQpOworaW50IHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKTsKIHZvaWQgcGhvbmV0X2RldmljZV9leGl0KHZvaWQpOworaW50IHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpOwogc3RydWN0IG5ldF9kZXZpY2UgKnBob25ldF9kZXZpY2VfZ2V0KHN0cnVjdCBuZXQgKm5ldCk7CiAKIGludCBwaG9uZXRfYWRkcmVzc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDQwODJmMzkuLmUzN2ZlMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC04NSw2ICs4NSw3IEBACiAJCXN0cnVjdCBubGF0dHIgKnRhYik7CiBleHRlcm4gdm9pZCBxZGlzY19wdXRfcnRhYihzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqdGFiKTsKIGV4dGVybiB2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpOworZXh0ZXJuIHZvaWQgcWRpc2Nfd2Fybl9ub253YyhjaGFyICp0eHQsIHN0cnVjdCBRZGlzYyAqcWRpc2MpOwogCiBleHRlcm4gdm9pZCBfX3FkaXNjX3J1bihzdHJ1Y3QgUWRpc2MgKnEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wc25hcC5oIGIvaW5jbHVkZS9uZXQvcHNuYXAuaAppbmRleCBiMmUwMWNjLi5mZTQ1NmMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wc25hcC5oCisrKyBiL2luY2x1ZGUvbmV0L3BzbmFwLmgKQEAgLTEsNyArMSwxMSBAQAogI2lmbmRlZiBfTkVUX1BTTkFQX0gKICNkZWZpbmUgX05FVF9QU05BUF9ICiAKLWV4dGVybiBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnJlZ2lzdGVyX3NuYXBfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmRlc2MsIGludCAoKnJjdmZ1bmMpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpKTsKK2V4dGVybiBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKgorcmVnaXN0ZXJfc25hcF9jbGllbnQoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzYywKKwkJICAgICBpbnQgKCpyY3ZmdW5jKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLAorCQkJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KSk7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3NuYXBfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IGY4YzQ3NDIuLjk2NGZmYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtNDIsMjQgKzQyLDE3IEBACiAJaW50IAkJCSgqZW5xdWV1ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpkZXYpOwogCXN0cnVjdCBza19idWZmICoJKCpkZXF1ZXVlKShzdHJ1Y3QgUWRpc2MgKmRldik7CiAJdW5zaWduZWQJCWZsYWdzOwotI2RlZmluZSBUQ1FfRl9CVUlMVElOCTEKLSNkZWZpbmUgVENRX0ZfVEhST1RUTEVECTIKLSNkZWZpbmUgVENRX0ZfSU5HUkVTUwk0CisjZGVmaW5lIFRDUV9GX0JVSUxUSU4JCTEKKyNkZWZpbmUgVENRX0ZfVEhST1RUTEVECQkyCisjZGVmaW5lIFRDUV9GX0lOR1JFU1MJCTQKKyNkZWZpbmUgVENRX0ZfV0FSTl9OT05XQwkoMSA8PCAxNikKIAlpbnQJCQlwYWRkZWQ7CiAJc3RydWN0IFFkaXNjX29wcwkqb3BzOwogCXN0cnVjdCBxZGlzY19zaXplX3RhYmxlCSpzdGFiOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1MzIJCQloYW5kbGU7CiAJdTMyCQkJcGFyZW50OwogCWF0b21pY190CQlyZWZjbnQ7Ci0JdW5zaWduZWQgbG9uZwkJc3RhdGU7Ci0Jc3RydWN0IHNrX2J1ZmYJCSpnc29fc2tiOwotCXN0cnVjdCBza19idWZmX2hlYWQJcTsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlCSpkZXZfcXVldWU7Ci0Jc3RydWN0IFFkaXNjCQkqbmV4dF9zY2hlZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0KLQlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYwlic3RhdHM7Ci0Jc3RydWN0IGduZXRfc3RhdHNfcXVldWUJcXN0YXRzOwogCXN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0CXJhdGVfZXN0OwogCWludAkJCSgqcmVzaGFwZV9mYWlsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgUWRpc2MgKnEpOwpAQCAtNzAsNiArNjMsMTcgQEAKIAkgKiBhbmQgaXQgd2lsbCBsaXZlIHVudGlsIGJldHRlciBzb2x1dGlvbiB3aWxsIGJlIGludmVudGVkLgogCSAqLwogCXN0cnVjdCBRZGlzYwkJKl9fcGFyZW50OworCXN0cnVjdCBuZXRkZXZfcXVldWUJKmRldl9xdWV1ZTsKKwlzdHJ1Y3QgUWRpc2MJCSpuZXh0X3NjaGVkOworCisJc3RydWN0IHNrX2J1ZmYJCSpnc29fc2tiOworCS8qCisJICogRm9yIHBlcmZvcm1hbmNlIHNha2Ugb24gU01QLCB3ZSBwdXQgaGlnaGx5IG1vZGlmaWVkIGZpZWxkcyBhdCB0aGUgZW5kCisJICovCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlxOworCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljIGJzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CiB9OwogCiBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NoZWNrc3VtLmggYi9pbmNsdWRlL25ldC9zY3RwL2NoZWNrc3VtLmgKaW5kZXggMmZlYzNjMy4uYmVmYzhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaApAQCAtNDYsMTQgKzQ2LDE0IEBACiAjaW5jbHVkZSA8bmV0L3NjdHAvc2N0cC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyYy5oPgogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX2NyYzMyYyhfX2JlMzIgY3JjLCB1OCAqYnVmZmVyLCB1MTYgbGVuZ3RoKQorc3RhdGljIGlubGluZSBfX3UzMiBzY3RwX2NyYzMyYyhfX3UzMiBjcmMsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgpCiB7Ci0JcmV0dXJuIChfX2ZvcmNlIF9fYmUzMiljcmMzMmMoKF9fZm9yY2UgdTMyKWNyYywgYnVmZmVyLCBsZW5ndGgpOworCXJldHVybiBjcmMzMmMoY3JjLCBidWZmZXIsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfc3RhcnRfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgpCitzdGF0aWMgaW5saW5lIF9fdTMyIHNjdHBfc3RhcnRfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgpCiB7Ci0JX19iZTMyIGNyYyA9IH5jcHVfdG9fYmUzMigwKTsKKwlfX3UzMiBjcmMgPSB+KF9fdTMyKTA7CiAJX191OCAgemVyb1tzaXplb2YoX191MzIpXSA9IHswfTsKIAogCS8qIE9wdGltaXplIHRoaXMgcm91dGluZSB0byBiZSBTQ1RQIHNwZWNpZmljLCBrbm93aW5nIGhvdwpAQCAtNzIsMTIgKzcyLDEyIEBACiAJcmV0dXJuIGNyYzsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF91cGRhdGVfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgsIF9fYmUzMiBjcmMzMikKK3N0YXRpYyBpbmxpbmUgX191MzIgc2N0cF91cGRhdGVfY2tzdW0oX191OCAqYnVmZmVyLCBfX3UxNiBsZW5ndGgsIF9fdTMyIGNyYzMyKQogewogCXJldHVybiBzY3RwX2NyYzMyYyhjcmMzMiwgYnVmZmVyLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX2VuZF9ja3N1bShfX2JlMzIgY3JjMzIpCitzdGF0aWMgaW5saW5lIF9fbGUzMiBzY3RwX2VuZF9ja3N1bShfX2JlMzIgY3JjMzIpCiB7Ci0JcmV0dXJuIChfX2ZvcmNlIF9fYmUzMil+Y3B1X3RvX2xlMzIoKF9fZm9yY2UgdTMyKWNyYzMyKTsKKwlyZXR1cm4gY3B1X3RvX2xlMzIofmNyYzMyKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKaW5kZXggODg5ODhhYi4uM2I5NjY4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKQEAgLTc3LDcgKzc3LDggQEAKIAlTQ1RQX0NNRF9IQl9USU1FUlNfU1RBUlQsICAgIC8qIFN0YXJ0IHRoZSBoZWFydGJlYXQgdGltZXJzLiAqLwogCVNDVFBfQ01EX0hCX1RJTUVSX1VQREFURSwgICAgLyogVXBkYXRlIGEgaGVhcnRiZWF0IHRpbWVycy4gICovCiAJU0NUUF9DTURfSEJfVElNRVJTX1NUT1AsICAgICAvKiBTdG9wIHRoZSBoZWFydGJlYXQgdGltZXJzLiAgKi8KLQlTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQsICAgIC8qIFJlc2V0IHRoZSBzdGF0dXMgb2YgYSB0cmFuc3BvcnQuICovCisJU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQsICAvKiBSZXNldCB0aGUgc3RhdHVzIG9mIGEgdHJhbnNwb3J0LiAqLworCVNDVFBfQ01EX1RSQU5TUE9SVF9JRExFLCAgICAgLyogRG8gbWFuaXB1bGF0aW9ucyBvbiBpZGxlIHRyYW5zcG9ydCAqLwogCVNDVFBfQ01EX1RSQU5TUE9SVF9PTiwgICAgICAgLyogTWFyayB0aGUgdHJhbnNwb3J0IGFzIGFjdGl2ZS4gKi8KIAlTQ1RQX0NNRF9SRVBPUlRfRVJST1IsICAgLyogUGFzcyB0aGlzIGVycm9yIGJhY2sgb3V0IG9mIHRoZSBzbS4gKi8KIAlTQ1RQX0NNRF9SRVBPUlRfQkFEX1RBRywgLyogVmVyaWZpY2F0aW9uIHRhZ3MgZGlkbid0IG1hdGNoLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCBiYmI3NzQyLi45ZjgwYTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtNjIsMTMgKzYyLDYgQEAKICAqICAgYW5kIHdpbGwgY29udGludWUgdG8gZXZvbHZlLgogICovCiAKLQotCi0jaWZkZWYgVEVTVF9GUkFNRQotI3VuZGVmIENPTkZJR19TQ1RQX0RCR19PQkpDTlQKLSN1bmRlZiBDT05GSUdfU1lTQ1RMCi0jZW5kaWYgLyogVEVTVF9GUkFNRSAqLwotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KQEAgLTEzOCw2ICsxMzEsOCBAQAogdW5zaWduZWQgaW50IHNjdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJcG9sbF90YWJsZSAqd2FpdCk7CiB2b2lkIHNjdHBfc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgc2N0cF9jb3B5X3NvY2soc3RydWN0IHNvY2sgKm5ld3NrLCBzdHJ1Y3Qgc29jayAqc2ssCisJCSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CiBleHRlcm4gc3RydWN0IHBlcmNwdV9jb3VudGVyIHNjdHBfc29ja2V0c19hbGxvY2F0ZWQ7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDk2NjFkN2IuLjIzZjA4ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0yMTgsNiArMjE4LDEwIEBACiAKIAkvKiBGbGFnIHRvIGlkaWNhdGUgaWYgU0NUUC1BVVRIIGlzIGVuYWJsZWQgKi8KIAlpbnQgYXV0aF9lbmFibGU7CisKKwkvKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgY29tcHV0aW5nIGFuZCB2ZXJpZnlpbmcgY2hlY2tzdW0KKwkgKiBpcyBkaXNhYmxlZC4gKi8KKyAgICAgICAgaW50IGNoZWNrc3VtX2Rpc2FibGU7CiB9IHNjdHBfZ2xvYmFsczsKIAogI2RlZmluZSBzY3RwX3J0b19pbml0aWFsCQkoc2N0cF9nbG9iYWxzLnJ0b19pbml0aWFsKQpAQCAtMjUyLDYgKzI1Niw3IEBACiAjZGVmaW5lIHNjdHBfYWRkaXBfbm9hdXRoCQkoc2N0cF9nbG9iYWxzLmFkZGlwX25vYXV0aF9lbmFibGUpCiAjZGVmaW5lIHNjdHBfcHJzY3RwX2VuYWJsZQkJKHNjdHBfZ2xvYmFscy5wcnNjdHBfZW5hYmxlKQogI2RlZmluZSBzY3RwX2F1dGhfZW5hYmxlCQkoc2N0cF9nbG9iYWxzLmF1dGhfZW5hYmxlKQorI2RlZmluZSBzY3RwX2NoZWNrc3VtX2Rpc2FibGUJCShzY3RwX2dsb2JhbHMuY2hlY2tzdW1fZGlzYWJsZSkKIAogLyogU0NUUCBTb2NrZXQgdHlwZTogVURQIG9yIFRDUCBzdHlsZS4gKi8KIHR5cGVkZWYgZW51bSB7CkBAIC05MDUsOCArOTEwLDEwIEBACiAJICoJCXNob3VsZCBiZSBzZXQuIEV2ZXJ5IHRpbWUgdGhlIFJUVAogCSAqCQljYWxjdWxhdGlvbiBjb21wbGV0ZXMgKGkuZS4gdGhlIERBVEEgY2h1bmsKIAkgKgkJaXMgU0FDSydkKSBjbGVhciB0aGlzIGZsYWcuCisJICogaGJfc2VudCA6IGEgZmxhZyB0aGF0IHNpZ25hbHMgdGhhdCB3ZSBoYXZlIGEgcGVuZGluZyBoZWFydGJlYXQuCiAJICovCiAJX191OCBydG9fcGVuZGluZzsKKwlfX3U4IGhiX3NlbnQ7CiAKIAkvKiBGbGFnIHRvIHRyYWNrIHRoZSBjdXJyZW50IGZhc3QgcmVjb3Zlcnkgc3RhdGUgKi8KIAlfX3U4IGZhc3RfcmVjb3Zlcnk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggZWVmZWVhZi4uNGJiMWZmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMTU4LDcgKzE1OCw3IEBACiAgICoJQHNrX2FsbG9jYXRpb246IGFsbG9jYXRpb24gbW9kZQogICAqCUBza19zbmRidWY6IHNpemUgb2Ygc2VuZCBidWZmZXIgaW4gYnl0ZXMKICAgKglAc2tfZmxhZ3M6ICVTT19MSU5HRVIgKGxfb25vZmYpLCAlU09fQlJPQURDQVNULCAlU09fS0VFUEFMSVZFLAotICAqCQkgICAlU09fT09CSU5MSU5FIHNldHRpbmdzCisgICoJCSAgICVTT19PT0JJTkxJTkUgc2V0dGluZ3MsICVTT19USU1FU1RBTVBJTkcgc2V0dGluZ3MKICAgKglAc2tfbm9fY2hlY2s6ICVTT19OT19DSEVDSyBzZXR0aW5nLCB3ZXRoZXIgb3Igbm90IGNoZWNrdXAgcGFja2V0cwogICAqCUBza19yb3V0ZV9jYXBzOiByb3V0ZSBjYXBhYmlsaXRpZXMgKGUuZy4gJU5FVElGX0ZfVFNPKQogICAqCUBza19nc29fdHlwZTogR1NPIHR5cGUgKGUuZy4gJVNLQl9HU09fVENQVjQpCkBAIC00ODgsNiArNDg4LDEzIEBACiAJU09DS19SQ1ZUU1RBTVBOUywgLyogJVNPX1RJTUVTVEFNUE5TIHNldHRpbmcgKi8KIAlTT0NLX0xPQ0FMUk9VVEUsIC8qIHJvdXRlIGxvY2FsbHkgb25seSwgJVNPX0RPTlRST1VURSBzZXR0aW5nICovCiAJU09DS19RVUVVRV9TSFJVTkssIC8qIHdyaXRlIHF1ZXVlIGhhcyBiZWVuIHNocnVuayByZWNlbnRseSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFLCAgLyogJVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSwgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUsICAvKiAlU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFLCAgLyogJVNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSwgICAgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFLCAvKiAlU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUsIC8qICVTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSAqLwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvY2tfY29weV9mbGFncyhzdHJ1Y3Qgc29jayAqbnNrLCBzdHJ1Y3Qgc29jayAqb3NrKQpAQCAtOTQ0LDYgKzk1MSwxMSBAQAogCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCQkgICAgIGludCBub2Jsb2NrLAogCQkJCQkJICAgICBpbnQgKmVycmNvZGUpOworZXh0ZXJuIHN0cnVjdCBza19idWZmIAkJKnNvY2tfYWxsb2Nfc2VuZF9wc2tiKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW4sCisJCQkJCQkgICAgICBpbnQgbm9ibG9jaywKKwkJCQkJCSAgICAgIGludCAqZXJyY29kZSk7CiBleHRlcm4gdm9pZCAqc29ja19rbWFsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUsCiAJCQkgIGdmcF90IHByaW9yaXR5KTsKIGV4dGVybiB2b2lkIHNvY2tfa2ZyZWVfcyhzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKm1lbSwgaW50IHNpemUpOwpAQCAtMTM0MCwxNCArMTM1Miw0NSBAQAogc29ja19yZWN2X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlrdGltZV90IGt0ID0gc2tiLT50c3RhbXA7CisJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMgPSBza2JfaHd0c3RhbXBzKHNrYik7CiAKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCkpCisJLyoKKwkgKiBnZW5lcmF0ZSBjb250cm9sIG1lc3NhZ2VzIGlmCisJICogLSByZWNlaXZlIHRpbWUgc3RhbXBpbmcgaW4gc29mdHdhcmUgcmVxdWVzdGVkIChTT0NLX1JDVlRTVEFNUAorCSAqICAgb3IgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpCisJICogLSBzb2Z0d2FyZSB0aW1lIHN0YW1wIGF2YWlsYWJsZSBhbmQgd2FudGVkCisJICogICAoU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUpCisJICogLSBoYXJkd2FyZSB0aW1lIHN0YW1wcyBhdmFpbGFibGUgYW5kIHdhbnRlZAorCSAqICAgKFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSBvcgorCSAqICAgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKQorCSAqLworCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKSB8fAorCSAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSB8fAorCSAgICAoa3QudHY2NCAmJiBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkgfHwKKwkgICAgKGh3dHN0YW1wcy0+aHd0c3RhbXAudHY2NCAmJgorCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpKSB8fAorCSAgICAoaHd0c3RhbXBzLT5zeXN0c3RhbXAudHY2NCAmJgorCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpKSkKIAkJX19zb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIHNrYik7CiAJZWxzZQogCQlzay0+c2tfc3RhbXAgPSBrdDsKIH0KIAogLyoqCisgKiBzb2NrX3R4X3RpbWVzdGFtcCAtIGNoZWNrcyB3aGV0aGVyIHRoZSBvdXRnb2luZyBwYWNrZXQgaXMgdG8gYmUgdGltZSBzdGFtcGVkCisgKiBAbXNnOglvdXRnb2luZyBwYWNrZXQKKyAqIEBzazoJCXNvY2tldCBzZW5kaW5nIHRoaXMgcGFja2V0CisgKiBAc2h0eDoJZmlsbGVkIHdpdGggaW5zdHJ1Y3Rpb25zIGZvciB0aW1lIHN0YW1waW5nCisgKgorICogQ3VycmVudGx5IG9ubHkgZGVwZW5kcyBvbiBTT0NLX1RJTUVTVEFNUElORyogZmxhZ3MuIFJldHVybnMgZXJyb3IgY29kZSBpZgorICogcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAqLworZXh0ZXJuIGludCBzb2NrX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csCisJCQkgICAgIHN0cnVjdCBzb2NrICpzaywKKwkJCSAgICAgdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCk7CisKKworLyoqCiAgKiBza19lYXRfc2tiIC0gUmVsZWFzZSBhIHNrYiBpZiBpdCBpcyBubyBsb25nZXIgbmVlZGVkCiAgKiBAc2s6IHNvY2tldCB0byBlYXQgdGhpcyBza2IgZnJvbQogICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBlYXQKQEAgLTE0MTUsNyArMTQ1OCw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWV4dGVybiB2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpOwogZXh0ZXJuIGludCBzb2NrX2dldF90aW1lc3RhbXAoc3RydWN0IHNvY2sgKiwgc3RydWN0IHRpbWV2YWwgX191c2VyICopOwogZXh0ZXJuIGludCBzb2NrX2dldF90aW1lc3RhbXBucyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDIxODIzNWQuLmU1NGM3NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC00ODEsNyArNDgxLDE2IEBACiB9CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpOwotZXh0ZXJuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFyZ2UpOworZXh0ZXJuIHVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKTsKKworLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqLworc3RhdGljIGlubGluZSBpbnQgdGNwX2JvdW5kX3RvX2hhbGZfd25kKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBwa3RzaXplKQoreworCWlmICh0cC0+bWF4X3dpbmRvdyAmJiBwa3RzaXplID4gKHRwLT5tYXhfd2luZG93ID4+IDEpKQorCQlyZXR1cm4gbWF4KHRwLT5tYXhfd2luZG93ID4+IDEsIDY4VSAtIHRwLT50Y3BfaGVhZGVyX2xlbik7CisJZWxzZQorCQlyZXR1cm4gcGt0c2l6ZTsKK30KIAogLyogdGNwLmMgKi8KIGV4dGVybiB2b2lkIHRjcF9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGNwX2luZm8gKik7CkBAIC02ODUsNiArNjk0LDcgQEAKIGV4dGVybiBpbnQgdGNwX3NldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICphbGxvd2VkKTsKIGV4dGVybiBpbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIHRjcF9zbG93X3N0YXJ0KHN0cnVjdCB0Y3Bfc29jayAqdHApOworZXh0ZXJuIHZvaWQgdGNwX2NvbmdfYXZvaWRfYWkoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHcpOwogCiBleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfaW5pdF9jb25nZXN0aW9uX29wczsKIGV4dGVybiB1MzIgdGNwX3Jlbm9fc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKTsKQEAgLTgyMSwxNSArODMxLDE1IEBACiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKLQlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2ssIDEpLCB0cC0+bm9uYWdsZSk7CisJX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSwgdHAtPm5vbmFnbGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2luaXRfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIGFjaywgdTMyIHNlcSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfaW5pdF93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgc2VxKQogewogCXRwLT5zbmRfd2wxID0gc2VxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3VwZGF0ZV93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrLCB1MzIgc2VxKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF91cGRhdGVfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNlcSkKIHsKIAl0cC0+c25kX3dsMSA9IHNlcTsKIH0KQEAgLTkyNSw3ICs5MzUsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9zYWNrX3Jlc2V0KHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0KQogewogCXJ4X29wdC0+ZHNhY2sgPSAwOwotCXJ4X29wdC0+ZWZmX3NhY2tzID0gMDsKIAlyeF9vcHQtPm51bV9zYWNrcyA9IDA7CiB9CiAKQEAgLTk5NywxMSArMTAwNiwyMSBAQAogCXJldHVybiBmaW5fdGltZW91dDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGNwX3Bhd3NfY2hlY2soY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsIGludCByc3QpCitzdGF0aWMgaW5saW5lIGludCB0Y3BfcGF3c19jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCwKKwkJCQkgaW50IHBhd3Nfd2luKQogewotCWlmICgoczMyKShyeF9vcHQtPnJjdl90c3ZhbCAtIHJ4X29wdC0+dHNfcmVjZW50KSA+PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAoZ2V0X3NlY29uZHMoKSA+PSByeF9vcHQtPnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykKKwlpZiAoKHMzMikocnhfb3B0LT50c19yZWNlbnQgLSByeF9vcHQtPnJjdl90c3ZhbCkgPD0gcGF3c193aW4pCisJCXJldHVybiAxOworCWlmICh1bmxpa2VseShnZXRfc2Vjb25kcygpID49IHJ4X29wdC0+dHNfcmVjZW50X3N0YW1wICsgVENQX1BBV1NfMjREQVlTKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGNwX3Bhd3NfcmVqZWN0KGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LAorCQkJCSAgaW50IHJzdCkKK3sKKwlpZiAodGNwX3Bhd3NfY2hlY2socnhfb3B0LCAwKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBSU1Qgc2VnbWVudHMgYXJlIG5vdCByZWNvbW1lbmRlZCB0byBjYXJyeSB0aW1lc3RhbXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaCBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCmluZGV4IDg3NmI2ZjIuLmJmYjI0MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCisrKyBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCkBAIC00Niw3ICs0Niw3IEBACiAJCQkJCQkgIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LAogCQkJCQkJICBpbnQgKmhsaW1pdCwgaW50ICp0Y2xhc3MpOwogCi0jZGVmaW5lCQlMT09QQkFDSzRfSVBWNgkJX19jb25zdGFudF9odG9ubCgweDdmMDAwMDA2KQorI2RlZmluZQkJTE9PUEJBQ0s0X0lQVjYJCWNwdV90b19iZTMyKDB4N2YwMDAwMDYpCiAKIC8qCiAgKglhZGRyZXNzIGZhbWlseSBzcGVjaWZpYyBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3VkcC5oIGIvaW5jbHVkZS9uZXQvdWRwLmgKaW5kZXggOTBlNmNlNS4uOTNkYmUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdWRwLmgKKysrIGIvaW5jbHVkZS9uZXQvdWRwLmgKQEAgLTEyNCw2ICsxMjQsOCBAQAogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIH0KIAorZXh0ZXJuIGludAlpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKIGV4dGVybiBpbnQJdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCiAJCWludCAoKikoY29uc3Qgc3RydWN0IHNvY2sqLGNvbnN0IHN0cnVjdCBzb2NrKikpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oIGIvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaAppbmRleCAyMWM1ZDk2Li42NGE3NjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKQEAgLTY5LDYgKzY5LDkgQEAKICAqIEBiYW5kOiBiYW5kIHRoaXMgY2hhbm5lbCBiZWxvbmdzIHRvLgogICogQG1heF9hbnRlbm5hX2dhaW46IG1heGltdW0gYW50ZW5uYSBnYWluIGluIGRCaQogICogQG1heF9wb3dlcjogbWF4aW11bSB0cmFuc21pc3Npb24gcG93ZXIgKGluIGRCbSkKKyAqIEBiZWFjb25fZm91bmQ6IGhlbHBlciB0byByZWd1bGF0b3J5IGNvZGUgdG8gaW5kaWNhdGUgd2hlbiBhIGJlYWNvbgorICoJaGFzIGJlZW4gZm91bmQgb24gdGhpcyBjaGFubmVsLiBVc2UgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbigpCisgKgl0byBlbmFibGUgdGhpcywgdGhpcyBpcyBpcyB1c2VmdWwgb25seSBvbiA1IEdIeiBiYW5kLgogICogQG9yaWdfbWFnOiBpbnRlcm5hbCB1c2UKICAqIEBvcmlnX21wd3I6IGludGVybmFsIHVzZQogICovCkBAIC04MCw2ICs4Myw3IEBACiAJdTMyIGZsYWdzOwogCWludCBtYXhfYW50ZW5uYV9nYWluOwogCWludCBtYXhfcG93ZXI7CisJYm9vbCBiZWFjb25fZm91bmQ7CiAJdTMyIG9yaWdfZmxhZ3M7CiAJaW50IG9yaWdfbWFnLCBvcmlnX21wd3I7CiB9OwpAQCAtMTgxLDEyICsxODUsMjYgQEAKICAqIHN0cnVjdCB3aXBoeSAtIHdpcmVsZXNzIGhhcmR3YXJlIGRlc2NyaXB0aW9uCiAgKiBAaWR4OiB0aGUgd2lwaHkgaW5kZXggYXNzaWduZWQgdG8gdGhpcyBpdGVtCiAgKiBAY2xhc3NfZGV2OiB0aGUgY2xhc3MgZGV2aWNlIHJlcHJlc2VudGluZyAvc3lzL2NsYXNzL2llZWU4MDIxMS88d2lwaHktbmFtZT4KLSAqIEBmd19oYW5kbGVzX3JlZ3VsYXRvcnk6IHRlbGxzIHVzIHRoZSBmaXJtd2FyZSBmb3IgdGhpcyBkZXZpY2UKLSAqIAloYXMgaXRzIG93biByZWd1bGF0b3J5IHNvbHV0aW9uIGFuZCBjYW5ub3QgaWRlbnRpZnkgdGhlCisgKiBAY3VzdG9tX3JlZ3VsYXRvcnk6IHRlbGxzIHVzIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlCisgKiAJaGFzIGl0cyBvd24gY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCBjYW5ub3QgaWRlbnRpZnkgdGhlCiAgKiAJSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGl0IGJlbG9uZ3MgdG8uIFdoZW4gdGhpcyBpcyBlbmFibGVkCiAgKiAJd2Ugd2lsbCBkaXNyZWdhcmQgdGhlIGZpcnN0IHJlZ3VsYXRvcnkgaGludCAod2hlbiB0aGUKICAqIAlpbml0aWF0b3IgaXMgJVJFR0RPTV9TRVRfQllfQ09SRSkuCisgKiBAc3RyaWN0X3JlZ3VsYXRvcnk6IHRlbGxzIHVzIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlIHdpbGwgaWdub3JlCisgKiAJcmVndWxhdG9yeSBkb21haW4gc2V0dGluZ3MgdW50aWwgaXQgZ2V0cyBpdHMgb3duIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJdmlhIGl0cyByZWd1bGF0b3J5X2hpbnQoKS4gQWZ0ZXIgaXRzIGdldHMgaXRzIG93biByZWd1bGF0b3J5IGRvbWFpbgorICogCWl0IHdpbGwgb25seSBhbGxvdyBmdXJ0aGVyIHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHRvIGZ1cnRoZXIKKyAqIAllbmhhbmNlIGNvbXBsaWFuY2UuIEZvciBleGFtcGxlIGlmIGNoYW5uZWwgMTMgYW5kIDE0IGFyZSBkaXNhYmxlZAorICogCWJ5IHRoaXMgcmVndWxhdG9yeSBkb21haW4gbm8gdXNlciByZWd1bGF0b3J5IGRvbWFpbiBjYW4gZW5hYmxlIHRoZXNlCisgKiAJY2hhbm5lbHMgYXQgYSBsYXRlciB0aW1lLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdAorICogCWhhdmUgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gZ2F1cmFudGVlZCBmb3IgZnJlcXVlbmNpZXMgb3Igc2V0dGluZ3MKKyAqIAlvdXRzaWRlIG9mIGl0cyByZWd1bGF0b3J5IGRvbWFpbi4KICAqIEByZWdfbm90aWZpZXI6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IG5vdGlmaWNhdGlvbiBjYWxsYmFjaworICogQHJlZ2Q6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IGRvbWFpbiwgaWYgb25lIHdhcyByZXF1ZXN0ZWQgdmlhCisgKiAJdGhlIHJlZ3VsYXRvcnlfaGludCgpIEFQSS4gVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZHJpdmVyCisgKglvbiB0aGUgcmVnX25vdGlmaWVyKCkgaWYgaXQgY2hvb3NlcyB0byBpZ25vcmUgZnV0dXJlCisgKglyZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzIGNhdXNlZCBieSBvdGhlciBkcml2ZXJzLgorICogQHNpZ25hbF90eXBlOiBzaWduYWwgdHlwZSByZXBvcnRlZCBpbiAmc3RydWN0IGNmZzgwMjExX2Jzcy4KICAqLwogc3RydWN0IHdpcGh5IHsKIAkvKiBhc3NpZ24gdGhlc2UgZmllbGRzIGJlZm9yZSB5b3UgcmVnaXN0ZXIgdGhlIHdpcGh5ICovCkBAIC0xOTcsNyArMjE1LDEzIEBACiAJLyogU3VwcG9ydGVkIGludGVyZmFjZSBtb2RlcywgT1IgdG9nZXRoZXIgQklUKE5MODAyMTFfSUZUWVBFXy4uLikgKi8KIAl1MTYgaW50ZXJmYWNlX21vZGVzOwogCi0JYm9vbCBmd19oYW5kbGVzX3JlZ3VsYXRvcnk7CisJYm9vbCBjdXN0b21fcmVndWxhdG9yeTsKKwlib29sIHN0cmljdF9yZWd1bGF0b3J5OworCisJZW51bSBjZmc4MDIxMV9zaWduYWxfdHlwZSBzaWduYWxfdHlwZTsKKworCWludCBic3NfcHJpdl9zaXplOworCXU4IG1heF9zY2FuX3NzaWRzOwogCiAJLyogSWYgbXVsdGlwbGUgd2lwaHlzIGFyZSByZWdpc3RlcmVkIGFuZCB5b3UncmUgaGFuZGVkIGUuZy4KIAkgKiBhIHJlZ3VsYXIgbmV0ZGV2IHdpdGggYXNzaWduZWQgaWVlZTgwMjExX3B0ciwgeW91IHdvbid0CkBAIC0yMDksMTAgKzIzMywxMyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCiAJLyogTGV0cyB1cyBnZXQgYmFjayB0aGUgd2lwaHkgb24gdGhlIGNhbGxiYWNrICovCi0JaW50ICgqcmVnX25vdGlmaWVyKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpOworCWludCAoKnJlZ19ub3RpZmllcikoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAogCS8qIGZpZWxkcyBiZWxvdyBhcmUgcmVhZC1vbmx5LCBhc3NpZ25lZCBieSBjZmc4MDIxMSAqLwogCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CisKIAkvKiB0aGUgaXRlbSBpbiAvc3lzL2NsYXNzL2llZWU4MDIxMS8gcG9pbnRzIHRvIHRoaXMsCiAJICogeW91IG5lZWQgdXNlIHNldF93aXBoeV9kZXYoKSAoc2VlIGJlbG93KSAqLwogCXN0cnVjdCBkZXZpY2UgZGV2OwpAQCAtMzYxLDcgKzM4OCw3IEBACiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqCiBpZWVlODAyMTFfZ2V0X3Jlc3BvbnNlX3JhdGUoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCi0JCQkgICAgdTY0IGJhc2ljX3JhdGVzLCBpbnQgYml0cmF0ZSk7CisJCQkgICAgdTMyIGJhc2ljX3JhdGVzLCBpbnQgYml0cmF0ZSk7CiAKIC8qKgogICogcmVndWxhdG9yeV9oaW50IC0gZHJpdmVyIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUgYSByZWd1bGF0b3J5IGRvbWFpbgpAQCAtMzc4LDggKzQwNSwxNSBAQAogICogZG9tYWluIHNob3VsZCBiZSBpbiBvciBieSBwcm92aWRpbmcgYSBjb21wbGV0ZWx5IGJ1aWxkIHJlZ3VsYXRvcnkgZG9tYWluLgogICogSWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbiBJU08vSUVDIDMxNjYgYWxwaGEyIHVzZXJzcGFjZSB3aWxsIGJlIHF1ZXJpZWQKICAqIGZvciBhIHJlZ3VsYXRvcnkgZG9tYWluIHN0cnVjdHVyZSBmb3IgdGhlIHJlc3BlY3RpdmUgY291bnRyeS4KKyAqCisgKiBUaGUgd2lwaHkgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCB0byBjZmc4MDIxMSBwcmlvciB0byB0aGlzIGNhbGwuCisgKiBGb3IgY2ZnODAyMTEgZHJpdmVycyB0aGlzIG1lYW5zIHlvdSBtdXN0IGZpcnN0IHVzZSB3aXBoeV9yZWdpc3RlcigpLAorICogZm9yIG1hYzgwMjExIGRyaXZlcnMgeW91IG11c3QgZmlyc3QgdXNlIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpLgorICoKKyAqIERyaXZlcnMgc2hvdWxkIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIGl0cyBwb3NzaWJsZSB5b3UgY2FuIGdldAorICogYW4gLUVOT01FTS4KICAqLwotZXh0ZXJuIHZvaWQgcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGNvbnN0IGNoYXIgKmFscGhhMik7CitleHRlcm4gaW50IHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpOwogCiAvKioKICAqIHJlZ3VsYXRvcnlfaGludF8xMWQgLSBoaW50cyBhIGNvdW50cnkgSUUgYXMgYSByZWd1bGF0b3J5IGRvbWFpbgpAQCAtMzk1LDQgKzQyOSw0NCBAQAogZXh0ZXJuIHZvaWQgcmVndWxhdG9yeV9oaW50XzExZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCXU4ICpjb3VudHJ5X2llLAogCQkJCXU4IGNvdW50cnlfaWVfbGVuKTsKKy8qKgorICogd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkgLSBhcHBseSBhIGN1c3RvbSBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4KKyAqIEB3aXBoeTogdGhlIHdpcmVsZXNzIGRldmljZSB3ZSB3YW50IHRvIHByb2Nlc3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIG9uCisgKiBAcmVnZDogdGhlIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbiB0byB1c2UgZm9yIHRoaXMgd2lwaHkKKyAqCisgKiBEcml2ZXJzIGNhbiBzb21ldGltZXMgaGF2ZSBjdXN0b20gcmVndWxhdG9yeSBkb21haW5zIHdoaWNoIGRvIG5vdCBhcHBseQorICogdG8gYSBzcGVjaWZpYyBjb3VudHJ5LiBEcml2ZXJzIGNhbiB1c2UgdGhpcyB0byBhcHBseSBzdWNoIGN1c3RvbSByZWd1bGF0b3J5CisgKiBkb21haW5zLiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gd2lwaHkgcmVnaXN0cmF0aW9uLiBUaGUKKyAqIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbiB3aWxsIGJlIHRydXN0ZWQgY29tcGxldGVseSBhbmQgYXMgc3VjaCBwcmV2aW91cworICogZGVmYXVsdCBjaGFubmVsIHNldHRpbmdzIHdpbGwgYmUgZGlzcmVnYXJkZWQuIElmIG5vIHJ1bGUgaXMgZm91bmQgZm9yIGEKKyAqIGNoYW5uZWwgb24gdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZSBjaGFubmVsIHdpbGwgYmUgZGlzYWJsZWQuCisgKi8KK2V4dGVybiB2b2lkIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KAorCXN0cnVjdCB3aXBoeSAqd2lwaHksCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpOworCisvKioKKyAqIGZyZXFfcmVnX2luZm8gLSBnZXQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeQorICogQHdpcGh5OiB0aGUgd2lwaHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGlzIHJ1bGUgZm9yCisgKiBAY2VudGVyX2ZyZXE6IEZyZXF1ZW5jeSBpbiBLSHogZm9yIHdoaWNoIHdlIHdhbnQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IKKyAqIEBiYW5kd2lkdGg6IHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnQgeW91IGhhdmUgaW4gS0h6LCBpZiB5b3UgZG8gbm90IGhhdmUgb25lCisgKiAJeW91IGNhbiBzZXQgdGhpcyB0byAwLiBJZiB0aGlzIGZyZXF1ZW5jeSBpcyBhbGxvd2VkIHdlIHRoZW4gc2V0CisgKiAJdGhpcyB2YWx1ZSB0byB0aGUgbWF4aW11bSBhbGxvd2VkIGJhbmR3aWR0aC4KKyAqIEByZWdfcnVsZTogdGhlIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCB3ZSBoYXZlIGZvciB0aGlzIGZyZXF1ZW5jeQorICoKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgcmVndWxhdG9yeSBydWxlIGZvciBhIHNwZWNpZmljIGZyZXF1ZW5jeSBvbgorICogYSBnaXZlbiB3aXJlbGVzcyBkZXZpY2UuIElmIHRoZSBkZXZpY2UgaGFzIGEgc3BlY2lmaWMgcmVndWxhdG9yeSBkb21haW4KKyAqIGl0IHdhbnRzIHRvIGZvbGxvdyB3ZSByZXNwZWN0IHRoYXQgdW5sZXNzIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNlaXZlZAorICogYW5kIHByb2Nlc3NlZCBhbHJlYWR5LgorICoKKyAqIFJldHVybnMgMCBpZiBpdCB3YXMgYWJsZSB0byBmaW5kIGEgdmFsaWQgcmVndWxhdG9yeSBydWxlIHdoaWNoIGRvZXMKKyAqIGFwcGx5IHRvIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBvdGhlcndpc2UgaXQgcmV0dXJucyBub24temVyby4gSXQgd2lsbAorICogYWxzbyByZXR1cm4gLUVSQU5HRSBpZiB3ZSBkZXRlcm1pbmUgdGhlIGdpdmVuIGNlbnRlcl9mcmVxIGRvZXMgbm90IGV2ZW4gaGF2ZQorICogYSByZWd1bGF0b3J5IHJ1bGUgZm9yIGEgZnJlcXVlbmN5IHJhbmdlIGluIHRoZSBjZW50ZXJfZnJlcSdzIGJhbmQuIFNlZQorICogZnJlcV9pbl9ydWxlX2JhbmQoKSBmb3Igb3VyIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBhIGJhbmQgLS0gdGhpcyBpcyBwdXJlbHkKKyAqIHN1YmplY3RpdmUgYW5kIHJpZ2h0IG5vdyBpdHMgODAyLjExIHNwZWNpZmljLgorICovCitleHRlcm4gaW50IGZyZXFfcmVnX2luZm8oc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNlbnRlcl9mcmVxLCB1MzIgKmJhbmR3aWR0aCwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUpOworCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2NtLmggYi9pbmNsdWRlL3JkbWEvaWJfY20uaAppbmRleCBlYzdjNmQ5Li45Mzg4NTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfY20uaApAQCAtMzE0LDEyICszMTQsMTIgQEAKICAqLwogdm9pZCBpYl9kZXN0cm95X2NtX2lkKHN0cnVjdCBpYl9jbV9pZCAqY21faWQpOwogCi0jZGVmaW5lIElCX1NFUlZJQ0VfSURfQUdOX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGMDAwMDAwMDAwMDAwMDBVTEwpCi0jZGVmaW5lIElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMjAwMDAwMDAwMDAwMDAwVUxMKQotI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRAlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDAwMDAwMDAwMTAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSURfTUFTSwlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4RkZGRkZGRkZGRjAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfU0RQX1NFUlZJQ0VfSUQJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAwMDAwMDAwMDAwMTAwMDBVTEwpCi0jZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lEX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGRkZGRkZGRkZGRjAwMDBVTEwpCisjZGVmaW5lIElCX1NFUlZJQ0VfSURfQUdOX01BU0sJY3B1X3RvX2JlNjQoMHhGRjAwMDAwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAyMDAwMDAwMDAwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lECWNwdV90b19iZTY0KDB4MDAwMDAwMDAwMTAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSURfTUFTSwljcHVfdG9fYmU2NCgweEZGRkZGRkZGRkYwMDAwMDBVTEwpCisjZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lECWNwdV90b19iZTY0KDB4MDAwMDAwMDAwMDAxMDAwMFVMTCkKKyNkZWZpbmUgSUJfU0RQX1NFUlZJQ0VfSURfTUFTSwljcHVfdG9fYmU2NCgweEZGRkZGRkZGRkZGRjAwMDBVTEwpCiAKIHN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgewogCXU4ICBkYXRhW0lCX0NNX0NPTVBBUkVfU0laRV07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfbWFkLmggYi9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKaW5kZXggNWY2YzQwZi4uZDNiOTQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX21hZC5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9tYWQuaApAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lCUlCX01HTVRfUk1QUF9TVEFUVVNfQUJPUlRfTUFYCQkxMjcKIAogI2RlZmluZSBJQl9RUDAJCTAKLSNkZWZpbmUgSUJfUVAxCQlfX2NvbnN0YW50X2h0b25sKDEpCisjZGVmaW5lIElCX1FQMQkJY3B1X3RvX2JlMzIoMSkKICNkZWZpbmUgSUJfUVAxX1FLRVkJMHg4MDAxMDAwMAogI2RlZmluZSBJQl9RUF9TRVRfUUtFWQkweDgwMDAwMDAwCiAKQEAgLTI5MCw3ICsyOTAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaWJfc2V0X3JtcHBfZmxhZ3Moc3RydWN0IGliX3JtcHBfaGRyICpybXBwX2hkciwgdTggZmxhZ3MpCiB7Ci0Jcm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgPSAocm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgJiAweEYxKSB8CisJcm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgPSAocm1wcF9oZHItPnJtcHBfcnRpbWVfZmxhZ3MgJiAweEY4KSB8CiAJCQkJICAgICAoZmxhZ3MgJiAweDcpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfc21pLmggYi9pbmNsdWRlL3JkbWEvaWJfc21pLmgKaW5kZXggYWFjYTA4Ny4uOThiOTA4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3NtaS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9zbWkuaApAQCAtNjMsMjUgKzYzLDI1IEBACiAJdTgJcmV0dXJuX3BhdGhbSUJfU01QX01BWF9QQVRIX0hPUFNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSUJfU01QX0RJUkVDVElPTgkJCV9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKQorI2RlZmluZSBJQl9TTVBfRElSRUNUSU9OCQkJY3B1X3RvX2JlMTYoMHg4MDAwKQogCiAvKiBTdWJuZXQgbWFuYWdlbWVudCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIElCX1NNUF9BVFRSX05PVElDRQkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0RFU0MJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1NXSVRDSF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTIpCi0jZGVmaW5lIElCX1NNUF9BVFRSX0dVSURfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE0KQotI2RlZmluZSBJQl9TTVBfQVRUUl9QT1JUX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUEtFWV9UQUJMRQkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE2KQotI2RlZmluZSBJQl9TTVBfQVRUUl9TTF9UT19WTF9UQUJMRQkJX19jb25zdGFudF9odG9ucygweDAwMTcpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZMX0FSQl9UQUJMRQkJX19jb25zdGFudF9odG9ucygweDAwMTgpCi0jZGVmaW5lIElCX1NNUF9BVFRSX0xJTkVBUl9GT1JXQVJEX1RBQkxFCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE5KQotI2RlZmluZSBJQl9TTVBfQVRUUl9SQU5ET01fRk9SV0FSRF9UQUJMRQlfX2NvbnN0YW50X2h0b25zKDB4MDAxQSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfTUNBU1RfRk9SV0FSRF9UQUJMRQkJX19jb25zdGFudF9odG9ucygweDAwMUIpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1NNX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAyMCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX0RJQUcJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAzMCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfTEVEX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAzMSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX01BU0sJCQlfX2NvbnN0YW50X2h0b25zKDB4RkYwMCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfTk9USUNFCQkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0RFU0MJCQljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1NNUF9BVFRSX05PREVfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxMSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfU1dJVENIX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTIpCisjZGVmaW5lIElCX1NNUF9BVFRSX0dVSURfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxNCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUE9SVF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDE1KQorI2RlZmluZSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFCQkJY3B1X3RvX2JlMTYoMHgwMDE2KQorI2RlZmluZSBJQl9TTVBfQVRUUl9TTF9UT19WTF9UQUJMRQkJY3B1X3RvX2JlMTYoMHgwMDE3KQorI2RlZmluZSBJQl9TTVBfQVRUUl9WTF9BUkJfVEFCTEUJCWNwdV90b19iZTE2KDB4MDAxOCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfTElORUFSX0ZPUldBUkRfVEFCTEUJY3B1X3RvX2JlMTYoMHgwMDE5KQorI2RlZmluZSBJQl9TTVBfQVRUUl9SQU5ET01fRk9SV0FSRF9UQUJMRQljcHVfdG9fYmUxNigweDAwMUEpCisjZGVmaW5lIElCX1NNUF9BVFRSX01DQVNUX0ZPUldBUkRfVEFCTEUJCWNwdV90b19iZTE2KDB4MDAxQikKKyNkZWZpbmUgSUJfU01QX0FUVFJfU01fSU5GTwkJCWNwdV90b19iZTE2KDB4MDAyMCkKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX0RJQUcJCQljcHVfdG9fYmUxNigweDAwMzApCisjZGVmaW5lIElCX1NNUF9BVFRSX0xFRF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDMxKQorI2RlZmluZSBJQl9TTVBfQVRUUl9WRU5ET1JfTUFTSwkJCWNwdV90b19iZTE2KDB4RkYwMCkKIAogc3RydWN0IGliX3BvcnRfaW5mbyB7CiAJX19iZTY0IG1rZXk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCmluZGV4IDkzNmUzMzMuLmMxNzkzMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCkBAIC0zODgsNyArMzg4LDcgQEAKIAlJQl9NVUxUSUNBU1RfUVBOID0gMHhmZmZmZmYKIH07CiAKLSNkZWZpbmUgSUJfTElEX1BFUk1JU1NJVkUJX19jb25zdGFudF9odG9ucygweEZGRkYpCisjZGVmaW5lIElCX0xJRF9QRVJNSVNTSVZFCWNwdV90b19iZTE2KDB4RkZGRikKIAogZW51bSBpYl9haF9mbGFncyB7CiAJSUJfQUhfR1JICT0gMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmggYi9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaAppbmRleCBiM2FhNjJlLi5kMDEwODU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaApAQCAtMTY5LDUgKzE2OSw3IEBACiAKIGV4dGVybiBpbnQgc25kX2FkMTgxNmFfcGNtKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGV4dGVybiBpbnQgc25kX2FkMTgxNmFfbWl4ZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwKTsKK2V4dGVybiBpbnQgc25kX2FkMTgxNmFfdGltZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLAorCQkJICAgICBzdHJ1Y3Qgc25kX3RpbWVyICoqcnRpbWVyKTsKIAogI2VuZGlmCS8qIF9fU09VTkRfQUQxODE2QV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaAppbmRleCAxYzAyZWQxLi42YWRkODBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCisrKyBiL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKQEAgLTIzLDkgKzIzLDEwIEBACiAjaWZuZGVmIF9fU09VTkRfQVNPVU5EX0gKICNkZWZpbmUgX19TT1VORF9BU09VTkRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApAQCAtMTI2LDEyICsxMjcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhOwkvKiBXOiBkcml2ZXItc3BlY2lmaWMgZGF0YSAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfSFdERVBfSU9DVExfUFZFUlNJT04gPSBfSU9SICgnSCcsIDB4MDAsIGludCksCi0JU05EUlZfSFdERVBfSU9DVExfSU5GTyA9IF9JT1IgKCdIJywgMHgwMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKSwKLQlTTkRSVl9IV0RFUF9JT0NUTF9EU1BfU1RBVFVTID0gX0lPUignSCcsIDB4MDIsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyksCi0JU05EUlZfSFdERVBfSU9DVExfRFNQX0xPQUQgICA9IF9JT1coJ0gnLCAweDAzLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSkKLX07CisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX1BWRVJTSU9OCV9JT1IgKCdIJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9JTkZPCQlfSU9SICgnSCcsIDB4MDEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX1NUQVRVUwlfSU9SKCdIJywgMHgwMiwgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzKQorI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9EU1BfTE9BRAlfSU9XKCdIJywgMHgwMywgc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0zNDIsNyArMzQxLDcgQEAKICNkZWZpbmUgU05EUlZfTUFTS19NQVgJMjU2CiAKIHN0cnVjdCBzbmRfbWFzayB7Ci0JdV9pbnQzMl90IGJpdHNbKFNORFJWX01BU0tfTUFYKzMxKS8zMl07CisJX191MzIgYml0c1soU05EUlZfTUFTS19NQVgrMzEpLzMyXTsKIH07CiAKIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyB7CkBAIC0zODUsNyArMzg0LDcgQEAKIAogc3RydWN0IHNuZF9wY21fY2hhbm5lbF9pbmZvIHsKIAl1bnNpZ25lZCBpbnQgY2hhbm5lbDsKLQlvZmZfdCBvZmZzZXQ7CQkJLyogbW1hcCBvZmZzZXQgKi8KKwlfX2tlcm5lbF9vZmZfdCBvZmZzZXQ7CQkvKiBtbWFwIG9mZnNldCAqLwogCXVuc2lnbmVkIGludCBmaXJzdDsJCS8qIG9mZnNldCB0byBmaXJzdCBzYW1wbGUgaW4gYml0cyAqLwogCXVuc2lnbmVkIGludCBzdGVwOwkJLyogc2FtcGxlcyBkaXN0YW5jZSBpbiBiaXRzICovCiB9OwpAQCAtNDUxLDQwICs0NTAsMzUgQEAKIAlTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTEFTVCA9IFNORFJWX1BDTV9UU1RBTVBfVFlQRV9NT05PVE9OSUMsCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9QQ01fSU9DVExfUFZFUlNJT04gPSBfSU9SKCdBJywgMHgwMCwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfSU5GTyA9IF9JT1IoJ0EnLCAweDAxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKSwKLQlTTkRSVl9QQ01fSU9DVExfVFNUQU1QID0gX0lPVygnQScsIDB4MDIsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX1RUU1RBTVAgPSBfSU9XKCdBJywgMHgwMywgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfSFdfUkVGSU5FID0gX0lPV1IoJ0EnLCAweDEwLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpLAotCVNORFJWX1BDTV9JT0NUTF9IV19QQVJBTVMgPSBfSU9XUignQScsIDB4MTEsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyksCi0JU05EUlZfUENNX0lPQ1RMX0hXX0ZSRUUgPSBfSU8oJ0EnLCAweDEyKSwKLQlTTkRSVl9QQ01fSU9DVExfU1dfUEFSQU1TID0gX0lPV1IoJ0EnLCAweDEzLCBzdHJ1Y3Qgc25kX3BjbV9zd19wYXJhbXMpLAotCVNORFJWX1BDTV9JT0NUTF9TVEFUVVMgPSBfSU9SKCdBJywgMHgyMCwgc3RydWN0IHNuZF9wY21fc3RhdHVzKSwKLQlTTkRSVl9QQ01fSU9DVExfREVMQVkgPSBfSU9SKCdBJywgMHgyMSwgc25kX3BjbV9zZnJhbWVzX3QpLAotCVNORFJWX1BDTV9JT0NUTF9IV1NZTkMgPSBfSU8oJ0EnLCAweDIyKSwKLQlTTkRSVl9QQ01fSU9DVExfU1lOQ19QVFIgPSBfSU9XUignQScsIDB4MjMsIHN0cnVjdCBzbmRfcGNtX3N5bmNfcHRyKSwKLQlTTkRSVl9QQ01fSU9DVExfQ0hBTk5FTF9JTkZPID0gX0lPUignQScsIDB4MzIsIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyksCi0JU05EUlZfUENNX0lPQ1RMX1BSRVBBUkUgPSBfSU8oJ0EnLCAweDQwKSwKLQlTTkRSVl9QQ01fSU9DVExfUkVTRVQgPSBfSU8oJ0EnLCAweDQxKSwKLQlTTkRSVl9QQ01fSU9DVExfU1RBUlQgPSBfSU8oJ0EnLCAweDQyKSwKLQlTTkRSVl9QQ01fSU9DVExfRFJPUCA9IF9JTygnQScsIDB4NDMpLAotCVNORFJWX1BDTV9JT0NUTF9EUkFJTiA9IF9JTygnQScsIDB4NDQpLAotCVNORFJWX1BDTV9JT0NUTF9QQVVTRSA9IF9JT1coJ0EnLCAweDQ1LCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9SRVdJTkQgPSBfSU9XKCdBJywgMHg0Niwgc25kX3BjbV91ZnJhbWVzX3QpLAotCVNORFJWX1BDTV9JT0NUTF9SRVNVTUUgPSBfSU8oJ0EnLCAweDQ3KSwKLQlTTkRSVl9QQ01fSU9DVExfWFJVTiA9IF9JTygnQScsIDB4NDgpLAotCVNORFJWX1BDTV9JT0NUTF9GT1JXQVJEID0gX0lPVygnQScsIDB4NDksIHNuZF9wY21fdWZyYW1lc190KSwKLQlTTkRSVl9QQ01fSU9DVExfV1JJVEVJX0ZSQU1FUyA9IF9JT1coJ0EnLCAweDUwLCBzdHJ1Y3Qgc25kX3hmZXJpKSwKLQlTTkRSVl9QQ01fSU9DVExfUkVBRElfRlJBTUVTID0gX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRfeGZlcmkpLAotCVNORFJWX1BDTV9JT0NUTF9XUklURU5fRlJBTUVTID0gX0lPVygnQScsIDB4NTIsIHN0cnVjdCBzbmRfeGZlcm4pLAotCVNORFJWX1BDTV9JT0NUTF9SRUFETl9GUkFNRVMgPSBfSU9SKCdBJywgMHg1Mywgc3RydWN0IHNuZF94ZmVybiksCi0JU05EUlZfUENNX0lPQ1RMX0xJTksgPSBfSU9XKCdBJywgMHg2MCwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfVU5MSU5LID0gX0lPKCdBJywgMHg2MSksCi19OwotCi0vKiBUcmljayB0byBtYWtlIGFsc2EtbGliL2FjaW5jbHVkZS5tNCBoYXBweSAqLwotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVXSU5EIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ0EnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9JTkZPCQlfSU9SKCdBJywgMHgwMSwgc3RydWN0IHNuZF9wY21faW5mbykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1RTVEFNUAkJX0lPVygnQScsIDB4MDIsIGludCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1RUU1RBTVAJCV9JT1coJ0EnLCAweDAzLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19SRUZJTkUJX0lPV1IoJ0EnLCAweDEwLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19QQVJBTVMJX0lPV1IoJ0EnLCAweDExLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19GUkVFCQlfSU8oJ0EnLCAweDEyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1dfUEFSQU1TCV9JT1dSKCdBJywgMHgxMywgc3RydWN0IHNuZF9wY21fc3dfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBVFVTCQlfSU9SKCdBJywgMHgyMCwgc3RydWN0IHNuZF9wY21fc3RhdHVzKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfREVMQVkJCV9JT1IoJ0EnLCAweDIxLCBzbmRfcGNtX3NmcmFtZXNfdCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXU1lOQwkJX0lPKCdBJywgMHgyMikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NZTkNfUFRSCV9JT1dSKCdBJywgMHgyMywgc3RydWN0IHNuZF9wY21fc3luY19wdHIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9DSEFOTkVMX0lORk8JX0lPUignQScsIDB4MzIsIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BSRVBBUkUJCV9JTygnQScsIDB4NDApCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNFVAkJX0lPKCdBJywgMHg0MSkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NUQVJUCQlfSU8oJ0EnLCAweDQyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRFJPUAkJX0lPKCdBJywgMHg0MykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RSQUlOCQlfSU8oJ0EnLCAweDQ0KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUEFVU0UJCV9JT1coJ0EnLCAweDQ1LCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVdJTkQJCV9JT1coJ0EnLCAweDQ2LCBzbmRfcGNtX3VmcmFtZXNfdCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU1VNRQkJX0lPKCdBJywgMHg0NykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1hSVU4JCV9JTygnQScsIDB4NDgpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9GT1JXQVJECQlfSU9XKCdBJywgMHg0OSwgc25kX3BjbV91ZnJhbWVzX3QpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURUlfRlJBTUVTCV9JT1coJ0EnLCAweDUwLCBzdHJ1Y3Qgc25kX3hmZXJpKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVBRElfRlJBTUVTCV9JT1IoJ0EnLCAweDUxLCBzdHJ1Y3Qgc25kX3hmZXJpKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfV1JJVEVOX0ZSQU1FUwlfSU9XKCdBJywgMHg1Miwgc3RydWN0IHNuZF94ZmVybikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFQUROX0ZSQU1FUwlfSU9SKCdBJywgMHg1Mywgc3RydWN0IHNuZF94ZmVybikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0xJTksJCV9JT1coJ0EnLCAweDYwLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9VTkxJTksJCV9JTygnQScsIDB4NjEpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC01MzgsMTQgKzUzMiwxMiBAQAogCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTZdOwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfUkFXTUlESV9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ1cnLCAweDAwLCBpbnQpLAotCVNORFJWX1JBV01JRElfSU9DVExfSU5GTyA9IF9JT1IoJ1cnLCAweDAxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbyksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9QQVJBTVMgPSBfSU9XUignVycsIDB4MTAsIHN0cnVjdCBzbmRfcmF3bWlkaV9wYXJhbXMpLAotCVNORFJWX1JBV01JRElfSU9DVExfU1RBVFVTID0gX0lPV1IoJ1cnLCAweDIwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RhdHVzKSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX0RST1AgPSBfSU9XKCdXJywgMHgzMCwgaW50KSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX0RSQUlOID0gX0lPVygnVycsIDB4MzEsIGludCksCi19OworI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1cnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfSU5GTwlfSU9SKCdXJywgMHgwMSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfUEFSQU1TCV9JT1dSKCdXJywgMHgxMCwgc3RydWN0IHNuZF9yYXdtaWRpX3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9TVEFUVVMJX0lPV1IoJ1cnLCAweDIwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RhdHVzKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0RST1AJX0lPVygnVycsIDB4MzAsIGludCkKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9EUkFJTglfSU9XKCdXJywgMHgzMSwgaW50KQogCiAvKgogICogIFRpbWVyIHNlY3Rpb24gLSAvZGV2L3NuZC90aW1lcgpAQCAtNjU0LDIzICs2NDYsMjEgQEAKIAl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsJLyogcmVzZXJ2ZWQgKi8KIH07CiAKLWVudW0gewotCVNORFJWX1RJTUVSX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignVCcsIDB4MDAsIGludCksCi0JU05EUlZfVElNRVJfSU9DVExfTkVYVF9ERVZJQ0UgPSBfSU9XUignVCcsIDB4MDEsIHN0cnVjdCBzbmRfdGltZXJfaWQpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1RSRUFEID0gX0lPVygnVCcsIDB4MDIsIGludCksCi0JU05EUlZfVElNRVJfSU9DVExfR0lORk8gPSBfSU9XUignVCcsIDB4MDMsIHN0cnVjdCBzbmRfdGltZXJfZ2luZm8pLAotCVNORFJWX1RJTUVSX0lPQ1RMX0dQQVJBTVMgPSBfSU9XKCdUJywgMHgwNCwgc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9HU1RBVFVTID0gX0lPV1IoJ1QnLCAweDA1LCBzdHJ1Y3Qgc25kX3RpbWVyX2dzdGF0dXMpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1NFTEVDVCA9IF9JT1coJ1QnLCAweDEwLCBzdHJ1Y3Qgc25kX3RpbWVyX3NlbGVjdCksCi0JU05EUlZfVElNRVJfSU9DVExfSU5GTyA9IF9JT1IoJ1QnLCAweDExLCBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8pLAotCVNORFJWX1RJTUVSX0lPQ1RMX1BBUkFNUyA9IF9JT1coJ1QnLCAweDEyLCBzdHJ1Y3Qgc25kX3RpbWVyX3BhcmFtcyksCi0JU05EUlZfVElNRVJfSU9DVExfU1RBVFVTID0gX0lPUignVCcsIDB4MTQsIHN0cnVjdCBzbmRfdGltZXJfc3RhdHVzKSwKLQkvKiBUaGUgZm9sbG93aW5nIGZvdXIgaW9jdGxzIGFyZSBjaGFuZ2VkIHNpbmNlIDEuMC45IGR1ZSB0byBjb25mbGljdGlvbiAqLwotCVNORFJWX1RJTUVSX0lPQ1RMX1NUQVJUID0gX0lPKCdUJywgMHhhMCksCi0JU05EUlZfVElNRVJfSU9DVExfU1RPUCA9IF9JTygnVCcsIDB4YTEpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0NPTlRJTlVFID0gX0lPKCdUJywgMHhhMiksCi0JU05EUlZfVElNRVJfSU9DVExfUEFVU0UgPSBfSU8oJ1QnLCAweGEzKSwKLX07CisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BWRVJTSU9OCV9JT1IoJ1QnLCAweDAwLCBpbnQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX05FWFRfREVWSUNFCV9JT1dSKCdUJywgMHgwMSwgc3RydWN0IHNuZF90aW1lcl9pZCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfVFJFQUQJCV9JT1coJ1QnLCAweDAyLCBpbnQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dJTkZPCQlfSU9XUignVCcsIDB4MDMsIHN0cnVjdCBzbmRfdGltZXJfZ2luZm8pCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dQQVJBTVMJX0lPVygnVCcsIDB4MDQsIHN0cnVjdCBzbmRfdGltZXJfZ3BhcmFtcykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR1NUQVRVUwlfSU9XUignVCcsIDB4MDUsIHN0cnVjdCBzbmRfdGltZXJfZ3N0YXR1cykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU0VMRUNUCV9JT1coJ1QnLCAweDEwLCBzdHJ1Y3Qgc25kX3RpbWVyX3NlbGVjdCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfSU5GTwkJX0lPUignVCcsIDB4MTEsIHN0cnVjdCBzbmRfdGltZXJfaW5mbykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUEFSQU1TCV9JT1coJ1QnLCAweDEyLCBzdHJ1Y3Qgc25kX3RpbWVyX3BhcmFtcykKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBVFVTCV9JT1IoJ1QnLCAweDE0LCBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cykKKy8qIFRoZSBmb2xsb3dpbmcgZm91ciBpb2N0bHMgYXJlIGNoYW5nZWQgc2luY2UgMS4wLjkgZHVlIHRvIGNvbmZsaWN0aW9uICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUQVJUCQlfSU8oJ1QnLCAweGEwKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TVE9QCQlfSU8oJ1QnLCAweGExKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9DT05USU5VRQlfSU8oJ1QnLCAweGEyKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QQVVTRQkJX0lPKCdUJywgMHhhMykKIAogc3RydWN0IHNuZF90aW1lcl9yZWFkIHsKIAl1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKQEAgLTc4OSw3ICs3NzksNyBAQAogCXNuZF9jdGxfZWxlbV90eXBlX3QgdHlwZTsJLyogUjogdmFsdWUgdHlwZSAtIFNORFJWX0NUTF9FTEVNX1RZUEVfKiAqLwogCXVuc2lnbmVkIGludCBhY2Nlc3M7CQkvKiBSOiB2YWx1ZSBhY2Nlc3MgKGJpdG1hc2spIC0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTXyogKi8KIAl1bnNpZ25lZCBpbnQgY291bnQ7CQkvKiBjb3VudCBvZiB2YWx1ZXMgKi8KLQlwaWRfdCBvd25lcjsJCQkvKiBvd25lcidzIFBJRCBvZiB0aGlzIGNvbnRyb2wgKi8KKwlfX2tlcm5lbF9waWRfdCBvd25lcjsJCS8qIG93bmVyJ3MgUElEIG9mIHRoaXMgY29udHJvbCAqLwogCXVuaW9uIHsKIAkJc3RydWN0IHsKIAkJCWxvbmcgbWluOwkJLyogUjogbWluaW11bSB2YWx1ZSAqLwpAQCAtODQ3LDMzICs4MzcsMzEgQEAKICAgICAgICAgdW5zaWduZWQgaW50IHRsdlswXTsJLyogZmlyc3QgVExWICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9DVExfSU9DVExfUFZFUlNJT04gPSBfSU9SKCdVJywgMHgwMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfQ0FSRF9JTkZPID0gX0lPUignVScsIDB4MDEsIHN0cnVjdCBzbmRfY3RsX2NhcmRfaW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTElTVCA9IF9JT1dSKCdVJywgMHgxMCwgc3RydWN0IHNuZF9jdGxfZWxlbV9saXN0KSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9JTkZPID0gX0lPV1IoJ1UnLCAweDExLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1JFQUQgPSBfSU9XUignVScsIDB4MTIsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1dSSVRFID0gX0lPV1IoJ1UnLCAweDEzLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLID0gX0lPVygnVScsIDB4MTQsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1VOTE9DSyA9IF9JT1coJ1UnLCAweDE1LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKSwKLQlTTkRSVl9DVExfSU9DVExfU1VCU0NSSUJFX0VWRU5UUyA9IF9JT1dSKCdVJywgMHgxNiwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9BREQgPSBfSU9XUignVScsIDB4MTcsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVQTEFDRSA9IF9JT1dSKCdVJywgMHgxOCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9SRU1PVkUgPSBfSU9XUignVScsIDB4MTksIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpLAotCVNORFJWX0NUTF9JT0NUTF9UTFZfUkVBRCA9IF9JT1dSKCdVJywgMHgxYSwgc3RydWN0IHNuZF9jdGxfdGx2KSwKLQlTTkRSVl9DVExfSU9DVExfVExWX1dSSVRFID0gX0lPV1IoJ1UnLCAweDFiLCBzdHJ1Y3Qgc25kX2N0bF90bHYpLAotCVNORFJWX0NUTF9JT0NUTF9UTFZfQ09NTUFORCA9IF9JT1dSKCdVJywgMHgxYywgc3RydWN0IHNuZF9jdGxfdGx2KSwKLQlTTkRSVl9DVExfSU9DVExfSFdERVBfTkVYVF9ERVZJQ0UgPSBfSU9XUignVScsIDB4MjAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX0hXREVQX0lORk8gPSBfSU9SKCdVJywgMHgyMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfUENNX05FWFRfREVWSUNFID0gX0lPUignVScsIDB4MzAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1BDTV9JTkZPID0gX0lPV1IoJ1UnLCAweDMxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfUENNX1BSRUZFUl9TVUJERVZJQ0UgPSBfSU9XKCdVJywgMHgzMiwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUkFXTUlESV9ORVhUX0RFVklDRSA9IF9JT1dSKCdVJywgMHg0MCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUkFXTUlESV9JTkZPID0gX0lPV1IoJ1UnLCAweDQxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfUFJFRkVSX1NVQkRFVklDRSA9IF9JT1coJ1UnLCAweDQyLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9QT1dFUiA9IF9JT1dSKCdVJywgMHhkMCwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUE9XRVJfU1RBVEUgPSBfSU9SKCdVJywgMHhkMSwgaW50KSwKLX07CisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QVkVSU0lPTglfSU9SKCdVJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfQ0FSRF9JTkZPCV9JT1IoJ1UnLCAweDAxLCBzdHJ1Y3Qgc25kX2N0bF9jYXJkX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0xJU1QJX0lPV1IoJ1UnLCAweDEwLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2xpc3QpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0lORk8JX0lPV1IoJ1UnLCAweDExLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFQUQJX0lPV1IoJ1UnLCAweDEyLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9XUklURQlfSU9XUignVScsIDB4MTMsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0xPQ0sJX0lPVygnVScsIDB4MTQsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1VOTE9DSwlfSU9XKCdVJywgMHgxNSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1NVQlNDUklCRV9FVkVOVFMgX0lPV1IoJ1UnLCAweDE2LCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0FERAlfSU9XUignVScsIDB4MTcsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVQTEFDRQlfSU9XUignVScsIDB4MTgsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVNT1ZFCV9JT1dSKCdVJywgMHgxOSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9SRUFECV9JT1dSKCdVJywgMHgxYSwgc3RydWN0IHNuZF9jdGxfdGx2KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfVExWX1dSSVRFCV9JT1dSKCdVJywgMHgxYiwgc3RydWN0IHNuZF9jdGxfdGx2KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfVExWX0NPTU1BTkQJX0lPV1IoJ1UnLCAweDFjLCBzdHJ1Y3Qgc25kX2N0bF90bHYpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9IV0RFUF9ORVhUX0RFVklDRSBfSU9XUignVScsIDB4MjAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX0lORk8JX0lPUignVScsIDB4MjEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9ORVhUX0RFVklDRQlfSU9SKCdVJywgMHgzMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX0lORk8JX0lPV1IoJ1UnLCAweDMxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX1BSRUZFUl9TVUJERVZJQ0UgX0lPVygnVScsIDB4MzIsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfTkVYVF9ERVZJQ0UgX0lPV1IoJ1UnLCAweDQwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX0lORk8JX0lPV1IoJ1UnLCAweDQxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfUFJFRkVSX1NVQkRFVklDRSBfSU9XKCdVJywgMHg0MiwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVIJCV9JT1dSKCdVJywgMHhkMCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVJfU1RBVEUJX0lPUignVScsIDB4ZDEsIGludCkKIAogLyoKICAqICBSZWFkIGludGVyZmFjZS4KQEAgLTkxOSwxOCArOTA3LDQgQEAKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1BDTV9TVFJFQU0JCSJQQ00gU3RyZWFtIgogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoZXhwbCxkaXJlY3Rpb24sd2hhdCkJIklFQzk1OCAiIGV4cGwgU05EUlZfQ1RMX05BTUVfIyNkaXJlY3Rpb24gU05EUlZfQ1RMX05BTUVfSUVDOTU4XyMjd2hhdAogCi0vKgotICoKLSAqLwotCi1zdHJ1Y3Qgc25kX3hmZXJ2IHsKLQljb25zdCBzdHJ1Y3QgaW92ZWMgKnZlY3RvcjsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotfTsKLQotZW51bSB7Ci0JU05EUlZfSU9DVExfUkVBRFYgPSBfSU9XKCdLJywgMHgwMCwgc3RydWN0IHNuZF94ZmVydiksCi0JU05EUlZfSU9DVExfV1JJVEVWID0gX0lPVygnSycsIDB4MDEsIHN0cnVjdCBzbmRfeGZlcnYpLAotfTsKLQogI2VuZGlmIC8qIF9fU09VTkRfQVNPVU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXRtZWwtYWJkYWMuaCBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWJkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZmNmE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYmRhYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQkRBQ19ICisjZGVmaW5lIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQkRBQ19ICisKKyNpbmNsdWRlIDxsaW51eC9kd19kbWFjLmg+CisKKy8qKgorICogc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhIC0gYm9hcmQgc3BlY2lmaWMgQUJEQUMgY29uZmlndXJhdGlvbgorICogQGR3czogRE1BIHNsYXZlIGludGVyZmFjZSB0byB1c2UgZm9yIHNvdW5kIHBsYXliYWNrLgorICovCitzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgeworCXN0cnVjdCBkd19kbWFfc2xhdmUJZHdzOworfTsKKworI2VuZGlmIC8qIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQkRBQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2F0bWVsLWFjOTdjLmggYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFjOTdjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhYWJkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWM5N2MuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgQUM5N0MgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUM5N0NfSAorI2RlZmluZSBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUM5N0NfSAorCisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorCisjZGVmaW5lIEFDOTdDX0NBUFRVUkUJMHgwMQorI2RlZmluZSBBQzk3Q19QTEFZQkFDSwkweDAyCisjZGVmaW5lIEFDOTdDX0JPVEgJKEFDOTdDX0NBUFRVUkUgfCBBQzk3Q19QTEFZQkFDSykKKworLyoqCisgKiBzdHJ1Y3QgYXRtZWxfYWM5N2NfcGRhdGEgLSBib2FyZCBzcGVjaWZpYyBBQzk3QyBjb25maWd1cmF0aW9uCisgKiBAcnhfZHdzOiBETUEgc2xhdmUgaW50ZXJmYWNlIHRvIHVzZSBmb3Igc291bmQgY2FwdHVyZS4KKyAqIEB0eF9kd3M6IERNQSBzbGF2ZSBpbnRlcmZhY2UgdG8gdXNlIGZvciBzb3VuZCBwbGF5YmFjay4KKyAqIEByZXNldF9waW46IEdQSU8gcGluIHdpcmVkIHRvIHRoZSByZXNldCBpbnB1dCBvbiB0aGUgZXh0ZXJuYWwgQUM5NyBjb2RlYywKKyAqICAgICAgICAgICAgIG9wdGlvbmFsIHRvIHVzZSwgc2V0IHRvIC1FTk9ERVYgaWYgbm90IGluIHVzZS4gQUM5NyBsYXllciB3aWxsCisgKiAgICAgICAgICAgICB0cnkgdG8gZG8gYSBzb2Z0d2FyZSByZXNldCBvZiB0aGUgZXh0ZXJuYWwgY29kZWMgYW55d2F5LgorICogQGZsYWdzOiBGbGFncyBmb3Igd2hpY2ggZGlyZWN0aW9ucyBzaG91bGQgYmUgZW5hYmxlZC4KKyAqCisgKiBJZiB0aGUgdXNlciBkbyBub3Qgd2FudCB0byB1c2UgYSBETUEgY2hhbm5lbCBmb3IgcGxheWJhY2sgb3IgY2FwdHVyZSwgaS5lLgorICogb25seSBvbmUgZmVhdHVyZSBpcyByZXF1aXJlZCBvbiB0aGUgYm9hcmQuIFRoZSBzbGF2ZSBmb3IgcGxheWJhY2sgb3IgY2FwdHVyZQorICogY2FuIGJlIHNldCB0byBOVUxMLiBUaGUgQUM5N0MgZHJpdmVyIHdpbGwgdGFrZSB1c2Ugb2YgdGhpcyB3aGVuIHNldHRpbmcgdXAKKyAqIHRoZSBzb3VuZCBzdHJlYW1zLgorICovCitzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQlyeF9kd3M7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQl0eF9kd3M7CisJdW5zaWduZWQgaW50IAkJZmxhZ3M7CisJaW50CQkJcmVzZXRfcGluOworfTsKKworI2VuZGlmIC8qIF9fSU5DTFVERV9TT1VORF9BVE1FTF9BQzk3Q19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaCBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCmluZGV4IDQ3MjFiNGIuLmVmOTZmMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oCisrKyBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCkBAIC0xNzEsNiArMTcxLDU0IEBACiAgKi8KIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcihjaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCAqdGx2KTsKLWludCBzbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlKTsKLQkJICAgICAgCitpbnQgX3NuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworLyogb3B0aW9uYWwgZmxhZ3MgZm9yIHNsYXZlICovCisjZGVmaW5lIFNORF9DVExfU0xBVkVfTkVFRF9VUERBVEUJKDEgPDwgMCkKKworLyoqCisgKiBzbmRfY3RsX2FkZF9zbGF2ZSAtIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbAorICogQG1hc3Rlcjogdm1hc3RlciBlbGVtZW50CisgKiBAc2xhdmU6IHNsYXZlIGVsZW1lbnQgdG8gYWRkCisgKgorICogQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sIHRvIHRoZSBnaXZlbiBtYXN0ZXIgZWxlbWVudCBjcmVhdGVkIHZpYQorICogc25kX2N0bF9jcmVhdGVfdmlydHVhbF9tYXN0ZXIoKSBiZWZvcmVoYW5kLgorICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICoKKyAqIEFsbCBzbGF2ZXMgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIChyZXR1cm5pbmcgdGhlIHNhbWUgaW5mb3JtYXRpb24KKyAqIHZpYSBpbmZvIGNhbGxiYWNrKS4gIFRoZSBmdWNudGlvbiBkb2Vzbid0IGNoZWNrIGl0LCBzbyBpdCdzIHlvdXIKKyAqIHJlc3BvbnNpYmlsaXR5LgorICoKKyAqIEFsc28sIHNvbWUgYWRkaXRpb25hbCBsaW1pdGF0aW9uczoKKyAqIGF0IG1vc3QgdHdvIGNoYW5uZWxzLAorICogbG9nYXJpdGhtaWMgdm9sdW1lIGNvbnRyb2wgKGRCIGxldmVsKSB0aHVzIG5vIGxpbmVhciB2b2x1bWUsCisgKiBtYXN0ZXIgY2FuIG9ubHkgYXR0ZW51YXRlIHRoZSB2b2x1bWUgd2l0aG91dCBnYWluCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitzbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlKQoreworCXJldHVybiBfc25kX2N0bF9hZGRfc2xhdmUobWFzdGVyLCBzbGF2ZSwgMCk7Cit9CisKKy8qKgorICogc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQgLSBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wKKyAqIEBtYXN0ZXI6IHZtYXN0ZXIgZWxlbWVudAorICogQHNsYXZlOiBzbGF2ZSBlbGVtZW50IHRvIGFkZAorICoKKyAqIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbCB0byB0aGUgZ2l2ZW4gbWFzdGVyLgorICogVW5saWtlIHNuZF9jdGxfYWRkX3NsYXZlKCksIHRoZSBlbGVtZW50IGFkZGVkIHZpYSB0aGlzIGZ1bmN0aW9uCisgKiBpcyBzdXBwb3NlZCB0byBoYXZlIHZvbGF0aWxlIHZhbHVlcywgYW5kIGdldCBjYWxsYmFjayBpcyBjYWxsZWQKKyAqIGF0IGVhY2ggdGltZSBxdXJpZWQgZnJvbSB0aGUgbWFzdGVyLgorICoKKyAqIFdoZW4gdGhlIGNvbnRyb2wgcGVla3MgdGhlIGhhcmR3YXJlIHZhbHVlcyBkaXJlY3RseSBhbmQgdGhlIHZhbHVlCisgKiBjYW4gYmUgY2hhbmdlZCBieSBvdGhlciBtZWFucyB0aGFuIHRoZSBwdXQgY2FsbGJhY2sgb2YgdGhlIGVsZW1lbnQsCisgKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIGtlZXAgdGhlIHZhbHVlIGFsd2F5cyB1cC10by1kYXRlLgorICovCitzdGF0aWMgaW5saW5lIGludAorc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLAorCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpCit7CisJcmV0dXJuIF9zbmRfY3RsX2FkZF9zbGF2ZShtYXN0ZXIsIHNsYXZlLCBTTkRfQ1RMX1NMQVZFX05FRURfVVBEQVRFKTsKK30KKwogI2VuZGlmCS8qIF9fU09VTkRfQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvcmUuaCBiL2luY2x1ZGUvc291bmQvY29yZS5oCmluZGV4IGY2MzI0ODQuLjNkZWE3OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29yZS5oCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC05Nyw5ICs5Nyw5IEBACiAKIHN0cnVjdCBzbmRfbW9uaXRvcl9maWxlIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqbmV4dDsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpkaXNjb25uZWN0ZWRfZl9vcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNodXRkb3duX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBzaHV0ZG93bl9saXN0OwkvKiBzdGlsbCBuZWVkIHRvIHNodXRkb3duICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBsaW5rIG9mIG1vbml0b3IgZmlsZXMgKi8KIH07CiAKIC8qIG1haW4gc3RydWN0dXJlIGZvciBzb3VuZGNhcmQgKi8KQEAgLTEzNCw3ICsxMzQsNyBAQAogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19pZDsJLyogdGhlIGNhcmQgaWQgKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfcm9vdF9saW5rOwkvKiBudW1iZXIgbGluayB0byByZWFsIGlkICovCiAKLQlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqZmlsZXM7IC8qIGFsbCBmaWxlcyBhc3NvY2lhdGVkIHRvIHRoaXMgY2FyZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmlsZXNfbGlzdDsJLyogYWxsIGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhpcyBjYXJkICovCiAJc3RydWN0IHNuZF9zaHV0ZG93bl9mX29wcyAqc19mX29wczsgLyogZmlsZSBvcGVyYXRpb25zIGluIHRoZSBzaHV0ZG93bgogCQkJCQkJCQlzdGF0ZSAqLwogCXNwaW5sb2NrX3QgZmlsZXNfbG9jazsJCS8qIGxvY2sgdGhlIGZpbGVzIGZvciB0aGlzIGNhcmQgKi8KQEAgLTI5Niw4ICsyOTYsMjAgQEAKIGV4dGVybiBpbnQgKCpzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaykoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgY21kKTsKICNlbmRpZgogCitpbnQgc25kX2NhcmRfY3JlYXRlKGludCBpZHgsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSwKKwkJICAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRfcmV0KTsKKworc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQKIHN0cnVjdCBzbmRfY2FyZCAqc25kX2NhcmRfbmV3KGludCBpZHgsIGNvbnN0IGNoYXIgKmlkLAotCQkJIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUpOworCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBpbnQgZXh0cmFfc2l6ZSkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaWYgKHNuZF9jYXJkX2NyZWF0ZShpZHgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUsICZjYXJkKSA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiBjYXJkOworfQorCiBpbnQgc25kX2NhcmRfZGlzY29ubmVjdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwogaW50IHNuZF9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKIGludCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CkBAIC00NDYsMjEgKzQ1OCwzMyBAQAogc3RydWN0IHNuZF9wY2lfcXVpcmsgewogCXVuc2lnbmVkIHNob3J0IHN1YnZlbmRvcjsJLyogUENJIHN1YnZlbmRvciBJRCAqLwogCXVuc2lnbmVkIHNob3J0IHN1YmRldmljZTsJLyogUENJIHN1YmRldmljZSBJRCAqLworCXVuc2lnbmVkIHNob3J0IHN1YmRldmljZV9tYXNrOwkvKiBiaXRtYXNrIHRvIG1hdGNoICovCiAJaW50IHZhbHVlOwkJCS8qIHZhbHVlICovCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCiAJY29uc3QgY2hhciAqbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGRldmljZSAob3B0aW9uYWwpICovCiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgX1NORF9QQ0lfUVVJUktfSUQodmVuZCxkZXYpIFwKLQkuc3VidmVuZG9yID0gKHZlbmQpLCAuc3ViZGV2aWNlID0gKGRldikKKyNkZWZpbmUgX1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCBtYXNrLCBkZXYpCVwKKwkuc3VidmVuZG9yID0gKHZlbmQpLCAuc3ViZGV2aWNlID0gKGRldiksIC5zdWJkZXZpY2VfbWFzayA9IChtYXNrKQorI2RlZmluZSBfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpIFwKKwlfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIDB4ZmZmZiwgZGV2KQogI2RlZmluZSBTTkRfUENJX1FVSVJLX0lEKHZlbmQsZGV2KSB7X1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KX0KICNpZmRlZiBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UKICNkZWZpbmUgU05EX1BDSV9RVUlSSyh2ZW5kLGRldix4bmFtZSx2YWwpIFwKIAl7X1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KSwgLnZhbHVlID0gKHZhbCksIC5uYW1lID0gKHhuYW1lKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19WRU5ET1IodmVuZCwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgMCwgMCksIC52YWx1ZSA9ICh2YWwpLCAubmFtZSA9ICh4bmFtZSl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfTUFTSyh2ZW5kLCBtYXNrLCBkZXYsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIG1hc2ssIGRldiksCQkJXAorCQkJLnZhbHVlID0gKHZhbCksIC5uYW1lID0gKHhuYW1lKX0KICNlbHNlCiAjZGVmaW5lIFNORF9QQ0lfUVVJUksodmVuZCxkZXYseG5hbWUsdmFsKSBcCiAJe19TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldiksIC52YWx1ZSA9ICh2YWwpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX01BU0sodmVuZCwgbWFzaywgZGV2LCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCBtYXNrLCBkZXYpLCAudmFsdWUgPSAodmFsKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19WRU5ET1IodmVuZCwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgMCwgMCksIC52YWx1ZSA9ICh2YWwpfQogI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKaW5kZXggMTBlZTI4ZS4uNmE2NjRjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fU09VTkRfRU1VMTBLMV9ICiAjZGVmaW5lIF9fU09VTkRfRU1VMTBLMV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKgogICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4sCiAgKgkJICAgICBDcmVhdGl2ZSBMYWJzLCBJbmMuCkBAIC0zNCw2ICszNiw3IEBACiAjaW5jbHVkZSA8c291bmQvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gREVGSU5FUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjE3MSw3ICsyMTc0LDcgQEAKIAljaGFyIG5hbWVbMTI4XTsKIAogCURFQ0xBUkVfQklUTUFQKGdwcl92YWxpZCwgMHgyMDApOyAvKiBiaXRtYXNrIG9mIHZhbGlkIGluaXRpYWxpemVycyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKmdwcl9tYXA7CSAgLyogaW5pdGlhbGl6ZXJzICovCisJX191MzIgX191c2VyICpncHJfbWFwOwkJLyogaW5pdGlhbGl6ZXJzICovCiAKIAl1bnNpZ25lZCBpbnQgZ3ByX2FkZF9jb250cm9sX2NvdW50OyAvKiBjb3VudCBvZiBHUFIgY29udHJvbHMgdG8gYWRkL3JlcGxhY2UgKi8KIAlzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX2NvbnRyb2xfZ3ByIF9fdXNlciAqZ3ByX2FkZF9jb250cm9sczsgLyogR1BSIGNvbnRyb2xzIHRvIGFkZC9yZXBsYWNlICovCkBAIC0yMTg0LDExICsyMTg3LDExIEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9jb250cm9sX2dwciBfX3VzZXIgKmdwcl9saXN0X2NvbnRyb2xzOyAvKiBsaXN0ZWQgR1BSIGNvbnRyb2xzICovCiAKIAlERUNMQVJFX0JJVE1BUCh0cmFtX3ZhbGlkLCAweDEwMCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5pdGlhbGl6ZXJzICovCi0JdV9pbnQzMl90IF9fdXNlciAqdHJhbV9kYXRhX21hcDsgIC8qIGRhdGEgaW5pdGlhbGl6ZXJzICovCi0JdV9pbnQzMl90IF9fdXNlciAqdHJhbV9hZGRyX21hcDsgIC8qIG1hcCBpbml0aWFsaXplcnMgKi8KKwlfX3UzMiBfX3VzZXIgKnRyYW1fZGF0YV9tYXA7CSAgLyogZGF0YSBpbml0aWFsaXplcnMgKi8KKwlfX3UzMiBfX3VzZXIgKnRyYW1fYWRkcl9tYXA7CSAgLyogbWFwIGluaXRpYWxpemVycyAqLwogCiAJREVDTEFSRV9CSVRNQVAoY29kZV92YWxpZCwgMTAyNCk7IC8qIGJpdG1hc2sgb2YgdmFsaWQgaW5zdHJ1Y3Rpb25zICovCi0JdV9pbnQzMl90IF9fdXNlciAqY29kZTsJCSAgLyogb25lIGluc3RydWN0aW9uIC0gNjQgYml0cyAqLworCV9fdTMyIF9fdXNlciAqY29kZTsJCSAgLyogb25lIGluc3RydWN0aW9uIC0gNjQgYml0cyAqLwogfTsKIAogc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF90cmFtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaHdkZXAuaCBiL2luY2x1ZGUvc291bmQvaHdkZXAuaAppbmRleCBkOWVlYTAxLi44YzA1ZTQ3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9od2RlcC5oCisrKyBiL2luY2x1ZGUvc291bmQvaHdkZXAuaApAQCAtMjcsMTggKzI3LDI4IEBACiAKIHN0cnVjdCBzbmRfaHdkZXA7CiAKKy8qIGh3ZGVwIGZpbGUgb3BzOyBhbGwgb3BzIGNhbiBiZSBOVUxMICovCiBzdHJ1Y3Qgc25kX2h3ZGVwX29wcyB7Ci0JbG9uZyBsb25nICgqbGxzZWVrKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgbG9uZyBsb25nIG9mZnNldCwgaW50IG9yaWcpOwotCWxvbmcgKCpyZWFkKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNoYXIgX191c2VyICpidWYsIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKLQlsb25nICgqd3JpdGUpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOwotCWludCAoKm9wZW4pIChzdHJ1Y3Qgc25kX2h3ZGVwICogaHcsIHN0cnVjdCBmaWxlICogZmlsZSk7Ci0JaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOwotCXVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCBwb2xsX3RhYmxlICogd2FpdCk7Ci0JaW50ICgqaW9jdGwpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0JaW50ICgqaW9jdGxfY29tcGF0KSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCWludCAoKm1tYXApIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpOwotCWludCAoKmRzcF9zdGF0dXMpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICpzdGF0dXMpOwotCWludCAoKmRzcF9sb2FkKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlICppbWFnZSk7CisJbG9uZyBsb25nICgqbGxzZWVrKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgbG9uZyBsb25nIG9mZnNldCwgaW50IG9yaWcpOworCWxvbmcgKCpyZWFkKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7CisJbG9uZyAoKndyaXRlKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICAgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOworCWludCAoKm9wZW4pKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCWludCAoKnJlbGVhc2UpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOworCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgcG9sbF90YWJsZSAqd2FpdCk7CisJaW50ICgqaW9jdGwpKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJaW50ICgqaW9jdGxfY29tcGF0KShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCWludCAoKm1tYXApKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKwlpbnQgKCpkc3Bfc3RhdHVzKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywKKwkJCSAgc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzICpzdGF0dXMpOworCWludCAoKmRzcF9sb2FkKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywKKwkJCXN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlICppbWFnZSk7CiB9OwogCiBzdHJ1Y3Qgc25kX2h3ZGVwIHsKQEAgLTYxLDkgKzcxLDkgQEAKIAl2b2lkICgqcHJpdmF0ZV9mcmVlKSAoc3RydWN0IHNuZF9od2RlcCAqaHdkZXApOwogCiAJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7Ci0JaW50IHVzZWQ7Ci0JdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7Ci0JdW5zaWduZWQgaW50IGV4Y2x1c2l2ZTogMTsKKwlpbnQgdXNlZDsJCQkvKiByZWZlcmVuY2UgY291bnRlciAqLworCXVuc2lnbmVkIGludCBkc3BfbG9hZGVkOwkvKiBiaXQgZmllbGRzIG9mIGxvYWRlZCBkc3AgaW5kaWNlcyAqLworCXVuc2lnbmVkIGludCBleGNsdXNpdmU6MTsJLyogZXhjbHVzaXZlIGFjY2VzcyBtb2RlICovCiB9OwogCiBleHRlcm4gaW50IHNuZF9od2RlcF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvamFjay5oIGIvaW5jbHVkZS9zb3VuZC9qYWNrLmgKaW5kZXggMmUwMzE1Yy4uNmIwMTNjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9qYWNrLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9qYWNrLmgKQEAgLTMwLDYgKzMwLDkgQEAKIC8qKgogICogSmFjayB0eXBlcyB3aGljaCBjYW4gYmUgcmVwb3J0ZWQuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgYXMgYQogICogYml0bWFzay4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBsb29rdXAgdGFibGUgaW4KKyAqIHNvdW5kL2NvcmUvamFjay5jLgogICovCiBlbnVtIHNuZF9qYWNrX3R5cGVzIHsKIAlTTkRfSkFDS19IRUFEUEhPTkUJPSAweDAwMDEsCkBAIC0zNyw2ICs0MCw4IEBACiAJU05EX0pBQ0tfSEVBRFNFVAk9IFNORF9KQUNLX0hFQURQSE9ORSB8IFNORF9KQUNLX01JQ1JPUEhPTkUsCiAJU05EX0pBQ0tfTElORU9VVAk9IDB4MDAwNCwKIAlTTkRfSkFDS19NRUNIQU5JQ0FMCT0gMHgwMDA4LCAvKiBJZiBkZXRlY3RlZCBzZXBhcmF0ZWx5ICovCisJU05EX0pBQ0tfVklERU9PVVQJPSAweDAwMTAsCisJU05EX0pBQ0tfQVZPVVQJCT0gU05EX0pBQ0tfTElORU9VVCB8IFNORF9KQUNLX1ZJREVPT1VULAogfTsKIAogc3RydWN0IHNuZF9qYWNrIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IDQwYzVhNmYuLjg5MDRiMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtMzY0LDcgKzM2NCw2IEBACiAgICAgICAgIC8qIC0tIHRpbWVyIHNlY3Rpb24gLS0gKi8KIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsJCS8qIHRpbWVyICovCiAJdW5zaWduZWQgdGltZXJfcnVubmluZzogMTsJLyogdGltZSBpcyBydW5uaW5nICovCi0Jc3BpbmxvY2tfdCB0aW1lcl9sb2NrOwogCS8qIC0tIG5leHQgc3Vic3RyZWFtIC0tICovCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpuZXh0OwogCS8qIC0tIGxpbmtlZCBzdWJzdHJlYW1zIC0tICovCkBAIC00NTEsNyArNDUwLDcgQEAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc25kX3BjbV9mX29wc1syXTsKIAotaW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY2hhciAqaWQsIGludCBkZXZpY2UsCitpbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IGRldmljZSwKIAkJaW50IHBsYXliYWNrX2NvdW50LCBpbnQgY2FwdHVyZV9jb3VudCwKIAkJc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfcGNtX25ld19zdHJlYW0oc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSwgaW50IHN1YnN0cmVhbV9jb3VudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaCBiL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oCmluZGV4IDJmZDNkMjUuLjJjODk0YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oCisrKyBiL2luY2x1ZGUvc291bmQvcHhhMnh4LWxpYi5oCkBAIC00Miw0ICs0MiwxOSBAQAogZXh0ZXJuIGludCBweGEyeHhfYWM5N19od19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcHhhMnh4X2FjOTdfaHdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAKKy8qIEFDOTcgcGxhdGZvcm1fZGF0YSAqLworLyoqCisgKiBzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSAtIHB4YSBhYzk3IHBsYXRmb3JtIGRhdGEKKyAqIEByZXNldF9ncGlvOiBBQzk3IHJlc2V0IGdwaW8gKG5vcm1hbGx5IGdwaW8xMTMgb3IgZ3Bpbzk1KQorICogICAgICAgICAgICAgIGEgLTEgdmFsdWUgbWVhbnMgbm8gZ3BpbyB3aWxsIGJlIHVzZWQgZm9yIHJlc2V0CisgKgorICogUGxhdGZvcm0gZGF0YSBzaG91bGQgb25seSBiZSBzcGVjaWZpZWQgZm9yIHB4YTI3eCBDUFVzIHdoZXJlIGEgc2lsaWNvbiBidWcKKyAqIHByZXZlbnRzIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSByZXNldCBsaW5lLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdAorICogYmVoYXZpb3VyIGlzIHRvIGNvbnNpZGVyIGdwaW8gMTEzIGFzIHRoZSBBQzk3IHJlc2V0IGxpbmUsIHdoaWNoIGlzIHRoZQorICogZGVmYXVsdCBvbiBtb3N0IGJvYXJkcy4KKyAqLworc3RydWN0IHB4YTJ4eF9hYzk3X3BsYXRmb3JtX2RhdGEgeworCWludCByZXNldF9ncGlvOworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaCBiL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCmluZGV4IGI1NTBhNDEuLmMyM2MyNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCisrKyBiL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCkBAIC00Miw3ICs0Miw2IEBACiAjZGVmaW5lIFNORFJWX1JBV01JRElfTEZMR19JTlBVVAkoMTw8MSkKICNkZWZpbmUgU05EUlZfUkFXTUlESV9MRkxHX09QRU4JCSgzPDwwKQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5ECSgxPDwyKQotI2RlZmluZQlTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSwkoMTw8MykKIAogc3RydWN0IHNuZF9yYXdtaWRpOwogc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2IuaCBiL2luY2x1ZGUvc291bmQvc2IuaAppbmRleCA4NWY5M2M1Li40ZTYyZWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NiLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zYi5oCkBAIC0yNDksNiArMjQ5LDcgQEAKICNkZWZpbmUgU0JfQUxTNDAwMF8zRF9BVVRPX01VVEUJMHg1MgogI2RlZmluZSBTQl9BTFM0MDAwX0FOQUxPR19CTE9DS19DVFJMIDB4NTMKICNkZWZpbmUgU0JfQUxTNDAwMF8zRF9ERUxBWUxJTkVfUEFUVEVSTiAweDU0CisjZGVmaW5lIFNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04JMHhjMyAvKiBiaXQgNyBpcyBEaWdpdGFsIExvb3AgRW5hYmxlICovCiAjZGVmaW5lIFNCX0FMUzQwMDBfUVNPVU5ECTB4ZGIKIAogLyogSVJRIHNldHRpbmcgYml0bWFwICovCkBAIC0zMzAsNyArMzMxLDggQEAKIAlTQl9NSVhfRE9VQkxFLAogCVNCX01JWF9JTlBVVF9TVywKIAlTQl9NSVhfQ0FQVFVSRV9QUk8sCi0JU0JfTUlYX0NBUFRVUkVfRFQwMTlYCisJU0JfTUlYX0NBUFRVUkVfRFQwMTlYLAorCVNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKIH07CiAKICNkZWZpbmUgU0JfTUlYVkFMX0RPVUJMRShsZWZ0X3JlZywgcmlnaHRfcmVnLCBsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCwgbWFzaykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaCBiL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmgKaW5kZXggNWQxYWI5Yy4uMWJjZTdmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCkBAIC0yMDIsMTMgKzIwMiwxMSBAQAogCWludCB2YWx1ZTI7CS8qIHJlc2VydmVkICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9FTVVYX0lPQ1RMX1ZFUlNJT04gPSBfSU9SKCdIJywgMHg4MCwgdW5zaWduZWQgaW50KSwKLQlTTkRSVl9FTVVYX0lPQ1RMX0xPQURfUEFUQ0ggPSBfSU9XUignSCcsIDB4ODEsIHN0cnVjdCBzb3VuZGZvbnRfcGF0Y2hfaW5mbyksCi0JU05EUlZfRU1VWF9JT0NUTF9SRVNFVF9TQU1QTEVTID0gX0lPKCdIJywgMHg4MiksCi0JU05EUlZfRU1VWF9JT0NUTF9SRU1PVkVfTEFTVF9TQU1QTEVTID0gX0lPKCdIJywgMHg4MyksCi0JU05EUlZfRU1VWF9JT0NUTF9NRU1fQVZBSUwgPSBfSU9XKCdIJywgMHg4NCwgaW50KSwKLQlTTkRSVl9FTVVYX0lPQ1RMX01JU0NfTU9ERSA9IF9JT1dSKCdIJywgMHg4NCwgc3RydWN0IHNuZF9lbXV4X21pc2NfbW9kZSksCi19OworI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX1ZFUlNJT04JX0lPUignSCcsIDB4ODAsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9MT0FEX1BBVENICV9JT1dSKCdIJywgMHg4MSwgc3RydWN0IHNvdW5kZm9udF9wYXRjaF9pbmZvKQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX1JFU0VUX1NBTVBMRVMJX0lPKCdIJywgMHg4MikKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9SRU1PVkVfTEFTVF9TQU1QTEVTIF9JTygnSCcsIDB4ODMpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfTUVNX0FWQUlMCV9JT1coJ0gnLCAweDg0LCBpbnQpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfTUlTQ19NT0RFCV9JT1dSKCdIJywgMHg4NCwgc3RydWN0IHNuZF9lbXV4X21pc2NfbW9kZSkKIAogI2VuZGlmIC8qIF9fU09VTkRfU0ZOVF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKaW5kZXggMjQyNDdmNy4uMTM2NzY0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKQEAgLTIwMyw3ICsyMDMsNyBAQAogCWludCAoKnJlc3VtZSkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpOwogCiAJLyogb3BzICovCi0Jc3RydWN0IHNuZF9zb2NfZGFpX29wcyBvcHM7CisJc3RydWN0IHNuZF9zb2NfZGFpX29wcyAqb3BzOwogCiAJLyogREFJIGNhcGFiaWxpdGllcyAqLwogCXN0cnVjdCBzbmRfc29jX3BjbV9zdHJlYW0gY2FwdHVyZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaCBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAppbmRleCBkZmE4MDQ5Li5hN2RlZjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCkBAIC03Niw2ICs3NiwxMSBAQAogCSB3Y29udHJvbHMsIHduY29udHJvbHMpXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQorI2RlZmluZSBTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKKwkgd2NvbnRyb2xzLCB3bmNvbnRyb2xzKVwKK3sgICAgICAgLmlkID0gc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIFwKKwkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCisJLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTUlDQklBUyh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0KSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taWNiaWFzLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSBOVUxMLCAubnVtX2tjb250cm9scyA9IDB9CkBAIC0xMDEsNiArMTA2LDExIEBACiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHMsIFwKIAkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KKyNkZWZpbmUgU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTF9FKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKKwl3Y29udHJvbHMsIHduY29udHJvbHMsIHdldmVudCwgd2ZsYWdzKSBcCit7ICAgICAgIC5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCisJLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCAuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KICNkZWZpbmUgU05EX1NPQ19EQVBNX01JQ0JJQVNfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3ZXZlbnQsIHdmbGFncykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWljYmlhcywgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gTlVMTCwgLm51bV9rY29udHJvbHMgPSAwLCBcCkBAIC0xODIsNiArMTkyLDEyIEBACiAJLmdldCA9IHNuZF9zb2NfZGFwbV9nZXRfdmFsdWVfZW51bV9kb3VibGUsIFwKIAkucHV0ID0gc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZSwgXAogCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KKyNkZWZpbmUgU09DX0RBUE1fUElOX1NXSVRDSCh4bmFtZSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSAiIFN3aXRjaCIsIFwKKwkuaW5mbyA9IHNuZF9zb2NfZGFwbV9pbmZvX3Bpbl9zd2l0Y2gsIFwKKwkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoLCBcCisJLnB1dCA9IHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaCwgXAorCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpeG5hbWUgfQogCiAvKiBkYXBtIHN0cmVhbSBvcGVyYXRpb25zICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QCQkJMHgwCkBAIC0yMjgsNiArMjQ0LDEyIEBACiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOwogaW50IHNuZF9zb2NfZGFwbV9wdXRfdmFsdWVfZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOworaW50IHNuZF9zb2NfZGFwbV9pbmZvX3Bpbl9zd2l0Y2goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7CitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVuY29udHJvbCk7CitpbnQgc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVuY29udHJvbCk7CiBpbnQgc25kX3NvY19kYXBtX25ld19jb250cm9sKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0KTsKIGludCBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKQEAgLTI1MCwxMCArMjcyLDEwIEBACiBpbnQgc25kX3NvY19kYXBtX3N5c19hZGQoc3RydWN0IGRldmljZSAqZGV2KTsKIAogLyogZGFwbSBhdWRpbyBwaW4gY29udHJvbCBhbmQgc3RhdHVzICovCi1pbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7Ci1pbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7Ci1pbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fbmNfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKK2ludCBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOwogaW50IHNuZF9zb2NfZGFwbV9zeW5jKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyk7CiAKIC8qIGRhcG0gd2lkZ2V0IHR5cGVzICovCkBAIC0yNjMsNiArMjg1LDcgQEAKIAlzbmRfc29jX2RhcG1fbXV4LAkJCS8qIHNlbGVjdHMgMSBhbmFsb2cgc2lnbmFsIGZyb20gbWFueSBpbnB1dHMgKi8KIAlzbmRfc29jX2RhcG1fdmFsdWVfbXV4LAkJCS8qIHNlbGVjdHMgMSBhbmFsb2cgc2lnbmFsIGZyb20gbWFueSBpbnB1dHMgKi8KIAlzbmRfc29jX2RhcG1fbWl4ZXIsCQkJLyogbWl4ZXMgc2V2ZXJhbCBhbmFsb2cgc2lnbmFscyB0b2dldGhlciAqLworCXNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsCQkvKiBtaXhlciB3aXRoIG5hbWVkIGNvbnRyb2xzICovCiAJc25kX3NvY19kYXBtX3BnYSwJCQkvKiBwcm9ncmFtbWFibGUgZ2Fpbi9hdHRlbnVhdGlvbiAodm9sdW1lKSAqLwogCXNuZF9zb2NfZGFwbV9hZGMsCQkJLyogYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVyICovCiAJc25kX3NvY19kYXBtX2RhYywJCQkvKiBkaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLmggYi9pbmNsdWRlL3NvdW5kL3NvYy5oCmluZGV4IDI0NTkzYWMuLmE0MGJjNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MuaApAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTE1NCw2ICsxNTYsOCBAQAogCVNORF9TT0NfQklBU19PRkYsCiB9OwogCitzdHJ1Y3Qgc25kX2phY2s7CitzdHJ1Y3Qgc25kX3NvY19jYXJkOwogc3RydWN0IHNuZF9zb2NfZGV2aWNlOwogc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbTsKIHN0cnVjdCBzbmRfc29jX29wczsKQEAgLTE2NCw2ICsxNjgsMTEgQEAKIHN0cnVjdCBzbmRfc29jX2NvZGVjOwogc3RydWN0IHNvY19lbnVtOwogc3RydWN0IHNuZF9zb2NfYWM5N19vcHM7CitzdHJ1Y3Qgc25kX3NvY19qYWNrOworc3RydWN0IHNuZF9zb2NfamFja19waW47CisjaWZkZWYgQ09ORklHX0dQSU9MSUIKK3N0cnVjdCBzbmRfc29jX2phY2tfZ3BpbzsKKyNlbmRpZgogCiB0eXBlZGVmIGludCAoKmh3X3dyaXRlX3QpKHZvaWQgKixjb25zdCBjaGFyKiAsaW50KTsKIHR5cGVkZWYgaW50ICgqaHdfcmVhZF90KSh2b2lkICosY2hhciogLGludCk7CkBAIC0xODQsNiArMTkzLDE5IEBACiBpbnQgc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAljb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSAqaHcpOwogCisvKiBKYWNrIHJlcG9ydGluZyAqLworaW50IHNuZF9zb2NfamFja19uZXcoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqaWQsIGludCB0eXBlLAorCQkgICAgIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2spOwordm9pZCBzbmRfc29jX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBzdGF0dXMsIGludCBtYXNrKTsKK2ludCBzbmRfc29jX2phY2tfYWRkX3BpbnMoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGlucyk7CisjaWZkZWYgQ09ORklHX0dQSU9MSUIKK2ludCBzbmRfc29jX2phY2tfYWRkX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpOwordm9pZCBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKTsKKyNlbmRpZgorCiAvKiBjb2RlYyBJTyAqLwogI2RlZmluZSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZykgY29kZWMtPnJlYWQoY29kZWMsIHJlZykKICNkZWZpbmUgc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSkgY29kZWMtPndyaXRlKGNvZGVjLCByZWcsIHZhbHVlKQpAQCAtMjAzLDYgKzIyNSw4IEBACiAgKi8KIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNuZF9zb2NfY25ldyhjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqX3RlbXBsYXRlLAogCXZvaWQgKmRhdGEsIGNoYXIgKmxvbmdfbmFtZSk7CitpbnQgc25kX3NvY19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9scywgaW50IG51bV9jb250cm9scyk7CiBpbnQgc25kX3NvY19pbmZvX2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOwogaW50IHNuZF9zb2NfaW5mb19lbnVtX2V4dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIzNyw2ICsyNjEsNDggQEAKIGludCBzbmRfc29jX3B1dF92b2xzd19zOChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CiAKKy8qKgorICogc3RydWN0IHNuZF9zb2NfamFja19waW4gLSBEZXNjcmliZXMgYSBwaW4gdG8gdXBkYXRlIGJhc2VkIG9uIGphY2sgZGV0ZWN0aW9uCisgKgorICogQHBpbjogICAgbmFtZSBvZiB0aGUgcGluIHRvIHVwZGF0ZQorICogQG1hc2s6ICAgYml0cyB0byBjaGVjayBmb3IgaW4gcmVwb3J0ZWQgamFjayBzdGF0dXMKKyAqIEBpbnZlcnQ6IGlmIG5vbi16ZXJvIHRoZW4gcGluIGlzIGVuYWJsZWQgd2hlbiBzdGF0dXMgaXMgbm90IHJlcG9ydGVkCisgKi8KK3N0cnVjdCBzbmRfc29jX2phY2tfcGluIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3QgY2hhciAqcGluOworCWludCBtYXNrOworCWJvb2wgaW52ZXJ0OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gLSBEZXNjcmliZXMgYSBncGlvIHBpbiBmb3IgamFjayBkZXRlY3Rpb24KKyAqCisgKiBAZ3BpbzogICAgICAgICBncGlvIG51bWJlcgorICogQG5hbWU6ICAgICAgICAgZ3BpbyBuYW1lCisgKiBAcmVwb3J0OiAgICAgICB2YWx1ZSB0byByZXBvcnQgd2hlbiBqYWNrIGRldGVjdGVkCisgKiBAaW52ZXJ0OiAgICAgICByZXBvcnQgcHJlc2VuY2UgaW4gbG93IHN0YXRlCisgKiBAZGVib3VjZV90aW1lOiBkZWJvdWNlIHRpbWUgaW4gbXMKKyAqLworI2lmZGVmIENPTkZJR19HUElPTElCCitzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8geworCXVuc2lnbmVkIGludCBncGlvOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHJlcG9ydDsKKwlpbnQgaW52ZXJ0OworCWludCBkZWJvdW5jZV90aW1lOworCXN0cnVjdCBzbmRfc29jX2phY2sgKmphY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9OworI2VuZGlmCisKK3N0cnVjdCBzbmRfc29jX2phY2sgeworCXN0cnVjdCBzbmRfamFjayAqamFjazsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOworCXN0cnVjdCBsaXN0X2hlYWQgcGluczsKKwlpbnQgc3RhdHVzOworfTsKKwogLyogU29DIFBDTSBzdHJlYW0gaW5mb3JtYXRpb24gKi8KIHN0cnVjdCBzbmRfc29jX3BjbV9zdHJlYW0gewogCWNoYXIgKnN0cmVhbV9uYW1lOwpAQCAtMzg0LDYgKzQ1MCw4IEBACiAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldjsKIAorCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGRlbGF5ZWRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVmZXJyZWRfcmVzdW1lX3dvcms7CkBAIC0zOTMsNyArNDYxLDYgQEAKIHN0cnVjdCBzbmRfc29jX2RldmljZSB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSAqY29kZWNfZGV2OwogCXZvaWQgKmNvZGVjX2RhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmggYi9pbmNsdWRlL3NvdW5kL3VkYTEzNDEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwZDVkYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3NvdW5kL3VkYTEzNDEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvbGludXgvbDMvdWRhMTM0MS5oCi0gKgotICogUGhpbGlwcyBVREExMzQxIG1peGVyIGRldmljZSBkcml2ZXIgZm9yIEFMU0EKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBIaXN0b3J5OgotICoKLSAqIDIwMDItMDMtMTMgVG9tYXMgS2FzcGFyZWsgSW5pdGlhbCByZWxlYXNlIC0gYmFzZWQgb24gdWRhMTM0MS5oIGZyb20gT1NTCi0gKiAyMDAyLTAzLTMwIFRvbWFzIEthc3BhcmVrIFByb2MgZmlsZXN5c3RlbSBzdXBwb3J0LCBjb21wbGV0ZSBtaXhlciBhbmQgRFNQCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHN1cHBvcnQKLSAqLwotCi0jZGVmaW5lIFVEQTEzNDFfQUxTQV9OQU1FICJzbmQtdWRhMTM0MSIKLQotLyoKLSAqIERlZmF1bHQgcmF0ZSBzZXQgYWZ0ZXIgaW5pY2lhbGl6YXRpb24KLSAqLwotI2RlZmluZSBBVURJT19SQVRFX0RFRkFVTFQJNDQxMDAKLQotLyoKLSAqIFVEQTEzNDEgTDMgYWRkcmVzcyBhbmQgY29tbWFuZCB0eXBlcwotICovCi0jZGVmaW5lIFVEQTEzNDFfTDNBRERSCQk1Ci0jZGVmaW5lIFVEQTEzNDFfREFUQTAJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMCkKLSNkZWZpbmUgVURBMTM0MV9EQVRBMQkJKFVEQTEzNDFfTDNBRERSIDw8IDIgfCAxKQotI2RlZmluZSBVREExMzQxX1NUQVRVUwkJKFVEQTEzNDFfTDNBRERSIDw8IDIgfCAyKQotCi1lbnVtIHVkYTEzNDFfb25vZmYgewotCU9GRj0wLAotCU9OLAotfTsKLQotZW51bSB1ZGExMzQxX2Zvcm1hdCB7Ci0JSTJTPTAsCi0JTFNCMTYsCi0JTFNCMTgsCi0JTFNCMjAsCi0JTVNCLAotCUxTQjE2TVNCLAotCUxTQjE4TVNCLAotCUxTQjIwTVNCLCAgICAgICAgCi19OwotCi1lbnVtIHVkYTEzNDFfZnMgewotCUY1MTI9MCwKLQlGMzg0LAotCUYyNTYsCi0JRnVudXNlZCwKLX07Ci0KLWVudW0gdWRhMTM0MV9wZWFrIHsKLQlCRUZPUkU9MCwKLQlBRlRFUiwKLX07Ci0KLWVudW0gdWRhMTM0MV9maWx0ZXIgewotCUZMQVQ9MCwKLQlNSU4sCi0JTUlOMiwKLQlNQVgsCi19OwotCi1lbnVtIHVkYTEzNDFfbWl4ZXIgewotCURPVUJMRSwKLQlMSU5FLAotCU1JQywKLQlNSVhFUiwKLX07Ci0KLWVudW0gdWRhMTM0MV9kZWVtcCB7Ci0JTk9ORSwKLQlEMzIsCi0JRDQ0LAotCUQ0OCwKLX07Ci0KLWVudW0gdWRhMTM0MV9jb25maWcgewotCUNNRF9SRUFEX1JFRyA9IDAsCi0JQ01EX1JFU0VULAotCUNNRF9GUywKLQlDTURfRk9STUFULAotCUNNRF9PR0FJTiwKLQlDTURfSUdBSU4sCi0JQ01EX0RBQywKLQlDTURfQURDLAotCUNNRF9WT0xVTUUsCi0JQ01EX0JBU1MsCi0JQ01EX1RSRUJCTEUsCi0JQ01EX1BFQUssCi0JQ01EX0RFRU1QLAotCUNNRF9NVVRFLCAgICAgICAgCi0JQ01EX0ZJTFRFUiwKLQlDTURfQ0gxLAotCUNNRF9DSDIsCi0JQ01EX01JQywgICAgICAgCi0JQ01EX01JWEVSLAotCUNNRF9BR0MsCi0JQ01EX0lHLAotCUNNRF9BR0NfVElNRSwKLQlDTURfQUdDX0xFVkVMLAotI2lmZGVmIENPTkZJR19QTQotCUNNRF9TVVNQRU5ELAotCUNNRF9SRVNVTUUsCi0jZW5kaWYKLQlDTURfTEFTVCwKLX07Ci0KLWVudW0gd3JpdGVfdGhyb3VnaCB7Ci0JLy91c2VkIGluIHVwZGF0ZV9iaXRzICh3cml0ZV9jZmcpIHRvIGF2b2lkIGwzX3dyaXRlIC0ganVzdCB1cGRhdGUgbG9jYWwgY29weSBvZiByZWdzLgotCVJFR1NfT05MWT0wLAotCS8vdXBkYXRlIGxvY2FsIHJlZ3MgYW5kIHdyaXRlIHZhbHVlIHRvIHVkYTEzNDEgLSBkbyBsM193cml0ZQotCUZMVVNILAotfTsKLQotaW50IF9faW5pdCBzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBsM19jbGllbnQgKipjbG50KTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGluZGVudC10YWJzLW1vZGU6IHQKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmggYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaAppbmRleCAyYjQ4MjM3Li5hN2U3NGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaAorKysgYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaApAQCAtMSwzICsxLDMgQEAKIC8qIGluY2x1ZGUvdmVyc2lvbi5oICovCi0jZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjE4YSIKKyNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMTkiCiAjZGVmaW5lIENPTkZJR19TTkRfREFURSAiIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93c3MuaCBiL2luY2x1ZGUvc291bmQvd3NzLmgKaW5kZXggZmQwMWYyMi4uNmQ2NWYzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC93c3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3dzcy5oCkBAIC0xNTQsNiArMTU0LDcgQEAKIAkJICAgICAgdW5zaWduZWQgc2hvcnQgaGFyZHdhcmUsCiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGh3c2hhcmUsCiAJCSAgICAgIHN0cnVjdCBzbmRfd3NzICoqcmNoaXApOworaW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCk7CiBpbnQgc25kX3dzc19wY20oc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CiBpbnQgc25kX3dzc190aW1lcihzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF90aW1lciAqKnJ0aW1lcik7CiBpbnQgc25kX3dzc19taXhlcihzdHJ1Y3Qgc25kX3dzcyAqY2hpcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3NrYi5oIGIvaW5jbHVkZS90cmFjZS9za2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY2MTBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9za2IuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9UUkFDRV9TS0JfSF8KKyNkZWZpbmUgX1RSQUNFX1NLQl9IXworCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitERUNMQVJFX1RSQUNFKGtmcmVlX3NrYiwKKwlUUFBST1RPKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmxvY2F0aW9uKSwKKwlUUEFSR1Moc2tiLCBsb2NhdGlvbikpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA2YTVjNWZlLi42ODY5OTEzIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC05NjYsNyArOTY2LDYgQEAKIAogY29uZmlnIFJUX01VVEVYRVMKIAlib29sZWFuCi0Jc2VsZWN0IFBMSVNUCiAKIGNvbmZpZyBCQVNFX1NNQUxMCiAJaW50CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggNTRiNDA3Ny4uYThkZGFkYiAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtMTE1NiwxMCArMTE1NiwxMiBAQAogCW9tcXN0YXQubXFfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlpZiAodV9tcXN0YXQpIHsKIAkJYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRlcywgJm1xc3RhdCk7CisJCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAkJaWYgKG1xc3RhdC5tcV9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCQlmaWxwLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAJCWVsc2UKIAkJCWZpbHAtPmZfZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7CisJCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJfQpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDA1ZDUxZDIuLmYyMzlkODcgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9pcGNfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0zODMsNiArMzg0LDcgQEAKIAllcnJvciA9IFBUUl9FUlIoZmlsZSk7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZ290byBub19maWxlOworCWltYV9zaG1fY2hlY2soZmlsZSk7CiAKIAlpZCA9IGlwY19hZGRpZCgmc2htX2lkcyhucyksICZzaHAtPnNobV9wZXJtLCBucy0+c2htX2N0bG1uaSk7CiAJaWYgKGlkIDwgMCkgewpAQCAtODg3LDYgKzg4OSw3IEBACiAJZmlsZSA9IGFsbG9jX2ZpbGUocGF0aC5tbnQsIHBhdGguZGVudHJ5LCBmX21vZGUsICZzaG1fZmlsZV9vcGVyYXRpb25zKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0X2ZyZWU7CisJaW1hX3NobV9jaGVjayhmaWxlKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNmZDsKIAlmaWxlLT5mX21hcHBpbmcgPSBzaHAtPnNobV9maWxlLT5mX21hcHBpbmc7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2NoaXAuYyBiL2tlcm5lbC9pcnEvY2hpcC5jCmluZGV4IDdkZTExYmQuLjAzZDBiZWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC03OCw2ICs3OCw3IEBACiAJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9iYWRfaXJxOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CiAJZGVzYy0+bmFtZSA9IE5VTEw7CisJY2xlYXJfa3N0YXRfaXJxcyhkZXNjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI5MCw3ICsyOTEsOCBAQAogCQlkZXNjLT5jaGlwLT5tYXNrX2FjayhpcnEpOwogCWVsc2UgewogCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7Ci0JCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAJfQogfQogCkBAIC00NzYsNyArNDc4LDggQEAKIAlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qIFN0YXJ0IGhhbmRsaW5nIHRoZSBpcnEgKi8KLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKIAlkZXNjID0gaXJxX3JlbWFwX3RvX2Rlc2MoaXJxLCBkZXNjKTsKIAogCS8qIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDNhYmE4ZDEuLmY2Y2RkYTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtODMsMTkgKzgzLDIxIEBACiAKIHZvaWQgaW5pdF9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSwgaW50IG5yKQogewotCXVuc2lnbmVkIGxvbmcgYnl0ZXM7Ci0JY2hhciAqcHRyOwogCWludCBub2RlOwotCi0JLyogQ29tcHV0ZSBob3cgbWFueSBieXRlcyB3ZSBuZWVkIHBlciBpcnEgYW5kIGFsbG9jYXRlIHRoZW0gKi8KLQlieXRlcyA9IG5yICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJdm9pZCAqcHRyOwogCiAJbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0JcHRyID0ga3phbGxvY19ub2RlKGJ5dGVzLCBHRlBfQVRPTUlDLCBub2RlKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBhbGxvYyBrc3RhdF9pcnFzIG9uIGNwdSAlZCBub2RlICVkXG4iLCBjcHUsIG5vZGUpOworCXB0ciA9IGt6YWxsb2Nfbm9kZShuciAqIHNpemVvZigqZGVzYy0+a3N0YXRfaXJxcyksIEdGUF9BVE9NSUMsIG5vZGUpOwogCi0JaWYgKHB0cikKLQkJZGVzYy0+a3N0YXRfaXJxcyA9ICh1bnNpZ25lZCBpbnQgKilwdHI7CisJLyoKKwkgKiBkb24ndCBvdmVyd2l0ZSBpZiBjYW4gbm90IGdldCBuZXcgb25lCisJICogaW5pdF9jb3B5X2tzdGF0X2lycXMoKSBjb3VsZCBzdGlsbCB1c2Ugb2xkIG9uZQorCSAqLworCWlmIChwdHIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgYWxsb2Mga3N0YXRfaXJxcyBvbiBjcHUgJWQgbm9kZSAlZFxuIiwKKwkJCSBjcHUsIG5vZGUpOworCQlkZXNjLT5rc3RhdF9pcnFzID0gcHRyOworCX0KIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmVfaXJxX2Rlc2MoaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQpAQCAtMjI3LDYgKzIyOSw3IEBACiAJfQogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2FsbFtOUl9JUlFTXVtOUl9DUFVTXTsKIGludCBfX2luaXQgZWFybHlfaXJxX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CkBAIC0yMzgsOCArMjQxLDEwIEBACiAJZGVzYyA9IGlycV9kZXNjOwogCWNvdW50ID0gQVJSQVlfU0laRShpcnFfZGVzYyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlkZXNjW2ldLmlycSA9IGk7CisJCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGtzdGF0X2lycXNfYWxsW2ldOworCX0KIAogCXJldHVybiBhcmNoX2Vhcmx5X2lycV9pbml0KCk7CiB9CkBAIC0yNTUsNiArMjYwLDExIEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19TUEFSU0VfSVJRICovCiAKK3ZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJbWVtc2V0KGRlc2MtPmtzdGF0X2lycXMsIDAsIG5yX2NwdV9pZHMgKiBzaXplb2YoKihkZXNjLT5rc3RhdF9pcnFzKSkpOworfQorCiAvKgogICogV2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yPwogICogRWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWxmLgpAQCAtMzI4LDYgKzMzOCw4IEBACiAJaXJxcmV0dXJuX3QgcmV0LCByZXR2YWwgPSBJUlFfTk9ORTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAorCVdBUk5fT05DRSghaW5faXJxKCksICJCVUc6IElSUSBoYW5kbGVyIGNhbGxlZCBmcm9tIG5vbi1oYXJkaXJxIGNvbnRleHQhIik7CisKIAlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkpCiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCkBAIC0zNDcsNiArMzU5LDExIEBACiB9CiAKICNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCisjaWZkZWYgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQKKyMgd2FybmluZyBfX2RvX0lSUSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgY29udmVydCB0byBwcm9wZXIgZmxvdyBoYW5kbGVycworI2VuZGlmCisKIC8qKgogICogX19kb19JUlEgLSBvcmlnaW5hbCBhbGwgaW4gb25lIGhpZ2hsZXZlbCBJUlEgaGFuZGxlcgogICogQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKQEAgLTQ2NywxMiArNDg0LDEwIEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJcmV0dXJuIGRlc2MgPyBkZXNjLT5rc3RhdF9pcnFzW2NwdV0gOiAwOwogfQotI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGtzdGF0X2lycXNfY3B1KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pbnRlcm5hbHMuaCBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKaW5kZXggZTZkMGE0My4uYjYwOTUwYiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCkBAIC0xNSw2ICsxNSw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaXJxX2Rlc2NfbG9ja19jbGFzczsKIGV4dGVybiB2b2lkIGluaXRfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUsIGludCBucik7CitleHRlcm4gdm9pZCBjbGVhcl9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CiBleHRlcm4gc3BpbmxvY2tfdCBzcGFyc2VfaXJxX2xvY2s7CiBleHRlcm4gc3RydWN0IGlycV9kZXNjICppcnFfZGVzY19wdHJzW05SX0lSUVNdOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCAyOTFmMDM2Li5lYTExOWVmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogLyoKICAqIEdlbmVyaWMgdmVyc2lvbiBvZiB0aGUgYWZmaW5pdHkgYXV0b3NlbGVjdG9yLgogICovCi1pbnQgZG9faXJxX3NlbGVjdF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCitzdGF0aWMgaW50IHNldHVwX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlpZiAoIWlycV9jYW5fc2V0X2FmZmluaXR5KGlycSkpCiAJCXJldHVybiAwOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgZG9faXJxX3NlbGVjdF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmQpCitzdGF0aWMgaW5saW5lIGludCBzZXR1cF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmQpCiB7CiAJcmV0dXJuIGlycV9zZWxlY3RfYWZmaW5pdHkoaXJxKTsKIH0KQEAgLTE0OSwxNCArMTQ5LDE0IEBACiAJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gZG9faXJxX3NlbGVjdF9hZmZpbml0eShpcnEsIGRlc2MpOworCXJldCA9IHNldHVwX2FmZmluaXR5KGlycSwgZGVzYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkoaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGlubGluZSBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXJldHVybiAwOwogfQpAQCAtMzg5LDkgKzM4OSw5IEBACiAgKiBhbGxvY2F0ZSBzcGVjaWFsIGludGVycnVwdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgYXJjaGl0ZWN0dXJlLgogICovCiBzdGF0aWMgaW50Ci1fX3NldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKiBkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpCitfX3NldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKm5ldykKIHsKLQlzdHJ1Y3QgaXJxYWN0aW9uICpvbGQsICoqcDsKKwlzdHJ1Y3QgaXJxYWN0aW9uICpvbGQsICoqb2xkX3B0cjsKIAljb25zdCBjaGFyICpvbGRfbmFtZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc2hhcmVkID0gMDsKQEAgLTQyMyw4ICs0MjMsOCBAQAogCSAqIFRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgY29kZSBoYXMgdG8gYmUgZXhlY3V0ZWQgYXRvbWljYWxseQogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JcCA9ICZkZXNjLT5hY3Rpb247Ci0Jb2xkID0gKnA7CisJb2xkX3B0ciA9ICZkZXNjLT5hY3Rpb247CisJb2xkID0gKm9sZF9wdHI7CiAJaWYgKG9sZCkgewogCQkvKgogCQkgKiBDYW4ndCBzaGFyZSBpbnRlcnJ1cHRzIHVubGVzcyBib3RoIGFncmVlIHRvIGFuZCBhcmUKQEAgLTQ0Nyw4ICs0NDcsOCBAQAogCiAJCS8qIGFkZCBuZXcgaW50ZXJydXB0IGF0IGVuZCBvZiBpcnEgcXVldWUgKi8KIAkJZG8gewotCQkJcCA9ICZvbGQtPm5leHQ7Ci0JCQlvbGQgPSAqcDsKKwkJCW9sZF9wdHIgPSAmb2xkLT5uZXh0OworCQkJb2xkID0gKm9sZF9wdHI7CiAJCX0gd2hpbGUgKG9sZCk7CiAJCXNoYXJlZCA9IDE7CiAJfQpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX05PX0JBTEFOQ0lORzsKIAogCQkvKiBTZXQgZGVmYXVsdCBhZmZpbml0eSBtYXNrIG9uY2UgZXZlcnl0aGluZyBpcyBzZXR1cCAqLwotCQlkb19pcnFfc2VsZWN0X2FmZmluaXR5KGlycSwgZGVzYyk7CisJCXNldHVwX2FmZmluaXR5KGlycSwgZGVzYyk7CiAKIAl9IGVsc2UgaWYgKChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spCiAJCQkmJiAobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCQkJKGludCkobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKSk7CiAJfQogCi0JKnAgPSBuZXc7CisJKm9sZF9wdHIgPSBuZXc7CiAKIAkvKiBSZXNldCBicm9rZW4gaXJxIGRldGVjdGlvbiB3aGVuIGluc3RhbGxpbmcgbmV3IGhhbmRsZXIgKi8KIAlkZXNjLT5pcnFfY291bnQgPSAwOwpAQCAtNTQ5LDkgKzU0OSwxMDIgQEAKIAogCXJldHVybiBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzZXR1cF9pcnEpOworCisgLyoKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXIgYW4gaXJxYWN0aW9uIC0gdXNlZCB0byBmcmVlCisgKiByZWd1bGFyIGFuZCBzcGVjaWFsIGludGVycnVwdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgYXJjaGl0ZWN0dXJlLgorICovCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiAqX19mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24sICoqYWN0aW9uX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTihpbl9pbnRlcnJ1cHQoKSwgIlRyeWluZyB0byBmcmVlIElSUSAlZCBmcm9tIElSUSBjb250ZXh0IVxuIiwgaXJxKTsKKworCWlmICghZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgYWN0aW9ucyBwZXIgSVJRIGRlc2NyaXB0b3IsIGZpbmQgdGhlIHJpZ2h0CisJICogb25lIGJhc2VkIG9uIHRoZSBkZXZfaWQ6CisJICovCisJYWN0aW9uX3B0ciA9ICZkZXNjLT5hY3Rpb247CisJZm9yICg7OykgeworCQlhY3Rpb24gPSAqYWN0aW9uX3B0cjsKKworCQlpZiAoIWFjdGlvbikgeworCQkJV0FSTigxLCAiVHJ5aW5nIHRvIGZyZWUgYWxyZWFkeS1mcmVlIElSUSAlZFxuIiwgaXJxKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoYWN0aW9uLT5kZXZfaWQgPT0gZGV2X2lkKQorCQkJYnJlYWs7CisJCWFjdGlvbl9wdHIgPSAmYWN0aW9uLT5uZXh0OworCX0KKworCS8qIEZvdW5kIGl0IC0gbm93IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGVudHJpZXM6ICovCisJKmFjdGlvbl9wdHIgPSBhY3Rpb24tPm5leHQ7CisKKwkvKiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IFVNTCwgbWlnaHQgZGlzYXBwZWFyIG9uZSBkYXk6ICovCisjaWZkZWYgQ09ORklHX0lSUV9SRUxFQVNFX01FVEhPRAorCWlmIChkZXNjLT5jaGlwLT5yZWxlYXNlKQorCQlkZXNjLT5jaGlwLT5yZWxlYXNlKGlycSwgZGV2X2lkKTsKKyNlbmRpZgorCisJLyogSWYgdGhpcyB3YXMgdGhlIGxhc3QgaGFuZGxlciwgc2h1dCBkb3duIHRoZSBJUlEgbGluZTogKi8KKwlpZiAoIWRlc2MtPmFjdGlvbikgeworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RJU0FCTEVEOworCQlpZiAoZGVzYy0+Y2hpcC0+c2h1dGRvd24pCisJCQlkZXNjLT5jaGlwLT5zaHV0ZG93bihpcnEpOworCQllbHNlCisJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCXVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKGlycSwgYWN0aW9uKTsKKworCS8qIE1ha2Ugc3VyZSBpdCdzIG5vdCBiZWluZyB1c2VkIG9uIGFub3RoZXIgQ1BVOiAqLworCXN5bmNocm9uaXplX2lycShpcnEpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCisJLyoKKwkgKiBJdCdzIGEgc2hhcmVkIElSUSAtLSB0aGUgZHJpdmVyIG91Z2h0IHRvIGJlIHByZXBhcmVkIGZvciBhbiBJUlEKKwkgKiBldmVudCB0byBoYXBwZW4gZXZlbiBub3cgaXQncyBiZWluZyBmcmVlZCwgc28gbGV0J3MgbWFrZSBzdXJlIHRoYXQKKwkgKiBpcyBzbyBieSBkb2luZyBhbiBleHRyYSBjYWxsIHRvIHRoZSBoYW5kbGVyIC4uLi4KKwkgKgorCSAqICggV2UgZG8gdGhpcyBhZnRlciBhY3R1YWxseSBkZXJlZ2lzdGVyaW5nIGl0LCB0byBtYWtlIHN1cmUgdGhhdCBhCisJICogICAncmVhbCcgSVJRIGRvZXNuJ3QgcnVuIGluICogcGFyYWxsZWwgd2l0aCBvdXIgZmFrZS4gKQorCSAqLworCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlhY3Rpb24tPmhhbmRsZXIoaXJxLCBkZXZfaWQpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorI2VuZGlmCisJcmV0dXJuIGFjdGlvbjsKK30KIAogLyoqCi0gKglmcmVlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0CisgKglyZW1vdmVfaXJxIC0gZnJlZSBhbiBpbnRlcnJ1cHQKKyAqCUBpcnE6IEludGVycnVwdCBsaW5lIHRvIGZyZWUKKyAqCUBhY3Q6IGlycWFjdGlvbiBmb3IgdGhlIGludGVycnVwdAorICoKKyAqIFVzZWQgdG8gcmVtb3ZlIGludGVycnVwdHMgc3RhdGljYWxseSBzZXR1cCBieSB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLgorICovCit2b2lkIHJlbW92ZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0KQoreworCV9fZnJlZV9pcnEoaXJxLCBhY3QtPmRldl9pZCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfaXJxKTsKKworLyoqCisgKglmcmVlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0IGFsbG9jYXRlZCB3aXRoIHJlcXVlc3RfaXJxCiAgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBmcmVlCiAgKglAZGV2X2lkOiBEZXZpY2UgaWRlbnRpdHkgdG8gZnJlZQogICoKQEAgLTU2Niw3MyArNjU5LDcgQEAKICAqLwogdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQlzdHJ1Y3QgaXJxYWN0aW9uICoqcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7Ci0KLQlpZiAoIWRlc2MpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JcCA9ICZkZXNjLT5hY3Rpb247Ci0JZm9yICg7OykgewotCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24gPSAqcDsKLQotCQlpZiAoYWN0aW9uKSB7Ci0JCQlzdHJ1Y3QgaXJxYWN0aW9uICoqcHAgPSBwOwotCi0JCQlwID0gJmFjdGlvbi0+bmV4dDsKLQkJCWlmIChhY3Rpb24tPmRldl9pZCAhPSBkZXZfaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIEZvdW5kIGl0IC0gbm93IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGVudHJpZXMgKi8KLQkJCSpwcCA9IGFjdGlvbi0+bmV4dDsKLQotCQkJLyogQ3VycmVudGx5IHVzZWQgb25seSBieSBVTUwsIG1pZ2h0IGRpc2FwcGVhciBvbmUgZGF5LiovCi0jaWZkZWYgQ09ORklHX0lSUV9SRUxFQVNFX01FVEhPRAotCQkJaWYgKGRlc2MtPmNoaXAtPnJlbGVhc2UpCi0JCQkJZGVzYy0+Y2hpcC0+cmVsZWFzZShpcnEsIGRldl9pZCk7Ci0jZW5kaWYKLQotCQkJaWYgKCFkZXNjLT5hY3Rpb24pIHsKLQkJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RJU0FCTEVEOwotCQkJCWlmIChkZXNjLT5jaGlwLT5zaHV0ZG93bikKLQkJCQkJZGVzYy0+Y2hpcC0+c2h1dGRvd24oaXJxKTsKLQkJCQllbHNlCi0JCQkJCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJCXVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKGlycSwgYWN0aW9uKTsKLQotCQkJLyogTWFrZSBzdXJlIGl0J3Mgbm90IGJlaW5nIHVzZWQgb24gYW5vdGhlciBDUFUgKi8KLQkJCXN5bmNocm9uaXplX2lycShpcnEpOwotI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQotCQkJLyoKLQkJCSAqIEl0J3MgYSBzaGFyZWQgSVJRIC0tIHRoZSBkcml2ZXIgb3VnaHQgdG8gYmUKLQkJCSAqIHByZXBhcmVkIGZvciBpdCB0byBoYXBwZW4gZXZlbiBub3cgaXQncwotCQkJICogYmVpbmcgZnJlZWQsIHNvIGxldCdzIG1ha2Ugc3VyZS4uLi4gIFdlIGRvCi0JCQkgKiB0aGlzIGFmdGVyIGFjdHVhbGx5IGRlcmVnaXN0ZXJpbmcgaXQsIHRvCi0JCQkgKiBtYWtlIHN1cmUgdGhhdCBhICdyZWFsJyBJUlEgZG9lc24ndCBydW4gaW4KLQkJCSAqIHBhcmFsbGVsIHdpdGggb3VyIGZha2UKLQkJCSAqLwotCQkJaWYgKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgewotCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCQlhY3Rpb24tPmhhbmRsZXIoaXJxLCBkZXZfaWQpOwotCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCX0KLSNlbmRpZgotCQkJa2ZyZWUoYWN0aW9uKTsKLQkJCXJldHVybjsKLQkJfQotCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIGFscmVhZHktZnJlZSBJUlEgJWRcbiIsIGlycSk7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCi0JCWR1bXBfc3RhY2soKTsKLSNlbmRpZgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9CisJa2ZyZWUoX19mcmVlX2lycShpcnEsIGRldl9pZCkpOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX2lycSk7CiAKQEAgLTY3OSwxMSArNzA2LDEyIEBACiAJICogdGhlIGJlaGF2aW9yIGlzIGNsYXNzaWZpZWQgYXMgIndpbGwgbm90IGZpeCIgc28gd2UgbmVlZCB0bwogCSAqIHN0YXJ0IG51ZGdpbmcgZHJpdmVycyBhd2F5IGZyb20gdXNpbmcgdGhhdCBpZGlvbS4KIAkgKi8KLQlpZiAoKGlycWZsYWdzICYgKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKQotCQkJPT0gKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKQotCQlwcl93YXJuaW5nKCJJUlEgJWQvJXM6IElSUUZfRElTQUJMRUQgaXMgbm90ICIKLQkJCQkiZ3VhcmFudGVlZCBvbiBzaGFyZWQgSVJRc1xuIiwKLQkJCQlpcnEsIGRldm5hbWUpOworCWlmICgoaXJxZmxhZ3MgJiAoSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCkpID09CisJCQkJCShJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkgeworCQlwcl93YXJuaW5nKAorCQkgICJJUlEgJWQvJXM6IElSUUZfRElTQUJMRUQgaXMgbm90IGd1YXJhbnRlZWQgb24gc2hhcmVkIElSUXNcbiIsCisJCQlpcnEsIGRldm5hbWUpOworCX0KIAogI2lmZGVmIENPTkZJR19MT0NLREVQCiAJLyoKQEAgLTcwOSwxNSArNzM3LDEzIEBACiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLCBHRlBfQVRPTUlDKTsKKwlhY3Rpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhY3Rpb24pCiAJCXJldHVybiAtRU5PTUVNOwogCiAJYWN0aW9uLT5oYW5kbGVyID0gaGFuZGxlcjsKIAlhY3Rpb24tPmZsYWdzID0gaXJxZmxhZ3M7Ci0JY3B1c19jbGVhcihhY3Rpb24tPm1hc2spOwogCWFjdGlvbi0+bmFtZSA9IGRldm5hbWU7Ci0JYWN0aW9uLT5uZXh0ID0gTlVMTDsKIAlhY3Rpb24tPmRldl9pZCA9IGRldl9pZDsKIAogCXJldHZhbCA9IF9fc2V0dXBfaXJxKGlycSwgZGVzYywgYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMgYi9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCmluZGV4IGFjZDg4MzUuLmFlZjE4YWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKKysrIGIva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYwpAQCAtMTcsMTYgKzE3LDExIEBACiAJCQkJIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKIAkJCQkgaW50IGNwdSwgaW50IG5yKQogewotCXVuc2lnbmVkIGxvbmcgYnl0ZXM7Ci0KIAlpbml0X2tzdGF0X2lycXMoZGVzYywgY3B1LCBucik7CiAKLQlpZiAoZGVzYy0+a3N0YXRfaXJxcyAhPSBvbGRfZGVzYy0+a3N0YXRfaXJxcykgewotCQkvKiBDb21wdXRlIGhvdyBtYW55IGJ5dGVzIHdlIG5lZWQgcGVyIGlycSBhbmQgYWxsb2NhdGUgdGhlbSAqLwotCQlieXRlcyA9IG5yICogc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0KLQkJbWVtY3B5KGRlc2MtPmtzdGF0X2lycXMsIG9sZF9kZXNjLT5rc3RhdF9pcnFzLCBieXRlcyk7Ci0JfQorCWlmIChkZXNjLT5rc3RhdF9pcnFzICE9IG9sZF9kZXNjLT5rc3RhdF9pcnFzKQorCQltZW1jcHkoZGVzYy0+a3N0YXRfaXJxcywgb2xkX2Rlc2MtPmtzdGF0X2lycXMsCisJCQkgbnIgKiBzaXplb2YoKmRlc2MtPmtzdGF0X2lycXMpKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCBkZDM2NGMxLi40ZDU2ODI5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlyZXR1cm4gb2s7CiB9CiAKLXN0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KQorc3RhdGljIHZvaWQgcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CkBAIC0xMjMsMTEgKzEyMywyMyBAQAogCiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOwogCX0KK30KKworc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJcG9sbF9hbGxfc2hhcmVkX2lycXMoKTsKIAogCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCiAJCSAgamlmZmllcyArIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMKTsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQordm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKQoreworCXBvbGxfYWxsX3NoYXJlZF9pcnFzKCk7Cit9CisjZW5kaWYKKwogLyoKICAqIElmIDk5LDkwMCBvZiB0aGUgcHJldmlvdXMgMTAwLDAwMCBpbnRlcnJ1cHRzIGhhdmUgbm90IGJlZW4gaGFuZGxlZAogICogdGhlbiBhc3N1bWUgdGhhdCB0aGUgSVJRIGlzIHN0dWNrIGluIHNvbWUgbWFubmVyLiBEcm9wIGEgZGlhZ25vc3RpYwpkaWZmIC0tZ2l0IGEva2VybmVsL2xhdGVuY3l0b3AuYyBiL2tlcm5lbC9sYXRlbmN5dG9wLmMKaW5kZXggNDQ5ZGI0Ni4uY2EwN2M1YyAxMDA2NDQKLS0tIGEva2VybmVsL2xhdGVuY3l0b3AuYworKysgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCkBAIC05LDYgKzksNDQgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKICAqIG9mIHRoZSBMaWNlbnNlLgogICovCisKKy8qCisgKiBDT05GSUdfTEFURU5DWVRPUCBlbmFibGVzIGEga2VybmVsIGxhdGVuY3kgdHJhY2tpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBpcworICogdXNlZCBieSB0aGUgImxhdGVuY3l0b3AiIHVzZXJzcGFjZSB0b29sLiBUaGUgbGF0ZW5jeSB0aGF0IGlzIHRyYWNrZWQgaXMgbm90CisgKiB0aGUgJ3RyYWRpdGlvbmFsJyBpbnRlcnJ1cHQgbGF0ZW5jeSAod2hpY2ggaXMgcHJpbWFyaWx5IGNhdXNlZCBieSBzb21ldGhpbmcKKyAqIGVsc2UgY29uc3VtaW5nIENQVSksIGJ1dCBpbnN0ZWFkLCBpdCBpcyB0aGUgbGF0ZW5jeSBhbiBhcHBsaWNhdGlvbiBlbmNvdW50ZXJzCisgKiBiZWNhdXNlIHRoZSBrZXJuZWwgc2xlZXBzIG9uIGl0cyBiZWhhbGYgZm9yIHZhcmlvdXMgcmVhc29ucy4KKyAqCisgKiBUaGlzIGNvZGUgdHJhY2tzIDIgbGV2ZWxzIG9mIHN0YXRpc3RpY3M6CisgKiAxKSBTeXN0ZW0gbGV2ZWwgbGF0ZW5jeQorICogMikgUGVyIHByb2Nlc3MgbGF0ZW5jeQorICoKKyAqIFRoZSBsYXRlbmN5IGlzIHN0b3JlZCBpbiBmaXhlZCBzaXplZCBkYXRhIHN0cnVjdHVyZXMgaW4gYW4gYWNjdW11bGF0ZWQgZm9ybTsKKyAqIGlmIHRoZSAic2FtZSIgbGF0ZW5jeSBjYXVzZSBpcyBoaXQgdHdpY2UsIHRoaXMgd2lsbCBiZSB0cmFja2VkIGFzIG9uZSBlbnRyeQorICogaW4gdGhlIGRhdGEgc3RydWN0dXJlLiBCb3RoIHRoZSBjb3VudCwgdG90YWwgYWNjdW11bGF0ZWQgbGF0ZW5jeSBhbmQgbWF4aW11bQorICogbGF0ZW5jeSBhcmUgdHJhY2tlZCBpbiB0aGlzIGRhdGEgc3RydWN0dXJlLiBXaGVuIHRoZSBmaXhlZCBzaXplIHN0cnVjdHVyZSBpcworICogZnVsbCwgbm8gbmV3IGNhdXNlcyBhcmUgdHJhY2tlZCB1bnRpbCB0aGUgYnVmZmVyIGlzIGZsdXNoZWQgYnkgd3JpdGluZyB0bworICogdGhlIC9wcm9jIGZpbGU7IHRoZSB1c2Vyc3BhY2UgdG9vbCBkb2VzIHRoaXMgb24gYSByZWd1bGFyIGJhc2lzLgorICoKKyAqIEEgbGF0ZW5jeSBjYXVzZSBpcyBpZGVudGlmaWVkIGJ5IGEgc3RyaW5naWZpZWQgYmFja3RyYWNlIGF0IHRoZSBwb2ludCB0aGF0CisgKiB0aGUgc2NoZWR1bGVyIGdldHMgaW52b2tlZC4gVGhlIHVzZXJsYW5kIHRvb2wgd2lsbCB1c2UgdGhpcyBzdHJpbmcgdG8KKyAqIGlkZW50aWZ5IHRoZSBjYXVzZSBvZiB0aGUgbGF0ZW5jeSBpbiBodW1hbiByZWFkYWJsZSBmb3JtLgorICoKKyAqIFRoZSBpbmZvcm1hdGlvbiBpcyBleHBvcnRlZCB2aWEgL3Byb2MvbGF0ZW5jeV9zdGF0cyBhbmQgL3Byb2MvPHBpZD4vbGF0ZW5jeS4KKyAqIFRoZXNlIGZpbGVzIGxvb2sgbGlrZSB0aGlzOgorICoKKyAqIExhdGVuY3kgVG9wIHZlcnNpb24gOiB2MC4xCisgKiA3MCA1OTQzMyA0ODk3IGk5MTVfaXJxX3dhaXQgZHJtX2lvY3RsIHZmc19pb2N0bCBkb192ZnNfaW9jdGwgc3lzX2lvY3RsCisgKiB8ICAgIHwgICAgfCAgICB8CisgKiB8ICAgIHwgICAgfCAgICArLS0tLT4gdGhlIHN0cmluZ2lmaWVkIGJhY2t0cmFjZQorICogfCAgICB8ICAgICstLS0tLS0tLS0+IFRoZSBtYXhpbXVtIGxhdGVuY3kgZm9yIHRoaXMgZW50cnkgaW4gbWljcm9zZWNvbmRzCisgKiB8ICAgICstLS0tLS0tLS0tLS0tLT4gVGhlIGFjY3VtdWxhdGVkIGxhdGVuY3kgZm9yIHRoaXMgZW50cnkgKG1pY3Jvc2Vjb25kcykKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tPiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZW50cnkgaXMgaGl0CisgKgorICogKG5vdGU6IHRoZSBhdmVyYWdlIGxhdGVuY3kgaXMgdGhlIGFjY3VtdWxhdGVkIGxhdGVuY3kgZGl2aWRlZCBieSB0aGUgbnVtYmVyCisgKiBvZiB0aW1lcykKKyAqLworCiAjaW5jbHVkZSA8bGludXgvbGF0ZW5jeXRvcC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTcyLDcgKzExMCw3IEBACiAJCQkJZmlyc3Rub25udWxsID0gaTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWZvciAocSA9IDAgOyBxIDwgTFRfQkFDS1RSQUNFREVQVEggOyBxKyspIHsKKwkJZm9yIChxID0gMDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIOyBxKyspIHsKIAkJCXVuc2lnbmVkIGxvbmcgcmVjb3JkID0gbGF0LT5iYWNrdHJhY2VbcV07CiAKIAkJCWlmIChsYXRlbmN5X3JlY29yZFtpXS5iYWNrdHJhY2VbcV0gIT0gcmVjb3JkKSB7CkBAIC0xMDEsMzEgKzEzOSw1MiBAQAogCW1lbWNweSgmbGF0ZW5jeV9yZWNvcmRbaV0sIGxhdCwgc2l6ZW9mKHN0cnVjdCBsYXRlbmN5X3JlY29yZCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfc3RhY2t0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGxhdGVuY3lfcmVjb3JkICpsYXQpCisvKgorICogSXRlcmF0b3IgdG8gc3RvcmUgYSBiYWNrdHJhY2UgaW50byBhIGxhdGVuY3kgcmVjb3JkIGVudHJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZV9zdGFja3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQgKmxhdCkKIHsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2U7CiAKIAltZW1zZXQoJnRyYWNlLCAwLCBzaXplb2YodHJhY2UpKTsKIAl0cmFjZS5tYXhfZW50cmllcyA9IExUX0JBQ0tUUkFDRURFUFRIOwogCXRyYWNlLmVudHJpZXMgPSAmbGF0LT5iYWNrdHJhY2VbMF07Ci0JdHJhY2Uuc2tpcCA9IDA7CiAJc2F2ZV9zdGFja190cmFjZV90c2sodHNrLCAmdHJhY2UpOwogfQogCisvKioKKyAqIF9fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeSAtIHJlY29yZCBhbiBvY2N1cmVkIGxhdGVuY3kKKyAqIEB0c2sgLSB0aGUgdGFzayBzdHJ1Y3Qgb2YgdGhlIHRhc2sgaGl0dGluZyB0aGUgbGF0ZW5jeQorICogQHVzZWNzIC0gdGhlIGR1cmF0aW9uIG9mIHRoZSBsYXRlbmN5IGluIG1pY3Jvc2Vjb25kcworICogQGludGVyIC0gMSBpZiB0aGUgc2xlZXAgd2FzIGludGVycnVwdGlibGUsIDAgaWYgdW5pbnRlcnJ1cHRpYmxlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgcmVjb3JkaW5nIGxhdGVuY3kgZW50cmllcworICogYXMgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBoYXMgYSBmZXcgc3BlY2lhbCBjYXNlcyB0byBkZWFsIHdpdGggbm9ybWFsICdub24tbGF0ZW5jeScKKyAqIHNsZWVwczogc3BlY2lmaWNhbGx5LCBpbnRlcnJ1cHRpYmxlIHNsZWVwIGxvbmdlciB0aGFuIDUgbXNlYyBpcyBza2lwcGVkCisgKiBzaW5jZSB0aGlzIHVzdWFsbHkgaXMgY2F1c2VkIGJ5IHdhaXRpbmcgZm9yIGV2ZW50cyB2aWEgc2VsZWN0KCkgYW5kIGNvLgorICoKKyAqIE5lZ2F0aXZlIGxhdGVuY2llcyAoY2F1c2VkIGJ5IHRpbWUgZ29pbmcgYmFja3dhcmRzKSBhcmUgYWxzbyBleHBsaWNpdGx5CisgKiBza2lwcGVkLgorICovCiB2b2lkIF9fc2NoZWQKLWFjY291bnRfc2NoZWR1bGVyX2xhdGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCB1c2VjcywgaW50IGludGVyKQorX19hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBxOwogCXN0cnVjdCBsYXRlbmN5X3JlY29yZCBsYXQ7CiAKLQlpZiAoIWxhdGVuY3l0b3BfZW5hYmxlZCkKLQkJcmV0dXJuOwotCiAJLyogTG9uZyBpbnRlcnJ1cHRpYmxlIHdhaXRzIGFyZSBnZW5lcmFsbHkgdXNlciByZXF1ZXN0ZWQuLi4gKi8KIAlpZiAoaW50ZXIgJiYgdXNlY3MgPiA1MDAwKQogCQlyZXR1cm47CiAKKwkvKiBOZWdhdGl2ZSBzbGVlcHMgYXJlIHRpbWUgZ29pbmcgYmFja3dhcmRzICovCisJLyogWmVyby10aW1lIHNsZWVwcyBhcmUgbm9uLWludGVyZXN0aW5nICovCisJaWYgKHVzZWNzIDw9IDApCisJCXJldHVybjsKKwogCW1lbXNldCgmbGF0LCAwLCBzaXplb2YobGF0KSk7CiAJbGF0LmNvdW50ID0gMTsKIAlsYXQudGltZSA9IHVzZWNzOwpAQCAtMTQzLDEyICsyMDIsMTIgQEAKIAlpZiAodHNrLT5sYXRlbmN5X3JlY29yZF9jb3VudCA+PSBMVF9TQVZFQ09VTlQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWZvciAoaSA9IDA7IGkgPCBMVF9TQVZFQ09VTlQgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTFRfU0FWRUNPVU5UOyBpKyspIHsKIAkJc3RydWN0IGxhdGVuY3lfcmVjb3JkICpteWxhdDsKIAkJaW50IHNhbWUgPSAxOwogCiAJCW15bGF0ID0gJnRzay0+bGF0ZW5jeV9yZWNvcmRbaV07Ci0JCWZvciAocSA9IDAgOyBxIDwgTFRfQkFDS1RSQUNFREVQVEggOyBxKyspIHsKKwkJZm9yIChxID0gMDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIOyBxKyspIHsKIAkJCXVuc2lnbmVkIGxvbmcgcmVjb3JkID0gbGF0LmJhY2t0cmFjZVtxXTsKIAogCQkJaWYgKG15bGF0LT5iYWNrdHJhY2VbcV0gIT0gcmVjb3JkKSB7CkBAIC0xODYsNyArMjQ1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYTFI7IGkrKykgewogCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlWzBdKSB7CiAJCQlpbnQgcTsKLQkJCXNlcV9wcmludGYobSwgIiVpICVsaSAlbGkgIiwKKwkJCXNlcV9wcmludGYobSwgIiVpICVsdSAlbHUgIiwKIAkJCQlsYXRlbmN5X3JlY29yZFtpXS5jb3VudCwKIAkJCQlsYXRlbmN5X3JlY29yZFtpXS50aW1lLAogCQkJCWxhdGVuY3lfcmVjb3JkW2ldLm1heCk7CkBAIC0yMjMsNyArMjgyLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgbHN0YXRzX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsc3RhdHNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxzdGF0c19mb3BzID0gewogCS5vcGVuCQk9IGxzdGF0c19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS53cml0ZQkJPSBsc3RhdHNfd3JpdGUsCkBAIC0yMzYsNCArMjk1LDQgQEAKIAlwcm9jX2NyZWF0ZSgibGF0ZW5jeV9zdGF0cyIsIDA2NDQsIE5VTEwsICZsc3RhdHNfZm9wcyk7CiAJcmV0dXJuIDA7CiB9Ci1fX2luaXRjYWxsKGluaXRfbHN0YXRzX3Byb2Nmcyk7CitkZXZpY2VfaW5pdGNhbGwoaW5pdF9sc3RhdHNfcHJvY2ZzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCAxMTk2ZjVkLi43NzY3MjIzIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC04MjIsNyArODIyLDcgQEAKIAltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCS8qIFN0b3JlIHRoZSBuYW1lIG9mIHRoZSBsYXN0IHVubG9hZGVkIG1vZHVsZSBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyAqLwogCXN0cmxjcHkobGFzdF91bmxvYWRlZF9tb2R1bGUsIG1vZC0+bmFtZSwgc2l6ZW9mKGxhc3RfdW5sb2FkZWRfbW9kdWxlKSk7Ci0JdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShtb2QtPm5hbWUpOworCWRkZWJ1Z19yZW1vdmVfbW9kdWxlKG1vZC0+bmFtZSk7CiAJZnJlZV9tb2R1bGUobW9kKTsKIAogIG91dDoKQEAgLTE4MjcsMTkgKzE4MjcsMTMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAotc3RhdGljIHZvaWQgZHluYW1pY19wcmludGtfc2V0dXAoc3RydWN0IG1vZF9kZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCitzdGF0aWMgdm9pZCBkeW5hbWljX2RlYnVnX3NldHVwKHN0cnVjdCBfZGRlYnVnICpkZWJ1ZywgdW5zaWduZWQgaW50IG51bSkKIHsKLSNpZmRlZiBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShkZWJ1Z1tpXS5tb2RuYW1lLAotCQkJCQkgICAgICBkZWJ1Z1tpXS50eXBlLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5sb2dpY2FsX21vZG5hbWUsCi0JCQkJCSAgICAgIGRlYnVnW2ldLmZsYWdfbmFtZXMsCi0JCQkJCSAgICAgIGRlYnVnW2ldLmhhc2gsIGRlYnVnW2ldLmhhc2gyKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHICovCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfREVCVUcKKwlpZiAoZGRlYnVnX2FkZF9tb2R1bGUoZGVidWcsIG51bSwgZGVidWctPm1vZG5hbWUpKQorCQlwcmludGsoS0VSTl9FUlIgImR5bmFtaWMgZGVidWcgZXJyb3IgYWRkaW5nIG1vZHVsZTogJXNcbiIsCisJCQkJCWRlYnVnLT5tb2RuYW1lKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCAqbW9kdWxlX2FsbG9jX3VwZGF0ZV9ib3VuZHModW5zaWduZWQgbG9uZyBzaXplKQpAQCAtMjIxMywxMiArMjIwNywxMyBAQAogCWFkZF9rYWxsc3ltcyhtb2QsIHNlY2hkcnMsIHN5bWluZGV4LCBzdHJpbmRleCwgc2Vjc3RyaW5ncyk7CiAKIAlpZiAoIW1vZC0+dGFpbnRzKSB7Ci0JCXN0cnVjdCBtb2RfZGVidWcgKmRlYnVnOworCQlzdHJ1Y3QgX2RkZWJ1ZyAqZGVidWc7CiAJCXVuc2lnbmVkIGludCBudW1fZGVidWc7CiAKIAkJZGVidWcgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX192ZXJib3NlIiwKIAkJCQkgICAgIHNpemVvZigqZGVidWcpLCAmbnVtX2RlYnVnKTsKLQkJZHluYW1pY19wcmludGtfc2V0dXAoZGVidWcsIG51bV9kZWJ1Zyk7CisJCWlmIChkZWJ1ZykKKwkJCWR5bmFtaWNfZGVidWdfc2V0dXAoZGVidWcsIG51bV9kZWJ1Zyk7CiAJfQogCiAJLyogc2VjaGRyc1swXS5zaF9zaXplIGlzIGFsd2F5cyB6ZXJvICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCBlOTc2ZTUwLi44ZTVkOWE2IDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTEzNzAsNyArMTM3MCw4IEBACiAJCWlmICh0YXNrX2NwdXRpbWVfZXhwaXJlZCgmZ3JvdXBfc2FtcGxlLCAmc2lnLT5jcHV0aW1lX2V4cGlyZXMpKQogCQkJcmV0dXJuIDE7CiAJfQotCXJldHVybiAwOworCisJcmV0dXJuIHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3JlbGF5LmMgYi9rZXJuZWwvcmVsYXkuYwppbmRleCA5ZDc5Yjc4Li44ZjIxNzljIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVsYXkuYworKysgYi9rZXJuZWwvcmVsYXkuYwpAQCAtNzUwLDcgKzc1MCw3IEBACiAJCQkgKiBmcm9tIHRoZSBzY2hlZHVsZXIgKHRyeWluZyB0byByZS1ncmFiCiAJCQkgKiBycS0+bG9jayksIHNvIGRlZmVyIGl0LgogCQkJICovCi0JCQlfX21vZF90aW1lcigmYnVmLT50aW1lciwgamlmZmllcyArIDEpOworCQkJbW9kX3RpbWVyKCZidWYtPnRpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCiAJb2xkID0gYnVmLT5kYXRhOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCA4ZTI1NThjLi45Zjg1MDZkIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzMxLDYgKzMzMSwxMyBAQAogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhc2tfZ3JvdXBfbG9jayk7CiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9lbXB0eSh2b2lkKQoreworCXJldHVybiBsaXN0X2VtcHR5KCZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOworfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECiAjIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAkoMipOSUNFXzBfTE9BRCkKQEAgLTM5MSw2ICszOTgsMTMgQEAKIAogI2Vsc2UKIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgcm9vdF90YXNrX2dyb3VwX2VtcHR5KHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSB2b2lkIHNldF90YXNrX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IGNwdSkgeyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICp0YXNrX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKQEAgLTQ2NywxMSArNDgxLDE3IEBACiAJc3RydWN0IHJ0X3ByaW9fYXJyYXkgYWN0aXZlOwogCXVuc2lnbmVkIGxvbmcgcnRfbnJfcnVubmluZzsKICNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpbnQgaGlnaGVzdF9wcmlvOyAvKiBoaWdoZXN0IHF1ZXVlZCBydCB0YXNrIHByaW8gKi8KKwlzdHJ1Y3QgeworCQlpbnQgY3VycjsgLyogaGlnaGVzdCBxdWV1ZWQgcnQgdGFzayBwcmlvICovCisjaWZkZWYgQ09ORklHX1NNUAorCQlpbnQgbmV4dDsgLyogbmV4dCBoaWdoZXN0ICovCisjZW5kaWYKKwl9IGhpZ2hlc3RfcHJpbzsKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIHJ0X25yX21pZ3JhdG9yeTsKIAlpbnQgb3ZlcmxvYWRlZDsKKwlzdHJ1Y3QgcGxpc3RfaGVhZCBwdXNoYWJsZV90YXNrczsKICNlbmRpZgogCWludCBydF90aHJvdHRsZWQ7CiAJdTY0IHJ0X3RpbWU7CkBAIC01NDksNyArNTY5LDYgQEAKIAl1bnNpZ25lZCBsb25nIG5yX3J1bm5pbmc7CiAJI2RlZmluZSBDUFVfTE9BRF9JRFhfTUFYIDUKIAl1bnNpZ25lZCBsb25nIGNwdV9sb2FkW0NQVV9MT0FEX0lEWF9NQVhdOwotCXVuc2lnbmVkIGNoYXIgaWRsZV9hdF90aWNrOwogI2lmZGVmIENPTkZJR19OT19IWgogCXVuc2lnbmVkIGxvbmcgbGFzdF90aWNrX3NlZW47CiAJdW5zaWduZWQgY2hhciBpbl9ub2h6X3JlY2VudGx5OwpAQCAtNTkwLDYgKzYwOSw3IEBACiAJc3RydWN0IHJvb3RfZG9tYWluICpyZDsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAorCXVuc2lnbmVkIGNoYXIgaWRsZV9hdF90aWNrOwogCS8qIEZvciBhY3RpdmUgYmFsYW5jaW5nICovCiAJaW50IGFjdGl2ZV9iYWxhbmNlOwogCWludCBwdXNoX2NwdTsKQEAgLTYxOCw5ICs2MzgsNiBAQAogCS8qIGNvdWxkIGFib3ZlIGJlIHJxLT5jZnNfcnEuZXhlY19jbG9jayArIHJxLT5ydF9ycS5ydF9ydW50aW1lID8gKi8KIAogCS8qIHN5c19zY2hlZF95aWVsZCgpIHN0YXRzICovCi0JdW5zaWduZWQgaW50IHlsZF9leHBfZW1wdHk7Ci0JdW5zaWduZWQgaW50IHlsZF9hY3RfZW1wdHk7Ci0JdW5zaWduZWQgaW50IHlsZF9ib3RoX2VtcHR5OwogCXVuc2lnbmVkIGludCB5bGRfY291bnQ7CiAKIAkvKiBzY2hlZHVsZSgpIHN0YXRzICovCkBAIC0xMTgzLDEwICsxMjAwLDEwIEBACiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnRhc2tfcnEocCktPmxvY2spOwogCi0JaWYgKHVubGlrZWx5KHRlc3RfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9ORUVEX1JFU0NIRUQpKSkKKwlpZiAodGVzdF90c2tfbmVlZF9yZXNjaGVkKHApKQogCQlyZXR1cm47CiAKLQlzZXRfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9ORUVEX1JFU0NIRUQpOworCXNldF90c2tfbmVlZF9yZXNjaGVkKHApOwogCiAJY3B1ID0gdGFza19jcHUocCk7CiAJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCkBAIC0xMjQyLDcgKzEyNTksNyBAQAogCSAqIGxvY2tsZXNzLiBUaGUgd29yc3QgY2FzZSBpcyB0aGF0IHRoZSBvdGhlciBDUFUgcnVucyB0aGUKIAkgKiBpZGxlIHRhc2sgdGhyb3VnaCBhbiBhZGRpdGlvbmFsIE5PT1Agc2NoZWR1bGUoKQogCSAqLwotCXNldF90c2tfdGhyZWFkX2ZsYWcocnEtPmlkbGUsIFRJRl9ORUVEX1JFU0NIRUQpOworCXNldF90c2tfbmVlZF9yZXNjaGVkKHJxLT5pZGxlKTsKIAogCS8qIE5FRURfUkVTQ0hFRCBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QgcG9sbGluZyAqLwogCXNtcF9tYigpOwpAQCAtMTYxMCwyMSArMTYyNyw0MiBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUkVFTVBUCisKIC8qCi0gKiBkb3VibGVfbG9ja19iYWxhbmNlIC0gbG9jayB0aGUgYnVzaWVzdCBydW5xdWV1ZSwgdGhpc19ycSBpcyBsb2NrZWQgYWxyZWFkeS4KKyAqIGZhaXIgZG91YmxlX2xvY2tfYmFsYW5jZTogU2FmZWx5IGFjcXVpcmVzIGJvdGggcnEtPmxvY2tzIGluIGEgZmFpcgorICogd2F5IGF0IHRoZSBleHBlbnNlIG9mIGZvcmNpbmcgZXh0cmEgYXRvbWljIG9wZXJhdGlvbnMgaW4gYWxsCisgKiBpbnZvY2F0aW9ucy4gIFRoaXMgYXNzdXJlcyB0aGF0IHRoZSBkb3VibGVfbG9jayBpcyBhY3F1aXJlZCB1c2luZyB0aGUKKyAqIHNhbWUgdW5kZXJseWluZyBwb2xpY3kgYXMgdGhlIHNwaW5sb2NrX3Qgb24gdGhpcyBhcmNoaXRlY3R1cmUsIHdoaWNoCisgKiByZWR1Y2VzIGxhdGVuY3kgY29tcGFyZWQgdG8gdGhlIHVuZmFpciB2YXJpYW50IGJlbG93LiAgSG93ZXZlciwgaXQKKyAqIGFsc28gYWRkcyBtb3JlIG92ZXJoZWFkIGFuZCB0aGVyZWZvcmUgbWF5IHJlZHVjZSB0aHJvdWdocHV0LgogICovCi1zdGF0aWMgaW50IGRvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCitzdGF0aWMgaW5saW5lIGludCBfZG91YmxlX2xvY2tfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBycSAqYnVzaWVzdCkKKwlfX3JlbGVhc2VzKHRoaXNfcnEtPmxvY2spCisJX19hY3F1aXJlcyhidXNpZXN0LT5sb2NrKQorCV9fYWNxdWlyZXModGhpc19ycS0+bG9jaykKK3sKKwlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CisJZG91YmxlX3JxX2xvY2sodGhpc19ycSwgYnVzaWVzdCk7CisKKwlyZXR1cm4gMTsKK30KKworI2Vsc2UKKy8qCisgKiBVbmZhaXIgZG91YmxlX2xvY2tfYmFsYW5jZTogT3B0aW1pemVzIHRocm91Z2hwdXQgYXQgdGhlIGV4cGVuc2Ugb2YKKyAqIGxhdGVuY3kgYnkgZWxpbWluYXRpbmcgZXh0cmEgYXRvbWljIG9wZXJhdGlvbnMgd2hlbiB0aGUgbG9ja3MgYXJlCisgKiBhbHJlYWR5IGluIHByb3BlciBvcmRlciBvbiBlbnRyeS4gIFRoaXMgZmF2b3JzIGxvd2VyIGNwdS1pZHMgYW5kIHdpbGwKKyAqIGdyYW50IHRoZSBkb3VibGUgbG9jayB0byBsb3dlciBjcHVzIG92ZXIgaGlnaGVyIGlkcyB1bmRlciBjb250ZW50aW9uLAorICogcmVnYXJkbGVzcyBvZiBlbnRyeSBvcmRlciBpbnRvIHRoZSBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBfZG91YmxlX2xvY2tfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBycSAqYnVzaWVzdCkKIAlfX3JlbGVhc2VzKHRoaXNfcnEtPmxvY2spCiAJX19hY3F1aXJlcyhidXNpZXN0LT5sb2NrKQogCV9fYWNxdWlyZXModGhpc19ycS0+bG9jaykKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICh1bmxpa2VseSghaXJxc19kaXNhYmxlZCgpKSkgewotCQkvKiBwcmludGsoKSBkb2Vzbid0IHdvcmsgZ29vZCB1bmRlciBycS0+bG9jayAqLwotCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7Ci0JCUJVR19PTigxKTsKLQl9CiAJaWYgKHVubGlrZWx5KCFzcGluX3RyeWxvY2soJmJ1c2llc3QtPmxvY2spKSkgewogCQlpZiAoYnVzaWVzdCA8IHRoaXNfcnEpIHsKIAkJCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKQEAgLTE2MzcsNiArMTY3NSwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLworCisvKgorICogZG91YmxlX2xvY2tfYmFsYW5jZSAtIGxvY2sgdGhlIGJ1c2llc3QgcnVucXVldWUsIHRoaXNfcnEgaXMgbG9ja2VkIGFscmVhZHkuCisgKi8KK3N0YXRpYyBpbnQgZG91YmxlX2xvY2tfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBycSAqYnVzaWVzdCkKK3sKKwlpZiAodW5saWtlbHkoIWlycXNfZGlzYWJsZWQoKSkpIHsKKwkJLyogcHJpbnRrKCkgZG9lc24ndCB3b3JrIGdvb2QgdW5kZXIgcnEtPmxvY2sgKi8KKwkJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOworCQlCVUdfT04oMSk7CisJfQorCisJcmV0dXJuIF9kb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZG91YmxlX3VubG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQogCV9fcmVsZWFzZXMoYnVzaWVzdC0+bG9jaykKIHsKQEAgLTE3MDUsNiArMTc1OSw5IEBACiAKIHN0YXRpYyB2b2lkIGVucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCiB7CisJaWYgKHdha2V1cCkKKwkJcC0+c2Uuc3RhcnRfcnVudGltZSA9IHAtPnNlLnN1bV9leGVjX3J1bnRpbWU7CisKIAlzY2hlZF9pbmZvX3F1ZXVlZChwKTsKIAlwLT5zY2hlZF9jbGFzcy0+ZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXApOwogCXAtPnNlLm9uX3JxID0gMTsKQEAgLTE3MTIsMTAgKzE3NjksMTUgQEAKIAogc3RhdGljIHZvaWQgZGVxdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNsZWVwKQogewotCWlmIChzbGVlcCAmJiBwLT5zZS5sYXN0X3dha2V1cCkgewotCQl1cGRhdGVfYXZnKCZwLT5zZS5hdmdfb3ZlcmxhcCwKLQkJCSAgIHAtPnNlLnN1bV9leGVjX3J1bnRpbWUgLSBwLT5zZS5sYXN0X3dha2V1cCk7Ci0JCXAtPnNlLmxhc3Rfd2FrZXVwID0gMDsKKwlpZiAoc2xlZXApIHsKKwkJaWYgKHAtPnNlLmxhc3Rfd2FrZXVwKSB7CisJCQl1cGRhdGVfYXZnKCZwLT5zZS5hdmdfb3ZlcmxhcCwKKwkJCQlwLT5zZS5zdW1fZXhlY19ydW50aW1lIC0gcC0+c2UubGFzdF93YWtldXApOworCQkJcC0+c2UubGFzdF93YWtldXAgPSAwOworCQl9IGVsc2UgeworCQkJdXBkYXRlX2F2ZygmcC0+c2UuYXZnX3dha2V1cCwKKwkJCQlzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5KTsKKwkJfQogCX0KIAogCXNjaGVkX2luZm9fZGVxdWV1ZWQocCk7CkBAIC0yMDE3LDcgKzIwNzksNyBAQAogCQkgKiBpdCBtdXN0IGJlIG9mZiB0aGUgcnVucXVldWUgX2VudGlyZWx5XywgYW5kIG5vdAogCQkgKiBwcmVlbXB0ZWQhCiAJCSAqCi0JCSAqIFNvIGlmIGl0IHdhIHN0aWxsIHJ1bm5hYmxlIChidXQganVzdCBub3QgYWN0aXZlbHkKKwkJICogU28gaWYgaXQgd2FzIHN0aWxsIHJ1bm5hYmxlIChidXQganVzdCBub3QgYWN0aXZlbHkKIAkJICogcnVubmluZyByaWdodCBub3cpLCBpdCdzIHByZWVtcHRlZCwgYW5kIHdlIHNob3VsZAogCQkgKiB5aWVsZCAtIGl0IGNvdWxkIGJlIGEgd2hpbGUuCiAJCSAqLwpAQCAtMjI2Nyw3ICsyMzI5LDcgQEAKIAkJc3luYyA9IDA7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHNjaGVkX2ZlYXQoTEJfV0FLRVVQX1VQREFURSkpIHsKKwlpZiAoc2NoZWRfZmVhdChMQl9XQUtFVVBfVVBEQVRFKSAmJiAhcm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpIHsKIAkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAKIAkJdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMjM0NSw2ICsyNDA3LDIyIEBACiAJYWN0aXZhdGVfdGFzayhycSwgcCwgMSk7CiAJc3VjY2VzcyA9IDE7CiAKKwkvKgorCSAqIE9ubHkgYXR0cmlidXRlIGFjdHVhbCB3YWtldXBzIGRvbmUgYnkgdGhpcyB0YXNrLgorCSAqLworCWlmICghaW5faW50ZXJydXB0KCkpIHsKKwkJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmY3VycmVudC0+c2U7CisJCXU2NCBzYW1wbGUgPSBzZS0+c3VtX2V4ZWNfcnVudGltZTsKKworCQlpZiAoc2UtPmxhc3Rfd2FrZXVwKQorCQkJc2FtcGxlIC09IHNlLT5sYXN0X3dha2V1cDsKKwkJZWxzZQorCQkJc2FtcGxlIC09IHNlLT5zdGFydF9ydW50aW1lOworCQl1cGRhdGVfYXZnKCZzZS0+YXZnX3dha2V1cCwgc2FtcGxlKTsKKworCQlzZS0+bGFzdF93YWtldXAgPSBzZS0+c3VtX2V4ZWNfcnVudGltZTsKKwl9CisKIG91dF9ydW5uaW5nOgogCXRyYWNlX3NjaGVkX3dha2V1cChycSwgcCwgc3VjY2Vzcyk7CiAJY2hlY2tfcHJlZW1wdF9jdXJyKHJxLCBwLCBzeW5jKTsKQEAgLTIzNTUsOCArMjQzMyw2IEBACiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXAocnEsIHApOwogI2VuZGlmCiBvdXQ6Ci0JY3VycmVudC0+c2UubGFzdF93YWtldXAgPSBjdXJyZW50LT5zZS5zdW1fZXhlY19ydW50aW1lOwotCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKIAlyZXR1cm4gc3VjY2VzczsKQEAgLTIzODYsNiArMjQ2Miw4IEBACiAJcC0+c2UucHJldl9zdW1fZXhlY19ydW50aW1lCT0gMDsKIAlwLT5zZS5sYXN0X3dha2V1cAkJPSAwOwogCXAtPnNlLmF2Z19vdmVybGFwCQk9IDA7CisJcC0+c2Uuc3RhcnRfcnVudGltZQkJPSAwOworCXAtPnNlLmF2Z193YWtldXAJCT0gc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eTsKIAogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJcC0+c2Uud2FpdF9zdGFydAkJPSAwOwpAQCAtMjQ0OCw2ICsyNTI2LDggQEAKIAkvKiBXYW50IHRvIHN0YXJ0IHdpdGgga2VybmVsIHByZWVtcHRpb24gZGlzYWJsZWQuICovCiAJdGFza190aHJlYWRfaW5mbyhwKS0+cHJlZW1wdF9jb3VudCA9IDE7CiAjZW5kaWYKKwlwbGlzdF9ub2RlX2luaXQoJnAtPnB1c2hhYmxlX3Rhc2tzLCBNQVhfUFJJTyk7CisKIAlwdXRfY3B1KCk7CiB9CiAKQEAgLTI0OTEsNyArMjU3MSw3IEBACiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfTk9USUZJRVJTCiAKIC8qKgotICogcHJlZW1wdF9ub3RpZmllcl9yZWdpc3RlciAtIHRlbGwgbWUgd2hlbiBjdXJyZW50IGlzIGJlaW5nIGJlaW5nIHByZWVtcHRlZCAmIHJlc2NoZWR1bGVkCisgKiBwcmVlbXB0X25vdGlmaWVyX3JlZ2lzdGVyIC0gdGVsbCBtZSB3aGVuIGN1cnJlbnQgaXMgYmVpbmcgcHJlZW1wdGVkICYgcmVzY2hlZHVsZWQKICAqIEBub3RpZmllcjogbm90aWZpZXIgc3RydWN0IHRvIHJlZ2lzdGVyCiAgKi8KIHZvaWQgcHJlZW1wdF9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgcHJlZW1wdF9ub3RpZmllciAqbm90aWZpZXIpCkBAIC0yNTg4LDYgKzI2NjgsMTIgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJxLT5wcmV2X21tOwogCWxvbmcgcHJldl9zdGF0ZTsKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IHBvc3Rfc2NoZWR1bGUgPSAwOworCisJaWYgKGN1cnJlbnQtPnNjaGVkX2NsYXNzLT5uZWVkc19wb3N0X3NjaGVkdWxlKQorCQlwb3N0X3NjaGVkdWxlID0gY3VycmVudC0+c2NoZWRfY2xhc3MtPm5lZWRzX3Bvc3Rfc2NoZWR1bGUocnEpOworI2VuZGlmCiAKIAlycS0+cHJldl9tbSA9IE5VTEw7CiAKQEAgLTI2MDYsNyArMjY5Miw3IEBACiAJZmluaXNoX2FyY2hfc3dpdGNoKHByZXYpOwogCWZpbmlzaF9sb2NrX3N3aXRjaChycSwgcHJldik7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChjdXJyZW50LT5zY2hlZF9jbGFzcy0+cG9zdF9zY2hlZHVsZSkKKwlpZiAocG9zdF9zY2hlZHVsZSkKIAkJY3VycmVudC0+c2NoZWRfY2xhc3MtPnBvc3Rfc2NoZWR1bGUocnEpOwogI2VuZGlmCiAKQEAgLTI5MTMsNiArMjk5OSw3IEBACiAJCSAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAogCQkgICAgIGludCAqYWxsX3Bpbm5lZCkKIHsKKwlpbnQgdHNrX2NhY2hlX2hvdCA9IDA7CiAJLyoKIAkgKiBXZSBkbyBub3QgbWlncmF0ZSB0YXNrcyB0aGF0IGFyZToKIAkgKiAxKSBydW5uaW5nIChvYnZpb3VzbHkpLCBvcgpAQCAtMjkzNiwxMCArMzAyMywxMSBAQAogCSAqIDIpIHRvbyBtYW55IGJhbGFuY2UgYXR0ZW1wdHMgaGF2ZSBmYWlsZWQuCiAJICovCiAKLQlpZiAoIXRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpIHx8Ci0JCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcykgeworCXRza19jYWNoZV9ob3QgPSB0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKTsKKwlpZiAoIXRza19jYWNoZV9ob3QgfHwKKwkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMpIHsKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCQlpZiAodGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCkpIHsKKwkJaWYgKHRza19jYWNoZV9ob3QpIHsKIAkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2hvdF9nYWluZWRbaWRsZV0pOwogCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mb3JjZWRfbWlncmF0aW9ucyk7CiAJCX0KQEAgLTI5NDcsNyArMzAzNSw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmICh0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKSkgeworCWlmICh0c2tfY2FjaGVfaG90KSB7CiAJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfaG90KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjk4Nyw2ICszMDc1LDE2IEBACiAJcHVsbGVkKys7CiAJcmVtX2xvYWRfbW92ZSAtPSBwLT5zZS5sb2FkLndlaWdodDsKIAorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJLyoKKwkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZSBrZXJuZWxzCisJICogd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZSB0aGUgY3JpdGljYWwKKwkgKiBzZWN0aW9uLgorCSAqLworCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKQorCQlnb3RvIG91dDsKKyNlbmRpZgorCiAJLyoKIAkgKiBXZSBvbmx5IHdhbnQgdG8gc3RlYWwgdXAgdG8gdGhlIHByZXNjcmliZWQgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQuCiAJICovCkBAIC0zMDMzLDkgKzMxMzEsMTUgQEAKIAkJCQlzZCwgaWRsZSwgYWxsX3Bpbm5lZCwgJnRoaXNfYmVzdF9wcmlvKTsKIAkJY2xhc3MgPSBjbGFzcy0+bmV4dDsKIAorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJCS8qCisJCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlCisJCSAqIGtlcm5lbHMgd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZQorCQkgKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KKwkJICovCiAJCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFICYmIHRoaXNfcnEtPm5yX3J1bm5pbmcpCiAJCQlicmVhazsKLQorI2VuZGlmCiAJfSB3aGlsZSAoY2xhc3MgJiYgbWF4X2xvYWRfbW92ZSA+IHRvdGFsX2xvYWRfbW92ZWQpOwogCiAJcmV0dXJuIHRvdGFsX2xvYWRfbW92ZWQgPiAwOwpAQCAtMzA4NSwyMTUgKzMxODksNTY1IEBACiAKIAlyZXR1cm4gMDsKIH0KKy8qKioqKioqKioqIEhlbHBlcnMgZm9yIGZpbmRfYnVzaWVzdF9ncm91cCAqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIHNkX2xiX3N0YXRzIC0gU3RydWN0dXJlIHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzIG9mIGEgc2NoZWRfZG9tYWluCisgKiAJCWR1cmluZyBsb2FkIGJhbGFuY2luZy4KKyAqLworc3RydWN0IHNkX2xiX3N0YXRzIHsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmJ1c2llc3Q7IC8qIEJ1c2llc3QgZ3JvdXAgaW4gdGhpcyBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqdGhpczsgIC8qIExvY2FsIGdyb3VwIGluIHRoaXMgc2QgKi8KKwl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWQ7ICAvKiBUb3RhbCBsb2FkIG9mIGFsbCBncm91cHMgaW4gc2QgKi8KKwl1bnNpZ25lZCBsb25nIHRvdGFsX3B3cjsgICAvKglUb3RhbCBwb3dlciBvZiBhbGwgZ3JvdXBzIGluIHNkICovCisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsJICAgLyogQXZlcmFnZSBsb2FkIGFjcm9zcyBhbGwgZ3JvdXBzIGluIHNkICovCiAKLS8qCi0gKiBmaW5kX2J1c2llc3RfZ3JvdXAgZmluZHMgYW5kIHJldHVybnMgdGhlIGJ1c2llc3QgQ1BVIGdyb3VwIHdpdGhpbiB0aGUKLSAqIGRvbWFpbi4gSXQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2gKLSAqIHNob3VsZCBiZSBtb3ZlZCB0byByZXN0b3JlIGJhbGFuY2UgdmlhIHRoZSBpbWJhbGFuY2UgcGFyYW1ldGVyLgorCS8qKiBTdGF0aXN0aWNzIG9mIHRoaXMgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZDsKKwl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZF9wZXJfdGFzazsKKwl1bnNpZ25lZCBsb25nIHRoaXNfbnJfcnVubmluZzsKKworCS8qIFN0YXRpc3RpY3Mgb2YgdGhlIGJ1c2llc3QgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9sb2FkOworCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9sb2FkX3Blcl90YXNrOworCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9ucl9ydW5uaW5nOworCisJaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgaW1iYWxhbmNlIGluIHRoaXMgc2QgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorCWludCBwb3dlcl9zYXZpbmdzX2JhbGFuY2U7IC8qIElzIHBvd2Vyc2F2ZSBiYWxhbmNlIG5lZWRlZCBmb3IgdGhpcyBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbWluOyAvKiBMZWFzdCBsb2FkZWQgZ3JvdXAgaW4gc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX2xlYWRlcjsgLyogR3JvdXAgd2hpY2ggcmVsaWV2ZXMgZ3JvdXBfbWluICovCisJdW5zaWduZWQgbG9uZyBtaW5fbG9hZF9wZXJfdGFzazsgLyogbG9hZF9wZXJfdGFzayBpbiBncm91cF9taW4gKi8KKwl1bnNpZ25lZCBsb25nIGxlYWRlcl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX2xlYWRlciAqLworCXVuc2lnbmVkIGxvbmcgbWluX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbWluICovCisjZW5kaWYKK307CisKKy8qKgorICogc2dfbGJfc3RhdHMgLSBzdGF0cyBvZiBhIHNjaGVkX2dyb3VwIHJlcXVpcmVkIGZvciBsb2FkX2JhbGFuY2luZworICovCitzdHJ1Y3Qgc2dfbGJfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7IC8qQXZnIGxvYWQgYWNyb3NzIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfbG9hZDsgLyogVG90YWwgbG9hZCBvdmVyIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgc3VtX25yX3J1bm5pbmc7IC8qIE5yIHRhc2tzIHJ1bm5pbmcgaW4gdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzdW1fd2VpZ2h0ZWRfbG9hZDsgLyogV2VpZ2h0ZWQgbG9hZCBvZiBncm91cCdzIHRhc2tzICovCisJdW5zaWduZWQgbG9uZyBncm91cF9jYXBhY2l0eTsKKwlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBhbiBpbWJhbGFuY2UgaW4gdGhlIGdyb3VwID8gKi8KK307CisKKy8qKgorICogZ3JvdXBfZmlyc3RfY3B1IC0gUmV0dXJucyB0aGUgZmlyc3QgY3B1IGluIHRoZSBjcHVtYXNrIG9mIGEgc2NoZWRfZ3JvdXAuCisgKiBAZ3JvdXA6IFRoZSBncm91cCB3aG9zZSBmaXJzdCBjcHUgaXMgdG8gYmUgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdyb3VwX2ZpcnN0X2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwKQoreworCXJldHVybiBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKK30KKworLyoqCisgKiBnZXRfc2RfbG9hZF9pZHggLSBPYnRhaW4gdGhlIGxvYWQgaW5kZXggZm9yIGEgZ2l2ZW4gc2NoZWQgZG9tYWluLgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGxvYWRfaWR4IGlzIHRvIGJlIG9idGFpbmVkLgorICogQGlkbGU6IFRoZSBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGZvciB3aG9zZSBzZCBsb2FkX2ljeCBpcyBvYnRhaW5lZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X3NkX2xvYWRfaWR4KHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCQkJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwlpbnQgbG9hZF9pZHg7CisKKwlzd2l0Y2ggKGlkbGUpIHsKKwljYXNlIENQVV9OT1RfSURMRToKKwkJbG9hZF9pZHggPSBzZC0+YnVzeV9pZHg7CisJCWJyZWFrOworCisJY2FzZSBDUFVfTkVXTFlfSURMRToKKwkJbG9hZF9pZHggPSBzZC0+bmV3aWRsZV9pZHg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxvYWRfaWR4ID0gc2QtPmlkbGVfaWR4OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbG9hZF9pZHg7Cit9CisKKworI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCisvKioKKyAqIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIEluaXRpYWxpemUgcG93ZXIgc2F2aW5ncyBzdGF0aXN0aWNzIGZvcgorICogdGhlIGdpdmVuIHNjaGVkX2RvbWFpbiwgZHVyaW5nIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEBzZDogU2NoZWQgZG9tYWluIHdob3NlIHBvd2VyLXNhdmluZ3Mgc3RhdGlzdGljcyBhcmUgdG8gYmUgaW5pdGlhbGl6ZWQuCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIGZvciBzZC4KKyAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGF0IHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCS8qCisJICogQnVzeSBwcm9jZXNzb3JzIHdpbGwgbm90IHBhcnRpY2lwYXRlIGluIHBvd2VyIHNhdmluZ3MKKwkgKiBiYWxhbmNlLgorCSAqLworCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fCAhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOworCWVsc2UgeworCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDE7CisJCXNkcy0+bWluX25yX3J1bm5pbmcgPSBVTE9OR19NQVg7CisJCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSAwOworCX0KK30KKworLyoqCisgKiB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIFVwZGF0ZSB0aGUgcG93ZXIgc2F2aW5nIHN0YXRzIGZvciBhCisgKiBzY2hlZF9kb21haW4gd2hpbGUgcGVyZm9ybWluZyBsb2FkIGJhbGFuY2luZy4KKyAqCisgKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIGJlbG9uZ2luZyB0byB0aGUgc2NoZWRfZG9tYWluIHVuZGVyIGNvbnNpZGVyYXRpb24uCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KKyAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoZSBDUFUgZm9yIHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcKKyAqIAkJbG9hZCBiYWxhbmNpbmcgPworICogQHNnczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgZ3JvdXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCisJaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgbG9jYWwgZ3JvdXAgaXMgaWRsZSBvciBjb21wbGV0ZWx5IGxvYWRlZAorCSAqIG5vIG5lZWQgdG8gZG8gcG93ZXIgc2F2aW5ncyBiYWxhbmNlIGF0IHRoaXMgZG9tYWluCisJICovCisJaWYgKGxvY2FsX2dyb3VwICYmIChzZHMtPnRoaXNfbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8CisJCQkJIXNkcy0+dGhpc19ucl9ydW5uaW5nKSkKKwkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOworCisJLyoKKwkgKiBJZiBhIGdyb3VwIGlzIGFscmVhZHkgcnVubmluZyBhdCBmdWxsIGNhcGFjaXR5IG9yIGlkbGUsCisJICogZG9uJ3QgaW5jbHVkZSB0aGF0IGdyb3VwIGluIHBvd2VyIHNhdmluZ3MgY2FsY3VsYXRpb25zCisJICovCisJaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSB8fAorCQlzZ3MtPnN1bV9ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKKwkJIXNncy0+c3VtX25yX3J1bm5pbmcpCisJCXJldHVybjsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBoYXMgdGhlIGxlYXN0IG5vbi1pZGxlIGxvYWQuCisJICogVGhpcyBpcyB0aGUgZ3JvdXAgZnJvbSB3aGVyZSB3ZSBuZWVkIHRvIHBpY2sgdXAgdGhlIGxvYWQKKwkgKiBmb3Igc2F2aW5nIHBvd2VyCisJICovCisJaWYgKChzZ3MtPnN1bV9ucl9ydW5uaW5nIDwgc2RzLT5taW5fbnJfcnVubmluZykgfHwKKwkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5taW5fbnJfcnVubmluZyAmJgorCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA+IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX21pbikpKSB7CisJCXNkcy0+Z3JvdXBfbWluID0gZ3JvdXA7CisJCXNkcy0+bWluX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOworCQlzZHMtPm1pbl9sb2FkX3Blcl90YXNrID0gc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCAvCisJCQkJCQlzZ3MtPnN1bV9ucl9ydW5uaW5nOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBpcyBhbG1vc3QgbmVhciBpdHMKKwkgKiBjYXBhY2l0eSBidXQgc3RpbGwgaGFzIHNvbWUgc3BhY2UgdG8gcGljayB1cCBzb21lIGxvYWQKKwkgKiBmcm9tIG90aGVyIGdyb3VwIGFuZCBzYXZlIG1vcmUgcG93ZXIKKwkgKi8KKwlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyA+IHNncy0+Z3JvdXBfY2FwYWNpdHkgLSAxKQorCQlyZXR1cm47CisKKwlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyA+IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgfHwKKwkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5sZWFkZXJfbnJfcnVubmluZyAmJgorCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA8IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX2xlYWRlcikpKSB7CisJCXNkcy0+Z3JvdXBfbGVhZGVyID0gZ3JvdXA7CisJCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOworCX0KK30KKworLyoqCisgKiBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAgLSBDaGVjayBpZiB3ZSBoYXZlIHBvdGVudGlhbCB0byBwZXJmb3JtCisgKglzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4gSWYgeWVzLCBzZXQgdGhlIGJ1c2llc3QgZ3JvdXAgdG8gYmUKKyAqCXRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgaW4gdGhlIHNjaGVkX2RvbWFpbiwgc28gdGhhdCBpdCdzIENQVXMgY2FuCisgKgliZSBwdXQgdG8gaWRsZS4KKyAqCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KKyAqCXVuZGVyIGNvbnNpZGVyYXRpb24uCisgKiBAdGhpc19jcHU6IENwdSBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHkgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKgorICogUmV0dXJucyAxIGlmIHRoZXJlIGlzIHBvdGVudGlhbCB0byBwZXJmb3JtIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KKyAqIEVsc2UgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCisJCXJldHVybiAwOworCisJaWYgKHNkcy0+dGhpcyAhPSBzZHMtPmdyb3VwX2xlYWRlciB8fAorCQkJc2RzLT5ncm91cF9sZWFkZXIgPT0gc2RzLT5ncm91cF9taW4pCisJCXJldHVybiAwOworCisJKmltYmFsYW5jZSA9IHNkcy0+bWluX2xvYWRfcGVyX3Rhc2s7CisJc2RzLT5idXNpZXN0ID0gc2RzLT5ncm91cF9taW47CisKKwlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyA+PSBQT1dFUlNBVklOR1NfQkFMQU5DRV9XQUtFVVApIHsKKwkJY3B1X3JxKHRoaXNfY3B1KS0+cmQtPnNjaGVkX21jX3ByZWZlcnJlZF93YWtldXBfY3B1ID0KKwkJCWdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX2xlYWRlcik7CisJfQorCisJcmV0dXJuIDE7CisKK30KKyNlbHNlIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLworCisKKy8qKgorICogdXBkYXRlX3NnX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCisgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKKyAqIEBsb2FkX2lkeDogTG9hZCBpbmRleCBvZiBzY2hlZF9kb21haW4gb2YgdGhpc19jcHUgZm9yIGxvYWQgY2FsYy4KKyAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCisgKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGlzX2NwdS4KKyAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KKyAqIEBzZ3M6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZ3JvdXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2dfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgaW50IHRoaXNfY3B1LAorCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCBsb2FkX2lkeCwgaW50ICpzZF9pZGxlLAorCQkJaW50IGxvY2FsX2dyb3VwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKKwkJCWludCAqYmFsYW5jZSwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisJdW5zaWduZWQgbG9uZyBsb2FkLCBtYXhfY3B1X2xvYWQsIG1pbl9jcHVfbG9hZDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYmFsYW5jZV9jcHUgPSAtMSwgZmlyc3RfaWRsZV9jcHUgPSAwOworCXVuc2lnbmVkIGxvbmcgc3VtX2F2Z19sb2FkX3Blcl90YXNrOworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWRfcGVyX3Rhc2s7CisKKwlpZiAobG9jYWxfZ3JvdXApCisJCWJhbGFuY2VfY3B1ID0gZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKTsKKworCS8qIFRhbGx5IHVwIHRoZSBsb2FkIG9mIGFsbCBDUFVzIGluIHRoZSBncm91cCAqLworCXN1bV9hdmdfbG9hZF9wZXJfdGFzayA9IGF2Z19sb2FkX3Blcl90YXNrID0gMDsKKwltYXhfY3B1X2xvYWQgPSAwOworCW1pbl9jcHVfbG9hZCA9IH4wVUw7CisKKwlmb3JfZWFjaF9jcHVfYW5kKGksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApLCBjcHVzKSB7CisJCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoaSk7CisKKwkJaWYgKCpzZF9pZGxlICYmIHJxLT5ucl9ydW5uaW5nKQorCQkJKnNkX2lkbGUgPSAwOworCisJCS8qIEJpYXMgYmFsYW5jaW5nIHRvd2FyZCBjcHVzIG9mIG91ciBkb21haW4gKi8KKwkJaWYgKGxvY2FsX2dyb3VwKSB7CisJCQlpZiAoaWRsZV9jcHUoaSkgJiYgIWZpcnN0X2lkbGVfY3B1KSB7CisJCQkJZmlyc3RfaWRsZV9jcHUgPSAxOworCQkJCWJhbGFuY2VfY3B1ID0gaTsKKwkJCX0KKworCQkJbG9hZCA9IHRhcmdldF9sb2FkKGksIGxvYWRfaWR4KTsKKwkJfSBlbHNlIHsKKwkJCWxvYWQgPSBzb3VyY2VfbG9hZChpLCBsb2FkX2lkeCk7CisJCQlpZiAobG9hZCA+IG1heF9jcHVfbG9hZCkKKwkJCQltYXhfY3B1X2xvYWQgPSBsb2FkOworCQkJaWYgKG1pbl9jcHVfbG9hZCA+IGxvYWQpCisJCQkJbWluX2NwdV9sb2FkID0gbG9hZDsKKwkJfQorCisJCXNncy0+Z3JvdXBfbG9hZCArPSBsb2FkOworCQlzZ3MtPnN1bV9ucl9ydW5uaW5nICs9IHJxLT5ucl9ydW5uaW5nOworCQlzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkICs9IHdlaWdodGVkX2NwdWxvYWQoaSk7CisKKwkJc3VtX2F2Z19sb2FkX3Blcl90YXNrICs9IGNwdV9hdmdfbG9hZF9wZXJfdGFzayhpKTsKKwl9CisKKwkvKgorCSAqIEZpcnN0IGlkbGUgY3B1IG9yIHRoZSBmaXJzdCBjcHUoYnVzaWVzdCkgaW4gdGhpcyBzY2hlZCBncm91cAorCSAqIGlzIGVsaWdpYmxlIGZvciBkb2luZyBsb2FkIGJhbGFuY2luZyBhdCB0aGlzIGFuZCBhYm92ZQorCSAqIGRvbWFpbnMuIEluIHRoZSBuZXdseSBpZGxlIGNhc2UsIHdlIHdpbGwgYWxsb3cgYWxsIHRoZSBjcHUncworCSAqIHRvIGRvIHRoZSBuZXdseSBpZGxlIGxvYWQgYmFsYW5jZS4KKwkgKi8KKwlpZiAoaWRsZSAhPSBDUFVfTkVXTFlfSURMRSAmJiBsb2NhbF9ncm91cCAmJgorCSAgICBiYWxhbmNlX2NwdSAhPSB0aGlzX2NwdSAmJiBiYWxhbmNlKSB7CisJCSpiYWxhbmNlID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIEFkanVzdCBieSByZWxhdGl2ZSBDUFUgcG93ZXIgb2YgdGhlIGdyb3VwICovCisJc2dzLT5hdmdfbG9hZCA9IHNnX2Rpdl9jcHVfcG93ZXIoZ3JvdXAsCisJCQlzZ3MtPmdyb3VwX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKKworCisJLyoKKwkgKiBDb25zaWRlciB0aGUgZ3JvdXAgdW5iYWxhbmNlZCB3aGVuIHRoZSBpbWJhbGFuY2UgaXMgbGFyZ2VyCisJICogdGhhbiB0aGUgYXZlcmFnZSB3ZWlnaHQgb2YgdHdvIHRhc2tzLgorCSAqCisJICogQVBaOiB3aXRoIGNncm91cCB0aGUgYXZnIHRhc2sgd2VpZ2h0IGNhbiB2YXJ5IHdpbGRseSBhbmQKKwkgKiAgICAgIG1pZ2h0IG5vdCBiZSBhIHN1aXRhYmxlIG51bWJlciAtIHNob3VsZCB3ZSBrZWVwIGEKKwkgKiAgICAgIG5vcm1hbGl6ZWQgbnJfcnVubmluZyBudW1iZXIgc29tZXdoZXJlIHRoYXQgbmVnYXRlcworCSAqICAgICAgdGhlIGhpZXJhcmNoeT8KKwkgKi8KKwlhdmdfbG9hZF9wZXJfdGFzayA9IHNnX2Rpdl9jcHVfcG93ZXIoZ3JvdXAsCisJCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKKworCWlmICgobWF4X2NwdV9sb2FkIC0gbWluX2NwdV9sb2FkKSA+IDIqYXZnX2xvYWRfcGVyX3Rhc2spCisJCXNncy0+Z3JvdXBfaW1iID0gMTsKKworCXNncy0+Z3JvdXBfY2FwYWNpdHkgPSBncm91cC0+X19jcHVfcG93ZXIgLyBTQ0hFRF9MT0FEX1NDQUxFOworCit9CisKKy8qKgorICogdXBkYXRlX3NkX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAc2Q6IHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CisgKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgorICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgorICogQHNkczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBzY2hlZF9kb21haW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKKwkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKnNkX2lkbGUsCisJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlLAorCQkJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMpCit7CisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCA9IHNkLT5ncm91cHM7CisJc3RydWN0IHNnX2xiX3N0YXRzIHNnczsKKwlpbnQgbG9hZF9pZHg7CisKKwlpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc2QsIHNkcywgaWRsZSk7CisJbG9hZF9pZHggPSBnZXRfc2RfbG9hZF9pZHgoc2QsIGlkbGUpOworCisJZG8geworCQlpbnQgbG9jYWxfZ3JvdXA7CisKKwkJbG9jYWxfZ3JvdXAgPSBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAorCQkJCQkgICAgICAgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOworCQltZW1zZXQoJnNncywgMCwgc2l6ZW9mKHNncykpOworCQl1cGRhdGVfc2dfbGJfc3RhdHMoZ3JvdXAsIHRoaXNfY3B1LCBpZGxlLCBsb2FkX2lkeCwgc2RfaWRsZSwKKwkJCQlsb2NhbF9ncm91cCwgY3B1cywgYmFsYW5jZSwgJnNncyk7CisKKwkJaWYgKGxvY2FsX2dyb3VwICYmIGJhbGFuY2UgJiYgISgqYmFsYW5jZSkpCisJCQlyZXR1cm47CisKKwkJc2RzLT50b3RhbF9sb2FkICs9IHNncy5ncm91cF9sb2FkOworCQlzZHMtPnRvdGFsX3B3ciArPSBncm91cC0+X19jcHVfcG93ZXI7CisKKwkJaWYgKGxvY2FsX2dyb3VwKSB7CisJCQlzZHMtPnRoaXNfbG9hZCA9IHNncy5hdmdfbG9hZDsKKwkJCXNkcy0+dGhpcyA9IGdyb3VwOworCQkJc2RzLT50aGlzX25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7CisJCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKKwkJfSBlbHNlIGlmIChzZ3MuYXZnX2xvYWQgPiBzZHMtPm1heF9sb2FkICYmCisJCQkgICAoc2dzLnN1bV9ucl9ydW5uaW5nID4gc2dzLmdyb3VwX2NhcGFjaXR5IHx8CisJCQkJc2dzLmdyb3VwX2ltYikpIHsKKwkJCXNkcy0+bWF4X2xvYWQgPSBzZ3MuYXZnX2xvYWQ7CisJCQlzZHMtPmJ1c2llc3QgPSBncm91cDsKKwkJCXNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOworCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7CisJCQlzZHMtPmdyb3VwX2ltYiA9IHNncy5ncm91cF9pbWI7CisJCX0KKworCQl1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhncm91cCwgc2RzLCBsb2NhbF9ncm91cCwgJnNncyk7CisJCWdyb3VwID0gZ3JvdXAtPm5leHQ7CisJfSB3aGlsZSAoZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7CisKK30KKworLyoqCisgKiBmaXhfc21hbGxfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBtaW5vciBpbWJhbGFuY2UgdGhhdCBleGlzdHMKKyAqCQkJYW1vbmdzdCB0aGUgZ3JvdXBzIG9mIGEgc2NoZWRfZG9tYWluLCBkdXJpbmcKKyAqCQkJbG9hZCBiYWxhbmNpbmcuCisgKiBAc2RzOiBTdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCisgKiBAdGhpc19jcHU6IFRoZSBjcHUgYXQgd2hvc2Ugc2NoZWRfZG9tYWluIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNlLgorICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3cgPSAwLCBwd3JfbW92ZSA9IDA7CisJdW5zaWduZWQgaW50IGltYm4gPSAyOworCisJaWYgKHNkcy0+dGhpc19ucl9ydW5uaW5nKSB7CisJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrIC89IHNkcy0+dGhpc19ucl9ydW5uaW5nOworCQlpZiAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPgorCQkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrKQorCQkJaW1ibiA9IDE7CisJfSBlbHNlCisJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0KKwkJCWNwdV9hdmdfbG9hZF9wZXJfdGFzayh0aGlzX2NwdSk7CisKKwlpZiAoc2RzLT5tYXhfbG9hZCAtIHNkcy0+dGhpc19sb2FkICsgc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPj0KKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogaW1ibikgeworCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE9LLCB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbWJhbGFuY2UgdG8ganVzdGlmeSBtb3ZpbmcgdGFza3MsCisJICogaG93ZXZlciB3ZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0b3RhbCBDUFUgcG93ZXIgdXNlZCBieQorCSAqIG1vdmluZyB0aGVtLgorCSAqLworCisJcHdyX25vdyArPSBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCk7CisJcHdyX25vdyArPSBzZHMtPnRoaXMtPl9fY3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQpOworCXB3cl9ub3cgLz0gU0NIRURfTE9BRF9TQ0FMRTsKKworCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2Qgc3VidHJhY3QgKi8KKwl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHNkcy0+YnVzaWVzdCwKKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7CisJaWYgKHNkcy0+bWF4X2xvYWQgPiB0bXApCisJCXB3cl9tb3ZlICs9IHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkIC0gdG1wKTsKKworCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCisJaWYgKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyIDwKKwkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKQorCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHNkcy0+dGhpcywKKwkJCXNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyKTsKKwllbHNlCisJCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIoc2RzLT50aGlzLAorCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKKwlwd3JfbW92ZSArPSBzZHMtPnRoaXMtPl9fY3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQgKyB0bXApOworCXB3cl9tb3ZlIC89IFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKiBNb3ZlIGlmIHdlIGdhaW4gdGhyb3VnaHB1dCAqLworCWlmIChwd3JfbW92ZSA+IHB3cl9ub3cpCisJCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKK30KKworLyoqCisgKiBjYWxjdWxhdGVfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgaW1iYWxhbmNlIHByZXNlbnQgd2l0aGluIHRoZQorICoJCQkgZ3JvdXBzIG9mIGEgZ2l2ZW4gc2NoZWRfZG9tYWluIGR1cmluZyBsb2FkIGJhbGFuY2UuCisgKiBAc2RzOiBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCisgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggY3VycmVudGx5IGxvYWQgYmFsYW5jZSBpcyBiZWluZyBwZXJmb3JtZWQuCisgKiBAaW1iYWxhbmNlOiBUaGUgdmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCB0aGlzX2NwdSwKKwkJdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCXVuc2lnbmVkIGxvbmcgbWF4X3B1bGw7CisJLyoKKwkgKiBJbiB0aGUgcHJlc2VuY2Ugb2Ygc21wIG5pY2UgYmFsYW5jaW5nLCBjZXJ0YWluIHNjZW5hcmlvcyBjYW4gaGF2ZQorCSAqIG1heCBsb2FkIGxlc3MgdGhhbiBhdmcgbG9hZChhcyB3ZSBza2lwIHRoZSBncm91cHMgYXQgb3IgYmVsb3cKKwkgKiBpdHMgY3B1X3Bvd2VyLCB3aGlsZSBjYWxjdWxhdGluZyBtYXhfbG9hZC4uKQorCSAqLworCWlmIChzZHMtPm1heF9sb2FkIDwgc2RzLT5hdmdfbG9hZCkgeworCQkqaW1iYWxhbmNlID0gMDsKKwkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKwl9CisKKwkvKiBEb24ndCB3YW50IHRvIHB1bGwgc28gbWFueSB0YXNrcyB0aGF0IGEgZ3JvdXAgd291bGQgZ28gaWRsZSAqLworCW1heF9wdWxsID0gbWluKHNkcy0+bWF4X2xvYWQgLSBzZHMtPmF2Z19sb2FkLAorCQkJc2RzLT5tYXhfbG9hZCAtIHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrKTsKKworCS8qIEhvdyBtdWNoIGxvYWQgdG8gYWN0dWFsbHkgbW92ZSB0byBlcXVhbGlzZSB0aGUgaW1iYWxhbmNlICovCisJKmltYmFsYW5jZSA9IG1pbihtYXhfcHVsbCAqIHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIsCisJCShzZHMtPmF2Z19sb2FkIC0gc2RzLT50aGlzX2xvYWQpICogc2RzLT50aGlzLT5fX2NwdV9wb3dlcikKKwkJCS8gU0NIRURfTE9BRF9TQ0FMRTsKKworCS8qCisJICogaWYgKmltYmFsYW5jZSBpcyBsZXNzIHRoYW4gdGhlIGF2ZXJhZ2UgbG9hZCBwZXIgcnVubmFibGUgdGFzaworCSAqIHRoZXJlIGlzIG5vIGdhdXJhbnRlZSB0aGF0IGFueSB0YXNrcyB3aWxsIGJlIG1vdmVkIHNvIHdlJ2xsIGhhdmUKKwkgKiBhIHRoaW5rIGFib3V0IGJ1bXBpbmcgaXRzIHZhbHVlIHRvIGZvcmNlIGF0IGxlYXN0IG9uZSB0YXNrIHRvIGJlCisJICogbW92ZWQKKwkgKi8KKwlpZiAoKmltYmFsYW5jZSA8IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrKQorCQlyZXR1cm4gZml4X3NtYWxsX2ltYmFsYW5jZShzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOworCit9CisvKioqKioqKiBmaW5kX2J1c2llc3RfZ3JvdXAoKSBoZWxwZXJzIGVuZCBoZXJlICoqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBmaW5kX2J1c2llc3RfZ3JvdXAgLSBSZXR1cm5zIHRoZSBidXNpZXN0IGdyb3VwIHdpdGhpbiB0aGUgc2NoZWRfZG9tYWluCisgKiBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuIElmIHRoZXJlIGlzbid0IGFuIGltYmFsYW5jZSwgYW5kCisgKiB0aGUgdXNlciBoYXMgb3B0ZWQgZm9yIHBvd2VyLXNhdmluZ3MsIGl0IHJldHVybnMgYSBncm91cCB3aG9zZQorICogQ1BVcyBjYW4gYmUgcHV0IHRvIGlkbGUgYnkgcmViYWxhbmNpbmcgdGhvc2UgdGFza3MgZWxzZXdoZXJlLCBpZgorICogc3VjaCBhIGdyb3VwIGV4aXN0cy4KKyAqCisgKiBBbHNvIGNhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoIHNob3VsZCBiZSBtb3ZlZAorICogdG8gcmVzdG9yZSBiYWxhbmNlLgorICoKKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBidXNpZXN0IGdyb3VwIGlzIHRvIGJlIHJldHVybmVkLgorICogQHRoaXNfY3B1OiBUaGUgY3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2luZyBpcyBjdXJyZW50bHkgYmVpbmcgcGVyZm9ybWVkLgorICogQGltYmFsYW5jZTogVmFyaWFibGUgd2hpY2ggc3RvcmVzIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoIHNob3VsZAorICoJCWJlIG1vdmVkIHRvIHJlc3RvcmUgYmFsYW5jZS9wdXQgYSBncm91cCB0byBpZGxlLgorICogQGlkbGU6IFRoZSBpZGxlIHN0YXR1cyBvZiB0aGlzX2NwdS4KKyAqIEBzZF9pZGxlOiBUaGUgaWRsZW5lc3Mgb2Ygc2QKKyAqIEBjcHVzOiBUaGUgc2V0IG9mIENQVXMgdW5kZXIgY29uc2lkZXJhdGlvbiBmb3IgbG9hZC1iYWxhbmNpbmcuCisgKiBAYmFsYW5jZTogUG9pbnRlciB0byBhIHZhcmlhYmxlIGluZGljYXRpbmcgaWYgdGhpc19jcHUKKyAqCWlzIHRoZSBhcHByb3ByaWF0ZSBjcHUgdG8gcGVyZm9ybSBsb2FkIGJhbGFuY2luZyBhdCB0aGlzX2xldmVsLgorICoKKyAqIFJldHVybnM6CS0gdGhlIGJ1c2llc3QgZ3JvdXAgaWYgaW1iYWxhbmNlIGV4aXN0cy4KKyAqCQktIElmIG5vIGltYmFsYW5jZSBhbmQgdXNlciBoYXMgb3B0ZWQgZm9yIHBvd2VyLXNhdmluZ3MgYmFsYW5jZSwKKyAqCQkgICByZXR1cm4gdGhlIGxlYXN0IGxvYWRlZCBncm91cCB3aG9zZSBDUFVzIGNhbiBiZQorICoJCSAgIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIGl0cyB0YXNrcyBvbnRvIG91ciBncm91cC4KICAqLwogc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqCiBmaW5kX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKIAkJICAgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKIAkJICAgaW50ICpzZF9pZGxlLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlKQogewotCXN0cnVjdCBzY2hlZF9ncm91cCAqYnVzaWVzdCA9IE5VTEwsICp0aGlzID0gTlVMTCwgKmdyb3VwID0gc2QtPmdyb3VwczsKLQl1bnNpZ25lZCBsb25nIG1heF9sb2FkLCBhdmdfbG9hZCwgdG90YWxfbG9hZCwgdGhpc19sb2FkLCB0b3RhbF9wd3I7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcHVsbDsKLQl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgYnVzaWVzdF9ucl9ydW5uaW5nOwotCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX25yX3J1bm5pbmc7Ci0JaW50IGxvYWRfaWR4LCBncm91cF9pbWIgPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JaW50IHBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDE7Ci0JdW5zaWduZWQgbG9uZyBsZWFkZXJfbnJfcnVubmluZyA9IDAsIG1pbl9sb2FkX3Blcl90YXNrID0gMDsKLQl1bnNpZ25lZCBsb25nIG1pbl9ucl9ydW5uaW5nID0gVUxPTkdfTUFYOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbWluID0gTlVMTCwgKmdyb3VwX2xlYWRlciA9IE5VTEw7Ci0jZW5kaWYKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgc2RzOwogCi0JbWF4X2xvYWQgPSB0aGlzX2xvYWQgPSB0b3RhbF9sb2FkID0gdG90YWxfcHdyID0gMDsKLQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBidXNpZXN0X25yX3J1bm5pbmcgPSAwOwotCXRoaXNfbG9hZF9wZXJfdGFzayA9IHRoaXNfbnJfcnVubmluZyA9IDA7CisJbWVtc2V0KCZzZHMsIDAsIHNpemVvZihzZHMpKTsKIAotCWlmIChpZGxlID09IENQVV9OT1RfSURMRSkKLQkJbG9hZF9pZHggPSBzZC0+YnVzeV9pZHg7Ci0JZWxzZSBpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSkKLQkJbG9hZF9pZHggPSBzZC0+bmV3aWRsZV9pZHg7Ci0JZWxzZQotCQlsb2FkX2lkeCA9IHNkLT5pZGxlX2lkeDsKKwkvKgorCSAqIENvbXB1dGUgdGhlIHZhcmlvdXMgc3RhdGlzdGljcyByZWxhdmVudCBmb3IgbG9hZCBiYWxhbmNpbmcgYXQKKwkgKiB0aGlzIGxldmVsLgorCSAqLworCXVwZGF0ZV9zZF9sYl9zdGF0cyhzZCwgdGhpc19jcHUsIGlkbGUsIHNkX2lkbGUsIGNwdXMsCisJCQkJCWJhbGFuY2UsICZzZHMpOwogCi0JZG8gewotCQl1bnNpZ25lZCBsb25nIGxvYWQsIGdyb3VwX2NhcGFjaXR5LCBtYXhfY3B1X2xvYWQsIG1pbl9jcHVfbG9hZDsKLQkJaW50IGxvY2FsX2dyb3VwOwotCQlpbnQgaTsKLQkJaW50IF9fZ3JvdXBfaW1iID0gMDsKLQkJdW5zaWduZWQgaW50IGJhbGFuY2VfY3B1ID0gLTEsIGZpcnN0X2lkbGVfY3B1ID0gMDsKLQkJdW5zaWduZWQgbG9uZyBzdW1fbnJfcnVubmluZywgc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCXVuc2lnbmVkIGxvbmcgc3VtX2F2Z19sb2FkX3Blcl90YXNrOwotCQl1bnNpZ25lZCBsb25nIGF2Z19sb2FkX3Blcl90YXNrOworCS8qIENhc2VzIHdoZXJlIGltYmFsYW5jZSBkb2VzIG5vdCBleGlzdCBmcm9tIFBPViBvZiB0aGlzX2NwdSAqLworCS8qIDEpIHRoaXNfY3B1IGlzIG5vdCB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcKKwkgKiAgICBhdCB0aGlzIGxldmVsLgorCSAqIDIpIFRoZXJlIGlzIG5vIGJ1c3kgc2libGluZyBncm91cCB0byBwdWxsIGZyb20uCisJICogMykgVGhpcyBncm91cCBpcyB0aGUgYnVzaWVzdCBncm91cC4KKwkgKiA0KSBUaGlzIGdyb3VwIGlzIG1vcmUgYnVzeSB0aGFuIHRoZSBhdmcgYnVzaWVuZXNzIGF0IHRoaXMKKwkgKiAgICBzY2hlZF9kb21haW4uCisJICogNSkgVGhlIGltYmFsYW5jZSBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW1pdC4KKwkgKiA2KSBBbnkgcmViYWxhbmNlIHdvdWxkIGxlYWQgdG8gcGluZy1wb25nCisJICovCisJaWYgKGJhbGFuY2UgJiYgISgqYmFsYW5jZSkpCisJCWdvdG8gcmV0OwogCi0JCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKLQkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKLQotCQlpZiAobG9jYWxfZ3JvdXApCi0JCQliYWxhbmNlX2NwdSA9IGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOwotCi0JCS8qIFRhbGx5IHVwIHRoZSBsb2FkIG9mIGFsbCBDUFVzIGluIHRoZSBncm91cCAqLwotCQlzdW1fd2VpZ2h0ZWRfbG9hZCA9IHN1bV9ucl9ydW5uaW5nID0gYXZnX2xvYWQgPSAwOwotCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgPSBhdmdfbG9hZF9wZXJfdGFzayA9IDA7Ci0KLQkJbWF4X2NwdV9sb2FkID0gMDsKLQkJbWluX2NwdV9sb2FkID0gfjBVTDsKLQotCQlmb3JfZWFjaF9jcHVfYW5kKGksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApLCBjcHVzKSB7Ci0JCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGkpOwotCi0JCQlpZiAoKnNkX2lkbGUgJiYgcnEtPm5yX3J1bm5pbmcpCi0JCQkJKnNkX2lkbGUgPSAwOwotCi0JCQkvKiBCaWFzIGJhbGFuY2luZyB0b3dhcmQgY3B1cyBvZiBvdXIgZG9tYWluICovCi0JCQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJCQlpZiAoaWRsZV9jcHUoaSkgJiYgIWZpcnN0X2lkbGVfY3B1KSB7Ci0JCQkJCWZpcnN0X2lkbGVfY3B1ID0gMTsKLQkJCQkJYmFsYW5jZV9jcHUgPSBpOwotCQkJCX0KLQotCQkJCWxvYWQgPSB0YXJnZXRfbG9hZChpLCBsb2FkX2lkeCk7Ci0JCQl9IGVsc2UgewotCQkJCWxvYWQgPSBzb3VyY2VfbG9hZChpLCBsb2FkX2lkeCk7Ci0JCQkJaWYgKGxvYWQgPiBtYXhfY3B1X2xvYWQpCi0JCQkJCW1heF9jcHVfbG9hZCA9IGxvYWQ7Ci0JCQkJaWYgKG1pbl9jcHVfbG9hZCA+IGxvYWQpCi0JCQkJCW1pbl9jcHVfbG9hZCA9IGxvYWQ7Ci0JCQl9Ci0KLQkJCWF2Z19sb2FkICs9IGxvYWQ7Ci0JCQlzdW1fbnJfcnVubmluZyArPSBycS0+bnJfcnVubmluZzsKLQkJCXN1bV93ZWlnaHRlZF9sb2FkICs9IHdlaWdodGVkX2NwdWxvYWQoaSk7Ci0KLQkJCXN1bV9hdmdfbG9hZF9wZXJfdGFzayArPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2soaSk7Ci0JCX0KLQotCQkvKgotCQkgKiBGaXJzdCBpZGxlIGNwdSBvciB0aGUgZmlyc3QgY3B1KGJ1c2llc3QpIGluIHRoaXMgc2NoZWQgZ3JvdXAKLQkJICogaXMgZWxpZ2libGUgZm9yIGRvaW5nIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXMgYW5kIGFib3ZlCi0JCSAqIGRvbWFpbnMuIEluIHRoZSBuZXdseSBpZGxlIGNhc2UsIHdlIHdpbGwgYWxsb3cgYWxsIHRoZSBjcHUncwotCQkgKiB0byBkbyB0aGUgbmV3bHkgaWRsZSBsb2FkIGJhbGFuY2UuCi0JCSAqLwotCQlpZiAoaWRsZSAhPSBDUFVfTkVXTFlfSURMRSAmJiBsb2NhbF9ncm91cCAmJgotCQkgICAgYmFsYW5jZV9jcHUgIT0gdGhpc19jcHUgJiYgYmFsYW5jZSkgewotCQkJKmJhbGFuY2UgPSAwOwotCQkJZ290byByZXQ7Ci0JCX0KLQotCQl0b3RhbF9sb2FkICs9IGF2Z19sb2FkOwotCQl0b3RhbF9wd3IgKz0gZ3JvdXAtPl9fY3B1X3Bvd2VyOwotCi0JCS8qIEFkanVzdCBieSByZWxhdGl2ZSBDUFUgcG93ZXIgb2YgdGhlIGdyb3VwICovCi0JCWF2Z19sb2FkID0gc2dfZGl2X2NwdV9wb3dlcihncm91cCwKLQkJCQlhdmdfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpOwotCi0KLQkJLyoKLQkJICogQ29uc2lkZXIgdGhlIGdyb3VwIHVuYmFsYW5jZWQgd2hlbiB0aGUgaW1iYWxhbmNlIGlzIGxhcmdlcgotCQkgKiB0aGFuIHRoZSBhdmVyYWdlIHdlaWdodCBvZiB0d28gdGFza3MuCi0JCSAqCi0JCSAqIEFQWjogd2l0aCBjZ3JvdXAgdGhlIGF2ZyB0YXNrIHdlaWdodCBjYW4gdmFyeSB3aWxkbHkgYW5kCi0JCSAqICAgICAgbWlnaHQgbm90IGJlIGEgc3VpdGFibGUgbnVtYmVyIC0gc2hvdWxkIHdlIGtlZXAgYQotCQkgKiAgICAgIG5vcm1hbGl6ZWQgbnJfcnVubmluZyBudW1iZXIgc29tZXdoZXJlIHRoYXQgbmVnYXRlcwotCQkgKiAgICAgIHRoZSBoaWVyYXJjaHk/Ci0JCSAqLwotCQlhdmdfbG9hZF9wZXJfdGFzayA9IHNnX2Rpdl9jcHVfcG93ZXIoZ3JvdXAsCi0JCQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0KLQkJaWYgKChtYXhfY3B1X2xvYWQgLSBtaW5fY3B1X2xvYWQpID4gMiphdmdfbG9hZF9wZXJfdGFzaykKLQkJCV9fZ3JvdXBfaW1iID0gMTsKLQotCQlncm91cF9jYXBhY2l0eSA9IGdyb3VwLT5fX2NwdV9wb3dlciAvIFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkJaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCQl0aGlzX2xvYWQgPSBhdmdfbG9hZDsKLQkJCXRoaXMgPSBncm91cDsKLQkJCXRoaXNfbnJfcnVubmluZyA9IHN1bV9ucl9ydW5uaW5nOwotCQkJdGhpc19sb2FkX3Blcl90YXNrID0gc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCX0gZWxzZSBpZiAoYXZnX2xvYWQgPiBtYXhfbG9hZCAmJgotCQkJICAgKHN1bV9ucl9ydW5uaW5nID4gZ3JvdXBfY2FwYWNpdHkgfHwgX19ncm91cF9pbWIpKSB7Ci0JCQltYXhfbG9hZCA9IGF2Z19sb2FkOwotCQkJYnVzaWVzdCA9IGdyb3VwOwotCQkJYnVzaWVzdF9ucl9ydW5uaW5nID0gc3VtX25yX3J1bm5pbmc7Ci0JCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBzdW1fd2VpZ2h0ZWRfbG9hZDsKLQkJCWdyb3VwX2ltYiA9IF9fZ3JvdXBfaW1iOwotCQl9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCQkvKgotCQkgKiBCdXN5IHByb2Nlc3NvcnMgd2lsbCBub3QgcGFydGljaXBhdGUgaW4gcG93ZXIgc2F2aW5ncwotCQkgKiBiYWxhbmNlLgotCQkgKi8KLQkJaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFIHx8Ci0JCQkJIShzZC0+ZmxhZ3MgJiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCQlnb3RvIGdyb3VwX25leHQ7Ci0KLQkJLyoKLQkJICogSWYgdGhlIGxvY2FsIGdyb3VwIGlzIGlkbGUgb3IgY29tcGxldGVseSBsb2FkZWQKLQkJICogbm8gbmVlZCB0byBkbyBwb3dlciBzYXZpbmdzIGJhbGFuY2UgYXQgdGhpcyBkb21haW4KLQkJICovCi0JCWlmIChsb2NhbF9ncm91cCAmJiAodGhpc19ucl9ydW5uaW5nID49IGdyb3VwX2NhcGFjaXR5IHx8Ci0JCQkJICAgICF0aGlzX25yX3J1bm5pbmcpKQotCQkJcG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKLQotCQkvKgotCQkgKiBJZiBhIGdyb3VwIGlzIGFscmVhZHkgcnVubmluZyBhdCBmdWxsIGNhcGFjaXR5IG9yIGlkbGUsCi0JCSAqIGRvbid0IGluY2x1ZGUgdGhhdCBncm91cCBpbiBwb3dlciBzYXZpbmdzIGNhbGN1bGF0aW9ucwotCQkgKi8KLQkJaWYgKCFwb3dlcl9zYXZpbmdzX2JhbGFuY2UgfHwgc3VtX25yX3J1bm5pbmcgPj0gZ3JvdXBfY2FwYWNpdHkKLQkJICAgIHx8ICFzdW1fbnJfcnVubmluZykKLQkJCWdvdG8gZ3JvdXBfbmV4dDsKLQotCQkvKgotCQkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGhhcyB0aGUgbGVhc3Qgbm9uLWlkbGUgbG9hZC4KLQkJICogVGhpcyBpcyB0aGUgZ3JvdXAgZnJvbSB3aGVyZSB3ZSBuZWVkIHRvIHBpY2sgdXAgdGhlIGxvYWQKLQkJICogZm9yIHNhdmluZyBwb3dlcgotCQkgKi8KLQkJaWYgKChzdW1fbnJfcnVubmluZyA8IG1pbl9ucl9ydW5uaW5nKSB8fAotCQkgICAgKHN1bV9ucl9ydW5uaW5nID09IG1pbl9ucl9ydW5uaW5nICYmCi0JCSAgICAgY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSkgPgotCQkgICAgIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cF9taW4pKSkpIHsKLQkJCWdyb3VwX21pbiA9IGdyb3VwOwotCQkJbWluX25yX3J1bm5pbmcgPSBzdW1fbnJfcnVubmluZzsKLQkJCW1pbl9sb2FkX3Blcl90YXNrID0gc3VtX3dlaWdodGVkX2xvYWQgLwotCQkJCQkJc3VtX25yX3J1bm5pbmc7Ci0JCX0KLQotCQkvKgotCQkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGlzIGFsbW9zdCBuZWFyIGl0cwotCQkgKiBjYXBhY2l0eSBidXQgc3RpbGwgaGFzIHNvbWUgc3BhY2UgdG8gcGljayB1cCBzb21lIGxvYWQKLQkJICogZnJvbSBvdGhlciBncm91cCBhbmQgc2F2ZSBtb3JlIHBvd2VyCi0JCSAqLwotCQlpZiAoc3VtX25yX3J1bm5pbmcgPD0gZ3JvdXBfY2FwYWNpdHkgLSAxKSB7Ci0JCQlpZiAoc3VtX25yX3J1bm5pbmcgPiBsZWFkZXJfbnJfcnVubmluZyB8fAotCQkJICAgIChzdW1fbnJfcnVubmluZyA9PSBsZWFkZXJfbnJfcnVubmluZyAmJgotCQkJICAgICBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKSA8Ci0JCQkgICAgIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cF9sZWFkZXIpKSkpIHsKLQkJCQlncm91cF9sZWFkZXIgPSBncm91cDsKLQkJCQlsZWFkZXJfbnJfcnVubmluZyA9IHN1bV9ucl9ydW5uaW5nOwotCQkJfQotCQl9Ci1ncm91cF9uZXh0OgotI2VuZGlmCi0JCWdyb3VwID0gZ3JvdXAtPm5leHQ7Ci0JfSB3aGlsZSAoZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7Ci0KLQlpZiAoIWJ1c2llc3QgfHwgdGhpc19sb2FkID49IG1heF9sb2FkIHx8IGJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQorCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAotCWF2Z19sb2FkID0gKFNDSEVEX0xPQURfU0NBTEUgKiB0b3RhbF9sb2FkKSAvIHRvdGFsX3B3cjsKLQotCWlmICh0aGlzX2xvYWQgPj0gYXZnX2xvYWQgfHwKLQkJCTEwMCptYXhfbG9hZCA8PSBzZC0+aW1iYWxhbmNlX3BjdCp0aGlzX2xvYWQpCisJaWYgKHNkcy50aGlzX2xvYWQgPj0gc2RzLm1heF9sb2FkKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAotCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAvPSBidXNpZXN0X25yX3J1bm5pbmc7Ci0JaWYgKGdyb3VwX2ltYikKLQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrID0gbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgYXZnX2xvYWQpOworCXNkcy5hdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogc2RzLnRvdGFsX2xvYWQpIC8gc2RzLnRvdGFsX3B3cjsKKworCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5hdmdfbG9hZCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwlpZiAoMTAwICogc2RzLm1heF9sb2FkIDw9IHNkLT5pbWJhbGFuY2VfcGN0ICogc2RzLnRoaXNfbG9hZCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwlzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrIC89IHNkcy5idXNpZXN0X25yX3J1bm5pbmc7CisJaWYgKHNkcy5ncm91cF9pbWIpCisJCXNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPQorCQkJbWluKHNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy5hdmdfbG9hZCk7CiAKIAkvKgogCSAqIFdlJ3JlIHRyeWluZyB0byBnZXQgYWxsIHRoZSBjcHVzIHRvIHRoZSBhdmVyYWdlX2xvYWQsIHNvIHdlIGRvbid0CkBAIC0zMzA2LDEwNSArMzc2MCwyMCBAQAogCSAqIGJ5IHB1bGxpbmcgdGFza3MgdG8gdXMuIEJlIGNhcmVmdWwgb2YgbmVnYXRpdmUgbnVtYmVycyBhcyB0aGV5J2xsCiAJICogYXBwZWFyIGFzIHZlcnkgbGFyZ2UgdmFsdWVzIHdpdGggdW5zaWduZWQgbG9uZ3MuCiAJICovCi0JaWYgKG1heF9sb2FkIDw9IGJ1c2llc3RfbG9hZF9wZXJfdGFzaykKKwlpZiAoc2RzLm1heF9sb2FkIDw9IHNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2spCiAJCWdvdG8gb3V0X2JhbGFuY2VkOwogCi0JLyoKLQkgKiBJbiB0aGUgcHJlc2VuY2Ugb2Ygc21wIG5pY2UgYmFsYW5jaW5nLCBjZXJ0YWluIHNjZW5hcmlvcyBjYW4gaGF2ZQotCSAqIG1heCBsb2FkIGxlc3MgdGhhbiBhdmcgbG9hZChhcyB3ZSBza2lwIHRoZSBncm91cHMgYXQgb3IgYmVsb3cKLQkgKiBpdHMgY3B1X3Bvd2VyLCB3aGlsZSBjYWxjdWxhdGluZyBtYXhfbG9hZC4uKQotCSAqLwotCWlmIChtYXhfbG9hZCA8IGF2Z19sb2FkKSB7Ci0JCSppbWJhbGFuY2UgPSAwOwotCQlnb3RvIHNtYWxsX2ltYmFsYW5jZTsKLQl9Ci0KLQkvKiBEb24ndCB3YW50IHRvIHB1bGwgc28gbWFueSB0YXNrcyB0aGF0IGEgZ3JvdXAgd291bGQgZ28gaWRsZSAqLwotCW1heF9wdWxsID0gbWluKG1heF9sb2FkIC0gYXZnX2xvYWQsIG1heF9sb2FkIC0gYnVzaWVzdF9sb2FkX3Blcl90YXNrKTsKLQotCS8qIEhvdyBtdWNoIGxvYWQgdG8gYWN0dWFsbHkgbW92ZSB0byBlcXVhbGlzZSB0aGUgaW1iYWxhbmNlICovCi0JKmltYmFsYW5jZSA9IG1pbihtYXhfcHVsbCAqIGJ1c2llc3QtPl9fY3B1X3Bvd2VyLAotCQkJCShhdmdfbG9hZCAtIHRoaXNfbG9hZCkgKiB0aGlzLT5fX2NwdV9wb3dlcikKLQkJCS8gU0NIRURfTE9BRF9TQ0FMRTsKLQotCS8qCi0JICogaWYgKmltYmFsYW5jZSBpcyBsZXNzIHRoYW4gdGhlIGF2ZXJhZ2UgbG9hZCBwZXIgcnVubmFibGUgdGFzawotCSAqIHRoZXJlIGlzIG5vIGdhdXJhbnRlZSB0aGF0IGFueSB0YXNrcyB3aWxsIGJlIG1vdmVkIHNvIHdlJ2xsIGhhdmUKLQkgKiBhIHRoaW5rIGFib3V0IGJ1bXBpbmcgaXRzIHZhbHVlIHRvIGZvcmNlIGF0IGxlYXN0IG9uZSB0YXNrIHRvIGJlCi0JICogbW92ZWQKLQkgKi8KLQlpZiAoKmltYmFsYW5jZSA8IGJ1c2llc3RfbG9hZF9wZXJfdGFzaykgewotCQl1bnNpZ25lZCBsb25nIHRtcCwgcHdyX25vdywgcHdyX21vdmU7Ci0JCXVuc2lnbmVkIGludCBpbWJuOwotCi1zbWFsbF9pbWJhbGFuY2U6Ci0JCXB3cl9tb3ZlID0gcHdyX25vdyA9IDA7Ci0JCWltYm4gPSAyOwotCQlpZiAodGhpc19ucl9ydW5uaW5nKSB7Ci0JCQl0aGlzX2xvYWRfcGVyX3Rhc2sgLz0gdGhpc19ucl9ydW5uaW5nOwotCQkJaWYgKGJ1c2llc3RfbG9hZF9wZXJfdGFzayA+IHRoaXNfbG9hZF9wZXJfdGFzaykKLQkJCQlpbWJuID0gMTsKLQkJfSBlbHNlCi0JCQl0aGlzX2xvYWRfcGVyX3Rhc2sgPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOwotCi0JCWlmIChtYXhfbG9hZCAtIHRoaXNfbG9hZCArIGJ1c2llc3RfbG9hZF9wZXJfdGFzayA+PQotCQkJCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBpbWJuKSB7Ci0JCQkqaW1iYWxhbmNlID0gYnVzaWVzdF9sb2FkX3Blcl90YXNrOwotCQkJcmV0dXJuIGJ1c2llc3Q7Ci0JCX0KLQotCQkvKgotCQkgKiBPSywgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW1iYWxhbmNlIHRvIGp1c3RpZnkgbW92aW5nIHRhc2tzLAotCQkgKiBob3dldmVyIHdlIG1heSBiZSBhYmxlIHRvIGluY3JlYXNlIHRvdGFsIENQVSBwb3dlciB1c2VkIGJ5Ci0JCSAqIG1vdmluZyB0aGVtLgotCQkgKi8KLQotCQlwd3Jfbm93ICs9IGJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4oYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBtYXhfbG9hZCk7Ci0JCXB3cl9ub3cgKz0gdGhpcy0+X19jcHVfcG93ZXIgKgotCQkJCW1pbih0aGlzX2xvYWRfcGVyX3Rhc2ssIHRoaXNfbG9hZCk7Ci0JCXB3cl9ub3cgLz0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCQkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCi0JCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIoYnVzaWVzdCwKLQkJCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKLQkJaWYgKG1heF9sb2FkID4gdG1wKQotCQkJcHdyX21vdmUgKz0gYnVzaWVzdC0+X19jcHVfcG93ZXIgKgotCQkJCW1pbihidXNpZXN0X2xvYWRfcGVyX3Rhc2ssIG1heF9sb2FkIC0gdG1wKTsKLQotCQkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIGFkZCAqLwotCQlpZiAobWF4X2xvYWQgKiBidXNpZXN0LT5fX2NwdV9wb3dlciA8Ci0JCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkKLQkJCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIodGhpcywKLQkJCQkJbWF4X2xvYWQgKiBidXNpZXN0LT5fX2NwdV9wb3dlcik7Ci0JCWVsc2UKLQkJCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIodGhpcywKLQkJCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKLQkJcHdyX21vdmUgKz0gdGhpcy0+X19jcHVfcG93ZXIgKgotCQkJCW1pbih0aGlzX2xvYWRfcGVyX3Rhc2ssIHRoaXNfbG9hZCArIHRtcCk7Ci0JCXB3cl9tb3ZlIC89IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkJLyogTW92ZSBpZiB3ZSBnYWluIHRocm91Z2hwdXQgKi8KLQkJaWYgKHB3cl9tb3ZlID4gcHdyX25vdykKLQkJCSppbWJhbGFuY2UgPSBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7Ci0JfQotCi0JcmV0dXJuIGJ1c2llc3Q7CisJLyogTG9va3MgbGlrZSB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuIENvbXB1dGUgaXQgKi8KKwljYWxjdWxhdGVfaW1iYWxhbmNlKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOworCXJldHVybiBzZHMuYnVzaWVzdDsKIAogb3V0X2JhbGFuY2VkOgotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFIHx8ICEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlnb3RvIHJldDsKLQotCWlmICh0aGlzID09IGdyb3VwX2xlYWRlciAmJiBncm91cF9sZWFkZXIgIT0gZ3JvdXBfbWluKSB7Ci0JCSppbWJhbGFuY2UgPSBtaW5fbG9hZF9wZXJfdGFzazsKLQkJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPj0gUE9XRVJTQVZJTkdTX0JBTEFOQ0VfV0FLRVVQKSB7Ci0JCQljcHVfcnEodGhpc19jcHUpLT5yZC0+c2NoZWRfbWNfcHJlZmVycmVkX3dha2V1cF9jcHUgPQotCQkJCWNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cF9sZWFkZXIpKTsKLQkJfQotCQlyZXR1cm4gZ3JvdXBfbWluOwotCX0KLSNlbmRpZgorCS8qCisJICogVGhlcmUgaXMgbm8gb2J2aW91cyBpbWJhbGFuY2UuIEJ1dCBjaGVjayBpZiB3ZSBjYW4gZG8gc29tZSBiYWxhbmNpbmcKKwkgKiB0byBzYXZlIHBvd2VyLgorCSAqLworCWlmIChjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSkpCisJCXJldHVybiBzZHMuYnVzaWVzdDsKIHJldDoKIAkqaW1iYWxhbmNlID0gMDsKIAlyZXR1cm4gTlVMTDsKQEAgLTQwNTcsNiArNDQyNiwxMSBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9uX251bGxfZG9tYWluKGludCBjcHUpCit7CisJcmV0dXJuICFyY3VfZGVyZWZlcmVuY2UoY3B1X3JxKGNwdSktPnNkKTsKK30KKwogLyoKICAqIFRyaWdnZXIgdGhlIFNDSEVEX1NPRlRJUlEgaWYgaXQgaXMgdGltZSB0byBkbyBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZy4KICAqCkBAIC00MTE0LDcgKzQ0ODgsOSBAQAogCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCiAJCXJldHVybjsKICNlbmRpZgotCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpKQorCS8qIERvbid0IG5lZWQgdG8gcmViYWxhbmNlIHdoaWxlIGF0dGFjaGVkIHRvIE5VTEwgZG9tYWluICovCisJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnEtPm5leHRfYmFsYW5jZSkgJiYKKwkgICAgbGlrZWx5KCFvbl9udWxsX2RvbWFpbihjcHUpKSkKIAkJcmFpc2Vfc29mdGlycShTQ0hFRF9TT0ZUSVJRKTsKIH0KIApAQCAtNDUwOCwxMSArNDg4NCwzMyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQoreworCWlmIChwcmV2LT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcpIHsKKwkJdTY0IHJ1bnRpbWUgPSBwcmV2LT5zZS5zdW1fZXhlY19ydW50aW1lOworCisJCXJ1bnRpbWUgLT0gcHJldi0+c2UucHJldl9zdW1fZXhlY19ydW50aW1lOworCQlydW50aW1lID0gbWluX3QodTY0LCBydW50aW1lLCAyKnN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCk7CisKKwkJLyoKKwkJICogSW4gb3JkZXIgdG8gYXZvaWQgYXZnX292ZXJsYXAgZ3Jvd2luZyBzdGFsZSB3aGVuIHdlIGFyZQorCQkgKiBpbmRlZWQgb3ZlcmxhcHBpbmcgYW5kIGhlbmNlIG5vdCBnZXR0aW5nIHB1dCB0byBzbGVlcCwgZ3JvdworCQkgKiB0aGUgYXZnX292ZXJsYXAgb24gcHJlZW1wdGlvbi4KKwkJICoKKwkJICogV2UgdXNlIHRoZSBhdmVyYWdlIHByZWVtcHRpb24gcnVudGltZSBiZWNhdXNlIHRoYXQKKwkJICogY29ycmVsYXRlcyB0byB0aGUgYW1vdW50IG9mIGNhY2hlIGZvb3RwcmludCBhIHRhc2sgY2FuCisJCSAqIGJ1aWxkIHVwLgorCQkgKi8KKwkJdXBkYXRlX2F2ZygmcHJldi0+c2UuYXZnX292ZXJsYXAsIHJ1bnRpbWUpOworCX0KKwlwcmV2LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgcHJldik7Cit9CisKIC8qCiAgKiBQaWNrIHVwIHRoZSBoaWdoZXN0LXByaW8gdGFzazoKICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKgotcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQorcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSkKIHsKIAljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTQ1ODYsOCArNDk4NCw4IEBACiAJaWYgKHVubGlrZWx5KCFycS0+bnJfcnVubmluZykpCiAJCWlkbGVfYmFsYW5jZShjcHUsIHJxKTsKIAotCXByZXYtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwcmV2KTsKLQluZXh0ID0gcGlja19uZXh0X3Rhc2socnEsIHByZXYpOworCXB1dF9wcmV2X3Rhc2socnEsIHByZXYpOworCW5leHQgPSBwaWNrX25leHRfdGFzayhycSk7CiAKIAlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKIAkJc2NoZWRfaW5mb19zd2l0Y2gocHJldiwgbmV4dCk7CkBAIC00NjQyLDcgKzUwNDAsNyBAQAogCQkgKiBiZXR3ZWVuIHNjaGVkdWxlIGFuZCBub3cuCiAJCSAqLwogCQliYXJyaWVyKCk7Ci0JfSB3aGlsZSAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpOworCX0gd2hpbGUgKG5lZWRfcmVzY2hlZCgpKTsKIH0KIEVYUE9SVF9TWU1CT0wocHJlZW1wdF9zY2hlZHVsZSk7CiAKQEAgLTQ2NzEsNyArNTA2OSw3IEBACiAJCSAqIGJldHdlZW4gc2NoZWR1bGUgYW5kIG5vdy4KIAkJICovCiAJCWJhcnJpZXIoKTsKLQl9IHdoaWxlICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpKSk7CisJfSB3aGlsZSAobmVlZF9yZXNjaGVkKCkpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX1BSRUVNUFQgKi8KQEAgLTUxNDUsNyArNTU0Myw3IEBACiAJaWYgKGluY3JlbWVudCA+IDQwKQogCQlpbmNyZW1lbnQgPSA0MDsKIAotCW5pY2UgPSBQUklPX1RPX05JQ0UoY3VycmVudC0+c3RhdGljX3ByaW8pICsgaW5jcmVtZW50OworCW5pY2UgPSBUQVNLX05JQ0UoY3VycmVudCkgKyBpbmNyZW1lbnQ7CiAJaWYgKG5pY2UgPCAtMjApCiAJCW5pY2UgPSAtMjA7CiAJaWYgKG5pY2UgPiAxOSkKQEAgLTY0MjMsNyArNjgyMSw3IEBACiAJCWlmICghcnEtPm5yX3J1bm5pbmcpCiAJCQlicmVhazsKIAkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQkJbmV4dCA9IHBpY2tfbmV4dF90YXNrKHJxLCBycS0+Y3Vycik7CisJCW5leHQgPSBwaWNrX25leHRfdGFzayhycSk7CiAJCWlmICghbmV4dCkKIAkJCWJyZWFrOwogCQluZXh0LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgbmV4dCk7CkBAIC04MjE4LDExICs4NjE2LDE1IEBACiAJX19zZXRfYml0KE1BWF9SVF9QUklPLCBhcnJheS0+Yml0bWFwKTsKIAogI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCXJ0X3JxLT5oaWdoZXN0X3ByaW8gPSBNQVhfUlRfUFJJTzsKKwlydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPSBNQVhfUlRfUFJJTzsKKyNpZmRlZiBDT05GSUdfU01QCisJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gTUFYX1JUX1BSSU87CisjZW5kaWYKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTVAKIAlydF9ycS0+cnRfbnJfbWlncmF0b3J5ID0gMDsKIAlydF9ycS0+b3ZlcmxvYWRlZCA9IDA7CisJcGxpc3RfaGVhZF9pbml0KCZycS0+cnQucHVzaGFibGVfdGFza3MsICZycS0+bG9jayk7CiAjZW5kaWYKIAogCXJ0X3JxLT5ydF90aW1lID0gMDsKQEAgLTk1OTgsNyArMTAwMDAsNyBAQAogCXN0cnVjdCBjcHVhY2N0ICpjYTsKIAlpbnQgY3B1OwogCi0JaWYgKCFjcHVhY2N0X3N1YnN5cy5hY3RpdmUpCisJaWYgKHVubGlrZWx5KCFjcHVhY2N0X3N1YnN5cy5hY3RpdmUpKQogCQlyZXR1cm47CiAKIAljcHUgPSB0YXNrX2NwdSh0c2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2Nsb2NrLmMgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwppbmRleCBhMGIwODUyLi4zOTBmMzMyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY2xvY2suYworKysgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwpAQCAtMjQsMTEgKzI0LDExIEBACiAgKiBUaGUgY2xvY2s6IHNjaGVkX2Nsb2NrX2NwdSgpIGlzIG1vbm90b25pYyBwZXIgY3B1LCBhbmQgc2hvdWxkIGJlIHNvbWV3aGF0CiAgKiBjb25zaXN0ZW50IGJldHdlZW4gY3B1cyAobmV2ZXIgbW9yZSB0aGFuIDIgamlmZmllcyBkaWZmZXJlbmNlKS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW1lIGluIG5hbm9zZWMgdW5pdHMuCkBAIC00Myw2ICs0Myw3IEBACiBzdGF0aWMgX19yZWFkX21vc3RseSBpbnQgc2NoZWRfY2xvY2tfcnVubmluZzsKIAogI2lmZGVmIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCitfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19zdGFibGU7CiAKIHN0cnVjdCBzY2hlZF9jbG9ja19kYXRhIHsKIAkvKgpAQCAtODcsNyArODgsNyBAQAogfQogCiAvKgotICogbWluLG1heCBleGNlcHQgdGhleSB0YWtlIHdyYXBwaW5nIGludG8gYWNjb3VudAorICogbWluLCBtYXggZXhjZXB0IHRoZXkgdGFrZSB3cmFwcGluZyBpbnRvIGFjY291bnQKICAqLwogCiBzdGF0aWMgaW5saW5lIHU2NCB3cmFwX21pbih1NjQgeCwgdTY0IHkpCkBAIC0xMTEsMTUgKzExMiwxMyBAQAogCXM2NCBkZWx0YSA9IG5vdyAtIHNjZC0+dGlja19yYXc7CiAJdTY0IGNsb2NrLCBtaW5fY2xvY2ssIG1heF9jbG9jazsKIAotCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKLQogCWlmICh1bmxpa2VseShkZWx0YSA8IDApKQogCQlkZWx0YSA9IDA7CiAKIAkvKgogCSAqIHNjZC0+Y2xvY2sgPSBjbGFtcChzY2QtPnRpY2tfZ3RvZCArIGRlbHRhLAotCSAqIAkJICAgICAgbWF4KHNjZC0+dGlja19ndG9kLCBzY2QtPmNsb2NrKSwKLQkgKiAJCSAgICAgIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKKwkgKgkJICAgICAgbWF4KHNjZC0+dGlja19ndG9kLCBzY2QtPmNsb2NrKSwKKwkgKgkJICAgICAgc2NkLT50aWNrX2d0b2QgKyBUSUNLX05TRUMpOwogCSAqLwogCiAJY2xvY2sgPSBzY2QtPnRpY2tfZ3RvZCArIGRlbHRhOwpAQCAtMTQ4LDEyICsxNDcsMTMgQEAKIAogdTY0IHNjaGVkX2Nsb2NrX2NwdShpbnQgY3B1KQogewotCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2QgPSBjcHVfc2RjKGNwdSk7CiAJdTY0IG5vdywgY2xvY2ssIHRoaXNfY2xvY2ssIHJlbW90ZV9jbG9jazsKKwlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkOwogCi0JaWYgKHVubGlrZWx5KCFzY2hlZF9jbG9ja19ydW5uaW5nKSkKLQkJcmV0dXJuIDB1bGw7CisJaWYgKHNjaGVkX2Nsb2NrX3N0YWJsZSkKKwkJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiAKKwlzY2QgPSBjcHVfc2RjKGNwdSk7CiAJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CiAKQEAgLTE5NSwxNCArMTk1LDE4IEBACiAKIHZvaWQgc2NoZWRfY2xvY2tfdGljayh2b2lkKQogewotCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2QgPSB0aGlzX3NjZCgpOworCXN0cnVjdCBzY2hlZF9jbG9ja19kYXRhICpzY2Q7CiAJdTY0IG5vdywgbm93X2d0b2Q7CiAKKwlpZiAoc2NoZWRfY2xvY2tfc3RhYmxlKQorCQlyZXR1cm47CisKIAlpZiAodW5saWtlbHkoIXNjaGVkX2Nsb2NrX3J1bm5pbmcpKQogCQlyZXR1cm47CiAKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAKKwlzY2QgPSB0aGlzX3NjZCgpOwogCW5vd19ndG9kID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwogCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CiAKQEAgLTI1MCw3ICsyNTQsNyBAQAogCXJldHVybiBzY2hlZF9jbG9jaygpOwogfQogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyAqLwogCiB1bnNpZ25lZCBsb25nIGxvbmcgY3B1X2Nsb2NrKGludCBjcHUpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZGVidWcuYyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCmluZGV4IDE2ZWViYTRlLi40NjdjYTcyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZGVidWcuYworKysgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwpAQCAtMjcyLDcgKzI3Miw2IEBACiAJUChucl9zd2l0Y2hlcyk7CiAJUChucl9sb2FkX3VwZGF0ZXMpOwogCVAobnJfdW5pbnRlcnJ1cHRpYmxlKTsKLQlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWx1XG4iLCAiamlmZmllcyIsIGppZmZpZXMpOwogCVBOKG5leHRfYmFsYW5jZSk7CiAJUChjdXJyLT5waWQpOwogCVBOKGNsb2NrKTsKQEAgLTI4Nyw5ICsyODYsNiBAQAogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAjZGVmaW5lIFAobikgU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVkXG4iLCAjbiwgcnEtPm4pOwogCi0JUCh5bGRfZXhwX2VtcHR5KTsKLQlQKHlsZF9hY3RfZW1wdHkpOwotCVAoeWxkX2JvdGhfZW1wdHkpOwogCVAoeWxkX2NvdW50KTsKIAogCVAoc2NoZWRfc3dpdGNoKTsKQEAgLTMxNCw3ICszMTAsNyBAQAogCXU2NCBub3cgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CiAJaW50IGNwdTsKIAotCVNFUV9wcmludGYobSwgIlNjaGVkIERlYnVnIFZlcnNpb246IHYwLjA4LCAlcyAlLipzXG4iLAorCVNFUV9wcmludGYobSwgIlNjaGVkIERlYnVnIFZlcnNpb246IHYwLjA5LCAlcyAlLipzXG4iLAogCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAogCQlpbml0X3V0c25hbWUoKS0+dmVyc2lvbik7CkBAIC0zMjUsNiArMzIxLDcgQEAKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTQwczogJUxkXG4iLCAjeCwgKGxvbmcgbG9uZykoeCkpCiAjZGVmaW5lIFBOKHgpIFwKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTQwczogJUxkLiUwNmxkXG4iLCAjeCwgU1BMSVRfTlMoeCkpCisJUChqaWZmaWVzKTsKIAlQTihzeXNjdGxfc2NoZWRfbGF0ZW5jeSk7CiAJUE4oc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSk7CiAJUE4oc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7CkBAIC0zOTcsNiArMzk0LDcgQEAKIAlQTihzZS52cnVudGltZSk7CiAJUE4oc2Uuc3VtX2V4ZWNfcnVudGltZSk7CiAJUE4oc2UuYXZnX292ZXJsYXApOworCVBOKHNlLmF2Z193YWtldXApOwogCiAJbnJfc3dpdGNoZXMgPSBwLT5udmNzdyArIHAtPm5pdmNzdzsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggMDU2NmYyYS4uMzgxNmYyMSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC0xMzE0LDE2ICsxMzE0LDYzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3YWtldXBfZ3JhbihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKKy8qCisgKiBBZGFwdGl2ZSBncmFudWxhcml0eQorICoKKyAqIHNlLT5hdmdfd2FrZXVwIGdpdmVzIHRoZSBhdmVyYWdlIHRpbWUgYSB0YXNrIHJ1bnMgdW50aWwgaXQgZG9lcyBhIHdha2V1cCwKKyAqIHdpdGggdGhlIGxpbWl0IG9mIHdha2V1cF9ncmFuIC0tIHdoZW4gaXQgbmV2ZXIgZG9lcyBhIHdha2V1cC4KKyAqCisgKiBTbyB0aGUgc21hbGxlciBhdmdfd2FrZXVwIGlzIHRoZSBmYXN0ZXIgd2Ugd2FudCB0aGlzIHRhc2sgdG8gcHJlZW1wdCwKKyAqIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHRyZWF0IHRoZSBwcmVlbXB0ZWUgdW5mYWlybHkgYW5kIHRoZXJlZm9yZSBhbGxvdyBpdAorICogdG8gcnVuIGZvciBhdCBsZWFzdCB0aGUgYW1vdW50IG9mIHRpbWUgd2UnZCBsaWtlIHRvIHJ1bi4KKyAqCisgKiBOT1RFOiB3ZSB1c2UgMiphdmdfd2FrZXVwIHRvIGluY3JlYXNlIHRoZSBwcm9iYWJpbGl0eSBvZiBhY3R1YWxseSBkb2luZyBvbmUKKyAqCisgKiBOT1RFOiB3ZSB1c2UgKm5yX3J1bm5pbmcgdG8gc2NhbGUgd2l0aCBsb2FkLCB0aGlzIG5pY2VseSBtYXRjaGVzIHRoZQorICogICAgICAgZGVncmFkaW5nIGxhdGVuY3kgb24gbG9hZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK2FkYXB0aXZlX2dyYW4oc3RydWN0IHNjaGVkX2VudGl0eSAqY3Vyciwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCit7CisJdTY0IHRoaXNfcnVuID0gY3Vyci0+c3VtX2V4ZWNfcnVudGltZSAtIGN1cnItPnByZXZfc3VtX2V4ZWNfcnVudGltZTsKKwl1NjQgZXhwZWN0ZWRfd2FrZXVwID0gMipzZS0+YXZnX3dha2V1cCAqIGNmc19ycV9vZihzZSktPm5yX3J1bm5pbmc7CisJdTY0IGdyYW4gPSAwOworCisJaWYgKHRoaXNfcnVuIDwgZXhwZWN0ZWRfd2FrZXVwKQorCQlncmFuID0gZXhwZWN0ZWRfd2FrZXVwIC0gdGhpc19ydW47CisKKwlyZXR1cm4gbWluX3QoczY0LCBncmFuLCBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3dha2V1cF9ncmFuKHN0cnVjdCBzY2hlZF9lbnRpdHkgKmN1cnIsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewogCXVuc2lnbmVkIGxvbmcgZ3JhbiA9IHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHk7CiAKKwlpZiAoY2ZzX3JxX29mKGN1cnIpLT5jdXJyICYmIHNjaGVkX2ZlYXQoQURBUFRJVkVfR1JBTikpCisJCWdyYW4gPSBhZGFwdGl2ZV9ncmFuKGN1cnIsIHNlKTsKKwogCS8qCi0JICogTW9yZSBlYXNpbHkgcHJlZW1wdCAtIG5pY2UgdGFza3MsIHdoaWxlIG5vdCBtYWtpbmcgaXQgaGFyZGVyIGZvcgotCSAqICsgbmljZSB0YXNrcy4KKwkgKiBTaW5jZSBpdHMgY3VyciBydW5uaW5nIG5vdywgY29udmVydCB0aGUgZ3JhbiBmcm9tIHJlYWwtdGltZQorCSAqIHRvIHZpcnR1YWwtdGltZSBpbiBoaXMgdW5pdHMuCiAJICovCi0JaWYgKCFzY2hlZF9mZWF0KEFTWU1fR1JBTikgfHwgc2UtPmxvYWQud2VpZ2h0ID4gTklDRV8wX0xPQUQpCi0JCWdyYW4gPSBjYWxjX2RlbHRhX2ZhaXIoc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSwgc2UpOworCWlmIChzY2hlZF9mZWF0KEFTWU1fR1JBTikpIHsKKwkJLyoKKwkJICogQnkgdXNpbmcgJ3NlJyBpbnN0ZWFkIG9mICdjdXJyJyB3ZSBwZW5hbGl6ZSBsaWdodCB0YXNrcywgc28KKwkJICogdGhleSBnZXQgcHJlZW1wdGVkIGVhc2llci4gVGhhdCBpcywgaWYgJ3NlJyA8ICdjdXJyJyB0aGVuCisJCSAqIHRoZSByZXN1bHRpbmcgZ3JhbiB3aWxsIGJlIGxhcmdlciwgdGhlcmVmb3JlIHBlbmFsaXppbmcgdGhlCisJCSAqIGxpZ2h0ZXIsIGlmIG90b2ggJ3NlJyA+ICdjdXJyJyB0aGVuIHRoZSByZXN1bHRpbmcgZ3JhbiB3aWxsCisJCSAqIGJlIHNtYWxsZXIsIGFnYWluIHBlbmFsaXppbmcgdGhlIGxpZ2h0ZXIgdGFzay4KKwkJICoKKwkJICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgYnVkZGllcyB3aGVuIHRoZSBsZWZ0bW9zdAorCQkgKiB0YXNrIGlzIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSBidWRkeS4KKwkJICovCisJCWlmICh1bmxpa2VseShzZS0+bG9hZC53ZWlnaHQgIT0gTklDRV8wX0xPQUQpKQorCQkJZ3JhbiA9IGNhbGNfZGVsdGFfZmFpcihncmFuLCBzZSk7CisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KGN1cnItPmxvYWQud2VpZ2h0ICE9IE5JQ0VfMF9MT0FEKSkKKwkJCWdyYW4gPSBjYWxjX2RlbHRhX2ZhaXIoZ3JhbiwgY3Vycik7CisJfQogCiAJcmV0dXJuIGdyYW47CiB9CkBAIC0xMzUwLDcgKzEzOTcsNyBAQAogCWlmICh2ZGlmZiA8PSAwKQogCQlyZXR1cm4gLTE7CiAKLQlncmFuID0gd2FrZXVwX2dyYW4oY3Vycik7CisJZ3JhbiA9IHdha2V1cF9ncmFuKGN1cnIsIHNlKTsKIAlpZiAodmRpZmYgPiBncmFuKQogCQlyZXR1cm4gMTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmggYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAppbmRleCBkYTVkOTNiLi43NmY2MTc1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAorKysgYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaApAQCAtMSw1ICsxLDYgQEAKIFNDSEVEX0ZFQVQoTkVXX0ZBSVJfU0xFRVBFUlMsIDEpCi1TQ0hFRF9GRUFUKE5PUk1BTElaRURfU0xFRVBFUiwgMSkKK1NDSEVEX0ZFQVQoTk9STUFMSVpFRF9TTEVFUEVSLCAwKQorU0NIRURfRkVBVChBREFQVElWRV9HUkFOLCAxKQogU0NIRURfRkVBVChXQUtFVVBfUFJFRU1QVCwgMSkKIFNDSEVEX0ZFQVQoU1RBUlRfREVCSVQsIDEpCiBTQ0hFRF9GRUFUKEFGRklORV9XQUtFVVBTLCAxKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBiYWMxMDYxLi5jNzlkYzc4NCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTMsNiArMyw0MCBAQAogICogcG9saWNpZXMpCiAgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJcmV0dXJuIHJ0X3JxLT5ycTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXJldHVybiBydF9zZS0+cnRfcnE7Cit9CisKKyNlbHNlIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3JxLCBzdHJ1Y3QgcnEsIHJ0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJ0X3Rhc2tfb2YocnRfc2UpOworCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOworCisJcmV0dXJuICZycS0+cnQ7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKwogI2lmZGVmIENPTkZJR19TTVAKIAogc3RhdGljIGlubGluZSBpbnQgcnRfb3ZlcmxvYWRlZChzdHJ1Y3QgcnEgKnJxKQpAQCAtMzcsMjUgKzcxLDY5IEBACiAJY3B1bWFza19jbGVhcl9jcHUocnEtPmNwdSwgcnEtPnJkLT5ydG9fbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9ydF9taWdyYXRpb24oc3RydWN0IHJxICpycSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9ydF9taWdyYXRpb24oc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlpZiAocnEtPnJ0LnJ0X25yX21pZ3JhdG9yeSAmJiAocnEtPnJ0LnJ0X25yX3J1bm5pbmcgPiAxKSkgewotCQlpZiAoIXJxLT5ydC5vdmVybG9hZGVkKSB7Ci0JCQlydF9zZXRfb3ZlcmxvYWQocnEpOwotCQkJcnEtPnJ0Lm92ZXJsb2FkZWQgPSAxOworCWlmIChydF9ycS0+cnRfbnJfbWlncmF0b3J5ICYmIChydF9ycS0+cnRfbnJfcnVubmluZyA+IDEpKSB7CisJCWlmICghcnRfcnEtPm92ZXJsb2FkZWQpIHsKKwkJCXJ0X3NldF9vdmVybG9hZChycV9vZl9ydF9ycShydF9ycSkpOworCQkJcnRfcnEtPm92ZXJsb2FkZWQgPSAxOwogCQl9Ci0JfSBlbHNlIGlmIChycS0+cnQub3ZlcmxvYWRlZCkgewotCQlydF9jbGVhcl9vdmVybG9hZChycSk7Ci0JCXJxLT5ydC5vdmVybG9hZGVkID0gMDsKKwl9IGVsc2UgaWYgKHJ0X3JxLT5vdmVybG9hZGVkKSB7CisJCXJ0X2NsZWFyX292ZXJsb2FkKHJxX29mX3J0X3JxKHJ0X3JxKSk7CisJCXJ0X3JxLT5vdmVybG9hZGVkID0gMDsKIAl9CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3N0YXRpYyB2b2lkIGluY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7CisJaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQlydF9ycS0+cnRfbnJfbWlncmF0b3J5Kys7CisKKwl1cGRhdGVfcnRfbWlncmF0aW9uKHJ0X3JxKTsKIH0KIAorc3RhdGljIHZvaWQgZGVjX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCXJ0X3JxLT5ydF9ucl9taWdyYXRvcnktLTsKKworCXVwZGF0ZV9ydF9taWdyYXRpb24ocnRfcnEpOworfQorCitzdGF0aWMgdm9pZCBlbnF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXBsaXN0X2RlbCgmcC0+cHVzaGFibGVfdGFza3MsICZycS0+cnQucHVzaGFibGVfdGFza3MpOworCXBsaXN0X25vZGVfaW5pdCgmcC0+cHVzaGFibGVfdGFza3MsIHAtPnByaW8pOworCXBsaXN0X2FkZCgmcC0+cHVzaGFibGVfdGFza3MsICZycS0+cnQucHVzaGFibGVfdGFza3MpOworfQorCitzdGF0aWMgdm9pZCBkZXF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXBsaXN0X2RlbCgmcC0+cHVzaGFibGVfdGFza3MsICZycS0+cnQucHVzaGFibGVfdGFza3MpOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlcXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgaW5jX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKK30KKworc3RhdGljIGlubGluZQordm9pZCBkZWNfcnRfbWlncmF0aW9uKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCiBzdGF0aWMgaW5saW5lIGludCBvbl9ydF9ycShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHsKIAlyZXR1cm4gIWxpc3RfZW1wdHkoJnJ0X3NlLT5ydW5fbGlzdCk7CkBAIC03OSwxNiArMTU3LDYgQEAKICNkZWZpbmUgZm9yX2VhY2hfbGVhZl9ydF9ycShydF9ycSwgcnEpIFwKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShydF9ycSwgJnJxLT5sZWFmX3J0X3JxX2xpc3QsIGxlYWZfcnRfcnFfbGlzdCkKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCi17Ci0JcmV0dXJuIHJ0X3JxLT5ycTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQotewotCXJldHVybiBydF9zZS0+cnRfcnE7Ci19Ci0KICNkZWZpbmUgZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSBcCiAJZm9yICg7IHJ0X3NlOyBydF9zZSA9IHJ0X3NlLT5wYXJlbnQpCiAKQEAgLTEwOCw3ICsxNzYsNyBAQAogCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgewogCQlpZiAocnRfc2UgJiYgIW9uX3J0X3JxKHJ0X3NlKSkKIAkJCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKLQkJaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8gPCBjdXJyLT5wcmlvKQorCQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyIDwgY3Vyci0+cHJpbykKIAkJCXJlc2NoZWRfdGFzayhjdXJyKTsKIAl9CiB9CkBAIC0xNzYsMTkgKzI0NCw2IEBACiAjZGVmaW5lIGZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIHJxKSBcCiAJZm9yIChydF9ycSA9ICZycS0+cnQ7IHJ0X3JxOyBydF9ycSA9IE5VTEwpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQotewotCXJldHVybiBjb250YWluZXJfb2YocnRfcnEsIHN0cnVjdCBycSwgcnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcnRfdGFza19vZihydF9zZSk7Ci0Jc3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7Ci0KLQlyZXR1cm4gJnJxLT5ydDsKLX0KLQogI2RlZmluZSBmb3JfZWFjaF9zY2hlZF9ydF9lbnRpdHkocnRfc2UpIFwKIAlmb3IgKDsgcnRfc2U7IHJ0X3NlID0gTlVMTCkKIApAQCAtNDczLDcgKzUyOCw3IEBACiAJc3RydWN0IHJ0X3JxICpydF9ycSA9IGdyb3VwX3J0X3JxKHJ0X3NlKTsKIAogCWlmIChydF9ycSkKLQkJcmV0dXJuIHJ0X3JxLT5oaWdoZXN0X3ByaW87CisJCXJldHVybiBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CiAjZW5kaWYKIAogCXJldHVybiBydF90YXNrX29mKHJ0X3NlKS0+cHJpbzsKQEAgLTU0Nyw5MSArNjAyLDE3NCBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZQotdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCisjaWYgZGVmaW5lZCBDT05GSUdfU01QCisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQoc3RydWN0IHJxICpycSwgaW50IGNwdSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5leHRfcHJpbyhzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT04oIXJ0X3ByaW8ocnRfc2VfcHJpbyhydF9zZSkpKTsKLQlydF9ycS0+cnRfbnJfcnVubmluZysrOwotI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWlmIChydF9zZV9wcmlvKHJ0X3NlKSA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8pIHsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7Ci0jZW5kaWYKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQgPSBwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHJxLCBycS0+Y3B1KTsKIAotCQlydF9ycS0+aGlnaGVzdF9wcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7Ci0jaWZkZWYgQ09ORklHX1NNUAorCWlmIChuZXh0ICYmIHJ0X3ByaW8obmV4dC0+cHJpbykpCisJCXJldHVybiBuZXh0LT5wcmlvOworCWVsc2UKKwkJcmV0dXJuIE1BWF9SVF9QUklPOworfQorCitzdGF0aWMgdm9pZAoraW5jX3J0X3ByaW9fc21wKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvLCBpbnQgcHJldl9wcmlvKQoreworCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7CisKKwlpZiAocHJpbyA8IHByZXZfcHJpbykgeworCisJCS8qCisJCSAqIElmIHRoZSBuZXcgdGFzayBpcyBoaWdoZXIgaW4gcHJpb3JpdHkgdGhhbiBhbnl0aGluZyBvbiB0aGUKKwkJICogcnVuLXF1ZXVlLCB3ZSBrbm93IHRoYXQgdGhlIHByZXZpb3VzIGhpZ2ggYmVjb21lcyBvdXIKKwkJICogbmV4dC1oaWdoZXN0LgorCQkgKi8KKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gcHJldl9wcmlvOworCiAJCWlmIChycS0+b25saW5lKQotCQkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsCi0JCQkJICAgcnRfc2VfcHJpbyhydF9zZSkpOwotI2VuZGlmCi0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChydF9zZS0+bnJfY3B1c19hbGxvd2VkID4gMSkgewotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCQkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHByaW8pOwogCi0JCXJxLT5ydC5ydF9ucl9taWdyYXRvcnkrKzsKLQl9CisJfSBlbHNlIGlmIChwcmlvID09IHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VycikKKwkJLyoKKwkJICogSWYgdGhlIG5leHQgdGFzayBpcyBlcXVhbCBpbiBwcmlvcml0eSB0byB0aGUgaGlnaGVzdCBvbgorCQkgKiB0aGUgcnVuLXF1ZXVlLCB0aGVuIHdlIGltcGxpY2l0bHkga25vdyB0aGF0IHRoZSBuZXh0IGhpZ2hlc3QKKwkJICogdGFzayBjYW5ub3QgYmUgYW55IGxvd2VyIHRoYW4gY3VycmVudAorCQkgKi8KKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gcHJpbzsKKwllbHNlIGlmIChwcmlvIDwgcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0KQorCQkvKgorCQkgKiBPdGhlcndpc2UsIHdlIG5lZWQgdG8gcmVjb21wdXRlIG5leHQtaGlnaGVzdAorCQkgKi8KKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5uZXh0ID0gbmV4dF9wcmlvKHJxKTsKK30KIAotCXVwZGF0ZV9ydF9taWdyYXRpb24ocnFfb2ZfcnRfcnEocnRfcnEpKTsKLSNlbmRpZgorc3RhdGljIHZvaWQKK2RlY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCisJaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nICYmIChwcmlvIDw9IHJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCkpCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IG5leHRfcHJpbyhycSk7CisKKwlpZiAocnEtPm9ubGluZSAmJiBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgIT0gcHJldl9wcmlvKQorCQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykge30KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZGVjX3J0X3ByaW9fc21wKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvLCBpbnQgcHJldl9wcmlvKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECitzdGF0aWMgdm9pZAoraW5jX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCit7CisJaW50IHByZXZfcHJpbyA9IHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VycjsKKworCWlmIChwcmlvIDwgcHJldl9wcmlvKQorCQlydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPSBwcmlvOworCisJaW5jX3J0X3ByaW9fc21wKHJ0X3JxLCBwcmlvLCBwcmV2X3ByaW8pOworfQorCitzdGF0aWMgdm9pZAorZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCit7CisJaW50IHByZXZfcHJpbyA9IHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VycjsKKworCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgeworCisJCVdBUk5fT04ocHJpbyA8IHByZXZfcHJpbyk7CisKKwkJLyoKKwkJICogVGhpcyBtYXkgaGF2ZSBiZWVuIG91ciBoaWdoZXN0IHRhc2ssIGFuZCB0aGVyZWZvcmUKKwkJICogd2UgbWF5IGhhdmUgc29tZSByZWNvbXB1dGF0aW9uIHRvIGRvCisJCSAqLworCQlpZiAocHJpbyA9PSBwcmV2X3ByaW8pIHsKKwkJCXN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheSA9ICZydF9ycS0+YWN0aXZlOworCisJCQlydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPQorCQkJCXNjaGVkX2ZpbmRfZmlyc3RfYml0KGFycmF5LT5iaXRtYXApOworCQl9CisKKwl9IGVsc2UKKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gTUFYX1JUX1BSSU87CisKKwlkZWNfcnRfcHJpb19zbXAocnRfcnEsIHByaW8sIHByZXZfcHJpbyk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbykge30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgfHwgQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKKworc3RhdGljIHZvaWQKK2luY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKIAlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCiAJCXJ0X3JxLT5ydF9ucl9ib29zdGVkKys7CiAKIAlpZiAocnRfcnEtPnRnKQogCQlzdGFydF9ydF9iYW5kd2lkdGgoJnJ0X3JxLT50Zy0+cnRfYmFuZHdpZHRoKTsKLSNlbHNlCit9CisKK3N0YXRpYyB2b2lkCitkZWNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQorCQlydF9ycS0+cnRfbnJfYm9vc3RlZC0tOworCisJV0FSTl9PTighcnRfcnEtPnJ0X25yX3J1bm5pbmcgJiYgcnRfcnEtPnJ0X25yX2Jvb3N0ZWQpOworfQorCisjZWxzZSAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKworc3RhdGljIHZvaWQKK2luY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKIAlzdGFydF9ydF9iYW5kd2lkdGgoJmRlZl9ydF9iYW5kd2lkdGgpOwotI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZGVjX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCWludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7CisKKwlXQVJOX09OKCFydF9wcmlvKHByaW8pKTsKKwlydF9ycS0+cnRfbnJfcnVubmluZysrOworCisJaW5jX3J0X3ByaW8ocnRfcnEsIHByaW8pOworCWluY19ydF9taWdyYXRpb24ocnRfc2UsIHJ0X3JxKTsKKwlpbmNfcnRfZ3JvdXAocnRfc2UsIHJ0X3JxKTsKIH0KIAogc3RhdGljIGlubGluZQogdm9pZCBkZWNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0jaWZkZWYgQ09ORklHX1NNUAotCWludCBoaWdoZXN0X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvOwotI2VuZGlmCi0KIAlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7CiAJV0FSTl9PTighcnRfcnEtPnJ0X25yX3J1bm5pbmcpOwogCXJ0X3JxLT5ydF9ucl9ydW5uaW5nLS07Ci0jaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nKSB7Ci0JCXN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheTsKIAotCQlXQVJOX09OKHJ0X3NlX3ByaW8ocnRfc2UpIDwgcnRfcnEtPmhpZ2hlc3RfcHJpbyk7Ci0JCWlmIChydF9zZV9wcmlvKHJ0X3NlKSA9PSBydF9ycS0+aGlnaGVzdF9wcmlvKSB7Ci0JCQkvKiByZWNhbGN1bGF0ZSAqLwotCQkJYXJyYXkgPSAmcnRfcnEtPmFjdGl2ZTsKLQkJCXJ0X3JxLT5oaWdoZXN0X3ByaW8gPQotCQkJCXNjaGVkX2ZpbmRfZmlyc3RfYml0KGFycmF5LT5iaXRtYXApOwotCQl9IC8qIG90aGVyd2lzZSBsZWF2ZSBycS0+aGlnaGVzdCBwcmlvIGFsb25lICovCi0JfSBlbHNlCi0JCXJ0X3JxLT5oaWdoZXN0X3ByaW8gPSBNQVhfUlRfUFJJTzsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKLQkJcnEtPnJ0LnJ0X25yX21pZ3JhdG9yeS0tOwotCX0KLQotCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvICE9IGhpZ2hlc3RfcHJpbykgewotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOwotCi0JCWlmIChycS0+b25saW5lKQotCQkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsCi0JCQkJICAgcnRfcnEtPmhpZ2hlc3RfcHJpbyk7Ci0JfQotCi0JdXBkYXRlX3J0X21pZ3JhdGlvbihycV9vZl9ydF9ycShydF9ycSkpOwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCi0JCXJ0X3JxLT5ydF9ucl9ib29zdGVkLS07Ci0KLQlXQVJOX09OKCFydF9ycS0+cnRfbnJfcnVubmluZyAmJiBydF9ycS0+cnRfbnJfYm9vc3RlZCk7Ci0jZW5kaWYKKwlkZWNfcnRfcHJpbyhydF9ycSwgcnRfc2VfcHJpbyhydF9zZSkpOworCWRlY19ydF9taWdyYXRpb24ocnRfc2UsIHJ0X3JxKTsKKwlkZWNfcnRfZ3JvdXAocnRfc2UsIHJ0X3JxKTsKIH0KIAogc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKQEAgLTcxOCw2ICs4NTYsOSBAQAogCiAJZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UpOwogCisJaWYgKCF0YXNrX2N1cnJlbnQocnEsIHApICYmIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlpbmNfY3B1X2xvYWQocnEsIHAtPnNlLmxvYWQud2VpZ2h0KTsKIH0KIApAQCAtNzI4LDYgKzg2OSw4IEBACiAJdXBkYXRlX2N1cnJfcnQocnEpOwogCWRlcXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKIAorCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlkZWNfY3B1X2xvYWQocnEsIHAtPnNlLmxvYWQud2VpZ2h0KTsKIH0KIApAQCAtODc4LDcgKzEwMjEsNyBAQAogCXJldHVybiBuZXh0OwogfQogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqX3BpY2tfbmV4dF90YXNrX3J0KHN0cnVjdCBycSAqcnEpCiB7CiAJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtOTAwLDYgKzEwNDMsMTggQEAKIAogCXAgPSBydF90YXNrX29mKHJ0X3NlKTsKIAlwLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOworCisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF90YXNrX3J0KHN0cnVjdCBycSAqcnEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gX3BpY2tfbmV4dF90YXNrX3J0KHJxKTsKKworCS8qIFRoZSBydW5uaW5nIHRhc2sgaXMgbmV2ZXIgZWxpZ2libGUgZm9yIHB1c2hpbmcgKi8KKwlpZiAocCkKKwkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKwogCXJldHVybiBwOwogfQogCkBAIC05MDcsNiArMTA2MiwxMyBAQAogewogCXVwZGF0ZV9jdXJyX3J0KHJxKTsKIAlwLT5zZS5leGVjX3N0YXJ0ID0gMDsKKworCS8qCisJICogVGhlIHByZXZpb3VzIHRhc2sgbmVlZHMgdG8gYmUgbWFkZSBlbGlnaWJsZSBmb3IgcHVzaGluZworCSAqIGlmIGl0IGlzIHN0aWxsIGFjdGl2ZQorCSAqLworCWlmIChwLT5zZS5vbl9ycSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTA3Miw3ICsxMjM0LDcgQEAKIAkJfQogCiAJCS8qIElmIHRoaXMgcnEgaXMgc3RpbGwgc3VpdGFibGUgdXNlIGl0LiAqLwotCQlpZiAobG93ZXN0X3JxLT5ydC5oaWdoZXN0X3ByaW8gPiB0YXNrLT5wcmlvKQorCQlpZiAobG93ZXN0X3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VyciA+IHRhc2stPnByaW8pCiAJCQlicmVhazsKIAogCQkvKiB0cnkgYWdhaW4gKi8KQEAgLTEwODMsNiArMTI0NSwzMSBAQAogCXJldHVybiBsb3dlc3RfcnE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGhhc19wdXNoYWJsZV90YXNrcyhzdHJ1Y3QgcnEgKnJxKQoreworCXJldHVybiAhcGxpc3RfaGVhZF9lbXB0eSgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlpZiAoIWhhc19wdXNoYWJsZV90YXNrcyhycSkpCisJCXJldHVybiBOVUxMOworCisJcCA9IHBsaXN0X2ZpcnN0X2VudHJ5KCZycS0+cnQucHVzaGFibGVfdGFza3MsCisJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHB1c2hhYmxlX3Rhc2tzKTsKKworCUJVR19PTihycS0+Y3B1ICE9IHRhc2tfY3B1KHApKTsKKwlCVUdfT04odGFza19jdXJyZW50KHJxLCBwKSk7CisJQlVHX09OKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA8PSAxKTsKKworCUJVR19PTighcC0+c2Uub25fcnEpOworCUJVR19PTighcnRfdGFzayhwKSk7CisKKwlyZXR1cm4gcDsKK30KKwogLyoKICAqIElmIHRoZSBjdXJyZW50IENQVSBoYXMgbW9yZSB0aGFuIG9uZSBSVCB0YXNrLCBzZWUgaWYgdGhlIG5vbgogICogcnVubmluZyB0YXNrIGNhbiBtaWdyYXRlIG92ZXIgdG8gYSBDUFUgdGhhdCBpcyBydW5uaW5nIGEgdGFzawpAQCAtMTA5MiwxMyArMTI3OSwxMSBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF90YXNrOwogCXN0cnVjdCBycSAqbG93ZXN0X3JxOwotCWludCByZXQgPSAwOwotCWludCBwYXJhbm9pZCA9IFJUX01BWF9UUklFUzsKIAogCWlmICghcnEtPnJ0Lm92ZXJsb2FkZWQpCiAJCXJldHVybiAwOwogCi0JbmV4dF90YXNrID0gcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChycSwgLTEpOworCW5leHRfdGFzayA9IHBpY2tfbmV4dF9wdXNoYWJsZV90YXNrKHJxKTsKIAlpZiAoIW5leHRfdGFzaykKIAkJcmV0dXJuIDA7CiAKQEAgLTExMjcsMTYgKzEzMTIsMzQgQEAKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCQkvKgogCQkgKiBmaW5kIGxvY2tfbG93ZXN0X3JxIHJlbGVhc2VzIHJxLT5sb2NrCi0JCSAqIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgbmV4dF90YXNrIGhhcyBjaGFuZ2VkLgotCQkgKiBJZiBpdCBoYXMsIHRoZW4gdHJ5IGFnYWluLgorCQkgKiBzbyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5leHRfdGFzayBoYXMgbWlncmF0ZWQuCisJCSAqCisJCSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRhc2sgaXMgc3RpbGwgb24gdGhlIHNhbWUKKwkJICogcnVuLXF1ZXVlIGFuZCBpcyBhbHNvIHN0aWxsIHRoZSBuZXh0IHRhc2sgZWxpZ2libGUgZm9yCisJCSAqIHB1c2hpbmcuCiAJCSAqLwotCQl0YXNrID0gcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChycSwgLTEpOwotCQlpZiAodW5saWtlbHkodGFzayAhPSBuZXh0X3Rhc2spICYmIHRhc2sgJiYgcGFyYW5vaWQtLSkgewotCQkJcHV0X3Rhc2tfc3RydWN0KG5leHRfdGFzayk7Ci0JCQluZXh0X3Rhc2sgPSB0YXNrOwotCQkJZ290byByZXRyeTsKKwkJdGFzayA9IHBpY2tfbmV4dF9wdXNoYWJsZV90YXNrKHJxKTsKKwkJaWYgKHRhc2tfY3B1KG5leHRfdGFzaykgPT0gcnEtPmNwdSAmJiB0YXNrID09IG5leHRfdGFzaykgeworCQkJLyoKKwkJCSAqIElmIHdlIGdldCBoZXJlLCB0aGUgdGFzayBoYXNudCBtb3ZlZCBhdCBhbGwsIGJ1dAorCQkJICogaXQgaGFzIGZhaWxlZCB0byBwdXNoLiAgV2Ugd2lsbCBub3QgdHJ5IGFnYWluLAorCQkJICogc2luY2UgdGhlIG90aGVyIGNwdXMgd2lsbCBwdWxsIGZyb20gdXMgd2hlbiB0aGV5CisJCQkgKiBhcmUgcmVhZHkuCisJCQkgKi8KKwkJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgbmV4dF90YXNrKTsKKwkJCWdvdG8gb3V0OwogCQl9Ci0JCWdvdG8gb3V0OworCisJCWlmICghdGFzaykKKwkJCS8qIE5vIG1vcmUgdGFza3MsIGp1c3QgZXhpdCAqLworCQkJZ290byBvdXQ7CisKKwkJLyoKKwkJICogU29tZXRoaW5nIGhhcyBzaGlmdGVkLCB0cnkgYWdhaW4uCisJCSAqLworCQlwdXRfdGFza19zdHJ1Y3QobmV4dF90YXNrKTsKKwkJbmV4dF90YXNrID0gdGFzazsKKwkJZ290byByZXRyeTsKIAl9CiAKIAlkZWFjdGl2YXRlX3Rhc2socnEsIG5leHRfdGFzaywgMCk7CkBAIC0xMTQ3LDIzICsxMzUwLDEyIEBACiAKIAlkb3VibGVfdW5sb2NrX2JhbGFuY2UocnEsIGxvd2VzdF9ycSk7CiAKLQlyZXQgPSAxOwogb3V0OgogCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIFRPRE86IEN1cnJlbnRseSB3ZSBqdXN0IHVzZSB0aGUgc2Vjb25kIGhpZ2hlc3QgcHJpbyB0YXNrIG9uCi0gKiAgICAgICB0aGUgcXVldWUsIGFuZCBzdG9wIHdoZW4gaXQgY2FuJ3QgbWlncmF0ZSAob3IgdGhlcmUncwotICogICAgICAgbm8gbW9yZSBSVCB0YXNrcykuICBUaGVyZSBtYXkgYmUgYSBjYXNlIHdoZXJlIGEgbG93ZXIKLSAqICAgICAgIHByaW9yaXR5IFJUIHRhc2sgaGFzIGEgZGlmZmVyZW50IGFmZmluaXR5IHRoYW4gdGhlCi0gKiAgICAgICBoaWdoZXIgUlQgdGFzay4gSW4gdGhpcyBjYXNlIHRoZSBsb3dlciBSVCB0YXNrIGNvdWxkCi0gKiAgICAgICBwb3NzaWJseSBiZSBhYmxlIHRvIG1pZ3JhdGUgd2hlcmUgYXMgdGhlIGhpZ2hlciBwcmlvcml0eQotICogICAgICAgUlQgdGFzayBjb3VsZCBub3QuICBXZSBjdXJyZW50bHkgaWdub3JlIHRoaXMgaXNzdWUuCi0gKiAgICAgICBFbmhhbmNlbWVudHMgYXJlIHdlbGNvbWUhCi0gKi8KIHN0YXRpYyB2b2lkIHB1c2hfcnRfdGFza3Moc3RydWN0IHJxICpycSkKIHsKIAkvKiBwdXNoX3J0X3Rhc2sgd2lsbCByZXR1cm4gdHJ1ZSBpZiBpdCBtb3ZlZCBhbiBSVCAqLwpAQCAtMTE3NCwzMyArMTM2NiwzNSBAQAogc3RhdGljIGludCBwdWxsX3J0X3Rhc2soc3RydWN0IHJxICp0aGlzX3JxKQogewogCWludCB0aGlzX2NwdSA9IHRoaXNfcnEtPmNwdSwgcmV0ID0gMCwgY3B1OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm5leHQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCBycSAqc3JjX3JxOwogCiAJaWYgKGxpa2VseSghcnRfb3ZlcmxvYWRlZCh0aGlzX3JxKSkpCiAJCXJldHVybiAwOwogCi0JbmV4dCA9IHBpY2tfbmV4dF90YXNrX3J0KHRoaXNfcnEpOwotCiAJZm9yX2VhY2hfY3B1KGNwdSwgdGhpc19ycS0+cmQtPnJ0b19tYXNrKSB7CiAJCWlmICh0aGlzX2NwdSA9PSBjcHUpCiAJCQljb250aW51ZTsKIAogCQlzcmNfcnEgPSBjcHVfcnEoY3B1KTsKKworCQkvKgorCQkgKiBEb24ndCBib3RoZXIgdGFraW5nIHRoZSBzcmNfcnEtPmxvY2sgaWYgdGhlIG5leHQgaGlnaGVzdAorCQkgKiB0YXNrIGlzIGtub3duIHRvIGJlIGxvd2VyLXByaW9yaXR5IHRoYW4gb3VyIGN1cnJlbnQgdGFzay4KKwkJICogVGhpcyBtYXkgbG9vayByYWN5LCBidXQgaWYgdGhpcyB2YWx1ZSBpcyBhYm91dCB0byBnbworCQkgKiBsb2dpY2FsbHkgaGlnaGVyLCB0aGUgc3JjX3JxIHdpbGwgcHVzaCB0aGlzIHRhc2sgYXdheS4KKwkJICogQW5kIGlmIGl0cyBnb2luZyBsb2dpY2FsbHkgbG93ZXIsIHdlIGRvIG5vdCBjYXJlCisJCSAqLworCQlpZiAoc3JjX3JxLT5ydC5oaWdoZXN0X3ByaW8ubmV4dCA+PQorCQkgICAgdGhpc19ycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIpCisJCQljb250aW51ZTsKKwogCQkvKgogCQkgKiBXZSBjYW4gcG90ZW50aWFsbHkgZHJvcCB0aGlzX3JxJ3MgbG9jayBpbgogCQkgKiBkb3VibGVfbG9ja19iYWxhbmNlLCBhbmQgYW5vdGhlciBDUFUgY291bGQKLQkJICogc3RlYWwgb3VyIG5leHQgdGFzayAtIGhlbmNlIHdlIG11c3QgY2F1c2UKLQkJICogdGhlIGNhbGxlciB0byByZWNhbGN1bGF0ZSB0aGUgbmV4dCB0YXNrCi0JCSAqIGluIHRoYXQgY2FzZToKKwkJICogYWx0ZXIgdGhpc19ycQogCQkgKi8KLQkJaWYgKGRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgc3JjX3JxKSkgewotCQkJc3RydWN0IHRhc2tfc3RydWN0ICpvbGRfbmV4dCA9IG5leHQ7Ci0KLQkJCW5leHQgPSBwaWNrX25leHRfdGFza19ydCh0aGlzX3JxKTsKLQkJCWlmIChuZXh0ICE9IG9sZF9uZXh0KQotCQkJCXJldCA9IDE7Ci0JCX0KKwkJZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBzcmNfcnEpOwogCiAJCS8qCiAJCSAqIEFyZSB0aGVyZSBzdGlsbCBwdWxsYWJsZSBSVCB0YXNrcz8KQEAgLTEyMTQsNyArMTQwOCw3IEBACiAJCSAqIERvIHdlIGhhdmUgYW4gUlQgdGFzayB0aGF0IHByZWVtcHRzCiAJCSAqIHRoZSB0by1iZS1zY2hlZHVsZWQgdGFzaz8KIAkJICovCi0JCWlmIChwICYmICghbmV4dCB8fCAocC0+cHJpbyA8IG5leHQtPnByaW8pKSkgeworCQlpZiAocCAmJiAocC0+cHJpbyA8IHRoaXNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKSkgewogCQkJV0FSTl9PTihwID09IHNyY19ycS0+Y3Vycik7CiAJCQlXQVJOX09OKCFwLT5zZS5vbl9ycSk7CiAKQEAgLTEyMjQsMTIgKzE0MTgsOSBAQAogCQkJICogVGhpcyBpcyBqdXN0IHRoYXQgcCBpcyB3YWtlaW5nIHVwIGFuZCBoYXNuJ3QKIAkJCSAqIGhhZCBhIGNoYW5jZSB0byBzY2hlZHVsZS4gV2Ugb25seSBwdWxsCiAJCQkgKiBwIGlmIGl0IGlzIGxvd2VyIGluIHByaW9yaXR5IHRoYW4gdGhlCi0JCQkgKiBjdXJyZW50IHRhc2sgb24gdGhlIHJ1biBxdWV1ZSBvcgotCQkJICogdGhpc19ycSBuZXh0IHRhc2sgaXMgbG93ZXIgaW4gcHJpbyB0aGFuCi0JCQkgKiB0aGUgY3VycmVudCB0YXNrIG9uIHRoYXQgcnEuCisJCQkgKiBjdXJyZW50IHRhc2sgb24gdGhlIHJ1biBxdWV1ZQogCQkJICovCi0JCQlpZiAocC0+cHJpbyA8IHNyY19ycS0+Y3Vyci0+cHJpbyB8fAotCQkJICAgIChuZXh0ICYmIG5leHQtPnByaW8gPCBzcmNfcnEtPmN1cnItPnByaW8pKQorCQkJaWYgKHAtPnByaW8gPCBzcmNfcnEtPmN1cnItPnByaW8pCiAJCQkJZ290byBza2lwOwogCiAJCQlyZXQgPSAxOwpAQCAtMTI0MiwxMyArMTQzMyw3IEBACiAJCQkgKiBjYXNlIHRoZXJlJ3MgYW4gZXZlbiBoaWdoZXIgcHJpbyB0YXNrCiAJCQkgKiBpbiBhbm90aGVyIHJ1bnF1ZXVlLiAobG93IGxpa2VseWhvb2QKIAkJCSAqIGJ1dCBwb3NzaWJsZSkKLQkJCSAqCi0JCQkgKiBVcGRhdGUgbmV4dCBzbyB0aGF0IHdlIHdvbid0IHBpY2sgYSB0YXNrCi0JCQkgKiBvbiBhbm90aGVyIGNwdSB3aXRoIGEgcHJpb3JpdHkgbG93ZXIgKG9yIGVxdWFsKQotCQkJICogdGhhbiB0aGUgb25lIHdlIGp1c3QgcGlja2VkLgogCQkJICovCi0JCQluZXh0ID0gcDsKLQogCQl9CiAgc2tpcDoKIAkJZG91YmxlX3VubG9ja19iYWxhbmNlKHRoaXNfcnEsIHNyY19ycSk7CkBAIC0xMjYwLDI0ICsxNDQ1LDI3IEBACiBzdGF0aWMgdm9pZCBwcmVfc2NoZWR1bGVfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogewogCS8qIFRyeSB0byBwdWxsIFJUIHRhc2tzIGhlcmUgaWYgd2UgbG93ZXIgdGhpcyBycSdzIHByaW8gKi8KLQlpZiAodW5saWtlbHkocnRfdGFzayhwcmV2KSkgJiYgcnEtPnJ0LmhpZ2hlc3RfcHJpbyA+IHByZXYtPnByaW8pCisJaWYgKHVubGlrZWx5KHJ0X3Rhc2socHJldikpICYmIHJxLT5ydC5oaWdoZXN0X3ByaW8uY3VyciA+IHByZXYtPnByaW8pCiAJCXB1bGxfcnRfdGFzayhycSk7CiB9CiAKKy8qCisgKiBhc3N1bWVzIHJxLT5sb2NrIGlzIGhlbGQKKyAqLworc3RhdGljIGludCBuZWVkc19wb3N0X3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEpCit7CisJcmV0dXJuIGhhc19wdXNoYWJsZV90YXNrcyhycSk7Cit9CisKIHN0YXRpYyB2b2lkIHBvc3Rfc2NoZWR1bGVfcnQoc3RydWN0IHJxICpycSkKIHsKIAkvKgotCSAqIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBydF90YXNrIHF1ZXVlZCwgdGhlbgotCSAqIHNlZSBpZiB3ZSBjYW4gcHVzaCB0aGUgb3RoZXIgcnRfdGFza3Mgb2ZmIHRvIG90aGVyIENQVVMuCi0JICogTm90ZSB3ZSBtYXkgcmVsZWFzZSB0aGUgcnEgbG9jaywgYW5kIHNpbmNlCi0JICogdGhlIGxvY2sgd2FzIG93bmVkIGJ5IHByZXYsIHdlIG5lZWQgdG8gcmVsZWFzZSBpdAotCSAqIGZpcnN0IHZpYSBmaW5pc2hfbG9ja19zd2l0Y2ggYW5kIHRoZW4gcmVhcXVpcmUgaXQgaGVyZS4KKwkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGlmIG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQoKSBpbmRpY2F0ZXMgdGhhdAorCSAqIHdlIG5lZWQgdG8gcHVzaCB0YXNrcyBhd2F5CiAJICovCi0JaWYgKHVubGlrZWx5KHJxLT5ydC5vdmVybG9hZGVkKSkgewotCQlzcGluX2xvY2tfaXJxKCZycS0+bG9jayk7Ci0JCXB1c2hfcnRfdGFza3MocnEpOwotCQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKLQl9CisJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOworCXB1c2hfcnRfdGFza3MocnEpOworCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogfQogCiAvKgpAQCAtMTI4OCw3ICsxNDc2LDggQEAKIHsKIAlpZiAoIXRhc2tfcnVubmluZyhycSwgcCkgJiYKIAkgICAgIXRlc3RfdHNrX25lZWRfcmVzY2hlZChycS0+Y3VycikgJiYKLQkgICAgcnEtPnJ0Lm92ZXJsb2FkZWQpCisJICAgIGhhc19wdXNoYWJsZV90YXNrcyhycSkgJiYKKwkgICAgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKIAkJcHVzaF9ydF90YXNrcyhycSk7CiB9CiAKQEAgLTEzMjQsNiArMTUxMywyNCBAQAogCWlmIChwLT5zZS5vbl9ycSAmJiAod2VpZ2h0ICE9IHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCkpIHsKIAkJc3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7CiAKKwkJaWYgKCF0YXNrX2N1cnJlbnQocnEsIHApKSB7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIHdlIGRlcXVldWUgdGhpcyB0YXNrIGZyb20gdGhlIHB1c2hhYmxlIGxpc3QKKwkJCSAqIGJlZm9yZSBnb2luZyBmdXJ0aGVyLiAgSXQgd2lsbCBlaXRoZXIgcmVtYWluIG9mZiBvZgorCQkJICogdGhlIGxpc3QgYmVjYXVzZSB3ZSBhcmUgbm8gbG9uZ2VyIHB1c2hhYmxlLCBvciBpdAorCQkJICogd2lsbCBiZSByZXF1ZXVlZC4KKwkJCSAqLworCQkJaWYgKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCQkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKworCQkJLyoKKwkJCSAqIFJlcXVldWUgaWYgb3VyIHdlaWdodCBpcyBjaGFuZ2luZyBhbmQgc3RpbGwgPiAxCisJCQkgKi8KKwkJCWlmICh3ZWlnaHQgPiAxKQorCQkJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKKwkJfQorCiAJCWlmICgocC0+cnQubnJfY3B1c19hbGxvd2VkIDw9IDEpICYmICh3ZWlnaHQgPiAxKSkgewogCQkJcnEtPnJ0LnJ0X25yX21pZ3JhdG9yeSsrOwogCQl9IGVsc2UgaWYgKChwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKSAmJiAod2VpZ2h0IDw9IDEpKSB7CkBAIC0xMzMxLDcgKzE1MzgsNyBAQAogCQkJcnEtPnJ0LnJ0X25yX21pZ3JhdG9yeS0tOwogCQl9CiAKLQkJdXBkYXRlX3J0X21pZ3JhdGlvbihycSk7CisJCXVwZGF0ZV9ydF9taWdyYXRpb24oJnJxLT5ydCk7CiAJfQogCiAJY3B1bWFza19jb3B5KCZwLT5jcHVzX2FsbG93ZWQsIG5ld19tYXNrKTsKQEAgLTEzNDYsNyArMTU1Myw3IEBACiAKIAlfX2VuYWJsZV9ydW50aW1lKHJxKTsKIAotCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBycS0+cnQuaGlnaGVzdF9wcmlvKTsKKwljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKTsKIH0KIAogLyogQXNzdW1lcyBycS0+bG9jayBpcyBoZWxkICovCkBAIC0xNDM4LDcgKzE2NDUsNyBAQAogCQkgKiBjYW4gcmVsZWFzZSB0aGUgcnEgbG9jayBhbmQgcCBjb3VsZCBtaWdyYXRlLgogCQkgKiBPbmx5IHJlc2NoZWR1bGUgaWYgcCBpcyBzdGlsbCBvbiB0aGUgc2FtZSBydW5xdWV1ZS4KIAkJICovCi0JCWlmIChwLT5wcmlvID4gcnEtPnJ0LmhpZ2hlc3RfcHJpbyAmJiBycS0+Y3VyciA9PSBwKQorCQlpZiAocC0+cHJpbyA+IHJxLT5ydC5oaWdoZXN0X3ByaW8uY3VyciAmJiBycS0+Y3VyciA9PSBwKQogCQkJcmVzY2hlZF90YXNrKHApOwogI2Vsc2UKIAkJLyogRm9yIFVQIHNpbXBseSByZXNjaGVkIG9uIGRyb3Agb2YgcHJpbyAqLwpAQCAtMTUwOSw2ICsxNzE2LDkgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBycS0+Y3VycjsKIAogCXAtPnNlLmV4ZWNfc3RhcnQgPSBycS0+Y2xvY2s7CisKKwkvKiBUaGUgcnVubmluZyB0YXNrIGlzIG5ldmVyIGVsaWdpYmxlIGZvciBwdXNoaW5nICovCisJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBydF9zY2hlZF9jbGFzcyA9IHsKQEAgLTE1MzEsNiArMTc0MSw3IEBACiAJLnJxX29ubGluZSAgICAgICAgICAgICAgPSBycV9vbmxpbmVfcnQsCiAJLnJxX29mZmxpbmUgICAgICAgICAgICAgPSBycV9vZmZsaW5lX3J0LAogCS5wcmVfc2NoZWR1bGUJCT0gcHJlX3NjaGVkdWxlX3J0LAorCS5uZWVkc19wb3N0X3NjaGVkdWxlCT0gbmVlZHNfcG9zdF9zY2hlZHVsZV9ydCwKIAkucG9zdF9zY2hlZHVsZQkJPSBwb3N0X3NjaGVkdWxlX3J0LAogCS50YXNrX3dha2VfdXAJCT0gdGFza193YWtlX3VwX3J0LAogCS5zd2l0Y2hlZF9mcm9tCQk9IHN3aXRjaGVkX2Zyb21fcnQsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfc3RhdHMuaCBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCmluZGV4IGE4ZjkzZGQuLjMyZDJiZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oCisrKyBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCkBAIC00LDcgKzQsNyBAQAogICogYnVtcCB0aGlzIHVwIHdoZW4gY2hhbmdpbmcgdGhlIG91dHB1dCBmb3JtYXQgb3IgdGhlIG1lYW5pbmcgb2YgYW4gZXhpc3RpbmcKICAqIGZvcm1hdCwgc28gdGhhdCB0b29scyBjYW4gYWRhcHQgKG9yIGFib3J0KQogICovCi0jZGVmaW5lIFNDSEVEU1RBVF9WRVJTSU9OIDE0CisjZGVmaW5lIFNDSEVEU1RBVF9WRVJTSU9OIDE1CiAKIHN0YXRpYyBpbnQgc2hvd19zY2hlZHN0YXQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CkBAIC0yNiw5ICsyNiw4IEBACiAKIAkJLyogcnVucXVldWUtc3BlY2lmaWMgc3RhdHMgKi8KIAkJc2VxX3ByaW50ZihzZXEsCi0JCSAgICAiY3B1JWQgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJWxsdSAlbGx1ICVsdSIsCi0JCSAgICBjcHUsIHJxLT55bGRfYm90aF9lbXB0eSwKLQkJICAgIHJxLT55bGRfYWN0X2VtcHR5LCBycS0+eWxkX2V4cF9lbXB0eSwgcnEtPnlsZF9jb3VudCwKKwkJICAgICJjcHUlZCAldSAldSAldSAldSAldSAldSAlbGx1ICVsbHUgJWx1IiwKKwkJICAgIGNwdSwgcnEtPnlsZF9jb3VudCwKIAkJICAgIHJxLT5zY2hlZF9zd2l0Y2gsIHJxLT5zY2hlZF9jb3VudCwgcnEtPnNjaGVkX2dvaWRsZSwKIAkJICAgIHJxLT50dHd1X2NvdW50LCBycS0+dHR3dV9sb2NhbCwKIAkJICAgIHJxLT5ycV9jcHVfdGltZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwppbmRleCBmYWZlYjQ4Li5iMzg0MjNjIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKKysrIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCkBAIC0yMTksNiArMjE5LDcgQEAKIAl7IE5FVF9JUFY0X0NPTkZfQVJQX0lHTk9SRSwJCSJhcnBfaWdub3JlIiB9LAogCXsgTkVUX0lQVjRfQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTLAkicHJvbW90ZV9zZWNvbmRhcmllcyIgfSwKIAl7IE5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVCwJCSJhcnBfYWNjZXB0IiB9LAorCXsgTkVUX0lQVjRfQ09ORl9BUlBfTk9USUZZLAkJImFycF9ub3RpZnkiIH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL01ha2VmaWxlIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKaW5kZXggOTA1YjBiNS4uMGIwYTYzNiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvTWFrZWZpbGUKKysrIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteSArPSB0aW1la2VlcGluZy5vIG50cC5vIGNsb2Nrc291cmNlLm8gamlmZmllcy5vIHRpbWVyX2xpc3Qubworb2JqLXkgKz0gdGltZWtlZXBpbmcubyBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8gdGltZWNvbXBhcmUubwogCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRCkJCSs9IGNsb2NrZXZlbnRzLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTKQkJKz0gdGljay1jb21tb24ubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKaW5kZXggZWEyZjQ4YS4uZDEzYmUyMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCkBAIC02OCw2ICs2OCwxNyBAQAogCWlmIChkZXYtPm1vZGUgIT0gbW9kZSkgewogCQlkZXYtPnNldF9tb2RlKG1vZGUsIGRldik7CiAJCWRldi0+bW9kZSA9IG1vZGU7CisKKwkJLyoKKwkJICogQSBuc2VjMmN5YyBtdWx0aXBsaWNhdG9yIG9mIDAgaXMgaW52YWxpZCBhbmQgd2UnZCBjcmFzaAorCQkgKiBvbiBpdCwgc28gZml4IGl0IHVwIGFuZCBlbWl0IGEgd2FybmluZzoKKwkJICovCisJCWlmIChtb2RlID09IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpIHsKKwkJCWlmICh1bmxpa2VseSghZGV2LT5tdWx0KSkgeworCQkJCWRldi0+bXVsdCA9IDE7CisJCQkJV0FSTl9PTigxKTsKKwkJCX0KKwkJfQogCX0KIH0KIApAQCAtMTY4LDE1ICsxNzksNiBAQAogCUJVR19PTihkZXYtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEKTsKIAlCVUdfT04oIWRldi0+Y3B1bWFzayk7CiAKLQkvKgotCSAqIEEgbnNlYzJjeWMgbXVsdGlwbGljYXRvciBvZiAwIGlzIGludmFsaWQgYW5kIHdlJ2QgY3Jhc2gKLQkgKiBvbiBpdCwgc28gZml4IGl0IHVwIGFuZCBlbWl0IGEgd2FybmluZzoKLQkgKi8KLQlpZiAodW5saWtlbHkoIWRldi0+bXVsdCkpIHsKLQkJZGV2LT5tdWx0ID0gMTsKLQkJV0FSTl9PTigxKTsKLQl9Ci0KIAlzcGluX2xvY2soJmNsb2NrZXZlbnRzX2xvY2spOwogCiAJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmNsb2NrZXZlbnRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCBjYTg5ZTE1Li5jNDZjOTMxIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTMxLDYgKzMxLDgyIEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4gLyogZm9yIHNwaW5fdW5sb2NrX2lycSgpIHVzaW5nIHByZWVtcHRfY291bnQoKSBtNjhrICovCiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogCit2b2lkIHRpbWVjb3VudGVyX2luaXQoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJICAgICAgY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCSAgICAgIHU2NCBzdGFydF90c3RhbXApCit7CisJdGMtPmNjID0gY2M7CisJdGMtPmN5Y2xlX2xhc3QgPSBjYy0+cmVhZChjYyk7CisJdGMtPm5zZWMgPSBzdGFydF90c3RhbXA7Cit9CitFWFBPUlRfU1lNQk9MKHRpbWVjb3VudGVyX2luaXQpOworCisvKioKKyAqIHRpbWVjb3VudGVyX3JlYWRfZGVsdGEgLSBnZXQgbmFub3NlY29uZHMgc2luY2UgbGFzdCBjYWxsIG9mIHRoaXMgZnVuY3Rpb24KKyAqIEB0YzogICAgICAgICBQb2ludGVyIHRvIHRpbWUgY291bnRlcgorICoKKyAqIFdoZW4gdGhlIHVuZGVybHlpbmcgY3ljbGUgY291bnRlciBydW5zIG92ZXIsIHRoaXMgd2lsbCBiZSBoYW5kbGVkCisgKiBjb3JyZWN0bHkgYXMgbG9uZyBhcyBpdCBkb2VzIG5vdCBydW4gb3ZlciBtb3JlIHRoYW4gb25jZSBiZXR3ZWVuCisgKiBjYWxscy4KKyAqCisgKiBUaGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGZvciBhIG5ldyB0aW1lIGNvdW50ZXIgaW5pdGlhbGl6ZXMKKyAqIHRoZSB0aW1lIHRyYWNraW5nIGFuZCByZXR1cm5zIGFuIHVuZGVmaW5lZCByZXN1bHQuCisgKi8KK3N0YXRpYyB1NjQgdGltZWNvdW50ZXJfcmVhZF9kZWx0YShzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjKQoreworCWN5Y2xlX3QgY3ljbGVfbm93LCBjeWNsZV9kZWx0YTsKKwl1NjQgbnNfb2Zmc2V0OworCisJLyogcmVhZCBjeWNsZSBjb3VudGVyOiAqLworCWN5Y2xlX25vdyA9IHRjLT5jYy0+cmVhZCh0Yy0+Y2MpOworCisJLyogY2FsY3VsYXRlIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB0aW1lY291bnRlcl9yZWFkX2RlbHRhKCk6ICovCisJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gdGMtPmN5Y2xlX2xhc3QpICYgdGMtPmNjLT5tYXNrOworCisJLyogY29udmVydCB0byBuYW5vc2Vjb25kczogKi8KKwluc19vZmZzZXQgPSBjeWNsZWNvdW50ZXJfY3ljMm5zKHRjLT5jYywgY3ljbGVfZGVsdGEpOworCisJLyogdXBkYXRlIHRpbWUgc3RhbXAgb2YgdGltZWNvdW50ZXJfcmVhZF9kZWx0YSgpIGNhbGw6ICovCisJdGMtPmN5Y2xlX2xhc3QgPSBjeWNsZV9ub3c7CisKKwlyZXR1cm4gbnNfb2Zmc2V0OworfQorCit1NjQgdGltZWNvdW50ZXJfcmVhZChzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjKQoreworCXU2NCBuc2VjOworCisJLyogaW5jcmVtZW50IHRpbWUgYnkgbmFub3NlY29uZHMgc2luY2UgbGFzdCBjYWxsICovCisJbnNlYyA9IHRpbWVjb3VudGVyX3JlYWRfZGVsdGEodGMpOworCW5zZWMgKz0gdGMtPm5zZWM7CisJdGMtPm5zZWMgPSBuc2VjOworCisJcmV0dXJuIG5zZWM7Cit9CitFWFBPUlRfU1lNQk9MKHRpbWVjb3VudGVyX3JlYWQpOworCit1NjQgdGltZWNvdW50ZXJfY3ljMnRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCSBjeWNsZV90IGN5Y2xlX3RzdGFtcCkKK3sKKwl1NjQgY3ljbGVfZGVsdGEgPSAoY3ljbGVfdHN0YW1wIC0gdGMtPmN5Y2xlX2xhc3QpICYgdGMtPmNjLT5tYXNrOworCXU2NCBuc2VjOworCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGFsd2F5cyB0cmVhdGluZyBjeWNsZV90c3RhbXAgYXMgbW9yZSByZWNlbnQKKwkgKiB0aGFuIHRjLT5jeWNsZV9sYXN0LCBkZXRlY3Qgd2hlbiBpdCBpcyB0b28gZmFyIGluIHRoZQorCSAqIGZ1dHVyZSBhbmQgdHJlYXQgaXQgYXMgb2xkIHRpbWUgc3RhbXAgaW5zdGVhZC4KKwkgKi8KKwlpZiAoY3ljbGVfZGVsdGEgPiB0Yy0+Y2MtPm1hc2sgLyAyKSB7CisJCWN5Y2xlX2RlbHRhID0gKHRjLT5jeWNsZV9sYXN0IC0gY3ljbGVfdHN0YW1wKSAmIHRjLT5jYy0+bWFzazsKKwkJbnNlYyA9IHRjLT5uc2VjIC0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKTsKKwl9IGVsc2UgeworCQluc2VjID0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKSArIHRjLT5uc2VjOworCX0KKworCXJldHVybiBuc2VjOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9jeWMydGltZSk7CisKIC8qIFhYWCAtIFdvdWxkIGxpa2UgYSBiZXR0ZXIgd2F5IGZvciBpbml0aWFsaXppbmcgY3Vycl9jbG9ja3NvdXJjZSAqLwogZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9qaWZmaWVzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IGY1Zjc5M2QuLjdmYzY0MzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC0xLDcxICsxLDEyOSBAQAogLyoKLSAqIGxpbnV4L2tlcm5lbC90aW1lL250cC5jCi0gKgogICogTlRQIHN0YXRlIG1hY2hpbmUgaW50ZXJmYWNlcyBhbmQgbG9naWMuCiAgKgogICogVGhpcyBjb2RlIHdhcyBtYWlubHkgbW92ZWQgZnJvbSBrZXJuZWwvdGltZXIuYyBhbmQga2VybmVsL3RpbWUuYwogICogUGxlYXNlIHNlZSB0aG9zZSBmaWxlcyBmb3IgcmVsZXZhbnQgY29weXJpZ2h0IGluZm8gYW5kIGhpc3RvcmljYWwKICAqIGNoYW5nZWxvZ3MuCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIC8qCi0gKiBUaW1la2VlcGluZyB2YXJpYWJsZXMKKyAqIE5UUCB0aW1la2VlcGluZyB2YXJpYWJsZXM6CiAgKi8KLXVuc2lnbmVkIGxvbmcgdGlja191c2VjID0gVElDS19VU0VDOyAJCS8qIFVTRVJfSFogcGVyaW9kICh1c2VjKSAqLwotdW5zaWduZWQgbG9uZyB0aWNrX25zZWM7CQkJLyogQUNUSFogcGVyaW9kIChuc2VjKSAqLwotdTY0IHRpY2tfbGVuZ3RoOwotc3RhdGljIHU2NCB0aWNrX2xlbmd0aF9iYXNlOwogCi1zdGF0aWMgc3RydWN0IGhydGltZXIgbGVhcF90aW1lcjsKKy8qIFVTRVJfSFogcGVyaW9kICh1c2Vjcyk6ICovCit1bnNpZ25lZCBsb25nCQkJdGlja191c2VjID0gVElDS19VU0VDOwogCi0jZGVmaW5lIE1BWF9USUNLQURKCQk1MDAJCS8qIG1pY3Jvc2VjcyAqLwotI2RlZmluZSBNQVhfVElDS0FESl9TQ0FMRUQJKCgodTY0KShNQVhfVElDS0FESiAqIE5TRUNfUEVSX1VTRUMpIDw8IFwKLQkJCQkgIE5UUF9TQ0FMRV9TSElGVCkgLyBOVFBfSU5URVJWQUxfRlJFUSkKKy8qIEFDVEhaIHBlcmlvZCAobnNlY3MpOiAqLwordW5zaWduZWQgbG9uZwkJCXRpY2tfbnNlYzsKKwordTY0CQkJCXRpY2tfbGVuZ3RoOworc3RhdGljIHU2NAkJCXRpY2tfbGVuZ3RoX2Jhc2U7CisKK3N0YXRpYyBzdHJ1Y3QgaHJ0aW1lcgkJbGVhcF90aW1lcjsKKworI2RlZmluZSBNQVhfVElDS0FESgkJNTAwTEwJCS8qIHVzZWNzICovCisjZGVmaW5lIE1BWF9USUNLQURKX1NDQUxFRCBcCisJKCgoTUFYX1RJQ0tBREogKiBOU0VDX1BFUl9VU0VDKSA8PCBOVFBfU0NBTEVfU0hJRlQpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCiAKIC8qCiAgKiBwaGFzZS1sb2NrIGxvb3AgdmFyaWFibGVzCiAgKi8KLS8qIFRJTUVfRVJST1IgcHJldmVudHMgb3ZlcndyaXRpbmcgdGhlIENNT1MgY2xvY2sgKi8KLXN0YXRpYyBpbnQgdGltZV9zdGF0ZSA9IFRJTUVfT0s7CS8qIGNsb2NrIHN5bmNocm9uaXphdGlvbiBzdGF0dXMJKi8KLWludCB0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CQkvKiBjbG9jayBzdGF0dXMgYml0cwkJKi8KLXN0YXRpYyBsb25nIHRpbWVfdGFpOwkJCS8qIFRBSSBvZmZzZXQgKHMpCQkqLwotc3RhdGljIHM2NCB0aW1lX29mZnNldDsJCQkvKiB0aW1lIGFkanVzdG1lbnQgKG5zKQkJKi8KLXN0YXRpYyBsb25nIHRpbWVfY29uc3RhbnQgPSAyOwkJLyogcGxsIHRpbWUgY29uc3RhbnQJCSovCi1sb25nIHRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIG1heGltdW0gZXJyb3IgKHVzKQkJKi8KLWxvbmcgdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsJLyogZXN0aW1hdGVkIGVycm9yICh1cykJCSovCi1zdGF0aWMgczY0IHRpbWVfZnJlcTsJCQkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnMvcykqLwotc3RhdGljIGxvbmcgdGltZV9yZWZ0aW1lOwkJLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHMpCSovCi1sb25nIHRpbWVfYWRqdXN0Owotc3RhdGljIGxvbmcgbnRwX3RpY2tfYWRqOwogCisvKgorICogY2xvY2sgc3luY2hyb25pemF0aW9uIHN0YXR1cworICoKKyAqIChUSU1FX0VSUk9SIHByZXZlbnRzIG92ZXJ3cml0aW5nIHRoZSBDTU9TIGNsb2NrKQorICovCitzdGF0aWMgaW50CQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CisKKy8qIGNsb2NrIHN0YXR1cyBiaXRzOgkJCQkJCQkqLworaW50CQkJCXRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsKKworLyogVEFJIG9mZnNldCAoc2Vjcyk6CQkJCQkJCSovCitzdGF0aWMgbG9uZwkJCXRpbWVfdGFpOworCisvKiB0aW1lIGFkanVzdG1lbnQgKG5zZWNzKToJCQkJCQkqLworc3RhdGljIHM2NAkJCXRpbWVfb2Zmc2V0OworCisvKiBwbGwgdGltZSBjb25zdGFudDoJCQkJCQkJKi8KK3N0YXRpYyBsb25nCQkJdGltZV9jb25zdGFudCA9IDI7CisKKy8qIG1heGltdW0gZXJyb3IgKHVzZWNzKToJCQkJCQkqLworbG9uZwkJCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCisvKiBlc3RpbWF0ZWQgZXJyb3IgKHVzZWNzKToJCQkJCQkqLworbG9uZwkJCQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCisvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnNlY3Mvc2Vjcyk6CQkJCSovCitzdGF0aWMgczY0CQkJdGltZV9mcmVxOworCisvKiB0aW1lIGF0IGxhc3QgYWRqdXN0bWVudCAoc2Vjcyk6CQkJCQkqLworc3RhdGljIGxvbmcJCQl0aW1lX3JlZnRpbWU7CisKK2xvbmcJCQkJdGltZV9hZGp1c3Q7CisKKy8qIGNvbnN0YW50IChib290LXBhcmFtIGNvbmZpZ3VyYWJsZSkgTlRQIHRpY2sgYWRqdXN0bWVudCAodXBzY2FsZWQpCSovCitzdGF0aWMgczY0CQkJbnRwX3RpY2tfYWRqOworCisvKgorICogTlRQIG1ldGhvZHM6CisgKi8KKworLyoKKyAqIFVwZGF0ZSAodGlja19sZW5ndGgsIHRpY2tfbGVuZ3RoX2Jhc2UsIHRpY2tfbnNlYyksIGJhc2VkCisgKiBvbiAodGlja191c2VjLCBudHBfdGlja19hZGosIHRpbWVfZnJlcSk6CisgKi8KIHN0YXRpYyB2b2lkIG50cF91cGRhdGVfZnJlcXVlbmN5KHZvaWQpCiB7Ci0JdTY0IHNlY29uZF9sZW5ndGggPSAodTY0KSh0aWNrX3VzZWMgKiBOU0VDX1BFUl9VU0VDICogVVNFUl9IWikKLQkJCQk8PCBOVFBfU0NBTEVfU0hJRlQ7Ci0Jc2Vjb25kX2xlbmd0aCArPSAoczY0KW50cF90aWNrX2FkaiA8PCBOVFBfU0NBTEVfU0hJRlQ7Ci0Jc2Vjb25kX2xlbmd0aCArPSB0aW1lX2ZyZXE7CisJdTY0IHNlY29uZF9sZW5ndGg7CisJdTY0IG5ld19iYXNlOwogCi0JdGlja19sZW5ndGhfYmFzZSA9IHNlY29uZF9sZW5ndGg7CisJc2Vjb25kX2xlbmd0aAkJID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopCisJCQkJCQk8PCBOVFBfU0NBTEVfU0hJRlQ7CiAKLQl0aWNrX25zZWMgPSBkaXZfdTY0KHNlY29uZF9sZW5ndGgsIEhaKSA+PiBOVFBfU0NBTEVfU0hJRlQ7Ci0JdGlja19sZW5ndGhfYmFzZSA9IGRpdl91NjQodGlja19sZW5ndGhfYmFzZSwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCXNlY29uZF9sZW5ndGgJCSs9IG50cF90aWNrX2FkajsKKwlzZWNvbmRfbGVuZ3RoCQkrPSB0aW1lX2ZyZXE7CisKKwl0aWNrX25zZWMJCSA9IGRpdl91NjQoc2Vjb25kX2xlbmd0aCwgSFopID4+IE5UUF9TQ0FMRV9TSElGVDsKKwluZXdfYmFzZQkJID0gZGl2X3U2NChzZWNvbmRfbGVuZ3RoLCBOVFBfSU5URVJWQUxfRlJFUSk7CisKKwkvKgorCSAqIERvbid0IHdhaXQgZm9yIHRoZSBuZXh0IHNlY29uZF9vdmVyZmxvdywgYXBwbHkKKwkgKiB0aGUgY2hhbmdlIHRvIHRoZSB0aWNrIGxlbmd0aCBpbW1lZGlhdGVseToKKwkgKi8KKwl0aWNrX2xlbmd0aAkJKz0gbmV3X2Jhc2UgLSB0aWNrX2xlbmd0aF9iYXNlOworCXRpY2tfbGVuZ3RoX2Jhc2UJID0gbmV3X2Jhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgczY0IG50cF91cGRhdGVfb2Zmc2V0X2ZsbChzNjQgb2Zmc2V0NjQsIGxvbmcgc2VjcykKK3sKKwl0aW1lX3N0YXR1cyAmPSB+U1RBX01PREU7CisKKwlpZiAoc2VjcyA8IE1JTlNFQykKKwkJcmV0dXJuIDA7CisKKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9GTEwpICYmIChzZWNzIDw9IE1BWFNFQykpCisJCXJldHVybiAwOworCisJdGltZV9zdGF0dXMgfD0gU1RBX01PREU7CisKKwlyZXR1cm4gZGl2X3M2NChvZmZzZXQ2NCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfRkxMKSwgc2Vjcyk7CiB9CiAKIHN0YXRpYyB2b2lkIG50cF91cGRhdGVfb2Zmc2V0KGxvbmcgb2Zmc2V0KQogewotCWxvbmcgbXRlbXA7CiAJczY0IGZyZXFfYWRqOworCXM2NCBvZmZzZXQ2NDsKKwlsb25nIHNlY3M7CiAKIAlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpKQogCQlyZXR1cm47CkBAIC04NCwyNCArMTQyLDIzIEBACiAJICogU2VsZWN0IGhvdyB0aGUgZnJlcXVlbmN5IGlzIHRvIGJlIGNvbnRyb2xsZWQKIAkgKiBhbmQgaW4gd2hpY2ggbW9kZSAoUExMIG9yIEZMTCkuCiAJICovCi0JaWYgKHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEIHx8IHRpbWVfcmVmdGltZSA9PSAwKQotCQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7Ci0JbXRlbXAgPSB4dGltZS50dl9zZWMgLSB0aW1lX3JlZnRpbWU7CisJc2VjcyA9IHh0aW1lLnR2X3NlYyAtIHRpbWVfcmVmdGltZTsKKwlpZiAodW5saWtlbHkodGltZV9zdGF0dXMgJiBTVEFfRlJFUUhPTEQpKQorCQlzZWNzID0gMDsKKwogCXRpbWVfcmVmdGltZSA9IHh0aW1lLnR2X3NlYzsKIAotCWZyZXFfYWRqID0gKHM2NClvZmZzZXQgKiBtdGVtcDsKLQlmcmVxX2FkaiA8PD0gTlRQX1NDQUxFX1NISUZUIC0gMiAqIChTSElGVF9QTEwgKyAyICsgdGltZV9jb25zdGFudCk7Ci0JdGltZV9zdGF0dXMgJj0gflNUQV9NT0RFOwotCWlmIChtdGVtcCA+PSBNSU5TRUMgJiYgKHRpbWVfc3RhdHVzICYgU1RBX0ZMTCB8fCBtdGVtcCA+IE1BWFNFQykpIHsKLQkJZnJlcV9hZGogKz0gZGl2X3M2NCgoczY0KW9mZnNldCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfRkxMKSwKLQkJCQkgICAgbXRlbXApOwotCQl0aW1lX3N0YXR1cyB8PSBTVEFfTU9ERTsKLQl9Ci0JZnJlcV9hZGogKz0gdGltZV9mcmVxOwotCWZyZXFfYWRqID0gbWluKGZyZXFfYWRqLCBNQVhGUkVRX1NDQUxFRCk7Ci0JdGltZV9mcmVxID0gbWF4KGZyZXFfYWRqLCAtTUFYRlJFUV9TQ0FMRUQpOworCW9mZnNldDY0ICAgID0gb2Zmc2V0OworCWZyZXFfYWRqICAgID0gKG9mZnNldDY0ICogc2VjcykgPDwKKwkJCShOVFBfU0NBTEVfU0hJRlQgLSAyICogKFNISUZUX1BMTCArIDIgKyB0aW1lX2NvbnN0YW50KSk7CiAKLQl0aW1lX29mZnNldCA9IGRpdl9zNjQoKHM2NClvZmZzZXQgPDwgTlRQX1NDQUxFX1NISUZULCBOVFBfSU5URVJWQUxfRlJFUSk7CisJZnJlcV9hZGogICAgKz0gbnRwX3VwZGF0ZV9vZmZzZXRfZmxsKG9mZnNldDY0LCBzZWNzKTsKKworCWZyZXFfYWRqICAgID0gbWluKGZyZXFfYWRqICsgdGltZV9mcmVxLCBNQVhGUkVRX1NDQUxFRCk7CisKKwl0aW1lX2ZyZXEgICA9IG1heChmcmVxX2FkaiwgLU1BWEZSRVFfU0NBTEVEKTsKKworCXRpbWVfb2Zmc2V0ID0gZGl2X3M2NChvZmZzZXQ2NCA8PCBOVFBfU0NBTEVfU0hJRlQsIE5UUF9JTlRFUlZBTF9GUkVRKTsKIH0KIAogLyoqCkBAIC0xMTEsMTUgKzE2OCwxNSBAQAogICovCiB2b2lkIG50cF9jbGVhcih2b2lkKQogewotCXRpbWVfYWRqdXN0ID0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLwotCXRpbWVfc3RhdHVzIHw9IFNUQV9VTlNZTkM7Ci0JdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKLQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCXRpbWVfYWRqdXN0CT0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLworCXRpbWVfc3RhdHVzCXw9IFNUQV9VTlNZTkM7CisJdGltZV9tYXhlcnJvcgk9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2VzdGVycm9yCT0gTlRQX1BIQVNFX0xJTUlUOwogCiAJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKIAotCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKLQl0aW1lX29mZnNldCA9IDA7CisJdGlja19sZW5ndGgJPSB0aWNrX2xlbmd0aF9iYXNlOworCXRpbWVfb2Zmc2V0CT0gMDsKIH0KIAogLyoKQEAgLTE0MCw4ICsxOTcsOCBAQAogCQl4dGltZS50dl9zZWMtLTsKIAkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjKys7CiAJCXRpbWVfc3RhdGUgPSBUSU1FX09PUDsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJDbG9jazogIgotCQkgICAgICAgImluc2VydGluZyBsZWFwIHNlY29uZCAyMzo1OTo2MCBVVENcbiIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJDbG9jazogaW5zZXJ0aW5nIGxlYXAgc2Vjb25kIDIzOjU5OjYwIFVUQ1xuIik7CiAJCWhydGltZXJfYWRkX2V4cGlyZXNfbnMoJmxlYXBfdGltZXIsIE5TRUNfUEVSX1NFQyk7CiAJCXJlcyA9IEhSVElNRVJfUkVTVEFSVDsKIAkJYnJlYWs7CkBAIC0xNTAsOCArMjA3LDggQEAKIAkJdGltZV90YWktLTsKIAkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjLS07CiAJCXRpbWVfc3RhdGUgPSBUSU1FX1dBSVQ7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6ICIKLQkJICAgICAgICJkZWxldGluZyBsZWFwIHNlY29uZCAyMzo1OTo1OSBVVENcbiIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJDbG9jazogZGVsZXRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NTkgVVRDXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBUSU1FX09PUDoKIAkJdGltZV90YWkrKzsKQEAgLTE3OSw3ICsyMzYsNyBAQAogICovCiB2b2lkIHNlY29uZF9vdmVyZmxvdyh2b2lkKQogewotCXM2NCB0aW1lX2FkajsKKwlzNjQgZGVsdGE7CiAKIAkvKiBCdW1wIHRoZSBtYXhlcnJvciBmaWVsZCAqLwogCXRpbWVfbWF4ZXJyb3IgKz0gTUFYRlJFUSAvIE5TRUNfUEVSX1VTRUM7CkBAIC0xOTIsMjQgKzI0OSwzMCBAQAogCSAqIENvbXB1dGUgdGhlIHBoYXNlIGFkanVzdG1lbnQgZm9yIHRoZSBuZXh0IHNlY29uZC4gVGhlIG9mZnNldCBpcwogCSAqIHJlZHVjZWQgYnkgYSBmaXhlZCBmYWN0b3IgdGltZXMgdGhlIHRpbWUgY29uc3RhbnQuCiAJICovCi0JdGlja19sZW5ndGggPSB0aWNrX2xlbmd0aF9iYXNlOwotCXRpbWVfYWRqID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQsIFNISUZUX1BMTCArIHRpbWVfY29uc3RhbnQpOwotCXRpbWVfb2Zmc2V0IC09IHRpbWVfYWRqOwotCXRpY2tfbGVuZ3RoICs9IHRpbWVfYWRqOworCXRpY2tfbGVuZ3RoCSA9IHRpY2tfbGVuZ3RoX2Jhc2U7CiAKLQlpZiAodW5saWtlbHkodGltZV9hZGp1c3QpKSB7Ci0JCWlmICh0aW1lX2FkanVzdCA+IE1BWF9USUNLQURKKSB7Ci0JCQl0aW1lX2FkanVzdCAtPSBNQVhfVElDS0FESjsKLQkJCXRpY2tfbGVuZ3RoICs9IE1BWF9USUNLQURKX1NDQUxFRDsKLQkJfSBlbHNlIGlmICh0aW1lX2FkanVzdCA8IC1NQVhfVElDS0FESikgewotCQkJdGltZV9hZGp1c3QgKz0gTUFYX1RJQ0tBREo7Ci0JCQl0aWNrX2xlbmd0aCAtPSBNQVhfVElDS0FESl9TQ0FMRUQ7Ci0JCX0gZWxzZSB7Ci0JCQl0aWNrX2xlbmd0aCArPSAoczY0KSh0aW1lX2FkanVzdCAqIE5TRUNfUEVSX1VTRUMgLwotCQkJCQlOVFBfSU5URVJWQUxfRlJFUSkgPDwgTlRQX1NDQUxFX1NISUZUOwotCQkJdGltZV9hZGp1c3QgPSAwOwotCQl9CisJZGVsdGEJCSA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKKwl0aW1lX29mZnNldAktPSBkZWx0YTsKKwl0aWNrX2xlbmd0aAkrPSBkZWx0YTsKKworCWlmICghdGltZV9hZGp1c3QpCisJCXJldHVybjsKKworCWlmICh0aW1lX2FkanVzdCA+IE1BWF9USUNLQURKKSB7CisJCXRpbWVfYWRqdXN0IC09IE1BWF9USUNLQURKOworCQl0aWNrX2xlbmd0aCArPSBNQVhfVElDS0FESl9TQ0FMRUQ7CisJCXJldHVybjsKIAl9CisKKwlpZiAodGltZV9hZGp1c3QgPCAtTUFYX1RJQ0tBREopIHsKKwkJdGltZV9hZGp1c3QgKz0gTUFYX1RJQ0tBREo7CisJCXRpY2tfbGVuZ3RoIC09IE1BWF9USUNLQURKX1NDQUxFRDsKKwkJcmV0dXJuOworCX0KKworCXRpY2tfbGVuZ3RoICs9IChzNjQpKHRpbWVfYWRqdXN0ICogTlNFQ19QRVJfVVNFQyAvIE5UUF9JTlRFUlZBTF9GUkVRKQorCQkJCQkJCSA8PCBOVFBfU0NBTEVfU0hJRlQ7CisJdGltZV9hZGp1c3QgPSAwOwogfQogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEUKQEAgLTIzMywxMiArMjk2LDEzIEBACiAJICogVGhpcyBjb2RlIGlzIHJ1biBvbiBhIHRpbWVyLiAgSWYgdGhlIGNsb2NrIGlzIHNldCwgdGhhdCB0aW1lcgogCSAqIG1heSBub3QgZXhwaXJlIGF0IHRoZSBjb3JyZWN0IHRpbWUuICBUaHVzLCB3ZSBhZGp1c3QuLi4KIAkgKi8KLQlpZiAoIW50cF9zeW5jZWQoKSkKKwlpZiAoIW50cF9zeW5jZWQoKSkgewogCQkvKgogCQkgKiBOb3Qgc3luY2VkLCBleGl0LCBkbyBub3QgcmVzdGFydCBhIHRpbWVyIChpZiBvbmUgaXMKIAkJICogcnVubmluZywgbGV0IGl0IHJ1biBvdXQpLgogCQkgKi8KIAkJcmV0dXJuOworCX0KIAogCWdldG5zdGltZW9mZGF5KCZub3cpOwogCWlmIChhYnMobm93LnR2X25zZWMgLSAoTlNFQ19QRVJfU0VDIC8gMikpIDw9IHRpY2tfbnNlYyAvIDIpCkBAIC0yNzAsNyArMzM0LDExNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeV9jbW9zX3RpbWVyKHZvaWQpIHsgfQogI2VuZGlmCiAKLS8qIGFkanRpbWV4IG1haW5seSBhbGxvd3MgcmVhZGluZyAoYW5kIHdyaXRpbmcsIGlmIHN1cGVydXNlcikgb2YKKy8qCisgKiBTdGFydCB0aGUgbGVhcCBzZWNvbmRzIHRpbWVyOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnRwX3N0YXJ0X2xlYXBfdGltZXIoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlsb25nIG5vdyA9IHRzLT50dl9zZWM7CisKKwlpZiAodGltZV9zdGF0dXMgJiBTVEFfSU5TKSB7CisJCXRpbWVfc3RhdGUgPSBUSU1FX0lOUzsKKwkJbm93ICs9IDg2NDAwIC0gbm93ICUgODY0MDA7CisJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChub3csIDApLCBIUlRJTUVSX01PREVfQUJTKTsKKworCQlyZXR1cm47CisJfQorCisJaWYgKHRpbWVfc3RhdHVzICYgU1RBX0RFTCkgeworCQl0aW1lX3N0YXRlID0gVElNRV9ERUw7CisJCW5vdyArPSA4NjQwMCAtIChub3cgKyAxKSAlIDg2NDAwOworCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQobm93LCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7CisJfQorfQorCisvKgorICogUHJvcGFnYXRlIGEgbmV3IHR4Yy0+c3RhdHVzIHZhbHVlIGludG8gdGhlIE5UUCBzdGF0ZToKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfYWRqX3N0YXR1cyhzdHJ1Y3QgdGltZXggKnR4Yywgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAoKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYgISh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKSB7CisJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CisJfQorCisJLyoKKwkgKiBJZiB3ZSB0dXJuIG9uIFBMTCBhZGp1c3RtZW50cyB0aGVuIHJlc2V0IHRoZQorCSAqIHJlZmVyZW5jZSB0aW1lIHRvIGN1cnJlbnQgdGltZS4KKwkgKi8KKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmICh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKQorCQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CisKKwkvKiBvbmx5IHNldCBhbGxvd2VkIGJpdHMgKi8KKwl0aW1lX3N0YXR1cyAmPSBTVEFfUk9OTFk7CisJdGltZV9zdGF0dXMgfD0gdHhjLT5zdGF0dXMgJiB+U1RBX1JPTkxZOworCisJc3dpdGNoICh0aW1lX3N0YXRlKSB7CisJY2FzZSBUSU1FX09LOgorCQludHBfc3RhcnRfbGVhcF90aW1lcih0cyk7CisJCWJyZWFrOworCWNhc2UgVElNRV9JTlM6CisJY2FzZSBUSU1FX0RFTDoKKwkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CisJCW50cF9zdGFydF9sZWFwX3RpbWVyKHRzKTsKKwljYXNlIFRJTUVfV0FJVDoKKwkJaWYgKCEodGltZV9zdGF0dXMgJiAoU1RBX0lOUyB8IFNUQV9ERUwpKSkKKwkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQlicmVhazsKKwljYXNlIFRJTUVfT09QOgorCQlocnRpbWVyX3Jlc3RhcnQoJmxlYXBfdGltZXIpOworCQlicmVhazsKKwl9Cit9CisvKgorICogQ2FsbGVkIHdpdGggdGhlIHh0aW1lIGxvY2sgaGVsZCwgc28gd2UgY2FuIGFjY2VzcyBhbmQgbW9kaWZ5CisgKiBhbGwgdGhlIGdsb2JhbCBOVFAgc3RhdGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2FkanRpbWV4X21vZGVzKHN0cnVjdCB0aW1leCAqdHhjLCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCWlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUykKKwkJcHJvY2Vzc19hZGpfc3RhdHVzKHR4YywgdHMpOworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTkFOTykKKwkJdGltZV9zdGF0dXMgfD0gU1RBX05BTk87CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9NSUNSTykKKwkJdGltZV9zdGF0dXMgJj0gflNUQV9OQU5POworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfRlJFUVVFTkNZKSB7CisJCXRpbWVfZnJlcSA9IHR4Yy0+ZnJlcSAqIFBQTV9TQ0FMRTsKKwkJdGltZV9mcmVxID0gbWluKHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOworCQl0aW1lX2ZyZXEgPSBtYXgodGltZV9mcmVxLCAtTUFYRlJFUV9TQ0FMRUQpOworCX0KKworCWlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKQorCQl0aW1lX21heGVycm9yID0gdHhjLT5tYXhlcnJvcjsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX0VTVEVSUk9SKQorCQl0aW1lX2VzdGVycm9yID0gdHhjLT5lc3RlcnJvcjsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX1RJTUVDT05TVCkgeworCQl0aW1lX2NvbnN0YW50ID0gdHhjLT5jb25zdGFudDsKKwkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCisJCQl0aW1lX2NvbnN0YW50ICs9IDQ7CisJCXRpbWVfY29uc3RhbnQgPSBtaW4odGltZV9jb25zdGFudCwgKGxvbmcpTUFYVEMpOworCQl0aW1lX2NvbnN0YW50ID0gbWF4KHRpbWVfY29uc3RhbnQsIDBsKTsKKwl9CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCisJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX09GRlNFVCkKKwkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSykKKwkJdGlja191c2VjID0gdHhjLT50aWNrOworCisJaWYgKHR4Yy0+bW9kZXMgJiAoQURKX1RJQ0t8QURKX0ZSRVFVRU5DWXxBREpfT0ZGU0VUKSkKKwkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKK30KKworLyoKKyAqIGFkanRpbWV4IG1haW5seSBhbGxvd3MgcmVhZGluZyAoYW5kIHdyaXRpbmcsIGlmIHN1cGVydXNlcikgb2YKICAqIGtlcm5lbCB0aW1lLWtlZXBpbmcgdmFyaWFibGVzLiB1c2VkIGJ5IHhudHBkLgogICovCiBpbnQgZG9fYWRqdGltZXgoc3RydWN0IHRpbWV4ICp0eGMpCkBAIC0yOTEsMTEgKzQ2NCwxNCBAQAogCQkgaWYgKHR4Yy0+bW9kZXMgJiYgIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJLyogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyEgKi8KKwkJLyoKKwkJICogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSB0aGVuCisJCSAqIHNvbWV0aGluZyBpcyBWRVJZIHdyb25nIQorCQkgKi8KIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSyAmJgogCQkgICAgKHR4Yy0+dGljayA8ICA5MDAwMDAvVVNFUl9IWiB8fAogCQkgICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMgJiYgdGltZV9zdGF0ZSAhPSBUSU1FX09LKQogCQkJaHJ0aW1lcl9jYW5jZWwoJmxlYXBfdGltZXIpOwpAQCAtMzA1LDcgKzQ4MSw2IEBACiAKIAl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKLQkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW0gKi8KIAlpZiAodHhjLT5tb2RlcyAmIEFESl9BREpUSU1FKSB7CiAJCWxvbmcgc2F2ZV9hZGp1c3QgPSB0aW1lX2FkanVzdDsKIApAQCAtMzE1LDk4ICs0OTAsMjQgQEAKIAkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAJCX0KIAkJdHhjLT5vZmZzZXQgPSBzYXZlX2FkanVzdDsKLQkJZ290byBhZGpfZG9uZTsKLQl9Ci0JaWYgKHR4Yy0+bW9kZXMpIHsKLQkJbG9uZyBzZWM7CisJfSBlbHNlIHsKIAotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpIHsKLQkJCWlmICgodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJgotCQkJICAgICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgewotCQkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOwotCQkJCXRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsKLQkJCX0KLQkJCS8qIG9ubHkgc2V0IGFsbG93ZWQgYml0cyAqLwotCQkJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOwotCQkJdGltZV9zdGF0dXMgfD0gdHhjLT5zdGF0dXMgJiB+U1RBX1JPTkxZOworCQkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW06ICovCisJCWlmICh0eGMtPm1vZGVzKQorCQkJcHJvY2Vzc19hZGp0aW1leF9tb2Rlcyh0eGMsICZ0cyk7CiAKLQkJCXN3aXRjaCAodGltZV9zdGF0ZSkgewotCQkJY2FzZSBUSU1FX09LOgotCQkJc3RhcnRfdGltZXI6Ci0JCQkJc2VjID0gdHMudHZfc2VjOwotCQkJCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9JTlMpIHsKLQkJCQkJdGltZV9zdGF0ZSA9IFRJTUVfSU5TOwotCQkJCQlzZWMgKz0gODY0MDAgLSBzZWMgJSA4NjQwMDsKLQkJCQkJaHJ0aW1lcl9zdGFydCgmbGVhcF90aW1lciwga3RpbWVfc2V0KHNlYywgMCksIEhSVElNRVJfTU9ERV9BQlMpOwotCQkJCX0gZWxzZSBpZiAodGltZV9zdGF0dXMgJiBTVEFfREVMKSB7Ci0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX0RFTDsKLQkJCQkJc2VjICs9IDg2NDAwIC0gKHNlYyArIDEpICUgODY0MDA7Ci0JCQkJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChzZWMsIDApLCBIUlRJTUVSX01PREVfQUJTKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRJTUVfSU5TOgotCQkJY2FzZSBUSU1FX0RFTDoKLQkJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKLQkJCQlnb3RvIHN0YXJ0X3RpbWVyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX1dBSVQ6Ci0JCQkJaWYgKCEodGltZV9zdGF0dXMgJiAoU1RBX0lOUyB8IFNUQV9ERUwpKSkKLQkJCQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRJTUVfT09QOgotCQkJCWhydGltZXJfcmVzdGFydCgmbGVhcF90aW1lcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9OQU5PKQotCQkJdGltZV9zdGF0dXMgfD0gU1RBX05BTk87Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX01JQ1JPKQotCQkJdGltZV9zdGF0dXMgJj0gflNUQV9OQU5POwotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgewotCQkJdGltZV9mcmVxID0gKHM2NCl0eGMtPmZyZXEgKiBQUE1fU0NBTEU7Ci0JCQl0aW1lX2ZyZXEgPSBtaW4odGltZV9mcmVxLCBNQVhGUkVRX1NDQUxFRCk7Ci0JCQl0aW1lX2ZyZXEgPSBtYXgodGltZV9mcmVxLCAtTUFYRlJFUV9TQ0FMRUQpOwotCQl9Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTUFYRVJST1IpCi0JCQl0aW1lX21heGVycm9yID0gdHhjLT5tYXhlcnJvcjsKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfRVNURVJST1IpCi0JCQl0aW1lX2VzdGVycm9yID0gdHhjLT5lc3RlcnJvcjsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USU1FQ09OU1QpIHsKLQkJCXRpbWVfY29uc3RhbnQgPSB0eGMtPmNvbnN0YW50OwotCQkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCi0JCQkJdGltZV9jb25zdGFudCArPSA0OwotCQkJdGltZV9jb25zdGFudCA9IG1pbih0aW1lX2NvbnN0YW50LCAobG9uZylNQVhUQyk7Ci0JCQl0aW1lX2NvbnN0YW50ID0gbWF4KHRpbWVfY29uc3RhbnQsIDBsKTsKLQkJfQotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX1RBSSAmJiB0eGMtPmNvbnN0YW50ID4gMCkKLQkJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpCi0JCQludHBfdXBkYXRlX29mZnNldCh0eGMtPm9mZnNldCk7Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCi0JCQl0aWNrX3VzZWMgPSB0eGMtPnRpY2s7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiAoQURKX1RJQ0t8QURKX0ZSRVFVRU5DWXxBREpfT0ZGU0VUKSkKLQkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7Ci0JfQotCi0JdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAorCQl0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0ICogTlRQX0lOVEVSVkFMX0ZSRVEsCiAJCQkJICBOVFBfU0NBTEVfU0hJRlQpOwotCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQotCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKKwkJCXR4Yy0+b2Zmc2V0IC89IE5TRUNfUEVSX1VTRUM7CisJfQogCi1hZGpfZG9uZToKIAlyZXN1bHQgPSB0aW1lX3N0YXRlOwkvKiBtb3N0bHkgYFRJTUVfT0snICovCiAJaWYgKHRpbWVfc3RhdHVzICYgKFNUQV9VTlNZTkN8U1RBX0NMT0NLRVJSKSkKIAkJcmVzdWx0ID0gVElNRV9FUlJPUjsKIAogCXR4Yy0+ZnJlcQkgICA9IHNoaWZ0X3JpZ2h0KCh0aW1lX2ZyZXEgPj4gUFBNX1NDQUxFX0lOVl9TSElGVCkgKgotCQkJCQkgKHM2NClQUE1fU0NBTEVfSU5WLCBOVFBfU0NBTEVfU0hJRlQpOworCQkJCQkgUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKIAl0eGMtPm1heGVycm9yCSAgID0gdGltZV9tYXhlcnJvcjsKIAl0eGMtPmVzdGVycm9yCSAgID0gdGltZV9lc3RlcnJvcjsKIAl0eGMtPnN0YXR1cwkgICA9IHRpbWVfc3RhdHVzOwpAQCAtNDI1LDYgKzUyNiw3IEBACiAJdHhjLT5jYWxjbnQJICAgPSAwOwogCXR4Yy0+ZXJyY250CSAgID0gMDsKIAl0eGMtPnN0YmNudAkgICA9IDA7CisKIAl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAogCXR4Yy0+dGltZS50dl9zZWMgPSB0cy50dl9zZWM7CkBAIC00NDAsNiArNTQyLDggQEAKIHN0YXRpYyBpbnQgX19pbml0IG50cF90aWNrX2Fkal9zZXR1cChjaGFyICpzdHIpCiB7CiAJbnRwX3RpY2tfYWRqID0gc2ltcGxlX3N0cnRvbChzdHIsIE5VTEwsIDApOworCW50cF90aWNrX2FkaiA8PD0gTlRQX1NDQUxFX1NISUZUOworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVjb21wYXJlLmMgYi9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTdmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3RpbWVjb21wYXJlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisKKy8qCisgKiBmaXhlZCBwb2ludCBhcml0aG1ldGljIHNjYWxlIGZhY3RvciBmb3Igc2tldworICoKKyAqIFVzdWFsbHkgb25lIHdvdWxkIG1lYXN1cmUgc2tldyBpbiBwcGIgKHBhcnRzIHBlciBiaWxsaW9uLCAxZTkpLCBidXQKKyAqIHVzaW5nIGEgZmFjdG9yIG9mIDIgc2ltcGxpZmllcyB0aGUgbWF0aC4KKyAqLworI2RlZmluZSBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04gKCgoczY0KTEpPDwzMCkKKwora3RpbWVfdCB0aW1lY29tcGFyZV90cmFuc2Zvcm0oc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJICAgICAgdTY0IHNvdXJjZV90c3RhbXApCit7CisJdTY0IG5zZWM7CisKKwluc2VjID0gc291cmNlX3RzdGFtcCArIHN5bmMtPm9mZnNldDsKKwluc2VjICs9IChzNjQpKHNvdXJjZV90c3RhbXAgLSBzeW5jLT5sYXN0X3VwZGF0ZSkgKiBzeW5jLT5za2V3IC8KKwkJVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OOworCisJcmV0dXJuIG5zX3RvX2t0aW1lKG5zZWMpOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY29tcGFyZV90cmFuc2Zvcm0pOworCitpbnQgdGltZWNvbXBhcmVfb2Zmc2V0KHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJICAgICAgIHM2NCAqb2Zmc2V0LAorCQkgICAgICAgdTY0ICpzb3VyY2VfdHN0YW1wKQoreworCXU2NCBzdGFydF9zb3VyY2UgPSAwLCBlbmRfc291cmNlID0gMDsKKwlzdHJ1Y3QgeworCQlzNjQgb2Zmc2V0OworCQlzNjQgZHVyYXRpb25fdGFyZ2V0OworCX0gYnVmZmVyWzEwXSwgc2FtcGxlLCAqc2FtcGxlczsKKwlpbnQgY291bnRlciA9IDAsIGk7CisJaW50IHVzZWQ7CisJaW50IGluZGV4OworCWludCBudW1fc2FtcGxlcyA9IHN5bmMtPm51bV9zYW1wbGVzOworCisJaWYgKG51bV9zYW1wbGVzID4gc2l6ZW9mKGJ1ZmZlcikvc2l6ZW9mKGJ1ZmZlclswXSkpIHsKKwkJc2FtcGxlcyA9IGttYWxsb2Moc2l6ZW9mKCpzYW1wbGVzKSAqIG51bV9zYW1wbGVzLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFzYW1wbGVzKSB7CisJCQlzYW1wbGVzID0gYnVmZmVyOworCQkJbnVtX3NhbXBsZXMgPSBzaXplb2YoYnVmZmVyKS9zaXplb2YoYnVmZmVyWzBdKTsKKwkJfQorCX0gZWxzZSB7CisJCXNhbXBsZXMgPSBidWZmZXI7CisJfQorCisJLyogcnVuIHVudGlsIHdlIGhhdmUgZW5vdWdoIHZhbGlkIHNhbXBsZXMsIGJ1dCBkbyBub3QgdHJ5IGZvcmV2ZXIgKi8KKwlpID0gMDsKKwljb3VudGVyID0gMDsKKwl3aGlsZSAoMSkgeworCQl1NjQgdHM7CisJCWt0aW1lX3Qgc3RhcnQsIGVuZDsKKworCQlzdGFydCA9IHN5bmMtPnRhcmdldCgpOworCQl0cyA9IHRpbWVjb3VudGVyX3JlYWQoc3luYy0+c291cmNlKTsKKwkJZW5kID0gc3luYy0+dGFyZ2V0KCk7CisKKwkJaWYgKCFpKQorCQkJc3RhcnRfc291cmNlID0gdHM7CisKKwkJLyogaWdub3JlIG5lZ2F0aXZlIGR1cmF0aW9ucyAqLworCQlzYW1wbGUuZHVyYXRpb25fdGFyZ2V0ID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGVuZCwgc3RhcnQpKTsKKwkJaWYgKHNhbXBsZS5kdXJhdGlvbl90YXJnZXQgPj0gMCkgeworCQkJLyoKKwkJCSAqIGFzc3VtZSBzeW1ldHJpYyBkZWxheSB0byBhbmQgZnJvbSBzb3VyY2U6CisJCQkgKiBhdmVyYWdlIHRhcmdldCB0aW1lIGNvcnJlc3BvbmRzIHRvIG1lYXN1cmVkCisJCQkgKiBzb3VyY2UgdGltZQorCQkJICovCisJCQlzYW1wbGUub2Zmc2V0ID0KKwkJCQlrdGltZV90b19ucyhrdGltZV9hZGQoZW5kLCBzdGFydCkpIC8gMiAtCisJCQkJdHM7CisKKwkJCS8qIHNpbXBsZSBpbnNlcnRpb24gc29ydCBiYXNlZCBvbiBkdXJhdGlvbiAqLworCQkJaW5kZXggPSBjb3VudGVyIC0gMTsKKwkJCXdoaWxlIChpbmRleCA+PSAwKSB7CisJCQkJaWYgKHNhbXBsZXNbaW5kZXhdLmR1cmF0aW9uX3RhcmdldCA8CisJCQkJICAgIHNhbXBsZS5kdXJhdGlvbl90YXJnZXQpCisJCQkJCWJyZWFrOworCQkJCXNhbXBsZXNbaW5kZXggKyAxXSA9IHNhbXBsZXNbaW5kZXhdOworCQkJCWluZGV4LS07CisJCQl9CisJCQlzYW1wbGVzW2luZGV4ICsgMV0gPSBzYW1wbGU7CisJCQljb3VudGVyKys7CisJCX0KKworCQlpKys7CisJCWlmIChjb3VudGVyID49IG51bV9zYW1wbGVzIHx8IGkgPj0gMTAwMDAwKSB7CisJCQllbmRfc291cmNlID0gdHM7CisJCQlicmVhazsKKwkJfQorCX0KKworCSpzb3VyY2VfdHN0YW1wID0gKGVuZF9zb3VyY2UgKyBzdGFydF9zb3VyY2UpIC8gMjsKKworCS8qIHJlbW92ZSBvdXRsaWVycyBieSBvbmx5IHVzaW5nIDc1JSBvZiB0aGUgc2FtcGxlcyAqLworCXVzZWQgPSBjb3VudGVyICogMyAvIDQ7CisJaWYgKCF1c2VkKQorCQl1c2VkID0gY291bnRlcjsKKwlpZiAodXNlZCkgeworCQkvKiBjYWxjdWxhdGUgYXZlcmFnZSAqLworCQlzNjQgb2ZmID0gMDsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdXNlZDsgaW5kZXgrKykKKwkJCW9mZiArPSBzYW1wbGVzW2luZGV4XS5vZmZzZXQ7CisJCSpvZmZzZXQgPSBkaXZfczY0KG9mZiwgdXNlZCk7CisJfQorCisJaWYgKHNhbXBsZXMgJiYgc2FtcGxlcyAhPSBidWZmZXIpCisJCWtmcmVlKHNhbXBsZXMpOworCisJcmV0dXJuIHVzZWQ7Cit9CitFWFBPUlRfU1lNQk9MKHRpbWVjb21wYXJlX29mZnNldCk7CisKK3ZvaWQgX190aW1lY29tcGFyZV91cGRhdGUoc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJICB1NjQgc291cmNlX3RzdGFtcCkKK3sKKwlzNjQgb2Zmc2V0OworCXU2NCBhdmVyYWdlX3RpbWU7CisKKwlpZiAoIXRpbWVjb21wYXJlX29mZnNldChzeW5jLCAmb2Zmc2V0LCAmYXZlcmFnZV90aW1lKSkKKwkJcmV0dXJuOworCisJaWYgKCFzeW5jLT5sYXN0X3VwZGF0ZSkgeworCQlzeW5jLT5sYXN0X3VwZGF0ZSA9IGF2ZXJhZ2VfdGltZTsKKwkJc3luYy0+b2Zmc2V0ID0gb2Zmc2V0OworCQlzeW5jLT5za2V3ID0gMDsKKwl9IGVsc2UgeworCQlzNjQgZGVsdGFfbnNlYyA9IGF2ZXJhZ2VfdGltZSAtIHN5bmMtPmxhc3RfdXBkYXRlOworCisJCS8qIGF2b2lkIGRpdmlzaW9uIGJ5IG5lZ2F0aXZlIG9yIHNtYWxsIGRlbHRhcyAqLworCQlpZiAoZGVsdGFfbnNlYyA+PSAxMDAwMCkgeworCQkJczY0IGRlbHRhX29mZnNldF9uc2VjID0gb2Zmc2V0IC0gc3luYy0+b2Zmc2V0OworCQkJczY0IHNrZXc7IC8qIGRlbHRhX29mZnNldF9uc2VjICoKKwkJCQkgICAgIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTiAvCisJCQkJICAgICBkZWx0YV9uc2VjICovCisJCQl1NjQgZGl2aXNvcjsKKworCQkJLyogZGl2X3M2NCgpIGlzIGxpbWl0ZWQgdG8gMzIgYml0IGRpdmlzb3IgKi8KKwkJCXNrZXcgPSBkZWx0YV9vZmZzZXRfbnNlYyAqIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTjsKKwkJCWRpdmlzb3IgPSBkZWx0YV9uc2VjOworCQkJd2hpbGUgKHVubGlrZWx5KGRpdmlzb3IgPj0gKChzNjQpMSkgPDwgMzIpKSB7CisJCQkJLyogZGl2aWRlIGJvdGggYnkgMjsgYmV3YXJlLCByaWdodCBzaGlmdAorCQkJCSAgIG9mIG5lZ2F0aXZlIHZhbHVlIGhhcyB1bmRlZmluZWQKKwkJCQkgICBiZWhhdmlvciBhbmQgY2FuIG9ubHkgYmUgdXNlZCBmb3IKKwkJCQkgICB0aGUgcG9zaXRpdmUgZGl2aXNvciAqLworCQkJCXNrZXcgPSBkaXZfczY0KHNrZXcsIDIpOworCQkJCWRpdmlzb3IgPj49IDE7CisJCQl9CisJCQlza2V3ID0gZGl2X3M2NChza2V3LCBkaXZpc29yKTsKKworCQkJLyoKKwkJCSAqIENhbGN1bGF0ZSBuZXcgb3ZlcmFsbCBza2V3IGFzIDQvMTYgdGhlCisJCQkgKiBvbGQgdmFsdWUgYW5kIDEyLzE2IHRoZSBuZXcgb25lLiBUaGlzIGlzCisJCQkgKiBhIHJhdGhlciBhcmJpdHJhcnkgdHJhZGVvZmYgYmV0d2VlbgorCQkJICogb25seSB1c2luZyB0aGUgbGF0ZXN0IG1lYXN1cmVtZW50ICgwLzE2IGFuZAorCQkJICogMTYvMTYpIGFuZCBldmVuIG1vcmUgd2VpZ2h0IG9uIHBhc3QgbWVhc3VyZW1lbnRzLgorCQkJICovCisjZGVmaW5lIFRJTUVDT01QQVJFX05FV19TS0VXX1BFUl8xNiAxMgorCQkJc3luYy0+c2tldyA9CisJCQkJZGl2X3M2NCgoMTYgLSBUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYpICoKKwkJCQkJc3luYy0+c2tldyArCisJCQkJCVRJTUVDT01QQVJFX05FV19TS0VXX1BFUl8xNiAqIHNrZXcsCisJCQkJCTE2KTsKKwkJCXN5bmMtPmxhc3RfdXBkYXRlID0gYXZlcmFnZV90aW1lOworCQkJc3luYy0+b2Zmc2V0ID0gb2Zmc2V0OworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChfX3RpbWVjb21wYXJlX3VwZGF0ZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDEzZGQ2NGYuLjliNzdmYzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC01ODksMTEgKzU4OSwxNCBAQAogCX0KIH0KIAotaW50IF9fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQorc3RhdGljIGlubGluZSBpbnQKK19fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzLCBib29sIHBlbmRpbmdfb25seSkKIHsKIAlzdHJ1Y3QgdHZlY19iYXNlICpiYXNlLCAqbmV3X2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKIAogCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKIAlCVUdfT04oIXRpbWVyLT5mdW5jdGlvbik7CkBAIC02MDMsNiArNjA2LDkgQEAKIAlpZiAodGltZXJfcGVuZGluZyh0aW1lcikpIHsKIAkJZGV0YWNoX3RpbWVyKHRpbWVyLCAwKTsKIAkJcmV0ID0gMTsKKwl9IGVsc2UgeworCQlpZiAocGVuZGluZ19vbmx5KQorCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWRlYnVnX3RpbWVyX2FjdGl2YXRlKHRpbWVyKTsKQEAgLTYyOSwxMiArNjM1LDgzIEBACiAKIAl0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7CiAJaW50ZXJuYWxfYWRkX3RpbWVyKGJhc2UsIHRpbWVyKTsKKworb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1FWFBPUlRfU1lNQk9MKF9fbW9kX3RpbWVyKTsKKy8qKgorICogbW9kX3RpbWVyX3BlbmRpbmcgLSBtb2RpZnkgYSBwZW5kaW5nIHRpbWVyJ3MgdGltZW91dAorICogQHRpbWVyOiB0aGUgcGVuZGluZyB0aW1lciB0byBiZSBtb2RpZmllZAorICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKKyAqCisgKiBtb2RfdGltZXJfcGVuZGluZygpIGlzIHRoZSBzYW1lIGZvciBwZW5kaW5nIHRpbWVycyBhcyBtb2RfdGltZXIoKSwKKyAqIGJ1dCB3aWxsIG5vdCByZS1hY3RpdmF0ZSBhbmQgbW9kaWZ5IGFscmVhZHkgZGVsZXRlZCB0aW1lcnMuCisgKgorICogSXQgaXMgdXNlZnVsIGZvciB1bnNlcmlhbGl6ZWQgdXNlIG9mIHRpbWVycy4KKyAqLworaW50IG1vZF90aW1lcl9wZW5kaW5nKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQoreworCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcywgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKG1vZF90aW1lcl9wZW5kaW5nKTsKKworLyoqCisgKiBtb2RfdGltZXIgLSBtb2RpZnkgYSB0aW1lcidzIHRpbWVvdXQKKyAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIG1vZGlmaWVkCisgKiBAZXhwaXJlczogbmV3IHRpbWVvdXQgaW4gamlmZmllcworICoKKyAqIG1vZF90aW1lcigpIGlzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHVwZGF0ZSB0aGUgZXhwaXJlIGZpZWxkIG9mIGFuCisgKiBhY3RpdmUgdGltZXIgKGlmIHRoZSB0aW1lciBpcyBpbmFjdGl2ZSBpdCB3aWxsIGJlIGFjdGl2YXRlZCkKKyAqCisgKiBtb2RfdGltZXIodGltZXIsIGV4cGlyZXMpIGlzIGVxdWl2YWxlbnQgdG86CisgKgorICogICAgIGRlbF90aW1lcih0aW1lcik7IHRpbWVyLT5leHBpcmVzID0gZXhwaXJlczsgYWRkX3RpbWVyKHRpbWVyKTsKKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHVuc2VyaWFsaXplZCBjb25jdXJyZW50IHVzZXJzIG9mIHRoZQorICogc2FtZSB0aW1lciwgdGhlbiBtb2RfdGltZXIoKSBpcyB0aGUgb25seSBzYWZlIHdheSB0byBtb2RpZnkgdGhlIHRpbWVvdXQsCisgKiBzaW5jZSBhZGRfdGltZXIoKSBjYW5ub3QgbW9kaWZ5IGFuIGFscmVhZHkgcnVubmluZyB0aW1lci4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB3aGV0aGVyIGl0IGhhcyBtb2RpZmllZCBhIHBlbmRpbmcgdGltZXIgb3Igbm90LgorICogKGllLiBtb2RfdGltZXIoKSBvZiBhbiBpbmFjdGl2ZSB0aW1lciByZXR1cm5zIDAsIG1vZF90aW1lcigpIG9mIGFuCisgKiBhY3RpdmUgdGltZXIgcmV0dXJucyAxLikKKyAqLworaW50IG1vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3sKKwkvKgorCSAqIFRoaXMgaXMgYSBjb21tb24gb3B0aW1pemF0aW9uIHRyaWdnZXJlZCBieSB0aGUKKwkgKiBuZXR3b3JraW5nIGNvZGUgLSBpZiB0aGUgdGltZXIgaXMgcmUtbW9kaWZpZWQKKwkgKiB0byBiZSB0aGUgc2FtZSB0aGluZyB0aGVuIGp1c3QgcmV0dXJuOgorCSAqLworCWlmICh0aW1lci0+ZXhwaXJlcyA9PSBleHBpcmVzICYmIHRpbWVyX3BlbmRpbmcodGltZXIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcywgZmFsc2UpOworfQorRVhQT1JUX1NZTUJPTChtb2RfdGltZXIpOworCisvKioKKyAqIGFkZF90aW1lciAtIHN0YXJ0IGEgdGltZXIKKyAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCisgKgorICogVGhlIGtlcm5lbCB3aWxsIGRvIGEgLT5mdW5jdGlvbigtPmRhdGEpIGNhbGxiYWNrIGZyb20gdGhlCisgKiB0aW1lciBpbnRlcnJ1cHQgYXQgdGhlIC0+ZXhwaXJlcyBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUKKyAqIGN1cnJlbnQgdGltZSBpcyAnamlmZmllcycuCisgKgorICogVGhlIHRpbWVyJ3MgLT5leHBpcmVzLCAtPmZ1bmN0aW9uIChhbmQgaWYgdGhlIGhhbmRsZXIgdXNlcyBpdCwgLT5kYXRhKQorICogZmllbGRzIG11c3QgYmUgc2V0IHByaW9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaW1lcnMgd2l0aCBhbiAtPmV4cGlyZXMgZmllbGQgaW4gdGhlIHBhc3Qgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dAorICogdGltZXIgdGljay4KKyAqLwordm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCUJVR19PTih0aW1lcl9wZW5kaW5nKHRpbWVyKSk7CisJbW9kX3RpbWVyKHRpbWVyLCB0aW1lci0+ZXhwaXJlcyk7Cit9CitFWFBPUlRfU1lNQk9MKGFkZF90aW1lcik7CiAKIC8qKgogICogYWRkX3RpbWVyX29uIC0gc3RhcnQgYSB0aW1lciBvbiBhIHBhcnRpY3VsYXIgQ1BVCkBAIC02NjcsNDQgKzc0NCw2IEBACiB9CiAKIC8qKgotICogbW9kX3RpbWVyIC0gbW9kaWZ5IGEgdGltZXIncyB0aW1lb3V0Ci0gKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBtb2RpZmllZAotICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKLSAqCi0gKiBtb2RfdGltZXIoKSBpcyBhIG1vcmUgZWZmaWNpZW50IHdheSB0byB1cGRhdGUgdGhlIGV4cGlyZSBmaWVsZCBvZiBhbgotICogYWN0aXZlIHRpbWVyIChpZiB0aGUgdGltZXIgaXMgaW5hY3RpdmUgaXQgd2lsbCBiZSBhY3RpdmF0ZWQpCi0gKgotICogbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKSBpcyBlcXVpdmFsZW50IHRvOgotICoKLSAqICAgICBkZWxfdGltZXIodGltZXIpOyB0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7IGFkZF90aW1lcih0aW1lcik7Ci0gKgotICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB1bnNlcmlhbGl6ZWQgY29uY3VycmVudCB1c2VycyBvZiB0aGUKLSAqIHNhbWUgdGltZXIsIHRoZW4gbW9kX3RpbWVyKCkgaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gbW9kaWZ5IHRoZSB0aW1lb3V0LAotICogc2luY2UgYWRkX3RpbWVyKCkgY2Fubm90IG1vZGlmeSBhbiBhbHJlYWR5IHJ1bm5pbmcgdGltZXIuCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciBpdCBoYXMgbW9kaWZpZWQgYSBwZW5kaW5nIHRpbWVyIG9yIG5vdC4KLSAqIChpZS4gbW9kX3RpbWVyKCkgb2YgYW4gaW5hY3RpdmUgdGltZXIgcmV0dXJucyAwLCBtb2RfdGltZXIoKSBvZiBhbgotICogYWN0aXZlIHRpbWVyIHJldHVybnMgMS4pCi0gKi8KLWludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCi17Ci0JQlVHX09OKCF0aW1lci0+ZnVuY3Rpb24pOwotCi0JdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOwotCS8qCi0JICogVGhpcyBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24gdHJpZ2dlcmVkIGJ5IHRoZQotCSAqIG5ldHdvcmtpbmcgY29kZSAtIGlmIHRoZSB0aW1lciBpcyByZS1tb2RpZmllZAotCSAqIHRvIGJlIHRoZSBzYW1lIHRoaW5nIHRoZW4ganVzdCByZXR1cm46Ci0JICovCi0JaWYgKHRpbWVyLT5leHBpcmVzID09IGV4cGlyZXMgJiYgdGltZXJfcGVuZGluZyh0aW1lcikpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIF9fbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKTsKLX0KLQotRVhQT1JUX1NZTUJPTChtb2RfdGltZXIpOwotCi0vKioKICAqIGRlbF90aW1lciAtIGRlYWN0aXZlIGEgdGltZXIuCiAgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBkZWFjdGl2YXRlZAogICoKQEAgLTczMyw3ICs3NzIsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTChkZWxfdGltZXIpOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNzY3LDcgKzgwNSw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCiBFWFBPUlRfU1lNQk9MKHRyeV90b19kZWxfdGltZXJfc3luYyk7CiAKIC8qKgpAQCAtNzk2LDcgKzgzMyw2IEBACiAJCWNwdV9yZWxheCgpOwogCX0KIH0KLQogRVhQT1JUX1NZTUJPTChkZWxfdGltZXJfc3luYyk7CiAjZW5kaWYKIApAQCAtMTI2OCw3ICsxMzA0LDcgQEAKIAlleHBpcmUgPSB0aW1lb3V0ICsgamlmZmllczsKIAogCXNldHVwX3RpbWVyX29uX3N0YWNrKCZ0aW1lciwgcHJvY2Vzc190aW1lb3V0LCAodW5zaWduZWQgbG9uZyljdXJyZW50KTsKLQlfX21vZF90aW1lcigmdGltZXIsIGV4cGlyZSk7CisJX19tb2RfdGltZXIoJnRpbWVyLCBleHBpcmUsIGZhbHNlKTsKIAlzY2hlZHVsZSgpOwogCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggZmJiMzAwZS4uODUwZTBiYSAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC0yMCw3ICsyMCw3IEBACiAKIHN0cnVjdCB1c2VyX25hbWVzcGFjZSBpbml0X3VzZXJfbnMgPSB7CiAJLmtyZWYgPSB7Ci0JCS5yZWZjb3VudAk9IEFUT01JQ19JTklUKDEpLAorCQkucmVmY291bnQJPSBBVE9NSUNfSU5JVCgyKSwKIAl9LAogCS5jcmVhdG9yID0gJnJvb3RfdXNlciwKIH07CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDAzYzJjMjQuLjU0YWFmNGYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC0xMzYsMTIgKzEzNiw2IEBACiBjb25maWcgVEVYVFNFQVJDSF9GU00KIAl0cmlzdGF0ZQogCi0jCi0jIHBsaXN0IHN1cHBvcnQgaXMgc2VsZWN0I2VkIGlmIG5lZWRlZAotIwotY29uZmlnIFBMSVNUCi0JYm9vbGVhbgotCiBjb25maWcgSEFTX0lPTUVNCiAJYm9vbGVhbgogCWRlcGVuZHMgb24gIU5PX0lPTUVNCkBAIC0xNzQsNCArMTY4LDEwIEBACiAgICAgICAgYm9vbCAiRGlzYWJsZSBvYnNvbGV0ZSBjcHVtYXNrIGZ1bmN0aW9ucyIgaWYgREVCVUdfUEVSX0NQVV9NQVBTCiAgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCiAKKyMKKyMgTmV0bGluayBhdHRyaWJ1dGUgcGFyc2luZyBzdXBwb3J0IGlzIHNlbGVjdCdlZCBpZiBuZWVkZWQKKyMKK2NvbmZpZyBOTEFUVFIKKwlib29sCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMWJjZjljZC4uOGZlZTBhMSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTg0Nyw2MCArODQ3LDcwIEBACiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCi1jb25maWcgRFlOQU1JQ19QUklOVEtfREVCVUcKLQlib29sICJFbmFibGUgZHluYW1pYyBwcmludGsoKSBjYWxsIHN1cHBvcnQiCitjb25maWcgRFlOQU1JQ19ERUJVRworCWJvb2wgIkVuYWJsZSBkeW5hbWljIHByaW50aygpIHN1cHBvcnQiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBQUklOVEsKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJc2VsZWN0IFBSSU5US19ERUJVRwogCWhlbHAKIAogCSAgQ29tcGlsZXMgZGVidWcgbGV2ZWwgbWVzc2FnZXMgaW50byB0aGUga2VybmVsLCB3aGljaCB3b3VsZCBub3QKIAkgIG90aGVyd2lzZSBiZSBhdmFpbGFibGUgYXQgcnVudGltZS4gVGhlc2UgbWVzc2FnZXMgY2FuIHRoZW4gYmUKLQkgIGVuYWJsZWQvZGlzYWJsZWQgb24gYSBwZXIgbW9kdWxlIGJhc2lzLiBUaGlzIG1lY2hhbmlzbSBpbXBsaWNpdGx5Ci0JICBlbmFibGVzIGFsbCBwcl9kZWJ1ZygpIGFuZCBkZXZfZGJnKCkgY2FsbHMuIFRoZSBpbXBhY3Qgb2YgdGhpcwotCSAgY29tcGlsZSBvcHRpb24gaXMgYSBsYXJnZXIga2VybmVsIHRleHQgc2l6ZSBvZiBhYm91dCAyJS4KKwkgIGVuYWJsZWQvZGlzYWJsZWQgYmFzZWQgb24gdmFyaW91cyBsZXZlbHMgb2Ygc2NvcGUgLSBwZXIgc291cmNlIGZpbGUsCisJICBmdW5jdGlvbiwgbW9kdWxlLCBmb3JtYXQgc3RyaW5nLCBhbmQgbGluZSBudW1iZXIuIFRoaXMgbWVjaGFuaXNtCisJICBpbXBsaWNpdGx5IGVuYWJsZXMgYWxsIHByX2RlYnVnKCkgYW5kIGRldl9kYmcoKSBjYWxscy4gVGhlIGltcGFjdCBvZgorCSAgdGhpcyBjb21waWxlIG9wdGlvbiBpcyBhIGxhcmdlciBrZXJuZWwgdGV4dCBzaXplIG9mIGFib3V0IDIlLgogCiAJICBVc2FnZToKIAotCSAgRHluYW1pYyBkZWJ1Z2dpbmcgaXMgY29udHJvbGxlZCBieSB0aGUgZGVidWdmcyBmaWxlLAotCSAgZHluYW1pY19wcmludGsvbW9kdWxlcy4gVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgbW9kdWxlcyB0aGF0Ci0JICBjYW4gYmUgZW5hYmxlZC4gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyB0aGUgbW9kdWxlIG5hbWUsIGZvbGxvd2VkCi0JICBieSBhIHNldCBvZiBmbGFncyB0aGF0IGNhbiBiZSBlbmFibGVkLiBUaGUgZmlyc3QgZmxhZyBpcyBhbHdheXMgdGhlCi0JICAnZW5hYmxlZCcgZmxhZy4gRm9yIGV4YW1wbGU6CisJICBEeW5hbWljIGRlYnVnZ2luZyBpcyBjb250cm9sbGVkIHZpYSB0aGUgJ2R5bmFtaWNfZGVidWcvZGRlYnVnJyBmaWxlLAorCSAgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSAnZGVidWdmcycgZmlsZXN5c3RlbS4gVGh1cywgdGhlIGRlYnVnZnMKKwkgIGZpbGVzeXN0ZW0gbXVzdCBmaXJzdCBiZSBtb3VudGVkIGJlZm9yZSBtYWtpbmcgdXNlIG9mIHRoaXMgZmVhdHVyZS4KKwkgIFdlIHJlZmVyIHRoZSBjb250cm9sIGZpbGUgYXM6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1Zy4gVGhpcworCSAgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdGhlIGRlYnVnIHN0YXRlbWVudHMgdGhhdCBjYW4gYmUgZW5hYmxlZC4gVGhlCisJICBmb3JtYXQgZm9yIGVhY2ggbGluZSBvZiB0aGUgZmlsZSBpczoKIAotCQk8bW9kdWxlX25hbWU+IDxlbmFibGVkPTAvMT4KLQkJCQkuCi0JCQkJLgotCQkJCS4KKwkJZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CiAKLQkgIDxtb2R1bGVfbmFtZT4gOiBOYW1lIG9mIHRoZSBtb2R1bGUgaW4gd2hpY2ggdGhlIGRlYnVnIGNhbGwgcmVzaWRlcwotCSAgPGVuYWJsZWQ9MC8xPiA6IHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGFyZSBlbmFibGVkIG9yIG5vdAorCSAgZmlsZW5hbWUgOiBzb3VyY2UgZmlsZSBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBsaW5lbm8gOiBsaW5lIG51bWJlciBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBtb2R1bGUgOiBtb2R1bGUgdGhhdCBjb250YWlucyB0aGUgZGVidWcgc3RhdGVtZW50CisJICBmdW5jdGlvbiA6IGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGRlYnVnIHN0YXRlbWVudAorICAgICAgICAgIGZsYWdzIDogJ3AnIG1lYW5zIHRoZSBsaW5lIGlzIHR1cm5lZCAnb24nIGZvciBwcmludGluZworICAgICAgICAgIGZvcm1hdCA6IHRoZSBmb3JtYXQgdXNlZCBmb3IgdGhlIGRlYnVnIHN0YXRlbWVudAogCiAJICBGcm9tIGEgbGl2ZSBzeXN0ZW06CiAKLQkJc25kX2hkYV9pbnRlbCBlbmFibGVkPTAKLQkJZml4dXAgZW5hYmxlZD0wCi0JCWRyaXZlciBlbmFibGVkPTAKKwkJbnVsbGFyYm9yOn4gIyBjYXQgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCisJCSMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisJCWZzL2Fpby5jOjIyMiBbYWlvXV9fcHV0X2lvY3R4IC0gIl9fcHV0X2lvY3R4OlwwNDBmcmVlaW5nXDA0MCVwXDAxMiIKKwkJZnMvYWlvLmM6MjQ4IFthaW9daW9jdHhfYWxsb2MgLSAiRU5PTUVNOlwwNDBucl9ldmVudHNcMDQwdG9vXDA0MGhpZ2hcMDEyIgorCQlmcy9haW8uYzoxNzcwIFthaW9dc3lzX2lvX2NhbmNlbCAtICJjYWxsaW5nXDA0MGNhbmNlbFwwMTIiCiAKLQkgIEVuYWJsZSBhIG1vZHVsZToKKwkgIEV4YW1wbGUgdXNhZ2U6CiAKLQkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MSA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZW5hYmxlIHRoZSBtZXNzYWdlIGF0IGxpbmUgMTYwMyBvZiBmaWxlIHN2Y3NvY2suYworCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIERpc2FibGUgYSBtb2R1bGU6CisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIGZpbGUgc3Zjc29jay5jCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICAJJGVjaG8gInNldCBlbmFibGVkPTAgPG1vZHVsZV9uYW1lPiIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIHRoZSBORlMgc2VydmVyIG1vZHVsZQorCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ21vZHVsZSBuZnNkICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRW5hYmxlIGFsbCBtb2R1bGVzOgorCQkvLyBlbmFibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkJJGVjaG8gInNldCBlbmFibGVkPTEgYWxsIiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZGlzYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzIC1wJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRGlzYWJsZSBhbGwgbW9kdWxlczoKLQotCQkkZWNobyAic2V0IGVuYWJsZWQ9MCBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcwotCi0JICBGaW5hbGx5LCBwYXNzaW5nICJkeW5hbWljX3ByaW50ayIgYXQgdGhlIGNvbW1hbmQgbGluZSBlbmFibGVzCi0JICBkZWJ1Z2dpbmcgZm9yIGFsbCBtb2R1bGVzLiBUaGlzIG1vZGUgY2FuIGJlIHR1cm5lZCBvZmYgdmlhIHRoZSBhYm92ZQotCSAgZGlzYWJsZSBjb21tYW5kLgorCSAgU2VlIERvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKIHNvdXJjZSAic2FtcGxlcy9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMzJiMGU2NC4uOGJkYzY0NyAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtMTEsNyArMTEsOCBAQAogCSByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIFwKIAkgaWRyLm8gaW50X3NxcnQubyBleHRhYmxlLm8gcHJpb190cmVlLm8gXAogCSBzaGExLm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vIGFyZ3Zfc3BsaXQubyBcCi0JIHByb3BvcnRpb25zLm8gcHJpb19oZWFwLm8gcmF0ZWxpbWl0Lm8gc2hvd19tZW0ubyBpc19zaW5nbGVfdGhyZWFkZWQubworCSBwcm9wb3J0aW9ucy5vIHByaW9faGVhcC5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gXAorCSBpc19zaW5nbGVfdGhyZWFkZWQubyBwbGlzdC5vCiAKIGxpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwogbGliLSQoQ09ORklHX1NNUCkgKz0gY3B1bWFzay5vCkBAIC00MCw3ICs0MSw2IEBACiBsaWItJChDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUKSArPSBmaW5kX2xhc3RfYml0Lm8KIG9iai0kKENPTkZJR19HRU5FUklDX0hXRUlHSFQpICs9IGh3ZWlnaHQubwogb2JqLSQoQ09ORklHX0xPQ0tfS0VSTkVMKSArPSBrZXJuZWxfbG9jay5vCi1vYmotJChDT05GSUdfUExJU1QpICs9IHBsaXN0Lm8KIG9iai0kKENPTkZJR19ERUJVR19QUkVFTVBUKSArPSBzbXBfcHJvY2Vzc29yX2lkLm8KIG9iai0kKENPTkZJR19ERUJVR19MSVNUKSArPSBsaXN0X2RlYnVnLm8KIG9iai0kKENPTkZJR19ERUJVR19PQkpFQ1RTKSArPSBkZWJ1Z29iamVjdHMubwpAQCAtODIsNyArODIsOSBAQAogCiBvYmotJChDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSykgKz0gc3lzY2FsbC5vCiAKLW9iai0kKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykgKz0gZHluYW1pY19wcmludGsubworb2JqLSQoQ09ORklHX0RZTkFNSUNfREVCVUcpICs9IGR5bmFtaWNfZGVidWcubworCitvYmotJChDT05GSUdfTkxBVFRSKSArPSBubGF0dHIubwogCiBob3N0cHJvZ3MteQk6PSBnZW5fY3JjMzJ0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5oCmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19kZWJ1Zy5jIGIvbGliL2R5bmFtaWNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMxMzljCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2R5bmFtaWNfZGVidWcuYwpAQCAtMCwwICsxLDc2OSBAQAorLyoKKyAqIGxpYi9keW5hbWljX2RlYnVnLmMKKyAqCisgKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKKyAqIHNvdXJjZSBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KKyAqIEJ5IEdyZWcgQmFua3MgPGduYkBtZWxib3VybmUuc2dpLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9keW5hbWljX2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorCitleHRlcm4gc3RydWN0IF9kZGVidWcgX19zdGFydF9fX3ZlcmJvc2VbXTsKK2V4dGVybiBzdHJ1Y3QgX2RkZWJ1ZyBfX3N0b3BfX192ZXJib3NlW107CisKKy8qIGR5bmFtaWNfZGVidWdfZW5hYmxlZCwgYW5kIGR5bmFtaWNfZGVidWdfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfZGVidWdfZW5hYmxlZCk7Citsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkMjsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfZGVidWdfZW5hYmxlZDIpOworCitzdHJ1Y3QgZGRlYnVnX3RhYmxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJY2hhciAqbW9kX25hbWU7CisJdW5zaWduZWQgaW50IG51bV9kZGVidWdzOworCXVuc2lnbmVkIGludCBudW1fZW5hYmxlZDsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZGRlYnVnczsKK307CisKK3N0cnVjdCBkZGVidWdfcXVlcnkgeworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IGNoYXIgKm1vZHVsZTsKKwljb25zdCBjaGFyICpmdW5jdGlvbjsKKwljb25zdCBjaGFyICpmb3JtYXQ7CisJdW5zaWduZWQgaW50IGZpcnN0X2xpbmVubywgbGFzdF9saW5lbm87Cit9OworCitzdHJ1Y3QgZGRlYnVnX2l0ZXIgeworCXN0cnVjdCBkZGVidWdfdGFibGUgKnRhYmxlOworCXVuc2lnbmVkIGludCBpZHg7Cit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKGRkZWJ1Z19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoZGRlYnVnX3RhYmxlcyk7CitzdGF0aWMgaW50IHZlcmJvc2UgPSAwOworCisvKiBSZXR1cm4gdGhlIGxhc3QgcGFydCBvZiBhIHBhdGhuYW1lICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmJhc2VuYW1lKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqdGFpbCA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwlyZXR1cm4gdGFpbCA/IHRhaWwrMSA6IHBhdGg7Cit9CisKKy8qIGZvcm1hdCBhIHN0cmluZyBpbnRvIGJ1ZltdIHdoaWNoIGRlc2NyaWJlcyB0aGUgX2RkZWJ1ZydzIGZsYWdzICovCitzdGF0aWMgY2hhciAqZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKHN0cnVjdCBfZGRlYnVnICpkcCwgY2hhciAqYnVmLAorCQkJCSAgICBzaXplX3QgbWF4bGVuKQoreworCWNoYXIgKnAgPSBidWY7CisKKwlCVUdfT04obWF4bGVuIDwgNCk7CisJaWYgKGRwLT5mbGFncyAmIF9EUFJJTlRLX0ZMQUdTX1BSSU5UKQorCQkqcCsrID0gJ3AnOworCWlmIChwID09IGJ1ZikKKwkJKnArKyA9ICctJzsKKwkqcCA9ICdcMCc7CisKKwlyZXR1cm4gYnVmOworfQorCisvKgorICogbXVzdCBiZSBjYWxsZWQgd2l0aCBkZGVidWdfbG9jayBoZWxkCisgKi8KKworc3RhdGljIGludCBkaXNhYmxlZF9oYXNoKGNoYXIgaGFzaCwgYm9vbCBmaXJzdF90YWJsZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwljaGFyIHRhYmxlX2hhc2hfdmFsdWU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0LCAmZGRlYnVnX3RhYmxlcywgbGluaykgeworCQlpZiAoZmlyc3RfdGFibGUpCisJCQl0YWJsZV9oYXNoX3ZhbHVlID0gZHQtPmRkZWJ1Z3MtPnByaW1hcnlfaGFzaDsKKwkJZWxzZQorCQkJdGFibGVfaGFzaF92YWx1ZSA9IGR0LT5kZGVidWdzLT5zZWNvbmRhcnlfaGFzaDsKKwkJaWYgKGR0LT5udW1fZW5hYmxlZCAmJiAoaGFzaCA9PSB0YWJsZV9oYXNoX3ZhbHVlKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFNlYXJjaCB0aGUgdGFibGVzIGZvciBfZGRlYnVnJ3Mgd2hpY2ggbWF0Y2ggdGhlIGdpdmVuCisgKiBgcXVlcnknIGFuZCBhcHBseSB0aGUgYGZsYWdzJyBhbmQgYG1hc2snIHRvIHRoZW0uICBUZWxscworICogdGhlIHVzZXIgd2hpY2ggZGRlYnVnJ3Mgd2VyZSBjaGFuZ2VkLCBvciB3aGV0aGVyIG5vbmUKKyAqIHdlcmUgbWF0Y2hlZC4KKyAqLworc3RhdGljIHZvaWQgZGRlYnVnX2NoYW5nZShjb25zdCBzdHJ1Y3QgZGRlYnVnX3F1ZXJ5ICpxdWVyeSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG1hc2spCit7CisJaW50IGk7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQ7CisJdW5zaWduZWQgaW50IG5ld2ZsYWdzOworCXVuc2lnbmVkIGludCBuZm91bmQgPSAwOworCWNoYXIgZmxhZ2J1Zls4XTsKKworCS8qIHNlYXJjaCBmb3IgbWF0Y2hpbmcgZGRlYnVncyAqLworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0LCAmZGRlYnVnX3RhYmxlcywgbGluaykgeworCisJCS8qIG1hdGNoIGFnYWluc3QgdGhlIG1vZHVsZSBuYW1lICovCisJCWlmIChxdWVyeS0+bW9kdWxlICE9IE5VTEwgJiYKKwkJICAgIHN0cmNtcChxdWVyeS0+bW9kdWxlLCBkdC0+bW9kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMCA7IGkgPCBkdC0+bnVtX2RkZWJ1Z3MgOyBpKyspIHsKKwkJCXN0cnVjdCBfZGRlYnVnICpkcCA9ICZkdC0+ZGRlYnVnc1tpXTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgc291cmNlIGZpbGVuYW1lICovCisJCQlpZiAocXVlcnktPmZpbGVuYW1lICE9IE5VTEwgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZpbGVuYW1lLCBkcC0+ZmlsZW5hbWUpICYmCisJCQkgICAgc3RyY21wKHF1ZXJ5LT5maWxlbmFtZSwgYmFzZW5hbWUoZHAtPmZpbGVuYW1lKSkpCisJCQkJY29udGludWU7CisKKwkJCS8qIG1hdGNoIGFnYWluc3QgdGhlIGZ1bmN0aW9uICovCisJCQlpZiAocXVlcnktPmZ1bmN0aW9uICE9IE5VTEwgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZ1bmN0aW9uLCBkcC0+ZnVuY3Rpb24pKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBmb3JtYXQgKi8KKwkJCWlmIChxdWVyeS0+Zm9ybWF0ICE9IE5VTEwgJiYKKwkJCSAgICBzdHJzdHIoZHAtPmZvcm1hdCwgcXVlcnktPmZvcm1hdCkgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgbGluZSBudW1iZXIgcmFuZ2UgKi8KKwkJCWlmIChxdWVyeS0+Zmlyc3RfbGluZW5vICYmCisJCQkgICAgZHAtPmxpbmVubyA8IHF1ZXJ5LT5maXJzdF9saW5lbm8pCisJCQkJY29udGludWU7CisJCQlpZiAocXVlcnktPmxhc3RfbGluZW5vICYmCisJCQkgICAgZHAtPmxpbmVubyA+IHF1ZXJ5LT5sYXN0X2xpbmVubykKKwkJCQljb250aW51ZTsKKworCQkJbmZvdW5kKys7CisKKwkJCW5ld2ZsYWdzID0gKGRwLT5mbGFncyAmIG1hc2spIHwgZmxhZ3M7CisJCQlpZiAobmV3ZmxhZ3MgPT0gZHAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIW5ld2ZsYWdzKQorCQkJCWR0LT5udW1fZW5hYmxlZC0tOworCQkJZWxzZSBpZiAoIWRwLWZsYWdzKQorCQkJCWR0LT5udW1fZW5hYmxlZCsrOworCQkJZHAtPmZsYWdzID0gbmV3ZmxhZ3M7CisJCQlpZiAobmV3ZmxhZ3MpIHsKKwkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQgfD0KKwkJCQkJCSgxTEwgPDwgZHAtPnByaW1hcnlfaGFzaCk7CisJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkMiB8PQorCQkJCQkJKDFMTCA8PCBkcC0+c2Vjb25kYXJ5X2hhc2gpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZGlzYWJsZWRfaGFzaChkcC0+cHJpbWFyeV9oYXNoLCB0cnVlKSkKKwkJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkICY9CisJCQkJCQl+KDFMTCA8PCBkcC0+cHJpbWFyeV9oYXNoKTsKKwkJCQlpZiAoZGlzYWJsZWRfaGFzaChkcC0+c2Vjb25kYXJ5X2hhc2gsIGZhbHNlKSkKKwkJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkMiAmPQorCQkJCQkJfigxTEwgPDwgZHAtPnNlY29uZGFyeV9oYXNoKTsKKwkJCX0KKwkJCWlmICh2ZXJib3NlKQorCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJImRkZWJ1ZzogY2hhbmdlZCAlczolZCBbJXNdJXMgJXNcbiIsCisJCQkJCWRwLT5maWxlbmFtZSwgZHAtPmxpbmVubywKKwkJCQkJZHQtPm1vZF9uYW1lLCBkcC0+ZnVuY3Rpb24sCisJCQkJCWRkZWJ1Z19kZXNjcmliZV9mbGFncyhkcCwgZmxhZ2J1ZiwKKwkJCQkJCQlzaXplb2YoZmxhZ2J1ZikpKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICghbmZvdW5kICYmIHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gImRkZWJ1Zzogbm8gbWF0Y2hlcyBmb3IgcXVlcnlcbiIpOworfQorCisvKgorICogU3BsaXQgdGhlIGJ1ZmZlciBgYnVmJyBpbnRvIHNwYWNlLXNlcGFyYXRlZCB3b3Jkcy4KKyAqIEhhbmRsZXMgc2ltcGxlICIgYW5kICcgcXVvdGluZywgaS5lLiB3aXRob3V0IG5lc3RlZCwKKyAqIGVtYmVkZGVkIG9yIGVzY2FwZWQgXCIuICBSZXR1cm4gdGhlIG51bWJlciBvZiB3b3JkcworICogb3IgPDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3Rva2VuaXplKGNoYXIgKmJ1ZiwgY2hhciAqd29yZHNbXSwgaW50IG1heHdvcmRzKQoreworCWludCBud29yZHMgPSAwOworCisJd2hpbGUgKCpidWYpIHsKKwkJY2hhciAqZW5kOworCisJCS8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisJCXdoaWxlICgqYnVmICYmIGlzc3BhY2UoKmJ1ZikpCisJCQlidWYrKzsKKwkJaWYgKCEqYnVmKQorCQkJYnJlYWs7CS8qIG9oLCBpdCB3YXMgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCisJCS8qIFJ1biBgZW5kJyBvdmVyIGEgd29yZCwgZWl0aGVyIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIG9yIHF1b3RlZCAqLworCQlpZiAoKmJ1ZiA9PSAnIicgfHwgKmJ1ZiA9PSAnXCcnKSB7CisJCQlpbnQgcXVvdGUgPSAqYnVmKys7CisJCQlmb3IgKGVuZCA9IGJ1ZiA7ICplbmQgJiYgKmVuZCAhPSBxdW90ZSA7IGVuZCsrKQorCQkJCTsKKwkJCWlmICghKmVuZCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLyogdW5jbG9zZWQgcXVvdGUgKi8KKwkJfSBlbHNlIHsKKwkJCWZvciAoZW5kID0gYnVmIDsgKmVuZCAmJiAhaXNzcGFjZSgqZW5kKSA7IGVuZCsrKQorCQkJCTsKKwkJCUJVR19PTihlbmQgPT0gYnVmKTsKKwkJfQorCQkvKiBIZXJlIGBidWYnIGlzIHRoZSBzdGFydCBvZiB0aGUgd29yZCwgYGVuZCcgaXMgb25lIHBhc3QgdGhlIGVuZCAqLworCisJCWlmIChud29yZHMgPT0gbWF4d29yZHMpCisJCQlyZXR1cm4gLUVJTlZBTDsJLyogcmFuIG91dCBvZiB3b3Jkc1tdIGJlZm9yZSBieXRlcyAqLworCQlpZiAoKmVuZCkKKwkJCSplbmQrKyA9ICdcMCc7CS8qIHRlcm1pbmF0ZSB0aGUgd29yZCAqLworCQl3b3Jkc1tud29yZHMrK10gPSBidWY7CisJCWJ1ZiA9IGVuZDsKKwl9CisKKwlpZiAodmVyYm9zZSkgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNwbGl0IGludG8gd29yZHM6IiwgX19mdW5jX18pOworCQlmb3IgKGkgPSAwIDsgaSA8IG53b3JkcyA7IGkrKykKKwkJCXByaW50aygiIFwiJXNcIiIsIHdvcmRzW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKworCXJldHVybiBud29yZHM7Cit9CisKKy8qCisgKiBQYXJzZSBhIHNpbmdsZSBsaW5lIG51bWJlci4gIE5vdGUgdGhhdCB0aGUgZW1wdHkgc3RyaW5nICIiCisgKiBpcyB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlIGFuZCBjb252ZXJ0ZWQgdG8gemVybywgd2hpY2gKKyAqIGlzIGxhdGVyIHRyZWF0ZWQgYXMgYSAiZG9uJ3QgY2FyZSIgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX2xpbmVubyhjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqdmFsKQoreworCWNoYXIgKmVuZCA9IE5VTEw7CisJQlVHX09OKHN0ciA9PSBOVUxMKTsKKwlpZiAoKnN0ciA9PSAnXDAnKSB7CisJCSp2YWwgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJKnZhbCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZCwgMTApOworCXJldHVybiBlbmQgPT0gTlVMTCB8fCBlbmQgPT0gc3RyIHx8ICplbmQgIT0gJ1wwJyA/IC1FSU5WQUwgOiAwOworfQorCisvKgorICogVW5kbyBvY3RhbCBlc2NhcGluZyBpbiBhIHN0cmluZywgaW5wbGFjZS4gIFRoaXMgaXMgdXNlZnVsIHRvCisgKiBhbGxvdyB0aGUgdXNlciB0byBleHByZXNzIGEgcXVlcnkgd2hpY2ggbWF0Y2hlcyBhIGZvcm1hdAorICogY29udGFpbmluZyBlbWJlZGRlZCBzcGFjZXMuCisgKi8KKyNkZWZpbmUgaXNvZGlnaXQoYykJCSgoYykgPj0gJzAnICYmIChjKSA8PSAnNycpCitzdGF0aWMgY2hhciAqdW5lc2NhcGUoY2hhciAqc3RyKQoreworCWNoYXIgKmluID0gc3RyOworCWNoYXIgKm91dCA9IHN0cjsKKworCXdoaWxlICgqaW4pIHsKKwkJaWYgKCppbiA9PSAnXFwnKSB7CisJCQlpZiAoaW5bMV0gPT0gJ1xcJykgeworCQkJCSpvdXQrKyA9ICdcXCc7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoaW5bMV0gPT0gJ3QnKSB7CisJCQkJKm91dCsrID0gJ1x0JzsKKwkJCQlpbiArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChpblsxXSA9PSAnbicpIHsKKwkJCQkqb3V0KysgPSAnXG4nOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGlzb2RpZ2l0KGluWzFdKSAmJgorCQkJICAgICAgICAgaXNvZGlnaXQoaW5bMl0pICYmCisJCQkgICAgICAgICBpc29kaWdpdChpblszXSkpIHsKKwkJCQkqb3V0KysgPSAoKGluWzFdIC0gJzAnKTw8NikgfAorCQkJCSAgICAgICAgICAoKGluWzJdIC0gJzAnKTw8MykgfAorCQkJCSAgICAgICAgICAoaW5bM10gLSAnMCcpOworCQkJCWluICs9IDQ7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJKm91dCsrID0gKmluKys7CisJfQorCSpvdXQgPSAnXDAnOworCisJcmV0dXJuIHN0cjsKK30KKworLyoKKyAqIFBhcnNlIHdvcmRzW10gYXMgYSBkZGVidWcgcXVlcnkgc3BlY2lmaWNhdGlvbiwgd2hpY2ggaXMgYSBzZXJpZXMKKyAqIG9mIChrZXl3b3JkLCB2YWx1ZSkgcGFpcnMgY2hvc2VuIGZyb20gdGhlc2UgcG9zc2liaWxpdGllczoKKyAqCisgKiBmdW5jIDxmdW5jdGlvbi1uYW1lPgorICogZmlsZSA8ZnVsbC1wYXRobmFtZT4KKyAqIGZpbGUgPGJhc2UtZmlsZW5hbWU+CisgKiBtb2R1bGUgPG1vZHVsZS1uYW1lPgorICogZm9ybWF0IDxlc2NhcGVkLXN0cmluZy10by1maW5kLWluLWZvcm1hdD4KKyAqIGxpbmUgPGxpbmVubz4KKyAqIGxpbmUgPGZpcnN0LWxpbmVubz4tPGxhc3QtbGluZW5vPiAvLyB3aGVyZSBlaXRoZXIgbWF5IGJlIGVtcHR5CisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3BhcnNlX3F1ZXJ5KGNoYXIgKndvcmRzW10sIGludCBud29yZHMsCisJCQkgICAgICAgc3RydWN0IGRkZWJ1Z19xdWVyeSAqcXVlcnkpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBjaGVjayB3ZSBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIHdvcmRzICovCisJaWYgKG53b3JkcyAlIDIgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtc2V0KHF1ZXJ5LCAwLCBzaXplb2YoKnF1ZXJ5KSk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IG53b3JkcyA7IGkgKz0gMikgeworCQlpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZ1bmMiKSkKKwkJCXF1ZXJ5LT5mdW5jdGlvbiA9IHdvcmRzW2krMV07CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJmaWxlIikpCisJCQlxdWVyeS0+ZmlsZW5hbWUgPSB3b3Jkc1tpKzFdOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAibW9kdWxlIikpCisJCQlxdWVyeS0+bW9kdWxlID0gd29yZHNbaSsxXTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZvcm1hdCIpKQorCQkJcXVlcnktPmZvcm1hdCA9IHVuZXNjYXBlKHdvcmRzW2krMV0pOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAibGluZSIpKSB7CisJCQljaGFyICpmaXJzdCA9IHdvcmRzW2krMV07CisJCQljaGFyICpsYXN0ID0gc3RyY2hyKGZpcnN0LCAnLScpOworCQkJaWYgKGxhc3QpCisJCQkJKmxhc3QrKyA9ICdcMCc7CisJCQlpZiAocGFyc2VfbGluZW5vKGZpcnN0LCAmcXVlcnktPmZpcnN0X2xpbmVubykgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGxhc3QgIT0gTlVMTCkgeworCQkJCS8qIHJhbmdlIDxmaXJzdD4tPGxhc3Q+ICovCisJCQkJaWYgKHBhcnNlX2xpbmVubyhsYXN0LCAmcXVlcnktPmxhc3RfbGluZW5vKSA8IDApCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQlxdWVyeS0+bGFzdF9saW5lbm8gPSBxdWVyeS0+Zmlyc3RfbGluZW5vOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBrZXl3b3JkIFwiJXNcIlxuIiwKKwkJCQkJX19mdW5jX18sIHdvcmRzW2ldKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBxLT5mdW5jdGlvbj1cIiVzXCIgcS0+ZmlsZW5hbWU9XCIlc1wiICIKKwkJICAgICAgICJxLT5tb2R1bGU9XCIlc1wiIHEtPmZvcm1hdD1cIiVzXCIgcS0+bGluZW5vPSV1LSV1XG4iLAorCQkJX19mdW5jX18sIHF1ZXJ5LT5mdW5jdGlvbiwgcXVlcnktPmZpbGVuYW1lLAorCQkJcXVlcnktPm1vZHVsZSwgcXVlcnktPmZvcm1hdCwgcXVlcnktPmZpcnN0X2xpbmVubywKKwkJCXF1ZXJ5LT5sYXN0X2xpbmVubyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBhcnNlIGBzdHInIGFzIGEgZmxhZ3Mgc3BlY2lmaWNhdGlvbiwgZm9ybWF0IFstKz1dW3BdKy4KKyAqIFNldHMgdXAgKm1hc2twIGFuZCAqZmxhZ3NwIHRvIGJlIHVzZWQgd2hlbiBjaGFuZ2luZyB0aGUKKyAqIGZsYWdzIGZpZWxkcyBvZiBtYXRjaGVkIF9kZGVidWcncy4gIFJldHVybnMgMCBvbiBzdWNjZXNzCisgKiBvciA8MCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBkZGVidWdfcGFyc2VfZmxhZ3MoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKmZsYWdzcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKm1hc2twKQoreworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwlpbnQgb3AgPSAnPSc7CisKKwlzd2l0Y2ggKCpzdHIpIHsKKwljYXNlICcrJzoKKwljYXNlICctJzoKKwljYXNlICc9JzoKKwkJb3AgPSAqc3RyKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wPSclYydcbiIsIF9fZnVuY19fLCBvcCk7CisKKwlmb3IgKCA7ICpzdHIgOyArK3N0cikgeworCQlzd2l0Y2ggKCpzdHIpIHsKKwkJY2FzZSAncCc6CisJCQlmbGFncyB8PSBfRFBSSU5US19GTEFHU19QUklOVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKGZsYWdzID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZmxhZ3M9MHgleFxuIiwgX19mdW5jX18sIGZsYWdzKTsKKworCS8qIGNhbGN1bGF0ZSBmaW5hbCAqZmxhZ3NwLCAqbWFza3AgYWNjb3JkaW5nIHRvIG1hc2sgYW5kIG9wICovCisJc3dpdGNoIChvcCkgeworCWNhc2UgJz0nOgorCQkqbWFza3AgPSAwOworCQkqZmxhZ3NwID0gZmxhZ3M7CisJCWJyZWFrOworCWNhc2UgJysnOgorCQkqbWFza3AgPSB+MFU7CisJCSpmbGFnc3AgPSBmbGFnczsKKwkJYnJlYWs7CisJY2FzZSAnLSc6CisJCSptYXNrcCA9IH5mbGFnczsKKwkJKmZsYWdzcCA9IDA7CisJCWJyZWFrOworCX0KKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICpmbGFnc3A9MHgleCAqbWFza3A9MHgleFxuIiwKKwkJCV9fZnVuY19fLCAqZmxhZ3NwLCAqbWFza3ApOworCXJldHVybiAwOworfQorCisvKgorICogRmlsZV9vcHMtPndyaXRlIG1ldGhvZCBmb3IgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29ucm9sLiAgR2F0aGVycyB0aGUKKyAqIGNvbW1hbmQgdGV4dCBmcm9tIHVzZXJzcGFjZSwgcGFyc2VzIGFuZCBleGVjdXRlcyBpdC4KKyAqLworc3RhdGljIHNzaXplX3QgZGRlYnVnX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJCSAgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZwKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IDAsIG1hc2sgPSAwOworCXN0cnVjdCBkZGVidWdfcXVlcnkgcXVlcnk7CisjZGVmaW5lIE1BWFdPUkRTIDkKKwlpbnQgbndvcmRzOworCWNoYXIgKndvcmRzW01BWFdPUkRTXTsKKwljaGFyIHRtcGJ1ZlsyNTZdOworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwkvKiB3ZSBkb24ndCBjaGVjayAqb2ZmcCAtLSBtdWx0aXBsZSB3cml0ZXMoKSBhcmUgYWxsb3dlZCAqLworCWlmIChsZW4gPiBzaXplb2YodG1wYnVmKS0xKQorCQlyZXR1cm4gLUUyQklHOworCWlmIChjb3B5X2Zyb21fdXNlcih0bXBidWYsIHVidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCXRtcGJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlYWQgJWQgYnl0ZXMgZnJvbSB1c2Vyc3BhY2VcbiIsCisJCQlfX2Z1bmNfXywgKGludClsZW4pOworCisJbndvcmRzID0gZGRlYnVnX3Rva2VuaXplKHRtcGJ1Ziwgd29yZHMsIE1BWFdPUkRTKTsKKwlpZiAobndvcmRzIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRkZWJ1Z19wYXJzZV9xdWVyeSh3b3JkcywgbndvcmRzLTEsICZxdWVyeSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZGVidWdfcGFyc2VfZmxhZ3Mod29yZHNbbndvcmRzLTFdLCAmZmxhZ3MsICZtYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBhY3R1YWxseSBnbyBhbmQgaW1wbGVtZW50IHRoZSBjaGFuZ2UgKi8KKwlkZGVidWdfY2hhbmdlKCZxdWVyeSwgZmxhZ3MsIG1hc2spOworCisJKm9mZnAgKz0gbGVuOworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBTZXQgdGhlIGl0ZXJhdG9yIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBfZGRlYnVnIG9iamVjdAorICogYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCBmaXJzdCBvYmplY3QuICBSZXR1cm5zCisgKiBOVUxMIGlmIHRoZXJlIGFyZSBubyBfZGRlYnVncyBhdCBhbGwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyAqZGRlYnVnX2l0ZXJfZmlyc3Qoc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyKQoreworCWlmIChsaXN0X2VtcHR5KCZkZGVidWdfdGFibGVzKSkgeworCQlpdGVyLT50YWJsZSA9IE5VTEw7CisJCWl0ZXItPmlkeCA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKwlpdGVyLT50YWJsZSA9IGxpc3RfZW50cnkoZGRlYnVnX3RhYmxlcy5uZXh0LAorCQkJCSBzdHJ1Y3QgZGRlYnVnX3RhYmxlLCBsaW5rKTsKKwlpdGVyLT5pZHggPSAwOworCXJldHVybiAmaXRlci0+dGFibGUtPmRkZWJ1Z3NbaXRlci0+aWR4XTsKK30KKworLyoKKyAqIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHBvaW50IHRvIHRoZSBuZXh0IF9kZGVidWcKKyAqIG9iamVjdCBmcm9tIHRoZSBvbmUgdGhlIGl0ZXJhdG9yIGN1cnJlbnRseSBwb2ludHMgYXQsCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBfZGRlYnVnLiAgUmV0dXJucworICogTlVMTCBpZiB0aGUgaXRlcmF0b3IgaGFzIHNlZW4gYWxsIHRoZSBfZGRlYnVncy4KKyAqLworc3RhdGljIHN0cnVjdCBfZGRlYnVnICpkZGVidWdfaXRlcl9uZXh0KHN0cnVjdCBkZGVidWdfaXRlciAqaXRlcikKK3sKKwlpZiAoaXRlci0+dGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCsraXRlci0+aWR4ID09IGl0ZXItPnRhYmxlLT5udW1fZGRlYnVncykgeworCQkvKiBpdGVyYXRlIHRvIG5leHQgdGFibGUgKi8KKwkJaXRlci0+aWR4ID0gMDsKKwkJaWYgKGxpc3RfaXNfbGFzdCgmaXRlci0+dGFibGUtPmxpbmssICZkZGVidWdfdGFibGVzKSkgeworCQkJaXRlci0+dGFibGUgPSBOVUxMOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaXRlci0+dGFibGUgPSBsaXN0X2VudHJ5KGl0ZXItPnRhYmxlLT5saW5rLm5leHQsCisJCQkJCSBzdHJ1Y3QgZGRlYnVnX3RhYmxlLCBsaW5rKTsKKwl9CisJcmV0dXJuICZpdGVyLT50YWJsZS0+ZGRlYnVnc1tpdGVyLT5pZHhdOworfQorCisvKgorICogU2VxX29wcyBzdGFydCBtZXRob2QuICBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5CisgKiByZWFkKCkgY2FsbCBmcm9tIHVzZXJzcGFjZS4gIFRha2VzIHRoZSBkZGVidWdfbG9jayBhbmQKKyAqIHNlZWtzIHRoZSBzZXFfZmlsZSdzIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAqLworc3RhdGljIHZvaWQgKmRkZWJ1Z19wcm9jX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZHA7CisJaW50IG4gPSAqcG9zOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCAqcG9zPSVsbGRcbiIsCisJCQlfX2Z1bmNfXywgbSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zKTsKKworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICghbikKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKwlpZiAobiA8IDApCisJCXJldHVybiBOVUxMOworCWRwID0gZGRlYnVnX2l0ZXJfZmlyc3QoaXRlcik7CisJd2hpbGUgKGRwICE9IE5VTEwgJiYgLS1uID4gMCkKKwkJZHAgPSBkZGVidWdfaXRlcl9uZXh0KGl0ZXIpOworCXJldHVybiBkcDsKK30KKworLyoKKyAqIFNlcV9vcHMgbmV4dCBtZXRob2QuICBDYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aXRoaW4gYSByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UsIHdpdGggZGRlYnVnX2xvY2sgaGVsZC4gIFdhbGtzIHRvIHRoZQorICogbmV4dCBfZGRlYnVnIG9iamVjdCB3aXRoIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgaGVhZGVyIGxpbmUuCisgKi8KK3N0YXRpYyB2b2lkICpkZGVidWdfcHJvY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZHA7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZCBtPSVwIHA9JXAgKnBvcz0lbGxkXG4iLAorCQkJX19mdW5jX18sIG0sIHAsICh1bnNpZ25lZCBsb25nIGxvbmcpKnBvcyk7CisKKwlpZiAocCA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCWRwID0gZGRlYnVnX2l0ZXJfZmlyc3QoaXRlcik7CisJZWxzZQorCQlkcCA9IGRkZWJ1Z19pdGVyX25leHQoaXRlcik7CisJKysqcG9zOworCXJldHVybiBkcDsKK30KKworLyoKKyAqIFNlcV9vcHMgc2hvdyBtZXRob2QuICBDYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aXRoaW4gYSByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UsIHdpdGggZGRlYnVnX2xvY2sgaGVsZC4gIEZvcm1hdHMgdGhlCisgKiBjdXJyZW50IF9kZGVidWcgYXMgYSBzaW5nbGUgaHVtYW4tcmVhZGFibGUgbGluZSwgd2l0aCBhCisgKiBzcGVjaWFsIGNhc2UgZm9yIHRoZSBoZWFkZXIgbGluZS4KKyAqLworc3RhdGljIGludCBkZGVidWdfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBfZGRlYnVnICpkcCA9IHA7CisJY2hhciBmbGFnc2J1Zls4XTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcFxuIiwKKwkJCV9fZnVuY19fLCBtLCBwKTsKKworCWlmIChwID09IFNFUV9TVEFSVF9UT0tFTikgeworCQlzZXFfcHV0cyhtLAorCQkJIiMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihtLCAiJXM6JXUgWyVzXSVzICVzIFwiIiwKKwkJICAgZHAtPmZpbGVuYW1lLCBkcC0+bGluZW5vLAorCQkgICBpdGVyLT50YWJsZS0+bW9kX25hbWUsIGRwLT5mdW5jdGlvbiwKKwkJICAgZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKGRwLCBmbGFnc2J1Ziwgc2l6ZW9mKGZsYWdzYnVmKSkpOworCXNlcV9lc2NhcGUobSwgZHAtPmZvcm1hdCwgIlx0XHJcblwiIik7CisJc2VxX3B1dHMobSwgIlwiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2VxX29wcyBzdG9wIG1ldGhvZC4gIENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcmVhZCgpCisgKiBjYWxsIGZyb20gdXNlcnNwYWNlLiAgRHJvcHMgZGRlYnVnX2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIGRkZWJ1Z19wcm9jX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcFxuIiwKKwkJCV9fZnVuY19fLCBtLCBwKTsKKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZGVidWdfcHJvY19zZXFvcHMgPSB7CisJLnN0YXJ0ID0gZGRlYnVnX3Byb2Nfc3RhcnQsCisJLm5leHQgPSBkZGVidWdfcHJvY19uZXh0LAorCS5zaG93ID0gZGRlYnVnX3Byb2Nfc2hvdywKKwkuc3RvcCA9IGRkZWJ1Z19wcm9jX3N0b3AKK307CisKKy8qCisgKiBGaWxlX29wcy0+b3BlbiBtZXRob2QgZm9yIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wuICBEb2VzIHRoZSBzZXFfZmlsZQorICogc2V0dXAgZGFuY2UsIGFuZCBhbHNvIGNyZWF0ZXMgYW4gaXRlcmF0b3IgdG8gd2FsayB0aGUgX2RkZWJ1Z3MuCisgKiBOb3RlIHRoYXQgd2UgY3JlYXRlIGEgc2VxX2ZpbGUgYWx3YXlzLCBldmVuIGZvciBPX1dST05MWSBmaWxlcworICogd2hlcmUgaXQncyBub3QgbmVlZGVkLCBhcyBkb2luZyBzbyBzaW1wbGlmaWVzIHRoZSAtPnJlbGVhc2UgbWV0aG9kLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyOworCWludCBlcnI7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGl0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBzZXFfb3BlbihmaWxlLCAmZGRlYnVnX3Byb2Nfc2Vxb3BzKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGl0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKwkoKHN0cnVjdCBzZXFfZmlsZSAqKSBmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlID0gaXRlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGRlYnVnX3Byb2NfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRkZWJ1Z19wcm9jX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkud3JpdGUgPSBkZGVidWdfcHJvY193cml0ZQorfTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGRkZWJ1Z190YWJsZSBmb3IgdGhlIGdpdmVuIG1vZHVsZQorICogYW5kIGFkZCBpdCB0byB0aGUgZ2xvYmFsIGxpc3QuCisgKi8KK2ludCBkZGVidWdfYWRkX21vZHVsZShzdHJ1Y3QgX2RkZWJ1ZyAqdGFiLCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwljaGFyICpuZXdfbmFtZTsKKworCWR0ID0ga3phbGxvYyhzaXplb2YoKmR0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGR0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ld19uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X25hbWUgPT0gTlVMTCkgeworCQlrZnJlZShkdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkdC0+bW9kX25hbWUgPSBuZXdfbmFtZTsKKwlkdC0+bnVtX2RkZWJ1Z3MgPSBuOworCWR0LT5udW1fZW5hYmxlZCA9IDA7CisJZHQtPmRkZWJ1Z3MgPSB0YWI7CisKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZHQtPmxpbmssICZkZGVidWdfdGFibGVzKTsKKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIldSBkZWJ1ZyBwcmludHMgaW4gbW9kdWxlICVzXG4iLAorCQkJCSBuLCBkdC0+bW9kX25hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGRlYnVnX2FkZF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBkZGVidWdfdGFibGVfZnJlZShzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdCkKK3sKKwlsaXN0X2RlbF9pbml0KCZkdC0+bGluayk7CisJa2ZyZWUoZHQtPm1vZF9uYW1lKTsKKwlrZnJlZShkdCk7Cit9CisKKy8qCisgKiBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgdW5sb2FkZWQuICBSZW1vdmVzCisgKiBhbnkgZGRlYnVnX3RhYmxlJ3Mgd2hpY2ggcG9pbnQgYXQgdGhlIG1vZHVsZS4KKyAqLworaW50IGRkZWJ1Z19yZW1vdmVfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKQoreworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0LCAqbmV4dGR0OworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZW1vdmluZyBtb2R1bGUgXCIlc1wiXG4iLAorCQkJCV9fZnVuY19fLCBtb2RfbmFtZSk7CisKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR0LCBuZXh0ZHQsICZkZGVidWdfdGFibGVzLCBsaW5rKSB7CisJCWlmICghc3RyY21wKGR0LT5tb2RfbmFtZSwgbW9kX25hbWUpKSB7CisJCQlkZGVidWdfdGFibGVfZnJlZShkdCk7CisJCQlyZXQgPSAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZGVidWdfcmVtb3ZlX21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIGRkZWJ1Z19yZW1vdmVfYWxsX3RhYmxlcyh2b2lkKQoreworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRkZWJ1Z190YWJsZXMpKSB7CisJCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0ID0gbGlzdF9lbnRyeShkZGVidWdfdGFibGVzLm5leHQsCisJCQkJCQkgICAgICBzdHJ1Y3QgZGRlYnVnX3RhYmxlLAorCQkJCQkJICAgICAgbGluayk7CisJCWRkZWJ1Z190YWJsZV9mcmVlKGR0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfZGVidWdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRpciwgKmZpbGU7CisJc3RydWN0IF9kZGVidWcgKml0ZXIsICppdGVyX3N0YXJ0OworCWNvbnN0IGNoYXIgKm1vZG5hbWUgPSBOVUxMOworCWludCByZXQgPSAwOworCWludCBuID0gMDsKKworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHluYW1pY19kZWJ1ZyIsIE5VTEwpOworCWlmICghZGlyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY29udHJvbCIsIDA2NDQsIGRpciwgTlVMTCwKKwkJCQkJJmRkZWJ1Z19wcm9jX2ZvcHMpOworCWlmICghZmlsZSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKF9fc3RhcnRfX192ZXJib3NlICE9IF9fc3RvcF9fX3ZlcmJvc2UpIHsKKwkJaXRlciA9IF9fc3RhcnRfX192ZXJib3NlOworCQltb2RuYW1lID0gaXRlci0+bW9kbmFtZTsKKwkJaXRlcl9zdGFydCA9IGl0ZXI7CisJCWZvciAoOyBpdGVyIDwgX19zdG9wX19fdmVyYm9zZTsgaXRlcisrKSB7CisJCQlpZiAoc3RyY21wKG1vZG5hbWUsIGl0ZXItPm1vZG5hbWUpKSB7CisJCQkJcmV0ID0gZGRlYnVnX2FkZF9tb2R1bGUoaXRlcl9zdGFydCwgbiwgbW9kbmFtZSk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXRfZnJlZTsKKwkJCQluID0gMDsKKwkJCQltb2RuYW1lID0gaXRlci0+bW9kbmFtZTsKKwkJCQlpdGVyX3N0YXJ0ID0gaXRlcjsKKwkJCX0KKwkJCW4rKzsKKwkJfQorCQlyZXQgPSBkZGVidWdfYWRkX21vZHVsZShpdGVyX3N0YXJ0LCBuLCBtb2RuYW1lKTsKKwl9CitvdXRfZnJlZToKKwlpZiAocmV0KSB7CisJCWRkZWJ1Z19yZW1vdmVfYWxsX3RhYmxlcygpOworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlkZWJ1Z2ZzX3JlbW92ZShmaWxlKTsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChkeW5hbWljX2RlYnVnX2luaXQpOwpkaWZmIC0tZ2l0IGEvbGliL2R5bmFtaWNfcHJpbnRrLmMgYi9saWIvZHluYW1pY19wcmludGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1YTE5Ny4uMDAwMDAwMAotLS0gYS9saWIvZHluYW1pY19wcmludGsuYworKysgL2Rldi9udWxsCkBAIC0xLDQxNCArMCwwIEBACi0vKgotICogbGliL2R5bmFtaWNfcHJpbnRrLmMKLSAqCi0gKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKLSAqIHRoZWlyIHNvdXJjZSBtb2R1bGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4sIEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgbW9kX2RlYnVnIF9fc3RhcnRfX192ZXJib3NlW107Ci1leHRlcm4gc3RydWN0IG1vZF9kZWJ1ZyBfX3N0b3BfX192ZXJib3NlW107Ci0KLXN0cnVjdCBkZWJ1Z19uYW1lIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDI7Ci0JaW50IGhhc2gxOwotCWludCBoYXNoMjsKLQljaGFyICpuYW1lOwotCWludCBlbmFibGU7Ci0JaW50IHR5cGU7Ci19OwotCi1zdGF0aWMgaW50IG5yX2VudHJpZXM7Ci1zdGF0aWMgaW50IG51bV9lbmFibGVkOwotaW50IGR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZV90YWJsZVtERUJVR19IQVNIX1RBQkxFX1NJWkVdID0KLQl7IFswIC4uLiBERUJVR19IQVNIX1RBQkxFX1NJWkUtMV0gPSBITElTVF9IRUFEX0lOSVQgfTsKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBtb2R1bGVfdGFibGUyW0RFQlVHX0hBU0hfVEFCTEVfU0laRV0gPQotCXsgWzAgLi4uIERFQlVHX0hBU0hfVEFCTEVfU0laRS0xXSA9IEhMSVNUX0hFQURfSU5JVCB9Owotc3RhdGljIERFQ0xBUkVfTVVURVgoZGVidWdfbGlzdF9tdXRleCk7Ci0KLS8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKLSAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKLSAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgotICovCi1sb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDsKLUVYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQpOwotbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOwotRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19wcmludGtfZW5hYmxlZDIpOwotCi0vKiByZXR1cm5zIHRoZSBkZWJ1ZyBtb2R1bGUgcG9pbnRlci4gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVidWdfbmFtZSAqZmluZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kdWxlX25hbWUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7Ci0KLQllbGVtZW50ID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGVhZCA9ICZtb2R1bGVfdGFibGVbaV07Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKLQkJCWlmICghc3RyY21wKGVsZW1lbnQtPm5hbWUsIG1vZHVsZV9uYW1lKSkKLQkJCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIHJldHVybnMgdGhlIGRlYnVnIG1vZHVsZSBwb2ludGVyLiAqLwotc3RhdGljIHN0cnVjdCBkZWJ1Z19uYW1lICpmaW5kX2RlYnVnX21vZHVsZV9oYXNoKGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgaGFzaCkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKLQotCWVsZW1lbnQgPSBOVUxMOwotCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2hhc2hdOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKLQkJaWYgKCFzdHJjbXAoZWxlbWVudC0+bmFtZSwgbW9kdWxlX25hbWUpKQotCQkJcmV0dXJuIGVsZW1lbnQ7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgqLwotc3RhdGljIGludCBfX2FkZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCBoYXNoLCBpbnQgaGFzaDIpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKm5ldzsKLQljaGFyICptb2R1bGVfbmFtZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSkpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCW1vZHVsZV9uYW1lID0ga21hbGxvYyhzdHJsZW4obW9kX25hbWUpICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2R1bGVfbmFtZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0JbW9kdWxlX25hbWUgPSBzdHJjcHkobW9kdWxlX25hbWUsIG1vZF9uYW1lKTsKLQltb2R1bGVfbmFtZVtzdHJsZW4obW9kX25hbWUpXSA9ICdcMCc7Ci0JbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRlYnVnX25hbWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ldykgewotCQlrZnJlZShtb2R1bGVfbmFtZSk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQlJTklUX0hMSVNUX05PREUoJm5ldy0+aGxpc3QpOwotCUlOSVRfSExJU1RfTk9ERSgmbmV3LT5obGlzdDIpOwotCW5ldy0+bmFtZSA9IG1vZHVsZV9uYW1lOwotCW5ldy0+aGFzaDEgPSBoYXNoOwotCW5ldy0+aGFzaDIgPSBoYXNoMjsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJm5ldy0+aGxpc3QsICZtb2R1bGVfdGFibGVbaGFzaF0pOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3LT5obGlzdDIsICZtb2R1bGVfdGFibGUyW2hhc2gyXSk7Ci0JbnJfZW50cmllcysrOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLWludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OwotCWludCByZXQgPSAwOwotCi0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0JZWxlbWVudCA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQlpZiAoIWVsZW1lbnQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCWhsaXN0X2RlbF9yY3UoJmVsZW1lbnQtPmhsaXN0KTsKLQlobGlzdF9kZWxfcmN1KCZlbGVtZW50LT5obGlzdDIpOwotCXN5bmNocm9uaXplX3JjdSgpOwotCWtmcmVlKGVsZW1lbnQtPm5hbWUpOwotCWlmIChlbGVtZW50LT5lbmFibGUpCi0JCW51bV9lbmFibGVkLS07Ci0Ja2ZyZWUoZWxlbWVudCk7Ci0JbnJfZW50cmllcy0tOwotb3V0OgotCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7Ci0KLWludCByZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGNoYXIgKnNoYXJlX25hbWUsCi0JCQkJCWNoYXIgKmZsYWdzLCBpbnQgaGFzaCwgaW50IGhhc2gyKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOwotCWludCByZXQgPSAwOwotCi0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0JZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQlpZiAoIWVsZW0pIHsKLQkJaWYgKF9fYWRkX2RlYnVnX21vZHVsZShtb2RfbmFtZSwgaGFzaCwgaGFzaDIpKQotCQkJZ290byBvdXQ7Ci0JCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7Ci0JCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCAmJgotCQkJCSFzdHJjbXAobW9kX25hbWUsIHNoYXJlX25hbWUpKSB7Ci0JCQllbGVtLT5lbmFibGUgPSB0cnVlOwotCQkJbnVtX2VuYWJsZWQrKzsKLQkJfQotCX0KLQllbGVtLT50eXBlIHw9IHR5cGU7Ci1vdXQ6Ci0JdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7Ci0KLWludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgaW50IHZhbHVlLCBpbnQgaGFzaCkKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCkKLQkJcmV0dXJuIDE7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZV9oYXNoKG1vZF9uYW1lLCBoYXNoKTsKLQlpZiAoZWxlbSAmJiBlbGVtLT5lbmFibGUpCi0JCXJldCA9IDE7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIpOwotCi1zdGF0aWMgdm9pZCBzZXRfYWxsKGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWludCBpOwotCWxvbmcgbG9uZyBlbmFibGVfbWFzazsKLQotCWZvciAoaSA9IDA7IGkgPCBERUJVR19IQVNIX1RBQkxFX1NJWkU7IGkrKykgewotCQlpZiAobW9kdWxlX3RhYmxlW2ldLmZpcnN0ICE9IE5VTEwpIHsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7Ci0JCQkJZS0+ZW5hYmxlID0gZW5hYmxlOwotCQkJfQotCQl9Ci0JfQotCWlmIChlbmFibGUpCi0JCWVuYWJsZV9tYXNrID0gVUxMT05HX01BWDsKLQllbHNlCi0JCWVuYWJsZV9tYXNrID0gMDsKLQlkeW5hbWljX3ByaW50a19lbmFibGVkID0gZW5hYmxlX21hc2s7Ci0JZHluYW1pY19wcmludGtfZW5hYmxlZDIgPSBlbmFibGVfbWFzazsKLX0KLQotc3RhdGljIGludCBkaXNhYmxlZF9oYXNoKGludCBpLCBib29sIGZpcnN0X3RhYmxlKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCi0JaWYgKGZpcnN0X3RhYmxlKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7Ci0JCQlpZiAoZS0+ZW5hYmxlKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZTJbaV0sIGhsaXN0MikgewotCQkJaWYgKGUtPmVuYWJsZSkKLQkJCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHNzaXplX3QgcHJfZGVidWdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgKmJ1ZmZlciwgKnMsICp2YWx1ZV9zdHIsICpzZXR0aW5nX3N0cjsKLQlpbnQgZXJyLCB2YWx1ZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbSA9IE5VTEw7Ci0JaW50IGFsbCA9IDA7Ci0KLQlpZiAobGVuZ3RoID4gUEFHRV9TSVpFIHx8IGxlbmd0aCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVmZmVyID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZXJyID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGxlbmd0aCkpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAobGVuZ3RoIDwgUEFHRV9TSVpFKQotCQlidWZmZXJbbGVuZ3RoXSA9ICdcMCc7Ci0JZWxzZSBpZiAoYnVmZmVyW1BBR0VfU0laRS0xXSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOwotCi0JaWYgKHN0cm5jbXAoInNldCIsIGJ1ZmZlciwgMykpCi0JCWdvdG8gb3V0X3VwOwotCXMgPSBidWZmZXIgKyAzOwotCXNldHRpbmdfc3RyID0gc3Ryc2VwKCZzLCAiPSIpOwotCWlmIChzID09IE5VTEwpCi0JCWdvdG8gb3V0X3VwOwotCXNldHRpbmdfc3RyID0gc3Ryc3RyaXAoc2V0dGluZ19zdHIpOwotCXZhbHVlX3N0ciA9IHN0cnNlcCgmcywgIiAiKTsKLQlpZiAocyA9PSBOVUxMKQotCQlnb3RvIG91dF91cDsKLQlzID0gc3Ryc3RyaXAocyk7Ci0JaWYgKCFzdHJuY21wKHMsICJhbGwiLCAzKSkKLQkJYWxsID0gMTsKLQllbHNlCi0JCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShzKTsKLQlpZiAoIXN0cm5jbXAoc2V0dGluZ19zdHIsICJlbmFibGUiLCA2KSkgewotCQl2YWx1ZSA9ICEhc2ltcGxlX3N0cnRvbCh2YWx1ZV9zdHIsIE5VTEwsIDEwKTsKLQkJaWYgKGFsbCkgewotCQkJaWYgKHZhbHVlKSB7Ci0JCQkJc2V0X2FsbCh0cnVlKTsKLQkJCQludW1fZW5hYmxlZCA9IG5yX2VudHJpZXM7Ci0JCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX0FMTDsKLQkJCX0gZWxzZSB7Ci0JCQkJc2V0X2FsbChmYWxzZSk7Ci0JCQkJbnVtX2VuYWJsZWQgPSAwOwotCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotCQkJfQotCQkJZXJyID0gMDsKLQkJfSBlbHNlIGlmIChlbGVtKSB7Ci0JCQlpZiAodmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAwKSkgewotCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgfD0gKDFMTCA8PCBlbGVtLT5oYXNoMSk7Ci0JCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgfD0gKDFMTCA8PCBlbGVtLT5oYXNoMik7Ci0JCQkJZWxlbS0+ZW5hYmxlID0gMTsKLQkJCQludW1fZW5hYmxlZCsrOwotCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9TT01FOwotCQkJCWVyciA9IDA7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJImRlYnVnZ2luZyBlbmFibGVkIGZvciBtb2R1bGUgJXNcbiIsCi0JCQkJCWVsZW0tPm5hbWUpOwotCQkJfSBlbHNlIGlmICghdmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAxKSkgewotCQkJCWVsZW0tPmVuYWJsZSA9IDA7Ci0JCQkJbnVtX2VuYWJsZWQtLTsKLQkJCQlpZiAoZGlzYWJsZWRfaGFzaChlbGVtLT5oYXNoMSwgdHJ1ZSkpCi0JCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgJj0KLQkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMSk7Ci0JCQkJaWYgKGRpc2FibGVkX2hhc2goZWxlbS0+aGFzaDIsIGZhbHNlKSkKLQkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgJj0KLQkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMik7Ci0JCQkJaWYgKG51bV9lbmFibGVkKQotCQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfU09NRTsKLQkJCQllbHNlCi0JCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotCQkJCWVyciA9IDA7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJImRlYnVnZ2luZyBkaXNhYmxlZCBmb3IgbW9kdWxlICVzXG4iLAotCQkJCQllbGVtLT5uYW1lKTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIWVycikKLQkJZXJyID0gbGVuZ3RoOwotb3V0X3VwOgotCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKLW91dDoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCAqcHJfZGVidWdfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuICgqcG9zIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFKSA/IHBvcyA6IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkICpwcl9kZWJ1Z19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCSgqcG9zKSsrOwotCWlmICgqcG9zID49IERFQlVHX0hBU0hfVEFCTEVfU0laRSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBvczsKLX0KLQotc3RhdGljIHZvaWQgcHJfZGVidWdfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQotewotCS8qIE5vdGhpbmcgdG8gZG8gKi8KLX0KLQotc3RhdGljIGludCBwcl9kZWJ1Z19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW07Ci0JdW5zaWduZWQgaW50IGkgPSAqKGxvZmZfdCAqKSB2OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2ldOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBub2RlLCBoZWFkLCBobGlzdCkgewotCQlzZXFfcHJpbnRmKHMsICIlcyBlbmFibGVkPSVkIiwgZWxlbS0+bmFtZSwgZWxlbS0+ZW5hYmxlKTsKLQkJc2VxX3ByaW50ZihzLCAiXG4iKTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJfZGVidWdfc2VxX29wcyA9IHsKLQkuc3RhcnQgPSBwcl9kZWJ1Z19zZXFfc3RhcnQsCi0JLm5leHQgID0gcHJfZGVidWdfc2VxX25leHQsCi0JLnN0b3AgID0gcHJfZGVidWdfc2VxX3N0b3AsCi0JLnNob3cgID0gcHJfZGVidWdfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgcHJfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlscCwgJnByX2RlYnVnX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcl9kZWJ1Z19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHByX2RlYnVnX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLndyaXRlCQk9IHByX2RlYnVnX3dyaXRlLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX3ByaW50a19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGlyLCAqZmlsZTsKLQlzdHJ1Y3QgbW9kX2RlYnVnICppdGVyOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0KLQlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImR5bmFtaWNfcHJpbnRrIiwgTlVMTCk7Ci0JaWYgKCFkaXIpCi0JCXJldHVybiAtRU5PTUVNOwotCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtb2R1bGVzIiwgMDY0NCwgZGlyLCBOVUxMLAotCQkJCQkmcHJfZGVidWdfb3BlcmF0aW9ucyk7Ci0JaWYgKCFmaWxlKSB7Ci0JCWRlYnVnZnNfcmVtb3ZlKGRpcik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlmb3IgKHZhbHVlID0gKHVuc2lnbmVkIGxvbmcpX19zdGFydF9fX3ZlcmJvc2U7Ci0JCXZhbHVlIDwgKHVuc2lnbmVkIGxvbmcpX19zdG9wX19fdmVyYm9zZTsKLQkJdmFsdWUgKz0gc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpKSB7Ci0JCQlpdGVyID0gKHN0cnVjdCBtb2RfZGVidWcgKil2YWx1ZTsKLQkJCXJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGl0ZXItPm1vZG5hbWUsCi0JCQkJaXRlci0+dHlwZSwKLQkJCQlpdGVyLT5sb2dpY2FsX21vZG5hbWUsCi0JCQkJaXRlci0+ZmxhZ19uYW1lcywgaXRlci0+aGFzaCwgaXRlci0+aGFzaDIpOwotCX0KLQlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwpCi0JCXNldF9hbGwodHJ1ZSk7Ci0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChkeW5hbWljX3ByaW50a19pbml0KTsKLS8qIG1heSB3YW50IHRvIG1vdmUgdGhpcyBlYXJsaWVyIHNvIHdlIGNhbiBnZXQgdHJhY2VzIGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpZiAoc3RyKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfQUxMOwotCXJldHVybiAwOwotfQotLyogVXNlIGVhcmx5X3BhcmFtKCksIHNvIHdlIGNhbiBnZXQgZGVidWcgb3V0cHV0IGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi1lYXJseV9wYXJhbSgiZHluYW1pY19wcmludGsiLCBkeW5hbWljX3ByaW50a19zZXR1cCk7CmRpZmYgLS1naXQgYS9saWIva2VybmVsX2xvY2suYyBiL2xpYi9rZXJuZWxfbG9jay5jCmluZGV4IDAxYTNjMjIuLjM5ZjEwMjkgMTAwNjQ0Ci0tLSBhL2xpYi9rZXJuZWxfbG9jay5jCisrKyBiL2xpYi9rZXJuZWxfbG9jay5jCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgX19sb2NrZnVuYyBfX3JlYWNxdWlyZV9rZXJuZWxfbG9jayh2b2lkKQogewogCXdoaWxlICghX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSkgewotCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWNwdV9yZWxheCgpOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDA0ODdkMWYuLmE2ZGVjMzIgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nIHVzZWQgdG8gYnVpbGQgdGhlIG5hbWUKICAqIEB2YXJnczogdmFyZ3MgdG8gZm9ybWF0IHRoZSBzdHJpbmcuCiAgKi8KLXN0YXRpYyBpbnQga29iamVjdF9zZXRfbmFtZV92YXJncyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZm10LAoraW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKIAkJCQkgIHZhX2xpc3QgdmFyZ3MpCiB7CiAJY29uc3QgY2hhciAqb2xkX25hbWUgPSBrb2JqLT5uYW1lOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCAzMTgzMjhkZC4uOTdhNzc3YSAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTExOCw2ICsxMTgsMTMgQEAKIAlrc2V0ID0gdG9wX2tvYmotPmtzZXQ7CiAJdWV2ZW50X29wcyA9IGtzZXQtPnVldmVudF9vcHM7CiAKKwkvKiBza2lwIHRoZSBldmVudCwgaWYgdWV2ZW50X3N1cHByZXNzIGlzIHNldCovCisJaWYgKGtvYmotPnVldmVudF9zdXBwcmVzcykgeworCQlwcl9kZWJ1Zygia29iamVjdDogJyVzJyAoJXApOiAlczogdWV2ZW50X3N1cHByZXNzICIKKwkJCQkgImNhdXNlZCB0aGUgZXZlbnQgdG8gZHJvcCFcbiIsCisJCQkJIGtvYmplY3RfbmFtZShrb2JqKSwga29iaiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CiAJLyogc2tpcCB0aGUgZXZlbnQsIGlmIHRoZSBmaWx0ZXIgcmV0dXJucyB6ZXJvLiAqLwogCWlmICh1ZXZlbnRfb3BzICYmIHVldmVudF9vcHMtPmZpbHRlcikKIAkJaWYgKCF1ZXZlbnRfb3BzLT5maWx0ZXIoa3NldCwga29iaikpIHsKQEAgLTIyNyw2ICsyMzQsOSBAQAogCQkJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IDE7CiAJCQlyZXR2YWwgPSBuZXRsaW5rX2Jyb2FkY2FzdCh1ZXZlbnRfc29jaywgc2tiLCAwLCAxLAogCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCQkvKiBFTk9CVUZTIHNob3VsZCBiZSBoYW5kbGVkIGluIHVzZXJzcGFjZSAqLworCQkJaWYgKHJldHZhbCA9PSAtRU5PQlVGUykKKwkJCQlyZXR2YWwgPSAwOwogCQl9IGVsc2UKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJfQpAQCAtMjQ4LDcgKzI1OCw3IEBACiAJCQlnb3RvIGV4aXQ7CiAKIAkJcmV0dmFsID0gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LAotCQkJCQkgICAgIGVudi0+ZW52cCwgVU1IX1dBSVRfRVhFQyk7CisJCQkJCSAgICAgZW52LT5lbnZwLCBVTUhfTk9fV0FJVCk7CiAJfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYXR0ci5jIGIvbGliL25sYXR0ci5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIG5ldC9uZXRsaW5rL2F0dHIuYwpyZW5hbWUgdG8gbGliL25sYXR0ci5jCmluZGV4IDU2YzNjZTcuLjgwMDA5YTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2F0dHIuYworKysgYi9saWIvbmxhdHRyLmMKQEAgLTI4MSw2ICsyODEsNyBAQAogCXJldHVybiBkOwogfQogCisjaWZkZWYgQ09ORklHX05FVAogLyoqCiAgKiBfX25sYV9yZXNlcnZlIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYgogICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb24KQEAgLTMwNSw2ICszMDYsNyBAQAogCiAJcmV0dXJuIG5sYTsKIH0KK0VYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZSk7CiAKIC8qKgogICogX19ubGFfcmVzZXJ2ZV9ub2hkciAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCkBAIC0zMjUsNiArMzI3LDcgQEAKIAogCXJldHVybiBzdGFydDsKIH0KK0VYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7CiAKIC8qKgogICogbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCkBAIC0zNDUsNiArMzQ4LDcgQEAKIAogCXJldHVybiBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOwogfQorRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZSk7CiAKIC8qKgogICogbmxhX3Jlc2VydmVfbm9oZHIgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgpAQCAtMzYzLDYgKzM2Nyw3IEBACiAKIAlyZXR1cm4gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pOwogfQorRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZV9ub2hkcik7CiAKIC8qKgogICogX19ubGFfcHV0IC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCkBAIC0zODIsNiArMzg3LDcgQEAKIAlubGEgPSBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOwogCW1lbWNweShubGFfZGF0YShubGEpLCBkYXRhLCBhdHRybGVuKTsKIH0KK0VYUE9SVF9TWU1CT0woX19ubGFfcHV0KTsKIAogLyoqCiAgKiBfX25sYV9wdXRfbm9oZHIgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgpAQCAtMzk5LDYgKzQwNSw3IEBACiAJc3RhcnQgPSBfX25sYV9yZXNlcnZlX25vaGRyKHNrYiwgYXR0cmxlbik7CiAJbWVtY3B5KHN0YXJ0LCBkYXRhLCBhdHRybGVuKTsKIH0KK0VYUE9SVF9TWU1CT0woX19ubGFfcHV0X25vaGRyKTsKIAogLyoqCiAgKiBubGFfcHV0IC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCkBAIC00MTgsNiArNDI1LDcgQEAKIAlfX25sYV9wdXQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9wdXQpOwogCiAvKioKICAqIG5sYV9wdXRfbm9oZHIgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgpAQCAtNDM2LDYgKzQ0NCw3IEBACiAJX19ubGFfcHV0X25vaGRyKHNrYiwgYXR0cmxlbiwgZGF0YSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9wdXRfbm9oZHIpOwogCiAvKioKICAqIG5sYV9hcHBlbmQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlciBvciBwYWRkaW5nCkBAIC00NTQsMjAgKzQ2MywxMyBAQAogCW1lbWNweShza2JfcHV0KHNrYiwgYXR0cmxlbiksIGRhdGEsIGF0dHJsZW4pOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChubGFfYXBwZW5kKTsKKyNlbmRpZgogCiBFWFBPUlRfU1lNQk9MKG5sYV92YWxpZGF0ZSk7CiBFWFBPUlRfU1lNQk9MKG5sYV9wYXJzZSk7CiBFWFBPUlRfU1lNQk9MKG5sYV9maW5kKTsKIEVYUE9SVF9TWU1CT0wobmxhX3N0cmxjcHkpOwotRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlKTsKLUVYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmVfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChfX25sYV9wdXQpOwotRVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChubGFfcHV0KTsKLUVYUE9SVF9TWU1CT0wobmxhX3B1dF9ub2hkcik7CiBFWFBPUlRfU1lNQk9MKG5sYV9tZW1jcHkpOwogRVhQT1JUX1NZTUJPTChubGFfbWVtY21wKTsKIEVYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9hcHBlbmQpOwpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggOGU4NTg3NC4uYmU2OGM5NSAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYworKysgYi9tbS9iYWNraW5nLWRldi5jCkBAIC0yLDExICsyLDI0IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAordm9pZCBkZWZhdWx0X3VucGx1Z19pb19mbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKK30KK0VYUE9SVF9TWU1CT0woZGVmYXVsdF91bnBsdWdfaW9fZm4pOworCitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLnJhX3BhZ2VzCT0gVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQgLyBQQUdFX0NBQ0hFX1NJWkUsCisJLnN0YXRlCQk9IDAsCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTUFQX0NPUFksCisJLnVucGx1Z19pb19mbgk9IGRlZmF1bHRfdW5wbHVnX2lvX2ZuLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmJkaV9jbGFzczsKIApAQCAtMTY2LDkgKzE3OSwyMCBAQAogCWJkaV9kZWJ1Z19pbml0KCk7CiAJcmV0dXJuIDA7CiB9Ci0KIHBvc3Rjb3JlX2luaXRjYWxsKGJkaV9jbGFzc19pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgZGVmYXVsdF9iZGlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBiZGlfaW5pdCgmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKKwlpZiAoIWVycikKKwkJYmRpX3JlZ2lzdGVyKCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIE5VTEwsICJkZWZhdWx0Iik7CisKKwlyZXR1cm4gZXJyOworfQorc3Vic3lzX2luaXRjYWxsKGRlZmF1bHRfYmRpX2luaXQpOworCiBpbnQgYmRpX3JlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggMDBjZWQzZS4uMWFiYjkxOCAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMDQ5LDYgKzEwNTAsOSBAQAogCWVycm9yID0gc2VjdXJpdHlfZmlsZV9tbWFwKGZpbGUsIHJlcXByb3QsIHByb3QsIGZsYWdzLCBhZGRyLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKKwllcnJvciA9IGltYV9maWxlX21tYXAoZmlsZSwgcHJvdCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlyZXR1cm4gbW1hcF9yZWdpb24oZmlsZSwgYWRkciwgbGVuLCBmbGFncywgdm1fZmxhZ3MsIHBnb2ZmKTsKIH0KZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDc0ZGM1N2MuLjQwY2E3Y2QgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtNjYsNyArNjYsNyBAQAogLyoKICAqIFN0YXJ0IGJhY2tncm91bmQgd3JpdGViYWNrICh2aWEgcGRmbHVzaCkgYXQgdGhpcyBwZXJjZW50YWdlCiAgKi8KLWludCBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvID0gNTsKK2ludCBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvID0gMTA7CiAKIC8qCiAgKiBkaXJ0eV9iYWNrZ3JvdW5kX2J5dGVzIHN0YXJ0cyBhdCAwIChkaXNhYmxlZCkgc28gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uIG9mCkBAIC04Myw3ICs4Myw3IEBACiAvKgogICogVGhlIGdlbmVyYXRvciBvZiBkaXJ0eSBkYXRhIHN0YXJ0cyB3cml0ZWJhY2sgYXQgdGhpcyBwZXJjZW50YWdlCiAgKi8KLWludCB2bV9kaXJ0eV9yYXRpbyA9IDEwOworaW50IHZtX2RpcnR5X3JhdGlvID0gMjA7CiAKIC8qCiAgKiB2bV9kaXJ0eV9ieXRlcyBzdGFydHMgYXQgMCAoZGlzYWJsZWQpIHNvIHRoYXQgaXQgaXMgYSBmdW5jdGlvbiBvZgpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCBiZWM4M2MxLi45Y2UzMDNkIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtMTcsMTkgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCi12b2lkIGRlZmF1bHRfdW5wbHVnX2lvX2ZuKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBwYWdlICpwYWdlKQotewotfQotRVhQT1JUX1NZTUJPTChkZWZhdWx0X3VucGx1Z19pb19mbik7Ci0KLXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyA9IHsKLQkucmFfcGFnZXMJPSBWTV9NQVhfUkVBREFIRUFEICogMTAyNCAvIFBBR0VfQ0FDSEVfU0laRSwKLQkuc3RhdGUJCT0gMCwKLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9NQVBfQ09QWSwKLQkudW5wbHVnX2lvX2ZuCT0gZGVmYXVsdF91bnBsdWdfaW9fZm4sCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKLQogLyoKICAqIEluaXRpYWxpc2UgYSBzdHJ1Y3QgZmlsZSdzIHJlYWRhaGVhZCBzdGF0ZS4gIEFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGhhcwogICogbWVtc2V0ICpyYSB0byB6ZXJvLgpAQCAtMjMzLDE4ICsyMjAsNiBAQAogCQkrIG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfRlJFRV9QQUdFUykpIC8gMik7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHJlYWRhaGVhZF9pbml0KHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGJkaV9pbml0KCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOwotCWlmICghZXJyKQotCQliZGlfcmVnaXN0ZXIoJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbywgTlVMTCwgImRlZmF1bHQiKTsKLQotCXJldHVybiBlcnI7Ci19Ci1zdWJzeXNfaW5pdGNhbGwocmVhZGFoZWFkX2luaXQpOwotCiAvKgogICogU3VibWl0IElPIGZvciB0aGUgcmVhZC1haGVhZCByZXF1ZXN0IGluIGZpbGVfcmFfc3RhdGUuCiAgKi8KZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDQxMDNhMjMuLjdlYzc4ZTIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50OwogCkBAIC0yNjY1LDYgKzI2NjYsNyBAQAogCWlmIChJU19FUlIoZmlsZSkpCiAJCXJldHVybiBQVFJfRVJSKGZpbGUpOwogCisJaW1hX3NobV9jaGVjayhmaWxlKTsKIAlpZiAodm1hLT52bV9maWxlKQogCQlmcHV0KHZtYS0+dm1fZmlsZSk7CiAJdm1hLT52bV9maWxlID0gZmlsZTsKZGlmZiAtLWdpdCBhL25ldC84MDIvcHNuYXAuYyBiL25ldC84MDIvcHNuYXAuYwppbmRleCA3MDk4MGJhLi42ZmVhMDc1IDEwMDY0NAotLS0gYS9uZXQvODAyL3BzbmFwLmMKKysrIGIvbmV0LzgwMi9wc25hcC5jCkBAIC0yOSw3ICsyOSw3IEBACiAvKgogICoJRmluZCBhIHNuYXAgY2xpZW50IGJ5IG1hdGNoaW5nIHRoZSA1IGJ5dGVzLgogICovCi1zdGF0aWMgc3RydWN0IGRhdGFsaW5rX3Byb3RvICpmaW5kX3NuYXBfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmRlc2MpCitzdGF0aWMgc3RydWN0IGRhdGFsaW5rX3Byb3RvICpmaW5kX3NuYXBfY2xpZW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc2MpCiB7CiAJc3RydWN0IGRhdGFsaW5rX3Byb3RvICpwcm90byA9IE5VTEwsICpwOwogCkBAIC01MSw3ICs1MSw3IEBACiAJaW50IHJjID0gMTsKIAlzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnByb3RvOwogCXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgc25hcF9wYWNrZXRfdHlwZSA9IHsKLQkJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1NOQVApLAorCQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX1NOQVApLAogCX07CiAKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCA1KSkpCkBAIC05NSwxNSArOTUsMTYgQEAKIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfc25hcF9jbGllbnQpOwogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3NuYXBfY2xpZW50KTsKIAotc3RhdGljIGNoYXIgc25hcF9lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBzbmFwX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJTTkFQIC0gdW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggODAyLjJcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNuYXBfaW5pdCh2b2lkKQogewogCXNuYXBfc2FwID0gbGxjX3NhcF9vcGVuKDB4QUEsIHNuYXBfcmN2KTsKLQotCWlmICghc25hcF9zYXApCisJaWYgKCFzbmFwX3NhcCkgewogCQlwcmludGsoc25hcF9lcnJfbXNnKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMSw3ICsxMjIsNyBAQAogLyoKICAqCVJlZ2lzdGVyIFNOQVAgY2xpZW50cy4gV2UgZG9uJ3QgeWV0IHVzZSB0aGlzIGZvciBJUC4KICAqLwotc3RydWN0IGRhdGFsaW5rX3Byb3RvICpyZWdpc3Rlcl9zbmFwX2NsaWVudCh1bnNpZ25lZCBjaGFyICpkZXNjLAorc3RydWN0IGRhdGFsaW5rX3Byb3RvICpyZWdpc3Rlcl9zbmFwX2NsaWVudChjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNjLAogCQkJCQkgICAgaW50ICgqcmN2ZnVuYykoc3RydWN0IHNrX2J1ZmYgKiwKIAkJCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCQkJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqLApAQCAtMTM2LDcgKzEzNyw3IEBACiAKIAlwcm90byA9IGttYWxsb2Moc2l6ZW9mKCpwcm90byksIEdGUF9BVE9NSUMpOwogCWlmIChwcm90bykgewotCQltZW1jcHkocHJvdG8tPnR5cGUsIGRlc2MsNSk7CisJCW1lbWNweShwcm90by0+dHlwZSwgZGVzYywgNSk7CiAJCXByb3RvLT5yY3ZmdW5jCQk9IHJjdmZ1bmM7CiAJCXByb3RvLT5oZWFkZXJfbGVuZ3RoCT0gNSArIDM7IC8qIHNuYXAgKyA4MDIuMiAqLwogCQlwcm90by0+cmVxdWVzdAkJPSBzbmFwX3JlcXVlc3Q7CmRpZmYgLS1naXQgYS9uZXQvODAyL3RyLmMgYi9uZXQvODAyL3RyLmMKaW5kZXggZjQ3YWUyOC4uZTdlYjEzMCAxMDA2NDQKLS0tIGEvbmV0LzgwMi90ci5jCisrKyBiL25ldC84MDIvdHIuYwpAQCAtNDg2LDYgKzQ4Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpyaWZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKCZyaWZfbG9jaykKIHsKIAlzcGluX2xvY2tfaXJxKCZyaWZfbG9jayk7CiAKQEAgLTUxNyw2ICs1MTgsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByaWZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcygmcmlmX2xvY2spCiB7CiAJc3Bpbl91bmxvY2tfaXJxKCZyaWZfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCA0MWU4ZjY1Li4yYjczOTBlIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCisrKyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTUxLDggKzUxLDggQEAKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fY29weXJpZ2h0W10gPSAiQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+IjsKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fYnVnZ3lyaWdodFtdID0gIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHZsYW5fcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdmxhbl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpLAogCS5mdW5jID0gdmxhbl9za2JfcmVjdiwgLyogVkxBTiByZWNlaXZlIG1ldGhvZCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCmluZGV4IDI4ODZkMmYuLjY1NGU0NWYgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTg5LDM4ICs4OSwyNyBAQAogCQlnb3RvIGRyb3A7CiAKIAlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IHAtPmRldiA9PSBza2ItPmRldjsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9CisJCQlwLT5kZXYgPT0gc2tiLT5kZXYgJiYgIWNvbXBhcmVfZXRoZXJfaGVhZGVyKAorCQkJCXNrYl9tYWNfaGVhZGVyKHApLCBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCA9IDA7CiAJfQogCiAJcmV0dXJuIGRldl9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCiBkcm9wOgotCXJldHVybiAyOworCXJldHVybiBHUk9fRFJPUDsKIH0KIAogaW50IHZsYW5fZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAogCQkgICAgIHVuc2lnbmVkIGludCB2bGFuX3RjaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7CisJaWYgKG5ldHBvbGxfcnhfb24oc2tiKSkKKwkJcmV0dXJuIHZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGdycCwgdmxhbl90Y2kpOwogCi0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCXNrYl9ncm9fcmVzZXRfb2Zmc2V0KHNrYik7CiAKLQlzd2l0Y2ggKHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDI6Ci0JCWVyciA9IE5FVF9SWF9EUk9QOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgMToKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIG5hcGlfc2tiX2ZpbmlzaCh2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSwgc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0wodmxhbl9ncm9fcmVjZWl2ZSk7CiAKQEAgLTEyOCwzMCArMTE3LDE0IEBACiAJCSAgIHVuc2lnbmVkIGludCB2bGFuX3RjaSwgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBuYXBpX2ZyYWdpbmZvX3NrYihuYXBpLCBpbmZvKTsKLQlpbnQgZXJyID0gTkVUX1JYX0RST1A7CiAKIAlpZiAoIXNrYikKLQkJZ290byBvdXQ7CisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCWdvdG8gb3V0OworCWlmIChuZXRwb2xsX3J4X29uKHNrYikpCisJCXJldHVybiB2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBncnAsIHZsYW5fdGNpKTsKIAotCWVyciA9IE5FVF9SWF9TVUNDRVNTOwotCi0Jc3dpdGNoICh2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSkgewotCWNhc2UgLTE6Ci0JCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCi0JY2FzZSAyOgotCQllcnIgPSBORVRfUlhfRFJPUDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQljYXNlIDE6Ci0JCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7Ci0JCWJyZWFrOwotCX0KLQotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIG5hcGlfZnJhZ3NfZmluaXNoKG5hcGksIHNrYiwKKwkJCQkgdmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYikpOwogfQogRVhQT1JUX1NZTUJPTCh2bGFuX2dyb19mcmFncyk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfZmQuYyBiL25ldC85cC90cmFuc19mZC5jCmluZGV4IDFkZjAzNTYuLmM2MTNlZDA4IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfZmQuYworKysgYi9uZXQvOXAvdHJhbnNfZmQuYwpAQCAtNDE3LDcgKzQxNyw3IEBACiAJb2xkZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoZ2V0X2RzKCkpOwogCS8qIFRoZSBjYXN0IHRvIGEgdXNlciBwb2ludGVyIGlzIHZhbGlkIGR1ZSB0byB0aGUgc2V0X2ZzKCkgKi8KLQlyZXQgPSB2ZnNfd3JpdGUodHMtPndyLCAodm9pZCBfX3VzZXIgKil2LCBsZW4sICZ0cy0+d3ItPmZfcG9zKTsKKwlyZXQgPSB2ZnNfd3JpdGUodHMtPndyLCAoX19mb3JjZSB2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOwogCXNldF9mcyhvbGRmcyk7CiAKIAlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKZGlmZiAtLWdpdCBhL25ldC9LY29uZmlnIGIvbmV0L0tjb25maWcKaW5kZXggY2RiOGZkZS4uZWM5M2U3ZSAxMDA2NDQKLS0tIGEvbmV0L0tjb25maWcKKysrIGIvbmV0L0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIG1lbnVjb25maWcgTkVUCiAJYm9vbCAiTmV0d29ya2luZyBzdXBwb3J0IgorCXNlbGVjdCBOTEFUVFIKIAktLS1oZWxwLS0tCiAJICBVbmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZCBzYXkgWSBoZXJlLgogCSAgVGhlIHJlYXNvbiBpcyB0aGF0IHNvbWUgcHJvZ3JhbXMgbmVlZCBrZXJuZWwgbmV0d29ya2luZyBzdXBwb3J0IGV2ZW4KQEAgLTI0LDkgKzI1LDYgQEAKIAogbWVudSAiTmV0d29ya2luZyBvcHRpb25zIgogCi1jb25maWcgQ09NUEFUX05FVF9ERVZfT1BTCi0gICAgICAgZGVmX2Jvb2wgeQotCiBzb3VyY2UgIm5ldC9wYWNrZXQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3VuaXgvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3hmcm0vS2NvbmZpZyIKQEAgLTE3MSw2ICsxNjksNyBAQAogCiBzb3VyY2UgIm5ldC9kY2NwL0tjb25maWciCiBzb3VyY2UgIm5ldC9zY3RwL0tjb25maWciCitzb3VyY2UgIm5ldC9yZHMvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3RpcGMvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2F0bS9LY29uZmlnIgogc291cmNlICJuZXQvODAyL0tjb25maWciCkBAIC0xODUsNiArMTg0LDcgQEAKIHNvdXJjZSAibmV0L2xhcGIvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2Vjb25ldC9LY29uZmlnIgogc291cmNlICJuZXQvd2Fucm91dGVyL0tjb25maWciCitzb3VyY2UgIm5ldC9waG9uZXQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3NjaGVkL0tjb25maWciCiBzb3VyY2UgIm5ldC9kY2IvS2NvbmZpZyIKIApAQCAtMjIwLDYgKzIyMCwxNyBAQAogCVRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAltb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGNwX3Byb2JlLgogCitjb25maWcgTkVUX0RST1BfTU9OSVRPUgorCWJvb2xlYW4gIk5ldHdvcmsgcGFja2V0IGRyb3AgYWxlcnRpbmcgc2VydmljZSIKKwlkZXBlbmRzIG9uIElORVQgJiYgRVhQRVJJTUVOVEFMICYmIFRSQUNFUE9JTlRTCisJLS0taGVscC0tLQorCVRoaXMgZmVhdHVyZSBwcm92aWRlcyBhbiBhbGVydGluZyBzZXJ2aWNlIHRvIHVzZXJzcGFjZSBpbiB0aGUKKwlldmVudCB0aGF0IHBhY2tldHMgYXJlIGRpc2NhcmRlZCBpbiB0aGUgbmV0d29yayBzdGFjay4gIEFsZXJ0cworCWFyZSBicm9hZGNhc3QgdmlhIG5ldGxpbmsgc29ja2V0IHRvIGFueSBsaXN0ZW5pbmcgdXNlciBzcGFjZQorCXByb2Nlc3MuICBJZiB5b3UgZG9uJ3QgbmVlZCBuZXR3b3JrIGRyb3AgYWxlcnRzLCBvciBpZiB5b3UgYXJlIG9rCisJanVzdCBjaGVja2luZyB0aGUgdmFyaW91cyBwcm9jIGZpbGVzIGFuZCBvdGhlciB1dGlsaXRpZXMgZm9yCisJZHJvcCBzdGF0aXN0aWNzLCBzYXkgTiBoZXJlLgorCiBlbmRtZW51CiAKIGVuZG1lbnUKQEAgLTIyOSw3ICsyNDAsNiBAQAogc291cmNlICJuZXQvaXJkYS9LY29uZmlnIgogc291cmNlICJuZXQvYmx1ZXRvb3RoL0tjb25maWciCiBzb3VyY2UgIm5ldC9yeHJwYy9LY29uZmlnIgotc291cmNlICJuZXQvcGhvbmV0L0tjb25maWciCiAKIGNvbmZpZyBGSUJfUlVMRVMKIAlib29sCmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggMGZjY2U4OS4uOWUwMGE1NSAxMDA2NDQKLS0tIGEvbmV0L01ha2VmaWxlCisrKyBiL25ldC9NYWtlZmlsZQpAQCAtNDksNiArNDksNyBAQAogZW5kaWYKIG9iai0kKENPTkZJR19JUF9EQ0NQKQkJKz0gZGNjcC8KIG9iai0kKENPTkZJR19JUF9TQ1RQKQkJKz0gc2N0cC8KK29iai0kKENPTkZJR19SRFMpCQkrPSByZHMvCiBvYmoteQkJCQkrPSB3aXJlbGVzcy8KIG9iai0kKENPTkZJR19NQUM4MDIxMSkJCSs9IG1hYzgwMjExLwogb2JqLSQoQ09ORklHX1RJUEMpCQkrPSB0aXBjLwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9kZHAuYyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKaW5kZXggNWFiY2UwNy4uM2UwNjcxZCAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9kZHAuYworKysgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCkBAIC0xODYwLDEzICsxODYwLDEzIEBACiAJLm5vdGlmaWVyX2NhbGwJPSBkZHBfZGV2aWNlX2V2ZW50LAogfTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsdGFsa19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0xPQ0FMVEFMSyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGx0YWxrX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfTE9DQUxUQUxLKSwKIAkuZnVuYwkJPSBsdGFsa19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcHRhbGtfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBUQUxLKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwdGFsa19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCQk9IGNwdV90b19iZTE2KEVUSF9QX1BQUFRBTEspLAogCS5mdW5jCQk9IGF0YWxrX3JjdiwKIH07CiAKQEAgLTE4NzcsNyArMTg3Nyw3IEBACiBFWFBPUlRfU1lNQk9MKGF0cnRyX2dldF9kZXYpOwogRVhQT1JUX1NZTUJPTChhdGFsa19maW5kX2Rldl9hZGRyKTsKIAotc3RhdGljIGNoYXIgYXRhbGtfZXJyX3NuYXBbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGF0YWxrX2Vycl9zbmFwW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiVW5hYmxlIHRvIHJlZ2lzdGVyIEREUCB3aXRoIFNOQVAuXG4iOwogCiAvKiBDYWxsZWQgYnkgcHJvdG8uYyBvbiBrZXJuZWwgc3RhcnQgdXAgKi8KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGV2LmMgYi9uZXQvYXBwbGV0YWxrL2Rldi5jCmluZGV4IGQ4NTZhNjIuLjcyMjc3ZDcgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGV2LmMKKysrIGIvbmV0L2FwcGxldGFsay9kZXYuYwpAQCAtOSwyMiArOSwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2x0YWxrLmg+CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCiBzdGF0aWMgaW50IGx0YWxrX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLQotc3RhdGljIGludCBsdGFsa19tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQotewotCXJldHVybiAtRUlOVkFMOwotfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGx0YWxrX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHdpdGggbG9jYWx0YWxrLWdlbmVyaWMgdmFsdWVzLiAqLwogCisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogCWRldi0+Y2hhbmdlX210dQkJPSBsdGFsa19jaGFuZ2VfbXR1OwotCWRldi0+c2V0X21hY19hZGRyZXNzIAk9IGx0YWxrX21hY19hZGRyOworI2VuZGlmCiAKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX0xPQ0FMVExLOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuIAk9IExUQUxLX0hMRU47CmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCBlYTk0MzhmYy4uMzM0ZmNkNCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9icjI2ODQuYworKysgYi9uZXQvYXRtL2JyMjY4NC5jCkBAIC04Myw3ICs4Myw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBicjI2ODRfZGV2czsKIAlpbnQgbnVtYmVyOwogCXN0cnVjdCBsaXN0X2hlYWQgYnJ2Y2NzOwkvKiBvbmUgZGV2aWNlIDw9PiBvbmUgdmNjIChiZWZvcmUgeG1hcykgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlpbnQgbWFjX3dhc19zZXQ7CiAJZW51bSBicjI2ODRfcGF5bG9hZCBwYXlsb2FkOwogfTsKQEAgLTE0OCw5ICsxNDcsMTAgQEAKICAqIHRoZSB3YXkgZm9yIG11bHRpcGxlIHZjYydzIHBlciBpdGYuICBSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHNlbmQsCiAgKiBvdGhlcndpc2UgZmFsc2UKICAqLwotc3RhdGljIGludCBicjI2ODRfeG1pdF92Y2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2LAorc3RhdGljIGludCBicjI2ODRfeG1pdF92Y2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBicjI2ODRfdmNjICpicnZjYykKIHsKKwlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYgPSBCUlBSSVYoZGV2KTsKIAlzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjOwogCWludCBtaW5oZWFkcm9vbSA9IChicnZjYy0+ZW5jYXBzID09IGVfbGxjKSA/IDEwIDogMjsKIApAQCAtMjExLDggKzIxMSw4IEBACiAJfQogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrX2F0bShhdG12Y2MpLT5za193bWVtX2FsbG9jKTsKIAlBVE1fU0tCKHNrYiktPmF0bV9vcHRpb25zID0gYXRtdmNjLT5hdG1fb3B0aW9uczsKLQlicmRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCWJyZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCWF0bXZjYy0+c2VuZChhdG12Y2MsIHNrYik7CiAJcmV0dXJuIDE7CiB9CkBAIC0yMzMsMTQgKzIzMywxNCBAQAogCWJydmNjID0gcGlja19vdXRnb2luZ192Y2Moc2tiLCBicmRldik7CiAJaWYgKGJydmNjID09IE5VTEwpIHsKIAkJcHJfZGVidWcoIm5vIHZjYyBhdHRhY2hlZCB0byBkZXYgJXNcbiIsIGRldi0+bmFtZSk7Ci0JCWJyZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJYnJkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJLyogbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJlYWRfdW5sb2NrKCZkZXZzX2xvY2spOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKCFicjI2ODRfeG1pdF92Y2Moc2tiLCBicmRldiwgYnJ2Y2MpKSB7CisJaWYgKCFicjI2ODRfeG1pdF92Y2Moc2tiLCBkZXYsIGJydmNjKSkgewogCQkvKgogCQkgKiBXZSBzaG91bGQgcHJvYmFibHkgdXNlIG5ldGlmXypfcXVldWUoKSBoZXJlLCBidXQgdGhhdAogCQkgKiBpbnZvbHZlcyBhZGRlZCBjb21wbGljYXRpb24uICBXZSBuZWVkIHRvIHdhbGsgYmVmb3JlCkBAIC0yNDgsMjcgKzI0OCwyMCBAQAogCQkgKgogCQkgKiBEb24ndCBmcmVlIGhlcmUhIHRoaXMgcG9pbnRlciBtaWdodCBiZSBubyBsb25nZXIgdmFsaWQhCiAJCSAqLwotCQlicmRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWJyZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJfQogCXJlYWRfdW5sb2NrKCZkZXZzX2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJyMjY4NF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcl9kZWJ1ZygiYnIyNjg0X2dldF9zdGF0c1xuIik7Ci0JcmV0dXJuICZCUlBSSVYoZGV2KS0+c3RhdHM7Ci19Ci0KIC8qCiAgKiBXZSByZW1lbWJlciB3aGVuIHRoZSBNQUMgZ2V0cyBzZXQsIHNvIHdlIGRvbid0IG92ZXJyaWRlIGl0IGxhdGVyIHdpdGgKICAqIHRoZSBFU0kgb2YgdGhlIEFUTSBjYXJkIG9mIHRoZSBmaXJzdCBWQwogICovCi1zdGF0aWMgaW50ICgqbXlfZXRoX21hY19hZGRyKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgdm9pZCAqKTsKIHN0YXRpYyBpbnQgYnIyNjg0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7Ci0JaW50IGVyciA9IG15X2V0aF9tYWNfYWRkcihkZXYsIHApOworCWludCBlcnIgPSBldGhfbWFjX2FkZHIoZGV2LCBwKTsKIAlpZiAoIWVycikKIAkJQlJQUklWKGRldiktPm1hY193YXNfc2V0ID0gMTsKIAlyZXR1cm4gZXJyOwpAQCAtNDMwLDE3ICs0MjMsMTcgQEAKIAkvKiBzaWdoLCBpbnRlcmZhY2UgaXMgZG93bj8gKi8KIAlpZiAodW5saWtlbHkoIShuZXRfZGV2LT5mbGFncyAmIElGRl9VUCkpKQogCQlnb3RvIGRyb3BwZWQ7Ci0JYnJkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlicmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJbmV0X2Rldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldF9kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCW1lbXNldChBVE1fU0tCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSk7CiAJbmV0aWZfcngoc2tiKTsKIAlyZXR1cm47CiAKIGRyb3BwZWQ6Ci0JYnJkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwluZXRfZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJZ290byBmcmVlX3NrYjsKIGVycm9yOgotCWJyZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwluZXRfZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIGZyZWVfc2tiOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm47CkBAIC01MzEsOCArNTI0LDggQEAKIAogCQlza2ItPm5leHQgPSBza2ItPnByZXYgPSBOVUxMOwogCQlicjI2ODRfcHVzaChhdG12Y2MsIHNrYik7Ci0JCUJSUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzIC09IHNrYi0+bGVuOwotCQlCUlBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzLS07CisJCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyAtPSBza2ItPmxlbjsKKwkJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMtLTsKIAogCQlza2IgPSBuZXh0OwogCX0KQEAgLTU0NCwxNyArNTM3LDIwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicjI2ODRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQgCT0gYnIyNjg0X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBicjI2ODRfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgYnIyNjg0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2ID0gQlJQUklWKG5ldGRldik7CiAKIAlldGhlcl9zZXR1cChuZXRkZXYpOwotCWJyZGV2LT5uZXRfZGV2ID0gbmV0ZGV2OwogCi0JbXlfZXRoX21hY19hZGRyID0gbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBicjI2ODRfbWFjX2FkZHI7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBicjI2ODRfc3RhcnRfeG1pdDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGJyMjY4NF9nZXRfc3RhdHM7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmJyMjY4NF9uZXRkZXZfb3BzOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJyZGV2LT5icnZjY3MpOwogfQpAQCAtNTY1LDEwICs1NjEsOCBAQAogCWJyZGV2LT5uZXRfZGV2ID0gbmV0ZGV2OwogCiAJbmV0ZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwotCW15X2V0aF9tYWNfYWRkciA9IG5ldGRldi0+c2V0X21hY19hZGRyZXNzOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gYnIyNjg0X21hY19hZGRyOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYnIyNjg0X3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBicjI2ODRfZ2V0X3N0YXRzOworCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmJyMjY4NF9uZXRkZXZfb3BzOwogCW5ldGRldi0+YWRkcl9sZW4gPSAwOwogCW5ldGRldi0+bXR1ID0gMTUwMDsKIAluZXRkZXYtPnR5cGUgPSBBUlBIUkRfUFBQOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCAyZDMzYTgzLi4zZGMwYTNhIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtMjE0LDE1ICsyMTQsMTUgQEAKIAkJc2tiLT5wcm90b2NvbCA9ICgoX19iZTE2ICopIHNrYi0+ZGF0YSlbM107CiAJCXNrYl9wdWxsKHNrYiwgUkZDMTQ4M0xMQ19MRU4pOwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKSB7Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCWNsaXBfYXJwX3Jjdihza2IpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCWNsaXBfdmNjLT5sYXN0X3VzZSA9IGppZmZpZXM7Ci0JUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJbWVtc2V0KEFUTV9TS0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fc2tiX2RhdGEpKTsKIAluZXRpZl9yeChza2IpOwogfQpAQCAtMzcyLDcgKzM3Miw3IEBACiAJaWYgKCFza2ItPmRzdCkgewogCQlwcmludGsoS0VSTl9FUlIgImNsaXBfc3RhcnRfeG1pdDogc2tiLT5kc3QgPT0gTlVMTFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFza2ItPmRzdC0+bmVpZ2hib3VyKSB7CkBAIC0zODAsMTMgKzM4MCwxMyBAQAogCQlza2ItPmRzdC0+bmVpZ2hib3VyID0gY2xpcF9maW5kX25laWdoYm91cihza2ItPmRzdCwgMSk7CiAJCWlmICghc2tiLT5kc3QtPm5laWdoYm91cikgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwkvKiBsb3N0IHRoYXQgb25lICovCi0JCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CiAJCX0KICNlbmRpZgogCQlwcmludGsoS0VSTl9FUlIgImNsaXBfc3RhcnRfeG1pdDogTk8gTkVJR0hCT1VSICFcbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuIDA7CiAJfQogCWVudHJ5ID0gTkVJR0gyRU5UUlkoc2tiLT5kc3QtPm5laWdoYm91cik7CkBAIC00MDAsNyArNDAwLDcgQEAKIAkJCXNrYl9xdWV1ZV90YWlsKCZlbnRyeS0+bmVpZ2gtPmFycF9xdWV1ZSwgc2tiKTsKIAkJZWxzZSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTQyMyw4ICs0MjMsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX3N0YXJ0X3htaXQ6IFhPRkYtPlhPRkYgdHJhbnNpdGlvblxuIik7CiAJCXJldHVybiAwOwogCX0KLQljbGlwX3ByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQljbGlwX3ByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJdmNjLT5zZW5kKHZjYywgc2tiKTsKIAlpZiAoYXRtX21heV9zZW5kKHZjYywgMCkpIHsKIAkJZW50cnktPnZjY3MtPnhvZmYgPSAwOwpAQCAtNDQzLDExICs0NDMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNsaXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICZQUklWKGRldiktPnN0YXRzOwotfQotCiBzdGF0aWMgaW50IGNsaXBfbWtpcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgdGltZW91dCkKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjOwpAQCAtNTAxLDggKzQ5Niw4IEBACiAKIAkJCXNrYl9nZXQoc2tiKTsKIAkJCWNsaXBfcHVzaCh2Y2MsIHNrYik7Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cy0tOwotCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzIC09IGxlbjsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzLS07CisJCQlza2ItPmRldi0+c3RhdHMucnhfYnl0ZXMgLT0gbGVuOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCX0KIApAQCAtNTU3LDExICs1NTIsMTMgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2xpcF9uZXRkZXZfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGNsaXBfc3RhcnRfeG1pdCwKK307CisKIHN0YXRpYyB2b2lkIGNsaXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNsaXBfc3RhcnRfeG1pdDsKLQkvKiBzZ194bWl0IC4uLiAqLwotCWRldi0+Z2V0X3N0YXRzID0gY2xpcF9nZXRfc3RhdHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJmNsaXBfbmV0ZGV2X29wczsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVRNOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gUkZDMTQ4M0xMQ19MRU47CiAJZGV2LT5tdHUgPSBSRkMxNjI2X01UVTsKQEAgLTYyMSw3ICs2MTgsNyBAQAogCX0KIAogCS8qIGlnbm9yZSBub24tQ0xJUCBkZXZpY2VzICovCi0JaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQVRNIHx8IGRldi0+aGFyZF9zdGFydF94bWl0ICE9IGNsaXBfc3RhcnRfeG1pdCkKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9BVE0gfHwgZGV2LT5uZXRkZXZfb3BzICE9ICZjbGlwX25ldGRldl9vcHMpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmMgYi9uZXQvYXRtL2xlYy5jCmluZGV4IGU1ZTMwMTUuLjE5OWI2YmIgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmMKKysrIGIvbmV0L2F0bS9sZWMuYwpAQCAtNjIsNyArNjIsNiBAQAogc3RhdGljIGludCBsZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbGVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxlY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGVjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGxlY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBsZWNfYXJwX3RhYmxlICpsZWNfYXJwX2ZpbmQoc3RydWN0IGxlY19wcml2ICpwcml2LAogCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKTsKQEAgLTIxOCwyOCArMjE3LDI4IEBACiAKIHN0YXRpYyBpbnQgbGVjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQltZW1zZXQoJnByaXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwltZW1zZXQoJmRldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWxlY19zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkCitsZWNfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKKwogCUFUTV9TS0Ioc2tiKS0+dmNjID0gdmNjOwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSB2Y2MtPmF0bV9vcHRpb25zOwogCiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2tfYXRtKHZjYyktPnNrX3dtZW1fYWxsb2MpOwogCWlmICh2Y2MtPnNlbmQodmNjLCBza2IpIDwgMCkgewotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCi0JcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiB9CiAKIHN0YXRpYyB2b2lkIGxlY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNzAsNyArMjY5LDcgQEAKIAlwcl9kZWJ1ZygibGVjX3N0YXJ0X3htaXQgY2FsbGVkXG4iKTsKIAlpZiAoIXByaXYtPmxlY2QpIHsKIAkJcHJpbnRrKCIlczpObyBsZWNkIGF0dGFjaGVkXG4iLCBkZXYtPm5hbWUpOwotCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlyZXR1cm4gLUVVTkFUQ0g7CiAJfQpAQCAtMzQ1LDcgKzM0NCw3IEBACiAJCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWlmIChza2IyID09IE5VTEwpIHsKLQkJCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlza2IgPSBza2IyOwpAQCAtMzgwLDcgKzM3OSw3IEBACiAJCQkgICAgKCIlczpsZWNfc3RhcnRfeG1pdDogdHggcXVldWUgZnVsbCBvciBubyBhcnAgZW50cnksIGRyb3BwaW5nLCAiLAogCQkJICAgICBkZXYtPm5hbWUpOwogCQkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7Ci0JCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJfQogCQlnb3RvIG91dDsKQEAgLTM5MiwxMCArMzkxLDEwIEBACiAJd2hpbGUgKGVudHJ5ICYmIChza2IyID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkpIHsKIAkJcHJfZGVidWcoImxlYy5jOiBlbXB0eWluZyB0eCBxdWV1ZSwgIik7CiAJCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAlcE1cbiIsIGxlY19oLT5oX2Rlc3QpOwotCQlsZWNfc2VuZCh2Y2MsIHNrYjIsIHByaXYpOworCQlsZWNfc2VuZCh2Y2MsIHNrYjIpOwogCX0KIAotCWxlY19zZW5kKHZjYywgc2tiLCBwcml2KTsKKwlsZWNfc2VuZCh2Y2MsIHNrYik7CiAKIAlpZiAoIWF0bV9tYXlfc2VuZCh2Y2MsIDApKSB7CiAJCXN0cnVjdCBsZWNfdmNjX3ByaXYgKnZwcml2ID0gTEVDX1ZDQ19QUklWKHZjYyk7CkBAIC00MjcsMTUgKzQyNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KLSAqIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBjYXJkIG9wZW4gb3IgY2xvc2VkLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxlY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigoc3RydWN0IGxlY19wcml2ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCiBzdGF0aWMgaW50IGxlY19hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MTIsNyArNTAyLDcgQEAKIAkJcHJpdi0+bGFuZTJfb3BzID0gTlVMTDsKIAkJaWYgKHByaXYtPmxhbmVfdmVyc2lvbiA+IDEpCiAJCQlwcml2LT5sYW5lMl9vcHMgPSAmbGFuZTJfb3BzOwotCQlpZiAoZGV2LT5jaGFuZ2VfbXR1KGRldiwgbWVzZy0+Y29udGVudC5jb25maWcubXR1KSkKKwkJaWYgKGRldl9zZXRfbXR1KGRldiwgbWVzZy0+Y29udGVudC5jb25maWcubXR1KSkKIAkJCXByaW50aygiJXM6IGNoYW5nZV9tdHUgdG8gJWQgZmFpbGVkXG4iLCBkZXYtPm5hbWUsCiAJCQkgICAgICAgbWVzZy0+Y29udGVudC5jb25maWcubXR1KTsKIAkJcHJpdi0+aXNfcHJveHkgPSBtZXNnLT5jb250ZW50LmNvbmZpZy5pc19wcm94eTsKQEAgLTY3NywxNyArNjY3LDE5IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxlY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsZWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gbGVjX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsZWNfc3RhcnRfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbGVjX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0CQk9IGxlY190eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbGVjX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKKwogc3RhdGljIHZvaWQgbGVjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmNoYW5nZV9tdHUgPSBsZWNfY2hhbmdlX210dTsKLQlkZXYtPm9wZW4gPSBsZWNfb3BlbjsKLQlkZXYtPnN0b3AgPSBsZWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsZWNfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBsZWNfdHhfdGltZW91dDsKLQotCWRldi0+Z2V0X3N0YXRzID0gbGVjX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxlY19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5kb19pb2N0bCA9IE5VTEw7CisJZGV2LT5uZXRkZXZfb3BzID0gJmxlY19uZXRkZXZfb3BzOwogCXByaW50aygiJXM6IEluaXRpYWxpemVkIVxuIiwgZGV2LT5uYW1lKTsKIH0KIApAQCAtODEwLDggKzgwMiw4IEBACiAJCWVsc2UKICNlbmRpZgogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwotCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW1lbXNldChBVE1fU0tCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSk7CiAJCW5ldGlmX3J4KHNrYik7CiAJfQpAQCAtMTg4Nyw3ICsxODc5LDcgQEAKIAkJCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKLQkJCQkJCWxlY19zZW5kKHZjYywgc2tiLCBlbnRyeS0+cHJpdik7CisJCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYik7CiAJCQkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCQkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwogCQkJCQlsZWNfYXJwX3B1dChlbnRyeSk7CkBAIC0yMzA1LDcgKzIyOTcsNyBAQAogCQkJCWxlY19hcnBfaG9sZChlbnRyeSk7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSAhPSBOVUxMKQotCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYiwgZW50cnktPnByaXYpOworCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYik7CiAJCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAJCQkJZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKIAkJCQlsZWNfYXJwX3B1dChlbnRyeSk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5oIGIvbmV0L2F0bS9sZWMuaAppbmRleCAwZDM3NjY4Li45ZDE0ZDE5IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5oCisrKyBiL25ldC9hdG0vbGVjLmgKQEAgLTY5LDcgKzY5LDYgQEAKICNkZWZpbmUgTEVDX0FSUF9UQUJMRV9TSVpFIDE2CiAKIHN0cnVjdCBsZWNfcHJpdiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgc2hvcnQgbGVjaWQ7CQkJLyogTGVjaWQgb2YgdGhpcyBjbGllbnQgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZCBsZWNfYXJwX2VtcHR5X29uZXM7CiAJCQkJCQkvKiBVc2VkIGZvciBzdG9yaW5nIFZDQydzIHRoYXQgZG9uJ3QgaGF2ZSBhIE1BQyBhZGRyZXNzIGF0dGFjaGVkIHlldCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcGMuYyBiL25ldC9hdG0vbXBjLmMKaW5kZXggMDM5ZDVjYy4uZTViZjExNCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcGMuYworKysgYi9uZXQvYXRtL21wYy5jCkBAIC0yODYsMzMgKzI4NiwzMiBAQAogewogCiAJZHByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGM6XG4iLCBtcGMtPmRldi0+bmFtZSk7Ci0JaWYgKGRldi0+aGFyZF9zdGFydF94bWl0ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYzogZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gTlVMTCwgbm90IHN0YXJ0aW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuOworCWlmICghZGV2LT5uZXRkZXZfb3BzKQorCQlwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjICBub3Qgc3RhcnRpbmdcbiIsIGRldi0+bmFtZSk7CisJZWxzZSB7CisJCW1wYy0+b2xkX29wcyA9IGRldi0+bmV0ZGV2X29wczsKKwkJbXBjLT5uZXdfb3BzID0gKm1wYy0+b2xkX29wczsKKwkJbXBjLT5uZXdfb3BzLm5kb19zdGFydF94bWl0ID0gbXBjX3NlbmRfcGFja2V0OworCQlkZXYtPm5ldGRldl9vcHMgPSAmbXBjLT5uZXdfb3BzOwogCX0KLQltcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQgPSBkZXYtPmhhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG1wY19zZW5kX3BhY2tldDsKLQotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc3RvcF9tcGMoc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7Ci0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbXBjLT5kZXY7CiAJZHByaW50aygibXBvYTogKCVzKSBzdG9wX21wYzoiLCBtcGMtPmRldi0+bmFtZSk7CiAKIAkvKiBMZXRzIG5vdCBudWxsaWZ5IGxlYyBkZXZpY2UncyBkZXYtPmhhcmRfc3RhcnRfeG1pdCAqLwotCWlmIChtcGMtPmRldi0+aGFyZF9zdGFydF94bWl0ICE9IG1wY19zZW5kX3BhY2tldCkgeworCWlmIChkZXYtPm5ldGRldl9vcHMgIT0gJm1wYy0+bmV3X29wcykgewogCQlkcHJpbnRrKCIgbXBjIGFscmVhZHkgc3RvcHBlZCwgbm90IGZhdGFsXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlkcHJpbnRrKCJcbiIpOwotCW1wYy0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQ7Ci0JbXBjLT5vbGRfaGFyZF9zdGFydF94bWl0ID0gTlVMTDsKLQkvKiBjbG9zZV9zaG9ydGN1dHMobXBjKTsgICAgPz8/IEZJWE1FICovCiAKLQlyZXR1cm47CisJZGV2LT5uZXRkZXZfb3BzID0gbXBjLT5vbGRfb3BzOworCW1wYy0+b2xkX29wcyA9IE5VTEw7CisKKwkvKiBjbG9zZV9zaG9ydGN1dHMobXBjKTsgICAgPz8/IEZJWE1FICovCiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICptcG9hX2RldmljZV90eXBlX3N0cmluZyhjaGFyIHR5cGUpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKQEAgLTUzMSw3ICs1MzAsNiBAQAogICovCiBzdGF0aWMgaW50IG1wY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCByZXR2YWw7CiAJc3RydWN0IG1wb2FfY2xpZW50ICptcGM7CiAJc3RydWN0IGV0aGhkciAqZXRoOwogCWludCBpID0gMDsKQEAgLTU2MSw5ICs1NTksNyBAQAogCX0KIAogIG5vbl9pcDoKLQlyZXR2YWwgPSBtcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQoc2tiLGRldik7Ci0KLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBtcGMtPm9sZF9vcHMtPm5kb19zdGFydF94bWl0KHNrYixkZXYpOwogfQogCiBzdGF0aWMgaW50IGF0bV9tcG9hX3ZjY19hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgdm9pZCBfX3VzZXIgKmFyZykKZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBjLmggYi9uZXQvYXRtL21wYy5oCmluZGV4IDI0YzM4NmMuLjA5MTlhODggMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBjLmgKKysrIGIvbmV0L2F0bS9tcGMuaApAQCAtMTUsNyArMTUsNyBAQAogCXN0cnVjdCBtcG9hX2NsaWVudCAqbmV4dDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAgICAgIC8qIGxlYyBpbiBxdWVzdGlvbiAgICAgICAgICAgICAgICAgICAgICovCiAJaW50IGRldl9udW07ICAgICAgICAgICAgICAgICAvKiBlLmcuIDIgZm9yIGxlYzIgICAgICAgICAgICAgICAgICAgICAqLwotCWludCAoKm9sZF9oYXJkX3N0YXJ0X3htaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCiAJc3RydWN0IGF0bV92Y2MgKm1wb2FkX3ZjYzsgICAvKiBjb250cm9sIGNoYW5uZWwgdG8gbXBvYWQgICAgICAgICAgICAqLwogCXVpbnQ4X3QgbXBzX2N0cmxfYWRkcltBVE1fRVNBX0xFTl07ICAvKiBNUFMgY29udHJvbCBBVE0gYWRkcmVzcyAgICAgKi8KIAl1aW50OF90IG91cl9jdHJsX2FkZHJbQVRNX0VTQV9MRU5dOyAgLyogTVBDJ3MgY29udHJvbCBBVE0gYWRkcmVzcyAgICovCkBAIC0zMSw2ICszMSw5IEBACiAJdWludDhfdCAqbXBzX21hY3M7ICAgICAgICAgICAvKiBhcnJheSBvZiBNUFMgTUFDIGFkZHJlc3NlcywgPj0xICAgICAqLwogCWludCBudW1iZXJfb2ZfbXBzX21hY3M7ICAgICAgLyogbnVtYmVyIG9mIHRoZSBhYm92ZSBNQUMgYWRkcmVzc2VzICAgKi8KIAlzdHJ1Y3QgbXBjX3BhcmFtZXRlcnMgcGFyYW1ldGVyczsgIC8qIHBhcmFtZXRlcnMgZm9yIHRoaXMgY2xpZW50ICAgICovCisKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9sZF9vcHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ld19vcHM7CiB9OwogCiAKZGlmZiAtLWdpdCBhL25ldC9heDI1L2FmX2F4MjUuYyBiL25ldC9heDI1L2FmX2F4MjUuYwppbmRleCAwMGQ5ZTVlLi43ZGE1ZWJiIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9hZl9heDI1LmMKKysrIGIvbmV0L2F4MjUvYWZfYXgyNS5jCkBAIC0xNDM1LDYgKzE0MzUsMTEgQEAKIAlzaXplX3Qgc2l6ZTsKIAlpbnQgbHYsIGVyciwgYWRkcl9sZW4gPSBtc2ctPm1zZ19uYW1lbGVuOwogCisJLyogQVguMjUgZW1wdHkgZGF0YSBmcmFtZSBoYXMgbm8gbWVhbmluZyA6IGRvbid0IHNlbmQgKi8KKwlpZiAobGVuID09IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisKIAlpZiAobXNnLT5tc2dfZmxhZ3MgJiB+KE1TR19ET05UV0FJVHxNU0dfRU9SfE1TR19DTVNHX0NPTVBBVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNTI5LDEwICsxNTM0LDggQEAKIAkJZHAgPSBheDI1LT5kaWdpcGVhdDsKIAl9CiAKLQlTT0NLX0RFQlVHKHNrLCAiQVguMjU6IHNlbmR0bzogQWRkcmVzc2VzIGJ1aWx0LlxuIik7Ci0KIAkvKiBCdWlsZCBhIHBhY2tldCAqLwotCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogc2VuZHRvOiBidWlsZGluZyBwYWNrZXQuXG4iKTsKKwlTT0NLX0RFQlVHKHNrLCAiQVguMjU6IHNlbmR0bzogQWRkcmVzc2VzIGJ1aWx0LiBCdWlsZGluZyBwYWNrZXQuXG4iKTsKIAogCS8qIEFzc3VtZSB0aGUgd29yc3QgY2FzZSAqLwogCXNpemUgPSBsZW4gKyBheDI1LT5heDI1X2Rldi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47CkBAIC0xNjM2LDYgKzE2MzksMTMgQEAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCWNvcGllZCA9IHNrYi0+bGVuOwogCisJLyogQVguMjUgZW1wdHkgZGF0YSBmcmFtZSBoYXMgbm8gbWVhbmluZyA6IGlnbm9yZSBpdCAqLworCWlmIChjb3BpZWQgPT0gMCkgeworCQllcnIgPSBjb3BpZWQ7CisJCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoY29waWVkID4gc2l6ZSkgewogCQljb3BpZWQgPSBzaXplOwogCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CkBAIC0xOTg1LDkgKzE5OTUsOCBAQAogLyoKICAqCUNhbGxlZCBieSBzb2NrZXQuYyBvbiBrZXJuZWwgc3RhcnQgdXAKICAqLwotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBheDI1X3BhY2tldF90eXBlID0gewotCS50eXBlCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9BWDI1KSwKLQkuZGV2CT0JTlVMTCwJCQkJLyogQWxsIGRldmljZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXgyNV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0JY3B1X3RvX2JlMTYoRVRIX1BfQVgyNSksCiAJLmZ1bmMJPQlheDI1X2tpc3NfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jIGIvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCmluZGV4IDg0NDNhZjUuLjcxMzM4ZjEgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfaWZhY2UuYworKysgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKQEAgLTYxLDI3ICs2MSwyNCBAQAogCiAJd3JpdGVfbG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKIAlwcm90b2NvbCA9IHByb3RvY29sX2xpc3Q7Ci0JaWYgKHByb3RvY29sID09IE5VTEwpIHsKLQkJd3JpdGVfdW5sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwotCQlyZXR1cm47Ci0JfQorCWlmIChwcm90b2NvbCA9PSBOVUxMKQorCQlnb3RvIG91dDsKIAogCWlmIChwcm90b2NvbC0+cGlkID09IHBpZCkgewogCQlwcm90b2NvbF9saXN0ID0gcHJvdG9jb2wtPm5leHQ7Ci0JCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAl3aGlsZSAocHJvdG9jb2wgIT0gTlVMTCAmJiBwcm90b2NvbC0+bmV4dCAhPSBOVUxMKSB7CiAJCWlmIChwcm90b2NvbC0+bmV4dC0+cGlkID09IHBpZCkgewogCQkJcyA9IHByb3RvY29sLT5uZXh0OwogCQkJcHJvdG9jb2wtPm5leHQgPSBwcm90b2NvbC0+bmV4dC0+bmV4dDsKLQkJCXdyaXRlX3VubG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl9CiAKIAkJcHJvdG9jb2wgPSBwcm90b2NvbC0+bmV4dDsKIAl9CitvdXQ6CiAJd3JpdGVfdW5sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCA3NDRlZDNmLi4wMmI5YmFhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTQxLDE0ICs0MSwxMyBAQAogCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KIAotI2RlZmluZSBWRVJTSU9OICIyLjE0IgorI2RlZmluZSBWRVJTSU9OICIyLjE1IgogCiAvKiBCbHVldG9vdGggc29ja2V0cyAqLwogI2RlZmluZSBCVF9NQVhfUFJPVE8JOAogc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpidF9wcm90b1tCVF9NQVhfUFJPVE9dOwogc3RhdGljIERFRklORV9SV0xPQ0soYnRfcHJvdG9fbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidF9sb2NrX2tleVtCVF9NQVhfUFJPVE9dOwogc3RhdGljIGNvbnN0IGNoYXIgKmJ0X2tleV9zdHJpbmdzW0JUX01BWF9QUk9UT10gPSB7CiAJInNrX2xvY2stQUZfQkxVRVRPT1RILUJUUFJPVE9fTDJDQVAiLApAQCAtODYsMTEgKzg1LDYgQEAKIAkJCWJ0X3Nsb2NrX2tleV9zdHJpbmdzW3Byb3RvXSwgJmJ0X3Nsb2NrX2tleVtwcm90b10sCiAJCQkJYnRfa2V5X3N0cmluZ3NbcHJvdG9dLCAmYnRfbG9ja19rZXlbcHJvdG9dKTsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgYnRfc29ja19yZWNsYXNzaWZ5X2xvY2soc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvKQotewotfQotI2VuZGlmCiAKIGludCBidF9zb2NrX3JlZ2lzdGVyKGludCBwcm90bywgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcykKIHsKQEAgLTIxNyw3ICsyMTEsOCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fCAhbmV3c29jaykgeworCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fCAhbmV3c29jayB8fAorCQkJCQkJYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXApIHsKIAkJCWJ0X2FjY2VwdF91bmxpbmsoc2spOwogCQkJaWYgKG5ld3NvY2spCiAJCQkJc29ja19ncmFmdChzaywgbmV3c29jayk7CkBAIC0yMzIsNyArMjI3LDcgQEAKIEVYUE9SVF9TWU1CT0woYnRfYWNjZXB0X2RlcXVldWUpOwogCiBpbnQgYnRfc29ja19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKLQlzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncykKKwkJCQlzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncykKIHsKIAlpbnQgbm9ibG9jayA9IGZsYWdzICYgTVNHX0RPTlRXQUlUOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMjc3LDcgKzI3Miw5IEBACiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJ0X3NrKHBhcmVudCktPmFjY2VwdF9xKSB7CiAJCXNrID0gKHN0cnVjdCBzb2NrICopIGxpc3RfZW50cnkocCwgc3RydWN0IGJ0X3NvY2ssIGFjY2VwdF9xKTsKLQkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQpCisJCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CisJCQkJCShidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cCAmJgorCQkJCQkJc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QyKSkKIAkJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKaW5kZXggYzljYWM3Ny4uMDA3M2VjOCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCkBAIC0xMjYsOCArMTI2LDcgQEAKIAogCXNlc3Npb24tPnJlYXNzZW1ibHlbaWRdID0gbnNrYjsKIAotCWlmIChza2IpCi0JCWtmcmVlX3NrYihza2IpOworCWtmcmVlX3NrYihza2IpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjbXRwX3JlY3ZfZnJhbWUoc3RydWN0IGNtdHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBhNGE3ODlmLi4xMTgxZGIwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0xMjMsNiArMTIzLDggQEAKIAljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1Q7CiAJY29ubi0+b3V0ID0gMTsKIAorCWNvbm4tPmF0dGVtcHQrKzsKKwogCWNwLmhhbmRsZSAgID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAljcC5wa3RfdHlwZSA9IGNwdV90b19sZTE2KGNvbm4tPnBrdF90eXBlKTsKIApAQCAtMTM5LDYgKzE0MSw4IEBACiAJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNUOwogCWNvbm4tPm91dCA9IDE7CiAKKwljb25uLT5hdHRlbXB0Kys7CisKIAljcC5oYW5kbGUgICA9IGNwdV90b19sZTE2KGhhbmRsZSk7CiAJY3AucGt0X3R5cGUgPSBjcHVfdG9fbGUxNihjb25uLT5wa3RfdHlwZSk7CiAKQEAgLTE1NSw2ICsxNTksNyBAQAogewogCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9ICh2b2lkICopIGFyZzsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tPmhkZXY7CisJX191OCByZWFzb247CiAKIAlCVF9EQkcoImNvbm4gJXAgc3RhdGUgJWQiLCBjb25uLCBjb25uLT5zdGF0ZSk7CiAKQEAgLTE3Myw3ICsxNzgsOCBAQAogCQlicmVhazsKIAljYXNlIEJUX0NPTkZJRzoKIAljYXNlIEJUX0NPTk5FQ1RFRDoKLQkJaGNpX2FjbF9kaXNjb25uKGNvbm4sIDB4MTMpOworCQlyZWFzb24gPSBoY2lfcHJvdG9fZGlzY29ubl9pbmQoY29ubik7CisJCWhjaV9hY2xfZGlzY29ubihjb25uLCByZWFzb24pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKQEAgLTIxNiwxMiArMjIyLDEzIEBACiAJCWJyZWFrOwogCWNhc2UgU0NPX0xJTks6CiAJCWlmIChsbXBfZXNjb19jYXBhYmxlKGhkZXYpKQotCQkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5lc2NvX3R5cGUgJiBTQ09fRVNDT19NQVNLOworCQkJY29ubi0+cGt0X3R5cGUgPSAoaGRldi0+ZXNjb190eXBlICYgU0NPX0VTQ09fTUFTSykgfAorCQkJCQkoaGRldi0+ZXNjb190eXBlICYgRURSX0VTQ09fTUFTSyk7CiAJCWVsc2UKIAkJCWNvbm4tPnBrdF90eXBlID0gaGRldi0+cGt0X3R5cGUgJiBTQ09fUFRZUEVfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBFU0NPX0xJTks6Ci0JCWNvbm4tPnBrdF90eXBlID0gaGRldi0+ZXNjb190eXBlOworCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPmVzY29fdHlwZSAmIH5FRFJfRVNDT19NQVNLOwogCQlicmVhazsKIAl9CiAKQEAgLTI4MCw2ICsyODcsOCBAQAogCiAJc2tiX3F1ZXVlX3B1cmdlKCZjb25uLT5kYXRhX3EpOwogCisJaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNSw3ICszMzQsNyBAQAogCiAvKiBDcmVhdGUgU0NPIG9yIEFDTCBjb25uZWN0aW9uLgogICogRGV2aWNlIF9tdXN0XyBiZSBsb2NrZWQgKi8KLXN0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5lY3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0LCBfX3U4IGF1dGhfdHlwZSkKK3N0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5lY3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0LCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpCiB7CiAJc3RydWN0IGhjaV9jb25uICphY2w7CiAJc3RydWN0IGhjaV9jb25uICpzY287CkBAIC0zNDAsNiArMzQ5LDcgQEAKIAloY2lfY29ubl9ob2xkKGFjbCk7CiAKIAlpZiAoYWNsLT5zdGF0ZSA9PSBCVF9PUEVOIHx8IGFjbC0+c3RhdGUgPT0gQlRfQ0xPU0VEKSB7CisJCWFjbC0+c2VjX2xldmVsID0gc2VjX2xldmVsOwogCQlhY2wtPmF1dGhfdHlwZSA9IGF1dGhfdHlwZTsKIAkJaGNpX2FjbF9jb25uZWN0KGFjbCk7CiAJfQpAQCAtMzg1LDUxICszOTUsNTkgQEAKIEVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fY2hlY2tfbGlua19tb2RlKTsKIAogLyogQXV0aGVudGljYXRlIHJlbW90ZSBkZXZpY2UgKi8KLWludCBoY2lfY29ubl9hdXRoKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3N0YXRpYyBpbnQgaGNpX2Nvbm5fYXV0aChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSkKIHsKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAotCWlmIChjb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+aGRldi0+c3NwX21vZGUgPiAwKSB7Ci0JCWlmICghKGNvbm4tPmF1dGhfdHlwZSAmIDB4MDEpKSB7Ci0JCQljb25uLT5hdXRoX3R5cGUgfD0gMHgwMTsKLQkJCWNvbm4tPmxpbmtfbW9kZSAmPSB+SENJX0xNX0FVVEg7Ci0JCX0KLQl9Ci0KLQlpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0FVVEgpCisJaWYgKHNlY19sZXZlbCA+IGNvbm4tPnNlY19sZXZlbCkKKwkJY29ubi0+c2VjX2xldmVsID0gc2VjX2xldmVsOworCWVsc2UgaWYgKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9BVVRIKQogCQlyZXR1cm4gMTsKIAorCWNvbm4tPmF1dGhfdHlwZSA9IGF1dGhfdHlwZTsKKwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9BVVRIX1BFTkQsICZjb25uLT5wZW5kKSkgewogCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwogCQljcC5oYW5kbGUgPSBjcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX0FVVEhfUkVRVUVTVEVELAogCQkJCQkJCXNpemVvZihjcCksICZjcCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhjaV9jb25uX2F1dGgpOwogCi0vKiBFbmFibGUgZW5jcnlwdGlvbiAqLwotaW50IGhjaV9jb25uX2VuY3J5cHQoc3RydWN0IGhjaV9jb25uICpjb25uKQorLyogRW5hYmxlIHNlY3VyaXR5ICovCitpbnQgaGNpX2Nvbm5fc2VjdXJpdHkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpCiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKKwlpZiAoc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykgeworCQlpZiAoY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPmhkZXYtPnNzcF9tb2RlID4gMCkKKwkJCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKTsKKwkJZWxzZQorCQkJcmV0dXJuIDE7CisJfQorCiAJaWYgKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKQotCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uKTsKKwkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fRU5DUllQVF9QRU5ELCAmY29ubi0+cGVuZCkpCiAJCXJldHVybiAwOwogCi0JaWYgKGhjaV9jb25uX2F1dGgoY29ubikpIHsKKwlpZiAoaGNpX2Nvbm5fYXV0aChjb25uLCBzZWNfbGV2ZWwsIGF1dGhfdHlwZSkpIHsKIAkJc3RydWN0IGhjaV9jcF9zZXRfY29ubl9lbmNyeXB0IGNwOwogCQljcC5oYW5kbGUgID0gY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKIAkJY3AuZW5jcnlwdCA9IDE7CiAJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfU0VUX0NPTk5fRU5DUllQVCwKIAkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoY2lfY29ubl9lbmNyeXB0KTsKK0VYUE9SVF9TWU1CT0woaGNpX2Nvbm5fc2VjdXJpdHkpOwogCiAvKiBDaGFuZ2UgbGluayBrZXkgKi8KIGludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKQpAQCAtNDQyLDEyICs0NjAsMTMgQEAKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9DSEFOR0VfQ09OTl9MSU5LX0tFWSwKIAkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwogCX0KKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkpOwogCiAvKiBTd2l0Y2ggcm9sZSAqLwotaW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdWludDhfdCByb2xlKQoraW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByb2xlKQogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCkBAIC00NjAsNiArNDc5LDcgQEAKIAkJY3Aucm9sZSA9IHJvbGU7CiAJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfU1dJVENIX1JPTEUsIHNpemVvZihjcCksICZjcCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGhjaV9jb25uX3N3aXRjaF9yb2xlKTsKQEAgLTU0Miw5ICs1NjIsNyBAQAogCiAJCWMtPnN0YXRlID0gQlRfQ0xPU0VEOwogCi0JCWhjaV9jb25uX2RlbF9zeXNmcyhjKTsKLQotCQloY2lfcHJvdG9fZGlzY29ubl9pbmQoYywgMHgxNik7CisJCWhjaV9wcm90b19kaXNjb25uX2NmbShjLCAweDE2KTsKIAkJaGNpX2Nvbm5fZGVsKGMpOwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCBiYTc4Y2MxLi5jZDA2MTUxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC0xNTY1LDggKzE1NjUsNyBAQAogCiAJLyogU2VuZCBxdWV1ZWQgY29tbWFuZHMgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmhkZXYtPmNtZF9jbnQpICYmIChza2IgPSBza2JfZGVxdWV1ZSgmaGRldi0+Y21kX3EpKSkgewotCQlpZiAoaGRldi0+c2VudF9jbWQpCi0JCQlrZnJlZV9za2IoaGRldi0+c2VudF9jbWQpOworCQlrZnJlZV9za2IoaGRldi0+c2VudF9jbWQpOwogCiAJCWlmICgoaGRldi0+c2VudF9jbWQgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKSkpIHsKIAkJCWF0b21pY19kZWMoJmhkZXYtPmNtZF9jbnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggZjkxYmE2OS4uNTU1MzQyNCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC00ODQsNiArNDg0LDE1IEBACiAJaWYgKGhkZXYtPmZlYXR1cmVzWzRdICYgTE1QX0VWNSkKIAkJaGRldi0+ZXNjb190eXBlIHw9IChFU0NPX0VWNSk7CiAKKwlpZiAoaGRldi0+ZmVhdHVyZXNbNV0gJiBMTVBfRURSX0VTQ09fMk0pCisJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT18yRVYzKTsKKworCWlmIChoZGV2LT5mZWF0dXJlc1s1XSAmIExNUF9FRFJfRVNDT18zTSkKKwkJaGRldi0+ZXNjb190eXBlIHw9IChFU0NPXzNFVjMpOworCisJaWYgKGhkZXYtPmZlYXR1cmVzWzVdICYgTE1QX0VEUl8zU19FU0NPKQorCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fMkVWNSB8IEVTQ09fM0VWNSk7CisKIAlCVF9EQkcoIiVzIGZlYXR1cmVzIDB4JS4yeCUuMnglLjJ4JS4yeCUuMnglLjJ4JS4yeCUuMngiLCBoZGV2LT5uYW1lLAogCQkJCQloZGV2LT5mZWF0dXJlc1swXSwgaGRldi0+ZmVhdHVyZXNbMV0sCiAJCQkJCWhkZXYtPmZlYXR1cmVzWzJdLCBoZGV2LT5mZWF0dXJlc1szXSwKQEAgLTkxNCw3ICs5MjMsOCBAQAogCWlmIChldi0+c3RhdHVzKSB7CiAJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKIAkJaGNpX2Nvbm5fZGVsKGNvbm4pOwotCX0KKwl9IGVsc2UgaWYgKGV2LT5saW5rX3R5cGUgIT0gQUNMX0xJTkspCisJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKIAogdW5sb2NrOgogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwpAQCAtMTAwOSw5ICsxMDE5LDcgQEAKIAlpZiAoY29ubikgewogCQljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAotCQloY2lfY29ubl9kZWxfc3lzZnMoY29ubik7Ci0KLQkJaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGNvbm4sIGV2LT5yZWFzb24pOworCQloY2lfcHJvdG9fZGlzY29ubl9jZm0oY29ubiwgZXYtPnJlYXNvbik7CiAJCWhjaV9jb25uX2RlbChjb25uKTsKIAl9CiAKQEAgLTE2MDAsNyArMTYwOCw4IEBACiAKIAkJaWYgKGNvbm4tPnN0YXRlID09IEJUX0NPTkZJRykgewogCQkJaWYgKCFldi0+c3RhdHVzICYmIGhkZXYtPnNzcF9tb2RlID4gMCAmJgotCQkJCQljb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+b3V0KSB7CisJCQkJCWNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5vdXQgJiYKKwkJCQkJY29ubi0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX1NEUCkgewogCQkJCXN0cnVjdCBoY2lfY3BfYXV0aF9yZXF1ZXN0ZWQgY3A7CiAJCQkJY3AuaGFuZGxlID0gZXYtPmhhbmRsZTsKIAkJCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX0FVVEhfUkVRVUVTVEVELApAQCAtMTYzNyw2ICsxNjQ2LDEzIEBACiAJCWNvbm4tPnR5cGUgPSBTQ09fTElOSzsKIAl9CiAKKwlpZiAoY29ubi0+b3V0ICYmIGV2LT5zdGF0dXMgPT0gMHgxYyAmJiBjb25uLT5hdHRlbXB0IDwgMikgeworCQljb25uLT5wa3RfdHlwZSA9IChoZGV2LT5lc2NvX3R5cGUgJiBTQ09fRVNDT19NQVNLKSB8CisJCQkJCShoZGV2LT5lc2NvX3R5cGUgJiBFRFJfRVNDT19NQVNLKTsKKwkJaGNpX3NldHVwX3N5bmMoY29ubiwgY29ubi0+bGluay0+aGFuZGxlKTsKKwkJZ290byB1bmxvY2s7CisJfQorCiAJaWYgKCFldi0+c3RhdHVzKSB7CiAJCWNvbm4tPmhhbmRsZSA9IF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSk7CiAJCWNvbm4tPnN0YXRlICA9IEJUX0NPTk5FQ1RFRDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IDFhMWY5MTYuLmVkODI3OTYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJCWRldiA9IGRldmljZV9maW5kX2NoaWxkKCZjb25uLT5kZXYsIE5VTEwsIF9fbWF0Y2hfdHR5KTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKLQkJZGV2aWNlX21vdmUoZGV2LCBOVUxMKTsKKwkJZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpOwogCQlwdXRfZGV2aWNlKGRldik7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggYjkzNzQ4ZS4uY2E0ZDNiNCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtNTAsOSArNTAsMTAgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9sMmNhcC5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjIuMTEiCisjZGVmaW5lIFZFUlNJT04gIjIuMTMiCiAKLXN0YXRpYyB1MzIgbDJjYXBfZmVhdF9tYXNrID0gMHgwMDAwOworc3RhdGljIHUzMiBsMmNhcF9mZWF0X21hc2sgPSAweDAwODA7CitzdGF0aWMgdTggbDJjYXBfZml4ZWRfY2hhbls4XSA9IHsgMHgwMiwgfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbDJjYXBfc29ja19vcHM7CiAKQEAgLTc3LDkgKzc4LDEwIEBACiAKIAliaF9sb2NrX3NvY2soc2spOwogCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUICYmCi0JCQkobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiAoTDJDQVBfTE1fQVVUSCB8Ci0JCQkJCUwyQ0FQX0xNX0VOQ1JZUFQgfCBMMkNBUF9MTV9TRUNVUkUpKSkKKwlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fCBzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKQorCQlyZWFzb24gPSBFQ09OTlJFRlVTRUQ7CisJZWxzZSBpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QgJiYKKwkJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9TRFApCiAJCXJlYXNvbiA9IEVDT05OUkVGVVNFRDsKIAllbHNlCiAJCXJlYXNvbiA9IEVUSU1FRE9VVDsKQEAgLTIwNCw2ICsyMDYsOCBAQAogCiAJQlRfREJHKCJjb25uICVwLCBwc20gMHglMi4yeCwgZGNpZCAweCU0LjR4IiwgY29ubiwgbDJjYXBfcGkoc2spLT5wc20sIGwyY2FwX3BpKHNrKS0+ZGNpZCk7CiAKKwljb25uLT5kaXNjX3JlYXNvbiA9IDB4MTM7CisKIAlsMmNhcF9waShzayktPmNvbm4gPSBjb25uOwogCiAJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CkBAIC0yNTksMTggKzI2MywzNSBAQAogfQogCiAvKiBTZXJ2aWNlIGxldmVsIHNlY3VyaXR5ICovCi1zdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19saW5rX21vZGUoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBpbnQgbDJjYXBfY2hlY2tfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCV9fdTggYXV0aF90eXBlOwogCi0JaWYgKChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX0VOQ1JZUFQpIHx8Ci0JCQkJKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fU0VDVVJFKSkKLQkJcmV0dXJuIGhjaV9jb25uX2VuY3J5cHQoY29ubi0+aGNvbik7CisJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IGNwdV90b19sZTE2KDB4MDAwMSkpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpCisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElOR19NSVRNOworCQllbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKIAotCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX0FVVEgpCi0JCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4tPmhjb24pOworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJCWJyZWFrOworCQl9CisJfQogCi0JcmV0dXJuIDE7CisJcmV0dXJuIGhjaV9jb25uX3NlY3VyaXR5KGNvbm4tPmhjb24sIGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsLAorCQkJCQkJCQlhdXRoX3R5cGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHU4IGwyY2FwX2dldF9pZGVudChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKQEAgLTMxMiw3ICszMzMsMTAgQEAKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKIAogCWlmIChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQpIHsKLQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKKwkJaWYgKCEoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FKSkKKwkJCXJldHVybjsKKworCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgcmVxOwogCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwogCQkJcmVxLnBzbSAgPSBsMmNhcF9waShzayktPnBzbTsKQEAgLTM1Niw3ICszODAsNyBAQAogCQl9CiAKIAkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7Ci0JCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgeworCQkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgewogCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CiAJCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwogCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CkBAIC0zNzEsMTAgKzM5NSwxOCBAQAogCQkJcnNwLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwogCQkJcnNwLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwogCi0JCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgewotCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKLQkJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1JfU1VDQ0VTUyk7Ci0JCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOworCQkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgeworCQkJCWlmIChidF9zayhzayktPmRlZmVyX3NldHVwKSB7CisJCQkJCXN0cnVjdCBzb2NrICpwYXJlbnQgPSBidF9zayhzayktPnBhcmVudDsKKwkJCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1BFTkQpOworCQkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfQVVUSE9SX1BFTkQpOworCQkJCQlwYXJlbnQtPnNrX2RhdGFfcmVhZHkocGFyZW50LCAwKTsKKworCQkJCX0gZWxzZSB7CisJCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKKwkJCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOworCQkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1JfUEVORCk7CiAJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX0FVVEhFTl9QRU5EKTsKQEAgLTQyNiw3ICs0NTgsNyBAQAogCXJlYWRfbG9jaygmbC0+bG9jayk7CiAKIAlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fUkVMSUFCTEUpCisJCWlmIChsMmNhcF9waShzayktPmZvcmNlX3JlbGlhYmxlKQogCQkJc2stPnNrX2VyciA9IGVycjsKIAl9CiAKQEAgLTQzNyw2ICs0NjksNyBAQAogewogCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gKHZvaWQgKikgYXJnOwogCisJY29ubi0+aW5mb19zdGF0ZSB8PSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORTsKIAljb25uLT5pbmZvX2lkZW50ID0gMDsKIAogCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CkBAIC00NzAsNiArNTAzLDggQEAKIAlzcGluX2xvY2tfaW5pdCgmY29ubi0+bG9jayk7CiAJcndsb2NrX2luaXQoJmNvbm4tPmNoYW5fbGlzdC5sb2NrKTsKIAorCWNvbm4tPmRpc2NfcmVhc29uID0gMHgxMzsKKwogCXJldHVybiBjb25uOwogfQogCkBAIC00ODMsOCArNTE4LDcgQEAKIAogCUJUX0RCRygiaGNvbiAlcCBjb25uICVwLCBlcnIgJWQiLCBoY29uLCBjb25uLCBlcnIpOwogCi0JaWYgKGNvbm4tPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGNvbm4tPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGNvbm4tPnJ4X3NrYik7CiAKIAkvKiBLaWxsIGNoYW5uZWxzICovCiAJd2hpbGUgKChzayA9IGNvbm4tPmNoYW5fbGlzdC5oZWFkKSkgewpAQCAtNjA4LDcgKzY0Miw2IEBACiAKIAljYXNlIEJUX0NPTk5FQ1RFRDoKIAljYXNlIEJUX0NPTkZJRzoKLQljYXNlIEJUX0NPTk5FQ1QyOgogCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKIAkJCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOwogCQkJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxIHJlcTsKQEAgLTYyNCw2ICs2NTcsMjcgQEAKIAkJCWwyY2FwX2NoYW5fZGVsKHNrLCByZWFzb24pOwogCQlicmVhazsKIAorCWNhc2UgQlRfQ09OTkVDVDI6CisJCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgeworCQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOworCQkJX191MTYgcmVzdWx0OworCisJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfQkFEX1BTTTsKKworCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOworCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKKwkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKwkJfSBlbHNlCisJCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJYnJlYWs7CisKIAljYXNlIEJUX0NPTk5FQ1Q6CiAJY2FzZSBCVF9ESVNDT05OOgogCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKQEAgLTY1MywxMyArNzA3LDE5IEBACiAKIAlpZiAocGFyZW50KSB7CiAJCXNrLT5za190eXBlID0gcGFyZW50LT5za190eXBlOworCQlidF9zayhzayktPmRlZmVyX3NldHVwID0gYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXA7CisKIAkJcGktPmltdHUgPSBsMmNhcF9waShwYXJlbnQpLT5pbXR1OwogCQlwaS0+b210dSA9IGwyY2FwX3BpKHBhcmVudCktPm9tdHU7Ci0JCXBpLT5saW5rX21vZGUgPSBsMmNhcF9waShwYXJlbnQpLT5saW5rX21vZGU7CisJCXBpLT5zZWNfbGV2ZWwgPSBsMmNhcF9waShwYXJlbnQpLT5zZWNfbGV2ZWw7CisJCXBpLT5yb2xlX3N3aXRjaCA9IGwyY2FwX3BpKHBhcmVudCktPnJvbGVfc3dpdGNoOworCQlwaS0+Zm9yY2VfcmVsaWFibGUgPSBsMmNhcF9waShwYXJlbnQpLT5mb3JjZV9yZWxpYWJsZTsKIAl9IGVsc2UgewogCQlwaS0+aW10dSA9IEwyQ0FQX0RFRkFVTFRfTVRVOwogCQlwaS0+b210dSA9IDA7Ci0JCXBpLT5saW5rX21vZGUgPSAwOworCQlwaS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlwaS0+cm9sZV9zd2l0Y2ggPSAwOworCQlwaS0+Zm9yY2VfcmVsaWFibGUgPSAwOwogCX0KIAogCS8qIERlZmF1bHQgY29uZmlnIG9wdGlvbnMgKi8KQEAgLTcyMywxNyArNzgzLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJfbGVuKQorc3RhdGljIGludCBsMmNhcF9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWxlbikKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfbDIgKmxhID0gKHN0cnVjdCBzb2NrYWRkcl9sMiAqKSBhZGRyOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCWludCBlcnIgPSAwOworCXN0cnVjdCBzb2NrYWRkcl9sMiBsYTsKKwlpbnQgbGVuLCBlcnIgPSAwOwogCi0JQlRfREJHKCJzayAlcCwgJXMgJWQiLCBzaywgYmF0b3N0cigmbGEtPmwyX2JkYWRkciksIGxhLT5sMl9wc20pOworCUJUX0RCRygic2sgJXAiLCBzayk7CiAKIAlpZiAoIWFkZHIgfHwgYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltZW1zZXQoJmxhLCAwLCBzaXplb2YobGEpKTsKKwlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihsYSksIGFsZW4pOworCW1lbWNweSgmbGEsIGFkZHIsIGxlbik7CisKKwlpZiAobGEubDJfY2lkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWxvY2tfc29jayhzayk7CiAKIAlpZiAoc2stPnNrX3N0YXRlICE9IEJUX09QRU4pIHsKQEAgLTc0MSw3ICs4MDgsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGxhLT5sMl9wc20gJiYgYnRvaHMobGEtPmwyX3BzbSkgPCAweDEwMDEgJiYKKwlpZiAobGEubDJfcHNtICYmIGJ0b2hzKGxhLmwyX3BzbSkgPCAweDEwMDEgJiYKIAkJCQkhY2FwYWJsZShDQVBfTkVUX0JJTkRfU0VSVklDRSkpIHsKIAkJZXJyID0gLUVBQ0NFUzsKIAkJZ290byBkb25lOwpAQCAtNzQ5LDE0ICs4MTYsMTcgQEAKIAogCXdyaXRlX2xvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CiAKLQlpZiAobGEtPmwyX3BzbSAmJiBfX2wyY2FwX2dldF9zb2NrX2J5X2FkZHIobGEtPmwyX3BzbSwgJmxhLT5sMl9iZGFkZHIpKSB7CisJaWYgKGxhLmwyX3BzbSAmJiBfX2wyY2FwX2dldF9zb2NrX2J5X2FkZHIobGEubDJfcHNtLCAmbGEubDJfYmRhZGRyKSkgewogCQllcnIgPSAtRUFERFJJTlVTRTsKIAl9IGVsc2UgewogCQkvKiBTYXZlIHNvdXJjZSBhZGRyZXNzICovCi0JCWJhY3B5KCZidF9zayhzayktPnNyYywgJmxhLT5sMl9iZGFkZHIpOwotCQlsMmNhcF9waShzayktPnBzbSAgID0gbGEtPmwyX3BzbTsKLQkJbDJjYXBfcGkoc2spLT5zcG9ydCA9IGxhLT5sMl9wc207CisJCWJhY3B5KCZidF9zayhzayktPnNyYywgJmxhLmwyX2JkYWRkcik7CisJCWwyY2FwX3BpKHNrKS0+cHNtICAgPSBsYS5sMl9wc207CisJCWwyY2FwX3BpKHNrKS0+c3BvcnQgPSBsYS5sMl9wc207CiAJCXNrLT5za19zdGF0ZSA9IEJUX0JPVU5EOworCisJCWlmIChidG9ocyhsYS5sMl9wc20pID09IDB4MDAwMSB8fCBidG9ocyhsYS5sMl9wc20pID09IDB4MDAwMykKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOwogCX0KIAogCXdyaXRlX3VubG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKQEAgLTc3Niw3ICs4NDYsOCBAQAogCV9fdTggYXV0aF90eXBlOwogCWludCBlcnIgPSAwOwogCi0JQlRfREJHKCIlcyAtPiAlcyBwc20gMHglMi4yeCIsIGJhdG9zdHIoc3JjKSwgYmF0b3N0cihkc3QpLCBsMmNhcF9waShzayktPnBzbSk7CisJQlRfREJHKCIlcyAtPiAlcyBwc20gMHglMi4yeCIsIGJhdG9zdHIoc3JjKSwgYmF0b3N0cihkc3QpLAorCQkJCQkJCWwyY2FwX3BpKHNrKS0+cHNtKTsKIAogCWlmICghKGhkZXYgPSBoY2lfZ2V0X3JvdXRlKGRzdCwgc3JjKSkpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwpAQCAtNzg1LDIxICs4NTYsNDIgQEAKIAogCWVyciA9IC1FTk9NRU07CiAKLQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9BVVRIIHx8Ci0JCQlsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX0VOQ1JZUFQgfHwKLQkJCQlsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkKKwlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19SQVcpIHsKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElORzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgeworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKIAkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07CiAJCWVsc2UKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKLQl9IGVsc2UgewotCQlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkKIAkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCQllbHNlCisKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOworCX0gZWxzZSB7CisJCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgogCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CisJCQlicmVhazsKKwkJfQogCX0KIAotCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCBBQ0xfTElOSywgZHN0LCBhdXRoX3R5cGUpOworCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCBBQ0xfTElOSywgZHN0LAorCQkJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKIAlpZiAoIWhjb24pCiAJCWdvdG8gZG9uZTsKIApAQCAtODM1LDIwICs5MjcsMjUgQEAKIAogc3RhdGljIGludCBsMmNhcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWxlbiwgaW50IGZsYWdzKQogewotCXN0cnVjdCBzb2NrYWRkcl9sMiAqbGEgPSAoc3RydWN0IHNvY2thZGRyX2wyICopIGFkZHI7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0JaW50IGVyciA9IDA7Ci0KLQlsb2NrX3NvY2soc2spOworCXN0cnVjdCBzb2NrYWRkcl9sMiBsYTsKKwlpbnQgbGVuLCBlcnIgPSAwOwogCiAJQlRfREJHKCJzayAlcCIsIHNrKTsKIAotCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQkxVRVRPT1RIIHx8IGFsZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2wyKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQorCWlmICghYWRkciB8fCBhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCAmJiAhbGEtPmwyX3BzbSkgeworCW1lbXNldCgmbGEsIDAsIHNpemVvZihsYSkpOworCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGxhKSwgYWxlbik7CisJbWVtY3B5KCZsYSwgYWRkciwgbGVuKTsKKworCWlmIChsYS5sMl9jaWQpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9ja19zb2NrKHNrKTsKKworCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCAmJiAhbGEubDJfcHNtKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC04NzUsOCArOTcyLDggQEAKIAl9CiAKIAkvKiBTZXQgZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgcHNtICovCi0JYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmbGEtPmwyX2JkYWRkcik7Ci0JbDJjYXBfcGkoc2spLT5wc20gPSBsYS0+bDJfcHNtOworCWJhY3B5KCZidF9zayhzayktPmRzdCwgJmxhLmwyX2JkYWRkcik7CisJbDJjYXBfcGkoc2spLT5wc20gPSBsYS5sMl9wc207CiAKIAlpZiAoKGVyciA9IGwyY2FwX2RvX2Nvbm5lY3Qoc2spKSkKIAkJZ290byBkb25lOwpAQCAtMTAwMCwxMiArMTA5NywxNiBAQAogCWFkZHItPnNhX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKIAkqbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sMik7CiAKLQlpZiAocGVlcikKKwlpZiAocGVlcikgeworCQlsYS0+bDJfcHNtID0gbDJjYXBfcGkoc2spLT5wc207CiAJCWJhY3B5KCZsYS0+bDJfYmRhZGRyLCAmYnRfc2soc2spLT5kc3QpOwotCWVsc2UKKwkJbGEtPmwyX2NpZCA9IGh0b2JzKGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJfSBlbHNlIHsKKwkJbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+c3BvcnQ7CiAJCWJhY3B5KCZsYS0+bDJfYmRhZGRyLCAmYnRfc2soc2spLT5zcmMpOworCQlsYS0+bDJfY2lkID0gaHRvYnMobDJjYXBfcGkoc2spLT5zY2lkKTsKKwl9CiAKLQlsYS0+bDJfcHNtID0gbDJjYXBfcGkoc2spLT5wc207CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMDYsMTEgKzEyMDcsMzggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQorc3RhdGljIGludCBsMmNhcF9zb2NrX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QyICYmIGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApIHsKKwkJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKworCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisKKwkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1JfU1VDQ0VTUyk7CisJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJbDJjYXBfc2VuZF9jbWQobDJjYXBfcGkoc2spLT5jb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOworCisJCXJlbGVhc2Vfc29jayhzayk7CisJCXJldHVybiAwOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisKKwlyZXR1cm4gYnRfc29ja19yZWN2bXNnKGlvY2IsIHNvY2ssIG1zZywgbGVuLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfc29ja19zZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbDJjYXBfb3B0aW9ucyBvcHRzOwotCWludCBlcnIgPSAwLCBsZW47CisJaW50IGxlbiwgZXJyID0gMDsKIAl1MzIgb3B0OwogCiAJQlRfREJHKCJzayAlcCIsIHNrKTsKQEAgLTExNDAsNyArMTI2OCwxNSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9waShzayktPmxpbmtfbW9kZSA9IG9wdDsKKwkJaWYgKG9wdCAmIEwyQ0FQX0xNX0FVVEgpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJaWYgKG9wdCAmIEwyQ0FQX0xNX0VOQ1JZUFQpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX01FRElVTTsKKwkJaWYgKG9wdCAmIEwyQ0FQX0xNX1NFQ1VSRSkKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfSElHSDsKKworCQlsMmNhcF9waShzayktPnJvbGVfc3dpdGNoICAgID0gKG9wdCAmIEwyQ0FQX0xNX01BU1RFUik7CisJCWwyY2FwX3BpKHNrKS0+Zm9yY2VfcmVsaWFibGUgPSAob3B0ICYgTDJDQVBfTE1fUkVMSUFCTEUpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMTUyLDEyICsxMjg4LDc3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQorc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOworCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKKworCUJUX0RCRygic2sgJXAiLCBzayk7CisKKwlpZiAobGV2ZWwgPT0gU09MX0wyQ0FQKQorCQlyZXR1cm4gbDJjYXBfc29ja19zZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAobGV2ZWwgIT0gU09MX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCWxvY2tfc29jayhzayk7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYgc2stPnNrX3R5cGUgIT0gU09DS19SQVcpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXNlYy5sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihzZWMpLCBvcHRsZW4pOworCQlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIgKikgJnNlYywgb3B0dmFsLCBsZW4pKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2VjLmxldmVsIDwgQlRfU0VDVVJJVFlfTE9XIHx8CisJCQkJCXNlYy5sZXZlbCA+IEJUX1NFQ1VSSVRZX0hJR0gpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gc2VjLmxldmVsOworCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGdldF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCA9IG9wdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBsMmNhcF9zb2NrX2dldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKIAlzdHJ1Y3QgbDJjYXBfY29ubmluZm8gY2luZm87CiAJaW50IGxlbiwgZXJyID0gMDsKKwl1MzIgb3B0OwogCiAJQlRfREJHKCJzayAlcCIsIHNrKTsKIApAQCAtMTE4MCwxMiArMTM4MSwzNiBAQAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfTE06Ci0JCWlmIChwdXRfdXNlcihsMmNhcF9waShzayktPmxpbmtfbW9kZSwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0xPVzoKKwkJCW9wdCA9IEwyQ0FQX0xNX0FVVEg7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlvcHQgPSBMMkNBUF9MTV9BVVRIIHwgTDJDQVBfTE1fRU5DUllQVDsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlvcHQgPSBMMkNBUF9MTV9BVVRIIHwgTDJDQVBfTE1fRU5DUllQVCB8CisJCQkJCQkJTDJDQVBfTE1fU0VDVVJFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlvcHQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAobDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJCW9wdCB8PSBMMkNBUF9MTV9NQVNURVI7CisKKwkJaWYgKGwyY2FwX3BpKHNrKS0+Zm9yY2VfcmVsaWFibGUpCisJCQlvcHQgfD0gTDJDQVBfTE1fUkVMSUFCTEU7CisKKwkJaWYgKHB1dF91c2VyKG9wdCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9DT05OSU5GTzoKLQkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpIHsKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQgJiYKKwkJCQkJIShzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIgJiYKKwkJCQkJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApKSB7CiAJCQllcnIgPSAtRU5PVENPTk47CiAJCQlicmVhazsKIAkJfQpAQCAtMTIwOCw2ICsxNDMzLDYwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBsMmNhcF9zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CisJaW50IGxlbiwgZXJyID0gMDsKKworCUJUX0RCRygic2sgJXAiLCBzayk7CisKKwlpZiAobGV2ZWwgPT0gU09MX0wyQ0FQKQorCQlyZXR1cm4gbDJjYXBfc29ja19nZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAobGV2ZWwgIT0gU09MX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJbG9ja19zb2NrKHNrKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgQlRfU0VDVVJJVFk6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCAmJiBzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2VjLmxldmVsID0gbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWw7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihzZWMpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIChjaGFyICopICZzZWMsIGxlbikpCisJCQllcnIgPSAtRUZBVUxUOworCisJCWJyZWFrOworCisJY2FzZSBCVF9ERUZFUl9TRVRVUDoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCAmJiBzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHV0X3VzZXIoYnRfc2soc2spLT5kZWZlcl9zZXR1cCwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBsMmNhcF9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CkBAIC0xMjcwLDExICsxNTQ5LDYgQEAKIAkJICovCiAJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOwogCX0KLQotCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX1NFQ1VSRSkgewotCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQkJaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KGNvbm4tPmhjb24pOwotCX0KIH0KIAogLyogQ29weSBmcmFtZSB0byBhbGwgcmF3IHNvY2tldHMgb24gdGhhdCBjb25uZWN0aW9uICovCkBAIC0xNTQ5LDggKzE4MjMsMTEgQEAKIAogCWlmICgoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKSAmJgogCQkJCQljbWQtPmlkZW50ID09IGNvbm4tPmluZm9faWRlbnQpIHsKLQkJY29ubi0+aW5mb19pZGVudCA9IDA7CiAJCWRlbF90aW1lcigmY29ubi0+aW5mb190aW1lcik7CisKKwkJY29ubi0+aW5mb19zdGF0ZSB8PSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORTsKKwkJY29ubi0+aW5mb19pZGVudCA9IDA7CisKIAkJbDJjYXBfY29ubl9zdGFydChjb25uKTsKIAl9CiAKQEAgLTE1ODAsNiArMTg1Nyw3IEBACiAJLyogQ2hlY2sgaWYgdGhlIEFDTCBpcyBzZWN1cmUgZW5vdWdoIChpZiBub3QgU0RQKSAqLwogCWlmIChwc20gIT0gY3B1X3RvX2xlMTYoMHgwMDAxKSAmJgogCQkJCSFoY2lfY29ubl9jaGVja19saW5rX21vZGUoY29ubi0+aGNvbikpIHsKKwkJY29ubi0+ZGlzY19yZWFzb24gPSAweDA1OwogCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7CiAJCWdvdG8gcmVzcG9uc2U7CiAJfQpAQCAtMTYyMSwxMSArMTg5OSwxOCBAQAogCiAJbDJjYXBfcGkoc2spLT5pZGVudCA9IGNtZC0+aWRlbnQ7CiAKLQlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKSB7Ci0JCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7Ci0JCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7Ci0JCQlyZXN1bHQgPSBMMkNBUF9DUl9TVUNDRVNTOwotCQkJc3RhdHVzID0gTDJDQVBfQ1NfTk9fSU5GTzsKKwlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FKSB7CisJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKKwkJCWlmIChidF9zayhzayktPmRlZmVyX3NldHVwKSB7CisJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVDI7CisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfUEVORDsKKwkJCQlzdGF0dXMgPSBMMkNBUF9DU19BVVRIT1JfUEVORDsKKwkJCQlwYXJlbnQtPnNrX2RhdGFfcmVhZHkocGFyZW50LCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NVQ0NFU1M7CisJCQkJc3RhdHVzID0gTDJDQVBfQ1NfTk9fSU5GTzsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1QyOwogCQkJcmVzdWx0ID0gTDJDQVBfQ1JfUEVORDsKQEAgLTE2OTUsMTEgKzE5ODAsMTQgQEAKIAkJbDJjYXBfcGkoc2spLT5kY2lkID0gZGNpZDsKIAkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7CiAKKwkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICY9IH5MMkNBUF9DT05GX0NPTk5FQ1RfUEVORDsKKwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAogCQkJCQlsMmNhcF9idWlsZF9jb25mX3JlcShzaywgcmVxKSwgcmVxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0NSX1BFTkQ6CisJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTkwOCw2ICsyMTk2LDE0IEBACiAJCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIobDJjYXBfZmVhdF9tYXNrKSwgKF9fbGUzMiAqKSByc3AtPmRhdGEpOwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LAogCQkJCQlMMkNBUF9JTkZPX1JTUCwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CisJfSBlbHNlIGlmICh0eXBlID09IEwyQ0FQX0lUX0ZJWEVEX0NIQU4pIHsKKwkJdTggYnVmWzEyXTsKKwkJc3RydWN0IGwyY2FwX2luZm9fcnNwICpyc3AgPSAoc3RydWN0IGwyY2FwX2luZm9fcnNwICopIGJ1ZjsKKwkJcnNwLT50eXBlICAgPSBjcHVfdG9fbGUxNihMMkNBUF9JVF9GSVhFRF9DSEFOKTsKKwkJcnNwLT5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9JUl9TVUNDRVNTKTsKKwkJbWVtY3B5KGJ1ZiArIDQsIGwyY2FwX2ZpeGVkX2NoYW4sIDgpOworCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LAorCQkJCQlMMkNBUF9JTkZPX1JTUCwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGwyY2FwX2luZm9fcnNwIHJzcDsKIAkJcnNwLnR5cGUgICA9IGNwdV90b19sZTE2KHR5cGUpOwpAQCAtMTkyOSwxNCArMjIyNSwzMSBAQAogCiAJQlRfREJHKCJ0eXBlIDB4JTQuNHggcmVzdWx0IDB4JTIuMngiLCB0eXBlLCByZXN1bHQpOwogCi0JY29ubi0+aW5mb19pZGVudCA9IDA7Ci0KIAlkZWxfdGltZXIoJmNvbm4tPmluZm9fdGltZXIpOwogCi0JaWYgKHR5cGUgPT0gTDJDQVBfSVRfRkVBVF9NQVNLKQorCWlmICh0eXBlID09IEwyQ0FQX0lUX0ZFQVRfTUFTSykgewogCQljb25uLT5mZWF0X21hc2sgPSBnZXRfdW5hbGlnbmVkX2xlMzIocnNwLT5kYXRhKTsKIAotCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CisJCWlmIChjb25uLT5mZWF0X21hc2sgJiAweDAwODApIHsKKwkJCXN0cnVjdCBsMmNhcF9pbmZvX3JlcSByZXE7CisJCQlyZXEudHlwZSA9IGNwdV90b19sZTE2KEwyQ0FQX0lUX0ZJWEVEX0NIQU4pOworCisJCQljb25uLT5pbmZvX2lkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOworCisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjb25uLT5pbmZvX2lkZW50LAorCQkJCQlMMkNBUF9JTkZPX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOworCQl9IGVsc2UgeworCQkJY29ubi0+aW5mb19zdGF0ZSB8PSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORTsKKwkJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCisJCQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOworCQl9CisJfSBlbHNlIGlmICh0eXBlID09IEwyQ0FQX0lUX0ZJWEVEX0NIQU4pIHsKKwkJY29ubi0+aW5mb19zdGF0ZSB8PSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORTsKKwkJY29ubi0+aW5mb19pZGVudCA9IDA7CisKKwkJbDJjYXBfY29ubl9zdGFydChjb25uKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNDMsMTAgKzI0NTYsMTUgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCAmaGRldi0+YmRhZGRyKSkgewotCQkJbG0xIHw9IChIQ0lfTE1fQUNDRVBUIHwgbDJjYXBfcGkoc2spLT5saW5rX21vZGUpOworCQkJbG0xIHw9IEhDSV9MTV9BQ0NFUFQ7CisJCQlpZiAobDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJCQlsbTEgfD0gSENJX0xNX01BU1RFUjsKIAkJCWV4YWN0Kys7Ci0JCX0gZWxzZSBpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgQkRBRERSX0FOWSkpCi0JCQlsbTIgfD0gKEhDSV9MTV9BQ0NFUFQgfCBsMmNhcF9waShzayktPmxpbmtfbW9kZSk7CisJCX0gZWxzZSBpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgQkRBRERSX0FOWSkpIHsKKwkJCWxtMiB8PSBIQ0lfTE1fQUNDRVBUOworCQkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQkJbG0yIHw9IEhDSV9MTV9NQVNURVI7CisJCX0KIAl9CiAJcmVhZF91bmxvY2soJmwyY2FwX3NrX2xpc3QubG9jayk7CiAKQEAgLTIxNzIsNyArMjQ5MCwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggcmVhc29uKQorc3RhdGljIGludCBsMmNhcF9kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24pCit7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBoY29uLT5sMmNhcF9kYXRhOworCisJQlRfREJHKCJoY29uICVwIiwgaGNvbik7CisKKwlpZiAoaGNvbi0+dHlwZSAhPSBBQ0xfTElOSyB8fCAhY29ubikKKwkJcmV0dXJuIDB4MTM7CisKKwlyZXR1cm4gY29ubi0+ZGlzY19yZWFzb247Cit9CisKK3N0YXRpYyBpbnQgbDJjYXBfZGlzY29ubl9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCByZWFzb24pCiB7CiAJQlRfREJHKCJoY29uICVwIHJlYXNvbiAlZCIsIGhjb24sIHJlYXNvbik7CiAKQEAgLTIxODQsNyArMjUxNCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzKQorc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX2NoZWNrX2VuY3J5cHRpb24oc3RydWN0IHNvY2sgKnNrLCB1OCBlbmNyeXB0KQoreworCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCkKKwkJcmV0dXJuOworCisJaWYgKGVuY3J5cHQgPT0gMHgwMCkgeworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTUVESVVNKSB7CisJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKKwkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAqIDUpOworCQl9IGVsc2UgaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpCisJCQlfX2wyY2FwX3NvY2tfY2xvc2Uoc2ssIEVDT05OUkVGVVNFRCk7CisJfSBlbHNlIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkKKwkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOworCX0KK30KKworc3RhdGljIGludCBsMmNhcF9zZWN1cml0eV9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCiB7CiAJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbDsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7CkBAIC0yMjAwLDg1ICsyNTQ3LDE2IEBACiAJcmVhZF9sb2NrKCZsLT5sb2NrKTsKIAogCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgewotCQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwotCiAJCWJoX2xvY2tfc29jayhzayk7CiAKLQkJaWYgKChwaS0+bGlua19tb2RlICYgKEwyQ0FQX0xNX0VOQ1JZUFQgfCBMMkNBUF9MTV9TRUNVUkUpKSAmJgotCQkJCQkhKGhjb24tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKSAmJgotCQkJCQkJCQkhc3RhdHVzKSB7CisJCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORCkgewogCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QpIHsKLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKLQkJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7Ci0JCQkJcmVxLnBzbSAgPSBsMmNhcF9waShzayktPnBzbTsKLQotCQkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7Ci0KLQkJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCQlMMkNBUF9DT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOwotCQkJfSBlbHNlIHsKLQkJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKLQkJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogLyAxMCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QyKSB7Ci0JCQlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOwotCQkJX191MTYgcmVzdWx0OwotCi0JCQlpZiAoIXN0YXR1cykgewotCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKLQkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TVUNDRVNTOwotCQkJfSBlbHNlIHsKLQkJCQlzay0+c2tfc3RhdGUgPSBCVF9ESVNDT05OOwotCQkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAvIDEwKTsKLQkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7Ci0JCQl9Ci0KLQkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7Ci0JCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKLQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKLQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7Ci0JCX0KLQotCQliaF91bmxvY2tfc29jayhzayk7Ci0JfQotCi0JcmVhZF91bmxvY2soJmwtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbDJjYXBfZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCi17Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbDsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7Ci0Jc3RydWN0IHNvY2sgKnNrOwotCi0JaWYgKCFjb25uKQotCQlyZXR1cm4gMDsKLQotCWwgPSAmY29ubi0+Y2hhbl9saXN0OwotCi0JQlRfREJHKCJjb25uICVwIiwgY29ubik7Ci0KLQlyZWFkX2xvY2soJmwtPmxvY2spOwotCi0JZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7Ci0JCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7Ci0KLQkJYmhfbG9ja19zb2NrKHNrKTsKLQotCQlpZiAoKHBpLT5saW5rX21vZGUgJiAoTDJDQVBfTE1fRU5DUllQVCB8IEwyQ0FQX0xNX1NFQ1VSRSkpICYmCi0JCQkJCShzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8Ci0JCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKSAmJgotCQkJCQkJIXN0YXR1cyAmJiBlbmNyeXB0ID09IDB4MDApIHsKLQkJCV9fbDJjYXBfc29ja19jbG9zZShzaywgRUNPTk5SRUZVU0VEKTsKKwkJaWYgKCFzdGF0dXMgJiYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKKwkJCQkJCXNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpKSB7CisJCQlsMmNhcF9jaGVja19lbmNyeXB0aW9uKHNrLCBlbmNyeXB0KTsKIAkJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yMzc2LDcgKzI2NTQsNyBAQAogCQkJZ290byBkcm9wOwogCiAJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KGNvbm4tPnJ4X3NrYiwgc2tiLT5sZW4pLAotCQkJICAgICAgc2tiLT5sZW4pOworCQkJCQkJCQlza2ItPmxlbik7CiAJCWNvbm4tPnJ4X2xlbiA9IGxlbiAtIHNrYi0+bGVuOwogCX0gZWxzZSB7CiAJCUJUX0RCRygiQ29udDogZnJhZyBsZW4gJWQgKGV4cGVjdGluZyAlZCkiLCBza2ItPmxlbiwgY29ubi0+cnhfbGVuKTsKQEAgLTIzOTgsNyArMjY3Niw3IEBACiAJCX0KIAogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgc2tiX3B1dChjb25uLT5yeF9za2IsIHNrYi0+bGVuKSwKLQkJCSAgICAgIHNrYi0+bGVuKTsKKwkJCQkJCQkJc2tiLT5sZW4pOwogCQljb25uLT5yeF9sZW4gLT0gc2tiLT5sZW47CiAKIAkJaWYgKCFjb25uLT5yeF9sZW4pIHsKQEAgLTI0MjQsMTAgKzI3MDIsMTAgQEAKIAlza19mb3JfZWFjaChzaywgbm9kZSwgJmwyY2FwX3NrX2xpc3QuaGVhZCkgewogCQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCi0JCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVzICVzICVkICVkIDB4JTQuNHggMHglNC40eCAlZCAlZCAweCV4XG4iLAorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcyAlcyAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgJWRcbiIsCiAJCQkJYmF0b3N0cigmYnRfc2soc2spLT5zcmMpLCBiYXRvc3RyKCZidF9zayhzayktPmRzdCksCiAJCQkJc2stPnNrX3N0YXRlLCBidG9ocyhwaS0+cHNtKSwgcGktPnNjaWQsIHBpLT5kY2lkLAotCQkJCXBpLT5pbXR1LCBwaS0+b210dSwgcGktPmxpbmtfbW9kZSk7CisJCQkJcGktPmltdHUsIHBpLT5vbXR1LCBwaS0+c2VjX2xldmVsKTsKIAl9CiAKIAlyZWFkX3VubG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKQEAgLTI0NDcsNyArMjcyNSw3IEBACiAJLmFjY2VwdAkJPSBsMmNhcF9zb2NrX2FjY2VwdCwKIAkuZ2V0bmFtZQk9IGwyY2FwX3NvY2tfZ2V0bmFtZSwKIAkuc2VuZG1zZwk9IGwyY2FwX3NvY2tfc2VuZG1zZywKLQkucmVjdm1zZwk9IGJ0X3NvY2tfcmVjdm1zZywKKwkucmVjdm1zZwk9IGwyY2FwX3NvY2tfcmVjdm1zZywKIAkucG9sbAkJPSBidF9zb2NrX3BvbGwsCiAJLmlvY3RsCQk9IGJ0X3NvY2tfaW9jdGwsCiAJLm1tYXAJCT0gc29ja19ub19tbWFwLApAQCAtMjQ2OSw4ICsyNzQ3LDggQEAKIAkuY29ubmVjdF9pbmQJPSBsMmNhcF9jb25uZWN0X2luZCwKIAkuY29ubmVjdF9jZm0JPSBsMmNhcF9jb25uZWN0X2NmbSwKIAkuZGlzY29ubl9pbmQJPSBsMmNhcF9kaXNjb25uX2luZCwKLQkuYXV0aF9jZm0JPSBsMmNhcF9hdXRoX2NmbSwKLQkuZW5jcnlwdF9jZm0JPSBsMmNhcF9lbmNyeXB0X2NmbSwKKwkuZGlzY29ubl9jZm0JPSBsMmNhcF9kaXNjb25uX2NmbSwKKwkuc2VjdXJpdHlfY2ZtCT0gbDJjYXBfc2VjdXJpdHlfY2ZtLAogCS5yZWN2X2FjbGRhdGEJPSBsMmNhcF9yZWN2X2FjbGRhdGEKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCBhY2Q4NGZkLi4xZDBmYjBmIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9sMmNhcC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvcmZjb21tLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMS4xMCIKKyNkZWZpbmUgVkVSU0lPTiAiMS4xMSIKIAogc3RhdGljIGludCBkaXNhYmxlX2NmYyA9IDA7CiBzdGF0aWMgaW50IGNoYW5uZWxfbXR1ID0gLTE7CkBAIC0yMjMsMTkgKzIyMywyNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJmY29tbV9jaGVja19saW5rX21vZGUoc3RydWN0IHJmY29tbV9kbGMgKmQpCitzdGF0aWMgaW5saW5lIGludCByZmNvbW1fY2hlY2tfc2VjdXJpdHkoc3RydWN0IHJmY29tbV9kbGMgKmQpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gZC0+c2Vzc2lvbi0+c29jay0+c2s7CisJX191OCBhdXRoX3R5cGU7CiAKLQlpZiAoZC0+bGlua19tb2RlICYgKFJGQ09NTV9MTV9FTkNSWVBUIHwgUkZDT01NX0xNX1NFQ1VSRSkpIHsKLQkJaWYgKCFoY2lfY29ubl9lbmNyeXB0KGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbikpCi0JCQlyZXR1cm4gMTsKLQl9IGVsc2UgaWYgKGQtPmxpbmtfbW9kZSAmIFJGQ09NTV9MTV9BVVRIKSB7Ci0JCWlmICghaGNpX2Nvbm5fYXV0aChsMmNhcF9waShzayktPmNvbm4tPmhjb24pKQotCQkJcmV0dXJuIDE7CisJc3dpdGNoIChkLT5zZWNfbGV2ZWwpIHsKKwljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKKwkJYnJlYWs7CisJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkobDJjYXBfcGkoc2spLT5jb25uLT5oY29uLCBkLT5zZWNfbGV2ZWwsCisJCQkJCQkJCWF1dGhfdHlwZSk7CiB9CiAKIC8qIC0tLS0gUkZDT01NIERMQ3MgLS0tLSAqLwpAQCAtMzg4LDEwICszOTQsMTAgQEAKIAlkLT5jZmMgPSAocy0+Y2ZjID09IFJGQ09NTV9DRkNfVU5LTk9XTikgPyAwIDogcy0+Y2ZjOwogCiAJaWYgKHMtPnN0YXRlID09IEJUX0NPTk5FQ1RFRCkgewotCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKLQkJZWxzZQorCQlpZiAocmZjb21tX2NoZWNrX3NlY3VyaXR5KGQpKQogCQkJcmZjb21tX3NlbmRfcG4ocywgMSwgZCk7CisJCWVsc2UKKwkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKIAl9CiAKIAlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQ09OTl9USU1FT1VUKTsKQEAgLTQyMSw5ICs0MjcsMTYgQEAKIAkJCWQsIGQtPnN0YXRlLCBkLT5kbGNpLCBlcnIsIHMpOwogCiAJc3dpdGNoIChkLT5zdGF0ZSkgewotCWNhc2UgQlRfQ09OTkVDVEVEOgotCWNhc2UgQlRfQ09ORklHOgogCWNhc2UgQlRfQ09OTkVDVDoKKwljYXNlIEJUX0NPTkZJRzoKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncykpIHsKKwkJCXNldF9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpOworCQkJcmZjb21tX3NjaGVkdWxlKFJGQ09NTV9TQ0hFRF9BVVRIKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBCVF9DT05ORUNURUQ6CiAJCWQtPnN0YXRlID0gQlRfRElTQ09OTjsKIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmZC0+dHhfcXVldWUpKSB7CiAJCQlyZmNvbW1fc2VuZF9kaXNjKHMsIGQtPmRsY2kpOwpAQCAtNDM0LDYgKzQ0NywxNSBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBCVF9PUEVOOgorCWNhc2UgQlRfQ09OTkVDVDI6CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKSB7CisJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKKwkJCXJmY29tbV9zY2hlZHVsZShSRkNPTU1fU0NIRURfQVVUSCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBGYWxsIHRocm91Z2ggKi8KKwogCWRlZmF1bHQ6CiAJCXJmY29tbV9kbGNfY2xlYXJfdGltZXIoZCk7CiAKQEAgLTYzNiw2ICs2NTgsNyBAQAogCWJhY3B5KCZhZGRyLmwyX2JkYWRkciwgc3JjKTsKIAlhZGRyLmwyX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKIAlhZGRyLmwyX3BzbSAgICA9IDA7CisJYWRkci5sMl9jaWQgICAgPSAwOwogCSplcnIgPSBrZXJuZWxfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoYWRkcikpOwogCWlmICgqZXJyIDwgMCkKIAkJZ290byBmYWlsZWQ7CkBAIC02NTcsNiArNjgwLDcgQEAKIAliYWNweSgmYWRkci5sMl9iZGFkZHIsIGRzdCk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSBodG9icyhSRkNPTU1fUFNNKTsKKwlhZGRyLmwyX2NpZCAgICA9IDA7CiAJKmVyciA9IGtlcm5lbF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSwgT19OT05CTE9DSyk7CiAJaWYgKCplcnIgPT0gMCB8fCAqZXJyID09IC1FSU5QUk9HUkVTUykKIAkJcmV0dXJuIHM7CkBAIC0xMTYyLDcgKzExODYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByZmNvbW1fZGxjX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKK3ZvaWQgcmZjb21tX2RsY19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gZC0+c2Vzc2lvbi0+c29jay0+c2s7CiAKQEAgLTExNzUsMTIgKzExOTksMzEgQEAKIAlkLT5zdGF0ZV9jaGFuZ2UoZCwgMCk7CiAJcmZjb21tX2RsY191bmxvY2soZCk7CiAKLQlpZiAoZC0+bGlua19tb2RlICYgUkZDT01NX0xNX01BU1RFUikKKwlpZiAoZC0+cm9sZV9zd2l0Y2gpCiAJCWhjaV9jb25uX3N3aXRjaF9yb2xlKGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbiwgMHgwMCk7CiAKIAlyZmNvbW1fc2VuZF9tc2MoZC0+c2Vzc2lvbiwgMSwgZC0+ZGxjaSwgZC0+djI0X3NpZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJmY29tbV9jaGVja19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpCit7CisJaWYgKHJmY29tbV9jaGVja19zZWN1cml0eShkKSkgeworCQlpZiAoZC0+ZGVmZXJfc2V0dXApIHsKKwkJCXNldF9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpOworCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7CisKKwkJCXJmY29tbV9kbGNfbG9jayhkKTsKKwkJCWQtPnN0YXRlID0gQlRfQ09OTkVDVDI7CisJCQlkLT5zdGF0ZV9jaGFuZ2UoZCwgMCk7CisJCQlyZmNvbW1fZGxjX3VubG9jayhkKTsKKwkJfSBlbHNlCisJCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwl9IGVsc2UgeworCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7CisJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCX0KK30KKwogc3RhdGljIGludCByZmNvbW1fcmVjdl9zYWJtKHN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqcywgdTggZGxjaSkKIHsKIAlzdHJ1Y3QgcmZjb21tX2RsYyAqZDsKQEAgLTEyMDMsMTEgKzEyNDYsNyBAQAogCWlmIChkKSB7CiAJCWlmIChkLT5zdGF0ZSA9PSBCVF9PUEVOKSB7CiAJCQkvKiBETEMgd2FzIHByZXZpb3VzbHkgb3BlbmVkIGJ5IFBOIHJlcXVlc3QgKi8KLQkJCWlmIChyZmNvbW1fY2hlY2tfbGlua19tb2RlKGQpKSB7Ci0JCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwotCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOwotCQkJfSBlbHNlCi0JCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJCQlyZmNvbW1fY2hlY2tfYWNjZXB0KGQpOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTEyMTksMTEgKzEyNTgsNyBAQAogCQlkLT5hZGRyID0gX19hZGRyKHMtPmluaXRpYXRvciwgZGxjaSk7CiAJCXJmY29tbV9kbGNfbGluayhzLCBkKTsKIAotCQlpZiAocmZjb21tX2NoZWNrX2xpbmtfbW9kZShkKSkgewotCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwotCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7Ci0JCX0gZWxzZQotCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJCXJmY29tbV9jaGVja19hY2NlcHQoZCk7CiAJfSBlbHNlIHsKIAkJcmZjb21tX3NlbmRfZG0ocywgZGxjaSk7CiAJfQpAQCAtMTYzNywxMSArMTY3MiwxMiBAQAogCQlkID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmZjb21tX2RsYywgbGlzdCk7CiAJCWlmIChkLT5zdGF0ZSA9PSBCVF9DT05GSUcpIHsKIAkJCWQtPm10dSA9IHMtPm10dTsKLQkJCWlmIChyZmNvbW1fY2hlY2tfbGlua19tb2RlKGQpKSB7CisJCQlpZiAocmZjb21tX2NoZWNrX3NlY3VyaXR5KGQpKSB7CisJCQkJcmZjb21tX3NlbmRfcG4ocywgMSwgZCk7CisJCQl9IGVsc2UgewogCQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKIAkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKLQkJCX0gZWxzZQotCQkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOworCQkJfQogCQl9CiAJfQogfQpAQCAtMTcxNywxMSArMTc1MywxNyBAQAogCQkJaWYgKGQtPm91dCkgewogCQkJCXJmY29tbV9zZW5kX3BuKHMsIDEsIGQpOwogCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9DT05OX1RJTUVPVVQpOwotCQkJfSBlbHNlCi0JCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7Ci0JCQlpZiAoZC0+bGlua19tb2RlICYgUkZDT01NX0xNX1NFQ1VSRSkgewotCQkJCXN0cnVjdCBzb2NrICpzayA9IHMtPnNvY2stPnNrOwotCQkJCWhjaV9jb25uX2NoYW5nZV9saW5rX2tleShsMmNhcF9waShzayktPmNvbm4tPmhjb24pOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZC0+ZGVmZXJfc2V0dXApIHsKKwkJCQkJc2V0X2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncyk7CisJCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOworCisJCQkJCXJmY29tbV9kbGNfbG9jayhkKTsKKwkJCQkJZC0+c3RhdGUgPSBCVF9DT05ORUNUMjsKKwkJCQkJZC0+c3RhdGVfY2hhbmdlKGQsIDApOworCQkJCQlyZmNvbW1fZGxjX3VubG9jayhkKTsKKwkJCQl9IGVsc2UKKwkJCQkJcmZjb21tX2RsY19hY2NlcHQoZCk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpKSB7CkBAIC0xNzM0LDYgKzE3NzYsOSBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQlpZiAodGVzdF9iaXQoUkZDT01NX1NFQ19QRU5ESU5HLCAmZC0+ZmxhZ3MpKQorCQkJY29udGludWU7CisKIAkJaWYgKHRlc3RfYml0KFJGQ09NTV9UWF9USFJPVFRMRUQsICZzLT5mbGFncykpCiAJCQljb250aW51ZTsKIApAQCAtMTg3Niw2ICsxOTIxLDcgQEAKIAliYWNweSgmYWRkci5sMl9iZGFkZHIsIGJhKTsKIAlhZGRyLmwyX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKIAlhZGRyLmwyX3BzbSAgICA9IGh0b2JzKFJGQ09NTV9QU00pOworCWFkZHIubDJfY2lkICAgID0gMDsKIAllcnIgPSBrZXJuZWxfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoYWRkcikpOwogCWlmIChlcnIgPCAwKSB7CiAJCUJUX0VSUigiQmluZCBmYWlsZWQgJWQiLCBlcnIpOwpAQCAtMTk0Nyw0MiArMTk5Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJmY29tbV9hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHU4IHN0YXR1cykKLXsKLQlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnM7Ci0Jc3RydWN0IHJmY29tbV9kbGMgKmQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47Ci0KLQlCVF9EQkcoImNvbm4gJXAgc3RhdHVzIDB4JTAyeCIsIGNvbm4sIHN0YXR1cyk7Ci0KLQlzID0gcmZjb21tX3Nlc3Npb25fZ2V0KCZjb25uLT5oZGV2LT5iZGFkZHIsICZjb25uLT5kc3QpOwotCWlmICghcykKLQkJcmV0dXJuOwotCi0JcmZjb21tX3Nlc3Npb25faG9sZChzKTsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmcy0+ZGxjcykgewotCQlkID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmZjb21tX2RsYywgbGlzdCk7Ci0KLQkJaWYgKChkLT5saW5rX21vZGUgJiAoUkZDT01NX0xNX0VOQ1JZUFQgfCBSRkNPTU1fTE1fU0VDVVJFKSkgJiYKLQkJCQkhKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKSAmJiAhc3RhdHVzKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghc3RhdHVzKQotCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9BQ0NFUFQsICZkLT5mbGFncyk7Ci0JCWVsc2UKLQkJCXNldF9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpOwotCX0KLQotCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKLQotCXJmY29tbV9zY2hlZHVsZShSRkNPTU1fU0NIRURfQVVUSCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmY29tbV9lbmNyeXB0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHU4IHN0YXR1cywgdTggZW5jcnlwdCkKK3N0YXRpYyB2b2lkIHJmY29tbV9zZWN1cml0eV9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCiB7CiAJc3RydWN0IHJmY29tbV9zZXNzaW9uICpzOwogCXN0cnVjdCByZmNvbW1fZGxjICpkOwpAQCAtMTk5OSwxOCArMjAxMCwyOSBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmcy0+ZGxjcykgewogCQlkID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmZjb21tX2RsYywgbGlzdCk7CiAKLQkJaWYgKChkLT5saW5rX21vZGUgJiAoUkZDT01NX0xNX0VOQ1JZUFQgfCBSRkNPTU1fTE1fU0VDVVJFKSkgJiYKLQkJCQkJKGQtPnN0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAotCQkJCQkJZC0+c3RhdGUgPT0gQlRfQ09ORklHKSAmJgotCQkJCQkJIXN0YXR1cyAmJiBlbmNyeXB0ID09IDB4MDApIHsKLQkJCV9fcmZjb21tX2RsY19jbG9zZShkLCBFQ09OTlJFRlVTRUQpOwotCQkJY29udGludWU7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX1NFQ19QRU5ESU5HLCAmZC0+ZmxhZ3MpKSB7CisJCQlyZmNvbW1fZGxjX2NsZWFyX3RpbWVyKGQpOworCQkJaWYgKHN0YXR1cyB8fCBlbmNyeXB0ID09IDB4MDApIHsKKwkJCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgRUNPTk5SRUZVU0VEKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWlmIChkLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQgJiYgIXN0YXR1cyAmJiBlbmNyeXB0ID09IDB4MDApIHsKKwkJCWlmIChkLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTUVESVVNKSB7CisJCQkJc2V0X2JpdChSRkNPTU1fU0VDX1BFTkRJTkcsICZkLT5mbGFncyk7CisJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGQtPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKSB7CisJCQkJX19yZmNvbW1fZGxjX2Nsb3NlKGQsIEVDT05OUkVGVVNFRCk7CisJCQkJY29udGludWU7CisJCQl9CiAJCX0KIAogCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFzdGF0dXMgJiYgZW5jcnlwdCkKKwkJaWYgKCFzdGF0dXMpCiAJCQlzZXRfYml0KFJGQ09NTV9BVVRIX0FDQ0VQVCwgJmQtPmZsYWdzKTsKIAkJZWxzZQogCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CkBAIC0yMDIzLDggKzIwNDUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGhjaV9jYiByZmNvbW1fY2IgPSB7CiAJLm5hbWUJCT0gIlJGQ09NTSIsCi0JLmF1dGhfY2ZtCT0gcmZjb21tX2F1dGhfY2ZtLAotCS5lbmNyeXB0X2NmbQk9IHJmY29tbV9lbmNyeXB0X2NmbQorCS5zZWN1cml0eV9jZm0JPSByZmNvbW1fc2VjdXJpdHlfY2ZtCiB9OwogCiBzdGF0aWMgc3NpemVfdCByZmNvbW1fZGxjX3N5c2ZzX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCBkM2ZjNmZjLi43ZjQ4Mjc4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC0yNjEsMTIgKzI2MSwxOSBAQAogCiAJaWYgKHBhcmVudCkgewogCQlzay0+c2tfdHlwZSA9IHBhcmVudC0+c2tfdHlwZTsKLQkJcGktPmxpbmtfbW9kZSA9IHJmY29tbV9waShwYXJlbnQpLT5saW5rX21vZGU7CisJCXBpLT5kbGMtPmRlZmVyX3NldHVwID0gYnRfc2socGFyZW50KS0+ZGVmZXJfc2V0dXA7CisKKwkJcGktPnNlY19sZXZlbCA9IHJmY29tbV9waShwYXJlbnQpLT5zZWNfbGV2ZWw7CisJCXBpLT5yb2xlX3N3aXRjaCA9IHJmY29tbV9waShwYXJlbnQpLT5yb2xlX3N3aXRjaDsKIAl9IGVsc2UgewotCQlwaS0+bGlua19tb2RlID0gMDsKKwkJcGktPmRsYy0+ZGVmZXJfc2V0dXAgPSAwOworCisJCXBpLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCXBpLT5yb2xlX3N3aXRjaCA9IDA7CiAJfQogCi0JcGktPmRsYy0+bGlua19tb2RlID0gcGktPmxpbmtfbW9kZTsKKwlwaS0+ZGxjLT5zZWNfbGV2ZWwgPSBwaS0+c2VjX2xldmVsOworCXBpLT5kbGMtPnJvbGVfc3dpdGNoID0gcGktPnJvbGVfc3dpdGNoOwogfQogCiBzdGF0aWMgc3RydWN0IHByb3RvIHJmY29tbV9wcm90byA9IHsKQEAgLTQwNiw3ICs0MTMsOCBAQAogCWJhY3B5KCZidF9zayhzayktPmRzdCwgJnNhLT5yY19iZGFkZHIpOwogCXJmY29tbV9waShzayktPmNoYW5uZWwgPSBzYS0+cmNfY2hhbm5lbDsKIAotCWQtPmxpbmtfbW9kZSA9IHJmY29tbV9waShzayktPmxpbmtfbW9kZTsKKwlkLT5zZWNfbGV2ZWwgPSByZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWw7CisJZC0+cm9sZV9zd2l0Y2ggPSByZmNvbW1fcGkoc2spLT5yb2xlX3N3aXRjaDsKIAogCWVyciA9IHJmY29tbV9kbGNfb3BlbihkLCAmYnRfc2soc2spLT5zcmMsICZzYS0+cmNfYmRhZGRyLCBzYS0+cmNfY2hhbm5lbCk7CiAJaWYgKCFlcnIpCkBAIC01NTQsNiArNTYyLDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBzZW50ID0gMDsKIAorCWlmICh0ZXN0X2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncykpCisJCXJldHVybiAtRU5PVENPTk47CisKIAlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTU3MCw4ICs1ODEsMTEgQEAKIAogCQlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBzaXplICsgUkZDT01NX1NLQl9SRVNFUlZFLAogCQkJCW1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKLQkJaWYgKCFza2IpCisJCWlmICghc2tiKSB7CisJCQlpZiAoc2VudCA9PSAwKQorCQkJCXNlbnQgPSBlcnI7CiAJCQlicmVhazsKKwkJfQogCQlza2JfcmVzZXJ2ZShza2IsIFJGQ09NTV9TS0JfSEVBRF9SRVNFUlZFKTsKIAogCQllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBzaXplKSwgbXNnLT5tc2dfaW92LCBzaXplKTsKQEAgLTYzMCwxMCArNjQ0LDE2IEBACiAJCQkgICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZmNvbW1fZGxjICpkID0gcmZjb21tX3BpKHNrKS0+ZGxjOwogCWludCBlcnIgPSAwOwogCXNpemVfdCB0YXJnZXQsIGNvcGllZCA9IDA7CiAJbG9uZyB0aW1lbzsKIAorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX0RFRkVSX1NFVFVQLCAmZC0+ZmxhZ3MpKSB7CisJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoZmxhZ3MgJiBNU0dfT09CKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTcxMCw3ICs3MzAsNyBAQAogCXJldHVybiBjb3BpZWQgPyA6IGVycjsKIH0KIAotc3RhdGljIGludCByZmNvbW1fc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCitzdGF0aWMgaW50IHJmY29tbV9zb2NrX3NldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCWludCBlcnIgPSAwOwpAQCAtNzI3LDcgKzc0NywxNDQgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJcmZjb21tX3BpKHNrKS0+bGlua19tb2RlID0gb3B0OworCQlpZiAob3B0ICYgUkZDT01NX0xNX0FVVEgpCisJCQlyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCWlmIChvcHQgJiBSRkNPTU1fTE1fRU5DUllQVCkKKwkJCXJmY29tbV9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX01FRElVTTsKKwkJaWYgKG9wdCAmIFJGQ09NTV9MTV9TRUNVUkUpCisJCQlyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9ISUdIOworCisJCXJmY29tbV9waShzayktPnJvbGVfc3dpdGNoID0gKG9wdCAmIFJGQ09NTV9MTV9NQVNURVIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJmY29tbV9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOworCWludCBsZW4sIGVyciA9IDA7CisJdTMyIG9wdDsKKworCUJUX0RCRygic2sgJXAiLCBzayk7CisKKwlpZiAobGV2ZWwgPT0gU09MX1JGQ09NTSkKKwkJcmV0dXJuIHJmY29tbV9zb2NrX3NldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJbG9ja19zb2NrKHNrKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgQlRfU0VDVVJJVFk6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2VjLmxldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKHNlYyksIG9wdGxlbik7CisJCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciAqKSAmc2VjLCBvcHR2YWwsIGxlbikpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzZWMubGV2ZWwgPiBCVF9TRUNVUklUWV9ISUdIKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlyZmNvbW1fcGkoc2spLT5zZWNfbGV2ZWwgPSBzZWMubGV2ZWw7CisJCWJyZWFrOworCisJY2FzZSBCVF9ERUZFUl9TRVRVUDoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCAmJiBzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZ2V0X3VzZXIob3B0LCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlidF9zayhzayktPmRlZmVyX3NldHVwID0gb3B0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJmY29tbV9zb2NrX2dldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNvY2sgKmwyY2FwX3NrOworCXN0cnVjdCByZmNvbW1fY29ubmluZm8gY2luZm87CisJaW50IGxlbiwgZXJyID0gMDsKKwl1MzIgb3B0OworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJbG9ja19zb2NrKHNrKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgUkZDT01NX0xNOgorCQlzd2l0Y2ggKHJmY29tbV9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0xPVzoKKwkJCW9wdCA9IFJGQ09NTV9MTV9BVVRIOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJb3B0ID0gUkZDT01NX0xNX0FVVEggfCBSRkNPTU1fTE1fRU5DUllQVDsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlvcHQgPSBSRkNPTU1fTE1fQVVUSCB8IFJGQ09NTV9MTV9FTkNSWVBUIHwKKwkJCQkJCQlSRkNPTU1fTE1fU0VDVVJFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlvcHQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmZjb21tX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQlvcHQgfD0gUkZDT01NX0xNX01BU1RFUjsKKworCQlpZiAocHV0X3VzZXIob3B0LCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQorCQkJZXJyID0gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFJGQ09NTV9DT05OSU5GTzoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQgJiYKKwkJCQkJIXJmY29tbV9waShzayktPmRsYy0+ZGVmZXJfc2V0dXApIHsKKwkJCWVyciA9IC1FTk9UQ09OTjsKKwkJCWJyZWFrOworCQl9CisKKwkJbDJjYXBfc2sgPSByZmNvbW1fcGkoc2spLT5kbGMtPnNlc3Npb24tPnNvY2stPnNrOworCisJCWNpbmZvLmhjaV9oYW5kbGUgPSBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmhhbmRsZTsKKwkJbWVtY3B5KGNpbmZvLmRldl9jbGFzcywgbDJjYXBfcGkobDJjYXBfc2spLT5jb25uLT5oY29uLT5kZXZfY2xhc3MsIDMpOworCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoY2luZm8pKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIChjaGFyICopICZjaW5mbywgbGVuKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNzQyLDM2ICs4OTksNDQgQEAKIHN0YXRpYyBpbnQgcmZjb21tX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IHNvY2sgKmwyY2FwX3NrOwotCXN0cnVjdCByZmNvbW1fY29ubmluZm8gY2luZm87CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCiAJQlRfREJHKCJzayAlcCIsIHNrKTsKIAorCWlmIChsZXZlbCA9PSBTT0xfUkZDT01NKQorCQlyZXR1cm4gcmZjb21tX3NvY2tfZ2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKIAlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWxvY2tfc29jayhzayk7CiAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKLQljYXNlIFJGQ09NTV9MTToKLQkJaWYgKHB1dF91c2VyKHJmY29tbV9waShzayktPmxpbmtfbW9kZSwgKHUzMiBfX3VzZXIgKikgb3B0dmFsKSkKLQkJCWVyciA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBSRkNPTU1fQ09OTklORk86Ci0JCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKSB7Ci0JCQllcnIgPSAtRU5PVENPTk47CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSB7CisJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9zayA9IHJmY29tbV9waShzayktPmRsYy0+c2Vzc2lvbi0+c29jay0+c2s7CisJCXNlYy5sZXZlbCA9IHJmY29tbV9waShzayktPnNlY19sZXZlbDsKIAotCQljaW5mby5oY2lfaGFuZGxlID0gbDJjYXBfcGkobDJjYXBfc2spLT5jb25uLT5oY29uLT5oYW5kbGU7Ci0JCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+ZGV2X2NsYXNzLCAzKTsKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihzZWMpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIChjaGFyICopICZzZWMsIGxlbikpCisJCQllcnIgPSAtRUZBVUxUOwogCi0JCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoY2luZm8pKTsKLQkJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsIChjaGFyICopICZjaW5mbywgbGVuKSkKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChwdXRfdXNlcihidF9zayhzayktPmRlZmVyX3NldHVwLCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQogCQkJZXJyID0gLUVGQVVMVDsKIAogCQlicmVhazsKQEAgLTg4OCw2ICsxMDUzLDEwIEBACiAKIGRvbmU6CiAJYmhfdW5sb2NrX3NvY2socGFyZW50KTsKKworCWlmIChidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cCkKKwkJcGFyZW50LT5za19zdGF0ZV9jaGFuZ2UocGFyZW50KTsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKaW5kZXggZDAzMGM2OS4uYWJkYzcwMyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKQEAgLTczMSw3ICs3MzEsOCBAQAogCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPndhaXQsICZ3YWl0KTsKIAogCWlmIChlcnIgPT0gMCkKLQkJZGV2aWNlX21vdmUoZGV2LT50dHlfZGV2LCByZmNvbW1fZ2V0X2RldmljZShkZXYpKTsKKwkJZGV2aWNlX21vdmUoZGV2LT50dHlfZGV2LCByZmNvbW1fZ2V0X2RldmljZShkZXYpLAorCQkJICAgIERQTV9PUkRFUl9ERVZfQUZURVJfUEFSRU5UKTsKIAogCXJmY29tbV90dHlfY29weV9wZW5kaW5nKGRldik7CiAKQEAgLTc1MSw3ICs3NTIsNyBAQAogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+b3BlbmVkKSkgewogCQlpZiAoZGV2LT50dHlfZGV2LT5wYXJlbnQpCi0JCQlkZXZpY2VfbW92ZShkZXYtPnR0eV9kZXYsIE5VTEwpOworCQkJZGV2aWNlX21vdmUoZGV2LT50dHlfZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpOwogCiAJCS8qIENsb3NlIERMQyBhbmQgZGV0dGFjaCBUVFkgKi8KIAkJcmZjb21tX2RsY19jbG9zZShkZXYtPmRsYywgMCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3Njby5jIGIvbmV0L2JsdWV0b290aC9zY28uYwppbmRleCA0NmZkOGJmLi41MWFlMGMzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3Njby5jCisrKyBiL25ldC9ibHVldG9vdGgvc2NvLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCWVsc2UKIAkJdHlwZSA9IFNDT19MSU5LOwogCi0JaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIHR5cGUsIGRzdCwgSENJX0FUX05PX0JPTkRJTkcpOworCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCB0eXBlLCBkc3QsIEJUX1NFQ1VSSVRZX0xPVywgSENJX0FUX05PX0JPTkRJTkcpOwogCWlmICghaGNvbikKIAkJZ290byBkb25lOwogCkBAIC02NjgsNyArNjY4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNjb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQorc3RhdGljIGludCBzY29fc29ja19nZXRzb2Nrb3B0X29sZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBzY29fb3B0aW9ucyBvcHRzOwpAQCAtNzIzLDYgKzcyMywzMSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgc2NvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJaW50IGxlbiwgZXJyID0gMDsKKworCUJUX0RCRygic2sgJXAiLCBzayk7CisKKwlpZiAobGV2ZWwgPT0gU09MX1NDTykKKwkJcmV0dXJuIHNjb19zb2NrX2dldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJbG9ja19zb2NrKHNrKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IHNjb19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTgzMiwxMCArODU3LDMwIEBACiAvKiAtLS0tLSBTQ08gaW50ZXJmYWNlIHdpdGggbG93ZXIgbGF5ZXIgKEhDSSkgLS0tLS0gKi8KIHN0YXRpYyBpbnQgc2NvX2Nvbm5lY3RfaW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpCiB7CisJcmVnaXN0ZXIgc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCWludCBsbSA9IDA7CisKKwlpZiAodHlwZSAhPSBTQ09fTElOSyAmJiB0eXBlICE9IEVTQ09fTElOSykKKwkJcmV0dXJuIDA7CisKIAlCVF9EQkcoImhkZXYgJXMsIGJkYWRkciAlcyIsIGhkZXYtPm5hbWUsIGJhdG9zdHIoYmRhZGRyKSk7CiAKLQkvKiBBbHdheXMgYWNjZXB0IGNvbm5lY3Rpb24gKi8KLQlyZXR1cm4gSENJX0xNX0FDQ0VQVDsKKwkvKiBGaW5kIGxpc3RlbmluZyBzb2NrZXRzICovCisJcmVhZF9sb2NrKCZzY29fc2tfbGlzdC5sb2NrKTsKKwlza19mb3JfZWFjaChzaywgbm9kZSwgJnNjb19za19saXN0LmhlYWQpIHsKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pCisJCQljb250aW51ZTsKKworCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgJmhkZXYtPmJkYWRkcikgfHwKKwkJCQkhYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBCREFERFJfQU5ZKSkgeworCQkJbG0gfD0gSENJX0xNX0FDQ0VQVDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlYWRfdW5sb2NrKCZzY29fc2tfbGlzdC5sb2NrKTsKKworCXJldHVybiBsbTsKIH0KIAogc3RhdGljIGludCBzY29fY29ubmVjdF9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCBfX3U4IHN0YXR1cykKQEAgLTg1Nyw3ICs5MDIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNjb19kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIF9fdTggcmVhc29uKQorc3RhdGljIGludCBzY29fZGlzY29ubl9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCBfX3U4IHJlYXNvbikKIHsKIAlCVF9EQkcoImhjb24gJXAgcmVhc29uICVkIiwgaGNvbiwgcmVhc29uKTsKIApAQCAtOTQwLDcgKzk4NSw3IEBACiAJLmlkCQk9IEhDSV9QUk9UT19TQ08sCiAJLmNvbm5lY3RfaW5kCT0gc2NvX2Nvbm5lY3RfaW5kLAogCS5jb25uZWN0X2NmbQk9IHNjb19jb25uZWN0X2NmbSwKLQkuZGlzY29ubl9pbmQJPSBzY29fZGlzY29ubl9pbmQsCisJLmRpc2Nvbm5fY2ZtCT0gc2NvX2Rpc2Nvbm5fY2ZtLAogCS5yZWN2X3Njb2RhdGEJPSBzY29fcmVjdl9zY29kYXRhCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggNzI3YzVjNS4uOGE5NjY3MiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtNDI2LDcgKzQyNiw2IEBACiBlcnIxOgogCWtvYmplY3RfZGVsKCZwLT5rb2JqKTsKIGVycjA6Ci0Ja29iamVjdF9wdXQoJnAtPmtvYmopOwogCWRldl9zZXRfcHJvbWlzY3VpdHkoZGV2LCAtMSk7CiBwdXRfYmFjazoKIAlkZXZfcHV0KGRldik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCBjZjc1NGFjLi4zOTUzYWM0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgZmFrZV9kc3Rfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKLQkucHJvdG9jb2wgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCisJLnByb3RvY29sID0JCWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkudXBkYXRlX3BtdHUgPQkJZmFrZV91cGRhdGVfcG10dSwKIAkuZW50cmllcyA9CQlBVE9NSUNfSU5JVCgwKSwKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCmluZGV4IGJhN2JlMTkuLmZjZmZiM2YgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCkBAIC05OCw3ICs5OCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0xJTkssIGVycik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKaW5kZXggZDQ0Y2JmOC4uYTk0ZjNjYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgZWJ0X2xvZ19sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBlYnRfbG9nX2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lIAkJPSAiZWJ0X2xvZyIsCiAJLmxvZ2ZuCQk9ICZlYnRfbG9nX3BhY2tldCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwppbmRleCAyYzZkNjgyLi4xMzNlZWFlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKQEAgLTI3OSwyMSArMjc5LDIxIEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgZWJ0X3Vsb2dfbG9nZ2VyID0gewotCS5uYW1lCQk9ICJ1bG9nIiwKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF91bG9nX2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJlYnRfdWxvZyIsCiAJLmxvZ2ZuCQk9ICZlYnRfbG9nX3BhY2tldCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlYnRfdWxvZ19pbml0KHZvaWQpCiB7Ci0JYm9vbCByZXQgPSB0cnVlOworCWludCByZXQ7CiAJaW50IGk7CiAKIAlpZiAobmxidWZzaXogPj0gMTI4KjEwMjQpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJlYnRfdWxvZzogTmV0bGluayBidWZmZXIgaGFzIHRvIGJlIDw9IDEyOGtCLCIKIAkJICAgICAgICIgcGxlYXNlIHRyeSBhIHNtYWxsZXIgbmxidWZzaXogcGFyYW1ldGVyLlxuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSB1bG9nX2J1ZmZlcnMgKi8KQEAgLTMwOCwxMiArMzA4LDEyIEBACiAJaWYgKCFlYnR1bG9nbmwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRSAiOiBvdXQgb2YgbWVtb3J5IHRyeWluZyB0byAiCiAJCSAgICAgICAiY2FsbCBuZXRsaW5rX2tlcm5lbF9jcmVhdGVcbiIpOwotCQlyZXQgPSBmYWxzZTsKLQl9IGVsc2UgaWYgKHh0X3JlZ2lzdGVyX3RhcmdldCgmZWJ0X3Vsb2dfdGdfcmVnKSAhPSAwKSB7CisJCXJldCA9IC1FTk9NRU07CisJfSBlbHNlIGlmICgocmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZlYnRfdWxvZ190Z19yZWcpKSAhPSAwKSB7CiAJCW5ldGxpbmtfa2VybmVsX3JlbGVhc2UoZWJ0dWxvZ25sKTsKIAl9CiAKLQlpZiAocmV0KQorCWlmIChyZXQgPT0gMCkKIAkJbmZfbG9nX3JlZ2lzdGVyKE5GUFJPVE9fQlJJREdFLCAmZWJ0X3Vsb2dfbG9nZ2VyKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwppbmRleCA4NjA0ZGZjLi5jNzUxMTExIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIAkubmFtZQkJPSAiYnJvdXRlIiwKIAkudGFibGUJCT0gJmluaXRpYWxfdGFibGUsCiAJLnZhbGlkX2hvb2tzCT0gMSA8PCBORl9CUl9CUk9VVElORywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoYnJvdXRlX3RhYmxlLmxvY2spLAogCS5jaGVjawkJPSBjaGVjaywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKaW5kZXggMmIyZTgwNC4uYTVlZWE3MiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCkBAIC01NSw3ICs1NSw2IEBACiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoZnJhbWVfZmlsdGVyLmxvY2spLAogCS5jaGVjawkJPSBjaGVjaywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKaW5kZXggM2ZlMWFlOC4uNjAyNGM1NSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCkBAIC01NSw3ICs1NSw2IEBACiAJLm5hbWUJCT0gIm5hdCIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLAogCS52YWxpZF9ob29rcwk9IE5BVF9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoZnJhbWVfbmF0LmxvY2spLAogCS5jaGVjawkJPSBjaGVjaywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9hZl9jYW4uYyBiL25ldC9jYW4vYWZfY2FuLmMKaW5kZXggZmE0MTdjYS4uNTQ3YmFmYyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9hZl9jYW4uYworKysgYi9uZXQvY2FuL2FmX2Nhbi5jCkBAIC0yNzMsOCArMjczLDcgQEAKIAkJZXJyID0gbmV0X3htaXRfZXJybm8oZXJyKTsKIAogCWlmIChlcnIpIHsKLQkJaWYgKG5ld3NrYikKLQkJCWtmcmVlX3NrYihuZXdza2IpOworCQlrZnJlZV9za2IobmV3c2tiKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTgyOCw3ICs4MjcsNyBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgY2FuX3BhY2tldCBfX3JlYWRfbW9zdGx5ID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9DQU4pLAorCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQ0FOKSwKIAkuZGV2ICA9IE5VTEwsCiAJLmZ1bmMgPSBjYW5fcmN2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jCmluZGV4IDA3MDNjYmEuLjZhYTE1NGUgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcmF3LmMKKysrIGIvbmV0L2Nhbi9yYXcuYwpAQCAtNjQ4LDYgKzY0OCw5IEBACiAJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZy0+bXNnX2lvdiwgc2l6ZSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZnJlZV9za2I7CisJZXJyID0gc29ja190eF90aW1lc3RhbXAobXNnLCBzaywgc2tiX3R4KHNrYikpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZyZWVfc2tiOwogCXNrYi0+ZGV2ID0gZGV2OwogCXNrYi0+c2sgID0gc2s7CiAKZGlmZiAtLWdpdCBhL25ldC9jb21wYXQuYyBiL25ldC9jb21wYXQuYwppbmRleCBhM2EyYmEwLi44ZDczOTA1IDEwMDY0NAotLS0gYS9uZXQvY29tcGF0LmMKKysrIGIvbmV0L2NvbXBhdC5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIGludCBwdXRfY21zZ19jb21wYXQoc3RydWN0IG1zZ2hkciAqa21zZywgaW50IGxldmVsLCBpbnQgdHlwZSwgaW50IGxlbiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgY3R2OwotCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgY3RzOworCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgY3RzWzNdOwogCXN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKmNtID0gKHN0cnVjdCBjb21wYXRfY21zZ2hkciBfX3VzZXIgKikga21zZy0+bXNnX2NvbnRyb2w7CiAJc3RydWN0IGNvbXBhdF9jbXNnaGRyIGNtaGRyOwogCWludCBjbWxlbjsKQEAgLTIzMywxMiArMjMzLDE3IEBACiAJCWRhdGEgPSAmY3R2OwogCQlsZW4gPSBzaXplb2YoY3R2KTsKIAl9Ci0JaWYgKGxldmVsID09IFNPTF9TT0NLRVQgJiYgdHlwZSA9PSBTQ01fVElNRVNUQU1QTlMpIHsKKwlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCAmJgorCSAgICAodHlwZSA9PSBTQ01fVElNRVNUQU1QTlMgfHwgdHlwZSA9PSBTQ01fVElNRVNUQU1QSU5HKSkgeworCQlpbnQgY291bnQgPSB0eXBlID09IFNDTV9USU1FU1RBTVBOUyA/IDEgOiAzOworCQlpbnQgaTsKIAkJc3RydWN0IHRpbWVzcGVjICp0cyA9IChzdHJ1Y3QgdGltZXNwZWMgKilkYXRhOwotCQljdHMudHZfc2VjID0gdHMtPnR2X3NlYzsKLQkJY3RzLnR2X25zZWMgPSB0cy0+dHZfbnNlYzsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWN0c1tpXS50dl9zZWMgPSB0c1tpXS50dl9zZWM7CisJCQljdHNbaV0udHZfbnNlYyA9IHRzW2ldLnR2X25zZWM7CisJCX0KIAkJZGF0YSA9ICZjdHM7Ci0JCWxlbiA9IHNpemVvZihjdHMpOworCQlsZW4gPSBzaXplb2YoY3RzWzBdKSAqIGNvdW50OwogCX0KIAogCWNtbGVuID0gQ01TR19DT01QQVRfTEVOKGxlbik7CkBAIC00NTUsNyArNDYwLDcgQEAKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXR2ID0ga3RpbWVfdG9fdGltZXZhbChzay0+c2tfc3RhbXApOwogCWlmICh0di50dl9zZWMgPT0gLTEpCiAJCXJldHVybiBlcnI7CkBAIC00NzksNyArNDg0LDcgQEAKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0cyA9IGt0aW1lX3RvX3RpbWVzcGVjKHNrLT5za19zdGFtcCk7CiAJaWYgKHRzLnR2X3NlYyA9PSAtMSkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggMjZhMzdjYi4uNzk2ZjQ2ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGUKKysrIGIvbmV0L2NvcmUvTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDYgQEAKIG9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm8KIG9iai0kKENPTkZJR19ORVRfRE1BKSArPSB1c2VyX2RtYS5vCiBvYmotJChDT05GSUdfRklCX1JVTEVTKSArPSBmaWJfcnVsZXMubworb2JqLSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSBuZXQtdHJhY2VzLm8KK29iai0kKENPTkZJR19ORVRfRFJPUF9NT05JVE9SKSArPSBkcm9wX21vbml0b3IubworCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCA1ZTJhYzBjLi5kMGRlNjQ0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jCisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCiB2b2lkIHNrYl9mcmVlX2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlrZnJlZV9za2Ioc2tiKTsKKwljb25zdW1lX3NrYihza2IpOwogCXNrX21lbV9yZWNsYWltX3BhcnRpYWwoc2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGUzZmU1YzcuLjA1MmRkNDcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xNjY4LDggKzE2NjgsOCBAQAogCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxKQogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOworCWludCByYzsKIAotCXByZWZldGNoKCZkZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0KTsKIAlpZiAobGlrZWx5KCFza2ItPm5leHQpKSB7CiAJCWlmICghbGlzdF9lbXB0eSgmcHR5cGVfYWxsKSkKIAkJCWRldl9xdWV1ZV94bWl0X25pdChza2IsIGRldik7CkBAIC0xNjgxLDEzICsxNjgxLDI3IEBACiAJCQkJZ290byBnc287CiAJCX0KIAotCQlyZXR1cm4gb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsIGRldik7CisJCXJjID0gb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsIGRldik7CisJCS8qCisJCSAqIFRPRE86IGlmIHNrYl9vcnBoYW4oKSB3YXMgY2FsbGVkIGJ5CisJCSAqIGRldi0+aGFyZF9zdGFydF94bWl0KCkgKGZvciBleGFtcGxlLCB0aGUgdW5tb2RpZmllZAorCQkgKiBpZ2IgZHJpdmVyIGRvZXMgdGhhdDsgYm54MiBkb2Vzbid0KSwgdGhlbgorCQkgKiBza2JfdHhfc29mdHdhcmVfdGltZXN0YW1wKCkgd2lsbCBiZSB1bmFibGUgdG8gc2VuZAorCQkgKiBiYWNrIHRoZSB0aW1lIHN0YW1wLgorCQkgKgorCQkgKiBIb3cgY2FuIHRoaXMgYmUgcHJldmVudGVkPyBBbHdheXMgY3JlYXRlIGFub3RoZXIKKwkJICogcmVmZXJlbmNlIHRvIHRoZSBzb2NrZXQgYmVmb3JlIGNhbGxpbmcKKwkJICogZGV2LT5oYXJkX3N0YXJ0X3htaXQoKT8gUHJldmVudCB0aGF0IHNrYl9vcnBoYW4oKQorCQkgKiBkb2VzIGFueXRoaW5nIGluIGRldi0+aGFyZF9zdGFydF94bWl0KCkgYnkgY2xlYXJpbmcKKwkJICogdGhlIHNrYiBkZXN0cnVjdG9yIGJlZm9yZSB0aGUgY2FsbCBhbmQgcmVzdG9yaW5nIGl0CisJCSAqIGFmdGVyd2FyZHMsIHRoZW4gZG9pbmcgdGhlIHNrYl9vcnBoYW4oKSBvdXJzZWx2ZXM/CisJCSAqLworCQlyZXR1cm4gcmM7CiAJfQogCiBnc286CiAJZG8gewogCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYi0+bmV4dDsKLQkJaW50IHJjOwogCiAJCXNrYi0+bmV4dCA9IG5za2ItPm5leHQ7CiAJCW5za2ItPm5leHQgPSBOVUxMOwpAQCAtMTcwOCw1OSArMTcyMiwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIHNpbXBsZV90eF9oYXNocm5kOwotc3RhdGljIGludCBzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCA9IDA7CitzdGF0aWMgdTMyIHNrYl90eF9oYXNocm5kOwogCi1zdGF0aWMgdTE2IHNpbXBsZV90eF9oYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit1MTYgc2tiX3R4X2hhc2goY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1MzIgYWRkcjEsIGFkZHIyLCBwb3J0czsKLQl1MzIgaGFzaCwgaWhsOwotCXU4IGlwX3Byb3RvID0gMDsKKwl1MzIgaGFzaDsKIAotCWlmICh1bmxpa2VseSghc2ltcGxlX3R4X2hhc2hybmRfaW5pdGlhbGl6ZWQpKSB7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJnNpbXBsZV90eF9oYXNocm5kLCA0KTsKLQkJc2ltcGxlX3R4X2hhc2hybmRfaW5pdGlhbGl6ZWQgPSAxOwotCX0KKwlpZiAoc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHNrYikpIHsKKwkJaGFzaCA9IHNrYl9nZXRfcnhfcXVldWUoc2tiKTsKKwl9IGVsc2UgaWYgKHNrYi0+c2sgJiYgc2tiLT5zay0+c2tfaGFzaCkgeworCQloYXNoID0gc2tiLT5zay0+c2tfaGFzaDsKKwl9IGVsc2UKKwkJaGFzaCA9IHNrYi0+cHJvdG9jb2w7CiAKLQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIGh0b25zKEVUSF9QX0lQKToKLQkJaWYgKCEoaXBfaGRyKHNrYiktPmZyYWdfb2ZmICYgaHRvbnMoSVBfTUYgfCBJUF9PRkZTRVQpKSkKLQkJCWlwX3Byb3RvID0gaXBfaGRyKHNrYiktPnByb3RvY29sOwotCQlhZGRyMSA9IGlwX2hkcihza2IpLT5zYWRkcjsKLQkJYWRkcjIgPSBpcF9oZHIoc2tiKS0+ZGFkZHI7Ci0JCWlobCA9IGlwX2hkcihza2IpLT5paGw7Ci0JCWJyZWFrOwotCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6Ci0JCWlwX3Byb3RvID0gaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsKLQkJYWRkcjEgPSBpcHY2X2hkcihza2IpLT5zYWRkci5zNl9hZGRyMzJbM107Ci0JCWFkZHIyID0gaXB2Nl9oZHIoc2tiKS0+ZGFkZHIuczZfYWRkcjMyWzNdOwotCQlpaGwgPSAoNDAgPj4gMik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLQotCi0Jc3dpdGNoIChpcF9wcm90bykgewotCWNhc2UgSVBQUk9UT19UQ1A6Ci0JY2FzZSBJUFBST1RPX1VEUDoKLQljYXNlIElQUFJPVE9fRENDUDoKLQljYXNlIElQUFJPVE9fRVNQOgotCWNhc2UgSVBQUk9UT19BSDoKLQljYXNlIElQUFJPVE9fU0NUUDoKLQljYXNlIElQUFJPVE9fVURQTElURToKLQkJcG9ydHMgPSAqKCh1MzIgKikgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgKGlobCAqIDQpKSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcG9ydHMgPSAwOwotCQlicmVhazsKLQl9Ci0KLQloYXNoID0gamhhc2hfM3dvcmRzKGFkZHIxLCBhZGRyMiwgcG9ydHMsIHNpbXBsZV90eF9oYXNocm5kKTsKKwloYXNoID0gamhhc2hfMXdvcmQoaGFzaCwgc2tiX3R4X2hhc2hybmQpOwogCiAJcmV0dXJuICh1MTYpICgoKHU2NCkgaGFzaCAqIGRldi0+cmVhbF9udW1fdHhfcXVldWVzKSA+PiAzMik7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl90eF9oYXNoKTsKIAogc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9waWNrX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNzcxLDcgKzE3NTAsNyBAQAogCWlmIChvcHMtPm5kb19zZWxlY3RfcXVldWUpCiAJCXF1ZXVlX2luZGV4ID0gb3BzLT5uZG9fc2VsZWN0X3F1ZXVlKGRldiwgc2tiKTsKIAllbHNlIGlmIChkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA+IDEpCi0JCXF1ZXVlX2luZGV4ID0gc2ltcGxlX3R4X2hhc2goZGV2LCBza2IpOworCQlxdWV1ZV9pbmRleCA9IHNrYl90eF9oYXNoKGRldiwgc2tiKTsKIAogCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlX2luZGV4KTsKIAlyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKQEAgLTIyOTcsNiArMjI3Niw4IEBACiAJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwogCisJc2tiX29ycGhhbihza2IpOworCiAJdHlwZSA9IHNrYi0+cHJvdG9jb2w7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHR5cGUsCiAJCQkmcHR5cGVfYmFzZVtudG9ocyh0eXBlKSAmIFBUWVBFX0hBU0hfTUFTS10sIGxpc3QpIHsKQEAgLTIzNjYsNyArMjM0Nyw2IEBACiAKIG91dDoKIAlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gMDsKLQlfX3NrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIH0KIApAQCAtMjM4MCwyMCArMjM2MCw0MCBAQAogCQluYXBpX2dyb19jb21wbGV0ZShza2IpOwogCX0KIAorCW5hcGktPmdyb19jb3VudCA9IDA7CiAJbmFwaS0+Z3JvX2xpc3QgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChuYXBpX2dyb19mbHVzaCk7CiAKK3ZvaWQgKnNrYl9ncm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBobGVuKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBza2JfZ3JvX29mZnNldChza2IpOworCisJaGxlbiArPSBvZmZzZXQ7CisJaWYgKGhsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkKKwkJcmV0dXJuIHNrYi0+ZGF0YSArIG9mZnNldDsKKworCWlmICh1bmxpa2VseSghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyB8fAorCQkgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSA8PQorCQkgICAgIGhsZW4gLSBza2JfaGVhZGxlbihza2IpIHx8CisJCSAgICAgUGFnZUhpZ2hNZW0oc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlKSkpCisJCXJldHVybiBwc2tiX21heV9wdWxsKHNrYiwgaGxlbikgPyBza2ItPmRhdGEgKyBvZmZzZXQgOiBOVUxMOworCisJcmV0dXJuIHBhZ2VfYWRkcmVzcyhza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpICsKKwkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArCisJICAgICAgIG9mZnNldCAtIHNrYl9oZWFkbGVuKHNrYik7Cit9CitFWFBPUlRfU1lNQk9MKHNrYl9ncm9faGVhZGVyKTsKKwogaW50IGRldl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKipwcCA9IE5VTEw7CiAJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZTsKIAlfX2JlMTYgdHlwZSA9IHNrYi0+cHJvdG9jb2w7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXTsKLQlpbnQgY291bnQgPSAwOwogCWludCBzYW1lX2Zsb3c7CiAJaW50IG1hY19sZW47Ci0JaW50IGZyZWU7CisJaW50IHJldDsKIAogCWlmICghKHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSkKIAkJZ290byBub3JtYWw7CkBAIC0yNDAzLDMwICsyNDAzLDE2IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHR5cGUsIGhlYWQsIGxpc3QpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnA7Ci0KIAkJaWYgKHB0eXBlLT50eXBlICE9IHR5cGUgfHwgcHR5cGUtPmRldiB8fCAhcHR5cGUtPmdyb19yZWNlaXZlKQogCQkJY29udGludWU7CiAKLQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKIAkJbWFjX2xlbiA9IHNrYi0+bmV0d29ya19oZWFkZXIgLSBza2ItPm1hY19oZWFkZXI7CiAJCXNrYi0+bWFjX2xlbiA9IG1hY19sZW47CiAJCU5BUElfR1JPX0NCKHNrYiktPnNhbWVfZmxvdyA9IDA7CiAJCU5BUElfR1JPX0NCKHNrYiktPmZsdXNoID0gMDsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJlZSA9IDA7CiAKLQkJZm9yIChwID0gbmFwaS0+Z3JvX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCQljb3VudCsrOwotCi0JCQlpZiAoIU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChwLT5tYWNfbGVuICE9IG1hY19sZW4gfHwKLQkJCSAgICBtZW1jbXAoc2tiX21hY19oZWFkZXIocCksIHNrYl9tYWNfaGVhZGVyKHNrYiksCi0JCQkJICAgbWFjX2xlbikpCi0JCQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IDA7Ci0JCX0KLQogCQlwcCA9IHB0eXBlLT5ncm9fcmVjZWl2ZSgmbmFwaS0+Z3JvX2xpc3QsIHNrYik7CiAJCWJyZWFrOwogCX0KQEAgLTI0MzYsNyArMjQyMiw3IEBACiAJCWdvdG8gbm9ybWFsOwogCiAJc2FtZV9mbG93ID0gTkFQSV9HUk9fQ0Ioc2tiKS0+c2FtZV9mbG93OwotCWZyZWUgPSBOQVBJX0dST19DQihza2IpLT5mcmVlOworCXJldCA9IE5BUElfR1JPX0NCKHNrYiktPmZyZWUgPyBHUk9fTUVSR0VEX0ZSRUUgOiBHUk9fTUVSR0VEOwogCiAJaWYgKHBwKSB7CiAJCXN0cnVjdCBza19idWZmICpuc2tiID0gKnBwOwpAQCAtMjQ0NCwyNyArMjQzMCwzNSBAQAogCQkqcHAgPSBuc2tiLT5uZXh0OwogCQluc2tiLT5uZXh0ID0gTlVMTDsKIAkJbmFwaV9ncm9fY29tcGxldGUobnNrYik7Ci0JCWNvdW50LS07CisJCW5hcGktPmdyb19jb3VudC0tOwogCX0KIAogCWlmIChzYW1lX2Zsb3cpCiAJCWdvdG8gb2s7CiAKLQlpZiAoTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggfHwgY291bnQgPj0gTUFYX0dST19TS0JTKSB7Ci0JCV9fc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOworCWlmIChOQVBJX0dST19DQihza2IpLT5mbHVzaCB8fCBuYXBpLT5ncm9fY291bnQgPj0gTUFYX0dST19TS0JTKQogCQlnb3RvIG5vcm1hbDsKLQl9CiAKKwluYXBpLT5ncm9fY291bnQrKzsKIAlOQVBJX0dST19DQihza2IpLT5jb3VudCA9IDE7Ci0Jc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IHNrYi0+bGVuOworCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBza2JfZ3JvX2xlbihza2IpOwogCXNrYi0+bmV4dCA9IG5hcGktPmdyb19saXN0OwogCW5hcGktPmdyb19saXN0ID0gc2tiOworCXJldCA9IEdST19IRUxEOworCitwdWxsOgorCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpKSkgeworCQlpZiAobmFwaS0+Z3JvX2xpc3QgPT0gc2tiKQorCQkJbmFwaS0+Z3JvX2xpc3QgPSBza2ItPm5leHQ7CisJCXJldCA9IEdST19EUk9QOworCX0KIAogb2s6Ci0JcmV0dXJuIGZyZWU7CisJcmV0dXJuIHJldDsKIAogbm9ybWFsOgotCXJldHVybiAtMTsKKwlyZXQgPSBHUk9fTk9STUFMOworCWdvdG8gcHVsbDsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2dyb19yZWNlaXZlKTsKIApAQCAtMjQ3MiwyOSArMjQ2Niw0NCBAQAogewogCXN0cnVjdCBza19idWZmICpwOwogCisJaWYgKG5ldHBvbGxfcnhfb24oc2tiKSkKKwkJcmV0dXJuIEdST19OT1JNQUw7CisKIAlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IDE7CisJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAhY29tcGFyZV9ldGhlcl9oZWFkZXIoCisJCQlza2JfbWFjX2hlYWRlcihwKSwgc2tiX2dyb19tYWNfaGVhZGVyKHNrYikpOwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggPSAwOwogCX0KIAogCXJldHVybiBkZXZfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTsKIH0KIAotaW50IG5hcGlfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraW50IG5hcGlfc2tiX2ZpbmlzaChpbnQgcmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCXJldHVybiBORVRfUlhfRFJPUDsKKwlpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7CiAKLQlzd2l0Y2ggKF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKSB7Ci0JY2FzZSAtMToKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgR1JPX05PUk1BTDoKIAkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKLQljYXNlIDE6CisJY2FzZSBHUk9fRFJPUDoKKwkJZXJyID0gTkVUX1JYX0RST1A7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBHUk9fTUVSR0VEX0ZSRUU6CiAJCWtmcmVlX3NrYihza2IpOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wobmFwaV9za2JfZmluaXNoKTsKKworaW50IG5hcGlfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYl9ncm9fcmVzZXRfb2Zmc2V0KHNrYik7CisKKwlyZXR1cm4gbmFwaV9za2JfZmluaXNoKF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpLCBza2IpOwogfQogRVhQT1JUX1NZTUJPTChuYXBpX2dyb19yZWNlaXZlKTsKIApAQCAtMjUxMiw2ICsyNTIxLDkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS0+ZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBuYXBpLT5za2I7CisJc3RydWN0IGV0aGhkciAqZXRoOworCXNrYl9mcmFnX3QgKmZyYWc7CisJaW50IGk7CiAKIAluYXBpLT5za2IgPSBOVUxMOwogCkBAIC0yNTI0LDIwICsyNTM2LDM2IEBACiAJfQogCiAJQlVHX09OKGluZm8tPm5yX2ZyYWdzID4gTUFYX1NLQl9GUkFHUyk7CisJZnJhZyA9ICZpbmZvLT5mcmFnc1tpbmZvLT5ucl9mcmFncyAtIDFdOworCisJZm9yIChpID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSA8IGluZm8tPm5yX2ZyYWdzOyBpKyspIHsKKwkJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgaSwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJICAgZnJhZy0+c2l6ZSk7CisJCWZyYWcrKzsKKwl9CiAJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IGluZm8tPm5yX2ZyYWdzOwotCW1lbWNweShza2Jfc2hpbmZvKHNrYiktPmZyYWdzLCBpbmZvLT5mcmFncywgc2l6ZW9mKGluZm8tPmZyYWdzKSk7CiAKIAlza2ItPmRhdGFfbGVuID0gaW5mby0+bGVuOwogCXNrYi0+bGVuICs9IGluZm8tPmxlbjsKIAlza2ItPnRydWVzaXplICs9IGluZm8tPmxlbjsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkgeworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKKworCWV0aCA9IHNrYl9ncm9faGVhZGVyKHNrYiwgc2l6ZW9mKCpldGgpKTsKKwlpZiAoIWV0aCkgewogCQluYXBpX3JldXNlX3NrYihuYXBpLCBza2IpOwogCQlza2IgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCXNrYl9ncm9fcHVsbChza2IsIHNpemVvZigqZXRoKSk7CisKKwkvKgorCSAqIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgb25seSBwcm90b2NvbHMgd2UgY2FyZSBhYm91dCBkb24ndCByZXF1aXJlCisJICogc3BlY2lhbCBoYW5kbGluZy4gIFdlJ2xsIGZpeCBpdCB1cCBwcm9wZXJseSBhdCB0aGUgZW5kLgorCSAqLworCXNrYi0+cHJvdG9jb2wgPSBldGgtPmhfcHJvdG87CiAKIAlza2ItPmlwX3N1bW1lZCA9IGluZm8tPmlwX3N1bW1lZDsKIAlza2ItPmNzdW0gPSBpbmZvLT5jc3VtOwpAQCAtMjU0NywzMSArMjU3NSw0MiBAQAogfQogRVhQT1JUX1NZTUJPTChuYXBpX2ZyYWdpbmZvX3NrYik7CiAKK2ludCBuYXBpX2ZyYWdzX2ZpbmlzaChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IsIGludCByZXQpCit7CisJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOworCisJc3dpdGNoIChyZXQpIHsKKwljYXNlIEdST19OT1JNQUw6CisJY2FzZSBHUk9fSEVMRDoKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmFwaS0+ZGV2KTsKKworCQlpZiAocmV0ID09IEdST19OT1JNQUwpCisJCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCQlza2JfZ3JvX3B1bGwoc2tiLCAtRVRIX0hMRU4pOworCQlicmVhazsKKworCWNhc2UgR1JPX0RST1A6CisJCWVyciA9IE5FVF9SWF9EUk9QOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgR1JPX01FUkdFRF9GUkVFOgorCQluYXBpX3JldXNlX3NrYihuYXBpLCBza2IpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChuYXBpX2ZyYWdzX2ZpbmlzaCk7CisKIGludCBuYXBpX2dyb19mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBuYXBpX2dyb19mcmFnaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmFwaV9mcmFnaW5mb19za2IobmFwaSwgaW5mbyk7Ci0JaW50IGVyciA9IE5FVF9SWF9EUk9QOwogCiAJaWYgKCFza2IpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQlpZiAobmV0cG9sbF9yZWNlaXZlX3NrYihza2IpKQotCQlnb3RvIG91dDsKLQotCWVyciA9IE5FVF9SWF9TVUNDRVNTOwotCi0Jc3dpdGNoIChfX25hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKSkgewotCWNhc2UgLTE6Ci0JCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCi0JY2FzZSAwOgotCQlnb3RvIG91dDsKLQl9Ci0KLQluYXBpX3JldXNlX3NrYihuYXBpLCBza2IpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbmFwaV9mcmFnc19maW5pc2gobmFwaSwgc2tiLCBfX25hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKSk7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX2ZyYWdzKTsKIApAQCAtMjY1Myw2ICsyNjkyLDcgQEAKIAkJICAgIGludCAoKnBvbGwpKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpLCBpbnQgd2VpZ2h0KQogewogCUlOSVRfTElTVF9IRUFEKCZuYXBpLT5wb2xsX2xpc3QpOworCW5hcGktPmdyb19jb3VudCA9IDA7CiAJbmFwaS0+Z3JvX2xpc3QgPSBOVUxMOwogCW5hcGktPnNrYiA9IE5VTEw7CiAJbmFwaS0+cG9sbCA9IHBvbGw7CkBAIC0yNjgxLDYgKzI3MjEsNyBAQAogCX0KIAogCW5hcGktPmdyb19saXN0ID0gTlVMTDsKKwluYXBpLT5ncm9fY291bnQgPSAwOwogfQogRVhQT1JUX1NZTUJPTChuZXRpZl9uYXBpX2RlbCk7CiAKQEAgLTM5NDksNiArMzk5MCw3IEBACiAJCQkgICAgY21kID09IFNJT0NTTUlJUkVHIHx8CiAJCQkgICAgY21kID09IFNJT0NCUkFERElGIHx8CiAJCQkgICAgY21kID09IFNJT0NCUkRFTElGIHx8CisJCQkgICAgY21kID09IFNJT0NTSFdUU1RBTVAgfHwKIAkJCSAgICBjbWQgPT0gU0lPQ1dBTkRFVikgewogCQkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJCWlmIChvcHMtPm5kb19kb19pb2N0bCkgewpAQCAtNDEwMyw2ICs0MTQ1LDcgQEAKIAkJY2FzZSBTSU9DQk9ORENIQU5HRUFDVElWRToKIAkJY2FzZSBTSU9DQlJBRERJRjoKIAkJY2FzZSBTSU9DQlJERUxJRjoKKwkJY2FzZSBTSU9DU0hXVFNUQU1QOgogCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJCXJldHVybiAtRVBFUk07CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTUxOTksNiArNTI0Miw3IEBACiAJCXF1ZXVlLT5iYWNrbG9nLnBvbGwgPSBwcm9jZXNzX2JhY2tsb2c7CiAJCXF1ZXVlLT5iYWNrbG9nLndlaWdodCA9IHdlaWdodF9wOwogCQlxdWV1ZS0+YmFja2xvZy5ncm9fbGlzdCA9IE5VTEw7CisJCXF1ZXVlLT5iYWNrbG9nLmdyb19jb3VudCA9IDA7CiAJfQogCiAJZGV2X2Jvb3RfcGhhc2UgPSAwOwpAQCAtNTIzMSw2ICs1Mjc1LDE0IEBACiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwogCitzdGF0aWMgaW50IF9faW5pdCBpbml0aWFsaXplX2hhc2hybmQodm9pZCkKK3sKKwlnZXRfcmFuZG9tX2J5dGVzKCZza2JfdHhfaGFzaHJuZCwgc2l6ZW9mKHNrYl90eF9oYXNocm5kKSk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGxfc3luYyhpbml0aWFsaXplX2hhc2hybmQpOworCiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9pbmRleCk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9uYW1lKTsKIEVYUE9SVF9TWU1CT0woX19kZXZfcmVtb3ZlX3BhY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmQwZGMzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBNb25pdG9yaW5nIGNvZGUgZm9yIG5ldHdvcmsgZHJvcHBlZCBwYWNrZXQgYWxlcnRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5laWwgSG9ybWFuIDxuaG9ybWFuQHR1eGRyaXZlci5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRwb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF9kcm9wbW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisKKyNpbmNsdWRlIDx0cmFjZS9za2IuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2RlZmluZSBUUkFDRV9PTiAxCisjZGVmaW5lIFRSQUNFX09GRiAwCisKK3N0YXRpYyB2b2lkIHNlbmRfZG1fYWxlcnQoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpOworCisKKy8qCisgKiBHbG9iYWxzLCBvdXIgbmV0bGluayBzb2NrZXQgcG9pbnRlcgorICogYW5kIHRoZSB3b3JrIGhhbmRsZSB0aGF0IHdpbGwgc2VuZCB1cAorICogbmV0bGluayBhbGVydHMKKyAqLworc3RydWN0IHNvY2sgKmRtX3NvY2s7CisKK3N0cnVjdCBwZXJfY3B1X2RtX2RhdGEgeworCXN0cnVjdCB3b3JrX3N0cnVjdCBkbV9hbGVydF93b3JrOworCXN0cnVjdCBza19idWZmICpza2I7CisJYXRvbWljX3QgZG1faGl0X2NvdW50OworCXN0cnVjdCB0aW1lcl9saXN0IHNlbmRfdGltZXI7Cit9OworCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5ldF9kcm9wX21vbml0b3JfZmFtaWx5ID0geworCS5pZCAgICAgICAgICAgICA9IEdFTkxfSURfR0VORVJBVEUsCisJLmhkcnNpemUgICAgICAgID0gMCwKKwkubmFtZSAgICAgICAgICAgPSAiTkVUX0RNIiwKKwkudmVyc2lvbiAgICAgICAgPSAxLAorCS5tYXhhdHRyICAgICAgICA9IE5FVF9ETV9DTURfTUFYLAorfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJfY3B1X2RtX2RhdGEsIGRtX2NwdV9kYXRhKTsKKworc3RhdGljIGludCBkbV9oaXRfbGltaXQgPSA2NDsKK3N0YXRpYyBpbnQgZG1fZGVsYXkgPSAxOworCisKK3N0YXRpYyB2b2lkIHJlc2V0X3Blcl9jcHVfZGF0YShzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhKQoreworCXNpemVfdCBhbDsKKwlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyAqbXNnOworCisJYWwgPSBzaXplb2Yoc3RydWN0IG5ldF9kbV9hbGVydF9tc2cpOworCWFsICs9IGRtX2hpdF9saW1pdCAqIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpOworCWRhdGEtPnNrYiA9IGdlbmxtc2dfbmV3KGFsLCBHRlBfS0VSTkVMKTsKKwlnZW5sbXNnX3B1dChkYXRhLT5za2IsIDAsIDAsICZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSwKKwkJCTAsIE5FVF9ETV9DTURfQUxFUlQpOworCW1zZyA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoZGF0YS0+c2tiLCBzaXplb2Yoc3RydWN0IG5ldF9kbV9hbGVydF9tc2cpKTsKKwltZW1zZXQobXNnLCAwLCBhbCk7CisJYXRvbWljX3NldCgmZGF0YS0+ZG1faGl0X2NvdW50LCBkbV9oaXRfbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2RtX2FsZXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSA9ICZfX2dldF9jcHVfdmFyKGRtX2NwdV9kYXRhKTsKKworCS8qCisJICogR3JhYiB0aGUgc2tiIHdlJ3JlIGFib3V0IHRvIHNlbmQKKwkgKi8KKwlza2IgPSBkYXRhLT5za2I7CisKKwkvKgorCSAqIFJlcGxhY2UgaXQgd2l0aCBhIG5ldyBvbmUKKwkgKi8KKwlyZXNldF9wZXJfY3B1X2RhdGEoZGF0YSk7CisKKwkvKgorCSAqIFNoaXAgaXQhCisJICovCisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBORVRfRE1fR1JQX0FMRVJULCBHRlBfS0VSTkVMKTsKKworfQorCisvKgorICogVGhpcyBpcyB0aGUgdGltZXIgZnVuY3Rpb24gdG8gZGVsYXkgdGhlIHNlbmRpbmcgb2YgYW4gYWxlcnQKKyAqIGluIHRoZSBldmVudCB0aGF0IG1vcmUgZHJvcHMgd2lsbCBhcnJpdmUgZHVyaW5nIHRoZQorICogaHlzdGVyZXNpcyBwZXJpb2QuICBOb3RlIHRoYXQgaXQgb3BlcmF0ZXMgdW5kZXIgdGhlIHRpbWVyIGludGVycnVwdAorICogc28gd2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHByZWVtcHRpb24gaGVyZQorICovCitzdGF0aWMgdm9pZCBzY2hlZF9zZW5kX3dvcmsodW5zaWduZWQgbG9uZyB1bnVzZWQpCit7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSA9ICAmX19nZXRfY3B1X3ZhcihkbV9jcHVfZGF0YSk7CisKKwlzY2hlZHVsZV93b3JrKCZkYXRhLT5kbV9hbGVydF93b3JrKTsKK30KKworc3RhdGljIHZvaWQgdHJhY2Vfa2ZyZWVfc2tiX2hpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpsb2NhdGlvbikKK3sKKwlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyAqbXNnOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCWludCBpOworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEgPSAmX19nZXRfY3B1X3ZhcihkbV9jcHVfZGF0YSk7CisKKworCWlmICghYXRvbWljX2FkZF91bmxlc3MoJmRhdGEtPmRtX2hpdF9jb3VudCwgLTEsIDApKSB7CisJCS8qCisJCSAqIHdlJ3JlIGFscmVhZHkgYXQgemVybywgZGlzY2FyZCB0aGlzIGhpdAorCQkgKi8KKwkJZ290byBvdXQ7CisJfQorCisJbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWRhdGEtPnNrYi0+ZGF0YTsKKwltc2cgPSBnZW5sbXNnX2RhdGEobmxtc2dfZGF0YShubGgpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXNnLT5lbnRyaWVzOyBpKyspIHsKKwkJaWYgKCFtZW1jbXAoJmxvY2F0aW9uLCBtc2ctPnBvaW50c1tpXS5wYywgc2l6ZW9mKHZvaWQgKikpKSB7CisJCQltc2ctPnBvaW50c1tpXS5jb3VudCsrOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGVudHJ5CisJICovCisJX19ubGFfcmVzZXJ2ZV9ub2hkcihkYXRhLT5za2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQpKTsKKwltZW1jcHkobXNnLT5wb2ludHNbbXNnLT5lbnRyaWVzXS5wYywgJmxvY2F0aW9uLCBzaXplb2Yodm9pZCAqKSk7CisJbXNnLT5wb2ludHNbbXNnLT5lbnRyaWVzXS5jb3VudCA9IDE7CisJbXNnLT5lbnRyaWVzKys7CisKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmRhdGEtPnNlbmRfdGltZXIpKSB7CisJCWRhdGEtPnNlbmRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBkbV9kZWxheSAqIEhaOworCQlhZGRfdGltZXJfb24oJmRhdGEtPnNlbmRfdGltZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHNldF9hbGxfbW9uaXRvcl90cmFjZXMoaW50IHN0YXRlKQoreworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBUUkFDRV9PTjoKKwkJcmMgfD0gcmVnaXN0ZXJfdHJhY2Vfa2ZyZWVfc2tiKHRyYWNlX2tmcmVlX3NrYl9oaXQpOworCQlicmVhazsKKwljYXNlIFRSQUNFX09GRjoKKwkJcmMgfD0gdW5yZWdpc3Rlcl90cmFjZV9rZnJlZV9za2IodHJhY2Vfa2ZyZWVfc2tiX2hpdCk7CisKKwkJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJjKQorCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCXJldHVybiByYzsKK30KKworCitzdGF0aWMgaW50IG5ldF9kbV9jbWRfY29uZmlnKHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgbmV0X2RtX2NtZF90cmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzd2l0Y2ggKGluZm8tPmdlbmxoZHItPmNtZCkgeworCWNhc2UgTkVUX0RNX0NNRF9TVEFSVDoKKwkJcmV0dXJuIHNldF9hbGxfbW9uaXRvcl90cmFjZXMoVFJBQ0VfT04pOworCQlicmVhazsKKwljYXNlIE5FVF9ETV9DTURfU1RPUDoKKwkJcmV0dXJuIHNldF9hbGxfbW9uaXRvcl90cmFjZXMoVFJBQ0VfT0ZGKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworCitzdGF0aWMgc3RydWN0IGdlbmxfb3BzIGRyb3Btb25fb3BzW10gPSB7CisJeworCQkuY21kID0gTkVUX0RNX0NNRF9DT05GSUcsCisJCS5kb2l0ID0gbmV0X2RtX2NtZF9jb25maWcsCisJfSwKKwl7CisJCS5jbWQgPSBORVRfRE1fQ01EX1NUQVJULAorCQkuZG9pdCA9IG5ldF9kbV9jbWRfdHJhY2UsCisJfSwKKwl7CisJCS5jbWQgPSBORVRfRE1fQ01EX1NUT1AsCisJCS5kb2l0ID0gbmV0X2RtX2NtZF90cmFjZSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRfZHJvcF9tb25pdG9yKHZvaWQpCit7CisJaW50IGNwdTsKKwlpbnQgcmMsIGksIHJldDsKKwlzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhOworCXByaW50ayhLRVJOX0lORk8gIkluaXRhbGl6aW5nIG5ldHdvcmsgZHJvcCBtb25pdG9yIHNlcnZpY2VcbiIpOworCisJaWYgKHNpemVvZih2b2lkICopID4gOCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBzdG9yZSBwcm9ncmFtIGNvdW50ZXJzIG9uIHRoaXMgYXJjaCwgRHJvcCBtb25pdG9yIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCWlmIChnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBjcmVhdGUgZHJvcCBtb25pdG9yIG5ldGxpbmsgZmFtaWx5XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmMgPSAtRUZBVUxUOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJvcG1vbl9vcHMpOyBpKyspIHsKKwkJcmV0ID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldF9kcm9wX21vbml0b3JfZmFtaWx5LAorCQkJCQkmZHJvcG1vbl9vcHNbaV0pOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9DUklUICJmYWlsZWQgdG8gcmVnaXN0ZXIgb3BlcmF0aW9uICVkXG4iLAorCQkJCWRyb3Btb25fb3BzW2ldLmNtZCk7CisJCQlnb3RvIG91dF91bnJlZzsKKwkJfQorCX0KKworCXJjID0gMDsKKworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgeworCQlkYXRhID0gJnBlcl9jcHUoZG1fY3B1X2RhdGEsIGNwdSk7CisJCXJlc2V0X3Blcl9jcHVfZGF0YShkYXRhKTsKKwkJSU5JVF9XT1JLKCZkYXRhLT5kbV9hbGVydF93b3JrLCBzZW5kX2RtX2FsZXJ0KTsKKwkJaW5pdF90aW1lcigmZGF0YS0+c2VuZF90aW1lcik7CisJCWRhdGEtPnNlbmRfdGltZXIuZGF0YSA9IGNwdTsKKwkJZGF0YS0+c2VuZF90aW1lci5mdW5jdGlvbiA9IHNjaGVkX3NlbmRfd29yazsKKwl9CisJZ290byBvdXQ7CisKK291dF91bnJlZzoKKwlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCitsYXRlX2luaXRjYWxsKGluaXRfbmV0X2Ryb3BfbW9uaXRvcik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggOTQ3NzEwYS4uMjQ0Y2E1NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMjA5LDM0ICsyMDksNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBldGh0b29sX3NldF9yeGhhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQorc3RhdGljIGludCBldGh0b29sX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcnhuZmMgY21kOwogCi0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhoYXNoKQorCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4bmZjKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmFkZHIsIHNpemVvZihjbWQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X3J4aGFzaChkZXYsICZjbWQpOworCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhuZmMoZGV2LCAmY21kKTsKIH0KIAotc3RhdGljIGludCBldGh0b29sX2dldF9yeGhhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQorc3RhdGljIGludCBldGh0b29sX2dldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcnhuZmMgaW5mbzsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJaW50IHJldDsKKwl2b2lkICpydWxlX2J1ZiA9IE5VTEw7CiAKLQlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9yeGhhc2gpCisJaWYgKCFvcHMtPmdldF9yeG5mYykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCB1c2VyYWRkciwgc2l6ZW9mKGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlkZXYtPmV0aHRvb2xfb3BzLT5nZXRfcnhoYXNoKGRldiwgJmluZm8pOworCWlmIChpbmZvLmNtZCA9PSBFVEhUT09MX0dSWENMU1JMQUxMKSB7CisJCWlmIChpbmZvLnJ1bGVfY250ID4gMCkgeworCQkJcnVsZV9idWYgPSBrbWFsbG9jKGluZm8ucnVsZV9jbnQgKiBzaXplb2YodTMyKSwKKwkJCQkJICAgR0ZQX1VTRVIpOworCQkJaWYgKCFydWxlX2J1ZikKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KIAorCXJldCA9IG9wcy0+Z2V0X3J4bmZjKGRldiwgJmluZm8sIHJ1bGVfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfb3V0OworCisJcmV0ID0gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7CisJCWdvdG8gZXJyX291dDsKKworCWlmIChydWxlX2J1ZikgeworCQl1c2VyYWRkciArPSBvZmZzZXRvZihzdHJ1Y3QgZXRodG9vbF9yeG5mYywgcnVsZV9sb2NzKTsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgcnVsZV9idWYsCisJCQkJIGluZm8ucnVsZV9jbnQgKiBzaXplb2YodTMyKSkpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldCA9IDA7CisKK2Vycl9vdXQ6CisJaWYgKHJ1bGVfYnVmKQorCQlrZnJlZShydWxlX2J1Zik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKQpAQCAtOTAxLDYgKzkyOSwxMCBAQAogCWNhc2UgRVRIVE9PTF9HRkxBR1M6CiAJY2FzZSBFVEhUT09MX0dQRkxBR1M6CiAJY2FzZSBFVEhUT09MX0dSWEZIOgorCWNhc2UgRVRIVE9PTF9HUlhSSU5HUzoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQUxMOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCkBAIC0xMDUyLDEwICsxMDg0LDE2IEBACiAJCQkJICAgICAgIGRldi0+ZXRodG9vbF9vcHMtPnNldF9wcml2X2ZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX0dSWEZIOgotCQlyYyA9IGV0aHRvb2xfZ2V0X3J4aGFzaChkZXYsIHVzZXJhZGRyKTsKKwljYXNlIEVUSFRPT0xfR1JYUklOR1M6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSVUxFOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDoKKwkJcmMgPSBldGh0b29sX2dldF9yeG5mYyhkZXYsIHVzZXJhZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX1NSWEZIOgotCQlyYyA9IGV0aHRvb2xfc2V0X3J4aGFzaChkZXYsIHVzZXJhZGRyKTsKKwljYXNlIEVUSFRPT0xfU1JYQ0xTUkxERUw6CisJY2FzZSBFVEhUT09MX1NSWENMU1JMSU5TOgorCQlyYyA9IGV0aHRvb2xfc2V0X3J4bmZjKGRldiwgdXNlcmFkZHIpOwogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfR0dSTzoKIAkJcmMgPSBldGh0b29sX2dldF9ncm8oZGV2LCB1c2VyYWRkcik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDMyYjNhMDEuLjk4NjkxZTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jCisrKyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCkBAIC01ODgsNyArNTg4LDggQEAKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIHBpZCwgb3BzLT5ubGdyb3VwLCBubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIG9wcy0+bmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIG9wcy0+bmxncm91cCwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMjc4YTE0Mi4uYTFjYmNlNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTg3MSw4ICs4NzEsNyBAQAogCQl3cml0ZV91bmxvY2soJm5laWdoLT5sb2NrKTsKIAkJbmVpZ2gtPm9wcy0+c29saWNpdChuZWlnaCwgc2tiKTsKIAkJYXRvbWljX2luYygmbmVpZ2gtPnByb2Jlcyk7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJfSBlbHNlIHsKIG91dDoKIAkJd3JpdGVfdW5sb2NrKCZuZWlnaC0+bG9jayk7CkBAIC05MDgsOCArOTA3LDcgQEAKIAkJCW5laWdoLT51cGRhdGVkID0gamlmZmllczsKIAkJCXdyaXRlX3VubG9ja19iaCgmbmVpZ2gtPmxvY2spOwogCi0JCQlpZiAoc2tiKQotCQkJCWtmcmVlX3NrYihza2IpOworCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZSBpZiAobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9TVEFMRSkgewpAQCAtMTY1Niw3ICsxNjU0LDExIEBACiAJCQkJZmxhZ3MgJj0gfk5FSUdIX1VQREFURV9GX09WRVJSSURFOwogCQl9CiAKLQkJZXJyID0gbmVpZ2hfdXBkYXRlKG5laWdoLCBsbGFkZHIsIG5kbS0+bmRtX3N0YXRlLCBmbGFncyk7CisJCWlmIChuZG0tPm5kbV9mbGFncyAmIE5URl9VU0UpIHsKKwkJCW5laWdoX2V2ZW50X3NlbmQobmVpZ2gsIE5VTEwpOworCQkJZXJyID0gMDsKKwkJfSBlbHNlCisJCQllcnIgPSBuZWlnaF91cGRhdGUobmVpZ2gsIGxsYWRkciwgbmRtLT5uZG1fc3RhdGUsIGZsYWdzKTsKIAkJbmVpZ2hfcmVsZWFzZShuZWlnaCk7CiAJCWdvdG8gb3V0X2Rldl9wdXQ7CiAJfQpAQCAtMjUzNCw3ICsyNTM2LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORUlHSCwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9ORUlHSCwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggNDg0ZjU4Ny4uMmRhNTlhMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCWRldi0+Z3JvdXBzID0gZ3JvdXBzOwogCiAJQlVJTERfQlVHX09OKEJVU19JRF9TSVpFIDwgSUZOQU1TSVopOwotCWRldl9zZXRfbmFtZShkZXYsIG5ldC0+bmFtZSk7CisJZGV2X3NldF9uYW1lKGRldiwgIiVzIiwgbmV0LT5uYW1lKTsKIAogI2lmZGVmIENPTkZJR19TWVNGUwogCSpncm91cHMrKyA9ICZuZXRzdGF0X2dyb3VwOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXRyYWNlcy5jIGIvbmV0L2NvcmUvbmV0LXRyYWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmI0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvY29yZS9uZXQtdHJhY2VzLmMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIGNvbnNvbGlkYXRlcyB0cmFjZSBwb2ludCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF9kcm9wbW9uLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisKK0RFRklORV9UUkFDRShrZnJlZV9za2IpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChrZnJlZV9za2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCA2NTQ5ODQ4Li4zMmQ0MTlmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMzI3NSw4ICszMjc1LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpIHsKIAkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCiAJCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJfQpAQCAtMzMwMyw4ICszMzAyLDcgQEAKIAkJaWYgKCFjdXItPnJlbW92YWxfbWFyaykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChjdXItPnNrYikKLQkJCWtmcmVlX3NrYihjdXItPnNrYik7CisJCWtmcmVlX3NrYihjdXItPnNrYik7CiAJCWN1ci0+c2tiID0gTlVMTDsKIAogCQlwa3RnZW5fcmVtb3ZlX2RldmljZSh0LCBjdXIpOwpAQCAtMzMyOCw4ICszMzI2LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocSwgbiwgJnQtPmlmX2xpc3QpIHsKIAkJY3VyID0gbGlzdF9lbnRyeShxLCBzdHJ1Y3QgcGt0Z2VuX2RldiwgbGlzdCk7CiAKLQkJaWYgKGN1ci0+c2tiKQotCQkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKKwkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKIAkJY3VyLT5za2IgPSBOVUxMOwogCiAJCXBrdGdlbl9yZW1vdmVfZGV2aWNlKHQsIGN1cik7CkBAIC0zMzkzLDggKzMzOTAsNyBAQAogCiAJCWlmICghbmV0aWZfcnVubmluZyhvZGV2KSkgewogCQkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCQkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zNDE1LDggKzM0MTEsNyBAQAogCQlpZiAoKCsrcGt0X2Rldi0+Y2xvbmVfY291bnQgPj0gcGt0X2Rldi0+Y2xvbmVfc2tiKQogCQkgICAgfHwgKCFwa3RfZGV2LT5za2IpKSB7CiAJCQkvKiBidWlsZCBhIG5ldyBwa3QgKi8KLQkJCWlmIChwa3RfZGV2LT5za2IpCi0JCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAogCQkJcGt0X2Rldi0+c2tiID0gZmlsbF9wYWNrZXQob2RldiwgcGt0X2Rldik7CiAJCQlpZiAocGt0X2Rldi0+c2tiID09IE5VTEwpIHsKQEAgLTM0OTgsOCArMzQ5Myw3IEBACiAKIAkJLyogRG9uZSB3aXRoIHRoaXMgKi8KIAkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCX0KIG91dDo7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDc5MGRkMjAuLmQ3ODAzMGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC00NTUsOCArNDU1LDggQEAKIAlyZXR1cm4gbmxtc2dfdW5pY2FzdChydG5sLCBza2IsIHBpZCk7CiB9CiAKLWludCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwKLQkJc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKQordm9pZCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwKKwkJIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqcnRubCA9IG5ldC0+cnRubDsKIAlpbnQgcmVwb3J0ID0gMDsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCWlmIChubGgpCiAJCXJlcG9ydCA9IG5sbXNnX3JlcG9ydChubGgpOwogCi0JcmV0dXJuIG5sbXNnX25vdGlmeShydG5sLCBza2IsIHBpZCwgZ3JvdXAsIHJlcG9ydCwgZmxhZ3MpOworCW5sbXNnX25vdGlmeShydG5sLCBza2IsIHBpZCwgZ3JvdXAsIHJlcG9ydCwgZmxhZ3MpOwogfQogCiB2b2lkIHJ0bmxfc2V0X3NrX2VycihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBncm91cCwgaW50IGVycm9yKQpAQCAtMTI0Niw3ICsxMjQ2LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTElOSywgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzZhNmIxNi4uNmFjYmY5ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtNjQsNiArNjUsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8dHJhY2Uvc2tiLmg+CiAKICNpbmNsdWRlICJrbWFwX3NrYi5oIgogCkBAIC0xMjMsNiArMTI1LDcgQEAKIAkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICI8TlVMTD4iKTsKIAlCVUcoKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX292ZXJfcGFuaWMpOwogCiAvKioKICAqCXNrYl91bmRlcl9wYW5pYwktIAlwcml2YXRlIGZ1bmN0aW9uCkBAIC0xNDIsNiArMTQ1LDcgQEAKIAkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICI8TlVMTD4iKTsKIAlCVUcoKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3VuZGVyX3BhbmljKTsKIAogLyogCUFsbG9jYXRlIGEgbmV3IHNrYnVmZi4gV2UgZG8gdGhpcyBvdXJzZWx2ZXMgc28gd2UgY2FuIGZpbGwgaW4gYSBmZXcKICAqCSdwcml2YXRlJyBmaWVsZHMgYW5kIGFsc28gZG8gbWVtb3J5IHN0YXRpc3RpY3MgdG8gZmluZCBhbGwgdGhlCkBAIC0yMDUsNyArMjA5LDkgQEAKIAlzaGluZm8tPmdzb19zZWdzID0gMDsKIAlzaGluZm8tPmdzb190eXBlID0gMDsKIAlzaGluZm8tPmlwNl9mcmFnX2lkID0gMDsKKwlzaGluZm8tPnR4X2ZsYWdzLmZsYWdzID0gMDsKIAlzaGluZm8tPmZyYWdfbGlzdCA9IE5VTEw7CisJbWVtc2V0KCZzaGluZm8tPmh3dHN0YW1wcywgMCwgc2l6ZW9mKHNoaW5mby0+aHd0c3RhbXBzKSk7CiAKIAlpZiAoZmNsb25lKSB7CiAJCXN0cnVjdCBza19idWZmICpjaGlsZCA9IHNrYiArIDE7CkBAIC0yMjMsNiArMjI5LDcgQEAKIAlza2IgPSBOVUxMOwogCWdvdG8gb3V0OwogfQorRVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7CiAKIC8qKgogICoJX19uZXRkZXZfYWxsb2Nfc2tiIC0gYWxsb2NhdGUgYW4gc2tidWZmIGZvciByeCBvbiBhIHNwZWNpZmljIGRldmljZQpAQCAtMjUwLDYgKzI1Nyw3IEBACiAJfQogCXJldHVybiBza2I7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmV0ZGV2X2FsbG9jX3NrYik7CiAKIHN0cnVjdCBwYWdlICpfX25ldGRldl9hbGxvY19wYWdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGdmcF90IGdmcF9tYXNrKQogewpAQCAtNDE4LDYgKzQyNiw3IEBACiAJc2tiX3JlbGVhc2VfYWxsKHNrYik7CiAJa2ZyZWVfc2tibWVtKHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTsKIAogLyoqCiAgKglrZnJlZV9za2IgLSBmcmVlIGFuIHNrX2J1ZmYKQEAgLTQzNCw4ICs0NDMsMzAgQEAKIAkJc21wX3JtYigpOwogCWVsc2UgaWYgKGxpa2VseSghYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpKQogCQlyZXR1cm47CisJdHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlfX2tmcmVlX3NrYihza2IpOwogfQorRVhQT1JUX1NZTUJPTChrZnJlZV9za2IpOworCisvKioKKyAqCWNvbnN1bWVfc2tiIC0gZnJlZSBhbiBza2J1ZmYKKyAqCUBza2I6IGJ1ZmZlciB0byBmcmVlCisgKgorICoJRHJvcCBhIHJlZiB0byB0aGUgYnVmZmVyIGFuZCBmcmVlIGl0IGlmIHRoZSB1c2FnZSBjb3VudCBoYXMgaGl0IHplcm8KKyAqCUZ1bmN0aW9ucyBpZGVudGljYWxseSB0byBrZnJlZV9za2IsIGJ1dCBrZnJlZV9za2IgYXNzdW1lcyB0aGF0IHRoZSBmcmFtZQorICoJaXMgYmVpbmcgZHJvcHBlZCBhZnRlciBhIGZhaWx1cmUgYW5kIG5vdGVzIHRoYXQKKyAqLwordm9pZCBjb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuOworCWlmIChsaWtlbHkoYXRvbWljX3JlYWQoJnNrYi0+dXNlcnMpID09IDEpKQorCQlzbXBfcm1iKCk7CisJZWxzZSBpZiAobGlrZWx5KCFhdG9taWNfZGVjX2FuZF90ZXN0KCZza2ItPnVzZXJzKSkpCisJCXJldHVybjsKKwlfX2tmcmVlX3NrYihza2IpOworfQorRVhQT1JUX1NZTUJPTChjb25zdW1lX3NrYik7CiAKIC8qKgogICoJc2tiX3JlY3ljbGVfY2hlY2sgLSBjaGVjayBpZiBza2IgY2FuIGJlIHJldXNlZCBmb3IgcmVjZWl2ZQpAQCAtNjA1LDYgKzYzNiw3IEBACiAKIAlyZXR1cm4gX19za2JfY2xvbmUobiwgc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2Nsb25lKTsKIAogc3RhdGljIHZvaWQgY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpCiB7CkBAIC02NzEsNyArNzAzLDcgQEAKIAljb3B5X3NrYl9oZWFkZXIobiwgc2tiKTsKIAlyZXR1cm4gbjsKIH0KLQorRVhQT1JUX1NZTUJPTChza2JfY29weSk7CiAKIC8qKgogICoJcHNrYl9jb3B5CS0JY3JlYXRlIGNvcHkgb2YgYW4gc2tfYnVmZiB3aXRoIHByaXZhdGUgaGVhZC4KQEAgLTczMCw2ICs3NjIsNyBAQAogb3V0OgogCXJldHVybiBuOwogfQorRVhQT1JUX1NZTUJPTChwc2tiX2NvcHkpOwogCiAvKioKICAqCXBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiAmc2tfYnVmZgpAQCAtODEzLDYgKzg0Niw3IEBACiBub2RhdGE6CiAJcmV0dXJuIC1FTk9NRU07CiB9CitFWFBPUlRfU1lNQk9MKHBza2JfZXhwYW5kX2hlYWQpOwogCiAvKiBNYWtlIHByaXZhdGUgY29weSBvZiBza2Igd2l0aCB3cml0YWJsZSBoZWFkIGFuZCBzb21lIGhlYWRyb29tICovCiAKQEAgLTgzMyw3ICs4NjcsNyBAQAogCX0KIAlyZXR1cm4gc2tiMjsKIH0KLQorRVhQT1JUX1NZTUJPTChza2JfcmVhbGxvY19oZWFkcm9vbSk7CiAKIC8qKgogICoJc2tiX2NvcHlfZXhwYW5kCS0JY29weSBhbmQgZXhwYW5kIHNrX2J1ZmYKQEAgLTg5OCw2ICs5MzIsNyBAQAogCiAJcmV0dXJuIG47CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2V4cGFuZCk7CiAKIC8qKgogICoJc2tiX3BhZAkJCS0JemVybyBwYWQgdGhlIHRhaWwgb2YgYW4gc2tiCkBAIC05NDMsNiArOTc4LDcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChza2JfcGFkKTsKIAogLyoqCiAgKglza2JfcHV0IC0gYWRkIGRhdGEgdG8gYSBidWZmZXIKQEAgLTExMDAsNiArMTEzNiw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woX19fcHNrYl90cmltKTsKIAogLyoqCiAgKglfX3Bza2JfcHVsbF90YWlsIC0gYWR2YW5jZSB0YWlsIG9mIHNrYiBoZWFkZXIKQEAgLTExOTMsOCArMTIzMCw3IEBACiAJCQkJCWluc3AgPSBsaXN0OwogCQkJCX0KIAkJCQlpZiAoIXBza2JfcHVsbChsaXN0LCBlYXQpKSB7Ci0JCQkJCWlmIChjbG9uZSkKLQkJCQkJCWtmcmVlX3NrYihjbG9uZSk7CisJCQkJCWtmcmVlX3NrYihjbG9uZSk7CiAJCQkJCXJldHVybiBOVUxMOwogCQkJCX0KIAkJCQlicmVhazsKQEAgLTEyMzgsNiArMTI3NCw3IEBACiAKIAlyZXR1cm4gc2tiX3RhaWxfcG9pbnRlcihza2IpOwogfQorRVhQT1JUX1NZTUJPTChfX3Bza2JfcHVsbF90YWlsKTsKIAogLyogQ29weSBzb21lIGRhdGEgYml0cyBmcm9tIHNrYiB0byBrZXJuZWwgYnVmZmVyLiAqLwogCkBAIC0xMzE1LDYgKzEzNTIsNyBAQAogZmF1bHQ6CiAJcmV0dXJuIC1FRkFVTFQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2JpdHMpOwogCiAvKgogICogQ2FsbGJhY2sgZnJvbSBzcGxpY2VfdG9fcGlwZSgpLCBpZiB3ZSBuZWVkIHRvIHJlbGVhc2Ugc29tZSBwYWdlcwpAQCAtMTMyNSwxNCArMTM2MywzOSBAQAogCXB1dF9wYWdlKHNwZC0+cGFnZXNbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpsaW5lYXJfdG9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbGluZWFyX3RvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCAqbGVuLAorCQkJCQkgIHVuc2lnbmVkIGludCAqb2Zmc2V0LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCAwKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItPnNrOworCXN0cnVjdCBwYWdlICpwID0gc2stPnNrX3NuZG1zZ19wYWdlOworCXVuc2lnbmVkIGludCBvZmY7CiAKLQlpZiAoIXApCi0JCXJldHVybiBOVUxMOwotCW1lbWNweShwYWdlX2FkZHJlc3MocCkgKyBvZmZzZXQsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgbGVuKTsKKwlpZiAoIXApIHsKK25ld19wYWdlOgorCQlwID0gc2stPnNrX3NuZG1zZ19wYWdlID0gYWxsb2NfcGFnZXMoc2stPnNrX2FsbG9jYXRpb24sIDApOworCQlpZiAoIXApCisJCQlyZXR1cm4gTlVMTDsKKworCQlvZmYgPSBzay0+c2tfc25kbXNnX29mZiA9IDA7CisJCS8qIGhvbGQgb25lIHJlZiB0byB0aGlzIHBhZ2UgdW50aWwgaXQncyBmdWxsICovCisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IG1sZW47CisKKwkJb2ZmID0gc2stPnNrX3NuZG1zZ19vZmY7CisJCW1sZW4gPSBQQUdFX1NJWkUgLSBvZmY7CisJCWlmIChtbGVuIDwgNjQgJiYgbWxlbiA8ICpsZW4pIHsKKwkJCXB1dF9wYWdlKHApOworCQkJZ290byBuZXdfcGFnZTsKKwkJfQorCisJCSpsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsICpsZW4sIG1sZW4pOworCX0KKworCW1lbWNweShwYWdlX2FkZHJlc3MocCkgKyBvZmYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArICpvZmZzZXQsICpsZW4pOworCXNrLT5za19zbmRtc2dfb2ZmICs9ICpsZW47CisJKm9mZnNldCA9IG9mZjsKKwlnZXRfcGFnZShwKTsKIAogCXJldHVybiBwOwogfQpAQCAtMTM0MSwyMSArMTQwNCwyMSBAQAogICogRmlsbCBwYWdlL29mZnNldC9sZW5ndGggaW50byBzcGQsIGlmIGl0IGNhbiBob2xkIG1vcmUgcGFnZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNwZF9maWxsX3BhZ2Uoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKnNwZCwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQl1bnNpZ25lZCBpbnQgKmxlbiwgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGluZWFyKQogewogCWlmICh1bmxpa2VseShzcGQtPm5yX3BhZ2VzID09IFBJUEVfQlVGRkVSUykpCiAJCXJldHVybiAxOwogCiAJaWYgKGxpbmVhcikgewotCQlwYWdlID0gbGluZWFyX3RvX3BhZ2UocGFnZSwgbGVuLCBvZmZzZXQpOworCQlwYWdlID0gbGluZWFyX3RvX3BhZ2UocGFnZSwgbGVuLCAmb2Zmc2V0LCBza2IpOwogCQlpZiAoIXBhZ2UpCiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJZ2V0X3BhZ2UocGFnZSk7CiAKIAlzcGQtPnBhZ2VzW3NwZC0+bnJfcGFnZXNdID0gcGFnZTsKLQlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ubGVuID0gbGVuOworCXNwZC0+cGFydGlhbFtzcGQtPm5yX3BhZ2VzXS5sZW4gPSAqbGVuOwogCXNwZC0+cGFydGlhbFtzcGQtPm5yX3BhZ2VzXS5vZmZzZXQgPSBvZmZzZXQ7CiAJc3BkLT5ucl9wYWdlcysrOwogCkBAIC0xMzY1LDggKzE0MjgsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NlZ21lbnRfc2VlayhzdHJ1Y3QgcGFnZSAqKnBhZ2UsIHVuc2lnbmVkIGludCAqcG9mZiwKIAkJCQkgIHVuc2lnbmVkIGludCAqcGxlbiwgdW5zaWduZWQgaW50IG9mZikKIHsKKwl1bnNpZ25lZCBsb25nIG47CisKIAkqcG9mZiArPSBvZmY7Ci0JKnBhZ2UgKz0gKnBvZmYgLyBQQUdFX1NJWkU7CisJbiA9ICpwb2ZmIC8gUEFHRV9TSVpFOworCWlmIChuKQorCQkqcGFnZSA9IG50aF9wYWdlKCpwYWdlLCBuKTsKKwogCSpwb2ZmID0gKnBvZmYgJSBQQUdFX1NJWkU7CiAJKnBsZW4gLT0gb2ZmOwogfQpAQCAtMTM5Nyw3ICsxNDY1LDcgQEAKIAkJLyogdGhlIGxpbmVhciByZWdpb24gbWF5IHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBwYWdlcyAgKi8KIAkJZmxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgZmxlbiwgUEFHRV9TSVpFIC0gcG9mZik7CiAKLQkJaWYgKHNwZF9maWxsX3BhZ2Uoc3BkLCBwYWdlLCBmbGVuLCBwb2ZmLCBza2IsIGxpbmVhcikpCisJCWlmIChzcGRfZmlsbF9wYWdlKHNwZCwgcGFnZSwgJmZsZW4sIHBvZmYsIHNrYiwgbGluZWFyKSkKIAkJCXJldHVybiAxOwogCiAJCV9fc2VnbWVudF9zZWVrKCZwYWdlLCAmcG9mZiwgJnBsZW4sIGZsZW4pOwpAQCAtMTU5MCw3ICsxNjU4LDYgQEAKIGZhdWx0OgogCXJldHVybiAtRUZBVUxUOwogfQotCiBFWFBPUlRfU1lNQk9MKHNrYl9zdG9yZV9iaXRzKTsKIAogLyogQ2hlY2tzdW0gc2tiIGRhdGEuICovCkBAIC0xNjY3LDYgKzE3MzQsNyBAQAogCiAJcmV0dXJuIGNzdW07CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jaGVja3N1bSk7CiAKIC8qIEJvdGggb2YgYWJvdmUgaW4gb25lIGJvdHRsZS4gKi8KIApAQCAtMTc0OCw2ICsxODE2LDcgQEAKIAlCVUdfT04obGVuKTsKIAlyZXR1cm4gY3N1bTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fYml0cyk7CiAKIHZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0bykKIHsKQEAgLTE3NzQsNiArMTg0Myw3IEBACiAJCSooKF9fc3VtMTYgKikodG8gKyBjc3N0dWZmKSkgPSBjc3VtX2ZvbGQoY3N1bSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9hbmRfY3N1bV9kZXYpOwogCiAvKioKICAqCXNrYl9kZXF1ZXVlIC0gcmVtb3ZlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlCkBAIC0xNzk0LDYgKzE4NjQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTChza2JfZGVxdWV1ZSk7CiAKIC8qKgogICoJc2tiX2RlcXVldWVfdGFpbCAtIHJlbW92ZSBmcm9tIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZQpAQCAtMTgxMyw2ICsxODg0LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2RlcXVldWVfdGFpbCk7CiAKIC8qKgogICoJc2tiX3F1ZXVlX3B1cmdlIC0gZW1wdHkgYSBsaXN0CkBAIC0xODI4LDYgKzE5MDAsNyBAQAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpCiAJCWtmcmVlX3NrYihza2IpOwogfQorRVhQT1JUX1NZTUJPTChza2JfcXVldWVfcHVyZ2UpOwogCiAvKioKICAqCXNrYl9xdWV1ZV9oZWFkIC0gcXVldWUgYSBidWZmZXIgYXQgdGhlIGxpc3QgaGVhZApAQCAtMTg0OCw2ICsxOTIxLDcgQEAKIAlfX3NrYl9xdWV1ZV9oZWFkKGxpc3QsIG5ld3NrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9oZWFkKTsKIAogLyoqCiAgKglza2JfcXVldWVfdGFpbCAtIHF1ZXVlIGEgYnVmZmVyIGF0IHRoZSBsaXN0IHRhaWwKQEAgLTE4NjgsNiArMTk0Miw3IEBACiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfcXVldWVfdGFpbCk7CiAKIC8qKgogICoJc2tiX3VubGluawktCXJlbW92ZSBhIGJ1ZmZlciBmcm9tIGEgbGlzdApAQCAtMTg4Nyw2ICsxOTYyLDcgQEAKIAlfX3NrYl91bmxpbmsoc2tiLCBsaXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl91bmxpbmspOwogCiAvKioKICAqCXNrYl9hcHBlbmQJLQlhcHBlbmQgYSBidWZmZXIKQEAgLTE5MDYsNyArMTk4Miw3IEBACiAJX19za2JfcXVldWVfYWZ0ZXIobGlzdCwgb2xkLCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQotCitFWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmQpOwogCiAvKioKICAqCXNrYl9pbnNlcnQJLQlpbnNlcnQgYSBidWZmZXIKQEAgLTE5MjgsNiArMjAwNCw3IEBACiAJX19za2JfaW5zZXJ0KG5ld3NrLCBvbGQtPnByZXYsIG9sZCwgbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfaW5zZXJ0KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNrYl9zcGxpdF9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgIHN0cnVjdCBza19idWZmKiBza2IxLApAQCAtMjAwNiw2ICsyMDgzLDcgQEAKIAllbHNlCQkvKiBTZWNvbmQgY2h1bmsgaGFzIG5vIGhlYWRlciwgbm90aGluZyB0byBjb3B5LiAqLwogCQlza2Jfc3BsaXRfbm9faGVhZGVyKHNrYiwgc2tiMSwgbGVuLCBwb3MpOwogfQorRVhQT1JUX1NZTUJPTChza2Jfc3BsaXQpOwogCiAvKiBTaGlmdGluZyBmcm9tL3RvIGEgY2xvbmVkIHNrYiBpcyBhIG5vLWdvLgogICoKQEAgLTIxNjgsNiArMjI0Niw3IEBACiAJc3QtPmZyYWdfaWR4ID0gc3QtPnN0ZXBwZWRfb2Zmc2V0ID0gMDsKIAlzdC0+ZnJhZ19kYXRhID0gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3ByZXBhcmVfc2VxX3JlYWQpOwogCiAvKioKICAqIHNrYl9zZXFfcmVhZCAtIFNlcXVlbnRpYWxseSByZWFkIHNrYiBkYXRhCkBAIC0yMjU1LDYgKzIzMzQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9zZXFfcmVhZCk7CiAKIC8qKgogICogc2tiX2Fib3J0X3NlcV9yZWFkIC0gQWJvcnQgYSBzZXF1ZW50aWFsIHJlYWQgb2Ygc2tiIGRhdGEKQEAgLTIyNjgsNiArMjM0OCw3IEBACiAJaWYgKHN0LT5mcmFnX2RhdGEpCiAJCWt1bm1hcF9za2JfZnJhZyhzdC0+ZnJhZ19kYXRhKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2Fib3J0X3NlcV9yZWFkKTsKIAogI2RlZmluZSBUU19TS0JfQ0Ioc3RhdGUpCSgoc3RydWN0IHNrYl9zZXFfc3RhdGUgKikgJigoc3RhdGUpLT5jYikpCiAKQEAgLTIzMTAsNiArMjM5MSw3IEBACiAJcmV0ID0gdGV4dHNlYXJjaF9maW5kKGNvbmZpZywgc3RhdGUpOwogCXJldHVybiAocmV0IDw9IHRvIC0gZnJvbSA/IHJldCA6IFVJTlRfTUFYKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2ZpbmRfdGV4dCk7CiAKIC8qKgogICogc2tiX2FwcGVuZF9kYXRhdG9fZnJhZ3M6IC0gYXBwZW5kIHRoZSB1c2VyIGRhdGEgdG8gYSBza2IKQEAgLTIzODIsNiArMjQ2NCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2FwcGVuZF9kYXRhdG9fZnJhZ3MpOwogCiAvKioKICAqCXNrYl9wdWxsX3Jjc3VtIC0gcHVsbCBza2IgYW5kIHVwZGF0ZSByZWNlaXZlIGNoZWNrc3VtCkBAIC0yNTY5LDcgKzI2NTIsNiBAQAogCX0KIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudCk7CiAKIGludCBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMjU3NywxNyArMjY1OSwyMyBAQAogCXN0cnVjdCBza19idWZmICpwID0gKmhlYWQ7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJdW5zaWduZWQgaW50IGhlYWRyb29tOwotCXVuc2lnbmVkIGludCBobGVuID0gcC0+ZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHApOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2dyb19sZW4oc2tiKTsKIAotCWlmIChobGVuICsgcC0+bGVuICsgbGVuID49IDY1NTM2KQorCWlmIChwLT5sZW4gKyBsZW4gPj0gNjU1MzYpCiAJCXJldHVybiAtRTJCSUc7CiAKIAlpZiAoc2tiX3NoaW5mbyhwKS0+ZnJhZ19saXN0KQogCQlnb3RvIG1lcmdlOwotCWVsc2UgaWYgKCFza2JfaGVhZGxlbihwKSAmJiAhc2tiX2hlYWRsZW4oc2tiKSAmJgotCQkgc2tiX3NoaW5mbyhwKS0+bnJfZnJhZ3MgKyBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIDwKLQkJIE1BWF9TS0JfRlJBR1MpIHsKKwllbHNlIGlmIChza2JfaGVhZGxlbihza2IpIDw9IHNrYl9ncm9fb2Zmc2V0KHNrYikpIHsKKwkJaWYgKHNrYl9zaGluZm8ocCktPm5yX2ZyYWdzICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+CisJCSAgICBNQVhfU0tCX0ZSQUdTKQorCQkJcmV0dXJuIC1FMkJJRzsKKworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICs9CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIC09CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwogCQltZW1jcHkoc2tiX3NoaW5mbyhwKS0+ZnJhZ3MgKyBza2Jfc2hpbmZvKHApLT5ucl9mcmFncywKIAkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsCiAJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICogc2l6ZW9mKHNrYl9mcmFnX3QpKTsKQEAgLTI2MDQsNyArMjY5Miw3IEBACiAJfQogCiAJaGVhZHJvb20gPSBza2JfaGVhZHJvb20ocCk7Ci0JbnNrYiA9IG5ldGRldl9hbGxvY19za2IocC0+ZGV2LCBoZWFkcm9vbSk7CisJbnNrYiA9IG5ldGRldl9hbGxvY19za2IocC0+ZGV2LCBoZWFkcm9vbSArIHNrYl9ncm9fb2Zmc2V0KHApKTsKIAlpZiAodW5saWtlbHkoIW5za2IpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjYxMiwxMiArMjcwMCwxNSBAQAogCW5za2ItPm1hY19sZW4gPSBwLT5tYWNfbGVuOwogCiAJc2tiX3Jlc2VydmUobnNrYiwgaGVhZHJvb20pOworCV9fc2tiX3B1dChuc2tiLCBza2JfZ3JvX29mZnNldChwKSk7CiAKLQlza2Jfc2V0X21hY19oZWFkZXIobnNrYiwgLWhsZW4pOworCXNrYl9zZXRfbWFjX2hlYWRlcihuc2tiLCBza2JfbWFjX2hlYWRlcihwKSAtIHAtPmRhdGEpOwogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIobnNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHApKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIobnNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQocCkpOwogCi0JbWVtY3B5KHNrYl9tYWNfaGVhZGVyKG5za2IpLCBza2JfbWFjX2hlYWRlcihwKSwgaGxlbik7CisJX19za2JfcHVsbChwLCBza2JfZ3JvX29mZnNldChwKSk7CisJbWVtY3B5KHNrYl9tYWNfaGVhZGVyKG5za2IpLCBza2JfbWFjX2hlYWRlcihwKSwKKwkgICAgICAgcC0+ZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHApKTsKIAogCSpOQVBJX0dST19DQihuc2tiKSA9ICpOQVBJX0dST19DQihwKTsKIAlza2Jfc2hpbmZvKG5za2IpLT5mcmFnX2xpc3QgPSBwOwpAQCAtMjYzNiw2ICsyNzI3LDE3IEBACiAJcCA9IG5za2I7CiAKIG1lcmdlOgorCWlmIChza2JfZ3JvX29mZnNldChza2IpID4gc2tiX2hlYWRsZW4oc2tiKSkgeworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICs9CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIC09CisJCQlza2JfZ3JvX29mZnNldChza2IpIC0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKKwkJc2tiX2dyb19wdWxsKHNrYiwgc2tiX2hlYWRsZW4oc2tiKSk7CisJfQorCisJX19za2JfcHVsbChza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOworCiAJcC0+cHJldi0+bmV4dCA9IHNrYjsKIAlwLT5wcmV2ID0gc2tiOwogCXNrYl9oZWFkZXJfcmVsZWFzZShza2IpOwpAQCAtMjc0Nyw2ICsyODQ5LDcgQEAKIAogCXJldHVybiBuc2c7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChza2JfdG9fc2d2ZWMpOwogCiAvKioKICAqCXNrYl9jb3dfZGF0YSAtIENoZWNrIHRoYXQgYSBzb2NrZXQgYnVmZmVyJ3MgZGF0YSBidWZmZXJzIGFyZSB3cml0YWJsZQpAQCAtMjg1Niw2ICsyOTU5LDQ1IEBACiAKIAlyZXR1cm4gZWx0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nvd19kYXRhKTsKKwordm9pZCBza2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYiwKKwkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMpCit7CisJc3RydWN0IHNvY2sgKnNrID0gb3JpZ19za2ItPnNrOworCXN0cnVjdCBzb2NrX2V4dGVycl9za2IgKnNlcnI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyOworCisJaWYgKCFzaykKKwkJcmV0dXJuOworCisJc2tiID0gc2tiX2Nsb25lKG9yaWdfc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJaWYgKGh3dHN0YW1wcykgeworCQkqc2tiX2h3dHN0YW1wcyhza2IpID0KKwkJCSpod3RzdGFtcHM7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogbm8gaGFyZHdhcmUgdGltZSBzdGFtcHMgYXZhaWxhYmxlLAorCQkgKiBzbyBrZWVwIHRoZSBza2Jfc2hhcmVkX3R4IGFuZCBvbmx5CisJCSAqIHN0b3JlIHNvZnR3YXJlIHRpbWUgc3RhbXAKKwkJICovCisJCXNrYi0+dHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTsKKwl9CisKKwlzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTsKKwltZW1zZXQoc2VyciwgMCwgc2l6ZW9mKCpzZXJyKSk7CisJc2Vyci0+ZWUuZWVfZXJybm8gPSBFTk9NU0c7CisJc2Vyci0+ZWUuZWVfb3JpZ2luID0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORzsKKwllcnIgPSBzb2NrX3F1ZXVlX2Vycl9za2Ioc2ssIHNrYik7CisJaWYgKGVycikKKwkJa2ZyZWVfc2tiKHNrYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChza2JfdHN0YW1wX3R4KTsKKwogCiAvKioKICAqIHNrYl9wYXJ0aWFsX2NzdW1fc2V0IC0gc2V0IHVwIGFuZCB2ZXJpZnkgcGFydGlhbCBjc3VtIHZhbHVlcyBmb3IgcGFja2V0CkBAIC0yODg0LDYgKzMwMjYsNyBAQAogCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmY7CiAJcmV0dXJuIHRydWU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChza2JfcGFydGlhbF9jc3VtX3NldCk7CiAKIHZvaWQgX19za2Jfd2Fybl9scm9fZm9yd2FyZGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMjg5MSw0MiArMzAzNCw0IEBACiAJCXByX3dhcm5pbmcoIiVzOiByZWNlaXZlZCBwYWNrZXRzIGNhbm5vdCBiZSBmb3J3YXJkZWQiCiAJCQkgICAiIHdoaWxlIExSTyBpcyBlbmFibGVkXG4iLCBza2ItPmRldi0+bmFtZSk7CiB9Ci0KLUVYUE9SVF9TWU1CT0woX19fcHNrYl90cmltKTsKLUVYUE9SVF9TWU1CT0woX19rZnJlZV9za2IpOwotRVhQT1JUX1NZTUJPTChrZnJlZV9za2IpOwotRVhQT1JUX1NZTUJPTChfX3Bza2JfcHVsbF90YWlsKTsKLUVYUE9SVF9TWU1CT0woX19hbGxvY19za2IpOwotRVhQT1JUX1NZTUJPTChfX25ldGRldl9hbGxvY19za2IpOwotRVhQT1JUX1NZTUJPTChwc2tiX2NvcHkpOwotRVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NoZWNrc3VtKTsKLUVYUE9SVF9TWU1CT0woc2tiX2Nsb25lKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHkpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9hbmRfY3N1bV9iaXRzKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fZGV2KTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYml0cyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2V4cGFuZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9vdmVyX3BhbmljKTsKLUVYUE9SVF9TWU1CT0woc2tiX3BhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9yZWFsbG9jX2hlYWRyb29tKTsKLUVYUE9SVF9TWU1CT0woc2tiX3VuZGVyX3BhbmljKTsKLUVYUE9SVF9TWU1CT0woc2tiX2RlcXVldWUpOwotRVhQT1JUX1NZTUJPTChza2JfZGVxdWV1ZV90YWlsKTsKLUVYUE9SVF9TWU1CT0woc2tiX2luc2VydCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9wdXJnZSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9oZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3RhaWwpOwotRVhQT1JUX1NZTUJPTChza2JfdW5saW5rKTsKLUVYUE9SVF9TWU1CT0woc2tiX2FwcGVuZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9zcGxpdCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9wcmVwYXJlX3NlcV9yZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX3NlcV9yZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX2Fib3J0X3NlcV9yZWFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX2ZpbmRfdGV4dCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzKTsKIEVYUE9SVF9TWU1CT0woX19za2Jfd2Fybl9scm9fZm9yd2FyZGluZyk7Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHNrYl90b19zZ3ZlYyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChza2JfY293X2RhdGEpOwotRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3BhcnRpYWxfY3N1bV9zZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDVmOTdjYWEuLjA2MjAwNDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3JlcXVlc3Rfc29jay5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0X3RzdGFtcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bGludXgvaXBzZWMuaD4KIApAQCAtMTQ5LDcgKzE1MCw3IEBACiAgICJza19sb2NrLUFGX0RFQ25ldCIsICJza19sb2NrLUFGX05FVEJFVUkiICAsICJza19sb2NrLUFGX1NFQ1VSSVRZIiAsCiAgICJza19sb2NrLUFGX0tFWSIgICAsICJza19sb2NrLUFGX05FVExJTksiICAsICJza19sb2NrLUFGX1BBQ0tFVCIgICAsCiAgICJza19sb2NrLUFGX0FTSCIgICAsICJza19sb2NrLUFGX0VDT05FVCIgICAsICJza19sb2NrLUFGX0FUTVNWQyIgICAsCi0gICJza19sb2NrLTIxIiAgICAgICAsICJza19sb2NrLUFGX1NOQSIgICAgICAsICJza19sb2NrLUFGX0lSREEiICAgICAsCisgICJza19sb2NrLUFGX1JEUyIgICAsICJza19sb2NrLUFGX1NOQSIgICAgICAsICJza19sb2NrLUFGX0lSREEiICAgICAsCiAgICJza19sb2NrLUFGX1BQUE9YIiAsICJza19sb2NrLUFGX1dBTlBJUEUiICAsICJza19sb2NrLUFGX0xMQyIgICAgICAsCiAgICJza19sb2NrLTI3IiAgICAgICAsICJza19sb2NrLTI4IiAgICAgICAgICAsICJza19sb2NrLUFGX0NBTiIgICAgICAsCiAgICJza19sb2NrLUFGX1RJUEMiICAsICJza19sb2NrLUFGX0JMVUVUT09USCIsICJza19sb2NrLUlVQ1YiICAgICAgICAsCkBAIC0xNjQsNyArMTY1LDcgQEAKICAgInNsb2NrLUFGX0RFQ25ldCIsICJzbG9jay1BRl9ORVRCRVVJIiAgLCAic2xvY2stQUZfU0VDVVJJVFkiICwKICAgInNsb2NrLUFGX0tFWSIgICAsICJzbG9jay1BRl9ORVRMSU5LIiAgLCAic2xvY2stQUZfUEFDS0VUIiAgICwKICAgInNsb2NrLUFGX0FTSCIgICAsICJzbG9jay1BRl9FQ09ORVQiICAgLCAic2xvY2stQUZfQVRNU1ZDIiAgICwKLSAgInNsb2NrLTIxIiAgICAgICAsICJzbG9jay1BRl9TTkEiICAgICAgLCAic2xvY2stQUZfSVJEQSIgICAgICwKKyAgInNsb2NrLUFGX1JEUyIgICAsICJzbG9jay1BRl9TTkEiICAgICAgLCAic2xvY2stQUZfSVJEQSIgICAgICwKICAgInNsb2NrLUFGX1BQUE9YIiAsICJzbG9jay1BRl9XQU5QSVBFIiAgLCAic2xvY2stQUZfTExDIiAgICAgICwKICAgInNsb2NrLTI3IiAgICAgICAsICJzbG9jay0yOCIgICAgICAgICAgLCAic2xvY2stQUZfQ0FOIiAgICAgICwKICAgInNsb2NrLUFGX1RJUEMiICAsICJzbG9jay1BRl9CTFVFVE9PVEgiLCAic2xvY2stQUZfSVVDViIgICAgICwKQEAgLTE3OSw3ICsxODAsNyBAQAogICAiY2xvY2stQUZfREVDbmV0IiwgImNsb2NrLUFGX05FVEJFVUkiICAsICJjbG9jay1BRl9TRUNVUklUWSIgLAogICAiY2xvY2stQUZfS0VZIiAgICwgImNsb2NrLUFGX05FVExJTksiICAsICJjbG9jay1BRl9QQUNLRVQiICAgLAogICAiY2xvY2stQUZfQVNIIiAgICwgImNsb2NrLUFGX0VDT05FVCIgICAsICJjbG9jay1BRl9BVE1TVkMiICAgLAotICAiY2xvY2stMjEiICAgICAgICwgImNsb2NrLUFGX1NOQSIgICAgICAsICJjbG9jay1BRl9JUkRBIiAgICAgLAorICAiY2xvY2stQUZfUkRTIiAgICwgImNsb2NrLUFGX1NOQSIgICAgICAsICJjbG9jay1BRl9JUkRBIiAgICAgLAogICAiY2xvY2stQUZfUFBQT1giICwgImNsb2NrLUFGX1dBTlBJUEUiICAsICJjbG9jay1BRl9MTEMiICAgICAgLAogICAiY2xvY2stMjciICAgICAgICwgImNsb2NrLTI4IiAgICAgICAgICAsICJjbG9jay1BRl9DQU4iICAgICAgLAogICAiY2xvY2stQUZfVElQQyIgICwgImNsb2NrLUFGX0JMVUVUT09USCIsICJjbG9jay1BRl9JVUNWIiAgICAgLApAQCAtMjU1LDExICsyNTYsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgc29ja19kaXNhYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKQogewotCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkgewotCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKTsKLQkJbmV0X2Rpc2FibGVfdGltZXN0YW1wKCk7CisJaWYgKHNvY2tfZmxhZyhzaywgZmxhZykpIHsKKwkJc29ja19yZXNldF9mbGFnKHNrLCBmbGFnKTsKKwkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSAmJgorCQkgICAgIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpKSB7CisJCQluZXRfZGlzYWJsZV90aW1lc3RhbXAoKTsKKwkJfQogCX0KIH0KIApAQCAtNjE0LDEzICs2MTgsMzggQEAKIAkJCWVsc2UKIAkJCQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKTsKIAkJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKTsKLQkJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAkJfSBlbHNlIHsKIAkJCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApOwogCQkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKTsKIAkJfQogCQlicmVhazsKIAorCWNhc2UgU09fVElNRVNUQU1QSU5HOgorCQlpZiAodmFsICYgflNPRl9USU1FU1RBTVBJTkdfTUFTSykgeworCQkJcmV0ID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFKTsKKwkJaWYgKHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpCisJCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssCisJCQkJCSAgICAgIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKTsKKwkJZWxzZQorCQkJc29ja19kaXNhYmxlX3RpbWVzdGFtcChzaywKKwkJCQkJICAgICAgIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSk7CisJCWJyZWFrOworCiAJY2FzZSBTT19SQ1ZMT1dBVDoKIAkJaWYgKHZhbCA8IDApCiAJCQl2YWwgPSBJTlRfTUFYOwpAQCAtNzY4LDYgKzc5NywyNCBAQAogCQl2LnZhbCA9IHNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCWJyZWFrOwogCisJY2FzZSBTT19USU1FU1RBTVBJTkc6CisJCXYudmFsID0gMDsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7CisJCWJyZWFrOworCiAJY2FzZSBTT19SQ1ZUSU1FTzoKIAkJbHY9c2l6ZW9mKHN0cnVjdCB0aW1ldmFsKTsKIAkJaWYgKHNrLT5za19yY3Z0aW1lbyA9PSBNQVhfU0NIRURVTEVfVElNRU9VVCkgewpAQCAtOTY5LDcgKzEwMTYsOCBAQAogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CiAJfQogCi0Jc29ja19kaXNhYmxlX3RpbWVzdGFtcChzayk7CisJc29ja19kaXNhYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOworCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKTsKIAogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX29tZW1fYWxsb2MpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9wdG1lbSBsZWFrYWdlICglZCBieXRlcykgZGV0ZWN0ZWQuXG4iLApAQCAtMTI1NSwxMCArMTMwMyw5IEBACiAgKglHZW5lcmljIHNlbmQvcmVjZWl2ZSBidWZmZXIgaGFuZGxlcnMKICAqLwogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNvY2tfYWxsb2Nfc2VuZF9wc2tiKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW4sCi0JCQkJCSAgICBpbnQgbm9ibG9jaywgaW50ICplcnJjb2RlKQorc3RydWN0IHNrX2J1ZmYgKnNvY2tfYWxsb2Nfc2VuZF9wc2tiKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBoZWFkZXJfbGVuLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2xlbiwgaW50IG5vYmxvY2ssCisJCQkJICAgICBpbnQgKmVycmNvZGUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlnZnBfdCBnZnBfbWFzazsKQEAgLTEzMzgsNiArMTM4NSw3IEBACiAJKmVycmNvZGUgPSBlcnI7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2Nfc2VuZF9wc2tiKTsKIAogc3RydWN0IHNrX2J1ZmYgKnNvY2tfYWxsb2Nfc2VuZF9za2Ioc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgIGludCBub2Jsb2NrLCBpbnQgKmVycmNvZGUpCkBAIC0xNzg2LDcgKzE4MzQsNyBAQAogewogCXN0cnVjdCB0aW1ldmFsIHR2OwogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXR2ID0ga3RpbWVfdG9fdGltZXZhbChzay0+c2tfc3RhbXApOwogCWlmICh0di50dl9zZWMgPT0gLTEpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTgwMiw3ICsxODUwLDcgQEAKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHMgPSBrdGltZV90b190aW1lc3BlYyhzay0+c2tfc3RhbXApOwogCWlmICh0cy50dl9zZWMgPT0gLTEpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTgxNCwxMSArMTg2MiwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChzb2NrX2dldF90aW1lc3RhbXBucyk7CiAKLXZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaykKK3ZvaWQgc29ja19lbmFibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpCiB7Ci0JaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkgewotCQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCk7Ci0JCW5ldF9lbmFibGVfdGltZXN0YW1wKCk7CisJaWYgKCFzb2NrX2ZsYWcoc2ssIGZsYWcpKSB7CisJCXNvY2tfc2V0X2ZsYWcoc2ssIGZsYWcpOworCQkvKgorCQkgKiB3ZSBqdXN0IHNldCBvbmUgb2YgdGhlIHR3byBmbGFncyB3aGljaCByZXF1aXJlIG5ldAorCQkgKiB0aW1lIHN0YW1waW5nLCBidXQgdGltZSBzdGFtcGluZyBtaWdodCBoYXZlIGJlZW4gb24KKwkJICogYWxyZWFkeSBiZWNhdXNlIG9mIHRoZSBvdGhlciBvbmUKKwkJICovCisJCWlmICghc29ja19mbGFnKHNrLAorCQkJCWZsYWcgPT0gU09DS19USU1FU1RBTVAgPworCQkJCVNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFIDoKKwkJCQlTT0NLX1RJTUVTVEFNUCkpCisJCQluZXRfZW5hYmxlX3RpbWVzdGFtcCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCA4M2QzMzk4Li43ZGIxZGUwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYworKysgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZXRfY29yZV90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvdXRpbHMuYyBiL25ldC9jb3JlL3V0aWxzLmMKaW5kZXggNzJlMGViZS4uODMyMjFhZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvdXRpbHMuYworKysgYi9uZXQvY29yZS91dGlscy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2Fja3ZlYy5oIGIvbmV0L2RjY3AvYWNrdmVjLmgKaW5kZXggNDVmOTVlNS4uN2VhNTU3YiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvYWNrdmVjLmgKKysrIGIvbmV0L2RjY3AvYWNrdmVjLmgKQEAgLTIwLDYgKzIwLDkgQEAKIC8qIFdlIGNhbiBzcHJlYWQgYW4gYWNrIHZlY3RvciBhY3Jvc3MgbXVsdGlwbGUgb3B0aW9ucyAqLwogI2RlZmluZSBEQ0NQX01BWF9BQ0tWRUNfTEVOIChEQ0NQX1NJTkdMRV9PUFRfTUFYTEVOICogMikKIAorLyogRXN0aW1hdGVkIG1pbmltdW0gYXZlcmFnZSBBY2sgVmVjdG9yIGxlbmd0aCAtIHVzZWQgZm9yIHVwZGF0aW5nIE1QUyAqLworI2RlZmluZSBEQ0NQQVZfTUlOX09QVExFTgkxNgorCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVECTAKICNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfRUNOX01BUktFRAkoMSA8PCA2KQogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9OT1RfUkVDRUlWRUQJKDMgPDwgNikKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RjY3AuaCBiL25ldC9kY2NwL2RjY3AuaAppbmRleCBmMjIzMGZjLi5kNmJjNDczIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9kY2NwLmgKKysrIGIvbmV0L2RjY3AvZGNjcC5oCkBAIC00Miw5ICs0MiwxMSBAQAogZXh0ZXJuIGludCBkY2NwX2RlYnVnOwogI2RlZmluZSBkY2NwX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikJICBEQ0NQX1BSX0RFQlVHKGRjY3BfZGVidWcsIGZvcm1hdCwgIyNhKQogI2RlZmluZSBkY2NwX3ByX2RlYnVnX2NhdChmb3JtYXQsIGEuLi4pICAgRENDUF9QUklOVEsoZGNjcF9kZWJ1ZywgZm9ybWF0LCAjI2EpCisjZGVmaW5lIGRjY3BfZGVidWcoZm10LCBhLi4uKQkJICBkY2NwX3ByX2RlYnVnX2NhdChLRVJOX0RFQlVHIGZtdCwgIyNhKQogI2Vsc2UKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pCiAjZGVmaW5lIGRjY3BfcHJfZGVidWdfY2F0KGZvcm1hdCwgYS4uLikKKyNkZWZpbmUgZGNjcF9kZWJ1Zyhmb3JtYXQsIGEuLi4pCiAjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBpbmV0X2hhc2hpbmZvIGRjY3BfaGFzaGluZm87CkBAIC02MSwxMSArNjMsMTQgQEAKICAqICAgIC0gRENDUC1SZXNldCAgICB3aXRoIEFDSyBTdWJoZWFkZXIgYW5kIDQgYnl0ZXMgb2YgUmVzZXQgQ29kZSBmaWVsZHMKICAqICBIZW5jZSBhIHNhZmUgdXBwZXIgYm91bmQgZm9yIHRoZSBtYXhpbXVtIG9wdGlvbiBsZW5ndGggaXMgMTAyMC0yOCA9IDk5MgogICovCi0jZGVmaW5lIE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiAoMjU1ICogc2l6ZW9mKGludCkpCisjZGVmaW5lIE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiAoMjU1ICogc2l6ZW9mKHVpbnQzMl90KSkKICNkZWZpbmUgRENDUF9NQVhfUEFDS0VUX0hEUiAyOAogI2RlZmluZSBEQ0NQX01BWF9PUFRfTEVOIChNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgLSBEQ0NQX01BWF9QQUNLRVRfSERSKQogI2RlZmluZSBNQVhfRENDUF9IRUFERVIgKE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiArIE1BWF9IRUFERVIpCiAKKy8qIFVwcGVyIGJvdW5kIGZvciBpbml0aWFsIGZlYXR1cmUtbmVnb3RpYXRpb24gb3ZlcmhlYWQgKHBhZGRlZCB0byAzMiBiaXRzKSAqLworI2RlZmluZSBEQ0NQX0ZFQVRORUdfT1ZFUkhFQUQJICgzMiAqIHNpemVvZih1aW50MzJfdCkpCisKICNkZWZpbmUgRENDUF9USU1FV0FJVF9MRU4gKDYwICogSFopIC8qIGhvdyBsb25nIHRvIHdhaXQgdG8gZGVzdHJveSBUSU1FLVdBSVQKIAkJCQkgICAgICogc3RhdGUsIGFib3V0IDYwIHNlY29uZHMgKi8KIApAQCAtOTUsOSArMTAwLDYgQEAKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllczsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3JldHJpZXMxOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmV0cmllczI7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdzsKLWV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZDsKLWV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX2ZlYXRfdHhfY2NpZDsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3R4X3FsZW47CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9zeW5jX3JhdGVsaW1pdDsKIApAQCAtNDA5LDIzICs0MTEsMjEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3VwZGF0ZV9nc3Ioc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JY29uc3Qgc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CiAKIAlkcC0+ZGNjcHNfZ3NyID0gc2VxOwotCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfc3dsLAotCQkgICAgICAgZHAtPmRjY3BzX2dzciArIDEgLSAoZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyAvIDQpKTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX3N3aCwKLQkJICAgICAgIGRwLT5kY2Nwc19nc3IgKyAoMyAqIGRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cpIC8gNCk7CisJLyogU2VxdWVuY2UgdmFsaWRpdHkgd2luZG93IGRlcGVuZHMgb24gcmVtb3RlIFNlcXVlbmNlIFdpbmRvdyAoNy41LjEpICovCisJZHAtPmRjY3BzX3N3bCA9IFNVQjQ4KEFERDQ4KGRwLT5kY2Nwc19nc3IsIDEpLCBkcC0+ZGNjcHNfcl9zZXFfd2luIC8gNCk7CisJZHAtPmRjY3BzX3N3aCA9IEFERDQ4KGRwLT5kY2Nwc19nc3IsICgzICogZHAtPmRjY3BzX3Jfc2VxX3dpbikgLyA0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRjY3BfdXBkYXRlX2dzcyhzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAotCWRwLT5kY2Nwc19hd2ggPSBkcC0+ZGNjcHNfZ3NzID0gc2VxOwotCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfYXdsLAotCQkgICAgICAgKGRwLT5kY2Nwc19nc3MgLQotCQkJZGNjcF9tc2soc2spLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ICsgMSkpOworCWRwLT5kY2Nwc19nc3MgPSBzZXE7CisJLyogQWNrIHZhbGlkaXR5IHdpbmRvdyBkZXBlbmRzIG9uIGxvY2FsIFNlcXVlbmNlIFdpbmRvdyB2YWx1ZSAoNy41LjEpICovCisJZHAtPmRjY3BzX2F3bCA9IFNVQjQ4KEFERDQ4KGRwLT5kY2Nwc19nc3MsIDEpLCBkcC0+ZGNjcHNfbF9zZXFfd2luKTsKKwlkcC0+ZGNjcHNfYXdoID0gZHAtPmRjY3BzX2dzczsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2tfcGVuZGluZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9mZWF0LmMgYi9uZXQvZGNjcC9mZWF0LmMKaW5kZXggNDE1MjMwOC4uYjA0MTYwYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZmVhdC5jCisrKyBiL25ldC9kY2NwL2ZlYXQuYwpAQCAtMjUsNiArMjUsMTEgQEAKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZmVhdC5oIgogCisvKiBmZWF0dXJlLXNwZWNpZmljIHN5c2N0bHMgLSBpbml0aWFsaXNlZCB0byB0aGUgZGVmYXVsdHMgZnJvbSBSRkMgNDM0MCwgNi40ICovCit1bnNpZ25lZCBsb25nCXN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdyBfX3JlYWRfbW9zdGx5ID0gMTAwOworaW50CQlzeXNjdGxfZGNjcF9yeF9jY2lkCSAgICBfX3JlYWRfbW9zdGx5ID0gMiwKKwkJc3lzY3RsX2RjY3BfdHhfY2NpZAkgICAgX19yZWFkX21vc3RseSA9IDI7CisKIC8qCiAgKiBGZWF0dXJlIGFjdGl2YXRpb24gaGFuZGxlcnMuCiAgKgpAQCAtNTEsOCArNTYsMTcgQEAKIAogc3RhdGljIGludCBkY2NwX2hkbHJfc2VxX3dpbihzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXFfd2luLCBib29sIHJ4KQogewotCWlmICghcngpCi0JCWRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyA9IHNlcV93aW47CisJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKworCWlmIChyeCkgeworCQlkcC0+ZGNjcHNfcl9zZXFfd2luID0gc2VxX3dpbjsKKwkJLyogcHJvcGFnYXRlIGNoYW5nZXMgdG8gdXBkYXRlIFNXTC9TV0ggKi8KKwkJZGNjcF91cGRhdGVfZ3NyKHNrLCBkcC0+ZGNjcHNfZ3NyKTsKKwl9IGVsc2UgeworCQlkcC0+ZGNjcHNfbF9zZXFfd2luID0gc2VxX3dpbjsKKwkJLyogcHJvcGFnYXRlIGNoYW5nZXMgdG8gdXBkYXRlIEFXTCAqLworCQlkY2NwX3VwZGF0ZV9nc3Moc2ssIGRwLT5kY2Nwc19nc3MpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0LDYgKzIwOCwxMDAgQEAKIAlyZXR1cm4gaWR4IDwgMCA/IDAgOiBkY2NwX2ZlYXRfdGFibGVbaWR4XS5kZWZhdWx0X3ZhbHVlOwogfQogCisvKgorICoJRGVidWdnaW5nIGFuZCB2ZXJib3NlLXByaW50aW5nIHNlY3Rpb24KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9mbmFtZShjb25zdCB1OCBmZWF0KQoreworCXN0YXRpYyBjb25zdCBjaGFyICpmZWF0dXJlX25hbWVzW10gPSB7CisJCVtEQ0NQRl9SRVNFUlZFRF0JPSAiUmVzZXJ2ZWQiLAorCQlbRENDUEZfQ0NJRF0JCT0gIkNDSUQiLAorCQlbRENDUEZfU0hPUlRfU0VRTk9TXQk9ICJBbGxvdyBTaG9ydCBTZXFub3MiLAorCQlbRENDUEZfU0VRVUVOQ0VfV0lORE9XXQk9ICJTZXF1ZW5jZSBXaW5kb3ciLAorCQlbRENDUEZfRUNOX0lOQ0FQQUJMRV0JPSAiRUNOIEluY2FwYWJsZSIsCisJCVtEQ0NQRl9BQ0tfUkFUSU9dCT0gIkFjayBSYXRpbyIsCisJCVtEQ0NQRl9TRU5EX0FDS19WRUNUT1JdCT0gIlNlbmQgQUNLIFZlY3RvciIsCisJCVtEQ0NQRl9TRU5EX05EUF9DT1VOVF0JPSAiU2VuZCBORFAgQ291bnQiLAorCQlbRENDUEZfTUlOX0NTVU1fQ09WRVJdCT0gIk1pbi4gQ3N1bSBDb3ZlcmFnZSIsCisJCVtEQ0NQRl9EQVRBX0NIRUNLU1VNXQk9ICJTZW5kIERhdGEgQ2hlY2tzdW0iLAorCX07CisJaWYgKGZlYXQgPiBEQ0NQRl9EQVRBX0NIRUNLU1VNICYmIGZlYXQgPCBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKKwkJcmV0dXJuIGZlYXR1cmVfbmFtZXNbRENDUEZfUkVTRVJWRURdOworCisJaWYgKGZlYXQgPT0gIERDQ1BGX1NFTkRfTEVWX1JBVEUpCisJCXJldHVybiAiU2VuZCBMb3NzIEV2ZW50IFJhdGUiOworCWlmIChmZWF0ID49IERDQ1BGX01JTl9DQ0lEX1NQRUNJRklDKQorCQlyZXR1cm4gIkNDSUQtc3BlY2lmaWMiOworCisJcmV0dXJuIGZlYXR1cmVfbmFtZXNbZmVhdF07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfc25hbWVbXSA9IHsgIkRFRkFVTFQiLCAiSU5JVElBTElTSU5HIiwgIkNIQU5HSU5HIiwKKwkJCQkJICJVTlNUQUJMRSIsICJTVEFCTEUiIH07CisKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRworc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9vbmFtZShjb25zdCB1OCBvcHQpCit7CisJc3dpdGNoIChvcHQpIHsKKwljYXNlIERDQ1BPX0NIQU5HRV9MOiAgcmV0dXJuICJDaGFuZ2VfTCI7CisJY2FzZSBEQ0NQT19DT05GSVJNX0w6IHJldHVybiAiQ29uZmlybV9MIjsKKwljYXNlIERDQ1BPX0NIQU5HRV9SOiAgcmV0dXJuICJDaGFuZ2VfUiI7CisJY2FzZSBEQ0NQT19DT05GSVJNX1I6IHJldHVybiAiQ29uZmlybV9SIjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfZmVhdF9wcmludHZhbCh1OCBmZWF0X251bSwgZGNjcF9mZWF0X3ZhbCBjb25zdCAqdmFsKQoreworCXU4IGksIHR5cGUgPSBkY2NwX2ZlYXRfdHlwZShmZWF0X251bSk7CisKKwlpZiAodmFsID09IE5VTEwgfHwgKHR5cGUgPT0gRkVBVF9TUCAmJiB2YWwtPnNwLnZlYyA9PSBOVUxMKSkKKwkJZGNjcF9wcl9kZWJ1Z19jYXQoIihOVUxMKSIpOworCWVsc2UgaWYgKHR5cGUgPT0gRkVBVF9TUCkKKwkJZm9yIChpID0gMDsgaSA8IHZhbC0+c3AubGVuOyBpKyspCisJCQlkY2NwX3ByX2RlYnVnX2NhdCgiJXMldSIsIGkgPyAiICIgOiAiIiwgdmFsLT5zcC52ZWNbaV0pOworCWVsc2UgaWYgKHR5cGUgPT0gRkVBVF9OTikKKwkJZGNjcF9wcl9kZWJ1Z19jYXQoIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbC0+bm4pOworCWVsc2UKKwkJZGNjcF9wcl9kZWJ1Z19jYXQoInVua25vd24gdHlwZSAldSIsIHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfcHJpbnR2YWxzKHU4IGZlYXRfbnVtLCB1OCAqbGlzdCwgdTggbGVuKQoreworCXU4IHR5cGUgPSBkY2NwX2ZlYXRfdHlwZShmZWF0X251bSk7CisJZGNjcF9mZWF0X3ZhbCBmdmFsID0geyAuc3AudmVjID0gbGlzdCwgLnNwLmxlbiA9IGxlbiB9OworCisJaWYgKHR5cGUgPT0gRkVBVF9OTikKKwkJZnZhbC5ubiA9IGRjY3BfZGVjb2RlX3ZhbHVlX3ZhcihsaXN0LCBsZW4pOworCWRjY3BfZmVhdF9wcmludHZhbChmZWF0X251bSwgJmZ2YWwpOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfcHJpbnRfZW50cnkoc3RydWN0IGRjY3BfZmVhdF9lbnRyeSBjb25zdCAqZW50cnkpCit7CisJZGNjcF9kZWJ1ZygiICAgKiAlcyAlcyA9ICIsIGVudHJ5LT5pc19sb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKKwkJCQkgICAgZGNjcF9mZWF0X2ZuYW1lKGVudHJ5LT5mZWF0X251bSkpOworCWRjY3BfZmVhdF9wcmludHZhbChlbnRyeS0+ZmVhdF9udW0sICZlbnRyeS0+dmFsKTsKKwlkY2NwX3ByX2RlYnVnX2NhdCgiLCBzdGF0ZT0lcyAlc1xuIiwgZGNjcF9mZWF0X3NuYW1lW2VudHJ5LT5zdGF0ZV0sCisJCQkgIGVudHJ5LT5uZWVkc19jb25maXJtID8gIihDb25maXJtIHBlbmRpbmcpIiA6ICIiKTsKK30KKworI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIG1hbmRhdG9yeSkJZG8gewkgICAgICBcCisJZGNjcF9wcl9kZWJ1ZygiJXMoJXMsICIsIGRjY3BfZmVhdF9vbmFtZShvcHQpLCBkY2NwX2ZlYXRfZm5hbWUoZmVhdCkpO1wKKwlkY2NwX2ZlYXRfcHJpbnR2YWxzKGZlYXQsIHZhbCwgbGVuKTsJCQkJICAgICAgXAorCWRjY3BfcHJfZGVidWdfY2F0KCIpICVzXG4iLCBtYW5kYXRvcnkgPyAiISIgOiAiIik7CX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbl9saXN0KSAgewkJXAorCWNvbnN0IHN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgKl9fX2VudHJ5OwkJXAorCQkJCQkJCVwKKwlkY2NwX3ByX2RlYnVnKCJMaXN0IER1bXA6XG4iKTsJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShfX19lbnRyeSwgZm5fbGlzdCwgbm9kZSkJXAorCQlkY2NwX2ZlYXRfcHJpbnRfZW50cnkoX19fZW50cnkpOwlcCit9CisjZWxzZQkvKiAhIENPTkZJR19JUF9EQ0NQX0RFQlVHICovCisjZGVmaW5lIGRjY3BfZmVhdF9wcmludF9vcHQob3B0LCBmZWF0LCB2YWwsIGxlbiwgbWFuZGF0b3J5KQorI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfZm5saXN0KGZuX2xpc3QpCisjZW5kaWYKKwogc3RhdGljIGludCBfX2RjY3BfZmVhdF9hY3RpdmF0ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBpZHgsCiAJCQkJY29uc3QgYm9vbCBpc19sb2NhbCwgZGNjcF9mZWF0X3ZhbCBjb25zdCAqZnZhbCkKIHsKQEAgLTIyNiw2ICszMzQsMTAgQEAKIAkvKiBMb2NhdGlvbiBpcyBSWCBpZiB0aGlzIGlzIGEgbG9jYWwtUlggb3IgcmVtb3RlLVRYIGZlYXR1cmUgKi8KIAlyeCA9IChpc19sb2NhbCA9PSAoZGNjcF9mZWF0X3RhYmxlW2lkeF0ucnh0eCA9PSBGRUFUX0FUX1JYKSk7CiAKKwlkY2NwX2RlYnVnKCIgICAtPiBhY3RpdmF0aW5nICVzICVzLCAlc3ZhbD0lbGx1XG4iLCByeCA/ICJSWCIgOiAiVFgiLAorCQkgICBkY2NwX2ZlYXRfZm5hbWUoZGNjcF9mZWF0X3RhYmxlW2lkeF0uZmVhdF9udW0pLAorCQkgICBmdmFsID8gIiIgOiAiZGVmYXVsdCAiLCAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwpOworCiAJcmV0dXJuIGRjY3BfZmVhdF90YWJsZVtpZHhdLmFjdGl2YXRpb25faGRscihzaywgdmFsLCByeCk7CiB9CiAKQEAgLTUzMCw2ICs2NDIsNyBAQAogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfQorCQlkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgcG9zLT5mZWF0X251bSwgcHRyLCBsZW4sIDApOwogCiAJCWlmIChkY2NwX2luc2VydF9mbl9vcHQoc2tiLCBvcHQsIHBvcy0+ZmVhdF9udW0sIHB0ciwgbGVuLCBycHQpKQogCQkJcmV0dXJuIC0xOwpAQCAtNzgzLDYgKzg5Niw3IEBACiAJd2hpbGUgKGktLSkKIAkJaWYgKGNjaWRzW2ldID4gMCAmJiBkY2NwX2ZlYXRfcHJvcGFnYXRlX2NjaWQoZm4sIGNjaWRzW2ldLCBpKSkKIAkJCXJldHVybiAtMTsKKwlkY2NwX2ZlYXRfcHJpbnRfZm5saXN0KGZuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTAxLDYgKzEwMTUsOCBAQAogCWlmIChsZW4gPT0gMCB8fCB0eXBlID09IEZFQVRfVU5LTk9XTikJCS8qIDYuMSBhbmQgNi42LjggKi8KIAkJZ290byB1bmtub3duX2ZlYXR1cmVfb3JfdmFsdWU7CiAKKwlkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIGlzX21hbmRhdG9yeSk7CisKIAkvKgogCSAqCU5lZ290aWF0aW9uIG9mIE5OIGZlYXR1cmVzOiBDaGFuZ2UgUiBpcyBpbnZhbGlkLCBzbyB0aGVyZSBpcyBubwogCSAqCXNpbXVsdGFuZW91cyBuZWdvdGlhdGlvbjsgaGVuY2Ugd2UgZG8gbm90IGxvb2sgdXAgaW4gdGhlIGxpc3QuCkBAIC0xMDA2LDYgKzExMjIsOCBAQAogCWNvbnN0IGJvb2wgbG9jYWwgPSAob3B0ID09IERDQ1BPX0NPTkZJUk1fUik7CiAJc3RydWN0IGRjY3BfZmVhdF9lbnRyeSAqZW50cnkgPSBkY2NwX2ZlYXRfbGlzdF9sb29rdXAoZm4sIGZlYXQsIGxvY2FsKTsKIAorCWRjY3BfZmVhdF9wcmludF9vcHQob3B0LCBmZWF0LCB2YWwsIGxlbiwgaXNfbWFuZGF0b3J5KTsKKwogCWlmIChlbnRyeSA9PSBOVUxMKSB7CS8qIG5vdGhpbmcgcXVldWVkOiBpZ25vcmUgb3IgaGFuZGxlIGVycm9yICovCiAJCWlmIChpc19tYW5kYXRvcnkgJiYgdHlwZSA9PSBGRUFUX1VOS05PV04pCiAJCQlyZXR1cm4gRENDUF9SRVNFVF9DT0RFX01BTkRBVE9SWV9FUlJPUjsKQEAgLTExMTUsMjMgKzEyMzMsNzAgQEAKIAlyZXR1cm4gMDsJLyogaWdub3JlIEZOIG9wdGlvbnMgaW4gYWxsIG90aGVyIHN0YXRlcyAqLwogfQogCisvKioKKyAqIGRjY3BfZmVhdF9pbml0ICAtICBTZWVkIGZlYXR1cmUgbmVnb3RpYXRpb24gd2l0aCBob3N0LXNwZWNpZmljIGRlZmF1bHRzCisgKiBUaGlzIGluaXRpYWxpc2VzIGdsb2JhbCBkZWZhdWx0cywgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUgc3lzY3Rscy4KKyAqIFRoZXNlIGNhbiBsYXRlciBiZSBvdmVycmlkZGVuIGJ5IHJlZ2lzdGVyaW5nIGNoYW5nZXMgdmlhIHNldHNvY2tvcHQgY2FsbHMuCisgKiBUaGUgbGFzdCBsaW5rIGluIHRoZSBjaGFpbiBpcyBmaW5hbGlzZV9zZXR0aW5ncywgdG8gbWFrZSBzdXJlIHRoYXQgYmV0d2VlbgorICogaGVyZSBhbmQgdGhlIHN0YXJ0IG9mIGFjdHVhbCBmZWF0dXJlIG5lZ290aWF0aW9uIG5vIGluY29uc2lzdGVuY2llcyBlbnRlci4KKyAqCisgKiBBbGwgZmVhdHVyZXMgbm90IGFwcGVhcmluZyBiZWxvdyB1c2UgZWl0aGVyIGRlZmF1bHRzIG9yIGFyZSBvdGhlcndpc2UKKyAqIGxhdGVyIGFkanVzdGVkIHRocm91Z2ggZGNjcF9mZWF0X2ZpbmFsaXNlX3NldHRpbmdzKCkuCisgKi8KIGludCBkY2NwX2ZlYXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLQlzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayA9IGRjY3BfbXNrKHNrKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpmbiA9ICZkY2NwX3NrKHNrKS0+ZGNjcHNfZmVhdG5lZzsKKwl1OCBvbiA9IDEsIG9mZiA9IDA7CiAJaW50IHJjOworCXN0cnVjdCB7CisJCXU4ICp2YWw7CisJCXU4IGxlbjsKKwl9IHR4LCByeDsKIAotCUlOSVRfTElTVF9IRUFEKCZkbXNrLT5kY2NwbXNfcGVuZGluZyk7CS8qIFhYWCBubyBsb25nZXIgdXNlZCAqLwotCUlOSVRfTElTVF9IRUFEKCZkbXNrLT5kY2NwbXNfY29uZik7CS8qIFhYWCBubyBsb25nZXIgdXNlZCAqLworCS8qIE5vbi1uZWdvdGlhYmxlIChOTikgZmVhdHVyZXMgKi8KKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9ubihmbiwgRENDUEZfU0VRVUVOQ0VfV0lORE9XLCAwLAorCQkJCSAgICBzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3cpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JLyogQWNrIHJhdGlvICovCi0JcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfbm4oJmRwLT5kY2Nwc19mZWF0bmVnLCBEQ0NQRl9BQ0tfUkFUSU8sIDAsCi0JCQkJZHAtPmRjY3BzX2xfYWNrX3JhdGlvKTsKKwkvKiBTZXJ2ZXItcHJpb3JpdHkgKFNQKSBmZWF0dXJlcyAqLworCisJLyogQWR2ZXJ0aXNlIHRoYXQgc2hvcnQgc2Vxbm9zIGFyZSBub3Qgc3VwcG9ydGVkICg3LjYuMSkgKi8KKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfU0hPUlRfU0VRTk9TLCB0cnVlLCB0cnVlLCAmb2ZmLCAxKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIFJGQyA0MzQwIDEyLjE6ICJJZiBhIERDQ1AgaXMgbm90IEVDTiBjYXBhYmxlLCAuLi4iICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX0VDTl9JTkNBUEFCTEUsIHRydWUsIHRydWUsICZvbiwgMSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIFdlIGFkdmVydGlzZSB0aGUgYXZhaWxhYmxlIGxpc3Qgb2YgQ0NJRHMgYW5kIHJlb3JkZXIgYWNjb3JkaW5nIHRvCisJICogcHJlZmVyZW5jZXMsIHRvIGF2b2lkIGZhaWx1cmUgcmVzdWx0aW5nIGZyb20gbmVnb3RpYXRpbmcgZGlmZmVyZW50CisJICogc2luZ2xldG9uIHZhbHVlcyAod2hpY2ggYWx3YXlzIGxlYWRzIHRvIGZhaWx1cmUpLgorCSAqIFRoZXNlIHNldHRpbmdzIGNhbiBzdGlsbCAobGF0ZXIpIGJlIG92ZXJyaWRkZW4gdmlhIHNvY2tvcHRzLgorCSAqLworCWlmIChjY2lkX2dldF9idWlsdGluX2NjaWRzKCZ0eC52YWwsICZ0eC5sZW4pIHx8CisJICAgIGNjaWRfZ2V0X2J1aWx0aW5fY2NpZHMoJnJ4LnZhbCwgJnJ4LmxlbikpCisJCXJldHVybiAtRU5PQlVGUzsKKworCWlmICghZGNjcF9mZWF0X3ByZWZlcihzeXNjdGxfZGNjcF90eF9jY2lkLCB0eC52YWwsIHR4LmxlbikgfHwKKwkgICAgIWRjY3BfZmVhdF9wcmVmZXIoc3lzY3RsX2RjY3BfcnhfY2NpZCwgcngudmFsLCByeC5sZW4pKQorCQlnb3RvIGZyZWVfY2NpZF9saXN0czsKKworCXJjID0gX19mZWF0X3JlZ2lzdGVyX3NwKGZuLCBEQ0NQRl9DQ0lELCB0cnVlLCBmYWxzZSwgdHgudmFsLCB0eC5sZW4pOworCWlmIChyYykKKwkJZ290byBmcmVlX2NjaWRfbGlzdHM7CisKKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfQ0NJRCwgZmFsc2UsIGZhbHNlLCByeC52YWwsIHJ4Lmxlbik7CisKK2ZyZWVfY2NpZF9saXN0czoKKwlrZnJlZSh0eC52YWwpOworCWtmcmVlKHJ4LnZhbCk7CiAJcmV0dXJuIHJjOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChkY2NwX2ZlYXRfaW5pdCk7Ci0KIGludCBkY2NwX2ZlYXRfYWN0aXZhdGVfdmFsdWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqZm5fbGlzdCkKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwpAQCAtMTE1Niw5ICsxMzIxLDEwIEBACiAJCQlnb3RvIGFjdGl2YXRpb25fZmFpbGVkOwogCQl9CiAJCWlmIChjdXItPnN0YXRlICE9IEZFQVRfU1RBQkxFKSB7Ci0JCQlEQ0NQX0NSSVQoIk5lZ290aWF0aW9uIG9mICVzICV1IGZhaWxlZCBpbiBzdGF0ZSAldSIsCisJCQlEQ0NQX0NSSVQoIk5lZ290aWF0aW9uIG9mICVzICVzIGZhaWxlZCBpbiBzdGF0ZSAlcyIsCiAJCQkJICBjdXItPmlzX2xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotCQkJCSAgY3VyLT5mZWF0X251bSwgY3VyLT5zdGF0ZSk7CisJCQkJICBkY2NwX2ZlYXRfZm5hbWUoY3VyLT5mZWF0X251bSksCisJCQkJICBkY2NwX2ZlYXRfc25hbWVbY3VyLT5zdGF0ZV0pOwogCQkJZ290byBhY3RpdmF0aW9uX2ZhaWxlZDsKIAkJfQogCQlmdmFsc1tpZHhdW2N1ci0+aXNfbG9jYWxdID0gJmN1ci0+dmFsOwpAQCAtMTE5OSw0MyArMTM2NSwzIEBACiAJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IE5VTEw7CiAJcmV0dXJuIC0xOwogfQotCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLWNvbnN0IGNoYXIgKmRjY3BfZmVhdF90eXBlbmFtZShjb25zdCB1OCB0eXBlKQotewotCXN3aXRjaCh0eXBlKSB7Ci0JY2FzZSBEQ0NQT19DSEFOR0VfTDogIHJldHVybigiQ2hhbmdlTCIpOwotCWNhc2UgRENDUE9fQ09ORklSTV9MOiByZXR1cm4oIkNvbmZpcm1MIik7Ci0JY2FzZSBEQ0NQT19DSEFOR0VfUjogIHJldHVybigiQ2hhbmdlUiIpOwotCWNhc2UgRENDUE9fQ09ORklSTV9SOiByZXR1cm4oIkNvbmZpcm1SIik7Ci0JLyogdGhlIGZvbGxvd2luZyBjYXNlIG11c3Qgbm90IGFwcGVhciBpbiBmZWF0dXJlIG5lZ290YXRpb24gICovCi0JZGVmYXVsdDoJICAgICAgZGNjcF9wcl9kZWJ1ZygidW5rbm93biB0eXBlICVkIFtCVUchXVxuIiwgdHlwZSk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1jb25zdCBjaGFyICpkY2NwX2ZlYXRfbmFtZShjb25zdCB1OCBmZWF0KQotewotCXN0YXRpYyBjb25zdCBjaGFyICpmZWF0dXJlX25hbWVzW10gPSB7Ci0JCVtEQ0NQRl9SRVNFUlZFRF0JPSAiUmVzZXJ2ZWQiLAotCQlbRENDUEZfQ0NJRF0JCT0gIkNDSUQiLAotCQlbRENDUEZfU0hPUlRfU0VRTk9TXQk9ICJBbGxvdyBTaG9ydCBTZXFub3MiLAotCQlbRENDUEZfU0VRVUVOQ0VfV0lORE9XXQk9ICJTZXF1ZW5jZSBXaW5kb3ciLAotCQlbRENDUEZfRUNOX0lOQ0FQQUJMRV0JPSAiRUNOIEluY2FwYWJsZSIsCi0JCVtEQ0NQRl9BQ0tfUkFUSU9dCT0gIkFjayBSYXRpbyIsCi0JCVtEQ0NQRl9TRU5EX0FDS19WRUNUT1JdCT0gIlNlbmQgQUNLIFZlY3RvciIsCi0JCVtEQ0NQRl9TRU5EX05EUF9DT1VOVF0JPSAiU2VuZCBORFAgQ291bnQiLAotCQlbRENDUEZfTUlOX0NTVU1fQ09WRVJdCT0gIk1pbi4gQ3N1bSBDb3ZlcmFnZSIsCi0JCVtEQ0NQRl9EQVRBX0NIRUNLU1VNXQk9ICJTZW5kIERhdGEgQ2hlY2tzdW0iLAotCX07Ci0JaWYgKGZlYXQgPiBEQ0NQRl9EQVRBX0NIRUNLU1VNICYmIGZlYXQgPCBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKLQkJcmV0dXJuIGZlYXR1cmVfbmFtZXNbRENDUEZfUkVTRVJWRURdOwotCi0JaWYgKGZlYXQgPT0gIERDQ1BGX1NFTkRfTEVWX1JBVEUpCi0JCXJldHVybiAiU2VuZCBMb3NzIEV2ZW50IFJhdGUiOwotCWlmIChmZWF0ID49IERDQ1BGX01JTl9DQ0lEX1NQRUNJRklDKQotCQlyZXR1cm4gIkNDSUQtc3BlY2lmaWMiOwotCi0JcmV0dXJuIGZlYXR1cmVfbmFtZXNbZmVhdF07Ci19Ci0jZW5kaWYgLyogQ09ORklHX0lQX0RDQ1BfREVCVUcgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuaCBiL25ldC9kY2NwL2ZlYXQuaAppbmRleCA5YjQ2ZTJhLi5mOTY3MjE2IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9mZWF0LmgKKysrIGIvbmV0L2RjY3AvZmVhdC5oCkBAIC0xMDAsMjYgKzEwMCwyMSBAQAogCXU4CXZhbDsKIH07CiAKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotZXh0ZXJuIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF90eXBlbmFtZShjb25zdCB1OCB0eXBlKTsKLWV4dGVybiBjb25zdCBjaGFyICpkY2NwX2ZlYXRfbmFtZShjb25zdCB1OCBmZWF0KTsKKy8qCisgKiBTeXNjdGxzIHRvIHNlZWQgZGVmYXVsdHMgZm9yIGZlYXR1cmUgbmVnb3RpYXRpb24KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93OworZXh0ZXJuIGludAkgICAgIHN5c2N0bF9kY2NwX3J4X2NjaWQ7CitleHRlcm4gaW50CSAgICAgc3lzY3RsX2RjY3BfdHhfY2NpZDsKIAotc3RhdGljIGlubGluZSB2b2lkIGRjY3BfZmVhdF9kZWJ1Zyhjb25zdCB1OCB0eXBlLCBjb25zdCB1OCBmZWF0LCBjb25zdCB1OCB2YWwpCi17Ci0JZGNjcF9wcl9kZWJ1ZygiJXMoJXMgKCVkKSwgJWQpXG4iLCBkY2NwX2ZlYXRfdHlwZW5hbWUodHlwZSksCi0JCQkJCSAgIGRjY3BfZmVhdF9uYW1lKGZlYXQpLCBmZWF0LCB2YWwpOwotfQotI2Vsc2UKLSNkZWZpbmUgZGNjcF9mZWF0X2RlYnVnKHR5cGUsIGZlYXQsIHZhbCkKLSNlbmRpZiAvKiBDT05GSUdfSVBfRENDUF9ERUJVRyAqLwotCitleHRlcm4gaW50ICBkY2NwX2ZlYXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgZGNjcF9mZWF0X2luaXRpYWxpc2Vfc3lzY3Rscyh2b2lkKTsKIGV4dGVybiBpbnQgIGRjY3BfZmVhdF9yZWdpc3Rlcl9zcChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZlYXQsIHU4IGlzX2xvY2FsLAogCQkJCSAgdTggY29uc3QgKmxpc3QsIHU4IGxlbik7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcmVnaXN0ZXJfbm4oc3RydWN0IHNvY2sgKnNrLCB1OCBmZWF0LCB1NjQgdmFsKTsKIGV4dGVybiBpbnQgIGRjY3BfZmVhdF9wYXJzZV9vcHRpb25zKHN0cnVjdCBzb2NrICosIHN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqLAogCQkJCSAgICB1OCBtYW5kLCB1OCBvcHQsIHU4IGZlYXQsIHU4ICp2YWwsIHU4IGxlbik7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfY2xvbmVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkIGNvbnN0ICosIHN0cnVjdCBsaXN0X2hlYWQgKik7Ci1leHRlcm4gaW50ICBkY2NwX2ZlYXRfaW5pdChzdHJ1Y3Qgc29jayAqc2spOwogCiAvKgogICogRW5jb2RpbmcgdmFyaWFibGUtbGVuZ3RoIG9wdGlvbnMgYW5kIHRoZWlyIG1heGltdW0gbGVuZ3RoLgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCA2ODIxYWUzLi41Y2E0OWNlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtNDIsMTEgKzQyLDYgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9kZWF0aF9yb3cpOwogCi12b2lkIGRjY3BfbWluaXNvY2tfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zaykKLXsKLQlkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ID0gc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7Ci19Ci0KIHZvaWQgZGNjcF90aW1lX3dhaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUsIGludCB0aW1lbykKIHsKIAlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IE5VTEw7CkBAIC0xMTAsNyArMTA1LDYgQEAKIAkJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxID0gZGNjcF9yc2socmVxKTsKIAkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrID0gaW5ldF9jc2sobmV3c2spOwogCQlzdHJ1Y3QgZGNjcF9zb2NrICpuZXdkcCA9IGRjY3Bfc2sobmV3c2spOwotCQlzdHJ1Y3QgZGNjcF9taW5pc29jayAqbmV3ZG1zayA9IGRjY3BfbXNrKG5ld3NrKTsKIAogCQluZXdkcC0+ZGNjcHNfcm9sZQkgICAgPSBEQ0NQX1JPTEVfU0VSVkVSOwogCQluZXdkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjICAgPSBOVUxMOwpAQCAtMTI4LDEwICsxMjIsNiBAQAogCQkgKiAgICBJbml0aWFsaXplIFMuR0FSIDo9IFMuSVNTCiAJCSAqICAgIFNldCBTLklTUiwgUy5HU1IsIFMuU1dMLCBTLlNXSCBmcm9tIHBhY2tldCBvciBJbml0IENvb2tpZXMKIAkJICovCi0KLQkJLyogU2VlIGRjY3BfdjRfY29ubl9yZXF1ZXN0ICovCi0JCW5ld2Rtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSByZXEtPnJjdl93bmQ7Ci0KIAkJbmV3ZHAtPmRjY3BzX2dhciA9IG5ld2RwLT5kY2Nwc19pc3MgPSBkcmVxLT5kcmVxX2lzczsKIAkJZGNjcF91cGRhdGVfZ3NzKG5ld3NrLCBkcmVxLT5kcmVxX2lzcyk7CiAKQEAgLTI5MCw3ICsyODAsNiBAQAogCWluZXRfcnNrKHJlcSktPnJtdF9wb3J0CSAgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydDsKIAlpbmV0X3JzayhyZXEpLT5sb2NfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQ7CiAJaW5ldF9yc2socmVxKS0+YWNrZWQJICA9IDA7Ci0JcmVxLT5yY3Zfd25kCQkgID0gc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7CiAJZHJlcS0+ZHJlcV90aW1lc3RhbXBfZWNobyA9IDA7CiAKIAkvKiBpbmhlcml0IGZlYXR1cmUgbmVnb3RpYXRpb24gb3B0aW9ucyBmcm9tIGxpc3RlbmluZyBzb2NrZXQgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCA3YjExNjVjLi4xYjA4Y2FlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC0yMywxMCArMjMsNiBAQAogI2luY2x1ZGUgImRjY3AuaCIKICNpbmNsdWRlICJmZWF0LmgiCiAKLWludCBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdyA9IERDQ1BGX0lOSVRJQUxfU0VRVUVOQ0VfV0lORE9XOwotaW50IHN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZAkgICAgICA9IERDQ1BGX0lOSVRJQUxfQ0NJRDsKLWludCBzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQJICAgICAgPSBEQ0NQRl9JTklUSUFMX0NDSUQ7Ci0KIHU2NCBkY2NwX2RlY29kZV92YWx1ZV92YXIoY29uc3QgdTggKmJmLCBjb25zdCB1OCBsZW4pCiB7CiAJdTY0IHZhbHVlID0gMDsKQEAgLTUwMiwxMCArNDk4LDYgQEAKIAkJKnRvKysgPSAqdmFsOwogCWlmIChsZW4pCiAJCW1lbWNweSh0bywgdmFsLCBsZW4pOwotCi0JZGNjcF9wcl9kZWJ1ZygiJXMoJXMgKCVkKSwgLi4uKSwgbGVuZ3RoICVkXG4iLAotCQkgICAgICBkY2NwX2ZlYXRfdHlwZW5hbWUodHlwZSksCi0JCSAgICAgIGRjY3BfZmVhdF9uYW1lKGZlYXQpLCBmZWF0LCBsZW4pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vdXRwdXQuYyBiL25ldC9kY2NwL291dHB1dC5jCmluZGV4IDIyYTYxOGEuLjM2YmNjMDAgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0xNjEsMjEgKzE2MSwyNyBAQAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXUzMiBjY21wcyA9IGRjY3BfZGV0ZXJtaW5lX2NjbXBzKGRwKTsKLQlpbnQgY3VyX21wcyA9IGNjbXBzID8gbWluKHBtdHUsIGNjbXBzKSA6IHBtdHU7CisJdTMyIGN1cl9tcHMgPSBjY21wcyA/IG1pbihwbXR1LCBjY21wcykgOiBwbXR1OwogCiAJLyogQWNjb3VudCBmb3IgaGVhZGVyIGxlbmd0aHMgYW5kIElQdjQvdjYgb3B0aW9uIG92ZXJoZWFkICovCiAJY3VyX21wcyAtPSAoaWNzay0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuICsgaWNzay0+aWNza19leHRfaGRyX2xlbiArCiAJCSAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSArIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSk7CiAKIAkvKgotCSAqIEZJWE1FOiB0aGlzIHNob3VsZCBjb21lIGZyb20gdGhlIENDSUQgaW5mcmFzdHJ1Y3R1cmUsIHdoZXJlLCBzYXksCi0JICogVEZSQyB3aWxsIHNheSBpdCB3YW50cyBUSU1FU1RBTVBTLCBFTEFQU0VEIHRpbWUsIGV0YywgZm9yIG5vdyBsZXRzCi0JICogcHV0IGEgcm91Z2ggZXN0aW1hdGUgZm9yIE5EUCArIFRJTUVTVEFNUCArIFRJTUVTVEFNUF9FQ0hPICsgRUxBUFNFRAotCSAqIFRJTUUgKyBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEUgKyBURlJDX09QVF9SRUNFSVZFX1JBVEUgKyBwYWRkaW5nIHRvCi0JICogbWFrZSBpdCBhIG11bHRpcGxlIG9mIDQKKwkgKiBMZWF2ZSBlbm91Z2ggaGVhZHJvb20gZm9yIGNvbW1vbiBEQ0NQIGhlYWRlciBvcHRpb25zLgorCSAqIFRoaXMgb25seSBjb25zaWRlcnMgb3B0aW9ucyB3aGljaCBtYXkgYXBwZWFyIG9uIERDQ1AtRGF0YSBwYWNrZXRzLCBhcworCSAqIHBlciB0YWJsZSAzIGluIFJGQyA0MzQwLCA1LjguIFdoZW4gcnVubmluZyBvdXQgb2Ygc3BhY2UgZm9yIG90aGVyCisJICogb3B0aW9ucyAoZWcuIEFjayBWZWN0b3Igd2hpY2ggY2FuIHRha2UgdXAgdG8gMjU1IGJ5dGVzKSwgaXQgaXMgYmV0dGVyCisJICogdG8gc2NoZWR1bGUgYSBzZXBhcmF0ZSBBY2suIFRodXMgd2UgbGVhdmUgaGVhZHJvb20gZm9yIHRoZSBmb2xsb3dpbmc6CisJICogIC0gMSBieXRlIGZvciBTbG93IFJlY2VpdmVyICgxMS42KQorCSAqICAtIDYgYnl0ZXMgZm9yIFRpbWVzdGFtcCAoMTMuMSkKKwkgKiAgLSAxMCBieXRlcyBmb3IgVGltZXN0YW1wIEVjaG8gKDEzLjMpCisJICogIC0gOCBieXRlcyBmb3IgTkRQIGNvdW50ICg3LjcsIHdoZW4gYWN0aXZhdGVkKQorCSAqICAtIDYgYnl0ZXMgZm9yIERhdGEgQ2hlY2tzdW0gKDkuMykKKwkgKiAgLSAlRENDUEFWX01JTl9PUFRMRU4gYnl0ZXMgZm9yIEFjayBWZWN0b3Igc2l6ZSAoMTEuNCwgd2hlbiBlbmFibGVkKQogCSAqLwotCi0JY3VyX21wcyAtPSByb3VuZHVwKDUgKyA2ICsgMTAgKyA2ICsgNiArIDYsIDQpOworCWN1cl9tcHMgLT0gcm91bmR1cCgxICsgNiArIDEwICsgZHAtPmRjY3BzX3NlbmRfbmRwX2NvdW50ICogOCArIDYgKworCQkJICAgKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPyBEQ0NQQVZfTUlOX09QVExFTiA6IDApLCA0KTsKIAogCS8qIEFuZCBzdG9yZSBjYWNoZWQgcmVzdWx0cyAqLwogCWljc2stPmljc2tfcG10dV9jb29raWUgPSBwbXR1OwpAQCAtMjcwLDcgKzI3NiwyMCBAQAogCQkJY29uc3QgaW50IGxlbiA9IHNrYi0+bGVuOwogCiAJCQlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfUEFSVE9QRU4pIHsKLQkJCQkvKiBTZWUgOC4xLjUuICBIYW5kc2hha2UgQ29tcGxldGlvbiAqLworCQkJCWNvbnN0IHUzMiBjdXJfbXBzID0gZHAtPmRjY3BzX21zc19jYWNoZSAtIERDQ1BfRkVBVE5FR19PVkVSSEVBRDsKKwkJCQkvKgorCQkJCSAqIFNlZSA4LjEuNSAtIEhhbmRzaGFrZSBDb21wbGV0aW9uLgorCQkJCSAqCisJCQkJICogRm9yIHJvYnVzdG5lc3Mgd2UgcmVzZW5kIENvbmZpcm0gb3B0aW9ucyB1bnRpbCB0aGUgY2xpZW50IGhhcworCQkJCSAqIGVudGVyZWQgT1BFTi4gRHVyaW5nIHRoZSBpbml0aWFsIGZlYXR1cmUgbmVnb3RpYXRpb24sIHRoZSBNUFMKKwkJCQkgKiBpcyBzbWFsbGVyIHRoYW4gdXN1YWwsIHJlZHVjZWQgYnkgdGhlIENoYW5nZS9Db25maXJtIG9wdGlvbnMuCisJCQkJICovCisJCQkJaWYgKCFsaXN0X2VtcHR5KCZkcC0+ZGNjcHNfZmVhdG5lZykgJiYgbGVuID4gY3VyX21wcykgeworCQkJCQlEQ0NQX1dBUk4oIlBheWxvYWQgdG9vIGxhcmdlICglZCkgZm9yIGZlYXRuZWcuXG4iLCBsZW4pOworCQkJCQlkY2NwX3NlbmRfYWNrKHNrKTsKKwkJCQkJZGNjcF9mZWF0X2xpc3RfcHVyZ2UoJmRwLT5kY2Nwc19mZWF0bmVnKTsKKwkJCQl9CisKIAkJCQlpbmV0X2Nza19zY2hlZHVsZV9hY2soc2spOwogCQkJCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9EQUNLLAogCQkJCQkJICBpbmV0X2NzayhzayktPmljc2tfcnRvLApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggOTQ1YjRkNS4uMzE0YTFiNSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0xNzQsOCArMTc0LDYgQEAKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAotCWRjY3BfbWluaXNvY2tfaW5pdCgmZHAtPmRjY3BzX21pbmlzb2NrKTsKLQogCWljc2stPmljc2tfcnRvCQk9IERDQ1BfVElNRU9VVF9JTklUOwogCWljc2stPmljc2tfc3luX3JldHJpZXMJPSBzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXM7CiAJc2stPnNrX3N0YXRlCQk9IERDQ1BfQ0xPU0VEOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avc3lzY3RsLmMgYi9uZXQvZGNjcC9zeXNjdGwuYwppbmRleCAwMThlMjEwLi5hNWExODU2IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9zeXNjdGwuYworKysgYi9uZXQvZGNjcC9zeXNjdGwuYwpAQCAtMTgsNTUgKzE4LDcyIEBACiAjZXJyb3IgVGhpcyBmaWxlIHNob3VsZCBub3QgYmUgY29tcGlsZWQgd2l0aG91dCBDT05GSUdfU1lTQ1RMIGRlZmluZWQKICNlbmRpZgogCisvKiBCb3VuZGFyeSB2YWx1ZXMgKi8KK3N0YXRpYyBpbnQJCXplcm8gICAgID0gMCwKKwkJCXU4X21heCAgID0gMHhGRjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCXNlcXdfbWluID0gMzI7CisKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRjY3BfZGVmYXVsdF90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gInNlcV93aW5kb3ciLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3csCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93KSwKKwkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdywKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZzZXF3X21pbiwJCS8qIFJGQyA0MzQwLCA3LjUuMiAqLwogCX0sCiAJewogCQkucHJvY25hbWUJPSAicnhfY2NpZCIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZCksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yeF9jY2lkLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yeF9jY2lkKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAkJLyogUkZDIDQzNDAsIDEwLiAqLwogCX0sCiAJewogCQkucHJvY25hbWUJPSAidHhfY2NpZCIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfdHhfY2NpZCksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF90eF9jY2lkLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF90eF9jY2lkKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAkJLyogUkZDIDQzNDAsIDEwLiAqLwogCX0sCiAJewogCQkucHJvY25hbWUJPSAicmVxdWVzdF9yZXRyaWVzIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllcywKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicmV0cmllczEiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcmV0cmllczEsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JldHJpZXMxKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicmV0cmllczIiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcmV0cmllczIsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JldHJpZXMyKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmdThfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAidHhfcWxlbiIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF90eF9xbGVuLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF90eF9xbGVuKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmemVybywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInN5bmNfcmF0ZWxpbWl0IiwKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCmluZGV4IGNmMGUxODQuLjk2NDdkOTEgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwpAQCAtMTI0NiwxMSArMTI0NiwxMiBAQAogCiAJY2FzZSBUSU9DSU5ROgogCQlsb2NrX3NvY2soc2spOwotCQlpZiAoKHNrYiA9IHNrYl9wZWVrKCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7CisJCXNrYiA9IHNrYl9wZWVrKCZzY3AtPm90aGVyX3JlY2VpdmVfcXVldWUpOworCQlpZiAoc2tiKSB7CiAJCQlhbW91bnQgPSBza2ItPmxlbjsKIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCBza19idWZmICpza2IgPSBzay0+c2tfcmVjZWl2ZV9xdWV1ZS5uZXh0OwotCQkJZm9yKDs7KSB7CisJCQlza2IgPSBzay0+c2tfcmVjZWl2ZV9xdWV1ZS5uZXh0OworCQkJZm9yICg7OykgewogCQkJCWlmIChza2IgPT0KIAkJCQkgICAgKHN0cnVjdCBza19idWZmICopJnNrLT5za19yZWNlaXZlX3F1ZXVlKQogCQkJCQlicmVhazsKQEAgLTE1NzksMTYgKzE1ODAsMTYgQEAKIAkJZGVmYXVsdDoKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAJCXsKLQkJCWludCB2YWwsIGxlbjsKKwkJCWludCByZXQsIGxlbjsKIAogCQkJaWYoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQl2YWwgPSBuZl9nZXRzb2Nrb3B0KHNrLCBQRl9ERUNuZXQsIG9wdG5hbWUsCisJCQlyZXQgPSBuZl9nZXRzb2Nrb3B0KHNrLCBQRl9ERUNuZXQsIG9wdG5hbWUsCiAJCQkJCQkJb3B0dmFsLCAmbGVuKTsKLQkJCWlmICh2YWwgPj0gMCkKLQkJCQl2YWwgPSBwdXRfdXNlcihsZW4sIG9wdGxlbik7Ci0JCQlyZXR1cm4gdmFsOworCQkJaWYgKHJldCA+PSAwKQorCQkJCXJldCA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KICNlbmRpZgogCQljYXNlIERTT19TVFJFQU06CkBAIC0yMDcxLDggKzIwNzIsNyBAQAogCX0KIG91dDoKIAotCWlmIChza2IpCi0JCWtmcmVlX3NrYihza2IpOworCWtmcmVlX3NrYihza2IpOwogCiAJcmVsZWFzZV9zb2NrKHNrKTsKIApAQCAtMjExMiw5ICsyMTEyLDggQEAKIAogZXh0ZXJuIGludCBkbl9yb3V0ZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRuX2RpeF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0ROQV9SVCksCi0JLmRldiA9CQlOVUxMLAkJLyogQWxsIGRldmljZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZG5fZGl4X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQkJY3B1X3RvX2JlMTYoRVRIX1BfRE5BX1JUKSwKIAkuZnVuYyA9CQlkbl9yb3V0ZV9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCBkYWYyYjk4Li4xYzZhNWJiIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTY4NCw3ICs2ODQsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgoZG5fZGIgPSBkZXYtPmRuX3B0cikgPT0gTlVMTCkgewotCQlpbnQgZXJyOwogCQlkbl9kYiA9IGRuX2Rldl9jcmVhdGUoZGV2LCAmZXJyKTsKIAkJaWYgKCFkbl9kYikKIAkJCXJldHVybiBlcnI7CkBAIC03NjksNyArNzY4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgMCwgUlROTEdSUF9ERUNuZXRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgMCwgUlROTEdSUF9ERUNuZXRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycigmaW5pdF9uZXQsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgZXJyKTsKQEAgLTEzMjIsNiArMTMyMiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpkbl9kZXZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKCZkZXZfYmFzZV9sb2NrKQogewogCWludCBpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMzY0LDYgKzEzNjUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBkbl9kZXZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggYzc1NDY3MC4uMGNjNDM5NCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBkbl9kc3Rfb3BzID0gewogCS5mYW1pbHkgPQkJUEZfREVDbmV0LAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0ROQV9SVCksCisJLnByb3RvY29sID0JCWNwdV90b19iZTE2KEVUSF9QX0ROQV9SVCksCiAJLmdjX3RocmVzaCA9CQkxMjgsCiAJLmdjID0JCQlkbl9kc3RfZ2MsCiAJLmNoZWNrID0JCWRuX2RzdF9jaGVjaywKQEAgLTM4MCw3ICszODAsNiBAQAogCXVuc2lnbmVkIGNoYXIgKnB0cjsKIAlfX2xlMTYgKnNyYzsKIAlfX2xlMTYgKmRzdDsKLQlfX2xlMTYgdG1wOwogCiAJLyogQWRkIGJhY2sgaGVhZGVycyAqLwogCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpOwpAQCAtMzk5LDEwICszOTgsNyBAQAogCXB0ciArPSAyOwogCSpwdHIgPSAwOyAvKiBaZXJvIGhvcCBjb3VudCAqLwogCi0JLyogU3dhcCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uICovCi0JdG1wICA9ICpzcmM7Ci0JKnNyYyA9ICpkc3Q7Ci0JKmRzdCA9IHRtcDsKKwlzd2FwKCpzcmMsICpkc3QpOwogCiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVVRHT0lORzsKIAlkbl9ydF9maW5pc2hfb3V0cHV0KHNrYiwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKaW5kZXggNjlhZDkyOC4uNjcwNTRiMCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl90YWJsZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwpAQCAtMzc1LDcgKzM3NSw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIHBpZCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIG5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIHBpZCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIG5saCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0RFQ25ldF9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwppbmRleCA5NjUzOTdhLi41YmNkNTkyIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAl9CiAKIAlpZiAod3JpdGUpIHsKLQkJaW50IGxlbiA9ICgqbGVucCA8IEROX0FTQ0JVRl9MRU4pID8gKmxlbnAgOiAoRE5fQVNDQlVGX0xFTi0xKTsKKwkJbGVuID0gKCpsZW5wIDwgRE5fQVNDQlVGX0xFTikgPyAqbGVucCA6IChETl9BU0NCVUZfTEVOLTEpOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihhZGRyLCBidWZmZXIsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL25ldC9kc2EvS2NvbmZpZyBiL25ldC9kc2EvS2NvbmZpZwppbmRleCA0OTIxMWIzLi5jNTFiNTU0IDEwMDY0NAotLS0gYS9uZXQvZHNhL0tjb25maWcKKysrIGIvbmV0L2RzYS9LY29uZmlnCkBAIC00MSwxMyArNDEsMTMgQEAKIAlkZWZhdWx0IG4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTMxCi0JYm9vbCAiTWFydmVsbCA4OEU2MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCisJYm9vbCAiTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCIKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFgKIAlzZWxlY3QgTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUKIAlzZWxlY3QgTkVUX0RTQV9UQUdfRFNBCiAJLS0taGVscC0tLQotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYxMzEgZXRoZXJuZXQgc3dpdGNoCi0JICBjaGlwLgorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIDg4RTYwOTUvNjA5NUYvNjEzMQorCSAgZXRoZXJuZXQgc3dpdGNoIGNoaXBzLgogCiBjb25maWcgTkVUX0RTQV9NVjg4RTYxMjNfNjFfNjUKIAlib29sICJNYXJ2ZWxsIDg4RTYxMjMvNjE2MS82MTY1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYS5jIGIvbmV0L2RzYS9kc2EuYwppbmRleCAzM2U5OTQ2Li43MTQ4OWY2IDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYS5jCisrKyBiL25ldC9kc2EvZHNhLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9kc2EuYyAtIEhhcmR3YXJlIHN3aXRjaCBoYW5kbGluZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC02NywxMiArNjcsMTMgQEAKIAogLyogYmFzaWMgc3dpdGNoIG9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IGRzYV9zd2l0Y2ggKgotZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqcGQsCi0JCSBzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QsIGludCBpbmRleCwKKwkJIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IG1paV9idXMgKmJ1cykKIHsKKwlzdHJ1Y3QgZHNhX2NoaXBfZGF0YSAqcGQgPSBkc3QtPnBkLT5jaGlwICsgaW5kZXg7CisJc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyICpkcnY7CiAJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCWludCByZXQ7Ci0Jc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyICpkcnY7CiAJY2hhciAqbmFtZTsKIAlpbnQgaTsKIApAQCAtODEsMTEgKzgyLDEyIEBACiAJICovCiAJZHJ2ID0gZHNhX3N3aXRjaF9wcm9iZShidXMsIHBkLT5zd19hZGRyLCAmbmFtZSk7CiAJaWYgKGRydiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBkZXRlY3QgYXR0YWNoZWQgc3dpdGNoXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNvdWxkIG5vdCBkZXRlY3QgYXR0YWNoZWQgc3dpdGNoXG4iLAorCQkgICAgICAgZHN0LT5tYXN0ZXJfbmV0ZGV2LT5uYW1lLCBpbmRleCk7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICIlczogZGV0ZWN0ZWQgYSAlcyBzd2l0Y2hcbiIsIGRldi0+bmFtZSwgbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXNbJWRdOiBkZXRlY3RlZCBhICVzIHN3aXRjaFxuIiwKKwkJZHN0LT5tYXN0ZXJfbmV0ZGV2LT5uYW1lLCBpbmRleCwgbmFtZSk7CiAKIAogCS8qCkBAIC05NSwxOCArOTcsMTYgQEAKIAlpZiAoZHMgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlkcy0+cGQgPSBwZDsKLQlkcy0+bWFzdGVyX25ldGRldiA9IGRldjsKLQlkcy0+bWFzdGVyX21paV9idXMgPSBidXM7Ci0KKwlkcy0+ZHN0ID0gZHN0OworCWRzLT5pbmRleCA9IGluZGV4OworCWRzLT5wZCA9IGRzdC0+cGQtPmNoaXAgKyBpbmRleDsKIAlkcy0+ZHJ2ID0gZHJ2OwotCWRzLT50YWdfcHJvdG9jb2wgPSBkcnYtPnRhZ19wcm90b2NvbDsKKwlkcy0+bWFzdGVyX21paV9idXMgPSBidXM7CiAKIAogCS8qCiAJICogVmFsaWRhdGUgc3VwcGxpZWQgc3dpdGNoIGNvbmZpZ3VyYXRpb24uCiAJICovCi0JZHMtPmNwdV9wb3J0ID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IERTQV9NQVhfUE9SVFM7IGkrKykgewogCQljaGFyICpuYW1lOwogCkBAIC0xMTUsMzIgKzExNSwyOCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKCFzdHJjbXAobmFtZSwgImNwdSIpKSB7Ci0JCQlpZiAoZHMtPmNwdV9wb3J0ICE9IC0xKSB7CisJCQlpZiAoZHN0LT5jcHVfc3dpdGNoICE9IC0xKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aXBsZSBjcHUgcG9ydHM/IVxuIik7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWRzLT5jcHVfcG9ydCA9IGk7CisJCQlkc3QtPmNwdV9zd2l0Y2ggPSBpbmRleDsKKwkJCWRzdC0+Y3B1X3BvcnQgPSBpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImRzYSIpKSB7CisJCQlkcy0+ZHNhX3BvcnRfbWFzayB8PSAxIDw8IGk7CiAJCX0gZWxzZSB7Ci0JCQlkcy0+dmFsaWRfcG9ydF9tYXNrIHw9IDEgPDwgaTsKKwkJCWRzLT5waHlzX3BvcnRfbWFzayB8PSAxIDw8IGk7CiAJCX0KIAl9CiAKLQlpZiAoZHMtPmNwdV9wb3J0ID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibm8gY3B1IHBvcnQ/IVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQogCiAJLyoKLQkgKiBJZiB3ZSB1c2UgYSB0YWdnaW5nIGZvcm1hdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiBldGhlcnR5cGUKLQkgKiBmaWVsZCwgbWFrZSBzdXJlIHRoYXQgYWxsIHBhY2tldHMgZnJvbSB0aGlzIHBvaW50IG9uIGdldAotCSAqIHNlbnQgdG8gdGhlIHRhZyBmb3JtYXQncyByZWNlaXZlIGZ1bmN0aW9uLiAgKFdoaWNoIHdpbGwKLQkgKiBkaXNjYXJkIHJlY2VpdmVkIHBhY2tldHMgdW50aWwgd2Ugc2V0IGRzLT5wb3J0c1tdIGJlbG93LikKKwkgKiBJZiB0aGUgQ1BVIGNvbm5lY3RzIHRvIHRoaXMgc3dpdGNoLCBzZXQgdGhlIHN3aXRjaCB0cmVlCisJICogdGFnZ2luZyBwcm90b2NvbCB0byB0aGUgcHJlZmVycmVkIHRhZ2dpbmcgZm9ybWF0IG9mIHRoaXMKKwkgKiBzd2l0Y2guCiAJICovCi0Jd21iKCk7Ci0JZGV2LT5kc2FfcHRyID0gKHZvaWQgKilkczsKKwlpZiAoZHMtPmRzdC0+Y3B1X3N3aXRjaCA9PSBpbmRleCkKKwkJZHMtPmRzdC0+dGFnX3Byb3RvY29sID0gZHJ2LT50YWdfcHJvdG9jb2w7CiAKIAogCS8qCkBAIC0xNTAsNyArMTQ2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBkcnYtPnNldF9hZGRyKGRzLCBkZXYtPmRldl9hZGRyKTsKKwlyZXQgPSBkcnYtPnNldF9hZGRyKGRzLCBkc3QtPm1hc3Rlcl9uZXRkZXYtPmRldl9hZGRyKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTE2OSwxOCArMTY1LDE4IEBACiAJLyoKIAkgKiBDcmVhdGUgbmV0d29yayBkZXZpY2VzIGZvciBwaHlzaWNhbCBzd2l0Y2ggcG9ydHMuCiAJICovCi0Jd21iKCk7CiAJZm9yIChpID0gMDsgaSA8IERTQV9NQVhfUE9SVFM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2OwogCi0JCWlmICghKGRzLT52YWxpZF9wb3J0X21hc2sgJiAoMSA8PCBpKSkpCisJCWlmICghKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGkpKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNsYXZlX2RldiA9IGRzYV9zbGF2ZV9jcmVhdGUoZHMsIHBhcmVudCwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOwogCQlpZiAoc2xhdmVfZGV2ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGNyZWF0ZSBkc2Egc2xhdmUgIgotCQkJICAgICAgICJkZXZpY2UgZm9yIHBvcnQgJWQoJXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNhbid0IGNyZWF0ZSBkc2EgIgorCQkJICAgICAgICJzbGF2ZSBkZXZpY2UgZm9yIHBvcnQgJWQoJXMpXG4iLAorCQkJICAgICAgIGRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwKKwkJCSAgICAgICBpbmRleCwgaSwgcGQtPnBvcnRfbmFtZXNbaV0pOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTkyLDcgKzE4OCw2IEBACiBvdXRfZnJlZToKIAltZGlvYnVzX2ZyZWUoZHMtPnNsYXZlX21paV9idXMpOwogb3V0OgotCWRldi0+ZHNhX3B0ciA9IE5VTEw7CiAJa2ZyZWUoZHMpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CkBAIC0yMTIsMzUgKzIwNyw0MiBAQAogICovCiBib29sIGRzYV91c2VzX2RzYV90YWdzKHZvaWQgKmRzYV9wdHIpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkc2FfcHRyOwogCi0JcmV0dXJuICEhKGRzLT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRFNBKSk7CisJcmV0dXJuICEhKGRzdC0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0RTQSkpOwogfQogCiBib29sIGRzYV91c2VzX3RyYWlsZXJfdGFncyh2b2lkICpkc2FfcHRyKQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHNhX3B0cjsKIAotCXJldHVybiAhIShkcy0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX1RSQUlMRVIpKTsKKwlyZXR1cm4gISEoZHN0LT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfVFJBSUxFUikpOwogfQogCiAKIC8qIGxpbmsgcG9sbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgZHNhX2xpbmtfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdWdseSkKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0OworCWludCBpOwogCi0JZHMgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IGRzYV9zd2l0Y2gsIGxpbmtfcG9sbF93b3JrKTsKKwlkc3QgPSBjb250YWluZXJfb2YodWdseSwgc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSwgbGlua19wb2xsX3dvcmspOwogCi0JZHMtPmRydi0+cG9sbF9saW5rKGRzKTsKLQltb2RfdGltZXIoJmRzLT5saW5rX3BvbGxfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CisJZm9yIChpID0gMDsgaSA8IGRzdC0+cGQtPm5yX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHN0LT5kc1tpXTsKKworCQlpZiAoZHMgIT0gTlVMTCAmJiBkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkKKwkJCWRzLT5kcnYtPnBvbGxfbGluayhkcyk7CisJfQorCisJbW9kX3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopKTsKIH0KIAotc3RhdGljIHZvaWQgZHNhX2xpbmtfcG9sbF90aW1lcih1bnNpZ25lZCBsb25nIF9kcykKK3N0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfdGltZXIodW5zaWduZWQgbG9uZyBfZHN0KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICh2b2lkICopX2RzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9ICh2b2lkICopX2RzdDsKIAotCXNjaGVkdWxlX3dvcmsoJmRzLT5saW5rX3BvbGxfd29yayk7CisJc2NoZWR1bGVfd29yaygmZHN0LT5saW5rX3BvbGxfd29yayk7CiB9CiAKIApAQCAtMzAzLDE4ICszMDUsMTQgQEAKIAlzdGF0aWMgaW50IGRzYV92ZXJzaW9uX3ByaW50ZWQ7CiAJc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG1paV9idXMgKmJ1czsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0OworCWludCBpOwogCiAJaWYgKCFkc2FfdmVyc2lvbl9wcmludGVkKyspCiAJCXByaW50ayhLRVJOX05PVElDRSAiRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSAiCiAJCQkiZHJpdmVyIHZlcnNpb24gJXNcbiIsIGRzYV9kcml2ZXJfdmVyc2lvbik7CiAKLQlpZiAocGQgPT0gTlVMTCB8fCBwZC0+bWlpX2J1cyA9PSBOVUxMIHx8IHBkLT5uZXRkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidXMgPSBkZXZfdG9fbWlpX2J1cyhwZC0+bWlpX2J1cyk7Ci0JaWYgKGJ1cyA9PSBOVUxMKQorCWlmIChwZCA9PSBOVUxMIHx8IHBkLT5uZXRkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXYgPSBkZXZfdG9fbmV0X2RldmljZShwZC0+bmV0ZGV2KTsKQEAgLTMyNiwzNiArMzI0LDc5IEBACiAJCXJldHVybiAtRUVYSVNUOwogCX0KIAotCWRzID0gZHNhX3N3aXRjaF9zZXR1cCgmcGRldi0+ZGV2LCBwZCwgYnVzLCBkZXYpOwotCWlmIChJU19FUlIoZHMpKSB7CisJZHN0ID0ga3phbGxvYyhzaXplb2YoKmRzdCksIEdGUF9LRVJORUwpOworCWlmIChkc3QgPT0gTlVMTCkgewogCQlkZXZfcHV0KGRldik7Ci0JCXJldHVybiBQVFJfRVJSKGRzKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKSB7Ci0JCUlOSVRfV09SSygmZHMtPmxpbmtfcG9sbF93b3JrLCBkc2FfbGlua19wb2xsX3dvcmspOwotCQlpbml0X3RpbWVyKCZkcy0+bGlua19wb2xsX3RpbWVyKTsKLQkJZHMtPmxpbmtfcG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZHM7Ci0JCWRzLT5saW5rX3BvbGxfdGltZXIuZnVuY3Rpb24gPSBkc2FfbGlua19wb2xsX3RpbWVyOwotCQlkcy0+bGlua19wb2xsX3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWik7Ci0JCWFkZF90aW1lcigmZHMtPmxpbmtfcG9sbF90aW1lcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHN0KTsKKworCWRzdC0+cGQgPSBwZDsKKwlkc3QtPm1hc3Rlcl9uZXRkZXYgPSBkZXY7CisJZHN0LT5jcHVfc3dpdGNoID0gLTE7CisJZHN0LT5jcHVfcG9ydCA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IHBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBtaWlfYnVzICpidXM7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKKworCQlidXMgPSBkZXZfdG9fbWlpX2J1cyhwZC0+Y2hpcFtpXS5taWlfYnVzKTsKKwkJaWYgKGJ1cyA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzWyVkXTogbm8gbWlpIGJ1cyBmb3VuZCBmb3IgIgorCQkJCSJkc2Egc3dpdGNoXG4iLCBkZXYtPm5hbWUsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlkcyA9IGRzYV9zd2l0Y2hfc2V0dXAoZHN0LCBpLCAmcGRldi0+ZGV2LCBidXMpOworCQlpZiAoSVNfRVJSKGRzKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IGNvdWxkbid0IGNyZWF0ZSBkc2Egc3dpdGNoICIKKwkJCQkiaW5zdGFuY2UgKGVycm9yICVsZClcbiIsIGRldi0+bmFtZSwgaSwKKwkJCQlQVFJfRVJSKGRzKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRzdC0+ZHNbaV0gPSBkczsKKwkJaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKQorCQkJZHN0LT5saW5rX3BvbGxfbmVlZGVkID0gMTsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcyk7CisJLyoKKwkgKiBJZiB3ZSB1c2UgYSB0YWdnaW5nIGZvcm1hdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiBldGhlcnR5cGUKKwkgKiBmaWVsZCwgbWFrZSBzdXJlIHRoYXQgYWxsIHBhY2tldHMgZnJvbSB0aGlzIHBvaW50IG9uIGdldAorCSAqIHNlbnQgdG8gdGhlIHRhZyBmb3JtYXQncyByZWNlaXZlIGZ1bmN0aW9uLgorCSAqLworCXdtYigpOworCWRldi0+ZHNhX3B0ciA9ICh2b2lkICopZHN0OworCisJaWYgKGRzdC0+bGlua19wb2xsX25lZWRlZCkgeworCQlJTklUX1dPUksoJmRzdC0+bGlua19wb2xsX3dvcmssIGRzYV9saW5rX3BvbGxfd29yayk7CisJCWluaXRfdGltZXIoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRzdDsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZnVuY3Rpb24gPSBkc2FfbGlua19wb2xsX3RpbWVyOworCQlkc3QtPmxpbmtfcG9sbF90aW1lci5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopOworCQlhZGRfdGltZXIoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CiAKLQlpZiAoZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpCi0JCWRlbF90aW1lcl9zeW5jKCZkcy0+bGlua19wb2xsX3RpbWVyKTsKKwlpZiAoZHN0LT5saW5rX3BvbGxfbmVlZGVkKQorCQlkZWxfdGltZXJfc3luYygmZHN0LT5saW5rX3BvbGxfdGltZXIpOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCWRzYV9zd2l0Y2hfZGVzdHJveShkcyk7CisJZm9yIChpID0gMDsgaSA8IGRzdC0+cGQtPm5yX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHN0LT5kc1tpXTsKKworCQlpZiAoZHMgIT0gTlVMTCkKKwkJCWRzYV9zd2l0Y2hfZGVzdHJveShkcyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYV9wcml2LmggYi9uZXQvZHNhL2RzYV9wcml2LmgKaW5kZXggNzA2MzM3OC4uNDEwNTVmMyAxMDA2NDQKLS0tIGEvbmV0L2RzYS9kc2FfcHJpdi5oCisrKyBiL25ldC9kc2EvZHNhX3ByaXYuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL2RzYV9wcml2LmggLSBIYXJkd2FyZSBzd2l0Y2ggaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTksNDIgKzE5LDEwNyBAQAogCiBzdHJ1Y3QgZHNhX3N3aXRjaCB7CiAJLyoKLQkgKiBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCBvd25zCi0JICogdGhpcyBkc2Egc3dpdGNoIGluc3RhbmNlLgorCSAqIFBhcmVudCBzd2l0Y2ggdHJlZSwgYW5kIHN3aXRjaCBpbmRleC4KIAkgKi8KLQlzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEJKnBkOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUJKmRzdDsKKwlpbnQJCQlpbmRleDsKIAogCS8qCi0JICogUmVmZXJlbmNlcyB0byBuZXR3b3JrIGRldmljZSBhbmQgbWlpIGJ1cyB0byB1c2UuCisJICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGlzIHN3aXRjaC4KIAkgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZQkJKm1hc3Rlcl9uZXRkZXY7Ci0Jc3RydWN0IG1paV9idXMJCQkqbWFzdGVyX21paV9idXM7CisJc3RydWN0IGRzYV9jaGlwX2RhdGEJKnBkOwogCiAJLyoKLQkgKiBUaGUgdXNlZCBzd2l0Y2ggZHJpdmVyIGFuZCBmcmFtZSB0YWdnaW5nIHR5cGUuCisJICogVGhlIHVzZWQgc3dpdGNoIGRyaXZlci4KIAkgKi8KIAlzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIJKmRydjsKLQlfX2JlMTYJCQkJdGFnX3Byb3RvY29sOworCisJLyoKKwkgKiBSZWZlcmVuY2UgdG8gbWlpIGJ1cyB0byB1c2UuCisJICovCisJc3RydWN0IG1paV9idXMJCSptYXN0ZXJfbWlpX2J1czsKIAogCS8qCiAJICogU2xhdmUgbWlpX2J1cyBhbmQgZGV2aWNlcyBmb3IgdGhlIGluZGl2aWR1YWwgcG9ydHMuCiAJICovCi0JaW50CQkJCWNwdV9wb3J0OwotCXUzMgkJCQl2YWxpZF9wb3J0X21hc2s7Ci0Jc3RydWN0IG1paV9idXMJCQkqc2xhdmVfbWlpX2J1czsKLQlzdHJ1Y3QgbmV0X2RldmljZQkJKnBvcnRzW0RTQV9NQVhfUE9SVFNdOworCXUzMgkJCWRzYV9wb3J0X21hc2s7CisJdTMyCQkJcGh5c19wb3J0X21hc2s7CisJc3RydWN0IG1paV9idXMJCSpzbGF2ZV9taWlfYnVzOworCXN0cnVjdCBuZXRfZGV2aWNlCSpwb3J0c1tEU0FfTUFYX1BPUlRTXTsKK307CisKK3N0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgeworCS8qCisJICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgb3ducworCSAqIHRoaXMgZHNhIHN3aXRjaCB0cmVlIGluc3RhbmNlLgorCSAqLworCXN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YQkqcGQ7CisKKwkvKgorCSAqIFJlZmVyZW5jZSB0byBuZXR3b3JrIGRldmljZSB0byB1c2UsIGFuZCB3aGljaCB0YWdnaW5nCisJICogcHJvdG9jb2wgdG8gdXNlLgorCSAqLworCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXJfbmV0ZGV2OworCV9fYmUxNgkJCXRhZ19wcm90b2NvbDsKKworCS8qCisJICogVGhlIHN3aXRjaCBhbmQgcG9ydCB0byB3aGljaCB0aGUgQ1BVIGlzIGF0dGFjaGVkLgorCSAqLworCXM4CQkJY3B1X3N3aXRjaDsKKwlzOAkJCWNwdV9wb3J0OwogCiAJLyoKIAkgKiBMaW5rIHN0YXRlIHBvbGxpbmcuCiAJICovCi0Jc3RydWN0IHdvcmtfc3RydWN0CQlsaW5rX3BvbGxfd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdAkJbGlua19wb2xsX3RpbWVyOworCWludAkJCWxpbmtfcG9sbF9uZWVkZWQ7CisJc3RydWN0IHdvcmtfc3RydWN0CWxpbmtfcG9sbF93b3JrOworCXN0cnVjdCB0aW1lcl9saXN0CWxpbmtfcG9sbF90aW1lcjsKKworCS8qCisJICogRGF0YSBmb3IgdGhlIGluZGl2aWR1YWwgc3dpdGNoIGNoaXBzLgorCSAqLworCXN0cnVjdCBkc2Ffc3dpdGNoCSpkc1tEU0FfTUFYX1NXSVRDSEVTXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBkc2FfaXNfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcCkKK3sKKwlyZXR1cm4gISEoZHMtPmluZGV4ID09IGRzLT5kc3QtPmNwdV9zd2l0Y2ggJiYgcCA9PSBkcy0+ZHN0LT5jcHVfcG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZHNhX3Vwc3RyZWFtX3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQoreworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLT5kc3Q7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgdGhlIHJvb3Qgc3dpdGNoIChpLmUuIHRoZSBzd2l0Y2ggdGhhdCBjb25uZWN0cworCSAqIHRvIHRoZSBDUFUpLCByZXR1cm4gdGhlIGNwdSBwb3J0IG51bWJlciBvbiB0aGlzIHN3aXRjaC4KKwkgKiBFbHNlIHJldHVybiB0aGUgKERTQSkgcG9ydCBudW1iZXIgdGhhdCBjb25uZWN0cyB0byB0aGUKKwkgKiBzd2l0Y2ggdGhhdCBpcyBvbmUgaG9wIGNsb3NlciB0byB0aGUgY3B1LgorCSAqLworCWlmIChkc3QtPmNwdV9zd2l0Y2ggPT0gZHMtPmluZGV4KQorCQlyZXR1cm4gZHN0LT5jcHVfcG9ydDsKKwllbHNlCisJCXJldHVybiBkcy0+cGQtPnJ0YWJsZVtkc3QtPmNwdV9zd2l0Y2hdOworfQorCiBzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgeworCS8qCisJICogVGhlIGxpbnV4IG5ldHdvcmsgaW50ZXJmYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcworCSAqIHN3aXRjaCBwb3J0LgorCSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisKKwkvKgorCSAqIFdoaWNoIHN3aXRjaCB0aGlzIHBvcnQgaXMgYSBwYXJ0IG9mLCBhbmQgdGhlIHBvcnQgaW5kZXgKKwkgKiBmb3IgdGhpcyBwb3J0LgorCSAqLwogCXN0cnVjdCBkc2Ffc3dpdGNoCSpwYXJlbnQ7Ci0JaW50CQkJcG9ydDsKKwl1OAkJCXBvcnQ7CisKKwkvKgorCSAqIFRoZSBwaHlsaWIgcGh5X2RldmljZSBwb2ludGVyIGZvciB0aGUgUEhZIGNvbm5lY3RlZAorCSAqIHRvIHRoaXMgcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgcGh5X2RldmljZQkqcGh5OwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYwNjAuYyBiL25ldC9kc2EvbXY4OGU2MDYwLmMKaW5kZXggODUwODFhZS4uODMyNzdmNCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYwNjAuYworKysgYi9uZXQvZHNhL212ODhlNjA2MC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvbXY4OGU2MDYwLmMgLSBEcml2ZXIgZm9yIE1hcnZlbGwgODhlNjA2MCBzd2l0Y2ggY2hpcHMKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtODEsNyArODEsNyBAQAogCS8qCiAJICogUmVzZXQgdGhlIHN3aXRjaC4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgwQSwgMHhhMTMwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgwYSwgMHhhMTMwKTsKIAogCS8qCiAJICogV2FpdCB1cCB0byBvbmUgc2Vjb25kIGZvciByZXNldCB0byBjb21wbGV0ZS4KQEAgLTEyOCw3ICsxMjgsNyBAQAogCSAqIHN0YXRlIHRvIEZvcndhcmRpbmcuICBBZGRpdGlvbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVQogCSAqIHBvcnQsIGVuYWJsZSBJbmdyZXNzIGFuZCBFZ3Jlc3MgVHJhaWxlciB0YWdnaW5nIG1vZGUuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDQxMDMgOiAweDAwMDMpOworCVJFR19XUklURShhZGRyLCAweDA0LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gIDB4NDEwMyA6IDB4MDAwMyk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwpAQCAtMTM4LDkgKzEzOCw5IEBACiAJICovCiAJUkVHX1dSSVRFKGFkZHIsIDB4MDYsCiAJCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwkJCSAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/CisJCQkJZHMtPnBoeXNfcG9ydF9tYXNrIDoKKwkJCQkoMSA8PCBkcy0+ZHN0LT5jcHVfcG9ydCkpKTsKIAogCS8qCiAJICogUG9ydCBBc3NvY2lhdGlvbiBWZWN0b3I6IHdoZW4gbGVhcm5pbmcgc291cmNlIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYyBiL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMKaW5kZXggZWM4YzZhMC4uNTJmYWFhMiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYworKysgYi9uZXQvZHNhL212ODhlNjEyM182MV82NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMgLSBNYXJ2ZWxsIDg4ZTYxMjMvNjE2MS82MTY1IHN3aXRjaCBjaGlwIHN1cHBvcnQKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtOTgsMTcgKzk4LDE3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKgotCSAqIENvbmZpZ3VyZSB0aGUgY3B1IHBvcnQsIGFuZCBjb25maWd1cmUgdGhlIGNwdSBwb3J0IGFzIHRoZQotCSAqIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0byBiZQotCSAqIHNlbnQuCisJICogQ29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0LCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbQorCSAqIHBvcnQgYXMgdGhlIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzCisJICogYXJlIHRvIGJlIHNlbnQuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkcy0+Y3B1X3BvcnQgKiAweDExMTApKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzYV91cHN0cmVhbV9wb3J0KGRzKSAqIDB4MTExMCkpOwogCiAJLyoKIAkgKiBEaXNhYmxlIHJlbW90ZSBtYW5hZ2VtZW50IGZvciBub3csIGFuZCBzZXQgdGhlIHN3aXRjaCdzCi0JICogRFNBIGRldmljZSBudW1iZXIgdG8gemVyby4KKwkgKiBEU0EgZGV2aWNlIG51bWJlci4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgMHgwMDAwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgZHMtPmluZGV4ICYgMHgxZik7CiAKIAkvKgogCSAqIFNlbmQgYWxsIGZyYW1lcyB3aXRoIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBtYXRjaGluZwpAQCAtMTMzLDEwICsxMzMsMTcgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDUsIDB4MDBmZik7CiAKIAkvKgotCSAqIE1hcCBhbGwgRFNBIGRldmljZSBJRHMgdG8gdGhlIENQVSBwb3J0LgorCSAqIFByb2dyYW0gdGhlIERTQSByb3V0aW5nIHRhYmxlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgZHMtPmNwdV9wb3J0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpbnQgbmV4dGhvcDsKKworCQluZXh0aG9wID0gMHgxZjsKKwkJaWYgKGkgIT0gZHMtPmluZGV4ICYmIGkgPCBkcy0+ZHN0LT5wZC0+bnJfY2hpcHMpCisJCQluZXh0aG9wID0gZHMtPnBkLT5ydGFibGVbaV0gJiAweDFmOworCisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBuZXh0aG9wKTsKKwl9CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXNrcy4KQEAgLTE3NiwxMiArMTgzLDE4IEBACiBzdGF0aWMgaW50IG12ODhlNjEyM182MV82NV9zZXR1cF9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCiB7CiAJaW50IGFkZHIgPSBSRUdfUE9SVChwKTsKKwl1MTYgdmFsOwogCiAJLyoKIAkgKiBNQUMgRm9yY2luZyByZWdpc3RlcjogZG9uJ3QgZm9yY2UgbGluaywgc3BlZWQsIGR1cGxleAotCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMuCisJICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcyBvbiBwaHlzaWNhbAorCSAqIHBvcnRzLCBidXQgZm9yY2UgdGhlIENQVSBwb3J0IGFuZCBhbGwgRFNBIHBvcnRzIHRvIDEwMDAgTWIvcworCSAqIGZ1bGwgZHVwbGV4LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApIHx8IGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwM2UpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CiAKIAkvKgogCSAqIERvIG5vdCBsaW1pdCB0aGUgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGlzIHBvcnQgY2FuIGJlCkBAIC0xOTIsMzcgKzIwNSw1MCBAQAogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2w6IGRpc2FibGUgRHJvcC1vbi1VbmxvY2ssIGRpc2FibGUgRHJvcC1vbi1Mb2NrLAotCSAqIGNvbmZpZ3VyZSB0aGUgcmVxdWVzdGVkIChEU0EvRURTQSkgdGFnZ2luZyBtb2RlIGlmIHRoaXMgaXMKLQkgKiB0aGUgQ1BVIHBvcnQsIGRpc2FibGUgSGVhZGVyIG1vZGUsIGVuYWJsZSBJR01QL01MRCBzbm9vcGluZywKLQkgKiBkaXNhYmxlIFZMQU4gdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdAotCSAqIDgwMi4xcCBhbmQgSVAgcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kCi0JICogc2V0IFNUUCBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgRmluYWxseSwgaWYgdGhpcyBpcyB0aGUgQ1BVCi0JICogcG9ydCwgYWRkaXRpb25hbGx5IGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdCBhbmQKLQkgKiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorCSAqIGRpc2FibGUgSGVhZGVyIG1vZGUsIGVuYWJsZSBJR01QL01MRCBzbm9vcGluZywgZGlzYWJsZSBWTEFOCisJICogdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdCA4MDIuMXAgYW5kIElQCisJICogcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kIHNldCBTVFAgc3RhdGUKKwkgKiB0byBGb3J3YXJkaW5nLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgQ1BVIGxpbmssIHVzZSBEU0Egb3IgRURTQSB0YWdnaW5nIGRlcGVuZGluZworCSAqIG9uIHdoaWNoIHRhZ2dpbmcgbW9kZSB3YXMgY29uZmlndXJlZC4KKwkgKgorCSAqIElmIHRoaXMgaXMgYSBsaW5rIHRvIGFub3RoZXIgc3dpdGNoLCB1c2UgRFNBIHRhZ2dpbmcgbW9kZS4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMgYW5kIG11bHRpY2FzdHMuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsCi0JCQkocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCSAoZHMtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9EU0EpKSA/Ci0JCQkgIDB4MDUzZiA6IDB4MzczZiA6Ci0JCQkgMHgwNDMzKTsKKwl2YWwgPSAweDA0MzM7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpIHsKKwkJaWYgKGRzLT5kc3QtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9FRFNBKSkKKwkJCXZhbCB8PSAweDMzMDA7CisJCWVsc2UKKwkJCXZhbCB8PSAweDAxMDA7CisJfQorCWlmIChkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQl2YWwgfD0gMHgwMTAwOworCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJdmFsIHw9IDB4MDAwYzsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgdmFsKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sIDE6IGRpc2FibGUgdHJ1bmtpbmcuICBBbHNvLCBpZiB0aGlzIGlzIHRoZQogCSAqIENQVSBwb3J0LCBlbmFibGUgbGVhcm4gbWVzc2FnZXMgdG8gYmUgc2VudCB0byB0aGlzIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDUsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDgwMDAgOiAweDAwMDApOworCVJFR19XUklURShhZGRyLCAweDA1LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gMHg4MDAwIDogMHgwMDAwKTsKIAogCS8qCiAJICogUG9ydCBiYXNlZCBWTEFOIG1hcDogZ2l2ZSBlYWNoIHBvcnQgaXRzIG93biBhZGRyZXNzCiAJICogZGF0YWJhc2UsIGFsbG93IHRoZSBDUFUgcG9ydCB0byB0YWxrIHRvIGVhY2ggb2YgdGhlICdyZWFsJwogCSAqIHBvcnRzLCBhbmQgYWxsb3cgZWFjaCBvZiB0aGUgJ3JlYWwnIHBvcnRzIHRvIG9ubHkgdGFsayB0bwotCSAqIHRoZSBDUFUgcG9ydC4KKwkgKiB0aGUgdXBzdHJlYW0gcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNiwKLQkJCSgocCAmIDB4ZikgPDwgMTIpIHwKLQkJCSAoKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkJZHMtPnZhbGlkX3BvcnRfbWFzayA6Ci0JCQkJKDEgPDwgZHMtPmNwdV9wb3J0KSkpOworCXZhbCA9IChwICYgMHhmKSA8PCAxMjsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSkKKwkJdmFsIHw9IGRzLT5waHlzX3BvcnRfbWFzazsKKwllbHNlCisJCXZhbCB8PSAxIDw8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNiwgdmFsKTsKIAogCS8qCiAJICogRGVmYXVsdCBWTEFOIElEIGFuZCBwcmlvcml0eTogZG9uJ3Qgc2V0IGEgZGVmYXVsdCBWTEFOCkBAIC0zOTQsNyArNDIwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciBtdjg4ZTYxMjNfNjFfNjVfc3dpdGNoX2RyaXZlciA9IHsKLQkudGFnX3Byb3RvY29sCQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRURTQSksCisJLnRhZ19wcm90b2NvbAkJPSBjcHVfdG9fYmUxNihFVEhfUF9FRFNBKSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgbXY4OGU2eHh4X3ByaXZfc3RhdGUpLAogCS5wcm9iZQkJCT0gbXY4OGU2MTIzXzYxXzY1X3Byb2JlLAogCS5zZXR1cAkJCT0gbXY4OGU2MTIzXzYxXzY1X3NldHVwLApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9tdjg4ZTYxMzEuYyBiL25ldC9kc2EvbXY4OGU2MTMxLmMKaW5kZXggMzc0ZDQ2YS4uYmIyYjQxYiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9tdjg4ZTYxMzEuYworKysgYi9uZXQvZHNhL212ODhlNjEzMS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIG5ldC9kc2EvbXY4OGU2MTMxLmMgLSBNYXJ2ZWxsIDg4ZTYxMzEgc3dpdGNoIGNoaXAgc3VwcG9ydAotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogbmV0L2RzYS9tdjg4ZTYxMzEuYyAtIE1hcnZlbGwgODhlNjA5NS82MDk1Zi82MTMxIHN3aXRjaCBjaGlwIHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjEsNiArMjEsOCBAQAogCXJldCA9IF9fbXY4OGU2eHh4X3JlZ19yZWFkKGJ1cywgc3dfYWRkciwgUkVHX1BPUlQoMCksIDB4MDMpOwogCWlmIChyZXQgPj0gMCkgewogCQlyZXQgJj0gMHhmZmYwOworCQlpZiAocmV0ID09IDB4MDk1MCkKKwkJCXJldHVybiAiTWFydmVsbCA4OEU2MDk1Lzg4RTYwOTVGIjsKIAkJaWYgKHJldCA9PSAweDEwNjApCiAJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjEzMSI7CiAJfQpAQCAtMzYsNyArMzgsNyBAQAogCS8qCiAJICogU2V0IGFsbCBwb3J0cyB0byB0aGUgZGlzYWJsZWQgc3RhdGUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CiAJCXJldCA9IFJFR19SRUFEKFJFR19QT1JUKGkpLCAweDA0KTsKIAkJUkVHX1dSSVRFKFJFR19QT1JUKGkpLCAweDA0LCByZXQgJiAweGZmZmMpOwogCX0KQEAgLTEwMCwxNyArMTAyLDE3IEBACiAJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MTksIDB4ODEwMCk7CiAKIAkvKgotCSAqIERpc2FibGUgQVJQIG1pcnJvcmluZywgYW5kIGNvbmZpZ3VyZSB0aGUgY3B1IHBvcnQgYXMgdGhlCi0JICogcG9ydCB0byB3aGljaCBpbmdyZXNzIGFuZCBlZ3Jlc3MgbW9uaXRvciBmcmFtZXMgYXJlIHRvIGJlCi0JICogc2VudC4KKwkgKiBEaXNhYmxlIEFSUCBtaXJyb3JpbmcsIGFuZCBjb25maWd1cmUgdGhlIHVwc3RyZWFtIHBvcnQgYXMKKwkgKiB0aGUgcG9ydCB0byB3aGljaCBpbmdyZXNzIGFuZCBlZ3Jlc3MgbW9uaXRvciBmcmFtZXMgYXJlIHRvCisJICogYmUgc2VudC4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzLT5jcHVfcG9ydCAqIDB4MTEwMCkgfCAweDAwZjApOworCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHNhX3Vwc3RyZWFtX3BvcnQoZHMpICogMHgxMTAwKSB8IDB4MDBmMCk7CiAKIAkvKgogCSAqIERpc2FibGUgY2FzY2FkZSBwb3J0IGZ1bmN0aW9uYWxpdHksIGFuZCBzZXQgdGhlIHN3aXRjaCdzCi0JICogRFNBIGRldmljZSBudW1iZXIgdG8gemVyby4KKwkgKiBEU0EgZGV2aWNlIG51bWJlci4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgMHhlMDAwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYywgMHhlMDAwIHwgKGRzLT5pbmRleCAmIDB4MWYpKTsKIAogCS8qCiAJICogU2VuZCBhbGwgZnJhbWVzIHdpdGggZGVzdGluYXRpb24gYWRkcmVzc2VzIG1hdGNoaW5nCkBAIC0xMjcsMTYgKzEyOSwyMyBAQAogCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNSwgMHgwMGZmKTsKIAogCS8qCi0JICogTWFwIGFsbCBEU0EgZGV2aWNlIElEcyB0byB0aGUgQ1BVIHBvcnQuCisJICogUHJvZ3JhbSB0aGUgRFNBIHJvdXRpbmcgdGFibGUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0JCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBkcy0+Y3B1X3BvcnQpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWludCBuZXh0aG9wOworCisJCW5leHRob3AgPSAweDFmOworCQlpZiAoaSAhPSBkcy0+aW5kZXggJiYgaSA8IGRzLT5kc3QtPnBkLT5ucl9jaGlwcykKKwkJCW5leHRob3AgPSBkcy0+cGQtPnJ0YWJsZVtpXSAmIDB4MWY7CisKKwkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IG5leHRob3ApOworCX0KIAogCS8qCiAJICogQ2xlYXIgYWxsIHRydW5rIG1hc2tzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNywgMHg4MDAwIHwgKGkgPDwgMTIpIHwgMHhmZik7CisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNywgMHg4MDAwIHwgKGkgPDwgMTIpIHwgMHg3ZmYpOwogCiAJLyoKIAkgKiBDbGVhciBhbGwgdHJ1bmsgbWFwcGluZ3MuCkBAIC0xNTYsMTIgKzE2NSwxOCBAQAogc3RhdGljIGludCBtdjg4ZTYxMzFfc2V0dXBfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwKQogewogCWludCBhZGRyID0gUkVHX1BPUlQocCk7CisJdTE2IHZhbDsKIAogCS8qCiAJICogTUFDIEZvcmNpbmcgcmVnaXN0ZXI6IGRvbid0IGZvcmNlIGxpbmssIHNwZWVkLCBkdXBsZXgKLQkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzLgorCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMgb24gcGh5c2ljYWwKKwkgKiBwb3J0cywgYnV0IGZvcmNlIHRoZSBDUFUgcG9ydCBhbmQgYWxsIERTQSBwb3J0cyB0byAxMDAwIE1iL3MKKwkgKiBmdWxsIGR1cGxleC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSB8fCBkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDNlKTsKKwllbHNlCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOwogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2w6IGRpc2FibGUgQ29yZSBUYWcsIGRpc2FibGUgRHJvcC1vbi1Mb2NrLApAQCAtMTY5LDI5ICsxODQsNDAgQEAKIAkgKiBlbmFibGUgSUdNUC9NTEQgc25vb3AsIGRpc2FibGUgRG91YmxlVGFnLCBkaXNhYmxlIFZMQU4KIAkgKiB0dW5uZWxpbmcsIGRldGVybWluZSBwcmlvcml0eSBieSBsb29raW5nIGF0IDgwMi4xcCBhbmQKIAkgKiBJUCBwcmlvcml0eSBmaWVsZHMgKElQIHByaW8gaGFzIHByZWNlZGVuY2UpLCBhbmQgc2V0IFNUUAotCSAqIHN0YXRlIHRvIEZvcndhcmRpbmcuICBGaW5hbGx5LCBpZiB0aGlzIGlzIHRoZSBDUFUgcG9ydCwKLQkgKiBhZGRpdGlvbmFsbHkgZW5hYmxlIERTQSB0YWdnaW5nIGFuZCBmb3J3YXJkaW5nIG9mIHVua25vd24KLQkgKiB1bmljYXN0IGFkZHJlc3Nlcy4KKwkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQorCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biB1bmljYXN0cywgYW5kIGVuYWJsZSBEU0EgdGFnZ2luZworCSAqIG1vZGUuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSBsaW5rIHRvIGFub3RoZXIgc3dpdGNoLCB1c2UgRFNBIHRhZ2dpbmcKKwkgKiBtb2RlLCBidXQgZG8gbm90IGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDQsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDA1MzcgOiAweDA0MzMpOworCXZhbCA9IDB4MDQzMzsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAxMDQ7CisJaWYgKGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCXZhbCB8PSAweDAxMDA7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDQsIHZhbCk7CiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbCAxOiBkaXNhYmxlIHRydW5raW5nLiAgQWxzbywgaWYgdGhpcyBpcyB0aGUKIAkgKiBDUFUgcG9ydCwgZW5hYmxlIGxlYXJuIG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhpcyBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA1LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg4MDAwIDogMHgwMDAwKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNSwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/IDB4ODAwMCA6IDB4MDAwMCk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwogCSAqIGRhdGFiYXNlLCBhbGxvdyB0aGUgQ1BVIHBvcnQgdG8gdGFsayB0byBlYWNoIG9mIHRoZSAncmVhbCcKIAkgKiBwb3J0cywgYW5kIGFsbG93IGVhY2ggb2YgdGhlICdyZWFsJyBwb3J0cyB0byBvbmx5IHRhbGsgdG8KLQkgKiB0aGUgQ1BVIHBvcnQuCisJICogdGhlIHVwc3RyZWFtIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDYsCi0JCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwl2YWwgPSAocCAmIDB4ZikgPDwgMTI7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpCisJCXZhbCB8PSBkcy0+cGh5c19wb3J0X21hc2s7CisJZWxzZQorCQl2YWwgfD0gMSA8PCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDYsIHZhbCk7CiAKIAkvKgogCSAqIERlZmF1bHQgVkxBTiBJRCBhbmQgcHJpb3JpdHk6IGRvbid0IHNldCBhIGRlZmF1bHQgVkxBTgpAQCAtMjA3LDEzICsyMzMsMTUgQEAKIAkgKiB1bnRhZ2dlZCBmcmFtZXMgb24gdGhpcyBwb3J0LCBkbyBhIGRlc3RpbmF0aW9uIGFkZHJlc3MKIAkgKiBsb29rdXAgb24gcmVjZWl2ZWQgcGFja2V0cyBhcyB1c3VhbCwgZG9uJ3Qgc2VuZCBhIGNvcHkKIAkgKiBvZiBhbGwgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgZnJhbWVzIG9uIHRoaXMgcG9ydCB0byB0aGUKLQkgKiBDUFUsIGFuZCBjb25maWd1cmUgdGhlIENQVSBwb3J0IG51bWJlci4gIEFsc28sIGlmIHRoaXMKLQkgKiBpcyB0aGUgQ1BVIHBvcnQsIGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gbXVsdGljYXN0Ci0JICogYWRkcmVzc2VzLgorCSAqIENQVSwgYW5kIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gcG9ydCBudW1iZXIuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCisJICogZm9yd2FyZGluZyBvZiB1bmtub3duIG11bHRpY2FzdCBhZGRyZXNzZXMuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDgsCi0JCQkoKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4MDBjMCA6IDB4MDA4MCkgfAotCQkJIGRzLT5jcHVfcG9ydCk7CisJdmFsID0gMHgwMDgwIHwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOworCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJdmFsIHw9IDB4MDA0MDsKKwlSRUdfV1JJVEUoYWRkciwgMHgwOCwgdmFsKTsKIAogCS8qCiAJICogUmF0ZSBDb250cm9sOiBkaXNhYmxlIGluZ3Jlc3MgcmF0ZSBsaW1pdGluZy4KQEAgLTI2OCw3ICsyOTYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CiAJCXJldCA9IG12ODhlNjEzMV9zZXR1cF9wb3J0KGRzLCBpKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwpAQCAtMjc5LDcgKzMwNyw3IEBACiAKIHN0YXRpYyBpbnQgbXY4OGU2MTMxX3BvcnRfdG9fcGh5X2FkZHIoaW50IHBvcnQpCiB7Ci0JaWYgKHBvcnQgPj0gMCAmJiBwb3J0ICE9IDMgJiYgcG9ydCA8PSA3KQorCWlmIChwb3J0ID49IDAgJiYgcG9ydCA8PSAxMSkKIAkJcmV0dXJuIHBvcnQ7CiAJcmV0dXJuIC0xOwogfQpAQCAtMzUzLDcgKzM4MSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgbXY4OGU2MTMxX3N3aXRjaF9kcml2ZXIgPSB7Ci0JLnRhZ19wcm90b2NvbAkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0RTQSksCisJLnRhZ19wcm90b2NvbAkJPSBjcHVfdG9fYmUxNihFVEhfUF9EU0EpLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBtdjg4ZTZ4eHhfcHJpdl9zdGF0ZSksCiAJLnByb2JlCQkJPSBtdjg4ZTYxMzFfcHJvYmUsCiAJLnNldHVwCQkJPSBtdjg4ZTYxMzFfc2V0dXAsCmRpZmYgLS1naXQgYS9uZXQvZHNhL3NsYXZlLmMgYi9uZXQvZHNhL3NsYXZlLmMKaW5kZXggYTY4ZmQ3OS4uZWQxMzExOCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKyBiL25ldC9kc2Evc2xhdmUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3NsYXZlLmMgLSBTbGF2ZSBkZXZpY2UgaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTksNyArMTksNyBAQAogewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGJ1cy0+cHJpdjsKIAotCWlmIChkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCisJaWYgKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQogCQlyZXR1cm4gZHMtPmRydi0+cGh5X3JlYWQoZHMsIGFkZHIsIHJlZyk7CiAKIAlyZXR1cm4gMHhmZmZmOwpAQCAtMjksNyArMjksNyBAQAogewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGJ1cy0+cHJpdjsKIAotCWlmIChkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCisJaWYgKGRzLT5waHlzX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQogCQlyZXR1cm4gZHMtPmRydi0+cGh5X3dyaXRlKGRzLCBhZGRyLCByZWcsIHZhbCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQzLDE1ICs0MywyNCBAQAogCWRzLT5zbGF2ZV9taWlfYnVzLT53cml0ZSA9IGRzYV9zbGF2ZV9waHlfd3JpdGU7CiAJc25wcmludGYoZHMtPnNsYXZlX21paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlczolLjJ4IiwKIAkJCWRzLT5tYXN0ZXJfbWlpX2J1cy0+aWQsIGRzLT5wZC0+c3dfYWRkcik7Ci0JZHMtPnNsYXZlX21paV9idXMtPnBhcmVudCA9ICYoZHMtPm1hc3Rlcl9taWlfYnVzLT5kZXYpOworCWRzLT5zbGF2ZV9taWlfYnVzLT5wYXJlbnQgPSAmZHMtPm1hc3Rlcl9taWlfYnVzLT5kZXY7CiB9CiAKIAogLyogc2xhdmUgZGV2aWNlIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGRzYV9zbGF2ZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRldi0+aWZsaW5rID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXYtPmlmaW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkc2Ffc2xhdmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJaW50IGVycjsKIAogCWlmICghKG1hc3Rlci0+ZmxhZ3MgJiBJRkZfVVApKQpAQCAtODksNyArOTgsNyBAQAogc3RhdGljIGludCBkc2Ffc2xhdmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJZGV2X21jX3Vuc3luYyhtYXN0ZXIsIGRldik7CiAJZGV2X3VuaWNhc3RfdW5zeW5jKG1hc3RlciwgZGV2KTsKQEAgLTEwNyw3ICsxMTYsNyBAQAogc3RhdGljIHZvaWQgZHNhX3NsYXZlX2NoYW5nZV9yeF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY2hhbmdlKQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAKIAlpZiAoY2hhbmdlICYgSUZGX0FMTE1VTFRJKQogCQlkZXZfc2V0X2FsbG11bHRpKG1hc3RlciwgZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSA/IDEgOiAtMSk7CkBAIC0xMTgsNyArMTI3LDcgQEAKIHN0YXRpYyB2b2lkIGRzYV9zbGF2ZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAKIAlkZXZfbWNfc3luYyhtYXN0ZXIsIGRldik7CiAJZGV2X3VuaWNhc3Rfc3luYyhtYXN0ZXIsIGRldik7CkBAIC0xMjcsNyArMTM2LDcgQEAKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphKQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gYTsKIAlpbnQgZXJyOwogCkBAIC0yODgsNiArMjk3LDcgQEAKIAogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19EU0EKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNhX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gZHNhX3htaXQsCkBAIC0zMDAsNiArMzEwLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19FRFNBCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVkc2FfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gZHNhX3NsYXZlX2luaXQsCiAJLm5kb19vcGVuCSAJPSBkc2Ffc2xhdmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBlZHNhX3htaXQsCkBAIC0zMTIsNiArMzIzLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRyYWlsZXJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gZHNhX3NsYXZlX2luaXQsCiAJLm5kb19vcGVuCSAJPSBkc2Ffc2xhdmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0cmFpbGVyX3htaXQsCkBAIC0zMjgsNyArMzQwLDcgQEAKIGRzYV9zbGF2ZV9jcmVhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCSBpbnQgcG9ydCwgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gZHMtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IGRzLT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldjsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnA7CiAJaW50IHJldDsKQEAgLTM0Myw3ICszNTUsNyBAQAogCW1lbWNweShzbGF2ZV9kZXYtPmRldl9hZGRyLCBtYXN0ZXItPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJc2xhdmVfZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCi0Jc3dpdGNoIChkcy0+dGFnX3Byb3RvY29sKSB7CisJc3dpdGNoIChkcy0+ZHN0LT50YWdfcHJvdG9jb2wpIHsKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRFNBCiAJY2FzZSBodG9ucyhFVEhfUF9EU0EpOgogCQlzbGF2ZV9kZXYtPm5ldGRldl9vcHMgPSAmZHNhX25ldGRldl9vcHM7CmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19kc2EuYyBiL25ldC9kc2EvdGFnX2RzYS5jCmluZGV4IGY5OWEwMTkuLjhmYTI1YmEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2RzYS5jCisrKyBiL25ldC9kc2EvdGFnX2RzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvdGFnX2RzYS5jIC0gKE5vbi1ldGhlcnR5cGUpIERTQSB0YWdnaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDcgKzM2LDcgQEAKIAkJICogQ29uc3RydWN0IHRhZ2dlZCBGUk9NX0NQVSBEU0EgdGFnIGZyb20gODAyLjFxIHRhZy4KIAkJICovCiAJCWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyICogRVRIX0FMRU47Ci0JCWRzYV9oZWFkZXJbMF0gPSAweDYwOworCQlkc2FfaGVhZGVyWzBdID0gMHg2MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWRzYV9oZWFkZXJbMV0gPSBwLT5wb3J0IDw8IDM7CiAKIAkJLyoKQEAgLTU3LDcgKzU3LDcgQEAKIAkJICogQ29uc3RydWN0IHVudGFnZ2VkIEZST01fQ1BVIERTQSB0YWcuCiAJCSAqLwogCQlkc2FfaGVhZGVyID0gc2tiLT5kYXRhICsgMiAqIEVUSF9BTEVOOwotCQlkc2FfaGVhZGVyWzBdID0gMHg0MDsKKwkJZHNhX2hlYWRlclswXSA9IDB4NDAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQlkc2FfaGVhZGVyWzFdID0gcC0+cG9ydCA8PCAzOwogCQlkc2FfaGVhZGVyWzJdID0gMHgwMDsKIAkJZHNhX2hlYWRlclszXSA9IDB4MDA7CkBAIC02NSw3ICs2NSw3IEBACiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRFNBKTsKIAotCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC03OCwxMSArNzgsMTMgQEAKIHN0YXRpYyBpbnQgZHNhX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKmRzYV9oZWFkZXI7CisJaW50IHNvdXJjZV9kZXZpY2U7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwpAQCAtOTgsMTYgKzEwMCwyNCBAQAogCWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgLSAyOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELCBhbmQKLQkgKiB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGlzIHplcm8uCisJICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRC4KIAkgKi8KLQlpZiAoKGRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweDAwICYmIChkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHhjMCkKKwlpZiAoKGRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweDAwICYmIChkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHhjMCkKIAkJZ290byBvdXRfZHJvcDsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqIERldGVybWluZSBzb3VyY2UgZGV2aWNlIGFuZCBwb3J0LgogCSAqLworCXNvdXJjZV9kZXZpY2UgPSBkc2FfaGVhZGVyWzBdICYgMHgxZjsKIAlzb3VyY2VfcG9ydCA9IChkc2FfaGVhZGVyWzFdID4+IDMpICYgMHgxZjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIGRldmljZSBleGlzdHMgYW5kIHRoYXQgdGhlIHNvdXJjZQorCSAqIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqLworCWlmIChzb3VyY2VfZGV2aWNlID49IGRzdC0+cGQtPm5yX2NoaXBzKQorCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1tzb3VyY2VfZGV2aWNlXTsKIAlpZiAoc291cmNlX3BvcnQgPj0gRFNBX01BWF9QT1JUUyB8fCBkcy0+cG9ydHNbc291cmNlX3BvcnRdID09IE5VTEwpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTE3NSw4ICsxODUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRzYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRFNBKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZHNhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9EU0EpLAogCS5mdW5jCT0gZHNhX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX2Vkc2EuYyBiL25ldC9kc2EvdGFnX2Vkc2EuYwppbmRleCAzMjhlYzk1Li44MTU2MDdiIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19lZHNhLmMKKysrIGIvbmV0L2RzYS90YWdfZWRzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvdGFnX2Vkc2EuYyAtIEV0aGVydHlwZSBEU0EgdGFnZ2luZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00NSw3ICs0NSw3IEBACiAJCWVkc2FfaGVhZGVyWzFdID0gRVRIX1BfRURTQSAmIDB4ZmY7CiAJCWVkc2FfaGVhZGVyWzJdID0gMHgwMDsKIAkJZWRzYV9oZWFkZXJbM10gPSAweDAwOwotCQllZHNhX2hlYWRlcls0XSA9IDB4NjA7CisJCWVkc2FfaGVhZGVyWzRdID0gMHg2MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWVkc2FfaGVhZGVyWzVdID0gcC0+cG9ydCA8PCAzOwogCiAJCS8qCkBAIC03MCw3ICs3MCw3IEBACiAJCWVkc2FfaGVhZGVyWzFdID0gRVRIX1BfRURTQSAmIDB4ZmY7CiAJCWVkc2FfaGVhZGVyWzJdID0gMHgwMDsKIAkJZWRzYV9oZWFkZXJbM10gPSAweDAwOwotCQllZHNhX2hlYWRlcls0XSA9IDB4NDA7CisJCWVkc2FfaGVhZGVyWzRdID0gMHg0MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWVkc2FfaGVhZGVyWzVdID0gcC0+cG9ydCA8PCAzOwogCQllZHNhX2hlYWRlcls2XSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzddID0gMHgwMDsKQEAgLTc4LDcgKzc4LDcgQEAKIAogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9FRFNBKTsKIAotCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC05MSwxMSArOTEsMTMgQEAKIHN0YXRpYyBpbnQgZWRzYV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAl1OCAqZWRzYV9oZWFkZXI7CisJaW50IHNvdXJjZV9kZXZpY2U7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwpAQCAtMTExLDE2ICsxMTMsMjQgQEAKIAllZHNhX2hlYWRlciA9IHNrYi0+ZGF0YSArIDI7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgZnJhbWUgdHlwZSBpcyBlaXRoZXIgVE9fQ1BVIG9yIEZPUldBUkQsIGFuZAotCSAqIHRoYXQgdGhlIHNvdXJjZSBkZXZpY2UgaXMgemVyby4KKwkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELgogCSAqLwotCWlmICgoZWRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweDAwICYmIChlZHNhX2hlYWRlclswXSAmIDB4ZGYpICE9IDB4YzApCisJaWYgKChlZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4MDAgJiYgKGVkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHhjMCkKIAkJZ290byBvdXRfZHJvcDsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqIERldGVybWluZSBzb3VyY2UgZGV2aWNlIGFuZCBwb3J0LgogCSAqLworCXNvdXJjZV9kZXZpY2UgPSBlZHNhX2hlYWRlclswXSAmIDB4MWY7CiAJc291cmNlX3BvcnQgPSAoZWRzYV9oZWFkZXJbMV0gPj4gMykgJiAweDFmOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGV4aXN0cyBhbmQgdGhhdCB0aGUgc291cmNlCisJICogcG9ydCBpcyBhIHJlZ2lzdGVyZWQgRFNBIHBvcnQuCisJICovCisJaWYgKHNvdXJjZV9kZXZpY2UgPj0gZHN0LT5wZC0+bnJfY2hpcHMpCisJCWdvdG8gb3V0X2Ryb3A7CisJZHMgPSBkc3QtPmRzW3NvdXJjZV9kZXZpY2VdOwogCWlmIChzb3VyY2VfcG9ydCA+PSBEU0FfTUFYX1BPUlRTIHx8IGRzLT5wb3J0c1tzb3VyY2VfcG9ydF0gPT0gTlVMTCkKIAkJZ290byBvdXRfZHJvcDsKIApAQCAtMTk0LDggKzIwNCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWRzYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRURTQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVkc2FfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0VEU0EpLAogCS5mdW5jCT0gZWRzYV9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ190cmFpbGVyLmMgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKaW5kZXggYjU5MTMyOC4uMWMzZTMwYyAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfdHJhaWxlci5jCisrKyBiL25ldC9kc2EvdGFnX3RyYWlsZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ190cmFpbGVyLmMgLSBUcmFpbGVyIHRhZyBmb3JtYXQgaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTksNyArNTksNyBAQAogCiAJbnNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9UUkFJTEVSKTsKIAotCW5za2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwluc2tiLT5kZXYgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAlkZXZfcXVldWVfeG1pdChuc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC02OCwxMiArNjgsMTQgQEAKIHN0YXRpYyBpbnQgdHJhaWxlcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAl1OCAqdHJhaWxlcjsKIAlpbnQgc291cmNlX3BvcnQ7CiAKLQlpZiAodW5saWtlbHkoZHMgPT0gTlVMTCkpCisJaWYgKHVubGlrZWx5KGRzdCA9PSBOVUxMKSkKIAkJZ290byBvdXRfZHJvcDsKKwlkcyA9IGRzdC0+ZHNbMF07CiAKIAlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKQEAgLTExMSw4ICsxMTMsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHRyYWlsZXJfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1RSQUlMRVIpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB0cmFpbGVyX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9UUkFJTEVSKSwKIAkuZnVuYwk9IHRyYWlsZXJfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggODc4OWQyYi4uNmY0NzlmYSAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC0xMTAyLDggKzExMDIsOCBAQAogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlY29uZXRfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9FQ09ORVQpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlY29uZXRfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9CQljcHVfdG9fYmUxNihFVEhfUF9FQ09ORVQpLAogCS5mdW5jID0JCWVjb25ldF9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCA2OTEyNjhmLi5iMmNmOTFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTM1LDcgKzM1LDcgQEAKIAogCSAgYXQgYm9vdCB0aW1lIGFmdGVyIHRoZSAvcHJvYyBmaWxlIHN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLgogCi0JICBJZiB5b3UgdHVybiBvbiBJUCBmb3J3YXJkaW5nLCB5b3Ugd2lsbCBhbHNvIGdldCB0aGUgcnBfZmlsdGVyLCB3aGljaAorCSAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcnBfZmlsdGVyLCB3aGljaAogCSAgYXV0b21hdGljYWxseSByZWplY3RzIGluY29taW5nIHBhY2tldHMgaWYgdGhlIHJvdXRpbmcgdGFibGUgZW50cnkKIAkgIGZvciB0aGVpciBzb3VyY2UgYWRkcmVzcyBkb2Vzbid0IG1hdGNoIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0aGV5J3JlCiAJICBhcnJpdmluZyBvbi4gVGhpcyBoYXMgc2VjdXJpdHkgYWR2YW50YWdlcyBiZWNhdXNlIGl0IHByZXZlbnRzIHRoZQpAQCAtNDYsMTIgKzQ2LDE2IEBACiAJICBycF9maWx0ZXIgb24gdXNlOgogCiAJICBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi88ZGV2aWNlPi9ycF9maWx0ZXIKLQkgIG9yCisJICAgYW5kCiAJICBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvcnBfZmlsdGVyCiAKKwkgIE5vdGUgdGhhdCBzb21lIGRpc3RyaWJ1dGlvbnMgZW5hYmxlIGl0IGluIHN0YXJ0dXAgc2NyaXB0cy4KKwkgIEZvciBkZXRhaWxzIGFib3V0IHJwX2ZpbHRlciBzdHJpY3QgYW5kIGxvb3NlIG1vZGUgcmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQ+LgorCiAJICBJZiB1bnN1cmUsIHNheSBOIGhlcmUuCiAKLWNob2ljZSAKK2Nob2ljZQogCXByb21wdCAiQ2hvb3NlIElQOiBGSUIgbG9va3VwIGFsZ29yaXRobSAoY2hvb3NlIEZJQl9IQVNIIGlmIHVuc3VyZSkiCiAJZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVIKIAlkZWZhdWx0IEFTS19JUF9GSUJfSEFTSApAQCAtNTksMjcgKzYzLDI5IEBACiBjb25maWcgQVNLX0lQX0ZJQl9IQVNICiAJYm9vbCAiRklCX0hBU0giCiAJLS0taGVscC0tLQotCUN1cnJlbnQgRklCIGlzIHZlcnkgcHJvdmVuIGFuZCBnb29kIGVub3VnaCBmb3IgbW9zdCB1c2Vycy4KKwkgIEN1cnJlbnQgRklCIGlzIHZlcnkgcHJvdmVuIGFuZCBnb29kIGVub3VnaCBmb3IgbW9zdCB1c2Vycy4KIAogY29uZmlnIElQX0ZJQl9UUklFCiAJYm9vbCAiRklCX1RSSUUiCiAJLS0taGVscC0tLQotCVVzZSBuZXcgZXhwZXJpbWVudGFsIExDLXRyaWUgYXMgRklCIGxvb2t1cCBhbGdvcml0aG0uIAotICAgICAgICBUaGlzIGltcHJvdmVzIGxvb2t1cCBwZXJmb3JtYW5jZSBpZiB5b3UgaGF2ZSBhIGxhcmdlCi0JbnVtYmVyIG9mIHJvdXRlcy4KKwkgIFVzZSBuZXcgZXhwZXJpbWVudGFsIExDLXRyaWUgYXMgRklCIGxvb2t1cCBhbGdvcml0aG0uCisJICBUaGlzIGltcHJvdmVzIGxvb2t1cCBwZXJmb3JtYW5jZSBpZiB5b3UgaGF2ZSBhIGxhcmdlCisJICBudW1iZXIgb2Ygcm91dGVzLgogCi0JTEMtdHJpZSBpcyBhIGxvbmdlc3QgbWF0Y2hpbmcgcHJlZml4IGxvb2t1cCBhbGdvcml0aG0gd2hpY2gKLQlwZXJmb3JtcyBiZXR0ZXIgdGhhbiBGSUJfSEFTSCBmb3IgbGFyZ2Ugcm91dGluZyB0YWJsZXMuCi0JQnV0LCBpdCBjb25zdW1lcyBtb3JlIG1lbW9yeSBhbmQgaXMgbW9yZSBjb21wbGV4LgotCQotCUxDLXRyaWUgaXMgZGVzY3JpYmVkIGluOgotCQotIAlJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgotIAlJRUVFIEpvdXJuYWwgb24gU2VsZWN0ZWQgQXJlYXMgaW4gQ29tbXVuaWNhdGlvbnMsIDE3KDYpOjEwODMtMTA5MiwgSnVuZSAxOTk5Ci0JQW4gZXhwZXJpbWVudGFsIHN0dWR5IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgZm9yIGR5bmFtaWMgdHJpZXMKLSAJU3RlZmFuIE5pbHNzb24gYW5kIE1hdHRpIFRpa2thbmVuLiBBbGdvcml0aG1pY2EsIDMzKDEpOjE5LTMzLCAyMDAyLgotIAlodHRwOi8vd3d3Lm5hZGEua3RoLnNlL35zbmlsc3Nvbi9wdWJsaWMvcGFwZXJzL2R5bnRyaWUyLwotICAgICAgIAorCSAgTEMtdHJpZSBpcyBhIGxvbmdlc3QgbWF0Y2hpbmcgcHJlZml4IGxvb2t1cCBhbGdvcml0aG0gd2hpY2gKKwkgIHBlcmZvcm1zIGJldHRlciB0aGFuIEZJQl9IQVNIIGZvciBsYXJnZSByb3V0aW5nIHRhYmxlcy4KKwkgIEJ1dCwgaXQgY29uc3VtZXMgbW9yZSBtZW1vcnkgYW5kIGlzIG1vcmUgY29tcGxleC4KKworCSAgTEMtdHJpZSBpcyBkZXNjcmliZWQgaW46CisKKwkgIElQLWFkZHJlc3MgbG9va3VwIHVzaW5nIExDLXRyaWVzLiBTdGVmYW4gTmlsc3NvbiBhbmQgR3VubmFyIEthcmxzc29uCisJICBJRUVFIEpvdXJuYWwgb24gU2VsZWN0ZWQgQXJlYXMgaW4gQ29tbXVuaWNhdGlvbnMsIDE3KDYpOjEwODMtMTA5MiwKKwkgIEp1bmUgMTk5OQorCisJICBBbiBleHBlcmltZW50YWwgc3R1ZHkgb2YgY29tcHJlc3Npb24gbWV0aG9kcyBmb3IgZHluYW1pYyB0cmllcworCSAgU3RlZmFuIE5pbHNzb24gYW5kIE1hdHRpIFRpa2thbmVuLiBBbGdvcml0aG1pY2EsIDMzKDEpOjE5LTMzLCAyMDAyLgorCSAgaHR0cDovL3d3dy5uYWRhLmt0aC5zZS9+c25pbHNzb24vcHVibGljL3BhcGVycy9keW50cmllMi8KKwogZW5kY2hvaWNlCiAKIGNvbmZpZyBJUF9GSUJfSEFTSApAQCAtMTkxLDcgKzE5Nyw3IEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0PiBmb3IgZGV0YWlscy4KIAogIyBub3QgeWV0IHJlYWR5Li4KLSMgICBib29sICcgICAgSVA6IEFSUCBzdXBwb3J0JyBDT05GSUdfSVBfUE5QX0FSUAkJCisjICAgYm9vbCAnICAgIElQOiBBUlAgc3VwcG9ydCcgQ09ORklHX0lQX1BOUF9BUlAKIGNvbmZpZyBORVRfSVBJUAogCXRyaXN0YXRlICJJUDogdHVubmVsaW5nIgogCXNlbGVjdCBJTkVUX1RVTk5FTApAQCAtMzYxLDcgKzM2Nyw3IEBACiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbCAoSVBDb21wKSAoUkZDMzE3MyksCiAJICB0eXBpY2FsbHkgbmVlZGVkIGZvciBJUHNlYy4KLQkgIAorCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSU5FVF9YRlJNX1RVTk5FTApAQCAtNDE1LDcgKzQyMSw3IEBACiAJICBTdXBwb3J0IGZvciBJTkVUIChUQ1AsIERDQ1AsIGV0Yykgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkKIAkgIG5hdGl2ZSBMaW51eCB0b29scyBzdWNoIGFzIHNzLiBzcyBpcyBpbmNsdWRlZCBpbiBpcHJvdXRlMiwgY3VycmVudGx5CiAJICBkb3dubG9hZGFibGUgYXQgPGh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL0lwcm91dGUyPi4KLQkgIAorCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSU5FVF9UQ1BfRElBRwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDc0M2Y1NTQuLmQ1YWFhYmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTM2OSw3ICszNjksNiBAQAogCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKIAogCXNrLT5za19kZXN0cnVjdAkgICA9IGluZXRfc29ja19kZXN0cnVjdDsKLQlzay0+c2tfZmFtaWx5CSAgID0gUEZfSU5FVDsKIAlzay0+c2tfcHJvdG9jb2wJICAgPSBwcm90b2NvbDsKIAlzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7CiAKQEAgLTEyNTMsMTAgKzEyNTIsMTAgQEAKIAlpbnQgcHJvdG87CiAJaW50IGlkOwogCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkpCisJaXBoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmlwaCkpOworCWlmICh1bmxpa2VseSghaXBoKSkKIAkJZ290byBvdXQ7CiAKLQlpcGggPSBpcF9oZHIoc2tiKTsKIAlwcm90byA9IGlwaC0+cHJvdG9jb2wgJiAoTUFYX0lORVRfUFJPVE9TIC0gMSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC0xMjY0LDEzICsxMjYzLDEzIEBACiAJaWYgKCFvcHMgfHwgIW9wcy0+Z3JvX3JlY2VpdmUpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmIChpcGgtPnZlcnNpb24gIT0gNCB8fCBpcGgtPmlobCAhPSA1KQorCWlmICgqKHU4ICopaXBoICE9IDB4NDUpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICh1bmxpa2VseShpcF9mYXN0X2NzdW0oKHU4ICopaXBoLCBpcGgtPmlobCkpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmbHVzaCA9IG50b2hzKGlwaC0+dG90X2xlbikgIT0gc2tiLT5sZW4gfHwKKwlmbHVzaCA9IG50b2hzKGlwaC0+dG90X2xlbikgIT0gc2tiX2dyb19sZW4oc2tiKSB8fAogCQlpcGgtPmZyYWdfb2ZmICE9IGh0b25zKElQX0RGKTsKIAlpZCA9IG50b2hzKGlwaC0+aWQpOwogCkBAIC0xMjgyLDI0ICsxMjgxLDI1IEBACiAKIAkJaXBoMiA9IGlwX2hkcihwKTsKIAotCQlpZiAoaXBoLT5wcm90b2NvbCAhPSBpcGgyLT5wcm90b2NvbCB8fAotCQkgICAgaXBoLT50b3MgIT0gaXBoMi0+dG9zIHx8Ci0JCSAgICBtZW1jbXAoJmlwaC0+c2FkZHIsICZpcGgyLT5zYWRkciwgOCkpIHsKKwkJaWYgKChpcGgtPnByb3RvY29sIF4gaXBoMi0+cHJvdG9jb2wpIHwKKwkJICAgIChpcGgtPnRvcyBeIGlwaDItPnRvcykgfAorCQkgICAgKGlwaC0+c2FkZHIgXiBpcGgyLT5zYWRkcikgfAorCQkgICAgKGlwaC0+ZGFkZHIgXiBpcGgyLT5kYWRkcikpIHsKIAkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBBbGwgZmllbGRzIG11c3QgbWF0Y2ggZXhjZXB0IGxlbmd0aCBhbmQgY2hlY2tzdW0uICovCiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCB8PQotCQkJbWVtY21wKCZpcGgtPmZyYWdfb2ZmLCAmaXBoMi0+ZnJhZ19vZmYsIDQpIHx8Ci0JCQkodTE2KShudG9ocyhpcGgyLT5pZCkgKyBOQVBJX0dST19DQihwKS0+Y291bnQpICE9IGlkOworCQkJKGlwaC0+dHRsIF4gaXBoMi0+dHRsKSB8CisJCQkoKHUxNikobnRvaHMoaXBoMi0+aWQpICsgTkFQSV9HUk9fQ0IocCktPmNvdW50KSBeIGlkKTsKIAogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggfD0gZmx1c2g7CiAJfQogCiAJTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggfD0gZmx1c2g7Ci0JX19za2JfcHVsbChza2IsIHNpemVvZigqaXBoKSk7Ci0Jc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCiAJcHAgPSBvcHMtPmdyb19yZWNlaXZlKGhlYWQsIHNrYik7CiAKQEAgLTE1MDAsOCArMTUwMCw4IEBACiAgKglJUCBwcm90b2NvbCBsYXllciBpbml0aWFsaXNlcgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXBfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXBfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkuZnVuYyA9IGlwX3JjdiwKIAkuZ3NvX3NlbmRfY2hlY2sgPSBpbmV0X2dzb19zZW5kX2NoZWNrLAogCS5nc29fc2VnbWVudCA9IGluZXRfZ3NvX3NlZ21lbnQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IDI5YTc0YzAuLmYxMTkzMWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC04MDEsOCArODAxLDExIEBACiAgKiAgY2FjaGUuCiAgKi8KIAotCS8qIFNwZWNpYWwgY2FzZTogSVB2NCBkdXBsaWNhdGUgYWRkcmVzcyBkZXRlY3Rpb24gcGFja2V0IChSRkMyMTMxKSAqLwotCWlmIChzaXAgPT0gMCkgeworCS8qCisJICogIFNwZWNpYWwgY2FzZTogSVB2NCBkdXBsaWNhdGUgYWRkcmVzcyBkZXRlY3Rpb24gcGFja2V0IChSRkMyMTMxKQorCSAqICBhbmQgR3JhdHVpdG91cyBBUlAvQVJQIEFubm91bmNlLiAoUkZDMzkyNywgU2VjdGlvbiAyLjQpCisJICovCisJaWYgKHNpcCA9PSAwIHx8IHRpcCA9PSBzaXApIHsKIAkJaWYgKGFycC0+YXJfb3AgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkgJiYKIAkJICAgIGluZXRfYWRkcl90eXBlKG5ldCwgdGlwKSA9PSBSVE5fTE9DQUwgJiYKIAkJICAgICFhcnBfaWdub3JlKGluX2Rldiwgc2lwLCB0aXApKQpAQCAtODkyLDcgKzg5NSw3IEBACiBvdXQ6CiAJaWYgKGluX2RldikKIAkJaW5fZGV2X3B1dChpbl9kZXYpOwotCWtmcmVlX3NrYihza2IpOworCWNvbnN1bWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjUsOCArMTIyOCw4IEBACiAgKglDYWxsZWQgb25jZSBvbiBzdGFydHVwLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXJwX3BhY2tldF90eXBlID0gewotCS50eXBlID0JX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBhcnBfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX0FSUCksCiAJLmZ1bmMgPQlhcnBfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDMwOTk5N2UuLjEyNmJiOTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTEwNzUsNiArMTA3NSwxNCBAQAogCQkJfQogCQl9CiAJCWlwX21jX3VwKGluX2Rldik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgTkVUREVWX0NIQU5HRUFERFI6CisJCWlmIChJTl9ERVZfQVJQX05PVElGWShpbl9kZXYpKQorCQkJYXJwX3NlbmQoQVJQT1BfUkVRVUVTVCwgRVRIX1BfQVJQLAorCQkJCSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfYWRkcmVzcywKKwkJCQkgZGV2LAorCQkJCSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfYWRkcmVzcywKKwkJCQkgTlVMTCwgZGV2LT5kZXZfYWRkciwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0RPV046CiAJCWlwX21jX2Rvd24oaW5fZGV2KTsKQEAgLTEyMDgsNyArMTIxNiw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIHBpZCwgUlROTEdSUF9JUFY0X0lGQUREUiwgbmxoLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBSVE5MR1JQX0lQVjRfSUZBRERSLCBubGgsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY0X0lGQUREUiwgZXJyKTsKQEAgLTE0MzksNiArMTQ0OCw3IEBACiAJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKEFSUF9BTk5PVU5DRSwgImFycF9hbm5vdW5jZSIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfSUdOT1JFLCAiYXJwX2lnbm9yZSIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfQUNDRVBULCAiYXJwX2FjY2VwdCIpLAorCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfTk9USUZZLCAiYXJwX25vdGlmeSIpLAogCiAJCURFVklORVRfU1lTQ1RMX0ZMVVNISU5HX0VOVFJZKE5PWEZSTSwgImRpc2FibGVfeGZybSIpLAogCQlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19FTlRSWShOT1BPTElDWSwgImRpc2FibGVfcG9saWN5IiksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDc0MWU0ZmEuLmNhZmNjNDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlmaWJfcmVzX3B1dCgmcmVzKTsKIAlpZiAobm9fYWRkcikKIAkJZ290byBsYXN0X3Jlc29ydDsKLQlpZiAocnBmKQorCWlmIChycGYgPT0gMSkKIAkJZ290byBlX2ludmFsOwogCWZsLm9pZiA9IGRldi0+aWZpbmRleDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IDQ4MTdkZWEuLmY4MzFkZjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYworKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTMyMiw4ICszMjIsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgaW5mby0+bmxfbmV0LCBpbmZvLT5waWQsIFJUTkxHUlBfSVBWNF9ST1VURSwKLQkJCSAgaW5mby0+bmxoLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIGluZm8tPm5sX25ldCwgaW5mby0+cGlkLCBSVE5MR1JQX0lQVjRfUk9VVEUsCisJCSAgICBpbmZvLT5ubGgsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKGluZm8tPm5sX25ldCwgUlROTEdSUF9JUFY0X1JPVVRFLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IGZjNTYyZDIuLjNmNTA4MDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTM3NSw2ICszNzUsNyBAQAogCWluZXQtPnRvcyA9IGlwX2hkcihza2IpLT50b3M7CiAJZGFkZHIgPSBpcGMuYWRkciA9IHJ0LT5ydF9zcmM7CiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCWlmIChpY21wX3BhcmFtLT5yZXBseW9wdHMub3B0bGVuKSB7CiAJCWlwYy5vcHQgPSAmaWNtcF9wYXJhbS0+cmVwbHlvcHRzOwogCQlpZiAoaXBjLm9wdC0+c3JyKQpAQCAtNTMyLDYgKzUzMyw3IEBACiAJaW5ldF9zayhzayktPnRvcyA9IHRvczsKIAlpcGMuYWRkciA9IGlwaC0+c2FkZHI7CiAJaXBjLm9wdCA9ICZpY21wX3BhcmFtLnJlcGx5b3B0czsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAKIAl7CiAJCXN0cnVjdCBmbG93aSBmbCA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IGYyNmFiMzguLjIyY2QxOWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtOTMsMjQgKzkzLDQwIEBACiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpoZWFkOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKLQlpbnQgcmV0OworCWludCByZXQsIGF0dGVtcHRzID0gNTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJaW50IHNtYWxsZXN0X3NpemUgPSAtMSwgc21hbGxlc3Rfcm92ZXI7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJaWYgKCFzbnVtKSB7CiAJCWludCByZW1haW5pbmcsIHJvdmVyLCBsb3csIGhpZ2g7CiAKK2FnYWluOgogCQlpbmV0X2dldF9sb2NhbF9wb3J0X3JhbmdlKCZsb3csICZoaWdoKTsKIAkJcmVtYWluaW5nID0gKGhpZ2ggLSBsb3cpICsgMTsKLQkJcm92ZXIgPSBuZXRfcmFuZG9tKCkgJSByZW1haW5pbmcgKyBsb3c7CisJCXNtYWxsZXN0X3JvdmVyID0gcm92ZXIgPSBuZXRfcmFuZG9tKCkgJSByZW1haW5pbmcgKyBsb3c7CiAKKwkJc21hbGxlc3Rfc2l6ZSA9IC0xOwogCQlkbyB7CiAJCQloZWFkID0gJmhhc2hpbmZvLT5iaGFzaFtpbmV0X2JoYXNoZm4obmV0LCByb3ZlciwKIAkJCQkJaGFzaGluZm8tPmJoYXNoX3NpemUpXTsKIAkJCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CiAJCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiLCBub2RlLCAmaGVhZC0+Y2hhaW4pCi0JCQkJaWYgKGliX25ldCh0YikgPT0gbmV0ICYmIHRiLT5wb3J0ID09IHJvdmVyKQorCQkJCWlmIChpYl9uZXQodGIpID09IG5ldCAmJiB0Yi0+cG9ydCA9PSByb3ZlcikgeworCQkJCQlpZiAodGItPmZhc3RyZXVzZSA+IDAgJiYKKwkJCQkJICAgIHNrLT5za19yZXVzZSAmJgorCQkJCQkgICAgc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKKwkJCQkJICAgICh0Yi0+bnVtX293bmVycyA8IHNtYWxsZXN0X3NpemUgfHwgc21hbGxlc3Rfc2l6ZSA9PSAtMSkpIHsKKwkJCQkJCXNtYWxsZXN0X3NpemUgPSB0Yi0+bnVtX293bmVyczsKKwkJCQkJCXNtYWxsZXN0X3JvdmVyID0gcm92ZXI7CisJCQkJCQlpZiAoYXRvbWljX3JlYWQoJmhhc2hpbmZvLT5ic29ja2V0cykgPiAoaGlnaCAtIGxvdykgKyAxKSB7CisJCQkJCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOworCQkJCQkJCXNudW0gPSBzbWFsbGVzdF9yb3ZlcjsKKwkJCQkJCQlnb3RvIGhhdmVfc251bTsKKwkJCQkJCX0KKwkJCQkJfQogCQkJCQlnb3RvIG5leHQ7CisJCQkJfQogCQkJYnJlYWs7CiAJCW5leHQ6CiAJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CkBAIC0xMjUsMTQgKzE0MSwxOSBAQAogCQkgKiB0aGUgdG9wIGxldmVsLCBub3QgZnJvbSB0aGUgJ2JyZWFrOycgc3RhdGVtZW50LgogCQkgKi8KIAkJcmV0ID0gMTsKLQkJaWYgKHJlbWFpbmluZyA8PSAwKQorCQlpZiAocmVtYWluaW5nIDw9IDApIHsKKwkJCWlmIChzbWFsbGVzdF9zaXplICE9IC0xKSB7CisJCQkJc251bSA9IHNtYWxsZXN0X3JvdmVyOworCQkJCWdvdG8gaGF2ZV9zbnVtOworCQkJfQogCQkJZ290byBmYWlsOwotCisJCX0KIAkJLyogT0ssIGhlcmUgaXMgdGhlIG9uZSB3ZSB3aWxsIHVzZS4gIEhFQUQgaXMKIAkJICogbm9uLU5VTEwgYW5kIHdlIGhvbGQgaXQncyBtdXRleC4KIAkJICovCiAJCXNudW0gPSByb3ZlcjsKIAl9IGVsc2UgeworaGF2ZV9zbnVtOgogCQloZWFkID0gJmhhc2hpbmZvLT5iaGFzaFtpbmV0X2JoYXNoZm4obmV0LCBzbnVtLAogCQkJCWhhc2hpbmZvLT5iaGFzaF9zaXplKV07CiAJCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CkBAIC0xNDUsMTIgKzE2NiwxOSBAQAogdGJfZm91bmQ6CiAJaWYgKCFobGlzdF9lbXB0eSgmdGItPm93bmVycykpIHsKIAkJaWYgKHRiLT5mYXN0cmV1c2UgPiAwICYmCi0JCSAgICBzay0+c2tfcmV1c2UgJiYgc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4pIHsKKwkJICAgIHNrLT5za19yZXVzZSAmJiBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmJgorCQkgICAgc21hbGxlc3Rfc2l6ZSA9PSAtMSkgewogCQkJZ290byBzdWNjZXNzOwogCQl9IGVsc2UgewogCQkJcmV0ID0gMTsKLQkJCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5iaW5kX2NvbmZsaWN0KHNrLCB0YikpCisJCQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+YmluZF9jb25mbGljdChzaywgdGIpKSB7CisJCQkJaWYgKHNrLT5za19yZXVzZSAmJiBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmJgorCQkJCSAgICBzbWFsbGVzdF9zaXplICE9IC0xICYmIC0tYXR0ZW1wdHMgPj0gMCkgeworCQkJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CisJCQkJCWdvdG8gYWdhaW47CisJCQkJfQogCQkJCWdvdG8gZmFpbF91bmxvY2s7CisJCQl9CiAJCX0KIAl9CiB0Yl9ub3RfZm91bmQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKaW5kZXggNmM1MmUwOC4uZWFmM2UyYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYwpAQCAtMjY3LDYgKzI2Nyw3IEBACiAKIHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKmluZXRfZnJhZ19maW5kKHN0cnVjdCBuZXRuc19mcmFncyAqbmYsCiAJCXN0cnVjdCBpbmV0X2ZyYWdzICpmLCB2b2lkICprZXksIHVuc2lnbmVkIGludCBoYXNoKQorCV9fcmVsZWFzZXMoJmYtPmxvY2spCiB7CiAJc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKaW5kZXggNmExMDQ1ZC4uNjI1Y2M1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAkJd3JpdGVfcG5ldCgmdGItPmliX25ldCwgaG9sZF9uZXQobmV0KSk7CiAJCXRiLT5wb3J0ICAgICAgPSBzbnVtOwogCQl0Yi0+ZmFzdHJldXNlID0gMDsKKwkJdGItPm51bV9vd25lcnMgPSAwOwogCQlJTklUX0hMSVNUX0hFQUQoJnRiLT5vd25lcnMpOwogCQlobGlzdF9hZGRfaGVhZCgmdGItPm5vZGUsICZoZWFkLT5jaGFpbik7CiAJfQpAQCAtNTksOCArNjAsMTMgQEAKIHZvaWQgaW5ldF9iaW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGIsCiAJCSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogeworCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oLmhhc2hpbmZvOworCisJYXRvbWljX2luYygmaGFzaGluZm8tPmJzb2NrZXRzKTsKKwogCWluZXRfc2soc2spLT5udW0gPSBzbnVtOwogCXNrX2FkZF9iaW5kX25vZGUoc2ssICZ0Yi0+b3duZXJzKTsKKwl0Yi0+bnVtX293bmVycysrOwogCWluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2ggPSB0YjsKIH0KIApAQCAtNzUsOSArODEsMTIgQEAKIAlzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmhlYWQgPSAmaGFzaGluZm8tPmJoYXNoW2JoYXNoXTsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7CiAKKwlhdG9taWNfZGVjKCZoYXNoaW5mby0+YnNvY2tldHMpOworCiAJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKIAl0YiA9IGluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2g7CiAJX19za19kZWxfYmluZF9ub2RlKHNrKTsKKwl0Yi0+bnVtX293bmVycy0tOwogCWluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2ggPSBOVUxMOwogCWluZXRfc2soc2spLT5udW0gPSAwOwogCWluZXRfYmluZF9idWNrZXRfZGVzdHJveShoYXNoaW5mby0+YmluZF9idWNrZXRfY2FjaGVwLCB0Yik7CkBAIC00NDQsOSArNDUzLDkgQEAKIAkJCSAqLwogCQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0Yiwgbm9kZSwgJmhlYWQtPmNoYWluKSB7CiAJCQkJaWYgKGliX25ldCh0YikgPT0gbmV0ICYmIHRiLT5wb3J0ID09IHBvcnQpIHsKLQkJCQkJV0FSTl9PTihobGlzdF9lbXB0eSgmdGItPm93bmVycykpOwogCQkJCQlpZiAodGItPmZhc3RyZXVzZSA+PSAwKQogCQkJCQkJZ290byBuZXh0X3BvcnQ7CisJCQkJCVdBUk5fT04oaGxpc3RfZW1wdHkoJnRiLT5vd25lcnMpKTsKIAkJCQkJaWYgKCFjaGVja19lc3RhYmxpc2hlZChkZWF0aF9yb3csIHNrLAogCQkJCQkJCQlwb3J0LCAmdHcpKQogCQkJCQkJZ290byBvazsKQEAgLTUyMyw2ICs1MzIsNyBAQAogewogCWludCBpOwogCisJYXRvbWljX3NldCgmaC0+YnNvY2tldHMsIDApOwogCWZvciAoaSA9IDA7IGkgPCBJTkVUX0xIVEFCTEVfU0laRTsgaSsrKSB7CiAJCXNwaW5fbG9ja19pbml0KCZoLT5saXN0ZW5pbmdfaGFzaFtpXS5sb2NrKTsKIAkJSU5JVF9ITElTVF9OVUxMU19IRUFEKCZoLT5saXN0ZW5pbmdfaGFzaFtpXS5oZWFkLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCAwMTAxNTIxLi5lNjI1MTBkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMTY0LDY3ICsxNjQsMTI0IEBACiAKIC8qIEdpdmVuIHNyYywgZHN0IGFuZCBrZXksIGZpbmQgYXBwcm9wcmlhdGUgZm9yIGlucHV0IHR1bm5lbC4gKi8KIAotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGdyZV90dW5uZWxfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBncmVfdHVubmVsX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgICAgICBfX2JlMzIgcmVtb3RlLCBfX2JlMzIgbG9jYWwsCiAJCQkJCSAgICAgIF9fYmUzMiBrZXksIF9fYmUxNiBncmVfcHJvdG8pCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCWludCBsaW5rID0gZGV2LT5pZmluZGV4OwogCXVuc2lnbmVkIGgwID0gSEFTSChyZW1vdGUpOwogCXVuc2lnbmVkIGgxID0gSEFTSChrZXkpOwotCXN0cnVjdCBpcF90dW5uZWwgKnQ7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdDIgPSBOVUxMOworCXN0cnVjdCBpcF90dW5uZWwgKnQsICpjYW5kID0gTlVMTDsKIAlzdHJ1Y3QgaXBncmVfbmV0ICppZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwZ3JlX25ldF9pZCk7CiAJaW50IGRldl90eXBlID0gKGdyZV9wcm90byA9PSBodG9ucyhFVEhfUF9URUIpKSA/CiAJCSAgICAgICBBUlBIUkRfRVRIRVIgOiBBUlBIUkRfSVBHUkU7CisJaW50IHNjb3JlLCBjYW5kX3Njb3JlID0gNDsKIAogCWZvciAodCA9IGlnbi0+dHVubmVsc19yX2xbaDBeaDFdOyB0OyB0ID0gdC0+bmV4dCkgewotCQlpZiAobG9jYWwgPT0gdC0+cGFybXMuaXBoLnNhZGRyICYmIHJlbW90ZSA9PSB0LT5wYXJtcy5pcGguZGFkZHIpIHsKLQkJCWlmICh0LT5wYXJtcy5pX2tleSA9PSBrZXkgJiYgdC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgewotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gZGV2X3R5cGUpCi0JCQkJCXJldHVybiB0OwotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFICYmICF0MikKLQkJCQkJdDIgPSB0OwotCQkJfQorCQlpZiAobG9jYWwgIT0gdC0+cGFybXMuaXBoLnNhZGRyIHx8CisJCSAgICByZW1vdGUgIT0gdC0+cGFybXMuaXBoLmRhZGRyIHx8CisJCSAgICBrZXkgIT0gdC0+cGFybXMuaV9rZXkgfHwKKwkJICAgICEodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCQljb250aW51ZTsKKworCQlpZiAodC0+ZGV2LT50eXBlICE9IEFSUEhSRF9JUEdSRSAmJgorCQkgICAgdC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJY29udGludWU7CisKKwkJc2NvcmUgPSAwOworCQlpZiAodC0+cGFybXMubGluayAhPSBsaW5rKQorCQkJc2NvcmUgfD0gMTsKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCXNjb3JlIHw9IDI7CisJCWlmIChzY29yZSA9PSAwKQorCQkJcmV0dXJuIHQ7CisKKwkJaWYgKHNjb3JlIDwgY2FuZF9zY29yZSkgeworCQkJY2FuZCA9IHQ7CisJCQljYW5kX3Njb3JlID0gc2NvcmU7CiAJCX0KIAl9CiAKIAlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfcltoMF5oMV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmIChyZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyKSB7Ci0JCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmIHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IGRldl90eXBlKQotCQkJCQlyZXR1cm4gdDsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IEFSUEhSRF9JUEdSRSAmJiAhdDIpCi0JCQkJCXQyID0gdDsKLQkJCX0KKwkJaWYgKHJlbW90ZSAhPSB0LT5wYXJtcy5pcGguZGFkZHIgfHwKKwkJICAgIGtleSAhPSB0LT5wYXJtcy5pX2tleSB8fAorCQkgICAgISh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0LT5kZXYtPnR5cGUgIT0gQVJQSFJEX0lQR1JFICYmCisJCSAgICB0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQljb250aW51ZTsKKworCQlzY29yZSA9IDA7CisJCWlmICh0LT5wYXJtcy5saW5rICE9IGxpbmspCisJCQlzY29yZSB8PSAxOworCQlpZiAodC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJc2NvcmUgfD0gMjsKKwkJaWYgKHNjb3JlID09IDApCisJCQlyZXR1cm4gdDsKKworCQlpZiAoc2NvcmUgPCBjYW5kX3Njb3JlKSB7CisJCQljYW5kID0gdDsKKwkJCWNhbmRfc2NvcmUgPSBzY29yZTsKIAkJfQogCX0KIAogCWZvciAodCA9IGlnbi0+dHVubmVsc19sW2gxXTsgdDsgdCA9IHQtPm5leHQpIHsKLQkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciB8fAotCQkgICAgIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguZGFkZHIgJiYKLQkJICAgICAgaXB2NF9pc19tdWx0aWNhc3QobG9jYWwpKSkgewotCQkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiB0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBkZXZfdHlwZSkKLQkJCQkJcmV0dXJuIHQ7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSVBHUkUgJiYgIXQyKQotCQkJCQl0MiA9IHQ7Ci0JCQl9CisJCWlmICgobG9jYWwgIT0gdC0+cGFybXMuaXBoLnNhZGRyICYmCisJCSAgICAgKGxvY2FsICE9IHQtPnBhcm1zLmlwaC5kYWRkciB8fAorCQkgICAgICAhaXB2NF9pc19tdWx0aWNhc3QobG9jYWwpKSkgfHwKKwkJICAgIGtleSAhPSB0LT5wYXJtcy5pX2tleSB8fAorCQkgICAgISh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0LT5kZXYtPnR5cGUgIT0gQVJQSFJEX0lQR1JFICYmCisJCSAgICB0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQljb250aW51ZTsKKworCQlzY29yZSA9IDA7CisJCWlmICh0LT5wYXJtcy5saW5rICE9IGxpbmspCisJCQlzY29yZSB8PSAxOworCQlpZiAodC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJc2NvcmUgfD0gMjsKKwkJaWYgKHNjb3JlID09IDApCisJCQlyZXR1cm4gdDsKKworCQlpZiAoc2NvcmUgPCBjYW5kX3Njb3JlKSB7CisJCQljYW5kID0gdDsKKwkJCWNhbmRfc2NvcmUgPSBzY29yZTsKIAkJfQogCX0KIAogCWZvciAodCA9IGlnbi0+dHVubmVsc193Y1toMV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmICh0LT5wYXJtcy5pX2tleSA9PSBrZXkgJiYgdC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgewotCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBkZXZfdHlwZSkKLQkJCQlyZXR1cm4gdDsKLQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFICYmICF0MikKLQkJCQl0MiA9IHQ7CisJCWlmICh0LT5wYXJtcy5pX2tleSAhPSBrZXkgfHwKKwkJICAgICEodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCQljb250aW51ZTsKKworCQlpZiAodC0+ZGV2LT50eXBlICE9IEFSUEhSRF9JUEdSRSAmJgorCQkgICAgdC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJY29udGludWU7CisKKwkJc2NvcmUgPSAwOworCQlpZiAodC0+cGFybXMubGluayAhPSBsaW5rKQorCQkJc2NvcmUgfD0gMTsKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCXNjb3JlIHw9IDI7CisJCWlmIChzY29yZSA9PSAwKQorCQkJcmV0dXJuIHQ7CisKKwkJaWYgKHNjb3JlIDwgY2FuZF9zY29yZSkgeworCQkJY2FuZCA9IHQ7CisJCQljYW5kX3Njb3JlID0gc2NvcmU7CiAJCX0KIAl9CiAKLQlpZiAodDIpCi0JCXJldHVybiB0MjsKKwlpZiAoY2FuZCAhPSBOVUxMKQorCQlyZXR1cm4gY2FuZDsKIAotCWlmIChpZ24tPmZiX3R1bm5lbF9kZXYtPmZsYWdzJklGRl9VUCkKKwlpZiAoaWduLT5mYl90dW5uZWxfZGV2LT5mbGFncyAmIElGRl9VUCkKIAkJcmV0dXJuIG5ldGRldl9wcml2KGlnbi0+ZmJfdHVubmVsX2Rldik7CisKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjg0LDYgKzM0MSw3IEBACiAJX19iZTMyIHJlbW90ZSA9IHBhcm1zLT5pcGguZGFkZHI7CiAJX19iZTMyIGxvY2FsID0gcGFybXMtPmlwaC5zYWRkcjsKIAlfX2JlMzIga2V5ID0gcGFybXMtPmlfa2V5OworCWludCBsaW5rID0gcGFybXMtPmxpbms7CiAJc3RydWN0IGlwX3R1bm5lbCAqdCwgKip0cDsKIAlzdHJ1Y3QgaXBncmVfbmV0ICppZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwZ3JlX25ldF9pZCk7CiAKQEAgLTI5MSw2ICszNDksNyBAQAogCQlpZiAobG9jYWwgPT0gdC0+cGFybXMuaXBoLnNhZGRyICYmCiAJCSAgICByZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyICYmCiAJCSAgICBrZXkgPT0gdC0+cGFybXMuaV9rZXkgJiYKKwkJICAgIGxpbmsgPT0gdC0+cGFybXMubGluayAmJgogCQkgICAgdHlwZSA9PSB0LT5kZXYtPnR5cGUpCiAJCQlicmVhazsKIApAQCAtNDIxLDcgKzQ4MCw3IEBACiAJfQogCiAJcmVhZF9sb2NrKCZpcGdyZV9sb2NrKTsKLQl0ID0gaXBncmVfdHVubmVsX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKKwl0ID0gaXBncmVfdHVubmVsX2xvb2t1cChza2ItPmRldiwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKIAkJCQlmbGFncyAmIEdSRV9LRVkgPwogCQkJCSooKChfX2JlMzIgKilwKSArIChncmVobGVuIC8gNCkgLSAxKSA6IDAsCiAJCQkJcFsxXSk7CkBAIC00MzIsNyArNDkxLDcgQEAKIAlpZiAodC0+cGFybXMuaXBoLnR0bCA9PSAwICYmIHR5cGUgPT0gSUNNUF9USU1FX0VYQ0VFREVEKQogCQlnb3RvIG91dDsKIAotCWlmIChqaWZmaWVzIC0gdC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHQtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkKIAkJdC0+ZXJyX2NvdW50Kys7CiAJZWxzZQogCQl0LT5lcnJfY291bnQgPSAxOwpAQCAtNTE4LDcgKzU3Nyw3IEBACiAJZ3JlX3Byb3RvID0gKihfX2JlMTYgKikoaCArIDIpOwogCiAJcmVhZF9sb2NrKCZpcGdyZV9sb2NrKTsKLQlpZiAoKHR1bm5lbCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoZGV2X25ldChza2ItPmRldiksCisJaWYgKCh0dW5uZWwgPSBpcGdyZV90dW5uZWxfbG9va3VwKHNrYi0+ZGV2LAogCQkJCQkgIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIGtleSwKIAkJCQkJICBncmVfcHJvdG8pKSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5kZXYtPnN0YXRzOwpAQCAtNzQ0LDcgKzgwMyw4IEBACiAjZW5kaWYKIAogCWlmICh0dW5uZWwtPmVycl9jb3VudCA+IDApIHsKLQkJaWYgKGppZmZpZXMgLSB0dW5uZWwtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXR1bm5lbC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7CiAJCQl0dW5uZWwtPmVycl9jb3VudC0tOwogCiAJCQlkc3RfbGlua19mYWlsdXJlKHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDhlYmU4NmRkLi4zZTdlOTEwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwpAQCAtOTM1LDYgKzkzNSwxMCBAQAogCQkJCQkJCSAgIHNrLT5za19hbGxvY2F0aW9uKTsKIAkJCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKQogCQkJCQllcnIgPSAtRU5PQlVGUzsKKwkJCQllbHNlCisJCQkJCS8qIG9ubHkgdGhlIGluaXRpYWwgZnJhZ21lbnQgaXMKKwkJCQkJICAgdGltZSBzdGFtcGVkICovCisJCQkJCWlwYy0+c2h0eC5mbGFncyA9IDA7CiAJCQl9CiAJCQlpZiAoc2tiID09IE5VTEwpCiAJCQkJZ290byBlcnJvcjsKQEAgLTk0NSw2ICs5NDksNyBAQAogCQkJc2tiLT5pcF9zdW1tZWQgPSBjc3VtbW9kZTsKIAkJCXNrYi0+Y3N1bSA9IDA7CiAJCQlza2JfcmVzZXJ2ZShza2IsIGhoX2xlbik7CisJCQkqc2tiX3R4KHNrYikgPSBpcGMtPnNodHg7CiAKIAkJCS8qCiAJCQkgKglGaW5kIHdoZXJlIHRvIHN0YXJ0IHB1dHRpbmcgYnl0ZXMuCkBAIC0xMzY0LDYgKzEzNjksNyBAQAogCiAJZGFkZHIgPSBpcGMuYWRkciA9IHJ0LT5ydF9zcmM7CiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCiAJaWYgKHJlcGx5b3B0cy5vcHQub3B0bGVuKSB7CiAJCWlwYy5vcHQgPSAmcmVwbHlvcHRzLm9wdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29uZmlnLmMgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCmluZGV4IGQ3MjIwMTMuLjkwZDIyYWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29uZmlnLmMKKysrIGIvbmV0L2lwdjQvaXBjb25maWcuYwpAQCAtMTAwLDggKzEwMCw4IEBACiAjZGVmaW5lIENPTkZfTkFNRVNFUlZFUlNfTUFYICAgMyAgICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiBuYW1lc2VydmVycwogCQkJCQkgICAtICczJyBmcm9tIHJlc29sdi5oICovCiAKLSNkZWZpbmUgTk9ORSBfX2NvbnN0YW50X2h0b25sKElOQUREUl9OT05FKQotI2RlZmluZSBBTlkgX19jb25zdGFudF9odG9ubChJTkFERFJfQU5ZKQorI2RlZmluZSBOT05FIGNwdV90b19iZTMyKElOQUREUl9OT05FKQorI2RlZmluZSBBTlkgY3B1X3RvX2JlMzIoSU5BRERSX0FOWSkKIAogLyoKICAqIFB1YmxpYyBJUCBjb25maWd1cmF0aW9uCkBAIC00MDYsNyArNDA2LDcgQEAKIHN0YXRpYyBpbnQgaWNfcmFycF9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcmFycF9wYWNrZXRfdHlwZSBfX2luaXRkYXRhID0gewotCS50eXBlID0JX19jb25zdGFudF9odG9ucyhFVEhfUF9SQVJQKSwKKwkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX1JBUlApLAogCS5mdW5jID0JaWNfcmFycF9yZWN2LAogfTsKIApAQCAtNTY4LDcgKzU2OCw3IEBACiBzdGF0aWMgaW50IGljX2Jvb3RwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBib290cF9wYWNrZXRfdHlwZSBfX2luaXRkYXRhID0gewotCS50eXBlID0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCisJLnR5cGUgPQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmZ1bmMgPQlpY19ib290cF9yZWN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IDUwNzlkZmIuLjkwNTQxMzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYworKysgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTMyNyw3ICszMjcsNyBAQAogCWlmICh0LT5wYXJtcy5pcGgudHRsID09IDAgJiYgdHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGppZmZpZXMgLSB0LT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKQogCQl0LT5lcnJfY291bnQrKzsKIAllbHNlCiAJCXQtPmVycl9jb3VudCA9IDE7CkBAIC00NjYsNyArNDY2LDggQEAKIAl9CiAKIAlpZiAodHVubmVsLT5lcnJfY291bnQgPiAwKSB7Ci0JCWlmIChqaWZmaWVzIC0gdHVubmVsLT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKKwkJCQl0dW5uZWwtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkgewogCQkJdHVubmVsLT5lcnJfY291bnQtLTsKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKIAkJfSBlbHNlCkBAIC03NTAsNyArNzUxLDcgQEAKIAkucHJpb3JpdHkJPQkxLAogfTsKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9JTkZPICJJUHY0IG92ZXIgSVB2NCB0dW5uZWxpbmcgZHJpdmVyXG4iOwogCiBzdGF0aWMgdm9pZCBpcGlwX2Rlc3Ryb3lfdHVubmVscyhzdHJ1Y3QgaXBpcF9uZXQgKmlwbikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAxNDY2NjQ0Li4xM2U5ZGQzMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCisrKyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtNjcsOSArNjcsNiBAQAogI2RlZmluZSBDT05GSUdfSVBfUElNU00JMQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXJvdXRlX3NvY2tldDsKLQotCiAvKiBCaWcgbG9jaywgcHJvdGVjdGluZyB2aWYgdGFibGUsIG1ydCBjYWNoZSBhbmQgbXJvdXRlIHNvY2tldCBzdGF0ZS4KICAgIE5vdGUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgc2VtYXBob3JlZCB2aWEgcnRubF9sb2NrLgogICovCkBAIC04MCwxOCArNzcsOSBAQAogICoJTXVsdGljYXN0IHJvdXRlciBjb250cm9sIHZhcmlhYmxlcwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdmlmX2RldmljZSB2aWZfdGFibGVbTUFYVklGU107CQkvKiBEZXZpY2VzIAkJKi8KLXN0YXRpYyBpbnQgbWF4dmlmOwotCi0jZGVmaW5lIFZJRl9FWElTVFMoaWR4KSAodmlmX3RhYmxlW2lkeF0uZGV2ICE9IE5VTEwpCi0KLXN0YXRpYyBpbnQgbXJvdXRlX2RvX2Fzc2VydDsJCQkJLyogU2V0IGluIFBJTSBhc3NlcnQJKi8KLXN0YXRpYyBpbnQgbXJvdXRlX2RvX3BpbTsKLQotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKm1mY19jYWNoZV9hcnJheVtNRkNfTElORVNdOwkvKiBGb3J3YXJkaW5nIGNhY2hlCSovCisjZGVmaW5lIFZJRl9FWElTVFMoX25ldCwgX2lkeCkgKChfbmV0KS0+aXB2NC52aWZfdGFibGVbX2lkeF0uZGV2ICE9IE5VTEwpCiAKIHN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICptZmNfdW5yZXNfcXVldWU7CQkvKiBRdWV1ZSBvZiB1bnJlc29sdmVkIGVudHJpZXMgKi8KLXN0YXRpYyBhdG9taWNfdCBjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbjsJCS8qIFNpemUgb2YgdW5yZXNvbHZlZAkqLwogCiAvKiBTcGVjaWFsIHNwaW5sb2NrIGZvciBxdWV1ZSBvZiB1bnJlc29sdmVkIGVudHJpZXMgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZjX3VucmVzX2xvY2spOwpAQCAtMTA3LDcgKzk1LDggQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IGlwX21yX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIGludCBsb2NhbCk7Ci1zdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KTsKK3N0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7CiBzdGF0aWMgaW50IGlwbXJfZmlsbF9tcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mY19jYWNoZSAqYywgc3RydWN0IHJ0bXNnICpydG0pOwogCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyCkBAIC0xMjAsOSArMTA5LDExIEBACiAKIHN0YXRpYyB2b2lkIGlwbXJfZGVsX3R1bm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgdmlmY3RsICp2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwogCWRldl9jbG9zZShkZXYpOwogCi0JZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCAidHVubDAiKTsKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsICJ0dW5sMCIpOwogCWlmIChkZXYpIHsKIAkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAJCXN0cnVjdCBpZnJlcSBpZnI7CkBAIC0xNDgsMTEgKzEzOSwxMSBAQAogfQogCiBzdGF0aWMKLXN0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IHZpZmN0bCAqdikKK3N0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwogCi0JZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCAidHVubDAiKTsKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsICJ0dW5sMCIpOwogCiAJaWYgKGRldikgewogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKQEAgLTE4MSw3ICsxNzIsOCBAQAogCiAJCWRldiA9IE5VTEw7CiAKLQkJaWYgKGVyciA9PSAwICYmIChkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIHAubmFtZSkpICE9IE5VTEwpIHsKKwkJaWYgKGVyciA9PSAwICYmCisJCSAgICAoZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBwLm5hbWUpKSAhPSBOVUxMKSB7CiAJCQlkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAKIAkJCWluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldik7CkBAIC0yMDksMTQgKzIwMSwxNSBAQAogCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCiAKLXN0YXRpYyBpbnQgcmVnX3ZpZl9udW0gPSAtMTsKLQogc3RhdGljIGludCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCWlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgcmVnX3ZpZl9udW0sIElHTVBNU0dfV0hPTEVQS1QpOworCWlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCBuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtLAorCQkJICBJR01QTVNHX1dIT0xFUEtUKTsKIAlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwpAQCAtMjgzLDE2ICsyNzYsMTYgQEAKICAqCUBub3RpZnk6IFNldCB0byAxLCBpZiB0aGUgY2FsbGVyIGlzIGEgbm90aWZpZXJfY2FsbAogICovCiAKLXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShpbnQgdmlmaSwgaW50IG5vdGlmeSkKK3N0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIGludCB2aWZpLCBpbnQgbm90aWZ5KQogewogCXN0cnVjdCB2aWZfZGV2aWNlICp2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCi0JaWYgKHZpZmkgPCAwIHx8IHZpZmkgPj0gbWF4dmlmKQorCWlmICh2aWZpIDwgMCB8fCB2aWZpID49IG5ldC0+aXB2NC5tYXh2aWYpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAotCXYgPSAmdmlmX3RhYmxlW3ZpZmldOworCXYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZpXTsKIAogCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKIAlkZXYgPSB2LT5kZXY7CkBAIC0zMDQsMTcgKzI5NywxNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTQotCWlmICh2aWZpID09IHJlZ192aWZfbnVtKQotCQlyZWdfdmlmX251bSA9IC0xOworCWlmICh2aWZpID09IG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0pCisJCW5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPSAtMTsKICNlbmRpZgogCi0JaWYgKHZpZmkrMSA9PSBtYXh2aWYpIHsKKwlpZiAodmlmaSsxID09IG5ldC0+aXB2NC5tYXh2aWYpIHsKIAkJaW50IHRtcDsKIAkJZm9yICh0bXA9dmlmaS0xOyB0bXA+PTA7IHRtcC0tKSB7Ci0JCQlpZiAoVklGX0VYSVNUUyh0bXApKQorCQkJaWYgKFZJRl9FWElTVFMobmV0LCB0bXApKQogCQkJCWJyZWFrOwogCQl9Ci0JCW1heHZpZiA9IHRtcCsxOworCQluZXQtPmlwdjQubWF4dmlmID0gdG1wKzE7CiAJfQogCiAJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CkBAIC0zMzMsNiArMzI2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcG1yX2NhY2hlX2ZyZWUoc3RydWN0IG1mY19jYWNoZSAqYykKK3sKKwlyZWxlYXNlX25ldChtZmNfbmV0KGMpKTsKKwlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7Cit9CisKIC8qIERlc3Ryb3kgYW4gdW5yZXNvbHZlZCBjYWNoZSBlbnRyeSwga2lsbGluZyBxdWV1ZWQgc2ticwogICAgYW5kIHJlcG9ydGluZyBlcnJvciB0byBuZXRsaW5rIHJlYWRlcnMuCiAgKi8KQEAgLTM0MSw4ICszNDAsOSBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5sbXNnZXJyICplOworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoYyk7CiAKLQlhdG9taWNfZGVjKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CisJYXRvbWljX2RlYygmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmMtPm1mY191bi51bnJlcy51bnJlc29sdmVkKSkpIHsKIAkJaWYgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDApIHsKQEAgLTM1NCwxMiArMzU0LDEyIEBACiAJCQllLT5lcnJvciA9IC1FVElNRURPVVQ7CiAJCQltZW1zZXQoJmUtPm1zZywgMCwgc2l6ZW9mKGUtPm1zZykpOwogCi0JCQlydG5sX3VuaWNhc3Qoc2tiLCAmaW5pdF9uZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOworCQkJcnRubF91bmljYXN0KHNrYiwgbmV0LCBORVRMSU5LX0NCKHNrYikucGlkKTsKIAkJfSBlbHNlCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiAKLQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJaXBtcl9jYWNoZV9mcmVlKGMpOwogfQogCiAKQEAgLTM3Niw3ICszNzYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgPT0gMCkKKwlpZiAobWZjX3VucmVzX3F1ZXVlID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCiAJbm93ID0gamlmZmllczsKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQlpcG1yX2Rlc3Ryb3lfdW5yZXMoYyk7CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikpCisJaWYgKG1mY191bnJlc19xdWV1ZSAhPSBOVUxMKQogCQltb2RfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyLCBqaWZmaWVzICsgZXhwaXJlcyk7CiAKIG91dDoKQEAgLTQwOSwxMyArNDA5LDE1IEBACiBzdGF0aWMgdm9pZCBpcG1yX3VwZGF0ZV90aHJlc2hvbGRzKHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBjaGFyICp0dGxzKQogewogCWludCB2aWZpOworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoY2FjaGUpOwogCiAJY2FjaGUtPm1mY191bi5yZXMubWludmlmID0gTUFYVklGUzsKIAljYWNoZS0+bWZjX3VuLnJlcy5tYXh2aWYgPSAwOwogCW1lbXNldChjYWNoZS0+bWZjX3VuLnJlcy50dGxzLCAyNTUsIE1BWFZJRlMpOwogCi0JZm9yICh2aWZpPTA7IHZpZmk8bWF4dmlmOyB2aWZpKyspIHsKLQkJaWYgKFZJRl9FWElTVFModmlmaSkgJiYgdHRsc1t2aWZpXSAmJiB0dGxzW3ZpZmldIDwgMjU1KSB7CisJZm9yICh2aWZpID0gMDsgdmlmaSA8IG5ldC0+aXB2NC5tYXh2aWY7IHZpZmkrKykgeworCQlpZiAoVklGX0VYSVNUUyhuZXQsIHZpZmkpICYmCisJCSAgICB0dGxzW3ZpZmldICYmIHR0bHNbdmlmaV0gPCAyNTUpIHsKIAkJCWNhY2hlLT5tZmNfdW4ucmVzLnR0bHNbdmlmaV0gPSB0dGxzW3ZpZmldOwogCQkJaWYgKGNhY2hlLT5tZmNfdW4ucmVzLm1pbnZpZiA+IHZpZmkpCiAJCQkJY2FjaGUtPm1mY191bi5yZXMubWludmlmID0gdmlmaTsKQEAgLTQyNSwxNiArNDI3LDE2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHZpZl9hZGQoc3RydWN0IHZpZmN0bCAqdmlmYywgaW50IG1ydHNvY2spCitzdGF0aWMgaW50IHZpZl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2aWZjLCBpbnQgbXJ0c29jaykKIHsKIAlpbnQgdmlmaSA9IHZpZmMtPnZpZmNfdmlmaTsKLQlzdHJ1Y3QgdmlmX2RldmljZSAqdiA9ICZ2aWZfdGFibGVbdmlmaV07CisJc3RydWN0IHZpZl9kZXZpY2UgKnYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZpXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAlpbnQgZXJyOwogCiAJLyogSXMgdmlmIGJ1c3kgPyAqLwotCWlmIChWSUZfRVhJU1RTKHZpZmkpKQorCWlmIChWSUZfRVhJU1RTKG5ldCwgdmlmaSkpCiAJCXJldHVybiAtRUFERFJJTlVTRTsKIAogCXN3aXRjaCAodmlmYy0+dmlmY19mbGFncykgewpAQCAtNDQ0LDcgKzQ0Niw3IEBACiAJCSAqIFNwZWNpYWwgUHVycG9zZSBWSUYgaW4gUElNCiAJCSAqIEFsbCB0aGUgcGFja2V0cyB3aWxsIGJlIHNlbnQgdG8gdGhlIGRhZW1vbgogCQkgKi8KLQkJaWYgKHJlZ192aWZfbnVtID49IDApCisJCWlmIChuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID49IDApCiAJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCWRldiA9IGlwbXJfcmVnX3ZpZigpOwogCQlpZiAoIWRldikKQEAgLTQ1OCw3ICs0NjAsNyBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgVklGRl9UVU5ORUw6Ci0JCWRldiA9IGlwbXJfbmV3X3R1bm5lbCh2aWZjKTsKKwkJZGV2ID0gaXBtcl9uZXdfdHVubmVsKG5ldCwgdmlmYyk7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCQllcnIgPSBkZXZfc2V0X2FsbG11bHRpKGRldiwgMSk7CkBAIC00NjksNyArNDcxLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIDA6Ci0JCWRldiA9IGlwX2Rldl9maW5kKCZpbml0X25ldCwgdmlmYy0+dmlmY19sY2xfYWRkci5zX2FkZHIpOworCQlkZXYgPSBpcF9kZXZfZmluZChuZXQsIHZpZmMtPnZpZmNfbGNsX2FkZHIuc19hZGRyKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKQEAgLTUxMCwyMCArNTEyLDIyIEBACiAJdi0+ZGV2ID0gZGV2OwogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCWlmICh2LT5mbGFncyZWSUZGX1JFR0lTVEVSKQotCQlyZWdfdmlmX251bSA9IHZpZmk7CisJCW5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPSB2aWZpOwogI2VuZGlmCi0JaWYgKHZpZmkrMSA+IG1heHZpZikKLQkJbWF4dmlmID0gdmlmaSsxOworCWlmICh2aWZpKzEgPiBuZXQtPmlwdjQubWF4dmlmKQorCQluZXQtPmlwdjQubWF4dmlmID0gdmlmaSsxOwogCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9maW5kKF9fYmUzMiBvcmlnaW4sIF9fYmUzMiBtY2FzdGdycCkKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgX19iZTMyIG9yaWdpbiwKKwkJCQkJIF9fYmUzMiBtY2FzdGdycCkKIHsKIAlpbnQgbGluZSA9IE1GQ19IQVNIKG1jYXN0Z3JwLCBvcmlnaW4pOwogCXN0cnVjdCBtZmNfY2FjaGUgKmM7CiAKLQlmb3IgKGM9bWZjX2NhY2hlX2FycmF5W2xpbmVdOyBjOyBjID0gYy0+bmV4dCkgeworCWZvciAoYyA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07IGM7IGMgPSBjLT5uZXh0KSB7CiAJCWlmIChjLT5tZmNfb3JpZ2luPT1vcmlnaW4gJiYgYy0+bWZjX21jYXN0Z3JwPT1tY2FzdGdycCkKIAkJCWJyZWFrOwogCX0KQEAgLTUzMywyMiArNTM3LDI0IEBACiAvKgogICoJQWxsb2NhdGUgYSBtdWx0aWNhc3QgY2FjaGUgZW50cnkKICAqLwotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Modm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKGMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJYy0+bWZjX3VuLnJlcy5taW52aWYgPSBNQVhWSUZTOworCW1mY19uZXRfc2V0KGMsIG5ldCk7CiAJcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvY191bnJlcyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9BVE9NSUMpOwogCWlmIChjID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmMtPm1mY191bi51bnJlcy51bnJlc29sdmVkKTsKIAljLT5tZmNfdW4udW5yZXMuZXhwaXJlcyA9IGppZmZpZXMgKyAxMCpIWjsKKwltZmNfbmV0X3NldChjLCBuZXQpOwogCXJldHVybiBjOwogfQogCkBAIC01ODEsNyArNTg3LDcgQEAKIAkJCQltZW1zZXQoJmUtPm1zZywgMCwgc2l6ZW9mKGUtPm1zZykpOwogCQkJfQogCi0JCQlydG5sX3VuaWNhc3Qoc2tiLCAmaW5pdF9uZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOworCQkJcnRubF91bmljYXN0KHNrYiwgbWZjX25ldChjKSwgTkVUTElOS19DQihza2IpLnBpZCk7CiAJCX0gZWxzZQogCQkJaXBfbXJfZm9yd2FyZChza2IsIGMsIDApOwogCX0KQEAgLTU5NCw3ICs2MDAsOCBAQAogICoJQ2FsbGVkIHVuZGVyIG1ydF9sb2NrLgogICovCiAKLXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpCitzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAljb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7CkBAIC02MjYsNyArNjMzLDcgQEAKIAkJbWVtY3B5KG1zZywgc2tiX25ldHdvcmtfaGVhZGVyKHBrdCksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAkJbXNnLT5pbV9tc2d0eXBlID0gSUdNUE1TR19XSE9MRVBLVDsKIAkJbXNnLT5pbV9tYnogPSAwOwotCQltc2ctPmltX3ZpZiA9IHJlZ192aWZfbnVtOworCQltc2ctPmltX3ZpZiA9IG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW07CiAJCWlwX2hkcihza2IpLT5paGwgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSA+PiAyOwogCQlpcF9oZHIoc2tiKS0+dG90X2xlbiA9IGh0b25zKG50b2hzKGlwX2hkcihwa3QpLT50b3RfbGVuKSArCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwpAQCAtNjU4LDcgKzY2NSw3IEBACiAJc2tiLT50cmFuc3BvcnRfaGVhZGVyID0gc2tiLT5uZXR3b3JrX2hlYWRlcjsKIAl9CiAKLQlpZiAobXJvdXRlX3NvY2tldCA9PSBOVUxMKSB7CisJaWYgKG5ldC0+aXB2NC5tcm91dGVfc2sgPT0gTlVMTCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNjY2LDcgKzY3Myw4IEBACiAJLyoKIAkgKglEZWxpdmVyIHRvIG1yb3V0ZWQKIAkgKi8KLQlpZiAoKHJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihtcm91dGVfc29ja2V0LCBza2IpKTwwKSB7CisJcmV0ID0gc29ja19xdWV1ZV9yY3Zfc2tiKG5ldC0+aXB2NC5tcm91dGVfc2ssIHNrYik7CisJaWYgKHJldCA8IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1yb3V0ZTogcGVuZGluZyBxdWV1ZSBmdWxsLCBkcm9wcGluZyBlbnRyaWVzLlxuIik7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNjgwLDcgKzY4OCw3IEBACiAgKi8KIAogc3RhdGljIGludAotaXBtcl9jYWNoZV91bnJlc29sdmVkKHZpZmlfdCB2aWZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraXBtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBuZXQgKm5ldCwgdmlmaV90IHZpZmksIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjOwpAQCAtNjg4LDcgKzY5Niw4IEBACiAKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAlmb3IgKGM9bWZjX3VucmVzX3F1ZXVlOyBjOyBjPWMtPm5leHQpIHsKLQkJaWYgKGMtPm1mY19tY2FzdGdycCA9PSBpcGgtPmRhZGRyICYmCisJCWlmIChuZXRfZXEobWZjX25ldChjKSwgbmV0KSAmJgorCQkgICAgYy0+bWZjX21jYXN0Z3JwID09IGlwaC0+ZGFkZHIgJiYKIAkJICAgIGMtPm1mY19vcmlnaW4gPT0gaXBoLT5zYWRkcikKIAkJCWJyZWFrOwogCX0KQEAgLTY5OCw4ICs3MDcsOCBAQAogCQkgKglDcmVhdGUgYSBuZXcgZW50cnkgaWYgYWxsb3dhYmxlCiAJCSAqLwogCi0JCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pID49IDEwIHx8Ci0JCSAgICAoYz1pcG1yX2NhY2hlX2FsbG9jX3VucmVzKCkpPT1OVUxMKSB7CisJCWlmIChhdG9taWNfcmVhZCgmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSA+PSAxMCB8fAorCQkgICAgKGMgPSBpcG1yX2NhY2hlX2FsbG9jX3VucmVzKG5ldCkpID09IE5VTEwpIHsKIAkJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtNzE2LDE4ICs3MjUsMTkgQEAKIAkJLyoKIAkJICoJUmVmbGVjdCBmaXJzdCBxdWVyeSBhdCBtcm91dGVkLgogCQkgKi8KLQkJaWYgKChlcnIgPSBpcG1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSkpPDApIHsKKwkJZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7CisJCWlmIChlcnIgPCAwKSB7CiAJCQkvKiBJZiB0aGUgcmVwb3J0IGZhaWxlZCB0aHJvdyB0aGUgY2FjaGUgZW50cnkKIAkJCSAgIG91dCAtIEJyYWQgUGFya2VyCiAJCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKLQkJCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwkJCWlwbXJfY2FjaGVfZnJlZShjKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWF0b21pY19pbmMoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKKwkJYXRvbWljX2luYygmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKIAkJYy0+bmV4dCA9IG1mY191bnJlc19xdWV1ZTsKIAkJbWZjX3VucmVzX3F1ZXVlID0gYzsKIApAQCAtNzUzLDM1ICs3NjMsMzcgQEAKICAqCU1GQyBjYWNoZSBtYW5pcHVsYXRpb24gYnkgdXNlciBzcGFjZSBtcm91dGUgZGFlbW9uCiAgKi8KIAotc3RhdGljIGludCBpcG1yX21mY19kZWxldGUoc3RydWN0IG1mY2N0bCAqbWZjKQorc3RhdGljIGludCBpcG1yX21mY19kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbWZjY3RsICptZmMpCiB7CiAJaW50IGxpbmU7CiAJc3RydWN0IG1mY19jYWNoZSAqYywgKipjcDsKIAogCWxpbmUgPSBNRkNfSEFTSChtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyLCBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkcik7CiAKLQlmb3IgKGNwPSZtZmNfY2FjaGVfYXJyYXlbbGluZV07IChjPSpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgeworCWZvciAoY3AgPSAmbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsKKwkgICAgIChjID0gKmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CiAJCWlmIChjLT5tZmNfb3JpZ2luID09IG1mYy0+bWZjY19vcmlnaW4uc19hZGRyICYmCiAJCSAgICBjLT5tZmNfbWNhc3RncnAgPT0gbWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikgewogCQkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwogCQkJKmNwID0gYy0+bmV4dDsKIAkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCQlpcG1yX2NhY2hlX2ZyZWUoYyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAotc3RhdGljIGludCBpcG1yX21mY19hZGQoc3RydWN0IG1mY2N0bCAqbWZjLCBpbnQgbXJ0c29jaykKK3N0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1mY2N0bCAqbWZjLCBpbnQgbXJ0c29jaykKIHsKIAlpbnQgbGluZTsKIAlzdHJ1Y3QgbWZjX2NhY2hlICp1YywgKmMsICoqY3A7CiAKIAlsaW5lID0gTUZDX0hBU0gobWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkciwgbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIpOwogCi0JZm9yIChjcD0mbWZjX2NhY2hlX2FycmF5W2xpbmVdOyAoYz0qY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKKwlmb3IgKGNwID0gJm5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07CisJICAgICAoYyA9ICpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgewogCQlpZiAoYy0+bWZjX29yaWdpbiA9PSBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkciAmJgogCQkgICAgYy0+bWZjX21jYXN0Z3JwID09IG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIpCiAJCQlicmVhazsKQEAgLTgwMCw3ICs4MTIsNyBAQAogCWlmICghaXB2NF9pc19tdWx0aWNhc3QobWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYyA9IGlwbXJfY2FjaGVfYWxsb2MoKTsKKwljID0gaXBtcl9jYWNoZV9hbGxvYyhuZXQpOwogCWlmIChjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC04MTIsOCArODI0LDggQEAKIAkJYy0+bWZjX2ZsYWdzIHw9IE1GQ19TVEFUSUM7CiAKIAl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7Ci0JYy0+bmV4dCA9IG1mY19jYWNoZV9hcnJheVtsaW5lXTsKLQltZmNfY2FjaGVfYXJyYXlbbGluZV0gPSBjOworCWMtPm5leHQgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOworCW5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV0gPSBjOwogCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCiAJLyoKQEAgLTgyMywxOSArODM1LDIxIEBACiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJZm9yIChjcCA9ICZtZmNfdW5yZXNfcXVldWU7ICh1Yz0qY3ApICE9IE5VTEw7CiAJICAgICBjcCA9ICZ1Yy0+bmV4dCkgewotCQlpZiAodWMtPm1mY19vcmlnaW4gPT0gYy0+bWZjX29yaWdpbiAmJgorCQlpZiAobmV0X2VxKG1mY19uZXQodWMpLCBuZXQpICYmCisJCSAgICB1Yy0+bWZjX29yaWdpbiA9PSBjLT5tZmNfb3JpZ2luICYmCiAJCSAgICB1Yy0+bWZjX21jYXN0Z3JwID09IGMtPm1mY19tY2FzdGdycCkgewogCQkJKmNwID0gdWMtPm5leHQ7Ci0JCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pKQotCQkJCWRlbF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIpOworCQkJYXRvbWljX2RlYygmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKIAkJCWJyZWFrOwogCQl9CiAJfQorCWlmIChtZmNfdW5yZXNfcXVldWUgPT0gTlVMTCkKKwkJZGVsX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lcik7CiAJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAogCWlmICh1YykgewogCQlpcG1yX2NhY2hlX3Jlc29sdmUodWMsIGMpOwotCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgdWMpOworCQlpcG1yX2NhY2hlX2ZyZWUodWMpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTg0NCwxNiArODU4LDE2IEBACiAgKglDbG9zZSB0aGUgbXVsdGljYXN0IHNvY2tldCwgYW5kIGNsZWFyIHRoZSB2aWYgdGFibGVzIGV0YwogICovCiAKLXN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGk7CiAKIAkvKgogCSAqCVNodXQgZG93biBhbGwgYWN0aXZlIHZpZiBlbnRyaWVzCiAJICovCi0JZm9yIChpPTA7IGk8bWF4dmlmOyBpKyspIHsKLQkJaWYgKCEodmlmX3RhYmxlW2ldLmZsYWdzJlZJRkZfU1RBVElDKSkKLQkJCXZpZl9kZWxldGUoaSwgMCk7CisJZm9yIChpID0gMDsgaSA8IG5ldC0+aXB2NC5tYXh2aWY7IGkrKykgeworCQlpZiAoIShuZXQtPmlwdjQudmlmX3RhYmxlW2ldLmZsYWdzJlZJRkZfU1RBVElDKSkKKwkJCXZpZl9kZWxldGUobmV0LCBpLCAwKTsKIAl9CiAKIAkvKgpAQCAtODYyLDcgKzg3Niw3IEBACiAJZm9yIChpPTA7IGk8TUZDX0xJTkVTOyBpKyspIHsKIAkJc3RydWN0IG1mY19jYWNoZSAqYywgKipjcDsKIAotCQljcCA9ICZtZmNfY2FjaGVfYXJyYXlbaV07CisJCWNwID0gJm5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbaV07CiAJCXdoaWxlICgoYyA9ICpjcCkgIT0gTlVMTCkgewogCQkJaWYgKGMtPm1mY19mbGFncyZNRkNfU1RBVElDKSB7CiAJCQkJY3AgPSAmYy0+bmV4dDsKQEAgLTg3MiwyMiArODg2LDIzIEBACiAJCQkqY3AgPSBjLT5uZXh0OwogCQkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwkJCWlwbXJfY2FjaGVfZnJlZShjKTsKIAkJfQogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pICE9IDApIHsKLQkJc3RydWN0IG1mY19jYWNoZSAqYzsKKwlpZiAoYXRvbWljX3JlYWQoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgIT0gMCkgeworCQlzdHJ1Y3QgbWZjX2NhY2hlICpjLCAqKmNwOwogCiAJCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwotCQl3aGlsZSAobWZjX3VucmVzX3F1ZXVlICE9IE5VTEwpIHsKLQkJCWMgPSBtZmNfdW5yZXNfcXVldWU7Ci0JCQltZmNfdW5yZXNfcXVldWUgPSBjLT5uZXh0OwotCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwkJY3AgPSAmbWZjX3VucmVzX3F1ZXVlOworCQl3aGlsZSAoKGMgPSAqY3ApICE9IE5VTEwpIHsKKwkJCWlmICghbmV0X2VxKG1mY19uZXQoYyksIG5ldCkpIHsKKwkJCQljcCA9ICZjLT5uZXh0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJKmNwID0gYy0+bmV4dDsKIAogCQkJaXBtcl9kZXN0cm95X3VucmVzKGMpOwotCi0JCQlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCX0KQEAgLTg5NSwxNSArOTEwLDE3IEBACiAKIHN0YXRpYyB2b2lkIG1ydHNvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwogCXJ0bmxfbG9jaygpOwotCWlmIChzayA9PSBtcm91dGVfc29ja2V0KSB7Ci0JCUlQVjRfREVWQ09ORl9BTEwoc29ja19uZXQoc2spLCBNQ19GT1JXQVJESU5HKS0tOworCWlmIChzayA9PSBuZXQtPmlwdjQubXJvdXRlX3NrKSB7CisJCUlQVjRfREVWQ09ORl9BTEwobmV0LCBNQ19GT1JXQVJESU5HKS0tOwogCiAJCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKLQkJbXJvdXRlX3NvY2tldCA9IE5VTEw7CisJCW5ldC0+aXB2NC5tcm91dGVfc2sgPSBOVUxMOwogCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQltcm91dGVfY2xlYW5fdGFibGVzKHNrKTsKKwkJbXJvdXRlX2NsZWFuX3RhYmxlcyhuZXQpOwogCX0KIAlydG5sX3VubG9jaygpOwogfQpAQCAtOTIwLDkgKzkzNywxMCBAQAogCWludCByZXQ7CiAJc3RydWN0IHZpZmN0bCB2aWY7CiAJc3RydWN0IG1mY2N0bCBtZmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJaWYgKG9wdG5hbWUgIT0gTVJUX0lOSVQpIHsKLQkJaWYgKHNrICE9IG1yb3V0ZV9zb2NrZXQgJiYgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCWlmIChzayAhPSBuZXQtPmlwdjQubXJvdXRlX3NrICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCkBAIC05MzUsNyArOTUzLDcgQEAKIAkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAKIAkJcnRubF9sb2NrKCk7Ci0JCWlmIChtcm91dGVfc29ja2V0KSB7CisJCWlmIChuZXQtPmlwdjQubXJvdXRlX3NrKSB7CiAJCQlydG5sX3VubG9jaygpOwogCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQl9CkBAIC05NDMsMTUgKzk2MSwxNSBAQAogCQlyZXQgPSBpcF9yYV9jb250cm9sKHNrLCAxLCBtcnRzb2NrX2Rlc3RydWN0KTsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7Ci0JCQltcm91dGVfc29ja2V0ID0gc2s7CisJCQluZXQtPmlwdjQubXJvdXRlX3NrID0gc2s7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQkJSVBWNF9ERVZDT05GX0FMTChzb2NrX25ldChzayksIE1DX0ZPUldBUkRJTkcpKys7CisJCQlJUFY0X0RFVkNPTkZfQUxMKG5ldCwgTUNfRk9SV0FSRElORykrKzsKIAkJfQogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gcmV0OwogCWNhc2UgTVJUX0RPTkU6Ci0JCWlmIChzayAhPSBtcm91dGVfc29ja2V0KQorCQlpZiAoc2sgIT0gbmV0LT5pcHY0Lm1yb3V0ZV9zaykKIAkJCXJldHVybiAtRUFDQ0VTOwogCQlyZXR1cm4gaXBfcmFfY29udHJvbChzaywgMCwgTlVMTCk7CiAJY2FzZSBNUlRfQUREX1ZJRjoKQEAgLTk2NCw5ICs5ODIsOSBAQAogCQkJcmV0dXJuIC1FTkZJTEU7CiAJCXJ0bmxfbG9jaygpOwogCQlpZiAob3B0bmFtZSA9PSBNUlRfQUREX1ZJRikgewotCQkJcmV0ID0gdmlmX2FkZCgmdmlmLCBzaz09bXJvdXRlX3NvY2tldCk7CisJCQlyZXQgPSB2aWZfYWRkKG5ldCwgJnZpZiwgc2sgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9zayk7CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSB2aWZfZGVsZXRlKHZpZi52aWZjX3ZpZmksIDApOworCQkJcmV0ID0gdmlmX2RlbGV0ZShuZXQsIHZpZi52aWZjX3ZpZmksIDApOwogCQl9CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiByZXQ7CkBAIC05ODMsOSArMTAwMSw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcnRubF9sb2NrKCk7CiAJCWlmIChvcHRuYW1lID09IE1SVF9ERUxfTUZDKQotCQkJcmV0ID0gaXBtcl9tZmNfZGVsZXRlKCZtZmMpOworCQkJcmV0ID0gaXBtcl9tZmNfZGVsZXRlKG5ldCwgJm1mYyk7CiAJCWVsc2UKLQkJCXJldCA9IGlwbXJfbWZjX2FkZCgmbWZjLCBzaz09bXJvdXRlX3NvY2tldCk7CisJCQlyZXQgPSBpcG1yX21mY19hZGQobmV0LCAmbWZjLCBzayA9PSBuZXQtPmlwdjQubXJvdXRlX3NrKTsKIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKIAkJLyoKQEAgLTk5Niw3ICsxMDE0LDcgQEAKIAkJaW50IHY7CiAJCWlmIChnZXRfdXNlcih2LChpbnQgX191c2VyICopb3B0dmFsKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQltcm91dGVfZG9fYXNzZXJ0PSh2KT8xOjA7CisJCW5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0ID0gKHYpID8gMSA6IDA7CiAJCXJldHVybiAwOwogCX0KICNpZmRlZiBDT05GSUdfSVBfUElNU00KQEAgLTEwMTAsMTEgKzEwMjgsMTEgQEAKIAogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gMDsKLQkJaWYgKHYgIT0gbXJvdXRlX2RvX3BpbSkgewotCQkJbXJvdXRlX2RvX3BpbSA9IHY7Ci0JCQltcm91dGVfZG9fYXNzZXJ0ID0gdjsKKwkJaWYgKHYgIT0gbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0pIHsKKwkJCW5ldC0+aXB2NC5tcm91dGVfZG9fcGltID0gdjsKKwkJCW5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0ID0gdjsKICNpZmRlZiBDT05GSUdfSVBfUElNU01fVjIKLQkJCWlmIChtcm91dGVfZG9fcGltKQorCQkJaWYgKG5ldC0+aXB2NC5tcm91dGVfZG9fcGltKQogCQkJCXJldCA9IGluZXRfYWRkX3Byb3RvY29sKCZwaW1fcHJvdG9jb2wsCiAJCQkJCQkJSVBQUk9UT19QSU0pOwogCQkJZWxzZQpAQCAtMTA0NSw2ICsxMDYzLDcgQEAKIHsKIAlpbnQgb2xyOwogCWludCB2YWw7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJaWYgKG9wdG5hbWUgIT0gTVJUX1ZFUlNJT04gJiYKICNpZmRlZiBDT05GSUdfSVBfUElNU00KQEAgLTEwNjYsMTAgKzEwODUsMTAgQEAKIAkJdmFsID0gMHgwMzA1OwogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCWVsc2UgaWYgKG9wdG5hbWUgPT0gTVJUX1BJTSkKLQkJdmFsID0gbXJvdXRlX2RvX3BpbTsKKwkJdmFsID0gbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW07CiAjZW5kaWYKIAllbHNlCi0JCXZhbCA9IG1yb3V0ZV9kb19hc3NlcnQ7CisJCXZhbCA9IG5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0OwogCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmdmFsLCBvbHIpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTEwODUsMTYgKzExMDQsMTcgQEAKIAlzdHJ1Y3Qgc2lvY192aWZfcmVxIHZyOwogCXN0cnVjdCB2aWZfZGV2aWNlICp2aWY7CiAJc3RydWN0IG1mY19jYWNoZSAqYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dFVFZJRkNOVDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ciwgYXJnLCBzaXplb2YodnIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAodnIudmlmaSA+PSBtYXh2aWYpCisJCWlmICh2ci52aWZpID49IG5ldC0+aXB2NC5tYXh2aWYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JCXZpZj0mdmlmX3RhYmxlW3ZyLnZpZmldOwotCQlpZiAoVklGX0VYSVNUUyh2ci52aWZpKSkJeworCQl2aWYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2ci52aWZpXTsKKwkJaWYgKFZJRl9FWElTVFMobmV0LCB2ci52aWZpKSkgewogCQkJdnIuaWNvdW50ID0gdmlmLT5wa3RfaW47CiAJCQl2ci5vY291bnQgPSB2aWYtPnBrdF9vdXQ7CiAJCQl2ci5pYnl0ZXMgPSB2aWYtPmJ5dGVzX2luOwpAQCAtMTExMiw3ICsxMTMyLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCQljID0gaXBtcl9jYWNoZV9maW5kKHNyLnNyYy5zX2FkZHIsIHNyLmdycC5zX2FkZHIpOworCQljID0gaXBtcl9jYWNoZV9maW5kKG5ldCwgc3Iuc3JjLnNfYWRkciwgc3IuZ3JwLnNfYWRkcik7CiAJCWlmIChjKSB7CiAJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKIAkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOwpAQCAtMTEzNCwxOCArMTE1NCwxOSBAQAogc3RhdGljIGludCBpcG1yX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdjsKIAlpbnQgY3Q7CiAKLQlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX1VOUkVHSVNURVIpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKLQl2PSZ2aWZfdGFibGVbMF07Ci0JZm9yIChjdD0wOyBjdDxtYXh2aWY7IGN0KyssdisrKSB7CisJdiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlWzBdOworCWZvciAoY3QgPSAwOyBjdCA8IG5ldC0+aXB2NC5tYXh2aWY7IGN0KyssIHYrKykgewogCQlpZiAodi0+ZGV2ID09IGRldikKLQkJCXZpZl9kZWxldGUoY3QsIDEpOworCQkJdmlmX2RlbGV0ZShuZXQsIGN0LCAxKTsKIAl9CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtMTIwNSw4ICsxMjI2LDkgQEAKIAogc3RhdGljIHZvaWQgaXBtcl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmNfY2FjaGUgKmMsIGludCB2aWZpKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoYyk7CiAJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmID0gJnZpZl90YWJsZVt2aWZpXTsKKwlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdmlmaV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlpbnQgICAgZW5jYXAgPSAwOwpAQCAtMTIyMCw5ICsxMjQyLDggQEAKIAkJdmlmLT5ieXRlc19vdXQgKz0gc2tiLT5sZW47CiAJCXZpZi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJdmlmLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybjsKKwkJaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpOworCQlnb3RvIG91dF9mcmVlOwogCX0KICNlbmRpZgogCkBAIC0xMjMzLDcgKzEyNTQsNyBAQAogCQkJCQkJLnNhZGRyID0gdmlmLT5sb2NhbCwKIAkJCQkJCS50b3MgPSBSVF9UT1MoaXBoLT50b3MpIH0gfSwKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19JUElQIH07Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKQorCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCWVuY2FwID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiAJfSBlbHNlIHsKQEAgLTEyNDIsNyArMTI2Myw3IEBACiAJCQkJCSAgICAgIHsgLmRhZGRyID0gaXBoLT5kYWRkciwKIAkJCQkJCS50b3MgPSBSVF9UT1MoaXBoLT50b3MpIH0gfSwKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19JUElQIH07Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKQorCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCkBAIC0xMzA2LDkgKzEzMjcsMTAgQEAKIAogc3RhdGljIGludCBpcG1yX2ZpbmRfdmlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCWludCBjdDsKLQlmb3IgKGN0PW1heHZpZi0xOyBjdD49MDsgY3QtLSkgewotCQlpZiAodmlmX3RhYmxlW2N0XS5kZXYgPT0gZGV2KQorCWZvciAoY3QgPSBuZXQtPmlwdjQubWF4dmlmLTE7IGN0ID49IDA7IGN0LS0pIHsKKwkJaWYgKG5ldC0+aXB2NC52aWZfdGFibGVbY3RdLmRldiA9PSBkZXYpCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIGN0OwpAQCAtMTMyMCw2ICsxMzQyLDcgQEAKIHsKIAlpbnQgcHNlbmQgPSAtMTsKIAlpbnQgdmlmLCBjdDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGNhY2hlKTsKIAogCXZpZiA9IGNhY2hlLT5tZmNfcGFyZW50OwogCWNhY2hlLT5tZmNfdW4ucmVzLnBrdCsrOwpAQCAtMTMyOCw3ICsxMzUxLDcgQEAKIAkvKgogCSAqIFdyb25nIGludGVyZmFjZTogZHJvcCBwYWNrZXQgYW5kIChtYXliZSkgc2VuZCBQSU0gYXNzZXJ0LgogCSAqLwotCWlmICh2aWZfdGFibGVbdmlmXS5kZXYgIT0gc2tiLT5kZXYpIHsKKwlpZiAobmV0LT5pcHY0LnZpZl90YWJsZVt2aWZdLmRldiAhPSBza2ItPmRldikgewogCQlpbnQgdHJ1ZV92aWZpOwogCiAJCWlmIChza2ItPnJ0YWJsZS0+ZmwuaWlmID09IDApIHsKQEAgLTEzNDksMjMgKzEzNzIsMjQgQEAKIAkJY2FjaGUtPm1mY191bi5yZXMud3JvbmdfaWYrKzsKIAkJdHJ1ZV92aWZpID0gaXBtcl9maW5kX3ZpZihza2ItPmRldik7CiAKLQkJaWYgKHRydWVfdmlmaSA+PSAwICYmIG1yb3V0ZV9kb19hc3NlcnQgJiYKKwkJaWYgKHRydWVfdmlmaSA+PSAwICYmIG5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0ICYmCiAJCSAgICAvKiBwaW1zbSB1c2VzIGFzc2VydHMsIHdoZW4gc3dpdGNoaW5nIGZyb20gUlBUIHRvIFNQVCwKIAkJICAgICAgIHNvIHRoYXQgd2UgY2Fubm90IGNoZWNrIHRoYXQgcGFja2V0IGFycml2ZWQgb24gYW4gb2lmLgogCQkgICAgICAgSXQgaXMgYmFkLCBidXQgb3RoZXJ3aXNlIHdlIHdvdWxkIG5lZWQgdG8gbW92ZSBwcmV0dHkKIAkJICAgICAgIGxhcmdlIGNodW5rIG9mIHBpbWQgdG8ga2VybmVsLiBPdWdoLi4uIC0tQU5LCiAJCSAgICAgKi8KLQkJICAgIChtcm91dGVfZG9fcGltIHx8IGNhY2hlLT5tZmNfdW4ucmVzLnR0bHNbdHJ1ZV92aWZpXSA8IDI1NSkgJiYKKwkJICAgIChuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSB8fAorCQkgICAgIGNhY2hlLT5tZmNfdW4ucmVzLnR0bHNbdHJ1ZV92aWZpXSA8IDI1NSkgJiYKIAkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywKIAkJCSAgICAgICBjYWNoZS0+bWZjX3VuLnJlcy5sYXN0X2Fzc2VydCArIE1GQ19BU1NFUlRfVEhSRVNIKSkgewogCQkJY2FjaGUtPm1mY191bi5yZXMubGFzdF9hc3NlcnQgPSBqaWZmaWVzOwotCQkJaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCB0cnVlX3ZpZmksIElHTVBNU0dfV1JPTkdWSUYpOworCQkJaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIHRydWVfdmlmaSwgSUdNUE1TR19XUk9OR1ZJRik7CiAJCX0KIAkJZ290byBkb250X2ZvcndhcmQ7CiAJfQogCi0JdmlmX3RhYmxlW3ZpZl0ucGt0X2luKys7Ci0JdmlmX3RhYmxlW3ZpZl0uYnl0ZXNfaW4gKz0gc2tiLT5sZW47CisJbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZdLnBrdF9pbisrOworCW5ldC0+aXB2NC52aWZfdGFibGVbdmlmXS5ieXRlc19pbiArPSBza2ItPmxlbjsKIAogCS8qCiAJICoJRm9yd2FyZCB0aGUgZnJhbWUKQEAgLTE0MDUsNiArMTQyOSw3IEBACiBpbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlpbnQgbG9jYWwgPSBza2ItPnJ0YWJsZS0+cnRfZmxhZ3MmUlRDRl9MT0NBTDsKIAogCS8qIFBhY2tldCBpcyBsb29wZWQgYmFjayBhZnRlciBmb3J3YXJkLCBpdCBzaG91bGQgbm90IGJlCkBAIC0xNDI1LDkgKzE0NTAsOSBAQAogCQkJICAgICAgIHRoYXQgd2UgY2FuIGZvcndhcmQgTk8gSUdNUCBtZXNzYWdlcy4KIAkJCSAgICAgKi8KIAkJCSAgICByZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkJCSAgICBpZiAobXJvdXRlX3NvY2tldCkgeworCQkJICAgIGlmIChuZXQtPmlwdjQubXJvdXRlX3NrKSB7CiAJCQkJICAgIG5mX3Jlc2V0KHNrYik7Ci0JCQkJICAgIHJhd19yY3YobXJvdXRlX3NvY2tldCwgc2tiKTsKKwkJCQkgICAgcmF3X3JjdihuZXQtPmlwdjQubXJvdXRlX3NrLCBza2IpOwogCQkJCSAgICByZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCQkJCSAgICByZXR1cm4gMDsKIAkJCSAgICB9CkBAIC0xNDM2LDcgKzE0NjEsNyBAQAogCX0KIAogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKGlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyKTsKKwljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChuZXQsIGlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyKTsKIAogCS8qCiAJICoJTm8gdXNhYmxlIGNhY2hlIGVudHJ5CkBAIC0xNDU2LDcgKzE0ODEsNyBAQAogCiAJCXZpZiA9IGlwbXJfZmluZF92aWYoc2tiLT5kZXYpOwogCQlpZiAodmlmID49IDApIHsKLQkJCWludCBlcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQodmlmLCBza2IpOworCQkJaW50IGVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChuZXQsIHZpZiwgc2tiKTsKIAkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAKIAkJCXJldHVybiBlcnI7CkBAIC0xNDg3LDYgKzE1MTIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpyZWdfZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaXBoZHIgKmVuY2FwOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJZW5jYXAgPSAoc3RydWN0IGlwaGRyICopKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgKyBwaW1sZW4pOwogCS8qCkBAIC0xNTAxLDggKzE1MjcsOCBAQAogCQlyZXR1cm4gMTsKIAogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCWlmIChyZWdfdmlmX251bSA+PSAwKQotCQlyZWdfZGV2ID0gdmlmX3RhYmxlW3JlZ192aWZfbnVtXS5kZXY7CisJaWYgKG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPj0gMCkKKwkJcmVnX2RldiA9IG5ldC0+aXB2NC52aWZfdGFibGVbbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bV0uZGV2OwogCWlmIChyZWdfZGV2KQogCQlkZXZfaG9sZChyZWdfZGV2KTsKIAlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwpAQCAtMTUzNywxMyArMTU2MywxNCBAQAogaW50IHBpbV9yY3ZfdjEoc3RydWN0IHNrX2J1ZmYgKiBza2IpCiB7CiAJc3RydWN0IGlnbXBoZHIgKnBpbTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqcGltKSArIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKIAkJZ290byBkcm9wOwogCiAJcGltID0gaWdtcF9oZHIoc2tiKTsKIAotCWlmICghbXJvdXRlX2RvX3BpbSB8fAorCWlmICghbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0gfHwKIAkgICAgcGltLT5ncm91cCAhPSBQSU1fVjFfVkVSU0lPTiB8fCBwaW0tPmNvZGUgIT0gUElNX1YxX1JFR0lTVEVSKQogCQlnb3RvIGRyb3A7CiAKQEAgLTE1ODMsNyArMTYxMCw4IEBACiB7CiAJaW50IGN0OwogCXN0cnVjdCBydG5leHRob3AgKm5ocDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmlmX3RhYmxlW2MtPm1mY19wYXJlbnRdLmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGMpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXQtPmlwdjQudmlmX3RhYmxlW2MtPm1mY19wYXJlbnRdLmRldjsKIAl1OCAqYiA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKIAlzdHJ1Y3QgcnRhdHRyICptcF9oZWFkOwogCkBAIC0xNTk5LDcgKzE2MjcsNyBAQAogCQkJbmhwID0gKHN0cnVjdCBydG5leHRob3AgKilza2JfcHV0KHNrYiwgUlRBX0FMSUdOKHNpemVvZigqbmhwKSkpOwogCQkJbmhwLT5ydG5oX2ZsYWdzID0gMDsKIAkJCW5ocC0+cnRuaF9ob3BzID0gYy0+bWZjX3VuLnJlcy50dGxzW2N0XTsKLQkJCW5ocC0+cnRuaF9pZmluZGV4ID0gdmlmX3RhYmxlW2N0XS5kZXYtPmlmaW5kZXg7CisJCQluaHAtPnJ0bmhfaWZpbmRleCA9IG5ldC0+aXB2NC52aWZfdGFibGVbY3RdLmRldi0+aWZpbmRleDsKIAkJCW5ocC0+cnRuaF9sZW4gPSBzaXplb2YoKm5ocCk7CiAJCX0KIAl9CkBAIC0xNjEzLDE0ICsxNjQxLDE1IEBACiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAotaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KQoraW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwKKwkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQocnQtPnJ0X3NyYywgcnQtPnJ0X2RzdCk7CisJY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobmV0LCBydC0+cnRfc3JjLCBydC0+cnRfZHN0KTsKIAogCWlmIChjYWNoZSA9PSBOVUxMKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IyOwpAQCAtMTY1MSw3ICsxNjgwLDcgQEAKIAkJaXBoLT5zYWRkciA9IHJ0LT5ydF9zcmM7CiAJCWlwaC0+ZGFkZHIgPSBydC0+cnRfZHN0OwogCQlpcGgtPnZlcnNpb24gPSAwOwotCQllcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQodmlmLCBza2IyKTsKKwkJZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKG5ldCwgdmlmLCBza2IyKTsKIAkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNjY4LDE3ICsxNjk3LDE5IEBACiAgKglUaGUgL3Byb2MgaW50ZXJmYWNlcyB0byBtdWx0aWNhc3Qgcm91dGluZyAvcHJvYy9pcF9tcl9jYWNoZSAvcHJvYy9pcF9tcl92aWYKICAqLwogc3RydWN0IGlwbXJfdmlmX2l0ZXIgeworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKIAlpbnQgY3Q7CiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZl9kZXZpY2UgKmlwbXJfdmlmX3NlcV9pZHgoc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIsCitzdGF0aWMgc3RydWN0IHZpZl9kZXZpY2UgKmlwbXJfdmlmX3NlcV9pZHgoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgICBzdHJ1Y3QgaXBtcl92aWZfaXRlciAqaXRlciwKIAkJCQkJICAgbG9mZl90IHBvcykKIHsKLQlmb3IgKGl0ZXItPmN0ID0gMDsgaXRlci0+Y3QgPCBtYXh2aWY7ICsraXRlci0+Y3QpIHsKLQkJaWYgKCFWSUZfRVhJU1RTKGl0ZXItPmN0KSkKKwlmb3IgKGl0ZXItPmN0ID0gMDsgaXRlci0+Y3QgPCBuZXQtPmlwdjQubWF4dmlmOyArK2l0ZXItPmN0KSB7CisJCWlmICghVklGX0VYSVNUUyhuZXQsIGl0ZXItPmN0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocG9zLS0gPT0gMCkKLQkJCXJldHVybiAmdmlmX3RhYmxlW2l0ZXItPmN0XTsKKwkJCXJldHVybiAmbmV0LT5pcHY0LnZpZl90YWJsZVtpdGVyLT5jdF07CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtMTY4NiwyMyArMTcxNywyNiBAQAogc3RhdGljIHZvaWQgKmlwbXJfdmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyhtcnRfbG9jaykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKwogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCXJldHVybiAqcG9zID8gaXBtcl92aWZfc2VxX2lkeChzZXEtPnByaXZhdGUsICpwb3MgLSAxKQorCXJldHVybiAqcG9zID8gaXBtcl92aWZfc2VxX2lkeChuZXQsIHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCiAJCTogU0VRX1NUQVJUX1RPS0VOOwogfQogCiBzdGF0aWMgdm9pZCAqaXBtcl92aWZfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBpcG1yX3ZpZl9pdGVyICppdGVyID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJKysqcG9zOwogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcmV0dXJuIGlwbXJfdmlmX3NlcV9pZHgoaXRlciwgMCk7CisJCXJldHVybiBpcG1yX3ZpZl9zZXFfaWR4KG5ldCwgaXRlciwgMCk7CiAKLQl3aGlsZSAoKytpdGVyLT5jdCA8IG1heHZpZikgewotCQlpZiAoIVZJRl9FWElTVFMoaXRlci0+Y3QpKQorCXdoaWxlICgrK2l0ZXItPmN0IDwgbmV0LT5pcHY0Lm1heHZpZikgeworCQlpZiAoIVZJRl9FWElTVFMobmV0LCBpdGVyLT5jdCkpCiAJCQljb250aW51ZTsKLQkJcmV0dXJuICZ2aWZfdGFibGVbaXRlci0+Y3RdOworCQlyZXR1cm4gJm5ldC0+aXB2NC52aWZfdGFibGVbaXRlci0+Y3RdOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE3MTUsNiArMTc0OSw4IEBACiAKIHN0YXRpYyBpbnQgaXBtcl92aWZfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3B1dHMoc2VxLAogCQkJICJJbnRlcmZhY2UgICAgICBCeXRlc0luICBQa3RzSW4gIEJ5dGVzT3V0IFBrdHNPdXQgRmxhZ3MgTG9jYWwgICAgUmVtb3RlXG4iKTsKQEAgLTE3MjQsNyArMTc2MCw3IEBACiAKIAkJc2VxX3ByaW50ZihzZXEsCiAJCQkgICAiJTJaZCAlLTEwcyAlOGxkICU3bGQgICU4bGQgJTdsZCAlMDVYICUwOFggJTA4WFxuIiwKLQkJCSAgIHZpZiAtIHZpZl90YWJsZSwKKwkJCSAgIHZpZiAtIG5ldC0+aXB2NC52aWZfdGFibGUsCiAJCQkgICBuYW1lLCB2aWYtPmJ5dGVzX2luLCB2aWYtPnBrdF9pbiwKIAkJCSAgIHZpZi0+Ynl0ZXNfb3V0LCB2aWYtPnBrdF9vdXQsCiAJCQkgICB2aWYtPmZsYWdzLCB2aWYtPmxvY2FsLCB2aWYtPnJlbW90ZSk7CkBAIC0xNzQxLDggKzE3NzcsOCBAQAogCiBzdGF0aWMgaW50IGlwbXJfdmlmX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmlwbXJfdmlmX3NlcV9vcHMsCi0JCQlzaXplb2Yoc3RydWN0IGlwbXJfdmlmX2l0ZXIpKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmaXBtcl92aWZfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGlwbXJfdmlmX2l0ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBtcl92aWZfZm9wcyA9IHsKQEAgLTE3NTAsMjMgKzE3ODYsMjYgQEAKIAkub3BlbiAgICA9IGlwbXJfdmlmX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCiBzdHJ1Y3QgaXBtcl9tZmNfaXRlciB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwOwogCXN0cnVjdCBtZmNfY2FjaGUgKipjYWNoZTsKIAlpbnQgY3Q7CiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX21mY19zZXFfaWR4KHN0cnVjdCBpcG1yX21mY19pdGVyICppdCwgbG9mZl90IHBvcykKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX21mY19zZXFfaWR4KHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICBzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqbWZjOwogCi0JaXQtPmNhY2hlID0gbWZjX2NhY2hlX2FycmF5OworCWl0LT5jYWNoZSA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXk7CiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7CiAJZm9yIChpdC0+Y3QgPSAwOyBpdC0+Y3QgPCBNRkNfTElORVM7IGl0LT5jdCsrKQotCQlmb3IgKG1mYyA9IG1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOyBtZmM7IG1mYyA9IG1mYy0+bmV4dCkKKwkJZm9yIChtZmMgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2l0LT5jdF07CisJCSAgICAgbWZjOyBtZmMgPSBtZmMtPm5leHQpCiAJCQlpZiAocG9zLS0gPT0gMCkKIAkJCQlyZXR1cm4gbWZjOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CkBAIC0xNzc0LDcgKzE4MTMsOCBAQAogCWl0LT5jYWNoZSA9ICZtZmNfdW5yZXNfcXVldWU7CiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJZm9yIChtZmMgPSBtZmNfdW5yZXNfcXVldWU7IG1mYzsgbWZjID0gbWZjLT5uZXh0KQotCQlpZiAocG9zLS0gPT0gMCkKKwkJaWYgKG5ldF9lcShtZmNfbmV0KG1mYyksIG5ldCkgJiYKKwkJICAgIHBvcy0tID09IDApCiAJCQlyZXR1cm4gbWZjOwogCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKQEAgLTE3ODYsOSArMTgyNiwxMSBAQAogc3RhdGljIHZvaWQgKmlwbXJfbWZjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCiAJaXQtPmNhY2hlID0gTlVMTDsKIAlpdC0+Y3QgPSAwOwotCXJldHVybiAqcG9zID8gaXBtcl9tZmNfc2VxX2lkeChzZXEtPnByaXZhdGUsICpwb3MgLSAxKQorCXJldHVybiAqcG9zID8gaXBtcl9tZmNfc2VxX2lkeChuZXQsIHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCiAJCTogU0VRX1NUQVJUX1RPS0VOOwogfQogCkBAIC0xNzk2LDExICsxODM4LDEyIEBACiB7CiAJc3RydWN0IG1mY19jYWNoZSAqbWZjID0gdjsKIAlzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAkrKypwb3M7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXJldHVybiBpcG1yX21mY19zZXFfaWR4KHNlcS0+cHJpdmF0ZSwgMCk7CisJCXJldHVybiBpcG1yX21mY19zZXFfaWR4KG5ldCwgc2VxLT5wcml2YXRlLCAwKTsKIAogCWlmIChtZmMtPm5leHQpCiAJCXJldHVybiBtZmMtPm5leHQ7CkBAIC0xODA4LDEwICsxODUxLDEwIEBACiAJaWYgKGl0LT5jYWNoZSA9PSAmbWZjX3VucmVzX3F1ZXVlKQogCQlnb3RvIGVuZF9vZl9saXN0OwogCi0JQlVHX09OKGl0LT5jYWNoZSAhPSBtZmNfY2FjaGVfYXJyYXkpOworCUJVR19PTihpdC0+Y2FjaGUgIT0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSk7CiAKIAl3aGlsZSAoKytpdC0+Y3QgPCBNRkNfTElORVMpIHsKLQkJbWZjID0gbWZjX2NhY2hlX2FycmF5W2l0LT5jdF07CisJCW1mYyA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsKIAkJaWYgKG1mYykKIAkJCXJldHVybiBtZmM7CiAJfQpAQCAtMTgyMyw2ICsxODY2LDggQEAKIAogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCW1mYyA9IG1mY191bnJlc19xdWV1ZTsKKwl3aGlsZSAobWZjICYmICFuZXRfZXEobWZjX25ldChtZmMpLCBuZXQpKQorCQltZmMgPSBtZmMtPm5leHQ7CiAJaWYgKG1mYykKIAkJcmV0dXJuIG1mYzsKIApAQCAtMTgzNiwxNiArMTg4MSwxOCBAQAogc3RhdGljIHZvaWQgaXBtcl9tZmNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJaWYgKGl0LT5jYWNoZSA9PSAmbWZjX3VucmVzX3F1ZXVlKQogCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwotCWVsc2UgaWYgKGl0LT5jYWNoZSA9PSBtZmNfY2FjaGVfYXJyYXkpCisJZWxzZSBpZiAoaXQtPmNhY2hlID09IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpCiAJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgaXBtcl9tZmNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJaW50IG47CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3B1dHMoc2VxLApAQCAtMTg2Niw5ICsxOTEzLDkgQEAKIAkJCQkgICBtZmMtPm1mY191bi5yZXMud3JvbmdfaWYpOwogCQkJZm9yIChuID0gbWZjLT5tZmNfdW4ucmVzLm1pbnZpZjsKIAkJCSAgICAgbiA8IG1mYy0+bWZjX3VuLnJlcy5tYXh2aWY7IG4rKyApIHsKLQkJCQlpZiAoVklGX0VYSVNUUyhuKQotCQkJCSAgICYmIG1mYy0+bWZjX3VuLnJlcy50dGxzW25dIDwgMjU1KQotCQkJCXNlcV9wcmludGYoc2VxLAorCQkJCWlmIChWSUZfRVhJU1RTKG5ldCwgbikgJiYKKwkJCQkgICAgbWZjLT5tZmNfdW4ucmVzLnR0bHNbbl0gPCAyNTUpCisJCQkJCXNlcV9wcmludGYoc2VxLAogCQkJCQkgICAiICUyZDolLTNkIiwKIAkJCQkJICAgbiwgbWZjLT5tZmNfdW4ucmVzLnR0bHNbbl0pOwogCQkJfQpAQCAtMTg5Miw4ICsxOTM5LDggQEAKIAogc3RhdGljIGludCBpcG1yX21mY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZpcG1yX21mY19zZXFfb3BzLAotCQkJc2l6ZW9mKHN0cnVjdCBpcG1yX21mY19pdGVyKSk7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJmlwbXJfbWZjX3NlcV9vcHMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcG1yX21mY19pdGVyKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwbXJfbWZjX2ZvcHMgPSB7CkBAIC0xOTAxLDcgKzE5NDgsNyBAQAogCS5vcGVuICAgID0gaXBtcl9tZmNfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAjZW5kaWYKIApAQCAtMTkxNSw2ICsxOTYyLDY1IEBACiAvKgogICoJU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nCiAgKi8KK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcG1yX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgZXJyID0gMDsKKworCW5ldC0+aXB2NC52aWZfdGFibGUgPSBrY2FsbG9jKE1BWFZJRlMsIHNpemVvZihzdHJ1Y3QgdmlmX2RldmljZSksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXQtPmlwdjQudmlmX3RhYmxlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBGb3J3YXJkaW5nIGNhY2hlICovCisJbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSA9IGtjYWxsb2MoTUZDX0xJTkVTLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtZmNfY2FjaGUgKiksCisJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21mY19jYWNoZTsKKwl9CisKKyNpZmRlZiBDT05GSUdfSVBfUElNU00KKwluZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID0gLTE7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJZXJyID0gLUVOT01FTTsKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImlwX21yX3ZpZiIsIDAsICZpcG1yX3ZpZl9mb3BzKSkKKwkJZ290byBwcm9jX3ZpZl9mYWlsOworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaXBfbXJfY2FjaGUiLCAwLCAmaXBtcl9tZmNfZm9wcykpCisJCWdvdG8gcHJvY19jYWNoZV9mYWlsOworI2VuZGlmCisJcmV0dXJuIDA7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworcHJvY19jYWNoZV9mYWlsOgorCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF9tcl92aWYiKTsKK3Byb2NfdmlmX2ZhaWw6CisJa2ZyZWUobmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSk7CisjZW5kaWYKK2ZhaWxfbWZjX2NhY2hlOgorCWtmcmVlKG5ldC0+aXB2NC52aWZfdGFibGUpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwbXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX21yX2NhY2hlIik7CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX21yX3ZpZiIpOworI2VuZGlmCisJa2ZyZWUobmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSk7CisJa2ZyZWUobmV0LT5pcHY0LnZpZl90YWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBtcl9uZXRfb3BzID0geworCS5pbml0ID0gaXBtcl9uZXRfaW5pdCwKKwkuZXhpdCA9IGlwbXJfbmV0X2V4aXQsCit9OwogCiBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZCkKIHsKQEAgLTE5MjcsMjYgKzIwMzMsMjAgQEAKIAlpZiAoIW1ydF9jYWNoZXApCiAJCXJldHVybiAtRU5PTUVNOwogCisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBtcl9uZXRfb3BzKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlZ19wZXJuZXRfZmFpbDsKKwogCXNldHVwX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lciwgaXBtcl9leHBpcmVfcHJvY2VzcywgMCk7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF9tcl9ub3RpZmllcik7CiAJaWYgKGVycikKIAkJZ290byByZWdfbm90aWZfZmFpbDsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJpcF9tcl92aWYiLCAwLCAmaXBtcl92aWZfZm9wcykpCi0JCWdvdG8gcHJvY192aWZfZmFpbDsKLQlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwX21yX2NhY2hlIiwgMCwgJmlwbXJfbWZjX2ZvcHMpKQotCQlnb3RvIHByb2NfY2FjaGVfZmFpbDsKLSNlbmRpZgogCXJldHVybiAwOwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1wcm9jX2NhY2hlX2ZhaWw6Ci0JcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgImlwX21yX3ZpZiIpOwotcHJvY192aWZfZmFpbDoKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBfbXJfbm90aWZpZXIpOwotI2VuZGlmCisKIHJlZ19ub3RpZl9mYWlsOgogCWRlbF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBtcl9uZXRfb3BzKTsKK3JlZ19wZXJuZXRfZmFpbDoKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggMzgxNmUxZC4uMTgzM2JkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTMxLDcgKzMxLDcgQEAKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIC9wcm9jIGFuZCBzeXNjdGwgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQKLQkgIGxheWVyIDMgZGVwZW5kYW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoaXMgaXMgbmVlZGVkIHRvIGtlZXAKKwkgIGxheWVyIDMgZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoaXMgaXMgbmVlZGVkIHRvIGtlZXAKIAkgIG9sZCBwcm9ncmFtcyB0aGF0IGhhdmUgbm90IGJlZW4gYWRhcHRlZCB0byB0aGUgbmV3IG5hbWVzIHdvcmtpbmcuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCkBAIC05NSwxMSArOTUsMTEgQEAKIGNvbmZpZyBJUF9ORl9NQVRDSF9UVEwKIAl0cmlzdGF0ZSAnInR0bCIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWhlbHAKLQkgIFRoaXMgYWRkcyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIG9wdGlvbiwgd2hpY2ggZW5hYmxlZCB0aGUgdXNlcgotCSAgdG8gbWF0Y2ggcGFja2V0cyBieSB0aGVpciBUVEwgdmFsdWUuCi0KLQkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCXNlbGVjdCBORVRGSUxURVJfWFRfTUFUQ0hfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMLgogCiAjIGBmaWx0ZXInLCBnZW5lcmljIGFuZCBzcGVjaWZpYyB0YXJnZXRzCiBjb25maWcgSVBfTkZfRklMVEVSCkBAIC0zMjMsMTkgKzMyMywxMyBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUF9ORl9UQVJHRVRfVFRMCi0JdHJpc3RhdGUgICdUVEwgdGFyZ2V0IHN1cHBvcnQnCi0JZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUKKwl0cmlzdGF0ZSAnIlRUTCIgdGFyZ2V0IHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhZGRzIGEgYFRUTCcgdGFyZ2V0LCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIG1vZGlmeQotCSAgdGhlIFRUTCB2YWx1ZSBvZiB0aGUgSVAgaGVhZGVyLgotCi0JICBXaGlsZSBpdCBpcyBzYWZlIHRvIGRlY3JlbWVudC9sb3dlciB0aGUgVFRMLCB0aGlzIHRhcmdldCBhbHNvIGVuYWJsZXMKLQkgIGZ1bmN0aW9uYWxpdHkgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIFRUTCB2YWx1ZSBvZiB0aGUgSVAgaGVhZGVyIHRvCi0JICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhpcyBpcyBFWFRSRU1FTFkgREFOR0VST1VTIHNpbmNlIHlvdSBjYW4gZWFzaWx5Ci0JICBjcmVhdGUgaW1tb3J0YWwgcGFja2V0cyB0aGF0IGxvb3AgZm9yZXZlciBvbiB0aGUgbmV0d29yay4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9UQVJHRVRfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KIAogIyByYXcgKyBzcGVjaWZpYyB0YXJnZXRzCiBjb25maWcgSVBfTkZfUkFXCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggNWY5YjY1MC4uNDgxMTE1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNTEsNyArNTEsNiBAQAogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFKSArPSBpcHRfYWRkcnR5cGUubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FIKSArPSBpcHRfYWgubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0VDTikgKz0gaXB0X2Vjbi5vCi1vYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfVFRMKSArPSBpcHRfdHRsLm8KIAogIyB0YXJnZXRzCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCkgKz0gaXB0X0NMVVNURVJJUC5vCkBAIC02MSw3ICs2MCw2IEBACiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUCkgKz0gaXB0X05FVE1BUC5vCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUKSArPSBpcHRfUkVESVJFQ1Qubwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwdF9SRUpFQ1Qubwotb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9UVEwpICs9IGlwdF9UVEwubwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HKSArPSBpcHRfVUxPRy5vCiAKICMgZ2VuZXJpYyBBUlAgdGFibGVzCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCA3ZWE4OGI2Li44NGI5YzE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTczLDYgKzczLDQwIEBACiAJcmV0dXJuIChyZXQgIT0gMCk7CiB9CiAKKy8qCisgKiBVbmZvcnR1bmF0bHksIF9iIGFuZCBfbWFzayBhcmUgbm90IGFsaWduZWQgdG8gYW4gaW50IChvciBsb25nIGludCkKKyAqIFNvbWUgYXJjaGVzIGRvbnQgY2FyZSwgdW5yb2xsaW5nIHRoZSBsb29wIGlzIGEgd2luIG9uIHRoZW0uCisgKiBGb3Igb3RoZXIgYXJjaGVzLCB3ZSBvbmx5IGhhdmUgYSAxNmJpdCBhbGlnbmVtZW50LgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpZm5hbWVfY29tcGFyZShjb25zdCBjaGFyICpfYSwgY29uc3QgY2hhciAqX2IsIGNvbnN0IGNoYXIgKl9tYXNrKQoreworI2lmZGVmIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCisJY29uc3QgdW5zaWduZWQgbG9uZyAqYSA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2E7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYiA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2I7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqbWFzayA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX21hc2s7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSAoYVswXSBeIGJbMF0pICYgbWFza1swXTsKKwlpZiAoSUZOQU1TSVogPiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsxXSBeIGJbMV0pICYgbWFza1sxXTsKKwlpZiAoSUZOQU1TSVogPiAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMl0gXiBiWzJdKSAmIG1hc2tbMl07CisJaWYgKElGTkFNU0laID4gMyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzNdIF4gYlszXSkgJiBtYXNrWzNdOworCUJVSUxEX0JVR19PTihJRk5BTVNJWiA+IDQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJY29uc3QgdTE2ICphID0gKGNvbnN0IHUxNiAqKV9hOworCWNvbnN0IHUxNiAqYiA9IChjb25zdCB1MTYgKilfYjsKKwljb25zdCB1MTYgKm1hc2sgPSAoY29uc3QgdTE2ICopX21hc2s7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHUxNik7IGkrKykKKwkJcmV0IHw9IChhW2ldIF4gYltpXSkgJiBtYXNrW2ldOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKwogLyogUmV0dXJucyB3aGV0aGVyIHBhY2tldCBtYXRjaGVzIHJ1bGUgb3Igbm90LiAqLwogc3RhdGljIGlubGluZSBpbnQgYXJwX3BhY2tldF9tYXRjaChjb25zdCBzdHJ1Y3QgYXJwaGRyICphcnBoZHIsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTgzLDcgKzExNyw3IEBACiAJY29uc3QgY2hhciAqYXJwcHRyID0gKGNoYXIgKikoYXJwaGRyICsgMSk7CiAJY29uc3QgY2hhciAqc3JjX2RldmFkZHIsICp0Z3RfZGV2YWRkcjsKIAlfX2JlMzIgc3JjX2lwYWRkciwgdGd0X2lwYWRkcjsKLQlpbnQgaSwgcmV0OworCWxvbmcgcmV0OwogCiAjZGVmaW5lIEZXSU5WKGJvb2wsIGludmZsZykgKChib29sKSBeICEhKGFycGluZm8tPmludmZsYWdzICYgKGludmZsZykpKQogCkBAIC0xNTYsMTAgKzE5MCw3IEBACiAJfQogCiAJLyogTG9vayBmb3IgaWZuYW1lIG1hdGNoZXMuICAqLwotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWjsgaSsrKSB7Ci0JCXJldCB8PSAoaW5kZXZbaV0gXiBhcnBpbmZvLT5pbmlmYWNlW2ldKQotCQkJJiBhcnBpbmZvLT5pbmlmYWNlX21hc2tbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKGluZGV2LCBhcnBpbmZvLT5pbmlmYWNlLCBhcnBpbmZvLT5pbmlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBBUlBUX0lOVl9WSUFfSU4pKSB7CiAJCWRwcmludGYoIlZJQSBpbiBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMTY4LDEwICsxOTksNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVo7IGkrKykgewotCQlyZXQgfD0gKG91dGRldltpXSBeIGFycGluZm8tPm91dGlmYWNlW2ldKQotCQkJJiBhcnBpbmZvLT5vdXRpZmFjZV9tYXNrW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShvdXRkZXYsIGFycGluZm8tPm91dGlmYWNlLCBhcnBpbmZvLT5vdXRpZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgQVJQVF9JTlZfVklBX09VVCkpIHsKIAkJZHByaW50ZigiVklBIG91dCBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMjIxLDcgKzI0OSw3IEBACiAJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJICAgc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl07CisJc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGxvbmcpKSkpOwogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIAljb25zdCBzdHJ1Y3QgYXJwaGRyICphcnA7CiAJYm9vbCBob3Rkcm9wID0gZmFsc2U7CkBAIC0yMzcsOSArMjY1LDEwIEBACiAJaW5kZXYgPSBpbiA/IGluLT5uYW1lIDogbnVsbGRldm5hbWU7CiAJb3V0ZGV2ID0gb3V0ID8gb3V0LT5uYW1lIDogbnVsbGRldm5hbWU7CiAKLQlyZWFkX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7Ci0JdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCXJjdV9yZWFkX2xvY2soKTsKKwlwcml2YXRlID0gcmN1X2RlcmVmZXJlbmNlKHRhYmxlLT5wcml2YXRlKTsKKwl0YWJsZV9iYXNlID0gcmN1X2RlcmVmZXJlbmNlKHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCWJhY2sgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+dW5kZXJmbG93W2hvb2tdKTsKIApAQCAtMzExLDcgKzM0MCw4IEBACiAJCQllID0gKHZvaWQgKillICsgZS0+bmV4dF9vZmZzZXQ7CiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7Ci0JcmVhZF91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGhvdGRyb3ApCiAJCXJldHVybiBORl9EUk9QOwpAQCAtNzE0LDExICs3NDQsNjUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHh0X2NvdW50ZXJzICphbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQorCisvKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKKyAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLworc3RhdGljIGludAorYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCisJCSAgICAgdW5zaWduZWQgaW50ICppKQoreworCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCisvKiBUYWtlIHZhbHVlcyBmcm9tIGNvdW50ZXJzIGFuZCBhZGQgdGhlbSBiYWNrIG9udG8gdGhlIGN1cnJlbnQgY3B1ICovCitzdGF0aWMgdm9pZCBwdXRfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCisJCQkgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzW10pCit7CisJdW5zaWduZWQgaW50IGksIGNwdTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaSA9IDA7CisJQVJQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKKwkJCSAgdC0+c2l6ZSwKKwkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCisJCQkgIGNvdW50ZXJzLAorCQkJICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGFycHRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJQVJQVF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgIHplcm9fZW50cnlfY291bnRlciwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHh0X2NvdW50ZXJzICphbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXVuc2lnbmVkIGludCBjb3VudGVyc2l6ZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbzsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICogKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKQEAgLTcyOCwxNCArODEyLDMwIEBACiAJY291bnRlcnMgPSB2bWFsbG9jX25vZGUoY291bnRlcnNpemUsIG51bWFfbm9kZV9pZCgpKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBub21lbTsKIAotCS8qIEZpcnN0LCBzdW0gY291bnRlcnMuLi4gKi8KLQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7Ci0JZ2V0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKLQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlpbmZvID0geHRfYWxsb2NfdGFibGVfaW5mbyhwcml2YXRlLT5zaXplKTsKKwlpZiAoIWluZm8pCisJCWdvdG8gZnJlZV9jb3VudGVyczsKKworCWNsb25lX2NvdW50ZXJzKGluZm8sIHByaXZhdGUpOworCisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOworCXh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHByaXZhdGUsIGluZm8pOworCXN5bmNocm9uaXplX25ldCgpOwkvKiBXYWl0IHVudGlsIHNtb2tlIGhhcyBjbGVhcmVkICovCisKKwlnZXRfY291bnRlcnMoaW5mbywgY291bnRlcnMpOworCXB1dF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CisKKwl4dF9mcmVlX3RhYmxlX2luZm8oaW5mbyk7CiAKIAlyZXR1cm4gY291bnRlcnM7CisKKyBmcmVlX2NvdW50ZXJzOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBub21lbToKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKQEAgLTEwNzUsMjAgKzExNzUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYwotICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICppKQotewotCi0JQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sCiAJCQkgICBpbnQgY29tcGF0KQogewpAQCAtMTE0OCwxMyArMTIzNCwxNCBAQAogCQlnb3RvIGZyZWU7CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfbG9jaygmdC0+bG9jayk7CiAJcHJpdmF0ZSA9IHQtPnByaXZhdGU7CiAJaWYgKHByaXZhdGUtPm51bWJlciAhPSBudW1fY291bnRlcnMpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2tfdXBfZnJlZTsKIAl9CiAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpID0gMDsKIAkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLwogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xMTYzLDggKzEyNTAsMTAgQEAKIAkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAogCQkJICAgcGFkZGMsCiAJCQkgICAmaSk7CisJcHJlZW1wdF9lbmFibGUoKTsKICB1bmxvY2tfdXBfZnJlZToKLQl3cml0ZV91bmxvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X3VubG9jaygmdC0+bG9jayk7CisKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwppbmRleCBlMDkxMTg3Li42ZWNmZGFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCkBAIC00OCw4ICs0OCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAotCS5wcml2YXRlCT0gTlVMTCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fQVJQLAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggNDMyY2U5ZC4uNWYyMmM5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpAQCAtNjQwLDYgKzY0MSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjQgcGFja2V0IHF1ZXVlIGhhbmRsZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UTyhQRl9ORVRMSU5LLCBORVRMSU5LX0ZJUkVXQUxMKTsKIAogbW9kdWxlX2luaXQoaXBfcXVldWVfaW5pdCk7CiBtb2R1bGVfZXhpdChpcF9xdWV1ZV9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCBlZjhiNmNhLi5lNTI5NGFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC03NCw2ICs3NCwyNSBAQAogCiAgICBIZW5jZSB0aGUgc3RhcnQgb2YgYW55IHRhYmxlIGlzIGdpdmVuIGJ5IGdldF90YWJsZSgpIGJlbG93LiAgKi8KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaWZuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqX2EsIGNvbnN0IGNoYXIgKl9iLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfbWFzaykKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICphID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYTsKKwljb25zdCB1bnNpZ25lZCBsb25nICpiID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYjsKKwljb25zdCB1bnNpZ25lZCBsb25nICptYXNrID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfbWFzazsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCXJldCA9IChhWzBdIF4gYlswXSkgJiBtYXNrWzBdOworCWlmIChJRk5BTVNJWiA+IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzFdIF4gYlsxXSkgJiBtYXNrWzFdOworCWlmIChJRk5BTVNJWiA+IDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsyXSBeIGJbMl0pICYgbWFza1syXTsKKwlpZiAoSUZOQU1TSVogPiAzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbM10gXiBiWzNdKSAmIG1hc2tbM107CisJQlVJTERfQlVHX09OKElGTkFNU0laID4gNCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJcmV0dXJuIHJldDsKK30KKwogLyogUmV0dXJucyB3aGV0aGVyIG1hdGNoZXMgcnVsZSBvciBub3QuICovCiAvKiBQZXJmb3JtYW5jZSBjcml0aWNhbCAtIGNhbGxlZCBmb3IgZXZlcnkgcGFja2V0ICovCiBzdGF0aWMgaW5saW5lIGJvb2wKQEAgLTgzLDcgKzEwMiw2IEBACiAJCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwaW5mbywKIAkJaW50IGlzZnJhZykKIHsKLQlzaXplX3QgaTsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAogI2RlZmluZSBGV0lOVihib29sLCBpbnZmbGcpICgoYm9vbCkgXiAhIShpcGluZm8tPmludmZsYWdzICYgKGludmZsZykpKQpAQCAtMTAzLDEyICsxMjEsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogTG9vayBmb3IgaWZuYW1lIG1hdGNoZXM7IHRoaXMgc2hvdWxkIHVucm9sbCBuaWNlbHkuICovCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopaW5kZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwaW5mby0+aW5pZmFjZSlbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwaW5mby0+aW5pZmFjZV9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUoaW5kZXYsIGlwaW5mby0+aW5pZmFjZSwgaXBpbmZvLT5pbmlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUFRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xMTcsMTEgKzEzMCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwaW5mby0+b3V0aWZhY2UpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPm91dGlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShvdXRkZXYsIGlwaW5mby0+b3V0aWZhY2UsIGlwaW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQVF9JTlZfVklBX09VVCkpIHsKIAkJZHByaW50ZigiVklBIG91dCBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMzQ3LDEwICszNTYsMTIgQEAKIAltdHBhci5mYW1pbHkgID0gdGdwYXIuZmFtaWx5ID0gTkZQUk9UT19JUFY0OwogCXRncGFyLmhvb2tudW0gPSBob29rOwogCi0JcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7Ci0JdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJcmN1X3JlYWRfbG9jaygpOworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOworCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAKIAkvKiBGb3IgcmV0dXJuIGZyb20gYnVpbHRpbiBjaGFpbiAqLwpAQCAtNDQ1LDcgKzQ1Niw3IEBACiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7CiAKLQlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTkyNCwxMyArOTM1LDY4IEBACiAJCQkJICBjb3VudGVycywKIAkJCQkgICZpKTsKIAl9CisKK30KKworLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCisgKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KK3N0YXRpYyBpbnQKK2FkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCisJCSAgICAgdW5zaWduZWQgaW50ICppKQoreworCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCisvKiBUYWtlIHZhbHVlcyBmcm9tIGNvdW50ZXJzIGFuZCBhZGQgdGhlbSBiYWNrIG9udG8gdGhlIGN1cnJlbnQgY3B1ICovCitzdGF0aWMgdm9pZCBwdXRfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCisJCQkgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzW10pCit7CisJdW5zaWduZWQgaW50IGksIGNwdTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaSA9IDA7CisJSVBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICB0LT5zaXplLAorCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKKwkJCSAgY291bnRlcnMsCisJCQkgICZpKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludAoremVyb19lbnRyeV9jb3VudGVyKHN0cnVjdCBpcHRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJSVBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllc1tjcHVdLCBuZXdpbmZvLT5zaXplLAorCQkJCSAgemVyb19lbnRyeV9jb3VudGVyLCBOVUxMKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKiBhbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXVuc2lnbmVkIGludCBjb3VudGVyc2l6ZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbzsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICAgKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKQEAgLTkzOSwxNCArMTAwNSwzMCBAQAogCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKGNvdW50ZXJzaXplLCBudW1hX25vZGVfaWQoKSk7CiAKIAlpZiAoY291bnRlcnMgPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gbm9tZW07CiAKLQkvKiBGaXJzdCwgc3VtIGNvdW50ZXJzLi4uICovCi0Jd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCWdldF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJaW5mbyA9IHh0X2FsbG9jX3RhYmxlX2luZm8ocHJpdmF0ZS0+c2l6ZSk7CisJaWYgKCFpbmZvKQorCQlnb3RvIGZyZWVfY291bnRlcnM7CisKKwljbG9uZV9jb3VudGVycyhpbmZvLCBwcml2YXRlKTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKwl4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShwcml2YXRlLCBpbmZvKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsJLyogV2FpdCB1bnRpbCBzbW9rZSBoYXMgY2xlYXJlZCAqLworCisJZ2V0X2NvdW50ZXJzKGluZm8sIGNvdW50ZXJzKTsKKwlwdXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworCisJeHRfZnJlZV90YWJsZV9pbmZvKGluZm8pOwogCiAJcmV0dXJuIGNvdW50ZXJzOworCisgZnJlZV9jb3VudGVyczoKKwl2ZnJlZShjb3VudGVycyk7Cisgbm9tZW06CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzMTIsMjcgKzEzOTQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYwotICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCi1zdGF0aWMgaW50Ci1hZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLAotCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLSNpZiAwCi0JZHVwcmludGYoImFkZF9jb3VudGVyOiBFbnRyeSAldSAlbHUvJWx1ICsgJWx1LyVsdVxuIiwKLQkJICppLAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpZS0+Y291bnRlcnMuYmNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRtZVsqaV0ucGNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRtZVsqaV0uYmNudCk7Ci0jZW5kaWYKLQotCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgaW50CiBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKQEAgLTEzOTMsMTMgKzE0NTQsMTQgQEAKIAkJZ290byBmcmVlOwogCX0KIAotCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X2xvY2soJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwogCWlmIChwcml2YXRlLT5udW1iZXIgIT0gbnVtX2NvdW50ZXJzKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrX3VwX2ZyZWU7CiAJfQogCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaSA9IDA7CiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTE0MDgsOCArMTQ3MCw5IEBACiAJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAogCQkJICBwYWRkYywKIAkJCSAgJmkpOworCXByZWVtcHRfZW5hYmxlKCk7CiAgdW5sb2NrX3VwX2ZyZWU6Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnQtPmxvY2spOwogCXh0X3RhYmxlX3VubG9jayh0KTsKIAltb2R1bGVfcHV0KHQtPm1lKTsKICBmcmVlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKaW5kZXggMjdhNzhmYi4uYWNjNDRjNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCkBAIC00NjQsNyArNDY0LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBpcHRfbG9nX2xvZ2dlciA9eworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X2xvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXB0X0xPRyIsCiAJLmxvZ2ZuCQk9ICZpcHRfbG9nX3BhY2tldCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3NmFhZS4uMDAwMDAwMAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyogVFRMIG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIElQIHRhYmxlcwotICogKEMpIDIwMDAsMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UVEwuaD4KLQotTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjQgVFRMIGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotdHRsX3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQljb25zdCBzdHJ1Y3QgaXB0X1RUTF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbmV3X3R0bDsKLQotCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCi0JCXJldHVybiBORl9EUk9QOwotCi0JaXBoID0gaXBfaGRyKHNrYik7Ci0KLQlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKLQkJY2FzZSBJUFRfVFRMX1NFVDoKLQkJCW5ld190dGwgPSBpbmZvLT50dGw7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFRfVFRMX0lOQzoKLQkJCW5ld190dGwgPSBpcGgtPnR0bCArIGluZm8tPnR0bDsKLQkJCWlmIChuZXdfdHRsID4gMjU1KQotCQkJCW5ld190dGwgPSAyNTU7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFRfVFRMX0RFQzoKLQkJCW5ld190dGwgPSBpcGgtPnR0bCAtIGluZm8tPnR0bDsKLQkJCWlmIChuZXdfdHRsIDwgMCkKLQkJCQluZXdfdHRsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmV3X3R0bCA9IGlwaC0+dHRsOwotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKG5ld190dGwgIT0gaXBoLT50dGwpIHsKLQkJY3N1bV9yZXBsYWNlMigmaXBoLT5jaGVjaywgaHRvbnMoaXBoLT50dGwgPDwgOCksCi0JCQkJCSAgIGh0b25zKG5ld190dGwgPDwgOCkpOwotCQlpcGgtPnR0bCA9IG5ld190dGw7Ci0JfQotCi0JcmV0dXJuIFhUX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgYm9vbCB0dGxfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0KLQlpZiAoaW5mby0+bW9kZSA+IElQVF9UVExfTUFYTU9ERSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfVFRMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKLQkJCWluZm8tPm1vZGUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChpbmZvLT5tb2RlICE9IElQVF9UVExfU0VUICYmIGluZm8tPnR0bCA9PSAwKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IHR0bF90Z19yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZSAJCT0gIlRUTCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjQsCi0JLnRhcmdldCAJPSB0dGxfdGcsCi0JLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9UVExfaW5mbyksCi0JLnRhYmxlCQk9ICJtYW5nbGUiLAotCS5jaGVja2VudHJ5IAk9IHR0bF90Z19jaGVjaywKLQkubWUgCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHRsX3RnX2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZ0dGxfdGdfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHR0bF90Z19leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoJnR0bF90Z19yZWcpOwotfQotCi1tb2R1bGVfaW5pdCh0dGxfdGdfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0dGxfdGdfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCmluZGV4IDE4YTI4MjYuLmQzMmNjNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCkBAIC0zNzksNyArMzc5LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcHRfdWxvZ19sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcHRfdWxvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXB0X1VMT0ciLAogCS5sb2dmbgkJPSBpcHRfbG9nZm4sCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5N2YxY2IuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgVFRMCi0gKgotICogKEMpIDIwMDAsMjAwMSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3R0bC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCi1NT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogSVB2NCBUVEwgZmllbGQgbWF0Y2giKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGJvb2wgdHRsX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfdHRsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCB1OCB0dGwgPSBpcF9oZHIoc2tiKS0+dHRsOwotCi0Jc3dpdGNoIChpbmZvLT5tb2RlKSB7Ci0JCWNhc2UgSVBUX1RUTF9FUToKLQkJCXJldHVybiB0dGwgPT0gaW5mby0+dHRsOwotCQljYXNlIElQVF9UVExfTkU6Ci0JCQlyZXR1cm4gdHRsICE9IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX0xUOgotCQkJcmV0dXJuIHR0bCA8IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX0dUOgotCQkJcmV0dXJuIHR0bCA+IGluZm8tPnR0bDsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF90dGw6IHVua25vd24gbW9kZSAlZFxuIiwKLQkJCQlpbmZvLT5tb2RlKTsKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggdHRsX210X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJ0dGwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCS5tYXRjaAkJPSB0dGxfbXQsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X3R0bF9pbmZvKSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0dGxfbXRfaW5pdCh2b2lkKQotewotCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmdHRsX210X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0dGxfbXRfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnR0bF9tdF9yZWcpOwotfQotCi1tb2R1bGVfaW5pdCh0dGxfbXRfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0dGxfbXRfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCmluZGV4IDUyY2I2OTMuLmMzMGE5NjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCkBAIC01Niw3ICs1Niw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCmluZGV4IDM5MjlkMjAuLjQwODc2MTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCkBAIC02Nyw3ICs2Nyw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X21hbmdsZXIubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKaW5kZXggN2Y2NWQxOC4uZTUzNTZkYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKQEAgLTM5LDcgKzM5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKIAkubmFtZSA9ICJyYXciLAogCS52YWxpZF9ob29rcyA9ICBSQVdfVkFMSURfSE9PS1MsCi0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X3Jhdy5sb2NrKSwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuYWYgPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCmluZGV4IGE1MmEzNWYuLjI5YWI2MzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwpAQCAtNjAsNyArNjAsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHkiLAogCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChzZWN1cml0eV90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNGJlYjA0Zi4uOGI2ODFmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xMjAsOCArMTIwLDEwIEBACiAJCXR5cGVvZihuZl9uYXRfc2VxX2FkanVzdF9ob29rKSBzZXFfYWRqdXN0OwogCiAJCXNlcV9hZGp1c3QgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NlcV9hZGp1c3RfaG9vayk7Ci0JCWlmICghc2VxX2FkanVzdCB8fCAhc2VxX2FkanVzdChza2IsIGN0LCBjdGluZm8pKQorCQlpZiAoIXNlcV9hZGp1c3QgfHwgIXNlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkgeworCQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5mX2N0X25ldChjdCksIGRyb3ApOwogCQkJcmV0dXJuIE5GX0RST1A7CisJCX0KIAl9CiBvdXQ6CiAJLyogV2UndmUgc2VlbiBpdCBjb21pbmcgb3V0IHRoZSBvdGhlciBzaWRlOiBjb25maXJtIGl0ICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCmluZGV4IGE3ZWIwNDcuLjYzNDhhNzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCkBAIC02MSw3ICs2MSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIG5hdF90YWJsZSA9IHsKIAkubmFtZQkJPSAibmF0IiwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKG5hdF90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwppbmRleCAxODJmODQ1Li5kOTUyMWY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcCIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1BPUlQpLAorCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFNOTVBfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogfTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAKIAkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcF90cmFwIiwKIAkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFNOTVBfVFJBUF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihTTk1QX1RSQVBfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvYy5jIGIvbmV0L2lwdjQvcHJvYy5jCmluZGV4IGViNjJlNTguLmNmMGNkZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Byb2MuYworKysgYi9uZXQvaXB2NC9wcm9jLmMKQEAgLTU0LDggKzU0LDggQEAKIAlpbnQgb3JwaGFucywgc29ja2V0czsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlvcnBoYW5zID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfb3JwaGFuX2NvdW50KSwKLQlzb2NrZXRzID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpLAorCW9ycGhhbnMgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoJnRjcF9vcnBoYW5fY291bnQpOworCXNvY2tldHMgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoJnRjcF9zb2NrZXRzX2FsbG9jYXRlZCk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiAKIAlzb2NrZXRfc2VxX3Nob3coc2VxKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggZGZmOGJjNC4uZjc3NDY1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTQ5Myw2ICs0OTMsNyBAQAogCiAJaXBjLmFkZHIgPSBpbmV0LT5zYWRkcjsKIAlpcGMub3B0ID0gTlVMTDsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAJaXBjLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAKIAlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTdmNzExNS4uNWNhZWU2MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmdjID0JCQlydF9nYXJiYWdlX2NvbGxlY3QsCiAJLmNoZWNrID0JCWlwdjRfZHN0X2NoZWNrLAogCS5kZXN0cm95ID0JCWlwdjRfZHN0X2Rlc3Ryb3ksCkBAIC0yNjk2LDcgKzI2OTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVULAotCS5wcm90b2NvbAkJPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5kZXN0cm95CQk9CWlwdjRfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcHY0X2RzdF9jaGVjaywKIAkudXBkYXRlX3BtdHUJCT0JaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCkBAIC0yNzc5LDcgKzI3NzksOCBAQAogCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIHJwLCBmbHAsIE5VTEwsIDApOwogfQogCi1zdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCitzdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCiAJCQlpbnQgbm93YWl0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKQEAgLTI4NDQsOCArMjg0NSw4IEBACiAJCV9fYmUzMiBkc3QgPSBydC0+cnRfZHN0OwogCiAJCWlmIChpcHY0X2lzX211bHRpY2FzdChkc3QpICYmICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChkc3QpICYmCi0JCSAgICBJUFY0X0RFVkNPTkZfQUxMKCZpbml0X25ldCwgTUNfRk9SV0FSRElORykpIHsKLQkJCWludCBlcnIgPSBpcG1yX2dldF9yb3V0ZShza2IsIHIsIG5vd2FpdCk7CisJCSAgICBJUFY0X0RFVkNPTkZfQUxMKG5ldCwgTUNfRk9SV0FSRElORykpIHsKKwkJCWludCBlcnIgPSBpcG1yX2dldF9yb3V0ZShuZXQsIHNrYiwgciwgbm93YWl0KTsKIAkJCWlmIChlcnIgPD0gMCkgewogCQkJCWlmICghbm93YWl0KSB7CiAJCQkJCWlmIChlcnIgPT0gMCkKQEAgLTI5NTAsNyArMjk1MSw3IEBACiAJaWYgKHJ0bS0+cnRtX2ZsYWdzICYgUlRNX0ZfTk9USUZZKQogCQlydC0+cnRfZmxhZ3MgfD0gUlRDRl9OT1RJRlk7CiAKLQllcnIgPSBydF9maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBubGgtPm5sbXNnX3NlcSwKKwllcnIgPSBydF9maWxsX2luZm8obmV0LCBza2IsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQsIG5saC0+bmxtc2dfc2VxLAogCQkJICAgUlRNX05FV1JPVVRFLCAwLCAwKTsKIAlpZiAoZXJyIDw9IDApCiAJCWdvdG8gZXJyb3V0X2ZyZWU7CkBAIC0yOTg4LDcgKzI5ODksNyBAQAogCQkJaWYgKHJ0X2lzX2V4cGlyZWQocnQpKQogCQkJCWNvbnRpbnVlOwogCQkJc2tiLT5kc3QgPSBkc3RfY2xvbmUoJnJ0LT51LmRzdCk7Ci0JCQlpZiAocnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQlpZiAocnRfZmlsbF9pbmZvKG5ldCwgc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJIGNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV1JPVVRFLAogCQkJCQkgMSwgTkxNX0ZfTVVMVEkpIDw9IDApIHsKIAkJCQlkc3RfcmVsZWFzZSh4Y2hnKCZza2ItPmRzdCwgTlVMTCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA3NmIxNDhiLi4yNDUxYWViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtNjYxLDYgKzY2MSw0NyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHRjcF94bWl0X3NpemVfZ29hbChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93LAorCQkJCSAgICAgICBpbnQgbGFyZ2VfYWxsb3dlZCkKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwl1MzIgeG1pdF9zaXplX2dvYWwsIG9sZF9zaXplX2dvYWw7CisKKwl4bWl0X3NpemVfZ29hbCA9IG1zc19ub3c7CisKKwlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSkgeworCQl4bWl0X3NpemVfZ29hbCA9ICgoc2stPnNrX2dzb19tYXhfc2l6ZSAtIDEpIC0KKwkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0KKwkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiAtCisJCQkJICB0cC0+dGNwX2hlYWRlcl9sZW4pOworCisJCXhtaXRfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCB4bWl0X3NpemVfZ29hbCk7CisKKwkJLyogV2UgdHJ5IGhhcmQgdG8gYXZvaWQgZGl2aWRlcyBoZXJlICovCisJCW9sZF9zaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWxfc2VncyAqIG1zc19ub3c7CisKKwkJaWYgKGxpa2VseShvbGRfc2l6ZV9nb2FsIDw9IHhtaXRfc2l6ZV9nb2FsICYmCisJCQkgICBvbGRfc2l6ZV9nb2FsICsgbXNzX25vdyA+IHhtaXRfc2l6ZV9nb2FsKSkgeworCQkJeG1pdF9zaXplX2dvYWwgPSBvbGRfc2l6ZV9nb2FsOworCQl9IGVsc2UgeworCQkJdHAtPnhtaXRfc2l6ZV9nb2FsX3NlZ3MgPSB4bWl0X3NpemVfZ29hbCAvIG1zc19ub3c7CisJCQl4bWl0X3NpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbF9zZWdzICogbXNzX25vdzsKKwkJfQorCX0KKworCXJldHVybiBtYXgoeG1pdF9zaXplX2dvYWwsIG1zc19ub3cpOworfQorCitzdGF0aWMgaW50IHRjcF9zZW5kX21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZV9nb2FsLCBpbnQgZmxhZ3MpCit7CisJaW50IG1zc19ub3c7CisKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKKwkqc2l6ZV9nb2FsID0gdGNwX3htaXRfc2l6ZV9nb2FsKHNrLCBtc3Nfbm93LCAhKGZsYWdzICYgTVNHX09PQikpOworCisJcmV0dXJuIG1zc19ub3c7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGRvX3RjcF9zZW5kcGFnZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgcG9mZnNldCwKIAkJCSBzaXplX3QgcHNpemUsIGludCBmbGFncykKIHsKQEAgLTY3NywxMyArNzE4LDEyIEBACiAKIAljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOwogCi0JbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0Jc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAljb3BpZWQgPSAwOwogCiAJZXJyID0gLUVQSVBFOwogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKLQkJZ290byBkb19lcnJvcjsKKwkJZ290byBvdXRfZXJyOwogCiAJd2hpbGUgKHBzaXplID4gMCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spOwpAQCAtNzYxLDggKzgwMSw3IEBACiAJCWlmICgoZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCAmdGltZW8pKSAhPSAwKQogCQkJZ290byBkb19lcnJvcjsKIAotCQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQkJc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJfQogCiBvdXQ6CkBAIC04NDQsOCArODgzLDcgQEAKIAkvKiBUaGlzIHNob3VsZCBiZSBpbiBwb2xsICovCiAJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAKIAkvKiBPayBjb21tZW5jZSBzZW5kaW5nLiAqLwogCWlvdmxlbiA9IG1zZy0+bXNnX2lvdmxlbjsKQEAgLTg1NCw3ICs4OTIsNyBAQAogCiAJZXJyID0gLUVQSVBFOwogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKLQkJZ290byBkb19lcnJvcjsKKwkJZ290byBvdXRfZXJyOwogCiAJd2hpbGUgKC0taW92bGVuID49IDApIHsKIAkJaW50IHNlZ2xlbiA9IGlvdi0+aW92X2xlbjsKQEAgLTEwMDcsOCArMTA0NSw3IEBACiAJCQlpZiAoKGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgJnRpbWVvKSkgIT0gMCkKIAkJCQlnb3RvIGRvX2Vycm9yOwogCi0JCQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQkJCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwkJCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAkJfQogCX0KIApAQCAtMTA0NSw4ICsxMDgyLDcgQEAKICAqLwogCiBzdGF0aWMgaW50IHRjcF9yZWN2X3VyZyhzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8sCi0JCQlzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncywKLQkJCWludCAqYWRkcl9sZW4pCisJCQlzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIApAQCAtMTY2MSw3ICsxNjk3LDcgQEAKIAlyZXR1cm4gZXJyOwogCiByZWN2X3VyZzoKLQllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MsIGFkZHJfbGVuKTsKKwllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MpOwogCWdvdG8gb3V0OwogfQogCkBAIC0yNDc4LDIzICsyNTE0LDIzIEBACiAJc3RydWN0IHRjcGhkciAqdGgyOwogCXVuc2lnbmVkIGludCB0aGxlbjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHRvdGFsOwogCXVuc2lnbmVkIGludCBtc3MgPSAxOwogCWludCBmbHVzaCA9IDE7CisJaW50IGk7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnRoKSkpCisJdGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHNpemVvZigqdGgpKTsKKwlpZiAodW5saWtlbHkoIXRoKSkKIAkJZ290byBvdXQ7CiAKLQl0aCA9IHRjcF9oZHIoc2tiKTsKIAl0aGxlbiA9IHRoLT5kb2ZmICogNDsKIAlpZiAodGhsZW4gPCBzaXplb2YoKnRoKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aGxlbikpCisJdGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHRobGVuKTsKKwlpZiAodW5saWtlbHkoIXRoKSkKIAkJZ290byBvdXQ7CiAKLQl0aCA9IHRjcF9oZHIoc2tiKTsKLQlfX3NrYl9wdWxsKHNrYiwgdGhsZW4pOworCXNrYl9ncm9fcHVsbChza2IsIHRobGVuKTsKIAogCWZsYWdzID0gdGNwX2ZsYWdfd29yZCh0aCk7CiAKQEAgLTI1MDQsNyArMjU0MCw3IEBACiAKIAkJdGgyID0gdGNwX2hkcihwKTsKIAotCQlpZiAodGgtPnNvdXJjZSAhPSB0aDItPnNvdXJjZSB8fCB0aC0+ZGVzdCAhPSB0aDItPmRlc3QpIHsKKwkJaWYgKCh0aC0+c291cmNlIF4gdGgyLT5zb3VyY2UpIHwgKHRoLT5kZXN0IF4gdGgyLT5kZXN0KSkgewogCQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IDA7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjUxOSwxNCArMjU1NSwxNSBAQAogCWZsdXNoIHw9IGZsYWdzICYgVENQX0ZMQUdfQ1dSOwogCWZsdXNoIHw9IChmbGFncyBeIHRjcF9mbGFnX3dvcmQodGgyKSkgJgogCQkgIH4oVENQX0ZMQUdfQ1dSIHwgVENQX0ZMQUdfRklOIHwgVENQX0ZMQUdfUFNIKTsKLQlmbHVzaCB8PSB0aC0+YWNrX3NlcSAhPSB0aDItPmFja19zZXEgfHwgdGgtPndpbmRvdyAhPSB0aDItPndpbmRvdzsKLQlmbHVzaCB8PSBtZW1jbXAodGggKyAxLCB0aDIgKyAxLCB0aGxlbiAtIHNpemVvZigqdGgpKTsKKwlmbHVzaCB8PSAodGgtPmFja19zZXEgXiB0aDItPmFja19zZXEpIHwgKHRoLT53aW5kb3cgXiB0aDItPndpbmRvdyk7CisJZm9yIChpID0gc2l6ZW9mKCp0aCk7ICFmbHVzaCAmJiBpIDwgdGhsZW47IGkgKz0gNCkKKwkJZmx1c2ggfD0gKih1MzIgKikoKHU4ICopdGggKyBpKSBeCisJCQkgKih1MzIgKikoKHU4ICopdGgyICsgaSk7CiAKLQl0b3RhbCA9IHAtPmxlbjsKIAltc3MgPSBza2Jfc2hpbmZvKHApLT5nc29fc2l6ZTsKIAotCWZsdXNoIHw9IHNrYi0+bGVuID4gbXNzIHx8IHNrYi0+bGVuIDw9IDA7Ci0JZmx1c2ggfD0gbnRvaGwodGgyLT5zZXEpICsgdG90YWwgIT0gbnRvaGwodGgtPnNlcSk7CisJZmx1c2ggfD0gKHNrYl9ncm9fbGVuKHNrYikgPiBtc3MpIHwgIXNrYl9ncm9fbGVuKHNrYik7CisJZmx1c2ggfD0gKG50b2hsKHRoMi0+c2VxKSArIHNrYl9ncm9fbGVuKHApKSBeIG50b2hsKHRoLT5zZXEpOwogCiAJaWYgKGZsdXNoIHx8IHNrYl9ncm9fcmVjZWl2ZShoZWFkLCBza2IpKSB7CiAJCW1zcyA9IDE7CkBAIC0yNTM4LDcgKzI1NzUsNyBAQAogCXRjcF9mbGFnX3dvcmQodGgyKSB8PSBmbGFncyAmIChUQ1BfRkxBR19GSU4gfCBUQ1BfRkxBR19QU0gpOwogCiBvdXRfY2hlY2tfZmluYWw6Ci0JZmx1c2ggPSBza2ItPmxlbiA8IG1zczsKKwlmbHVzaCA9IHNrYl9ncm9fbGVuKHNrYikgPCBtc3M7CiAJZmx1c2ggfD0gZmxhZ3MgJiAoVENQX0ZMQUdfVVJHIHwgVENQX0ZMQUdfUFNIIHwgVENQX0ZMQUdfUlNUIHwKIAkJCSAgVENQX0ZMQUdfU1lOIHwgVENQX0ZMQUdfRklOKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IDdlYjc2MzYuLjNiNTNmZDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTE0OSwxNiArMTQ5LDcgQEAKIAkJdGNwX3Nsb3dfc3RhcnQodHApOwogCWVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwotCi0JCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCi0JCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCi0JCSAqLwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgY2EtPmNudCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCA0ZWM1YjRlLi5lOTJiZWI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTMzNiw2ICszMzYsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9zbG93X3N0YXJ0KTsKIAorLyogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQgKG9yIGFsdGVybmF0aXZlIHcpICovCit2b2lkIHRjcF9jb25nX2F2b2lkX2FpKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiB3KQoreworCWlmICh0cC0+c25kX2N3bmRfY250ID49IHcpIHsKKwkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCXRwLT5zbmRfY3duZCsrOworCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKwl9IGVsc2UgeworCQl0cC0+c25kX2N3bmRfY250Kys7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodGNwX2NvbmdfYXZvaWRfYWkpOworCiAvKgogICogVENQIFJlbm8gY29uZ2VzdGlvbiBjb250cm9sCiAgKiBUaGlzIGlzIHNwZWNpYWwgY2FzZSB1c2VkIGZvciBmYWxsYmFjayBhcyB3ZWxsLgpAQCAtMzY1LDEzICszNzgsNyBAQAogCQkJCXRwLT5zbmRfY3duZCsrOwogCQl9CiAJfSBlbHNlIHsKLQkJLyogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub19jb25nX2F2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jdWJpYy5jIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKaW5kZXggZWU0NjdlYy4uNzFkNWYyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2N1YmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTI5NCwxNiArMjk0LDcgQEAKIAkJdGNwX3Nsb3dfc3RhcnQodHApOwogCX0gZWxzZSB7CiAJCWJpY3RjcF91cGRhdGUoY2EsIHRwLT5zbmRfY3duZCk7Ci0KLQkJLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KLQkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQKLQkJICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IGNhLT5jbnQpIHsKLQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJdHAtPnNuZF9jd25kKys7Ci0JCQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQkJfSBlbHNlCi0JCQl0cC0+c25kX2N3bmRfY250Kys7CisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBjYS0+Y250KTsKIAl9CiAKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9odGNwLmMgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCmluZGV4IDkzNzU0OWIuLjI2ZDVjN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9odGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwpAQCAtMTE1LDggKzExNSw3IEBACiAJCXJldHVybjsKIAogCS8qIGFjaGlldmVkIHRocm91Z2hwdXQgY2FsY3VsYXRpb25zICovCi0JaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gJiYKLQkgICAgaWNzay0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfRGlzb3JkZXIpIHsKKwlpZiAoISgoMSA8PCBpY3NrLT5pY3NrX2NhX3N0YXRlKSAmIChUQ1BGX0NBX09wZW4gfCBUQ1BGX0NBX0Rpc29yZGVyKSkpIHsKIAkJY2EtPnBhY2tldGNvdW50ID0gMDsKIAkJY2EtPmxhc3R0aW1lID0gbm93OwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGMyODk3NmE3Li4yYmM4ZTI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KQEAgLTExNzgsMTAgKzExNzksMTggQEAKIAkJaWYgKCEoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYWZ0ZXIocmVjZWl2ZWRfdXB0bywgYWNrX3NlcSkgJiYKLQkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwKLQkJICAgICAhYmVmb3JlKHJlY2VpdmVkX3VwdG8sCi0JCQkgICAgIGFja19zZXEgKyB0cC0+cmVvcmRlcmluZyAqIHRwLT5tc3NfY2FjaGUpKSkgeworCQkvKiBUT0RPOiBXZSB3b3VsZCBsaWtlIHRvIGdldCByaWQgb2YgdGNwX2lzX2ZhY2sodHApIG9ubHkKKwkJICogY29uc3RyYWludCBoZXJlIChzZWUgYWJvdmUpIGJ1dCBmaWd1cmluZyBvdXQgdGhhdCBhdAorCQkgKiBsZWFzdCB0cC0+cmVvcmRlcmluZyBTQUNLIGJsb2NrcyByZXNpZGUgYmV0d2VlbiBhY2tfc2VxCisJCSAqIGFuZCByZWNlaXZlZF91cHRvIGlzIG5vdCBlYXN5IHRhc2sgdG8gZG8gY2hlYXBseSB3aXRoCisJCSAqIHRoZSBhdmFpbGFibGUgZGF0YXN0cnVjdHVyZXMuCisJCSAqCisJCSAqIFdoZXRoZXIgRkFDSyBzaG91bGQgY2hlY2sgaGVyZSBmb3IgdHAtPnJlb3JkZXJpbmcgc2VncworCQkgKiBpbi1iZXR3ZWVuIG9uZSBjb3VsZCBhcmd1ZSBmb3IgZWl0aGVyIHdheSAoaXQgd291bGQgYmUKKwkJICogcmF0aGVyIHNpbXBsZSB0byBpbXBsZW1lbnQgYXMgd2UgY291bGQgY291bnQgZmFja19jb3VudAorCQkgKiBkdXJpbmcgdGhlIHdhbGsgYW5kIGRvIHRwLT5mYWNrZXRzX291dCAtIGZhY2tfY291bnQpLgorCQkgKi8KKwkJaWYgKGFmdGVyKHJlY2VpdmVkX3VwdG8sIGFja19zZXEpKSB7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIApAQCAtMTc5NCwxMSArMTgwMyw3IEBACiAJZm9yIChpID0gdXNlZF9zYWNrcyAtIDE7IGkgPiAwOyBpLS0pIHsKIAkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewogCQkJaWYgKGFmdGVyKHNwW2pdLnN0YXJ0X3NlcSwgc3BbaiArIDFdLnN0YXJ0X3NlcSkpIHsKLQkJCQlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgdG1wOwotCi0JCQkJdG1wID0gc3Bbal07Ci0JCQkJc3Bbal0gPSBzcFtqICsgMV07Ci0JCQkJc3BbaiArIDFdID0gdG1wOworCQkJCXN3YXAoc3Bbal0sIHNwW2ogKyAxXSk7CiAKIAkJCQkvKiBUcmFjayB3aGVyZSB0aGUgZmlyc3QgU0FDSyBibG9jayBnb2VzIHRvICovCiAJCQkJaWYgKGogPT0gZmlyc3Rfc2Fja19pbmRleCkKQEAgLTI0NTMsNiArMjQ1OCw0NCBAQAogCXJldHVybiAwOwogfQogCisvKiBOZXcgaGV1cmlzdGljczogaXQgaXMgcG9zc2libGUgb25seSBhZnRlciB3ZSBzd2l0Y2hlZCB0byByZXN0YXJ0IHRpbWVyCisgKiBlYWNoIHRpbWUgd2hlbiBzb21ldGhpbmcgaXMgQUNLZWQuIEhlbmNlLCB3ZSBjYW4gZGV0ZWN0IHRpbWVkIG91dCBwYWNrZXRzCisgKiBkdXJpbmcgZmFzdCByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgorICoKKyAqIFVzZWZ1bG5lc3Mgb2YgdGhpcyBhcyBpcyB2ZXJ5IHF1ZXN0aW9uYWJsZSwgc2luY2Ugd2Ugc2hvdWxkIGtub3cgd2hpY2ggb2YKKyAqIHRoZSBzZWdtZW50cyBpcyB0aGUgbmV4dCB0byB0aW1lb3V0IHdoaWNoIGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlIHRvIGZpbmQKKyAqIGluIGdlbmVyYWwgY2FzZSB1bmxlc3Mgd2UgYWRkIHNvbWUgZGF0YSBzdHJ1Y3R1cmUganVzdCBmb3IgdGhhdC4gVGhlCisgKiBjdXJyZW50IGFwcHJvYWNoIGNlcnRhaW5seSB3b24ndCBmaW5kIHRoZSByaWdodCBvbmUgdG9vIG9mdGVuIGFuZCB3aGVuIGl0CisgKiBmaW5hbGx5IGRvZXMgZmluZCBfc29tZXRoaW5nXyBpdCB1c3VhbGx5IG1hcmtzIGxhcmdlIHBhcnQgb2YgdGhlIHdpbmRvdworICogcmlnaHQgYXdheSAoYmVjYXVzZSBhIHJldHJhbnNtaXNzaW9uIHdpdGggYSBsYXJnZXIgdGltZXN0YW1wIGJsb2NrcyB0aGUKKyAqIGxvb3AgZnJvbSBhZHZhbmNpbmcpLiAtaWoKKyAqLworc3RhdGljIHZvaWQgdGNwX3RpbWVvdXRfc2ticyhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghdGNwX2lzX2ZhY2sodHApIHx8ICF0Y3BfaGVhZF90aW1lZG91dChzaykpCisJCXJldHVybjsKKworCXNrYiA9IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50OworCWlmICh0cC0+c2NvcmVib2FyZF9za2JfaGludCA9PSBOVUxMKQorCQlza2IgPSB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7CisKKwl0Y3BfZm9yX3dyaXRlX3F1ZXVlX2Zyb20oc2tiLCBzaykgeworCQlpZiAoc2tiID09IHRjcF9zZW5kX2hlYWQoc2spKQorCQkJYnJlYWs7CisJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKKwkJCWJyZWFrOworCisJCXRjcF9za2JfbWFya19sb3N0KHRwLCBza2IpOworCX0KKworCXRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID0gc2tiOworCisJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Cit9CisKIC8qIE1hcmsgaGVhZCBvZiBxdWV1ZSB1cCBhcyBsb3N0LiBXaXRoIFJGQzM1MTcgU0FDSywgdGhlIHBhY2tldHMgaXMKICAqIGlzIGFnYWluc3Qgc2Fja2VkICJjbnQiLCBvdGhlcndpc2UgaXQncyBhZ2FpbnN0IGZhY2tlZCAiY250IgogICovCkBAIC0yNTI1LDMwICsyNTY4LDcgQEAKIAkJdGNwX21hcmtfaGVhZF9sb3N0KHNrLCBzYWNrZWRfdXB0byk7CiAJfQogCi0JLyogTmV3IGhldXJpc3RpY3M6IGl0IGlzIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgd2Ugc3dpdGNoZWQKLQkgKiB0byByZXN0YXJ0IHRpbWVyIGVhY2ggdGltZSB3aGVuIHNvbWV0aGluZyBpcyBBQ0tlZC4KLQkgKiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cyBkdXJpbmcgZmFzdAotCSAqIHJldHJhbnNtaXQgd2l0aG91dCBmYWxsaW5nIHRvIHNsb3cgc3RhcnQuCi0JICovCi0JaWYgKHRjcF9pc19mYWNrKHRwKSAmJiB0Y3BfaGVhZF90aW1lZG91dChzaykpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCQlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludCA/IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50Ci0JCQk6IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKTsKLQotCQl0Y3BfZm9yX3dyaXRlX3F1ZXVlX2Zyb20oc2tiLCBzaykgewotCQkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKLQkJCQlicmVhazsKLQkJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKLQkJCQlicmVhazsKLQotCQkJdGNwX3NrYl9tYXJrX2xvc3QodHAsIHNrYik7Ci0JCX0KLQotCQl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKLQotCQl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKLQl9CisJdGNwX3RpbWVvdXRfc2ticyhzayk7CiB9CiAKIC8qIENXTkQgbW9kZXJhdGlvbiwgcHJldmVudGluZyBidXJzdHMgZHVlIHRvIHRvbyBiaWcgQUNLcwpAQCAtMjgxMyw3ICsyODMzLDcgQEAKIAlpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgdGNwX210dXBfcHJvYmVfc3VjY2VzcyhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwpAQCAtMjg0MSw3ICsyODYxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAl1MzIgcHJpb3JfbG9zdCA9IHRwLT5sb3N0X291dDsKIAogCXRjcF9mb3Jfd3JpdGVfcXVldWUoc2tiLCBzaykgewpAQCAtMzE3OCw3ICszMTk4LDYgQEAKIAogCXdoaWxlICgoc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spKSAmJiBza2IgIT0gdGNwX3NlbmRfaGVhZChzaykpIHsKIAkJc3RydWN0IHRjcF9za2JfY2IgKnNjYiA9IFRDUF9TS0JfQ0Ioc2tiKTsKLQkJdTMyIGVuZF9zZXE7CiAJCXUzMiBhY2tlZF9wY291bnQ7CiAJCXU4IHNhY2tlZCA9IHNjYi0+c2Fja2VkOwogCkBAIC0zMTkzLDE2ICszMjEyLDggQEAKIAkJCQlicmVhazsKIAogCQkJZnVsbHlfYWNrZWQgPSAwOwotCQkJZW5kX3NlcSA9IHRwLT5zbmRfdW5hOwogCQl9IGVsc2UgewogCQkJYWNrZWRfcGNvdW50ID0gdGNwX3NrYl9wY291bnQoc2tiKTsKLQkJCWVuZF9zZXEgPSBzY2ItPmVuZF9zZXE7Ci0JCX0KLQotCQkvKiBNVFUgcHJvYmluZyBjaGVja3MgKi8KLQkJaWYgKGZ1bGx5X2Fja2VkICYmIGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplICYmCi0JCSAgICAhYWZ0ZXIodHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfZW5kLCBzY2ItPmVuZF9zZXEpKSB7Ci0JCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrLCBza2IpOwogCQl9CiAKIAkJaWYgKHNhY2tlZCAmIFRDUENCX1JFVFJBTlMpIHsKQEAgLTMyNjcsMjQgKzMyNzgsMjYgQEAKIAkJY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzCiAJCQk9IGluZXRfY3NrKHNrKS0+aWNza19jYV9vcHM7CiAKKwkJaWYgKHVubGlrZWx5KGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplICYmCisJCQkgICAgICFhZnRlcih0cC0+bXR1X3Byb2JlLnByb2JlX3NlcV9lbmQsIHRwLT5zbmRfdW5hKSkpIHsKKwkJCXRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc2spOworCQl9CisKIAkJdGNwX2Fja191cGRhdGVfcnR0KHNrLCBmbGFnLCBzZXFfcnR0KTsKIAkJdGNwX3JlYXJtX3J0byhzayk7CiAKIAkJaWYgKHRjcF9pc19yZW5vKHRwKSkgewogCQkJdGNwX3JlbW92ZV9yZW5vX3NhY2tzKHNrLCBwa3RzX2Fja2VkKTsKIAkJfSBlbHNlIHsKKwkJCWludCBkZWx0YTsKKwogCQkJLyogTm9uLXJldHJhbnNtaXR0ZWQgaG9sZSBnb3QgZmlsbGVkPyBUaGF0J3MgcmVvcmRlcmluZyAqLwogCQkJaWYgKHJlb3JkIDwgcHJpb3JfZmFja2V0cykKIAkJCQl0Y3BfdXBkYXRlX3Jlb3JkZXJpbmcoc2ssIHRwLT5mYWNrZXRzX291dCAtIHJlb3JkLCAwKTsKIAotCQkJLyogTm8gbmVlZCB0byBjYXJlIGZvciB1bmRlcmZsb3dzIGhlcmUgYmVjYXVzZQotCQkJICogdGhlIGxvc3Rfc2tiX2hpbnQgZ2V0cyBOVUxMZWQgaWYgd2UncmUgcGFzdCBpdAotCQkJICogKG9yIHNvbWV0aGluZyBub24tdHJpdmlhbCBoYXBwZW5lZCkKLQkJCSAqLwotCQkJaWYgKHRjcF9pc19mYWNrKHRwKSkKLQkJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBwa3RzX2Fja2VkOwotCQkJZWxzZQotCQkJCXRwLT5sb3N0X2NudF9oaW50IC09IHByaW9yX3NhY2tlZCAtIHRwLT5zYWNrZWRfb3V0OworCQkJZGVsdGEgPSB0Y3BfaXNfZmFjayh0cCkgPyBwa3RzX2Fja2VkIDoKKwkJCQkJCSAgcHJpb3Jfc2Fja2VkIC0gdHAtPnNhY2tlZF9vdXQ7CisJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBtaW4odHAtPmxvc3RfY250X2hpbnQsIGRlbHRhKTsKIAkJfQogCiAJCXRwLT5mYWNrZXRzX291dCAtPSBtaW4ocGt0c19hY2tlZCwgdHAtPmZhY2tldHNfb3V0KTsKQEAgLTMzOTYsNyArMzQwOSw3IEBACiAKIAlpZiAodGNwX21heV91cGRhdGVfd2luZG93KHRwLCBhY2ssIGFja19zZXEsIG53aW4pKSB7CiAJCWZsYWcgfD0gRkxBR19XSU5fVVBEQVRFOwotCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2ssIGFja19zZXEpOworCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2tfc2VxKTsKIAogCQlpZiAodHAtPnNuZF93bmQgIT0gbndpbikgewogCQkJdHAtPnNuZF93bmQgPSBud2luOwpAQCAtMzU3MiwxNSArMzU4NSwxOCBAQAogCWludCBwcmlvcl9wYWNrZXRzOwogCWludCBmcnRvX2N3bmQgPSAwOwogCi0JLyogSWYgdGhlIGFjayBpcyBuZXdlciB0aGFuIHNlbnQgb3Igb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCisJLyogSWYgdGhlIGFjayBpcyBvbGRlciB0aGFuIHByZXZpb3VzIGFja3MKIAkgKiB0aGVuIHdlIGNhbiBwcm9iYWJseSBpZ25vcmUgaXQuCiAJICovCi0JaWYgKGFmdGVyKGFjaywgdHAtPnNuZF9ueHQpKQotCQlnb3RvIHVuaW50ZXJlc3RpbmdfYWNrOwotCiAJaWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEpKQogCQlnb3RvIG9sZF9hY2s7CiAKKwkvKiBJZiB0aGUgYWNrIGluY2x1ZGVzIGRhdGEgd2UgaGF2ZW4ndCBzZW50IHlldCwgZGlzY2FyZAorCSAqIHRoaXMgc2VnbWVudCAoUkZDNzkzIFNlY3Rpb24gMy45KS4KKwkgKi8KKwlpZiAoYWZ0ZXIoYWNrLCB0cC0+c25kX254dCkpCisJCWdvdG8gaW52YWxpZF9hY2s7CisKIAlpZiAoYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZmxhZyB8PSBGTEFHX1NORF9VTkFfQURWQU5DRUQ7CiAKQEAgLTM2MDEsNyArMzYxNyw3IEBACiAJCSAqIE5vIG1vcmUgY2hlY2tzIGFyZSByZXF1aXJlZC4KIAkJICogTm90ZSwgd2UgdXNlIHRoZSBmYWN0IHRoYXQgU05ELlVOQT49U05ELldMMi4KIAkJICovCi0JCXRjcF91cGRhdGVfd2wodHAsIGFjaywgYWNrX3NlcSk7CisJCXRjcF91cGRhdGVfd2wodHAsIGFja19zZXEpOwogCQl0cC0+c25kX3VuYSA9IGFjazsKIAkJZmxhZyB8PSBGTEFHX1dJTl9VUERBVEU7CiAKQEAgLTM2NzAsNiArMzY4NiwxMCBAQAogCQl0Y3BfYWNrX3Byb2JlKHNrKTsKIAlyZXR1cm4gMTsKIAoraW52YWxpZF9hY2s6CisJU09DS19ERUJVRyhzaywgIkFjayAldSBhZnRlciAldToldVxuIiwgYWNrLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOworCXJldHVybiAtMTsKKwogb2xkX2FjazoKIAlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQpIHsKIAkJdGNwX3NhY2t0YWdfd3JpdGVfcXVldWUoc2ssIHNrYiwgcHJpb3Jfc25kX3VuYSk7CkBAIC0zNjc3LDggKzM2OTcsNyBAQAogCQkJdGNwX3RyeV9rZWVwX29wZW4oc2spOwogCX0KIAotdW5pbnRlcmVzdGluZ19hY2s6Ci0JU09DS19ERUJVRyhzaywgIkFjayAldSBvdXQgb2YgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKKwlTT0NLX0RFQlVHKHNrLCAiQWNrICV1IGJlZm9yZSAldToldVxuIiwgYWNrLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOwogCXJldHVybiAwOwogfQogCkBAIC0zODY2LDggKzM4ODUsNyBAQAogCQkgKiBOb3Qgb25seSwgYWxzbyBpdCBvY2N1cnMgZm9yIGV4cGlyZWQgdGltZXN0YW1wcy4KIAkJICovCiAKLQkJaWYgKChzMzIpKHRwLT5yeF9vcHQucmN2X3RzdmFsIC0gdHAtPnJ4X29wdC50c19yZWNlbnQpID49IDAgfHwKLQkJICAgZ2V0X3NlY29uZHMoKSA+PSB0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykKKwkJaWYgKHRjcF9wYXdzX2NoZWNrKCZ0cC0+cnhfb3B0LCAwKSkKIAkJCXRjcF9zdG9yZV90c19yZWNlbnQodHApOwogCX0KIH0KQEAgLTM5MTksOSArMzkzNyw5IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlyZXR1cm4gKChzMzIpKHRwLT5yeF9vcHQudHNfcmVjZW50IC0gdHAtPnJ4X29wdC5yY3ZfdHN2YWwpID4gVENQX1BBV1NfV0lORE9XICYmCi0JCWdldF9zZWNvbmRzKCkgPCB0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUyAmJgotCQkhdGNwX2Rpc29yZGVyZWRfYWNrKHNrLCBza2IpKTsKKworCXJldHVybiAhdGNwX3Bhd3NfY2hlY2soJnRwLT5yeF9vcHQsIFRDUF9QQVdTX1dJTkRPVykgJiYKKwkgICAgICAgIXRjcF9kaXNvcmRlcmVkX2Fjayhzaywgc2tiKTsKIH0KIAogLyogQ2hlY2sgc2VnbWVudCBzZXF1ZW5jZSBudW1iZXIgZm9yIHZhbGlkaXR5LgpAQCAtNDA3OSw3ICs0MDk3LDYgQEAKIAkJdHAtPnJ4X29wdC5kc2FjayA9IDE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5zdGFydF9zZXEgPSBzZXE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5lbmRfc2VxID0gZW5kX3NlcTsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIDE7CiAJfQogfQogCkBAIC00MTM0LDggKzQxNTEsNiBAQAogCQkJICogRGVjcmVhc2UgbnVtX3NhY2tzLgogCQkJICovCiAJCQl0cC0+cnhfb3B0Lm51bV9zYWNrcy0tOwotCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCi0JCQkJCSAgICAgICB0cC0+cnhfb3B0LmRzYWNrOwogCQkJZm9yIChpID0gdGhpc19zYWNrOyBpIDwgdHAtPnJ4X29wdC5udW1fc2Fja3M7IGkrKykKIAkJCQlzcFtpXSA9IHNwW2kgKyAxXTsKIAkJCWNvbnRpbnVlOwpAQCAtNDE0NCwyMCArNDE1OSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NhY2tfc3dhcChzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2sxLAotCQkJCSBzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2syKQotewotCV9fdTMyIHRtcDsKLQotCXRtcCA9IHNhY2sxLT5zdGFydF9zZXE7Ci0Jc2FjazEtPnN0YXJ0X3NlcSA9IHNhY2syLT5zdGFydF9zZXE7Ci0Jc2FjazItPnN0YXJ0X3NlcSA9IHRtcDsKLQotCXRtcCA9IHNhY2sxLT5lbmRfc2VxOwotCXNhY2sxLT5lbmRfc2VxID0gc2FjazItPmVuZF9zZXE7Ci0Jc2FjazItPmVuZF9zZXEgPSB0bXA7Ci19Ci0KIHN0YXRpYyB2b2lkIHRjcF9zYWNrX25ld19vZm9fc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC00MTcyLDcgKzQxNzMsNyBAQAogCQlpZiAodGNwX3NhY2tfZXh0ZW5kKHNwLCBzZXEsIGVuZF9zZXEpKSB7CiAJCQkvKiBSb3RhdGUgdGhpc19zYWNrIHRvIHRoZSBmaXJzdCBvbmUuICovCiAJCQlmb3IgKDsgdGhpc19zYWNrID4gMDsgdGhpc19zYWNrLS0sIHNwLS0pCi0JCQkJdGNwX3NhY2tfc3dhcChzcCwgc3AgLSAxKTsKKwkJCQlzd2FwKCpzcCwgKihzcCAtIDEpKTsKIAkJCWlmIChjdXJfc2Fja3MgPiAxKQogCQkJCXRjcF9zYWNrX21heWJlX2NvYWxlc2NlKHRwKTsKIAkJCXJldHVybjsKQEAgLTQxOTgsNyArNDE5OSw2IEBACiAJc3AtPnN0YXJ0X3NlcSA9IHNlcTsKIAlzcC0+ZW5kX3NlcSA9IGVuZF9zZXE7CiAJdHAtPnJ4X29wdC5udW1fc2Fja3MrKzsKLQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjazsKIH0KIAogLyogUkNWLk5YVCBhZHZhbmNlcywgc29tZSBTQUNLcyBzaG91bGQgYmUgZWF0ZW4uICovCkBAIC00MjEyLDcgKzQyMTIsNiBAQAogCS8qIEVtcHR5IG9mbyBxdWV1ZSwgaGVuY2UsIGFsbCB0aGUgU0FDS3MgYXJlIGVhdGVuLiBDbGVhci4gKi8KIAlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSkgewogCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IDA7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5kc2FjazsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDIzMywxMSArNDIzMiw3IEBACiAJCXRoaXNfc2FjaysrOwogCQlzcCsrOwogCX0KLQlpZiAobnVtX3NhY2tzICE9IHRwLT5yeF9vcHQubnVtX3NhY2tzKSB7Ci0JCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gbnVtX3NhY2tzOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsKLQkJCQkgICAgICAgdHAtPnJ4X29wdC5kc2FjazsKLQl9CisJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSBudW1fc2Fja3M7CiB9CiAKIC8qIFRoaXMgb25lIGNoZWNrcyB0byBzZWUgaWYgd2UgY2FuIHB1dCBkYXRhIGZyb20gdGhlCkBAIC00MzEzLDEwICs0MzA4LDcgQEAKIAogCVRDUF9FQ05fYWNjZXB0X2N3cih0cCwgc2tiKTsKIAotCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCXRwLT5yeF9vcHQuZHNhY2sgPSAwOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzOwotCX0KKwl0cC0+cnhfb3B0LmRzYWNrID0gMDsKIAogCS8qICBRdWV1ZSBkYXRhIGZvciBkZWxpdmVyeSB0byB0aGUgdXNlci4KIAkgKiAgUGFja2V0cyBpbiBzZXF1ZW5jZSBnbyB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4KQEAgLTQ0MzUsOCArNDQyNyw2IEBACiAJCS8qIEluaXRpYWwgb3V0IG9mIG9yZGVyIHNlZ21lbnQsIGJ1aWxkIDEgU0FDSy4gKi8KIAkJaWYgKHRjcF9pc19zYWNrKHRwKSkgewogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSAxOwotCQkJdHAtPnJ4X29wdC5kc2FjayAgICAgPSAwOwotCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSAxOwogCQkJdHAtPnNlbGVjdGl2ZV9hY2tzWzBdLnN0YXJ0X3NlcSA9IFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCQkJdHAtPnNlbGVjdGl2ZV9hY2tzWzBdLmVuZF9zZXEgPQogCQkJCQkJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxOwpAQCAtNTE1Nyw3ICs1MTQ3LDggQEAKIAkgKi8KIAogCWlmICgodGNwX2ZsYWdfd29yZCh0aCkgJiBUQ1BfSFBfQklUUykgPT0gdHAtPnByZWRfZmxhZ3MgJiYKLQkgICAgVENQX1NLQl9DQihza2IpLT5zZXEgPT0gdHAtPnJjdl9ueHQpIHsKKwkgICAgVENQX1NLQl9DQihza2IpLT5zZXEgPT0gdHAtPnJjdl9ueHQgJiYKKwkgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSwgdHAtPnNuZF9ueHQpKSB7CiAJCWludCB0Y3BfaGVhZGVyX2xlbiA9IHRwLT50Y3BfaGVhZGVyX2xlbjsKIAogCQkvKiBUaW1lc3RhbXAgaGVhZGVyIHByZWRpY3Rpb246IHRjcF9oZWFkZXJfbGVuCkBAIC01MzEwLDggKzUzMDEsOCBAQAogCQlyZXR1cm4gLXJlczsKIAogc3RlcDU6Ci0JaWYgKHRoLT5hY2spCi0JCXRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCk7CisJaWYgKHRoLT5hY2sgJiYgdGNwX2Fjayhzaywgc2tiLCBGTEFHX1NMT1dQQVRIKSA8IDApCisJCWdvdG8gZGlzY2FyZDsKIAogCXRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7CiAKQEAgLTU0MDksNyArNTQwMCw3IEBACiAJCSAqIG5ldmVyIHNjYWxlZC4KIAkJICovCiAJCXRwLT5zbmRfd25kID0gbnRvaHModGgtPndpbmRvdyk7Ci0JCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJdGNwX2luaXRfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKIAogCQlpZiAoIXRwLT5yeF9vcHQud3NjYWxlX29rKSB7CiAJCQl0cC0+cnhfb3B0LnNuZF93c2NhbGUgPSB0cC0+cnhfb3B0LnJjdl93c2NhbGUgPSAwOwpAQCAtNTUxMCw3ICs1NTAxLDcgQEAKIAogCS8qIFBBV1MgY2hlY2suICovCiAJaWYgKHRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wICYmIHRwLT5yeF9vcHQuc2F3X3RzdGFtcCAmJgotCSAgICB0Y3BfcGF3c19jaGVjaygmdHAtPnJ4X29wdCwgMCkpCisJICAgIHRjcF9wYXdzX3JlamVjdCgmdHAtPnJ4X29wdCwgMCkpCiAJCWdvdG8gZGlzY2FyZF9hbmRfdW5kbzsKIAogCWlmICh0aC0+c3luKSB7CkBAIC01NjQ4LDcgKzU2MzksNyBAQAogCiAJLyogc3RlcCA1OiBjaGVjayB0aGUgQUNLIGZpZWxkICovCiAJaWYgKHRoLT5hY2spIHsKLQkJaW50IGFjY2VwdGFibGUgPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOworCQlpbnQgYWNjZXB0YWJsZSA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCkgPiAwOwogCiAJCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJCWNhc2UgVENQX1NZTl9SRUNWOgpAQCAtNTY3MCw4ICs1NjYxLDcgQEAKIAkJCQl0cC0+c25kX3VuYSA9IFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcTsKIAkJCQl0cC0+c25kX3duZCA9IG50b2hzKHRoLT53aW5kb3cpIDw8CiAJCQkJCSAgICAgIHRwLT5yeF9vcHQuc25kX3dzY2FsZTsKLQkJCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5hY2tfc2VxLAotCQkJCQkgICAgVENQX1NLQl9DQihza2IpLT5zZXEpOworCQkJCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAKIAkJCQkvKiB0Y3BfYWNrIGNvbnNpZGVycyB0aGlzIEFDSyBhcyBkdXBsaWNhdGUKIAkJCQkgKiBhbmQgZG9lcyBub3QgY2FsY3VsYXRlIHJ0dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IGNmNzRjNDEuLmQwYTMxNDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTIyNiwxNSArMTIyNiw2IEBACiAJaWYgKHdhbnRfY29va2llICYmICF0bXBfb3B0LnNhd190c3RhbXApCiAJCXRjcF9jbGVhcl9vcHRpb25zKCZ0bXBfb3B0KTsKIAotCWlmICh0bXBfb3B0LnNhd190c3RhbXAgJiYgIXRtcF9vcHQucmN2X3RzdmFsKSB7Ci0JCS8qIFNvbWUgT1NlcyAodW5rbm93biBvbmVzLCBidXQgSSBzZWUgdGhlbSBvbiB3ZWIgc2VydmVyLCB3aGljaAotCQkgKiBjb250YWlucyBpbmZvcm1hdGlvbiBpbnRlcmVzdGluZyBvbmx5IGZvciB3aW5kb3dzJwotCQkgKiB1c2VycykgZG8gbm90IHNlbmQgdGhlaXIgc3RhbXAgaW4gU1lOLiBJdCBpcyBlYXN5IGNhc2UuCi0JCSAqIFdlIHNpbXBseSBkbyBub3QgYWR2ZXJ0aXNlIFRTIHN1cHBvcnQuCi0JCSAqLwotCQl0bXBfb3B0LnNhd190c3RhbXAgPSAwOwotCQl0bXBfb3B0LnRzdGFtcF9vayAgPSAwOwotCX0KIAl0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDsKIAogCXRjcF9vcGVucmVxX2luaXQocmVxLCAmdG1wX29wdCwgc2tiKTsKQEAgLTIzNTUsNyArMjM0Niw3IEBACiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLQkJaWYgKCF0Y3BfdjRfY2hlY2soc2tiLT5sZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCWlmICghdGNwX3Y0X2NoZWNrKHNrYl9ncm9fbGVuKHNrYiksIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCiAJCQkJICBza2ItPmNzdW0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggZjY3ZWZmYi4uNDNiYmJhNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWlmICh0bXBfb3B0LnNhd190c3RhbXApIHsKIAkJCXRtcF9vcHQudHNfcmVjZW50CT0gdGNwdHctPnR3X3RzX3JlY2VudDsKIAkJCXRtcF9vcHQudHNfcmVjZW50X3N0YW1wCT0gdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcDsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCkBAIC0zOTksNyArMzk5LDcgQEAKIAogCQl0Y3BfcHJlcXVldWVfaW5pdChuZXd0cCk7CiAKLQkJdGNwX2luaXRfd2wobmV3dHAsIHRyZXEtPnNudF9pc24sIHRyZXEtPnJjdl9pc24pOworCQl0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS0+cmN2X2lzbik7CiAKIAkJbmV3dHAtPnNydHQgPSAwOwogCQluZXd0cC0+bWRldiA9IFRDUF9USU1FT1VUX0lOSVQ7CkBAIC00MzQsOSArNDM0LDggQEAKIAkJbmV3dHAtPnJ4X29wdC5zYXdfdHN0YW1wID0gMDsKIAogCQluZXd0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJbmV3dHAtPnJ4X29wdC5lZmZfc2Fja3MgPSAwOwotCiAJCW5ld3RwLT5yeF9vcHQubnVtX3NhY2tzID0gMDsKKwogCQluZXd0cC0+dXJnX2RhdGEgPSAwOwogCiAJCWlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKQpAQCAtNTEyLDcgKzUxMSw3IEBACiAJCQkgKiBmcm9tIGFub3RoZXIgZGF0YS4KIAkJCSAqLwogCQkJdG1wX29wdC50c19yZWNlbnRfc3RhbXAgPSBnZXRfc2Vjb25kcygpIC0gKChUQ1BfVElNRU9VVF9JTklUL0haKTw8cmVxLT5yZXRyYW5zKTsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZGEyYzNiOC4uYzFmMjU5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDQxLDEwICs0NDEsNyBAQAogCQkJKnB0cisrID0gaHRvbmwoc3BbdGhpc19zYWNrXS5lbmRfc2VxKTsKIAkJfQogCi0JCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3M7Ci0JCX0KKwkJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAJfQogfQogCkBAIC01NTAsNiArNTQ3LDcgQEAKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiID0gc2tiID8gVENQX1NLQl9DQihza2IpIDogTlVMTDsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAl1bnNpZ25lZCBzaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgZWZmX3NhY2tzOwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIAkqbWQ1ID0gdHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBzayk7CkBAIC01NjgsMTAgKzU2NiwxMSBAQAogCQlzaXplICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KHRwLT5yeF9vcHQuZWZmX3NhY2tzKSkgeworCWVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjazsKKwlpZiAodW5saWtlbHkoZWZmX3NhY2tzKSkgewogCQljb25zdCB1bnNpZ25lZCByZW1haW5pbmcgPSBNQVhfVENQX09QVElPTl9TUEFDRSAtIHNpemU7CiAJCW9wdHMtPm51bV9zYWNrX2Jsb2NrcyA9Ci0JCQltaW5fdCh1bnNpZ25lZCwgdHAtPnJ4X29wdC5lZmZfc2Fja3MsCisJCQltaW5fdCh1bnNpZ25lZCwgZWZmX3NhY2tzLAogCQkJICAgICAgKHJlbWFpbmluZyAtIFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQpIC8KIAkJCSAgICAgIFRDUE9MRU5fU0FDS19QRVJCTE9DSyk7CiAJCXNpemUgKz0gVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRCArCkBAIC02NjMsMTAgKzY2MiwxNCBAQAogCXRoLT51cmdfcHRyCQk9IDA7CiAKIAkvKiBUaGUgdXJnX21vZGUgY2hlY2sgaXMgbmVjZXNzYXJ5IGR1cmluZyBhIGJlbG93IHNuZF91bmEgd2luIHByb2JlICovCi0JaWYgKHVubGlrZWx5KHRjcF91cmdfbW9kZSh0cCkgJiYKLQkJICAgICBiZXR3ZWVuKHRwLT5zbmRfdXAsIHRjYi0+c2VxICsgMSwgdGNiLT5zZXEgKyAweEZGRkYpKSkgewotCQl0aC0+dXJnX3B0cgkJPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOwotCQl0aC0+dXJnCQkJPSAxOworCWlmICh1bmxpa2VseSh0Y3BfdXJnX21vZGUodHApICYmIGJlZm9yZSh0Y2ItPnNlcSwgdHAtPnNuZF91cCkpKSB7CisJCWlmIChiZWZvcmUodHAtPnNuZF91cCwgdGNiLT5zZXEgKyAweDEwMDAwKSkgeworCQkJdGgtPnVyZ19wdHIgPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOworCQkJdGgtPnVyZyA9IDE7CisJCX0gZWxzZSBpZiAoYWZ0ZXIodGNiLT5zZXEgKyAweEZGRkYsIHRwLT5zbmRfbnh0KSkgeworCQkJdGgtPnVyZ19wdHIgPSAweEZGRkY7CisJCQl0aC0+dXJnID0gMTsKKwkJfQogCX0KIAogCXRjcF9vcHRpb25zX3dyaXRlKChfX2JlMzIgKikodGggKyAxKSwgdHAsICZvcHRzLCAmbWQ1X2hhc2hfbG9jYXRpb24pOwpAQCAtNzYzLDExICs3NjYsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlpbnQgbnNpemUsIG9sZF9mYWN0b3I7CiAJaW50IG5sZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJQlVHX09OKGxlbiA+IHNrYi0+bGVuKTsKIAotCXRjcF9jbGVhcl9yZXRyYW5zX2hpbnRzX3BhcnRpYWwodHApOwogCW5zaXplID0gc2tiX2hlYWRsZW4oc2tiKSAtIGxlbjsKIAlpZiAobnNpemUgPCAwKQogCQluc2l6ZSA9IDA7CkBAIC04NTAsNiArODUyLDEyIEBACiAJCQl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKIAkJfQogCQl0Y3BfYWRqdXN0X2ZhY2tldHNfb3V0KHNrLCBza2IsIGRpZmYpOworCisJCWlmICh0cC0+bG9zdF9za2JfaGludCAmJgorCQkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLAorCQkJICAgVENQX1NLQl9DQih0cC0+bG9zdF9za2JfaGludCktPnNlcSkgJiYKKwkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwgVENQX1NLQl9DQihza2IpLT5zYWNrZWQpKQorCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gZGlmZjsKIAl9CiAKIAkvKiBMaW5rIEJVRkYgaW50byB0aGUgc2VuZCBxdWV1ZS4gKi8KQEAgLTkxMyw3ICs5MjEsNyBAQAogCSAqIGZhY3RvciBhbmQgbXNzLgogCSAqLwogCWlmICh0Y3Bfc2tiX3Bjb3VudChza2IpID4gMSkKLQkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2ssIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSk7CisJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaykpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsMTUgKzk4Miw2IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi0vKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCi1zdGF0aWMgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKLXsKLQlpZiAodHAtPm1heF93aW5kb3cgJiYgcGt0c2l6ZSA+ICh0cC0+bWF4X3dpbmRvdyA+PiAxKSkKLQkJcmV0dXJuIG1heCh0cC0+bWF4X3dpbmRvdyA+PiAxLCA2OFUgLSB0cC0+dGNwX2hlYWRlcl9sZW4pOwotCWVsc2UKLQkJcmV0dXJuIHBrdHNpemU7Ci19Ci0KIC8qIFRoaXMgZnVuY3Rpb24gc3luY2hyb25pemUgc25kIG1zcyB0byBjdXJyZW50IHBtdHUvZXh0aGRyIHNldC4KIAogICAgdHAtPnJ4X29wdC51c2VyX21zcyBpcyBtc3Mgc2V0IGJ5IHVzZXIgYnkgVENQX01BWFNFRy4gSXQgZG9lcyBOT1QgY291bnRzCkBAIC0xMDI5LDIyICsxMDI4LDE3IEBACiAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBNU1MsIHRha2luZyBTQUNLcyBhbmQgSVAgb3B0aW9ucywKICAqIGFuZCBldmVuIFBNVFUgZGlzY292ZXJ5IGV2ZW50cyBpbnRvIGFjY291bnQuCiAgKi8KLXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFyZ2VfYWxsb3dlZCkKK3Vuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7CiAJdTMyIG1zc19ub3c7Ci0JdTE2IHhtaXRfc2l6ZV9nb2FsOwotCWludCBkb2luZ190c28gPSAwOwogCXVuc2lnbmVkIGhlYWRlcl9sZW47CiAJc3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzOwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqbWQ1OwogCiAJbXNzX25vdyA9IHRwLT5tc3NfY2FjaGU7CiAKLQlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSkKLQkJZG9pbmdfdHNvID0gMTsKLQogCWlmIChkc3QpIHsKIAkJdTMyIG10dSA9IGRzdF9tdHUoZHN0KTsKIAkJaWYgKG10dSAhPSBpbmV0X2NzayhzayktPmljc2tfcG10dV9jb29raWUpCkBAIC0xMDYyLDE5ICsxMDU2LDYgQEAKIAkJbXNzX25vdyAtPSBkZWx0YTsKIAl9CiAKLQl4bWl0X3NpemVfZ29hbCA9IG1zc19ub3c7Ci0KLQlpZiAoZG9pbmdfdHNvKSB7Ci0JCXhtaXRfc2l6ZV9nb2FsID0gKChzay0+c2tfZ3NvX21heF9zaXplIC0gMSkgLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW4gLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuIC0KLQkJCQkgIHRwLT50Y3BfaGVhZGVyX2xlbik7Ci0KLQkJeG1pdF9zaXplX2dvYWwgPSB0Y3BfYm91bmRfdG9faGFsZl93bmQodHAsIHhtaXRfc2l6ZV9nb2FsKTsKLQkJeG1pdF9zaXplX2dvYWwgLT0gKHhtaXRfc2l6ZV9nb2FsICUgbXNzX25vdyk7Ci0JfQotCXRwLT54bWl0X3NpemVfZ29hbCA9IHhtaXRfc2l6ZV9nb2FsOwotCiAJcmV0dXJuIG1zc19ub3c7CiB9CiAKQEAgLTEyNTYsNyArMTIzNyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjcF9zZW5kX2hlYWQoc2spOwogCiAJcmV0dXJuIChza2IgJiYKLQkJdGNwX3NuZF90ZXN0KHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSksCisJCXRjcF9zbmRfdGVzdChzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2spLAogCQkJICAgICAodGNwX3NrYl9pc19sYXN0KHNrLCBza2IpID8KIAkJCSAgICAgIHRwLT5ub25hZ2xlIDogVENQX05BR0xFX1BVU0gpKSk7CiB9CkBAIC0xMjczLDcgKzEyNTQsNyBAQAogewogCXN0cnVjdCBza19idWZmICpidWZmOwogCWludCBubGVuID0gc2tiLT5sZW4gLSBsZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJLyogQWxsIG9mIGEgVFNPIGZyYW1lIG11c3QgYmUgY29tcG9zZWQgb2YgcGFnZWQgZGF0YS4gICovCiAJaWYgKHNrYi0+bGVuICE9IHNrYi0+ZGF0YV9sZW4pCkBAIC0xMzUyLDYgKzEzMzMsMTAgQEAKIAlpZiAobGltaXQgPj0gc2stPnNrX2dzb19tYXhfc2l6ZSkKIAkJZ290byBzZW5kX25vdzsKIAorCS8qIE1pZGRsZSBpbiBxdWV1ZSB3b24ndCBnZXQgYW55IG1vcmUgZGF0YSwgZnVsbCBzZW5kYWJsZSBhbHJlYWR5PyAqLworCWlmICgoc2tiICE9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKSkgJiYgKGxpbWl0ID49IHNrYi0+bGVuKSkKKwkJZ290byBzZW5kX25vdzsKKwogCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikgewogCQl1MzIgY2h1bmsgPSBtaW4odHAtPnNuZF93bmQsIHRwLT5zbmRfY3duZCAqIHRwLT5tc3NfY2FjaGUpOwogCkBAIC0xNDA1LDExICsxMzkwLDExIEBACiAJICAgIGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplIHx8CiAJICAgIGluZXRfY3NrKHNrKS0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfT3BlbiB8fAogCSAgICB0cC0+c25kX2N3bmQgPCAxMSB8fAotCSAgICB0cC0+cnhfb3B0LmVmZl9zYWNrcykKKwkgICAgdHAtPnJ4X29wdC5udW1fc2Fja3MgfHwgdHAtPnJ4X29wdC5kc2FjaykKIAkJcmV0dXJuIC0xOwogCiAJLyogVmVyeSBzaW1wbGUgc2VhcmNoIHN0cmF0ZWd5OiBqdXN0IGRvdWJsZSB0aGUgTVNTLiAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCXByb2JlX3NpemUgPSAyICogdHAtPm1zc19jYWNoZTsKIAlzaXplX25lZWRlZCA9IHByb2JlX3NpemUgKyAodHAtPnJlb3JkZXJpbmcgKyAxKSAqIHRwLT5tc3NfY2FjaGU7CiAJaWYgKHByb2JlX3NpemUgPiB0Y3BfbXR1X3RvX21zcyhzaywgaWNzay0+aWNza19tdHVwLnNlYXJjaF9oaWdoKSkgewpAQCAtMTc1NCwxMSArMTczOSw5IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiID0gdGNwX3dyaXRlX3F1ZXVlX25leHQoc2ssIHNrYik7CiAJaW50IHNrYl9zaXplLCBuZXh0X3NrYl9zaXplOwotCXUxNiBmbGFnczsKIAogCXNrYl9zaXplID0gc2tiLT5sZW47CiAJbmV4dF9za2Jfc2l6ZSA9IG5leHRfc2tiLT5sZW47Ci0JZmxhZ3MgPSBUQ1BfU0tCX0NCKHNrYiktPmZsYWdzOwogCiAJQlVHX09OKHRjcF9za2JfcGNvdW50KHNrYikgIT0gMSB8fCB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYikgIT0gMSk7CiAKQEAgLTE3NzgsOSArMTc2MSw4IEBACiAJLyogVXBkYXRlIHNlcXVlbmNlIHJhbmdlIG9uIG9yaWdpbmFsIHNrYi4gKi8KIAlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZW5kX3NlcTsKIAotCS8qIE1lcmdlIG92ZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gKi8KLQlmbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7IC8qIFRoaXMgbW92ZXMgUFNIL0ZJTiBldGMuIG92ZXIgKi8KLQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3M7CisJLyogTWVyZ2Ugb3ZlciBjb250cm9sIGluZm9ybWF0aW9uLiBUaGlzIG1vdmVzIFBTSC9GSU4gZXRjLiBvdmVyICovCisJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7CiAKIAkvKiBBbGwgZG9uZSwgZ2V0IHJpZCBvZiBzZWNvbmQgU0tCIGFuZCBhY2NvdW50IGZvciBpdCBzbwogCSAqIHBhY2tldCBjb3VudGluZyBkb2VzIG5vdCBicmVhay4KQEAgLTE4OTQsNyArMTg3Niw3IEBACiAJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnJlYnVpbGRfaGVhZGVyKHNrKSkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7IC8qIFJvdXRpbmcgZmFpbHVyZSBvciBzaW1pbGFyLiAqLwogCi0JY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAKIAkvKiBJZiByZWNlaXZlciBoYXMgc2hydW5rIGhpcyB3aW5kb3csIGFuZCBza2IgaXMgb3V0IG9mCiAJICogbmV3IHdpbmRvdywgZG8gbm90IHJldHJhbnNtaXQgaXQuIFRoZSBleGNlcHRpb24gaXMgdGhlCkBAIC0xOTA4LDYgKzE4OTAsOCBAQAogCWlmIChza2ItPmxlbiA+IGN1cl9tc3MpIHsKIAkJaWYgKHRjcF9mcmFnbWVudChzaywgc2tiLCBjdXJfbXNzLCBjdXJfbXNzKSkKIAkJCXJldHVybiAtRU5PTUVNOyAvKiBXZSdsbCB0cnkgYWdhaW4gbGF0ZXIuICovCisJfSBlbHNlIHsKKwkJdGNwX2luaXRfdHNvX3NlZ3Moc2ssIHNrYiwgY3VyX21zcyk7CiAJfQogCiAJdGNwX3JldHJhbnNfdHJ5X2NvbGxhcHNlKHNrLCBza2IsIGN1cl9tc3MpOwpAQCAtMjA2MSw3ICsyMDQ1LDcgQEAKIAkJCWdvdG8gYmVnaW5fZndkOwogCiAJCX0gZWxzZSBpZiAoIShzYWNrZWQgJiBUQ1BDQl9MT1NUKSkgewotCQkJaWYgKGhvbGUgPT0gTlVMTCAmJiAhKHNhY2tlZCAmIFRDUENCX1NBQ0tFRF9SRVRSQU5TKSkKKwkJCWlmIChob2xlID09IE5VTEwgJiYgIShzYWNrZWQgJiAoVENQQ0JfU0FDS0VEX1JFVFJBTlN8VENQQ0JfU0FDS0VEX0FDS0VEKSkpCiAJCQkJaG9sZSA9IHNrYjsKIAkJCWNvbnRpbnVlOwogCkBAIC0yMTAwLDcgKzIwODQsNyBAQAogCSAqIHVuc2VudCBmcmFtZXMuICBCdXQgYmUgY2FyZWZ1bCBhYm91dCBvdXRnb2luZyBTQUNLUwogCSAqIGFuZCBJUCBvcHRpb25zLgogCSAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDEpOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCiAJaWYgKHRjcF9zZW5kX2hlYWQoc2spICE9IE5VTEwpIHsKIAkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX0ZJTjsKQEAgLTIzMjUsNyArMjMwOSw3IEBACiAJc2stPnNrX2VyciA9IDA7CiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX0RPTkUpOwogCXRwLT5zbmRfd25kID0gMDsKLQl0Y3BfaW5pdF93bCh0cCwgdHAtPndyaXRlX3NlcSwgMCk7CisJdGNwX2luaXRfd2wodHAsIDApOwogCXRwLT5zbmRfdW5hID0gdHAtPndyaXRlX3NlcTsKIAl0cC0+c25kX3NtbCA9IHRwLT53cml0ZV9zZXE7CiAJdHAtPnNuZF91cCA9IHRwLT53cml0ZV9zZXE7CkBAIC0yNTEyLDcgKzI0OTYsNyBAQAogCWlmICgoc2tiID0gdGNwX3NlbmRfaGVhZChzaykpICE9IE5VTEwgJiYKIAkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCB0Y3Bfd25kX2VuZCh0cCkpKSB7CiAJCWludCBlcnI7Ci0JCXVuc2lnbmVkIGludCBtc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAkJdW5zaWduZWQgaW50IHNlZ19zaXplID0gdGNwX3duZF9lbmQodHApIC0gVENQX1NLQl9DQihza2IpLT5zZXE7CiAKIAkJaWYgKGJlZm9yZSh0cC0+cHVzaGVkX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9wcm9iZS5jIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKaW5kZXggMjU1MjRkNC4uNTlmNWI1ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKQEAgLTE2NSw5ICsxNjUsMTAgQEAKIHN0YXRpYyBzc2l6ZV90IHRjcHByb2JlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgZXJyb3IgPSAwLCBjbnQgPSAwOworCWludCBlcnJvciA9IDA7CisJc2l6ZV90IGNudCA9IDA7CiAKLQlpZiAoIWJ1ZiB8fCBsZW4gPCAwKQorCWlmICghYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdoaWxlIChjbnQgPCBsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKaW5kZXggNDY2MGIwOC4uYTc2NTEzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKQEAgLTI0LDE0ICsyNCw4IEBACiAKIAlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKLQllbHNlIHsKLQkJdHAtPnNuZF9jd25kX2NudCsrOwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+IG1pbih0cC0+c25kX2N3bmQsIFRDUF9TQ0FMQUJMRV9BSV9DTlQpKXsKLQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJdHAtPnNuZF9jd25kKys7Ci0JCQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQkJfQotCX0KKwllbHNlCisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBtaW4odHAtPnNuZF9jd25kLCBUQ1BfU0NBTEFCTEVfQUlfQ05UKSk7CiB9CiAKIHN0YXRpYyB1MzIgdGNwX3NjYWxhYmxlX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKaW5kZXggMDE3MGU5MS4uYjE0NGEyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMKKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKQEAgLTMyOCwxOSArMzI4LDE2IEBACiAJaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPT0gMCkgewogCQlpbnQgbWliX2lkeDsKIAotCQlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfRGlzb3JkZXIgfHwKLQkJICAgIGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KSB7Ci0JCQlpZiAodGNwX2lzX3NhY2sodHApKSB7Ci0JCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUw7Ci0JCQkJZWxzZQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUw7Ci0JCQkJZWxzZQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUzsKLQkJCX0KKwkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0Rpc29yZGVyKSB7CisJCQlpZiAodGNwX2lzX3NhY2sodHApKQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQU0FDS0ZBSUxVUkVTOworCQkJZWxzZQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQUkVOT0ZBSUxVUkVTOworCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KSB7CisJCQlpZiAodGNwX2lzX3NhY2sodHApKQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQU0FDS1JFQ09WRVJZRkFJTDsKKwkJCWVsc2UKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUw7CiAJCX0gZWxzZSBpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfTG9zcykgewogCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BMT1NTRkFJTFVSRVM7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVuby5jIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwppbmRleCBkMDhiMmU4Li5lOWJiZmY3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdmVuby5jCisrKyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKQEAgLTE1OSwxMiArMTU5LDcgQEAKIAkJCQkvKiBJbiB0aGUgIm5vbi1jb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAogCQkJCSAqICBldmVyeSBydHQuCiAJCQkJICovCi0JCQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCQkJfSBlbHNlCi0JCQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogSW4gdGhlICJjb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAogCQkJCSAqIGV2ZXJ5IG90aGVyIHJ0dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF95ZWFoLmMgYi9uZXQvaXB2NC90Y3BfeWVhaC5jCmluZGV4IDllYzg0M2EuLjY2YjY4MjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF95ZWFoLmMKKysrIGIvbmV0L2lwdjQvdGNwX3llYWguYwpAQCAtOTQsMTQgKzk0LDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIFJlbm8gKi8KLQotCQlpZiAodHAtPnNuZF9jd25kX2NudCA8IHRwLT5zbmRfY3duZCkKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKLQotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKLQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0KKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJfQogCiAJLyogVGhlIGtleSBwbGF5ZXJzIGFyZSB2X3ZlZ2FzLmJlZ19zbmRfdW5hIGFuZCB2X2JlZ19zbmRfbnh0LgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBjNDdjOTg5Li5iZGEwOGEwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCitpbnQgaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0MSA9IGluZXRfc2soc2sxKSwgKmluZXQyID0gaW5ldF9zayhzazIpOwogCkBAIC01OTYsNiArNTk2LDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCiAJaWYgKHVwLT5wZW5kaW5nKSB7CiAJCS8qCkBAIC02NDMsNiArNjQ0LDkgQEAKIAlpcGMuYWRkciA9IGluZXQtPnNhZGRyOwogCiAJaXBjLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJZXJyID0gc29ja190eF90aW1lc3RhbXAobXNnLCBzaywgJmlwYy5zaHR4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCWlmIChtc2ctPm1zZ19jb250cm9sbGVuKSB7CiAJCWVyciA9IGlwX2Ntc2dfc2VuZChzb2NrX25ldChzayksIG1zZywgJmlwYyk7CiAJCWlmIChlcnIpCkBAIC0xMTgwLDcgKzExODQsNyBAQAogCQkJc2sgPSBza25leHQ7CiAJCX0gd2hpbGUgKHNrbmV4dCk7CiAJfSBlbHNlCi0JCWtmcmVlX3NrYihza2IpOworCQljb25zdW1lX3NrYihza2IpOwogCXNwaW5fdW5sb2NrKCZoc2xvdC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjE0LDcgKzE2MTgsOCBAQAogCX0gd2hpbGUgKHNrICYmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSB8fCBzay0+c2tfZmFtaWx5ICE9IHN0YXRlLT5mYW1pbHkpKTsKIAogCWlmICghc2spIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT51ZHBfdGFibGUtPmhhc2hbc3RhdGUtPmJ1Y2tldF0ubG9jayk7CisJCWlmIChzdGF0ZS0+YnVja2V0IDwgVURQX0hUQUJMRV9TSVpFKQorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT51ZHBfdGFibGUtPmhhc2hbc3RhdGUtPmJ1Y2tldF0ubG9jayk7CiAJCXJldHVybiB1ZHBfZ2V0X2ZpcnN0KHNlcSwgc3RhdGUtPmJ1Y2tldCArIDEpOwogCX0KIAlyZXR1cm4gc2s7CkBAIC0xNjMyLDYgKzE2MzcsOSBAQAogCiBzdGF0aWMgdm9pZCAqdWRwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CisJc3RydWN0IHVkcF9pdGVyX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKKwlzdGF0ZS0+YnVja2V0ID0gVURQX0hUQUJMRV9TSVpFOworCiAJcmV0dXJuICpwb3MgPyB1ZHBfZ2V0X2lkeChzZXEsICpwb3MtMSkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKQEAgLTE4MTUsNiArMTgyMyw3IEBACiBFWFBPUlRfU1lNQk9MKHVkcF9saWJfc2V0c29ja29wdCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9wb2xsKTsKIEVYUE9SVF9TWU1CT0wodWRwX2xpYl9nZXRfcG9ydCk7CitFWFBPUlRfU1lNQk9MKGlwdjRfcmN2X3NhZGRyX2VxdWFsKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBFWFBPUlRfU1lNQk9MKHVkcF9wcm9jX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggMmFkMjRiYS4uNjBkOTE4YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTRfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmdjID0JCQl4ZnJtNF9nYXJiYWdlX2NvbGxlY3QsCiAJLnVwZGF0ZV9wbXR1ID0JCXhmcm00X3VwZGF0ZV9wbXR1LAogCS5kZXN0cm95ID0JCXhmcm00X2RzdF9kZXN0cm95LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMTIyMGUyYy4uYTgyMThiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC00MCw2ICs0MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpAQCAtNTkwLDYgKzU5MSw3IEBACiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhID0gTlVMTDsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKIAlpbnQgaGFzaDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoYWRkcik7CkBAIC02MDYsNiArNjA4LDExIEBACiAJCWdvdG8gb3V0MjsKIAl9CiAKKwlpZiAoaWRldi0+Y25mLmRpc2FibGVfaXB2NiB8fCBuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmRpc2FibGVfaXB2NikgeworCQllcnIgPSAtRUFDQ0VTOworCQlnb3RvIG91dDI7CisJfQorCiAJd3JpdGVfbG9jaygmYWRkcmNvbmZfaGFzaF9sb2NrKTsKIAogCS8qIElnbm9yZSBhZGRpbmcgZHVwbGljYXRlIGFkZHJlc3NlcyBvbiBhbiBpbnRlcmZhY2UgKi8KQEAgLTEyMDksMTYgKzEyMTYsMTIgQEAKIAkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9IGVsc2UgaWYgKG1pbmloaXNjb3JlIDwgbWluaXNjb3JlKSB7Ci0JCQkJCXN0cnVjdCBpcHY2X3NhZGRyX3Njb3JlICp0bXA7Ci0KIAkJCQkJaWYgKGhpc2NvcmUtPmlmYSkKIAkJCQkJCWluNl9pZmFfcHV0KGhpc2NvcmUtPmlmYSk7CiAKIAkJCQkJaW42X2lmYV9ob2xkKHNjb3JlLT5pZmEpOwogCi0JCQkJCXRtcCA9IGhpc2NvcmU7Ci0JCQkJCWhpc2NvcmUgPSBzY29yZTsKLQkJCQkJc2NvcmUgPSB0bXA7CisJCQkJCXN3YXAoaGlzY29yZSwgc2NvcmUpOwogCiAJCQkJCS8qIHJlc3RvcmUgb3VyIGl0ZXJhdG9yICovCiAJCQkJCXNjb3JlLT5pZmEgPSBoaXNjb3JlLT5pZmE7CkBAIC0xMzY3LDQwICsxMzcwLDYgQEAKIAlyZXR1cm4gaWZwOwogfQogCi1pbnQgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQotewotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2tfcmN2X3NhZGRyNiA9ICZpbmV0Nl9zayhzayktPnJjdl9zYWRkcjsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrMl9yY3Zfc2FkZHI2ID0gaW5ldDZfcmN2X3NhZGRyKHNrMik7Ci0JX19iZTMyIHNrX3Jjdl9zYWRkciA9IGluZXRfc2soc2spLT5yY3Zfc2FkZHI7Ci0JX19iZTMyIHNrMl9yY3Zfc2FkZHIgPSBpbmV0X3Jjdl9zYWRkcihzazIpOwotCWludCBza19pcHY2b25seSA9IGlwdjZfb25seV9zb2NrKHNrKTsKLQlpbnQgc2syX2lwdjZvbmx5ID0gaW5ldF92Nl9pcHY2b25seShzazIpOwotCWludCBhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZShza19yY3Zfc2FkZHI2KTsKLQlpbnQgYWRkcl90eXBlMiA9IHNrMl9yY3Zfc2FkZHI2ID8gaXB2Nl9hZGRyX3R5cGUoc2syX3Jjdl9zYWRkcjYpIDogSVBWNl9BRERSX01BUFBFRDsKLQotCWlmICghc2syX3Jjdl9zYWRkciAmJiAhc2tfaXB2Nm9ubHkpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKHNrMl9pcHY2b25seSAmJiBhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZICYmCi0JICAgICEoc2tfaXB2Nm9ubHkgJiYgYWRkcl90eXBlMiA9PSBJUFY2X0FERFJfTUFQUEVEKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoc2syX3Jjdl9zYWRkcjYgJiYKLQkgICAgaXB2Nl9hZGRyX2VxdWFsKHNrX3Jjdl9zYWRkcjYsIHNrMl9yY3Zfc2FkZHI2KSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQgJiYKLQkgICAgIXNrMl9pcHY2b25seSAmJgotCSAgICAoIXNrMl9yY3Zfc2FkZHIgfHwgIXNrX3Jjdl9zYWRkciB8fCBza19yY3Zfc2FkZHIgPT0gc2syX3Jjdl9zYWRkcikpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIEdldHMgcmVmZXJlbmNlZCBhZGRyZXNzLCBkZXN0cm95cyBpZmFkZHIgKi8KIAogc3RhdGljIHZvaWQgYWRkcmNvbmZfZGFkX3N0b3Aoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwKQpAQCAtMTQzMyw2ICsxNDAyLDExIEBACiB2b2lkIGFkZHJjb25mX2RhZF9mYWlsdXJlKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaWZwLT5pZGV2OworCisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElQdjYgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0ZWQhXG4iLAorCQkJaWZwLT5pZGV2LT5kZXYtPm5hbWUpOworCiAJaWYgKGlkZXYtPmNuZi5hY2NlcHRfZGFkID4gMSAmJiAhaWRldi0+Y25mLmRpc2FibGVfaXB2NikgewogCQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKIApAQCAtMTQ0MywxMSArMTQxNywxMiBAQAogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsICZhZGRyKSkgewogCQkJLyogREFEIGZhaWxlZCBmb3IgbGluay1sb2NhbCBiYXNlZCBvbiBNQUMgYWRkcmVzcyAqLwogCQkJaWRldi0+Y25mLmRpc2FibGVfaXB2NiA9IDE7CisKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUHY2IGJlaW5nIGRpc2FibGVkIVxuIiwKKwkJCQlpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJCX0KIAl9CiAKLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0ZWQhXG4iLCBpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJYWRkcmNvbmZfZGFkX3N0b3AoaWZwKTsKIH0KIApAQCAtMjIyNywxMCArMjIwMiwyNCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGFkZF9hZGRyKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJICAgICBpbnQgcGxlbiwgaW50IHNjb3BlKQoreworCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDsKKworCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgYWRkciwgcGxlbiwgc2NvcGUsIElGQV9GX1BFUk1BTkVOVCk7CisJaWYgKCFJU19FUlIoaWZwKSkgeworCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CisJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKKwkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKKwkJaW42X2lmYV9wdXQoaWZwKTsKKwl9Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X1NJVCkgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9TSVRfTU9EVUxFKQogc3RhdGljIHZvaWQgc2l0X2FkZF92NF9hZGRycyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewotCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKiBpZnA7CiAJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CkBAIC0yMjQ5LDE0ICsyMjM4LDcgQEAKIAl9CiAKIAlpZiAoYWRkci5zNl9hZGRyMzJbM10pIHsKLQkJaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmYWRkciwgMTI4LCBzY29wZSwgSUZBX0ZfUEVSTUFORU5UKTsKLQkJaWYgKCFJU19FUlIoaWZwKSkgewotCQkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJaWZwLT5mbGFncyAmPSB+SUZBX0ZfVEVOVEFUSVZFOwotCQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7Ci0JCQlpbjZfaWZhX3B1dChpZnApOwotCQl9CisJCWFkZF9hZGRyKGlkZXYsICZhZGRyLCAxMjgsIHNjb3BlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI4NCwxNSArMjI2Niw3IEBACiAJCQkJZWxzZQogCQkJCQlwbGVuID0gOTY7CiAKLQkJCQlpZnAgPSBpcHY2X2FkZF9hZGRyKGlkZXYsICZhZGRyLCBwbGVuLCBmbGFnLAotCQkJCQkJICAgIElGQV9GX1BFUk1BTkVOVCk7Ci0JCQkJaWYgKCFJU19FUlIoaWZwKSkgewotCQkJCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQkJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJCQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQkJCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKLQkJCQkJaW42X2lmYV9wdXQoaWZwKTsKLQkJCQl9CisJCQkJYWRkX2FkZHIoaWRldiwgJmFkZHIsIHBsZW4sIGZsYWcpOwogCQkJfQogCQl9CiAJfQpAQCAtMjMwMiw3ICsyMjc2LDYgQEAKIHN0YXRpYyB2b2lkIGluaXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICAqaWRldjsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICogaWZwOwogCiAJLyogOjoxICovCiAKQEAgLTIzMTMsMTQgKzIyODYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmaW42YWRkcl9sb29wYmFjaywgMTI4LCBJRkFfSE9TVCwgSUZBX0ZfUEVSTUFORU5UKTsKLQlpZiAoIUlTX0VSUihpZnApKSB7Ci0JCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJaWZwLT5mbGFncyAmPSB+SUZBX0ZfVEVOVEFUSVZFOwotCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJaXB2Nl9pZmFfbm90aWZ5KFJUTV9ORVdBRERSLCBpZnApOwotCQlpbjZfaWZhX3B1dChpZnApOwotCX0KKwlhZGRfYWRkcihpZGV2LCAmaW42YWRkcl9sb29wYmFjaywgMTI4LCBJRkFfSE9TVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2FkZF9saW5rbG9jYWwoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtMjgzMiwxMSArMjc5OCw2IEBACiAJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgaWRldi0+Y25mLmRpc2FibGVfaXB2NikgewotCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JCWFkZHJjb25mX2RhZF9mYWlsdXJlKGlmcCk7Ci0JCXJldHVybjsKLQl9CiAJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwogCWlmIChpZnAtPnByb2JlcyA9PSAwKSB7CiAJCS8qCkBAIC0zNjQ3LDcgKzM2MDgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfSUZBRERSLCBlcnIpOwpAQCAtMzg1OCw3ICszODIwLDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X0lGQUREUiwgZXJyKTsKQEAgLTM5MjgsNyArMzg5MSw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCA5YzgzMDllLi42MWY1NTM4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTI3NiwxMSArMjc2LDI2IEBACiAKIAkvKiBDaGVjayBpZiB0aGUgYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBob3N0LiAqLwogCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkgewotCQl2NGFkZHIgPSBhZGRyLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOwotCQlpZiAoaW5ldF9hZGRyX3R5cGUobmV0LCB2NGFkZHIpICE9IFJUTl9MT0NBTCkgewotCQkJZXJyID0gLUVBRERSTk9UQVZBSUw7CisJCWludCBjaGtfYWRkcl9yZXQ7CisKKwkJLyogQmluZGluZyB0byB2NC1tYXBwZWQgYWRkcmVzcyBvbiBhIHY2LW9ubHkgc29ja2V0CisJCSAqIG1ha2VzIG5vIHNlbnNlCisJCSAqLworCQlpZiAobnAtPmlwdjZvbmx5KSB7CisJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KKworCQkvKiBSZXByb2R1Y2UgQUZfSU5FVCBjaGVja3MgdG8gbWFrZSB0aGUgYmluZGluZ3MgY29uc2l0YW50ICovCisJCXY0YWRkciA9IGFkZHItPnNpbjZfYWRkci5zNl9hZGRyMzJbM107CisJCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKG5ldCwgdjRhZGRyKTsKKwkJaWYgKCFzeXNjdGxfaXBfbm9ubG9jYWxfYmluZCAmJgorCQkgICAgIShpbmV0LT5mcmVlYmluZCB8fCBpbmV0LT50cmFuc3BhcmVudCkgJiYKKwkJICAgIHY0YWRkciAhPSBodG9ubChJTkFERFJfQU5ZKSAmJgorCQkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9MT0NBTCAmJgorCQkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9NVUxUSUNBU1QgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fQlJPQURDQVNUKQorCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKSB7CiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKQEAgLTMzOSw4ICszNTQsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKQorCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkgewogCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklOREFERFJfTE9DSzsKKwkJaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfTUFQUEVEKQorCQkJbnAtPmlwdjZvbmx5ID0gMTsKKwl9CiAJaWYgKHNudW0pCiAJCXNrLT5za191c2VybG9ja3MgfD0gU09DS19CSU5EUE9SVF9MT0NLOwogCWluZXQtPnNwb3J0ID0gaHRvbnMoaW5ldC0+bnVtKTsKQEAgLTgwMywyNCArODIxLDM0IEBACiAJaW50IHByb3RvOwogCV9fd3N1bSBjc3VtOwogCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkpCisJaXBoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmlwaCkpOworCWlmICh1bmxpa2VseSghaXBoKSkKIAkJZ290byBvdXQ7CiAKLQlpcGggPSBpcHY2X2hkcihza2IpOwotCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9ncm9fcHVsbChza2IsIHNpemVvZigqaXBoKSk7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CiAKLQlmbHVzaCArPSBudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAhPSBza2ItPmxlbjsKKwlmbHVzaCArPSBudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAhPSBza2JfZ3JvX2xlbihza2IpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXByb3RvID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgaXBoLT5uZXh0aGRyKTsKLQlpcGggPSBpcHY2X2hkcihza2IpOwotCUlQVjZfR1JPX0NCKHNrYiktPnByb3RvID0gcHJvdG87CisJcHJvdG8gPSBpcGgtPm5leHRoZHI7CiAJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X3Byb3Rvc1twcm90b10pOwotCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQotCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKCFvcHMgfHwgIW9wcy0+Z3JvX3JlY2VpdmUpIHsKKwkJX19wc2tiX3B1bGwoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKwkJcHJvdG8gPSBpcHY2X2dzb19wdWxsX2V4dGhkcnMoc2tiLCBwcm90byk7CisJCXNrYl9ncm9fcHVsbChza2IsIC1za2JfdHJhbnNwb3J0X29mZnNldChza2IpKTsKKwkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwkJX19za2JfcHVzaChza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOworCisJCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCWlwaCA9IGlwdjZfaGRyKHNrYik7CisJfQorCisJSVBWNl9HUk9fQ0Ioc2tiKS0+cHJvdG8gPSBwcm90bzsKIAogCWZsdXNoLS07Ci0Jc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAlubGVuID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwogCiAJZm9yIChwID0gKmhlYWQ7IHA7IHAgPSBwLT5uZXh0KSB7CkBAIC04ODMsOCArOTExLDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwdjZfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZnVuYyA9IGlwdjZfcmN2LAogCS5nc29fc2VuZF9jaGVjayA9IGlwdjZfZ3NvX3NlbmRfY2hlY2ssCiAJLmdzb19zZWdtZW50ID0gaXB2Nl9nc29fc2VnbWVudCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCA0MGYzMjQ2Li5kMzFkZjBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0yMTgsOCArMjE4LDcgQEAKIAkJCWlmIChvcHQpCiAJCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CiAJCQlwa3RvcHQgPSB4Y2hnKCZucC0+cGt0b3B0aW9ucywgTlVMTCk7Ci0JCQlpZiAocGt0b3B0KQotCQkJCWtmcmVlX3NrYihwa3RvcHQpOworCQkJa2ZyZWVfc2tiKHBrdG9wdCk7CiAKIAkJCXNrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKIAkJCS8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCAzZTI5NzA4Li45ZjA2MWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEwOTUsMTEgKzEwOTUsNyBAQAogCQkmaXB2Nl9oZHIocmEpLT5zYWRkcik7CiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsCi0JCQkgIEdGUF9BVE9NSUMpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dDsKLQorCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsIEdGUF9BVE9NSUMpOwogCXJldHVybjsKIAogbmxhX3B1dF9mYWlsdXJlOgpAQCAtMTUzOCwxMyArMTUzNCwxMCBAQAogCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSB7CiAJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiBkZXN0aW5hdGlvbiBpcyBub3QgYSBuZWlnaGJvdXIuXG4iKTsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOworCQlnb3RvIHJlbGVhc2U7CiAJfQotCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkgewotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47Ci0JfQorCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGRldi0+YWRkcl9sZW4pIHsKIAkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7CkBAIC0xNTcwLDggKzE1NjMsNyBAQAogCQlORF9QUklOVEswKEtFUk5fRVJSCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiAlcygpIGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBza2IuXG4iLAogCQkJICAgX19mdW5jX18pOwotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47CisJCWdvdG8gcmVsZWFzZTsKIAl9CiAKIAlza2JfcmVzZXJ2ZShidWZmLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKQEAgLTE2MzEsNiArMTYyMywxMCBAQAogCiAJaWYgKGxpa2VseShpZGV2ICE9IE5VTEwpKQogCQlpbjZfZGV2X3B1dChpZGV2KTsKKwlyZXR1cm47CisKK3JlbGVhc2U6CisJZHN0X3JlbGVhc2UoZHN0KTsKIH0KIAogc3RhdGljIHZvaWQgcG5kaXNjX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggNTNlYTUxMi4uMjlkNjQzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTk1LDEzICs5NSwxMyBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSEwKLQl0cmlzdGF0ZSAnImhsIiBtYXRjaCBzdXBwb3J0JworCXRyaXN0YXRlICciaGwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBITCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIGhvcAotCSAgbGltaXQgb2YgdGhlIHBhY2tldC4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwuCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUgogCXRyaXN0YXRlICciaXB2NmhlYWRlciIgSVB2NiBFeHRlbnNpb24gSGVhZGVycyBNYXRjaCcKQEAgLTEzMCw2ICsxMzAsMTUgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiAjIFRoZSB0YXJnZXRzCitjb25maWcgSVA2X05GX1RBUkdFVF9ITAorCXRyaXN0YXRlICciSEwiIGhvcGxpbWl0IHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJc2VsZWN0IE5FVEZJTFRFUl9YVF9UQVJHRVRfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KKwogY29uZmlnIElQNl9ORl9UQVJHRVRfTE9HCiAJdHJpc3RhdGUgIkxPRyB0YXJnZXQgc3VwcG9ydCIKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KQEAgLTE3MCwyMyArMTc5LDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUDZfTkZfVEFSR0VUX0hMCi0JdHJpc3RhdGUgICdITCAoaG9wbGltaXQpIHRhcmdldCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVA2X05GX01BTkdMRQotCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBITCcgdGFyZ2V0LCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIGRlY3JlbWVudAotCSAgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZSBJUHY2IGhlYWRlciBvciBzZXQgaXQgdG8gYSBnaXZlbiAobG93ZXIpCi0JICB2YWx1ZS4KLQotCSAgV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQgdGhlIGhvcGxpbWl0IHZhbHVlLCB0aGlzIG9wdGlvbiBhbHNvCi0JICBlbmFibGVzIGZ1bmN0aW9uYWxpdHkgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZQotCSAgSVB2NiBoZWFkZXIgdG8gYXJiaXRyYXJ5IHZhbHVlcy4gIFRoaXMgaXMgRVhUUkVNRUxZIERBTkdFUk9VUyBzaW5jZQotCSAgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wIGZvcmV2ZXIgb24gdGhlCi0JICBuZXR3b3JrLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIElQNl9ORl9SQVcKIAl0cmlzdGF0ZSAgJ3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggM2YxN2M5NC4uYWFmYmJhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMjAsMTMgKzIwLDExIEBACiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0FIKSArPSBpcDZ0X2FoLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQpICs9IGlwNnRfZXVpNjQubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHKSArPSBpcDZ0X2ZyYWcubwotb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9ITCkgKz0gaXA2dF9obC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIpICs9IGlwNnRfaXB2NmhlYWRlci5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgKz0gaXA2dF9ydC5vCiAKICMgdGFyZ2V0cwotb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwpICs9IGlwNnRfSEwubwogb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HKSArPSBpcDZ0X0xPRy5vCiBvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwNnRfUkVKRUNULm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCA1ODU5YzA0Li5iNjkzZjg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC02NDMsNiArNjQzLDcgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfSVA2X0ZXKTsKIAogbW9kdWxlX2luaXQoaXA2X3F1ZXVlX2luaXQpOwogbW9kdWxlX2V4aXQoaXA2X3F1ZXVlX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggYTMzNDg1ZC4uMzRhZjdiYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC04OSw2ICs4OSwyNSBAQAogCQkgKG5leHRoZHIgPT0gSVBQUk9UT19EU1RPUFRTKSApOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpZm5hbWVfY29tcGFyZShjb25zdCBjaGFyICpfYSwgY29uc3QgY2hhciAqX2IsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9tYXNrKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmEgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9hOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9iOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gKGFbMF0gXiBiWzBdKSAmIG1hc2tbMF07CisJaWYgKElGTkFNU0laID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMV0gXiBiWzFdKSAmIG1hc2tbMV07CisJaWYgKElGTkFNU0laID4gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzJdIF4gYlsyXSkgJiBtYXNrWzJdOworCWlmIChJRk5BTVNJWiA+IDMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVszXSBeIGJbM10pICYgbWFza1szXTsKKwlCVUlMRF9CVUdfT04oSUZOQU1TSVogPiA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBSZXR1cm5zIHdoZXRoZXIgbWF0Y2hlcyBydWxlIG9yIG5vdC4gKi8KIC8qIFBlcmZvcm1hbmNlIGNyaXRpY2FsIC0gY2FsbGVkIGZvciBldmVyeSBwYWNrZXQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbApAQCAtOTksNyArMTE4LDYgQEAKIAkJIHVuc2lnbmVkIGludCAqcHJvdG9mZiwKIAkJIGludCAqZnJhZ29mZiwgYm9vbCAqaG90ZHJvcCkKIHsKLQlzaXplX3QgaTsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2NiA9IGlwdjZfaGRyKHNrYik7CiAKQEAgLTEyMCwxMiArMTM4LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIExvb2sgZm9yIGlmbmFtZSBtYXRjaGVzOyB0aGlzIHNob3VsZCB1bnJvbGwgbmljZWx5LiAqLwotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykgewotCQlyZXQgfD0gKCgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWluZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcDZpbmZvLT5pbmlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+aW5pZmFjZV9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUoaW5kZXYsIGlwNmluZm8tPmluaWZhY2UsIGlwNmluZm8tPmluaWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQNlRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xMzQsMTEgKzE0Nyw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPm91dGlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+b3V0aWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKG91dGRldiwgaXA2aW5mby0+b3V0aWZhY2UsIGlwNmluZm8tPm91dGlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUDZUX0lOVl9WSUFfT1VUKSkgewogCQlkcHJpbnRmKCJWSUEgb3V0IG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0zNzMsMTAgKzM4MiwxMiBAQAogCW10cGFyLmZhbWlseSAgPSB0Z3Bhci5mYW1pbHkgPSBORlBST1RPX0lQVjY7CiAJdGdwYXIuaG9va251bSA9IGhvb2s7CiAKLQlyZWFkX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKIAlJUF9ORl9BU1NFUlQodGFibGUtPnZhbGlkX2hvb2tzICYgKDEgPDwgaG9vaykpOwotCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKilwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CisJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCiAJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKIAogCS8qIEZvciByZXR1cm4gZnJvbSBidWlsdGluIGNoYWluICovCkBAIC00NzQsNyArNDg1LDcgQEAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCiAJKChzdHJ1Y3QgaXA2dF9lbnRyeSAqKXRhYmxlX2Jhc2UpLT5jb21lZnJvbSA9IE5FVEZJTFRFUl9MSU5LX1BPSVNPTjsKICNlbmRpZgotCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKICNpZmRlZiBERUJVR19BTExPV19BTEwKIAlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtOTU1LDExICs5NjYsNjQgQEAKIAl9CiB9CiAKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlJUDZUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICAgdC0+c2l6ZSwKKwkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICAgY291bnRlcnMsCisJCQkgICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGlwNnRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJSVA2VF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05NjgsMTQgKzEwMzIsMjggQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOwogCi0JcmV0dXJuIGNvdW50ZXJzOworCWNsb25lX2NvdW50ZXJzKGluZm8sIHByaXZhdGUpOworCisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOworCXh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHByaXZhdGUsIGluZm8pOworCXN5bmNocm9uaXplX25ldCgpOwkvKiBXYWl0IHVudGlsIHNtb2tlIGhhcyBjbGVhcmVkICovCisKKwlnZXRfY291bnRlcnMoaW5mbywgY291bnRlcnMpOworCXB1dF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CisKKwl4dF9mcmVlX3RhYmxlX2luZm8oaW5mbyk7CisKKyBmcmVlX2NvdW50ZXJzOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBub21lbToKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIGludApAQCAtMTM0MiwyOCArMTQyMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1hZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0jaWYgMAotCWR1cHJpbnRmKCJhZGRfY291bnRlcjogRW50cnkgJXUgJWx1LyVsdSArICVsdS8lbHVcbiIsCi0JCSAqaSwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLmJjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLmJjbnQpOwotI2VuZGlmCi0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sCiAJCWludCBjb21wYXQpCkBAIC0xNDI0LDEzICsxNDgwLDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xNDM5LDggKzE0OTYsOSBAQAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgcGFkZGMsCiAJCQkgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2I1YWRmLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogSG9wIExpbWl0IG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIGlwNnRhYmxlcwotICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KLSAqIEJhc2VkIG9uIEhXJ3MgVFRMIG1vZHVsZQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHUEwKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjYgSG9wIExpbWl0IGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotaGxfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKLQljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbmV3X2hsOwotCi0JaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKLQkJcmV0dXJuIE5GX0RST1A7Ci0KLQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfU0VUOgotCQkJbmV3X2hsID0gaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9JTkM6Ci0JCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQgKyBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlpZiAobmV3X2hsID4gMjU1KQotCQkJCW5ld19obCA9IDI1NTsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfREVDOgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0IC0gaW5mby0+aG9wX2xpbWl0OwotCQkJaWYgKG5ld19obCA8IDApCi0JCQkJbmV3X2hsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JfQotCi0JaXA2aC0+aG9wX2xpbWl0ID0gbmV3X2hsOwotCi0JcmV0dXJuIFhUX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgYm9vbCBobF90ZzZfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0KLQlpZiAoaW5mby0+bW9kZSA+IElQNlRfSExfTUFYTU9ERSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKLQkJCWluZm8tPm1vZGUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChpbmZvLT5tb2RlICE9IElQNlRfSExfU0VUICYmIGluZm8tPmhvcF9saW1pdCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGluY3JlbWVudC9kZWNyZW1lbnQgZG9lc24ndCAiCi0JCQkibWFrZSBzZW5zZSB3aXRoIHZhbHVlIDBcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBobF90ZzZfcmVnIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJITCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLnRhcmdldAkJPSBobF90ZzYsCi0JLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbyksCi0JLnRhYmxlCQk9ICJtYW5nbGUiLAotCS5jaGVja2VudHJ5CT0gaGxfdGc2X2NoZWNrLAotCS5tZQkJPSBUSElTX01PRFVMRQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaGxfdGc2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZobF90ZzZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX3RnNl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmhsX3RnNl9yZWcpOwotfQotCi1tb2R1bGVfaW5pdChobF90ZzZfaW5pdCk7Ci1tb2R1bGVfZXhpdChobF90ZzZfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IDM3YWRmNWEuLjcwMThjYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAkubWUgCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgaXA2dF9sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcDZ0X2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJpcDZ0X0xPRyIsCiAJLmxvZ2ZuCQk9ICZpcDZ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjRkY2EuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIEhvcCBMaW1pdCBtYXRjaGluZyBtb2R1bGUgKi8KLQotLyogKEMpIDIwMDEtMjAwMiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgotICogQmFzZWQgb24gSFcncyB0dGwgbW9kdWxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCi1NT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY2IEhvcCBMaW1pdCBmaWVsZCBtYXRjaCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgYm9vbCBobF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaGxfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfRVE6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID09IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTkU6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ICE9IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTFQ6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0IDwgaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9HVDoKLQkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPiBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfaGw6IHVua25vd24gbW9kZSAlZFxuIiwKLQkJCQlpbmZvLT5tb2RlKTsKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaGxfbXQ2X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJobCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLm1hdGNoCQk9IGhsX210NiwKLQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2hsX2luZm8pLAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhsX210Nl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZobF9tdDZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX210Nl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaGxfbXQ2X3JlZyk7Ci19Ci0KLW1vZHVsZV9pbml0KGhsX210Nl9pbml0KTsKLW1vZHVsZV9leGl0KGhsX210Nl9leGl0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwppbmRleCA0MGQyZTM2Li5lZjVhMGEzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCkBAIC01NCw3ICs1NCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCmluZGV4IGQwYjMxYjIuLmFiMGQzOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKQEAgLTYwLDcgKzYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X21hbmdsZXIgPSB7CiAJLm5hbWUJCT0gIm1hbmdsZSIsCiAJLnZhbGlkX2hvb2tzCT0gTUFOR0xFX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfbWFuZ2xlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCAxMDlmYWI2Li40Yjc5MmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0zOCw3ICszOCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCi0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X3Jhdy5sb2NrKSwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuYWYgPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCmluZGV4IDIwYmM1MmYuLjBlYTM3ZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCkBAIC01OSw3ICs1OSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHNlY3VyaXR5X3RhYmxlLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKaW5kZXggNzI3Yjk1My4uZTY4NTJmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAKIHN0YXRpYyBib29sIGlwdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKaW5kZXggNzJkYmI2ZC4uNDFiOGE5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCkBAIC0xMjYsNiArMTI2LDEwIEBACiAJCXByX2RlYnVnKCJpY21wdjY6IGNhbid0IGNyZWF0ZSBuZXcgY29ubiB3aXRoIHR5cGUgJXVcbiIsCiAJCQkgdHlwZSArIDEyOCk7CiAJCW5mX2N0X2R1bXBfdHVwbGVfaXB2NigmY3QtPnR1cGxlaGFzaFswXS50dXBsZSk7CisJCWlmIChMT0dfSU5WQUxJRChuZl9jdF9uZXQoY3QpLCBJUFBST1RPX0lDTVBWNikpCisJCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgIm5mX2N0X2ljbXB2NjogaW52YWxpZCBuZXcgd2l0aCB0eXBlICVkICIsCisJCQkJICAgICAgdHlwZSArIDEyOCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJYXRvbWljX3NldCgmY3QtPnByb3RvLmljbXAuY291bnQsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggOWM1NzQyMy4uMTM5NGRkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC05OCw3ICs5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmdjCQkJPQlpcDZfZHN0X2djLAogCS5nY190aHJlc2gJCT0JMTAyNCwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmRlc3Ryb3kJCT0JaXA2X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXA2X2RzdF9jaGVjaywKIAkudXBkYXRlX3BtdHUJCT0JaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKQEAgLTI0MDAsOCArMjQwMCw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAotCQkJICBpbmZvLT5ubGgsIGdmcF9hbnkoKSk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAorCQkgICAgaW5mby0+bmxoLCBnZnBfYW55KCkpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCA1Y2VlMmJjLi42NjRhYjgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTY1OCw3ICs2NTgsOCBAQAogCX0KIAogCWlmICh0dW5uZWwtPmVycl9jb3VudCA+IDApIHsKLQkJaWYgKGppZmZpZXMgLSB0dW5uZWwtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXR1bm5lbC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7CiAJCQl0dW5uZWwtPmVycl9jb3VudC0tOwogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGU1Yjg1ZDQuLjRiNWFhMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNTMzLDggKzUzMyw3IEBACiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKLQlpZiAoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpCi0JCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7CisJa2ZyZWVfc2tiKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKTsKIH0KIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCkBAIC05NDgsNyArOTQ3LDcgQEAKIAogCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKIAljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgotCQlpZiAoIXRjcF92Nl9jaGVjayhza2ItPmxlbiwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLAorCQlpZiAoIXRjcF92Nl9jaGVjayhza2JfZ3JvX2xlbihza2IpLCAmaXBoLT5zYWRkciwgJmlwaC0+ZGFkZHIsCiAJCQkJICBza2ItPmNzdW0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJYnJlYWs7CkBAIC0xNjExLDggKzE2MTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKG9wdF9za2IpCi0JCWtmcmVlX3NrYihvcHRfc2tiKTsKKwlrZnJlZV9za2Iob3B0X3NrYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggODRiMWEyOS4uNjg0MmRkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTQ5LDYgKzQ5LDM0IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJ1ZHBfaW1wbC5oIgogCitpbnQgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoreworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2tfcmN2X3NhZGRyNiA9ICZpbmV0Nl9zayhzayktPnJjdl9zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrMl9yY3Zfc2FkZHI2ID0gaW5ldDZfcmN2X3NhZGRyKHNrMik7CisJaW50IHNrX2lwdjZvbmx5ID0gaXB2Nl9vbmx5X3NvY2soc2spOworCWludCBzazJfaXB2Nm9ubHkgPSBpbmV0X3Y2X2lwdjZvbmx5KHNrMik7CisJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKHNrX3Jjdl9zYWRkcjYpOworCWludCBhZGRyX3R5cGUyID0gc2syX3Jjdl9zYWRkcjYgPyBpcHY2X2FkZHJfdHlwZShzazJfcmN2X3NhZGRyNikgOiBJUFY2X0FERFJfTUFQUEVEOworCisJLyogaWYgYm90aCBhcmUgbWFwcGVkLCB0cmVhdCBhcyBJUHY0ICovCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkKKwkJcmV0dXJuIGlwdjRfcmN2X3NhZGRyX2VxdWFsKHNrLCBzazIpOworCisJaWYgKGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX0FOWSAmJgorCSAgICAhKHNrMl9pcHY2b25seSAmJiBhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkpCisJCXJldHVybiAxOworCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZICYmCisJICAgICEoc2tfaXB2Nm9ubHkgJiYgYWRkcl90eXBlMiA9PSBJUFY2X0FERFJfTUFQUEVEKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoc2syX3Jjdl9zYWRkcjYgJiYKKwkgICAgaXB2Nl9hZGRyX2VxdWFsKHNrX3Jjdl9zYWRkcjYsIHNrMl9yY3Zfc2FkZHI2KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHVkcF92Nl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCiB7CiAJcmV0dXJuIHVkcF9saWJfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjZfcmN2X3NhZGRyX2VxdWFsKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggOTdhYjA2OC4uYjRiMTZhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTZfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZ2MgPQkJCXhmcm02X2dhcmJhZ2VfY29sbGVjdCwKIAkudXBkYXRlX3BtdHUgPQkJeGZybTZfdXBkYXRlX3BtdHUsCiAJLmRlc3Ryb3kgPQkJeGZybTZfZHN0X2Rlc3Ryb3ksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCAwZTY4NWIwLi5mNDE3Yjc3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJZHN0W2NvdW50W2NsYXNzW2ldIC0gMV0rK10gPSBzcmNbaV07Ci0JCXNyY1tpXSA9IDA7CisJCXNyY1tpXSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCBiNmU3MGY5Li4xNjI3MDUwIDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTE5NTgsMTMgKzE5NTgsMTMgQEAKIAogU09DS09QU19XUkFQKGlweF9kZ3JhbSwgUEZfSVBYKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHhfODAyM19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4XzgwMjNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyksCiAJLmZ1bmMJCT0gaXB4X3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4X2RpeF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF9kaXhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9JUFgpLAogCS5mdW5jCQk9IGlweF9yY3YsCiB9OwogCkBAIC0xOTc1LDE1ICsxOTc1LDE1IEBACiBleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICptYWtlX0VJSV9jbGllbnQodm9pZCk7CiBleHRlcm4gdm9pZCBkZXN0cm95X0VJSV9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICopOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcHhfODAyMl90eXBlID0gMHhFMDsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlweF9zbmFwX2lkWzVdID0geyAweDAsIDB4MCwgMHgwLCAweDgxLCAweDM3IH07Ci1zdGF0aWMgY2hhciBpcHhfRUlJX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlweF84MDIyX3R5cGUgPSAweEUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXB4X3NuYXBfaWRbNV0gPSB7IDB4MCwgMHgwLCAweDAsIDB4ODEsIDB4MzcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGlweF9FSUlfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggRXRoZXJuZXQgSUlcbiI7Ci1zdGF0aWMgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuM1xuIjsKLXN0YXRpYyBjaGFyIGlweF9sbGNfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgaXB4X2xsY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuMlxuIjsKLXN0YXRpYyBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJJUFg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIFNOQVBcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGlweF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwppbmRleCBlYTMxOWUzLi5iZjkyZTE0IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jCisrKyBiL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKQEAgLTE0OSwxMyArMTQ5LDE0IEBACiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWRldi0+ZG9faW9jdGwpIHsKKwlpZiAoIWRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKSB7CiAJCUlSREFfRVJST1IoIiVzOiBkb19pb2N0bCBub3QgaW1wbC4gYnkgZGV2aWNlIGRyaXZlclxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldCA9IGRldi0+ZG9faW9jdGwoZGV2LCAoc3RydWN0IGlmcmVxICopICZyZXEsIFNJT0NHUkVDRUlWSU5HKTsKKwlyZXQgPSAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpKGRldiwgKHN0cnVjdCBpZnJlcSAqKSAmcmVxLAorCQkJCQkgICAgICBTSU9DR1JFQ0VJVklORyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggMDUxMTJiZS4uNzI0YmNmOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTQ1LDYgKzQ1LDE2IEBACiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcmxhbl9ldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBpcmxhbl9ldGhfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkgICAgICAgID0gaXJsYW5fZXRoX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGlybGFuX2V0aF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2V0aF9zZXR1cCAoZGV2KQogICoKQEAgLTUzLDE0ICs2MywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gaXJsYW5fZXRoX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICAgICA9IGlybGFuX2V0aF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0OworCWV0aGVyX3NldHVwKGRldik7CisKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmlybGFuX2V0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKIAotCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKgogCSAqIExldHMgZG8gYWxsIHF1ZXVlaW5nIGluIElyVFRQIGluc3RlYWQgb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJtb2QuYyBiL25ldC9pcmRhL2lybW9kLmMKaW5kZXggNGM0ODdhOC4uMzAzYTY4ZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJtb2QuYworKysgYi9uZXQvaXJkYS9pcm1vZC5jCkBAIC01NSw4ICs1NSw4IEBACiAvKiBQYWNrZXQgdHlwZSBoYW5kbGVyLgogICogVGVsbCB0aGUga2VybmVsIGhvdyBJckRBIHBhY2tldHMgc2hvdWxkIGJlIGhhbmRsZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXJkYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVJEQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlyZGFfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0lSREEpLAogCS5mdW5jCT0gaXJsYXBfZHJpdmVyX3JjdiwJLyogUGFja2V0IHR5cGUgaGFuZGxlciBpcmxhcF9mcmFtZS5jICovCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWI4YTJhMC4uNDllNzg2NSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMTE3MSw4ICsxMTcxLDcgQEAKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHRoaXMpCi0JCQlrZnJlZV9za2IodGhpcyk7CisJCWtmcmVlX3NrYih0aGlzKTsKIAl9CiAJQlVHX09OKCF0aGlzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggN2RjYmRlMy4uNjQzYzFiZSAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0zMTMsOCArMzEzLDcgQEAKIAlpZiAob25lX3NrICE9IE5VTEwpCiAJCWVyciA9IHBma2V5X2Jyb2FkY2FzdF9vbmUoc2tiLCAmc2tiMiwgYWxsb2NhdGlvbiwgb25lX3NrKTsKIAotCWlmIChza2IyKQotCQlrZnJlZV9za2Ioc2tiMik7CisJa2ZyZWVfc2tiKHNrYjIpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTczLDggKzM1NzIsNyBAQAogb3V0OgogCWlmIChlcnIgJiYgaGRyICYmIHBma2V5X2Vycm9yKGhkciwgZXJyLCBzaykgPT0gMCkKIAkJZXJyID0gMDsKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiBlcnIgPyA6IGxlbjsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDU2ZmQ4NWEuLmZlYmFlNzAgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMTExOCwxMSArMTExOCwxMSBAQAogCS5zZW5kcGFnZSAgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCiB9OwogCi1zdGF0aWMgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHByb2NfZnMgZW50cmllc1xuIjsKLXN0YXRpYyBjaGFyIGxsY19zeXNjdGxfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3N5c2N0bF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHN5c2N0bCBlbnRyaWVzXG4iOwotc3RhdGljIGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGZhbWlseVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGxjMl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggNWM2ZDg5Yy4uMzQ3NzYyNCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtMzMyLDggKzMzMiw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGR1X3BvcyAmJiBpIDwgcV9sZW47IGkrKykgewogCQlza2IgPSBza2JfZGVxdWV1ZSgmbGxjLT5wZHVfdW5hY2tfcSk7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCW5icl9hY2tlZCsrOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2NvcmUuYyBiL25ldC9sbGMvbGxjX2NvcmUuYwppbmRleCA1MGQ1YjEwLi5mZjRjMGFiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb3JlLmMKKysrIGIvbmV0L2xsYy9sbGNfY29yZS5jCkBAIC0xNDcsMTMgKzE0NywxMyBAQAogCWtmcmVlKHNhcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3RyX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9UUl84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY190cl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfVFJfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCA3ZDQ5NzFhLi4wZTNhYjg4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC04LDEzICs4LDE1IEBACiAJd2VwLm8gXAogCXdwYS5vIFwKIAlzY2FuLm8gXAotCWh0Lm8gXAorCWh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXAorCWlic3MubyBcCiAJbWxtZS5vIFwKIAlpZmFjZS5vIFwKIAlyYXRlLm8gXAogCW1pY2hhZWwubyBcCiAJdGtpcC5vIFwKIAlhZXNfY2NtLm8gXAorCWFlc19jbWFjLm8gXAogCWNmZy5vIFwKIAlyeC5vIFwKIAlzcGVjdG1nbXQubyBcCkBAIC0zNyw2ICszOSw4IEBACiAJbWVzaF9wbGluay5vIFwKIAltZXNoX2h3bXAubwogCittYWM4MDIxMS0kKENPTkZJR19QTSkgKz0gcG0ubworCiAjIG9iamVjdHMgZm9yIFBJRCBhbGdvcml0aG0KIHJjODAyMTFfcGlkLXkgOj0gcmM4MDIxMV9waWRfYWxnby5vCiByYzgwMjExX3BpZC0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSByYzgwMjExX3BpZF9kZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwOTdiMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQUVTLTEyOC1DTUFDIHdpdGggVExlbiAxNiBmb3IgSUVFRSA4MDIuMTF3IEJJUAorICogQ29weXJpZ2h0IDIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImtleS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCisKKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKKyNkZWZpbmUgQUVTX0NNQUNfS0VZX0xFTiAxNgorI2RlZmluZSBDTUFDX1RMRU4gOCAvKiBDTUFDIFRMZW4gPSA2NCBiaXRzICg4IG9jdGV0cykgKi8KKyNkZWZpbmUgQUFEX0xFTiAyMAorCisKK3N0YXRpYyB2b2lkIGdmX211bHgodTggKnBhZCkKK3sKKwlpbnQgaSwgY2Fycnk7CisKKwljYXJyeSA9IHBhZFswXSAmIDB4ODA7CisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFIC0gMTsgaSsrKQorCQlwYWRbaV0gPSAocGFkW2ldIDw8IDEpIHwgKHBhZFtpICsgMV0gPj4gNyk7CisJcGFkW0FFU19CTE9DS19TSVpFIC0gMV0gPDw9IDE7CisJaWYgKGNhcnJ5KQorCQlwYWRbQUVTX0JMT0NLX1NJWkUgLSAxXSBePSAweDg3OworfQorCisKK3N0YXRpYyB2b2lkIGFlc18xMjhfY21hY192ZWN0b3Ioc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsCisJCQkJc2l6ZV90IG51bV9lbGVtLAorCQkJCWNvbnN0IHU4ICphZGRyW10sIGNvbnN0IHNpemVfdCAqbGVuLCB1OCAqbWFjKQoreworCXU4ICpjYmMsICpwYWQ7CisJY29uc3QgdTggKnBvcywgKmVuZDsKKwlzaXplX3QgaSwgZSwgbGVmdCwgdG90YWxfbGVuOworCisJY2JjID0gc2NyYXRjaDsKKwlwYWQgPSBzY3JhdGNoICsgQUVTX0JMT0NLX1NJWkU7CisKKwltZW1zZXQoY2JjLCAwLCBBRVNfQkxPQ0tfU0laRSk7CisKKwl0b3RhbF9sZW4gPSAwOworCWZvciAoZSA9IDA7IGUgPCBudW1fZWxlbTsgZSsrKQorCQl0b3RhbF9sZW4gKz0gbGVuW2VdOworCWxlZnQgPSB0b3RhbF9sZW47CisKKwllID0gMDsKKwlwb3MgPSBhZGRyWzBdOworCWVuZCA9IHBvcyArIGxlblswXTsKKworCXdoaWxlIChsZWZ0ID49IEFFU19CTE9DS19TSVpFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgaSsrKSB7CisJCQljYmNbaV0gXj0gKnBvcysrOworCQkJaWYgKHBvcyA+PSBlbmQpIHsKKwkJCQllKys7CisJCQkJcG9zID0gYWRkcltlXTsKKwkJCQllbmQgPSBwb3MgKyBsZW5bZV07CisJCQl9CisJCX0KKwkJaWYgKGxlZnQgPiBBRVNfQkxPQ0tfU0laRSkKKwkJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBjYmMsIGNiYyk7CisJCWxlZnQgLT0gQUVTX0JMT0NLX1NJWkU7CisJfQorCisJbWVtc2V0KHBhZCwgMCwgQUVTX0JMT0NLX1NJWkUpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwYWQsIHBhZCk7CisJZ2ZfbXVseChwYWQpOworCisJaWYgKGxlZnQgfHwgdG90YWxfbGVuID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlZnQ7IGkrKykgeworCQkJY2JjW2ldIF49ICpwb3MrKzsKKwkJCWlmIChwb3MgPj0gZW5kKSB7CisJCQkJZSsrOworCQkJCXBvcyA9IGFkZHJbZV07CisJCQkJZW5kID0gcG9zICsgbGVuW2VdOworCQkJfQorCQl9CisJCWNiY1tsZWZ0XSBePSAweDgwOworCQlnZl9tdWx4KHBhZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFOyBpKyspCisJCXBhZFtpXSBePSBjYmNbaV07CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIHBhZCwgcGFkKTsKKwltZW1jcHkobWFjLCBwYWQsIENNQUNfVExFTik7Cit9CisKKwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCWNvbnN0IHU4ICphZGRyWzNdOworCXNpemVfdCBsZW5bM107CisJdTggemVyb1tDTUFDX1RMRU5dOworCisJbWVtc2V0KHplcm8sIDAsIENNQUNfVExFTik7CisJYWRkclswXSA9IGFhZDsKKwlsZW5bMF0gPSBBQURfTEVOOworCWFkZHJbMV0gPSBkYXRhOworCWxlblsxXSA9IGRhdGFfbGVuIC0gQ01BQ19UTEVOOworCWFkZHJbMl0gPSB6ZXJvOworCWxlblsyXSA9IENNQUNfVExFTjsKKworCWFlc18xMjhfY21hY192ZWN0b3IodGZtLCBzY3JhdGNoLCAzLCBhZGRyLCBsZW4sIG1pYyk7Cit9CisKKworc3RydWN0IGNyeXB0b19jaXBoZXIgKiBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X3NldHVwKGNvbnN0IHU4IGtleVtdKQoreworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm07CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfY2lwaGVyKCJhZXMiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBOVUxMOworCisJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIEFFU19DTUFDX0tFWV9MRU4pOworCisJcmV0dXJuIHRmbTsKK30KKworCit2b2lkIGllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCWlmICh0Zm0pCisJCWNyeXB0b19mcmVlX2NpcGhlcih0Zm0pOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2Flc19jbWFjLmggYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI5YTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBRVNfQ01BQ19ICisjZGVmaW5lIEFFU19DTUFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCitzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqIGllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoY29uc3QgdTgga2V5W10pOwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pOworCisjZW5kaWYgLyogQUVTX0NNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy1yeC5jIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWFmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisKK3ZvaWQgX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJaW50IGk7CisKKwkvKiBjaGVjayBpZiBUSUQgaXMgaW4gb3BlcmF0aW9uYWwgc3RhdGUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPQorCQlIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKKwkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJSeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUT1AsCisJCQkJICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCkpCisJCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKKwkJCQkiYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKKworCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLworCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQorCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCisJaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCisJCWllZWU4MDIxMV9zZW5kX2RlbGJhKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCisJCQkJICAgICB0aWQsIDAsIHJlYXNvbik7CisKKwkvKiBmcmVlIHRoZSByZW9yZGVyaW5nIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPmJ1Zl9zaXplOyBpKyspIHsKKwkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pIHsKKwkJCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgKi8KKwkJCWRldl9rZnJlZV9za2Ioc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSk7CisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnN0b3JlZF9tcGR1X251bS0tOworCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSA9IE5VTEw7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJLyogZnJlZSByZXNvdXJjZXMgKi8KKwlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmKTsKKworCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zaHV0ZG93bikgeworCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOworCX0KKworCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9JRExFOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworfQorCit2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsCisJCQkJCXUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCisJICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KKwlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCV9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yLCByZWFzb24pOworCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBBZnRlciBhY2NlcHRpbmcgdGhlIEFkZEJBIFJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIsCisgKiByZXNldHRpbmcgaXQgYWZ0ZXIgZWFjaCBmcmFtZSB0aGF0IGFycml2ZXMgZnJvbSB0aGUgb3JpZ2luYXRvci4KKyAqIGlmIHRoaXMgdGltZXIgZXhwaXJlcyBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbiB3aWxsIGJlIGV4ZWN1dGVkLgorICovCitzdGF0aWMgdm9pZCBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKKwkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIHZhcmlvdXMgc3RhX2luZm8gYXJlIG5lZWRlZCBoZXJlLCBzbyBpbml0CisJICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKKwkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCisJdTggKnB0aWQgPSAodTggKilkYXRhOworCXU4ICp0aW1lcl90b19pZCA9IHB0aWQgLSAqcHRpZDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0aW1lcl90b19pZCwgc3RydWN0IHN0YV9pbmZvLAorCQkJCQkgdGltZXJfdG9fdGlkWzBdKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJyeCBzZXNzaW9uIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCAodTE2KSpwdGlkKTsKKyNlbmRpZgorCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCisJCQkJCSAodTE2KSpwdGlkLCBXTEFOX0JBQ0tfVElNRVIsCisJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsIHUxNiB0aWQsCisJCQkJICAgICAgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhdHVzLCB1MTYgcG9saWN5LAorCQkJCSAgICAgIHUxNiBidWZfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCisJCSAgICAgICAiZm9yIGFkZGJhIHJlc3AgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKTsKKwltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfQkFDSzsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisKKwljYXBhYiA9ICh1MTYpKHBvbGljeSA8PCAxKTsJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCisJY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCisJY2FwYWIgfD0gKHUxNikoYnVmX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ3JlZ2F0aW9uICovCisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7CisJdTE2IGNhcGFiLCB0aWQsIHRpbWVvdXQsIGJhX3BvbGljeSwgYnVmX3NpemUsIHN0YXJ0X3NlcV9udW0sIHN0YXR1czsKKwl1OCBkaWFsb2dfdG9rZW47CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJLyogZXh0cmFjdCBzZXNzaW9uIHBhcmFtZXRlcnMgZnJvbSBhZGRiYSByZXF1ZXN0IGZyYW1lICovCisJZGlhbG9nX3Rva2VuID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuOworCXRpbWVvdXQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0KTsKKwlzdGFydF9zZXFfbnVtID0KKwkJbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSkgPj4gNDsKKworCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOworCWJhX3BvbGljeSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9QT0xJQ1lfTUFTSykgPj4gMTsKKwl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7CisJYnVmX3NpemUgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykgPj4gNjsKKworCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1JFUVVFU1RfREVDTElORUQ7CisKKwkvKiBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhcmFtZXRlcnM6CisJICogY2hlY2sgaWYgY29uZmlndXJhdGlvbiBjYW4gc3VwcG9ydCB0aGUgQkEgcG9saWN5CisJICogYW5kIGlmIGJ1ZmZlciBzaXplIGRvZXMgbm90IGV4Y2VlZHMgbWF4IHZhbHVlICovCisJLyogWFhYOiBjaGVjayBvd24gaHQgZGVsYXllZCBCQSBjYXBhYmlsaXR5Pz8gKi8KKwlpZiAoKChiYV9wb2xpY3kgIT0gMSkKKwkJJiYgKCEoc3RhLT5zdGEuaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfREVMQVlfQkEpKSkKKwkJfHwgKGJ1Zl9zaXplID4gSUVFRTgwMjExX01BWF9BTVBEVV9CVUYpKSB7CisJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfUU9TX1BBUkFNOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkFkZEJBIFJlcSB3aXRoIGJhZCBwYXJhbXMgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXUuIHBvbGljeSAlZCwgYnVmZmVyIHNpemUgJWRcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCwgYmFfcG9saWN5LAorCQkJCWJ1Zl9zaXplKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwkJZ290byBlbmRfbm9fbG9jazsKKwl9CisJLyogZGV0ZXJtaW5lIGRlZmF1bHQgYnVmZmVyIHNpemUgKi8KKwlpZiAoYnVmX3NpemUgPT0gMCkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbY29uZi0+Y2hhbm5lbC0+YmFuZF07CisJCWJ1Zl9zaXplID0gSUVFRTgwMjExX01JTl9BTVBEVV9CVUY7CisJCWJ1Zl9zaXplID0gYnVmX3NpemUgPDwgc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CisJfQorCisKKwkvKiBleGFtaW5lIHN0YXRlIG1hY2hpbmUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBBZGRCQSBSZXEgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXVcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gZW5kOworCX0KKworCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFJ4IGFnZ3JlZ2F0aW9uICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0KKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCisJCQkJCXRpZCk7CisjZW5kaWYKKwkJZ290byBlbmQ7CisJfQorCS8qIHJ4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmZ1bmN0aW9uID0KKwkJCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZGF0YSA9CisJCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisKKwkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCisJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQorCQlrY2FsbG9jKGJ1Zl9zaXplLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOworCWlmICghdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvY2F0ZSByZW9yZGVyaW5nIGJ1ZmZlciAiCisJCQkgICAgICAgInRvIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQorCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKKwkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSByZXF1ZXN0IG9uIHRpZCAlZCByZXN1bHQgJWRcbiIsIHRpZCwgcmV0KTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChyZXQpIHsKKwkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpOworCQlrZnJlZSh0aWRfYWdnX3J4KTsKKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwkJZ290byBlbmQ7CisJfQorCisJLyogY2hhbmdlIHN0YXRlIGFuZCBzZW5kIGFkZGJhIHJlc3AgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJdGlkX2FnZ19yeC0+ZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCXRpZF9hZ2dfcngtPnNzbiA9IHN0YXJ0X3NlcV9udW07CisJdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc3RhcnRfc2VxX251bTsKKwl0aWRfYWdnX3J4LT5idWZfc2l6ZSA9IGJ1Zl9zaXplOworCXRpZF9hZ2dfcngtPnRpbWVvdXQgPSB0aW1lb3V0OworCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7CisJc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKK2VuZDoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworZW5kX25vX2xvY2s6CisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLCB0aWQsCisJCQkJICBkaWFsb2dfdG9rZW4sIHN0YXR1cywgMSwgYnVmX3NpemUsIHRpbWVvdXQpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjExNmQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTAsMCArMSw3MDEgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAid21lLmgiCisKKy8qKgorICogRE9DOiBUWCBhZ2dyZWdhdGlvbgorICoKKyAqIEFnZ3JlZ2F0aW9uIG9uIHRoZSBUWCBzaWRlIHJlcXVpcmVzIHNldHRpbmcgdGhlIGhhcmR3YXJlIGZsYWcKKyAqICVJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04gYXMgd2VsbCBhcywgaWYgcHJlc2VudCwgdGhlIEBhbXBkdV9xdWV1ZXMKKyAqIGhhcmR3YXJlIHBhcmFtZXRlciB0byB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIEFNUERVIHF1ZXVlcy4gSWYgdGhlcmUgYXJlIG5vCisgKiBoYXJkd2FyZSBxdWV1ZXMgdGhlbiB0aGUgZHJpdmVyIHdpbGwgKGN1cnJlbnRseSkgaGF2ZSB0byBkbyBhbGwgZnJhbWUKKyAqIGJ1ZmZlcmluZy4KKyAqCisgKiBXaGVuIFRYIGFnZ3JlZ2F0aW9uIGlzIHN0YXJ0ZWQgYnkgc29tZSBzdWJzeXN0ZW0gKHVzdWFsbHkgdGhlIHJhdGUgY29udHJvbAorICogYWxnb3JpdGhtIHdvdWxkIGJlIGFwcHJvcHJpYXRlKSBieSBjYWxsaW5nIHRoZQorICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oKSBmdW5jdGlvbiwgdGhlIGRyaXZlciB3aWxsIGJlIG5vdGlmaWVkIHZpYQorICogaXRzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24sIHdpdGggdGhlICVJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQgYWN0aW9uLgorICoKKyAqIEluIHJlc3BvbnNlIHRvIHRoYXQsIHRoZSBkcml2ZXIgaXMgbGF0ZXIgcmVxdWlyZWQgdG8gY2FsbCB0aGUKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYigpIChvciBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSgpKQorICogZnVuY3Rpb24sIHdoaWNoIHdpbGwgc3RhcnQgdGhlIGFnZ3JlZ2F0aW9uIHNlc3Npb24uCisgKgorICogU2ltaWxhcmx5LCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGlzIHN0b3BwZWQgYnkKKyAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oKSwgdGhlIGRyaXZlcidzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24gd2lsbAorICogYmUgY2FsbGVkIHdpdGggdGhlIGFjdGlvbiAlSUVFRTgwMjExX0FNUERVX1RYX1NUT1AuIEluIHRoaXMgY2FzZSwgdGhlCisgKiBjYWxsIG11c3Qgbm90IGZhaWwsIGFuZCB0aGUgZHJpdmVyIG11c3QgbGF0ZXIgY2FsbCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYigpCisgKiAob3IgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSgpKS4KKyAqLworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJCQkgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhcnRfc2VxX251bSwKKwkJCQkJIHUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgorCQkJCSJmb3IgYWRkYmEgcmVxdWVzdCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcSkpOworCisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVE7CisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisJY2FwYWIgPSAodTE2KSgxIDw8IDEpOwkJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCisJY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCisJY2FwYWIgfD0gKHUxNikoYWdnX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ2VyZ2F0aW9uICovCisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsKKworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtID0KKwkJCQkJY3B1X3RvX2xlMTYoc3RhcnRfc2VxX251bSA8PCA0KTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyOworCXUxNiBiYXJfY29udHJvbCA9IDA7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqYmFyKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkJImJhciBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWJhciA9IChzdHJ1Y3QgaWVlZTgwMjExX2JhciAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmJhcikpOworCW1lbXNldChiYXIsIDAsIHNpemVvZigqYmFyKSk7CisJYmFyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8CisJCQkJCSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpOworCW1lbWNweShiYXItPnJhLCByYSwgRVRIX0FMRU4pOworCW1lbWNweShiYXItPnRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOworCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7CisJYmFyLT5jb250cm9sID0gY3B1X3RvX2xlMTYoYmFyX2NvbnRyb2wpOworCWJhci0+c3RhcnRfc2VxX251bSA9IGNwdV90b19sZTE2KHNzbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCitzdGF0aWMgaW50IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOworCWludCByZXQ7CisJdTggKnN0YXRlOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJaWYgKGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpIHsKKwkJaWYgKGluaXRpYXRvcikgeworCQkJLyoKKwkJCSAqIFN0b3AgdGhlIEFDIHF1ZXVlIHRvIGF2b2lkIGlzc3VlcyB3aGVyZSB3ZSBzZW5kCisJCQkgKiB1bmFnZ3JlZ2F0ZWQgZnJhbWVzIGFscmVhZHkgYmVmb3JlIHRoZSBkZWxiYS4KKwkJCSAqLworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKCZsb2NhbC0+aHcsCisJCQkJbG9jYWwtPmh3LnF1ZXVlcyArIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSwKKwkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCQl9CisKKwkJLyoKKwkJICogUHJldGVuZCB0aGUgZHJpdmVyIHdva2UgdGhlIHF1ZXVlLCBqdXN0IGluIGNhc2UKKwkJICogaXQgZGlzYWJsZWQgaXQgYmVmb3JlIHRoZSBzZXNzaW9uIHdhcyBzdG9wcGVkLgorCQkgKi8KKwkJaWVlZTgwMjExX3dha2VfcXVldWUoCisJCQkmbG9jYWwtPmh3LCBsb2NhbC0+aHcucXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKKwl9CisJKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CisJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCisJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKKworCS8qIEhXIHNoYWxsIG5vdCBkZW55IGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCisJaWYgKFdBUk5fT04ocmV0KSkgeworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFmdGVyIHNlbmRpbmcgYWRkIEJsb2NrIEFjayByZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyIHVudGlsCisgKiBhZGQgQmxvY2sgQWNrIHJlc3BvbnNlIHdpbGwgYXJyaXZlIGZyb20gdGhlIHJlY2lwaWVudC4KKyAqIElmIHRoaXMgdGltZXIgZXhwaXJlcyBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkIHdpbGwgYmUgZXhlY3V0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCisJICogb25seSBvbmUgYXJndW1lbnQsIGFuZCBib3RoIHN0YV9pbmZvIGFuZCBUSUQgYXJlIG5lZWRlZCwgc28gaW5pdAorCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCisJICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLworCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZigodm9pZCAqKWRhdGEsCisJCXN0cnVjdCBzdGFfaW5mbywgdGltZXJfdG9fdGlkW3RpZF0pOworCXU4ICpzdGF0ZTsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKKwkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHJlc3BvbnNlIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCB0aWQpOworI2VuZGlmCisKKwlfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2FjX2Zyb21fdGlkKGludCB0aWQpCit7CisJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbdGlkICYgN107Cit9CisKK2ludCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXU4ICpzdGF0ZTsKKwlpbnQgaSwgcW4gPSAtMSwgcmV0ID0gMDsKKwl1MTYgc3RhcnRfc2VxX251bTsKKworCWlmIChXQVJOX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodGlkID49IFNUQV9USURfTlVNKSB8fCAhKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIk9wZW4gQkEgc2Vzc2lvbiByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCisJICAgICAgIHJhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJaWYgKGh3LT5hbXBkdV9xdWV1ZXMgJiYgaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCkgPT0gMCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAicmVqZWN0aW5nIG9uIHZvaWNlIEFDXG4iKTsKKyNlbmRpZgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgdGhlIHN0YXRpb25cbiIpOworI2VuZGlmCisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gdW5sb2NrOworCX0KKworCS8qCisJICogVGhlIGFnZ3JlZ2F0aW9uIGNvZGUgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorCSAqIGFueXRoaW5nIGJ1dCBTVEEvQVAgZHVlIHRvIHRoZSBCU1NJRCBoYW5kbGluZy4KKwkgKiBJQlNTIGNvdWxkIHdvcmsgaW4gdGhlIGNvZGUgYnV0IGlzbid0IHN1cHBvcnRlZAorCSAqIGJ5IGRyaXZlcnMgb3IgdGhlIHN0YW5kYXJkLgorCSAqLworCWlmIChzdGEtPnNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIHN0YS0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkgICAgc3RhLT5zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJc2RhdGEgPSBzdGEtPnNkYXRhOworCisJLyogd2UgaGF2ZSB0cmllZCB0b28gbWFueSB0aW1lcywgcmVjZWl2ZXIgZG9lcyBub3Qgd2FudCBBLU1QRFUgKi8KKwlpZiAoc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA+IEhUX0FHR19NQVhfUkVUUklFUykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubG9ja19zdGE7CisJfQorCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgbm90IGluIGFnZ3JlZ2F0aW9uIGZsb3cgYWxyZWFkeSAqLworCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gc2Vzc2lvbiBpcyBub3QgIgorCQkJCSAiaWRsZSBvbiB0aWQgJXVcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gZXJyX3VubG9ja19zdGE7CisJfQorCisJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKKwkJc3Bpbl9sb2NrKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CisJCS8qIHJlc2VydmUgYSBuZXcgcXVldWUgZm9yIHRoaXMgc2Vzc2lvbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPmh3LmFtcGR1X3F1ZXVlczsgaSsrKSB7CisJCQlpZiAobG9jYWwtPmFtcGR1X2FjX3F1ZXVlW2ldIDwgMCkgeworCQkJCXFuID0gaTsKKwkJCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbcW5dID0KKwkJCQkJaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTsKKworCQlpZiAocW4gPCAwKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSAiCisJCQkgICAgICAgInF1ZXVlIHVuYXZhaWxhYmxlIGZvciB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBlcnJfdW5sb2NrX3N0YTsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSB0aGUgc2Vzc2lvbiwgd2UgY2FuJ3QgaGF2ZQorCQkgKiBhbnl0aGluZyBnb2luZyBvbiBvbiB0aGUgcXVldWUgdGhpcyBUSUQgbWFwcyBpbnRvLCBzbworCQkgKiBzdG9wIGl0IGZvciBub3cuIFRoaXMgaXMgYSAidmlydHVhbCIgc3RvcCB1c2luZyB0aGUgc2FtZQorCQkgKiBtZWNoYW5pc20gdGhhdCBkcml2ZXJzIHdpbGwgdXNlLgorCQkgKgorCQkgKiBYWFg6IHF1ZXVlIHVwIGZyYW1lcyBmb3IgdGhpcyBzZXNzaW9uIGluIHRoZSBzdGFfaW5mbworCQkgKglzdHJ1Y3QgaW5zdGVhZCB0byBhdm9pZCBoaXR0aW5nIGFsbCBvdGhlciBTVEFzLgorCQkgKi8KKwkJaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKAorCQkJJmxvY2FsLT5odywgaHctPnF1ZXVlcyArIHFuLAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwl9CisKKwkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAorCQkJCQl0aWQpOworI2VuZGlmCisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JldHVybl9xdWV1ZTsKKwl9CisKKwkvKiBUeCB0aW1lciAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5mdW5jdGlvbiA9CisJCQlzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5kYXRhID0KKwkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOworCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisKKwkvKiBPaywgdGhlIEFkZGJhIGZyYW1lIGhhc24ndCBiZWVuIHNlbnQgeWV0LCBidXQgaWYgdGhlIGRyaXZlciBjYWxscyB0aGUKKwkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KKwkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKKworCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAorCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworCisJaWYgKHJldCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBIVyB1bmF2YWlsYWJsZSBmb3IiCisJCQkJCSIgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisJc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gcW47CisKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworCS8qIHNlbmQgYW4gYWRkQkEgcmVxdWVzdCAqLworCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yKys7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4gPQorCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3I7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24gPSBzdGFydF9zZXFfbnVtOworCisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdGEtPnNkYXRhLCByYSwgdGlkLAorCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuLAorCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuLAorCQkJIDB4NDAsIDUwMDApOworCS8qIGFjdGl2YXRlIHRoZSB0aW1lciBmb3IgdGhlIHJlY2lwaWVudCdzIGFkZEJBIHJlc3BvbnNlICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmV4cGlyZXMgPQorCQkJCWppZmZpZXMgKyBBRERCQV9SRVNQX0lOVEVSVkFMOworCWFkZF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiYWN0aXZhdGVkIGFkZEJBIHJlc3BvbnNlIHRpbWVyIG9uIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCWdvdG8gdW5sb2NrOworCisgZXJyX2ZyZWU6CisJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOworIGVycl9yZXR1cm5fcXVldWU6CisJaWYgKHFuID49IDApIHsKKwkJLyogV2UgZmFpbGVkLCBzbyBzdGFydCBxdWV1ZSBhZ2FpbiByaWdodCBhd2F5LiAqLworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oaHcsIGh3LT5xdWV1ZXMgKyBxbiwKKwkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisJCS8qIGdpdmUgcXVldWUgYmFjayB0byBwb29sICovCisJCXNwaW5fbG9jaygmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2spOworCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbcW5dID0gLTE7CisJCXNwaW5fdW5sb2NrKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CisJfQorIGVycl91bmxvY2tfc3RhOgorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworIHVubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbik7CisKK3ZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdTggKnN0YXRlOworCisJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKKwkJCQl0aWQsIFNUQV9USURfTlVNKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoV0FSTl9PTighKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgd2FzIG5vdCByZXF1ZXN0ZWQgeWV0LCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQkqc3RhdGUpOworI2VuZGlmCisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChXQVJOX09OKCpzdGF0ZSAmIEhUX0FEREJBX0RSVl9SRUFEWV9NU0spKQorCQlnb3RvIG91dDsKKworCSpzdGF0ZSB8PSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLOworCisJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmCisJCWlmIChody0+YW1wZHVfcXVldWVzKSB7CisJCQkvKgorCQkJICogV2FrZSB1cCB0aGlzIHF1ZXVlLCB3ZSBzdG9wcGVkIGl0IGVhcmxpZXIsCisJCQkgKiB0aGlzIHdpbGwgaW4gdHVybiB3YWtlIHRoZSBlbnRpcmUgQUMuCisJCQkgKi8KKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihodywKKwkJCQlody0+cXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVt0aWRdLAorCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisJCX0KKwl9CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYik7CisKK3ZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgY29uc3QgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICpyYV90aWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoMCk7CisKKwlpZiAodW5saWtlbHkoIXNrYikpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgorCQkJICAgICAgICJkcm9wcGluZyBzdGFydCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOworCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwlyYV90aWQtPnRpZCA9IHRpZDsKKworCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfQUREQkFfTVNHOworCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOworCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUpOworCitpbnQgX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCit7CisJdTggKnN0YXRlOworCWludCByZXQ7CisKKwkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gdW5sb2NrOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJcmV0ID0gX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yKTsKKworIHVubG9jazoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgdTggKnJhLCB1MTYgdGlkLAorCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCByZXQgPSAwOworCisJaWYgKFdBUk5fT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldCA9IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKTsKKwordm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1OCB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdTggKnN0YXRlOworCisJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKKwkJCQl0aWQsIFNUQV9USURfTlVNKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlN0b3BwaW5nIFR4IEJBIHNlc3Npb24gZm9yICVwTSB0aWQgJWRcbiIsCisJICAgICAgIHJhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKKyNlbmRpZgorCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisKKwkvKiBOT1RFOiBubyBuZWVkIHRvIHVzZSBzdGEtPmxvY2sgaW4gdGhpcyBzdGF0ZSBjaGVjaywgYXMKKwkgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uIHdpbGwgbGV0IG9ubHkgb25lIHN0b3AgY2FsbCB0bworCSAqIHBhc3MgdGhyb3VnaCBwZXIgc3RhL3RpZAorCSAqLworCWlmICgoKnN0YXRlICYgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSykgPT0gMCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBjYWxsYmFjayB0byBBLU1QRFUgc3RvcFxuIik7CisjZW5kaWYKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKnN0YXRlICYgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9NU0spCisJCWllZWU4MDIxMV9zZW5kX2RlbGJhKHN0YS0+c2RhdGEsIHJhLCB0aWQsCisJCQlXTEFOX0JBQ0tfSU5JVElBVE9SLCBXTEFOX1JFQVNPTl9RU1RBX05PVF9VU0UpOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLICYmCisJICAgIGh3LT5hbXBkdV9xdWV1ZXMpIHsKKwkJLyoKKwkJICogV2FrZSB1cCB0aGlzIHF1ZXVlLCB3ZSBzdG9wcGVkIGl0IGVhcmxpZXIsCisJCSAqIHRoaXMgd2lsbCBpbiB0dXJuIHdha2UgdGhlIGVudGlyZSBBQy4KKwkJICovCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihodywKKwkJCWh3LT5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW3RpZF0sCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCX0KKworCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOworCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOworCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYik7CisKK3ZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOworCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOworCisJaWYgKHVubGlrZWx5KCFza2IpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKKwkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOworCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwlyYV90aWQtPnRpZCA9IHRpZDsKKworCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfREVMQkFfTVNHOworCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOworCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSk7CisKKwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKKwl1MTYgY2FwYWI7CisJdTE2IHRpZCwgc3RhcnRfc2VxX251bTsKKwl1OCAqc3RhdGU7CisKKwljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYik7CisJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPQorCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbikgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndyb25nIGFkZEJBIHJlc3BvbnNlIHRva2VuLCB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQorCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQl1OCBjdXJzdGF0ZSA9ICpzdGF0ZTsKKworCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOworCisJCWlmIChody0+YW1wZHVfcXVldWVzICYmICpzdGF0ZSAhPSBjdXJzdGF0ZSAmJgorCQkgICAgKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgeworCQkJLyoKKwkJCSAqIFdha2UgdXAgdGhpcyBxdWV1ZSwgd2Ugc3RvcHBlZCBpdCBlYXJsaWVyLAorCQkJICogdGhpcyB3aWxsIGluIHR1cm4gd2FrZSB0aGUgZW50aXJlIEFDLgorCQkJICovCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oaHcsCisJCQkJaHctPnF1ZXVlcyArIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSwKKwkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCQl9CisJCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOworCisJCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pIHsKKwkJCSh2b2lkKWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywKKwkJCQkJICAgICAgIElFRUU4MDIxMV9BTVBEVV9UWF9SRVNVTUUsCisJCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworCQl9CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJSZXN1bWluZyBUWCBhZ2dyZWdhdGlvbiBmb3IgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCX0gZWxzZSB7CisJCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0rKzsKKwkJX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDlkNGU0ZDguLjU4NjkzZTUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTEzMyw2ICsxMzMsOSBAQAogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJYWxnID0gQUxHX0NDTVA7CiAJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJCWFsZyA9IEFMR19BRVNfQ01BQzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjc1LDYgKzI3OCwxNyBAQAogCQllbHNlCiAJCQlwYXJhbXMuY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcGFyYW1zLmNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOworCQlzZXFbMF0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bNV07CisJCXNlcVsxXSA9IGtleS0+dS5hZXNfY21hYy50eF9wbls0XTsKKwkJc2VxWzJdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzNdOworCQlzZXFbM10gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bMl07CisJCXNlcVs0XSA9IGtleS0+dS5hZXNfY21hYy50eF9wblsxXTsKKwkJc2VxWzVdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzBdOworCQlwYXJhbXMuc2VxID0gc2VxOworCQlwYXJhbXMuc2VxX2xlbiA9IDY7CisJCWJyZWFrOwogCX0KIAogCXBhcmFtcy5rZXkgPSBrZXktPmNvbmYua2V5OwpAQCAtMzA0LDYgKzMxOCwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9jb25maWdfZGVmYXVsdF9tZ210X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgdTgga2V5X2lkeCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIGtleV9pZHgpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwpAQCAtMzExLDExICszNDEsMTUgQEAKIAlzaW5mby0+ZmlsbGVkID0gU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUgfAogCQkJU1RBVElPTl9JTkZPX1JYX0JZVEVTIHwKIAkJCVNUQVRJT05fSU5GT19UWF9CWVRFUyB8CisJCQlTVEFUSU9OX0lORk9fUlhfUEFDS0VUUyB8CisJCQlTVEFUSU9OX0lORk9fVFhfUEFDS0VUUyB8CiAJCQlTVEFUSU9OX0lORk9fVFhfQklUUkFURTsKIAogCXNpbmZvLT5pbmFjdGl2ZV90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhLT5sYXN0X3J4KTsKIAlzaW5mby0+cnhfYnl0ZXMgPSBzdGEtPnJ4X2J5dGVzOwogCXNpbmZvLT50eF9ieXRlcyA9IHN0YS0+dHhfYnl0ZXM7CisJc2luZm8tPnJ4X3BhY2tldHMgPSBzdGEtPnJ4X3BhY2tldHM7CisJc2luZm8tPnR4X3BhY2tldHMgPSBzdGEtPnR4X3BhY2tldHM7CiAKIAlpZiAoc3RhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgewogCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CkBAIC00MTcsNyArNDUxLDggQEAKIAkgKiBUaGlzIGlzIGEga2x1ZGdlLiBiZWFjb24gaW50ZXJ2YWwgc2hvdWxkIHJlYWxseSBiZSBwYXJ0CiAJICogb2YgdGhlIGJlYWNvbiBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAocGFyYW1zLT5pbnRlcnZhbCkgeworCWlmIChwYXJhbXMtPmludGVydmFsICYmIChzZGF0YS0+bG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCAhPQorCQkJCSBwYXJhbXMtPmludGVydmFsKSkgewogCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IHBhcmFtcy0+aW50ZXJ2YWw7CiAJCWVyciA9IGllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLAogCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKTsKQEAgLTQ5Myw3ICs1MjgsOCBAQAogCiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOworCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJCQkgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNTUzLDcgKzU4OSw3IEBACiAJc3luY2hyb25pemVfcmN1KCk7CiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOworCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIC8qIExheWVyIDIgVXBkYXRlIGZyYW1lICg4MDIuMiBUeXBlIDEgTExDIFhJRCBVcGRhdGUgcmVzcG9uc2UpICovCkBAIC02MzAsNiArNjY2LDEwIEBACiAJCXN0YS0+ZmxhZ3MgJj0gfldMQU5fU1RBX1dNRTsKIAkJaWYgKHBhcmFtcy0+c3RhdGlvbl9mbGFncyAmIFNUQVRJT05fRkxBR19XTUUpCiAJCQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1dNRTsKKworCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9NRlA7CisJCWlmIChwYXJhbXMtPnN0YXRpb25fZmxhZ3MgJiBTVEFUSU9OX0ZMQUdfTUZQKQorCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9NRlA7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0KIApAQCAtMTE0MSw2ICsxMTgxLDEyNSBAQAogCXJldHVybiBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCk7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X21nbXRfZXh0cmFfaWVfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSB1OCBzdWJ0eXBlLCB1OCAqaWVzLCBzaXplX3QgaWVzX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXN3aXRjaCAoc3VidHlwZSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSA+PiA0OgorCQlpZiAobG9jYWwtPm9wcy0+aHdfc2NhbikKKwkJCWJyZWFrOworCQlrZnJlZShpZm1nZC0+aWVfcHJvYmVyZXEpOworCQlpZm1nZC0+aWVfcHJvYmVyZXEgPSBpZXM7CisJCWlmbWdkLT5pZV9wcm9iZXJlcV9sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID4+IDQ6CisJCWtmcmVlKGlmbWdkLT5pZV9wcm9iZXJlc3ApOworCQlpZm1nZC0+aWVfcHJvYmVyZXNwID0gaWVzOworCQlpZm1nZC0+aWVfcHJvYmVyZXNwX2xlbiA9IGllc19sZW47CisJCXJldHVybiAwOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEggPj4gNDoKKwkJa2ZyZWUoaWZtZ2QtPmllX2F1dGgpOworCQlpZm1nZC0+aWVfYXV0aCA9IGllczsKKwkJaWZtZ2QtPmllX2F1dGhfbGVuID0gaWVzX2xlbjsKKwkJcmV0dXJuIDA7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRID4+IDQ6CisJCWtmcmVlKGlmbWdkLT5pZV9hc3NvY3JlcSk7CisJCWlmbWdkLT5pZV9hc3NvY3JlcSA9IGllczsKKwkJaWZtZ2QtPmllX2Fzc29jcmVxX2xlbiA9IGllc19sZW47CisJCXJldHVybiAwOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRID4+IDQ6CisJCWtmcmVlKGlmbWdkLT5pZV9yZWFzc29jcmVxKTsKKwkJaWZtZ2QtPmllX3JlYXNzb2NyZXEgPSBpZXM7CisJCWlmbWdkLT5pZV9yZWFzc29jcmVxX2xlbiA9IGllc19sZW47CisJCXJldHVybiAwOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSCA+PiA0OgorCQlrZnJlZShpZm1nZC0+aWVfZGVhdXRoKTsKKwkJaWZtZ2QtPmllX2RlYXV0aCA9IGllczsKKwkJaWZtZ2QtPmllX2RlYXV0aF9sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyA+PiA0OgorCQlrZnJlZShpZm1nZC0+aWVfZGlzYXNzb2MpOworCQlpZm1nZC0+aWVfZGlzYXNzb2MgPSBpZXM7CisJCWlmbWdkLT5pZV9kaXNhc3NvY19sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tZ210X2V4dHJhX2llKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBtZ210X2V4dHJhX2llX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXU4ICppZXM7CisJc2l6ZV90IGllc19sZW47CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKHBhcmFtcy0+aWVzKSB7CisJCWllcyA9IGttZW1kdXAocGFyYW1zLT5pZXMsIHBhcmFtcy0+aWVzX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmIChpZXMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZXNfbGVuID0gcGFyYW1zLT5pZXNfbGVuOworCX0gZWxzZSB7CisJCWllcyA9IE5VTEw7CisJCWllc19sZW4gPSAwOworCX0KKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlyZXQgPSBzZXRfbWdtdF9leHRyYV9pZV9zdGEoc2RhdGEsIHBhcmFtcy0+c3VidHlwZSwKKwkJCQkJICAgIGllcywgaWVzX2xlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0KQorCQlrZnJlZShpZXMpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfc3VzcGVuZCh3aXBoeV9wcml2KHdpcGh5KSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXJldHVybiBfX2llZWU4MDIxMV9yZXN1bWUod2lwaHlfcHJpdih3aXBoeSkpOworfQorI2Vsc2UKKyNkZWZpbmUgaWVlZTgwMjExX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpZWVlODAyMTFfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIHJlcSk7Cit9CisKIHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHsKIAkuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsCiAJLmRlbF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfZGVsX2lmYWNlLApAQCAtMTE0OSw2ICsxMzA4LDcgQEAKIAkuZGVsX2tleSA9IGllZWU4MDIxMV9kZWxfa2V5LAogCS5nZXRfa2V5ID0gaWVlZTgwMjExX2dldF9rZXksCiAJLnNldF9kZWZhdWx0X2tleSA9IGllZWU4MDIxMV9jb25maWdfZGVmYXVsdF9rZXksCisJLnNldF9kZWZhdWx0X21nbXRfa2V5ID0gaWVlZTgwMjExX2NvbmZpZ19kZWZhdWx0X21nbXRfa2V5LAogCS5hZGRfYmVhY29uID0gaWVlZTgwMjExX2FkZF9iZWFjb24sCiAJLnNldF9iZWFjb24gPSBpZWVlODAyMTFfc2V0X2JlYWNvbiwKIAkuZGVsX2JlYWNvbiA9IGllZWU4MDIxMV9kZWxfYmVhY29uLApAQCAtMTE2OSw0ICsxMzI5LDggQEAKIAkuY2hhbmdlX2JzcyA9IGllZWU4MDIxMV9jaGFuZ2VfYnNzLAogCS5zZXRfdHhxX3BhcmFtcyA9IGllZWU4MDIxMV9zZXRfdHhxX3BhcmFtcywKIAkuc2V0X2NoYW5uZWwgPSBpZWVlODAyMTFfc2V0X2NoYW5uZWwsCisJLnNldF9tZ210X2V4dHJhX2llID0gaWVlZTgwMjExX3NldF9tZ210X2V4dHJhX2llLAorCS5zdXNwZW5kID0gaWVlZTgwMjExX3N1c3BlbmQsCisJLnJlc3VtZSA9IGllZWU4MDIxMV9yZXN1bWUsCisJLnNjYW4gPSBpZWVlODAyMTFfc2NhbiwKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwppbmRleCAyNjk3YTJmLi5lMzdmNTU3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTU3LDExICs1Nyw2MiBAQAogCQkgICAgICBsb2NhbC0+aHcuY29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudCk7CiBERUJVR0ZTX1JFQURPTkxZX0ZJTEUodG90YWxfcHNfYnVmZmVyZWQsIDIwLCAiJWQiLAogCQkgICAgICBsb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQpOwotREVCVUdGU19SRUFET05MWV9GSUxFKHdlcF9pdiwgMjAsICIlIzA2eCIsCitERUJVR0ZTX1JFQURPTkxZX0ZJTEUod2VwX2l2LCAyMCwgIiUjMDh4IiwKIAkJICAgICAgbG9jYWwtPndlcF9pdiAmIDB4ZmZmZmZmKTsKIERFQlVHRlNfUkVBRE9OTFlfRklMRShyYXRlX2N0cmxfYWxnLCAxMDAsICIlcyIsCiAJCSAgICAgIGxvY2FsLT5yYXRlX2N0cmwgPyBsb2NhbC0+cmF0ZV9jdHJsLT5vcHMtPm5hbWUgOiAiPHVuc2V0PiIpOwogCitzdGF0aWMgc3NpemVfdCB0c2ZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1NjQgdHNmID0gMDsKKwljaGFyIGJ1ZlsxMDBdOworCisJaWYgKGxvY2FsLT5vcHMtPmdldF90c2YpCisJCXRzZiA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwMTZsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRzZik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDE5KTsKK30KKworc3RhdGljIHNzaXplX3QgdHNmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHNmOworCWNoYXIgYnVmWzEwMF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCisJaWYgKHN0cm5jbXAoYnVmLCAicmVzZXQiLCA1KSA9PSAwKSB7CisJCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKKwkJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRlYnVnZnMgcmVzZXQgVFNGXG4iLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCQl9CisJfSBlbHNlIHsKKwkJdHNmID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKKwkJaWYgKGxvY2FsLT5vcHMtPnNldF90c2YpIHsKKwkJCWxvY2FsLT5vcHMtPnNldF90c2YobG9jYWxfdG9faHcobG9jYWwpLCB0c2YpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRlYnVnZnMgc2V0IFRTRiB0byAlIzAxOGxseFxuIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCB0c2YpOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0c2Zfb3BzID0geworCS5yZWFkID0gdHNmX3JlYWQsCisJLndyaXRlID0gdHNmX3dyaXRlLAorCS5vcGVuID0gbWFjODAyMTFfb3Blbl9maWxlX2dlbmVyaWMKK307CisKIC8qIHN0YXRpc3RpY3Mgc3R1ZmYgKi8KIAogI2RlZmluZSBERUJVR0ZTX1NUQVRTX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJCVwKQEAgLTEzNiw4ICsxODcsNiBAQAogCQkgICBsb2NhbC0+ZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOwogREVCVUdGU19TVEFUU19GSUxFKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50LCAyMCwgIiV1IiwKIAkJICAgbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKLURFQlVHRlNfU1RBVFNfRklMRSh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5kb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiBERUJVR0ZTX1NUQVRTX0ZJTEUodHhfaGFuZGxlcnNfZHJvcCwgMjAsICIldSIsCiAJCSAgIGxvY2FsLT50eF9oYW5kbGVyc19kcm9wKTsKQEAgLTIwNCw2ICsyNTMsNyBAQAogCURFQlVHRlNfQUREKGxvbmdfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfQUREKHRvdGFsX3BzX2J1ZmZlcmVkKTsKIAlERUJVR0ZTX0FERCh3ZXBfaXYpOworCURFQlVHRlNfQUREKHRzZik7CiAKIAlzdGF0c2QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXRpc3RpY3MiLCBwaHlkKTsKIAlsb2NhbC0+ZGVidWdmcy5zdGF0aXN0aWNzID0gc3RhdHNkOwpAQCAtMjIxLDcgKzI3MSw2IEBACiAJREVCVUdGU19TVEFUU19BREQocmVjZWl2ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfQUREKG11bHRpY2FzdF9yZWNlaXZlZF9mcmFtZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19BREQodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKHdlcF91bmRlY3J5cHRhYmxlX2NvdW50KTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wKTsKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19xdWV1ZWQpOwpAQCAtMjU4LDYgKzMwNyw3IEBACiAJREVCVUdGU19ERUwobG9uZ19yZXRyeV9saW1pdCk7CiAJREVCVUdGU19ERUwodG90YWxfcHNfYnVmZmVyZWQpOwogCURFQlVHRlNfREVMKHdlcF9pdik7CisJREVCVUdGU19ERUwodHNmKTsKIAogCURFQlVHRlNfU1RBVFNfREVMKHRyYW5zbWl0dGVkX2ZyYWdtZW50X2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTChtdWx0aWNhc3RfdHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwpAQCAtMjY4LDcgKzMxOCw2IEBACiAJREVCVUdGU19TVEFUU19ERUwocmVjZWl2ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKG11bHRpY2FzdF9yZWNlaXZlZF9mcmFtZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwotCURFQlVHRlNfU1RBVFNfREVMKHdlcF91bmRlY3J5cHRhYmxlX2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTChudW1fc2NhbnMpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUwogCURFQlVHRlNfU1RBVFNfREVMKHR4X2hhbmRsZXJzX2Ryb3ApOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwppbmRleCA2NDI0YWM1Li45OWM3NTI1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwpAQCAtNzYsNiArNzYsOSBAQAogCWNhc2UgQUxHX0NDTVA6CiAJCWFsZyA9ICJDQ01QXG4iOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJYWxnID0gIkFFUy0xMjgtQ01BQ1xuIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA1LDYgKzEwOCwxMiBAQAogCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKIAkJCQl0cG5bMF0sIHRwblsxXSwgdHBuWzJdLCB0cG5bM10sIHRwbls0XSwgdHBuWzVdKTsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXRwbiA9IGtleS0+dS5hZXNfY21hYy50eF9wbjsKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkJdHBuWzBdLCB0cG5bMV0sIHRwblsyXSwgdHBuWzNdLCB0cG5bNF0sCisJCQkJdHBuWzVdKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQyLDYgKzE1MSwxNCBAQAogCQl9CiAJCWxlbiA9IHAgLSBidWY7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlycG4gPSBrZXktPnUuYWVzX2NtYWMucnhfcG47CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAorCQkJICAgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkgICAgICAgcnBuWzBdLCBycG5bMV0sIHJwblsyXSwKKwkJCSAgICAgICBycG5bM10sIHJwbls0XSwgcnBuWzVdKTsKKwkJbGVuID0gcCAtIGJ1ZjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTU2LDEzICsxNzMsNDAgQEAKIAljaGFyIGJ1ZlsyMF07CiAJaW50IGxlbjsKIAotCWlmIChrZXktPmNvbmYuYWxnICE9IEFMR19DQ01QKQorCXN3aXRjaCAoa2V5LT5jb25mLmFsZykgeworCWNhc2UgQUxHX0NDTVA6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsIGtleS0+dS5jY21wLnJlcGxheXMpOworCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwKKwkJCQlrZXktPnUuYWVzX2NtYWMucmVwbGF5cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAwOwotCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsIGtleS0+dS5jY21wLnJlcGxheXMpOworCX0KIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIEtFWV9PUFMocmVwbGF5cyk7CiAKK3N0YXRpYyBzc2l6ZV90IGtleV9pY3ZlcnJvcnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzIwXTsKKwlpbnQgbGVuOworCisJc3dpdGNoIChrZXktPmNvbmYuYWxnKSB7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsCisJCQkJa2V5LT51LmFlc19jbWFjLmljdmVycm9ycyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KK0tFWV9PUFMoaWN2ZXJyb3JzKTsKKwogc3RhdGljIHNzaXplX3Qga2V5X2tleV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTIyMiw2ICsyNjYsNyBAQAogCURFQlVHRlNfQUREKHR4X3NwZWMpOwogCURFQlVHRlNfQUREKHJ4X3NwZWMpOwogCURFQlVHRlNfQUREKHJlcGxheXMpOworCURFQlVHRlNfQUREKGljdmVycm9ycyk7CiAJREVCVUdGU19BREQoa2V5KTsKIAlERUJVR0ZTX0FERChpZmluZGV4KTsKIH07CkBAIC0yNDMsNiArMjg4LDcgQEAKIAlERUJVR0ZTX0RFTCh0eF9zcGVjKTsKIAlERUJVR0ZTX0RFTChyeF9zcGVjKTsKIAlERUJVR0ZTX0RFTChyZXBsYXlzKTsKKwlERUJVR0ZTX0RFTChpY3ZlcnJvcnMpOwogCURFQlVHRlNfREVMKGtleSk7CiAJREVCVUdGU19ERUwoaWZpbmRleCk7CiAKQEAgLTI4MCw2ICszMjYsMzUgQEAKIAlzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9rZXkgPSBOVUxMOwogfQogCit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCWNoYXIgYnVmWzUwXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OworCisJaWYgKCFzZGF0YS0+ZGVidWdmc2RpcikKKwkJcmV0dXJuOworCisJLyogdGhpcyBpcyBydW5uaW5nIHVuZGVyIHRoZSBrZXkgbG9jayAqLworCisJa2V5ID0gc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXk7CisJaWYgKGtleSkgeworCQlzcHJpbnRmKGJ1ZiwgIi4uL2tleXMvJWQiLCBrZXktPmRlYnVnZnMuY250KTsKKwkJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfbWdtdF9rZXkgPQorCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygiZGVmYXVsdF9tZ210X2tleSIsCisJCQkJCSAgICAgICBzZGF0YS0+ZGVidWdmc2RpciwgYnVmKTsKKwl9IGVsc2UKKwkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoc2RhdGEpOworfQorCit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCWlmICghc2RhdGEpCisJCXJldHVybjsKKworCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5jb21tb25fZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5KTsKKwlzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9tZ210X2tleSA9IE5VTEw7Cit9CisKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9kZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgKaW5kZXggYjFhMzc1NC4uNTQ3MTdiNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgKQEAgLTYsNiArNiwxMCBAQAogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9kZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiAjZWxzZQpAQCAtMTksNiArMjMsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2RlZmF1bHQoCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7fQorc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQore30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3t9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9kZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHt9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCmluZGV4IGM1NDIxOTMuLmUzNDIwMzIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCkBAIC05NCwzMSArOTQsMzEgQEAKIElFRUU4MDIxMV9JRl9GSUxFKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBERUMpOwogSUVFRTgwMjExX0lGX0ZJTEUobWF4X3JhdGVjdHJsX3JhdGVpZHgsIG1heF9yYXRlY3RybF9yYXRlaWR4LCBERUMpOwogCi0vKiBTVEEvSUJTUyBhdHRyaWJ1dGVzICovCi1JRUVFODAyMTFfSUZfRklMRShzdGF0ZSwgdS5zdGEuc3RhdGUsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShic3NpZCwgdS5zdGEuYnNzaWQsIE1BQyk7Ci1JRUVFODAyMTFfSUZfRklMRShwcmV2X2Jzc2lkLCB1LnN0YS5wcmV2X2Jzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoc3NpZF9sZW4sIHUuc3RhLnNzaWRfbGVuLCBTSVpFKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFpZCwgdS5zdGEuYWlkLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXBfY2FwYWIsIHUuc3RhLmFwX2NhcGFiLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoY2FwYWIsIHUuc3RhLmNhcGFiLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoZXh0cmFfaWVfbGVuLCB1LnN0YS5leHRyYV9pZV9sZW4sIFNJWkUpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmllcywgdS5zdGEuYXV0aF90cmllcywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFzc29jX3RyaWVzLCB1LnN0YS5hc3NvY190cmllcywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxncywgdS5zdGEuYXV0aF9hbGdzLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF9hbGcsIHUuc3RhLmF1dGhfYWxnLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmFuc2FjdGlvbiwgdS5zdGEuYXV0aF90cmFuc2FjdGlvbiwgREVDKTsKKy8qIFNUQSBhdHRyaWJ1dGVzICovCitJRUVFODAyMTFfSUZfRklMRShzdGF0ZSwgdS5tZ2Quc3RhdGUsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShic3NpZCwgdS5tZ2QuYnNzaWQsIE1BQyk7CitJRUVFODAyMTFfSUZfRklMRShwcmV2X2Jzc2lkLCB1Lm1nZC5wcmV2X2Jzc2lkLCBNQUMpOworSUVFRTgwMjExX0lGX0ZJTEUoc3NpZF9sZW4sIHUubWdkLnNzaWRfbGVuLCBTSVpFKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFpZCwgdS5tZ2QuYWlkLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYXBfY2FwYWIsIHUubWdkLmFwX2NhcGFiLCBIRVgpOworSUVFRTgwMjExX0lGX0ZJTEUoY2FwYWIsIHUubWdkLmNhcGFiLCBIRVgpOworSUVFRTgwMjExX0lGX0ZJTEUoZXh0cmFfaWVfbGVuLCB1Lm1nZC5leHRyYV9pZV9sZW4sIFNJWkUpOworSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmllcywgdS5tZ2QuYXV0aF90cmllcywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFzc29jX3RyaWVzLCB1Lm1nZC5hc3NvY190cmllcywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxncywgdS5tZ2QuYXV0aF9hbGdzLCBIRVgpOworSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF9hbGcsIHUubWdkLmF1dGhfYWxnLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmFuc2FjdGlvbiwgdS5tZ2QuYXV0aF90cmFuc2FjdGlvbiwgREVDKTsKIAogc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX2ZtdF9mbGFncygKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogewogCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIlcyVzJXMlcyVzJXMlc1xuIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgPyAiU1NJRFxuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgPyAiQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQgPyAicHJldiBCU1NJRFxuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEID8gIkFVVEhcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCA/ICJBU1NPQ1xuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMID8gIlBST0JFUkVRIFBPTExcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgPyAiU1NJRFxuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgPyAiQlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQgPyAicHJldiBCU1NJRFxuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEID8gIkFVVEhcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCA/ICJBU1NPQ1xuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMID8gIlBST0JFUkVRIFBPTExcbiIgOiAiIiwKIAkJIHNkYXRhLT52aWYuYnNzX2NvbmYudXNlX2N0c19wcm90ID8gIkNUUyBwcm90XG4iIDogIiIpOwogfQogX19JRUVFODAyMTFfSUZfRklMRShmbGFncyk7CkBAIC0yODMsOSArMjgzLDExIEBACiAjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWFkZF9zdGFfZmlsZXMoc2RhdGEpOwogCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkvKiBYWFggKi8KKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJYWRkX2FwX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CkBAIC00MTgsOSArNDIwLDExIEBACiAjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWRlbF9zdGFfZmlsZXMoc2RhdGEpOwogCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkvKiBYWFggKi8KKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJZGVsX2FwX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCmluZGV4IGEyZmJlMDEuLjkwMjMwYzcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCkBAIC02NywxNCArNjcsMTUgQEAKIAljaGFyIGJ1ZlsxMDBdOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXUzMiBzdGFmbGFncyA9IGdldF9zdGFfZmxhZ3Moc3RhKTsKLQlpbnQgcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzJXMlcyVzJXMlcyIsCisJaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcyVzJXMlcyVzJXMlcyIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfQVVUSCA/ICJBVVRIXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfQVNTT0MgPyAiQVNTT0NcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9QUyA/ICJQU1xuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQgPyAiQVVUSE9SSVpFRFxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX1NIT1JUX1BSRUFNQkxFID8gIlNIT1JUIFBSRUFNQkxFXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfV01FID8gIldNRVxuIiA6ICIiLAotCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dEUyA/ICJXRFNcbiIgOiAiIik7CisJCXN0YWZsYWdzICYgV0xBTl9TVEFfV0RTID8gIldEU1xuIiA6ICIiLAorCQlzdGFmbGFncyAmIFdMQU5fU1RBX01GUCA/ICJNRlBcbiIgOiAiIik7CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CiB9CiBTVEFfT1BTKGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggYzVjMGM1Mi4uNGUzYzcyZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTE3LDggKzE3LDcgQEAKICNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgotI2luY2x1ZGUgInN0YV9pbmZvLmgiCi0jaW5jbHVkZSAid21lLmgiCisjaW5jbHVkZSAicmF0ZS5oIgogCiB2b2lkIGllZWU4MDIxMV9odF9jYXBfaWVfdG9fc3RhX2h0X2NhcChzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcF9pZSwKQEAgLTk1LDcgKzk0LDkgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19odF9jb25mIGh0OworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUzMiBjaGFuZ2VkID0gMDsKIAlib29sIGVuYWJsZV9odCA9IHRydWUsIGh0X2NoYW5nZWQ7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7CkBAIC0xMzAsMTQgKzEzMSwyNSBAQAogCQl9CiAJfQogCi0JaHRfY2hhbmdlZCA9IGxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgIT0gZW5hYmxlX2h0IHx8Ci0JCSAgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5ody5jb25mLmh0LmNoYW5uZWxfdHlwZTsKKwlodF9jaGFuZ2VkID0gY29uZl9pc19odCgmbG9jYWwtPmh3LmNvbmYpICE9IGVuYWJsZV9odCB8fAorCQkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGU7CiAKIAlsb2NhbC0+b3Blcl9jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7Ci0JbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IGVuYWJsZV9odDsKIAotCWlmIChodF9jaGFuZ2VkKQotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSFQpOworCWlmIChodF9jaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgLyogY2hhbm5lbF90eXBlIGNoYW5nZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkICovCisJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOworCisJCXJjdV9yZWFkX2xvY2soKTsKKworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CisJCWlmIChzdGEpCisJCQlyYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUobG9jYWwsIHNiYW5kLCBzdGEsCisJCQkJCQkgSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCisgICAgICAgIH0KIAogCS8qIGRpc2FibGUgSFQgKi8KIAlpZiAoIWVuYWJsZV9odCkKQEAgLTE1NCwxMDggKzE2NiwyMiBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAotCQkJCQkgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhcnRfc2VxX251bSwKLQkJCQkJIHUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCit2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTE2IGNhcGFiOworCWludCBpOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgotCQkJCSJmb3IgYWRkYmEgcmVxdWVzdCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKKwkJX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgaSwgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJCV9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEsIGksIFdMQU5fQkFDS19SRUNJUElFTlQsCisJCQkJCSAgICAgICBXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1MpOwogCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7Ci0KLQlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcSkpOwotCi0JbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVE7Ci0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0JY2FwYWIgPSAodTE2KSgxIDw8IDEpOwkJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCi0JY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCi0JY2FwYWIgfD0gKHUxNikoYWdnX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ2VyZ2F0aW9uICovCi0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsKLQotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtID0KLQkJCQkJY3B1X3RvX2xlMTYoc3RhcnRfc2VxX251bSA8PCA0KTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkYSwgdTE2IHRpZCwKLQkJCQkgICAgICB1OCBkaWFsb2dfdG9rZW4sIHUxNiBzdGF0dXMsIHUxNiBwb2xpY3ksCi0JCQkJICAgICAgdTE2IGJ1Zl9zaXplLCB1MTYgdGltZW91dCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBjYXBhYjsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgotCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7Ci0KLQlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKTsKLQltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfQkFDSzsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0KLQljYXBhYiA9ICh1MTYpKHBvbGljeSA8PCAxKTsJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCi0JY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCi0JY2FwYWIgfD0gKHUxNikoYnVmX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ3JlZ2F0aW9uICovCi0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCi0JCQkJIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSkKK3ZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKKwkJCSAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbl9jb2RlKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTE2IHBhcmFtczsKQEAgLTI3MywxMCArMTk5LDEyIEBACiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKIAltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKIAkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CiAKQEAgLTI5MCw3NzAgKzIxOCw3IEBACiAJbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5wYXJhbXMgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwogCW1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihyZWFzb25fY29kZSk7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9iYXIgKmJhcjsKLQl1MTYgYmFyX2NvbnRyb2wgPSAwOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKmJhcikgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKLQkJCSJiYXIgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQliYXIgPSAoc3RydWN0IGllZWU4MDIxMV9iYXIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpiYXIpKTsKLQltZW1zZXQoYmFyLCAwLCBzaXplb2YoKmJhcikpOwotCWJhci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfAotCQkJCQkgSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKTsKLQltZW1jcHkoYmFyLT5yYSwgcmEsIEVUSF9BTEVOKTsKLQltZW1jcHkoYmFyLT50YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9BQ0tfUE9MSUNZX05PUk1BTDsKLQliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9DQk1USURfQ09NUFJFU1NFRF9CQTsKLQliYXJfY29udHJvbCB8PSAodTE2KSh0aWQgPDwgMTIpOwotCWJhci0+Y29udHJvbCA9IGNwdV90b19sZTE2KGJhcl9jb250cm9sKTsKLQliYXItPnN0YXJ0X3NlcV9udW0gPSBjcHVfdG9fbGUxNihzc24pOwotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLAotCQkJCQl1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgcmV0LCBpOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjaGVjayBpZiBUSUQgaXMgaW4gb3BlcmF0aW9uYWwgc3RhdGUgKi8KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXQotCQkJCSE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0KLQkJSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8Ci0JCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCi0JICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KLQlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiUnggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAotCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkhXIHByb2JsZW0gLSBjYW4gbm90IHN0b3AgcnggIgotCQkJCSJhZ2dyZWdhdGlvbiBmb3IgdGlkICVkXG4iLCB0aWQpOwotCi0JLyogc2h1dGRvd24gdGltZXIgaGFzIG5vdCBleHBpcmVkICovCi0JaWYgKGluaXRpYXRvciAhPSBXTEFOX0JBQ0tfVElNRVIpCi0JCWRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIpOwotCi0JLyogY2hlY2sgaWYgdGhpcyBpcyBhIHNlbGYgZ2VuZXJhdGVkIGFnZ3JlZ2F0aW9uIGhhbHQgKi8KLQlpZiAoaW5pdGlhdG9yID09IFdMQU5fQkFDS19SRUNJUElFTlQgfHwgaW5pdGlhdG9yID09IFdMQU5fQkFDS19USU1FUikKLQkJaWVlZTgwMjExX3NlbmRfZGVsYmEoc2RhdGEsIHJhLCB0aWQsIDAsIHJlYXNvbik7Ci0KLQkvKiBmcmVlIHRoZSByZW9yZGVyaW5nIGJ1ZmZlciAqLwotCWZvciAoaSA9IDA7IGkgPCBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPmJ1Zl9zaXplOyBpKyspIHsKLQkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pIHsKLQkJCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgKi8KLQkJCWRldl9rZnJlZV9za2Ioc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSk7Ci0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnN0b3JlZF9tcGR1X251bS0tOwotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSA9IE5VTEw7Ci0JCX0KLQl9Ci0JLyogZnJlZSByZXNvdXJjZXMgKi8KLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmKTsKLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9IE5VTEw7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotCi0vKgotICogQWZ0ZXIgc2VuZGluZyBhZGQgQmxvY2sgQWNrIHJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIgdW50aWwKLSAqIGFkZCBCbG9jayBBY2sgcmVzcG9uc2Ugd2lsbCBhcnJpdmUgZnJvbSB0aGUgcmVjaXBpZW50LgotICogSWYgdGhpcyB0aW1lciBleHBpcmVzIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQgd2lsbCBiZSBleGVjdXRlZC4KLSAqLwotc3RhdGljIHZvaWQgc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKLQkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIGJvdGggc3RhX2luZm8gYW5kIFRJRCBhcmUgbmVlZGVkLCBzbyBpbml0Ci0JICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKLQkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCi0JdTE2IHRpZCA9ICoodTggKilkYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqdGVtcF9zdGEgPSBjb250YWluZXJfb2YoKHZvaWQgKilkYXRhLAotCQlzdHJ1Y3Qgc3RhX2luZm8sIHRpbWVyX3RvX3RpZFt0aWRdKTsKLQotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gdGVtcF9zdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1OCAqc3RhdGU7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHRlbXBfc3RhLT5zdGEuYWRkcik7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JLyogY2hlY2sgaWYgdGhlIFRJRCB3YWl0cyBmb3IgYWRkQkEgcmVzcG9uc2UgKi8KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAidGltZXIgZXhwaXJlZCBvbiB0aWQgJWQgYnV0IHdlIGFyZSBub3QgIgotCQkJCSJleHBlY3RpbmcgYWRkQkEgcmVzcG9uc2UgdGhlcmUiLCB0aWQpOwotI2VuZGlmCi0JCWdvdG8gdGltZXJfZXhwaXJlZF9leGl0OwotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSByZXNwb25zZSB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZgotCi0JLyogZ28gdGhyb3VnaCB0aGUgc3RhdGUgY2hlY2sgaW4gc3RvcF9CQV9zZXNzaW9uICovCi0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oaHcsIHRlbXBfc3RhLT5zdGEuYWRkciwgdGlkLAotCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7Ci0KLXRpbWVyX2V4cGlyZWRfZXhpdDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKLQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbigmbG9jYWwtPmh3LCBhZGRyLCBpLAotCQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOwotCQlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzZGF0YSwgYWRkciwgaSwKLQkJCQkJCSBXTEFOX0JBQ0tfUkVDSVBJRU5ULAotCQkJCQkJIFdMQU5fUkVBU09OX1FTVEFfTEVBVkVfUUJTUyk7Ci0JfQotfQotCi1pbnQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQl1MTYgc3RhcnRfc2VxX251bTsKLQl1OCAqc3RhdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoKHRpZCA+PSBTVEFfVElEX05VTSkgfHwgIShody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJPcGVuIEJBIHNlc3Npb24gcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCB0aGUgc3RhdGlvblxuIik7Ci0jZW5kaWYKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBleGl0OwotCX0KLQotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCS8qIHdlIGhhdmUgdHJpZWQgdG9vIG1hbnkgdGltZXMsIHJlY2VpdmVyIGRvZXMgbm90IHdhbnQgQS1NUERVICovCi0JaWYgKHN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPiBIVF9BR0dfTUFYX1JFVFJJRVMpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIGVycl91bmxvY2tfc3RhOwotCX0KLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQkvKiBjaGVjayBpZiB0aGUgVElEIGlzIG5vdCBpbiBhZ2dyZWdhdGlvbiBmbG93IGFscmVhZHkgKi8KLQlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHNlc3Npb24gaXMgbm90ICIKLQkJCQkgImlkbGUgb24gdGlkICV1XG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIGVycl91bmxvY2tfc3RhOwotCX0KLQotCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFR4IGFnZ3JlZ2F0aW9uICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0KLQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfdHgpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSB0eCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCi0JCQkJCXRpZCk7Ci0jZW5kaWYKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0JLyogVHggdGltZXIgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZnVuY3Rpb24gPQotCQkJc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZDsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZGF0YSA9Ci0JCQkodW5zaWduZWQgbG9uZykmc3RhLT50aW1lcl90b190aWRbdGlkXTsKLQlpbml0X3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOwotCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKLQkJLyogY3JlYXRlIGEgbmV3IHF1ZXVlIGZvciB0aGlzIGFnZ3JlZ2F0aW9uICovCi0JCXJldCA9IGllZWU4MDIxMV9odF9hZ2dfcXVldWVfYWRkKGxvY2FsLCBzdGEsIHRpZCk7Ci0KLQkJLyogY2FzZSBubyBxdWV1ZSBpcyBhdmFpbGFibGUgdG8gYWdncmVnYXRpb24KLQkJICogZG9uJ3Qgc3dpdGNoIHRvIGFnZ3JlZ2F0aW9uICovCi0JCWlmIChyZXQpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtICIKLQkJCSAgICAgICAicXVldWUgdW5hdmFpbGFibGUgZm9yIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJCWdvdG8gZXJyX3VubG9ja19xdWV1ZTsKLQkJfQotCX0KLQlzZGF0YSA9IHN0YS0+c2RhdGE7Ci0KLQkvKiBPaywgdGhlIEFkZGJhIGZyYW1lIGhhc24ndCBiZWVuIHNlbnQgeWV0LCBidXQgaWYgdGhlIGRyaXZlciBjYWxscyB0aGUKLQkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KLQkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKLQotCS8qIFRoaXMgaXMgc2xpZ2h0bHkgcmFjeSBiZWNhdXNlIHRoZSBxdWV1ZSBpc24ndCBzdG9wcGVkICovCi0Jc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCi0JCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOwotCi0JaWYgKHJldCkgewotCQkvKiBObyBuZWVkIHRvIHJlcXVldWUgdGhlIHBhY2tldHMgaW4gdGhlIGFnZyBxdWV1ZSwgc2luY2Ugd2UKLQkJICogaGVsZCB0aGUgdHggbG9jazogbm8gcGFja2V0IGNvdWxkIGJlIGVucXVldWVkIHRvIHRoZSBuZXdseQotCQkgKiBhbGxvY2F0ZWQgcXVldWUgKi8KLQkJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShsb2NhbCwgc3RhLCB0aWQsIDApOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBIVyB1bmF2YWlsYWJsZSBmb3IiCi0JCQkJCSIgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLQkJZ290byBlcnJfdW5sb2NrX3F1ZXVlOwotCX0KLQotCS8qIFdpbGwgcHV0IGFsbCB0aGUgcGFja2V0cyBpbiB0aGUgbmV3IFNXIHF1ZXVlICovCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBpZWVlODAyXzFkX3RvX2FjW3RpZF0pOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JLyogc2VuZCBhbiBhZGRCQSByZXF1ZXN0ICovCi0Jc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IrKzsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiA9Ci0JCQlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiA9IHN0YXJ0X3NlcV9udW07Ci0KLQotCWllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RhLT5zZGF0YSwgcmEsIHRpZCwKLQkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiwKLQkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiwKLQkJCSAweDQwLCA1MDAwKTsKLQkvKiBhY3RpdmF0ZSB0aGUgdGltZXIgZm9yIHRoZSByZWNpcGllbnQncyBhZGRCQSByZXNwb25zZSAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5leHBpcmVzID0KLQkJCQlqaWZmaWVzICsgQUREQkFfUkVTUF9JTlRFUlZBTDsKLQlhZGRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgImFjdGl2YXRlZCBhZGRCQSByZXNwb25zZSB0aW1lciBvbiB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYKLQlnb3RvIGV4aXQ7Ci0KLWVycl91bmxvY2tfcXVldWU6Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOwotCXJldCA9IC1FQlVTWTsKLWVycl91bmxvY2tfc3RhOgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotZXhpdDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbik7Ci0KLWludCBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSB1OCAqcmEsIHUxNiB0aWQsCi0JCQkJIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCWludCByZXQgPSAwOwotCi0JaWYgKHRpZCA+PSBTVEFfVElEX05VTSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgaW4gYWdncmVnYXRpb24gKi8KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBzdG9wX0JBX2V4aXQ7Ci0JfQotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlR4IEJBIHNlc3Npb24gc3RvcCByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCi0JICAgICAgIHJhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCi0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8Ci0JCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7Ci0KLQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQotCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QLAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpOwotCi0JLyogY2FzZSBIVyBkZW5pZWQgZ29pbmcgYmFjayB0byBsZWdhY3kgKi8KLQlpZiAocmV0KSB7Ci0JCVdBUk5fT04ocmV0ICE9IC1FQlVTWSk7Ci0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQkJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQkJZ290byBzdG9wX0JBX2V4aXQ7Ci0JfQotCi1zdG9wX0JBX2V4aXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbik7Ci0KLXZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCi0JaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKLQkJCQl0aWQsIFNUQV9USURfTlVNKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgd2FzIG5vdCByZXF1ZXN0ZWQgeWV0LCBzdGF0ZSBpcyAlZFxuIiwKLQkJCQkqc3RhdGUpOwotI2VuZGlmCi0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCVdBUk5fT05fT05DRSgqc3RhdGUgJiBIVF9BRERCQV9EUlZfUkVBRFlfTVNLKTsKLQotCSpzdGF0ZSB8PSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLOwotCi0JaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aWQgJWQgXG4iLCB0aWQpOwotI2VuZGlmCi0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCXJjdV9yZWFkX3VubG9jaygpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IpOwotCi12b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHU4IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1OCAqc3RhdGU7Ci0JaW50IGFnZ19xdWV1ZTsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCi0JCQkJdGlkLCBTVEFfVElEX05VTSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJTdG9wcGluZyBUeCBCQSBzZXNzaW9uIGZvciAlcE0gdGlkICVkXG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7Ci0jZW5kaWYKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCi0JLyogTk9URTogbm8gbmVlZCB0byB1c2Ugc3RhLT5sb2NrIGluIHRoaXMgc3RhdGUgY2hlY2ssIGFzCi0JICogaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbiB3aWxsIGxldCBvbmx5IG9uZSBzdG9wIGNhbGwgdG8KLQkgKiBwYXNzIHRocm91Z2ggcGVyIHN0YS90aWQKLQkgKi8KLQlpZiAoKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0spID09IDApIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgY2FsbGJhY2sgdG8gQS1NUERVIHN0b3BcbiIpOwotI2VuZGlmCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLKQotCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCByYSwgdGlkLAotCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwgV0xBTl9SRUFTT05fUVNUQV9OT1RfVVNFKTsKLQotCWlmIChody0+YW1wZHVfcXVldWVzKSB7Ci0JCWFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQkJaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUobG9jYWwsIHN0YSwgdGlkLCAxKTsKLQotCQkvKiBXZSBqdXN0IHJlcXVldWVkIHRoZSBhbGwgdGhlIGZyYW1lcyB0aGF0IHdlcmUgaW4gdGhlCi0JCSAqIHJlbW92ZWQgcXVldWUsIGFuZCBzaW5jZSB3ZSBtaWdodCBtaXNzIGEgc29mdGlycSB3ZSBkbwotCQkgKiBuZXRpZl9zY2hlZHVsZV9xdWV1ZS4gIGllZWU4MDIxMV93YWtlX3F1ZXVlIGlzIG5vdCB1c2VkCi0JCSAqIGhlcmUgYXMgdGhpcyBxdWV1ZSBpcyBub3QgbmVjZXNzYXJpbHkgc3RvcHBlZAotCQkgKi8KLQkJbmV0aWZfc2NoZWR1bGVfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwKLQkJCQkJCQkgYWdnX3F1ZXVlKSk7Ci0JfQotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IpOwotCi12b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwotCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwotCi0JaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKLQkJCSAgICAgICAiZHJvcHBpbmcgc3RhcnQgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKLQltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JcmFfdGlkLT50aWQgPSB0aWQ7Ci0KLQlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0FEREJBX01TRzsKLQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKTsKLQotdm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgY29uc3QgdTggKnJhLCB1MTYgdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICpyYV90aWQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoMCk7Ci0KLQlpZiAodW5saWtlbHkoIXNrYikpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgotCQkJICAgICAgICJkcm9wcGluZyBzdG9wIEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7Ci0JbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOwotCXJhX3RpZC0+dGlkID0gdGlkOwotCi0Jc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9ERUxCQV9NU0c7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7Ci0JdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKTsKLQotLyoKLSAqIEFmdGVyIGFjY2VwdGluZyB0aGUgQWRkQkEgUmVxdWVzdCB3ZSBhY3RpdmF0ZWQgYSB0aW1lciwKLSAqIHJlc2V0dGluZyBpdCBhZnRlciBlYWNoIGZyYW1lIHRoYXQgYXJyaXZlcyBmcm9tIHRoZSBvcmlnaW5hdG9yLgotICogaWYgdGhpcyB0aW1lciBleHBpcmVzIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uIHdpbGwgYmUgZXhlY3V0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQkvKiBub3QgYW4gZWxlZ2FudCBkZXRvdXIsIGJ1dCB0aGVyZSBpcyBubyBjaG9pY2UgYXMgdGhlIHRpbWVyIHBhc3NlcwotCSAqIG9ubHkgb25lIGFyZ3VtZW50LCBhbmQgdmFyaW91cyBzdGFfaW5mbyBhcmUgbmVlZGVkIGhlcmUsIHNvIGluaXQKLQkgKiBmbG93IGluIHN0YV9pbmZvX2NyZWF0ZSBnaXZlcyB0aGUgVElEIGFzIGRhdGEsIHdoaWxlIHRoZSB0aW1lcl90b19pZAotCSAqIGFycmF5IGdpdmVzIHRoZSBzdGEgdGhyb3VnaCBjb250YWluZXJfb2YgKi8KLQl1OCAqcHRpZCA9ICh1OCAqKWRhdGE7Ci0JdTggKnRpbWVyX3RvX2lkID0gcHRpZCAtICpwdGlkOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHRpbWVyX3RvX2lkLCBzdHJ1Y3Qgc3RhX2luZm8sCi0JCQkJCSB0aW1lcl90b190aWRbMF0pOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInJ4IHNlc3Npb24gdGltZXIgZXhwaXJlZCBvbiB0aWQgJWRcbiIsICh1MTYpKnB0aWQpOwotI2VuZGlmCi0JaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLT5zZGF0YSwgc3RhLT5zdGEuYWRkciwKLQkJCQkJICh1MTYpKnB0aWQsIFdMQU5fQkFDS19USU1FUiwKLQkJCQkJIFdMQU5fUkVBU09OX1FTVEFfVElNRU9VVCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgICAgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7Ci0JdTE2IGNhcGFiLCB0aWQsIHRpbWVvdXQsIGJhX3BvbGljeSwgYnVmX3NpemUsIHN0YXJ0X3NlcV9udW0sIHN0YXR1czsKLQl1OCBkaWFsb2dfdG9rZW47Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwotCi0JLyogZXh0cmFjdCBzZXNzaW9uIHBhcmFtZXRlcnMgZnJvbSBhZGRiYSByZXF1ZXN0IGZyYW1lICovCi0JZGlhbG9nX3Rva2VuID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuOwotCXRpbWVvdXQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0KTsKLQlzdGFydF9zZXFfbnVtID0KLQkJbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSkgPj4gNDsKLQotCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOwotCWJhX3BvbGljeSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9QT0xJQ1lfTUFTSykgPj4gMTsKLQl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7Ci0JYnVmX3NpemUgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykgPj4gNjsKLQotCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1JFUVVFU1RfREVDTElORUQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhcmFtZXRlcnM6Ci0JICogY2hlY2sgaWYgY29uZmlndXJhdGlvbiBjYW4gc3VwcG9ydCB0aGUgQkEgcG9saWN5Ci0JICogYW5kIGlmIGJ1ZmZlciBzaXplIGRvZXMgbm90IGV4Y2VlZHMgbWF4IHZhbHVlICovCi0JLyogWFhYOiBjaGVjayBvd24gaHQgZGVsYXllZCBCQSBjYXBhYmlsaXR5Pz8gKi8KLQlpZiAoKChiYV9wb2xpY3kgIT0gMSkKLQkJJiYgKCEoc3RhLT5zdGEuaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfREVMQVlfQkEpKSkKLQkJfHwgKGJ1Zl9zaXplID4gSUVFRTgwMjExX01BWF9BTVBEVV9CVUYpKSB7Ci0JCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfUU9TX1BBUkFNOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkFkZEJBIFJlcSB3aXRoIGJhZCBwYXJhbXMgZnJvbSAiCi0JCQkJIiVwTSBvbiB0aWQgJXUuIHBvbGljeSAlZCwgYnVmZmVyIHNpemUgJWRcbiIsCi0JCQkJbWdtdC0+c2EsIHRpZCwgYmFfcG9saWN5LAotCQkJCWJ1Zl9zaXplKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJZ290byBlbmRfbm9fbG9jazsKLQl9Ci0JLyogZGV0ZXJtaW5lIGRlZmF1bHQgYnVmZmVyIHNpemUgKi8KLQlpZiAoYnVmX3NpemUgPT0gMCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbY29uZi0+Y2hhbm5lbC0+YmFuZF07Ci0JCWJ1Zl9zaXplID0gSUVFRTgwMjExX01JTl9BTVBEVV9CVUY7Ci0JCWJ1Zl9zaXplID0gYnVmX3NpemUgPDwgc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3I7Ci0JfQotCi0KLQkvKiBleGFtaW5lIHN0YXRlIG1hY2hpbmUgKi8KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdICE9IEhUX0FHR19TVEFURV9JRExFKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBBZGRCQSBSZXEgZnJvbSAiCi0JCQkJIiVwTSBvbiB0aWQgJXVcbiIsCi0JCQkJbWdtdC0+c2EsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCWdvdG8gZW5kOwotCX0KLQotCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFJ4IGFnZ3JlZ2F0aW9uICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0KLQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCi0JCQkJCXRpZCk7Ci0jZW5kaWYKLQkJZ290byBlbmQ7Ci0JfQotCS8qIHJ4IHRpbWVyICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmZ1bmN0aW9uID0KLQkJCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZGF0YSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07Ci0JaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKLQotCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07Ci0KLQkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCi0JdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQotCQlrbWFsbG9jKGJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWZmICopLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgYWxsb2NhdGUgcmVvcmRlcmluZyBidWZmZXIgIgotCQkJICAgICAgICJ0byB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYKLQkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKLQkJZ290byBlbmQ7Ci0JfQotCW1lbXNldCh0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZiwgMCwKLQkJYnVmX3NpemUgKiBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikpOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCi0JCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJSeCBBLU1QRFUgcmVxdWVzdCBvbiB0aWQgJWQgcmVzdWx0ICVkXG4iLCB0aWQsIHJldCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlpZiAocmV0KSB7Ci0JCWtmcmVlKHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKTsKLQkJa2ZyZWUodGlkX2FnZ19yeCk7Ci0JCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9IE5VTEw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCS8qIGNoYW5nZSBzdGF0ZSBhbmQgc2VuZCBhZGRiYSByZXNwICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOwotCXRpZF9hZ2dfcngtPmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2tlbjsKLQl0aWRfYWdnX3J4LT5zc24gPSBzdGFydF9zZXFfbnVtOwotCXRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSA9IHN0YXJ0X3NlcV9udW07Ci0JdGlkX2FnZ19yeC0+YnVmX3NpemUgPSBidWZfc2l6ZTsKLQl0aWRfYWdnX3J4LT50aW1lb3V0ID0gdGltZW91dDsKLQl0aWRfYWdnX3J4LT5zdG9yZWRfbXBkdV9udW0gPSAwOwotCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7Ci1lbmQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLWVuZF9ub19sb2NrOgotCWllZWU4MDIxMV9zZW5kX2FkZGJhX3Jlc3Aoc3RhLT5zZGF0YSwgc3RhLT5zdGEuYWRkciwgdGlkLAotCQkJCSAgZGlhbG9nX3Rva2VuLCBzdGF0dXMsIDEsIGJ1Zl9zaXplLCB0aW1lb3V0KTsKLX0KLQotdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQl1MTYgY2FwYWI7Ci0JdTE2IHRpZCwgc3RhcnRfc2VxX251bTsKLQl1OCAqc3RhdGU7Ci0KLQljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYik7Ci0JdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwotCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPQotCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbikgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIndyb25nIGFkZEJBIHJlc3BvbnNlIHRva2VuLCB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCXJldHVybjsKLQl9Ci0KLQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQotCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewotCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOwotCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKLQotCQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCAmJgotCQkgICAgbG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCi0JCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pIHsKLQkJCSh2b2lkKWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywKLQkJCQkJICAgICAgIElFRUU4MDIxMV9BTVBEVV9UWF9SRVNVTUUsCi0JCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOwotCQl9Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJSZXN1bWluZyBUWCBhZ2dyZWdhdGlvbiBmb3IgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQl9IGVsc2UgewotCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdKys7Ci0JCS8qIHRoaXMgd2lsbCBhbGxvdyB0aGUgc3RhdGUgY2hlY2sgaW4gc3RvcF9CQV9zZXNzaW9uICovCi0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oaHcsIHN0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkJICAgICBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKLQl9CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmVjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC0wLDAgKzEsOTA3IEBACisvKgorICogSUJTUyBtb2RlIGltcGxlbWVudGF0aW9uCisgKiBDb3B5cmlnaHQgMjAwMy0yMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICogQ29weXJpZ2h0IDIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOSwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgInJhdGUuaCIKKworI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCAoMiAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XICgxNSAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQgKDcgKiBIWikKKworI2RlZmluZSBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCAoMzAgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfREVMQVkgMHg0MDAwMDAKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCAoNjAgKiBIWikKKworI2RlZmluZSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMgMTI4CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXV0aF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCXNpemVfdCBsZW4pCit7CisJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKKworCWlmIChsZW4gPCAyNCArIDYpCisJCXJldHVybjsKKworCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKKwlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOworCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKKworCS8qCisJICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCisJICogbmV0d29ya3MgYW5kIG1vc3QgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBzZWVtIHRvIHVzZSBpdC4KKwkgKiBIb3dldmVyLCB0cnkgdG8gcmVwbHkgdG8gYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgaWYgc29tZW9uZQorCSAqIGhhcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0aGlzLgorCSAqLworCWlmIChhdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTiAmJiBhdXRoX3RyYW5zYWN0aW9uID09IDEpCisJCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDIsIFdMQU5fQVVUSF9PUEVOLCBOVUxMLCAwLAorCQkJCSAgICBzZGF0YS0+dS5pYnNzLmJzc2lkLCAwKTsKK30KKworc3RhdGljIGludCBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgY29uc3QgdTggKmJzc2lkLCBjb25zdCBpbnQgYmVhY29uX2ludCwKKwkJCQkgICAgIGNvbnN0IGludCBmcmVxLAorCQkJCSAgICAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgICAgY29uc3QgdTggKnN1cHBfcmF0ZXMsCisJCQkJICAgICBjb25zdCB1MTYgY2FwYWJpbGl0eSwgdTY0IHRzZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCByZXMgPSAwLCByYXRlcywgaSwgajsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1OCAqcG9zOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKworCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKKwkJLyogUmVzZXQgb3duIFRTRiB0byBhbGxvdyB0aW1lIHN5bmNocm9uaXphdGlvbiB3b3JrLiAqLworCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwl9CisKKwlpZiAoKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkgJiYKKwkgICBtZW1jbXAoaWZpYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gcmVzOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDApOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgorCQkgICAgICAgInJlc3BvbnNlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSkgeworCQkvKiBSZW1vdmUgcG9zc2libGUgU1RBIGVudHJpZXMgZnJvbSBvdGhlciBJQlNTIG5ldHdvcmtzLiAqLworCQlzdGFfaW5mb19mbHVzaF9kZWxheWVkKHNkYXRhKTsKKwl9CisKKwltZW1jcHkoaWZpYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwlyZXMgPSBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSBiZWFjb25faW50ID49IDEwID8gYmVhY29uX2ludCA6IDEwOworCisJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSBjYXBhYmlsaXR5ICYKKwkJV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kgPyAxIDogMDsKKworCXJlcyA9IGllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgZnJlcSk7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJLyogQnVpbGQgSUJTUyBwcm9iZSByZXNwb25zZSAqLworCisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKKwkJc2tiX3B1dChza2IsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7CisJbWVtc2V0KG1nbXQsIDAsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CisJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCW1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPQorCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5iZWFjb25faW50KTsKKwltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NCh0c2YpOworCW1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYmlsaXR5KTsKKworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZpYnNzLT5zc2lkX2xlbik7CisJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKKwkqcG9zKysgPSBpZmlic3MtPnNzaWRfbGVuOworCW1lbWNweShwb3MsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbik7CisKKwlyYXRlcyA9IHN1cHBfcmF0ZXNfbGVuOworCWlmIChyYXRlcyA+IDgpCisJCXJhdGVzID0gODsKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOworCSpwb3MrKyA9IHJhdGVzOworCW1lbWNweShwb3MsIHN1cHBfcmF0ZXMsIHJhdGVzKTsKKworCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMSk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0RTX1BBUkFNUzsKKwkJKnBvcysrID0gMTsKKwkJKnBvcysrID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGZyZXEpOworCX0KKworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMik7CisJKnBvcysrID0gV0xBTl9FSURfSUJTU19QQVJBTVM7CisJKnBvcysrID0gMjsKKwkvKiBGSVg6IHNldCBBVElNIHdpbmRvdyBiYXNlZCBvbiBzY2FuIHJlc3VsdHMgKi8KKwkqcG9zKysgPSAwOworCSpwb3MrKyA9IDA7CisKKwlpZiAoc3VwcF9yYXRlc19sZW4gPiA4KSB7CisJCXJhdGVzID0gc3VwcF9yYXRlc19sZW4gLSA4OworCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKKwkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCSpwb3MrKyA9IHJhdGVzOworCQltZW1jcHkocG9zLCAmc3VwcF9yYXRlc1s4XSwgcmF0ZXMpOworCX0KKworCWlmaWJzcy0+cHJvYmVfcmVzcCA9IHNrYjsKKworCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTiB8CisJCQkJICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOworCisKKwlyYXRlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKKwkJaW50IGJpdHJhdGUgPSAoc3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKKwkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gYml0cmF0ZSkKKwkJCQlyYXRlcyB8PSBCSVQoaik7CisJfQorCisJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgc3VwcF9yYXRlc19sZW4sIHN1cHBfcmF0ZXMpOworCisJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKKwlpZmlic3MtPnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQ7CisJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCisJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQoreworCXJldHVybiBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLAorCQkJCQkgYnNzLT5jYnNzLmJzc2lkLAorCQkJCQkgYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbCwKKwkJCQkJIGJzcy0+Y2Jzcy5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQkJIGJzcy0+c3VwcF9yYXRlc19sZW4sIGJzcy0+c3VwcF9yYXRlcywKKwkJCQkJIGJzcy0+Y2Jzcy5jYXBhYmlsaXR5LAorCQkJCQkgYnNzLT5jYnNzLnRzZik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgIHNpemVfdCBsZW4sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAorCQkJCSAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAorCQkJCSAgYm9vbCBiZWFjb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGZyZXE7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJdTY0IGJlYWNvbl90aW1lc3RhbXAsIHJ4X3RpbWVzdGFtcDsKKwl1MzIgc3VwcF9yYXRlcyA9IDA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gcnhfc3RhdHVzLT5iYW5kOworCisJaWYgKGVsZW1zLT5kc19wYXJhbXMgJiYgZWxlbXMtPmRzX3BhcmFtc19sZW4gPT0gMSkKKwkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShlbGVtcy0+ZHNfcGFyYW1zWzBdKTsKKwllbHNlCisJCWZyZXEgPSByeF9zdGF0dXMtPmZyZXE7CisKKwljaGFubmVsID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwgZnJlcSk7CisKKwlpZiAoIWNoYW5uZWwgfHwgY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJcmV0dXJuOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJiBlbGVtcy0+c3VwcF9yYXRlcyAmJgorCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCXN1cHBfcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgZWxlbXMsIGJhbmQpOworCisJCXJjdV9yZWFkX2xvY2soKTsKKworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwkJaWYgKHN0YSkgeworCQkJdTMyIHByZXZfcmF0ZXM7CisKKwkJCXByZXZfcmF0ZXMgPSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdOworCQkJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCisJCQlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8CisJCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQkJaWYgKHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gIT0gcHJldl9yYXRlcykKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgorCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgorCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCisJCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkJICAgIHN0YS0+c3RhLmFkZHIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHByZXZfcmF0ZXMsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN1cHBfcmF0ZXMsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0pOworI2VuZGlmCisJCX0gZWxzZQorCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKGxvY2FsLCByeF9zdGF0dXMsIG1nbXQsIGxlbiwgZWxlbXMsCisJCQkJCWNoYW5uZWwsIGJlYWNvbik7CisJaWYgKCFic3MpCisJCXJldHVybjsKKworCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLworCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOworCisJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBtZXJnZSBJQlNTICovCisKKwkvKiBtZXJnZSBvbmx5IG9uIGJlYWNvbnMgKD8/PykgKi8KKwlpZiAoIWJlYWNvbikKKwkJZ290byBwdXRfYnNzOworCisJLyogd2UgdXNlIGEgZml4ZWQgQlNTSUQgKi8KKwlpZiAoc2RhdGEtPnUuaWJzcy5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkKKwkJZ290byBwdXRfYnNzOworCisJLyogbm90IGFuIElCU1MgKi8KKwlpZiAoIShic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKKwkJZ290byBwdXRfYnNzOworCisJLyogZGlmZmVyZW50IGNoYW5uZWwgKi8KKwlpZiAoYnNzLT5jYnNzLmNoYW5uZWwgIT0gbG9jYWwtPm9wZXJfY2hhbm5lbCkKKwkJZ290byBwdXRfYnNzOworCisJLyogZGlmZmVyZW50IFNTSUQgKi8KKwlpZiAoZWxlbXMtPnNzaWRfbGVuICE9IHNkYXRhLT51Lmlic3Muc3NpZF9sZW4gfHwKKwkgICAgbWVtY21wKGVsZW1zLT5zc2lkLCBzZGF0YS0+dS5pYnNzLnNzaWQsCisJCQkJc2RhdGEtPnUuaWJzcy5zc2lkX2xlbikpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIHNhbWUgQlNTSUQgKi8KKwlpZiAobWVtY21wKGJzcy0+Y2Jzcy5ic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pID09IDApCisJCWdvdG8gcHV0X2JzczsKKworCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpIHsKKwkJLyoKKwkJICogRm9yIGNvcnJlY3QgSUJTUyBtZXJnaW5nIHdlIG5lZWQgbWFjdGltZTsgc2luY2UgbWFjdGltZSBpcworCQkgKiBkZWZpbmVkIGFzIHRoZSB0aW1lIHRoZSBmaXJzdCBkYXRhIHN5bWJvbCBvZiB0aGUgZnJhbWUgaGl0cworCQkgKiB0aGUgUEhZLCBhbmQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgYmVhY29uIGlzIGRlZmluZWQgYXMgInRoZQorCQkgKiB0aW1lIHRoYXQgdGhlIGRhdGEgc3ltYm9sIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGJpdCBvZiB0aGUKKwkJICogdGltZXN0YW1wIGlzIHRyYW5zbWl0dGVkIHRvIHRoZSBQSFkgcGx1cyB0aGUgdHJhbnNtaXR0aW5nCisJCSAqIFNUQSdzIGRlbGF5cyB0aHJvdWdoIGl0cyBsb2NhbCBQSFkgZnJvbSB0aGUgTUFDLVBIWQorCQkgKiBpbnRlcmZhY2UgdG8gaXRzIGludGVyZmFjZSB3aXRoIHRoZSBXTSIgKDgwMi4xMSAxMS4xLjIpCisJCSAqIC0gZXF1YWxzIHRoZSB0aW1lIHRoaXMgYml0IGFycml2ZXMgYXQgdGhlIHJlY2VpdmVyIC0gd2UgaGF2ZQorCQkgKiB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIHR3by4KKwkJICoKKwkJICogRS5nLiBhdCAxIE1CaXQgdGhhdCBtZWFucyBtYWN0aW1lIGlzIDE5MiB1c2VjIGVhcmxpZXIKKwkJICogKD0yNCBieXRlcyAqIDggdXNlY3MvYnl0ZSkgdGhhbiB0aGUgYmVhY29uIHRpbWVzdGFtcC4KKwkJICovCisJCWludCByYXRlOworCisJCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKQorCQkJcmF0ZSA9IDY1OyAvKiBUT0RPOiBIVCByYXRlcyAqLworCQllbHNlCisJCQlyYXRlID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXS0+CisJCQkJYml0cmF0ZXNbcnhfc3RhdHVzLT5yYXRlX2lkeF0uYml0cmF0ZTsKKworCQlyeF90aW1lc3RhbXAgPSByeF9zdGF0dXMtPm1hY3RpbWUgKyAoMjQgKiA4ICogMTAgLyByYXRlKTsKKwl9IGVsc2UgaWYgKGxvY2FsICYmIGxvY2FsLT5vcHMgJiYgbG9jYWwtPm9wcy0+Z2V0X3RzZikKKwkJLyogc2Vjb25kIGJlc3Qgb3B0aW9uOiBnZXQgY3VycmVudCBUU0YgKi8KKwkJcnhfdGltZXN0YW1wID0gbG9jYWwtPm9wcy0+Z2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCWVsc2UKKwkJLyogY2FuJ3QgbWVyZ2Ugd2l0aG91dCBrbm93aW5nIHRoZSBUU0YgKi8KKwkJcnhfdGltZXN0YW1wID0gLTFMTFU7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJSWCBiZWFjb24gU0E9JXBNIEJTU0lEPSIKKwkgICAgICAgIiVwTSBUU0Y9MHglbGx4IEJDTj0weCVsbHggZGlmZj0lbGxkIEAlbHVcbiIsCisJICAgICAgIG1nbXQtPnNhLCBtZ210LT5ic3NpZCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyeF90aW1lc3RhbXAsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmVhY29uX3RpbWVzdGFtcCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykocnhfdGltZXN0YW1wIC0gYmVhY29uX3RpbWVzdGFtcCksCisJICAgICAgIGppZmZpZXMpOworI2VuZGlmCisKKwkvKiBnaXZlIHNsb3cgaGFyZHdhcmUgc29tZSB0aW1lIHRvIGRvIHRoZSBUU0Ygc3luYyAqLworCWlmIChyeF90aW1lc3RhbXAgPCBJRUVFODAyMTFfSUJTU19NRVJHRV9ERUxBWSkKKwkJZ290byBwdXRfYnNzOworCisJaWYgKGJlYWNvbl90aW1lc3RhbXAgPiByeF90aW1lc3RhbXApIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJlYWNvbiBUU0YgaGlnaGVyIHRoYW4gIgorCQkgICAgICAgImxvY2FsIFRTRiAtIElCU1MgbWVyZ2Ugd2l0aCBCU1NJRCAlcE1cbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5ic3NpZCk7CisjZW5kaWYKKwkJaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGJzcyk7CisJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7CisJfQorCisgcHV0X2JzczoKKwlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKK30KKworLyoKKyAqIEFkZCBhIG5ldyBJQlNTIHN0YXRpb24sIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIFJYIGNvZGUgd2hlbiwKKyAqIGluIElCU1MgbW9kZSwgcmVjZWl2aW5nIGEgZnJhbWUgZnJvbSBhIHlldC11bmtub3duIHN0YXRpb24sIGhlbmNlCisgKiBtdXN0IGJlIGNhbGxhYmxlIGluIGF0b21pYyBjb250ZXh0LgorICovCitzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXU4ICpic3NpZCx1OCAqYWRkciwgdTMyIHN1cHBfcmF0ZXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOworCisJLyogVE9ETzogQ291bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cnkgYW5kCisJICogYWxsb3cgbmV3IG9uZSB0byBiZSBhZGRlZC4gKi8KKwlpZiAobG9jYWwtPm51bV9zdGEgPj0gSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gcm9vbSBmb3IgYSBuZXcgSUJTUyBTVEEgIgorCQkJICAgICAgICJlbnRyeSAlcE1cbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFkZHIpOworCQl9CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQpKQorCQlyZXR1cm4gTlVMTDsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZGRpbmcgbmV3IElCU1Mgc3RhdGlvbiAlcE0gKGRldj0lcylcbiIsCisJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgYWRkciwgc2RhdGEtPmRldi0+bmFtZSk7CisjZW5kaWYKKworCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXN0YSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7CisKKwkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KKwlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8CisJCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKKworCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKKworCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gc3RhOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGFjdGl2ZSA9IDA7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHN0YS0+c2RhdGEgPT0gc2RhdGEgJiYKKwkJICAgIHRpbWVfYWZ0ZXIoc3RhLT5sYXN0X3J4ICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwsCisJCQkgICAgICAgamlmZmllcykpIHsKKwkJCWFjdGl2ZSsrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBhY3RpdmU7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7CisKKwlpZWVlODAyMTFfc3RhX2V4cGlyZShzZGF0YSwgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCk7CisJaWYgKGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKQorCQlyZXR1cm47CisKKwlpZiAoKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpICYmCisJICAgICghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMKSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gYWN0aXZlIElCU1MgU1RBcyAtIHRyeWluZyB0byBzY2FuIGZvciBvdGhlciAiCisJICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCisJLyogWFhYIG1heWJlIHJhY3k/ICovCisJaWYgKHNkYXRhLT5sb2NhbC0+c2Nhbl9yZXEpCisJCXJldHVybjsKKworCW1lbWNweShzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLAorCSAgICAgICBpZmlic3MtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCXNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZpYnNzLT5zc2lkX2xlbjsKKwlpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCAmc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEpOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1OCAqcG9zOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9NQVhfU1VQUF9SQVRFU107CisJdTE2IGNhcGFiaWxpdHk7CisJaW50IGk7CisKKwlpZiAoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkgeworCQltZW1jcHkoYnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQkvKiBHZW5lcmF0ZSByYW5kb20sIG5vdCBicm9hZGNhc3QsIGxvY2FsbHkgYWRtaW5pc3RlcmVkIEJTU0lELiBNaXggaW4KKwkJICogb3duIE1BQyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBwcm9wZXIKKwkJICogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZ2V0IGRpZmZlcmVudCBCU1NJRC4gKi8KKwkJZ2V0X3JhbmRvbV9ieXRlcyhic3NpZCwgRVRIX0FMRU4pOworCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJCWJzc2lkW2ldIF49IHNkYXRhLT5kZXYtPmRldl9hZGRyW2ldOworCQlic3NpZFswXSAmPSB+MHgwMTsKKwkJYnNzaWRbMF0gfD0gMHgwMjsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENyZWF0aW5nIG5ldyBJQlNTIG5ldHdvcmssIEJTU0lEICVwTVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzaWQpOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJaWYgKGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPT0gMCkKKwkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKKworCWNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKKworCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCWNhcGFiaWxpdHkgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisJZWxzZQorCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IDA7CisKKwlwb3MgPSBzdXBwX3JhdGVzOworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwl9CisKKwlyZXR1cm4gX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwKKwkJCQkJIGJzc2lkLCBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50LAorCQkJCQkgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJCSBzYmFuZC0+bl9iaXRyYXRlcywgc3VwcF9yYXRlcywKKwkJCQkJIGNhcGFiaWxpdHksIDApOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwljb25zdCB1OCAqYnNzaWQgPSBOVUxMOworCWludCBhY3RpdmVfaWJzczsKKworCWlmIChpZmlic3MtPnNzaWRfbGVuID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYWN0aXZlX2lic3MgPSBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhX2ZpbmRfaWJzcyAoYWN0aXZlX2lic3M9JWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBhY3RpdmVfaWJzcyk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCWlmIChhY3RpdmVfaWJzcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkKKwkJYnNzaWQgPSBpZmlic3MtPmJzc2lkOworCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIE5VTEwsIGJzc2lkLAorCQkJCSAgICAgICBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4sCisJCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9JQlNTLAorCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCWlmIChic3MpCisJCXByaW50ayhLRVJOX0RFQlVHICIgICBzdGFfZmluZF9pYnNzOiBzZWxlY3RlZCAlcE0gY3VycmVudCAiCisJCSAgICAgICAiJXBNXG4iLCBic3MtPmNic3MuYnNzaWQsIGlmaWJzcy0+YnNzaWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwlpZiAoYnNzICYmCisJICAgICghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkgfHwKKwkgICAgIG1lbWNtcChpZmlic3MtPmJzc2lkLCBic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKSkpIHsKKwkJaW50IHJldDsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgorCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3MtPmNic3MuYnNzaWQpOworCisJCXJldCA9IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKGJzcykKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCisJaWYgKGlmaWJzcy0+c3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQgJiYKKwkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSB7CisJCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArCisJCQkJCSAgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCArCisJCQkJCUlFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyaWdnZXIgbmV3IHNjYW4gdG8gZmluZCBhbiBJQlNTIHRvICIKKwkJICAgICAgICJqb2luXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKworCQkvKiBYWFggbWF5YmUgcmFjeT8gKi8KKwkJaWYgKGxvY2FsLT5zY2FuX3JlcSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJbWVtY3B5KGxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKKwkJICAgICAgIGlmaWJzcy0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7CisJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZmlic3MtPnNzaWRfbGVuOworCQlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgJmxvY2FsLT5pbnRfc2Nhbl9yZXEpOworCX0gZWxzZSBpZiAoaWZpYnNzLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCkgeworCQlpbnQgaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTDsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZmlic3MtPmlic3Nfam9pbl9yZXEgKworCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCkpIHsKKwkJCWlmICghKGxvY2FsLT5vcGVyX2NoYW5uZWwtPmZsYWdzICYKKwkJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0lCU1MpKQorCQkJCXJldHVybiBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHNkYXRhKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSUJTUyBub3QgYWxsb3dlZCBvbiIKKwkJCSAgICAgICAiICVkIE1IelxuIiwgc2RhdGEtPmRldi0+bmFtZSwKKwkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwkJCS8qIE5vIElCU1MgZm91bmQgLSBkZWNyZWFzZSBzY2FuIGludGVydmFsIGFuZCBjb250aW51ZQorCQkJICogc2Nhbm5pbmcuICovCisJCQlpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1c7CisJCX0KKworCQlpZmlic3MtPnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CisJCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArIGludGVydmFsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IHR4X2xhc3RfYmVhY29uOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpyZXNwOworCXU4ICpwb3MsICplbmQ7CisKKwlpZiAoaWZpYnNzLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCB8fAorCSAgICBsZW4gPCAyNCArIDIgfHwgIWlmaWJzcy0+cHJvYmVfcmVzcCkKKwkJcmV0dXJuOworCisJaWYgKGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKQorCQl0eF9sYXN0X2JlYWNvbiA9IGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJZWxzZQorCQl0eF9sYXN0X2JlYWNvbiA9IDE7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggUHJvYmVSZXEgU0E9JXBNIERBPSVwTSBCU1NJRD0lcE0iCisJICAgICAgICIgKHR4X2xhc3RfYmVhY29uPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EsIG1nbXQtPmRhLAorCSAgICAgICBtZ210LT5ic3NpZCwgdHhfbGFzdF9iZWFjb24pOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwlpZiAoIXR4X2xhc3RfYmVhY29uKQorCQlyZXR1cm47CisKKwlpZiAobWVtY21wKG1nbXQtPmJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCAmJgorCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuOworCisJZW5kID0gKCh1OCAqKSBtZ210KSArIGxlbjsKKwlwb3MgPSBtZ210LT51LnByb2JlX3JlcS52YXJpYWJsZTsKKwlpZiAocG9zWzBdICE9IFdMQU5fRUlEX1NTSUQgfHwKKwkgICAgcG9zICsgMiArIHBvc1sxXSA+IGVuZCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBTU0lEIElFIGluIFByb2JlUmVxICIKKwkJICAgICAgICJmcm9tICVwTVxuIiwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCWlmIChwb3NbMV0gIT0gMCAmJgorCSAgICAocG9zWzFdICE9IGlmaWJzcy0+c3NpZF9sZW4gfHwKKwkgICAgIG1lbWNtcChwb3MgKyAyLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pICE9IDApKSB7CisJCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCisJCXJldHVybjsKKwl9CisKKwkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLworCXNrYiA9IHNrYl9jb3B5KGlmaWJzcy0+cHJvYmVfcmVzcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCXJlc3AgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbmRpbmcgUHJvYmVSZXNwIHRvICVwTVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVzcC0+ZGEpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJIHNpemVfdCBsZW4sCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXNpemVfdCBiYXNlbGVuOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCisJaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKKwkJcmV0dXJuOyAvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLworCisJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUgLSAodTggKikgbWdtdDsKKwlpZiAoYmFzZWxlbiA+IGxlbikKKwkJcmV0dXJuOworCisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sCisJCQkJJmVsZW1zKTsKKworCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICAgICBzaXplX3QgbGVuLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKworCS8qIFByb2Nlc3MgYmVhY29uIGZyb20gdGhlIGN1cnJlbnQgQlNTICovCisJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKQorCQlyZXR1cm47CisKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLCAmZWxlbXMpOworCisJaWVlZTgwMjExX3J4X2Jzc19pbmZvKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgJmVsZW1zLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgZmM7CisKKwlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKKworCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgICAgIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCWllZWU4MDIxMV9yeF9tZ210X2F1dGhfaWJzcyhzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwl9CisKKwlrZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5pYnNzLndvcmspOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQlyZXR1cm47CisJaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZmlic3MtPnNrYl9xdWV1ZSkpKQorCQlpZWVlODAyMTFfaWJzc19yeF9xdWV1ZWRfbWdtdChzZGF0YSwgc2tiKTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZpZmlic3MtPnJlcXVlc3QpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGlmaWJzcy0+c3RhdGUpIHsKKwljYXNlIElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOgorCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQ6CisJCWllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJc2V0X2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmaWZpYnNzLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZmlic3MtPndvcmspOworfQorCit2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlJTklUX1dPUksoJmlmaWJzcy0+d29yaywgaWVlZTgwMjExX2lic3Nfd29yayk7CisJc2V0dXBfdGltZXIoJmlmaWJzcy0+dGltZXIsIGllZWU4MDIxMV9pYnNzX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpZmlic3MtPnNrYl9xdWV1ZSk7CisKKwlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMIHwKKwkJCUlFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCWlmaWJzcy0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUOworCisJaWYgKGlmaWJzcy0+c3NpZF9sZW4pCisJCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfU1NJRF9TRVQ7CisJZWxzZQorCQlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19TU0lEX1NFVDsKKworCWlmaWJzcy0+aWJzc19qb2luX3JlcSA9IGppZmZpZXM7CisJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOworCisJcmV0dXJuIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhKTsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaWZpYnNzLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmaWJzcy0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7CisJCW1lbXNldChpZmlic3MtPnNzaWQsIDAsIHNpemVvZihpZmlic3MtPnNzaWQpKTsKKwkJbWVtY3B5KGlmaWJzcy0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZpYnNzLT5zc2lkX2xlbiA9IGxlbjsKKwl9CisKKwlyZXR1cm4gaWVlZTgwMjExX2lic3NfY29tbWl0KHNkYXRhKTsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJbWVtY3B5KHNzaWQsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbik7CisJKmxlbiA9IGlmaWJzcy0+c3NpZF9sZW47CisKKwlyZXR1cm4gMDsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKKwkJbWVtY3B5KGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUOworCX0gZWxzZSB7CisJCW1lbXNldChpZmlic3MtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisJCWlmaWJzcy0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVDsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQlpZiAoaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBjb25maWcgbmV3IEJTU0lEIHRvICIKKwkJCSAgICAgICAidGhlIGxvdy1sZXZlbCBkcml2ZXJcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQl9CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX2NvbW1pdChzZGF0YSk7Cit9CisKKy8qIHNjYW4gZmluaXNoZWQgbm90aWZpY2F0aW9uICovCit2b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzOworCisJaWYgKHNkYXRhICYmIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwkJaWYgKCghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkpIHx8CisJCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCisJCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSk7CisJfQorfQorCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfaWJzc19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGZjOworCisJaWYgKHNrYi0+bGVuIDwgMjQpCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKKworCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCQltZW1jcHkoc2tiLT5jYiwgcnhfc3RhdHVzLCBzaXplb2YoKnJ4X3N0YXR1cykpOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQlza2JfcXVldWVfdGFpbCgmc2RhdGEtPnUuaWJzcy5za2JfcXVldWUsIHNrYik7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lmlic3Mud29yayk7CisJCXJldHVybiBSWF9RVUVVRUQ7CisJfQorCisJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggZjNlZWM5ODkuLmZiYjkxZjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC00Myw3ICs0Myw3IEBACiAKIC8qIFJlcXVpcmVkIGVuY3J5cHRpb24gaGVhZCBhbmQgdGFpbHJvb20gKi8KICNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT00gOAotI2RlZmluZSBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTSAxMgorI2RlZmluZSBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTSAxOAogCiAvKiBJRUVFIDgwMi4xMSAoQ2guIDkuNSBEZWZyYWdtZW50YXRpb24pIHJlcXVpcmVzIHN1cHBvcnQgZm9yIGNvbmN1cnJlbnQKICAqIHJlY2VwdGlvbiBvZiBhdCBsZWFzdCB0aHJlZSBmcmFnbWVudGVkIGZyYW1lcy4gVGhpcyBsaW1pdCBjYW4gYmUgaW5jcmVhc2VkCkBAIC01Nyw2ICs1Nyw4IEBACiAgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMTAgKiBIWikKIAorI2RlZmluZSBUVV9UT19FWFBfVElNRSh4KQkoamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoKHgpICogMTAyNCkpCisKIHN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfZW50cnkgewogCXVuc2lnbmVkIGxvbmcgZmlyc3RfZnJhZ190aW1lOwogCXVuc2lnbmVkIGludCBzZXE7CkBAIC03MCw0MyArNzIsMzYgQEAKIAogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpobmV4dDsKKwkvKiBZZXMsIHRoaXMgaXMgYSBoYWNrICovCisJc3RydWN0IGNmZzgwMjExX2JzcyBjYnNzOworCisJLyogZG9uJ3Qgd2FudCB0byBsb29rIHVwIGFsbCB0aGUgdGltZSAqLwogCXNpemVfdCBzc2lkX2xlbjsKLQotCWF0b21pY190IHVzZXJzOwotCi0JdTggYnNzaWRbRVRIX0FMRU5dOwogCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisKIAl1OCBkdGltX3BlcmlvZDsKLQl1MTYgY2FwYWJpbGl0eTsgLyogaG9zdCBieXRlIG9yZGVyICovCi0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBmcmVxOwotCWludCBzaWduYWwsIG5vaXNlLCBxdWFsOwotCXU4ICppZXM7IC8qIGFsbCBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBsYXN0IEJlYWNvbiBvciBQcm9iZQotCQkgICogUmVzcG9uc2UgZnJhbWVzOyBub3RlIEJlYWNvbiBmcmFtZSBpcyBub3QgYWxsb3dlZCB0bwotCQkgICogb3ZlcnJpZGUgdmFsdWVzIGZyb20gUHJvYmUgUmVzcG9uc2UgKi8KLQlzaXplX3QgaWVzX2xlbjsKKwogCWJvb2wgd21tX3VzZWQ7CisKKwl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmVfcmVzcDsKKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJdTggKm1lc2hfaWQ7CiAJc2l6ZV90IG1lc2hfaWRfbGVuOwogCXU4ICptZXNoX2NmZzsKICNlbmRpZgorCiAjZGVmaW5lIElFRUU4MDIxMV9NQVhfU1VQUF9SQVRFUyAzMgogCXU4IHN1cHBfcmF0ZXNbSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTXTsKIAlzaXplX3Qgc3VwcF9yYXRlc19sZW47Ci0JdTY0IHRpbWVzdGFtcDsKLQlpbnQgYmVhY29uX2ludDsKIAotCXVuc2lnbmVkIGxvbmcgbGFzdF9wcm9iZV9yZXNwOwotCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGU7Ci0KLQkvKiBkdXJpbmcgYXNzb2NhdGlvbiwgd2Ugc2F2ZSBhbiBFUlAgdmFsdWUgZnJvbSBhIHByb2JlIHJlc3BvbnNlIHNvCisJLyoKKwkgKiBEdXJpbmcgYXNzb2NhdGlvbiwgd2Ugc2F2ZSBhbiBFUlAgdmFsdWUgZnJvbSBhIHByb2JlIHJlc3BvbnNlIHNvCiAJICogdGhhdCB3ZSBjYW4gZmVlZCBFUlAgaW5mbyB0byB0aGUgZHJpdmVyIHdoZW4gaGFuZGxpbmcgdGhlCiAJICogYXNzb2NpYXRpb24gY29tcGxldGVzLiB0aGVzZSBmaWVsZHMgcHJvYmFibHkgd29uJ3QgYmUgdXAtdG8tZGF0ZQotCSAqIG90aGVyd2lzZSwgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoZW0uICovCi0JaW50IGhhc19lcnBfdmFsdWU7CisJICogb3RoZXJ3aXNlLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhlbS4KKwkgKi8KKwlib29sIGhhc19lcnBfdmFsdWU7CiAJdTggZXJwX3ZhbHVlOwogfTsKIApAQCAtMjQ0LDcgKzIzOSw3IEBACiAJdTggZmxhZ3M7CiB9OwogCi0vKiBmbGFncyB1c2VkIGluIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhLmZsYWdzICovCisvKiBmbGFncyB1c2VkIGluIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZC5mbGFncyAqLwogI2RlZmluZSBJRUVFODAyMTFfU1RBX1NTSURfU0VUCQlCSVQoMCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQJCUJJVCgxKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUCUJJVCgyKQpAQCAtMjU4LDM3ICsyNTMsMzkgQEAKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTAlCSVQoMTEpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTAlCSVQoMTIpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VECUJJVCgxMykKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VECUJJVCgxNCkKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQJQklUKDE1KQorI2RlZmluZSBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVECUJJVCgxNikKIC8qIGZsYWdzIGZvciBNTE1FIHJlcXVlc3QgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfU0NBTiAwCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0RJUkVDVF9QUk9CRSAxCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0FVVEggMgogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9SVU4gIDMKIAotLyogU1RBL0lCU1MgTUxNRSBzdGF0ZXMgKi8KLWVudW0gaWVlZTgwMjExX3N0YV9tbG1lX3N0YXRlIHsKLQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSwKLQlJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFLAotCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNILAotCUlFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCwKLX07Ci0KIC8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIEJJVCgwKQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSBCSVQoMSkKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVAgQklUKDIpCiAKLXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhIHsKK3N0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgY2hzd2l0Y2hfdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGNoc3dpdGNoX3dvcms7CisKIAl1OCBic3NpZFtFVEhfQUxFTl0sIHByZXZfYnNzaWRbRVRIX0FMRU5dOworCiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQllbnVtIGllZWU4MDIxMV9zdGFfbWxtZV9zdGF0ZSBzdGF0ZTsKIAlzaXplX3Qgc3NpZF9sZW47Ci0JdTggc2Nhbl9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzY2FuX3NzaWRfbGVuOworCisJZW51bSB7CisJCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQsCisJfSBzdGF0ZTsKKwogCXUxNiBhaWQ7CiAJdTE2IGFwX2NhcGFiLCBjYXBhYjsKIAl1OCAqZXh0cmFfaWU7IC8qIHRvIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgQXNzb2NSZXEgKi8KQEAgLTMxNSwxMSArMzEyLDY1IEBACiAJaW50IGF1dGhfYWxnOyAvKiBjdXJyZW50bHkgdXNlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gKi8KIAlpbnQgYXV0aF90cmFuc2FjdGlvbjsKIAotCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCi0JdTMyIHN1cHBfcmF0ZXNfYml0c1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKKwllbnVtIHsKKwkJSUVFRTgwMjExX01GUF9ESVNBQkxFRCwKKwkJSUVFRTgwMjExX01GUF9PUFRJT05BTCwKKwkJSUVFRTgwMjExX01GUF9SRVFVSVJFRAorCX0gbWZwOyAvKiBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gKi8KIAogCWludCB3bW1fbGFzdF9wYXJhbV9zZXQ7CisKKwkvKiBFeHRyYSBJRSBkYXRhIGZvciBtYW5hZ2VtZW50IGZyYW1lcyAqLworCXU4ICppZV9wcm9iZXJlcTsKKwlzaXplX3QgaWVfcHJvYmVyZXFfbGVuOworCXU4ICppZV9wcm9iZXJlc3A7CisJc2l6ZV90IGllX3Byb2JlcmVzcF9sZW47CisJdTggKmllX2F1dGg7CisJc2l6ZV90IGllX2F1dGhfbGVuOworCXU4ICppZV9hc3NvY3JlcTsKKwlzaXplX3QgaWVfYXNzb2NyZXFfbGVuOworCXU4ICppZV9yZWFzc29jcmVxOworCXNpemVfdCBpZV9yZWFzc29jcmVxX2xlbjsKKwl1OCAqaWVfZGVhdXRoOworCXNpemVfdCBpZV9kZWF1dGhfbGVuOworCXU4ICppZV9kaXNhc3NvYzsKKwlzaXplX3QgaWVfZGlzYXNzb2NfbGVuOworfTsKKworZW51bSBpZWVlODAyMTFfaWJzc19mbGFncyB7CisJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTAkJPSBCSVQoMCksCisJSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwJCT0gQklUKDEpLAorCUlFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVAkJPSBCSVQoMiksCisJSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQJCT0gQklUKDMpLAorCUlFRUU4MDIxMV9JQlNTX1NTSURfU0VUCQkJPSBCSVQoNCksCit9OworCitlbnVtIGllZWU4MDIxMV9pYnNzX3JlcXVlc3QgeworCUlFRUU4MDIxMV9JQlNTX1JFUV9SVU4JPSAwLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3F1ZXVlOworCisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKworCXUzMiBmbGFnczsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKKworCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCisKKwllbnVtIHsKKwkJSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gsCisJCUlFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVELAorCX0gc3RhdGU7CiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggewpAQCAtNDA0LDggKzQ1NSwxMCBAQAogCXVuc2lnbmVkIGludCBmcmFnbWVudF9uZXh0OwogCiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNAotCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVNdOworI2RlZmluZSBOVU1fREVGQVVMVF9NR01UX0tFWVMgMgorCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVNdOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICpkZWZhdWx0X2tleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9tZ210X2tleTsKIAogCXUxNiBzZXF1ZW5jZV9udW1iZXI7CiAKQEAgLTQyMyw3ICs0NzYsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwIGFwOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3dkcyB3ZHM7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfdmxhbiB2bGFuOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSBzdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCBtZ2Q7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyBpYnNzOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCBtZXNoOwogI2VuZGlmCkBAIC00NzcsNiArNTMxLDcgQEAKIAl9IGRlYnVnZnM7CiAJc3RydWN0IHsKIAkJc3RydWN0IGRlbnRyeSAqZGVmYXVsdF9rZXk7CisJCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfbWdtdF9rZXk7CiAJfSBjb21tb25fZGVidWdmczsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICkBAIC01NDEsMTEgKzU5NiwxMCBAQAogZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiB7CiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0RSSVZFUiwKIAlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSwKKwlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04sCiB9OwogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgd2Ugc3VwcG9ydC4gKi8KLSNkZWZpbmUgUURfTUFYX1FVRVVFUyAoSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgKyBJRUVFODAyMTFfTUFYX1FVRVVFUykKLQogc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CiB9OwpAQCAtNTU4LDkgKzYxMiwxNSBAQAogCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wczsKIAotCXVuc2lnbmVkIGxvbmcgcXVldWVfcG9vbFtCSVRTX1RPX0xPTkdTKFFEX01BWF9RVUVVRVMpXTsKLQl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFU107CisJLyogQUMgcXVldWUgY29ycmVzcG9uZGluZyB0byBlYWNoIEFNUERVIHF1ZXVlICovCisJczggYW1wZHVfYWNfcXVldWVbSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVNdOworCXVuc2lnbmVkIGludCBhbWRwdV9hY19zdG9wX3JlZmNudFtJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFU107CisKKwl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFUyArCisJCQkJCSBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFU107CisJLyogYWxzbyB1c2VkIHRvIHByb3RlY3QgYW1wZHVfYWNfcXVldWUgYW5kIGFtZHB1X2FjX3N0b3BfcmVmY250ICovCiAJc3BpbmxvY2tfdCBxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrOworCiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7IC8qIHdtYXN0ZXIjIC0gIm1hc3RlciIgODAyLjExIGRldmljZSAqLwogCWludCBvcGVuX2NvdW50OwogCWludCBtb25pdG9ycywgY29va2VkX21udHJzOwpAQCAtNTY4LDcgKzYyOCw2IEBACiAJaW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7IC8qIEZJRl8qICovCiAJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwotCXU4IHdzdGF0c19mbGFnczsKIAlib29sIHRpbV9pbl9sb2NrZWRfc2VjdGlvbjsgLyogc2VlIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgKi8KIAlpbnQgdHhfaGVhZHJvb207IC8qIHJlcXVpcmVkIGhlYWRyb29tIGZvciBoYXJkd2FyZS9yYWRpb3RhcCAqLwogCkBAIC02MTIsNyArNjcxLDkgQEAKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqd2VwX3J4X3RmbTsKIAl1MzIgd2VwX2l2OwogCisJLyogc2VlIGlmYWNlLmMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGludGVyZmFjZXM7CisJc3RydWN0IG11dGV4IGlmbGlzdF9tdHg7CiAKIAkvKgogCSAqIEtleSBsb2NrLCBwcm90ZWN0cyBzZGF0YSdzIGtleV9saXN0IGFuZCBzdGFfaW5mbydzCkBAIC02MjMsMjAgKzY4NCwxOCBAQAogCiAJLyogU2Nhbm5pbmcgYW5kIEJTUyBsaXN0ICovCiAJYm9vbCBzd19zY2FubmluZywgaHdfc2Nhbm5pbmc7CisJc3RydWN0IGNmZzgwMjExX3NzaWQgc2Nhbl9zc2lkOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgaW50X3NjYW5fcmVxOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqc2Nhbl9jaGFubmVsOwogCWludCBzY2FuX2NoYW5uZWxfaWR4OwotCWVudW0gaWVlZTgwMjExX2JhbmQgc2Nhbl9iYW5kOwogCiAJZW51bSB7IFNDQU5fU0VUX0NIQU5ORUwsIFNDQU5fU0VORF9QUk9CRSB9IHNjYW5fc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5fY29tcGxldGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNjYW5fc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpvcGVyX2NoYW5uZWwsICpzY2FuX2NoYW5uZWw7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBvcGVyX2NoYW5uZWxfdHlwZTsKLQl1OCBzY2FuX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0Jc2l6ZV90IHNjYW5fc3NpZF9sZW47Ci0Jc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzX2hhc2hbU1RBX0hBU0hfU0laRV07Ci0Jc3BpbmxvY2tfdCBic3NfbG9jazsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm9wZXJfY2hhbm5lbCwgKmNzYV9jaGFubmVsOwogCiAJLyogU05NUCBjb3VudGVycyAqLwogCS8qIGRvdDExQ291bnRlcnNUYWJsZSAqLwpAQCAtNjQ5LDcgKzcwOCw2IEBACiAJdTMyIGRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50OwogCXUzMiBkb3QxMU11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKIAl1MzIgZG90MTFUcmFuc21pdHRlZEZyYW1lQ291bnQ7Ci0JdTMyIGRvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50OwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKIAlpbnQgdHhfbGVkX2NvdW50ZXIsIHJ4X2xlZF9jb3VudGVyOwpAQCAtNjk2LDExICs3NTQsMTQgQEAKIAl1bnNpZ25lZCBpbnQgd21tX2FjbTsgLyogYml0IGZpZWxkIG9mIEFDTSBiaXRzIChCSVQoODAyLjFEIHRhZykpICovCiAKIAlib29sIHBvd2Vyc2F2ZTsKLQlpbnQgZHluYW1pY19wc190aW1lb3V0OworCWJvb2wgcHNwb2xsaW5nOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkeW5hbWljX3BzX2VuYWJsZV93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkeW5hbWljX3BzX2Rpc2FibGVfd29yazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBkeW5hbWljX3BzX3RpbWVyOwogCisJaW50IHVzZXJfcG93ZXJfbGV2ZWw7IC8qIGluIGRCbSAqLworCWludCBwb3dlcl9jb25zdHJfbGV2ZWw7IC8qIGluIGRCbSAqLworCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgbG9jYWxfZGVidWdmc2RlbnRyaWVzIHsKIAkJc3RydWN0IGRlbnRyeSAqcmNkaXI7CkBAIC03MTIsNiArNzczLDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqbG9uZ19yZXRyeV9saW1pdDsKIAkJc3RydWN0IGRlbnRyeSAqdG90YWxfcHNfYnVmZmVyZWQ7CiAJCXN0cnVjdCBkZW50cnkgKndlcF9pdjsKKwkJc3RydWN0IGRlbnRyeSAqdHNmOwogCQlzdHJ1Y3QgZGVudHJ5ICpzdGF0aXN0aWNzOwogCQlzdHJ1Y3QgbG9jYWxfZGVidWdmc2RlbnRyaWVzX3N0YXRzZGVudHJpZXMgewogCQkJc3RydWN0IGRlbnRyeSAqdHJhbnNtaXR0ZWRfZnJhZ21lbnRfY291bnQ7CkBAIC04MDUsNiArODY3LDcgQEAKIAl1OCAqY291bnRyeV9lbGVtOwogCXU4ICpwd3JfY29uc3RyX2VsZW07CiAJdTggKnF1aWV0X2VsZW07IAkvKiBmaXJzdCBxdWl0ZSBlbGVtZW50ICovCisJdTggKnRpbWVvdXRfaW50OwogCiAJLyogbGVuZ3RoIG9mIHRoZW0sIHJlc3BlY3RpdmVseSAqLwogCXU4IHNzaWRfbGVuOwpAQCAtODMyLDYgKzg5NSw3IEBACiAJdTggcHdyX2NvbnN0cl9lbGVtX2xlbjsKIAl1OCBxdWlldF9lbGVtX2xlbjsKIAl1OCBudW1fb2ZfcXVpZXRfZWxlbTsJLyogY2FuIGJlIG1vcmUgdGhlIG9uZSAqLworCXU4IHRpbWVvdXRfaW50X2xlbjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqaHdfdG9fbG9jYWwoCkBAIC04NjAsMzQgKzkyNCw0MyBAQAogdm9pZCBpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgICB1MzIgY2hhbmdlZCk7CiB2b2lkIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3UzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCiAvKiB3aXJlbGVzcyBleHRlbnNpb25zICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGllZWU4MDIxMV9pd19oYW5kbGVyX2RlZjsKIAotLyogU1RBL0lCU1MgY29kZSAqLworLyogU1RBIGNvZGUgKi8KIHZvaWQgaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci12b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworaW50IGllZWU4MDIxMV9zdGFfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKTsKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbik7CiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCk7Ci12b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKTsKLXN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJdTggKmJzc2lkLCB1OCAqYWRkciwgdTY0IHN1cHBfcmF0ZXMpOwordm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKTsKIGludCBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbik7Ci11MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXU2NCBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKLXZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZHN0LAotCQkJICAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7Cit2b2lkIGllZWU4MDIxMV9zZW5kX3BzcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKKworLyogSUJTUyBjb2RlICovCitpbnQgaWVlZTgwMjExX2lic3NfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbik7CitpbnQgaWVlZTgwMjExX2lic3NfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCk7Cit2b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKK3N0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJdTggKmJzc2lkLCB1OCAqYWRkciwgdTMyIHN1cHBfcmF0ZXMpOwogCiAvKiBzY2FuL0JTUyBoYW5kbGluZyAqLwordm9pZCBpZWVlODAyMTFfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpbnQgaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOworCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKIGludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CkBAIC04OTUsMjkgKzk2OCwyOCBAQAogaWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgICBjaGFyICppZSwgc2l6ZV90IGxlbik7CiAKIHZvaWQgaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX3NjYW5fZmFpbGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhLAotCQkJIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOworCQkJIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgIHNpemVfdCBsZW4sCiAJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgaW50IGZyZXEsIGJvb2wgYmVhY29uKTsKLXN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgYm9vbCBiZWFjb24pOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpOwordm9pZCBpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkLAorCQkJICAgICBpbnQgZnJlcSwgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIAogLyogaW50ZXJmYWNlIGhhbmRsaW5nICovCiBpbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTk0MywxMCArMTAxNSwxNSBAQAogCQkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodGksCiAJCQl1MTYgYXBfaHRfY2FwX2ZsYWdzKTsKIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pOwordm9pZCBpZWVlODAyMTFfc2VuZF9kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsCiAJCQkJdTE2IHRpZCwgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7Ci12b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYWRkcik7Cit2b2lkIF9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pOwpAQCAtOTU5LDEwICsxMDM2LDI1IEBACiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKTsKIAoraW50IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKTsKKwogLyogU3BlY3RydW0gbWFuYWdlbWVudCAqLwogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgICAgc2l6ZV90IGxlbik7Cit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyk7Cit2b2lkIGllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgdTE2IGNhcGFiX2luZm8sIHU4ICpwd3JfY29uc3RyX2VsZW0sCisJCQkJIHU4IHB3cl9jb25zdHJfZWxlbV9sZW4pOworCisvKiBTdXNwZW5kL3Jlc3VtZSAqLworaW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IF9faWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKIC8qIHV0aWxpdHkgZnVuY3Rpb25zL2NvbnN0YW50cyAqLwogZXh0ZXJuIHZvaWQgKm1hYzgwMjExX3dpcGh5X3ByaXZpZDsgLyogZm9yIHdpcGh5IHByaXZpZCAqLwpAQCAtOTgwLDE3ICsxMDcyLDM5IEBACiB2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAogCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcyk7CiBpbnQgaWVlZTgwMjExX3NldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgZnJlcSk7Ci11NjQgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKK3UzMiBpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIAogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19lbmFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19kaXNhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBpbnQgcG93ZXJzYXZlKTsKIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwogdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwordm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKKwkJCQkgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwordm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKKwkJCQkgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOworCit2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgdTE2IHRyYW5zYWN0aW9uLCB1MTYgYXV0aF9hbGcsCisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAorCQkJIGNvbnN0IHU4ICpic3NpZCwgaW50IGVuY3J5cHQpOwordm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCisJCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJICAgICAgdTggKmllLCBzaXplX3QgaWVfbGVuKTsKKwordm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgY29uc3QgdTggKnN1cHBfcmF0ZXMpOwordTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX05PSU5MSU5FCiAjZGVmaW5lIGRlYnVnX25vaW5saW5lIG5vaW5saW5lCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGI5MDc0ODIuLmY5ZjI3YjkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0yMSw2ICsyMSwyMyBAQAogI2luY2x1ZGUgIm1lc2guaCIKICNpbmNsdWRlICJsZWQuaCIKIAorLyoqCisgKiBET0M6IEludGVyZmFjZSBsaXN0IGxvY2tpbmcKKyAqCisgKiBUaGUgaW50ZXJmYWNlIGxpc3QgaW4gZWFjaCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIGlzIHByb3RlY3RlZAorICogdGhyZWUtZm9sZDoKKyAqCisgKiAoMSkgbW9kaWZpY2F0aW9ucyBtYXkgb25seSBiZSBkb25lIHVuZGVyIHRoZSBSVE5MCisgKiAoMikgbW9kaWZpY2F0aW9ucyBhbmQgcmVhZGVycyBhcmUgcHJvdGVjdGVkIGFnYWluc3QgZWFjaCBvdGhlciBieQorICogICAgIHRoZSBpZmxpc3RfbXR4LgorICogKDMpIG1vZGlmaWNhdGlvbnMgYXJlIGRvbmUgaW4gYW4gUkNVIG1hbm5lciBzbyBhdG9taWMgcmVhZGVycworICogICAgIGNhbiB0cmF2ZXJzZSB0aGUgbGlzdCBpbiBSQ1Utc2FmZSBibG9ja3MuCisgKgorICogQXMgYSBjb25zZXF1ZW5jZSwgcmVhZHMgKHRyYXZlcnNhbHMpIG9mIHRoZSBsaXN0IGNhbiBiZSBwcm90ZWN0ZWQKKyAqIGJ5IGVpdGhlciB0aGUgUlROTCwgdGhlIGlmbGlzdF9tdHggb3IgUkNVLgorICovCisKKwogc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpbnQgbWVzaGhkcmxlbjsKQEAgLTIxOSw3ICsyMzYsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQllbHNlCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKQEAgLTMwNCwxMSArMzI0LDEwIEBACiAJICogeWV0IGJlIGVmZmVjdGl2ZS4gVHJpZ2dlciBleGVjdXRpb24gb2YgaWVlZTgwMjExX3N0YV93b3JrCiAJICogdG8gZml4IHRoaXMuCiAJICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JfQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWdkLndvcmspOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKIApAQCAtMzQ1LDEzICszNjQsMjQgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewogCQlpZiAoc3RhLT5zZGF0YSA9PSBzZGF0YSkKLQkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHNkYXRhLAotCQkJCQkJCSAgICBzdGEtPnN0YS5hZGRyKTsKKwkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKgorCSAqIEFubm91bmNlIHRoYXQgd2UgYXJlIGxlYXZpbmcgdGhlIG5ldHdvcmssIGluIGNhc2Ugd2UgYXJlIGEKKwkgKiBzdGF0aW9uIGludGVyZmFjZSB0eXBlLiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcmVtb3ZpbmcKKwkgKiBhbGwgc3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHN0YV9pbmZvX2ZsdXNoLCBvdGhlcndpc2UgU1RBCisJICogaW5mb3JtYXRpb24gd2lsbCBiZSBnb25lIGFuZCBubyBhbm5vdW5jZSBiZWluZyBkb25lLgorCSAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPnUubWdkLnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKKwkJCWllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc2RhdGEsCisJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCX0KKworCS8qCiAJICogUmVtb3ZlIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnRlcmZhY2UuCiAJICoKIAkgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtPnJlbW92ZV9pbnRlcmZhY2UoKQpAQCAtMzgzLDYgKzQxMyw4IEBACiAJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfcHJvbWlzY3MpOwogCiAJZGV2X21jX3Vuc3luYyhsb2NhbC0+bWRldiwgZGV2KTsKKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIAogCS8qIEFQcyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50ICovCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewpAQCAtNDM0LDE0ICs0NjYsOSBAQAogCQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQkvKiBBbm5vdW5jZSB0aGF0IHdlIGFyZSBsZWF2aW5nIHRoZSBuZXR3b3JrLiAqLwotCQlpZiAoc2RhdGEtPnUuc3RhLnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKLQkJCWllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc2RhdGEsCi0JCQkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQkJbWVtc2V0KHNkYXRhLT51LnN0YS5ic3NpZCwgMCwgRVRIX0FMRU4pOwotCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUuc3RhLnRpbWVyKTsKKwkJbWVtc2V0KHNkYXRhLT51Lm1nZC5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLmNoc3dpdGNoX3RpbWVyKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC50aW1lcik7CiAJCS8qCiAJCSAqIElmIHRoZSB0aW1lciBmaXJlZCB3aGlsZSB3ZSB3YWl0ZWQgZm9yIGl0LCBpdCB3aWxsIGhhdmUKIAkJICogcmVxdWV1ZWQgdGhlIHdvcmsuIE5vdyB0aGUgd29yayB3aWxsIGJlIHJ1bm5pbmcgYWdhaW4KQEAgLTQ0OSw3ICs0NzYsOCBAQAogCQkgKiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgd2hpY2gsIGF0IHRoaXMgcG9pbnQsCiAJCSAqIGl0IG5vIGxvbmdlciBpcy4KIAkJICovCi0JCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51LnN0YS53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLndvcmspOworCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2QuY2hzd2l0Y2hfd29yayk7CiAJCS8qCiAJCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCiAJCSAqIENhbGwgc3luY2hyb25pemVfcmN1KCkgdG8gd2FpdCBmb3IgdGhlIFJYIHBhdGgKQEAgLTQ1NywxMiArNDg1LDIyIEBACiAJCSAqIGZyYW1lcyBhdCB0aGlzIHZlcnkgdGltZSBvbiBhbm90aGVyIENQVS4KIAkJICovCiAJCXN5bmNocm9uaXplX3JjdSgpOwotCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51LnN0YS5za2JfcXVldWUpOworCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUpOwogCi0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5leHRyYV9pZSk7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZSA9IE5VTEw7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZV9sZW4gPSAwOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCB8CisJCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZSA9IE5VTEw7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZV9sZW4gPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQltZW1zZXQoc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lmlic3MudGltZXIpOworCQkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOworCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSk7CisJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpAQCAtNTAxLDcgKzUzOSw3IEBACiAJCQkgKiBzY2FuIGV2ZW50IHRvIHVzZXJzcGFjZSAtLSB0aGUgc2NhbiBpcyBpbmNvbXBsZXRlLgogCQkJICovCiAJCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKQotCQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3KTsKKwkJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odywgdHJ1ZSk7CiAJCX0KIAogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwpAQCAtNTY5LDE5ICs2MDcsNiBAQAogCWRldl9tY19zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlldGhlcl9zZXR1cChkZXYpOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQ7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9IGllZWU4MDIxMV9vcGVuOwotCWRldi0+c3RvcCA9IGllZWU4MDIxMV9zdG9wOwotCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwotCS8qIHdlIHdpbGwgdmFsaWRhdGUgdGhlIGFkZHJlc3Mgb3Vyc2VsdmVzIGluIC0+b3BlbiAqLwotCWRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7Ci19CiAvKgogICogQ2FsbGVkIHdoZW4gdGhlIG5ldGRldiBpcyByZW1vdmVkIG9yLCBieSB0aGUgY29kZSBiZWxvdywgYmVmb3JlCiAgKiB0aGUgaW50ZXJmYWNlIHR5cGUgY2hhbmdlcy4KQEAgLTYyMSwxMiArNjQ2LDIwIEBACiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQkJbWVzaF9ybWNfZnJlZShzZGF0YSk7CiAJCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXFfaWVzKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVzcF9pZXMpOwotCQlrZnJlZV9za2Ioc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApOworCQlrZnJlZV9za2Ioc2RhdGEtPnUuaWJzcy5wcm9iZV9yZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuYXNzb2NyZXFfaWVzKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVzcF9pZXMpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfcHJvYmVyZXEpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfcHJvYmVyZXNwKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX2F1dGgpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfYXNzb2NyZXEpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfcmVhc3NvY3JlcSk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9kZWF1dGgpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfZGlzYXNzb2MpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CkBAIC02NDIsNiArNjc1LDM0IEBACiAJV0FSTl9PTihmbHVzaGVkKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHsKKwkubmRvX29wZW4JCT0gaWVlZTgwMjExX29wZW4sCisJLm5kb19zdG9wCQk9IGllZWU4MDIxMV9zdG9wLAorCS5uZG9fdW5pbml0CQk9IGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpZWVlODAyMTFfb3BlbiwKKwkubmRvX3N0b3AJCT0gaWVlZTgwMjExX3N0b3AsCisJLm5kb191bmluaXQJCT0gaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7CisJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7Cit9CisKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhbiBpbnRlcmZhY2UgdG8gYSBzcGVjaWZpYyB0eXBlLgogICovCkBAIC02NTMsNyArNzE0LDcgQEAKIAogCS8qIGFuZCBzZXQgc29tZSB0eXBlLWRlcGVuZGVudCB2YWx1ZXMgKi8KIAlzZGF0YS0+dmlmLnR5cGUgPSB0eXBlOwotCXNkYXRhLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0OworCXNkYXRhLT5kZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CiAJc2RhdGEtPndkZXYuaWZ0eXBlID0gdHlwZTsKIAogCS8qIG9ubHkgbW9uaXRvciBkaWZmZXJzICovCkBAIC02NjUsMTYgKzcyNiwxOCBAQAogCQlJTklUX0xJU1RfSEVBRCgmc2RhdGEtPnUuYXAudmxhbnMpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHNkYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJCWllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCXNkYXRhLT5kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCQlzZGF0YS0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0OworCQlzZGF0YS0+ZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tb25pdG9yaWZfb3BzOwogCQlzZGF0YS0+dS5tbnRyX2ZsYWdzID0gTU9OSVRPUl9GTEFHX0NPTlRST0wgfAogCQkJCSAgICAgIE1PTklUT1JfRkxBR19PVEhFUl9CU1M7CiAJCWJyZWFrOwpAQCAtNzU1LDYgKzgxOCw3IEBACiAKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiAKIAkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KIAlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNzgwLDE1ICs4NDQsMTUgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQluZGV2LT51bmluaXQgPSBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGE7Ci0KIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJgogCSAgICBwYXJhbXMgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKIAkJaWVlZTgwMjExX3NkYXRhX3NldF9tZXNoX2lkKHNkYXRhLAogCQkJCQkgICAgcGFyYW1zLT5tZXNoX2lkX2xlbiwKIAkJCQkJICAgIHBhcmFtcy0+bWVzaF9pZCk7CiAKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9hZGRfdGFpbF9yY3UoJnNkYXRhLT5saXN0LCAmbG9jYWwtPmludGVyZmFjZXMpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJaWYgKG5ld19kZXYpCiAJCSpuZXdfZGV2ID0gbmRldjsKQEAgLTgwNCw3ICs4NjgsMTAgQEAKIHsKIAlBU1NFUlRfUlROTCgpOwogCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2RlbF9yY3UoJnNkYXRhLT5saXN0KTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZShzZGF0YS0+ZGV2KTsKIH0KQEAgLTgyMCw3ICs4ODcsMTYgQEAKIAlBU1NFUlRfUlROTCgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCB0bXAsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQkvKgorCQkgKiB3ZSBjYW5ub3QgaG9sZCB0aGUgaWZsaXN0X210eCBhY3Jvc3MgdW5yZWdpc3Rlcl9uZXRkZXZpY2UsCisJCSAqIGJ1dCB3ZSBvbmx5IG5lZWQgdG8gaG9sZCBpdCBmb3IgbGlzdCBtb2RpZmljYXRpb25zIHRvIGxvY2sKKwkJICogb3V0IHJlYWRlcnMgc2luY2Ugd2UncmUgdW5kZXIgdGhlIFJUTkwgaGVyZSBhcyBhbGwgb3RoZXIKKwkJICogd3JpdGVycy4KKwkJICovCisJCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAkJbGlzdF9kZWwoJnNkYXRhLT5saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisKIAkJdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc2RhdGEtPmRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDk5OWY3YWEuLjY4N2FjZjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogI2luY2x1ZGUgImRlYnVnZnNfa2V5LmgiCiAjaW5jbHVkZSAiYWVzX2NjbS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCiAKIAogLyoqCkBAIC00Nyw3ICs0OCw2IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07Ci1zdGF0aWMgY29uc3QgdTggemVyb19hZGRyW0VUSF9BTEVOXTsKIAogLyoga2V5IG11dGV4OiB1c2VkIHRvIHN5bmNocm9uaXNlIHRvZG8gcnVubmVycyAqLwogc3RhdGljIERFRklORV9NVVRFWChrZXlfbXV0ZXgpOwpAQCAtMTA4LDI5ICsxMDgsMTggQEAKIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmtleV9tdXRleCkpOwogfQogCi1zdGF0aWMgY29uc3QgdTggKmdldF9tYWNfZm9yX2tleShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpnZXRfc3RhX2Zvcl9rZXkoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQljb25zdCB1OCAqYWRkciA9IGJjYXN0X2FkZHI7Ci0KLQkvKgotCSAqIElmIHdlJ3JlIGFuIEFQIHdlIHdvbid0IGV2ZXIgcmVjZWl2ZSBmcmFtZXMgd2l0aCBhIG5vbi1XRVAKLQkgKiBncm91cCBrZXkgc28gd2UgdGVsbCB0aGUgZHJpdmVyIHRoYXQgYnkgdXNpbmcgdGhlIHplcm8gTUFDCi0JICogYWRkcmVzcyB0byBpbmRpY2F0ZSBhIHRyYW5zbWl0LW9ubHkga2V5LgotCSAqLwotCWlmIChrZXktPmNvbmYuYWxnICE9IEFMR19XRVAgJiYKLQkgICAgKGtleS0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgICBrZXktPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSkKLQkJYWRkciA9IHplcm9fYWRkcjsKLQogCWlmIChrZXktPnN0YSkKLQkJYWRkciA9IGtleS0+c3RhLT5zdGEuYWRkcjsKKwkJcmV0dXJuICZrZXktPnN0YS0+c3RhOwogCi0JcmV0dXJuIGFkZHI7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JY29uc3QgdTggKmFkZHI7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlpbnQgcmV0OwogCiAJYXNzZXJ0X2tleV9sb2NrKCk7CkBAIC0xMzksMTEgKzEyOCwxNiBAQAogCWlmICgha2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KQogCQlyZXR1cm47CiAKLQlhZGRyID0gZ2V0X21hY19mb3Jfa2V5KGtleSk7CisJc3RhID0gZ2V0X3N0YV9mb3Jfa2V5KGtleSk7CisKKwlzZGF0YSA9IGtleS0+c2RhdGE7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkgICAgIHUuYXApOwogCiAJcmV0ID0ga2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KGxvY2FsX3RvX2h3KGtleS0+bG9jYWwpLCBTRVRfS0VZLAotCQkJCSAgICAgICBrZXktPnNkYXRhLT5kZXYtPmRldl9hZGRyLCBhZGRyLAotCQkJCSAgICAgICAma2V5LT5jb25mKTsKKwkJCQkgICAgICAgJnNkYXRhLT52aWYsIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAoIXJldCkgewogCQlzcGluX2xvY2soJnRvZG9fbG9jayk7CkBAIC0xNTUsMTIgKzE0OSwxMyBAQAogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExLSVzOiBmYWlsZWQgdG8gc2V0IGtleSAiCiAJCSAgICAgICAiKCVkLCAlcE0pIHRvIGhhcmR3YXJlICglZClcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGtleS0+bG9jYWwtPmh3LndpcGh5KSwKLQkJICAgICAgIGtleS0+Y29uZi5rZXlpZHgsIGFkZHIsIHJldCk7CisJCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBzdGEgPyBzdGEtPmFkZHIgOiBiY2FzdF9hZGRyLCByZXQpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQljb25zdCB1OCAqYWRkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCWludCByZXQ7CiAKIAlhc3NlcnRfa2V5X2xvY2soKTsKQEAgLTE3NiwxNyArMTcxLDIyIEBACiAJfQogCXNwaW5fdW5sb2NrKCZ0b2RvX2xvY2spOwogCi0JYWRkciA9IGdldF9tYWNfZm9yX2tleShrZXkpOworCXN0YSA9IGdldF9zdGFfZm9yX2tleShrZXkpOworCXNkYXRhID0ga2V5LT5zZGF0YTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKIAogCXJldCA9IGtleS0+bG9jYWwtPm9wcy0+c2V0X2tleShsb2NhbF90b19odyhrZXktPmxvY2FsKSwgRElTQUJMRV9LRVksCi0JCQkJICAgICAgIGtleS0+c2RhdGEtPmRldi0+ZGV2X2FkZHIsIGFkZHIsCi0JCQkJICAgICAgICZrZXktPmNvbmYpOworCQkJCSAgICAgICAmc2RhdGEtPnZpZiwgc3RhLCAma2V5LT5jb25mKTsKIAogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUiAibWFjODAyMTEtJXM6IGZhaWxlZCB0byByZW1vdmUga2V5ICIKIAkJICAgICAgICIoJWQsICVwTSkgZnJvbSBoYXJkd2FyZSAoJWQpXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShrZXktPmxvY2FsLT5ody53aXBoeSksCi0JCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBhZGRyLCByZXQpOworCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIAogCXNwaW5fbG9jaygmdG9kb19sb2NrKTsKIAlrZXktPmZsYWdzICY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKQEAgLTIxNiwxMyArMjE2LDM4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZAorX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7CisKKwlpZiAoaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMgJiYKKwkgICAgaWR4IDwgTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykKKwkJa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSwga2V5KTsKKworCWlmIChrZXkpCisJCWFkZF90b2RvKGtleSwgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZKTsKK30KKwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7CisJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIGlkeCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworfQorCiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKm9sZCwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKm5ldykKIHsKLQlpbnQgaWR4LCBkZWZrZXk7CisJaW50IGlkeCwgZGVma2V5LCBkZWZtZ210a2V5OwogCiAJaWYgKG5ldykKIAkJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJnNkYXRhLT5rZXlfbGlzdCk7CkBAIC0yMzgsMTMgKzI2MywxOSBAQAogCQkJaWR4ID0gbmV3LT5jb25mLmtleWlkeDsKIAogCQlkZWZrZXkgPSBvbGQgJiYgc2RhdGEtPmRlZmF1bHRfa2V5ID09IG9sZDsKKwkJZGVmbWdtdGtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSA9PSBvbGQ7CiAKIAkJaWYgKGRlZmtleSAmJiAhbmV3KQogCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCAtMSk7CisJCWlmIChkZWZtZ210a2V5ICYmICFuZXcpCisJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwgLTEpOwogCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+a2V5c1tpZHhdLCBuZXcpOwogCQlpZiAoZGVma2V5ICYmIG5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgbmV3LT5jb25mLmtleWlkeCk7CisJCWlmIChkZWZtZ210a2V5ICYmIG5ldykKKwkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLAorCQkJCQkJCSBuZXctPmNvbmYua2V5aWR4KTsKIAl9CiAKIAlpZiAob2xkKSB7CkBAIC0yNjMsNyArMjk0LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCi0JQlVHX09OKGlkeCA8IDAgfHwgaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMpOworCUJVR19PTihpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKTsKIAogCWtleSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfa2V5KSArIGtleV9sZW4sIEdGUF9LRVJORUwpOwogCWlmICgha2V5KQpAQCAtMjkyLDYgKzMyMywxMCBAQAogCQlrZXktPmNvbmYuaXZfbGVuID0gQ0NNUF9IRFJfTEVOOwogCQlrZXktPmNvbmYuaWN2X2xlbiA9IENDTVBfTUlDX0xFTjsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWtleS0+Y29uZi5pdl9sZW4gPSAwOworCQlrZXktPmNvbmYuaWN2X2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21taWUpOworCQlicmVhazsKIAl9CiAJbWVtY3B5KGtleS0+Y29uZi5rZXksIGtleV9kYXRhLCBrZXlfbGVuKTsKIAlJTklUX0xJU1RfSEVBRCgma2V5LT5saXN0KTsKQEAgLTMwOSw2ICszNDQsMTkgQEAKIAkJfQogCX0KIAorCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDKSB7CisJCS8qCisJCSAqIEluaXRpYWxpemUgQUVTIGtleSBzdGF0ZSBoZXJlIGFzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0CisJCSAqIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIGV2ZXJ5IHBhY2tldC4KKwkJICovCisJCWtleS0+dS5hZXNfY21hYy50Zm0gPQorCQkJaWVlZTgwMjExX2Flc19jbWFjX2tleV9zZXR1cChrZXlfZGF0YSk7CisJCWlmICgha2V5LT51LmFlc19jbWFjLnRmbSkgeworCQkJa2ZyZWUoa2V5KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCiAJcmV0dXJuIGtleTsKIH0KIApAQCAtMzUyLDcgKzQwMCw3IEBACiAJCQkgKi8KIAogCQkJLyogc2FtZSBoZXJlLCB0aGUgQVAgY291bGQgYmUgdXNpbmcgUW9TICovCi0JCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51LnN0YS5ic3NpZCk7CisJCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51Lm1nZC5ic3NpZCk7CiAJCQlpZiAoYXApIHsKIAkJCQlpZiAodGVzdF9zdGFfZmxhZ3MoYXAsIFdMQU5fU1RBX1dNRSkpCiAJCQkJCWtleS0+Y29uZi5mbGFncyB8PQpAQCAtNDYyLDYgKzUxMCw4IEBACiAKIAlpZiAoa2V5LT5jb25mLmFsZyA9PSBBTEdfQ0NNUCkKIAkJaWVlZTgwMjExX2Flc19rZXlfZnJlZShrZXktPnUuY2NtcC50Zm0pOworCWlmIChrZXktPmNvbmYuYWxnID09IEFMR19BRVNfQ01BQykKKwkJaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKGtleS0+dS5hZXNfY21hYy50Zm0pOwogCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmUoa2V5KTsKIAogCWtmcmVlKGtleSk7CkBAIC00ODQsNiArNTM0LDcgQEAKIAkJbGlzdF9kZWxfaW5pdCgma2V5LT50b2RvKTsKIAkJdG9kb2ZsYWdzID0ga2V5LT5mbGFncyAmIChLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0RFRktFWSB8CisJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0hXQUNDRUxfUkVNT1ZFIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0RFTEVURSk7CkBAIC01MDEsNiArNTUyLDExIEBACiAJCQlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoa2V5LT5zZGF0YSk7CiAJCQl3b3JrX2RvbmUgPSB0cnVlOwogCQl9CisJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkpIHsKKwkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KGtleS0+c2RhdGEpOworCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoa2V5LT5zZGF0YSk7CisJCQl3b3JrX2RvbmUgPSB0cnVlOworCQl9CiAJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKSB7CiAJCQlpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpOwogCQkJd29ya19kb25lID0gdHJ1ZTsKQEAgLTUzNiw2ICs1OTIsNyBAQAogCWllZWU4MDIxMV9rZXlfbG9jaygpOwogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHNkYXRhKTsKKwlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzZGF0YSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIHRtcCwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCA0MjU4MTZlLi4yMTVkM2VmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC00Niw2ICs0Niw4IEBACiAgKglhY2NlbGVyYXRpb24uCiAgKiBAS0VZX0ZMQUdfVE9ET19ERUZLRVk6IEtleSBpcyBkZWZhdWx0IGtleSBhbmQgZGVidWdmcyBuZWVkcyB0byBiZSB1cGRhdGVkLgogICogQEtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlM6IEtleSBuZWVkcyB0byBiZSBhZGRlZCB0byBkZWJ1Z2ZzLgorICogQEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWTogS2V5IGlzIGRlZmF1bHQgbWFuYWdlbWVudCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMKKyAqCXRvIGJlIHVwZGF0ZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2ludGVybmFsX2tleV9mbGFncyB7CiAJS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUJPSBCSVQoMCksCkBAIC01NCw2ICs1Niw3IEBACiAJS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRQk9IEJJVCgzKSwKIAlLRVlfRkxBR19UT0RPX0RFRktFWQkJPSBCSVQoNCksCiAJS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUwk9IEJJVCg1KSwKKwlLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkJPSBCSVQoNiksCiB9OwogCiBzdHJ1Y3QgdGtpcF9jdHggewpAQCAtOTYsNiArOTksMTYgQEAKIAkJCXU4IHR4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOwogCQkJdTggcnhfY3J5cHRvX2J1Zls2ICogQUVTX0JMT0NLX0xFTl07CiAJCX0gY2NtcDsKKwkJc3RydWN0IHsKKwkJCXU4IHR4X3BuWzZdOworCQkJdTggcnhfcG5bNl07CisJCQlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCQkJdTMyIHJlcGxheXM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ1JlcGxheXMgKi8KKwkJCXUzMiBpY3ZlcnJvcnM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ0lDVkVycm9ycyAqLworCQkJLyogc2NyYXRjaCBidWZmZXJzIGZvciB2aXJ0X3RvX3BhZ2UoKSAoY3J5cHRvIEFQSSkgKi8KKwkJCXU4IHR4X2NyeXB0b19idWZbMiAqIEFFU19CTE9DS19MRU5dOworCQkJdTggcnhfY3J5cHRvX2J1ZlsyICogQUVTX0JMT0NLX0xFTl07CisJCX0gYWVzX2NtYWM7CiAJfSB1OwogCiAJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMga2V5IGhhcyBiZWVuIHVzZWQgKi8KQEAgLTExNCw2ICsxMjcsNyBAQAogCQlzdHJ1Y3QgZGVudHJ5ICp0eF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyeF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyZXBsYXlzOworCQlzdHJ1Y3QgZGVudHJ5ICppY3ZlcnJvcnM7CiAJCXN0cnVjdCBkZW50cnkgKmtleTsKIAkJc3RydWN0IGRlbnRyeSAqaWZpbmRleDsKIAkJaW50IGNudDsKQEAgLTE0MCw2ICsxNTQsOCBAQAogCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpOwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIGludCBpZHgpOwogdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2VuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCAyNGIxNDM2Li5mMzhkYjRkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTE2OCwyNCArMTY4LDY3IEBACiAJCXJldHVybiAwOwogCiAJbWVtc2V0KCZjb25mLCAwLCBzaXplb2YoY29uZikpOwotCWNvbmYuY2hhbmdlZCA9IGNoYW5nZWQ7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQljb25mLmJzc2lkID0gc2RhdGEtPnUuc3RhLmJzc2lkOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJY29uZi5ic3NpZCA9IHNkYXRhLT51Lm1nZC5ic3NpZDsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5pYnNzLmJzc2lkOwogCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJY29uZi5ic3NpZCA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOwogCWVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKLQkJdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKKwkJc3RhdGljIGNvbnN0IHU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CiAJCWNvbmYuYnNzaWQgPSB6ZXJvOwogCX0gZWxzZSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZG8gbm90IHdhcm4gdG8gc2ltcGxpZnkgY2FsbGVyIGluIHNjYW4uYyAqLworCQljaGFuZ2VkICY9IH5JRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRDsKKwkJaWYgKFdBUk5fT04oY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hhbmdlZCAmPSB+SUVFRTgwMjExX0lGQ0NfQkVBQ09OOworCQlicmVhazsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKSB7CisJCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcpIHsKKwkJCWNvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEJlYWNvbiBzaG91bGQgYmUgZW5hYmxlZCwgYnV0IEFQIG1vZGUgbXVzdAorCQkJICogY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGJlYWNvbiBjb25maWd1cmVkLgorCQkJICovCisJCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPQorCQkJCQkhIXJjdV9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSAhIXNkYXRhLT51Lmlic3MucHJvYmVfcmVzcDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSB0cnVlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBub3QgcmVhY2hlZCAqLworCQkJCVdBUk5fT04oMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKIAlpZiAoV0FSTl9PTighY29uZi5ic3NpZCAmJiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJY29uZi5jaGFuZ2VkID0gY2hhbmdlZDsKKwogCXJldHVybiBsb2NhbC0+b3BzLT5jb25maWdfaW50ZXJmYWNlKGxvY2FsX3RvX2h3KGxvY2FsKSwKIAkJCQkJICAgICZzZGF0YS0+dmlmLCAmY29uZik7CiB9CkBAIC0yMDgsMjYgKzI1MSwyMiBAQAogCX0KIAogCWlmIChjaGFuICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwgfHwKLQkgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5ody5jb25mLmh0LmNoYW5uZWxfdHlwZSkgeworCSAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlKSB7CiAJCWxvY2FsLT5ody5jb25mLmNoYW5uZWwgPSBjaGFuOwotCQlsb2NhbC0+aHcuY29uZi5odC5jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7Ci0JCXN3aXRjaCAoY2hhbm5lbF90eXBlKSB7Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgotCQkJbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoKLQkJY2FzZSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM6Ci0JCQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9CisJCWxvY2FsLT5ody5jb25mLmNoYW5uZWxfdHlwZSA9IGNoYW5uZWxfdHlwZTsKIAkJY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDsKIAl9CiAKLQlpZiAoIWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsKQorCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcpCiAJCXBvd2VyID0gY2hhbi0+bWF4X3Bvd2VyOwogCWVsc2UKLQkJcG93ZXIgPSBtaW4oY2hhbi0+bWF4X3Bvd2VyLCBsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCk7CisJCXBvd2VyID0gbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA/CisJCQkoY2hhbi0+bWF4X3Bvd2VyIC0gbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCkgOgorCQkJY2hhbi0+bWF4X3Bvd2VyOworCisJaWYgKGxvY2FsLT51c2VyX3Bvd2VyX2xldmVsKQorCQlwb3dlciA9IG1pbihwb3dlciwgbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwpOworCiAJaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IHBvd2VyKSB7CiAJCWNoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSOwogCQlsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCA9IHBvd2VyOwpAQCAtNjY3LDcgKzcwNiw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7Ci0JaW50IHByaXZfc2l6ZTsKKwlpbnQgcHJpdl9zaXplLCBpOwogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAKIAkvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLgpAQCAtNjk1LDYgKzczNCwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCXdpcGh5LT5wcml2aWQgPSBtYWM4MDIxMV93aXBoeV9wcml2aWQ7CisJd2lwaHktPm1heF9zY2FuX3NzaWRzID0gNDsKKwkvKiBZZXMsIHB1dHRpbmcgY2ZnODAyMTFfYnNzIGludG8gaWVlZTgwMjExX2JzcyBpcyBhIGhhY2sgKi8KKwl3aXBoeS0+YnNzX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2JzcykgLQorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfYnNzKTsKIAogCWxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJbG9jYWwtPmh3LndpcGh5ID0gd2lwaHk7CkBAIC03MjIsNiArNzY1LDcgQEAKIAlsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkID0gdHJ1ZTsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+aW50ZXJmYWNlcyk7CisJbXV0ZXhfaW5pdCgmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5rZXlfbG9jayk7CiAKQEAgLTczNiw2ICs3ODAsMTEgQEAKIAlzZXR1cF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsCiAJCSAgICBpZWVlODAyMTFfZHluYW1pY19wc190aW1lciwgKHVuc2lnbmVkIGxvbmcpIGxvY2FsKTsKIAorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzsgaSsrKQorCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbaV0gPSAtMTsKKwkvKiB1c2luZyBhbiBzOCB3b24ndCB3b3JrIHdpdGggbW9yZSB0aGFuIHRoYXQgKi8KKwlCVUlMRF9CVUdfT04oSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgPiAxMjcpOworCiAJc3RhX2luZm9faW5pdChsb2NhbCk7CiAKIAl0YXNrbGV0X2luaXQoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQsIGllZWU4MDIxMV90eF9wZW5kaW5nLApAQCAtNzU0LDYgKzgwMywyMyBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHcpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdCwKKwkubmRvX29wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW4sCisJLm5kb19zdG9wID0gaWVlZTgwMjExX21hc3Rlcl9zdG9wLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZWxlY3RfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX21hc3Rlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbWRldikKK3sKKwltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwltZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tYXN0ZXJfb3BzOworCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7CisJbWRldi0+dHhfcXVldWVfbGVuID0gMTAwMDsKKwltZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOworfQorCiBpbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwpAQCAtNzYxLDI1ICs4MjcsMzMgQEAKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXY7CisJaW50IGNoYW5uZWxzLCBpLCBqOwogCiAJLyoKIAkgKiBnZW5lcmljIGNvZGUgZ3VhcmFudGVlcyBhdCBsZWFzdCBvbmUgYmFuZCwKIAkgKiBzZXQgdGhpcyB2ZXJ5IGVhcmx5IGJlY2F1c2UgbXVjaCBjb2RlIGFzc3VtZXMKIAkgKiB0aGF0IGh3LmNvbmYuY2hhbm5lbCBpcyBhc3NpZ25lZAogCSAqLworCWNoYW5uZWxzID0gMDsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCiAJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQkJaWYgKHNiYW5kKSB7CisJCWlmIChzYmFuZCAmJiAhbG9jYWwtPm9wZXJfY2hhbm5lbCkgewogCQkJLyogaW5pdCBjaGFubmVsIHdlJ3JlIG9uICovCiAJCQlsb2NhbC0+aHcuY29uZi5jaGFubmVsID0KIAkJCWxvY2FsLT5vcGVyX2NoYW5uZWwgPQogCQkJbG9jYWwtPnNjYW5fY2hhbm5lbCA9ICZzYmFuZC0+Y2hhbm5lbHNbMF07Ci0JCQlicmVhazsKIAkJfQorCQlpZiAoc2JhbmQpCisJCQljaGFubmVscyArPSBzYmFuZC0+bl9jaGFubmVsczsKIAl9CiAKKwlsb2NhbC0+aW50X3NjYW5fcmVxLm5fY2hhbm5lbHMgPSBjaGFubmVsczsKKwlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIGNoYW5uZWxzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyogaWYgbG93LWxldmVsIGRyaXZlciBzdXBwb3J0cyBBUCwgd2UgYWxzbyBzdXBwb3J0IFZMQU4gKi8KIAlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfQVApKQogCQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CkBAIC03ODcsOSArODYxLDE0IEBACiAJLyogbWFjODAyMTEgYWx3YXlzIHN1cHBvcnRzIG1vbml0b3IgKi8KIAlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CiAKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM7CisKIAlyZXN1bHQgPSB3aXBoeV9yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwogCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OworCQlnb3RvIGZhaWxfd2lwaHlfcmVnaXN0ZXI7CiAKIAkvKgogCSAqIFdlIHVzZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBmb3IgZmVhdHVyZSB0ZXN0cyAoUW9TLCBIVCkgaW50ZXJuYWxseQpAQCAtODAzLDggKzg4Miw4IEBACiAJCWh3LT5hbXBkdV9xdWV1ZXMgPSAwOwogCiAJbWRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiksCi0JCQkgICAgICAgIndtYXN0ZXIlZCIsIGV0aGVyX3NldHVwLAotCQkJICAgICAgIGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSk7CisJCQkgICAgICAgIndtYXN0ZXIlZCIsIGllZWU4MDIxMV9tYXN0ZXJfc2V0dXAsCisJCQkgICAgICAgaHctPnF1ZXVlcyk7CiAJaWYgKCFtZGV2KQogCQlnb3RvIGZhaWxfbWRldl9hbGxvYzsKIApAQCAtODEyLDE3ICs4OTEsOCBAQAogCW1wcml2LT5sb2NhbCA9IGxvY2FsOwogCWxvY2FsLT5tZGV2ID0gbWRldjsKIAotCWllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KGxvY2FsKTsKLQotCW1kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdDsKLQltZGV2LT5vcGVuID0gaWVlZTgwMjExX21hc3Rlcl9vcGVuOwotCW1kZXYtPnN0b3AgPSBpZWVlODAyMTFfbWFzdGVyX3N0b3A7Ci0JbWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0JbWRldi0+aGVhZGVyX29wcyA9ICZpZWVlODAyMTFfaGVhZGVyX29wczsKLQltZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfbWFzdGVyX3NldF9tdWx0aWNhc3RfbGlzdDsKLQogCWxvY2FsLT5ody53b3JrcXVldWUgPQotCQljcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUod2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKIAlpZiAoIWxvY2FsLT5ody53b3JrcXVldWUpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsX3dvcmtxdWV1ZTsKQEAgLTg0NiwxNSArOTE2LDYgQEAKIAogCWxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCA9IGxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsOwogCi0JbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiAoSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfAotCQkJCQkJICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCIHwKLQkJCQkJCSAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pID8KLQkJCSAgICAgICBJV19RVUFMX1FVQUxfVVBEQVRFRCA6IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSA/Ci0JCQkgICAgICAgSVdfUVVBTF9OT0lTRV9VUERBVEVEIDogSVdfUVVBTF9OT0lTRV9JTlZBTElEOwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKLQkJbG9jYWwtPndzdGF0c19mbGFncyB8PSBJV19RVUFMX0RCTTsKLQogCXJlc3VsdCA9IHN0YV9pbmZvX3N0YXJ0KGxvY2FsKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBmYWlsX3N0YV9pbmZvOwpAQCAtODY2LDYgKzkyNyw3IEBACiAKIAltZW1jcHkobG9jYWwtPm1kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKGxvY2FsLT5tZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7CisJbG9jYWwtPm1kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiAKIAlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwogCWlmIChyZXN1bHQgPCAwKQpAQCAtODg3LDggKzk0OSw2IEBACiAJCWdvdG8gZmFpbF93ZXA7CiAJfQogCi0JbG9jYWwtPm1kZXYtPnNlbGVjdF9xdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWU7Ci0KIAkvKiBhZGQgb25lIGRlZmF1bHQgU1RBIGludGVyZmFjZSBpZiBzdXBwb3J0ZWQgKi8KIAlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpIHsKIAkJcmVzdWx0ID0gaWVlZTgwMjExX2lmX2FkZChsb2NhbCwgIndsYW4lZCIsIE5VTEwsCkBAIC05MDIsNiArOTYyLDIwIEBACiAKIAlpZWVlODAyMTFfbGVkX2luaXQobG9jYWwpOwogCisJLyogYWxsb2MgaW50ZXJuYWwgc2NhbiByZXF1ZXN0ICovCisJaSA9IDA7CisJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkcyA9ICZsb2NhbC0+c2Nhbl9zc2lkOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEubl9zc2lkcyA9IDE7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpZiAoIWh3LT53aXBoeS0+YmFuZHNbYmFuZF0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCQkJbG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVsc1tpXSA9CisJCQkJJmh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQkJaSsrOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKIGZhaWxfd2VwOgpAQCAtOTIwLDYgKzk5NCw4IEBACiAJCWZyZWVfbmV0ZGV2KGxvY2FsLT5tZGV2KTsKIGZhaWxfbWRldl9hbGxvYzoKIAl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CitmYWlsX3dpcGh5X3JlZ2lzdGVyOgorCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpOwogCXJldHVybiByZXN1bHQ7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZWdpc3Rlcl9odyk7CkBAIC05NDcsNyArMTAyMyw2IEBACiAKIAlydG5sX3VubG9jaygpOwogCi0JaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChsb2NhbCk7CiAJaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOwogCXN0YV9pbmZvX3N0b3AobG9jYWwpOwogCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwpAQCAtOTY1LDYgKzEwNDAsNyBAQAogCWllZWU4MDIxMV93ZXBfZnJlZShsb2NhbCk7CiAJaWVlZTgwMjExX2xlZF9leGl0KGxvY2FsKTsKIAlmcmVlX25ldGRldihsb2NhbC0+bWRldik7CisJa2ZyZWUobG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVscyk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KTsKIApAQCAtOTcyLDYgKzEwNDgsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCisJbXV0ZXhfZGVzdHJveSgmbG9jYWwtPmlmbGlzdF9tdHgpOworCiAJd2lwaHlfZnJlZShsb2NhbC0+aHcud2lwaHkpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZnJlZV9odyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5jIGIvbmV0L21hYzgwMjExL21lc2guYwppbmRleCA4MmY1NjhlLi45YTNlNWRlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKQEAgLTI3NSwxNiArMjc1LDYgQEAKIAkJJiB0YmwtPmhhc2hfbWFzazsKIH0KIAotdTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pCi17Ci0JaWYgKCFtZXNoX2lkX2xlbikKLQkJcmV0dXJuIDE7Ci0JZWxzZSBpZiAobWVzaF9pZF9sZW4gPT0gMSkKLQkJcmV0dXJuICh1OCkgbWVzaF9pZFswXTsKLQllbHNlCi0JCXJldHVybiAodTgpIChtZXNoX2lkWzBdICsgMiAqIG1lc2hfaWRbMV0pOwotfQotCiBzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9hbGxvYyhpbnQgc2l6ZV9vcmRlcikKIHsKIAlpbnQgaTsKQEAgLTQ0Miw3ICs0MzIsOCBAQAogCiAJaWZtc2gtPmhvdXNla2VlcGluZyA9IHRydWU7CiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtc2gtPndvcmspOwotCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7CisJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0b3BfbWVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTQ3Niw3ICs0NjcsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQl1NjQgc3VwcF9yYXRlcyA9IDA7CisJdTMyIHN1cHBfcmF0ZXMgPSAwOwogCXNpemVfdCBiYXNlbGVuOwogCWludCBmcmVxOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGMxOTdhYjUuLmQ4OTFkN2QgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtMjQsMTUgKzI0LDE1IEBACiAgKgogICoKICAqCi0gKiBATUVTSF9QQVRIX0FDVElWRTogdGhlIG1lc2ggcGF0aCBpcyBjYW4gYmUgdXNlZCBmb3IgZm9yd2FyZGluZwotICogQE1FU0hfUEFUSF9SRVNPTFZFRDogdGhlIGRpc2NvdmVyeSBwcm9jZXNzIGlzIHJ1bm5pbmcgZm9yIHRoaXMgbWVzaCBwYXRoCisgKiBATUVTSF9QQVRIX0FDVElWRTogdGhlIG1lc2ggcGF0aCBjYW4gYmUgdXNlZCBmb3IgZm9yd2FyZGluZworICogQE1FU0hfUEFUSF9SRVNPTFZJTkc6IHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBpcyBydW5uaW5nIGZvciB0aGlzIG1lc2ggcGF0aAogICogQE1FU0hfUEFUSF9EU05fVkFMSUQ6IHRoZSBtZXNoIHBhdGggY29udGFpbnMgYSB2YWxpZCBkZXN0aW5hdGlvbiBzZXF1ZW5jZQogICogCW51bWJlcgogICogQE1FU0hfUEFUSF9GSVhFRDogdGhlIG1lc2ggcGF0aCBoYXMgYmVlbiBtYW51YWxseSBzZXQgYW5kIHNob3VsZCBub3QgYmUKICAqIAltb2RpZmllZAogICogQE1FU0hfUEFUSF9SRVNPTFZFRDogdGhlIG1lc2ggcGF0aCBjYW4gaGFzIGJlZW4gcmVzb2x2ZWQKICAqCi0gKiBNRVNIX1BBVEhfUkVTT0xWRUQgYW5kIE1FU0hfUEFUSF9ERUxFVEUgYXJlIHVzZWQgYnkgdGhlIG1lc2ggcGF0aCB0aW1lciB0bworICogTUVTSF9QQVRIX1JFU09MVkVEIGlzIHVzZWQgYnkgdGhlIG1lc2ggcGF0aCB0aW1lciB0bwogICogZGVjaWRlIHdoZW4gdG8gc3RvcCBvciBjYW5jZWwgdGhlIG1lc2ggcGF0aCBkaXNjb3ZlcnkuCiAgKi8KIGVudW0gbWVzaF9wYXRoX2ZsYWdzIHsKQEAgLTE5Niw3ICsxOTYsNiBAQAogCiAvKiBQdWJsaWMgaW50ZXJmYWNlcyAqLwogLyogVmFyaW91cyAqLwotdTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pOwogaW50IGllZWU4MDIxMV9nZXRfbWVzaF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyKTsKIGludCBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGhkciwKIAkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpAQCAtMjM2LDE0ICsyMzUsMTMgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKTsKIGludCBtZXNoX3BhdGhfYWRkKHU4ICpkc3QsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIC8qIE1lc2ggcGxpbmtzICovCi12b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTY0IHJhdGVzLAordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHUzMiByYXRlcywKIAkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgYWRkKTsKIGJvb2wgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICppZSk7CiB2b2lkIG1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBtZXNoX3BsaW5rX2Jyb2tlbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIG1lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiBpbnQgbWVzaF9wbGlua19vcGVuKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLWludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgbWVzaF9wbGlua19ibG9jayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIG1lc2hfcnhfcGxpbmtfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCmluZGV4IDcxZmU2MDkuLjYwYjM1YWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKQEAgLTU4LDcgKzU4LDYgQEAKICNkZWZpbmUgUEVSUl9JRV9EU1RfQUREUih4KQkoeCArIDIpCiAjZGVmaW5lIFBFUlJfSUVfRFNUX0RTTih4KQl1MzJfZmllbGRfZ2V0KHgsIDgsIDApOwogCi0jZGVmaW5lIFRVX1RPX0VYUF9USU1FKHgpIChqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh4ICogMTAyNCAvIDEwMDApKQogI2RlZmluZSBNU0VDX1RPX1RVKHgpICh4KjEwMDAvMTAyNCkKICNkZWZpbmUgRFNOX0dUKHgsIHkpICgobG9uZykgKHkpIC0gKGxvbmcpICh4KSA8IDApCiAjZGVmaW5lIERTTl9MVCh4LCB5KSAoKGxvbmcpICh4KSAtIChsb25nKSAoeSkgPCAwKQpAQCAtMTQ5LDcgKzE0OCw3IEBACiAJcG9zICs9IEVUSF9BTEVOOwogCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4LDcgKzE5Nyw3IEBACiAJcG9zICs9IEVUSF9BTEVOOwogCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU5LDcgKzc1OCw3IEBACiB9CiAKIC8qKgotICogaWVlZTgwMjExc19sb29rdXBfbmV4dGhvcCAtIHB1dCB0aGUgYXBwcm9wcmlhdGUgbmV4dCBob3Agb24gYSBtZXNoIGZyYW1lCisgKiBtZXNoX25leHRob3BfbG9va3VwIC0gcHV0IHRoZSBhcHByb3ByaWF0ZSBuZXh0IGhvcCBvbiBhIG1lc2ggZnJhbWUKICAqCiAgKiBAc2tiOiA4MDIuMTEgZnJhbWUgdG8gYmUgc2VudAogICogQHNkYXRhOiBuZXR3b3JrIHN1YmlmIHRoZSBmcmFtZSB3aWxsIGJlIHNlbnQgdGhyb3VnaApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggMTE1OWJkYi4uYThiYmRlYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC05Myw3ICs5Myw3IEBACiAgKiAgICAgICBvbiBpdCBpbiB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgc2VjdGlvbiEKICAqLwogc3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqbWVzaF9wbGlua19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHU4ICpod19hZGRyLCB1NjQgcmF0ZXMpCisJCQkJCSB1OCAqaHdfYWRkciwgdTMyIHJhdGVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMjE4LDExICsyMTgsMTEgQEAKIAkJbWVtY3B5KHBvcywgJnJlYXNvbiwgMik7CiAJfQogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogCXJldHVybiAwOwogfQogCi12b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTY0IHJhdGVzLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKK3ZvaWQgbWVzaF9uZWlnaGJvdXJfdXBkYXRlKHU4ICpod19hZGRyLCB1MzIgcmF0ZXMsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgYm9vbCBwZWVyX2FjY2VwdGluZ19wbGlua3MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CkBAIC0zNjEsMzYgKzM2MSw2IEBACiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiB9CiAKLWludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKLQlfX2xlMTYgbGxpZCwgcGxpZCwgcmVhc29uOwotCi0JbXBsX2RiZygiTWVzaCBwbGluazogY2xvc2luZyBsaW5rIHdpdGggJXBNXG4iLCBzdGEtPnN0YS5hZGRyKTsKLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0Jc3RhLT5yZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX0xJTktfQ0FOQ0VMTEVEKTsKLQlyZWFzb24gPSBzdGEtPnJlYXNvbjsKLQotCWlmIChzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0xJU1RFTiB8fAotCSAgICBzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0JMT0NLRUQpIHsKLQkJbWVzaF9wbGlua19mc21fcmVzdGFydChzdGEpOwotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0VTVEFCKSB7Ci0JCV9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7Ci0JCS8qIFRoZSB0aW1lciBzaG91bGQgbm90IGJlIHJ1bm5pbmcgKi8KLQkJbW9kX3BsaW5rX3RpbWVyKHN0YSwgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKTsKLQl9IGVsc2UgaWYgKCFtb2RfcGxpbmtfdGltZXIoc3RhLCBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpKQotCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7Ci0KLQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKLQlsbGlkID0gc3RhLT5sbGlkOwotCXBsaWQgPSBzdGEtPnBsaWQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JbWVzaF9wbGlua19mcmFtZV90eChzdGEtPnNkYXRhLCBQTElOS19DTE9TRSwgc3RhLT5zdGEuYWRkciwgbGxpZCwKLQkJCSAgICBwbGlkLCByZWFzb24pOwotCXJldHVybiAwOwotfQogCiB2b2lkIG1lc2hfcnhfcGxpbmtfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCSBzaXplX3QgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQpAQCAtNDc3LDcgKzQ0Nyw3IEBACiAJCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAl9IGVsc2UgaWYgKCFzdGEpIHsKIAkJLyogZnR5cGUgPT0gUExJTktfT1BFTiAqLwotCQl1NjQgcmF0ZXM7CisJCXUzMiByYXRlczsKIAkJaWYgKCFtZXNoX3BsaW5rX2ZyZWVfY291bnQoc2RhdGEpKSB7CiAJCQltcGxfZGJnKCJNZXNoIHBsaW5rIGVycm9yOiBubyBtb3JlIGZyZWUgcGxpbmtzXG4iKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggMmI4OTBhZi4uODQxYjg0NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIEJTUyBjbGllbnQgbW9kZSBpbXBsZW1lbnRhdGlvbgotICogQ29weXJpZ2h0IDIwMDMsIEpvdW5pIE1hbGluZW4gPGprbWFsaW5lQGNjLmh1dC5maT4KKyAqIENvcHlyaWdodCAyMDAzLTIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CiAgKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgogICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KQEAgLTE1LDExICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKQEAgLTM1LDE1ICszMiw2IEBACiAjZGVmaW5lIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMICgyICogSFopCiAjZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCAoNjAgKiBIWikKICNkZWZpbmUgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwgKDEgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICg3ICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAotCiAKIC8qIHV0aWxzICovCiBzdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQpAQCAtNTUsMTAgKzQzLDEwIEBACiB7CiAJdTggKmVuZCwgKnBvczsKIAotCXBvcyA9IGJzcy0+aWVzOworCXBvcyA9IGJzcy0+Y2Jzcy5pbmZvcm1hdGlvbl9lbGVtZW50czsKIAlpZiAocG9zID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCWVuZCA9IHBvcyArIGJzcy0+aWVzX2xlbjsKKwllbmQgPSBwb3MgKyBic3MtPmNic3MubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOwogCiAJd2hpbGUgKHBvcyArIDEgPCBlbmQpIHsKIAkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCkBAIC03Myw3ICs2MSw3IEBACiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCQkgICAgICB1NjQgKnJhdGVzKQorCQkJCSAgICAgIHUzMiAqcmF0ZXMpCiB7CiAJaW50IGksIGosIGNvdW50OwogCSpyYXRlcyA9IDA7CkBAIC05MiwxNjAgKzgwLDQwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0vKiBhbHNvIHVzZWQgYnkgbWVzaCBjb2RlICovCi11NjQgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAotCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOwotCXNpemVfdCBudW1fcmF0ZXM7Ci0JdTY0IHN1cHBfcmF0ZXM7Ci0JaW50IGksIGo7Ci0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwotCi0JaWYgKCFzYmFuZCkgewotCQlXQVJOX09OKDEpOwotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JfQotCi0JYml0cmF0ZXMgPSBzYmFuZC0+Yml0cmF0ZXM7Ci0JbnVtX3JhdGVzID0gc2JhbmQtPm5fYml0cmF0ZXM7Ci0Jc3VwcF9yYXRlcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbiArCi0JCSAgICAgZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCXU4IHJhdGUgPSAwOwotCQlpbnQgb3duX3JhdGU7Ci0JCWlmIChpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuKQotCQkJcmF0ZSA9IGVsZW1zLT5zdXBwX3JhdGVzW2ldOwotCQllbHNlIGlmIChlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMpCi0JCQlyYXRlID0gZWxlbXMtPmV4dF9zdXBwX3JhdGVzCi0JCQkJW2kgLSBlbGVtcy0+c3VwcF9yYXRlc19sZW5dOwotCQlvd25fcmF0ZSA9IDUgKiAocmF0ZSAmIDB4N2YpOwotCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JhdGVzOyBqKyspCi0JCQlpZiAoYml0cmF0ZXNbal0uYml0cmF0ZSA9PSBvd25fcmF0ZSkKLQkJCQlzdXBwX3JhdGVzIHw9IEJJVChqKTsKLQl9Ci0JcmV0dXJuIHN1cHBfcmF0ZXM7Ci19Ci0KIC8qIGZyYW1lIHNlbmRpbmcgZnVuY3Rpb25zICovCiAKLS8qIGFsc28gdXNlZCBieSBzY2FubmluZyBjb2RlICovCi12b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKLQkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCitzdGF0aWMgdm9pZCBhZGRfZXh0cmFfaWVzKHN0cnVjdCBza19idWZmICpza2IsIHU4ICppZXMsIHNpemVfdCBpZXNfbGVuKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3MsICpzdXBwX3JhdGVzLCAqZXN1cHBfcmF0ZXMgPSBOVUxMOwotCWludCBpOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpICsgMjAwKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKGRzdCkgewotCQltZW1jcHkobWdtdC0+ZGEsIGRzdCwgRVRIX0FMRU4pOwotCQltZW1jcHkobWdtdC0+YnNzaWQsIGRzdCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCQltZW1zZXQobWdtdC0+YnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKLQl9Ci0JcG9zID0gc2tiX3B1dChza2IsIDIgKyBzc2lkX2xlbik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSBzc2lkX2xlbjsKLQltZW1jcHkocG9zLCBzc2lkLCBzc2lkX2xlbik7Ci0KLQlzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDIpOwotCXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCXN1cHBfcmF0ZXNbMV0gPSAwOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWlmIChlc3VwcF9yYXRlcykgewotCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOwotCQkJZXN1cHBfcmF0ZXNbMV0rKzsKLQkJfSBlbHNlIGlmIChzdXBwX3JhdGVzWzFdID09IDgpIHsKLQkJCWVzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDMpOwotCQkJZXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJCWVzdXBwX3JhdGVzWzFdID0gMTsKLQkJCXBvcyA9ICZlc3VwcF9yYXRlc1syXTsKLQkJfSBlbHNlIHsKLQkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKLQkJCXN1cHBfcmF0ZXNbMV0rKzsKLQkJfQotCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7Ci0JfQotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZiAoaWVzKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGllc19sZW4pLCBpZXMsIGllc19sZW4pOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQlpbnQgdHJhbnNhY3Rpb24sIHU4ICpleHRyYSwgc2l6ZV90IGV4dHJhX2xlbiwKLQkJCQlpbnQgZW5jcnlwdCkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQgKyA2KTsKLQltZW1zZXQobWdtdCwgMCwgMjQgKyA2KTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKLQlpZiAoZW5jcnlwdCkKLQkJbWdtdC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoaWZzdGEtPmF1dGhfYWxnKTsKLQltZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHRyYW5zYWN0aW9uKTsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uICsgMTsKLQltZ210LT51LmF1dGguc3RhdHVzX2NvZGUgPSBjcHVfdG9fbGUxNigwKTsKLQlpZiAoZXh0cmEpCi0JCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3MsICppZXMsICpodF9pZTsKKwl1OCAqcG9zLCAqaWVzLCAqaHRfaWUsICplX2llczsKIAlpbnQgaSwgbGVuLCBjb3VudCwgcmF0ZXNfbGVuLCBzdXBwX3JhdGVzX2xlbjsKIAl1MTYgY2FwYWI7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgd21tID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1NjQgcmF0ZXMgPSAwOworCXUzMiByYXRlcyA9IDA7CisJc2l6ZV90IGVfaWVzX2xlbjsKKworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkgeworCQllX2llcyA9IHNkYXRhLT51Lm1nZC5pZV9yZWFzc29jcmVxOworCQllX2llc19sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfcmVhc3NvY3JlcV9sZW47CisJfSBlbHNlIHsKKwkJZV9pZXMgPSBzZGF0YS0+dS5tZ2QuaWVfYXNzb2NyZXE7CisJCWVfaWVzX2xlbiA9IHNkYXRhLT51Lm1nZC5pZV9hc3NvY3JlcV9sZW47CisJfQogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZnN0YS0+ZXh0cmFfaWVfbGVuICsKLQkJCSAgICBpZnN0YS0+c3NpZF9sZW4pOworCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZm1nZC0+ZXh0cmFfaWVfbGVuICsKKwkJCSAgICBpZm1nZC0+c3NpZF9sZW4gKyBlX2llc19sZW4pOwogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXNzb2MgIgogCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTI1NSw3ICsxMjMsNyBAQAogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCi0JY2FwYWIgPSBpZnN0YS0+Y2FwYWI7CisJY2FwYWIgPSBpZm1nZC0+Y2FwYWI7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFKSkKQEAgLTI2NCwxMSArMTMyLDExIEBACiAJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CiAJfQogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKLQkJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpZiAoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCQlpZiAoYnNzLT53bW1fdXNlZCkKIAkJCXdtbSA9IDE7CkBAIC0yNzksNyArMTQ3LDcgQEAKIAkJICogYi1vbmx5IG1vZGUpICovCiAJCXJhdGVzX2xlbiA9IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKGJzcywgc2JhbmQsICZyYXRlcyk7CiAKLQkJaWYgKChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkJaWYgKChic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSAmJgogCQkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UKSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwogCkBAIC0yOTEsMTggKzE1OSwxOCBAQAogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgewogCQlza2JfcHV0KHNrYiwgMTApOwogCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOwogCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KIAkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCBpZnN0YS0+cHJldl9ic3NpZCwKKwkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgaWZtZ2QtPnByZXZfYnNzaWQsCiAJCSAgICAgICBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJc2tiX3B1dChza2IsIDQpOwpAQCAtMzE0LDEwICsxODIsMTAgQEAKIAl9CiAKIAkvKiBTU0lEICovCi0JaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOworCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZtZ2QtPnNzaWRfbGVuKTsKIAkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkqcG9zKysgPSBpZm1nZC0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAKIAkvKiBhZGQgYWxsIHJhdGVzIHdoaWNoIHdlcmUgbWFya2VkIHRvIGJlIHVzZWQgYWJvdmUgKi8KIAlzdXBwX3JhdGVzX2xlbiA9IHJhdGVzX2xlbjsKQEAgLTM3MiwxMiArMjQwLDEyIEBACiAJCX0KIAl9CiAKLQlpZiAoaWZzdGEtPmV4dHJhX2llKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgaWZzdGEtPmV4dHJhX2llLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKKwlpZiAoaWZtZ2QtPmV4dHJhX2llKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKKwkJbWVtY3B5KHBvcywgaWZtZ2QtPmV4dHJhX2llLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKIAl9CiAKLQlpZiAod21tICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgeworCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CiAJCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKIAkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOwogCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KQEAgLTM5MSwxMCArMjU5LDE3IEBACiAJfQogCiAJLyogd21tIHN1cHBvcnQgaXMgYSBtdXN0IHRvIEhUICovCi0JaWYgKHdtbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkvKgorCSAqIElFRUU4MDIuMTFuIGRvZXMgbm90IGFsbG93IFRLSVAvV0VQIGFzIHBhaXJ3aXNlCisJICogY2lwaGVycyBpbiBIVCBtb2RlLiBXZSBzdGlsbCBhc3NvY2lhdGUgaW4gbm9uLWh0CisJICogbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZSBjaXBoZXJzIGlzCisJICogY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KKwkgKi8KKwlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgogCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgogCSAgICAoaHRfaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKLQkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpIHsKKwkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykgJiYKKwkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikoaHRfaWUgKyAyKTsKIAkJdTE2IGNhcCA9IHNiYW5kLT5odF9jYXAuY2FwOwpAQCAtNDI5LDExICszMDQsMTMgQEAKIAkJbWVtY3B5KHBvcywgJnNiYW5kLT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKIAl9CiAKLQlrZnJlZShpZnN0YS0+YXNzb2NyZXFfaWVzKTsKLQlpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiA9IChza2ItPmRhdGEgKyBza2ItPmxlbikgLSBpZXM7Ci0JaWZzdGEtPmFzc29jcmVxX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVxX2llc19sZW4sIEdGUF9LRVJORUwpOwotCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVxX2llcywgaWVzLCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbik7CisJYWRkX2V4dHJhX2llcyhza2IsIGVfaWVzLCBlX2llc19sZW4pOworCisJa2ZyZWUoaWZtZ2QtPmFzc29jcmVxX2llcyk7CisJaWZtZ2QtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOworCWlmbWdkLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykKKwkJbWVtY3B5KGlmbWdkLT5hc3NvY3JlcV9pZXMsIGllcywgaWZtZ2QtPmFzc29jcmVxX2llc19sZW4pOwogCiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KQEAgLTQ0MywxMSArMzIwLDIyIEBACiAJCQkJCSAgIHUxNiBzdHlwZSwgdTE2IHJlYXNvbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICppZXM7CisJc2l6ZV90IGllc19sZW47CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkpOworCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfREVBVVRIKSB7CisJCWllcyA9IHNkYXRhLT51Lm1nZC5pZV9kZWF1dGg7CisJCWllc19sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfZGVhdXRoX2xlbjsKKwl9IGVsc2UgeworCQlpZXMgPSBzZGF0YS0+dS5tZ2QuaWVfZGlzYXNzb2M7CisJCWllc19sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfZGlzYXNzb2NfbGVuOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArCisJCQkgICAgaWVzX2xlbik7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCiAJCSAgICAgICAiZGVhdXRoL2Rpc2Fzc29jIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTQ1Nyw0MCArMzQ1LDUzIEBACiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgc3R5cGUpOwogCXNrYl9wdXQoc2tiLCAyKTsKIAkvKiB1LmRlYXV0aC5yZWFzb25fY29kZSA9PSB1LmRpc2Fzc29jLnJlYXNvbl9jb2RlICovCiAJbWdtdC0+dS5kZWF1dGgucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihyZWFzb24pOwogCisJYWRkX2V4dHJhX2llcyhza2IsIGllcywgaWVzX2xlbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX3BzcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICpwc3BvbGw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqcHNwb2xsKSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCisJCSAgICAgICAicHNwb2xsIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKikgc2tiX3B1dChza2IsIHNpemVvZigqcHNwb2xsKSk7CisJbWVtc2V0KHBzcG9sbCwgMCwgc2l6ZW9mKCpwc3BvbGwpKTsKKwlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMIHwgSUVFRTgwMjExX0ZDVExfUE07CisJcHNwb2xsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOworCXBzcG9sbC0+YWlkID0gY3B1X3RvX2xlMTYoaWZtZ2QtPmFpZCk7CisKKwkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KKwlwc3BvbGwtPmFpZCB8PSBjcHVfdG9fbGUxNigxIDw8IDE1IHwgMSA8PCAxNCk7CisKKwltZW1jcHkocHNwb2xsLT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KHBzcG9sbC0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCiAvKiBNTE1FICovCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgaSwgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAwOwotCi0JLyogY2YuIElFRUUgODAyLjExIDkuMi4xMiAqLwotCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspCi0JCWlmICgoYnNzLT5zdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQotCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgotCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKLQkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0JZWxzZQotCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0KLQlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKLX0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCwKIAkJCQkgICAgIHU4ICp3bW1fcGFyYW0sIHNpemVfdCB3bW1fcGFyYW1fbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHBhcmFtczsKQEAgLTQ5OCw3ICszOTksNyBAQAogCWludCBjb3VudDsKIAl1OCAqcG9zOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCiAJCXJldHVybjsKIAogCWlmICghd21tX3BhcmFtKQpAQCAtNTA3LDE4ICs0MDgsMTUgQEAKIAlpZiAod21tX3BhcmFtX2xlbiA8IDggfHwgd21tX3BhcmFtWzVdIC8qIHZlcnNpb24gKi8gIT0gMSkKIAkJcmV0dXJuOwogCWNvdW50ID0gd21tX3BhcmFtWzZdICYgMHgwZjsKLQlpZiAoY291bnQgPT0gaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCkKKwlpZiAoY291bnQgPT0gaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCkKIAkJcmV0dXJuOwotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSBjb3VudDsKKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gY291bnQ7CiAKIAlwb3MgPSB3bW1fcGFyYW0gKyA4OwogCWxlZnQgPSB3bW1fcGFyYW1fbGVuIC0gODsKIAogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CiAKLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZfdHgpCi0JCXJldHVybjsKLQogCWxvY2FsLT53bW1fYWNtID0gMDsKIAlmb3IgKDsgbGVmdCA+PSA0OyBsZWZ0IC09IDQsIHBvcyArPSA0KSB7CiAJCWludCBhY2kgPSAocG9zWzBdID4+IDUpICYgMHgwMzsKQEAgLTUyNiwyNiArNDI0LDI2IEBACiAJCWludCBxdWV1ZTsKIAogCQlzd2l0Y2ggKGFjaSkgewotCQljYXNlIDE6CisJCWNhc2UgMTogLyogQUNfQksgKi8KIAkJCXF1ZXVlID0gMzsKIAkJCWlmIChhY20pCi0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgxKSB8IEJJVCgyKTsgLyogQksvLSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMjoKKwkJY2FzZSAyOiAvKiBBQ19WSSAqLwogCQkJcXVldWUgPSAxOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNCkgfCBCSVQoNSk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDQpIHwgQklUKDUpOyAvKiBDTC9WSSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMzoKKwkJY2FzZSAzOiAvKiBBQ19WTyAqLwogCQkJcXVldWUgPSAwOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNikgfCBCSVQoNyk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDYpIHwgQklUKDcpOyAvKiBWTy9OQyAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMDoKKwkJY2FzZSAwOiAvKiBBQ19CRSAqLwogCQlkZWZhdWx0OgogCQkJcXVldWUgPSAyOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMSkgfCBCSVQoMik7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOyAvKiBCRS9FRSAqLwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNTU5LDIxICs0NTcsNDEgQEAKIAkJICAgICAgIGxvY2FsLT5tZGV2LT5uYW1lLCBxdWV1ZSwgYWNpLCBhY20sIHBhcmFtcy5haWZzLCBwYXJhbXMuY3dfbWluLAogCQkgICAgICAgcGFyYW1zLmN3X21heCwgcGFyYW1zLnR4b3ApOwogI2VuZGlmCi0JCS8qIFRPRE86IGhhbmRsZSBBQ00gKGJsb2NrIFRYLCBmYWxsYmFjayB0byBuZXh0IGxvd2VzdCBhbGxvd2VkCi0JCSAqIEFDIGZvciBub3cpICovCi0JCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CisJCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4ICYmCisJCSAgICBsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgVFggcXVldWUgIgogCQkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwgbG9jYWwtPm1kZXYtPm5hbWUsIHF1ZXVlKTsKIAkJfQogCX0KIH0KIAorc3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX3RpbShzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsIHUxNiBhaWQpCit7CisJdTggbWFzazsKKwl1OCBpbmRleCwgaW5kZXhuMSwgaW5kZXhuMjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltID0gKHN0cnVjdCBpZWVlODAyMTFfdGltX2llICopIGVsZW1zLT50aW07CisKKwlhaWQgJj0gMHgzZmZmOworCWluZGV4ID0gYWlkIC8gODsKKwltYXNrICA9IDEgPDwgKGFpZCAmIDcpOworCisJaW5kZXhuMSA9IHRpbS0+Yml0bWFwX2N0cmwgJiAweGZlOworCWluZGV4bjIgPSBlbGVtcy0+dGltX2xlbiArIGluZGV4bjEgLSA0OworCisJaWYgKGluZGV4IDwgaW5kZXhuMSB8fCBpbmRleCA+IGluZGV4bjIpCisJCXJldHVybiBmYWxzZTsKKworCWluZGV4IC09IGluZGV4bjE7CisKKwlyZXR1cm4gISEodGltLT52aXJ0dWFsX21hcFtpbmRleF0gJiBtYXNrKTsKK30KKwogc3RhdGljIHUzMiBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgICB1MTYgY2FwYWIsIGJvb2wgZXJwX3ZhbGlkLCB1OCBlcnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAjZW5kaWYKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCB1c2VfcHJvdGVjdGlvbjsKQEAgLTU5Niw3ICs1MTQsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9wcm90ZWN0aW9uID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX2N0c19wcm90ID0gdXNlX3Byb3RlY3Rpb247CkBAIC02MTAsNyArNTI4LDcgQEAKIAkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAogCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCiAJCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID0gdXNlX3Nob3J0X3ByZWFtYmxlOwpAQCAtNjI0LDcgKzU0Miw3IEBACiAJCQkgICAgICAgIiAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9zaG9ydF9zbG90ID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QgPSB1c2Vfc2hvcnRfc2xvdDsKQEAgLTYzNCw1NyArNTUyLDU3IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCi0JCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKKwkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNoYXIgKmJ1ZjsKIAlzaXplX3QgbGVuOwogCWludCBpOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAotCWlmICghaWZzdGEtPmFzc29jcmVxX2llcyAmJiAhaWZzdGEtPmFzc29jcmVzcF9pZXMpCisJaWYgKCFpZm1nZC0+YXNzb2NyZXFfaWVzICYmICFpZm1nZC0+YXNzb2NyZXNwX2llcykKIAkJcmV0dXJuOwogCi0JYnVmID0ga21hbGxvYyg1MCArIDIgKiAoaWZzdGEtPmFzc29jcmVxX2llc19sZW4gKwotCQkJCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiksIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MoNTAgKyAyICogKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuICsKKwkJCQlpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCiAJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ0lORk8oIik7Ci0JaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpIHsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykgewogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXFJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVxX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3JlcV9pZXNbaV0pOwogCQl9CiAJfQotCWlmIChpZnN0YS0+YXNzb2NyZXNwX2llcykgewotCQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpIHsKKwkJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgIik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlc3BJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXNwX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKIAkJfQogCX0KIAlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIpIik7CiAKIAlpZiAobGVuID4gSVdfQ1VTVE9NX01BWCkgewogCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DUkVTUElFPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOworCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7CiAJCX0KIAl9CiAKQEAgLTY5OSw0MCArNjE3LDM3IEBACiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgdTMyIGJzc19pbmZvX2NoYW5nZWQpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsX3RvX2h3KGxvY2FsKS0+Y29uZjsKIAogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuOwotCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKIAkJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmJlYWNvbl9pbnQ7Ci0JCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT50aW1lc3RhbXA7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWw7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKIAkJc2RhdGEtPnZpZi5ic3NfY29uZi5kdGltX3BlcmlvZCA9IGJzcy0+ZHRpbV9wZXJpb2Q7CiAKIAkJYnNzX2luZm9fY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLAotCQkJYnNzLT5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKwkJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKIAogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAl9CiAKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQltZW1jcHkoaWZzdGEtPnByZXZfYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEsIGlmc3RhKTsKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwltZW1jcHkoaWZtZ2QtPnByZXZfYnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEpOwogCi0JaWZzdGEtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOworCWlmbWdkLT5sYXN0X3Byb2JlID0gamlmZmllczsKIAlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCAxKTsKIAogCXNkYXRhLT52aWYuYnNzX2NvbmYuYXNzb2MgPSAxOwpAQCAtNzQ1LDcyICs2NjAsOTAgQEAKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgYnNzX2luZm9fY2hhbmdlZCk7CiAKIAlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkgewotCQlpZiAobG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApCisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKSAmJgorCQkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgewogCQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQkJZWxzZSB7CisJCQkJICBtc2Vjc190b19qaWZmaWVzKAorCQkJCQlsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAkJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwotCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKLQkJCQkJICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogCQl9CiAJfQogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29uKHNkYXRhLT5kZXYpOwogCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcysrOwotCWlmIChpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzKys7CisJaWYgKGlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKworCQkvKgorCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKKwkJICogYnNzIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgdG8gdGhlIEFQCisJCSAqLworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAkJcmV0dXJuOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0cnkgJWRcbiIsCi0JCQlzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQsCi0JCQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzKTsKKwkJCXNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCwKKwkJCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMpOwogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwogCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUsICZpZnN0YS0+cmVxdWVzdCk7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUsICZpZm1nZC0+cmVxdWVzdCk7CiAKIAkvKiBEaXJlY3QgcHJvYmUgaXMgc2VudCB0byBicm9hZGNhc3QgYWRkcmVzcyBhcyBzb21lIEFQcwogCSAqIHdpbGwgbm90IGFuc3dlciB0byBkaXJlY3QgcGFja2V0IGluIHVuYXNzb2NpYXRlZCBzdGF0ZS4KIAkgKi8KIAlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsCi0JCQkJIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmF1dGhfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmF1dGhfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmbWdkLT5hdXRoX3RyaWVzKys7CisJaWYgKGlmbWdkLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJCXJldHVybjsKIAl9CiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7CisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CiAKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMSwgTlVMTCwgMCwgMCk7CisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMSwgaWZtZ2QtPmF1dGhfYWxnLCBOVUxMLCAwLAorCQkJICAgIGlmbWdkLT5ic3NpZCwgMCk7CisJaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPSAyOwogCi0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOwogfQogCiAvKgpAQCAtODE4LDMyICs3NTEsMzMgQEAKICAqIGlmIHNlbGYgZGlzY29ubmVjdGVkIG9yIGEgcmVhc29uIGNvZGUgZnJvbSB0aGUgQVAuCiAgKi8KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLCBib29sIGRlYXV0aCwKLQkJCQkgICBib29sIHNlbGZfZGlzY29ubmVjdGVkLCB1MTYgcmVhc29uKQorCQkJCSAgIGJvb2wgZGVhdXRoLCBib29sIHNlbGZfZGlzY29ubmVjdGVkLAorCQkJCSAgIHUxNiByZWFzb24pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTMyIGNoYW5nZWQgPSAwLCBjb25maWdfY2hhbmdlZCA9IDA7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGRlYXV0aCkgewotCQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKLQkJaWZzdGEtPmF1dGhfdHJpZXMgPSAwOworCQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmF1dGhfdHJpZXMgPSAwOwogCX0KLQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZzdGEtPmFzc29jX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJaWZtZ2QtPmFzc29jX3RyaWVzID0gMDsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0+ZGV2KTsKIAotCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHNkYXRhLCBzdGEtPnN0YS5hZGRyKTsKKwlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEpOwogCiAJaWYgKHNlbGZfZGlzY29ubmVjdGVkKSB7CiAJCWlmIChkZWF1dGgpCkBAIC04NTQsMjMgKzc4OCwyOCBAQAogCQkJCUlFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQywgcmVhc29uKTsKIAl9CiAKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAljaGFuZ2VkIHw9IGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzZGF0YSk7CiAKIAlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCAwKTsKIAljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwogCXNkYXRhLT52aWYuYnNzX2NvbmYuYXNzb2MgPSBmYWxzZTsKIAotCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKIAotCWlmIChzZWxmX2Rpc2Nvbm5lY3RlZCB8fCByZWFzb24gPT0gV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKQotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJaWYgKHNlbGZfZGlzY29ubmVjdGVkIHx8IHJlYXNvbiA9PSBXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSBmYWxzZTsKKwkvKiBjaGFubmVsKF90eXBlKSBjaGFuZ2VzIGFyZSBoYW5kbGVkIGJ5IGllZWU4MDIxMV9od19jb25maWcgKi8KIAlsb2NhbC0+b3Blcl9jaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7Ci0JY29uZmlnX2NoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUOworCisJbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA9IDA7CiAKIAlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKQEAgLTg4NSw3ICs4MjQsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwpAQCAtOTA2LDI3ICs4NDUsMjcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgaW50IGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGJzc19wcml2YWN5OwogCWludCB3ZXBfcHJpdmFjeTsKIAlpbnQgcHJpdmFjeV9pbnZva2VkOwogCi0JaWYgKCFpZnN0YSB8fCAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NSVhFRF9DRUxMKSkKKwlpZiAoIWlmbWdkIHx8IChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01JWEVEX0NFTEwpKQogCQlyZXR1cm4gMDsKIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKIAkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuIDA7CiAKLQlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKTsKKwlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpOwogCXdlcF9wcml2YWN5ID0gISFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHNkYXRhKTsKLQlwcml2YWN5X2ludm9rZWQgPSAhIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCk7CisJcHJpdmFjeV9pbnZva2VkID0gISEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQpOwogCiAJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CiAKQEAgLTkzNiwzOCArODc1LDQyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlpZnN0YS0+YXNzb2NfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWZtZ2QtPmFzc29jX3RyaWVzKys7CisJaWYgKGlmbWdkLT5hc3NvY190cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiB3aXRoIEFQICVwTSIKIAkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwotCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhLCBpZnN0YSk7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZSB3aXRoIEFQICVwTVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEsIGlmc3RhKSkgeworCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtaXNtYXRjaCBpbiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gYW5kICIKIAkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gYWJvcnQgYXNzb2NpYXRpb25cbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9zZW5kX2Fzc29jKHNkYXRhLCBpZnN0YSk7CisJaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEpOwogCi0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCBkaXNhc3NvYzsKQEAgLTk3NywzOCArOTIwLDQwIEBACiAJICogZm9yIGJldHRlciBBUHMuICovCiAJLyogVE9ETzogcmVtb3ZlIGV4cGlyZWQgQlNTZXMgKi8KIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFNUQSBlbnRyeSBmb3Igb3duIEFQICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCQlkaXNhc3NvYyA9IDE7CiAJfSBlbHNlIHsKIAkJZGlzYXNzb2MgPSAwOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAogCQkJICAgICAgIHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgewotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgeworCQkJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gUHJvYmVSZXNwIGZyb20gIgogCQkJCSAgICAgICAiY3VycmVudCBBUCAlcE0gLSBhc3N1bWUgb3V0IG9mICIKIAkJCQkgICAgICAgInJhbmdlXG4iLAotCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOworCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCQkJCWRpc2Fzc29jID0gMTsKIAkJCX0gZWxzZQotCQkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZzdGEtPmJzc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWRfbGVuKTsKLQkJCWlmc3RhLT5mbGFncyBePSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsCisJCQkJCQkJIGlmbWdkLT5zc2lkLAorCQkJCQkJCSBpZm1nZC0+c3NpZF9sZW4sCisJCQkJCQkJIE5VTEwsIDApOworCQkJaWZtZ2QtPmZsYWdzIF49IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKIAkJfSBlbHNlIHsKLQkJCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOwotCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmxhc3RfcHJvYmUgKworCQkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZm1nZC0+bGFzdF9wcm9iZSArCiAJCQkJICAgICAgIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCkpIHsKLQkJCQlpZnN0YS0+bGFzdF9wcm9iZSA9IGppZmZpZXM7Ci0JCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YS0+YnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOworCQkJCWlmbWdkLT5sYXN0X3Byb2JlID0gamlmZmllczsKKwkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQkJCQkgaWZtZ2QtPnNzaWQsCisJCQkJCQkJIGlmbWdkLT5zc2lkX2xlbiwKKwkJCQkJCQkgTlVMTCwgMCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMDE2LDI1ICs5NjEsMjUgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChkaXNhc3NvYykKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCiAJCQkJCVdMQU5fUkVBU09OX1BSRVZfQVVUSF9OT1RfVkFMSUQpOwogCWVsc2UKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCBpZnN0YSk7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogewpAQCAtMTA0NSw1MCArOTkwLDM3IEBACiAJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5jaGFsbGVuZ2UpCiAJCXJldHVybjsKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMywgZWxlbXMuY2hhbGxlbmdlIC0gMiwKLQkJCSAgICBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwgMSk7CisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMywgc2RhdGEtPnUubWdkLmF1dGhfYWxnLAorCQkJICAgIGVsZW1zLmNoYWxsZW5nZSAtIDIsIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLAorCQkJICAgIHNkYXRhLT51Lm1nZC5ic3NpZCwgMSk7CisJc2RhdGEtPnUubWdkLmF1dGhfdHJhbnNhY3Rpb24gPSA0OwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUpCiAJCXJldHVybjsKIAogCWlmIChsZW4gPCAyNCArIDYpCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAogCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKIAlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwogCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJLyoKLQkJICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCi0JCSAqIG5ldHdvcmtzIGFuZCBtb3N0IGltcGxlbWVudGF0aW9ucyBkbyBub3Qgc2VlbSB0byB1c2UgaXQuCi0JCSAqIEhvd2V2ZXIsIHRyeSB0byByZXBseSB0byBhdXRoZW50aWNhdGlvbiBhdHRlbXB0cyBpZiBzb21lb25lCi0JCSAqIGhhcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0aGlzLgotCQkgKi8KLQkJaWYgKGF1dGhfYWxnICE9IFdMQU5fQVVUSF9PUEVOIHx8IGF1dGhfdHJhbnNhY3Rpb24gIT0gMSkKLQkJCXJldHVybjsKLQkJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgaWZzdGEsIDIsIE5VTEwsIDAsIDApOwotCX0KLQotCWlmIChhdXRoX2FsZyAhPSBpZnN0YS0+YXV0aF9hbGcgfHwKLQkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSBpZnN0YS0+YXV0aF90cmFuc2FjdGlvbikKKwlpZiAoYXV0aF9hbGcgIT0gaWZtZ2QtPmF1dGhfYWxnIHx8CisJICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24pCiAJCXJldHVybjsKIAogCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CkBAIC0xMDk3LDE1ICsxMDI5LDE1IEBACiAJCQljb25zdCBpbnQgbnVtX2FsZ3MgPSBBUlJBWV9TSVpFKGFsZ3MpOwogCQkJaW50IGksIHBvczsKIAkJCWFsZ3NbMF0gPSBhbGdzWzFdID0gYWxnc1syXSA9IDB4ZmY7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKIAkJCQlhbGdzWzBdID0gV0xBTl9BVVRIX09QRU47Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKIAkJCQlhbGdzWzFdID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKIAkJCQlhbGdzWzJdID0gV0xBTl9BVVRIX0xFQVA7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTikKIAkJCQlwb3MgPSAwOwotCQkJZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKQorCQkJZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKQogCQkJCXBvcyA9IDE7CiAJCQllbHNlCiAJCQkJcG9zID0gMjsKQEAgLTExMTMsMTA1ICsxMDQ1LDEwNSBAQAogCQkJCXBvcysrOwogCQkJCWlmIChwb3MgPj0gbnVtX2FsZ3MpCiAJCQkJCXBvcyA9IDA7Ci0JCQkJaWYgKGFsZ3NbcG9zXSA9PSBpZnN0YS0+YXV0aF9hbGcgfHwKKwkJCQlpZiAoYWxnc1twb3NdID09IGlmbWdkLT5hdXRoX2FsZyB8fAogCQkJCSAgICBhbGdzW3Bvc10gPT0gMHhmZikKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKGFsZ3NbcG9zXSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSAmJgogCQkJCSAgICAhaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzZGF0YSkpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmc3RhLT5hdXRoX2FsZyA9IGFsZ3NbcG9zXTsKKwkJCQlpZm1nZC0+YXV0aF9hbGcgPSBhbGdzW3Bvc107CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaCAoaWZzdGEtPmF1dGhfYWxnKSB7CisJc3dpdGNoIChpZm1nZC0+YXV0aF9hbGcpIHsKIAljYXNlIFdMQU5fQVVUSF9PUEVOOgogCWNhc2UgV0xBTl9BVVRIX0xFQVA6Ci0JCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIFdMQU5fQVVUSF9TSEFSRURfS0VZOgotCQlpZiAoaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPT0gNCkKLQkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSwgaWZzdGEpOworCQlpZiAoaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPT0gNCkKKwkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7CiAJCWVsc2UKLQkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzZGF0YSwgaWZzdGEsIG1nbXQsIGxlbik7CisJCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc2RhdGEsIG1nbXQsIGxlbik7CiAJCWJyZWFrOwogCX0KIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXUxNiByZWFzb25fY29kZTsKIAogCWlmIChsZW4gPCAyNCArIDIpCiAJCXJldHVybjsKIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQogCQlyZXR1cm47CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0ZWQgKFJlYXNvbjogJXUpXG4iLAogCQkJCXNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAotCSAgICBpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAotCSAgICBpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCWlmIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAorCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAorCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKIAl9CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgZmFsc2UsIDApOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIGZhbHNlLCAwKTsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICAgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKIAkJcmV0dXJuOwogCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCiAJCXJldHVybjsKIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRlZCAoUmVhc29uOiAldSlcbiIsCiAJCQkJc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uX2NvZGUpOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgewotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgeworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOwogCX0KIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCQkgc2l6ZV90IGxlbiwKIAkJCQkJIGludCByZWFzc29jKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU2NCByYXRlcywgYmFzaWNfcmF0ZXM7CisJdTMyIHJhdGVzLCBiYXNpY19yYXRlczsKIAl1MTYgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsIGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOwpAQCAtMTIyNCwxMyArMTE1NiwxMyBAQAogCS8qIEFzc29jUmVzcCBhbmQgUmVhc3NvY1Jlc3AgaGF2ZSBpZGVudGljYWwgc3RydWN0dXJlLCBzbyBwcm9jZXNzIGJvdGgKIAkgKiBvZiB0aGVtIGluIHRoaXMgZnVuY3Rpb24uICovCiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKQogCQlyZXR1cm47CiAKIAlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAogCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CkBAIC0xMjQyLDEzICsxMTc0LDMxIEBACiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCiAJICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOwogCisJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCisJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgeworCQl1MzIgdHUsIG1zOworCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOworCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgcmVqZWN0ZWQgYXNzb2NpYXRpb24gdGVtcG9yYXJpbHk7ICIKKwkJICAgICAgICJjb21lYmFjayBkdXJhdGlvbiAldSBUVSAoJXUgbXMpXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgdHUsIG1zKTsKKwkJaWYgKG1zID4gSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpCisJCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwKKwkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGF0dXNfY29kZSk7CiAJCS8qIGlmIHRoaXMgd2FzIGEgcmVhc3NvY2lhdGlvbiwgZW5zdXJlIHdlIHRyeSBhICJmdWxsIgogCQkgKiBhc3NvY2lhdGlvbiBuZXh0IHRpbWUuIFRoaXMgd29ya3MgYXJvdW5kIHNvbWUgYnJva2VuIEFQcwogCQkgKiB3aGljaCBkbyBub3QgY29ycmVjdGx5IHJlamVjdCByZWFzc29jaWF0aW9uIHJlcXVlc3RzLiAqLwotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI1Nyw5ICsxMjA3LDYgQEAKIAkJICAgICAgICJzZXRcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFpZCk7CiAJYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwogCi0JcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwotCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwotCiAJaWYgKCFlbGVtcy5zdXBwX3JhdGVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gU3VwcFJhdGVzIGVsZW1lbnQgaW4gQXNzb2NSZXNwXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0xMjY3LDQwICsxMjE0LDI5IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZnN0YS0+YWlkID0gYWlkOwotCWlmc3RhLT5hcF9jYXBhYiA9IGNhcGFiX2luZm87CisJaWZtZ2QtPmFpZCA9IGFpZDsKKwlpZm1nZC0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOwogCi0Ja2ZyZWUoaWZzdGEtPmFzc29jcmVzcF9pZXMpOwotCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7Ci0JaWZzdGEtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuKTsKKwlrZnJlZShpZm1nZC0+YXNzb2NyZXNwX2llcyk7CisJaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuID0gbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KTsKKwlpZm1nZC0+YXNzb2NyZXNwX2llcyA9IGttYWxsb2MoaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpCisJCW1lbWNweShpZm1nZC0+YXNzb2NyZXNwX2llcywgcG9zLCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJLyogQWRkIFNUQSBlbnRyeSBmb3IgdGhlIEFQICovCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCiAJCW5ld3N0YSA9IHRydWU7CiAKLQkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmc3RhLT5ic3NpZCwgR0ZQX0FUT01JQyk7CisJCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBpZm1nZC0+YnNzaWQsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXN0YSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2MgU1RBIGVudHJ5IGZvciIKIAkJCSAgICAgICAiIHRoZSBBUFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAotCQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JCWlmIChic3MpIHsKLQkJCXN0YS0+bGFzdF9zaWduYWwgPSBic3MtPnNpZ25hbDsKLQkJCXN0YS0+bGFzdF9xdWFsID0gYnNzLT5xdWFsOwotCQkJc3RhLT5sYXN0X25vaXNlID0gYnNzLT5ub2lzZTsKLQkJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQl9CiAKIAkJLyogdXBkYXRlIG5ldyBzdGEgd2l0aCBpdHMgbGFzdCByeCBhY3Rpdml0eSAqLwogCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwpAQCAtMTM2Nyw3ICsxMzAzLDggQEAKIAllbHNlCiAJCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSkKKwkvKiBJZiBUS0lQL1dFUCBpcyB1c2VkLCBubyBuZWVkIHRvIHBhcnNlIEFQJ3MgSFQgY2FwYWJpbGl0aWVzICovCisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkKIAkJaWVlZTgwMjExX2h0X2NhcF9pZV90b19zdGFfaHRfY2FwKHNiYW5kLAogCQkJCWVsZW1zLmh0X2NhcF9lbGVtLCAmc3RhLT5zdGEuaHRfY2FwKTsKIApAQCAtMTM3NSw2ICsxMzEyLDkgQEAKIAogCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEKQorCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfTUZQKTsKKwogCWlmIChlbGVtcy53bW1fcGFyYW0pCiAJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9XTUUpOwogCkBAIC0xMzkxLDExICsxMzMxLDEyIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoZWxlbXMud21tX3BhcmFtKQotCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZtZ2QsIGVsZW1zLndtbV9wYXJhbSwKIAkJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCiAJaWYgKGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQorCSAgICAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKQogCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0X2luZm9fZWxlbSwKIAkJCQkJICAgICAgIGFwX2h0X2NhcF9mbGFncyk7CiAKQEAgLTE0MDMsMTM2ICsxMzQ0LDEyIEBACiAJICogaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKCkgd2lsbCB0ZWxsIHRoZSBkcml2ZXIgKi8KIAlic3NfY29uZi0+YWlkID0gYWlkOwogCWJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5ID0gY2FwYWJfaW5mbzsKLQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhLCBjaGFuZ2VkKTsKKwlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGNoYW5nZWQpOwogCi0JaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7CiB9CiAKIAotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgcmVzLCByYXRlcywgaSwgajsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXNwb25zZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCS8qIFJlbW92ZSBwb3NzaWJsZSBTVEEgZW50cmllcyBmcm9tIG90aGVyIElCU1MgbmV0d29ya3MuICovCi0Jc3RhX2luZm9fZmx1c2hfZGVsYXllZChzZGF0YSk7Ci0KLQlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7Ci0JCS8qIFJlc2V0IG93biBUU0YgdG8gYWxsb3cgdGltZSBzeW5jaHJvbml6YXRpb24gd29yay4gKi8KLQkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7Ci0JfQotCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQlyZXMgPSBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSBic3MtPmJlYWNvbl9pbnQgPj0gMTAgPyBic3MtPmJlYWNvbl9pbnQgOiAxMDsKLQotCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gYnNzLT5jYXBhYmlsaXR5ICYKLQkJV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kgPyAxIDogMDsKLQotCXJlcyA9IGllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgYnNzLT5mcmVxKTsKLQotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQkvKiBCdWlsZCBJQlNTIHByb2JlIHJlc3BvbnNlICovCi0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQotCQlza2JfcHV0KHNrYiwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKLQltZW1zZXQobWdtdCwgMCwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkJSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOwotCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPQotCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5iZWFjb25faW50KTsKLQltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NChic3MtPnRpbWVzdGFtcCk7Ci0JbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGJzcy0+Y2FwYWJpbGl0eSk7Ci0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmc3RhLT5zc2lkX2xlbik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSBpZnN0YS0+c3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0KLQlyYXRlcyA9IGJzcy0+c3VwcF9yYXRlc19sZW47Ci0JaWYgKHJhdGVzID4gOCkKLQkJcmF0ZXMgPSA4OwotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JKnBvcysrID0gcmF0ZXM7Ci0JbWVtY3B5KHBvcywgYnNzLT5zdXBwX3JhdGVzLCByYXRlcyk7Ci0KLQlpZiAoYnNzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIDIgKyAxKTsKLQkJKnBvcysrID0gV0xBTl9FSURfRFNfUEFSQU1TOwotCQkqcG9zKysgPSAxOwotCQkqcG9zKysgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5mcmVxKTsKLQl9Ci0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDIpOwotCSpwb3MrKyA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOwotCSpwb3MrKyA9IDI7Ci0JLyogRklYOiBzZXQgQVRJTSB3aW5kb3cgYmFzZWQgb24gc2NhbiByZXN1bHRzICovCi0JKnBvcysrID0gMDsKLQkqcG9zKysgPSAwOwotCi0JaWYgKGJzcy0+c3VwcF9yYXRlc19sZW4gPiA4KSB7Ci0JCXJhdGVzID0gYnNzLT5zdXBwX3JhdGVzX2xlbiAtIDg7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJKnBvcysrID0gcmF0ZXM7Ci0JCW1lbWNweShwb3MsICZic3MtPnN1cHBfcmF0ZXNbOF0sIHJhdGVzKTsKLQl9Ci0KLQlpZnN0YS0+cHJvYmVfcmVzcCA9IHNrYjsKLQotCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7Ci0KLQotCXJhdGVzID0gMDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgewotCQlpbnQgYml0cmF0ZSA9IChic3MtPnN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7Ci0JCWZvciAoaiA9IDA7IGogPCBzYmFuZC0+bl9iaXRyYXRlczsgaisrKQotCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tqXS5iaXRyYXRlID09IGJpdHJhdGUpCi0JCQkJcmF0ZXMgfD0gQklUKGopOwotCX0KLQlpZnN0YS0+c3VwcF9yYXRlc19iaXRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdID0gcmF0ZXM7Ci0KLQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBic3MpOwotCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEOwotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwotCi0JaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgdHJ1ZSk7Ci0KLQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLQotCXJldHVybiByZXM7Ci19Ci0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgIHNpemVfdCBsZW4sCkBAIC0xNTQzLDExICsxMzYwLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlpbnQgZnJlcTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQl1NjQgYmVhY29uX3RpbWVzdGFtcCwgcnhfdGltZXN0YW1wOwotCXU2NCBzdXBwX3JhdGVzID0gMDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSByeF9zdGF0dXMtPmJhbmQ7CiAKIAlpZiAoZWxlbXMtPmRzX3BhcmFtcyAmJiBlbGVtcy0+ZHNfcGFyYW1zX2xlbiA9PSAxKQogCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGVsZW1zLT5kc19wYXJhbXNbMF0pOwpAQCAtMTU1OSwxMTIgKzEzNzIsMTYgQEAKIAlpZiAoIWNoYW5uZWwgfHwgY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKIAkJcmV0dXJuOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJiBlbGVtcy0+c3VwcF9yYXRlcyAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKLQkJc3VwcF9yYXRlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKGxvY2FsLCBlbGVtcywgYmFuZCk7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpOwotCQlpZiAoc3RhKSB7Ci0JCQl1NjQgcHJldl9yYXRlczsKLQotCQkJcHJldl9yYXRlcyA9IHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF07Ci0JCQkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KLQkJCXN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gPSBzdXBwX3JhdGVzIHwKLQkJCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCQlpZiAoc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSAhPSBwcmV2X3JhdGVzKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdXBkYXRlZCBzdXBwX3JhdGVzIHNldCAiCi0JCQkJICAgICJmb3IgJXBNIGJhc2VkIG9uIGJlYWNvbiBpbmZvICgweCVsbHggfCAiCi0JCQkJICAgICIweCVsbHggLT4gMHglbGx4KVxuIiwKLQkJCQkgICAgc2RhdGEtPmRldi0+bmFtZSwKLQkJCQkgICAgc3RhLT5zdGEuYWRkciwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJldl9yYXRlcywKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3VwcF9yYXRlcywKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSk7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7Ci0JCX0KLQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9Ci0KIAlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKGxvY2FsLCByeF9zdGF0dXMsIG1nbXQsIGxlbiwgZWxlbXMsCi0JCQkJCWZyZXEsIGJlYWNvbik7CisJCQkJCWNoYW5uZWwsIGJlYWNvbik7CiAJaWYgKCFic3MpCiAJCXJldHVybjsKIAotCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLwotCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPnRpbWVzdGFtcDsKLQotCS8qCi0JICogSW4gU1RBIG1vZGUsIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyBzaG91bGQgbm90IGJlIG92ZXJyaWRkZW4KLQkgKiBieSBiZWFjb25zIGJlY2F1c2UgdGhleSdyZSBub3QgbmVjZXNzYXJpbHkgYWNjdXJhdGUgdGhlcmUuCi0JICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBic3MtPmxhc3RfcHJvYmVfcmVzcCAmJiBiZWFjb24pIHsKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIG1lcmdlIElCU1MgKi8KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmIGJlYWNvbiAmJgotCSAgICBic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUyAmJgotCSAgICBic3MtPmZyZXEgPT0gbG9jYWwtPm9wZXJfY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJiYKLQkgICAgZWxlbXMtPnNzaWRfbGVuID09IHNkYXRhLT51LnN0YS5zc2lkX2xlbiAmJgotCSAgICBtZW1jbXAoZWxlbXMtPnNzaWQsIHNkYXRhLT51LnN0YS5zc2lkLAotCQkJCXNkYXRhLT51LnN0YS5zc2lkX2xlbikgPT0gMCkgewotCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7Ci0JCQkvKiBpbiBvcmRlciBmb3IgY29ycmVjdCBJQlNTIG1lcmdpbmcgd2UgbmVlZCBtYWN0aW1lCi0JCQkgKgotCQkJICogc2luY2UgbWFjdGltZSBpcyBkZWZpbmVkIGFzIHRoZSB0aW1lIHRoZSBmaXJzdCBkYXRhCi0JCQkgKiBzeW1ib2wgb2YgdGhlIGZyYW1lIGhpdHMgdGhlIFBIWSwgYW5kIHRoZSB0aW1lc3RhbXAKLQkJCSAqIG9mIHRoZSBiZWFjb24gaXMgZGVmaW5lZCBhcyAidGhlIHRpbWUgdGhhdCB0aGUgZGF0YQotCQkJICogc3ltYm9sIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGJpdCBvZiB0aGUgdGltZXN0YW1wIGlzCi0JCQkgKiB0cmFuc21pdHRlZCB0byB0aGUgUEhZIHBsdXMgdGhlIHRyYW5zbWl0dGluZyBTVEHigJlzCi0JCQkgKiBkZWxheXMgdGhyb3VnaCBpdHMgbG9jYWwgUEhZIGZyb20gdGhlIE1BQy1QSFkKLQkJCSAqIGludGVyZmFjZSB0byBpdHMgaW50ZXJmYWNlIHdpdGggdGhlIFdNIgotCQkJICogKDgwMi4xMSAxMS4xLjIpIC0gZXF1YWxzIHRoZSB0aW1lIHRoaXMgYml0IGFycml2ZXMgYXQKLQkJCSAqIHRoZSByZWNlaXZlciAtIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlCi0JCQkgKiBvZmZzZXQgYmV0d2VlbiB0aGUgdHdvLgotCQkJICogZS5nOiBhdCAxIE1CaXQgdGhhdCBtZWFucyBtYWN0aW1lIGlzIDE5MiB1c2VjIGVhcmxpZXIKLQkJCSAqICg9MjQgYnl0ZXMgKiA4IHVzZWNzL2J5dGUpIHRoYW4gdGhlIGJlYWNvbiB0aW1lc3RhbXAuCi0JCQkgKi8KLQkJCWludCByYXRlOwotCQkJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpIHsKLQkJCQlyYXRlID0gNjU7IC8qIFRPRE86IEhUIHJhdGVzICovCi0JCQl9IGVsc2UgewotCQkJCXJhdGUgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdLT4KLQkJCQkJYml0cmF0ZXNbcnhfc3RhdHVzLT5yYXRlX2lkeF0uYml0cmF0ZTsKLQkJCX0KLQkJCXJ4X3RpbWVzdGFtcCA9IHJ4X3N0YXR1cy0+bWFjdGltZSArICgyNCAqIDggKiAxMCAvIHJhdGUpOwotCQl9IGVsc2UgaWYgKGxvY2FsICYmIGxvY2FsLT5vcHMgJiYgbG9jYWwtPm9wcy0+Z2V0X3RzZikKLQkJCS8qIHNlY29uZCBiZXN0IG9wdGlvbjogZ2V0IGN1cnJlbnQgVFNGICovCi0JCQlyeF90aW1lc3RhbXAgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7Ci0JCWVsc2UKLQkJCS8qIGNhbid0IG1lcmdlIHdpdGhvdXQga25vd2luZyB0aGUgVFNGICovCi0JCQlyeF90aW1lc3RhbXAgPSAtMUxMVTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVwTSBCU1NJRD0iCi0JCSAgICAgICAiJXBNIFRTRj0weCVsbHggQkNOPTB4JWxseCBkaWZmPSVsbGQgQCVsdVxuIiwKLQkJICAgICAgIG1nbXQtPnNhLCBtZ210LT5ic3NpZCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfdGltZXN0YW1wLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliZWFjb25fdGltZXN0YW1wLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykocnhfdGltZXN0YW1wIC0gYmVhY29uX3RpbWVzdGFtcCksCi0JCSAgICAgICBqaWZmaWVzKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCQlpZiAoYmVhY29uX3RpbWVzdGFtcCA+IHJ4X3RpbWVzdGFtcCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJlYWNvbiBUU0YgaGlnaGVyIHRoYW4gIgotCQkJICAgICAgICJsb2NhbCBUU0YgLSBJQlNTIG1lcmdlIHdpdGggQlNTSUQgJXBNXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPmJzc2lkKTsKLSNlbmRpZgotCQkJaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsICZzZGF0YS0+dS5zdGEsIGJzcyk7Ci0JCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOwotCQl9CisJaWYgKGVsZW1zLT5jaF9zd2l0Y2hfZWxlbSAmJiAoZWxlbXMtPmNoX3N3aXRjaF9lbGVtX2xlbiA9PSAzKSAmJgorCSAgICAobWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKnN3X2VsZW0gPQorCQkJKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqKWVsZW1zLT5jaF9zd2l0Y2hfZWxlbTsKKwkJaWVlZTgwMjExX3Byb2Nlc3NfY2hhbnN3aXRjaChzZGF0YSwgc3dfZWxlbSwgYnNzKTsKIAl9CiAKIAlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKQEAgLTE2NzgsNyArMTM5NSw2IEBACiB7CiAJc2l6ZV90IGJhc2VsZW47CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAogCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCiAJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KQEAgLTE2OTQsMjUgKzE0MTAsMjQgQEAKIAogCS8qIGRpcmVjdCBwcm9iZSBtYXkgYmUgcGFydCBvZiB0aGUgYXNzb2NpYXRpb24gZmxvdyAqLwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLAotCQkJCQkJCSZpZnN0YS0+cmVxdWVzdCkpIHsKKwkgICAgJnNkYXRhLT51Lm1nZC5yZXF1ZXN0KSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgZGlyZWN0IHByb2JlIHJlc3BvbmRlZFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwogCX0KIH0KIAotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzaXplX3QgYmFzZWxlbjsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAl1MzIgY2hhbmdlZCA9IDA7Ci0JYm9vbCBlcnBfdmFsaWQ7CisJYm9vbCBlcnBfdmFsaWQsIGRpcmVjdGVkX3RpbTsKIAl1OCBlcnBfdmFsdWUgPSAwOwogCiAJLyogUHJvY2VzcyBiZWFjb24gZnJvbSB0aGUgY3VycmVudCBCU1MgKi8KQEAgLTE3MjYsMTUgKzE0NDEsNDMgQEAKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKKwkgICAgbWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJaWYgKHJ4X3N0YXR1cy0+ZnJlcSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCSBlbGVtcy53bW1fcGFyYW1fbGVuKTsKIAorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spIHsKKwkJZGlyZWN0ZWRfdGltID0gaWVlZTgwMjExX2NoZWNrX3RpbSgmZWxlbXMsIGlmbWdkLT5haWQpOworCisJCWlmIChkaXJlY3RlZF90aW0pIHsKKwkJCWlmIChsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7CisJCQkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCQkgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCQkJfSBlbHNlIHsKKwkJCQlsb2NhbC0+cHNwb2xsaW5nID0gdHJ1ZTsKKworCQkJCS8qCisJCQkJICogSGVyZSBpcyBhc3N1bWVkIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlCisJCQkJICogYWJsZSB0byBzZW5kIHBzLXBvbGwgZnJhbWUgYW5kIHJlY2VpdmUgYQorCQkJCSAqIHJlc3BvbnNlIGV2ZW4gdGhvdWdoIHBvd2VyIHNhdmUgbW9kZSBpcworCQkJCSAqIGVuYWJsZWQsIGJ1dCBzb21lIGRyaXZlcnMgbWlnaHQgcmVxdWlyZQorCQkJCSAqIHRvIGRpc2FibGUgcG93ZXIgc2F2ZSBoZXJlLiBUaGlzIG5lZWRzCisJCQkJICogdG8gYmUgaW52ZXN0aWdhdGVkLgorCQkJCSAqLworCQkJCWllZWU4MDIxMV9zZW5kX3BzcG9sbChsb2NhbCwgc2RhdGEpOworCQkJfQorCQl9CisJfQogCiAJaWYgKGVsZW1zLmVycF9pbmZvICYmIGVsZW1zLmVycF9pbmZvX2xlbiA+PSAxKSB7CiAJCWVycF92YWxpZCA9IHRydWU7CkBAIC0xNzQ3LDE0ICsxNDkwLDE1IEBACiAJCQllcnBfdmFsaWQsIGVycF92YWx1ZSk7CiAKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiBlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtKSB7CisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSB7CiAJCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAkJdTE2IGFwX2h0X2NhcF9mbGFnczsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJCWlmICghc3RhKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKQEAgLTE3NzgsOTIgKzE1MjIsMjggQEAKIAkJICogZm9yIHRoZSBCU1NJRCB3ZSBhcmUgYXNzb2NpYXRlZCB0byAqLwogCQlyZWd1bGF0b3J5X2hpbnRfMTFkKGxvY2FsLT5ody53aXBoeSwKIAkJCWVsZW1zLmNvdW50cnlfZWxlbSwgZWxlbXMuY291bnRyeV9lbGVtX2xlbik7CisKKwkJLyogVE9ETzogSUJTUyBhbHNvIG5lZWRzIHRoaXMgKi8KKwkJaWYgKGVsZW1zLnB3cl9jb25zdHJfZWxlbSkKKwkJCWllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzZGF0YSwKKwkJCQlsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuY2FwYWJfaW5mbyksCisJCQkJZWxlbXMucHdyX2NvbnN0cl9lbGVtLAorCQkJCWVsZW1zLnB3cl9jb25zdHJfZWxlbV9sZW4pOwogCX0KIAogCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQlzaXplX3QgbGVuLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoraWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCB0eF9sYXN0X2JlYWNvbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKLQl1OCAqcG9zLCAqZW5kOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEIHx8Ci0JICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZzdGEtPnByb2JlX3Jlc3ApCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKLQkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOwotCWVsc2UKLQkJdHhfbGFzdF9iZWFjb24gPSAxOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgotCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKLQkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCi0JaWYgKCF0eF9sYXN0X2JlYWNvbikKLQkJcmV0dXJuOwotCi0JaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuOwotCi0JZW5kID0gKCh1OCAqKSBtZ210KSArIGxlbjsKLQlwb3MgPSBtZ210LT51LnByb2JlX3JlcS52YXJpYWJsZTsKLQlpZiAocG9zWzBdICE9IFdMQU5fRUlEX1NTSUQgfHwKLQkgICAgcG9zICsgMiArIHBvc1sxXSA+IGVuZCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBTU0lEIElFIGluIFByb2JlUmVxICIKLQkJICAgICAgICJmcm9tICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCWlmIChwb3NbMV0gIT0gMCAmJgotCSAgICAocG9zWzFdICE9IGlmc3RhLT5zc2lkX2xlbiB8fAotCSAgICAgbWVtY21wKHBvcyArIDIsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pICE9IDApKSB7Ci0JCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLwotCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCi0JcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXNwLT5kYSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJZ290byBmYWlsOwotCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CkBAIC0xODc4LDExMyArMTU1OCw2OCBAQAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JCXNrYl9xdWV1ZV90YWlsKCZpZnN0YS0+c2tiX3F1ZXVlLCBza2IpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JCXJldHVybjsKKwkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUsIHNrYik7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKLSBmYWlsOgotCWtmcmVlX3NrYihza2IpOworCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KIAlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIAogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKLQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCSAgICByeF9zdGF0dXMpOwotCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sIDApOworCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuLCAxKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQlpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKIAkJYnJlYWs7CiAJfQogCiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBhY3RpdmUgPSAwOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCi0JCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAotCQkJICAgICAgIGppZmZpZXMpKSB7Ci0JCQlhY3RpdmUrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gYWN0aXZlOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKTsKLQlpZiAoaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gYWN0aXZlIElCU1MgU1RBcyAtIHRyeWluZyB0byBzY2FuIGZvciBvdGhlciAiCi0JICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCWllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotfQotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCiAJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgewpAQCAtMTk5MiwyOTggKzE2MjcsMTA5IEBACiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwogCX0KIAotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSAtMTsgLyogYWxsb3cgYW55IFdNTSB1cGRhdGUgKi8KKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCiAKIAotCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOwotCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKKwlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKKwllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOworCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0xFQVA7CiAJZWxzZQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IC0xOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwotCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKLQlpZnN0YS0+YXV0aF90cmllcyA9IDA7Ci0JaWZzdGEtPmFzc29jX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47CisJaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7CisJaWZtZ2QtPmF1dGhfdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY190cmllcyA9IDA7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLT5kZXYpOwogfQogCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9tYXRjaF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICAgY29uc3QgY2hhciAqc3NpZCwgaW50IHNzaWRfbGVuKQorc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWludCB0bXAsIGhpZGRlbl9zc2lkOwotCi0JaWYgKHNzaWRfbGVuID09IGlmc3RhLT5zc2lkX2xlbiAmJgotCSAgICAhbWVtY21wKGlmc3RhLT5zc2lkLCBzc2lkLCBzc2lkX2xlbikpCi0JCXJldHVybiAxOwotCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpCi0JCXJldHVybiAwOwotCi0JaGlkZGVuX3NzaWQgPSAxOwotCXRtcCA9IHNzaWRfbGVuOwotCXdoaWxlICh0bXAtLSkgewotCQlpZiAoc3NpZFt0bXBdICE9ICdcMCcpIHsKLQkJCWhpZGRlbl9zc2lkID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGhpZGRlbl9zc2lkICYmIChpZnN0YS0+c3NpZF9sZW4gPT0gc3NpZF9sZW4gfHwgc3NpZF9sZW4gPT0gMCkpCi0JCXJldHVybiAxOwotCi0JaWYgKHNzaWRfbGVuID09IDEgJiYgc3NpZFswXSA9PSAnICcpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXU4IGJzc2lkW0VUSF9BTEVOXSwgKnBvczsKLQlpbnQgaTsKLQlpbnQgcmV0OworCXU4ICpic3NpZCA9IGlmbWdkLT5ic3NpZCwgKnNzaWQgPSBpZm1nZC0+c3NpZDsKKwl1OCBzc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKKwl1MTYgY2FwYV9tYXNrID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKwl1MTYgY2FwYV92YWwgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7CiAKLSNpZiAwCi0JLyogRWFzaWVyIHRlc3RpbmcsIHVzZSBmaXhlZCBCU1NJRC4gKi8KLQltZW1zZXQoYnNzaWQsIDB4ZmUsIEVUSF9BTEVOKTsKLSNlbHNlCi0JLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCi0JICogb3duIE1BQyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBwcm9wZXIKLQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwotCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07Ci0JYnNzaWRbMF0gJj0gfjB4MDE7Ci0JYnNzaWRbMF0gfD0gMHgwMjsKLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDcmVhdGluZyBuZXcgSUJTUyBuZXR3b3JrLCBCU1NJRCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKLQotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfYWRkKGxvY2FsLCBic3NpZCwKLQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBzZGF0YS0+dS5zdGEuc3NpZCwgc2RhdGEtPnUuc3RhLnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlic3MtPmJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tic3MtPmJhbmRdOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPT0gMCkKLQkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKLQlic3MtPmJlYWNvbl9pbnQgPSBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50OwotCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwotCWJzcy0+Y2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwotCi0JaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKLQkJYnNzLT5jYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCWVsc2UKLQkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOwotCi0JYnNzLT5zdXBwX3JhdGVzX2xlbiA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCXBvcyA9IGJzcy0+c3VwcF9yYXRlczsKLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOwotCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJaWYgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwgfAorCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAorCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpIHsKKwkJY2FwYV9tYXNrIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQorCQkJY2FwYV92YWwgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CiAJfQogCi0JcmV0ID0gaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGlmc3RhLCBic3MpOwotCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCXJldHVybiByZXQ7Ci19CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkKKwkJY2hhbiA9IE5VTEw7CiAKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkKKwkJYnNzaWQgPSBOVUxMOwogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCWludCBmb3VuZCA9IDA7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCWludCBhY3RpdmVfaWJzczsKLQotCWlmIChpZnN0YS0+c3NpZF9sZW4gPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdGFfZmluZF9pYnNzIChhY3RpdmVfaWJzcz0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmxvY2FsLT5ic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoaWZzdGEtPnNzaWRfbGVuICE9IGJzcy0+c3NpZF9sZW4gfHwKLQkJICAgIG1lbWNtcChpZnN0YS0+c3NpZCwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSAhPSAwCi0JCSAgICB8fCAhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKLQkJCWNvbnRpbnVlOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICIgICBic3NpZD0lcE0gZm91bmRcbiIsIGJzcy0+YnNzaWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0JCW1lbWNweShic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCQlmb3VuZCA9IDE7Ci0JCWlmIChhY3RpdmVfaWJzcyB8fCBtZW1jbXAoYnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCi0JCQlicmVhazsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSB7CisJCXNzaWQgPSBOVUxMOworCQlzc2lkX2xlbiA9IDA7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlpZiAoZm91bmQpCi0JCXByaW50ayhLRVJOX0RFQlVHICIgICBzdGFfZmluZF9pYnNzOiBzZWxlY3RlZCAlcE0gY3VycmVudCAiCi0JCSAgICAgICAiJXBNXG4iLCBic3NpZCwgaWZzdGEtPmJzc2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIGNoYW4sCisJCQkJICAgICAgIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQkgICAgICAgY2FwYV9tYXNrLCBjYXBhX3ZhbCk7CiAKLQlpZiAoZm91bmQgJiYgbWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCWludCByZXQ7Ci0JCWludCBzZWFyY2hfZnJlcTsKLQotCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKQotCQkJc2VhcmNoX2ZyZXEgPSBic3MtPmZyZXE7CisJaWYgKGJzcykgeworCQlpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGJzcy0+Y2Jzcy5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQpKQorCQkJaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzZGF0YSwgYnNzLT5zc2lkLAorCQkJCQkgICAgICAgYnNzLT5zc2lkX2xlbik7CisJCWllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHNkYXRhLCBic3MtPmNic3MuYnNzaWQpOworCQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBic3MtPnN1cHBfcmF0ZXNfbGVuLAorCQkJCQkJICAgIGJzcy0+c3VwcF9yYXRlcyk7CisJCWlmIChzZGF0YS0+dS5tZ2QubWZwID09IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQpCisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKIAkJZWxzZQotCQkJc2VhcmNoX2ZyZXEgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKLQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgYnNzaWQsIHNlYXJjaF9mcmVxLAotCQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkJaWYgKCFic3MpCi0JCQlnb3RvIGRvbnRfam9pbjsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgotCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7Ci0JCXJldCA9IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBpZnN0YSwgYnNzKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi1kb250X2pvaW46Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiICAgZGlkIG5vdCB0cnkgdG8gam9pbiBpYnNzXG4iKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCi0JLyogU2VsZWN0ZWQgSUJTUyBub3QgZm91bmQgaW4gY3VycmVudCBzY2FuIHJlc3VsdHMgLSB0cnkgdG8gc2NhbiAqLwotCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEICYmCi0JICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkgewotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCi0JCQkJICAgICAgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwotCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCArCi0JCQkgICAgICBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCi0JCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCBpZnN0YS0+c3NpZCwKLQkJCQkJICAgICAgaWZzdGEtPnNzaWRfbGVuKTsKLQl9IGVsc2UgaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQpIHsKLQkJaW50IGludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUw7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmlic3Nfam9pbl9yZXEgKwotCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCkpIHsKLQkJCWlmICgoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUykgJiYKLQkJCSAgICAoIShsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFncyAmCi0JCQkJCUlFRUU4MDIxMV9DSEFOX05PX0lCU1MpKSkKLQkJCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzZGF0YSwgaWZzdGEpOwotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24iCi0JCQkJICAgICAgICIgJWQgTUh6XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAotCQkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0JCQl9Ci0KLQkJCS8qIE5vIElCU1MgZm91bmQgLSBkZWNyZWFzZSBzY2FuIGludGVydmFsIGFuZCBjb250aW51ZQotCQkJICogc2Nhbm5pbmcuICovCi0JCQlpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1c7Ci0JCX0KLQotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0g7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgaW50ZXJ2YWwpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywgKnNlbGVjdGVkID0gTlVMTDsKLQlpbnQgdG9wX3Jzc2kgPSAwLCBmcmVxOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWZyZXEgPSBsb2NhbC0+b3Blcl9jaGFubmVsLT5jZW50ZXJfZnJlcTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmxvY2FsLT5ic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCB8Ci0JCQlJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKLQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpICYmCi0JCSAgICAoISEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIF4KLQkJICAgICAhIXNkYXRhLT5kZWZhdWx0X2tleSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpICYmCi0JCSAgICBic3MtPmZyZXEgIT0gZnJlcSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpICYmCi0JCSAgICBtZW1jbXAoYnNzLT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpICYmCi0JCSAgICAhaWVlZTgwMjExX3N0YV9tYXRjaF9zc2lkKGlmc3RhLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFzZWxlY3RlZCB8fCB0b3BfcnNzaSA8IGJzcy0+c2lnbmFsKSB7Ci0JCQlzZWxlY3RlZCA9IGJzczsKLQkJCXRvcF9yc3NpID0gYnNzLT5zaWduYWw7Ci0JCX0KLQl9Ci0JaWYgKHNlbGVjdGVkKQotCQlhdG9taWNfaW5jKCZzZWxlY3RlZC0+dXNlcnMpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCi0JaWYgKHNlbGVjdGVkKSB7Ci0JCWllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgc2VsZWN0ZWQtPmZyZXEpOwotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKLQkJCWllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIHNlbGVjdGVkLT5zc2lkLAotCQkJCQkgICAgICAgc2VsZWN0ZWQtPnNzaWRfbGVuKTsKLQkJaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsIHNlbGVjdGVkLT5ic3NpZCk7Ci0JCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIHNlbGVjdGVkKTsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKIAogCQkvKiBTZW5kIG91dCBkaXJlY3QgcHJvYmUgaWYgbm8gcHJvYmUgcmVzcCB3YXMgcmVjZWl2ZWQgb3IKIAkJICogdGhlIG9uZSB3ZSBoYXZlIGlzIG91dGRhdGVkCiAJCSAqLwotCQlpZiAoIXNlbGVjdGVkLT5sYXN0X3Byb2JlX3Jlc3AgfHwKLQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgc2VsZWN0ZWQtPmxhc3RfcHJvYmVfcmVzcAorCQlpZiAoIWJzcy0+bGFzdF9wcm9iZV9yZXNwIHx8CisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9wcm9iZV9yZXNwCiAJCQkJCSsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkpCi0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKIAkJZWxzZQotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CiAKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIHNlbGVjdGVkKTsKLQkJaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlpZiAoaWZzdGEtPmFzc29jX3NjYW5fdHJpZXMgPCBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTKSB7Ci0JCQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcysrOwotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkKLQkJCQlpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgTlVMTCwgMCk7CisJCWlmIChpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA8IElFRUU4MDIxMV9BU1NPQ19TQ0FOU19NQVhfVFJJRVMpIHsKKwkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzKys7CisJCQkvKiBYWFggbWF5YmUgcmFjeT8gKi8KKwkJCWlmIChsb2NhbC0+c2Nhbl9yZXEpCisJCQkJcmV0dXJuIC0xOworCQkJbWVtY3B5KGxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKKwkJCSAgICAgICBpZm1nZC0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7CisJCQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKQorCQkJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSAwOwogCQkJZWxzZQotCQkJCWllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBpZnN0YS0+c3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWRfbGVuKTsKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7Ci0JCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZnN0YS0+cmVxdWVzdCk7Ci0JCX0gZWxzZQotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQkJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZm1nZC0+c3NpZF9sZW47CisKKwkJCWlmIChpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgJmxvY2FsLT5pbnRfc2Nhbl9yZXEpKQorCQkJCWllZWU4MDIxMV9zY2FuX2ZhaWxlZChsb2NhbCk7CisKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CisJCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCX0KIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtMjI5Miw5ICsxNzM4LDkgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5zdGEud29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lm1nZC53b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQpAQCAtMjMwMyw2MSArMTc0OSw2MCBAQAogCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQogCQlyZXR1cm47CiAKLQlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybjsKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZzdGEtPnNrYl9xdWV1ZSkpKQorCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmbWdkLT5za2JfcXVldWUpKSkKIAkJaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfbWdtdChzZGF0YSwgc2tiKTsKIAotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSAmJgotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSAmJgotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSAmJgotCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KSkgewotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgaWZzdGEtPnNjYW5fc3NpZCwKLQkJCQkgICAgIGlmc3RhLT5zY2FuX3NzaWRfbGVuKTsKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUgJiYKKwkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgJiYKKwkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgJiYKKwkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCkpIHsKKwkJLyoKKwkJICogVGhlIGNhbGwgdG8gaWVlZTgwMjExX3N0YXJ0X3NjYW4gY2FuIGZhaWwgYnV0IGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4KKwkJICogKHdoaWNoIHF1ZXVlZCBpZWVlODAyMTFfc3RhX3dvcmspIGRpZCBub3QgcmV0dXJuIGFuIGVycm9yLiBUaHVzLCBjYWxsCisJCSAqIGllZWU4MDIxMV9zY2FuX2ZhaWxlZCBoZXJlIGlmIGllZWU4MDIxMV9zdGFydF9zY2FuIGZhaWxzIGluIG9yZGVyIHRvCisJCSAqIG5vdGlmeSB0aGUgc2NhbiByZXF1ZXN0ZXIuCisJCSAqLworCQlpZiAoaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIGxvY2FsLT5zY2FuX3JlcSkpCisJCQlpZWVlODAyMTFfc2Nhbl9mYWlsZWQobG9jYWwpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpKSB7Ci0JCWlmIChpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHNkYXRhLCBpZnN0YSkpCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZtZ2QtPnJlcXVlc3QpKSB7CisJCWlmIChpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHNkYXRhKSkKIAkJCXJldHVybjsKLQkJY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQl9IGVsc2UgaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpKQorCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOworCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCkpCiAJCXJldHVybjsKIAotCXN3aXRjaCAoaWZzdGEtPnN0YXRlKSB7CisJc3dpdGNoIChpZm1nZC0+c3RhdGUpIHsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDoKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOgotCQlpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU6Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURToKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRDoKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0g6Ci0JCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEOgotCQlpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwogCQlicmVhazsKIAl9CiAKLQlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEsIGlmc3RhKSkgeworCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggYW5kICIKIAkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gZGlzYXNzb2NpYXRlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKIAotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlLCB0cnVlLAogCQkJCQlXTEFOX1JFQVNPTl9VTlNQRUNJRklFRCk7CiAJfQogfQpAQCAtMjM2NiwyMDggKzE4MTEsMTUzIEBACiB7CiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAotCQkJICAgJnNkYXRhLT51LnN0YS53b3JrKTsKKwkJCSAgICZzZGF0YS0+dS5tZ2Qud29yayk7CiB9CiAKIC8qIGludGVyZmFjZSBzZXR1cCAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCUlOSVRfV09SSygmaWZzdGEtPndvcmssIGllZWU4MDIxMV9zdGFfd29yayk7Ci0Jc2V0dXBfdGltZXIoJmlmc3RhLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJSU5JVF9XT1JLKCZpZm1nZC0+d29yaywgaWVlZTgwMjExX3N0YV93b3JrKTsKKwlJTklUX1dPUksoJmlmbWdkLT5jaHN3aXRjaF93b3JrLCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZzdGEtPnNrYl9xdWV1ZSk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpZm1nZC0+c2tiX3F1ZXVlKTsKIAotCWlmc3RhLT5jYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7Ci0JaWZzdGEtPmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIHwKKwlpZm1nZC0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCWlmbWdkLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8CiAJCUlFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUyB8CiAJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAJaWYgKGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJnNkYXRhLT5sb2NhbC0+aHcpID49IDQpCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEOwotfQotCi0vKgotICogQWRkIGEgbmV3IElCU1Mgc3RhdGlvbiwgd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuLAotICogaW4gSUJTUyBtb2RlLCByZWNlaXZpbmcgYSBmcmFtZSBmcm9tIGEgeWV0LXVua25vd24gc3RhdGlvbiwgaGVuY2UKLSAqIG11c3QgYmUgY2FsbGFibGUgaW4gYXRvbWljIGNvbnRleHQuCi0gKi8KLXN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJdTggKmJzc2lkLHU4ICphZGRyLCB1NjQgc3VwcF9yYXRlcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0KLQkvKiBUT0RPOiBDb3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSBhbmQKLQkgKiBhbGxvdyBuZXcgb25lIHRvIGJlIGFkZGVkLiAqLwotCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyByb29tIGZvciBhIG5ldyBJQlNTIFNUQSAiCi0JCQkgICAgICAgImVudHJ5ICVwTVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWRkcik7Ci0JCX0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXBNIChkZXY9JXMpXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIGFkZHIsIHNkYXRhLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0KLQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybiBOVUxMOwotCi0Jc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOwotCi0JLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCi0Jc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAotCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7Ci0KLQlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7Ci0KLQlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHN0YTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQ7CiB9CiAKIC8qIGNvbmZpZ3VyYXRpb24gaG9va3MgKi8KLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm47CiAKLQlpZiAoKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCB8CisJaWYgKChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgfAogCQkJICAgICBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKSkgJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKKwkgICAgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKIAkJCSAgICAgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSkpIHsKIAotCQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQotCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWlmIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpCisJCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAogCQkJCQkgICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOwogCi0JCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCk7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAl9CiB9CiAKLWludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoraW50IGllZWU4MDIxMV9zdGFfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KLQlpZiAoaWZzdGEtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZzdGEtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkgewotCQltZW1zZXQoaWZzdGEtPnNzaWQsIDAsIHNpemVvZihpZnN0YS0+c3NpZCkpOwotCQltZW1jcHkoaWZzdGEtPnNzaWQsIHNzaWQsIGxlbik7Ci0JCWlmc3RhLT5zc2lkX2xlbiA9IGxlbjsKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCX0KLQotCWlmIChsZW4pCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOworCWlmIChpZm1nZC0+c3NpZF9sZW4pCisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOwogCWVsc2UKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1NTSURfU0VUOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICAhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUKSkgewotCQlpZnN0YS0+aWJzc19qb2luX3JlcSA9IGppZmZpZXM7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSDsKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JfQorCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CiAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKKworCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmIChpZm1nZC0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7CisJCW1lbXNldChpZm1nZC0+c3NpZCwgMCwgc2l6ZW9mKGlmbWdkLT5zc2lkKSk7CisJCW1lbWNweShpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZtZ2QtPnNzaWRfbGVuID0gbGVuOworCX0KKworCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7Cit9CisKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCW1lbWNweShzc2lkLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkqbGVuID0gaWZzdGEtPnNzaWRfbGVuOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCW1lbWNweShzc2lkLCBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwkqbGVuID0gaWZtZ2QtPnNzaWRfbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0JaW50IHJlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKKwkJbWVtY3B5KGlmbWdkLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCX0gZWxzZSB7CisJCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKwl9CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JCXJlcyA9IDA7Ci0JCS8qCi0JCSAqIEhhY2shIFNlZSBhbHNvIGllZWU4MDIxMV9zdGFfc2V0X3NzaWQuCi0JCSAqLwotCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKLQkJaWYgKHJlcykgeworCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCWlmIChpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGNvbmZpZyBuZXcgQlNTSUQgdG8gIgogCQkJICAgICAgICJ0aGUgbG93LWxldmVsIGRyaXZlclxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gcmVzOwogCQl9CiAJfQogCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7Ci0JZWxzZQotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGllZWU4MDIxMV9zdGFfY29tbWl0KHNkYXRhKTsKIH0KIAogaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICppZSwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0Ja2ZyZWUoaWZzdGEtPmV4dHJhX2llKTsKKwlrZnJlZShpZm1nZC0+ZXh0cmFfaWUpOwogCWlmIChsZW4gPT0gMCkgewotCQlpZnN0YS0+ZXh0cmFfaWUgPSBOVUxMOwotCQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gMDsKKwkJaWZtZ2QtPmV4dHJhX2llID0gTlVMTDsKKwkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7CiAJCXJldHVybiAwOwogCX0KLQlpZnN0YS0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpZnN0YS0+ZXh0cmFfaWUpIHsKLQkJaWZzdGEtPmV4dHJhX2llX2xlbiA9IDA7CisJaWZtZ2QtPmV4dHJhX2llID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghaWZtZ2QtPmV4dHJhX2llKSB7CisJCWlmbWdkLT5leHRyYV9pZV9sZW4gPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtY3B5KGlmc3RhLT5leHRyYV9pZSwgaWUsIGxlbik7Ci0JaWZzdGEtPmV4dHJhX2llX2xlbiA9IGxlbjsKKwltZW1jcHkoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKTsKKwlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKIAkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCB0cnVlLCByZWFzb24pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbik7CkBAIC0yNTc1LDEwICsxOTY1LDEwIEBACiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCi0JCXJldHVybiAtMTsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQorCQlyZXR1cm4gLUVOT0xJTks7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1ODYsMTUgKzE5NzYsNiBAQAogdm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0KLQlpZiAoc2RhdGEgJiYgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpIHx8Ci0JCSAgICAoIShpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSAmJgotCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSkKLQkJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JfQogCiAJLyogUmVzdGFydCBTVEEgdGltZXJzICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMjYyMywxMiArMjAwNCwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsCiAJCQkgICAgIGR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKIAkJcmV0dXJuOwogCi0JbG9jYWwtPmh3LmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAorCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwogCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiB9CiAKQEAgLTI2MzgsMyArMjAyMiwzNiBAQAogCiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgaW50IHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKKwlfX2xlMTYgZmM7CisKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybjsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChudWxsZnVuYywgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwb3dlcnNhdmUpCisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BtLmMgYi9uZXQvbWFjODAyMTEvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDUyNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL3BtLmMKQEAgLTAsMCArMSwxMTcgQEAKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgImxlZC5oIgorCitpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT5ody53b3JrcXVldWUpOworCisJLyogZGlzYWJsZSBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKKworCS8qIHJlbW92ZSBTVEFzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKworCQlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkJICAgICB1LmFwKTsKKworCQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShodywgJnNkYXRhLT52aWYsCisJCQkJU1RBX05PVElGWV9SRU1PVkUsICZzdGEtPnN0YSk7CisJCX0KKwl9CisKKwkvKiByZW1vdmUgYWxsIGludGVyZmFjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SICYmCisJCSAgICBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOworCQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOworCQkJY29uZi5tYWNfYWRkciA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOworCQkJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZShodywgJmNvbmYpOworCQl9CisJfQorCisJLyogZmx1c2ggYWdhaW4sIGluIGNhc2UgZHJpdmVyIHF1ZXVlZCB3b3JrICovCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT5ody53b3JrcXVldWUpOworCisJLyogc3RvcCBoYXJkd2FyZSAqLworCWlmIChsb2NhbC0+b3Blbl9jb3VudCkgeworCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBmYWxzZSk7CisJCWxvY2FsLT5vcHMtPnN0b3AoaHcpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IF9faWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCByZXM7CisKKwkvKiByZXN0YXJ0IGhhcmR3YXJlICovCisJaWYgKGxvY2FsLT5vcGVuX2NvdW50KSB7CisJCXJlcyA9IGxvY2FsLT5vcHMtPnN0YXJ0KGh3KTsKKworCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBody0+Y29uZi5yYWRpb19lbmFibGVkKTsKKwl9CisKKwkvKiBhZGQgaW50ZXJmYWNlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IgJiYKKwkJICAgIG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CisJCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CisJCQljb25mLm1hY19hZGRyID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7CisJCQlyZXMgPSBsb2NhbC0+b3BzLT5hZGRfaW50ZXJmYWNlKGh3LCAmY29uZik7CisJCX0KKwl9CisKKwkvKiBhZGQgU1RBcyBiYWNrICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKworCQlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkJICAgICB1LmFwKTsKKworCQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShodywgJnNkYXRhLT52aWYsCisJCQkJU1RBX05PVElGWV9BREQsICZzdGEtPnN0YSk7CisJCX0KKwl9CisKKwkvKiBhZGQgYmFjayBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CisKKwkvKiBzZXR1cCBSVFMgdGhyZXNob2xkICovCisJaWYgKGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKQorCQlsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZChodywgbG9jYWwtPnJ0c190aHJlc2hvbGQpOworCisJLyogcmVjb25maWd1cmUgaGFyZHdhcmUgKi8KKwlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCB+MCk7CisKKwluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKwluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmggYi9uZXQvbWFjODAyMTEvcmF0ZS5oCmluZGV4IDkyOGRhNjIuLmI5MTY0YzkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmgKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuaApAQCAtNjIsNiArNjIsMTggQEAKIAlyZWYtPm9wcy0+cmF0ZV9pbml0KHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsIHByaXZfc3RhKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9yYXRlX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gbG9jYWwtPnJhdGVfY3RybDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqaXN0YSA9ICZzdGEtPnN0YTsKKwl2b2lkICpwcml2X3N0YSA9IHN0YS0+cmF0ZV9jdHJsX3ByaXY7CisKKwlpZiAocmVmLT5vcHMtPnJhdGVfdXBkYXRlKQorCQlyZWYtPm9wcy0+cmF0ZV91cGRhdGUocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwKKwkJCQkgICAgICBwcml2X3N0YSwgY2hhbmdlZCk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcmF0ZV9jb250cm9sX2FsbG9jX3N0YShzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmLAogCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA3MTc1YWU4Li42NmY3ZWNmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtODYsOCArODYsNyBAQAogCiAJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfVFNGVCkKIAkJbGVuICs9IDg7Ci0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREIgfHwKLQkgICAgbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQogCQlsZW4gKz0gMTsKIAlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSkKIAkJbGVuICs9IDE7CkBAIC0xMDIsNyArMTAxLDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi0vKioKKy8qCiAgKiBpZWVlODAyMTFfYWRkX3J4X3JhZGlvdGFwX2hlYWRlciAtIGFkZCByYWRpb3RhcCBoZWFkZXIKICAqCiAgKiBhZGQgYSByYWRpb3RhcCBoZWFkZXIgY29udGFpbmluZyBhbGwgdGhlIGZpZWxkcyB3aGljaCB0aGUgaGFyZHdhcmUgcHJvdmlkZWQuCkBAIC0xNTgsNyArMTU3LDcgQEAKIAkJICovCiAJCSpwb3MgPSAwOwogCX0gZWxzZSB7Ci0JCXJ0aGRyLT5pdF9wcmVzZW50IHw9ICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFKTsKKwkJcnRoZHItPml0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSk7CiAJCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKIAl9CiAJcG9zKys7CkBAIC0xOTksMTQgKzE5OCw2IEBACiAJKnBvcyA9IHN0YXR1cy0+YW50ZW5uYTsKIAlwb3MrKzsKIAotCS8qIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgKi8KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQikgewotCQkqcG9zID0gc3RhdHVzLT5zaWduYWw7Ci0JCXJ0aGRyLT5pdF9wcmVzZW50IHw9Ci0JCQljcHVfdG9fbGUzMigxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwpOwotCQlwb3MrKzsKLQl9Ci0KIAkvKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UgaXMgbm90IHVzZWQgKi8KIAogCS8qIElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUyAqLwpAQCAtMzcxLDM5ICszNjIsNTAgQEAKIAlyeC0+c2tiLT5wcmlvcml0eSA9ICh0aWQgPiA3KSA/IDAgOiB0aWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfaXBfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCisvKioKKyAqIERPQzogUGFja2V0IGFsaWdubWVudAorICoKKyAqIERyaXZlcnMgYWx3YXlzIG5lZWQgdG8gcGFzcyBwYWNrZXRzIHRoYXQgYXJlIGFsaWduZWQgdG8gdHdvLWJ5dGUgYm91bmRhcmllcworICogdG8gdGhlIHN0YWNrLgorICoKKyAqIEFkZGl0aW9uYWxseSwgc2hvdWxkLCBpZiBwb3NzaWJsZSwgYWxpZ24gdGhlIHBheWxvYWQgZGF0YSBpbiBhIHdheSB0aGF0CisgKiBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgaXMgYWxpZ25lZCB0byBhIGZvdXItYnl0ZQorICogYm91bmRhcnkuIEluIHRoZSBjYXNlIG9mIHJlZ3VsYXIgZnJhbWVzLCB0aGlzIHNpbXBseSBtZWFucyBhbGlnbmluZyB0aGUKKyAqIHBheWxvYWQgdG8gYSBmb3VyLWJ5dGUgYm91bmRhcnkgKGJlY2F1c2UgZWl0aGVyIHRoZSBJUCBoZWFkZXIgaXMgZGlyZWN0bHkKKyAqIGNvbnRhaW5lZCwgb3IgSVYvUkZDMTA0MiBoZWFkZXJzIHRoYXQgaGF2ZSBhIGxlbmd0aCBkaXZpc2libGUgYnkgZm91ciBhcmUKKyAqIGluIGZyb250IG9mIGl0KS4KKyAqCisgKiBXaXRoIEEtTVNEVSBmcmFtZXMsIGhvd2V2ZXIsIHRoZSBwYXlsb2FkIGRhdGEgYWRkcmVzcyBtdXN0IHlpZWxkIHR3byBtb2R1bG8KKyAqIGZvdXIgYmVjYXVzZSB0aGVyZSBhcmUgMTQtYnl0ZSA4MDIuMyBoZWFkZXJzIHdpdGhpbiB0aGUgQS1NU0RVIGZyYW1lcyB0aGF0CisgKiBwdXNoIHRoZSBJUCBoZWFkZXIgZnVydGhlciBiYWNrIHRvIGEgbXVsdGlwbGUgb2YgZm91ciBhZ2Fpbi4gVGhhbmtmdWxseSwgdGhlCisgKiBzcGVjcyB3ZXJlIHNhbmUgZW5vdWdoIHRoaXMgdGltZSBhcm91bmQgdG8gcmVxdWlyZSBwYWRkaW5nIGVhY2ggQS1NU0RVCisgKiBzdWJmcmFtZSB0byBhIGxlbmd0aCB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgZm91ci4KKyAqCisgKiBQYWRkaW5nIGxpa2UgQXRoZXJvcyBoYXJkd2FyZSBhZGRzIHdoaWNoIGlzIGluYmV0d2VlbiB0aGUgODAyLjExIGhlYWRlciBhbmQKKyAqIHRoZSBwYXlsb2FkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgODAyLjExCisgKiBoZWFkZXIgdG8gYmUgZGlyZWN0bHkgaW4gZnJvbnQgb2YgdGhlIHBheWxvYWQgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CiAJaW50IGhkcmxlbjsKIAorI2lmbmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVAorCXJldHVybjsKKyNlbmRpZgorCisJaWYgKFdBUk5fT05DRSgodW5zaWduZWQgbG9uZylyeC0+c2tiLT5kYXRhICYgMSwKKwkJICAgICAgInVuYWxpZ25lZCBwYWNrZXQgYXQgMHglcFxuIiwgcngtPnNrYi0+ZGF0YSkpCisJCXJldHVybjsKKwogCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIERyaXZlcnMgYXJlIHJlcXVpcmVkIHRvIGFsaWduIHRoZSBwYXlsb2FkIGRhdGEgaW4gYSB3YXkgdGhhdAotCSAqIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29udGFpbmVkIElQIGhlYWRlciBpcyBhbGlnbmVkIHRvIGEgZm91ci0KLQkgKiBieXRlIGJvdW5kYXJ5LiBJbiB0aGUgY2FzZSBvZiByZWd1bGFyIGZyYW1lcywgdGhpcyBzaW1wbHkgbWVhbnMKLQkgKiBhbGlnbmluZyB0aGUgcGF5bG9hZCB0byBhIGZvdXItYnl0ZSBib3VuZGFyeSAoYmVjYXVzZSBlaXRoZXIKLQkgKiB0aGUgSVAgaGVhZGVyIGlzIGRpcmVjdGx5IGNvbnRhaW5lZCwgb3IgSVYvUkZDMTA0MiBoZWFkZXJzIHRoYXQKLQkgKiBoYXZlIGEgbGVuZ3RoIGRpdmlzaWJsZSBieSBmb3VyIGFyZSBpbiBmcm9udCBvZiBpdC4KLQkgKgotCSAqIFdpdGggQS1NU0RVIGZyYW1lcywgaG93ZXZlciwgdGhlIHBheWxvYWQgZGF0YSBhZGRyZXNzIG11c3QKLQkgKiB5aWVsZCB0d28gbW9kdWxvIGZvdXIgYmVjYXVzZSB0aGVyZSBhcmUgMTQtYnl0ZSA4MDIuMyBoZWFkZXJzCi0JICogd2l0aGluIHRoZSBBLU1TRFUgZnJhbWVzIHRoYXQgcHVzaCB0aGUgSVAgaGVhZGVyIGZ1cnRoZXIgYmFjawotCSAqIHRvIGEgbXVsdGlwbGUgb2YgZm91ciBhZ2Fpbi4gVGhhbmtmdWxseSwgdGhlIHNwZWNzIHdlcmUgc2FuZQotCSAqIGVub3VnaCB0aGlzIHRpbWUgYXJvdW5kIHRvIHJlcXVpcmUgcGFkZGluZyBlYWNoIEEtTVNEVSBzdWJmcmFtZQotCSAqIHRvIGEgbGVuZ3RoIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBmb3VyLgotCSAqCi0JICogUGFkZGluZyBsaWtlIGF0aGVyb3MgaGFyZHdhcmUgYWRkcyB3aGljaCBpcyBpbmJldHdlZW4gdGhlIDgwMi4xMQotCSAqIGhlYWRlciBhbmQgdGhlIHBheWxvYWQgaXMgbm90IHN1cHBvcnRlZCwgdGhlIGRyaXZlciBpcyByZXF1aXJlZAotCSAqIHRvIG1vdmUgdGhlIDgwMi4xMSBoZWFkZXIgZnVydGhlciBiYWNrIGluIHRoYXQgY2FzZS4KLQkgKi8KIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJaWYgKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9BTVNEVSkKIAkJaGRybGVuICs9IEVUSF9ITEVOOwotCVdBUk5fT05fT05DRSgoKHVuc2lnbmVkIGxvbmcpKHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pKSAmIDMpOwotI2VuZGlmCisJV0FSTl9PTkNFKCgodW5zaWduZWQgbG9uZykocngtPnNrYi0+ZGF0YSArIGhkcmxlbikpICYgMywKKwkJICAidW5hbGlnbmVkIElQIHBheWxvYWQgYXQgMHglcFxuIiwgcngtPnNrYi0+ZGF0YSArIGhkcmxlbik7CiB9CiAKIApAQCAtNDM1LDYgKzQzNyw1MiBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pc191bmljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCB8fCBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcik7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaXNfbXVsdGljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCB8fCAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpOworfQorCisKKy8qIEdldCB0aGUgQklQIGtleSBpbmRleCBmcm9tIE1NSUU7IHJldHVybiAtMSBpZiB0aGlzIGlzIG5vdCBhIEJJUCBmcmFtZSAqLworc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X21taWVfa2V5aWR4KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCArIHNpemVvZigqbW1pZSkgfHwKKwkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+ZGEpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZSgoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgaGRyKSkKKwkJcmV0dXJuIC0xOyAvKiBub3QgYSByb2J1c3QgbWFuYWdlbWVudCBmcmFtZSAqLworCisJbW1pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX21taWUgKikKKwkJKHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisJaWYgKG1taWUtPmVsZW1lbnRfaWQgIT0gV0xBTl9FSURfTU1JRSB8fAorCSAgICBtbWllLT5sZW5ndGggIT0gc2l6ZW9mKCptbWllKSAtIDIpCisJCXJldHVybiAtMTsKKworCXJldHVybiBsZTE2X3RvX2NwdShtbWllLT5rZXlfaWQpOworfQorCisKIHN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfcnhfbWVzaF9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewpAQCAtNTUwLDIxICs1OTgsMjMgQEAKIAlpbnQgaGRybGVuOwogCWllZWU4MDIxMV9yeF9yZXN1bHQgcmVzdWx0ID0gUlhfRFJPUF9VTlVTQUJMRTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqc3Rha2V5ID0gTlVMTDsKKwlpbnQgbW1pZV9rZXlpZHggPSAtMTsKIAogCS8qCiAJICogS2V5IHNlbGVjdGlvbiAxMDEKIAkgKgotCSAqIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBrZXlzOgorCSAqIFRoZXJlIGFyZSBmb3VyIHR5cGVzIG9mIGtleXM6CiAJICogIC0gR1RLIChncm91cCBrZXlzKQorCSAqICAtIElHVEsgKGdyb3VwIGtleXMgZm9yIG1hbmFnZW1lbnQgZnJhbWVzKQogCSAqICAtIFBUSyAocGFpcndpc2Uga2V5cykKIAkgKiAgLSBTVEsgKHN0YXRpb24tdG8tc3RhdGlvbiBwYWlyd2lzZSBrZXlzKQogCSAqCiAJICogV2hlbiBzZWxlY3RpbmcgYSBrZXksIHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aWNhc3QKIAkgKiAoaW5jbHVkaW5nIGJyb2FkY2FzdCkgYW5kIHVuaWNhc3QgZnJhbWVzLCB0aGUgbGF0dGVyIGNhbiBvbmx5Ci0JICogdXNlIFBUS3MgYW5kIFNUS3Mgd2hpbGUgdGhlIGZvcm1lciBhbHdheXMgdXNlIEdUS3MuIFVubGVzcywgb2YKLQkgKiBjb3Vyc2UsIGFjdHVhbCBXRVAga2V5cyAoInByZS1SU05BIikgYXJlIHVzZWQsIHRoZW4gdW5pY2FzdAotCSAqIGZyYW1lcyBjYW4gYWxzbyB1c2Uga2V5IGluZGl6ZXMgbGlrZSBHVEtzLiBIZW5jZSwgaWYgd2UgZG9uJ3QKLQkgKiBoYXZlIGEgUFRLL1NUSyB3ZSBjaGVjayB0aGUga2V5IGluZGV4IGZvciBhIFdFUCBrZXkuCisJICogdXNlIFBUS3MgYW5kIFNUS3Mgd2hpbGUgdGhlIGZvcm1lciBhbHdheXMgdXNlIEdUS3MgYW5kIElHVEtzLgorCSAqIFVubGVzcywgb2YgY291cnNlLCBhY3R1YWwgV0VQIGtleXMgKCJwcmUtUlNOQSIpIGFyZSB1c2VkLCB0aGVuCisJICogdW5pY2FzdCBmcmFtZXMgY2FuIGFsc28gdXNlIGtleSBpbmRpY2VzIGxpa2UgR1RLcy4gSGVuY2UsIGlmIHdlCisJICogZG9uJ3QgaGF2ZSBhIFBUSy9TVEsgd2UgY2hlY2sgdGhlIGtleSBpbmRleCBmb3IgYSBXRVAga2V5LgogCSAqCiAJICogTm90ZSB0aGF0IGluIGEgcmVndWxhciBCU1MsIG11bHRpY2FzdCBmcmFtZXMgYXJlIHNlbnQgYnkgdGhlCiAJICogQVAgb25seSwgYXNzb2NpYXRlZCBzdGF0aW9ucyB1bmljYXN0IHRoZSBmcmFtZSB0byB0aGUgQVAgZmlyc3QKQEAgLTU3Nyw4ICs2MjcsMTQgQEAKIAkgKiBwb3NzaWJsZS4KIAkgKi8KIAotCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkKLQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkJICAgIHJ4LT5zdGEgPT0gTlVMTCB8fCAhdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfTUZQKSkKKwkJCXJldHVybiBSWF9DT05USU5VRTsKKwkJbW1pZV9rZXlpZHggPSBpZWVlODAyMTFfZ2V0X21taWVfa2V5aWR4KHJ4LT5za2IpOworCQlpZiAobW1pZV9rZXlpZHggPCAwKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCX0KIAogCS8qCiAJICogTm8gcG9pbnQgaW4gZmluZGluZyBhIGtleSBhbmQgZGVjcnlwdGluZyBpZiB0aGUgZnJhbWUgaXMgbmVpdGhlcgpAQCAtNTkyLDYgKzY0OCwxNiBAQAogCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJiBzdGFrZXkpIHsKIAkJcngtPmtleSA9IHN0YWtleTsKKwl9IGVsc2UgaWYgKG1taWVfa2V5aWR4ID49IDApIHsKKwkJLyogQnJvYWRjYXN0L211bHRpY2FzdCByb2J1c3QgbWFuYWdlbWVudCBmcmFtZSAvIEJJUCAqLworCQlpZiAoKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgJiYKKwkJICAgIChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwkJaWYgKG1taWVfa2V5aWR4IDwgTlVNX0RFRkFVTFRfS0VZUyB8fAorCQkgICAgbW1pZV9rZXlpZHggPj0gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7IC8qIHVuZXhwZWN0ZWQgQklQIGtleWlkeCAqLworCQlyeC0+a2V5ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LT5zZGF0YS0+a2V5c1ttbWllX2tleWlkeF0pOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFRoZSBkZXZpY2UgZG9lc24ndCBnaXZlIHVzIHRoZSBJViBzbyB3ZSB3b24ndCBiZQpAQCAtNjU0LDYgKzcyMCw5IEBACiAJY2FzZSBBTEdfQ0NNUDoKIAkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19jY21wX2RlY3J5cHQocngpOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19kZWNyeXB0KHJ4KTsKKwkJYnJlYWs7CiAJfQogCiAJLyogZWl0aGVyIHRoZSBmcmFtZSBoYXMgYmVlbiBkZWNyeXB0ZWQgb3Igd2lsbCBiZSBkcm9wcGVkICovCkBAIC02NjIsNiArNzMxLDM5IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKK2llZWU4MDIxMV9yeF9oX2NoZWNrX21vcmVfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWxvY2FsID0gcngtPmxvY2FsOworCXNrYiA9IHJ4LT5za2I7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCWlmICghbG9jYWwtPnBzcG9sbGluZykKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKCFpZWVlODAyMTFfaGFzX2Zyb21kcyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkvKiB0aGlzIGlzIG5vdCBmcm9tIEFQICovCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVkYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJLyogQVAgaGFzIG5vIG1vcmUgZnJhbWVzIGJ1ZmZlcmVkIGZvciB1cyAqLworCQlsb2NhbC0+cHNwb2xsaW5nID0gZmFsc2U7CisJCXJldHVybiBSWF9DT05USU5VRTsKKwl9CisKKwkvKiBtb3JlIGRhdGEgYml0IGlzIHNldCwgbGV0J3MgcmVxdWVzdCBhIG5ldyBmcmFtZSBmcm9tIHRoZSBBUCAqLworCWllZWU4MDIxMV9zZW5kX3BzcG9sbChsb2NhbCwgcngtPnNkYXRhKTsKKworCXJldHVybiBSWF9DT05USU5VRTsKK30KKwogc3RhdGljIHZvaWQgYXBfc3RhX3BzX3N0YXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKQEAgLTczNiw3ICs4MzgsNyBAQAogCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCXU4ICpic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCByeC0+c2tiLT5sZW4sCiAJCQkJCQlOTDgwMjExX0lGVFlQRV9BREhPQyk7Ci0JCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHJ4LT5zZGF0YS0+dS5zdGEuYnNzaWQpID09IDApCisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHJ4LT5zZGF0YS0+dS5pYnNzLmJzc2lkKSA9PSAwKQogCQkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAl9IGVsc2UKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CkBAIC0xMTAxLDYgKzEyMDMsMTUgQEAKIAkvKiBEcm9wIHVuZW5jcnlwdGVkIGZyYW1lcyBpZiBrZXkgaXMgc2V0LiAqLwogCWlmICh1bmxpa2VseSghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpICYmCiAJCSAgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgJiYKKwkJICAgICAoIWllZWU4MDIxMV9pc19tZ210KGZjKSB8fAorCQkgICAgICAoaWVlZTgwMjExX2lzX3VuaWNhc3Rfcm9idXN0X21nbXRfZnJhbWUocngtPnNrYikgJiYKKwkJICAgICAgIHJ4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfTUZQKSkpICYmCisJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCisJCXJldHVybiAtRUFDQ0VTOworCS8qIEJJUCBkb2VzIG5vdCB1c2UgUHJvdGVjdGVkIGZpZWxkLCBzbyBuZWVkIHRvIGNoZWNrIE1NSUUgKi8KKwlpZiAodW5saWtlbHkocngtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApICYmCisJCSAgICAgaWVlZTgwMjExX2lzX211bHRpY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShyeC0+c2tiKSAmJgorCQkgICAgIGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgocngtPnNrYikgPCAwICYmCiAJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCkBAIC0xMTM4LDEyICsxMjQ5LDEyIEBACiAKIAlzd2l0Y2ggKGhkci0+ZnJhbWVfY29udHJvbCAmCiAJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk6CiAJCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQogCQkJcmV0dXJuIC0xOwpAQCAtMTE1NywxMyArMTI2OCwxMyBAQAogCQkJfQogCQl9CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8CiAJCSAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZHN0KSAmJgogCQkgICAgICFjb21wYXJlX2V0aGVyX2FkZHIoc3JjLCBkZXYtPmRldl9hZGRyKSkpCiAJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNigwKToKKwljYXNlIGNwdV90b19sZTE2KDApOgogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKQEAgLTEyNjcsMTAgKzEzNzgsMzcgQEAKIAl9CiAKIAlpZiAoc2tiKSB7Ci0JCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7Ci0JCW5ldGlmX3J4KHNrYik7CisJCWludCBhbGlnbiBfX21heWJlX3VudXNlZDsKKworI2lmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQpIHx8ICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQorCQkvKgorCQkgKiAnYWxpZ24nIHdpbGwgb25seSB0YWtlIHRoZSB2YWx1ZXMgMCBvciAyIGhlcmUKKwkJICogc2luY2UgYWxsIGZyYW1lcyBhcmUgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZAorCQkgKiB0byAyLWJ5dGUgYm91bmRhcmllcyB3aGVuIGJlaW5nIHBhc3NlZCB0bworCQkgKiBtYWM4MDIxMS4gVGhhdCBhbHNvIGV4cGxhaW5zIHRoZSBfX3NrYl9wdXNoKCkKKwkJICogYmVsb3cuCisJCSAqLworCQlhbGlnbiA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDQ7CisJCWlmIChhbGlnbikgeworCQkJaWYgKFdBUk5fT04oc2tiX2hlYWRyb29tKHNrYikgPCAzKSkgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQl1OCAqZGF0YSA9IHNrYi0+ZGF0YTsKKwkJCQlzaXplX3QgbGVuID0gc2tiLT5sZW47CisJCQkJdTggKm5ldyA9IF9fc2tiX3B1c2goc2tiLCBhbGlnbik7CisJCQkJbWVtbW92ZShuZXcsIGRhdGEsIGxlbik7CisJCQkJX19za2JfdHJpbShza2IsIGxlbik7CisJCQl9CisJCX0KKyNlbmRpZgorCisJCWlmIChza2IpIHsKKwkJCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKKwkJCW5ldGlmX3J4KHNrYik7CisJCX0KIAl9CiAKIAlpZiAoeG1pdF9za2IpIHsKQEAgLTEzMzksMTQgKzE0NzcsMjAgQEAKIAkJaWYgKHJlbWFpbmluZyA8PSBzdWJmcmFtZV9sZW4gKyBwYWRkaW5nKQogCQkJZnJhbWUgPSBza2I7CiAJCWVsc2UgewotCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkJCSAgICAgIHN1YmZyYW1lX2xlbik7CisJCQkvKgorCQkJICogQWxsb2NhdGUgYW5kIHJlc2VydmUgdHdvIGJ5dGVzIG1vcmUgZm9yIHBheWxvYWQKKwkJCSAqIGFsaWdubWVudCBzaW5jZSBzaXplb2Yoc3RydWN0IGV0aGhkcikgaXMgMTQuCisJCQkgKi8KKwkJCWZyYW1lID0gZGV2X2FsbG9jX3NrYigKKwkJCQlBTElHTihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20sIDQpICsKKwkJCQlzdWJmcmFtZV9sZW4gKyAyKTsKIAogCQkJaWYgKGZyYW1lID09IE5VTEwpCiAJCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKLQkJCXNrYl9yZXNlcnZlKGZyYW1lLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCQkJc2tiX3Jlc2VydmUoZnJhbWUsCisJCQkJICAgIEFMSUdOKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgNCkgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKTsKIAkJCW1lbWNweShza2JfcHV0KGZyYW1lLCBudG9ocyhsZW4pKSwgc2tiLT5kYXRhLAogCQkJCW50b2hzKGxlbikpOwogCkBAIC0xNTI5LDExICsxNjczLDkgQEAKIAkJc3RhcnRfc2VxX251bSA9IGxlMTZfdG9fY3B1KGJhci0+c3RhcnRfc2VxX251bSkgPj4gNDsKIAogCQkvKiByZXNldCBzZXNzaW9uIHRpbWVyICovCi0JCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPQotCQkJCWppZmZpZXMgKyAodGlkX2FnZ19yeC0+dGltZW91dCAvIDEwMDApICogSFo7Ci0JCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsIGV4cGlyZXMpOwotCQl9CisJCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KQorCQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLAorCQkJCSAgVFVfVE9fRVhQX1RJTUUodGlkX2FnZ19yeC0+dGltZW91dCkpOwogCiAJCS8qIG1hbmFnZSByZW9yZGVyaW5nIGJ1ZmZlciBhY2NvcmRpbmcgdG8gcmVxdWVzdGVkICovCiAJCS8qIHNlcXVlbmNlIG51bWJlciAqLwpAQCAtMTU0NywxMiArMTY4OSw2NCBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3Nfc2FfcXVlcnlfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkcikgIT0gMCkgeworCQkvKiBOb3QgdG8gb3duIHVuaWNhc3QgYWRkcmVzcyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwKSB7CisJCS8qIE5vdCBmcm9tIHRoZSBjdXJyZW50IEFQLiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7CisJCS8qIEFzc29jaWF0aW9uIGluIHByb2dyZXNzOyBpZ25vcmUgU0EgUXVlcnkgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChsZW4gPCAyNCArIDEgKyBzaXplb2YocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpIHsKKwkJLyogVG9vIHNob3J0IFNBIFF1ZXJ5IHJlcXVlc3QgZnJhbWUgKi8KKwkJcmV0dXJuOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpyZXNwKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQocmVzcCwgMCwgMjQpOworCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKKwltZW1jcHkocmVzcC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHJlc3AtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwlyZXNwLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKHJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKTsKKwlyZXNwLT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfU0FfUVVFUlk7CisJcmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS5hY3Rpb24gPSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVNQT05TRTsKKwltZW1jcHkocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgbWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKK30KKwogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGxlbiA9IHJ4LT5za2ItPmxlbjsKIAogCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKQEAgLTE1NjQsMTIgKzE3NTgsMjYgQEAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCisJaWYgKGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHJ4LCBtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCS8qIGFsbCBjYXRlZ29yaWVzIHdlIGN1cnJlbnRseSBoYW5kbGUgaGF2ZSBhY3Rpb25fY29kZSAqLwogCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsgMSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkpIHsKIAljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzoKKwkJLyoKKwkJICogVGhlIGFnZ3JlZ2F0aW9uIGNvZGUgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorCQkgKiBhbnl0aGluZyBidXQgU1RBL0FQIGR1ZSB0byB0aGUgQlNTSUQgaGFuZGxpbmc7CisJCSAqIElCU1MgY291bGQgd29yayBpbiB0aGUgY29kZSBidXQgaXNuJ3Qgc3VwcG9ydGVkCisJCSAqIGJ5IGRyaXZlcnMgb3IgdGhlIHN0YW5kYXJkLgorCQkgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVROgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKQEAgLTE1OTQsNiArMTgwMiwxMCBAQAogCWNhc2UgV0xBTl9DQVRFR09SWV9TUEVDVFJVTV9NR01UOgogCQlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5hY3Rpb25fY29kZSkgewogCQljYXNlIFdMQU5fQUNUSU9OX1NQQ1RfTVNSX1JFUToKIAkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCkBAIC0xNjAxLDYgKzE4MTMsNDMgQEAKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQkJaWVlZTgwMjExX3Byb2Nlc3NfbWVhc3VyZW1lbnRfcmVxKHNkYXRhLCBtZ210LCBsZW4pOwogCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9BQ1RJT05fU1BDVF9DSExfU1dJVENIOgorCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKKwkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaCkpKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQsCisJCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZCwKKwkJCQkJICAgc2RhdGEtPnUubWdkLnNzaWRfbGVuKTsKKwkJCWlmICghYnNzKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCisJCQkJICAgICAmbWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaC5zd19lbGVtLCBic3MpOworCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fQ0FURUdPUllfU0FfUVVFUlk6CisJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCisJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LnNhX3F1ZXJ5LmFjdGlvbikgeworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1Q6CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWllZWU4MDIxMV9wcm9jZXNzX3NhX3F1ZXJ5X3JlcShzZGF0YSwgbWdtdCwgbGVuKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFOgorCQkJLyoKKwkJCSAqIFNBIFF1ZXJ5IHJlc3BvbnNlIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gQVAgbW9kZQorCQkJICogYW5kIGl0IGlzIHByb2Nlc3NlZCBpbiB1c2VyIHNwYWNlLgorCQkJICovCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE2MTYsMTAgKzE4NjUsMTQgQEAKIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHJ4LT5kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKKwlpZiAoaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIG1nbXQtPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKIApAQCAtMTYyNywxMSArMTg4MCwxNCBAQAogCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKLQlyZXR1cm4gUlhfUVVFVUVEOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xNzgwLDYgKzIwMzYsNyBAQAogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3Bhc3NpdmVfc2NhbikKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9jaGVjaykKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9kZWNyeXB0KQorCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2NoZWNrX21vcmVfZGF0YSkKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9zdGFfcHJvY2VzcykKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9kZWZyYWdtZW50KQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3BzX3BvbGwpCkBAIC0xODIzLDE2ICsyMDgwLDE3IEBACiAvKiBtYWluIHJlY2VpdmUgcGF0aCAqLwogCiBzdGF0aWMgaW50IHByZXBhcmVfZm9yX2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXU4ICpic3NpZCwgc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CisJdTggKmJzc2lkID0gaWVlZTgwMjExX2dldF9ic3NpZChoZHIsIHJ4LT5za2ItPmxlbiwgc2RhdGEtPnZpZi50eXBlKTsKIAlpbnQgbXVsdGljYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CiAKIAlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWYgKCFic3NpZCkKIAkJCXJldHVybiAwOwotCQlpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkgeworCQlpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSkgewogCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQogCQkJCXJldHVybiAwOwogCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CkBAIC0xODUwLDcgKzIxMDgsNyBAQAogCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQllbHNlIGlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQpKSB7CisJCWVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQpKSB7CiAJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTE5MjgsNyArMjE4Niw2IEBACiAJaW50IHByZXBhcmVzOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnByZXYgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2JfbmV3OwotCXU4ICpic3NpZDsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAltZW1zZXQoJnJ4LCAwLCBzaXplb2YocngpKTsKQEAgLTE5NTYsNyArMjIxMyw3IEBACiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9JTl9TQ0FOOwogCiAJaWVlZTgwMjExX3BhcnNlX3FvcygmcngpOwotCWllZWU4MDIxMV92ZXJpZnlfaXBfYWxpZ25tZW50KCZyeCk7CisJaWVlZTgwMjExX3ZlcmlmeV9hbGlnbm1lbnQoJnJ4KTsKIAogCXNrYiA9IHJ4LnNrYjsKIApAQCAtMTk2Nyw5ICsyMjI0LDggQEAKIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQogCQkJY29udGludWU7CiAKLQkJYnNzaWQgPSBpZWVlODAyMTFfZ2V0X2Jzc2lkKGhkciwgc2tiLT5sZW4sIHNkYXRhLT52aWYudHlwZSk7CiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKLQkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhzZGF0YSwgYnNzaWQsICZyeCwgaGRyKTsKKwkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhzZGF0YSwgJnJ4LCBoZHIpOwogCiAJCWlmICghcHJlcGFyZXMpCiAJCQljb250aW51ZTsKQEAgLTIxNzQsMTEgKzI0MzAsOSBAQAogCS8qIG5ldyB1bi1vcmRlcmVkIGFtcGR1IGZyYW1lIC0gcHJvY2VzcyBpdCAqLwogCiAJLyogcmVzZXQgc2Vzc2lvbiB0aW1lciAqLwotCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9Ci0JCQlqaWZmaWVzICsgKHRpZF9hZ2dfcngtPnRpbWVvdXQgLyAxMDAwKSAqIEhaOwotCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsIGV4cGlyZXMpOwotCX0KKwlpZiAodGlkX2FnZ19yeC0+dGltZW91dCkKKwkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLAorCQkJICBUVV9UT19FWFBfVElNRSh0aWRfYWdnX3J4LT50aW1lb3V0KSk7CiAKIAkvKiBpZiB0aGlzIG1wZHUgaXMgZnJhZ21lbnRlZCAtIHRlcm1pbmF0ZSByeCBhZ2dyZWdhdGlvbiBzZXNzaW9uICovCiAJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCmluZGV4IGY1YzdjMzMuLjUwMzBhM2MgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmMKKysrIGIvbmV0L21hYzgwMjExL3NjYW4uYwpAQCAtMTIsMTQgKzEyLDExIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0vKiBUT0RPOgotICogb3JkZXIgQlNTIGxpc3QgYnkgUlNTSSg/KSAoInF1YWxpdHkgb2YgQVAiKQotICogc2NhbiByZXN1bHQgdGFibGUgZmlsdGVyaW5nIChieSBjYXBhYmlsaXR5IChwcml2YWN5LCBJQlNTL0JTUywgV1BBL1JTTiBJRSwKLSAqICAgIFNTSUQpCi0gKi8KKy8qIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIGF2b2lkIHRoYXQgdGhlICJjdXJyZW50IEJTUyIgZXhwaXJlcyAqLwogCiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCkBAIC0zMCwxOTIgKzI3LDI5IEBACiAjZGVmaW5lIElFRUU4MDIxMV9DSEFOTkVMX1RJTUUgKEhaIC8gMzMpCiAjZGVmaW5lIElFRUU4MDIxMV9QQVNTSVZFX0NIQU5ORUxfVElNRSAoSFogLyA1KQogCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+YnNzX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+YnNzX2xpc3QpOwotfQotCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcCwgJmxvY2FsLT5ic3NfbGlzdCwgbGlzdCkKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci19Ci0KIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAogCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWJzcyA9IGxvY2FsLT5ic3NfaGFzaFtTVEFfSEFTSChic3NpZCldOwotCXdoaWxlIChic3MpIHsKLQkJaWYgKCFic3NfbWVzaF9jZmcoYnNzKSAmJgotCQkgICAgIW1lbWNtcChic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICYmCi0JCSAgICBic3MtPmZyZXEgPT0gZnJlcSAmJgotCQkgICAgYnNzLT5zc2lkX2xlbiA9PSBzc2lkX2xlbiAmJgotCQkgICAgKHNzaWRfbGVuID09IDAgfHwgIW1lbWNtcChic3MtPnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkpIHsKLQkJCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnNzID0gYnNzLT5obmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKKwlyZXR1cm4gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwKKwkJCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwKKwkJCQkJCQkgICAgICBmcmVxKSwKKwkJCQkJYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAorCQkJCQkwLCAwKTsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+YnNzX2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKQogewotCXU4IGhhc2hfaWR4OworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKWNic3M7CiAKLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpCi0JCWhhc2hfaWR4ID0gbWVzaF9pZF9oYXNoKGJzc19tZXNoX2lkKGJzcyksCi0JCQkJCWJzc19tZXNoX2lkX2xlbihic3MpKTsKLQllbHNlCi0JCWhhc2hfaWR4ID0gU1RBX0hBU0goYnNzLT5ic3NpZCk7Ci0KLQlic3MtPmhuZXh0ID0gbG9jYWwtPmJzc19oYXNoW2hhc2hfaWR4XTsKLQlsb2NhbC0+YnNzX2hhc2hbaGFzaF9pZHhdID0gYnNzOwotfQotCi0vKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5ic3NfbG9jayAqLwotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfZGVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpiLCAqcHJldiA9IE5VTEw7Ci0JYiA9IGxvY2FsLT5ic3NfaGFzaFtTVEFfSEFTSChic3MtPmJzc2lkKV07Ci0Jd2hpbGUgKGIpIHsKLQkJaWYgKGIgPT0gYnNzKSB7Ci0JCQlpZiAoIXByZXYpCi0JCQkJbG9jYWwtPmJzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXSA9Ci0JCQkJCWJzcy0+aG5leHQ7Ci0JCQllbHNlCi0JCQkJcHJldi0+aG5leHQgPSBic3MtPmhuZXh0OwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJldiA9IGI7Ci0JCWIgPSBiLT5obmV4dDsKLQl9Ci19Ci0KLXN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0JYnNzID0ga3phbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOwotCWlmICghYnNzKQotCQlyZXR1cm4gTlVMTDsKLQlhdG9taWNfc2V0KCZic3MtPnVzZXJzLCAyKTsKLQltZW1jcHkoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQlic3MtPmZyZXEgPSBmcmVxOwotCWlmIChzc2lkICYmIHNzaWRfbGVuIDw9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKLQkJbWVtY3B5KGJzcy0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCQlic3MtPnNzaWRfbGVuID0gc3NpZF9sZW47Ci0JfQotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCS8qIFRPRE86IG9yZGVyIGJ5IFJTU0k/ICovCi0JbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmbG9jYWwtPmJzc19saXN0KTsKLQlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9hZGQobG9jYWwsIGJzcyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKLX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9ic3MgKgotaWVlZTgwMjExX3J4X21lc2hfYnNzX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbiwKLQkJCSAgdTggKm1lc2hfY2ZnLCBpbnQgZnJlcSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWJzcyA9IGxvY2FsLT5ic3NfaGFzaFttZXNoX2lkX2hhc2gobWVzaF9pZCwgbWVzaF9pZF9sZW4pXTsKLQl3aGlsZSAoYnNzKSB7Ci0JCWlmIChic3NfbWVzaF9jZmcoYnNzKSAmJgotCQkgICAgIW1lbWNtcChic3NfbWVzaF9jZmcoYnNzKSwgbWVzaF9jZmcsIE1FU0hfQ0ZHX0NNUF9MRU4pICYmCi0JCSAgICBic3MtPmZyZXEgPT0gZnJlcSAmJgotCQkgICAgbWVzaF9pZF9sZW4gPT0gYnNzLT5tZXNoX2lkX2xlbiAmJgotCQkgICAgKG1lc2hfaWRfbGVuID09IDAgfHwgIW1lbWNtcChic3MtPm1lc2hfaWQsIG1lc2hfaWQsCi0JCQkJCQkgbWVzaF9pZF9sZW4pKSkgewotCQkJYXRvbWljX2luYygmYnNzLT51c2Vycyk7Ci0JCQlicmVhazsKLQkJfQotCQlic3MgPSBic3MtPmhuZXh0OwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOwotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9ic3MgKgotaWVlZTgwMjExX3J4X21lc2hfYnNzX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbiwKLQkJCSAgdTggKm1lc2hfY2ZnLCBpbnQgbWVzaF9jb25maWdfbGVuLCBpbnQgZnJlcSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0JaWYgKG1lc2hfY29uZmlnX2xlbiAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKQotCQlyZXR1cm4gTlVMTDsKLQotCWJzcyA9IGt6YWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlic3MtPm1lc2hfY2ZnID0ga21hbGxvYyhNRVNIX0NGR19DTVBfTEVOLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJzcy0+bWVzaF9jZmcpIHsKLQkJa2ZyZWUoYnNzKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKG1lc2hfaWRfbGVuICYmIG1lc2hfaWRfbGVuIDw9IElFRUU4MDIxMV9NQVhfTUVTSF9JRF9MRU4pIHsKLQkJYnNzLT5tZXNoX2lkID0ga21hbGxvYyhtZXNoX2lkX2xlbiwgR0ZQX0FUT01JQyk7Ci0JCWlmICghYnNzLT5tZXNoX2lkKSB7Ci0JCQlrZnJlZShic3MtPm1lc2hfY2ZnKTsKLQkJCWtmcmVlKGJzcyk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQltZW1jcHkoYnNzLT5tZXNoX2lkLCBtZXNoX2lkLCBtZXNoX2lkX2xlbik7Ci0JfQotCi0JYXRvbWljX3NldCgmYnNzLT51c2VycywgMik7Ci0JbWVtY3B5KGJzcy0+bWVzaF9jZmcsIG1lc2hfY2ZnLCBNRVNIX0NGR19DTVBfTEVOKTsKLQlic3MtPm1lc2hfaWRfbGVuID0gbWVzaF9pZF9sZW47Ci0JYnNzLT5mcmVxID0gZnJlcTsKLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KLQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZsb2NhbC0+YnNzX2xpc3QpOwotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChsb2NhbCwgYnNzKTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQotewotCWtmcmVlKGJzcy0+aWVzKTsKIAlrZnJlZShic3NfbWVzaF9pZChic3MpKTsKIAlrZnJlZShic3NfbWVzaF9jZmcoYnNzKSk7Ci0Ja2ZyZWUoYnNzKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcnhfYnNzX3B1dChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKIHsKLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZic3MtPnVzZXJzLCAmbG9jYWwtPmJzc19sb2NrKSkgewotCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJcmV0dXJuOwotCX0KLQotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChsb2NhbCwgYnNzKTsKLQlsaXN0X2RlbCgmYnNzLT5saXN0KTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlpZWVlODAyMTFfcnhfYnNzX2ZyZWUoYnNzKTsKKwljZmc4MDIxMV9wdXRfYnNzKChzdHJ1Y3QgY2ZnODAyMTFfYnNzICopYnNzKTsKIH0KIAogc3RydWN0IGllZWU4MDIxMV9ic3MgKgpAQCAtMjI0LDM5ICs1OCwyNSBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgIHNpemVfdCBsZW4sCiAJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgaW50IGZyZXEsIGJvb2wgYmVhY29uKQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkgIGJvb2wgYmVhY29uKQogewogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGNsZW47CisJczMyIHNpZ25hbCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCWlmIChlbGVtcy0+bWVzaF9jb25maWcpCi0JCWJzcyA9IGllZWU4MDIxMV9yeF9tZXNoX2Jzc19nZXQobG9jYWwsIGVsZW1zLT5tZXNoX2lkLAotCQkJCWVsZW1zLT5tZXNoX2lkX2xlbiwgZWxlbXMtPm1lc2hfY29uZmlnLCBmcmVxKTsKLQllbHNlCi0jZW5kaWYKLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIG1nbXQtPmJzc2lkLCBmcmVxLAotCQkJCQkgICBlbGVtcy0+c3NpZCwgZWxlbXMtPnNzaWRfbGVuKTsKLQlpZiAoIWJzcykgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi0JCWlmIChlbGVtcy0+bWVzaF9jb25maWcpCi0JCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfYWRkKGxvY2FsLCBlbGVtcy0+bWVzaF9pZCwKLQkJCQllbGVtcy0+bWVzaF9pZF9sZW4sIGVsZW1zLT5tZXNoX2NvbmZpZywKLQkJCQllbGVtcy0+bWVzaF9jb25maWdfbGVuLCBmcmVxKTsKLQkJZWxzZQotI2VuZGlmCi0JCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChsb2NhbCwgbWdtdC0+YnNzaWQsIGZyZXEsCi0JCQkJCQkgIGVsZW1zLT5zc2lkLCBlbGVtcy0+c3NpZF9sZW4pOwotCQlpZiAoIWJzcykKLQkJCXJldHVybiBOVUxMOwotCX0gZWxzZSB7Ci0jaWYgMAotCQkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwotCQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsICZsb2NhbC0+YnNzX2xpc3QpOwotCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLSNlbmRpZgotCX0KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCXNpZ25hbCA9IHJ4X3N0YXR1cy0+c2lnbmFsICogMTAwOworCWVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKQorCQlzaWduYWwgPSAocnhfc3RhdHVzLT5zaWduYWwgKiAxMDApIC8gbG9jYWwtPmh3Lm1heF9zaWduYWw7CisKKwlic3MgPSAodm9pZCAqKWNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUobG9jYWwtPmh3LndpcGh5LCBjaGFubmVsLAorCQkJCQkJbWdtdCwgbGVuLCBzaWduYWwsIEdGUF9BVE9NSUMpOworCisJaWYgKCFic3MpCisJCXJldHVybiBOVUxMOworCisJYnNzLT5jYnNzLmZyZWVfcHJpdiA9IGllZWU4MDIxMV9yeF9ic3NfZnJlZTsKIAogCS8qIHNhdmUgdGhlIEVSUCB2YWx1ZSBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBhdCBhc3NvY2lhdGlvbiB0aW1lICovCiAJaWYgKGVsZW1zLT5lcnBfaW5mbyAmJiBlbGVtcy0+ZXJwX2luZm9fbGVuID49IDEpIHsKQEAgLTI2NCw5ICs4NCw2IEBACiAJCWJzcy0+aGFzX2VycF92YWx1ZSA9IDE7CiAJfQogCi0JYnNzLT5iZWFjb25faW50ID0gbGUxNl90b19jcHUobWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCk7Ci0JYnNzLT5jYXBhYmlsaXR5ID0gbGUxNl90b19jcHUobWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyk7Ci0KIAlpZiAoZWxlbXMtPnRpbSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltX2llID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKWVsZW1zLT50aW07CkBAIC0yOTUsMzcgKzExMiwyNyBAQAogCQlic3MtPnN1cHBfcmF0ZXNfbGVuICs9IGNsZW47CiAJfQogCi0JYnNzLT5iYW5kID0gcnhfc3RhdHVzLT5iYW5kOwotCi0JYnNzLT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdShtZ210LT51LmJlYWNvbi50aW1lc3RhbXApOwotCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwotCWJzcy0+c2lnbmFsID0gcnhfc3RhdHVzLT5zaWduYWw7Ci0JYnNzLT5ub2lzZSA9IHJ4X3N0YXR1cy0+bm9pc2U7Ci0JYnNzLT5xdWFsID0gcnhfc3RhdHVzLT5xdWFsOwogCWJzcy0+d21tX3VzZWQgPSBlbGVtcy0+d21tX3BhcmFtIHx8IGVsZW1zLT53bW1faW5mbzsKIAogCWlmICghYmVhY29uKQogCQlic3MtPmxhc3RfcHJvYmVfcmVzcCA9IGppZmZpZXM7CiAKLQkvKgotCSAqIEZvciBwcm9iZSByZXNwb25zZXMsIG9yIGlmIHdlIGRvbid0IGhhdmUgYW55IGluZm9ybWF0aW9uIHlldCwKLQkgKiB1c2UgdGhlIElFcyBmcm9tIHRoZSBiZWFjb24uCi0JICovCi0JaWYgKCFic3MtPmllcyB8fCAhYmVhY29uKSB7Ci0JCWlmIChic3MtPmllcyA9PSBOVUxMIHx8IGJzcy0+aWVzX2xlbiA8IGVsZW1zLT50b3RhbF9sZW4pIHsKLQkJCWtmcmVlKGJzcy0+aWVzKTsKLQkJCWJzcy0+aWVzID0ga21hbGxvYyhlbGVtcy0+dG90YWxfbGVuLCBHRlBfQVRPTUlDKTsKLQkJfQotCQlpZiAoYnNzLT5pZXMpIHsKLQkJCW1lbWNweShic3MtPmllcywgZWxlbXMtPmllX3N0YXJ0LCBlbGVtcy0+dG90YWxfbGVuKTsKLQkJCWJzcy0+aWVzX2xlbiA9IGVsZW1zLT50b3RhbF9sZW47Ci0JCX0gZWxzZQotCQkJYnNzLT5pZXNfbGVuID0gMDsKLQl9Ci0KIAlyZXR1cm4gYnNzOwogfQogCit2b2lkIGllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQsCisJCQkgICAgIGludCBmcmVxLCB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBic3NpZCwgZnJlcSwgc3NpZCwgc3NpZF9sZW4pOworCWlmIChic3MpIHsKKwkJY2ZnODAyMTFfdW5saW5rX2Jzcyhsb2NhbC0+aHcud2lwaHksICh2b2lkICopYnNzKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJfQorfQorCiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQpAQCAtMzg3LDcgKzE5NCw3IEBACiAKIAlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHNkYXRhLT5sb2NhbCwgcnhfc3RhdHVzLAogCQkJCQltZ210LCBza2ItPmxlbiwgJmVsZW1zLAotCQkJCQlmcmVxLCBiZWFjb24pOworCQkJCQljaGFubmVsLCBiZWFjb24pOwogCWlmIChic3MpCiAJCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKIApAQCAtMzk1LDU2ICsyMDIsMzQgQEAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgIGludCBwb3dlcnNhdmUpCit2b2lkIGllZWU4MDIxMV9zY2FuX2ZhaWxlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKLQlfX2xlMTYgZmM7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGxmdW5jICIKLQkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJaWYgKFdBUk5fT04oIWxvY2FsLT5zY2FuX3JlcSkpCiAJCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCi0JbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKLQlmYyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKLQkJCSBJRUVFODAyMTFfRkNUTF9UT0RTKTsKLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7Ci0JbnVsbGZ1bmMtPmZyYW1lX2NvbnRyb2wgPSBmYzsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCS8qIG5vdGlmeSBjZmc4MDIxMSBhYm91dCB0aGUgZmFpbGVkIHNjYW4gKi8KKwlpZiAobG9jYWwtPnNjYW5fcmVxICE9ICZsb2NhbC0+aW50X3NjYW5fcmVxKQorCQljZmc4MDIxMV9zY2FuX2RvbmUobG9jYWwtPnNjYW5fcmVxLCB0cnVlKTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJbG9jYWwtPnNjYW5fcmVxID0gTlVMTDsKIH0KIAotdm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9ydGVkKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCWlmIChXQVJOX09OKCFsb2NhbC0+aHdfc2Nhbm5pbmcgJiYgIWxvY2FsLT5zd19zY2FubmluZykpCiAJCXJldHVybjsKIAotCWxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkID0gamlmZmllczsKLQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJaWYgKFdBUk5fT04oIWxvY2FsLT5zY2FuX3JlcSkpCisJCXJldHVybjsKIAotCS8qCi0JICogbG9jYWwtPnNjYW5fc2RhdGEgY291bGQgaGF2ZSBiZWVuIE5VTExlZCBieSB0aGUgaW50ZXJmYWNlCi0JICogZG93biBjb2RlIGluIGNhc2Ugd2Ugd2VyZSBzY2FubmluZyBvbiBhbiBpbnRlcmZhY2UgdGhhdCBpcwotCSAqIGJlaW5nIHRha2VuIGRvd24uCi0JICovCi0Jc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlpZiAoc2RhdGEpCi0JCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwlpZiAobG9jYWwtPnNjYW5fcmVxICE9ICZsb2NhbC0+aW50X3NjYW5fcmVxKQorCQljZmc4MDIxMV9zY2FuX2RvbmUobG9jYWwtPnNjYW5fcmVxLCBhYm9ydGVkKTsKKwlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOworCisJbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgPSBqaWZmaWVzOwogCiAJaWYgKGxvY2FsLT5od19zY2FubmluZykgewogCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSBmYWxzZTsKQEAgLTQ3MiwzNCArMjU3LDQ2IEBACiAJbmV0aWZfYWRkcl91bmxvY2sobG9jYWwtPm1kZXYpOwogCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCWlmIChsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKQorCQlsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWNvbnRpbnVlOworCiAJCS8qIFRlbGwgQVAgd2UncmUgYmFjayAqLwogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCWlmIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKIAkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOwogCQkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAkJCX0KIAkJfSBlbHNlCiAJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisKKwkJLyogcmUtZW5hYmxlIGJlYWNvbmluZyAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQkJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwKKwkJCQkJICAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAKICBkb25lOgogCWllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CisJaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKIAlpZWVlODAyMTFfbWVzaF9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQpOwogCi0KIHZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgc2Nhbl93b3JrLndvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCWludCBza2lwOworCWludCBza2lwLCBpOwogCXVuc2lnbmVkIGxvbmcgbmV4dF9kZWxheSA9IDA7CiAKIAkvKgpAQCAtNTEwLDMzICszMDcsMTMgQEAKIAogCXN3aXRjaCAobG9jYWwtPnNjYW5fc3RhdGUpIHsKIAljYXNlIFNDQU5fU0VUX0NIQU5ORUw6Ci0JCS8qCi0JCSAqIEdldCBjdXJyZW50IHNjYW4gYmFuZC4gc2Nhbl9iYW5kIG1heSBiZSBJRUVFODAyMTFfTlVNX0JBTkRTCi0JCSAqIGFmdGVyIHdlIHN1Y2Nlc3NmdWxseSBzY2FubmVkIHRoZSBsYXN0IGNoYW5uZWwgb2YgdGhlIGxhc3QKLQkJICogYmFuZCAoYW5kIHRoZSBsYXN0IGJhbmQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBodykKLQkJICovCi0JCWlmIChsb2NhbC0+c2Nhbl9iYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUykKLQkJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+c2Nhbl9iYW5kXTsKLQkJZWxzZQotCQkJc2JhbmQgPSBOVUxMOwotCi0JCS8qCi0JCSAqIElmIHdlIGFyZSBhdCBhbiB1bnN1cHBvcnRlZCBiYW5kIGFuZCBoYXZlIG1vcmUgYmFuZHMKLQkJICogbGVmdCB0byBzY2FuLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHN1cHBvcnRlZCBvbmUuCi0JCSAqLwotCQl3aGlsZSAoIXNiYW5kICYmIGxvY2FsLT5zY2FuX2JhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTIC0gMSkgewotCQkJbG9jYWwtPnNjYW5fYmFuZCsrOwotCQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5zY2FuX2JhbmRdOwotCQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCQl9Ci0KIAkJLyogaWYgbm8gbW9yZSBiYW5kcy9jaGFubmVscyBsZWZ0LCBjb21wbGV0ZSBzY2FuICovCi0JCWlmICghc2JhbmQgfHwgbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPj0gc2JhbmQtPm5fY2hhbm5lbHMpIHsKLQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChsb2NhbF90b19odyhsb2NhbCkpOworCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPj0gbG9jYWwtPnNjYW5fcmVxLT5uX2NoYW5uZWxzKSB7CisJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQobG9jYWxfdG9faHcobG9jYWwpLCBmYWxzZSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJc2tpcCA9IDA7Ci0JCWNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKKwkJY2hhbiA9IGxvY2FsLT5zY2FuX3JlcS0+Y2hhbm5lbHNbbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHhdOwogCiAJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEIHx8CiAJCSAgICAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCkBAIC01NTIsMTUgKzMyOSw2IEBACiAKIAkJLyogYWR2YW5jZSBzdGF0ZSBtYWNoaW5lIHRvIG5leHQgY2hhbm5lbC9iYW5kICovCiAJCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4Kys7Ci0JCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscykgewotCQkJLyoKLQkJCSAqIHNjYW5fYmFuZCBtYXkgZW5kIHVwID09IElFRUU4MDIxMV9OVU1fQkFORFMsIGJ1dAotCQkJICogd2UnbGwgY2F0Y2ggdGhhdCBjYXNlIGFib3ZlIGFuZCBjb21wbGV0ZSB0aGUgc2NhbgotCQkJICogaWYgdGhhdCBpcyB0aGUgY2FzZS4KLQkJCSAqLwotCQkJbG9jYWwtPnNjYW5fYmFuZCsrOwotCQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCQl9CiAKIAkJaWYgKHNraXApCiAJCQlicmVhazsKQEAgLTU3MywxMCArMzQxLDE1IEBACiAJCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUU7CiAJCWxvY2FsLT5zY2FuX3N0YXRlID0gU0NBTl9TRVRfQ0hBTk5FTDsKIAotCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTiB8fAorCQkgICAgIWxvY2FsLT5zY2FuX3JlcS0+bl9zc2lkcykKIAkJCWJyZWFrOwotCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsIGxvY2FsLT5zY2FuX3NzaWQsCi0JCQkJCSBsb2NhbC0+c2Nhbl9zc2lkX2xlbik7CisJCWZvciAoaSA9IDA7IGkgPCBsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHM7IGkrKykKKwkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcSgKKwkJCQlzZGF0YSwgTlVMTCwKKwkJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWQsCisJCQkJbG9jYWwtPnNjYW5fcmVxLT5zc2lkc1tpXS5zc2lkX2xlbiwKKwkJCQlsb2NhbC0+c2Nhbl9yZXEtPmllLCBsb2NhbC0+c2Nhbl9yZXEtPmllX2xlbik7CiAJCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FOwogCQlicmVhazsKIAl9CkBAIC01ODcsMTQgKzM2MCwxOSBAQAogCiAKIGludCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhLAotCQkJIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCisJCQkgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2Nhbl9zZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKLQlpZiAoc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCWlmICghcmVxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgbG9jYWwtPnNjYW5fcmVxICE9IHJlcSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKKwogCS8qIE1MTUUtU0NBTi5yZXF1ZXN0IChwYWdlIDExOCkgIHBhZ2UgMTQ0ICgxMS4xLjMuMSkKIAkgKiBCU1NUeXBlOiBJTkZSQVNUUlVDVFVSRSwgSU5ERVBFTkRFTlQsIEFOWV9CU1MKIAkgKiBCU1NJRDogTUFDQWRkcmVzcwpAQCAtNjIyLDcgKzQwMCw3IEBACiAJCWludCByYzsKIAogCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSB0cnVlOwotCQlyYyA9IGxvY2FsLT5vcHMtPmh3X3NjYW4obG9jYWxfdG9faHcobG9jYWwpLCBzc2lkLCBzc2lkX2xlbik7CisJCXJjID0gbG9jYWwtPm9wcy0+aHdfc2Nhbihsb2NhbF90b19odyhsb2NhbCksIHJlcSk7CiAJCWlmIChyYykgewogCQkJbG9jYWwtPmh3X3NjYW5uaW5nID0gZmFsc2U7CiAJCQlyZXR1cm4gcmM7CkBAIC02MzIsMjggKzQxMCwzNSBAQAogCX0KIAogCWxvY2FsLT5zd19zY2FubmluZyA9IHRydWU7CisJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQpCisJCWxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQobG9jYWxfdG9faHcobG9jYWwpKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKworCQkvKiBkaXNhYmxlIGJlYWNvbmluZyAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQkJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwKKwkJCQkJICAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKKwogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCWlmIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKIAkJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCi0JaWYgKHNzaWQpIHsKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQkJbWVtY3B5KGxvY2FsLT5zY2FuX3NzaWQsIHNzaWQsIHNzaWRfbGVuKTsKLQl9IGVsc2UKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSAwOwogCWxvY2FsLT5zY2FuX3N0YXRlID0gU0NBTl9TRVRfQ0hBTk5FTDsKIAlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JbG9jYWwtPnNjYW5fYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJbG9jYWwtPnNjYW5fc2RhdGEgPSBzY2FuX3NkYXRhOworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAogCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CiAJbG9jYWwtPmZpbHRlcl9mbGFncyB8PSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsKQEAgLTY3MywxMyArNDU4LDIxIEBACiAKIAogaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQorCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCisJaWYgKCFyZXEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAmJiBsb2NhbC0+c2Nhbl9yZXEgIT0gcmVxKQorCQlyZXR1cm4gLUVCVVNZOworCisJbG9jYWwtPnNjYW5fcmVxID0gcmVxOwogCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIHNzaWQsIHNzaWRfbGVuKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCByZXEpOwogCiAJLyoKIAkgKiBTVEEgaGFzIGEgc3RhdGUgbWFjaGluZSB0aGF0IG1pZ2h0IG5lZWQgdG8gZGVmZXIgc2Nhbm5pbmcKQEAgLTY5MywyNDIgKzQ4Niw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0JaWZzdGEtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQlpZiAoc3NpZF9sZW4pCi0JCW1lbWNweShpZnN0YS0+c2Nhbl9zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZzdGEtPnJlcXVlc3QpOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAogCXJldHVybiAwOwogfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX2FkZF9pZXMoc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAotCQkJCSAgIGNoYXIgKipjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQotewotCXU4ICpwb3MsICplbmQsICpuZXh0OwotCXN0cnVjdCBpd19ldmVudCBpd2U7Ci0KLQlpZiAoYnNzID09IE5VTEwgfHwgYnNzLT5pZXMgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiBuZWVkZWQsIGZyYWdtZW50IHRoZSBJRXMgYnVmZmVyIChhdCBJRSBib3VuZGFyaWVzKSBpbnRvIHNob3J0Ci0JICogZW5vdWdoIGZyYWdtZW50cyB0byBmaXQgaW50byBJV19HRU5FUklDX0lFX01BWCBvY3RldCBtZXNzYWdlcy4KLQkgKi8KLQlwb3MgPSBic3MtPmllczsKLQllbmQgPSBwb3MgKyBic3MtPmllc19sZW47Ci0KLQl3aGlsZSAoZW5kIC0gcG9zID4gSVdfR0VORVJJQ19JRV9NQVgpIHsKLQkJbmV4dCA9IHBvcyArIDIgKyBwb3NbMV07Ci0JCXdoaWxlIChuZXh0ICsgMiArIG5leHRbMV0gLSBwb3MgPCBJV19HRU5FUklDX0lFX01BWCkKLQkJCW5leHQgPSBuZXh0ICsgMiArIG5leHRbMV07Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXh0IC0gcG9zOwotCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAotCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKLQotCQlwb3MgPSBuZXh0OwotCX0KLQotCWlmIChlbmQgPiBwb3MpIHsKLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmQgLSBwb3M7Ci0JCSpjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgKmN1cnJlbnRfZXYsCi0JCQkJCQkgICBlbmRfYnVmLCAmaXdlLCBwb3MpOwotCX0KLX0KLQotCi1zdGF0aWMgY2hhciAqCi1pZWVlODAyMTFfc2Nhbl9yZXN1bHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsCi0JCSAgICAgIGNoYXIgKmN1cnJlbnRfZXYsIGNoYXIgKmVuZF9idWYpCi17Ci0Jc3RydWN0IGl3X2V2ZW50IGl3ZTsKLQljaGFyICpidWY7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkgICAgICAgYnNzLT5sYXN0X3VwZGF0ZSArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpKQotCQlyZXR1cm4gY3VycmVudF9ldjsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfQUREUl9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCWlmIChic3NfbWVzaF9jZmcoYnNzKSkgewotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzc19tZXNoX2lkX2xlbihic3MpOwotCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGJzc19tZXNoX2lkKGJzcykpOwotCX0gZWxzZSB7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT5zc2lkX2xlbjsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBic3MtPnNzaWQpOwotCX0KLQotCWlmIChic3MtPmNhcGFiaWxpdHkgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKQotCSAgICB8fCBic3NfbWVzaF9jZmcoYnNzKSkgewotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JCWlmIChic3NfbWVzaF9jZmcoYnNzKSkKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01FU0g7Ci0JCWVsc2UgaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChic3MtPmZyZXEpOwotCWl3ZS51LmZyZXEuZSA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JaXdlLnUuZnJlcS5tID0gYnNzLT5mcmVxOwotCWl3ZS51LmZyZXEuZSA9IDY7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwucXVhbCA9IGJzcy0+cXVhbDsKLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWw7Ci0JaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2U7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJICBJV19FVl9RVUFMX0xFTik7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgIiIpOwotCi0JaWVlZTgwMjExX3NjYW5fYWRkX2llcyhpbmZvLCBic3MsICZjdXJyZW50X2V2LCBlbmRfYnVmKTsKLQotCWlmIChic3MtPnN1cHBfcmF0ZXNfbGVuID4gMCkgewotCQkvKiBkaXNwbGF5IGFsbCBzdXBwb3J0ZWQgcmF0ZXMgaW4gcmVhZGFibGUgZm9ybWF0ICovCi0JCWNoYXIgKnAgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwotCQlpbnQgaTsKLQotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgewotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoYnNzLT5zdXBwX3JhdGVzW2ldICYKLQkJCQkJCQkweDdmKSAqIDUwMDAwMCk7Ci0JCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwKLQkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLQkJfQotCQljdXJyZW50X2V2ID0gcDsKLQl9Ci0KLQlidWYgPSBrbWFsbG9jKDMwLCBHRlBfQVRPTUlDKTsKLQlpZiAoYnVmKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQlzcHJpbnRmKGJ1ZiwgInRzZj0lMDE2bGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoYnNzLT50aW1lc3RhbXApKTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQlzcHJpbnRmKGJ1ZiwgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gYnNzLT5sYXN0X3VwZGF0ZSkpOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKLQkJa2ZyZWUoYnVmKTsKLQl9Ci0KLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJdTggKmNmZyA9IGJzc19tZXNoX2NmZyhic3MpOwotCQlidWYgPSBrbWFsbG9jKDUwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJ1ZikgewotCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQkJc3ByaW50ZihidWYsICJNZXNoIG5ldHdvcmsgKHZlcnNpb24gJWQpIiwgY2ZnWzBdKTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLCBidWYpOwotCQkJc3ByaW50ZihidWYsICJQYXRoIFNlbGVjdGlvbiBQcm90b2NvbCBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMV0sIGNmZ1syXSwgY2ZnWzNdLAotCQkJCQkJCWNmZ1s0XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gTWV0cmljIElEOiAiCi0JCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s1XSwgY2ZnWzZdLCBjZmdbN10sCi0JCQkJCQkJY2ZnWzhdKTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLCBidWYpOwotCQkJc3ByaW50ZihidWYsICJDb25nZXN0aW9uIENvbnRyb2wgTW9kZSBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbOV0sIGNmZ1sxMF0sCi0JCQkJCQkJY2ZnWzExXSwgY2ZnWzEyXSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiQ2hhbm5lbCBQcmVjZWRlbmNlOiAiCi0JCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1sxM10sIGNmZ1sxNF0sCi0JCQkJCQkJY2ZnWzE1XSwgY2ZnWzE2XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCWtmcmVlKGJ1Zik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotCi1pbnQgaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0JY2hhciAqY3VycmVudF9ldiA9IGJ1ZjsKLQljaGFyICplbmRfYnVmID0gYnVmICsgbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGJ1ZiArIGxlbiAtIGN1cnJlbnRfZXYgPD0gSVdfRVZfQUREUl9MRU4pIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCQkJcmV0dXJuIC1FMkJJRzsKLQkJfQotCQljdXJyZW50X2V2ID0gaWVlZTgwMjExX3NjYW5fcmVzdWx0KGxvY2FsLCBpbmZvLCBic3MsCi0JCQkJCQkgICAgICAgY3VycmVudF9ldiwgZW5kX2J1Zik7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBjdXJyZW50X2V2IC0gYnVmOwotfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCmluZGV4IGY3MmJhZDYuLjVmN2EyNjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYworKysgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJCUlFRUU4MDIxMV9TUENUX01TUl9SUFJUX01PREVfUkVGVVNFRDsKIAltc3JfcmVwb3J0LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50Lm1zcl9lbGVtLnR5cGUgPSByZXF1ZXN0X2llLT50eXBlOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogfQogCiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTg0LDMgKzg0LDEwNCBAQAogCQkJbWdtdC0+c2EsIG1nbXQtPmJzc2lkLAogCQkJbWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5kaWFsb2dfdG9rZW4pOwogfQorCit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lm1nZC5jaHN3aXRjaF93b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlyZXR1cm47CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChzZGF0YS0+bG9jYWwsIGlmbWdkLT5ic3NpZCwKKwkJCQkgICBzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJaWYgKCFic3MpCisJCWdvdG8gZXhpdDsKKworCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gc2RhdGEtPmxvY2FsLT5jc2FfY2hhbm5lbDsKKwkvKiBYWFg6IHNob3VsZG4ndCByZWFsbHkgbW9kaWZ5IGNmZzgwMjExLW93bmVkIGRhdGEhICovCisJaWYgKCFpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpKQorCQlic3MtPmNic3MuY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsOworCisJaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOworZXhpdDoKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCisJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOworfQorCit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKK30KKwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm5ld19jaDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlpbnQgbmV3X2ZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koc3dfZWxlbS0+bmV3X2NoX251bSk7CisKKwkvKiBGSVhNRTogSGFuZGxlIEFESE9DIGxhdGVyICovCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQorCQlyZXR1cm47CisKKwlpZiAoc2RhdGEtPmxvY2FsLT5zd19zY2FubmluZyB8fCBzZGF0YS0+bG9jYWwtPmh3X3NjYW5uaW5nKQorCQlyZXR1cm47CisKKwkvKiBEaXNyZWdhcmQgc3Vic2VxdWVudCBiZWFjb25zIGlmIHdlIGFyZSBhbHJlYWR5IHJ1bm5pbmcgYSB0aW1lcgorCSAgIHByb2Nlc3NpbmcgYSBDU0EgKi8KKworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRCkKKwkJcmV0dXJuOworCisJbmV3X2NoID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHNkYXRhLT5sb2NhbC0+aHcud2lwaHksIG5ld19mcmVxKTsKKwlpZiAoIW5ld19jaCB8fCBuZXdfY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCXJldHVybjsKKworCXNkYXRhLT5sb2NhbC0+Y3NhX2NoYW5uZWwgPSBuZXdfY2g7CisKKwlpZiAoc3dfZWxlbS0+Y291bnQgPD0gMSkgeworCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPmNoc3dpdGNoX3dvcmspOworCX0gZWxzZSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCisJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCQltb2RfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwKKwkJCSAgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoc3dfZWxlbS0+Y291bnQgKgorCQkJCQkgICBic3MtPmNic3MuYmVhY29uX2ludGVydmFsKSk7CisJfQorfQorCit2b2lkIGllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgdTE2IGNhcGFiX2luZm8sIHU4ICpwd3JfY29uc3RyX2VsZW0sCisJCQkJIHU4IHB3cl9jb25zdHJfZWxlbV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnNkYXRhLT5sb2NhbC0+aHcuY29uZjsKKworCWlmICghKGNhcGFiX2luZm8gJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkpCisJCXJldHVybjsKKworCS8qIFBvd2VyIGNvbnN0cmFpbnQgSUUgbGVuZ3RoIHNob3VsZCBiZSAxIG9jdGV0ICovCisJaWYgKHB3cl9jb25zdHJfZWxlbV9sZW4gIT0gMSkKKwkJcmV0dXJuOworCisJaWYgKCgqcHdyX2NvbnN0cl9lbGVtIDw9IGNvbmYtPmNoYW5uZWwtPm1heF9wb3dlcikgJiYKKwkgICAgKCpwd3JfY29uc3RyX2VsZW0gIT0gc2RhdGEtPmxvY2FsLT5wb3dlcl9jb25zdHJfbGV2ZWwpKSB7CisJCXNkYXRhLT5sb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsID0gKnB3cl9jb25zdHJfZWxlbTsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCAxMGM1NTM5Li40YmEzYzU0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTk0LDEyICsxOTQsNTMgQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCWZvciAoaSA9IDA7IGkgPCAgU1RBX1RJRF9OVU07IGkrKykgeworCQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcng7CisJCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eDsKKwogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldKQotCQkgIGRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zZXNzaW9uX3RpbWVyKTsKLQkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0pCi0JCSAgZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0tPmFkZGJhX3Jlc3BfdGltZXIpOworCQl0aWRfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldOworCQkvKiBNYWtlIHN1cmUgdGltZXIgd29uJ3QgZnJlZSB0aGUgdGlkX3J4IHN0cnVjdCwgc2VlIGJlbG93ICovCisJCWlmICh0aWRfcngpCisJCQl0aWRfcngtPnNodXRkb3duID0gdHJ1ZTsKKworCQkvKgorCQkgKiBUaGUgc3RvcCBjYWxsYmFjayBjYW5ub3QgZmluZCB0aGlzIHN0YXRpb24gYW55IG1vcmUsIGJ1dAorCQkgKiBpdCBkaWRuJ3QgY29tcGxldGUgaXRzIHdvcmsgLS0gc3RhcnQgdGhlIHF1ZXVlIGlmIG5lY2Vzc2FyeQorCQkgKi8KKwkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0gJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSyAmJgorCQkgICAgc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSAmIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgJiYKKwkJICAgIGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oJmxvY2FsLT5odywKKwkJCQlsb2NhbC0+aHcucXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVtpXSwKKwkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCisJCS8qCisJCSAqIE91dHNpZGUgc3BpbmxvY2sgLSBzaHV0ZG93biBpcyB0cnVlIG5vdyBzbyB0aGF0IHRoZSB0aW1lcgorCQkgKiB3b24ndCBmcmVlIHRpZF9yeCwgd2UgaGF2ZSB0byBkbyB0aGF0IG5vdy4gQ2FuJ3QgbGV0IHRoZQorCQkgKiB0aW1lciBkbyBpdCBiZWNhdXNlIHdlIGhhdmUgdG8gc3luYyB0aGUgdGltZXIgb3V0c2lkZSB0aGUKKwkJICogbG9jayB0aGF0IGl0IHRha2VzIGl0c2VsZi4KKwkJICovCisJCWlmICh0aWRfcngpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZ0aWRfcngtPnNlc3Npb25fdGltZXIpOworCQkJa2ZyZWUodGlkX3J4KTsKKwkJfQorCisJCS8qCisJCSAqIE5vIG5lZWQgdG8gZG8gc3VjaCBjb21wbGljYXRpb25zIGZvciBUWCBhZ2cgc2Vzc2lvbnMsIHRoZQorCQkgKiBwYXRoIGxlYWRpbmcgdG8gZnJlZWluZyB0aGUgdGlkX3R4IHN0cnVjdCBnb2VzIHZpYSBhIGNhbGwKKwkJICogZnJvbSB0aGUgZHJpdmVyLCBhbmQgdGh1cyBuZWVkcyB0byBsb29rIHVwIHRoZSBzdGEgc3RydWN0CisJCSAqIGFnYWluLCB3aGljaCBjYW5ub3QgYmUgZm91bmQgd2hlbiB3ZSBnZXQgaGVyZS4gSGVuY2UsIHdlCisJCSAqIGp1c3QgbmVlZCB0byBkZWxldGUgdGhlIHRpbWVyIGFuZCBmcmVlIHRoZSBhZ2dyZWdhdGlvbgorCQkgKiBpbmZvOyB3ZSB3b24ndCBiZSB0ZWxsaW5nIHRoZSBwZWVyIGFib3V0IGl0IHRoZW4gYnV0IHRoYXQKKwkJICogZG9lc24ndCBtYXR0ZXIgaWYgd2UncmUgbm90IHRhbGtpbmcgdG8gaXQgYWdhaW4gYW55d2F5LgorCQkgKi8KKwkJdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXTsKKwkJaWYgKHRpZF90eCkgeworCQkJZGVsX3RpbWVyX3N5bmMoJnRpZF90eC0+YWRkYmFfcmVzcF90aW1lcik7CisJCQlrZnJlZSh0aWRfdHgpOworCQl9CiAJfQogCiAJX19zdGFfaW5mb19mcmVlKGxvY2FsLCBzdGEpOwpAQCAtMjQ2LDggKzI4Nyw3IEBACiAJCSAqIGVuYWJsZSBzZXNzaW9uX3RpbWVyJ3MgZGF0YSBkaWZmZXJlbnRpYXRpb24uIHJlZmVyIHRvCiAJCSAqIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkIGZvciB1c2VhZ2UgKi8KIAkJc3RhLT50aW1lcl90b190aWRbaV0gPSBpOwotCQkvKiB0aWQgdG8gdHggcXVldWU6IGluaXRpYWxpemUgYWNjb3JkaW5nIHRvIEhXICgwIGlzIHZhbGlkKSAqLwotCQlzdGEtPnRpZF90b190eF9xW2ldID0gaWVlZTgwMjExX251bV9xdWV1ZXMoJmxvY2FsLT5odyk7CisJCXN0YS0+dGlkX3RvX3R4X3FbaV0gPSAtMTsKIAkJLyogcnggKi8KIAkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFtpXSA9IEhUX0FHR19TVEFURV9JRExFOwogCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggZTQ5YTViOS4uMWY0NTU3MyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTM0LDYgKzM0LDcgQEAKICAqIEBXTEFOX1NUQV9DTEVBUl9QU19GSUxUOiBDbGVhciBQUyBmaWx0ZXIgaW4gaGFyZHdhcmUgKHVzaW5nIHRoZQogICoJSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUIGNvbnRyb2wgZmxhZykgd2hlbiB0aGUgbmV4dAogICoJZnJhbWUgdG8gdGhpcyBzdGF0aW9uIGlzIHRyYW5zbWl0dGVkLgorICogQFdMQU5fU1RBX01GUDogTWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIGlzIHVzZWQgd2l0aCB0aGlzIFNUQS4KICAqLwogZW51bSBpZWVlODAyMTFfc3RhX2luZm9fZmxhZ3MgewogCVdMQU5fU1RBX0FVVEgJCT0gMTw8MCwKQEAgLTQ2LDYgKzQ3LDcgQEAKIAlXTEFOX1NUQV9XRFMJCT0gMTw8NywKIAlXTEFOX1NUQV9QU1BPTEwJCT0gMTw8OCwKIAlXTEFOX1NUQV9DTEVBUl9QU19GSUxUCT0gMTw8OSwKKwlXTEFOX1NUQV9NRlAJCT0gMTw8MTAsCiB9OwogCiAjZGVmaW5lIFNUQV9USURfTlVNIDE2CkBAIC02Myw3ICs2NSw2IEBACiAjZGVmaW5lIEhUX0FHR19TVEFURV9PUEVSQVRJT05BTAkoSFRfQUREQkFfUkVRVUVTVEVEX01TSyB8CVwKIAkJCQkJIEhUX0FEREJBX0RSVl9SRUFEWV9NU0sgfAlcCiAJCQkJCSBIVF9BRERCQV9SRUNFSVZFRF9NU0spCi0jZGVmaW5lIEhUX0FHR19TVEFURV9ERUJVR0ZTX0NUTAlCSVQoNykKIAogLyoqCiAgKiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IC0gVElEIGFnZ3JlZ2F0aW9uIGluZm9ybWF0aW9uIChUeCkuCkBAIC04Nyw4ICs4OCw5IEBACiAgKiBAc3RvcmVkX21wZHVfbnVtOiBudW1iZXIgb2YgTVBEVXMgaW4gcmVvcmRlcmluZyBidWZmZXIKICAqIEBzc246IFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBleHBlY3RlZCB0byBiZSBhZ2dyZWdhdGVkLgogICogQGJ1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgaW5jb21pbmcgQS1NUERVcwotICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlLgorICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlIChpbiBUVXMpLgogICogQGRpYWxvZ190b2tlbjogZGlhbG9nIHRva2VuIGZvciBhZ2dyZWdhdGlvbiBzZXNzaW9uCisgKiBAc2h1dGRvd246IHRoaXMgc2Vzc2lvbiBpcyBiZWluZyBzaHV0IGRvd24gZHVlIHRvIFNUQSByZW1vdmFsCiAgKi8KIHN0cnVjdCB0aWRfYW1wZHVfcnggewogCXN0cnVjdCBza19idWZmICoqcmVvcmRlcl9idWY7CkBAIC05OSw2ICsxMDEsNyBAQAogCXUxNiBidWZfc2l6ZTsKIAl1MTYgdGltZW91dDsKIAl1OCBkaWFsb2dfdG9rZW47CisJYm9vbCBzaHV0ZG93bjsKIH07CiAKIC8qKgpAQCAtMTk4LDcgKzIwMSw3IEBACiAgKiBAdGlkX3NlcTogcGVyLVRJRCBzZXF1ZW5jZSBudW1iZXJzIGZvciBzZW5kaW5nIHRvIHRoaXMgU1RBCiAgKiBAYW1wZHVfbWxtZTogQS1NUERVIHN0YXRlIG1hY2hpbmUgc3RhdGUKICAqIEB0aW1lcl90b190aWQ6IGlkZW50aXR5IG1hcHBpbmcgdG8gSUQgdGltZXJzCi0gKiBAdGlkX3RvX3R4X3E6IG1hcCB0aWQgdG8gdHggcXVldWUKKyAqIEB0aWRfdG9fdHhfcTogbWFwIHRpZCB0byB0eCBxdWV1ZSAoaW52YWxpZCA9PSBuZWdhdGl2ZSB2YWx1ZXMpCiAgKiBAbGxpZDogTG9jYWwgbGluayBJRAogICogQHBsaWQ6IFBlZXIgbGluayBJRAogICogQHJlYXNvbjogQ2FuY2VsIHJlYXNvbiBvbiBQTElOS19IT0xESU5HIHN0YXRlCkBAIC0yNzMsNyArMjc2LDcgQEAKIAkgKi8KIAlzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgYW1wZHVfbWxtZTsKIAl1OCB0aW1lcl90b190aWRbU1RBX1RJRF9OVU1dOwotCXU4IHRpZF90b190eF9xW1NUQV9USURfTlVNXTsKKwlzOCB0aWRfdG9fdHhfcVtTVEFfVElEX05VTV07CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCS8qCkBAIC0zODIsOCArMzg1LDYgQEAKIH0KIAogCi0vKiBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50bHkgcmVnaXN0ZXJlZCBzdGF0aW9ucyAqLwotI2RlZmluZSBNQVhfU1RBX0NPVU5UIDIwMDcKIAogI2RlZmluZSBTVEFfSEFTSF9TSVpFIDI1NgogI2RlZmluZSBTVEFfSEFTSChzdGEpIChzdGFbNV0pCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDM3ZTNkNWVmLi40NTcyMzhhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBJRUVFODAyMTFfVFhfT0sJCTAKICNkZWZpbmUgSUVFRTgwMjExX1RYX0FHQUlOCTEKICNkZWZpbmUgSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU4JMgorI2RlZmluZSBJRUVFODAyMTFfVFhfUEVORElORwkzCiAKIC8qIG1pc2MgdXRpbHMgKi8KIApAQCAtMzMwLDYgKzMzMSwyMiBAQAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfdXNlX21mcChfX2xlMTYgZmMsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICghaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGEgPT0gTlVMTCB8fCAhdGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9NRlApKQorCQlyZXR1cm4gMDsKKworCWlmICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKQorCQkJCQkgICAgc2tiLT5kYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKIGllZWU4MDIxMV90eF9oX3VuaWNhc3RfcHNfYnVmKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CkBAIC00MDksMTEgKzQyNiwxNyBAQAogCQl0eC0+a2V5ID0gTlVMTDsKIAllbHNlIGlmICh0eC0+c3RhICYmIChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnN0YS0+a2V5KSkpCiAJCXR4LT5rZXkgPSBrZXk7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpKSkKKwkJdHgtPmtleSA9IGtleTsKIAllbHNlIGlmICgoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zZGF0YS0+ZGVmYXVsdF9rZXkpKSkKIAkJdHgtPmtleSA9IGtleTsKIAllbHNlIGlmICh0eC0+c2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgJiYKIAkJICh0eC0+c2tiLT5wcm90b2NvbCAhPSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSAmJgotCQkgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CisJCSAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgJiYKKwkJICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcikgfHwKKwkJICAoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSAgIHR4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3ModHgtPnN0YSwgV0xBTl9TVEFfTUZQKSkpKSB7CiAJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmVuY3J5cHRlZCk7CiAJCXJldHVybiBUWF9EUk9QOwogCX0gZWxzZQpAQCAtNDI4LDEwICs0NTEsMTkgQEAKIAkJCWlmIChpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJCWJyZWFrOwogCQljYXNlIEFMR19US0lQOgotCQljYXNlIEFMR19DQ01QOgogCQkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQkJdHgtPmtleSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBBTEdfQ0NNUDoKKwkJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCQkgICAgIWllZWU4MDIxMV91c2VfbWZwKGhkci0+ZnJhbWVfY29udHJvbCwgdHgtPnN0YSwKKwkJCQkJICAgICAgIHR4LT5za2IpKQorCQkJCXR4LT5rZXkgPSBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgQUxHX0FFU19DTUFDOgorCQkJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJCXR4LT5rZXkgPSBOVUxMOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTc4OSw2ICs4MjEsOCBAQAogCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQodHgpOwogCWNhc2UgQUxHX0NDTVA6CiAJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZW5jcnlwdCh0eCk7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQodHgpOwogCX0KIAogCS8qIG5vdCByZWFjaGVkICovCkBAIC04NDQsNyArODc4LDYgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLQogLyogYWN0dWFsIHRyYW5zbWl0IHBhdGggKi8KIAogLyoKQEAgLTk4NCwxMiArMTAxNywyMCBAQAogCXR4LT5zdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCiAJaWYgKHR4LT5zdGEgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gKnFjICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CiAKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnR4LT5zdGEtPmxvY2ssIGZsYWdzKTsKIAkJc3RhdGUgPSAmdHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCisJCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0FNUERVOworCQkJaWYgKGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCisJCQkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKAorCQkJCQlza2IsIHR4LT5sb2NhbC0+aHcucXVldWVzICsKKwkJCQkJICAgICB0eC0+c3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eC0+c3RhLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CkBAIC0xMDUzLDkgKzEwOTQsOSBAQAogCWludCByZXQsIGk7CiAKIAlpZiAoc2tiKSB7Ci0JCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBza2IpKQotCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKLQkJaW5mbyA9ICBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWlmIChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCgmbG9jYWwtPmh3LAorCQkJCQkgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpKQorCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9QRU5ESU5HOwogCiAJCXJldCA9IGxvY2FsLT5vcHMtPnR4KGxvY2FsX3RvX2h3KGxvY2FsKSwgc2tiKTsKIAkJaWYgKHJldCkKQEAgLTEwNzAsOCArMTExMSw4IEBACiAJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+ZXh0cmFfZnJhZ1tpXSk7CiAJCQlpbmZvLT5mbGFncyAmPSB+KElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCB8CiAJCQkJCSBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKTsKLQkJCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LAotCQkJCQkJICAgdHgtPmV4dHJhX2ZyYWdbaV0pKQorCQkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKCZsb2NhbC0+aHcsCisJCQkJCXNrYl9nZXRfcXVldWVfbWFwcGluZyh0eC0+ZXh0cmFfZnJhZ1tpXSkpKQogCQkJCXJldHVybiBJRUVFODAyMTFfVFhfRlJBR19BR0FJTjsKIAogCQkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLApAQCAtMTE4MSw4ICsxMjIyLDkgQEAKIAkJICogcXVldWVzLCB0aGVyZSdzIG5vIHJlYXNvbiBmb3IgYSBkcml2ZXIgdG8gcmVqZWN0CiAJCSAqIGEgZnJhbWUgdGhlcmUsIHdhcm4gYW5kIGRyb3AgaXQuCiAJCSAqLwotCQlpZiAoV0FSTl9PTihpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKQotCQkJZ290byBkcm9wOworCQlpZiAocmV0ICE9IElFRUU4MDIxMV9UWF9QRU5ESU5HKQorCQkJaWYgKFdBUk5fT04oaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkKKwkJCQlnb3RvIGRyb3A7CiAKIAkJc3RvcmUgPSAmbG9jYWwtPnBlbmRpbmdfcGFja2V0W3F1ZXVlXTsKIApAQCAtMTI5OCw2ICsxMzQwLDE5IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmICgobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSAmJgorCSAgICBsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7CisJCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsCisJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QUyk7CisJCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsCisJCQkJCSZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOworCQl9CisKKwkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCSAgICAgICAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwl9CisKIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiAKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CkBAIC0xMzkyLDEwICsxNDQ3LDMxIEBACiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpwcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKilza2ItPmRhdGE7CiAJdTE2IGxlbl9ydGhkcjsKIAorCS8qCisJICogRnJhbWUgaW5qZWN0aW9uIGlzIG5vdCBhbGxvd2VkIGlmIGJlYWNvbmluZyBpcyBub3QgYWxsb3dlZAorCSAqIG9yIGlmIHdlIG5lZWQgcmFkYXIgZGV0ZWN0aW9uLiBCZWFjb25pbmcgaXMgdXN1YWxseSBub3QgYWxsb3dlZCB3aGVuCisJICogdGhlIG1vZGUgb3Igb3BlcmF0aW9uIChBZGhvYywgQVAsIE1lc2gpIGRvZXMgbm90IHN1cHBvcnQgREZTLgorCSAqIFBhc3NpdmUgc2NhbiBpcyBhbHNvIHVzZWQgaW4gd29ybGQgcmVndWxhdG9yeSBkb21haW5zIHdoZXJlCisJICogeW91ciBjb3VudHJ5IGlzIG5vdCBrbm93biBhbmQgYXMgc3VjaCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcworCSAqIE5PIFRYIHVubGVzcyB0aGUgY2hhbm5lbCBpcyBleHBsaWNpdGx5IGFsbG93ZWQgaW4gd2hpY2ggY2FzZQorCSAqIHlvdXIgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiB3b3VsZCBub3QgaGF2ZSB0aGUgcGFzc2l2ZSBzY2FuCisJICogZmxhZy4KKwkgKgorCSAqIFNpbmNlIEFQIG1vZGUgdXNlcyBtb25pdG9yIGludGVyZmFjZXMgdG8gaW5qZWN0L1RYIG1hbmFnZW1lbnQKKwkgKiBmcmFtZXMgd2UgY2FuIG1ha2UgQVAgbW9kZSB0aGUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSBvbmNlIGl0CisJICogc3VwcG9ydHMgcmFkYXIgZGV0ZWN0aW9uIGFzIGl0cyBpbXBsZW1lbnRhdGlvbiBjYW4gZGVhbCB3aXRoCisJICogcmFkYXIgZGV0ZWN0aW9uIGJ5IGl0c2VsZi4gV2UgY2FuIGRvIHRoYXQgbGF0ZXIgYnkgYWRkaW5nIGEKKwkgKiBtb25pdG9yIGZsYWcgaW50ZXJmYWNlcyB1c2VkIGZvciBBUCBzdXBwb3J0LgorCSAqLworCWlmICgoY2hhbi0+ZmxhZ3MgJiAoSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8IElFRUU4MDIxMV9DSEFOX1JBREFSIHwKKwkgICAgIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpKQorCQlnb3RvIGZhaWw7CisKIAkvKiBjaGVjayBmb3Igbm90IGV2ZW4gaGF2aW5nIHRoZSBmaXhlZCByYWRpb3RhcCBoZWFkZXIgcGFydCAqLwogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlcikpKQogCQlnb3RvIGZhaWw7IC8qIHRvbyBzaG9ydCB0byBiZSBwb3NzaWJseSB2YWxpZCAqLwpAQCAtMTQ3OSwxOSArMTU1NSw2IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9fU1RBQ0tfRFlOQU1JQ19QUykgJiYKLQkgICAgbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKLQkJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywKLQkJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMpOwotCQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLAotCQkJCSAgICZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOwotCQl9Ci0KLQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCkpOwotCX0KLQogCW5oX3BvcyA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhOwogCWhfcG9zID0gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YTsKIApAQCAtMTU3Miw3ICsxNjM1LDcgQEAKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkvKiBCU1NJRCBTQSBEQSAqLwotCQltZW1jcHkoaGRyLmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjIsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAyNDsKQEAgLTE1ODEsNyArMTY0NCw3IEBACiAJCS8qIERBIFNBIEJTU0lEICovCiAJCW1lbWNweShoZHIuYWRkcjEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIyLCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwotCQltZW1jcHkoaGRyLmFkZHIzLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMywgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAyNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE4NjcsNyArMTkzMCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICphcCA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gTlVMTDsKIAlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwpAQCAtMTkxOSwxMyArMTk4MSwxMyBAQAogCQl9IGVsc2UKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCQlpZiAoIWlmc3RhLT5wcm9iZV9yZXNwKQorCQlpZiAoIWlmaWJzcy0+cHJvYmVfcmVzcCkKIAkJCWdvdG8gb3V0OwogCi0JCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfQVRPTUlDKTsKKwkJc2tiID0gc2tiX2NvcHkoaWZpYnNzLT5wcm9iZV9yZXNwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpCiAJCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggZmI4OWUxZC4uZTA0MzFhMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC00MSw2ICs0MSwxNSBAQAogY29uc3QgdW5zaWduZWQgY2hhciBicmlkZ2VfdHVubmVsX2hlYWRlcltdIF9fYWxpZ25lZCgyKSA9CiAJeyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweGY4IH07CiAKK3N0cnVjdCBpZWVlODAyMTFfaHcgKndpcGh5X3RvX2llZWU4MDIxMV9odyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCUJVR19PTighd2lwaHkpOworCisJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlyZXR1cm4gJmxvY2FsLT5odzsKK30KK0VYUE9SVF9TWU1CT0wod2lwaHlfdG9faWVlZTgwMjExX2h3KTsKIAogdTggKmllZWU4MDIxMV9nZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgc2l6ZV90IGxlbiwKIAkJCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKQEAgLTMzNSwxNSArMzQ0LDM2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIGFtcGR1IHF1ZXVlcyAqLwotCWlmIChxdWV1ZSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoaHcpKSB7Ci0JCV9fY2xlYXJfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKLQotCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gIT0gMCkKLQkJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLworCWlmIChxdWV1ZSA+PSBody0+cXVldWVzKSB7CisJCWlmIChsb2NhbC0+YW1wZHVfYWNfcXVldWVbcXVldWUgLSBody0+cXVldWVzXSA8IDApCiAJCQlyZXR1cm47CisKKwkJLyoKKwkJICogZm9yIHZpcnR1YWwgYWdncmVnYXRpb24gcXVldWVzLCB3ZSBuZWVkIHRvIHJlZmNvdW50IHRoZQorCQkgKiBpbnRlcm5hbCBtYWM4MDIxMSBkaXNhYmxlIChtdWx0aXBsZSB0aW1lcyEpLCBrZWVwIHRyYWNrIG9mCisJCSAqIGRyaXZlciBkaXNhYmxlIF9hbmRfIG1ha2Ugc3VyZSB0aGUgcmVndWxhciBxdWV1ZSBpcworCQkgKiBhY3R1YWxseSBlbmFibGVkLgorCQkgKi8KKwkJaWYgKHJlYXNvbiA9PSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pCisJCQlsb2NhbC0+YW1kcHVfYWNfc3RvcF9yZWZjbnRbcXVldWUgLSBody0+cXVldWVzXS0tOworCQllbHNlCisJCQlfX2NsZWFyX2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisKKwkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdIHx8CisJCSAgICBsb2NhbC0+YW1kcHVfYWNfc3RvcF9yZWZjbnRbcXVldWUgLSBody0+cXVldWVzXSkKKwkJCXJldHVybjsKKworCQkvKiBub3cgZ28gb24gdG8gdHJlYXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVndWxhciBxdWV1ZSAqLworCQlxdWV1ZSA9IGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdOworCQlyZWFzb24gPSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT047CiAJfQogCisJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOworCisJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdICE9IDApCisJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLworCQlyZXR1cm47CisKIAlpZiAodGVzdF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpIHsKIAkJc2V0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nX3J1bik7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwpAQCAtMzc1LDkgKzQwNSwyNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBhbXBkdSBxdWV1ZXMgKi8KLQlpZiAocXVldWUgPCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKGh3KSkKLQkJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKwlpZiAocXVldWUgPj0gaHctPnF1ZXVlcykgeworCQlpZiAobG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3F1ZXVlIC0gaHctPnF1ZXVlc10gPCAwKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIGZvciB2aXJ0dWFsIGFnZ3JlZ2F0aW9uIHF1ZXVlcywgd2UgbmVlZCB0byByZWZjb3VudCB0aGUKKwkJICogaW50ZXJuYWwgbWFjODAyMTEgZGlzYWJsZSAobXVsdGlwbGUgdGltZXMhKSwga2VlcCB0cmFjayBvZgorCQkgKiBkcml2ZXIgZGlzYWJsZSBfYW5kXyBtYWtlIHN1cmUgdGhlIHJlZ3VsYXIgcXVldWUgaXMKKwkJICogYWN0dWFsbHkgZW5hYmxlZC4KKwkJICovCisJCWlmIChyZWFzb24gPT0gSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKQorCQkJbG9jYWwtPmFtZHB1X2FjX3N0b3BfcmVmY250W3F1ZXVlIC0gaHctPnF1ZXVlc10rKzsKKwkJZWxzZQorCQkJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKworCQkvKiBub3cgZ28gb24gdG8gdHJlYXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVndWxhciBxdWV1ZSAqLworCQlxdWV1ZSA9IGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdOworCQlyZWFzb24gPSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT047CisJfQorCisJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKIAogCW5ldGlmX3N0b3Bfc3VicXVldWUobG9jYWwtPm1kZXYsIHF1ZXVlKTsKIH0KQEAgLTQwOSw3ICs0NTcsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKIAkJX19pZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaSwgcmVhc29uKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CkBAIC00MjUsNiArNDczLDE2IEBACiBpbnQgaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHF1ZXVlID49IGh3LT5xdWV1ZXMpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCXF1ZXVlID0gbG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3F1ZXVlIC0gaHctPnF1ZXVlc107CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCWlmIChxdWV1ZSA8IDApCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlyZXR1cm4gX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKTsKQEAgLTQ1OSw3ICs1MTcsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCi0JcnRubF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CkBAIC00ODAsNyArNTM4LDcgQEAKIAkJCQkgJnNkYXRhLT52aWYpOwogCX0KIAotCXJ0bmxfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyk7CiAKQEAgLTY1Myw2ICs3MTEsMTAgQEAKIAkJCWVsZW1zLT5wd3JfY29uc3RyX2VsZW0gPSBwb3M7CiAJCQllbGVtcy0+cHdyX2NvbnN0cl9lbGVtX2xlbiA9IGVsZW47CiAJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9USU1FT1VUX0lOVEVSVkFMOgorCQkJZWxlbXMtPnRpbWVvdXRfaW50ID0gcG9zOworCQkJZWxlbXMtPnRpbWVvdXRfaW50X2xlbiA9IGVsZW47CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC02ODgsNiArNzUwLDI3IEBACiAJCWxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLCBpLCAmcXBhcmFtKTsKIH0KIAordm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgY29uc3QgdTggKnN1cHBfcmF0ZXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGksIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMDsKKworCS8qIGNmLiBJRUVFIDgwMi4xMSA5LjIuMTIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykKKwkJaWYgKChzdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQorCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOworCisJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKKwkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisJZWxzZQorCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisKKwlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKK30KKwogdm9pZCBpZWVlODAyMTFfdHhfc2tiKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICBpbnQgZW5jcnlwdCkKIHsKQEAgLTcyNywxMiArODEwLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdTY0IGllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCit1MzIgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOwotCXU2NCBtYW5kYXRvcnlfcmF0ZXM7CisJdTMyIG1hbmRhdG9yeV9yYXRlczsKIAllbnVtIGllZWU4MDIxMV9yYXRlX2ZsYWdzIG1hbmRhdG9yeV9mbGFnOwogCWludCBpOwogCkBAIC03NTQsMyArODM3LDE2MSBAQAogCQkJbWFuZGF0b3J5X3JhdGVzIHw9IEJJVChpKTsKIAlyZXR1cm4gbWFuZGF0b3J5X3JhdGVzOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgdTE2IHRyYW5zYWN0aW9uLCB1MTYgYXV0aF9hbGcsCisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAorCQkJIGNvbnN0IHU4ICpic3NpZCwgaW50IGVuY3J5cHQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJY29uc3QgdTggKmllX2F1dGggPSBOVUxMOworCWludCBpZV9hdXRoX2xlbiA9IDA7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWVfYXV0aF9sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfYXV0aF9sZW47CisJCWllX2F1dGggPSBzZGF0YS0+dS5tZ2QuaWVfYXV0aDsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCisJCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4gKyBpZV9hdXRoX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhdXRoICIKKwkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0ICsgNik7CisJbWVtc2V0KG1nbXQsIDAsIDI0ICsgNik7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVVUSCk7CisJaWYgKGVuY3J5cHQpCisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT51LmF1dGguYXV0aF9hbGcgPSBjcHVfdG9fbGUxNihhdXRoX2FsZyk7CisJbWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7CisJbWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlID0gY3B1X3RvX2xlMTYoMCk7CisJaWYgKGV4dHJhKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGV4dHJhX2xlbiksIGV4dHJhLCBleHRyYV9sZW4pOworCWlmIChpZV9hdXRoKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGllX2F1dGhfbGVuKSwgaWVfYXV0aCwgaWVfYXV0aF9sZW4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCBlbmNyeXB0KTsKK30KKwordm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCisJCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJICAgICAgdTggKmllLCBzaXplX3QgaWVfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICpwb3MsICpzdXBwX3JhdGVzLCAqZXN1cHBfcmF0ZXMgPSBOVUxMLCAqZXh0cmFfcHJlcV9pZSA9IE5VTEw7CisJaW50IGksIGV4dHJhX3ByZXFfaWVfbGVuID0gMDsKKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlleHRyYV9wcmVxX2llX2xlbiA9IHNkYXRhLT51Lm1nZC5pZV9wcm9iZXJlcV9sZW47CisJCWV4dHJhX3ByZXFfaWUgPSBzZGF0YS0+dS5tZ2QuaWVfcHJvYmVyZXE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArIDIwMCArCisJCQkgICAgaWVfbGVuICsgZXh0cmFfcHJlcV9pZV9sZW4pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgorCQkgICAgICAgInJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAoZHN0KSB7CisJCW1lbWNweShtZ210LT5kYSwgZHN0LCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgZHN0LCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7CisJCW1lbXNldChtZ210LT5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCX0KKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHNzaWRfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCSpwb3MrKyA9IHNzaWRfbGVuOworCW1lbWNweShwb3MsIHNzaWQsIHNzaWRfbGVuKTsKKworCXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMik7CisJc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJc3VwcF9yYXRlc1sxXSA9IDA7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwkJaWYgKGVzdXBwX3JhdGVzKSB7CisJCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7CisJCQllc3VwcF9yYXRlc1sxXSsrOworCQl9IGVsc2UgaWYgKHN1cHBfcmF0ZXNbMV0gPT0gOCkgeworCQkJZXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMyk7CisJCQllc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkJZXN1cHBfcmF0ZXNbMV0gPSAxOworCQkJcG9zID0gJmVzdXBwX3JhdGVzWzJdOworCQl9IGVsc2UgeworCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOworCQkJc3VwcF9yYXRlc1sxXSsrOworCQl9CisJCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKKwl9CisKKwlpZiAoaWUpCisJCW1lbWNweShza2JfcHV0KHNrYiwgaWVfbGVuKSwgaWUsIGllX2xlbik7CisJaWYgKGV4dHJhX3ByZXFfaWUpCisJCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfcHJlcV9pZV9sZW4pLCBleHRyYV9wcmVxX2llLAorCQkgICAgICAgZXh0cmFfcHJlcV9pZV9sZW4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KKwordTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKKwlzaXplX3QgbnVtX3JhdGVzOworCXUzMiBzdXBwX3JhdGVzOworCWludCBpLCBqOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKKworCWlmICghc2JhbmQpIHsKKwkJV0FSTl9PTigxKTsKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCX0KKworCWJpdHJhdGVzID0gc2JhbmQtPmJpdHJhdGVzOworCW51bV9yYXRlcyA9IHNiYW5kLT5uX2JpdHJhdGVzOworCXN1cHBfcmF0ZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4gKworCQkgICAgIGVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW47IGkrKykgeworCQl1OCByYXRlID0gMDsKKwkJaW50IG93bl9yYXRlOworCQlpZiAoaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbikKKwkJCXJhdGUgPSBlbGVtcy0+c3VwcF9yYXRlc1tpXTsKKwkJZWxzZSBpZiAoZWxlbXMtPmV4dF9zdXBwX3JhdGVzKQorCQkJcmF0ZSA9IGVsZW1zLT5leHRfc3VwcF9yYXRlcworCQkJCVtpIC0gZWxlbXMtPnN1cHBfcmF0ZXNfbGVuXTsKKwkJb3duX3JhdGUgPSA1ICogKHJhdGUgJiAweDdmKTsKKwkJZm9yIChqID0gMDsgaiA8IG51bV9yYXRlczsgaisrKQorCQkJaWYgKGJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gb3duX3JhdGUpCisJCQkJc3VwcF9yYXRlcyB8PSBCSVQoaik7CisJfQorCXJldHVybiBzdXBwX3JhdGVzOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dleHQuYyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKaW5kZXggNzE2MmQ1OC4uOTM1YzYzZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dleHQuYworKysgYi9uZXQvbWFjODAyMTEvd2V4dC5jCkBAIC0zNyw3ICszNywxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CiAJaW50IGVycjsKIAotCWlmIChpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKSB7CisJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMpIHsKKwkJaWYgKGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgfHwKKwkJICAgIGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldF9lbmNyeXB0IC0gaW52YWxpZCBpZHg9JWQgIgorCQkJICAgICAgICIoQklQKVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgaWR4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0X2VuY3J5cHQgLSBpbnZhbGlkIGlkeD0lZFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAzLDYgKzExMCw5IEBACiAKIAkJaWYgKHNldF90eF9rZXkgfHwgKCFzdGEgJiYgIXNkYXRhLT5kZWZhdWx0X2tleSAmJiBrZXkpKQogCQkJaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgaWR4KTsKKwkJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMgJiYKKwkJICAgIChzZXRfdHhfa2V5IHx8ICghc3RhICYmICFzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSAmJiBrZXkpKSkKKwkJCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwgaWR4KTsKIAl9CiAKICBvdXRfdW5sb2NrOgpAQCAtMTIyLDEyMiArMTMyLDM3IEBACiAJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc2RhdGEsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBjID0gMDsKLQotCWRhdGEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjE7Ci0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9ERUZBVUxUX0tFWVM7Ci0KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfHwKLQkgICAgbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQikKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gbG9jYWwtPmh3Lm1heF9zaWduYWw7Ci0JZWxzZSBpZiAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKLQotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKLQotCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwotCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQotCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7Ci0JLyogbm90IGFsd2F5cyB0cnVlIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nICovCi0JcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gcmFuZ2UtPm1heF9xdWFsLmxldmVsIC8gMjsKLQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSByYW5nZS0+bWF4X3F1YWwubm9pc2UgLyAyOwotCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQotCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAotCQkJICBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8IElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOwotCi0KLQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCArKykgewotCQlpbnQgaTsKLQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwotCi0JCWlmICghc2JhbmQpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgJiYgYyA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOwotCi0JCQlpZiAoIShjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgewotCQkJCXJhbmdlLT5mcmVxW2NdLmkgPQotCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCi0JCQkJCQljaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmNlbnRlcl9mcmVxOwotCQkJCXJhbmdlLT5mcmVxW2NdLmUgPSA2OwotCQkJCWMrKzsKLQkJCX0KLQkJfQotCX0KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gYzsKLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGM7Ci0KLQlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7Ci0KLQlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKLQotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCiAJLyogZnJlcS0+ZSA9PSAwOiBmcmVxLT5tID0gY2hhbm5lbDsgb3RoZXJ3aXNlIGZyZXEgPSBtICogMTBeZSAqLwogCWlmIChmcmVxLT5lID09IDApIHsKIAkJaWYgKGZyZXEtPm0gPCAwKSB7Ci0JCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwkJCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQogCQkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlCkBAIC0yNzQsMzIgKzE5OSwzNSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXNpemVfdCBsZW4gPSBkYXRhLT5sZW5ndGg7CisJaW50IHJldDsKIAogCS8qIGl3Y29uZmlnIHVzZXMgbnVsIHRlcm1pbmF0aW9uIGluIFNTSUQuLiAqLwogCWlmIChsZW4gPiAwICYmIHNzaWRbbGVuIC0gMV0gPT0gJ1wwJykKIAkJbGVuLS07CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpbnQgcmV0OworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSB7CiAJCQlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweShzZGF0YS0+dS5zdGEuc3NpZCwgc3NpZCwgbGVuKTsKLQkJCXNkYXRhLT51LnN0YS5zc2lkX2xlbiA9IGxlbjsKKwkJCW1lbWNweShzZGF0YS0+dS5tZ2Quc3NpZCwgc3NpZCwgbGVuKTsKKwkJCXNkYXRhLT51Lm1nZC5zc2lkX2xlbiA9IGxlbjsKIAkJCXJldHVybiAwOwogCQl9CisKIAkJaWYgKGRhdGEtPmZsYWdzKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKIAkJZWxzZQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisKIAkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzZGF0YSwgc3NpZCwgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEsICZzZGF0YS0+dS5zdGEpOworCisJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKLQl9CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJldHVybiBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzZGF0YSwgc3NpZCwgbGVuKTsKIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTMxMyw4ICsyNDEsNyBAQAogCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc2RhdGEsIHNzaWQsICZsZW4pOwogCQlpZiAocmVzID09IDApIHsKIAkJCWRhdGEtPmxlbmd0aCA9IGxlbjsKQEAgLTMyMiw2ICsyNDksMTQgQEAKIAkJfSBlbHNlCiAJCQlkYXRhLT5mbGFncyA9IDA7CiAJCXJldHVybiByZXM7CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaW50IHJlcyA9IGllZWU4MDIxMV9pYnNzX2dldF9zc2lkKHNkYXRhLCBzc2lkLCAmbGVuKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQlkYXRhLT5sZW5ndGggPSBsZW47CisJCQlkYXRhLT5mbGFncyA9IDE7CisJCX0gZWxzZQorCQkJZGF0YS0+ZmxhZ3MgPSAwOworCQlyZXR1cm4gcmVzOwogCX0KIAogCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTMzNSwyNiArMjcwLDM1IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmV0OwogCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSB7Ci0JCQltZW1jcHkoc2RhdGEtPnUuc3RhLmJzc2lkLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCisJCQltZW1jcHkoc2RhdGEtPnUubWdkLmJzc2lkLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCiAJCQkgICAgICAgRVRIX0FMRU4pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAorCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CiAJCWVsc2UKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKIAkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwgfAorCQkJCQkgICAgICAgSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUw7CisJCWVsc2UKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMOworCisJCXJldHVybiBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7CiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfV0RTKSB7CiAJCS8qCiAJCSAqIElmIGl0IGlzIG5lY2Vzc2FyeSB0byB1cGRhdGUgdGhlIFdEUyBwZWVyIGFkZHJlc3MKQEAgLTM4MywxNyArMzI3LDIwIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpZiAoc2RhdGEtPnUuc3RhLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEIHx8Ci0JCSAgICBzZGF0YS0+dS5zdGEuc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKIAkJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKKwkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJCX0gZWxzZQogCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoc2RhdGEtPnUuaWJzcy5zdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCkgeworCQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTik7CisJCX0gZWxzZQorCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1dEUykgewogCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCBFVEhfQUxFTik7CkBAIC00MDQsNTggKzM1MSw2IEBACiB9CiAKIAotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxID0gTlVMTDsKLQl1OCAqc3NpZCA9IE5VTEw7Ci0Jc2l6ZV90IHNzaWRfbGVuID0gMDsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVORVRET1dOOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogaWYgU1NJRCB3YXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkgdGhlbiB1c2UgdGhhdCAqLwotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSAmJgotCSAgICB3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCXJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKLQkJc3NpZCA9IHJlcS0+ZXNzaWQ7Ci0JCXNzaWRfbGVuID0gcmVxLT5lc3NpZF9sZW47Ci0JfQotCi0JcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIHNzaWQsIHNzaWRfbGVuKTsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCWludCByZXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJlcyA9IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMobG9jYWwsIGluZm8sIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwotCWlmIChyZXMgPj0gMCkgewotCQlkYXRhLT5sZW5ndGggPSByZXM7Ci0JCXJldHVybiAwOwotCX0KLQlkYXRhLT5sZW5ndGggPSAwOwotCXJldHVybiByZXM7Ci19Ci0KLQogc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcmF0ZSwgY2hhciAqZXh0cmEpCkBAIC01MTEsNyArNDA2LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUuc3RhLmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCk7CiAKIAlpZiAoc3RhICYmICEoc3RhLT5sYXN0X3R4X3JhdGUuZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkKIAkJcmF0ZS0+dmFsdWUgPSBzYmFuZC0+Yml0cmF0ZXNbc3RhLT5sYXN0X3R4X3JhdGUuaWR4XS5iaXRyYXRlOwpAQCAtNTQ5LDEwICs0NDQsOSBAQAogCWVsc2UgLyogQXV0b21hdGljIHBvd2VyIGxldmVsIHNldHRpbmcgKi8KIAkJbmV3X3Bvd2VyX2xldmVsID0gY2hhbi0+bWF4X3Bvd2VyOwogCi0JaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IG5ld19wb3dlcl9sZXZlbCkgewotCQlsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCA9IG5ld19wb3dlcl9sZXZlbDsKKwlsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCA9IG5ld19wb3dlcl9sZXZlbDsKKwlpZiAobG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgIT0gbmV3X3Bvd2VyX2xldmVsKQogCQlyZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSOwotCX0KIAogCWlmIChsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkICE9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCkpIHsKIAkJbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCA9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCk7CkBAIC03MTMsOCArNjA3LDcgQEAKIAlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKSBleHRyYTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmICghKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKG1sbWUtPmNtZCkgewpAQCAtODEwLDggKzcwMyw3IEBACiAJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlzd2l0Y2ggKGlmc3RhLT5hdXRoX2FsZykgeworCQlzd2l0Y2ggKHNkYXRhLT51Lm1nZC5hdXRoX2FsZykgewogCQljYXNlIFdMQU5fQVVUSF9PUEVOOgogCQljYXNlIFdMQU5fQVVUSF9MRUFQOgogCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKQEAgLTgzNiw2ICs3MjgsOSBAQAogCWludCByZXQgPSAwLCB0aW1lb3V0ID0gMDsKIAlib29sIHBzOwogCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODUyLDMxICs3NDcsNDkgQEAKIAkJcHMgPSB0cnVlOwogCQlicmVhazsKIAlkZWZhdWx0OiAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugd2UgaWdub3JlICovCi0JCWJyZWFrOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAod3JxLT5mbGFncyAmIH4oSVdfUE9XRVJfTU9ERSB8IElXX1BPV0VSX1RJTUVPVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICh3cnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkKIAkJdGltZW91dCA9IHdycS0+dmFsdWUgLyAxMDAwOwogCi1zZXQ6Ci0JaWYgKHBzID09IGxvY2FsLT5wb3dlcnNhdmUgJiYgdGltZW91dCA9PSBsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KQorIHNldDoKKwlpZiAocHMgPT0gbG9jYWwtPnBvd2Vyc2F2ZSAmJiB0aW1lb3V0ID09IGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCkKIAkJcmV0dXJuIHJldDsKIAogCWxvY2FsLT5wb3dlcnNhdmUgPSBwczsKLQlsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKKwljb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPSB0aW1lb3V0OwogCi0JaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewotCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9fU1RBQ0tfRFlOQU1JQ19QUykgJiYKLQkJICAgIGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKQotCQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQkJZWxzZSB7Ci0JCQlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkKLQkJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQkJCWVsc2UKLQkJCQljb25mLT5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKQorCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQkgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUKTsKKworCWlmICghKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID4gMCAmJgorCSAgICAhKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKSkgeworCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhjb25mLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwl9IGVsc2UgeworCQlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkgeworCQkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworCQkJY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CisJCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQl9IGVsc2UgeworCQkJY29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJCQljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CiAJCX0KLQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTAzLDExICs4MTYsMjIgQEAKIAogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CiAJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgogCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQ6CisJCWJyZWFrOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJaWYgKGRhdGEtPnZhbHVlICYgKElXX0FVVEhfQ0lQSEVSX1dFUDQwIHwKKwkJCSAgICBJV19BVVRIX0NJUEhFUl9XRVAxMDQgfCBJV19BVVRIX0NJUEhFUl9US0lQKSkKKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCQkJZWxzZQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPQorCQkJCQl+SUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgogCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9ICEhZGF0YS0+dmFsdWU7CkBAIC05MTYsMjQgKzg0MCw0NSBAQAogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQlyZXQgPSAtRUlOVkFMOwogCQllbHNlIHsKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwogCQkJLyoKIAkJCSAqIFByaXZhY3kgaW52b2tlZCBieSB3cGFfc3VwcGxpY2FudCwgc3RvcmUgdGhlCiAJCQkgKiB2YWx1ZSBhbmQgYWxsb3cgYXNzb2NpYXRpbmcgdG8gYSBwcm90ZWN0ZWQKIAkJCSAqIG5ldHdvcmsgd2l0aG91dCBoYXZpbmcgYSBrZXkgdXAgZnJvbnQuCiAJCQkgKi8KIAkJCWlmIChkYXRhLT52YWx1ZSkKLQkJCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0KKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KIAkJCQkJSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXNkYXRhLT51LnN0YS5hdXRoX2FsZ3MgPSBkYXRhLT52YWx1ZTsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOwogCQllbHNlCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CisJY2FzZSBJV19BVVRIX01GUDoKKwkJaWYgKCEoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSkpIHsKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlzd2l0Y2ggKGRhdGEtPnZhbHVlKSB7CisJCQljYXNlIElXX0FVVEhfTUZQX0RJU0FCTEVEOgorCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEOworCQkJCWJyZWFrOworCQkJY2FzZSBJV19BVVRIX01GUF9PUFRJT05BTDoKKwkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9PUFRJT05BTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSVdfQVVUSF9NRlBfUkVRVUlSRUQ6CisJCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldCA9IC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZQorCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKQEAgLTk1MSw5ICs4OTYsOSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5zdGEuYnNzaWQpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQpOworCiAJaWYgKCFzdGEpIHsKIAkJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ID0gMDsKIAkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgPSAwOwpAQCAtOTYyLDEwICs5MDcsNDUgQEAKIAkJd3N0YXRzLT5xdWFsLm5vaXNlID0gMDsKIAkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9JTlZBTElEOwogCX0gZWxzZSB7Ci0JCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHN0YS0+bGFzdF9zaWduYWw7Ci0JCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3F1YWw7Ci0JCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHN0YS0+bGFzdF9ub2lzZTsKLQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOworCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IDA7CisJCS8qCisJCSAqIG1pcnJvciB3aGF0IGNmZzgwMjExIGRvZXMgZm9yIGl3cmFuZ2Uvc2NhbiByZXN1bHRzLAorCQkgKiBvdGhlcndpc2UgdXNlcnNwYWNlIGdldHMgY29uZnVzZWQuCisJCSAqLworCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgKElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDIHwKKwkJCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pKSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJfSBlbHNlIHsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9JTlZBTElEOworCQl9CisKKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKSB7CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQl9IGVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSB7CisJCQlpbnQgc2lnID0gc3RhLT5sYXN0X3NpZ25hbDsKKworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9EQk07CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzaWc7CisJCQlpZiAoc2lnIDwgLTExMCkKKwkJCQlzaWcgPSAtMTEwOworCQkJZWxzZSBpZiAoc2lnID4gLTQwKQorCQkJCXNpZyA9IC00MDsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc2lnICsgMTEwOworCQl9CisKKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0pIHsKKwkJCS8qCisJCQkgKiBUaGlzIGFzc3VtZXMgdGhhdCBpZiBkcml2ZXIgcmVwb3J0cyBub2lzZSwgaXQgYWxzbworCQkJICogcmVwb3J0cyBzaWduYWwgaW4gZEJtLgorCQkJICovCisJCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBzdGEtPmxhc3Rfbm9pc2U7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX1VQREFURUQ7CisJCX0gZWxzZSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisJCX0KIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTk4Miw5ICs5NjIsOCBAQAogCiAJc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKIAljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJZGF0YS0+dmFsdWUgPSBzZGF0YS0+dS5zdGEuYXV0aF9hbGdzOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51Lm1nZC5hdXRoX2FsZ3M7CiAJCWVsc2UKIAkJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKQEAgLTEwMTcsNiArOTk2LDkgQEAKIAljYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKIAkJYWxnID0gQUxHX0NDTVA7CiAJCWJyZWFrOworCWNhc2UgSVdfRU5DT0RFX0FMR19BRVNfQ01BQzoKKwkJYWxnID0gQUxHX0FFU19DTUFDOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTAyNSwyMCArMTAwNyw0MSBAQAogCQlyZW1vdmUgPSAxOwogCiAJaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KSB7Ci0JCWlkeCA9IC0xOwotCQlpZiAoIXNkYXRhLT5kZWZhdWx0X2tleSkKLQkJCWlkeCA9IDA7Ci0JCWVsc2UgZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykgewotCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgewotCQkJCWlkeCA9IGk7Ci0JCQkJYnJlYWs7CisJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMpIHsKKwkJaWYgKGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyAxIHx8CisJCSAgICBpZHggPiBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKSB7CisJCQlpZHggPSAtMTsKKwkJCWlmICghc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpCisJCQkJaWR4ID0gMDsKKwkJCWVsc2UgZm9yIChpID0gTlVNX0RFRkFVTFRfS0VZUzsKKwkJCQkgIGkgPCBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTOworCQkJCSAgaSsrKSB7CisJCQkJaWYgKHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKQorCQkJCXsKKwkJCQkJaWR4ID0gaTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQotCQl9Ci0JCWlmIChpZHggPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JCWlkeC0tOworCQkJaWYgKGlkeCA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJaWR4LS07CisJfSBlbHNlIHsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgeworCQkJaWR4ID0gLTE7CisJCQlpZiAoIXNkYXRhLT5kZWZhdWx0X2tleSkKKwkJCQlpZHggPSAwOworCQkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7CisJCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgeworCQkJCQlpZHggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaWR4IDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlpZHgtLTsKKwl9CiAKIAlyZXR1cm4gaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHNkYXRhLCBleHQtPmFkZHIuc2FfZGF0YSwgaWR4LCBhbGcsCiAJCQkJCXJlbW92ZSwKQEAgLTEwNjMsNyArMTA2Niw3IEBACiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdTRU5TICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdTRU5TICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3JhbmdlLAkJLyogU0lPQ0dJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCkBAIC0xMDc2LDggKzEwNzksOCBAQAogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3YXAsCQkvKiBTSU9DR0lXQVAgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd21sbWUsCQkvKiBTSU9DU0lXTUxNRSAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXQVBMSVNUICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3NjYW4sCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLwogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3ZXNzaWQsCQkvKiBTSU9DU0lXRVNTSUQgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2Vzc2lkLAkJLyogU0lPQ0dJV0VTU0lEICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOSUNLTiAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dtZS5jIGIvbmV0L21hYzgwMjExL3dtZS5jCmluZGV4IGFjNzFiMzguLjBiOGFkMWY0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmMKKysrIGIvbmV0L21hYzgwMjExL3dtZS5jCkBAIC05OSwxMCArOTksMTMgQEAKIAkvKiBpbiBjYXNlIHdlIGFyZSBhIGNsaWVudCB2ZXJpZnkgYWNtIGlzIG5vdCBzZXQgZm9yIHRoaXMgYWMgKi8KIAl3aGlsZSAodW5saWtlbHkobG9jYWwtPndtbV9hY20gJiBCSVQoc2tiLT5wcmlvcml0eSkpKSB7CiAJCWlmICh3bWVfZG93bmdyYWRlX2FjKHNrYikpIHsKLQkJCS8qIFRoZSBvbGQgY29kZSB3b3VsZCBkcm9wIHRoZSBwYWNrZXQgaW4gdGhpcwotCQkJICogY2FzZS4KKwkJCS8qCisJCQkgKiBUaGlzIHNob3VsZCBub3QgcmVhbGx5IGhhcHBlbi4gVGhlIEFQIGhhcyBtYXJrZWQgYWxsCisJCQkgKiBsb3dlciBBQ3MgdG8gcmVxdWlyZSBhZG1pc3Npb24gY29udHJvbCB3aGljaCBpcyBub3QKKwkJCSAqIGEgcmVhc29uYWJsZSBjb25maWd1cmF0aW9uLiBBbGxvdyB0aGUgZnJhbWUgdG8gYmUKKwkJCSAqIHRyYW5zbWl0dGVkIHVzaW5nIEFDX0JLIGFzIGEgd29ya2Fyb3VuZC4KIAkJCSAqLwotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMTE0LDkgKzExNyw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gbXByaXYtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgcXVldWU7CiAJdTggdGlkOwogCkBAIC0xMjQsMjkgKzEyNSwxMSBAQAogCWlmICh1bmxpa2VseShxdWV1ZSA+PSBsb2NhbC0+aHcucXVldWVzKSkKIAkJcXVldWUgPSBsb2NhbC0+aHcucXVldWVzIC0gMTsKIAotCWlmIChza2ItPnJlcXVldWUpIHsKLQkJaWYgKCFody0+YW1wZHVfcXVldWVzKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKLQkJdGlkID0gc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RBRzFEX01BU0s7Ci0JCWlmIChzdGEpIHsKLQkJCWludCBhbXBkdV9xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQotCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSkgJiYKLQkJCSAgICB0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKQotCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJcmV0dXJuIHF1ZXVlOwotCX0KLQotCS8qIE5vdyB3ZSBrbm93IHRoZSAxZCBwcmlvcml0eSwgZmlsbCBpbiB0aGUgUW9TIGhlYWRlciBpZgotCSAqIHRoZXJlIGlzIG9uZS4KKwkvKgorCSAqIE5vdyB3ZSBrbm93IHRoZSAxZCBwcmlvcml0eSwgZmlsbCBpbiB0aGUgUW9TIGhlYWRlciBpZgorCSAqIHRoZXJlIGlzIG9uZSAoYW5kIHdlIGhhdmVuJ3QgZG9uZSB0aGlzIGJlZm9yZSkuCiAJICovCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJaWYgKCFza2ItPnJlcXVldWUgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdTggKnAgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdTggYWNrX3BvbGljeSA9IDA7CiAJCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwpAQCAtMTU2LDE0MCArMTM5LDcgQEAKIAkJLyogcW9zIGhlYWRlciBpcyAyIGJ5dGVzLCBzZWNvbmQgcmVzZXJ2ZWQgKi8KIAkJKnArKyA9IGFja19wb2xpY3kgfCB0aWQ7CiAJCSpwID0gMDsKLQotCQlpZiAoIWh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlyZXR1cm4gcXVldWU7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JCWlmIChzdGEpIHsKLQkJCWludCBhbXBkdV9xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQotCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSkgJiYKLQkJCSAgICB0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKQotCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7Ci0JCX0KLQotCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlyZXR1cm4gcXVldWU7CiB9Ci0KLWludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKLXsKLQlpbnQgaTsKLQotCS8qIFhYWDogY3VycmVudGx5IGJyb2tlbiBkdWUgdG8gY2IvcmVxdWV1ZSB1c2UgKi8KLQlyZXR1cm4gLUVQRVJNOwotCi0JLyogcHJlcGFyZSB0aGUgZmlsdGVyIGFuZCBzYXZlIGl0IGZvciB0aGUgU1cgcXVldWUKLQkgKiBtYXRjaGluZyB0aGUgcmVjZWl2ZWQgSFcgcXVldWUgKi8KLQotCWlmICghbG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKLQkJcmV0dXJuIC1FUEVSTTsKLQotCS8qIHRyeSB0byBnZXQgYSBRZGlzYyBmcm9tIHRoZSBwb29sICovCi0JZm9yIChpID0gbG9jYWwtPmh3LnF1ZXVlczsgaSA8IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOyBpKyspCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBsb2NhbC0+cXVldWVfcG9vbCkpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGxvY2FsX3RvX2h3KGxvY2FsKSwgaSk7Ci0JCQlzdGEtPnRpZF90b190eF9xW3RpZF0gPSBpOwotCi0JCQkvKiBJRiB0aGVyZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHBhY2tldHMKLQkJCSAqIG9uIHRoaXMgdGlkIGZpcnN0IHdlIG5lZWQgdG8gZHJhaW4gdGhlbQotCQkJICogb24gdGhlIHByZXZpb3VzIHF1ZXVlCi0JCQkgKiBzaW5jZSBIVCBpcyBzdHJpY3QgaW4gb3JkZXIgKi8KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgImFsbG9jYXRlZCBhZ2dyZWdhdGlvbiBxdWV1ZSIKLQkJCQkJIiAlZCB0aWQgJWQgYWRkciAlcE0gcG9vbD0weCVsWFxuIiwKLQkJCQkJaSwgdGlkLCBzdGEtPnN0YS5hZGRyLAotCQkJCQlsb2NhbC0+cXVldWVfcG9vbFswXSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCi0JcmV0dXJuIC1FQUdBSU47Ci19Ci0KLS8qKgotICogdGhlIGNhbGxlciBuZWVkcyB0byBob2xkIG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIFgpLT5sb2NrCi0gKi8KLXZvaWQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCi0JCQkJICAgdTggcmVxdWV1ZSkKLXsKLQlpbnQgYWdnX3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQotCS8qIHJldHVybiB0aGUgcWRpc2MgdG8gdGhlIHBvb2wgKi8KLQljbGVhcl9iaXQoYWdnX3F1ZXVlLCBsb2NhbC0+cXVldWVfcG9vbCk7Ci0Jc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpOwotCi0JaWYgKHJlcXVldWUpIHsKLQkJaWVlZTgwMjExX3JlcXVldWUobG9jYWwsIGFnZ19xdWV1ZSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0JCXN0cnVjdCBRZGlzYyAqcTsKLQotCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBhZ2dfcXVldWUpOwotCQlxID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOwotCQlyb290X2xvY2sgPSBxZGlzY19sb2NrKHEpOwotCi0JCXNwaW5fbG9ja19iaChyb290X2xvY2spOwotCQlxZGlzY19yZXNldChxKTsKLQkJc3Bpbl91bmxvY2tfYmgocm9vdF9sb2NrKTsKLQl9Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSkKLXsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKLQlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwotCXUzMiBsZW47Ci0KLQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0KLQlxZGlzYyA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQlpZiAoIXFkaXNjIHx8ICFxZGlzYy0+ZGVxdWV1ZSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbGlzdCk7Ci0KLQlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socWRpc2MpOwotCXNwaW5fbG9jayhyb290X2xvY2spOwotCWZvciAobGVuID0gcWRpc2MtPnEucWxlbjsgbGVuID4gMDsgbGVuLS0pIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKLQotCQlpZiAoc2tiKQotCQkJX19za2JfcXVldWVfdGFpbCgmbGlzdCwgc2tiKTsKLQl9Ci0Jc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKLQotCWZvciAobGVuID0gbGlzdC5xbGVuOyBsZW4gPiAwOyBsZW4tLSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmbGlzdCk7Ci0JCXUxNiBuZXdfcXVldWU7Ci0KLQkJQlVHX09OKCFza2IpOwotCQluZXdfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKGxvY2FsLT5tZGV2LCBza2IpOwotCQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBuZXdfcXVldWUpOwotCi0JCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIG5ld19xdWV1ZSk7Ci0KLQotCQlxZGlzYyA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQkJcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHFkaXNjKTsKLQotCQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQkJcWRpc2NfZW5xdWV1ZV9yb290KHNrYiwgcWRpc2MpOwotCQlzcGluX3VubG9jayhyb290X2xvY2spOwotCX0KLQotb3V0X3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuaCBiL25ldC9tYWM4MDIxMS93bWUuaAppbmRleCBiYzYyZjI4Li43NTIwZDJlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmgKKysrIGIvbmV0L21hYzgwMjExL3dtZS5oCkBAIC0yMSwxMSArMjEsNSBAQAogZXh0ZXJuIGNvbnN0IGludCBpZWVlODAyXzFkX3RvX2FjWzhdOwogCiB1MTYgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCk7Ci12b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAotCQkJCSAgIHU4IHJlcXVldWUpOwotdm9pZCBpZWVlODAyMTFfcmVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHF1ZXVlKTsKIAogI2VuZGlmIC8qIF9XTUVfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5jIGIvbmV0L21hYzgwMjExL3dwYS5jCmluZGV4IDdhYTYzY2EuLjkxMDFiNDggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuYworKysgYi9uZXQvbWFjODAyMTEvd3BhLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDItMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xOSw2ICsyMCw3IEBACiAjaW5jbHVkZSAibWljaGFlbC5oIgogI2luY2x1ZGUgInRraXAuaCIKICNpbmNsdWRlICJhZXNfY2NtLmgiCisjaW5jbHVkZSAiYWVzX2NtYWMuaCIKICNpbmNsdWRlICJ3cGEuaCIKIAogaWVlZTgwMjExX3R4X3Jlc3VsdApAQCAtMjY2LDcgKzI2OCw3IEBACiAJCQkJaW50IGVuY3J5cHRlZCkKIHsKIAlfX2xlMTYgbWFza19mYzsKLQlpbnQgYTRfaW5jbHVkZWQ7CisJaW50IGE0X2luY2x1ZGVkLCBtZ210OwogCXU4IHFvc190aWQ7CiAJdTggKmJfMCwgKmFhZDsKIAl1MTYgZGF0YV9sZW4sIGxlbl9hOwpAQCAtMjc3LDEyICsyNzksMTUgQEAKIAlhYWQgPSBzY3JhdGNoICsgNCAqIEFFU19CTE9DS19MRU47CiAKIAkvKgotCSAqIE1hc2sgRkM6IHplcm8gc3VidHlwZSBiNCBiNSBiNgorCSAqIE1hc2sgRkM6IHplcm8gc3VidHlwZSBiNCBiNSBiNiAoaWYgbm90IG1nbXQpCiAJICogUmV0cnksIFB3ck1ndCwgTW9yZURhdGE7IHNldCBQcm90ZWN0ZWQKIAkgKi8KKwltZ210ID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKIAltYXNrX2ZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCW1hc2tfZmMgJj0gfmNwdV90b19sZTE2KDB4MDA3MCB8IElFRUU4MDIxMV9GQ1RMX1JFVFJZIHwKKwltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSB8CiAJCQkJSUVFRTgwMjExX0ZDVExfUE0gfCBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CisJaWYgKCFtZ210KQorCQltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNigweDAwNzApOwogCW1hc2tfZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKQEAgLTMwMCw4ICszMDUsMTAgQEAKIAogCS8qIEZpcnN0IGJsb2NrLCBiXzAgKi8KIAliXzBbMF0gPSAweDU5OyAvKiBmbGFnczogQWRhdGE6IDEsIE06IDAxMSwgTDogMDAxICovCi0JLyogTm9uY2U6IFFvUyBQcmlvcml0eSB8IEEyIHwgUE4gKi8KLQliXzBbMV0gPSBxb3NfdGlkOworCS8qIE5vbmNlOiBOb25jZSBGbGFncyB8IEEyIHwgUE4KKwkgKiBOb25jZSBGbGFnczogUHJpb3JpdHkgKGIwLi5iMykgfCBNYW5hZ2VtZW50IChiNCkgfCBSZXNlcnZlZCAoYjUuLmI3KQorCSAqLworCWJfMFsxXSA9IHFvc190aWQgfCAobWdtdCA8PCA0KTsKIAltZW1jcHkoJmJfMFsyXSwgaGRyLT5hZGRyMiwgRVRIX0FMRU4pOwogCW1lbWNweSgmYl8wWzhdLCBwbiwgQ0NNUF9QTl9MRU4pOwogCS8qIGwobSkgKi8KQEAgLTM2MCw5ICszNjcsMTQgQEAKIAlpbnQgaGRybGVuLCBsZW4sIHRhaWw7CiAJdTggKnBvcywgKnBuOwogCWludCBpOworCWJvb2wgc2tpcF9odzsKKworCXNraXBfaHcgPSAodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UKSAmJgorCQlpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgotCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSB7CisJICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikgJiYKKwkgICAgIXNraXBfaHcpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAKIAkJICogaGVhZGVyIG9yIE1JQyBmaWVsZHMgKi8KIAkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKQEAgLTM5Nyw3ICs0MDksNyBAQAogCiAJY2NtcF9wbjJoZHIocG9zLCBwbiwga2V5LT5jb25mLmtleWlkeCk7CiAKLQlpZiAoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7CisJaWYgKChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmICFza2lwX2h3KSB7CiAJCS8qIGh3YWNjZWwgLSB3aXRoIHByZWFsbG9jYXRlZCByb29tIGZvciBDQ01QIGhlYWRlciAqLwogCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOwogCQlyZXR1cm4gMDsKQEAgLTQ0Niw3ICs0NTgsOCBAQAogCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcikpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAogCWRhdGFfbGVuID0gc2tiLT5sZW4gLSBoZHJsZW4gLSBDQ01QX0hEUl9MRU4gLSBDQ01QX01JQ19MRU47CkBAIC00ODUsMyArNDk4LDEyNiBAQAogCiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQorCisKK3N0YXRpYyB2b2lkIGJpcF9hYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFhZCkKK3sKKwkvKiBCSVAgQUFEOiBGQyhtYXNrZWQpIHx8IEExIHx8IEEyIHx8IEEzICovCisKKwkvKiBGQyB0eXBlL3N1YnR5cGUgKi8KKwlhYWRbMF0gPSBza2ItPmRhdGFbMF07CisJLyogTWFzayBGQyBSZXRyeSwgUHdyTWd0LCBNb3JlRGF0YSBmbGFncyB0byB6ZXJvICovCisJYWFkWzFdID0gc2tiLT5kYXRhWzFdICYgfihCSVQoNCkgfCBCSVQoNSkgfCBCSVQoNikpOworCS8qIEExIHx8IEEyIHx8IEEzICovCisJbWVtY3B5KGFhZCArIDIsIHNrYi0+ZGF0YSArIDQsIDMgKiBFVEhfQUxFTik7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGJpcF9pcG5fc3dhcCh1OCAqZCwgY29uc3QgdTggKnMpCit7CisJKmQrKyA9IHNbNV07CisJKmQrKyA9IHNbNF07CisJKmQrKyA9IHNbM107CisJKmQrKyA9IHNbMl07CisJKmQrKyA9IHNbMV07CisJKmQgPSBzWzBdOworfQorCisKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gdHgtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisJdTggKnBuLCBhYWRbMjBdOworCWludCBpOworCisJaWYgKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKKwkJLyogaHdhY2NlbCAqLworCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IHNpemVvZigqbW1pZSkpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKm1taWUpKTsKKwltbWllLT5lbGVtZW50X2lkID0gV0xBTl9FSURfTU1JRTsKKwltbWllLT5sZW5ndGggPSBzaXplb2YoKm1taWUpIC0gMjsKKwltbWllLT5rZXlfaWQgPSBjcHVfdG9fbGUxNihrZXktPmNvbmYua2V5aWR4KTsKKworCS8qIFBOID0gUE4gKyAxICovCisJcG4gPSBrZXktPnUuYWVzX2NtYWMudHhfcG47CisKKwlmb3IgKGkgPSBzaXplb2Yoa2V5LT51LmFlc19jbWFjLnR4X3BuKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXBuW2ldKys7CisJCWlmIChwbltpXSkKKwkJCWJyZWFrOworCX0KKwliaXBfaXBuX3N3YXAobW1pZS0+c2VxdWVuY2VfbnVtYmVyLCBwbik7CisKKwliaXBfYWFkKHNrYiwgYWFkKTsKKworCS8qCisJICogTUlDID0gQUVTLTEyOC1DTUFDKElHVEssIEFBRCB8fCBNYW5hZ2VtZW50IEZyYW1lIEJvZHkgfHwgTU1JRSwgNjQpCisJICovCisJaWVlZTgwMjExX2Flc19jbWFjKGtleS0+dS5hZXNfY21hYy50Zm0sIGtleS0+dS5hZXNfY21hYy50eF9jcnlwdG9fYnVmLAorCQkJICAgYWFkLCBza2ItPmRhdGEgKyAyNCwgc2tiLT5sZW4gLSAyNCwgbW1pZS0+bWljKTsKKworCXJldHVybiBUWF9DT05USU5VRTsKK30KKworCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gcngtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisJdTggYWFkWzIwXSwgbWljWzhdLCBpcG5bNl07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICgocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCSAgICAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCArIHNpemVvZigqbW1pZSkpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCisJbW1pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX21taWUgKikKKwkJKHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisJaWYgKG1taWUtPmVsZW1lbnRfaWQgIT0gV0xBTl9FSURfTU1JRSB8fAorCSAgICBtbWllLT5sZW5ndGggIT0gc2l6ZW9mKCptbWllKSAtIDIpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOyAvKiBJbnZhbGlkIE1NSUUgKi8KKworCWJpcF9pcG5fc3dhcChpcG4sIG1taWUtPnNlcXVlbmNlX251bWJlcik7CisKKwlpZiAobWVtY21wKGlwbiwga2V5LT51LmFlc19jbWFjLnJ4X3BuLCA2KSA8PSAwKSB7CisJCWtleS0+dS5hZXNfY21hYy5yZXBsYXlzKys7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCX0KKworCWlmICghKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpIHsKKwkJLyogaGFyZHdhcmUgZGlkbid0IGRlY3J5cHQvdmVyaWZ5IE1JQyAqLworCQliaXBfYWFkKHNrYiwgYWFkKTsKKwkJaWVlZTgwMjExX2Flc19jbWFjKGtleS0+dS5hZXNfY21hYy50Zm0sCisJCQkJICAga2V5LT51LmFlc19jbWFjLnJ4X2NyeXB0b19idWYsIGFhZCwKKwkJCQkgICBza2ItPmRhdGEgKyAyNCwgc2tiLT5sZW4gLSAyNCwgbWljKTsKKwkJaWYgKG1lbWNtcChtaWMsIG1taWUtPm1pYywgc2l6ZW9mKG1taWUtPm1pYykpICE9IDApIHsKKwkJCWtleS0+dS5hZXNfY21hYy5pY3ZlcnJvcnMrKzsKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCQl9CisJfQorCisJbWVtY3B5KGtleS0+dS5hZXNfY21hYy5yeF9wbiwgaXBuLCA2KTsKKworCS8qIFJlbW92ZSBNTUlFICovCisJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5oIGIvbmV0L21hYzgwMjExL3dwYS5oCmluZGV4IGQ0MmQyMjEuLmJhYmEwNjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuaAorKysgYi9uZXQvbWFjODAyMTEvd3BhLmgKQEAgLTI4LDQgKzI4LDkgQEAKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpOwogCitpZWVlODAyMTFfdHhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CisKICNlbmRpZiAvKiBXUEFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGMyYmFjOWMuLjI1NjJkMDUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTM1Nyw2ICszNTcsNDUgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hMCisJdHJpc3RhdGUgJyJITCIgaG9wbGltaXQgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgSVA2X05GX01BTkdMRQorCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCVRoaXMgb3B0aW9uIGFkZHMgdGhlICJITCIgKGZvciBJUHY2KSBhbmQgIlRUTCIgKGZvciBJUHY0KQorCXRhcmdldHMsIHdoaWNoIGVuYWJsZSB0aGUgdXNlciB0byBjaGFuZ2UgdGhlCisJaG9wbGltaXQvdGltZS10by1saXZlIHZhbHVlIG9mIHRoZSBJUCBoZWFkZXIuCisKKwlXaGlsZSBpdCBpcyBzYWZlIHRvIGRlY3JlbWVudCB0aGUgaG9wbGltaXQvVFRMIHZhbHVlLCB0aGUKKwltb2R1bGVzIGFsc28gYWxsb3cgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIGhvcGxpbWl0IHZhbHVlIG9mCisJdGhlIGhlYWRlciB0byBhcmJpdHJhcnkgdmFsdWVzLiBUaGlzIGlzIEVYVFJFTUVMWSBEQU5HRVJPVVMKKwlzaW5jZSB5b3UgY2FuIGVhc2lseSBjcmVhdGUgaW1tb3J0YWwgcGFja2V0cyB0aGF0IGxvb3AKKwlmb3JldmVyIG9uIHRoZSBuZXR3b3JrLgorCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRUQKKwl0cmlzdGF0ZSAnIkxFRCIgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEgYExFRCcgdGFyZ2V0LCB3aGljaCBhbGxvd3MgeW91IHRvIGJsaW5rIExFRHMgaW4KKwkgIHJlc3BvbnNlIHRvIHBhcnRpY3VsYXIgcGFja2V0cyBwYXNzaW5nIHRocm91Z2ggeW91ciBtYWNoaW5lLgorCisJICBUaGlzIGNhbiBiZSB1c2VkIHRvIHR1cm4gYSBzcGFyZSBMRUQgaW50byBhIG5ldHdvcmsgYWN0aXZpdHkgTEVELAorCSAgd2hpY2ggb25seSBmbGFzaGVzIGluIHJlc3BvbnNlIHRvIEZUUCB0cmFuc2ZlcnMsIGZvciBleGFtcGxlLiAgT3IKKwkgIHlvdSBjb3VsZCBoYXZlIGFuIExFRCB3aGljaCBsaWdodHMgdXAgZm9yIGEgbWludXRlIG9yIHR3byBldmVyeSB0aW1lCisJICBzb21lYm9keSBjb25uZWN0cyB0byB5b3VyIG1hY2hpbmUgdmlhIFNTSC4KKworCSAgWW91IHdpbGwgbmVlZCBzdXBwb3J0IGZvciB0aGUgImxlZCIgY2xhc3MgdG8gbWFrZSB0aGlzIHdvcmsuCisKKwkgIFRvIGNyZWF0ZSBhbiBMRUQgdHJpZ2dlciBmb3IgaW5jb21pbmcgU1NIIHRyYWZmaWM6CisJICAgIGlwdGFibGVzIC1BIElOUFVUIC1wIHRjcCAtLWRwb3J0IDIyIC1qIExFRCAtLWxlZC10cmlnZ2VyLWlkIHNzaCAtLWxlZC1kZWxheSAxMDAwCisKKwkgIFRoZW4gYXR0YWNoIHRoZSBuZXcgdHJpZ2dlciB0byBhbiBMRUQgb24geW91ciBzeXN0ZW06CisJICAgIGVjaG8gbmV0ZmlsdGVyLXNzaCA+IC9zeXMvY2xhc3MvbGVkcy88bGVkbmFtZT4vdHJpZ2dlcgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgTEVEcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0sIHNlZQorCSAgRG9jdW1lbnRhdGlvbi9sZWRzLWNsYXNzLnR4dAorCiBjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLCiAJdHJpc3RhdGUgJyJNQVJLIiB0YXJnZXQgc3VwcG9ydCcKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KQEAgLTQ4OCw2ICs1MjcsMjIgQEAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSAiVENQT1BUU1RSSVAiIHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBzdHJpcAogCSAgVENQIG9wdGlvbnMgZnJvbSBUQ1AgcGFja2V0cy4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSCisJdHJpc3RhdGUgJyJjbHVzdGVyIiBtYXRjaCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGJ1aWxkIHdvcmstbG9hZC1zaGFyaW5nIGNsdXN0ZXJzIG9mCisJICBuZXR3b3JrIHNlcnZlcnMvc3RhdGVmdWwgZmlyZXdhbGxzIHdpdGhvdXQgaGF2aW5nIGEgZGVkaWNhdGVkCisJICBsb2FkLWJhbGFuY2luZyByb3V0ZXIvc2VydmVyL3N3aXRjaC4gQmFzaWNhbGx5LCB0aGlzIG1hdGNoIHJldHVybnMKKwkgIHRydWUgd2hlbiB0aGUgcGFja2V0IG11c3QgYmUgaGFuZGxlZCBieSB0aGlzIGNsdXN0ZXIgbm9kZS4gVGh1cywKKwkgIGFsbCBub2RlcyBzZWUgYWxsIHBhY2tldHMgYW5kIHRoaXMgbWF0Y2ggZGVjaWRlcyB3aGljaCBub2RlIGhhbmRsZXMKKwkgIHdoYXQgcGFja2V0cy4gVGhlIHdvcmstbG9hZCBzaGFyaW5nIGFsZ29yaXRobSBpcyBiYXNlZCBvbiBzb3VyY2UKKwkgIGFkZHJlc3MgaGFzaGluZy4KKworCSAgSWYgeW91IHNheSBZIG9yIE0gaGVyZSwgdHJ5IGBpcHRhYmxlcyAtbSBjbHVzdGVyIC0taGVscGAgZm9yCisJICBtb3JlIGluZm9ybWF0aW9uLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQKIAl0cmlzdGF0ZSAgJyJjb21tZW50IiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECkBAIC02MDUsNiArNjYwLDE0IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hMCisJdHJpc3RhdGUgJyJobCIgaG9wbGltaXQvVFRMIG1hdGNoIHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwktLS1oZWxwLS0tCisJSEwgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBob3BsaW1pdAorCWluIHRoZSBJUHY2IGhlYWRlciwgb3IgdGhlIHRpbWUtdG8tbGl2ZSBmaWVsZCBpbiB0aGUgSVB2NAorCWhlYWRlciBvZiB0aGUgcGFja2V0LgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UKIAl0cmlzdGF0ZSAnImlwcmFuZ2UiIGFkZHJlc3MgcmFuZ2UgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggZGEzZDkwOS4uNjI4MjA2MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC00NSw2ICs0NSw4IEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSykgKz0geHRfQ09OTk1BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUkspICs9IHh0X0NPTk5TRUNNQVJLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1ApICs9IHh0X0RTQ1Aubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwpICs9IHh0X0hMLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRCkgKz0geHRfTEVELm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUkspICs9IHh0X01BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cpICs9IHh0X05GTE9HLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUpICs9IHh0X05GUVVFVUUubwpAQCAtNTcsNiArNTksNyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpICs9IHh0X1RSQUNFLm8KIAogIyBtYXRjaGVzCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIpICs9IHh0X2NsdXN0ZXIubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UKSArPSB4dF9jb21tZW50Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTKSArPSB4dF9jb25uYnl0ZXMubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQpICs9IHh0X2Nvbm5saW1pdC5vCkBAIC02Nyw2ICs3MCw3IEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCkgKz0geHRfZXNwLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUKSArPSB4dF9oYXNobGltaXQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIpICs9IHh0X2hlbHBlci5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMKSArPSB4dF9obC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UpICs9IHh0X2lwcmFuZ2Uubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEgpICs9IHh0X2xlbmd0aC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUKSArPSB4dF9saW1pdC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IGE5MGFjODMuLjViYjM0NzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0xNzQsNyArMTc0LDYgQEAKIAkJCSAgICAgb3V0ZGV2LCAmZWxlbSwgb2tmbiwgaG9va190aHJlc2gpOwogCWlmICh2ZXJkaWN0ID09IE5GX0FDQ0VQVCB8fCB2ZXJkaWN0ID09IE5GX1NUT1ApIHsKIAkJcmV0ID0gMTsKLQkJZ290byB1bmxvY2s7CiAJfSBlbHNlIGlmICh2ZXJkaWN0ID09IE5GX0RST1ApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldCA9IC1FUEVSTTsKQEAgLTE4Myw3ICsxODIsNiBAQAogCQkJICAgICAgdmVyZGljdCA+PiBORl9WRVJESUNUX0JJVFMpKQogCQkJZ290byBuZXh0X2hvb2s7CiAJfQotdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCA2YmU1ZDRlLi41YzQ4Mzc4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTE0OSw4ICsxNDksOCBAQAogLyogbXVsdGljYXN0IGFkZHIgKi8KIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gbWNhc3RfYWRkciA9IHsKIAkuc2luX2ZhbWlseQkJPSBBRl9JTkVULAotCS5zaW5fcG9ydAkJPSBfX2NvbnN0YW50X2h0b25zKElQX1ZTX1NZTkNfUE9SVCksCi0JLnNpbl9hZGRyLnNfYWRkcgk9IF9fY29uc3RhbnRfaHRvbmwoSVBfVlNfU1lOQ19HUk9VUCksCisJLnNpbl9wb3J0CQk9IGNwdV90b19iZTE2KElQX1ZTX1NZTkNfUE9SVCksCisJLnNpbl9hZGRyLnNfYWRkcgk9IGNwdV90b19iZTMyKElQX1ZTX1NZTkNfR1JPVVApLAogfTsKIAogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IDRmOGZjZjQuLjA3ZDlkODggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLmhlbHAJCQk9IGFtYW5kYV9oZWxwLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygxMDA4MCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKQEAgLTE4Niw3ICsxODYsNyBAQAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkuaGVscAkJCT0gYW1hbmRhX2hlbHAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygxMDA4MCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBmNDkzNWUzLi5kZmI0NDdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC01NCw3ICs1NCw3IEBACiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOwogCi1pbnQgbmZfY29ubnRyYWNrX21heCBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19tYXggX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19tYXgpOwogCiBzdHJ1Y3QgbmZfY29ubiBuZl9jb25udHJhY2tfdW50cmFja2VkIF9fcmVhZF9tb3N0bHk7CkBAIC00NzIsNyArNDcyLDggQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAlpZiAodW5saWtlbHkoIW5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsIDQpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsCisJCQkJc2l6ZW9mKG5mX2Nvbm50cmFja19oYXNoX3JuZCkpOwogCQluZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZCA9IDE7CiAJfQogCkBAIC01MTYsMTYgKzUxNywxNyBAQAogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5mX2Nvbm4sIHJjdSk7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKIAogCW5mX2N0X2V4dF9mcmVlKGN0KTsKIAlrbWVtX2NhY2hlX2ZyZWUobmZfY29ubnRyYWNrX2NhY2hlcCwgY3QpOwotCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwogfQogCiB2b2lkIG5mX2Nvbm50cmFja19mcmVlKHN0cnVjdCBuZl9jb25uICpjdCkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCiAJbmZfY3RfZXh0X2Rlc3Ryb3koY3QpOworCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwogCWNhbGxfcmN1KCZjdC0+cmN1LCBuZl9jb25udHJhY2tfZnJlZV9yY3UpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2ZyZWUpOwpAQCAtNzMzLDYgKzczNSw4IEBACiAJCW5mX2Nvbm50cmFja19wdXQoc2tiLT5uZmN0KTsKIAkJc2tiLT5uZmN0ID0gTlVMTDsKIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7CisJCWlmIChyZXQgPT0gLU5GX0RST1ApCisJCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBkcm9wKTsKIAkJcmV0dXJuIC1yZXQ7CiAJfQogCkBAIC0xMTAzLDcgKzExMDcsNyBAQAogCiAJLyogV2UgaGF2ZSB0byByZWhhaHMgZm9yIHRoZSBuZXcgdGFibGUgYW55d2F5LCBzbyB3ZSBhbHNvIGNhbgogCSAqIHVzZSBhIG5ld3JhbmRvbSBzZWVkICovCi0JZ2V0X3JhbmRvbV9ieXRlcygmcm5kLCA0KTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZybmQsIHNpemVvZihybmQpKTsKIAogCS8qIExvb2t1cHMgaW4gdGhlIG9sZCBoYXNoIG1pZ2h0IGhhcHBlbiBpbiBwYXJhbGxlbCwgd2hpY2ggbWVhbnMgd2UKIAkgKiBtaWdodCBnZXQgZmFsc2UgbmVnYXRpdmVzIGR1cmluZyBjb25uZWN0aW9uIGxvb2t1cC4gTmV3IGNvbm5lY3Rpb25zCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IDNhOGEzNGEuLjM1N2JhMzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCkBAIC03Miw3ICs3Miw4IEBACiAJdW5zaWduZWQgaW50IGhhc2g7CiAKIAlpZiAodW5saWtlbHkoIW5mX2N0X2V4cGVjdF9oYXNoX3JuZF9pbml0dGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jdF9leHBlY3RfaGFzaF9ybmQsIDQpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jdF9leHBlY3RfaGFzaF9ybmQsCisJCQkJIHNpemVvZihuZl9jdF9leHBlY3RfaGFzaF9ybmQpKTsKIAkJbmZfY3RfZXhwZWN0X2hhc2hfcm5kX2luaXR0ZWQgPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCA2ODdiZDYzLi42NjM2OTQ5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKIAkJLm5hbWUJCQk9ICJRLjkzMSIsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFE5MzFfUE9SVCksCisJCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFE5MzFfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKIAkJLmhlbHAJCQk9IHE5MzFfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnE5MzFfZXhwX3BvbGljeSwKQEAgLTExNzYsNyArMTE3Niw3IEBACiAJCS5uYW1lCQkJPSAiUS45MzEiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCi0JCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUTkzMV9QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gY3B1X3RvX2JlMTYoUTkzMV9QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVENQLAogCQkuaGVscAkJCT0gcTkzMV9oZWxwLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmcTkzMV9leHBfcG9saWN5LApAQCAtMTc0MSw3ICsxNzQxLDcgQEAKIAkJLm5hbWUJCQk9ICJSQVMiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFJBU19QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuaGVscAkJCT0gcmFzX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZyYXNfZXhwX3BvbGljeSwKQEAgLTE3NTAsNyArMTc1MCw3IEBACiAJCS5uYW1lCQkJPSAiUkFTIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQ2LAotCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFJBU19QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoUkFTX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCiAJCS5oZWxwCQkJPSByYXNfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnJhc19leHBfcG9saWN5LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCmluZGV4IDVhZjQyNzMuLjhhMzg3NWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGhlbHBlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQkJPSAibmV0Ymlvcy1ucyIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhOTUJEX1BPUlQpLAorCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KE5NQkRfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJLmhlbHAJCQk9IGhlbHAsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggZWQ2ZDg3My4uN2ExNmJkNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtNTE4LDYgKzUxOCw3IEBACiBubGFfcHV0X2ZhaWx1cmU6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiBubG1zZ19mYWlsdXJlOgorCW5mbmV0bGlua19zZXRfZXJyKDAsIGdyb3VwLCAtRU5PQlVGUyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtNTk5LDcgKzYwMCw4IEBACiAKIAlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfSVBfTUFYLCBhdHRyLCBOVUxMKTsKIAotCWwzcHJvdG8gPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQodHVwbGUtPnNyYy5sM251bSk7CiAKIAlpZiAobGlrZWx5KGwzcHJvdG8tPm5sYXR0cl90b190dXBsZSkpIHsKIAkJcmV0ID0gbmxhX3ZhbGlkYXRlX25lc3RlZChhdHRyLCBDVEFfSVBfTUFYLApAQCAtNjA4LDcgKzYxMCw3IEBACiAJCQlyZXQgPSBsM3Byb3RvLT5ubGF0dHJfdG9fdHVwbGUodGIsIHR1cGxlKTsKIAl9CiAKLQluZl9jdF9sM3Byb3RvX3B1dChsM3Byb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02MzMsNyArNjM1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdHVwbGUtPmRzdC5wcm90b251bSA9IG5sYV9nZXRfdTgodGJbQ1RBX1BST1RPX05VTV0pOwogCi0JbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CisJcmN1X3JlYWRfbG9jaygpOworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKIAogCWlmIChsaWtlbHkobDRwcm90by0+bmxhdHRyX3RvX3R1cGxlKSkgewogCQlyZXQgPSBubGFfdmFsaWRhdGVfbmVzdGVkKGF0dHIsIENUQV9QUk9UT19NQVgsCkBAIC02NDIsNyArNjQ1LDcgQEAKIAkJCXJldCA9IGw0cHJvdG8tPm5sYXR0cl90b190dXBsZSh0YiwgdHVwbGUpOwogCX0KIAotCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk4OSwxMCArOTkyLDExIEBACiAKIAlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9JTkZPX01BWCwgYXR0ciwgTlVMTCk7CiAKLQlsNHByb3RvID0gbmZfY3RfbDRwcm90b19maW5kX2dldChuZl9jdF9sM251bShjdCksIG5mX2N0X3Byb3RvbnVtKGN0KSk7CisJcmN1X3JlYWRfbG9jaygpOworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZChuZl9jdF9sM251bShjdCksIG5mX2N0X3Byb3RvbnVtKGN0KSk7CiAJaWYgKGw0cHJvdG8tPmZyb21fbmxhdHRyKQogCQllcnIgPSBsNHByb3RvLT5mcm9tX25sYXR0cih0YiwgY3QpOwotCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTEwNjIsNiArMTA2NiwxMCBAQAogewogCWludCBlcnI7CiAKKwkvKiBvbmx5IGFsbG93IE5BVCBjaGFuZ2VzIGFuZCBtYXN0ZXIgYXNzaWduYXRpb24gZm9yIG5ldyBjb25udHJhY2tzICovCisJaWYgKGNkYVtDVEFfTkFUX1NSQ10gfHwgY2RhW0NUQV9OQVRfRFNUXSB8fCBjZGFbQ1RBX1RVUExFX01BU1RFUl0pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWlmIChjZGFbQ1RBX0hFTFBdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKGN0LCBjZGEpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTExMjQsMTMgKzExMzIsMTEgQEAKIAkJCQkgIHJlcG9ydCk7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqCiBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhzdHJ1Y3QgbmxhdHRyICpjZGFbXSwKIAkJCSAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm90dXBsZSwKIAkJCSAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnJ0dXBsZSwKLQkJCSAgIHN0cnVjdCBuZl9jb25uICptYXN0ZXJfY3QsCi0JCQkgICB1MzIgcGlkLAotCQkJICAgaW50IHJlcG9ydCkKKwkJCSAgIHU4IHUzKQogewogCXN0cnVjdCBuZl9jb25uICpjdDsKIAlpbnQgZXJyID0gLUVJTlZBTDsKQEAgLTExMzgsMTAgKzExNDQsMTAgQEAKIAogCWN0ID0gbmZfY29ubnRyYWNrX2FsbG9jKCZpbml0X25ldCwgb3R1cGxlLCBydHVwbGUsIEdGUF9BVE9NSUMpOwogCWlmIChJU19FUlIoY3QpKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpZiAoIWNkYVtDVEFfVElNRU9VVF0pCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycjE7CiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1RJTUVPVVRdKSk7CiAKIAljdC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIGN0LT50aW1lb3V0LmV4cGlyZXMgKiBIWjsKQEAgLTExNTIsMTAgKzExNTgsOCBAQAogIAkJY2hhciAqaGVscG5hbWU7CiAgCiAgCQllcnIgPSBjdG5ldGxpbmtfcGFyc2VfaGVscChjZGFbQ1RBX0hFTFBdLCAmaGVscG5hbWUpOwotIAkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKyAJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCiAJCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kX2J5bmFtZShoZWxwbmFtZSk7CiAJCWlmIChoZWxwZXIgPT0gTlVMTCkgewpAQCAtMTE2MywyOCArMTE2NywyNiBAQAogI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlpZiAocmVxdWVzdF9tb2R1bGUoIm5mY3QtaGVscGVyLSVzIiwgaGVscG5hbWUpIDwgMCkgewogCQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyMTsKIAkJCX0KIAogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKIAkJCWlmIChoZWxwZXIpIHsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQllcnIgPSAtRUFHQUlOOwotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyMjsKIAkJCX0KIAkJCXJjdV9yZWFkX3VubG9jaygpOwogI2VuZGlmCiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnIxOwogCQl9IGVsc2UgewogCQkJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKIAogCQkJaGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKIAkJCWlmIChoZWxwID09IE5VTEwpIHsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyMjsKIAkJCX0KIAogCQkJLyogbm90IGluIGhhc2ggdGFibGUgeWV0IHNvIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgKi8KQEAgLTExOTMsNDQgKzExOTUsMzQgQEAKIAl9IGVsc2UgewogCQkvKiB0cnkgYW4gaW1wbGljaXQgaGVscGVyIGFzc2lnbmF0aW9uICovCiAJCWVyciA9IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIEdGUF9BVE9NSUMpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAKIAlpZiAoY2RhW0NUQV9TVEFUVVNdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2Vfc3RhdHVzKGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAKIAlpZiAoY2RhW0NUQV9OQVRfU1JDXSB8fCBjZGFbQ1RBX05BVF9EU1RdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfbmF0KGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAKICNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogCWlmIChjZGFbQ1RBX05BVF9TRVFfQURKX09SSUddIHx8IGNkYVtDVEFfTkFUX1NFUV9BREpfUkVQTFldKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfbmF0X3NlcV9hZGooY3QsIGNkYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KICNlbmRpZgogCiAJaWYgKGNkYVtDVEFfUFJPVE9JTkZPXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3Byb3RvaW5mbyhjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJbmZfY3RfYWNjdF9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKQEAgLTEyNDEsMjMgKzEyMzMsMzcgQEAKICNlbmRpZgogCiAJLyogc2V0dXAgbWFzdGVyIGNvbm50cmFjazogdGhpcyBpcyBhIGNvbmZpcm1lZCBleHBlY3RhdGlvbiAqLwotCWlmIChtYXN0ZXJfY3QpIHsKKwlpZiAoY2RhW0NUQV9UVVBMRV9NQVNURVJdKSB7CisJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyOworCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKm1hc3Rlcl9oOworCQlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyX2N0OworCisJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZtYXN0ZXIsIENUQV9UVVBMRV9NQVNURVIsIHUzKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CisKKwkJbWFzdGVyX2ggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJm1hc3Rlcik7CisJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PRU5UOworCQkJZ290byBlcnIyOworCQl9CisJCW1hc3Rlcl9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2sobWFzdGVyX2gpOworCQluZl9jb25udHJhY2tfZ2V0KCZtYXN0ZXJfY3QtPmN0X2dlbmVyYWwpOwogCQlfX3NldF9iaXQoSVBTX0VYUEVDVEVEX0JJVCwgJmN0LT5zdGF0dXMpOwogCQljdC0+bWFzdGVyID0gbWFzdGVyX2N0OwogCX0KIAotCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKIAlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAluZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QpOwogCXJjdV9yZWFkX3VubG9jaygpOwotCWN0bmV0bGlua19ldmVudF9yZXBvcnQoY3QsIHBpZCwgcmVwb3J0KTsKLQluZl9jdF9wdXQoY3QpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGN0OwogCi1lcnI6CitlcnIyOgorCXJjdV9yZWFkX3VubG9jaygpOworZXJyMToKIAluZl9jb25udHJhY2tfZnJlZShjdCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjg5LDM4ICsxMjk1LDI1IEBACiAJCWggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJnJ0dXBsZSk7CiAKIAlpZiAoaCA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyOwotCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKm1hc3Rlcl9oID0gTlVMTDsKLQkJc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdCA9IE5VTEw7CisJCWVyciA9IC1FTk9FTlQ7CisJCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKSB7CisJCQlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKLQkJaWYgKGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkgewotCQkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwKLQkJCQkJCSAgICAmbWFzdGVyLAotCQkJCQkJICAgIENUQV9UVVBMRV9NQVNURVIsCi0JCQkJCQkgICAgdTMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJZ290byBvdXRfdW5sb2NrOwotCi0JCQltYXN0ZXJfaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmbWFzdGVyKTsKLQkJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7Ci0JCQkJZXJyID0gLUVOT0VOVDsKKwkJCWN0ID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soY2RhLCAmb3R1cGxlLAorCQkJCQkJCSZydHVwbGUsIHUzKTsKKwkJCWlmIChJU19FUlIoY3QpKSB7CisJCQkJZXJyID0gUFRSX0VSUihjdCk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQotCQkJbWFzdGVyX2N0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhtYXN0ZXJfaCk7Ci0JCQluZl9jb25udHJhY2tfZ2V0KCZtYXN0ZXJfY3QtPmN0X2dlbmVyYWwpOwotCQl9Ci0KLQkJZXJyID0gLUVOT0VOVDsKLQkJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9DUkVBVEUpCi0JCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjZGEsCi0JCQkJCQkJICZvdHVwbGUsCi0JCQkJCQkJICZydHVwbGUsCi0JCQkJCQkJIG1hc3Rlcl9jdCwKLQkJCQkJCQkgTkVUTElOS19DQihza2IpLnBpZCwKLQkJCQkJCQkgbmxtc2dfcmVwb3J0KG5saCkpOwotCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCQlpZiAoZXJyIDwgMCAmJiBtYXN0ZXJfY3QpCi0JCQluZl9jdF9wdXQobWFzdGVyX2N0KTsKKwkJCWVyciA9IDA7CisJCQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisJCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQkJY3RuZXRsaW5rX2V2ZW50X3JlcG9ydChjdCwKKwkJCQkJICAgICAgIE5FVExJTktfQ0Ioc2tiKS5waWQsCisJCQkJCSAgICAgICBubG1zZ19yZXBvcnQobmxoKSk7CisJCQluZl9jdF9wdXQoY3QpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMzMyLDE3ICsxMzI1LDYgQEAKIAlpZiAoIShubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRVhDTCkpIHsKIAkJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAotCQkvKiB3ZSBvbmx5IGFsbG93IG5hdCBjb25maWcgZm9yIG5ldyBjb25udHJhY2tzICovCi0JCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCS8qIGNhbid0IGxpbmsgYW4gZXhpc3RpbmcgY29ubnRyYWNrIHRvIGEgbWFzdGVyICovCi0JCWlmIChjZGFbQ1RBX1RVUExFX01BU1RFUl0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soY3QsIGNkYSk7CiAJCWlmIChlcnIgPT0gMCkgewogCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwpAQCAtMTUzMyw2ICsxNTE1LDcgQEAKIG5sYV9wdXRfZmFpbHVyZToKIAlyY3VfcmVhZF91bmxvY2soKTsKIG5sbXNnX2ZhaWx1cmU6CisJbmZuZXRsaW5rX3NldF9lcnIoMCwgMCwgLUVOT0JVRlMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCA5ZTE2OWVmLi4zODA3YWM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCkBAIC02Niw3ICs2Niw3IEBACiAJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKTsKIAotI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCiAvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIG5hbWVzICovCiBjb25zdCBjaGFyICpjb25zdCBwcHRwX21zZ19uYW1lW10gPSB7CiAJIlVOS05PV05fTUVTU0FHRSIsCkBAIC01OTEsNyArNTkxLDcgQEAKIAkubmFtZQkJCT0gInBwdHAiLAogCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhQUFRQX0NPTlRST0xfUE9SVCksCisJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gY3B1X3RvX2JlMTYoUFBUUF9DT05UUk9MX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKIAkuaGVscAkJCT0gY29ubnRyYWNrX3BwdHBfaGVscCwKIAkuZGVzdHJveQkJPSBwcHRwX2Rlc3Ryb3lfc2libGluZ3MsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYwppbmRleCA1OTJkNzMzLi45YTYyYjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKQEAgLTc0LDI3ICs3NCw2IEBACiAKIC8qIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgcmV0dXJuIGEgdmFsaWQgcHJvdG9jb2wgaGVscGVyLCBzaW5jZQogICogaXQgZmFsbHMgYmFjayB0byBnZW5lcmljX3Byb3RvY29sICovCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgotbmZfY3RfbDRwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgbDRwcm90bykKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnA7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcCA9IF9fbmZfY3RfbDRwcm90b19maW5kKGwzcHJvdG8sIGw0cHJvdG8pOwotCWlmICghdHJ5X21vZHVsZV9nZXQocC0+bWUpKQotCQlwID0gJm5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWM7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fZmluZF9nZXQpOwotCi12b2lkIG5mX2N0X2w0cHJvdG9fcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcCkKLXsKLQltb2R1bGVfcHV0KHAtPm1lKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fcHV0KTsKLQogc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICoKIG5mX2N0X2wzcHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8pCiB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggOGZjZjE3Ni4uZDNkNWE3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RjY3AuaD4KIAorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKwogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CkBAIC0yMyw4ICsyNiw2IEBACiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKGRjY3BfbG9jayk7CiAKLXN0YXRpYyBpbnQgbmZfY3RfZGNjcF9sb29zZSBfX3JlYWRfbW9zdGx5ID0gMTsKLQogLyogVGltZW91dHMgYXJlIGJhc2VkIG9uIHZhbHVlcyBmcm9tIFJGQzQzNDA6CiAgKgogICogLSBSRVFVRVNUOgpAQCAtNzIsMTYgKzczLDYgQEAKIAogI2RlZmluZSBEQ0NQX01TTCAoMiAqIDYwICogSFopCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGNjcF90aW1lb3V0W0NUX0RDQ1BfTUFYICsgMV0gX19yZWFkX21vc3RseSA9IHsKLQlbQ1RfRENDUF9SRVFVRVNUXQk9IDIgKiBEQ0NQX01TTCwKLQlbQ1RfRENDUF9SRVNQT05EXQk9IDQgKiBEQ0NQX01TTCwKLQlbQ1RfRENDUF9QQVJUT1BFTl0JPSA0ICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfT1BFTl0JCT0gMTIgKiAzNjAwICogSFosCi0JW0NUX0RDQ1BfQ0xPU0VSRVFdCT0gNjQgKiBIWiwKLQlbQ1RfRENDUF9DTE9TSU5HXQk9IDY0ICogSFosCi0JW0NUX0RDQ1BfVElNRVdBSVRdCT0gMiAqIERDQ1BfTVNMLAotfTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkY2NwX3N0YXRlX25hbWVzW10gPSB7CiAJW0NUX0RDQ1BfTk9ORV0JCT0gIk5PTkUiLAogCVtDVF9EQ0NQX1JFUVVFU1RdCT0gIlJFUVVFU1QiLApAQCAtMzkzLDYgKzM4NCwyMiBAQAogCX0sCiB9OwogCisvKiB0aGlzIG1vZHVsZSBwZXItbmV0IHNwZWNpZmljcyAqLworc3RhdGljIGludCBkY2NwX25ldF9pZDsKK3N0cnVjdCBkY2NwX25ldCB7CisJaW50IGRjY3BfbG9vc2U7CisJdW5zaWduZWQgaW50IGRjY3BfdGltZW91dFtDVF9EQ0NQX01BWCArIDFdOworI2lmZGVmIENPTkZJR19TWVNDVEwKKwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hlYWRlcjsKKwlzdHJ1Y3QgY3RsX3RhYmxlICpzeXNjdGxfdGFibGU7CisjZW5kaWYKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfbmV0ICpkY2NwX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgZGNjcF9uZXRfaWQpOworfQorCiBzdGF0aWMgYm9vbCBkY2NwX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewpAQCAtNDE5LDYgKzQyNiw3IEBACiAJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKKwlzdHJ1Y3QgZGNjcF9uZXQgKmRuOwogCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKIAljb25zdCBjaGFyICptc2c7CiAJdV9pbnQ4X3Qgc3RhdGU7CkBAIC00MjksNyArNDM3LDggQEAKIAlzdGF0ZSA9IGRjY3Bfc3RhdGVfdGFibGVbQ1RfRENDUF9ST0xFX0NMSUVOVF1bZGgtPmRjY3BoX3R5cGVdW0NUX0RDQ1BfTk9ORV07CiAJc3dpdGNoIChzdGF0ZSkgewogCWRlZmF1bHQ6Ci0JCWlmIChuZl9jdF9kY2NwX2xvb3NlID09IDApIHsKKwkJZG4gPSBkY2NwX3Blcm5ldChuZXQpOworCQlpZiAoZG4tPmRjY3BfbG9vc2UgPT0gMCkgewogCQkJbXNnID0gIm5mX2N0X2RjY3A6IG5vdCBwaWNraW5nIHVwIGV4aXN0aW5nIGNvbm5lY3Rpb24gIjsKIAkJCWdvdG8gb3V0X2ludmFsaWQ7CiAJCX0KQEAgLTQ2NSw2ICs0NzQsNyBAQAogCQkgICAgICAgdV9pbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CisJc3RydWN0IGRjY3BfbmV0ICpkbjsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKIAl1X2ludDhfdCB0eXBlLCBvbGRfc3RhdGUsIG5ld19zdGF0ZTsKQEAgLTU0Miw3ICs1NTIsOSBAQAogCWN0LT5wcm90by5kY2NwLmxhc3RfcGt0ID0gdHlwZTsKIAljdC0+cHJvdG8uZGNjcC5zdGF0ZSA9IG5ld19zdGF0ZTsKIAl3cml0ZV91bmxvY2tfYmgoJmRjY3BfbG9jayk7Ci0JbmZfY3RfcmVmcmVzaF9hY2N0KGN0LCBjdGluZm8sIHNrYiwgZGNjcF90aW1lb3V0W25ld19zdGF0ZV0pOworCisJZG4gPSBkY2NwX3Blcm5ldChuZXQpOworCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGRuLT5kY2NwX3RpbWVvdXRbbmV3X3N0YXRlXSk7CiAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQpAQCAtNjYwLDEzICs2NzIsMTEgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotc3RhdGljIHVuc2lnbmVkIGludCBkY2NwX3N5c2N0bF90YWJsZV91c2VyczsKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqZGNjcF9zeXNjdGxfaGVhZGVyOwotc3RhdGljIGN0bF90YWJsZSBkY2NwX3N5c2N0bF90YWJsZVtdID0geworLyogdGVtcGxhdGUsIGRhdGEgYXNzaWduZWQgbGF0ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRjY3Bfc3lzY3RsX3RhYmxlW10gPSB7CiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfcmVxdWVzdCIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVFVRVNUXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTY3NCw3ICs2ODQsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3Jlc3BvbmQiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02ODIsNyArNjkxLDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9wYXJ0b3BlbiIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02OTAsNyArNjk4LDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9vcGVuIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX09QRU5dLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjk4LDcgKzcwNSw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfY2xvc2VyZXEiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNzA2LDcgKzcxMiw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfY2xvc2luZyIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9DTE9TSU5HXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcxNCw3ICs3MTksNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3RpbWV3YWl0IiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX1RJTUVXQUlUXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcyMiw4ICs3MjYsNyBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF9sb29zZSIsCi0JCS5kYXRhCQk9ICZuZl9jdF9kY2NwX2xvb3NlLAotCQkubWF4bGVuCQk9IHNpemVvZihuZl9jdF9kY2NwX2xvb3NlKSwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJfSwKQEAgLTc1MSwxMSArNzU0LDYgQEAKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gZGNjcF9wcm90bzYgX19yZWFkX21vc3RseSA9IHsKQEAgLTc3NiwzNCArNzc0LDEwNyBAQAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKK307CisKK3N0YXRpYyBfX25ldF9pbml0IGludCBkY2NwX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgZGNjcF9uZXQgKmRuOworCWludCBlcnI7CisKKwlkbiA9IGttYWxsb2Moc2l6ZW9mKCpkbiksIEdGUF9LRVJORUwpOworCWlmICghZG4pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGVmYXVsdCB2YWx1ZXMgKi8KKwlkbi0+ZGNjcF9sb29zZSA9IDE7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdCT0gMiAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVNQT05EXQk9IDQgKiBEQ0NQX01TTDsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXQkJPSAxMiAqIDM2MDAgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdCT0gNjQgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0JPSAyICogRENDUF9NU0w7CisKKwllcnIgPSBuZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgZG4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCisJZXJyID0gLUVOT01FTTsKKwlkbi0+c3lzY3RsX3RhYmxlID0ga21lbWR1cChkY2NwX3N5c2N0bF90YWJsZSwKKwkJCXNpemVvZihkY2NwX3N5c2N0bF90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghZG4tPnN5c2N0bF90YWJsZSkKKwkJZ290byBvdXQ7CisKKwlkbi0+c3lzY3RsX3RhYmxlWzBdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdOworCWRuLT5zeXNjdGxfdGFibGVbMV0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF07CisJZG4tPnN5c2N0bF90YWJsZVsyXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl07CisJZG4tPnN5c2N0bF90YWJsZVszXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzRdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzVdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NJTkddOworCWRuLT5zeXNjdGxfdGFibGVbNl0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfVElNRVdBSVRdOworCWRuLT5zeXNjdGxfdGFibGVbN10uZGF0YSA9ICZkbi0+ZGNjcF9sb29zZTsKKworCWRuLT5zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCisJCQluZl9uZXRfbmV0ZmlsdGVyX3N5c2N0bF9wYXRoLCBkbi0+c3lzY3RsX3RhYmxlKTsKKwlpZiAoIWRuLT5zeXNjdGxfaGVhZGVyKSB7CisJCWtmcmVlKGRuLT5zeXNjdGxfdGFibGUpOworCQlnb3RvIG91dDsKKwl9CiAjZW5kaWYKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoZG4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgZGNjcF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGRjY3BfbmV0ICpkbiA9IGRjY3BfcGVybmV0KG5ldCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShkbi0+c3lzY3RsX2hlYWRlcik7CisJa2ZyZWUoZG4tPnN5c2N0bF90YWJsZSk7CisjZW5kaWYKKwlrZnJlZShkbik7CisKKwluZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZGNjcF9uZXRfb3BzID0geworCS5pbml0ID0gZGNjcF9uZXRfaW5pdCwKKwkuZXhpdCA9IGRjY3BfbmV0X2V4aXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9zdWJzeXMoJmRjY3BfbmV0X2lkLCAmZGNjcF9uZXRfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIxOwogCi0JZXJyID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdG82KTsKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjI7CisKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjM7CiAJcmV0dXJuIDA7CiAKLWVycjI6CitlcnIzOgogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKK2VycjI6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiBlcnIxOgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9maW5pKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiAJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90bzYpOwogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCA0YmU4MGQ3Li44MjkzNzRmNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwpAQCAtOTIsNyArOTIsNyBAQAogc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWMgX19yZWFkX21vc3RseSA9CiB7CiAJLmwzcHJvdG8JCT0gUEZfVU5TUEVDLAotCS5sNHByb3RvCQk9IDAsCisJLmw0cHJvdG8JCT0gMjU1LAogCS5uYW1lCQkJPSAidW5rbm93biIsCiAJLnBrdF90b190dXBsZQkJPSBnZW5lcmljX3BrdF90b190dXBsZSwKIAkuaW52ZXJ0X3R1cGxlCQk9IGdlbmVyaWNfaW52ZXJ0X3R1cGxlLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCBmM2ZkMTU0Li4wYWViOGIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogCkBAIC0yNSw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbG9nLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAKIC8qIFByb3RlY3RzIGN0LT5wcm90by50Y3AgKi8KIHN0YXRpYyBERUZJTkVfUldMT0NLKHRjcF9sb2NrKTsKQEAgLTQ2Niw3ICs0NjksNyBAQAogCQkJCWZvciAoaSA9IDA7CiAJCQkJICAgICBpIDwgKG9wc2l6ZSAtIFRDUE9MRU5fU0FDS19CQVNFKTsKIAkJCQkgICAgIGkgKz0gVENQT0xFTl9TQUNLX1BFUkJMT0NLKSB7Ci0JCQkJCXRtcCA9IG50b2hsKCooKF9fYmUzMiAqKShwdHIraSkrMSkpOworCQkJCQl0bXAgPSBnZXRfdW5hbGlnbmVkX2JlMzIoKF9fYmUzMiAqKShwdHIraSkrMSk7CiAKIAkJCQkJaWYgKGFmdGVyKHRtcCwgKnNhY2spKQogCQkJCQkJKnNhY2sgPSB0bXA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDJiOGIxZjUuLmQ0MDIxMTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbG9nLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IDMwKkhaOwogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF91ZHBfdGltZW91dF9zdHJlYW0gX19yZWFkX21vc3RseSA9IDE4MCpIWjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCmluZGV4IGZhOGFlNWQuLjhiYjk5OGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwpAQCAtMTQsNTggKzE0LDYzIEBACiAgICBMT0cgdGFyZ2V0IG1vZHVsZXMgKi8KIAogI2RlZmluZSBORl9MT0dfUFJFRklYTEVOCQkxMjgKKyNkZWZpbmUgTkZMT0dHRVJfTkFNRV9MRU4JCTY0CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpuZl9sb2dnZXJzW05GUFJPVE9fTlVNUFJPVE9dIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9sb2dnZXJzX2xbTkZQUk9UT19OVU1QUk9UT10gX19yZWFkX21vc3RseTsKIHN0YXRpYyBERUZJTkVfTVVURVgobmZfbG9nX211dGV4KTsKIAotLyogcmV0dXJuIEVCVVNZIGlmIHNvbWVib2R5IGVsc2UgaXMgcmVnaXN0ZXJlZCwgRUVYSVNUIGlmIHRoZSBzYW1lIGxvZ2dlcgotICogaXMgcmVnaXN0cmVkLCAwIG9uIHN1Y2Nlc3MuICovCi1pbnQgbmZfbG9nX3JlZ2lzdGVyKHVfaW50OF90IHBmLCBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciAqX19maW5kX2xvZ2dlcihpbnQgcGYsIGNvbnN0IGNoYXIgKnN0cl9sb2dnZXIpCiB7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgbmZfbG9nZ2VyICp0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmbmZfbG9nZ2Vyc19sW3BmXSwgbGlzdFtwZl0pIHsKKwkJaWYgKCFzdHJuaWNtcChzdHJfbG9nZ2VyLCB0LT5uYW1lLCBzdHJsZW4odC0+bmFtZSkpKQorCQkJcmV0dXJuIHQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIHJldHVybiBFRVhJU1QgaWYgdGhlIHNhbWUgbG9nZ2VyIGlzIHJlZ2lzdHJlZCwgMCBvbiBzdWNjZXNzLiAqLworaW50IG5mX2xvZ19yZWdpc3Rlcih1X2ludDhfdCBwZiwgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQoreworCWNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxsb2c7CiAKIAlpZiAocGYgPj0gQVJSQVlfU0laRShuZl9sb2dnZXJzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBBbnkgc2V0dXAgb2YgbG9nZ2luZyBtZW1iZXJzIG11c3QgYmUgZG9uZSBiZWZvcmUKLQkgKiBzdWJzdGl0dXRpbmcgcG9pbnRlci4gKi8KLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm5mX2xvZ19tdXRleCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAotCWlmICghbmZfbG9nZ2Vyc1twZl0pCi0JCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgbG9nZ2VyKTsKLQllbHNlIGlmIChuZl9sb2dnZXJzW3BmXSA9PSBsb2dnZXIpCi0JCXJldCA9IC1FRVhJU1Q7Ci0JZWxzZQotCQlyZXQgPSAtRUJVU1k7CisJaWYgKHBmID09IE5GUFJPVE9fVU5TUEVDKSB7CisJCWludCBpOworCQlmb3IgKGkgPSBORlBST1RPX1VOU1BFQzsgaSA8IE5GUFJPVE9fTlVNUFJPVE87IGkrKykKKwkJCWxpc3RfYWRkX3RhaWwoJihsb2dnZXItPmxpc3RbaV0pLCAmKG5mX2xvZ2dlcnNfbFtpXSkpOworCX0gZWxzZSB7CisJCS8qIHJlZ2lzdGVyIGF0IGVuZCBvZiBsaXN0IHRvIGhvbm9yIGZpcnN0IHJlZ2lzdGVyIHdpbiAqLworCQlsaXN0X2FkZF90YWlsKCZsb2dnZXItPmxpc3RbcGZdLCAmbmZfbG9nZ2Vyc19sW3BmXSk7CisJCWxsb2cgPSByY3VfZGVyZWZlcmVuY2UobmZfbG9nZ2Vyc1twZl0pOworCQlpZiAobGxvZyA9PSBOVUxMKQorCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBsb2dnZXIpOworCX0KIAogCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKLQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG5mX2xvZ19yZWdpc3Rlcik7CiAKLXZvaWQgbmZfbG9nX3VucmVnaXN0ZXJfcGYodV9pbnQ4X3QgcGYpCit2b2lkIG5mX2xvZ191bnJlZ2lzdGVyKHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKIHsKLQlpZiAocGYgPj0gQVJSQVlfU0laRShuZl9sb2dnZXJzKSkKLQkJcmV0dXJuOwotCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBOVUxMKTsKLQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7Ci0KLQkvKiBHaXZlIHRpbWUgdG8gY29uY3VycmVudCByZWFkZXJzLiAqLwotCXN5bmNocm9uaXplX3JjdSgpOwotfQotRVhQT1JUX1NZTUJPTChuZl9sb2dfdW5yZWdpc3Rlcl9wZik7Ci0KLXZvaWQgbmZfbG9nX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQoteworCWNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmNfbG9nZ2VyOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuZl9sb2dnZXJzKTsgaSsrKSB7Ci0JCWlmIChuZl9sb2dnZXJzW2ldID09IGxvZ2dlcikKKwkJY19sb2dnZXIgPSByY3VfZGVyZWZlcmVuY2UobmZfbG9nZ2Vyc1tpXSk7CisJCWlmIChjX2xvZ2dlciA9PSBsb2dnZXIpCiAJCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1tpXSwgTlVMTCk7CisJCWxpc3RfZGVsKCZsb2dnZXItPmxpc3RbaV0pOwogCX0KIAltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CiAKQEAgLTczLDYgKzc4LDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mX2xvZ191bnJlZ2lzdGVyKTsKIAoraW50IG5mX2xvZ19iaW5kX3BmKHVfaW50OF90IHBmLCBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCit7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwlpZiAoX19maW5kX2xvZ2dlcihwZiwgbG9nZ2VyLT5uYW1lKSA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgbG9nZ2VyKTsKKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG5mX2xvZ19iaW5kX3BmKTsKKwordm9pZCBuZl9sb2dfdW5iaW5kX3BmKHVfaW50OF90IHBmKQoreworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBOVUxMKTsKKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKG5mX2xvZ191bmJpbmRfcGYpOworCiB2b2lkIG5mX2xvZ19wYWNrZXQodV9pbnQ4X3QgcGYsCiAJCSAgIHVuc2lnbmVkIGludCBob29rbnVtLAogCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTI5LDEzICsxNTUsMzcgQEAKIHsKIAlsb2ZmX3QgKnBvcyA9IHY7CiAJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyOworCXN0cnVjdCBuZl9sb2dnZXIgKnQ7CisJaW50IHJldDsKIAogCWxvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzWypwb3NdKTsKIAogCWlmICghbG9nZ2VyKQotCQlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJTJsbGQgTk9ORVxuIiwgKnBvcyk7CisJCXJldCA9IHNlcV9wcmludGYocywgIiUybGxkIE5PTkUgKCIsICpwb3MpOworCWVsc2UKKwkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJTJsbGQgJXMgKCIsICpwb3MsIGxvZ2dlci0+bmFtZSk7CiAKLQlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJTJsbGQgJXNcbiIsICpwb3MsIGxvZ2dlci0+bmFtZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm5mX2xvZ2dlcnNfbFsqcG9zXSwgbGlzdFsqcG9zXSkgeworCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlcyIsIHQtPm5hbWUpOworCQlpZiAocmV0IDwgMCkgeworCQkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAoJnQtPmxpc3RbKnBvc10gIT0gbmZfbG9nZ2Vyc19sWypwb3NdLnByZXYpIHsKKwkJCXJldCA9IHNlcV9wcmludGYocywgIiwiKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCisJcmV0dXJuIHNlcV9wcmludGYocywgIilcbiIpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mbG9nX3NlcV9vcHMgPSB7CkBAIC0xNTgsMTUgKzIwOCwxMDIgQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIAorCiAjZW5kaWYgLyogUFJPQ19GUyAqLwogCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RydWN0IGN0bF9wYXRoIG5mX2xvZ19zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAibmV0ZmlsdGVyIiwgLmN0bF9uYW1lID0gTkVUX05FVEZJTFRFUiwgfSwKKwl7IC5wcm9jbmFtZSA9ICJuZl9sb2ciLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKK3N0YXRpYyBjaGFyIG5mX2xvZ19zeXNjdGxfZm5hbWVzW05GUFJPVE9fTlVNUFJPVE8tTkZQUk9UT19VTlNQRUNdWzNdOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfbG9nX3N5c2N0bF90YWJsZVtORlBST1RPX05VTVBST1RPKzFdOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9sb2dfZGlyX2hlYWRlcjsKKworc3RhdGljIGludCBuZl9sb2dfcHJvY19kb3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCit7CisJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyOworCWludCByID0gMDsKKwlpbnQgdGluZGV4ID0gKHVuc2lnbmVkIGxvbmcpdGFibGUtPmV4dHJhMTsKKworCWlmICh3cml0ZSkgeworCQlpZiAoIXN0cmNtcChidWZmZXIsICJOT05FIikpIHsKKwkJCW5mX2xvZ191bmJpbmRfcGYodGluZGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CisJCWxvZ2dlciA9IF9fZmluZF9sb2dnZXIodGluZGV4LCBidWZmZXIpOworCQlpZiAobG9nZ2VyID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3RpbmRleF0sIGxvZ2dlcik7CisJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwl9IGVsc2UgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWxvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzW3RpbmRleF0pOworCQlpZiAoIWxvZ2dlcikKKwkJCXRhYmxlLT5kYXRhID0gIk5PTkUiOworCQllbHNlCisJCQl0YWJsZS0+ZGF0YSA9IGxvZ2dlci0+bmFtZTsKKwkJciA9IHByb2NfZG9zdHJpbmcodGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIF9faW5pdCBpbnQgbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gTkZQUk9UT19VTlNQRUM7IGkgPCBORlBST1RPX05VTVBST1RPOyBpKyspIHsKKwkJc25wcmludGYobmZfbG9nX3N5c2N0bF9mbmFtZXNbaS1ORlBST1RPX1VOU1BFQ10sIDMsICIlZCIsIGkpOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQ7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ucHJvY25hbWUJPQorCQkJbmZfbG9nX3N5c2N0bF9mbmFtZXNbaS1ORlBST1RPX1VOU1BFQ107CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0uZGF0YSA9IE5VTEw7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ubWF4bGVuID0KKwkJCU5GTE9HR0VSX05BTUVfTEVOICogc2l6ZW9mKGNoYXIpOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLm1vZGUgPSAwNjQ0OworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLnByb2NfaGFuZGxlciA9IG5mX2xvZ19wcm9jX2Rvc3RyaW5nOworCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLmV4dHJhMSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIGk7CisJfQorCisJbmZfbG9nX2Rpcl9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMobmZfbG9nX3N5c2N0bF9wYXRoLAorCQkJCSAgICAgICBuZl9sb2dfc3lzY3RsX3RhYmxlKTsKKwlpZiAoIW5mX2xvZ19kaXJfaGVhZGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBfX2luaXQgaW50IG5ldGZpbHRlcl9sb2dfc3lzY3RsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAKIGludCBfX2luaXQgbmV0ZmlsdGVyX2xvZ19pbml0KHZvaWQpCiB7CisJaW50IGksIHI7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlpZiAoIXByb2NfY3JlYXRlKCJuZl9sb2ciLCBTX0lSVUdPLAogCQkJIHByb2NfbmV0X25ldGZpbHRlciwgJm5mbG9nX2ZpbGVfb3BzKSkKIAkJcmV0dXJuIC0xOwogI2VuZGlmCisKKwkvKiBFcnJvcnMgd2lsbCB0cmlnZ2VyIHBhbmljLCB1bnJvbGwgb24gZXJyb3IgaXMgdW5uZWNlc3NhcnkuICovCisJciA9IG5ldGZpbHRlcl9sb2dfc3lzY3RsX2luaXQoKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJZm9yIChpID0gTkZQUk9UT19VTlNQRUM7IGkgPCBORlBST1RPX05VTVBST1RPOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCYobmZfbG9nZ2Vyc19sW2ldKSk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYwppbmRleCBjZGM5N2YzLi41NDkwZmMzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCkBAIC03MSw2ICs3MSw3IEBACiBuZl90cHJveHlfYXNzaWduX3NvY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQogewogCWlmIChpbmV0X3NrKHNrKS0+dHJhbnNwYXJlbnQpIHsKKwkJc2tiX29ycGhhbihza2IpOwogCQlza2ItPnNrID0gc2s7CiAJCXNrYi0+ZGVzdHJ1Y3RvciA9IG5mX3Rwcm94eV9kZXN0cnVjdG9yOwogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IDljMGJhMTcuLjI3ODVkNjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtMTEzLDYgKzExMywxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZuZXRsaW5rX3NlbmQpOwogCit2b2lkIG5mbmV0bGlua19zZXRfZXJyKHUzMiBwaWQsIHUzMiBncm91cCwgaW50IGVycm9yKQoreworCW5ldGxpbmtfc2V0X2VycihuZm5sLCBwaWQsIGdyb3VwLCBlcnJvcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfc2V0X2Vycik7CisKIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgcGlkLCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIG5ldGxpbmtfdW5pY2FzdChuZm5sLCBza2IsIHBpZCwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCBjNzEyZTlmLi5mZDMyNmFjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtNjkzLDcgKzY5Myw3IEBACiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgbmZ1bG5sX2xvZ2dlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIG5mdWxubF9sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQk9ICJuZm5ldGxpbmtfbG9nIiwKIAkubG9nZm4JPSAmbmZ1bG5sX2xvZ19wYWNrZXQsCiAJLm1lCT0gVEhJU19NT0RVTEUsCkBAIC03MjUsOSArNzI1LDkgQEAKIAkJLyogQ29tbWFuZHMgd2l0aG91dCBxdWV1ZSBjb250ZXh0ICovCiAJCXN3aXRjaCAoY21kLT5jb21tYW5kKSB7CiAJCWNhc2UgTkZVTE5MX0NGR19DTURfUEZfQklORDoKLQkJCXJldHVybiBuZl9sb2dfcmVnaXN0ZXIocGYsICZuZnVsbmxfbG9nZ2VyKTsKKwkJCXJldHVybiBuZl9sb2dfYmluZF9wZihwZiwgJm5mdWxubF9sb2dnZXIpOwogCQljYXNlIE5GVUxOTF9DRkdfQ01EX1BGX1VOQklORDoKLQkJCW5mX2xvZ191bnJlZ2lzdGVyX3BmKHBmKTsKKwkJCW5mX2xvZ191bmJpbmRfcGYocGYpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC05NTIsMTcgKzk1MiwyNSBAQAogCQlnb3RvIGNsZWFudXBfbmV0bGlua19ub3RpZmllcjsKIAl9CiAKKwlzdGF0dXMgPSBuZl9sb2dfcmVnaXN0ZXIoTkZQUk9UT19VTlNQRUMsICZuZnVsbmxfbG9nZ2VyKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImxvZzogZmFpbGVkIHRvIHJlZ2lzdGVyIGxvZ2dlclxuIik7CisJCWdvdG8gY2xlYW51cF9zdWJzeXM7CisJfQorCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlpZiAoIXByb2NfY3JlYXRlKCJuZm5ldGxpbmtfbG9nIiwgMDQ0MCwKIAkJCSBwcm9jX25ldF9uZXRmaWx0ZXIsICZuZnVsX2ZpbGVfb3BzKSkKLQkJZ290byBjbGVhbnVwX3N1YnN5czsKKwkJZ290byBjbGVhbnVwX2xvZ2dlcjsKICNlbmRpZgogCXJldHVybiBzdGF0dXM7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUworY2xlYW51cF9sb2dnZXI6CisJbmZfbG9nX3VucmVnaXN0ZXIoJm5mdWxubF9sb2dnZXIpOworI2VuZGlmCiBjbGVhbnVwX3N1YnN5czoKIAluZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoJm5mdWxubF9zdWJzeXMpOwotI2VuZGlmCiBjbGVhbnVwX25ldGxpbmtfbm90aWZpZXI6CiAJbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyKCZuZnVsbmxfcnRubF9ub3RpZmllcik7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwppbmRleCA1YmFjY2ZhLi41MDlhOTU2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKKysrIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCkBAIC02MjUsNiArNjI1LDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHh0X2ZyZWVfdGFibGVfaW5mbyk7CiAKK3ZvaWQgeHRfdGFibGVfZW50cnlfc3dhcF9yY3Uoc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZGluZm8sCisJCQkgICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvKQoreworCXVuc2lnbmVkIGludCBjcHU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXZvaWQgKnAgPSBvbGRpbmZvLT5lbnRyaWVzW2NwdV07CisJCXJjdV9hc3NpZ25fcG9pbnRlcihvbGRpbmZvLT5lbnRyaWVzW2NwdV0sIG5ld2luZm8tPmVudHJpZXNbY3B1XSk7CisJCW5ld2luZm8tPmVudHJpZXNbY3B1XSA9IHA7CisJfQorCit9CitFWFBPUlRfU1lNQk9MX0dQTCh4dF90YWJsZV9lbnRyeV9zd2FwX3JjdSk7CisKIC8qIEZpbmQgdGFibGUgYnkgbmFtZSwgZ3JhYnMgbXV0ZXggJiByZWYuICBSZXR1cm5zIEVSUl9QVFIoKSBvbiBlcnJvci4gKi8KIHN0cnVjdCB4dF90YWJsZSAqeHRfZmluZF90YWJsZV9sb2NrKHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgYWYsCiAJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC02NzEsMjEgKzY4NSwyMiBAQAogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvLCAqcHJpdmF0ZTsKIAogCS8qIERvIHRoZSBzdWJzdGl0dXRpb24uICovCi0Jd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKIAlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJLyogQ2hlY2sgaW5zaWRlIGxvY2s6IGlzIHRoZSBvbGQgbnVtYmVyIGNvcnJlY3Q/ICovCiAJaWYgKG51bV9jb3VudGVycyAhPSBwcml2YXRlLT5udW1iZXIpIHsKIAkJZHVwcmludGYoIm51bV9jb3VudGVycyAhPSB0YWJsZS0+cHJpdmF0ZS0+bnVtYmVyICgldS8ldSlcbiIsCiAJCQkgbnVtX2NvdW50ZXJzLCBwcml2YXRlLT5udW1iZXIpOwotCQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CiAJCSplcnJvciA9IC1FQUdBSU47CiAJCXJldHVybiBOVUxMOwogCX0KIAlvbGRpbmZvID0gcHJpdmF0ZTsKLQl0YWJsZS0+cHJpdmF0ZSA9IG5ld2luZm87CisJcmN1X2Fzc2lnbl9wb2ludGVyKHRhYmxlLT5wcml2YXRlLCBuZXdpbmZvKTsKIAluZXdpbmZvLT5pbml0aWFsX2VudHJpZXMgPSBvbGRpbmZvLT5pbml0aWFsX2VudHJpZXM7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CiAKKwlzeW5jaHJvbml6ZV9uZXQoKTsKIAlyZXR1cm4gb2xkaW5mbzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X3JlcGxhY2VfdGFibGUpOwpAQCAtNzE5LDcgKzczNCw4IEBACiAKIAkvKiBTaW1wbGlmaWVzIHJlcGxhY2VfdGFibGUgY29kZS4gKi8KIAl0YWJsZS0+cHJpdmF0ZSA9IGJvb3RzdHJhcDsKLQlyd2xvY2tfaW5pdCgmdGFibGUtPmxvY2spOworCW11dGV4X2luaXQoJnRhYmxlLT5sb2NrKTsKKwogCWlmICgheHRfcmVwbGFjZV90YWJsZSh0YWJsZSwgMCwgbmV3aW5mbywgJnJldCkpCiAJCWdvdG8gdW5sb2NrOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0hMLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0hMLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlNzg5ZQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfSEwuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIFRUTCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBJUCB0YWJsZXMKKyAqIChDKSAyMDAwLDIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CisgKgorICogSG9wIExpbWl0IG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIGlwNnRhYmxlcworICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UVEwuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmg+CisKK01PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiIpOworTU9EVUxFX0FVVEhPUigiTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogSG9wbGltaXQvVFRMIExpbWl0IGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGludAordHRsX3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXB0X1RUTF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKwlpbnQgbmV3X3R0bDsKKworCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCisJCXJldHVybiBORl9EUk9QOworCisJaXBoID0gaXBfaGRyKHNrYik7CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwkJY2FzZSBJUFRfVFRMX1NFVDoKKwkJCW5ld190dGwgPSBpbmZvLT50dGw7CisJCQlicmVhazsKKwkJY2FzZSBJUFRfVFRMX0lOQzoKKwkJCW5ld190dGwgPSBpcGgtPnR0bCArIGluZm8tPnR0bDsKKwkJCWlmIChuZXdfdHRsID4gMjU1KQorCQkJCW5ld190dGwgPSAyNTU7CisJCQlicmVhazsKKwkJY2FzZSBJUFRfVFRMX0RFQzoKKwkJCW5ld190dGwgPSBpcGgtPnR0bCAtIGluZm8tPnR0bDsKKwkJCWlmIChuZXdfdHRsIDwgMCkKKwkJCQluZXdfdHRsID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbmV3X3R0bCA9IGlwaC0+dHRsOworCQkJYnJlYWs7CisJfQorCisJaWYgKG5ld190dGwgIT0gaXBoLT50dGwpIHsKKwkJY3N1bV9yZXBsYWNlMigmaXBoLT5jaGVjaywgaHRvbnMoaXBoLT50dGwgPDwgOCksCisJCQkJCSAgIGh0b25zKG5ld190dGwgPDwgOCkpOworCQlpcGgtPnR0bCA9IG5ld190dGw7CisJfQorCisJcmV0dXJuIFhUX0NPTlRJTlVFOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitobF90ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQoreworCXN0cnVjdCBpcHY2aGRyICppcDZoOworCWNvbnN0IHN0cnVjdCBpcDZ0X0hMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCWludCBuZXdfaGw7CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLT5sZW4pKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCWlwNmggPSBpcHY2X2hkcihza2IpOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVA2VF9ITF9TRVQ6CisJCQluZXdfaGwgPSBpbmZvLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0lOQzoKKwkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdCArIGluZm8tPmhvcF9saW1pdDsKKwkJCWlmIChuZXdfaGwgPiAyNTUpCisJCQkJbmV3X2hsID0gMjU1OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9ERUM6CisJCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQgLSBpbmZvLT5ob3BfbGltaXQ7CisJCQlpZiAobmV3X2hsIDwgMCkKKwkJCQluZXdfaGwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwl9CisKKwlpcDZoLT5ob3BfbGltaXQgPSBuZXdfaGw7CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBib29sIHR0bF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXB0X1RUTF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKworCWlmIChpbmZvLT5tb2RlID4gSVBUX1RUTF9NQVhNT0RFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF9UVEw6IGludmFsaWQgb3IgdW5rbm93biBNb2RlICV1XG4iLAorCQkJaW5mby0+bW9kZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGluZm8tPm1vZGUgIT0gSVBUX1RUTF9TRVQgJiYgaW5mby0+dHRsID09IDApCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaGxfdGc2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcDZ0X0hMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCisJaWYgKGluZm8tPm1vZGUgPiBJUDZUX0hMX01BWE1PREUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9ITDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCisJCQlpbmZvLT5tb2RlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoaW5mby0+bW9kZSAhPSBJUDZUX0hMX1NFVCAmJiBpbmZvLT5ob3BfbGltaXQgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbmNyZW1lbnQvZGVjcmVtZW50IGRvZXNuJ3QgIgorCQkJIm1ha2Ugc2Vuc2Ugd2l0aCB2YWx1ZSAwXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaGxfdGdfcmVnW10gX19yZWFkX21vc3RseSA9IHsKKwl7CisJCS5uYW1lICAgICAgID0gIlRUTCIsCisJCS5yZXZpc2lvbiAgID0gMCwKKwkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjQsCisJCS50YXJnZXQgICAgID0gdHRsX3RnLAorCQkudGFyZ2V0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXB0X1RUTF9pbmZvKSwKKwkJLnRhYmxlICAgICAgPSAibWFuZ2xlIiwKKwkJLmNoZWNrZW50cnkgPSB0dGxfdGdfY2hlY2ssCisJCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgID0gIkhMIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNiwKKwkJLnRhcmdldCAgICAgPSBobF90ZzYsCisJCS50YXJnZXRzaXplID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X0hMX2luZm8pLAorCQkudGFibGUgICAgICA9ICJtYW5nbGUiLAorCQkuY2hlY2tlbnRyeSA9IGhsX3RnNl9jaGVjaywKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGxfdGdfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl90YXJnZXRzKGhsX3RnX3JlZywgQVJSQVlfU0laRShobF90Z19yZWcpKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhsX3RnX2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX3RhcmdldHMoaGxfdGdfcmVnLCBBUlJBWV9TSVpFKGhsX3RnX3JlZykpOworfQorCittb2R1bGVfaW5pdChobF90Z19pbml0KTsKK21vZHVsZV9leGl0KGhsX3RnX2V4aXQpOworTU9EVUxFX0FMSUFTKCJpcHRfVFRMIik7CitNT0RVTEVfQUxJQVMoImlwNnRfSEwiKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTEVELmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZjc4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0xFRC5jCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogeHRfTEVELmMgLSBuZXRmaWx0ZXIgdGFyZ2V0IHRvIG1ha2UgTEVEcyBibGluayB1cG9uIHBhY2tldCBtYXRjaGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFkYW0gTmllbHNlbiA8YS5uaWVsc2VuQHNoaWthZGkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0xFRC5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBZGFtIE5pZWxzZW4gPGEubmllbHNlbkBzaGlrYWRpLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogdHJpZ2dlciBMRUQgZGV2aWNlcyBvbiBwYWNrZXQgbWF0Y2giKTsKKworLyoKKyAqIFRoaXMgaXMgZGVjbGFyZWQgaW4gaGVyZSAodGhlIGtlcm5lbCBtb2R1bGUpIG9ubHksIHRvIGF2b2lkIGhhdmluZyB0aGVzZQorICogZGVwZW5kZW5jaWVzIGluIHVzZXJzcGFjZSBjb2RlLiAgVGhpcyBpcyB3aGF0IHh0X2xlZF9pbmZvLmludGVybmFsX2RhdGEKKyAqIHBvaW50cyB0by4KKyAqLworc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsIHsKKwlzdHJ1Y3QgbGVkX3RyaWdnZXIgbmV0ZmlsdGVyX2xlZF90cmlnZ2VyOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludAorbGVkX3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfbGVkX2luZm8gKmxlZGluZm8gPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCAqbGVkaW50ZXJuYWwgPSBsZWRpbmZvLT5pbnRlcm5hbF9kYXRhOworCisJLyoKKwkgKiBJZiAiYWx3YXlzIGJsaW5rIiBpcyBlbmFibGVkLCBhbmQgdGhlcmUncyBzdGlsbCBzb21lIHRpbWUgdW50aWwgdGhlCisJICogTEVEIHdpbGwgc3dpdGNoIG9mZiwgYnJpZWZseSBzd2l0Y2ggaXQgb2ZmIG5vdy4KKwkgKi8KKwlpZiAoKGxlZGluZm8tPmRlbGF5ID4gMCkgJiYgbGVkaW5mby0+YWx3YXlzX2JsaW5rICYmCisJICAgIHRpbWVyX3BlbmRpbmcoJmxlZGludGVybmFsLT50aW1lcikpCisJCWxlZF90cmlnZ2VyX2V2ZW50KCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyLExFRF9PRkYpOworCisJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsIExFRF9GVUxMKTsKKworCS8qIElmIHRoZXJlJ3MgYSBwb3NpdGl2ZSBkZWxheSwgc3RhcnQvdXBkYXRlIHRoZSB0aW1lciAqLworCWlmIChsZWRpbmZvLT5kZWxheSA+IDApIHsKKwkJbW9kX3RpbWVyKCZsZWRpbnRlcm5hbC0+dGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGxlZGluZm8tPmRlbGF5KSk7CisKKwkvKiBPdGhlcndpc2UgaWYgdGhlcmUgd2FzIG5vIGRlbGF5IGdpdmVuLCBibGluayBhcyBmYXN0IGFzIHBvc3NpYmxlICovCisJfSBlbHNlIGlmIChsZWRpbmZvLT5kZWxheSA9PSAwKSB7CisJCWxlZF90cmlnZ2VyX2V2ZW50KCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyLCBMRURfT0ZGKTsKKwl9CisKKwkvKiBlbHNlIHRoZSBkZWxheSBpcyBuZWdhdGl2ZSwgd2hpY2ggbWVhbnMgc3dpdGNoIG9uIGFuZCBzdGF5IG9uICovCisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyB2b2lkIGxlZF90aW1lb3V0X2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgeHRfbGVkX2luZm8gKmxlZGluZm8gPSAoc3RydWN0IHh0X2xlZF9pbmZvICopZGF0YTsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsID0gbGVkaW5mby0+aW50ZXJuYWxfZGF0YTsKKworCWxlZF90cmlnZ2VyX2V2ZW50KCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyLCBMRURfT0ZGKTsKK30KKworc3RhdGljIGJvb2wgbGVkX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQoreworCXN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbDsKKwlpbnQgZXJyOworCisJaWYgKGxlZGluZm8tPmlkWzBdID09ICdcMCcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IE5vICdpZCcgcGFyYW1ldGVyIGdpdmVuLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlsZWRpbnRlcm5hbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCksIEdGUF9LRVJORUwpOworCWlmICghbGVkaW50ZXJuYWwpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBLQlVJTERfTU9ETkFNRSAiOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIubmFtZSA9IGxlZGluZm8tPmlkOworCisJZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBLQlVJTERfTU9ETkFNRQorCQkJIjogbGVkX3RyaWdnZXJfcmVnaXN0ZXIoKSBmYWlsZWRcbiIpOworCQlpZiAoZXJyID09IC1FRVhJU1QpCisJCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJCQkiOiBUcmlnZ2VyIG5hbWUgaXMgYWxyZWFkeSBpbiB1c2UuXG4iKTsKKwkJZ290byBleGl0X2FsbG9jOworCX0KKworCS8qIFNlZSBpZiB3ZSBuZWVkIHRvIHNldCB1cCBhIHRpbWVyICovCisJaWYgKGxlZGluZm8tPmRlbGF5ID4gMCkKKwkJc2V0dXBfdGltZXIoJmxlZGludGVybmFsLT50aW1lciwgbGVkX3RpbWVvdXRfY2FsbGJhY2ssCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpbGVkaW5mbyk7CisKKwlsZWRpbmZvLT5pbnRlcm5hbF9kYXRhID0gbGVkaW50ZXJuYWw7CisKKwlyZXR1cm4gdHJ1ZTsKKworZXhpdF9hbGxvYzoKKwlrZnJlZShsZWRpbnRlcm5hbCk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGxlZF90Z19kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfbGVkX2luZm8gKmxlZGluZm8gPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCAqbGVkaW50ZXJuYWwgPSBsZWRpbmZvLT5pbnRlcm5hbF9kYXRhOworCisJaWYgKGxlZGluZm8tPmRlbGF5ID4gMCkKKwkJZGVsX3RpbWVyX3N5bmMoJmxlZGludGVybmFsLT50aW1lcik7CisKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKCZsZWRpbnRlcm5hbC0+bmV0ZmlsdGVyX2xlZF90cmlnZ2VyKTsKKwlrZnJlZShsZWRpbnRlcm5hbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGxlZF90Z19yZWcgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiTEVEIiwKKwkucmV2aXNpb24JPSAwLAorCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCisJLnRhcmdldAkJPSBsZWRfdGcsCisJLnRhcmdldHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X2xlZF9pbmZvKSksCisJLmNoZWNrZW50cnkJPSBsZWRfdGdfY2hlY2ssCisJLmRlc3Ryb3kJPSBsZWRfdGdfZGVzdHJveSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsZWRfdGdfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl90YXJnZXQoJmxlZF90Z19yZWcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbGVkX3RnX2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmbGVkX3RnX3JlZyk7Cit9CisKK21vZHVsZV9pbml0KGxlZF90Z19pbml0KTsKK21vZHVsZV9leGl0KGxlZF90Z19leGl0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5jIGIvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1YmQ4OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogKEMpIDIwMDgtMjAwOSBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jbHVzdGVyLmg+CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90IG5mX2N0X29yaWdfaXB2NF9zcmMoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLnUzLmlwOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKm5mX2N0X29yaWdfaXB2Nl9zcmMoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLnUzLmlwNjsKK30KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QKK3h0X2NsdXN0ZXJfaGFzaF9pcHY0KHVfaW50MzJfdCBpcCwgY29uc3Qgc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gamhhc2hfMXdvcmQoaXAsIGluZm8tPmhhc2hfc2VlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Cit4dF9jbHVzdGVyX2hhc2hfaXB2Nihjb25zdCB2b2lkICppcCwgY29uc3Qgc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gamhhc2gyKGlwLCBORl9DVF9UVVBMRV9MM1NJWkUgLyBzaXplb2YoX191MzIpLCBpbmZvLT5oYXNoX3NlZWQpOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAoreHRfY2x1c3Rlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKKwkJY29uc3Qgc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyAqaW5mbykKK3sKKwl1X2ludDMyX3QgaGFzaCA9IDA7CisKKwlzd2l0Y2gobmZfY3RfbDNudW0oY3QpKSB7CisJY2FzZSBBRl9JTkVUOgorCQloYXNoID0geHRfY2x1c3Rlcl9oYXNoX2lwdjQobmZfY3Rfb3JpZ19pcHY0X3NyYyhjdCksIGluZm8pOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQloYXNoID0geHRfY2x1c3Rlcl9oYXNoX2lwdjYobmZfY3Rfb3JpZ19pcHY2X3NyYyhjdCksIGluZm8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgoKHU2NCloYXNoICogaW5mby0+dG90YWxfbm9kZXMpID4+IDMyKTsKK30KKworc3RhdGljIGlubGluZSBib29sCit4dF9jbHVzdGVyX2lzX211bHRpY2FzdF9hZGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVfaW50OF90IGZhbWlseSkKK3sKKwlib29sIGlzX211bHRpY2FzdCA9IGZhbHNlOworCisJc3dpdGNoKGZhbWlseSkgeworCWNhc2UgTkZQUk9UT19JUFY0OgorCQlpc19tdWx0aWNhc3QgPSBpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS0+ZGFkZHIpOworCQlicmVhazsKKwljYXNlIE5GUFJPVE9fSVBWNjoKKwkJaXNfbXVsdGljYXN0ID0gaXB2Nl9hZGRyX3R5cGUoJmlwdjZfaGRyKHNrYiktPmRhZGRyKSAmCisJCQkJCQlJUFY2X0FERFJfTVVMVElDQVNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIGlzX211bHRpY2FzdDsKK30KKworc3RhdGljIGJvb2wKK3h0X2NsdXN0ZXJfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnBza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2I7CisJY29uc3Qgc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwl1bnNpZ25lZCBsb25nIGhhc2g7CisKKwkvKiBUaGlzIG1hdGNoIGFzc3VtZXMgdGhhdCBhbGwgbm9kZXMgc2VlIHRoZSBzYW1lIHBhY2tldHMuIFRoaXMgY2FuIGJlCisJICogYWNoaWV2ZWQgaWYgdGhlIHN3aXRjaCB0aGF0IGNvbm5lY3RzIHRoZSBjbHVzdGVyIG5vZGVzIHN1cHBvcnQgc29tZQorCSAqIHNvcnQgb2YgJ3BvcnQgbWlycm9yaW5nJy4gSG93ZXZlciwgaWYgeW91ciBzd2l0Y2ggZG9lcyBub3Qgc3VwcG9ydAorCSAqIHRoaXMsIHlvdXIgY2x1c3RlciBub2RlcyBjYW4gcmVwbHkgQVJQIHJlcXVlc3QgdXNpbmcgYSBtdWx0aWNhc3QgTUFDCisJICogYWRkcmVzcy4gVGh1cywgeW91ciBzd2l0Y2ggd2lsbCBmbG9vZCB0aGUgc2FtZSBwYWNrZXRzIHRvIHRoZQorCSAqIGNsdXN0ZXIgbm9kZXMgd2l0aCB0aGUgc2FtZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MuIFVzaW5nIGEgbXVsdGljYXN0CisJICogbGluayBhZGRyZXNzIGlzIGEgUkZDIDE4MTIgKHNlY3Rpb24gMy4zLjIpIHZpb2xhdGlvbiwgYnV0IHRoaXMgd29ya3MKKwkgKiBmaW5lIGluIHByYWN0aXNlLgorCSAqCisJICogVW5mb3J0dW5hdGVseSwgaWYgeW91IHVzZSB0aGUgbXVsdGljYXN0IE1BQyBhZGRyZXNzLCB0aGUgbGluayBsYXllcgorCSAqIHNldHMgc2tidWZmJ3MgcGt0X3R5cGUgdG8gUEFDS0VUX01VTFRJQ0FTVCwgd2hpY2ggaXMgbm90IGFjY2VwdGVkCisJICogYnkgVENQIGFuZCBvdGhlcnMgZm9yIHBhY2tldHMgY29taW5nIHRvIHRoaXMgbm9kZS4gRm9yIHRoYXQgcmVhc29uLAorCSAqIHRoaXMgbWF0Y2ggbWFuZ2xlcyBza2J1ZmYncyBwa3RfdHlwZSBpZiBpdCBkZXRlY3RzIGEgcGFja2V0CisJICogYWRkcmVzc2VkIHRvIGEgdW5pY2FzdCBhZGRyZXNzIGJ1dCB1c2luZyBQQUNLRVRfTVVMVElDQVNULiBZZXMsIEkKKwkgKiBrbm93LCBtYXRjaGVzIHNob3VsZCBub3QgYWx0ZXIgcGFja2V0cywgYnV0IHdlIGFyZSBkb2luZyB0aGlzIGhlcmUKKwkgKiBiZWNhdXNlIHdlIHdvdWxkIG5lZWQgdG8gYWRkIGEgUEtUVFlQRSB0YXJnZXQgZm9yIHRoaXMgc29sZSBwdXJwb3NlLgorCSAqLworCWlmICgheHRfY2x1c3Rlcl9pc19tdWx0aWNhc3RfYWRkcihza2IsIHBhci0+ZmFtaWx5KSAmJgorCSAgICBza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpIHsKKwkgICAgCXBza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJfQorCisJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlpZiAoY3QgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGN0ID09ICZuZl9jb25udHJhY2tfdW50cmFja2VkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoY3QtPm1hc3RlcikKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaChjdC0+bWFzdGVyLCBpbmZvKTsKKwllbHNlCisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2goY3QsIGluZm8pOworCisJcmV0dXJuICEhKCgxIDw8IGhhc2gpICYgaW5mby0+bm9kZV9tYXNrKSBeCisJICAgICAgICEhKGluZm8tPmZsYWdzICYgWFRfQ0xVU1RFUl9GX0lOVik7Cit9CisKK3N0YXRpYyBib29sIHh0X2NsdXN0ZXJfbXRfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisKKwlpZiAoaW5mby0+bm9kZV9tYXNrID49ICgxIDw8IGluZm8tPnRvdGFsX25vZGVzKSkgeworCQlwcmludGsoS0VSTl9FUlIgInh0X2NsdXN0ZXI6IHRoaXMgbm9kZSBtYXNrIGNhbm5vdCBiZSAiCisJCQkJImhpZ2hlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXNcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIHh0X2NsdXN0ZXJfbWF0Y2ggX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiY2x1c3RlciIsCisJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKKwkubWF0Y2gJCT0geHRfY2x1c3Rlcl9tdCwKKwkuY2hlY2tlbnRyeQk9IHh0X2NsdXN0ZXJfbXRfY2hlY2tlbnRyeSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8pLAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHh0X2NsdXN0ZXJfbXRfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmeHRfY2x1c3Rlcl9tYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4dF9jbHVzdGVyX210X2Zpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ4dF9jbHVzdGVyX21hdGNoKTsKK30KKworTU9EVUxFX0FVVEhPUigiUGFibG8gTmVpcmEgQXl1c28gPHBhYmxvQG5ldGZpbHRlci5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IGhhc2gtYmFzZWQgY2x1c3RlciBtYXRjaCIpOworTU9EVUxFX0FMSUFTKCJpcHRfY2x1c3RlciIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X2NsdXN0ZXIiKTsKK21vZHVsZV9pbml0KHh0X2NsdXN0ZXJfbXRfaW5pdCk7Cittb2R1bGVfZXhpdCh4dF9jbHVzdGVyX210X2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKaW5kZXggZjk3ZmRlZC4uYTViNTM2OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkvKiBpbml0aWFsaXplIGhhc2ggd2l0aCByYW5kb20gdmFsIGF0IHRoZSB0aW1lIHdlIGFsbG9jYXRlCiAJICogdGhlIGZpcnN0IGhhc2h0YWJsZSBlbnRyeSAqLwogCWlmICghaHQtPnJuZF9pbml0aWFsaXplZCkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZodC0+cm5kLCA0KTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmaHQtPnJuZCwgc2l6ZW9mKGh0LT5ybmQpKTsKIAkJaHQtPnJuZF9pbml0aWFsaXplZCA9IDE7CiAJfQogCkBAIC01NjUsOCArNTY1LDcgQEAKIHN0YXRpYyBib29sCiBoYXNobGltaXRfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0JY29uc3Qgc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICpyID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKilwYXItPm1hdGNoaW5mbyktPnUubWFzdGVyOworCWNvbnN0IHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9IHBhci0+bWF0Y2hpbmZvOwogCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbyA9IHItPmhpbmZvOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAlzdHJ1Y3QgZHN0aGFzaF9lbnQgKmRoOwpAQCAtNzAyLDggKzcwMSw2IEBACiAJfQogCW11dGV4X3VubG9jaygmaGxpbWl0X211dGV4KTsKIAotCS8qIFVnbHkgaGFjazogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0ICovCi0Jci0+dS5tYXN0ZXIgPSByOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hsLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNjE1NAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGwuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgVFRMCisgKiAoQykgMjAwMCwyMDAxIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIEhvcCBMaW1pdCBtYXRjaGluZyBtb2R1bGUKKyAqIChDKSAyMDAxLTIwMDIgTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmg+CisKK01PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IEhvcGxpbWl0L1RUTCBmaWVsZCBtYXRjaCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcHRfdHRsIik7CitNT0RVTEVfQUxJQVMoImlwNnRfaGwiKTsKKworc3RhdGljIGJvb2wgdHRsX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcHRfdHRsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKwljb25zdCB1OCB0dGwgPSBpcF9oZHIoc2tiKS0+dHRsOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVBUX1RUTF9FUToKKwkJCXJldHVybiB0dGwgPT0gaW5mby0+dHRsOworCQljYXNlIElQVF9UVExfTkU6CisJCQlyZXR1cm4gdHRsICE9IGluZm8tPnR0bDsKKwkJY2FzZSBJUFRfVFRMX0xUOgorCQkJcmV0dXJuIHR0bCA8IGluZm8tPnR0bDsKKwkJY2FzZSBJUFRfVFRMX0dUOgorCQkJcmV0dXJuIHR0bCA+IGluZm8tPnR0bDsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF90dGw6IHVua25vd24gbW9kZSAlZFxuIiwKKwkJCQlpbmZvLT5tb2RlKTsKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGhsX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9obF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVA2VF9ITF9FUToKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPT0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9ORToKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgIT0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9MVDoKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPCBpbmZvLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0dUOgorCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA+IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9obDogdW5rbm93biBtb2RlICVkXG4iLAorCQkJCWluZm8tPm1vZGUpOworCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBobF9tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLm5hbWUgICAgICAgPSAidHRsIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNCwKKwkJLm1hdGNoICAgICAgPSB0dGxfbXQsCisJCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCBpcHRfdHRsX2luZm8pLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICJobCIsCisJCS5yZXZpc2lvbiAgID0gMCwKKwkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjYsCisJCS5tYXRjaCAgICAgID0gaGxfbXQ2LAorCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXA2dF9obF9pbmZvKSwKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGxfbXRfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaGVzKGhsX210X3JlZywgQVJSQVlfU0laRShobF9tdF9yZWcpKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhsX210X2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoZXMoaGxfbXRfcmVnLCBBUlJBWV9TSVpFKGhsX210X3JlZykpOworfQorCittb2R1bGVfaW5pdChobF9tdF9pbml0KTsKK21vZHVsZV9leGl0KGhsX210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IGM5MDhkNjkuLjJlODA4OWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTE0LDYgKzE0LDExIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0Lmg+CiAKK3N0cnVjdCB4dF9saW1pdF9wcml2IHsKKwl1bnNpZ25lZCBsb25nIHByZXY7CisJdWludDMyX3QgY3JlZGl0OworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGVydmUgRXljaGVubmUgPHJ2QHdhbGxmaXJlLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogcmF0ZS1saW1pdCBtYXRjaCIpOwpAQCAtNjAsMTggKzY1LDE4IEBACiBzdGF0aWMgYm9vbAogbGltaXRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0Jc3RydWN0IHh0X3JhdGVpbmZvICpyID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKilwYXItPm1hdGNoaW5mbyktPm1hc3RlcjsKKwljb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKnIgPSBwYXItPm1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqcHJpdiA9IHItPm1hc3RlcjsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKIAlzcGluX2xvY2tfYmgoJmxpbWl0X2xvY2spOwotCXItPmNyZWRpdCArPSAobm93IC0geGNoZygmci0+cHJldiwgbm93KSkgKiBDUkVESVRTX1BFUl9KSUZGWTsKLQlpZiAoci0+Y3JlZGl0ID4gci0+Y3JlZGl0X2NhcCkKLQkJci0+Y3JlZGl0ID0gci0+Y3JlZGl0X2NhcDsKKwlwcml2LT5jcmVkaXQgKz0gKG5vdyAtIHhjaGcoJnByaXYtPnByZXYsIG5vdykpICogQ1JFRElUU19QRVJfSklGRlk7CisJaWYgKHByaXYtPmNyZWRpdCA+IHItPmNyZWRpdF9jYXApCisJCXByaXYtPmNyZWRpdCA9IHItPmNyZWRpdF9jYXA7CiAKLQlpZiAoci0+Y3JlZGl0ID49IHItPmNvc3QpIHsKKwlpZiAocHJpdi0+Y3JlZGl0ID49IHItPmNvc3QpIHsKIAkJLyogV2UncmUgbm90IGxpbWl0ZWQuICovCi0JCXItPmNyZWRpdCAtPSByLT5jb3N0OworCQlwcml2LT5jcmVkaXQgLT0gci0+Y29zdDsKIAkJc3Bpbl91bmxvY2tfYmgoJmxpbWl0X2xvY2spOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC05NSw2ICsxMDAsNyBAQAogc3RhdGljIGJvb2wgbGltaXRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiB7CiAJc3RydWN0IHh0X3JhdGVpbmZvICpyID0gcGFyLT5tYXRjaGluZm87CisJc3RydWN0IHh0X2xpbWl0X3ByaXYgKnByaXY7CiAKIAkvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovCiAJaWYgKHItPmJ1cnN0ID09IDAKQEAgLTEwNCwxOSArMTEwLDMwIEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2YgY291bnRlcnMuICovCi0Jci0+bWFzdGVyID0gcjsKKwlwcml2ID0ga21hbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCBvZiBzdGF0ZS4gKi8KKwlyLT5tYXN0ZXIgPSBwcml2OwogCWlmIChyLT5jb3N0ID09IDApIHsKIAkJLyogVXNlciBhdmcgaW4gc2Vjb25kcyAqIFhUX0xJTUlUX1NDQUxFOiBjb252ZXJ0IHRvIGppZmZpZXMgKgogCQkgICAxMjguICovCi0JCXItPnByZXYgPSBqaWZmaWVzOwotCQlyLT5jcmVkaXQgPSB1c2VyMmNyZWRpdHMoci0+YXZnICogci0+YnVyc3QpOwkgLyogQ3JlZGl0cyBmdWxsLiAqLworCQlwcml2LT5wcmV2ID0gamlmZmllczsKKwkJcHJpdi0+Y3JlZGl0ID0gdXNlcjJjcmVkaXRzKHItPmF2ZyAqIHItPmJ1cnN0KTsgLyogQ3JlZGl0cyBmdWxsLiAqLwogCQlyLT5jcmVkaXRfY2FwID0gdXNlcjJjcmVkaXRzKHItPmF2ZyAqIHItPmJ1cnN0KTsgLyogQ3JlZGl0cyBmdWxsLiAqLwogCQlyLT5jb3N0ID0gdXNlcjJjcmVkaXRzKHItPmF2Zyk7CiAJfQogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBsaW1pdF9tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCWtmcmVlKGluZm8tPm1hc3Rlcik7Cit9CisKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvIHsKIAl1X2ludDMyX3QgYXZnOwpAQCAtMTY3LDYgKzE4NCw3IEBACiAJLmZhbWlseSAgICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICAgICAgICA9IGxpbWl0X210LAogCS5jaGVja2VudHJ5ICAgICAgID0gbGltaXRfbXRfY2hlY2ssCisJLmRlc3Ryb3kgICAgICAgICAgPSBsaW1pdF9tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9yYXRlaW5mbyksCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRzaXplICAgICAgID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8pLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwppbmRleCAxYmNkZmMxLi40NGEyMzRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwpAQCAtMjAsMTMgKzIwLDMwIEBACiBNT0RVTEVfQUxJQVMoImlwdF9waHlzZGV2Iik7CiBNT0RVTEVfQUxJQVMoImlwNnRfcGh5c2RldiIpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpZm5hbWVfY29tcGFyZShjb25zdCBjaGFyICpfYSwgY29uc3QgY2hhciAqX2IsIGNvbnN0IGNoYXIgKl9tYXNrKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmEgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9hOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9iOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gKGFbMF0gXiBiWzBdKSAmIG1hc2tbMF07CisJaWYgKElGTkFNU0laID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMV0gXiBiWzFdKSAmIG1hc2tbMV07CisJaWYgKElGTkFNU0laID4gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzJdIF4gYlsyXSkgJiBtYXNrWzJdOworCWlmIChJRk5BTVNJWiA+IDMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVszXSBeIGJbM10pICYgbWFza1szXTsKKwlCVUlMRF9CVUdfT04oSUZOQU1TSVogPiA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgYm9vbAogcGh5c2Rldl9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQlpbnQgaTsKLQlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl07CisJc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGxvbmcpKSkpOwogCWNvbnN0IHN0cnVjdCB4dF9waHlzZGV2X2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQlib29sIHJldDsKKwl1bnNpZ25lZCBsb25nIHJldDsKIAljb25zdCBjaGFyICppbmRldiwgKm91dGRldjsKIAljb25zdCBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZTsKIApAQCAtNjgsMTEgKzg1LDcgQEAKIAlpZiAoIShpbmZvLT5iaXRtYXNrICYgWFRfUEhZU0RFVl9PUF9JTikpCiAJCWdvdG8gbWF0Y2hfb3V0ZGV2OwogCWluZGV2ID0gbmZfYnJpZGdlLT5waHlzaW5kZXYgPyBuZl9icmlkZ2UtPnBoeXNpbmRldi0+bmFtZSA6IG51bGxkZXZuYW1lOwotCWZvciAoaSA9IDAsIHJldCA9IGZhbHNlOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGludCk7IGkrKykgewotCQlyZXQgfD0gKCgoY29uc3QgdW5zaWduZWQgaW50ICopaW5kZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+cGh5c2luZGV2KVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5pbl9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUoaW5kZXYsIGluZm8tPnBoeXNpbmRldiwgaW5mby0+aW5fbWFzayk7CiAKIAlpZiAoIXJldCBeICEoaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9JTikpCiAJCXJldHVybiBmYWxzZTsKQEAgLTgyLDEzICs5NSw5IEBACiAJCXJldHVybiB0cnVlOwogCW91dGRldiA9IG5mX2JyaWRnZS0+cGh5c291dGRldiA/CiAJCSBuZl9icmlkZ2UtPnBoeXNvdXRkZXYtPm5hbWUgOiBudWxsZGV2bmFtZTsKLQlmb3IgKGkgPSAwLCByZXQgPSBmYWxzZTsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBpbnQpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGludCAqKW91dGRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5waHlzb3V0ZGV2KVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5vdXRfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKG91dGRldiwgaW5mby0+cGh5c291dGRldiwgaW5mby0+b3V0X21hc2spOwogCi0JcmV0dXJuIHJldCBeICEoaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9PVVQpOworCXJldHVybiAoISFyZXQgXiAhKGluZm8tPmludmVydCAmIFhUX1BIWVNERVZfT1BfT1VUKSk7CiB9CiAKIHN0YXRpYyBib29sIHBoeXNkZXZfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKaW5kZXggYzg0ZmNlNS4uMDFkZDA3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwpAQCAtOSw2ICs5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmg+CiAKK3N0cnVjdCB4dF9xdW90YV9wcml2IHsKKwl1aW50NjRfdCBxdW90YTsKK307CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlNhbSBKb2huc3RvbiA8c2FtakBzYW1qLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogY291bnRkb3duIHF1b3RhIG1hdGNoIik7CkBAIC0yMCwxOCArMjQsMjAgQEAKIHN0YXRpYyBib29sCiBxdW90YV9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9Ci0JCSgoY29uc3Qgc3RydWN0IHh0X3F1b3RhX2luZm8gKilwYXItPm1hdGNoaW5mbyktPm1hc3RlcjsKKwlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9ICh2b2lkICopcGFyLT5tYXRjaGluZm87CisJc3RydWN0IHh0X3F1b3RhX3ByaXYgKnByaXYgPSBxLT5tYXN0ZXI7CiAJYm9vbCByZXQgPSBxLT5mbGFncyAmIFhUX1FVT1RBX0lOVkVSVDsKIAogCXNwaW5fbG9ja19iaCgmcXVvdGFfbG9jayk7Ci0JaWYgKHEtPnF1b3RhID49IHNrYi0+bGVuKSB7Ci0JCXEtPnF1b3RhIC09IHNrYi0+bGVuOworCWlmIChwcml2LT5xdW90YSA+PSBza2ItPmxlbikgeworCQlwcml2LT5xdW90YSAtPSBza2ItPmxlbjsKIAkJcmV0ID0gIXJldDsKIAl9IGVsc2UgewogCQkvKiB3ZSBkbyBub3QgYWxsb3cgZXZlbiBzbWFsbCBwYWNrZXRzIGZyb20gbm93IG9uICovCi0JCXEtPnF1b3RhID0gMDsKKwkJcHJpdi0+cXVvdGEgPSAwOwogCX0KKwkvKiBDb3B5IHF1b3RhIGJhY2sgdG8gbWF0Y2hpbmZvIHNvIHRoYXQgaXB0YWJsZXMgY2FuIGRpc3BsYXkgaXQgKi8KKwlxLT5xdW90YSA9IHByaXYtPnF1b3RhOwogCXNwaW5fdW5sb2NrX2JoKCZxdW90YV9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC00MywxNyArNDksMjggQEAKIAogCWlmIChxLT5mbGFncyAmIH5YVF9RVU9UQV9NQVNLKQogCQlyZXR1cm4gZmFsc2U7Ci0JLyogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0IG9mIGNvdW50ZXJzLiAqLwotCXEtPm1hc3RlciA9IHE7CisKKwlxLT5tYXN0ZXIgPSBrbWFsbG9jKHNpemVvZigqcS0+bWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHEtPm1hc3RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBxdW90YV9tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9IHBhci0+bWF0Y2hpbmZvOworCisJa2ZyZWUocS0+bWFzdGVyKTsKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBxdW90YV9tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAgICAgICA9ICJxdW90YSIsCiAJLnJldmlzaW9uICAgPSAwLAogCS5mYW1pbHkgICAgID0gTkZQUk9UT19VTlNQRUMsCiAJLm1hdGNoICAgICAgPSBxdW90YV9tdCwKIAkuY2hlY2tlbnRyeSA9IHF1b3RhX210X2NoZWNrLAorCS5kZXN0cm95ICAgID0gcXVvdGFfbXRfZGVzdHJveSwKIAkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfcXVvdGFfaW5mbyksCiAJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwppbmRleCAwZDc1MTQxLi5kOGMwZjhmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKQEAgLTE2LDYgKzE2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogCitzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgeworCXVpbnQzMl90IGNvdW50OworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IHN0YXRpc3RpY3MtYmFzZWQgbWF0Y2hpbmcgKFwiTnRoXCIsIHJhbmRvbSkiKTsKQEAgLTI3LDcgKzMxLDcgQEAKIHN0YXRpYyBib29sCiBzdGF0aXN0aWNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0Jc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gKHZvaWQgKilwYXItPm1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAlib29sIHJldCA9IGluZm8tPmZsYWdzICYgWFRfU1RBVElTVElDX0lOVkVSVDsKIAogCXN3aXRjaCAoaW5mby0+bW9kZSkgewpAQCAtMzYsMTAgKzQwLDkgQEAKIAkJCXJldCA9ICFyZXQ7CiAJCWJyZWFrOwogCWNhc2UgWFRfU1RBVElTVElDX01PREVfTlRIOgotCQlpbmZvID0gaW5mby0+bWFzdGVyOwogCQlzcGluX2xvY2tfYmgoJm50aF9sb2NrKTsKLQkJaWYgKGluZm8tPnUubnRoLmNvdW50KysgPT0gaW5mby0+dS5udGguZXZlcnkpIHsKLQkJCWluZm8tPnUubnRoLmNvdW50ID0gMDsKKwkJaWYgKGluZm8tPm1hc3Rlci0+Y291bnQrKyA9PSBpbmZvLT51Lm50aC5ldmVyeSkgeworCQkJaW5mby0+bWFzdGVyLT5jb3VudCA9IDA7CiAJCQlyZXQgPSAhcmV0OwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZudGhfbG9jayk7CkBAIC01NiwxNiArNTksMzEgQEAKIAlpZiAoaW5mby0+bW9kZSA+IFhUX1NUQVRJU1RJQ19NT0RFX01BWCB8fAogCSAgICBpbmZvLT5mbGFncyAmIH5YVF9TVEFUSVNUSUNfTUFTSykKIAkJcmV0dXJuIGZhbHNlOwotCWluZm8tPm1hc3RlciA9IGluZm87CisKKwlpbmZvLT5tYXN0ZXIgPSBremFsbG9jKHNpemVvZigqaW5mby0+bWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8tPm1hc3RlciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpbmZvLT5tYXN0ZXItPmNvdW50ID0gaW5mby0+dS5udGguY291bnQ7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgc3RhdGlzdGljX210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCisJa2ZyZWUoaW5mby0+bWFzdGVyKTsKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB4dF9zdGF0aXN0aWNfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUgICAgICAgPSAic3RhdGlzdGljIiwKIAkucmV2aXNpb24gICA9IDAsCiAJLmZhbWlseSAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICA9IHN0YXRpc3RpY19tdCwKIAkuY2hlY2tlbnRyeSA9IHN0YXRpc3RpY19tdF9jaGVjaywKKwkuZGVzdHJveSAgICA9IHN0YXRpc3RpY19tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyksCiAJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9NYWtlZmlsZSBiL25ldC9uZXRsaW5rL01ha2VmaWxlCmluZGV4IGUzNTg5YzIuLmJkZDZkZGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL01ha2VmaWxlCisrKyBiL25ldC9uZXRsaW5rL01ha2VmaWxlCkBAIC0yLDQgKzIsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLgogIwogCi1vYmoteSAgCQkJCTo9IGFmX25ldGxpbmsubyBhdHRyLm8gZ2VuZXRsaW5rLm8KK29iai15ICAJCQkJOj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggM2FlM2NiOC4uOGI2YmJiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtODUsNiArODUsOCBAQAogCiAjZGVmaW5lIE5FVExJTktfS0VSTkVMX1NPQ0tFVAkweDEKICNkZWZpbmUgTkVUTElOS19SRUNWX1BLVElORk8JMHgyCisjZGVmaW5lIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IJMHg0CisjZGVmaW5lIE5FVExJTktfUkVDVl9OT19FTk9CVUZTCTB4OAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sa19zayhzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC03MTYsMTAgKzcxOCwxNSBAQAogCiBzdGF0aWMgdm9pZCBuZXRsaW5rX292ZXJydW4oc3RydWN0IHNvY2sgKnNrKQogewotCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmbmxrX3NrKHNrKS0+c3RhdGUpKSB7Ci0JCXNrLT5za19lcnIgPSBFTk9CVUZTOwotCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOworCisJaWYgKCEobmxrLT5mbGFncyAmIE5FVExJTktfUkVDVl9OT19FTk9CVUZTKSkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJm5sa19zayhzayktPnN0YXRlKSkgeworCQkJc2stPnNrX2VyciA9IEVOT0JVRlM7CisJCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwkJfQogCX0KKwlhdG9taWNfaW5jKCZzay0+c2tfZHJvcHMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNvY2sgKm5ldGxpbmtfZ2V0c29ja2J5cGlkKHN0cnVjdCBzb2NrICpzc2ssIHUzMiBwaWQpCkBAIC05NTAsNiArOTU3LDcgQEAKIAl1MzIgcGlkOwogCXUzMiBncm91cDsKIAlpbnQgZmFpbHVyZTsKKwlpbnQgZGVsaXZlcnlfZmFpbHVyZTsKIAlpbnQgY29uZ2VzdGVkOwogCWludCBkZWxpdmVyZWQ7CiAJZ2ZwX3QgYWxsb2NhdGlvbjsKQEAgLTk5NCwxMSArMTAwMiwxNSBAQAogCQluZXRsaW5rX292ZXJydW4oc2spOwogCQkvKiBDbG9uZSBmYWlsZWQuIE5vdGlmeSBBTEwgbGlzdGVuZXJzLiAqLwogCQlwLT5mYWlsdXJlID0gMTsKKwkJaWYgKG5say0+ZmxhZ3MgJiBORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SKQorCQkJcC0+ZGVsaXZlcnlfZmFpbHVyZSA9IDE7CiAJfSBlbHNlIGlmIChza19maWx0ZXIoc2ssIHAtPnNrYjIpKSB7CiAJCWtmcmVlX3NrYihwLT5za2IyKTsKIAkJcC0+c2tiMiA9IE5VTEw7CiAJfSBlbHNlIGlmICgodmFsID0gbmV0bGlua19icm9hZGNhc3RfZGVsaXZlcihzaywgcC0+c2tiMikpIDwgMCkgewogCQluZXRsaW5rX292ZXJydW4oc2spOworCQlpZiAobmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IpCisJCQlwLT5kZWxpdmVyeV9mYWlsdXJlID0gMTsKIAl9IGVsc2UgewogCQlwLT5jb25nZXN0ZWQgfD0gdmFsOwogCQlwLT5kZWxpdmVyZWQgPSAxOwpAQCAtMTAyNSw2ICsxMDM3LDcgQEAKIAlpbmZvLnBpZCA9IHBpZDsKIAlpbmZvLmdyb3VwID0gZ3JvdXA7CiAJaW5mby5mYWlsdXJlID0gMDsKKwlpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUgPSAwOwogCWluZm8uY29uZ2VzdGVkID0gMDsKIAlpbmZvLmRlbGl2ZXJlZCA9IDA7CiAJaW5mby5hbGxvY2F0aW9uID0gYWxsb2NhdGlvbjsKQEAgLTEwNDIsMTYgKzEwNTUsMTYgQEAKIAogCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAKLQlpZiAoaW5mby5za2IyKQotCQlrZnJlZV9za2IoaW5mby5za2IyKTsKKwlrZnJlZV9za2IoaW5mby5za2IyKTsKKworCWlmIChpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUpCisJCXJldHVybiAtRU5PQlVGUzsKIAogCWlmIChpbmZvLmRlbGl2ZXJlZCkgewogCQlpZiAoaW5mby5jb25nZXN0ZWQgJiYgKGFsbG9jYXRpb24gJiBfX0dGUF9XQUlUKSkKIAkJCXlpZWxkKCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoaW5mby5mYWlsdXJlKQotCQlyZXR1cm4gLUVOT0JVRlM7CiAJcmV0dXJuIC1FU1JDSDsKIH0KIEVYUE9SVF9TWU1CT0wobmV0bGlua19icm9hZGNhc3QpOwpAQCAtMTExMCw2ICsxMTIzLDcgQEAKIAogCXJlYWRfdW5sb2NrKCZubF90YWJsZV9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0wobmV0bGlua19zZXRfZXJyKTsKIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBuZXRsaW5rIHRhYmxlIGdyYWJiZWQgKi8KIHN0YXRpYyB2b2lkIG5ldGxpbmtfdXBkYXRlX3NvY2tldF9tYyhzdHJ1Y3QgbmV0bGlua19zb2NrICpubGssCkBAIC0xMTY3LDYgKzExODEsMjIgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmICh2YWwpCisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVsc2UKKwkJCW5say0+ZmxhZ3MgJj0gfk5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAodmFsKSB7CisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfUkVDVl9OT19FTk9CVUZTOworCQkJY2xlYXJfYml0KDAsICZubGstPnN0YXRlKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbmxrLT53YWl0KTsKKwkJfSBlbHNlCisJCQlubGstPmZsYWdzICY9IH5ORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUzsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTExOTksNiArMTIyOSwyNiBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWVyciA9IDA7CiAJCWJyZWFrOworCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlsZW4gPSBzaXplb2YoaW50KTsKKwkJdmFsID0gbmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IgPyAxIDogMDsKKwkJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSB8fAorCQkgICAgcHV0X3VzZXIodmFsLCBvcHR2YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuID0gc2l6ZW9mKGludCk7CisJCXZhbCA9IG5say0+ZmxhZ3MgJiBORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUyA/IDEgOiAwOworCQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8CisJCSAgICBwdXRfdXNlcih2YWwsIG9wdHZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTE1MjUsOCArMTU3NSw3IEBACiAKIHN0YXRpYyB2b2lkIG5ldGxpbmtfZGVzdHJveV9jYWxsYmFjayhzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0JaWYgKGNiLT5za2IpCi0JCWtmcmVlX3NrYihjYi0+c2tiKTsKKwlrZnJlZV9za2IoY2ItPnNrYik7CiAJa2ZyZWUoY2IpOwogfQogCkBAIC0xNzQzLDEyICsxNzkyLDE4IEBACiAJCQlleGNsdWRlX3BpZCA9IHBpZDsKIAkJfQogCi0JCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciAqLwotCQlubG1zZ19tdWx0aWNhc3Qoc2ssIHNrYiwgZXhjbHVkZV9waWQsIGdyb3VwLCBmbGFncyk7CisJCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciwgYnV0IHByb3BhZ2F0ZQorCQkgKiBkZWxpdmVyeSBlcnJvcnMgaWYgTkVUTElOS19CUk9BRENBU1RfRVJST1IgZmxhZyBpcyBzZXQgKi8KKwkJZXJyID0gbmxtc2dfbXVsdGljYXN0KHNrLCBza2IsIGV4Y2x1ZGVfcGlkLCBncm91cCwgZmxhZ3MpOwogCX0KIAotCWlmIChyZXBvcnQpCi0JCWVyciA9IG5sbXNnX3VuaWNhc3Qoc2ssIHNrYiwgcGlkKTsKKwlpZiAocmVwb3J0KSB7CisJCWludCBlcnIyOworCisJCWVycjIgPSBubG1zZ191bmljYXN0KHNrLCBza2IsIHBpZCk7CisJCWlmICghZXJyIHx8IGVyciA9PSAtRVNSQ0gpCisJCQllcnIgPSBlcnIyOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0xODQ5LDEyICsxOTA0LDEyIEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsCiAJCQkgInNrICAgICAgIEV0aCBQaWQgICAgR3JvdXBzICAgIgotCQkJICJSbWVtICAgICBXbWVtICAgICBEdW1wICAgICBMb2Nrc1xuIik7CisJCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzICAgICBEcm9wc1xuIik7CiAJZWxzZSB7CiAJCXN0cnVjdCBzb2NrICpzID0gdjsKIAkJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHMpOwogCi0JCXNlcV9wcmludGYoc2VxLCAiJXAgJS0zZCAlLTZkICUwOHggJS04ZCAlLThkICVwICVkXG4iLAorCQlzZXFfcHJpbnRmKHNlcSwgIiVwICUtM2QgJS02ZCAlMDh4ICUtOGQgJS04ZCAlcCAlLThkICUtOGRcbiIsCiAJCQkgICBzLAogCQkJICAgcy0+c2tfcHJvdG9jb2wsCiAJCQkgICBubGstPnBpZCwKQEAgLTE4NjIsNyArMTkxNyw4IEBACiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcm1lbV9hbGxvYyksCiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfd21lbV9hbGxvYyksCiAJCQkgICBubGstPmNiLAotCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JlZmNudCkKKwkJCSAgIGF0b21pY19yZWFkKCZzLT5za19yZWZjbnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX2Ryb3BzKQogCQkJKTsKIAogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCmluZGV4IGU5YzA1YjhmLi42ZDljNThlIDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTEwMzcsNiArMTAzNywxMCBAQAogCXVuc2lnbmVkIGNoYXIgKmFzbXB0cjsKIAlpbnQgc2l6ZTsKIAorCS8qIE5ldHJvbSBlbXB0eSBkYXRhIGZyYW1lIGhhcyBubyBtZWFuaW5nIDogZG9uJ3Qgc2VuZCAqLworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAobXNnLT5tc2dfZmxhZ3MgJiB+KE1TR19ET05UV0FJVHxNU0dfRU9SfE1TR19DTVNHX0NPTVBBVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTY3LDYgKzExNzEsMTEgQEAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCWNvcGllZCAgICAgPSBza2ItPmxlbjsKIAorCS8qIE5ldFJvbSBlbXB0eSBkYXRhIGZyYW1lIGhhcyBubyBtZWFuaW5nIDogaWdub3JlIGl0ICovCisJaWYgKGNvcGllZCA9PSAwKSB7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChjb3BpZWQgPiBzaXplKSB7CiAJCWNvcGllZCA9IHNpemU7CiAJCW1zZy0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKQEAgLTExODIsNyArMTE5MSw3IEBACiAKIAltc2ctPm1zZ19uYW1lbGVuID0gc2l6ZW9mKCpzYXgpOwogCi0Jc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CitvdXQ6CXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwogCiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gY29waWVkOwpAQCAtMTQzMiw3ICsxNDQxLDcgQEAKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCQlzcHJpbnRmKG5hbWUsICJuciVkIiwgaSk7Ci0JCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IG5yX3ByaXZhdGUpLCBuYW1lLCBucl9zZXR1cCk7CisJCWRldiA9IGFsbG9jX25ldGRldigwLCBuYW1lLCBucl9zZXR1cCk7CiAJCWlmICghZGV2KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIk5FVC9ST006IG5yX3Byb3RvX2luaXQgLSB1bmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlIHN0cnVjdHVyZVxuIik7CiAJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL25yX2Rldi5jIGIvbmV0L25ldHJvbS9ucl9kZXYuYwppbmRleCA2Y2FmNDU5Li4zNTEzNzI0IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL25yX2Rldi5jCisrKyBiL25ldC9uZXRyb20vbnJfZGV2LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogaW50IG5yX3J4X2lwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXN0YXRzLT5yeF9kcm9wcGVkKys7CkBAIC0xNzEsOCArMTcxLDcgQEAKIAogc3RhdGljIGludCBucl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5yX3ByaXZhdGUgKm5yID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbnItPnN0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKIAogCWlmICghbnJfcm91dGVfZnJhbWUoc2tiLCBOVUxMKSkgewpAQCAtMTg3LDM0ICsxODYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpucl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbnJfcHJpdmF0ZSAqbnIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZuci0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBucl9oZWFkZXJfb3BzID0gewogCS5jcmVhdGUJPSBucl9oZWFkZXIsCiAJLnJlYnVpbGQ9IG5yX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBucl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBucl9vcGVuLAorCS5uZG9fc3RvcAkJPSBucl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbnJfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IG5yX3NldF9tYWNfYWRkcmVzcywKK307CiAKIHZvaWQgbnJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPm10dQkJPSBOUl9NQVhfUEFDS0VUX1NJWkU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBucl94bWl0OwotCWRldi0+b3BlbgkJPSBucl9vcGVuOwotCWRldi0+c3RvcAkJPSBucl9jbG9zZTsKLQorCWRldi0+bmV0ZGV2X29wcwkJPSAmbnJfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJm5yX2hlYWRlcl9vcHM7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBOUl9ORVRXT1JLX0xFTiArIE5SX1RSQU5TUE9SVF9MRU47CiAJZGV2LT5hZGRyX2xlbgkJPSBBWDI1X0FERFJfTEVOOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfTkVUUk9NOwotCWRldi0+c2V0X21hY19hZGRyZXNzICAgID0gbnJfc2V0X21hY19hZGRyZXNzOwogCiAJLyogTmV3LXN0eWxlIGZsYWdzLiAqLwogCWRldi0+ZmxhZ3MJCT0gSUZGX05PQVJQOwotCi0JZGV2LT5nZXRfc3RhdHMgCQk9IG5yX2dldF9zdGF0czsKIH0KZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDFmYzRhNzguLjc0Nzc2ZGUgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtNTg0LDcgKzU4NCw3IEBACiAJCXNrYi0+bGVuID0gc2tiX2xlbjsKIAl9CiBkcm9wOgotCWtmcmVlX3NrYihza2IpOworCWNvbnN1bWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1Niw4ICs3NTYsNyBAQAogCXNwaW5fdW5sb2NrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKIAogCXNrLT5za19kYXRhX3JlYWR5KHNrLCAwKTsKLQlpZiAoY29weV9za2IpCi0JCWtmcmVlX3NrYihjb3B5X3NrYik7CisJa2ZyZWVfc2tiKGNvcHlfc2tiKTsKIAlnb3RvIGRyb3Bfbl9yZXN0b3JlOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jIGIvbmV0L3Bob25ldC9hZl9waG9uZXQuYwppbmRleCAxM2NiMzIzLi5hNjYyZTYyIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCisrKyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKQEAgLTI3NSw4ICsyNzUsNiBAQAogCQlyZXR1cm4gMDsKIAogCXBoID0gcG5faGRyKHNrYik7Ci0JaWYgKHBob25ldF9hZGRyZXNzX2dldChza2ItPmRldiwgcGgtPnBuX3JkZXYpICE9IHBoLT5wbl9yZGV2KQotCQlyZXR1cm4gMDsgLyogd2UgYXJlIG5vdCB0aGUgZGVzdGluYXRpb24gKi8KIAlpZiAocGgtPnBuX3JlcyA9PSBQTl9QUkVGSVggJiYgIXBza2JfbWF5X3B1bGwoc2tiLCA1KSkKIAkJcmV0dXJuIDA7CiAJaWYgKHBoLT5wbl9yZXMgPT0gUE5fQ09NTUdSKSAvKiBpbmRpY2F0aW9ucyAqLwpAQCAtMzQ0LDggKzM0Miw4IEBACiAJCQlzdHJ1Y3QgcGFja2V0X3R5cGUgKnBrdHR5cGUsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBwaG9uZXRoZHIgKnBoOwotCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3Qgc29ja2FkZHJfcG4gc2E7CiAJdTE2IGxlbjsKIApAQCAtMzY0LDI5ICszNjIsMjggQEAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCiAJcG5fc2tiX2dldF9kc3Rfc29ja2FkZHIoc2tiLCAmc2EpOwotCWlmIChwbl9zb2NrYWRkcl9nZXRfYWRkcigmc2EpID09IDApCi0JCWdvdG8gb3V0OyAvKiBjdXJyZW50bHksIHdlIGNhbm5vdCBiZSBkZXZpY2UgMCAqLwogCi0Jc2sgPSBwbl9maW5kX3NvY2tfYnlfc2EoZGV2X25ldChkZXYpLCAmc2EpOwotCWlmIChzayA9PSBOVUxMKSB7CisJLyogY2hlY2sgaWYgd2UgYXJlIHRoZSBkZXN0aW5hdGlvbiAqLworCWlmIChwaG9uZXRfYWRkcmVzc19sb29rdXAobmV0LCBwbl9zb2NrYWRkcl9nZXRfYWRkcigmc2EpKSA9PSAwKSB7CisJCS8qIFBob25ldCBwYWNrZXQgaW5wdXQgKi8KKwkJc3RydWN0IHNvY2sgKnNrID0gcG5fZmluZF9zb2NrX2J5X3NhKG5ldCwgJnNhKTsKKworCQlpZiAoc2spCisJCQlyZXR1cm4gc2tfcmVjZWl2ZV9za2Ioc2ssIHNrYiwgMCk7CisKIAkJaWYgKGNhbl9yZXNwb25kKHNrYikpIHsKIAkJCXNlbmRfb2JqX3VucmVhY2hhYmxlKHNrYik7CiAJCQlzZW5kX3Jlc2V0X2luZGljYXRpb25zKHNrYik7CiAJCX0KLQkJZ290byBvdXQ7CiAJfQogCi0JLyogUHVzaCBkYXRhIHRvIHRoZSBzb2NrZXQgKG9yIG90aGVyIHNvY2tldHMgY29ubmVjdGVkIHRvIGl0KS4gKi8KLQlyZXR1cm4gc2tfcmVjZWl2ZV9za2Ioc2ssIHNrYiwgMCk7Ci0KIG91dDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcGhvbmV0X3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QSE9ORVQpLAotCS5kZXYgPSBOVUxMLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwaG9uZXRfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX1BIT05FVCksCiAJLmZ1bmMgPSBwaG9uZXRfcmN2LAogfTsKIApAQCAtNDI4LDE2ICs0MjUsMTggQEAKIHsKIAlpbnQgZXJyOwogCisJZXJyID0gcGhvbmV0X2RldmljZV9pbml0KCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWVyciA9IHNvY2tfcmVnaXN0ZXIoJnBob25ldF9wcm90b19mYW1pbHkpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQKIAkJCSJwaG9uZXQgcHJvdG9jb2wgZmFtaWx5IGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX3NvY2s7CiAJfQogCi0JcGhvbmV0X2RldmljZV9pbml0KCk7CiAJZGV2X2FkZF9wYWNrKCZwaG9uZXRfcGFja2V0X3R5cGUpOwotCXBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKCk7CiAJcGhvbmV0X3N5c2N0bF9pbml0KCk7CiAKIAllcnIgPSBpc2lfcmVnaXN0ZXIoKTsKQEAgLTQ0OSw2ICs0NDgsNyBAQAogCXBob25ldF9zeXNjdGxfZXhpdCgpOwogCXNvY2tfdW5yZWdpc3RlcihQRl9QSE9ORVQpOwogCWRldl9yZW1vdmVfcGFjaygmcGhvbmV0X3BhY2tldF90eXBlKTsKK2Vycl9zb2NrOgogCXBob25ldF9kZXZpY2VfZXhpdCgpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX2Rldi5jIGIvbmV0L3Bob25ldC9wbl9kZXYuYwppbmRleCA1NDkxYmY1Li44MGEzMjJkIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX2Rldi5jCisrKyBiL25ldC9waG9uZXQvcG5fZGV2LmMKQEAgLTI4LDMyICsyOCw0MSBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bob25ldC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxuZXQvcGhvbmV0L3BuX2Rldi5oPgogCi0vKiB3aGVuIGFjY2Vzc2luZywgcmVtZW1iZXIgdG8gbG9jayB3aXRoIHNwaW5fbG9jaygmcG5kZXZzLmxvY2spOyAqLwotc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCBwbmRldnMgPSB7Ci0JLmxpc3QgPSBMSVNUX0hFQURfSU5JVChwbmRldnMubGlzdCksCi0JLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChwbmRldnMubG9jayksCitzdHJ1Y3QgcGhvbmV0X25ldCB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCBwbmRldnM7CiB9OwogCitpbnQgcGhvbmV0X25ldF9pZDsKKworc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcGhvbmV0X2RldmljZV9saXN0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcGhvbmV0X25ldCAqcG5uID0gbmV0X2dlbmVyaWMobmV0LCBwaG9uZXRfbmV0X2lkKTsKKwlyZXR1cm4gJnBubi0+cG5kZXZzOworfQorCiAvKiBBbGxvY2F0ZSBuZXcgUGhvbmV0IGRldmljZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgcGhvbmV0X2RldmljZSAqX19waG9uZXRfZGV2aWNlX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZCA9IGttYWxsb2Moc2l6ZW9mKCpwbmQpLCBHRlBfQVRPTUlDKTsKIAlpZiAocG5kID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXBuZC0+bmV0ZGV2ID0gZGV2OwogCWJpdG1hcF96ZXJvKHBuZC0+YWRkcnMsIDY0KTsKIAotCWxpc3RfYWRkKCZwbmQtPmxpc3QsICZwbmRldnMubGlzdCk7CisJbGlzdF9hZGQoJnBuZC0+bGlzdCwgJnBuZGV2cy0+bGlzdCk7CiAJcmV0dXJuIHBuZDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaG9uZXRfZGV2aWNlICpfX3Bob25ldF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMubGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLT5saXN0LCBsaXN0KSB7CiAJCWlmIChwbmQtPm5ldGRldiA9PSBkZXYpCiAJCQlyZXR1cm4gcG5kOwogCX0KQEAgLTY4LDMyICs3NywzMyBAQAogCiBzdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X2RldmljZV9nZXQoc3RydWN0IG5ldCAqbmV0KQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChuZXQpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMtPmxpc3QsIGxpc3QpIHsKIAkJZGV2ID0gcG5kLT5uZXRkZXY7CiAJCUJVR19PTighZGV2KTsKIAotCQlpZiAobmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSAmJgotCQkJKGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKSAmJgorCQlpZiAoKGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKSAmJgogCQkJKChwbmQtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKSA9PSBJRkZfVVApCiAJCQlicmVhazsKIAkJZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldikKIAkJZGV2X2hvbGQoZGV2KTsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBkZXY7CiB9CiAKIGludCBwaG9uZXRfYWRkcmVzc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCWludCBlcnIgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCS8qIEZpbmQgb3IgY3JlYXRlIFBob25ldC1zcGVjaWZpYyBkZXZpY2UgZGF0YSAqLwogCXBuZCA9IF9fcGhvbmV0X2dldChkZXYpOwogCWlmIChwbmQgPT0gTlVMTCkKQEAgLTEwMiwzMSArMTEyLDMzIEBACiAJCWVyciA9IC1FTk9NRU07CiAJZWxzZSBpZiAodGVzdF9hbmRfc2V0X2JpdChhZGRyID4+IDIsIHBuZC0+YWRkcnMpKQogCQllcnIgPSAtRUVYSVNUOwotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAogaW50IHBob25ldF9hZGRyZXNzX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcG5kID0gX19waG9uZXRfZ2V0KGRldik7CiAJaWYgKCFwbmQgfHwgIXRlc3RfYW5kX2NsZWFyX2JpdChhZGRyID4+IDIsIHBuZC0+YWRkcnMpKQogCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAllbHNlIGlmIChiaXRtYXBfZW1wdHkocG5kLT5hZGRycywgNjQpKQogCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOwotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAogLyogR2V0cyBhIHNvdXJjZSBhZGRyZXNzIHRvd2FyZCBhIGRlc3RpbmF0aW9uLCB0aHJvdWdoIGEgaW50ZXJmYWNlLiAqLwogdTggcGhvbmV0X2FkZHJlc3NfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlwbmQgPSBfX3Bob25ldF9nZXQoZGV2KTsKIAlpZiAocG5kKSB7CiAJCUJVR19PTihiaXRtYXBfZW1wdHkocG5kLT5hZGRycywgNjQpKTsKQEAgLTEzNiwzMCArMTQ4LDMxIEBACiAJCQlhZGRyID0gZmluZF9maXJzdF9iaXQocG5kLT5hZGRycywgNjQpIDw8IDI7CiAJfSBlbHNlCiAJCWFkZHIgPSBQTl9OT19BRERSOwotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcmV0dXJuIGFkZHI7CiB9CiAKIGludCBwaG9uZXRfYWRkcmVzc19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1OCBhZGRyKQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChuZXQpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CisJaW50IGVyciA9IC1FQUREUk5PVEFWQUlMOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMubGlzdCwgbGlzdCkgewotCQlpZiAoIW5ldF9lcShkZXZfbmV0KHBuZC0+bmV0ZGV2KSwgbmV0KSkKLQkJCWNvbnRpbnVlOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy0+bGlzdCwgbGlzdCkgewogCQkvKiBEb24ndCBhbGxvdyB1bnJlZ2lzdGVyaW5nIGRldmljZXMhICovCiAJCWlmICgocG5kLT5uZXRkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkgfHwKIAkJCQkoKHBuZC0+bmV0ZGV2LT5mbGFncyAmIElGRl9VUCkpICE9IElGRl9VUCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICh0ZXN0X2JpdChhZGRyID4+IDIsIHBuZC0+YWRkcnMpKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOwotCQkJcmV0dXJuIDA7CisJCQllcnIgPSAwOworCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOwotCXJldHVybiAtRUFERFJOT1RBVkFJTDsKK2ZvdW5kOgorCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOworCXJldHVybiBlcnI7CiB9CiAKIC8qIG5vdGlmeSBQaG9uZXQgb2YgZGV2aWNlIGV2ZW50cyAqLwpAQCAtMTY5LDE0ICsxODIsMTYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOwogCiAJaWYgKHdoYXQgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKKwkJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzOwogCQlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCiAJCS8qIERlc3Ryb3kgcGhvbmV0LXNwZWNpZmljIGRldmljZSBkYXRhICovCi0JCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOworCQlwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKKwkJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCQlwbmQgPSBfX3Bob25ldF9nZXQoZGV2KTsKIAkJaWYgKHBuZCkKIAkJCV9fcGhvbmV0X2RldmljZV9mcmVlKHBuZCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCX0KIAlyZXR1cm4gMDsKIApAQCAtMTg3LDI0ICsyMDIsNTIgQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotLyogSW5pdGlhbGl6ZSBQaG9uZXQgZGV2aWNlcyBsaXN0ICovCi12b2lkIHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKQorLyogUGVyLW5hbWVzcGFjZSBQaG9uZXQgZGV2aWNlcyBoYW5kbGluZyAqLworc3RhdGljIGludCBwaG9uZXRfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogeworCXN0cnVjdCBwaG9uZXRfbmV0ICpwbm4gPSBrbWFsbG9jKHNpemVvZigqcG5uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbm4pCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJnBubi0+cG5kZXZzLmxpc3QpOworCXNwaW5fbG9ja19pbml0KCZwbm4tPnBuZGV2cy5sb2NrKTsKKwluZXRfYXNzaWduX2dlbmVyaWMobmV0LCBwaG9uZXRfbmV0X2lkLCBwbm4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwaG9uZXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBwaG9uZXRfbmV0ICpwbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHBob25ldF9uZXRfaWQpOworCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBuZCwgbiwgJnBubi0+cG5kZXZzLmxpc3QsIGxpc3QpCisJCV9fcGhvbmV0X2RldmljZV9mcmVlKHBuZCk7CisKKwlrZnJlZShwbm4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBob25ldF9uZXRfb3BzID0geworCS5pbml0ID0gcGhvbmV0X2luaXRfbmV0LAorCS5leGl0ID0gcGhvbmV0X2V4aXRfbmV0LAorfTsKKworLyogSW5pdGlhbGl6ZSBQaG9uZXQgZGV2aWNlcyBsaXN0ICovCitpbnQgX19pbml0IHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmcGhvbmV0X25ldF9pZCwgJnBob25ldF9uZXRfb3BzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwaG9uZXRfZGV2aWNlX25vdGlmaWVyKTsKKwllcnIgPSBwaG9uZXRfbmV0bGlua19yZWdpc3RlcigpOworCWlmIChlcnIpCisJCXBob25ldF9kZXZpY2VfZXhpdCgpOworCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgcGhvbmV0X2RldmljZV9leGl0KHZvaWQpCiB7Ci0Jc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZCwgKm47Ci0KIAlydG5sX3VucmVnaXN0ZXJfYWxsKFBGX1BIT05FVCk7Ci0JcnRubF9sb2NrKCk7Ci0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG5kLCBuLCAmcG5kZXZzLmxpc3QsIGxpc3QpCi0JCV9fcGhvbmV0X2RldmljZV9mcmVlKHBuZCk7Ci0KLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOwotCXJ0bmxfdW5sb2NrKCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBob25ldF9kZXZpY2Vfbm90aWZpZXIpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UocGhvbmV0X25ldF9pZCwgJnBob25ldF9uZXRfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcG5fbmV0bGluay5jIGIvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMKaW5kZXggMjQyZmU4Zi4uY2VjNGU1OSAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMKKysrIGIvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMKQEAgLTQ3LDggKzQ3LDkgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIGRldl9uZXQoZGV2KSwgMCwKLQkJCSAgUlROTEdSUF9QSE9ORVRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsIGRldl9uZXQoZGV2KSwgMCwKKwkJICAgIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoZGV2X25ldChkZXYpLCBSVE5MR1JQX1BIT05FVF9JRkFERFIsIGVycik7CkBAIC0xMjMsMTcgKzEyNCwxNiBAQAogCiBzdGF0aWMgaW50IGdldGFkZHJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnM7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAlpbnQgZGV2X2lkeCA9IDAsIGRldl9zdGFydF9pZHggPSBjYi0+YXJnc1swXTsKIAlpbnQgYWRkcl9pZHggPSAwLCBhZGRyX3N0YXJ0X2lkeCA9IGNiLT5hcmdzWzFdOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMubGlzdCwgbGlzdCkgeworCXBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChzb2NrX25ldChza2ItPnNrKSk7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLT5saXN0LCBsaXN0KSB7CiAJCXU4IGFkZHI7CiAKLQkJaWYgKCFuZXRfZXEoZGV2X25ldChwbmQtPm5ldGRldiksIG5ldCkpCi0JCQljb250aW51ZTsKIAkJaWYgKGRldl9pZHggPiBkZXZfc3RhcnRfaWR4KQogCQkJYWRkcl9zdGFydF9pZHggPSAwOwogCQlpZiAoZGV2X2lkeCsrIDwgZGV2X3N0YXJ0X2lkeCkKQEAgLTE1MywxNiArMTUzLDIxIEBACiAJfQogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAljYi0+YXJnc1swXSA9IGRldl9pZHg7CiAJY2ItPmFyZ3NbMV0gPSBhZGRyX2lkeDsKIAogCXJldHVybiBza2ItPmxlbjsKIH0KIAotdm9pZCBfX2luaXQgcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIodm9pZCkKK2ludCBfX2luaXQgcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIodm9pZCkKIHsKLQlydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX05FV0FERFIsIGFkZHJfZG9pdCwgTlVMTCk7Ci0JcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9ERUxBRERSLCBhZGRyX2RvaXQsIE5VTEwpOwotCXJ0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fR0VUQUREUiwgTlVMTCwgZ2V0YWRkcl9kdW1waXQpOworCWludCBlcnIgPSBfX3J0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fTkVXQUREUiwgYWRkcl9kb2l0LCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRnVydGhlciBfX3J0bmxfcmVnaXN0ZXIoKSBjYW5ub3QgZmFpbCAqLworCV9fcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9ERUxBRERSLCBhZGRyX2RvaXQsIE5VTEwpOworCV9fcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9HRVRBRERSLCBOVUxMLCBnZXRhZGRyX2R1bXBpdCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvcmRzL0tjb25maWcgYi9uZXQvcmRzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2NzczYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACisKK2NvbmZpZyBSRFMKKwl0cmlzdGF0ZSAiUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUkRTKSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElORVQgJiYgSU5GSU5JQkFORF9JUE9JQiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElORklOSUJBTkQgJiYgSU5GSU5JQkFORF9BRERSX1RSQU5TCisJLS0taGVscC0tLQorCSAgUkRTIHByb3ZpZGVzIHJlbGlhYmxlLCBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgZGF0YWdyYW1zCisJICBvdmVyIEluZmluaWJhbmQuCisKK2NvbmZpZyBSRFNfREVCVUcKKyAgICAgICAgYm9vbCAiRGVidWdnaW5nIG1lc3NhZ2VzIgorCWRlcGVuZHMgb24gUkRTCisgICAgICAgIGRlZmF1bHQgbgorCmRpZmYgLS1naXQgYS9uZXQvcmRzL01ha2VmaWxlIGIvbmV0L3Jkcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWYyNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitvYmotJChDT05GSUdfUkRTKSArPSByZHMubworcmRzLXkgOj0JYWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFwKKwkJCXJlY3YubyBzZW5kLm8gc3RhdHMubyBzeXNjdGwubyB0aHJlYWRzLm8gdHJhbnNwb3J0Lm8gXAorCQkJbG9vcC5vIHBhZ2UubyByZG1hLm8gXAorCQkJcmRtYV90cmFuc3BvcnQubyBcCisJCQlpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcCisJCQlpYl9zeXNjdGwubyBpYl9yZG1hLm8gXAorCQkJaXcubyBpd19jbS5vIGl3X3JlY3YubyBpd19yaW5nLm8gaXdfc2VuZC5vIGl3X3N0YXRzLm8gXAorCQkJaXdfc3lzY3RsLm8gaXdfcmRtYS5vCisKK2lmZXEgKCQoQ09ORklHX1JEU19ERUJVRyksIHkpCitFWFRSQV9DRkxBR1MgKz0gLURERUJVRworZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9hZl9yZHMuYyBiL25ldC9yZHMvYWZfcmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjZjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvYWZfcmRzLmMKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworLyogdGhpcyBpcyBqdXN0IHVzZWQgZm9yIHN0YXRzIGdhdGhlcmluZyA6LyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfc29ja19sb2NrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19zb2NrX2NvdW50Oworc3RhdGljIExJU1RfSEVBRChyZHNfc29ja19saXN0KTsKK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19wb2xsX3dhaXRxKTsKKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGFzIHRoZSBmaW5hbCBkZXNjcmlwdG9yIHJlZmVyZW5jaW5nIHRoaXMgc29ja2V0IGlzIGNsb3NlZC4KKyAqIFdlIGhhdmUgdG8gdW5iaW5kIHRoZSBzb2NrZXQgc28gdGhhdCBhbm90aGVyIHNvY2tldCBjYW4gYmUgYm91bmQgdG8gdGhlCisgKiBhZGRyZXNzIGl0IHdhcyB1c2luZy4KKyAqCisgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgcmFjaW5nIHdpdGggdGhlIGluY29taW5nIHBhdGguICBzb2NrX29ycGhhbigpCisgKiBzZXRzIFNPQ0tfREVBRCBhbmQgd2UgdXNlIHRoYXQgYXMgYW4gaW5kaWNhdG9yIHRvIHRoZSByeCBwYXRoIHRoYXQgbmV3CisgKiBtZXNzYWdlcyBzaG91bGRuJ3QgYmUgcXVldWVkLgorICovCitzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNrID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcnMgPSByZHNfc2tfdG9fcnMoc2spOworCisJc29ja19vcnBoYW4oc2spOworCS8qIE5vdGUgLSByZHNfY2xlYXJfcmVjdl9xdWV1ZSBncmFicyByc19yZWN2X2xvY2ssIHNvCisJICogdGhhdCBlbnN1cmVzIHRoZSByZWN2IHBhdGggaGFzIGNvbXBsZXRlZCBtZXNzaW5nCisJICogd2l0aCB0aGUgc29ja2V0LiAqLworCXJkc19jbGVhcl9yZWN2X3F1ZXVlKHJzKTsKKwlyZHNfY29uZ19yZW1vdmVfc29ja2V0KHJzKTsKKwlyZHNfcmVtb3ZlX2JvdW5kKHJzKTsKKwlyZHNfc2VuZF9kcm9wX3RvKHJzLCBOVUxMKTsKKwlyZHNfcmRtYV9kcm9wX2tleXMocnMpOworCXJkc19ub3RpZnlfcXVldWVfZ2V0KHJzLCBOVUxMKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmcnMtPnJzX2l0ZW0pOworCXJkc19zb2NrX2NvdW50LS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJc29jay0+c2sgPSBOVUxMOworCXNvY2tfcHV0KHNrKTsKK291dDoKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhcmVmdWwgbm90IHRvIHJhY2Ugd2l0aCByZHNfcmVsZWFzZSAtPiBzb2NrX29ycGhhbiB3aGljaCBjbGVhcnMgc2tfc2xlZXAuCisgKiBfYmgoKSBpc24ndCBPSyBoZXJlLCB3ZSdyZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMuICBJdCdzIHByb2JhYmx5IE9LCisgKiB0byB3YWtlIHRoZSB3YWl0cXVldWUgYWZ0ZXIgc2tfc2xlZXAgaXMgY2xlYXIgYXMgd2UgaG9sZCBhIHNvY2sgcmVmLCBidXQKKyAqIHRoaXMgc2VlbXMgbW9yZSBjb25zZXJ2YXRpdmUuCisgKiBOQiAtIG5vcm1hbGx5LCBvbmUgd291bGQgdXNlIHNrX2NhbGxiYWNrX2xvY2sgZm9yIHRoaXMsIGJ1dCB3ZSBjYW4KKyAqIGdldCBoZXJlIGZyb20gaW50ZXJydXB0cywgd2hlcmVhcyB0aGUgbmV0d29yayBjb2RlIGdyYWJzIHNrX2NhbGxiYWNrX2xvY2sKKyAqIHdpdGggX2xvY2tfYmggb25seSAtIHNvIHJlbHlpbmcgb24gc2tfY2FsbGJhY2tfbG9jayBpbnRyb2R1Y2VzIGxpdmVsb2Nrcy4KKyAqLwordm9pZCByZHNfd2FrZV9za19zbGVlcChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCV9fcmRzX3dha2Vfc2tfc2xlZXAocmRzX3JzX3RvX3NrKHJzKSk7CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHJkc19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCSAgICAgICBpbnQgKnVhZGRyX2xlbiwgaW50IHBlZXIpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzb2NrLT5zayk7CisKKwltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKKworCS8qIHJhY2V5LCBkb24ndCBjYXJlICovCisJaWYgKHBlZXIpIHsKKwkJaWYgKCFycy0+cnNfY29ubl9hZGRyKQorCQkJcmV0dXJuIC1FTk9UQ09OTjsKKworCQlzaW4tPnNpbl9wb3J0ID0gcnMtPnJzX2Nvbm5fcG9ydDsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBycy0+cnNfY29ubl9hZGRyOworCX0gZWxzZSB7CisJCXNpbi0+c2luX3BvcnQgPSBycy0+cnNfYm91bmRfcG9ydDsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBycy0+cnNfYm91bmRfYWRkcjsKKwl9CisKKwlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisJKnVhZGRyX2xlbiA9IHNpemVvZigqc2luKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJEUycgcG9sbCBpcyB3aXRob3V0IGEgZG91YnQgdGhlIGxlYXN0IGludHVpdGl2ZSBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UsCisgKiBhcyBQT0xMSU4gYW5kIFBPTExPVVQgZG8gbm90IGJlaGF2ZSBlbnRpcmVseSBhcyB5b3Ugd291bGQgZXhwZWN0IGZyb20KKyAqIGEgbmV0d29yayBwcm90b2NvbC4KKyAqCisgKiBQT0xMSU4gaXMgYXNzZXJ0ZWQgaWYKKyAqICAtCXRoZXJlIGlzIGRhdGEgb24gdGhlIHJlY2VpdmUgcXVldWUuCisgKiAgLQl0byBzaWduYWwgdGhhdCBhIHByZXZpb3VzbHkgY29uZ2VzdGVkIGRlc3RpbmF0aW9uIG1heSBoYXZlIGJlY29tZQorICoJdW5jb25nZXN0ZWQKKyAqICAtCUEgbm90aWZpY2F0aW9uIGhhcyBiZWVuIHF1ZXVlZCB0byB0aGUgc29ja2V0ICh0aGlzIGNhbiBiZSBhIGNvbmdlc3Rpb24KKyAqCXVwZGF0ZSwgb3IgYSBSRE1BIGNvbXBsZXRpb24pLgorICoKKyAqIFBPTExPVVQgaXMgYXNzZXJ0ZWQgaWYgdGhlcmUgaXMgcm9vbSBvbiB0aGUgc2VuZCBxdWV1ZS4gVGhpcyBkb2VzIG5vdCBtZWFuCisgKiBob3dldmVyLCB0aGF0IHRoZSBuZXh0IHNlbmRtc2coKSBjYWxsIHdpbGwgc3VjY2VlZC4gSWYgdGhlIGFwcGxpY2F0aW9uIHRyaWVzCisgKiB0byBzZW5kIHRvIGEgY29uZ2VzdGVkIGRlc3RpbmF0aW9uLCB0aGUgc3lzdGVtIGNhbGwgbWF5IHN0aWxsIGZhaWwgKGFuZAorICogcmV0dXJuIEVOT0JVRlMpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgICBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9sbF93YWl0KGZpbGUsIHNrLT5za19zbGVlcCwgd2FpdCk7CisKKwlwb2xsX3dhaXQoZmlsZSwgJnJkc19wb2xsX3dhaXRxLCB3YWl0KTsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFycy0+cnNfY29uZ19tb25pdG9yKSB7CisJCS8qIFdoZW4gYSBjb25nZXN0aW9uIG1hcCB3YXMgdXBkYXRlZCwgd2Ugc2lnbmFsIFBPTExJTiBmb3IKKwkJICogImhpc3RvcmljYWwiIHJlYXNvbnMuIEFwcGxpY2F0aW9ucyBjYW4gYWxzbyBwb2xsIGZvcgorCQkgKiBXUkJBTkQgaW5zdGVhZC4gKi8KKwkJaWYgKHJkc19jb25nX3VwZGF0ZWRfc2luY2UoJnJzLT5yc19jb25nX3RyYWNrKSkKKwkJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMV1JCQU5EKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2soJnJzLT5yc19sb2NrKTsKKwkJaWYgKHJzLT5yc19jb25nX25vdGlmeSkKKwkJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCX0KKwlpZiAoIWxpc3RfZW1wdHkoJnJzLT5yc19yZWN2X3F1ZXVlKQorCSB8fCAhbGlzdF9lbXB0eSgmcnMtPnJzX25vdGlmeV9xdWV1ZSkpCisJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCWlmIChycy0+cnNfc25kX2J5dGVzIDwgcmRzX3NrX3NuZGJ1ZihycykpCisJCW1hc2sgfD0gKFBPTExPVVQgfCBQT0xMV1JOT1JNKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCByZHNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCByZHNfY2FuY2VsX3NlbnRfdG8oc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCSAgICAgIGludCBsZW4pCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlpbnQgcmV0ID0gMDsKKworCS8qIHJhY2luZyB3aXRoIGFub3RoZXIgdGhyZWFkIGJpbmRpbmcgc2VlbXMgb2sgaGVyZSAqLworCWlmIChycy0+cnNfYm91bmRfYWRkciA9PSAwKSB7CisJCXJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovCisJCWdvdG8gb3V0OworCX0KKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNpbiwgb3B0dmFsLCBzaXplb2Yoc2luKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX3NlbmRfZHJvcF90byhycywgJnNpbik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfc2V0X2Jvb2xfb3B0aW9uKHVuc2lnbmVkIGNoYXIgKm9wdHZhciwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCSAgICAgICBpbnQgb3B0bGVuKQoreworCWludCB2YWx1ZTsKKworCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGdldF91c2VyKHZhbHVlLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkqb3B0dmFyID0gISF2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZHNfY29uZ19tb25pdG9yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkgICAgaW50IG9wdGxlbikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX3NldF9ib29sX29wdGlvbigmcnMtPnJzX2NvbmdfbW9uaXRvciwgb3B0dmFsLCBvcHRsZW4pOworCWlmIChyZXQgPT0gMCkgeworCQlpZiAocnMtPnJzX2NvbmdfbW9uaXRvcikgeworCQkJcmRzX2NvbmdfYWRkX3NvY2tldChycyk7CisJCX0gZWxzZSB7CisJCQlyZHNfY29uZ19yZW1vdmVfc29ja2V0KHJzKTsKKwkJCXJzLT5yc19jb25nX21hc2sgPSAwOworCQkJcnMtPnJzX2Nvbmdfbm90aWZ5ID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzb2NrLT5zayk7CisJaW50IHJldDsKKworCWlmIChsZXZlbCAhPSBTT0xfUkRTKSB7CisJCXJldCA9IC1FTk9QUk9UT09QVDsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBSRFNfQ0FOQ0VMX1NFTlRfVE86CisJCXJldCA9IHJkc19jYW5jZWxfc2VudF90byhycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwljYXNlIFJEU19HRVRfTVI6CisJCXJldCA9IHJkc19nZXRfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfRlJFRV9NUjoKKwkJcmV0ID0gcmRzX2ZyZWVfbXIocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfUkVDVkVSUjoKKwkJcmV0ID0gcmRzX3NldF9ib29sX29wdGlvbigmcnMtPnJzX3JlY3ZlcnIsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfQ09OR19NT05JVE9SOgorCQlyZXQgPSByZHNfY29uZ19tb25pdG9yKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9QUk9UT09QVDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzb2NrLT5zayk7CisJaW50IHJldCA9IC1FTk9QUk9UT09QVCwgbGVuOworCisJaWYgKGxldmVsICE9IFNPTF9SRFMpCisJCWdvdG8gb3V0OworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFJEU19JTkZPX0ZJUlNUIC4uLiBSRFNfSU5GT19MQVNUOgorCQlyZXQgPSByZHNfaW5mb19nZXRzb2Nrb3B0KHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwKKwkJCQkJICBvcHRsZW4pOworCQlicmVhazsKKworCWNhc2UgUkRTX1JFQ1ZFUlI6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UKKwkJaWYgKHB1dF91c2VyKHJzLT5yc19yZWN2ZXJyLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpCisJCSB8fCBwdXRfdXNlcihzaXplb2YoaW50KSwgb3B0bGVuKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworb3V0OgorCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIGludCByZHNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkgICAgICAgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJaW50IHJldCA9IDA7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKGFkZHJfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQlyZXQgPSAtRUFGTk9TVVBQT1JUOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkpIHsKKwkJcmV0ID0gLUVERVNUQUREUlJFUTsKKwkJZ290byBvdXQ7CisJfQorCisJcnMtPnJzX2Nvbm5fYWRkciA9IHNpbi0+c2luX2FkZHIuc19hZGRyOworCXJzLT5yc19jb25uX3BvcnQgPSBzaW4tPnNpbl9wb3J0OworCitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHByb3RvIHJkc19wcm90byA9IHsKKwkubmFtZQkgID0gIlJEUyIsCisJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKKwkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IHJkc19zb2NrKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHJkc19wcm90b19vcHMgPSB7CisJLmZhbWlseSA9CUFGX1JEUywKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVsZWFzZSA9CXJkc19yZWxlYXNlLAorCS5iaW5kID0JCXJkc19iaW5kLAorCS5jb25uZWN0ID0JcmRzX2Nvbm5lY3QsCisJLnNvY2tldHBhaXIgPQlzb2NrX25vX3NvY2tldHBhaXIsCisJLmFjY2VwdCA9CXNvY2tfbm9fYWNjZXB0LAorCS5nZXRuYW1lID0JcmRzX2dldG5hbWUsCisJLnBvbGwgPQkJcmRzX3BvbGwsCisJLmlvY3RsID0JcmRzX2lvY3RsLAorCS5saXN0ZW4gPQlzb2NrX25vX2xpc3RlbiwKKwkuc2h1dGRvd24gPQlzb2NrX25vX3NodXRkb3duLAorCS5zZXRzb2Nrb3B0ID0JcmRzX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQgPQlyZHNfZ2V0c29ja29wdCwKKwkuc2VuZG1zZyA9CXJkc19zZW5kbXNnLAorCS5yZWN2bXNnID0JcmRzX3JlY3Ztc2csCisJLm1tYXAgPQkJc29ja19ub19tbWFwLAorCS5zZW5kcGFnZSA9CXNvY2tfbm9fc2VuZHBhZ2UsCit9OworCitzdGF0aWMgaW50IF9fcmRzX2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBwcm90b2NvbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZHNfc29jayAqcnM7CisKKwlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CisJc29jay0+b3BzCQk9ICZyZHNfcHJvdG9fb3BzOworCXNrLT5za19wcm90b2NvbAkJPSBwcm90b2NvbDsKKworCXJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnMtPnJzX2xvY2spOworCXJ3bG9ja19pbml0KCZycy0+cnNfcmVjdl9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX3NlbmRfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfcmVjdl9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19ub3RpZnlfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfY29uZ19saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmcnMtPnJzX3JkbWFfbG9jayk7CisJcnMtPnJzX3JkbWFfa2V5cyA9IFJCX1JPT1Q7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJzLT5yc19pdGVtLCAmcmRzX3NvY2tfbGlzdCk7CisJcmRzX3NvY2tfY291bnQrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZHNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sKQoreworCXN0cnVjdCBzb2NrICpzazsKKworCWlmIChzb2NrLT50eXBlICE9IFNPQ0tfU0VRUEFDS0VUIHx8IHByb3RvY29sKQorCQlyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsKKworCXNrID0gc2tfYWxsb2MobmV0LCBBRl9SRFMsIEdGUF9BVE9NSUMsICZyZHNfcHJvdG8pOworCWlmICghc2spCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIF9fcmRzX2NyZWF0ZShzb2NrLCBzaywgcHJvdG9jb2wpOworfQorCit2b2lkIHJkc19zb2NrX2FkZHJlZihzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKK30KKwordm9pZCByZHNfc29ja19wdXQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHJkc19mYW1pbHlfb3BzID0geworCS5mYW1pbHkgPQlBRl9SRFMsCisJLmNyZWF0ZSA9CXJkc19jcmVhdGUsCisJLm93bmVyCT0JVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgdm9pZCByZHNfc29ja19pbmNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IHJkc19pbmNvbWluZyAqaW5jOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKKworCWxlbiAvPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnMsICZyZHNfc29ja19saXN0LCByc19pdGVtKSB7CisJCXNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwkJcmVhZF9sb2NrKCZycy0+cnNfcmVjdl9sb2NrKTsKKworCQkvKiBYWFggdG9vIGxhenkgdG8gbWFpbnRhaW4gY291bnRzLi4gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmMsICZycy0+cnNfcmVjdl9xdWV1ZSwgaV9pdGVtKSB7CisJCQl0b3RhbCsrOworCQkJaWYgKHRvdGFsIDw9IGxlbikKKwkJCQlyZHNfaW5jX2luZm9fY29weShpbmMsIGl0ZXIsIGluYy0+aV9zYWRkciwKKwkJCQkJCSAgcnMtPnJzX2JvdW5kX2FkZHIsIDEpOworCQl9CisKKwkJcmVhZF91bmxvY2soJnJzLT5yc19yZWN2X2xvY2spOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCWxlbnMtPm5yID0gdG90YWw7CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19zb2NrX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fc29ja2V0IHNpbmZvOworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxlbiAvPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX3NvY2tldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJaWYgKGxlbiA8IHJkc19zb2NrX2NvdW50KQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnMsICZyZHNfc29ja19saXN0LCByc19pdGVtKSB7CisJCXNpbmZvLnNuZGJ1ZiA9IHJkc19za19zbmRidWYocnMpOworCQlzaW5mby5yY3ZidWYgPSByZHNfc2tfcmN2YnVmKHJzKTsKKwkJc2luZm8uYm91bmRfYWRkciA9IHJzLT5yc19ib3VuZF9hZGRyOworCQlzaW5mby5jb25uZWN0ZWRfYWRkciA9IHJzLT5yc19jb25uX2FkZHI7CisJCXNpbmZvLmJvdW5kX3BvcnQgPSBycy0+cnNfYm91bmRfcG9ydDsKKwkJc2luZm8uY29ubmVjdGVkX3BvcnQgPSBycy0+cnNfY29ubl9wb3J0OworCQlzaW5mby5pbnVtID0gc29ja19pX2lubyhyZHNfcnNfdG9fc2socnMpKTsKKworCQlyZHNfaW5mb19jb3B5KGl0ZXIsICZzaW5mbywgc2l6ZW9mKHNpbmZvKSk7CisJfQorCitvdXQ6CisJbGVucy0+bnIgPSByZHNfc29ja19jb3VudDsKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19zb2NrZXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcmRzX2V4aXQodm9pZCkKK3sKKwlyZHNfcmRtYV9leGl0KCk7CisJc29ja191bnJlZ2lzdGVyKHJkc19mYW1pbHlfb3BzLmZhbWlseSk7CisJcHJvdG9fdW5yZWdpc3RlcigmcmRzX3Byb3RvKTsKKwlyZHNfY29ubl9leGl0KCk7CisJcmRzX2NvbmdfZXhpdCgpOworCXJkc19zeXNjdGxfZXhpdCgpOworCXJkc190aHJlYWRzX2V4aXQoKTsKKwlyZHNfc3RhdHNfZXhpdCgpOworCXJkc19wYWdlX2V4aXQoKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU09DS0VUUywgcmRzX3NvY2tfaW5mbyk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFQ1ZfTUVTU0FHRVMsIHJkc19zb2NrX2luY19pbmZvKTsKK30KK21vZHVsZV9leGl0KHJkc19leGl0KTsKKworc3RhdGljIGludCBfX2luaXQgcmRzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX2Nvbm5faW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCXJldCA9IHJkc190aHJlYWRzX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jb25uOworCXJldCA9IHJkc19zeXNjdGxfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3RocmVhZHM7CisJcmV0ID0gcmRzX3N0YXRzX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNjdGw7CisJcmV0ID0gcHJvdG9fcmVnaXN0ZXIoJnJkc19wcm90bywgMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3RhdHM7CisJcmV0ID0gc29ja19yZWdpc3RlcigmcmRzX2ZhbWlseV9vcHMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3Byb3RvOworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TT0NLRVRTLCByZHNfc29ja19pbmZvKTsKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFQ1ZfTUVTU0FHRVMsIHJkc19zb2NrX2luY19pbmZvKTsKKworCS8qIGliL2l3YXJwIHRyYW5zcG9ydHMgY3VycmVudGx5IGNvbXBpbGVkLWluICovCisJcmV0ID0gcmRzX3JkbWFfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3NvY2s7CisJZ290byBvdXQ7CisKK291dF9zb2NrOgorCXNvY2tfdW5yZWdpc3RlcihyZHNfZmFtaWx5X29wcy5mYW1pbHkpOworb3V0X3Byb3RvOgorCXByb3RvX3VucmVnaXN0ZXIoJnJkc19wcm90byk7CitvdXRfc3RhdHM6CisJcmRzX3N0YXRzX2V4aXQoKTsKK291dF9zeXNjdGw6CisJcmRzX3N5c2N0bF9leGl0KCk7CitvdXRfdGhyZWFkczoKKwlyZHNfdGhyZWFkc19leGl0KCk7CitvdXRfY29ubjoKKwlyZHNfY29ubl9leGl0KCk7CisJcmRzX2NvbmdfZXhpdCgpOworCXJkc19wYWdlX2V4aXQoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQocmRzX2luaXQpOworCisjZGVmaW5lIERSVl9WRVJTSU9OICAgICAiNC4wIgorI2RlZmluZSBEUlZfUkVMREFURSAgICAgIkZlYiAxMiwgMjAwOSIKKworTU9EVUxFX0FVVEhPUigiT3JhY2xlIENvcnBvcmF0aW9uIDxyZHMtZGV2ZWxAb3NzLm9yYWNsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJEUzogUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyIKKwkJICAgIiB2IiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfUkRTKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvYmluZC5jIGIvbmV0L3Jkcy9iaW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3Y2MzOQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvYmluZC5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBYWFggdGhpcyBwcm9iYWJseSBzdGlsbCBuZWVkcyBtb3JlIHdvcmsuLiBubyBJTkFERFJfQU5ZLCBhbmQgcmJ0cmVlcyBhcmVuJ3QKKyAqIHBhcnRpY3VsYXJseSB6aXBweS4KKyAqCisgKiBUaGlzIGlzIG5vdyBjYWxsZWQgZm9yIGV2ZXJ5IGluY29taW5nIGZyYW1lIHNvIHdlIGFyZ3VhYmx5IGNhcmUgbXVjaCBtb3JlCisgKiBhYm91dCBpdCB0aGFuIHdlIHVzZWQgdG8uCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2JpbmRfbG9jayk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgcmRzX2JpbmRfdHJlZSA9IFJCX1JPT1Q7CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX3NvY2sgKnJkc19iaW5kX3RyZWVfd2FsayhfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQsCisJCQkJCSAgIHN0cnVjdCByZHNfc29jayAqaW5zZXJ0KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyZHNfYmluZF90cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1NjQgY21wOworCXU2NCBuZWVkbGUgPSAoKHU2NCliZTMyX3RvX2NwdShhZGRyKSA8PCAzMikgfCBiZTE2X3RvX2NwdShwb3J0KTsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJcnMgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZHNfc29jaywgcnNfYm91bmRfbm9kZSk7CisKKwkJY21wID0gKCh1NjQpYmUzMl90b19jcHUocnMtPnJzX2JvdW5kX2FkZHIpIDw8IDMyKSB8CisJCSAgICAgIGJlMTZfdG9fY3B1KHJzLT5yc19ib3VuZF9wb3J0KTsKKworCQlpZiAobmVlZGxlIDwgY21wKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChuZWVkbGUgPiBjbXApCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gcnM7CisJfQorCisJaWYgKGluc2VydCkgeworCQlyYl9saW5rX25vZGUoJmluc2VydC0+cnNfYm91bmRfbm9kZSwgcGFyZW50LCBwKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZpbnNlcnQtPnJzX2JvdW5kX25vZGUsICZyZHNfYmluZF90cmVlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHJkc19zb2NrIGJvdW5kIGF0IHRoZSBnaXZlbiBsb2NhbCBhZGRyZXNzLgorICoKKyAqIFRoZSByeCBwYXRoIGNhbiByYWNlIHdpdGggcmRzX3JlbGVhc2UuICBXZSBub3RpY2UgaWYgcmRzX3JlbGVhc2UoKSBoYXMKKyAqIG1hcmtlZCB0aGlzIHNvY2tldCBhbmQgZG9uJ3QgcmV0dXJuIGEgcnMgcmVmIHRvIHRoZSByeCBwYXRoLgorICovCitzdHJ1Y3QgcmRzX3NvY2sgKnJkc19maW5kX2JvdW5kKF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydCkKK3sKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCXJzID0gcmRzX2JpbmRfdHJlZV93YWxrKGFkZHIsIHBvcnQsIE5VTEwpOworCWlmIChycyAmJiAhc29ja19mbGFnKHJkc19yc190b19zayhycyksIFNPQ0tfREVBRCkpCisJCXJkc19zb2NrX2FkZHJlZihycyk7CisJZWxzZQorCQlycyA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJcmRzZGVidWcoInJldHVybmluZyBycyAlcCBmb3IgJXBJNDoldVxuIiwgcnMsICZhZGRyLAorCQludG9ocyhwb3J0KSk7CisJcmV0dXJuIHJzOworfQorCisvKiByZXR1cm5zIC12ZSBlcnJubyBvciArdmUgcG9ydCAqLworc3RhdGljIGludCByZHNfYWRkX2JvdW5kKHN0cnVjdCByZHNfc29jayAqcnMsIF9fYmUzMiBhZGRyLCBfX2JlMTYgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVBRERSSU5VU0U7CisJdTE2IHJvdmVyLCBsYXN0OworCisJaWYgKCpwb3J0ICE9IDApIHsKKwkJcm92ZXIgPSBiZTE2X3RvX2NwdSgqcG9ydCk7CisJCWxhc3QgPSByb3ZlcjsKKwl9IGVsc2UgeworCQlyb3ZlciA9IG1heF90KHUxNiwgbmV0X3JhbmRvbSgpLCAyKTsKKwkJbGFzdCA9IHJvdmVyIC0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJZG8geworCQlpZiAocm92ZXIgPT0gMCkKKwkJCXJvdmVyKys7CisJCWlmIChyZHNfYmluZF90cmVlX3dhbGsoYWRkciwgY3B1X3RvX2JlMTYocm92ZXIpLCBycykgPT0gTlVMTCkgeworCQkJKnBvcnQgPSBjcHVfdG9fYmUxNihyb3Zlcik7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChyb3ZlcisrICE9IGxhc3QpOworCisJaWYgKHJldCA9PSAwKSAgeworCQlycy0+cnNfYm91bmRfYWRkciA9IGFkZHI7CisJCXJzLT5yc19ib3VuZF9wb3J0ID0gKnBvcnQ7CisJCXJkc19zb2NrX2FkZHJlZihycyk7CisKKwkJcmRzZGVidWcoInJzICVwIGJpbmRpbmcgdG8gJXBJNDolZFxuIiwKKwkJICBycywgJmFkZHIsIChpbnQpbnRvaHMoKnBvcnQpKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19yZW1vdmVfYm91bmQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCWlmIChycy0+cnNfYm91bmRfYWRkcikgeworCQlyZHNkZWJ1ZygicnMgJXAgdW5iaW5kaW5nIGZyb20gJXBJNDolZFxuIiwKKwkJICBycywgJnJzLT5yc19ib3VuZF9hZGRyLAorCQkgIG50b2hzKHJzLT5yc19ib3VuZF9wb3J0KSk7CisKKwkJcmJfZXJhc2UoJnJzLT5yc19ib3VuZF9ub2RlLCAmcmRzX2JpbmRfdHJlZSk7CisJCXJkc19zb2NrX3B1dChycyk7CisJCXJzLT5yc19ib3VuZF9hZGRyID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7Cit9CisKK2ludCByZHNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zOworCWludCByZXQgPSAwOworCisJbG9ja19zb2NrKHNrKTsKKworCWlmIChhZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSB8fAorCSAgICBzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCB8fAorCSAgICBycy0+cnNfYm91bmRfYWRkciB8fAorCSAgICBzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSByZHNfYWRkX2JvdW5kKHJzLCBzaW4tPnNpbl9hZGRyLnNfYWRkciwgJnNpbi0+c2luX3BvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJdHJhbnMgPSByZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChzaW4tPnNpbl9hZGRyLnNfYWRkcik7CisJaWYgKHRyYW5zID09IE5VTEwpIHsKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisJCXJkc19yZW1vdmVfYm91bmQocnMpOworCQlnb3RvIG91dDsKKwl9CisKKwlycy0+cnNfdHJhbnNwb3J0ID0gdHJhbnM7CisJcmV0ID0gMDsKKworb3V0OgorCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvY29uZy5jIGIvbmV0L3Jkcy9jb25nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwZTQ1OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvY29uZy5jCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xlLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSByZWNlaXZlIHNpZGUgb2YgdGhlIHVuY29udmVudGlvbmFsIGNvbmdlc3Rpb24KKyAqIG1hbmFnZW1lbnQgaW4gUkRTLgorICoKKyAqIE1lc3NhZ2VzIHdhaXRpbmcgaW4gdGhlIHJlY2VpdmUgcXVldWUgb24gdGhlIHJlY2VpdmluZyBzb2NrZXQgYXJlIGFjY291bnRlZAorICogYWdhaW5zdCB0aGUgc29ja2V0cyBTT19SQ1ZCVUYgb3B0aW9uIHZhbHVlLiAgT25seSB0aGUgcGF5bG9hZCBieXRlcyBpbiB0aGUKKyAqIG1lc3NhZ2UgYXJlIGFjY291bnRlZCBmb3IuICBJZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBlcXVhbHMgb3IgZXhjZWVkcworICogcmN2YnVmIHRoZW4gdGhlIHNvY2tldCBpcyBjb25nZXN0ZWQuICBBbGwgc2VuZHMgYXR0ZW1wdGVkIHRvIHRoaXMgc29ja2V0J3MKKyAqIGFkZHJlc3Mgc2hvdWxkIHJldHVybiBibG9jayBvciByZXR1cm4gLUVXT1VMREJMT0NLLgorICoKKyAqIEFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgcmVhc29uYWJseSB0dW5lZCBzdWNoIHRoYXQgdGhpcyBzaXR1YXRpb24KKyAqIHZlcnkgcmFyZWx5IG9jY3Vycy4gIEFuIGFwcGxpY2F0aW9uIGVuY291bnRlcmluZyB0aGlzICJiYWNrLXByZXNzdXJlIiBpcworICogY29uc2lkZXJlZCBhIGJ1Zy4KKyAqCisgKiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyBlYWNoIG5vZGUgbWFpbnRhaW4gYml0bWFwcyB3aGljaCBpbmRpY2F0ZQorICogd2hpY2ggcG9ydHMgb24gYm91bmQgYWRkcmVzc2VzIGFyZSBjb25nZXN0ZWQuICBBcyB0aGUgYml0bWFwIGNoYW5nZXMgaXQgaXMKKyAqIHNlbnQgdGhyb3VnaCBhbGwgdGhlIGNvbm5lY3Rpb25zIHdoaWNoIHRlcm1pbmF0ZSBpbiB0aGUgbG9jYWwgYWRkcmVzcyBvZiB0aGUKKyAqIGJpdG1hcCB3aGljaCBjaGFuZ2VkLgorICoKKyAqIFRoZSBiaXRtYXBzIGFyZSBhbGxvY2F0ZWQgYXMgY29ubmVjdGlvbnMgYXJlIGJyb3VnaHQgdXAuICBUaGlzIGF2b2lkcworICogYWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHBhdGggd2hpY2ggcXVldWVzIG1lc3NhZ2VzIG9uIHNvY2tldHMuCisgKiBUaGUgZGVuc2UgYml0bWFwcyBsZXQgdHJhbnNwb3J0cyBzZW5kIHRoZSBlbnRpcmUgYml0bWFwIG9uIGFueSBiaXRtYXAgY2hhbmdlCisgKiByZWFzb25hYmx5IGVmZmljaWVudGx5LiAgVGhpcyBpcyBtdWNoIGVhc2llciB0byBpbXBsZW1lbnQgdGhhbiBzb21lCisgKiBmaW5lci1ncmFpbmVkIGNvbW11bmljYXRpb24gb2YgcGVyLXBvcnQgY29uZ2VzdGlvbi4gIFRoZSBzZW5kZXIgZG9lcyBhIHZlcnkKKyAqIGluZXhwZW5zaXZlIGJpdCB0ZXN0IHRvIHRlc3QgaWYgdGhlIHBvcnQgaXQncyBhYm91dCB0byBzZW5kIHRvIGlzIGNvbmdlc3RlZAorICogb3Igbm90LgorICovCisKKy8qCisgKiBJbnRlcmFjdGlvbiB3aXRoIHBvbGwgaXMgYSB0YWQgdHJpY2t5LiBXZSB3YW50IGFsbCBwcm9jZXNzZXMgc3R1Y2sgaW4KKyAqIHBvbGwgdG8gd2FrZSB1cCBhbmQgY2hlY2sgd2hldGhlciBhIGNvbmdlc3RlZCBkZXN0aW5hdGlvbiBiZWNhbWUgdW5jb25nZXN0ZWQuCisgKiBUaGUgcmVhbGx5IHNhZCB0aGluZyBpcyB3ZSBoYXZlIG5vIGlkZWEgd2hpY2ggZGVzdGluYXRpb25zIHRoZSBhcHBsaWNhdGlvbgorICogd2FudHMgdG8gc2VuZCB0byAtIHdlIGRvbid0IGV2ZW4ga25vdyB3aGljaCByZHNfY29ubmVjdGlvbnMgYXJlIGludm9sdmVkLgorICogU28gdW50aWwgd2UgaW1wbGVtZW50IGEgbW9yZSBmbGV4aWJsZSByZHMgcG9sbCBpbnRlcmZhY2UsIHdlIGhhdmUgdG8gbWFrZQorICogZG8gd2l0aCB0aGlzOgorICogV2UgbWFpbnRhaW4gYSBnbG9iYWwgY291bnRlciB0aGF0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIGNvbmdlc3Rpb24gbWFwCisgKiB1cGRhdGUgaXMgcmVjZWl2ZWQuIEVhY2ggcmRzIHNvY2tldCB0cmFja3MgdGhpcyB2YWx1ZSwgYW5kIGlmIHJkc19wb2xsCisgKiBmaW5kcyB0aGF0IHRoZSBzYXZlZCBnZW5lcmF0aW9uIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGdsb2JhbCBnZW5lcmF0aW9uCisgKiBudW1iZXIsIGl0IHdha2VzIHVwIHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgYXRvbWljX3QJCXJkc19jb25nX2dlbmVyYXRpb24gPSBBVE9NSUNfSU5JVCgwKTsKKworLyoKKyAqIENvbmdlc3Rpb24gbW9uaXRvcmluZworICovCitzdGF0aWMgTElTVF9IRUFEKHJkc19jb25nX21vbml0b3IpOworc3RhdGljIERFRklORV9SV0xPQ0socmRzX2NvbmdfbW9uaXRvcl9sb2NrKTsKKworLyoKKyAqIFllcywgYSBnbG9iYWwgbG9jay4gIEl0J3MgdXNlZCBzbyBpbmZyZXF1ZW50bHkgdGhhdCBpdCdzIHdvcnRoIGtlZXBpbmcgaXQKKyAqIGdsb2JhbCB0byBzaW1wbGlmeSB0aGUgbG9ja2luZy4gIEl0J3Mgb25seSB1c2VkIGluIHRoZSBmb2xsb3dpbmcKKyAqIGNpcmN1bXN0YW5jZXM6CisgKgorICogIC0gb24gY29ubmVjdGlvbiBidWlsZHVwIHRvIGFzc29jaWF0ZSBhIGNvbm4gd2l0aCBpdHMgbWFwcworICogIC0gb24gbWFwIGNoYW5nZXMgdG8gaW5mb3JtIGNvbm5zIG9mIGEgbmV3IG1hcCB0byBzZW5kCisgKgorICogIEl0J3Mgc2FkbHkgb3JkZXJlZCB1bmRlciB0aGUgc29ja2V0IGNhbGxiYWNrIGxvY2sgYW5kIHRoZSBjb25uZWN0aW9uIGxvY2suCisgKiAgUmVjZWl2ZSBwYXRocyBjYW4gbWFyayBwb3J0cyBjb25nZXN0ZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBzbyB0aGUKKyAqICBsb2NrIG1hc2tzIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2NvbmdfbG9jayk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgcmRzX2NvbmdfdHJlZSA9IFJCX1JPT1Q7CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2NvbmdfbWFwICpyZHNfY29uZ190cmVlX3dhbGsoX19iZTMyIGFkZHIsCisJCQkJCSAgICAgICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICppbnNlcnQpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJkc19jb25nX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCW1hcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHJkc19jb25nX21hcCwgbV9yYl9ub2RlKTsKKworCQlpZiAoYWRkciA8IG1hcC0+bV9hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gbWFwLT5tX2FkZHIpCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gbWFwOworCX0KKworCWlmIChpbnNlcnQpIHsKKwkJcmJfbGlua19ub2RlKCZpbnNlcnQtPm1fcmJfbm9kZSwgcGFyZW50LCBwKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZpbnNlcnQtPm1fcmJfbm9kZSwgJnJkc19jb25nX3RyZWUpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoZXJlIGlzIG9ubHkgZXZlciBvbmUgYml0bWFwIGZvciBhbnkgYWRkcmVzcy4gIENvbm5lY3Rpb25zIHRyeSBhbmQgYWxsb2NhdGUKKyAqIHRoZXNlIGJpdG1hcHMgaW4gdGhlIHByb2Nlc3MgZ2V0dGluZyBwb2ludGVycyB0byB0aGVtLiAgVGhlIGJpdG1hcHMgYXJlIG9ubHkKKyAqIGV2ZXIgZnJlZWQgYXMgdGhlIG1vZHVsZSBpcyByZW1vdmVkIGFmdGVyIGFsbCBjb25uZWN0aW9ucyBoYXZlIGJlZW4gZnJlZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmRzX2NvbmdfbWFwICpyZHNfY29uZ19mcm9tX2FkZHIoX19iZTMyIGFkZHIpCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXN0cnVjdCByZHNfY29uZ19tYXAgKnJldCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyB6cDsKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfY29uZ19tYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAobWFwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWFwLT5tX2FkZHIgPSBhZGRyOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hcC0+bV93YWl0cSk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcC0+bV9jb25uX2xpc3QpOworCisJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUzsgaSsrKSB7CisJCXpwID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoenAgPT0gMCkKKwkJCWdvdG8gb3V0OworCQltYXAtPm1fcGFnZV9hZGRyc1tpXSA9IHpwOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJcmV0ID0gcmRzX2NvbmdfdHJlZV93YWxrKGFkZHIsIG1hcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCisJaWYgKHJldCA9PSBOVUxMKSB7CisJCXJldCA9IG1hcDsKKwkJbWFwID0gTlVMTDsKKwl9CisKK291dDoKKwlpZiAobWFwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVMgJiYgbWFwLT5tX3BhZ2VfYWRkcnNbaV07IGkrKykKKwkJCWZyZWVfcGFnZShtYXAtPm1fcGFnZV9hZGRyc1tpXSk7CisJCWtmcmVlKG1hcCk7CisJfQorCisJcmRzZGVidWcoIm1hcCAlcCBmb3IgYWRkciAleFxuIiwgcmV0LCBiZTMyX3RvX2NwdShhZGRyKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHV0IHRoZSBjb25uIG9uIGl0cyBsb2NhbCBtYXAncyBsaXN0LiAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubiBpcworICogcmVhbGx5IGFkZGVkIHRvIHRoZSBoYXNoLiAgSXQncyBuZXN0ZWQgdW5kZXIgdGhlIHJkc19jb25uX2xvY2ssIHNhZGx5LgorICovCit2b2lkIHJkc19jb25nX2FkZF9jb25uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmRzZGVidWcoImNvbm4gJXAgbm93IG9uIG1hcCAlcFxuIiwgY29ubiwgY29ubi0+Y19sY29uZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjb25uLT5jX21hcF9pdGVtLCAmY29ubi0+Y19sY29uZy0+bV9jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCByZHNfY29uZ19yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJyZW1vdmluZyBjb25uICVwIGZyb20gbWFwICVwXG4iLCBjb25uLCBjb25uLT5jX2xjb25nKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJmNvbm4tPmNfbWFwX2l0ZW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKK30KKworaW50IHJkc19jb25nX2dldF9tYXBzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwljb25uLT5jX2xjb25nID0gcmRzX2NvbmdfZnJvbV9hZGRyKGNvbm4tPmNfbGFkZHIpOworCWNvbm4tPmNfZmNvbmcgPSByZHNfY29uZ19mcm9tX2FkZHIoY29ubi0+Y19mYWRkcik7CisKKwlpZiAoY29ubi0+Y19sY29uZyA9PSBOVUxMIHx8IGNvbm4tPmNfZmNvbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sICZtYXAtPm1fY29ubl9saXN0LCBjX21hcF9pdGVtKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkgeworCQkJcmRzX3N0YXRzX2luYyhzX2NvbmdfdXBkYXRlX3F1ZXVlZCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHJkc19jb25nX21hcF91cGRhdGVkKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdWludDY0X3QgcG9ydG1hc2spCit7CisJcmRzZGVidWcoIndha2luZyBtYXAgJXAgZm9yICVwSTRcbiIsCisJICBtYXAsICZtYXAtPm1fYWRkcik7CisJcmRzX3N0YXRzX2luYyhzX2NvbmdfdXBkYXRlX3JlY2VpdmVkKTsKKwlhdG9taWNfaW5jKCZyZHNfY29uZ19nZW5lcmF0aW9uKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmbWFwLT5tX3dhaXRxKSkKKwkJd2FrZV91cCgmbWFwLT5tX3dhaXRxKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX3BvbGxfd2FpdHEpKQorCQl3YWtlX3VwX2FsbCgmcmRzX3BvbGxfd2FpdHEpOworCisJaWYgKHBvcnRtYXNrICYmICFsaXN0X2VtcHR5KCZyZHNfY29uZ19tb25pdG9yKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCisJCXJlYWRfbG9ja19pcnFzYXZlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShycywgJnJkc19jb25nX21vbml0b3IsIHJzX2NvbmdfbGlzdCkgeworCQkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCQlycy0+cnNfY29uZ19ub3RpZnkgfD0gKHJzLT5yc19jb25nX21hc2sgJiBwb3J0bWFzayk7CisJCQlycy0+cnNfY29uZ19tYXNrICY9IH5wb3J0bWFzazsKKwkJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJCQlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KQorCQkJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJfQorCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKK2ludCByZHNfY29uZ191cGRhdGVkX3NpbmNlKHVuc2lnbmVkIGxvbmcgKnJlY2VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGdlbiA9IGF0b21pY19yZWFkKCZyZHNfY29uZ19nZW5lcmF0aW9uKTsKKworCWlmIChsaWtlbHkoKnJlY2VudCA9PSBnZW4pKQorCQlyZXR1cm4gMDsKKwkqcmVjZW50ID0gZ2VuOworCXJldHVybiAxOworfQorCisvKgorICogV2UncmUgY2FsbGVkIHVuZGVyIHRoZSBsb2NraW5nIHRoYXQgcHJvdGVjdHMgdGhlIHNvY2tldHMgcmVjZWl2ZSBidWZmZXIKKyAqIGNvbnN1bXB0aW9uLiAgVGhpcyBtYWtlcyBpdCBhIGxvdCBlYXNpZXIgZm9yIHRoZSBjYWxsZXIgdG8gb25seSBjYWxsIHVzCisgKiB3aGVuIGl0IGtub3dzIHRoYXQgYW4gZXhpc3Rpbmcgc2V0IGJpdCBuZWVkcyB0byBiZSBjbGVhcmVkLCBhbmQgdmljZSB2ZXJzYS4KKyAqIFdlIGNhbid0IGJsb2NrIGFuZCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBjb25jdXJyZW50IHNvY2tldHMgd29ya2luZyBhZ2FpbnN0CisgKiB0aGUgc2FtZSBwZXItYWRkcmVzcyBtYXAuCisgKi8KK3ZvaWQgcmRzX2Nvbmdfc2V0X2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKworCXJkc2RlYnVnKCJzZXR0aW5nIGNvbmdlc3Rpb24gZm9yICVwSTQ6JXUgaW4gbWFwICVwXG4iLAorCSAgJm1hcC0+bV9hZGRyLCBudG9ocyhwb3J0KSwgbWFwKTsKKworCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCisJZ2VuZXJpY19fX3NldF9sZV9iaXQob2ZmLCAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldKTsKK30KKwordm9pZCByZHNfY29uZ19jbGVhcl9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBvZmY7CisKKwlyZHNkZWJ1ZygiY2xlYXJpbmcgY29uZ2VzdGlvbiBmb3IgJXBJNDoldSBpbiBtYXAgJXBcbiIsCisJICAmbWFwLT5tX2FkZHIsIG50b2hzKHBvcnQpLCBtYXApOworCisJaSA9IGJlMTZfdG9fY3B1KHBvcnQpIC8gUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKwlvZmYgPSBiZTE2X3RvX2NwdShwb3J0KSAlIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisKKwlnZW5lcmljX19fY2xlYXJfbGVfYml0KG9mZiwgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NvbmdfdGVzdF9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBvZmY7CisKKwlpID0gYmUxNl90b19jcHUocG9ydCkgLyBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCW9mZiA9IGJlMTZfdG9fY3B1KHBvcnQpICUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKworCXJldHVybiBnZW5lcmljX3Rlc3RfbGVfYml0KG9mZiwgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfYWRkX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZycy0+cnNfY29uZ19saXN0KSkKKwkJbGlzdF9hZGQoJnJzLT5yc19jb25nX2xpc3QsICZyZHNfY29uZ19tb25pdG9yKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZycy0+cnNfY29uZ19saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisKKwkvKiB1cGRhdGUgY29uZ2VzdGlvbiBtYXAgZm9yIG5vdy1jbG9zZWQgcG9ydCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJbWFwID0gcmRzX2NvbmdfdHJlZV93YWxrKHJzLT5yc19ib3VuZF9hZGRyLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisKKwlpZiAobWFwICYmIHJkc19jb25nX3Rlc3RfYml0KG1hcCwgcnMtPnJzX2JvdW5kX3BvcnQpKSB7CisJCXJkc19jb25nX2NsZWFyX2JpdChtYXAsIHJzLT5yc19ib3VuZF9wb3J0KTsKKwkJcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhtYXApOworCX0KK30KKworaW50IHJkc19jb25nX3dhaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCwgaW50IG5vbmJsb2NrLAorCQkgIHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJaWYgKCFyZHNfY29uZ190ZXN0X2JpdChtYXAsIHBvcnQpKQorCQlyZXR1cm4gMDsKKwlpZiAobm9uYmxvY2spIHsKKwkJaWYgKHJzICYmIHJzLT5yc19jb25nX21vbml0b3IpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCS8qIEl0IHdvdWxkIGhhdmUgYmVlbiBuaWNlIHRvIGhhdmUgYW4gYXRvbWljIHNldF9iaXQgb24KKwkJCSAqIGEgdWludDY0X3QuICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwkJCXJzLT5yc19jb25nX21hc2sgfD0gUkRTX0NPTkdfTU9OSVRPUl9NQVNLKG50b2hzKHBvcnQpKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwkJCS8qIFRlc3QgYWdhaW4gLSBhIGNvbmdlc3Rpb24gdXBkYXRlIG1heSBoYXZlIGFycml2ZWQgaW4KKwkJCSAqIHRoZSBtZWFudGltZS4gKi8KKwkJCWlmICghcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBwb3J0KSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlyZHNfc3RhdHNfaW5jKHNfY29uZ19zZW5kX2Vycm9yKTsKKwkJcmV0dXJuIC1FTk9CVUZTOworCX0KKworCXJkc19zdGF0c19pbmMoc19jb25nX3NlbmRfYmxvY2tlZCk7CisJcmRzZGVidWcoIndhaXRpbmcgb24gbWFwICVwIGZvciBwb3J0ICV1XG4iLCBtYXAsIGJlMTZfdG9fY3B1KHBvcnQpKTsKKworCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobWFwLT5tX3dhaXRxLAorCQkJCQkhcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBwb3J0KSk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfZXhpdCh2b2lkKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmcmRzX2NvbmdfdHJlZSkpKSB7CisJCW1hcCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCByZHNfY29uZ19tYXAsIG1fcmJfbm9kZSk7CisJCXJkc2RlYnVnKCJmcmVlaW5nIG1hcCAlcFxuIiwgbWFwKTsKKwkJcmJfZXJhc2UoJm1hcC0+bV9yYl9ub2RlLCAmcmRzX2NvbmdfdHJlZSk7CisJCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVMgJiYgbWFwLT5tX3BhZ2VfYWRkcnNbaV07IGkrKykKKwkJCWZyZWVfcGFnZShtYXAtPm1fcGFnZV9hZGRyc1tpXSk7CisJCWtmcmVlKG1hcCk7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYSBSRFMgbWVzc2FnZSBjb250YWluaW5nIGEgY29uZ2VzdGlvbiB1cGRhdGUuCisgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX2NvbmdfdXBkYXRlX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAgPSBjb25uLT5jX2xjb25nOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlybSA9IHJkc19tZXNzYWdlX21hcF9wYWdlcyhtYXAtPm1fcGFnZV9hZGRycywgUkRTX0NPTkdfTUFQX0JZVEVTKTsKKwlpZiAoIUlTX0VSUihybSkpCisJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzID0gUkRTX0ZMQUdfQ09OR19CSVRNQVA7CisKKwlyZXR1cm4gcm07Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2YwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2hhc2h0YWJsZXMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImxvb3AuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKKyNkZWZpbmUgUkRTX0NPTk5FQ1RJT05fSEFTSF9CSVRTIDEyCisjZGVmaW5lIFJEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFUyAoMSA8PCBSRFNfQ09OTkVDVElPTl9IQVNIX0JJVFMpCisjZGVmaW5lIFJEU19DT05ORUNUSU9OX0hBU0hfTUFTSyAoUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTIC0gMSkKKworLyogY29udmVydGluZyB0aGlzIHRvIFJDVSBpcyBhIGNob3JlIGZvciBhbm90aGVyIGRheS4uICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgcmRzX2Nvbm5faGFzaFtSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVNdOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfY29ubl9zbGFiOworCitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnJkc19jb25uX2J1Y2tldChfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkcikKK3sKKwkvKiBQYXNzIE5VTEwsIGRvbid0IG5lZWQgc3RydWN0IG5ldCBmb3IgaGFzaCAqLworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IGluZXRfZWhhc2hmbihOVUxMLAorCQkJCQkgIGJlMzJfdG9fY3B1KGxhZGRyKSwgMCwKKwkJCQkJICBiZTMyX3RvX2NwdShmYWRkciksIDApOworCXJldHVybiAmcmRzX2Nvbm5faGFzaFtoYXNoICYgUkRTX0NPTk5FQ1RJT05fSEFTSF9NQVNLXTsKK30KKworI2RlZmluZSByZHNfY29ubl9pbmZvX3NldCh2YXIsIHRlc3QsIHN1ZmZpeCkgZG8gewkJXAorCWlmICh0ZXN0KQkJCQkJCVwKKwkJdmFyIHw9IFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR18jI3N1ZmZpeDsJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQgcmRzX2Nvbm5faXNfc2VuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIW11dGV4X3RyeWxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKSkKKwkJcmV0ID0gMTsKKwllbHNlCisJCW11dGV4X3VubG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCQkgICAgICBfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkJICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgKnJldCA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sIHBvcywgaGVhZCwgY19oYXNoX25vZGUpIHsKKwkJaWYgKGNvbm4tPmNfZmFkZHIgPT0gZmFkZHIgJiYgY29ubi0+Y19sYWRkciA9PSBsYWRkciAmJgorCQkJCWNvbm4tPmNfdHJhbnMgPT0gdHJhbnMpIHsKKwkJCXJldCA9IGNvbm47CisJCQlicmVhazsKKwkJfQorCX0KKwlyZHNkZWJ1ZygicmV0dXJuaW5nIGNvbm4gJXAgZm9yICVwSTQgLT4gJXBJNFxuIiwgcmV0LAorCQkgJmxhZGRyLCAmZmFkZHIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0cmFuc3BvcnRzIGFzIHRoZXkncmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uCisgKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZworICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG8KKyAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LgorICovCit2b2lkIHJkc19jb25uX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZHNkZWJ1ZygiY29ubmVjdGlvbiAlcEk0IHRvICVwSTQgcmVzZXRcbiIsCisJICAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIpOworCisJcmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpOworCXJkc19zZW5kX3Jlc2V0KGNvbm4pOworCWNvbm4tPmNfZmxhZ3MgPSAwOworCisJLyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoCisJICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsCisJICogb2YgdGhlbSB0byB0aGUgYXBwbGljYXRpb24uIFRoYXQgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUKKwkgKiByZWxpYWJpbGl0eSBndWFyYW50ZWVzIG9mIFJEUy4gKi8KK30KKworLyoKKyAqIFRoZXJlIGlzIG9ubHkgZXZlcnkgb25lICdjb25uJyBmb3IgYSBnaXZlbiBwYWlyIG9mIGFkZHJlc3NlcyBpbiB0aGUKKyAqIHN5c3RlbSBhdCBhIHRpbWUuICBUaGV5IGNvbnRhaW4gbWVzc2FnZXMgdG8gYmUgcmV0cmFuc21pdHRlZCBhbmQgc28KKyAqIHNwYW4gdGhlIGxpZmV0aW1lIG9mIHRoZSBhY3R1YWwgdW5kZXJseWluZyB0cmFuc3BvcnQgY29ubmVjdGlvbnMuCisgKgorICogRm9yIG5vdyB0aGV5IGFyZSBub3QgZ2FyYmFnZSBjb2xsZWN0ZWQgb25jZSB0aGV5J3JlIGNyZWF0ZWQuICBUaGV5CisgKiBhcmUgdG9ybiBkb3duIGFzIHRoZSBtb2R1bGUgaXMgcmVtb3ZlZCwgaWYgZXZlci4KKyAqLworc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwLAorCQkJCSAgICAgICBpbnQgaXNfb3V0Z29pbmcpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCAqdG1wLCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IHJkc19jb25uX2J1Y2tldChsYWRkciwgZmFkZHIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisJY29ubiA9IHJkc19jb25uX2xvb2t1cChoZWFkLCBsYWRkciwgZmFkZHIsIHRyYW5zKTsKKwlpZiAoY29ubgorCSAmJiBjb25uLT5jX2xvb3BiYWNrCisJICYmIGNvbm4tPmNfdHJhbnMgIT0gJnJkc19sb29wX3RyYW5zcG9ydAorCSAmJiAhaXNfb3V0Z29pbmcpIHsKKwkJLyogVGhpcyBpcyBhIGxvb3BlZCBiYWNrIElCIGNvbm5lY3Rpb24sIGFuZCB3ZSdyZQorCQkgKiBjYWxsZWQgYnkgdGhlIGNvZGUgaGFuZGxpbmcgdGhlIGluY29taW5nIGNvbm5lY3QuCisJCSAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZQorCQkgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqLworCQlwYXJlbnQgPSBjb25uOworCQljb25uID0gcGFyZW50LT5jX3Bhc3NpdmU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKwlpZiAoY29ubikKKwkJZ290byBvdXQ7CisKKwljb25uID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfY29ubl9zbGFiLCBnZnApOworCWlmIChjb25uID09IE5VTEwpIHsKKwkJY29ubiA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldChjb25uLCAwLCBzaXplb2YoKmNvbm4pKTsKKworCUlOSVRfSExJU1RfTk9ERSgmY29ubi0+Y19oYXNoX25vZGUpOworCWNvbm4tPmNfdmVyc2lvbiA9IFJEU19QUk9UT0NPTF8zXzA7CisJY29ubi0+Y19sYWRkciA9IGxhZGRyOworCWNvbm4tPmNfZmFkZHIgPSBmYWRkcjsKKwlzcGluX2xvY2tfaW5pdCgmY29ubi0+Y19sb2NrKTsKKwljb25uLT5jX25leHRfdHhfc2VxID0gMTsKKworCW11dGV4X2luaXQoJmNvbm4tPmNfc2VuZF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY29ubi0+Y19zZW5kX3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmY29ubi0+Y19yZXRyYW5zKTsKKworCXJldCA9IHJkc19jb25nX2dldF9tYXBzKGNvbm4pOworCWlmIChyZXQpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQljb25uID0gRVJSX1BUUihyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoaXMgaXMgd2hlcmUgYSBjb25uZWN0aW9uIGJlY29tZXMgbG9vcGJhY2suICBJZiAqYW55KiBSRFMgc29ja2V0cworCSAqIGNhbiBiaW5kIHRvIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRoZW4gd2UnZCByYXRoZXIgdGhlIG1lc3NhZ2VzCisJICogZmxvdyB0aHJvdWdoIGxvb3BiYWNrIHJhdGhlciB0aGFuIGVpdGhlciB0cmFuc3BvcnQuCisJICovCisJaWYgKHJkc190cmFuc19nZXRfcHJlZmVycmVkKGZhZGRyKSkgeworCQljb25uLT5jX2xvb3BiYWNrID0gMTsKKwkJaWYgKGlzX291dGdvaW5nICYmIHRyYW5zLT50X3ByZWZlcl9sb29wYmFjaykgeworCQkJLyogIm91dGdvaW5nIiBjb25uZWN0aW9uIC0gYW5kIHRoZSB0cmFuc3BvcnQKKwkJCSAqIHNheXMgaXQgd2FudHMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlZCBieSB0aGUKKwkJCSAqIGxvb3BiYWNrIHRyYW5zcG9ydC4gVGhpcyBpcyB3aGF0IFRDUCBkb2VzLgorCQkJICovCisJCQl0cmFucyA9ICZyZHNfbG9vcF90cmFuc3BvcnQ7CisJCX0KKwl9CisKKwljb25uLT5jX3RyYW5zID0gdHJhbnM7CisKKwlyZXQgPSB0cmFucy0+Y29ubl9hbGxvYyhjb25uLCBnZnApOworCWlmIChyZXQpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQljb25uID0gRVJSX1BUUihyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9ET1dOKTsKKwljb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID0gMDsKKwlJTklUX0RFTEFZRURfV09SSygmY29ubi0+Y19zZW5kX3csIHJkc19zZW5kX3dvcmtlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvbm4tPmNfcmVjdl93LCByZHNfcmVjdl93b3JrZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb25uLT5jX2Nvbm5fdywgcmRzX2Nvbm5lY3Rfd29ya2VyKTsKKwlJTklUX1dPUksoJmNvbm4tPmNfZG93bl93LCByZHNfc2h1dGRvd25fd29ya2VyKTsKKwltdXRleF9pbml0KCZjb25uLT5jX2NtX2xvY2spOworCWNvbm4tPmNfZmxhZ3MgPSAwOworCisJcmRzZGVidWcoImFsbG9jYXRlZCBjb25uICVwIGZvciAlcEk0IC0+ICVwSTQgb3ZlciAlcyAlc1xuIiwKKwkgIGNvbm4sICZsYWRkciwgJmZhZGRyLAorCSAgdHJhbnMtPnRfbmFtZSA/IHRyYW5zLT50X25hbWUgOiAiW3Vua25vd25dIiwKKwkgIGlzX291dGdvaW5nID8gIihvdXRnb2luZykiIDogIiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKwlpZiAocGFyZW50ID09IE5VTEwpIHsKKwkJdG1wID0gcmRzX2Nvbm5fbG9va3VwKGhlYWQsIGxhZGRyLCBmYWRkciwgdHJhbnMpOworCQlpZiAodG1wID09IE5VTEwpCisJCQlobGlzdF9hZGRfaGVhZCgmY29ubi0+Y19oYXNoX25vZGUsIGhlYWQpOworCX0gZWxzZSB7CisJCXRtcCA9IHBhcmVudC0+Y19wYXNzaXZlOworCQlpZiAoIXRtcCkKKwkJCXBhcmVudC0+Y19wYXNzaXZlID0gY29ubjsKKwl9CisKKwlpZiAodG1wKSB7CisJCXRyYW5zLT5jb25uX2ZyZWUoY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKwkJY29ubiA9IHRtcDsKKwl9IGVsc2UgeworCQlyZHNfY29uZ19hZGRfY29ubihjb25uKTsKKwkJcmRzX2Nvbm5fY291bnQrKzsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlyZXR1cm4gY29ubjsKK30KKworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGUoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBfX3Jkc19jb25uX2NyZWF0ZShsYWRkciwgZmFkZHIsIHRyYW5zLCBnZnAsIDApOworfQorCitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApCit7CisJcmV0dXJuIF9fcmRzX2Nvbm5fY3JlYXRlKGxhZGRyLCBmYWRkciwgdHJhbnMsIGdmcCwgMSk7Cit9CisKK3ZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnJ0bXA7CisKKwlyZHNkZWJ1ZygiZnJlZWluZyBjb25uICVwIGZvciAlcEk0IC0+ICIKKwkJICIlcEk0XG4iLCBjb25uLCAmY29ubi0+Y19sYWRkciwKKwkJICZjb25uLT5jX2ZhZGRyKTsKKworCWhsaXN0X2RlbF9pbml0KCZjb25uLT5jX2hhc2hfbm9kZSk7CisKKwkvKiB3YWl0IGZvciB0aGUgcmRzIHRocmVhZCB0byBzaHV0IGl0IGRvd24gKi8KKwlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9FUlJPUik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29ubi0+Y19jb25uX3cpOworCXF1ZXVlX3dvcmsocmRzX3dxLCAmY29ubi0+Y19kb3duX3cpOworCWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOworCisJLyogdGVhciBkb3duIHF1ZXVlZCBtZXNzYWdlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgcnRtcCwKKwkJCQkgJmNvbm4tPmNfc2VuZF9xdWV1ZSwKKwkJCQkgbV9jb25uX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fY29ubl9pdGVtKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9zb2NrX2l0ZW0pKTsKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwl9CisJaWYgKGNvbm4tPmNfeG1pdF9ybSkKKwkJcmRzX21lc3NhZ2VfcHV0KGNvbm4tPmNfeG1pdF9ybSk7CisKKwljb25uLT5jX3RyYW5zLT5jb25uX2ZyZWUoY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisKKwkvKgorCSAqIFRoZSBjb25nZXN0aW9uIG1hcHMgYXJlbid0IGZyZWVkIHVwIGhlcmUuICBUaGV5J3JlCisJICogZnJlZWQgYnkgcmRzX2NvbmdfZXhpdCgpIGFmdGVyIGFsbCB0aGUgY29ubmVjdGlvbnMKKwkgKiBoYXZlIGJlZW4gZnJlZWQuCisJICovCisJcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmNvbm4tPmNfcmV0cmFucykpOworCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKworCXJkc19jb25uX2NvdW50LS07Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX21lc3NhZ2VfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMsCisJCQkJICBpbnQgd2FudF9zZW5kKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0b3RhbCA9IDA7CisJc2l6ZV90IGk7CisKKwlsZW4gLz0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwLCBoZWFkID0gcmRzX2Nvbm5faGFzaDsgaSA8IEFSUkFZX1NJWkUocmRzX2Nvbm5faGFzaCk7CisJICAgICBpKyssIGhlYWQrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBwb3MsIGhlYWQsIGNfaGFzaF9ub2RlKSB7CisJCQlpZiAod2FudF9zZW5kKQorCQkJCWxpc3QgPSAmY29ubi0+Y19zZW5kX3F1ZXVlOworCQkJZWxzZQorCQkJCWxpc3QgPSAmY29ubi0+Y19yZXRyYW5zOworCisJCQlzcGluX2xvY2soJmNvbm4tPmNfbG9jayk7CisKKwkJCS8qIFhYWCB0b28gbGF6eSB0byBtYWludGFpbiBjb3VudHMuLiAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShybSwgbGlzdCwgbV9jb25uX2l0ZW0pIHsKKwkJCQl0b3RhbCsrOworCQkJCWlmICh0b3RhbCA8PSBsZW4pCisJCQkJCXJkc19pbmNfaW5mb19jb3B5KCZybS0+bV9pbmMsIGl0ZXIsCisJCQkJCQkJICBjb25uLT5jX2xhZGRyLAorCQkJCQkJCSAgY29ubi0+Y19mYWRkciwgMCk7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrKCZjb25uLT5jX2xvY2spOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCisJbGVucy0+bnIgPSB0b3RhbDsKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfY29ubl9tZXNzYWdlX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLCAxKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3JldHJhbnMoc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkJICB1bnNpZ25lZCBpbnQgbGVuLAorCQkJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfY29ubl9tZXNzYWdlX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLCAwKTsKK30KKwordm9pZCByZHNfZm9yX2VhY2hfY29ubl9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMsCisJCQkgIGludCAoKnZpc2l0b3IpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqLCB2b2lkICopLAorCQkJICBzaXplX3QgaXRlbV9sZW4pCit7CisJdWludDY0X3QgYnVmZmVyWyhpdGVtX2xlbiArIDcpIC8gOF07CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNpemVfdCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworCWxlbnMtPm5yID0gMDsKKwlsZW5zLT5lYWNoID0gaXRlbV9sZW47CisKKwlmb3IgKGkgPSAwLCBoZWFkID0gcmRzX2Nvbm5faGFzaDsgaSA8IEFSUkFZX1NJWkUocmRzX2Nvbm5faGFzaCk7CisJICAgICBpKyssIGhlYWQrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHBvcywgdG1wLCBoZWFkLCBjX2hhc2hfbm9kZSkgeworCisJCQkvKiBYWFggbm8gY19sb2NrIHVzYWdlLi4gKi8KKwkJCWlmICghdmlzaXRvcihjb25uLCBidWZmZXIpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBXZSBjb3B5IGFzIG11Y2ggYXMgd2UgY2FuIGZpdCBpbiB0aGUgYnVmZmVyLAorCQkJICogYnV0IHdlIGNvdW50IGFsbCBpdGVtcyBzbyB0aGF0IHRoZSBjYWxsZXIKKwkJCSAqIGNhbiByZXNpemUgdGhlIGJ1ZmZlci4gKi8KKwkJCWlmIChsZW4gPj0gaXRlbV9sZW4pIHsKKwkJCQlyZHNfaW5mb19jb3B5KGl0ZXIsIGJ1ZmZlciwgaXRlbV9sZW4pOworCQkJCWxlbiAtPSBpdGVtX2xlbjsKKwkJCX0KKwkJCWxlbnMtPm5yKys7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2Nvbm5faW5mb192aXNpdG9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fY29ubmVjdGlvbiAqY2luZm8gPSBidWZmZXI7CisKKwljaW5mby0+bmV4dF90eF9zZXEgPSBjb25uLT5jX25leHRfdHhfc2VxOworCWNpbmZvLT5uZXh0X3J4X3NlcSA9IGNvbm4tPmNfbmV4dF9yeF9zZXE7CisJY2luZm8tPmxhZGRyID0gY29ubi0+Y19sYWRkcjsKKwljaW5mby0+ZmFkZHIgPSBjb25uLT5jX2ZhZGRyOworCXN0cm5jcHkoY2luZm8tPnRyYW5zcG9ydCwgY29ubi0+Y190cmFucy0+dF9uYW1lLAorCQlzaXplb2YoY2luZm8tPnRyYW5zcG9ydCkpOworCWNpbmZvLT5mbGFncyA9IDA7CisKKwlyZHNfY29ubl9pbmZvX3NldChjaW5mby0+ZmxhZ3MsCisJCQkgIHJkc19jb25uX2lzX3NlbmRpbmcoY29ubiksIFNFTkRJTkcpOworCS8qIFhYWCBGdXR1cmU6IHJldHVybiB0aGUgc3RhdGUgcmF0aGVyIHRoYW4gdGhlc2UgZnVua3kgYml0cyAqLworCXJkc19jb25uX2luZm9fc2V0KGNpbmZvLT5mbGFncywKKwkJCSAgYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX0NPTk5FQ1RJTkcsCisJCQkgIENPTk5FQ1RJTkcpOworCXJkc19jb25uX2luZm9fc2V0KGNpbmZvLT5mbGFncywKKwkJCSAgYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX1VQLAorCQkJICBDT05ORUNURUQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsCisJCQkJcmRzX2Nvbm5faW5mb192aXNpdG9yLAorCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2luZm9fY29ubmVjdGlvbikpOworfQorCitpbnQgX19pbml0IHJkc19jb25uX2luaXQodm9pZCkKK3sKKwlyZHNfY29ubl9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19jb25uZWN0aW9uIiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHJkc19jb25uZWN0aW9uKSwKKwkJCQkJICAwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2Nvbm5fc2xhYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09OTkVDVElPTlMsIHJkc19jb25uX2luZm8pOworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU0VORF9NRVNTQUdFUywKKwkJCSAgICAgICByZHNfY29ubl9tZXNzYWdlX2luZm9fc2VuZCk7CisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRVRSQU5TX01FU1NBR0VTLAorCQkJICAgICAgIHJkc19jb25uX21lc3NhZ2VfaW5mb19yZXRyYW5zKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19jb25uX2V4aXQodm9pZCkKK3sKKwlyZHNfbG9vcF9leGl0KCk7CisKKwlXQVJOX09OKCFobGlzdF9lbXB0eShyZHNfY29ubl9oYXNoKSk7CisKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2Nvbm5fc2xhYik7CisKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09OTkVDVElPTlMsIHJkc19jb25uX2luZm8pOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19TRU5EX01FU1NBR0VTLAorCQkJCSByZHNfY29ubl9tZXNzYWdlX2luZm9fc2VuZCk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1JFVFJBTlNfTUVTU0FHRVMsCisJCQkJIHJkc19jb25uX21lc3NhZ2VfaW5mb19yZXRyYW5zKTsKK30KKworLyoKKyAqIEZvcmNlIGEgZGlzY29ubmVjdAorICovCit2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0VSUk9SKTsKKwlxdWV1ZV93b3JrKHJkc193cSwgJmNvbm4tPmNfZG93bl93KTsKK30KKworLyoKKyAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQKK19fcmRzX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnByaW50ayhmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmRzX2Nvbm5fZHJvcChjb25uKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmE3Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYi5jCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCit1bnNpZ25lZCBpbnQgZm1yX3Bvb2xfc2l6ZSA9IFJEU19GTVJfUE9PTF9TSVpFOwordW5zaWduZWQgaW50IGZtcl9tZXNzYWdlX3NpemUgPSBSRFNfRk1SX1NJWkUgKyAxOyAvKiArMSBhbGxvd3MgZm9yIHVuYWxpZ25lZCBNUnMgKi8KKworbW9kdWxlX3BhcmFtKGZtcl9wb29sX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtcl9wb29sX3NpemUsICIgTWF4IG51bWJlciBvZiBmbXIgcGVyIEhDQSIpOworbW9kdWxlX3BhcmFtKGZtcl9tZXNzYWdlX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtcl9tZXNzYWdlX3NpemUsICIgTWF4IHNpemUgb2YgYSBSRE1BIHRyYW5zZmVyIik7CisKK3N0cnVjdCBsaXN0X2hlYWQgcmRzX2liX2RldmljZXM7CisKK0RFRklORV9TUElOTE9DSyhpYl9ub2Rldl9jb25uc19sb2NrKTsKK0xJU1RfSEVBRChpYl9ub2Rldl9jb25ucyk7CisKK3ZvaWQgcmRzX2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IGliX2RldmljZV9hdHRyICpkZXZfYXR0cjsKKworCS8qIE9ubHkgaGFuZGxlIElCIChubyBpV0FSUCkgZGV2aWNlcyAqLworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfSUJfQ0EpCisJCXJldHVybjsKKworCWRldl9hdHRyID0ga21hbGxvYyhzaXplb2YgKmRldl9hdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9hdHRyKQorCQlyZXR1cm47CisKKwlpZiAoaWJfcXVlcnlfZGV2aWNlKGRldmljZSwgZGV2X2F0dHIpKSB7CisJCXJkc2RlYnVnKCJRdWVyeSBkZXZpY2UgZmFpbGVkIGZvciAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKKwkJZ290byBmcmVlX2F0dHI7CisJfQorCisJcmRzX2liZGV2ID0ga21hbGxvYyhzaXplb2YgKnJkc19pYmRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZHNfaWJkZXYpCisJCWdvdG8gZnJlZV9hdHRyOworCisJc3Bpbl9sb2NrX2luaXQoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJcmRzX2liZGV2LT5tYXhfd3JzID0gZGV2X2F0dHItPm1heF9xcF93cjsKKwlyZHNfaWJkZXYtPm1heF9zZ2UgPSBtaW4oZGV2X2F0dHItPm1heF9zZ2UsIFJEU19JQl9NQVhfU0dFKTsKKworCXJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQgPSBtYXgoOSwgZmZzKGRldl9hdHRyLT5wYWdlX3NpemVfY2FwKSAtIDEpOworCXJkc19pYmRldi0+Zm1yX3BhZ2Vfc2l6ZSAgPSAxIDw8IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJcmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrICA9IH4oKHU2NCkgcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplIC0gMSk7CisJcmRzX2liZGV2LT5mbXJfbWF4X3JlbWFwcyA9IGRldl9hdHRyLT5tYXhfbWFwX3Blcl9mbXI/OiAzMjsKKwlyZHNfaWJkZXYtPm1heF9mbXJzID0gZGV2X2F0dHItPm1heF9mbXIgPworCQkJbWluX3QodW5zaWduZWQgaW50LCBkZXZfYXR0ci0+bWF4X2ZtciwgZm1yX3Bvb2xfc2l6ZSkgOgorCQkJZm1yX3Bvb2xfc2l6ZTsKKworCXJkc19pYmRldi0+ZGV2ID0gZGV2aWNlOworCXJkc19pYmRldi0+cGQgPSBpYl9hbGxvY19wZChkZXZpY2UpOworCWlmIChJU19FUlIocmRzX2liZGV2LT5wZCkpCisJCWdvdG8gZnJlZV9kZXY7CisKKwlyZHNfaWJkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaWJkZXYtPnBkLAorCQkJCSAgICAgIElCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJaWYgKElTX0VSUihyZHNfaWJkZXYtPm1yKSkKKwkJZ290byBlcnJfcGQ7CisKKwlyZHNfaWJkZXYtPm1yX3Bvb2wgPSByZHNfaWJfY3JlYXRlX21yX3Bvb2wocmRzX2liZGV2KTsKKwlpZiAoSVNfRVJSKHJkc19pYmRldi0+bXJfcG9vbCkpIHsKKwkJcmRzX2liZGV2LT5tcl9wb29sID0gTlVMTDsKKwkJZ290byBlcnJfbXI7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYmRldi0+aXBhZGRyX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmcmRzX2liZGV2LT5saXN0LCAmcmRzX2liX2RldmljZXMpOworCisJaWJfc2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pYl9jbGllbnQsIHJkc19pYmRldik7CisKKwlnb3RvIGZyZWVfYXR0cjsKKworZXJyX21yOgorCWliX2RlcmVnX21yKHJkc19pYmRldi0+bXIpOworZXJyX3BkOgorCWliX2RlYWxsb2NfcGQocmRzX2liZGV2LT5wZCk7CitmcmVlX2RldjoKKwlrZnJlZShyZHNfaWJkZXYpOworZnJlZV9hdHRyOgorCWtmcmVlKGRldl9hdHRyKTsKK30KKwordm9pZCByZHNfaWJfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHIsICppX25leHQ7CisKKwlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisJaWYgKCFyZHNfaWJkZXYpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpX2lwYWRkciwgaV9uZXh0LCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmaV9pcGFkZHItPmxpc3QpOworCQlrZnJlZShpX2lwYWRkcik7CisJfQorCisJcmRzX2liX3JlbW92ZV9jb25ucyhyZHNfaWJkZXYpOworCisJaWYgKHJkc19pYmRldi0+bXJfcG9vbCkKKwkJcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChyZHNfaWJkZXYtPm1yX3Bvb2wpOworCisJaWJfZGVyZWdfbXIocmRzX2liZGV2LT5tcik7CisKKwl3aGlsZSAoaWJfZGVhbGxvY19wZChyZHNfaWJkZXYtPnBkKSkgeworCQlyZHNkZWJ1ZygiRmFpbGVkIHRvIGRlYWxsb2MgcGQgJXBcbiIsIHJkc19pYmRldi0+cGQpOworCQltc2xlZXAoMSk7CisJfQorCisJbGlzdF9kZWwoJnJkc19pYmRldi0+bGlzdCk7CisJa2ZyZWUocmRzX2liZGV2KTsKK30KKworc3RydWN0IGliX2NsaWVudCByZHNfaWJfY2xpZW50ID0geworCS5uYW1lICAgPSAicmRzX2liIiwKKwkuYWRkICAgID0gcmRzX2liX2FkZF9vbmUsCisJLnJlbW92ZSA9IHJkc19pYl9yZW1vdmVfb25lCit9OworCitzdGF0aWMgaW50IHJkc19pYl9jb25uX2luZm9fdmlzaXRvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICAgIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljOworCisJLyogV2Ugd2lsbCBvbmx5IGV2ZXIgbG9vayBhdCBJQiB0cmFuc3BvcnRzICovCisJaWYgKGNvbm4tPmNfdHJhbnMgIT0gJnJkc19pYl90cmFuc3BvcnQpCisJCXJldHVybiAwOworCisJaWluZm8tPnNyY19hZGRyID0gY29ubi0+Y19sYWRkcjsKKwlpaW5mby0+ZHN0X2FkZHIgPSBjb25uLT5jX2ZhZGRyOworCisJbWVtc2V0KCZpaW5mby0+c3JjX2dpZCwgMCwgc2l6ZW9mKGlpbmZvLT5zcmNfZ2lkKSk7CisJbWVtc2V0KCZpaW5mby0+ZHN0X2dpZCwgMCwgc2l6ZW9mKGlpbmZvLT5kc3RfZ2lkKSk7CisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcjsKKworCQlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJCWRldl9hZGRyID0gJmljLT5pX2NtX2lkLT5yb3V0ZS5hZGRyLmRldl9hZGRyOworCisJCWliX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5zcmNfZ2lkKTsKKwkJaWJfYWRkcl9nZXRfZGdpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPmRzdF9naWQpOworCisJCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisJCWlpbmZvLT5tYXhfc2VuZF93ciA9IGljLT5pX3NlbmRfcmluZy53X25yOworCQlpaW5mby0+bWF4X3JlY3Zfd3IgPSBpYy0+aV9yZWN2X3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9zZW5kX3NnZSA9IHJkc19pYmRldi0+bWF4X3NnZTsKKwkJcmRzX2liX2dldF9tcl9pbmZvKHJkc19pYmRldiwgaWluZm8pOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX2ljX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19mb3JfZWFjaF9jb25uX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLAorCQkJCXJkc19pYl9jb25uX2luZm9fdmlzaXRvciwKKwkJCQlzaXplb2Yoc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbikpOworfQorCisKKy8qCisgKiBFYXJseSBSRFMvSUIgd2FzIGJ1aWx0IHRvIG9ubHkgYmluZCB0byBhbiBhZGRyZXNzIGlmIHRoZXJlIGlzIGFuIElQb0lCCisgKiBkZXZpY2Ugd2l0aCB0aGF0IGFkZHJlc3Mgc2V0LgorICoKKyAqIElmIGl0IHdlcmUgbWUsIEknZCBhZHZvY2F0ZSBmb3Igc29tZXRoaW5nIG1vcmUgZmxleGlibGUuICBTZW5kaW5nIGFuZAorICogcmVjZWl2aW5nIHNob3VsZCBiZSBkZXZpY2UtYWdub3N0aWMuICBUcmFuc3BvcnRzIHdvdWxkIHRyeSBhbmQgbWFpbnRhaW4KKyAqIGNvbm5lY3Rpb25zIGJldHdlZW4gcGVlcnMgd2hvIGhhdmUgbWVzc2FnZXMgcXVldWVkLiAgVXNlcnNwYWNlIHdvdWxkIGJlCisgKiBhbGxvd2VkIHRvIGluZmx1ZW5jZSB3aGljaCBwYXRocyBoYXZlIHByaW9yaXR5LiAgV2UgY291bGQgY2FsbCB1c2Vyc3BhY2UKKyAqIGFzc2VydGluZyB0aGlzIHBvbGljeSAicm91dGluZyIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2liX2xhZGRyX2NoZWNrKF9fYmUzMiBhZGRyKQoreworCWludCByZXQ7CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisKKwkvKiBDcmVhdGUgYSBDTUEgSUQgYW5kIHRyeSB0byBiaW5kIGl0LiBUaGlzIGNhdGNoZXMgYm90aAorCSAqIElCIGFuZCBpV0FSUCBjYXBhYmxlIE5JQ3MuCisJICovCisJY21faWQgPSByZG1hX2NyZWF0ZV9pZChOVUxMLCBOVUxMLCBSRE1BX1BTX1RDUCk7CisJaWYgKCFjbV9pZCkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luLnNpbl9hZGRyLnNfYWRkciA9IGFkZHI7CisKKwkvKiByZG1hX2JpbmRfYWRkciB3aWxsIG9ubHkgc3VjY2VlZCBmb3IgSUIgJiBpV0FSUCBkZXZpY2VzICovCisJcmV0ID0gcmRtYV9iaW5kX2FkZHIoY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luKTsKKwkvKiBkdWUgdG8gdGhpcywgd2Ugd2lsbCBjbGFpbSB0byBzdXBwb3J0IGlXQVJQIGRldmljZXMgdW5sZXNzIHdlCisJICAgY2hlY2sgbm9kZV90eXBlLiAqLworCWlmIChyZXQgfHwgY21faWQtPmRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9JQl9DQSkKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisKKwlyZHNkZWJ1ZygiYWRkciAlcEk0IHJldCAlZCBub2RlIHR5cGUgJWRcbiIsCisJCSZhZGRyLCByZXQsCisJCWNtX2lkLT5kZXZpY2UgPyBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgOiAtMSk7CisKKwlyZG1hX2Rlc3Ryb3lfaWQoY21faWQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfZXhpdCh2b2lkKQoreworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JQl9DT05ORUNUSU9OUywgcmRzX2liX2ljX2luZm8pOworCXJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnMoKTsKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2liX2NsaWVudCk7CisJcmRzX2liX3N5c2N0bF9leGl0KCk7CisJcmRzX2liX3JlY3ZfZXhpdCgpOworCXJkc190cmFuc191bnJlZ2lzdGVyKCZyZHNfaWJfdHJhbnNwb3J0KTsKK30KKworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydCA9IHsKKwkubGFkZHJfY2hlY2sJCT0gcmRzX2liX2xhZGRyX2NoZWNrLAorCS54bWl0X2NvbXBsZXRlCQk9IHJkc19pYl94bWl0X2NvbXBsZXRlLAorCS54bWl0CQkJPSByZHNfaWJfeG1pdCwKKwkueG1pdF9jb25nX21hcAkJPSBOVUxMLAorCS54bWl0X3JkbWEJCT0gcmRzX2liX3htaXRfcmRtYSwKKwkucmVjdgkJCT0gcmRzX2liX3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2liX2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfaWJfY29ubl9mcmVlLAorCS5jb25uX2Nvbm5lY3QJCT0gcmRzX2liX2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfaWJfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc19pYl9pbmNfY29weV90b191c2VyLAorCS5pbmNfcHVyZ2UJCT0gcmRzX2liX2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX2liX2luY19mcmVlLAorCS5jbV9pbml0aWF0ZV9jb25uZWN0CT0gcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3QsCisJLmNtX2hhbmRsZV9jb25uZWN0CT0gcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0LAorCS5jbV9jb25uZWN0X2NvbXBsZXRlCT0gcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUsCisJLnN0YXRzX2luZm9fY29weQk9IHJkc19pYl9zdGF0c19pbmZvX2NvcHksCisJLmV4aXQJCQk9IHJkc19pYl9leGl0LAorCS5nZXRfbXIJCQk9IHJkc19pYl9nZXRfbXIsCisJLnN5bmNfbXIJCT0gcmRzX2liX3N5bmNfbXIsCisJLmZyZWVfbXIJCT0gcmRzX2liX2ZyZWVfbXIsCisJLmZsdXNoX21ycwkJPSByZHNfaWJfZmx1c2hfbXJzLAorCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAorCS50X25hbWUJCQk9ICJpbmZpbmliYW5kIiwKK307CisKK2ludCBfX2luaXQgcmRzX2liX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pYl9kZXZpY2VzKTsKKworCXJldCA9IGliX3JlZ2lzdGVyX2NsaWVudCgmcmRzX2liX2NsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZHNfaWJfc3lzY3RsX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pYnJlZzsKKworCXJldCA9IHJkc19pYl9yZWN2X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNjdGw7CisKKwlyZXQgPSByZHNfdHJhbnNfcmVnaXN0ZXIoJnJkc19pYl90cmFuc3BvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlY3Y7CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TLCByZHNfaWJfaWNfaW5mbyk7CisKKwlnb3RvIG91dDsKKworb3V0X3JlY3Y6CisJcmRzX2liX3JlY3ZfZXhpdCgpOworb3V0X3N5c2N0bDoKKwlyZHNfaWJfc3lzY3RsX2V4aXQoKTsKK291dF9pYnJlZzoKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2liX2NsaWVudCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmggYi9uZXQvcmRzL2liLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlNTYzYQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWIuaApAQCAtMCwwICsxLDM2NyBAQAorI2lmbmRlZiBfUkRTX0lCX0gKKyNkZWZpbmUgX1JEU19JQl9ICisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworI2RlZmluZSBSRFNfRk1SX1NJWkUJCQkyNTYKKyNkZWZpbmUgUkRTX0ZNUl9QT09MX1NJWkUJCTQwOTYKKworI2RlZmluZSBSRFNfSUJfTUFYX1NHRQkJCTgKKyNkZWZpbmUgUkRTX0lCX1JFQ1ZfU0dFIAkJMgorCisjZGVmaW5lIFJEU19JQl9ERUZBVUxUX1JFQ1ZfV1IJCTEwMjQKKyNkZWZpbmUgUkRTX0lCX0RFRkFVTFRfU0VORF9XUgkJMjU2CisKKyNkZWZpbmUgUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFMJMHgwMDAwMDAwMwkvKiBtaW5vciB2ZXJzaW9ucyBzdXBwb3J0ZWQgKi8KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2liX2RldmljZXM7CisKKy8qCisgKiBJQiBwb3N0cyBSRFNfRlJBR19TSVpFIGZyYWdtZW50cyBvZiBwYWdlcyB0byB0aGUgcmVjZWl2ZSBxdWV1ZXMgdG8KKyAqIHRyeSBhbmQgbWluaW1pemUgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGllZCB1cCBib3RoIHRoZSBkZXZpY2UgYW5kCisgKiBzb2NrZXQgcmVjZWl2ZSBxdWV1ZXMuCisgKi8KKy8qIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBmaW5hbCBmdWxsIGZyYWcgdGhhdCBmaXRzIGluIHRoZSBwYWdlICovCisjZGVmaW5lIFJEU19QQUdFX0xBU1RfT0ZGICgoKFBBR0VfU0laRSAgLyBSRFNfRlJBR19TSVpFKSAtIDEpICogUkRTX0ZSQUdfU0laRSkKK3N0cnVjdCByZHNfcGFnZV9mcmFnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZfaXRlbTsKKwlzdHJ1Y3QgcGFnZQkJKmZfcGFnZTsKKwl1bnNpZ25lZCBsb25nCQlmX29mZnNldDsKKwlkbWFfYWRkcl90IAkJZl9tYXBwZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2liX2luY29taW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlpX2ZyYWdzOworCXN0cnVjdCByZHNfaW5jb21pbmcJaWlfaW5jOworfTsKKworc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgeworCS8qIEFkZCBuZXcgZmllbGRzIGF0IHRoZSBlbmQsIGFuZCBkb24ndCBwZXJtdXRlIGV4aXN0aW5nIGZpZWxkcy4gKi8KKwlfX2JlMzIJCQlkcF9zYWRkcjsKKwlfX2JlMzIJCQlkcF9kYWRkcjsKKwl1OAkJCWRwX3Byb3RvY29sX21ham9yOworCXU4CQkJZHBfcHJvdG9jb2xfbWlub3I7CisJX19iZTE2CQkJZHBfcHJvdG9jb2xfbWlub3JfbWFzazsgLyogYml0bWFzayAqLworCV9fYmUzMgkJCWRwX3Jlc2VydmVkMTsKKwlfX2JlNjQJCQlkcF9hY2tfc2VxOworCV9fYmUzMgkJCWRwX2NyZWRpdDsJCS8qIG5vbi16ZXJvIGVuYWJsZXMgZmxvdyBjdGwgKi8KK307CisKK3N0cnVjdCByZHNfaWJfc2VuZF93b3JrIHsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKnNfcm07CisJc3RydWN0IHJkc19yZG1hX29wCSpzX29wOworCXN0cnVjdCBpYl9zZW5kX3dyCXNfd3I7CisJc3RydWN0IGliX3NnZQkJc19zZ2VbUkRTX0lCX01BWF9TR0VdOworCXVuc2lnbmVkIGxvbmcJCXNfcXVldWVkOworfTsKKworc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgeworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgCSpyX2liaW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCSpyX2ZyYWc7CisJc3RydWN0IGliX3JlY3Zfd3IJcl93cjsKKwlzdHJ1Y3QgaWJfc2dlCQlyX3NnZVsyXTsKK307CisKK3N0cnVjdCByZHNfaWJfd29ya19yaW5nIHsKKwl1MzIJCXdfbnI7CisJdTMyCQl3X2FsbG9jX3B0cjsKKwl1MzIJCXdfYWxsb2NfY3RyOworCXUzMgkJd19mcmVlX3B0cjsKKwlhdG9taWNfdAl3X2ZyZWVfY3RyOworfTsKKworc3RydWN0IHJkc19pYl9kZXZpY2U7CisKK3N0cnVjdCByZHNfaWJfY29ubmVjdGlvbiB7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWliX25vZGU7CisJc3RydWN0IHJkc19pYl9kZXZpY2UJKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24JKmNvbm47CisKKwkvKiBhbHBoYWJldCBzb3VwLCBJQlRBIHN0eWxlICovCisJc3RydWN0IHJkbWFfY21faWQJKmlfY21faWQ7CisJc3RydWN0IGliX3BkCQkqaV9wZDsKKwlzdHJ1Y3QgaWJfbXIJCSppX21yOworCXN0cnVjdCBpYl9jcQkJKmlfc2VuZF9jcTsKKwlzdHJ1Y3QgaWJfY3EJCSppX3JlY3ZfY3E7CisKKwkvKiB0eCAqLworCXN0cnVjdCByZHNfaWJfd29ya19yaW5nCWlfc2VuZF9yaW5nOworCXN0cnVjdCByZHNfbWVzc2FnZQkqaV9ybTsKKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9zZW5kX2hkcnM7CisJdTY0CQkJaV9zZW5kX2hkcnNfZG1hOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICppX3NlbmRzOworCisJLyogcnggKi8KKwlzdHJ1Y3QgbXV0ZXgJCWlfcmVjdl9tdXRleDsKKwlzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZwlpX3JlY3ZfcmluZzsKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nCSppX2liaW5jOworCXUzMgkJCWlfcmVjdl9kYXRhX3JlbTsKKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9yZWN2X2hkcnM7CisJdTY0CQkJaV9yZWN2X2hkcnNfZG1hOworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICppX3JlY3ZzOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCWlfZnJhZzsKKwl1NjQJCQlpX2Fja19yZWN2OwkvKiBsYXN0IEFDSyByZWNlaXZlZCAqLworCisJLyogc2VuZGluZyBhY2tzICovCisJdW5zaWduZWQgbG9uZwkJaV9hY2tfZmxhZ3M7CisJdTY0CQkJaV9hY2tfbmV4dDsJLyogbmV4dCBBQ0sgdG8gc2VuZCAqLworCXN0cnVjdCByZHNfaGVhZGVyCSppX2FjazsKKwlzdHJ1Y3QgaWJfc2VuZF93cglpX2Fja193cjsKKwlzdHJ1Y3QgaWJfc2dlCQlpX2Fja19zZ2U7CisJdTY0CQkJaV9hY2tfZG1hOworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX3F1ZXVlZDsKKworCS8qIEZsb3cgY29udHJvbCByZWxhdGVkIGluZm9ybWF0aW9uCisJICoKKwkgKiBPdXIgYWxnb3JpdGhtIHVzZXMgYSBwYWlyIHZhcmlhYmxlcyB0aGF0IHdlIG5lZWQgdG8gYWNjZXNzCisJICogYXRvbWljYWxseSAtIG9uZSBmb3IgdGhlIHNlbmQgY3JlZGl0cywgYW5kIG9uZSBwb3N0ZWQKKwkgKiByZWN2IGNyZWRpdHMgd2UgbmVlZCB0byB0cmFuc2ZlciB0byByZW1vdGUuCisJICogUmF0aGVyIHRoYW4gcHJvdGVjdCB0aGVtIHVzaW5nIGEgc2xvdyBzcGlubG9jaywgd2UgcHV0IGJvdGggaW50bworCSAqIGEgc2luZ2xlIGF0b21pY190IGFuZCB1cGRhdGUgaXQgdXNpbmcgY21weGNoZworCSAqLworCWF0b21pY190CQlpX2NyZWRpdHM7CisKKwkvKiBQcm90b2NvbCB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgaW50CQlpX2Zsb3djdGw6MTsJLyogZW5hYmxlL2Rpc2FibGUgZmxvdyBjdGwgKi8KKworCS8qIEJhdGNoZWQgY29tcGxldGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQJCWlfdW5zaWduYWxlZF93cnM7CisJbG9uZwkJCWlfdW5zaWduYWxlZF9ieXRlczsKK307CisKKy8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGlzIGF0IGxlYXN0IDMyIGJpdHMgKi8KKyNkZWZpbmUgSUJfR0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9HRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPj4gMTYpCisjZGVmaW5lIElCX1NFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfU0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpIDw8IDE2KQorCitzdHJ1Y3QgcmRzX2liX2lwYWRkciB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCV9fYmUzMgkJCWlwYWRkcjsKK307CisKK3N0cnVjdCByZHNfaWJfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlpcGFkZHJfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbm5fbGlzdDsKKwlzdHJ1Y3QgaWJfZGV2aWNlCSpkZXY7CisJc3RydWN0IGliX3BkCQkqcGQ7CisJc3RydWN0IGliX21yCQkqbXI7CisJc3RydWN0IHJkc19pYl9tcl9wb29sCSptcl9wb29sOworCWludAkJCWZtcl9wYWdlX3NoaWZ0OworCWludAkJCWZtcl9wYWdlX3NpemU7CisJdTY0CQkJZm1yX3BhZ2VfbWFzazsKKwl1bnNpZ25lZCBpbnQJCWZtcl9tYXhfcmVtYXBzOworCXVuc2lnbmVkIGludAkJbWF4X2ZtcnM7CisJaW50CQkJbWF4X3NnZTsKKwl1bnNpZ25lZCBpbnQJCW1heF93cnM7CisJc3BpbmxvY2tfdAkJc3BpbmxvY2s7CS8qIHByb3RlY3QgdGhlIGFib3ZlICovCit9OworCisvKiBiaXRzIGZvciBpX2Fja19mbGFncyAqLworI2RlZmluZSBJQl9BQ0tfSU5fRkxJR0hUCTAKKyNkZWZpbmUgSUJfQUNLX1JFUVVFU1RFRAkxCisKKy8qIE1hZ2ljIFdSX0lEIGZvciBBQ0tzICovCisjZGVmaW5lIFJEU19JQl9BQ0tfV1JfSUQJKH4odTY0KSAwKQorCitzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3MgeworCXVpbnQ2NF90CXNfaWJfY29ubmVjdF9yYWNlZDsKKwl1aW50NjRfdAlzX2liX2xpc3Rlbl9jbG9zZWRfc3RhbGU7CisJdWludDY0X3QJc19pYl90eF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaWJfdHhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pYl90eF9yaW5nX2Z1bGw7CisJdWludDY0X3QJc19pYl90eF90aHJvdHRsZTsKKwl1aW50NjRfdAlzX2liX3R4X3NnX21hcHBpbmdfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2liX3R4X3N0YWxsZWQ7CisJdWludDY0X3QJc19pYl90eF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2liX3J4X2NxX2NhbGw7CisJdWludDY0X3QJc19pYl9yeF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2liX3J4X3JpbmdfZW1wdHk7CisJdWludDY0X3QJc19pYl9yeF9yZWZpbGxfZnJvbV9jcTsKKwl1aW50NjRfdAlzX2liX3J4X3JlZmlsbF9mcm9tX3RocmVhZDsKKwl1aW50NjRfdAlzX2liX3J4X2FsbG9jX2xpbWl0OworCXVpbnQ2NF90CXNfaWJfcnhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pYl9hY2tfc2VudDsKKwl1aW50NjRfdAlzX2liX2Fja19zZW5kX2ZhaWx1cmU7CisJdWludDY0X3QJc19pYl9hY2tfc2VuZF9kZWxheWVkOworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbmRfcGlnZ3liYWNrZWQ7CisJdWludDY0X3QJc19pYl9hY2tfcmVjZWl2ZWQ7CisJdWludDY0X3QJc19pYl9yZG1hX21yX2FsbG9jOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9mcmVlOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl91c2VkOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9wb29sX2ZsdXNoOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9wb29sX3dhaXQ7CisJdWludDY0X3QJc19pYl9yZG1hX21yX3Bvb2xfZGVwbGV0ZWQ7Cit9OworCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc19pYl93cTsKKworLyoKKyAqIEZha2UgaWJfZG1hX3N5bmNfc2dfZm9yX3tjcHUsZGV2aWNlfSBhcyBsb25nIGFzIGliX3ZlcmJzLmgKKyAqIGRvZXNuJ3QgZGVmaW5lIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2NwdQlyZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2NwdQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlyZHNfaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZQorCisKKy8qIGliLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0OworZXh0ZXJuIHZvaWQgcmRzX2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiB2b2lkIHJkc19pYl9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gc3RydWN0IGliX2NsaWVudCByZHNfaWJfY2xpZW50OworCitleHRlcm4gdW5zaWduZWQgaW50IGZtcl9wb29sX3NpemU7CitleHRlcm4gdW5zaWduZWQgaW50IGZtcl9tZXNzYWdlX3NpemU7CisKK2V4dGVybiBzcGlubG9ja190IGliX25vZGV2X2Nvbm5zX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpYl9ub2Rldl9jb25uczsKKworLyogaWJfY20uYyAqLworaW50IHJkc19pYl9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpOworaW50IHJkc19pYl9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2liX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2liX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spOworaW50IF9faW5pdCByZHNfaWJfbGlzdGVuX2luaXQodm9pZCk7Cit2b2lkIHJkc19pYl9saXN0ZW5fc3RvcCh2b2lkKTsKK3ZvaWQgX19yZHNfaWJfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2ludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworaW50IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7Cit2b2lkIHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisKKyNkZWZpbmUgcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfaWJfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUy9JQjogIiBmbXQpCisKKy8qIGliX3JkbWEuYyAqLworaW50IHJkc19pYl91cGRhdGVfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpOworaW50IHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpOwordm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpOworc3RydWN0IHJkc19pYl9tcl9wb29sICpyZHNfaWJfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pYl9kZXZpY2UgKik7Cit2b2lkIHJkc19pYl9nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyk7Cit2b2lkIHJkc19pYl9kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICopOwordm9pZCAqcmRzX2liX2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KTsKK3ZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcik7Cit2b2lkIHJkc19pYl9mcmVlX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKTsKK3ZvaWQgcmRzX2liX2ZsdXNoX21ycyh2b2lkKTsKKworLyogaWJfcmVjdi5jICovCitpbnQgX19pbml0IHJkc19pYl9yZWN2X2luaXQodm9pZCk7Cit2b2lkIHJkc19pYl9yZWN2X2V4aXQodm9pZCk7CitpbnQgcmRzX2liX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCk7Cit2b2lkIHJkc19pYl9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2liX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CitpbnQgcmRzX2liX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgc2l6ZV90IHNpemUpOwordm9pZCByZHNfaWJfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pYl9yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX3JlY3ZfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordTY0IHJkc19pYl9waWdneWJfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOworCisvKiBpYl9yaW5nLmMgKi8KK3ZvaWQgcmRzX2liX3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3ZvaWQgcmRzX2liX3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordTMyIHJkc19pYl9yaW5nX2FsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcyk7Cit2b2lkIHJkc19pYl9yaW5nX2ZyZWUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOwordm9pZCByZHNfaWJfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK2ludCByZHNfaWJfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZyk7CitpbnQgcmRzX2liX3JpbmdfbG93KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaWJfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pYl9yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KTsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfaWJfcmluZ19lbXB0eV93YWl0OworCisvKiBpYl9zZW5kLmMgKi8KK3ZvaWQgcmRzX2liX3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaWJfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpOwordm9pZCByZHNfaWJfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pYl9zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2liX3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK2ludCByZHNfaWJfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCk7Cit2b2lkIHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpOwordm9pZCByZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKTsKK2ludCByZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdTMyIHdhbnRlZCwKKwkJCSAgICAgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKTsKKworLyogaWJfc3RhdHMuYyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByZHNfaWJfc3RhdGlzdGljcywgcmRzX2liX3N0YXRzKTsKKyNkZWZpbmUgcmRzX2liX3N0YXRzX2luYyhtZW1iZXIpIHJkc19zdGF0c19pbmNfd2hpY2gocmRzX2liX3N0YXRzLCBtZW1iZXIpCit1bnNpZ25lZCBpbnQgcmRzX2liX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCk7CisKKy8qIGliX3N5c2N0bC5jICovCitpbnQgX19pbml0IHJkc19pYl9zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX3N5c2N0bF9leGl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfc2VuZF93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2w7CitleHRlcm4gY3RsX3RhYmxlIHJkc19pYl9zeXNjdGxfdGFibGVbXTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgaGVhZGVyIGFuZCBkYXRhIFNHRXMgaW4KKyAqIFJEUyBwYWNrZXRzIChub3QgUkRNQSkKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pYl9oZWFkZXJfc2dlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVswXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pYl9kYXRhX3NnZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfc2V0XzY0Yml0KHU2NCAqcHRyLCB1NjQgdmFsKQoreworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKwkqcHRyID0gdmFsOworI2Vsc2UKKwlzZXRfNjRiaXQocHRyLCB2YWwpOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MzIyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX2NtLmMKQEAgLTAsMCArMSw3MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworLyoKKyAqIFNldCB0aGUgc2VsZWN0ZWQgcHJvdG9jb2wgdmVyc2lvbgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3Byb3RvY29sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJY29ubi0+Y192ZXJzaW9uID0gdmVyc2lvbjsKK30KKworLyoKKyAqIFNldCB1cCBmbG93IGNvbnRyb2wKKyAqLworc3RhdGljIHZvaWQgcmRzX2liX3NldF9mbG93X2NvbnRyb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1MzIgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChyZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCAmJiBjcmVkaXRzICE9IDApIHsKKwkJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sICovCisJCWljLT5pX2Zsb3djdGwgPSAxOworCQlyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRzKTsKKwl9IGVsc2UgeworCQlpYy0+aV9mbG93Y3RsID0gMDsKKwl9Cit9CisKKy8qCisgKiBUdW5lIFJOUiBiZWhhdmlvci4gV2l0aG91dCBmbG93IGNvbnRyb2wsIHdlIHVzZSBhIHJhdGhlcgorICogbG93IHRpbWVvdXQsIGJ1dCBub3QgdGhlIGFic29sdXRlIG1pbmltdW0gLSB0aGlzIHNob3VsZAorICogYmUgdHVuYWJsZS4KKyAqCisgKiBXZSBhbHJlYWR5IHNldCB0aGUgUk5SIHJldHJ5IGNvdW50IHRvIDcgKHdoaWNoIGlzIHRoZQorICogc21hbGxlc3QgaW5maW5pdGUgbnVtYmVyIDotKSBhYm92ZS4KKyAqIElmIGZsb3cgY29udHJvbCBpcyBvZmYsIHdlIHdhbnQgdG8gY2hhbmdlIHRoaXMgYmFjayB0byAwCisgKiBzbyB0aGF0IHdlIGxlYXJuIHF1aWNrbHkgd2hlbiBvdXIgY3JlZGl0IGFjY291bnRpbmcgaXMKKyAqIGJ1Z2d5LgorICoKKyAqIENhbGxlciBwYXNzZXMgaW4gYSBxcF9hdHRyIHBvaW50ZXIgLSBkb24ndCB3YXN0ZSBzdGFjayBzcGFjdgorICogYnkgYWxsb2NhdGlvbiB0aGlzIHR3aWNlLgorICovCitzdGF0aWMgdm9pZAorcmRzX2liX3R1bmVfcm5yKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyKQoreworCWludCByZXQ7CisKKwlhdHRyLT5taW5fcm5yX3RpbWVyID0gSUJfUk5SX1RJTUVSXzAwMF8zMjsKKwlyZXQgPSBpYl9tb2RpZnlfcXAoaWMtPmlfY21faWQtPnFwLCBhdHRyLCBJQl9RUF9NSU5fUk5SX1RJTUVSKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9OT1RJQ0UgImliX21vZGlmeV9xcChJQl9RUF9NSU5fUk5SX1RJTUVSKTogZXJyPSVkXG4iLCAtcmV0KTsKK30KKworLyoKKyAqIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuCisgKiBXZSBnZXQgaGVyZSBmb3IgYm90aCBvdXRnb2luZyBhbmQgaW5jb21pbmcgY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwljb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBOVUxMOworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKwlpbnQgZXJyOworCisJaWYgKGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4pIHsKKwkJZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisKKwkJcmRzX2liX3NldF9wcm90b2NvbChjb25uLAorCQkJCVJEU19QUk9UT0NPTChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQkJCWRwLT5kcF9wcm90b2NvbF9taW5vcikpOworCQlyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisJfQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSUI6IGNvbm5lY3RlZCB0byAlcEk0IHZlcnNpb24gJXUuJXUlc1xuIiwKKwkJCSZjb25uLT5jX2xhZGRyLAorCQkJUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tPmNfdmVyc2lvbiksCisJCQlSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCWljLT5pX2Zsb3djdGwgPyAiLCBmbG93IGNvbnRyb2wiIDogIiIpOworCisJLyogVHVuZSBSTlIgYmVoYXZpb3IgKi8KKwlyZHNfaWJfdHVuZV9ybnIoaWMsICZxcF9hdHRyKTsKKworCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfUlRTOworCWVyciA9IGliX21vZGlmeV9xcChpYy0+aV9jbV9pZC0+cXAsICZxcF9hdHRyLCBJQl9RUF9TVEFURSk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJpYl9tb2RpZnlfcXAoSUJfUVBfU1RBVEUsIFJUUyk6IGVycj0lZFxuIiwgZXJyKTsKKworCS8qIHVwZGF0ZSBpYl9kZXZpY2Ugd2l0aCB0aGlzIGxvY2FsIGlwYWRkciAmIGNvbm4gKi8KKwlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pYl9jbGllbnQpOworCWVyciA9IHJkc19pYl91cGRhdGVfaXBhZGRyKHJkc19pYmRldiwgY29ubi0+Y19sYWRkcik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwllcnIgPSByZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgInJkc19pYl9hZGRfY29ubiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwICYmIGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlyZHNfY29ubmVjdF9jb21wbGV0ZShjb25uKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLAorCQkJc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwLAorCQkJdTMyIHByb3RvY29sX3ZlcnNpb24pCit7CisJbWVtc2V0KGNvbm5fcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtKSk7CisJLyogWFhYIHR1bmUgdGhlc2U/ICovCisJY29ubl9wYXJhbS0+cmVzcG9uZGVyX3Jlc291cmNlcyA9IDE7CisJY29ubl9wYXJhbS0+aW5pdGlhdG9yX2RlcHRoID0gMTsKKwljb25uX3BhcmFtLT5yZXRyeV9jb3VudCA9IDc7CisJY29ubl9wYXJhbS0+cm5yX3JldHJ5X2NvdW50ID0gNzsKKworCWlmIChkcCkgeworCQlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCQltZW1zZXQoZHAsIDAsIHNpemVvZigqZHApKTsKKwkJZHAtPmRwX3NhZGRyID0gY29ubi0+Y19sYWRkcjsKKwkJZHAtPmRwX2RhZGRyID0gY29ubi0+Y19mYWRkcjsKKwkJZHAtPmRwX3Byb3RvY29sX21ham9yID0gUkRTX1BST1RPQ09MX01BSk9SKHByb3RvY29sX3ZlcnNpb24pOworCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IgPSBSRFNfUFJPVE9DT0xfTUlOT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrID0gY3B1X3RvX2JlMTYoUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFMpOworCQlkcC0+ZHBfYWNrX3NlcSA9IHJkc19pYl9waWdneWJfYWNrKGljKTsKKworCQkvKiBBZHZlcnRpc2UgZmxvdyBjb250cm9sICovCisJCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCQl1bnNpZ25lZCBpbnQgY3JlZGl0czsKKworCQkJY3JlZGl0cyA9IElCX0dFVF9QT1NUX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKTsKKwkJCWRwLT5kcF9jcmVkaXQgPSBjcHVfdG9fYmUzMihjcmVkaXRzKTsKKwkJCWF0b21pY19zdWIoSUJfU0VUX1BPU1RfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCQl9CisKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhID0gZHA7CisJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gPSBzaXplb2YoKmRwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9jcV9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJcmRzZGVidWcoImV2ZW50ICV1IGRhdGEgJXBcbiIsIGV2ZW50LT5ldmVudCwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9xcF9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc2RlYnVnKCJjb25uICVwIGljICVwIGV2ZW50ICV1XG4iLCBjb25uLCBpYywgZXZlbnQtPmV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBJQl9FVkVOVF9DT01NX0VTVDoKKwkJcmRtYV9ub3RpZnkoaWMtPmlfY21faWQsIElCX0VWRU5UX0NPTU1fRVNUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL2liOiB1bmhhbmRsZWQgUVAgZXZlbnQgJXUgIgorCQkgICAgICAgIm9uIGNvbm5lY3Rpb24gdG8gJXBJNFxuIiwgZXZlbnQtPmV2ZW50LAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBub3QgbGVhdmUgSVNfRVJSIHBvaW50ZXJzIGFyb3VuZCBmb3IKKyAqIGNsZWFudXAgdG8gdHJpcCBvdmVyLgorICovCitzdGF0aWMgaW50IHJkc19pYl9zZXR1cF9xcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyIGF0dHI7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlpbnQgcmV0OworCisJLyogcmRzX2liX2FkZF9vbmUgY3JlYXRlcyBhIHJkc19pYl9kZXZpY2Ugb2JqZWN0IHBlciBJQiBkZXZpY2UsCisJICogYW5kIGFsbG9jYXRlcyBhIHByb3RlY3Rpb24gZG9tYWluLCBtZW1vcnkgcmFuZ2UgYW5kIEZNUiBwb29sCisJICogZm9yIGVhY2guICBJZiB0aGF0IGZhaWxzIGZvciBhbnkgcmVhc29uLCBpdCB3aWxsIG5vdCByZWdpc3RlcgorCSAqIHRoZSByZHNfaWJkZXYgYXQgYWxsLgorCSAqLworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXYsICZyZHNfaWJfY2xpZW50KTsKKwlpZiAocmRzX2liZGV2ID09IE5VTEwpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lCOiBObyBjbGllbnRfZGF0YSBmb3IgZGV2aWNlICVzXG4iLAorCQkJCQlkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKHJkc19pYmRldi0+bWF4X3dycyA8IGljLT5pX3NlbmRfcmluZy53X25yICsgMSkKKwkJcmRzX2liX3JpbmdfcmVzaXplKCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pYmRldi0+bWF4X3dycyAtIDEpOworCWlmIChyZHNfaWJkZXYtPm1heF93cnMgPCBpYy0+aV9yZWN2X3Jpbmcud19uciArIDEpCisJCXJkc19pYl9yaW5nX3Jlc2l6ZSgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaWJkZXYtPm1heF93cnMgLSAxKTsKKworCS8qIFByb3RlY3Rpb24gZG9tYWluIGFuZCBtZW1vcnkgcmFuZ2UgKi8KKwlpYy0+aV9wZCA9IHJkc19pYmRldi0+cGQ7CisJaWMtPmlfbXIgPSByZHNfaWJkZXYtPm1yOworCisJaWMtPmlfc2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJkc19pYl9zZW5kX2NxX2NvbXBfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pYl9jcV9ldmVudF9oYW5kbGVyLCBjb25uLAorCQkJCSAgICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKyAxLCAwKTsKKwlpZiAoSVNfRVJSKGljLT5pX3NlbmRfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoaWMtPmlfc2VuZF9jcSk7CisJCWljLT5pX3NlbmRfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfcmVjdl9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pYl9jcV9ldmVudF9oYW5kbGVyLCBjb25uLAorCQkJCSAgICAgaWMtPmlfcmVjdl9yaW5nLndfbnIsIDApOworCWlmIChJU19FUlIoaWMtPmlfcmVjdl9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9yZWN2X2NxKTsKKwkJaWMtPmlfcmVjdl9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3EgcmVjdiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGljLT5pX3NlbmRfY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoaWMtPmlfcmVjdl9jcSwgSUJfQ1FfU09MSUNJVEVEKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHJlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogWFhYIG5lZ290aWF0ZSBtYXggc2VuZC9yZWN2IHdpdGggcmVtb3RlPyAqLworCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKKwlhdHRyLmV2ZW50X2hhbmRsZXIgPSByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcjsKKwlhdHRyLnFwX2NvbnRleHQgPSBjb25uOworCS8qICsgMSB0byBhbGxvdyBmb3IgdGhlIHNpbmdsZSBhY2sgbWVzc2FnZSAqLworCWF0dHIuY2FwLm1heF9zZW5kX3dyID0gaWMtPmlfc2VuZF9yaW5nLndfbnIgKyAxOworCWF0dHIuY2FwLm1heF9yZWN2X3dyID0gaWMtPmlfcmVjdl9yaW5nLndfbnIgKyAxOworCWF0dHIuY2FwLm1heF9zZW5kX3NnZSA9IHJkc19pYmRldi0+bWF4X3NnZTsKKwlhdHRyLmNhcC5tYXhfcmVjdl9zZ2UgPSBSRFNfSUJfUkVDVl9TR0U7CisJYXR0ci5zcV9zaWdfdHlwZSA9IElCX1NJR05BTF9SRVFfV1I7CisJYXR0ci5xcF90eXBlID0gSUJfUVBUX1JDOworCWF0dHIuc2VuZF9jcSA9IGljLT5pX3NlbmRfY3E7CisJYXR0ci5yZWN2X2NxID0gaWMtPmlfcmVjdl9jcTsKKworCS8qCisJICogWFhYIHRoaXMgY2FuIGZhaWwgaWYgbWF4Xypfd3IgaXMgdG9vIGxhcmdlPyAgQXJlIHdlIHN1cHBvc2VkCisJICogdG8gYmFjayBvZmYgdW50aWwgd2UgZ2V0IGEgdmFsdWUgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIHN1cHBvcnQ/CisJICovCisJcmV0ID0gcmRtYV9jcmVhdGVfcXAoaWMtPmlfY21faWQsIGljLT5pX3BkLCAmYXR0cik7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfcXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZF9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3NlbmRfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9zZW5kX2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHNlbmQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfcmVjdl9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3JlY3ZfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9yZWN2X2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHJlY3YgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfYWNrID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkgICAgICAgJmljLT5pX2Fja19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9hY2sgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IGFjayBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kcyA9IHZtYWxsb2MoaWMtPmlfc2VuZF9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pYl9zZW5kX3dvcmspKTsKKwlpZiAoaWMtPmlfc2VuZHMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1Zygic2VuZCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlyZHNfaWJfc2VuZF9pbml0X3JpbmcoaWMpOworCisJaWMtPmlfcmVjdnMgPSB2bWFsbG9jKGljLT5pX3JlY3ZfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaWJfcmVjdl93b3JrKSk7CisJaWYgKGljLT5pX3JlY3ZzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInJlY3YgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaWJfcmVjdl9pbml0X3JpbmcoaWMpOworCXJkc19pYl9yZWN2X2luaXRfYWNrKGljKTsKKworCS8qIFBvc3QgcmVjZWl2ZSBidWZmZXJzIC0gYXMgYSBzaWRlIGVmZmVjdCwgdGhpcyB3aWxsIHVwZGF0ZQorCSAqIHRoZSBwb3N0ZWQgY3JlZGl0IGNvdW50LiAqLworCXJkc19pYl9yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDEpOworCisJcmRzZGVidWcoImNvbm4gJXAgcGQgJXAgbXIgJXAgY3EgJXAgJXBcbiIsIGNvbm4sIGljLT5pX3BkLCBpYy0+aV9tciwKKwkJIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHApCit7CisJdTE2IGNvbW1vbjsKKwl1MzIgdmVyc2lvbiA9IDA7CisKKwkvKiByZG1hX2NtIHByaXZhdGUgZGF0YSBpcyBvZGQgLSB3aGVuIHRoZXJlIGlzIGFueSBwcml2YXRlIGRhdGEgaW4gdGhlCisJICogcmVxdWVzdCwgd2Ugd2lsbCBiZSBnaXZlbiBhIHByZXR0eSBsYXJnZSBidWZmZXIgd2l0aG91dCB0ZWxsaW5nIHVzIHRoZQorCSAqIG9yaWdpbmFsIHNpemUuIFRoZSBvbmx5IHdheSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGlzIGJ5IGxvb2tpbmcgYXQKKwkgKiB0aGUgY29udGVudHMsIHdoaWNoIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLgorCSAqIElmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGZpZWxkcyBhcmVuJ3Qgc2V0LCB0aGlzIGlzIGEgY29ubmVjdGlvbiBhdHRlbXB0CisJICogZnJvbSBhbiBvbGRlciB2ZXJzaW9uLiBUaGlzIGNvdWxkIGNvdWxkIGJlIDMuMCBvciAyLjAgLSB3ZSBjYW4ndCB0ZWxsLgorCSAqIFdlIHJlYWxseSBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoaXMgZm9yIE9GRUQgMS4zIDotKCAqLworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMCkKKwkJcmV0dXJuIFJEU19QUk9UT0NPTF8zXzA7CisKKwljb21tb24gPSBiZTE2X3RvX2NwdShkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzaykgJiBSRFNfSUJfU1VQUE9SVEVEX1BST1RPQ09MUzsKKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDMgJiYgY29tbW9uKSB7CisJCXZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOworCQl3aGlsZSAoKGNvbW1vbiA+Pj0gMSkgIT0gMCkKKwkJCXZlcnNpb24rKzsKKwl9IGVsc2UgaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUzogQ29ubmVjdGlvbiBmcm9tICVwSTQgdXNpbmcgIgorCQkJImluY29tcGF0aWJsZSBwcm90b2NvbCB2ZXJzaW9uICV1LiV1XG4iLAorCQkJJmRwLT5kcF9zYWRkciwKKwkJCWRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCWRwLT5kcF9wcm90b2NvbF9taW5vcik7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCitpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCV9fYmU2NCBsZ3VpZCA9IGNtX2lkLT5yb3V0ZS5wYXRoX3JlYy0+c2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkOworCV9fYmU2NCBmZ3VpZCA9IGNtX2lkLT5yb3V0ZS5wYXRoX3JlYy0+ZGdpZC5nbG9iYWwuaW50ZXJmYWNlX2lkOworCWNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSBkcF9yZXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gTlVMTDsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJdTMyIHZlcnNpb247CisJaW50IGVyciwgZGVzdHJveSA9IDE7CisKKwkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgcHJvdG9jb2wgdmVyc2lvbiBtYXRjaGVzIG91cnMuICovCisJdmVyc2lvbiA9IHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGRwKTsKKwlpZiAoIXZlcnNpb24pCisJCWdvdG8gb3V0OworCisJcmRzZGVidWcoInNhZGRyICVwSTQgZGFkZHIgJXBJNCBSRFN2JXUuJXUgbGd1aWQgMHglbGx4IGZndWlkICIKKwkJICIweCVsbHhcbiIsICZkcC0+ZHBfc2FkZHIsICZkcC0+ZHBfZGFkZHIsCisJCSBSRFNfUFJPVE9DT0xfTUFKT1IodmVyc2lvbiksIFJEU19QUk9UT0NPTF9NSU5PUih2ZXJzaW9uKSwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmU2NF90b19jcHUobGd1aWQpLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShmZ3VpZCkpOworCisJY29ubiA9IHJkc19jb25uX2NyZWF0ZShkcC0+ZHBfZGFkZHIsIGRwLT5kcF9zYWRkciwgJnJkc19pYl90cmFuc3BvcnQsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjb25uKSkgeworCQlyZHNkZWJ1ZygicmRzX2Nvbm5fY3JlYXRlIGZhaWxlZCAoJWxkKVxuIiwgUFRSX0VSUihjb25uKSk7CisJCWNvbm4gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoZSBjb25uZWN0aW9uIHJlcXVlc3QgbWF5IG9jY3VyIHdoaWxlIHRoZQorCSAqIHByZXZpb3VzIGNvbm5lY3Rpb24gZXhpc3QsIGUuZy4gaW4gY2FzZSBvZiBmYWlsb3Zlci4KKwkgKiBCdXQgYXMgY29ubmVjdGlvbnMgbWF5IGJlIGluaXRpYXRlZCBzaW11bHRhbmVvdXNseQorCSAqIGJ5IGJvdGggaG9zdHMsIHdlIGhhdmUgYSByYW5kb20gYmFja29mZiBtZWNoYW5pc20gLQorCSAqIHNlZSB0aGUgY29tbWVudCBhYm92ZSByZHNfcXVldWVfcmVjb25uZWN0KCkKKwkgKi8KKwltdXRleF9sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJCXJkc2RlYnVnKCJpbmNvbWluZyBjb25uZWN0IHdoaWxlIGNvbm5lY3RpbmdcbiIpOworCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlKTsKKwkJfSBlbHNlCisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HKSB7CisJCQkvKiBXYWl0IGFuZCBzZWUgLSBvdXIgY29ubmVjdCBtYXkgc3RpbGwgYmUgc3VjY2VlZGluZyAqLworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Nvbm5lY3RfcmFjZWQpOworCQl9CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzX2liX3NldF9wcm90b2NvbChjb25uLCB2ZXJzaW9uKTsKKwlyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJQlVHX09OKGNtX2lkLT5jb250ZXh0KTsKKwlCVUdfT04oaWMtPmlfY21faWQpOworCisJaWMtPmlfY21faWQgPSBjbV9pZDsKKwljbV9pZC0+Y29udGV4dCA9IGNvbm47CisKKwkvKiBXZSBnb3QgaGFsZndheSB0aHJvdWdoIHNldHRpbmcgdXAgdGhlIGliX2Nvbm5lY3Rpb24sIGlmIHdlCisJICogZmFpbCBub3csIHdlIGhhdmUgdG8gdGFrZSB0aGUgbG9uZyByb3V0ZSBvdXQgb2YgdGhpcyBtZXNzLiAqLworCWRlc3Ryb3kgPSAwOworCisJZXJyID0gcmRzX2liX3NldHVwX3FwKGNvbm4pOworCWlmIChlcnIpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwX3JlcCwgdmVyc2lvbik7CisKKwkvKiByZG1hX2FjY2VwdCgpIGNhbGxzIHJkbWFfcmVqZWN0KCkgaW50ZXJuYWxseSBpZiBpdCBmYWlscyAqLworCWVyciA9IHJkbWFfYWNjZXB0KGNtX2lkLCAmY29ubl9wYXJhbSk7CisJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCWlmIChlcnIpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkbWFfYWNjZXB0IGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0OgorCXJkbWFfcmVqZWN0KGNtX2lkLCBOVUxMLCAwKTsKKwlyZXR1cm4gZGVzdHJveTsKK30KKworCitpbnQgcmRzX2liX2NtX2luaXRpYXRlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNtX2lkLT5jb250ZXh0OworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSBkcDsKKwlpbnQgcmV0OworCisJLyogSWYgdGhlIHBlZXIgZG9lc24ndCBkbyBwcm90b2NvbCBuZWdvdGlhdGlvbiwgd2UgbXVzdAorCSAqIGRlZmF1bHQgdG8gUkRTdjMuMCAqLworCXJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgUkRTX1BST1RPQ09MXzNfMCk7CisJaWMtPmlfZmxvd2N0bCA9IHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sOwkvKiBhZHZlcnRpc2UgZmxvdyBjb250cm9sICovCisKKwlyZXQgPSByZHNfaWJfc2V0dXBfcXAoY29ubik7CisJaWYgKHJldCkgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRzX2liX3NldHVwX3FwIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaWJfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sICZjb25uX3BhcmFtLCAmZHAsIFJEU19QUk9UT0NPTF9WRVJTSU9OKTsKKworCXJldCA9IHJkbWFfY29ubmVjdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCWlmIChyZXQpCisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZG1hX2Nvbm5lY3QgZmFpbGVkICglZClcbiIsIHJldCk7CisKK291dDoKKwkvKiBCZXdhcmUgLSByZXR1cm5pbmcgbm9uLXplcm8gdGVsbHMgdGhlIHJkbWFfY20gdG8gZGVzdHJveQorCSAqIHRoZSBjbV9pZC4gV2Ugc2hvdWxkIGNlcnRhaW5seSBub3QgZG8gaXQgYXMgbG9uZyBhcyB3ZSBzdGlsbAorCSAqICJvd24iIHRoZSBjbV9pZC4gKi8KKwlpZiAocmV0KSB7CisJCWlmIChpYy0+aV9jbV9pZCA9PSBjbV9pZCkKKwkJCXJldCA9IDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfaWJfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkZXN0OworCWludCByZXQ7CisKKwkvKiBYWFggSSB3b25kZXIgd2hhdCBhZmZlY3QgdGhlIHBvcnQgc3BhY2UgaGFzICovCisJLyogZGVsZWdhdGUgY20gZXZlbnQgaGFuZGxlciB0byByZG1hX3RyYW5zcG9ydCAqLworCWljLT5pX2NtX2lkID0gcmRtYV9jcmVhdGVfaWQocmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGljLT5pX2NtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfaWQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY3JlYXRlZCBjbSBpZCAlcCBmb3IgY29ubiAlcFxuIiwgaWMtPmlfY21faWQsIGNvbm4pOworCisJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNyYy5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19sYWRkcjsKKwlzcmMuc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoMCk7CisKKwlkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWRlc3Quc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfZmFkZHI7CisJZGVzdC5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwlyZXQgPSByZG1hX3Jlc29sdmVfYWRkcihpYy0+aV9jbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LAorCQkJCVJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiYWRkciByZXNvbHZlIGZhaWxlZCBmb3IgY20gaWQgJXA6ICVkXG4iLCBpYy0+aV9jbV9pZCwKKwkJCSByZXQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgc28gY2FyZWZ1bCBhYm91dCBvbmx5IGNsZWFuaW5nIHVwIHJlc291cmNlcyB0aGF0IHdlcmUgYnVpbHQgdXAKKyAqIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHN0YXJ0dXAuICBJbiBmYWN0IGl0CisgKiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2liX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCBlcnIgPSAwOworCisJcmRzZGVidWcoImNtICVwIHBkICVwIGNxICVwICVwIHFwICVwXG4iLCBpYy0+aV9jbV9pZCwKKwkJIGljLT5pX3BkLCBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxLAorCQkgaWMtPmlfY21faWQgPyBpYy0+aV9jbV9pZC0+cXAgOiBOVUxMKTsKKworCWlmIChpYy0+aV9jbV9pZCkgeworCQlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCisJCXJkc2RlYnVnKCJkaXNjb25uZWN0aW5nIGNtICVwXG4iLCBpYy0+aV9jbV9pZCk7CisJCWVyciA9IHJkbWFfZGlzY29ubmVjdChpYy0+aV9jbV9pZCk7CisJCWlmIChlcnIpIHsKKwkJCS8qIEFjdHVhbGx5IHRoaXMgbWF5IGhhcHBlbiBxdWl0ZSBmcmVxdWVudGx5LCB3aGVuCisJCQkgKiBhbiBvdXRnb2luZyBjb25uZWN0IHJhY2VkIHdpdGggYW4gaW5jb21pbmcgY29ubmVjdC4KKwkJCSAqLworCQkJcmRzZGVidWcoImZhaWxlZCB0byBkaXNjb25uZWN0LCBjbTogJXAgZXJyICVkXG4iLAorCQkJCWljLT5pX2NtX2lkLCBlcnIpOworCQl9CisKKwkJd2FpdF9ldmVudChyZHNfaWJfcmluZ19lbXB0eV93YWl0LAorCQkJcmRzX2liX3JpbmdfZW1wdHkoJmljLT5pX3NlbmRfcmluZykgJiYKKwkJCXJkc19pYl9yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKTsKKworCQlpZiAoaWMtPmlfc2VuZF9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnMsCisJCQkJCSAgIGljLT5pX3NlbmRfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9yZWN2X2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRycywKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX2FjaykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgICBpYy0+aV9hY2ssIGljLT5pX2Fja19kbWEpOworCisJCWlmIChpYy0+aV9zZW5kcykKKwkJCXJkc19pYl9zZW5kX2NsZWFyX3JpbmcoaWMpOworCQlpZiAoaWMtPmlfcmVjdnMpCisJCQlyZHNfaWJfcmVjdl9jbGVhcl9yaW5nKGljKTsKKworCQlpZiAoaWMtPmlfY21faWQtPnFwKQorCQkJcmRtYV9kZXN0cm95X3FwKGljLT5pX2NtX2lkKTsKKwkJaWYgKGljLT5pX3NlbmRfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3NlbmRfY3EpOworCQlpZiAoaWMtPmlfcmVjdl9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfcmVjdl9jcSk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisKKwkJLyoKKwkJICogTW92ZSBjb25uZWN0aW9uIGJhY2sgdG8gdGhlIG5vZGV2IGxpc3QuCisJCSAqLworCQlpZiAoaWMtPnJkc19pYmRldikgeworCisJCQlzcGluX2xvY2tfaXJxKCZpYy0+cmRzX2liZGV2LT5zcGlubG9jayk7CisJCQlCVUdfT04obGlzdF9lbXB0eSgmaWMtPmliX25vZGUpKTsKKwkJCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJCQlzcGluX3VubG9ja19pcnEoJmljLT5yZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCQkJc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJmliX25vZGV2X2Nvbm5zKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJCQlpYy0+cmRzX2liZGV2ID0gTlVMTDsKKwkJfQorCisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJaWMtPmlfcGQgPSBOVUxMOworCQlpYy0+aV9tciA9IE5VTEw7CisJCWljLT5pX3NlbmRfY3EgPSBOVUxMOworCQlpYy0+aV9yZWN2X2NxID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9oZHJzID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9oZHJzID0gTlVMTDsKKwkJaWMtPmlfYWNrID0gTlVMTDsKKwl9CisJQlVHX09OKGljLT5yZHNfaWJkZXYpOworCisJLyogQ2xlYXIgcGVuZGluZyB0cmFuc21pdCAqLworCWlmIChpYy0+aV9ybSkgeworCQlyZHNfbWVzc2FnZV9wdXQoaWMtPmlfcm0pOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJLyogQ2xlYXIgdGhlIEFDSyBzdGF0ZSAqLworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisJaWMtPmlfYWNrX3JlY3YgPSAwOworCisJLyogQ2xlYXIgZmxvdyBjb250cm9sIHN0YXRlICovCisJaWMtPmlfZmxvd2N0bCA9IDA7CisJYXRvbWljX3NldCgmaWMtPmlfY3JlZGl0cywgMCk7CisKKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpZiAoaWMtPmlfaWJpbmMpIHsKKwkJcmRzX2luY19wdXQoJmljLT5pX2liaW5jLT5paV9pbmMpOworCQlpYy0+aV9pYmluYyA9IE5VTEw7CisJfQorCisJdmZyZWUoaWMtPmlfc2VuZHMpOworCWljLT5pX3NlbmRzID0gTlVMTDsKKwl2ZnJlZShpYy0+aV9yZWN2cyk7CisJaWMtPmlfcmVjdnMgPSBOVUxMOworfQorCitpbnQgcmRzX2liX2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogWFhYIHRvbyBsYXp5PyAqLworCWljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmljLT5pYl9ub2RlKTsKKwltdXRleF9pbml0KCZpYy0+aV9yZWN2X211dGV4KTsKKworCS8qCisJICogcmRzX2liX2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5CisJICogbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXQgY2FuIGJlIGNhbGxlZC4KKwkgKi8KKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pYl9yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpYy0+Y29ubiA9IGNvbm47CisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IGljOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmliX25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJmliX25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYl9ub2Rldl9jb25uc19sb2NrLCBmbGFncyk7CisKKworCXJkc2RlYnVnKCJjb25uICVwIGNvbm4gaWMgJXBcbiIsIGNvbm4sIGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pYl9jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBhcmc7CisJcmRzZGVidWcoImljICVwXG4iLCBpYyk7CisJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwlrZnJlZShpYyk7Cit9CisKKworLyoKKyAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQKK19fcmRzX2liX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJcmRzX2Nvbm5fZHJvcChjb25uKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmRtYS5jIGIvbmV0L3Jkcy9pYl9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNjI4OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfcmRtYS5jCkBAIC0wLDAgKzEsNjQxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpYi5oIgorCisKKy8qCisgKiBUaGlzIGlzIHN0b3JlZCBhcyBtci0+cl90cmFuc19wcml2YXRlLgorICovCitzdHJ1Y3QgcmRzX2liX21yIHsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZQkqZGV2aWNlOworCXN0cnVjdCByZHNfaWJfbXJfcG9vbAkqcG9vbDsKKwlzdHJ1Y3QgaWJfZm1yCQkqZm1yOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl1bnNpZ25lZCBpbnQJCXJlbWFwX2NvdW50OworCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKKwl1bnNpZ25lZCBpbnQJCXNnX2xlbjsKKwl1NjQJCQkqZG1hOworCWludAkJCXNnX2RtYV9sZW47Cit9OworCisvKgorICogT3VyIG93biBsaXR0bGUgRk1SIHBvb2wKKyAqLworc3RydWN0IHJkc19pYl9tcl9wb29sIHsKKwlzdHJ1Y3QgbXV0ZXgJCWZsdXNoX2xvY2s7CQkvKiBzZXJpYWxpemUgZm1yIGludmFsaWRhdGUgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZmx1c2hfd29ya2VyOwkJLyogZmx1c2ggd29ya2VyICovCisKKwlzcGlubG9ja190CQlsaXN0X2xvY2s7CQkvKiBwcm90ZWN0IHZhcmlhYmxlcyBiZWxvdyAqLworCWF0b21pY190CQlpdGVtX2NvdW50OwkJLyogdG90YWwgIyBvZiBNUnMgKi8KKwlhdG9taWNfdAkJZGlydHlfY291bnQ7CQkvKiAjIGRpcnR5IG9mIE1ScyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZHJvcF9saXN0OwkJLyogTVJzIHRoYXQgaGF2ZSByZWFjaGVkIHRoZWlyIG1heF9tYXBzIGxpbWl0ICovCisJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CQkvKiB1bnVzZWQgTVJzICovCisJc3RydWN0IGxpc3RfaGVhZAljbGVhbl9saXN0OwkJLyogdW51c2VkICYgdW5hbWFwcGVkIE1ScyAqLworCWF0b21pY190CQlmcmVlX3Bpbm5lZDsJCS8qIG1lbW9yeSBwaW5uZWQgYnkgZnJlZSBNUnMgKi8KKwl1bnNpZ25lZCBsb25nCQltYXhfaXRlbXM7CisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zX3NvZnQ7CisJdW5zaWduZWQgbG9uZwkJbWF4X2ZyZWVfcGlubmVkOworCXN0cnVjdCBpYl9mbXJfYXR0cglmbXJfYXR0cjsKK307CisKK3N0YXRpYyBpbnQgcmRzX2liX2ZsdXNoX21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpOworc3RhdGljIHZvaWQgcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpOworc3RhdGljIHZvaWQgcmRzX2liX21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liX2dldF9kZXZpY2UoX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRzX2liZGV2LCAmcmRzX2liX2RldmljZXMsIGxpc3QpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9pcGFkZHIsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0LCBsaXN0KSB7CisJCQlpZiAoaV9pcGFkZHItPmlwYWRkciA9PSBpcGFkZHIpIHsKKwkJCQlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCQkJCXJldHVybiByZHNfaWJkZXY7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCByZHNfaWJfYWRkX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKQoreworCXN0cnVjdCByZHNfaWJfaXBhZGRyICppX2lwYWRkcjsKKworCWlfaXBhZGRyID0ga21hbGxvYyhzaXplb2YgKmlfaXBhZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlfaXBhZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlfaXBhZGRyLT5pcGFkZHIgPSBpcGFkZHI7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpX2lwYWRkci0+bGlzdCwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3JlbW92ZV9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHIsICpuZXh0OworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlfaXBhZGRyLCBuZXh0LCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCwgbGlzdCkgeworCQlpZiAoaV9pcGFkZHItPmlwYWRkciA9PSBpcGFkZHIpIHsKKwkJCWxpc3RfZGVsKCZpX2lwYWRkci0+bGlzdCk7CisJCQlrZnJlZShpX2lwYWRkcik7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworfQorCitpbnQgcmRzX2liX3VwZGF0ZV9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2X29sZDsKKworCXJkc19pYmRldl9vbGQgPSByZHNfaWJfZ2V0X2RldmljZShpcGFkZHIpOworCWlmIChyZHNfaWJkZXZfb2xkKQorCQlyZHNfaWJfcmVtb3ZlX2lwYWRkcihyZHNfaWJkZXZfb2xkLCBpcGFkZHIpOworCisJcmV0dXJuIHJkc19pYl9hZGRfaXBhZGRyKHJkc19pYmRldiwgaXBhZGRyKTsKK30KKworaW50IHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBjb25uIHdhcyBwcmV2aW91c2x5IG9uIHRoZSBub2Rldl9jb25uc19saXN0ICovCisJc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmliX25vZGV2X2Nvbm5zKSk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pYl9ub2RlKSk7CisJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCWljLT5yZHNfaWJkZXYgPSByZHNfaWJkZXY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZpYl9ub2Rldl9jb25ucywgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaWJfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpYl9ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCit2b2lkIHJkc19pYl9yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9zcGxpY2UoJnJkc19pYmRldi0+Y29ubl9saXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGliX25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3N0cnVjdCByZHNfaWJfbXJfcG9vbCAqcmRzX2liX2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sOworCisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb29sKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5mcmVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5kcm9wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5jbGVhbl9saXN0KTsKKwltdXRleF9pbml0KCZwb29sLT5mbHVzaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcG9vbC0+bGlzdF9sb2NrKTsKKwlJTklUX1dPUksoJnBvb2wtPmZsdXNoX3dvcmtlciwgcmRzX2liX21yX3Bvb2xfZmx1c2hfd29ya2VyKTsKKworCXBvb2wtPmZtcl9hdHRyLm1heF9wYWdlcyA9IGZtcl9tZXNzYWdlX3NpemU7CisJcG9vbC0+Zm1yX2F0dHIubWF4X21hcHMgPSByZHNfaWJkZXYtPmZtcl9tYXhfcmVtYXBzOworCXBvb2wtPmZtcl9hdHRyLnBhZ2Vfc2hpZnQgPSByZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0OworCXBvb2wtPm1heF9mcmVlX3Bpbm5lZCA9IHJkc19pYmRldi0+bWF4X2ZtcnMgKiBmbXJfbWVzc2FnZV9zaXplIC8gNDsKKworCS8qIFdlIG5ldmVyIGFsbG93IG1vcmUgdGhhbiBtYXhfaXRlbXMgTVJzIHRvIGJlIGFsbG9jYXRlZC4KKwkgKiBXaGVuIHdlIGV4Y2VlZCBtb3JlIHRoYW4gbWF4X2l0ZW1zX3NvZnQsIHdlIHN0YXJ0IGZyZWVpbmcKKwkgKiBpdGVtcyBtb3JlIGFnZ3Jlc3NpdmVseS4KKwkgKiBNYWtlIHN1cmUgdGhhdCBtYXhfaXRlbXMgPiBtYXhfaXRlbXNfc29mdCA+IG1heF9pdGVtcyAvIDIKKwkgKi8KKwlwb29sLT5tYXhfaXRlbXNfc29mdCA9IHJkc19pYmRldi0+bWF4X2ZtcnMgKiAzIC8gNDsKKwlwb29sLT5tYXhfaXRlbXMgPSByZHNfaWJkZXYtPm1heF9mbXJzOworCisJcmV0dXJuIHBvb2w7Cit9CisKK3ZvaWQgcmRzX2liX2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKworCWlpbmZvLT5yZG1hX21yX21heCA9IHBvb2wtPm1heF9pdGVtczsKKwlpaW5mby0+cmRtYV9tcl9zaXplID0gcG9vbC0+Zm1yX2F0dHIubWF4X3BhZ2VzOworfQorCit2b2lkIHJkc19pYl9kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sKQoreworCWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOworCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDEpOworCUJVR19PTihhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCkpOworCUJVR19PTihhdG9taWNfcmVhZCgmcG9vbC0+ZnJlZV9waW5uZWQpKTsKKwlrZnJlZShwb29sKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmRzX2liX21yICpyZHNfaWJfcmV1c2VfZm1yKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmcG9vbC0+Y2xlYW5fbGlzdCkpIHsKKwkJaWJtciA9IGxpc3RfZW50cnkocG9vbC0+Y2xlYW5fbGlzdC5uZXh0LCBzdHJ1Y3QgcmRzX2liX21yLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmaWJtci0+bGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGlibXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2liX21yICpyZHNfaWJfYWxsb2NfZm1yKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit7CisJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSBOVUxMOworCWludCBlcnIgPSAwLCBpdGVyID0gMDsKKworCXdoaWxlICgxKSB7CisJCWlibXIgPSByZHNfaWJfcmV1c2VfZm1yKHBvb2wpOworCQlpZiAoaWJtcikKKwkJCXJldHVybiBpYm1yOworCisJCS8qIE5vIGNsZWFuIE1ScyAtIG5vdyB3ZSBoYXZlIHRoZSBjaG9pY2Ugb2YgZWl0aGVyCisJCSAqIGFsbG9jYXRpbmcgYSBmcmVzaCBNUiB1cCB0byB0aGUgbGltaXQgaW1wb3NlZCBieSB0aGUKKwkJICogZHJpdmVyLCBvciBmbHVzaCBhbnkgZGlydHkgdW51c2VkIE1Scy4KKwkJICogV2UgdHJ5IHRvIGF2b2lkIHN0YWxsaW5nIGluIHRoZSBzZW5kIHBhdGggaWYgcG9zc2libGUsCisJCSAqIHNvIHdlIGFsbG9jYXRlIGFzIGxvbmcgYXMgd2UncmUgYWxsb3dlZCB0by4KKwkJICoKKwkJICogV2UncmUgZnVzc3kgd2l0aCBlbmZvcmNpbmcgdGhlIEZNUiBsaW1pdCwgdGhvdWdoLiBJZiB0aGUgZHJpdmVyCisJCSAqIHRlbGxzIHVzIHdlIGNhbid0IHVzZSBtb3JlIHRoYW4gTiBmbXJzLCB3ZSBzaG91bGRuJ3Qgc3RhcnQKKwkJICogYXJndWluZyB3aXRoIGl0ICovCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmcG9vbC0+aXRlbV9jb3VudCkgPD0gcG9vbC0+bWF4X2l0ZW1zKQorCQkJYnJlYWs7CisKKwkJYXRvbWljX2RlYygmcG9vbC0+aXRlbV9jb3VudCk7CisKKwkJaWYgKCsraXRlciA+IDIpIHsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3Bvb2xfZGVwbGV0ZWQpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJCX0KKworCQkvKiBXZSBkbyBoYXZlIHNvbWUgZW1wdHkgTVJzLiBGbHVzaCB0aGVtIG91dC4gKi8KKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfcG9vbF93YWl0KTsKKwkJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJfQorCisJaWJtciA9IGt6YWxsb2Moc2l6ZW9mKCppYm1yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpYm1yKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX2NpZ2FyOworCX0KKworCWlibXItPmZtciA9IGliX2FsbG9jX2ZtcihyZHNfaWJkZXYtPnBkLAorCQkJKElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkgSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKKwkJCSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSwKKwkJCSZwb29sLT5mbXJfYXR0cik7CisJaWYgKElTX0VSUihpYm1yLT5mbXIpKSB7CisJCWVyciA9IFBUUl9FUlIoaWJtci0+Zm1yKTsKKwkJaWJtci0+Zm1yID0gTlVMTDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBpYl9hbGxvY19mbXIgZmFpbGVkIChlcnI9JWQpXG4iLCBlcnIpOworCQlnb3RvIG91dF9ub19jaWdhcjsKKwl9CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9hbGxvYyk7CisJcmV0dXJuIGlibXI7CisKK291dF9ub19jaWdhcjoKKwlpZiAoaWJtcikgeworCQlpZiAoaWJtci0+Zm1yKQorCQkJaWJfZGVhbGxvY19mbXIoaWJtci0+Zm1yKTsKKwkJa2ZyZWUoaWJtcik7CisJfQorCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2liX21hcF9mbXIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19pYl9tciAqaWJtciwKKwkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5lbnRzKQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pYmRldi0+ZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCA9IHNnOworCXU2NCBpb19hZGRyID0gMDsKKwl1NjQgKmRtYV9wYWdlczsKKwl1MzIgbGVuOworCWludCBwYWdlX2NudCwgc2dfZG1hX2xlbjsKKwlpbnQgaSwgajsKKwlpbnQgcmV0OworCisJc2dfZG1hX2xlbiA9IGliX2RtYV9tYXBfc2coZGV2LCBzZywgbmVudHMsCisJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAodW5saWtlbHkoIXNnX2RtYV9sZW4pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogZG1hX21hcF9zZyBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlsZW4gPSAwOworCXBhZ2VfY250ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNjYXRbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzY2F0W2ldKTsKKworCQlpZiAoZG1hX2FkZHIgJiB+cmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSB7CisJCQlpZiAoaSA+IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJKytwYWdlX2NudDsKKwkJfQorCQlpZiAoKGRtYV9hZGRyICsgZG1hX2xlbikgJiB+cmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSB7CisJCQlpZiAoaSA8IHNnX2RtYV9sZW4gLSAxKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCSsrcGFnZV9jbnQ7CisJCX0KKworCQlsZW4gKz0gZG1hX2xlbjsKKwl9CisKKwlwYWdlX2NudCArPSBsZW4gPj4gcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlpZiAocGFnZV9jbnQgPiBmbXJfbWVzc2FnZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRtYV9wYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHU2NCkgKiBwYWdlX2NudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFkbWFfcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFnZV9jbnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNjYXRbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzY2F0W2ldKTsKKworCQlmb3IgKGogPSAwOyBqIDwgZG1hX2xlbjsgaiArPSByZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUpCisJCQlkbWFfcGFnZXNbcGFnZV9jbnQrK10gPQorCQkJCShkbWFfYWRkciAmIHJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgKyBqOworCX0KKworCXJldCA9IGliX21hcF9waHlzX2ZtcihpYm1yLT5mbXIsCisJCQkJICAgZG1hX3BhZ2VzLCBwYWdlX2NudCwgaW9fYWRkcik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBTdWNjZXNzIC0gd2Ugc3VjY2Vzc2Z1bGx5IHJlbWFwcGVkIHRoZSBNUiwgc28gd2UgY2FuCisJICogc2FmZWx5IHRlYXIgZG93biB0aGUgb2xkIG1hcHBpbmcuICovCisJcmRzX2liX3RlYXJkb3duX21yKGlibXIpOworCisJaWJtci0+c2cgPSBzY2F0OworCWlibXItPnNnX2xlbiA9IG5lbnRzOworCWlibXItPnNnX2RtYV9sZW4gPSBzZ19kbWFfbGVuOworCWlibXItPnJlbWFwX2NvdW50Kys7CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl91c2VkKTsKKwlyZXQgPSAwOworCitvdXQ6CisJa2ZyZWUoZG1hX3BhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2NwdShyZHNfaWJkZXYtPmRldiwgaWJtci0+c2csCisJCQlpYm1yLT5zZ19kbWFfbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZShyZHNfaWJkZXYtPmRldiwgaWJtci0+c2csCisJCQlpYm1yLT5zZ19kbWFfbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX19yZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCisJaWYgKGlibXItPnNnX2RtYV9sZW4pIHsKKwkJaWJfZG1hX3VubWFwX3NnKHJkc19pYmRldi0+ZGV2LAorCQkJCWlibXItPnNnLCBpYm1yLT5zZ19sZW4sCisJCQkJRE1BX0JJRElSRUNUSU9OQUwpOworCQlpYm1yLT5zZ19kbWFfbGVuID0gMDsKKwl9CisKKwkvKiBSZWxlYXNlIHRoZSBzL2cgbGlzdCAqLworCWlmIChpYm1yLT5zZ19sZW4pIHsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGlibXItPnNnX2xlbjsgKytpKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoJmlibXItPnNnW2ldKTsKKworCQkJLyogRklYTUUgd2UgbmVlZCBhIHdheSB0byB0ZWxsIGEgci93IE1SCisJCQkgKiBmcm9tIGEgci9vIE1SICovCisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCXB1dF9wYWdlKHBhZ2UpOworCQl9CisJCWtmcmVlKGlibXItPnNnKTsKKworCQlpYm1yLT5zZyA9IE5VTEw7CisJCWlibXItPnNnX2xlbiA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaWJfdGVhcmRvd25fbXIoc3RydWN0IHJkc19pYl9tciAqaWJtcikKK3sKKwl1bnNpZ25lZCBpbnQgcGlubmVkID0gaWJtci0+c2dfbGVuOworCisJX19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7CisJaWYgKHBpbm5lZCkgeworCQlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCQlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisKKwkJYXRvbWljX3N1YihwaW5uZWQsICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZHNfaWJfZmx1c2hfZ29hbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwl1bnNpZ25lZCBpbnQgaXRlbV9jb3VudDsKKworCWl0ZW1fY291bnQgPSBhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCk7CisJaWYgKGZyZWVfYWxsKQorCQlyZXR1cm4gaXRlbV9jb3VudDsKKworCXJldHVybiAwOworfQorCisvKgorICogRmx1c2ggb3VyIHBvb2wgb2YgTVJzLgorICogQXQgYSBtaW5pbXVtLCBhbGwgY3VycmVudGx5IHVudXNlZCBNUnMgYXJlIHVubWFwcGVkLgorICogSWYgdGhlIG51bWJlciBvZiBNUnMgYWxsb2NhdGVkIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSBhbHNvIHRyeQorICogdG8gZnJlZSBhcyBtYW55IE1ScyBhcyBuZWVkZWQgdG8gZ2V0IGJhY2sgdG8gdGhpcyBsaW1pdC4KKyAqLworc3RhdGljIGludCByZHNfaWJfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yLCAqbmV4dDsKKwlMSVNUX0hFQUQodW5tYXBfbGlzdCk7CisJTElTVF9IRUFEKGZtcl9saXN0KTsKKwl1bnNpZ25lZCBsb25nIHVucGlubmVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBuZnJlZWQgPSAwLCBuY2xlYW5lZCA9IDAsIGZyZWVfZ29hbDsKKwlpbnQgcmV0ID0gMDsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3Bvb2xfZmx1c2gpOworCisJbXV0ZXhfbG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJLyogR2V0IHRoZSBsaXN0IG9mIGFsbCBNUnMgdG8gYmUgZHJvcHBlZC4gT3JkZXJpbmcgbWF0dGVycyAtCisJICogd2Ugd2FudCB0byBwdXQgZHJvcF9saXN0IGFoZWFkIG9mIGZyZWVfbGlzdC4gKi8KKwlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5mcmVlX2xpc3QsICZ1bm1hcF9saXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5kcm9wX2xpc3QsICZ1bm1hcF9saXN0KTsKKwlpZiAoZnJlZV9hbGwpCisJCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmNsZWFuX2xpc3QsICZ1bm1hcF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWZyZWVfZ29hbCA9IHJkc19pYl9mbHVzaF9nb2FsKHBvb2wsIGZyZWVfYWxsKTsKKworCWlmIChsaXN0X2VtcHR5KCZ1bm1hcF9saXN0KSkKKwkJZ290byBvdXQ7CisKKwkvKiBTdHJpbmcgYWxsIGliX21yJ3Mgb250byBvbmUgbGlzdCBhbmQgaGFuZCB0aGVtIHRvIGliX3VubWFwX2ZtciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWJtciwgJnVubWFwX2xpc3QsIGxpc3QpCisJCWxpc3RfYWRkKCZpYm1yLT5mbXItPmxpc3QsICZmbXJfbGlzdCk7CisJcmV0ID0gaWJfdW5tYXBfZm1yKCZmbXJfbGlzdCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBpYl91bm1hcF9mbXIgZmFpbGVkIChlcnI9JWQpXG4iLCByZXQpOworCisJLyogTm93IHdlIGNhbiBkZXN0cm95IHRoZSBETUEgbWFwcGluZyBhbmQgdW5waW4gYW55IHBhZ2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlibXIsIG5leHQsICZ1bm1hcF9saXN0LCBsaXN0KSB7CisJCXVucGlubmVkICs9IGlibXItPnNnX2xlbjsKKwkJX19yZHNfaWJfdGVhcmRvd25fbXIoaWJtcik7CisJCWlmIChuZnJlZWQgPCBmcmVlX2dvYWwgfHwgaWJtci0+cmVtYXBfY291bnQgPj0gcG9vbC0+Zm1yX2F0dHIubWF4X21hcHMpIHsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX2ZyZWUpOworCQkJbGlzdF9kZWwoJmlibXItPmxpc3QpOworCQkJaWJfZGVhbGxvY19mbXIoaWJtci0+Zm1yKTsKKwkJCWtmcmVlKGlibXIpOworCQkJbmZyZWVkKys7CisJCX0KKwkJbmNsZWFuZWQrKzsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2UoJnVubWFwX2xpc3QsICZwb29sLT5jbGVhbl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWF0b21pY19zdWIodW5waW5uZWQsICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJYXRvbWljX3N1YihuY2xlYW5lZCwgJnBvb2wtPmRpcnR5X2NvdW50KTsKKwlhdG9taWNfc3ViKG5mcmVlZCwgJnBvb2wtPml0ZW1fY291bnQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwb29sLT5mbHVzaF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfbXJfcG9vbF9mbHVzaF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2liX21yX3Bvb2wsIGZsdXNoX3dvcmtlcik7CisKKwlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKK30KKwordm9pZCByZHNfaWJfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2ID0gaWJtci0+ZGV2aWNlOworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmRzZGVidWcoIlJEUy9JQjogZnJlZV9tciBuZW50cyAldVxuIiwgaWJtci0+c2dfbGVuKTsKKworCS8qIFJldHVybiBpdCB0byB0aGUgcG9vbCdzIGZyZWUgbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoaWJtci0+cmVtYXBfY291bnQgPj0gcG9vbC0+Zm1yX2F0dHIubWF4X21hcHMpCisJCWxpc3RfYWRkKCZpYm1yLT5saXN0LCAmcG9vbC0+ZHJvcF9saXN0KTsKKwllbHNlCisJCWxpc3RfYWRkKCZpYm1yLT5saXN0LCAmcG9vbC0+ZnJlZV9saXN0KTsKKworCWF0b21pY19hZGQoaWJtci0+c2dfbGVuLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCWF0b21pY19pbmMoJnBvb2wtPmRpcnR5X2NvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCS8qIElmIHdlJ3ZlIHBpbm5lZCB0b28gbWFueSBwYWdlcywgcmVxdWVzdCBhIGZsdXNoICovCisJaWYgKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkgPj0gcG9vbC0+bWF4X2ZyZWVfcGlubmVkCisJIHx8IGF0b21pY19yZWFkKCZwb29sLT5kaXJ0eV9jb3VudCkgPj0gcG9vbC0+bWF4X2l0ZW1zIC8gMTApCisJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcG9vbC0+Zmx1c2hfd29ya2VyKTsKKworCWlmIChpbnZhbGlkYXRlKSB7CisJCWlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpKSkgeworCQkJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgdXNlciBjcmVhdGVkIGEgTVIgbWFya2VkCisJCQkgKiBhcyB1c2Vfb25jZSBhbmQgaW52YWxpZGF0ZSBhdCB0aGUgc2FtZSB0aW1lLiAqLworCQkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCQl9CisJfQorfQorCit2b2lkIHJkc19pYl9mbHVzaF9tcnModm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZHNfaWJkZXYsICZyZHNfaWJfZGV2aWNlcywgbGlzdCkgeworCQlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisKKwkJaWYgKHBvb2wpCisJCQlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9Cit9CisKK3ZvaWQgKnJkc19pYl9nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCByZHNfaWJfbXIgKmlibXIgPSBOVUxMOworCWludCByZXQ7CisKKwlyZHNfaWJkZXYgPSByZHNfaWJfZ2V0X2RldmljZShycy0+cnNfYm91bmRfYWRkcik7CisJaWYgKCFyZHNfaWJkZXYpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZHNfaWJkZXYtPm1yX3Bvb2wpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWJtciA9IHJkc19pYl9hbGxvY19mbXIocmRzX2liZGV2KTsKKwlpZiAoSVNfRVJSKGlibXIpKQorCQlyZXR1cm4gaWJtcjsKKworCXJldCA9IHJkc19pYl9tYXBfZm1yKHJkc19pYmRldiwgaWJtciwgc2csIG5lbnRzKTsKKwlpZiAocmV0ID09IDApCisJCSprZXlfcmV0ID0gaWJtci0+Zm1yLT5ya2V5OworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBtYXBfZm1yIGZhaWxlZCAoZXJybm89JWQpXG4iLCByZXQpOworCisJaWJtci0+ZGV2aWNlID0gcmRzX2liZGV2OworCisgb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKGlibXIpCisJCQlyZHNfaWJfZnJlZV9tcihpYm1yLCAwKTsKKwkJaWJtciA9IEVSUl9QVFIocmV0KTsKKwl9CisJcmV0dXJuIGlibXI7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JlY3YuYyBiL25ldC9yZHMvaWJfcmVjdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjFiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMCwwICsxLDg2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2liX2luY29taW5nX3NsYWI7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pYl9mcmFnX3NsYWI7CitzdGF0aWMgYXRvbWljX3QJcmRzX2liX2FsbG9jYXRpb24gPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIHZvaWQgcmRzX2liX2ZyYWdfZHJvcF9wYWdlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJX19mcmVlX3BhZ2UoZnJhZy0+Zl9wYWdlKTsKKwlmcmFnLT5mX3BhZ2UgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfZnJhZ19mcmVlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJQlVHX09OKGZyYWctPmZfcGFnZSAhPSBOVUxMKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2liX2ZyYWdfc2xhYiwgZnJhZyk7Cit9CisKKy8qCisgKiBXZSBtYXAgYSBwYWdlIGF0IGEgdGltZS4gIEl0cyBmcmFnbWVudHMgYXJlIHBvc3RlZCBpbiBvcmRlci4gIFRoaXMKKyAqIGlzIGNhbGxlZCBpbiBmcmFnbWVudCBvcmRlciBhcyB0aGUgZnJhZ21lbnRzIGdldCBzZW5kIGNvbXBsZXRpb24gZXZlbnRzLgorICogT25seSB0aGUgbGFzdCBmcmFnIGluIHRoZSBwYWdlIHBlcmZvcm1zIHRoZSB1bm1hcHBpbmcuCisgKgorICogSXQncyBPSyBmb3IgcmluZyBjbGVhbnVwIHRvIGNhbGwgdGhpcyBpbiB3aGF0ZXZlciBvcmRlciBpdCBsaWtlcyBiZWNhdXNlCisgKiBETUEgaXMgbm90IGluIGZsaWdodCBhbmQgc28gd2UgY2FuIHVubWFwIHdoaWxlIG90aGVyIHJpbmcgZW50cmllcyBzdGlsbAorICogaG9sZCBwYWdlIHJlZmVyZW5jZXMgaW4gdGhlaXIgZnJhZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9yZWN2X3VubWFwX3BhZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdikKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZyA9IHJlY3YtPnJfZnJhZzsKKworCXJkc2RlYnVnKCJyZWN2ICVwIGZyYWcgJXAgcGFnZSAlcFxuIiwgcmVjdiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlpZiAoZnJhZy0+Zl9tYXBwZWQpCisJCWliX2RtYV91bm1hcF9wYWdlKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkgICAgICAgZnJhZy0+Zl9tYXBwZWQsCisJCQkgICAgICAgUkRTX0ZSQUdfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlmcmFnLT5mX21hcHBlZCA9IDA7Cit9CisKK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3Y7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCByZWN2ID0gaWMtPmlfcmVjdnM7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrLCByZWN2KyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXJlY3YtPnJfaWJpbmMgPSBOVUxMOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJCXJlY3YtPnJfd3IubmV4dCA9IE5VTEw7CisJCXJlY3YtPnJfd3Iud3JfaWQgPSBpOworCQlyZWN2LT5yX3dyLnNnX2xpc3QgPSByZWN2LT5yX3NnZTsKKwkJcmVjdi0+cl93ci5udW1fc2dlID0gUkRTX0lCX1JFQ1ZfU0dFOworCisJCXNnZSA9IHJkc19pYl9kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSAwOworCQlzZ2UtPmxlbmd0aCA9IFJEU19GUkFHX1NJWkU7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3JlY3ZfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX3JlY3ZfY2xlYXJfb25lKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdikKK3sKKwlpZiAocmVjdi0+cl9pYmluYykgeworCQlyZHNfaW5jX3B1dCgmcmVjdi0+cl9pYmluYy0+aWlfaW5jKTsKKwkJcmVjdi0+cl9pYmluYyA9IE5VTEw7CisJfQorCWlmIChyZWN2LT5yX2ZyYWcpIHsKKwkJcmRzX2liX3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisJCWlmIChyZWN2LT5yX2ZyYWctPmZfcGFnZSkKKwkJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZHNfaWJfZnJhZ19mcmVlKHJlY3YtPnJfZnJhZyk7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisJfQorfQorCit2b2lkIHJkc19pYl9yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrKQorCQlyZHNfaWJfcmVjdl9jbGVhcl9vbmUoaWMsICZpYy0+aV9yZWN2c1tpXSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UpCisJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZSgmaWMtPmlfZnJhZyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2liX3JlY3ZfcmVmaWxsX29uZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdiwKKwkJCQkgIGdmcF90IGtwdHJfZ2ZwLCBnZnBfdCBwYWdlX2dmcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChyZWN2LT5yX2liaW5jID09IE5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZyZHNfaWJfYWxsb2NhdGlvbikgPj0gcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfYWxsb2NfbGltaXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVjdi0+cl9pYmluYyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2liX2luY29taW5nX3NsYWIsCisJCQkJCQkga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9pYmluYyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWF0b21pY19pbmMoJnJkc19pYl9hbGxvY2F0aW9uKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfaWJpbmMtPmlpX2ZyYWdzKTsKKwkJcmRzX2luY19pbml0KCZyZWN2LT5yX2liaW5jLT5paV9pbmMsIGNvbm4sIGNvbm4tPmNfZmFkZHIpOworCX0KKworCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkgeworCQlyZWN2LT5yX2ZyYWcgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pYl9mcmFnX3NsYWIsIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSk7CisJCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gTlVMTDsKKwl9CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkgeworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IGFsbG9jX3BhZ2UocGFnZV9nZnApOworCQlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlkbWFfYWRkciA9IGliX2RtYV9tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCSAgaWMtPmlfZnJhZy5mX3BhZ2UsCisJCQkJICBpYy0+aV9mcmFnLmZfb2Zmc2V0LAorCQkJCSAgUkRTX0ZSQUdfU0laRSwKKwkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGljLT5pX2NtX2lkLT5kZXZpY2UsIGRtYV9hZGRyKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIE9uY2Ugd2UgZ2V0IHRoZSBSRFNfUEFHRV9MQVNUX09GRiBmcmFnIHRoZW4gcmRzX2liX2ZyYWdfdW5tYXAoKQorCSAqIG11c3QgYmUgY2FsbGVkIG9uIHRoaXMgcmVjdi4gIFRoaXMgaGFwcGVucyBhcyBjb21wbGV0aW9ucyBoaXQKKwkgKiBpbiBvcmRlciBvciBvbiBjb25uZWN0aW9uIHNodXRkb3duLgorCSAqLworCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gaWMtPmlfZnJhZy5mX3BhZ2U7CisJcmVjdi0+cl9mcmFnLT5mX29mZnNldCA9IGljLT5pX2ZyYWcuZl9vZmZzZXQ7CisJcmVjdi0+cl9mcmFnLT5mX21hcHBlZCA9IGRtYV9hZGRyOworCisJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gZG1hX2FkZHI7CisJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCisJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKHJlY3YgLSBpYy0+aV9yZWN2cykgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWdldF9wYWdlKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKTsKKworCWlmIChpYy0+aV9mcmFnLmZfb2Zmc2V0IDwgUkRTX1BBR0VfTEFTVF9PRkYpIHsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCArPSBSRFNfRlJBR19TSVpFOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKGljLT5pX2ZyYWcuZl9wYWdlKTsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBOVUxMOworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHRyaWVzIHRvIGFsbG9jYXRlIGFuZCBwb3N0IHVudXNlZCB3b3JrIHJlcXVlc3RzIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQKKyAqIHRoZXkgaGF2ZSBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXkgbmVlZCB0byBxdWV1ZSByZWNlaXZlZCBmcmFnbWVudHMgaW50bworICogc29ja2V0cy4gIFRoZSBpX3JlY3ZfbXV0ZXggaXMgaGVsZCBoZXJlIHNvIHRoYXQgcmluZ19hbGxvYyBhbmQgX3VuYWxsb2MKKyAqIHBhaXJzIGRvbid0IGdvIHVubWF0Y2hlZC4KKyAqCisgKiAtMSBpcyByZXR1cm5lZCBpZiBwb3N0aW5nIGZhaWxzIGR1ZSB0byB0ZW1wb3JhcnkgcmVzb3VyY2UgZXhoYXVzdGlvbi4KKyAqLworaW50IHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2OworCXN0cnVjdCBpYl9yZWN2X3dyICpmYWlsZWRfd3I7CisJdW5zaWduZWQgaW50IHBvc3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisJdTMyIHBvczsKKworCXdoaWxlICgocHJlZmlsbCB8fCByZHNfY29ubl91cChjb25uKSkKKwkJCSYmIHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEsICZwb3MpKSB7CisJCWlmIChwb3MgPj0gaWMtPmlfcmVjdl9yaW5nLndfbnIpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiQXJnaCAtIHJpbmcgYWxsb2MgcmV0dXJuZWQgcG9zPSV1XG4iLAorCQkJCQlwb3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1twb3NdOworCQlyZXQgPSByZHNfaWJfcmVjdl9yZWZpbGxfb25lKGNvbm4sIHJlY3YsIGtwdHJfZ2ZwLCBwYWdlX2dmcCk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBYWFggd2hlbiBjYW4gdGhpcyBmYWlsPyAqLworCQlyZXQgPSBpYl9wb3N0X3JlY3YoaWMtPmlfY21faWQtPnFwLCAmcmVjdi0+cl93ciwgJmZhaWxlZF93cik7CisJCXJkc2RlYnVnKCJyZWN2ICVwIGliaW5jICVwIHBhZ2UgJXAgYWRkciAlbHUgcmV0ICVkXG4iLCByZWN2LAorCQkJIHJlY3YtPnJfaWJpbmMsIHJlY3YtPnJfZnJhZy0+Zl9wYWdlLAorCQkJIChsb25nKSByZWN2LT5yX2ZyYWctPmZfbWFwcGVkLCByZXQpOworCQlpZiAocmV0KSB7CisJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmVjdiBwb3N0IG9uICIKKwkJCSAgICAgICAiJXBJNCByZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJICAgICAgIHJldCk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9zdGVkKys7CisJfQorCisJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sIC0gdXBkYXRlIHRoZSB3aW5kb3cuICovCisJaWYgKGljLT5pX2Zsb3djdGwgJiYgcG9zdGVkKQorCQlyZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoY29ubiwgcG9zdGVkKTsKKworCWlmIChyZXQpCisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqcG9zOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCXJkc2RlYnVnKCJwdXJnaW5nIGliaW5jICVwIGluYyAlcFxuIiwgaWJpbmMsIGluYyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnJhZywgcG9zLCAmaWJpbmMtPmlpX2ZyYWdzLCBmX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmZnJhZy0+Zl9pdGVtKTsKKwkJcmRzX2liX2ZyYWdfZHJvcF9wYWdlKGZyYWcpOworCQlyZHNfaWJfZnJhZ19mcmVlKGZyYWcpOworCX0KK30KKwordm9pZCByZHNfaWJfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCisJcmRzX2liX2luY19wdXJnZShpbmMpOworCXJkc2RlYnVnKCJmcmVlaW5nIGliaW5jICVwIGluYyAlcFxuIiwgaWJpbmMsIGluYyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZpYmluYy0+aWlfZnJhZ3MpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2liX2luY29taW5nX3NsYWIsIGliaW5jKTsKKwlhdG9taWNfZGVjKCZyZHNfaWJfYWxsb2NhdGlvbik7CisJQlVHX09OKGF0b21pY19yZWFkKCZyZHNfaWJfYWxsb2NhdGlvbikgPCAwKTsKK30KKworaW50IHJkc19pYl9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IGlvdmVjICppb3YgPSBmaXJzdF9pb3Y7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmYgPSAwOworCXVuc2lnbmVkIGxvbmcgaW92X29mZiA9IDA7CisJaW50IGNvcGllZCA9IDA7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJaWJpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2liX2luY29taW5nLCBpaV9pbmMpOworCWZyYWcgPSBsaXN0X2VudHJ5KGliaW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCBzaXplIC0gY29waWVkKTsKKwkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHRvX2NvcHksIGxlbiAtIGNvcGllZCk7CisKKwkJcmRzZGVidWcoIiVsdSBieXRlcyB0byB1c2VyIFslcCwgJXp1XSArICVsdSBmcm9tIGZyYWcgIgorCQkJICJbJXAsICVsdV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIGZyYWctPmZfcGFnZSwgZnJhZy0+Zl9vZmZzZXQsIGZyYWdfb2ZmKTsKKworCQkvKiBYWFggbmVlZHMgKyBvZmZzZXQgZm9yIG11bHRpcGxlIHJlY3ZzIHBlciBwYWdlICovCisJCXJldCA9IHJkc19wYWdlX2NvcHlfdG9fdXNlcihmcmFnLT5mX3BhZ2UsCisJCQkJCSAgICBmcmFnLT5mX29mZnNldCArIGZyYWdfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qIGljIHN0YXJ0cyBvdXQga3phbGxvYygpZWQgKi8KK3ZvaWQgcmRzX2liX3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqd3IgPSAmaWMtPmlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UgKnNnZSA9ICZpYy0+aV9hY2tfc2dlOworCisJc2dlLT5hZGRyID0gaWMtPmlfYWNrX2RtYTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwl3ci0+c2dfbGlzdCA9IHNnZTsKKwl3ci0+bnVtX3NnZSA9IDE7CisJd3ItPm9wY29kZSA9IElCX1dSX1NFTkQ7CisJd3ItPndyX2lkID0gUkRTX0lCX0FDS19XUl9JRDsKKwl3ci0+c2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKK30KKworLyoKKyAqIFlvdSdkIHRoaW5rIHRoYXQgd2l0aCByZWxpYWJsZSBJQiBjb25uZWN0aW9ucyB5b3Ugd291bGRuJ3QgbmVlZCB0byBhY2sKKyAqIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBJQiBoYXJkd2FyZSBnZW5lcmF0ZXMKKyAqIGFuIGFjayBtZXNzYWdlIGJlZm9yZSBpdCBoYXMgRE1BZWQgdGhlIG1lc3NhZ2UgaW50byBtZW1vcnkuICBUaGlzIGNyZWF0ZXMgYQorICogcG90ZW50aWFsIG1lc3NhZ2UgbG9zcyBpZiB0aGUgSENBIGlzIGRpc2FibGVkIGZvciBhbnkgcmVhc29uIGJldHdlZW4gd2hlbiBpdAorICogc2VuZHMgdGhlIGFjayBhbmQgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIERNQWVkIGFuZCBwcm9jZXNzZWQuICBUaGlzIGlzIG9ubHkgYQorICogcG90ZW50aWFsIGlzc3VlIGlmIGFub3RoZXIgSENBIGlzIGF2YWlsYWJsZSBmb3IgZmFpbC1vdmVyLgorICoKKyAqIFdoZW4gdGhlIHJlbW90ZSBob3N0IHJlY2VpdmVzIG91ciBhY2sgdGhleSdsbCBmcmVlIHRoZSBzZW50IG1lc3NhZ2UgZnJvbQorICogdGhlaXIgc2VuZCBxdWV1ZS4gIFRvIGRlY3JlYXNlIHRoZSBsYXRlbmN5IG9mIHRoaXMgd2UgYWx3YXlzIHNlbmQgYW4gYWNrCisgKiBpbW1lZGlhdGVseSBhZnRlciB3ZSd2ZSByZWNlaXZlZCBtZXNzYWdlcy4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBoYXZlIG9uZSBhY2sgaW4gZmxpZ2h0IGF0IGEgdGltZS4gIFRoaXMgcHV0cworICogcHJlc3N1cmUgb24gc2VuZGVycyB0byBoYXZlIGRlZXAgZW5vdWdoIHNlbmQgcXVldWVzIHRvIGFic29yYiB0aGUgbGF0ZW5jeSBvZgorICogYSBzaW5nbGUgYWNrIGZyYW1lIGJlaW5nIGluIGZsaWdodC4gIFRoaXMgbWlnaHQgbm90IGJlIGdvb2QgZW5vdWdoLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2ZSBhIGxvbmctbGl2ZWQgc2VuZF93ciBhbmQgc2dlIHdoaWNoIHBvaW50IHRvIGEKKyAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFjayBmcmFtZS4gIFRoaXMgYWNrIHdyIGRvZXMgbm90IGZhbGwgdW5kZXIgdGhlIHJpbmcKKyAqIGFjY291bnRpbmcgdGhhdCB0aGUgdHggYW5kIHJ4IHdycyBkby4gIFRoZSBRUCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IG1ha2VzCisgKiByb29tIGZvciBpdCBiZXlvbmQgdGhlIHJpbmcgc2l6ZS4gIFNlbmQgY29tcGxldGlvbiBub3RpY2VzIGl0cyBzcGVjaWFsCisgKiB3cl9pZCBhbmQgYXZvaWRzIHdvcmtpbmcgd2l0aCB0aGUgcmluZyBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCisJCQkJaW50IGFja19yZXF1aXJlZCkKK3sKKwlyZHNfaWJfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKKwlpZiAoYWNrX3JlcXVpcmVkKSB7CisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHU2NCByZHNfaWJfZ2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJcmV0dXJuIGljLT5pX2Fja19uZXh0OworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSBpYy0+aV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwl1NjQgc2VxOworCWludCByZXQ7CisKKwlzZXEgPSByZHNfaWJfZ2V0X2FjayhpYyk7CisKKwlyZHNkZWJ1Zygic2VuZF9hY2s6IGljICVwIGFjayAlbGx1XG4iLCBpYywgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VxKTsKKwlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoaGRyLCAwLCAwLCAwKTsKKwloZHItPmhfYWNrID0gY3B1X3RvX2JlNjQoc2VxKTsKKwloZHItPmhfY3JlZGl0ID0gYWR2X2NyZWRpdHM7CisJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCWljLT5pX2Fja19xdWV1ZWQgPSBqaWZmaWVzOworCisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmljLT5pX2Fja193ciwgJmZhaWxlZF93cik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJLyogRmFpbGVkIHRvIHNlbmQuIFJlbGVhc2UgdGhlIFdSLCBhbmQKKwkJICogZm9yY2UgYW5vdGhlciBBQ0suCisJCSAqLworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW5kX2ZhaWx1cmUpOworCQkvKiBOZWVkIHRvIGZpbmVzc2UgdGhpcyBsYXRlci4gKi8KKwkJQlVHKCk7CisJfSBlbHNlCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VudCk7Cit9CisKKy8qCisgKiBUaGVyZSBhcmUgMyB3YXlzIG9mIGdldHRpbmcgYWNrbm93bGVkZ2VtZW50cyB0byB0aGUgcGVlcjoKKyAqICAxLglXZSBjYWxsIHJkc19pYl9hdHRlbXB0X2FjayBmcm9tIHRoZSByZWN2IGNvbXBsZXRpb24gaGFuZGxlcgorICoJdG8gc2VuZCBhbiBBQ0stb25seSBmcmFtZS4KKyAqCUhvd2V2ZXIsIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoIGZyYW1lIGluIHRoZSBzZW5kIHF1ZXVlCisgKglhdCBhbnkgdGltZSwgc28gd2UgbWF5IGhhdmUgdG8gcG9zdHBvbmUgaXQuCisgKiAgMi4JV2hlbiBhbm90aGVyIChkYXRhKSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQgd2hpbGUgdGhlcmUncworICoJYW4gQUNLIGluIHRoZSBxdWV1ZSwgd2UgcGlnZ3liYWNrIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyCisgKglvbiB0aGUgZGF0YSBwYWNrZXQuCisgKiAgMy4JSWYgdGhlIEFDSyBXUiBpcyBkb25lIHNlbmRpbmcsIHdlIGdldCBjYWxsZWQgZnJvbSB0aGUKKyAqCXNlbmQgcXVldWUgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSdzCisgKglhbm90aGVyIEFDSyBwZW5kaW5nIChwb3N0cG9uZWQgYmVjYXVzZSB0aGUgV1Igd2FzIG9uIHRoZQorICoJcXVldWUpLiBJZiBzbywgd2UgdHJhbnNtaXQgaXQuCisgKgorICogV2UgbWFpbnRhaW4gMiB2YXJpYWJsZXM6CisgKiAgLQlpX2Fja19mbGFncywgd2hpY2gga2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgQUNLIFdSCisgKglpcyBjdXJyZW50bHkgaW4gdGhlIHNlbmQgcXVldWUgb3Igbm90IChJQl9BQ0tfSU5fRkxJR0hUKQorICogIC0JaV9hY2tfbmV4dCwgd2hpY2ggaXMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkCisgKgorICogUG90ZW50aWFsbHksIHNlbmQgcXVldWUgYW5kIHJlY2VpdmUgcXVldWUgaGFuZGxlcnMgY2FuIHJ1biBjb25jdXJyZW50bHkuCisgKgorICogUmVjb25uZWN0aW5nIGNvbXBsaWNhdGVzIHRoaXMgcGljdHVyZSBqdXN0IHNsaWdodGx5LiBXaGVuIHdlCisgKiByZWNvbm5lY3QsIHdlIG1heSBiZSBzZWVpbmcgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBwZWVyCisgKiBpcyByZXRyYW5zbWl0dGluZyB0aGVtLCBiZWNhdXNlIGl0IGhhc24ndCBzZWVuIGFuIEFDSyBmb3IKKyAqIHRoZW0uIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIEFDSyB0aGVzZS4KKyAqCisgKiBBQ0sgbWl0aWdhdGlvbiBhZGRzIGEgaGVhZGVyIGZsYWcgIkFDS19SRVFVSVJFRCI7IGFueSBwYWNrZXQgd2l0aAorICogdGhpcyBmbGFnIHNldCAqTVVTVCogYmUgYWNrbm93bGVkZ2VkIGltbWVkaWF0ZWx5LgorICovCisKKy8qCisgKiBXaGVuIHdlIGdldCBoZXJlLCB3ZSdyZSBjYWxsZWQgZnJvbSB0aGUgcmVjdiBxdWV1ZSBoYW5kbGVyLgorICogQ2hlY2sgd2hldGhlciB3ZSBvdWdodCB0byB0cmFuc21pdCBhbiBBQ0suCisgKi8KK3ZvaWQgcmRzX2liX2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzOworCisJaWYgKCF0ZXN0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncykpIHsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19zZW5kX2RlbGF5ZWQpOworCQlyZXR1cm47CisJfQorCisJLyogQ2FuIHdlIGdldCBhIHNlbmQgY3JlZGl0PyAqLworCWlmICghcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKGljLCAxLCAmYWR2X2NyZWRpdHMsIDApKSB7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF90aHJvdHRsZSk7CisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfc2VuZF9hY2soaWMsIGFkdl9jcmVkaXRzKTsKK30KKworLyoKKyAqIFdlIGdldCBoZXJlIGZyb20gdGhlIHNlbmQgY29tcGxldGlvbiBoYW5kbGVyLCB3aGVuIHRoZQorICogYWRhcHRlciB0ZWxscyB1cyB0aGUgQUNLIGZyYW1lIHdhcyBzZW50LgorICovCit2b2lkIHJkc19pYl9hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJlZ3VsYXIgeG1pdCBjb2RlIHdoZW4gaXQgd2FudHMgdG8gcGlnZ3liYWNrCisgKiBhbiBBQ0sgb24gYW4gb3V0Z29pbmcgZnJhbWUuCisgKi8KK3U2NCByZHNfaWJfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VuZF9waWdneWJhY2tlZCk7CisJcmV0dXJuIHJkc19pYl9nZXRfYWNrKGljKTsKK30KKworLyoKKyAqIEl0J3Mga2luZCBvZiBsYW1lIHRoYXQgd2UncmUgY29weWluZyBmcm9tIHRoZSBwb3N0ZWQgcmVjZWl2ZSBwYWdlcyBpbnRvCisgKiBsb25nLWxpdmVkIGJpdG1hcHMuICBXZSBjb3VsZCBoYXZlIHBvc3RlZCB0aGUgYml0bWFwcyBhbmQgcmRtYSB3cml0dGVuIGludG8KKyAqIHRoZW0uICBCdXQgcmVjZWl2aW5nIG5ldyBjb25nZXN0aW9uIGJpdG1hcHMgc2hvdWxkIGJlIGEgKnJhcmUqIGV2ZW50LCBzbworICogaG9wZWZ1bGx5IHdlIHdvbid0IG5lZWQgdG8gaW52ZXN0IHRoYXQgY29tcGxleGl0eSBpbiBtYWtpbmcgaXQgbW9yZQorICogZWZmaWNpZW50LiAgQnkgY29weWluZyB3ZSBjYW4gc2hhcmUgYSBzaW1wbGVyIGNvcmUgd2l0aCBUQ1Agd2hpY2ggaGFzIHRvCisgKiBjb3B5LgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfY29uZ19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbWFwX29mZjsKKwl1bnNpZ25lZCBpbnQgbWFwX3BhZ2U7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJdW5zaWduZWQgbG9uZyBmcmFnX29mZjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBjb3BpZWQ7CisJdWludDY0X3QgdW5jb25nZXN0ZWQgPSAwOworCXZvaWQgKmFkZHI7CisKKwkvKiBjYXRjaCBjb21wbGV0ZWx5IGNvcnJ1cHQgcGFja2V0cyAqLworCWlmIChiZTMyX3RvX2NwdShpYmluYy0+aWlfaW5jLmlfaGRyLmhfbGVuKSAhPSBSRFNfQ09OR19NQVBfQllURVMpCisJCXJldHVybjsKKworCW1hcCA9IGNvbm4tPmNfZmNvbmc7CisJbWFwX3BhZ2UgPSAwOworCW1hcF9vZmYgPSAwOworCisJZnJhZyA9IGxpc3RfZW50cnkoaWJpbmMtPmlpX2ZyYWdzLm5leHQsIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCWZyYWdfb2ZmID0gMDsKKworCWNvcGllZCA9IDA7CisKKwl3aGlsZSAoY29waWVkIDwgUkRTX0NPTkdfTUFQX0JZVEVTKSB7CisJCXVpbnQ2NF90ICpzcmMsICpkc3Q7CisJCXVuc2lnbmVkIGludCBrOworCisJCXRvX2NvcHkgPSBtaW4oUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmLCBQQUdFX1NJWkUgLSBtYXBfb2ZmKTsKKwkJQlVHX09OKHRvX2NvcHkgJiA3KTsgLyogTXVzdCBiZSA2NGJpdCBhbGlnbmVkLiAqLworCisJCWFkZHIgPSBrbWFwX2F0b21pYyhmcmFnLT5mX3BhZ2UsIEtNX1NPRlRJUlEwKTsKKworCQlzcmMgPSBhZGRyICsgZnJhZ19vZmY7CisJCWRzdCA9ICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbbWFwX3BhZ2VdICsgbWFwX29mZjsKKwkJZm9yIChrID0gMDsgayA8IHRvX2NvcHk7IGsgKz0gOCkgeworCQkJLyogUmVjb3JkIHBvcnRzIHRoYXQgYmVjYW1lIHVuY29uZ2VzdGVkLCBpZQorCQkJICogYml0cyB0aGF0IGNoYW5nZWQgZnJvbSAwIHRvIDEuICovCisJCQl1bmNvbmdlc3RlZCB8PSB+KCpzcmMpICYgKmRzdDsKKwkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJfQorCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1NPRlRJUlEwKTsKKworCQljb3BpZWQgKz0gdG9fY29weTsKKworCQltYXBfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChtYXBfb2ZmID09IFBBR0VfU0laRSkgeworCQkJbWFwX29mZiA9IDA7CisJCQltYXBfcGFnZSsrOworCQl9CisKKwkJZnJhZ19vZmYgKz0gdG9fY29weTsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJfQorCisJLyogdGhlIGNvbmdlc3Rpb24gbWFwIGlzIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIgKi8KKwl1bmNvbmdlc3RlZCA9IGxlNjRfdG9fY3B1KHVuY29uZ2VzdGVkKTsKKworCXJkc19jb25nX21hcF91cGRhdGVkKG1hcCwgdW5jb25nZXN0ZWQpOworfQorCisvKgorICogUmluZ3MgYXJlIHBvc3RlZCB3aXRoIGFsbCB0aGUgYWxsb2NhdGlvbnMgdGhleSdsbCBuZWVkIHRvIHF1ZXVlIHRoZQorICogaW5jb21pbmcgbWVzc2FnZSB0byB0aGUgcmVjZWl2aW5nIHNvY2tldCBzbyB0aGlzIGNhbid0IGZhaWwuCisgKiBBbGwgZnJhZ21lbnRzIHN0YXJ0IHdpdGggYSBoZWFkZXIsIHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UncmUgbm90IHJlY2VpdmluZworICogZ2FyYmFnZSwgYW5kIHdlIGNhbiB0ZWxsIGEgc21hbGwgOCBieXRlIGZyYWdtZW50IGZyb20gYW4gQUNLIGZyYW1lLgorICovCitzdHJ1Y3QgcmRzX2liX2Fja19zdGF0ZSB7CisJdTY0CQlhY2tfbmV4dDsKKwl1NjQJCWFja19yZWN2OworCXVuc2lnbmVkIGludAlhY2tfcmVxdWlyZWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX25leHRfdmFsaWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlY3ZfdmFsaWQ6MTsKK307CisKK3N0YXRpYyB2b2lkIHJkc19pYl9wcm9jZXNzX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2LCB1MzIgYnl0ZV9sZW4sCisJCQkJc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jID0gaWMtPmlfaWJpbmM7CisJc3RydWN0IHJkc19oZWFkZXIgKmloZHIsICpoZHI7CisKKwkvKiBYWFggc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uIGlmIHBvcnQgMCwwIGFyZSBzZWVuPyAqLworCisJcmRzZGVidWcoImljICVwIGliaW5jICVwIHJlY3YgJXAgYnl0ZSBsZW4gJXVcbiIsIGljLCBpYmluYywgcmVjdiwKKwkJIGJ5dGVfbGVuKTsKKworCWlmIChieXRlX2xlbiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBkaWRuJ3QgaW5jbHVlIGEgIgorCQkgICAgICAgImhlYWRlciwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmV0dXJuOworCX0KKwlieXRlX2xlbiAtPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJaWhkciA9ICZpYy0+aV9yZWN2X2hkcnNbcmVjdiAtIGljLT5pX3JlY3ZzXTsKKworCS8qIFZhbGlkYXRlIHRoZSBjaGVja3N1bS4gKi8KKwlpZiAoIXJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShpaGRyKSkgeworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGhhcyBjb3JydXB0ZWQgaGVhZGVyIC0gIgorCQkgICAgICAgImZvcmNpbmcgYSByZWNvbm5lY3RcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgdGhlIEFDSyBzZXF1ZW5jZSB3aGljaCBjb21lcyB3aXRoIGV2ZXJ5IHBhY2tldCAqLworCXN0YXRlLT5hY2tfcmVjdiA9IGJlNjRfdG9fY3B1KGloZHItPmhfYWNrKTsKKwlzdGF0ZS0+YWNrX3JlY3ZfdmFsaWQgPSAxOworCisJLyogUHJvY2VzcyB0aGUgY3JlZGl0cyB1cGRhdGUgaWYgdGhlcmUgd2FzIG9uZSAqLworCWlmIChpaGRyLT5oX2NyZWRpdCkKKwkJcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgaWhkci0+aF9jcmVkaXQpOworCisJaWYgKGloZHItPmhfc3BvcnQgPT0gMCAmJiBpaGRyLT5oX2Rwb3J0ID09IDAgJiYgYnl0ZV9sZW4gPT0gMCkgeworCQkvKiBUaGlzIGlzIGFuIEFDSy1vbmx5IHBhY2tldC4gVGhlIGZhY3QgdGhhdCBpdCBnZXRzCisJCSAqIHNwZWNpYWwgdHJlYXRtZW50IGhlcmUgaXMgdGhhdCBoaXN0b3JpY2FsbHksIEFDS3MKKwkJICogd2VyZSByYXRoZXIgc3BlY2lhbCBiZWFzdHMuCisJCSAqLworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3JlY2VpdmVkKTsKKworCQkvKgorCQkgKiBVc3VhbGx5IHRoZSBmcmFncyBtYWtlIHRoZWlyIHdheSBvbiB0byBpbmNzIGFuZCBhcmUgdGhlbiBmcmVlZCBhcworCQkgKiB0aGUgaW5jIGlzIGZyZWVkLiAgV2UgZG9uJ3QgZ28gdGhhdCByb3V0ZSwgc28gd2UgaGF2ZSB0byBkcm9wIHRoZQorCQkgKiBwYWdlIHJlZiBvdXJzZWx2ZXMuICBXZSBjYW4ndCBqdXN0IGxlYXZlIHRoZSBwYWdlIG9uIHRoZSByZWN2CisJCSAqIGJlY2F1c2UgdGhhdCBjb25mdXNlcyB0aGUgZG1hIG1hcHBpbmcgb2YgcGFnZXMgYW5kIGVhY2ggcmVjdidzIHVzZQorCQkgKiBvZiBhIHBhcnRpYWwgcGFnZS4gIFdlIGNhbiBsZWF2ZSB0aGUgZnJhZywgdGhvdWdoLCBpdCB3aWxsIGJlCisJCSAqIHJldXNlZC4KKwkJICoKKwkJICogRklYTUU6IEZvbGQgdGhpcyBpbnRvIHRoZSBjb2RlIHBhdGggYmVsb3cuCisJCSAqLworCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGluYyBvbiB0aGUgY29ubmVjdGlvbiB0aGVuIHRoaXMKKwkgKiBmcmFnbWVudCBoYXMgYSBoZWFkZXIgYW5kIHN0YXJ0cyBhIG1lc3NhZ2UuLiBjb3B5IGl0cyBoZWFkZXIKKwkgKiBpbnRvIHRoZSBpbmMgYW5kIHNhdmUgdGhlIGluYyBzbyB3ZSBjYW4gaGFuZyB1cGNvbWluZyBmcmFnbWVudHMKKwkgKiBvZmYgaXRzIGxpc3QuCisJICovCisJaWYgKGliaW5jID09IE5VTEwpIHsKKwkJaWJpbmMgPSByZWN2LT5yX2liaW5jOworCQlyZWN2LT5yX2liaW5jID0gTlVMTDsKKwkJaWMtPmlfaWJpbmMgPSBpYmluYzsKKworCQloZHIgPSAmaWJpbmMtPmlpX2luYy5pX2hkcjsKKwkJbWVtY3B5KGhkciwgaWhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IGJlMzJfdG9fY3B1KGhkci0+aF9sZW4pOworCisJCXJkc2RlYnVnKCJpYyAlcCBpYmluYyAlcCByZW0gJXUgZmxhZyAweCV4XG4iLCBpYywgaWJpbmMsCisJCQkgaWMtPmlfcmVjdl9kYXRhX3JlbSwgaGRyLT5oX2ZsYWdzKTsKKwl9IGVsc2UgeworCQloZHIgPSAmaWJpbmMtPmlpX2luYy5pX2hkcjsKKwkJLyogV2UgY2FuJ3QganVzdCB1c2UgbWVtY21wIGhlcmU7IGZyYWdtZW50cyBvZiBhCisJCSAqIHNpbmdsZSBtZXNzYWdlIG1heSBjYXJyeSBkaWZmZXJlbnQgQUNLcyAqLworCQlpZiAoaGRyLT5oX3NlcXVlbmNlICE9IGloZHItPmhfc2VxdWVuY2UKKwkJIHx8IGhkci0+aF9sZW4gIT0gaWhkci0+aF9sZW4KKwkJIHx8IGhkci0+aF9zcG9ydCAhPSBpaGRyLT5oX3Nwb3J0CisJCSB8fCBoZHItPmhfZHBvcnQgIT0gaWhkci0+aF9kcG9ydCkgeworCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkiZnJhZ21lbnQgaGVhZGVyIG1pc21hdGNoOyBmb3JjaW5nIHJlY29ubmVjdFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSwgJmliaW5jLT5paV9mcmFncyk7CisJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCWlmIChpYy0+aV9yZWN2X2RhdGFfcmVtID4gUkRTX0ZSQUdfU0laRSkKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSAtPSBSRFNfRlJBR19TSVpFOworCWVsc2UgeworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gMDsKKwkJaWMtPmlfaWJpbmMgPSBOVUxMOworCisJCWlmIChpYmluYy0+aWlfaW5jLmlfaGRyLmhfZmxhZ3MgPT0gUkRTX0ZMQUdfQ09OR19CSVRNQVApCisJCQlyZHNfaWJfY29uZ19yZWN2KGNvbm4sIGliaW5jKTsKKwkJZWxzZSB7CisJCQlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2ZhZGRyLCBjb25uLT5jX2xhZGRyLAorCQkJCQkgICZpYmluYy0+aWlfaW5jLCBHRlBfQVRPTUlDLAorCQkJCQkgIEtNX1NPRlRJUlEwKTsKKwkJCXN0YXRlLT5hY2tfbmV4dCA9IGJlNjRfdG9fY3B1KGhkci0+aF9zZXF1ZW5jZSk7CisJCQlzdGF0ZS0+YWNrX25leHRfdmFsaWQgPSAxOworCQl9CisKKwkJLyogRXZhbHVhdGUgdGhlIEFDS19SRVFVSVJFRCBmbGFnICphZnRlciogd2UgcmVjZWl2ZWQKKwkJICogdGhlIGNvbXBsZXRlIGZyYW1lLCBhbmQgYWZ0ZXIgYnVtcGluZyB0aGUgbmV4dF9yeAorCQkgKiBzZXF1ZW5jZS4gKi8KKwkJaWYgKGhkci0+aF9mbGFncyAmIFJEU19GTEFHX0FDS19SRVFVSVJFRCkgeworCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfYWNrX3JlcXVpcmVkKTsKKwkJCXN0YXRlLT5hY2tfcmVxdWlyZWQgPSAxOworCQl9CisKKwkJcmRzX2luY19wdXQoJmliaW5jLT5paV9pbmMpOworCX0KK30KKworLyoKKyAqIFBsdWNraW5nIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgcmluZyBjYW4gYmUgZG9uZSBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIHRocmVhZCByZWZpbGxpbmcgdGhlIHJpbmcuICBFYWNoIHJpbmcgb3BlcmF0aW9uIGlzIHByb3RlY3RlZCBieQorICogc3BpbmxvY2tzIGFuZCB0aGUgdHJhbnNpZW50IHN0YXRlIG9mIHJlZmlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAqIHJlY29yZGluZyBvZiB3aGljaCBlbnRyeSBpcyBvbGRlc3QuCisgKgorICogVGhpcyByZWxpZXMgb24gSUIgb25seSBjYWxsaW5nIG9uZSBjcSBjb21wX2hhbmRsZXIgZm9yIGVhY2ggY3Egc28gdGhhdAorICogdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSBjYWxsZXIgb2YgcmRzX3JlY3ZfaW5jb21pbmcoKSBwZXIgUkRTIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgc3RhdGUgPSB7IDAsIH07CisJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3Y7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjcSAlcFxuIiwgY29ubiwgY3EpOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2NxX2NhbGwpOworCisJaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfU09MSUNJVEVEKTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9jcV9ldmVudCk7CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1tyZHNfaWJfcmluZ19vbGRlc3QoJmljLT5pX3JlY3ZfcmluZyldOworCisJCXJkc19pYl9yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCisJCS8qCisJCSAqIEFsc28gcHJvY2VzcyByZWN2cyBpbiBjb25uZWN0aW5nIHN0YXRlIGJlY2F1c2UgaXQgaXMgcG9zc2libGUKKwkJICogdG8gZ2V0IGEgcmVjdiBjb21wbGV0aW9uIF9iZWZvcmVfIHRoZSByZG1hY20gRVNUQUJMSVNIRUQKKwkJICogZXZlbnQgaXMgcHJvY2Vzc2VkLgorCQkgKi8KKwkJaWYgKHJkc19jb25uX3VwKGNvbm4pIHx8IHJkc19jb25uX2Nvbm5lY3RpbmcoY29ubikpIHsKKwkJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCQlpZiAod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpIHsKKwkJCQlyZHNfaWJfcHJvY2Vzc19yZWN2KGNvbm4sIHJlY3YsIHdjLmJ5dGVfbGVuLCAmc3RhdGUpOworCQkJfSBlbHNlIHsKKwkJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmVjdiBjb21wbGV0aW9uIG9uICIKKwkJCQkgICAgICAgIiVwSTQgaGFkIHN0YXR1cyAldSwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCQkgICAgICAgd2Muc3RhdHVzKTsKKwkJCX0KKwkJfQorCisJCXJkc19pYl9yaW5nX2ZyZWUoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJfQorCisJaWYgKHN0YXRlLmFja19uZXh0X3ZhbGlkKQorCQlyZHNfaWJfc2V0X2FjayhpYywgc3RhdGUuYWNrX25leHQsIHN0YXRlLmFja19yZXF1aXJlZCk7CisJaWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkICYmIHN0YXRlLmFja19yZWN2ID4gaWMtPmlfYWNrX3JlY3YpIHsKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBzdGF0ZS5hY2tfcmVjdiwgTlVMTCk7CisJCWljLT5pX2Fja19yZWN2ID0gc3RhdGUuYWNrX3JlY3Y7CisJfQorCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKKworCS8qIElmIHdlIGV2ZXIgZW5kIHVwIHdpdGggYSByZWFsbHkgZW1wdHkgcmVjZWl2ZSByaW5nLCB3ZSdyZQorCSAqIGluIGRlZXAgdHJvdWJsZSwgYXMgdGhlIHNlbmRlciB3aWxsIGRlZmluaXRlbHkgc2VlIFJOUgorCSAqIHRpbWVvdXRzLiAqLworCWlmIChyZHNfaWJfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X3JpbmdfZW1wdHkpOworCisJLyoKKwkgKiBJZiB0aGUgcmluZyBpcyBydW5uaW5nIGxvdywgdGhlbiBzY2hlZHVsZSB0aGUgdGhyZWFkIHRvIHJlZmlsbC4KKwkgKi8KKwlpZiAocmRzX2liX3JpbmdfbG93KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCitpbnQgcmRzX2liX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCByZXQgPSAwOworCisJcmRzZGVidWcoImNvbm4gJXBcbiIsIGNvbm4pOworCisJLyoKKwkgKiBJZiB3ZSBnZXQgYSB0ZW1wb3JhcnkgcG9zdGluZyBmYWlsdXJlIGluIHRoaXMgY29udGV4dCB0aGVuCisJICogd2UncmUgcmVhbGx5IGxvdyBhbmQgd2Ugd2FudCB0aGUgY2FsbGVyIHRvIGJhY2sgb2ZmIGZvciBhIGJpdC4KKwkgKi8KKwltdXRleF9sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKwlpZiAocmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMCkpCisJCXJldCA9IC1FTk9NRU07CisJZWxzZQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfcmVmaWxsX2Zyb21fdGhyZWFkKTsKKwltdXRleF91bmxvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaWJfYXR0ZW1wdF9hY2soaWMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCByZHNfaWJfcmVjdl9pbml0KHZvaWQpCit7CisJc3RydWN0IHN5c2luZm8gc2k7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwkvKiBEZWZhdWx0IHRvIDMwJSBvZiBhbGwgYXZhaWxhYmxlIFJBTSBmb3IgcmVjdiBtZW1vcnkgKi8KKwlzaV9tZW1pbmZvKCZzaSk7CisJcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gc2kudG90YWxyYW0gLyAzICogUEFHRV9TSVpFIC8gUkRTX0ZSQUdfU0laRTsKKworCXJkc19pYl9pbmNvbWluZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pYl9pbmNvbWluZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2liX2luY29taW5nKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pYl9pbmNvbWluZ19zbGFiID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmRzX2liX2ZyYWdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaWJfZnJhZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaWJfZnJhZ19zbGFiID09IE5VTEwpCisJCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfaW5jb21pbmdfc2xhYik7CisJZWxzZQorCQlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3JlY3ZfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfaW5jb21pbmdfc2xhYik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pYl9mcmFnX3NsYWIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yaW5nLmMgYi9uZXQvcmRzL2liX3JpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE2Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9yaW5nLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworLyoKKyAqIExvY2tpbmcgZm9yIElCIHJpbmdzLgorICogV2UgYXNzdW1lIHRoYXQgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvdGVjdGVkIGJ5IGEgbXV0ZXgKKyAqIGluIHRoZSBjYWxsZXIgKHRoaXMgaXMgYSB2YWxpZCBhc3N1bXB0aW9uIGZvciB0aGUgY3VycmVudAorICogaW1wbGVtZW50YXRpb24pLgorICoKKyAqIEZyZWVpbmcgYWx3YXlzIGhhcHBlbnMgaW4gYW4gaW50ZXJydXB0LCBhbmQgaGVuY2Ugb25seQorICogcmFjZXMgd2l0aCBhbGxvY2F0aW9ucywgYnV0IG5vdCB3aXRoIG90aGVyIGZyZWUoKXMuCisgKgorICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBpcyB0aGF0CisgKiB0aGUgYWxsb2MgY29kZSBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZnJlZSBlbnRyaWVzLgorICogVG8gdGhpcyBlbmQsIHdlIG1haW50YWluIHR3byBjb3VudGVyczsgYW4gYWxsb2NhdGlvbiBjb3VudGVyCisgKiBhbmQgYSBmcmVlIGNvdW50ZXIuIEJvdGggYXJlIGFsbG93ZWQgdG8gcnVuIGZyZWVseSwgYW5kIHdyYXAKKyAqIGFyb3VuZC4KKyAqIFRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGlzIGFsd2F5cyAoYWxsb2NfY3RyIC0gZnJlZV9jdHIpICUgTlIuCisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgZnJlZV9jdHIgYXRvbWljLiBXaGVuIHRoZQorICogY2FsbGVyIGZpbmRzIGFuIGFsbG9jYXRpb24gZmFpbHMsIGl0IHNob3VsZCBzZXQgYW4gImFsbG9jIGZhaWwiCisgKiBiaXQgYW5kIHJldHJ5IHRoZSBhbGxvY2F0aW9uLiBUaGUgImFsbG9jIGZhaWwiIGJpdCBlc3NlbnRpYWxseSB0ZWxscworICogdGhlIENRIGNvbXBsZXRpb24gaGFuZGxlcnMgdG8gd2FrZSBpdCB1cCBhZnRlciBmcmVlaW5nIHNvbWUKKyAqIG1vcmUgZW50cmllcy4KKyAqLworCisvKgorICogVGhpcyBvbmx5IGhhcHBlbnMgb24gc2h1dGRvd24uCisgKi8KK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19pYl9yaW5nX2VtcHR5X3dhaXQpOworCit2b2lkIHJkc19pYl9yaW5nX2luaXQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwltZW1zZXQocmluZywgMCwgc2l6ZW9mKCpyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworCXJkc2RlYnVnKCJyaW5nICVwIG5yICV1XG4iLCByaW5nLCByaW5nLT53X25yKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19yZHNfaWJfcmluZ191c2VkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXUzMiBkaWZmOworCisJLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaGFzIGF0IGxlYXN0IGFzIG1hbnkgYml0cyBhcyB1MzIgKi8KKwlkaWZmID0gcmluZy0+d19hbGxvY19jdHIgLSAodTMyKSBhdG9taWNfcmVhZCgmcmluZy0+d19mcmVlX2N0cik7CisJQlVHX09OKGRpZmYgPiByaW5nLT53X25yKTsKKworCXJldHVybiBkaWZmOworfQorCit2b2lkIHJkc19pYl9yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCS8qIFdlIG9ubHkgZXZlciBnZXQgY2FsbGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gc2V0dXAgY29kZSwKKwkgKiBwcmlvciB0byBjcmVhdGluZyB0aGUgUVAuICovCisJQlVHX09OKF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworfQorCitzdGF0aWMgaW50IF9fcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSA9PSAwOworfQorCit1MzIgcmRzX2liX3JpbmdfYWxsb2Moc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKQoreworCXUzMiByZXQgPSAwLCBhdmFpbDsKKworCWF2YWlsID0gcmluZy0+d19uciAtIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHZhbCAldSBuZXh0ICV1IGZyZWUgJXVcbiIsIHJpbmcsIHZhbCwKKwkJIHJpbmctPndfYWxsb2NfcHRyLCBhdmFpbCk7CisKKwlpZiAodmFsICYmIGF2YWlsKSB7CisJCXJldCA9IG1pbih2YWwsIGF2YWlsKTsKKwkJKnBvcyA9IHJpbmctPndfYWxsb2NfcHRyOworCisJCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyICsgcmV0KSAlIHJpbmctPndfbnI7CisJCXJpbmctPndfYWxsb2NfY3RyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9yaW5nX2ZyZWUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19mcmVlX3B0ciA9IChyaW5nLT53X2ZyZWVfcHRyICsgdmFsKSAlIHJpbmctPndfbnI7CisJYXRvbWljX2FkZCh2YWwsICZyaW5nLT53X2ZyZWVfY3RyKTsKKworCWlmIChfX3Jkc19pYl9yaW5nX2VtcHR5KHJpbmcpICYmCisJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19pYl9yaW5nX2VtcHR5X3dhaXQpKQorCQl3YWtlX3VwKCZyZHNfaWJfcmluZ19lbXB0eV93YWl0KTsKK30KKwordm9pZCByZHNfaWJfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyIC0gdmFsKSAlIHJpbmctPndfbnI7CisJcmluZy0+d19hbGxvY19jdHIgLT0gdmFsOworfQorCitpbnQgcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfZW1wdHkocmluZyk7Cit9CisKK2ludCByZHNfaWJfcmluZ19sb3coc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2liX3JpbmdfdXNlZChyaW5nKSA8PSAocmluZy0+d19uciA+PiAyKTsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIG9sZGVzdCBhbGxvY2VkIHJpbmcgZW50cnkuICBUaGlzIHdpbGwgYmUgdGhlIG5leHQgb25lCisgKiBmcmVlZC4gIFRoaXMgY2FuJ3QgYmUgY2FsbGVkIGlmIHRoZXJlIGFyZSBub25lIGFsbG9jYXRlZC4KKyAqLwordTMyIHJkc19pYl9yaW5nX29sZGVzdChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gcmluZy0+d19mcmVlX3B0cjsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgd29yayByZXF1ZXN0cy4KKyAqLworCit1MzIgcmRzX2liX3JpbmdfY29tcGxldGVkKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgd3JfaWQsIHUzMiBvbGRlc3QpCit7CisJdTMyIHJldDsKKworCWlmIChvbGRlc3QgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCkKKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCAtIG9sZGVzdCArIDE7CisJZWxzZQorCQlyZXQgPSByaW5nLT53X25yIC0gb2xkZXN0ICsgKHVuc2lnbmVkIGxvbmcgbG9uZyl3cl9pZCArIDE7CisKKwlyZHNkZWJ1ZygicmluZyAlcCByZXQgJXUgd3JfaWQgJXUgb2xkZXN0ICV1XG4iLCByaW5nLCByZXQsCisJCSB3cl9pZCwgb2xkZXN0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9zZW5kLmMgYi9uZXQvcmRzL2liX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZjNTJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zZW5kLmMKQEAgLTAsMCArMSw4NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgImliLmgiCisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCQkgICAgICBpbnQgd2Nfc3RhdHVzKQoreworCWludCBub3RpZnlfc3RhdHVzOworCisJc3dpdGNoICh3Y19zdGF0dXMpIHsKKwljYXNlIElCX1dDX1dSX0ZMVVNIX0VSUjoKKwkJcmV0dXJuOworCisJY2FzZSBJQl9XQ19TVUNDRVNTOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfU1VDQ0VTUzsKKwkJYnJlYWs7CisKKwljYXNlIElCX1dDX1JFTV9BQ0NFU1NfRVJSOgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfUkVNT1RFX0VSUk9SOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9PVEhFUl9FUlJPUjsKKwkJYnJlYWs7CisJfQorCXJkc19yZG1hX3NlbmRfY29tcGxldGUocm0sIG5vdGlmeV9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF91bm1hcF9yZG1hKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICAgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlpZiAob3AtPnJfbWFwcGVkKSB7CisJCWliX2RtYV91bm1hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLAorCQkJb3AtPnJfd3JpdGUgPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJb3AtPnJfbWFwcGVkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9zZW5kX3VubWFwX3JtKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkgIHN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kLAorCQkJICBpbnQgd2Nfc3RhdHVzKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBzZW5kLT5zX3JtOworCisJcmRzZGVidWcoImljICVwIHNlbmQgJXAgcm0gJXBcbiIsIGljLCBzZW5kLCBybSk7CisKKwlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJICAgICBybS0+bV9zZywgcm0tPm1fbmVudHMsCisJCSAgICAgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAocm0tPm1fcmRtYV9vcCAhPSBOVUxMKSB7CisJCXJkc19pYl9zZW5kX3VubWFwX3JkbWEoaWMsIHJtLT5tX3JkbWFfb3ApOworCisJCS8qIElmIHRoZSB1c2VyIGFza2VkIGZvciBhIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIG9uIHRoaXMKKwkJICogbWVzc2FnZSwgd2UgY2FuIGltcGxlbWVudCB0aHJlZSBkaWZmZXJlbnQgc2VtYW50aWNzOgorCQkgKiAgMS4JTm90aWZ5IHdoZW4gd2UgcmVjZWl2ZWQgdGhlIEFDSyBvbiB0aGUgUkRTIG1lc3NhZ2UKKwkJICoJdGhhdCB3YXMgcXVldWVkIHdpdGggdGhlIFJETUEuIFRoaXMgcHJvdmlkZXMgcmVsaWFibGUKKwkJICoJbm90aWZpY2F0aW9uIG9mIFJETUEgc3RhdHVzIGF0IHRoZSBleHBlbnNlIG9mIGEgb25lLXdheQorCQkgKglwYWNrZXQgZGVsYXkuCisJCSAqICAyLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBSRE1BIG9wZXJhdGlvbi4KKwkJICogIDMuCU5vdGlmeSB3aGVuIHRoZSBJQiBzdGFjayBnaXZlcyB1cyB0aGUgY29tcGxldGlvbiBldmVudCBmb3IKKwkJICoJdGhlIGFjY29tcGFueWluZyBSRFMgbWVzc2FnZXMuCisJCSAqIEhlcmUsIHdlIGltcGxlbWVudCBhcHByb2FjaCAjMy4gVG8gaW1wbGVtZW50IGFwcHJvYWNoICMyLAorCQkgKiBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgZnJvbSB0aGUgY3FfaGFuZGxlci4gVG8gaW1wbGVtZW50ICMxLAorCQkgKiBkb24ndCBjYWxsIHJkc19yZG1hX3NlbmRfY29tcGxldGUgYXQgYWxsLCBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3RpZnkKKwkJICogaGFuZGxpbmcgaW4gdGhlIEFDSyBwcm9jZXNzaW5nIGNvZGUuCisJCSAqCisJCSAqIE5vdGU6IFRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IHN5bmMgYW55IFJETUEgYnVmZmVycyB1c2luZworCQkgKiBpYl9kbWFfc3luY19zZ19mb3JfY3B1IC0gdGhlIGNvbXBsZXRpb24gZm9yIHRoZSBSRE1BCisJCSAqIG9wZXJhdGlvbiBpdHNlbGYgdW5tYXBwZWQgdGhlIFJETUEgYnVmZmVycywgd2hpY2ggdGFrZXMgY2FyZQorCQkgKiBvZiBzeW5jaGluZy4KKwkJICovCisJCXJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjX3N0YXR1cyk7CisKKwkJaWYgKHJtLT5tX3JkbWFfb3AtPnJfd3JpdGUpCisJCQlyZHNfc3RhdHNfYWRkKHNfc2VuZF9yZG1hX2J5dGVzLCBybS0+bV9yZG1hX29wLT5yX2J5dGVzKTsKKwkJZWxzZQorCQkJcmRzX3N0YXRzX2FkZChzX3JlY3ZfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJfQorCisJLyogSWYgYW55b25lIHdhaXRlZCBmb3IgdGhpcyBtZXNzYWdlIHRvIGdldCBmbHVzaGVkIG91dCwgd2FrZQorCSAqIHRoZW0gdXAgbm93ICovCisJcmRzX21lc3NhZ2VfdW5tYXBwZWQocm0pOworCisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlzZW5kLT5zX3JtID0gTlVMTDsKK30KKwordm9pZCByZHNfaWJfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJc2VuZC0+c19ybSA9IE5VTEw7CisJCXNlbmQtPnNfb3AgPSBOVUxMOworCisJCXNlbmQtPnNfd3Iud3JfaWQgPSBpOworCQlzZW5kLT5zX3dyLnNnX2xpc3QgPSBzZW5kLT5zX3NnZTsKKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3dyLmV4LmltbV9kYXRhID0gMDsKKworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisJfQorfQorCit2b2lkIHJkc19pYl9zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHNlbmQgPSBpYy0+aV9zZW5kczsgaSA8IGljLT5pX3NlbmRfcmluZy53X25yOyBpKyssIHNlbmQrKykgeworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gMHhkZWFkKQorCQkJY29udGludWU7CisJCWlmIChzZW5kLT5zX3JtKQorCQkJcmRzX2liX3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIElCX1dDX1dSX0ZMVVNIX0VSUik7CisJCWlmIChzZW5kLT5zX29wKQorCQkJcmRzX2liX3NlbmRfdW5tYXBfcmRtYShpYywgc2VuZC0+c19vcCk7CisJfQorfQorCisvKgorICogVGhlIF9vbGRlc3QvX2ZyZWUgcmluZyBvcGVyYXRpb25zIGhlcmUgcmFjZSBjbGVhbmx5IHdpdGggdGhlIGFsbG9jL3VuYWxsb2MKKyAqIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGluIHRoZSBzZW5kIHBhdGguICBBcyB0aGUgc2VuZGVyIGFsbG9jcyBhbmQgcG90ZW50aWFsbHkKKyAqIHVuYWxsb2NzIHRoZSBuZXh0IGZyZWUgZW50cnkgaW4gdGhlIHJpbmcgaXQgZG9lc24ndCBhbHRlciB3aGljaCBpcworICogdGhlIG5leHQgdG8gYmUgZnJlZWQsIHdoaWNoIGlzIHdoYXQgdGhpcyBpcyBjb25jZXJuZWQgd2l0aC4KKyAqLwordm9pZCByZHNfaWJfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZDsKKwl1MzIgY29tcGxldGVkOworCXUzMiBvbGRlc3Q7CisJdTMyIGkgPSAwOworCWludCByZXQ7CisKKwlyZHNkZWJ1ZygiY3EgJXAgY29ubiAlcFxuIiwgY3EsIGNvbm4pOworCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcV9jYWxsKTsKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpCisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcV9ldmVudCk7CisKKwkJaWYgKHdjLndyX2lkID09IFJEU19JQl9BQ0tfV1JfSUQpIHsKKwkJCWlmIChpYy0+aV9hY2tfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3N0YWxsZWQpOworCQkJcmRzX2liX2Fja19zZW5kX2NvbXBsZXRlKGljKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2xkZXN0ID0gcmRzX2liX3Jpbmdfb2xkZXN0KCZpYy0+aV9zZW5kX3JpbmcpOworCisJCWNvbXBsZXRlZCA9IHJkc19pYl9yaW5nX2NvbXBsZXRlZCgmaWMtPmlfc2VuZF9yaW5nLCB3Yy53cl9pZCwgb2xkZXN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29tcGxldGVkOyBpKyspIHsKKwkJCXNlbmQgPSAmaWMtPmlfc2VuZHNbb2xkZXN0XTsKKworCQkJLyogSW4gdGhlIGVycm9yIGNhc2UsIHdjLm9wY29kZSBzb21ldGltZXMgY29udGFpbnMgZ2FyYmFnZSAqLworCQkJc3dpdGNoIChzZW5kLT5zX3dyLm9wY29kZSkgeworCQkJY2FzZSBJQl9XUl9TRU5EOgorCQkJCWlmIChzZW5kLT5zX3JtKQorCQkJCQlyZHNfaWJfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgd2Muc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQkJCS8qIE5vdGhpbmcgdG8gYmUgZG9uZSAtIHRoZSBTRyBsaXN0IHdpbGwgYmUgdW5tYXBwZWQKKwkJCQkgKiB3aGVuIHRoZSBTRU5EIGNvbXBsZXRlcy4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCQkiUkRTL0lCOiAlczogdW5leHBlY3RlZCBvcGNvZGUgMHgleCBpbiBXUiFcbiIsCisJCQkJCQlfX2Z1bmNfXywgc2VuZC0+c193ci5vcGNvZGUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IDB4ZGVhZDsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCQlpZiAoc2VuZC0+c19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc3RhbGxlZCk7CisKKwkJCS8qIElmIGEgUkRNQSBvcGVyYXRpb24gcHJvZHVjZWQgYW4gZXJyb3IsIHNpZ25hbCB0aGlzIHJpZ2h0CisJCQkgKiBhd2F5LiBJZiB3ZSBkb24ndCwgdGhlIHN1YnNlcXVlbnQgU0VORCB0aGF0IGdvZXMgd2l0aCB0aGlzCisJCQkgKiBSRE1BIHdpbGwgYmUgY2FuY2VsZWQgd2l0aCBFUlJfV0ZMVVNILCBhbmQgdGhlIGFwcGxpY2F0aW9uCisJCQkgKiBuZXZlciBsZWFybiB0aGF0IHRoZSBSRE1BIGZhaWxlZC4gKi8KKwkJCWlmICh1bmxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfUkVNX0FDQ0VTU19FUlIgJiYgc2VuZC0+c19vcCkpIHsKKwkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJCQkJcm0gPSByZHNfc2VuZF9nZXRfbWVzc2FnZShjb25uLCBzZW5kLT5zX29wKTsKKwkJCQlpZiAocm0pCisJCQkJCXJkc19pYl9zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjLnN0YXR1cyk7CisJCQl9CisKKwkJCW9sZGVzdCA9IChvbGRlc3QgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCQl9CisKKwkJcmRzX2liX3JpbmdfZnJlZSgmaWMtPmlfc2VuZF9yaW5nLCBjb21wbGV0ZWQpOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpCisJCSB8fCB0ZXN0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTICYmIHJkc19jb25uX3VwKGNvbm4pKSB7CisJCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLAorCQkJCSJzZW5kIGNvbXBsZXRpb24gb24gJXBJNCAiCisJCQkJImhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kIHJlY29ubmVjdGluZ1xuIiwKKwkJCQkmY29ubi0+Y19mYWRkciwgd2Muc3RhdHVzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgY3JlZGl0cyB3aGVuIHNlbmRpbmcKKyAqIG1lc3NhZ2VzLgorICoKKyAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CisgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KKyAqCisgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKKyAqCXBvc3RlZCB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4gVGhpcyB2YWx1ZSBpcyB0cmFuc2ZlcnJlZAorICoJdG8gdGhlIHBlZXIgYXMgYSAiY3JlZGl0IHVwZGF0ZSIgaW4gYSBSRFMgaGVhZGVyIGZpZWxkLgorICoJRXZlcnkgdGltZSB3ZSB0cmFuc21pdCBjcmVkaXRzIHRvIHRoZSBwZWVyLCB3ZSBzdWJ0cmFjdAorICoJdGhlIGFtb3VudCBvZiB0cmFuc2ZlcnJlZCBjcmVkaXRzIGZyb20gdGhpcyBjb3VudGVyLgorICoKKyAqIEl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGF2b2lkIHNpdHVhdGlvbnMgd2hlcmUgYm90aCBzaWRlcyBoYXZlCisgKiBleGhhdXN0ZWQgdGhlaXIgc2VuZCBjcmVkaXRzLCBhbmQgYXJlIHVuYWJsZSB0byBzZW5kIG5ldyBjcmVkaXRzCisgKiB0byB0aGUgcGVlci4gV2UgYWNoaWV2ZSB0aGlzIGJ5IHJlcXVpcmluZyB0aGF0IHdlIHNlbmQgYXQgbGVhc3QKKyAqIG9uZSBjcmVkaXQgdXBkYXRlIHRvIHRoZSBwZWVyIGJlZm9yZSBleGhhdXN0aW5nIG91ciBjcmVkaXRzLgorICogV2hlbiBuZXcgY3JlZGl0cyBhcnJpdmUsIHdlIHN1YnRyYWN0IG9uZSBjcmVkaXQgdGhhdCBpcyB3aXRoaGVsZAorICogdW50aWwgd2UndmUgcG9zdGVkIG5ldyBidWZmZXJzIGFuZCBhcmUgcmVhZHkgdG8gdHJhbnNtaXQgdGhlc2UKKyAqIGNyZWRpdHMgKHNlZSByZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyBiZWxvdykuCisgKgorICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0CisgKiBncmFicyBjX3NlbmRfbG9jayB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLgorICogSG93ZXZlciwgdGhlIEFDSyBzZW5kaW5nIGNvZGUgaXMgaW5kZXBlbmRlbnQgYW5kIGNhbiByYWNlIHdpdGgKKyAqIG1lc3NhZ2UgU0VORHMuCisgKgorICogSW4gdGhlIHNlbmQgcGF0aCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvdW50ZXJzIGZvciBzZW5kIGNyZWRpdHMKKyAqIGFuZCB0aGUgY291bnRlciBvZiBwb3N0ZWQgYnVmZmVycyBhdG9taWNhbGx5IC0gd2hlbiB3ZSB1c2UgdGhlCisgKiBsYXN0IGF2YWlsYWJsZSBjcmVkaXQsIHdlIGNhbm5vdCBhbGxvdyBhbm90aGVyIHRocmVhZCB0byByYWNlIHVzCisgKiBhbmQgZ3JhYiB0aGUgcG9zdGVkIGNyZWRpdHMgY291bnRlci4gIEhlbmNlLCB3ZSBoYXZlIHRvIHVzZSBhCisgKiBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcmVkaXQgY291bnRlciwgb3IgdXNlIGF0b21pY3MuCisgKgorICogU3BpbmxvY2tzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGFyZSBiYWQsCisgKiBiZWNhdXNlIHRoZXkgY3JlYXRlIHVubmVjZXNzYXJ5IGRlbGF5cy4gQW4gZWFybHkgaW1wbGVtZW50YXRpb24KKyAqIHVzaW5nIGEgc3BpbmxvY2sgc2hvd2VkIGEgNSUgZGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBhdCBzb21lCisgKiBsb2Fkcy4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBzcGlubG9ja3MgY29tcGxldGVseSwgcHV0dGluZyBib3RoCisgKiBjb3VudGVycyBpbnRvIGEgc2luZ2xlIGF0b21pYywgYW5kIHVwZGF0aW5nIHRoYXQgYXRvbWljIHVzaW5nCisgKiBhdG9taWNfYWRkIChpbiB0aGUgcmVjZWl2ZSBwYXRoLCB3aGVuIHJlY2VpdmluZyBmcmVzaCBjcmVkaXRzKSwKKyAqIGFuZCB1c2luZyBhdG9taWNfY21weGNoZyB3aGVuIHVwZGF0aW5nIHRoZSB0d28gY291bnRlcnMuCisgKi8KK2ludCByZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJCSAgICAgdTMyIHdhbnRlZCwgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKQoreworCXVuc2lnbmVkIGludCBhdmFpbCwgcG9zdGVkLCBnb3QgPSAwLCBhZHZlcnRpc2U7CisJbG9uZyBvbGR2YWwsIG5ld3ZhbDsKKworCSphZHZfY3JlZGl0cyA9IDA7CisJaWYgKCFpYy0+aV9mbG93Y3RsKQorCQlyZXR1cm4gd2FudGVkOworCit0cnlfYWdhaW46CisJYWR2ZXJ0aXNlID0gMDsKKwlvbGR2YWwgPSBuZXd2YWwgPSBhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cyk7CisJcG9zdGVkID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhvbGR2YWwpOworCWF2YWlsID0gSUJfR0VUX1NFTkRfQ1JFRElUUyhvbGR2YWwpOworCisJcmRzZGVidWcoInJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cygldSk6IGNyZWRpdHM9JXUgcG9zdGVkPSV1XG4iLAorCQkJd2FudGVkLCBhdmFpbCwgcG9zdGVkKTsKKworCS8qIFRoZSBsYXN0IGNyZWRpdCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBhIGNyZWRpdCB1cGRhdGUuICovCisJaWYgKGF2YWlsICYmICFwb3N0ZWQpCisJCWF2YWlsLS07CisKKwlpZiAoYXZhaWwgPCB3YW50ZWQpIHsKKwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtPmlfY21faWQtPmNvbnRleHQ7CisKKwkJLyogT29wcywgdGhlcmUgYXJlbid0IHRoYXQgbWFueSBjcmVkaXRzIGxlZnQhICovCisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlnb3QgPSBhdmFpbDsKKwl9IGVsc2UgeworCQkvKiBTb21ldGltZXMgeW91IGdldCB3aGF0IHlvdSB3YW50LCBsYWxhbGEuICovCisJCWdvdCA9IHdhbnRlZDsKKwl9CisJbmV3dmFsIC09IElCX1NFVF9TRU5EX0NSRURJVFMoZ290KTsKKworCS8qCisJICogSWYgbmVlZF9wb3N0ZWQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGNhbGxlciB3YW50cworCSAqIHRoZSBwb3N0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBzZW5kIGNyZWRpdHMgYXJlCisJICogYXZhaWxhYmxlLgorCSAqLworCWlmIChwb3N0ZWQgJiYgKGdvdCB8fCBuZWVkX3Bvc3RlZCkpIHsKKwkJYWR2ZXJ0aXNlID0gbWluX3QodW5zaWduZWQgaW50LCBwb3N0ZWQsIFJEU19NQVhfQURWX0NSRURJVCk7CisJCW5ld3ZhbCAtPSBJQl9TRVRfUE9TVF9DUkVESVRTKGFkdmVydGlzZSk7CisJfQorCisJLyogRmluYWxseSBiaWxsIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoYXRvbWljX2NtcHhjaGcoJmljLT5pX2NyZWRpdHMsIG9sZHZhbCwgbmV3dmFsKSAhPSBvbGR2YWwpCisJCWdvdG8gdHJ5X2FnYWluOworCisJKmFkdl9jcmVkaXRzID0gYWR2ZXJ0aXNlOworCXJldHVybiBnb3Q7Cit9CisKK3ZvaWQgcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChjcmVkaXRzID09IDApCisJCXJldHVybjsKKworCXJkc2RlYnVnKCJyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cygldSk6IGN1cnJlbnQ9JXUlc1xuIiwKKwkJCWNyZWRpdHMsCisJCQlJQl9HRVRfU0VORF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSksCisJCQl0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykgPyAiLCBsbF9zZW5kX2Z1bGwiIDogIiIpOworCisJYXRvbWljX2FkZChJQl9TRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwlXQVJOX09OKElCX0dFVF9TRU5EX0NSRURJVFMoY3JlZGl0cykgPj0gMTYzODQpOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2NyZWRpdF91cGRhdGVzKTsKK30KKwordm9pZCByZHNfaWJfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHBvc3RlZCA9PSAwKQorCQlyZXR1cm47CisKKwlhdG9taWNfYWRkKElCX1NFVF9QT1NUX0NSRURJVFMocG9zdGVkKSwgJmljLT5pX2NyZWRpdHMpOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gc2VuZCBhbiB1cGRhdGUgdG8gdGhlIHBlZXIgbm93LgorCSAqIElmIHdlIHdvdWxkIHNlbmQgYSBjcmVkaXQgdXBkYXRlIGZvciBldmVyeSBzaW5nbGUgYnVmZmVyIHdlCisJICogcG9zdCwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gQUNLIHN0b3JtIChBQ0sgYXJyaXZlcywKKwkgKiBjb25zdW1lcyBidWZmZXIsIHdlIHJlZmlsbCB0aGUgcmluZywgc2VuZCBBQ0sgdG8gcmVtb3RlCisJICogYWR2ZXJ0aXNpbmcgdGhlIG5ld2x5IHBvc3RlZCBidWZmZXIuLi4gYWQgaW5mKQorCSAqCisJICogUGVyZm9ybWFuY2UgcHJldHR5IG11Y2ggZGVwZW5kcyBvbiBob3cgb2Z0ZW4gd2Ugc2VuZAorCSAqIGNyZWRpdCB1cGRhdGVzIC0gdG9vIGZyZXF1ZW50IHVwZGF0ZXMgbWVhbiBsb3RzIG9mIEFDS3MuCisJICogVG9vIGluZnJlcXVlbnQgdXBkYXRlcywgYW5kIHRoZSBwZWVyIHdpbGwgcnVuIG91dCBvZgorCSAqIGNyZWRpdHMgYW5kIGhhcyB0byB0aHJvdHRsZS4KKwkgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIDE2IHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgorCSAqLworCWlmIChJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSkgPj0gMTYpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmRzX2liX3htaXRfcG9wdWxhdGVfd3Ioc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywKKwkJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQsIHVuc2lnbmVkIGludCBwb3MsCisJCXVuc2lnbmVkIGxvbmcgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQlpbnQgc2VuZF9mbGFncykKK3sKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwlXQVJOX09OKHBvcyAhPSBzZW5kIC0gaWMtPmlfc2VuZHMpOworCisJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gc2VuZF9mbGFnczsKKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJc2VuZC0+c193ci5udW1fc2dlID0gMjsKKwlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwlzZW5kLT5zX29wID0gTlVMTDsKKworCWlmIChsZW5ndGggIT0gMCkgeworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gYnVmZmVyOworCQlzZ2UtPmxlbmd0aCA9IGxlbmd0aDsKKwkJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJc2dlID0gcmRzX2liX2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwl9IGVsc2UgeworCQkvKiBXZSdyZSBzZW5kaW5nIGEgcGFja2V0IHdpdGggbm8gcGF5bG9hZC4gVGhlcmUgaXMgb25seQorCQkgKiBvbmUgU0dFICovCisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNnZSA9ICZzZW5kLT5zX3NnZVswXTsKKwl9CisKKwlzZ2UtPmFkZHIgPSBpYy0+aV9zZW5kX2hkcnNfZG1hICsgKHBvcyAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKK30KKworLyoKKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBtZXNzYWdlLiAgVGhlIGZpcnN0IHRpbWUKKyAqIHdlIHNlZSBhIG1lc3NhZ2Ugd2UgbWFwIGl0cyBzY2F0dGVybGlzdCBpbnRvIHRoZSBJQiBkZXZpY2Ugc28gdGhhdAorICogd2UgY2FuIHByb3ZpZGUgdGhhdCBtYXBwZWQgYWRkcmVzcyB0byB0aGUgSUIgc2NhdHRlciBnYXRoZXIgZW50cmllcworICogaW4gdGhlIElCIHdvcmsgcmVxdWVzdHMuICBXZSB0cmFuc2xhdGUgdGhlIHNjYXR0ZXJsaXN0IGludG8gYSBzZXJpZXMKKyAqIG9mIHdvcmsgcmVxdWVzdHMgdGhhdCBmcmFnbWVudCB0aGUgbWVzc2FnZS4gIFRoZXNlIHdvcmsgcmVxdWVzdHMgY29tcGxldGUKKyAqIGluIG9yZGVyIHNvIHdlIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBtZXNzYWdlIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIG9uY2Ugd2Ugc2VuZCB0aGUgZmluYWwgZnJhZ21lbnQuCisgKgorICogVGhlIFJEUyBjb3JlIHVzZXMgdGhlIGNfc2VuZF9sb2NrIHRvIG9ubHkgZW50ZXIgdGhpcyBmdW5jdGlvbiBvbmNlCisgKiBwZXIgY29ubmVjdGlvbi4gIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB0eCByaW5nIGFsbG9jL3VuYWxsb2MgcGFpcnMKKyAqIGRvbid0IGdldCBvdXQgb2Ygc3luYyBhbmQgY29uZnVzZSB0aGUgcmluZy4KKyAqLworaW50IHJkc19pYl94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdTMyIHBvczsKKwl1MzIgaTsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgY3JlZGl0X2FsbG9jOworCXUzMiBwb3N0ZWQ7CisJdTMyIGFkdl9jcmVkaXRzID0gMDsKKwlpbnQgc2VuZF9mbGFncyA9IDA7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgZmxvd19jb250cm9sbGVkID0gMDsKKworCUJVR19PTihvZmYgJSBSRFNfRlJBR19TSVpFKTsKKwlCVUdfT04oaGRyX29mZiAhPSAwICYmIGhkcl9vZmYgIT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkvKiBGSVhNRSB3ZSBtYXkgb3ZlcmFsbG9jYXRlIGhlcmUgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKQorCQlpID0gMTsKKwllbHNlCisJCWkgPSBjZWlsKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbiksIFJEU19GUkFHX1NJWkUpOworCisJd29ya19hbGxvYyA9IHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVkaXRfYWxsb2MgPSB3b3JrX2FsbG9jOworCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCWNyZWRpdF9hbGxvYyA9IHJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgd29ya19hbGxvYywgJnBvc3RlZCwgMCk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJaWYgKGNyZWRpdF9hbGxvYyA8IHdvcmtfYWxsb2MpIHsKKwkJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGNyZWRpdF9hbGxvYyk7CisJCQl3b3JrX2FsbG9jID0gY3JlZGl0X2FsbG9jOworCQkJZmxvd19jb250cm9sbGVkKys7CisJCX0KKwkJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF90aHJvdHRsZSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKGljLT5pX3JtID09IE5VTEwpIHsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyZHNfaWJfeG1pdCBwcmVwIG1zZyBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCksCisJCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSk7CisJCSAgICovCisJCWlmIChybS0+bV9uZW50cykgeworCQkJcm0tPm1fY291bnQgPSBpYl9kbWFfbWFwX3NnKGRldiwKKwkJCQkJIHJtLT5tX3NnLCBybS0+bV9uZW50cywgRE1BX1RPX0RFVklDRSk7CisJCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBybSAlcDogJWRcbiIsIGljLCBybSwgcm0tPm1fY291bnQpOworCQkJaWYgKHJtLT5tX2NvdW50ID09IDApIHsKKwkJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlybS0+bV9jb3VudCA9IDA7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlpYy0+aV9ybSA9IHJtOworCisJCS8qIEZpbmFsaXplIHRoZSBoZWFkZXIgKi8KKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfQUNLX1JFUVVJUkVEOworCQlpZiAodGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfUkVUUkFOU01JVFRFRDsKKworCQkvKiBJZiBpdCBoYXMgYSBSRE1BIG9wLCB0ZWxsIHRoZSBwZWVyIHdlIGRpZCBpdC4gVGhpcyBpcworCQkgKiB1c2VkIGJ5IHRoZSBwZWVyIHRvIHJlbGVhc2UgdXNlLW9uY2UgUkRNQSBNUnMuICovCisJCWlmIChybS0+bV9yZG1hX29wKSB7CisJCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSBleHRfaGRyOworCisJCQlleHRfaGRyLmhfcmRtYV9ya2V5ID0gY3B1X3RvX2JlMzIocm0tPm1fcmRtYV9vcC0+cl9rZXkpOworCQkJcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlSRFNfRVhUSERSX1JETUEsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworCQl9CisJCWlmIChybS0+bV9yZG1hX2Nvb2tpZSkgeworCQkJcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocm0tPm1fcmRtYV9jb29raWUpKTsKKwkJfQorCisJCS8qIE5vdGUgLSByZHNfaWJfcGlnZ3liX2FjayBjbGVhcnMgdGhlIEFDS19SRVFVSVJFRCBiaXQsIHNvCisJCSAqIHdlIHNob3VsZCBub3QgZG8gdGhpcyB1bmxlc3Mgd2UgaGF2ZSBhIGNoYW5jZSBvZiBhdCBsZWFzdAorCQkgKiBzdGlja2luZyB0aGUgaGVhZGVyIGludG8gdGhlIHNlbmQgcmluZy4gV2hpY2ggaXMgd2h5IHdlCisJCSAqIHNob3VsZCBjYWxsIHJkc19pYl9yaW5nX2FsbG9jIGZpcnN0LiAqLworCQlybS0+bV9pbmMuaV9oZHIuaF9hY2sgPSBjcHVfdG9fYmU2NChyZHNfaWJfcGlnZ3liX2FjayhpYykpOworCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKCZybS0+bV9pbmMuaV9oZHIpOworCisJCS8qCisJCSAqIFVwZGF0ZSBhZHZfY3JlZGl0cyBzaW5jZSB3ZSByZXNldCB0aGUgQUNLX1JFUVVJUkVEIGJpdC4KKwkJICovCisJCXJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgMCwgJnBvc3RlZCwgMSk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJQlVHX09OKGFkdl9jcmVkaXRzID4gMjU1KTsKKwl9IGVsc2UgaWYgKGljLT5pX3JtICE9IHJtKQorCQlCVUcoKTsKKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZybS0+bV9zZ1tzZ107CisJc2VudCA9IDA7CisJaSA9IDA7CisKKwkvKiBTb21ldGltZXMgeW91IHdhbnQgdG8gcHV0IGEgZmVuY2UgYmV0d2VlbiBhbiBSRE1BCisJICogUkVBRCBhbmQgdGhlIGZvbGxvd2luZyBTRU5ELgorCSAqIFdlIGNvdWxkIGVpdGhlciBkbyB0aGlzIGFsbCB0aGUgdGltZQorCSAqIG9yIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiBSaWdodCBub3csIHdlIGxldAorCSAqIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2UuCisJICovCisJaWYgKHJtLT5tX3JkbWFfb3AgJiYgcm0tPm1fcmRtYV9vcC0+cl9mZW5jZSkKKwkJc2VuZF9mbGFncyA9IElCX1NFTkRfRkVOQ0U7CisKKwkvKgorCSAqIFdlIGNvdWxkIGJlIGNvcHlpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSB1bnVzZWQgdGFpbCBvZiB0aGUgcGFnZS4KKwkgKiBUaGF0IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhvc2UgcGFnZXMgbWlnaHQKKwkgKiBiZSBtYXBwZWQgdXNlcnNwYWNlIHBhZ2VzIG9yIHBhZ2UgY2FjaGUgcGFnZXMuICBTbyBpbnN0ZWFkIHdlIGFsd2F5cworCSAqIHVzZSBhIHNlY29uZCBzZ2UgYW5kIG91ciBsb25nLWxpdmVkIHJpbmcgb2YgbWFwcGVkIGhlYWRlcnMuICBXZSBzZW5kCisJICogdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YSBzbyB0aGF0IHRoZSBkYXRhIHBheWxvYWQgY2FuIGJlIGFsaWduZWQgb24KKwkgKiB0aGUgcmVjZWl2ZXIuCisJICovCisKKwkvKiBoYW5kbGUgYSAwLWxlbiBtZXNzYWdlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkgeworCQlyZHNfaWJfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLCAwLCAwLCBzZW5kX2ZsYWdzKTsKKwkJZ290byBhZGRfaGVhZGVyOworCX0KKworCS8qIGlmIHRoZXJlJ3MgZGF0YSByZWZlcmVuY2UgaXQgd2l0aCBhIGNoYWluIG9mIHdvcmsgcmVxcyAqLworCWZvciAoOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZybS0+bV9zZ1tybS0+bV9jb3VudF07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbGVuOworCisJCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKworCQlsZW4gPSBtaW4oUkRTX0ZSQUdfU0laRSwgaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpIC0gb2ZmKTsKKwkJcmRzX2liX3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsIHNjYXQpICsgb2ZmLCBsZW4sCisJCQkJc2VuZF9mbGFncyk7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lCisJCSAqIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyAtPSBsZW47CisJCWlmIChpYy0+aV91bnNpZ25hbGVkX2J5dGVzIDw9IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQkvKgorCQkgKiBBbHdheXMgc2lnbmFsIHRoZSBsYXN0IG9uZSBpZiB3ZSdyZSBzdG9wcGluZyBkdWUgdG8gZmxvdyBjb250cm9sLgorCQkgKi8KKwkJaWYgKGZsb3dfY29udHJvbGxlZCAmJiBpID09ICh3b3JrX2FsbG9jLTEpKQorCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkgJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlzZW50ICs9IGxlbjsKKwkJb2ZmICs9IGxlbjsKKwkJaWYgKG9mZiA9PSBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkpIHsKKwkJCXNjYXQrKzsKKwkJCW9mZiA9IDA7CisJCX0KKworYWRkX2hlYWRlcjoKKwkJLyogVGFjayBvbiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhLiBUaGUgaGVhZGVyIFNHRSBzaG91bGQgYWxyZWFkeQorCQkgKiBoYXZlIGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoZSByaWdodCBoZWFkZXIgYnVmZmVyLiAqLworCQltZW1jcHkoJmljLT5pX3NlbmRfaGRyc1twb3NdLCAmcm0tPm1faW5jLmlfaGRyLCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCQlpZiAoMCkgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzZW5kIFdSIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KGhkci0+aF9kcG9ydCksCisJCQkJaGRyLT5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KGhkci0+aF9sZW4pKTsKKwkJfQorCQlpZiAoYWR2X2NyZWRpdHMpIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCS8qIGFkZCBjcmVkaXQgYW5kIHJlZG8gdGhlIGhlYWRlciBjaGVja3N1bSAqLworCQkJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCQkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCQkJYWR2X2NyZWRpdHMgPSAwOworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X2NyZWRpdF91cGRhdGVzKTsKKwkJfQorCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisJCXByZXYgPSBzZW5kOworCisJCXBvcyA9IChwb3MgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCX0KKworCS8qIEFjY291bnQgdGhlIFJEUyBoZWFkZXIgaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZSBzZW50LCBidXQganVzdCBvbmNlLgorCSAqIFRoZSBjYWxsZXIgaGFzIG5vIGNvbmNlcHQgb2YgZnJhZ21lbnRhdGlvbi4gKi8KKwlpZiAoaGRyX29mZiA9PSAwKQorCQlzZW50ICs9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XSkgeworCQlwcmV2LT5zX3JtID0gaWMtPmlfcm07CisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBpIDwgY3JlZGl0X2FsbG9jKQorCQlyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRfYWxsb2MgLSBpKTsKKworCS8qIFhYWCBuZWVkIHRvIHdvcnJ5IGFib3V0IGZhaWxlZF93ciBhbmQgcGFydGlhbCBzZW5kcy4gKi8KKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJaWYgKHByZXYtPnNfcm0pIHsKKwkJCWljLT5pX3JtID0gcHJldi0+c19ybTsKKwkJCXByZXYtPnNfcm0gPSBOVUxMOworCQl9CisJCS8qIEZpbmVzc2UgdGhpcyBsYXRlciAqLworCQlCVUcoKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gc2VudDsKK291dDoKKwlCVUdfT04oYWR2X2NyZWRpdHMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfaWJfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdTY0IHJlbW90ZV9hZGRyID0gb3AtPnJfcmVtb3RlX2FkZHI7CisJdTMyIHBvczsKKwl1MzIgd29ya19hbGxvYzsKKwl1MzIgaTsKKwl1MzIgajsKKwlpbnQgc2VudDsKKwlpbnQgcmV0OworCWludCBudW1fc2dlOworCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKworCS8qIG1hcCB0aGUgbWVzc2FnZSB0aGUgZmlyc3QgdGltZSB3ZSBzZWUgaXQgKi8KKwlpZiAoIW9wLT5yX21hcHBlZCkgeworCQlvcC0+cl9jb3VudCA9IGliX2RtYV9tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkJb3AtPnJfc2csIG9wLT5yX25lbnRzLCAob3AtPnJfd3JpdGUpID8KKwkJCQkJRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCXJkc2RlYnVnKCJpYyAlcCBtYXBwaW5nIG9wICVwOiAlZFxuIiwgaWMsIG9wLCBvcC0+cl9jb3VudCk7CisJCWlmIChvcC0+cl9jb3VudCA9PSAwKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9wLT5yX21hcHBlZCA9IDE7CisJfQorCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGtub3dpbmcgaG93IHRvIHJldHVybiBhIHBhcnRpYWwgcmRtYSByZWFkL3dyaXRlIHdlIGluc2lzdCB0aGF0IHRoZXJlCisJICogYmUgZW5vdWdoIHdvcmsgcmVxdWVzdHMgdG8gc2VuZCB0aGUgZW50aXJlIG1lc3NhZ2UuCisJICovCisJaSA9IGNlaWwob3AtPnJfY291bnQsIHJkc19pYmRldi0+bWF4X3NnZSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2liX3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgIT0gaSkgeworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWZpcnN0ID0gc2VuZDsKKwlwcmV2ID0gTlVMTDsKKwlzY2F0ID0gJm9wLT5yX3NnWzBdOworCXNlbnQgPSAwOworCW51bV9zZ2UgPSBvcC0+cl9jb3VudDsKKworCWZvciAoaSA9IDA7IGkgPCB3b3JrX2FsbG9jICYmIHNjYXQgIT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XTsgaSsrKSB7CisJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IDA7CisJCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQl9CisKKwkJc2VuZC0+c193ci5vcGNvZGUgPSBvcC0+cl93cml0ZSA/IElCX1dSX1JETUFfV1JJVEUgOiBJQl9XUl9SRE1BX1JFQUQ7CisJCXNlbmQtPnNfd3Iud3IucmRtYS5yZW1vdGVfYWRkciA9IHJlbW90ZV9hZGRyOworCQlzZW5kLT5zX3dyLndyLnJkbWEucmtleSA9IG9wLT5yX2tleTsKKwkJc2VuZC0+c19vcCA9IG9wOworCisJCWlmIChudW1fc2dlID4gcmRzX2liZGV2LT5tYXhfc2dlKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJCQludW1fc2dlIC09IHJkc19pYmRldi0+bWF4X3NnZTsKKwkJfSBlbHNlIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IG51bV9zZ2U7CisJCX0KKworCQlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisKKwkJZm9yIChqID0gMDsgaiA8IHNlbmQtPnNfd3IubnVtX3NnZSAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGorKykgeworCQkJbGVuID0gaWJfc2dfZG1hX2xlbihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCXNlbmQtPnNfc2dlW2pdLmFkZHIgPQorCQkJCSBpYl9zZ19kbWFfYWRkcmVzcyhpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCXNlbmQtPnNfc2dlW2pdLmxlbmd0aCA9IGxlbjsKKwkJCXNlbmQtPnNfc2dlW2pdLmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCQkJc2VudCArPSBsZW47CisJCQlyZHNkZWJ1ZygiaWMgJXAgc2VudCAlZCByZW1vdGVfYWRkciAlbGx1XG4iLCBpYywgc2VudCwgcmVtb3RlX2FkZHIpOworCisJCQlyZW1vdGVfYWRkciArPSBsZW47CisJCQlzY2F0Kys7CisJCX0KKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkmc2VuZC0+c193ciwgc2VuZC0+c193ci5udW1fc2dlLCBzZW5kLT5zX3dyLm5leHQpOworCisJCXByZXYgPSBzZW5kOworCQlpZiAoKytzZW5kID09ICZpYy0+aV9zZW5kc1tpYy0+aV9zZW5kX3Jpbmcud19ucl0pCisJCQlzZW5kID0gaWMtPmlfc2VuZHM7CisJfQorCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF0pCisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKworCWZhaWxlZF93ciA9ICZmaXJzdC0+c193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmZmlyc3QtPnNfd3IsICZmYWlsZWRfd3IpOworCXJkc2RlYnVnKCJpYyAlcCBmaXJzdCAlcCAod3IgJXApIHJldCAlZCB3ciAlcFxuIiwgaWMsCisJCSBmaXJzdCwgJmZpcnN0LT5zX3dyLCByZXQsIGZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiByZG1hIGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseShmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX3Bvc3Rfc2VuZCgpIHJjPSVkLCBidXQgZmFpbGVkX3dxZSB1cGRhdGVkIVxuIiwgcmV0KTsKKwkJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCX0KKworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBXZSBtYXkgaGF2ZSBhIHBlbmRpbmcgQUNLIG9yIHdpbmRvdyB1cGRhdGUgd2Ugd2VyZSB1bmFibGUKKwkgKiB0byBzZW5kIHByZXZpb3VzbHkgKGR1ZSB0byBmbG93IGNvbnRyb2wpLiBUcnkgYWdhaW4uICovCisJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc3RhdHMuYyBiL25ldC9yZHMvaWJfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmUzZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zdGF0cy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzLCByZHNfaWJfc3RhdHMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGNoYXIgKnJkc19pYl9zdGF0X25hbWVzW10gPSB7CisJImliX2Nvbm5lY3RfcmFjZWQiLAorCSJpYl9saXN0ZW5fY2xvc2VkX3N0YWxlIiwKKwkiaWJfdHhfY3FfY2FsbCIsCisJImliX3R4X2NxX2V2ZW50IiwKKwkiaWJfdHhfcmluZ19mdWxsIiwKKwkiaWJfdHhfdGhyb3R0bGUiLAorCSJpYl90eF9zZ19tYXBwaW5nX2ZhaWx1cmUiLAorCSJpYl90eF9zdGFsbGVkIiwKKwkiaWJfdHhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpYl9yeF9jcV9jYWxsIiwKKwkiaWJfcnhfY3FfZXZlbnQiLAorCSJpYl9yeF9yaW5nX2VtcHR5IiwKKwkiaWJfcnhfcmVmaWxsX2Zyb21fY3EiLAorCSJpYl9yeF9yZWZpbGxfZnJvbV90aHJlYWQiLAorCSJpYl9yeF9hbGxvY19saW1pdCIsCisJImliX3J4X2NyZWRpdF91cGRhdGVzIiwKKwkiaWJfYWNrX3NlbnQiLAorCSJpYl9hY2tfc2VuZF9mYWlsdXJlIiwKKwkiaWJfYWNrX3NlbmRfZGVsYXllZCIsCisJImliX2Fja19zZW5kX3BpZ2d5YmFja2VkIiwKKwkiaWJfYWNrX3JlY2VpdmVkIiwKKwkiaWJfcmRtYV9tcl9hbGxvYyIsCisJImliX3JkbWFfbXJfZnJlZSIsCisJImliX3JkbWFfbXJfdXNlZCIsCisJImliX3JkbWFfbXJfcG9vbF9mbHVzaCIsCisJImliX3JkbWFfbXJfcG9vbF93YWl0IiwKKwkiaWJfcmRtYV9tcl9wb29sX2RlcGxldGVkIiwKK307CisKK3Vuc2lnbmVkIGludCByZHNfaWJfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKQoreworCXN0cnVjdCByZHNfaWJfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcykpCisJCWdvdG8gb3V0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19pYl9zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX2liX3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcykpOworb3V0OgorCXJldHVybiBBUlJBWV9TSVpFKHJkc19pYl9zdGF0X25hbWVzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc3lzY3RsLmMgYi9uZXQvcmRzL2liX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NzgzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3N5c2N0bC5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJpYi5oIgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJkc19pYl9zeXNjdGxfaGRyOworCit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IgPSBSRFNfSUJfREVGQVVMVF9TRU5EX1dSOwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyID0gUkRTX0lCX0RFRkFVTFRfUkVDVl9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gKDEyOCAqIDEwMjQgKiAxMDI0KSAvIFJEU19GUkFHX1NJWkU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF93cl9taW4gPSAxOworLyogaGFyZHdhcmUgd2lsbCBmYWlsIENRIGNyZWF0aW9uIGxvbmcgYmVmb3JlIHRoaXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3dyX21heCA9ICh1MzIpfjA7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzID0gMTY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMgPSAoMTYgPDwgMjApOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGludCByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisKK2N0bF90YWJsZSByZHNfaWJfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9zZW5kX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dycywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ193cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfYnl0ZXMiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X2FsbG9jYXRpb24iLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImZsb3dfY29udHJvbCIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCwKKwkJLm1heGxlbgkJPSBzaXplb2YocmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF9wYXRoIHJkc19pYl9zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAicmRzIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyAucHJvY25hbWUgPSAiaWIiLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKK3ZvaWQgcmRzX2liX3N5c2N0bF9leGl0KHZvaWQpCit7CisJaWYgKHJkc19pYl9zeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyZHNfaWJfc3lzY3RsX2hkcik7Cit9CisKK2ludCBfX2luaXQgcmRzX2liX3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmRzX2liX3N5c2N0bF9oZHIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX2liX3N5c2N0bF9wYXRoLCByZHNfaWJfc3lzY3RsX3RhYmxlKTsKKwlpZiAocmRzX2liX3N5c2N0bF9oZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2luZm8uYyBiL25ldC9yZHMvaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODg1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2luZm8uYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgZ2V0c29ja29wdCgpIGNhbGwgd2hpY2ggY29waWVzIGEgc2V0IG9mIGZpeGVkCisgKiBzaXplZCBzdHJ1Y3RzIGludG8gYSB1c2VyLXNwZWNpZmllZCBidWZmZXIgYXMgYSBtZWFucyBvZiBwcm92aWRpbmcKKyAqIHJlYWQtb25seSBpbmZvcm1hdGlvbiBhYm91dCBSRFMuCisgKgorICogRm9yIGEgZ2l2ZW4gaW5mb3JtYXRpb24gc291cmNlIHRoZXJlIGFyZSBhIGdpdmVuIG51bWJlciBvZiBmaXhlZCBzaXplZAorICogc3RydWN0cyBhdCBhIGdpdmVuIHRpbWUuICBUaGUgc3RydWN0cyBhcmUgb25seSBjb3BpZWQgaWYgdGhlIHVzZXItc3BlY2lmaWVkCisgKiBidWZmZXIgaXMgYmlnIGVub3VnaC4gIFRoZSBkZXN0aW5hdGlvbiBwYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGJ1ZmZlcgorICogYXJlIHBpbm5lZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5LgorICoKKyAqIFRoaXMgZ2l2ZXMgdXMgdGhlIGZvbGxvd2luZyBiZW5lZml0czoKKyAqCisgKiAtIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiwgbm8gY29weSAicG9zaXRpb24iIGFjcm9zcyBtdWx0aXBsZSBjYWxscworICogLSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIGFuIGluZm8gc291cmNlCisgKiAtIGF0b21pYyBjb3B5IHdvcmtzIHdlbGwgd2l0aCB3aGF0ZXZlciBsb2NraW5nIGluZm8gc291cmNlIGhhcworICogLSBvbmUgcG9ydGFibGUgdG9vbCB0byBnZXQgcmRzIGluZm8gYWNyb3NzIGltcGxlbWVudGF0aW9ucworICogLSBsb25nLWxpdmVkIHRvb2wgY2FuIGdldCBpbmZvIHdpdGhvdXQgYWxsb2NhdGluZworICoKKyAqIGF0IHRoZSBmb2xsb3dpbmcgY29zdHM6CisgKgorICogLSBpbmZvIHNvdXJjZSBjb3B5IG11c3QgYmUgcGlubmVkLCBtYXkgYmUgImxhcmdlIgorICovCisKK3N0cnVjdCByZHNfaW5mb19pdGVyYXRvciB7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwl2b2lkICphZGRyOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfaW5mb19sb2NrKTsKK3N0YXRpYyByZHNfaW5mb19mdW5jIHJkc19pbmZvX2Z1bmNzW1JEU19JTkZPX0xBU1QgLSBSRFNfSU5GT19GSVJTVCArIDFdOworCit2b2lkIHJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKK3sKKwlpbnQgb2Zmc2V0ID0gb3B0bmFtZSAtIFJEU19JTkZPX0ZJUlNUOworCisJQlVHX09OKG9wdG5hbWUgPCBSRFNfSU5GT19GSVJTVCB8fCBvcHRuYW1lID4gUkRTX0lORk9fTEFTVCk7CisKKwlzcGluX2xvY2soJnJkc19pbmZvX2xvY2spOworCUJVR19PTihyZHNfaW5mb19mdW5jc1tvZmZzZXRdICE9IE5VTEwpOworCXJkc19pbmZvX2Z1bmNzW29mZnNldF0gPSBmdW5jOworCXNwaW5fdW5sb2NrKCZyZHNfaW5mb19sb2NrKTsKK30KKwordm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKK3sKKwlpbnQgb2Zmc2V0ID0gb3B0bmFtZSAtIFJEU19JTkZPX0ZJUlNUOworCisJQlVHX09OKG9wdG5hbWUgPCBSRFNfSU5GT19GSVJTVCB8fCBvcHRuYW1lID4gUkRTX0lORk9fTEFTVCk7CisKKwlzcGluX2xvY2soJnJkc19pbmZvX2xvY2spOworCUJVR19PTihyZHNfaW5mb19mdW5jc1tvZmZzZXRdICE9IGZ1bmMpOworCXJkc19pbmZvX2Z1bmNzW29mZnNldF0gPSBOVUxMOworCXNwaW5fdW5sb2NrKCZyZHNfaW5mb19sb2NrKTsKK30KKworLyoKKyAqIFR5cGljYWxseSB3ZSBob2xkIGFuIGF0b21pYyBrbWFwIGFjcm9zcyBtdWx0aXBsZSByZHNfaW5mb19jb3B5KCkgY2FsbHMKKyAqIGJlY2F1c2UgdGhlIGttYXAgaXMgc28gZXhwZW5zaXZlLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgYmxvY2tpbmcKKyAqIG9wZXJhdGlvbnMgd2hpbGUgaG9sZGluZyB0aGUgbWFwcGluZyBhbmQgYXMgdGhlIGl0ZXJhdG9yIGlzIHRvcm4gZG93bi4KKyAqLwordm9pZCByZHNfaW5mb19pdGVyX3VubWFwKHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlcikKK3sKKwlpZiAoaXRlci0+YWRkciAhPSBOVUxMKSB7CisJCWt1bm1hcF9hdG9taWMoaXRlci0+YWRkciwgS01fVVNFUjApOworCQlpdGVyLT5hZGRyID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBnZXRfdXNlcl9wYWdlcygpIGNhbGxlZCBmbHVzaF9kY2FjaGVfcGFnZSgpIG9uIHRoZSBwYWdlcyBmb3IgdXMuCisgKi8KK3ZvaWQgcmRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsIHZvaWQgKmRhdGEsCisJCSAgIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJdW5zaWduZWQgbG9uZyB0aGlzOworCisJd2hpbGUgKGJ5dGVzKSB7CisJCWlmIChpdGVyLT5hZGRyID09IE5VTEwpCisJCQlpdGVyLT5hZGRyID0ga21hcF9hdG9taWMoKml0ZXItPnBhZ2VzLCBLTV9VU0VSMCk7CisKKwkJdGhpcyA9IG1pbihieXRlcywgUEFHRV9TSVpFIC0gaXRlci0+b2Zmc2V0KTsKKworCQlyZHNkZWJ1ZygicGFnZSAlcCBhZGRyICVwIG9mZnNldCAlbHUgdGhpcyAlbHUgZGF0YSAlcCAiCisJCQkgICJieXRlcyAlbHVcbiIsICppdGVyLT5wYWdlcywgaXRlci0+YWRkciwKKwkJCSAgaXRlci0+b2Zmc2V0LCB0aGlzLCBkYXRhLCBieXRlcyk7CisKKwkJbWVtY3B5KGl0ZXItPmFkZHIgKyBpdGVyLT5vZmZzZXQsIGRhdGEsIHRoaXMpOworCisJCWRhdGEgKz0gdGhpczsKKwkJYnl0ZXMgLT0gdGhpczsKKwkJaXRlci0+b2Zmc2V0ICs9IHRoaXM7CisKKwkJaWYgKGl0ZXItPm9mZnNldCA9PSBQQUdFX1NJWkUpIHsKKwkJCWt1bm1hcF9hdG9taWMoaXRlci0+YWRkciwgS01fVVNFUjApOworCQkJaXRlci0+YWRkciA9IE5VTEw7CisJCQlpdGVyLT5vZmZzZXQgPSAwOworCQkJaXRlci0+cGFnZXMrKzsKKwkJfQorCX0KK30KKworLyoKKyAqIEBvcHR2YWwgcG9pbnRzIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIHRoYXQgdGhlIGluZm9ybWF0aW9uIHNuYXBzaG90CisgKiB3aWxsIGJlIGNvcGllZCBpbnRvLgorICoKKyAqIEBvcHRsZW4gb24gaW5wdXQgaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiB1c2Vyc3BhY2UuICBAb3B0bGVuCisgKiBvbiBvdXRwdXQgaXMgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3RlZCBzbmFwc2hvdCBpbiBieXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLWVycm5vIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSwgcGFydGljdWxhcmx5IC1FTk9TUEMKKyAqIGlmIHRoZSBnaXZlbiB1c2Vyc3BhY2UgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGZpdCB0aGUgc25hcHNob3QuCisgKiBPbiBzdWNjZXNzIGl0IHJldHVybnMgdGhlIHBvc2l0aXZlIG51bWJlciBvZiBieXRlcyBvZiBlYWNoIGFycmF5IGVsZW1lbnQKKyAqIGluIHRoZSBzbmFwc2hvdC4KKyAqLworaW50IHJkc19pbmZvX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQlpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yIGl0ZXI7CisJc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgbGVuczsKKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgaTsKKwlyZHNfaW5mb19mdW5jIGZ1bmM7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgbGVuOworCWludCB0b3RhbDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hlY2sgZm9yIGFsbCBraW5kcyBvZiB3cmFwcGluZyBhbmQgdGhlIGxpa2UgKi8KKwlzdGFydCA9ICh1bnNpZ25lZCBsb25nKW9wdHZhbDsKKwlpZiAobGVuIDwgMCB8fCBsZW4gKyBQQUdFX1NJWkUgLSAxIDwgbGVuIHx8IHN0YXJ0ICsgbGVuIDwgc3RhcnQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogYSAwIGxlbiBjYWxsIGlzIGp1c3QgdHJ5aW5nIHRvIHByb2JlIGl0cyBsZW5ndGggKi8KKwlpZiAobGVuID09IDApCisJCWdvdG8gY2FsbF9mdW5jOworCisJbnJfcGFnZXMgPSAoUEFHRV9BTElHTihzdGFydCArIGxlbikgLSAoc3RhcnQgJiBQQUdFX01BU0spKQorCQkJPj4gUEFHRV9TSElGVDsKKworCXBhZ2VzID0ga21hbGxvYyhucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgc3RhcnQsIG5yX3BhZ2VzLCAxLCAwLAorCQkJICAgICBwYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlpZiAocmV0ICE9IG5yX3BhZ2VzKSB7CisJCWlmIChyZXQgPiAwKQorCQkJbnJfcGFnZXMgPSByZXQ7CisJCWVsc2UKKwkJCW5yX3BhZ2VzID0gMDsKKwkJcmV0ID0gLUVBR0FJTjsgLyogWFhYID8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImxlbiAlZCBucl9wYWdlcyAlbHVcbiIsIGxlbiwgbnJfcGFnZXMpOworCitjYWxsX2Z1bmM6CisJZnVuYyA9IHJkc19pbmZvX2Z1bmNzW29wdG5hbWUgLSBSRFNfSU5GT19GSVJTVF07CisJaWYgKGZ1bmMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJCWdvdG8gb3V0OworCX0KKworCWl0ZXIucGFnZXMgPSBwYWdlczsKKwlpdGVyLmFkZHIgPSBOVUxMOworCWl0ZXIub2Zmc2V0ID0gc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSk7CisKKwlmdW5jKHNvY2ssIGxlbiwgJml0ZXIsICZsZW5zKTsKKwlCVUdfT04obGVucy5lYWNoID09IDApOworCisJdG90YWwgPSBsZW5zLm5yICogbGVucy5lYWNoOworCisJcmRzX2luZm9faXRlcl91bm1hcCgmaXRlcik7CisKKwlpZiAodG90YWwgPiBsZW4pIHsKKwkJbGVuID0gdG90YWw7CisJCXJldCA9IC1FTk9TUEM7CisJfSBlbHNlIHsKKwkJbGVuID0gdG90YWw7CisJCXJldCA9IGxlbnMuZWFjaDsKKwl9CisKKwlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQorCQlyZXQgPSAtRUZBVUxUOworCitvdXQ6CisJZm9yIChpID0gMDsgcGFnZXMgIT0gTlVMTCAmJiBpIDwgbnJfcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCWtmcmVlKHBhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2luZm8uaCBiL25ldC9yZHMvaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzA1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2luZm8uaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9SRFNfSU5GT19ICisjZGVmaW5lIF9SRFNfSU5GT19ICisKK3N0cnVjdCByZHNfaW5mb19sZW5ndGhzIHsKKwl1bnNpZ25lZCBpbnQJbnI7CisJdW5zaWduZWQgaW50CWVhY2g7Cit9OworCitzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3I7CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBmaWxsIGluIHRoZSBmaWVsZHMgb2YgQGxlbnMgdG8gcmVmbGVjdCB0aGUgc2l6ZQorICogb2YgdGhlIGF2YWlsYWJsZSBpbmZvIHNvdXJjZS4gIElmIHRoZSBzbmFwc2hvdCBmaXRzIGluIEBsZW4gdGhlbiBpdAorICogc2hvdWxkIGJlIGNvcGllZCB1c2luZyBAaXRlci4gIFRoZSBjYWxsZXIgd2lsbCBkZWR1Y2UgaWYgaXQgd2FzIGNvcGllZAorICogb3Igbm90IGJ5IGNvbXBhcmluZyB0aGUgbGVuZ3Rocy4KKyAqLwordHlwZWRlZiB2b2lkICgqcmRzX2luZm9fZnVuYykoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKTsKKwordm9pZCByZHNfaW5mb19yZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpOwordm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYyk7CitpbnQgcmRzX2luZm9fZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCWludCBfX3VzZXIgKm9wdGxlbik7Cit2b2lkIHJkc19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLCB2b2lkICpkYXRhLAorCQkgICB1bnNpZ25lZCBsb25nIGJ5dGVzKTsKK3ZvaWQgcmRzX2luZm9faXRlcl91bm1hcChzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pdy5jIGIvbmV0L3Jkcy9pdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTY5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3LmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKK3Vuc2lnbmVkIGludCBmYXN0cmVnX3Bvb2xfc2l6ZSA9IFJEU19GQVNUUkVHX1BPT0xfU0laRTsKK3Vuc2lnbmVkIGludCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSA9IFJEU19GQVNUUkVHX1NJWkUgKyAxOyAvKiArMSBhbGxvd3MgZm9yIHVuYWxpZ25lZCBNUnMgKi8KKworbW9kdWxlX3BhcmFtKGZhc3RyZWdfcG9vbF9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmYXN0cmVnX3Bvb2xfc2l6ZSwgIiBNYXggbnVtYmVyIG9mIGZhc3RyZWcgTVJzIHBlciBkZXZpY2UiKTsKK21vZHVsZV9wYXJhbShmYXN0cmVnX21lc3NhZ2Vfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFzdHJlZ19tZXNzYWdlX3NpemUsICIgTWF4IHNpemUgb2YgYSBSRE1BIHRyYW5zZmVyIChmYXN0cmVnIE1ScykiKTsKKworc3RydWN0IGxpc3RfaGVhZCByZHNfaXdfZGV2aWNlczsKKworREVGSU5FX1NQSU5MT0NLKGl3X25vZGV2X2Nvbm5zX2xvY2spOworTElTVF9IRUFEKGl3X25vZGV2X2Nvbm5zKTsKKwordm9pZCByZHNfaXdfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldl9hdHRyOworCisJLyogT25seSBoYW5kbGUgaXdhcnAgZGV2aWNlcyAqLworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykKKwkJcmV0dXJuOworCisJZGV2X2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2F0dHIsIEdGUF9LRVJORUwpOworCWlmICghZGV2X2F0dHIpCisJCXJldHVybjsKKworCWlmIChpYl9xdWVyeV9kZXZpY2UoZGV2aWNlLCBkZXZfYXR0cikpIHsKKwkJcmRzZGVidWcoIlF1ZXJ5IGRldmljZSBmYWlsZWQgZm9yICVzXG4iLCBkZXZpY2UtPm5hbWUpOworCQlnb3RvIGZyZWVfYXR0cjsKKwl9CisKKwlyZHNfaXdkZXYgPSBrbWFsbG9jKHNpemVvZiAqcmRzX2l3ZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkc19pd2RldikKKwkJZ290byBmcmVlX2F0dHI7CisKKwlzcGluX2xvY2tfaW5pdCgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlyZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5ID0gISEoZGV2X2F0dHItPmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTE9DQUxfRE1BX0xLRVkpOworCXJkc19pd2Rldi0+bWF4X3dycyA9IGRldl9hdHRyLT5tYXhfcXBfd3I7CisJcmRzX2l3ZGV2LT5tYXhfc2dlID0gbWluKGRldl9hdHRyLT5tYXhfc2dlLCBSRFNfSVdfTUFYX1NHRSk7CisKKwlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQgPSBtYXgoUEFHRV9TSElGVCwgZmZzKGRldl9hdHRyLT5wYWdlX3NpemVfY2FwKSAtIDEpOworCisJcmRzX2l3ZGV2LT5kZXYgPSBkZXZpY2U7CisJcmRzX2l3ZGV2LT5wZCA9IGliX2FsbG9jX3BkKGRldmljZSk7CisJaWYgKElTX0VSUihyZHNfaXdkZXYtPnBkKSkKKwkJZ290byBmcmVlX2RldjsKKworCWlmICghcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleSkgeworCQlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX1JOSUMpIHsKKwkJCXJkc19pd2Rldi0+bXIgPSBpYl9nZXRfZG1hX21yKHJkc19pd2Rldi0+cGQsCisJCQkJCQlJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCQl9IGVsc2UgeworCQkJcmRzX2l3ZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2l3ZGV2LT5wZCwKKwkJCQkJCUlCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIHwKKwkJCQkJCUlCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJCX0KKwkJaWYgKElTX0VSUihyZHNfaXdkZXYtPm1yKSkKKwkJCWdvdG8gZXJyX3BkOworCX0gZWxzZQorCQlyZHNfaXdkZXYtPm1yID0gTlVMTDsKKworCXJkc19pd2Rldi0+bXJfcG9vbCA9IHJkc19pd19jcmVhdGVfbXJfcG9vbChyZHNfaXdkZXYpOworCWlmIChJU19FUlIocmRzX2l3ZGV2LT5tcl9wb29sKSkgeworCQlyZHNfaXdkZXYtPm1yX3Bvb2wgPSBOVUxMOworCQlnb3RvIGVycl9tcjsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jbV9pZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJnJkc19pd2Rldi0+bGlzdCwgJnJkc19pd19kZXZpY2VzKTsKKworCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaXdfY2xpZW50LCByZHNfaXdkZXYpOworCisJZ290byBmcmVlX2F0dHI7CisKK2Vycl9tcjoKKwlpZiAocmRzX2l3ZGV2LT5tcikKKwkJaWJfZGVyZWdfbXIocmRzX2l3ZGV2LT5tcik7CitlcnJfcGQ6CisJaWJfZGVhbGxvY19wZChyZHNfaXdkZXYtPnBkKTsKK2ZyZWVfZGV2OgorCWtmcmVlKHJkc19pd2Rldik7CitmcmVlX2F0dHI6CisJa2ZyZWUoZGV2X2F0dHIpOworfQorCit2b2lkIHJkc19pd19yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQsICpuZXh0OworCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pd19jbGllbnQpOworCWlmICghcmRzX2l3ZGV2KQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaV9jbV9pZCwgbmV4dCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmaV9jbV9pZC0+bGlzdCk7CisJCWtmcmVlKGlfY21faWQpOworCX0KKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmRzX2l3X3JlbW92ZV9jb25ucyhyZHNfaXdkZXYpOworCisJaWYgKHJkc19pd2Rldi0+bXJfcG9vbCkKKwkJcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChyZHNfaXdkZXYtPm1yX3Bvb2wpOworCisJaWYgKHJkc19pd2Rldi0+bXIpCisJCWliX2RlcmVnX21yKHJkc19pd2Rldi0+bXIpOworCisJd2hpbGUgKGliX2RlYWxsb2NfcGQocmRzX2l3ZGV2LT5wZCkpIHsKKwkJcmRzZGVidWcoIkZhaWxlZCB0byBkZWFsbG9jIHBkICVwXG4iLCByZHNfaXdkZXYtPnBkKTsKKwkJbXNsZWVwKDEpOworCX0KKworCWxpc3RfZGVsKCZyZHNfaXdkZXYtPmxpc3QpOworCWtmcmVlKHJkc19pd2Rldik7Cit9CisKK3N0cnVjdCBpYl9jbGllbnQgcmRzX2l3X2NsaWVudCA9IHsKKwkubmFtZSAgID0gInJkc19pdyIsCisJLmFkZCAgICA9IHJkc19pd19hZGRfb25lLAorCS5yZW1vdmUgPSByZHNfaXdfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIGludCByZHNfaXdfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8gPSBidWZmZXI7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYzsKKworCS8qIFdlIHdpbGwgb25seSBldmVyIGxvb2sgYXQgSUIgdHJhbnNwb3J0cyAqLworCWlmIChjb25uLT5jX3RyYW5zICE9ICZyZHNfaXdfdHJhbnNwb3J0KQorCQlyZXR1cm4gMDsKKworCWlpbmZvLT5zcmNfYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJaWluZm8tPmRzdF9hZGRyID0gY29ubi0+Y19mYWRkcjsKKworCW1lbXNldCgmaWluZm8tPnNyY19naWQsIDAsIHNpemVvZihpaW5mby0+c3JjX2dpZCkpOworCW1lbXNldCgmaWluZm8tPmRzdF9naWQsIDAsIHNpemVvZihpaW5mby0+ZHN0X2dpZCkpOworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCQlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisKKwkJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCQlkZXZfYWRkciA9ICZpYy0+aV9jbV9pZC0+cm91dGUuYWRkci5kZXZfYWRkcjsKKworCQlpYl9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+c3JjX2dpZCk7CisJCWliX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5kc3RfZ2lkKTsKKworCQlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCQlpaW5mby0+bWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9yZWN2X3dyID0gaWMtPmlfcmVjdl9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfc2VuZF9zZ2UgPSByZHNfaXdkZXYtPm1heF9zZ2U7CisJCXJkc19pd19nZXRfbXJfaW5mbyhyZHNfaXdkZXYsIGlpbmZvKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19pY19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfZm9yX2VhY2hfY29ubl9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywKKwkJCQlyZHNfaXdfY29ubl9pbmZvX3Zpc2l0b3IsCisJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24pKTsKK30KKworCisvKgorICogRWFybHkgUkRTL0lCIHdhcyBidWlsdCB0byBvbmx5IGJpbmQgdG8gYW4gYWRkcmVzcyBpZiB0aGVyZSBpcyBhbiBJUG9JQgorICogZGV2aWNlIHdpdGggdGhhdCBhZGRyZXNzIHNldC4KKyAqCisgKiBJZiBpdCB3ZXJlIG1lLCBJJ2QgYWR2b2NhdGUgZm9yIHNvbWV0aGluZyBtb3JlIGZsZXhpYmxlLiAgU2VuZGluZyBhbmQKKyAqIHJlY2VpdmluZyBzaG91bGQgYmUgZGV2aWNlLWFnbm9zdGljLiAgVHJhbnNwb3J0cyB3b3VsZCB0cnkgYW5kIG1haW50YWluCisgKiBjb25uZWN0aW9ucyBiZXR3ZWVuIHBlZXJzIHdobyBoYXZlIG1lc3NhZ2VzIHF1ZXVlZC4gIFVzZXJzcGFjZSB3b3VsZCBiZQorICogYWxsb3dlZCB0byBpbmZsdWVuY2Ugd2hpY2ggcGF0aHMgaGF2ZSBwcmlvcml0eS4gIFdlIGNvdWxkIGNhbGwgdXNlcnNwYWNlCisgKiBhc3NlcnRpbmcgdGhpcyBwb2xpY3kgInJvdXRpbmciLgorICovCitzdGF0aWMgaW50IHJkc19pd19sYWRkcl9jaGVjayhfX2JlMzIgYWRkcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCisJLyogQ3JlYXRlIGEgQ01BIElEIGFuZCB0cnkgdG8gYmluZCBpdC4gVGhpcyBjYXRjaGVzIGJvdGgKKwkgKiBJQiBhbmQgaVdBUlAgY2FwYWJsZSBOSUNzLgorCSAqLworCWNtX2lkID0gcmRtYV9jcmVhdGVfaWQoTlVMTCwgTlVMTCwgUkRNQV9QU19UQ1ApOworCWlmICghY21faWQpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworCisJLyogcmRtYV9iaW5kX2FkZHIgd2lsbCBvbmx5IHN1Y2NlZWQgZm9yIElCICYgaVdBUlAgZGV2aWNlcyAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJLyogZHVlIHRvIHRoaXMsIHdlIHdpbGwgY2xhaW0gdG8gc3VwcG9ydCBJQiBkZXZpY2VzIHVubGVzcyB3ZQorCSAgIGNoZWNrIG5vZGVfdHlwZS4gKi8KKwlpZiAocmV0IHx8IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisKKwlyZHNkZWJ1ZygiYWRkciAlcEk0IHJldCAlZCBub2RlIHR5cGUgJWRcbiIsCisJCSZhZGRyLCByZXQsCisJCWNtX2lkLT5kZXZpY2UgPyBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgOiAtMSk7CisKKwlyZG1hX2Rlc3Ryb3lfaWQoY21faWQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfZXhpdCh2b2lkKQoreworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUywgcmRzX2l3X2ljX2luZm8pOworCXJkc19pd19yZW1vdmVfbm9kZXZfY29ubnMoKTsKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CisJcmRzX2l3X3N5c2N0bF9leGl0KCk7CisJcmRzX2l3X3JlY3ZfZXhpdCgpOworCXJkc190cmFuc191bnJlZ2lzdGVyKCZyZHNfaXdfdHJhbnNwb3J0KTsKK30KKworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydCA9IHsKKwkubGFkZHJfY2hlY2sJCT0gcmRzX2l3X2xhZGRyX2NoZWNrLAorCS54bWl0X2NvbXBsZXRlCQk9IHJkc19pd194bWl0X2NvbXBsZXRlLAorCS54bWl0CQkJPSByZHNfaXdfeG1pdCwKKwkueG1pdF9jb25nX21hcAkJPSBOVUxMLAorCS54bWl0X3JkbWEJCT0gcmRzX2l3X3htaXRfcmRtYSwKKwkucmVjdgkJCT0gcmRzX2l3X3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2l3X2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfaXdfY29ubl9mcmVlLAorCS5jb25uX2Nvbm5lY3QJCT0gcmRzX2l3X2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfaXdfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc19pd19pbmNfY29weV90b191c2VyLAorCS5pbmNfcHVyZ2UJCT0gcmRzX2l3X2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX2l3X2luY19mcmVlLAorCS5jbV9pbml0aWF0ZV9jb25uZWN0CT0gcmRzX2l3X2NtX2luaXRpYXRlX2Nvbm5lY3QsCisJLmNtX2hhbmRsZV9jb25uZWN0CT0gcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0LAorCS5jbV9jb25uZWN0X2NvbXBsZXRlCT0gcmRzX2l3X2NtX2Nvbm5lY3RfY29tcGxldGUsCisJLnN0YXRzX2luZm9fY29weQk9IHJkc19pd19zdGF0c19pbmZvX2NvcHksCisJLmV4aXQJCQk9IHJkc19pd19leGl0LAorCS5nZXRfbXIJCQk9IHJkc19pd19nZXRfbXIsCisJLnN5bmNfbXIJCT0gcmRzX2l3X3N5bmNfbXIsCisJLmZyZWVfbXIJCT0gcmRzX2l3X2ZyZWVfbXIsCisJLmZsdXNoX21ycwkJPSByZHNfaXdfZmx1c2hfbXJzLAorCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAorCS50X25hbWUJCQk9ICJpd2FycCIsCisJLnRfcHJlZmVyX2xvb3BiYWNrCT0gMSwKK307CisKK2ludCBfX2luaXQgcmRzX2l3X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd19kZXZpY2VzKTsKKworCXJldCA9IGliX3JlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZHNfaXdfc3lzY3RsX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pYnJlZzsKKworCXJldCA9IHJkc19pd19yZWN2X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNjdGw7CisKKwlyZXQgPSByZHNfdHJhbnNfcmVnaXN0ZXIoJnJkc19pd190cmFuc3BvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlY3Y7CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TLCByZHNfaXdfaWNfaW5mbyk7CisKKwlnb3RvIG91dDsKKworb3V0X3JlY3Y6CisJcmRzX2l3X3JlY3ZfZXhpdCgpOworb3V0X3N5c2N0bDoKKwlyZHNfaXdfc3lzY3RsX2V4aXQoKTsKK291dF9pYnJlZzoKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmggYi9uZXQvcmRzL2l3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZGEzNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXcuaApAQCAtMCwwICsxLDM5NSBAQAorI2lmbmRlZiBfUkRTX0lXX0gKKyNkZWZpbmUgX1JEU19JV19ICisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworI2RlZmluZSBSRFNfRkFTVFJFR19TSVpFCQkyMAorI2RlZmluZSBSRFNfRkFTVFJFR19QT09MX1NJWkUJCTIwNDgKKworI2RlZmluZSBSRFNfSVdfTUFYX1NHRQkJCTgKKyNkZWZpbmUgUkRTX0lXX1JFQ1ZfU0dFIAkJMgorCisjZGVmaW5lIFJEU19JV19ERUZBVUxUX1JFQ1ZfV1IJCTEwMjQKKyNkZWZpbmUgUkRTX0lXX0RFRkFVTFRfU0VORF9XUgkJMjU2CisKKyNkZWZpbmUgUkRTX0lXX1NVUFBPUlRFRF9QUk9UT0NPTFMJMHgwMDAwMDAwMwkvKiBtaW5vciB2ZXJzaW9ucyBzdXBwb3J0ZWQgKi8KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2l3X2RldmljZXM7CisKKy8qCisgKiBJQiBwb3N0cyBSRFNfRlJBR19TSVpFIGZyYWdtZW50cyBvZiBwYWdlcyB0byB0aGUgcmVjZWl2ZSBxdWV1ZXMgdG8KKyAqIHRyeSBhbmQgbWluaW1pemUgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGllZCB1cCBib3RoIHRoZSBkZXZpY2UgYW5kCisgKiBzb2NrZXQgcmVjZWl2ZSBxdWV1ZXMuCisgKi8KKy8qIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBmaW5hbCBmdWxsIGZyYWcgdGhhdCBmaXRzIGluIHRoZSBwYWdlICovCisjZGVmaW5lIFJEU19QQUdFX0xBU1RfT0ZGICgoKFBBR0VfU0laRSAgLyBSRFNfRlJBR19TSVpFKSAtIDEpICogUkRTX0ZSQUdfU0laRSkKK3N0cnVjdCByZHNfcGFnZV9mcmFnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZfaXRlbTsKKwlzdHJ1Y3QgcGFnZQkJKmZfcGFnZTsKKwl1bnNpZ25lZCBsb25nCQlmX29mZnNldDsKKwlkbWFfYWRkcl90IAkJZl9tYXBwZWQ7Cit9OworCitzdHJ1Y3QgcmRzX2l3X2luY29taW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlpX2ZyYWdzOworCXN0cnVjdCByZHNfaW5jb21pbmcJaWlfaW5jOworfTsKKworc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgeworCS8qIEFkZCBuZXcgZmllbGRzIGF0IHRoZSBlbmQsIGFuZCBkb24ndCBwZXJtdXRlIGV4aXN0aW5nIGZpZWxkcy4gKi8KKwlfX2JlMzIJCQlkcF9zYWRkcjsKKwlfX2JlMzIJCQlkcF9kYWRkcjsKKwl1OAkJCWRwX3Byb3RvY29sX21ham9yOworCXU4CQkJZHBfcHJvdG9jb2xfbWlub3I7CisJX19iZTE2CQkJZHBfcHJvdG9jb2xfbWlub3JfbWFzazsgLyogYml0bWFzayAqLworCV9fYmUzMgkJCWRwX3Jlc2VydmVkMTsKKwlfX2JlNjQJCQlkcF9hY2tfc2VxOworCV9fYmUzMgkJCWRwX2NyZWRpdDsJCS8qIG5vbi16ZXJvIGVuYWJsZXMgZmxvdyBjdGwgKi8KK307CisKK3N0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgeworCXN0cnVjdCBzY2F0dGVybGlzdAkqbGlzdDsKKwl1bnNpZ25lZCBpbnQJCWxlbjsKKwlpbnQJCQlkbWFfbGVuOworCXVuc2lnbmVkIGludAkJZG1hX25wYWdlczsKKwl1bnNpZ25lZCBpbnQJCWJ5dGVzOworfTsKKworc3RydWN0IHJkc19pd19tYXBwaW5nIHsKKwlzcGlubG9ja190CQltX2xvY2s7CS8qIHByb3RlY3QgdGhlIG1hcHBpbmcgc3RydWN0ICovCisJc3RydWN0IGxpc3RfaGVhZAltX2xpc3Q7CisJc3RydWN0IHJkc19pd19tcgkqbV9tcjsKKwl1aW50MzJfdAkJbV9ya2V5OworCXN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgbV9zZzsKK307CisKK3N0cnVjdCByZHNfaXdfc2VuZF93b3JrIHsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKnNfcm07CisKKwkvKiBXZSBzaG91bGQgcmVhbGx5IHB1dCB0aGVzZSBpbnRvIGEgdW5pb246ICovCisJc3RydWN0IHJkc19yZG1hX29wCSpzX29wOworCXN0cnVjdCByZHNfaXdfbWFwcGluZwkqc19tYXBwaW5nOworCXN0cnVjdCBpYl9tcgkJKnNfbXI7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqc19wYWdlX2xpc3Q7CisJdW5zaWduZWQgY2hhcgkJc19yZW1hcF9jb3VudDsKKworCXN0cnVjdCBpYl9zZW5kX3dyCXNfd3I7CisJc3RydWN0IGliX3NnZQkJc19zZ2VbUkRTX0lXX01BWF9TR0VdOworCXVuc2lnbmVkIGxvbmcJCXNfcXVldWVkOworfTsKKworc3RydWN0IHJkc19pd19yZWN2X3dvcmsgeworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgCSpyX2l3aW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnCSpyX2ZyYWc7CisJc3RydWN0IGliX3JlY3Zfd3IJcl93cjsKKwlzdHJ1Y3QgaWJfc2dlCQlyX3NnZVsyXTsKK307CisKK3N0cnVjdCByZHNfaXdfd29ya19yaW5nIHsKKwl1MzIJCXdfbnI7CisJdTMyCQl3X2FsbG9jX3B0cjsKKwl1MzIJCXdfYWxsb2NfY3RyOworCXUzMgkJd19mcmVlX3B0cjsKKwlhdG9taWNfdAl3X2ZyZWVfY3RyOworfTsKKworc3RydWN0IHJkc19pd19kZXZpY2U7CisKK3N0cnVjdCByZHNfaXdfY29ubmVjdGlvbiB7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWl3X25vZGU7CisJc3RydWN0IHJkc19pd19kZXZpY2UgCSpyZHNfaXdkZXY7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjb25uOworCisJLyogYWxwaGFiZXQgc291cCwgSUJUQSBzdHlsZSAqLworCXN0cnVjdCByZG1hX2NtX2lkCSppX2NtX2lkOworCXN0cnVjdCBpYl9wZAkJKmlfcGQ7CisJc3RydWN0IGliX21yCQkqaV9tcjsKKwlzdHJ1Y3QgaWJfY3EJCSppX3NlbmRfY3E7CisJc3RydWN0IGliX2NxCQkqaV9yZWN2X2NxOworCisJLyogdHggKi8KKwlzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZwlpX3NlbmRfcmluZzsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKmlfcm07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfc2VuZF9oZHJzOworCXU2NAkJCWlfc2VuZF9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqaV9zZW5kczsKKworCS8qIHJ4ICovCisJc3RydWN0IG11dGV4CQlpX3JlY3ZfbXV0ZXg7CisJc3RydWN0IHJkc19pd193b3JrX3JpbmcJaV9yZWN2X3Jpbmc7CisJc3RydWN0IHJkc19pd19pbmNvbWluZwkqaV9pd2luYzsKKwl1MzIJCQlpX3JlY3ZfZGF0YV9yZW07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfcmVjdl9oZHJzOworCXU2NAkJCWlfcmVjdl9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqaV9yZWN2czsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwlpX2ZyYWc7CisJdTY0CQkJaV9hY2tfcmVjdjsJLyogbGFzdCBBQ0sgcmVjZWl2ZWQgKi8KKworCS8qIHNlbmRpbmcgYWNrcyAqLworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX2ZsYWdzOworCXU2NAkJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IJaV9hY2tfd3I7CisJc3RydWN0IGliX3NnZQkJaV9hY2tfc2dlOworCXU2NAkJCWlfYWNrX2RtYTsKKwl1bnNpZ25lZCBsb25nCQlpX2Fja19xdWV1ZWQ7CisKKwkvKiBGbG93IGNvbnRyb2wgcmVsYXRlZCBpbmZvcm1hdGlvbgorCSAqCisJICogT3VyIGFsZ29yaXRobSB1c2VzIGEgcGFpciB2YXJpYWJsZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY2VzcworCSAqIGF0b21pY2FsbHkgLSBvbmUgZm9yIHRoZSBzZW5kIGNyZWRpdHMsIGFuZCBvbmUgcG9zdGVkCisJICogcmVjdiBjcmVkaXRzIHdlIG5lZWQgdG8gdHJhbnNmZXIgdG8gcmVtb3RlLgorCSAqIFJhdGhlciB0aGFuIHByb3RlY3QgdGhlbSB1c2luZyBhIHNsb3cgc3BpbmxvY2ssIHdlIHB1dCBib3RoIGludG8KKwkgKiBhIHNpbmdsZSBhdG9taWNfdCBhbmQgdXBkYXRlIGl0IHVzaW5nIGNtcHhjaGcKKwkgKi8KKwlhdG9taWNfdAkJaV9jcmVkaXRzOworCisJLyogUHJvdG9jb2wgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGludAkJaV9mbG93Y3RsOjE7CS8qIGVuYWJsZS9kaXNhYmxlIGZsb3cgY3RsICovCisJdW5zaWduZWQgaW50CQlpX2RtYV9sb2NhbF9sa2V5OjE7CisJdW5zaWduZWQgaW50CQlpX2Zhc3RyZWdfcG9zdGVkOjE7IC8qIGZhc3RyZWcgcG9zdGVkIG9uIHRoaXMgY29ubmVjdGlvbiAqLworCS8qIEJhdGNoZWQgY29tcGxldGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQJCWlfdW5zaWduYWxlZF93cnM7CisJbG9uZwkJCWlfdW5zaWduYWxlZF9ieXRlczsKK307CisKKy8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGlzIGF0IGxlYXN0IDMyIGJpdHMgKi8KKyNkZWZpbmUgSUJfR0VUX1NFTkRfQ1JFRElUUyh2KQkoKHYpICYgMHhmZmZmKQorI2RlZmluZSBJQl9HRVRfUE9TVF9DUkVESVRTKHYpCSgodikgPj4gMTYpCisjZGVmaW5lIElCX1NFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfU0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpIDw8IDE2KQorCitzdHJ1Y3QgcmRzX2l3X2NtX2lkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHJkbWFfY21faWQJKmNtX2lkOworfTsKKworc3RydWN0IHJkc19pd19kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNtX2lkX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljb25uX2xpc3Q7CisJc3RydWN0IGliX2RldmljZQkqZGV2OworCXN0cnVjdCBpYl9wZAkJKnBkOworCXN0cnVjdCBpYl9tcgkJKm1yOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbAkqbXJfcG9vbDsKKwlpbnQJCQlwYWdlX3NoaWZ0OworCWludAkJCW1heF9zZ2U7CisJdW5zaWduZWQgaW50CQltYXhfd3JzOworCXVuc2lnbmVkIGludAkJZG1hX2xvY2FsX2xrZXk6MTsKKwlzcGlubG9ja190CQlzcGlubG9jazsJLyogcHJvdGVjdCB0aGUgYWJvdmUgKi8KK307CisKKy8qIGJpdHMgZm9yIGlfYWNrX2ZsYWdzICovCisjZGVmaW5lIElCX0FDS19JTl9GTElHSFQJMAorI2RlZmluZSBJQl9BQ0tfUkVRVUVTVEVECTEKKworLyogTWFnaWMgV1JfSUQgZm9yIEFDS3MgKi8KKyNkZWZpbmUgUkRTX0lXX0FDS19XUl9JRAkoKHU2NCkweGZmZmZmZmZmZmZmZmZmZmZVTEwpCisjZGVmaW5lIFJEU19JV19GQVNUX1JFR19XUl9JRAkoKHU2NCkweGVmZWZlZmVmZWZlZmVmZWZVTEwpCisjZGVmaW5lIFJEU19JV19MT0NBTF9JTlZfV1JfSUQJKCh1NjQpMHhkZmRmZGZkZmRmZGZkZmRmVUxMKQorCitzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MgeworCXVpbnQ2NF90CXNfaXdfY29ubmVjdF9yYWNlZDsKKwl1aW50NjRfdAlzX2l3X2xpc3Rlbl9jbG9zZWRfc3RhbGU7CisJdWludDY0X3QJc19pd190eF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaXdfdHhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pd190eF9yaW5nX2Z1bGw7CisJdWludDY0X3QJc19pd190eF90aHJvdHRsZTsKKwl1aW50NjRfdAlzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZTsKKwl1aW50NjRfdAlzX2l3X3R4X3N0YWxsZWQ7CisJdWludDY0X3QJc19pd190eF9jcmVkaXRfdXBkYXRlczsKKwl1aW50NjRfdAlzX2l3X3J4X2NxX2NhbGw7CisJdWludDY0X3QJc19pd19yeF9jcV9ldmVudDsKKwl1aW50NjRfdAlzX2l3X3J4X3JpbmdfZW1wdHk7CisJdWludDY0X3QJc19pd19yeF9yZWZpbGxfZnJvbV9jcTsKKwl1aW50NjRfdAlzX2l3X3J4X3JlZmlsbF9mcm9tX3RocmVhZDsKKwl1aW50NjRfdAlzX2l3X3J4X2FsbG9jX2xpbWl0OworCXVpbnQ2NF90CXNfaXdfcnhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pd19hY2tfc2VudDsKKwl1aW50NjRfdAlzX2l3X2Fja19zZW5kX2ZhaWx1cmU7CisJdWludDY0X3QJc19pd19hY2tfc2VuZF9kZWxheWVkOworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbmRfcGlnZ3liYWNrZWQ7CisJdWludDY0X3QJc19pd19hY2tfcmVjZWl2ZWQ7CisJdWludDY0X3QJc19pd19yZG1hX21yX2FsbG9jOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9mcmVlOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl91c2VkOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX2ZsdXNoOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX3dhaXQ7CisJdWludDY0X3QJc19pd19yZG1hX21yX3Bvb2xfZGVwbGV0ZWQ7Cit9OworCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc19pd193cTsKKworLyoKKyAqIEZha2UgaWJfZG1hX3N5bmNfc2dfZm9yX3tjcHUsZGV2aWNlfSBhcyBsb25nIGFzIGliX3ZlcmJzLmgKKyAqIGRvZXNuJ3QgZGVmaW5lIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2NwdQlyZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2NwdQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2dfZG1hX2xlbiwgaW50IGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19kbWFfbGVuOyArK2kpIHsKKwkJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LAorCQkJCWliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnW2ldKSwKKwkJCQlpYl9zZ19kbWFfbGVuKGRldiwgJnNnW2ldKSwKKwkJCQlkaXJlY3Rpb24pOworCX0KK30KKyNkZWZpbmUgaWJfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlyZHNfaXdfZG1hX3N5bmNfc2dfZm9yX2RldmljZQorCitzdGF0aWMgaW5saW5lIHUzMiByZHNfaXdfbG9jYWxfZG1hX2xrZXkoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlyZXR1cm4gaWMtPmlfZG1hX2xvY2FsX2xrZXkgPyBpYy0+aV9jbV9pZC0+ZGV2aWNlLT5sb2NhbF9kbWFfbGtleSA6IGljLT5pX21yLT5sa2V5OworfQorCisvKiBpYi5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydDsKK2V4dGVybiB2b2lkIHJkc19pd19hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gdm9pZCByZHNfaXdfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHN0cnVjdCBpYl9jbGllbnQgcmRzX2l3X2NsaWVudDsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBmYXN0cmVnX3Bvb2xfc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZmFzdHJlZ19tZXNzYWdlX3NpemU7CisKK2V4dGVybiBzcGlubG9ja190IGl3X25vZGV2X2Nvbm5zX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpd19ub2Rldl9jb25uczsKKworLyogaWJfY20uYyAqLworaW50IHJkc19pd19jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgcmRzX2l3X2Nvbm5fZnJlZSh2b2lkICphcmcpOworaW50IHJkc19pd19jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spOworaW50IF9faW5pdCByZHNfaXdfbGlzdGVuX2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19saXN0ZW5fc3RvcCh2b2lkKTsKK3ZvaWQgX19yZHNfaXdfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2ludCByZHNfaXdfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworaW50IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7Cit2b2lkIHJkc19pd19jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisKKyNkZWZpbmUgcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfaXdfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUy9JVzogIiBmbXQpCisKKy8qIGliX3JkbWEuYyAqLworaW50IHJkc19pd191cGRhdGVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKK2ludCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KTsKK3N0cnVjdCByZHNfaXdfbXJfcG9vbCAqcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaXdfZGV2aWNlICopOwordm9pZCByZHNfaXdfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pOwordm9pZCByZHNfaXdfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqKTsKK3ZvaWQgKnJkc19pd19nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCk7Cit2b2lkIHJkc19pd19zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXIpOwordm9pZCByZHNfaXdfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSk7Cit2b2lkIHJkc19pd19mbHVzaF9tcnModm9pZCk7Cit2b2lkIHJkc19pd19yZW1vdmVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKKworLyogaWJfcmVjdi5jICovCitpbnQgX19pbml0IHJkc19pd19yZWN2X2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19yZWN2X2V4aXQodm9pZCk7CitpbnQgcmRzX2l3X3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaXdfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCk7Cit2b2lkIHJkc19pd19pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2l3X2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CitpbnQgcmRzX2l3X2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgc2l6ZV90IHNpemUpOwordm9pZCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pd19yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordTY0IHJkc19pd19waWdneWJfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOworCisvKiBpYl9yaW5nLmMgKi8KK3ZvaWQgcmRzX2l3X3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3ZvaWQgcmRzX2l3X3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpOwordTMyIHJkc19pd19yaW5nX2FsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcyk7Cit2b2lkIHJkc19pd19yaW5nX2ZyZWUoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpOwordm9pZCByZHNfaXdfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK2ludCByZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZyk7CitpbnQgcmRzX2l3X3JpbmdfbG93KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaXdfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpOwordTMyIHJkc19pd19yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KTsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfaXdfcmluZ19lbXB0eV93YWl0OworCisvKiBpYl9zZW5kLmMgKi8KK3ZvaWQgcmRzX2l3X3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfaXdfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpOwordm9pZCByZHNfaXdfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCk7Cit2b2lkIHJkc19pd19zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3ZvaWQgcmRzX2l3X3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK2ludCByZHNfaXdfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCk7Cit2b2lkIHJkc19pd19zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpOwordm9pZCByZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKTsKK2ludCByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTMyIHdhbnRlZCwKKwkJCSAgICAgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKTsKKworLyogaWJfc3RhdHMuYyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByZHNfaXdfc3RhdGlzdGljcywgcmRzX2l3X3N0YXRzKTsKKyNkZWZpbmUgcmRzX2l3X3N0YXRzX2luYyhtZW1iZXIpIHJkc19zdGF0c19pbmNfd2hpY2gocmRzX2l3X3N0YXRzLCBtZW1iZXIpCit1bnNpZ25lZCBpbnQgcmRzX2l3X3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCk7CisKKy8qIGliX3N5c2N0bC5jICovCitpbnQgX19pbml0IHJkc19pd19zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X3N5c2N0bF9leGl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93cjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2w7CitleHRlcm4gY3RsX3RhYmxlIHJkc19pd19zeXNjdGxfdGFibGVbXTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgaGVhZGVyIGFuZCBkYXRhIFNHRXMgaW4KKyAqIFJEUyBwYWNrZXRzIChub3QgUkRNQSkKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pd19oZWFkZXJfc2dlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKK3sKKwlyZXR1cm4gJnNnZVswXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKK3Jkc19pd19kYXRhX3NnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfc2V0XzY0Yml0KHU2NCAqcHRyLCB1NjQgdmFsKQoreworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKwkqcHRyID0gdmFsOworI2Vsc2UKKwlzZXRfNjRiaXQocHRyLCB2YWwpOworI2VuZGlmCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19jbS5jIGIvbmV0L3Jkcy9pd19jbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWNiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X2NtLmMKQEAgLTAsMCArMSw3NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworLyoKKyAqIFNldCB0aGUgc2VsZWN0ZWQgcHJvdG9jb2wgdmVyc2lvbgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X3Byb3RvY29sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJY29ubi0+Y192ZXJzaW9uID0gdmVyc2lvbjsKK30KKworLyoKKyAqIFNldCB1cCBmbG93IGNvbnRyb2wKKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9mbG93X2NvbnRyb2woc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1MzIgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChyZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCAmJiBjcmVkaXRzICE9IDApIHsKKwkJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sICovCisJCWljLT5pX2Zsb3djdGwgPSAxOworCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRzKTsKKwl9IGVsc2UgeworCQlpYy0+aV9mbG93Y3RsID0gMDsKKwl9Cit9CisKKy8qCisgKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLgorICogV2UgZ2V0IGhlcmUgZm9yIGJvdGggb3V0Z29pbmcgYW5kIGluY29taW5nIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJY29uc3Qgc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCWludCBlcnI7CisKKwlpZiAoZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbikgeworCQlkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKworCQlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sCisJCQkJUkRTX1BST1RPQ09MKGRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKSk7CisJCXJkc19pd19zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKwl9CisKKwkvKiB1cGRhdGUgaWJfZGV2aWNlIHdpdGggdGhpcyBsb2NhbCBpcGFkZHIgJiBjb25uICovCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwllcnIgPSByZHNfaXdfdXBkYXRlX2NtX2lkKHJkc19pd2RldiwgaWMtPmlfY21faWQpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2l3X3VwZGF0ZV9pcGFkZHIgZmFpbGVkICglZClcbiIsIGVycik7CisJZXJyID0gcmRzX2l3X2FkZF9jb25uKHJkc19pd2RldiwgY29ubik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaXdfYWRkX2Nvbm4gZmFpbGVkICglZClcbiIsIGVycik7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcCAmJiBkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSVc6IGNvbm5lY3RlZCB0byAlcEk0PC0+JXBJNCB2ZXJzaW9uICV1LiV1JXNcbiIsCisJCQkmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIsCisJCQlSRFNfUFJPVE9DT0xfTUFKT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCVJEU19QUk9UT0NPTF9NSU5PUihjb25uLT5jX3ZlcnNpb24pLAorCQkJaWMtPmlfZmxvd2N0bCA/ICIsIGZsb3cgY29udHJvbCIgOiAiIik7CisKKwlyZHNfY29ubmVjdF9jb21wbGV0ZShjb25uKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2NtX2ZpbGxfY29ubl9wYXJhbShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtLAorCQkJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwLAorCQkJdTMyIHByb3RvY29sX3ZlcnNpb24pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwltZW1zZXQoY29ubl9wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0pKTsKKwkvKiBYWFggdHVuZSB0aGVzZT8gKi8KKwljb25uX3BhcmFtLT5yZXNwb25kZXJfcmVzb3VyY2VzID0gMTsKKwljb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGggPSAxOworCisJaWYgKGRwKSB7CisJCW1lbXNldChkcCwgMCwgc2l6ZW9mKCpkcCkpOworCQlkcC0+ZHBfc2FkZHIgPSBjb25uLT5jX2xhZGRyOworCQlkcC0+ZHBfZGFkZHIgPSBjb25uLT5jX2ZhZGRyOworCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPSBSRFNfUFJPVE9DT0xfTUFKT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vciA9IFJEU19QUk9UT0NPTF9NSU5PUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2sgPSBjcHVfdG9fYmUxNihSRFNfSVdfU1VQUE9SVEVEX1BST1RPQ09MUyk7CisJCWRwLT5kcF9hY2tfc2VxID0gcmRzX2l3X3BpZ2d5Yl9hY2soaWMpOworCisJCS8qIEFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKGljLT5pX2Zsb3djdGwpIHsKKwkJCXVuc2lnbmVkIGludCBjcmVkaXRzOworCisJCQljcmVkaXRzID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpOworCQkJZHAtPmRwX2NyZWRpdCA9IGNwdV90b19iZTMyKGNyZWRpdHMpOworCQkJYXRvbWljX3N1YihJQl9TRVRfUE9TVF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJCX0KKworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGEgPSBkcDsKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbiA9IHNpemVvZigqZHApOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlyZHNkZWJ1ZygiZXZlbnQgJXUgZGF0YSAlcFxuIiwgZXZlbnQtPmV2ZW50LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3FwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBkYXRhOworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzZGVidWcoImNvbm4gJXAgaWMgJXAgZXZlbnQgJXVcbiIsIGNvbm4sIGljLCBldmVudC0+ZXZlbnQpOworCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIElCX0VWRU5UX0NPTU1fRVNUOgorCQlyZG1hX25vdGlmeShpYy0+aV9jbV9pZCwgSUJfRVZFTlRfQ09NTV9FU1QpOworCQlicmVhazsKKwljYXNlIElCX0VWRU5UX1FQX1JFUV9FUlI6CisJY2FzZSBJQl9FVkVOVF9RUF9GQVRBTDoKKwlkZWZhdWx0OgorCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiUkRTL0lXOiBGYXRhbCBRUCBFdmVudCAldSAtIGNvbm5lY3Rpb24gJXBJNC0+JXBJNC4uLnJlY29ubmVjdGluZ1xuIiwKKwkJCWV2ZW50LT5ldmVudCwgJmNvbm4tPmNfbGFkZHIsCisJCQkmY29ubi0+Y19mYWRkcik7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIFFQCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2luaXRfcXBfYXR0cnMoc3RydWN0IGliX3FwX2luaXRfYXR0ciAqYXR0ciwKKwkJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiwKKwkJc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnNlbmRfcmluZywKKwkJdm9pZCAoKnNlbmRfY3FfaGFuZGxlcikoc3RydWN0IGliX2NxICosIHZvaWQgKiksCisJCXN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyZWN2X3JpbmcsCisJCXZvaWQgKCpyZWN2X2NxX2hhbmRsZXIpKHN0cnVjdCBpYl9jcSAqLCB2b2lkICopLAorCQl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pd2Rldi0+ZGV2OworCXVuc2lnbmVkIGludCBzZW5kX3NpemUsIHJlY3Zfc2l6ZTsKKwlpbnQgcmV0OworCisJLyogVGhlIG9mZnNldCBvZiAxIGlzIHRvIGFjY29tb2RhdGUgdGhlIGFkZGl0aW9uYWwgQUNLIFdSLiAqLworCXNlbmRfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2l3ZGV2LT5tYXhfd3JzLCByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyICsgMSk7CisJcmVjdl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCByZHNfaXdkZXYtPm1heF93cnMsIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IgKyAxKTsKKwlyZHNfaXdfcmluZ19yZXNpemUoc2VuZF9yaW5nLCBzZW5kX3NpemUgLSAxKTsKKwlyZHNfaXdfcmluZ19yZXNpemUocmVjdl9yaW5nLCByZWN2X3NpemUgLSAxKTsKKworCW1lbXNldChhdHRyLCAwLCBzaXplb2YoKmF0dHIpKTsKKwlhdHRyLT5ldmVudF9oYW5kbGVyID0gcmRzX2l3X3FwX2V2ZW50X2hhbmRsZXI7CisJYXR0ci0+cXBfY29udGV4dCA9IGNvbnRleHQ7CisJYXR0ci0+Y2FwLm1heF9zZW5kX3dyID0gc2VuZF9zaXplOworCWF0dHItPmNhcC5tYXhfcmVjdl93ciA9IHJlY3Zfc2l6ZTsKKwlhdHRyLT5jYXAubWF4X3NlbmRfc2dlID0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCWF0dHItPmNhcC5tYXhfcmVjdl9zZ2UgPSBSRFNfSVdfUkVDVl9TR0U7CisJYXR0ci0+c3Ffc2lnX3R5cGUgPSBJQl9TSUdOQUxfUkVRX1dSOworCWF0dHItPnFwX3R5cGUgPSBJQl9RUFRfUkM7CisKKwlhdHRyLT5zZW5kX2NxID0gaWJfY3JlYXRlX2NxKGRldiwgc2VuZF9jcV9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIsCisJCQkJICAgICBjb250ZXh0LCBzZW5kX3NpemUsIDApOworCWlmIChJU19FUlIoYXR0ci0+c2VuZF9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihhdHRyLT5zZW5kX2NxKTsKKwkJYXR0ci0+c2VuZF9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlhdHRyLT5yZWN2X2NxID0gaWJfY3JlYXRlX2NxKGRldiwgcmVjdl9jcV9oYW5kbGVyLAorCQkJCSAgICAgcmRzX2l3X2NxX2V2ZW50X2hhbmRsZXIsCisJCQkJICAgICBjb250ZXh0LCByZWN2X3NpemUsIDApOworCWlmIChJU19FUlIoYXR0ci0+cmVjdl9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihhdHRyLT5yZWN2X2NxKTsKKwkJYXR0ci0+cmVjdl9jcSA9IE5VTEw7CisJCXJkc2RlYnVnKCJpYl9jcmVhdGVfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGF0dHItPnNlbmRfY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoYXR0ci0+cmVjdl9jcSwgSUJfQ1FfU09MSUNJVEVEKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJpYl9yZXFfbm90aWZ5X2NxIHJlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoYXR0ci0+c2VuZF9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoYXR0ci0+c2VuZF9jcSk7CisJCWlmIChhdHRyLT5yZWN2X2NxKQorCQkJaWJfZGVzdHJveV9jcShhdHRyLT5yZWN2X2NxKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIG5vdCBsZWF2ZSBJU19FUlIgcG9pbnRlcnMgYXJvdW5kIGZvcgorICogY2xlYW51cCB0byB0cmlwIG92ZXIuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X3NldHVwX3FwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgYXR0cjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCWludCByZXQ7CisKKwkvKiByZHNfaXdfYWRkX29uZSBjcmVhdGVzIGEgcmRzX2l3X2RldmljZSBvYmplY3QgcGVyIElCIGRldmljZSwKKwkgKiBhbmQgYWxsb2NhdGVzIGEgcHJvdGVjdGlvbiBkb21haW4sIG1lbW9yeSByYW5nZSBhbmQgTVIgcG9vbAorCSAqIGZvciBlYWNoLiAgSWYgdGhhdCBmYWlscyBmb3IgYW55IHJlYXNvbiwgaXQgd2lsbCBub3QgcmVnaXN0ZXIKKwkgKiB0aGUgcmRzX2l3ZGV2IGF0IGFsbC4KKwkgKi8KKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2LCAmcmRzX2l3X2NsaWVudCk7CisJaWYgKHJkc19pd2RldiA9PSBOVUxMKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JVzogTm8gY2xpZW50X2RhdGEgZm9yIGRldmljZSAlc1xuIiwKKwkJCQkJZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIFByb3RlY3Rpb24gZG9tYWluIGFuZCBtZW1vcnkgcmFuZ2UgKi8KKwlpYy0+aV9wZCA9IHJkc19pd2Rldi0+cGQ7CisJaWMtPmlfbXIgPSByZHNfaXdkZXYtPm1yOworCisJcmV0ID0gcmRzX2l3X2luaXRfcXBfYXR0cnMoJmF0dHIsIHJkc19pd2RldiwKKwkJCSZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zZW5kX2NxX2NvbXBfaGFuZGxlciwKKwkJCSZpYy0+aV9yZWN2X3JpbmcsIHJkc19pd19yZWN2X2NxX2NvbXBfaGFuZGxlciwKKwkJCWNvbm4pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWljLT5pX3NlbmRfY3EgPSBhdHRyLnNlbmRfY3E7CisJaWMtPmlfcmVjdl9jcSA9IGF0dHIucmVjdl9jcTsKKworCS8qCisJICogWFhYIHRoaXMgY2FuIGZhaWwgaWYgbWF4Xypfd3IgaXMgdG9vIGxhcmdlPyAgQXJlIHdlIHN1cHBvc2VkCisJICogdG8gYmFjayBvZmYgdW50aWwgd2UgZ2V0IGEgdmFsdWUgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIHN1cHBvcnQ/CisJICovCisJcmV0ID0gcmRtYV9jcmVhdGVfcXAoaWMtPmlfY21faWQsIGljLT5pX3BkLCAmYXR0cik7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfcXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZF9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3NlbmRfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9zZW5kX2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHNlbmQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfcmVjdl9oZHJzID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfcmVjdl9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgJmljLT5pX3JlY3ZfaGRyc19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9yZWN2X2hkcnMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IHJlY3YgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfYWNrID0gaWJfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkgICAgICAgJmljLT5pX2Fja19kbWEsIEdGUF9LRVJORUwpOworCWlmIChpYy0+aV9hY2sgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1ZygiaWJfZG1hX2FsbG9jX2NvaGVyZW50IGFjayBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpYy0+aV9zZW5kcyA9IHZtYWxsb2MoaWMtPmlfc2VuZF9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pd19zZW5kX3dvcmspKTsKKwlpZiAoaWMtPmlfc2VuZHMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZHNkZWJ1Zygic2VuZCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlyZHNfaXdfc2VuZF9pbml0X3JpbmcoaWMpOworCisJaWMtPmlfcmVjdnMgPSB2bWFsbG9jKGljLT5pX3JlY3ZfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaXdfcmVjdl93b3JrKSk7CisJaWYgKGljLT5pX3JlY3ZzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInJlY3YgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaXdfcmVjdl9pbml0X3JpbmcoaWMpOworCXJkc19pd19yZWN2X2luaXRfYWNrKGljKTsKKworCS8qIFBvc3QgcmVjZWl2ZSBidWZmZXJzIC0gYXMgYSBzaWRlIGVmZmVjdCwgdGhpcyB3aWxsIHVwZGF0ZQorCSAqIHRoZSBwb3N0ZWQgY3JlZGl0IGNvdW50LiAqLworCXJkc19pd19yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDEpOworCisJcmRzZGVidWcoImNvbm4gJXAgcGQgJXAgbXIgJXAgY3EgJXAgJXBcbiIsIGNvbm4sIGljLT5pX3BkLCBpYy0+aV9tciwKKwkJIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiByZHNfaXdfcHJvdG9jb2xfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSAqZHApCit7CisJdTE2IGNvbW1vbjsKKwl1MzIgdmVyc2lvbiA9IDA7CisKKwkvKiByZG1hX2NtIHByaXZhdGUgZGF0YSBpcyBvZGQgLSB3aGVuIHRoZXJlIGlzIGFueSBwcml2YXRlIGRhdGEgaW4gdGhlCisJICogcmVxdWVzdCwgd2Ugd2lsbCBiZSBnaXZlbiBhIHByZXR0eSBsYXJnZSBidWZmZXIgd2l0aG91dCB0ZWxsaW5nIHVzIHRoZQorCSAqIG9yaWdpbmFsIHNpemUuIFRoZSBvbmx5IHdheSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGlzIGJ5IGxvb2tpbmcgYXQKKwkgKiB0aGUgY29udGVudHMsIHdoaWNoIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLgorCSAqIElmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGZpZWxkcyBhcmVuJ3Qgc2V0LCB0aGlzIGlzIGEgY29ubmVjdGlvbiBhdHRlbXB0CisJICogZnJvbSBhbiBvbGRlciB2ZXJzaW9uLiBUaGlzIGNvdWxkIGNvdWxkIGJlIDMuMCBvciAyLjAgLSB3ZSBjYW4ndCB0ZWxsLgorCSAqIFdlIHJlYWxseSBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoaXMgZm9yIE9GRUQgMS4zIDotKCAqLworCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMCkKKwkJcmV0dXJuIFJEU19QUk9UT0NPTF8zXzA7CisKKwljb21tb24gPSBiZTE2X3RvX2NwdShkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzaykgJiBSRFNfSVdfU1VQUE9SVEVEX1BST1RPQ09MUzsKKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDMgJiYgY29tbW9uKSB7CisJCXZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOworCQl3aGlsZSAoKGNvbW1vbiA+Pj0gMSkgIT0gMCkKKwkJCXZlcnNpb24rKzsKKwl9IGVsc2UgaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUzogQ29ubmVjdGlvbiBmcm9tICVwSTQgdXNpbmcgIgorCQkJImluY29tcGF0aWJsZSBwcm90b2NvbCB2ZXJzaW9uICV1LiV1XG4iLAorCQkJJmRwLT5kcF9zYWRkciwKKwkJCWRwLT5kcF9wcm90b2NvbF9tYWpvciwKKwkJCWRwLT5kcF9wcm90b2NvbF9taW5vcik7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCitpbnQgcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSBkcF9yZXA7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gTlVMTDsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwl1MzIgdmVyc2lvbjsKKwlpbnQgZXJyLCBkZXN0cm95ID0gMTsKKworCS8qIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBwcm90b2NvbCB2ZXJzaW9uIG1hdGNoZXMgb3Vycy4gKi8KKwl2ZXJzaW9uID0gcmRzX2l3X3Byb3RvY29sX2NvbXBhdGlibGUoZHApOworCWlmICghdmVyc2lvbikKKwkJZ290byBvdXQ7CisKKwlyZHNkZWJ1Zygic2FkZHIgJXBJNCBkYWRkciAlcEk0IFJEU3YldS4ldVxuIiwKKwkJICZkcC0+ZHBfc2FkZHIsICZkcC0+ZHBfZGFkZHIsCisJCSBSRFNfUFJPVE9DT0xfTUFKT1IodmVyc2lvbiksIFJEU19QUk9UT0NPTF9NSU5PUih2ZXJzaW9uKSk7CisKKwljb25uID0gcmRzX2Nvbm5fY3JlYXRlKGRwLT5kcF9kYWRkciwgZHAtPmRwX3NhZGRyLCAmcmRzX2l3X3RyYW5zcG9ydCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCXJkc2RlYnVnKCJyZHNfY29ubl9jcmVhdGUgZmFpbGVkICglbGQpXG4iLCBQVFJfRVJSKGNvbm4pKTsKKwkJY29ubiA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBtYXkgb2NjdXIgd2hpbGUgdGhlCisJICogcHJldmlvdXMgY29ubmVjdGlvbiBleGlzdCwgZS5nLiBpbiBjYXNlIG9mIGZhaWxvdmVyLgorCSAqIEJ1dCBhcyBjb25uZWN0aW9ucyBtYXkgYmUgaW5pdGlhdGVkIHNpbXVsdGFuZW91c2x5CisJICogYnkgYm90aCBob3N0cywgd2UgaGF2ZSBhIHJhbmRvbSBiYWNrb2ZmIG1lY2hhbmlzbSAtCisJICogc2VlIHRoZSBjb21tZW50IGFib3ZlIHJkc19xdWV1ZV9yZWNvbm5lY3QoKQorCSAqLworCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0NPTk5FQ1RJTkcpKSB7CisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQkJcmRzZGVidWcoImluY29taW5nIGNvbm5lY3Qgd2hpbGUgY29ubmVjdGluZ1xuIik7CisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2xpc3Rlbl9jbG9zZWRfc3RhbGUpOworCQl9IGVsc2UKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFdhaXQgYW5kIHNlZSAtIG91ciBjb25uZWN0IG1heSBzdGlsbCBiZSBzdWNjZWVkaW5nICovCisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfY29ubmVjdF9yYWNlZCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sIHZlcnNpb24pOworCXJkc19pd19zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKworCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCisJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCisJaWYgKGRwLT5kcF9hY2tfc2VxKQorCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KGRwLT5kcF9hY2tfc2VxKSwgTlVMTCk7CisKKwlCVUdfT04oY21faWQtPmNvbnRleHQpOworCUJVR19PTihpYy0+aV9jbV9pZCk7CisKKwlpYy0+aV9jbV9pZCA9IGNtX2lkOworCWNtX2lkLT5jb250ZXh0ID0gY29ubjsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShjbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJaWMtPmlfZG1hX2xvY2FsX2xrZXkgPSByZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5OworCisJLyogV2UgZ290IGhhbGZ3YXkgdGhyb3VnaCBzZXR0aW5nIHVwIHRoZSBpYl9jb25uZWN0aW9uLCBpZiB3ZQorCSAqIGZhaWwgbm93LCB3ZSBoYXZlIHRvIHRha2UgdGhlIGxvbmcgcm91dGUgb3V0IG9mIHRoaXMgbWVzcy4gKi8KKwlkZXN0cm95ID0gMDsKKworCWVyciA9IHJkc19pd19zZXR1cF9xcChjb25uKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZHNfaXdfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd19jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcF9yZXAsIHZlcnNpb24pOworCisJLyogcmRtYV9hY2NlcHQoKSBjYWxscyByZG1hX3JlamVjdCgpIGludGVybmFsbHkgaWYgaXQgZmFpbHMgKi8KKwllcnIgPSByZG1hX2FjY2VwdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZG1hX2FjY2VwdCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK291dDoKKwlyZG1hX3JlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJcmV0dXJuIGRlc3Ryb3k7Cit9CisKKworaW50IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgZHA7CisJaW50IHJldDsKKworCS8qIElmIHRoZSBwZWVyIGRvZXNuJ3QgZG8gcHJvdG9jb2wgbmVnb3RpYXRpb24sIHdlIG11c3QKKwkgKiBkZWZhdWx0IHRvIFJEU3YzLjAgKi8KKwlyZHNfaXdfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTF8zXzApOworCWljLT5pX2Zsb3djdGwgPSByZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbDsJLyogYWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCisJcmV0ID0gcmRzX2l3X3NldHVwX3FwKGNvbm4pOworCWlmIChyZXQpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJkc19pd19zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3X2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwLCBSRFNfUFJPVE9DT0xfVkVSU0lPTik7CisKKwlyZXQgPSByZG1hX2Nvbm5lY3QoY21faWQsICZjb25uX3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRtYV9jb25uZWN0IGZhaWxlZCAoJWQpXG4iLCByZXQpOworCitvdXQ6CisJLyogQmV3YXJlIC0gcmV0dXJuaW5nIG5vbi16ZXJvIHRlbGxzIHRoZSByZG1hX2NtIHRvIGRlc3Ryb3kKKwkgKiB0aGUgY21faWQuIFdlIHNob3VsZCBjZXJ0YWlubHkgbm90IGRvIGl0IGFzIGxvbmcgYXMgd2Ugc3RpbGwKKwkgKiAib3duIiB0aGUgY21faWQuICovCisJaWYgKHJldCkgeworCQlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCQlpZiAoaWMtPmlfY21faWQgPT0gY21faWQpCisJCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2l3X2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkZXN0OworCWludCByZXQ7CisKKwkvKiBYWFggSSB3b25kZXIgd2hhdCBhZmZlY3QgdGhlIHBvcnQgc3BhY2UgaGFzICovCisJLyogZGVsZWdhdGUgY20gZXZlbnQgaGFuZGxlciB0byByZG1hX3RyYW5zcG9ydCAqLworCWljLT5pX2NtX2lkID0gcmRtYV9jcmVhdGVfaWQocmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGljLT5pX2NtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCQlyZHNkZWJ1ZygicmRtYV9jcmVhdGVfaWQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY3JlYXRlZCBjbSBpZCAlcCBmb3IgY29ubiAlcFxuIiwgaWMtPmlfY21faWQsIGNvbm4pOworCisJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNyYy5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19sYWRkcjsKKwlzcmMuc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoMCk7CisKKwkvKiBGaXJzdCwgYmluZCB0byB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgZGV2aWNlLiAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGljLT5pX2NtX2lkLCAoc3RydWN0IHNvY2thZGRyICopICZzcmMpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoInJkbWFfYmluZF9hZGRyKCVwSTQpIGZhaWxlZDogJWRcbiIsCisJCQkJJmNvbm4tPmNfbGFkZHIsIHJldCk7CisJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwlpYy0+aV9kbWFfbG9jYWxfbGtleSA9IHJkc19pd2Rldi0+ZG1hX2xvY2FsX2xrZXk7CisKKwlkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWRlc3Quc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfZmFkZHI7CisJZGVzdC5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwlyZXQgPSByZG1hX3Jlc29sdmVfYWRkcihpYy0+aV9jbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LAorCQkJCVJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiYWRkciByZXNvbHZlIGZhaWxlZCBmb3IgY20gaWQgJXA6ICVkXG4iLCBpYy0+aV9jbV9pZCwKKwkJCSByZXQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgc28gY2FyZWZ1bCBhYm91dCBvbmx5IGNsZWFuaW5nIHVwIHJlc291cmNlcyB0aGF0IHdlcmUgYnVpbHQgdXAKKyAqIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHN0YXJ0dXAuICBJbiBmYWN0IGl0CisgKiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCBlcnIgPSAwOworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisKKwlyZHNkZWJ1ZygiY20gJXAgcGQgJXAgY3EgJXAgJXAgcXAgJXBcbiIsIGljLT5pX2NtX2lkLAorCQkgaWMtPmlfcGQsIGljLT5pX3NlbmRfY3EsIGljLT5pX3JlY3ZfY3EsCisJCSBpYy0+aV9jbV9pZCA/IGljLT5pX2NtX2lkLT5xcCA6IE5VTEwpOworCisJaWYgKGljLT5pX2NtX2lkKSB7CisJCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisKKwkJcmRzZGVidWcoImRpc2Nvbm5lY3RpbmcgY20gJXBcbiIsIGljLT5pX2NtX2lkKTsKKwkJZXJyID0gcmRtYV9kaXNjb25uZWN0KGljLT5pX2NtX2lkKTsKKwkJaWYgKGVycikgeworCQkJLyogQWN0dWFsbHkgdGhpcyBtYXkgaGFwcGVuIHF1aXRlIGZyZXF1ZW50bHksIHdoZW4KKwkJCSAqIGFuIG91dGdvaW5nIGNvbm5lY3QgcmFjZWQgd2l0aCBhbiBpbmNvbWluZyBjb25uZWN0LgorCQkJICovCisJCQlyZHNkZWJ1ZygicmRzX2l3X2Nvbm5fc2h1dGRvd246IGZhaWxlZCB0byBkaXNjb25uZWN0LCIKKwkJCQkgICAiIGNtOiAlcCBlcnIgJWRcbiIsIGljLT5pX2NtX2lkLCBlcnIpOworCQl9CisKKwkJaWYgKGljLT5pX2NtX2lkLT5xcCkgeworCQkJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJCQlpYl9tb2RpZnlfcXAoaWMtPmlfY21faWQtPnFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUpOworCQl9CisKKwkJd2FpdF9ldmVudChyZHNfaXdfcmluZ19lbXB0eV93YWl0LAorCQkJcmRzX2l3X3JpbmdfZW1wdHkoJmljLT5pX3NlbmRfcmluZykgJiYKKwkJCXJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKTsKKworCQlpZiAoaWMtPmlfc2VuZF9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9zZW5kX3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnMsCisJCQkJCSAgIGljLT5pX3NlbmRfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9yZWN2X2hkcnMpCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRycywKKwkJCQkJICAgaWMtPmlfcmVjdl9oZHJzX2RtYSk7CisKKwkJaWYgKGljLT5pX2FjaykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgICBpYy0+aV9hY2ssIGljLT5pX2Fja19kbWEpOworCisJCWlmIChpYy0+aV9zZW5kcykKKwkJCXJkc19pd19zZW5kX2NsZWFyX3JpbmcoaWMpOworCQlpZiAoaWMtPmlfcmVjdnMpCisJCQlyZHNfaXdfcmVjdl9jbGVhcl9yaW5nKGljKTsKKworCQlpZiAoaWMtPmlfY21faWQtPnFwKQorCQkJcmRtYV9kZXN0cm95X3FwKGljLT5pX2NtX2lkKTsKKwkJaWYgKGljLT5pX3NlbmRfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3NlbmRfY3EpOworCQlpZiAoaWMtPmlfcmVjdl9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoaWMtPmlfcmVjdl9jcSk7CisKKwkJLyoKKwkJICogSWYgYXNzb2NpYXRlZCB3aXRoIGFuIHJkc19pd19kZXZpY2U6CisJCSAqIAlNb3ZlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgbm9kZXYgbGlzdC4KKwkJICogCVJlbW92ZSBjbV9pZCBmcm9tIHRoZSBkZXZpY2UgY21faWQgbGlzdC4KKwkJICovCisJCWlmIChpYy0+cmRzX2l3ZGV2KSB7CisKKwkJCXNwaW5fbG9ja19pcnEoJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwkJCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOworCQkJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaWMtPnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJCQlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwkJCXJkc19pd19yZW1vdmVfY21faWQoaWMtPnJkc19pd2RldiwgaWMtPmlfY21faWQpOworCQkJaWMtPnJkc19pd2RldiA9IE5VTEw7CisJCX0KKworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJaWMtPmlfcGQgPSBOVUxMOworCQlpYy0+aV9tciA9IE5VTEw7CisJCWljLT5pX3NlbmRfY3EgPSBOVUxMOworCQlpYy0+aV9yZWN2X2NxID0gTlVMTDsKKwkJaWMtPmlfc2VuZF9oZHJzID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9oZHJzID0gTlVMTDsKKwkJaWMtPmlfYWNrID0gTlVMTDsKKwl9CisJQlVHX09OKGljLT5yZHNfaXdkZXYpOworCisJLyogQ2xlYXIgcGVuZGluZyB0cmFuc21pdCAqLworCWlmIChpYy0+aV9ybSkgeworCQlyZHNfbWVzc2FnZV9wdXQoaWMtPmlfcm0pOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJLyogQ2xlYXIgdGhlIEFDSyBzdGF0ZSAqLworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaXdfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisJaWMtPmlfYWNrX3JlY3YgPSAwOworCisJLyogQ2xlYXIgZmxvdyBjb250cm9sIHN0YXRlICovCisJaWMtPmlfZmxvd2N0bCA9IDA7CisJYXRvbWljX3NldCgmaWMtPmlfY3JlZGl0cywgMCk7CisKKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpZiAoaWMtPmlfaXdpbmMpIHsKKwkJcmRzX2luY19wdXQoJmljLT5pX2l3aW5jLT5paV9pbmMpOworCQlpYy0+aV9pd2luYyA9IE5VTEw7CisJfQorCisJdmZyZWUoaWMtPmlfc2VuZHMpOworCWljLT5pX3NlbmRzID0gTlVMTDsKKwl2ZnJlZShpYy0+aV9yZWN2cyk7CisJaWMtPmlfcmVjdnMgPSBOVUxMOworCXJkc2RlYnVnKCJzaHV0ZG93biBjb21wbGV0ZVxuIik7Cit9CisKK2ludCByZHNfaXdfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBYWFggdG9vIGxhenk/ICovCisJaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmaWMtPml3X25vZGUpOworCW11dGV4X2luaXQoJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJLyoKKwkgKiByZHNfaXdfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXkKKwkgKiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdCBjYW4gYmUgY2FsbGVkLgorCSAqLworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3NlbmRfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93cik7CisJcmRzX2l3X3JpbmdfaW5pdCgmaWMtPmlfcmVjdl9yaW5nLCByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyKTsKKworCWljLT5jb25uID0gY29ubjsKKwljb25uLT5jX3RyYW5zcG9ydF9kYXRhID0gaWM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXdfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml3X25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCisJcmRzZGVidWcoImNvbm4gJXAgY29ubiBpYyAlcFxuIiwgY29ubiwgY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X2Nvbm5fZnJlZSh2b2lkICphcmcpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGFyZzsKKwlyZHNkZWJ1ZygiaWMgJXBcbiIsIGljKTsKKwlsaXN0X2RlbCgmaWMtPml3X25vZGUpOworCWtmcmVlKGljKTsKK30KKworLyoKKyAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCisgKi8KK3ZvaWQKK19fcmRzX2l3X2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJcmRzX2Nvbm5fZHJvcChjb25uKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmRtYS5jIGIvbmV0L3Jkcy9pd19yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfcmRtYS5jCkBAIC0wLDAgKzEsODg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpdy5oIgorCisKKy8qCisgKiBUaGlzIGlzIHN0b3JlZCBhcyBtci0+cl90cmFuc19wcml2YXRlLgorICovCitzdHJ1Y3QgcmRzX2l3X21yIHsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZQkqZGV2aWNlOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbAkqcG9vbDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqY21faWQ7CisKKwlzdHJ1Y3QgaWJfbXIJKm1yOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBhZ2VfbGlzdDsKKworCXN0cnVjdCByZHNfaXdfbWFwcGluZwltYXBwaW5nOworCXVuc2lnbmVkIGNoYXIJCXJlbWFwX2NvdW50OworfTsKKworLyoKKyAqIE91ciBvd24gbGl0dGxlIE1SIHBvb2wKKyAqLworc3RydWN0IHJkc19pd19tcl9wb29sIHsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZQkqZGV2aWNlOwkJLyogYmFjayBwdHIgdG8gdGhlIGRldmljZSB0aGF0IG93bnMgdXMgKi8KKworCXN0cnVjdCBtdXRleAkJZmx1c2hfbG9jazsJCS8qIHNlcmlhbGl6ZSBmbXIgaW52YWxpZGF0ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlmbHVzaF93b3JrZXI7CQkvKiBmbHVzaCB3b3JrZXIgKi8KKworCXNwaW5sb2NrX3QJCWxpc3RfbG9jazsJCS8qIHByb3RlY3QgdmFyaWFibGVzIGJlbG93ICovCisJYXRvbWljX3QJCWl0ZW1fY291bnQ7CQkvKiB0b3RhbCAjIG9mIE1ScyAqLworCWF0b21pY190CQlkaXJ0eV9jb3VudDsJCS8qICMgZGlydHkgb2YgTVJzICovCisJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eV9saXN0OwkJLyogZGlydHkgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsZWFuX2xpc3Q7CQkvKiB1bnVzZWQgJiB1bmFtYXBwZWQgTVJzICovCisJYXRvbWljX3QJCWZyZWVfcGlubmVkOwkJLyogbWVtb3J5IHBpbm5lZCBieSBmcmVlIE1ScyAqLworCXVuc2lnbmVkIGxvbmcJCW1heF9tZXNzYWdlX3NpemU7CS8qIGluIHBhZ2VzICovCisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zOworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtc19zb2Z0OworCXVuc2lnbmVkIGxvbmcJCW1heF9mcmVlX3Bpbm5lZDsKKwlpbnQJCQltYXhfcGFnZXM7Cit9OworCitzdGF0aWMgaW50IHJkc19pd19mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKTsKK3N0YXRpYyB2b2lkIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCByZHNfaXdfaW5pdF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CitzdGF0aWMgaW50IHJkc19pd19tYXBfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkgIHN0cnVjdCByZHNfaXdfbXIgKmlibXIsCisJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cyk7CitzdGF0aWMgdm9pZCByZHNfaXdfZnJlZV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19pd191bm1hcF9mYXN0cmVnX2xpc3Qoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBfbGlzdCwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmtpbGxfbGlzdCk7CitzdGF0aWMgdm9pZCByZHNfaXdfZGVzdHJveV9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwgc3RydWN0IHJkc19pd19tciAqaWJtcik7CisKK3N0YXRpYyBpbnQgcmRzX2l3X2dldF9kZXZpY2Uoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19pd19kZXZpY2UgKipyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICoqY21faWQpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKml3ZGV2OworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQ7CisKKwkqcmRzX2l3ZGV2ID0gTlVMTDsKKwkqY21faWQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpd2RldiwgJnJkc19pd19kZXZpY2VzLCBsaXN0KSB7CisJCXNwaW5fbG9ja19pcnEoJml3ZGV2LT5zcGlubG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9jbV9pZCwgJml3ZGV2LT5jbV9pZF9saXN0LCBsaXN0KSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19hZGRyLCAqZHN0X2FkZHI7CisKKwkJCXNyY19hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpX2NtX2lkLT5jbV9pZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwkJCWRzdF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpX2NtX2lkLT5jbV9pZC0+cm91dGUuYWRkci5kc3RfYWRkcjsKKworCQkJcmRzZGVidWcoImxvY2FsIGlwYWRkciA9ICV4IHBvcnQgJWQsICIKKwkJCQkgInJlbW90ZSBpcGFkZHIgPSAleCBwb3J0ICVkIgorCQkJCSAiLi5sb29raW5nIGZvciAleCBwb3J0ICVkLCAiCisJCQkJICJyZW1vdGUgaXBhZGRyID0gJXggcG9ydCAlZFxuIiwKKwkJCQlzcmNfYWRkci0+c2luX2FkZHIuc19hZGRyLAorCQkJCXNyY19hZGRyLT5zaW5fcG9ydCwKKwkJCQlkc3RfYWRkci0+c2luX2FkZHIuc19hZGRyLAorCQkJCWRzdF9hZGRyLT5zaW5fcG9ydCwKKwkJCQlycy0+cnNfYm91bmRfYWRkciwKKwkJCQlycy0+cnNfYm91bmRfcG9ydCwKKwkJCQlycy0+cnNfY29ubl9hZGRyLAorCQkJCXJzLT5yc19jb25uX3BvcnQpOworI2lmZGVmIFdPUktJTkdfVFVQTEVfREVURUNUSU9OCisJCQlpZiAoc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciA9PSBycy0+cnNfYm91bmRfYWRkciAmJgorCQkJICAgIHNyY19hZGRyLT5zaW5fcG9ydCA9PSBycy0+cnNfYm91bmRfcG9ydCAmJgorCQkJICAgIGRzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHIgPT0gcnMtPnJzX2Nvbm5fYWRkciAmJgorCQkJICAgIGRzdF9hZGRyLT5zaW5fcG9ydCA9PSBycy0+cnNfY29ubl9wb3J0KSB7CisjZWxzZQorCQkJLyogRklYTUUgLSBuZWVkcyB0byBjb21wYXJlIHRoZSBsb2NhbCBhbmQgcmVtb3RlCisJCQkgKiBpcGFkZHIvcG9ydCB0dXBsZSwgYnV0IHRoZSBpcGFkZHIgaXMgdGhlIG9ubHkKKwkJCSAqIGF2YWlsYWJsZSBpbmZvbWF0aW9uIGluIHRoZSByZHNfc29jayAoYXMgdGhlIHJlc3QgYXJlCisJCQkgKiB6ZXJvJ2VkLiAgSXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgcHJvcGVybHkgcG9wdWxhdGVkCisJCQkgKiBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4uLgorCQkJICovCisJCQlpZiAoc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciA9PSBycy0+cnNfYm91bmRfYWRkcikgeworI2VuZGlmCisJCQkJc3Bpbl91bmxvY2tfaXJxKCZpd2Rldi0+c3BpbmxvY2spOworCQkJCSpyZHNfaXdkZXYgPSBpd2RldjsKKwkJCQkqY21faWQgPSBpX2NtX2lkLT5jbV9pZDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEoJml3ZGV2LT5zcGlubG9jayk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X2FkZF9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZDsKKworCWlfY21faWQgPSBrbWFsbG9jKHNpemVvZiAqaV9jbV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpX2NtX2lkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlfY21faWQtPmNtX2lkID0gY21faWQ7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpX2NtX2lkLT5saXN0LCAmcmRzX2l3ZGV2LT5jbV9pZF9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19pd19jbV9pZCAqaV9jbV9pZDsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaV9jbV9pZCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQlpZiAoaV9jbV9pZC0+Y21faWQgPT0gY21faWQpIHsKKwkJCWxpc3RfZGVsKCZpX2NtX2lkLT5saXN0KTsKKwkJCWtmcmVlKGlfY21faWQpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKK30KKworCitpbnQgcmRzX2l3X3VwZGF0ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzcmNfYWRkciwgKmRzdF9hZGRyOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXZfb2xkOworCXN0cnVjdCByZHNfc29jayByczsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqcGNtX2lkOworCWludCByYzsKKworCXNyY19hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZjbV9pZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwlkc3RfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmY21faWQtPnJvdXRlLmFkZHIuZHN0X2FkZHI7CisKKwlycy5yc19ib3VuZF9hZGRyID0gc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKwlycy5yc19ib3VuZF9wb3J0ID0gc3JjX2FkZHItPnNpbl9wb3J0OworCXJzLnJzX2Nvbm5fYWRkciA9IGRzdF9hZGRyLT5zaW5fYWRkci5zX2FkZHI7CisJcnMucnNfY29ubl9wb3J0ID0gZHN0X2FkZHItPnNpbl9wb3J0OworCisJcmMgPSByZHNfaXdfZ2V0X2RldmljZSgmcnMsICZyZHNfaXdkZXZfb2xkLCAmcGNtX2lkKTsKKwlpZiAocmMpCisJCXJkc19pd19yZW1vdmVfY21faWQocmRzX2l3ZGV2LCBjbV9pZCk7CisKKwlyZXR1cm4gcmRzX2l3X2FkZF9jbV9pZChyZHNfaXdkZXYsIGNtX2lkKTsKK30KKworaW50IHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBjb25uIHdhcyBwcmV2aW91c2x5IG9uIHRoZSBub2Rldl9jb25uc19saXN0ICovCisJc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJQlVHX09OKGxpc3RfZW1wdHkoJml3X25vZGV2X2Nvbm5zKSk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pd19ub2RlKSk7CisJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCWljLT5yZHNfaXdkZXYgPSByZHNfaXdkZXY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZpd19ub2Rldl9jb25ucywgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaXdfbm9kZXZfY29ubnMpOworCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpd19ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCit2b2lkIHJkc19pd19yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCAqX2ljOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9zcGxpY2UoJnJkc19pd2Rldi0+Y29ubl9saXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGl3X25vZGUpIHsKKwkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCisJCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOworCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfc2NhdHRlcmxpc3Qoc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCAqc2csCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IHNnX2xlbikKK3sKKwlzZy0+bGlzdCA9IGxpc3Q7CisJc2ctPmxlbiA9IHNnX2xlbjsKKwlzZy0+ZG1hX2xlbiA9IDA7CisJc2ctPmRtYV9ucGFnZXMgPSAwOworCXNnLT5ieXRlcyA9IDA7Cit9CisKK3N0YXRpYyB1NjQgKnJkc19pd19tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiwKKwkJCXN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgKnNnLAorCQkJdW5zaWduZWQgaW50IGRtYV9wYWdlX3NoaWZ0KQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IHJkc19pd2Rldi0+ZGV2OworCXU2NCAqZG1hX3BhZ2VzID0gTlVMTDsKKwl1NjQgZG1hX21hc2s7CisJdW5zaWduZWQgaW50IGRtYV9wYWdlX3NpemU7CisJaW50IGksIGosIHJldDsKKworCWRtYV9wYWdlX3NpemUgPSAxIDw8IGRtYV9wYWdlX3NoaWZ0OworCWRtYV9tYXNrID0gZG1hX3BhZ2Vfc2l6ZSAtIDE7CisKKwlXQVJOX09OKHNnLT5kbWFfbGVuKTsKKworCXNnLT5kbWFfbGVuID0gaWJfZG1hX21hcF9zZyhkZXYsIHNnLT5saXN0LCBzZy0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHVubGlrZWx5KCFzZy0+ZG1hX2xlbikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBkbWFfbWFwX3NnIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCX0KKworCXNnLT5ieXRlcyA9IDA7CisJc2ctPmRtYV9ucGFnZXMgPSAwOworCisJcmV0ID0gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBpIDwgc2ctPmRtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBlbmRfYWRkcjsKKworCQlzZy0+Ynl0ZXMgKz0gZG1hX2xlbjsKKworCQllbmRfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKKwkJaWYgKGRtYV9hZGRyICYgZG1hX21hc2spIHsKKwkJCWlmIChpID4gMCkKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJCWRtYV9hZGRyICY9IH5kbWFfbWFzazsKKwkJfQorCQlpZiAoZW5kX2FkZHIgJiBkbWFfbWFzaykgeworCQkJaWYgKGkgPCBzZy0+ZG1hX2xlbiAtIDEpCisJCQkJZ290byBvdXRfdW5tYXA7CisJCQllbmRfYWRkciA9IChlbmRfYWRkciArIGRtYV9tYXNrKSAmIH5kbWFfbWFzazsKKwkJfQorCisJCXNnLT5kbWFfbnBhZ2VzICs9IChlbmRfYWRkciAtIGRtYV9hZGRyKSA+PiBkbWFfcGFnZV9zaGlmdDsKKwl9CisKKwkvKiBOb3cgZ2F0aGVyIHRoZSBkbWEgYWRkcnMgaW50byBvbmUgbGlzdCAqLworCWlmIChzZy0+ZG1hX25wYWdlcyA+IGZhc3RyZWdfbWVzc2FnZV9zaXplKQorCQlnb3RvIG91dF91bm1hcDsKKworCWRtYV9wYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHU2NCkgKiBzZy0+ZG1hX25wYWdlcywgR0ZQX0FUT01JQyk7CisJaWYgKCFkbWFfcGFnZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJZm9yIChpID0gaiA9IDA7IGkgPCBzZy0+ZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNnLT5saXN0W2ldKTsKKwkJdTY0IGVuZF9hZGRyOworCisJCWVuZF9hZGRyID0gZG1hX2FkZHIgKyBkbWFfbGVuOworCQlkbWFfYWRkciAmPSB+ZG1hX21hc2s7CisJCWZvciAoOyBkbWFfYWRkciA8IGVuZF9hZGRyOyBkbWFfYWRkciArPSBkbWFfcGFnZV9zaXplKQorCQkJZG1hX3BhZ2VzW2orK10gPSBkbWFfYWRkcjsKKwkJQlVHX09OKGogPiBzZy0+ZG1hX25wYWdlcyk7CisJfQorCisJcmV0dXJuIGRtYV9wYWdlczsKKworb3V0X3VubWFwOgorCWliX2RtYV91bm1hcF9zZyhyZHNfaXdkZXYtPmRldiwgc2ctPmxpc3QsIHNnLT5sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwlzZy0+ZG1hX2xlbiA9IDA7CisJa2ZyZWUoZG1hX3BhZ2VzKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCisKK3N0cnVjdCByZHNfaXdfbXJfcG9vbCAqcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sOworCisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKCpwb29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb29sKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogcmRzX2l3X2NyZWF0ZV9tcl9wb29sIGFsbG9jIGVycm9yXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcG9vbC0+ZGV2aWNlID0gcmRzX2l3ZGV2OworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5kaXJ0eV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+Y2xlYW5fbGlzdCk7CisJbXV0ZXhfaW5pdCgmcG9vbC0+Zmx1c2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxpc3RfbG9jayk7CisJSU5JVF9XT1JLKCZwb29sLT5mbHVzaF93b3JrZXIsIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcik7CisKKwlwb29sLT5tYXhfbWVzc2FnZV9zaXplID0gZmFzdHJlZ19tZXNzYWdlX3NpemU7CisJcG9vbC0+bWF4X2l0ZW1zID0gZmFzdHJlZ19wb29sX3NpemU7CisJcG9vbC0+bWF4X2ZyZWVfcGlubmVkID0gcG9vbC0+bWF4X2l0ZW1zICogcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSAvIDQ7CisJcG9vbC0+bWF4X3BhZ2VzID0gZmFzdHJlZ19tZXNzYWdlX3NpemU7CisKKwkvKiBXZSBuZXZlciBhbGxvdyBtb3JlIHRoYW4gbWF4X2l0ZW1zIE1ScyB0byBiZSBhbGxvY2F0ZWQuCisJICogV2hlbiB3ZSBleGNlZWQgbW9yZSB0aGFuIG1heF9pdGVtc19zb2Z0LCB3ZSBzdGFydCBmcmVlaW5nCisJICogaXRlbXMgbW9yZSBhZ2dyZXNzaXZlbHkuCisJICogTWFrZSBzdXJlIHRoYXQgbWF4X2l0ZW1zID4gbWF4X2l0ZW1zX3NvZnQgPiBtYXhfaXRlbXMgLyAyCisJICovCisJcG9vbC0+bWF4X2l0ZW1zX3NvZnQgPSBwb29sLT5tYXhfaXRlbXMgKiAzIC8gNDsKKworCXJldHVybiBwb29sOworfQorCit2b2lkIHJkc19pd19nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisKKwlpaW5mby0+cmRtYV9tcl9tYXggPSBwb29sLT5tYXhfaXRlbXM7CisJaWluZm8tPnJkbWFfbXJfc2l6ZSA9IHBvb2wtPm1heF9wYWdlczsKK30KKwordm9pZCByZHNfaXdfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCkKK3sKKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKwlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAxKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSk7CisJa2ZyZWUocG9vbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJkc19pd19tciAqcmRzX2l3X3JldXNlX2ZtcihzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnBvb2wtPmNsZWFuX2xpc3QpKSB7CisJCWlibXIgPSBsaXN0X2VudHJ5KHBvb2wtPmNsZWFuX2xpc3QubmV4dCwgc3RydWN0IHJkc19pd19tciwgbWFwcGluZy5tX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZpYm1yLT5tYXBwaW5nLm1fbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGlibXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2l3X21yICpyZHNfaXdfYWxsb2NfbXIoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJaW50IGVyciA9IDAsIGl0ZXIgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaWJtciA9IHJkc19pd19yZXVzZV9mbXIocG9vbCk7CisJCWlmIChpYm1yKQorCQkJcmV0dXJuIGlibXI7CisKKwkJLyogTm8gY2xlYW4gTVJzIC0gbm93IHdlIGhhdmUgdGhlIGNob2ljZSBvZiBlaXRoZXIKKwkJICogYWxsb2NhdGluZyBhIGZyZXNoIE1SIHVwIHRvIHRoZSBsaW1pdCBpbXBvc2VkIGJ5IHRoZQorCQkgKiBkcml2ZXIsIG9yIGZsdXNoIGFueSBkaXJ0eSB1bnVzZWQgTVJzLgorCQkgKiBXZSB0cnkgdG8gYXZvaWQgc3RhbGxpbmcgaW4gdGhlIHNlbmQgcGF0aCBpZiBwb3NzaWJsZSwKKwkJICogc28gd2UgYWxsb2NhdGUgYXMgbG9uZyBhcyB3ZSdyZSBhbGxvd2VkIHRvLgorCQkgKgorCQkgKiBXZSdyZSBmdXNzeSB3aXRoIGVuZm9yY2luZyB0aGUgRk1SIGxpbWl0LCB0aG91Z2guIElmIHRoZSBkcml2ZXIKKwkJICogdGVsbHMgdXMgd2UgY2FuJ3QgdXNlIG1vcmUgdGhhbiBOIGZtcnMsIHdlIHNob3VsZG4ndCBzdGFydAorCQkgKiBhcmd1aW5nIHdpdGggaXQgKi8KKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwb29sLT5pdGVtX2NvdW50KSA8PSBwb29sLT5tYXhfaXRlbXMpCisJCQlicmVhazsKKworCQlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKworCQlpZiAoKytpdGVyID4gMikgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfcG9vbF9kZXBsZXRlZCk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwkJfQorCisJCS8qIFdlIGRvIGhhdmUgc29tZSBlbXB0eSBNUnMuIEZsdXNoIHRoZW0gb3V0LiAqLworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9wb29sX3dhaXQpOworCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9CisKKwlpYm1yID0ga3phbGxvYyhzaXplb2YoKmlibXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlibXIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fY2lnYXI7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmlibXItPm1hcHBpbmcubV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaWJtci0+bWFwcGluZy5tX2xpc3QpOworCWlibXItPm1hcHBpbmcubV9tciA9IGlibXI7CisKKwllcnIgPSByZHNfaXdfaW5pdF9mYXN0cmVnKHBvb2wsIGlibXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X25vX2NpZ2FyOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfYWxsb2MpOworCXJldHVybiBpYm1yOworCitvdXRfbm9fY2lnYXI6CisJaWYgKGlibXIpIHsKKwkJcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhwb29sLCBpYm1yKTsKKwkJa2ZyZWUoaWJtcik7CisJfQorCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3ZvaWQgcmRzX2l3X3N5bmNfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gdHJhbnNfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gaWJtci0+ZGV2aWNlOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9GUk9NX0RFVklDRToKKwkJaWJfZG1hX3N5bmNfc2dfZm9yX2NwdShyZHNfaXdkZXYtPmRldiwgaWJtci0+bWFwcGluZy5tX3NnLmxpc3QsCisJCQlpYm1yLT5tYXBwaW5nLm1fc2cuZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UocmRzX2l3ZGV2LT5kZXYsIGlibXItPm1hcHBpbmcubV9zZy5saXN0LAorCQkJaWJtci0+bWFwcGluZy5tX3NnLmRtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZHNfaXdfZmx1c2hfZ29hbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwl1bnNpZ25lZCBpbnQgaXRlbV9jb3VudDsKKworCWl0ZW1fY291bnQgPSBhdG9taWNfcmVhZCgmcG9vbC0+aXRlbV9jb3VudCk7CisJaWYgKGZyZWVfYWxsKQorCQlyZXR1cm4gaXRlbV9jb3VudDsKKworCXJldHVybiAwOworfQorCisvKgorICogRmx1c2ggb3VyIHBvb2wgb2YgTVJzLgorICogQXQgYSBtaW5pbXVtLCBhbGwgY3VycmVudGx5IHVudXNlZCBNUnMgYXJlIHVubWFwcGVkLgorICogSWYgdGhlIG51bWJlciBvZiBNUnMgYWxsb2NhdGVkIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSBhbHNvIHRyeQorICogdG8gZnJlZSBhcyBtYW55IE1ScyBhcyBuZWVkZWQgdG8gZ2V0IGJhY2sgdG8gdGhpcyBsaW1pdC4KKyAqLworc3RhdGljIGludCByZHNfaXdfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yLCAqbmV4dDsKKwlMSVNUX0hFQUQodW5tYXBfbGlzdCk7CisJTElTVF9IRUFEKGtpbGxfbGlzdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbmZyZWVkID0gMCwgbmNsZWFuZWQgPSAwLCBmcmVlX2dvYWw7CisJaW50IHJldCA9IDA7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl9wb29sX2ZsdXNoKTsKKworCW11dGV4X2xvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCS8qIEdldCB0aGUgbGlzdCBvZiBhbGwgbWFwcGluZ3MgdG8gYmUgZGVzdHJveWVkICovCisJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+ZGlydHlfbGlzdCwgJnVubWFwX2xpc3QpOworCWlmIChmcmVlX2FsbCkKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+Y2xlYW5fbGlzdCwgJmtpbGxfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlmcmVlX2dvYWwgPSByZHNfaXdfZmx1c2hfZ29hbChwb29sLCBmcmVlX2FsbCk7CisKKwkvKiBCYXRjaGVkIGludmFsaWRhdGUgb2YgZGlydHkgTVJzLgorCSAqIEZvciBGTVIgYmFzZWQgTVJzLCB0aGUgbWFwcGluZ3Mgb24gdGhlIHVubWFwIGxpc3QgYXJlCisJICogYWN0dWFsbHkgbWVtYmVycyBvZiBhbiBpYm1yIChpYm1yLT5tYXBwaW5nKS4gVGhleSBlaXRoZXIKKwkgKiBtaWdyYXRlIHRvIHRoZSBraWxsX2xpc3QsIG9yIGhhdmUgYmVlbiBjbGVhbmVkIGFuZCBzaG91bGQgYmUKKwkgKiBtb3ZlZCB0byB0aGUgY2xlYW5fbGlzdC4KKwkgKiBGb3IgZmFzdHJlZ3MsIHRoZXkgd2lsbCBiZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGFuZAorCSAqIHdpbGwgYmUgZGVzdHJveWVkIGJ5IHRoZSB1bm1hcCBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnVubWFwX2xpc3QpKSB7CisJCW5jbGVhbmVkID0gcmRzX2l3X3VubWFwX2Zhc3RyZWdfbGlzdChwb29sLCAmdW5tYXBfbGlzdCwgJmtpbGxfbGlzdCk7CisJCS8qIElmIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gZGVzdHJveSBhbGwgTVJzLCBtb3ZlIHRob3NlCisJCSAqIHRoYXQgd2VyZSBzaW1wbHkgY2xlYW5lZCB0byB0aGUga2lsbCBsaXN0ICovCisJCWlmIChmcmVlX2FsbCkKKwkJCWxpc3Rfc3BsaWNlX2luaXQoJnVubWFwX2xpc3QsICZraWxsX2xpc3QpOworCX0KKworCS8qIERlc3Ryb3kgYW55IE1ScyB0aGF0IGFyZSBwYXN0IHRoZWlyIGJlc3QgYmVmb3JlIGRhdGUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWJtciwgbmV4dCwgJmtpbGxfbGlzdCwgbWFwcGluZy5tX2xpc3QpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfZnJlZSk7CisJCWxpc3RfZGVsKCZpYm1yLT5tYXBwaW5nLm1fbGlzdCk7CisJCXJkc19pd19kZXN0cm95X2Zhc3RyZWcocG9vbCwgaWJtcik7CisJCWtmcmVlKGlibXIpOworCQluZnJlZWQrKzsKKwl9CisKKwkvKiBBbnl0aGluZyB0aGF0IHJlbWFpbnMgYXJlIGxhdW5kZXJlZCBpYm1ycywgd2hpY2ggd2UgY2FuIGFkZAorCSAqIGJhY2sgdG8gdGhlIGNsZWFuIGxpc3QuICovCisJaWYgKCFsaXN0X2VtcHR5KCZ1bm1hcF9saXN0KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3Rfc3BsaWNlKCZ1bm1hcF9saXN0LCAmcG9vbC0+Y2xlYW5fbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCX0KKworCWF0b21pY19zdWIobmNsZWFuZWQsICZwb29sLT5kaXJ0eV9jb3VudCk7CisJYXRvbWljX3N1YihuZnJlZWQsICZwb29sLT5pdGVtX2NvdW50KTsKKworCW11dGV4X3VubG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19pd19tcl9wb29sLCBmbHVzaF93b3JrZXIpOworCisJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7Cit9CisKK3ZvaWQgcmRzX2l3X2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gaWJtci0+ZGV2aWNlLT5tcl9wb29sOworCisJcmRzZGVidWcoIlJEUy9JVzogZnJlZV9tciBuZW50cyAldVxuIiwgaWJtci0+bWFwcGluZy5tX3NnLmxlbik7CisJaWYgKCFwb29sKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gaXQgdG8gdGhlIHBvb2wncyBmcmVlIGxpc3QgKi8KKwlyZHNfaXdfZnJlZV9mYXN0cmVnKHBvb2wsIGlibXIpOworCisJLyogSWYgd2UndmUgcGlubmVkIHRvbyBtYW55IHBhZ2VzLCByZXF1ZXN0IGEgZmx1c2ggKi8KKwlpZiAoYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSA+PSBwb29sLT5tYXhfZnJlZV9waW5uZWQKKwkgfHwgYXRvbWljX3JlYWQoJnBvb2wtPmRpcnR5X2NvdW50KSA+PSBwb29sLT5tYXhfaXRlbXMgLyAxMCkKKwkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCisJaWYgKGludmFsaWRhdGUpIHsKKwkJaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkpKSB7CisJCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSB1c2VyIGNyZWF0ZWQgYSBNUiBtYXJrZWQKKwkJCSAqIGFzIHVzZV9vbmNlIGFuZCBpbnZhbGlkYXRlIGF0IHRoZSBzYW1lIHRpbWUuICovCisJCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX2l3X2ZsdXNoX21ycyh2b2lkKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkc19pd2RldiwgJnJkc19pd19kZXZpY2VzLCBsaXN0KSB7CisJCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IHJkc19pd2Rldi0+bXJfcG9vbDsKKworCQlpZiAocG9vbCkKKwkJCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KK30KKwordm9pZCAqcmRzX2l3X2dldF9tcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5lbnRzLAorCQkgICAgc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IE5VTEw7CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCWludCByZXQ7CisKKwlyZXQgPSByZHNfaXdfZ2V0X2RldmljZShycywgJnJkc19pd2RldiwgJmNtX2lkKTsKKwlpZiAocmV0IHx8ICFjbV9pZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJkc19pd2Rldi0+bXJfcG9vbCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpYm1yID0gcmRzX2l3X2FsbG9jX21yKHJkc19pd2Rldik7CisJaWYgKElTX0VSUihpYm1yKSkKKwkJcmV0dXJuIGlibXI7CisKKwlpYm1yLT5jbV9pZCA9IGNtX2lkOworCWlibXItPmRldmljZSA9IHJkc19pd2RldjsKKworCXJldCA9IHJkc19pd19tYXBfZmFzdHJlZyhyZHNfaXdkZXYtPm1yX3Bvb2wsIGlibXIsIHNnLCBuZW50cyk7CisJaWYgKHJldCA9PSAwKQorCQkqa2V5X3JldCA9IGlibXItPm1yLT5ya2V5OworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBmYWlsZWQgdG8gbWFwIG1yIChlcnJubz0lZClcbiIsIHJldCk7CisKK291dDoKKwlpZiAocmV0KSB7CisJCWlmIChpYm1yKQorCQkJcmRzX2l3X2ZyZWVfbXIoaWJtciwgMCk7CisJCWlibXIgPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBpYm1yOworfQorCisvKgorICogaVdBUlAgZmFzdHJlZyBoYW5kbGluZworICoKKyAqIFRoZSBsaWZlIGN5Y2xlIG9mIGEgZmFzdHJlZyByZWdpc3RyYXRpb24gaXMgYSBiaXQgZGlmZmVyZW50IGZyb20KKyAqIEZNUnMuCisgKiBUaGUgaWRlYSBiZWhpbmQgZmFzdHJlZyBpcyB0byBoYXZlIG9uZSBNUiwgdG8gd2hpY2ggd2UgYmluZCBkaWZmZXJlbnQKKyAqIG1hcHBpbmdzIG92ZXIgdGltZS4gVG8gYXZvaWQgc3RhbGxpbmcgb24gdGhlIGV4cGVuc2l2ZSBtYXAgYW5kIGludmFsaWRhdGUKKyAqIG9wZXJhdGlvbnMsIHRoZXNlIG9wZXJhdGlvbnMgYXJlIHBpcGVsaW5lZCBvbiB0aGUgc2FtZSBzZW5kIHF1ZXVlIG9uCisgKiB3aGljaCB3ZSB3YW50IHRvIHNlbmQgdGhlIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcl9rZXkuCisgKgorICogVGhpcyBjcmVhdGVzIGEgYml0IG9mIGEgcHJvYmxlbSBmb3IgdXMsIGFzIHdlIGRvIG5vdCBoYXZlIHRoZSBkZXN0aW5hdGlvbgorICogSVAgaW4gR0VUX01SLCBzbyB0aGUgY29ubmVjdGlvbiBtdXN0IGJlIHNldHVwIHByaW9yIHRvIHRoZSBHRVRfTVIgY2FsbCBmb3IKKyAqIFJETUEgdG8gYmUgY29ycmVjdGx5IHNldHVwLiAgSWYgYSBmYXN0cmVnIHJlcXVlc3QgaXMgcHJlc2VudCwgcmRzX2l3X3htaXQKKyAqIHdpbGwgdHJ5IHRvIHF1ZXVlIGEgTE9DQUxfSU5WIChpZiBuZWVkZWQpIGFuZCBhIEZBU1RfUkVHX01SIHdvcmsgcmVxdWVzdAorICogYmVmb3JlIHF1ZXVpbmcgdGhlIFNFTkQuIFdoZW4gY29tcGxldGlvbnMgZm9yIHRoZXNlIGFycml2ZSwgdGhleSBhcmUKKyAqIGRpc3BhdGNoZWQgdG8gdGhlIE1SIGhhcyBhIGJpdCBzZXQgc2hvd2luZyB0aGF0IFJETWEgY2FuIGJlIHBlcmZvcm1lZC4KKyAqCisgKiBUaGVyZSBpcyBhbm90aGVyIGludGVyZXN0aW5nIGFzcGVjdCB0aGF0J3MgcmVsYXRlZCB0byBpbnZhbGlkYXRpb24uCisgKiBUaGUgYXBwbGljYXRpb24gY2FuIHJlcXVlc3QgdGhhdCBhIG1hcHBpbmcgaXMgaW52YWxpZGF0ZWQgaW4gRlJFRV9NUi4KKyAqIFRoZSBleHBlY3RhdGlvbiB0aGVyZSBpcyB0aGF0IHRoaXMgaW52YWxpZGF0aW9uIHN0ZXAgaW5jbHVkZXMgQUxMCisgKiBQUkVWSU9VU0xZIEZSRUVEIE1Scy4KKyAqLworc3RhdGljIGludCByZHNfaXdfaW5pdF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYgPSBwb29sLT5kZXZpY2U7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqcGFnZV9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgaWJfbXIgKm1yOworCWludCBlcnI7CisKKwltciA9IGliX2FsbG9jX2Zhc3RfcmVnX21yKHJkc19pd2Rldi0+cGQsIHBvb2wtPm1heF9tZXNzYWdlX3NpemUpOworCWlmIChJU19FUlIobXIpKSB7CisJCWVyciA9IFBUUl9FUlIobXIpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfbXIgZmFpbGVkIChlcnI9JWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEZJWE1FIC0gdGhpcyBpcyBvdmVya2lsbCwgYnV0IG1hcHBpbmctPm1fc2cuZG1hX2xlbi9tYXBwaW5nLT5tX3NnLmRtYV9ucGFnZXMKKwkgKiBpcyBub3QgZmlsbGVkIGluLgorCSAqLworCXBhZ2VfbGlzdCA9IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdChyZHNfaXdkZXYtPmRldiwgcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSk7CisJaWYgKElTX0VSUihwYWdlX2xpc3QpKSB7CisJCWVyciA9IFBUUl9FUlIocGFnZV9saXN0KTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCBmYWlsZWQgKGVycj0lZClcbiIsIGVycik7CisJCWliX2RlcmVnX21yKG1yKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpYm1yLT5wYWdlX2xpc3QgPSBwYWdlX2xpc3Q7CisJaWJtci0+bXIgPSBtcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZHNfaXdfcmRtYV9idWlsZF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZykKK3sKKwlzdHJ1Y3QgcmRzX2l3X21yICppYm1yID0gbWFwcGluZy0+bV9tcjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciBmX3dyLCAqZmFpbGVkX3dyOworCWludCByZXQ7CisKKwkvKgorCSAqIFBlcmZvcm0gYSBXUiBmb3IgdGhlIGZhc3RfcmVnX21yLiBFYWNoIGluZGl2aWR1YWwgcGFnZQorCSAqIGluIHRoZSBzZyBsaXN0IGlzIGFkZGVkIHRvIHRoZSBmYXN0IHJlZyBwYWdlIGxpc3QgYW5kIHBsYWNlZAorCSAqIGluc2lkZSB0aGUgZmFzdF9yZWdfbXIgV1IuICBUaGUga2V5IHVzZWQgaXMgYSByb2xsaW5nIDhiaXQKKwkgKiBjb3VudGVyLCB3aGljaCBzaG91bGQgZ3VhcmFudGVlIHVuaXF1ZW5lc3MuCisJICovCisJaWJfdXBkYXRlX2Zhc3RfcmVnX2tleShpYm1yLT5tciwgaWJtci0+cmVtYXBfY291bnQrKyk7CisJbWFwcGluZy0+bV9ya2V5ID0gaWJtci0+bXItPnJrZXk7CisKKwltZW1zZXQoJmZfd3IsIDAsIHNpemVvZihmX3dyKSk7CisJZl93ci53cl9pZCA9IFJEU19JV19GQVNUX1JFR19XUl9JRDsKKwlmX3dyLm9wY29kZSA9IElCX1dSX0ZBU1RfUkVHX01SOworCWZfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gbWFwcGluZy0+bV9zZy5ieXRlczsKKwlmX3dyLndyLmZhc3RfcmVnLnJrZXkgPSBtYXBwaW5nLT5tX3JrZXk7CisJZl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBpYm1yLT5wYWdlX2xpc3Q7CisJZl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gbWFwcGluZy0+bV9zZy5kbWFfbGVuOworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IGlibXItPmRldmljZS0+cGFnZV9zaGlmdDsKKwlmX3dyLndyLmZhc3RfcmVnLmFjY2Vzc19mbGFncyA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKKwkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCWZfd3Iud3IuZmFzdF9yZWcuaW92YV9zdGFydCA9IDA7CisJZl93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWZhaWxlZF93ciA9ICZmX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYm1yLT5jbV9pZC0+cXAsICZmX3dyLCAmZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmX3dyKTsKKwlpZiAocmV0ICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiAlczolZCBpYl9wb3N0X3NlbmQgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfaXdfcmRtYV9mYXN0cmVnX2ludihzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXN0cnVjdCBpYl9zZW5kX3dyIHNfd3IsICpmYWlsZWRfd3I7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWlibXItPmNtX2lkLT5xcCB8fCAhaWJtci0+bXIpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KCZzX3dyLCAwLCBzaXplb2Yoc193cikpOworCXNfd3Iud3JfaWQgPSBSRFNfSVdfTE9DQUxfSU5WX1dSX0lEOworCXNfd3Iub3Bjb2RlID0gSUJfV1JfTE9DQUxfSU5WOworCXNfd3IuZXguaW52YWxpZGF0ZV9ya2V5ID0gaWJtci0+bXItPnJrZXk7CisJc193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKworCWZhaWxlZF93ciA9ICZzX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYm1yLT5jbV9pZC0+cXAsICZzX3dyLCAmZmFpbGVkX3dyKTsKKwlpZiAocmV0ICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6ICVzOiVkIGliX3Bvc3Rfc2VuZCByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X21hcF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIsCisJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJdW5zaWduZWQgaW50IHNnX2xlbikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gcG9vbC0+ZGV2aWNlOworCXN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZyA9ICZpYm1yLT5tYXBwaW5nOworCXU2NCAqZG1hX3BhZ2VzOworCWludCBpLCByZXQgPSAwOworCisJcmRzX2l3X3NldF9zY2F0dGVybGlzdCgmbWFwcGluZy0+bV9zZywgc2csIHNnX2xlbik7CisKKwlkbWFfcGFnZXMgPSByZHNfaXdfbWFwX3NjYXR0ZXJsaXN0KHJkc19pd2RldiwKKwkJCQkmbWFwcGluZy0+bV9zZywKKwkJCQlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQpOworCWlmIChJU19FUlIoZG1hX3BhZ2VzKSkgeworCQlyZXQgPSBQVFJfRVJSKGRtYV9wYWdlcyk7CisJCWRtYV9wYWdlcyA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtYXBwaW5nLT5tX3NnLmRtYV9sZW4gPiBwb29sLT5tYXhfbWVzc2FnZV9zaXplKSB7CisJCXJldCA9IC1FTVNHU0laRTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1hcHBpbmctPm1fc2cuZG1hX25wYWdlczsgKytpKQorCQlpYm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtpXSA9IGRtYV9wYWdlc1tpXTsKKworCXJldCA9IHJkc19pd19yZG1hX2J1aWxkX2Zhc3RyZWcobWFwcGluZyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcmRtYV9tcl91c2VkKTsKKworb3V0OgorCWtmcmVlKGRtYV9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogIkZyZWUiIGEgZmFzdHJlZyBNUi4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X2ZyZWVfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKCFpYm1yLT5tYXBwaW5nLm1fc2cuZG1hX2xlbikKKwkJcmV0dXJuOworCisJcmV0ID0gcmRzX2l3X3JkbWFfZmFzdHJlZ19pbnYoaWJtcik7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJLyogVHJ5IHRvIHBvc3QgdGhlIExPQ0FMX0lOViBXUiB0byB0aGUgcXVldWUuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJbGlzdF9hZGRfdGFpbCgmaWJtci0+bWFwcGluZy5tX2xpc3QsICZwb29sLT5kaXJ0eV9saXN0KTsKKwlhdG9taWNfYWRkKGlibXItPm1hcHBpbmcubV9zZy5sZW4sICZwb29sLT5mcmVlX3Bpbm5lZCk7CisJYXRvbWljX2luYygmcG9vbC0+ZGlydHlfY291bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX2l3X3VubWFwX2Zhc3RyZWdfbGlzdChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBfbGlzdCwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpraWxsX2xpc3QpCit7CisJc3RydWN0IHJkc19pd19tYXBwaW5nICptYXBwaW5nLCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgbmNsZWFuZWQgPSAwOworCUxJU1RfSEVBRChsYXVuZGVyZWQpOworCisJLyogQmF0Y2hlZCBpbnZhbGlkYXRpb24gb2YgZmFzdHJlZyBNUnMuCisJICogV2h5IGRvIHdlIGRvIGl0IHRoaXMgd2F5LCBldmVuIHRob3VnaCB3ZSBjb3VsZCBwaXBlbGluZSB1bm1hcAorCSAqIGFuZCByZW1hcD8gVGhlIHJlYXNvbiBpcyB0aGUgYXBwbGljYXRpb24gc2VtYW50aWNzIC0gd2hlbiB0aGUKKwkgKiBhcHBsaWNhdGlvbiByZXF1ZXN0cyBhbiBpbnZhbGlkYXRpb24gb2YgTVJzLCBpdCBleHBlY3RzIGFsbAorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgUl9LZXlzIHRvIGJlY29tZSBpbnZhbGlkLgorCSAqCisJICogSWYgd2UgaW1wbGVtZW50IE1SIHJldXNlIG5haXZlbHksIHdlIHJpc2sgbWVtb3J5IGNvcnJ1cHRpb24KKwkgKiAodGhpcyBoYXMgYWN0dWFsbHkgYmVlbiBvYnNlcnZlZCkuIFNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yCisJICogcmVxdWlyZXMgdGhhdCBhIE1SIGdvZXMgdGhyb3VnaCBhbiBleHBsaWNpdCB1bm1hcCBvcGVyYXRpb24gYmVmb3JlCisJICogd2UgY2FuIHJldXNlIGl0IGFnYWluLgorCSAqCisJICogV2UgY291bGQgcHJvYmFibHkgaW1wcm92ZSBvbiB0aGlzIGEgbGl0dGxlLCBieSBhbGxvd2luZyBpbW1lZGlhdGUKKwkgKiByZXVzZSBvZiBhIE1SIG9uIHRoZSBzYW1lIHNvY2tldCAoZWcgeW91IGNvdWxkIGFkZCBzbWFsbAorCSAqIGNhY2hlIG9mIHVudXNlZCBNUnMgdG8gc3RyY3QgcmRzX3NvY2tldCAtIEdFVF9NUiBjb3VsZCBncmFiIG9uZQorCSAqIG9mIHRoZXNlIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IGludmFsaWRhdGUpLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSh1bm1hcF9saXN0KSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcHBpbmcsIG5leHQsIHVubWFwX2xpc3QsIG1fbGlzdCkgeworCQkJbGlzdF9tb3ZlKCZtYXBwaW5nLT5tX2xpc3QsICZsYXVuZGVyZWQpOworCQkJbmNsZWFuZWQrKzsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBNb3ZlIGFsbCBsYXVuZGVyZWQgbWFwcGluZ3MgYmFjayB0byB0aGUgdW5tYXAgbGlzdC4KKwkgKiBXZSBkbyBub3Qga2lsbCBhbnkgV1JzIHJpZ2h0IG5vdyAtIGl0IGRvZXNuJ3Qgc2VlbSB0aGUKKwkgKiBmYXN0cmVnIEFQSSBoYXMgYSBtYXhfcmVtYXAgbGltaXQuICovCisJbGlzdF9zcGxpY2VfaW5pdCgmbGF1bmRlcmVkLCB1bm1hcF9saXN0KTsKKworCXJldHVybiBuY2xlYW5lZDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCXN0cnVjdCByZHNfaXdfbXIgKmlibXIpCit7CisJaWYgKGlibXItPnBhZ2VfbGlzdCkKKwkJaWJfZnJlZV9mYXN0X3JlZ19wYWdlX2xpc3QoaWJtci0+cGFnZV9saXN0KTsKKwlpZiAoaWJtci0+bXIpCisJCWliX2RlcmVnX21yKGlibXItPm1yKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmVjdi5jIGIvbmV0L3Jkcy9pd19yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5MzFmMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfcmVjdi5jCkBAIC0wLDAgKzEsODY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfaXdfaW5jb21pbmdfc2xhYjsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2l3X2ZyYWdfc2xhYjsKK3N0YXRpYyBhdG9taWNfdAlyZHNfaXdfYWxsb2NhdGlvbiA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgdm9pZCByZHNfaXdfZnJhZ19kcm9wX3BhZ2Uoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlfX2ZyZWVfcGFnZShmcmFnLT5mX3BhZ2UpOworCWZyYWctPmZfcGFnZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19mcmFnX2ZyZWUoc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcpCit7CisJcmRzZGVidWcoImZyYWcgJXAgcGFnZSAlcFxuIiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlCVUdfT04oZnJhZy0+Zl9wYWdlICE9IE5VTEwpOworCWttZW1fY2FjaGVfZnJlZShyZHNfaXdfZnJhZ19zbGFiLCBmcmFnKTsKK30KKworLyoKKyAqIFdlIG1hcCBhIHBhZ2UgYXQgYSB0aW1lLiAgSXRzIGZyYWdtZW50cyBhcmUgcG9zdGVkIGluIG9yZGVyLiAgVGhpcworICogaXMgY2FsbGVkIGluIGZyYWdtZW50IG9yZGVyIGFzIHRoZSBmcmFnbWVudHMgZ2V0IHNlbmQgY29tcGxldGlvbiBldmVudHMuCisgKiBPbmx5IHRoZSBsYXN0IGZyYWcgaW4gdGhlIHBhZ2UgcGVyZm9ybXMgdGhlIHVubWFwcGluZy4KKyAqCisgKiBJdCdzIE9LIGZvciByaW5nIGNsZWFudXAgdG8gY2FsbCB0aGlzIGluIHdoYXRldmVyIG9yZGVyIGl0IGxpa2VzIGJlY2F1c2UKKyAqIERNQSBpcyBub3QgaW4gZmxpZ2h0IGFuZCBzbyB3ZSBjYW4gdW5tYXAgd2hpbGUgb3RoZXIgcmluZyBlbnRyaWVzIHN0aWxsCisgKiBob2xkIHBhZ2UgcmVmZXJlbmNlcyBpbiB0aGVpciBmcmFncy4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2KQoreworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnID0gcmVjdi0+cl9mcmFnOworCisJcmRzZGVidWcoInJlY3YgJXAgZnJhZyAlcCBwYWdlICVwXG4iLCByZWN2LCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCWlmIChmcmFnLT5mX21hcHBlZCkKKwkJaWJfZG1hX3VubWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCSAgICAgICBmcmFnLT5mX21hcHBlZCwKKwkJCSAgICAgICBSRFNfRlJBR19TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCWZyYWctPmZfbWFwcGVkID0gMDsKK30KKwordm9pZCByZHNfaXdfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKwl1MzIgaTsKKworCWZvciAoaSA9IDAsIHJlY3YgPSBpYy0+aV9yZWN2czsgaSA8IGljLT5pX3JlY3ZfcmluZy53X25yOyBpKyssIHJlY3YrKykgeworCQlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwkJcmVjdi0+cl9pd2luYyA9IE5VTEw7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisKKwkJcmVjdi0+cl93ci5uZXh0ID0gTlVMTDsKKwkJcmVjdi0+cl93ci53cl9pZCA9IGk7CisJCXJlY3YtPnJfd3Iuc2dfbGlzdCA9IHJlY3YtPnJfc2dlOworCQlyZWN2LT5yX3dyLm51bV9zZ2UgPSBSRFNfSVdfUkVDVl9TR0U7CisKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJCXNnZS0+YWRkciA9IDA7CisJCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKwkJc2dlLT5sa2V5ID0gMDsKKworCQlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKGkgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwkJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCQlzZ2UtPmxrZXkgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3JlY3ZfY2xlYXJfb25lKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkJICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdikKK3sKKwlpZiAocmVjdi0+cl9pd2luYykgeworCQlyZHNfaW5jX3B1dCgmcmVjdi0+cl9pd2luYy0+aWlfaW5jKTsKKwkJcmVjdi0+cl9pd2luYyA9IE5VTEw7CisJfQorCWlmIChyZWN2LT5yX2ZyYWcpIHsKKwkJcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisJCWlmIChyZWN2LT5yX2ZyYWctPmZfcGFnZSkKKwkJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZHNfaXdfZnJhZ19mcmVlKHJlY3YtPnJfZnJhZyk7CisJCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisJfQorfQorCit2b2lkIHJkc19pd19yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrKQorCQlyZHNfaXdfcmVjdl9jbGVhcl9vbmUoaWMsICZpYy0+aV9yZWN2c1tpXSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UpCisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZSgmaWMtPmlfZnJhZyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X3JlY3ZfcmVmaWxsX29uZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdiwKKwkJCQkgIGdmcF90IGtwdHJfZ2ZwLCBnZnBfdCBwYWdlX2dmcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmIChyZWN2LT5yX2l3aW5jID09IE5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZyZHNfaXdfYWxsb2NhdGlvbikgPj0gcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uKSB7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfYWxsb2NfbGltaXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVjdi0+cl9pd2luYyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2l3X2luY29taW5nX3NsYWIsCisJCQkJCQkga3B0cl9nZnApOworCQlpZiAocmVjdi0+cl9pd2luYyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCWF0b21pY19pbmMoJnJkc19pd19hbGxvY2F0aW9uKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlY3YtPnJfaXdpbmMtPmlpX2ZyYWdzKTsKKwkJcmRzX2luY19pbml0KCZyZWN2LT5yX2l3aW5jLT5paV9pbmMsIGNvbm4sIGNvbm4tPmNfZmFkZHIpOworCX0KKworCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkgeworCQlyZWN2LT5yX2ZyYWcgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pd19mcmFnX3NsYWIsIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfZnJhZyA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSk7CisJCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gTlVMTDsKKwl9CisKKwlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkgeworCQlpYy0+aV9mcmFnLmZfcGFnZSA9IGFsbG9jX3BhZ2UocGFnZV9nZnApOworCQlpZiAoaWMtPmlfZnJhZy5mX3BhZ2UgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlkbWFfYWRkciA9IGliX2RtYV9tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCSAgaWMtPmlfZnJhZy5mX3BhZ2UsCisJCQkJICBpYy0+aV9mcmFnLmZfb2Zmc2V0LAorCQkJCSAgUkRTX0ZSQUdfU0laRSwKKwkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGljLT5pX2NtX2lkLT5kZXZpY2UsIGRtYV9hZGRyKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIE9uY2Ugd2UgZ2V0IHRoZSBSRFNfUEFHRV9MQVNUX09GRiBmcmFnIHRoZW4gcmRzX2l3X2ZyYWdfdW5tYXAoKQorCSAqIG11c3QgYmUgY2FsbGVkIG9uIHRoaXMgcmVjdi4gIFRoaXMgaGFwcGVucyBhcyBjb21wbGV0aW9ucyBoaXQKKwkgKiBpbiBvcmRlciBvciBvbiBjb25uZWN0aW9uIHNodXRkb3duLgorCSAqLworCXJlY3YtPnJfZnJhZy0+Zl9wYWdlID0gaWMtPmlfZnJhZy5mX3BhZ2U7CisJcmVjdi0+cl9mcmFnLT5mX29mZnNldCA9IGljLT5pX2ZyYWcuZl9vZmZzZXQ7CisJcmVjdi0+cl9mcmFnLT5mX21hcHBlZCA9IGRtYV9hZGRyOworCisJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gZG1hX2FkZHI7CisJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCisJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKHJlY3YgLSBpYy0+aV9yZWN2cykgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWdldF9wYWdlKHJlY3YtPnJfZnJhZy0+Zl9wYWdlKTsKKworCWlmIChpYy0+aV9mcmFnLmZfb2Zmc2V0IDwgUkRTX1BBR0VfTEFTVF9PRkYpIHsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCArPSBSRFNfRlJBR19TSVpFOworCX0gZWxzZSB7CisJCXB1dF9wYWdlKGljLT5pX2ZyYWcuZl9wYWdlKTsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBOVUxMOworCQlpYy0+aV9mcmFnLmZfb2Zmc2V0ID0gMDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHRyaWVzIHRvIGFsbG9jYXRlIGFuZCBwb3N0IHVudXNlZCB3b3JrIHJlcXVlc3RzIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQKKyAqIHRoZXkgaGF2ZSBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXkgbmVlZCB0byBxdWV1ZSByZWNlaXZlZCBmcmFnbWVudHMgaW50bworICogc29ja2V0cy4gIFRoZSBpX3JlY3ZfbXV0ZXggaXMgaGVsZCBoZXJlIHNvIHRoYXQgcmluZ19hbGxvYyBhbmQgX3VuYWxsb2MKKyAqIHBhaXJzIGRvbid0IGdvIHVubWF0Y2hlZC4KKyAqCisgKiAtMSBpcyByZXR1cm5lZCBpZiBwb3N0aW5nIGZhaWxzIGR1ZSB0byB0ZW1wb3JhcnkgcmVzb3VyY2UgZXhoYXVzdGlvbi4KKyAqLworaW50IHJkc19pd19yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGtwdHJfZ2ZwLAorCQkgICAgICAgZ2ZwX3QgcGFnZV9nZnAsIGludCBwcmVmaWxsKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2OworCXN0cnVjdCBpYl9yZWN2X3dyICpmYWlsZWRfd3I7CisJdW5zaWduZWQgaW50IHBvc3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisJdTMyIHBvczsKKworCXdoaWxlICgocHJlZmlsbCB8fCByZHNfY29ubl91cChjb25uKSkKKwkJCSYmIHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEsICZwb3MpKSB7CisJCWlmIChwb3MgPj0gaWMtPmlfcmVjdl9yaW5nLndfbnIpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiQXJnaCAtIHJpbmcgYWxsb2MgcmV0dXJuZWQgcG9zPSV1XG4iLAorCQkJCQlwb3MpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1twb3NdOworCQlyZXQgPSByZHNfaXdfcmVjdl9yZWZpbGxfb25lKGNvbm4sIHJlY3YsIGtwdHJfZ2ZwLCBwYWdlX2dmcCk7CisJCWlmIChyZXQpIHsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBYWFggd2hlbiBjYW4gdGhpcyBmYWlsPyAqLworCQlyZXQgPSBpYl9wb3N0X3JlY3YoaWMtPmlfY21faWQtPnFwLCAmcmVjdi0+cl93ciwgJmZhaWxlZF93cik7CisJCXJkc2RlYnVnKCJyZWN2ICVwIGl3aW5jICVwIHBhZ2UgJXAgYWRkciAlbHUgcmV0ICVkXG4iLCByZWN2LAorCQkJIHJlY3YtPnJfaXdpbmMsIHJlY3YtPnJfZnJhZy0+Zl9wYWdlLAorCQkJIChsb25nKSByZWN2LT5yX2ZyYWctPmZfbWFwcGVkLCByZXQpOworCQlpZiAocmV0KSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmVjdiBwb3N0IG9uICIKKwkJCSAgICAgICAiJXBJNCByZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJICAgICAgIHJldCk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9zdGVkKys7CisJfQorCisJLyogV2UncmUgZG9pbmcgZmxvdyBjb250cm9sIC0gdXBkYXRlIHRoZSB3aW5kb3cuICovCisJaWYgKGljLT5pX2Zsb3djdGwgJiYgcG9zdGVkKQorCQlyZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoY29ubiwgcG9zdGVkKTsKKworCWlmIChyZXQpCisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqcG9zOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCXJkc2RlYnVnKCJwdXJnaW5nIGl3aW5jICVwIGluYyAlcFxuIiwgaXdpbmMsIGluYyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnJhZywgcG9zLCAmaXdpbmMtPmlpX2ZyYWdzLCBmX2l0ZW0pIHsKKwkJbGlzdF9kZWxfaW5pdCgmZnJhZy0+Zl9pdGVtKTsKKwkJcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKGZyYWcpOworCQlyZHNfaXdfZnJhZ19mcmVlKGZyYWcpOworCX0KK30KKwordm9pZCByZHNfaXdfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCisJcmRzX2l3X2luY19wdXJnZShpbmMpOworCXJkc2RlYnVnKCJmcmVlaW5nIGl3aW5jICVwIGluYyAlcFxuIiwgaXdpbmMsIGluYyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZpd2luYy0+aWlfZnJhZ3MpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2l3X2luY29taW5nX3NsYWIsIGl3aW5jKTsKKwlhdG9taWNfZGVjKCZyZHNfaXdfYWxsb2NhdGlvbik7CisJQlVHX09OKGF0b21pY19yZWFkKCZyZHNfaXdfYWxsb2NhdGlvbikgPCAwKTsKK30KKworaW50IHJkc19pd19pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IGlvdmVjICppb3YgPSBmaXJzdF9pb3Y7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmYgPSAwOworCXVuc2lnbmVkIGxvbmcgaW92X29mZiA9IDA7CisJaW50IGNvcGllZCA9IDA7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJaXdpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX2l3X2luY29taW5nLCBpaV9pbmMpOworCWZyYWcgPSBsaXN0X2VudHJ5KGl3aW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCBzaXplIC0gY29waWVkKTsKKwkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHRvX2NvcHksIGxlbiAtIGNvcGllZCk7CisKKwkJcmRzZGVidWcoIiVsdSBieXRlcyB0byB1c2VyIFslcCwgJXp1XSArICVsdSBmcm9tIGZyYWcgIgorCQkJICJbJXAsICVsdV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIGZyYWctPmZfcGFnZSwgZnJhZy0+Zl9vZmZzZXQsIGZyYWdfb2ZmKTsKKworCQkvKiBYWFggbmVlZHMgKyBvZmZzZXQgZm9yIG11bHRpcGxlIHJlY3ZzIHBlciBwYWdlICovCisJCXJldCA9IHJkc19wYWdlX2NvcHlfdG9fdXNlcihmcmFnLT5mX3BhZ2UsCisJCQkJCSAgICBmcmFnLT5mX29mZnNldCArIGZyYWdfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qIGljIHN0YXJ0cyBvdXQga3phbGxvYygpZWQgKi8KK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqd3IgPSAmaWMtPmlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UgKnNnZSA9ICZpYy0+aV9hY2tfc2dlOworCisJc2dlLT5hZGRyID0gaWMtPmlfYWNrX2RtYTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKworCXdyLT5zZ19saXN0ID0gc2dlOworCXdyLT5udW1fc2dlID0gMTsKKwl3ci0+b3Bjb2RlID0gSUJfV1JfU0VORDsKKwl3ci0+d3JfaWQgPSBSRFNfSVdfQUNLX1dSX0lEOworCXdyLT5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworfQorCisvKgorICogWW91J2QgdGhpbmsgdGhhdCB3aXRoIHJlbGlhYmxlIElCIGNvbm5lY3Rpb25zIHlvdSB3b3VsZG4ndCBuZWVkIHRvIGFjaworICogbWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IElCIGhhcmR3YXJlIGdlbmVyYXRlcworICogYW4gYWNrIG1lc3NhZ2UgYmVmb3JlIGl0IGhhcyBETUFlZCB0aGUgbWVzc2FnZSBpbnRvIG1lbW9yeS4gIFRoaXMgY3JlYXRlcyBhCisgKiBwb3RlbnRpYWwgbWVzc2FnZSBsb3NzIGlmIHRoZSBIQ0EgaXMgZGlzYWJsZWQgZm9yIGFueSByZWFzb24gYmV0d2VlbiB3aGVuIGl0CisgKiBzZW5kcyB0aGUgYWNrIGFuZCBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgRE1BZWQgYW5kIHByb2Nlc3NlZC4gIFRoaXMgaXMgb25seSBhCisgKiBwb3RlbnRpYWwgaXNzdWUgaWYgYW5vdGhlciBIQ0EgaXMgYXZhaWxhYmxlIGZvciBmYWlsLW92ZXIuCisgKgorICogV2hlbiB0aGUgcmVtb3RlIGhvc3QgcmVjZWl2ZXMgb3VyIGFjayB0aGV5J2xsIGZyZWUgdGhlIHNlbnQgbWVzc2FnZSBmcm9tCisgKiB0aGVpciBzZW5kIHF1ZXVlLiAgVG8gZGVjcmVhc2UgdGhlIGxhdGVuY3kgb2YgdGhpcyB3ZSBhbHdheXMgc2VuZCBhbiBhY2sKKyAqIGltbWVkaWF0ZWx5IGFmdGVyIHdlJ3ZlIHJlY2VpdmVkIG1lc3NhZ2VzLgorICoKKyAqIEZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGhhdmUgb25lIGFjayBpbiBmbGlnaHQgYXQgYSB0aW1lLiAgVGhpcyBwdXRzCisgKiBwcmVzc3VyZSBvbiBzZW5kZXJzIHRvIGhhdmUgZGVlcCBlbm91Z2ggc2VuZCBxdWV1ZXMgdG8gYWJzb3JiIHRoZSBsYXRlbmN5IG9mCisgKiBhIHNpbmdsZSBhY2sgZnJhbWUgYmVpbmcgaW4gZmxpZ2h0LiAgVGhpcyBtaWdodCBub3QgYmUgZ29vZCBlbm91Z2guCisgKgorICogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZlIGEgbG9uZy1saXZlZCBzZW5kX3dyIGFuZCBzZ2Ugd2hpY2ggcG9pbnQgdG8gYQorICogc3RhdGljYWxseSBhbGxvY2F0ZWQgYWNrIGZyYW1lLiAgVGhpcyBhY2sgd3IgZG9lcyBub3QgZmFsbCB1bmRlciB0aGUgcmluZworICogYWNjb3VudGluZyB0aGF0IHRoZSB0eCBhbmQgcnggd3JzIGRvLiAgVGhlIFFQIGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgbWFrZXMKKyAqIHJvb20gZm9yIGl0IGJleW9uZCB0aGUgcmluZyBzaXplLiAgU2VuZCBjb21wbGV0aW9uIG5vdGljZXMgaXRzIHNwZWNpYWwKKyAqIHdyX2lkIGFuZCBhdm9pZHMgd29ya2luZyB3aXRoIHRoZSByaW5nIGluIHRoYXQgY2FzZS4KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTY0IHNlcSwKKwkJCQlpbnQgYWNrX3JlcXVpcmVkKQoreworCXJkc19pd19zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOworCWlmIChhY2tfcmVxdWlyZWQpIHsKKwkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJfQorfQorCitzdGF0aWMgdTY0IHJkc19pd19nZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlyZXR1cm4gaWMtPmlfYWNrX25leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZW5kX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHMpCit7CisJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9IGljLT5pX2FjazsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXU2NCBzZXE7CisJaW50IHJldDsKKworCXNlcSA9IHJkc19pd19nZXRfYWNrKGljKTsKKworCXJkc2RlYnVnKCJzZW5kX2FjazogaWMgJXAgYWNrICVsbHVcbiIsIGljLCAodW5zaWduZWQgbG9uZyBsb25nKSBzZXEpOworCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihoZHIsIDAsIDAsIDApOworCWhkci0+aF9hY2sgPSBjcHVfdG9fYmU2NChzZXEpOworCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKGhkcik7CisJaWMtPmlfYWNrX3F1ZXVlZCA9IGppZmZpZXM7CisKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmaWMtPmlfYWNrX3dyLCAmZmFpbGVkX3dyKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQkvKiBGYWlsZWQgdG8gc2VuZC4gUmVsZWFzZSB0aGUgV1IsIGFuZAorCQkgKiBmb3JjZSBhbm90aGVyIEFDSy4KKwkJICovCisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbmRfZmFpbHVyZSk7CisJCS8qIE5lZWQgdG8gZmluZXNzZSB0aGlzIGxhdGVyLiAqLworCQlCVUcoKTsKKwl9IGVsc2UKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW50KTsKK30KKworLyoKKyAqIFRoZXJlIGFyZSAzIHdheXMgb2YgZ2V0dGluZyBhY2tub3dsZWRnZW1lbnRzIHRvIHRoZSBwZWVyOgorICogIDEuCVdlIGNhbGwgcmRzX2l3X2F0dGVtcHRfYWNrIGZyb20gdGhlIHJlY3YgY29tcGxldGlvbiBoYW5kbGVyCisgKgl0byBzZW5kIGFuIEFDSy1vbmx5IGZyYW1lLgorICoJSG93ZXZlciwgdGhlcmUgY2FuIGJlIG9ubHkgb25lIHN1Y2ggZnJhbWUgaW4gdGhlIHNlbmQgcXVldWUKKyAqCWF0IGFueSB0aW1lLCBzbyB3ZSBtYXkgaGF2ZSB0byBwb3N0cG9uZSBpdC4KKyAqICAyLglXaGVuIGFub3RoZXIgKGRhdGEpIHBhY2tldCBpcyB0cmFuc21pdHRlZCB3aGlsZSB0aGVyZSdzCisgKglhbiBBQ0sgaW4gdGhlIHF1ZXVlLCB3ZSBwaWdneWJhY2sgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIKKyAqCW9uIHRoZSBkYXRhIHBhY2tldC4KKyAqICAzLglJZiB0aGUgQUNLIFdSIGlzIGRvbmUgc2VuZGluZywgd2UgZ2V0IGNhbGxlZCBmcm9tIHRoZQorICoJc2VuZCBxdWV1ZSBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCBjaGVjayB3aGV0aGVyIHRoZXJlJ3MKKyAqCWFub3RoZXIgQUNLIHBlbmRpbmcgKHBvc3Rwb25lZCBiZWNhdXNlIHRoZSBXUiB3YXMgb24gdGhlCisgKglxdWV1ZSkuIElmIHNvLCB3ZSB0cmFuc21pdCBpdC4KKyAqCisgKiBXZSBtYWludGFpbiAyIHZhcmlhYmxlczoKKyAqICAtCWlfYWNrX2ZsYWdzLCB3aGljaCBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBBQ0sgV1IKKyAqCWlzIGN1cnJlbnRseSBpbiB0aGUgc2VuZCBxdWV1ZSBvciBub3QgKElCX0FDS19JTl9GTElHSFQpCisgKiAgLQlpX2Fja19uZXh0LCB3aGljaCBpcyB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgd2UgcmVjZWl2ZWQKKyAqCisgKiBQb3RlbnRpYWxseSwgc2VuZCBxdWV1ZSBhbmQgcmVjZWl2ZSBxdWV1ZSBoYW5kbGVycyBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKyAqCisgKiBSZWNvbm5lY3RpbmcgY29tcGxpY2F0ZXMgdGhpcyBwaWN0dXJlIGp1c3Qgc2xpZ2h0bHkuIFdoZW4gd2UKKyAqIHJlY29ubmVjdCwgd2UgbWF5IGJlIHNlZWluZyBkdXBsaWNhdGUgcGFja2V0cy4gVGhlIHBlZXIKKyAqIGlzIHJldHJhbnNtaXR0aW5nIHRoZW0sIGJlY2F1c2UgaXQgaGFzbid0IHNlZW4gYW4gQUNLIGZvcgorICogdGhlbS4gSXQgaXMgaW1wb3J0YW50IHRoYXQgd2UgQUNLIHRoZXNlLgorICoKKyAqIEFDSyBtaXRpZ2F0aW9uIGFkZHMgYSBoZWFkZXIgZmxhZyAiQUNLX1JFUVVJUkVEIjsgYW55IHBhY2tldCB3aXRoCisgKiB0aGlzIGZsYWcgc2V0ICpNVVNUKiBiZSBhY2tub3dsZWRnZWQgaW1tZWRpYXRlbHkuCisgKi8KKworLyoKKyAqIFdoZW4gd2UgZ2V0IGhlcmUsIHdlJ3JlIGNhbGxlZCBmcm9tIHRoZSByZWN2IHF1ZXVlIGhhbmRsZXIuCisgKiBDaGVjayB3aGV0aGVyIHdlIG91Z2h0IHRvIHRyYW5zbWl0IGFuIEFDSy4KKyAqLwordm9pZCByZHNfaXdfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwl1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHM7CisKKwlpZiAoIXRlc3RfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpKQorCQlyZXR1cm47CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKSkgeworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3NlbmRfZGVsYXllZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDYW4gd2UgZ2V0IGEgc2VuZCBjcmVkaXQ/ICovCisJaWYgKCFyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDEsICZhZHZfY3JlZGl0cywgMCkpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3Rocm90dGxlKTsKKwkJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pd19zZW5kX2FjayhpYywgYWR2X2NyZWRpdHMpOworfQorCisvKgorICogV2UgZ2V0IGhlcmUgZnJvbSB0aGUgc2VuZCBjb21wbGV0aW9uIGhhbmRsZXIsIHdoZW4gdGhlCisgKiBhZGFwdGVyIHRlbGxzIHVzIHRoZSBBQ0sgZnJhbWUgd2FzIHNlbnQuCisgKi8KK3ZvaWQgcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXJkc19pd19hdHRlbXB0X2FjayhpYyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgcmVndWxhciB4bWl0IGNvZGUgd2hlbiBpdCB3YW50cyB0byBwaWdneWJhY2sKKyAqIGFuIEFDSyBvbiBhbiBvdXRnb2luZyBmcmFtZS4KKyAqLwordTY0IHJkc19pd19waWdneWJfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW5kX3BpZ2d5YmFja2VkKTsKKwlyZXR1cm4gcmRzX2l3X2dldF9hY2soaWMpOworfQorCisvKgorICogSXQncyBraW5kIG9mIGxhbWUgdGhhdCB3ZSdyZSBjb3B5aW5nIGZyb20gdGhlIHBvc3RlZCByZWNlaXZlIHBhZ2VzIGludG8KKyAqIGxvbmctbGl2ZWQgYml0bWFwcy4gIFdlIGNvdWxkIGhhdmUgcG9zdGVkIHRoZSBiaXRtYXBzIGFuZCByZG1hIHdyaXR0ZW4gaW50bworICogdGhlbS4gIEJ1dCByZWNlaXZpbmcgbmV3IGNvbmdlc3Rpb24gYml0bWFwcyBzaG91bGQgYmUgYSAqcmFyZSogZXZlbnQsIHNvCisgKiBob3BlZnVsbHkgd2Ugd29uJ3QgbmVlZCB0byBpbnZlc3QgdGhhdCBjb21wbGV4aXR5IGluIG1ha2luZyBpdCBtb3JlCisgKiBlZmZpY2llbnQuICBCeSBjb3B5aW5nIHdlIGNhbiBzaGFyZSBhIHNpbXBsZXIgY29yZSB3aXRoIFRDUCB3aGljaCBoYXMgdG8KKyAqIGNvcHkuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19jb25nX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICAgc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmMpCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCXVuc2lnbmVkIGludCBtYXBfb2ZmOworCXVuc2lnbmVkIGludCBtYXBfcGFnZTsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZzsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmOworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGNvcGllZDsKKwl1aW50NjRfdCB1bmNvbmdlc3RlZCA9IDA7CisJdm9pZCAqYWRkcjsKKworCS8qIGNhdGNoIGNvbXBsZXRlbHkgY29ycnVwdCBwYWNrZXRzICovCisJaWYgKGJlMzJfdG9fY3B1KGl3aW5jLT5paV9pbmMuaV9oZHIuaF9sZW4pICE9IFJEU19DT05HX01BUF9CWVRFUykKKwkJcmV0dXJuOworCisJbWFwID0gY29ubi0+Y19mY29uZzsKKwltYXBfcGFnZSA9IDA7CisJbWFwX29mZiA9IDA7CisKKwlmcmFnID0gbGlzdF9lbnRyeShpd2luYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJZnJhZ19vZmYgPSAwOworCisJY29waWVkID0gMDsKKworCXdoaWxlIChjb3BpZWQgPCBSRFNfQ09OR19NQVBfQllURVMpIHsKKwkJdWludDY0X3QgKnNyYywgKmRzdDsKKwkJdW5zaWduZWQgaW50IGs7CisKKwkJdG9fY29weSA9IG1pbihSRFNfRlJBR19TSVpFIC0gZnJhZ19vZmYsIFBBR0VfU0laRSAtIG1hcF9vZmYpOworCQlCVUdfT04odG9fY29weSAmIDcpOyAvKiBNdXN0IGJlIDY0Yml0IGFsaWduZWQuICovCisKKwkJYWRkciA9IGttYXBfYXRvbWljKGZyYWctPmZfcGFnZSwgS01fU09GVElSUTApOworCisJCXNyYyA9IGFkZHIgKyBmcmFnX29mZjsKKwkJZHN0ID0gKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1ttYXBfcGFnZV0gKyBtYXBfb2ZmOworCQlmb3IgKGsgPSAwOyBrIDwgdG9fY29weTsgayArPSA4KSB7CisJCQkvKiBSZWNvcmQgcG9ydHMgdGhhdCBiZWNhbWUgdW5jb25nZXN0ZWQsIGllCisJCQkgKiBiaXRzIHRoYXQgY2hhbmdlZCBmcm9tIDAgdG8gMS4gKi8KKwkJCXVuY29uZ2VzdGVkIHw9IH4oKnNyYykgJiAqZHN0OworCQkJKmRzdCsrID0gKnNyYysrOworCQl9CisJCWt1bm1hcF9hdG9taWMoYWRkciwgS01fU09GVElSUTApOworCisJCWNvcGllZCArPSB0b19jb3B5OworCisJCW1hcF9vZmYgKz0gdG9fY29weTsKKwkJaWYgKG1hcF9vZmYgPT0gUEFHRV9TSVpFKSB7CisJCQltYXBfb2ZmID0gMDsKKwkJCW1hcF9wYWdlKys7CisJCX0KKworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQlpZiAoZnJhZ19vZmYgPT0gUkRTX0ZSQUdfU0laRSkgeworCQkJZnJhZyA9IGxpc3RfZW50cnkoZnJhZy0+Zl9pdGVtLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJCQlmcmFnX29mZiA9IDA7CisJCX0KKwl9CisKKwkvKiB0aGUgY29uZ2VzdGlvbiBtYXAgaXMgaW4gbGl0dGxlIGVuZGlhbiBvcmRlciAqLworCXVuY29uZ2VzdGVkID0gbGU2NF90b19jcHUodW5jb25nZXN0ZWQpOworCisJcmRzX2NvbmdfbWFwX3VwZGF0ZWQobWFwLCB1bmNvbmdlc3RlZCk7Cit9CisKKy8qCisgKiBSaW5ncyBhcmUgcG9zdGVkIHdpdGggYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5J2xsIG5lZWQgdG8gcXVldWUgdGhlCisgKiBpbmNvbWluZyBtZXNzYWdlIHRvIHRoZSByZWNlaXZpbmcgc29ja2V0IHNvIHRoaXMgY2FuJ3QgZmFpbC4KKyAqIEFsbCBmcmFnbWVudHMgc3RhcnQgd2l0aCBhIGhlYWRlciwgc28gd2UgY2FuIG1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVjZWl2aW5nCisgKiBnYXJiYWdlLCBhbmQgd2UgY2FuIHRlbGwgYSBzbWFsbCA4IGJ5dGUgZnJhZ21lbnQgZnJvbSBhbiBBQ0sgZnJhbWUuCisgKi8KK3N0cnVjdCByZHNfaXdfYWNrX3N0YXRlIHsKKwl1NjQJCWFja19uZXh0OworCXU2NAkJYWNrX3JlY3Y7CisJdW5zaWduZWQgaW50CWFja19yZXF1aXJlZDoxOworCXVuc2lnbmVkIGludAlhY2tfbmV4dF92YWxpZDoxOworCXVuc2lnbmVkIGludAlhY2tfcmVjdl92YWxpZDoxOworfTsKKworc3RhdGljIHZvaWQgcmRzX2l3X3Byb2Nlc3NfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YsIHUzMiBieXRlX2xlbiwKKwkJCQlzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmMgPSBpYy0+aV9pd2luYzsKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaWhkciwgKmhkcjsKKworCS8qIFhYWCBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24gaWYgcG9ydCAwLDAgYXJlIHNlZW4/ICovCisKKwlyZHNkZWJ1ZygiaWMgJXAgaXdpbmMgJXAgcmVjdiAlcCBieXRlIGxlbiAldVxuIiwgaWMsIGl3aW5jLCByZWN2LAorCQkgYnl0ZV9sZW4pOworCisJaWYgKGJ5dGVfbGVuIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGRpZG4ndCBpbmNsdWUgYSAiCisJCSAgICAgICAiaGVhZGVyLCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZXR1cm47CisJfQorCWJ5dGVfbGVuIC09IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlpaGRyID0gJmljLT5pX3JlY3ZfaGRyc1tyZWN2IC0gaWMtPmlfcmVjdnNdOworCisJLyogVmFsaWRhdGUgdGhlIGNoZWNrc3VtLiAqLworCWlmICghcmRzX21lc3NhZ2VfdmVyaWZ5X2NoZWNrc3VtKGloZHIpKSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKKwkJICAgICAgICJmcm9tICVwSTQgaGFzIGNvcnJ1cHRlZCBoZWFkZXIgLSAiCisJCSAgICAgICAiZm9yY2luZyBhIHJlY29ubmVjdFxuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZHJvcF9iYWRfY2hlY2tzdW0pOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyB0aGUgQUNLIHNlcXVlbmNlIHdoaWNoIGNvbWVzIHdpdGggZXZlcnkgcGFja2V0ICovCisJc3RhdGUtPmFja19yZWN2ID0gYmU2NF90b19jcHUoaWhkci0+aF9hY2spOworCXN0YXRlLT5hY2tfcmVjdl92YWxpZCA9IDE7CisKKwkvKiBQcm9jZXNzIHRoZSBjcmVkaXRzIHVwZGF0ZSBpZiB0aGVyZSB3YXMgb25lICovCisJaWYgKGloZHItPmhfY3JlZGl0KQorCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBpaGRyLT5oX2NyZWRpdCk7CisKKwlpZiAoaWhkci0+aF9zcG9ydCA9PSAwICYmIGloZHItPmhfZHBvcnQgPT0gMCAmJiBieXRlX2xlbiA9PSAwKSB7CisJCS8qIFRoaXMgaXMgYW4gQUNLLW9ubHkgcGFja2V0LiBUaGUgZmFjdCB0aGF0IGl0IGdldHMKKwkJICogc3BlY2lhbCB0cmVhdG1lbnQgaGVyZSBpcyB0aGF0IGhpc3RvcmljYWxseSwgQUNLcworCQkgKiB3ZXJlIHJhdGhlciBzcGVjaWFsIGJlYXN0cy4KKwkJICovCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfcmVjZWl2ZWQpOworCisJCS8qCisJCSAqIFVzdWFsbHkgdGhlIGZyYWdzIG1ha2UgdGhlaXIgd2F5IG9uIHRvIGluY3MgYW5kIGFyZSB0aGVuIGZyZWVkIGFzCisJCSAqIHRoZSBpbmMgaXMgZnJlZWQuICBXZSBkb24ndCBnbyB0aGF0IHJvdXRlLCBzbyB3ZSBoYXZlIHRvIGRyb3AgdGhlCisJCSAqIHBhZ2UgcmVmIG91cnNlbHZlcy4gIFdlIGNhbid0IGp1c3QgbGVhdmUgdGhlIHBhZ2Ugb24gdGhlIHJlY3YKKwkJICogYmVjYXVzZSB0aGF0IGNvbmZ1c2VzIHRoZSBkbWEgbWFwcGluZyBvZiBwYWdlcyBhbmQgZWFjaCByZWN2J3MgdXNlCisJCSAqIG9mIGEgcGFydGlhbCBwYWdlLiAgV2UgY2FuIGxlYXZlIHRoZSBmcmFnLCB0aG91Z2gsIGl0IHdpbGwgYmUKKwkJICogcmV1c2VkLgorCQkgKgorCQkgKiBGSVhNRTogRm9sZCB0aGlzIGludG8gdGhlIGNvZGUgcGF0aCBiZWxvdy4KKwkJICovCisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShyZWN2LT5yX2ZyYWcpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gaW5jIG9uIHRoZSBjb25uZWN0aW9uIHRoZW4gdGhpcworCSAqIGZyYWdtZW50IGhhcyBhIGhlYWRlciBhbmQgc3RhcnRzIGEgbWVzc2FnZS4uIGNvcHkgaXRzIGhlYWRlcgorCSAqIGludG8gdGhlIGluYyBhbmQgc2F2ZSB0aGUgaW5jIHNvIHdlIGNhbiBoYW5nIHVwY29taW5nIGZyYWdtZW50cworCSAqIG9mZiBpdHMgbGlzdC4KKwkgKi8KKwlpZiAoaXdpbmMgPT0gTlVMTCkgeworCQlpd2luYyA9IHJlY3YtPnJfaXdpbmM7CisJCXJlY3YtPnJfaXdpbmMgPSBOVUxMOworCQlpYy0+aV9pd2luYyA9IGl3aW5jOworCisJCWhkciA9ICZpd2luYy0+aWlfaW5jLmlfaGRyOworCQltZW1jcHkoaGRyLCBpaGRyLCBzaXplb2YoKmhkcikpOworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gYmUzMl90b19jcHUoaGRyLT5oX2xlbik7CisKKwkJcmRzZGVidWcoImljICVwIGl3aW5jICVwIHJlbSAldSBmbGFnIDB4JXhcbiIsIGljLCBpd2luYywKKwkJCSBpYy0+aV9yZWN2X2RhdGFfcmVtLCBoZHItPmhfZmxhZ3MpOworCX0gZWxzZSB7CisJCWhkciA9ICZpd2luYy0+aWlfaW5jLmlfaGRyOworCQkvKiBXZSBjYW4ndCBqdXN0IHVzZSBtZW1jbXAgaGVyZTsgZnJhZ21lbnRzIG9mIGEKKwkJICogc2luZ2xlIG1lc3NhZ2UgbWF5IGNhcnJ5IGRpZmZlcmVudCBBQ0tzICovCisJCWlmIChoZHItPmhfc2VxdWVuY2UgIT0gaWhkci0+aF9zZXF1ZW5jZQorCQkgfHwgaGRyLT5oX2xlbiAhPSBpaGRyLT5oX2xlbgorCQkgfHwgaGRyLT5oX3Nwb3J0ICE9IGloZHItPmhfc3BvcnQKKwkJIHx8IGhkci0+aF9kcG9ydCAhPSBpaGRyLT5oX2Rwb3J0KSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLAorCQkJCSJmcmFnbWVudCBoZWFkZXIgbWlzbWF0Y2g7IGZvcmNpbmcgcmVjb25uZWN0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWxpc3RfYWRkX3RhaWwoJnJlY3YtPnJfZnJhZy0+Zl9pdGVtLCAmaXdpbmMtPmlpX2ZyYWdzKTsKKwlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJaWYgKGljLT5pX3JlY3ZfZGF0YV9yZW0gPiBSRFNfRlJBR19TSVpFKQorCQlpYy0+aV9yZWN2X2RhdGFfcmVtIC09IFJEU19GUkFHX1NJWkU7CisJZWxzZSB7CisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gPSAwOworCQlpYy0+aV9pd2luYyA9IE5VTEw7CisKKwkJaWYgKGl3aW5jLT5paV9pbmMuaV9oZHIuaF9mbGFncyA9PSBSRFNfRkxBR19DT05HX0JJVE1BUCkKKwkJCXJkc19pd19jb25nX3JlY3YoY29ubiwgaXdpbmMpOworCQllbHNlIHsKKwkJCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfZmFkZHIsIGNvbm4tPmNfbGFkZHIsCisJCQkJCSAgJml3aW5jLT5paV9pbmMsIEdGUF9BVE9NSUMsCisJCQkJCSAgS01fU09GVElSUTApOworCQkJc3RhdGUtPmFja19uZXh0ID0gYmU2NF90b19jcHUoaGRyLT5oX3NlcXVlbmNlKTsKKwkJCXN0YXRlLT5hY2tfbmV4dF92YWxpZCA9IDE7CisJCX0KKworCQkvKiBFdmFsdWF0ZSB0aGUgQUNLX1JFUVVJUkVEIGZsYWcgKmFmdGVyKiB3ZSByZWNlaXZlZAorCQkgKiB0aGUgY29tcGxldGUgZnJhbWUsIGFuZCBhZnRlciBidW1waW5nIHRoZSBuZXh0X3J4CisJCSAqIHNlcXVlbmNlLiAqLworCQlpZiAoaGRyLT5oX2ZsYWdzICYgUkRTX0ZMQUdfQUNLX1JFUVVJUkVEKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9hY2tfcmVxdWlyZWQpOworCQkJc3RhdGUtPmFja19yZXF1aXJlZCA9IDE7CisJCX0KKworCQlyZHNfaW5jX3B1dCgmaXdpbmMtPmlpX2luYyk7CisJfQorfQorCisvKgorICogUGx1Y2tpbmcgdGhlIG9sZGVzdCBlbnRyeSBmcm9tIHRoZSByaW5nIGNhbiBiZSBkb25lIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgdGhyZWFkIHJlZmlsbGluZyB0aGUgcmluZy4gIEVhY2ggcmluZyBvcGVyYXRpb24gaXMgcHJvdGVjdGVkIGJ5CisgKiBzcGlubG9ja3MgYW5kIHRoZSB0cmFuc2llbnQgc3RhdGUgb2YgcmVmaWxsaW5nIGRvZXNuJ3QgY2hhbmdlIHRoZQorICogcmVjb3JkaW5nIG9mIHdoaWNoIGVudHJ5IGlzIG9sZGVzdC4KKyAqCisgKiBUaGlzIHJlbGllcyBvbiBJQiBvbmx5IGNhbGxpbmcgb25lIGNxIGNvbXBfaGFuZGxlciBmb3IgZWFjaCBjcSBzbyB0aGF0CisgKiB0aGVyZSB3aWxsIG9ubHkgYmUgb25lIGNhbGxlciBvZiByZHNfcmVjdl9pbmNvbWluZygpIHBlciBSRFMgY29ubmVjdGlvbi4KKyAqLwordm9pZCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSBzdGF0ZSA9IHsgMCwgfTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKworCXJkc2RlYnVnKCJjb25uICVwIGNxICVwXG4iLCBjb25uLCBjcSk7CisKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfY3FfY2FsbCk7CisKKwlpYl9yZXFfbm90aWZ5X2NxKGNxLCBJQl9DUV9TT0xJQ0lURUQpOworCisJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CisJCXJkc2RlYnVnKCJ3YyB3cl9pZCAweCVsbHggc3RhdHVzICV1IGJ5dGVfbGVuICV1IGltbV9kYXRhICV1XG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd2Mud3JfaWQsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4sCisJCQkgYmUzMl90b19jcHUod2MuZXguaW1tX2RhdGEpKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NxX2V2ZW50KTsKKworCQlyZWN2ID0gJmljLT5pX3JlY3ZzW3Jkc19pd19yaW5nX29sZGVzdCgmaWMtPmlfcmVjdl9yaW5nKV07CisKKwkJcmRzX2l3X3JlY3ZfdW5tYXBfcGFnZShpYywgcmVjdik7CisKKwkJLyoKKwkJICogQWxzbyBwcm9jZXNzIHJlY3ZzIGluIGNvbm5lY3Rpbmcgc3RhdGUgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZQorCQkgKiB0byBnZXQgYSByZWN2IGNvbXBsZXRpb24gX2JlZm9yZV8gdGhlIHJkbWFjbSBFU1RBQkxJU0hFRAorCQkgKiBldmVudCBpcyBwcm9jZXNzZWQuCisJCSAqLworCQlpZiAocmRzX2Nvbm5fdXAoY29ubikgfHwgcmRzX2Nvbm5fY29ubmVjdGluZyhjb25uKSkgeworCQkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJCWlmICh3Yy5zdGF0dXMgPT0gSUJfV0NfU1VDQ0VTUykgeworCQkJCXJkc19pd19wcm9jZXNzX3JlY3YoY29ubiwgcmVjdiwgd2MuYnl0ZV9sZW4sICZzdGF0ZSk7CisJCQl9IGVsc2UgeworCQkJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZWN2IGNvbXBsZXRpb24gb24gIgorCQkJCSAgICAgICAiJXBJNCBoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCAiCisJCQkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsICZjb25uLT5jX2ZhZGRyLAorCQkJCSAgICAgICB3Yy5zdGF0dXMpOworCQkJfQorCQl9CisKKwkJcmRzX2l3X3JpbmdfZnJlZSgmaWMtPmlfcmVjdl9yaW5nLCAxKTsKKwl9CisKKwlpZiAoc3RhdGUuYWNrX25leHRfdmFsaWQpCisJCXJkc19pd19zZXRfYWNrKGljLCBzdGF0ZS5hY2tfbmV4dCwgc3RhdGUuYWNrX3JlcXVpcmVkKTsKKwlpZiAoc3RhdGUuYWNrX3JlY3ZfdmFsaWQgJiYgc3RhdGUuYWNrX3JlY3YgPiBpYy0+aV9hY2tfcmVjdikgeworCQlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIHN0YXRlLmFja19yZWN2LCBOVUxMKTsKKwkJaWMtPmlfYWNrX3JlY3YgPSBzdGF0ZS5hY2tfcmVjdjsKKwl9CisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworCisJLyogSWYgd2UgZXZlciBlbmQgdXAgd2l0aCBhIHJlYWxseSBlbXB0eSByZWNlaXZlIHJpbmcsIHdlJ3JlCisJICogaW4gZGVlcCB0cm91YmxlLCBhcyB0aGUgc2VuZGVyIHdpbGwgZGVmaW5pdGVseSBzZWUgUk5SCisJICogdGltZW91dHMuICovCisJaWYgKHJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfcmluZ19lbXB0eSk7CisKKwkvKgorCSAqIElmIHRoZSByaW5nIGlzIHJ1bm5pbmcgbG93LCB0aGVuIHNjaGVkdWxlIHRoZSB0aHJlYWQgdG8gcmVmaWxsLgorCSAqLworCWlmIChyZHNfaXdfcmluZ19sb3coJmljLT5pX3JlY3ZfcmluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7Cit9CisKK2ludCByZHNfaXdfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygiY29ubiAlcFxuIiwgY29ubik7CisKKwkvKgorCSAqIElmIHdlIGdldCBhIHRlbXBvcmFyeSBwb3N0aW5nIGZhaWx1cmUgaW4gdGhpcyBjb250ZXh0IHRoZW4KKwkgKiB3ZSdyZSByZWFsbHkgbG93IGFuZCB3ZSB3YW50IHRoZSBjYWxsZXIgdG8gYmFjayBvZmYgZm9yIGEgYml0LgorCSAqLworCW11dGV4X2xvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCWlmIChyZHNfaXdfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAwKSkKKwkJcmV0ID0gLUVOT01FTTsKKwllbHNlCisJCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9yZWZpbGxfZnJvbV90aHJlYWQpOworCW11dGV4X3VubG9jaygmaWMtPmlfcmVjdl9tdXRleCk7CisKKwlpZiAocmRzX2Nvbm5fdXAoY29ubikpCisJCXJkc19pd19hdHRlbXB0X2FjayhpYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19pbml0IHJkc19pd19yZWN2X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lzaW5mbyBzaTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCS8qIERlZmF1bHQgdG8gMzAlIG9mIGFsbCBhdmFpbGFibGUgUkFNIGZvciByZWN2IG1lbW9yeSAqLworCXNpX21lbWluZm8oJnNpKTsKKwlyZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb24gPSBzaS50b3RhbHJhbSAvIDMgKiBQQUdFX1NJWkUgLyBSRFNfRlJBR19TSVpFOworCisJcmRzX2l3X2luY29taW5nX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2l3X2luY29taW5nIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaXdfaW5jb21pbmcpLAorCQkJCQkwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2l3X2luY29taW5nX3NsYWIgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlyZHNfaXdfZnJhZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pd19mcmFnIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfcGFnZV9mcmFnKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pd19mcmFnX3NsYWIgPT0gTlVMTCkKKwkJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19pbmNvbWluZ19zbGFiKTsKKwllbHNlCisJCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfcmVjdl9leGl0KHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19pbmNvbWluZ19zbGFiKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2l3X2ZyYWdfc2xhYik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JpbmcuYyBiL25ldC9yZHMvaXdfcmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjJkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3JpbmcuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCisvKgorICogTG9ja2luZyBmb3IgSUIgcmluZ3MuCisgKiBXZSBhc3N1bWUgdGhhdCBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm90ZWN0ZWQgYnkgYSBtdXRleAorICogaW4gdGhlIGNhbGxlciAodGhpcyBpcyBhIHZhbGlkIGFzc3VtcHRpb24gZm9yIHRoZSBjdXJyZW50CisgKiBpbXBsZW1lbnRhdGlvbikuCisgKgorICogRnJlZWluZyBhbHdheXMgaGFwcGVucyBpbiBhbiBpbnRlcnJ1cHQsIGFuZCBoZW5jZSBvbmx5CisgKiByYWNlcyB3aXRoIGFsbG9jYXRpb25zLCBidXQgbm90IHdpdGggb3RoZXIgZnJlZSgpcy4KKyAqCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGlzIHRoYXQKKyAqIHRoZSBhbGxvYyBjb2RlIGhhcyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBmcmVlIGVudHJpZXMuCisgKiBUbyB0aGlzIGVuZCwgd2UgbWFpbnRhaW4gdHdvIGNvdW50ZXJzOyBhbiBhbGxvY2F0aW9uIGNvdW50ZXIKKyAqIGFuZCBhIGZyZWUgY291bnRlci4gQm90aCBhcmUgYWxsb3dlZCB0byBydW4gZnJlZWx5LCBhbmQgd3JhcAorICogYXJvdW5kLgorICogVGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgaXMgYWx3YXlzIChhbGxvY19jdHIgLSBmcmVlX2N0cikgJSBOUi4KKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYWtlcyBmcmVlX2N0ciBhdG9taWMuIFdoZW4gdGhlCisgKiBjYWxsZXIgZmluZHMgYW4gYWxsb2NhdGlvbiBmYWlscywgaXQgc2hvdWxkIHNldCBhbiAiYWxsb2MgZmFpbCIKKyAqIGJpdCBhbmQgcmV0cnkgdGhlIGFsbG9jYXRpb24uIFRoZSAiYWxsb2MgZmFpbCIgYml0IGVzc2VudGlhbGx5IHRlbGxzCisgKiB0aGUgQ1EgY29tcGxldGlvbiBoYW5kbGVycyB0byB3YWtlIGl0IHVwIGFmdGVyIGZyZWVpbmcgc29tZQorICogbW9yZSBlbnRyaWVzLgorICovCisKKy8qCisgKiBUaGlzIG9ubHkgaGFwcGVucyBvbiBzaHV0ZG93bi4KKyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2l3X3JpbmdfZW1wdHlfd2FpdCk7CisKK3ZvaWQgcmRzX2l3X3JpbmdfaW5pdChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCW1lbXNldChyaW5nLCAwLCBzaXplb2YoKnJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7CisJcmRzZGVidWcoInJpbmcgJXAgbnIgJXVcbiIsIHJpbmcsIHJpbmctPndfbnIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX3Jkc19pd19yaW5nX3VzZWQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJdTMyIGRpZmY7CisKKwkvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBoYXMgYXQgbGVhc3QgYXMgbWFueSBiaXRzIGFzIHUzMiAqLworCWRpZmYgPSByaW5nLT53X2FsbG9jX2N0ciAtICh1MzIpIGF0b21pY19yZWFkKCZyaW5nLT53X2ZyZWVfY3RyKTsKKwlCVUdfT04oZGlmZiA+IHJpbmctPndfbnIpOworCisJcmV0dXJuIGRpZmY7Cit9CisKK3ZvaWQgcmRzX2l3X3JpbmdfcmVzaXplKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpCit7CisJLyogV2Ugb25seSBldmVyIGdldCBjYWxsZWQgZnJvbSB0aGUgY29ubmVjdGlvbiBzZXR1cCBjb2RlLAorCSAqIHByaW9yIHRvIGNyZWF0aW5nIHRoZSBRUC4gKi8KKwlCVUdfT04oX19yZHNfaXdfcmluZ191c2VkKHJpbmcpKTsKKwlyaW5nLT53X25yID0gbnI7Cit9CisKK3N0YXRpYyBpbnQgX19yZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpID09IDA7Cit9CisKK3UzMiByZHNfaXdfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpCit7CisJdTMyIHJldCA9IDAsIGF2YWlsOworCisJYXZhaWwgPSByaW5nLT53X25yIC0gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpOworCisJcmRzZGVidWcoInJpbmcgJXAgdmFsICV1IG5leHQgJXUgZnJlZSAldVxuIiwgcmluZywgdmFsLAorCQkgcmluZy0+d19hbGxvY19wdHIsIGF2YWlsKTsKKworCWlmICh2YWwgJiYgYXZhaWwpIHsKKwkJcmV0ID0gbWluKHZhbCwgYXZhaWwpOworCQkqcG9zID0gcmluZy0+d19hbGxvY19wdHI7CisKKwkJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgKyByZXQpICUgcmluZy0+d19ucjsKKwkJcmluZy0+d19hbGxvY19jdHIgKz0gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X3JpbmdfZnJlZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCkKK3sKKwlyaW5nLT53X2ZyZWVfcHRyID0gKHJpbmctPndfZnJlZV9wdHIgKyB2YWwpICUgcmluZy0+d19ucjsKKwlhdG9taWNfYWRkKHZhbCwgJnJpbmctPndfZnJlZV9jdHIpOworCisJaWYgKF9fcmRzX2l3X3JpbmdfZW1wdHkocmluZykgJiYKKwkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX2l3X3JpbmdfZW1wdHlfd2FpdCkpCisJCXdha2VfdXAoJnJkc19pd19yaW5nX2VtcHR5X3dhaXQpOworfQorCit2b2lkIHJkc19pd19yaW5nX3VuYWxsb2Moc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19hbGxvY19wdHIgPSAocmluZy0+d19hbGxvY19wdHIgLSB2YWwpICUgcmluZy0+d19ucjsKKwlyaW5nLT53X2FsbG9jX2N0ciAtPSB2YWw7Cit9CisKK2ludCByZHNfaXdfcmluZ19lbXB0eShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ19lbXB0eShyaW5nKTsKK30KKworaW50IHJkc19pd19yaW5nX2xvdyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gX19yZHNfaXdfcmluZ191c2VkKHJpbmcpIDw9IChyaW5nLT53X25yID4+IDIpOworfQorCisKKy8qCisgKiByZXR1cm5zIHRoZSBvbGRlc3QgYWxsb2NlZCByaW5nIGVudHJ5LiAgVGhpcyB3aWxsIGJlIHRoZSBuZXh0IG9uZQorICogZnJlZWQuICBUaGlzIGNhbid0IGJlIGNhbGxlZCBpZiB0aGVyZSBhcmUgbm9uZSBhbGxvY2F0ZWQuCisgKi8KK3UzMiByZHNfaXdfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIHJpbmctPndfZnJlZV9wdHI7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHdvcmsgcmVxdWVzdHMuCisgKi8KKwordTMyIHJkc19pd19yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KQoreworCXUzMiByZXQ7CisKKwlpZiAob2xkZXN0IDw9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQpCisJCXJldCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgLSBvbGRlc3QgKyAxOworCWVsc2UKKwkJcmV0ID0gcmluZy0+d19uciAtIG9sZGVzdCArICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgKyAxOworCisJcmRzZGVidWcoInJpbmcgJXAgcmV0ICV1IHdyX2lkICV1IG9sZGVzdCAldVxuIiwgcmluZywgcmV0LAorCQkgd3JfaWQsIG9sZGVzdCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc2VuZC5jIGIvbmV0L3Jkcy9pd19zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkZDM4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfc2VuZC5jCkBAIC0wLDAgKzEsOTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpdy5oIgorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkJICAgICAgaW50IHdjX3N0YXR1cykKK3sKKwlpbnQgbm90aWZ5X3N0YXR1czsKKworCXN3aXRjaCAod2Nfc3RhdHVzKSB7CisJY2FzZSBJQl9XQ19XUl9GTFVTSF9FUlI6CisJCXJldHVybjsKKworCWNhc2UgSUJfV0NfU1VDQ0VTUzoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJCWJyZWFrOworCisJY2FzZSBJQl9XQ19SRU1fQUNDRVNTX0VSUjoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1JFTU9URV9FUlJPUjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfT1RIRVJfRVJST1I7CisJCWJyZWFrOworCX0KKwlyZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHJtLCBub3RpZnlfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfdW5tYXBfcmRtYShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJaWYgKG9wLT5yX21hcHBlZCkgeworCQlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywKKwkJCW9wLT5yX3dyaXRlID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCW9wLT5yX21hcHBlZCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF91bm1hcF9ybShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJICBzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCwKKwkJCSAgaW50IHdjX3N0YXR1cykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gc2VuZC0+c19ybTsKKworCXJkc2RlYnVnKCJpYyAlcCBzZW5kICVwIHJtICVwXG4iLCBpYywgc2VuZCwgcm0pOworCisJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCSAgICAgcm0tPm1fc2csIHJtLT5tX25lbnRzLAorCQkgICAgIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHJtLT5tX3JkbWFfb3AgIT0gTlVMTCkgeworCQlyZHNfaXdfc2VuZF91bm1hcF9yZG1hKGljLCBybS0+bV9yZG1hX29wKTsKKworCQkvKiBJZiB0aGUgdXNlciBhc2tlZCBmb3IgYSBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBvbiB0aGlzCisJCSAqIG1lc3NhZ2UsIHdlIGNhbiBpbXBsZW1lbnQgdGhyZWUgZGlmZmVyZW50IHNlbWFudGljczoKKwkJICogIDEuCU5vdGlmeSB3aGVuIHdlIHJlY2VpdmVkIHRoZSBBQ0sgb24gdGhlIFJEUyBtZXNzYWdlCisJCSAqCXRoYXQgd2FzIHF1ZXVlZCB3aXRoIHRoZSBSRE1BLiBUaGlzIHByb3ZpZGVzIHJlbGlhYmxlCisJCSAqCW5vdGlmaWNhdGlvbiBvZiBSRE1BIHN0YXR1cyBhdCB0aGUgZXhwZW5zZSBvZiBhIG9uZS13YXkKKwkJICoJcGFja2V0IGRlbGF5LgorCQkgKiAgMi4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgUkRNQSBvcGVyYXRpb24uCisJCSAqICAzLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBhY2NvbXBhbnlpbmcgUkRTIG1lc3NhZ2VzLgorCQkgKiBIZXJlLCB3ZSBpbXBsZW1lbnQgYXBwcm9hY2ggIzMuIFRvIGltcGxlbWVudCBhcHByb2FjaCAjMiwKKwkJICogY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGZyb20gdGhlIGNxX2hhbmRsZXIuIFRvIGltcGxlbWVudCAjMSwKKwkJICogZG9uJ3QgY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGF0IGFsbCwgYW5kIGZhbGwgYmFjayB0byB0aGUgbm90aWZ5CisJCSAqIGhhbmRsaW5nIGluIHRoZSBBQ0sgcHJvY2Vzc2luZyBjb2RlLgorCQkgKgorCQkgKiBOb3RlOiBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzeW5jIGFueSBSRE1BIGJ1ZmZlcnMgdXNpbmcKKwkJICogaWJfZG1hX3N5bmNfc2dfZm9yX2NwdSAtIHRoZSBjb21wbGV0aW9uIGZvciB0aGUgUkRNQQorCQkgKiBvcGVyYXRpb24gaXRzZWxmIHVubWFwcGVkIHRoZSBSRE1BIGJ1ZmZlcnMsIHdoaWNoIHRha2VzIGNhcmUKKwkJICogb2Ygc3luY2hpbmcuCisJCSAqLworCQlyZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Y19zdGF0dXMpOworCisJCWlmIChybS0+bV9yZG1hX29wLT5yX3dyaXRlKQorCQkJcmRzX3N0YXRzX2FkZChzX3NlbmRfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJCWVsc2UKKwkJCXJkc19zdGF0c19hZGQoc19yZWN2X3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCX0KKworCS8qIElmIGFueW9uZSB3YWl0ZWQgZm9yIHRoaXMgbWVzc2FnZSB0byBnZXQgZmx1c2hlZCBvdXQsIHdha2UKKwkgKiB0aGVtIHVwIG5vdyAqLworCXJkc19tZXNzYWdlX3VubWFwcGVkKHJtKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJc2VuZC0+c19ybSA9IE5VTEw7Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXNlbmQtPnNfcm0gPSBOVUxMOworCQlzZW5kLT5zX29wID0gTlVMTDsKKwkJc2VuZC0+c19tYXBwaW5nID0gTlVMTDsKKworCQlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCQlzZW5kLT5zX3dyLndyX2lkID0gaTsKKwkJc2VuZC0+c193ci5zZ19saXN0ID0gc2VuZC0+c19zZ2U7CisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c193ci5leC5pbW1fZGF0YSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+bGtleSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gMDsKKworCQlzZW5kLT5zX21yID0gaWJfYWxsb2NfZmFzdF9yZWdfbXIoaWMtPmlfcGQsIGZhc3RyZWdfbWVzc2FnZV9zaXplKTsKKwkJaWYgKElTX0VSUihzZW5kLT5zX21yKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9hbGxvY19mYXN0X3JlZ19tciBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlzZW5kLT5zX3BhZ2VfbGlzdCA9IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCgKKwkJCWljLT5pX2NtX2lkLT5kZXZpY2UsIGZhc3RyZWdfbWVzc2FnZV9zaXplKTsKKwkJaWYgKElTX0VSUihzZW5kLT5zX3BhZ2VfbGlzdCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0IGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfaXdfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJQlVHX09OKCFzZW5kLT5zX21yKTsKKwkJaWJfZGVyZWdfbXIoc2VuZC0+c19tcik7CisJCUJVR19PTighc2VuZC0+c19wYWdlX2xpc3QpOworCQlpYl9mcmVlX2Zhc3RfcmVnX3BhZ2VfbGlzdChzZW5kLT5zX3BhZ2VfbGlzdCk7CisJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSAweGRlYWQpCisJCQljb250aW51ZTsKKwkJaWYgKHNlbmQtPnNfcm0pCisJCQlyZHNfaXdfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgSUJfV0NfV1JfRkxVU0hfRVJSKTsKKwkJaWYgKHNlbmQtPnNfb3ApCisJCQlyZHNfaXdfc2VuZF91bm1hcF9yZG1hKGljLCBzZW5kLT5zX29wKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgX29sZGVzdC9fZnJlZSByaW5nIG9wZXJhdGlvbnMgaGVyZSByYWNlIGNsZWFubHkgd2l0aCB0aGUgYWxsb2MvdW5hbGxvYworICogb3BlcmF0aW9ucyBwZXJmb3JtZWQgaW4gdGhlIHNlbmQgcGF0aC4gIEFzIHRoZSBzZW5kZXIgYWxsb2NzIGFuZCBwb3RlbnRpYWxseQorICogdW5hbGxvY3MgdGhlIG5leHQgZnJlZSBlbnRyeSBpbiB0aGUgcmluZyBpdCBkb2Vzbid0IGFsdGVyIHdoaWNoIGlzCisgKiB0aGUgbmV4dCB0byBiZSBmcmVlZCwgd2hpY2ggaXMgd2hhdCB0aGlzIGlzIGNvbmNlcm5lZCB3aXRoLgorICovCit2b2lkIHJkc19pd19zZW5kX2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kOworCXUzMiBjb21wbGV0ZWQ7CisJdTMyIG9sZGVzdDsKKwl1MzIgaTsKKwlpbnQgcmV0OworCisJcmRzZGVidWcoImNxICVwIGNvbm4gJXBcbiIsIGNxLCBjb25uKTsKKwlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfY3FfY2FsbCk7CisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KQorCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfY3FfZXZlbnQpOworCisJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJXQyBFcnJvcjogIHN0YXR1cyA9ICVkIG9wY29kZSA9ICVkXG4iLCB3Yy5zdGF0dXMsIHdjLm9wY29kZSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3Yy5vcGNvZGUgPT0gSUJfV0NfTE9DQUxfSU5WICYmIHdjLndyX2lkID09IFJEU19JV19MT0NBTF9JTlZfV1JfSUQpIHsKKwkJCWljLT5pX2Zhc3RyZWdfcG9zdGVkID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdjLm9wY29kZSA9PSBJQl9XQ19GQVNUX1JFR19NUiAmJiB3Yy53cl9pZCA9PSBSRFNfSVdfRkFTVF9SRUdfV1JfSUQpIHsKKwkJCWljLT5pX2Zhc3RyZWdfcG9zdGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdjLndyX2lkID09IFJEU19JV19BQ0tfV1JfSUQpIHsKKwkJCWlmIChpYy0+aV9hY2tfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3N0YWxsZWQpOworCQkJcmRzX2l3X2Fja19zZW5kX2NvbXBsZXRlKGljKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2xkZXN0ID0gcmRzX2l3X3Jpbmdfb2xkZXN0KCZpYy0+aV9zZW5kX3JpbmcpOworCisJCWNvbXBsZXRlZCA9IHJkc19pd19yaW5nX2NvbXBsZXRlZCgmaWMtPmlfc2VuZF9yaW5nLCB3Yy53cl9pZCwgb2xkZXN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY29tcGxldGVkOyBpKyspIHsKKwkJCXNlbmQgPSAmaWMtPmlfc2VuZHNbb2xkZXN0XTsKKworCQkJLyogSW4gdGhlIGVycm9yIGNhc2UsIHdjLm9wY29kZSBzb21ldGltZXMgY29udGFpbnMgZ2FyYmFnZSAqLworCQkJc3dpdGNoIChzZW5kLT5zX3dyLm9wY29kZSkgeworCQkJY2FzZSBJQl9XUl9TRU5EOgorCQkJCWlmIChzZW5kLT5zX3JtKQorCQkJCQlyZHNfaXdfc2VuZF91bm1hcF9ybShpYywgc2VuZCwgd2Muc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSUJfV1JfRkFTVF9SRUdfTVI6CisJCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCQljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WOgorCQkJCS8qIE5vdGhpbmcgdG8gYmUgZG9uZSAtIHRoZSBTRyBsaXN0IHdpbGwgYmUgdW5tYXBwZWQKKwkJCQkgKiB3aGVuIHRoZSBTRU5EIGNvbXBsZXRlcy4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCQkiUkRTL0lXOiAlczogdW5leHBlY3RlZCBvcGNvZGUgMHgleCBpbiBXUiFcbiIsCisJCQkJCQlfX2Z1bmNfXywgc2VuZC0+c193ci5vcGNvZGUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IDB4ZGVhZDsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCQlpZiAoc2VuZC0+c19xdWV1ZWQgKyBIWi8yIDwgamlmZmllcykKKwkJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc3RhbGxlZCk7CisKKwkJCS8qIElmIGEgUkRNQSBvcGVyYXRpb24gcHJvZHVjZWQgYW4gZXJyb3IsIHNpZ25hbCB0aGlzIHJpZ2h0CisJCQkgKiBhd2F5LiBJZiB3ZSBkb24ndCwgdGhlIHN1YnNlcXVlbnQgU0VORCB0aGF0IGdvZXMgd2l0aCB0aGlzCisJCQkgKiBSRE1BIHdpbGwgYmUgY2FuY2VsZWQgd2l0aCBFUlJfV0ZMVVNILCBhbmQgdGhlIGFwcGxpY2F0aW9uCisJCQkgKiBuZXZlciBsZWFybiB0aGF0IHRoZSBSRE1BIGZhaWxlZC4gKi8KKwkJCWlmICh1bmxpa2VseSh3Yy5zdGF0dXMgPT0gSUJfV0NfUkVNX0FDQ0VTU19FUlIgJiYgc2VuZC0+c19vcCkpIHsKKwkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJCQkJcm0gPSByZHNfc2VuZF9nZXRfbWVzc2FnZShjb25uLCBzZW5kLT5zX29wKTsKKwkJCQlpZiAocm0pCisJCQkJCXJkc19pd19zZW5kX3JkbWFfY29tcGxldGUocm0sIHdjLnN0YXR1cyk7CisJCQl9CisKKwkJCW9sZGVzdCA9IChvbGRlc3QgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCQl9CisKKwkJcmRzX2l3X3JpbmdfZnJlZSgmaWMtPmlfc2VuZF9yaW5nLCBjb21wbGV0ZWQpOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpCisJCSB8fCB0ZXN0X2JpdCgwLCAmY29ubi0+Y19tYXBfcXVldWVkKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwkJLyogV2UgZXhwZWN0IGVycm9ycyBhcyB0aGUgcXAgaXMgZHJhaW5lZCBkdXJpbmcgc2h1dGRvd24gKi8KKwkJaWYgKHdjLnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTICYmIHJkc19jb25uX3VwKGNvbm4pKSB7CisJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLAorCQkJCSJzZW5kIGNvbXBsZXRpb24gb24gJXBJNCAiCisJCQkJImhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kIHJlY29ubmVjdGluZ1xuIiwKKwkJCQkmY29ubi0+Y19mYWRkciwgd2Muc3RhdHVzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgY3JlZGl0cyB3aGVuIHNlbmRpbmcKKyAqIG1lc3NhZ2VzLgorICoKKyAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CisgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKKyAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJZWFjaCBTRU5EIFdSIHdlIHBvc3QsIHdlIGRlY3JlbWVudCB0aGlzIGJ5IG9uZS4KKyAqCisgKiAgLQlwb3N0ZWQgY3JlZGl0czogdGhpcyB0ZWxscyB1cyBob3cgbWFueSBXUnMgd2UgcmVjZW50bHkKKyAqCXBvc3RlZCB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4gVGhpcyB2YWx1ZSBpcyB0cmFuc2ZlcnJlZAorICoJdG8gdGhlIHBlZXIgYXMgYSAiY3JlZGl0IHVwZGF0ZSIgaW4gYSBSRFMgaGVhZGVyIGZpZWxkLgorICoJRXZlcnkgdGltZSB3ZSB0cmFuc21pdCBjcmVkaXRzIHRvIHRoZSBwZWVyLCB3ZSBzdWJ0cmFjdAorICoJdGhlIGFtb3VudCBvZiB0cmFuc2ZlcnJlZCBjcmVkaXRzIGZyb20gdGhpcyBjb3VudGVyLgorICoKKyAqIEl0IGlzIGVzc2VudGlhbCB0aGF0IHdlIGF2b2lkIHNpdHVhdGlvbnMgd2hlcmUgYm90aCBzaWRlcyBoYXZlCisgKiBleGhhdXN0ZWQgdGhlaXIgc2VuZCBjcmVkaXRzLCBhbmQgYXJlIHVuYWJsZSB0byBzZW5kIG5ldyBjcmVkaXRzCisgKiB0byB0aGUgcGVlci4gV2UgYWNoaWV2ZSB0aGlzIGJ5IHJlcXVpcmluZyB0aGF0IHdlIHNlbmQgYXQgbGVhc3QKKyAqIG9uZSBjcmVkaXQgdXBkYXRlIHRvIHRoZSBwZWVyIGJlZm9yZSBleGhhdXN0aW5nIG91ciBjcmVkaXRzLgorICogV2hlbiBuZXcgY3JlZGl0cyBhcnJpdmUsIHdlIHN1YnRyYWN0IG9uZSBjcmVkaXQgdGhhdCBpcyB3aXRoaGVsZAorICogdW50aWwgd2UndmUgcG9zdGVkIG5ldyBidWZmZXJzIGFuZCBhcmUgcmVhZHkgdG8gdHJhbnNtaXQgdGhlc2UKKyAqIGNyZWRpdHMgKHNlZSByZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyBiZWxvdykuCisgKgorICogVGhlIFJEUyBzZW5kIGNvZGUgaXMgZXNzZW50aWFsbHkgc2luZ2xlLXRocmVhZGVkOyByZHNfc2VuZF94bWl0CisgKiBncmFicyBjX3NlbmRfbG9jayB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLgorICogSG93ZXZlciwgdGhlIEFDSyBzZW5kaW5nIGNvZGUgaXMgaW5kZXBlbmRlbnQgYW5kIGNhbiByYWNlIHdpdGgKKyAqIG1lc3NhZ2UgU0VORHMuCisgKgorICogSW4gdGhlIHNlbmQgcGF0aCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvdW50ZXJzIGZvciBzZW5kIGNyZWRpdHMKKyAqIGFuZCB0aGUgY291bnRlciBvZiBwb3N0ZWQgYnVmZmVycyBhdG9taWNhbGx5IC0gd2hlbiB3ZSB1c2UgdGhlCisgKiBsYXN0IGF2YWlsYWJsZSBjcmVkaXQsIHdlIGNhbm5vdCBhbGxvdyBhbm90aGVyIHRocmVhZCB0byByYWNlIHVzCisgKiBhbmQgZ3JhYiB0aGUgcG9zdGVkIGNyZWRpdHMgY291bnRlci4gIEhlbmNlLCB3ZSBoYXZlIHRvIHVzZSBhCisgKiBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcmVkaXQgY291bnRlciwgb3IgdXNlIGF0b21pY3MuCisgKgorICogU3BpbmxvY2tzIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGFyZSBiYWQsCisgKiBiZWNhdXNlIHRoZXkgY3JlYXRlIHVubmVjZXNzYXJ5IGRlbGF5cy4gQW4gZWFybHkgaW1wbGVtZW50YXRpb24KKyAqIHVzaW5nIGEgc3BpbmxvY2sgc2hvd2VkIGEgNSUgZGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBhdCBzb21lCisgKiBsb2Fkcy4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBzcGlubG9ja3MgY29tcGxldGVseSwgcHV0dGluZyBib3RoCisgKiBjb3VudGVycyBpbnRvIGEgc2luZ2xlIGF0b21pYywgYW5kIHVwZGF0aW5nIHRoYXQgYXRvbWljIHVzaW5nCisgKiBhdG9taWNfYWRkIChpbiB0aGUgcmVjZWl2ZSBwYXRoLCB3aGVuIHJlY2VpdmluZyBmcmVzaCBjcmVkaXRzKSwKKyAqIGFuZCB1c2luZyBhdG9taWNfY21weGNoZyB3aGVuIHVwZGF0aW5nIHRoZSB0d28gY291bnRlcnMuCisgKi8KK2ludCByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCSAgICAgdTMyIHdhbnRlZCwgdTMyICphZHZfY3JlZGl0cywgaW50IG5lZWRfcG9zdGVkKQoreworCXVuc2lnbmVkIGludCBhdmFpbCwgcG9zdGVkLCBnb3QgPSAwLCBhZHZlcnRpc2U7CisJbG9uZyBvbGR2YWwsIG5ld3ZhbDsKKworCSphZHZfY3JlZGl0cyA9IDA7CisJaWYgKCFpYy0+aV9mbG93Y3RsKQorCQlyZXR1cm4gd2FudGVkOworCit0cnlfYWdhaW46CisJYWR2ZXJ0aXNlID0gMDsKKwlvbGR2YWwgPSBuZXd2YWwgPSBhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cyk7CisJcG9zdGVkID0gSUJfR0VUX1BPU1RfQ1JFRElUUyhvbGR2YWwpOworCWF2YWlsID0gSUJfR0VUX1NFTkRfQ1JFRElUUyhvbGR2YWwpOworCisJcmRzZGVidWcoInJkc19pd19zZW5kX2dyYWJfY3JlZGl0cygldSk6IGNyZWRpdHM9JXUgcG9zdGVkPSV1XG4iLAorCQkJd2FudGVkLCBhdmFpbCwgcG9zdGVkKTsKKworCS8qIFRoZSBsYXN0IGNyZWRpdCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBhIGNyZWRpdCB1cGRhdGUuICovCisJaWYgKGF2YWlsICYmICFwb3N0ZWQpCisJCWF2YWlsLS07CisKKwlpZiAoYXZhaWwgPCB3YW50ZWQpIHsKKwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaWMtPmlfY21faWQtPmNvbnRleHQ7CisKKwkJLyogT29wcywgdGhlcmUgYXJlbid0IHRoYXQgbWFueSBjcmVkaXRzIGxlZnQhICovCisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlnb3QgPSBhdmFpbDsKKwl9IGVsc2UgeworCQkvKiBTb21ldGltZXMgeW91IGdldCB3aGF0IHlvdSB3YW50LCBsYWxhbGEuICovCisJCWdvdCA9IHdhbnRlZDsKKwl9CisJbmV3dmFsIC09IElCX1NFVF9TRU5EX0NSRURJVFMoZ290KTsKKworCS8qCisJICogSWYgbmVlZF9wb3N0ZWQgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGNhbGxlciB3YW50cworCSAqIHRoZSBwb3N0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBzZW5kIGNyZWRpdHMgYXJlCisJICogYXZhaWxhYmxlLgorCSAqLworCWlmIChwb3N0ZWQgJiYgKGdvdCB8fCBuZWVkX3Bvc3RlZCkpIHsKKwkJYWR2ZXJ0aXNlID0gbWluX3QodW5zaWduZWQgaW50LCBwb3N0ZWQsIFJEU19NQVhfQURWX0NSRURJVCk7CisJCW5ld3ZhbCAtPSBJQl9TRVRfUE9TVF9DUkVESVRTKGFkdmVydGlzZSk7CisJfQorCisJLyogRmluYWxseSBiaWxsIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoYXRvbWljX2NtcHhjaGcoJmljLT5pX2NyZWRpdHMsIG9sZHZhbCwgbmV3dmFsKSAhPSBvbGR2YWwpCisJCWdvdG8gdHJ5X2FnYWluOworCisJKmFkdl9jcmVkaXRzID0gYWR2ZXJ0aXNlOworCXJldHVybiBnb3Q7Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChjcmVkaXRzID09IDApCisJCXJldHVybjsKKworCXJkc2RlYnVnKCJyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cygldSk6IGN1cnJlbnQ9JXUlc1xuIiwKKwkJCWNyZWRpdHMsCisJCQlJQl9HRVRfU0VORF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSksCisJCQl0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykgPyAiLCBsbF9zZW5kX2Z1bGwiIDogIiIpOworCisJYXRvbWljX2FkZChJQl9TRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpLCAmaWMtPmlfY3JlZGl0cyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisKKwlXQVJOX09OKElCX0dFVF9TRU5EX0NSRURJVFMoY3JlZGl0cykgPj0gMTYzODQpOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NyZWRpdF91cGRhdGVzKTsKK30KKwordm9pZCByZHNfaXdfYWR2ZXJ0aXNlX2NyZWRpdHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1bnNpZ25lZCBpbnQgcG9zdGVkKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJaWYgKHBvc3RlZCA9PSAwKQorCQlyZXR1cm47CisKKwlhdG9taWNfYWRkKElCX1NFVF9QT1NUX0NSRURJVFMocG9zdGVkKSwgJmljLT5pX2NyZWRpdHMpOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gc2VuZCBhbiB1cGRhdGUgdG8gdGhlIHBlZXIgbm93LgorCSAqIElmIHdlIHdvdWxkIHNlbmQgYSBjcmVkaXQgdXBkYXRlIGZvciBldmVyeSBzaW5nbGUgYnVmZmVyIHdlCisJICogcG9zdCwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gQUNLIHN0b3JtIChBQ0sgYXJyaXZlcywKKwkgKiBjb25zdW1lcyBidWZmZXIsIHdlIHJlZmlsbCB0aGUgcmluZywgc2VuZCBBQ0sgdG8gcmVtb3RlCisJICogYWR2ZXJ0aXNpbmcgdGhlIG5ld2x5IHBvc3RlZCBidWZmZXIuLi4gYWQgaW5mKQorCSAqCisJICogUGVyZm9ybWFuY2UgcHJldHR5IG11Y2ggZGVwZW5kcyBvbiBob3cgb2Z0ZW4gd2Ugc2VuZAorCSAqIGNyZWRpdCB1cGRhdGVzIC0gdG9vIGZyZXF1ZW50IHVwZGF0ZXMgbWVhbiBsb3RzIG9mIEFDS3MuCisJICogVG9vIGluZnJlcXVlbnQgdXBkYXRlcywgYW5kIHRoZSBwZWVyIHdpbGwgcnVuIG91dCBvZgorCSAqIGNyZWRpdHMgYW5kIGhhcyB0byB0aHJvdHRsZS4KKwkgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIDE2IHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgorCSAqLworCWlmIChJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSkgPj0gMTYpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmRzX2l3X3htaXRfcG9wdWxhdGVfd3Ioc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQsIHVuc2lnbmVkIGludCBwb3MsCisJCXVuc2lnbmVkIGxvbmcgYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQlpbnQgc2VuZF9mbGFncykKK3sKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisKKwlXQVJOX09OKHBvcyAhPSBzZW5kIC0gaWMtPmlfc2VuZHMpOworCisJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gc2VuZF9mbGFnczsKKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJc2VuZC0+c193ci5udW1fc2dlID0gMjsKKwlzZW5kLT5zX3dyLm5leHQgPSBOVUxMOworCXNlbmQtPnNfcXVldWVkID0gamlmZmllczsKKwlzZW5kLT5zX29wID0gTlVMTDsKKworCWlmIChsZW5ndGggIT0gMCkgeworCQlzZ2UgPSByZHNfaXdfZGF0YV9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwkJc2dlLT5hZGRyID0gYnVmZmVyOworCQlzZ2UtPmxlbmd0aCA9IGxlbmd0aDsKKwkJc2dlLT5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKworCQlzZ2UgPSByZHNfaXdfaGVhZGVyX3NnZShpYywgc2VuZC0+c19zZ2UpOworCX0gZWxzZSB7CisJCS8qIFdlJ3JlIHNlbmRpbmcgYSBwYWNrZXQgd2l0aCBubyBwYXlsb2FkLiBUaGVyZSBpcyBvbmx5CisJCSAqIG9uZSBTR0UgKi8KKwkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJc2dlID0gJnNlbmQtPnNfc2dlWzBdOworCX0KKworCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAocG9zICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7Cit9CisKKy8qCisgKiBUaGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gbWVzc2FnZS4gIFRoZSBmaXJzdCB0aW1lCisgKiB3ZSBzZWUgYSBtZXNzYWdlIHdlIG1hcCBpdHMgc2NhdHRlcmxpc3QgaW50byB0aGUgSUIgZGV2aWNlIHNvIHRoYXQKKyAqIHdlIGNhbiBwcm92aWRlIHRoYXQgbWFwcGVkIGFkZHJlc3MgdG8gdGhlIElCIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMKKyAqIGluIHRoZSBJQiB3b3JrIHJlcXVlc3RzLiAgV2UgdHJhbnNsYXRlIHRoZSBzY2F0dGVybGlzdCBpbnRvIGEgc2VyaWVzCisgKiBvZiB3b3JrIHJlcXVlc3RzIHRoYXQgZnJhZ21lbnQgdGhlIG1lc3NhZ2UuICBUaGVzZSB3b3JrIHJlcXVlc3RzIGNvbXBsZXRlCisgKiBpbiBvcmRlciBzbyB3ZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZSB0byB0aGUgY29tcGxldGlvbiBoYW5kbGVyCisgKiBvbmNlIHdlIHNlbmQgdGhlIGZpbmFsIGZyYWdtZW50LgorICoKKyAqIFRoZSBSRFMgY29yZSB1c2VzIHRoZSBjX3NlbmRfbG9jayB0byBvbmx5IGVudGVyIHRoaXMgZnVuY3Rpb24gb25jZQorICogcGVyIGNvbm5lY3Rpb24uICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgdHggcmluZyBhbGxvYy91bmFsbG9jIHBhaXJzCisgKiBkb24ndCBnZXQgb3V0IG9mIHN5bmMgYW5kIGNvbmZ1c2UgdGhlIHJpbmcuCisgKi8KK2ludCByZHNfaXdfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXUzMiBwb3M7CisJdTMyIGk7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGNyZWRpdF9hbGxvYzsKKwl1MzIgcG9zdGVkOworCXUzMiBhZHZfY3JlZGl0cyA9IDA7CisJaW50IHNlbmRfZmxhZ3MgPSAwOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IGZsb3dfY29udHJvbGxlZCA9IDA7CisKKwlCVUdfT04ob2ZmICUgUkRTX0ZSQUdfU0laRSk7CisJQlVHX09OKGhkcl9vZmYgIT0gMCAmJiBoZHJfb2ZmICE9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCisJLyogRmFzdHJlZyBzdXBwb3J0ICovCisJaWYgKHJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpCisJICYmICFpYy0+aV9mYXN0cmVnX3Bvc3RlZCkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRSB3ZSBtYXkgb3ZlcmFsbG9jYXRlIGhlcmUgKi8KKwlpZiAoYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSA9PSAwKQorCQlpID0gMTsKKwllbHNlCisJCWkgPSBjZWlsKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbiksIFJEU19GUkFHX1NJWkUpOworCisJd29ya19hbGxvYyA9IHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJc2V0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncyk7CisJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9yaW5nX2Z1bGwpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVkaXRfYWxsb2MgPSB3b3JrX2FsbG9jOworCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCWNyZWRpdF9hbGxvYyA9IHJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhpYywgd29ya19hbGxvYywgJnBvc3RlZCwgMCk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJaWYgKGNyZWRpdF9hbGxvYyA8IHdvcmtfYWxsb2MpIHsKKwkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGNyZWRpdF9hbGxvYyk7CisJCQl3b3JrX2FsbG9jID0gY3JlZGl0X2FsbG9jOworCQkJZmxvd19jb250cm9sbGVkKys7CisJCX0KKwkJaWYgKHdvcmtfYWxsb2MgPT0gMCkgeworCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF90aHJvdHRsZSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKGljLT5pX3JtID09IE5VTEwpIHsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJyZHNfaXdfeG1pdCBwcmVwIG1zZyBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCksCisJCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MsCisJCQkJYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKSk7CisJCSAgICovCisJCWlmIChybS0+bV9uZW50cykgeworCQkJcm0tPm1fY291bnQgPSBpYl9kbWFfbWFwX3NnKGRldiwKKwkJCQkJIHJtLT5tX3NnLCBybS0+bV9uZW50cywgRE1BX1RPX0RFVklDRSk7CisJCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBybSAlcDogJWRcbiIsIGljLCBybSwgcm0tPm1fY291bnQpOworCQkJaWYgKHJtLT5tX2NvdW50ID09IDApIHsKKwkJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfc2dfbWFwcGluZ19mYWlsdXJlKTsKKwkJCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQkJCXJldCA9IC1FTk9NRU07IC8qIFhYWCA/ICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlybS0+bV9jb3VudCA9IDA7CisJCX0KKworCQlpYy0+aV91bnNpZ25hbGVkX3dycyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyczsKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA9IHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlpYy0+aV9ybSA9IHJtOworCisJCS8qIEZpbmFsaXplIHRoZSBoZWFkZXIgKi8KKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfQUNLX1JFUVVJUkVEOworCQlpZiAodGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKQorCQkJcm0tPm1faW5jLmlfaGRyLmhfZmxhZ3MgfD0gUkRTX0ZMQUdfUkVUUkFOU01JVFRFRDsKKworCQkvKiBJZiBpdCBoYXMgYSBSRE1BIG9wLCB0ZWxsIHRoZSBwZWVyIHdlIGRpZCBpdC4gVGhpcyBpcworCQkgKiB1c2VkIGJ5IHRoZSBwZWVyIHRvIHJlbGVhc2UgdXNlLW9uY2UgUkRNQSBNUnMuICovCisJCWlmIChybS0+bV9yZG1hX29wKSB7CisJCQlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSBleHRfaGRyOworCisJCQlleHRfaGRyLmhfcmRtYV9ya2V5ID0gY3B1X3RvX2JlMzIocm0tPm1fcmRtYV9vcC0+cl9rZXkpOworCQkJcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbigmcm0tPm1faW5jLmlfaGRyLAorCQkJCQlSRFNfRVhUSERSX1JETUEsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworCQl9CisJCWlmIChybS0+bV9yZG1hX2Nvb2tpZSkgeworCQkJcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocm0tPm1fcmRtYV9jb29raWUpKTsKKwkJfQorCisJCS8qIE5vdGUgLSByZHNfaXdfcGlnZ3liX2FjayBjbGVhcnMgdGhlIEFDS19SRVFVSVJFRCBiaXQsIHNvCisJCSAqIHdlIHNob3VsZCBub3QgZG8gdGhpcyB1bmxlc3Mgd2UgaGF2ZSBhIGNoYW5jZSBvZiBhdCBsZWFzdAorCQkgKiBzdGlja2luZyB0aGUgaGVhZGVyIGludG8gdGhlIHNlbmQgcmluZy4gV2hpY2ggaXMgd2h5IHdlCisJCSAqIHNob3VsZCBjYWxsIHJkc19pd19yaW5nX2FsbG9jIGZpcnN0LiAqLworCQlybS0+bV9pbmMuaV9oZHIuaF9hY2sgPSBjcHVfdG9fYmU2NChyZHNfaXdfcGlnZ3liX2FjayhpYykpOworCQlyZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKCZybS0+bV9pbmMuaV9oZHIpOworCisJCS8qCisJCSAqIFVwZGF0ZSBhZHZfY3JlZGl0cyBzaW5jZSB3ZSByZXNldCB0aGUgQUNLX1JFUVVJUkVEIGJpdC4KKwkJICovCisJCXJkc19pd19zZW5kX2dyYWJfY3JlZGl0cyhpYywgMCwgJnBvc3RlZCwgMSk7CisJCWFkdl9jcmVkaXRzICs9IHBvc3RlZDsKKwkJQlVHX09OKGFkdl9jcmVkaXRzID4gMjU1KTsKKwl9IGVsc2UgaWYgKGljLT5pX3JtICE9IHJtKQorCQlCVUcoKTsKKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZybS0+bV9zZ1tzZ107CisJc2VudCA9IDA7CisJaSA9IDA7CisKKwkvKiBTb21ldGltZXMgeW91IHdhbnQgdG8gcHV0IGEgZmVuY2UgYmV0d2VlbiBhbiBSRE1BCisJICogUkVBRCBhbmQgdGhlIGZvbGxvd2luZyBTRU5ELgorCSAqIFdlIGNvdWxkIGVpdGhlciBkbyB0aGlzIGFsbCB0aGUgdGltZQorCSAqIG9yIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiBSaWdodCBub3csIHdlIGxldAorCSAqIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2UuCisJICovCisJaWYgKHJtLT5tX3JkbWFfb3AgJiYgcm0tPm1fcmRtYV9vcC0+cl9mZW5jZSkKKwkJc2VuZF9mbGFncyA9IElCX1NFTkRfRkVOQ0U7CisKKwkvKgorCSAqIFdlIGNvdWxkIGJlIGNvcHlpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSB1bnVzZWQgdGFpbCBvZiB0aGUgcGFnZS4KKwkgKiBUaGF0IHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhvc2UgcGFnZXMgbWlnaHQKKwkgKiBiZSBtYXBwZWQgdXNlcnNwYWNlIHBhZ2VzIG9yIHBhZ2UgY2FjaGUgcGFnZXMuICBTbyBpbnN0ZWFkIHdlIGFsd2F5cworCSAqIHVzZSBhIHNlY29uZCBzZ2UgYW5kIG91ciBsb25nLWxpdmVkIHJpbmcgb2YgbWFwcGVkIGhlYWRlcnMuICBXZSBzZW5kCisJICogdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YSBzbyB0aGF0IHRoZSBkYXRhIHBheWxvYWQgY2FuIGJlIGFsaWduZWQgb24KKwkgKiB0aGUgcmVjZWl2ZXIuCisJICovCisKKwkvKiBoYW5kbGUgYSAwLWxlbiBtZXNzYWdlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkgeworCQlyZHNfaXdfeG1pdF9wb3B1bGF0ZV93cihpYywgc2VuZCwgcG9zLCAwLCAwLCBzZW5kX2ZsYWdzKTsKKwkJZ290byBhZGRfaGVhZGVyOworCX0KKworCS8qIGlmIHRoZXJlJ3MgZGF0YSByZWZlcmVuY2UgaXQgd2l0aCBhIGNoYWluIG9mIHdvcmsgcmVxcyAqLworCWZvciAoOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZybS0+bV9zZ1tybS0+bV9jb3VudF07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbGVuOworCisJCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKworCQlsZW4gPSBtaW4oUkRTX0ZSQUdfU0laRSwgaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpIC0gb2ZmKTsKKwkJcmRzX2l3X3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsIHNjYXQpICsgb2ZmLCBsZW4sCisJCQkJc2VuZF9mbGFncyk7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lCisJCSAqIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF9ieXRlcyAtPSBsZW47CisJCWlmIChpYy0+aV91bnNpZ25hbGVkX2J5dGVzIDw9IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCX0KKworCQkvKgorCQkgKiBBbHdheXMgc2lnbmFsIHRoZSBsYXN0IG9uZSBpZiB3ZSdyZSBzdG9wcGluZyBkdWUgdG8gZmxvdyBjb250cm9sLgorCQkgKi8KKwkJaWYgKGZsb3dfY29udHJvbGxlZCAmJiBpID09ICh3b3JrX2FsbG9jLTEpKQorCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkgJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlzZW50ICs9IGxlbjsKKwkJb2ZmICs9IGxlbjsKKwkJaWYgKG9mZiA9PSBpYl9zZ19kbWFfbGVuKGRldiwgc2NhdCkpIHsKKwkJCXNjYXQrKzsKKwkJCW9mZiA9IDA7CisJCX0KKworYWRkX2hlYWRlcjoKKwkJLyogVGFjayBvbiB0aGUgaGVhZGVyIGFmdGVyIHRoZSBkYXRhLiBUaGUgaGVhZGVyIFNHRSBzaG91bGQgYWxyZWFkeQorCQkgKiBoYXZlIGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoZSByaWdodCBoZWFkZXIgYnVmZmVyLiAqLworCQltZW1jcHkoJmljLT5pX3NlbmRfaGRyc1twb3NdLCAmcm0tPm1faW5jLmlfaGRyLCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCQlpZiAoMCkgeworCQkJc3RydWN0IHJkc19oZWFkZXIgKmhkciA9ICZpYy0+aV9zZW5kX2hkcnNbcG9zXTsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzZW5kIFdSIGRwb3J0PSV1IGZsYWdzPTB4JXggbGVuPSVkXG4iLAorCQkJCWJlMTZfdG9fY3B1KGhkci0+aF9kcG9ydCksCisJCQkJaGRyLT5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KGhkci0+aF9sZW4pKTsKKwkJfQorCQlpZiAoYWR2X2NyZWRpdHMpIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCS8qIGFkZCBjcmVkaXQgYW5kIHJlZG8gdGhlIGhlYWRlciBjaGVja3N1bSAqLworCQkJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCQkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCQkJYWR2X2NyZWRpdHMgPSAwOworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X2NyZWRpdF91cGRhdGVzKTsKKwkJfQorCisJCWlmIChwcmV2KQorCQkJcHJldi0+c193ci5uZXh0ID0gJnNlbmQtPnNfd3I7CisJCXByZXYgPSBzZW5kOworCisJCXBvcyA9IChwb3MgKyAxKSAlIGljLT5pX3NlbmRfcmluZy53X25yOworCX0KKworCS8qIEFjY291bnQgdGhlIFJEUyBoZWFkZXIgaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZSBzZW50LCBidXQganVzdCBvbmNlLgorCSAqIFRoZSBjYWxsZXIgaGFzIG5vIGNvbmNlcHQgb2YgZnJhZ21lbnRhdGlvbi4gKi8KKwlpZiAoaGRyX29mZiA9PSAwKQorCQlzZW50ICs9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJnJtLT5tX3NnW3JtLT5tX2NvdW50XSkgeworCQlwcmV2LT5zX3JtID0gaWMtPmlfcm07CisJCXByZXYtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisJCWljLT5pX3JtID0gTlVMTDsKKwl9CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKwlpZiAoaWMtPmlfZmxvd2N0bCAmJiBpIDwgY3JlZGl0X2FsbG9jKQorCQlyZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBjcmVkaXRfYWxsb2MgLSBpKTsKKworCS8qIFhYWCBuZWVkIHRvIHdvcnJ5IGFib3V0IGZhaWxlZF93ciBhbmQgcGFydGlhbCBzZW5kcy4gKi8KKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJaWYgKHByZXYtPnNfcm0pIHsKKwkJCWljLT5pX3JtID0gcHJldi0+c19ybTsKKwkJCXByZXYtPnNfcm0gPSBOVUxMOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHNlbnQ7CitvdXQ6CisJQlVHX09OKGFkdl9jcmVkaXRzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfYnVpbGRfc2VuZF9mYXN0cmVnKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kLCBpbnQgbmVudCwgaW50IGxlbiwgdTY0IHNnX2FkZHIpCit7CisJQlVHX09OKG5lbnQgPiBzZW5kLT5zX3BhZ2VfbGlzdC0+bWF4X3BhZ2VfbGlzdF9sZW4pOworCS8qCisJICogUGVyZm9ybSBhIFdSIGZvciB0aGUgZmFzdF9yZWdfbXIuIEVhY2ggaW5kaXZpZHVhbCBwYWdlCisJICogaW4gdGhlIHNnIGxpc3QgaXMgYWRkZWQgdG8gdGhlIGZhc3QgcmVnIHBhZ2UgbGlzdCBhbmQgcGxhY2VkCisJICogaW5zaWRlIHRoZSBmYXN0X3JlZ19tciBXUi4KKwkgKi8KKwlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX0ZBU1RfUkVHX01SOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gbGVuOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlbmQtPnNfbXItPnJrZXk7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBzZW5kLT5zX3BhZ2VfbGlzdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBuZW50OworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IHJkc19pd2Rldi0+cGFnZV9zaGlmdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmFjY2Vzc19mbGFncyA9IElCX0FDQ0VTU19SRU1PVEVfV1JJVEU7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0ID0gc2dfYWRkcjsKKworCWliX3VwZGF0ZV9mYXN0X3JlZ19rZXkoc2VuZC0+c19tciwgc2VuZC0+c19yZW1hcF9jb3VudCsrKTsKK30KKworaW50IHJkc19pd194bWl0X3JkbWEoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqZmlyc3Q7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnByZXY7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl1NjQgcmVtb3RlX2FkZHIgPSBvcC0+cl9yZW1vdGVfYWRkcjsKKwl1MzIgcG9zLCBmcl9wb3M7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGk7CisJdTMyIGo7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgbnVtX3NnZTsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKCFvcC0+cl9tYXBwZWQpIHsKKwkJb3AtPnJfY291bnQgPSBpYl9kbWFfbWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywgKG9wLT5yX3dyaXRlKSA/CisJCQkJCURNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBvcCAlcDogJWRcbiIsIGljLCBvcCwgb3AtPnJfY291bnQpOworCQlpZiAob3AtPnJfY291bnQgPT0gMCkgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJZ290byBvdXQ7CisJCX0KKworCQlvcC0+cl9tYXBwZWQgPSAxOworCX0KKworCWlmICghb3AtPnJfd3JpdGUpIHsKKwkJLyogQWxsb2Mgc3BhY2Ugb24gdGhlIHNlbmQgcXVldWUgZm9yIHRoZSBmYXN0cmVnICovCisJCXdvcmtfYWxsb2MgPSByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCAxLCAmZnJfcG9zKTsKKwkJaWYgKHdvcmtfYWxsb2MgIT0gMSkgeworCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9yaW5nX2Z1bGwpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGtub3dpbmcgaG93IHRvIHJldHVybiBhIHBhcnRpYWwgcmRtYSByZWFkL3dyaXRlIHdlIGluc2lzdCB0aGF0IHRoZXJlCisJICogYmUgZW5vdWdoIHdvcmsgcmVxdWVzdHMgdG8gc2VuZCB0aGUgZW50aXJlIG1lc3NhZ2UuCisJICovCisJaSA9IGNlaWwob3AtPnJfY291bnQsIHJkc19pd2Rldi0+bWF4X3NnZSk7CisKKwl3b3JrX2FsbG9jID0gcmRzX2l3X3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgaSwgJnBvcyk7CisJaWYgKHdvcmtfYWxsb2MgIT0gaSkgeworCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VuZCA9ICZpYy0+aV9zZW5kc1twb3NdOworCWlmICghb3AtPnJfd3JpdGUpIHsKKwkJZmlyc3QgPSBwcmV2ID0gJmljLT5pX3NlbmRzW2ZyX3Bvc107CisJfSBlbHNlIHsKKwkJZmlyc3QgPSBzZW5kOworCQlwcmV2ID0gTlVMTDsKKwl9CisJc2NhdCA9ICZvcC0+cl9zZ1swXTsKKwlzZW50ID0gMDsKKwludW1fc2dlID0gb3AtPnJfY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGkrKykgeworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byBkZWxheSBzaWduYWxpbmcgY29tcGxldGlvbnMganVzdCBlbm91Z2ggdG8gZ2V0CisJCSAqIHRoZSBiYXRjaGluZyBiZW5lZml0cyBidXQgbm90IHNvIG11Y2ggdGhhdCB3ZSBjcmVhdGUgZGVhZCB0aW1lIG9uIHRoZSB3aXJlLgorCQkgKi8KKwkJaWYgKGljLT5pX3Vuc2lnbmFsZWRfd3JzLS0gPT0gMCkgeworCQkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQl9CisKKwkJLyogVG8gYXZvaWQgdGhlIG5lZWQgdG8gaGF2ZSB0aGUgcGx1bWJpbmcgdG8gaW52YWxpZGF0ZSB0aGUgZmFzdHJlZ19tciB1c2VkCisJCSAqIGZvciBsb2NhbCBhY2Nlc3MgYWZ0ZXIgUkRTIGlzIGZpbmlzaGVkIHdpdGggaXQsIHVzaW5nCisJCSAqIElCX1dSX1JETUFfUkVBRF9XSVRIX0lOViB3aWxsIGludmFsaWRhdGUgaXQgYWZ0ZXIgdGhlIHJlYWQgaGFzIGNvbXBsZXRlZC4KKwkJICovCisJCWlmIChvcC0+cl93cml0ZSkKKwkJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfUkRNQV9XUklURTsKKwkJZWxzZQorCQkJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY7CisKKwkJc2VuZC0+c193ci53ci5yZG1hLnJlbW90ZV9hZGRyID0gcmVtb3RlX2FkZHI7CisJCXNlbmQtPnNfd3Iud3IucmRtYS5ya2V5ID0gb3AtPnJfa2V5OworCQlzZW5kLT5zX29wID0gb3A7CisKKwkJaWYgKG51bV9zZ2UgPiByZHNfaXdkZXYtPm1heF9zZ2UpIHsKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IHJkc19pd2Rldi0+bWF4X3NnZTsKKwkJCW51bV9zZ2UgLT0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCQl9IGVsc2UKKwkJCXNlbmQtPnNfd3IubnVtX3NnZSA9IG51bV9zZ2U7CisKKwkJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCisJCWZvciAoaiA9IDA7IGogPCBzZW5kLT5zX3dyLm51bV9zZ2UgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBqKyspIHsKKwkJCWxlbiA9IGliX3NnX2RtYV9sZW4oaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisKKwkJCWlmIChzZW5kLT5zX3dyLm9wY29kZSA9PSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlYpCisJCQkJc2VuZC0+c19wYWdlX2xpc3QtPnBhZ2VfbGlzdFtqXSA9IGliX3NnX2RtYV9hZGRyZXNzKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJZWxzZSB7CisJCQkJc2VuZC0+c19zZ2Vbal0uYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCQkJCXNlbmQtPnNfc2dlW2pdLmxlbmd0aCA9IGxlbjsKKwkJCQlzZW5kLT5zX3NnZVtqXS5sa2V5ID0gcmRzX2l3X2xvY2FsX2RtYV9sa2V5KGljKTsKKwkJCX0KKworCQkJc2VudCArPSBsZW47CisJCQlyZHNkZWJ1ZygiaWMgJXAgc2VudCAlZCByZW1vdGVfYWRkciAlbGx1XG4iLCBpYywgc2VudCwgcmVtb3RlX2FkZHIpOworCQkJcmVtb3RlX2FkZHIgKz0gbGVuOworCisJCQlzY2F0Kys7CisJCX0KKworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQkJc2VuZC0+c19zZ2VbMF0uYWRkciA9IGNvbm4tPmNfeG1pdF9ybS0+bV9ycy0+cnNfdXNlcl9hZGRyOworCQkJc2VuZC0+c19zZ2VbMF0ubGVuZ3RoID0gY29ubi0+Y194bWl0X3JtLT5tX3JzLT5yc191c2VyX2J5dGVzOworCQkJc2VuZC0+c19zZ2VbMF0ubGtleSA9IGljLT5pX3NlbmRzW2ZyX3Bvc10uc19tci0+bGtleTsKKwkJfQorCisJCXJkc2RlYnVnKCJzZW5kICVwIHdyICVwIG51bV9zZ2UgJXUgbmV4dCAlcFxuIiwgc2VuZCwKKwkJCSZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJcHJldiA9IHNlbmQ7CisJCWlmICgrK3NlbmQgPT0gJmljLT5pX3NlbmRzW2ljLT5pX3NlbmRfcmluZy53X25yXSkKKwkJCXNlbmQgPSBpYy0+aV9zZW5kczsKKwl9CisKKwkvKiBpZiB3ZSBmaW5pc2hlZCB0aGUgbWVzc2FnZSB0aGVuIHNlbmQgY29tcGxldGlvbiBvd25zIGl0ICovCisJaWYgKHNjYXQgPT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XSkKKwkJZmlyc3QtPnNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlpZiAoaSA8IHdvcmtfYWxsb2MpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jIC0gaSk7CisJCXdvcmtfYWxsb2MgPSBpOworCX0KKworCS8qIE9uIGlXQVJQLCBsb2NhbCBtZW1vcnkgYWNjZXNzIGJ5IGEgcmVtb3RlIHN5c3RlbSAoaWUsIFJETUEgUmVhZCkgaXMgbm90CisJICogcmVjb21tZW5kZWQuICBQdXR0aW5nIHRoZSBsa2V5IG9uIHRoZSB3aXJlIGlzIGEgc2VjdXJpdHkgaG9sZSwgYXMgaXQgY2FuCisJICogYWxsb3cgZm9yIG1lbW9yeSBhY2Nlc3MgdG8gYWxsIG9mIG1lbW9yeSBvbiB0aGUgcmVtb3RlIHN5c3RlbS4gIFNvbWUKKwkgKiBhZGFwdGVycyBkbyBub3QgYWxsb3cgdXNpbmcgdGhlIGxrZXkgZm9yIHRoaXMgYXQgYWxsLiAgVG8gYnlwYXNzIHRoaXMgdXNlIGEKKwkgKiBmYXN0cmVnX21yIChvciBwb3NzaWJseSBhIGRtYV9tcikKKwkgKi8KKwlpZiAoIW9wLT5yX3dyaXRlKSB7CisJCXJkc19pd19idWlsZF9zZW5kX2Zhc3RyZWcocmRzX2l3ZGV2LCBpYywgJmljLT5pX3NlbmRzW2ZyX3Bvc10sCisJCQlvcC0+cl9jb3VudCwgc2VudCwgY29ubi0+Y194bWl0X3JtLT5tX3JzLT5yc191c2VyX2FkZHIpOworCQl3b3JrX2FsbG9jKys7CisJfQorCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IHJkbWEgaWJfcG9zdF9zZW5kIHRvICVwSTQgIgorCQkgICAgICAgInJldHVybmVkICVkXG4iLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaXdfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBXZSBtYXkgaGF2ZSBhIHBlbmRpbmcgQUNLIG9yIHdpbmRvdyB1cGRhdGUgd2Ugd2VyZSB1bmFibGUKKwkgKiB0byBzZW5kIHByZXZpb3VzbHkgKGR1ZSB0byBmbG93IGNvbnRyb2wpLiBUcnkgYWdhaW4uICovCisJcmRzX2l3X2F0dGVtcHRfYWNrKGljKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc3RhdHMuYyBiL25ldC9yZHMvaXdfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M3ZThmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19zdGF0cy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19pd19zdGF0aXN0aWNzLCByZHNfaXdfc3RhdHMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGNoYXIgKnJkc19pd19zdGF0X25hbWVzW10gPSB7CisJIml3X2Nvbm5lY3RfcmFjZWQiLAorCSJpd19saXN0ZW5fY2xvc2VkX3N0YWxlIiwKKwkiaXdfdHhfY3FfY2FsbCIsCisJIml3X3R4X2NxX2V2ZW50IiwKKwkiaXdfdHhfcmluZ19mdWxsIiwKKwkiaXdfdHhfdGhyb3R0bGUiLAorCSJpd190eF9zZ19tYXBwaW5nX2ZhaWx1cmUiLAorCSJpd190eF9zdGFsbGVkIiwKKwkiaXdfdHhfY3JlZGl0X3VwZGF0ZXMiLAorCSJpd19yeF9jcV9jYWxsIiwKKwkiaXdfcnhfY3FfZXZlbnQiLAorCSJpd19yeF9yaW5nX2VtcHR5IiwKKwkiaXdfcnhfcmVmaWxsX2Zyb21fY3EiLAorCSJpd19yeF9yZWZpbGxfZnJvbV90aHJlYWQiLAorCSJpd19yeF9hbGxvY19saW1pdCIsCisJIml3X3J4X2NyZWRpdF91cGRhdGVzIiwKKwkiaXdfYWNrX3NlbnQiLAorCSJpd19hY2tfc2VuZF9mYWlsdXJlIiwKKwkiaXdfYWNrX3NlbmRfZGVsYXllZCIsCisJIml3X2Fja19zZW5kX3BpZ2d5YmFja2VkIiwKKwkiaXdfYWNrX3JlY2VpdmVkIiwKKwkiaXdfcmRtYV9tcl9hbGxvYyIsCisJIml3X3JkbWFfbXJfZnJlZSIsCisJIml3X3JkbWFfbXJfdXNlZCIsCisJIml3X3JkbWFfbXJfcG9vbF9mbHVzaCIsCisJIml3X3JkbWFfbXJfcG9vbF93YWl0IiwKKwkiaXdfcmRtYV9tcl9wb29sX2RlcGxldGVkIiwKK307CisKK3Vuc2lnbmVkIGludCByZHNfaXdfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IGF2YWlsKQoreworCXN0cnVjdCByZHNfaXdfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcykpCisJCWdvdG8gb3V0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19pd19zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX2l3X3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcykpOworb3V0OgorCXJldHVybiBBUlJBWV9TSVpFKHJkc19pd19zdGF0X25hbWVzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc3lzY3RsLmMgYi9uZXQvcmRzL2l3X3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTA2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3N5c2N0bC5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJpdy5oIgorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJkc19pd19zeXNjdGxfaGRyOworCit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IgPSBSRFNfSVdfREVGQVVMVF9TRU5EX1dSOwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyID0gUkRTX0lXX0RFRkFVTFRfUkVDVl9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gKDEyOCAqIDEwMjQgKiAxMDI0KSAvIFJEU19GUkFHX1NJWkU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF93cl9taW4gPSAxOworLyogaGFyZHdhcmUgd2lsbCBmYWlsIENRIGNyZWF0aW9uIGxvbmcgYmVmb3JlIHRoaXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3dyX21heCA9ICh1MzIpfjA7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzID0gMTY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9taW4gPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4ID0gNjQ7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMgPSAoMTYgPDwgMjApOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGludCByZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisKK2N0bF90YWJsZSByZHNfaXdfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9zZW5kX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX3dyIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dycywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluLAorCQkuZXh0cmEyCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ193cl9tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAibWF4X3Vuc2lnbmFsZWRfYnl0ZXMiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF9yZWN2X2FsbG9jYXRpb24iLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImZsb3dfY29udHJvbCIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX2Zsb3dfY29udHJvbCwKKwkJLm1heGxlbgkJPSBzaXplb2YocmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF9wYXRoIHJkc19pd19zeXNjdGxfcGF0aFtdID0geworCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCisJeyAucHJvY25hbWUgPSAicmRzIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyAucHJvY25hbWUgPSAiaXciLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKK3ZvaWQgcmRzX2l3X3N5c2N0bF9leGl0KHZvaWQpCit7CisJaWYgKHJkc19pd19zeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyZHNfaXdfc3lzY3RsX2hkcik7Cit9CisKK2ludCBfX2luaXQgcmRzX2l3X3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmRzX2l3X3N5c2N0bF9oZHIgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX2l3X3N5c2N0bF9wYXRoLCByZHNfaXdfc3lzY3RsX3RhYmxlKTsKKwlpZiAocmRzX2l3X3N5c2N0bF9oZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuYyBiL25ldC9yZHMvbG9vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjE5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2xvb3AuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImxvb3AuaCIKKworc3RhdGljIERFRklORV9TUElOTE9DSyhsb29wX2Nvbm5zX2xvY2spOworc3RhdGljIExJU1RfSEVBRChsb29wX2Nvbm5zKTsKKworLyoKKyAqIFRoaXMgJ2xvb3BiYWNrJyB0cmFuc3BvcnQgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGZsb3dzIHRoYXQgb3JpZ2luYXRlCisgKiBhbmQgdGVybWluYXRlIG9uIHRoZSBzYW1lIG1hY2hpbmUuCisgKgorICogQ29ubmVjdGlvbiBidWlsZC11cCBub3RpY2VzIGlmIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHRob3VnaHQgb2YKKyAqIGFzIGEgbG9jYWwgYWRkcmVzcyBieSBhIHRyYW5zcG9ydC4gIEF0IHRoYXQgdGltZSBpdCBkZWNpZGVzIHRvIHVzZSB0aGUKKyAqIGxvb3BiYWNrIHRyYW5zcG9ydCBpbnN0ZWFkIG9mIHRoZSBib3VuZCB0cmFuc3BvcnQgb2YgdGhlIHNlbmRpbmcgc29ja2V0LgorICoKKyAqIFRoZSBsb29wYmFjayB0cmFuc3BvcnQncyBzZW5kaW5nIHBhdGgganVzdCBoYW5kcyB0aGUgc2VudCByZHNfbWVzc2FnZQorICogc3RyYWlnaHQgdG8gdGhlIHJlY2VpdmluZyBwYXRoIHZpYSBhbiBlbWJlZGRlZCByZHNfaW5jb21pbmcuCisgKi8KKworLyoKKyAqIFVzdWFsbHkgYSBtZXNzYWdlIHRyYW5zaXRzIGJvdGggdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIncyBjb25ucyBhcyBpdAorICogZmxvd3MgdG8gdGhlIHJlY2VpdmVyLiAgSW4gdGhlIGxvb3BiYWNrIGNhc2UsIHRob3VnaCwgdGhlIHJlY2VpdmUgcGF0aAorICogaXMgaGFuZGVkIHRoZSBzZW5kaW5nIGNvbm4gc28gdGhlIHNlbnNlIG9mIHRoZSBhZGRyZXNzZXMgaXMgcmV2ZXJzZWQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2xvb3BfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywKKwkJCSB1bnNpZ25lZCBpbnQgb2ZmKQoreworCUJVR19PTihoZHJfb2ZmIHx8IHNnIHx8IG9mZik7CisKKwlyZHNfaW5jX2luaXQoJnJtLT5tX2luYywgY29ubiwgY29ubi0+Y19sYWRkcik7CisJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsgLyogZm9yIHRoZSBpbmMgKi8KKworCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfbGFkZHIsIGNvbm4tPmNfZmFkZHIsICZybS0+bV9pbmMsCisJCQkgIEdGUF9LRVJORUwsIEtNX1VTRVIwKTsKKworCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpLAorCQkJICAgIE5VTEwpOworCisJcmRzX2luY19wdXQoJnJtLT5tX2luYyk7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSArIGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2xvb3BfeG1pdF9jb25nX21hcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlCVUdfT04ob2Zmc2V0KTsKKwlCVUdfT04obWFwICE9IGNvbm4tPmNfbGNvbmcpOworCisJZm9yIChpID0gMDsgaSA8IFJEU19DT05HX01BUF9QQUdFUzsgaSsrKSB7CisJCW1lbWNweSgodm9pZCAqKWNvbm4tPmNfZmNvbmctPm1fcGFnZV9hZGRyc1tpXSwKKwkJICAgICAgICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0sIFBBR0VfU0laRSk7CisJfQorCisJcmRzX2NvbmdfbWFwX3VwZGF0ZWQoY29ubi0+Y19mY29uZywgfih1NjQpIDApOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKyBSRFNfQ09OR19NQVBfQllURVM7Cit9CisKKy8qIHdlIG5lZWQgdG8gYXQgbGVhc3QgZ2l2ZSB0aGUgdGhyZWFkIHNvbWV0aGluZyB0byBzdWNjZWVkICovCitzdGF0aWMgaW50IHJkc19sb29wX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsb29wX25vZGU7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworfTsKKworLyoKKyAqIEV2ZW4gdGhlIGxvb3BiYWNrIHRyYW5zcG9ydCBuZWVkcyB0byBrZWVwIHRyYWNrIG9mIGl0cyBjb25uZWN0aW9ucywKKyAqIHNvIGl0IGNhbiBjYWxsIHJkc19jb25uX2Rlc3Ryb3koKSBvbiB0aGVtIG9uIGV4aXQuIE4uQi4gdGhlcmUgYXJlCisgKiAxKyBsb29wYmFjayBhZGRyZXNzZXMgKDEyNy4qLiouKikgc28gaXQncyBub3QgYSBidWcgdG8gaGF2ZQorICogbXVsdGlwbGUgbG9vcGJhY2sgY29ubnMgYWxsb2NhdGVkLCBhbHRob3VnaCByYXRoZXIgdXNlbGVzcy4KKyAqLworc3RhdGljIGludCByZHNfbG9vcF9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uICpsYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChsYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZsYy0+bG9vcF9ub2RlKTsKKwlsYy0+Y29ubiA9IGNvbm47CisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IGxjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvb3BfY29ubnNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmxjLT5sb29wX25vZGUsICZsb29wX2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb29wX2Nvbm5zX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfbG9vcF9jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfbG9vcF9jb25uZWN0aW9uICpsYyA9IGFyZzsKKwlyZHNkZWJ1ZygibGMgJXBcbiIsIGxjKTsKKwlsaXN0X2RlbCgmbGMtPmxvb3Bfbm9kZSk7CisJa2ZyZWUobGMpOworfQorCitzdGF0aWMgaW50IHJkc19sb29wX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19sb29wX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworfQorCit2b2lkIHJkc19sb29wX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiAqbGMsICpfbGM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZsb29wX2Nvbm5zX2xvY2spOworCWxpc3Rfc3BsaWNlKCZsb29wX2Nvbm5zLCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZsb29wX2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnEoJmxvb3BfY29ubnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGMsIF9sYywgJnRtcF9saXN0LCBsb29wX25vZGUpIHsKKwkJV0FSTl9PTihsYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShsYy0+Y29ubik7CisJfQorfQorCisvKgorICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJ3QgZ28gdGhyb3VnaCBnZW5lcmljCisgKiByZHNfc2VuZF94bWl0KCkgYW5kIGRvZXNuJ3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZAorICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXIKKyAqIHJkc19sb29wX3RyYW5zcG9ydC4KKyAqLworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2xvb3BfdHJhbnNwb3J0ID0geworCS54bWl0CQkJPSByZHNfbG9vcF94bWl0LAorCS54bWl0X2NvbmdfbWFwCQk9IHJkc19sb29wX3htaXRfY29uZ19tYXAsCisJLnJlY3YJCQk9IHJkc19sb29wX3JlY3YsCisJLmNvbm5fYWxsb2MJCT0gcmRzX2xvb3BfY29ubl9hbGxvYywKKwkuY29ubl9mcmVlCQk9IHJkc19sb29wX2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc19sb29wX2Nvbm5fY29ubmVjdCwKKwkuY29ubl9zaHV0ZG93bgkJPSByZHNfbG9vcF9jb25uX3NodXRkb3duLAorCS5pbmNfY29weV90b191c2VyCT0gcmRzX21lc3NhZ2VfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc19tZXNzYWdlX2luY19wdXJnZSwKKwkuaW5jX2ZyZWUJCT0gcmRzX21lc3NhZ2VfaW5jX2ZyZWUsCisJLnRfbmFtZQkJCT0gImxvb3BiYWNrIiwKK307CmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuaCBiL25ldC9yZHMvbG9vcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmIwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2xvb3AuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX1JEU19MT09QX0gKKyNkZWZpbmUgX1JEU19MT09QX0gKKworLyogbG9vcC5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2xvb3BfdHJhbnNwb3J0OworCit2b2lkIHJkc19sb29wX2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTE1ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpOworCitzdGF0aWMgdW5zaWduZWQgaW50CXJkc19leHRoZHJfc2l6ZVtfX1JEU19FWFRIRFJfTUFYXSA9IHsKK1tSRFNfRVhUSERSX05PTkVdCT0gMCwKK1tSRFNfRVhUSERSX1ZFUlNJT05dCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uKSwKK1tSRFNfRVhUSERSX1JETUFdCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hKSwKK1tSRFNfRVhUSERSX1JETUFfREVTVF0JPSBzaXplb2Yoc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCksCit9OworCisKK3ZvaWQgcmRzX21lc3NhZ2VfYWRkcmVmKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJcmRzZGVidWcoImFkZHJlZiBybSAlcCByZWYgJWRcbiIsIHJtLCBhdG9taWNfcmVhZCgmcm0tPm1fcmVmY291bnQpKTsKKwlhdG9taWNfaW5jKCZybS0+bV9yZWZjb3VudCk7Cit9CisKKy8qCisgKiBUaGlzIHJlbGllcyBvbiBkbWFfbWFwX3NnKCkgbm90IHRvdWNoaW5nIHNnW10ucGFnZSBkdXJpbmcgbWVyZ2luZy4KKyAqLworc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoUkRTX01TR19QQUdFVkVDLCAmcm0tPm1fZmxhZ3MpKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJtLT5tX25lbnRzOyBpKyspIHsKKwkJcmRzZGVidWcoInB1dHRpbmcgZGF0YSBwYWdlICVwXG4iLCAodm9pZCAqKXNnX3BhZ2UoJnJtLT5tX3NnW2ldKSk7CisJCS8qIFhYWCB3aWxsIGhhdmUgdG8gcHV0X3BhZ2UgZm9yIHBhZ2UgcmVmcyAqLworCQlfX2ZyZWVfcGFnZShzZ19wYWdlKCZybS0+bV9zZ1tpXSkpOworCX0KKwlybS0+bV9uZW50cyA9IDA7CisKKwlpZiAocm0tPm1fcmRtYV9vcCkKKwkJcmRzX3JkbWFfZnJlZV9vcChybS0+bV9yZG1hX29wKTsKKwlpZiAocm0tPm1fcmRtYV9tcikKKwkJcmRzX21yX3B1dChybS0+bV9yZG1hX21yKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlyZHNfbWVzc2FnZV9wdXJnZShybSk7Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJcmRzZGVidWcoInB1dCBybSAlcCByZWYgJWRcbiIsIHJtLCBhdG9taWNfcmVhZCgmcm0tPm1fcmVmY291bnQpKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZybS0+bV9yZWZjb3VudCkpIHsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9zb2NrX2l0ZW0pKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZybS0+bV9jb25uX2l0ZW0pKTsKKwkJcmRzX21lc3NhZ2VfcHVyZ2Uocm0pOworCisJCWtmcmVlKHJtKTsKKwl9Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworfQorCit2b2lkIHJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJIF9fYmUxNiBkcG9ydCwgdTY0IHNlcSkKK3sKKwloZHItPmhfZmxhZ3MgPSAwOworCWhkci0+aF9zcG9ydCA9IHNwb3J0OworCWhkci0+aF9kcG9ydCA9IGRwb3J0OworCWhkci0+aF9zZXF1ZW5jZSA9IGNwdV90b19iZTY0KHNlcSk7CisJaGRyLT5oX2V4dGhkclswXSA9IFJEU19FWFRIRFJfTk9ORTsKK30KKworaW50IHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGV4dF9sZW4gPSBzaXplb2YodTgpICsgbGVuOworCXVuc2lnbmVkIGNoYXIgKmRzdDsKKworCS8qIEZvciBub3csIHJlZnVzZSB0byBhZGQgbW9yZSB0aGFuIG9uZSBleHRlbnNpb24gaGVhZGVyICovCisJaWYgKGhkci0+aF9leHRoZHJbMF0gIT0gUkRTX0VYVEhEUl9OT05FKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlID49IF9fUkRTX0VYVEhEUl9NQVgKKwkgfHwgbGVuICE9IHJkc19leHRoZHJfc2l6ZVt0eXBlXSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXh0X2xlbiA+PSBSRFNfSEVBREVSX0VYVF9TUEFDRSkKKwkJcmV0dXJuIDA7CisJZHN0ID0gaGRyLT5oX2V4dGhkcjsKKworCSpkc3QrKyA9IHR5cGU7CisJbWVtY3B5KGRzdCwgZGF0YSwgbGVuKTsKKworCWRzdFtsZW5dID0gUkRTX0VYVEhEUl9OT05FOworCXJldHVybiAxOworfQorCisvKgorICogSWYgYSBtZXNzYWdlIGhhcyBleHRlbnNpb24gaGVhZGVycywgcmV0cmlldmUgdGhlbSBoZXJlLgorICogQ2FsbCBsaWtlIHRoaXM6CisgKgorICogdW5zaWduZWQgaW50IHBvcyA9IDA7CisgKgorICogd2hpbGUgKDEpIHsKKyAqCWJ1ZmxlbiA9IHNpemVvZihidWZmZXIpOworICoJdHlwZSA9IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgYnVmZmVyLCAmYnVmbGVuKTsKKyAqCWlmICh0eXBlID09IFJEU19FWFRIRFJfTk9ORSkKKyAqCQlicmVhazsKKyAqCS4uLgorICogfQorICovCitpbnQgcmRzX21lc3NhZ2VfbmV4dF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJdW5zaWduZWQgaW50ICpwb3MsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50ICpidWZsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCwgZXh0X3R5cGUsIGV4dF9sZW47CisJdTggKnNyYyA9IGhkci0+aF9leHRoZHI7CisKKwlvZmZzZXQgPSAqcG9zOworCWlmIChvZmZzZXQgPj0gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCWdvdG8gbm9uZTsKKworCS8qIEdldCB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kIGxlbmd0aC4gRm9yIG5vdywgdGhlCisJICogbGVuZ3RoIGlzIGltcGxpZWQgYnkgdGhlIGV4dGVuc2lvbiB0eXBlLiAqLworCWV4dF90eXBlID0gc3JjW29mZnNldCsrXTsKKworCWlmIChleHRfdHlwZSA9PSBSRFNfRVhUSERSX05PTkUgfHwgZXh0X3R5cGUgPj0gX19SRFNfRVhUSERSX01BWCkKKwkJZ290byBub25lOworCWV4dF9sZW4gPSByZHNfZXh0aGRyX3NpemVbZXh0X3R5cGVdOworCWlmIChvZmZzZXQgKyBleHRfbGVuID4gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCWdvdG8gbm9uZTsKKworCSpwb3MgPSBvZmZzZXQgKyBleHRfbGVuOworCWlmIChleHRfbGVuIDwgKmJ1ZmxlbikKKwkJKmJ1ZmxlbiA9IGV4dF9sZW47CisJbWVtY3B5KGJ1Ziwgc3JjICsgb2Zmc2V0LCAqYnVmbGVuKTsKKwlyZXR1cm4gZXh0X3R5cGU7CisKK25vbmU6CisJKnBvcyA9IFJEU19IRUFERVJfRVhUX1NQQUNFOworCSpidWZsZW4gPSAwOworCXJldHVybiBSRFNfRVhUSERSX05PTkU7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfdmVyc2lvbl9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gZXh0X2hkcjsKKworCWV4dF9oZHIuaF92ZXJzaW9uID0gY3B1X3RvX2JlMzIodmVyc2lvbik7CisJcmV0dXJuIHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oaGRyLCBSRFNfRVhUSERSX1ZFUlNJT04sICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworfQorCitpbnQgcmRzX21lc3NhZ2VfZ2V0X3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCAqdmVyc2lvbikKK3sKKwlzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiBleHRfaGRyOworCXVuc2lnbmVkIGludCBwb3MgPSAwLCBsZW4gPSBzaXplb2YoZXh0X2hkcik7CisKKwkvKiBXZSBhc3N1bWUgdGhlIHZlcnNpb24gZXh0ZW5zaW9uIGlzIHRoZSBvbmx5IG9uZSBwcmVzZW50ICovCisJaWYgKHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgJmV4dF9oZHIsICZsZW4pICE9IFJEU19FWFRIRFJfVkVSU0lPTikKKwkJcmV0dXJuIDA7CisJKnZlcnNpb24gPSBiZTMyX3RvX2NwdShleHRfaGRyLmhfdmVyc2lvbik7CisJcmV0dXJuIDE7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfcmRtYV9kZXN0X2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1MzIgcl9rZXksIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCBleHRfaGRyOworCisJZXh0X2hkci5oX3JkbWFfcmtleSA9IGNwdV90b19iZTMyKHJfa2V5KTsKKwlleHRfaGRyLmhfcmRtYV9vZmZzZXQgPSBjcHVfdG9fYmUzMihvZmZzZXQpOworCXJldHVybiByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKGhkciwgUkRTX0VYVEhEUl9SRE1BX0RFU1QsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOworfQorCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2FsbG9jKHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlybSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfbWVzc2FnZSkgKworCQkgICAgIChuZW50cyAqIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpKSwgZ2ZwKTsKKwlpZiAoIXJtKQorCQlnb3RvIG91dDsKKworCWlmIChuZW50cykKKwkJc2dfaW5pdF90YWJsZShybS0+bV9zZywgbmVudHMpOworCWF0b21pY19zZXQoJnJtLT5tX3JlZmNvdW50LCAxKTsKKwlJTklUX0xJU1RfSEVBRCgmcm0tPm1fc29ja19pdGVtKTsKKwlJTklUX0xJU1RfSEVBRCgmcm0tPm1fY29ubl9pdGVtKTsKKwlzcGluX2xvY2tfaW5pdCgmcm0tPm1fcnNfbG9jayk7CisKK291dDoKKwlyZXR1cm4gcm07Cit9CisKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBhZ2VfYWRkcnMsIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXJtID0gcmRzX21lc3NhZ2VfYWxsb2MoY2VpbCh0b3RhbF9sZW4sIFBBR0VfU0laRSksIEdGUF9LRVJORUwpOworCWlmIChybSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNldF9iaXQoUkRTX01TR19QQUdFVkVDLCAmcm0tPm1fZmxhZ3MpOworCXJtLT5tX2luYy5pX2hkci5oX2xlbiA9IGNwdV90b19iZTMyKHRvdGFsX2xlbik7CisJcm0tPm1fbmVudHMgPSBjZWlsKHRvdGFsX2xlbiwgUEFHRV9TSVpFKTsKKworCWZvciAoaSA9IDA7IGkgPCBybS0+bV9uZW50czsgKytpKSB7CisJCXNnX3NldF9wYWdlKCZybS0+bV9zZ1tpXSwKKwkJCQl2aXJ0X3RvX3BhZ2UocGFnZV9hZGRyc1tpXSksCisJCQkJUEFHRV9TSVpFLCAwKTsKKwl9CisKKwlyZXR1cm4gcm07Cit9CisKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfY29weV9mcm9tX3VzZXIoc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmY7CisJdW5zaWduZWQgbG9uZyBzZ19vZmY7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCByZXQ7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKGNlaWwodG90YWxfbGVuLCBQQUdFX1NJWkUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocm0gPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9pbmMuaV9oZHIuaF9sZW4gPSBjcHVfdG9fYmUzMih0b3RhbF9sZW4pOworCisJLyoKKwkgKiBub3cgYWxsb2NhdGUgYW5kIGNvcHkgaW4gdGhlIGRhdGEgcGF5bG9hZC4KKwkgKi8KKwlzZyA9IHJtLT5tX3NnOworCWlvdiA9IGZpcnN0X2lvdjsKKwlpb3Zfb2ZmID0gMDsKKwlzZ19vZmYgPSAwOyAvKiBEZWFyIGdjYywgc2ctPnBhZ2Ugd2lsbCBiZSBudWxsIGZyb20ga3phbGxvYy4gKi8KKworCXdoaWxlICh0b3RhbF9sZW4pIHsKKwkJaWYgKHNnX3BhZ2Uoc2cpID09IE5VTEwpIHsKKwkJCXJldCA9IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzZywgdG90YWxfbGVuLAorCQkJCQkJICAgICAgIEdGUF9ISUdIVVNFUik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQkJcm0tPm1fbmVudHMrKzsKKwkJCXNnX29mZiA9IDA7CisJCX0KKworCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIHNnLT5sZW5ndGggLSBzZ19vZmYpOworCQl0b19jb3B5ID0gbWluX3Qoc2l6ZV90LCB0b19jb3B5LCB0b3RhbF9sZW4pOworCisJCXJkc2RlYnVnKCJjb3B5aW5nICVsdSBieXRlcyBmcm9tIHVzZXIgaW92IFslcCwgJXp1XSArICVsdSB0byAiCisJCQkgInNnIFslcCwgJXUsICV1XSArICVsdVxuIiwKKwkJCSB0b19jb3B5LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4sIGlvdl9vZmYsCisJCQkgKHZvaWQgKilzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgc2dfb2ZmKTsKKworCQlyZXQgPSByZHNfcGFnZV9jb3B5X2Zyb21fdXNlcihzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCArIHNnX29mZiwKKwkJCQkJICAgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICAgIHRvX2NvcHkpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQl0b3RhbF9sZW4gLT0gdG9fY29weTsKKwkJc2dfb2ZmICs9IHRvX2NvcHk7CisKKwkJaWYgKHNnX29mZiA9PSBzZy0+bGVuZ3RoKQorCQkJc2crKzsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKHJtKQorCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJcm0gPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBybTsKK30KKworaW50IHJkc19tZXNzYWdlX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkJCSBzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmY7CisJdW5zaWduZWQgbG9uZyB2ZWNfb2ZmOworCWludCBjb3BpZWQ7CisJaW50IHJldDsKKwl1MzIgbGVuOworCisJcm0gPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1faW5jKTsKKwlsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJaW92ID0gZmlyc3RfaW92OworCWlvdl9vZmYgPSAwOworCXNnID0gcm0tPm1fc2c7CisJdmVjX29mZiA9IDA7CisJY29waWVkID0gMDsKKworCXdoaWxlIChjb3BpZWQgPCBzaXplICYmIGNvcGllZCA8IGxlbikgeworCQl3aGlsZSAoaW92X29mZiA9PSBpb3YtPmlvdl9sZW4pIHsKKwkJCWlvdl9vZmYgPSAwOworCQkJaW92Kys7CisJCX0KKworCQl0b19jb3B5ID0gbWluKGlvdi0+aW92X2xlbiAtIGlvdl9vZmYsIHNnLT5sZW5ndGggLSB2ZWNfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgc2l6ZSAtIGNvcGllZCk7CisJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB0b19jb3B5LCBsZW4gLSBjb3BpZWQpOworCisJCXJkc2RlYnVnKCJjb3B5aW5nICVsdSBieXRlcyB0byB1c2VyIGlvdiBbJXAsICV6dV0gKyAlbHUgdG8gIgorCQkJICJzZyBbJXAsICV1LCAldV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJIHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCB2ZWNfb2ZmKTsKKworCQlyZXQgPSByZHNfcGFnZV9jb3B5X3RvX3VzZXIoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQgKyB2ZWNfb2ZmLAorCQkJCQkgICAgaW92LT5pb3ZfYmFzZSArIGlvdl9vZmYsCisJCQkJCSAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkgeworCQkJY29waWVkID0gcmV0OworCQkJYnJlYWs7CisJCX0KKworCQlpb3Zfb2ZmICs9IHRvX2NvcHk7CisJCXZlY19vZmYgKz0gdG9fY29weTsKKwkJY29waWVkICs9IHRvX2NvcHk7CisKKwkJaWYgKHZlY19vZmYgPT0gc2ctPmxlbmd0aCkgeworCQkJdmVjX29mZiA9IDA7CisJCQlzZysrOworCQl9CisJfQorCisJcmV0dXJuIGNvcGllZDsKK30KKworLyoKKyAqIElmIHRoZSBtZXNzYWdlIGlzIHN0aWxsIG9uIHRoZSBzZW5kIHF1ZXVlLCB3YWl0IHVudGlsIHRoZSB0cmFuc3BvcnQKKyAqIGlzIGRvbmUgd2l0aCBpdC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBSRE1BIG9wZXJhdGlvbnMuCisgKi8KK3ZvaWQgcmRzX21lc3NhZ2Vfd2FpdChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXdhaXRfZXZlbnQocmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEsCisJCQkhdGVzdF9iaXQoUkRTX01TR19NQVBQRUQsICZybS0+bV9mbGFncykpOworfQorCit2b2lkIHJkc19tZXNzYWdlX3VubWFwcGVkKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJY2xlYXJfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSkpCisJCXdha2VfdXAoJnJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxKTsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9wYWdlLmMgYi9uZXQvcmRzL3BhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDYwNzQzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9wYWdlLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyIHsKKwlzdHJ1Y3QgcGFnZQkqcl9wYWdlOworCXVuc2lnbmVkIGxvbmcJcl9vZmZzZXQ7Cit9OworCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyLCByZHNfcGFnZV9yZW1haW5kZXJzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtZXJybm8gb24gZmFpbHVyZS4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZsdXNoX2RjYWNoZV9wYWdlKCkgYXMgdGhpcyBvbmx5IHdvcmtzCisgKiB3aXRoIHByaXZhdGUgcGFnZXMuICBJZiwgc2F5LCB3ZSB3ZXJlIHRvIGRvIGRpcmVjdGVkIHJlY2VpdmUgdG8gcGlubmVkCisgKiB1c2VyIHBhZ2VzIHdlJ2QgaGF2ZSB0byB3b3JyeSBtb3JlIGFib3V0IGNhY2hlIGNvaGVyZW5jZS4gIChUaG91Z2gKKyAqIHRoZSBmbHVzaF9kY2FjaGVfcGFnZSgpIGluIGdldF91c2VyX3BhZ2VzKCkgd291bGQgcHJvYmFibHkgYmUgZW5vdWdoKS4KKyAqLworaW50IHJkc19wYWdlX2NvcHlfdXNlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCSAgICAgICB2b2lkIF9fdXNlciAqcHRyLCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCQkgICAgICAgaW50IHRvX3VzZXIpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdm9pZCAqYWRkcjsKKworCWlmICh0b191c2VyKQorCQlyZHNfc3RhdHNfYWRkKHNfY29weV90b191c2VyLCBieXRlcyk7CisJZWxzZQorCQlyZHNfc3RhdHNfYWRkKHNfY29weV9mcm9tX3VzZXIsIGJ5dGVzKTsKKworCWFkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJaWYgKHRvX3VzZXIpCisJCXJldCA9IF9fY29weV90b191c2VyX2luYXRvbWljKHB0ciwgYWRkciArIG9mZnNldCwgYnl0ZXMpOworCWVsc2UKKwkJcmV0ID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhhZGRyICsgb2Zmc2V0LCBwdHIsIGJ5dGVzKTsKKwlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1VTRVIwKTsKKworCWlmIChyZXQpIHsKKwkJYWRkciA9IGttYXAocGFnZSk7CisJCWlmICh0b191c2VyKQorCQkJcmV0ID0gY29weV90b191c2VyKHB0ciwgYWRkciArIG9mZnNldCwgYnl0ZXMpOworCQllbHNlCisJCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihhZGRyICsgb2Zmc2V0LCBwdHIsIGJ5dGVzKTsKKwkJa3VubWFwKHBhZ2UpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNZXNzYWdlIGFsbG9jYXRpb24gdXNlcyB0aGlzIHRvIGJ1aWxkIHVwIHJlZ2lvbnMgb2YgYSBtZXNzYWdlLgorICoKKyAqIEBieXRlcyAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkLgorICogQGdmcCAtIHRoZSB3YWl0aW5nIGJlaGF2aW91ciBvZiB0aGUgYWxsb2NhdGlvbgorICoKKyAqIEBnZnAgaXMgYWx3YXlzIG9yZWQgd2l0aCBfX0dGUF9ISUdITUVNLiAgQ2FsbGVycyBtdXN0IGJlIHByZXBhcmVkIHRvCisgKiBrbWFwIHRoZSBwYWdlcywgZXRjLgorICoKKyAqIElmIEBieXRlcyBpcyBhdCBsZWFzdCBhIGZ1bGwgcGFnZSB0aGVuIHRoaXMganVzdCByZXR1cm5zIGEgcGFnZSBmcm9tCisgKiBhbGxvY19wYWdlKCkuCisgKgorICogSWYgQGJ5dGVzIGlzIGEgcGFydGlhbCBwYWdlIHRoZW4gdGhpcyBzdG9yZXMgdGhlIHVudXNlZCByZWdpb24gb2YgdGhlCisgKiBwYWdlIGluIGEgcGVyLWNwdSBzdHJ1Y3R1cmUuICBGdXR1cmUgcGFydGlhbC1wYWdlIGFsbG9jYXRpb25zIG1heSBiZQorICogc2F0aXNmaWVkIGZyb20gdGhhdCBjYWNoZWQgcmVnaW9uLiAgVGhpcyBsZXRzIHVzIHdhc3RlIGxlc3MgbWVtb3J5IG9uCisgKiBzbWFsbCBhbGxvY2F0aW9ucyB3aXRoIG1pbmltYWwgY29tcGxleGl0eS4gIEl0IHdvcmtzIGJlY2F1c2UgdGhlIHRyYW5zbWl0CisgKiBwYXRoIHBhc3NlcyByZWFkLW9ubHkgcGFnZSByZWdpb25zIGRvd24gdG8gZGV2aWNlcy4gIFRoZXkgaG9sZCBhIHBhZ2UKKyAqIHJlZmVyZW5jZSB1bnRpbCB0aGV5IGFyZSBkb25lIHdpdGggdGhlIHJlZ2lvbi4KKyAqLworaW50IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCQkgICAgIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyICpyZW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmV0OworCisJZ2ZwIHw9IF9fR0ZQX0hJR0hNRU07CisKKwkvKiBqdW1wIHN0cmFpZ2h0IHRvIGFsbG9jYXRpb24gaWYgd2UncmUgdHJ5aW5nIGZvciBhIGh1Z2UgcGFnZSAqLworCWlmIChieXRlcyA+PSBQQUdFX1NJWkUpIHsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwKTsKKwkJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCXNnX3NldF9wYWdlKHNjYXQsIHBhZ2UsIFBBR0VfU0laRSwgMCk7CisJCQlyZXQgPSAwOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXJlbSA9ICZwZXJfY3B1KHJkc19wYWdlX3JlbWFpbmRlcnMsIGdldF9jcHUoKSk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJd2hpbGUgKDEpIHsKKwkJLyogYXZvaWQgYSB0aW55IHJlZ2lvbiBnZXR0aW5nIHN0dWNrIGJ5IHRvc3NpbmcgaXQgKi8KKwkJaWYgKHJlbS0+cl9wYWdlICYmIGJ5dGVzID4gKFBBR0VfU0laRSAtIHJlbS0+cl9vZmZzZXQpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfcGFnZV9yZW1haW5kZXJfbWlzcyk7CisJCQlfX2ZyZWVfcGFnZShyZW0tPnJfcGFnZSk7CisJCQlyZW0tPnJfcGFnZSA9IE5VTEw7CisJCX0KKworCQkvKiBoYW5kIG91dCBhIGZyYWdtZW50IGZyb20gdGhlIGNhY2hlZCBwYWdlICovCisJCWlmIChyZW0tPnJfcGFnZSAmJiBieXRlcyA8PSAoUEFHRV9TSVpFIC0gcmVtLT5yX29mZnNldCkpIHsKKwkJCXNnX3NldF9wYWdlKHNjYXQsIHJlbS0+cl9wYWdlLCBieXRlcywgcmVtLT5yX29mZnNldCk7CisJCQlnZXRfcGFnZShzZ19wYWdlKHNjYXQpKTsKKworCQkJaWYgKHJlbS0+cl9vZmZzZXQgIT0gMCkKKwkJCQlyZHNfc3RhdHNfaW5jKHNfcGFnZV9yZW1haW5kZXJfaGl0KTsKKworCQkJcmVtLT5yX29mZnNldCArPSBieXRlczsKKwkJCWlmIChyZW0tPnJfb2Zmc2V0ID09IFBBR0VfU0laRSkgeworCQkJCV9fZnJlZV9wYWdlKHJlbS0+cl9wYWdlKTsKKwkJCQlyZW0tPnJfcGFnZSA9IE5VTEw7CisJCQl9CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBhbGxvYyBpZiB0aGVyZSBpcyBub3RoaW5nIGZvciB1cyB0byB1c2UgKi8KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlwdXRfY3B1KCk7CisKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwKTsKKworCQlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBnZXRfY3B1KCkpOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZGlkIHNvbWVvbmUgcmFjZSB0byBmaWxsIHRoZSByZW1haW5kZXIgYmVmb3JlIHVzPyAqLworCQlpZiAocmVtLT5yX3BhZ2UpIHsKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBvdGhlcndpc2UgaW5zdGFsbCBvdXIgcGFnZSBhbmQgbG9vcCBhcm91bmQgdG8gYWxsb2MgKi8KKwkJcmVtLT5yX3BhZ2UgPSBwYWdlOworCQlyZW0tPnJfb2Zmc2V0ID0gMDsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHV0X2NwdSgpOworb3V0OgorCXJkc2RlYnVnKCJieXRlcyAlbHUgcmV0ICVkICVwICV1ICV1XG4iLCBieXRlcywgcmV0LAorCQkgcmV0ID8gTlVMTCA6IHNnX3BhZ2Uoc2NhdCksIHJldCA/IDAgOiBzY2F0LT5vZmZzZXQsCisJCSByZXQgPyAwIDogc2NhdC0+bGVuZ3RoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19wYWdlX3JlbWFpbmRlcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXN0cnVjdCByZHNfcGFnZV9yZW1haW5kZXIgKnJlbTsKKwlsb25nIGNwdSA9IChsb25nKWhjcHU7CisKKwlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBjcHUpOworCisJcmRzZGVidWcoImNwdSAlbGQgYWN0aW9uIDB4JWx4XG4iLCBjcHUsIGFjdGlvbik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX0RFQUQ6CisJCWlmIChyZW0tPnJfcGFnZSkKKwkJCV9fZnJlZV9wYWdlKHJlbS0+cl9wYWdlKTsKKwkJcmVtLT5yX3BhZ2UgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayByZHNfcGFnZV9yZW1haW5kZXJfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSByZHNfcGFnZV9yZW1haW5kZXJfY3B1X25vdGlmeSwKK307CisKK3ZvaWQgcmRzX3BhZ2VfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCXJkc19wYWdlX3JlbWFpbmRlcl9jcHVfbm90aWZ5KCZyZHNfcGFnZV9yZW1haW5kZXJfbmIsCisJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKUNQVV9ERUFELAorCQkJCQkgICAgICAodm9pZCAqKShsb25nKWkpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWVlYjkxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hLmMKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPiAvKiBmb3IgRE1BXypfREVWSUNFICovCisKKyNpbmNsdWRlICJyZG1hLmgiCisKKy8qCisgKiBYWFgKKyAqICAtIGJ1aWxkIHdpdGggc3BhcnNlCisgKiAgLSBzaG91bGQgd2UgbGltaXQgdGhlIHNpemUgb2YgYSBtciByZWdpb24/ICBsZXQgdHJhbnNwb3J0IHJldHVybiBmYWlsdXJlPworICogIC0gc2hvdWxkIHdlIGRldGVjdCBkdXBsaWNhdGUga2V5cyBvbiBhIHNvY2tldD8gIGhtbS4KKyAqICAtIGFuIHJkbWEgaXMgYW4gbWxvY2ssIGFwcGx5IHJsaW1pdD8KKyAqLworCisvKgorICogZ2V0IHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgbG9va2luZyBhdCB0aGUgcGFnZSBpbmRpY2VzIHRoYXQgdGhlIHN0YXJ0IGFuZAorICogZW5kIGFkZHJlc3NlcyBmYWxsIGluLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgdmVjIGlzIGludmFsaWQuICBJdCBpcyBpbnZhbGlkIGlmIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqIGNhdXNlcyB0aGUgYWRkcmVzcyB0byB3cmFwIG9yIG92ZXJmbG93cyBhbiB1bnNpZ25lZCBpbnQuICBUaGlzIGNvbWVzCisgKiBmcm9tIGJlaW5nIHN0b3JlZCBpbiB0aGUgJ2xlbmd0aCcgbWVtYmVyIG9mICdzdHJ1Y3Qgc2NhdHRlcmxpc3QnLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19wYWdlc19pbl92ZWMoc3RydWN0IHJkc19pb3ZlYyAqdmVjKQoreworCWlmICgodmVjLT5hZGRyICsgdmVjLT5ieXRlcyA8PSB2ZWMtPmFkZHIpIHx8CisJICAgICh2ZWMtPmJ5dGVzID4gKHU2NClVSU5UX01BWCkpCisJCXJldHVybiAwOworCisJcmV0dXJuICgodmVjLT5hZGRyICsgdmVjLT5ieXRlcyArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpIC0KKwkJKHZlYy0+YWRkciA+PiBQQUdFX1NISUZUKTsKK30KKworc3RhdGljIHN0cnVjdCByZHNfbXIgKnJkc19tcl90cmVlX3dhbGsoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHU2NCBrZXksCisJCQkJICAgICAgIHN0cnVjdCByZHNfbXIgKmluc2VydCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX21yICptcjsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJbXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7CisKKwkJaWYgKGtleSA8IG1yLT5yX2tleSkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoa2V5ID4gbXItPnJfa2V5KQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIG1yOworCX0KKworCWlmIChpbnNlcnQpIHsKKwkJcmJfbGlua19ub2RlKCZpbnNlcnQtPnJfcmJfbm9kZSwgcGFyZW50LCBwKTsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZpbnNlcnQtPnJfcmJfbm9kZSwgcm9vdCk7CisJCWF0b21pY19pbmMoJmluc2VydC0+cl9yZWZjb3VudCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogRGVzdHJveSB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIHBhcnQgb2YgYSBNUi4KKyAqLworc3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IG1yLT5yX3NvY2s7CisJdm9pZCAqdHJhbnNfcHJpdmF0ZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJSRFM6IGRlc3Ryb3kgbXIga2V5IGlzICV4IHJlZmNudCAldVxuIiwKKwkJCW1yLT5yX2tleSwgYXRvbWljX3JlYWQoJm1yLT5yX3JlZmNvdW50KSk7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChSRFNfTVJfREVBRCwgJm1yLT5yX3N0YXRlKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKwlpZiAoIVJCX0VNUFRZX05PREUoJm1yLT5yX3JiX25vZGUpKQorCQlyYl9lcmFzZSgmbXItPnJfcmJfbm9kZSwgJnJzLT5yc19yZG1hX2tleXMpOworCXRyYW5zX3ByaXZhdGUgPSBtci0+cl90cmFuc19wcml2YXRlOworCW1yLT5yX3RyYW5zX3ByaXZhdGUgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCWlmICh0cmFuc19wcml2YXRlKQorCQltci0+cl90cmFucy0+ZnJlZV9tcih0cmFuc19wcml2YXRlLCBtci0+cl9pbnZhbGlkYXRlKTsKK30KKwordm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IHJkc19tciAqbXIpCit7CisJcmRzX2Rlc3Ryb3lfbXIobXIpOworCWtmcmVlKG1yKTsKK30KKworLyoKKyAqIEJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHdlIGNhbid0IGhhdmUgYW55IG1vcmUgaW9jdGxzIGNhbGxlZCBvbgorICogdGhlIHNvY2tldCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJhY2luZyB3aXRoIG90aGVycy4KKyAqLwordm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzdHJ1Y3QgcmRzX21yICptcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCS8qIFJlbGVhc2UgYW55IE1ScyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb2NrZXQgKi8KKwl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmcnMtPnJzX3JkbWFfa2V5cykpKSB7CisJCW1yID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCByZHNfbXIsIHJfcmJfbm9kZSk7CisJCWlmIChtci0+cl90cmFucyA9PSBycy0+cnNfdHJhbnNwb3J0KQorCQkJbXItPnJfaW52YWxpZGF0ZSA9IDA7CisJCXJkc19tcl9wdXQobXIpOworCX0KKworCWlmIChycy0+cnNfdHJhbnNwb3J0ICYmIHJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycykKKwkJcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKCk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGluIHVzZXIgcGFnZXMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVzZXJfYWRkciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLAorCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHdyaXRlKQoreworCWludCByZXQ7CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHVzZXJfYWRkciwKKwkJCSAgICAgbnJfcGFnZXMsIHdyaXRlLCAwLCBwYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCWlmICgwIDw9IHJldCAmJiAodW5zaWduZWQpIHJldCA8IG5yX3BhZ2VzKSB7CisJCXdoaWxlIChyZXQtLSkKKwkJCXB1dF9wYWdlKHBhZ2VzW3JldF0pOworCQlyZXQgPSAtRUZBVUxUOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncywKKwkJCQl1NjQgKmNvb2tpZV9yZXQsIHN0cnVjdCByZHNfbXIgKiptcl9yZXQpCit7CisJc3RydWN0IHJkc19tciAqbXIgPSBOVUxMLCAqZm91bmQ7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdm9pZCAqdHJhbnNfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1bnNpZ25lZCBpbnQgbmVudHM7CisJbG9uZyBpOworCWludCByZXQ7CisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnMtPnJzX3RyYW5zcG9ydC0+Z2V0X21yID09IE5VTEwpIHsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCW5yX3BhZ2VzID0gcmRzX3BhZ2VzX2luX3ZlYygmYXJncy0+dmVjKTsKKwlpZiAobnJfcGFnZXMgPT0gMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiUkRTOiBnZXRfbXIgYWRkciAlbGx4IGxlbiAlbGx1IG5yX3BhZ2VzICV1XG4iLAorCQlhcmdzLT52ZWMuYWRkciwgYXJncy0+dmVjLmJ5dGVzLCBucl9wYWdlcyk7CisKKwkvKiBYWFggY2xhbXAgbnJfcGFnZXMgdG8gbGltaXQgdGhlIHNpemUgb2YgdGhpcyBhbGxvYz8gKi8KKwlwYWdlcyA9IGtjYWxsb2MobnJfcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX21yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1yID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXRvbWljX3NldCgmbXItPnJfcmVmY291bnQsIDEpOworCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCW1yLT5yX3RyYW5zID0gcnMtPnJzX3RyYW5zcG9ydDsKKwltci0+cl9zb2NrID0gcnM7CisKKwlpZiAoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9VU0VfT05DRSkKKwkJbXItPnJfdXNlX29uY2UgPSAxOworCWlmIChhcmdzLT5mbGFncyAmIFJEU19SRE1BX0lOVkFMSURBVEUpCisJCW1yLT5yX2ludmFsaWRhdGUgPSAxOworCWlmIChhcmdzLT5mbGFncyAmIFJEU19SRE1BX1JFQURXUklURSkKKwkJbXItPnJfd3JpdGUgPSAxOworCisJLyoKKwkgKiBQaW4gdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCB0aGUgdXNlciBidWZmZXIgYW5kIHRyYW5zZmVyIHRoZSBwYWdlCisJICogcG9pbnRlcnMgdG8gdGhlIG1yJ3Mgc2cgYXJyYXkuICBXZSBjaGVjayB0byBzZWUgaWYgd2UndmUgbWFwcGVkCisJICogdGhlIHdob2xlIHJlZ2lvbiBhZnRlciB0cmFuc2ZlcnJpbmcgdGhlIHBhcnRpYWwgcGFnZSByZWZlcmVuY2VzCisJICogdG8gdGhlIHNnIGFycmF5IHNvIHRoYXQgd2UgY2FuIGhhdmUgb25lIHBhZ2UgcmVmIGNsZWFudXAgcGF0aC4KKwkgKgorCSAqIEZvciBub3cgd2UgaGF2ZSBubyBmbGFnIHRoYXQgdGVsbHMgdXMgd2hldGhlciB0aGUgbWFwcGluZyBpcworCSAqIHIvbyBvciByL3cuIFdlIG5lZWQgdG8gYXNzdW1lIHIvdywgb3Igd2UnbGwgZG8gYSBsb3Qgb2YgUkRNQSB0bworCSAqIHRoZSB6ZXJvIHBhZ2UuCisJICovCisJcmV0ID0gcmRzX3Bpbl9wYWdlcyhhcmdzLT52ZWMuYWRkciAmIFBBR0VfTUFTSywgbnJfcGFnZXMsIHBhZ2VzLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwluZW50cyA9IHJldDsKKwlzZyA9IGtjYWxsb2MobmVudHMsIHNpemVvZigqc2cpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2cgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJV0FSTl9PTighbmVudHMpOworCXNnX2luaXRfdGFibGUoc2csIG5lbnRzKTsKKworCS8qIFN0aWNrIGFsbCBwYWdlcyBpbnRvIHRoZSBzY2F0dGVybGlzdCAqLworCWZvciAoaSA9IDAgOyBpIDwgbmVudHM7IGkrKykKKwkJc2dfc2V0X3BhZ2UoJnNnW2ldLCBwYWdlc1tpXSwgUEFHRV9TSVpFLCAwKTsKKworCXJkc2RlYnVnKCJSRFM6IHRyYW5zX3ByaXZhdGUgbmVudHMgaXMgJXVcbiIsIG5lbnRzKTsKKworCS8qIE9idGFpbiBhIHRyYW5zcG9ydCBzcGVjaWZpYyBNUi4gSWYgdGhpcyBzdWNjZWVkcywgdGhlCisJICogcy9nIGxpc3QgaXMgbm93IG93bmVkIGJ5IHRoZSBNUi4KKwkgKiBOb3RlIHRoYXQgZG1hX21hcCgpIGltcGxpZXMgdGhhdCBwZW5kaW5nIHdyaXRlcyBhcmUKKwkgKiBmbHVzaGVkIHRvIFJBTSwgc28gbm8gZG1hX3N5bmMgaXMgbmVlZGVkIGhlcmUuICovCisJdHJhbnNfcHJpdmF0ZSA9IHJzLT5yc190cmFuc3BvcnQtPmdldF9tcihzZywgbmVudHMsIHJzLAorCQkJCQkJICZtci0+cl9rZXkpOworCisJaWYgKElTX0VSUih0cmFuc19wcml2YXRlKSkgeworCQlmb3IgKGkgPSAwIDsgaSA8IG5lbnRzOyBpKyspCisJCQlwdXRfcGFnZShzZ19wYWdlKCZzZ1tpXSkpOworCQlrZnJlZShzZyk7CisJCXJldCA9IFBUUl9FUlIodHJhbnNfcHJpdmF0ZSk7CisJCWdvdG8gb3V0OworCX0KKworCW1yLT5yX3RyYW5zX3ByaXZhdGUgPSB0cmFuc19wcml2YXRlOworCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIHB1dF91c2VyIGtleSBpcyAleCBjb29raWVfYWRkciAlcFxuIiwKKwkgICAgICAgbXItPnJfa2V5LCAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBhcmdzLT5jb29raWVfYWRkcik7CisKKwkvKiBUaGUgdXNlciBtYXkgcGFzcyB1cyBhbiB1bmFsaWduZWQgYWRkcmVzcywgYnV0IHdlIGNhbiBvbmx5CisJICogbWFwIHBhZ2UgYWxpZ25lZCByZWdpb25zLiBTbyB3ZSBrZWVwIHRoZSBvZmZzZXQsIGFuZCBidWlsZAorCSAqIGEgNjRiaXQgY29va2llIGNvbnRhaW5pbmcgPFJfS2V5LCBvZmZzZXQ+IGFuZCBwYXNzIHRoYXQKKwkgKiBhcm91bmQuICovCisJY29va2llID0gcmRzX3JkbWFfbWFrZV9jb29raWUobXItPnJfa2V5LCBhcmdzLT52ZWMuYWRkciAmIH5QQUdFX01BU0spOworCWlmIChjb29raWVfcmV0KQorCQkqY29va2llX3JldCA9IGNvb2tpZTsKKworCWlmIChhcmdzLT5jb29raWVfYWRkciAmJiBwdXRfdXNlcihjb29raWUsICh1NjQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPmNvb2tpZV9hZGRyKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbnNlcnRpbmcgdGhlIG5ldyBNUiBpbnRvIHRoZSByYnRyZWUgYnVtcHMgaXRzCisJICogcmVmZXJlbmNlIGNvdW50LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJZm91bmQgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCBtci0+cl9rZXksIG1yKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlCVUdfT04oZm91bmQgJiYgZm91bmQgIT0gbXIpOworCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIGtleSBpcyAleFxuIiwgbXItPnJfa2V5KTsKKwlpZiAobXJfcmV0KSB7CisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwkJKm1yX3JldCA9IG1yOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUocGFnZXMpOworCWlmIChtcikKKwkJcmRzX21yX3B1dChtcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIGFyZ3M7CisKKwlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIF9fdXNlciAqKW9wdHZhbCwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCAmYXJncywgTlVMTCwgTlVMTCk7Cit9CisKKy8qCisgKiBGcmVlIHRoZSBNUiBpbmRpY2F0ZWQgYnkgdGhlIGdpdmVuIFJfS2V5CisgKi8KK2ludCByZHNfZnJlZV9tcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCByZHNfZnJlZV9tcl9hcmdzIGFyZ3M7CisJc3RydWN0IHJkc19tciAqbXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCByZHNfZnJlZV9tcl9hcmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncyBfX3VzZXIgKilvcHR2YWwsCisJCQkgICBzaXplb2Yoc3RydWN0IHJkc19mcmVlX21yX2FyZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBTcGVjaWFsIGNhc2UgLSBhIG51bGwgY29va2llIG1lYW5zIGZsdXNoIGFsbCB1bnVzZWQgTVJzICovCisJaWYgKGFyZ3MuY29va2llID09IDApIHsKKwkJaWYgKCFycy0+cnNfdHJhbnNwb3J0IHx8ICFycy0+cnNfdHJhbnNwb3J0LT5mbHVzaF9tcnMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKCk7CisJCXJldHVybiAwOworCX0KKworCS8qIExvb2sgdXAgdGhlIE1SIGdpdmVuIGl0cyBSX2tleSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHJidHJlZQorCSAqIHNvIG5vYm9keSBlbHNlIGZpbmRzIGl0LgorCSAqIFRoaXMgc2hvdWxkIGFsc28gcHJldmVudCByYWNlcyB3aXRoIHJkc19yZG1hX3VudXNlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByZHNfcmRtYV9jb29raWVfa2V5KGFyZ3MuY29va2llKSwgTlVMTCk7CisJaWYgKG1yKSB7CisJCXJiX2VyYXNlKCZtci0+cl9yYl9ub2RlLCAmcnMtPnJzX3JkbWFfa2V5cyk7CisJCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCQlpZiAoYXJncy5mbGFncyAmIFJEU19SRE1BX0lOVkFMSURBVEUpCisJCQltci0+cl9pbnZhbGlkYXRlID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJaWYgKCFtcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGNhbGwgcmRzX2Rlc3Ryb3lfbXIoKSBvdXJzZWx2ZXMgc28gdGhhdCB3ZSdyZSBzdXJlIGl0J3MgZG9uZSBieSB0aGUgdGltZQorCSAqIHdlIHJldHVybi4gIElmIHdlIGxldCByZHNfbXJfcHV0KCkgZG8gaXQgaXQgbWlnaHQgbm90IGhhcHBlbiB1bnRpbAorCSAqIHNvbWVvbmUgZWxzZSBkcm9wcyB0aGVpciByZWYuCisJICovCisJcmRzX2Rlc3Ryb3lfbXIobXIpOworCXJkc19tcl9wdXQobXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlIGFuIGV4dGVuc2lvbiBoZWFkZXIgdGhhdAorICogdGVsbHMgdXMgdGhpcyBNUiB3YXMgdXNlZC4gSXQgYWxsb3dzIHVzIHRvIGltcGxlbWVudAorICogdXNlX29uY2Ugc2VtYW50aWNzCisgKi8KK3ZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpCit7CisJc3RydWN0IHJkc19tciAqbXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgem90X21lID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByX2tleSwgTlVMTCk7CisJaWYgKG1yICYmIChtci0+cl91c2Vfb25jZSB8fCBmb3JjZSkpIHsKKwkJcmJfZXJhc2UoJm1yLT5yX3JiX25vZGUsICZycy0+cnNfcmRtYV9rZXlzKTsKKwkJUkJfQ0xFQVJfTk9ERSgmbXItPnJfcmJfbm9kZSk7CisJCXpvdF9tZSA9IDE7CisJfSBlbHNlIGlmIChtcikKKwkJYXRvbWljX2luYygmbXItPnJfcmVmY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCS8qIE1heSBoYXZlIHRvIGlzc3VlIGEgZG1hX3N5bmMgb24gdGhpcyBtZW1vcnkgcmVnaW9uLgorCSAqIE5vdGUgd2UgY291bGQgYXZvaWQgdGhpcyBpZiB0aGUgb3BlcmF0aW9uIHdhcyBhIFJETUEgUkVBRCwKKwkgKiBidXQgYXQgdGhpcyBwb2ludCB3ZSBjYW4ndCB0ZWxsLiAqLworCWlmIChtciAhPSBOVUxMKSB7CisJCWlmIChtci0+cl90cmFucy0+c3luY19tcikKKwkJCW1yLT5yX3RyYW5zLT5zeW5jX21yKG1yLT5yX3RyYW5zX3ByaXZhdGUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogSWYgdGhlIE1SIHdhcyBtYXJrZWQgYXMgaW52YWxpZGF0ZSwgdGhpcyB3aWxsCisJCSAqIHRyaWdnZXIgYW4gYXN5bmMgZmx1c2guICovCisJCWlmICh6b3RfbWUpCisJCQlyZHNfZGVzdHJveV9tcihtcik7CisJCXJkc19tcl9wdXQobXIpOworCX0KK30KKwordm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCByZHNfcmRtYV9vcCAqcm8pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm8tPnJfbmVudHM7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoJnJvLT5yX3NnW2ldKTsKKworCQkvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaAorCQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCisJCSAqIHRvIGxvY2FsIG1lbW9yeSAqLworCQlpZiAoIXJvLT5yX3dyaXRlKQorCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCXB1dF9wYWdlKHBhZ2UpOworCX0KKworCWtmcmVlKHJvLT5yX25vdGlmaWVyKTsKKwlrZnJlZShybyk7Cit9CisKKy8qCisgKiBhcmdzIGlzIGEgcG9pbnRlciB0byBhbiBpbi1rZXJuZWwgY29weSBpbiB0aGUgc2VuZG1zZyBjbXNnLgorICovCitzdGF0aWMgc3RydWN0IHJkc19yZG1hX29wICpyZHNfcmRtYV9wcmVwYXJlKHN0cnVjdCByZHNfc29jayAqcnMsCisJCQkJCSAgICBzdHJ1Y3QgcmRzX3JkbWFfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgcmRzX2lvdmVjIHZlYzsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CisJdW5zaWduZWQgaW50IG1heF9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnJfYnl0ZXM7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CisJc3RydWN0IHJkc19pb3ZlYyBfX3VzZXIgKmxvY2FsX3ZlYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBucjsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgcmV0OworCisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYXJncy0+bnJfbG9jYWwgPiAodTY0KVVJTlRfTUFYKSB7CisJCXJldCA9IC1FTVNHU0laRTsKKwkJZ290byBvdXQ7CisJfQorCisJbnJfcGFnZXMgPSAwOworCW1heF9wYWdlcyA9IDA7CisKKwlsb2NhbF92ZWMgPSAoc3RydWN0IHJkc19pb3ZlYyBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgYXJncy0+bG9jYWxfdmVjX2FkZHI7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHZlY3RvciAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5ucl9sb2NhbDsgaSsrKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmVjLCAmbG9jYWxfdmVjW2ldLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2lvdmVjKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW5yID0gcmRzX3BhZ2VzX2luX3ZlYygmdmVjKTsKKwkJaWYgKG5yID09IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW1heF9wYWdlcyA9IG1heChuciwgbWF4X3BhZ2VzKTsKKwkJbnJfcGFnZXMgKz0gbnI7CisJfQorCisJcGFnZXMgPSBrY2FsbG9jKG1heF9wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAocGFnZXMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlvcCA9IGt6YWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHJkc19yZG1hX29wLCByX3NnW25yX3BhZ2VzXSksIEdGUF9LRVJORUwpOworCWlmIChvcCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW9wLT5yX3dyaXRlID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9SRUFEV1JJVEUpOworCW9wLT5yX2ZlbmNlID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9GRU5DRSk7CisJb3AtPnJfbm90aWZ5ID0gISEoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9OT1RJRllfTUUpOworCW9wLT5yX3JlY3ZlcnIgPSBycy0+cnNfcmVjdmVycjsKKwlXQVJOX09OKCFucl9wYWdlcyk7CisJc2dfaW5pdF90YWJsZShvcC0+cl9zZywgbnJfcGFnZXMpOworCisJaWYgKG9wLT5yX25vdGlmeSB8fCBvcC0+cl9yZWN2ZXJyKSB7CisJCS8qIFdlIGFsbG9jYXRlIGFuIHVuaW5pdGlhbGl6ZWQgbm90aWZpZXIgaGVyZSwgYmVjYXVzZQorCQkgKiB3ZSBkb24ndCB3YW50IHRvIGRvIHRoYXQgaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlci4gV2UKKwkJICogd291bGQgaGF2ZSB0byB1c2UgR0ZQX0FUT01JQyB0aGVyZSwgYW5kIGRvbid0IHdhbnQgdG8gZGVhbAorCQkgKiB3aXRoIGZhaWxlZCBhbGxvY2F0aW9ucy4KKwkJICovCisJCW9wLT5yX25vdGlmaWVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJkc19ub3RpZmllciksIEdGUF9LRVJORUwpOworCQlpZiAoIW9wLT5yX25vdGlmaWVyKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJb3AtPnJfbm90aWZpZXItPm5fdXNlcl90b2tlbiA9IGFyZ3MtPnVzZXJfdG9rZW47CisJCW9wLT5yX25vdGlmaWVyLT5uX3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJfQorCisJLyogVGhlIGNvb2tpZSBjb250YWlucyB0aGUgUl9LZXkgb2YgdGhlIHJlbW90ZSBtZW1vcnkgcmVnaW9uLCBhbmQKKwkgKiBvcHRpb25hbGx5IGFuIG9mZnNldCBpbnRvIGl0LiBUaGlzIGlzIGhvdyB3ZSBpbXBsZW1lbnQgUkRNQSBpbnRvCisJICogdW5hbGlnbmVkIG1lbW9yeS4KKwkgKiBXaGVuIHNldHRpbmcgdXAgdGhlIFJETUEsIHdlIG5lZWQgdG8gYWRkIHRoYXQgb2Zmc2V0IHRvIHRoZQorCSAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgKHdoaWNoIGlzIHJlYWxseSBhbiBvZmZzZXQgaW50byB0aGUgTVIpCisJICogRklYTUU6IFdlIG1heSB3YW50IHRvIG1vdmUgdGhpcyBpbnRvIGliX3JkbWEuYworCSAqLworCW9wLT5yX2tleSA9IHJkc19yZG1hX2Nvb2tpZV9rZXkoYXJncy0+Y29va2llKTsKKwlvcC0+cl9yZW1vdGVfYWRkciA9IGFyZ3MtPnJlbW90ZV92ZWMuYWRkciArIHJkc19yZG1hX2Nvb2tpZV9vZmZzZXQoYXJncy0+Y29va2llKTsKKworCW5yX2J5dGVzID0gMDsKKworCXJkc2RlYnVnKCJSRFM6IHJkbWEgcHJlcGFyZSBucl9sb2NhbCAlbGx1IHJ2YSAlbGx4IHJrZXkgJXhcbiIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXJncy0+bnJfbG9jYWwsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXJncy0+cmVtb3RlX3ZlYy5hZGRyLAorCSAgICAgICBvcC0+cl9rZXkpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPm5yX2xvY2FsOyBpKyspIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ZWMsICZsb2NhbF92ZWNbaV0sCisJCQkJICAgc2l6ZW9mKHN0cnVjdCByZHNfaW92ZWMpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbnIgPSByZHNfcGFnZXNfaW5fdmVjKCZ2ZWMpOworCQlpZiAobnIgPT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcnMtPnJzX3VzZXJfYWRkciA9IHZlYy5hZGRyOworCQlycy0+cnNfdXNlcl9ieXRlcyA9IHZlYy5ieXRlczsKKworCQkvKiBkaWQgdGhlIHVzZXIgY2hhbmdlIHRoZSB2ZWMgdW5kZXIgdXM/ICovCisJCWlmIChuciA+IG1heF9wYWdlcyB8fCBvcC0+cl9uZW50cyArIG5yID4gbnJfcGFnZXMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBJZiBpdCdzIGEgV1JJVEUgb3BlcmF0aW9uLCB3ZSB3YW50IHRvIHBpbiB0aGUgcGFnZXMgZm9yIHJlYWRpbmcuCisJCSAqIElmIGl0J3MgYSBSRUFEIG9wZXJhdGlvbiwgd2UgbmVlZCB0byBwaW4gdGhlIHBhZ2VzIGZvciB3cml0aW5nLgorCQkgKi8KKwkJcmV0ID0gcmRzX3Bpbl9wYWdlcyh2ZWMuYWRkciAmIFBBR0VfTUFTSywgbnIsIHBhZ2VzLCAhb3AtPnJfd3JpdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCXJkc2RlYnVnKCJSRFM6IG5yX2J5dGVzICV1IG5yICV1IHZlYy5ieXRlcyAlbGx1IHZlYy5hZGRyICVsbHhcbiIsCisJCSAgICAgICBucl9ieXRlcywgbnIsIHZlYy5ieXRlcywgdmVjLmFkZHIpOworCisJCW5yX2J5dGVzICs9IHZlYy5ieXRlczsKKworCQlmb3IgKGogPSAwOyBqIDwgbnI7IGorKykgeworCQkJdW5zaWduZWQgaW50IG9mZnNldCA9IHZlYy5hZGRyICYgflBBR0VfTUFTSzsKKworCQkJc2cgPSAmb3AtPnJfc2dbb3AtPnJfbmVudHMgKyBqXTsKKwkJCXNnX3NldF9wYWdlKHNnLCBwYWdlc1tqXSwKKwkJCQkJbWluX3QodW5zaWduZWQgaW50LCB2ZWMuYnl0ZXMsIFBBR0VfU0laRSAtIG9mZnNldCksCisJCQkJCW9mZnNldCk7CisKKwkJCXJkc2RlYnVnKCJSRFM6IHNnLT5vZmZzZXQgJXggc2ctPmxlbiAleCB2ZWMuYWRkciAlbGx4IHZlYy5ieXRlcyAlbGx1XG4iLAorCQkJICAgICAgIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIHZlYy5hZGRyLCB2ZWMuYnl0ZXMpOworCisJCQl2ZWMuYWRkciArPSBzZy0+bGVuZ3RoOworCQkJdmVjLmJ5dGVzIC09IHNnLT5sZW5ndGg7CisJCX0KKworCQlvcC0+cl9uZW50cyArPSBucjsKKwl9CisKKworCWlmIChucl9ieXRlcyA+IGFyZ3MtPnJlbW90ZV92ZWMuYnl0ZXMpIHsKKwkJcmRzZGVidWcoIlJEUyBucl9ieXRlcyAldSByZW1vdGVfYnl0ZXMgJXUgZG8gbm90IG1hdGNoXG4iLAorCQkJCW5yX2J5dGVzLAorCQkJCSh1bnNpZ25lZCBpbnQpIGFyZ3MtPnJlbW90ZV92ZWMuYnl0ZXMpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJb3AtPnJfYnl0ZXMgPSBucl9ieXRlczsKKworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUocGFnZXMpOworCWlmIChyZXQpIHsKKwkJaWYgKG9wKQorCQkJcmRzX3JkbWFfZnJlZV9vcChvcCk7CisJCW9wID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gb3A7Cit9CisKKy8qCisgKiBUaGUgYXBwbGljYXRpb24gYXNrcyBmb3IgYSBSRE1BIHRyYW5zZmVyLgorICogRXh0cmFjdCBhbGwgYXJndW1lbnRzIGFuZCBzZXQgdXAgdGhlIHJkbWFfb3AKKyAqLworaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wOworCisJaWYgKGNtc2ctPmNtc2dfbGVuIDwgQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCByZHNfcmRtYV9hcmdzKSkKKwkgfHwgcm0tPm1fcmRtYV9vcCAhPSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9wID0gcmRzX3JkbWFfcHJlcGFyZShycywgQ01TR19EQVRBKGNtc2cpKTsKKwlpZiAoSVNfRVJSKG9wKSkKKwkJcmV0dXJuIFBUUl9FUlIob3ApOworCXJkc19zdGF0c19pbmMoc19zZW5kX3JkbWEpOworCXJtLT5tX3JkbWFfb3AgPSBvcDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBhcHBsaWNhdGlvbiB3YW50cyB1cyB0byBwYXNzIGFuIFJETUEgZGVzdGluYXRpb24gKGFrYSBNUikKKyAqIHRvIHRoZSByZW1vdGUKKyAqLworaW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZHNfbXIgKm1yOworCXUzMiByX2tleTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjbXNnLT5jbXNnX2xlbiA8IENNU0dfTEVOKHNpemVvZihyZHNfcmRtYV9jb29raWVfdCkpCisJIHx8IHJtLT5tX3JkbWFfY29va2llICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZybS0+bV9yZG1hX2Nvb2tpZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2Yocm0tPm1fcmRtYV9jb29raWUpKTsKKworCS8qIFdlIGFyZSByZXVzaW5nIGEgcHJldmlvdXNseSBtYXBwZWQgTVIgaGVyZS4gTW9zdCBsaWtlbHksIHRoZQorCSAqIGFwcGxpY2F0aW9uIGhhcyB3cml0dGVuIHRvIHRoZSBidWZmZXIsIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseQorCSAqIGZsdXNoIHRob3NlIHdyaXRlcyB0byBSQU0uIE90aGVyd2lzZSB0aGUgSENBIG1heSBub3Qgc2VlIHRoZW0KKwkgKiB3aGVuIGRvaW5nIGEgRE1BIGZyb20gdGhhdCBidWZmZXIuCisJICovCisJcl9rZXkgPSByZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJbXIgPSByZHNfbXJfdHJlZV93YWxrKCZycy0+cnNfcmRtYV9rZXlzLCByX2tleSwgTlVMTCk7CisJaWYgKG1yID09IE5VTEwpCisJCWVyciA9IC1FSU5WQUw7CS8qIGludmFsaWQgcl9rZXkgKi8KKwllbHNlCisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlpZiAobXIpIHsKKwkJbXItPnJfdHJhbnMtPnN5bmNfbXIobXItPnJfdHJhbnNfcHJpdmF0ZSwgRE1BX1RPX0RFVklDRSk7CisJCXJtLT5tX3JkbWFfbXIgPSBtcjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSBhcHBsaWNhdGlvbiBwYXNzZXMgdXMgYW4gYWRkcmVzcyByYW5nZSBpdCB3YW50cyB0byBlbmFibGUgUkRNQQorICogdG8vZnJvbS4gV2UgbWFwIHRoZSBhcmVhLCBhbmQgc2F2ZSB0aGUgPFJfS2V5LG9mZnNldD4gcGFpcgorICogaW4gcm0tPm1fcmRtYV9jb29raWUuIFRoaXMgY2F1c2VzIGl0IHRvIGJlIHNlbnQgYWxvbmcgdG8gdGhlIHBlZXIKKyAqIGluIGFuIGV4dGVuc2lvbiBoZWFkZXIuCisgKi8KK2ludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZykKK3sKKwlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpCisJIHx8IHJtLT5tX3JkbWFfY29va2llICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIF9fcmRzX3JkbWFfbWFwKHJzLCBDTVNHX0RBVEEoY21zZyksICZybS0+bV9yZG1hX2Nvb2tpZSwgJnJtLT5tX3JkbWFfbXIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmggYi9uZXQvcmRzL3JkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjU1MTIwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hLmgKQEAgLTAsMCArMSw4NCBAQAorI2lmbmRlZiBfUkRTX1JETUFfSAorI2RlZmluZSBfUkRTX1JETUFfSAorCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK3N0cnVjdCByZHNfbXIgeworCXN0cnVjdCByYl9ub2RlCQlyX3JiX25vZGU7CisJYXRvbWljX3QJCXJfcmVmY291bnQ7CisJdTMyCQkJcl9rZXk7CisKKwkvKiBBIGNvcHkgb2YgdGhlIGNyZWF0aW9uIGZsYWdzICovCisJdW5zaWduZWQgaW50CQlyX3VzZV9vbmNlOjE7CisJdW5zaWduZWQgaW50CQlyX2ludmFsaWRhdGU6MTsKKwl1bnNpZ25lZCBpbnQJCXJfd3JpdGU6MTsKKworCS8qIFRoaXMgaXMgZm9yIFJEU19NUl9ERUFELgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgJiBjb25zaXN0ZW50IHRvIG1ha2UgdGhpcyBwYXJ0IG9mIHRoZSBhYm92ZQorCSAqIGJpdCBmaWVsZCBoZXJlLCBidXQgd2UgbmVlZCB0byB1c2UgdGVzdF9hbmRfc2V0X2JpdC4KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlyX3N0YXRlOworCXN0cnVjdCByZHNfc29jawkJKnJfc29jazsgLyogYmFjayBwb2ludGVyIHRvIHRoZSBzb2NrZXQgdGhhdCBvd25zIHVzICovCisJc3RydWN0IHJkc190cmFuc3BvcnQJKnJfdHJhbnM7CisJdm9pZAkJCSpyX3RyYW5zX3ByaXZhdGU7Cit9OworCisvKiBGbGFncyBmb3IgbXItPnJfc3RhdGUgKi8KKyNkZWZpbmUgUkRTX01SX0RFQUQJCTAKKworc3RydWN0IHJkc19yZG1hX29wIHsKKwl1MzIJCQlyX2tleTsKKwl1NjQJCQlyX3JlbW90ZV9hZGRyOworCXVuc2lnbmVkIGludAkJcl93cml0ZToxOworCXVuc2lnbmVkIGludAkJcl9mZW5jZToxOworCXVuc2lnbmVkIGludAkJcl9ub3RpZnk6MTsKKwl1bnNpZ25lZCBpbnQJCXJfcmVjdmVycjoxOworCXVuc2lnbmVkIGludAkJcl9tYXBwZWQ6MTsKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyCSpyX25vdGlmaWVyOworCXVuc2lnbmVkIGludAkJcl9ieXRlczsKKwl1bnNpZ25lZCBpbnQJCXJfbmVudHM7CisJdW5zaWduZWQgaW50CQlyX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdAlyX3NnWzBdOworfTsKKworc3RhdGljIGlubGluZSByZHNfcmRtYV9jb29raWVfdCByZHNfcmRtYV9tYWtlX2Nvb2tpZSh1MzIgcl9rZXksIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIHJfa2V5IHwgKCgodTY0KSBvZmZzZXQpIDw8IDMyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcmRzX3JkbWFfY29va2llX2tleShyZHNfcmRtYV9jb29raWVfdCBjb29raWUpCit7CisJcmV0dXJuIGNvb2tpZTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcmRzX3JkbWFfY29va2llX29mZnNldChyZHNfcmRtYV9jb29raWVfdCBjb29raWUpCit7CisJcmV0dXJuIGNvb2tpZSA+PiAzMjsKK30KKworaW50IHJkc19nZXRfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CitpbnQgcmRzX2ZyZWVfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7Cit2b2lkIHJkc19yZG1hX2Ryb3Bfa2V5cyhzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK2ludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOworaW50IHJkc19jbXNnX3JkbWFfZGVzdChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKK2ludCByZHNfY21zZ19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7Cit2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJkc19yZG1hX29wICpybyk7Cit2b2lkIHJkc19yZG1hX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19tZXNzYWdlICpybSwgaW50KTsKKworZXh0ZXJuIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCByZHNfbXIgKm1yKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfbXJfcHV0KHN0cnVjdCByZHNfbXIgKm1yKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtci0+cl9yZWZjb3VudCkpCisJCV9fcmRzX3B1dF9tcl9maW5hbChtcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTkwMjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorCisjaW5jbHVkZSAicmRtYV90cmFuc3BvcnQuaCIKKworc3RhdGljIHN0cnVjdCByZG1hX2NtX2lkICpyZHNfaXdfbGlzdGVuX2lkOworCitpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJLyogdGhpcyBjYW4gYmUgbnVsbCBpbiB0aGUgbGlzdGVuaW5nIHBhdGggKi8KKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBpZCAlcCBoYW5kbGluZyBldmVudCAldVxuIiwgY29ubiwgY21faWQsCisJCSBldmVudC0+ZXZlbnQpOworCisJaWYgKGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfUk5JQykKKwkJdHJhbnMgPSAmcmRzX2l3X3RyYW5zcG9ydDsKKwllbHNlCisJCXRyYW5zID0gJnJkc19pYl90cmFuc3BvcnQ7CisKKwkvKiBQcmV2ZW50IHNodXRkb3duIGZyb20gdGVhcmluZyBkb3duIHRoZSBjb25uZWN0aW9uCisJICogd2hpbGUgd2UncmUgZXhlY3V0aW5nLiAqLworCWlmIChjb25uKSB7CisJCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisKKwkJLyogSWYgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgc2h1dCBkb3duLCBiYWlsIG91dAorCQkgKiByaWdodCBhd2F5LiBXZSByZXR1cm4gMCBzbyBjbV9pZCBkb2Vzbid0IGdldAorCQkgKiBkZXN0cm95ZWQgcHJlbWF0dXJlbHkgKi8KKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RJU0NPTk5FQ1RJTkcpIHsKKwkJCS8qIFJlamVjdCBpbmNvbWluZyBjb25uZWN0aW9ucyB3aGlsZSB3ZSdyZSB0ZWFyaW5nCisJCQkgKiBkb3duIGFuIGV4aXN0aW5nIG9uZS4gKi8KKwkJCWlmIChldmVudC0+ZXZlbnQgPT0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1QpCisJCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUOgorCQlyZXQgPSB0cmFucy0+Y21faGFuZGxlX2Nvbm5lY3QoY21faWQsIGV2ZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDoKKwkJLyogWFhYIGRvIHdlIG5lZWQgdG8gY2xlYW4gdXAgaWYgdGhpcyBmYWlscz8gKi8KKwkJcmV0ID0gcmRtYV9yZXNvbHZlX3JvdXRlKGNtX2lkLAorCQkJCQkgUkRTX1JETUFfUkVTT0xWRV9USU1FT1VUX01TKTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfUk9VVEVfUkVTT0xWRUQ6CisJCS8qIFhYWCB3b3JyeSBhYm91dCByYWNpbmcgd2l0aCBsaXN0ZW4gYWNjZXB0YW5jZSAqLworCQlyZXQgPSB0cmFucy0+Y21faW5pdGlhdGVfY29ubmVjdChjbV9pZCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOgorCQl0cmFucy0+Y21fY29ubmVjdF9jb21wbGV0ZShjb25uLCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfRVJST1I6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1JPVVRFX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9VTlJFQUNIQUJMRToKKwljYXNlIFJETUFfQ01fRVZFTlRfUkVKRUNURUQ6CisJY2FzZSBSRE1BX0NNX0VWRU5UX0RFVklDRV9SRU1PVkFMOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0NIQU5HRToKKwkJaWYgKGNvbm4pCisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogRElTQ09OTkVDVCBldmVudCAtIGRyb3BwaW5nIGNvbm5lY3Rpb24gIgorCQkJIiVwSTQtPiVwSTRcbiIsICZjb25uLT5jX2xhZGRyLAorCQkJICZjb25uLT5jX2ZhZGRyKTsKKwkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiB0aGluZ3MgbGlrZSBkZXZpY2UgZGlzY29ubmVjdD8gKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGV2ZW50ICV1XG4iLCBldmVudC0+ZXZlbnQpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJaWYgKGNvbm4pCisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKworCXJkc2RlYnVnKCJpZCAlcCBldmVudCAldSBoYW5kbGluZyByZXQgJWRcbiIsIGNtX2lkLCBldmVudC0+ZXZlbnQsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCByZHNfcmRtYV9saXN0ZW5faW5pdCh2b2lkKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOworCWludCByZXQ7CisKKwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIE5VTEwsIFJETUFfUFNfVENQKTsKKwlpZiAoSVNfRVJSKGNtX2lkKSkgeworCQlyZXQgPSBQVFJfRVJSKGNtX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvSVc6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgorCQkgICAgICAgInJkbWFfY3JlYXRlX2lkKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXNpbi5zaW5fZmFtaWx5ID0gUEZfSU5FVCwKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWh0b25sKElOQUREUl9BTlkpOworCXNpbi5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CisKKwkvKgorCSAqIFhYWCBJIGJldCB0aGlzIGJpbmRzIHRoZSBjbV9pZCB0byBhIGRldmljZS4gIElmIHdlIHdhbnQgdG8gc3VwcG9ydAorCSAqIGZhaWwtb3ZlciB3ZSdsbCBoYXZlIHRvIHRha2UgdGhpcyBpbnRvIGNvbnNpZGVyYXRpb24uCisJICovCisJcmV0ID0gcmRtYV9iaW5kX2FkZHIoY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2JpbmRfYWRkcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSByZG1hX2xpc3RlbihjbV9pZCwgMTI4KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2xpc3RlbigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNkZWJ1ZygiY20gJXAgbGlzdGVuaW5nIG9uIHBvcnQgJXVcbiIsIGNtX2lkLCBSRFNfUE9SVCk7CisKKwlyZHNfaXdfbGlzdGVuX2lkID0gY21faWQ7CisJY21faWQgPSBOVUxMOworb3V0OgorCWlmIChjbV9pZCkKKwkJcmRtYV9kZXN0cm95X2lkKGNtX2lkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZHNfcmRtYV9saXN0ZW5fc3RvcCh2b2lkKQoreworCWlmIChyZHNfaXdfbGlzdGVuX2lkKSB7CisJCXJkc2RlYnVnKCJjbSAlcFxuIiwgcmRzX2l3X2xpc3Rlbl9pZCk7CisJCXJkbWFfZGVzdHJveV9pZChyZHNfaXdfbGlzdGVuX2lkKTsKKwkJcmRzX2l3X2xpc3Rlbl9pZCA9IE5VTEw7CisJfQorfQorCitpbnQgX19pbml0IHJkc19yZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX3JkbWFfbGlzdGVuX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHJkc19pd19pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaXdfaW5pdDsKKworCXJldCA9IHJkc19pYl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaWJfaW5pdDsKKworCWdvdG8gb3V0OworCitlcnJfaWJfaW5pdDoKKwlyZHNfaXdfZXhpdCgpOworZXJyX2l3X2luaXQ6CisJcmRzX3JkbWFfbGlzdGVuX3N0b3AoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19yZG1hX2V4aXQodm9pZCkKK3sKKwkvKiBzdG9wIGxpc3RlbmluZyBmaXJzdCB0byBlbnN1cmUgbm8gbmV3IGNvbm5lY3Rpb25zIGFyZSBhdHRlbXB0ZWQgKi8KKwlyZHNfcmRtYV9saXN0ZW5fc3RvcCgpOworCXJkc19pYl9leGl0KCk7CisJcmRzX2l3X2V4aXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmM3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfUkRNQV9UUkFOU1BPUlRfSAorI2RlZmluZSBfUkRNQV9UUkFOU1BPUlRfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgInJkcy5oIgorCisjZGVmaW5lIFJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyAgICAgNTAwMAorCitpbnQgcmRzX3JkbWFfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX3JkbWFfY21fZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisvKiBmcm9tIHJkbWFfdHJhbnNwb3J0LmMgKi8KK2ludCByZHNfcmRtYV9pbml0KHZvaWQpOwordm9pZCByZHNfcmRtYV9leGl0KHZvaWQpOworCisvKiBmcm9tIGliLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfaWJfdHJhbnNwb3J0OworaW50IHJkc19pYl9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfZXhpdCh2b2lkKTsKKworLyogZnJvbSBpdy5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2l3X3RyYW5zcG9ydDsKK2ludCByZHNfaXdfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2l3X2V4aXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwNDAwNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRzLmgKQEAgLTAsMCArMSw2ODYgQEAKKyNpZm5kZWYgX1JEU19SRFNfSAorI2RlZmluZSBfUkRTX1JEU19ICisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcmRzLmg+CisKKyNpbmNsdWRlICJpbmZvLmgiCisKKy8qCisgKiBSRFMgTmV0d29yayBwcm90b2NvbCB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgUkRTX1BST1RPQ09MXzNfMAkweDAzMDAKKyNkZWZpbmUgUkRTX1BST1RPQ09MXzNfMQkweDAzMDEKKyNkZWZpbmUgUkRTX1BST1RPQ09MX1ZFUlNJT04JUkRTX1BST1RPQ09MXzNfMQorI2RlZmluZSBSRFNfUFJPVE9DT0xfTUFKT1IodikJKCh2KSA+PiA4KQorI2RlZmluZSBSRFNfUFJPVE9DT0xfTUlOT1IodikJKCh2KSAmIDI1NSkKKyNkZWZpbmUgUkRTX1BST1RPQ09MKG1haiwgbWluKQkoKChtYWopIDw8IDgpIHwgbWluKQorCisvKgorICogWFhYIHJhbmRvbWx5IGNob3NlbiwgYnV0IGF0IGxlYXN0IHNlZW1zIHRvIGJlIHVudXNlZDoKKyAqICMgICAgICAgICAgICAgICAxODQ2NC0xODc2OCBVbmFzc2lnbmVkCisgKiBXZSBzaG91bGQgZG8gYmV0dGVyLiAgV2Ugd2FudCBhIHJlc2VydmVkIHBvcnQgdG8gZGlzY291cmFnZSB1bnByaXYnZWQKKyAqIHVzZXJzcGFjZSBmcm9tIGxpc3RlbmluZy4KKyAqLworI2RlZmluZSBSRFNfUE9SVAkxODYzNAorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgcmRzZGVidWcoZm10LCBhcmdzLi4uKSBwcl9kZWJ1ZygiJXMoKTogIiBmbXQsIF9fZnVuY19fICwgIyNhcmdzKQorI2Vsc2UKKy8qIHNpZ2gsIHByX2RlYnVnKCkgY2F1c2VzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5ncyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorcmRzZGVidWcoY2hhciAqZm10LCAuLi4pCit7Cit9CisjZW5kaWYKKworLyogWFhYIGlzIHRoZXJlIG9uZSBvZiB0aGVzZSBzb21ld2hlcmU/ICovCisjZGVmaW5lIGNlaWwoeCwgeSkgXAorCSh7IHVuc2lnbmVkIGxvbmcgX194ID0gKHgpLCBfX3kgPSAoeSk7IChfX3ggKyBfX3kgLSAxKSAvIF9feTsgfSkKKworI2RlZmluZSBSRFNfRlJBR19TSElGVAkxMgorI2RlZmluZSBSRFNfRlJBR19TSVpFCSgodW5zaWduZWQgaW50KSgxIDw8IFJEU19GUkFHX1NISUZUKSkKKworI2RlZmluZSBSRFNfQ09OR19NQVBfQllURVMJKDY1NTM2IC8gOCkKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX0xPTkdTCShSRFNfQ09OR19NQVBfQllURVMgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIFJEU19DT05HX01BUF9QQUdFUwkoUEFHRV9BTElHTihSRFNfQ09OR19NQVBfQllURVMpIC8gUEFHRV9TSVpFKQorI2RlZmluZSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTCShQQUdFX1NJWkUgKiA4KQorCitzdHJ1Y3QgcmRzX2NvbmdfbWFwIHsKKwlzdHJ1Y3QgcmJfbm9kZQkJbV9yYl9ub2RlOworCV9fYmUzMgkJCW1fYWRkcjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAltX3dhaXRxOworCXN0cnVjdCBsaXN0X2hlYWQJbV9jb25uX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJbV9wYWdlX2FkZHJzW1JEU19DT05HX01BUF9QQUdFU107Cit9OworCisKKy8qCisgKiBUaGlzIGlzIGhvdyB3ZSB3aWxsIHRyYWNrIHRoZSBjb25uZWN0aW9uIHN0YXRlOgorICogQSBjb25uZWN0aW9uIGlzIGFsd2F5cyBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZworICogc3RhdGVzLiBVcGRhdGVzIHRvIHRoZSBzdGF0ZSBhcmUgYXRvbWljIGFuZCBpbXBseQorICogYSBtZW1vcnkgYmFycmllci4KKyAqLworZW51bSB7CisJUkRTX0NPTk5fRE9XTiA9IDAsCisJUkRTX0NPTk5fQ09OTkVDVElORywKKwlSRFNfQ09OTl9ESVNDT05ORUNUSU5HLAorCVJEU19DT05OX1VQLAorCVJEU19DT05OX0VSUk9SLAorfTsKKworLyogQml0cyBmb3IgY19mbGFncyAqLworI2RlZmluZSBSRFNfTExfU0VORF9GVUxMCTAKKyNkZWZpbmUgUkRTX1JFQ09OTkVDVF9QRU5ESU5HCTEKKworc3RydWN0IHJkc19jb25uZWN0aW9uIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQljX2hhc2hfbm9kZTsKKwlfX2JlMzIJCQljX2xhZGRyOworCV9fYmUzMgkJCWNfZmFkZHI7CisJdW5zaWduZWQgaW50CQljX2xvb3BiYWNrOjE7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjX3Bhc3NpdmU7CisKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwCSpjX2xjb25nOworCXN0cnVjdCByZHNfY29uZ19tYXAJKmNfZmNvbmc7CisKKwlzdHJ1Y3QgbXV0ZXgJCWNfc2VuZF9sb2NrOwkvKiBwcm90ZWN0IHNlbmQgcmluZyAqLworCXN0cnVjdCByZHNfbWVzc2FnZQkqY194bWl0X3JtOworCXVuc2lnbmVkIGxvbmcJCWNfeG1pdF9zZzsKKwl1bnNpZ25lZCBpbnQJCWNfeG1pdF9oZHJfb2ZmOworCXVuc2lnbmVkIGludAkJY194bWl0X2RhdGFfb2ZmOworCXVuc2lnbmVkIGludAkJY194bWl0X3JkbWFfc2VudDsKKworCXNwaW5sb2NrX3QJCWNfbG9jazsJCS8qIHByb3RlY3QgbXNnIHF1ZXVlcyAqLworCXU2NAkJCWNfbmV4dF90eF9zZXE7CisJc3RydWN0IGxpc3RfaGVhZAljX3NlbmRfcXVldWU7CisJc3RydWN0IGxpc3RfaGVhZAljX3JldHJhbnM7CisKKwl1NjQJCQljX25leHRfcnhfc2VxOworCisJc3RydWN0IHJkc190cmFuc3BvcnQJKmNfdHJhbnM7CisJdm9pZAkJCSpjX3RyYW5zcG9ydF9kYXRhOworCisJYXRvbWljX3QJCWNfc3RhdGU7CisJdW5zaWduZWQgbG9uZwkJY19mbGFnczsKKwl1bnNpZ25lZCBsb25nCQljX3JlY29ubmVjdF9qaWZmaWVzOworCXN0cnVjdCBkZWxheWVkX3dvcmsJY19zZW5kX3c7CisJc3RydWN0IGRlbGF5ZWRfd29yawljX3JlY3ZfdzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWNfY29ubl93OworCXN0cnVjdCB3b3JrX3N0cnVjdAljX2Rvd25fdzsKKwlzdHJ1Y3QgbXV0ZXgJCWNfY21fbG9jazsJLyogcHJvdGVjdCBjb25uIHN0YXRlICYgY20gKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJY19tYXBfaXRlbTsKKwl1bnNpZ25lZCBsb25nCQljX21hcF9xdWV1ZWQ7CisJdW5zaWduZWQgbG9uZwkJY19tYXBfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcJCWNfbWFwX2J5dGVzOworCisJdW5zaWduZWQgaW50CQljX3VuYWNrZWRfcGFja2V0czsKKwl1bnNpZ25lZCBpbnQJCWNfdW5hY2tlZF9ieXRlczsKKworCS8qIFByb3RvY29sIHZlcnNpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWNfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgUkRTX0ZMQUdfQ09OR19CSVRNQVAJMHgwMQorI2RlZmluZSBSRFNfRkxBR19BQ0tfUkVRVUlSRUQJMHgwMgorI2RlZmluZSBSRFNfRkxBR19SRVRSQU5TTUlUVEVECTB4MDQKKyNkZWZpbmUgUkRTX01BWF9BRFZfQ1JFRElUCTEyNworCisvKgorICogTWF4aW11bSBzcGFjZSBhdmFpbGFibGUgZm9yIGV4dGVuc2lvbiBoZWFkZXJzLgorICovCisjZGVmaW5lIFJEU19IRUFERVJfRVhUX1NQQUNFCTE2CisKK3N0cnVjdCByZHNfaGVhZGVyIHsKKwlfX2JlNjQJaF9zZXF1ZW5jZTsKKwlfX2JlNjQJaF9hY2s7CisJX19iZTMyCWhfbGVuOworCV9fYmUxNgloX3Nwb3J0OworCV9fYmUxNgloX2Rwb3J0OworCXU4CWhfZmxhZ3M7CisJdTgJaF9jcmVkaXQ7CisJdTgJaF9wYWRkaW5nWzRdOworCV9fc3VtMTYJaF9jc3VtOworCisJdTgJaF9leHRoZHJbUkRTX0hFQURFUl9FWFRfU1BBQ0VdOworfTsKKworLyoKKyAqIFJlc2VydmVkIC0gaW5kaWNhdGVzIGVuZCBvZiBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9OT05FCQkwCisKKy8qCisgKiBUaGlzIGV4dGVuc2lvbiBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHZlcnkKKyAqIGZpcnN0IG1lc3NhZ2UgdGhhdCBpcyBzZW50IG9uIGEgbmV3IGNvbm5lY3Rpb24sCisgKiBhbmQgaWRlbnRpZmllcyB0aGUgcHJvdG9jb2wgbGV2ZWwuIFRoaXMgd2lsbCBoZWxwCisgKiByb2xsaW5nIHVwZGF0ZXMgaWYgYSBmdXR1cmUgY2hhbmdlIHJlcXVpcmVzIGJyZWFraW5nCisgKiB0aGUgcHJvdG9jb2wuCisgKiBOQjogVGhpcyBpcyBubyBsb25nZXIgdHJ1ZSBmb3IgSUIsIHdoZXJlIHdlIGRvIGEgdmVyc2lvbgorICogbmVnb3RpYXRpb24gZHVyaW5nIHRoZSBjb25uZWN0aW9uIHNldHVwIHBoYXNlIChwcm90b2NvbAorICogdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgUkRNQSBDTSBwcml2YXRlIGRhdGEpLgorICovCisjZGVmaW5lIFJEU19FWFRIRFJfVkVSU0lPTgkxCitzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiB7CisJX19iZTMyCQkJaF92ZXJzaW9uOworfTsKKworLyoKKyAqIFRoaXMgZXh0ZW5zaW9uIGhlYWRlciBpcyBpbmNsdWRlZCBpbiB0aGUgUkRTIG1lc3NhZ2UKKyAqIGNoYXNpbmcgYW4gUkRNQSBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9SRE1BCQkyCitzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSB7CisJX19iZTMyCQkJaF9yZG1hX3JrZXk7Cit9OworCisvKgorICogVGhpcyBleHRlbnNpb24gaGVhZGVyIHRlbGxzIHRoZSBwZWVyIGFib3V0IHRoZQorICogZGVzdGluYXRpb24gPFJfS2V5LG9mZnNldD4gb2YgdGhlIHJlcXVlc3RlZCBSRE1BCisgKiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0VYVEhEUl9SRE1BX0RFU1QJMworc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCB7CisJX19iZTMyCQkJaF9yZG1hX3JrZXk7CisJX19iZTMyCQkJaF9yZG1hX29mZnNldDsKK307CisKKyNkZWZpbmUgX19SRFNfRVhUSERSX01BWAkxNiAvKiBmb3Igbm93ICovCisKK3N0cnVjdCByZHNfaW5jb21pbmcgeworCWF0b21pY190CQlpX3JlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJaV9pdGVtOworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqaV9jb25uOworCXN0cnVjdCByZHNfaGVhZGVyCWlfaGRyOworCXVuc2lnbmVkIGxvbmcJCWlfcnhfamlmZmllczsKKwlfX2JlMzIJCQlpX3NhZGRyOworCisJcmRzX3JkbWFfY29va2llX3QJaV9yZG1hX2Nvb2tpZTsKK307CisKKy8qCisgKiBtX3NvY2tfaXRlbSBhbmQgbV9jb25uX2l0ZW0gYXJlIG9uIGxpc3RzIHRoYXQgYXJlIHNlcmlhbGl6ZWQgdW5kZXIKKyAqIGNvbm4tPmNfbG9jay4gIG1fc29ja19pdGVtIGhhcyBhZGRpdGlvbmFsIG1lYW5pbmcgaW4gdGhhdCBvbmNlIGl0IGlzIGVtcHR5CisgKiB0aGUgbWVzc2FnZSB3aWxsIG5vdCBiZSBwdXQgYmFjayBvbiB0aGUgcmV0cmFuc21pdCBsaXN0IGFmdGVyIGJlaW5nIHNlbnQuCisgKiBtZXNzYWdlcyB0aGF0IGFyZSBjYW5jZWxlZCB3aGlsZSBiZWluZyBzZW50IHJlbHkgb24gdGhpcy4KKyAqCisgKiBtX2luYyBpcyB1c2VkIGJ5IGxvb3BiYWNrIHNvIHRoYXQgaXQgY2FuIHBhc3MgYW4gaW5jb21pbmcgbWVzc2FnZSBzdHJhaWdodAorICogYmFjayB1cCBpbnRvIHRoZSByeCBwYXRoLiAgSXQgZW1iZWRzIGEgd2lyZSBoZWFkZXIgd2hpY2ggaXMgYWxzbyB1c2VkIGJ5CisgKiB0aGUgc2VuZCBwYXRoLCB3aGljaCBpcyBraW5kIG9mIGF3a3dhcmQuCisgKgorICogbV9zb2NrX2l0ZW0gaW5kaWNhdGVzIHRoZSBtZXNzYWdlJ3MgcHJlc2VuY2Ugb24gYSBzb2NrZXQncyBzZW5kIG9yIHJlY2VpdmUKKyAqIHF1ZXVlLiAgbV9ycyB3aWxsIHBvaW50IHRvIHRoYXQgc29ja2V0LgorICoKKyAqIG1fZGFkZHIgaXMgdXNlZCBieSBjYW5jZWxsYXRpb24gdG8gcHJ1bmUgbWVzc2FnZXMgdG8gYSBnaXZlbiBkZXN0aW5hdGlvbi4KKyAqCisgKiBUaGUgUkRTX01TR19PTl9TT0NLIGFuZCBSRFNfTVNHX09OX0NPTk4gZmxhZ3MgYXJlIHVzZWQgdG8gYXZvaWQgbG9jaworICogbmVzdGluZy4gIEFzIHBhdGhzIGl0ZXJhdGUgb3ZlciBtZXNzYWdlcyBvbiBhIHNvY2ssIG9yIGNvbm4sIHRoZXkgbXVzdAorICogYWxzbyBsb2NrIHRoZSBjb25uLCBvciBzb2NrLCB0byByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aG9zZSBsaXN0cyB0b28uCisgKiBUZXN0aW5nIHRoZSBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgbWVzc2FnZSBpcyBzdGlsbCBvbiB0aGUgbGlzdHMgbGV0cworICogdXMgYXZvaWQgdGVzdGluZyB0aGUgbGlzdF9oZWFkIGRpcmVjdGx5LiAgVGhhdCBtZWFucyBlYWNoIHBhdGggY2FuIHVzZQorICogdGhlIG1lc3NhZ2UncyBsaXN0X2hlYWQgdG8ga2VlcCBpdCBvbiBhIGxvY2FsIGxpc3Qgd2hpbGUganVnZ2xpbmcgbG9ja3MKKyAqIHdpdGhvdXQgY29uZnVzaW5nIHRoZSBvdGhlciBwYXRoLgorICoKKyAqIG1fYWNrX3NlcSBpcyBhbiBvcHRpb25hbCBmaWVsZCBzZXQgYnkgdHJhbnNwb3J0cyB3aG8gbmVlZCBhIGRpZmZlcmVudAorICogc2VxdWVuY2UgbnVtYmVyIHJhbmdlIHRvIGludmFsaWRhdGUuICBUaGV5IGNhbiB1c2UgdGhpcyBpbiBhIGNhbGxiYWNrCisgKiB0aGF0IHRoZXkgcGFzcyB0byByZHNfc2VuZF9kcm9wX2Fja2VkKCkgdG8gc2VlIGlmIGVhY2ggbWVzc2FnZSBoYXMgYmVlbgorICogYWNrZWQuICBUaGUgSEFTX0FDS19TRVEgZmxhZyBjYW4gYmUgdXNlZCB0byBkZXRlY3QgbWVzc2FnZXMgd2hpY2ggaGF2ZW4ndAorICogaGFkIGFja19zZXEgc2V0IHlldC4KKyAqLworI2RlZmluZSBSRFNfTVNHX09OX1NPQ0sJCTEKKyNkZWZpbmUgUkRTX01TR19PTl9DT05OCQkyCisjZGVmaW5lIFJEU19NU0dfSEFTX0FDS19TRVEJMworI2RlZmluZSBSRFNfTVNHX0FDS19SRVFVSVJFRAk0CisjZGVmaW5lIFJEU19NU0dfUkVUUkFOU01JVFRFRAk1CisjZGVmaW5lIFJEU19NU0dfTUFQUEVECQk2CisjZGVmaW5lIFJEU19NU0dfUEFHRVZFQwkJNworCitzdHJ1Y3QgcmRzX21lc3NhZ2UgeworCWF0b21pY190CQltX3JlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJbV9zb2NrX2l0ZW07CisJc3RydWN0IGxpc3RfaGVhZAltX2Nvbm5faXRlbTsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCW1faW5jOworCXU2NAkJCW1fYWNrX3NlcTsKKwlfX2JlMzIJCQltX2RhZGRyOworCXVuc2lnbmVkIGxvbmcJCW1fZmxhZ3M7CisKKwkvKiBOZXZlciBhY2Nlc3MgbV9ycyB3aXRob3V0IGhvbGRpbmcgbV9yc19sb2NrLgorCSAqIExvY2sgbmVzdGluZyBpcworCSAqICBybS0+bV9yc19sb2NrCisJICogICAtPiBycy0+cnNfbG9jaworCSAqLworCXNwaW5sb2NrX3QJCW1fcnNfbG9jazsKKwlzdHJ1Y3QgcmRzX3NvY2sJCSptX3JzOworCXN0cnVjdCByZHNfcmRtYV9vcAkqbV9yZG1hX29wOworCXJkc19yZG1hX2Nvb2tpZV90CW1fcmRtYV9jb29raWU7CisJc3RydWN0IHJkc19tcgkJKm1fcmRtYV9tcjsKKwl1bnNpZ25lZCBpbnQJCW1fbmVudHM7CisJdW5zaWduZWQgaW50CQltX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdAltX3NnWzBdOworfTsKKworLyoKKyAqIFRoZSBSRFMgbm90aWZpZXIgaXMgdXNlZCAob3B0aW9uYWxseSkgdG8gdGVsbCB0aGUgYXBwbGljYXRpb24gYWJvdXQKKyAqIGNvbXBsZXRlZCBSRE1BIG9wZXJhdGlvbnMuIFJhdGhlciB0aGFuIGtlZXBpbmcgdGhlIHdob2xlIHJkcyBtZXNzYWdlCisgKiBhcm91bmQgb24gdGhlIHF1ZXVlLCB3ZSBhbGxvY2F0ZSBhIHNtYWxsIG5vdGlmaWVyIHRoYXQgaXMgcHV0IG9uIHRoZQorICogc29ja2V0J3Mgbm90aWZpZXJfbGlzdC4gTm90aWZpY2F0aW9ucyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogdGhyb3VnaCBjb250cm9sIG1lc3NhZ2VzLgorICovCitzdHJ1Y3QgcmRzX25vdGlmaWVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsKKwl1aW50NjRfdAkJbl91c2VyX3Rva2VuOworCWludAkJCW5fc3RhdHVzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAtICB0cmFuc3BvcnQgc3BlY2lmaWMgYmVoYXZpb3VyYWwgaG9va3MKKyAqCisgKiBAeG1pdDogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZAorICogICAgICAgIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzCisgKiAgICAgICAgZG9lc24ndCBuZWVkIHRvIGJlIHJlZW50cmFudCBmb3IgYSBnaXZlbiBjb25uLiAgVGhlIGhlYWRlciBtdXN0IGJlCisgKiAgICAgICAgc2VudCBiZWZvcmUgdGhlIGRhdGEgcGF5bG9hZC4gIC54bWl0IG11c3QgYmUgcHJlcGFyZWQgdG8gc2VuZCBhCisgKiAgICAgICAgbWVzc2FnZSB3aXRoIG5vIGRhdGEgcGF5bG9hZC4gIC54bWl0IHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZgorICogICAgICAgIGJ5dGVzIHRoYXQgd2VyZSBzZW50IGRvd24gdGhlIGNvbm5lY3Rpb24sIGluY2x1ZGluZyBoZWFkZXIgYnl0ZXMuCisgKiAgICAgICAgUmV0dXJuaW5nIDAgdGVsbHMgdGhlIGNhbGxlciB0aGF0IGl0IGRvZXNuJ3QgbmVlZCB0byBwZXJmb3JtIGFueQorICogICAgICAgIGFkZGl0aW9uYWwgd29yayBub3cuICBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbnNwb3J0IGhhcworICogICAgICAgIGZpbGxlZCB0aGUgc2VuZGluZyBxdWV1ZSBmb3IgaXRzIGNvbm5lY3Rpb24gYW5kIHdpbGwgaGFuZGxlCisgKiAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmRzIHRocmVhZCB0byBjb250aW51ZSB0aGUgc2VuZCB3aGVuIHNwYWNlIGJlY29tZXMKKyAqICAgICAgICBhdmFpbGFibGUuICBSZXR1cm5pbmcgLUVBR0FJTiB0ZWxscyB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBzZW5kCisgKiAgICAgICAgaW1tZWRpYXRlbHkuICBSZXR1cm5pbmcgLUVOT01FTSB0ZWxscyB0aGUgY2FsbGVyIHRvIHJldHJ5IHRoZSBzZW5kIGF0CisgKiAgICAgICAgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgorICoKKyAqIEBjb25uX3NodXRkb3duOiBjb25uX3NodXRkb3duIHN0b3BzIHRyYWZmaWMgb24gdGhlIGdpdmVuIGNvbm5lY3Rpb24uICBPbmNlCisgKiAgICAgICAgICAgICAgICAgaXQgcmV0dXJucyB0aGUgY29ubmVjdGlvbiBjYW4gbm90IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4KKyAqICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgb25seSBiZSBjYWxsZWQgb25jZSBhZnRlciBjb25uX2Nvbm5lY3QgcmV0dXJucworICogICAgICAgICAgICAgICAgIG5vbi16ZXJvIHN1Y2Nlc3MgYW5kIHdpbGwgVGhlIGNhbGxlciBzZXJpYWxpemVzIHRoaXMgd2l0aAorICogICAgICAgICAgICAgICAgIHRoZSBzZW5kIGFuZCBjb25uZWN0aW5nIHBhdGhzICh4bWl0XyogYW5kIGNvbm5fKikuICBUaGUKKyAqICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgaXMgcmVzcG9uc2libGUgZm9yIG90aGVyIHNlcmlhbGl6YXRpb24sIGluY2x1ZGluZworICogICAgICAgICAgICAgICAgIHJkc19yZWN2X2luY29taW5nKCkuICBUaGlzIGlzIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQgYnV0CisgKiAgICAgICAgICAgICAgICAgc2hvdWxkIHRyeSBoYXJkIG5vdCB0byBibG9jay4KKyAqCisgKiBAeG1pdF9jb25nX21hcDogVGhpcyBhc2tzIHRoZSB0cmFuc3BvcnQgdG8gc2VuZCB0aGUgbG9jYWwgYml0bWFwIGRvd24gdGhlCisgKiAJCSAgIGdpdmVuIGNvbm5lY3Rpb24uICBYWFggZ2V0IGEgYmV0dGVyIHN0b3J5IGFib3V0IHRoZSBiaXRtYXAKKyAqIAkJICAgZmxhZyBhbmQgaGVhZGVyLgorICovCisKK3N0cnVjdCByZHNfdHJhbnNwb3J0IHsKKwljaGFyCQkJdF9uYW1lW1RSQU5TTkFNU0laXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRfaXRlbTsKKwlzdHJ1Y3QgbW9kdWxlCQkqdF9vd25lcjsKKwl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjE7CisKKwlpbnQgKCpsYWRkcl9jaGVjaykoX19iZTMyIGFkZHIpOworCWludCAoKmNvbm5fYWxsb2MpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKKwl2b2lkICgqY29ubl9mcmVlKSh2b2lkICpkYXRhKTsKKwlpbnQgKCpjb25uX2Nvbm5lY3QpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKmNvbm5fc2h1dGRvd24pKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKnhtaXRfcHJlcGFyZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwl2b2lkICgqeG1pdF9jb21wbGV0ZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwlpbnQgKCp4bWl0KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCSAgICB1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKTsKKwlpbnQgKCp4bWl0X2NvbmdfbWFwKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgIHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworCWludCAoKnhtaXRfcmRtYSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKTsKKwlpbnQgKCpyZWN2KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCWludCAoKmluY19jb3B5X3RvX3VzZXIpKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkJc2l6ZV90IHNpemUpOworCXZvaWQgKCppbmNfcHVyZ2UpKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CisJdm9pZCAoKmluY19mcmVlKShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworCisJaW50ICgqY21faGFuZGxlX2Nvbm5lY3QpKHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCQkgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKwlpbnQgKCpjbV9pbml0aWF0ZV9jb25uZWN0KShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOworCXZvaWQgKCpjbV9jb25uZWN0X2NvbXBsZXRlKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKKwl1bnNpZ25lZCBpbnQgKCpzdGF0c19pbmZvX2NvcHkpKHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkJdW5zaWduZWQgaW50IGF2YWlsKTsKKwl2b2lkICgqZXhpdCkodm9pZCk7CisJdm9pZCAqKCpnZXRfbXIpKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbnJfc2csCisJCQlzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpOworCXZvaWQgKCpzeW5jX21yKSh2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICgqZnJlZV9tcikodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpOworCXZvaWQgKCpmbHVzaF9tcnMpKHZvaWQpOworfTsKKworc3RydWN0IHJkc19zb2NrIHsKKwlzdHJ1Y3Qgc29jawkJcnNfc2s7CisKKwl1NjQJCQlyc191c2VyX2FkZHI7CisJdTY0CQkJcnNfdXNlcl9ieXRlczsKKworCS8qCisJICogYm91bmRfYWRkciB1c2VkIGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZywgbm8gSU5BRERSX0FOWQorCSAqIHN1cHBvcnQuCisJICovCisJc3RydWN0IHJiX25vZGUJCXJzX2JvdW5kX25vZGU7CisJX19iZTMyCQkJcnNfYm91bmRfYWRkcjsKKwlfX2JlMzIJCQlyc19jb25uX2FkZHI7CisJX19iZTE2CQkJcnNfYm91bmRfcG9ydDsKKwlfX2JlMTYJCQlyc19jb25uX3BvcnQ7CisKKwkvKgorCSAqIFRoaXMgaXMgb25seSB1c2VkIHRvIGNvbW11bmljYXRlIHRoZSB0cmFuc3BvcnQgYmV0d2VlbiBiaW5kIGFuZAorCSAqIGluaXRpYXRpbmcgY29ubmVjdGlvbnMuICBBbGwgb3RoZXIgdHJhbnMgdXNlIGlzIHJlZmVyZW5jZWQgdGhyb3VnaAorCSAqIHRoZSBjb25uZWN0aW9uLgorCSAqLworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICAgICpyc190cmFuc3BvcnQ7CisKKwkvKgorCSAqIHJkc19zZW5kbXNnIGNhY2hlcyB0aGUgY29ubiBpdCB1c2VkIHRoZSBsYXN0IHRpbWUgYXJvdW5kLgorCSAqIFRoaXMgaGVscHMgYXZvaWQgY29zdGx5IGxvb2t1cHMuCisJICovCisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpyc19jb25uOworCisJLyogZmxhZyBpbmRpY2F0aW5nIHdlIHdlcmUgY29uZ2VzdGVkIG9yIG5vdCAqLworCWludAkJCXJzX2Nvbmdlc3RlZDsKKworCS8qIHJzX2xvY2sgcHJvdGVjdHMgYWxsIHRoZXNlIGFkamFjZW50IG1lbWJlcnMgYmVmb3JlIHRoZSBuZXdsaW5lICovCisJc3BpbmxvY2tfdAkJcnNfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX3NlbmRfcXVldWU7CisJdTMyCQkJcnNfc25kX2J5dGVzOworCWludAkJCXJzX3Jjdl9ieXRlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX25vdGlmeV9xdWV1ZTsJLyogY3VycmVudGx5IHVzZWQgZm9yIGZhaWxlZCBSRE1BcyAqLworCisJLyogQ29uZ2VzdGlvbiB3YWtlX3VwLiBJZiByc19jb25nX21vbml0b3IgaXMgc2V0LCB3ZSB1c2UgY29uZ19tYXNrCisJICogdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSB3b2tlbiB1cC4KKwkgKiBJZiBub3Qgc2V0LCB3ZSB1c2UgcnNfY29uZ190cmFjayB0byBmaW5kIG91dCB3aGV0aGVyIGEgY29uZyBtYXAKKwkgKiB1cGRhdGUgYXJyaXZlZC4KKwkgKi8KKwl1aW50NjRfdAkJcnNfY29uZ19tYXNrOworCXVpbnQ2NF90CQlyc19jb25nX25vdGlmeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX2NvbmdfbGlzdDsKKwl1bnNpZ25lZCBsb25nCQlyc19jb25nX3RyYWNrOworCisJLyoKKwkgKiByc19yZWN2X2xvY2sgcHJvdGVjdHMgdGhlIHJlY2VpdmUgcXVldWUsIGFuZCBpcworCSAqIHVzZWQgdG8gc2VyaWFsaXplIHdpdGggcmRzX3JlbGVhc2UuCisJICovCisJcndsb2NrX3QJCXJzX3JlY3ZfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX3JlY3ZfcXVldWU7CisKKwkvKiBqdXN0IGZvciBzdGF0cyByZXBvcnRpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJzX2l0ZW07CisKKwkvKiB0aGVzZSBoYXZlIHRoZWlyIG93biBsb2NrICovCisJc3BpbmxvY2tfdAkJcnNfcmRtYV9sb2NrOworCXN0cnVjdCByYl9yb290CQlyc19yZG1hX2tleXM7CisKKwkvKiBTb2NrZXQgb3B0aW9ucyAtIGluIGNhc2UgdGhlcmUgd2lsbCBiZSBtb3JlICovCisJdW5zaWduZWQgY2hhcgkJcnNfcmVjdmVyciwKKwkJCQlyc19jb25nX21vbml0b3I7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZHNfc29jayAqcmRzX3NrX3RvX3JzKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgcmRzX3NvY2ssIHJzX3NrKTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnJkc19yc190b19zayhzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXJldHVybiAmcnMtPnJzX3NrOworfQorCisvKgorICogVGhlIHN0YWNrIGFzc2lnbnMgc2tfc25kYnVmIGFuZCBza19yY3ZidWYgdG8gdHdpY2UgdGhlIHNwZWNpZmllZCB2YWx1ZQorICogdG8gYWNjb3VudCBmb3Igb3ZlcmhlYWQuICBXZSBkb24ndCBhY2NvdW50IGZvciBvdmVyaGVhZCwgd2UganVzdCBhcHBseQorICogdGhlIG51bWJlciBvZiBwYXlsb2FkIGJ5dGVzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJkc19za19zbmRidWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gcmRzX3JzX3RvX3NrKHJzKS0+c2tfc25kYnVmIC8gMjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHJkc19za19yY3ZidWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gcmRzX3JzX3RvX3NrKHJzKS0+c2tfcmN2YnVmIC8gMjsKK30KKworc3RydWN0IHJkc19zdGF0aXN0aWNzIHsKKwl1aW50NjRfdAlzX2Nvbm5fcmVzZXQ7CisJdWludDY0X3QJc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtOworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX29sZF9zZXE7CisJdWludDY0X3QJc19yZWN2X2Ryb3Bfbm9fc29jazsKKwl1aW50NjRfdAlzX3JlY3ZfZHJvcF9kZWFkX3NvY2s7CisJdWludDY0X3QJc19yZWN2X2RlbGl2ZXJfcmFjZWQ7CisJdWludDY0X3QJc19yZWN2X2RlbGl2ZXJlZDsKKwl1aW50NjRfdAlzX3JlY3ZfcXVldWVkOworCXVpbnQ2NF90CXNfcmVjdl9pbW1lZGlhdGVfcmV0cnk7CisJdWludDY0X3QJc19yZWN2X2RlbGF5ZWRfcmV0cnk7CisJdWludDY0X3QJc19yZWN2X2Fja19yZXF1aXJlZDsKKwl1aW50NjRfdAlzX3JlY3ZfcmRtYV9ieXRlczsKKwl1aW50NjRfdAlzX3JlY3ZfcGluZzsKKwl1aW50NjRfdAlzX3NlbmRfcXVldWVfZW1wdHk7CisJdWludDY0X3QJc19zZW5kX3F1ZXVlX2Z1bGw7CisJdWludDY0X3QJc19zZW5kX3NlbV9jb250ZW50aW9uOworCXVpbnQ2NF90CXNfc2VuZF9zZW1fcXVldWVfcmFjZWQ7CisJdWludDY0X3QJc19zZW5kX2ltbWVkaWF0ZV9yZXRyeTsKKwl1aW50NjRfdAlzX3NlbmRfZGVsYXllZF9yZXRyeTsKKwl1aW50NjRfdAlzX3NlbmRfZHJvcF9hY2tlZDsKKwl1aW50NjRfdAlzX3NlbmRfYWNrX3JlcXVpcmVkOworCXVpbnQ2NF90CXNfc2VuZF9xdWV1ZWQ7CisJdWludDY0X3QJc19zZW5kX3JkbWE7CisJdWludDY0X3QJc19zZW5kX3JkbWFfYnl0ZXM7CisJdWludDY0X3QJc19zZW5kX3Bvbmc7CisJdWludDY0X3QJc19wYWdlX3JlbWFpbmRlcl9oaXQ7CisJdWludDY0X3QJc19wYWdlX3JlbWFpbmRlcl9taXNzOworCXVpbnQ2NF90CXNfY29weV90b191c2VyOworCXVpbnQ2NF90CXNfY29weV9mcm9tX3VzZXI7CisJdWludDY0X3QJc19jb25nX3VwZGF0ZV9xdWV1ZWQ7CisJdWludDY0X3QJc19jb25nX3VwZGF0ZV9yZWNlaXZlZDsKKwl1aW50NjRfdAlzX2Nvbmdfc2VuZF9lcnJvcjsKKwl1aW50NjRfdAlzX2Nvbmdfc2VuZF9ibG9ja2VkOworfTsKKworLyogYWZfcmRzLmMgKi8KK3ZvaWQgcmRzX3NvY2tfYWRkcmVmKHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfc29ja19wdXQoc3RydWN0IHJkc19zb2NrICpycyk7Cit2b2lkIHJkc193YWtlX3NrX3NsZWVwKHN0cnVjdCByZHNfc29jayAqcnMpOworc3RhdGljIGlubGluZSB2b2lkIF9fcmRzX3dha2Vfc2tfc2xlZXAoc3RydWN0IHNvY2sgKnNrKQoreworCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0cSA9IHNrLT5za19zbGVlcDsKKworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpICYmIHdhaXRxKQorCQl3YWtlX3VwKHdhaXRxKTsKK30KK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCByZHNfcG9sbF93YWl0cTsKKworCisvKiBiaW5kLmMgKi8KK2ludCByZHNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pOwordm9pZCByZHNfcmVtb3ZlX2JvdW5kKHN0cnVjdCByZHNfc29jayAqcnMpOworc3RydWN0IHJkc19zb2NrICpyZHNfZmluZF9ib3VuZChfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQpOworCisvKiBjb25nLmMgKi8KK2ludCByZHNfY29uZ19nZXRfbWFwcyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19hZGRfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29uZ19zZXRfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpOwordm9pZCByZHNfY29uZ19jbGVhcl9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCk7CitpbnQgcmRzX2Nvbmdfd2FpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0LCBpbnQgbm9uYmxvY2ssIHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCk7Cit2b2lkIHJkc19jb25nX21hcF91cGRhdGVkKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgdWludDY0X3QpOworaW50IHJkc19jb25nX3VwZGF0ZWRfc2luY2UodW5zaWduZWQgbG9uZyAqcmVjZW50KTsKK3ZvaWQgcmRzX2NvbmdfYWRkX3NvY2tldChzdHJ1Y3QgcmRzX3NvY2sgKik7Cit2b2lkIHJkc19jb25nX3JlbW92ZV9zb2NrZXQoc3RydWN0IHJkc19zb2NrICopOwordm9pZCByZHNfY29uZ19leGl0KHZvaWQpOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfY29uZ191cGRhdGVfYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKworLyogY29ubi5jICovCitpbnQgX19pbml0IHJkc19jb25uX2luaXQodm9pZCk7Cit2b2lkIHJkc19jb25uX2V4aXQodm9pZCk7CitzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZShfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKKwkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApOworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApOwordm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25uX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zLAorCQkJICBpbnQgKCp2aXNpdG9yKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKiwgdm9pZCAqKSwKKwkJCSAgc2l6ZV90IGl0ZW1fbGVuKTsKK3ZvaWQgX19yZHNfY29ubl9lcnJvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGNvbnN0IGNoYXIgKiwgLi4uKQorCQkJCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKyNkZWZpbmUgcmRzX2Nvbm5fZXJyb3IoY29ubiwgZm10Li4uKSBcCisJX19yZHNfY29ubl9lcnJvcihjb25uLCBLRVJOX1dBUk5JTkcgIlJEUzogIiBmbXQpCisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl90cmFuc2l0aW9uKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IG9sZCwgaW50IG5ldykKK3sKKwlyZXR1cm4gYXRvbWljX2NtcHhjaGcoJmNvbm4tPmNfc3RhdGUsIG9sZCwgbmV3KSA9PSBvbGQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl9zdGF0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Jkc19jb25uX3VwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpID09IFJEU19DT05OX1VQOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fY29ubmVjdGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HOworfQorCisvKiBtZXNzYWdlLmMgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfYWxsb2ModW5zaWduZWQgaW50IG5lbnRzLCBnZnBfdCBnZnApOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9jb3B5X2Zyb21fdXNlcihzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwKKwkJCQkJICAgICAgIHNpemVfdCB0b3RhbF9sZW4pOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyAqcGFnZV9hZGRycywgdW5zaWduZWQgaW50IHRvdGFsX2xlbik7Cit2b2lkIHJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJIF9fYmUxNiBkcG9ydCwgdTY0IHNlcSk7CitpbnQgcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAorCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOworaW50IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCQkgICAgICAgdW5zaWduZWQgaW50ICpwb3MsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50ICpidWZsZW4pOworaW50IHJkc19tZXNzYWdlX2FkZF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgdmVyc2lvbik7CitpbnQgcmRzX21lc3NhZ2VfZ2V0X3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCAqdmVyc2lvbik7CitpbnQgcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdTMyIHJfa2V5LCB1MzIgb2Zmc2V0KTsKK2ludCByZHNfbWVzc2FnZV9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJCQkgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsIHNpemVfdCBzaXplKTsKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19tZXNzYWdlX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19tZXNzYWdlX2FkZHJlZihzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKK3ZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOwordm9pZCByZHNfbWVzc2FnZV93YWl0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pOwordm9pZCByZHNfbWVzc2FnZV91bm1hcHBlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oc3RydWN0IHJkc19oZWFkZXIgKmhkcikKK3sKKwloZHItPmhfY3N1bSA9IDA7CisJaGRyLT5oX2NzdW0gPSBpcF9mYXN0X2NzdW0oKHZvaWQgKikgaGRyLCBzaXplb2YoKmhkcikgPj4gMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShjb25zdCBzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyKQoreworCXJldHVybiAhaGRyLT5oX2NzdW0gfHwgaXBfZmFzdF9jc3VtKCh2b2lkICopIGhkciwgc2l6ZW9mKCpoZHIpID4+IDIpID09IDA7Cit9CisKKworLyogcGFnZS5jICovCitpbnQgcmRzX3BhZ2VfcmVtYWluZGVyX2FsbG9jKHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJCSAgICAgZ2ZwX3QgZ2ZwKTsKK2ludCByZHNfcGFnZV9jb3B5X3VzZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkgICAgICAgdm9pZCBfX3VzZXIgKnB0ciwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJICAgICAgIGludCB0b191c2VyKTsKKyNkZWZpbmUgcmRzX3BhZ2VfY29weV90b191c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcykgXAorCXJkc19wYWdlX2NvcHlfdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMsIDEpCisjZGVmaW5lIHJkc19wYWdlX2NvcHlfZnJvbV91c2VyKHBhZ2UsIG9mZnNldCwgcHRyLCBieXRlcykgXAorCXJkc19wYWdlX2NvcHlfdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMsIDApCit2b2lkIHJkc19wYWdlX2V4aXQodm9pZCk7CisKKy8qIHJlY3YuYyAqLwordm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCSAgX19iZTMyIHNhZGRyKTsKK3ZvaWQgcmRzX2luY19hZGRyZWYoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK3ZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgICAgIHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgZ2ZwX3QgZ2ZwLCBlbnVtIGttX3R5cGUga20pOworaW50IHJkc19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3Qgc2l6ZSwgaW50IG1zZ19mbGFncyk7Cit2b2lkIHJkc19jbGVhcl9yZWN2X3F1ZXVlKHN0cnVjdCByZHNfc29jayAqcnMpOworaW50IHJkc19ub3RpZnlfcXVldWVfZ2V0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZyk7Cit2b2lkIHJkc19pbmNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJICAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJICAgICAgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBpbnQgZmxpcCk7CisKKy8qIHNlbmQuYyAqLworaW50IHJkc19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3QgcGF5bG9hZF9sZW4pOwordm9pZCByZHNfc2VuZF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3N0cnVjdCBzb2NrYWRkcl9pbjsKK3ZvaWQgcmRzX3NlbmRfZHJvcF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRlc3QpOwordHlwZWRlZiBpbnQgKCppc19hY2tlZF9mdW5jKShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCB1aW50NjRfdCBhY2spOwordm9pZCByZHNfc2VuZF9kcm9wX2Fja2VkKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IGFjaywKKwkJCSBpc19hY2tlZF9mdW5jIGlzX2Fja2VkKTsKK2ludCByZHNfc2VuZF9hY2tlZF9iZWZvcmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgc2VxKTsKK3ZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cyk7CitpbnQgcmRzX3NlbmRfcG9uZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUxNiBkcG9ydCk7CitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19zZW5kX2dldF9tZXNzYWdlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqLAorCQkJCQkgc3RydWN0IHJkc19yZG1hX29wICopOworCisvKiByZG1hLmMgKi8KK3ZvaWQgcmRzX3JkbWFfdW51c2Uoc3RydWN0IHJkc19zb2NrICpycywgdTMyIHJfa2V5LCBpbnQgZm9yY2UpOworCisvKiBzdGF0cy5jICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJkc19zdGF0aXN0aWNzLCByZHNfc3RhdHMpOworI2RlZmluZSByZHNfc3RhdHNfaW5jX3doaWNoKHdoaWNoLCBtZW1iZXIpIGRvIHsJCVwKKwlwZXJfY3B1KHdoaWNoLCBnZXRfY3B1KCkpLm1lbWJlcisrOwkJXAorCXB1dF9jcHUoKTsJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIHJkc19zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc19zdGF0cywgbWVtYmVyKQorI2RlZmluZSByZHNfc3RhdHNfYWRkX3doaWNoKHdoaWNoLCBtZW1iZXIsIGNvdW50KSBkbyB7CQlcCisJcGVyX2NwdSh3aGljaCwgZ2V0X2NwdSgpKS5tZW1iZXIgKz0gY291bnQ7CVwKKwlwdXRfY3B1KCk7CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSByZHNfc3RhdHNfYWRkKG1lbWJlciwgY291bnQpIHJkc19zdGF0c19hZGRfd2hpY2gocmRzX3N0YXRzLCBtZW1iZXIsIGNvdW50KQoraW50IF9faW5pdCByZHNfc3RhdHNfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3N0YXRzX2V4aXQodm9pZCk7Cit2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKTsKKworLyogc3lzY3RsLmMgKi8KK2ludCBfX2luaXQgcmRzX3N5c2N0bF9pbml0KHZvaWQpOwordm9pZCByZHNfc3lzY3RsX2V4aXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3NuZGJ1Zl9taW47CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3NuZGJ1Zl9kZWZhdWx0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9zbmRidWZfbWF4OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0czsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXM7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX3BpbmdfZW5hYmxlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF90cmFjZV9mbGFnczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfdHJhY2VfbGV2ZWw7CisKKy8qIHRocmVhZHMuYyAqLworaW50IF9faW5pdCByZHNfdGhyZWFkc19pbml0KHZvaWQpOwordm9pZCByZHNfdGhyZWFkc19leGl0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfd3E7Cit2b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIHJkc19zaHV0ZG93bl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfcmVjdl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCisvKiB0cmFuc3BvcnQuYyAqLworaW50IHJkc190cmFuc19yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOwordm9pZCByZHNfdHJhbnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOworc3RydWN0IHJkc190cmFuc3BvcnQgKnJkc190cmFuc19nZXRfcHJlZmVycmVkKF9fYmUzMiBhZGRyKTsKK3Vuc2lnbmVkIGludCByZHNfdHJhbnNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGF2YWlsKTsKK2ludCBfX2luaXQgcmRzX3RyYW5zX2luaXQodm9pZCk7Cit2b2lkIHJkc190cmFuc19leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmVjdi5jIGIvbmV0L3Jkcy9yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxMThjNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmVjdi5jCkBAIC0wLDAgKzEsNTQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKK3ZvaWQgcmRzX2luY19pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkgIF9fYmUzMiBzYWRkcikKK3sKKwlhdG9taWNfc2V0KCZpbmMtPmlfcmVmY291bnQsIDEpOworCUlOSVRfTElTVF9IRUFEKCZpbmMtPmlfaXRlbSk7CisJaW5jLT5pX2Nvbm4gPSBjb25uOworCWluYy0+aV9zYWRkciA9IHNhZGRyOworCWluYy0+aV9yZG1hX2Nvb2tpZSA9IDA7Cit9CisKK3ZvaWQgcmRzX2luY19hZGRyZWYoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXJkc2RlYnVnKCJhZGRyZWYgaW5jICVwIHJlZiAlZFxuIiwgaW5jLCBhdG9taWNfcmVhZCgmaW5jLT5pX3JlZmNvdW50KSk7CisJYXRvbWljX2luYygmaW5jLT5pX3JlZmNvdW50KTsKK30KKwordm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJcmRzZGVidWcoInB1dCBpbmMgJXAgcmVmICVkXG4iLCBpbmMsIGF0b21pY19yZWFkKCZpbmMtPmlfcmVmY291bnQpKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW5jLT5pX3JlZmNvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmluYy0+aV9pdGVtKSk7CisKKwkJaW5jLT5pX2Nvbm4tPmNfdHJhbnMtPmluY19mcmVlKGluYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfcmVjdl9yY3ZidWZfZGVsdGEoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLAorCQkJCSAgaW50IGRlbHRhLCBfX2JlMTYgcG9ydCkKK3sKKwlpbnQgbm93X2Nvbmdlc3RlZDsKKworCWlmIChkZWx0YSA9PSAwKQorCQlyZXR1cm47CisKKwlycy0+cnNfcmN2X2J5dGVzICs9IGRlbHRhOworCW5vd19jb25nZXN0ZWQgPSBycy0+cnNfcmN2X2J5dGVzID4gcmRzX3NrX3JjdmJ1Zihycyk7CisKKwlyZHNkZWJ1ZygicnMgJXAgKCVwSTQ6JXUpIHJlY3YgYnl0ZXMgJWQgYnVmICVkICIKKwkgICJub3dfY29uZyAlZCBkZWx0YSAlZFxuIiwKKwkgIHJzLCAmcnMtPnJzX2JvdW5kX2FkZHIsCisJICBudG9ocyhycy0+cnNfYm91bmRfcG9ydCksIHJzLT5yc19yY3ZfYnl0ZXMsCisJICByZHNfc2tfcmN2YnVmKHJzKSwgbm93X2Nvbmdlc3RlZCwgZGVsdGEpOworCisJLyogd2Fzbid0IC0+IGFtIGNvbmdlc3RlZCAqLworCWlmICghcnMtPnJzX2Nvbmdlc3RlZCAmJiBub3dfY29uZ2VzdGVkKSB7CisJCXJzLT5yc19jb25nZXN0ZWQgPSAxOworCQlyZHNfY29uZ19zZXRfYml0KG1hcCwgcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9CisJLyogd2FzIC0+IGFyZW4ndCBjb25nZXN0ZWQgKi8KKwkvKiBSZXF1aXJlIG1vcmUgZnJlZSBzcGFjZSBiZWZvcmUgcmVwb3J0aW5nIHVuY29uZ2VzdGVkIHRvIHByZXZlbnQKKwkgICBib3VuY2luZyBjb25nL3VuY29uZyBzdGF0ZSB0b28gb2Z0ZW4gKi8KKwllbHNlIGlmIChycy0+cnNfY29uZ2VzdGVkICYmIChycy0+cnNfcmN2X2J5dGVzIDwgKHJkc19za19yY3ZidWYocnMpLzIpKSkgeworCQlycy0+cnNfY29uZ2VzdGVkID0gMDsKKwkJcmRzX2NvbmdfY2xlYXJfYml0KG1hcCwgcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9CisKKwkvKiBkbyBub3RoaW5nIGlmIG5vIGNoYW5nZSBpbiBjb25nIHN0YXRlICovCit9CisKKy8qCisgKiBQcm9jZXNzIGFsbCBleHRlbnNpb24gaGVhZGVycyB0aGF0IGNvbWUgd2l0aCB0aGlzIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19yZWN2X2luY29taW5nX2V4dGhkcnMoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaW5jLT5pX2hkcjsKKwl1bnNpZ25lZCBpbnQgcG9zID0gMCwgdHlwZSwgbGVuOworCXVuaW9uIHsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gdmVyc2lvbjsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgcmRtYTsKKwkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWFfZGVzdCByZG1hX2Rlc3Q7CisJfSBidWZmZXI7CisKKwl3aGlsZSAoMSkgeworCQlsZW4gPSBzaXplb2YoYnVmZmVyKTsKKwkJdHlwZSA9IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKGhkciwgJnBvcywgJmJ1ZmZlciwgJmxlbik7CisJCWlmICh0eXBlID09IFJEU19FWFRIRFJfTk9ORSkKKwkJCWJyZWFrOworCQkvKiBQcm9jZXNzIGV4dGVuc2lvbiBoZWFkZXIgaGVyZSAqLworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBSRFNfRVhUSERSX1JETUE6CisJCQlyZHNfcmRtYV91bnVzZShycywgYmUzMl90b19jcHUoYnVmZmVyLnJkbWEuaF9yZG1hX3JrZXkpLCAwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkRTX0VYVEhEUl9SRE1BX0RFU1Q6CisJCQkvKiBXZSBpZ25vcmUgdGhlIHNpemUgZm9yIG5vdy4gV2UgY291bGQgc3Rhc2ggaXQKKwkJCSAqIHNvbWV3aGVyZSBhbmQgdXNlIGl0IGZvciBlcnJvciBjaGVja2luZy4gKi8KKwkJCWluYy0+aV9yZG1hX2Nvb2tpZSA9IHJkc19yZG1hX21ha2VfY29va2llKAorCQkJCQliZTMyX3RvX2NwdShidWZmZXIucmRtYV9kZXN0LmhfcmRtYV9ya2V5KSwKKwkJCQkJYmUzMl90b19jcHUoYnVmZmVyLnJkbWFfZGVzdC5oX3JkbWFfb2Zmc2V0KSk7CisKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogVGhlIHRyYW5zcG9ydCBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyCisgKiByeCBhbmQgY29ubiByZXNldCBvbiB0aGlzIHNwZWNpZmljIGNvbm4uCisgKgorICogV2UgY3VycmVudGx5IGFzc2VydCB0aGF0IG9ubHkgb25lIGZyYWdtZW50ZWQgbWVzc2FnZSB3aWxsIGJlIHNlbnQKKyAqIGRvd24gYSBjb25uZWN0aW9uIGF0IGEgdGltZS4gIFRoaXMgbGV0cyB1cyByZWFzc2VtYmxlIGluIHRoZSBjb25uCisgKiBpbnN0ZWFkIG9mIHBlci1mbG93IHdoaWNoIG1lYW5zIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBnbyBkaWdnaW5nIHRocm91Z2gKKyAqIGZsb3dzIHRvIHRlYXIgZG93biBwYXJ0aWFsIHJlYXNzZW1ibHkgcHJvZ3Jlc3Mgb24gY29ubiBmYWlsdXJlIGFuZAorICogd2Ugc2F2ZSBmbG93IGxvb2t1cCBhbmQgbG9ja2luZyBmb3IgZWFjaCBmcmFnIGFycml2YWwuICBJdCBkb2VzIG1lYW4KKyAqIHRoYXQgc21hbGwgbWVzc2FnZXMgd2lsbCB3YWl0IGJlaGluZCBsYXJnZSBvbmVzLiAgRnJhZ21lbnRpbmcgYXQgYWxsCisgKiBpcyBvbmx5IHRvIHJlZHVjZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIHByZS1wb3N0ZWQgYnVmZmVycy4KKyAqCisgKiBUaGUgY2FsbGVyIHBhc3NlcyBpbiBzYWRkciBhbmQgZGFkZHIgaW5zdGVhZCBvZiB1cyBnZXR0aW5nIGl0IGZyb20gdGhlCisgKiBjb25uLiAgVGhpcyBsZXRzIGxvb3BiYWNrLCB3aG8gb25seSBoYXMgb25lIGNvbm4gZm9yIGJvdGggZGlyZWN0aW9ucywKKyAqIHRlbGwgdXMgd2hpY2ggcm9sZXMgdGhlIGFkZHJzIGluIHRoZSBjb25uIGFyZSBwbGF5aW5nIGZvciB0aGlzIG1lc3NhZ2UuCisgKi8KK3ZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgICAgIHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgZ2ZwX3QgZ2ZwLCBlbnVtIGttX3R5cGUga20pCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IE5VTEw7CisJc3RydWN0IHNvY2sgKnNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbmMtPmlfY29ubiA9IGNvbm47CisJaW5jLT5pX3J4X2ppZmZpZXMgPSBqaWZmaWVzOworCisJcmRzZGVidWcoImNvbm4gJXAgbmV4dCAlbGx1IGluYyAlcCBzZXEgJWxsdSBsZW4gJXUgc3BvcnQgJXUgZHBvcnQgJXUgIgorCQkgImZsYWdzIDB4JXggcnhfamlmZmllcyAlbHVcbiIsIGNvbm4sCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWNvbm4tPmNfbmV4dF9yeF9zZXEsCisJCSBpbmMsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSksCisJCSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSwKKwkJIGJlMTZfdG9fY3B1KGluYy0+aV9oZHIuaF9zcG9ydCksCisJCSBiZTE2X3RvX2NwdShpbmMtPmlfaGRyLmhfZHBvcnQpLAorCQkgaW5jLT5pX2hkci5oX2ZsYWdzLAorCQkgaW5jLT5pX3J4X2ppZmZpZXMpOworCisJLyoKKwkgKiBTZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBvbmx5IGluY3JlYXNlLiAgTWVzc2FnZXMgZ2V0IHRoZWlyCisJICogc2VxdWVuY2UgbnVtYmVyIGFzIHRoZXkncmUgcXVldWVkIGluIGEgc2VuZGluZyBjb25uLiAgVGhleQorCSAqIGNhbiBiZSBkcm9wcGVkLCB0aG91Z2gsIGlmIHRoZSBzZW5kaW5nIHNvY2tldCBpcyBjbG9zZWQgYmVmb3JlCisJICogdGhleSBoaXQgdGhlIHdpcmUuICBTbyBzZXF1ZW5jZSBudW1iZXJzIGNhbiBza2lwIGZvcndhcmQKKwkgKiB1bmRlciBub3JtYWwgb3BlcmF0aW9uLiAgVGhleSBjYW4gYWxzbyBkcm9wIGJhY2sgaW4gdGhlIGNvbm4KKwkgKiBmYWlsb3ZlciBjYXNlIGFzIHByZXZpb3VzbHkgc2VudCBtZXNzYWdlcyBhcmUgcmVzZW50IGRvd24gdGhlCisJICogbmV3IGluc3RhbmNlIG9mIGEgY29ubi4gIFdlIGRyb3AgdGhvc2UsIG90aGVyd2lzZSB3ZSBoYXZlCisJICogdG8gYXNzdW1lIHRoYXQgdGhlIG5leHQgdmFsaWQgc2VxIGRvZXMgbm90IGNvbWUgYWZ0ZXIgYQorCSAqIGhvbGUgaW4gdGhlIGZyYWdtZW50IHN0cmVhbS4KKwkgKgorCSAqIFRoZSBoZWFkZXJzIGRvbid0IGdpdmUgdXMgYSB3YXkgdG8gcmVhbGl6ZSBpZiBmcmFnbWVudHMgb2YKKwkgKiBhIG1lc3NhZ2UgaGF2ZSBiZWVuIGRyb3BwZWQuICBXZSBhc3N1bWUgdGhhdCBmcmFncyB0aGF0IGFycml2ZQorCSAqIHRvIGEgZmxvdyBhcmUgcGFydCBvZiB0aGUgY3VycmVudCBtZXNzYWdlIG9uIHRoZSBmbG93IHRoYXQgaXMKKwkgKiBiZWluZyByZWFzc2VtYmxlZC4gIFRoaXMgbWVhbnMgdGhhdCBzZW5kZXJzIGNhbid0IGRyb3AgbWVzc2FnZXMKKwkgKiBmcm9tIHRoZSBzZW5kaW5nIGNvbm4gdW50aWwgYWxsIHRoZWlyIGZyYWdzIGFyZSBzZW50LgorCSAqCisJICogWFhYIHdlIGNvdWxkIHNwZW5kIG1vcmUgb24gdGhlIHdpcmUgdG8gZ2V0IG1vcmUgcm9idXN0IGZhaWx1cmUKKwkgKiBkZXRlY3Rpb24sIGFyZ3VhYmx5IHdvcnRoIGl0IHRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbi4KKwkgKi8KKwlpZiAoYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKSA8IGNvbm4tPmNfbmV4dF9yeF9zZXEKKwkgJiYgKGluYy0+aV9oZHIuaF9mbGFncyAmIFJEU19GTEFHX1JFVFJBTlNNSVRURUQpKSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3Bfb2xkX3NlcSk7CisJCWdvdG8gb3V0OworCX0KKwljb25uLT5jX25leHRfcnhfc2VxID0gYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKSArIDE7CisKKwlpZiAocmRzX3N5c2N0bF9waW5nX2VuYWJsZSAmJiBpbmMtPmlfaGRyLmhfZHBvcnQgPT0gMCkgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9waW5nKTsKKwkJcmRzX3NlbmRfcG9uZyhjb25uLCBpbmMtPmlfaGRyLmhfc3BvcnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlycyA9IHJkc19maW5kX2JvdW5kKGRhZGRyLCBpbmMtPmlfaGRyLmhfZHBvcnQpOworCWlmIChycyA9PSBOVUxMKSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3Bfbm9fc29jayk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFByb2Nlc3MgZXh0ZW5zaW9uIGhlYWRlcnMgKi8KKwlyZHNfcmVjdl9pbmNvbWluZ19leHRoZHJzKGluYywgcnMpOworCisJLyogV2UgY2FuIGJlIHJhY2luZyB3aXRoIHJkc19yZWxlYXNlKCkgd2hpY2ggbWFya3MgdGhlIHNvY2tldCBkZWFkLiAqLworCXNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKworCS8qIHNlcmlhbGl6ZSB3aXRoIHJkc19yZWxlYXNlIC0+IHNvY2tfb3JwaGFuICovCisJd3JpdGVfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKKwkJcmRzZGVidWcoImFkZGluZyBpbmMgJXAgdG8gcnMgJXAncyByZWN2IHF1ZXVlXG4iLCBpbmMsIHJzKTsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfcXVldWVkKTsKKwkJcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHJzLCBzaywgaW5jLT5pX2Nvbm4tPmNfbGNvbmcsCisJCQkJICAgICAgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCQkJICAgICAgaW5jLT5pX2hkci5oX2Rwb3J0KTsKKwkJcmRzX2luY19hZGRyZWYoaW5jKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW5jLT5pX2l0ZW0sICZycy0+cnNfcmVjdl9xdWV1ZSk7CisJCV9fcmRzX3dha2Vfc2tfc2xlZXAoc2spOworCX0gZWxzZSB7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfZGVhZF9zb2NrKTsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKworb3V0OgorCWlmIChycykKKwkJcmRzX3NvY2tfcHV0KHJzKTsKK30KKworLyoKKyAqIGJlIHZlcnkgY2FyZWZ1bCBoZXJlLiAgVGhpcyBpcyBiZWluZyBjYWxsZWQgYXMgdGhlIGNvbmRpdGlvbiBpbgorICogd2FpdF9ldmVudF8qKCkgbmVlZHMgdG8gY29wZSB3aXRoIGJlaW5nIGNhbGxlZCBtYW55IHRpbWVzLgorICovCitzdGF0aWMgaW50IHJkc19uZXh0X2luY29taW5nKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfaW5jb21pbmcgKippbmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgqaW5jID09IE5VTEwpIHsKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfcmVjdl9xdWV1ZSkpIHsKKwkJCSppbmMgPSBsaXN0X2VudHJ5KHJzLT5yc19yZWN2X3F1ZXVlLm5leHQsCisJCQkJCSAgc3RydWN0IHJkc19pbmNvbWluZywKKwkJCQkJICBpX2l0ZW0pOworCQkJcmRzX2luY19hZGRyZWYoKmluYyk7CisJCX0KKwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiAqaW5jICE9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3N0aWxsX3F1ZXVlZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCQkgICAgaW50IGRyb3ApCit7CisJc3RydWN0IHNvY2sgKnNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZpbmMtPmlfaXRlbSkpIHsKKwkJcmV0ID0gMTsKKwkJaWYgKGRyb3ApIHsKKwkJCS8qIFhYWCBtYWtlIHN1cmUgdGhpcyBpX2Nvbm4gaXMgcmVsaWFibGUgKi8KKwkJCXJkc19yZWN2X3JjdmJ1Zl9kZWx0YShycywgc2ssIGluYy0+aV9jb25uLT5jX2xjb25nLAorCQkJCQkgICAgICAtYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCQlsaXN0X2RlbF9pbml0KCZpbmMtPmlfaXRlbSk7CisJCQlyZHNfaW5jX3B1dChpbmMpOworCQl9CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisKKwlyZHNkZWJ1ZygiaW5jICVwIHJzICVwIHN0aWxsICVkIGRyb3BwZWQgJWRcbiIsIGluYywgcnMsIHJldCwgZHJvcCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1bGwgZXJyb3JzIG9mZiB0aGUgZXJyb3IgcXVldWUuCisgKiBJZiBtc2doZHIgaXMgTlVMTCwgd2Ugd2lsbCBqdXN0IHB1cmdlIHRoZSBlcnJvciBxdWV1ZS4KKyAqLworaW50IHJkc19ub3RpZnlfcXVldWVfZ2V0KHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZ2hkcikKK3sKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyICpub3RpZmllcjsKKwlzdHJ1Y3QgcmRzX3JkbWFfbm90aWZ5IGNtc2c7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMCwgbWF4X21lc3NhZ2VzID0gfjBVOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGNvcHkpOworCWludCBlcnIgPSAwOworCisKKwkvKiBwdXRfY21zZyBjb3BpZXMgdG8gdXNlciBzcGFjZSBhbmQgdGh1cyBtYXkgc2xlZXAuIFdlIGNhbid0IGRvIHRoaXMKKwkgKiB3aXRoIHJzX2xvY2sgaGVsZCwgc28gZmlyc3QgZ3JhYiBhcyBtYW55IG5vdGlmaWNhdGlvbnMgYXMgd2UgY2FuIHN0dWZmCisJICogaW4gdGhlIHVzZXIgcHJvdmlkZWQgY21zZyBidWZmZXIuIFdlIGRvbid0IHRyeSB0byBjb3B5IG1vcmUsIHRvIGF2b2lkCisJICogbG9zaW5nIG5vdGlmaWNhdGlvbnMgLSBleGNlcHQgd2hlbiB0aGUgYnVmZmVyIGlzIHNvIHNtYWxsIHRoYXQgaXQgd291bGRuJ3QKKwkgKiBldmVuIGhvbGQgYSBzaW5nbGUgbm90aWZpY2F0aW9uLiBUaGVuIHdlIGdpdmUgaGltIGFzIG11Y2ggb2YgdGhpcyBzaW5nbGUKKwkgKiBtc2cgYXMgd2UgY2FuIHNxdWVlemUgaW4sIGFuZCBzZXQgTVNHX0NUUlVOQy4KKwkgKi8KKwlpZiAobXNnaGRyKSB7CisJCW1heF9tZXNzYWdlcyA9IG1zZ2hkci0+bXNnX2NvbnRyb2xsZW4gLyBDTVNHX1NQQUNFKHNpemVvZihjbXNnKSk7CisJCWlmICghbWF4X21lc3NhZ2VzKQorCQkJbWF4X21lc3NhZ2VzID0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpICYmIGNvdW50IDwgbWF4X21lc3NhZ2VzKSB7CisJCW5vdGlmaWVyID0gbGlzdF9lbnRyeShycy0+cnNfbm90aWZ5X3F1ZXVlLm5leHQsCisJCQkJc3RydWN0IHJkc19ub3RpZmllciwgbl9saXN0KTsKKwkJbGlzdF9tb3ZlKCZub3RpZmllci0+bl9saXN0LCAmY29weSk7CisJCWNvdW50Kys7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmY29weSkpIHsKKwkJbm90aWZpZXIgPSBsaXN0X2VudHJ5KGNvcHkubmV4dCwgc3RydWN0IHJkc19ub3RpZmllciwgbl9saXN0KTsKKworCQlpZiAobXNnaGRyKSB7CisJCQljbXNnLnVzZXJfdG9rZW4gPSBub3RpZmllci0+bl91c2VyX3Rva2VuOworCQkJY21zZy5zdGF0dXMgID0gbm90aWZpZXItPm5fc3RhdHVzOworCisJCQllcnIgPSBwdXRfY21zZyhtc2doZHIsIFNPTF9SRFMsIFJEU19DTVNHX1JETUFfU1RBVFVTLAorCQkJCQlzaXplb2YoY21zZyksICZjbXNnKTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisJCX0KKworCQlsaXN0X2RlbF9pbml0KCZub3RpZmllci0+bl9saXN0KTsKKwkJa2ZyZWUobm90aWZpZXIpOworCX0KKworCS8qIElmIHdlIGJhaWxlZCBvdXQgYmVjYXVzZSBvZiBhbiBlcnJvciBpbiBwdXRfY21zZywKKwkgKiB3ZSBtYXkgYmUgbGVmdCB3aXRoIG9uZSBvciBtb3JlIG5vdGlmaWNhdGlvbnMgdGhhdCB3ZQorCSAqIGRpZG4ndCBwcm9jZXNzLiBSZXR1cm4gdGhlbSB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmNvcHkpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCQlsaXN0X3NwbGljZSgmY29weSwgJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBRdWV1ZSBhIGNvbmdlc3Rpb24gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyBpbnQgcmRzX25vdGlmeV9jb25nKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBtc2doZHIgKm1zZ2hkcikKK3sKKwl1aW50NjRfdCBub3RpZnkgPSBycy0+cnNfY29uZ19ub3RpZnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJZXJyID0gcHV0X2Ntc2cobXNnaGRyLCBTT0xfUkRTLCBSRFNfQ01TR19DT05HX1VQREFURSwKKwkJCXNpemVvZihub3RpZnkpLCAmbm90aWZ5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJcnMtPnJzX2Nvbmdfbm90aWZ5ICY9IH5ub3RpZnk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVjZWl2ZSBhbnkgY29udHJvbCBtZXNzYWdlcy4KKyAqLworc3RhdGljIGludCByZHNfY21zZ19yZWN2KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IG1zZ2hkciAqbXNnKQoreworCWludCByZXQgPSAwOworCisJaWYgKGluYy0+aV9yZG1hX2Nvb2tpZSkgeworCQlyZXQgPSBwdXRfY21zZyhtc2csIFNPTF9SRFMsIFJEU19DTVNHX1JETUFfREVTVCwKKwkJCQlzaXplb2YoaW5jLT5pX3JkbWFfY29va2llKSwgJmluYy0+aV9yZG1hX2Nvb2tpZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcmRzX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBzaXplLCBpbnQgbXNnX2ZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCWxvbmcgdGltZW87CisJaW50IHJldCA9IDAsIG5vbmJsb2NrID0gbXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCByZHNfaW5jb21pbmcgKmluYyA9IE5VTEw7CisKKwkvKiB1ZHBfcmVjdm1zZygpLT5zb2NrX3JlY3Z0aW1lbygpIGdldHMgYXdheSB3aXRob3V0IGxvY2tpbmcgdG9vLi4gKi8KKwl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTsKKworCXJkc2RlYnVnKCJzaXplICV6dSBmbGFncyAweCV4IHRpbWVvICVsZFxuIiwgc2l6ZSwgbXNnX2ZsYWdzLCB0aW1lbyk7CisKKwlpZiAobXNnX2ZsYWdzICYgTVNHX09PQikKKwkJZ290byBvdXQ7CisKKwkvKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBub3RpZmljYXRpb25zLCBkbyB0aG9zZSAtIGFuZCBub3RoaW5nIGVsc2UgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpKSB7CisJCXJldCA9IHJkc19ub3RpZnlfcXVldWVfZ2V0KHJzLCBtc2cpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KSB7CisJCXJldCA9IHJkc19ub3RpZnlfY29uZyhycywgbXNnKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJaWYgKCFyZHNfbmV4dF9pbmNvbWluZyhycywgJmluYykpIHsKKwkJCWlmIChub25ibG9jaykgeworCQkJCXJldCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXRpbWVvID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKnNrLT5za19zbGVlcCwKKwkJCQkJCXJkc19uZXh0X2luY29taW5nKHJzLCAmaW5jKSwKKwkJCQkJCXRpbWVvKTsKKwkJCXJkc2RlYnVnKCJyZWN2bXNnIHdva2UgaW5jICVwIHRpbWVvICVsZFxuIiwgaW5jLAorCQkJCSB0aW1lbyk7CisJCQlpZiAodGltZW8gPiAwIHx8IHRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSB0aW1lbzsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKworCQlyZHNkZWJ1ZygiY29weWluZyBpbmMgJXAgZnJvbSAlcEk0OiV1IHRvIHVzZXJcbiIsIGluYywKKwkJCSAmaW5jLT5pX2Nvbm4tPmNfZmFkZHIsCisJCQkgbnRvaHMoaW5jLT5pX2hkci5oX3Nwb3J0KSk7CisJCXJldCA9IGluYy0+aV9jb25uLT5jX3RyYW5zLT5pbmNfY29weV90b191c2VyKGluYywgbXNnLT5tc2dfaW92LAorCQkJCQkJCSAgICAgc2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogaWYgdGhlIG1lc3NhZ2Ugd2UganVzdCBjb3BpZWQgaXNuJ3QgYXQgdGhlIGhlYWQgb2YgdGhlCisJCSAqIHJlY3YgcXVldWUgdGhlbiBzb21lb25lIGVsc2UgcmFjZWQgdXMgdG8gcmV0dXJuIGl0LCB0cnkKKwkJICogdG8gZ2V0IHRoZSBuZXh0IG1lc3NhZ2UuCisJCSAqLworCQlpZiAoIXJkc19zdGlsbF9xdWV1ZWQocnMsIGluYywgIShtc2dfZmxhZ3MgJiBNU0dfUEVFSykpKSB7CisJCQlyZHNfaW5jX3B1dChpbmMpOworCQkJaW5jID0gTlVMTDsKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2RlbGl2ZXJfcmFjZWQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmV0IDwgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbikpIHsKKwkJCWlmIChtc2dfZmxhZ3MgJiBNU0dfVFJVTkMpCisJCQkJcmV0ID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisJCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CisJCX0KKworCQlpZiAocmRzX2Ntc2dfcmVjdihpbmMsIG1zZykpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJkc19zdGF0c19pbmMoc19yZWN2X2RlbGl2ZXJlZCk7CisKKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CisJCWlmIChzaW4pIHsKKwkJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJCQlzaW4tPnNpbl9wb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmMtPmlfc2FkZHI7CisJCQltZW1zZXQoc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoaW5jKQorCQlyZHNfaW5jX3B1dChpbmMpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoZSBzb2NrZXQgaXMgYmVpbmcgc2h1dCBkb3duIGFuZCB3ZSdyZSBhc2tlZCB0byBkcm9wIG1lc3NhZ2VzIHRoYXQgd2VyZQorICogcXVldWVkIGZvciByZWN2bXNnLiAgVGhlIGNhbGxlciBoYXMgdW5ib3VuZCB0aGUgc29ja2V0IHNvIHRoZSByZWNlaXZlIHBhdGgKKyAqIHdvbid0IHF1ZXVlIGFueSBtb3JlIGluY29taW5nIGZyYWdtZW50cyBvciBtZXNzYWdlcyBvbiB0aGUgc29ja2V0LgorICovCit2b2lkIHJkc19jbGVhcl9yZWN2X3F1ZXVlKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc3RydWN0IHNvY2sgKnNrID0gcmRzX3JzX3RvX3NrKHJzKTsKKwlzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmMsIHRtcCwgJnJzLT5yc19yZWN2X3F1ZXVlLCBpX2l0ZW0pIHsKKwkJcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHJzLCBzaywgaW5jLT5pX2Nvbm4tPmNfbGNvbmcsCisJCQkJICAgICAgLWJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCWxpc3RfZGVsX2luaXQoJmluYy0+aV9pdGVtKTsKKwkJcmRzX2luY19wdXQoaW5jKTsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIGluYy0+aV9zYWRkciBpc24ndCB1c2VkIGhlcmUgYmVjYXVzZSBpdCBpcyBvbmx5IHNldCBpbiB0aGUgcmVjZWl2ZQorICogcGF0aC4KKyAqLwordm9pZCByZHNfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCSAgICAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgaW50IGZsaXApCit7CisJc3RydWN0IHJkc19pbmZvX21lc3NhZ2UgbWluZm87CisKKwltaW5mby5zZXEgPSBiZTY0X3RvX2NwdShpbmMtPmlfaGRyLmhfc2VxdWVuY2UpOworCW1pbmZvLmxlbiA9IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pOworCisJaWYgKGZsaXApIHsKKwkJbWluZm8ubGFkZHIgPSBkYWRkcjsKKwkJbWluZm8uZmFkZHIgPSBzYWRkcjsKKwkJbWluZm8ubHBvcnQgPSBpbmMtPmlfaGRyLmhfZHBvcnQ7CisJCW1pbmZvLmZwb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCX0gZWxzZSB7CisJCW1pbmZvLmxhZGRyID0gc2FkZHI7CisJCW1pbmZvLmZhZGRyID0gZGFkZHI7CisJCW1pbmZvLmxwb3J0ID0gaW5jLT5pX2hkci5oX3Nwb3J0OworCQltaW5mby5mcG9ydCA9IGluYy0+aV9oZHIuaF9kcG9ydDsKKwl9CisKKwlyZHNfaW5mb19jb3B5KGl0ZXIsICZtaW5mbywgc2l6ZW9mKG1pbmZvKSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzczNjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMCwwICsxLDEwMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisKKy8qIFdoZW4gdHJhbnNtaXR0aW5nIG1lc3NhZ2VzIGluIHJkc19zZW5kX3htaXQsIHdlIG5lZWQgdG8gZW1lcmdlIGZyb20KKyAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2cKKyAqIHdpbGwga2ljayBvdXIgc2hpbi4KKyAqIEFsc28sIGl0IHNlZW1zIGZhaXJlciB0byBub3QgbGV0IG9uZSBidXN5IGNvbm5lY3Rpb24gc3RhbGwgYWxsIHRoZQorICogb3RoZXJzLgorICoKKyAqIHNlbmRfYmF0Y2hfY291bnQgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSdsbCBsb29wIGluIHNlbmRfeG1pdC4gU2V0dGluZworICogaXQgdG8gMCB3aWxsIHJlc3RvcmUgdGhlIG9sZCBiZWhhdmlvciAod2hlcmUgd2UgbG9vcGVkIHVudGlsIHdlIGhhZAorICogZHJhaW5lZCB0aGUgcXVldWUpLgorICovCitzdGF0aWMgaW50IHNlbmRfYmF0Y2hfY291bnQgPSA2NDsKK21vZHVsZV9wYXJhbShzZW5kX2JhdGNoX2NvdW50LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzZW5kX2JhdGNoX2NvdW50LCAiIGJhdGNoIGZhY3RvciB3aGVuIHdvcmtpbmcgdGhlIHNlbmQgcXVldWUiKTsKKworLyoKKyAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiBDYWxsZXIgbXVzdCBob2xkIGNfc2VuZF9sb2NrIHdoZW4gY2FsbGluZyBoZXJlLgorICovCit2b2lkIHJkc19zZW5kX3Jlc2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoY29ubi0+Y194bWl0X3JtKSB7CisJCS8qIFRlbGwgdGhlIHVzZXIgdGhlIFJETUEgb3AgaXMgbm8gbG9uZ2VyIG1hcHBlZCBieSB0aGUKKwkJICogdHJhbnNwb3J0LiBUaGlzIGlzbid0IGVudGlyZWx5IHRydWUgKGl0J3MgZmx1c2hlZCBvdXQKKwkJICogaW5kZXBlbmRlbnRseSkgYnV0IGFzIHRoZSBjb25uZWN0aW9uIGlzIGRvd24sIHRoZXJlJ3MKKwkJICogbm8gb25nb2luZyBSRE1BIHRvL2Zyb20gdGhhdCBtZW1vcnkgKi8KKwkJcmRzX21lc3NhZ2VfdW5tYXBwZWQoY29ubi0+Y194bWl0X3JtKTsKKwkJcmRzX21lc3NhZ2VfcHV0KGNvbm4tPmNfeG1pdF9ybSk7CisJCWNvbm4tPmNfeG1pdF9ybSA9IE5VTEw7CisJfQorCWNvbm4tPmNfeG1pdF9zZyA9IDA7CisJY29ubi0+Y194bWl0X2hkcl9vZmYgPSAwOworCWNvbm4tPmNfeG1pdF9kYXRhX29mZiA9IDA7CisJY29ubi0+Y194bWl0X3JkbWFfc2VudCA9IDA7CisKKwljb25uLT5jX21hcF9xdWV1ZWQgPSAwOworCisJY29ubi0+Y191bmFja2VkX3BhY2tldHMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CisJY29ubi0+Y191bmFja2VkX2J5dGVzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlczsKKworCS8qIE1hcmsgbWVzc2FnZXMgYXMgcmV0cmFuc21pc3Npb25zLCBhbmQgbW92ZSB0aGVtIHRvIHRoZSBzZW5kIHEgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCXNldF9iaXQoUkRTX01TR19BQ0tfUkVRVUlSRUQsICZybS0+bV9mbGFncyk7CisJCXNldF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpOworCX0KKwlsaXN0X3NwbGljZV9pbml0KCZjb25uLT5jX3JldHJhbnMsICZjb25uLT5jX3NlbmRfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogV2UncmUgbWFraW5nIHRoZSBjb25jaW91cyB0cmFkZS1vZmYgaGVyZSB0byBvbmx5IHNlbmQgb25lIG1lc3NhZ2UKKyAqIGRvd24gdGhlIGNvbm5lY3Rpb24gYXQgYSB0aW1lLgorICogICBQcm86CisgKiAgICAgIC0gdHggcXVldWVpbmcgaXMgYSBzaW1wbGUgZmlmbyBsaXN0CisgKiAgIAktIHJlYXNzZW1ibHkgaXMgb3B0aW9uYWwgYW5kIGVhc2lseSBkb25lIGJ5IHRyYW5zcG9ydHMgcGVyIGNvbm4KKyAqICAgICAgLSBubyBwZXIgZmxvdyByeCBsb29rdXAgYXQgYWxsLCBzdHJhaWdodCB0byB0aGUgc29ja2V0CisgKiAgIAktIGxlc3MgcGVyLWZyYWcgbWVtb3J5IGFuZCB3aXJlIG92ZXJoZWFkCisgKiAgIENvbjoKKyAqICAgICAgLSBxdWV1ZWQgYWNrcyBjYW4gYmUgZGVsYXllZCBiZWhpbmQgbGFyZ2UgbWVzc2FnZXMKKyAqICAgRGVwZW5kczoKKyAqICAgICAgLSBzbWFsbCBtZXNzYWdlIGxhdGVuY3kgaXMgaGlnaGVyIGJlaGluZCBxdWV1ZWQgbGFyZ2UgbWVzc2FnZXMKKyAqICAgICAgLSBsYXJnZSBtZXNzYWdlIGxhdGVuY3kgaXNuJ3Qgc3RhcnZlZCBieSBpbnRlcnZlbmluZyBzbWFsbCBzZW5kcworICovCitpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0bXA7CisJdW5zaWduZWQgaW50IHNlbmRfcXVvdGEgPSBzZW5kX2JhdGNoX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IHJldCA9IDA7CisJaW50IHdhc19lbXB0eSA9IDA7CisJTElTVF9IRUFEKHRvX2JlX2Ryb3BwZWQpOworCisJLyoKKwkgKiBzZW5kbXNnIGNhbGxzIGhlcmUgYWZ0ZXIgaGF2aW5nIHF1ZXVlZCBpdHMgbWVzc2FnZSBvbiB0aGUgc2VuZAorCSAqIHF1ZXVlLiAgV2Ugb25seSBoYXZlIG9uZSB0YXNrIGZlZWRpbmcgdGhlIGNvbm5lY3Rpb24gYXQgYSB0aW1lLiAgSWYKKwkgKiBhbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGZlZWRpbmcgdGhlIHF1ZXVlIHRoZW4gd2UgYmFjayBvZmYuICBUaGlzCisJICogYXZvaWRzIGJsb2NraW5nIHRoZSBjYWxsZXIgYW5kIHRyYWRpbmcgcGVyLWNvbm5lY3Rpb24gZGF0YSBiZXR3ZWVuCisJICogY2FjaGVzIHBlciBtZXNzYWdlLgorCSAqCisJICogVGhlIHNlbSBob2xkZXIgd2lsbCBpc3N1ZSBhIHJldHJ5IGlmIHRoZXkgbm90aWNlIHRoYXQgc29tZW9uZSBxdWV1ZWQKKwkgKiBhIG1lc3NhZ2UgYWZ0ZXIgdGhleSBzdG9wcGVkIHdhbGtpbmcgdGhlIHNlbmQgcXVldWUgYnV0IGJlZm9yZSB0aGV5CisJICogZHJvcHBlZCB0aGUgc2VtLgorCSAqLworCWlmICghbXV0ZXhfdHJ5bG9jaygmY29ubi0+Y19zZW5kX2xvY2spKSB7CisJCXJkc19zdGF0c19pbmMoc19zZW5kX3NlbV9jb250ZW50aW9uKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvbm4tPmNfdHJhbnMtPnhtaXRfcHJlcGFyZSkKKwkJY29ubi0+Y190cmFucy0+eG1pdF9wcmVwYXJlKGNvbm4pOworCisJLyoKKwkgKiBzcGluIHRyeWluZyB0byBwdXNoIGhlYWRlcnMgYW5kIGRhdGEgZG93biB0aGUgY29ubmVjdGlvbiB1bnRpbAorCSAqIHRoZSBjb25uZWN0aW9uIGRvZW5zJ3QgbWFrZSBmb3J3YXJkIHByb2dyZXNzLgorCSAqLworCXdoaWxlICgtLXNlbmRfcXVvdGEpIHsKKwkJLyoKKwkJICogU2VlIGlmIG5lZWQgdG8gc2VuZCBhIGNvbmdlc3Rpb24gbWFwIHVwZGF0ZSBpZiB3ZSdyZQorCQkgKiBiZXR3ZWVuIHNlbmRpbmcgbWVzc2FnZXMuICBUaGUgc2VuZF9zZW0gcHJvdGVjdHMgb3VyIHNvbGUKKwkJICogdXNlIG9mIGNfbWFwX29mZnNldCBhbmQgX2J5dGVzLgorCQkgKiBOb3RlIHRoaXMgaXMgdXNlZCBvbmx5IGJ5IHRyYW5zcG9ydHMgdGhhdCBkZWZpbmUgYSBzcGVjaWFsCisJCSAqIHhtaXRfY29uZ19tYXAgZnVuY3Rpb24uIEZvciBhbGwgb3RoZXJzLCB3ZSBjcmVhdGUgYWxsb2NhdGUKKwkJICogYSBjb25nX21hcCBtZXNzYWdlIGFuZCB0cmVhdCBpdCBqdXN0IGxpa2UgYW55IG90aGVyIHNlbmQuCisJCSAqLworCQlpZiAoY29ubi0+Y19tYXBfYnl0ZXMpIHsKKwkJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnhtaXRfY29uZ19tYXAoY29ubiwgY29ubi0+Y19sY29uZywKKwkJCQkJCWNvbm4tPmNfbWFwX29mZnNldCk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisKKwkJCWNvbm4tPmNfbWFwX29mZnNldCArPSByZXQ7CisJCQljb25uLT5jX21hcF9ieXRlcyAtPSByZXQ7CisJCQlpZiAoY29ubi0+Y19tYXBfYnl0ZXMpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBJZiB3ZSdyZSBkb25lIHNlbmRpbmcgdGhlIGN1cnJlbnQgbWVzc2FnZSwgY2xlYXIgdGhlCisJCSAqIG9mZnNldCBhbmQgUy9HIHRlbXBvcmFyaWVzLgorCQkgKi8KKwkJcm0gPSBjb25uLT5jX3htaXRfcm07CisJCWlmIChybSAhPSBOVUxMICYmCisJCSAgICBjb25uLT5jX3htaXRfaGRyX29mZiA9PSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICYmCisJCSAgICBjb25uLT5jX3htaXRfc2cgPT0gcm0tPm1fbmVudHMpIHsKKwkJCWNvbm4tPmNfeG1pdF9ybSA9IE5VTEw7CisJCQljb25uLT5jX3htaXRfc2cgPSAwOworCQkJY29ubi0+Y194bWl0X2hkcl9vZmYgPSAwOworCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmID0gMDsKKwkJCWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQgPSAwOworCisJCQkvKiBSZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIG1lc3NhZ2UuICovCisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJcm0gPSBOVUxMOworCQl9CisKKwkJLyogSWYgd2UncmUgYXNrZWQgdG8gc2VuZCBhIGNvbmcgbWFwIHVwZGF0ZSwgZG8gc28uCisJCSAqLworCQlpZiAocm0gPT0gTlVMTCAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpIHsKKwkJCWlmIChjb25uLT5jX3RyYW5zLT54bWl0X2NvbmdfbWFwICE9IE5VTEwpIHsKKwkJCQljb25uLT5jX21hcF9vZmZzZXQgPSAwOworCQkJCWNvbm4tPmNfbWFwX2J5dGVzID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSArCisJCQkJCVJEU19DT05HX01BUF9CWVRFUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcm0gPSByZHNfY29uZ191cGRhdGVfYWxsb2MoY29ubik7CisJCQlpZiAoSVNfRVJSKHJtKSkgeworCQkJCXJldCA9IFBUUl9FUlIocm0pOworCQkJCWJyZWFrOworCQkJfQorCisJCQljb25uLT5jX3htaXRfcm0gPSBybTsKKwkJfQorCisJCS8qCisJCSAqIEdyYWIgdGhlIG5leHQgbWVzc2FnZSBmcm9tIHRoZSBzZW5kIHF1ZXVlLCBpZiB0aGVyZSBpcyBvbmUuCisJCSAqCisJCSAqIGNfeG1pdF9ybSBob2xkcyBhIHJlZiB3aGlsZSB3ZSdyZSBzZW5kaW5nIHRoaXMgbWVzc2FnZSBkb3duCisJCSAqIHRoZSBjb25uY3Rpb24uICBXZSBjYW4gdXNlIHRoaXMgcmVmIHdoaWxlIGhvbGRpbmcgdGhlCisJCSAqIHNlbmRfc2VtLi4gcmRzX3NlbmRfcmVzZXQoKSBpcyBzZXJpYWxpemVkIHdpdGggaXQuCisJCSAqLworCQlpZiAocm0gPT0gTlVMTCkgeworCQkJdW5zaWduZWQgaW50IGxlbjsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJCQlpZiAoIWxpc3RfZW1wdHkoJmNvbm4tPmNfc2VuZF9xdWV1ZSkpIHsKKwkJCQlybSA9IGxpc3RfZW50cnkoY29ubi0+Y19zZW5kX3F1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcmRzX21lc3NhZ2UsCisJCQkJCQltX2Nvbm5faXRlbSk7CisJCQkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKworCQkJCS8qCisJCQkJICogTW92ZSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBzZW5kIHF1ZXVlIHRvIHRoZSByZXRyYW5zbWl0CisJCQkJICogbGlzdCByaWdodCBhd2F5LgorCQkJCSAqLworCQkJCWxpc3RfbW92ZV90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3JldHJhbnMpOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHJtID09IE5VTEwpIHsKKwkJCQl3YXNfZW1wdHkgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBVbmZvcnR1bmF0ZWx5LCB0aGUgd2F5IEluZmluaWJhbmQgZGVhbHMgd2l0aAorCQkJICogUkRNQSB0byBhIGJhZCBNUiBrZXkgaXMgYnkgbW92aW5nIHRoZSBlbnRpcmUKKwkJCSAqIHF1ZXVlIHBhaXIgdG8gZXJyb3Igc3RhdGUuIFdlIGNvbGQgcG9zc2libHkKKwkJCSAqIHJlY292ZXIgZnJvbSB0aGF0LCBidXQgcmlnaHQgbm93IHdlIGRyb3AgdGhlCisJCQkgKiBjb25uZWN0aW9uLgorCQkJICogVGhlcmVmb3JlLCB3ZSBuZXZlciByZXRyYW5zbWl0IG1lc3NhZ2VzIHdpdGggUkRNQSBvcHMuCisJCQkgKi8KKwkJCWlmIChybS0+bV9yZG1hX29wCisJCQkgJiYgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCAmcm0tPm1fZmxhZ3MpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpKQorCQkJCQlsaXN0X21vdmUoJnJtLT5tX2Nvbm5faXRlbSwgJnRvX2JlX2Ryb3BwZWQpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFJlcXVpcmUgYW4gQUNLIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZSAqLworCQkJbGVuID0gbnRvaGwocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKwkJCWlmIChjb25uLT5jX3VuYWNrZWRfcGFja2V0cyA9PSAwCisJCQkgfHwgY29ubi0+Y191bmFja2VkX2J5dGVzIDwgbGVuKSB7CisJCQkJX19zZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCisJCQkJY29ubi0+Y191bmFja2VkX3BhY2tldHMgPSByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CisJCQkJY29ubi0+Y191bmFja2VkX2J5dGVzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlczsKKwkJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9hY2tfcmVxdWlyZWQpOworCQkJfSBlbHNlIHsKKwkJCQljb25uLT5jX3VuYWNrZWRfYnl0ZXMgLT0gbGVuOworCQkJCWNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzLS07CisJCQl9CisKKwkJCWNvbm4tPmNfeG1pdF9ybSA9IHJtOworCQl9CisKKwkJLyoKKwkJICogVHJ5IGFuZCBzZW5kIGFuIHJkbWEgbWVzc2FnZS4gIExldCdzIHNlZSBpZiB3ZSBjYW4KKwkJICoga2VlcCB0aGlzIHNpbXBsZSBhbmQgcmVxdWlyZSB0aGF0IHRoZSB0cmFuc3BvcnQgZWl0aGVyCisJCSAqIHNlbmQgdGhlIHdob2xlIHJkbWEgb3Igbm9uZSBvZiBpdC4KKwkJICovCisJCWlmIChybS0+bV9yZG1hX29wICYmICFjb25uLT5jX3htaXRfcmRtYV9zZW50KSB7CisJCQlyZXQgPSBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEoY29ubiwgcm0tPm1fcmRtYV9vcCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJY29ubi0+Y194bWl0X3JkbWFfc2VudCA9IDE7CisJCQkvKiBUaGUgdHJhbnNwb3J0IG93bnMgdGhlIG1hcHBlZCBtZW1vcnkgZm9yIG5vdy4KKwkJCSAqIFlvdSBjYW4ndCB1bm1hcCBpdCB3aGlsZSBpdCdzIG9uIHRoZSBzZW5kIHF1ZXVlICovCisJCQlzZXRfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpOworCQl9CisKKwkJaWYgKGNvbm4tPmNfeG1pdF9oZHJfb2ZmIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSB8fAorCQkgICAgY29ubi0+Y194bWl0X3NnIDwgcm0tPm1fbmVudHMpIHsKKwkJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnhtaXQoY29ubiwgcm0sCisJCQkJCQkgIGNvbm4tPmNfeG1pdF9oZHJfb2ZmLAorCQkJCQkJICBjb25uLT5jX3htaXRfc2csCisJCQkJCQkgIGNvbm4tPmNfeG1pdF9kYXRhX29mZik7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisKKwkJCWlmIChjb25uLT5jX3htaXRfaGRyX29mZiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJCQl0bXAgPSBtaW5fdChpbnQsIHJldCwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgLQorCQkJCQkgICAgY29ubi0+Y194bWl0X2hkcl9vZmYpOworCQkJCWNvbm4tPmNfeG1pdF9oZHJfb2ZmICs9IHRtcDsKKwkJCQlyZXQgLT0gdG1wOworCQkJfQorCisJCQlzZyA9ICZybS0+bV9zZ1tjb25uLT5jX3htaXRfc2ddOworCQkJd2hpbGUgKHJldCkgeworCQkJCXRtcCA9IG1pbl90KGludCwgcmV0LCBzZy0+bGVuZ3RoIC0KKwkJCQkJCSAgICAgIGNvbm4tPmNfeG1pdF9kYXRhX29mZik7CisJCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmICs9IHRtcDsKKwkJCQlyZXQgLT0gdG1wOworCQkJCWlmIChjb25uLT5jX3htaXRfZGF0YV9vZmYgPT0gc2ctPmxlbmd0aCkgeworCQkJCQljb25uLT5jX3htaXRfZGF0YV9vZmYgPSAwOworCQkJCQlzZysrOworCQkJCQljb25uLT5jX3htaXRfc2crKzsKKwkJCQkJQlVHX09OKHJldCAhPSAwICYmCisJCQkJCSAgICAgICBjb25uLT5jX3htaXRfc2cgPT0gcm0tPm1fbmVudHMpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qIE51a2UgYW55IG1lc3NhZ2VzIHdlIGRlY2lkZWQgbm90IHRvIHJldHJhbnNtaXQuICovCisJaWYgKCFsaXN0X2VtcHR5KCZ0b19iZV9kcm9wcGVkKSkKKwkJcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jaygmdG9fYmVfZHJvcHBlZCwgUkRTX1JETUFfRFJPUFBFRCk7CisKKwlpZiAoY29ubi0+Y190cmFucy0+eG1pdF9jb21wbGV0ZSkKKwkJY29ubi0+Y190cmFucy0+eG1pdF9jb21wbGV0ZShjb25uKTsKKworCS8qCisJICogV2UgbWlnaHQgYmUgcmFjaW5nIHdpdGggYW5vdGhlciBzZW5kZXIgd2hvIHF1ZXVlZCBhIG1lc3NhZ2UgYnV0CisJICogYmFja2VkIG9mZiBvbiBub3RpY2luZyB0aGF0IHdlIGhlbGQgdGhlIGNfc2VuZF9sb2NrLiAgSWYgd2UgY2hlY2sKKwkgKiBmb3IgcXVldWVkIG1lc3NhZ2VzIGFmdGVyIGRyb3BwaW5nIHRoZSBzZW0gdGhlbiBlaXRoZXIgd2UnbGwKKwkgKiBzZWUgdGhlIHF1ZXVlZCBtZXNzYWdlIG9yIHRoZSBxdWV1ZXIgd2lsbCBnZXQgdGhlIHNlbS4gIElmIHdlCisJICogbm90aWNlIHRoZSBxdWV1ZWQgbWVzc2FnZSB0aGVuIHdlIHRyaWdnZXIgYW4gaW1tZWRpYXRlIHJldHJ5LgorCSAqCisJICogV2UgbmVlZCB0byBiZSBjYXJlZnVsIG9ubHkgdG8gZG8gdGhpcyB3aGVuIHdlIHN0b3BwZWQgcHJvY2Vzc2luZworCSAqIHRoZSBzZW5kIHF1ZXVlIGJlY2F1c2UgaXQgd2FzIGVtcHR5LiAgSXQncyB0aGUgb25seSB3YXkgd2UKKwkgKiBzdG9wIHByb2Nlc3NpbmcgdGhlIGxvb3Agd2hlbiB0aGUgdHJhbnNwb3J0IGhhc24ndCB0YWtlbgorCSAqIHJlc3BvbnNpYmlsaXR5IGZvciBmb3J3YXJkIHByb2dyZXNzLgorCSAqLworCW11dGV4X3VubG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCisJaWYgKGNvbm4tPmNfbWFwX2J5dGVzIHx8IChzZW5kX3F1b3RhID09IDAgJiYgIXdhc19lbXB0eSkpIHsKKwkJLyogV2UgZXhoYXVzdGVkIHRoZSBzZW5kIHF1b3RhLCBidXQgdGhlcmUncyB3b3JrIGxlZnQgdG8KKwkJICogZG8uIFJldHVybiBhbmQgKHJlLSlzY2hlZHVsZSB0aGUgc2VuZCB3b3JrZXIuCisJCSAqLworCQlyZXQgPSAtRUFHQUlOOworCX0KKworCWlmIChyZXQgPT0gMCAmJiB3YXNfZW1wdHkpIHsKKwkJLyogQSBzaW1wbGUgYml0IHRlc3Qgd291bGQgYmUgd2F5IGZhc3RlciB0aGFuIHRha2luZyB0aGUKKwkJICogc3BpbiBsb2NrICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZjb25uLT5jX3NlbmRfcXVldWUpKSB7CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9zZW1fcXVldWVfcmFjZWQpOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX3NlbmRfc25kYnVmX3JlbW92ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZycy0+cnNfbG9jayk7CisKKwlCVUdfT04ocnMtPnJzX3NuZF9ieXRlcyA8IGxlbik7CisJcnMtPnJzX3NuZF9ieXRlcyAtPSBsZW47CisKKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA9PSAwKQorCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZV9lbXB0eSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19zZW5kX2lzX2Fja2VkKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIHU2NCBhY2ssCisJCQkJICAgIGlzX2Fja2VkX2Z1bmMgaXNfYWNrZWQpCit7CisJaWYgKGlzX2Fja2VkKQorCQlyZXR1cm4gaXNfYWNrZWQocm0sIGFjayk7CisJcmV0dXJuIGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8PSBhY2s7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIG9uIHRoZSBzZW5kIGFuZCByZXRyYW5zbWl0IHF1ZXVlcworICogd2hpY2ggaGF2ZSBhIHNlcXVlbmNlIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHNlcXVlbmNlCisgKiBudW1iZXIuCisgKi8KK2ludCByZHNfc2VuZF9hY2tlZF9iZWZvcmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgc2VxKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CisJaW50IHJldCA9IDE7CisKKwlzcGluX2xvY2soJmNvbm4tPmNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8IHNlcSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19zZW5kX3F1ZXVlLCBtX2Nvbm5faXRlbSkgeworCQlpZiAoYmU2NF90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UpIDwgc2VxKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBwcmV0dHkgc2ltaWxhciB0byB3aGF0IGhhcHBlbnMgYmVsb3cgaW4gdGhlIEFDSworICogaGFuZGxpbmcgY29kZSAtIGV4Y2VwdCB0aGF0IHdlIGNhbGwgaGVyZSBhcyBzb29uIGFzIHdlIGdldAorICogdGhlIElCIHNlbmQgY29tcGxldGlvbiBvbiB0aGUgUkRNQSBvcCBhbmQgdGhlIGFjY29tcGFueWluZworICogbWVzc2FnZS4KKyAqLwordm9pZCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCBzdGF0dXMpCit7CisJc3RydWN0IHJkc19zb2NrICpycyA9IE5VTEw7CisJc3RydWN0IHJkc19yZG1hX29wICpybzsKKwlzdHJ1Y3QgcmRzX25vdGlmaWVyICpub3RpZmllcjsKKworCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisKKwlybyA9IHJtLT5tX3JkbWFfb3A7CisJaWYgKHRlc3RfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKQorCSAmJiBybyAmJiByby0+cl9ub3RpZnkgJiYgcm8tPnJfbm90aWZpZXIpIHsKKwkJbm90aWZpZXIgPSByby0+cl9ub3RpZmllcjsKKwkJcnMgPSBybS0+bV9yczsKKwkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworCisJCW5vdGlmaWVyLT5uX3N0YXR1cyA9IHN0YXR1czsKKwkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJm5vdGlmaWVyLT5uX2xpc3QsICZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKworCQlyby0+cl9ub3RpZmllciA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCisJaWYgKHJzKSB7CisJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7CisJfQorfQorCisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGV4Y2VwdCB3ZQorICogZG9uJ3QgZG8gYW55IGxvY2tpbmcgLSB3ZSBoYXZlIGFsbCB0aGUgaW5ncmVkaWVudHMgKG1lc3NhZ2UsCisgKiBzb2NrZXQsIHNvY2tldCBsb2NrKSBhbmQgY2FuIGp1c3QgbW92ZSB0aGUgbm90aWZpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19yZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCBzdGF0dXMpCit7CisJc3RydWN0IHJkc19yZG1hX29wICpybzsKKworCXJvID0gcm0tPm1fcmRtYV9vcDsKKwlpZiAocm8gJiYgcm8tPnJfbm90aWZ5ICYmIHJvLT5yX25vdGlmaWVyKSB7CisJCXJvLT5yX25vdGlmaWVyLT5uX3N0YXR1cyA9IHN0YXR1czsKKwkJbGlzdF9hZGRfdGFpbCgmcm8tPnJfbm90aWZpZXItPm5fbGlzdCwgJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQlyby0+cl9ub3RpZmllciA9IE5VTEw7CisJfQorCisJLyogTm8gbmVlZCB0byB3YWtlIHRoZSBhcHAgLSBjYWxsZXIgZG9lcyB0aGlzICovCit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBJQiBzZW5kIGNvbXBsZXRpb24gd2hlbiB3ZSBkZXRlY3QKKyAqIGEgUkRNQSBvcGVyYXRpb24gdGhhdCBmYWlsZWQgd2l0aCByZW1vdGUgYWNjZXNzIGVycm9yLgorICogU28gc3BlZWQgaXMgbm90IGFuIGlzc3VlIGhlcmUuCisgKi8KK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX3NlbmRfZ2V0X21lc3NhZ2Uoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCQkgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wLCAqZm91bmQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKHJtLT5tX3JkbWFfb3AgPT0gb3ApIHsKKwkJCWF0b21pY19pbmMoJnJtLT5tX3JlZmNvdW50KTsKKwkJCWZvdW5kID0gcm07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19zZW5kX3F1ZXVlLCBtX2Nvbm5faXRlbSkgeworCQlpZiAocm0tPm1fcmRtYV9vcCA9PSBvcCkgeworCQkJYXRvbWljX2luYygmcm0tPm1fcmVmY291bnQpOworCQkJZm91bmQgPSBybTsKKwkJCWJyZWFrOworCQl9CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBUaGlzIHJlbW92ZXMgbWVzc2FnZXMgZnJvbSB0aGUgc29ja2V0J3MgbGlzdCBpZiB0aGV5J3JlIG9uIGl0LiAgVGhlIGxpc3QKKyAqIGFyZ3VtZW50IG11c3QgYmUgcHJpdmF0ZSB0byB0aGUgY2FsbGVyLCB3ZSBtdXN0IGJlIGFibGUgdG8gbW9kaWZ5IGl0CisgKiB3aXRob3V0IGxvY2tzLiAgVGhlIG1lc3NhZ2VzIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSBoZWxkIGZvciB0aGVpcgorICogcG9zaXRpb24gb24gdGhlIGxpc3QuICBUaGlzIGZ1bmN0aW9uIHdpbGwgZHJvcCB0aGF0IHJlZmVyZW5jZSBhZnRlcgorICogcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIGZyb20gdGhlICdtZXNzYWdlcycgbGlzdCByZWdhcmRsZXNzIG9mIGlmIGl0IGZvdW5kCisgKiB0aGUgbWVzc2FnZXMgb24gdGhlIHNvY2tldCBsaXN0IG9yIG5vdC4KKyAqLwordm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOyAvKiBzaWxlbmNlIGdjYyA6UCAqLworCXN0cnVjdCByZHNfc29jayAqcnMgPSBOVUxMOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KG1lc3NhZ2VzKSkgeworCQlybSA9IGxpc3RfZW50cnkobWVzc2FnZXMtPm5leHQsIHN0cnVjdCByZHNfbWVzc2FnZSwKKwkJCQltX2Nvbm5faXRlbSk7CisJCWxpc3RfZGVsX2luaXQoJnJtLT5tX2Nvbm5faXRlbSk7CisKKwkJLyoKKwkJICogSWYgd2Ugc2VlIHRoaXMgZmxhZyBjbGVhcmVkIHRoZW4gd2UncmUgKnN1cmUqIHRoYXQgc29tZW9uZQorCQkgKiBlbHNlIGJlYXQgdXMgdG8gcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc29jay4gIElmIHdlIHJhY2UKKwkJICogd2l0aCB0aGVpciBmbGFnIHVwZGF0ZSB3ZSdsbCBnZXQgdGhlIGxvY2sgYW5kIHRoZW4gcmVhbGx5CisJCSAqIHNlZSB0aGF0IHRoZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuCisJCSAqCisJCSAqIFRoZSBtZXNzYWdlIHNwaW5sb2NrIG1ha2VzIHN1cmUgbm9ib2R5IGNsZWFycyBybS0+bV9ycworCQkgKiB3aGlsZSB3ZSdyZSBtZXNzaW5nIHdpdGggaXQuIEl0IGRvZXMgbm90IHByZXZlbnQgdGhlCisJCSAqIG1lc3NhZ2UgZnJvbSBiZWluZyByZW1vdmVkIGZyb20gdGhlIHNvY2tldCwgdGhvdWdoLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJaWYgKCF0ZXN0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykpCisJCQlnb3RvIHVubG9ja19hbmRfZHJvcDsKKworCQlpZiAocnMgIT0gcm0tPm1fcnMpIHsKKwkJCWlmIChycykgeworCQkJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisJCQkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQkJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCQkJfQorCQkJcnMgPSBybS0+bV9yczsKKwkJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQkJc29ja19ob2xkKHJkc19yc190b19zayhycykpOworCQl9CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykpIHsKKwkJCXN0cnVjdCByZHNfcmRtYV9vcCAqcm8gPSBybS0+bV9yZG1hX29wOworCQkJc3RydWN0IHJkc19ub3RpZmllciAqbm90aWZpZXI7CisKKwkJCWxpc3RfZGVsX2luaXQoJnJtLT5tX3NvY2tfaXRlbSk7CisJCQlyZHNfc2VuZF9zbmRidWZfcmVtb3ZlKHJzLCBybSk7CisKKwkJCWlmIChybyAmJiByby0+cl9ub3RpZmllcgorCQkJICAgJiYgKHN0YXR1cyB8fCByby0+cl9ub3RpZnkpKSB7CisJCQkJbm90aWZpZXIgPSByby0+cl9ub3RpZmllcjsKKwkJCQlsaXN0X2FkZF90YWlsKCZub3RpZmllci0+bl9saXN0LAorCQkJCQkJJnJzLT5yc19ub3RpZnlfcXVldWUpOworCQkJCWlmICghbm90aWZpZXItPm5fc3RhdHVzKQorCQkJCQlub3RpZmllci0+bl9zdGF0dXMgPSBzdGF0dXM7CisJCQkJcm0tPm1fcmRtYV9vcC0+cl9ub3RpZmllciA9IE5VTEw7CisJCQl9CisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJcm0tPm1fcnMgPSBOVUxMOworCQl9CisKK3VubG9ja19hbmRfZHJvcDoKKwkJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KKworCWlmIChycykgeworCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUcmFuc3BvcnRzIGNhbGwgaGVyZSB3aGVuIHRoZXkndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSByZWNlaXZlciBxdWV1ZWQKKyAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlCisgKiBtb3ZlZCB0byB0aGUgcmV0cmFucyBxdWV1ZSB3aGVuIHJkc19zZW5kX3htaXQgcGlja3MgdGhlbSBvZmYgdGhlIHNlbmQKKyAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlbgorICogYXNzaWduZWQgdGhlIG1fYWNrX3NlcSB5ZXQgLSBidXQgdGhhdCdzIGZpbmUgYXMgbG9uZyBhcyB0Y3BfaXNfYWNrZWQKKyAqIGNoZWNrcyB0aGUgUkRTX01TR19IQVNfQUNLX1NFUSBiaXQuCisgKgorICogWFhYIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGhvdyB0aGlzIGlzIHNhZmVseSBzZXJpYWxpemVkIHdpdGggc29ja2V0CisgKiBkZXN0cnVjdGlvbi4gIE1heWJlIGl0IHNob3VsZCBiYWlsIGlmIGl0IHNlZXMgU09DS19ERUFELgorICovCit2b2lkIHJkc19zZW5kX2Ryb3BfYWNrZWQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCB1NjQgYWNrLAorCQkJIGlzX2Fja2VkX2Z1bmMgaXNfYWNrZWQpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChsaXN0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19yZXRyYW5zLCBtX2Nvbm5faXRlbSkgeworCQlpZiAoIXJkc19zZW5kX2lzX2Fja2VkKHJtLCBhY2ssIGlzX2Fja2VkKSkKKwkJCWJyZWFrOworCisJCWxpc3RfbW92ZSgmcm0tPm1fY29ubl9pdGVtLCAmbGlzdCk7CisJCWNsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJfQorCisJLyogb3JkZXIgZmxhZyB1cGRhdGVzIHdpdGggc3BpbiBsb2NrcyAqLworCWlmICghbGlzdF9lbXB0eSgmbGlzdCkpCisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCS8qIG5vdyByZW1vdmUgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIHNvY2sgbGlzdCBhcyBuZWVkZWQgKi8KKwlyZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKCZsaXN0LCBSRFNfUkRNQV9TVUNDRVNTKTsKK30KKwordm9pZCByZHNfc2VuZF9kcm9wX3RvKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrYWRkcl9pbiAqZGVzdCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChsaXN0KTsKKwlpbnQgd2FrZSA9IDA7CisKKwkvKiBnZXQgYWxsIHRoZSBtZXNzYWdlcyB3ZSdyZSBkcm9wcGluZyB1bmRlciB0aGUgcnMgbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZycy0+cnNfc2VuZF9xdWV1ZSwgbV9zb2NrX2l0ZW0pIHsKKwkJaWYgKGRlc3QgJiYgKGRlc3QtPnNpbl9hZGRyLnNfYWRkciAhPSBybS0+bV9kYWRkciB8fAorCQkJICAgICBkZXN0LT5zaW5fcG9ydCAhPSBybS0+bV9pbmMuaV9oZHIuaF9kcG9ydCkpCisJCQljb250aW51ZTsKKworCQl3YWtlID0gMTsKKwkJbGlzdF9tb3ZlKCZybS0+bV9zb2NrX2l0ZW0sICZsaXN0KTsKKwkJcmRzX3NlbmRfc25kYnVmX3JlbW92ZShycywgcm0pOworCQljbGVhcl9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpOworCisJCS8qIElmIHRoaXMgaXMgYSBSRE1BIG9wZXJhdGlvbiwgbm90aWZ5IHRoZSBhcHAuICovCisJCV9fcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShycywgcm0sIFJEU19SRE1BX0NBTkNFTEVEKTsKKwl9CisKKwkvKiBvcmRlciBmbGFnIHVwZGF0ZXMgd2l0aCB0aGUgcnMgbG9jayAqLworCWlmICh3YWtlKQorCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCWlmICh3YWtlKQorCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisKKwljb25uID0gTlVMTDsKKworCS8qIG5vdyByZW1vdmUgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGNvbm4gbGlzdCBhcyBuZWVkZWQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCAmbGlzdCwgbV9zb2NrX2l0ZW0pIHsKKwkJLyogV2UgZG8gdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBsb29wIGFib3ZlLCBzbyB0aGF0CisJCSAqIHdlIGRvbid0IGhhdmUgdG8gbmVzdCBtX3JzX2xvY2sgdW5kZXIgcnMtPnJzX2xvY2sgKi8KKwkJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJcm0tPm1fcnMgPSBOVUxMOworCQlzcGluX3VubG9jaygmcm0tPm1fcnNfbG9jayk7CisKKwkJLyoKKwkJICogSWYgd2Ugc2VlIHRoaXMgZmxhZyBjbGVhcmVkIHRoZW4gd2UncmUgKnN1cmUqIHRoYXQgc29tZW9uZQorCQkgKiBlbHNlIGJlYXQgdXMgdG8gcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY29ubi4gIElmIHdlIHJhY2UKKwkJICogd2l0aCB0aGVpciBmbGFnIHVwZGF0ZSB3ZSdsbCBnZXQgdGhlIGxvY2sgYW5kIHRoZW4gcmVhbGx5CisJCSAqIHNlZSB0aGF0IHRoZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuCisJCSAqLworCQlpZiAoIXRlc3RfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb25uICE9IHJtLT5tX2luYy5pX2Nvbm4pIHsKKwkJCWlmIChjb25uKQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQkJY29ubiA9IHJtLT5tX2luYy5pX2Nvbm47CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCX0KKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fY29ubl9pdGVtKTsKKwkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCX0KKwl9CisKKwlpZiAoY29ubikKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CisJCXJtID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCByZHNfbWVzc2FnZSwgbV9zb2NrX2l0ZW0pOworCQlsaXN0X2RlbF9pbml0KCZybS0+bV9zb2NrX2l0ZW0pOworCisJCXJkc19tZXNzYWdlX3dhaXQocm0pOworCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCX0KK30KKworLyoKKyAqIHdlIG9ubHkgd2FudCB0aGlzIHRvIGZpcmUgb25jZSBzbyB3ZSB1c2UgdGhlIGNhbGxlcnMgJ3F1ZXVlZCcuICBJdCdzCisgKiBwb3NzaWJsZSB0aGF0IGFub3RoZXIgdGhyZWFkIGNhbiByYWNlIHdpdGggdXMgYW5kIHJlbW92ZSB0aGUKKyAqIG1lc3NhZ2UgZnJvbSB0aGUgZmxvdyB3aXRoIFJEU19DQU5DRUxfU0VOVF9UTy4KKyAqLworc3RhdGljIGludCByZHNfc2VuZF9xdWV1ZV9ybShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIF9fYmUxNiBzcG9ydCwKKwkJCSAgICAgX19iZTE2IGRwb3J0LCBpbnQgKnF1ZXVlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsZW47CisKKwlpZiAoKnF1ZXVlZCkKKwkJZ290byBvdXQ7CisKKwlsZW4gPSBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworCisJLyogdGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGljaCBob2xkcyBib3RoIHRoZSBzb2NrZXQncyByc19sb2NrCisJICogYW5kIHRoZSBjb25uZWN0aW9uJ3MgY19sb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgbGl0dGxlIHNwYWNlIGluIHNuZGJ1Ziwgd2UgZG9uJ3QgcXVldWUgYW55dGhpbmcsCisJICogYW5kIHVzZXJzcGFjZSBnZXRzIC1FQUdBSU4uIEJ1dCBwb2xsKCkgaW5kaWNhdGVzIHRoZXJlJ3Mgc2VuZAorCSAqIHJvb20uIFRoaXMgY2FuIGxlYWQgdG8gYmFkIGJlaGF2aW9yIChzcGlubmluZykgaWYgc25kX2J5dGVzIGlzbid0CisJICogZnJlZWQgdXAgYnkgaW5jb21pbmcgYWNrcy4gU28gd2UgY2hlY2sgdGhlICpvbGQqIHZhbHVlIG9mCisJICogcnNfc25kX2J5dGVzIGhlcmUgdG8gYWxsb3cgdGhlIGxhc3QgbXNnIHRvIGV4Y2VlZCB0aGUgYnVmZmVyLAorCSAqIGFuZCBwb2xsKCkgbm93IGtub3dzIG5vIG1vcmUgZGF0YSBjYW4gYmUgc2VudC4KKwkgKi8KKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA8IHJkc19za19zbmRidWYocnMpKSB7CisJCXJzLT5yc19zbmRfYnl0ZXMgKz0gbGVuOworCisJCS8qIGxldCByZWN2IHNpZGUga25vdyB3ZSBhcmUgY2xvc2UgdG8gc2VuZCBzcGFjZSBleGhhdXN0aW9uLgorCQkgKiBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgb3B0aW1hbCB3YXkgdG8gZG8gaXQsIGFzIHRoaXMKKwkJICogbWVhbnMgd2Ugc2V0IHRoZSBmbGFnIG9uICphbGwqIG1lc3NhZ2VzIGFzIHNvb24gYXMgb3VyCisJCSAqIHRocm91Z2hwdXQgaGl0cyBhIGNlcnRhaW4gdGhyZXNob2xkLgorCQkgKi8KKwkJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPj0gcmRzX3NrX3NuZGJ1ZihycykgLyAyKQorCQkJX19zZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCisJCWxpc3RfYWRkX3RhaWwoJnJtLT5tX3NvY2tfaXRlbSwgJnJzLT5yc19zZW5kX3F1ZXVlKTsKKwkJc2V0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncyk7CisJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisJCXJtLT5tX3JzID0gcnM7CisKKwkJLyogVGhlIGNvZGUgb3JkZXJpbmcgaXMgYSBsaXR0bGUgd2VpcmQsIGJ1dCB3ZSdyZQorCQkgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi8KKwkJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZybS0+bV9pbmMuaV9oZHIsIHNwb3J0LCBkcG9ydCwgMCk7CisJCXJtLT5tX2luYy5pX2Nvbm4gPSBjb25uOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCisJCXNwaW5fbG9jaygmY29ubi0+Y19sb2NrKTsKKwkJcm0tPm1faW5jLmlfaGRyLmhfc2VxdWVuY2UgPSBjcHVfdG9fYmU2NChjb25uLT5jX25leHRfdHhfc2VxKyspOworCQlsaXN0X2FkZF90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3NlbmRfcXVldWUpOworCQlzZXRfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmNvbm4tPmNfbG9jayk7CisKKwkJcmRzZGVidWcoInF1ZXVlZCBtc2cgJXAgbGVuICVkLCBycyAlcCBieXRlcyAlZCBzZXEgJWxsdVxuIiwKKwkJCSBybSwgbGVuLCBycywgcnMtPnJzX3NuZF9ieXRlcywKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSk7CisKKwkJKnF1ZXVlZCA9IDE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gKnF1ZXVlZDsKK30KKworc3RhdGljIGludCByZHNfY21zZ19zZW5kKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgKmFsbG9jYXRlZF9tcikKK3sKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIobXNnKTsgY21zZzsgY21zZyA9IENNU0dfTlhUSERSKG1zZywgY21zZykpIHsKKwkJaWYgKCFDTVNHX09LKG1zZywgY21zZykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY21zZy0+Y21zZ19sZXZlbCAhPSBTT0xfUkRTKQorCQkJY29udGludWU7CisKKwkJLyogQXMgYSBzaWRlIGVmZmVjdCwgUkRNQV9ERVNUIGFuZCBSRE1BX01BUCB3aWxsIHNldAorCQkgKiBybS0+bV9yZG1hX2Nvb2tpZSBhbmQgcm0tPm1fcmRtYV9tci4KKwkJICovCisJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCWNhc2UgUkRTX0NNU0dfUkRNQV9BUkdTOgorCQkJcmV0ID0gcmRzX2Ntc2dfcmRtYV9hcmdzKHJzLCBybSwgY21zZyk7CisJCQlicmVhazsKKworCQljYXNlIFJEU19DTVNHX1JETUFfREVTVDoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfZGVzdChycywgcm0sIGNtc2cpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRFNfQ01TR19SRE1BX01BUDoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfbWFwKHJzLCBybSwgY21zZyk7CisJCQlpZiAoIXJldCkKKwkJCQkqYWxsb2NhdGVkX21yID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCXNpemVfdCBwYXlsb2FkX2xlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKKwlfX2JlMzIgZGFkZHI7CisJX19iZTE2IGRwb3J0OworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBOVUxMOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcXVldWVkID0gMCwgYWxsb2NhdGVkX21yID0gMDsKKwlpbnQgbm9uYmxvY2sgPSBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVDsKKwlsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgbm9uYmxvY2spOworCisJLyogTWlycm9yIExpbnV4IFVEUCBtaXJyb3Igb2YgQlNEIGVycm9yIG1lc3NhZ2UgY29tcGF0aWJpbGl0eSAqLworCS8qIFhYWDogUGVyaGFwcyBNU0dfTU9SRSBzb21lZGF5ICovCisJaWYgKG1zZy0+bXNnX2ZsYWdzICYgfihNU0dfRE9OVFdBSVQgfCBNU0dfQ01TR19DT01QQVQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1zZ19mbGFncyAweCUwOFhcbiIsIG1zZy0+bXNnX2ZsYWdzKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtc2ctPm1zZ19uYW1lbGVuKSB7CisJCS8qIFhYWCBmYWlsIG5vbi11bmljYXN0IGRlc3RpbmF0aW9uIElQcz8gKi8KKwkJaWYgKG1zZy0+bXNnX25hbWVsZW4gPCBzaXplb2YoKnVzaW4pIHx8IHVzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRhZGRyID0gdXNpbi0+c2luX2FkZHIuc19hZGRyOworCQlkcG9ydCA9IHVzaW4tPnNpbl9wb3J0OworCX0gZWxzZSB7CisJCS8qIFdlIG9ubHkgY2FyZSBhYm91dCBjb25zaXN0ZW5jeSB3aXRoIC0+Y29ubmVjdCgpICovCisJCWxvY2tfc29jayhzayk7CisJCWRhZGRyID0gcnMtPnJzX2Nvbm5fYWRkcjsKKwkJZHBvcnQgPSBycy0+cnNfY29ubl9wb3J0OworCQlyZWxlYXNlX3NvY2soc2spOworCX0KKworCS8qIHJhY2luZyB3aXRoIGFub3RoZXIgdGhyZWFkIGJpbmRpbmcgc2VlbXMgb2sgaGVyZSAqLworCWlmIChkYWRkciA9PSAwIHx8IHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJcm0gPSByZHNfbWVzc2FnZV9jb3B5X2Zyb21fdXNlcihtc2ctPm1zZ19pb3YsIHBheWxvYWRfbGVuKTsKKwlpZiAoSVNfRVJSKHJtKSkgeworCQlyZXQgPSBQVFJfRVJSKHJtKTsKKwkJcm0gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9kYWRkciA9IGRhZGRyOworCisJLyogUGFyc2UgYW55IGNvbnRyb2wgbWVzc2FnZXMgdGhlIHVzZXIgbWF5IGhhdmUgaW5jbHVkZWQuICovCisJcmV0ID0gcmRzX2Ntc2dfc2VuZChycywgcm0sIG1zZywgJmFsbG9jYXRlZF9tcik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi4KKwkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovCisJaWYgKHJzLT5yc19jb25uICYmIHJzLT5yc19jb25uLT5jX2ZhZGRyID09IGRhZGRyKQorCQljb25uID0gcnMtPnJzX2Nvbm47CisJZWxzZSB7CisJCWNvbm4gPSByZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcocnMtPnJzX2JvdW5kX2FkZHIsIGRhZGRyLAorCQkJCQlycy0+cnNfdHJhbnNwb3J0LAorCQkJCQlzb2NrLT5zay0+c2tfYWxsb2NhdGlvbik7CisJCWlmIChJU19FUlIoY29ubikpIHsKKwkJCXJldCA9IFBUUl9FUlIoY29ubik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlycy0+cnNfY29ubiA9IGNvbm47CisJfQorCisJaWYgKChybS0+bV9yZG1hX2Nvb2tpZSB8fCBybS0+bV9yZG1hX29wKQorCSAmJiBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJyZG1hX29wICVwIGNvbm4geG1pdF9yZG1hICVwXG4iLAorCQkJCXJtLT5tX3JkbWFfb3AsIGNvbm4tPmNfdHJhbnMtPnhtaXRfcmRtYSk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5CisJICogaGF2ZSBzY2hlZHVsZWQgYSBkZWxheWVkIHJlY29ubmVjdCBob3dldmVyIC0gaW4gdGhpcyBjYXNlCisJICogd2Ugc2hvdWxkIG5vdCBpbnRlcmZlcmUuCisJICovCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RPV04KKwkgJiYgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywgMCk7CisKKwlyZXQgPSByZHNfY29uZ193YWl0KGNvbm4tPmNfZmNvbmcsIGRwb3J0LCBub25ibG9jaywgcnMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKCFyZHNfc2VuZF9xdWV1ZV9ybShycywgY29ubiwgcm0sIHJzLT5yc19ib3VuZF9wb3J0LAorCQkJCSAgZHBvcnQsICZxdWV1ZWQpKSB7CisJCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlX2Z1bGwpOworCQkvKiBYWFggbWFrZSBzdXJlIHRoaXMgaXMgcmVhc29uYWJsZSAqLworCQlpZiAocGF5bG9hZF9sZW4gPiByZHNfc2tfc25kYnVmKHJzKSkgeworCQkJcmV0ID0gLUVNU0dTSVpFOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKG5vbmJsb2NrKSB7CisJCQlyZXQgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKworCQl0aW1lbyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpzay0+c2tfc2xlZXAsCisJCQkJCXJkc19zZW5kX3F1ZXVlX3JtKHJzLCBjb25uLCBybSwKKwkJCQkJCQkgIHJzLT5yc19ib3VuZF9wb3J0LAorCQkJCQkJCSAgZHBvcnQsCisJCQkJCQkJICAmcXVldWVkKSwKKwkJCQkJdGltZW8pOworCQlyZHNkZWJ1Zygic2VuZG1zZyB3b2tlIHF1ZXVlZCAlZCB0aW1lbyAlbGRcbiIsIHF1ZXVlZCwgdGltZW8pOworCQlpZiAodGltZW8gPiAwIHx8IHRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gdGltZW87CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQnkgbm93IHdlJ3ZlIGNvbW1pdHRlZCB0byB0aGUgc2VuZC4gIFdlIHJldXNlIHJkc19zZW5kX3dvcmtlcigpCisJICogdG8gcmV0cnkgc2VuZHMgaW4gdGhlIHJkcyB0aHJlYWQgaWYgdGhlIHRyYW5zcG9ydCBhc2tzIHVzIHRvLgorCSAqLworCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlZCk7CisKKwlpZiAoIXRlc3RfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSkKKwkJcmRzX3NlbmRfd29ya2VyKCZjb25uLT5jX3NlbmRfdy53b3JrKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHBheWxvYWRfbGVuOworCitvdXQ6CisJLyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LgorCSAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOCisJICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqLworCWlmIChhbGxvY2F0ZWRfbXIpCisJCXJkc19yZG1hX3VudXNlKHJzLCByZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKSwgMSk7CisKKwlpZiAocm0pCisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlcGx5IHRvIGEgcGluZyBwYWNrZXQuCisgKi8KK2ludAorcmRzX3NlbmRfcG9uZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIF9fYmUxNiBkcG9ydCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKDAsIEdGUF9BVE9NSUMpOworCWlmIChybSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJtLT5tX2RhZGRyID0gY29ubi0+Y19mYWRkcjsKKworCS8qIElmIHRoZSBjb25uZWN0aW9uIGlzIGRvd24sIHRyaWdnZXIgYSBjb25uZWN0LiBXZSBtYXkKKwkgKiBoYXZlIHNjaGVkdWxlZCBhIGRlbGF5ZWQgcmVjb25uZWN0IGhvd2V2ZXIgLSBpbiB0aGlzIGNhc2UKKwkgKiB3ZSBzaG91bGQgbm90IGludGVyZmVyZS4KKwkgKi8KKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fRE9XTgorCSAmJiAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LCAwKTsKKworCXJldCA9IHJkc19jb25nX3dhaXQoY29ubi0+Y19mY29uZywgZHBvcnQsIDEsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJtLT5tX2Nvbm5faXRlbSwgJmNvbm4tPmNfc2VuZF9xdWV1ZSk7CisJc2V0X2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwlybS0+bV9pbmMuaV9jb25uID0gY29ubjsKKworCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcigmcm0tPm1faW5jLmlfaGRyLCAwLCBkcG9ydCwKKwkJCQkgICAgY29ubi0+Y19uZXh0X3R4X3NlcSk7CisJY29ubi0+Y19uZXh0X3R4X3NlcSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJcmRzX3N0YXRzX2luYyhzX3NlbmRfcXVldWVkKTsKKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9wb25nKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChybSkKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zdGF0cy5jIGIvbmV0L3Jkcy9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzE0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3N0YXRzLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCByZHNfc3RhdGlzdGljcywgcmRzX3N0YXRzKTsKKworLyogOi4sJHMvdW5zaWduZWQgbG9uZ1w+LipcPHNfXCguKlwpOy8iXDEiLC9nICovCisKK3N0YXRpYyBjaGFyICpyZHNfc3RhdF9uYW1lc1tdID0geworCSJjb25uX3Jlc2V0IiwKKwkicmVjdl9kcm9wX2JhZF9jaGVja3N1bSIsCisJInJlY3ZfZHJvcF9vbGRfc2VxIiwKKwkicmVjdl9kcm9wX25vX3NvY2siLAorCSJyZWN2X2Ryb3BfZGVhZF9zb2NrIiwKKwkicmVjdl9kZWxpdmVyX3JhY2VkIiwKKwkicmVjdl9kZWxpdmVyZWQiLAorCSJyZWN2X3F1ZXVlZCIsCisJInJlY3ZfaW1tZWRpYXRlX3JldHJ5IiwKKwkicmVjdl9kZWxheWVkX3JldHJ5IiwKKwkicmVjdl9hY2tfcmVxdWlyZWQiLAorCSJyZWN2X3JkbWFfYnl0ZXMiLAorCSJyZWN2X3BpbmciLAorCSJzZW5kX3F1ZXVlX2VtcHR5IiwKKwkic2VuZF9xdWV1ZV9mdWxsIiwKKwkic2VuZF9zZW1fY29udGVudGlvbiIsCisJInNlbmRfc2VtX3F1ZXVlX3JhY2VkIiwKKwkic2VuZF9pbW1lZGlhdGVfcmV0cnkiLAorCSJzZW5kX2RlbGF5ZWRfcmV0cnkiLAorCSJzZW5kX2Ryb3BfYWNrZWQiLAorCSJzZW5kX2Fja19yZXF1aXJlZCIsCisJInNlbmRfcXVldWVkIiwKKwkic2VuZF9yZG1hIiwKKwkic2VuZF9yZG1hX2J5dGVzIiwKKwkic2VuZF9wb25nIiwKKwkicGFnZV9yZW1haW5kZXJfaGl0IiwKKwkicGFnZV9yZW1haW5kZXJfbWlzcyIsCisJImNvcHlfdG9fdXNlciIsCisJImNvcHlfZnJvbV91c2VyIiwKKwkiY29uZ191cGRhdGVfcXVldWVkIiwKKwkiY29uZ191cGRhdGVfcmVjZWl2ZWQiLAorCSJjb25nX3NlbmRfZXJyb3IiLAorCSJjb25nX3NlbmRfYmxvY2tlZCIsCit9OworCit2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKQoreworCXN0cnVjdCByZHNfaW5mb19jb3VudGVyIGN0cjsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCUJVR19PTihzdHJsZW4obmFtZXNbaV0pID49IHNpemVvZihjdHIubmFtZSkpOworCQlzdHJuY3B5KGN0ci5uYW1lLCBuYW1lc1tpXSwgc2l6ZW9mKGN0ci5uYW1lKSAtIDEpOworCQljdHIudmFsdWUgPSB2YWx1ZXNbaV07CisKKwkJcmRzX2luZm9fY29weShpdGVyLCAmY3RyLCBzaXplb2YoY3RyKSk7CisJfQorfQorCisvKgorICogVGhpcyBnaXZlcyBnbG9iYWwgY291bnRlcnMgYWNyb3NzIGFsbCB0aGUgdHJhbnNwb3J0cy4gIFRoZSBzdHJpbmdzCisgKiBhcmUgY29waWVkIGluIHNvIHRoYXQgdGhlIHRvb2wgZG9lc24ndCBuZWVkIGtub3dsZWRnZSBvZiB0aGUgc3BlY2lmaWMKKyAqIHN0YXRzIHRoYXQgd2UncmUgZXhwb3J0aW5nLiAgU29tZSBhcmUgcHJldHR5IGltcGxlbWVudGF0aW9uIGRlcGVuZGVudAorICogYW5kIG1heSBjaGFuZ2Ugb3ZlciB0aW1lLiAgVGhhdCBkb2Vzbid0IHN0b3AgdGhlbSBmcm9tIGJlaW5nIHVzZWZ1bC4KKyAqCisgKiBUaGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGluIHRoZSBjaGFpbiB0aGF0IGtub3dzIGFib3V0IHRoZSBieXRlIGdyYW51bGFyCisgKiBsZW5ndGggaW4gdXNlcnNwYWNlLiAgSXQgY29udmVydHMgaXQgdG8gbnVtYmVyIG9mIHN0YXQgZW50cmllcyB0aGF0IHRoZQorICogcmVzdCBvZiB0aGUgZnVuY3Rpb25zIG9wZXJhdGUgaW4uCisgKi8KK3N0YXRpYyB2b2lkIHJkc19zdGF0c19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlzdHJ1Y3QgcmRzX3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgYXZhaWw7CisKKwlhdmFpbCA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fY291bnRlcik7CisKKwlpZiAoYXZhaWwgPCBBUlJBWV9TSVpFKHJkc19zdGF0X25hbWVzKSkgeworCQlhdmFpbCA9IDA7CisJCWdvdG8gdHJhbnM7CisJfQorCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3JjID0gKHVpbnQ2NF90ICopJihwZXJfY3B1KHJkc19zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcykpOworCWF2YWlsIC09IEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpOworCit0cmFuczoKKwlsZW5zLT5lYWNoID0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19jb3VudGVyKTsKKwlsZW5zLT5uciA9IHJkc190cmFuc19zdGF0c19pbmZvX2NvcHkoaXRlciwgYXZhaWwpICsKKwkJICAgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcyk7Cit9CisKK3ZvaWQgcmRzX3N0YXRzX2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09VTlRFUlMsIHJkc19zdGF0c19pbmZvKTsKK30KKworaW50IF9faW5pdCByZHNfc3RhdHNfaW5pdCh2b2lkKQoreworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fQ09VTlRFUlMsIHJkc19zdGF0c19pbmZvKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvc3lzY3RsLmMgYi9uZXQvcmRzL3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2RjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3N5c2N0bC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZHNfc3lzY3RsX3JlZ190YWJsZTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21heCA9IH4wVUw7CisKK3Vuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7Cit1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzID0gSFo7CisKK3Vuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzID0gODsKK3Vuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9ieXRlcyA9ICgxNiA8PCAyMCk7CisKK3Vuc2lnbmVkIGludCByZHNfc3lzY3RsX3BpbmdfZW5hYmxlID0gMTsKKworc3RhdGljIGN0bF90YWJsZSByZHNfc3lzY3RsX3Jkc190YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJyZWNvbm5lY3RfbWluX2RlbGF5X21zIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAicmVjb25uZWN0X21heF9kZWxheV9tcyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllcywKKwkJLmV4dHJhMgkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heF91bmFja2VkX3BhY2tldHMiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heF91bmFja2VkX2J5dGVzIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAicGluZ19lbmFibGUiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9waW5nX2VuYWJsZSwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKGludCksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeyAuY3RsX25hbWUgPSAwfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfcGF0aCByZHNfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gInJkcyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKworCit2b2lkIHJkc19zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChyZHNfc3lzY3RsX3JlZ190YWJsZSkKKwkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmRzX3N5c2N0bF9yZWdfdGFibGUpOworfQorCitpbnQgX19pbml0IHJkc19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJkc19zeXNjdGxfcmVjb25uZWN0X21pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7CisJcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXMgPSByZHNfc3lzY3RsX3JlY29ubmVjdF9taW47CisKKwlyZHNfc3lzY3RsX3JlZ190YWJsZSA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhyZHNfc3lzY3RsX3BhdGgsIHJkc19zeXNjdGxfcmRzX3RhYmxlKTsKKwlpZiAocmRzX3N5c2N0bF9yZWdfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RocmVhZHMuYyBiL25ldC9yZHMvdGhyZWFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGExYmYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RocmVhZHMuYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworLyoKKyAqIEFsbCBvZiBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaXMgc2ltcGxpZmllZCBieSBzZXJpYWxpemluZyBpdCB0aHJvdWdoCisgKiB3b3JrIHF1ZXVlcyB0aGF0IGV4ZWN1dGUgaW4gYSBjb25uZWN0aW9uIG1hbmFnaW5nIHRocmVhZC4KKyAqCisgKiBUQ1Agd2FudHMgdG8gc2VuZCBhY2tzIHRocm91Z2ggc2VuZHBhZ2UoKSBpbiByZXNwb25zZSB0byBkYXRhX3JlYWR5KCksCisgKiBidXQgaXQgbmVlZHMgYSBwcm9jZXNzIGNvbnRleHQgdG8gZG8gc28uCisgKgorICogVGhlIHJlY2VpdmUgcGF0aHMgbmVlZCB0byBhbGxvY2F0ZSBidXQgY2FuJ3QgZHJvcCBwYWNrZXRzICghKSBzbyB3ZSBoYXZlCisgKiBhIHRocmVhZCBhcm91bmQgdG8gYmxvY2sgYWxsb2NhdGluZyBpZiB0aGUgcmVjZWl2ZSBmYXN0IHBhdGggc2VlcyBhbgorICogYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCisKKy8qIEdyYW5kIFVuaWZpZWQgVGhlb3J5IG9mIGNvbm5lY3Rpb24gbGlmZSBjeWNsZToKKyAqIEF0IGFueSBwb2ludCBpbiB0aW1lLCB0aGUgY29ubmVjdGlvbiBjYW4gYmUgaW4gb25lIG9mIHRoZXNlIHN0YXRlczoKKyAqIERPV04sIENPTk5FQ1RJTkcsIFVQLCBESVNDT05ORUNUSU5HLCBFUlJPUgorICoKKyAqIFRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIHBvc3NpYmxlOgorICogIEFOWQkJICAtPiBFUlJPUgorICogIFVQCQkgIC0+IERJU0NPTk5FQ1RJTkcKKyAqICBFUlJPUgkgIC0+IERJU0NPTk5FQ1RJTkcKKyAqICBESVNDT05ORUNUSU5HIC0+IERPV04KKyAqICBET1dOCSAgLT4gQ09OTkVDVElORworICogIENPTk5FQ1RJTkcJICAtPiBVUAorICoKKyAqIFRyYW5zaXRpb24gdG8gc3RhdGUgRElTQ09OTkVDVElORy9ET1dOOgorICogIC0JSW5zaWRlIHRoZSBzaHV0ZG93biB3b3JrZXI7IHN5bmNocm9uaXplcyB3aXRoIHhtaXQgcGF0aAorICoJdGhyb3VnaCBjX3NlbmRfbG9jaywgYW5kIHdpdGggY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNhbGxiYWNrcworICoJdmlhIGNfY21fbG9jay4KKyAqCisgKglGb3IgcmVjZWl2ZSBjYWxsYmFja3MsIHdlIHJlbHkgb24gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0CisgKgkoVENQLCBJQi9SRE1BKSB0byBwcm92aWRlIHRoZSBuZWNlc3Nhcnkgc3luY2hyb25pc2F0aW9uLgorICovCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX3dxOworCit2b2lkIHJkc19jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fQ09OTkVDVElORywgUkRTX0NPTk5fVVApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW5ub3QgdHJhbnNpdGlvbiB0byBzdGF0ZSBVUCwgIgorCQkJCSJjdXJyZW50IHN0YXRlIGlzICVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSk7CisJCWF0b21pY19zZXQoJmNvbm4tPmNfc3RhdGUsIFJEU19DT05OX0VSUk9SKTsKKwkJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7CisJCXJldHVybjsKKwl9CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IGNvbXBsZXRlXG4iLAorCSAgY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyKTsKKworCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSAwOworCXNldF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCk7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCisvKgorICogVGhpcyByYW5kb20gZXhwb25lbnRpYWwgYmFja29mZiBpcyByZWxpZWQgb24gdG8gZXZlbnR1YWxseSByZXNvbHZlIHJhY2luZworICogY29ubmVjdHMuCisgKgorICogSWYgY29ubmVjdCBhdHRlbXB0cyByYWNlIHRoZW4gYm90aCBwYXJ0aWVzIGRyb3AgYm90aCBjb25uZWN0aW9ucyBhbmQgY29tZQorICogaGVyZSB0byB3YWl0IGZvciBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdHJ5aW5nIGFnYWluLiAgRXZlbnR1YWxseQorICogdGhlIGJhY2tvZmYgcmFuZ2Ugd2lsbCBiZSBzbyBtdWNoIGdyZWF0ZXIgdGhhbiB0aGUgdGltZSBpdCB0YWtlcyB0bworICogZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0aGF0IG9uZSBvZiB0aGUgcGFpciB3aWxsIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbgorICogYmVmb3JlIHRoZSBvdGhlcidzIHJhbmRvbSBkZWxheSBmaXJlcy4KKyAqCisgKiBDb25uZWN0aW9uIGF0dGVtcHRzIHRoYXQgYXJyaXZlIHdoaWxlIGEgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGVzdGFibGlzaGVkCisgKiBhcmUgYWxzbyBjb25zaWRlcmVkIHRvIGJlIHJhY2luZyBjb25uZWN0cy4gIFRoaXMgbGV0cyBhIGNvbm5lY3Rpb24gZnJvbQorICogYSByZWJvb3RlZCBtYWNoaW5lIHJlcGxhY2UgYW4gZXhpc3Rpbmcgc3RhbGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHRyYW5zcG9ydAorICogbm90aWNlcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhhcyBmYWlsZWQuCisgKgorICogV2Ugc2hvdWxkICphbHdheXMqIHN0YXJ0IHdpdGggYSByYW5kb20gYmFja29mZjsgb3RoZXJ3aXNlIGEgYnJva2VuIGNvbm5lY3Rpb24KKyAqIHdpbGwgYWx3YXlzIHRha2Ugc2V2ZXJhbCBpdGVyYXRpb25zIHRvIGJlIHJlLWVzdGFibGlzaGVkLgorICovCitzdGF0aWMgdm9pZCByZHNfcXVldWVfcmVjb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwl1bnNpZ25lZCBsb25nIHJhbmQ7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IHJlY29ubmVjdCBqaWZmaWVzICVsdVxuIiwKKwkgIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkciwKKwkgIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMpOworCisJc2V0X2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKTsKKwlpZiAoY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9PSAwKSB7CisJCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSByZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllczsKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LCAwKTsKKwkJcmV0dXJuOworCX0KKworCWdldF9yYW5kb21fYnl0ZXMoJnJhbmQsIHNpemVvZihyYW5kKSk7CisJcmRzZGVidWcoIiVsdSBkZWxheSAlbHUgY2VpbCBjb25uICVwIGZvciAlcEk0IC0+ICVwSTRcbiIsCisJCSByYW5kICUgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcywgY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcywKKwkJIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkcik7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfY29ubl93LAorCQkJICAgcmFuZCAlIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMpOworCisJY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9IG1pbihjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzICogMiwKKwkJCQkJcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMpOworfQorCit2b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfY29ubmVjdGlvbiwgY19jb25uX3cud29yayk7CisJaW50IHJldDsKKworCWNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZjb25uLT5jX2ZsYWdzKTsKKwlpZiAocmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlyZXQgPSBjb25uLT5jX3RyYW5zLT5jb25uX2Nvbm5lY3QoY29ubik7CisJCXJkc2RlYnVnKCJjb25uICVwIGZvciAlcEk0IHRvICVwSTQgZGlzcGF0Y2hlZCwgcmV0ICVkXG4iLAorCQkJY29ubiwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCisJCWlmIChyZXQpIHsKKwkJCWlmIChyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0NPTk5FQ1RJTkcsIFJEU19DT05OX0RPV04pKQorCQkJCXJkc19xdWV1ZV9yZWNvbm5lY3QoY29ubik7CisJCQllbHNlCisJCQkJcmRzX2Nvbm5fZXJyb3IoY29ubiwgIlJEUzogY29ubmVjdCBmYWlsZWRcbiIpOworCQl9CisJfQorfQorCit2b2lkIHJkc19zaHV0ZG93bl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfZG93bl93KTsKKworCS8qIHNodXQgaXQgZG93biB1bmxlc3MgaXQncyBkb3duIGFscmVhZHkgKi8KKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fRE9XTikpIHsKKwkJLyoKKwkJICogUXVpZXNjZSB0aGUgY29ubmVjdGlvbiBtZ210IGhhbmRsZXJzIGJlZm9yZSB3ZSBzdGFydCB0ZWFyaW5nCisJCSAqIHRoaW5ncyBkb3duLiBXZSBkb24ndCBob2xkIHRoZSBtdXRleCBmb3IgdGhlIGVudGlyZQorCQkgKiBkdXJhdGlvbiBvZiB0aGUgc2h1dGRvd24gb3BlcmF0aW9uLCBlbHNlIHdlIG1heSBiZQorCQkgKiBkZWFkbG9ja2luZyB3aXRoIHRoZSBDTSBoYW5kbGVyLiBJbnN0ZWFkLCB0aGUgQ00gZXZlbnQKKwkJICogaGFuZGxlciBpcyBzdXBwb3NlZCB0byBjaGVjayBmb3Igc3RhdGUgRElTQ09OTkVDVElORworCQkgKi8KKwkJbXV0ZXhfbG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX1VQLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HKQorCQkgJiYgIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRVJST1IsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcpKSB7CisJCQlyZHNfY29ubl9lcnJvcihjb25uLCAic2h1dGRvd24gY2FsbGVkIGluIHN0YXRlICVkXG4iLAorCQkJCQlhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkpOworCQkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCQkJcmV0dXJuOworCQl9CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKworCQltdXRleF9sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisJCWNvbm4tPmNfdHJhbnMtPmNvbm5fc2h1dGRvd24oY29ubik7CisJCXJkc19jb25uX3Jlc2V0KGNvbm4pOworCQltdXRleF91bmxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKworCQlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRElTQ09OTkVDVElORywgUkRTX0NPTk5fRE9XTikpIHsKKwkJCS8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nCisJCQkgKiBkb3duIHRoZSBjb25uZWN0aW9uLCBhbmQgc29tZW9uZSB1bmxvYWRzIHRoZSByZHMgbW9kdWxlLgorCQkJICogUXVpdGUgcmVwcm9kdWNlYWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLgorCQkJICogTW9zdGx5IGhhcm1sZXNzLgorCQkJICovCisJCQlyZHNfY29ubl9lcnJvcihjb25uLAorCQkJCSIlczogZmFpbGVkIHRvIHRyYW5zaXRpb24gdG8gc3RhdGUgRE9XTiwgIgorCQkJCSJjdXJyZW50IHN0YXRlIGlzICVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBUaGVuIHJlY29ubmVjdCBpZiBpdCdzIHN0aWxsIGxpdmUuCisJICogVGhlIHBhc3NpdmUgc2lkZSBvZiBhbiBJQiBsb29wYmFjayBjb25uZWN0aW9uIGlzIG5ldmVyIGFkZGVkCisJICogdG8gdGhlIGNvbm4gaGFzaCwgc28gd2UgbmV2ZXIgdHJpZ2dlciBhIHJlY29ubmVjdCBvbiB0aGlzCisJICogY29ubiAtIHRoZSByZWNvbm5lY3QgaXMgYWx3YXlzIHRyaWdnZXJlZCBieSB0aGUgYWN0aXZlIHBlZXIuICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29ubi0+Y19jb25uX3cpOworCWlmICghaGxpc3RfdW5oYXNoZWQoJmNvbm4tPmNfaGFzaF9ub2RlKSkKKwkJcmRzX3F1ZXVlX3JlY29ubmVjdChjb25uKTsKK30KKwordm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfc2VuZF93LndvcmspOworCWludCByZXQ7CisKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJcmV0ID0gcmRzX3NlbmRfeG1pdChjb25uKTsKKwkJcmRzZGVidWcoImNvbm4gJXAgcmV0ICVkXG4iLCBjb25uLCByZXQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FQUdBSU46CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9pbW1lZGlhdGVfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9kZWxheWVkX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMik7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfcmVjdl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfcmVjdl93LndvcmspOworCWludCByZXQ7CisKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJcmV0ID0gY29ubi0+Y190cmFucy0+cmVjdihjb25uKTsKKwkJcmRzZGVidWcoImNvbm4gJXAgcmV0ICVkXG4iLCBjb25uLCByZXQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FQUdBSU46CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9pbW1lZGlhdGVfcmV0cnkpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kZWxheWVkX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMik7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCByZHNfdGhyZWFkc19leGl0KHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUocmRzX3dxKTsKK30KKworaW50IF9faW5pdCByZHNfdGhyZWFkc19pbml0KHZvaWQpCit7CisJcmRzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtyZHNkIik7CisJaWYgKHJkc193cSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90cmFuc3BvcnQuYyBiL25ldC9yZHMvdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3ZGE2MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJsb29wLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQocmRzX3RyYW5zcG9ydHMpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocmRzX3RyYW5zX3NlbSk7CisKK2ludCByZHNfdHJhbnNfcmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKQoreworCUJVR19PTihzdHJsZW4odHJhbnMtPnRfbmFtZSkgKyAxID4gVFJBTlNOQU1TSVopOworCisJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlsaXN0X2FkZF90YWlsKCZ0cmFucy0+dF9pdGVtLCAmcmRzX3RyYW5zcG9ydHMpOworCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisKKwl1cF93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfdHJhbnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCit7CisJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CisKKwlsaXN0X2RlbF9pbml0KCZ0cmFucy0+dF9pdGVtKTsKKwlwcmludGsoS0VSTl9JTkZPICJVbnJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisKKwl1cF93cml0ZSgmcmRzX3RyYW5zX3NlbSk7Cit9CisKK3N0cnVjdCByZHNfdHJhbnNwb3J0ICpyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnJldCA9IE5VTEw7CisKKwlpZiAoSU5fTE9PUEJBQ0sobnRvaGwoYWRkcikpKQorCQlyZXR1cm4gJnJkc19sb29wX3RyYW5zcG9ydDsKKworCWRvd25fcmVhZCgmcmRzX3RyYW5zX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKKwkJaWYgKHRyYW5zLT5sYWRkcl9jaGVjayhhZGRyKSA9PSAwKSB7CisJCQlyZXQgPSB0cmFuczsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnJkc190cmFuc19zZW0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0YXRzIGVudHJpZXMgaW4gdGhlIHNuYXBzaG90IGFuZCBvbmx5CisgKiBjb3BpZXMgdGhlbSB1c2luZyB0aGUgaXRlciBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZW0uICBUaGUKKyAqIGNhbGxlciBwYXNzZXMgaW4gdGhlIGdsb2JhbCBzdGF0cyBzbyB0aGF0IHdlIGNhbiBzaXplIGFuZCBjb3B5IHdoaWxlCisgKiBob2xkaW5nIHRoZSBsb2NrLgorICovCit1bnNpZ25lZCBpbnQgcmRzX3RyYW5zX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBhdmFpbCkKKworeworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOworCXVuc2lnbmVkIGludCBwYXJ0OworCisJcmRzX2luZm9faXRlcl91bm1hcChpdGVyKTsKKwlkb3duX3JlYWQoJnJkc190cmFuc19zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKKwkJaWYgKHRyYW5zLT5zdGF0c19pbmZvX2NvcHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXBhcnQgPSB0cmFucy0+c3RhdHNfaW5mb19jb3B5KGl0ZXIsIGF2YWlsKTsKKwkJYXZhaWwgLT0gbWluKGF2YWlsLCBwYXJ0KTsKKwkJdG90YWwgKz0gcGFydDsKKwl9CisKKwl1cF9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKworCXJldHVybiB0b3RhbDsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2UvYWZfcm9zZS5jIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCmluZGV4IDAxMzkyNjQuLjY1MDEzOTYgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL2FmX3Jvc2UuYworKysgYi9uZXQvcm9zZS9hZl9yb3NlLmMKQEAgLTE1ODcsOCArMTU4Nyw3IEBACiAJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKIAkJc3ByaW50ZihuYW1lLCAicm9zZSVkIiwgaSk7Ci0JCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpLAotCQkJCSAgIG5hbWUsIHJvc2Vfc2V0dXApOworCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgbmFtZSwgcm9zZV9zZXR1cCk7CiAJCWlmICghZGV2KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlJPU0U6IHJvc2VfcHJvdG9faW5pdCAtIHVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOwogCQkJcmMgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9kZXYuYyBiL25ldC9yb3NlL3Jvc2VfZGV2LmMKaW5kZXggMTJjZmNmMC4uN2RjZjI1NiAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9kZXYuYworKysgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCkBAIC01Nyw3ICs1Nyw3IEBACiB7CiAjaWZkZWYgQ09ORklHX0lORVQKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBjaGFyICpicCA9ICh1bnNpZ25lZCBjaGFyICopc2tiLT5kYXRhOwogCXN0cnVjdCBza19idWZmICpza2JuOwogCXVuc2lnbmVkIGludCBsZW47CkBAIC0xMzMsNyArMTMzLDcgQEAKIAogc3RhdGljIGludCByb3NlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJST1NFOiByb3NlX3htaXQgLSBjYWxsZWQgd2hlbiBpZmFjZSBpcyBkb3duXG4iKTsKQEAgLTE0NCwzMCArMTQ0LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcm9zZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIHJvc2VfaGVhZGVyX29wcyA9IHsKIAkuY3JlYXRlCT0gcm9zZV9oZWFkZXIsCiAJLnJlYnVpbGQ9IHJvc2VfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJvc2VfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gcm9zZV9vcGVuLAorCS5uZG9fc3RvcAkJPSByb3NlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSByb3NlX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSByb3NlX3NldF9tYWNfYWRkcmVzcywKK307CisKIHZvaWQgcm9zZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+bXR1CQk9IFJPU0VfTUFYX1BBQ0tFVF9TSVpFIC0gMjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHJvc2VfeG1pdDsKLQlkZXYtPm9wZW4JCT0gcm9zZV9vcGVuOwotCWRldi0+c3RvcAkJPSByb3NlX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcwkJPSAmcm9zZV9uZXRkZXZfb3BzOwogCiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZyb3NlX2hlYWRlcl9vcHM7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBBWDI1X0JQUV9IRUFERVJfTEVOICsgQVgyNV9NQVhfSEVBREVSX0xFTiArIFJPU0VfTUlOX0xFTjsKIAlkZXYtPmFkZHJfbGVuCQk9IFJPU0VfQUREUl9MRU47CiAJZGV2LT50eXBlCQk9IEFSUEhSRF9ST1NFOwotCWRldi0+c2V0X21hY19hZGRyZXNzICAgID0gcm9zZV9zZXRfbWFjX2FkZHJlc3M7CiAKIAkvKiBOZXctc3R5bGUgZmxhZ3MuICovCiAJZGV2LT5mbGFncwkJPSBJRkZfTk9BUlA7Ci0JZGV2LT5nZXRfc3RhdHMgPSByb3NlX2dldF9zdGF0czsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDBmYzRhMTguLjMyMDA5NzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNDQ0LDYgKzQ0NCwxNyBAQAogfQogRVhQT1JUX1NZTUJPTChxZGlzY19jYWxjdWxhdGVfcGt0X2xlbik7CiAKK3ZvaWQgcWRpc2Nfd2Fybl9ub253YyhjaGFyICp0eHQsIHN0cnVjdCBRZGlzYyAqcWRpc2MpCit7CisJaWYgKCEocWRpc2MtPmZsYWdzICYgVENRX0ZfV0FSTl9OT05XQykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiAlcyBxZGlzYyAlWDogaXMgbm9uLXdvcmstY29uc2VydmluZz9cbiIsCisJCSAgICAgICB0eHQsIHFkaXNjLT5vcHMtPmlkLCBxZGlzYy0+aGFuZGxlID4+IDE2KTsKKwkJcWRpc2MtPmZsYWdzIHw9IFRDUV9GX1dBUk5fTk9OV0M7CisJfQorfQorRVhQT1JUX1NZTUJPTChxZGlzY193YXJuX25vbndjKTsKKwogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHFkaXNjX3dhdGNoZG9nKHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2cgKndkID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgcWRpc2Nfd2F0Y2hkb2csCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2NicS5jIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwppbmRleCA5ZTQzZWQ5Li5kNzI4ZDgxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2NicS5jCisrKyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKQEAgLTE5NjAsOCArMTk2MCwxMSBAQAogCWNicV9ybXByaW8ocSwgY2wpOwogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCi0JaWYgKC0tY2wtPnJlZmNudCA9PSAwKQotCQljYnFfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTsKKwlCVUdfT04oLS1jbC0+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwppbmRleCBlMzZlOTRhLi43NTk3ZmUxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKQEAgLTE1NSw4ICsxNTUsMTEgQEAKIAlkcnJfcHVyZ2VfcXVldWUoY2wpOwogCXFkaXNjX2NsYXNzX2hhc2hfcmVtb3ZlKCZxLT5jbGhhc2gsICZjbC0+Y29tbW9uKTsKIAotCWlmICgtLWNsLT5yZWZjbnQgPT0gMCkKLQkJZHJyX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwppbmRleCA0NWMzMWIxLi41MDIyZjljIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuYworKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwpAQCAtODg3LDggKzg4Nyw3IEBACiAKIAlza2IgPSBzY2gtPm9wcy0+cGVlayhzY2gpOwogCWlmIChza2IgPT0gTlVMTCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKCJxZGlzY19wZWVrX2xlbjogbm9uIHdvcmstY29uc2VydmluZyBxZGlzYyA/XG4iKTsKKwkJcWRpc2Nfd2Fybl9ub253YygicWRpc2NfcGVla19sZW4iLCBzY2gpOwogCQlyZXR1cm4gMDsKIAl9CiAJbGVuID0gcWRpc2NfcGt0X2xlbihza2IpOwpAQCAtMTE0MCw4ICsxMTM5LDExIEBACiAJaGZzY19wdXJnZV9xdWV1ZShzY2gsIGNsKTsKIAlxZGlzY19jbGFzc19oYXNoX3JlbW92ZSgmcS0+Y2xoYXNoLCAmY2wtPmNsX2NvbW1vbik7CiAKLQlpZiAoLS1jbC0+cmVmY250ID09IDApCi0JCWhmc2NfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTsKKwlCVUdfT04oLS1jbC0+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLwogCiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAJcmV0dXJuIDA7CkBAIC0xNjQyLDggKzE2NDQsNyBAQAogCiAJc2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtPnFkaXNjKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50aygiSEZTQzogTm9uLXdvcmstY29uc2VydmluZyBxZGlzYyA/XG4iKTsKKwkJcWRpc2Nfd2Fybl9ub253YygiSEZTQyIsIGNsLT5xZGlzYyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggMmYwZjBiMC4uODhjZDAyNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAKQEAgLTExNCw4ICsxMTUsNiBAQAogCXN0cnVjdCB0Y2ZfcHJvdG8gKmZpbHRlcl9saXN0OwogCWludCBmaWx0ZXJfY250OwogCi0JaW50IHdhcm5lZDsJCS8qIG9ubHkgb25lIHdhcm5pbmcgYWJvdXQgbm9uIHdvcmsgY29uc2VydmluZyAuLiAqLwotCiAJLyogdG9rZW4gYnVja2V0IHBhcmFtZXRlcnMgKi8KIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcmF0ZTsJLyogcmF0ZSB0YWJsZSBvZiB0aGUgY2xhc3MgaXRzZWxmICovCiAJc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKmNlaWw7CS8qIGNlaWxpbmcgcmF0ZSAobGltaXRzIGJvcnJvd3MgdG9vKSAqLwpAQCAtMTU1LDYgKzE1NCwxMCBAQAogCWludCBkaXJlY3RfcWxlbjsJLyogbWF4IHFsZW4gb2YgYWJvdmUgKi8KIAogCWxvbmcgZGlyZWN0X3BrdHM7CisKKyNkZWZpbmUgSFRCX1dBUk5fVE9PTUFOWUVWRU5UUwkweDEKKwl1bnNpZ25lZCBpbnQgd2FybmVkOwkvKiBvbmx5IG9uZSB3YXJuaW5nICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiB9OwogCiAvKiBmaW5kIGNsYXNzIGluIGdsb2JhbCBoYXNoIHRhYmxlIHVzaW5nIGdpdmVuIGhhbmRsZSAqLwpAQCAtNjU4LDcgKzY2MSw3IEBACiAgKiBodGJfZG9fZXZlbnRzIC0gbWFrZSBtb2RlIGNoYW5nZXMgdG8gY2xhc3NlcyBhdCB0aGUgbGV2ZWwKICAqCiAgKiBTY2FucyBldmVudCBxdWV1ZSBmb3IgcGVuZGluZyBldmVudHMgYW5kIGFwcGxpZXMgdGhlbS4gUmV0dXJucyB0aW1lIG9mCi0gKiBuZXh0IHBlbmRpbmcgZXZlbnQgKDAgZm9yIG5vIGV2ZW50IGluIHBxKS4KKyAqIG5leHQgcGVuZGluZyBldmVudCAoMCBmb3Igbm8gZXZlbnQgaW4gcHEsIHEtPm5vdyBmb3IgdG9vIG1hbnkgZXZlbnRzKS4KICAqIE5vdGU6IEFwcGxpZWQgYXJlIGV2ZW50cyB3aG9zZSBoYXZlIGNsLT5wcV9rZXkgPD0gcS0+bm93LgogICovCiBzdGF0aWMgcHNjaGVkX3RpbWVfdCBodGJfZG9fZXZlbnRzKHN0cnVjdCBodGJfc2NoZWQgKnEsIGludCBsZXZlbCwKQEAgLTY4Niw4ICs2ODksMTQgQEAKIAkJaWYgKGNsLT5jbW9kZSAhPSBIVEJfQ0FOX1NFTkQpCiAJCQlodGJfYWRkX3RvX3dhaXRfdHJlZShxLCBjbCwgZGlmZik7CiAJfQotCS8qIHRvbyBtdWNoIGxvYWQgLSBsZXQncyBjb250aW51ZSBvbiBuZXh0IGppZmZpZSAoaW5jbHVkaW5nIGFib3ZlKSAqLwotCXJldHVybiBxLT5ub3cgKyAyICogUFNDSEVEX1RJQ0tTX1BFUl9TRUMgLyBIWjsKKworCS8qIHRvbyBtdWNoIGxvYWQgLSBsZXQncyBjb250aW51ZSBhZnRlciBhIGJyZWFrIGZvciBzY2hlZHVsaW5nICovCisJaWYgKCEocS0+d2FybmVkICYgSFRCX1dBUk5fVE9PTUFOWUVWRU5UUykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHRiOiB0b28gbWFueSBldmVudHMhXG4iKTsKKwkJcS0+d2FybmVkIHw9IEhUQl9XQVJOX1RPT01BTllFVkVOVFM7CisJfQorCisJcmV0dXJuIHEtPm5vdzsKIH0KIAogLyogUmV0dXJucyBjbGFzcy0+bm9kZStwcmlvIGZyb20gaWQtdHJlZSB3aGVyZSBjbGFzc2UncyBpZCBpcyA+PSBpZC4gTlVMTApAQCAtODA5LDEzICs4MTgsOCBAQAogCQlza2IgPSBjbC0+dW4ubGVhZi5xLT5kZXF1ZXVlKGNsLT51bi5sZWFmLnEpOwogCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkKIAkJCWJyZWFrOwotCQlpZiAoIWNsLT53YXJuZWQpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiaHRiOiBjbGFzcyAlWCBpc24ndCB3b3JrIGNvbnNlcnZpbmcgPyFcbiIsCi0JCQkgICAgICAgY2wtPmNvbW1vbi5jbGFzc2lkKTsKLQkJCWNsLT53YXJuZWQgPSAxOwotCQl9CiAKKwkJcWRpc2Nfd2Fybl9ub253YygiaHRiIiwgY2wtPnVuLmxlYWYucSk7CiAJCWh0Yl9uZXh0X3JiX25vZGUoKGxldmVsID8gY2wtPnBhcmVudC0+dW4uaW5uZXIucHRyIDogcS0+CiAJCQkJICBwdHJbMF0pICsgcHJpbyk7CiAJCWNsID0gaHRiX2xvb2t1cF9sZWFmKHEtPnJvd1tsZXZlbF0gKyBwcmlvLCBwcmlvLApAQCAtODkyLDcgKzg5NiwxMCBAQAogCQl9CiAJfQogCXNjaC0+cXN0YXRzLm92ZXJsaW1pdHMrKzsKLQlxZGlzY193YXRjaGRvZ19zY2hlZHVsZSgmcS0+d2F0Y2hkb2csIG5leHRfZXZlbnQpOworCWlmIChsaWtlbHkobmV4dF9ldmVudCA+IHEtPm5vdykpCisJCXFkaXNjX3dhdGNoZG9nX3NjaGVkdWxlKCZxLT53YXRjaGRvZywgbmV4dF9ldmVudCk7CisJZWxzZQorCQlzY2hlZHVsZV93b3JrKCZxLT53b3JrKTsKIGZpbjoKIAlyZXR1cm4gc2tiOwogfQpAQCAtOTYyLDYgKzk2OSwxNCBAQAogCVtUQ0FfSFRCX1JUQUJdCT0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSBUQ19SVEFCX1NJWkUgfSwKIH07CiAKK3N0YXRpYyB2b2lkIGh0Yl93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGh0Yl9zY2hlZCwgd29yayk7CisJc3RydWN0IFFkaXNjICpzY2ggPSBxLT53YXRjaGRvZy5xZGlzYzsKKworCV9fbmV0aWZfc2NoZWR1bGUocWRpc2Nfcm9vdChzY2gpKTsKK30KKwogc3RhdGljIGludCBodGJfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0KQogewogCXN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CkBAIC05OTYsNiArMTAxMSw3IEBACiAJCUlOSVRfTElTVF9IRUFEKHEtPmRyb3BzICsgaSk7CiAKIAlxZGlzY193YXRjaGRvZ19pbml0KCZxLT53YXRjaGRvZywgc2NoKTsKKwlJTklUX1dPUksoJnEtPndvcmssIGh0Yl93b3JrX2Z1bmMpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnEtPmRpcmVjdF9xdWV1ZSk7CiAKIAlxLT5kaXJlY3RfcWxlbiA9IHFkaXNjX2RldihzY2gpLT50eF9xdWV1ZV9sZW47CkBAIC0xMTg4LDcgKzEyMDQsNiBAQAogCWtmcmVlKGNsKTsKIH0KIAotLyogYWx3YXlzIGNhbGVkIHVuZGVyIEJIICYgcXVldWUgbG9jayAqLwogc3RhdGljIHZvaWQgaHRiX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpCiB7CiAJc3RydWN0IGh0Yl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKQEAgLTExOTYsNiArMTIxMSw3IEBACiAJc3RydWN0IGh0Yl9jbGFzcyAqY2w7CiAJdW5zaWduZWQgaW50IGk7CiAKKwljYW5jZWxfd29ya19zeW5jKCZxLT53b3JrKTsKIAlxZGlzY193YXRjaGRvZ19jYW5jZWwoJnEtPndhdGNoZG9nKTsKIAkvKiBUaGlzIGxpbmUgdXNlZCB0byBiZSBhZnRlciBodGJfZGVzdHJveV9jbGFzcyBjYWxsIGJlbG93CiAJICAgYW5kIHN1cnByaXNpbmdseSBpdCB3b3JrZWQgaW4gMi40LiBCdXQgaXQgbXVzdCBwcmVjZWRlIGl0CkBAIC0xMjU5LDggKzEyNzUsMTEgQEAKIAlpZiAobGFzdF9jaGlsZCkKIAkJaHRiX3BhcmVudF90b19sZWFmKHEsIGNsLCBuZXdfcSk7CiAKLQlpZiAoLS1jbC0+cmVmY250ID09IDApCi0JCWh0Yl9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworCUJVR19PTigtLWNsLT5yZWZjbnQgPT0gMCk7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHdlICJob2xkIiBvbmUgY29wcy0+Z2V0KCkgd2hlbiBjYWxsZWQKKwkgKiBmcm9tIHRjX2N0bF90Y2xhc3M7IHRoZSBkZXN0cm95IG1ldGhvZCBpcyBkb25lIGZyb20gY29wcy0+cHV0KCkuCisJICovCiAKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCmluZGV4IDdlMTUxODYuLjkxMjczMTIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJaW50IGk7CiAKIAlpZiAoIW5ldGlmX2lzX211bHRpcXVldWUocWRpc2NfZGV2KHNjaCkpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmIChubGFfbGVuKG9wdCkgPCBzaXplb2YoKnFvcHQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YmYuYyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKaW5kZXggYTJmOTNjMC4uZTIyZGZlOCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YmYuYworKysgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCkBAIC0yMzYsNyArMjM2LDYgQEAKIAlzdHJ1Y3QgdGNfdGJmX3FvcHQgKnFvcHQ7CiAJc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnJ0YWIgPSBOVUxMOwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpwdGFiID0gTlVMTDsKLQlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqdG1wOwogCXN0cnVjdCBRZGlzYyAqY2hpbGQgPSBOVUxMOwogCWludCBtYXhfc2l6ZSxuOwogCkBAIC0yOTUsMTMgKzI5NCw5IEBACiAJcS0+dG9rZW5zID0gcS0+YnVmZmVyOwogCXEtPnB0b2tlbnMgPSBxLT5tdHU7CiAKLQl0bXAgPSBxLT5SX3RhYjsKLQlxLT5SX3RhYiA9IHJ0YWI7Ci0JcnRhYiA9IHRtcDsKKwlzd2FwKHEtPlJfdGFiLCBydGFiKTsKKwlzd2FwKHEtPlBfdGFiLCBwdGFiKTsKIAotCXRtcCA9IHEtPlBfdGFiOwotCXEtPlBfdGFiID0gcHRhYjsKLQlwdGFiID0gdG1wOwogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCWVyciA9IDA7CiBkb25lOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvZGVidWcuYyBiL25ldC9zY3RwL2RlYnVnLmMKaW5kZXggNjc3MTVmNC4uN2ZmNTQ4YSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZGVidWcuYworKysgYi9uZXQvc2N0cC9kZWJ1Zy5jCkBAIC04Niw2ICs4Niw5IEBACiAJY2FzZSBTQ1RQX0NJRF9GV0RfVFNOOgogCQlyZXR1cm4gIkZXRF9UU04iOwogCisJY2FzZSBTQ1RQX0NJRF9BVVRIOgorCQlyZXR1cm4gIkFVVEgiOworCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTM1LDYgKzEzOCw3IEBACiAJIlBSSU1JVElWRV9BQk9SVCIsCiAJIlBSSU1JVElWRV9TRU5EIiwKIAkiUFJJTUlUSVZFX1JFUVVFU1RIRUFSVEJFQVQiLAorCSJQUklNSVRJVkVfQVNDT05GIiwKIH07CiAKIC8qIExvb2t1cCBwcmltaXRpdmUgZGVidWcgbmFtZS4gKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IDJlNGE4NjQuLmQyZTk4ODAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtODMsMTQgKzgzLDE1IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKmxpc3QgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2ggPSBzY3RwX2hkcihza2IpOwotCV9fYmUzMiBjbXAgPSBzaC0+Y2hlY2tzdW07Ci0JX19iZTMyIHZhbCA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgc2tiX2hlYWRsZW4oc2tiKSk7CisJX19sZTMyIGNtcCA9IHNoLT5jaGVja3N1bTsKKwlfX2xlMzIgdmFsOworCV9fdTMyIHRtcCA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgc2tiX2hlYWRsZW4oc2tiKSk7CiAKIAlmb3IgKDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCi0JCXZhbCA9IHNjdHBfdXBkYXRlX2Nrc3VtKChfX3U4ICopbGlzdC0+ZGF0YSwgc2tiX2hlYWRsZW4obGlzdCksCi0JCQkJCXZhbCk7CisJCXRtcCA9IHNjdHBfdXBkYXRlX2Nrc3VtKChfX3U4ICopbGlzdC0+ZGF0YSwgc2tiX2hlYWRsZW4obGlzdCksCisJCQkJCXRtcCk7CiAKLQl2YWwgPSBzY3RwX2VuZF9ja3N1bSh2YWwpOworCXZhbCA9IHNjdHBfZW5kX2Nrc3VtKHRtcCk7CiAKIAlpZiAodmFsICE9IGNtcCkgewogCQkvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi8KQEAgLTE0Miw3ICsxNDMsOCBAQAogCV9fc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTsKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKQogCQlnb3RvIGRpc2NhcmRfaXQ7Ci0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICYmIHNjdHBfcmN2X2NoZWNrc3VtKHNrYikgPCAwKQorCWlmICghc2N0cF9jaGVja3N1bV9kaXNhYmxlICYmICFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICYmCisJCSAgc2N0cF9yY3ZfY2hlY2tzdW0oc2tiKSA8IDApCiAJCWdvdG8gZGlzY2FyZF9pdDsKIAogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggY2VhYTRhYS4uYTYzZGUzZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtOTcsOCArOTcsNyBAQAogCQlpZiAoYWRkcikgewogCQkJYWRkci0+YS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwogCQkJYWRkci0+YS52Ni5zaW42X3BvcnQgPSAwOwotCQkJbWVtY3B5KCZhZGRyLT5hLnY2LnNpbjZfYWRkciwgJmlmYS0+YWRkciwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQkJaXB2Nl9hZGRyX2NvcHkoJmFkZHItPmEudjYuc2luNl9hZGRyLCAmaWZhLT5hZGRyKTsKIAkJCWFkZHItPmEudjYuc2luNl9zY29wZV9pZCA9IGlmYS0+aWRldi0+ZGV2LT5pZmluZGV4OwogCQkJYWRkci0+dmFsaWQgPSAxOwogCQkJc3Bpbl9sb2NrX2JoKCZzY3RwX2xvY2FsX2FkZHJfbG9jayk7CkBAIC02MjgsOSArNjI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF92Nl9jcmVhdGVfYWNjZXB0X3NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IHNvY2sgKm5ld3NrOwotCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5ld25wLCAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHNjdHA2X3NvY2sgKm5ld3NjdHA2c2s7CiAKQEAgLTY0MCwxNyArNjM3LDcgQEAKIAogCXNvY2tfaW5pdF9kYXRhKE5VTEwsIG5ld3NrKTsKIAotCW5ld3NrLT5za190eXBlID0gU09DS19TVFJFQU07Ci0KLQluZXdzay0+c2tfcHJvdCA9IHNrLT5za19wcm90OwotCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKLQluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7Ci0KLQluZXdzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7Ci0JbmV3c2stPnNrX2ZhbWlseSA9IFBGX0lORVQ2OwotCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKLQluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7Ci0JbmV3c2stPnNrX3NodXRkb3duID0gc2stPnNrX3NodXRkb3duOworCXNjdHBfY29weV9zb2NrKG5ld3NrLCBzaywgYXNvYyk7CiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7CiAKIAluZXdzY3RwNnNrID0gKHN0cnVjdCBzY3RwNl9zb2NrICopbmV3c2s7CkBAIC02NTgsNyArNjQ1LDYgQEAKIAogCXNjdHBfc2sobmV3c2spLT52NG1hcHBlZCA9IHNjdHBfc2soc2spLT52NG1hcHBlZDsKIAotCW5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKIAluZXducCA9IGluZXQ2X3NrKG5ld3NrKTsKIAogCW1lbWNweShuZXducCwgbnAsIHNpemVvZihzdHJ1Y3QgaXB2Nl9waW5mbykpOwpAQCAtNjY2LDI2ICs2NTIsOCBAQAogCS8qIEluaXRpYWxpemUgc2sncyBzcG9ydCwgZHBvcnQsIHJjdl9zYWRkciBhbmQgZGFkZHIgZm9yIGdldHNvY2tuYW1lKCkKIAkgKiBhbmQgZ2V0cGVlcm5hbWUoKS4KIAkgKi8KLQluZXdpbmV0LT5zcG9ydCA9IGluZXQtPnNwb3J0OwotCW5ld25wLT5zYWRkciA9IG5wLT5zYWRkcjsKLQluZXducC0+cmN2X3NhZGRyID0gbnAtPnJjdl9zYWRkcjsKLQluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CiAJc2N0cF92Nl90b19za19kYWRkcigmYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIsIG5ld3NrKTsKIAotCS8qIEluaXQgdGhlIGlwdjQgcGFydCBvZiB0aGUgc29ja2V0IHNpbmNlIHdlIGNhbiBoYXZlIHNvY2tldHMKLQkgKiB1c2luZyB2NiBBUEkgZm9yIGlwdjQuCi0JICovCi0JbmV3aW5ldC0+dWNfdHRsID0gLTE7Ci0JbmV3aW5ldC0+bWNfbG9vcCA9IDE7Ci0JbmV3aW5ldC0+bWNfdHRsID0gMTsKLQluZXdpbmV0LT5tY19pbmRleCA9IDA7Ci0JbmV3aW5ldC0+bWNfbGlzdCA9IE5VTEw7Ci0KLQlpZiAoaXB2NF9jb25maWcubm9fcG10dV9kaXNjKQotCQluZXdpbmV0LT5wbXR1ZGlzYyA9IElQX1BNVFVESVNDX0RPTlQ7Ci0JZWxzZQotCQluZXdpbmV0LT5wbXR1ZGlzYyA9IElQX1BNVFVESVNDX1dBTlQ7Ci0KIAlza19yZWZjbnRfZGVidWdfaW5jKG5ld3NrKTsKIAogCWlmIChuZXdzay0+c2tfcHJvdC0+aW5pdChuZXdzaykpIHsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggNzM2MzkzNS4uN2QwOGY1MiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKKysrIGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTQ5LDEzICs0OSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCi0jaWZuZGVmIFRFU1RfRlJBTUUKLSNpbmNsdWRlIDxuZXQvdGNwLmg+Ci0jZW5kaWYgLyogVEVTVF9GUkFNRSAobm90IGRlZmluZWQpICovCi0KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gLyogZm9yIHNhX2ZhbWlseV90ICovCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIApAQCAtMzY3LDcgKzM2NCw2IEBACiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cCA9IHBhY2tldC0+dHJhbnNwb3J0OwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdHAtPmFzb2M7CiAJc3RydWN0IHNjdHBoZHIgKnNoOwotCV9fYmUzMiBjcmMzMiA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMCk7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLCAqdG1wOwogCXN0cnVjdCBzb2NrICpzazsKQEAgLTUzMSwxNyArNTI3LDE2IEBACiAJICogTm90ZTogQWRsZXItMzIgaXMgbm8gbG9uZ2VyIGFwcGxpY2FibGUsIGFzIGhhcyBiZWVuIHJlcGxhY2VkCiAJICogYnkgQ1JDMzItQyBhcyBkZXNjcmliZWQgaW4gPGRyYWZ0LWlldGYtdHN2d2ctc2N0cGNzdW0tMDIudHh0Pi4KIAkgKi8KLQlpZiAoIShkc3QtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pKSB7Ci0JCWNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBja3N1bV9idWZfbGVuKTsKLQkJY3JjMzIgPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CisJaWYgKCFzY3RwX2NoZWNrc3VtX2Rpc2FibGUgJiYgIShkc3QtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pKSB7CisJCV9fdTMyIGNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBja3N1bV9idWZfbGVuKTsKKworCQkvKiAzKSBQdXQgdGhlIHJlc3VsdGFudCB2YWx1ZSBpbnRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUKKwkJICogICAgY29tbW9uIGhlYWRlciwgYW5kIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBiaXRzIHVuY2hhbmdlZC4KKwkJICovCisJCXNoLT5jaGVja3N1bSA9IHNjdHBfZW5kX2Nrc3VtKGNyYzMyKTsKIAl9IGVsc2UKIAkJbnNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKLQkvKiAzKSBQdXQgdGhlIHJlc3VsdGFudCB2YWx1ZSBpbnRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUKLQkgKiAgICBjb21tb24gaGVhZGVyLCBhbmQgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgdW5jaGFuZ2VkLgotCSAqLwotCXNoLT5jaGVja3N1bSA9IGNyYzMyOwotCiAJLyogSVAgbGF5ZXIgRUNOIHN1cHBvcnQKIAkgKiBGcm9tIFJGQyAyNDgxCiAJICogICJUaGUgRUNOLUNhcGFibGUgVHJhbnNwb3J0IChFQ1QpIGJpdCB3b3VsZCBiZSBzZXQgYnkgdGhlCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCBiYzQxMWM4Li5kNzY1ZmM1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTQyOCw3ICs0MjgsOCBAQAogCQkJICogcmV0cmFuc21pdHRpbmcgZHVlIHRvIFQzIHRpbWVvdXQuCiAJCQkgKi8KIAkJCWlmIChyZWFzb24gPT0gU0NUUF9SVFhSX1QzX1JUWCAmJgotCQkJICAgIChqaWZmaWVzIC0gY2h1bmstPnNlbnRfYXQpIDwgdHJhbnNwb3J0LT5sYXN0X3J0bykKKwkJCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBjaHVuay0+c2VudF9hdCArCisJCQkJCQkgdHJhbnNwb3J0LT5sYXN0X3J0bykpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIFJGQyAyOTYwIDYuMi4xIFByb2Nlc3NpbmcgYSBSZWNlaXZlZCBTQUNLCkBAIC0xNzU3LDYgKzE3NTgsOSBAQAogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsY2h1bmssICp0ZW1wOwogCisJaWYgKCFhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQorCQlyZXR1cm47CisKIAkvKiBQUi1TQ1RQIEMxKSBMZXQgU2Fja0N1bUFjayBiZSB0aGUgQ3VtdWxhdGl2ZSBUU04gQUNLIGNhcnJpZWQgaW4gdGhlCiAJICogcmVjZWl2ZWQgU0FDSy4KIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggYzQ5ODZkMC4uY2IxOThhZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC01ODksNDYgKzU4OSwyMSBAQAogc3RhdGljIHN0cnVjdCBzb2NrICpzY3RwX3Y0X2NyZWF0ZV9hY2NlcHRfc2soc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2FsbG9jKHNvY2tfbmV0KHNrKSwgUEZfSU5FVCwgR0ZQX0tFUk5FTCwKIAkJCXNrLT5za19wcm90KTsKKwlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCiAJaWYgKCFuZXdzaykKIAkJZ290byBvdXQ7CiAKIAlzb2NrX2luaXRfZGF0YShOVUxMLCBuZXdzayk7CiAKLQluZXdzay0+c2tfdHlwZSA9IFNPQ0tfU1RSRUFNOwotCi0JbmV3c2stPnNrX25vX2NoZWNrID0gc2stPnNrX25vX2NoZWNrOwotCW5ld3NrLT5za19yZXVzZSA9IHNrLT5za19yZXVzZTsKLQluZXdzay0+c2tfc2h1dGRvd24gPSBzay0+c2tfc2h1dGRvd247Ci0KLQluZXdzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7Ci0JbmV3c2stPnNrX2ZhbWlseSA9IFBGX0lORVQ7Ci0JbmV3c2stPnNrX3Byb3RvY29sID0gSVBQUk9UT19TQ1RQOwotCW5ld3NrLT5za19iYWNrbG9nX3JjdiA9IHNrLT5za19wcm90LT5iYWNrbG9nX3JjdjsKKwlzY3RwX2NvcHlfc29jayhuZXdzaywgc2ssIGFzb2MpOwogCXNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpOwogCiAJbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOwogCi0JLyogSW5pdGlhbGl6ZSBzaydzIHNwb3J0LCBkcG9ydCwgcmN2X3NhZGRyIGFuZCBkYWRkciBmb3IKLQkgKiBnZXRzb2NrbmFtZSgpIGFuZCBnZXRwZWVybmFtZSgpCi0JICovCi0JbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKLQluZXdpbmV0LT5zYWRkciA9IGluZXQtPnNhZGRyOwotCW5ld2luZXQtPnJjdl9zYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKLQluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CiAJbmV3aW5ldC0+ZGFkZHIgPSBhc29jLT5wZWVyLnByaW1hcnlfYWRkci52NC5zaW5fYWRkci5zX2FkZHI7Ci0JbmV3aW5ldC0+cG10dWRpc2MgPSBpbmV0LT5wbXR1ZGlzYzsKLQluZXdpbmV0LT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKLQotCW5ld2luZXQtPnVjX3R0bCA9IC0xOwotCW5ld2luZXQtPm1jX2xvb3AgPSAxOwotCW5ld2luZXQtPm1jX3R0bCA9IDE7Ci0JbmV3aW5ldC0+bWNfaW5kZXggPSAwOwotCW5ld2luZXQtPm1jX2xpc3QgPSBOVUxMOwogCiAJc2tfcmVmY250X2RlYnVnX2luYyhuZXdzayk7CiAKQEAgLTE0MTMsNCArMTM4OCw2IEBACiBNT0RVTEVfQUxJQVMoIm5ldC1wZi0iIF9fc3RyaW5naWZ5KFBGX0lORVQ2KSAiLXByb3RvLTEzMiIpOwogTU9EVUxFX0FVVEhPUigiTGludXggS2VybmVsIFNDVFAgZGV2ZWxvcGVycyA8bGtzY3RwLWRldmVsb3BlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciB0aGUgU0NUUCBwcm90b2NvbCAoUkZDMjk2MCkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChub19jaGVja3N1bXMsIHNjdHBfY2hlY2tzdW1fZGlzYWJsZSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vX2NoZWNrc3VtcywgIkRpc2FibGUgY2hlY2tzdW1zIGNvbXB1dGluZyBhbmQgdmVyaWZpY2F0aW9uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggZmQ4YWNiNC4uNjg1MWVlOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMTAwLDExICsxMDAsMTEgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzY3RwX3BhcmFtaGRyIGVjYXBfcGFyYW0gPSB7CiAJU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRSwKLQlfX2NvbnN0YW50X2h0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpLAorCWNwdV90b19iZTE2KHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwcnNjdHBfcGFyYW0gPSB7CiAJU0NUUF9QQVJBTV9GV0RfVFNOX1NVUFBPUlQsCi0JX19jb25zdGFudF9odG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKKwljcHVfdG9fYmUxNihzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKIH07CiAKIC8qIEEgaGVscGVyIHRvIGluaXRpYWxpemUgdG8gaW5pdGlhbGl6ZSBhbiBvcCBlcnJvciBpbnNpZGUgYQpAQCAtMjI0LDcgKzIyNCw5IEBACiAJCW51bV9leHQgKz0gMjsKIAl9CiAKLQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOworCWlmIChzcC0+YWRhcHRhdGlvbl9pbmQpCisJCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CisKIAljaHVua3NpemUgKz0gdnBhcmFtX2xlbjsKIAogCS8qIEFjY291bnQgZm9yIEFVVEggcmVsYXRlZCBwYXJhbWV0ZXJzICovCkBAIC0zMDQsMTAgKzMwNiwxMiBAQAogCWlmIChzY3RwX3Byc2N0cF9lbmFibGUpCiAJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YocHJzY3RwX3BhcmFtKSwgJnByc2N0cF9wYXJhbSk7CiAKLQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKLQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOwotCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzcC0+YWRhcHRhdGlvbl9pbmQpOwotCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKSB7CisJCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOworCQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOworCQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKKwkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCX0KIAogCS8qIEFkZCBTQ1RQLUFVVEggY2h1bmtzIHRvIHRoZSBwYXJhbWV0ZXIgbGlzdCAqLwogCWlmIChzY3RwX2F1dGhfZW5hYmxlKSB7CkBAIC0zMzIsNiArMzM2LDcgQEAKIAlzY3RwX2luaXRoZHJfdCBpbml0YWNrOwogCXN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWw7CiAJdW5pb24gc2N0cF9wYXJhbXMgYWRkcnM7CisJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJaW50IGFkZHJzX2xlbjsKIAlzY3RwX2Nvb2tpZV9wYXJhbV90ICpjb29raWU7CiAJaW50IGNvb2tpZV9sZW47CkBAIC0zNjYsMjIgKzM3MSwyNCBAQAogCS8qIENhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGxvY2F0aW9uLCBpbmNsdWRlIHRoZSByZXNlcnZlZAogCSAqIHNwYWNlIGZvciByZXBvcnRpbmcgdW5rbm93biBwYXJhbWV0ZXJzIGlmIGl0IGlzIHNwZWNpZmllZC4KIAkgKi8KKwlzcCA9IHNjdHBfc2soYXNvYy0+YmFzZS5zayk7CiAJY2h1bmtzaXplID0gc2l6ZW9mKGluaXRhY2spICsgYWRkcnNfbGVuICsgY29va2llX2xlbiArIHVua3BhcmFtX2xlbjsKIAogCS8qIFRlbGwgcGVlciB0aGF0IHdlJ2xsIGRvIEVDTiBvbmx5IGlmIHBlZXIgYWR2ZXJ0aXNlZCBzdWNoIGNhcC4gICovCiAJaWYgKGFzb2MtPnBlZXIuZWNuX2NhcGFibGUpCiAJCWNodW5rc2l6ZSArPSBzaXplb2YoZWNhcF9wYXJhbSk7CiAKLQlpZiAoc2N0cF9wcnNjdHBfZW5hYmxlKQorCWlmIChhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQogCQljaHVua3NpemUgKz0gc2l6ZW9mKHByc2N0cF9wYXJhbSk7CiAKLQlpZiAoc2N0cF9hZGRpcF9lbmFibGUpIHsKKwlpZiAoYXNvYy0+cGVlci5hc2NvbmZfY2FwYWJsZSkgewogCQlleHRlbnNpb25zW251bV9leHRdID0gU0NUUF9DSURfQVNDT05GOwogCQlleHRlbnNpb25zW251bV9leHQrMV0gPSBTQ1RQX0NJRF9BU0NPTkZfQUNLOwogCQludW1fZXh0ICs9IDI7CiAJfQogCi0JY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKQorCQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOwogCiAJaWYgKGFzb2MtPnBlZXIuYXV0aF9jYXBhYmxlKSB7CiAJCWF1dGhfcmFuZG9tID0gKHNjdHBfcGFyYW1oZHJfdCAqKWFzb2MtPmMuYXV0aF9yYW5kb207CkBAIC00MzIsMTAgKzQzOSwxMiBAQAogCWlmIChhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKHByc2N0cF9wYXJhbSksICZwcnNjdHBfcGFyYW0pOwogCi0JYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7Ci0JYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKLQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc2N0cF9zayhhc29jLT5iYXNlLnNrKS0+YWRhcHRhdGlvbl9pbmQpOwotCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKSB7CisJCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOworCQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOworCQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKKwkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCX0KIAogCWlmIChhc29jLT5wZWVyLmF1dGhfY2FwYWJsZSkgewogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgbnRvaHMoYXV0aF9yYW5kb20tPmxlbmd0aCksCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggYjU0OTVhZS4uZTIwMjBlYiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtNDM0LDcgKzQzNCw4IEBACiAgKgogICovCiBzdGF0aWMgdm9pZCBzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCisJCQkJCSBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkJIGludCBpc19oYikKIHsKIAkvKiBUaGUgY2hlY2sgZm9yIGFzc29jaWF0aW9uJ3Mgb3ZlcmFsbCBlcnJvciBjb3VudGVyIGV4Y2VlZGluZyB0aGUKIAkgKiB0aHJlc2hvbGQgaXMgZG9uZSBpbiB0aGUgc3RhdGUgZnVuY3Rpb24uCkBAIC00NjEsOSArNDYyLDE1IEBACiAJICogZXhwaXJlcywgc2V0IFJUTyA8LSBSVE8gKiAyICgiYmFjayBvZmYgdGhlIHRpbWVyIikuICBUaGUKIAkgKiBtYXhpbXVtIHZhbHVlIGRpc2N1c3NlZCBpbiBydWxlIEM3IGFib3ZlIChSVE8ubWF4KSBtYXkgYmUKIAkgKiB1c2VkIHRvIHByb3ZpZGUgYW4gdXBwZXIgYm91bmQgdG8gdGhpcyBkb3VibGluZyBvcGVyYXRpb24uCisJICoKKwkgKiBTcGVjaWFsIENhc2U6ICB0aGUgZmlyc3QgSEIgZG9lc24ndCB0cmlnZ2VyIGV4cG9uZW50aWFsIGJhY2tvZmYuCisJICogVGhlIGZpcnN0IHVuYWNrbm93bGVnZWQgSEIgdHJpZ2dlcnMgaXQuICBXZSBkbyB0aGlzIHdpdGggYSBmbGFnCisJICogdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGFuIG91dHN0YW5kaW5nIEhCLgogCSAqLwotCXRyYW5zcG9ydC0+bGFzdF9ydG8gPSB0cmFuc3BvcnQtPnJ0bzsKLQl0cmFuc3BvcnQtPnJ0byA9IG1pbigodHJhbnNwb3J0LT5ydG8gKiAyKSwgdHJhbnNwb3J0LT5hc29jLT5ydG9fbWF4KTsKKwlpZiAoIWlzX2hiIHx8IHRyYW5zcG9ydC0+aGJfc2VudCkgeworCQl0cmFuc3BvcnQtPmxhc3RfcnRvID0gdHJhbnNwb3J0LT5ydG87CisJCXRyYW5zcG9ydC0+cnRvID0gbWluKCh0cmFuc3BvcnQtPnJ0byAqIDIpLCB0cmFuc3BvcnQtPmFzb2MtPnJ0b19tYXgpOworCX0KIH0KIAogLyogV29ya2VyIHJvdXRpbmUgdG8gaGFuZGxlIElOSVQgY29tbWFuZCBmYWlsdXJlLiAgKi8KQEAgLTYyMSw2ICs2MjgsMTEgQEAKIAl0LT5lcnJvcl9jb3VudCA9IDA7CiAJdC0+YXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7CiAKKwkvKiBDbGVhciB0aGUgaGJfc2VudCBmbGFnIHRvIHNpZ25hbCB0aGF0IHdlIGhhZCBhIGdvb2QKKwkgKiBhY2tub3dsZWRnZW1lbnQuCisJICovCisJdC0+aGJfc2VudCA9IDA7CisKIAkvKiBNYXJrIHRoZSBkZXN0aW5hdGlvbiB0cmFuc3BvcnQgYWRkcmVzcyBhcyBhY3RpdmUgaWYgaXQgaXMgbm90IHNvCiAJICogbWFya2VkLgogCSAqLwpAQCAtNjQ2LDE4ICs2NTgsNiBAQAogCQlzY3RwX3RyYW5zcG9ydF9ob2xkKHQpOwogfQogCi0vKiBIZWxwZXIgZnVuY3Rpb24gdG8gZG8gYSB0cmFuc3BvcnQgcmVzZXQgYXQgdGhlIGV4cGlyeSBvZiB0aGUgaGVhcmJlYXQKLSAqIHRpbWVyLgotICovCi1zdGF0aWMgdm9pZCBzY3RwX2NtZF90cmFuc3BvcnRfcmVzZXQoc2N0cF9jbWRfc2VxX3QgKmNtZHMsCi0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkgICAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCkKLXsKLQlzY3RwX3RyYW5zcG9ydF9sb3dlcl9jd25kKHQsIFNDVFBfTE9XRVJfQ1dORF9JTkFDVElWRSk7Ci0KLQkvKiBNYXJrIG9uZSBzdHJpa2UgYWdhaW5zdCBhIHRyYW5zcG9ydC4gICovCi0Jc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCB0KTsKLX0KIAogLyogSGVscGVyIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHByb2Nlc3MgU0FDSyBjb21tYW5kLiAgKi8KIHN0YXRpYyBpbnQgc2N0cF9jbWRfcHJvY2Vzc19zYWNrKHNjdHBfY21kX3NlcV90ICpjbWRzLApAQCAtMTQ1OCwxMiArMTQ1OCwxOSBAQAogCiAJCWNhc2UgU0NUUF9DTURfU1RSSUtFOgogCQkJLyogTWFyayBvbmUgc3RyaWtlIGFnYWluc3QgYSB0cmFuc3BvcnQuICAqLwotCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCBjbWQtPm9iai50cmFuc3BvcnQpOworCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCBjbWQtPm9iai50cmFuc3BvcnQsCisJCQkJCQkgICAgMCk7CiAJCQlicmVhazsKIAotCQljYXNlIFNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVDoKKwkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRToKIAkJCXQgPSBjbWQtPm9iai50cmFuc3BvcnQ7Ci0JCQlzY3RwX2NtZF90cmFuc3BvcnRfcmVzZXQoY29tbWFuZHMsIGFzb2MsIHQpOworCQkJc2N0cF90cmFuc3BvcnRfbG93ZXJfY3duZCh0LCBTQ1RQX0xPV0VSX0NXTkRfSU5BQ1RJVkUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVDoKKwkJCXQgPSBjbWQtPm9iai50cmFuc3BvcnQ7CisJCQlzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKGFzb2MsIHQsIDEpOworCQkJdC0+aGJfc2VudCA9IDE7CiAJCQlicmVhazsKIAogCQljYXNlIFNDVFBfQ01EX1RSQU5TUE9SVF9PTjoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggZjg4ZGZkZS4uNTVhNjFhYSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTk4OCw3ICs5ODgsOSBAQAogCQkvKiBTZXQgdHJhbnNwb3J0IGVycm9yIGNvdW50ZXIgYW5kIGFzc29jaWF0aW9uIGVycm9yIGNvdW50ZXIKIAkJICogd2hlbiBzZW5kaW5nIGhlYXJ0YmVhdC4KIAkJICovCi0JCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULAorCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9JRExFLAorCQkJCVNDVFBfVFJBTlNQT1JUKHRyYW5zcG9ydCkpOworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9IQl9TRU5ULAogCQkJCVNDVFBfVFJBTlNQT1JUKHRyYW5zcG9ydCkpOwogCX0KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0hCX1RJTUVSX1VQREFURSwKQEAgLTQ5NTUsNyArNDk1Nyw3IEBACiAJICogICAgdG8gdGhhdCBhZGRyZXNzIGFuZCBub3QgYWNrbm93bGVkZ2VkIHdpdGhpbiBvbmUgUlRPLgogCSAqCiAJICovCi0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQsCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwKIAkJCVNDVFBfVFJBTlNQT1JUKGFyZykpOwogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IGZmMGE4ZjguLjVmYjNhOGMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0zMDY5LDkgKzMwNjksNiBAQAogCWludCB2YWw7CiAJaW50IGFzc29jX2lkID0gMDsKIAotCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAob3B0bGVuID09IHNpemVvZihpbnQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgIlNDVFA6IFVzZSBvZiBpbnQgaW4gbWF4X2J1cnN0IHNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CkBAIC0zOTM5LDcgKzM5MzYsNiBAQAogewogCXN0cnVjdCBzb2NrICpzayA9IGFzb2MtPmJhc2Uuc2s7CiAJc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0c2s7CiAJc3RydWN0IHNjdHBfYWYgKmFmOwogCWludCBlcnIgPSAwOwogCkBAIC0zOTU0LDE4ICszOTUwLDE4IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBQb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXdzayBmcm9tIHRoZSBvbGRzayBhbmQgbWlncmF0ZSB0aGUKLQkgKiBhc29jIHRvIHRoZSBuZXdzay4KLQkgKi8KLQlzY3RwX3NvY2tfbWlncmF0ZShzaywgc29jay0+c2ssIGFzb2MsIFNDVFBfU09DS0VUX1VEUF9ISUdIX0JBTkRXSURUSCk7CisJc2N0cF9jb3B5X3NvY2soc29jay0+c2ssIHNrLCBhc29jKTsKIAogCS8qIE1ha2UgcGVlbGVkLW9mZiBzb2NrZXRzIG1vcmUgbGlrZSAxLTEgYWNjZXB0ZWQgc29ja2V0cy4KIAkgKiBTZXQgdGhlIGRhZGRyIGFuZCBpbml0aWFsaXplIGlkIHRvIHNvbWV0aGluZyBtb3JlIHJhbmRvbQogCSAqLwogCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMoYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIuc2Euc2FfZmFtaWx5KTsKIAlhZi0+dG9fc2tfZGFkZHIoJmFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLCBzayk7Ci0JaW5ldHNrID0gaW5ldF9zayhzb2NrLT5zayk7Ci0JaW5ldHNrLT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKKworCS8qIFBvcHVsYXRlIHRoZSBmaWVsZHMgb2YgdGhlIG5ld3NrIGZyb20gdGhlIG9sZHNrIGFuZCBtaWdyYXRlIHRoZQorCSAqIGFzb2MgdG8gdGhlIG5ld3NrLgorCSAqLworCXNjdHBfc29ja19taWdyYXRlKHNrLCBzb2NrLT5zaywgYXNvYywgU0NUUF9TT0NLRVRfVURQX0hJR0hfQkFORFdJRFRIKTsKIAogCSpzb2NrcCA9IHNvY2s7CiAKQEAgLTUyODQsMTYgKzUyODAsMTQgQEAKIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAotCWlmIChsZW4gPCBzaXplb2YoaW50KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAobGVuID09IHNpemVvZihpbnQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgIlNDVFA6IFVzZSBvZiBpbnQgaW4gbWF4X2J1cnN0IHNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgIlNDVFA6IFVzZSBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBpbnN0ZWFkXG4iKTsKIAkJcGFyYW1zLmFzc29jX2lkID0gMDsKLQl9IGVsc2UgaWYgKGxlbiA9PSBzaXplb2YgKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgeworCX0gZWxzZSBpZiAobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIHsKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0gZWxzZQpAQCAtNTg0OSwxMjcgKzU4NDMsMTMgQEAKIH0KIAogLyoKLSAqIDMuMS4zIGxpc3RlbigpIC0gVURQIFN0eWxlIFN5bnRheAotICoKLSAqICAgQnkgZGVmYXVsdCwgbmV3IGFzc29jaWF0aW9ucyBhcmUgbm90IGFjY2VwdGVkIGZvciBVRFAgc3R5bGUgc29ja2V0cy4KLSAqICAgQW4gYXBwbGljYXRpb24gdXNlcyBsaXN0ZW4oKSB0byBtYXJrIGEgc29ja2V0IGFzIGJlaW5nIGFibGUgdG8KLSAqICAgYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuCi0gKi8KLVNDVFBfU1RBVElDIGludCBzY3RwX3NlcXBhY2tldF9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgYmFja2xvZykKLXsKLQlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOwotCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNwLT5lcDsKLQotCS8qIE9ubHkgVURQIHN0eWxlIHNvY2tldHMgdGhhdCBhcmUgbm90IHBlZWxlZCBvZmYgYXJlIGFsbG93ZWQgdG8KLQkgKiBsaXN0ZW4oKS4KLQkgKi8KLQlpZiAoIXNjdHBfc3R5bGUoc2ssIFVEUCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogSWYgYmFja2xvZyBpcyB6ZXJvLCBkaXNhYmxlIGxpc3RlbmluZy4gKi8KLQlpZiAoIWJhY2tsb2cpIHsKLQkJaWYgKHNjdHBfc3N0YXRlKHNrLCBDTE9TRUQpKQotCQkJcmV0dXJuIDA7Ci0KLQkJc2N0cF91bmhhc2hfZW5kcG9pbnQoZXApOwotCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogUmV0dXJuIGlmIHdlIGFyZSBhbHJlYWR5IGxpc3RlbmluZy4gKi8KLQlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCi0JICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCi0JICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKLQkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgotCSAqCi0JICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKLQkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKLQkgKiBzb2NrZXRzLgotCSAqCi0JICogQWRkaXRpb25hbGx5LCB0dXJuIG9mZiBmYXN0cmV1c2UgZmxhZyBzaW5jZSB3ZSBhcmUgbm90IGxpc3RlbmluZwotCSAqLwotCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfTElTVEVOSU5HOwotCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKLQkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfSBlbHNlIHsKLQkJaWYgKHNjdHBfZ2V0X3BvcnQoc2ssIGluZXRfc2soc2spLT5udW0pKSB7Ci0JCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKLQkJCXJldHVybiAtRUFERFJJTlVTRTsKLQkJfQotCQlzY3RwX3NrKHNrKS0+YmluZF9oYXNoLT5mYXN0cmV1c2UgPSAwOwotCX0KLQotCXNjdHBfaGFzaF9lbmRwb2ludChlcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiA0LjEuMyBsaXN0ZW4oKSAtIFRDUCBTdHlsZSBTeW50YXgKLSAqCi0gKiAgIEFwcGxpY2F0aW9ucyB1c2VzIGxpc3RlbigpIHRvIHJlYWR5IHRoZSBTQ1RQIGVuZHBvaW50IGZvciBhY2NlcHRpbmcKLSAqICAgaW5ib3VuZCBhc3NvY2lhdGlvbnMuCi0gKi8KLVNDVFBfU1RBVElDIGludCBzY3RwX3N0cmVhbV9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgYmFja2xvZykKLXsKLQlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOwotCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNwLT5lcDsKLQotCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCi0JaWYgKCFiYWNrbG9nKSB7Ci0JCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKLQkJCXJldHVybiAwOwotCi0JCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKLQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzY3RwX3NzdGF0ZShzaywgTElTVEVOSU5HKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIElmIGEgYmluZCgpIG9yIHNjdHBfYmluZHgoKSBpcyBub3QgY2FsbGVkIHByaW9yIHRvIGEgbGlzdGVuKCkKLQkgKiBjYWxsIHRoYXQgYWxsb3dzIG5ldyBhc3NvY2lhdGlvbnMgdG8gYmUgYWNjZXB0ZWQsIHRoZSBzeXN0ZW0KLQkgKiBwaWNrcyBhbiBlcGhlbWVyYWwgcG9ydCBhbmQgd2lsbCBjaG9vc2UgYW4gYWRkcmVzcyBzZXQgZXF1aXZhbGVudAotCSAqIHRvIGJpbmRpbmcgd2l0aCBhIHdpbGRjYXJkIGFkZHJlc3MuCi0JICoKLQkgKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3BlbGxlZCBvdXQgaW4gdGhlIFNDVFAgc29ja2V0cwotCSAqIGV4dGVuc2lvbnMgZHJhZnQsIGJ1dCBmb2xsb3dzIHRoZSBwcmFjdGljZSBhcyBzZWVuIGluIFRDUAotCSAqIHNvY2tldHMuCi0JICovCi0Jc2stPnNrX3N0YXRlID0gU0NUUF9TU19MSVNURU5JTkc7Ci0JaWYgKCFlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgewotCQlpZiAoc2N0cF9hdXRvYmluZChzaykpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQl9IGVsc2UKLQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMDsKLQotCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOwotCXNjdHBfaGFzaF9lbmRwb2ludChlcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiAgTW92ZSBhIHNvY2tldCB0byBMSVNURU5JTkcgc3RhdGUuCiAgKi8KLWludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKQorU0NUUF9TVEFUSUMgaW50IHNjdHBfbGlzdGVuX3N0YXJ0KHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKKwlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7CiAJc3RydWN0IGNyeXB0b19oYXNoICp0Zm0gPSBOVUxMOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KGJhY2tsb2cgPCAwKSkKLQkJZ290byBvdXQ7Ci0KLQlzY3RwX2xvY2tfc29jayhzayk7Ci0KLQlpZiAoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQpCi0JCWdvdG8gb3V0OwogCiAJLyogQWxsb2NhdGUgSE1BQyBmb3IgZ2VuZXJhdGluZyBjb29raWUuICovCiAJaWYgKCFzY3RwX3NrKHNrKS0+aG1hYyAmJiBzY3RwX2htYWNfYWxnKSB7CkBAIC01OTgwLDM0ICs1ODYwLDk2IEBACiAJCQkJICAgICAgICJTQ1RQOiBmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsCiAJCQkJCXNjdHBfaG1hY19hbGcsIFBUUl9FUlIodGZtKSk7CiAJCQl9Ci0JCQllcnIgPSAtRU5PU1lTOwotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCQlzY3RwX3NrKHNrKS0+aG1hYyA9IHRmbTsKKwl9CisKKwkvKgorCSAqIElmIGEgYmluZCgpIG9yIHNjdHBfYmluZHgoKSBpcyBub3QgY2FsbGVkIHByaW9yIHRvIGEgbGlzdGVuKCkKKwkgKiBjYWxsIHRoYXQgYWxsb3dzIG5ldyBhc3NvY2lhdGlvbnMgdG8gYmUgYWNjZXB0ZWQsIHRoZSBzeXN0ZW0KKwkgKiBwaWNrcyBhbiBlcGhlbWVyYWwgcG9ydCBhbmQgd2lsbCBjaG9vc2UgYW4gYWRkcmVzcyBzZXQgZXF1aXZhbGVudAorCSAqIHRvIGJpbmRpbmcgd2l0aCBhIHdpbGRjYXJkIGFkZHJlc3MuCisJICoKKwkgKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3BlbGxlZCBvdXQgaW4gdGhlIFNDVFAgc29ja2V0cworCSAqIGV4dGVuc2lvbnMgZHJhZnQsIGJ1dCBmb2xsb3dzIHRoZSBwcmFjdGljZSBhcyBzZWVuIGluIFRDUAorCSAqIHNvY2tldHMuCisJICoKKwkgKi8KKwlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0xJU1RFTklORzsKKwlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KSB7CisJCWlmIChzY3RwX2F1dG9iaW5kKHNrKSkKKwkJCXJldHVybiAtRUFHQUlOOworCX0gZWxzZSB7CisJCWlmIChzY3RwX2dldF9wb3J0KHNrLCBpbmV0X3NrKHNrKS0+bnVtKSkgeworCQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7CisJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCX0KIAl9CiAKLQlzd2l0Y2ggKHNvY2stPnR5cGUpIHsKLQljYXNlIFNPQ0tfU0VRUEFDS0VUOgotCQllcnIgPSBzY3RwX3NlcXBhY2tldF9saXN0ZW4oc2ssIGJhY2tsb2cpOwotCQlicmVhazsKLQljYXNlIFNPQ0tfU1RSRUFNOgotCQllcnIgPSBzY3RwX3N0cmVhbV9saXN0ZW4oc2ssIGJhY2tsb2cpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKKwlzay0+c2tfbWF4X2Fja19iYWNrbG9nID0gYmFja2xvZzsKKwlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOworCXJldHVybiAwOworfQorCisvKgorICogNC4xLjMgLyA1LjEuMyBsaXN0ZW4oKQorICoKKyAqICAgQnkgZGVmYXVsdCwgbmV3IGFzc29jaWF0aW9ucyBhcmUgbm90IGFjY2VwdGVkIGZvciBVRFAgc3R5bGUgc29ja2V0cy4KKyAqICAgQW4gYXBwbGljYXRpb24gdXNlcyBsaXN0ZW4oKSB0byBtYXJrIGEgc29ja2V0IGFzIGJlaW5nIGFibGUgdG8KKyAqICAgYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuCisgKgorICogICBPbiBUQ1Agc3R5bGUgc29ja2V0cywgYXBwbGljYXRpb25zIHVzZSBsaXN0ZW4oKSB0byByZWFkeSB0aGUgU0NUUAorICogICBlbmRwb2ludCBmb3IgYWNjZXB0aW5nIGluYm91bmQgYXNzb2NpYXRpb25zLgorICoKKyAqICAgT24gYm90aCB0eXBlcyBvZiBlbmRwb2ludHMgYSBiYWNrbG9nIG9mICcwJyBkaXNhYmxlcyBsaXN0ZW5pbmcuCisgKgorICogIE1vdmUgYSBzb2NrZXQgdG8gTElTVEVOSU5HIHN0YXRlLgorICovCitpbnQgc2N0cF9pbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzY3RwX3NrKHNrKS0+ZXA7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoYmFja2xvZyA8IDApKQorCQlyZXR1cm4gZXJyOworCisJc2N0cF9sb2NrX3NvY2soc2spOworCisJLyogUGVlbGVkLW9mZiBzb2NrZXRzIGFyZSBub3QgYWxsb3dlZCB0byBsaXN0ZW4oKS4gICovCisJaWYgKHNjdHBfc3R5bGUoc2ssIFVEUF9ISUdIX0JBTkRXSURUSCkpCisJCWdvdG8gb3V0OworCisJaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQorCQlnb3RvIG91dDsKKworCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCisJaWYgKCFiYWNrbG9nKSB7CisJCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKKwkJCWdvdG8gb3V0OworCisJCWVyciA9IDA7CisJCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKKwkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7CisJCWlmIChzay0+c2tfcmV1c2UpCisJCQlzY3RwX3NrKHNrKS0+YmluZF9oYXNoLT5mYXN0cmV1c2UgPSAxOworCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZXJyKQotCQlnb3RvIGNsZWFudXA7CisJLyogSWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5nLCBqdXN0IHVwZGF0ZSB0aGUgYmFja2xvZyAqLworCWlmIChzY3RwX3NzdGF0ZShzaywgTElTVEVOSU5HKSkKKwkJc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2c7CisJZWxzZSB7CisJCWVyciA9IHNjdHBfbGlzdGVuX3N0YXJ0KHNrLCBiYWNrbG9nKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KIAotCS8qIFN0b3JlIGF3YXkgdGhlIHRyYW5zZm9ybSByZWZlcmVuY2UuICovCi0JaWYgKCFzY3RwX3NrKHNrKS0+aG1hYykKLQkJc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CisJZXJyID0gMDsKIG91dDoKIAlzY3RwX3JlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycjsKLWNsZWFudXA6Ci0JY3J5cHRvX2ZyZWVfaGFzaCh0Zm0pOwotCWdvdG8gb3V0OwogfQogCiAvKgpAQCAtNjcwMCw2ICs2NjQyLDQ4IEBACiAJc2N0cF9za2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiB9CiAKK3ZvaWQgc2N0cF9jb3B5X3NvY2soc3RydWN0IHNvY2sgKm5ld3NrLCBzdHJ1Y3Qgc29jayAqc2ssCisJCSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCisJbmV3c2stPnNrX3R5cGUgPSBzay0+c2tfdHlwZTsKKwluZXdzay0+c2tfYm91bmRfZGV2X2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKKwluZXdzay0+c2tfZmxhZ3MgPSBzay0+c2tfZmxhZ3M7CisJbmV3c2stPnNrX25vX2NoZWNrID0gc2stPnNrX25vX2NoZWNrOworCW5ld3NrLT5za19yZXVzZSA9IHNrLT5za19yZXVzZTsKKworCW5ld3NrLT5za19zaHV0ZG93biA9IHNrLT5za19zaHV0ZG93bjsKKwluZXdzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7CisJbmV3c2stPnNrX2ZhbWlseSA9IHNrLT5za19mYW1pbHk7CisJbmV3c2stPnNrX3Byb3RvY29sID0gSVBQUk9UT19TQ1RQOworCW5ld3NrLT5za19iYWNrbG9nX3JjdiA9IHNrLT5za19wcm90LT5iYWNrbG9nX3JjdjsKKwluZXdzay0+c2tfc25kYnVmID0gc2stPnNrX3NuZGJ1ZjsKKwluZXdzay0+c2tfcmN2YnVmID0gc2stPnNrX3JjdmJ1ZjsKKwluZXdzay0+c2tfbGluZ2VydGltZSA9IHNrLT5za19saW5nZXJ0aW1lOworCW5ld3NrLT5za19yY3Z0aW1lbyA9IHNrLT5za19yY3Z0aW1lbzsKKwluZXdzay0+c2tfc25kdGltZW8gPSBzay0+c2tfc25kdGltZW87CisKKwluZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CisKKwkvKiBJbml0aWFsaXplIHNrJ3Mgc3BvcnQsIGRwb3J0LCByY3Zfc2FkZHIgYW5kIGRhZGRyIGZvcgorCSAqIGdldHNvY2tuYW1lKCkgYW5kIGdldHBlZXJuYW1lKCkKKwkgKi8KKwluZXdpbmV0LT5zcG9ydCA9IGluZXQtPnNwb3J0OworCW5ld2luZXQtPnNhZGRyID0gaW5ldC0+c2FkZHI7CisJbmV3aW5ldC0+cmN2X3NhZGRyID0gaW5ldC0+cmN2X3NhZGRyOworCW5ld2luZXQtPmRwb3J0ID0gaHRvbnMoYXNvYy0+cGVlci5wb3J0KTsKKwluZXdpbmV0LT5wbXR1ZGlzYyA9IGluZXQtPnBtdHVkaXNjOworCW5ld2luZXQtPmlkID0gYXNvYy0+bmV4dF90c24gXiBqaWZmaWVzOworCisJbmV3aW5ldC0+dWNfdHRsID0gaW5ldC0+dWNfdHRsOworCW5ld2luZXQtPm1jX2xvb3AgPSAxOworCW5ld2luZXQtPm1jX3R0bCA9IDE7CisJbmV3aW5ldC0+bWNfaW5kZXggPSAwOworCW5ld2luZXQtPm1jX2xpc3QgPSBOVUxMOworfQorCiAvKiBQb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXdzayBmcm9tIHRoZSBvbGRzayBhbmQgbWlncmF0ZSB0aGUgYXNzb2MKICAqIGFuZCBpdHMgbWVzc2FnZXMgdG8gdGhlIG5ld3NrLgogICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC90cmFuc3BvcnQuYyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCmluZGV4IGU3NDVjMTEuLmU1ZGRlNDUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCkBAIC03OSw2ICs3OSw3IEBACiAJcGVlci0+cnR0dmFyID0gMDsKIAlwZWVyLT5zcnR0ID0gMDsKIAlwZWVyLT5ydG9fcGVuZGluZyA9IDA7CisJcGVlci0+aGJfc2VudCA9IDA7CiAJcGVlci0+ZmFzdF9yZWNvdmVyeSA9IDA7CiAKIAlwZWVyLT5sYXN0X3RpbWVfaGVhcmQgPSBqaWZmaWVzOwpAQCAtNTQyLDggKzU0Myw4IEBACiAJCSAqIGNvbmdlc3Rpb24gaW5kaWNhdGlvbnMgbW9yZSB0aGFuIG9uY2UgZXZlcnkgd2luZG93IG9mCiAJCSAqIGRhdGEgKG9yIG1vcmUgbG9vc2VseSBtb3JlIHRoYW4gb25jZSBldmVyeSByb3VuZC10cmlwIHRpbWUpLgogCQkgKi8KLQkJaWYgKChqaWZmaWVzIC0gdHJhbnNwb3J0LT5sYXN0X3RpbWVfZWNuZV9yZWR1Y2VkKSA+Ci0JCSAgICB0cmFuc3BvcnQtPnJ0dCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0cmFuc3BvcnQtPmxhc3RfdGltZV9lY25lX3JlZHVjZWQgKworCQkJCQl0cmFuc3BvcnQtPnJ0dCkpIHsKIAkJCXRyYW5zcG9ydC0+c3N0aHJlc2ggPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCiAJCQkJCQkgIDQqdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1KTsKIAkJCXRyYW5zcG9ydC0+Y3duZCA9IHRyYW5zcG9ydC0+c3N0aHJlc2g7CkBAIC01NjAsNyArNTYxLDggQEAKIAkJICogdG8gYmUgZG9uZSBldmVyeSBSVE8gaW50ZXJ2YWwsIHdlIGRvIGl0IGV2ZXJ5IGhlYXJiZWF0CiAJCSAqIGludGVydmFsLgogCQkgKi8KLQkJaWYgKChqaWZmaWVzIC0gdHJhbnNwb3J0LT5sYXN0X3RpbWVfdXNlZCkgPiB0cmFuc3BvcnQtPnJ0bykKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdHJhbnNwb3J0LT5sYXN0X3RpbWVfdXNlZCArCisJCQkJCXRyYW5zcG9ydC0+cnRvKSkKIAkJCXRyYW5zcG9ydC0+Y3duZCA9IG1heCh0cmFuc3BvcnQtPmN3bmQvMiwKIAkJCQkJCSA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCWJyZWFrOwpAQCAtNjA4LDYgKzYxMCw3IEBACiAJdC0+ZmxpZ2h0X3NpemUgPSAwOwogCXQtPmVycm9yX2NvdW50ID0gMDsKIAl0LT5ydG9fcGVuZGluZyA9IDA7CisJdC0+aGJfc2VudCA9IDA7CiAJdC0+ZmFzdF9yZWNvdmVyeSA9IDA7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgU0ZSLUNBQ0MgKi8KZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAzNWRkNzM3Li5hZjAyMDVmIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC01NDUsNiArNTQ1LDE4IEBACiAJc29jay0+ZmlsZSA9IE5VTEw7CiB9CiAKK2ludCBzb2NrX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKKwkJICAgICAgdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCkKK3sKKwlzaHR4LT5mbGFncyA9IDA7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpKQorCQlzaHR4LT5oYXJkd2FyZSA9IDE7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUpKQorCQlzaHR4LT5zb2Z0d2FyZSA9IDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNvY2tfdHhfdGltZXN0YW1wKTsKKwogc3RhdGljIGlubGluZSBpbnQgX19zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCSBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogewpAQCAtNTk1LDMzICs2MDcsNjUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IGt0aW1lMnRzKGt0aW1lX3Qga3QsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJaWYgKGt0LnR2NjQpIHsKKwkJKnRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3QpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKIC8qCiAgKiBjYWxsZWQgZnJvbSBzb2NrX3JlY3ZfdGltZXN0YW1wKCkgaWYgc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCkKICAqLwogdm9pZCBfX3NvY2tfcmVjdl90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssCiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlrdGltZV90IGt0ID0gc2tiLT50c3RhbXA7CisJaW50IG5lZWRfc29mdHdhcmVfdHN0YW1wID0gc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCk7CisJc3RydWN0IHRpbWVzcGVjIHRzWzNdOworCWludCBlbXB0eSA9IDE7CisJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpzaGh3dHN0YW1wcyA9CisJCXNrYl9od3RzdGFtcHMoc2tiKTsKIAotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKSkgewotCQlzdHJ1Y3QgdGltZXZhbCB0djsKLQkJLyogUmFjZSBvY2N1cnJlZCBiZXR3ZWVuIHRpbWVzdGFtcCBlbmFibGluZyBhbmQgcGFja2V0Ci0JCSAgIHJlY2VpdmluZy4gIEZpbGwgaW4gdGhlIGN1cnJlbnQgdGltZSBmb3Igbm93LiAqLwotCQlpZiAoa3QudHY2NCA9PSAwKQotCQkJa3QgPSBrdGltZV9nZXRfcmVhbCgpOwotCQlza2ItPnRzdGFtcCA9IGt0OwotCQl0diA9IGt0aW1lX3RvX3RpbWV2YWwoa3QpOwotCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVAsIHNpemVvZih0diksICZ0dik7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHRpbWVzcGVjIHRzOwotCQkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKLQkJICAgcmVjZWl2aW5nLiAgRmlsbCBpbiB0aGUgY3VycmVudCB0aW1lIGZvciBub3cuICovCi0JCWlmIChrdC50djY0ID09IDApCi0JCQlrdCA9IGt0aW1lX2dldF9yZWFsKCk7Ci0JCXNrYi0+dHN0YW1wID0ga3Q7Ci0JCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3QpOwotCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVBOUywgc2l6ZW9mKHRzKSwgJnRzKTsKKwkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKKwkgICByZWNlaXZpbmcuICBGaWxsIGluIHRoZSBjdXJyZW50IHRpbWUgZm9yIG5vdy4gKi8KKwlpZiAobmVlZF9zb2Z0d2FyZV90c3RhbXAgJiYgc2tiLT50c3RhbXAudHY2NCA9PSAwKQorCQlfX25ldF90aW1lc3RhbXAoc2tiKTsKKworCWlmIChuZWVkX3NvZnR3YXJlX3RzdGFtcCkgeworCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUykpIHsKKwkJCXN0cnVjdCB0aW1ldmFsIHR2OworCQkJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOworCQkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fVElNRVNUQU1QLAorCQkJCSBzaXplb2YodHYpLCAmdHYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHRpbWVzcGVjIHRzOworCQkJc2tiX2dldF90aW1lc3RhbXBucyhza2IsICZ0cyk7CisJCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVBOUywKKwkJCQkgc2l6ZW9mKHRzKSwgJnRzKTsKKwkJfQogCX0KKworCisJbWVtc2V0KHRzLCAwLCBzaXplb2YodHMpKTsKKwlpZiAoc2tiLT50c3RhbXAudHY2NCAmJgorCSAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkgeworCQlza2JfZ2V0X3RpbWVzdGFtcG5zKHNrYiwgdHMgKyAwKTsKKwkJZW1wdHkgPSAwOworCX0KKwlpZiAoc2hod3RzdGFtcHMpIHsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKSAmJgorCQkgICAga3RpbWUydHMoc2hod3RzdGFtcHMtPnN5c3RzdGFtcCwgdHMgKyAxKSkKKwkJCWVtcHR5ID0gMDsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSAmJgorCQkgICAga3RpbWUydHMoc2hod3RzdGFtcHMtPmh3dHN0YW1wLCB0cyArIDIpKQorCQkJZW1wdHkgPSAwOworCX0KKwlpZiAoIWVtcHR5KQorCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsCisJCQkgU0NNX1RJTUVTVEFNUElORywgc2l6ZW9mKHRzKSwgJnRzKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoX19zb2NrX3JlY3ZfdGltZXN0YW1wKTsKQEAgLTEwMzAsNiArMTA3NCwxMyBAQAogCiAJbG9ja19zb2NrKHNrKTsKIAorCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKKwlpZiAob24pCisJCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOworCWVsc2UKKwkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOworCiAJcHJldiA9ICYoc29jay0+ZmFzeW5jX2xpc3QpOwogCiAJZm9yIChmYSA9ICpwcmV2OyBmYSAhPSBOVUxMOyBwcmV2ID0gJmZhLT5mYV9uZXh0LCBmYSA9ICpwcmV2KQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDI5YzcxZTYuLjU2ODMzMGUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTEyMjUsNiArMTIyNSwyMyBAQAogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIHhzX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKworCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCisJCXJldHVybjsKKwljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpKQorCQlyZXR1cm47CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKKwkJcmV0dXJuOworCisJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKK30KKwogLyoqCiAgKiB4c191ZHBfd3JpdGVfc3BhY2UgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gc29ja2V0IGJ1ZmZlciBzcGFjZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY29tZXMgYXZhaWxhYmxlCkBAIC0xMjQwLDIzICsxMjU3LDkgQEAKIAlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAogCS8qIGZyb20gbmV0L2NvcmUvc29jay5jOnNvY2tfZGVmX3dyaXRlX3NwYWNlICovCi0JaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkgewotCQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCQlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisJaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkKKwkJeHNfd3JpdGVfc3BhY2Uoc2spOwogCi0JCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCi0JCQlnb3RvIG91dDsKLQkJY2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkpCi0JCQlnb3RvIG91dDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKLQkJCWdvdG8gb3V0OwotCi0JCXhwcnRfd3JpdGVfc3BhY2UoeHBydCk7Ci0JfQotCi0gb3V0OgogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKQEAgLTEyNzUsMjMgKzEyNzgsOSBAQAogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCiAJLyogZnJvbSBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UgKi8KLQlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKSB7Ci0JCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKwlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKQorCQl4c193cml0ZV9zcGFjZShzayk7CiAKLQkJaWYgKHVubGlrZWx5KCEoc29jayA9IHNrLT5za19zb2NrZXQpKSkKLQkJCWdvdG8gb3V0OwotCQljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOwotCi0JCWlmICh1bmxpa2VseSghKHhwcnQgPSB4cHJ0X2Zyb21fc29jayhzaykpKSkKLQkJCWdvdG8gb3V0OwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSA9PSAwKQotCQkJZ290byBvdXQ7Ci0KLQkJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKLQl9Ci0KLSBvdXQ6CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmMKaW5kZXggOTcyMjAxYy4uMGIxNWQ3MiAxMDA2NDQKLS0tIGEvbmV0L3N5c2N0bF9uZXQuYworKysgYi9uZXQvc3lzY3RsX25ldC5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IG5ldF9jdGxfcm9faGVhZGVyX3Blcm1zKHN0cnVjdCBjdGxfdGFibGVfcm9vdCAqcm9vdCwKIAkJc3RydWN0IG5zcHJveHkgKm5hbWVzcGFjZXMsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQogewotCWlmIChuYW1lc3BhY2VzLT5uZXRfbnMgPT0gJmluaXRfbmV0KQorCWlmIChuZXRfZXEobmFtZXNwYWNlcy0+bmV0X25zLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gdGFibGUtPm1vZGU7CiAJZWxzZQogCQlyZXR1cm4gdGFibGUtPm1vZGUgJiB+MDIyMjsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmMgYi9uZXQvdGlwYy9iY2FzdC5jCmluZGV4IDNkZGFmZjQuLmEzYmZkNDAgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JjYXN0LmMKKysrIGIvbmV0L3RpcGMvYmNhc3QuYwpAQCAtMTE5LDcgKzExOSw3IEBACiBzdGF0aWMgc3RydWN0IGxpbmsgKmJjbCA9IE5VTEw7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJjX2xvY2spOwogCi1jaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7Citjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7CiAKIAogc3RhdGljIHUzMiBidWZfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKmJ1ZikKQEAgLTgwMCw3ICs4MDAsNyBAQAogCXRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKGJjbCwgQkNMSU5LX1dJTl9ERUZBVUxUKTsKIAliY2wtPmJfcHRyID0gJmJjYmVhcmVyLT5iZWFyZXI7CiAJYmNsLT5zdGF0ZSA9IFdPUktJTkdfV09SS0lORzsKLQlzcHJpbnRmKGJjbC0+bmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShiY2wtPm5hbWUsIHRpcGNfYmNsaW5rX25hbWUsIFRJUENfTUFYX0xJTktfTkFNRSk7CiAKIAlpZiAoQkNMSU5LX0xPR19CVUZfU0laRSkgewogCQljaGFyICpwYiA9IGttYWxsb2MoQkNMSU5LX0xPR19CVUZfU0laRSwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5oIGIvbmV0L3RpcGMvYmNhc3QuaAppbmRleCAyZjJkNzMxLi40YzE3NzFlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5oCisrKyBiL25ldC90aXBjL2JjYXN0LmgKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RydWN0IHRpcGNfbm9kZTsKIAotZXh0ZXJuIGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGJnLmMgYi9uZXQvdGlwYy9kYmcuYwppbmRleCAyOWVjYWU4Li4xODg1YTdlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9kYmcuYworKysgYi9uZXQvdGlwYy9kYmcuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJfQogCiAJaWYgKHBiLT5lY2hvKQotCQlwcmludGsocHJpbnRfc3RyaW5nKTsKKwkJcHJpbnRrKCIlcyIsIHByaW50X3N0cmluZyk7CiAKIAlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggMjBkOThjNS4uMmMyNGU3ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCisrKyBiL25ldC90aXBjL25vZGUuYwpAQCAtNzAzLDcgKzcwMyw3IEBACiAKIAlsaW5rX2luZm8uZGVzdCA9IGh0b25sKHRpcGNfb3duX2FkZHIgJiAweGZmZmZmMDApOwogCWxpbmtfaW5mby51cCA9IGh0b25sKDEpOwotCXNwcmludGYobGlua19pbmZvLnN0ciwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShsaW5rX2luZm8uc3RyLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9MSU5LX0lORk8sICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKIAogCS8qIEFkZCBUTFZzIGZvciBhbnkgb3RoZXIgbGlua3MgaW4gc2NvcGUgKi8KZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBkMWI4OTgyLi5iYWFjOTEwIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMTc4LDggKzExNzgsNyBAQAogCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAKIG91dDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAlpZiAobmV3c2spCiAJCXVuaXhfcmVsZWFzZV9zb2NrKG5ld3NrLCAwKTsKIAlpZiAob3RoZXIpCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCmluZGV4IDM5NzAxZGUuLjQ2NmUyZDIgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCkBAIC04Niw4ICs4NiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHdhbl9kZXZpY2UgKndhbnJvdXRlcl9maW5kX2RldmljZShjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgd2Fucm91dGVyX2RlbGV0ZV9pbnRlcmZhY2Uoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgY2hhciAqbmFtZSk7Ci1zdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKK3N0YXRpYyB2b2lkIGxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fYWNxdWlyZXMobG9jayk7CitzdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fcmVsZWFzZXMobG9jayk7CiAKIAogCkBAIC03NjMsMTIgKzc2NSwxNCBAQAogfQogCiBzdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX2FjcXVpcmVzKGxvY2spCiB7CiAJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgKnNtcF9mbGFncyk7CiB9CiAKIAogc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX3JlbGVhc2VzKGxvY2spCiB7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCAqc21wX2ZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKaW5kZXggMjY3ZjdmZi4uYzQ0ZDk2YiAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKQEAgLTgwLDYgKzgwLDcgQEAKICAqCUl0ZXJhdG9yCiAgKi8KIHN0YXRpYyB2b2lkICpyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2OwogCWxvZmZfdCBsID0gKnBvczsKQEAgLTEwMSw2ICsxMDIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoa2VybmVsX2xvY2spCiB7CiAJdW5sb2NrX2tlcm5lbCgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L29wLW1zZy5jIGIvbmV0L3dpbWF4L29wLW1zZy5jCmluZGV4IGNiM2I0YWQuLjVkMTQ5YzEgMTAwNjQ0Ci0tLSBhL25ldC93aW1heC9vcC1tc2cuYworKysgYi9uZXQvd2ltYXgvb3AtbXNnLmMKQEAgLTI1OCw3ICsyNTgsNiBAQAogICovCiBpbnQgd2ltYXhfbXNnX3NlbmQoc3RydWN0IHdpbWF4X2RldiAqd2ltYXhfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCByZXN1bHQ7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2ltYXhfZGV2LT5uZXRfZGV2LT5kZXYucGFyZW50OwogCXZvaWQgKm1zZyA9IHNrYi0+ZGF0YTsKIAlzaXplX3Qgc2l6ZSA9IHNrYi0+bGVuOwpAQCAtMjY2LDExICsyNjUsOSBAQAogCiAJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiB3aW1heCBtc2csICV6dSBieXRlc1xuIiwgc2l6ZSk7CiAJZF9kdW1wKDIsIGRldiwgbXNnLCBzaXplKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHdpbWF4X2dubF9tY2cuaWQsIEdGUF9LRVJORUwpOwotCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogZ2VubCBtdWx0aWNhc3QgcmVzdWx0ICVkXG4iLCByZXN1bHQpOwotCWlmIChyZXN1bHQgPT0gLUVTUkNIKQkvKiBOb2JvZHkgY29ubmVjdGVkLCBpZ25vcmUgaXQgKi8KLQkJcmVzdWx0ID0gMDsJLyogYnR3LCB0aGUgc2tiIGlzIGZyZWVkIGFscmVhZHkgKi8KLQlyZXR1cm4gcmVzdWx0OworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7CisJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiBnZW5sIG11bHRpY2FzdCBkb25lXG4iKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdpbWF4X21zZ19zZW5kKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L3N0YWNrLmMgYi9uZXQvd2ltYXgvc3RhY2suYwppbmRleCAzODY5YzAzLi5hMGVlNzZiIDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvc3RhY2suYworKysgYi9uZXQvd2ltYXgvc3RhY2suYwpAQCAtMTYzLDE2ICsxNjMsMTIgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aW1heF9kZXZfdG9fZGV2KHdpbWF4X2Rldik7CiAJZF9mbnN0YXJ0KDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcClcbiIsCiAJCSAgd2ltYXhfZGV2LCByZXBvcnRfc2tiKTsKLQlpZiAocmVwb3J0X3NrYiA9PSBOVUxMKQorCWlmIChyZXBvcnRfc2tiID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7Ci0JZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzdWx0ID09IC1FU1JDSCkJLyogTm9ib2R5IGNvbm5lY3RlZCwgaWdub3JlIGl0ICovCi0JCXJlc3VsdCA9IDA7CS8qIGJ0dywgdGhlIHNrYiBpcyBmcmVlZCBhbHJlYWR5ICovCi0JaWYgKHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJSRV9TVENIOiBFcnJvciBzZW5kaW5nOiAlZFxuIiwgcmVzdWx0KTsKLQkJbmxtc2dfZnJlZShyZXBvcnRfc2tiKTsKIAl9CisJZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKKwlnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKIG91dDoKIAlkX2ZuZW5kKDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcCkgPSAlZFxuIiwKIAkJd2ltYXhfZGV2LCByZXBvcnRfc2tiLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL01ha2VmaWxlIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IDkzOGEzMzQuLmRhZDQzYzIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiBvYmotJChDT05GSUdfTElCODAyMTFfQ1JZUFRfQ0NNUCkgKz0gbGliODAyMTFfY3J5cHRfY2NtcC5vCiBvYmotJChDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUCkgKz0gbGliODAyMTFfY3J5cHRfdGtpcC5vCiAKLWNmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8KK2NmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vCiBjZmc4MDIxMS0kKENPTkZJR19XSVJFTEVTU19FWFQpICs9IHdleHQtY29tcGF0Lm8KIGNmZzgwMjExLSQoQ09ORklHX05MODAyMTEpICs9IG5sODAyMTEubwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBiOTZmYzBjLi4xN2ZlMzkwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgpAQCAtMzEsMTggKzMwLDI5IEBACiAgKiBvbmx5IHJlYWQgdGhlIGxpc3QsIGFuZCB0aGF0IGNhbiBoYXBwZW4gcXVpdGUKICAqIG9mdGVuIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBpdCBmb3IgZWFjaCBjb21tYW5kICovCiBMSVNUX0hFQUQoY2ZnODAyMTFfZHJ2X2xpc3QpOwotREVGSU5FX01VVEVYKGNmZzgwMjExX2Rydl9tdXRleCk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgY2ZnODAyMTFfZHJ2X2xpc3QsIGNmZzgwMjExX3JlZ2RvbWFpbiwKKyAqIGNvdW50cnlfaWVfcmVnZG9tYWluLCB0aGUgcmVnX2JlYWNvbl9saXN0IGFuZCB0aGUgdGhlIGxhc3QgcmVndWxhdG9yeQorICogcmVxdWVzdCByZWNlaXB0IChsYXN0X3JlcXVlc3QpLgorICovCitERUZJTkVfTVVURVgoY2ZnODAyMTFfbXV0ZXgpOwogCiAvKiBmb3IgZGVidWdmcyAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmllZWU4MDIxMV9kZWJ1Z2ZzX2RpcjsKIAotLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCi1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHkoaW50IHdpcGh5KQorLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKmRydjsKIAorCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRydi0+aWR4ID09IHdpcGh5KSB7CisJCWlmIChkcnYtPndpcGh5X2lkeCA9PSB3aXBoeV9pZHgpIHsKIAkJCXJlc3VsdCA9IGRydjsKIAkJCWJyZWFrOwogCQl9CkBAIC01MSwxNyArNjEsNDQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCWlmICghd2lwaHkpCisJCXJldHVybiBXSVBIWV9JRFhfU1RBTEU7CisJZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlyZXR1cm4gZHJ2LT53aXBoeV9pZHg7Cit9CisKIC8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLworc3RydWN0IHdpcGh5ICp3aXBoeV9pZHhfdG9fd2lwaHkoaW50IHdpcGh5X2lkeCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKworCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWRydiA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KTsKKwlpZiAoIWRydikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZkcnYtPndpcGh5OworfQorCisvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkISAqLwogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlpbnQgaWZpbmRleDsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmJ5d2lwaHkgPSBOVUxMLCAqYnlpZmlkeCA9IE5VTEw7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpieXdpcGh5aWR4ID0gTlVMTCwgKmJ5aWZpZHggPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV0pIHsKLQkJYnl3aXBoeSA9IGNmZzgwMjExX2Rydl9ieV93aXBoeSgKKwkJYnl3aXBoeWlkeCA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoCiAJCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZXSkpOwogCQllcnIgPSAtRU5PREVWOwogCX0KQEAgLTc4LDE0ICsxMTUsMTQgQEAKIAkJZXJyID0gLUVOT0RFVjsKIAl9CiAKLQlpZiAoYnl3aXBoeSAmJiBieWlmaWR4KSB7Ci0JCWlmIChieXdpcGh5ICE9IGJ5aWZpZHgpCisJaWYgKGJ5d2lwaHlpZHggJiYgYnlpZmlkeCkgeworCQlpZiAoYnl3aXBoeWlkeCAhPSBieWlmaWR4KQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJCWVsc2UKLQkJCXJldHVybiBieXdpcGh5OyAvKiA9PSBieWlmaWR4ICovCisJCQlyZXR1cm4gYnl3aXBoeWlkeDsgLyogPT0gYnlpZmlkeCAqLwogCX0KLQlpZiAoYnl3aXBoeSkKLQkJcmV0dXJuIGJ5d2lwaHk7CisJaWYgKGJ5d2lwaHlpZHgpCisJCXJldHVybiBieXdpcGh5aWR4OwogCiAJaWYgKGJ5aWZpZHgpCiAJCXJldHVybiBieWlmaWR4OwpAQCAtOTgsNyArMTM1LDcgQEAKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWRydiA9IF9fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhpbmZvKTsKIAogCS8qIGlmIGl0IGlzIG5vdCBhbiBlcnJvciB3ZSBncmFiIHRoZSBsb2NrIG9uCkBAIC0xMDcsNyArMTQ0LDcgQEAKIAlpZiAoIUlTX0VSUihkcnYpKQogCQltdXRleF9sb2NrKCZkcnYtPm10eCk7CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlyZXR1cm4gZHJ2OwogfQpAQCAtMTE4LDcgKzE1NSw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0OwpAQCAtMTI5LDcgKzE2Niw3IEBACiAJCWRydiA9IEVSUl9QVFIoLUVOT0RFVik7CiAJZGV2X3B1dChkZXYpOwogIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIGRydjsKIH0KIApAQCAtMTQzLDE2ICsxODAsMTYgQEAKIAkJCWNoYXIgKm5ld25hbWUpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JaW50IGlkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CisJaW50IHdpcGh5X2lkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIHByb2hpYml0IGNhbGxpbmcgdGhlIHRoaW5nIHBoeSVkIHdoZW4gJWQgaXMgbm90IGl0cyBudW1iZXIgKi8KLQlzc2NhbmYobmV3bmFtZSwgUEhZX05BTUUgIiVkJW4iLCAmaWR4LCAmdGFrZW4pOwotCWlmICh0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgJiYgaWR4ICE9IHJkZXYtPmlkeCkgewotCQkvKiBjb3VudCBudW1iZXIgb2YgcGxhY2VzIG5lZWRlZCB0byBwcmludCBpZHggKi8KKwlzc2NhbmYobmV3bmFtZSwgUEhZX05BTUUgIiVkJW4iLCAmd2lwaHlfaWR4LCAmdGFrZW4pOworCWlmICh0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgJiYgd2lwaHlfaWR4ICE9IHJkZXYtPndpcGh5X2lkeCkgeworCQkvKiBjb3VudCBudW1iZXIgb2YgcGxhY2VzIG5lZWRlZCB0byBwcmludCB3aXBoeV9pZHggKi8KIAkJZGlnaXRzID0gMTsKLQkJd2hpbGUgKGlkeCAvPSAxMCkKKwkJd2hpbGUgKHdpcGh5X2lkeCAvPSAxMCkKIAkJCWRpZ2l0cysrOwogCQkvKgogCQkgKiBkZW55IHRoZSBuYW1lIGlmIGl0IGlzIHBoeTxpZHg+IHdoZXJlIDxpZHg+IGlzIHByaW50ZWQKQEAgLTE5Myw3ICsyMzAsNyBAQAogCiAJcmVzdWx0ID0gMDsKIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWlmIChyZXN1bHQgPT0gMCkKIAkJbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShyZGV2KTsKIApAQCAtMjIwLDI2ICsyNTcsMjggQEAKIAogCWRydi0+b3BzID0gb3BzOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKLQlkcnYtPmlkeCA9IHdpcGh5X2NvdW50ZXIrKzsKKwlkcnYtPndpcGh5X2lkeCA9IHdpcGh5X2NvdW50ZXIrKzsKIAotCWlmICh1bmxpa2VseShkcnYtPmlkeCA8IDApKSB7CisJaWYgKHVubGlrZWx5KCF3aXBoeV9pZHhfdmFsaWQoZHJ2LT53aXBoeV9pZHgpKSkgewogCQl3aXBoeV9jb3VudGVyLS07Ci0JCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJCS8qIHVnaCwgd3JhcHBlZCEgKi8KIAkJa2ZyZWUoZHJ2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogZ2l2ZSBpdCBhIHByb3BlciBuYW1lICovCi0JZGV2X3NldF9uYW1lKCZkcnYtPndpcGh5LmRldiwgUEhZX05BTUUgIiVkIiwgZHJ2LT5pZHgpOworCWRldl9zZXRfbmFtZSgmZHJ2LT53aXBoeS5kZXYsIFBIWV9OQU1FICIlZCIsIGRydi0+d2lwaHlfaWR4KTsKIAogCW11dGV4X2luaXQoJmRydi0+bXR4KTsKIAltdXRleF9pbml0KCZkcnYtPmRldmxpc3RfbXR4KTsKIAlJTklUX0xJU1RfSEVBRCgmZHJ2LT5uZXRkZXZfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmRydi0+YnNzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkcnYtPmJzc19saXN0KTsKIAogCWRldmljZV9pbml0aWFsaXplKCZkcnYtPndpcGh5LmRldik7CiAJZHJ2LT53aXBoeS5kZXYuY2xhc3MgPSAmaWVlZTgwMjExX2NsYXNzOwpAQCAtMjU5LDYgKzI5OCw5IEBACiAJaW50IGk7CiAJdTE2IGlmbW9kZXMgPSB3aXBoeS0+aW50ZXJmYWNlX21vZGVzOwogCisJaWYgKFdBUk5fT04od2lwaHktPm1heF9zY2FuX3NzaWRzIDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogc2FuaXR5IGNoZWNrIGlmbW9kZXMgKi8KIAlXQVJOX09OKCFpZm1vZGVzKTsKIAlpZm1vZGVzICY9ICgoMSA8PCBfX05MODAyMTFfSUZUWVBFX0FGVEVSX0xBU1QpIC0gMSkgJiB+MTsKQEAgLTI3MywxMCArMzE1LDE2IEBACiAKIAkJc2JhbmQtPmJhbmQgPSBiYW5kOwogCi0JCWlmICghc2JhbmQtPm5fY2hhbm5lbHMgfHwgIXNiYW5kLT5uX2JpdHJhdGVzKSB7Ci0JCQlXQVJOX09OKDEpOworCQlpZiAoV0FSTl9PTighc2JhbmQtPm5fY2hhbm5lbHMgfHwgIXNiYW5kLT5uX2JpdHJhdGVzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CisKKwkJLyoKKwkJICogU2luY2Ugd2UgdXNlIGEgdTMyIGZvciByYXRlIGJpdG1hcHMgaW4KKwkJICogaWVlZTgwMjExX2dldF9yZXNwb25zZV9yYXRlLCB3ZSBjYW5ub3QKKwkJICogaGF2ZSBtb3JlIHRoYW4gMzIgbGVnYWN5IHJhdGVzLgorCQkgKi8KKwkJaWYgKFdBUk5fT04oc2JhbmQtPm5fYml0cmF0ZXMgPiAzMikpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewogCQkJc2JhbmQtPmNoYW5uZWxzW2ldLm9yaWdfZmxhZ3MgPQpAQCAtMjk5LDEwICszNDcsMTAgQEAKIAkvKiBjaGVjayBhbmQgc2V0IHVwIGJpdHJhdGVzICovCiAJaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHdpcGh5KTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHJlZ3VsYXRvcnkgaW5mbyAqLwotCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBSRUdET01fU0VUX0JZX0NPUkUpOworCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSk7CiAKIAlyZXMgPSBkZXZpY2VfYWRkKCZkcnYtPndpcGh5LmRldik7CiAJaWYgKHJlcykKQEAgLTMxNyw5ICszNjUsMjAgQEAKIAlpZiAoSVNfRVJSKGRydi0+d2lwaHkuZGVidWdmc2RpcikpCiAJCWRydi0+d2lwaHkuZGVidWdmc2RpciA9IE5VTEw7CiAKKwlpZiAod2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KSB7CisJCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgcmVxdWVzdDsKKworCQlyZXF1ZXN0LndpcGh5X2lkeCA9IGdldF93aXBoeV9pZHgod2lwaHkpOworCQlyZXF1ZXN0LmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisJCXJlcXVlc3QuYWxwaGEyWzBdID0gJzknOworCQlyZXF1ZXN0LmFscGhhMlsxXSA9ICc5JzsKKworCQlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudCgmcmVxdWVzdCk7CisJfQorCiAJcmVzID0gMDsKIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiByZXM7CiB9CiBFWFBPUlRfU1lNQk9MKHdpcGh5X3JlZ2lzdGVyKTsKQEAgLTMyOSw3ICszODgsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAogCS8qIHByb3RlY3QgdGhlIGRldmljZSBsaXN0ICovCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRydi0+bmV0ZGV2X2xpc3QpKTsKIApAQCAtMzU1LDE0ICs0MTQsMTcgQEAKIAlkZXZpY2VfZGVsKCZkcnYtPndpcGh5LmRldik7CiAJZGVidWdmc19yZW1vdmUoZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyKTsKIAotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfdW5yZWdpc3Rlcik7CiAKIHZvaWQgY2ZnODAyMTFfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpCiB7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqc2NhbiwgKnRtcDsKIAltdXRleF9kZXN0cm95KCZkcnYtPm10eCk7CiAJbXV0ZXhfZGVzdHJveSgmZHJ2LT5kZXZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYW4sIHRtcCwgJmRydi0+YnNzX2xpc3QsIGxpc3QpCisJCWNmZzgwMjExX3B1dF9ic3MoJnNjYW4tPnB1Yik7CiAJa2ZyZWUoZHJ2KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggZjdmYjlmNC4uNmFjZDQ4MyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAorKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC04LDYgKzgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KQEAgLTM1LDEyICszOCwyMCBAQAogCWVudW0gZW52aXJvbm1lbnRfY2FwIGVudjsKIAogCS8qIHdpcGh5IGluZGV4LCBpbnRlcm5hbCBvbmx5ICovCi0JaW50IGlkeDsKKwlpbnQgd2lwaHlfaWR4OwogCiAJLyogYXNzb2NpYXRlIG5ldGRldiBsaXN0ICovCiAJc3RydWN0IG11dGV4IGRldmxpc3RfbXR4OwogCXN0cnVjdCBsaXN0X2hlYWQgbmV0ZGV2X2xpc3Q7CiAKKwkvKiBCU1Nlcy9zY2FubmluZyAqLworCXNwaW5sb2NrX3QgYnNzX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKKwlzdHJ1Y3QgcmJfcm9vdCBic3NfdHJlZTsKKwl1MzIgYnNzX2dlbmVyYXRpb247CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXE7IC8qIHByb3RlY3RlZCBieSBSVE5MICovCisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX2F0OworCiAJLyogbXVzdCBiZSBsYXN0IGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyB3aXBoeV9wcml2KCksCiAJICogYW5kIGl0IHNob3VsZCBhdCBsZWFzdCBiZSBhbGlnbmVkIHRvIE5FVERFVl9BTElHTiAqLwogCXN0cnVjdCB3aXBoeSB3aXBoeSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhORVRERVZfQUxJR04pKSk7CkBAIC01Myw5ICs2NCwzOSBAQAogCXJldHVybiBjb250YWluZXJfb2Yod2lwaHksIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwgd2lwaHkpOwogfQogCi1leHRlcm4gc3RydWN0IG11dGV4IGNmZzgwMjExX2Rydl9tdXRleDsKKy8qIE5vdGUgMCBpcyB2YWxpZCwgaGVuY2UgcGh5MCAqLworc3RhdGljIGlubGluZQorYm9vbCB3aXBoeV9pZHhfdmFsaWQoaW50IHdpcGh5X2lkeCkKK3sKKwlyZXR1cm4gKHdpcGh5X2lkeCA+PSAwKTsKK30KKworZXh0ZXJuIHN0cnVjdCBtdXRleCBjZmc4MDIxMV9tdXRleDsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNmZzgwMjExX2Rydl9saXN0OwogCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2NmZzgwMjExX2xvY2sodm9pZCkKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmNmZzgwMjExX211dGV4KSk7Cit9CisKKy8qCisgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIG1hcmsgYSB3aXBoeV9pZHggYXMgbm90IGhhdmluZyBhbiBhc3NvY2lhdGVkIHdpcGh5LgorICogSXQgZ3VhcmFudGVlcyBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCkgd2lsbCByZXR1cm4gTlVMTAorICovCisjZGVmaW5lIFdJUEhZX0lEWF9TVEFMRSAtMQorCitzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHJiX25vZGUgcmJuOworCXVuc2lnbmVkIGxvbmcgdHM7CisJc3RydWN0IGtyZWYgcmVmOworCS8qIG11c3QgYmUgbGFzdCBiZWNhdXNlIG9mIHByaXYgbWVtYmVyICovCisJc3RydWN0IGNmZzgwMjExX2JzcyBwdWI7Cit9OworCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoaW50IHdpcGh5X2lkeCk7CitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRyaXZlcgogICogdGhhdCB0aGUgZ2VubF9pbmZvIGl0ZW0gdGhhdCBpcyBwYXNzZWQgcmVmZXJzIHRvLgpAQCAtNjMsMTMgKzEwNCwxMyBAQAogICogdGhlIGRyaXZlcidzIG11dGV4IQogICoKICAqIFRoaXMgbWVhbnMgdGhhdCB5b3UgbmVlZCB0byBjYWxsIGNmZzgwMjExX3B1dF9kZXYoKQotICogYmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWNxdWlyZSAmY2ZnODAyMTFfZHJ2X211dGV4IQorICogYmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWNxdWlyZSAmY2ZnODAyMTFfbXV0ZXghCiAgKgogICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVkIHRvIGxvY2sgdGhlIGdsb2JhbAogICogbXV0ZXggdG8gZ2V0IGFuIGl0ZW0gb2ZmIHRoZSBsaXN0IHNhZmVseSwgYW5kIHRoZW4KICAqIHdlIGxvY2sgdGhlIGRydiBtdXRleCBzbyBpdCBkb2Vzbid0IGdvIGF3YXkgdW5kZXIgdXMuCiAgKgotICogV2UgZG9uJ3Qgd2FudCB0byBrZWVwIGNmZzgwMjExX2Rydl9tdXRleCBsb2NrZWQKKyAqIFdlIGRvbid0IHdhbnQgdG8ga2VlcCBjZmc4MDIxMV9tdXRleCBsb2NrZWQKICAqIGZvciBhbGwgdGhlIHRpbWUgaW4gb3JkZXIgdG8gYWxsb3cgcmVxdWVzdHMgb24KICAqIG90aGVyIGludGVyZmFjZXMgdG8gZ28gdGhyb3VnaCBhdCB0aGUgc2FtZSB0aW1lLgogICoKQEAgLTc5LDYgKzEyMCw5IEBACiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCisvKiByZXF1aXJlcyBjZmc4MDIxMV9kcnZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpOworCiAvKiBpZGVudGljYWwgdG8gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8gYnV0IG9ubHkgb3BlcmF0ZSBvbiBpZmluZGV4ICovCiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGludCBpZmluZGV4KTsKQEAgLTkyLDYgKzEzNiwxMSBAQAogCQkJICAgICAgIGNoYXIgKm5ld25hbWUpOwogCiB2b2lkIGllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKLXZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldGJ5KTsKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3Igc2V0YnkpOworCit2b2lkIGNmZzgwMjExX2Jzc19leHBpcmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYpOwordm9pZCBjZmc4MDIxMV9ic3NfYWdlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwogCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfQ09SRV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCAzMWI4MDdhLi5hYjlkOGYxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTcsMTMgKzcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJjb3JlLmgiCkBAIC0xMDUsNiArMTA1LDEyIEBACiAKIAlbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJCSAubGVuID0gTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTiB9LAorCisJW05MODAyMTFfQVRUUl9NR01UX1NVQlRZUEVdID0geyAudHlwZSA9IE5MQV9VOCB9LAorCVtOTDgwMjExX0FUVFJfSUVdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkgICAgICAubGVuID0gSUVFRTgwMjExX01BWF9EQVRBX0xFTiB9LAorCVtOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogfTsKIAogLyogbWVzc2FnZSBidWlsZGluZyBoZWxwZXIgKi8KQEAgLTEzNSw4ICsxNDEsMTAgQEAKIAlpZiAoIWhkcikKIAkJcmV0dXJuIC0xOwogCi0JTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+aWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgZGV2LT53aXBoeV9pZHgpOwogCU5MQV9QVVRfU1RSSU5HKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUsIHdpcGh5X25hbWUoJmRldi0+d2lwaHkpKTsKKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKKwkJICAgZGV2LT53aXBoeS5tYXhfc2Nhbl9zc2lkcyk7CiAKIAlubF9tb2RlcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTKTsKIAlpZiAoIW5sX21vZGVzKQpAQCAtMjQ3LDcgKzI1NSw3IEBACiAJaW50IHN0YXJ0ID0gY2ItPmFyZ3NbMF07CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CiAJCWlmICgrK2lkeCA8PSBzdGFydCkKIAkJCWNvbnRpbnVlOwpAQCAtMjU4LDcgKzI2Niw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAljYi0+YXJnc1swXSA9IGlkeDsKIApAQCAtNDYxLDcgKzQ2OSw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKIAkJaWYgKHdwX2lkeCA8IHdwX3N0YXJ0KSB7CiAJCQl3cF9pZHgrKzsKQEAgLTQ4OCw3ICs0OTYsNyBAQAogCQl3cF9pZHgrKzsKIAl9CiAgb3V0OgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAogCWNiLT5hcmdzWzBdID0gd3BfaWR4OwogCWNiLT5hcmdzWzFdID0gaWZfaWR4OwpAQCAtNzM4LDcgKzc0Niw3IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSkKIAkJa2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKIAotCWlmIChrZXlfaWR4ID4gMykKKwlpZiAoa2V5X2lkeCA+IDUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQpAQCAtODA0LDMwICs4MTIsNDEgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTgga2V5X2lkeDsKKwlpbnQgKCpmdW5jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgdTgga2V5X2luZGV4KTsKIAogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkgeworCQlpZiAoa2V5X2lkeCA8IDQgfHwga2V5X2lkeCA+IDUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGtleV9pZHggPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgc2V0dGluZyBkZWZhdWx0IGtleSAqLwotCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSkKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0gJiYKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIWRydi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkpIHsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSkKKwkJZnVuYyA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9rZXk7CisJZWxzZQorCQlmdW5jID0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X21nbXRfa2V5OworCisJaWYgKCFmdW5jKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKIAlydG5sX2xvY2soKTsKLQllcnIgPSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgpOworCWVyciA9IGZ1bmMoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCk7CiAJcnRubF91bmxvY2soKTsKIAogIG91dDoKQEAgLTg2Myw3ICs4ODIsNyBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGtleV9pZHggPiA1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC04OTQsNiArOTEzLDEwIEBACiAJCWlmIChwYXJhbXMua2V5X2xlbiAhPSAxMykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQlpZiAocGFyYW1zLmtleV9sZW4gIT0gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtOTI4LDcgKzk1MSw3IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSkKIAkJa2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKIAotCWlmIChrZXlfaWR4ID4gMykKKwlpZiAoa2V5X2lkeCA+IDUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQpAQCAtMTE4Miw2ICsxMjA1LDEyIEBACiAKIAkJbmxhX25lc3RfZW5kKG1zZywgdHhyYXRlKTsKIAl9CisJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fUlhfUEFDS0VUUykKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFMsCisJCQkgICAgc2luZm8tPnJ4X3BhY2tldHMpOworCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19UWF9QQUNLRVRTLAorCQkJICAgIHNpbmZvLT50eF9wYWNrZXRzKTsKIAlubGFfbmVzdF9lbmQobXNnLCBzaW5mb2F0dHIpOwogCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKQEAgLTE4NzYsNiArMTkwNSwxOSBAQAogCWludCByOwogCWNoYXIgKmRhdGEgPSBOVUxMOwogCisJLyoKKwkgKiBZb3Ugc2hvdWxkIG9ubHkgZ2V0IHRoaXMgd2hlbiBjZmc4MDIxMSBoYXNuJ3QgeWV0IGluaXRpYWxpemVkCisJICogY29tcGxldGVseSB3aGVuIGJ1aWx0LWluIHRvIHRoZSBrZXJuZWwgcmlnaHQgYmV0d2VlbiB0aGUgdGltZQorCSAqIHdpbmRvdyBiZXR3ZWVuIG5sODAyMTFfaW5pdCgpIGFuZCByZWd1bGF0b3J5X2luaXQoKSwgaWYgdGhhdCBpcworCSAqIGV2ZW4gcG9zc2libGUuCisJICovCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCWlmICh1bmxpa2VseSghY2ZnODAyMTFfcmVnZG9tYWluKSkgeworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKIAlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUdfQUxQSEEyXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE4ODYsOSArMTkyOCw5IEBACiAJaWYgKGlzX3dvcmxkX3JlZ2RvbShkYXRhKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOwotCXIgPSBfX3JlZ3VsYXRvcnlfaGludChOVUxMLCBSRUdET01fU0VUX0JZX1VTRVIsIGRhdGEsIDAsIEVOVklST05fQU5ZKTsKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisKKwlyID0gcmVndWxhdG9yeV9oaW50X3VzZXIoZGF0YSk7CisKIAlyZXR1cm4gcjsKIH0KIApAQCAtMjA4MCw2ICsyMTIyLDgxIEBACiAKICN1bmRlZiBGSUxMX0lOX01FU0hfUEFSQU1fSUZfU0VUCiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHIgPSBOVUxMOworCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlczsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICghY2ZnODAyMTFfcmVnZG9tYWluKQorCQlnb3RvIG91dDsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1JFRyk7CisJaWYgKCFoZHIpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwKKwkJY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOworCisJbmxfcmVnX3J1bGVzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVTKTsKKwlpZiAoIW5sX3JlZ19ydWxlcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnODAyMTFfcmVnZG9tYWluLT5uX3JlZ19ydWxlczsgaSsrKSB7CisJCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpyZWdfcnVsZTsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmcmVxX3JhbmdlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGU7CisKKwkJcmVnX3J1bGUgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CisJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CisKKwkJbmxfcmVnX3J1bGUgPSBubGFfbmVzdF9zdGFydChtc2csIGkpOworCQlpZiAoIW5sX3JlZ19ydWxlKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1MsCisJCQlyZWdfcnVsZS0+ZmxhZ3MpOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX1NUQVJULAorCQkJZnJlcV9yYW5nZS0+c3RhcnRfZnJlcV9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORCwKKwkJCWZyZXFfcmFuZ2UtPmVuZF9mcmVxX2toeik7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfTUFYX0JXLAorCQkJZnJlcV9yYW5nZS0+bWF4X2JhbmR3aWR0aF9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9BTlRfR0FJTiwKKwkJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9FSVJQLAorCQkJcG93ZXJfcnVsZS0+bWF4X2VpcnApOworCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX3JlZ19ydWxlKTsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBubF9yZWdfcnVsZXMpOworCisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWdvdG8gb3V0OworCitubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCWVyciA9IC1FTVNHU0laRTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXTsKQEAgLTIxMzUsOSArMjI1Miw5IEBACiAKIAlCVUdfT04ocnVsZV9pZHggIT0gbnVtX3J1bGVzKTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXIgPSBzZXRfcmVnZG9tKHJkKTsKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIHI7CiAKICBiYWRfcmVnOgpAQCAtMjE0NSw2ICsyMjYyLDMwMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfc2V0X21nbXRfZXh0cmFfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBtZ210X2V4dHJhX2llX3BhcmFtcyBwYXJhbXM7CisKKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGFyYW1zLnN1YnR5cGUgPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NR01UX1NVQlRZUEVdKTsKKwlpZiAocGFyYW1zLnN1YnR5cGUgPiAxNSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIEZDIFN1YnR5cGUgZmllbGQgaXMgNCBiaXRzICgwLi4xNSkgKi8KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXBhcmFtcy5pZXMgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJcGFyYW1zLmllc19sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCX0KKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChkcnYtPm9wcy0+c2V0X21nbXRfZXh0cmFfaWUpIHsKKwkJcnRubF9sb2NrKCk7CisJCWVyciA9IGRydi0+b3BzLT5zZXRfbWdtdF9leHRyYV9pZSgmZHJ2LT53aXBoeSwgZGV2LCAmcGFyYW1zKTsKKwkJcnRubF91bmxvY2soKTsKKwl9IGVsc2UKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV90cmlnZ2VyX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBubGF0dHIgKmF0dHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyLCB0bXAsIG5fc3NpZHMgPSAwLCBuX2NoYW5uZWxzID0gMCwgaTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc2l6ZV90IGllX2xlbjsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisKKwlpZiAoIWRydi0+b3BzLT5zY2FuKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlydG5sX2xvY2soKTsKKworCWlmIChkcnYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10pIHsKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10sIHRtcCkKKwkJCW5fY2hhbm5lbHMrKzsKKwkJaWYgKCFuX2NoYW5uZWxzKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKKwkJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sIHRtcCkKKwkJCW5fc3NpZHMrKzsKKworCWlmIChuX3NzaWRzID4gd2lwaHktPm1heF9zY2FuX3NzaWRzKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkKKwkJaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwllbHNlCisJCWllX2xlbiA9IDA7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpCisJCQkrIHNpemVvZigqc3NpZCkgKiBuX3NzaWRzCisJCQkrIHNpemVvZihjaGFubmVsKSAqIG5fY2hhbm5lbHMKKwkJCSsgaWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJlcXVlc3QtPmNoYW5uZWxzID0gKHZvaWQgKikoKGNoYXIgKilyZXF1ZXN0ICsgc2l6ZW9mKCpyZXF1ZXN0KSk7CisJcmVxdWVzdC0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJaWYgKG5fc3NpZHMpCisJCXJlcXVlc3QtPnNzaWRzID0gKHZvaWQgKikocmVxdWVzdC0+Y2hhbm5lbHMgKyBuX2NoYW5uZWxzKTsKKwlyZXF1ZXN0LT5uX3NzaWRzID0gbl9zc2lkczsKKwlpZiAoaWVfbGVuKSB7CisJCWlmIChyZXF1ZXN0LT5zc2lkcykKKwkJCXJlcXVlc3QtPmllID0gKHZvaWQgKikocmVxdWVzdC0+c3NpZHMgKyBuX3NzaWRzKTsKKwkJZWxzZQorCQkJcmVxdWVzdC0+aWUgPSAodm9pZCAqKShyZXF1ZXN0LT5jaGFubmVscyArIG5fY2hhbm5lbHMpOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10pIHsKKwkJLyogdXNlciBzcGVjaWZpZWQsIGJhaWwgb3V0IGlmIGNoYW5uZWwgbm90IGZvdW5kICovCisJCXJlcXVlc3QtPm5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzOworCQlpID0gMDsKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10sIHRtcCkgeworCQkJcmVxdWVzdC0+Y2hhbm5lbHNbaV0gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksIG5sYV9nZXRfdTMyKGF0dHIpKTsKKwkJCWlmICghcmVxdWVzdC0+Y2hhbm5lbHNbaV0pIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisJCQlpKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBhbGwgY2hhbm5lbHMgKi8KKwkJaSA9IDA7CisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCWludCBqOworCQkJaWYgKCF3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJY29udGludWU7CisJCQlmb3IgKGogPSAwOyBqIDwgd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKwkJCQlyZXF1ZXN0LT5jaGFubmVsc1tpXSA9ICZ3aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQkJCWkrKzsKKwkJCX0KKwkJfQorCX0KKworCWkgPSAwOworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pIHsKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sIHRtcCkgeworCQkJaWYgKHJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSk7CisJCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7CisJCQlpKys7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQlyZXF1ZXN0LT5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQltZW1jcHkocmVxdWVzdC0+aWUsIG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pLAorCQkgICAgICAgcmVxdWVzdC0+aWVfbGVuKTsKKwl9CisKKwlyZXF1ZXN0LT5pZmlkeCA9IGRldi0+aWZpbmRleDsKKwlyZXF1ZXN0LT53aXBoeSA9ICZkcnYtPndpcGh5OworCisJZHJ2LT5zY2FuX3JlcSA9IHJlcXVlc3Q7CisJZXJyID0gZHJ2LT5vcHMtPnNjYW4oJmRydi0+d2lwaHksIGRldiwgcmVxdWVzdCk7CisKKyBvdXRfZnJlZToKKwlpZiAoZXJyKSB7CisJCWRydi0+c2Nhbl9yZXEgPSBOVUxMOworCQlrZnJlZShyZXF1ZXN0KTsKKwl9Cisgb3V0X3VubG9jazoKKwlydG5sX3VubG9jaygpOworIG91dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCisJCQkgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqcmVzKQoreworCXZvaWQgKmhkcjsKKwlzdHJ1Y3QgbmxhdHRyICpic3M7CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIHBpZCwgc2VxLCBmbGFncywKKwkJCSAgICAgTkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUyk7CisJaWYgKCFoZHIpCisJCXJldHVybiAtMTsKKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1NDQU5fR0VORVJBVElPTiwKKwkJICAgIHJkZXYtPmJzc19nZW5lcmF0aW9uKTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBkZXYtPmlmaW5kZXgpOworCisJYnNzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfQlNTKTsKKwlpZiAoIWJzcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5ic3NpZCkpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0JTU19CU1NJRCwgRVRIX0FMRU4sIHJlcy0+YnNzaWQpOworCWlmIChyZXMtPmluZm9ybWF0aW9uX2VsZW1lbnRzICYmIHJlcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFMsCisJCQlyZXMtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCXJlcy0+aW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmIChyZXMtPnRzZikKKwkJTkxBX1BVVF9VNjQobXNnLCBOTDgwMjExX0JTU19UU0YsIHJlcy0+dHNmKTsKKwlpZiAocmVzLT5iZWFjb25faW50ZXJ2YWwpCisJCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9CU1NfQkVBQ09OX0lOVEVSVkFMLCByZXMtPmJlYWNvbl9pbnRlcnZhbCk7CisJTkxBX1BVVF9VMTYobXNnLCBOTDgwMjExX0JTU19DQVBBQklMSVRZLCByZXMtPmNhcGFiaWxpdHkpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CU1NfRlJFUVVFTkNZLCByZXMtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCXN3aXRjaCAocmRldi0+d2lwaHkuc2lnbmFsX3R5cGUpIHsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19TSUdOQUxfTUJNLCByZXMtPnNpZ25hbCk7CisJCWJyZWFrOworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOgorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQywgcmVzLT5zaWduYWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBic3MpOworCisJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJcmV0dXJuIC1FTVNHU0laRTsKK30KKworc3RhdGljIGludCBubDgwMjExX2R1bXBfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpzY2FuOworCWludCBpZmlkeCA9IGNiLT5hcmdzWzBdOworCWludCBzdGFydCA9IGNiLT5hcmdzWzFdLCBpZHggPSAwOworCWludCBlcnI7CisKKwlpZiAoIWlmaWR4KSB7CisJCWVyciA9IG5sbXNnX3BhcnNlKGNiLT5ubGgsIEdFTkxfSERSTEVOICsgbmw4MDIxMV9mYW0uaGRyc2l6ZSwKKwkJCQkgIG5sODAyMTFfZmFtLmF0dHJidWYsIG5sODAyMTFfZmFtLm1heGF0dHIsCisJCQkJICBubDgwMjExX3BvbGljeSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmICghbmw4MDIxMV9mYW0uYXR0cmJ1ZltOTDgwMjExX0FUVFJfSUZJTkRFWF0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZmlkeCA9IG5sYV9nZXRfdTMyKG5sODAyMTFfZmFtLmF0dHJidWZbTkw4MDIxMV9BVFRSX0lGSU5ERVhdKTsKKwkJaWYgKCFpZmlkeCkKKwkJCXJldHVybiAtRUlOVkFMOworCQljYi0+YXJnc1swXSA9IGlmaWR4OworCX0KKworCW5ldGRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7CisJaWYgKCFuZXRkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaWZpZHgpOworCWlmIChJU19FUlIoZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRldik7CisJCWdvdG8gb3V0X3B1dF9uZXRkZXY7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfZXhwaXJlKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYW4sICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmICgrK2lkeCA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCQlpZiAobmw4MDIxMV9zZW5kX2Jzcyhza2IsCisJCQkJTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQkJY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKKwkJCQlkZXYsIG5ldGRldiwgJnNjYW4tPnB1YikgPCAwKSB7CisJCQlpZHgtLTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisgb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWNiLT5hcmdzWzFdID0gaWR4OworCWVyciA9IHNrYi0+bGVuOworCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKKyBvdXRfcHV0X25ldGRldjoKKwlkZXZfcHV0KG5ldGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5sODAyMTFfb3BzW10gPSB7CiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1dJUEhZLApAQCAtMjIzMSw3ICsyNjQ0LDYgQEAKIAkJLmRvaXQgPSBubDgwMjExX2dldF9zdGF0aW9uLAogCQkuZHVtcGl0ID0gbmw4MDIxMV9kdW1wX3N0YXRpb24sCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKLQkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1NUQVRJT04sCkBAIC0yMjgzLDYgKzI2OTUsMTIgQEAKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1JFRywKKwkJLmRvaXQgPSBubDgwMjExX2dldF9yZWcsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLyogY2FuIGJlIHJldHJpZXZlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMgKi8KKwl9LAorCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9SRUcsCiAJCS5kb2l0ID0gbmw4MDIxMV9zZXRfcmVnLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCkBAIC0yMzA2LDEyICsyNzI0LDM1IEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUsCisJCS5kb2l0ID0gbmw4MDIxMV9zZXRfbWdtdF9leHRyYV9pZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU4sCisJCS5kb2l0ID0gbmw4MDIxMV90cmlnZ2VyX3NjYW4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1NDQU4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmR1bXBpdCA9IG5sODAyMTFfZHVtcF9zY2FuLAorCX0sCiB9OwogCiAvKiBtdWx0aWNhc3QgZ3JvdXBzICovCiBzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfY29uZmlnX21jZ3JwID0gewogCS5uYW1lID0gImNvbmZpZyIsCiB9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3NjYW5fbWNncnAgPSB7CisJLm5hbWUgPSAic2NhbiIsCit9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAgPSB7CisJLm5hbWUgPSAicmVndWxhdG9yeSIsCit9OwogCiAvKiBub3RpZmljYXRpb24gZnVuY3Rpb25zICovCiAKQEAgLTIzMzEsNiArMjc3MiwxMjEgQEAKIAlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfY29uZmlnX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKHN0cnVjdCBza19idWZmICptc2csCisJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAorCQkJCSAgICB1MzIgY21kKQoreworCXZvaWQgKmhkcjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLCBjbWQpOworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCisJLyogWFhYOiB3ZSBzaG91bGQgcHJvYmFibHkgYm91bmNlIGJhY2sgdGhlIHJlcXVlc3Q/ICovCisKKwlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgICAgIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaWYgKG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCisJCQkJICAgICAgTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworfQorCisvKgorICogVGhpcyBjYW4gaGFwcGVuIG9uIGdsb2JhbCByZWd1bGF0b3J5IGNoYW5nZXMgb3IgZGV2aWNlIHNwZWNpZmljIHNldHRpbmdzCisgKiBiYXNlZCBvbiBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW5zLgorICovCit2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX1JFR19DSEFOR0UpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFVzZXJzcGFjZSBjYW4gYWx3YXlzIGNvdW50IHRoaXMgb25lIGFsd2F5cyBiZWluZyBzZXQgKi8KKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsIHJlcXVlc3QtPmluaXRpYXRvcik7CisKKwlpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICcwJyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzAnKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCk7CisJZWxzZSBpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICc5JyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzknKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQpOworCWVsc2UgaWYgKChyZXF1ZXN0LT5hbHBoYTJbMF0gPT0gJzknICYmIHJlcXVlc3QtPmFscGhhMlsxXSA9PSAnOCcpIHx8CisJCSByZXF1ZXN0LT5pbnRlcnNlY3QpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTik7CisJZWxzZSB7CisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlkpOworCQlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9SRUdfQUxQSEEyLCByZXF1ZXN0LT5hbHBoYTIpOworCX0KKworCWlmICh3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSkKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfcmVndWxhdG9yeV9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm47CisKK25sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworfQorCiAvKiBpbml0aWFsaXNhdGlvbi9leGl0IGZ1bmN0aW9ucyAqLwogCiBpbnQgbmw4MDIxMV9pbml0KHZvaWQpCkBAIC0yMzUxLDYgKzI5MDcsMTQgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKKwllcnIgPSBnZW5sX3JlZ2lzdGVyX21jX2dyb3VwKCZubDgwMjExX2ZhbSwgJm5sODAyMTFfc2Nhbl9tY2dycCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3JlZ3VsYXRvcnlfbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKwogCXJldHVybiAwOwogIGVycl9vdXQ6CiAJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbmw4MDIxMV9mYW0pOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaCBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKaW5kZXggZjNlYTVjMC4uZTY1YTNjMyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC03LDYgKzcsMTEgQEAKIGV4dGVybiBpbnQgbmw4MDIxMV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmw4MDIxMV9leGl0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG5sODAyMTFfaW5pdCh2b2lkKQogewpAQCAtMTksNiArMjQsMTggQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiB7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQKK25sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3t9CitzdGF0aWMgaW5saW5lIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZCgKKwkJCQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQore30KK3N0YXRpYyBpbmxpbmUgdm9pZAorbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKK30KICNlbmRpZiAvKiBDT05GSUdfTkw4MDIxMSAqLwogCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggYmQwYTE2Yy4uZWI4YjhlZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCisrKyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtNDEsMzggKzQxLDcgQEAKICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAicmVnLmgiCi0KLS8qKgotICogc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAtIHJlY2VpcHQgb2YgbGFzdCByZWd1bGF0b3J5IHJlcXVlc3QKLSAqCi0gKiBAd2lwaHk6IHRoaXMgaXMgc2V0IGlmIHRoaXMgcmVxdWVzdCdzIGluaXRpYXRvciBpcwotICogCSVSRUdET01fU0VUX0JZX0NPVU5UUllfSUUgb3IgJVJFR0RPTV9TRVRfQllfRFJJVkVSLiBUaGlzCi0gKiAJY2FuIGJlIHVzZWQgYnkgdGhlIHdpcmVsZXNzIGNvcmUgdG8gZGVhbCB3aXRoIGNvbmZsaWN0cwotICogCWFuZCBwb3RlbnRpYWxseSBpbmZvcm0gdXNlcnMgb2Ygd2hpY2ggZGV2aWNlcyBzcGVjaWZpY2FsbHkKLSAqIAljYXNlZCB0aGUgY29uZmxpY3RzLgotICogQGluaXRpYXRvcjogaW5kaWNhdGVzIHdobyBzZW50IHRoaXMgcmVxdWVzdCwgY291bGQgYmUgYW55IG9mCi0gKiAJb2YgdGhvc2Ugc2V0IGluIHJlZ19zZXRfYnksICVSRUdET01fU0VUX0JZXyoKLSAqIEBhbHBoYTI6IHRoZSBJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIG9mIHRoZSByZXF1ZXN0ZWQKLSAqIAlyZWd1bGF0b3J5IGRvbWFpbi4gV2UgaGF2ZSBhIGZldyBzcGVjaWFsIGNvZGVzOgotICogCTAwIC0gV29ybGQgcmVndWxhdG9yeSBkb21haW4KLSAqIAk5OSAtIGJ1aWx0IGJ5IGRyaXZlciBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKLSAqIAk5OCAtIHJlc3VsdCBvZiBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gcmVndWxhdG9yeSBkb21haW5zCi0gKiBAaW50ZXJzZWN0OiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgd2lyZWxlc3MgY29yZSBzaG91bGQgaW50ZXJzZWN0Ci0gKiAJdGhlIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbiB3aXRoIHRoZSBwcmVzZW50bHkgc2V0IHJlZ3VsYXRvcnkKLSAqIAlkb21haW4uCi0gKiBAY291bnRyeV9pZV9jaGVja3N1bTogY2hlY2tzdW0gb2YgdGhlIGxhc3QgcHJvY2Vzc2VkIGFuZCBhY2NlcHRlZAotICogCWNvdW50cnkgSUUKLSAqIEBjb3VudHJ5X2llX2VudjogbGV0cyB1cyBrbm93IGlmIHRoZSBBUCBpcyB0ZWxsaW5nIHVzIHdlIGFyZSBvdXRkb29yLAotICogCWluZG9vciwgb3IgaWYgaXQgZG9lc24ndCBtYXR0ZXIKLSAqLwotc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCB7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQllbnVtIHJlZ19zZXRfYnkgaW5pdGlhdG9yOwotCWNoYXIgYWxwaGEyWzJdOwotCWJvb2wgaW50ZXJzZWN0OwotCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtOwotCWVudW0gZW52aXJvbm1lbnRfY2FwIGNvdW50cnlfaWVfZW52OwotfTsKKyNpbmNsdWRlICJubDgwMjExLmgiCiAKIC8qIFJlY2VpcHQgb2YgaW5mb3JtYXRpb24gZnJvbSBsYXN0IHJlZ3VsYXRvcnkgcmVxdWVzdCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxhc3RfcmVxdWVzdDsKQEAgLTg2LDIyICs1NSw2MyBAQAogCU1IWl9UT19LSFooMjApLAogfTsKIAotLyogQ2VudHJhbCB3aXJlbGVzcyBjb3JlIHJlZ3VsYXRvcnkgZG9tYWlucywgd2Ugb25seSBuZWVkIHR3bywKKy8qCisgKiBDZW50cmFsIHdpcmVsZXNzIGNvcmUgcmVndWxhdG9yeSBkb21haW5zLCB3ZSBvbmx5IG5lZWQgdHdvLAogICogdGhlIGN1cnJlbnQgb25lIGFuZCBhIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugd2UgaGF2ZSBubwotICogaW5mb3JtYXRpb24gdG8gZ2l2ZSB1cyBhbiBhbHBoYTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY2ZnODAyMTFfcmVnZG9tYWluOworICogaW5mb3JtYXRpb24gdG8gZ2l2ZSB1cyBhbiBhbHBoYTIKKyAqLworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNmZzgwMjExX3JlZ2RvbWFpbjsKIAotLyogV2UgdXNlIHRoaXMgYXMgYSBwbGFjZSBmb3IgdGhlIHJkIHN0cnVjdHVyZSBidWlsdCBmcm9tIHRoZQorLyoKKyAqIFdlIHVzZSB0aGlzIGFzIGEgcGxhY2UgZm9yIHRoZSByZCBzdHJ1Y3R1cmUgYnVpbHQgZnJvbSB0aGUKICAqIGxhc3QgcGFyc2VkIGNvdW50cnkgSUUgdG8gcmVzdCB1bnRpbCBDUkRBIGdldHMgYmFjayB0byB1cyB3aXRoCi0gKiB3aGF0IGl0IHRoaW5rcyBzaG91bGQgYXBwbHkgZm9yIHRoZSBzYW1lIGNvdW50cnkgKi8KKyAqIHdoYXQgaXQgdGhpbmtzIHNob3VsZCBhcHBseSBmb3IgdGhlIHNhbWUgY291bnRyeQorICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfcmVnZG9tYWluOwogCisvKiBVc2VkIHRvIHF1ZXVlIHVwIHJlZ3VsYXRvcnkgaGludHMgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmVnX3JlcXVlc3RzX2xpc3QpOworc3RhdGljIHNwaW5sb2NrX3QgcmVnX3JlcXVlc3RzX2xvY2s7CisKKy8qIFVzZWQgdG8gcXVldWUgdXAgYmVhY29uIGhpbnRzIGZvciByZXZpZXcgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmVnX3BlbmRpbmdfYmVhY29ucyk7CitzdGF0aWMgc3BpbmxvY2tfdCByZWdfcGVuZGluZ19iZWFjb25zX2xvY2s7CisKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBwcm9jZXNzZWQgYmVhY29uIGhpbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19iZWFjb25fbGlzdCk7CisKK3N0cnVjdCByZWdfYmVhY29uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW47Cit9OworCiAvKiBXZSBrZWVwIGEgc3RhdGljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugb2YgdGhlIGFic2VuY2Ugb2YgQ1JEQSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHdvcmxkX3JlZ2RvbSA9IHsKLQkubl9yZWdfcnVsZXMgPSAxLAorCS5uX3JlZ19ydWxlcyA9IDUsCiAJLmFscGhhMiA9ICAiMDAiLAogCS5yZWdfcnVsZXMgPSB7Ci0JCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyMCwKKwkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjExICovCisJCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyMCwgMCksCisJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxMi4uMTMuIE5vIEhUNDAKKwkJICogY2hhbm5lbCBmaXRzIGhlcmUuICovCisJCVJFR19SVUxFKDI0NjctMTAsIDI0NzIrMTAsIDIwLCA2LCAyMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisJCQlOTDgwMjExX1JSRl9OT19JQlNTKSwKKwkJLyogSUVFRSA4MDIuMTEgY2hhbm5lbCAxNCAtIE9ubHkgSlAgZW5hYmxlcworCQkgKiB0aGlzIGFuZCBmb3IgODAyLjExYiBvbmx5ICovCisJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDIwLCA2LCAyMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisJCQlOTDgwMjExX1JSRl9OT19JQlNTIHwKKwkJCU5MODAyMTFfUlJGX05PX09GRE0pLAorCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMzYuLjQ4ICovCisJCVJFR19SVUxFKDUxODAtMTAsIDUyNDArMTAsIDQwLCA2LCAyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisgICAgICAgICAgICAgICAgICAgICAgICBOTDgwMjExX1JSRl9OT19JQlNTKSwKKworCQkvKiBOQjogNTI2MCBNSHogLSA1NzAwIE1IeiByZXF1aWVzIERGUyAqLworCisJCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbCAxNDkuLjE2NSAqLworCQlSRUdfUlVMRSg1NzQ1LTEwLCA1ODI1KzEwLCA0MCwgNiwgMjAsCiAJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAogCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyksCiAJfQpAQCAtMTE1LDkgKzEyNSwxMSBAQAogbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX3JlZ2RvbSwgIklFRUUgODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUiKTsKIAotLyogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgorLyoKKyAqIFdlIGFzc3VtZSA0MCBNSHogYmFuZHdpZHRoIGZvciB0aGUgb2xkIHJlZ3VsYXRvcnkgd29yay4KICAqIFdlIG1ha2UgZW1waGFzaXMgd2UgYXJlIHVzaW5nIHRoZSBleGFjdCBzYW1lIGZyZXF1ZW5jaWVzCi0gKiBhcyBiZWZvcmUgKi8KKyAqIGFzIGJlZm9yZQorICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB1c19yZWdkb20gPSB7CiAJLm5fcmVnX3J1bGVzID0gNiwKQEAgLTE1Niw4ICsxNjgsMTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGV1X3JlZ2RvbSA9IHsKIAkubl9yZWdfcnVsZXMgPSA2LAotCS8qIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAotCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwkvKgorCSAqIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAorCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwkgKi8KIAkuYWxwaGEyID0gICJFVSIsCiAJLnJlZ19ydWxlcyA9IHsKIAkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjEzICovCkBAIC0yMjYsOCArMjQwLDEwIEBACiAJY2ZnODAyMTFfcmVnZG9tYWluID0gTlVMTDsKIH0KIAotLyogRHluYW1pYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0ZWQgYnkgdGhlIHdpcmVsZXNzCi0gKiBjb3JlIHVwb24gaW5pdGlhbGl6YXRpb24gKi8KKy8qCisgKiBEeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3RlZCBieSB0aGUgd2lyZWxlc3MKKyAqIGNvcmUgdXBvbiBpbml0aWFsaXphdGlvbgorICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfd29ybGRfcmVnZG9tYWluKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAlCVUdfT04oIWxhc3RfcmVxdWVzdCk7CkBAIC0yNjgsOCArMjg0LDEwIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gd2FzIGJ1aWx0IGJ5IGRyaXZlcgotCSAqIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAqLworCS8qCisJICogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIHdhcyBidWlsdCBieSBkcml2ZXIKKwkgKiBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKKwkgKi8KIAlpZiAoYWxwaGEyWzBdID09ICc5JyAmJiBhbHBoYTJbMV0gPT0gJzknKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNzksOSArMjk3LDExIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCisJLyoKKwkgKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCiAJICogcmVzdWx0IG9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbgotCSAqIHN0cnVjdHVyZXMgKi8KKwkgKiBzdHJ1Y3R1cmVzCisJICovCiAJaWYgKGFscGhhMlswXSA9PSAnOScgJiYgYWxwaGEyWzFdID09ICc4JykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMzA2LDggKzMyNiwxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZWQoY29uc3QgY2hhciAqYWxwaGEyKQorc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZXMoY29uc3QgY2hhciAqYWxwaGEyKQogeworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlpZiAoIWNmZzgwMjExX3JlZ2RvbWFpbikKIAkJcmV0dXJuIHRydWU7CiAJaWYgKGFscGhhMl9lcXVhbChjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMiwgYWxwaGEyKSkKQEAgLTMzNCw4ICszNTYsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQotICogYmFzaXMgaW4gdXNlcnNwYWNlLiAqLworLyoKKyAqIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQorICogYmFzaXMgaW4gdXNlcnNwYWNlLgorICovCiBzdGF0aWMgaW50IGNhbGxfY3JkYShjb25zdCBjaGFyICphbHBoYTIpCiB7CiAJY2hhciBjb3VudHJ5X2Vudls5ICsgMl0gPSAiQ09VTlRSWT0iOwpAQCAtNDQ3LDEwICs0NzEsMTIgQEAKICN1bmRlZiBPTkVfR0haX0lOX0tIWgogfQogCi0vKiBDb252ZXJ0cyBhIGNvdW50cnkgSUUgdG8gYSByZWd1bGF0b3J5IGRvbWFpbi4gQSByZWd1bGF0b3J5IGRvbWFpbgorLyoKKyAqIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBzdHJ1Y3R1cmUgaGFzIGEgbG90IG9mIGluZm9ybWF0aW9uIHdoaWNoIHRoZSBJRSBkb2Vzbid0IHlldCBoYXZlLAogICogc28gZm9yIHRoZSBvdGhlciB2YWx1ZXMgd2UgdXNlIHVwcGVyIG1heCB2YWx1ZXMgYXMgd2Ugd2lsbCBpbnRlcnNlY3QKLSAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuICovCisgKiB3aXRoIG91ciB1c2Vyc3BhY2UgcmVndWxhdG9yeSBhZ2VudCB0byBnZXQgbG93ZXIgYm91bmRzLgorICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfMl9yZCgKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbiwKQEAgLTQ5NSw5ICs1MjEsMTEgQEAKIAogCSpjaGVja3N1bSBePSAoKGZsYWdzIF4gYWxwaGEyWzBdIF4gYWxwaGEyWzFdKSA8PCA4KTsKIAotCS8qIFdlIG5lZWQgdG8gYnVpbGQgYSByZWcgcnVsZSBmb3IgZWFjaCB0cmlwbGV0LCBidXQgZmlyc3Qgd2UgbXVzdAorCS8qCisJICogV2UgbmVlZCB0byBidWlsZCBhIHJlZyBydWxlIGZvciBlYWNoIHRyaXBsZXQsIGJ1dCBmaXJzdCB3ZSBtdXN0CiAJICogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcmVnIHJ1bGVzIHdlIHdpbGwgbmVlZC4gV2Ugd2lsbCBuZWVkIG9uZQotCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZCAqLworCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZAorCSAqLwogCXdoaWxlIChjb3VudHJ5X2llX2xlbiA+PSAzKSB7CiAJCWludCBlbmRfY2hhbm5lbCA9IDA7CiAJCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICp0cmlwbGV0ID0KQEAgLTUzNSw5ICs1NjMsMTEgQEAKIAkJaWYgKGN1cl9zdWJfbWF4X2NoYW5uZWwgPCBjdXJfY2hhbm5lbCkKIAkJCXJldHVybiBOVUxMOwogCi0JCS8qIERvIG5vdCBhbGxvdyBvdmVybGFwcGluZyBjaGFubmVscy4gQWxzbyBjaGFubmVscworCQkvKgorCQkgKiBEbyBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgY2hhbm5lbHMuIEFsc28gY2hhbm5lbHMKIAkJICogcGFzc2VkIGluIGVhY2ggc3ViYmFuZCBtdXN0IGJlIG1vbm90b25pY2FsbHkKLQkJICogaW5jcmVhc2luZyAqLworCQkgKiBpbmNyZWFzaW5nCisJCSAqLwogCQlpZiAobGFzdF9zdWJfbWF4X2NoYW5uZWwpIHsKIAkJCWlmIChjdXJfY2hhbm5lbCA8PSBsYXN0X3N1Yl9tYXhfY2hhbm5lbCkKIAkJCQlyZXR1cm4gTlVMTDsKQEAgLTU0NSwxMCArNTc1LDEyIEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAotCQkvKiBXaGVuIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyBzdXBwb3J0ZWQKKwkJLyoKKwkJICogV2hlbiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgc3VwcG9ydGVkCiAJCSAqIHdlIGNhbiB0aHJvdyBleHQgdHJpcGxldHMgYXMgcGFydCBvZiB0aGlzIHNvdXAsCiAJCSAqIGZvciBub3cgd2UgZG9uJ3QgY2FyZSB3aGVuIHRob3NlIGNoYW5nZSBhcyB3ZQotCQkgKiBkb24ndCBzdXBwb3J0IHRoZW0gKi8KKwkJICogZG9uJ3Qgc3VwcG9ydCB0aGVtCisJCSAqLwogCQkqY2hlY2tzdW0gXj0gKChjdXJfY2hhbm5lbCBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDgpIHwKIAkJICAoKGN1cl9zdWJfbWF4X2NoYW5uZWwgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCAxNikgfAogCQkgICgodHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgMjQpOwpAQCAtNTU5LDggKzU5MSwxMCBAQAogCQljb3VudHJ5X2llX2xlbiAtPSAzOwogCQludW1fcnVsZXMrKzsKIAotCQkvKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0Ci0JCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudCAqLworCQkvKgorCQkgKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0CisJCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudAorCQkgKi8KIAkJaWYgKG51bV9ydWxlcyA+IE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTKQogCQkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNTg4LDggKzYyMiwxMCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyZXFfcmFuZ2UgPSBOVUxMOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOwogCi0JCS8qIE11c3QgcGFyc2UgaWYgZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHRydWUsCi0JCSAqIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQgKi8KKwkJLyoKKwkJICogTXVzdCBwYXJzZSBpZiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSwKKwkJICogd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldAorCQkgKi8KIAkJaWYgKHRyaXBsZXQtPmV4dC5yZWdfZXh0ZW5zaW9uX2lkID49CiAJCQkJSUVFRTgwMjExX0NPVU5UUllfRVhURU5TSU9OX0lEKSB7CiAJCQljb3VudHJ5X2llICs9IDM7CkBAIC02MTEsMTAgKzY0NywxMiBAQAogCQkJZW5kX2NoYW5uZWwgPSAgdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCiAJCQkJKDQgKiAodHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMSkpOwogCi0JCS8qIFRoZSArMTAgaXMgc2luY2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGV4cGVjdHMKKwkJLyoKKwkJICogVGhlICsxMCBpcyBzaW5jZSB0aGUgcmVndWxhdG9yeSBkb21haW4gZXhwZWN0cwogCQkgKiB0aGUgYWN0dWFsIGJhbmQgZWRnZSwgbm90IHRoZSBjZW50ZXIgb2YgZnJlcSBmb3IKIAkJICogaXRzIHN0YXJ0IGFuZCBlbmQgZnJlcXMsIGFzc3VtaW5nIDIwIE1IeiBiYW5kd2lkdGggb24KLQkJICogdGhlIGNoYW5uZWxzIHBhc3NlZCAqLworCQkgKiB0aGUgY2hhbm5lbHMgcGFzc2VkCisJCSAqLwogCQlmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toeiA9CiAJCQlNSFpfVE9fS0haKGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgKIAkJCQl0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsKSAtIDEwKTsKQEAgLTYyMiw5ICs2NjAsMTEgQEAKIAkJCU1IWl9UT19LSFooaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KAogCQkJCWVuZF9jaGFubmVsKSArIDEwKTsKIAotCQkvKiBMYXJnZSBhcmJpdHJhcnkgdmFsdWVzLCB3ZSBpbnRlcnNlY3QgbGF0ZXIgKi8KLQkJLyogSW5jcmVtZW50IHRoaXMgaWYgd2UgZXZlciBzdXBwb3J0ID49IDQwIE1IeiBjaGFubmVscwotCQkgKiBpbiBJRUVFIDgwMi4xMSAqLworCQkvKgorCQkgKiBUaGVzZSBhcmUgbGFyZ2UgYXJiaXRyYXJ5IHZhbHVlcyB3ZSB1c2UgdG8gaW50ZXJzZWN0IGxhdGVyLgorCQkgKiBJbmNyZW1lbnQgdGhpcyBpZiB3ZSBldmVyIHN1cHBvcnQgPj0gNDAgTUh6IGNoYW5uZWxzCisJCSAqIGluIElFRUUgODAyLjExCisJCSAqLwogCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiA9IE1IWl9UT19LSFooNDApOwogCQlwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluID0gREJJX1RPX01CSSgxMDApOwogCQlwb3dlcl9ydWxlLT5tYXhfZWlycCA9IERCTV9UT19NQk0oMTAwKTsKQEAgLTY0MCw4ICs2ODAsMTAgQEAKIH0KIAogCi0vKiBIZWxwZXIgZm9yIHJlZ2RvbV9pbnRlcnNlY3QoKSwgdGhpcyBkb2VzIHRoZSByZWFsCi0gKiBtYXRoZW1hdGljYWwgaW50ZXJzZWN0aW9uIGZ1biAqLworLyoKKyAqIEhlbHBlciBmb3IgcmVnZG9tX2ludGVyc2VjdCgpLCB0aGlzIGRvZXMgdGhlIHJlYWwKKyAqIG1hdGhlbWF0aWNhbCBpbnRlcnNlY3Rpb24gZnVuCisgKi8KIHN0YXRpYyBpbnQgcmVnX3J1bGVzX2ludGVyc2VjdCgKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMSwKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMiwKQEAgLTcxOSwxMSArNzYxLDEzIEBACiAJaWYgKCFyZDEgfHwgIXJkMikKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBGaXJzdCB3ZSBnZXQgYSBjb3VudCBvZiB0aGUgcnVsZXMgd2UnbGwgbmVlZCwgdGhlbiB3ZSBhY3R1YWxseQorCS8qCisJICogRmlyc3Qgd2UgZ2V0IGEgY291bnQgb2YgdGhlIHJ1bGVzIHdlJ2xsIG5lZWQsIHRoZW4gd2UgYWN0dWFsbHkKIAkgKiBidWlsZCB0aGVtLiBUaGlzIGlzIHRvIHNvIHdlIGNhbiBtYWxsb2MoKSBhbmQgZnJlZSgpIGEKIAkgKiByZWdkb21haW4gb25jZS4gVGhlIHJlYXNvbiB3ZSB1c2UgcmVnX3J1bGVzX2ludGVyc2VjdCgpIGhlcmUKIAkgKiBpcyBpdCB3aWxsIHJldHVybiAtRUlOVkFMIGlmIHRoZSBydWxlIGNvbXB1dGVkIG1ha2VzIG5vIHNlbnNlLgotCSAqIEFsbCBydWxlcyB0aGF0IGRvIGNoZWNrIG91dCBPSyBhcmUgdmFsaWQuICovCisJICogQWxsIHJ1bGVzIHRoYXQgZG8gY2hlY2sgb3V0IE9LIGFyZSB2YWxpZC4KKwkgKi8KIAogCWZvciAoeCA9IDA7IHggPCByZDEtPm5fcmVnX3J1bGVzOyB4KyspIHsKIAkJcnVsZTEgPSAmcmQxLT5yZWdfcnVsZXNbeF07CkBAIC03NTEsMTQgKzc5NSwxOCBAQAogCQlydWxlMSA9ICZyZDEtPnJlZ19ydWxlc1t4XTsKIAkJZm9yICh5ID0gMDsgeSA8IHJkMi0+bl9yZWdfcnVsZXM7IHkrKykgewogCQkJcnVsZTIgPSAmcmQyLT5yZWdfcnVsZXNbeV07Ci0JCQkvKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKKwkJCS8qCisJCQkgKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKIAkJCSAqIHdyaXRlIHRvIHRoZSB0YXJnZXQgcnVsZSBkaXJlY3RseSBzYXZpbmcgb3Vyc2VsdmVzCi0JCQkgKiBhIG1lbWNweSgpICovCisJCQkgKiBhIG1lbWNweSgpCisJCQkgKi8KIAkJCWludGVyc2VjdGVkX3J1bGUgPSAmcmQtPnJlZ19ydWxlc1tydWxlX2lkeF07CiAJCQlyID0gcmVnX3J1bGVzX2ludGVyc2VjdChydWxlMSwgcnVsZTIsCiAJCQkJaW50ZXJzZWN0ZWRfcnVsZSk7Ci0JCQkvKiBObyBuZWVkIHRvIG1lbXNldCBoZXJlIHRoZSBpbnRlcnNlY3RlZCBydWxlIGhlcmUgYXMKLQkJCSAqIHdlJ3JlIG5vdCB1c2luZyB0aGUgc3RhY2sgYW55bW9yZSAqLworCQkJLyoKKwkJCSAqIE5vIG5lZWQgdG8gbWVtc2V0IGhlcmUgdGhlIGludGVyc2VjdGVkIHJ1bGUgaGVyZSBhcworCQkJICogd2UncmUgbm90IHVzaW5nIHRoZSBzdGFjayBhbnltb3JlCisJCQkgKi8KIAkJCWlmIChyKQogCQkJCWNvbnRpbnVlOwogCQkJcnVsZV9pZHgrKzsKQEAgLTc3Nyw4ICs4MjUsMTAgQEAKIAlyZXR1cm4gcmQ7CiB9CiAKLS8qIFhYWDogYWRkIHN1cHBvcnQgZm9yIHRoZSByZXN0IG9mIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncywgd2UgbWF5Ci0gKiB3YW50IHRvIGp1c3QgaGF2ZSB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUgdXNlIHRoZXNlICovCisvKgorICogWFhYOiBhZGQgc3VwcG9ydCBmb3IgdGhlIHJlc3Qgb2YgZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzLCB3ZSBtYXkKKyAqIHdhbnQgdG8ganVzdCBoYXZlIHRoZSBjaGFubmVsIHN0cnVjdHVyZSB1c2UgdGhlc2UKKyAqLwogc3RhdGljIHUzMiBtYXBfcmVnZG9tX2ZsYWdzKHUzMiByZF9mbGFncykKIHsKIAl1MzIgY2hhbm5lbF9mbGFncyA9IDA7CkBAIC03OTEsNDggKzg0MSw0NSBAQAogCXJldHVybiBjaGFubmVsX2ZsYWdzOwogfQogCi0vKioKLSAqIGZyZXFfcmVnX2luZm8gLSBnZXQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeQotICogQGNlbnRlcl9mcmVxOiBGcmVxdWVuY3kgaW4gS0h6IGZvciB3aGljaCB3ZSB3YW50IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yCi0gKiBAYmFuZHdpZHRoOiB0aGUgYmFuZHdpZHRoIHJlcXVpcmVtZW50IHlvdSBoYXZlIGluIEtIeiwgaWYgeW91IGRvIG5vdCBoYXZlIG9uZQotICogCXlvdSBjYW4gc2V0IHRoaXMgdG8gMC4gSWYgdGhpcyBmcmVxdWVuY3kgaXMgYWxsb3dlZCB3ZSB0aGVuIHNldAotICogCXRoaXMgdmFsdWUgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBiYW5kd2lkdGguCi0gKiBAcmVnX3J1bGU6IHRoZSByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggd2UgaGF2ZSBmb3IgdGhpcyBmcmVxdWVuY3kKLSAqCi0gKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBzcGVjaWZpYyBmcmVxdWVuY3kgb24KLSAqIGEgZ2l2ZW4gd2lyZWxlc3MgZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGhhcyBhIHNwZWNpZmljIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBpdCB3YW50cyB0byBmb2xsb3cgd2UgcmVzcGVjdCB0aGF0IHVubGVzcyBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQKLSAqIGFuZCBwcm9jZXNzZWQgYWxyZWFkeS4KLSAqCi0gKiBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBhIHZhbGlkIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCBkb2VzCi0gKiBhcHBseSB0byB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgb3RoZXJ3aXNlIGl0IHJldHVybnMgbm9uLXplcm8uIEl0IHdpbGwKLSAqIGFsc28gcmV0dXJuIC1FUkFOR0UgaWYgd2UgZGV0ZXJtaW5lIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBkb2VzIG5vdCBldmVuIGhhdmUKLSAqIGEgcmVndWxhdG9yeSBydWxlIGZvciBhIGZyZXF1ZW5jeSByYW5nZSBpbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLiBTZWUKLSAqIGZyZXFfaW5fcnVsZV9iYW5kKCkgZm9yIG91ciBjdXJyZW50IGRlZmluaXRpb24gb2YgYSBiYW5kIC0tIHRoaXMgaXMgcHVyZWx5Ci0gKiBzdWJqZWN0aXZlIGFuZCByaWdodCBub3cgaXRzIDgwMi4xMSBzcGVjaWZpYy4KLSAqLwotc3RhdGljIGludCBmcmVxX3JlZ19pbmZvKHUzMiBjZW50ZXJfZnJlcSwgdTMyICpiYW5kd2lkdGgsCi0JCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlKQorc3RhdGljIGludCBmcmVxX3JlZ19pbmZvX3JlZ2Qoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIHUzMiBjZW50ZXJfZnJlcSwKKwkJCSAgICAgIHUzMiAqYmFuZHdpZHRoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1c3RvbV9yZWdkKQogewogCWludCBpOwogCWJvb2wgYmFuZF9ydWxlX2ZvdW5kID0gZmFsc2U7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CiAJdTMyIG1heF9iYW5kd2lkdGggPSAwOwogCi0JaWYgKCFjZmc4MDIxMV9yZWdkb21haW4pCisJcmVnZCA9IGN1c3RvbV9yZWdkID8gY3VzdG9tX3JlZ2QgOiBjZmc4MDIxMV9yZWdkb21haW47CisKKwkvKgorCSAqIEZvbGxvdyB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIHByZXNlbnQsIHVubGVzcyBhIGNvdW50cnkKKwkgKiBJRSBoYXMgYmVlbiBwcm9jZXNzZWQgb3IgYSB1c2VyIHdhbnRzIHRvIGhlbHAgY29tcGxhaW5jZSBmdXJ0aGVyCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFICYmCisJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSICYmCisJICAgIHdpcGh5LT5yZWdkKQorCQlyZWdkID0gd2lwaHktPnJlZ2Q7CisKKwlpZiAoIXJlZ2QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZzgwMjExX3JlZ2RvbWFpbi0+bl9yZWdfcnVsZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZWdkLT5uX3JlZ19ydWxlczsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJyOwogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyID0gTlVMTDsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwciA9IE5VTEw7CiAKLQkJcnIgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCXJyID0gJnJlZ2QtPnJlZ19ydWxlc1tpXTsKIAkJZnIgPSAmcnItPmZyZXFfcmFuZ2U7CiAJCXByID0gJnJyLT5wb3dlcl9ydWxlOwogCi0JCS8qIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIG9uZSBmcmVxdWVuY3kgcnVsZSB3YXMKKwkJLyoKKwkJICogV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgb25lIGZyZXF1ZW5jeSBydWxlIHdhcwogCQkgKiB3YXMgaW4gY2VudGVyX2ZyZXEncyBiYW5kLCB0aGF0J3MgZW5vdWdoLCBzbyBsZXRzCi0JCSAqIG5vdCBvdmVyd3JpdGUgaXQgb25jZSBmb3VuZCAqLworCQkgKiBub3Qgb3ZlcndyaXRlIGl0IG9uY2UgZm91bmQKKwkJICovCiAJCWlmICghYmFuZF9ydWxlX2ZvdW5kKQogCQkJYmFuZF9ydWxlX2ZvdW5kID0gZnJlcV9pbl9ydWxlX2JhbmQoZnIsIGNlbnRlcl9mcmVxKTsKIApAQCAtODUwLDYgKzg5NywxNCBAQAogCiAJcmV0dXJuICFtYXhfYmFuZHdpZHRoOwogfQorRVhQT1JUX1NZTUJPTChmcmVxX3JlZ19pbmZvKTsKKworaW50IGZyZXFfcmVnX2luZm8oc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNlbnRlcl9mcmVxLCB1MzIgKmJhbmR3aWR0aCwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUpCit7CisJcmV0dXJuIGZyZXFfcmVnX2luZm9fcmVnZCh3aXBoeSwgY2VudGVyX2ZyZXEsCisJCWJhbmR3aWR0aCwgcmVnX3J1bGUsIE5VTEwpOworfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgpCkBAIC04NjEsNiArOTE2LDExIEBACiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwb3dlcl9ydWxlID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5ID0gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKIAogCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOwogCUJVR19PTihjaGFuX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscyk7CkBAIC04NjgsMTEgKzkyOCwxMiBAQAogCiAJZmxhZ3MgPSBjaGFuLT5vcmlnX2ZsYWdzOwogCi0JciA9IGZyZXFfcmVnX2luZm8oTUhaX1RPX0tIWihjaGFuLT5jZW50ZXJfZnJlcSksCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIE1IWl9UT19LSFooY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQkmbWF4X2JhbmR3aWR0aCwgJnJlZ19ydWxlKTsKIAogCWlmIChyKSB7Ci0JCS8qIFRoaXMgbWVhbnMgbm8gcmVndWxhdG9yeSBydWxlIHdhcyBmb3VuZCBpbiB0aGUgY291bnRyeSBJRQorCQkvKgorCQkgKiBUaGlzIG1lYW5zIG5vIHJlZ3VsYXRvcnkgcnVsZSB3YXMgZm91bmQgaW4gdGhlIGNvdW50cnkgSUUKIAkJICogd2l0aCBhIGZyZXF1ZW5jeSByYW5nZSBvbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLCBzaW5jZQogCQkgKiBJRUVFLTgwMi4xMSBhbGxvd3MgZm9yIGEgY291bnRyeSBJRSB0byBoYXZlIGEgc3Vic2V0IG9mIHRoZQogCQkgKiByZWd1bGF0b3J5IGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGEgY291bnRyeSB3ZSBpZ25vcmUKQEAgLTg4Myw3ICs5NDQsOCBAQAogCQkgKiBodHRwOi8vdGlueXVybC5jb20vMTFkLWNsYXJpZmljYXRpb24KIAkJICovCiAJCWlmIChyID09IC1FUkFOR0UgJiYKLQkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBMZWF2aW5nIGNoYW5uZWwgJWQgTUh6ICIKIAkJCQkiaW50YWN0IG9uICVzIC0gbm8gcnVsZSBmb3VuZCBpbiBiYW5kIG9uICIKQEAgLTg5MSwxMCArOTUzLDEzIEBACiAJCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKICNlbmRpZgogCQl9IGVsc2UgewotCQkvKiBJbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgY291bnRyeSBJRSBoYXMgYXQgbGVhc3Qgb25lIHJlZyBydWxlCi0JCSAqIGZvciB0aGUgYmFuZCBzbyB3ZSByZXNwZWN0IGl0cyBiYW5kIGRlZmluaXRpb25zICovCisJCS8qCisJCSAqIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBjb3VudHJ5IElFIGhhcyBhdCBsZWFzdCBvbmUgcmVnIHJ1bGUKKwkJICogZm9yIHRoZSBiYW5kIHNvIHdlIHJlc3BlY3QgaXRzIGJhbmQgZGVmaW5pdGlvbnMKKwkJICovCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwotCQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKKwkJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogRGlzYWJsaW5nICIKIAkJCQkJImNoYW5uZWwgJWQgTUh6IG9uICVzIGR1ZSB0byAiCiAJCQkJCSJDb3VudHJ5IElFXG4iLApAQCAtOTA4LDYgKzk3MywyNCBAQAogCiAJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKIAorCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSICYmCisJICAgIHJlcXVlc3Rfd2lwaHkgJiYgcmVxdWVzdF93aXBoeSA9PSB3aXBoeSAmJgorCSAgICByZXF1ZXN0X3dpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSkgeworCQkvKgorCQkgKiBUaGlzIGdhdXJhbnRlZXMgdGhlIGRyaXZlcidzIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbgorCQkgKiB3aWxsIGFsd2F5cyBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgZnVydGhlciByZWd1bGF0b3J5CisJCSAqIHNldHRpbmdzCisJCSAqLworCQljaGFuLT5mbGFncyA9IGNoYW4tPm9yaWdfZmxhZ3MgPQorCQkJbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpOworCQljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gY2hhbi0+b3JpZ19tYWcgPQorCQkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwkJY2hhbi0+bWF4X2JhbmR3aWR0aCA9IEtIWl9UT19NSFoobWF4X2JhbmR3aWR0aCk7CisJCWNoYW4tPm1heF9wb3dlciA9IGNoYW4tPm9yaWdfbXB3ciA9CisJCQkoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKKwkJcmV0dXJuOworCX0KKwogCWNoYW4tPmZsYWdzID0gZmxhZ3MgfCBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncyk7CiAJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IG1pbihjaGFuLT5vcmlnX21hZywKIAkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKSk7CkBAIC05MzEsMTMyICsxMDE0LDQwNyBAQAogCQloYW5kbGVfY2hhbm5lbCh3aXBoeSwgYmFuZCwgaSk7CiB9CiAKLXN0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiB0cnVlOwotCWlmIChzZXRieSA9PSBSRUdET01fU0VUX0JZX0NPUkUgJiYKLQkJICB3aXBoeS0+ZndfaGFuZGxlc19yZWd1bGF0b3J5KQorCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgJiYKKwkJICB3aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkpCisJCXJldHVybiB0cnVlOworCS8qCisJICogd2lwaHktPnJlZ2Qgd2lsbCBiZSBzZXQgb25jZSB0aGUgZGV2aWNlIGhhcyBpdHMgb3duCisJICogZGVzaXJlZCByZWd1bGF0b3J5IGRvbWFpbiBzZXQKKwkgKi8KKwlpZiAod2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ICYmICF3aXBoeS0+cmVnZCAmJgorCSAgICAhaXNfd29ybGRfcmVnZG9tKGxhc3RfcmVxdWVzdC0+YWxwaGEyKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSByZWdfc2V0X2J5IHNldGJ5KQorc3RhdGljIHZvaWQgdXBkYXRlX2FsbF93aXBoeV9yZWd1bGF0b3J5KGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCi0JCWlmICghaWdub3JlX3JlZ191cGRhdGUoJmRydi0+d2lwaHksIHNldGJ5KSkKLQkJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBzZXRieSk7CisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBpbml0aWF0b3IpOwogfQogCi12b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkgICAgICBzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbikKK3sKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisjZGVmaW5lIFJFR19ERUJVR19CRUFDT05fRkxBRyhkZXNjKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBFbmFibGluZyAiIGRlc2MgIiBvbiAiIFwKKwkJImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsIFwKKwkJcmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSwgXAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwocmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSksIFwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2Vsc2UKKyNkZWZpbmUgUkVHX0RFQlVHX0JFQUNPTl9GTEFHKGRlc2MpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisJY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbY2hhbl9pZHhdOworCisJaWYgKGxpa2VseShjaGFuLT5jZW50ZXJfZnJlcSAhPSByZWdfYmVhY29uLT5jaGFuLmNlbnRlcl9mcmVxKSkKKwkJcmV0dXJuOworCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSB7CisJCWNoYW4tPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCVJFR19ERUJVR19CRUFDT05fRkxBRygiYWN0aXZlIHNjYW5uaW5nIik7CisJfQorCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSUJTUykgeworCQljaGFuLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJUkVHX0RFQlVHX0JFQUNPTl9GTEFHKCJiZWFjb25pbmciKTsKKwl9CisKKwljaGFuLT5iZWFjb25fZm91bmQgPSB0cnVlOworI3VuZGVmIFJFR19ERUJVR19CRUFDT05fRkxBRworfQorCisvKgorICogQ2FsbGVkIHdoZW4gYSBzY2FuIG9uIGEgd2lwaHkgZmluZHMgYSBiZWFjb24gb24KKyAqIG5ldyBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9uZXdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJaGFuZGxlX3JlZ19iZWFjb24od2lwaHksIGksIHJlZ19iZWFjb24pOworfQorCisvKgorICogQ2FsbGVkIHVwb24gcmVnIGNoYW5nZXMgb3IgYSBuZXcgd2lwaHkgaXMgYWRkZWQKKyAqLworc3RhdGljIHZvaWQgd2lwaHlfdXBkYXRlX2JlYWNvbl9yZWcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVnX2JlYWNvbl9saXN0KSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWdfYmVhY29uLCAmcmVnX2JlYWNvbl9saXN0LCBsaXN0KSB7CisJCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCQljb250aW51ZTsKKwkJc2JhbmQgPSB3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXTsKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCQloYW5kbGVfcmVnX2JlYWNvbih3aXBoeSwgaSwgcmVnX2JlYWNvbik7CisJfQorfQorCitzdGF0aWMgYm9vbCByZWdfaXNfd29ybGRfcm9hbWluZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCWlmIChpc193b3JsZF9yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpIHx8CisJICAgICh3aXBoeS0+cmVnZCAmJiBpc193b3JsZF9yZWdkb20od2lwaHktPnJlZ2QtPmFscGhhMikpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKKwkgICAgd2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJlYXAgdGhlIGFkdmFudGFnZXMgb2YgcHJldmlvdXNseSBmb3VuZCBiZWFjb25zICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19iZWFjb25zKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJaWYgKCFyZWdfaXNfd29ybGRfcm9hbWluZyh3aXBoeSkpCisJCXJldHVybjsKKwl3aXBoeV91cGRhdGVfYmVhY29uX3JlZyh3aXBoeSk7Cit9CisKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKworCWlmIChpZ25vcmVfcmVnX3VwZGF0ZSh3aXBoeSwgaW5pdGlhdG9yKSkKKwkJZ290byBvdXQ7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJaGFuZGxlX2JhbmQod2lwaHksIGJhbmQpOworCX0KK291dDoKKwlyZWdfcHJvY2Vzc19iZWFjb25zKHdpcGh5KTsKKwlpZiAod2lwaHktPnJlZ19ub3RpZmllcikKKwkJd2lwaHktPnJlZ19ub3RpZmllcih3aXBoeSwgbGFzdF9yZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NoYW5uZWxfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwlpbnQgcjsKKwl1MzIgbWF4X2JhbmR3aWR0aCA9IDA7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGUgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisJQlVHX09OKGNoYW5faWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKTsKKwljaGFuID0gJnNiYW5kLT5jaGFubmVsc1tjaGFuX2lkeF07CisKKwlyID0gZnJlcV9yZWdfaW5mb19yZWdkKHdpcGh5LCBNSFpfVE9fS0haKGNoYW4tPmNlbnRlcl9mcmVxKSwKKwkJJm1heF9iYW5kd2lkdGgsICZyZWdfcnVsZSwgcmVnZCk7CisKKwlpZiAocikgeworCQljaGFuLT5mbGFncyA9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOworCQlyZXR1cm47CisJfQorCisJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKKworCWNoYW4tPmZsYWdzIHw9IG1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKKwljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwljaGFuLT5tYXhfYmFuZHdpZHRoID0gS0haX1RPX01IWihtYXhfYmFuZHdpZHRoKTsKKwljaGFuLT5tYXhfcG93ZXIgPSAoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JhbmRfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCUJVR19PTighd2lwaHktPmJhbmRzW2JhbmRdKTsKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKQorCQloYW5kbGVfY2hhbm5lbF9jdXN0b20od2lwaHksIGJhbmQsIGksIHJlZ2QpOworfQorCisvKiBVc2VkIGJ5IGRyaXZlcnMgcHJpb3IgdG8gd2lwaHkgcmVnaXN0cmF0aW9uICovCit2b2lkIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpCiB7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKIAkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKLQkJCWhhbmRsZV9iYW5kKHdpcGh5LCBiYW5kKTsKLQkJaWYgKHdpcGh5LT5yZWdfbm90aWZpZXIpCi0JCQl3aXBoeS0+cmVnX25vdGlmaWVyKHdpcGh5LCBzZXRieSk7CisJCQloYW5kbGVfYmFuZF9jdXN0b20od2lwaHksIGJhbmQsIHJlZ2QpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wod2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkpOwogCi0vKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQotICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMgKi8KK3N0YXRpYyBpbnQgcmVnX2NvcHlfcmVnZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqKmRzdF9yZWdkLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzcmNfcmVnZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKKwlpbnQgc2l6ZV9vZl9yZWdkID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXNpemVfb2ZfcmVnZCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikgKworCSAgKChzcmNfcmVnZC0+bl9yZWdfcnVsZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwlyZWdkID0ga3phbGxvYyhzaXplX29mX3JlZ2QsIEdGUF9LRVJORUwpOworCWlmICghcmVnZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkocmVnZCwgc3JjX3JlZ2QsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikpOworCisJZm9yIChpID0gMDsgaSA8IHNyY19yZWdkLT5uX3JlZ19ydWxlczsgaSsrKQorCQltZW1jcHkoJnJlZ2QtPnJlZ19ydWxlc1tpXSwgJnNyY19yZWdkLT5yZWdfcnVsZXNbaV0sCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOworCisJKmRzdF9yZWdkID0gcmVnZDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCBieSBpZ25vcmVfcmVxdWVzdCgpIHRvIGluZGljYXRlCisgKiBpdCBoYXMgYmVlbiBkZXRlcm1pbmVkIHdlIHNob3VsZCBpbnRlcnNlY3QgdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICovCiAjZGVmaW5lIFJFR19JTlRFUlNFQ1QJMQogCiAvKiBUaGlzIGhhcyB0aGUgbG9naWMgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuIGEgbmV3IHJlcXVlc3QKICAqIHNob3VsZCBiZSBpZ25vcmVkLiAqLwotc3RhdGljIGludCBpZ25vcmVfcmVxdWVzdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICBjb25zdCBjaGFyICphbHBoYTIpCitzdGF0aWMgaW50IGlnbm9yZV9yZXF1ZXN0KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnBlbmRpbmdfcmVxdWVzdCkKIHsKKwlzdHJ1Y3Qgd2lwaHkgKmxhc3Rfd2lwaHkgPSBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCS8qIEFsbCBpbml0aWFsIHJlcXVlc3RzIGFyZSByZXNwZWN0ZWQgKi8KIAlpZiAoIWxhc3RfcmVxdWVzdCkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKHNldF9ieSkgewotCWNhc2UgUkVHRE9NX1NFVF9CWV9JTklUOgorCXN3aXRjaCAocGVuZGluZ19yZXF1ZXN0LT5pbml0aWF0b3IpIHsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgogCQlyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09SRToKLQkJLyoKLQkJICogQWx3YXlzIHJlc3BlY3QgbmV3IHdpcmVsZXNzIGNvcmUgaGludHMsIHNob3VsZCBvbmx5IGhhcHBlbgotCQkgKiB3aGVuIHVwZGF0aW5nIHRoZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBhdCBpbml0LgotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUU6Ci0JCWlmICh1bmxpa2VseSghaXNfYW5fYWxwaGEyKGFscGhhMikpKQorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisKKwkJbGFzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwkJaWYgKHVubGlrZWx5KCFpc19hbl9hbHBoYTIocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCQlpZiAobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkgeworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCQlpZiAobGFzdF93aXBoeSAhPSB3aXBoeSkgewogCQkJCS8qCiAJCQkJICogVHdvIGNhcmRzIHdpdGggdHdvIEFQcyBjbGFpbWluZyBkaWZmZXJlbnQKIAkJCQkgKiBkaWZmZXJlbnQgQ291bnRyeSBJRSBhbHBoYTJzLiBXZSBjb3VsZAogCQkJCSAqIGludGVyc2VjdCB0aGVtLCBidXQgdGhhdCBzZWVtcyB1bmxpa2VseQogCQkJCSAqIHRvIGJlIGNvcnJlY3QuIFJlamVjdCBzZWNvbmQgb25lIGZvciBub3cuCiAJCQkJICovCi0JCQkJaWYgKCFhbHBoYTJfZXF1YWwoYWxwaGEyLAotCQkJCQkJICBjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMikpCisJCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKIAkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJCXJldHVybiAtRUFMUkVBRFk7CiAJCQl9Ci0JCQkvKiBUd28gY29uc2VjdXRpdmUgQ291bnRyeSBJRSBoaW50cyBvbiB0aGUgc2FtZSB3aXBoeS4KLQkJCSAqIFRoaXMgc2hvdWxkIGJlIHBpY2tlZCB1cCBlYXJseSBieSB0aGUgZHJpdmVyL3N0YWNrICovCi0JCQlpZiAoV0FSTl9PTighYWxwaGEyX2VxdWFsKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyLAotCQkJCSAgYWxwaGEyKSkpCisJCQkvKgorCQkJICogVHdvIGNvbnNlY3V0aXZlIENvdW50cnkgSUUgaGludHMgb24gdGhlIHNhbWUgd2lwaHkuCisJCQkgKiBUaGlzIHNob3VsZCBiZSBwaWNrZWQgdXAgZWFybHkgYnkgdGhlIGRyaXZlci9zdGFjaworCQkJICovCisJCQlpZiAoV0FSTl9PTihyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpKQogCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAkJfQogCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKLQljYXNlIFJFR0RPTV9TRVRfQllfRFJJVkVSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9EUklWRVIpCisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOgorCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpIHsKKwkJCWlmIChpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pKQorCQkJCXJldHVybiAwOworCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKKwkJCQlyZXR1cm4gMDsKIAkJCXJldHVybiAtRUFMUkVBRFk7Ci0JCXJldHVybiAwOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9VU0VSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQorCQl9CisKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBoYXBwZW4gaWYgeW91IHVucGx1ZyBhbmQgcGx1ZyB5b3VyIGNhcmQKKwkJICogYmFjayBpbiBvciBpZiB5b3UgYWRkIGEgbmV3IGRldmljZSBmb3Igd2hpY2ggdGhlIHByZXZpb3VzbHkKKwkJICogbG9hZGVkIGNhcmQgYWxzbyBhZ3JlZXMgb24gdGhlIHJlZ3VsYXRvcnkgZG9tYWluLgorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCQlyZXR1cm4gLUVBTFJFQURZOworCisJCXJldHVybiBSRUdfSU5URVJTRUNUOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKIAkJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCQkvKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCi0JCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAgKi8KLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfVVNFUiAmJgorCQkvKgorCQkgKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCisJCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAKKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiAmJgogCQkJICBsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJLyoKKwkJICogUHJvY2VzcyB1c2VyIHJlcXVlc3RzIG9ubHkgYWZ0ZXIgcHJldmlvdXMgdXNlci9kcml2ZXIvY29yZQorCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKSB7CisJCQlpZiAocmVnZG9tX2NoYW5nZXMobGFzdF9yZXF1ZXN0LT5hbHBoYTIpKQorCQkJCXJldHVybiAtRUFHQUlOOworCQl9CisKKwkJaWYgKCFpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pICYmCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQorCQkJcmV0dXJuIC1FQUxSRUFEWTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfZHJ2X211dGV4ICovCi1pbnQgX19yZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldF9ieSwKLQkJCWNvbnN0IGNoYXIgKmFscGhhMiwKLQkJCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52KQorLyoqCisgKiBfX3JlZ3VsYXRvcnlfaGludCAtIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUgYSByZWd1bGF0b3J5IGRvbWFpbgorICogQHdpcGh5OiBpZiB0aGUgaGludCBjb21lcyBmcm9tIGNvdW50cnkgaW5mb3JtYXRpb24gZnJvbSBhbiBBUCwgdGhpcworICoJaXMgcmVxdWlyZWQgdG8gYmUgc2V0IHRvIHRoZSB3aXBoeSB0aGF0IHJlY2VpdmVkIHRoZSBpbmZvcm1hdGlvbgorICogQHBlbmRpbmdfcmVxdWVzdDogdGhlIHJlZ3VsYXRvcnkgcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisgKgorICogVGhlIFdpcmVsZXNzIHN1YnN5c3RlbSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZQorICogd2hhdCBpdCBiZWxpZXZlcyBzaG91bGQgYmUgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uCisgKgorICogUmV0dXJucyB6ZXJvIGlmIGFsbCB3ZW50IGZpbmUsICUtRUFMUkVBRFkgaWYgYSByZWd1bGF0b3J5IGRvbWFpbiBoYWQKKyAqIGFscmVhZHkgYmVlbiBzZXQgb3Igb3RoZXIgc3RhbmRhcmQgZXJyb3IgY29kZXMuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfbXV0ZXgKKyAqLworc3RhdGljIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpwZW5kaW5nX3JlcXVlc3QpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAlib29sIGludGVyc2VjdCA9IGZhbHNlOwogCWludCByID0gMDsKIAotCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgc2V0X2J5LCBhbHBoYTIpOworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKLQlpZiAociA9PSBSRUdfSU5URVJTRUNUKQorCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgcGVuZGluZ19yZXF1ZXN0KTsKKworCWlmIChyID09IFJFR19JTlRFUlNFQ1QpIHsKKwkJaWYgKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CisJCQlyID0gcmVnX2NvcHlfcmVnZCgmd2lwaHktPnJlZ2QsIGNmZzgwMjExX3JlZ2RvbWFpbik7CisJCQlpZiAocikgeworCQkJCWtmcmVlKHBlbmRpbmdfcmVxdWVzdCk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KIAkJaW50ZXJzZWN0ID0gdHJ1ZTsKLQllbHNlIGlmIChyKQorCX0gZWxzZSBpZiAocikgeworCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yeSBkb21haW4gYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZQorCQkgKiBkcml2ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQganVzdCBjb3B5IGl0IHRvIHRoZQorCQkgKiB3aXBoeQorCQkgKi8KKwkJaWYgKHIgPT0gLUVBTFJFQURZICYmCisJCSAgICBwZW5kaW5nX3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJciA9IHJlZ19jb3B5X3JlZ2QoJndpcGh5LT5yZWdkLCBjZmc4MDIxMV9yZWdkb21haW4pOworCQkJaWYgKHIpIHsKKwkJCQlrZnJlZShwZW5kaW5nX3JlcXVlc3QpOworCQkJCXJldHVybiByOworCQkJfQorCQkJciA9IC1FQUxSRUFEWTsKKwkJCWdvdG8gbmV3X3JlcXVlc3Q7CisJCX0KKwkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKIAkJcmV0dXJuIHI7CisJfQogCi0JcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLAotCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcXVlc3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOwotCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKLQlyZXF1ZXN0LT5pbml0aWF0b3IgPSBzZXRfYnk7Ci0JcmVxdWVzdC0+d2lwaHkgPSB3aXBoeTsKLQlyZXF1ZXN0LT5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNvdW50cnlfaWVfY2hlY2tzdW07Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9lbnYgPSBlbnY7Ci0KK25ld19yZXF1ZXN0OgogCWtmcmVlKGxhc3RfcmVxdWVzdCk7Ci0JbGFzdF9yZXF1ZXN0ID0gcmVxdWVzdDsKKworCWxhc3RfcmVxdWVzdCA9IHBlbmRpbmdfcmVxdWVzdDsKKwlsYXN0X3JlcXVlc3QtPmludGVyc2VjdCA9IGludGVyc2VjdDsKKworCXBlbmRpbmdfcmVxdWVzdCA9IE5VTEw7CisKKwkvKiBXaGVuIHIgPT0gUkVHX0lOVEVSU0VDVCB3ZSBkbyBuZWVkIHRvIGNhbGwgQ1JEQSAqLworCWlmIChyIDwgMCkgeworCQkvKgorCQkgKiBTaW5jZSBDUkRBIHdpbGwgbm90IGJlIGNhbGxlZCBpbiB0aGlzIGNhc2UgYXMgd2UgYWxyZWFkeQorCQkgKiBoYXZlIGFwcGxpZWQgdGhlIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbiBiZWZvcmUgd2UganVzdAorCQkgKiBpbmZvcm0gdXNlcnNwYWNlIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSByZXF1ZXN0CisJCSAqLworCQlpZiAociA9PSAtRUFMUkVBRFkpCisJCQlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChsYXN0X3JlcXVlc3QpOworCQlyZXR1cm4gcjsKKwl9CisKIAkvKgogCSAqIE5vdGU6IFdoZW4gQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIGVuYWJsZWQKIAkgKiBBTkQgaWYgQ1JEQSBpcyBOT1QgcHJlc2VudCBub3RoaW5nIHdpbGwgaGFwcGVuLCBpZiBzb21lb25lCkBAIC0xMDY3LDI5ICsxNDI1LDE5NCBAQAogCSAqCiAJICogdG8gaW50ZXJzZWN0IHdpdGggdGhlIHN0YXRpYyByZAogCSAqLwotCXJldHVybiBjYWxsX2NyZGEoYWxwaGEyKTsKKwlyZXR1cm4gY2FsbF9jcmRhKGxhc3RfcmVxdWVzdC0+YWxwaGEyKTsKIH0KIAotdm9pZCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQorLyogVGhpcyBjdXJyZW50bHkgb25seSBwcm9jZXNzZXMgdXNlciBhbmQgZHJpdmVyIHJlZ3VsYXRvcnkgaGludHMgKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX2hpbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVnX3JlcXVlc3QpCiB7CisJaW50IHIgPSAwOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBOVUxMOworCisJQlVHX09OKCFyZWdfcmVxdWVzdC0+YWxwaGEyKTsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICh3aXBoeV9pZHhfdmFsaWQocmVnX3JlcXVlc3QtPndpcGh5X2lkeCkpCisJCXdpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KHJlZ19yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJaWYgKHJlZ19yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiAmJgorCSAgICAhd2lwaHkpIHsKKwkJa2ZyZWUocmVnX3JlcXVlc3QpOworCQlnb3RvIG91dDsKKwl9CisKKwlyID0gX19yZWd1bGF0b3J5X2hpbnQod2lwaHksIHJlZ19yZXF1ZXN0KTsKKwkvKiBUaGlzIGlzIHJlcXVpcmVkIHNvIHRoYXQgdGhlIG9yaWdfKiBwYXJhbWV0ZXJzIGFyZSBzYXZlZCAqLworCWlmIChyID09IC1FQUxSRUFEWSAmJiB3aXBoeSAmJiB3aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkpCisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCByZWdfcmVxdWVzdC0+aW5pdGlhdG9yKTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKK30KKworLyogUHJvY2Vzc2VzIHJlZ3VsYXRvcnkgaGludHMsIHRoaXMgaXMgYWxsIHRoZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfKiAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfcGVuZGluZ19oaW50cyh2b2lkKQorCXsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdDsKKworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKSB7CisJCXJlZ19yZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmcmVnX3JlcXVlc3RzX2xpc3QsCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0LAorCQkJCQkgICAgICAgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnJlZ19yZXF1ZXN0LT5saXN0KTsKKworCQlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCQlyZWdfcHJvY2Vzc19oaW50KHJlZ19yZXF1ZXN0KTsKKwkJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7Cit9CisKKy8qIFByb2Nlc3NlcyBiZWFjb24gaGludHMgLS0gdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNvdW50cnkgSUVzICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cyh2b2lkKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCByZWdfYmVhY29uICpwZW5kaW5nX2JlYWNvbiwgKnRtcDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCS8qIFRoaXMgZ29lcyB0aHJvdWdoIHRoZSBfcGVuZGluZ18gYmVhY29uIGxpc3QgKi8KKwlzcGluX2xvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVnX3BlbmRpbmdfYmVhY29ucykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZW5kaW5nX2JlYWNvbiwgdG1wLAorCQkJCSAmcmVnX3BlbmRpbmdfYmVhY29ucywgbGlzdCkgeworCisJCWxpc3RfZGVsX2luaXQoJnBlbmRpbmdfYmVhY29uLT5saXN0KTsKKworCQkvKiBBcHBsaWVzIHRoZSBiZWFjb24gaGludCB0byBjdXJyZW50IHdpcGh5cyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KQorCQkJd2lwaHlfdXBkYXRlX25ld19iZWFjb24oJmRydi0+d2lwaHksIHBlbmRpbmdfYmVhY29uKTsKKworCQkvKiBSZW1lbWJlcnMgdGhlIGJlYWNvbiBoaW50IGZvciBuZXcgd2lwaHlzIG9yIHJlZyBjaGFuZ2VzICovCisJCWxpc3RfYWRkX3RhaWwoJnBlbmRpbmdfYmVhY29uLT5saXN0LCAmcmVnX2JlYWNvbl9saXN0KTsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgcmVnX3RvZG8oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXJlZ19wcm9jZXNzX3BlbmRpbmdfaGludHMoKTsKKwlyZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cygpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHJlZ193b3JrLCByZWdfdG9kbyk7CisKK3N0YXRpYyB2b2lkIHF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnJlcXVlc3QtPmxpc3QsICZyZWdfcmVxdWVzdHNfbGlzdCk7CisJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKworCXNjaGVkdWxlX3dvcmsoJnJlZ193b3JrKTsKK30KKworLyogQ29yZSByZWd1bGF0b3J5IGhpbnQgLS0gaGFwcGVucyBvbmNlIGR1cmluZyBjZmc4MDIxMV9pbml0KCkgKi8KK3N0YXRpYyBpbnQgcmVndWxhdG9yeV9oaW50X2NvcmUoY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlCVUdfT04obGFzdF9yZXF1ZXN0KTsKKworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwKKwkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKKwlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVXNlciBoaW50cyAqLworaW50IHJlZ3VsYXRvcnlfaGludF91c2VyKGNvbnN0IGNoYXIgKmFscGhhMikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCiAJQlVHX09OKCFhbHBoYTIpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9EUklWRVIsIGFscGhhMiwgMCwgRU5WSVJPTl9BTlkpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CisJcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKKwlyZXF1ZXN0LT5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiwKKworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybiAwOworfQorCisvKiBEcml2ZXIgaGludHMgKi8KK2ludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlCVUdfT04oIWFscGhhMik7CisJQlVHX09OKCF3aXBoeSk7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKworCS8qIE11c3QgaGF2ZSByZWdpc3RlcmVkIHdpcGh5IGZpcnN0ICovCisJQlVHX09OKCF3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSk7CisKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50KTsKIAogc3RhdGljIGJvb2wgcmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQl1MzIgY291bnRyeV9pZV9jaGVja3N1bSkKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdC0+d2lwaHkpCisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJaWYgKCFyZXF1ZXN0X3dpcGh5KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGxpa2VseShsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KSkKKworCWlmIChsaWtlbHkocmVxdWVzdF93aXBoeSAhPSB3aXBoeSkpCiAJCXJldHVybiAhY291bnRyeV9pZV9pbnRlZ3JpdHlfY2hhbmdlcyhjb3VudHJ5X2llX2NoZWNrc3VtKTsKLQkvKiBXZSBzaG91bGQgbm90IGhhdmUgbGV0IHRoZXNlIHRocm91Z2ggYXQgdGhpcyBwb2ludCwgdGhleQorCS8qCisJICogV2Ugc2hvdWxkIG5vdCBoYXZlIGxldCB0aGVzZSB0aHJvdWdoIGF0IHRoaXMgcG9pbnQsIHRoZXkKIAkgKiBzaG91bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBlYXJsaWVyIGJ5IHRoZSBmaXJzdCBhbHBoYTIgY2hlY2sKLQkgKiBvbiB0aGUgZGV2aWNlICovCisJICogb24gdGhlIGRldmljZQorCSAqLwogCWlmIChXQVJOX09OKCFjb3VudHJ5X2llX2ludGVncml0eV9jaGFuZ2VzKGNvdW50cnlfaWVfY2hlY2tzdW0pKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTEwMywxMSArMTYyNiwxNCBAQAogCWNoYXIgYWxwaGEyWzJdOwogCXUzMiBjaGVja3N1bSA9IDA7CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52ID0gRU5WSVJPTl9BTlk7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmICghbGFzdF9yZXF1ZXN0KQorCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICh1bmxpa2VseSghbGFzdF9yZXF1ZXN0KSkgeworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwl9CiAKIAkvKiBJRSBsZW4gbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDIgKi8KIAlpZiAoY291bnRyeV9pZV9sZW4gJiAweDAxKQpAQCAtMTExNiw5ICsxNjQyLDExIEBACiAJaWYgKGNvdW50cnlfaWVfbGVuIDwgSUVFRTgwMjExX0NPVU5UUllfSUVfTUlOX0xFTikKIAkJZ290byBvdXQ7CiAKLQkvKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCisJLyoKKwkgKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCiAJICogY2FsbCBDUkRBIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlIGlmIGEgYmVhY29uIHdhcyByZWNlaXZlZCBiZWZvcmUKLQkgKiB3ZSB3ZXJlIGFibGUgdG8gcHJvY2VzcyB0aGUgbGFzdCByZWd1bGF0b3J5X2hpbnRfMTFkKCkgY2FsbCAqLworCSAqIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBsYXN0IHJlZ3VsYXRvcnlfaGludF8xMWQoKSBjYWxsCisJICovCiAJaWYgKGNvdW50cnlfaWVfcmVnZG9tYWluKQogCQlnb3RvIG91dDsKIApAQCAtMTEzMCwzMyArMTY1OCw0NCBAQAogCWVsc2UgaWYgKGNvdW50cnlfaWVbMl0gPT0gJ08nKQogCQllbnYgPSBFTlZJUk9OX09VVERPT1I7CiAKLQkvKiBXZSB3aWxsIHJ1biB0aGlzIGZvciAqZXZlcnkqIGJlYWNvbiBwcm9jZXNzZWQgZm9yIHRoZSBCU1NJRCwgc28KKwkvKgorCSAqIFdlIHdpbGwgcnVuIHRoaXMgZm9yICpldmVyeSogYmVhY29uIHByb2Nlc3NlZCBmb3IgdGhlIEJTU0lELCBzbwogCSAqIHdlIG9wdGltaXplIGFuIGVhcmx5IGNoZWNrIHRvIGV4aXQgb3V0IGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgdG8KLQkgKiBkbyBhbnl0aGluZyAqLwotCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSkpIHsKKwkgKiBkbyBhbnl0aGluZworCSAqLworCWlmIChsaWtlbHkod2lwaHlfaWR4X3ZhbGlkKGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KSkpIHsKIAkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnZfbGFzdF9pZTsKIAotCQlkcnZfbGFzdF9pZSA9IHdpcGh5X3RvX2RldihsYXN0X3JlcXVlc3QtPndpcGh5KTsKKwkJZHJ2X2xhc3RfaWUgPQorCQkJY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAKLQkJLyogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAotCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBICovCi0JCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSA9PSB3aXBoeSkpIHsKLQkJCS8qIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHRoaXMgd2lwaHkgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAgKi8KKwkJLyoKKwkJICogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAorCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBCisJCSAqLworCQlpZiAobGlrZWx5KCZkcnZfbGFzdF9pZS0+d2lwaHkgPT0gd2lwaHkpKSB7CisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdGhpcyB3aXBoeSB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCS8qIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAorCQkJLyoKKwkJCSAqIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAogCQkJICogd2FzIHJlY29uZmlndXJlZC4gWFhYOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUKIAkJCSAqIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc3VzcGVuZHMgYW5kIGdvZXMgdG8gZ29lcwogCQkJICogdG8gYW5vdGhlciBjb3VudHJ5LCBhbmQgdGhlbiBnZXRzIElFcyBmcm9tIGFuCi0JCQkgKiBBUCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyAqLworCQkJICogQVAgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MKKwkJCSAqLwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7Ci0JCQkvKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0d28gc2VwYXJhdGUgd2lwaHlzIHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwICovCisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdHdvIHNlcGFyYXRlIHdpcGh5cyB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKQEAgLTExNzEsMjggKzE3MTAsOTcgQEAKIAlpZiAoIXJkKQogCQlnb3RvIG91dDsKIAotCS8qIFRoaXMgd2lsbCBub3QgaGFwcGVuIHJpZ2h0IG5vdyBidXQgd2UgbGVhdmUgaXQgaGVyZSBmb3IgdGhlCisJLyoKKwkgKiBUaGlzIHdpbGwgbm90IGhhcHBlbiByaWdodCBub3cgYnV0IHdlIGxlYXZlIGl0IGhlcmUgZm9yIHRoZQogCSAqIHRoZSBmdXR1cmUgd2hlbiB3ZSB3YW50IHRvIGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0IGFuZCBoYXZpbmcKIAkgKiB0aGUgdXNlciBtb3ZlIHRvIGFub3RoZXIgY291bnRyeSBhZnRlciBkb2luZyBzbywgb3IgaGF2aW5nIHRoZSB1c2VyCi0JICogbW92ZSB0byBhbm90aGVyIEFQLiBSaWdodCBub3cgd2UganVzdCB0cnVzdCB0aGUgZmlyc3QgQVAuIFRoaXMgaXMgd2h5Ci0JICogdGhpcyBpcyBtYXJrZWQgYXMgbGlrbGV5KCkuIElmIHdlIGhpdCB0aGlzIGJlZm9yZSB3ZSBhZGQgdGhpcyBzdXBwb3J0Ci0JICogd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZiBpdCBhcyBpdCB3b3VsZCBpbmRpY2F0ZSBhIG1pc3Rha2UgaW4gdGhlCi0JICogY3VycmVudCBkZXNpZ24gICovCi0JaWYgKGxpa2VseShXQVJOX09OKHJlZ19zYW1lX2NvdW50cnlfaWVfaGludCh3aXBoeSwgY2hlY2tzdW0pKSkpCi0JCWdvdG8gb3V0OworCSAqIG1vdmUgdG8gYW5vdGhlciBBUC4gUmlnaHQgbm93IHdlIGp1c3QgdHJ1c3QgdGhlIGZpcnN0IEFQLgorCSAqCisJICogSWYgd2UgaGl0IHRoaXMgYmVmb3JlIHdlIGFkZCB0aGlzIHN1cHBvcnQgd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZgorCSAqIGl0IGFzIGl0IHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBpbiB0aGUgY3VycmVudCBkZXNpZ24KKwkgKi8KKwlpZiAoV0FSTl9PTihyZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQod2lwaHksIGNoZWNrc3VtKSkpCisJCWdvdG8gZnJlZV9yZF9vdXQ7CiAKLQkvKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KLQkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdCAqLworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlnb3RvIGZyZWVfcmRfb3V0OworCisJLyoKKwkgKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KKwkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdAorCSAqLwogCWNvdW50cnlfaWVfcmVnZG9tYWluID0gcmQ7CiAKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAotCQljb3VudHJ5X2llX3JlZ2RvbWFpbi0+YWxwaGEyLCBjaGVja3N1bSwgZW52KTsKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU7CisJcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNoZWNrc3VtOworCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwogCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm47CisKK2ZyZWVfcmRfb3V0OgorCWtmcmVlKHJkKTsKIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludF8xMWQpOwogCitzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCit7CisJaWYgKGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEyKSB8fAorCSAgICBmcmVxID09IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgxMykgfHwKKwkgICAgZnJlcSA9PSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koMTQpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWlmIChsaWtlbHkoKGJlYWNvbl9jaGFuLT5iZWFjb25fZm91bmQgfHwKKwkgICAgKGJlYWNvbl9jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSB8fAorCSAgICAoYmVhY29uX2NoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICAgIWZyZXFfaXNfY2hhbl8xMl8xM18xNChiZWFjb25fY2hhbi0+Y2VudGVyX2ZyZXEpKSkpKQorCQlyZXR1cm4gMDsKKworCXJlZ19iZWFjb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnX2JlYWNvbiksIGdmcCk7CisJaWYgKCFyZWdfYmVhY29uKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IEZvdW5kIG5ldyBiZWFjb24gb24gIgorCQkiZnJlcXVlbmN5OiAlZCBNSHogKENoICVkKSBvbiAlc1xuIiwKKwkJYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxLAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxKSwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2VuZGlmCisJbWVtY3B5KCZyZWdfYmVhY29uLT5jaGFuLCBiZWFjb25fY2hhbiwKKwkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOworCisKKwkvKgorCSAqIFNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBCSCBvciBhbmQgbm9uLUJIIGNvbnRleHQKKwkgKiB3ZSBtdXN0IHVzZSBzcGluX2xvY2tfYmgoKQorCSAqLworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZWdfYmVhY29uLT5saXN0LCAmcmVnX3BlbmRpbmdfYmVhY29ucyk7CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfcmRfcnVsZXMoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTIwOCw4ICsxODE2LDEwIEBACiAJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CiAJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CiAKLQkJLyogVGhlcmUgbWF5IG5vdCBiZSBkb2N1bWVudGF0aW9uIGZvciBtYXggYW50ZW5uYSBnYWluCi0JCSAqIGluIGNlcnRhaW4gcmVnaW9ucyAqLworCQkvKgorCQkgKiBUaGVyZSBtYXkgbm90IGJlIGRvY3VtZW50YXRpb24gZm9yIG1heCBhbnRlbm5hIGdhaW4KKwkJICogaW4gY2VydGFpbiByZWdpb25zCisJCSAqLwogCQlpZiAocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0KCVkIEtIeiAtICVkIEtIeiBAICVkIEtIeiksICIKIAkJCQkiKCVkIG1CaSwgJWQgbUJtKVxuIiwKQEAgLTEyMzIsMTMgKzE4NDIsMTMgQEAKIHsKIAogCWlmIChpc19pbnRlcnNlY3RlZF9hbHBoYTIocmQtPmFscGhhMikpIHsKLQkJc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7Ci0JCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwogCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5KSB7Ci0JCQkJd2lwaHkgPSBsYXN0X3JlcXVlc3QtPndpcGh5OwotCQkJCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCQkJZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCgKKwkJCQlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisJCQlpZiAoZHJ2KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCiAJCQkJCSJkb21haW4gdXBkYXRlZCBieSBBUCB0bzogJWMlY1xuIiwKIAkJCQkJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSwKQEAgLTEyNDgsNyArMTg1OCw3IEBACiAJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJCX0gZWxzZQogCQkJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBDdXJyZW50IHJlZ3VsYXRvcnkgIgotCQkJCQkiaW50ZXJzZWN0ZWQ6IFxuIik7CisJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJfSBlbHNlIGlmIChpc193b3JsZF9yZWdkb20ocmQtPmFscGhhMikpCiAJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBXb3JsZCByZWd1bGF0b3J5ICIKIAkJCSJkb21haW4gdXBkYXRlZDpcbiIpOwpAQCAtMTMwNCw3ICsxOTE0LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqaW50ZXJzZWN0ZWRfcmQgPSBOVUxMOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gTlVMTDsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CiAJLyogU29tZSBiYXNpYyBzYW5pdHkgY2hlY2tzIGZpcnN0ICovCiAKIAlpZiAoaXNfd29ybGRfcmVnZG9tKHJkLT5hbHBoYTIpKSB7CkBAIC0xMzIxLDIzICsxOTMxLDI3IEBACiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAorCS8qCisJICogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAogCSAqIHJkIGlzIG5vbiBzdGF0aWMgKGl0IG1lYW5zIENSREEgd2FzIHByZXNlbnQgYW5kIHdhcyB1c2VkIGxhc3QpCi0JICogYW5kIHRoZSBwZW5kaW5nIHJlcXVlc3QgY2FtZSBpbiBmcm9tIGEgY291bnRyeSBJRSAqLwotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJLyogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgotCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQgKi8KKwkgKiBhbmQgdGhlIHBlbmRpbmcgcmVxdWVzdCBjYW1lIGluIGZyb20gYSBjb3VudHJ5IElFCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCS8qCisJCSAqIElmIHNvbWVvbmUgZWxzZSBhc2tlZCB1cyB0byBjaGFuZ2UgdGhlIHJkIGxldHMgb25seSBib3RoZXIKKwkJICogY2hlY2tpbmcgaWYgdGhlIGFscGhhMiBjaGFuZ2VzIGlmIENSREEgd2FzIGFscmVhZHkgY2FsbGVkCisJCSAqLwogCQlpZiAoIWlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikgJiYKLQkJICAgICFyZWdkb21fY2hhbmdlZChyZC0+YWxwaGEyKSkKKwkJICAgICFyZWdkb21fY2hhbmdlcyhyZC0+YWxwaGEyKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdpcGh5ID0gbGFzdF9yZXF1ZXN0LT53aXBoeTsKLQotCS8qIE5vdyBsZXRzIHNldCB0aGUgcmVndWxhdG9yeSBkb21haW4sIHVwZGF0ZSBhbGwgZHJpdmVyIGNoYW5uZWxzCisJLyoKKwkgKiBOb3cgbGV0cyBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluLCB1cGRhdGUgYWxsIGRyaXZlciBjaGFubmVscwogCSAqIGFuZCBmaW5hbGx5IGluZm9ybSB0aGVtIG9mIHdoYXQgd2UgaGF2ZSBkb25lLCBpbiBjYXNlIHRoZXkgd2FudAogCSAqIHRvIHJldmlldyBvciBhZGp1c3QgdGhlaXIgb3duIHNldHRpbmdzIGJhc2VkIG9uIHRoZWlyIG93bgotCSAqIGludGVybmFsIEVFUFJPTSBkYXRhICovCisJICogaW50ZXJuYWwgRUVQUk9NIGRhdGEKKwkgKi8KIAogCWlmIChXQVJOX09OKCFyZWdfaXNfdmFsaWRfcmVxdWVzdChyZC0+YWxwaGEyKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM0OSw3ICsxOTYzLDI4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCiAJaWYgKCFsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkgeworCQlpbnQgcjsKKworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJcmVzZXRfcmVnZG9tYWlucygpOworCQkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIEZvciBhIGRyaXZlciBoaW50LCBsZXRzIGNvcHkgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZQorCQkgKiBkcml2ZXIgd2FudGVkIHRvIHRoZSB3aXBoeSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisJCSAqLworCisJCUJVR19PTihyZXF1ZXN0X3dpcGh5LT5yZWdkKTsKKworCQlyID0gcmVnX2NvcHlfcmVnZCgmcmVxdWVzdF93aXBoeS0+cmVnZCwgcmQpOworCQlpZiAocikKKwkJCXJldHVybiByOworCiAJCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIAkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CiAJCXJldHVybiAwOwpAQCAtMTM1NywxNCArMTk5MiwyMiBAQAogCiAJLyogSW50ZXJzZWN0aW9uIHJlcXVpcmVzIGEgYml0IG1vcmUgd29yayAqLwogCi0JaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewogCiAJCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKIAkJaWYgKCFpbnRlcnNlY3RlZF9yZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIFdlIGNhbiB0cmFzaCB3aGF0IENSREEgcHJvdmlkZWQgbm93ICovCi0JCWtmcmVlKHJkKTsKKwkJLyoKKwkJICogV2UgY2FuIHRyYXNoIHdoYXQgQ1JEQSBwcm92aWRlZCBub3cuCisJCSAqIEhvd2V2ZXIgaWYgYSBkcml2ZXIgcmVxdWVzdGVkIHRoaXMgc3BlY2lmaWMgcmVndWxhdG9yeQorCQkgKiBkb21haW4gd2Uga2VlcCBpdCBmb3IgaXRzIHByaXZhdGUgdXNlCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikKKwkJCXJlcXVlc3Rfd2lwaHktPnJlZ2QgPSByZDsKKwkJZWxzZQorCQkJa2ZyZWUocmQpOworCiAJCXJkID0gTlVMTDsKIAogCQlyZXNldF9yZWdkb21haW5zKCk7CkBAIC0xMzgxLDggKzIwMjQsMTAgQEAKIAlCVUdfT04oIWNvdW50cnlfaWVfcmVnZG9tYWluKTsKIAogCWlmIChyZCAhPSBjb3VudHJ5X2llX3JlZ2RvbWFpbikgewotCQkvKiBJbnRlcnNlY3Qgd2hhdCBDUkRBIHJldHVybmVkIGFuZCBvdXIgd2hhdCB3ZQotCQkgKiBoYWQgYnVpbHQgZnJvbSB0aGUgQ291bnRyeSBJRSByZWNlaXZlZCAqLworCQkvKgorCQkgKiBJbnRlcnNlY3Qgd2hhdCBDUkRBIHJldHVybmVkIGFuZCBvdXIgd2hhdCB3ZQorCQkgKiBoYWQgYnVpbHQgZnJvbSB0aGUgQ291bnRyeSBJRSByZWNlaXZlZAorCQkgKi8KIAogCQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNvdW50cnlfaWVfcmVnZG9tYWluKTsKIApAQCAtMTM5MiwxNiArMjAzNywxOCBAQAogCQlrZnJlZShjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAJCWNvdW50cnlfaWVfcmVnZG9tYWluID0gTlVMTDsKIAl9IGVsc2UgewotCQkvKiBUaGlzIHdvdWxkIGhhcHBlbiB3aGVuIENSREEgd2FzIG5vdCBwcmVzZW50IGFuZAorCQkvKgorCQkgKiBUaGlzIHdvdWxkIGhhcHBlbiB3aGVuIENSREEgd2FzIG5vdCBwcmVzZW50IGFuZAogCQkgKiBPTERfUkVHVUxBVE9SWSB3YXMgZW5hYmxlZC4gV2UgaW50ZXJzZWN0IG91ciBDb3VudHJ5Ci0JCSAqIElFIHJkIGFuZCB3aGF0IHdhcyBzZXQgb24gY2ZnODAyMTEgb3JpZ2luYWxseSAqLworCQkgKiBJRSByZCBhbmQgd2hhdCB3YXMgc2V0IG9uIGNmZzgwMjExIG9yaWdpbmFsbHkKKwkJICovCiAJCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKIAl9CiAKIAlpZiAoIWludGVyc2VjdGVkX3JkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJZHJ2ID0gd2lwaHlfdG9fZGV2KHJlcXVlc3Rfd2lwaHkpOwogCiAJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSA9IHJkLT5hbHBoYTJbMF07CiAJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CkBAIC0xNDE5LDEzICsyMDY2LDE3IEBACiB9CiAKIAotLyogVXNlIHRoaXMgY2FsbCB0byBzZXQgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENvbmZsaWN0cyB3aXRoCisvKgorICogVXNlIHRoaXMgY2FsbCB0byBzZXQgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENvbmZsaWN0cyB3aXRoCiAgKiBtdWx0aXBsZSBkcml2ZXJzIGNhbiBiZSBpcm9uZWQgb3V0IGxhdGVyLiBDYWxsZXIgbXVzdCd2ZSBhbHJlYWR5Ci0gKiBrbWFsbG9jJ2QgdGhlIHJkIHN0cnVjdHVyZS4gQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9kcnZfbXV0ZXggKi8KKyAqIGttYWxsb2MnZCB0aGUgcmQgc3RydWN0dXJlLiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX211dGV4CisgKi8KIGludCBzZXRfcmVnZG9tKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAlpbnQgcjsKIAorCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAkvKiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHVwZGF0ZSB0aGUgd2lwaHlzLCB0aGlzIGlzIGRvbmUgYmVsb3cgKi8KIAlyID0gX19zZXRfcmVnZG9tKHJkKTsKIAlpZiAocikgewpAQCAtMTQ0Miw1NiArMjA5Myw4NyBAQAogCiAJcHJpbnRfcmVnZG9tYWluKGNmZzgwMjExX3JlZ2RvbWFpbik7CiAKKwlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChsYXN0X3JlcXVlc3QpOworCiAJcmV0dXJuIHI7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfZHJ2X211dGV4ICovCisvKiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX211dGV4ICovCiB2b2lkIHJlZ19kZXZpY2VfcmVtb3ZlKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7Ci0JaWYgKCFsYXN0X3JlcXVlc3QgfHwgIWxhc3RfcmVxdWVzdC0+d2lwaHkpCisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJa2ZyZWUod2lwaHktPnJlZ2QpOworCWlmICghbGFzdF9yZXF1ZXN0IHx8ICFyZXF1ZXN0X3dpcGh5KQogCQlyZXR1cm47Ci0JaWYgKGxhc3RfcmVxdWVzdC0+d2lwaHkgIT0gd2lwaHkpCisJaWYgKHJlcXVlc3Rfd2lwaHkgIT0gd2lwaHkpCiAJCXJldHVybjsKLQlsYXN0X3JlcXVlc3QtPndpcGh5ID0gTlVMTDsKKwlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCA9IFdJUEhZX0lEWF9TVEFMRTsKIAlsYXN0X3JlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gRU5WSVJPTl9BTlk7CiB9CiAKIGludCByZWd1bGF0b3J5X2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJcmVnX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJyZWd1bGF0b3J5IiwgMCwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihyZWdfcGRldikpCiAJCXJldHVybiBQVFJfRVJSKHJlZ19wZGV2KTsKIAorCXNwaW5fbG9ja19pbml0KCZyZWdfcmVxdWVzdHNfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKIAljZmc4MDIxMV9yZWdkb21haW4gPSBzdGF0aWNfcmVnZG9tKGllZWU4MDIxMV9yZWdkb20pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IFVzaW5nIHN0YXRpYyByZWd1bGF0b3J5IGRvbWFpbiBpbmZvXG4iKTsKIAlwcmludF9yZWdkb21haW5faW5mbyhjZmc4MDIxMV9yZWdkb21haW4pOwotCS8qIFRoZSBvbGQgY29kZSBzdGlsbCByZXF1ZXN0cyBmb3IgYSBuZXcgcmVnZG9tYWluIGFuZCBpZgorCS8qCisJICogVGhlIG9sZCBjb2RlIHN0aWxsIHJlcXVlc3RzIGZvciBhIG5ldyByZWdkb21haW4gYW5kIGlmCiAJICogeW91IGhhdmUgQ1JEQSB5b3UgZ2V0IGl0IHVwZGF0ZWQsIG90aGVyd2lzZSB5b3UgZ2V0CiAJICogc3R1Y2sgd2l0aCB0aGUgc3RhdGljIHZhbHVlcy4gV2UgaWdub3JlICJFVSIgY29kZSBhcwotCSAqIHRoYXQgaXMgbm90IGEgdmFsaWQgSVNPIC8gSUVDIDMxNjYgYWxwaGEyICovCisJICogdGhhdCBpcyBub3QgYSB2YWxpZCBJU08gLyBJRUMgMzE2NiBhbHBoYTIKKwkgKi8KIAlpZiAoaWVlZTgwMjExX3JlZ2RvbVswXSAhPSAnRScgfHwgaWVlZTgwMjExX3JlZ2RvbVsxXSAhPSAnVScpCi0JCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwKLQkJCQkJaWVlZTgwMjExX3JlZ2RvbSwgMCwgRU5WSVJPTl9BTlkpOworCQllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShpZWVlODAyMTFfcmVnZG9tKTsKICNlbHNlCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gY2ZnODAyMTFfd29ybGRfcmVnZG9tOwogCi0JZXJyID0gX19yZWd1bGF0b3J5X2hpbnQoTlVMTCwgUkVHRE9NX1NFVF9CWV9DT1JFLCAiMDAiLCAwLCBFTlZJUk9OX0FOWSk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICJjZmc4MDIxMTogY2FsbGluZyBDUkRBIGZhaWxlZCAtICIKLQkJICAgICAgICJ1bmFibGUgdG8gdXBkYXRlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluLCAiCi0JCSAgICAgICAidXNpbmcgc3RhdGljIGRlZmluaXRpb25cbiIpOworCWVyciA9IHJlZ3VsYXRvcnlfaGludF9jb3JlKCIwMCIpOwogI2VuZGlmCisJaWYgKGVycikgeworCQlpZiAoZXJyID09IC1FTk9NRU0pCisJCQlyZXR1cm4gZXJyOworCQkvKgorCQkgKiBOLkIuIGtvYmplY3RfdWV2ZW50X2VudigpIGNhbiBmYWlsIG1haW5seSBmb3Igd2hlbiB3ZSdyZSBvdXQKKwkJICogbWVtb3J5IHdoaWNoIGlzIGhhbmRsZWQgYW5kIHByb3BhZ2F0ZWQgYXBwcm9wcmlhdGVseSBhYm92ZQorCQkgKiBidXQgaXQgY2FuIGFsc28gZmFpbCBkdXJpbmcgYSBuZXRsaW5rX2Jyb2FkY2FzdCgpIG9yIGR1cmluZworCQkgKiBlYXJseSBib290IGZvciBjYWxsX3VzZXJtb2RlaGVscGVyKCkuIEZvciBub3cgdHJlYXQgdGhlc2UKKwkJICogZXJyb3JzIGFzIG5vbi1mYXRhbC4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGtvYmplY3RfdWV2ZW50X2VudigpIHdhcyB1bmFibGUgIgorCQkJInRvIGNhbGwgQ1JEQSBkdXJpbmcgaW5pdCIpOworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwkJLyogV2Ugd2FudCB0byBmaW5kIG91dCBleGFjdGx5IHdoeSB3aGVuIGRlYnVnZ2luZyAqLworCQlXQVJOX09OKGVycik7CisjZW5kaWYKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCByZWd1bGF0b3J5X2V4aXQodm9pZCkKIHsKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0LCAqdG1wOworCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKKworCWNhbmNlbF93b3JrX3N5bmMoJnJlZ193b3JrKTsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIApAQCAtMTUwMiw1ICsyMTg0LDMzIEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihyZWdfcGRldik7CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcmVnX3BlbmRpbmdfYmVhY29ucykpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19iZWFjb24sIGJ0bXAsCisJCQkJCSAmcmVnX3BlbmRpbmdfYmVhY29ucywgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19iZWFjb24tPmxpc3QpOworCQkJa2ZyZWUocmVnX2JlYWNvbik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19iZWFjb25fbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19iZWFjb24sIGJ0bXAsCisJCQkJCSAmcmVnX2JlYWNvbl9saXN0LCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX2JlYWNvbi0+bGlzdCk7CisJCQlrZnJlZShyZWdfYmVhY29uKTsKKwkJfQorCX0KKworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfcmVxdWVzdCwgdG1wLAorCQkJCQkgJnJlZ19yZXF1ZXN0c19saXN0LCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX3JlcXVlc3QtPmxpc3QpOworCQkJa2ZyZWUocmVnX3JlcXVlc3QpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCBhNzZlYTNmLi5lMzc4MjlhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC0xLDkgKzEsMTMgQEAKICNpZm5kZWYgX19ORVRfV0lSRUxFU1NfUkVHX0gKICNkZWZpbmUgX19ORVRfV0lSRUxFU1NfUkVHX0gKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CisKIGJvb2wgaXNfd29ybGRfcmVnZG9tKGNvbnN0IGNoYXIgKmFscGhhMik7CiBib29sIHJlZ19pc192YWxpZF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmFscGhhMik7CiAKK2ludCByZWd1bGF0b3J5X2hpbnRfdXNlcihjb25zdCBjaGFyICphbHBoYTIpOworCiB2b2lkIHJlZ19kZXZpY2VfcmVtb3ZlKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpOwpAQCAtMTEsMzQgKzE1LDI1IEBACiAKIGludCBzZXRfcmVnZG9tKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCk7CiAKLWVudW0gZW52aXJvbm1lbnRfY2FwIHsKLQlFTlZJUk9OX0FOWSwKLQlFTlZJUk9OX0lORE9PUiwKLQlFTlZJUk9OX09VVERPT1IsCi19OwotCi0KIC8qKgotICogX19yZWd1bGF0b3J5X2hpbnQgLSBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlIGEgcmVndWxhdG9yeSBkb21haW4KLSAqIEB3aXBoeTogaWYgdGhlIGhpbnQgY29tZXMgZnJvbSBjb3VudHJ5IGluZm9ybWF0aW9uIGZyb20gYW4gQVAsIHRoaXMKLSAqCWlzIHJlcXVpcmVkIHRvIGJlIHNldCB0byB0aGUgd2lwaHkgdGhhdCByZWNlaXZlZCB0aGUgaW5mb3JtYXRpb24KLSAqIEBhbHBoYTI6IHRoZSBJU08vSUVDIDMxNjYgYWxwaGEyIGJlaW5nIGNsYWltZWQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCi0gKglzaG91bGQgYmUgaW4uCi0gKiBAY291bnRyeV9pZV9jaGVja3N1bTogY2hlY2tzdW0gb2YgcHJvY2Vzc2VkIGNvdW50cnkgSUUsIHNldCB0aGlzIHRvIDAKLSAqIAlpZiB0aGUgaGludCBkaWQgbm90IGNvbWUgZnJvbSBhIGNvdW50cnkgSUUKLSAqIEBjb3VudHJ5X2llX2VudjogdGhlIGVudmlyb25tZW50IHRoZSBJRSB0b2xkIHVzIHdlIGFyZSBpbiwgJUVOVklST05fKgorICogcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbiAtIGhpbnRzIGEgYmVhY29uIHdhcyBmb3VuZCBvbiBhIGNoYW5uZWwKKyAqIEB3aXBoeTogdGhlIHdpcmVsZXNzIGRldmljZSB3aGVyZSB0aGUgYmVhY29uIHdhcyBmb3VuZCBvbgorICogQGJlYWNvbl9jaGFuOiB0aGUgY2hhbm5lbCBvbiB3aGljaCB0aGUgYmVhY29uIHdhcyBmb3VuZCBvbgorICogQGdmcDogY29udGV4dCBmbGFncwogICoKLSAqIFRoZSBXaXJlbGVzcyBzdWJzeXN0ZW0gY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUKLSAqIHdoYXQgaXQgYmVsaWV2ZXMgc2hvdWxkIGJlIHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIGJ5IGdpdmluZyBpdCBhbgotICogSVNPL0lFQyAzMTY2IGFscGhhMiBjb3VudHJ5IGNvZGUgaXQga25vd3MgaXRzIHJlZ3VsYXRvcnkgZG9tYWluIHNob3VsZCBiZQotICogaW4uCisgKiBUaGlzIGluZm9ybXMgdGhlIHdpcmVsZXNzIGNvcmUgdGhhdCBhIGJlYWNvbiBmcm9tIGFuIEFQIHdhcyBmb3VuZCBvbgorICogdGhlIGNoYW5uZWwgcHJvdmlkZWQuIFRoaXMgYWxsb3dzIHRoZSB3aXJlbGVzcyBjb3JlIHRvIG1ha2UgZWR1Y2F0ZWQKKyAqIGd1ZXNzZXMgb24gcmVndWxhdG9yeSB0byBoZWxwIHdpdGggd29ybGQgcm9hbWluZy4gVGhpcyBpcyBvbmx5IHVzZWQgZm9yCisgKiB3b3JsZCByb2FtaW5nIC0tIHdoZW4gd2UgZG8gbm90IGtub3cgb3VyIGN1cnJlbnQgbG9jYXRpb24uIFRoaXMgaXMKKyAqIG9ubHkgdXNlZnVsIG9uIGNoYW5uZWxzIDEyLCAxMyBhbmQgMTQgb24gdGhlIDIgR0h6IGJhbmQgYXMgY2hhbm5lbHMKKyAqIDEtMTEgYXJlIGFscmVhZHkgZW5hYmxlZCBieSB0aGUgd29ybGQgcmVndWxhdG9yeSBkb21haW47IGFuZCBvbgorICogbm9uLXJhZGFyIDUgR0h6IGNoYW5uZWxzLgogICoKLSAqIFJldHVybnMgemVybyBpZiBhbGwgd2VudCBmaW5lLCAlLUVBTFJFQURZIGlmIGEgcmVndWxhdG9yeSBkb21haW4gaGFkCi0gKiBhbHJlYWR5IGJlZW4gc2V0IG9yIG90aGVyIHN0YW5kYXJkIGVycm9yIGNvZGVzLgotICoKKyAqIERyaXZlcnMgZG8gbm90IG5lZWQgdG8gY2FsbCB0aGlzLCBjZmc4MDIxMSB3aWxsIGRvIGl0IGZvciBhZnRlciBhIHNjYW4KKyAqIG9uIGEgbmV3bHkgZm91bmQgQlNTLgogICovCi1leHRlcm4gaW50IF9fcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRfYnksCi0JCQkgICAgIGNvbnN0IGNoYXIgKmFscGhhMiwgdTMyIGNvdW50cnlfaWVfY2hlY2tzdW0sCi0JCQkgICAgIGVudW0gZW52aXJvbm1lbnRfY2FwIGNvdW50cnlfaWVfZW52KTsKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJCWdmcF90IGdmcCk7CiAKICNlbmRpZiAgLyogX19ORVRfV0lSRUxFU1NfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MGRiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC0wLDAgKzEsODY2IEBACisvKgorICogY2ZnODAyMTEgc2NhbiByZXN1bHQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvYXJwLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAibmw4MDIxMS5oIgorCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUJKDEwICogSFopCisKK3ZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisjZW5kaWYKKworCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCByZXF1ZXN0LT5pZmlkeCk7CisJaWYgKCFkZXYpCisJCWdvdG8gb3V0OworCisJV0FSTl9PTihyZXF1ZXN0ICE9IHdpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSktPnNjYW5fcmVxKTsKKwl3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSA9IE5VTEw7CisKKwlpZiAoYWJvcnRlZCkKKwkJbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZCh3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLCBkZXYpOworCWVsc2UKKwkJbmw4MDIxMV9zZW5kX3NjYW5fZG9uZSh3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLCBkZXYpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCWlmICghYWJvcnRlZCkgeworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJfQorI2VuZGlmCisKKwlkZXZfcHV0KGRldik7CisKKyBvdXQ6CisJa2ZyZWUocmVxdWVzdCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NjYW5fZG9uZSk7CisKK3N0YXRpYyB2b2lkIGJzc19yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJYnNzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcmVmKTsKKwlpZiAoYnNzLT5wdWIuZnJlZV9wcml2KQorCQlic3MtPnB1Yi5mcmVlX3ByaXYoJmJzcy0+cHViKTsKKwlrZnJlZShic3MpOworfQorCisvKiBtdXN0IGhvbGQgZGV2LT5ic3NfbG9jayEgKi8KK3ZvaWQgY2ZnODAyMTFfYnNzX2FnZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKwl1bnNpZ25lZCBsb25nIGFnZV9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcyhhZ2Vfc2VjcyAqIE1TRUNfUEVSX1NFQyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJYnNzLT50cyAtPSBhZ2VfamlmZmllczsKKwl9Cit9CisKKy8qIG11c3QgaG9sZCBkZXYtPmJzc19sb2NrISAqLwordm9pZCBjZmc4MDIxMV9ic3NfZXhwaXJlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnRtcDsKKwlib29sIGV4cGlyZWQgPSBmYWxzZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcCwgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+dHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbCgmYnNzLT5saXN0KTsKKwkJcmJfZXJhc2UoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7CisJCWtyZWZfcHV0KCZic3MtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlleHBpcmVkID0gdHJ1ZTsKKwl9CisKKwlpZiAoZXhwaXJlZCkKKwkJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOworfQorCitzdGF0aWMgdTggKmZpbmRfaWUodTggbnVtLCB1OCAqaWVzLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4gPiAyICYmIGllc1swXSAhPSBudW0pIHsKKwkJbGVuIC09IGllc1sxXSArIDI7CisJCWllcyArPSBpZXNbMV0gKyAyOworCX0KKwlpZiAobGVuIDwgMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGxlbiA8IDIgKyBpZXNbMV0pCisJCXJldHVybiBOVUxMOworCXJldHVybiBpZXM7Cit9CisKK3N0YXRpYyBpbnQgY21wX2llcyh1OCBudW0sIHU4ICppZXMxLCBzaXplX3QgbGVuMSwgdTggKmllczIsIHNpemVfdCBsZW4yKQoreworCWNvbnN0IHU4ICppZTEgPSBmaW5kX2llKG51bSwgaWVzMSwgbGVuMSk7CisJY29uc3QgdTggKmllMiA9IGZpbmRfaWUobnVtLCBpZXMyLCBsZW4yKTsKKwlpbnQgcjsKKworCWlmICghaWUxICYmICFpZTIpCisJCXJldHVybiAwOworCWlmICghaWUxKQorCQlyZXR1cm4gLTE7CisKKwlyID0gbWVtY21wKGllMSArIDIsIGllMiArIDIsIG1pbihpZTFbMV0sIGllMlsxXSkpOworCWlmIChyID09IDAgJiYgaWUxWzFdICE9IGllMlsxXSkKKwkJcmV0dXJuIGllMlsxXSAtIGllMVsxXTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGJvb2wgaXNfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmEsCisJCSAgIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKK3sKKwljb25zdCB1OCAqc3NpZGllOworCisJaWYgKGJzc2lkICYmIGNvbXBhcmVfZXRoZXJfYWRkcihhLT5ic3NpZCwgYnNzaWQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXNzaWQpCisJCXJldHVybiB0cnVlOworCisJc3NpZGllID0gZmluZF9pZShXTEFOX0VJRF9TU0lELAorCQkJIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKCFzc2lkaWUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3NpZGllWzFdICE9IHNzaWRfbGVuKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIG1lbWNtcChzc2lkaWUgKyAyLCBzc2lkLCBzc2lkX2xlbikgPT0gMDsKK30KKworc3RhdGljIGJvb2wgaXNfbWVzaChzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLAorCQkgICAgY29uc3QgdTggKm1lc2hpZCwgc2l6ZV90IG1lc2hpZGxlbiwKKwkJICAgIGNvbnN0IHU4ICptZXNoY2ZnKQoreworCWNvbnN0IHU4ICppZTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWUgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCisJCSAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAoIWllKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGllWzFdICE9IG1lc2hpZGxlbikKKwkJcmV0dXJuIGZhbHNlOworCWlmIChtZW1jbXAoaWUgKyAyLCBtZXNoaWQsIG1lc2hpZGxlbikpCisJCXJldHVybiBmYWxzZTsKKworCWllID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmIChpZVsxXSAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElnbm9yZSBtZXNoIGNhcGFiaWxpdHkgKGxhc3QgdHdvIGJ5dGVzIG9mIHRoZSBJRSkgd2hlbgorCSAqIGNvbXBhcmluZyBzaW5jZSB0aGF0IG1heSBkaWZmZXIgYmV0d2VlbiBzdGF0aW9ucyB0YWtpbmcKKwkgKiBwYXJ0IGluIHRoZSBzYW1lIG1lc2guCisJICovCisJcmV0dXJuIG1lbWNtcChpZSArIDIsIG1lc2hjZmcsIElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4gLSAyKSA9PSAwOworfQorCitzdGF0aWMgaW50IGNtcF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwKKwkJICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYikKK3sKKwlpbnQgcjsKKworCWlmIChhLT5jaGFubmVsICE9IGItPmNoYW5uZWwpCisJCXJldHVybiBiLT5jaGFubmVsLT5jZW50ZXJfZnJlcSAtIGEtPmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJciA9IG1lbWNtcChhLT5ic3NpZCwgYi0+YnNzaWQsIEVUSF9BTEVOKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkgeworCQlyID0gY21wX2llcyhXTEFOX0VJRF9NRVNIX0lELAorCQkJICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICBiLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICBiLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlyZXR1cm4gY21wX2llcyhXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJCSAgICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICAgYi0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgICAgYi0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwl9CisKKwlyZXR1cm4gY21wX2llcyhXTEFOX0VJRF9TU0lELAorCQkgICAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCSAgICAgICBiLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICAgIGItPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7Cit9CisKK3N0cnVjdCBjZmc4MDIxMV9ic3MgKmNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgY29uc3QgdTggKmJzc2lkLAorCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgdTE2IGNhcGFfbWFzaywgdTE2IGNhcGFfdmFsKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICpyZXMgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoKGJzcy0+cHViLmNhcGFiaWxpdHkgJiBjYXBhX21hc2spICE9IGNhcGFfdmFsKQorCQkJY29udGludWU7CisJCWlmIChjaGFubmVsICYmIGJzcy0+cHViLmNoYW5uZWwgIT0gY2hhbm5lbCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfYnNzKCZic3MtPnB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkgeworCQkJcmVzID0gYnNzOworCQkJa3JlZl9nZXQoJnJlcy0+cmVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJnJlcy0+cHViOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9nZXRfYnNzKTsKKworc3RydWN0IGNmZzgwMjExX2JzcyAqY2ZnODAyMTFfZ2V0X21lc2goc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGlkLCBzaXplX3QgbWVzaGlkbGVuLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGNmZykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNoYW5uZWwgJiYgYnNzLT5wdWIuY2hhbm5lbCAhPSBjaGFubmVsKQorCQkJY29udGludWU7CisJCWlmIChpc19tZXNoKCZic3MtPnB1YiwgbWVzaGlkLCBtZXNoaWRsZW4sIG1lc2hjZmcpKSB7CisJCQlyZXMgPSBic3M7CisJCQlrcmVmX2dldCgmcmVzLT5yZWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCXJldHVybiAmcmVzLT5wdWI7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2dldF9tZXNoKTsKKworCitzdGF0aWMgdm9pZCByYl9pbnNlcnRfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJmRldi0+YnNzX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICp0YnNzOworCWludCBjbXA7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCXRic3MgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHJibik7CisKKwkJY21wID0gY21wX2JzcygmYnNzLT5wdWIsICZ0YnNzLT5wdWIpOworCisJCWlmIChXQVJOX09OKCFjbXApKSB7CisJCQkvKiB3aWxsIHNvcnQgb2YgbGVhayB0aGlzIEJTUyAqLworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGNtcCA8IDApCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCisJcmJfbGlua19ub2RlKCZic3MtPnJibiwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKK3JiX2ZpbmRfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSBkZXYtPmJzc190cmVlLnJiX25vZGU7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCWludCByOworCisJd2hpbGUgKG4pIHsKKwkJYnNzID0gcmJfZW50cnkobiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcmJuKTsKKwkJciA9IGNtcF9ic3MoJnJlcy0+cHViLCAmYnNzLT5wdWIpOworCisJCWlmIChyID09IDApCisJCQlyZXR1cm4gYnNzOworCQllbHNlIGlmIChyIDwgMCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlCisJCQluID0gbi0+cmJfcmlnaHQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICoKK2NmZzgwMjExX2Jzc191cGRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMsCisJCSAgICBib29sIG92ZXJ3cml0ZSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpmb3VuZCA9IE5VTEw7CisJY29uc3QgdTggKm1lc2hpZCwgKm1lc2hjZmc7CisKKwkvKgorCSAqIFRoZSByZWZlcmVuY2UgdG8gInJlcyIgaXMgZG9uYXRlZCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCisJaWYgKFdBUk5fT04oIXJlcy0+cHViLmNoYW5uZWwpKSB7CisJCWtyZWZfcHV0KCZyZXMtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXMtPnRzID0gamlmZmllczsKKworCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5wdWIuYnNzaWQpKSB7CisJCS8qIG11c3QgYmUgbWVzaCwgdmVyaWZ5ICovCisJCW1lc2hpZCA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJCW1lc2hjZmcgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfQ09ORklHLAorCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQlpZiAoIW1lc2hpZCB8fCAhbWVzaGNmZyB8fAorCQkgICAgbWVzaGNmZ1sxXSAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKSB7CisJCQkvKiBib2d1cyBtZXNoICovCisJCQlrcmVmX3B1dCgmcmVzLT5yZWYsIGJzc19yZWxlYXNlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWZvdW5kID0gcmJfZmluZF9ic3MoZGV2LCByZXMpOworCisJaWYgKGZvdW5kICYmIG92ZXJ3cml0ZSkgeworCQlsaXN0X3JlcGxhY2UoJmZvdW5kLT5saXN0LCAmcmVzLT5saXN0KTsKKwkJcmJfcmVwbGFjZV9ub2RlKCZmb3VuZC0+cmJuLCAmcmVzLT5yYm4sCisJCQkJJmRldi0+YnNzX3RyZWUpOworCQlrcmVmX3B1dCgmZm91bmQtPnJlZiwgYnNzX3JlbGVhc2UpOworCQlmb3VuZCA9IHJlczsKKwl9IGVsc2UgaWYgKGZvdW5kKSB7CisJCWtyZWZfZ2V0KCZmb3VuZC0+cmVmKTsKKwkJZm91bmQtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSByZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWw7CisJCWZvdW5kLT5wdWIudHNmID0gcmVzLT5wdWIudHNmOworCQlmb3VuZC0+cHViLnNpZ25hbCA9IHJlcy0+cHViLnNpZ25hbDsKKwkJZm91bmQtPnB1Yi5jYXBhYmlsaXR5ID0gcmVzLT5wdWIuY2FwYWJpbGl0eTsKKwkJZm91bmQtPnRzID0gcmVzLT50czsKKwkJa3JlZl9wdXQoJnJlcy0+cmVmLCBic3NfcmVsZWFzZSk7CisJfSBlbHNlIHsKKwkJLyogdGhpcyAiY29uc3VtZXMiIHRoZSByZWZlcmVuY2UgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcmVzLT5saXN0LCAmZGV2LT5ic3NfbGlzdCk7CisJCXJiX2luc2VydF9ic3MoZGV2LCByZXMpOworCQlmb3VuZCA9IHJlczsKKwl9CisKKwlkZXYtPmJzc19nZW5lcmF0aW9uKys7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJa3JlZl9nZXQoJmZvdW5kLT5yZWYpOworCXJldHVybiBmb3VuZDsKK30KKworc3RydWN0IGNmZzgwMjExX2JzcyAqCitjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICBzMzIgc2lnbmFsLCBnZnBfdCBnZnApCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzOworCXNpemVfdCBpZWxlbiA9IGxlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkgICAgICB1LnByb2JlX3Jlc3AudmFyaWFibGUpOworCWJvb2wgb3ZlcndyaXRlOworCXNpemVfdCBwcml2c3ogPSB3aXBoeS0+YnNzX3ByaXZfc2l6ZTsKKworCWlmIChXQVJOX09OKHdpcGh5LT5zaWduYWxfdHlwZSA9PSBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDICYmCisJICAgICAgICAgICAgKHNpZ25hbCA8IDAgfHwgc2lnbmFsID4gMTAwKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKFdBUk5fT04oIW1nbXQgfHwgIXdpcGh5IHx8CisJCSAgICBsZW4gPCBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUucHJvYmVfcmVzcC52YXJpYWJsZSkpKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpICsgcHJpdnN6ICsgaWVsZW4sIGdmcCk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KHJlcy0+cHViLmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pOworCXJlcy0+cHViLmNoYW5uZWwgPSBjaGFubmVsOworCXJlcy0+cHViLnNpZ25hbCA9IHNpZ25hbDsKKwlyZXMtPnB1Yi50c2YgPSBsZTY0X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AudGltZXN0YW1wKTsKKwlyZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSBsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuYmVhY29uX2ludCk7CisJcmVzLT5wdWIuY2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5jYXBhYl9pbmZvKTsKKwkvKiBwb2ludCB0byBhZnRlciB0aGUgcHJpdmF0ZSBhcmVhICovCisJcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMgPSAodTggKilyZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7CisJbWVtY3B5KHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLCBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsIGllbGVuKTsKKwlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKworCWtyZWZfaW5pdCgmcmVzLT5yZWYpOworCisJb3ZlcndyaXRlID0gaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlyZXMgPSBjZmc4MDIxMV9ic3NfdXBkYXRlKHdpcGh5X3RvX2Rldih3aXBoeSksIHJlcywgb3ZlcndyaXRlKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzLT5wdWIuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCisJCXJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24od2lwaHksIGNoYW5uZWwsIGdmcCk7CisKKwkvKiBjZmc4MDIxMV9ic3NfdXBkYXRlIGdpdmVzIHVzIGEgcmVmZXJlbmNlZCByZXN1bHQgKi8KKwlyZXR1cm4gJnJlcy0+cHViOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKTsKKwordm9pZCBjZmc4MDIxMV9wdXRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlpZiAoIXB1YikKKwkJcmV0dXJuOworCisJYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKKwlrcmVmX3B1dCgmYnNzLT5yZWYsIGJzc19yZWxlYXNlKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfcHV0X2Jzcyk7CisKK3ZvaWQgY2ZnODAyMTFfdW5saW5rX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWlmIChXQVJOX09OKCFwdWIpKQorCQlyZXR1cm47CisKKwlic3MgPSBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWxpc3RfZGVsKCZic3MtPmxpc3QpOworCXJiX2VyYXNlKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOworCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJa3JlZl9wdXQoJmJzcy0+cmVmLCBic3NfcmVsZWFzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3VubGlua19ic3MpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAoraW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKndyZXEgPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKmNyZXE7CisJaW50IGksIGVyciwgbl9jaGFubmVscyA9IDA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRU5FVERPV047CisKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2LT5pZmluZGV4KTsKKworCWlmIChJU19FUlIocmRldikpCisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCisJaWYgKHJkZXYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmcmRldi0+d2lwaHk7CisKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKQorCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisKKwljcmVxID0ga3phbGxvYyhzaXplb2YoKmNyZXEpICsgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSArCisJCSAgICAgICBuX2NoYW5uZWxzICogc2l6ZW9mKHZvaWQgKiksCisJCSAgICAgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWNyZXEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlcS0+d2lwaHkgPSB3aXBoeTsKKwljcmVxLT5pZmlkeCA9IGRldi0+aWZpbmRleDsKKwljcmVxLT5zc2lkcyA9ICh2b2lkICopKGNyZXEgKyAxKTsKKwljcmVxLT5jaGFubmVscyA9ICh2b2lkICopKGNyZXEtPnNzaWRzICsgMSk7CisJY3JlcS0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJY3JlcS0+bl9zc2lkcyA9IDE7CisKKwkvKiBhbGwgY2hhbm5lbHMgKi8KKwlpID0gMDsKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWludCBqOworCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKwkJCWNyZXEtPmNoYW5uZWxzW2ldID0gJndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCQlpKys7CisJCX0KKwl9CisKKwkvKiB0cmFuc2xhdGUgc2NhbiByZXF1ZXN0ICovCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpKSB7CisJCXdyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisKKwkJaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJCWlmICh3cmVxLT5lc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtY3B5KGNyZXEtPnNzaWRzWzBdLnNzaWQsIHdyZXEtPmVzc2lkLCB3cmVxLT5lc3NpZF9sZW4pOworCQkJY3JlcS0+c3NpZHNbMF0uc3NpZF9sZW4gPSB3cmVxLT5lc3NpZF9sZW47CisJCX0KKwkJaWYgKHdyZXEtPnNjYW5fdHlwZSA9PSBJV19TQ0FOX1RZUEVfUEFTU0lWRSkKKwkJCWNyZXEtPm5fc3NpZHMgPSAwOworCX0KKworCXJkZXYtPnNjYW5fcmVxID0gY3JlcTsKKwllcnIgPSByZGV2LT5vcHMtPnNjYW4od2lwaHksIGRldiwgY3JlcSk7CisJaWYgKGVycikgeworCQlyZGV2LT5zY2FuX3JlcSA9IE5VTEw7CisJCWtmcmVlKGNyZXEpOworCX0KKyBvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihyZGV2KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X3Npd3NjYW4pOworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLAorCQkJCSAgIGNoYXIgKipjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQoreworCXU4ICpwb3MsICplbmQsICpuZXh0OworCXN0cnVjdCBpd19ldmVudCBpd2U7CisKKwlpZiAoIWJzcy0+aW5mb3JtYXRpb25fZWxlbWVudHMgfHwKKwkgICAgIWJzcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIG5lZWRlZCwgZnJhZ21lbnQgdGhlIElFcyBidWZmZXIgKGF0IElFIGJvdW5kYXJpZXMpIGludG8gc2hvcnQKKwkgKiBlbm91Z2ggZnJhZ21lbnRzIHRvIGZpdCBpbnRvIElXX0dFTkVSSUNfSUVfTUFYIG9jdGV0IG1lc3NhZ2VzLgorCSAqLworCXBvcyA9IGJzcy0+aW5mb3JtYXRpb25fZWxlbWVudHM7CisJZW5kID0gcG9zICsgYnNzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CisKKwl3aGlsZSAoZW5kIC0gcG9zID4gSVdfR0VORVJJQ19JRV9NQVgpIHsKKwkJbmV4dCA9IHBvcyArIDIgKyBwb3NbMV07CisJCXdoaWxlIChuZXh0ICsgMiArIG5leHRbMV0gLSBwb3MgPCBJV19HRU5FUklDX0lFX01BWCkKKwkJCW5leHQgPSBuZXh0ICsgMiArIG5leHRbMV07CisKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXh0IC0gcG9zOworCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAorCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKKworCQlwb3MgPSBuZXh0OworCX0KKworCWlmIChlbmQgPiBwb3MpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmQgLSBwb3M7CisJCSpjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgKmN1cnJlbnRfZXYsCisJCQkJCQkgICBlbmRfYnVmLCAmaXdlLCBwb3MpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZWxhcHNlZF9qaWZmaWVzX21zZWNzKHVuc2lnbmVkIGxvbmcgc3RhcnQpCit7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzOworCisJaWYgKGVuZCA+PSBzdGFydCkKKwkJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kIC0gc3RhcnQpOworCisJcmV0dXJuIGppZmZpZXNfdG9fbXNlY3MoZW5kICsgKE1BWF9KSUZGWV9PRkZTRVQgLSBzdGFydCkgKyAxKTsKK30KKworc3RhdGljIGNoYXIgKgoraWVlZTgwMjExX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgY2hhciAqY3VycmVudF9ldiwKKwkgICAgICBjaGFyICplbmRfYnVmKQoreworCXN0cnVjdCBpd19ldmVudCBpd2U7CisJdTggKmJ1ZiwgKmNmZywgKnA7CisJdTggKmllID0gYnNzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHM7CisJaW50IHJlbSA9IGJzcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywgaSwgc2lnOworCWJvb2wgaXNtZXNoID0gZmFsc2U7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5wdWIuYnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9BRERSX0xFTik7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5wdWIuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCWl3ZS51LmZyZXEuZSA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCSAgSVdfRVZfRlJFUV9MRU4pOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJaXdlLnUuZnJlcS5tID0gYnNzLT5wdWIuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJaXdlLnUuZnJlcS5lID0gNjsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9GUkVRX0xFTik7CisKKwlpZiAod2lwaHktPnNpZ25hbF90eXBlICE9IENGRzgwMjExX1NJR05BTF9UWVBFX05PTkUpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZRVUFMOworCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQgfAorCQkJCSAgICAgSVdfUVVBTF9OT0lTRV9JTlZBTElEIHwKKwkJCQkgICAgIElXX1FVQUxfUVVBTF9VUERBVEVEOworCQlzd2l0Y2ggKHdpcGh5LT5zaWduYWxfdHlwZSkgeworCQljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKKwkJCXNpZyA9IGJzcy0+cHViLnNpZ25hbCAvIDEwMDsKKwkJCWl3ZS51LnF1YWwubGV2ZWwgPSBzaWc7CisJCQlpd2UudS5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9EQk07CisJCQlpZiAoc2lnIDwgLTExMCkJCS8qIHJhdGhlciBiYWQgKi8KKwkJCQlzaWcgPSAtMTEwOworCQkJZWxzZSBpZiAoc2lnID4gLTQwKQkvKiBwZXJmZWN0ICovCisJCQkJc2lnID0gLTQwOworCQkJLyogd2lsbCBnaXZlIGEgcmFuZ2Ugb2YgMCAuLiA3MCAqLworCQkJaXdlLnUucXVhbC5xdWFsID0gc2lnICsgMTEwOworCQkJYnJlYWs7CisJCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOgorCQkJaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+cHViLnNpZ25hbDsKKwkJCS8qIHdpbGwgZ2l2ZSByYW5nZSAwIC4uIDEwMCAqLworCQkJaXdlLnUucXVhbC5xdWFsID0gYnNzLT5wdWIuc2lnbmFsOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBub3QgcmVhY2hlZCAqLworCQkJYnJlYWs7CisJCX0KKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwl9CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsICIiKTsKKworCXdoaWxlIChyZW0gPj0gMikgeworCQkvKiBpbnZhbGlkIGRhdGEgKi8KKwkJaWYgKGllWzFdID4gcmVtIC0gMikKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoaWVbMF0pIHsKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgorCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGllICsgMik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0lEOgorCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGllICsgMik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0NPTkZJRzoKKwkJCWlzbWVzaCA9IHRydWU7CisJCQlpZiAoaWVbMV0gIT0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTikKKwkJCQlicmVhazsKKwkJCWJ1ZiA9IGttYWxsb2MoNTAsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFidWYpCisJCQkJYnJlYWs7CisJCQljZmcgPSBpZSArIDI7CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCQlzcHJpbnRmKGJ1ZiwgIk1lc2ggbmV0d29yayAodmVyc2lvbiAlZCkiLCBjZmdbMF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIlBhdGggU2VsZWN0aW9uIFByb3RvY29sIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1sxXSwgY2ZnWzJdLCBjZmdbM10sCisJCQkJCQkJY2ZnWzRdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJQYXRoIFNlbGVjdGlvbiBNZXRyaWMgSUQ6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzVdLCBjZmdbNl0sIGNmZ1s3XSwKKwkJCQkJCQljZmdbOF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIkNvbmdlc3Rpb24gQ29udHJvbCBNb2RlIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s5XSwgY2ZnWzEwXSwKKwkJCQkJCQljZmdbMTFdLCBjZmdbMTJdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJc3ByaW50ZihidWYsICJDaGFubmVsIFByZWNlZGVuY2U6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzEzXSwgY2ZnWzE0XSwKKwkJCQkJCQljZmdbMTVdLCBjZmdbMTZdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQkgIGVuZF9idWYsCisJCQkJCQkJICAmaXdlLCBidWYpOworCQkJa2ZyZWUoYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisJCWNhc2UgV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6CisJCQkvKiBkaXNwbGF5IGFsbCBzdXBwb3J0ZWQgcmF0ZXMgaW4gcmVhZGFibGUgZm9ybWF0ICovCisJCQlwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKKworCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgaWVbMV07IGkrKykgeworCQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPQorCQkJCQkoKGllW2kgKyAyXSAmIDB4N2YpICogNTAwMDAwKTsKKwkJCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwKKwkJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisJCQl9CisJCQljdXJyZW50X2V2ID0gcDsKKwkJCWJyZWFrOworCQl9CisJCXJlbSAtPSBpZVsxXSArIDI7CisJCWllICs9IGllWzFdICsgMjsKKwl9CisKKwlpZiAoYnNzLT5wdWIuY2FwYWJpbGl0eSAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpCisJICAgIHx8IGlzbWVzaCkgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJCWlmIChpc21lc2gpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NRVNIOworCQllbHNlIGlmIChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQorCisJYnVmID0ga21hbGxvYygzMCwgR0ZQX0FUT01JQyk7CisJaWYgKGJ1ZikgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJc3ByaW50ZihidWYsICJ0c2Y9JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJzcy0+cHViLnRzZikpOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCXNwcmludGYoYnVmLCAiIExhc3QgYmVhY29uOiAldW1zIGFnbyIsCisJCQllbGFwc2VkX2ppZmZpZXNfbXNlY3MoYnNzLT50cykpOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKKwkJa2ZyZWUoYnVmKTsKKwl9CisKKwlpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKGluZm8sICZic3MtPnB1YiwgJmN1cnJlbnRfZXYsIGVuZF9idWYpOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwljaGFyICpjdXJyZW50X2V2ID0gYnVmOworCWNoYXIgKmVuZF9idWYgPSBidWYgKyBsZW47CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfZXhwaXJlKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ1ZiArIGxlbiAtIGN1cnJlbnRfZXYgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwkJCXJldHVybiAtRTJCSUc7CisJCX0KKwkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9ic3MoJmRldi0+d2lwaHksIGluZm8sIGJzcywKKwkJCQkJICAgY3VycmVudF9ldiwgZW5kX2J1Zik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKK30KKworCitpbnQgY2ZnODAyMTFfd2V4dF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCWludCByZXM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTkVURE9XTjsKKworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXYtPmlmaW5kZXgpOworCisJaWYgKElTX0VSUihyZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisKKwlpZiAocmRldi0+c2Nhbl9yZXEpIHsKKwkJcmVzID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzID0gaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhyZGV2LCBpbmZvLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKKwlkYXRhLT5sZW5ndGggPSAwOworCWlmIChyZXMgPj0gMCkgeworCQlkYXRhLT5sZW5ndGggPSByZXM7CisJCXJlcyA9IDA7CisJfQorCisgb3V0OgorCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdzY2FuKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwppbmRleCA3OWEzODI4Li5lZmUzYzVjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYworKysgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwpAQCAtMzEsNyArMzEsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm10ICJcbiIsIGRldl90b19yZGV2KGRldiktPm1lbWJlcik7CVwKIH0KIAotU0hPV19GTVQoaW5kZXgsICIlZCIsIGlkeCk7CitTSE9XX0ZNVChpbmRleCwgIiVkIiwgd2lwaHlfaWR4KTsKIFNIT1dfRk1UKG1hY2FkZHJlc3MsICIlcE0iLCB3aXBoeS5wZXJtX2FkZHIpOwogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaWVlZTgwMjExX2Rldl9hdHRyc1tdID0gewpAQCAtNTUsNiArNTUsNDEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHdpcGh5X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gZGV2X3RvX3JkZXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXJkZXYtPnN1c3BlbmRfYXQgPSBnZXRfc2Vjb25kcygpOworCisJaWYgKHJkZXYtPm9wcy0+c3VzcGVuZCkgeworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gcmRldi0+b3BzLT5zdXNwZW5kKCZyZGV2LT53aXBoeSk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3aXBoeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRldl90b19yZGV2KGRldik7CisJaW50IHJldCA9IDA7CisKKwkvKiBBZ2Ugc2NhbiByZXN1bHRzIHdpdGggdGltZSBzcGVudCBpbiBzdXNwZW5kICovCisJc3Bpbl9sb2NrX2JoKCZyZGV2LT5ic3NfbG9jayk7CisJY2ZnODAyMTFfYnNzX2FnZShyZGV2LCBnZXRfc2Vjb25kcygpIC0gcmRldi0+c3VzcGVuZF9hdCk7CisJc3Bpbl91bmxvY2tfYmgoJnJkZXYtPmJzc19sb2NrKTsKKworCWlmIChyZGV2LT5vcHMtPnJlc3VtZSkgeworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gcmRldi0+b3BzLT5yZXN1bWUoJnJkZXYtPndpcGh5KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdHJ1Y3QgY2xhc3MgaWVlZTgwMjExX2NsYXNzID0gewogCS5uYW1lID0gImllZWU4MDIxMSIsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC02Myw2ICs5OCw4IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIAkuZGV2X3VldmVudCA9IHdpcGh5X3VldmVudCwKICNlbmRpZgorCS5zdXNwZW5kID0gd2lwaHlfc3VzcGVuZCwKKwkucmVzdW1lID0gd2lwaHlfcmVzdW1lLAogfTsKIAogaW50IHdpcGh5X3N5c2ZzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IGU3NmNjMjguLjQ4N2NkZDkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtOSw3ICs5LDcgQEAKIAogc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfcmVzcG9uc2VfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCSAgICB1NjQgYmFzaWNfcmF0ZXMsIGludCBiaXRyYXRlKQorCQkJICAgIHUzMiBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyZXN1bHQgPSAmc2JhbmQtPmJpdHJhdGVzWzBdOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1OGU0ODlmLi5iODRhOWI0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtMTM3LDMgKzEzNywxMDAgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdtb2RlKTsKKworCitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJaW50IGMgPSAwOworCisJaWYgKCF3ZGV2KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIxOworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OworCisJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisKKwlzd2l0Y2ggKHdkZXYtPndpcGh5LT5zaWduYWxfdHlwZSkgeworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IC0xMTA7CisJCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gNzA7CisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMzU7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQlicmVhazsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTAwOworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKKwkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJYnJlYWs7CisJfQorCisJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gcmFuZ2UtPm1heF9xdWFsLmxldmVsIC8gMjsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSByYW5nZS0+bWF4X3F1YWwubm9pc2UgLyAyOworCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQ7CisKKwlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKKwkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKKworCisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKKwkJaW50IGk7CisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJCXNiYW5kID0gd2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdOworCisJCWlmICghc2JhbmQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgJiYgYyA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCisJCQlpZiAoIShjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgeworCQkJCXJhbmdlLT5mcmVxW2NdLmkgPQorCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJCQljaGFuLT5jZW50ZXJfZnJlcSk7CisJCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmNlbnRlcl9mcmVxOworCQkJCXJhbmdlLT5mcmVxW2NdLmUgPSA2OworCQkJCWMrKzsKKwkJCX0KKwkJfQorCX0KKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gYzsKKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGM7CisKKwlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CisKKwlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X2dpd3JhbmdlKTsKZGlmZiAtLWdpdCBhL25ldC94MjUvYWZfeDI1LmMgYi9uZXQveDI1L2FmX3gyNS5jCmluZGV4IDlmYzViMDIuLjljYTE3YjEgMTAwNjQ0Ci0tLSBhL25ldC94MjUvYWZfeDI1LmMKKysrIGIvbmV0L3gyNS9hZl94MjUuYwpAQCAtOTUxLDEwICs5NTEsOCBAQAogCS8qCiAJICoJSW5jb21pbmcgQ2FsbCBVc2VyIERhdGEuCiAJICovCi0JaWYgKHNrYi0+bGVuID49IDApIHsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7Ci0JCW1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRsZW5ndGggPSBza2ItPmxlbjsKLQl9CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7CisJbWFrZXgyNS0+Y2FsbHVzZXJkYXRhLmN1ZGxlbmd0aCA9IHNrYi0+bGVuOwogCiAJc2stPnNrX2Fja19iYWNrbG9nKys7CiAKQEAgLTExMjIsOCArMTEyMCw5IEBACiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJc2tiX3F1ZXVlX3RhaWwoJngyNS0+aW50ZXJydXB0X291dF9xdWV1ZSwgc2tiKTsKIAllbHNlIHsKLQkJbGVuID0geDI1X291dHB1dChzaywgc2tiKTsKLQkJaWYgKGxlbiA8IDApCisJCXJjID0geDI1X291dHB1dChzaywgc2tiKTsKKwkJbGVuID0gcmM7CisJCWlmIChyYyA8IDApCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJZWxzZSBpZiAoeDI1LT5xYml0aW5jbCkKIAkJCWxlbisrOwpAQCAtMTYwOCw4ICsxNjA3LDggQEAKIAogU09DS09QU19XUkFQKHgyNV9wcm90bywgQUZfWDI1KTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB4MjVfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX1gyNSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHgyNV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfWDI1KSwKIAkuZnVuYyA9CXgyNV9sYXBiX3JlY2VpdmVfZnJhbWUsCiB9OwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IGUwNjM2NTc3Li5jMThmYTE1IDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmxpYgorKysgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICAtRCJLQlVJTERfTU9ETkFNRT1LQlVJTERfU1RSKCQoY2FsbCBuYW1lLWZpeCwkKG1vZG5hbWUpKSkiKQogCiAjaGFzaCB2YWx1ZXMKLWlmZGVmIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRworaWZkZWYgQ09ORklHX0RZTkFNSUNfREVCVUcKIGRlYnVnX2ZsYWdzID0gLUQiREVCVUdfSEFTSD0kKHNoZWxsIC4vc2NyaXB0cy9iYXNpYy9oYXNoIGRqYjIgJChARCkkKG1vZG5hbWUpKSJcCiAgICAgICAgICAgICAgIC1EIkRFQlVHX0hBU0gyPSQoc2hlbGwgLi9zY3JpcHRzL2Jhc2ljL2hhc2ggcjUgJChARCkkKG1vZG5hbWUpKSIKIGVsc2UKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbCBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbAppbmRleCBkYjMwZmFjLi41NmY5MGE0IDEwMDY0NAotLS0gYS9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwKKysrIGIvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCkBAIC0zOCw3ICszOCw3IEBACiAJCSZjaGVja19hc21fdHlwZXMoKTsKIAkJJmNoZWNrX3NpemV0eXBlcygpOwogCQkmY2hlY2tfcHJvdG90eXBlcygpOwotCQkmY2hlY2tfY29uZmlnKCk7CisJCSMgRHJvcHBlZCBmb3Igbm93LiBUb28gbXVjaCBub2lzZSAmY2hlY2tfY29uZmlnKCk7CiAJfQogCWNsb3NlIEZIOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCmluZGV4IDRlZWE2MGIuLmEzMzQ0MjggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTcxMCw2ICs3MTAsMTQgQEAKIAlzdHJjYXQoYWxpYXMsICI6Iik7CiAJcmV0dXJuIDE7CiB9CisKK3N0YXRpYyBpbnQgZG9fcGxhdGZvcm1fZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkLCBjaGFyICphbGlhcykKK3sKKwlzcHJpbnRmKGFsaWFzLCBQTEFURk9STV9NT0RVTEVfUFJFRklYICIlcyIsIGlkLT5uYW1lKTsKKwlyZXR1cm4gMTsKK30KKwogLyogSWdub3JlIGFueSBwcmVmaXgsIGVnLiBzb21lIGFyY2hpdGVjdHVyZXMgcHJlcGVuZCBfICovCiBzdGF0aWMgaW5saW5lIGludCBzeW1faXMoY29uc3QgY2hhciAqc3ltYm9sLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtODQ5LDYgKzg1NywxMCBAQAogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKIAkJCSBzaXplb2Yoc3RydWN0IGRtaV9zeXN0ZW1faWQpLCAiZG1pIiwKIAkJCSBkb19kbWlfZW50cnksIG1vZCk7CisJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9wbGF0Zm9ybV9kZXZpY2VfdGFibGUiKSkKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQpLCAicGxhdGZvcm0iLAorCQkJIGRvX3BsYXRmb3JtX2VudHJ5LCBtb2QpOwogCWZyZWUoemVyb3MpOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9LY29uZmlnIGIvc2VjdXJpdHkvS2NvbmZpZwppbmRleCA5NDM4NTM1Li5iYjI0NDc3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9LY29uZmlnCisrKyBiL3NlY3VyaXR5L0tjb25maWcKQEAgLTU1LDcgKzU1LDggQEAKIAlib29sICJFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbSIKIAloZWxwCiAJICBUaGlzIHdpbGwgYnVpbGQgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5Ci0JICB0aGUgVFBNIGJpb3MgY2hhcmFjdGVyIGRyaXZlci4gIEl0IGlzIG5vdCB1c2VkIGJ5IFNFTGludXggb3IgU01BQ0suCisJICB0aGUgVFBNIGJpb3MgY2hhcmFjdGVyIGRyaXZlciBhbmQgSU1BLCBhbiBpbnRlZ3JpdHkgcHJvdmlkZXIuICBJdCBpcworCSAgbm90IHVzZWQgYnkgU0VMaW51eCBvciBTTUFDSy4KIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KIApAQCAtMTM0LDYgKzEzNSw5IEBACiAKIHNvdXJjZSBzZWN1cml0eS9zZWxpbnV4L0tjb25maWcKIHNvdXJjZSBzZWN1cml0eS9zbWFjay9LY29uZmlnCitzb3VyY2Ugc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKKworc291cmNlIHNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L01ha2VmaWxlIGIvc2VjdXJpdHkvTWFrZWZpbGUKaW5kZXggYzA1YzEyNy4uZmE3NzAyMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBvYmotJChDT05GSUdfS0VZUykJCQkrPSBrZXlzLwogc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpCSs9IHNlbGludXgKIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9TTUFDSykJCSs9IHNtYWNrCitzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKSAgICAgICAgKz0gdG9tb3lvCiAKICMgYWx3YXlzIGVuYWJsZSBkZWZhdWx0IGNhcGFiaWxpdGllcwogb2JqLXkJCSs9IGNvbW1vbmNhcC5vCkBAIC0xNSw1ICsxNiwxMCBAQAogIyBNdXN0IHByZWNlZGUgY2FwYWJpbGl0eS5vIGluIG9yZGVyIHRvIHN0YWNrIHByb3Blcmx5Lgogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpCQkrPSBzZWxpbnV4L2J1aWx0LWluLm8KIG9iai0kKENPTkZJR19TRUNVUklUWV9TTUFDSykJCSs9IHNtYWNrL2J1aWx0LWluLm8KK29iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pCQkrPSB0b21veW8vYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHKQkJKz0gcm9vdF9wbHVnLm8KIG9iai0kKENPTkZJR19DR1JPVVBfREVWSUNFKQkJKz0gZGV2aWNlX2Nncm91cC5vCisKKyMgT2JqZWN0IGludGVncml0eSBmaWxlIGxpc3RzCitzdWJkaXItJChDT05GSUdfSU1BKQkJCSs9IGludGVncml0eS9pbWEKK29iai0kKENPTkZJR19JTUEpCQkJKz0gaW50ZWdyaXR5L2ltYS9idWlsdC1pbi5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbm9kZS5jIGIvc2VjdXJpdHkvaW5vZGUuYwppbmRleCAwMDdlZjI1Li5mM2I5MWJmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbm9kZS5jCisrKyBiL3NlY3VyaXR5L2lub2RlLmMKQEAgLTIwMiwxMiArMjAyLDExIEBACiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1Y2NlZWRzLiAgVGhpcwogICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgc2VjdXJpdHlmc19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzCiAgKiB0byBiZSByZW1vdmVkIChubyBhdXRvbWF0aWMgY2xlYW51cCBoYXBwZW5zIGlmIHlvdXIgbW9kdWxlIGlzIHVubG9hZGVkLAotICogeW91IGFyZSByZXNwb25zaWJsZSBoZXJlKS4gIElmIGFuIGVycm9yIG9jY3VycywgJU5VTEwgaXMgcmV0dXJuZWQuCisgKiB5b3UgYXJlIHJlc3BvbnNpYmxlIGhlcmUpLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqIHRoZSBlcm9yciB2YWx1ZSAodmlhIEVSUl9QVFIpLgogICoKICAqIElmIHNlY3VyaXR5ZnMgaXMgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbCwgdGhlIHZhbHVlICUtRU5PREVWIGlzCi0gKiByZXR1cm5lZC4gIEl0IGlzIG5vdCB3aXNlIHRvIGNoZWNrIGZvciB0aGlzIHZhbHVlLCBidXQgcmF0aGVyLCBjaGVjayBmb3IKLSAqICVOVUxMIG9yICElTlVMTCBpbnN0ZWFkIGFzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgI2lmZGVmIGluIHRoZSBjYWxsaW5nCi0gKiBjb2RlLgorICogcmV0dXJuZWQuCiAgKi8KIHN0cnVjdCBkZW50cnkgKnNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCiAJCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDk3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKQEAgLTAsMCArMSw1NSBAQAorIyBJQk0gSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZQorIworY29uZmlnIElNQQorCWJvb2wgIkludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUoSU1BKSIKKwlkZXBlbmRzIG9uIEFDUEkKKwlzZWxlY3QgU0VDVVJJVFlGUworCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0hNQUMKKwlzZWxlY3QgQ1JZUFRPX01ENQorCXNlbGVjdCBDUllQVE9fU0hBMQorCXNlbGVjdCBUQ0dfVFBNCisJc2VsZWN0IFRDR19USVMKKwloZWxwCisJICBUaGUgVHJ1c3RlZCBDb21wdXRpbmcgR3JvdXAoVENHKSBydW50aW1lIEludGVncml0eQorCSAgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkgbWFpbnRhaW5zIGEgbGlzdCBvZiBoYXNoCisJICB2YWx1ZXMgb2YgZXhlY3V0YWJsZXMgYW5kIG90aGVyIHNlbnNpdGl2ZSBzeXN0ZW0gZmlsZXMsCisJICBhcyB0aGV5IGFyZSByZWFkIG9yIGV4ZWN1dGVkLiBJZiBhbiBhdHRhY2tlciBtYW5hZ2VzCisJICB0byBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIGFuIGltcG9ydGFudCBzeXN0ZW0gZmlsZQorCSAgYmVpbmcgbWVhc3VyZWQsIHdlIGNhbiB0ZWxsLgorCisJICBJZiB5b3VyIHN5c3RlbSBoYXMgYSBUUE0gY2hpcCwgdGhlbiBJTUEgYWxzbyBtYWludGFpbnMKKwkgIGFuIGFnZ3JlZ2F0ZSBpbnRlZ3JpdHkgdmFsdWUgb3ZlciB0aGlzIGxpc3QgaW5zaWRlIHRoZQorCSAgVFBNIGhhcmR3YXJlLCBzbyB0aGF0IHRoZSBUUE0gY2FuIHByb3ZlIHRvIGEgdGhpcmQgcGFydHkKKwkgIHdoZXRoZXIgb3Igbm90IGNyaXRpY2FsIHN5c3RlbSBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQuCisJICBSZWFkIDxodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL3NlYzA0L3RlY2gvc2FpbGVyLmh0bWw+CisJICB0byBsZWFybiBtb3JlIGFib3V0IElNQS4KKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBJTUFfTUVBU1VSRV9QQ1JfSURYCisJaW50CisJZGVwZW5kcyBvbiBJTUEKKwlyYW5nZSA4IDE0CisJZGVmYXVsdCAxMAorCWhlbHAKKwkgIElNQV9NRUFTVVJFX1BDUl9JRFggZGV0ZXJtaW5lcyB0aGUgVFBNIFBDUiByZWdpc3RlciBpbmRleAorCSAgdGhhdCBJTUEgdXNlcyB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IGFnZ3JlZ2F0ZSBvZiB0aGUKKwkgIG1lYXN1cmVtZW50IGxpc3QuICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCAxMC4KKworY29uZmlnIElNQV9BVURJVAorCWJvb2wKKwlkZXBlbmRzIG9uIElNQQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYSBrZXJuZWwgcGFyYW1ldGVyICdpbWFfYXVkaXQnLCB3aGljaAorCSAgYWxsb3dzIGluZm9ybWF0aW9uYWwgYXVkaXRpbmcgbWVzc2FnZXMgdG8gYmUgZW5hYmxlZAorCSAgYXQgYm9vdC4gIElmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCBpbmZvcm1hdGlvbmFsIGludGVncml0eQorCSAgYXVkaXRpbmcgbWVzc2FnZXMgY2FuIGJlIGVuYWJsZWQgd2l0aCAnaW1hX2F1ZGl0PTEnIG9uCisJICB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKworY29uZmlnIElNQV9MU01fUlVMRVMKKwlib29sCisJZGVwZW5kcyBvbiBJTUEgJiYgQVVESVQgJiYgKFNFQ1VSSVRZX1NFTElOVVggfHwgU0VDVVJJVFlfU01BQ0spCisJZGVmYXVsdCB5CisJaGVscAorCSAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgZGlzcmVnYXJkIExTTSBiYXNlZCBwb2xpY3kgcnVsZXMuCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL01ha2VmaWxlIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODdjNGNiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwJ3MoVENHKSBydW50aW1lIEludGVncml0eQorIyBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUoSU1BKS4KKyMKKworb2JqLSQoQ09ORklHX0lNQSkgKz0gaW1hLm8KKworaW1hLXkgOj0gaW1hX2ZzLm8gaW1hX3F1ZXVlLm8gaW1hX2luaXQubyBpbWFfbWFpbi5vIGltYV9jcnlwdG8ubyBpbWFfYXBpLm8gXAorCSBpbWFfcG9saWN5Lm8gaW1hX2lpbnQubyBpbWFfYXVkaXQubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaCBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1ZWI1MwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYS5oCisgKglpbnRlcm5hbCBJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlIChJTUEpIGRlZmluaXRpb25zCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0lNQV9ICisjZGVmaW5lIF9fTElOVVhfSU1BX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvdHBtLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKworZW51bSBpbWFfc2hvd190eXBlIHsgSU1BX1NIT1dfQklOQVJZLCBJTUFfU0hPV19BU0NJSSB9OworZW51bSB0cG1fcGNycyB7IFRQTV9QQ1IwID0gMCwgVFBNX1BDUjggPSA4IH07CisKKy8qIGRpZ2VzdCBzaXplIGZvciBJTUEsIGZpdHMgU0hBMSBvciBNRDUgKi8KKyNkZWZpbmUgSU1BX0RJR0VTVF9TSVpFCQkyMAorI2RlZmluZSBJTUFfRVZFTlRfTkFNRV9MRU5fTUFYCTI1NQorCisjZGVmaW5lIElNQV9IQVNIX0JJVFMgOQorI2RlZmluZSBJTUFfTUVBU1VSRV9IVEFCTEVfU0laRSAoMSA8PCBJTUFfSEFTSF9CSVRTKQorCisvKiBzZXQgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCitleHRlcm4gaW50IGltYV9pbml0aWFsaXplZDsKK2V4dGVybiBpbnQgaW1hX3VzZWRfY2hpcDsKK2V4dGVybiBjaGFyICppbWFfaGFzaDsKKworLyogSU1BIGlub2RlIHRlbXBsYXRlIGRlZmluaXRpb24gKi8KK3N0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSB7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CS8qIHNoYTEvbWQ1IG1lYXN1cmVtZW50IGhhc2ggKi8KKwljaGFyIGZpbGVfbmFtZVtJTUFfRVZFTlRfTkFNRV9MRU5fTUFYICsgMV07CS8qIG5hbWUgKyBcMCAqLworfTsKKworc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSB7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CS8qIHNoYTEgb3IgbWQ1IG1lYXN1cmVtZW50IGhhc2ggKi8KKwljb25zdCBjaGFyICp0ZW1wbGF0ZV9uYW1lOworCWludCB0ZW1wbGF0ZV9sZW47CisJc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhIHRlbXBsYXRlOworfTsKKworc3RydWN0IGltYV9xdWV1ZV9lbnRyeSB7CisJc3RydWN0IGhsaXN0X25vZGUgaG5leHQ7CS8qIHBsYWNlIGluIGhhc2ggY29sbGlzaW9uIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxhdGVyOwkJLyogcGxhY2UgaW4gaW1hX21lYXN1cmVtZW50cyBsaXN0ICovCisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7Cit9OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaW1hX21lYXN1cmVtZW50czsJLyogbGlzdCBvZiBhbGwgbWVhc3VyZW1lbnRzICovCisKKy8qIGRlY2xhcmF0aW9ucyAqLwordm9pZCBpbnRlZ3JpdHlfYXVkaXRfbXNnKGludCBhdWRpdF9tc2dubywgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqb3AsCisJCQkgY29uc3QgY2hhciAqY2F1c2UsIGludCByZXN1bHQsIGludCBpbmZvKTsKKworLyogSW50ZXJuYWwgSU1BIGZ1bmN0aW9uIGRlZmluaXRpb25zICovCit2b2lkIGltYV9paW50Y2FjaGVfaW5pdCh2b2lkKTsKK2ludCBpbWFfaW5pdCh2b2lkKTsKK3ZvaWQgaW1hX2NsZWFudXAodm9pZCk7CitpbnQgaW1hX2ZzX2luaXQodm9pZCk7Cit2b2lkIGltYV9mc19jbGVhbnVwKHZvaWQpOworaW50IGltYV9hZGRfdGVtcGxhdGVfZW50cnkoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksIGludCB2aW9sYXRpb24sCisJCQkgICBjb25zdCBjaGFyICpvcCwgc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgaW1hX2NhbGNfaGFzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqZGlnZXN0KTsKK2ludCBpbWFfY2FsY190ZW1wbGF0ZV9oYXNoKGludCB0ZW1wbGF0ZV9sZW4sIHZvaWQgKnRlbXBsYXRlLCBjaGFyICpkaWdlc3QpOworaW50IGltYV9jYWxjX2Jvb3RfYWdncmVnYXRlKGNoYXIgKmRpZ2VzdCk7Cit2b2lkIGltYV9hZGRfdmlvbGF0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqb3AsIGNvbnN0IGNoYXIgKmNhdXNlKTsKKworLyoKKyAqIHVzZWQgdG8gcHJvdGVjdCBoX3RhYmxlIGFuZCBzaGFfdGFibGUKKyAqLworZXh0ZXJuIHNwaW5sb2NrX3QgaW1hX3F1ZXVlX2xvY2s7CisKK3N0cnVjdCBpbWFfaF90YWJsZSB7CisJYXRvbWljX2xvbmdfdCBsZW47CS8qIG51bWJlciBvZiBzdG9yZWQgbWVhc3VyZW1lbnRzIGluIHRoZSBsaXN0ICovCisJYXRvbWljX2xvbmdfdCB2aW9sYXRpb25zOworCXN0cnVjdCBobGlzdF9oZWFkIHF1ZXVlW0lNQV9NRUFTVVJFX0hUQUJMRV9TSVpFXTsKK307CitleHRlcm4gc3RydWN0IGltYV9oX3RhYmxlIGltYV9odGFibGU7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbWFfaGFzaF9rZXkodTggKmRpZ2VzdCkKK3sKKwlyZXR1cm4gaGFzaF9sb25nKCpkaWdlc3QsIElNQV9IQVNIX0JJVFMpOworfQorCisvKiBpaW50IGNhY2hlIGZsYWdzICovCisjZGVmaW5lIElNQV9NRUFTVVJFRAkJMQorI2RlZmluZSBJTUFfSUlOVF9EVU1QX1NUQUNLCTUxMgorCisvKiBpbnRlZ3JpdHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSB7CisJdTY0IHZlcnNpb247CQkvKiB0cmFjayBpbm9kZSBjaGFuZ2VzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CS8qIHByb3RlY3RzOiB2ZXJzaW9uLCBmbGFncywgZGlnZXN0ICovCisJbG9uZyByZWFkY291bnQ7CQkvKiBtZWFzdXJlZCBmaWxlcyByZWFkY291bnQgKi8KKwlsb25nIHdyaXRlY291bnQ7CS8qIG1lYXN1cmVkIGZpbGVzIHdyaXRlY291bnQgKi8KKwlsb25nIG9wZW5jb3VudDsJCS8qIG9wZW5zIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCBrcmVmIHJlZmNvdW50OwkvKiBpbWFfaWludF9jYWNoZSByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworfTsKKworLyogTElNIEFQSSBmdW5jdGlvbiBkZWZpbml0aW9ucyAqLworaW50IGltYV9tdXN0X21lYXN1cmUoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgIGludCBtYXNrLCBpbnQgZnVuY3Rpb24pOworaW50IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUpOwordm9pZCBpbWFfc3RvcmVfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKTsKK2ludCBpbWFfc3RvcmVfdGVtcGxhdGUoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksIGludCB2aW9sYXRpb24sCisJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgaW1hX3RlbXBsYXRlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICplLAorCQkgICAgICAgZW51bSBpbWFfc2hvd190eXBlIHNob3cpOworCisvKiByYWRpeCB0cmVlIGNhbGxzIHRvIGxvb2t1cCwgaW5zZXJ0LCBkZWxldGUKKyAqIGludGVncml0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSk7CitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2luc2VydF9nZXQoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGltYV9paW50X2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgaWludF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKTsKK3ZvaWQgaWludF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSk7CisKKy8qIElNQSBwb2xpY3kgcmVsYXRlZCBmdW5jdGlvbnMgKi8KK2VudW0gaW1hX2hvb2tzIHsgUEFUSF9DSEVDSyA9IDEsIEZJTEVfTU1BUCwgQlBSTV9DSEVDSyB9OworCitpbnQgaW1hX21hdGNoX3BvbGljeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGltYV9ob29rcyBmdW5jLCBpbnQgbWFzayk7Cit2b2lkIGltYV9pbml0X3BvbGljeSh2b2lkKTsKK3ZvaWQgaW1hX3VwZGF0ZV9wb2xpY3kodm9pZCk7CitpbnQgaW1hX3BhcnNlX2FkZF9ydWxlKGNoYXIgKik7Cit2b2lkIGltYV9kZWxldGVfcnVsZXModm9pZCk7CisKKy8qIExTTSBiYXNlZCBwb2xpY3kgcnVsZXMgcmVxdWlyZSBhdWRpdCAqLworI2lmZGVmIENPTkZJR19JTUFfTFNNX1JVTEVTCisKKyNkZWZpbmUgc2VjdXJpdHlfZmlsdGVyX3J1bGVfaW5pdCBzZWN1cml0eV9hdWRpdF9ydWxlX2luaXQKKyNkZWZpbmUgc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2ggc2VjdXJpdHlfYXVkaXRfcnVsZV9tYXRjaAorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWx0ZXJfcnVsZV9pbml0KHUzMiBmaWVsZCwgdTMyIG9wLCBjaGFyICpydWxlc3RyLAorCQkJCQkgICAgdm9pZCAqKmxzbXJ1bGUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoKHUzMiBzZWNpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisJCQkJCSAgICAgdm9pZCAqbHNtcnVsZSwKKwkJCQkJICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYWN0eCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfSU1BX0xTTV9SVUxFUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDU4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9hcGkuYworICoJSW1wbGVtZW50cyBtdXN0X21lYXN1cmUsIGNvbGxlY3RfbWVhc3VyZW1lbnQsIHN0b3JlX21lYXN1cmVtZW50LAorICoJYW5kIHN0b3JlX3RlbXBsYXRlLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKK3N0YXRpYyBjb25zdCBjaGFyICpJTUFfVEVNUExBVEVfTkFNRSA9ICJpbWEiOworCisvKgorICogaW1hX3N0b3JlX3RlbXBsYXRlIC0gc3RvcmUgaW1hIHRlbXBsYXRlIG1lYXN1cmVtZW50cworICoKKyAqIENhbGN1bGF0ZSB0aGUgaGFzaCBvZiBhIHRlbXBsYXRlIGVudHJ5LCBhZGQgdGhlIHRlbXBsYXRlIGVudHJ5CisgKiB0byBhbiBvcmRlcmVkIGxpc3Qgb2YgbWVhc3VyZW1lbnQgZW50cmllcyBtYWludGFpbmVkIGluc2lkZSB0aGUga2VybmVsLAorICogYW5kIGFsc28gdXBkYXRlIHRoZSBhZ2dyZWdhdGUgaW50ZWdyaXR5IHZhbHVlIChtYWludGFpbmVkIGluc2lkZSB0aGUKKyAqIGNvbmZpZ3VyZWQgVFBNIFBDUikgb3ZlciB0aGUgaGFzaGVzIG9mIHRoZSBjdXJyZW50IGxpc3Qgb2YgbWVhc3VyZW1lbnQKKyAqIGVudHJpZXMuCisgKgorICogQXBwbGljYXRpb25zIHJldHJpZXZlIHRoZSBjdXJyZW50IGtlcm5lbC1oZWxkIG1lYXN1cmVtZW50IGxpc3QgdGhyb3VnaAorICogdGhlIHNlY3VyaXR5ZnMgZW50cmllcyBpbiAvc3lzL2tlcm5lbC9zZWN1cml0eS9pbWEuIFRoZSBzaWduZWQgYWdncmVnYXRlCisgKiBUUE0gUENSIChjYWxsZWQgcXVvdGUpIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgYSBUUE0gdXNlciBzcGFjZSBsaWJyYXJ5CisgKiBhbmQgaXMgdXNlZCB0byB2YWxpZGF0ZSB0aGUgbWVhc3VyZW1lbnQgbGlzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IGltYV9zdG9yZV90ZW1wbGF0ZShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwKKwkJICAgICAgIGludCB2aW9sYXRpb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJY29uc3QgY2hhciAqb3AgPSAiYWRkX3RlbXBsYXRlX21lYXN1cmUiOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gImhhc2hpbmdfZXJyb3IiOworCWludCByZXN1bHQ7CisKKwltZW1zZXQoZW50cnktPmRpZ2VzdCwgMCwgc2l6ZW9mKGVudHJ5LT5kaWdlc3QpKTsKKwllbnRyeS0+dGVtcGxhdGVfbmFtZSA9IElNQV9URU1QTEFURV9OQU1FOworCWVudHJ5LT50ZW1wbGF0ZV9sZW4gPSBzaXplb2YoZW50cnktPnRlbXBsYXRlKTsKKworCWlmICghdmlvbGF0aW9uKSB7CisJCXJlc3VsdCA9IGltYV9jYWxjX3RlbXBsYXRlX2hhc2goZW50cnktPnRlbXBsYXRlX2xlbiwKKwkJCQkJCSZlbnRyeS0+dGVtcGxhdGUsCisJCQkJCQllbnRyeS0+ZGlnZXN0KTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsCisJCQkJCSAgICBlbnRyeS0+dGVtcGxhdGVfbmFtZSwgb3AsCisJCQkJCSAgICBhdWRpdF9jYXVzZSwgcmVzdWx0LCAwKTsKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwl9CisJcmVzdWx0ID0gaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeShlbnRyeSwgdmlvbGF0aW9uLCBvcCwgaW5vZGUpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpbWFfYWRkX3Zpb2xhdGlvbiAtIGFkZCB2aW9sYXRpb24gdG8gbWVhc3VyZW1lbnQgbGlzdC4KKyAqCisgKiBWaW9sYXRpb25zIGFyZSBmbGFnZ2VkIGluIHRoZSBtZWFzdXJlbWVudCBsaXN0IHdpdGggemVybyBoYXNoIHZhbHVlcy4KKyAqIEJ5IGV4dGVuZGluZyB0aGUgUENSIHdpdGggMHhGRidzIGluc3RlYWQgb2Ygd2l0aCB6ZXJvZXMsIHRoZSBQQ1IKKyAqIHZhbHVlIGlzIGludmFsaWRhdGVkLgorICovCit2b2lkIGltYV9hZGRfdmlvbGF0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqb3AsIGNvbnN0IGNoYXIgKmNhdXNlKQoreworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworCWludCB2aW9sYXRpb24gPSAxOworCWludCByZXN1bHQ7CisKKwkvKiBjYW4gb3ZlcmZsb3csIG9ubHkgaW5kaWNhdG9yICovCisJYXRvbWljX2xvbmdfaW5jKCZpbWFfaHRhYmxlLnZpb2xhdGlvbnMpOworCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisJbWVtc2V0KCZlbnRyeS0+dGVtcGxhdGUsIDAsIHNpemVvZihlbnRyeS0+dGVtcGxhdGUpKTsKKwlzdHJuY3B5KGVudHJ5LT50ZW1wbGF0ZS5maWxlX25hbWUsIGZpbGVuYW1lLCBJTUFfRVZFTlRfTkFNRV9MRU5fTUFYKTsKKwlyZXN1bHQgPSBpbWFfc3RvcmVfdGVtcGxhdGUoZW50cnksIHZpb2xhdGlvbiwgaW5vZGUpOworCWlmIChyZXN1bHQgPCAwKQorCQlrZnJlZShlbnRyeSk7CitlcnJfb3V0OgorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsIGZpbGVuYW1lLAorCQkJICAgIG9wLCBjYXVzZSwgcmVzdWx0LCAwKTsKK30KKworLyoqCisgKiBpbWFfbXVzdF9tZWFzdXJlIC0gbWVhc3VyZSBkZWNpc2lvbiBiYXNlZCBvbiBwb2xpY3kuCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgdG8gbWVhc3VyZQorICogQG1hc2s6IGNvbnRhaW5zIHRoZSBwZXJtaXNzaW9uIG1hc2sgKE1BWV9SRUFELCBNQVlfV1JJVEUsIE1BWV9FWEVDVVRFKQorICogQGZ1bmN0aW9uOiBjYWxsaW5nIGZ1bmN0aW9uIChQQVRIX0NIRUNLLCBCUFJNX0NIRUNLLCBGSUxFX01NQVApCisgKgorICogVGhlIHBvbGljeSBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIGtleXBhaXJzOgorICogCQlzdWJqPSwgb2JqPSwgdHlwZT0sIGZ1bmM9LCBtYXNrPSwgZnNtYWdpYz0KKyAqCXN1Ymosb2JqLCBhbmQgdHlwZTogYXJlIExTTSBzcGVjaWZpYy4KKyAqIAlmdW5jOiBQQVRIX0NIRUNLIHwgQlBSTV9DSEVDSyB8IEZJTEVfTU1BUAorICogCW1hc2s6IGNvbnRhaW5zIHRoZSBwZXJtaXNzaW9uIG1hc2sKKyAqCWZzbWFnaWM6IGhleCB2YWx1ZQorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaWludC0+bXV0ZXggaGVsZC4KKyAqCisgKiBSZXR1cm4gMCB0byBtZWFzdXJlLiBSZXR1cm4gMSBpZiBhbHJlYWR5IG1lYXN1cmVkLgorICogRm9yIG1hdGNoaW5nIGEgRE9OVF9NRUFTVVJFIHBvbGljeSwgbm8gcG9saWN5LCBvciBvdGhlcgorICogZXJyb3IsIHJldHVybiBhbiBlcnJvciBjb2RlLgorKi8KK2ludCBpbWFfbXVzdF9tZWFzdXJlKHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICBpbnQgbWFzaywgaW50IGZ1bmN0aW9uKQoreworCWludCBtdXN0X21lYXN1cmU7CisKKwlpZiAoaWludC0+ZmxhZ3MgJiBJTUFfTUVBU1VSRUQpCisJCXJldHVybiAxOworCisJbXVzdF9tZWFzdXJlID0gaW1hX21hdGNoX3BvbGljeShpbm9kZSwgZnVuY3Rpb24sIG1hc2spOworCXJldHVybiBtdXN0X21lYXN1cmUgPyAwIDogLUVBQ0NFUzsKK30KKworLyoKKyAqIGltYV9jb2xsZWN0X21lYXN1cmVtZW50IC0gY29sbGVjdCBmaWxlIG1lYXN1cmVtZW50CisgKgorICogQ2FsY3VsYXRlIHRoZSBmaWxlIGhhc2gsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCwKKyAqIHN0b3JpbmcgdGhlIG1lYXN1cmVtZW50IGFuZCBpX3ZlcnNpb24gaW4gdGhlIGlpbnQuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpaW50LT5tdXRleCBoZWxkLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXN1bHQgPSAtRUVYSVNUOworCisJaWYgKCEoaWludC0+ZmxhZ3MgJiBJTUFfTUVBU1VSRUQpKSB7CisJCXU2NCBpX3ZlcnNpb24gPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV92ZXJzaW9uOworCisJCW1lbXNldChpaW50LT5kaWdlc3QsIDAsIElNQV9ESUdFU1RfU0laRSk7CisJCXJlc3VsdCA9IGltYV9jYWxjX2hhc2goZmlsZSwgaWludC0+ZGlnZXN0KTsKKwkJaWYgKCFyZXN1bHQpCisJCQlpaW50LT52ZXJzaW9uID0gaV92ZXJzaW9uOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogaW1hX3N0b3JlX21lYXN1cmVtZW50IC0gc3RvcmUgZmlsZSBtZWFzdXJlbWVudAorICoKKyAqIENyZWF0ZSBhbiAiaW1hIiB0ZW1wbGF0ZSBhbmQgdGhlbiBzdG9yZSB0aGUgdGVtcGxhdGUgYnkgY2FsbGluZworICogaW1hX3N0b3JlX3RlbXBsYXRlLgorICoKKyAqIFdlIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIGlub2RlIGhhcyBub3QgYWxyZWFkeSBiZWVuIG1lYXN1cmVkLAorICogYnV0IHRoZSBtZWFzdXJlbWVudCBjb3VsZCBhbHJlYWR5IGV4aXN0OgorICogCS0gbXVsdGlwbGUgY29waWVzIG9mIHRoZSBzYW1lIGZpbGUgb24gZWl0aGVyIHRoZSBzYW1lIG9yCisgKgkgIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKyAqCS0gdGhlIGlub2RlIHdhcyBwcmV2aW91c2x5IGZsdXNoZWQgYXMgd2VsbCBhcyB0aGUgaWludCBpbmZvLAorICoJICBjb250YWluaW5nIHRoZSBoYXNoaW5nIGluZm8uCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpaW50LT5tdXRleCBoZWxkLgorICovCit2b2lkIGltYV9zdG9yZV9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3QgY2hhciAqb3AgPSAiYWRkX3RlbXBsYXRlX21lYXN1cmUiOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gIkVOT01FTSI7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworCWludCB2aW9sYXRpb24gPSAwOworCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsIGZpbGVuYW1lLAorCQkJCSAgICBvcCwgYXVkaXRfY2F1c2UsIHJlc3VsdCwgMCk7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KCZlbnRyeS0+dGVtcGxhdGUsIDAsIHNpemVvZihlbnRyeS0+dGVtcGxhdGUpKTsKKwltZW1jcHkoZW50cnktPnRlbXBsYXRlLmRpZ2VzdCwgaWludC0+ZGlnZXN0LCBJTUFfRElHRVNUX1NJWkUpOworCXN0cm5jcHkoZW50cnktPnRlbXBsYXRlLmZpbGVfbmFtZSwgZmlsZW5hbWUsIElNQV9FVkVOVF9OQU1FX0xFTl9NQVgpOworCisJcmVzdWx0ID0gaW1hX3N0b3JlX3RlbXBsYXRlKGVudHJ5LCB2aW9sYXRpb24sIGlub2RlKTsKKwlpZiAoIXJlc3VsdCkKKwkJaWludC0+ZmxhZ3MgfD0gSU1BX01FQVNVUkVEOworCWVsc2UKKwkJa2ZyZWUoZW50cnkpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXVkaXQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2F1ZGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwODJiYgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2F1ZGl0LmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbnRlZ3JpdHlfYXVkaXQuYworICogCUF1ZGl0IGNhbGxzIGZvciB0aGUgaW50ZWdyaXR5IHN1YnN5c3RlbQorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSAiaW1hLmgiCisKK3N0YXRpYyBpbnQgaW1hX2F1ZGl0OworCisjaWZkZWYgQ09ORklHX0lNQV9BVURJVAorCisvKiBpbWFfYXVkaXRfc2V0dXAgLSBlbmFibGUgaW5mb3JtYXRpb25hbCBhdWRpdGluZyBtZXNzYWdlcyAqLworc3RhdGljIGludCBfX2luaXQgaW1hX2F1ZGl0X3NldHVwKGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIGF1ZGl0OworCWludCByYywgcmVzdWx0ID0gMDsKKwljaGFyICpvcCA9ICJpbWFfYXVkaXQiOworCWNoYXIgKmNhdXNlOworCisJcmMgPSBzdHJpY3Rfc3RydG91bChzdHIsIDAsICZhdWRpdCk7CisJaWYgKHJjIHx8IGF1ZGl0ID4gMSkKKwkJcmVzdWx0ID0gMTsKKwllbHNlCisJCWltYV9hdWRpdCA9IGF1ZGl0OworCWNhdXNlID0gaW1hX2F1ZGl0ID8gImVuYWJsZWQiIDogIm5vdF9lbmFibGVkIjsKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsIE5VTEwsCisJCQkgICAgb3AsIGNhdXNlLCByZXN1bHQsIDApOworCXJldHVybiAxOworfQorX19zZXR1cCgiaW1hX2F1ZGl0PSIsIGltYV9hdWRpdF9zZXR1cCk7CisjZW5kaWYKKwordm9pZCBpbnRlZ3JpdHlfYXVkaXRfbXNnKGludCBhdWRpdF9tc2dubywgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqb3AsCisJCQkgY29uc3QgY2hhciAqY2F1c2UsIGludCByZXN1bHQsIGludCBhdWRpdF9pbmZvKQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCisJaWYgKCFpbWFfYXVkaXQgJiYgYXVkaXRfaW5mbyA9PSAxKSAvKiBTa2lwIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKi8KKwkJcmV0dXJuOworCisJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY3VycmVudC0+YXVkaXRfY29udGV4dCwgR0ZQX0tFUk5FTCwgYXVkaXRfbXNnbm8pOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJpbnRlZ3JpdHk6IHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSBzZXM9JXUiLAorCQkJIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y3JlZC0+dWlkLAorCQkJIGF1ZGl0X2dldF9sb2dpbnVpZChjdXJyZW50KSwKKwkJCSBhdWRpdF9nZXRfc2Vzc2lvbmlkKGN1cnJlbnQpKTsKKwlhdWRpdF9sb2dfdGFza19jb250ZXh0KGFiKTsKKwlzd2l0Y2ggKGF1ZGl0X21zZ25vKSB7CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfREFUQToKKwljYXNlIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQToKKwljYXNlIEFVRElUX0lOVEVHUklUWV9QQ1I6CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfU1RBVFVTOgorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9wPSVzIGNhdXNlPSVzIiwgb3AsIGNhdXNlKTsKKwkJYnJlYWs7CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfSEFTSDoKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvcD0lcyBoYXNoPSVzIiwgb3AsIGNhdXNlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvcD0lcyIsIG9wKTsKKwl9CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBjb21tPSIpOworCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIGN1cnJlbnQtPmNvbW0pOworCWlmIChmbmFtZSkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7CisJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIGZuYW1lKTsKKwl9CisJaWYgKGlub2RlKQorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGRldj0lcyBpbm89JWx1IiwKKwkJCQkgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiByZXM9JWQiLCAhcmVzdWx0ID8gMCA6IDEpOworCWF1ZGl0X2xvZ19lbmQoYWIpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfY3J5cHRvLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9jcnlwdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQ1NzJiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfY3J5cHRvLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKiBLeWxlbmUgSGFsbCA8a2poYWxsQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2NyeXB0by5jCisgKiAJQ2FsY3VsYXRlcyBtZDUvc2hhMSBmaWxlIGhhc2gsIHRlbXBsYXRlIGhhc2gsIGJvb3QtYWdncmVhdGUgaGFzaAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworc3RhdGljIGludCBpbml0X2Rlc2Moc3RydWN0IGhhc2hfZGVzYyAqZGVzYykKK3sKKwlpbnQgcmM7CisKKwlkZXNjLT50Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaChpbWFfaGFzaCwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihkZXNjLT50Zm0pKSB7CisJCXByX2luZm8oImZhaWxlZCB0byBsb2FkICVzIHRyYW5zZm9ybTogJWxkXG4iLAorCQkJaW1hX2hhc2gsIFBUUl9FUlIoZGVzYy0+dGZtKSk7CisJCXJjID0gUFRSX0VSUihkZXNjLT50Zm0pOworCQlyZXR1cm4gcmM7CisJfQorCWRlc2MtPmZsYWdzID0gMDsKKwlyYyA9IGNyeXB0b19oYXNoX2luaXQoZGVzYyk7CisJaWYgKHJjKQorCQljcnlwdG9fZnJlZV9oYXNoKGRlc2MtPnRmbSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBNRDUvU0hBMSBmaWxlIGRpZ2VzdAorICovCitpbnQgaW1hX2NhbGNfaGFzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqZGlnZXN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJbG9mZl90IGlfc2l6ZTsKKwljaGFyICpyYnVmOworCWludCByYywgb2Zmc2V0ID0gMDsKKworCXJjID0gaW5pdF9kZXNjKCZkZXNjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJcmJ1ZiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJidWYpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJaV9zaXplID0gaV9zaXplX3JlYWQoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXdoaWxlIChvZmZzZXQgPCBpX3NpemUpIHsKKwkJaW50IHJidWZfbGVuOworCisJCXJidWZfbGVuID0ga2VybmVsX3JlYWQoZmlsZSwgb2Zmc2V0LCByYnVmLCBQQUdFX1NJWkUpOworCQlpZiAocmJ1Zl9sZW4gPCAwKSB7CisJCQlyYyA9IHJidWZfbGVuOworCQkJYnJlYWs7CisJCX0KKwkJb2Zmc2V0ICs9IHJidWZfbGVuOworCQlzZ19pbml0X29uZShzZywgcmJ1ZiwgcmJ1Zl9sZW4pOworCisJCXJjID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCBzZywgcmJ1Zl9sZW4pOworCQlpZiAocmMpCisJCQlicmVhazsKKwl9CisJa2ZyZWUocmJ1Zik7CisJaWYgKCFyYykKKwkJcmMgPSBjcnlwdG9faGFzaF9maW5hbCgmZGVzYywgZGlnZXN0KTsKK291dDoKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGhhc2ggb2YgYSBnaXZlbiB0ZW1wbGF0ZQorICovCitpbnQgaW1hX2NhbGNfdGVtcGxhdGVfaGFzaChpbnQgdGVtcGxhdGVfbGVuLCB2b2lkICp0ZW1wbGF0ZSwgY2hhciAqZGlnZXN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJaW50IHJjOworCisJcmMgPSBpbml0X2Rlc2MoJmRlc2MpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlzZ19pbml0X29uZShzZywgdGVtcGxhdGUsIHRlbXBsYXRlX2xlbik7CisJcmMgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsIHNnLCB0ZW1wbGF0ZV9sZW4pOworCWlmICghcmMpCisJCXJjID0gY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRpZ2VzdCk7CisJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLnRmbSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBpbWFfcGNycmVhZChpbnQgaWR4LCB1OCAqcGNyKQoreworCWlmICghaW1hX3VzZWRfY2hpcCkKKwkJcmV0dXJuOworCisJaWYgKHRwbV9wY3JfcmVhZChUUE1fQU5ZX05VTSwgaWR4LCBwY3IpICE9IDApCisJCXByX2VycigiRXJyb3IgQ29tbXVuaWNhdGluZyB0byBUUE0gY2hpcFxuIik7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGJvb3QgYWdncmVnYXRlIGhhc2gKKyAqLworaW50IGltYV9jYWxjX2Jvb3RfYWdncmVnYXRlKGNoYXIgKmRpZ2VzdCkKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCXU4IHBjcl9pW0lNQV9ESUdFU1RfU0laRV07CisJaW50IHJjLCBpOworCisJcmMgPSBpbml0X2Rlc2MoJmRlc2MpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBjdW11bGF0aXZlIHNoYTEgb3ZlciB0cG0gcmVnaXN0ZXJzIDAtNyAqLworCWZvciAoaSA9IFRQTV9QQ1IwOyBpIDwgVFBNX1BDUjg7IGkrKykgeworCQlpbWFfcGNycmVhZChpLCBwY3JfaSk7CisJCS8qIG5vdyBhY2N1bXVsYXRlIHdpdGggY3VycmVudCBhZ2dyZWdhdGUgKi8KKwkJc2dfaW5pdF9vbmUoJnNnLCBwY3JfaSwgSU1BX0RJR0VTVF9TSVpFKTsKKwkJcmMgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsICZzZywgSU1BX0RJR0VTVF9TSVpFKTsKKwl9CisJaWYgKCFyYykKKwkJY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRpZ2VzdCk7CisJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLnRmbSk7CisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiZTI1OQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIEt5bGVuZSBIYWxsIDxramhhbGxAdXMuaWJtLmNvbT4KKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB1cy5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2ZzLmMKKyAqCWltcGxlbWVuZW50cyBzZWN1cml0eSBmaWxlIHN5c3RlbSBmb3IgcmVwb3J0aW5nCisgKgljdXJyZW50IG1lYXN1cmVtZW50IGxpc3QgYW5kIElNQSBzdGF0aXN0aWNzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorCisjaW5jbHVkZSAiaW1hLmgiCisKK3N0YXRpYyBpbnQgdmFsaWRfcG9saWN5ID0gMTsKKyNkZWZpbmUgVE1QQlVGTEVOIDEyCitzdGF0aWMgc3NpemVfdCBpbWFfc2hvd19odGFibGVfdmFsdWUoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJCSAgICAgbG9mZl90ICpwcG9zLCBhdG9taWNfbG9uZ190ICp2YWwpCit7CisJY2hhciB0bXBidWZbVE1QQlVGTEVOXTsKKwlzc2l6ZV90IGxlbjsKKworCWxlbiA9IHNjbnByaW50Zih0bXBidWYsIFRNUEJVRkxFTiwgIiVsaVxuIiwgYXRvbWljX2xvbmdfcmVhZCh2YWwpKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucyhzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiBpbWFfc2hvd19odGFibGVfdmFsdWUoYnVmLCBjb3VudCwgcHBvcywgJmltYV9odGFibGUudmlvbGF0aW9ucyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9odGFibGVfdmlvbGF0aW9uc19vcHMgPSB7CisJLnJlYWQgPSBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucworfTsKKworc3RhdGljIHNzaXplX3QgaW1hX3Nob3dfbWVhc3VyZW1lbnRzX2NvdW50KHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gaW1hX3Nob3dfaHRhYmxlX3ZhbHVlKGJ1ZiwgY291bnQsIHBwb3MsICZpbWFfaHRhYmxlLmxlbik7CisKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMgPSB7CisJLnJlYWQgPSBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQKK307CisKKy8qIHJldHVybnMgcG9pbnRlciB0byBobGlzdF9ub2RlICovCitzdGF0aWMgdm9pZCAqaW1hX21lYXN1cmVtZW50c19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCWxvZmZfdCBsID0gKnBvczsKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZTsKKworCS8qIHdlIG5lZWQgYSBsb2NrIHNpbmNlIHBvcyBjb3VsZCBwb2ludCBiZXlvbmQgbGFzdCBlbGVtZW50ICovCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHFlLCAmaW1hX21lYXN1cmVtZW50cywgbGF0ZXIpIHsKKwkJaWYgKCFsLS0pIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuIHFlOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqaW1hX21lYXN1cmVtZW50c19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUgPSB2OworCisJLyogbG9jayBwcm90ZWN0cyB3aGVuIHJlYWRpbmcgYmV5b25kIGxhc3QgZWxlbWVudAorCSAqIGFnYWluc3QgY29uY3VycmVudCBsaXN0LWV4dGVuc2lvbgorCSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlxZSA9IGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHFlLT5sYXRlci5uZXh0KSwKKwkJCXN0cnVjdCBpbWFfcXVldWVfZW50cnksIGxhdGVyKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwkoKnBvcykrKzsKKworCXJldHVybiAoJnFlLT5sYXRlciA9PSAmaW1hX21lYXN1cmVtZW50cykgPyBOVUxMIDogcWU7Cit9CisKK3N0YXRpYyB2b2lkIGltYV9tZWFzdXJlbWVudHNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyB2b2lkIGltYV9wdXRjKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSwgaW50IGRhdGFsZW4pCit7CisJd2hpbGUgKGRhdGFsZW4tLSkKKwkJc2VxX3B1dGMobSwgKihjaGFyICopZGF0YSsrKTsKK30KKworLyogcHJpbnQgZm9ybWF0OgorICogICAgICAgMzJiaXQtbGU9cGNyIworICogICAgICAgY2hhclsyMF09dGVtcGxhdGUgZGlnZXN0CisgKiAgICAgICAzMmJpdC1sZT10ZW1wbGF0ZSBuYW1lIHNpemUKKyAqICAgICAgIGNoYXJbbl09dGVtcGxhdGUgbmFtZQorICogICAgICAgZXZlbnRkYXRhW25dPXRlbXBsYXRlIHNwZWNpZmljIGRhdGEKKyAqLworc3RhdGljIGludCBpbWFfbWVhc3VyZW1lbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCS8qIHRoZSBsaXN0IG5ldmVyIHNocmlua3MsIHNvIHdlIGRvbid0IG5lZWQgYSBsb2NrIGhlcmUgKi8KKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSA9IHY7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZTsKKwlpbnQgbmFtZWxlbjsKKwl1MzIgcGNyID0gQ09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFg7CisKKwkvKiBnZXQgZW50cnkgKi8KKwllID0gcWUtPmVudHJ5OworCWlmIChlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qCisJICogMXN0OiBQQ1JJbmRleAorCSAqIFBDUiB1c2VkIGlzIGFsd2F5cyB0aGUgc2FtZSAoY29uZmlnIG9wdGlvbikgaW4KKwkgKiBsaXR0bGUtZW5kaWFuIGZvcm1hdAorCSAqLworCWltYV9wdXRjKG0sICZwY3IsIHNpemVvZiBwY3IpOworCisJLyogMm5kOiB0ZW1wbGF0ZSBkaWdlc3QgKi8KKwlpbWFfcHV0YyhtLCBlLT5kaWdlc3QsIElNQV9ESUdFU1RfU0laRSk7CisKKwkvKiAzcmQ6IHRlbXBsYXRlIG5hbWUgc2l6ZSAqLworCW5hbWVsZW4gPSBzdHJsZW4oZS0+dGVtcGxhdGVfbmFtZSk7CisJaW1hX3B1dGMobSwgJm5hbWVsZW4sIHNpemVvZiBuYW1lbGVuKTsKKworCS8qIDR0aDogIHRlbXBsYXRlIG5hbWUgKi8KKwlpbWFfcHV0YyhtLCAodm9pZCAqKWUtPnRlbXBsYXRlX25hbWUsIG5hbWVsZW4pOworCisJLyogNXRoOiAgdGVtcGxhdGUgc3BlY2lmaWMgZGF0YSAqLworCWltYV90ZW1wbGF0ZV9zaG93KG0sIChzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgKikmZS0+dGVtcGxhdGUsCisJCQkgIElNQV9TSE9XX0JJTkFSWSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW1hX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKKwkuc3RhcnQgPSBpbWFfbWVhc3VyZW1lbnRzX3N0YXJ0LAorCS5uZXh0ID0gaW1hX21lYXN1cmVtZW50c19uZXh0LAorCS5zdG9wID0gaW1hX21lYXN1cmVtZW50c19zdG9wLAorCS5zaG93ID0gaW1hX21lYXN1cmVtZW50c19zaG93Cit9OworCitzdGF0aWMgaW50IGltYV9tZWFzdXJlbWVudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmltYV9tZWFzdXJtZW50c19zZXFvcHMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZW1lbnRzX29wcyA9IHsKKwkub3BlbiA9IGltYV9tZWFzdXJlbWVudHNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGltYV9wcmludF9kaWdlc3Qoc3RydWN0IHNlcV9maWxlICptLCB1OCAqZGlnZXN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IElNQV9ESUdFU1RfU0laRTsgaSsrKQorCQlzZXFfcHJpbnRmKG0sICIlMDJ4IiwgKihkaWdlc3QgKyBpKSk7Cit9CisKK3ZvaWQgaW1hX3RlbXBsYXRlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICplLCBlbnVtIGltYV9zaG93X3R5cGUgc2hvdykKK3sKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgKmVudHJ5ID0gZTsKKwlpbnQgbmFtZWxlbjsKKworCXN3aXRjaCAoc2hvdykgeworCWNhc2UgSU1BX1NIT1dfQVNDSUk6CisJCWltYV9wcmludF9kaWdlc3QobSwgZW50cnktPmRpZ2VzdCk7CisJCXNlcV9wcmludGYobSwgIiAlc1xuIiwgZW50cnktPmZpbGVfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgSU1BX1NIT1dfQklOQVJZOgorCQlpbWFfcHV0YyhtLCBlbnRyeS0+ZGlnZXN0LCBJTUFfRElHRVNUX1NJWkUpOworCisJCW5hbWVsZW4gPSBzdHJsZW4oZW50cnktPmZpbGVfbmFtZSk7CisJCWltYV9wdXRjKG0sICZuYW1lbGVuLCBzaXplb2YgbmFtZWxlbik7CisJCWltYV9wdXRjKG0sIGVudHJ5LT5maWxlX25hbWUsIG5hbWVsZW4pOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyogcHJpbnQgaW4gYXNjaWkgKi8KK3N0YXRpYyBpbnQgaW1hX2FzY2lpX21lYXN1cmVtZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwkvKiB0aGUgbGlzdCBuZXZlciBzaHJpbmtzLCBzbyB3ZSBkb24ndCBuZWVkIGEgbG9jayBoZXJlICovCisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUgPSB2OworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmU7CisKKwkvKiBnZXQgZW50cnkgKi8KKwllID0gcWUtPmVudHJ5OworCWlmIChlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qIDFzdDogUENSIHVzZWQgKGNvbmZpZyBvcHRpb24pICovCisJc2VxX3ByaW50ZihtLCAiJTJkICIsIENPTkZJR19JTUFfTUVBU1VSRV9QQ1JfSURYKTsKKworCS8qIDJuZDogU0hBMSB0ZW1wbGF0ZSBoYXNoICovCisJaW1hX3ByaW50X2RpZ2VzdChtLCBlLT5kaWdlc3QpOworCisJLyogM3RoOiAgdGVtcGxhdGUgbmFtZSAqLworCXNlcV9wcmludGYobSwgIiAlcyAiLCBlLT50ZW1wbGF0ZV9uYW1lKTsKKworCS8qIDR0aDogIHRlbXBsYXRlIHNwZWNpZmljIGRhdGEgKi8KKwlpbWFfdGVtcGxhdGVfc2hvdyhtLCAoc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhICopJmUtPnRlbXBsYXRlLAorCQkJICBJTUFfU0hPV19BU0NJSSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19zZXFvcHMgPSB7CisJLnN0YXJ0ID0gaW1hX21lYXN1cmVtZW50c19zdGFydCwKKwkubmV4dCA9IGltYV9tZWFzdXJlbWVudHNfbmV4dCwKKwkuc3RvcCA9IGltYV9tZWFzdXJlbWVudHNfc3RvcCwKKwkuc2hvdyA9IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2hvdworfTsKKworc3RhdGljIGludCBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzID0geworCS5vcGVuID0gaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIHNzaXplX3QgaW1hX3dyaXRlX3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgZGF0YWxlbiwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKmRhdGE7CisJaW50IHJjOworCisJaWYgKGRhdGFsZW4gPj0gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoKnBwb3MgIT0gMCkgeworCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRhdGEgPSBrbWFsbG9jKGRhdGFsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGJ1ZiwgZGF0YWxlbikpIHsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkqKGRhdGEgKyBkYXRhbGVuKSA9ICdcMCc7CisJcmMgPSBpbWFfcGFyc2VfYWRkX3J1bGUoZGF0YSk7CisJaWYgKHJjIDwgMCkgeworCQlkYXRhbGVuID0gLUVJTlZBTDsKKwkJdmFsaWRfcG9saWN5ID0gMDsKKwl9CisKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZGF0YWxlbjsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmltYV9kaXI7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzOworc3RhdGljIHN0cnVjdCBkZW50cnkgKnJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKnZpb2xhdGlvbnM7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqaW1hX3BvbGljeTsKKworc3RhdGljIGF0b21pY190IHBvbGljeV9vcGVuY291bnQgPSBBVE9NSUNfSU5JVCgxKTsKKy8qCisgKiBpbWFfb3Blbl9wb2xpY3k6IHNlcXVlbnRpYWxpemUgYWNjZXNzIHRvIHRoZSBwb2xpY3kgZmlsZQorICovCitpbnQgaW1hX29wZW5fcG9saWN5KHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBvbGljeV9vcGVuY291bnQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVCVVNZOworfQorCisvKgorICogaW1hX3JlbGVhc2VfcG9saWN5IC0gc3RhcnQgdXNpbmcgdGhlIG5ldyBtZWFzdXJlIHBvbGljeSBydWxlcy4KKyAqCisgKiBJbml0aWFsbHksIGltYV9tZWFzdXJlIHBvaW50cyB0byB0aGUgZGVmYXVsdCBwb2xpY3kgcnVsZXMsIG5vdworICogcG9pbnQgdG8gdGhlIG5ldyBwb2xpY3kgcnVsZXMsIGFuZCByZW1vdmUgdGhlIHNlY3VyaXR5ZnMgcG9saWN5IGZpbGUsCisgKiBhc3N1bWluZyBhIHZhbGlkIHBvbGljeS4KKyAqLworc3RhdGljIGludCBpbWFfcmVsZWFzZV9wb2xpY3koc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKCF2YWxpZF9wb2xpY3kpIHsKKwkJaW1hX2RlbGV0ZV9ydWxlcygpOworCQl2YWxpZF9wb2xpY3kgPSAxOworCQlhdG9taWNfc2V0KCZwb2xpY3lfb3BlbmNvdW50LCAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWltYV91cGRhdGVfcG9saWN5KCk7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX3BvbGljeSk7CisJaW1hX3BvbGljeSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlX3BvbGljeV9vcHMgPSB7CisJLm9wZW4gPSBpbWFfb3Blbl9wb2xpY3ksCisJLndyaXRlID0gaW1hX3dyaXRlX3BvbGljeSwKKwkucmVsZWFzZSA9IGltYV9yZWxlYXNlX3BvbGljeQorfTsKKworaW50IGltYV9mc19pbml0KHZvaWQpCit7CisJaW1hX2RpciA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigiaW1hIiwgTlVMTCk7CisJaWYgKElTX0VSUihpbWFfZGlyKSkKKwkJcmV0dXJuIC0xOworCisJYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgiYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzIiwKKwkJCQkgICBTX0lSVVNSIHwgU19JUkdSUCwgaW1hX2RpciwgTlVMTCwKKwkJCQkgICAmaW1hX21lYXN1cmVtZW50c19vcHMpOworCWlmIChJU19FUlIoYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzKSkKKwkJZ290byBvdXQ7CisKKwlhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoImFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzIiwKKwkJCQkgICBTX0lSVVNSIHwgU19JUkdSUCwgaW1hX2RpciwgTlVMTCwKKwkJCQkgICAmaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMpOworCWlmIChJU19FUlIoYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMpKQorCQlnb3RvIG91dDsKKworCXJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50ID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgicnVudGltZV9tZWFzdXJlbWVudHNfY291bnQiLAorCQkJCSAgIFNfSVJVU1IgfCBTX0lSR1JQLCBpbWFfZGlyLCBOVUxMLAorCQkJCSAgICZpbWFfbWVhc3VyZW1lbnRzX2NvdW50X29wcyk7CisJaWYgKElTX0VSUihydW50aW1lX21lYXN1cmVtZW50c19jb3VudCkpCisJCWdvdG8gb3V0OworCisJdmlvbGF0aW9ucyA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoInZpb2xhdGlvbnMiLCBTX0lSVVNSIHwgU19JUkdSUCwKKwkJCQkgICBpbWFfZGlyLCBOVUxMLCAmaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyk7CisJaWYgKElTX0VSUih2aW9sYXRpb25zKSkKKwkJZ290byBvdXQ7CisKKwlpbWFfcG9saWN5ID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgicG9saWN5IiwKKwkJCQkJICAgIFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JV1VTUiwKKwkJCQkJICAgIGltYV9kaXIsIE5VTEwsCisJCQkJCSAgICAmaW1hX21lYXN1cmVfcG9saWN5X29wcyk7CisJaWYgKElTX0VSUihpbWFfcG9saWN5KSkKKwkJZ290byBvdXQ7CisKKwlyZXR1cm4gMDsKK291dDoKKwlzZWN1cml0eWZzX3JlbW92ZShydW50aW1lX21lYXN1cmVtZW50c19jb3VudCk7CisJc2VjdXJpdHlmc19yZW1vdmUoYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX2Rpcik7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX3BvbGljeSk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIF9fZXhpdCBpbWFfZnNfY2xlYW51cCh2b2lkKQoreworCXNlY3VyaXR5ZnNfcmVtb3ZlKHZpb2xhdGlvbnMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKHJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50KTsKKwlzZWN1cml0eWZzX3JlbW92ZShhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfZGlyKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfcG9saWN5KTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzc5ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfaWludC5jCisgKiAJLSBpbXBsZW1lbnRzIHRoZSBJTUEgaG9va3M6IGltYV9pbm9kZV9hbGxvYywgaW1hX2lub2RlX2ZyZWUKKyAqCS0gY2FjaGUgaW50ZWdyaXR5IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICoJICB1c2luZyBhIHJhZGl4IHRyZWUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworI2RlZmluZSBpbWFfaWludF9kZWxldGUgaW1hX2lub2RlX2ZyZWUKKworUkFESVhfVFJFRShpbWFfaWludF9zdG9yZSwgR0ZQX0FUT01JQyk7CitERUZJTkVfU1BJTkxPQ0soaW1hX2lpbnRfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaWludF9jYWNoZSBfX3JlYWRfbW9zdGx5OworCisvKiBpbWFfaWludF9maW5kX2dldCAtIHJldHVybiB0aGUgaWludCBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqCisgKiBpbWFfaWludF9maW5kX2dldCBnZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBpaW50LiBDYWxsZXIgbXVzdAorICogcmVtZW1iZXIgdG8gcHV0IHRoZSBpaW50IHJlZmVyZW5jZS4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpaW50ID0gcmFkaXhfdHJlZV9sb29rdXAoJmltYV9paW50X3N0b3JlLCAodW5zaWduZWQgbG9uZylpbm9kZSk7CisJaWYgKCFpaW50KQorCQlnb3RvIG91dDsKKwlrcmVmX2dldCgmaWludC0+cmVmY291bnQpOworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBpaW50OworfQorCisvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vZGUKKyAqIGZyb20gdGhlIGlpbnRfY2FjaGUgc2xhYiwgaW5pdGlhbGl6ZSB0aGUgaWludCwgYW5kCisgKiBpbnNlcnQgaXQgaW50byB0aGUgcmFkaXggdHJlZS4KKyAqCisgKiBPbiBzdWNjZXNzIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGlpbnQ7IG9uIGZhaWx1cmUgcmV0dXJuIE5VTEwuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBpaW50OworCWlpbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGlpbnRfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghaWludCkKKwkJcmV0dXJuIGlpbnQ7CisKKwlyYyA9IHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CisJcmMgPSByYWRpeF90cmVlX2luc2VydCgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlLCBpaW50KTsKKwlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CitvdXQ6CisJaWYgKHJjIDwgMCkgeworCQlrbWVtX2NhY2hlX2ZyZWUoaWludF9jYWNoZSwgaWludCk7CisJCWlmIChyYyA9PSAtRUVYSVNUKSB7CisJCQlzcGluX2xvY2soJmltYV9paW50X2xvY2spOworCQkJaWludCA9IHJhZGl4X3RyZWVfbG9va3VwKCZpbWFfaWludF9zdG9yZSwKKwkJCQkJCSAodW5zaWduZWQgbG9uZylpbm9kZSk7CisJCQlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CisJCX0gZWxzZQorCQkJaWludCA9IE5VTEw7CisJfQorCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwlyZXR1cm4gaWludDsKK30KKworLyoqCisgKiBpbWFfaW5vZGVfYWxsb2MgLSBhbGxvY2F0ZSBhbiBpaW50IGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICogQGlub2RlOiBwb2ludGVyIHRvIHRoZSBpbm9kZQorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4KKyAqLworaW50IGltYV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWlpbnQgPSBpbWFfaWludF9pbnNlcnQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldCAtIGdldCB0aGUgaWludCBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqCisgKiBNb3N0IGluc2VydGlvbnMgYXJlIGRvbmUgYXQgaW5vZGVfYWxsb2MsIGV4Y2VwdCB0aG9zZSBhbGxvY2F0ZWQKKyAqIGJlZm9yZSBsYXRlX2luaXRjYWxsLiBXaGVuIHRoZSBpaW50IGRvZXMgbm90IGV4aXN0LCBhbGxvY2F0ZSBpdCwKKyAqIGluaXRpYWxpemUgYW5kIGluc2VydCBpdCwgYW5kIGluY3JlbWVudCB0aGUgaWludCByZWZjb3VudC4KKyAqCisgKiAoQ2FuJ3QgaW5pdGlhbGl6ZSBhdCBzZWN1cml0eV9pbml0Y2FsbCBiZWZvcmUgYW55IGlub2RlcyBhcmUKKyAqIGFsbG9jYXRlZCwgZ290IHRvIHdhaXQgYXQgbGVhc3QgdW50aWwgcHJvY19pbml0LikKKyAqCisgKiAgUmV0dXJuIHRoZSBpaW50LgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IE5VTEw7CisKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9nZXQoaW5vZGUpOworCWlmIChpaW50KQorCQlyZXR1cm4gaWludDsKKworCWlpbnQgPSBpbWFfaWludF9pbnNlcnQoaW5vZGUpOworCWlmIChpaW50KQorCQlrcmVmX2dldCgmaWludC0+cmVmY291bnQpOworCisJcmV0dXJuIGlpbnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbWFfaWludF9maW5kX2luc2VydF9nZXQpOworCisvKiBpaW50X2ZyZWUgLSBjYWxsZWQgd2hlbiB0aGUgaWludCByZWZjb3VudCBnb2VzIHRvIHplcm8gKi8KK3ZvaWQgaWludF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUsCisJCQkJCQkgICByZWZjb3VudCk7CisJaWludC0+dmVyc2lvbiA9IDA7CisJaWludC0+ZmxhZ3MgPSAwVUw7CisJaWYgKGlpbnQtPnJlYWRjb3VudCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWFkY291bnQ6ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAgaWludC0+cmVhZGNvdW50KTsKKwkJaWludC0+cmVhZGNvdW50ID0gMDsKKwl9CisJaWYgKGlpbnQtPndyaXRlY291bnQgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogd3JpdGVjb3VudDogJWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBpaW50LT53cml0ZWNvdW50KTsKKwkJaWludC0+d3JpdGVjb3VudCA9IDA7CisJfQorCWlmIChpaW50LT5vcGVuY291bnQgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogb3BlbmNvdW50OiAlbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGlpbnQtPm9wZW5jb3VudCk7CisJCWlpbnQtPm9wZW5jb3VudCA9IDA7CisJfQorCWtyZWZfc2V0KCZpaW50LT5yZWZjb3VudCwgMSk7CisJa21lbV9jYWNoZV9mcmVlKGlpbnRfY2FjaGUsIGlpbnQpOworfQorCit2b2lkIGlpbnRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBjb250YWluZXJfb2YocmN1X2hlYWQsCisJCQkJCQkgICBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUsIHJjdSk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworfQorCisvKioKKyAqIGltYV9paW50X2RlbGV0ZSAtIGNhbGxlZCBvbiBpbnRlZ3JpdHlfaW5vZGVfZnJlZQorICogQGlub2RlOiBwb2ludGVyIHRvIHRoZSBpbm9kZQorICoKKyAqIEZyZWUgdGhlIGludGVncml0eSBpbmZvcm1hdGlvbihpaW50KSBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUuCisgKi8KK3ZvaWQgaW1hX2lpbnRfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlzcGluX2xvY2soJmltYV9paW50X2xvY2spOworCWlpbnQgPSByYWRpeF90cmVlX2RlbGV0ZSgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlKTsKKwlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CisJaWYgKGlpbnQpCisJCWNhbGxfcmN1KCZpaW50LT5yY3UsIGlpbnRfcmN1X2ZyZWUpOworfQorCitzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IGZvbzsKKworCW1lbXNldChpaW50LCAwLCBzaXplb2YgKmlpbnQpOworCWlpbnQtPnZlcnNpb24gPSAwOworCWlpbnQtPmZsYWdzID0gMFVMOworCW11dGV4X2luaXQoJmlpbnQtPm11dGV4KTsKKwlpaW50LT5yZWFkY291bnQgPSAwOworCWlpbnQtPndyaXRlY291bnQgPSAwOworCWlpbnQtPm9wZW5jb3VudCA9IDA7CisJa3JlZl9zZXQoJmlpbnQtPnJlZmNvdW50LCAxKTsKK30KKwordm9pZCBpbWFfaWludGNhY2hlX2luaXQodm9pZCkKK3sKKwlpaW50X2NhY2hlID0KKwkgICAga21lbV9jYWNoZV9jcmVhdGUoImlpbnRfY2FjaGUiLCBzaXplb2Yoc3RydWN0IGltYV9paW50X2NhY2hlKSwgMCwKKwkJCSAgICAgIFNMQUJfUEFOSUMsIGluaXRfb25jZSk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9pbml0LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwYmI4YwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2luaXQuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBSZWluZXIgU2FpbGVyICAgICAgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIExlZW5kZXJ0IHZhbiBEb29ybiA8bGVlbmRlcnRAd2F0c29uLmlibS5jb20+CisgKiBNaW1pIFpvaGFyICAgICAgICAgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9pbml0LmMKKyAqICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworLyogbmFtZSBmb3IgYm9vdCBhZ2dyZWdhdGUgZW50cnkgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpib290X2FnZ3JlZ2F0ZV9uYW1lID0gImJvb3RfYWdncmVnYXRlIjsKK2ludCBpbWFfdXNlZF9jaGlwOworCisvKiBBZGQgdGhlIGJvb3QgYWdncmVnYXRlIHRvIHRoZSBJTUEgbWVhc3VyZW1lbnQgbGlzdCBhbmQgZXh0ZW5kCisgKiB0aGUgUENSIHJlZ2lzdGVyLgorICoKKyAqIENhbGN1bGF0ZSB0aGUgYm9vdCBhZ2dyZWdhdGUsIGEgU0hBMSBvdmVyIHRwbSByZWdpc3RlcnMgMC03LAorICogYXNzdW1pbmcgYSBUUE0gY2hpcCBleGlzdHMsIGFuZCB6ZXJvZXMgaWYgdGhlIFRQTSBjaGlwIGRvZXMgbm90CisgKiBleGlzdC4gIEFkZCB0aGUgYm9vdCBhZ2dyZWdhdGUgbWVhc3VyZW1lbnQgdG8gdGhlIG1lYXN1cmVtZW50CisgKiBsaXN0IGFuZCBleHRlbmQgdGhlIFBDUiByZWdpc3Rlci4KKyAqCisgKiBJZiBhIHRwbSBjaGlwIGRvZXMgbm90IGV4aXN0LCBpbmRpY2F0ZSB0aGUgY29yZSByb290IG9mIHRydXN0IGlzCisgKiBub3QgaGFyZHdhcmUgYmFzZWQgYnkgaW52YWxpZGF0aW5nIHRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlLgorICogKFRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlIGlzIGludmFsaWRhdGVkIGJ5IGFkZGluZyBvbmUgdmFsdWUgdG8KKyAqIHRoZSBtZWFzdXJlbWVudCBsaXN0IGFuZCBleHRlbmRpbmcgdGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUgd2l0aAorICogYSBkaWZmZXJlbnQgdmFsdWUuKSBWaW9sYXRpb25zIGFkZCBhIHplcm8gZW50cnkgdG8gdGhlIG1lYXN1cmVtZW50CisgKiBsaXN0IGFuZCBleHRlbmQgdGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUgd2l0aCBmZi4uLmZmJ3MuCisgKi8KK3N0YXRpYyB2b2lkIGltYV9hZGRfYm9vdF9hZ2dyZWdhdGUodm9pZCkKK3sKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKKwljb25zdCBjaGFyICpvcCA9ICJhZGRfYm9vdF9hZ2dyZWdhdGUiOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gIkVOT01FTSI7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisJaW50IHZpb2xhdGlvbiA9IDE7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCWdvdG8gZXJyX291dDsKKworCW1lbXNldCgmZW50cnktPnRlbXBsYXRlLCAwLCBzaXplb2YoZW50cnktPnRlbXBsYXRlKSk7CisJc3RybmNweShlbnRyeS0+dGVtcGxhdGUuZmlsZV9uYW1lLCBib290X2FnZ3JlZ2F0ZV9uYW1lLAorCQlJTUFfRVZFTlRfTkFNRV9MRU5fTUFYKTsKKwlpZiAoaW1hX3VzZWRfY2hpcCkgeworCQl2aW9sYXRpb24gPSAwOworCQlyZXN1bHQgPSBpbWFfY2FsY19ib290X2FnZ3JlZ2F0ZShlbnRyeS0+dGVtcGxhdGUuZGlnZXN0KTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWF1ZGl0X2NhdXNlID0gImhhc2hpbmdfZXJyb3IiOworCQkJa2ZyZWUoZW50cnkpOworCQkJZ290byBlcnJfb3V0OworCQl9CisJfQorCXJlc3VsdCA9IGltYV9zdG9yZV90ZW1wbGF0ZShlbnRyeSwgdmlvbGF0aW9uLCBOVUxMKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJa2ZyZWUoZW50cnkpOworCXJldHVybjsKK2Vycl9vdXQ6CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBOVUxMLCBib290X2FnZ3JlZ2F0ZV9uYW1lLCBvcCwKKwkJCSAgICBhdWRpdF9jYXVzZSwgcmVzdWx0LCAwKTsKK30KKworaW50IGltYV9pbml0KHZvaWQpCit7CisJdTggcGNyX2lbSU1BX0RJR0VTVF9TSVpFXTsKKwlpbnQgcmM7CisKKwlpbWFfdXNlZF9jaGlwID0gMDsKKwlyYyA9IHRwbV9wY3JfcmVhZChUUE1fQU5ZX05VTSwgMCwgcGNyX2kpOworCWlmIChyYyA9PSAwKQorCQlpbWFfdXNlZF9jaGlwID0gMTsKKworCWlmICghaW1hX3VzZWRfY2hpcCkKKwkJcHJfaW5mbygiTm8gVFBNIGNoaXAgZm91bmQsIGFjdGl2YXRpbmcgVFBNLWJ5cGFzcyFcbiIpOworCisJaW1hX2FkZF9ib290X2FnZ3JlZ2F0ZSgpOwkvKiBib290IGFnZ3JlZ2F0ZSBtdXN0IGJlIGZpcnN0IGVudHJ5ICovCisJaW1hX2luaXRfcG9saWN5KCk7CisKKwlyZXR1cm4gaW1hX2ZzX2luaXQoKTsKK30KKwordm9pZCBfX2V4aXQgaW1hX2NsZWFudXAodm9pZCkKK3sKKwlpbWFfZnNfY2xlYW51cCgpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTcyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIFNlcmdlIEhhbGx5biA8c2VydWVAdXMuaWJtLmNvbT4KKyAqIEt5bGVuZSBIYWxsIDxreWxlbmVAdXMuaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9tYWluLmMKKyAqICAgICAgICAgICAgIGltcGxlbWVudHMgdGhlIElNQSBob29rczogaW1hX2Jwcm1fY2hlY2ssIGltYV9maWxlX21tYXAsCisgKiAgICAgICAgICAgICBhbmQgaW1hX3BhdGhfY2hlY2suCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorCisjaW5jbHVkZSAiaW1hLmgiCisKK2ludCBpbWFfaW5pdGlhbGl6ZWQ7CisKK2NoYXIgKmltYV9oYXNoID0gInNoYTEiOworc3RhdGljIGludCBfX2luaXQgaGFzaF9zZXR1cChjaGFyICpzdHIpCit7CisJY29uc3QgY2hhciAqb3AgPSAiaGFzaF9zZXR1cCI7CisJY29uc3QgY2hhciAqaGFzaCA9ICJzaGExIjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgYXVkaXRfaW5mbyA9IDA7CisKKwlpZiAoc3RybmNtcChzdHIsICJtZDUiLCAzKSA9PSAwKSB7CisJCWhhc2ggPSAibWQ1IjsKKwkJaW1hX2hhc2ggPSBzdHI7CisJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgInNoYTEiLCA0KSAhPSAwKSB7CisJCWhhc2ggPSAiaW52YWxpZF9oYXNoX3R5cGUiOworCQlyZXN1bHQgPSAxOworCX0KKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9IQVNILCBOVUxMLCBOVUxMLCBvcCwgaGFzaCwKKwkJCSAgICByZXN1bHQsIGF1ZGl0X2luZm8pOworCXJldHVybiAxOworfQorX19zZXR1cCgiaW1hX2hhc2g9IiwgaGFzaF9zZXR1cCk7CisKKy8qKgorICogaW1hX2ZpbGVfZnJlZSAtIGNhbGxlZCBvbiBfX2ZwdXQoKQorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUgYmVpbmcgZnJlZWQKKyAqCisgKiBGbGFnIGZpbGVzIHRoYXQgY2hhbmdlZCwgYmFzZWQgb24gaV92ZXJzaW9uOworICogYW5kIGRlY3JlbWVudCB0aGUgaWludCByZWFkY291bnQvd3JpdGVjb3VudC4KKyAqLwordm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuOworCWlpbnQgPSBpbWFfaWludF9maW5kX2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJaWYgKGlpbnQtPm9wZW5jb3VudCA8PSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIlczogJXMgb3Blbi9mcmVlIGltYmFsYW5jZSAocjolbGQgdzolbGQgbzolbGQgZjolbGQpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCSAgICAgICBpaW50LT5yZWFkY291bnQsIGlpbnQtPndyaXRlY291bnQsCisJCSAgICAgICBpaW50LT5vcGVuY291bnQsIGF0b21pY19sb25nX3JlYWQoJmZpbGUtPmZfY291bnQpKTsKKwkJaWYgKCEoaWludC0+ZmxhZ3MgJiBJTUFfSUlOVF9EVU1QX1NUQUNLKSkgeworCQkJZHVtcF9zdGFjaygpOworCQkJaWludC0+ZmxhZ3MgfD0gSU1BX0lJTlRfRFVNUF9TVEFDSzsKKwkJfQorCX0KKwlpaW50LT5vcGVuY291bnQtLTsKKworCWlmICgoZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpID09IEZNT0RFX1JFQUQpCisJCWlpbnQtPnJlYWRjb3VudC0tOworCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCWlpbnQtPndyaXRlY291bnQtLTsKKwkJaWYgKGlpbnQtPndyaXRlY291bnQgPT0gMCkgeworCQkJaWYgKGlpbnQtPnZlcnNpb24gIT0gaW5vZGUtPmlfdmVyc2lvbikKKwkJCQlpaW50LT5mbGFncyAmPSB+SU1BX01FQVNVUkVEOworCQl9CisJfQorCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKK30KKworLyogaW1hX3JlYWRfd3JpdGVfY2hlY2sgLSByZWZsZWN0IHBvc3NpYmxlIHJlYWRpbmcvd3JpdGluZyBlcnJvcnMgaW4gdGhlIFBDUi4KKyAqCisgKiBXaGVuIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkLCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogdGhlIGZpbGUgY291bGQgY2hhbmdlLCByZXN1bHRpbmcgaW4gYSBmaWxlIG1lYXN1cmVtZW50IGVycm9yLgorICoKKyAqIE9wZW5pbmcgYSBmaWxlIGZvciB3cml0ZSwgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciByZWFkLCByZXN1bHRzCisgKiBpbiBhIHRpbWUgb2YgbWVhc3VyZSwgdGltZSBvZiB1c2UgKFRvTVRvVSkgZXJyb3IuCisgKgorICogSW4gZWl0aGVyIGNhc2UgaW52YWxpZGF0ZSB0aGUgUENSLgorICovCitlbnVtIGlpbnRfcGNyX2Vycm9yIHsgVE9NVE9VLCBPUEVOX1dSSVRFUlMgfTsKK3N0YXRpYyB2b2lkIGltYV9yZWFkX3dyaXRlX2NoZWNrKGVudW0gaWludF9wY3JfZXJyb3IgZXJyb3IsCisJCQkJIHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwKKwkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCit7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgVE9NVE9VOgorCQlpZiAoaWludC0+cmVhZGNvdW50ID4gMCkKKwkJCWltYV9hZGRfdmlvbGF0aW9uKGlub2RlLCBmaWxlbmFtZSwgImludmFsaWRfcGNyIiwKKwkJCQkJICAiVG9NVG9VIik7CisJCWJyZWFrOworCWNhc2UgT1BFTl9XUklURVJTOgorCQlpZiAoaWludC0+d3JpdGVjb3VudCA+IDApCisJCQlpbWFfYWRkX3Zpb2xhdGlvbihpbm9kZSwgZmlsZW5hbWUsICJpbnZhbGlkX3BjciIsCisJCQkJCSAgIm9wZW5fd3JpdGVycyIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BhdGhfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKElTX0VSUihmaWxlKSkgeworCQlwcl9pbmZvKCIlcyBkZW50cnlfb3BlbiBmYWlsZWRcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIHJjOworCX0KKwlpaW50LT5vcGVuY291bnQrKzsKKwlpaW50LT5yZWFkY291bnQrKzsKKworCXJjID0gaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoaWludCwgZmlsZSk7CisJaWYgKCFyYykKKwkJaW1hX3N0b3JlX21lYXN1cmVtZW50KGlpbnQsIGZpbGUsIGZpbGVuYW1lKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogaW1hX3BhdGhfY2hlY2sgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCisgKiBAcGF0aDogY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBwYXRoIHRvIGJlIG1lYXN1cmVkCisgKiBAbWFzazogY29udGFpbnMgTUFZX1JFQUQsIE1BWV9XUklURSBvciBNQVlfRVhFQ1VURQorICoKKyAqIE1lYXN1cmUgdGhlIGZpbGUgYmVpbmcgb3BlbiBmb3IgcmVhZG9ubHksIGJhc2VkIG9uIHRoZQorICogaW1hX211c3RfbWVhc3VyZSgpIHBvbGljeSBkZWNpc2lvbi4KKyAqCisgKiBLZWVwIHJlYWQvd3JpdGUgY291bnRlcnMgZm9yIGFsbCBmaWxlcywgYnV0IG9ubHkKKyAqIGludmFsaWRhdGUgdGhlIFBDUiBmb3IgbWVhc3VyZWQgZmlsZXM6CisgKiAJLSBPcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGUgd2hlbiBhbHJlYWR5IG9wZW4gZm9yIHJlYWQsCisgKgkgIHJlc3VsdHMgaW4gYSB0aW1lIG9mIG1lYXN1cmUsIHRpbWUgb2YgdXNlIChUb01Ub1UpIGVycm9yLgorICoJLSBPcGVuaW5nIGEgZmlsZSBmb3IgcmVhZCB3aGVuIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUsCisgKiAJICBjb3VsZCByZXN1bHQgaW4gYSBmaWxlIG1lYXN1cmVtZW50IGVycm9yLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIChCYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiBhcHByYWlzZV9tZWFzdXJlbWVudCgpLikKKyAqLworaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7CisJaW50IHJjOworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAwOworCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJaWludC0+b3BlbmNvdW50Kys7CisJaWYgKChtYXNrICYgTUFZX1dSSVRFKSB8fCAobWFzayA9PSAwKSkKKwkJaWludC0+d3JpdGVjb3VudCsrOworCWVsc2UgaWYgKG1hc2sgJiAoTUFZX1JFQUQgfCBNQVlfRVhFQykpCisJCWlpbnQtPnJlYWRjb3VudCsrOworCisJcmMgPSBpbWFfbXVzdF9tZWFzdXJlKGlpbnQsIGlub2RlLCBNQVlfUkVBRCwgUEFUSF9DSEVDSyk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpIHx8IChtYXNrID09IDApKQorCQlpbWFfcmVhZF93cml0ZV9jaGVjayhUT01UT1UsIGlpbnQsIGlub2RlLAorCQkJCSAgICAgcGF0aC0+ZGVudHJ5LT5kX25hbWUubmFtZSk7CisKKwlpZiAoKG1hc2sgJiAoTUFZX1dSSVRFIHwgTUFZX1JFQUQgfCBNQVlfRVhFQykpICE9IE1BWV9SRUFEKQorCQlnb3RvIG91dDsKKworCWltYV9yZWFkX3dyaXRlX2NoZWNrKE9QRU5fV1JJVEVSUywgaWludCwgaW5vZGUsCisJCQkgICAgIHBhdGgtPmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWlmICghKGlpbnQtPmZsYWdzICYgSU1BX01FQVNVUkVEKSkgeworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBkZ2V0KHBhdGgtPmRlbnRyeSk7CisJCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gbW50Z2V0KHBhdGgtPm1udCk7CisKKwkJZmlsZSA9IGRlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBPX1JET05MWSwgY3VycmVudC0+Y3JlZCk7CisJCXJjID0gZ2V0X3BhdGhfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworCWlmIChmaWxlKQorCQlmcHV0KGZpbGUpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX21lYXN1cmVtZW50KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSwKKwkJCSAgICAgICBpbnQgbWFzaywgaW50IGZ1bmN0aW9uKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisJaW50IHJjOworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAwOworCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJcmMgPSBpbWFfbXVzdF9tZWFzdXJlKGlpbnQsIGlub2RlLCBtYXNrLCBmdW5jdGlvbik7CisJaWYgKHJjICE9IDApCisJCWdvdG8gb3V0OworCisJcmMgPSBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChpaW50LCBmaWxlKTsKKwlpZiAoIXJjKQorCQlpbWFfc3RvcmVfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZmlsZW5hbWUpOworb3V0OgorCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG9wZW5jb3VudF9nZXQoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm47CisJaWludCA9IGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCWlpbnQtPm9wZW5jb3VudCsrOworCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworfQorCisvKioKKyAqIGltYV9maWxlX21tYXAgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCisgKiBAZmlsZTogcG9pbnRlciB0byB0aGUgZmlsZSB0byBiZSBtZWFzdXJlZCAoTWF5IGJlIE5VTEwpCisgKiBAcHJvdDogY29udGFpbnMgdGhlIHByb3RlY3Rpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgYnkgdGhlIGtlcm5lbC4KKyAqCisgKiBNZWFzdXJlIGZpbGVzIGJlaW5nIG1tYXBwZWQgZXhlY3V0YWJsZSBiYXNlZCBvbiB0aGUgaW1hX211c3RfbWVhc3VyZSgpCisgKiBwb2xpY3kgZGVjaXNpb24uCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogKEJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIGFwcHJhaXNlX21lYXN1cmVtZW50KCkuKQorICovCitpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KQoreworCWludCByYzsKKworCWlmICghZmlsZSkKKwkJcmV0dXJuIDA7CisJaWYgKHByb3QgJiBQUk9UX0VYRUMpCisJCXJjID0gcHJvY2Vzc19tZWFzdXJlbWVudChmaWxlLCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJCSBNQVlfRVhFQywgRklMRV9NTUFQKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGltYV9zaG1fY2hlY2sgLSBJUEMgc2htIGFuZCBzaG1hdCBjcmVhdGUvZnB1dCBhIGZpbGUKKyAqCisgKiBNYWludGFpbiB0aGUgb3BlbmNvdW50IGZvciB0aGVzZSBmaWxlcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5CisgKiBpbWJhbGFuY2UgbWVzc2FnZXMuCisgKi8KK3ZvaWQgaW1hX3NobV9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlvcGVuY291bnRfZ2V0KGZpbGUpOworCXJldHVybjsKK30KKworLyoqCisgKiBpbWFfYnBybV9jaGVjayAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KKyAqIEBicHJtOiBjb250YWlucyB0aGUgbGludXhfYmlucHJtIHN0cnVjdHVyZQorICoKKyAqIFRoZSBPUyBwcm90ZWN0cyBhZ2FpbnN0IGFuIGV4ZWN1dGFibGUgZmlsZSwgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW4gZGVueV93cml0ZV9hY2Nlc3MoKSBhbmQgYW4gZXhlY3V0YWJsZSBmaWxlLAorICogYWxyZWFkeSBvcGVuIGZvciBleGVjdXRlLCBmcm9tIGJlaW5nIG1vZGlmaWVkIGluIGdldF93cml0ZV9hY2Nlc3MoKS4KKyAqIFNvIHdlIGNhbiBiZSBjZXJ0YWluIHRoYXQgd2hhdCB3ZSB2ZXJpZnkgYW5kIG1lYXN1cmUgaGVyZSBpcyBhY3R1YWxseQorICogd2hhdCBpcyBiZWluZyBleGVjdXRlZC4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiAoQmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgYXBwcmFpc2VfbWVhc3VyZW1lbnQoKS4pCisgKi8KK2ludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCWludCByYzsKKworCXJjID0gcHJvY2Vzc19tZWFzdXJlbWVudChicHJtLT5maWxlLCBicHJtLT5maWxlbmFtZSwKKwkJCQkgTUFZX0VYRUMsIEJQUk1fQ0hFQ0spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2ltYSh2b2lkKQoreworCWludCBlcnJvcjsKKworCWltYV9paW50Y2FjaGVfaW5pdCgpOworCWVycm9yID0gaW1hX2luaXQoKTsKKwlpbWFfaW5pdGlhbGl6ZWQgPSAxOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfaW1hKHZvaWQpCit7CisJaW1hX2NsZWFudXAoKTsKK30KKworbGF0ZV9pbml0Y2FsbChpbml0X2ltYSk7CS8qIFN0YXJ0IElNQSBhZnRlciB0aGUgVFBNIGlzIGF2YWlsYWJsZSAqLworCitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyOTFhZAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jCkBAIC0wLDAgKzEsNDE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIGltYV9wb2xpY3kuYworICogCS0gaW5pdGlhbGl6ZSBkZWZhdWx0IG1lYXN1cmUgcG9saWN5IHJ1bGVzCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKworI2luY2x1ZGUgImltYS5oIgorCisvKiBmbGFncyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJTUFfRlVOQyAJMHgwMDAxCisjZGVmaW5lIElNQV9NQVNLIAkweDAwMDIKKyNkZWZpbmUgSU1BX0ZTTUFHSUMJMHgwMDA0CisjZGVmaW5lIElNQV9VSUQJCTB4MDAwOAorCitlbnVtIGltYV9hY3Rpb24geyBVTktOT1dOID0gLTEsIERPTlRfTUVBU1VSRSA9IDAsIE1FQVNVUkUgfTsKKworI2RlZmluZSBNQVhfTFNNX1JVTEVTIDYKK2VudW0gbHNtX3J1bGVfdHlwZXMgeyBMU01fT0JKX1VTRVIsIExTTV9PQkpfUk9MRSwgTFNNX09CSl9UWVBFLAorCUxTTV9TVUJKX1VTRVIsIExTTV9TVUJKX1JPTEUsIExTTV9TVUJKX1RZUEUKK307CisKK3N0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJZW51bSBpbWFfYWN0aW9uIGFjdGlvbjsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJZW51bSBpbWFfaG9va3MgZnVuYzsKKwlpbnQgbWFzazsKKwl1bnNpZ25lZCBsb25nIGZzbWFnaWM7CisJdWlkX3QgdWlkOworCXN0cnVjdCB7CisJCXZvaWQgKnJ1bGU7CS8qIExTTSBmaWxlIG1ldGFkYXRhIHNwZWNpZmljICovCisJCWludCB0eXBlOwkvKiBhdWRpdCB0eXBlICovCisJfSBsc21bTUFYX0xTTV9SVUxFU107Cit9OworCisvKiBXaXRob3V0IExTTSBzcGVjaWZpYyBrbm93bGVkZ2UsIHRoZSBkZWZhdWx0IHBvbGljeSBjYW4gb25seSBiZQorICogd3JpdHRlbiBpbiB0ZXJtcyBvZiAuYWN0aW9uLCAuZnVuYywgLm1hc2ssIC5mc21hZ2ljLCBhbmQgLnVpZAorICovCitzdGF0aWMgc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgZGVmYXVsdF9ydWxlc1tdID0geworCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gUFJPQ19TVVBFUl9NQUdJQywKKwkgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gU1lTRlNfTUFHSUMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gREVCVUdGU19NQUdJQywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBUTVBGU19NQUdJQywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBTRUNVUklUWUZTX01BR0lDLAorCSAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSAweEY5N0NGRjhDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBGSUxFX01NQVAsLm1hc2sgPSBNQVlfRVhFQywKKwkgLmZsYWdzID0gSU1BX0ZVTkMgfCBJTUFfTUFTS30sCisJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gQlBSTV9DSEVDSywubWFzayA9IE1BWV9FWEVDLAorCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLfSwKKwl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBQQVRIX0NIRUNLLC5tYXNrID0gTUFZX1JFQUQsLnVpZCA9IDAsCisJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0sgfCBJTUFfVUlEfQorfTsKKworc3RhdGljIExJU1RfSEVBRChtZWFzdXJlX2RlZmF1bHRfcnVsZXMpOworc3RhdGljIExJU1RfSEVBRChtZWFzdXJlX3BvbGljeV9ydWxlcyk7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqaW1hX21lYXN1cmU7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoaW1hX21lYXN1cmVfbXV0ZXgpOworCisvKioKKyAqIGltYV9tYXRjaF9ydWxlcyAtIGRldGVybWluZSB3aGV0aGVyIGFuIGlub2RlIG1hdGNoZXMgdGhlIG1lYXN1cmUgcnVsZS4KKyAqIEBydWxlOiBhIHBvaW50ZXIgdG8gYSBydWxlCisgKiBAaW5vZGU6IGEgcG9pbnRlciB0byBhbiBpbm9kZQorICogQGZ1bmM6IExJTSBob29rIGlkZW50aWZpZXIKKyAqIEBtYXNrOiByZXF1ZXN0ZWQgYWN0aW9uIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9BUFBFTkQgfCBNQVlfRVhFQykKKyAqCisgKiBSZXR1cm5zIHRydWUgb24gcnVsZSBtYXRjaCwgZmFsc2Ugb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGJvb2wgaW1hX21hdGNoX3J1bGVzKHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICpydWxlLAorCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gaW1hX2hvb2tzIGZ1bmMsIGludCBtYXNrKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlpbnQgaTsKKworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfRlVOQykgJiYgcnVsZS0+ZnVuYyAhPSBmdW5jKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKChydWxlLT5mbGFncyAmIElNQV9NQVNLKSAmJiBydWxlLT5tYXNrICE9IG1hc2spCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX0ZTTUFHSUMpCisJICAgICYmIHJ1bGUtPmZzbWFnaWMgIT0gaW5vZGUtPmlfc2ItPnNfbWFnaWMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX1VJRCkgJiYgcnVsZS0+dWlkICE9IHRzay0+Y3JlZC0+dWlkKQorCQlyZXR1cm4gZmFsc2U7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MU01fUlVMRVM7IGkrKykgeworCQlpbnQgcmM7CisJCXUzMiBvc2lkLCBzaWQ7CisKKwkJaWYgKCFydWxlLT5sc21baV0ucnVsZSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoaSkgeworCQljYXNlIExTTV9PQkpfVVNFUjoKKwkJY2FzZSBMU01fT0JKX1JPTEU6CisJCWNhc2UgTFNNX09CSl9UWVBFOgorCQkJc2VjdXJpdHlfaW5vZGVfZ2V0c2VjaWQoaW5vZGUsICZvc2lkKTsKKwkJCXJjID0gc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2gob3NpZCwKKwkJCQkJCQlydWxlLT5sc21baV0udHlwZSwKKwkJCQkJCQlBVURJVF9FUVVBTCwKKwkJCQkJCQlydWxlLT5sc21baV0ucnVsZSwKKwkJCQkJCQlOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlIExTTV9TVUJKX1VTRVI6CisJCWNhc2UgTFNNX1NVQkpfUk9MRToKKwkJY2FzZSBMU01fU1VCSl9UWVBFOgorCQkJc2VjdXJpdHlfdGFza19nZXRzZWNpZCh0c2ssICZzaWQpOworCQkJcmMgPSBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaChzaWQsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnR5cGUsCisJCQkJCQkJQVVESVRfRVFVQUwsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnJ1bGUsCisJCQkJCQkJTlVMTCk7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXJjKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBpbWFfbWF0Y2hfcG9saWN5IC0gZGVjaXNpb24gYmFzZWQgb24gTFNNIGFuZCBvdGhlciBjb25kaXRpb25zCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gYW4gaW5vZGUgZm9yIHdoaWNoIHRoZSBwb2xpY3kgZGVjaXNpb24gaXMgYmVpbmcgbWFkZQorICogQGZ1bmM6IElNQSBob29rIGlkZW50aWZpZXIKKyAqIEBtYXNrOiByZXF1ZXN0ZWQgYWN0aW9uIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9BUFBFTkQgfCBNQVlfRVhFQykKKyAqCisgKiBNZWFzdXJlIGRlY2lzaW9uIGJhc2VkIG9uIGZ1bmMvbWFzay9mc21hZ2ljIGFuZCBMU00oc3Viai9vYmovdHlwZSkKKyAqIGNvbmRpdGlvbnMuCisgKgorICogKFRoZXJlIGlzIG5vIG5lZWQgZm9yIGxvY2tpbmcgd2hlbiB3YWxraW5nIHRoZSBwb2xpY3kgbGlzdCwKKyAqIGFzIGVsZW1lbnRzIGluIHRoZSBsaXN0IGFyZSBuZXZlciBkZWxldGVkLCBub3IgZG9lcyB0aGUgbGlzdAorICogY2hhbmdlLikKKyAqLworaW50IGltYV9tYXRjaF9wb2xpY3koc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBpbWFfaG9va3MgZnVuYywgaW50IG1hc2spCit7CisJc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgaW1hX21lYXN1cmUsIGxpc3QpIHsKKwkJYm9vbCByYzsKKworCQlyYyA9IGltYV9tYXRjaF9ydWxlcyhlbnRyeSwgaW5vZGUsIGZ1bmMsIG1hc2spOworCQlpZiAocmMpCisJCQlyZXR1cm4gZW50cnktPmFjdGlvbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW1hX2luaXRfcG9saWN5IC0gaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBtZWFzdXJlIHJ1bGVzLgorICoKKyAqIGltYV9tZWFzdXJlIHBvaW50cyB0byBlaXRoZXIgdGhlIG1lYXN1cmVfZGVmYXVsdF9ydWxlcyBvciB0aGUKKyAqIHRoZSBuZXcgbWVhc3VyZV9wb2xpY3lfcnVsZXMuCisgKi8KK3ZvaWQgaW1hX2luaXRfcG9saWN5KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZWZhdWx0X3J1bGVzKTsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZkZWZhdWx0X3J1bGVzW2ldLmxpc3QsICZtZWFzdXJlX2RlZmF1bHRfcnVsZXMpOworCWltYV9tZWFzdXJlID0gJm1lYXN1cmVfZGVmYXVsdF9ydWxlczsKK30KKworLyoqCisgKiBpbWFfdXBkYXRlX3BvbGljeSAtIHVwZGF0ZSBkZWZhdWx0X3J1bGVzIHdpdGggbmV3IG1lYXN1cmUgcnVsZXMKKyAqCisgKiBDYWxsZWQgb24gZmlsZSAucmVsZWFzZSB0byB1cGRhdGUgdGhlIGRlZmF1bHQgcnVsZXMgd2l0aCBhIGNvbXBsZXRlIG5ldworICogcG9saWN5LiAgT25jZSB1cGRhdGVkLCB0aGUgcG9saWN5IGlzIGxvY2tlZCwgbm8gYWRkaXRpb25hbCBydWxlcyBjYW4gYmUKKyAqIGFkZGVkIHRvIHRoZSBwb2xpY3kuCisgKi8KK3ZvaWQgaW1hX3VwZGF0ZV9wb2xpY3kodm9pZCkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJwb2xpY3lfdXBkYXRlIjsKKwljb25zdCBjaGFyICpjYXVzZSA9ICJhbHJlYWR5IGV4aXN0cyI7CisJaW50IHJlc3VsdCA9IDE7CisJaW50IGF1ZGl0X2luZm8gPSAwOworCisJaWYgKGltYV9tZWFzdXJlID09ICZtZWFzdXJlX2RlZmF1bHRfcnVsZXMpIHsKKwkJaW1hX21lYXN1cmUgPSAmbWVhc3VyZV9wb2xpY3lfcnVsZXM7CisJCWNhdXNlID0gImNvbXBsZXRlIjsKKwkJcmVzdWx0ID0gMDsKKwl9CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJICAgIE5VTEwsIG9wLCBjYXVzZSwgcmVzdWx0LCBhdWRpdF9pbmZvKTsKK30KKworZW51bSB7CisJT3B0X2VyciA9IC0xLAorCU9wdF9tZWFzdXJlID0gMSwgT3B0X2RvbnRfbWVhc3VyZSwKKwlPcHRfb2JqX3VzZXIsIE9wdF9vYmpfcm9sZSwgT3B0X29ial90eXBlLAorCU9wdF9zdWJqX3VzZXIsIE9wdF9zdWJqX3JvbGUsIE9wdF9zdWJqX3R5cGUsCisJT3B0X2Z1bmMsIE9wdF9tYXNrLCBPcHRfZnNtYWdpYywgT3B0X3VpZAorfTsKKworc3RhdGljIG1hdGNoX3RhYmxlX3QgcG9saWN5X3Rva2VucyA9IHsKKwl7T3B0X21lYXN1cmUsICJtZWFzdXJlIn0sCisJe09wdF9kb250X21lYXN1cmUsICJkb250X21lYXN1cmUifSwKKwl7T3B0X29ial91c2VyLCAib2JqX3VzZXI9JXMifSwKKwl7T3B0X29ial9yb2xlLCAib2JqX3JvbGU9JXMifSwKKwl7T3B0X29ial90eXBlLCAib2JqX3R5cGU9JXMifSwKKwl7T3B0X3N1YmpfdXNlciwgInN1YmpfdXNlcj0lcyJ9LAorCXtPcHRfc3Vial9yb2xlLCAic3Vial9yb2xlPSVzIn0sCisJe09wdF9zdWJqX3R5cGUsICJzdWJqX3R5cGU9JXMifSwKKwl7T3B0X2Z1bmMsICJmdW5jPSVzIn0sCisJe09wdF9tYXNrLCAibWFzaz0lcyJ9LAorCXtPcHRfZnNtYWdpYywgImZzbWFnaWM9JXMifSwKKwl7T3B0X3VpZCwgInVpZD0lcyJ9LAorCXtPcHRfZXJyLCBOVUxMfQorfTsKKworc3RhdGljIGludCBpbWFfbHNtX3J1bGVfaW5pdChzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnksCisJCQkgICAgIGNoYXIgKmFyZ3MsIGludCBsc21fcnVsZSwgaW50IGF1ZGl0X3R5cGUpCit7CisJaW50IHJlc3VsdDsKKworCWVudHJ5LT5sc21bbHNtX3J1bGVdLnR5cGUgPSBhdWRpdF90eXBlOworCXJlc3VsdCA9IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX2luaXQoZW50cnktPmxzbVtsc21fcnVsZV0udHlwZSwKKwkJCQkJICAgQVVESVRfRVFVQUwsIGFyZ3MsCisJCQkJCSAgICZlbnRyeS0+bHNtW2xzbV9ydWxlXS5ydWxlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGltYV9wYXJzZV9ydWxlKGNoYXIgKnJ1bGUsIHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKKwljaGFyICpwOworCWludCByZXN1bHQgPSAwOworCisJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfSU5URUdSSVRZX1JVTEUpOworCisJZW50cnktPmFjdGlvbiA9IC0xOworCXdoaWxlICgocCA9IHN0cnNlcCgmcnVsZSwgIiBcbiIpKSAhPSBOVUxMKSB7CisJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKKwkJaW50IHRva2VuOworCQl1bnNpZ25lZCBsb25nIGxudW07CisKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlicmVhazsKKwkJaWYgKCEqcCkKKwkJCWNvbnRpbnVlOworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHBvbGljeV90b2tlbnMsIGFyZ3MpOworCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X21lYXN1cmU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiJXMgIiwgIm1lYXN1cmUiKTsKKwkJCWVudHJ5LT5hY3Rpb24gPSBNRUFTVVJFOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RvbnRfbWVhc3VyZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIlcyAiLCAiZG9udF9tZWFzdXJlIik7CisJCQllbnRyeS0+YWN0aW9uID0gRE9OVF9NRUFTVVJFOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Z1bmM6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiZnVuYz0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJQQVRIX0NIRUNLIikgPT0gMCkKKwkJCQllbnRyeS0+ZnVuYyA9IFBBVEhfQ0hFQ0s7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiRklMRV9NTUFQIikgPT0gMCkKKwkJCQllbnRyeS0+ZnVuYyA9IEZJTEVfTU1BUDsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJCUFJNX0NIRUNLIikgPT0gMCkKKwkJCQllbnRyeS0+ZnVuYyA9IEJQUk1fQ0hFQ0s7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCWlmICghcmVzdWx0KQorCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfRlVOQzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9tYXNrOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm1hc2s9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCWlmICgoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9FWEVDIikpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfRVhFQzsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfV1JJVEUiKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX1dSSVRFOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9SRUFEIikgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9SRUFEOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9BUFBFTkQiKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX0FQUEVORDsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZW50cnktPmZsYWdzIHw9IElNQV9NQVNLOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZzbWFnaWM6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiZnNtYWdpYz0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gc3RyaWN0X3N0cnRvdWwoYXJnc1swXS5mcm9tLCAxNiwKKwkJCQkJCSZlbnRyeS0+ZnNtYWdpYyk7CisJCQlpZiAoIXJlc3VsdCkKKwkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX0ZTTUFHSUM7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfdWlkOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInVpZD0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gc3RyaWN0X3N0cnRvdWwoYXJnc1swXS5mcm9tLCAxMCwgJmxudW0pOworCQkJaWYgKCFyZXN1bHQpIHsKKwkJCQllbnRyeS0+dWlkID0gKHVpZF90KSBsbnVtOworCQkJCWlmIChlbnRyeS0+dWlkICE9IGxudW0pCisJCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQkJZWxzZQorCQkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX1VJRDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE9wdF9vYmpfdXNlcjoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvYmpfdXNlcj0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9PQkpfVVNFUiwKKwkJCQkJCSAgIEFVRElUX09CSl9VU0VSKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9vYmpfcm9sZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvYmpfcm9sZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9PQkpfUk9MRSwKKwkJCQkJCSAgIEFVRElUX09CSl9ST0xFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9vYmpfdHlwZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvYmpfdHlwZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9PQkpfVFlQRSwKKwkJCQkJCSAgIEFVRElUX09CSl9UWVBFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9zdWJqX3VzZXI6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAic3Vial91c2VyPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX1NVQkpfVVNFUiwKKwkJCQkJCSAgIEFVRElUX1NVQkpfVVNFUik7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfc3Vial9yb2xlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInN1Ympfcm9sZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9TVUJKX1JPTEUsCisJCQkJCQkgICBBVURJVF9TVUJKX1JPTEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N1YmpfdHlwZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJzdWJqX3R5cGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fU1VCSl9UWVBFLAorCQkJCQkJICAgQVVESVRfU1VCSl9UWVBFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9lcnI6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiVU5LTk9XTj0lcyAiLCBwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChlbnRyeS0+YWN0aW9uID09IFVOS05PV04pCisJCXJlc3VsdCA9IC1FSU5WQUw7CisKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAicmVzPSVkIiwgIXJlc3VsdCA/IDAgOiAxKTsKKwlhdWRpdF9sb2dfZW5kKGFiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGltYV9wYXJzZV9hZGRfcnVsZSAtIGFkZCBhIHJ1bGUgdG8gbWVhc3VyZV9wb2xpY3lfcnVsZXMKKyAqIEBydWxlIC0gaW1hIG1lYXN1cmVtZW50IHBvbGljeSBydWxlCisgKgorICogVXNlcyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIHBvbGljeSBsaXN0IGZyb20gbXVsdGlwbGUgY29uY3VycmVudCB3cml0ZXJzLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGltYV9wYXJzZV9hZGRfcnVsZShjaGFyICpydWxlKQoreworCWNvbnN0IGNoYXIgKm9wID0gInVwZGF0ZV9wb2xpY3kiOworCXN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeTsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgYXVkaXRfaW5mbyA9IDA7CisKKwkvKiBQcmV2ZW50IGluc3RhbGxlZCBwb2xpY3kgZnJvbSBjaGFuZ2luZyAqLworCWlmIChpbWFfbWVhc3VyZSAhPSAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzKSB7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCQkgICAgTlVMTCwgb3AsICJhbHJlYWR5IGV4aXN0cyIsCisJCQkJICAgIC1FQUNDRVMsIGF1ZGl0X2luZm8pOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpIHsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJCSAgICBOVUxMLCBvcCwgIi1FTk9NRU0iLCAtRU5PTUVNLCBhdWRpdF9pbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5saXN0KTsKKworCXJlc3VsdCA9IGltYV9wYXJzZV9ydWxlKHJ1bGUsIGVudHJ5KTsKKwlpZiAoIXJlc3VsdCkgeworCQltdXRleF9sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7CisJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmbWVhc3VyZV9wb2xpY3lfcnVsZXMpOworCQltdXRleF91bmxvY2soJmltYV9tZWFzdXJlX211dGV4KTsKKwl9IGVsc2UgeworCQlrZnJlZShlbnRyeSk7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCQkgICAgTlVMTCwgb3AsICJpbnZhbGlkIHBvbGljeSIsIHJlc3VsdCwKKwkJCQkgICAgYXVkaXRfaW5mbyk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIGltYV9kZWxldGVfcnVsZXMgY2FsbGVkIHRvIGNsZWFudXAgaW52YWxpZCBwb2xpY3kgKi8KK3ZvaWQgaW1hX2RlbGV0ZV9ydWxlcyh2b2lkKQoreworCXN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeSwgKnRtcDsKKworCW11dGV4X2xvY2soJmltYV9tZWFzdXJlX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJm1lYXN1cmVfcG9saWN5X3J1bGVzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWtmcmVlKGVudHJ5KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9xdWV1ZS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5NDMxCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcXVldWUuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogU2VyZ2UgSGFsbHluIDxzZXJ1ZUB1cy5pYm0uY29tPgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX3F1ZXVlLmMKKyAqICAgICAgIEltcGxlbWVudHMgcXVldWVzIHRoYXQgc3RvcmUgdGVtcGxhdGUgbWVhc3VyZW1lbnRzIGFuZAorICogICAgICAgbWFpbnRhaW5zIGFnZ3JlZ2F0ZSBvdmVyIHRoZSBzdG9yZWQgbWVhc3VyZW1lbnRzCisgKiAgICAgICBpbiB0aGUgcHJlLWNvbmZpZ3VyZWQgVFBNIFBDUiAoaWYgYXZhaWxhYmxlKS4KKyAqICAgICAgIFRoZSBtZWFzdXJlbWVudCBsaXN0IGlzIGFwcGVuZC1vbmx5LiBObyBlbnRyeSBpcworICogICAgICAgZXZlciByZW1vdmVkIG9yIGNoYW5nZWQgZHVyaW5nIHRoZSBib290LWN5Y2xlLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgImltYS5oIgorCitMSVNUX0hFQUQoaW1hX21lYXN1cmVtZW50cyk7CS8qIGxpc3Qgb2YgYWxsIG1lYXN1cmVtZW50cyAqLworCisvKiBrZXk6IGlub2RlIChiZWZvcmUgc2VjdXJlLWhhc2hpbmcgYSBmaWxlKSAqLworc3RydWN0IGltYV9oX3RhYmxlIGltYV9odGFibGUgPSB7CisJLmxlbiA9IEFUT01JQ19MT05HX0lOSVQoMCksCisJLnZpb2xhdGlvbnMgPSBBVE9NSUNfTE9OR19JTklUKDApLAorCS5xdWV1ZVswIC4uLiBJTUFfTUVBU1VSRV9IVEFCTEVfU0laRSAtIDFdID0gSExJU1RfSEVBRF9JTklUCit9OworCisvKiBtdXRleCBwcm90ZWN0cyBhdG9taWNpdHkgb2YgZXh0ZW5kaW5nIG1lYXN1cmVtZW50IGxpc3QKKyAqIGFuZCBleHRlbmRpbmcgdGhlIFRQTSBQQ1IgYWdncmVnYXRlLiBTaW5jZSB0cG1fZXh0ZW5kIGNhbiB0YWtlCisgKiBsb25nIChhbmQgdGhlIHRwbSBkcml2ZXIgdXNlcyBhIG11dGV4KSwgd2UgY2FuJ3QgdXNlIHRoZSBzcGlubG9jay4KKyAqLworc3RhdGljIERFRklORV9NVVRFWChpbWFfZXh0ZW5kX2xpc3RfbXV0ZXgpOworCisvKiBsb29rdXAgdXAgdGhlIGRpZ2VzdCB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZSwgYW5kIHJldHVybiB0aGUgZW50cnkgKi8KK3N0YXRpYyBzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICppbWFfbG9va3VwX2RpZ2VzdF9lbnRyeSh1OCAqZGlnZXN0X3ZhbHVlKQoreworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlLCAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQga2V5OworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJaW50IHJjOworCisJa2V5ID0gaW1hX2hhc2hfa2V5KGRpZ2VzdF92YWx1ZSk7CisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShxZSwgcG9zLCAmaW1hX2h0YWJsZS5xdWV1ZVtrZXldLCBobmV4dCkgeworCQlyYyA9IG1lbWNtcChxZS0+ZW50cnktPmRpZ2VzdCwgZGlnZXN0X3ZhbHVlLCBJTUFfRElHRVNUX1NJWkUpOworCQlpZiAocmMgPT0gMCkgeworCQkJcmV0ID0gcWU7CisJCQlicmVhazsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5IGhlbHBlciBmdW5jdGlvbjoKKyAqIC0gQWRkIHRlbXBsYXRlIGVudHJ5IHRvIG1lYXN1cmVtZW50IGxpc3QgYW5kIGhhc2ggdGFibGUuCisgKgorICogKENhbGxlZCB3aXRoIGltYV9leHRlbmRfbGlzdF9tdXRleCBoZWxkLikKKyAqLworc3RhdGljIGludCBpbWFfYWRkX2RpZ2VzdF9lbnRyeShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZTsKKwl1bnNpZ25lZCBpbnQga2V5OworCisJcWUgPSBrbWFsbG9jKHNpemVvZigqcWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocWUgPT0gTlVMTCkgeworCQlwcl9lcnIoIk9VVCBPRiBNRU1PUlkgRVJST1IgY3JlYXRpbmcgcXVldWUgZW50cnkuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXFlLT5lbnRyeSA9IGVudHJ5OworCisJSU5JVF9MSVNUX0hFQUQoJnFlLT5sYXRlcik7CisJbGlzdF9hZGRfdGFpbF9yY3UoJnFlLT5sYXRlciwgJmltYV9tZWFzdXJlbWVudHMpOworCisJYXRvbWljX2xvbmdfaW5jKCZpbWFfaHRhYmxlLmxlbik7CisJa2V5ID0gaW1hX2hhc2hfa2V5KGVudHJ5LT5kaWdlc3QpOworCWhsaXN0X2FkZF9oZWFkX3JjdSgmcWUtPmhuZXh0LCAmaW1hX2h0YWJsZS5xdWV1ZVtrZXldKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWFfcGNyX2V4dGVuZChjb25zdCB1OCAqaGFzaCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmICghaW1hX3VzZWRfY2hpcCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IHRwbV9wY3JfZXh0ZW5kKFRQTV9BTllfTlVNLCBDT05GSUdfSU1BX01FQVNVUkVfUENSX0lEWCwgaGFzaCk7CisJaWYgKHJlc3VsdCAhPSAwKQorCQlwcl9lcnIoIkVycm9yIENvbW11bmljYXRpbmcgdG8gVFBNIGNoaXBcbiIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIEFkZCB0ZW1wbGF0ZSBlbnRyeSB0byB0aGUgbWVhc3VyZW1lbnQgbGlzdCBhbmQgaGFzaCB0YWJsZSwKKyAqIGFuZCBleHRlbmQgdGhlIHBjci4KKyAqLworaW50IGltYV9hZGRfdGVtcGxhdGVfZW50cnkoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksIGludCB2aW9sYXRpb24sCisJCQkgICBjb25zdCBjaGFyICpvcCwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJoYXNoX2FkZGVkIjsKKwlpbnQgYXVkaXRfaW5mbyA9IDE7CisJaW50IHJlc3VsdCA9IDA7CisKKwltdXRleF9sb2NrKCZpbWFfZXh0ZW5kX2xpc3RfbXV0ZXgpOworCWlmICghdmlvbGF0aW9uKSB7CisJCW1lbWNweShkaWdlc3QsIGVudHJ5LT5kaWdlc3QsIHNpemVvZiBkaWdlc3QpOworCQlpZiAoaW1hX2xvb2t1cF9kaWdlc3RfZW50cnkoZGlnZXN0KSkgeworCQkJYXVkaXRfY2F1c2UgPSAiaGFzaF9leGlzdHMiOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXN1bHQgPSBpbWFfYWRkX2RpZ2VzdF9lbnRyeShlbnRyeSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJYXVkaXRfY2F1c2UgPSAiRU5PTUVNIjsKKwkJYXVkaXRfaW5mbyA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh2aW9sYXRpb24pCQkvKiBpbnZhbGlkYXRlIHBjciAqLworCQltZW1zZXQoZGlnZXN0LCAweGZmLCBzaXplb2YgZGlnZXN0KTsKKworCXJlc3VsdCA9IGltYV9wY3JfZXh0ZW5kKGRpZ2VzdCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWF1ZGl0X2NhdXNlID0gIlRQTSBlcnJvciI7CisJCWF1ZGl0X2luZm8gPSAwOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmltYV9leHRlbmRfbGlzdF9tdXRleCk7CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwgZW50cnktPnRlbXBsYXRlX25hbWUsCisJCQkgICAgb3AsIGF1ZGl0X2NhdXNlLCByZXN1bHQsIGF1ZGl0X2luZm8pOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggODE5MzJhYi4uOWZiNjc5YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtNTMsNiArNTMsNyBAQAogCWF0b21pY190CQlua2V5czsJCS8qIG51bWJlciBvZiBrZXlzICovCiAJYXRvbWljX3QJCW5pa2V5czsJCS8qIG51bWJlciBvZiBpbnN0YW50aWF0ZWQga2V5cyAqLwogCXVpZF90CQkJdWlkOworCXN0cnVjdCB1c2VyX25hbWVzcGFjZQkqdXNlcl9uczsKIAlpbnQJCQlxbmtleXM7CQkvKiBudW1iZXIgb2Yga2V5cyBhbGxvY2F0ZWQgdG8gdGhpcyB1c2VyICovCiAJaW50CQkJcW5ieXRlczsJLyogbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCB0byB0aGlzIHVzZXIgKi8KIH07CkBAIC02MSw3ICs2Miw4IEBACiBleHRlcm4gc3BpbmxvY2tfdAlrZXlfdXNlcl9sb2NrOwogZXh0ZXJuIHN0cnVjdCBrZXlfdXNlcglyb290X2tleV91c2VyOwogCi1leHRlcm4gc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkKTsKK2V4dGVybiBzdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQsCisJCQkJCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyk7CiBleHRlcm4gdm9pZCBrZXlfdXNlcl9wdXQoc3RydWN0IGtleV91c2VyICp1c2VyKTsKIAogLyoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGY3NmM4YTUuLjRhMTI5N2QgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlCSprZXlfamFyOwpAQCAtNjAsNyArNjEsNyBAQAogICogZ2V0IHRoZSBrZXkgcXVvdGEgcmVjb3JkIGZvciBhIHVzZXIsIGFsbG9jYXRpbmcgYSBuZXcgcmVjb3JkIGlmIG9uZSBkb2Vzbid0CiAgKiBhbHJlYWR5IGV4aXN0CiAgKi8KLXN0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCkKK3N0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKQogewogCXN0cnVjdCBrZXlfdXNlciAqY2FuZGlkYXRlID0gTlVMTCwgKnVzZXI7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CkBAIC03OSw2ICs4MCwxMCBAQAogCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwogCQllbHNlIGlmICh1aWQgPiB1c2VyLT51aWQpCiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlIGlmICh1c2VyX25zIDwgdXNlci0+dXNlcl9ucykKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAodXNlcl9ucyA+IHVzZXItPnVzZXJfbnMpCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCQllbHNlCiAJCQlnb3RvIGZvdW5kOwogCX0KQEAgLTEwNiw2ICsxMTEsNyBAQAogCWF0b21pY19zZXQoJmNhbmRpZGF0ZS0+bmtleXMsIDApOwogCWF0b21pY19zZXQoJmNhbmRpZGF0ZS0+bmlrZXlzLCAwKTsKIAljYW5kaWRhdGUtPnVpZCA9IHVpZDsKKwljYW5kaWRhdGUtPnVzZXJfbnMgPSBnZXRfdXNlcl9ucyh1c2VyX25zKTsKIAljYW5kaWRhdGUtPnFua2V5cyA9IDA7CiAJY2FuZGlkYXRlLT5xbmJ5dGVzID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmY2FuZGlkYXRlLT5sb2NrKTsKQEAgLTEzNiw2ICsxNDIsNyBAQAogCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZ1c2VyLT51c2FnZSwgJmtleV91c2VyX2xvY2spKSB7CiAJCXJiX2VyYXNlKCZ1c2VyLT5ub2RlLCAma2V5X3VzZXJfdHJlZSk7CiAJCXNwaW5fdW5sb2NrKCZrZXlfdXNlcl9sb2NrKTsKKwkJcHV0X3VzZXJfbnModXNlci0+dXNlcl9ucyk7CiAKIAkJa2ZyZWUodXNlcik7CiAJfQpAQCAtMjM0LDcgKzI0MSw3IEBACiAJcXVvdGFsZW4gPSBkZXNjbGVuICsgdHlwZS0+ZGVmX2RhdGFsZW47CiAKIAkvKiBnZXQgaG9sZCBvZiB0aGUga2V5IHRyYWNraW5nIGZvciB0aGlzIHVzZXIgKi8KLQl1c2VyID0ga2V5X3VzZXJfbG9va3VwKHVpZCk7CisJdXNlciA9IGtleV91c2VyX2xvb2t1cCh1aWQsIGNyZWQtPnVzZXItPnVzZXJfbnMpOwogCWlmICghdXNlcikKIAkJZ290byBub19tZW1vcnlfMTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggYjFlYzNiNC4uN2YwOWZiOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC03MjYsNyArNzI2LDcgQEAKIAkvKiBjaGFuZ2UgdGhlIFVJRCAqLwogCWlmICh1aWQgIT0gKHVpZF90KSAtMSAmJiB1aWQgIT0ga2V5LT51aWQpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJbmV3b3duZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkKTsKKwkJbmV3b3duZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkLCBjdXJyZW50X3VzZXJfbnMoKSk7CiAJCWlmICghbmV3b3duZXIpCiAJCQlnb3RvIGVycm9yX3B1dDsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwppbmRleCBlZDg1MTU3Li4zZGJhODFjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYworKysgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwpAQCAtNTM5LDYgKzUzOSw5IEBACiAJCQkJICAgICZrZXlyaW5nX25hbWVfaGFzaFtidWNrZXRdLAogCQkJCSAgICB0eXBlX2RhdGEubGluawogCQkJCSAgICApIHsKKwkJCWlmIChrZXlyaW5nLT51c2VyLT51c2VyX25zICE9IGN1cnJlbnRfdXNlcl9ucygpKQorCQkJCWNvbnRpbnVlOworCiAJCQlpZiAodGVzdF9iaXQoS0VZX0ZMQUdfUkVWT0tFRCwgJmtleXJpbmctPmZsYWdzKSkKIAkJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMgYi9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYwppbmRleCA1ZDlmYzdiLi4wZWQ4MDJjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYworKysgYi9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYwpAQCAtMzUsNiArMzUsOSBAQAogCiAJa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5X3JlZik7CiAKKwlpZiAoa2V5LT51c2VyLT51c2VyX25zICE9IGNyZWQtPnVzZXItPnVzZXJfbnMpCisJCWdvdG8gdXNlX290aGVyX3Blcm1zOworCiAJLyogdXNlIHRoZSBzZWNvbmQgOC1iaXRzIG9mIHBlcm1pc3Npb25zIGZvciBrZXlzIHRoZSBjYWxsZXIgb3ducyAqLwogCWlmIChrZXktPnVpZCA9PSBjcmVkLT5mc3VpZCkgewogCQlrcGVybSA9IGtleS0+cGVybSA+PiAxNjsKQEAgLTU2LDYgKzU5LDggQEAKIAkJfQogCX0KIAordXNlX290aGVyX3Blcm1zOgorCiAJLyogb3RoZXJ3aXNlIHVzZSB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgOC1iaXRzICovCiAJa3Blcm0gPSBrZXktPnBlcm07CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvYy5jIGIvc2VjdXJpdHkva2V5cy9wcm9jLmMKaW5kZXggN2Y1MDhkZS4uNzY5ZjliZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wcm9jLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jLmMKQEAgLTkxLDYgKzkxLDI4IEBACiAgKi8KICNpZmRlZiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMKIAorc3RhdGljIHN0cnVjdCByYl9ub2RlICpfX2tleV9zZXJpYWxfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qga2V5ICprZXkgPSByYl9lbnRyeShuLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7CisJCWlmIChrZXktPnVzZXItPnVzZXJfbnMgPT0gY3VycmVudF91c2VyX25zKCkpCisJCQlicmVhazsKKwkJbiA9IHJiX25leHQobik7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV9zZXJpYWxfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwlyZXR1cm4gX19rZXlfc2VyaWFsX25leHQocmJfbmV4dChuKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3NlcmlhbF9maXJzdChzdHJ1Y3QgcmJfcm9vdCAqcikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX2ZpcnN0KHIpOworCXJldHVybiBfX2tleV9zZXJpYWxfbmV4dChuKTsKK30KKwogc3RhdGljIGludCBwcm9jX2tleXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnByb2Nfa2V5c19vcHMpOwpAQCAtMTA0LDEwICsxMjYsMTAgQEAKIAogCXNwaW5fbG9jaygma2V5X3NlcmlhbF9sb2NrKTsKIAotCV9wID0gcmJfZmlyc3QoJmtleV9zZXJpYWxfdHJlZSk7CisJX3AgPSBrZXlfc2VyaWFsX2ZpcnN0KCZrZXlfc2VyaWFsX3RyZWUpOwogCXdoaWxlIChwb3MgPiAwICYmIF9wKSB7CiAJCXBvcy0tOwotCQlfcCA9IHJiX25leHQoX3ApOworCQlfcCA9IGtleV9zZXJpYWxfbmV4dChfcCk7CiAJfQogCiAJcmV0dXJuIF9wOwpAQCAtMTE3LDcgKzEzOSw3IEBACiBzdGF0aWMgdm9pZCAqcHJvY19rZXlzX25leHQoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2LCBsb2ZmX3QgKl9wb3MpCiB7CiAJKCpfcG9zKSsrOwotCXJldHVybiByYl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKKwlyZXR1cm4ga2V5X3NlcmlhbF9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKIAogfQogCkBAIC0yMDMsNiArMjI1LDI3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMgKi8KIAorc3RhdGljIHN0cnVjdCByYl9ub2RlICpfX2tleV91c2VyX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJd2hpbGUgKG4pIHsKKwkJc3RydWN0IGtleV91c2VyICp1c2VyID0gcmJfZW50cnkobiwgc3RydWN0IGtleV91c2VyLCBub2RlKTsKKwkJaWYgKHVzZXItPnVzZXJfbnMgPT0gY3VycmVudF91c2VyX25zKCkpCisJCQlicmVhazsKKwkJbiA9IHJiX25leHQobik7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV91c2VyX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJcmV0dXJuIF9fa2V5X3VzZXJfbmV4dChyYl9uZXh0KG4pKTsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfdXNlcl9maXJzdChzdHJ1Y3QgcmJfcm9vdCAqcikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX2ZpcnN0KHIpOworCXJldHVybiBfX2tleV91c2VyX25leHQobik7Cit9CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogaW1wbGVtZW50ICIvcHJvYy9rZXktdXNlcnMiIHRvIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGUga2V5IHVzZXJzCkBAIC0yMjAsMTAgKzI2MywxMCBAQAogCiAJc3Bpbl9sb2NrKCZrZXlfdXNlcl9sb2NrKTsKIAotCV9wID0gcmJfZmlyc3QoJmtleV91c2VyX3RyZWUpOworCV9wID0ga2V5X3VzZXJfZmlyc3QoJmtleV91c2VyX3RyZWUpOwogCXdoaWxlIChwb3MgPiAwICYmIF9wKSB7CiAJCXBvcy0tOwotCQlfcCA9IHJiX25leHQoX3ApOworCQlfcCA9IGtleV91c2VyX25leHQoX3ApOwogCX0KIAogCXJldHVybiBfcDsKQEAgLTIzMyw3ICsyNzYsNyBAQAogc3RhdGljIHZvaWQgKnByb2Nfa2V5X3VzZXJzX25leHQoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2LCBsb2ZmX3QgKl9wb3MpCiB7CiAJKCpfcG9zKSsrOwotCXJldHVybiByYl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKKwlyZXR1cm4ga2V5X3VzZXJfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKaW5kZXggMmY1ZDg5ZS4uMjc2ZDI3OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYworKysgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC0zNCw2ICszNSw3IEBACiAJLm5rZXlzCQk9IEFUT01JQ19JTklUKDIpLAogCS5uaWtleXMJCT0gQVRPTUlDX0lOSVQoMiksCiAJLnVpZAkJPSAwLAorCS51c2VyX25zCT0gJmluaXRfdXNlcl9ucywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwppbmRleCAwZTA0ZjcyLi4yMmEzMTU4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCWtlbnRlcigiIik7CiAKLQl1c2VyID0ga2V5X3VzZXJfbG9va3VwKGN1cnJlbnRfZnN1aWQoKSk7CisJdXNlciA9IGtleV91c2VyX2xvb2t1cChjdXJyZW50X2ZzdWlkKCksIGN1cnJlbnRfdXNlcl9ucygpKTsKIAlpZiAoIXVzZXIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCBlYjQxZjQzLi43ZjliNWZhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTg4LDE3ICs4OCwxNiBAQAogCXUzMgkJCXRzaWQ7CiAJdTE2CQkJdGNsYXNzOwogCXN0cnVjdCBhdl9kZWNpc2lvbglhdmQ7Ci0JYXRvbWljX3QJCXVzZWQ7CS8qIHVzZWQgcmVjZW50bHkgKi8KIH07CiAKIHN0cnVjdCBhdmNfbm9kZSB7CiAJc3RydWN0IGF2Y19lbnRyeQlhZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUJbGlzdDsgLyogYW5jaG9yZWQgaW4gYXZjX2NhY2hlLT5zbG90c1tpXSAqLwogCXN0cnVjdCByY3VfaGVhZAkJcmhlYWQ7CiB9OwogCiBzdHJ1Y3QgYXZjX2NhY2hlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXNsb3RzW0FWQ19DQUNIRV9TTE9UU107CisJc3RydWN0IGhsaXN0X2hlYWQJc2xvdHNbQVZDX0NBQ0hFX1NMT1RTXTsgLyogaGVhZCBmb3IgYXZjX25vZGUtPmxpc3QgKi8KIAlzcGlubG9ja190CQlzbG90c19sb2NrW0FWQ19DQUNIRV9TTE9UU107IC8qIGxvY2sgZm9yIHdyaXRlcyAqLwogCWF0b21pY190CQlscnVfaGludDsJLyogTFJVIGhpbnQgZm9yIHJlY2xhaW0gc2NhbiAqLwogCWF0b21pY190CQlhY3RpdmVfbm9kZXM7CkBAIC0yMzQsNyArMjMzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVkNfQ0FDSEVfU0xPVFM7IGkrKykgewotCQlJTklUX0xJU1RfSEVBRCgmYXZjX2NhY2hlLnNsb3RzW2ldKTsKKwkJSU5JVF9ITElTVF9IRUFEKCZhdmNfY2FjaGUuc2xvdHNbaV0pOwogCQlzcGluX2xvY2tfaW5pdCgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV0pOwogCX0KIAlhdG9taWNfc2V0KCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzLCAwKTsKQEAgLTI1MCwxNiArMjQ5LDIwIEBACiB7CiAJaW50IGksIGNoYWluX2xlbiwgbWF4X2NoYWluX2xlbiwgc2xvdHNfdXNlZDsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlzbG90c191c2VkID0gMDsKIAltYXhfY2hhaW5fbGVuID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVZDX0NBQ0hFX1NMT1RTOyBpKyspIHsKLQkJaWYgKCFsaXN0X2VtcHR5KCZhdmNfY2FjaGUuc2xvdHNbaV0pKSB7CisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2ldOworCQlpZiAoIWhsaXN0X2VtcHR5KGhlYWQpKSB7CisJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwogCQkJc2xvdHNfdXNlZCsrOwogCQkJY2hhaW5fbGVuID0gMDsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaV0sIGxpc3QpCisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkKIAkJCQljaGFpbl9sZW4rKzsKIAkJCWlmIChjaGFpbl9sZW4gPiBtYXhfY2hhaW5fbGVuKQogCQkJCW1heF9jaGFpbl9sZW4gPSBjaGFpbl9sZW47CkBAIC0yODMsNyArMjg2LDcgQEAKIAogc3RhdGljIHZvaWQgYXZjX25vZGVfZGVsZXRlKHN0cnVjdCBhdmNfbm9kZSAqbm9kZSkKIHsKLQlsaXN0X2RlbF9yY3UoJm5vZGUtPmxpc3QpOworCWhsaXN0X2RlbF9yY3UoJm5vZGUtPmxpc3QpOwogCWNhbGxfcmN1KCZub2RlLT5yaGVhZCwgYXZjX25vZGVfZnJlZSk7CiAJYXRvbWljX2RlYygmYXZjX2NhY2hlLmFjdGl2ZV9ub2Rlcyk7CiB9CkBAIC0yOTcsNyArMzAwLDcgQEAKIAogc3RhdGljIHZvaWQgYXZjX25vZGVfcmVwbGFjZShzdHJ1Y3QgYXZjX25vZGUgKm5ldywgc3RydWN0IGF2Y19ub2RlICpvbGQpCiB7Ci0JbGlzdF9yZXBsYWNlX3JjdSgmb2xkLT5saXN0LCAmbmV3LT5saXN0KTsKKwlobGlzdF9yZXBsYWNlX3JjdSgmb2xkLT5saXN0LCAmbmV3LT5saXN0KTsKIAljYWxsX3JjdSgmb2xkLT5yaGVhZCwgYXZjX25vZGVfZnJlZSk7CiAJYXRvbWljX2RlYygmYXZjX2NhY2hlLmFjdGl2ZV9ub2Rlcyk7CiB9CkBAIC0zMDcsMjkgKzMxMCwzMSBAQAogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKIAlpbnQgaHZhbHVlLCB0cnksIGVjeDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCXNwaW5sb2NrX3QgKmxvY2s7CiAKIAlmb3IgKHRyeSA9IDAsIGVjeCA9IDA7IHRyeSA8IEFWQ19DQUNIRV9TTE9UUzsgdHJ5KyspIHsKIAkJaHZhbHVlID0gYXRvbWljX2luY19yZXR1cm4oJmF2Y19jYWNoZS5scnVfaGludCkgJiAoQVZDX0NBQ0hFX1NMT1RTIC0gMSk7CisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXTsKIAotCQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFncykpCisJCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpKQogCQkJY29udGludWU7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgewotCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm5vZGUtPmFlLnVzZWQpKSB7Ci0JCQkJLyogUmVjZW50bHkgVW51c2VkICovCi0JCQkJYXZjX25vZGVfZGVsZXRlKG5vZGUpOwotCQkJCWF2Y19jYWNoZV9zdGF0c19pbmNyKHJlY2xhaW1zKTsKLQkJCQllY3grKzsKLQkJCQlpZiAoZWN4ID49IEFWQ19DQUNIRV9SRUNMQUlNKSB7Ci0JCQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFncyk7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkgeworCQkJYXZjX25vZGVfZGVsZXRlKG5vZGUpOworCQkJYXZjX2NhY2hlX3N0YXRzX2luY3IocmVjbGFpbXMpOworCQkJZWN4Kys7CisJCQlpZiAoZWN4ID49IEFWQ19DQUNIRV9SRUNMQUlNKSB7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CisJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CiAJfQogb3V0OgogCXJldHVybiBlY3g7CkBAIC0zNDQsOCArMzQ5LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlJTklUX1JDVV9IRUFEKCZub2RlLT5yaGVhZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm5vZGUtPmxpc3QpOwotCWF0b21pY19zZXQoJm5vZGUtPmFlLnVzZWQsIDEpOworCUlOSVRfSExJU1RfTk9ERSgmbm9kZS0+bGlzdCk7CiAJYXZjX2NhY2hlX3N0YXRzX2luY3IoYWxsb2NhdGlvbnMpOwogCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzKSA+IGF2Y19jYWNoZV90aHJlc2hvbGQpCkBAIC0zNTUsMjEgKzM1OSwyNCBAQAogCXJldHVybiBub2RlOwogfQogCi1zdGF0aWMgdm9pZCBhdmNfbm9kZV9wb3B1bGF0ZShzdHJ1Y3QgYXZjX25vZGUgKm5vZGUsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2Y19lbnRyeSAqYWUpCitzdGF0aWMgdm9pZCBhdmNfbm9kZV9wb3B1bGF0ZShzdHJ1Y3QgYXZjX25vZGUgKm5vZGUsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCiB7CiAJbm9kZS0+YWUuc3NpZCA9IHNzaWQ7CiAJbm9kZS0+YWUudHNpZCA9IHRzaWQ7CiAJbm9kZS0+YWUudGNsYXNzID0gdGNsYXNzOwotCW1lbWNweSgmbm9kZS0+YWUuYXZkLCAmYWUtPmF2ZCwgc2l6ZW9mKG5vZGUtPmFlLmF2ZCkpOworCW1lbWNweSgmbm9kZS0+YWUuYXZkLCBhdmQsIHNpemVvZihub2RlLT5hZS5hdmQpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19zZWFyY2hfbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlLCAqcmV0ID0gTlVMTDsKIAlpbnQgaHZhbHVlOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OwogCiAJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKKwloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KSB7CiAJCWlmIChzc2lkID09IG5vZGUtPmFlLnNzaWQgJiYKIAkJICAgIHRjbGFzcyA9PSBub2RlLT5hZS50Y2xhc3MgJiYKIAkJICAgIHRzaWQgPT0gbm9kZS0+YWUudHNpZCkgewpAQCAtMzc4LDE1ICszODUsNiBAQAogCQl9CiAJfQogCi0JaWYgKHJldCA9PSBOVUxMKSB7Ci0JCS8qIGNhY2hlIG1pc3MgKi8KLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogY2FjaGUgaGl0ICovCi0JaWYgKGF0b21pY19yZWFkKCZyZXQtPmFlLnVzZWQpICE9IDEpCi0JCWF0b21pY19zZXQoJnJldC0+YWUudXNlZCwgMSk7Ci1vdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzk1LDMwICszOTMsMjUgQEAKICAqIEBzc2lkOiBzb3VyY2Ugc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRzaWQ6IHRhcmdldCBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKLSAqIEByZXF1ZXN0ZWQ6IHJlcXVlc3RlZCBwZXJtaXNzaW9ucywgaW50ZXJwcmV0ZWQgYmFzZWQgb24gQHRjbGFzcwogICoKICAqIExvb2sgdXAgYW4gQVZDIGVudHJ5IHRoYXQgaXMgdmFsaWQgZm9yIHRoZQotICogQHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBiZXR3ZWVuIHRoZSBTSUQgcGFpcgogICogKEBzc2lkLCBAdHNpZCksIGludGVycHJldGluZyB0aGUgcGVybWlzc2lvbnMKICAqIGJhc2VkIG9uIEB0Y2xhc3MuICBJZiBhIHZhbGlkIEFWQyBlbnRyeSBleGlzdHMsCiAgKiB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSBhdmNfbm9kZS4KICAqIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19sb29rdXAodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkKQorc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2xvb2t1cCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOwogCiAJYXZjX2NhY2hlX3N0YXRzX2luY3IobG9va3Vwcyk7CiAJbm9kZSA9IGF2Y19zZWFyY2hfbm9kZShzc2lkLCB0c2lkLCB0Y2xhc3MpOwogCi0JaWYgKG5vZGUgJiYgKChub2RlLT5hZS5hdmQuZGVjaWRlZCAmIHJlcXVlc3RlZCkgPT0gcmVxdWVzdGVkKSkgeworCWlmIChub2RlKQogCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihoaXRzKTsKLQkJZ290byBvdXQ7Ci0JfQorCWVsc2UKKwkJYXZjX2NhY2hlX3N0YXRzX2luY3IobWlzc2VzKTsKIAotCW5vZGUgPSBOVUxMOwotCWF2Y19jYWNoZV9zdGF0c19pbmNyKG1pc3Nlcyk7Ci1vdXQ6CiAJcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTQ0OSwzNCArNDQyLDQxIEBACiAgKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0c2lkOiB0YXJnZXQgc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzCi0gKiBAYWU6IEFWQyBlbnRyeQorICogQGF2ZDogcmVzdWx0aW5nIGF2IGRlY2lzaW9uCiAgKgogICogSW5zZXJ0IGFuIEFWQyBlbnRyeSBmb3IgdGhlIFNJRCBwYWlyCiAgKiAoQHNzaWQsIEB0c2lkKSBhbmQgY2xhc3MgQHRjbGFzcy4KICAqIFRoZSBhY2Nlc3MgdmVjdG9ycyBhbmQgdGhlIHNlcXVlbmNlIG51bWJlciBhcmUKICAqIG5vcm1hbGx5IHByb3ZpZGVkIGJ5IHRoZSBzZWN1cml0eSBzZXJ2ZXIgaW4KICAqIHJlc3BvbnNlIHRvIGEgc2VjdXJpdHlfY29tcHV0ZV9hdigpIGNhbGwuICBJZiB0aGUKLSAqIHNlcXVlbmNlIG51bWJlciBAYWUtPmF2ZC5zZXFubyBpcyBub3QgbGVzcyB0aGFuIHRoZSBsYXRlc3QKKyAqIHNlcXVlbmNlIG51bWJlciBAYXZkLT5zZXFubyBpcyBub3QgbGVzcyB0aGFuIHRoZSBsYXRlc3QKICAqIHJldm9jYXRpb24gbm90aWZpY2F0aW9uLCB0aGVuIHRoZSBmdW5jdGlvbiBjb3BpZXMKICAqIHRoZSBhY2Nlc3MgdmVjdG9ycyBpbnRvIGEgY2FjaGUgZW50cnksIHJldHVybnMKICAqIGF2Y19ub2RlIGluc2VydGVkLiBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgogICovCi1zdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfaW5zZXJ0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2Y19lbnRyeSAqYWUpCitzdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfaW5zZXJ0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpwb3MsICpub2RlID0gTlVMTDsKIAlpbnQgaHZhbHVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAotCWlmIChhdmNfbGF0ZXN0X25vdGlmX3VwZGF0ZShhZS0+YXZkLnNlcW5vLCAxKSkKKwlpZiAoYXZjX2xhdGVzdF9ub3RpZl91cGRhdGUoYXZkLT5zZXFubywgMSkpCiAJCWdvdG8gb3V0OwogCiAJbm9kZSA9IGF2Y19hbGxvY19ub2RlKCk7CiAJaWYgKG5vZGUpIHsKLQkJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKLQkJYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCBhZSk7CisJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwkJc3BpbmxvY2tfdCAqbG9jazsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKKwkJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKKwkJYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCBhdmQpOworCisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFnKTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBuZXh0LCBoZWFkLCBsaXN0KSB7CiAJCQlpZiAocG9zLT5hZS5zc2lkID09IHNzaWQgJiYKIAkJCSAgICBwb3MtPmFlLnRzaWQgPT0gdHNpZCAmJgogCQkJICAgIHBvcy0+YWUudGNsYXNzID09IHRjbGFzcykgewpAQCAtNDg0LDkgKzQ4NCw5IEBACiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJfQotCQlsaXN0X2FkZF9yY3UoJm5vZGUtPmxpc3QsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSk7CisJCWhsaXN0X2FkZF9oZWFkX3JjdSgmbm9kZS0+bGlzdCwgaGVhZCk7CiBmb3VuZDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZyk7CiAJfQogb3V0OgogCXJldHVybiBub2RlOwpAQCAtNzQyLDE3ICs3NDIsMjIgQEAKICAqIEBldmVudCA6IFVwZGF0aW5nIGV2ZW50CiAgKiBAcGVybXMgOiBQZXJtaXNzaW9uIG1hc2sgYml0cwogICogQHNzaWQsQHRzaWQsQHRjbGFzcyA6IGlkZW50aWZpZXIgb2YgYW4gQVZDIGVudHJ5CisgKiBAc2Vxbm8gOiBzZXF1ZW5jZSBudW1iZXIgd2hlbiBkZWNpc2lvbiB3YXMgbWFkZQogICoKICAqIGlmIGEgdmFsaWQgQVZDIGVudHJ5IGRvZXNuJ3QgZXhpc3QsdGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9FTlQuCiAgKiBpZiBrbWFsbG9jKCkgY2FsbGVkIGludGVybmFsIHJldHVybnMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9NRU0uCiAgKiBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdXBkYXRlIHRoZSBBVkMgZW50cnkuIFRoZSBvcmlnaW5hbCBBVkMtZW50cnkgb2JqZWN0CiAgKiB3aWxsIHJlbGVhc2UgbGF0ZXIgYnkgUkNVLgogICovCi1zdGF0aWMgaW50IGF2Y191cGRhdGVfbm9kZSh1MzIgZXZlbnQsIHUzMiBwZXJtcywgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzKQorc3RhdGljIGludCBhdmNfdXBkYXRlX25vZGUodTMyIGV2ZW50LCB1MzIgcGVybXMsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywKKwkJCSAgIHUzMiBzZXFubykKIHsKIAlpbnQgaHZhbHVlLCByYyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCXN0cnVjdCBhdmNfbm9kZSAqcG9zLCAqbm9kZSwgKm9yaWcgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCXNwaW5sb2NrX3QgKmxvY2s7CiAKIAlub2RlID0gYXZjX2FsbG9jX25vZGUoKTsKIAlpZiAoIW5vZGUpIHsKQEAgLTc2MiwxMiArNzY3LDE3IEBACiAKIAkvKiBMb2NrIHRoZSB0YXJnZXQgc2xvdCAqLwogCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgeworCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdOworCisJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZyk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJaWYgKHNzaWQgPT0gcG9zLT5hZS5zc2lkICYmCiAJCSAgICB0c2lkID09IHBvcy0+YWUudHNpZCAmJgotCQkgICAgdGNsYXNzID09IHBvcy0+YWUudGNsYXNzKXsKKwkJICAgIHRjbGFzcyA9PSBwb3MtPmFlLnRjbGFzcyAmJgorCQkgICAgc2Vxbm8gPT0gcG9zLT5hZS5hdmQuc2Vxbm8pewogCQkJb3JpZyA9IHBvczsKIAkJCWJyZWFrOwogCQl9CkBAIC03ODMsNyArNzkzLDcgQEAKIAkgKiBDb3B5IGFuZCByZXBsYWNlIG9yaWdpbmFsIG5vZGUuCiAJICovCiAKLQlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsICZvcmlnLT5hZSk7CisJYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCAmb3JpZy0+YWUuYXZkKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFWQ19DQUxMQkFDS19HUkFOVDoKQEAgLTgwOCw3ICs4MTgsNyBAQAogCX0KIAlhdmNfbm9kZV9yZXBsYWNlKG5vZGUsIG9yaWcpOwogb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWcpOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTgyMywxOCArODMzLDI0IEBACiAJaW50IGksIHJjID0gMCwgdG1wcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwlzcGlubG9ja190ICpsb2NrOwogCiAJZm9yIChpID0gMDsgaSA8IEFWQ19DQUNIRV9TTE9UUzsgaSsrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXSwgZmxhZyk7CisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2ldOworCQlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldOworCisJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWcpOwogCQkvKgogCQkgKiBXaXRoIHByZWVtcHRhYmxlIFJDVSwgdGhlIG91dGVyIHNwaW5sb2NrIGRvZXMgbm90CiAJCSAqIHByZXZlbnQgUkNVIGdyYWNlIHBlcmlvZHMgZnJvbSBlbmRpbmcuCiAJCSAqLwogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmF2Y19jYWNoZS5zbG90c1tpXSwgbGlzdCkKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkKIAkJCWF2Y19ub2RlX2RlbGV0ZShub2RlKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldLCBmbGFnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFnKTsKIAl9CiAKIAlmb3IgKGMgPSBhdmNfY2FsbGJhY2tzOyBjOyBjID0gYy0+bmV4dCkgewpAQCAtODc1LDEwICs4OTEsMTAgQEAKIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCiAJCQkgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKIAkJCSB1bnNpZ25lZCBmbGFncywKLQkJCSBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKKwkJCSBzdHJ1Y3QgYXZfZGVjaXNpb24gKmluX2F2ZCkKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7Ci0Jc3RydWN0IGF2Y19lbnRyeSBlbnRyeSwgKnBfYWU7CisJc3RydWN0IGF2X2RlY2lzaW9uIGF2ZF9lbnRyeSwgKmF2ZDsKIAlpbnQgcmMgPSAwOwogCXUzMiBkZW5pZWQ7CiAKQEAgLTg4NiwyOSArOTAyLDM0IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCk7CisJbm9kZSA9IGF2Y19sb29rdXAoc3NpZCwgdHNpZCwgdGNsYXNzKTsKIAlpZiAoIW5vZGUpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgJmVudHJ5LmF2ZCk7CisKKwkJaWYgKGluX2F2ZCkKKwkJCWF2ZCA9IGluX2F2ZDsKKwkJZWxzZQorCQkJYXZkID0gJmF2ZF9lbnRyeTsKKworCQlyYyA9IHNlY3VyaXR5X2NvbXB1dGVfYXYoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIGF2ZCk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCW5vZGUgPSBhdmNfaW5zZXJ0KHNzaWQsIHRzaWQsIHRjbGFzcywgJmVudHJ5KTsKKwkJbm9kZSA9IGF2Y19pbnNlcnQoc3NpZCwgdHNpZCwgdGNsYXNzLCBhdmQpOworCX0gZWxzZSB7CisJCWlmIChpbl9hdmQpCisJCQltZW1jcHkoaW5fYXZkLCAmbm9kZS0+YWUuYXZkLCBzaXplb2YoKmluX2F2ZCkpOworCQlhdmQgPSAmbm9kZS0+YWUuYXZkOwogCX0KIAotCXBfYWUgPSBub2RlID8gJm5vZGUtPmFlIDogJmVudHJ5OwotCi0JaWYgKGF2ZCkKLQkJbWVtY3B5KGF2ZCwgJnBfYWUtPmF2ZCwgc2l6ZW9mKCphdmQpKTsKLQotCWRlbmllZCA9IHJlcXVlc3RlZCAmIH4ocF9hZS0+YXZkLmFsbG93ZWQpOworCWRlbmllZCA9IHJlcXVlc3RlZCAmIH4oYXZkLT5hbGxvd2VkKTsKIAogCWlmIChkZW5pZWQpIHsKIAkJaWYgKGZsYWdzICYgQVZDX1NUUklDVCkKIAkJCXJjID0gLUVBQ0NFUzsKIAkJZWxzZSBpZiAoIXNlbGludXhfZW5mb3JjaW5nIHx8IHNlY3VyaXR5X3Blcm1pc3NpdmVfc2lkKHNzaWQpKQogCQkJYXZjX3VwZGF0ZV9ub2RlKEFWQ19DQUxMQkFDS19HUkFOVCwgcmVxdWVzdGVkLCBzc2lkLAotCQkJCQl0c2lkLCB0Y2xhc3MpOworCQkJCQl0c2lkLCB0Y2xhc3MsIGF2ZC0+c2Vxbm8pOwogCQllbHNlCiAJCQlyYyA9IC1FQUNDRVM7CiAJfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDAwODE1OTcuLjdjNTJiYTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgWEFUVFJfU0VMSU5VWF9TVUZGSVggInNlbGludXgiCiAjZGVmaW5lIFhBVFRSX05BTUVfU0VMSU5VWCBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU0VMSU5VWF9TVUZGSVgKIAotI2RlZmluZSBOVU1fU0VMX01OVF9PUFRTIDQKKyNkZWZpbmUgTlVNX1NFTF9NTlRfT1BUUyA1CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcG9saWN5ZGJfbG9hZGVkX3ZlcnNpb247CiBleHRlcm4gaW50IHNlbGludXhfbmxtc2dfbG9va3VwKHUxNiBzY2xhc3MsIHUxNiBubG1zZ190eXBlLCB1MzIgKnBlcm0pOwpAQCAtMzUzLDYgKzM1Myw3IEBACiAJT3B0X2ZzY29udGV4dCA9IDIsCiAJT3B0X2RlZmNvbnRleHQgPSAzLAogCU9wdF9yb290Y29udGV4dCA9IDQsCisJT3B0X2xhYmVsc3VwcG9ydCA9IDUsCiB9OwogCiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0zNjAsNiArMzYxLDcgQEAKIAl7T3B0X2ZzY29udGV4dCwgRlNDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X2RlZmNvbnRleHQsIERFRkNPTlRFWFRfU1RSICIlcyJ9LAogCXtPcHRfcm9vdGNvbnRleHQsIFJPT1RDT05URVhUX1NUUiAiJXMifSwKKwl7T3B0X2xhYmVsc3VwcG9ydCwgTEFCRUxTVVBQX1NUUn0sCiAJe09wdF9lcnJvciwgTlVMTH0sCiB9OwogCkBAIC00MzEsNyArNDMzLDcgQEAKIAkJfQogCX0KIAotCXNic2VjLT5pbml0aWFsaXplZCA9IDE7CisJc2JzZWMtPmZsYWdzIHw9IChTRV9TQklOSVRJQUxJWkVEIHwgU0VfU0JMQUJFTFNVUFApOwogCiAJaWYgKHNic2VjLT5iZWhhdmlvciA+IEFSUkFZX1NJWkUobGFiZWxpbmdfYmVoYXZpb3JzKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBpbml0aWFsaXplZCAoZGV2ICVzLCB0eXBlICVzKSwgdW5rbm93biBiZWhhdmlvclxuIiwKQEAgLTQ0MSw2ICs0NDMsMTIgQEAKIAkJICAgICAgIHNiLT5zX2lkLCBzYi0+c190eXBlLT5uYW1lLAogCQkgICAgICAgbGFiZWxpbmdfYmVoYXZpb3JzW3Nic2VjLT5iZWhhdmlvci0xXSk7CiAKKwlpZiAoc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9HRU5GUyB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UIHx8CisJICAgIHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTk9ORSB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPiBBUlJBWV9TSVpFKGxhYmVsaW5nX2JlaGF2aW9ycykpCisJCXNic2VjLT5mbGFncyAmPSB+U0VfU0JMQUJFTFNVUFA7CisKIAkvKiBJbml0aWFsaXplIHRoZSByb290IGlub2RlLiAqLwogCXJjID0gaW5vZGVfZG9pbml0X3dpdGhfZGVudHJ5KHJvb3RfaW5vZGUsIHJvb3QpOwogCkBAIC00ODcsMjMgKzQ5NSwyMiBAQAogCiAJc2VjdXJpdHlfaW5pdF9tbnRfb3B0cyhvcHRzKTsKIAotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKQorCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc3NfaW5pdGlhbGl6ZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiBpZiB3ZSBldmVyIHVzZSBzYnNlYyBmbGFncyBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiB0cmFja2luZyBtb3VudAotCSAqIHNldHRpbmdzIHRoaXMgaXMgZ29pbmcgdG8gbmVlZCBhIG1hc2sKLQkgKi8KLQl0bXAgPSBzYnNlYy0+ZmxhZ3M7CisJdG1wID0gc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSzsKIAkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgc2IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmICh0bXAgJiAweDAxKQogCQkJb3B0cy0+bnVtX21udF9vcHRzKys7CiAJCXRtcCA+Pj0gMTsKIAl9CisJLyogQ2hlY2sgaWYgdGhlIExhYmVsIHN1cHBvcnQgZmxhZyBpcyBzZXQgKi8KKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApCisJCW9wdHMtPm51bV9tbnRfb3B0cysrOwogCiAJb3B0cy0+bW50X29wdHMgPSBrY2FsbG9jKG9wdHMtPm51bV9tbnRfb3B0cywgc2l6ZW9mKGNoYXIgKiksIEdGUF9BVE9NSUMpOwogCWlmICghb3B0cy0+bW50X29wdHMpIHsKQEAgLTU0OSw2ICs1NTYsMTAgQEAKIAkJb3B0cy0+bW50X29wdHNbaV0gPSBjb250ZXh0OwogCQlvcHRzLT5tbnRfb3B0c19mbGFnc1tpKytdID0gUk9PVENPTlRFWFRfTU5UOwogCX0KKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApIHsKKwkJb3B0cy0+bW50X29wdHNbaV0gPSBOVUxMOworCQlvcHRzLT5tbnRfb3B0c19mbGFnc1tpKytdID0gU0VfU0JMQUJFTFNVUFA7CisJfQogCiAJQlVHX09OKGkgIT0gb3B0cy0+bnVtX21udF9vcHRzKTsKIApAQCAtNTYyLDggKzU3MywxMCBAQAogc3RhdGljIGludCBiYWRfb3B0aW9uKHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWMsIGNoYXIgZmxhZywKIAkJICAgICAgdTMyIG9sZF9zaWQsIHUzMiBuZXdfc2lkKQogeworCWNoYXIgbW50X2ZsYWdzID0gc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSzsKKwogCS8qIGNoZWNrIGlmIHRoZSBvbGQgbW91bnQgY29tbWFuZCBoYWQgdGhlIHNhbWUgb3B0aW9ucyAqLwotCWlmIChzYnNlYy0+aW5pdGlhbGl6ZWQpCisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpCiAJCWlmICghKHNic2VjLT5mbGFncyAmIGZsYWcpIHx8CiAJCSAgICAob2xkX3NpZCAhPSBuZXdfc2lkKSkKIAkJCXJldHVybiAxOwpAQCAtNTcxLDggKzU4NCw4IEBACiAJLyogY2hlY2sgaWYgd2Ugd2VyZSBwYXNzZWQgdGhlIHNhbWUgb3B0aW9ucyB0d2ljZSwKIAkgKiBha2Egc29tZW9uZSBwYXNzZWQgY29udGV4dD1hLGNvbnRleHQ9YgogCSAqLwotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKQotCQlpZiAoc2JzZWMtPmZsYWdzICYgZmxhZykKKwlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSkKKwkJaWYgKG1udF9mbGFncyAmIGZsYWcpCiAJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYyNiw3ICs2MzksNyBAQAogCSAqIHRoaXMgc2IgZG9lcyBub3Qgc2V0IGFueSBzZWN1cml0eSBvcHRpb25zLiAgKFRoZSBmaXJzdCBvcHRpb25zCiAJICogd2lsbCBiZSB1c2VkIGZvciBib3RoIG1vdW50cykKIAkgKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkICYmIChzYi0+c190eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpCisJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSAmJiAoc2ItPnNfdHlwZS0+ZnNfZmxhZ3MgJiBGU19CSU5BUllfTU9VTlREQVRBKQogCSAgICAmJiAobnVtX29wdHMgPT0gMCkpCiAJCWdvdG8gb3V0OwogCkBAIC02MzcsNiArNjUwLDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29wdHM7IGkrKykgewogCQl1MzIgc2lkOworCisJCWlmIChmbGFnc1tpXSA9PSBTRV9TQkxBQkVMU1VQUCkKKwkJCWNvbnRpbnVlOwogCQlyYyA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKG1vdW50X29wdGlvbnNbaV0sCiAJCQkJCSAgICAgc3RybGVuKG1vdW50X29wdGlvbnNbaV0pLCAmc2lkKTsKIAkJaWYgKHJjKSB7CkBAIC02OTAsMTkgKzcwNiwxOSBAQAogCQl9CiAJfQogCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCkgeworCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSB7CiAJCS8qIHByZXZpb3VzbHkgbW91bnRlZCB3aXRoIG9wdGlvbnMsIGJ1dCBub3Qgb24gdGhpcyBhdHRlbXB0PyAqLwotCQlpZiAoc2JzZWMtPmZsYWdzICYmICFudW1fb3B0cykKKwkJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9NTlRNQVNLKSAmJiAhbnVtX29wdHMpCiAJCQlnb3RvIG91dF9kb3VibGVfbW91bnQ7CiAJCXJjID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHN0cmNtcChzYi0+c190eXBlLT5uYW1lLCAicHJvYyIpID09IDApCi0JCXNic2VjLT5wcm9jID0gMTsKKwkJc2JzZWMtPmZsYWdzIHw9IFNFX1NCUFJPQzsKIAogCS8qIERldGVybWluZSB0aGUgbGFiZWxpbmcgYmVoYXZpb3IgdG8gdXNlIGZvciB0aGlzIGZpbGVzeXN0ZW0gdHlwZS4gKi8KLQlyYyA9IHNlY3VyaXR5X2ZzX3VzZShzYnNlYy0+cHJvYyA/ICJwcm9jIiA6IHNiLT5zX3R5cGUtPm5hbWUsICZzYnNlYy0+YmVoYXZpb3IsICZzYnNlYy0+c2lkKTsKKwlyYyA9IHNlY3VyaXR5X2ZzX3VzZSgoc2JzZWMtPmZsYWdzICYgU0VfU0JQUk9DKSA/ICJwcm9jIiA6IHNiLT5zX3R5cGUtPm5hbWUsICZzYnNlYy0+YmVoYXZpb3IsICZzYnNlYy0+c2lkKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHNlY3VyaXR5X2ZzX3VzZSglcykgcmV0dXJuZWQgJWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgc2ItPnNfdHlwZS0+bmFtZSwgcmMpOwpAQCAtODA2LDEwICs4MjIsMTAgQEAKIAl9CiAKIAkvKiBob3cgY2FuIHdlIGNsb25lIGlmIHRoZSBvbGQgb25lIHdhc24ndCBzZXQgdXA/PyAqLwotCUJVR19PTighb2xkc2JzZWMtPmluaXRpYWxpemVkKTsKKwlCVUdfT04oIShvbGRzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSk7CiAKIAkvKiBpZiBmcyBpcyByZXVzaW5nIGEgc2IsIGp1c3QgbGV0IGl0cyBvcHRpb25zIHN0YW5kLi4uICovCi0JaWYgKG5ld3Nic2VjLT5pbml0aWFsaXplZCkKKwlpZiAobmV3c2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmbmV3c2JzZWMtPmxvY2spOwpAQCAtOTE3LDcgKzkzMyw4IEBACiAJCQkJZ290byBvdXRfZXJyOwogCQkJfQogCQkJYnJlYWs7Ci0KKwkJY2FzZSBPcHRfbGFiZWxzdXBwb3J0OgorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAgdW5rbm93biBtb3VudCBvcHRpb25cbiIpOwpAQCAtOTk5LDcgKzEwMTYsMTIgQEAKIAljaGFyICpwcmVmaXg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgb3B0cy0+bnVtX21udF9vcHRzOyBpKyspIHsKLQkJY2hhciAqaGFzX2NvbW1hID0gc3RyY2hyKG9wdHMtPm1udF9vcHRzW2ldLCAnLCcpOworCQljaGFyICpoYXNfY29tbWE7CisKKwkJaWYgKG9wdHMtPm1udF9vcHRzW2ldKQorCQkJaGFzX2NvbW1hID0gc3RyY2hyKG9wdHMtPm1udF9vcHRzW2ldLCAnLCcpOworCQllbHNlCisJCQloYXNfY29tbWEgPSBOVUxMOwogCiAJCXN3aXRjaCAob3B0cy0+bW50X29wdHNfZmxhZ3NbaV0pIHsKIAkJY2FzZSBDT05URVhUX01OVDoKQEAgLTEwMTQsNiArMTAzNiwxMCBAQAogCQljYXNlIERFRkNPTlRFWFRfTU5UOgogCQkJcHJlZml4ID0gREVGQ09OVEVYVF9TVFI7CiAJCQlicmVhazsKKwkJY2FzZSBTRV9TQkxBQkVMU1VQUDoKKwkJCXNlcV9wdXRjKG0sICcsJyk7CisJCQlzZXFfcHV0cyhtLCBMQUJFTFNVUFBfU1RSKTsKKwkJCWNvbnRpbnVlOwogCQlkZWZhdWx0OgogCQkJQlVHKCk7CiAJCX07CkBAIC0xMjA5LDcgKzEyMzUsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlzYnNlYyA9IGlub2RlLT5pX3NiLT5zX3NlY3VyaXR5OwotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKSB7CisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpIHsKIAkJLyogRGVmZXIgaW5pdGlhbGl6YXRpb24gdW50aWwgc2VsaW51eF9jb21wbGV0ZV9pbml0LAogCQkgICBhZnRlciB0aGUgaW5pdGlhbCBwb2xpY3kgaXMgbG9hZGVkIGFuZCB0aGUgc2VjdXJpdHkKIAkJICAgc2VydmVyIGlzIHJlYWR5IHRvIGhhbmRsZSBjYWxscy4gKi8KQEAgLTEyMzcsMTkgKzEyNjMsMjYgQEAKIAkJCWRlbnRyeSA9IGRfZmluZF9hbGlhcyhpbm9kZSk7CiAJCX0KIAkJaWYgKCFkZW50cnkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgbm8gZGVudHJ5IGZvciBkZXY9JXMgIgotCQkJICAgICAgICJpbm89JWxkXG4iLCBfX2Z1bmNfXywgaW5vZGUtPmlfc2ItPnNfaWQsCi0JCQkgICAgICAgaW5vZGUtPmlfaW5vKTsKKwkJCS8qCisJCQkgKiB0aGlzIGlzIGNhbiBiZSBoaXQgb24gYm9vdCB3aGVuIGEgZmlsZSBpcyBhY2Nlc3NlZAorCQkJICogYmVmb3JlIHRoZSBwb2xpY3kgaXMgbG9hZGVkLiAgV2hlbiB3ZSBsb2FkIHBvbGljeSB3ZQorCQkJICogbWF5IGZpbmQgaW5vZGVzIHRoYXQgaGF2ZSBubyBkZW50cnkgb24gdGhlCisJCQkgKiBzYnNlYy0+aXNlY19oZWFkIGxpc3QuICBObyByZWFzb24gdG8gY29tcGxhaW4gYXMgdGhlc2UKKwkJCSAqIHdpbGwgZ2V0IGZpeGVkIHVwIHRoZSBuZXh0IHRpbWUgd2UgZ28gdGhyb3VnaAorCQkJICogaW5vZGVfZG9pbml0IHdpdGggYSBkZW50cnksIGJlZm9yZSB0aGVzZSBpbm9kZXMgY291bGQKKwkJCSAqIGJlIHVzZWQgYWdhaW4gYnkgdXNlcnNwYWNlLgorCQkJICovCiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsZW4gPSBJTklUQ09OVEVYVExFTjsKLQkJY29udGV4dCA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CisJCWNvbnRleHQgPSBrbWFsbG9jKGxlbisxLCBHRlBfTk9GUyk7CiAJCWlmICghY29udGV4dCkgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJZHB1dChkZW50cnkpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CisJCWNvbnRleHRbbGVuXSA9ICdcMCc7CiAJCXJjID0gaW5vZGUtPmlfb3AtPmdldHhhdHRyKGRlbnRyeSwgWEFUVFJfTkFNRV9TRUxJTlVYLAogCQkJCQkgICBjb250ZXh0LCBsZW4pOwogCQlpZiAocmMgPT0gLUVSQU5HRSkgewpAQCAtMTI2MiwxMiArMTI5NSwxMyBAQAogCQkJfQogCQkJa2ZyZWUoY29udGV4dCk7CiAJCQlsZW4gPSByYzsKLQkJCWNvbnRleHQgPSBrbWFsbG9jKGxlbiwgR0ZQX05PRlMpOworCQkJY29udGV4dCA9IGttYWxsb2MobGVuKzEsIEdGUF9OT0ZTKTsKIAkJCWlmICghY29udGV4dCkgewogCQkJCXJjID0gLUVOT01FTTsKIAkJCQlkcHV0KGRlbnRyeSk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQorCQkJY29udGV4dFtsZW5dID0gJ1wwJzsKIAkJCXJjID0gaW5vZGUtPmlfb3AtPmdldHhhdHRyKGRlbnRyeSwKIAkJCQkJCSAgIFhBVFRSX05BTUVfU0VMSU5VWCwKIAkJCQkJCSAgIGNvbnRleHQsIGxlbik7CkBAIC0xMjg5LDEwICsxMzIzLDE5IEBACiAJCQkJCQkJICAgICBzYnNlYy0+ZGVmX3NpZCwKIAkJCQkJCQkgICAgIEdGUF9OT0ZTKTsKIAkJCWlmIChyYykgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgY29udGV4dF90b19zaWQoJXMpICIKLQkJCQkgICAgICAgInJldHVybmVkICVkIGZvciBkZXY9JXMgaW5vPSVsZFxuIiwKLQkJCQkgICAgICAgX19mdW5jX18sIGNvbnRleHQsIC1yYywKLQkJCQkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CisJCQkJY2hhciAqZGV2ID0gaW5vZGUtPmlfc2ItPnNfaWQ7CisJCQkJdW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS0+aV9pbm87CisKKwkJCQlpZiAocmMgPT0gLUVJTlZBTCkgeworCQkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTRUxpbnV4OiBpbm9kZT0lbHUgb24gZGV2PSVzIHdhcyBmb3VuZCB0byBoYXZlIGFuIGludmFsaWQgIgorCQkJCQkJCSJjb250ZXh0PSVzLiAgVGhpcyBpbmRpY2F0ZXMgeW91IG1heSBuZWVkIHRvIHJlbGFiZWwgdGhlIGlub2RlIG9yIHRoZSAiCisJCQkJCQkJImZpbGVzeXN0ZW0gaW4gcXVlc3Rpb24uXG4iLCBpbm8sIGRldiwgY29udGV4dCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogJXM6ICBjb250ZXh0X3RvX3NpZCglcykgIgorCQkJCQkgICAgICAgInJldHVybmVkICVkIGZvciBkZXY9JXMgaW5vPSVsZFxuIiwKKwkJCQkJICAgICAgIF9fZnVuY19fLCBjb250ZXh0LCAtcmMsIGRldiwgaW5vKTsKKwkJCQl9CiAJCQkJa2ZyZWUoY29udGV4dCk7CiAJCQkJLyogTGVhdmUgd2l0aCB0aGUgdW5sYWJlbGVkIFNJRCAqLwogCQkJCXJjID0gMDsKQEAgLTEzMjYsNyArMTM2OSw3IEBACiAJCS8qIERlZmF1bHQgdG8gdGhlIGZzIHN1cGVyYmxvY2sgU0lELiAqLwogCQlpc2VjLT5zaWQgPSBzYnNlYy0+c2lkOwogCi0JCWlmIChzYnNlYy0+cHJvYyAmJiAhU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAoKHNic2VjLT5mbGFncyAmIFNFX1NCUFJPQykgJiYgIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCXN0cnVjdCBwcm9jX2lub2RlICpwcm9jaSA9IFBST0NfSShpbm9kZSk7CiAJCQlpZiAocHJvY2ktPnBkZSkgewogCQkJCWlzZWMtPnNjbGFzcyA9IGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MoaW5vZGUtPmlfbW9kZSk7CkBAIC0xNTg3LDcgKzE2MzAsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKCFuZXdzaWQgfHwgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkgeworCWlmICghbmV3c2lkIHx8ICEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKSB7CiAJCXJjID0gc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWQoc2lkLCBkc2VjLT5zaWQsIHRjbGFzcywgJm5ld3NpZCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKQEAgLTE4MDEsNiArMTg0NCw4IEBACiAJCQlhdiB8PSBGSUZPX0ZJTEVfX09QRU47CiAJCWVsc2UgaWYgKFNfSVNESVIobW9kZSkpCiAJCQlhdiB8PSBESVJfX09QRU47CisJCWVsc2UgaWYgKFNfSVNTT0NLKG1vZGUpKQorCQkJYXYgfD0gU09DS19GSUxFX19PUEVOOwogCQllbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IFdBUk5JTkc6IGluc2lkZSAlcyB3aXRoICIKIAkJCQkidW5rbm93biBtb2RlOiVvXG4iLCBfX2Z1bmNfXywgbW9kZSk7CkBAIC0xODE1LDcgKzE4NjAsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+cHRyYWNlX21heV9hY2Nlc3MoY2hpbGQsIG1vZGUpOworCXJjID0gY2FwX3B0cmFjZV9tYXlfYWNjZXNzKGNoaWxkLCBtb2RlKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTgzMiw3ICsxODc3LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnB0cmFjZV90cmFjZW1lKHBhcmVudCk7CisJcmMgPSBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTg0OCw3ICsxODkzLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5jYXBnZXQodGFyZ2V0LCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOworCXJldHVybiBjYXBfY2FwZ2V0KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2NhcHNldChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLApAQCAtMTg1OCw3ICsxOTAzLDcgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHNlY29uZGFyeV9vcHMtPmNhcHNldChuZXcsIG9sZCwKKwllcnJvciA9IGNhcF9jYXBzZXQobmV3LCBvbGQsCiAJCQkJICAgICAgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE4NjYsMTIgKzE5MTEsMjIgQEAKIAlyZXR1cm4gY3JlZF9oYXNfcGVybShvbGQsIG5ldywgUFJPQ0VTU19fU0VUQ0FQKTsKIH0KIAorLyoKKyAqIChUaGlzIGNvbW1lbnQgdXNlZCB0byBsaXZlIHdpdGggdGhlIHNlbGludXhfdGFza19zZXR1aWQgaG9vaywKKyAqIHdoaWNoIHdhcyByZW1vdmVkKS4KKyAqCisgKiBTaW5jZSBzZXR1aWQgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHByb2Nlc3MsIGFuZCBzaW5jZSB0aGUgU0VMaW51eAorICogY29udHJvbHMgYXJlIG5vdCBiYXNlZCBvbiB0aGUgTGludXggaWRlbnRpdHkgYXR0cmlidXRlcywgU0VMaW51eCBkb2VzIG5vdAorICogbmVlZCB0byBjb250cm9sIHRoaXMgb3BlcmF0aW9uLiAgSG93ZXZlciwgU0VMaW51eCBkb2VzIGNvbnRyb2wgdGhlIHVzZSBvZgorICogdGhlIENBUF9TRVRVSUQgYW5kIENBUF9TRVRHSUQgY2FwYWJpbGl0aWVzIHVzaW5nIHRoZSBjYXBhYmxlIGhvb2suCisgKi8KKwogc3RhdGljIGludCBzZWxpbnV4X2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAogCQkJICAgaW50IGNhcCwgaW50IGF1ZGl0KQogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+Y2FwYWJsZSh0c2ssIGNyZWQsIGNhcCwgYXVkaXQpOworCXJjID0gY2FwX2NhcGFibGUodHNrLCBjcmVkLCBjYXAsIGF1ZGl0KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTk5Nyw3ICsyMDUyLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnN5c2xvZyh0eXBlKTsKKwlyYyA9IGNhcF9zeXNsb2codHlwZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIwMjgsMTAgKzIwODMsNiBAQAogICogbWFwcGluZy4gMCBtZWFucyB0aGVyZSBpcyBlbm91Z2ggbWVtb3J5IGZvciB0aGUgYWxsb2NhdGlvbiB0bwogICogc3VjY2VlZCBhbmQgLUVOT01FTSBpbXBsaWVzIHRoZXJlIGlzIG5vdC4KICAqCi0gKiBOb3RlIHRoYXQgc2Vjb25kYXJ5X29wcy0+Y2FwYWJsZSBhbmQgdGFza19oYXNfcGVybV9ub2F1ZGl0IHJldHVybiAwCi0gKiBpZiB0aGUgY2FwYWJpbGl0eSBpcyBncmFudGVkLCBidXQgX192bV9lbm91Z2hfbWVtb3J5IHJlcXVpcmVzIDEgaWYKLSAqIHRoZSBjYXBhYmlsaXR5IGlzIGdyYW50ZWQuCi0gKgogICogRG8gbm90IGF1ZGl0IHRoZSBzZWxpbnV4IHBlcm1pc3Npb24gY2hlY2ssIGFzIHRoaXMgaXMgYXBwbGllZCB0byBhbGwKICAqIHByb2Nlc3NlcyB0aGF0IGFsbG9jYXRlIG1hcHBpbmdzLgogICovCkBAIC0yMDU4LDcgKzIxMDksNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBicHJtLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+YnBybV9zZXRfY3JlZHMoYnBybSk7CisJcmMgPSBjYXBfYnBybV9zZXRfY3JlZHMoYnBybSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIxNTYsMTEgKzIyMDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfYnBybV9jaGVja19zZWN1cml0eShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5icHJtX2NoZWNrX3NlY3VyaXR5KGJwcm0pOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfYnBybV9zZWN1cmVleGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKQEAgLTIxODAsNyArMjIyNiw3IEBACiAJCQkJCVBST0NFU1NfX05PQVRTRUNVUkUsIE5VTEwpOwogCX0KIAotCXJldHVybiAoYXRzZWN1cmUgfHwgc2Vjb25kYXJ5X29wcy0+YnBybV9zZWN1cmVleGVjKGJwcm0pKTsKKwlyZXR1cm4gKGF0c2VjdXJlIHx8IGNhcF9icHJtX3NlY3VyZWV4ZWMoYnBybSkpOwogfQogCiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpzZWxpbnV4ZnNfbW91bnQ7CkBAIC0yMjkwLDggKzIzMzYsNiBAQAogCXN0cnVjdCBybGltaXQgKnJsaW0sICppbml0cmxpbTsKIAlpbnQgcmMsIGk7CiAKLQlzZWNvbmRhcnlfb3BzLT5icHJtX2NvbW1pdHRpbmdfY3JlZHMoYnBybSk7Ci0KIAluZXdfdHNlYyA9IGJwcm0tPmNyZWQtPnNlY3VyaXR5OwogCWlmIChuZXdfdHNlYy0+c2lkID09IG5ld190c2VjLT5vc2lkKQogCQlyZXR1cm47CkBAIC0yMzM3LDggKzIzODEsNiBAQAogCWludCByYywgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2Vjb25kYXJ5X29wcy0+YnBybV9jb21taXR0ZWRfY3JlZHMoYnBybSk7Ci0KIAlvc2lkID0gdHNlYy0+b3NpZDsKIAlzaWQgPSB0c2VjLT5zaWQ7CiAKQEAgLTI0MDAsNyArMjQ0Miw4IEBACiAJcmV0dXJuIChtYXRjaF9wcmVmaXgoQ09OVEVYVF9TVFIsIHNpemVvZihDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CiAJCW1hdGNoX3ByZWZpeChGU0NPTlRFWFRfU1RSLCBzaXplb2YoRlNDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CiAJCW1hdGNoX3ByZWZpeChERUZDT05URVhUX1NUUiwgc2l6ZW9mKERFRkNPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKLQkJbWF0Y2hfcHJlZml4KFJPT1RDT05URVhUX1NUUiwgc2l6ZW9mKFJPT1RDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pKTsKKwkJbWF0Y2hfcHJlZml4KFJPT1RDT05URVhUX1NUUiwgc2l6ZW9mKFJPT1RDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CisJCW1hdGNoX3ByZWZpeChMQUJFTFNVUFBfU1RSLCBzaXplb2YoTEFCRUxTVVBQX1NUUiktMSwgb3B0aW9uLCBsZW4pKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRha2Vfb3B0aW9uKGNoYXIgKip0bywgY2hhciAqZnJvbSwgaW50ICpmaXJzdCwgaW50IGxlbikKQEAgLTI1MTMsMTEgKzI1NTYsNiBAQAogCQkJIHZvaWQgKmRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNiX21vdW50KGRldl9uYW1lLCBwYXRoLCB0eXBlLCBmbGFncywgZGF0YSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoZmxhZ3MgJiBNU19SRU1PVU5UKQogCQlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBwYXRoLT5tbnQtPm1udF9zYiwKQEAgLTI1MzAsMTEgKzI1NjgsNiBAQAogc3RhdGljIGludCBzZWxpbnV4X3Vtb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zYl91bW91bnQobW50LCBmbGFncyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBtbnQtPm1udF9zYiwKIAkJCQkgICBGSUxFU1lTVEVNX19VTk1PVU5ULCBOVUxMKTsKQEAgLTI1NzAsNyArMjYwMyw3IEBACiAJc2lkID0gdHNlYy0+c2lkOwogCW5ld3NpZCA9IHRzZWMtPmNyZWF0ZV9zaWQ7CiAKLQlpZiAoIW5ld3NpZCB8fCBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKSB7CisJaWYgKCFuZXdzaWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpIHsKIAkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwKIAkJCQkJICAgICBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpLAogCQkJCQkgICAgICZuZXdzaWQpOwpAQCAtMjU4NSwxNCArMjYxOCwxNCBAQAogCX0KIAogCS8qIFBvc3NpYmx5IGRlZmVyIGluaXRpYWxpemF0aW9uIHRvIHNlbGludXhfY29tcGxldGVfaW5pdC4gKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkKSB7CisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpIHsKIAkJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwogCQlpc2VjLT5zY2xhc3MgPSBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpOwogCQlpc2VjLT5zaWQgPSBuZXdzaWQ7CiAJCWlzZWMtPmluaXRpYWxpemVkID0gMTsKIAl9CiAKLQlpZiAoIXNzX2luaXRpYWxpemVkIHx8IHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpCisJaWYgKCFzc19pbml0aWFsaXplZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKG5hbWUpIHsKQEAgLTI2MjIsMjEgKzI2NTUsMTEgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAJcmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV91bmxpbmsoZGlyLCBkZW50cnkpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7CiB9CiAKQEAgLTI2NTcsMTIgKzI2ODAsNiBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsIGRldl90IGRldikKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpOwogfQogCkBAIC0yNjgyLDIyICsyNjk5LDEzIEBACiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuYW1laWRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX2ZvbGxvd19saW5rKGRlbnRyeSwgbmFtZWlkYXRhKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAlyZXR1cm4gZGVudHJ5X2hhc19wZXJtKGNyZWQsIE5VTEwsIGRlbnRyeSwgRklMRV9fUkVBRCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmICghbWFzaykgewogCQkvKiBObyBwZXJtaXNzaW9uIHRvIGNoZWNrLiAgRXhpc3RlbmNlIHRlc3QuICovCkBAIC0yNzExLDExICsyNzE5LDYgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfc2V0YXR0cihkZW50cnksIGlhdHRyKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0ZPUkNFKQogCQlyZXR1cm4gMDsKQEAgLTI3NjksNyArMjc3Miw3IEBACiAJCXJldHVybiBzZWxpbnV4X2lub2RlX3NldG90aGVyeGF0dHIoZGVudHJ5LCBuYW1lKTsKIAogCXNic2VjID0gaW5vZGUtPmlfc2ItPnNfc2VjdXJpdHk7Ci0JaWYgKHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpCisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCkBAIC0yOTMxLDE2ICsyOTM0LDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbmVlZF9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPmlub2RlX25lZWRfa2lsbHByaXYoZGVudHJ5KTsKLX0KLQotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2tpbGxwcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+aW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKLX0KLQogc3RhdGljIHZvaWQgc2VsaW51eF9pbm9kZV9nZXRzZWNpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNlY2lkKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKQEAgLTMwNzgsMTggKzMwNzEsMTMgQEAKIAkJCQkgdW5zaWduZWQgbG9uZyBwcm90KQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5maWxlX21wcm90ZWN0KHZtYSwgcmVxcHJvdCwgcHJvdCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoc2VsaW51eF9jaGVja3JlcXByb3QpCiAJCXByb3QgPSByZXFwcm90OwogCiAjaWZuZGVmIENPTkZJR19QUEMzMgogCWlmICgocHJvdCAmIFBST1RfRVhFQykgJiYgISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpIHsKLQkJcmMgPSAwOworCQlpbnQgcmMgPSAwOwogCQlpZiAodm1hLT52bV9zdGFydCA+PSB2bWEtPnZtX21tLT5zdGFydF9icmsgJiYKIAkJICAgIHZtYS0+dm1fZW5kIDw9IHZtYS0+dm1fbW0tPmJyaykgewogCQkJcmMgPSBjcmVkX2hhc19wZXJtKGNyZWQsIGNyZWQsIFBST0NFU1NfX0VYRUNIRUFQKTsKQEAgLTMyMzksMTIgKzMyMjcsNiBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfdGFza19jcmVhdGUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncykKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfY3JlYXRlKGNsb25lX2ZsYWdzKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCXJldHVybiBjdXJyZW50X2hhc19wZXJtKGN1cnJlbnQsIFBST0NFU1NfX0ZPUkspOwogfQogCkBAIC0zMjc4LDE0ICszMjYwLDYgQEAKIH0KIAogLyoKLSAqIGNvbW1pdCBuZXcgY3JlZGVudGlhbHMKLSAqLwotc3RhdGljIHZvaWQgc2VsaW51eF9jcmVkX2NvbW1pdChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkKQotewotCXNlY29uZGFyeV9vcHMtPmNyZWRfY29tbWl0KG5ldywgb2xkKTsKLX0KLQotLyoKICAqIHNldCB0aGUgc2VjdXJpdHkgZGF0YSBmb3IgYSBrZXJuZWwgc2VydmljZQogICogLSBhbGwgdGhlIGNyZWF0aW9uIGNvbnRleHRzIGFyZSBzZXQgdG8gdW5sYWJlbGxlZAogICovCkBAIC0zMzI5LDI5ICszMzAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0dWlkKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsIGludCBmbGFncykKLXsKLQkvKiBTaW5jZSBzZXR1aWQgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHByb2Nlc3MsIGFuZAotCSAgIHNpbmNlIHRoZSBTRUxpbnV4IGNvbnRyb2xzIGFyZSBub3QgYmFzZWQgb24gdGhlIExpbnV4Ci0JICAgaWRlbnRpdHkgYXR0cmlidXRlcywgU0VMaW51eCBkb2VzIG5vdCBuZWVkIHRvIGNvbnRyb2wKLQkgICB0aGlzIG9wZXJhdGlvbi4gIEhvd2V2ZXIsIFNFTGludXggZG9lcyBjb250cm9sIHRoZSB1c2UKLQkgICBvZiB0aGUgQ0FQX1NFVFVJRCBhbmQgQ0FQX1NFVEdJRCBjYXBhYmlsaXRpZXMgdXNpbmcgdGhlCi0JICAgY2FwYWJsZSBob29rLiAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19maXhfc2V0dWlkKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCi0JCQkJICAgaW50IGZsYWdzKQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT50YXNrX2ZpeF9zZXR1aWQobmV3LCBvbGQsIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0Z2lkKGdpZF90IGlkMCwgZ2lkX3QgaWQxLCBnaWRfdCBpZDIsIGludCBmbGFncykKLXsKLQkvKiBTZWUgdGhlIGNvbW1lbnQgZm9yIHNldHVpZCBhYm92ZS4gKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0cGdpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHBpZF90IHBnaWQpCiB7CiAJcmV0dXJuIGN1cnJlbnRfaGFzX3Blcm0ocCwgUFJPQ0VTU19fU0VUUEdJRCk7CkBAIC0zMzcyLDE3ICszMzIzLDExIEBACiAJKnNlY2lkID0gdGFza19zaWQocCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldGdyb3VwcyhzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbykKLXsKLQkvKiBTZWUgdGhlIGNvbW1lbnQgZm9yIHNldHVpZCBhYm92ZS4gKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0bmljZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWNlKQogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRuaWNlKHAsIG5pY2UpOworCXJjID0gY2FwX3Rhc2tfc2V0bmljZShwLCBuaWNlKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMzM5Myw3ICszMzM4LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0aW9wcmlvKHAsIGlvcHJpbyk7CisJcmMgPSBjYXBfdGFza19zZXRpb3ByaW8ocCwgaW9wcmlvKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMzQwOCwxMSArMzM1Myw2IEBACiBzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKIHsKIAlzdHJ1Y3QgcmxpbWl0ICpvbGRfcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbSArIHJlc291cmNlOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRybGltaXQocmVzb3VyY2UsIG5ld19ybGltKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCS8qIENvbnRyb2wgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBoYXJkIGxpbWl0ICh3aGV0aGVyCiAJICAgbG93ZXJpbmcgb3IgcmFpc2luZyBpdCksIHNvIHRoYXQgdGhlIGhhcmQgbGltaXQgY2FuCkBAIC0zNDI4LDcgKzMzNjgsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRzY2hlZHVsZXIocCwgcG9saWN5LCBscCk7CisJcmMgPSBjYXBfdGFza19zZXRzY2hlZHVsZXIocCwgcG9saWN5LCBscCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTM0NTEsMTAgKzMzOTEsNiBAQAogCXUzMiBwZXJtOwogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19raWxsKHAsIGluZm8sIHNpZywgc2VjaWQpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJaWYgKCFzaWcpCiAJCXBlcm0gPSBQUk9DRVNTX19TSUdOVUxMOyAvKiBudWxsIHNpZ25hbDsgZXhpc3RlbmNlIHRlc3QgKi8KIAllbHNlCkBAIC0zNDY3LDE4ICszNDAzLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3ByY3RsKGludCBvcHRpb24sCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzMsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzUpCi17Ci0JLyogVGhlIGN1cnJlbnQgcHJjdGwgb3BlcmF0aW9ucyBkbyBub3QgYXBwZWFyIHRvIHJlcXVpcmUKLQkgICBhbnkgU0VMaW51eCBjb250cm9scyBzaW5jZSB0aGV5IG1lcmVseSBvYnNlcnZlIG9yIG1vZGlmeQotCSAgIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiAqLwotCXJldHVybiBzZWNvbmRhcnlfb3BzLT50YXNrX3ByY3RsKG9wdGlvbiwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3dhaXQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiB0YXNrX2hhc19wZXJtKHAsIGN1cnJlbnQsIFBST0NFU1NfX1NJR0NITEQpOwpAQCAtNDA0NywxMCArMzk3MSw2IEBACiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCWludCBlcnI7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT51bml4X3N0cmVhbV9jb25uZWN0KHNvY2ssIG90aGVyLCBuZXdzayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQogCWlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OwogCW90aGVyX2lzZWMgPSBTT0NLX0lOT0RFKG90aGVyKS0+aV9zZWN1cml0eTsKIApAQCAtNDg0NCw3ICs0NzY0LDcgQEAKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gc2Vjb25kYXJ5X29wcy0+bmV0bGlua19zZW5kKHNrLCBza2IpOworCWVyciA9IGNhcF9uZXRsaW5rX3NlbmQoc2ssIHNrYik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNDg1OSw3ICs0Nzc5LDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAotCWVyciA9IHNlY29uZGFyeV9vcHMtPm5ldGxpbmtfcmVjdihza2IsIGNhcGFiaWxpdHkpOworCWVyciA9IGNhcF9uZXRsaW5rX3JlY3Yoc2tiLCBjYXBhYmlsaXR5KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01MTY3LDExICs1MDg3LDYgQEAKIAkJCSAgICAgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCiB7CiAJdTMyIHBlcm1zOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+c2htX3NobWF0KHNocCwgc2htYWRkciwgc2htZmxnKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChzaG1mbGcgJiBTSE1fUkRPTkxZKQogCQlwZXJtcyA9IFNITV9fUkVBRDsKQEAgLTU1ODEsNyArNTQ5Niw2IEBACiAJLm5ldGxpbmtfcmVjdiA9CQkJc2VsaW51eF9uZXRsaW5rX3JlY3YsCiAKIAkuYnBybV9zZXRfY3JlZHMgPQkJc2VsaW51eF9icHJtX3NldF9jcmVkcywKLQkuYnBybV9jaGVja19zZWN1cml0eSA9CQlzZWxpbnV4X2Jwcm1fY2hlY2tfc2VjdXJpdHksCiAJLmJwcm1fY29tbWl0dGluZ19jcmVkcyA9CXNlbGludXhfYnBybV9jb21taXR0aW5nX2NyZWRzLAogCS5icHJtX2NvbW1pdHRlZF9jcmVkcyA9CQlzZWxpbnV4X2Jwcm1fY29tbWl0dGVkX2NyZWRzLAogCS5icHJtX3NlY3VyZWV4ZWMgPQkJc2VsaW51eF9icHJtX3NlY3VyZWV4ZWMsCkBAIC01NjIzLDggKzU1MzcsNiBAQAogCS5pbm9kZV9nZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lub2RlX2dldHNlY3VyaXR5LAogCS5pbm9kZV9zZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lub2RlX3NldHNlY3VyaXR5LAogCS5pbm9kZV9saXN0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9saXN0c2VjdXJpdHksCi0JLmlub2RlX25lZWRfa2lsbHByaXYgPQkJc2VsaW51eF9pbm9kZV9uZWVkX2tpbGxwcml2LAotCS5pbm9kZV9raWxscHJpdiA9CQlzZWxpbnV4X2lub2RlX2tpbGxwcml2LAogCS5pbm9kZV9nZXRzZWNpZCA9CQlzZWxpbnV4X2lub2RlX2dldHNlY2lkLAogCiAJLmZpbGVfcGVybWlzc2lvbiA9CQlzZWxpbnV4X2ZpbGVfcGVybWlzc2lvbiwKQEAgLTU2NDQsMTcgKzU1NTYsMTIgQEAKIAkudGFza19jcmVhdGUgPQkJCXNlbGludXhfdGFza19jcmVhdGUsCiAJLmNyZWRfZnJlZSA9CQkJc2VsaW51eF9jcmVkX2ZyZWUsCiAJLmNyZWRfcHJlcGFyZSA9CQkJc2VsaW51eF9jcmVkX3ByZXBhcmUsCi0JLmNyZWRfY29tbWl0ID0JCQlzZWxpbnV4X2NyZWRfY29tbWl0LAogCS5rZXJuZWxfYWN0X2FzID0JCXNlbGludXhfa2VybmVsX2FjdF9hcywKIAkua2VybmVsX2NyZWF0ZV9maWxlc19hcyA9CXNlbGludXhfa2VybmVsX2NyZWF0ZV9maWxlc19hcywKLQkudGFza19zZXR1aWQgPQkJCXNlbGludXhfdGFza19zZXR1aWQsCi0JLnRhc2tfZml4X3NldHVpZCA9CQlzZWxpbnV4X3Rhc2tfZml4X3NldHVpZCwKLQkudGFza19zZXRnaWQgPQkJCXNlbGludXhfdGFza19zZXRnaWQsCiAJLnRhc2tfc2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX3NldHBnaWQsCiAJLnRhc2tfZ2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX2dldHBnaWQsCiAJLnRhc2tfZ2V0c2lkID0JCQlzZWxpbnV4X3Rhc2tfZ2V0c2lkLAogCS50YXNrX2dldHNlY2lkID0JCXNlbGludXhfdGFza19nZXRzZWNpZCwKLQkudGFza19zZXRncm91cHMgPQkJc2VsaW51eF90YXNrX3NldGdyb3VwcywKIAkudGFza19zZXRuaWNlID0JCQlzZWxpbnV4X3Rhc2tfc2V0bmljZSwKIAkudGFza19zZXRpb3ByaW8gPQkJc2VsaW51eF90YXNrX3NldGlvcHJpbywKIAkudGFza19nZXRpb3ByaW8gPQkJc2VsaW51eF90YXNrX2dldGlvcHJpbywKQEAgLTU2NjQsNyArNTU3MSw2IEBACiAJLnRhc2tfbW92ZW1lbW9yeSA9CQlzZWxpbnV4X3Rhc2tfbW92ZW1lbW9yeSwKIAkudGFza19raWxsID0JCQlzZWxpbnV4X3Rhc2tfa2lsbCwKIAkudGFza193YWl0ID0JCQlzZWxpbnV4X3Rhc2tfd2FpdCwKLQkudGFza19wcmN0bCA9CQkJc2VsaW51eF90YXNrX3ByY3RsLAogCS50YXNrX3RvX2lub2RlID0JCXNlbGludXhfdGFza190b19pbm9kZSwKIAogCS5pcGNfcGVybWlzc2lvbiA9CQlzZWxpbnV4X2lwY19wZXJtaXNzaW9uLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAppbmRleCBjMGM4ODU0Li4zMWRmMWQ3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaApAQCAtMjQsNiArMjQsNyBAQAogICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19FWEVDTU9ELCAiZXhlY21vZCIpCiAgICBTXyhTRUNDTEFTU19DSFJfRklMRSwgQ0hSX0ZJTEVfX09QRU4sICJvcGVuIikKICAgIFNfKFNFQ0NMQVNTX0JMS19GSUxFLCBCTEtfRklMRV9fT1BFTiwgIm9wZW4iKQorICAgU18oU0VDQ0xBU1NfU09DS19GSUxFLCBTT0NLX0ZJTEVfX09QRU4sICJvcGVuIikKICAgIFNfKFNFQ0NMQVNTX0ZJRk9fRklMRSwgRklGT19GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19GRCwgRkRfX1VTRSwgInVzZSIpCiAgICBTXyhTRUNDTEFTU19UQ1BfU09DS0VULCBUQ1BfU09DS0VUX19DT05ORUNUVE8sICJjb25uZWN0dG8iKQpAQCAtMTUyLDYgKzE1Myw3IEBACiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSwgIm5sbXNnX3JlbGF5IikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYsICJubG1zZ19yZWFkcHJpdiIpCisgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1RUWV9BVURJVCwgIm5sbXNnX3R0eV9hdWRpdCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1JFQUQsICJubG1zZ19yZWFkIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfSVA2RldfU09DS0VULCBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fTkxNU0dfV1JJVEUsICJubG1zZ193cml0ZSIpCiAgICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1NFTkRUTywgInNlbmR0byIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCmluZGV4IDBiYTc5ZmUuLmQ2NDUxOTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCkBAIC0xNzQsNiArMTc0LDcgQEAKICNkZWZpbmUgU09DS19GSUxFX19TV0FQT04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCiAjZGVmaW5lIFNPQ0tfRklMRV9fUVVPVEFPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAogI2RlZmluZSBTT0NLX0ZJTEVfX01PVU5UT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKKyNkZWZpbmUgU09DS19GSUxFX19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCiAjZGVmaW5lIEZJRk9fRklMRV9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBGSUZPX0ZJTEVfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKICNkZWZpbmUgRklGT19GSUxFX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCkBAIC03MDcsNiArNzA4LDcgQEAKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgICAgICAgMHgwMDgwMDAwMFVMCiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICAgICAgIDB4MDEwMDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYgICAgICAweDAyMDAwMDAwVUwKKyNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1RUWV9BVURJVCAgICAgMHgwNDAwMDAwMFVMCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1dSSVRFICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKaW5kZXggM2NjNDUxNi4uYzRlMDYyMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaApAQCAtNjAsOSArNjAsNyBAQAogCXUzMiBkZWZfc2lkOwkJCS8qIGRlZmF1bHQgU0lEIGZvciBsYWJlbGluZyAqLwogCXUzMiBtbnRwb2ludF9zaWQ7CQkvKiBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQgY29udGV4dCBmb3IgZmlsZXMgKi8KIAl1bnNpZ25lZCBpbnQgYmVoYXZpb3I7CQkvKiBsYWJlbGluZyBiZWhhdmlvciAqLwotCXVuc2lnbmVkIGNoYXIgaW5pdGlhbGl6ZWQ7CS8qIGluaXRpYWxpemF0aW9uIGZsYWcgKi8KIAl1bnNpZ25lZCBjaGFyIGZsYWdzOwkJLyogd2hpY2ggbW91bnQgb3B0aW9ucyB3ZXJlIHNwZWNpZmllZCAqLwotCXVuc2lnbmVkIGNoYXIgcHJvYzsJCS8qIHByb2MgZnMgKi8KIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGlzZWNfaGVhZDsKIAlzcGlubG9ja190IGlzZWNfbG9jazsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKaW5kZXggNzI0NDczNy4uNWMzNDM0ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKQEAgLTM3LDE1ICszNywyMyBAQAogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX01BWAlQT0xJQ1lEQl9WRVJTSU9OX0JPVU5EQVJZCiAjZW5kaWYKIAorLyogTWFzayBmb3IganVzdCB0aGUgbW91bnQgcmVsYXRlZCBmbGFncyAqLworI2RlZmluZSBTRV9NTlRNQVNLCTB4MGYKKy8qIFN1cGVyIGJsb2NrIHNlY3VyaXR5IHN0cnVjdCBmbGFncyBmb3IgbW91bnQgb3B0aW9ucyAqLwogI2RlZmluZSBDT05URVhUX01OVAkweDAxCiAjZGVmaW5lIEZTQ09OVEVYVF9NTlQJMHgwMgogI2RlZmluZSBST09UQ09OVEVYVF9NTlQJMHgwNAogI2RlZmluZSBERUZDT05URVhUX01OVAkweDA4CisvKiBOb24tbW91bnQgcmVsYXRlZCBmbGFncyAqLworI2RlZmluZSBTRV9TQklOSVRJQUxJWkVECTB4MTAKKyNkZWZpbmUgU0VfU0JQUk9DCQkweDIwCisjZGVmaW5lIFNFX1NCTEFCRUxTVVBQCTB4NDAKIAogI2RlZmluZSBDT05URVhUX1NUUgkiY29udGV4dD0iCiAjZGVmaW5lIEZTQ09OVEVYVF9TVFIJImZzY29udGV4dD0iCiAjZGVmaW5lIFJPT1RDT05URVhUX1NUUgkicm9vdGNvbnRleHQ9IgogI2RlZmluZSBERUZDT05URVhUX1NUUgkiZGVmY29udGV4dD0iCisjZGVmaW5lIExBQkVMU1VQUF9TVFIgInNlY2xhYmVsIgogCiBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyOwogCkBAIC04MCw3ICs4OCw2IEBACiAjZGVmaW5lIFNFTF9WRUNfTUFYIDMyCiBzdHJ1Y3QgYXZfZGVjaXNpb24gewogCXUzMiBhbGxvd2VkOwotCXUzMiBkZWNpZGVkOwogCXUzMiBhdWRpdGFsbG93OwogCXUzMiBhdWRpdGRlbnk7CiAJdTMyIHNlcW5vOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCmluZGV4IDRlZDdiYWIuLmM2ODc1ZmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXsgQVVESVRfVVNFUiwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICB9LAogCXsgQVVESVRfU0lHTkFMX0lORk8sCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICB9LAogCXsgQVVESVRfVFRZX0dFVCwJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgICAgIH0sCi0JeyBBVURJVF9UVFlfU0VULAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgfSwKKwl7IEFVRElUX1RUWV9TRVQsCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggMDFlYzZkMi4uZDNjOGI5OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC01OTUsNyArNTk1LDcgQEAKIAogCWxlbmd0aCA9IHNjbnByaW50ZihidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwKIAkJCSAgIiV4ICV4ICV4ICV4ICV1IiwKLQkJCSAgYXZkLmFsbG93ZWQsIGF2ZC5kZWNpZGVkLAorCQkJICBhdmQuYWxsb3dlZCwgMHhmZmZmZmZmZiwKIAkJCSAgYXZkLmF1ZGl0YWxsb3csIGF2ZC5hdWRpdGRlbnksCiAJCQkgIGF2ZC5zZXFubyk7CiBvdXQyOgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGM2NWU0ZmUuLmRlZWVjNmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTQwNyw3ICs0MDcsNiBAQAogCSAqIEluaXRpYWxpemUgdGhlIGFjY2VzcyB2ZWN0b3JzIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4KIAkgKi8KIAlhdmQtPmFsbG93ZWQgPSAwOwotCWF2ZC0+ZGVjaWRlZCA9IDB4ZmZmZmZmZmY7CiAJYXZkLT5hdWRpdGFsbG93ID0gMDsKIAlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CiAJYXZkLT5zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKQEAgLTc0Myw3ICs3NDIsNiBAQAogCiAJaWYgKCFzc19pbml0aWFsaXplZCkgewogCQlhdmQtPmFsbG93ZWQgPSAweGZmZmZmZmZmOwotCQlhdmQtPmRlY2lkZWQgPSAweGZmZmZmZmZmOwogCQlhdmQtPmF1ZGl0YWxsb3cgPSAwOwogCQlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CiAJCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCmluZGV4IDJlMGI4M2UuLmNmYTE5Y2EgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCkBAIC0xNjIsOCArMTYyLDggQEAKIAogLyoqCiAgKiBzbWtfY3VyYWNjIC0gZGV0ZXJtaW5lIGlmIGN1cnJlbnQgaGFzIGEgc3BlY2lmaWMgYWNjZXNzIHRvIGFuIG9iamVjdAotICogQG9iamVjdF9sYWJlbDogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QncyBTbWFjayBsYWJlbAotICogQHJlcXVlc3Q6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkLCBpbiAiTUFZIiBmb3JtYXQKKyAqIEBvYmpfbGFiZWw6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0J3MgU21hY2sgbGFiZWwKKyAqIEBtb2RlOiB0aGUgYWNjZXNzIHJlcXVlc3RlZCwgaW4gIk1BWSIgZm9ybWF0CiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGN1cnJlbnQgc3ViamVjdCBsYWJlbC9vYmplY3QgbGFiZWwgcGFpcgogICogaW4gdGhlIGFjY2VzcyBydWxlIGxpc3QgYW5kIHJldHVybnMgMCBpZiB0aGUgYWNjZXNzIGlzIHBlcm1pdHRlZCwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggZTdkZWQxMy4uODRiNjJiNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTkxLDYgKzkxLDcgQEAKIC8qKgogICogc21hY2tfcHRyYWNlX21heV9hY2Nlc3MgLSBTbWFjayBhcHByb3ZhbCBvbiBQVFJBQ0VfQVRUQUNICiAgKiBAY3RwOiBjaGlsZCB0YXNrIHBvaW50ZXIKKyAqIEBtb2RlOiBwdHJhY2UgYXR0YWNobWVudCBtb2RlCiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBPSywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqCkBAIC0yMDMsOSArMjA0LDggQEAKIAogLyoqCiAgKiBzbWFja19zYl9jb3B5X2RhdGEgLSBjb3B5IG1vdW50IG9wdGlvbnMgZGF0YSBmb3IgcHJvY2Vzc2luZwotICogQHR5cGU6IGZpbGUgc3lzdGVtIHR5cGUKICAqIEBvcmlnOiB3aGVyZSB0byBzdGFydAotICogQHNtYWNrb3B0cworICogQHNtYWNrb3B0czogbW91bnQgb3B0aW9ucyBzdHJpbmcKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIG9uIGVycm9yLgogICoKQEAgLTMzMSw3ICszMzEsNyBAQAogLyoqCiAgKiBzbWFja19zYl9tb3VudCAtIFNtYWNrIGNoZWNrIGZvciBtb3VudGluZwogICogQGRldl9uYW1lOiB1bnVzZWQKLSAqIEBuZDogbW91bnQgcG9pbnQKKyAqIEBwYXRoOiBtb3VudCBwb2ludAogICogQHR5cGU6IHVudXNlZAogICogQGZsYWdzOiB1bnVzZWQKICAqIEBkYXRhOiB1bnVzZWQKQEAgLTM3MCw3ICszNzAsNyBAQAogCiAvKioKICAqIHNtYWNrX2lub2RlX2FsbG9jX3NlY3VyaXR5IC0gYWxsb2NhdGUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIGluIG5lZWQgb2YgYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBuZWVkIG9mIGEgYmxvYgogICoKICAqIFJldHVybnMgMCBpZiBpdCBnZXRzIGEgYmxvYiwgLUVOT01FTSBvdGhlcndpc2UKICAqLwpAQCAtMzg0LDcgKzM4NCw3IEBACiAKIC8qKgogICogc21hY2tfaW5vZGVfZnJlZV9zZWN1cml0eSAtIGZyZWUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIHdpdGggYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSB3aXRoIGEgYmxvYgogICoKICAqIENsZWFycyB0aGUgYmxvYiBwb2ludGVyIGluIGlub2RlCiAgKi8KQEAgLTUzOCw3ICs1MzgsNiBAQAogICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCi0gKiBAbmQ6IHVudXNlZAogICoKICAqIFRoaXMgaXMgdGhlIGltcG9ydGFudCBTbWFjayBob29rLgogICoKQEAgLTcwMSw4ICs3MDAsNyBAQAogICogQGlub2RlOiB0aGUgb2JqZWN0CiAgKiBAbmFtZTogYXR0cmlidXRlIG5hbWUKICAqIEBidWZmZXI6IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0Ci0gKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYnVmZmVyCi0gKiBAZXJyOiB1bnVzZWQKKyAqIEBhbGxvYzogdW51c2VkCiAgKgogICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIG9yIGFuIGVycm9yIGNvZGUKICAqLwpAQCAtODY0LDcgKzg2Miw3IEBACiAvKioKICAqIHNtYWNrX2ZpbGVfbG9jayAtIFNtYWNrIGNoZWNrIG9uIGZpbGUgbG9ja2luZwogICogQGZpbGU6IHRoZSBvYmplY3QKLSAqIEBjbWQgdW51c2VkCisgKiBAY21kOiB1bnVzZWQKICAqCiAgKiBSZXR1cm5zIDAgaWYgY3VycmVudCBoYXMgd3JpdGUgYWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCkBAIC0xMDAzLDggKzEwMDEsOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogY29tbWl0IG5ldyBjcmVkZW50aWFscworLyoqCisgKiBzbWFja19jcmVkX2NvbW1pdCAtIGNvbW1pdCBuZXcgY3JlZGVudGlhbHMKICAqIEBuZXc6IHRoZSBuZXcgY3JlZGVudGlhbHMKICAqIEBvbGQ6IHRoZSBvcmlnaW5hbCBjcmVkZW50aWFscwogICovCkBAIC0xMDE0LDggKzEwMTIsOCBAQAogCiAvKioKICAqIHNtYWNrX2tlcm5lbF9hY3RfYXMgLSBTZXQgdGhlIHN1YmplY3RpdmUgY29udGV4dCBpbiBhIHNldCBvZiBjcmVkZW50aWFscwotICogQG5ldyBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZC4KLSAqIEBzZWNpZCBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5IElEIHRvIGJlIHNldAorICogQG5ldzogcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQuCisgKiBAc2VjaWQ6IHNwZWNpZmllcyB0aGUgc2VjdXJpdHkgSUQgdG8gYmUgc2V0CiAgKgogICogU2V0IHRoZSBzZWN1cml0eSBkYXRhIGZvciBhIGtlcm5lbCBzZXJ2aWNlLgogICovCkBAIC0xMDMyLDggKzEwMzAsOCBAQAogCiAvKioKICAqIHNtYWNrX2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMgLSBTZXQgdGhlIGZpbGUgY3JlYXRpb24gbGFiZWwgaW4gYSBzZXQgb2YgY3JlZHMKLSAqIEBuZXcgcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQKLSAqIEBpbm9kZSBwb2ludHMgdG8gdGhlIGlub2RlIHRvIHVzZSBhcyBhIHJlZmVyZW5jZQorICogQG5ldzogcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQKKyAqIEBpbm9kZTogcG9pbnRzIHRvIHRoZSBpbm9kZSB0byB1c2UgYXMgYSByZWZlcmVuY2UKICAqCiAgKiBTZXQgdGhlIGZpbGUgY3JlYXRpb24gY29udGV4dCBpbiBhIHNldCBvZiBjcmVkZW50aWFscyB0byB0aGUgc2FtZQogICogYXMgdGhlIG9iamVjdGl2ZSBjb250ZXh0IG9mIHRoZSBzcGVjaWZpZWQgaW5vZGUKQEAgLTEyNDIsNyArMTI0MCw3IEBACiAvKioKICAqIHNtYWNrX3Rhc2tfdG9faW5vZGUgLSBjb3B5IHRhc2sgc21hY2sgaW50byB0aGUgaW5vZGUgYmxvYgogICogQHA6IHRhc2sgdG8gY29weSBmcm9tCi0gKiBpbm9kZTogaW5vZGUgdG8gY29weSB0bworICogQGlub2RlOiBpbm9kZSB0byBjb3B5IHRvCiAgKgogICogU2V0cyB0aGUgc21hY2sgcG9pbnRlciBpbiB0aGUgaW5vZGUgc2VjdXJpdHkgYmxvYgogICovCkBAIC0xMjYwLDcgKzEyNTgsNyBAQAogICogc21hY2tfc2tfYWxsb2Nfc2VjdXJpdHkgLSBBbGxvY2F0ZSBhIHNvY2tldCBibG9iCiAgKiBAc2s6IHRoZSBzb2NrZXQKICAqIEBmYW1pbHk6IHVudXNlZAotICogQHByaW9yaXR5OiBtZW1vcnkgYWxsb2NhdGlvbiBwcmlvcml0eQorICogQGdmcF9mbGFnczogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBBc3NpZ24gU21hY2sgcG9pbnRlcnMgdG8gY3VycmVudAogICoKQEAgLTE5NzQsNyArMTk3Miw3IEBACiAKIC8qKgogICogc21hY2tfaXBjX2dldHNlY2lkIC0gRXh0cmFjdCBzbWFjayBzZWN1cml0eSBpZAotICogQGlwY3A6IHRoZSBvYmplY3QgcGVybWlzc2lvbnMKKyAqIEBpcHA6IHRoZSBvYmplY3QgcGVybWlzc2lvbnMKICAqIEBzZWNpZDogd2hlcmUgcmVzdWx0IHdpbGwgYmUgc2F2ZWQKICAqLwogc3RhdGljIHZvaWQgc21hY2tfaXBjX2dldHNlY2lkKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcHAsIHUzMiAqc2VjaWQpCkBAIC0yMjUxLDcgKzIyNDksNyBAQAogLyoqCiAgKiBzbWFja19zb2NrZXRfc2VuZG1zZyAtIFNtYWNrIGNoZWNrIGJhc2VkIG9uIGRlc3RpbmF0aW9uIGhvc3QKICAqIEBzb2NrOiB0aGUgc29ja2V0Ci0gKiBAbXNnaGRyOiB0aGUgbWVzc2FnZQorICogQG1zZzogdGhlIG1lc3NhZ2UKICAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZQogICoKICAqIFJldHVybiAwIGlmIHRoZSBjdXJyZW50IHN1YmplY3QgY2FuIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbgpAQCAtMjI5Miw4ICsyMjkwLDcgQEAKIAogCiAvKioKLSAqIHNtYWNrX2Zyb21fc2VjYXR0ciAtIENvbnZlcnQgYSBuZXRsYWJlbCBhdHRyLm1scy5sdmwvYXR0ci5tbHMuY2F0Ci0gKiAJcGFpciB0byBzbWFjaworICogc21hY2tfZnJvbV9zZWNhdHRyIC0gQ29udmVydCBhIG5ldGxhYmVsIGF0dHIubWxzLmx2bC9hdHRyLm1scy5jYXQgcGFpciB0byBzbWFjawogICogQHNhcDogbmV0bGFiZWwgc2VjYXR0cgogICogQHNpcDogd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQKICAqCkBAIC0yNDE0LDcgKzI0MTEsNyBAQAogICogQHNvY2s6IHRoZSBzb2NrZXQKICAqIEBvcHR2YWw6IHVzZXIncyBkZXN0aW5hdGlvbgogICogQG9wdGxlbjogc2l6ZSB0aGVyZW9mCi0gKiBAbGVuOiBtYXggdGhlcmVvZQorICogQGxlbjogbWF4IHRoZXJlb2YKICAqCiAgKiByZXR1cm5zIHplcm8gb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwpAQCAtMjc0OSw3ICsyNzQ2LDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwogCi0vKgorLyoqCiAgKiBzbWFja19zZWNpZF90b19zZWNjdHggLSByZXR1cm4gdGhlIHNtYWNrIGxhYmVsIGZvciBhIHNlY2lkCiAgKiBAc2VjaWQ6IGluY29taW5nIGludGVnZXIKICAqIEBzZWNkYXRhOiBkZXN0aW5hdGlvbgpAQCAtMjc2Niw3ICsyNzYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKKy8qKgogICogc21hY2tfc2VjY3R4X3RvX3NlY2lkIC0gcmV0dXJuIHRoZSBzZWNpZCBmb3IgYSBzbWFjayBsYWJlbAogICogQHNlY2RhdGE6IHNtYWNrIGxhYmVsCiAgKiBAc2VjbGVuOiBob3cgbG9uZyByZXN1bHQgaXMKQEAgLTI3ODAsMTEgKzI3NzcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKKy8qKgogICogc21hY2tfcmVsZWFzZV9zZWNjdHggLSBkb24ndCBkbyBhbnl0aGluZy4KLSAqIEBrZXlfcmVmOiB1bnVzZWQKLSAqIEBjb250ZXh0OiB1bnVzZWQKLSAqIEBwZXJtOiB1bnVzZWQKKyAqIEBzZWNkYXRhOiB1bnVzZWQKKyAqIEBzZWNsZW46IHVudXNlZAogICoKICAqIEV4aXN0cyB0byBtYWtlIHN1cmUgbm90aGluZyBnZXRzIGRvbmUsIGFuZCBwcm9wZXJseQogICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKaW5kZXggNTFmMGVmYy4uYTFiNTdlNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2xvYWQgLSB3cml0ZSgpIGZvciAvc21hY2svbG9hZAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQgLSBtdXN0IGJlIDAKQEAgLTQwMiw2ICs0MDIsNyBAQAogCiAvKioKICAqIHNta191bmxibF9hbWJpZW50IC0gaW5pdGlhbGl6ZSB0aGUgdW5sYWJlbGVkIGRvbWFpbgorICogQG9sZGFtYmllbnQ6IHByZXZpb3VzIGRvbWFpbiBzdHJpbmcKICAqLwogc3RhdGljIHZvaWQgc21rX3VubGJsX2FtYmllbnQoY2hhciAqb2xkYW1iaWVudCkKIHsKQEAgLTUxMyw3ICs1MTQsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9jaXBzbyAtIHdyaXRlKCkgZm9yIC9zbWFjay9jaXBzbwotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTczMyw3ICs3MzQsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9uZXRsYmxhZGRyIC0gd3JpdGUoKSBmb3IgL3NtYWNrL25ldGxhYmVsCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtODg0LDcgKzg4NSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2RvaSAtIHdyaXRlKCkgZm9yIC9zbWFjay9kb2kKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC05NDksNyArOTUwLDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfZGlyZWN0IC0gd3JpdGUoKSBmb3IgL3NtYWNrL2RpcmVjdAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTEwMjQsNyArMTAyNSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2FtYmllbnQgLSB3cml0ZSgpIGZvciAvc21hY2svYW1iaWVudAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTEwOTksNyArMTEwMCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX29ubHljYXAgLSB3cml0ZSgpIGZvciAvc21hY2svb25seWNhcAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9LY29uZmlnIGIvc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmMzg1NwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBTRUNVUklUWV9UT01PWU8KKwlib29sICJUT01PWU8gTGludXggU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFQ1VSSVRZCisJc2VsZWN0IFNFQ1VSSVRZRlMKKwlzZWxlY3QgU0VDVVJJVFlfUEFUSAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBUT01PWU8gTGludXgsIHBhdGhuYW1lLWJhc2VkIGFjY2VzcyBjb250cm9sLgorCSAgUmVxdWlyZWQgdXNlcnNwYWNlIHRvb2xzIGFuZCBmdXJ0aGVyIGluZm9ybWF0aW9uIG1heSBiZQorCSAgZm91bmQgYXQgPGh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvPi4KKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vTWFrZWZpbGUgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjY2Q2OAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSA9IGNvbW1vbi5vIHJlYWxwYXRoLm8gdG9tb3lvLm8gZG9tYWluLm8gZmlsZS5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjZWE2NQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpAQCAtMCwwICsxLDIyMDYgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vY29tbW9uLmMKKyAqCisgKiBDb21tb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisKKy8qIEhhcyBsb2FkaW5nIHBvbGljeSBkb25lPyAqLworYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKworLyogU3RyaW5nIHRhYmxlIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgdGFrZXMgNCBtb2Rlcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbW9kZV80WzRdID0geworCSJkaXNhYmxlZCIsICJsZWFybmluZyIsICJwZXJtaXNzaXZlIiwgImVuZm9yY2luZyIKK307CisvKiBTdHJpbmcgdGFibGUgZm9yIGZ1bmN0aW9uYWxpdHkgdGhhdCB0YWtlcyAyIG1vZGVzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19tb2RlXzJbNF0gPSB7CisJImRpc2FibGVkIiwgImVuYWJsZWQiLCAiZW5hYmxlZCIsICJlbmFibGVkIgorfTsKKworLyogVGFibGUgZm9yIHByb2ZpbGUuICovCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICprZXl3b3JkOworCXVuc2lnbmVkIGludCBjdXJyZW50X3ZhbHVlOworCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfdmFsdWU7Cit9IHRvbW95b19jb250cm9sX2FycmF5W1RPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWF0gPSB7CisJW1RPTU9ZT19NQUNfRk9SX0ZJTEVdICAgICA9IHsgIk1BQ19GT1JfRklMRSIsICAgICAgICAwLCAgICAgICAzIH0sCisJW1RPTU9ZT19NQVhfQUNDRVBUX0VOVFJZXSA9IHsgIk1BWF9BQ0NFUFRfRU5UUlkiLCAyMDQ4LCBJTlRfTUFYIH0sCisJW1RPTU9ZT19WRVJCT1NFXSAgICAgICAgICA9IHsgIlRPTU9ZT19WRVJCT1NFIiwgICAgICAxLCAgICAgICAxIH0sCit9OworCisvKiBQcm9maWxlIHRhYmxlLiBNZW1vcnkgaXMgYWxsb2NhdGVkIGFzIG5lZWRlZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgeworCXVuc2lnbmVkIGludCB2YWx1ZVtUT01PWU9fTUFYX0NPTlRST0xfSU5ERVhdOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpjb21tZW50OworfSAqdG9tb3lvX3Byb2ZpbGVfcHRyW1RPTU9ZT19NQVhfUFJPRklMRVNdOworCisvKiBQZXJtaXQgcG9saWN5IG1hbmFnZW1lbnQgYnkgbm9uLXJvb3QgdXNlcj8gKi8KK3N0YXRpYyBib29sIHRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3Q7CisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zLiAqLworCisvKiBPcGVuIG9wZXJhdGlvbiBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuX2NvbnRyb2woY29uc3QgdTggdHlwZSwgc3RydWN0IGZpbGUgKmZpbGUpOworLyogQ2xvc2UgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19jbG9zZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlKTsKKy8qIFJlYWQgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbik7CisvKiBXcml0ZSBvcGVyYXRpb24gZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQljb25zdCBpbnQgYnVmZmVyX2xlbik7CisKKy8qKgorICogdG9tb3lvX2lzX2J5dGVfcmFuZ2UgLSBDaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgaXNhIFxvb28gc3R5bGUgb2N0YWwgdmFsdWUuCisgKgorICogQHN0cjogUG9pbnRlciB0byB0aGUgc3RyaW5nLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAc3RyIGlzIGEgXG9vbyBzdHlsZSBvY3RhbCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRPTU9ZTyB1c2VzIFxvb28gc3R5bGUgcmVwcmVzZW50YXRpb24gZm9yIDB4MDEgLSAweDIwIGFuZCAweDdGIC0gMHhGRi4KKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCBcb29vIGlzIGluIHZhbGlkIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2J5dGVfcmFuZ2UoY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiAqc3RyID49ICcwJyAmJiAqc3RyKysgPD0gJzMnICYmCisJCSpzdHIgPj0gJzAnICYmICpzdHIrKyA8PSAnNycgJiYKKwkJKnN0ciA+PSAnMCcgJiYgKnN0ciA8PSAnNyc7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYW4gYWxwaGFiZXQuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGFuIGFscGhhYmV0IGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoY29uc3QgY2hhciBjKQoreworCXJldHVybiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6Jyk7Cit9CisKKy8qKgorICogdG9tb3lvX21ha2VfYnl0ZSAtIE1ha2UgYnl0ZSB2YWx1ZSBmcm9tIHRocmVlIG9jdGFsIGNoYXJhY3RlcnMuCisgKgorICogQGMxOiBUaGUgZmlyc3QgY2hhcmFjdGVyLgorICogQGMyOiBUaGUgc2Vjb25kIGNoYXJhY3Rlci4KKyAqIEBjMzogVGhlIHRoaXJkIGNoYXJhY3Rlci4KKyAqCisgKiBSZXR1cm5zIGJ5dGUgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggdG9tb3lvX21ha2VfYnl0ZShjb25zdCB1OCBjMSwgY29uc3QgdTggYzIsIGNvbnN0IHU4IGMzKQoreworCXJldHVybiAoKGMxIC0gJzAnKSA8PCA2KSArICgoYzIgLSAnMCcpIDw8IDMpICsgKGMzIC0gJzAnKTsKK30KKworLyoqCisgKiB0b21veW9fc3RyX3N0YXJ0cyAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4ga2V5d29yZC4KKyAqCisgKiBAc3JjOiAgUG9pbnRlciB0byBwb2ludGVyIHRvIHRoZSBzdHJpbmcuCisgKiBAZmluZDogUG9pbnRlciB0byB0aGUga2V5d29yZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQHNyYyBzdGFydHMgd2l0aCBAZmluZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBAc3JjIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgQGZpbmQKKyAqIGlmIEBzcmMgc3RhcnRzIHdpdGggQGZpbmQuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19zdHJfc3RhcnRzKGNoYXIgKipzcmMsIGNvbnN0IGNoYXIgKmZpbmQpCit7CisJY29uc3QgaW50IGxlbiA9IHN0cmxlbihmaW5kKTsKKwljaGFyICp0bXAgPSAqc3JjOworCisJaWYgKHN0cm5jbXAodG1wLCBmaW5kLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisJdG1wICs9IGxlbjsKKwkqc3JjID0gdG1wOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19ub3JtYWxpemVfbGluZSAtIEZvcm1hdCBzdHJpbmcuCisgKgorICogQGJ1ZmZlcjogVGhlIGxpbmUgdG8gbm9ybWFsaXplLgorICoKKyAqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFyZSByZW1vdmVkLgorICogTXVsdGlwbGUgd2hpdGVzcGFjZXMgYXJlIHBhY2tlZCBpbnRvIHNpbmdsZSBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHRvbW95b19ub3JtYWxpemVfbGluZSh1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciAqc3AgPSBidWZmZXI7CisJdW5zaWduZWQgY2hhciAqZHAgPSBidWZmZXI7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwl3aGlsZSAodG9tb3lvX2lzX2ludmFsaWQoKnNwKSkKKwkJc3ArKzsKKwl3aGlsZSAoKnNwKSB7CisJCWlmICghZmlyc3QpCisJCQkqZHArKyA9ICcgJzsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJd2hpbGUgKHRvbW95b19pc192YWxpZCgqc3ApKQorCQkJKmRwKysgPSAqc3ArKzsKKwkJd2hpbGUgKHRvbW95b19pc19pbnZhbGlkKCpzcCkpCisJCQlzcCsrOworCX0KKwkqZHAgPSAnXDAnOworfQorCisvKioKKyAqIHRvbW95b19pc19jb3JyZWN0X3BhdGggLSBWYWxpZGF0ZSBhIHBhdGhuYW1lLgorICogQGZpbGVuYW1lOiAgICAgVGhlIHBhdGhuYW1lIHRvIGNoZWNrLgorICogQHN0YXJ0X3R5cGU6ICAgU2hvdWxkIHRoZSBwYXRobmFtZSBzdGFydCB3aXRoICcvJz8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAcGF0dGVybl90eXBlOiBDYW4gdGhlIHBhdGhuYW1lIGNvbnRhaW4gYSB3aWxkY2FyZD8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAZW5kX3R5cGU6ICAgICBTaG91bGQgdGhlIHBhdGhuYW1lIGVuZCB3aXRoICcvJz8KKyAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCisgKiBAZnVuY3Rpb246ICAgICBUaGUgbmFtZSBvZiBmdW5jdGlvbiBjYWxsaW5nIG1lLgorICoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgczggc3RhcnRfdHlwZSwKKwkJCSAgICBjb25zdCBzOCBwYXR0ZXJuX3R5cGUsIGNvbnN0IHM4IGVuZF90eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCWJvb2wgY29udGFpbnNfcGF0dGVybiA9IGZhbHNlOworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBjaGFyIGQ7CisJdW5zaWduZWQgY2hhciBlOworCWNvbnN0IGNoYXIgKm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZW5hbWU7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlnb3RvIG91dDsKKwljID0gKmZpbGVuYW1lOworCWlmIChzdGFydF90eXBlID09IDEpIHsgLyogTXVzdCBzdGFydCB3aXRoICcvJyAqLworCQlpZiAoYyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHN0YXJ0X3R5cGUgPT0gLTEpIHsgLyogTXVzdCBub3Qgc3RhcnQgd2l0aCAnLycgKi8KKwkJaWYgKGMgPT0gJy8nKQorCQkJZ290byBvdXQ7CisJfQorCWlmIChjKQorCQljID0gKihmaWxlbmFtZSArIHN0cmxlbihmaWxlbmFtZSkgLSAxKTsKKwlpZiAoZW5kX3R5cGUgPT0gMSkgeyAvKiBNdXN0IGVuZCB3aXRoICcvJyAqLworCQlpZiAoYyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGVuZF90eXBlID09IC0xKSB7IC8qIE11c3Qgbm90IGVuZCB3aXRoICcvJyAqLworCQlpZiAoYyA9PSAnLycpCisJCQlnb3RvIG91dDsKKwl9CisJd2hpbGUgKChjID0gKmZpbGVuYW1lKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgPT0gJ1xcJykgeworCQkJc3dpdGNoICgoYyA9ICpmaWxlbmFtZSsrKSkgeworCQkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnJCc6ICAgLyogIlwkIiAqLworCQkJY2FzZSAnKyc6ICAgLyogIlwrIiAqLworCQkJY2FzZSAnPyc6ICAgLyogIlw/IiAqLworCQkJY2FzZSAnKic6ICAgLyogIlwqIiAqLworCQkJY2FzZSAnQCc6ICAgLyogIlxAIiAqLworCQkJY2FzZSAneCc6ICAgLyogIlx4IiAqLworCQkJY2FzZSAnWCc6ICAgLyogIlxYIiAqLworCQkJY2FzZSAnYSc6ICAgLyogIlxhIiAqLworCQkJY2FzZSAnQSc6ICAgLyogIlxBIiAqLworCQkJY2FzZSAnLSc6ICAgLyogIlwtIiAqLworCQkJCWlmIChwYXR0ZXJuX3R5cGUgPT0gLTEpCisJCQkJCWJyZWFrOyAvKiBNdXN0IG5vdCBjb250YWluIHBhdHRlcm4gKi8KKwkJCQljb250YWluc19wYXR0ZXJuID0gdHJ1ZTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLworCQkJY2FzZSAnMSc6CisJCQljYXNlICcyJzoKKwkJCWNhc2UgJzMnOgorCQkJCWQgPSAqZmlsZW5hbWUrKzsKKwkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQorCQkJCQlicmVhazsKKwkJCQllID0gKmZpbGVuYW1lKys7CisJCQkJaWYgKGUgPCAnMCcgfHwgZSA+ICc3JykKKwkJCQkJYnJlYWs7CisJCQkJYyA9IHRvbW95b19tYWtlX2J5dGUoYywgZCwgZSk7CisJCQkJaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKQorCQkJCQljb250aW51ZTsgLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLworCQkJfQorCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpIHsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWlmIChwYXR0ZXJuX3R5cGUgPT0gMSkgeyAvKiBNdXN0IGNvbnRhaW4gcGF0dGVybiAqLworCQlpZiAoIWNvbnRhaW5zX3BhdHRlcm4pCisJCQlnb3RvIG91dDsKKwl9CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBwYXRobmFtZSAnJXMnXG4iLCBmdW5jdGlvbiwKKwkgICAgICAgb3JpZ2luYWxfZmlsZW5hbWUpOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9faXNfY29ycmVjdF9kb21haW4gLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBkb21haW5uYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcy4KKyAqIEBkb21haW5uYW1lOiAgIFRoZSBkb21haW5uYW1lIHRvIGNoZWNrLgorICogQGZ1bmN0aW9uOiAgICAgVGhlIG5hbWUgb2YgZnVuY3Rpb24gY2FsbGluZyBtZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGRvbWFpbm5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgY2hhciBkOworCXVuc2lnbmVkIGNoYXIgZTsKKwljb25zdCBjaGFyICpvcmdfZG9tYWlubmFtZSA9IGRvbWFpbm5hbWU7CisKKwlpZiAoIWRvbWFpbm5hbWUgfHwgc3RybmNtcChkb21haW5uYW1lLCBUT01PWU9fUk9PVF9OQU1FLAorCQkJCSAgIFRPTU9ZT19ST09UX05BTUVfTEVOKSkKKwkJZ290byBvdXQ7CisJZG9tYWlubmFtZSArPSBUT01PWU9fUk9PVF9OQU1FX0xFTjsKKwlpZiAoISpkb21haW5uYW1lKQorCQlyZXR1cm4gdHJ1ZTsKKwlkbyB7CisJCWlmICgqZG9tYWlubmFtZSsrICE9ICcgJykKKwkJCWdvdG8gb3V0OworCQlpZiAoKmRvbWFpbm5hbWUrKyAhPSAnLycpCisJCQlnb3RvIG91dDsKKwkJd2hpbGUgKChjID0gKmRvbWFpbm5hbWUpICE9ICdcMCcgJiYgYyAhPSAnICcpIHsKKwkJCWRvbWFpbm5hbWUrKzsKKwkJCWlmIChjID09ICdcXCcpIHsKKwkJCQljID0gKmRvbWFpbm5hbWUrKzsKKwkJCQlzd2l0Y2ggKChjKSkgeworCQkJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KKwkJCQkJY29udGludWU7CisJCQkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCisJCQkJY2FzZSAnMSc6CisJCQkJY2FzZSAnMic6CisJCQkJY2FzZSAnMyc6CisJCQkJCWQgPSAqZG9tYWlubmFtZSsrOworCQkJCQlpZiAoZCA8ICcwJyB8fCBkID4gJzcnKQorCQkJCQkJYnJlYWs7CisJCQkJCWUgPSAqZG9tYWlubmFtZSsrOworCQkJCQlpZiAoZSA8ICcwJyB8fCBlID4gJzcnKQorCQkJCQkJYnJlYWs7CisJCQkJCWMgPSB0b21veW9fbWFrZV9ieXRlKGMsIGQsIGUpOworCQkJCQlpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpCisJCQkJCQkvKiBwYXR0ZXJuIGlzIG5vdCBcMDAwICovCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UgaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKSB7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9IHdoaWxlICgqZG9tYWlubmFtZSk7CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBkb21haW5uYW1lICclcydcbiIsIGZ1bmN0aW9uLAorCSAgICAgICBvcmdfZG9tYWlubmFtZSk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19pc19kb21haW5fZGVmIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4KKyAqCisgKiBAYnVmZmVyOiBUaGUgdG9rZW4gdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBidWZmZXIgcG9zc2libHkgYmUgYSBkb21haW5uYW1lLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX2lzX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXJldHVybiAhc3RybmNtcChidWZmZXIsIFRPTU9ZT19ST09UX05BTUUsIFRPTU9ZT19ST09UX05BTUVfTEVOKTsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9kb21haW4gLSBGaW5kIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgZG9tYWlubmFtZSB0byBmaW5kLgorICoKKyAqIENhbGxlciBtdXN0IGNhbGwgZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IG9yCisgKiBkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisKKwluYW1lLm5hbWUgPSBkb21haW5uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQgJiYKKwkJICAgICF0b21veW9fcGF0aGNtcCgmbmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKKwkJCXJldHVybiBkb21haW47CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19wYXRoX2RlcHRoIC0gRXZhbHVhdGUgdGhlIG51bWJlciBvZiAnLycgaW4gYSBzdHJpbmcuCisgKgorICogQHBhdGhuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICoKKyAqIFJldHVybnMgcGF0aCBkZXB0aCBvZiB0aGUgc3RyaW5nLgorICoKKyAqIEkgc2NvcmUgMiBmb3IgZWFjaCBvZiB0aGUgJy8nIGluIHRoZSBAcGF0aG5hbWUKKyAqIGFuZCBzY29yZSAxIGlmIHRoZSBAcGF0aG5hbWUgZW5kcyB3aXRoICcvJy4KKyAqLworc3RhdGljIGludCB0b21veW9fcGF0aF9kZXB0aChjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgaSA9IDA7CisKKwlpZiAocGF0aG5hbWUpIHsKKwkJY29uc3QgY2hhciAqZXAgPSBwYXRobmFtZSArIHN0cmxlbihwYXRobmFtZSk7CisJCWlmIChwYXRobmFtZSA8IGVwLS0pIHsKKwkJCWlmICgqZXAgIT0gJy8nKQorCQkJCWkrKzsKKwkJCXdoaWxlIChwYXRobmFtZSA8PSBlcCkKKwkJCQlpZiAoKmVwLS0gPT0gJy8nKQorCQkJCQlpICs9IDI7CisJCX0KKwl9CisJcmV0dXJuIGk7Cit9CisKKy8qKgorICogdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoIC0gRXZhbHVhdGUgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIGEgdG9rZW4uCisgKgorICogQGZpbGVuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICoKKyAqIFJldHVybnMgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIEBmaWxlbmFtZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY29uc3RfcGFydF9sZW5ndGgoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciBjOworCWludCBsZW4gPSAwOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKChjID0gKmZpbGVuYW1lKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgIT0gJ1xcJykgeworCQkJbGVuKys7CisJCQljb250aW51ZTsKKwkJfQorCQljID0gKmZpbGVuYW1lKys7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQlsZW4gKz0gMjsKKwkJCWNvbnRpbnVlOworCQljYXNlICcwJzogICAvKiAiXG9vbyIgKi8KKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJCWMgPSAqZmlsZW5hbWUrKzsKKwkJCWlmIChjIDwgJzAnIHx8IGMgPiAnNycpCisJCQkJYnJlYWs7CisJCQljID0gKmZpbGVuYW1lKys7CisJCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJCWJyZWFrOworCQkJbGVuICs9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0b21veW9fZmlsbF9wYXRoX2luZm8gLSBGaWxsIGluICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgbWVtYmVycy4KKyAqCisgKiBAcHRyOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgdG8gZmlsbCBpbi4KKyAqCisgKiBUaGUgY2FsbGVyIHNldHMgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIi0+bmFtZS4KKyAqLwordm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cikKK3sKKwljb25zdCBjaGFyICpuYW1lID0gcHRyLT5uYW1lOworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlwdHItPnRvdGFsX2xlbiA9IGxlbjsKKwlwdHItPmNvbnN0X2xlbiA9IHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aChuYW1lKTsKKwlwdHItPmlzX2RpciA9IGxlbiAmJiAobmFtZVtsZW4gLSAxXSA9PSAnLycpOworCXB0ci0+aXNfcGF0dGVybmVkID0gKHB0ci0+Y29uc3RfbGVuIDwgbGVuKTsKKwlwdHItPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLCBsZW4pOworCXB0ci0+ZGVwdGggPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKTsKK30KKworLyoqCisgKiB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yIC0gUGF0dGVybiBtYXRjaGluZyB3aXRob3V0ICcvJyBjaGFyYWN0ZXIKKyAqIGFuZCAiXC0iIHBhdHRlcm4uCisgKgorICogQGZpbGVuYW1lOiAgICAgVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBmaWxlbmFtZV9lbmQ6IFRoZSBlbmQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICAgICAgVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqIEBwYXR0ZXJuX2VuZDogIFRoZSBlbmQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWVfZW5kLAorCQkJCQkgICAgY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdHRlcm5fZW5kKQoreworCXdoaWxlIChmaWxlbmFtZSA8IGZpbGVuYW1lX2VuZCAmJiBwYXR0ZXJuIDwgcGF0dGVybl9lbmQpIHsKKwkJY2hhciBjOworCQlpZiAoKnBhdHRlcm4gIT0gJ1xcJykgeworCQkJaWYgKCpmaWxlbmFtZSsrICE9ICpwYXR0ZXJuKyspCisJCQkJcmV0dXJuIGZhbHNlOworCQkJY29udGludWU7CisJCX0KKwkJYyA9ICpmaWxlbmFtZTsKKwkJcGF0dGVybisrOworCQlzd2l0Y2ggKCpwYXR0ZXJuKSB7CisJCQlpbnQgaTsKKwkJCWludCBqOworCQljYXNlICc/JzoKKwkJCWlmIChjID09ICcvJykgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7CisJCQkJaWYgKGZpbGVuYW1lWzFdID09ICdcXCcpCisJCQkJCWZpbGVuYW1lKys7CisJCQkJZWxzZSBpZiAodG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyAxKSkKKwkJCQkJZmlsZW5hbWUgKz0gMzsKKwkJCQllbHNlCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdcXCc6CisJCQlpZiAoYyAhPSAnXFwnKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWlmICgqKytmaWxlbmFtZSAhPSAnXFwnKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICcrJzoKKwkJCWlmICghaXNkaWdpdChjKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlpZiAoIWlzeGRpZ2l0KGMpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCWlmICghdG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoYykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJzAnOgorCQljYXNlICcxJzoKKwkJY2FzZSAnMic6CisJCWNhc2UgJzMnOgorCQkJaWYgKGMgPT0gJ1xcJyAmJiB0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIDEpCisJCQkgICAgJiYgc3RybmNtcChmaWxlbmFtZSArIDEsIHBhdHRlcm4sIDMpID09IDApIHsKKwkJCQlmaWxlbmFtZSArPSAzOworCQkJCXBhdHRlcm4gKz0gMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQuICovCisJCWNhc2UgJyonOgorCQljYXNlICdAJzoKKwkJCWZvciAoaSA9IDA7IGkgPD0gZmlsZW5hbWVfZW5kIC0gZmlsZW5hbWU7IGkrKykgeworCQkJCWlmICh0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKAorCQkJCQkJICAgIGZpbGVuYW1lICsgaSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJICAgIHBhdHRlcm4gKyAxLCBwYXR0ZXJuX2VuZCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWMgPSBmaWxlbmFtZVtpXTsKKwkJCQlpZiAoYyA9PSAnLicgJiYgKnBhdHRlcm4gPT0gJ0AnKQorCQkJCQlicmVhazsKKwkJCQlpZiAoYyAhPSAnXFwnKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZmlsZW5hbWVbaSArIDFdID09ICdcXCcpCisJCQkJCWkrKzsKKwkJCQllbHNlIGlmICh0b21veW9faXNfYnl0ZV9yYW5nZShmaWxlbmFtZSArIGkgKyAxKSkKKwkJCQkJaSArPSAzOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7IC8qIEJhZCBwYXR0ZXJuLiAqLworCQkJfQorCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZC4gKi8KKwkJZGVmYXVsdDoKKwkJCWogPSAwOworCQkJYyA9ICpwYXR0ZXJuOworCQkJaWYgKGMgPT0gJyQnKSB7CisJCQkJd2hpbGUgKGlzZGlnaXQoZmlsZW5hbWVbal0pKQorCQkJCQlqKys7CisJCQl9IGVsc2UgaWYgKGMgPT0gJ1gnKSB7CisJCQkJd2hpbGUgKGlzeGRpZ2l0KGZpbGVuYW1lW2pdKSkKKwkJCQkJaisrOworCQkJfSBlbHNlIGlmIChjID09ICdBJykgeworCQkJCXdoaWxlICh0b21veW9faXNfYWxwaGFiZXRfY2hhcihmaWxlbmFtZVtqXSkpCisJCQkJCWorKzsKKwkJCX0KKwkJCWZvciAoaSA9IDE7IGkgPD0gajsgaSsrKSB7CisJCQkJaWYgKHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoCisJCQkJCQkgICAgZmlsZW5hbWUgKyBpLCBmaWxlbmFtZV9lbmQsCisJCQkJCQkgICAgcGF0dGVybiArIDEsIHBhdHRlcm5fZW5kKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkIG9yIGJhZCBwYXR0ZXJuLiAqLworCQl9CisJCWZpbGVuYW1lKys7CisJCXBhdHRlcm4rKzsKKwl9CisJd2hpbGUgKCpwYXR0ZXJuID09ICdcXCcgJiYKKwkgICAgICAgKCoocGF0dGVybiArIDEpID09ICcqJyB8fCAqKHBhdHRlcm4gKyAxKSA9PSAnQCcpKQorCQlwYXR0ZXJuICs9IDI7CisJcmV0dXJuIGZpbGVuYW1lID09IGZpbGVuYW1lX2VuZCAmJiBwYXR0ZXJuID09IHBhdHRlcm5fZW5kOworfQorCisvKioKKyAqIHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybiAtIFBhdHRlcm4gbWF0Y2hpbmcgd2l0aG91dCB3aXRob3V0ICcvJyBjaGFyYWN0ZXIuCisgKgorICogQGZpbGVuYW1lOiAgICAgVGhlIHN0YXJ0IG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBmaWxlbmFtZV9lbmQ6IFRoZSBlbmQgb2Ygc3RyaW5nIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICAgICAgVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqIEBwYXR0ZXJuX2VuZDogIFRoZSBlbmQgb2YgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4oY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybl9lbmQpCit7CisJY29uc3QgY2hhciAqcGF0dGVybl9zdGFydCA9IHBhdHRlcm47CisJYm9vbCBmaXJzdCA9IHRydWU7CisJYm9vbCByZXN1bHQ7CisKKwl3aGlsZSAocGF0dGVybiA8IHBhdHRlcm5fZW5kIC0gMSkgeworCQkvKiBTcGxpdCBhdCAiXC0iIHBhdHRlcm4uICovCisJCWlmICgqcGF0dGVybisrICE9ICdcXCcgfHwgKnBhdHRlcm4rKyAhPSAnLScpCisJCQljb250aW51ZTsKKwkJcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihmaWxlbmFtZSwKKwkJCQkJCQkgZmlsZW5hbWVfZW5kLAorCQkJCQkJCSBwYXR0ZXJuX3N0YXJ0LAorCQkJCQkJCSBwYXR0ZXJuIC0gMik7CisJCWlmIChmaXJzdCkKKwkJCXJlc3VsdCA9ICFyZXN1bHQ7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gZmFsc2U7CisJCWZpcnN0ID0gZmFsc2U7CisJCXBhdHRlcm5fc3RhcnQgPSBwYXR0ZXJuOworCX0KKwlyZXN1bHQgPSB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKGZpbGVuYW1lLCBmaWxlbmFtZV9lbmQsCisJCQkJCQkgcGF0dGVybl9zdGFydCwgcGF0dGVybl9lbmQpOworCXJldHVybiBmaXJzdCA/IHJlc3VsdCA6ICFyZXN1bHQ7Cit9CisKKy8qKgorICogdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBhdHRlcm46ICBUaGUgcGF0dGVybiB0byBjb21wYXJlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBtYXRjaGVzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLgorICogICBcXCAgICAgXCBpdHNlbGYuCisgKiAgIFxvb28gICBPY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhIGJ5dGUuCisgKiAgIFwqICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDAgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nLgorICogICBcQCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAwIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJyBvciAnLicuCisgKiAgIFw/ICAgICAxIGJ5dGUgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nLgorICogICBcJCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGRlY2ltYWwgZGlnaXQuCisgKiAgIFwrICAgICAxIGRlY2ltYWwgZGlnaXQuCisgKiAgIFxYICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDEgaGV4YWRlY2ltYWwgZGlnaXQuCisgKiAgIFx4ICAgICAxIGhleGFkZWNpbWFsIGRpZ2l0LgorICogICBcQSAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGFscGhhYmV0IGNoYXJhY3Rlci4KKyAqICAgXGEgICAgIDEgYWxwaGFiZXQgY2hhcmFjdGVyLgorICogICBcLSAgICAgU3VidHJhY3Rpb24gb3BlcmF0b3IuCisgKi8KK2Jvb2wgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4pCit7CisJLyoKKwkgIGlmICghZmlsZW5hbWUgfHwgIXBhdHRlcm4pCisJICByZXR1cm4gZmFsc2U7CisJKi8KKwljb25zdCBjaGFyICpmID0gZmlsZW5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqcCA9IHBhdHRlcm4tPm5hbWU7CisJY29uc3QgaW50IGxlbiA9IHBhdHRlcm4tPmNvbnN0X2xlbjsKKworCS8qIElmIEBwYXR0ZXJuIGRvZXNuJ3QgY29udGFpbiBwYXR0ZXJuLCBJIGNhbiB1c2Ugc3RyY21wKCkuICovCisJaWYgKCFwYXR0ZXJuLT5pc19wYXR0ZXJuZWQpCisJCXJldHVybiAhdG9tb3lvX3BhdGhjbXAoZmlsZW5hbWUsIHBhdHRlcm4pOworCS8qIERvbnQgY29tcGFyZSBpZiB0aGUgbnVtYmVyIG9mICcvJyBkaWZmZXJzLiAqLworCWlmIChmaWxlbmFtZS0+ZGVwdGggIT0gcGF0dGVybi0+ZGVwdGgpCisJCXJldHVybiBmYWxzZTsKKwkvKiBDb21wYXJlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IHBhdHRlcm5zLiAqLworCWlmIChzdHJuY21wKGYsIHAsIGxlbikpCisJCXJldHVybiBmYWxzZTsKKwlmICs9IGxlbjsKKwlwICs9IGxlbjsKKwkvKiBNYWluIGxvb3AuIENvbXBhcmUgZWFjaCBkaXJlY3RvcnkgY29tcG9uZW50LiAqLworCXdoaWxlICgqZiAmJiAqcCkgeworCQljb25zdCBjaGFyICpmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOworCQljb25zdCBjaGFyICpwX2RlbGltaXRlciA9IHN0cmNocihwLCAnLycpOworCQlpZiAoIWZfZGVsaW1pdGVyKQorCQkJZl9kZWxpbWl0ZXIgPSBmICsgc3RybGVuKGYpOworCQlpZiAoIXBfZGVsaW1pdGVyKQorCQkJcF9kZWxpbWl0ZXIgPSBwICsgc3RybGVuKHApOworCQlpZiAoIXRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybihmLCBmX2RlbGltaXRlciwKKwkJCQkJCSAgICBwLCBwX2RlbGltaXRlcikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWYgPSBmX2RlbGltaXRlcjsKKwkJaWYgKCpmKQorCQkJZisrOworCQlwID0gcF9kZWxpbWl0ZXI7CisJCWlmICgqcCkKKwkJCXArKzsKKwl9CisJLyogSWdub3JlIHRyYWlsaW5nICJcKiIgYW5kICJcQCIgaW4gQHBhdHRlcm4uICovCisJd2hpbGUgKCpwID09ICdcXCcgJiYKKwkgICAgICAgKCoocCArIDEpID09ICcqJyB8fCAqKHAgKyAxKSA9PSAnQCcpKQorCQlwICs9IDI7CisJcmV0dXJuICEqZiAmJiAhKnA7Cit9CisKKy8qKgorICogdG9tb3lvX2lvX3ByaW50ZiAtIFRyYW5zYWN0aW9uYWwgcHJpbnRmKCkgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIiBzdHJ1Y3R1cmUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBmbXQ6ICBUaGUgcHJpbnRmKCkncyBmb3JtYXQgc3RyaW5nLCBmb2xsb3dlZCBieSBwYXJhbWV0ZXJzLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBvdXRwdXQgd2FzIHdyaXR0ZW4sIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgc25wcmludGYoKSB3aWxsIHRydW5jYXRlLCBidXQgdG9tb3lvX2lvX3ByaW50ZigpIHdvbid0LgorICovCitib29sIHRvbW95b19pb19wcmludGYoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgbGVuOworCWludCBwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOworCWludCBzaXplID0gaGVhZC0+cmVhZGJ1Zl9zaXplIC0gcG9zOworCisJaWYgKHNpemUgPD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbGVuID0gdnNucHJpbnRmKGhlYWQtPnJlYWRfYnVmICsgcG9zLCBzaXplLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAocG9zICsgbGVuID49IGhlYWQtPnJlYWRidWZfc2l6ZSkKKwkJcmV0dXJuIGZhbHNlOworCWhlYWQtPnJlYWRfYXZhaWwgKz0gbGVuOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19nZXRfZXhlIC0gR2V0IHRvbW95b19yZWFscGF0aCgpIG9mIGN1cnJlbnQgcHJvY2Vzcy4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b21veW9fcmVhbHBhdGgoKSBvZiBjdXJyZW50IHByb2Nlc3Mgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGlzIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19nZXRfZXhlKHZvaWQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwljb25zdCBjaGFyICpjcCA9IE5VTEw7CisKKwlpZiAoIW1tKQorCQlyZXR1cm4gTlVMTDsKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKKwkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkgJiYgdm1hLT52bV9maWxlKSB7CisJCQljcCA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJnZtYS0+dm1fZmlsZS0+Zl9wYXRoKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIGNwOworfQorCisvKioKKyAqIHRvbW95b19nZXRfbXNnIC0gR2V0IHdhcm5pbmcgbWVzc2FnZS4KKyAqCisgKiBAaXNfZW5mb3JjZTogSXMgaXQgZW5mb3JjaW5nIG1vZGU/CisgKgorICogUmV0dXJucyAiRVJST1IiIG9yICJXQVJOSU5HIi4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKQoreworCWlmIChpc19lbmZvcmNlKQorCQlyZXR1cm4gIkVSUk9SIjsKKwllbHNlCisJCXJldHVybiAiV0FSTklORyI7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZsYWdzIC0gQ2hlY2sgbW9kZSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaW5kZXg6ICBUaGUgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBtb2RlLgorICoKKyAqIFRPTU9ZTyBjaGVja3Mgb25seSBwcm9jZXNzIGNvbnRleHQuCisgKiBUaGlzIGNvZGUgZGlzYWJsZXMgVE9NT1lPJ3MgZW5mb3JjZW1lbnQgaW4gY2FzZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20KKyAqIGludGVycnVwdCBjb250ZXh0LgorICovCit1bnNpZ25lZCBpbnQgdG9tb3lvX2NoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQljb25zdCB1OCBpbmRleCkKK3sKKwljb25zdCB1OCBwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOworCisJaWYgKFdBUk5fT04oaW5faW50ZXJydXB0KCkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdG9tb3lvX3BvbGljeV9sb2FkZWQgJiYgaW5kZXggPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgKKyNpZiBUT01PWU9fTUFYX1BST0ZJTEVTICE9IDI1NgorCQkmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUworI2VuZGlmCisJCSYmIHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSA/CisJCXRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXS0+dmFsdWVbaW5kZXhdIDogMDsKK30KKworLyoqCisgKiB0b21veW9fdmVyYm9zZV9tb2RlIC0gQ2hlY2sgd2hldGhlciBUT01PWU8gaXMgdmVyYm9zZSBtb2RlLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIHNob3VsZCBiZSBwcmludGVkIHRvCisgKiBjb25zb2xlLgorICovCitib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKQoreworCXJldHVybiB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fVkVSQk9TRSkgIT0gMDsKK30KKworLyoqCisgKiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rIC0gQ2hlY2sgZm9yIGRvbWFpbidzIHF1b3RhLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZG9tYWluIGlzIG5vdCBleGNlZWRlZCBxdW90YSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbikKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKworCWlmICghZG9tYWluKQorCQlyZXR1cm4gdHJ1ZTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQkJY29udGludWU7CisJCXN3aXRjaCAodG9tb3lvX2FjbF90eXBlMihwdHIpKSB7CisJCQlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDE7CisJCQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDI7CisJCQl1MTYgcGVybTsKKwkJY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6CisJCQlhY2wxID0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCQkgICAgaGVhZCk7CisJCQlwZXJtID0gYWNsMS0+cGVybTsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmCisJCQkgICAgKCgxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMKSB8CisJCQkgICAgICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCkpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0NSRUFURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1VOTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LRElSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUk1ESVJfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS1NPQ0tfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtDSEFSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0w6CisJCQlhY2wyID0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCQkgICAgaGVhZCk7CisJCQlwZXJtID0gYWNsMi0+cGVybTsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJaWYgKGNvdW50IDwgdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlkpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIWRvbWFpbi0+cXVvdGFfd2FybmVkKSB7CisJCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gdHJ1ZTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLVdBUk5JTkc6ICIKKwkJICAgICAgICJEb21haW4gJyVzJyBoYXMgc28gbWFueSBBQ0xzIHRvIGhvbGQuICIKKwkJICAgICAgICJTdG9wcGVkIGxlYXJuaW5nIG1vZGUuXG4iLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19wcm9maWxlIC0gQ3JlYXRlIGEgbmV3IHByb2ZpbGUuCisgKgorICogQHByb2ZpbGU6IFByb2ZpbGUgbnVtYmVyIHRvIGNyZWF0ZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcHJvZmlsZSIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZShjb25zdCB1bnNpZ25lZAorCQkJCQkJCQlpbnQgcHJvZmlsZSkKK3sKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0cnVjdCB0b21veW9fcHJvZmlsZSAqcHRyID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChwcm9maWxlID49IFRPTU9ZT19NQVhfUFJPRklMRVMpCisJCXJldHVybiBOVUxMOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlwdHIgPSB0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV07CisJaWYgKHB0cikKKwkJZ290byBvazsKKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKnB0cikpOworCWlmICghcHRyKQorCQlnb3RvIG9rOworCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykKKwkJcHRyLT52YWx1ZVtpXSA9IHRvbW95b19jb250cm9sX2FycmF5W2ldLmN1cnJlbnRfdmFsdWU7CisJbWIoKTsgLyogQXZvaWQgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbi4gKi8KKwl0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gPSBwdHI7Cisgb2s6CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBwdHI7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3Byb2ZpbGUgLSBXcml0ZSB0byBwcm9maWxlIHRhYmxlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwljaGFyICpjcDsKKwlzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGU7CisJdW5zaWduZWQgbG9uZyBudW07CisKKwljcCA9IHN0cmNocihkYXRhLCAnLScpOworCWlmIChjcCkKKwkJKmNwID0gJ1wwJzsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY3ApCisJCWRhdGEgPSBjcCArIDE7CisJcHJvZmlsZSA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZShudW0pOworCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3AgPSBzdHJjaHIoZGF0YSwgJz0nKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY3AgPSAnXDAnOworCWlmICghc3RyY21wKGRhdGEsICJDT01NRU5UIikpIHsKKwkJcHJvZmlsZS0+Y29tbWVudCA9IHRvbW95b19zYXZlX25hbWUoY3AgKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykgeworCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19jb250cm9sX2FycmF5W2ldLmtleXdvcmQpKQorCQkJY29udGludWU7CisJCWlmIChzc2NhbmYoY3AgKyAxLCAiJXUiLCAmdmFsdWUpICE9IDEpIHsKKwkJCWludCBqOworCQkJY29uc3QgY2hhciAqKm1vZGVzOworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIFRPTU9ZT19WRVJCT1NFOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfMjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV80OworCQkJCWJyZWFrOworCQkJfQorCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJCWlmIChzdHJjbXAoY3AgKyAxLCBtb2Rlc1tqXSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXZhbHVlID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChqID09IDQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSBpZiAodmFsdWUgPiB0b21veW9fY29udHJvbF9hcnJheVtpXS5tYXhfdmFsdWUpIHsKKwkJCXZhbHVlID0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0ubWF4X3ZhbHVlOworCQl9CisJCXByb2ZpbGUtPnZhbHVlW2ldID0gdmFsdWU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9wcm9maWxlIC0gUmVhZCBmcm9tIHByb2ZpbGUgdGFibGUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHRvdGFsID0gVE9NT1lPX01BWF9DT05UUk9MX0lOREVYICsgMTsKKwlpbnQgc3RlcDsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJZm9yIChzdGVwID0gaGVhZC0+cmVhZF9zdGVwOyBzdGVwIDwgVE9NT1lPX01BWF9QUk9GSUxFUyAqIHRvdGFsOworCSAgICAgc3RlcCsrKSB7CisJCWNvbnN0IHU4IGluZGV4ID0gc3RlcCAvIHRvdGFsOworCQl1OCB0eXBlID0gc3RlcCAlIHRvdGFsOworCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnByb2ZpbGUKKwkJCT0gdG9tb3lvX3Byb2ZpbGVfcHRyW2luZGV4XTsKKwkJaGVhZC0+cmVhZF9zdGVwID0gc3RlcDsKKwkJaWYgKCFwcm9maWxlKQorCQkJY29udGludWU7CisJCWlmICghdHlwZSkgeyAvKiBQcmludCBwcm9maWxlJyBjb21tZW50IHRhZy4gKi8KKwkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtQ09NTUVOVD0lc1xuIiwKKwkJCQkJICAgICAgaW5kZXgsIHByb2ZpbGUtPmNvbW1lbnQgPworCQkJCQkgICAgICBwcm9maWxlLT5jb21tZW50LT5uYW1lIDogIiIpKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJdHlwZS0tOworCQlpZiAodHlwZSA8IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWCkgeworCQkJY29uc3QgdW5zaWduZWQgaW50IHZhbHVlID0gcHJvZmlsZS0+dmFsdWVbdHlwZV07CisJCQljb25zdCBjaGFyICoqbW9kZXMgPSBOVUxMOworCQkJY29uc3QgY2hhciAqa2V5d29yZAorCQkJCT0gdG9tb3lvX2NvbnRyb2xfYXJyYXlbdHlwZV0ua2V5d29yZDsKKwkJCXN3aXRjaCAodG9tb3lvX2NvbnRyb2xfYXJyYXlbdHlwZV0ubWF4X3ZhbHVlKSB7CisJCQljYXNlIDM6CisJCQkJbW9kZXMgPSB0b21veW9fbW9kZV80OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChtb2RlcykgeworCQkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXM9JXNcbiIsIGluZGV4LAorCQkJCQkJICAgICAga2V5d29yZCwgbW9kZXNbdmFsdWVdKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXUtJXM9JXVcbiIsIGluZGV4LAorCQkJCQkJICAgICAga2V5d29yZCwgdmFsdWUpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc3RlcCA9PSBUT01PWU9fTUFYX1BST0ZJTEVTICogdG90YWwpCisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworLyogU3RydWN0dXJlIGZvciBwb2xpY3kgbWFuYWdlci4gKi8KK3N0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkvKiBBIHBhdGggdG8gcHJvZ3JhbSBvciBhIGRvbWFpbm5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm1hbmFnZXI7CisJYm9vbCBpc19kb21haW47ICAvKiBUcnVlIGlmIG1hbmFnZXIgaXMgYSBkb21haW5uYW1lLiAqLworCWJvb2wgaXNfZGVsZXRlZDsgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIGRlbGV0ZWQuICovCit9OworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX21hbmFnZXJfZW50cnkgLSBBZGQgYSBtYW5hZ2VyIGVudHJ5LgorICoKKyAqIEBtYW5hZ2VyOiAgIFRoZSBwYXRoIHRvIG1hbmFnZXIgb3IgdGhlIGRvbWFpbm5hbW1lLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5KGNvbnN0IGNoYXIgKm1hbmFnZXIsCisJCQkJICAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX21hbmFnZXI7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2RvbWFpbiA9IGZhbHNlOworCisJaWYgKHRvbW95b19pc19kb21haW5fZGVmKG1hbmFnZXIpKSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKG1hbmFnZXIsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpc19kb21haW4gPSB0cnVlOworCX0gZWxzZSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChtYW5hZ2VyLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlzYXZlZF9tYW5hZ2VyID0gdG9tb3lvX3NhdmVfbmFtZShtYW5hZ2VyKTsKKwlpZiAoIXNhdmVkX21hbmFnZXIpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPm1hbmFnZXIgIT0gc2F2ZWRfbWFuYWdlcikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5tYW5hZ2VyID0gc2F2ZWRfbWFuYWdlcjsKKwluZXdfZW50cnktPmlzX2RvbWFpbiA9IGlzX2RvbWFpbjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5IC0gV3JpdGUgbWFuYWdlciBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCWJvb2wgaXNfZGVsZXRlID0gdG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSk7CisKKwlpZiAoIXN0cmNtcChkYXRhLCAibWFuYWdlX2J5X25vbl9yb290IikpIHsKKwkJdG9tb3lvX21hbmFnZV9ieV9ub25fcm9vdCA9ICFpc19kZWxldGU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5KGRhdGEsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfbWFuYWdlcl9wb2xpY3kgLSBSZWFkIG1hbmFnZXIgcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSwKKwkJCQkgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIlc1xuIiwgcHRyLT5tYW5hZ2VyLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJaGVhZC0+cmVhZF9lb2YgPSBkb25lOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19pc19wb2xpY3lfbWFuYWdlciAtIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBhIHBvbGljeSBtYW5hZ2VyLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHBlcm1pdHRlZCB0byBtb2RpZnkgcG9saWN5CisgKiB2aWEgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19wb2xpY3lfbWFuYWdlcih2b2lkKQoreworCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwljb25zdCBjaGFyICpleGU7CisJY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSA9IHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZTsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoIXRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3QgJiYgKHRhc2stPmNyZWQtPnVpZCB8fCB0YXNrLT5jcmVkLT5ldWlkKSkKKwkJcmV0dXJuIGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiBwdHItPmlzX2RvbWFpbgorCQkgICAgJiYgIXRvbW95b19wYXRoY21wKGRvbWFpbm5hbWUsIHB0ci0+bWFuYWdlcikpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWlmIChmb3VuZCkKKwkJcmV0dXJuIHRydWU7CisJZXhlID0gdG9tb3lvX2dldF9leGUoKTsKKwlpZiAoIWV4ZSkKKwkJcmV0dXJuIGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiAhcHRyLT5pc19kb21haW4KKwkJICAgICYmICFzdHJjbXAoZXhlLCBwdHItPm1hbmFnZXItPm5hbWUpKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlpZiAoIWZvdW5kKSB7IC8qIFJlZHVjZSBlcnJvciBtZXNzYWdlcy4gKi8KKwkJc3RhdGljIHBpZF90IGxhc3RfcGlkOworCQljb25zdCBwaWRfdCBwaWQgPSBjdXJyZW50LT5waWQ7CisJCWlmIChsYXN0X3BpZCAhPSBwaWQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzICggJXMgKSBpcyBub3QgcGVybWl0dGVkIHRvICIKKwkJCSAgICAgICAidXBkYXRlIHBvbGljaWVzLlxuIiwgZG9tYWlubmFtZS0+bmFtZSwgZXhlKTsKKwkJCWxhc3RfcGlkID0gcGlkOworCQl9CisJfQorCXRvbW95b19mcmVlKGV4ZSk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b19pc19zZWxlY3Rfb25lIC0gUGFyc2Ugc2VsZWN0IGNvbW1hbmQuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBkYXRhOiBTdHJpbmcgdG8gcGFyc2UuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX3NlbGVjdF9vbmUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJIGNvbnN0IGNoYXIgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IHBpZDsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCisJaWYgKHNzY2FuZihkYXRhLCAicGlkPSV1IiwgJnBpZCkgPT0gMSkgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlwID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKHApCisJCQlkb21haW4gPSB0b21veW9fcmVhbF9kb21haW4ocCk7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworCX0gZWxzZSBpZiAoIXN0cm5jbXAoZGF0YSwgImRvbWFpbj0iLCA3KSkgeworCQlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYoZGF0YSArIDcpKSB7CisJCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhICsgNyk7CisJCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworCWhlYWQtPndyaXRlX3ZhcjEgPSBkb21haW47CisJLyogQWNjZXNzaW5nIHJlYWRfYnVmIGlzIHNhZmUgYmVjYXVzZSBoZWFkLT5pb19zZW0gaXMgaGVsZC4gKi8KKwlpZiAoIWhlYWQtPnJlYWRfYnVmKQorCQlyZXR1cm4gdHJ1ZTsgLyogRG8gbm90aGluZyBpZiBvcGVuKE9fV1JPTkxZKS4gKi8KKwloZWFkLT5yZWFkX2F2YWlsID0gMDsKKwl0b21veW9faW9fcHJpbnRmKGhlYWQsICIjIHNlbGVjdCAlc1xuIiwgZGF0YSk7CisJaGVhZC0+cmVhZF9zaW5nbGVfZG9tYWluID0gdHJ1ZTsKKwloZWFkLT5yZWFkX2VvZiA9ICFkb21haW47CisJaWYgKGRvbWFpbikgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkOworCQloZWFkLT5yZWFkX3ZhcjEgPSBOVUxMOworCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCQlpZiAoZCA9PSBkb21haW4pCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjEgPSAmZC0+bGlzdDsKKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCWhlYWQtPnJlYWRfYml0ID0gMDsKKwkJaGVhZC0+cmVhZF9zdGVwID0gMDsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCkKKwkJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiMgVGhpcyBpcyBhIGRlbGV0ZWQgZG9tYWluLlxuIik7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fcG9saWN5IC0gV3JpdGUgZG9tYWluIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBoZWFkLT53cml0ZV92YXIxOworCWJvb2wgaXNfZGVsZXRlID0gZmFsc2U7CisJYm9vbCBpc19zZWxlY3QgPSBmYWxzZTsKKwlib29sIGlzX3VuZGVsZXRlID0gZmFsc2U7CisJdW5zaWduZWQgaW50IHByb2ZpbGU7CisKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSkpCisJCWlzX2RlbGV0ZSA9IHRydWU7CisJZWxzZSBpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX1NFTEVDVCkpCisJCWlzX3NlbGVjdCA9IHRydWU7CisJZWxzZSBpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX1VOREVMRVRFKSkKKwkJaXNfdW5kZWxldGUgPSB0cnVlOworCWlmIChpc19zZWxlY3QgJiYgdG9tb3lvX2lzX3NlbGVjdF9vbmUoaGVhZCwgZGF0YSkpCisJCXJldHVybiAwOworCS8qIERvbid0IGFsbG93IHVwZGF0aW5nIHBvbGljaWVzIGJ5IG5vbiBtYW5hZ2VyIHByb2dyYW1zLiAqLworCWlmICghdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKCkpCisJCXJldHVybiAtRVBFUk07CisJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEpKSB7CisJCWRvbWFpbiA9IE5VTEw7CisJCWlmIChpc19kZWxldGUpCisJCQl0b21veW9fZGVsZXRlX2RvbWFpbihkYXRhKTsKKwkJZWxzZSBpZiAoaXNfc2VsZWN0KSB7CisJCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhKTsKKwkJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJfSBlbHNlIGlmIChpc191bmRlbGV0ZSkKKwkJCWRvbWFpbiA9IHRvbW95b191bmRlbGV0ZV9kb21haW4oZGF0YSk7CisJCWVsc2UKKwkJCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGRhdGEsIDApOworCQloZWFkLT53cml0ZV92YXIxID0gZG9tYWluOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNzY2FuZihkYXRhLCBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAiJXUiLCAmcHJvZmlsZSkgPT0gMQorCSAgICAmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUykgeworCQlpZiAodG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdIHx8ICF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCWRvbWFpbi0+cHJvZmlsZSA9ICh1OCkgcHJvZmlsZTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGRhdGEsIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkpIHsKKwkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhkb21haW4sIGlzX2RlbGV0ZSwKKwkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGRhdGEsIGRvbWFpbiwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsIC0gUHJpbnQgYSBzaW5nbGUgcGF0aCBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKgorCQkJCQkgcHRyKQoreworCWludCBwb3M7CisJdTggYml0OworCWNvbnN0IGNoYXIgKmF0bWFyayA9ICIiOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IHUxNiBwZXJtID0gcHRyLT5wZXJtOworCisJZmlsZW5hbWUgPSBwdHItPmZpbGVuYW1lLT5uYW1lOworCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OOworCSAgICAgYml0KyspIHsKKwkJY29uc3QgY2hhciAqbXNnOworCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCisJCQljb250aW51ZTsKKwkJLyogUHJpbnQgInJlYWQvd3JpdGUiIGluc3RlYWQgb2YgInJlYWQiIGFuZCAid3JpdGUiLiAqLworCQlpZiAoKGJpdCA9PSBUT01PWU9fVFlQRV9SRUFEX0FDTCB8fAorCQkgICAgIGJpdCA9PSBUT01PWU9fVFlQRV9XUklURV9BQ0wpCisJCSAgICAmJiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkpCisJCQljb250aW51ZTsKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoYml0KTsKKwkJcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICJhbGxvd18lcyAlcyVzXG4iLCBtc2csCisJCQkJICAgICAgYXRtYXJrLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9iaXQgPSAwOworCXJldHVybiB0cnVlOworIG91dDoKKwloZWFkLT5yZWFkX2JpdCA9IGJpdDsKKwloZWFkLT5yZWFkX2F2YWlsID0gcG9zOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsIC0gUHJpbnQgYSBkb3VibGUgcGF0aCBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKgorCQkJCQkgcHRyKQoreworCWludCBwb3M7CisJY29uc3QgY2hhciAqYXRtYXJrMSA9ICIiOworCWNvbnN0IGNoYXIgKmF0bWFyazIgPSAiIjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTE7CisJY29uc3QgY2hhciAqZmlsZW5hbWUyOworCWNvbnN0IHU4IHBlcm0gPSBwdHItPnBlcm07CisJdTggYml0OworCisJZmlsZW5hbWUxID0gcHRyLT5maWxlbmFtZTEtPm5hbWU7CisJZmlsZW5hbWUyID0gcHRyLT5maWxlbmFtZTItPm5hbWU7CisJZm9yIChiaXQgPSBoZWFkLT5yZWFkX2JpdDsgYml0IDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT047CisJICAgICBiaXQrKykgeworCQljb25zdCBjaGFyICptc2c7CisJCWlmICghKHBlcm0gJiAoMSA8PCBiaXQpKSkKKwkJCWNvbnRpbnVlOworCQltc2cgPSB0b21veW9fZHAya2V5d29yZChiaXQpOworCQlwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzICVzJXMgJXMlc1xuIiwgbXNnLAorCQkJCSAgICAgIGF0bWFyazEsIGZpbGVuYW1lMSwgYXRtYXJrMiwgZmlsZW5hbWUyKSkKKwkJCWdvdG8gb3V0OworCX0KKwloZWFkLT5yZWFkX2JpdCA9IDA7CisJcmV0dXJuIHRydWU7Cisgb3V0OgorCWhlYWQtPnJlYWRfYml0ID0gYml0OworCWhlYWQtPnJlYWRfYXZhaWwgPSBwb3M7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19wcmludF9lbnRyeSAtIFByaW50IGFuIEFDTCBlbnRyeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICogQHB0cjogIFBvaW50ZXIgdG8gYW4gQUNMIGVudHJ5LgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wcmludF9lbnRyeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCit7CisJY29uc3QgdTggYWNsX3R5cGUgPSB0b21veW9fYWNsX3R5cGUyKHB0cik7CisKKwlpZiAoYWNsX3R5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCXJldHVybiB0cnVlOworCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpIHsKKwkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2wKKwkJCT0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgICAgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgICAgICBoZWFkKTsKKwkJcmV0dXJuIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woaGVhZCwgYWNsKTsKKwl9CisJaWYgKGFjbF90eXBlID09IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbAorCQkJPSBjb250YWluZXJfb2YocHRyLAorCQkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgICAgIGhlYWQpOworCQlyZXR1cm4gdG9tb3lvX3ByaW50X2RvdWJsZV9wYXRoX2FjbChoZWFkLCBhY2wpOworCX0KKwlCVUcoKTsgLyogVGhpcyBtdXN0IG5vdCBoYXBwZW4uICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3kgLSBSZWFkIGRvbWFpbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZG9tYWluX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKmFwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJaWYgKGhlYWQtPnJlYWRfc3RlcCA9PSAwKQorCQloZWFkLT5yZWFkX3N0ZXAgPSAxOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKGRwb3MsIGhlYWQtPnJlYWRfdmFyMSwgJnRvbW95b19kb21haW5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWNvbnN0IGNoYXIgKnF1b3RhX2V4Y2VlZGVkID0gIiI7CisJCWNvbnN0IGNoYXIgKnRyYW5zaXRpb25fZmFpbGVkID0gIiI7CisJCWNvbnN0IGNoYXIgKmlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCA9ICIiOworCQlkb21haW4gPSBsaXN0X2VudHJ5KGRwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8sIGxpc3QpOworCQlpZiAoaGVhZC0+cmVhZF9zdGVwICE9IDEpCisJCQlnb3RvIGFjbF9sb29wOworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkICYmICFoZWFkLT5yZWFkX3NpbmdsZV9kb21haW4pCisJCQljb250aW51ZTsKKwkJLyogUHJpbnQgZG9tYWlubmFtZSBhbmQgZmxhZ3MuICovCisJCWlmIChkb21haW4tPnF1b3RhX3dhcm5lZCkKKwkJCXF1b3RhX2V4Y2VlZGVkID0gInF1b3RhX2V4Y2VlZGVkXG4iOworCQlpZiAoZG9tYWluLT5mbGFncyAmIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQpCisJCQl0cmFuc2l0aW9uX2ZhaWxlZCA9ICJ0cmFuc2l0aW9uX2ZhaWxlZFxuIjsKKwkJaWYgKGRvbWFpbi0+ZmxhZ3MgJgorCQkgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpCisJCQlpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQKKwkJCQk9IFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAiXG4iOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwKKwkJCQkgICAgICAiJXNcbiIgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgIiV1XG4iCisJCQkJICAgICAgIiVzJXMlc1xuIiwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lLAorCQkJCSAgICAgIGRvbWFpbi0+cHJvZmlsZSwgcXVvdGFfZXhjZWVkZWQsCisJCQkJICAgICAgdHJhbnNpdGlvbl9mYWlsZWQsCisJCQkJICAgICAgaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJaGVhZC0+cmVhZF9zdGVwID0gMjsKK2FjbF9sb29wOgorCQlpZiAoaGVhZC0+cmVhZF9zdGVwID09IDMpCisJCQlnb3RvIHRhaWxfbWFyazsKKwkJLyogUHJpbnQgQUNMIGVudHJpZXMgaW4gdGhlIGRvbWFpbi4gKi8KKwkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfY29va2llKGFwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCQkgICAgICAmZG9tYWluLT5hY2xfaW5mb19saXN0KSB7CisJCQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIKKwkJCQk9IGxpc3RfZW50cnkoYXBvcywgc3RydWN0IHRvbW95b19hY2xfaW5mbywKKwkJCQkJICAgICAgbGlzdCk7CisJCQlpZiAoIXRvbW95b19wcmludF9lbnRyeShoZWFkLCBwdHIpKSB7CisJCQkJZG9uZSA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwkJaWYgKCFkb25lKQorCQkJYnJlYWs7CisJCWhlYWQtPnJlYWRfc3RlcCA9IDM7Cit0YWlsX21hcms6CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiXG4iKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJaGVhZC0+cmVhZF9zdGVwID0gMTsKKwkJaWYgKGhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbikKKwkJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaGVhZC0+cmVhZF9lb2YgPSBkb25lOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZSAtIEFzc2lnbiBwcm9maWxlIGZvciBzcGVjaWZpZWQgZG9tYWluLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBkb2luZworICoKKyAqICAgICAoIGVjaG8gInNlbGVjdCAiICRkb21haW5uYW1lOyBlY2hvICJ1c2VfcHJvZmlsZSAiICRwcm9maWxlICkgfAorICogICAgIC91c3IvbGliL2Njcy9sb2FkcG9saWN5IC1kCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJY2hhciAqY3AgPSBzdHJjaHIoZGF0YSwgJyAnKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJdW5zaWduZWQgbG9uZyBwcm9maWxlOworCisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNwID0gJ1wwJzsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oY3AgKyAxKTsKKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmcHJvZmlsZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkb21haW4gJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMKKwkgICAgJiYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSB8fCAhdG9tb3lvX3BvbGljeV9sb2FkZWQpKQorCQlkb21haW4tPnByb2ZpbGUgPSAodTgpIHByb2ZpbGU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX3Byb2ZpbGUgLSBSZWFkIG9ubHkgZG9tYWlubmFtZSBhbmQgcHJvZmlsZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgbGlzdCBvZiBwcm9maWxlIG51bWJlciBhbmQgZG9tYWlubmFtZSBwYWlycy4KKyAqCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcKKyAqCisgKiAgICAgZ3JlcCAtQSAxICdePGtlcm5lbD4nIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9kb21haW5fcG9saWN5IHwKKyAqICAgICBhd2sgJyB7IGlmICggZG9tYWlubmFtZSA9PSAiIiApIHsgaWYgKCAkMSA9PSAiPGtlcm5lbD4iICkKKyAqICAgICBkb21haW5uYW1lID0gJDA7IH0gZWxzZSBpZiAoICQxID09ICJ1c2VfcHJvZmlsZSIgKSB7CisgKiAgICAgcHJpbnQgJDIgIiAiIGRvbWFpbm5hbWU7IGRvbWFpbm5hbWUgPSAiIjsgfSB9IDsgJworICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJaWYgKGhlYWQtPnJlYWRfZW9mKQorCQlyZXR1cm4gMDsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMSwgJnRvbW95b19kb21haW5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWRvbWFpbiA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvLCBsaXN0KTsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1ICVzXG4iLCBkb21haW4tPnByb2ZpbGUsCisJCQkJICAgICAgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfcGlkOiBTcGVjaWZ5IFBJRCB0byBvYnRhaW4gZG9tYWlubmFtZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfcGlkKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgcGlkOworCS8qIE5vIGVycm9yIGNoZWNrLiAqLworCXN0cmljdF9zdHJ0b3VsKGhlYWQtPndyaXRlX2J1ZiwgMTAsICZwaWQpOworCWhlYWQtPnJlYWRfc3RlcCA9IChpbnQpIHBpZDsKKwloZWFkLT5yZWFkX2VvZiA9IGZhbHNlOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX3BpZCAtIEdldCBkb21haW5uYW1lIG9mIHRoZSBzcGVjaWZpZWQgUElELgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0aGUgZG9tYWlubmFtZSB3aGljaCB0aGUgc3BlY2lmaWVkIFBJRCBpcyBpbiBvbiBzdWNjZXNzLAorICogZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyAqIFRoZSBQSUQgaXMgc3BlY2lmaWVkIGJ5IHRvbW95b193cml0ZV9waWQoKSBzbyB0aGF0IHRoZSB1c2VyIGNhbiBvYnRhaW4KKyAqIHVzaW5nIHJlYWQoKS93cml0ZSgpIGludGVyZmFjZSByYXRoZXIgdGhhbiBzeXNjdGwoKSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfcGlkKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmIChoZWFkLT5yZWFkX2F2YWlsID09IDAgJiYgIWhlYWQtPnJlYWRfZW9mKSB7CisJCWNvbnN0IGludCBwaWQgPSBoZWFkLT5yZWFkX3N0ZXA7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOworCQlpZiAocCkKKwkJCWRvbWFpbiA9IHRvbW95b19yZWFsX2RvbWFpbihwKTsKKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCisJCWlmIChkb21haW4pCisJCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlZCAldSAlcyIsIHBpZCwgZG9tYWluLT5wcm9maWxlLAorCQkJCQkgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeSAtIFdyaXRlIGV4Y2VwdGlvbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJYm9vbCBpc19kZWxldGUgPSB0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVMRVRFKTsKKworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGRhdGEsIGZhbHNlLAorCQkJCQkJCSBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGRhdGEsIHRydWUsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTikpCisJCXJldHVybiB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShkYXRhLCBmYWxzZSwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfTk9fSU5JVElBTElaRV9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koZGF0YSwgdHJ1ZSwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfQUxJQVMpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCkpCisJCXJldHVybiB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGRhdGEsIGlzX2RlbGV0ZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeSAtIFJlYWQgZXhjZXB0aW9uIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJc3dpdGNoIChoZWFkLT5yZWFkX3N0ZXApIHsKKwkJY2FzZSAwOgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDE7CisJCWNhc2UgMToKKwkJCWlmICghdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gMjsKKwkJY2FzZSAyOgorCQkJaWYgKCF0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gMzsKKwkJY2FzZSAzOgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDQ7CisJCWNhc2UgNDoKKwkJCWlmICghdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA1OworCQljYXNlIDU6CisJCQlpZiAoIXRvbW95b19yZWFkX2FsaWFzX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA2OworCQljYXNlIDY6CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNzsKKwkJY2FzZSA3OgorCQkJaWYgKCF0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gODsKKwkJY2FzZSA4OgorCQkJaWYgKCF0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShoZWFkKSkKKwkJCQlicmVhazsKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA5OworCQljYXNlIDk6CisJCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBwYXRoIHRvIHBvbGljeSBsb2FkZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbG9hZGVyID0gIi9zYmluL3RvbW95by1pbml0IjsKKworLyoqCisgKiB0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMgLSBDaGVjayB3aGV0aGVyIC9zYmluL3RvbW95by1pbml0IGV4aXN0cy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19wb2xpY3lfbG9hZGVyX2V4aXN0cyh2b2lkKQoreworCS8qCisJICogRG9uJ3QgYWN0aXZhdGUgTUFDIGlmIHRoZSBwb2xpY3kgbG9hZGVyIGRvZXNuJ3QgZXhpc3QuCisJICogSWYgdGhlIGluaXRyZCBpbmNsdWRlcyAvc2Jpbi9pbml0IGJ1dCByZWFsLXJvb3QtZGV2IGhhcyBub3QKKwkgKiBtb3VudGVkIG9uIC8geWV0LCBhY3RpdmF0aW5nIE1BQyB3aWxsIGJsb2NrIHRoZSBzeXN0ZW0gc2luY2UKKwkgKiBwb2xpY2llcyBhcmUgbm90IGxvYWRlZCB5ZXQuCisJICogVGh1cywgbGV0IGRvX2V4ZWN2ZSgpIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeXRpbWUuCisJICovCisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKworCWlmIChwYXRoX2xvb2t1cCh0b21veW9fbG9hZGVyLCBMT09LVVBfRk9MTE9XLCAmbmQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5vdCBhY3RpdmF0aW5nIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBub3cgIgorCQkgICAgICAgInNpbmNlICVzIGRvZXNuJ3QgZXhpc3QuXG4iLCB0b21veW9fbG9hZGVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlwYXRoX3B1dCgmbmQucGF0aCk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogdG9tb3lvX2xvYWRfcG9saWN5IC0gUnVuIGV4dGVybmFsIHBvbGljeSBsb2FkZXIgdG8gbG9hZCBwb2xpY3kuCisgKgorICogQGZpbGVuYW1lOiBUaGUgcHJvZ3JhbSBhYm91dCB0byBzdGFydC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIEBmaWxlbmFtZSBpcyAvc2Jpbi9pbml0ICwgYW5kIGlmIHNvCisgKiBpbnZva2UgL3NiaW4vdG9tb3lvLWluaXQgYW5kIHdhaXQgZm9yIHRoZSB0ZXJtaW5hdGlvbiBvZiAvc2Jpbi90b21veW8taW5pdAorICogYW5kIHRoZW4gY29udGludWVzIGludm9jYXRpb24gb2YgL3NiaW4vaW5pdC4KKyAqIC9zYmluL3RvbW95by1pbml0IHJlYWRzIHBvbGljeSBmaWxlcyBpbiAvZXRjL3RvbW95by8gZGlyZWN0b3J5IGFuZAorICogd3JpdGVzIHRvIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlcy4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX2xvYWRfcG9saWN5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgKmFyZ3ZbMl07CisJY2hhciAqZW52cFszXTsKKworCWlmICh0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJcmV0dXJuOworCS8qCisJICogQ2hlY2sgZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCBvciAvc2Jpbi90b21veW8tc3RhcnQuCisJICogL3NiaW4vdG9tb3lvLXN0YXJ0IGlzIGEgZHVtbXkgZmlsZW5hbWUgaW4gY2FzZSB3aGVyZSAvc2Jpbi9pbml0IGNhbid0CisJICogYmUgcGFzc2VkLgorCSAqIFlvdSBjYW4gY3JlYXRlIC9zYmluL3RvbW95by1zdGFydCBieQorCSAqICJsbiAtcyAvYmluL3RydWUgL3NiaW4vdG9tb3lvLXN0YXJ0Ii4KKwkgKi8KKwlpZiAoc3RyY21wKGZpbGVuYW1lLCAiL3NiaW4vaW5pdCIpICYmCisJICAgIHN0cmNtcChmaWxlbmFtZSwgIi9zYmluL3RvbW95by1zdGFydCIpKQorCQlyZXR1cm47CisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHMoKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2FsbGluZyAlcyB0byBsb2FkIHBvbGljeS4gUGxlYXNlIHdhaXQuXG4iLAorCSAgICAgICB0b21veW9fbG9hZGVyKTsKKwlhcmd2WzBdID0gKGNoYXIgKikgdG9tb3lvX2xvYWRlcjsKKwlhcmd2WzFdID0gTlVMTDsKKwllbnZwWzBdID0gIkhPTUU9LyI7CisJZW52cFsxXSA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIjsKKwllbnZwWzJdID0gTlVMTDsKKwljYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIDEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgYWN0aXZhdGVkLlxuIik7CisJdG9tb3lvX3BvbGljeV9sb2FkZWQgPSB0cnVlOworCXsgLyogQ2hlY2sgYWxsIHByb2ZpbGVzIGN1cnJlbnRseSBhc3NpZ25lZCB0byBkb21haW5zIGFyZSBkZWZpbmVkLiAqLworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQkJY29uc3QgdTggcHJvZmlsZSA9IGRvbWFpbi0+cHJvZmlsZTsKKwkJCWlmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0pCisJCQkJY29udGludWU7CisJCQlwYW5pYygiUHJvZmlsZSAldSAodXNlZCBieSAnJXMnKSBub3QgZGVmaW5lZC5cbiIsCisJCQkgICAgICBwcm9maWxlLCBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWUpOworCQl9CisJCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwl9Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfdmVyc2lvbjogR2V0IHZlcnNpb24uCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfdmVyc2lvbihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIjIuMi4wLXByZSIpOworCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX3NlbGZfZG9tYWluIC0gR2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyBkb21haW5uYW1lLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9zZWxmX2RvbWFpbihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCS8qCisJCSAqIHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZSAhPSBOVUxMCisJCSAqIGJlY2F1c2UgZXZlcnkgcHJvY2VzcyBiZWxvbmdzIHRvIGEgZG9tYWluIGFuZAorCQkgKiB0aGUgZG9tYWluJ3MgbmFtZSBjYW5ub3QgYmUgTlVMTC4KKwkJICovCisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiVzIiwgdG9tb3lvX2RvbWFpbigpLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fb3Blbl9jb250cm9sIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAdHlwZTogVHlwZSBvZiBpbnRlcmZhY2UuCisgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIEFzc29jaWF0ZXMgcG9saWN5IGhhbmRsZXIgYW5kIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gdG9tb3lvX2FsbG9jKHNpemVvZigqaGVhZCkpOworCisJaWYgKCFoZWFkKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9pbml0KCZoZWFkLT5pb19zZW0pOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVE9NT1lPX0RPTUFJTlBPTElDWToKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbl9wb2xpY3kgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3k7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX0VYQ0VQVElPTlBPTElDWToKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL2V4Y2VwdGlvbl9wb2xpY3kgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2V4Y2VwdGlvbl9wb2xpY3k7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1NFTEZET01BSU46CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9zZWxmX2RvbWFpbiAqLworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfc2VsZl9kb21haW47CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX0RPTUFJTl9TVEFUVVM6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8uZG9tYWluX3N0YXR1cyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19QUk9DRVNTX1NUQVRVUzoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLy5wcm9jZXNzX3N0YXR1cyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9waWQ7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9waWQ7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1ZFUlNJT046CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by92ZXJzaW9uICovCisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF92ZXJzaW9uOworCQloZWFkLT5yZWFkYnVmX3NpemUgPSAxMjg7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX01FTUlORk86CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9tZW1pbmZvICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyOworCQloZWFkLT5yZWFkYnVmX3NpemUgPSA1MTI7CisJCWJyZWFrOworCWNhc2UgVE9NT1lPX1BST0ZJTEU6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9wcm9maWxlICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX3Byb2ZpbGU7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9wcm9maWxlOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19NQU5BR0VSOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWFuYWdlciAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeTsKKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5OworCQlicmVhazsKKwl9CisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBhbGxvY2F0ZSByZWFkX2J1ZiBzaW5jZSBpdCBpcyBub3Qgb3BlbmVkCisJCSAqIGZvciByZWFkaW5nLgorCQkgKi8KKwkJaGVhZC0+cmVhZCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKCFoZWFkLT5yZWFkYnVmX3NpemUpCisJCQloZWFkLT5yZWFkYnVmX3NpemUgPSA0MDk2ICogMjsKKwkJaGVhZC0+cmVhZF9idWYgPSB0b21veW9fYWxsb2MoaGVhZC0+cmVhZGJ1Zl9zaXplKTsKKwkJaWYgKCFoZWFkLT5yZWFkX2J1ZikgeworCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBhbGxvY2F0ZSB3cml0ZV9idWYgc2luY2UgaXQgaXMgbm90IG9wZW5lZAorCQkgKiBmb3Igd3JpdGluZy4KKwkJICovCisJCWhlYWQtPndyaXRlID0gTlVMTDsKKwl9IGVsc2UgaWYgKGhlYWQtPndyaXRlKSB7CisJCWhlYWQtPndyaXRlYnVmX3NpemUgPSA0MDk2ICogMjsKKwkJaGVhZC0+d3JpdGVfYnVmID0gdG9tb3lvX2FsbG9jKGhlYWQtPndyaXRlYnVmX3NpemUpOworCQlpZiAoIWhlYWQtPndyaXRlX2J1ZikgeworCQkJdG9tb3lvX2ZyZWUoaGVhZC0+cmVhZF9idWYpOworCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBoZWFkOworCS8qCisJICogQ2FsbCB0aGUgaGFuZGxlciBub3cgaWYgdGhlIGZpbGUgaXMKKwkgKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4KKwkgKiBzbyB0aGF0IHRoZSB1c2VyIGNhbiB1c2UKKwkgKiBjYXQgPCAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4iCisJICogdG8ga25vdyB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKwkgKi8KKwlpZiAodHlwZSA9PSBUT01PWU9fU0VMRkRPTUFJTikKKwkJdG9tb3lvX3JlYWRfY29udHJvbChmaWxlLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9jb250cm9sIC0gcmVhZCgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogICAgICAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZmZlcjogICAgIFBvaW5lciB0byBidWZmZXIgdG8gd3JpdGUgdG8uCisgKiBAYnVmZmVyX2xlbjogU2l6ZSBvZiBAYnVmZmVyLgorICoKKyAqIFJldHVybnMgYnl0ZXMgcmVhZCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbikKK3sKKwlpbnQgbGVuID0gMDsKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpjcDsKKworCWlmICghaGVhZC0+cmVhZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKKwkJcmV0dXJuIC1FSU5UUjsKKwkvKiBDYWxsIHRoZSBwb2xpY3kgaGFuZGxlci4gKi8KKwlsZW4gPSBoZWFkLT5yZWFkKGhlYWQpOworCWlmIChsZW4gPCAwKQorCQlnb3RvIG91dDsKKwkvKiBXcml0ZSB0byBidWZmZXIuICovCisJbGVuID0gaGVhZC0+cmVhZF9hdmFpbDsKKwlpZiAobGVuID4gYnVmZmVyX2xlbikKKwkJbGVuID0gYnVmZmVyX2xlbjsKKwlpZiAoIWxlbikKKwkJZ290byBvdXQ7CisJLyogaGVhZC0+cmVhZF9idWYgY2hhbmdlcyBieSBzb21lIGZ1bmN0aW9ucy4gKi8KKwljcCA9IGhlYWQtPnJlYWRfYnVmOworCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBjcCwgbGVuKSkgeworCQlsZW4gPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9hdmFpbCAtPSBsZW47CisJbWVtbW92ZShjcCwgY3AgKyBsZW4sIGhlYWQtPnJlYWRfYXZhaWwpOworIG91dDoKKwltdXRleF91bmxvY2soJmhlYWQtPmlvX3NlbSk7CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfY29udHJvbCAtIHdyaXRlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmZmVyOiAgICAgUG9pbnRlciB0byBidWZmZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIEBidWZmZXJfbGVuIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQljb25zdCBpbnQgYnVmZmVyX2xlbikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyb3IgPSBidWZmZXJfbGVuOworCWludCBhdmFpbF9sZW4gPSBidWZmZXJfbGVuOworCWNoYXIgKmNwMCA9IGhlYWQtPndyaXRlX2J1ZjsKKworCWlmICghaGVhZC0+d3JpdGUpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGJ1ZmZlcl9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBEb24ndCBhbGxvdyB1cGRhdGluZyBwb2xpY2llcyBieSBub24gbWFuYWdlciBwcm9ncmFtcy4gKi8KKwlpZiAoaGVhZC0+d3JpdGUgIT0gdG9tb3lvX3dyaXRlX3BpZCAmJgorCSAgICBoZWFkLT53cml0ZSAhPSB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeSAmJgorCSAgICAhdG9tb3lvX2lzX3BvbGljeV9tYW5hZ2VyKCkpCisJCXJldHVybiAtRVBFUk07CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGVhZC0+aW9fc2VtKSkKKwkJcmV0dXJuIC1FSU5UUjsKKwkvKiBSZWFkIGEgbGluZSBhbmQgZGlzcGF0Y2ggaXQgdG8gdGhlIHBvbGljeSBoYW5kbGVyLiAqLworCXdoaWxlIChhdmFpbF9sZW4gPiAwKSB7CisJCWNoYXIgYzsKKwkJaWYgKGhlYWQtPndyaXRlX2F2YWlsID49IGhlYWQtPndyaXRlYnVmX3NpemUgLSAxKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChnZXRfdXNlcihjLCBidWZmZXIpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlidWZmZXIrKzsKKwkJYXZhaWxfbGVuLS07CisJCWNwMFtoZWFkLT53cml0ZV9hdmFpbCsrXSA9IGM7CisJCWlmIChjICE9ICdcbicpCisJCQljb250aW51ZTsKKwkJY3AwW2hlYWQtPndyaXRlX2F2YWlsIC0gMV0gPSAnXDAnOworCQloZWFkLT53cml0ZV9hdmFpbCA9IDA7CisJCXRvbW95b19ub3JtYWxpemVfbGluZShjcDApOworCQloZWFkLT53cml0ZShoZWFkKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZoZWFkLT5pb19zZW0pOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2xvc2VfY29udHJvbCAtIGNsb3NlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmVsZWFzZXMgbWVtb3J5IGFuZCByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2Nsb3NlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiBSZWxlYXNlIG1lbW9yeSB1c2VkIGZvciBwb2xpY3kgSS9PLiAqLworCXRvbW95b19mcmVlKGhlYWQtPnJlYWRfYnVmKTsKKwloZWFkLT5yZWFkX2J1ZiA9IE5VTEw7CisJdG9tb3lvX2ZyZWUoaGVhZC0+d3JpdGVfYnVmKTsKKwloZWFkLT53cml0ZV9idWYgPSBOVUxMOworCXRvbW95b19mcmVlKGhlYWQpOworCWhlYWQgPSBOVUxMOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50IC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3IgQUNMIGVudHJ5LgorICoKKyAqIEBhY2xfdHlwZTogIFR5cGUgb2YgQUNMIGVudHJ5LgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgQUNMIGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICp0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoY29uc3QgdTggYWNsX3R5cGUpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisKKwlzd2l0Y2ggKGFjbF90eXBlKSB7CisJY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQpOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTDoKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChsZW4pOworCWlmICghcHRyKQorCQlyZXR1cm4gTlVMTDsKKwlwdHItPnR5cGUgPSBhY2xfdHlwZTsKKwlyZXR1cm4gcHRyOworfQorCisvKioKKyAqIHRvbW95b19vcGVuIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNvbnN0IGludCBrZXkgPSAoKHU4ICopIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSkKKwkJLSAoKHU4ICopIE5VTEwpOworCXJldHVybiB0b21veW9fb3Blbl9jb250cm9sKGtleSwgZmlsZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlbGVhc2UgLSBjbG9zZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0b21veW9fY2xvc2VfY29udHJvbChmaWxlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZCAtIHJlYWQoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmOiAgIFBvaW50ZXIgdG8gYnVmZmVyLgorICogQGNvdW50OiBTaXplIG9mIEBidWYuCisgKiBAcHBvczogIFVudXNlZC4KKyAqCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJICAgbG9mZl90ICpwcG9zKQoreworCXJldHVybiB0b21veW9fcmVhZF9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKioKKyAqIHRvbW95b193cml0ZSAtIHdyaXRlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZjogICBQb2ludGVyIHRvIGJ1ZmZlci4KKyAqIEBjb3VudDogU2l6ZSBvZiBAYnVmLgorICogQHBwb3M6ICBVbnVzZWQuCisgKgorICogUmV0dXJucyBAY291bnQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHRvbW95b193cml0ZV9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKiBPcGVyYXRpb25zIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRvbW95b19vcGVyYXRpb25zID0geworCS5vcGVuICAgID0gdG9tb3lvX29wZW4sCisJLnJlbGVhc2UgPSB0b21veW9fcmVsZWFzZSwKKwkucmVhZCAgICA9IHRvbW95b19yZWFkLAorCS53cml0ZSAgID0gdG9tb3lvX3dyaXRlLAorfTsKKworLyoqCisgKiB0b21veW9fY3JlYXRlX2VudHJ5IC0gQ3JlYXRlIGludGVyZmFjZSBmaWxlcyB1bmRlciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGRpcmVjdG9yeS4KKyAqCisgKiBAbmFtZTogICBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAbW9kZTogICBUaGUgcGVybWlzc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAcGFyZW50OiBUaGUgcGFyZW50IGRpcmVjdG9yeS4KKyAqIEBrZXk6ICAgIFR5cGUgb2YgaW50ZXJmYWNlLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHRvbW95b19jcmVhdGVfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgbW9kZV90IG1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3QgdTgga2V5KQoreworCXNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50LCAoKHU4ICopIE5VTEwpICsga2V5LAorCQkJICAgICAgICZ0b21veW9fb3BlcmF0aW9ucyk7Cit9CisKKy8qKgorICogdG9tb3lvX2luaXRlcmZhY2VfaW5pdCAtIEluaXRpYWxpemUgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IF9faW5pdCB0b21veW9faW5pdGVyZmFjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqdG9tb3lvX2RpcjsKKworCS8qIERvbid0IGNyZWF0ZSBzZWN1cml0eWZzIGVudHJpZXMgdW5sZXNzIHJlZ2lzdGVyZWQuICovCisJaWYgKGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCXJldHVybiAwOworCisJdG9tb3lvX2RpciA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigidG9tb3lvIiwgTlVMTCk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZG9tYWluX3BvbGljeSIsICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0RPTUFJTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZXhjZXB0aW9uX3BvbGljeSIsIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgic2VsZl9kb21haW4iLCAgICAgIDA0MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1NFTEZET01BSU4pOworCXRvbW95b19jcmVhdGVfZW50cnkoIi5kb21haW5fc3RhdHVzIiwgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19ET01BSU5fU1RBVFVTKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCIucHJvY2Vzc19zdGF0dXMiLCAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPQ0VTU19TVEFUVVMpOworCXRvbW95b19jcmVhdGVfZW50cnkoIm1lbWluZm8iLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19NRU1JTkZPKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJwcm9maWxlIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPRklMRSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgibWFuYWdlciIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX01BTkFHRVIpOworCXRvbW95b19jcmVhdGVfZW50cnkoInZlcnNpb24iLCAgICAgICAgICAwNDAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwodG9tb3lvX2luaXRlcmZhY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmggYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjYjdjYwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApAQCAtMCwwICsxLDM1OSBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9jb21tb24uaAorICoKKyAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSAorI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworc3RydWN0IGRlbnRyeTsKK3N0cnVjdCB2ZnNtb3VudDsKKworLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgaG9sZGluZyBwYXRobmFtZXMuICovCitzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyIHsKKwljaGFyIGJ1ZmZlcls0MDk2XTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBhIHRva2VuLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGhhc2g7ICAgICAgICAgIC8qID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgc3RybGVuKG5hbWUpKSAqLworCXUxNiB0b3RhbF9sZW47ICAgICAvKiA9IHN0cmxlbihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1MTYgY29uc3RfbGVuOyAgICAgLyogPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSkgICAgICovCisJYm9vbCBpc19kaXI7ICAgICAgIC8qID0gdG9tb3lvX3N0cmVuZHN3aXRoKG5hbWUsICIvIikgICAgICAqLworCWJvb2wgaXNfcGF0dGVybmVkOyAvKiA9IHRvbW95b19wYXRoX2NvbnRhaW5zX3BhdHRlcm4obmFtZSkgKi8KKwl1MTYgZGVwdGg7ICAgICAgICAgLyogPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKSAgICAgICAgICAgICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgbWF4IGxlbmd0aCBvZiBhIHRva2VuLgorICoKKyAqIEEgdG9rZW4gY29uc2lzdHMgb2Ygb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVycy4KKyAqIE5vbiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBhIHRva2VuIGlzIHJlcHJlc2VudGVkIGluIFxvb28gc3R5bGUKKyAqIG9jdGFsIHN0cmluZy4gVGh1cywgXCBpdHNlbGYgaXMgcmVwcmVzZW50ZWQgYXMgXFwuCisgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gNDAwMAorCisvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgcmVxdWVzdGVkIHBhdGhuYW1lLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIHsKKwkvKiBLZWVwICJoZWFkIiBmaXJzdCwgZm9yIHRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8gdG9tb3lvX2ZyZWUoKS4gKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBoZWFkOworCWNoYXIgYmFyaWllcjFbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCisJY2hhciBib2R5W1RPTU9ZT19NQVhfUEFUSE5BTUVfTEVOXTsKKwljaGFyIGJhcnJpZXIyWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLworfTsKKworLyoKKyAqIENvbW1vbiBoZWFkZXIgZm9yIGhvbGRpbmcgQUNMIGVudHJpZXMuCisgKgorICogUGFja2luZyAic3RydWN0IHRvbW95b19hY2xfaW5mbyIgYWxsb3dzCisgKiAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiB0byBlbWJlZCAidTE2IiBhbmQKKyAqICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIHRvIGVtYmVkICJ1OCIKKyAqIHdpdGhvdXQgZW5sYXJnaW5nIHRoZWlyIHN0cnVjdHVyZSBzaXplLgorICovCitzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyoKKwkgKiBUeXBlIG9mIHRoaXMgQUNMIGVudHJ5LgorCSAqCisJICogTVNCIGlzIGlzX2RlbGV0ZWQgZmxhZy4KKwkgKi8KKwl1OCB0eXBlOworfSBfX3BhY2tlZDsKKworLyogVGhpcyBBQ0wgZW50cnkgaXMgZGVsZXRlZC4gICAgICAgICAgICovCisjZGVmaW5lIFRPTU9ZT19BQ0xfREVMRVRFRCAgICAgICAgMHg4MAorCisvKiBTdHJ1Y3R1cmUgZm9yIGRvbWFpbiBpbmZvcm1hdGlvbi4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjbF9pbmZvX2xpc3Q7CisJLyogTmFtZSBvZiB0aGlzIGRvbWFpbi4gTmV2ZXIgTlVMTC4gICAgICAgICAgKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKKwl1OCBwcm9maWxlOyAgICAgICAgLyogUHJvZmlsZSBudW1iZXIgdG8gdXNlLiAqLworCXU4IGlzX2RlbGV0ZWQ7ICAgICAvKiBEZWxldGUgZmxhZy4KKwkJCSAgICAgIDAgPSBhY3RpdmUuCisJCQkgICAgICAxID0gZGVsZXRlZCBidXQgdW5kZWxldGFibGUuCisJCQkgICAgICAyNTUgPSBkZWxldGVkIGFuZCBubyBsb25nZXIgdW5kZWxldGFibGUuICovCisJYm9vbCBxdW90YV93YXJuZWQ7IC8qIFF1b3RhIHdhcm5uaW5nIGZsYWcuICAgKi8KKwkvKiBET01BSU5fRkxBR1NfKi4gVXNlIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoKSB0byBtb2RpZnkuICovCisJdTggZmxhZ3M7Cit9OworCisvKiBQcm9maWxlIG51bWJlciBpcyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1LiAqLworI2RlZmluZSBUT01PWU9fTUFYX1BST0ZJTEVTIDI1NgorCisvKiBJZ25vcmUgImFsbG93X3JlYWQiIGRpcmVjdGl2ZSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAxCisvKgorICogVGhpcyBkb21haW4gd2FzIHVuYWJsZSB0byBjcmVhdGUgYSBuZXcgZG9tYWluIGF0IHRvbW95b19maW5kX25leHRfZG9tYWluKCkKKyAqIGJlY2F1c2UgdGhlIG5hbWUgb2YgdGhlIGRvbWFpbiB0byBiZSBjcmVhdGVkIHdhcyB0b28gbG9uZyBvcgorICogaXQgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4KKyAqIE1vcmUgdGhhbiBvbmUgcHJvY2VzcyBjb250aW51ZWQgZXhlY3ZlKCkgd2l0aG91dCBkb21haW4gdHJhbnNpdGlvbi4KKyAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEICAgICAgICAyCisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZWFkL3dyaXRlIiwgImFsbG93X2V4ZWN1dGUiLCAiYWxsb3dfcmVhZCIsCisgKiAiYWxsb3dfd3JpdGUiLCAiYWxsb3dfY3JlYXRlIiwgImFsbG93X3VubGluayIsICJhbGxvd19ta2RpciIsICJhbGxvd19ybWRpciIsCisgKiAiYWxsb3dfbWtmaWZvIiwgImFsbG93X21rc29jayIsICJhbGxvd19ta2Jsb2NrIiwgImFsbG93X21rY2hhciIsCisgKiAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIgYW5kICJhbGxvd19yZXdyaXRlIiBkaXJlY3RpdmUuCisgKi8KK3N0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICovCisJdTE2IHBlcm07CisJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVuYW1lIiBhbmQgImFsbG93X2xpbmsiIGRpcmVjdGl2ZS4gKi8KK3N0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICovCisJdTggcGVybTsKKwkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUxOworCS8qIFBvaW50ZXIgdG8gc2luZ2xlIHBhdGhuYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTI7Cit9OworCisvKiBLZXl3b3JkcyBmb3IgQUNMcy4gKi8KKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxJQVMgICAgICAgICAgICAgICAgICAgICAiYWxpYXMgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEICAgICAgICAgICAgICAgICJhbGxvd19yZWFkICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVMRVRFICAgICAgICAgICAgICAgICAgICAiZGVsZXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICAgICAgICAgICAgICAiZGVueV9yZXdyaXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOICAgICAgICAgICAgICAiZmlsZV9wYXR0ZXJuICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4gICAgICAgICAiaW5pdGlhbGl6ZV9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTiAgICAgICAgICAgICAgICJrZWVwX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgIm5vX2luaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4gICAgICAgICAgICAibm9fa2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9VTkRFTEVURSAgICAgICAgICAgICAgICAgICJ1bmRlbGV0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFICAgICAgICAgICAgICAgInVzZV9wcm9maWxlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEICAiaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkIgorLyogQSBkb21haW4gZGVmaW5pdGlvbiBzdGFydHMgd2l0aCA8a2VybmVsPi4gKi8KKyNkZWZpbmUgVE9NT1lPX1JPT1RfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAiPGtlcm5lbD4iCisjZGVmaW5lIFRPTU9ZT19ST09UX05BTUVfTEVOICAgICAgICAgICAgICAgICAgICAgKHNpemVvZihUT01PWU9fUk9PVF9OQU1FKSAtIDEpCisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KKyNkZWZpbmUgVE9NT1lPX01BQ19GT1JfRklMRSAgICAgICAgICAgICAgICAgIDAgIC8qIGRvbWFpbl9wb2xpY3kuY29uZiAqLworI2RlZmluZSBUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSAgICAgICAgICAgICAgMQorI2RlZmluZSBUT01PWU9fVkVSQk9TRSAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVggICAgICAgICAgICAgMworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlYWRpbmcvd3JpdGluZyBwb2xpY3kgdmlhIHNlY3VyaXR5ZnMgaW50ZXJmYWNlcy4gKi8KK3N0cnVjdCB0b21veW9faW9fYnVmZmVyIHsKKwlpbnQgKCpyZWFkKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CisJaW50ICgqd3JpdGUpIChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqKTsKKwkvKiBFeGNsdXNpdmUgbG9jayBmb3IgdGhpcyBzdHJ1Y3R1cmUuICAgKi8KKwlzdHJ1Y3QgbXV0ZXggaW9fc2VtOworCS8qIFRoZSBwb3NpdGlvbiBjdXJyZW50bHkgcmVhZGluZyBmcm9tLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWRfdmFyMTsKKwkvKiBFeHRyYSB2YXJpYWJsZXMgZm9yIHJlYWRpbmcuICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFkX3ZhcjI7CisJLyogVGhlIHBvc2l0aW9uIGN1cnJlbnRseSB3cml0aW5nIHRvLiAgICovCisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqd3JpdGVfdmFyMTsKKwkvKiBUaGUgc3RlcCBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgKi8KKwlpbnQgcmVhZF9zdGVwOworCS8qIEJ1ZmZlciBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgICAqLworCWNoYXIgKnJlYWRfYnVmOworCS8qIEVPRiBmbGFnIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAqLworCWJvb2wgcmVhZF9lb2Y7CisJLyogUmVhZCBkb21haW4gQUNMIG9mIHNwZWNpZmllZCBQSUQ/ICAgICovCisJYm9vbCByZWFkX3NpbmdsZV9kb21haW47CisJLyogRXh0cmEgdmFyaWFibGUgZm9yIHJlYWRpbmcuICAgICAgICAgICovCisJdTggcmVhZF9iaXQ7CisJLyogQnl0ZXMgYXZhaWxhYmxlIGZvciByZWFkaW5nLiAgICAgICAgICovCisJaW50IHJlYWRfYXZhaWw7CisJLyogU2l6ZSBvZiByZWFkIGJ1ZmZlci4gICAgICAgICAgICAgICAgICovCisJaW50IHJlYWRidWZfc2l6ZTsKKwkvKiBCdWZmZXIgZm9yIHdyaXRpbmcuICAgICAgICAgICAgICAgICAgKi8KKwljaGFyICp3cml0ZV9idWY7CisJLyogQnl0ZXMgYXZhaWxhYmxlIGZvciB3cml0aW5nLiAgICAgICAgICovCisJaW50IHdyaXRlX2F2YWlsOworCS8qIFNpemUgb2Ygd3JpdGUgYnVmZmVyLiAgICAgICAgICAgICAgICAqLworCWludCB3cml0ZWJ1Zl9zaXplOworfTsKKworLyogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWluIGhhcyB0b28gbWFueSBBQ0wgZW50cmllcyB0byBob2xkLiAqLworYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4pOworLyogVHJhbnNhY3Rpb25hbCBzcHJpbnRmKCkgZm9yIHBvbGljeSBkdW1wLiAqLworYm9vbCB0b21veW9faW9fcHJpbnRmKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbm5hbWUgaXMgY29ycmVjdC4gKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbik7CisvKiBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBpcyBjb3JyZWN0LiAqLworYm9vbCB0b21veW9faXNfY29ycmVjdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzOCBzdGFydF90eXBlLAorCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUsCisJCQkgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pOworLyogQ2hlY2sgd2hldGhlciB0aGUgdG9rZW4gY2FuIGJlIGEgZG9tYWlubmFtZS4gKi8KK2Jvb2wgdG9tb3lvX2lzX2RvbWFpbl9kZWYoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICovCitib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuKTsKKy8qIFJlYWQgImFsaWFzIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9hbGlhc19wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyoKKyAqIFJlYWQgImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeQorICogaW4gZXhjZXB0aW9uIHBvbGljeS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFJlYWQgImtlZXBfZG9tYWluIiBhbmQgIm5vX2tlZXBfZG9tYWluIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJmaWxlX3BhdHRlcm4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitib29sIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJhbGxvd19yZWFkIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAiZGVueV9yZXdyaXRlIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBXcml0ZSBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIG1lc3NhZ2UgdG8gY29uc29sZT8gKi8KK2Jvb2wgdG9tb3lvX3ZlcmJvc2VfbW9kZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOworLyogQ29udmVydCBkb3VibGUgcGF0aCBvcGVyYXRpb24gdG8gb3BlcmF0aW9uIG5hbWUuICovCitjb25zdCBjaGFyICp0b21veW9fZHAya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pOworLyogR2V0IHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gZG9tYWlubmFtZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbGFzdF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbik7CisvKiBHZXQgd2FybmluZyBtZXNzYWdlLiAqLworY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKTsKKy8qIENvbnZlcnQgc2luZ2xlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLworY29uc3QgY2hhciAqdG9tb3lvX3NwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKKy8qIERlbGV0ZSBhIGRvbWFpbi4gKi8KK2ludCB0b21veW9fZGVsZXRlX2RvbWFpbihjaGFyICpkYXRhKTsKKy8qIENyZWF0ZSAiYWxpYXMiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKgorICogQ3JlYXRlICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkKKyAqIGluIGV4Y2VwdGlvbiBwb2xpY3kuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyoKKyAqIENyZWF0ZSAiYWxsb3dfcmVhZC93cml0ZSIsICJhbGxvd19leGVjdXRlIiwgImFsbG93X3JlYWQiLCAiYWxsb3dfd3JpdGUiLAorICogImFsbG93X2NyZWF0ZSIsICJhbGxvd191bmxpbmsiLCAiYWxsb3dfbWtkaXIiLCAiYWxsb3dfcm1kaXIiLAorICogImFsbG93X21rZmlmbyIsICJhbGxvd19ta3NvY2siLCAiYWxsb3dfbWtibG9jayIsICJhbGxvd19ta2NoYXIiLAorICogImFsbG93X3RydW5jYXRlIiwgImFsbG93X3N5bWxpbmsiLCAiYWxsb3dfcmV3cml0ZSIsICJhbGxvd19yZW5hbWUiIGFuZAorICogImFsbG93X2xpbmsiIGVudHJ5IGluIGRvbWFpbiBwb2xpY3kuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koY2hhciAqZGF0YSwgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImFsbG93X3JlYWQiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBDcmVhdGUgImRlbnlfcmV3cml0ZSIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2ludCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJmaWxlX3BhdHRlcm4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIEZpbmQgYSBkb21haW4gYnkgdGhlIGdpdmVuIG5hbWUuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisvKiBGaW5kIG9yIGNyZWF0ZSBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKGNvbnN0IGNoYXIgKgorCQkJCQkJCSAgICBkb21haW5uYW1lLAorCQkJCQkJCSAgICBjb25zdCB1OCBwcm9maWxlKTsKKy8qIFVuZGVsZXRlIGEgZG9tYWluLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX3VuZGVsZXRlX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy8qIENoZWNrIG1vZGUgZm9yIHNwZWNpZmllZCBmdW5jdGlvbmFsaXR5LiAqLwordW5zaWduZWQgaW50IHRvbW95b19jaGVja19mbGFncyhjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJY29uc3QgdTggaW5kZXgpOworLyogQWxsb2NhdGUgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLiAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KGNvbnN0IHU4IGFjbF90eXBlKTsKKy8qIEZpbGwgaW4gInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBtZW1iZXJzLiAqLwordm9pZCB0b21veW9fZmlsbF9wYXRoX2luZm8oc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnB0cik7CisvKiBSdW4gcG9saWN5IGxvYWRlciB3aGVuIC9zYmluL2luaXQgc3RhcnRzLiAqLwordm9pZCB0b21veW9fbG9hZF9wb2xpY3koY29uc3QgY2hhciAqZmlsZW5hbWUpOworLyogQ2hhbmdlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi0+ZmxhZ3MuICovCit2b2lkIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlLCBjb25zdCB1OCBmbGFncyk7CisKKy8qIHN0cmNtcCgpIGZvciAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIHN0cnVjdHVyZS4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9fcGF0aGNtcChjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYSwKKwkJCQkgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpiKQoreworCXJldHVybiBhLT5oYXNoICE9IGItPmhhc2ggfHwgc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCisvKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTEoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCXJldHVybiBwdHItPnR5cGUgJiB+VE9NT1lPX0FDTF9ERUxFVEVEOworfQorCisvKiBHZXQgdHlwZSBvZiBhbiBBQ0wgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19hY2xfdHlwZTIoc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCXJldHVybiBwdHItPnR5cGU7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX3ZhbGlkIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgdmFsaWQgY2hhci4KKyAqCisgKiBAYzogVGhlIGNoYXJhY3RlciB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGMgaXMgYSB2YWxpZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc192YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgPiAnICcgJiYgYyA8IDEyNzsKK30KKworLyoqCisgKiB0b21veW9faXNfaW52YWxpZCAtIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhbiBpbnZhbGlkIGNoYXIuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfaW52YWxpZChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgJiYgKGMgPD0gJyAnIHx8IGMgPj0gMTI3KTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19kb21haW5fbGlzdDsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHRvbW95b19kb21haW5fbGlzdF9sb2NrOworCisvKiBMb2NrIGZvciBkb21haW4tPmFjbF9pbmZvX2xpc3QuICovCitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSB0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jazsKKworLyogSGFzIC9zYmluL2luaXQgc3RhcnRlZD8gKi8KK2V4dGVybiBib29sIHRvbW95b19wb2xpY3lfbG9hZGVkOworCisvKiBUaGUga2VybmVsJ3MgZG9tYWluLiAqLworZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9jb29raWUgLSBpdGVyYXRlIG92ZXIgYSBsaXN0IHdpdGggY29va2llLgorICogQHBvczogICAgICAgIHRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBjb29raWU6ICAgICB0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgY29va2llLgorICogQGhlYWQ6ICAgICAgIHRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKgorICogU2FtZSB3aXRoIGxpc3RfZm9yX2VhY2goKSBleGNlcHQgdGhhdCB0aGlzIHByaW1pdGl2ZSB1c2VzIEBjb29raWUKKyAqIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGl0ZXJhdGlvbi4KKyAqIEBjb29raWUgbXVzdCBiZSBOVUxMIHdoZW4gaXRlcmF0aW9uIHN0YXJ0cywgYW5kIEBjb29raWUgd2lsbCBiZWNvbWUKKyAqIE5VTEwgd2hlbiBpdGVyYXRpb24gZmluaXNoZXMuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBjb29raWUsIGhlYWQpICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yICgoeyBpZiAoIWNvb2tpZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICBjb29raWUgPSBoZWFkOyB9KSwgICAgICAgICAgICAgICBcCisJICAgICBwb3MgPSAoY29va2llKS0+bmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpIHx8ICgoY29va2llKSA9IE5VTEwpOyBcCisJICAgICAoY29va2llKSA9IHBvcywgcG9zID0gcG9zLT5uZXh0KQorCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSCkgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9kb21haW4uYyBiL3NlY3VyaXR5L3RvbW95by9kb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNhNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCkBAIC0wLDAgKzEsODc4IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisjaW5jbHVkZSAicmVhbHBhdGguaCIKKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisKKy8qIFZhcmlhYmxlcyBkZWZpbml0aW9ucy4qLworCisvKiBUaGUgaW5pdGlhbCBkb21haW4uICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLworTElTVF9IRUFEKHRvbW95b19kb21haW5fbGlzdCk7CitERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKworLyogU3RydWN0dXJlIGZvciAiaW5pdGlhbGl6ZV9kb21haW4iIGFuZCAibm9faW5pdGlhbGl6ZV9kb21haW4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOyAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07CisJYm9vbCBpc19kZWxldGVkOworCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIi4gICovCisJLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLworCWJvb2wgaXNfbGFzdF9uYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAia2VlcF9kb21haW4iIGFuZCAibm9fa2VlcF9kb21haW4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsgICAgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLworCWJvb2wgaXNfZGVsZXRlZDsKKwlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19rZWVwX2RvbWFpbiIuICAgICAgICAqLworCS8qIFRydWUgaWYgdGhlIGRvbWFpbm5hbWUgaXMgdG9tb3lvX2dldF9sYXN0X25hbWUoKS4gKi8KKwlib29sIGlzX2xhc3RfbmFtZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImFsaWFzIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpvcmlnaW5hbF9uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICphbGlhc2VkX25hbWU7CisJYm9vbCBpc19kZWxldGVkOworfTsKKworLyoqCisgKiB0b21veW9fc2V0X2RvbWFpbl9mbGFnIC0gU2V0IG9yIGNsZWFyIGRvbWFpbidzIGF0dHJpYnV0ZSBmbGFncy4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqIEBmbGFnczogICAgIEZsYWdzIHRvIHNldCBvciBjbGVhci4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX3NldF9kb21haW5fZmxhZyhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUsIGNvbnN0IHU4IGZsYWdzKQoreworCS8qIFdlIG5lZWQgdG8gc2VyaWFsaXplIGJlY2F1c2UgdGhpcyBpcyBiaXRmaWVsZCBvcGVyYXRpb24uICovCisJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlzcGluX2xvY2soJmxvY2spOworCWlmICghaXNfZGVsZXRlKQorCQlkb21haW4tPmZsYWdzIHw9IGZsYWdzOworCWVsc2UKKwkJZG9tYWluLT5mbGFncyAmPSB+ZmxhZ3M7CisJc3Bpbl91bmxvY2soJmxvY2spOworCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KK30KKworLyoqCisgKiB0b21veW9fZ2V0X2xhc3RfbmFtZSAtIEdldCBsYXN0IGNvbXBvbmVudCBvZiBhIGRvbWFpbm5hbWUuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKgorICogUmV0dXJucyB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGRvbWFpbm5hbWUuCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbGFzdF9uYW1lKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbikKK3sKKwljb25zdCBjaGFyICpjcDAgPSBkb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqY3AxID0gc3RycmNocihjcDAsICcgJyk7CisKKwlpZiAoY3AxKQorCQlyZXR1cm4gY3AxICsgMTsKKwlyZXR1cm4gY3AwOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4gTWF5IGJlIE5VTEwuCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4KKyAqIEBpc19ub3Q6ICAgICBUcnVlIGlmIGl0IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcHJvZ3JhbSwKKwkJCQkJCSAgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcHJvZ3JhbTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZSA9IE5VTEw7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2xhc3RfbmFtZSA9IGZhbHNlOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHByb2dyYW0sIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KKwlpZiAoZG9tYWlubmFtZSkgeworCQlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCisJCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQkJaXNfbGFzdF9uYW1lID0gdHJ1ZTsKKwkJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoZG9tYWlubmFtZSk7CisJCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlzYXZlZF9wcm9ncmFtID0gdG9tb3lvX3NhdmVfbmFtZShwcm9ncmFtKTsKKwlpZiAoIXNhdmVkX3Byb2dyYW0pCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfbm90ICE9IGlzX25vdCB8fAorCQkgICAgcHRyLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUgfHwKKwkJICAgIHB0ci0+cHJvZ3JhbSAhPSBzYXZlZF9wcm9ncmFtKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPmRvbWFpbm5hbWUgPSBzYXZlZF9kb21haW5uYW1lOworCW5ld19lbnRyeS0+cHJvZ3JhbSA9IHNhdmVkX3Byb2dyYW07CisJbmV3X2VudHJ5LT5pc19ub3QgPSBpc19ub3Q7CisJbmV3X2VudHJ5LT5pc19sYXN0X25hbWUgPSBpc19sYXN0X25hbWU7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpIHsKKwkJY29uc3QgY2hhciAqbm87CisJCWNvbnN0IGNoYXIgKmZyb20gPSAiIjsKKwkJY29uc3QgY2hhciAqZG9tYWluID0gIiI7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSwKKwkJCQkgIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCW5vID0gcHRyLT5pc19ub3QgPyAibm9fIiA6ICIiOworCQlpZiAocHRyLT5kb21haW5uYW1lKSB7CisJCQlmcm9tID0gIiBmcm9tICI7CisJCQlkb21haW4gPSBwdHItPmRvbWFpbm5hbWUtPm5hbWU7CisJCX0KKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzIiBUT01PWU9fS0VZV09SRF9JTklUSUFMSVpFX0RPTUFJTgorCQkJCSAgICAgICIlcyVzJXNcbiIsIG5vLCBwdHItPnByb2dyYW0tPm5hbWUsIGZyb20sCisJCQkJICAgICAgZG9tYWluKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19ub3Q6ICAgIFRydWUgaWYgaXQgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyeS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKKworCWlmIChjcCkgeworCQkqY3AgPSAnXDAnOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoY3AgKyA2LCBkYXRhLAorCQkJCQkJCSAgICAgIGlzX25vdCwKKwkJCQkJCQkgICAgICBpc19kZWxldGUpOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoTlVMTCwgZGF0YSwgaXNfbm90LAorCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcHJvZ3JhbSBjYXVzZXMgZG9tYWlubmFtZSByZWluaXRpYWxpemF0aW9uLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4KKyAqIEBsYXN0X25hbWU6ICBUaGUgbGFzdCBjb21wb25lbnQgb2YgQGRvbWFpbm5hbWUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIGV4ZWN1dGluZyBAcHJvZ3JhbSByZWluaXRpYWxpemVzIGRvbWFpbiB0cmFuc2l0aW9uLAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGRvbWFpbm5hbWUsCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbSwKKwkJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGxhc3RfbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOworCWJvb2wgZmxhZyA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKHB0ci0+ZG9tYWlubmFtZSkgeworCQkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgeworCQkJCWlmIChwdHItPmRvbWFpbm5hbWUgIT0gZG9tYWlubmFtZSkKKwkJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWlmICh0b21veW9fcGF0aGNtcChwdHItPmRvbWFpbm5hbWUsIGxhc3RfbmFtZSkpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmICh0b21veW9fcGF0aGNtcChwdHItPnByb2dyYW0sIHByb2dyYW0pKQorCQkJY29udGludWU7CisJCWlmIChwdHItPmlzX25vdCkgeworCQkJZmxhZyA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJZmxhZyA9IHRydWU7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZmxhZzsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLiBNYXkgYmUgTlVMTC4KKyAqIEBpc19ub3Q6ICAgICBUcnVlIGlmIGl0IGlzICJub19rZWVwX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqcHJvZ3JhbSwKKwkJCQkJICAgICBjb25zdCBib29sIGlzX25vdCwKKwkJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfcHJvZ3JhbSA9IE5VTEw7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWJvb2wgaXNfbGFzdF9uYW1lID0gZmFsc2U7CisKKwlpZiAoIXRvbW95b19pc19kb21haW5fZGVmKGRvbWFpbm5hbWUpICYmCisJICAgIHRvbW95b19pc19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCWlzX2xhc3RfbmFtZSA9IHRydWU7CisJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwcm9ncmFtKSB7CisJCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzYXZlZF9wcm9ncmFtID0gdG9tb3lvX3NhdmVfbmFtZShwcm9ncmFtKTsKKwkJaWYgKCFzYXZlZF9wcm9ncmFtKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX25vdCAhPSBpc19ub3QgfHwKKwkJICAgIHB0ci0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lIHx8CisJCSAgICBwdHItPnByb2dyYW0gIT0gc2F2ZWRfcHJvZ3JhbSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwluZXdfZW50cnktPnByb2dyYW0gPSBzYXZlZF9wcm9ncmFtOworCW5ld19lbnRyeS0+aXNfbm90ID0gaXNfbm90OworCW5ld19lbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfbm90OiAgICBUcnVlIGlmIGl0IGlzICJub19rZWVwX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCSAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3Ryc3RyKGRhdGEsICIgZnJvbSAiKTsKKworCWlmIChjcCkgeworCQkqY3AgPSAnXDAnOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNwICsgNiwgZGF0YSwgaXNfbm90LAorCQkJCQkJCSBpc19kZWxldGUpOworCX0KKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGRhdGEsIE5VTEwsIGlzX25vdCwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW5fa2VlcGVyX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOworCQljb25zdCBjaGFyICpubzsKKwkJY29uc3QgY2hhciAqZnJvbSA9ICIiOworCQljb25zdCBjaGFyICpwcm9ncmFtID0gIiI7CisKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJbm8gPSBwdHItPmlzX25vdCA/ICJub18iIDogIiI7CisJCWlmIChwdHItPnByb2dyYW0pIHsKKwkJCWZyb20gPSAiIGZyb20gIjsKKwkJCXByb2dyYW0gPSBwdHItPnByb2dyYW0tPm5hbWU7CisJCX0KKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzIiBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTgorCQkJCSAgICAgICIlcyVzJXNcbiIsIG5vLCBwcm9ncmFtLCBmcm9tLAorCQkJCSAgICAgIHB0ci0+ZG9tYWlubmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBwcm9ncmFtIGNhdXNlcyBkb21haW4gdHJhbnNpdGlvbiBzdXBwcmVzc2lvbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCisgKiBAbGFzdF9uYW1lOiAgVGhlIGxhc3QgY29tcG9uZW50IG9mIEBkb21haW5uYW1lLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBleGVjdXRpbmcgQHByb2dyYW0gc3VwcmVzc2VzIGRvbWFpbiB0cmFuc2l0aW9uLAorICogZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2tlZXBlcihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW0sCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpsYXN0X25hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CisJYm9vbCBmbGFnID0gZmFsc2U7CisKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgeworCQkJaWYgKHB0ci0+ZG9tYWlubmFtZSAhPSBkb21haW5uYW1lKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKHRvbW95b19wYXRoY21wKHB0ci0+ZG9tYWlubmFtZSwgbGFzdF9uYW1lKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAocHRyLT5wcm9ncmFtICYmIHRvbW95b19wYXRoY21wKHB0ci0+cHJvZ3JhbSwgcHJvZ3JhbSkpCisJCQljb250aW51ZTsKKwkJaWYgKHB0ci0+aXNfbm90KSB7CisJCQlmbGFnID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlmbGFnID0gdHJ1ZTsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZmxhZzsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2FsaWFzX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAb3JpZ2luYWxfbmFtZTogVGhlIG9yaWdpbmFsIHByb2dyYW0ncyByZWFsIG5hbWUuCisgKiBAYWxpYXNlZF9uYW1lOiAgVGhlIHN5bWJvbGljIHByb2dyYW0ncyBzeW1ib2xpYyBsaW5rJ3MgbmFtZS4KKyAqIEBpc19kZWxldGU6ICAgICBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5KGNvbnN0IGNoYXIgKm9yaWdpbmFsX25hbWUsCisJCQkJICAgICBjb25zdCBjaGFyICphbGlhc2VkX25hbWUsCisJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9vcmlnaW5hbF9uYW1lOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9hbGlhc2VkX25hbWU7CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChvcmlnaW5hbF9uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChhbGlhc2VkX25hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogTm8gcGF0dGVybnMgYWxsb3dlZC4gKi8KKwlzYXZlZF9vcmlnaW5hbF9uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShvcmlnaW5hbF9uYW1lKTsKKwlzYXZlZF9hbGlhc2VkX25hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGFsaWFzZWRfbmFtZSk7CisJaWYgKCFzYXZlZF9vcmlnaW5hbF9uYW1lIHx8ICFzYXZlZF9hbGlhc2VkX25hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPm9yaWdpbmFsX25hbWUgIT0gc2F2ZWRfb3JpZ2luYWxfbmFtZSB8fAorCQkgICAgcHRyLT5hbGlhc2VkX25hbWUgIT0gc2F2ZWRfYWxpYXNlZF9uYW1lKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPm9yaWdpbmFsX25hbWUgPSBzYXZlZF9vcmlnaW5hbF9uYW1lOworCW5ld19lbnRyeS0+YWxpYXNlZF9uYW1lID0gc2F2ZWRfYWxpYXNlZF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19hbGlhc19saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9hbGlhc19wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9hbGlhc19wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX2FsaWFzX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5LCBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfQUxJQVMgIiVzICVzXG4iLAorCQkJCSAgICAgIHB0ci0+b3JpZ2luYWxfbmFtZS0+bmFtZSwKKwkJCQkgICAgICBwdHItPmFsaWFzZWRfbmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9hbGlhc19wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJY2hhciAqY3AgPSBzdHJjaHIoZGF0YSwgJyAnKTsKKworCWlmICghY3ApCisJCXJldHVybiAtRUlOVkFMOworCSpjcCsrID0gJ1wwJzsKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeShkYXRhLCBjcCwgaXNfZGVsZXRlKTsKK30KKworLyogRG9tYWluIGNyZWF0ZS9kZWxldGUvdW5kZWxldGUgaGFuZGxlci4gKi8KKworLyogI2RlZmluZSBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFICovCisKKy8qKgorICogdG9tb3lvX2RlbGV0ZV9kb21haW4gLSBEZWxldGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK2ludCB0b21veW9fZGVsZXRlX2RvbWFpbihjaGFyICpkb21haW5uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCisJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCXByaW50ayhLRVJOX0RFQlVHICJ0b21veW9fZGVsZXRlX2RvbWFpbiAlc1xuIiwgZG9tYWlubmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJMaXN0OiAlcCAldVxuIiwgZG9tYWluLCBkb21haW4tPmlzX2RlbGV0ZWQpOworCX0KKyNlbmRpZgorCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBkb21haW4/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluMjsKKwkJLyogTmV2ZXIgZGVsZXRlIHRvbW95b19rZXJuZWxfZG9tYWluICovCisJCWlmIChkb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQkJY29udGludWU7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgfHwKKwkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCS8qIE1hcmsgYWxyZWFkeSBkZWxldGVkIGRvbWFpbnMgYXMgbm9uIHVuZGVsZXRhYmxlLiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbjIsICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghZG9tYWluMi0+aXNfZGVsZXRlZCB8fAorCQkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbjItPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCQljb250aW51ZTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCQlpZiAoZG9tYWluMi0+aXNfZGVsZXRlZCAhPSAyNTUpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgIk1hcmtlZCAlcCBhcyBub24gdW5kZWxldGFibGVcbiIsCisJCQkJICAgICAgIGRvbWFpbjIpOworI2VuZGlmCisJCQlkb21haW4yLT5pc19kZWxldGVkID0gMjU1OworCQl9CisJCS8qIERlbGV0ZSBhbmQgbWFyayBhY3RpdmUgZG9tYWluIGFzIHVuZGVsZXRhYmxlLiAqLworCQlkb21haW4tPmlzX2RlbGV0ZWQgPSAxOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1hcmtlZCAlcCBhcyB1bmRlbGV0YWJsZVxuIiwgZG9tYWluKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b191bmRlbGV0ZV9kb21haW4gLSBVbmRlbGV0ZSBhIGRvbWFpbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b191bmRlbGV0ZV9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY2FuZGlkYXRlX2RvbWFpbiA9IE5VTEw7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKworCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwlwcmludGsoS0VSTl9ERUJVRyAidG9tb3lvX3VuZGVsZXRlX2RvbWFpbiAlc1xuIiwgZG9tYWlubmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJMaXN0OiAlcCAldVxuIiwgZG9tYWluLCBkb21haW4tPmlzX2RlbGV0ZWQpOworCX0KKyNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fcGF0aGNtcCgmbmFtZSwgZG9tYWluLT5kb21haW5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCkgeworCQkJLyogVGhpcyBkb21haW4gaXMgYWN0aXZlLiBJIGNhbid0IHVuZGVsZXRlLiAqLworCQkJY2FuZGlkYXRlX2RvbWFpbiA9IE5VTEw7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVwIGlzIGFjdGl2ZS4gSSBjYW4ndCB1bmRlbGV0ZS5cbiIsCisJCQkgICAgICAgZG9tYWluKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwkJLyogSXMgdGhpcyBkb21haW4gdW5kZWxldGFibGU/ICovCisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgPT0gMSkKKwkJCWNhbmRpZGF0ZV9kb21haW4gPSBkb21haW47CisJfQorCWlmIChjYW5kaWRhdGVfZG9tYWluKSB7CisJCWNhbmRpZGF0ZV9kb21haW4tPmlzX2RlbGV0ZWQgPSAwOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVwIHdhcyB1bmRlbGV0ZWQuXG4iLCBjYW5kaWRhdGVfZG9tYWluKTsKKyNlbmRpZgorCX0KKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGNhbmRpZGF0ZV9kb21haW47Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4gLSBDcmVhdGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9maWxlOiAgICBQcm9maWxlIG51bWJlciB0byBhc3NpZ24gaWYgdGhlIGRvbWFpbiB3YXMgbmV3bHkgY3JlYXRlZC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihjb25zdCBjaGFyICoKKwkJCQkJCQkgICAgZG9tYWlubmFtZSwKKwkJCQkJCQkgICAgY29uc3QgdTggcHJvZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9kb21haW5uYW1lOworCisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZG9tYWlubmFtZSk7CisJaWYgKGRvbWFpbikKKwkJZ290byBvdXQ7CisJaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCQlnb3RvIG91dDsKKwlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCisJCWdvdG8gb3V0OworCS8qIENhbiBJIHJldXNlIG1lbW9yeSBvZiBkZWxldGVkIGRvbWFpbj8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwkJYm9vbCBmbGFnOworCQlpZiAoIWRvbWFpbi0+aXNfZGVsZXRlZCB8fAorCQkgICAgZG9tYWluLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUpCisJCQljb250aW51ZTsKKwkJZmxhZyA9IGZhbHNlOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7CisJCQlpZiAodG9tb3lvX3JlYWxfZG9tYWluKHApICE9IGRvbWFpbikKKwkJCQljb250aW51ZTsKKwkJCWZsYWcgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCisJCWlmIChmbGFnKQorCQkJY29udGludWU7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQlwcmludGsoS0VSTl9ERUJVRyAiUmV1c2luZyAlcCAlc1xuIiwgZG9tYWluLAorCQkgICAgICAgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKyNlbmRpZgorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJfQorCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKGRvbWFpbiwgdHJ1ZSwgZG9tYWluLT5mbGFncyk7CisJCWRvbWFpbi0+cHJvZmlsZSA9IHByb2ZpbGU7CisJCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gZmFsc2U7CisJCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCisJCWRvbWFpbi0+aXNfZGVsZXRlZCA9IDA7CisJCWdvdG8gb3V0OworCX0KKwkvKiBObyBtZW1vcnkgcmV1c2FibGUuIENyZWF0ZSB1c2luZyBuZXcgbWVtb3J5LiAqLworCWRvbWFpbiA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqZG9tYWluKSk7CisJaWYgKGRvbWFpbikgeworCQlJTklUX0xJU1RfSEVBRCgmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwkJZG9tYWluLT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwkJZG9tYWluLT5wcm9maWxlID0gcHJvZmlsZTsKKwkJbGlzdF9hZGRfdGFpbCgmZG9tYWluLT5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKKwl9Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZG9tYWluOworfQorCisvKioKKyAqIHRvbW95b19maW5kX25leHRfZG9tYWluIC0gRmluZCBhIGRvbWFpbi4KKyAqCisgKiBAYnBybTogICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBsaW51eF9iaW5wcm0iLgorICogQG5leHRfZG9tYWluOiAgICBQb2ludGVyIHRvIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbikKK3sKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzaXplIG9mIGJ1ZmZlciByZXR1cm5lZCBieQorCSAqIHRvbW95b19yZWFscGF0aCgpID0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4uCisJICovCisJc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqdG1wID0gdG9tb3lvX2FsbG9jKHNpemVvZigqdG1wKSk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqb2xkX2RvbWFpbiA9IHRvbW95b19kb21haW4oKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBOVUxMOworCWNvbnN0IGNoYXIgKm9sZF9kb21haW5fbmFtZSA9IG9sZF9kb21haW4tPmRvbWFpbm5hbWUtPm5hbWU7CisJY29uc3QgY2hhciAqb3JpZ2luYWxfbmFtZSA9IGJwcm0tPmZpbGVuYW1lOworCWNoYXIgKm5ld19kb21haW5fbmFtZSA9IE5VTEw7CisJY2hhciAqcmVhbF9wcm9ncmFtX25hbWUgPSBOVUxMOworCWNoYXIgKnN5bWxpbmtfcHJvZ3JhbV9uYW1lID0gTlVMTDsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKG9sZF9kb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIHI7IC8qIHJlYWwgbmFtZSAqLworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIHM7IC8qIHN5bWxpbmsgbmFtZSAqLworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIGw7IC8qIGxhc3QgbmFtZSAqLworCXN0YXRpYyBib29sIGluaXRpYWxpemVkOworCisJaWYgKCF0bXApCisJCWdvdG8gb3V0OworCisJaWYgKCFpbml0aWFsaXplZCkgeworCQkvKgorCQkgKiBCdWlsdC1pbiBpbml0aWFsaXplcnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcG9saWNpZXMgYXJlCisJCSAqIG5vdCBsb2FkZWQgdW50aWwgc3RhcnRpbmcgL3NiaW4vaW5pdC4KKwkJICovCisJCXRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KE5VTEwsICIvc2Jpbi9ob3RwbHVnIiwKKwkJCQkJCSAgICAgICBmYWxzZSwgZmFsc2UpOworCQl0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShOVUxMLCAiL3NiaW4vbW9kcHJvYmUiLAorCQkJCQkJICAgICAgIGZhbHNlLCBmYWxzZSk7CisJCWluaXRpYWxpemVkID0gdHJ1ZTsKKwl9CisKKwkvKiBHZXQgdG9tb3lvX3JlYWxwYXRoIG9mIHByb2dyYW0uICovCisJcmV0dmFsID0gLUVOT0VOVDsKKwkvKiBJIGhvcGUgdG9tb3lvX3JlYWxwYXRoKCkgd29uJ3QgZmFpbCB3aXRoIC1FTk9NRU0uICovCisJcmVhbF9wcm9ncmFtX25hbWUgPSB0b21veW9fcmVhbHBhdGgob3JpZ2luYWxfbmFtZSk7CisJaWYgKCFyZWFsX3Byb2dyYW1fbmFtZSkKKwkJZ290byBvdXQ7CisJLyogR2V0IHRvbW95b19yZWFscGF0aCBvZiBzeW1ib2xpYyBsaW5rLiAqLworCXN5bWxpbmtfcHJvZ3JhbV9uYW1lID0gdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KG9yaWdpbmFsX25hbWUpOworCWlmICghc3ltbGlua19wcm9ncmFtX25hbWUpCisJCWdvdG8gb3V0OworCisJci5uYW1lID0gcmVhbF9wcm9ncmFtX25hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyKTsKKwlzLm5hbWUgPSBzeW1saW5rX3Byb2dyYW1fbmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJnMpOworCWwubmFtZSA9IHRvbW95b19nZXRfbGFzdF9uYW1lKG9sZF9kb21haW4pOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbCk7CisKKwkvKiBDaGVjayAnYWxpYXMnIGRpcmVjdGl2ZS4gKi8KKwlpZiAodG9tb3lvX3BhdGhjbXAoJnIsICZzKSkgeworCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CisJCS8qIElzIHRoaXMgcHJvZ3JhbSBhbGxvd2VkIHRvIGJlIGNhbGxlZCB2aWEgc3ltYm9saWMgbGlua3M/ICovCisJCWRvd25fcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChwdHItPmlzX2RlbGV0ZWQgfHwKKwkJCSAgICB0b21veW9fcGF0aGNtcCgmciwgcHRyLT5vcmlnaW5hbF9uYW1lKSB8fAorCQkJICAgIHRvbW95b19wYXRoY21wKCZzLCBwdHItPmFsaWFzZWRfbmFtZSkpCisJCQkJY29udGludWU7CisJCQltZW1zZXQocmVhbF9wcm9ncmFtX25hbWUsIDAsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKTsKKwkJCXN0cm5jcHkocmVhbF9wcm9ncmFtX25hbWUsIHB0ci0+YWxpYXNlZF9uYW1lLT5uYW1lLAorCQkJCVRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSk7CisJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oJnIpOworCQkJYnJlYWs7CisJCX0KKwkJdXBfcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJfQorCisJLyogQ2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9uLiAqLworCXJldHZhbCA9IHRvbW95b19jaGVja19leGVjX3Blcm0ob2xkX2RvbWFpbiwgJnIsIHRtcCk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gb3V0OworCisJbmV3X2RvbWFpbl9uYW1lID0gdG1wLT5idWZmZXI7CisJaWYgKHRvbW95b19pc19kb21haW5faW5pdGlhbGl6ZXIob2xkX2RvbWFpbi0+ZG9tYWlubmFtZSwgJnIsICZsKSkgeworCQkvKiBUcmFuc2l0IHRvIHRoZSBjaGlsZCBvZiB0b21veW9fa2VybmVsX2RvbWFpbiBkb21haW4uICovCisJCXNucHJpbnRmKG5ld19kb21haW5fbmFtZSwgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gKyAxLAorCQkJIFRPTU9ZT19ST09UX05BTUUgIiAiICIlcyIsIHJlYWxfcHJvZ3JhbV9uYW1lKTsKKwl9IGVsc2UgaWYgKG9sZF9kb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluICYmCisJCSAgICF0b21veW9fcG9saWN5X2xvYWRlZCkgeworCQkvKgorCQkgKiBOZWVkbid0IHRvIHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluIGJlZm9yZSBzdGFydGluZworCQkgKiAvc2Jpbi9pbml0LiBCdXQgdHJhbnNpdCBmcm9tIGtlcm5lbCBkb21haW4gaWYgZXhlY3V0aW5nCisJCSAqIGluaXRpYWxpemVycyBiZWNhdXNlIHRoZXkgbWlnaHQgc3RhcnQgYmVmb3JlIC9zYmluL2luaXQuCisJCSAqLworCQlkb21haW4gPSBvbGRfZG9tYWluOworCX0gZWxzZSBpZiAodG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIob2xkX2RvbWFpbi0+ZG9tYWlubmFtZSwgJnIsICZsKSkgeworCQkvKiBLZWVwIGN1cnJlbnQgZG9tYWluLiAqLworCQlkb21haW4gPSBvbGRfZG9tYWluOworCX0gZWxzZSB7CisJCS8qIE5vcm1hbCBkb21haW4gdHJhbnNpdGlvbi4gKi8KKwkJc25wcmludGYobmV3X2RvbWFpbl9uYW1lLCBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiArIDEsCisJCQkgIiVzICVzIiwgb2xkX2RvbWFpbl9uYW1lLCByZWFsX3Byb2dyYW1fbmFtZSk7CisJfQorCWlmIChkb21haW4gfHwgc3RybGVuKG5ld19kb21haW5fbmFtZSkgPj0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4pCisJCWdvdG8gZG9uZTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4obmV3X2RvbWFpbl9uYW1lKTsKKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKGRvbWFpbikKKwkJZ290byBkb25lOworCWlmIChpc19lbmZvcmNlKQorCQlnb3RvIGRvbmU7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4obmV3X2RvbWFpbl9uYW1lLAorCQkJCQkJICBvbGRfZG9tYWluLT5wcm9maWxlKTsKKyBkb25lOgorCWlmIChkb21haW4pCisJCWdvdG8gb3V0OworCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy1FUlJPUjogRG9tYWluICclcycgbm90IGRlZmluZWQuXG4iLAorCSAgICAgICBuZXdfZG9tYWluX25hbWUpOworCWlmIChpc19lbmZvcmNlKQorCQlyZXR2YWwgPSAtRVBFUk07CisJZWxzZQorCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKG9sZF9kb21haW4sIGZhbHNlLAorCQkJCSAgICAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEKTsKKyBvdXQ6CisJdG9tb3lvX2ZyZWUocmVhbF9wcm9ncmFtX25hbWUpOworCXRvbW95b19mcmVlKHN5bWxpbmtfcHJvZ3JhbV9uYW1lKTsKKwkqbmV4dF9kb21haW4gPSBkb21haW4gPyBkb21haW4gOiBvbGRfZG9tYWluOworCXRvbW95b19mcmVlKHRtcCk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9maWxlLmMgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjUwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCkBAIC0wLDAgKzEsMTI0MSBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9maWxlLmMKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRG9tYWluLUJhc2VkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ0b21veW8uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDBcMDA0XDAwMlwwMDYiWyh4KSZPX0FDQ01PREVdKQorCisvKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZWFkIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImZpbGVfcGF0dGVybiIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImRlbnlfcmV3cml0ZSIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qIEtleXdvcmQgYXJyYXkgZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbnMuICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX3NwX2tleXdvcmRbVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTF0gPSAicmVhZC93cml0ZSIsCisJW1RPTU9ZT19UWVBFX0VYRUNVVEVfQUNMXSAgICA9ICJleGVjdXRlIiwKKwlbVE9NT1lPX1RZUEVfUkVBRF9BQ0xdICAgICAgID0gInJlYWQiLAorCVtUT01PWU9fVFlQRV9XUklURV9BQ0xdICAgICAgPSAid3JpdGUiLAorCVtUT01PWU9fVFlQRV9DUkVBVEVfQUNMXSAgICAgPSAiY3JlYXRlIiwKKwlbVE9NT1lPX1RZUEVfVU5MSU5LX0FDTF0gICAgID0gInVubGluayIsCisJW1RPTU9ZT19UWVBFX01LRElSX0FDTF0gICAgICA9ICJta2RpciIsCisJW1RPTU9ZT19UWVBFX1JNRElSX0FDTF0gICAgICA9ICJybWRpciIsCisJW1RPTU9ZT19UWVBFX01LRklGT19BQ0xdICAgICA9ICJta2ZpZm8iLAorCVtUT01PWU9fVFlQRV9NS1NPQ0tfQUNMXSAgICAgPSAibWtzb2NrIiwKKwlbVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0xdICAgID0gIm1rYmxvY2siLAorCVtUT01PWU9fVFlQRV9NS0NIQVJfQUNMXSAgICAgPSAibWtjaGFyIiwKKwlbVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMXSAgID0gInRydW5jYXRlIiwKKwlbVE9NT1lPX1RZUEVfU1lNTElOS19BQ0xdICAgID0gInN5bWxpbmsiLAorCVtUT01PWU9fVFlQRV9SRVdSSVRFX0FDTF0gICAgPSAicmV3cml0ZSIsCit9OworCisvKiBLZXl3b3JkIGFycmF5IGZvciBkb3VibGUgcGF0aCBvcGVyYXRpb25zLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19kcF9rZXl3b3JkW1RPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OXSA9IHsKKwlbVE9NT1lPX1RZUEVfTElOS19BQ0xdICAgID0gImxpbmsiLAorCVtUT01PWU9fVFlQRV9SRU5BTUVfQUNMXSAgPSAicmVuYW1lIiwKK307CisKKy8qKgorICogdG9tb3lvX3NwMmtleXdvcmQgLSBHZXQgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICoKKyAqIFJldHVybnMgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICovCitjb25zdCBjaGFyICp0b21veW9fc3Aya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pCit7CisJcmV0dXJuIChvcGVyYXRpb24gPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTikKKwkJPyB0b21veW9fc3Bfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fZHAya2V5d29yZCAtIEdldCB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKgorICogUmV0dXJucyB0aGUgbmFtZSBvZiBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19kcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKK3sKKwlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OKQorCQk/IHRvbW95b19kcF9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19zdHJlbmRzd2l0aCAtIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdG9rZW4uCisgKgorICogQG5hbWU6IFRoZSB0b2tlbiB0byBjaGVjay4KKyAqIEB0YWlsOiBUaGUgdG9rZW4gdG8gZmluZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQG5hbWUgZW5kcyB3aXRoIEB0YWlsLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19zdHJlbmRzd2l0aChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0YWlsKQoreworCWludCBsZW47CisKKwlpZiAoIW5hbWUgfHwgIXRhaWwpCisJCXJldHVybiBmYWxzZTsKKwlsZW4gPSBzdHJsZW4obmFtZSkgLSBzdHJsZW4odGFpbCk7CisJcmV0dXJuIGxlbiA+PSAwICYmICFzdHJjbXAobmFtZSArIGxlbiwgdGFpbCk7Cit9CisKKy8qKgorICogdG9tb3lvX2dldF9wYXRoIC0gR2V0IHJlYWxwYXRoLgorICoKKyAqIEBwYXRoOiBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX2dldF9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEgKmJ1ZiA9IHRvbW95b19hbGxvYyhzaXplb2YoKmJ1ZikpOworCisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCS8qIFJlc2VydmUgb25lIGJ5dGUgZm9yIGFwcGVuZGluZyAiLyIuICovCisJZXJyb3IgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihwYXRoLCBidWYtPmJvZHksCisJCQkJCSAgIHNpemVvZihidWYtPmJvZHkpIC0gMik7CisJaWYgKCFlcnJvcikgeworCQlidWYtPmhlYWQubmFtZSA9IGJ1Zi0+Ym9keTsKKwkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZidWYtPmhlYWQpOworCQlyZXR1cm4gJmJ1Zi0+aGVhZDsKKwl9CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogTG9jayBmb3IgZG9tYWluLT5hY2xfaW5mb19saXN0LiAqLworREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUyLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpOworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB1bmNvbmRpdGlvbmFsbHkgcGVybWl0dGVkIHRvIG9wZW4oKSBmb3IgcmVhZGluZy4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCQkgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDEsIDAsIC0xLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJaWYgKCFzYXZlZF9maWxlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUgLSBDaGVjayBpZiB0aGUgZmlsZSBpcyB1bmNvbmRpdGlvbm5hbHkgcGVybWl0dGVkIHRvIGJlIG9wZW4oKWVkIGZvciByZWFkaW5nLgorICoKKyAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgZG9tYWluIGNhbiBvcGVuIEBmaWxlbmFtZSBmb3IgcmVhZGluZywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfZ2xvYmFsbHlfcmVhZGFibGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSAgICAgZmlsZW5hbWUpCit7CisJc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5ICpwdHI7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCWRvd25fcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwgbGlzdCkgeworCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJgorCQkgICAgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPmZpbGVuYW1lKSkgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCSAgICAgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywKKwkJCQkgc3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5LAorCQkJCSBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAiJXNcbiIsCisJCQkJICAgICAgcHRyLT5maWxlbmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19wYXR0ZXJuX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICoKKyAqIEBwYXR0ZXJuOiAgIFBhdGhuYW1lIHBhdHRlcm4uCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeShjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3BhdHRlcm47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAxLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX3BhdHRlcm4gPSB0b21veW9fc2F2ZV9uYW1lKHBhdHRlcm4pOworCWlmICghc2F2ZWRfcGF0dGVybikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CisJCWlmIChzYXZlZF9wYXR0ZXJuICE9IHB0ci0+cGF0dGVybikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fcGF0dGVybl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuIC0gR2V0IHBhdHRlcm5lZCBwYXRobmFtZS4KKyAqCisgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBmaW5kIHBhdHRlcm5lZCBwYXRobmFtZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcGF0aG5hbWUgcGF0dGVybiBpZiBtYXRjaGVkLCBAZmlsZW5hbWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgordG9tb3lvX2dldF9maWxlX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuID0gTlVMTDsKKworCWRvd25fcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKKwkJCWNvbnRpbnVlOworCQlwYXR0ZXJuID0gcHRyLT5wYXR0ZXJuOworCQlpZiAodG9tb3lvX3N0cmVuZHN3aXRoKHBhdHRlcm4tPm5hbWUsICIvXFwqIikpIHsKKwkJCS8qIERvIG5vdGhpbmcuIFRyeSB0byBmaW5kIHRoZSBiZXR0ZXIgbWF0Y2guICovCisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIHdvdWxkIGJlIHRoZSBiZXR0ZXIgbWF0Y2guIFVzZSB0aGlzLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlpZiAocGF0dGVybikKKwkJZmlsZW5hbWUgPSBwYXR0ZXJuOworCXJldHVybiBmaWxlbmFtZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfcGF0dGVybl9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXJldHVybiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybiAtIFJlYWQgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTiAiJXNcbiIsCisJCQkJICAgICAgcHRyLT5wYXR0ZXJuLT5uYW1lKSkgeworCQkJZG9uZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiIGxpc3QuCisgKgorICogQHBhdHRlcm46ICAgUGF0aG5hbWUgcGF0dGVybiB0aGF0IGFyZSBub3QgcmV3cml0YWJsZSBieSBkZWZhdWx0LgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5KGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpuZXdfZW50cnksICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3BhdHRlcm47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX3BhdHRlcm4gPSB0b21veW9fc2F2ZV9uYW1lKHBhdHRlcm4pOworCWlmICghc2F2ZWRfcGF0dGVybikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPnBhdHRlcm4gIT0gc2F2ZWRfcGF0dGVybikKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgaXMgbm90IHBlcm1pdHRlZCB0byBiZSByZXdyaXRlZC4KKyAqCisgKiBAZmlsZW5hbWU6IEZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgaXMgc3BlY2lmaWVkIGJ5ICJkZW55X3Jld3JpdGUiIGRpcmVjdGl2ZSwKKyAqIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCit7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPnBhdHRlcm4pKQorCQkJY29udGludWU7CisJCWZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJcmV0dXJuIHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX25vX3Jld3JpdGVfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9ERU5ZX1JFV1JJVEUgIiVzXG4iLAorCQkJCSAgICAgIHB0ci0+cGF0dGVybi0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9maWxlX2FjbCAtIFVwZGF0ZSBmaWxlJ3MgcmVhZC93cml0ZS9leGVjdXRlIEFDTC4KKyAqCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KKyAqIEBwZXJtOiAgICAgIFBlcm1pc3Npb24gKGJldHdlZW4gMSB0byA3KS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogVGhpcyBpcyBsZWdhY3kgc3VwcG9ydCBpbnRlcmZhY2UgZm9yIG9sZGVyIHBvbGljeSBzeW50YXguCisgKiBDdXJyZW50IHBvbGljeSBzeW50YXggdXNlcyAiYWxsb3dfcmVhZC93cml0ZSIgaW5zdGVhZCBvZiAiNiIsCisgKiAiYWxsb3dfcmVhZCIgaW5zdGVhZCBvZiAiNCIsICJhbGxvd193cml0ZSIgaW5zdGVhZCBvZiAiMiIsCisgKiAiYWxsb3dfZXhlY3V0ZSIgaW5zdGVhZCBvZiAiMSIuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9maWxlX2FjbChjb25zdCBjaGFyICpmaWxlbmFtZSwgdTggcGVybSwKKwkJCQkgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCisJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlpZiAocGVybSA+IDcgfHwgIXBlcm0pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIHBlcm1pc3Npb24gJyVkICVzJ1xuIiwKKwkJICAgICAgIF9fZnVuY19fLCBwZXJtLCBmaWxlbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZmlsZW5hbWVbMF0gIT0gJ0AnICYmIHRvbW95b19zdHJlbmRzd2l0aChmaWxlbmFtZSwgIi8iKSkKKwkJLyoKKwkJICogT25seSAnYWxsb3dfbWtkaXInIGFuZCAnYWxsb3dfcm1kaXInIGFyZSB2YWxpZCBmb3IKKwkJICogZGlyZWN0b3J5IHBlcm1pc3Npb25zLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJaWYgKHBlcm0gJiA0KQorCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9SRUFEX0FDTCwgZmlsZW5hbWUsCisJCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlpZiAocGVybSAmIDIpCisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1dSSVRFX0FDTCwgZmlsZW5hbWUsCisJCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlpZiAocGVybSAmIDEpCisJCXRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMLAorCQkJCQkgICAgICBmaWxlbmFtZSwgZG9tYWluLCBpc19kZWxldGUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgICAgICAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGVybTogICAgICAgICAgICBQZXJtaXNzaW9uLgorICogQG1heV91c2VfcGF0dGVybjogVHJ1ZSBpZiBwYXR0ZXJuZWQgQUNMIGlzIHBlcm1pdHRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGRvbWFpbiwKKwkJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJIGZpbGVuYW1lLAorCQkJCQkgY29uc3QgdTE2IHBlcm0sCisJCQkJCSBjb25zdCBib29sIG1heV91c2VfcGF0dGVybikKK3sKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCisJCQljb250aW51ZTsKKwkJaWYgKG1heV91c2VfcGF0dGVybiB8fCAhYWNsLT5maWxlbmFtZS0+aXNfcGF0dGVybmVkKSB7CisJCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwKKwkJCQkJCQkgYWNsLT5maWxlbmFtZSkpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQljb250aW51ZTsKKwkJfQorCQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIG9wZW5pbmcgZmlsZXMuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBvcGVyYXRpb246IE1vZGUgKCJyZWFkIiBvciAid3JpdGUiIG9yICJyZWFkL3dyaXRlIiBvciAiZXhlY3V0ZSIpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX2FjbChjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgY29uc3QgdTggb3BlcmF0aW9uKQoreworCXUxNiBwZXJtID0gMDsKKworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCWlmIChvcGVyYXRpb24gPT0gNikKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0w7CisJZWxzZSBpZiAob3BlcmF0aW9uID09IDQpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMOworCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSAyKQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0w7CisJZWxzZSBpZiAob3BlcmF0aW9uID09IDEpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMOworCWVsc2UKKwkJQlVHKCk7CisJcmV0dXJuIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyKGRvbWFpbiwgZmlsZW5hbWUsIHBlcm0sCisJCQkJCSAgICAgb3BlcmF0aW9uICE9IDEpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX3Blcm0yIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igb3BlbmluZyBmaWxlcy4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBlcm06ICAgICAgTW9kZSAoInJlYWQiIG9yICJ3cml0ZSIgb3IgInJlYWQvd3JpdGUiIG9yICJleGVjdXRlIikuCisgKiBAb3BlcmF0aW9uOiBPcGVyYXRpb24gbmFtZSBwYXNzZWQgdXNlZCBmb3IgdmVyYm9zZSBtb2RlLgorICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19maWxlX3Blcm0yKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCisJCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSAgIGNvbnN0IHU4IHBlcm0sIGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKKwkJCQkgICBjb25zdCB1OCBtb2RlKQoreworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWNvbnN0IGNoYXIgKm1zZyA9ICI8dW5rbm93bj4iOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlyZXR1cm4gMDsKKwllcnJvciA9IHRvbW95b19jaGVja19maWxlX2FjbChkb21haW4sIGZpbGVuYW1lLCBwZXJtKTsKKwlpZiAoZXJyb3IgJiYgcGVybSA9PSA0ICYmCisJICAgIChkb21haW4tPmZsYWdzICYgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpID09IDAKKwkgICAgJiYgdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUoZmlsZW5hbWUpKQorCQllcnJvciA9IDA7CisJaWYgKHBlcm0gPT0gNikKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpOworCWVsc2UgaWYgKHBlcm0gPT0gNCkKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9BQ0wpOworCWVsc2UgaWYgKHBlcm0gPT0gMikKKwkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwllbHNlIGlmIChwZXJtID09IDEpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMKTsKKwllbHNlCisJCUJVRygpOworCWlmICghZXJyb3IpCisJCXJldHVybiAwOworCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy0lczogQWNjZXNzICclcyglcykgJXMnIGRlbmllZCAiCisJCSAgICAgICAiZm9yICVzXG4iLCB0b21veW9fZ2V0X21zZyhpc19lbmZvcmNlKSwgbXNnLCBvcGVyYXRpb24sCisJCSAgICAgICBmaWxlbmFtZS0+bmFtZSwgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7CisJaWYgKGlzX2VuZm9yY2UpCisJCXJldHVybiBlcnJvcjsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQkvKiBEb24ndCB1c2UgcGF0dGVybnMgZm9yIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKwkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm5lZF9maWxlID0gKHBlcm0gIT0gMSkgPworCQkJdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oZmlsZW5hbWUpIDogZmlsZW5hbWU7CisJCXRvbW95b191cGRhdGVfZmlsZV9hY2wocGF0dGVybmVkX2ZpbGUtPm5hbWUsIHBlcm0sCisJCQkJICAgICAgIGRvbWFpbiwgZmFsc2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3kgLSBVcGRhdGUgZmlsZSByZWxhdGVkIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9maWxlX3BvbGljeShjaGFyICpkYXRhLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmZpbGVuYW1lID0gc3RyY2hyKGRhdGEsICcgJyk7CisJY2hhciAqZmlsZW5hbWUyOworCXVuc2lnbmVkIGludCBwZXJtOworCXU4IHR5cGU7CisKKwlpZiAoIWZpbGVuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqZmlsZW5hbWUrKyA9ICdcMCc7CisJaWYgKHNzY2FuZihkYXRhLCAiJXUiLCAmcGVybSkgPT0gMSkKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZmlsZV9hY2woZmlsZW5hbWUsICh1OCkgcGVybSwgZG9tYWluLAorCQkJCQkgICAgICBpc19kZWxldGUpOworCWlmIChzdHJuY21wKGRhdGEsICJhbGxvd18iLCA2KSkKKwkJZ290byBvdXQ7CisJZGF0YSArPSA2OworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX3NwX2tleXdvcmRbdHlwZV0pKQorCQkJY29udGludWU7CisJCXJldHVybiB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbCh0eXBlLCBmaWxlbmFtZSwKKwkJCQkJCSAgICAgZG9tYWluLCBpc19kZWxldGUpOworCX0KKwlmaWxlbmFtZTIgPSBzdHJjaHIoZmlsZW5hbWUsICcgJyk7CisJaWYgKCFmaWxlbmFtZTIpCisJCWdvdG8gb3V0OworCSpmaWxlbmFtZTIrKyA9ICdcMCc7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fZHBfa2V5d29yZFt0eXBlXSkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKHR5cGUsIGZpbGVuYW1lLCBmaWxlbmFtZTIsCisJCQkJCQkgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwl9Cisgb3V0OgorCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJIGNvbnN0IGRvbWFpbiwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RhdGljIGNvbnN0IHUxNiByd19tYXNrID0KKwkJKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9BQ0wpIHwgKDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWU7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCWludCBlcnJvciA9IC1FTk9NRU07CisJY29uc3QgdTE2IHBlcm0gPSAxIDw8IHR5cGU7CisKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJaWYgKCFzYXZlZF9maWxlbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlpZiAoaXNfZGVsZXRlKQorCQlnb3RvIGRlbGV0ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMShwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQorCQkJY29udGludWU7CisJCS8qIFNwZWNpYWwgY2FzZS4gQ2xlYXIgYWxsIGJpdHMgaWYgbWFya2VkIGFzIGRlbGV0ZWQuICovCisJCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCQlhY2wtPnBlcm0gPSAwOworCQlhY2wtPnBlcm0gfD0gcGVybTsKKwkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSA9PSByd19tYXNrKQorCQkJYWNsLT5wZXJtIHw9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0w7CisJCWVsc2UgaWYgKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkKKwkJCWFjbC0+cGVybSB8PSByd19tYXNrOworCQlwdHItPnR5cGUgJj0gflRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJLyogTm90IGZvdW5kLiBBcHBlbmQgaXQgdG8gdGhlIHRhaWwuICovCisJYWNsID0gdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCk7CisJaWYgKCFhY2wpCisJCWdvdG8gb3V0OworCWFjbC0+cGVybSA9IHBlcm07CisJaWYgKHBlcm0gPT0gKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKQorCQlhY2wtPnBlcm0gfD0gcndfbWFzazsKKwlhY2wtPmZpbGVuYW1lID0gc2F2ZWRfZmlsZW5hbWU7CisJbGlzdF9hZGRfdGFpbCgmYWNsLT5oZWFkLmxpc3QsICZkb21haW4tPmFjbF9pbmZvX2xpc3QpOworCWVycm9yID0gMDsKKwlnb3RvIG91dDsKKyBkZWxldGU6CisJZXJyb3IgPSAtRU5PRU5UOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCisJCQljb250aW51ZTsKKwkJYWNsLT5wZXJtICY9IH5wZXJtOworCQlpZiAoKGFjbC0+cGVybSAmIHJ3X21hc2spICE9IHJ3X21hc2spCisJCQlhY2wtPnBlcm0gJj0gfigxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKTsKKwkJZWxzZSBpZiAoIShhY2wtPnBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpKQorCQkJYWNsLT5wZXJtICY9IH5yd19tYXNrOworCQlpZiAoIWFjbC0+cGVybSkKKwkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIGxpc3QuCisgKgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWUxOiBGaXJzdCBmaWxlbmFtZS4KKyAqIEBmaWxlbmFtZTI6IFNlY29uZCBmaWxlbmFtZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUyLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTE7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lMjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwljb25zdCB1OCBwZXJtID0gMSA8PCB0eXBlOworCisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTEsIDAsIDAsIDAsIF9fZnVuY19fKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTIsIDAsIDAsIDAsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2F2ZWRfZmlsZW5hbWUxID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZTEpOworCXNhdmVkX2ZpbGVuYW1lMiA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUyKTsKKwlpZiAoIXNhdmVkX2ZpbGVuYW1lMSB8fCAhc2F2ZWRfZmlsZW5hbWUyKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWlmIChpc19kZWxldGUpCisJCWdvdG8gZGVsZXRlOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fYWNsX3R5cGUxKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKGFjbC0+ZmlsZW5hbWUxICE9IHNhdmVkX2ZpbGVuYW1lMSB8fAorCQkgICAgYWNsLT5maWxlbmFtZTIgIT0gc2F2ZWRfZmlsZW5hbWUyKQorCQkJY29udGludWU7CisJCS8qIFNwZWNpYWwgY2FzZS4gQ2xlYXIgYWxsIGJpdHMgaWYgbWFya2VkIGFzIGRlbGV0ZWQuICovCisJCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCisJCQlhY2wtPnBlcm0gPSAwOworCQlhY2wtPnBlcm0gfD0gcGVybTsKKwkJcHRyLT50eXBlICY9IH5UT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vdCBmb3VuZC4gQXBwZW5kIGl0IHRvIHRoZSB0YWlsLiAqLworCWFjbCA9IHRvbW95b19hbGxvY19hY2xfZWxlbWVudChUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpOworCWlmICghYWNsKQorCQlnb3RvIG91dDsKKwlhY2wtPnBlcm0gPSBwZXJtOworCWFjbC0+ZmlsZW5hbWUxID0gc2F2ZWRfZmlsZW5hbWUxOworCWFjbC0+ZmlsZW5hbWUyID0gc2F2ZWRfZmlsZW5hbWUyOworCWxpc3RfYWRkX3RhaWwoJmFjbC0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwllcnJvciA9IDA7CisJZ290byBvdXQ7CisgZGVsZXRlOgorCWVycm9yID0gLUVOT0VOVDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lMSAhPSBzYXZlZF9maWxlbmFtZTEgfHwKKwkJICAgIGFjbC0+ZmlsZW5hbWUyICE9IHNhdmVkX2ZpbGVuYW1lMikKKwkJCWNvbnRpbnVlOworCQlhY2wtPnBlcm0gJj0gfnBlcm07CisJCWlmICghYWNsLT5wZXJtKQorCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAZG9tYWluOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHR5cGU6ICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogRmlsZW5hbWUgdG8gY2hlY2suCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkJY29uc3QgdTggdHlwZSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCAxIDw8IHR5cGUsIDEpOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBkb3VibGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTE6IEZpcnN0IGZpbGVuYW1lIHRvIGNoZWNrLgorICogQGZpbGVuYW1lMjogU2Vjb25kIGZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2woY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCQljb25zdCB1OCB0eXBlLAorCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCWZpbGVuYW1lMSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQlmaWxlbmFtZTIpCit7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCWNvbnN0IHU4IHBlcm0gPSAxIDw8IHR5cGU7CisJaW50IGVycm9yID0gLUVQRVJNOworCisJaWYgKCF0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKSkKKwkJcmV0dXJuIDA7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2w7CisJCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCQkJY29udGludWU7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICBoZWFkKTsKKwkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUxLCBhY2wtPmZpbGVuYW1lMSkpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUyLCBhY2wtPmZpbGVuYW1lMikpCisJCQljb250aW51ZTsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoKKwkJCQkJCWNvbnN0IGRvbWFpbiwgdTggb3BlcmF0aW9uLAorCQkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkJZmlsZW5hbWUsIGNvbnN0IHU4IG1vZGUpCit7CisJY29uc3QgY2hhciAqbXNnOworCWludCBlcnJvcjsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisgbmV4dDoKKwllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2woZG9tYWluLCBvcGVyYXRpb24sIGZpbGVuYW1lKTsKKwltc2cgPSB0b21veW9fc3Aya2V5d29yZChvcGVyYXRpb24pOworCWlmICghZXJyb3IpCisJCWdvdG8gb2s7CisJaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLSVzOiBBY2Nlc3MgJyVzICVzJyBkZW5pZWQgZm9yICVzXG4iLAorCQkgICAgICAgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksIG1zZywgZmlsZW5hbWUtPm5hbWUsCisJCSAgICAgICB0b21veW9fZ2V0X2xhc3RfbmFtZShkb21haW4pKTsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQljb25zdCBjaGFyICpuYW1lID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oZmlsZW5hbWUpLT5uYW1lOworCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChvcGVyYXRpb24sIG5hbWUsIGRvbWFpbiwgZmFsc2UpOworCX0KKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKyBvazoKKwkvKgorCSAqIFNpbmNlICJhbGxvd190cnVuY2F0ZSIgZG9lc24ndCBpbXBseSAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiwKKwkgKiB3ZSBuZWVkIHRvIGNoZWNrICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uIGlmIHRoZSBmaWxlbmFtZSBpcworCSAqIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLgorCSAqLworCWlmICghZXJyb3IgJiYgb3BlcmF0aW9uID09IFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCAmJgorCSAgICB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGZpbGVuYW1lKSkgeworCQlvcGVyYXRpb24gPSBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTDsKKwkJZ290byBuZXh0OworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2ZpbGVfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHN5c2N0bCgpJ3MgInJlYWQiIGFuZCAid3JpdGUiLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGVybTogICAgICBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIpLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19maWxlX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHU4IHBlcm0pCit7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworCW5hbWUubmFtZSA9IGZpbGVuYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJcmV0dXJuIHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgJm5hbWUsIHBlcm0sICJzeXNjdGwiLCBtb2RlKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZXhlY19wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImV4ZWN1dGUiLgorICoKKyAqIEBkb21haW46ICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6IENoZWNrIHBlcm1pc3Npb24gZm9yICJleGVjdXRlIi4KKyAqIEB0bXA6ICAgICAgQnVmZmVyIGZvciB0ZW1wb3JhcnkgdXNlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZXZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJICAgc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqdG1wKQoreworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgZmlsZW5hbWUsIDEsICJkb19leGVjdmUiLCBtb2RlKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJlYWQiIGFuZCAid3JpdGUiLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHBhdGg6ICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQGZsYWc6ICAgRmxhZ3MgZm9yIG9wZW4oKS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBpbnQgZmxhZykKK3sKKwljb25zdCB1OCBhY2NfbW9kZSA9IEFDQ19NT0RFKGZsYWcpOworCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisKKwlpZiAoIW1vZGUgfHwgIXBhdGgtPm1udCkKKwkJcmV0dXJuIDA7CisJaWYgKGFjY19tb2RlID09IDApCisJCXJldHVybiAwOworCWlmIChwYXRoLT5kZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCS8qCisJCSAqIEkgZG9uJ3QgY2hlY2sgZGlyZWN0b3JpZXMgaGVyZSBiZWNhdXNlIG1rZGlyKCkgYW5kIHJtZGlyKCkKKwkJICogZG9uJ3QgY2FsbCBtZS4KKwkJICovCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJZXJyb3IgPSAwOworCS8qCisJICogSWYgdGhlIGZpbGVuYW1lIGlzIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBrZXl3b3JkLAorCSAqIHdlIG5lZWQgdG8gY2hlY2sgImFsbG93X3Jld3JpdGUiIHBlcm1pc3Npb24gd2hlbiB0aGUgZmlsZW5hbWUgaXMgbm90CisJICogb3BlbmVkIGZvciBhcHBlbmQgbW9kZSBvciB0aGUgZmlsZW5hbWUgaXMgdHJ1bmNhdGVkIGF0IG9wZW4gdGltZS4KKwkgKi8KKwlpZiAoKGFjY19tb2RlICYgTUFZX1dSSVRFKSAmJgorCSAgICAoKGZsYWcgJiBPX1RSVU5DKSB8fCAhKGZsYWcgJiBPX0FQUEVORCkpICYmCisJICAgICh0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGJ1ZikpKSB7CisJCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKKwkJCQkJCSAgICAgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wsCisJCQkJCQkJICAgICBidWYsIG1vZGUpOworCX0KKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHRvbW95b19jaGVja19maWxlX3Blcm0yKGRvbWFpbiwgYnVmLCBhY2NfbW9kZSwgIm9wZW4iLAorCQkJCQkJbW9kZSk7CisJaWYgKCFlcnJvciAmJiAoZmxhZyAmIE9fVFJVTkMpKQorCQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCwKKwkJCQkJCQkgICAgIGJ1ZiwgbW9kZSk7Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1Zik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja18xcGF0aF9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImNyZWF0ZSIsICJ1bmxpbmsiLCAibWtkaXIiLCAicm1kaXIiLCAibWtmaWZvIiwgIm1rc29jayIsICJta2Jsb2NrIiwgIm1rY2hhciIsICJ0cnVuY2F0ZSIgYW5kICJzeW1saW5rIi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQHBhdGg6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfMXBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCisJaWYgKCFtb2RlIHx8ICFwYXRoLT5tbnQpCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aChwYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJc3dpdGNoIChvcGVyYXRpb24pIHsKKwljYXNlIFRPTU9ZT19UWVBFX01LRElSX0FDTDoKKwljYXNlIFRPTU9ZT19UWVBFX1JNRElSX0FDTDoKKwkJaWYgKCFidWYtPmlzX2RpcikgeworCQkJLyoKKwkJCSAqIHRvbW95b19nZXRfcGF0aCgpIHJlc2VydmVzIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8uIgorCQkJICovCisJCQlzdHJjYXQoKGNoYXIgKikgYnVmLT5uYW1lLCAiLyIpOworCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1Zik7CisJCX0KKwl9CisJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLCBvcGVyYXRpb24sIGJ1ZiwKKwkJCQkJCSAgICAgbW9kZSk7Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1Zik7CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmV3cml0ZSIuCisgKgorICogQGRvbWFpbjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlscDogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKKworCWlmICghbW9kZSB8fCAhZmlscC0+Zl9wYXRoLm1udCkKKwkJcmV0dXJuIDA7CisJYnVmID0gdG9tb3lvX2dldF9wYXRoKCZmaWxwLT5mX3BhdGgpOworCWlmICghYnVmKQorCQlnb3RvIG91dDsKKwlpZiAoIXRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoYnVmKSkgeworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMLAorCQkJCQkJICAgICBidWYsIG1vZGUpOworIG91dDoKKwl0b21veW9fZnJlZShidWYpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfMnBhdGhfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZW5hbWUiIGFuZCAibGluayIuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBwYXRoMTogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKiBAcGF0aDI6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfMnBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAorCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMikKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWYxLCAqYnVmMjsKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJY29uc3QgY2hhciAqbXNnOworCisJaWYgKCFtb2RlIHx8ICFwYXRoMS0+bW50IHx8ICFwYXRoMi0+bW50KQorCQlyZXR1cm4gMDsKKwlidWYxID0gdG9tb3lvX2dldF9wYXRoKHBhdGgxKTsKKwlidWYyID0gdG9tb3lvX2dldF9wYXRoKHBhdGgyKTsKKwlpZiAoIWJ1ZjEgfHwgIWJ1ZjIpCisJCWdvdG8gb3V0OworCXsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gcGF0aDEtPmRlbnRyeTsKKwkJaWYgKGRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgeworCQkJLyoKKwkJCSAqIHRvbW95b19nZXRfcGF0aCgpIHJlc2VydmVzIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8uIgorCQkJICovCisJCQlpZiAoIWJ1ZjEtPmlzX2RpcikgeworCQkJCXN0cmNhdCgoY2hhciAqKSBidWYxLT5uYW1lLCAiLyIpOworCQkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYxKTsKKwkJCX0KKwkJCWlmICghYnVmMi0+aXNfZGlyKSB7CisJCQkJc3RyY2F0KChjaGFyICopIGJ1ZjItPm5hbWUsICIvIik7CisJCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1ZjIpOworCQkJfQorCQl9CisJfQorCWVycm9yID0gdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbChkb21haW4sIG9wZXJhdGlvbiwgYnVmMSwgYnVmMik7CisJbXNnID0gdG9tb3lvX2RwMmtleXdvcmQob3BlcmF0aW9uKTsKKwlpZiAoIWVycm9yKQorCQlnb3RvIG91dDsKKwlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tJXM6IEFjY2VzcyAnJXMgJXMgJXMnICIKKwkJICAgICAgICJkZW5pZWQgZm9yICVzXG4iLCB0b21veW9fZ2V0X21zZyhpc19lbmZvcmNlKSwKKwkJICAgICAgIG1zZywgYnVmMS0+bmFtZSwgYnVmMi0+bmFtZSwKKwkJICAgICAgIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOworCWlmIChtb2RlID09IDEgJiYgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhkb21haW4pKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUxID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oYnVmMSktPm5hbWU7CisJCWNvbnN0IGNoYXIgKm5hbWUyID0gdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oYnVmMiktPm5hbWU7CisJCXRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKG9wZXJhdGlvbiwgbmFtZTEsIG5hbWUyLCBkb21haW4sCisJCQkJCSAgICAgIGZhbHNlKTsKKwl9Cisgb3V0OgorCXRvbW95b19mcmVlKGJ1ZjEpOworCXRvbW95b19mcmVlKGJ1ZjIpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZjE2YgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKKyAqCisgKiBHZXQgdGhlIGNhbm9uaWNhbGl6ZWQgYWJzb2x1dGUgcGF0aG5hbWVzLiBUaGUgYmFzaXMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisKKy8qKgorICogdG9tb3lvX2VuY29kZTogQ29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGFzY2lpIHN0cmluZy4KKyAqCisgKiBAYnVmZmVyOiAgQnVmZmVyIGZvciBBU0NJSSBzdHJpbmcuCisgKiBAYnVmbGVuOiAgU2l6ZSBvZiBAYnVmZmVyLgorICogQHN0cjogICAgIEJpbmFyeSBzdHJpbmcuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl3aGlsZSAoMSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgc3RyKys7CisKKwkJaWYgKHRvbW95b19pc192YWxpZChjKSkgeworCQkJaWYgKC0tYnVmbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQkqYnVmZmVyKysgPSAoY2hhcikgYzsKKwkJCWlmIChjICE9ICdcXCcpCisJCQkJY29udGludWU7CisJCQlpZiAoLS1idWZsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCSpidWZmZXIrKyA9IChjaGFyKSBjOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjKSB7CisJCQlpZiAoLS1idWZsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCSpidWZmZXIgPSAnXDAnOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnVmbGVuIC09IDQ7CisJCWlmIChidWZsZW4gPD0gMCkKKwkJCWJyZWFrOworCQkqYnVmZmVyKysgPSAnXFwnOworCQkqYnVmZmVyKysgPSAoYyA+PiA2KSArICcwJzsKKwkJKmJ1ZmZlcisrID0gKChjID4+IDMpICYgNykgKyAnMCc7CisJCSpidWZmZXIrKyA9IChjICYgNykgKyAnMCc7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyIC0gUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICoKKyAqIEBwYXRoOiAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQG5ld25hbWU6ICAgICBQb2ludGVyIHRvIGJ1ZmZlciB0byByZXR1cm4gdmFsdWUgaW4uCisgKiBAbmV3bmFtZV9sZW46IFNpemUgb2YgQG5ld25hbWUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBJZiBkZW50cnkgaXMgYSBkaXJlY3RvcnksIHRyYWlsaW5nICcvJyBpcyBhcHBlbmRlZC4KKyAqIENoYXJhY3RlcnMgb3V0IG9mIDB4MjAgPCBjIDwgMHg3RiByYW5nZSBhcmUgY29udmVydGVkIHRvCisgKiBcb29vIHN0eWxlIG9jdGFsIHN0cmluZy4KKyAqIENoYXJhY3RlciBcIGlzIGNvbnZlcnRlZCB0byBcXCBzdHJpbmcuCisgKi8KK2ludCB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqbmV3bmFtZSwKKwkJCSAgICAgICBpbnQgbmV3bmFtZV9sZW4pCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBwYXRoLT5kZW50cnk7CisJY2hhciAqc3A7CisKKwlpZiAoIWRlbnRyeSB8fCAhcGF0aC0+bW50IHx8ICFuZXduYW1lIHx8IG5ld25hbWVfbGVuIDw9IDIwNDgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2RuYW1lKSB7CisJCS8qIEZvciAic29ja2V0OltcJF0iIGFuZCAicGlwZTpbXCRdIi4gKi8KKwkJc3RhdGljIGNvbnN0IGludCBvZmZzZXQgPSAxNTM2OworCQlzcCA9IGRlbnRyeS0+ZF9vcC0+ZF9kbmFtZShkZW50cnksIG5ld25hbWUgKyBvZmZzZXQsCisJCQkJCSAgIG5ld25hbWVfbGVuIC0gb2Zmc2V0KTsKKwl9IGVsc2UgeworCQkvKiBUYWtlbiBmcm9tIGRfbmFtZXNwYWNlX3BhdGgoKS4gKi8KKwkJc3RydWN0IHBhdGggcm9vdDsKKwkJc3RydWN0IHBhdGggbnNfcm9vdCA9IHsgfTsKKwkJc3RydWN0IHBhdGggdG1wOworCisJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCQlyb290ID0gY3VycmVudC0+ZnMtPnJvb3Q7CisJCXBhdGhfZ2V0KCZyb290KTsKKwkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJaWYgKHJvb3QubW50ICYmIHJvb3QubW50LT5tbnRfbnMpCisJCQluc19yb290Lm1udCA9IG1udGdldChyb290Lm1udC0+bW50X25zLT5yb290KTsKKwkJaWYgKG5zX3Jvb3QubW50KQorCQkJbnNfcm9vdC5kZW50cnkgPSBkZ2V0KG5zX3Jvb3QubW50LT5tbnRfcm9vdCk7CisJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCXRtcCA9IG5zX3Jvb3Q7CisJCXNwID0gX19kX3BhdGgocGF0aCwgJnRtcCwgbmV3bmFtZSwgbmV3bmFtZV9sZW4pOworCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlwYXRoX3B1dCgmcm9vdCk7CisJCXBhdGhfcHV0KCZuc19yb290KTsKKwl9CisJaWYgKElTX0VSUihzcCkpCisJCWVycm9yID0gUFRSX0VSUihzcCk7CisJZWxzZQorCQllcnJvciA9IHRvbW95b19lbmNvZGUobmV3bmFtZSwgc3AgLSBuZXduYW1lLCBzcCk7CisJLyogQXBwZW5kIHRyYWlsaW5nICcvJyBpZiBkZW50cnkgaXMgYSBkaXJlY3RvcnkuICovCisJaWYgKCFlcnJvciAmJiBkZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkKKwkgICAgJiYgKm5ld25hbWUpIHsKKwkJc3AgPSBuZXduYW1lICsgc3RybGVuKG5ld25hbWUpOworCQlpZiAoKihzcCAtIDEpICE9ICcvJykgeworCQkJaWYgKHNwIDwgbmV3bmFtZSArIG5ld25hbWVfbGVuIC0gNCkgeworCQkJCSpzcCsrID0gJy8nOworCQkJCSpzcCA9ICdcMCc7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gLUVOT01FTTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZXJyb3IpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInRvbW95b19yZWFscGF0aDogUGF0aG5hbWUgdG9vIGxvbmcuXG4iKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCAtIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICoKKyAqIEBwYXRoOiBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCisgKgorICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgdGhlIGdpdmVuIEBwYXRoIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpCit7CisJY2hhciAqYnVmID0gdG9tb3lvX2FsbG9jKHNpemVvZihzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyKSk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIpCisJCSAgICAgPD0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHBhdGgsIGJ1ZiwKKwkJCQkgICAgICAgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKSA9PSAwKQorCQlyZXR1cm4gYnVmOworCXRvbW95b19mcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoIC0gR2V0IHJlYWxwYXRoIG9mIGEgcGF0aG5hbWUuCisgKgorICogQHBhdGhuYW1lOiBUaGUgcGF0aG5hbWUgdG8gc29sdmUuCisgKgorICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgQHBhdGhuYW1lIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKworCWlmIChwYXRobmFtZSAmJiBwYXRoX2xvb2t1cChwYXRobmFtZSwgTE9PS1VQX0ZPTExPVywgJm5kKSA9PSAwKSB7CisJCWNoYXIgKmJ1ZiA9IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoJm5kLnBhdGgpOworCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJCXJldHVybiBidWY7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyAtIEdldCByZWFscGF0aCBvZiBhIHBhdGhuYW1lLgorICoKKyAqIEBwYXRobmFtZTogVGhlIHBhdGhuYW1lIHRvIHNvbHZlLgorICoKKyAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIEBwYXRobmFtZSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisKKwlpZiAocGF0aG5hbWUgJiYgcGF0aF9sb29rdXAocGF0aG5hbWUsIDAsICZuZCkgPT0gMCkgeworCQljaGFyICpidWYgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZuZC5wYXRoKTsKKwkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQlyZXR1cm4gYnVmOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igbm9uLXN0cmluZyBkYXRhLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHM7CisvKiBRdW90YSBmb3IgaG9sZGluZyBub24tc3RyaW5nIGRhdGEuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3JfZWxlbWVudHM7CisKKy8qKgorICogdG9tb3lvX2FsbG9jX2VsZW1lbnQgLSBBbGxvY2F0ZSBwZXJtYW5lbnQgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLgorICoKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIE1lbW9yeSBoYXMgdG8gYmUgemVyb2VkLgorICogVGhlIFJBTSBpcyBjaHVua2VkLCBzbyBORVZFUiB0cnkgdG8ga2ZyZWUoKSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2VsZW1lbnQoY29uc3QgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RhdGljIGNoYXIgKmJ1ZjsKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgYnVmX3VzZWRfbGVuID0gUEFUSF9NQVg7CisJY2hhciAqcHRyID0gTlVMTDsKKwkvKkFzc3VtZXMgc2l6ZW9mKHZvaWQgKikgPj0gc2l6ZW9mKGxvbmcpIGlzIHRydWUuICovCisJY29uc3QgdW5zaWduZWQgaW50IHdvcmRfYWxpZ25lZF9zaXplCisJCT0gcm91bmR1cChzaXplLCBtYXgoc2l6ZW9mKHZvaWQgKiksIHNpemVvZihsb25nKSkpOworCWlmICh3b3JkX2FsaWduZWRfc2l6ZSA+IFBBVEhfTUFYKQorCQlyZXR1cm4gTlVMTDsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJaWYgKGJ1Zl91c2VkX2xlbiArIHdvcmRfYWxpZ25lZF9zaXplID4gUEFUSF9NQVgpIHsKKwkJaWYgKCF0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzIHx8CisJCSAgICB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHMKKwkJICAgICsgUEFUSF9NQVggPD0gdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cykKKwkJCXB0ciA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCQlpZiAoIXB0cikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgorCQkJICAgICAgICJmb3IgdG9tb3lvX2FsbG9jX2VsZW1lbnQoKS5cbiIpOworCQkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQl9IGVsc2UgeworCQkJYnVmID0gcHRyOworCQkJdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzICs9IFBBVEhfTUFYOworCQkJYnVmX3VzZWRfbGVuID0gd29yZF9hbGlnbmVkX3NpemU7CisJCQlwdHIgPSBidWY7CisJCX0KKwl9IGVsc2UgaWYgKHdvcmRfYWxpZ25lZF9zaXplKSB7CisJCWludCBpOworCQlwdHIgPSBidWYgKyBidWZfdXNlZF9sZW47CisJCWJ1Zl91c2VkX2xlbiArPSB3b3JkX2FsaWduZWRfc2l6ZTsKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRfYWxpZ25lZF9zaXplOyBpKyspIHsKKwkJCWlmICghcHRyW2ldKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBSZXNlcnZlZCBtZW1vcnkgd2FzIHRhaW50ZWQhICIKKwkJCSAgICAgICAiVGhlIHN5c3RlbSBtaWdodCBnbyB3cm9uZy5cbiIpOworCQkJcHRyW2ldID0gJ1wwJzsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIHB0cjsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igc3RyaW5nIGRhdGEgaW4gYnl0ZXMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZTsKKy8qIFF1b3RhIGZvciBob2xkaW5nIHN0cmluZyBkYXRhIGluIGJ5dGVzLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lOworCisvKgorICogVE9NT1lPIHVzZXMgdGhpcyBoYXNoIG9ubHkgd2hlbiBhcHBlbmRpbmcgYSBzdHJpbmcgaW50byB0aGUgc3RyaW5nCisgKiB0YWJsZS4gRnJlcXVlbmN5IG9mIGFwcGVuZGluZyBzdHJpbmdzIGlzIHZlcnkgbG93LiBTbyB3ZSBkb24ndCBuZWVkCisgKiBsYXJnZSAoZS5nLiA2NGspIGhhc2ggc2l6ZS4gMjU2IHdpbGwgYmUgc3VmZmljaWVudC4KKyAqLworI2RlZmluZSBUT01PWU9fTUFYX0hBU0ggMjU2CisKKy8qIFN0cnVjdHVyZSBmb3Igc3RyaW5nIGRhdGEuICovCitzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBlbnRyeTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgYXZhaWxhYmxlIG1lbW9yeSByZWdpb24uICovCitzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyICpwdHI7ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gYSBmcmVlIGFyZWEuICovCisJaW50IGxlbjsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhlIGFyZWEuICAgICAqLworfTsKKworLyoKKyAqIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19uYW1lX2VudHJ5Ii4KKyAqCisgKiBUaGlzIGxpc3QgaXMgdXBkYXRlZCBvbmx5IGluc2lkZSB0b21veW9fc2F2ZV9uYW1lKCksIHRodXMKKyAqIG5vIGdsb2JhbCBtdXRleCBleGlzdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19uYW1lX2xpc3RbVE9NT1lPX01BWF9IQVNIXTsKKworLyoqCisgKiB0b21veW9fc2F2ZV9uYW1lIC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RyaW5nIGRhdGEuCisgKgorICogQG5hbWU6IFRoZSBzdHJpbmcgdG8gc3RvcmUgaW50byB0aGUgcGVybWVybmVudCBtZW1vcnkuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogVGhlIFJBTSBpcyBzaGFyZWQsIHNvIE5FVkVSIHRyeSB0byBtb2RpZnkgb3Iga2ZyZWUoKSB0aGUgcmV0dXJuZWQgbmFtZS4KKyAqLworY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdGF0aWMgTElTVF9IRUFEKGZtYl9saXN0KTsKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCXN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSAqcHRyOworCXVuc2lnbmVkIGludCBoYXNoOworCS8qIGZtYiBjb250YWlucyBhdmFpbGFibGUgc2l6ZSBpbiBieXRlcy4KKwkgICBmbWIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmbWJfbGlzdCB3aGVuIGZtYi0+bGVuIGJlY29tZXMgMC4gKi8KKwlzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgKmZtYjsKKwlpbnQgbGVuOworCWNoYXIgKmNwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwlsZW4gPSBzdHJsZW4obmFtZSkgKyAxOworCWlmIChsZW4gPiBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogTmFtZSB0b28gbG9uZyAiCisJCSAgICAgICAiZm9yIHRvbW95b19zYXZlX25hbWUoKS5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIGxlbiAtIDEpOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19uYW1lX2xpc3RbaGFzaCAlIFRPTU9ZT19NQVhfSEFTSF0sCisJCQkgICAgIGxpc3QpIHsKKwkJaWYgKGhhc2ggPT0gcHRyLT5lbnRyeS5oYXNoICYmICFzdHJjbXAobmFtZSwgcHRyLT5lbnRyeS5uYW1lKSkKKwkJCWdvdG8gb3V0OworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZtYiwgJmZtYl9saXN0LCBsaXN0KSB7CisJCWlmIChsZW4gPD0gZm1iLT5sZW4pCisJCQlnb3RvIHJlYWR5OworCX0KKwlpZiAoIXRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUgfHwKKwkgICAgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lICsgUEFUSF9NQVgKKwkgICAgPD0gdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSkKKwkJY3AgPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWNwID0gTlVMTDsKKwlmbWIgPSBremFsbG9jKHNpemVvZigqZm1iKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcCB8fCAhZm1iKSB7CisJCWtmcmVlKGNwKTsKKwkJa2ZyZWUoZm1iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgorCQkgICAgICAgImZvciB0b21veW9fc2F2ZV9uYW1lKCkuXG4iKTsKKwkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCXB0ciA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKwl0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWUgKz0gUEFUSF9NQVg7CisJbGlzdF9hZGQoJmZtYi0+bGlzdCwgJmZtYl9saXN0KTsKKwlmbWItPnB0ciA9IGNwOworCWZtYi0+bGVuID0gUEFUSF9NQVg7CisgcmVhZHk6CisJcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpwdHIpKTsKKwlpZiAoIXB0cikKKwkJZ290byBvdXQ7CisJcHRyLT5lbnRyeS5uYW1lID0gZm1iLT5wdHI7CisJbWVtbW92ZShmbWItPnB0ciwgbmFtZSwgbGVuKTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJnB0ci0+ZW50cnkpOworCWZtYi0+cHRyICs9IGxlbjsKKwlmbWItPmxlbiAtPSBsZW47CisJbGlzdF9hZGRfdGFpbCgmcHRyLT5saXN0LCAmdG9tb3lvX25hbWVfbGlzdFtoYXNoICUgVE9NT1lPX01BWF9IQVNIXSk7CisJaWYgKGZtYi0+bGVuID09IDApIHsKKwkJbGlzdF9kZWwoJmZtYi0+bGlzdCk7CisJCWtmcmVlKGZtYik7CisJfQorIG91dDoKKwltdXRleF91bmxvY2soJmxvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIHB0ciA/ICZwdHItPmVudHJ5IDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfaW5pdCAtIEluaXRpYWxpemUgcmVhbHBhdGggcmVsYXRlZCBjb2RlLgorICovCit2b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKQoreworCWludCBpOworCisJQlVJTERfQlVHX09OKFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOID4gUEFUSF9NQVgpOworCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0hBU0g7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19uYW1lX2xpc3RbaV0pOworCUlOSVRfTElTVF9IRUFEKCZ0b21veW9fa2VybmVsX2RvbWFpbi5hY2xfaW5mb19saXN0KTsKKwl0b21veW9fa2VybmVsX2RvbWFpbi5kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShUT01PWU9fUk9PVF9OQU1FKTsKKwlsaXN0X2FkZF90YWlsKCZ0b21veW9fa2VybmVsX2RvbWFpbi5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlpZiAodG9tb3lvX2ZpbmRfZG9tYWluKFRPTU9ZT19ST09UX05BTUUpICE9ICZ0b21veW9fa2VybmVsX2RvbWFpbikKKwkJcGFuaWMoIkNhbid0IHJlZ2lzdGVyIHRvbW95b19rZXJuZWxfZG9tYWluIik7CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworfQorCisvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZS4gKi8KK3N0YXRpYyBhdG9taWNfdCB0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZTsKKworLyoqCisgKiB0b21veW9fYWxsb2MgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRlbXBvcmFyeSBwdXJwb3NlLgorICoKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICp0b21veW9fYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHApCisJCWF0b21pY19hZGQoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJcmV0dXJuIHA7Cit9CisKKy8qKgorICogdG9tb3lvX2ZyZWUgLSBSZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdG9tb3lvX2FsbG9jKCkuCisgKgorICogQHA6IFBvaW50ZXIgcmV0dXJuZWQgYnkgdG9tb3lvX2FsbG9jKCkuIE1heSBiZSBOVUxMLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLwordm9pZCB0b21veW9fZnJlZShjb25zdCB2b2lkICpwKQoreworCWlmIChwKSB7CisJCWF0b21pY19zdWIoa3NpemUocCksICZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJCWtmcmVlKHApOworCX0KK30KKworLyoqCisgKiB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlciAtIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIG1lbW9yeSB1c2FnZS4KKyAqLworaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWlmICghaGVhZC0+cmVhZF9lb2YpIHsKKwkJY29uc3QgdW5zaWduZWQgaW50IHNoYXJlZAorCQkJPSB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWU7CisJCWNvbnN0IHVuc2lnbmVkIGludCBwcml2YXRlCisJCQk9IHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50czsKKwkJY29uc3QgdW5zaWduZWQgaW50IGR5bmFtaWMKKwkJCT0gYXRvbWljX3JlYWQoJnRvbW95b19keW5hbWljX21lbW9yeV9zaXplKTsKKwkJY2hhciBidWZmZXJbNjRdOworCisJCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKwkJaWYgKHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUpCisJCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKKwkJCQkgIiAgIChRdW90YTogJTEwdSkiLAorCQkJCSB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKTsKKwkJZWxzZQorCQkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiU2hhcmVkOiAgJTEwdSVzXG4iLCBzaGFyZWQsIGJ1ZmZlcik7CisJCWlmICh0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKQorCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCisJCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKKwkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyk7CisJCWVsc2UKKwkJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlByaXZhdGU6ICUxMHUlc1xuIiwgcHJpdmF0ZSwgYnVmZmVyKTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiRHluYW1pYzogJTEwdVxuIiwgZHluYW1pYyk7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlRvdGFsOiAgICUxMHVcbiIsCisJCQkJIHNoYXJlZCArIHByaXZhdGUgKyBkeW5hbWljKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhIC0gU2V0IG1lbW9yeSBxdW90YS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCWlmIChzc2NhbmYoZGF0YSwgIlNoYXJlZDogJXUiLCAmc2l6ZSkgPT0gMSkKKwkJdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSA9IHNpemU7CisJZWxzZSBpZiAoc3NjYW5mKGRhdGEsICJQcml2YXRlOiAldSIsICZzaXplKSA9PSAxKQorCQl0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOWZjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaApAQCAtMCwwICsxLDY2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKKyAqCisgKiBHZXQgdGhlIGNhbm9uaWNhbGl6ZWQgYWJzb2x1dGUgcGF0aG5hbWVzLiBUaGUgYmFzaXMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9ICisjZGVmaW5lIF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSAorCitzdHJ1Y3QgcGF0aDsKK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvOworc3RydWN0IHRvbW95b19pb19idWZmZXI7CisKKy8qIENvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBhc2NpaSBzdHJpbmcuICovCitpbnQgdG9tb3lvX2VuY29kZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNvbnN0IGNoYXIgKnN0cik7CisKKy8qIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LiAqLworaW50IHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpuZXduYW1lLAorCQkJICAgICAgIGludCBuZXduYW1lX2xlbik7CisKKy8qCisgKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aChjb25zdCBjaGFyICpwYXRobmFtZSk7CisvKgorICogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBmaW5hbCBzeW1saW5rLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfbm9mb2xsb3coY29uc3QgY2hhciAqcGF0aG5hbWUpOworLyogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IHRoZSBwYXRobmFtZSBpcyBhbHJlYWR5IHNvbHZlZC4gKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpOworCisvKgorICogQWxsb2NhdGUgbWVtb3J5IGZvciBBQ0wgZW50cnkuCisgKiBUaGUgUkFNIGlzIGNodW5rZWQsIHNvIE5FVkVSIHRyeSB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBwb2ludGVyLgorICovCit2b2lkICp0b21veW9fYWxsb2NfZWxlbWVudChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKy8qCisgKiBLZWVwIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBSQU0uCisgKiBUaGUgUkFNIGlzIHNoYXJlZCwgc28gTkVWRVIgdHJ5IHRvIG1vZGlmeSBvciBrZnJlZSgpIHRoZSByZXR1cm5lZCBuYW1lLgorICovCitjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX3NhdmVfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkgdXNlIChlLmcuIHBlcm1pc3Npb24gY2hlY2tzKS4gKi8KK3ZvaWQgKnRvbW95b19hbGxvYyhjb25zdCBzaXplX3Qgc2l6ZSk7CisKKy8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB0b21veW9fYWxsb2MoKS4gKi8KK3ZvaWQgdG9tb3lvX2ZyZWUoY29uc3Qgdm9pZCAqcCk7CisKKy8qIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UuICovCitpbnQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBTZXQgbWVtb3J5IHF1b3RhLiAqLworaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4gKi8KK3ZvaWQgX19pbml0IHRvbW95b19yZWFscGF0aF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19SRUFMUEFUSF9IKSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vdG9tb3lvLmMKKyAqCisgKiBMU00gaG9va3MgZm9yIFRPTU9ZTyBMaW51eC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisKK3N0YXRpYyBpbnQgdG9tb3lvX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAorCQkJICAgICAgIGdmcF90IGdmcCkKK3sKKwkvKgorCSAqIFNpbmNlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoiIGlzIGEgc2hhcmFibGUgcG9pbnRlciwKKwkgKiB3ZSBkb24ndCBuZWVkIHRvIGR1cGxpY2F0ZS4KKwkgKi8KKwluZXctPnNlY3VyaXR5ID0gb2xkLT5zZWN1cml0eTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b21veW9fYnBybV9zZXRfY3JlZHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3sKKwkvKgorCSAqIERvIG9ubHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIG9mIGFuIGV4ZWN2ZQorCSAqIG9wZXJhdGlvbi4KKwkgKi8KKwlpZiAoYnBybS0+Y3JlZF9wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBMb2FkIHBvbGljeSBpZiAvc2Jpbi90b21veW8taW5pdCBleGlzdHMgYW5kIC9zYmluL2luaXQgaXMgcmVxdWVzdGVkCisJICogZm9yIHRoZSBmaXJzdCB0aW1lLgorCSAqLworCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXRvbW95b19sb2FkX3BvbGljeShicHJtLT5maWxlbmFtZSk7CisJLyoKKwkgKiBUZWxsIHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5KCkgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBvZiBhbgorCSAqIGV4ZWN2ZSBvcGVyYXRpb24uCisJICovCisJYnBybS0+Y3JlZC0+c2VjdXJpdHkgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gYnBybS0+Y3JlZC0+c2VjdXJpdHk7CisKKwkvKgorCSAqIEV4ZWN1dGUgcGVybWlzc2lvbiBpcyBjaGVja2VkIGFnYWluc3QgcGF0aG5hbWUgcGFzc2VkIHRvIGRvX2V4ZWN2ZSgpCisJICogdXNpbmcgY3VycmVudCBkb21haW4uCisJICovCisJaWYgKCFkb21haW4pIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqbmV4dF9kb21haW4gPSBOVUxMOworCQlpbnQgcmV0dmFsID0gdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oYnBybSwgJm5leHRfZG9tYWluKTsKKworCQlpZiAoIXJldHZhbCkKKwkJCWJwcm0tPmNyZWQtPnNlY3VyaXR5ID0gbmV4dF9kb21haW47CisJCXJldHVybiByZXR2YWw7CisJfQorCS8qCisJICogUmVhZCBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCBpbnRlcnByZXRlcnMgdXNpbmcgbmV4dCBkb21haW4uCisJICogJzEnIGlzIHRoZSByZXN1bHQgb2Ygb3Blbl90b19uYW1laV9mbGFncyhPX1JET05MWSkuCisJICovCisJcmV0dXJuIHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oZG9tYWluLCAmYnBybS0+ZmlsZS0+Zl9wYXRoLCAxKTsKK30KKworI2lmZGVmIENPTkZJR19TWVNDVEwKKworc3RhdGljIGludCB0b21veW9fcHJlcGVuZChjaGFyICoqYnVmZmVyLCBpbnQgKmJ1ZmxlbiwgY29uc3QgY2hhciAqc3RyKQoreworCWludCBuYW1lbGVuID0gc3RybGVuKHN0cik7CisKKwlpZiAoKmJ1ZmxlbiA8IG5hbWVsZW4pCisJCXJldHVybiAtRU5PTUVNOworCSpidWZsZW4gLT0gbmFtZWxlbjsKKwkqYnVmZmVyIC09IG5hbWVsZW47CisJbWVtY3B5KCpidWZmZXIsIHN0ciwgbmFtZWxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3N5c2N0bF9wYXRoIC0gcmV0dXJuIHRoZSByZWFscGF0aCBvZiBhIGN0bF90YWJsZS4KKyAqIEB0YWJsZTogcG9pbnRlciB0byAic3RydWN0IGN0bF90YWJsZSIuCisgKgorICogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgQHRhYmxlIG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIGlmIHRoaXMgZnVuY3Rpb24gZGlkbid0IHJldHVybiBOVUxMLgorICovCitzdGF0aWMgY2hhciAqdG9tb3lvX3N5c2N0bF9wYXRoKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCWludCBidWZsZW4gPSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTjsKKwljaGFyICpidWYgPSB0b21veW9fYWxsb2MoYnVmbGVuKTsKKwljaGFyICplbmQgPSBidWYgKyBidWZsZW47CisJaW50IGVycm9yID0gLUVOT01FTTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKworCSotLWVuZCA9ICdcMCc7CisJYnVmbGVuLS07CisJd2hpbGUgKHRhYmxlKSB7CisJCWNoYXIgbnVtWzMyXTsKKwkJY29uc3QgY2hhciAqc3AgPSB0YWJsZS0+cHJvY25hbWU7CisKKwkJaWYgKCFzcCkgeworCQkJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOworCQkJc25wcmludGYobnVtLCBzaXplb2YobnVtKSAtIDEsICI9JWQ9IiwgdGFibGUtPmN0bF9uYW1lKTsKKwkJCXNwID0gbnVtOworCQl9CisJCWlmICh0b21veW9fcHJlcGVuZCgmZW5kLCAmYnVmbGVuLCBzcCkgfHwKKwkJICAgIHRvbW95b19wcmVwZW5kKCZlbmQsICZidWZsZW4sICIvIikpCisJCQlnb3RvIG91dDsKKwkJdGFibGUgPSB0YWJsZS0+cGFyZW50OworCX0KKwlpZiAodG9tb3lvX3ByZXBlbmQoJmVuZCwgJmJ1ZmxlbiwgIi9wcm9jL3N5cyIpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IHRvbW95b19lbmNvZGUoYnVmLCBlbmQgLSBidWYsIGVuZCk7Cisgb3V0OgorCWlmICghZXJyb3IpCisJCXJldHVybiBidWY7CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB0b21veW9fc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApCit7CisJaW50IGVycm9yOworCWNoYXIgKm5hbWU7CisKKwlvcCAmPSBNQVlfUkVBRCB8IE1BWV9XUklURTsKKwlpZiAoIW9wKQorCQlyZXR1cm4gMDsKKwluYW1lID0gdG9tb3lvX3N5c2N0bF9wYXRoKHRhYmxlKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybSh0b21veW9fZG9tYWluKCksIG5hbWUsIG9wKTsKKwl0b21veW9fZnJlZShuYW1lKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB0b21veW9fcGF0aF90cnVuY2F0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgbG9mZl90IGxlbmd0aCwKKwkJCQl1bnNpZ25lZCBpbnQgdGltZV9hdHRycykKK3sKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wsCisJCQkJICAgICAgIHBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3VubGluayhzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ta2RpcihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgIGludCBtb2RlKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9NS0RJUl9BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ybWRpcihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIFRPTU9ZT19UWVBFX1JNRElSX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3N5bWxpbmsoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCwKKwkJCQkgICAgICAgJnBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX21rbm9kKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OworCWludCB0eXBlID0gVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTDsKKworCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRkNIUjoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0w7CisJCWJyZWFrOworCWNhc2UgU19JRkJMSzoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQkxPQ0tfQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZJRk86CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZTT0NLOgorCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtTT0NLX0FDTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCisJCQkJICAgICAgIHR5cGUsICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBwYXRoICpuZXdfZGlyLAorCQkJICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aDEgPSB7IG5ld19kaXItPm1udCwgb2xkX2RlbnRyeSB9OworCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfZGlyLT5tbnQsIG5ld19kZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9MSU5LX0FDTCwKKwkJCQkgICAgICAgJnBhdGgxLCAmcGF0aDIpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX3JlbmFtZShzdHJ1Y3QgcGF0aCAqb2xkX3BhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQkgICAgICBzdHJ1Y3QgcGF0aCAqbmV3X3BhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IHBhdGggcGF0aDEgPSB7IG9sZF9wYXJlbnQtPm1udCwgb2xkX2RlbnRyeSB9OworCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfcGFyZW50LT5tbnQsIG5ld19kZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9SRU5BTUVfQUNMLAorCQkJCSAgICAgICAmcGF0aDEsICZwYXRoMik7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2ZpbGVfZmNudGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWlmIChjbWQgPT0gRl9TRVRGTCAmJiAoKGFyZyBeIGZpbGUtPmZfZmxhZ3MpICYgT19BUFBFTkQpKQorCQlyZXR1cm4gdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbih0b21veW9fZG9tYWluKCksIGZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvbW95b19kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZiwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCit7CisJaW50IGZsYWdzID0gZi0+Zl9mbGFnczsKKworCWlmICgoZmxhZ3MgKyAxKSAmIE9fQUNDTU9ERSkKKwkJZmxhZ3MrKzsKKwlmbGFncyB8PSBmLT5mX2ZsYWdzICYgKE9fQVBQRU5EIHwgT19UUlVOQyk7CisJLyogRG9uJ3QgY2hlY2sgcmVhZCBwZXJtaXNzaW9uIGhlcmUgaWYgY2FsbGVkIGZyb20gZG9fZXhlY3ZlKCkuICovCisJaWYgKGN1cnJlbnQtPmluX2V4ZWN2ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24odG9tb3lvX2RvbWFpbigpLCAmZi0+Zl9wYXRoLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyB0b21veW9fc2VjdXJpdHlfb3BzID0geworCS5uYW1lICAgICAgICAgICAgICAgID0gInRvbW95byIsCisJLmNyZWRfcHJlcGFyZSAgICAgICAgPSB0b21veW9fY3JlZF9wcmVwYXJlLAorCS5icHJtX3NldF9jcmVkcyAgICAgID0gdG9tb3lvX2Jwcm1fc2V0X2NyZWRzLAorCS5icHJtX2NoZWNrX3NlY3VyaXR5ID0gdG9tb3lvX2Jwcm1fY2hlY2tfc2VjdXJpdHksCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCS5zeXNjdGwgICAgICAgICAgICAgID0gdG9tb3lvX3N5c2N0bCwKKyNlbmRpZgorCS5maWxlX2ZjbnRsICAgICAgICAgID0gdG9tb3lvX2ZpbGVfZmNudGwsCisJLmRlbnRyeV9vcGVuICAgICAgICAgPSB0b21veW9fZGVudHJ5X29wZW4sCisJLnBhdGhfdHJ1bmNhdGUgICAgICAgPSB0b21veW9fcGF0aF90cnVuY2F0ZSwKKwkucGF0aF91bmxpbmsgICAgICAgICA9IHRvbW95b19wYXRoX3VubGluaywKKwkucGF0aF9ta2RpciAgICAgICAgICA9IHRvbW95b19wYXRoX21rZGlyLAorCS5wYXRoX3JtZGlyICAgICAgICAgID0gdG9tb3lvX3BhdGhfcm1kaXIsCisJLnBhdGhfc3ltbGluayAgICAgICAgPSB0b21veW9fcGF0aF9zeW1saW5rLAorCS5wYXRoX21rbm9kICAgICAgICAgID0gdG9tb3lvX3BhdGhfbWtub2QsCisJLnBhdGhfbGluayAgICAgICAgICAgPSB0b21veW9fcGF0aF9saW5rLAorCS5wYXRoX3JlbmFtZSAgICAgICAgID0gdG9tb3lvX3BhdGhfcmVuYW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG9tb3lvX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKSBjdXJyZW50X2NyZWQoKTsKKworCWlmICghc2VjdXJpdHlfbW9kdWxlX2VuYWJsZSgmdG9tb3lvX3NlY3VyaXR5X29wcykpCisJCXJldHVybiAwOworCS8qIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBzZWN1cml0eSBmcmFtZXdvcmsgKi8KKwlpZiAocmVnaXN0ZXJfc2VjdXJpdHkoJnRvbW95b19zZWN1cml0eV9vcHMpKQorCQlwYW5pYygiRmFpbHVyZSByZWdpc3RlcmluZyBUT01PWU8gTGludXgiKTsKKwlwcmludGsoS0VSTl9JTkZPICJUT01PWU8gTGludXggaW5pdGlhbGl6ZWRcbiIpOworCWNyZWQtPnNlY3VyaXR5ID0gJnRvbW95b19rZXJuZWxfZG9tYWluOworCXRvbW95b19yZWFscGF0aF9pbml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3NlY3VyaXR5X2luaXRjYWxsKHRvbW95b19pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uaCBiL3NlY3VyaXR5L3RvbW95by90b21veW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGM4ZjZlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gKKyNkZWZpbmUgX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSAorCitzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbzsKK3N0cnVjdCBwYXRoOworc3RydWN0IGlub2RlOworc3RydWN0IGxpbnV4X2JpbnBybTsKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcjsKKworaW50IHRvbW95b19jaGVja19maWxlX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHU4IHBlcm0pOworaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJICAgc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciAqYnVmKTsKK2ludCB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IGludCBmbGFnKTsKK2ludCB0b21veW9fY2hlY2tfMXBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aCk7CitpbnQgdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAorCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMik7CitpbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKTsKK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbik7CisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KKworI2RlZmluZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICAgICAgICAgICAgICAgICAxCisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEZpbGUgQ29udHJvbHMuICovCisKKy8qCisgKiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNwZWNpYWwuIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBzZXQKKyAqIGlmIGJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlIHNldC4gQm90aCBUWVBFX1JFQURfQUNMIGFuZAorICogVFlQRV9XUklURV9BQ0wgYXJlIGF1dG9tYXRpY2FsbHkgc2V0IGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgc2V0LgorICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgZWl0aGVyIFRZUEVfUkVBRF9BQ0wgb3IKKyAqIFRZUEVfV1JJVEVfQUNMIGlzIGNsZWFyZWQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQgVFlQRV9XUklURV9BQ0wgYXJlCisgKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBjbGVhcmVkLgorICovCisKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wgICAgMAorI2RlZmluZSBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFQURfQUNMICAgICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX1RZUEVfV1JJVEVfQUNMICAgICAgICAgMworI2RlZmluZSBUT01PWU9fVFlQRV9DUkVBVEVfQUNMICAgICAgICA0CisjZGVmaW5lIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wgICAgICAgIDUKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtESVJfQUNMICAgICAgICAgNgorI2RlZmluZSBUT01PWU9fVFlQRV9STURJUl9BQ0wgICAgICAgICA3CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LRklGT19BQ0wgICAgICAgIDgKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtTT0NLX0FDTCAgICAgICAgOQorI2RlZmluZSBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTCAgICAgIDEwCisjZGVmaW5lIFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0wgICAgICAgMTEKKyNkZWZpbmUgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMICAgICAxMgorI2RlZmluZSBUT01PWU9fVFlQRV9TWU1MSU5LX0FDTCAgICAgIDEzCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMICAgICAgMTQKKyNkZWZpbmUgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT04gMTUKKworI2RlZmluZSBUT01PWU9fVFlQRV9MSU5LX0FDTCAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OIDIKKworI2RlZmluZSBUT01PWU9fRE9NQUlOUE9MSUNZICAgICAgICAgIDAKKyNkZWZpbmUgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSAgICAgICAxCisjZGVmaW5lIFRPTU9ZT19ET01BSU5fU1RBVFVTICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fUFJPQ0VTU19TVEFUVVMgICAgICAgIDMKKyNkZWZpbmUgVE9NT1lPX01FTUlORk8gICAgICAgICAgICAgICA0CisjZGVmaW5lIFRPTU9ZT19TRUxGRE9NQUlOICAgICAgICAgICAgNQorI2RlZmluZSBUT01PWU9fVkVSU0lPTiAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVE9NT1lPX1BST0ZJTEUgICAgICAgICAgICAgICA3CisjZGVmaW5lIFRPTU9ZT19NQU5BR0VSICAgICAgICAgICAgICAgOAorCitleHRlcm4gc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZG9tYWluKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eTsKK30KKworLyogQ2FsbGVyIGhvbGRzIHRhc2tsaXN0X2xvY2sgc3BpbmxvY2suICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19yZWFsX2RvbWFpbihzdHJ1Y3QgdGFza19zdHJ1Y3QKKwkJCQkJCQkgICAgKnRhc2spCit7CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBnZXRfdGFza19jcmVkKHRhc2spOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IGNyZWQtPnNlY3VyaXR5OworCisJcHV0X2NyZWQoY3JlZCk7CisJcmV0dXJuIGRvbWFpbjsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCit9CisKKyNlbmRpZiAvKiAhZGVmaW5lZChfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19IKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvS2NvbmZpZyBiL3NvdW5kL0tjb25maWcKaW5kZXggMjAwYWNhMS4uMWVjZWI4NSAxMDA2NDQKLS0tIGEvc291bmQvS2NvbmZpZworKysgYi9zb3VuZC9LY29uZmlnCkBAIC02MCw2ICs2MCw4IEBACiAKIHNvdXJjZSAic291bmQvYXJtL0tjb25maWciCiAKK3NvdXJjZSAic291bmQvYXRtZWwvS2NvbmZpZyIKKwogc291cmNlICJzb3VuZC9zcGkvS2NvbmZpZyIKIAogc291cmNlICJzb3VuZC9taXBzL0tjb25maWciCmRpZmYgLS1naXQgYS9zb3VuZC9NYWtlZmlsZSBiL3NvdW5kL01ha2VmaWxlCmluZGV4IGM3NmQ3MDcuLmVjNDY3ZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL01ha2VmaWxlCisrKyBiL3NvdW5kL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogb2JqLSQoQ09ORklHX1NPVU5EX1BSSU1FKSArPSBvc3MvCiBvYmotJChDT05GSUdfRE1BU09VTkQpICs9IG9zcy8KIG9iai0kKENPTkZJR19TTkQpICs9IGNvcmUvIGkyYy8gZHJpdmVycy8gaXNhLyBwY2kvIHBwYy8gYXJtLyBzaC8gc3ludGgvIHVzYi8gXAotCXNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvCisJc3BhcmMvIHNwaS8gcGFyaXNjLyBwY21jaWEvIG1pcHMvIHNvYy8gYXRtZWwvCiBvYmotJChDT05GSUdfU05EX0FPQSkgKz0gYW9hLwogCiAjIFRoaXMgb25lIG11c3QgYmUgY29tcGlsYWJsZSBldmVuIGlmIHNvdW5kIGlzIGNvbmZpZ3VyZWQgb3V0CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvYW9hLWdwaW8uaCBiL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCmluZGV4IGVlNjRmNWQuLjYwNjViMDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCisrKyBiL3NvdW5kL2FvYS9hb2EtZ3Bpby5oCkBAIC0zNCwxMCArMzQsMTIgQEAKIAl2b2lkICgqc2V0X2hlYWRwaG9uZSkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAJdm9pZCAoKnNldF9zcGVha2Vycykoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAJdm9pZCAoKnNldF9saW5lb3V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKKwl2b2lkICgqc2V0X21hc3Rlcikoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAKIAlpbnQgKCpnZXRfaGVhZHBob25lKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAJaW50ICgqZ2V0X3NwZWFrZXJzKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAJaW50ICgqZ2V0X2xpbmVvdXQpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0KTsKKwlpbnQgKCpnZXRfbWFzdGVyKShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CiAKIAl2b2lkICgqc2V0X2h3X3Jlc2V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvcmUvYWxzYS5jIGIvc291bmQvYW9hL2NvcmUvYWxzYS5jCmluZGV4IDYxNzg1MDQuLjBmYTM4NTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYworKysgYi9zb3VuZC9hb2EvY29yZS9hbHNhLmMKQEAgLTIzLDkgKzIzLDEwIEBACiAJCS8qIGNhbm5vdCBiZSBFRVhJU1QgZHVlIHRvIHVzYWdlIGluIGFvYV9mYWJyaWNfcmVnaXN0ZXIgKi8KIAkJcmV0dXJuIC1FQlVTWTsKIAotCWFsc2FfY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgbmFtZSwgbW9kLCBzaXplb2Yoc3RydWN0IGFvYV9jYXJkKSk7Ci0JaWYgKCFhbHNhX2NhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgbmFtZSwgbW9kLCBzaXplb2Yoc3RydWN0IGFvYV9jYXJkKSwKKwkJCSAgICAgICZhbHNhX2NhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWFvYV9jYXJkID0gYWxzYV9jYXJkLT5wcml2YXRlX2RhdGE7CiAJYW9hX2NhcmQtPmFsc2FfY2FyZCA9IGFsc2FfY2FyZDsKIAlhbHNhX2NhcmQtPmRldiA9IGRldjsKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKaW5kZXggYzkzYWQ1ZC4uZGU4ZTAzYSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKKysrIGIvc291bmQvYW9hL2NvcmUvZ3Bpby1mZWF0dXJlLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlICIuLi9hb2EuaCIKIAotLyogVE9ETzogdGhlc2UgYXJlIDIwIGdsb2JhbCB2YXJpYWJsZXMKKy8qIFRPRE86IHRoZXNlIGFyZSBsb3RzIG9mIGdsb2JhbCB2YXJpYWJsZXMKICAqIHRoYXQgYXJlbid0IHVzZWQgb24gbW9zdCBtYWNoaW5lcy4uLgogICogTW92ZSB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqIHN0cnVjdHVyZSBhbmQgdXNlIHRoYXQuCkBAIC0yMyw2ICsyMyw3IEBACiAvKiB0aGVzZSBhcmUgdGhlIEdQSU8gbnVtYmVycyAocmVnaXN0ZXIgYWRkcmVzc2VzIGFzIG9mZnNldHMgaW50bwogICogdGhlIEdQSU8gc3BhY2UpICovCiBzdGF0aWMgaW50IGhlYWRwaG9uZV9tdXRlX2dwaW87CitzdGF0aWMgaW50IG1hc3Rlcl9tdXRlX2dwaW87CiBzdGF0aWMgaW50IGFtcF9tdXRlX2dwaW87CiBzdGF0aWMgaW50IGxpbmVvdXRfbXV0ZV9ncGlvOwogc3RhdGljIGludCBod19yZXNldF9ncGlvOwpAQCAtMzIsNiArMzMsNyBAQAogCiAvKiBzZWUgdGhlIFNXSVRDSF9HUElPIG1hY3JvICovCiBzdGF0aWMgaW50IGhlYWRwaG9uZV9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CitzdGF0aWMgaW50IG1hc3Rlcl9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CiBzdGF0aWMgaW50IGFtcF9tdXRlX2dwaW9fYWN0aXZlc3RhdGU7CiBzdGF0aWMgaW50IGxpbmVvdXRfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOwogc3RhdGljIGludCBod19yZXNldF9ncGlvX2FjdGl2ZXN0YXRlOwpAQCAtMTU2LDYgKzE1OCw3IEBACiBGVFJfR1BJTyhoZWFkcGhvbmUsIDApOwogRlRSX0dQSU8oYW1wLCAxKTsKIEZUUl9HUElPKGxpbmVvdXQsIDIpOworRlRSX0dQSU8obWFzdGVyLCAzKTsKIAogc3RhdGljIHZvaWQgZnRyX2dwaW9fc2V0X2h3X3Jlc2V0KHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pCiB7CkBAIC0xNzIsNiArMTc1LDggQEAKIAkJCSAgaHdfcmVzZXRfZ3Bpbywgdik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19tZXRob2RzIG1ldGhvZHM7CisKIHN0YXRpYyB2b2lkIGZ0cl9ncGlvX2FsbF9hbXBzX29mZihzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCkKIHsKIAlpbnQgc2F2ZWQ7CkBAIC0xODEsNiArMTg2LDggQEAKIAlmdHJfZ3Bpb19zZXRfaGVhZHBob25lKHJ0LCAwKTsKIAlmdHJfZ3Bpb19zZXRfYW1wKHJ0LCAwKTsKIAlmdHJfZ3Bpb19zZXRfbGluZW91dChydCwgMCk7CisJaWYgKG1ldGhvZHMuc2V0X21hc3RlcikKKwkJZnRyX2dwaW9fc2V0X21hc3RlcihydCwgMCk7CiAJcnQtPmltcGxlbWVudGF0aW9uX3ByaXZhdGUgPSBzYXZlZDsKIH0KIApAQCAtMTkzLDYgKzIwMCw4IEBACiAJZnRyX2dwaW9fc2V0X2hlYWRwaG9uZShydCwgKHM+PjApJjEpOwogCWZ0cl9ncGlvX3NldF9hbXAocnQsIChzPj4xKSYxKTsKIAlmdHJfZ3Bpb19zZXRfbGluZW91dChydCwgKHM+PjIpJjEpOworCWlmIChtZXRob2RzLnNldF9tYXN0ZXIpCisJCWZ0cl9ncGlvX3NldF9tYXN0ZXIocnQsIChzPj4zKSYxKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyX2hhbmRsZV9ub3RpZnkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjMxLDYgKzI0MCwxMiBAQAogCWdldF9ncGlvKCJody1yZXNldCIsICJhdWRpby1ody1yZXNldCIsCiAJCSAmaHdfcmVzZXRfZ3BpbywKIAkJICZod19yZXNldF9ncGlvX2FjdGl2ZXN0YXRlKTsKKwlpZiAoZ2V0X2dwaW8oIm1hc3Rlci1tdXRlIiwgTlVMTCwKKwkJICAgICAmbWFzdGVyX211dGVfZ3BpbywKKwkJICAgICAmbWFzdGVyX211dGVfZ3Bpb19hY3RpdmVzdGF0ZSkpIHsKKwkJbWV0aG9kcy5zZXRfbWFzdGVyID0gZnRyX2dwaW9fc2V0X21hc3RlcjsKKwkJbWV0aG9kcy5nZXRfbWFzdGVyID0gZnRyX2dwaW9fZ2V0X21hc3RlcjsKKwl9CiAKIAloZWFkcGhvbmVfZGV0ZWN0X25vZGUgPSBnZXRfZ3BpbygiaGVhZHBob25lLWRldGVjdCIsIE5VTEwsCiAJCQkJCSAmaGVhZHBob25lX2RldGVjdF9ncGlvLApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwppbmRleCBhZDYwZjVkLi5mYmY1YzkzIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYworKysgYi9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYwpAQCAtMSwxNiArMSwxNCBAQAogLyoKLSAqIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyIC0tIGxheW91dCBmYWJyaWMKKyAqIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyIC0tIGxheW91dC9tYWNoaW5lIGlkIGZhYnJpYwogICoKLSAqIENvcHlyaWdodCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogR1BMIHYyLCBjYW4gYmUgZm91bmQgaW4gQ09QWUlORy4KICAqCiAgKgotICogVGhpcyBmYWJyaWMgbW9kdWxlIGxvb2tzIGZvciBzb3VuZCBjb2RlY3MKLSAqIGJhc2VkIG9uIHRoZSBsYXlvdXQtaWQgcHJvcGVydHkgaW4gdGhlIGRldmljZSB0cmVlLgotICoKKyAqIFRoaXMgZmFicmljIG1vZHVsZSBsb29rcyBmb3Igc291bmQgY29kZWNzIGJhc2VkIG9uIHRoZQorICogbGF5b3V0LWlkIG9yIGRldmljZS1pZCBwcm9wZXJ0eSBpbiB0aGUgZGV2aWNlIHRyZWUuCiAgKi8KLQogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjMsNyArNjEsNyBAQAogI2RlZmluZSBMQVlPVVRfRkxBR19DT01CT19MSU5FT1VUX1NQRElGCSgxPDwwKQogCiBzdHJ1Y3QgbGF5b3V0IHsKLQl1bnNpZ25lZCBpbnQgbGF5b3V0X2lkOworCXVuc2lnbmVkIGludCBsYXlvdXRfaWQsIGRldmljZV9pZDsKIAlzdHJ1Y3QgY29kZWNfY29ubmVjdF9pbmZvIGNvZGVjc1tNQVhfQ09ERUNTX1BFUl9CVVNdOwogCWludCBmbGFnczsKIApAQCAtMTExLDYgKzEwOSwxMCBAQAogTU9EVUxFX0FMSUFTKCJzb3VuZC1sYXlvdXQtOTgiKTsKIE1PRFVMRV9BTElBUygic291bmQtbGF5b3V0LTEwMCIpOwogCitNT0RVTEVfQUxJQVMoImFvYS1kZXZpY2UtaWQtMTQiKTsKK01PRFVMRV9BTElBUygiYW9hLWRldmljZS1pZC0yMiIpOworTU9EVUxFX0FMSUFTKCJhb2EtZGV2aWNlLWlkLTM1Iik7CisKIC8qIG9ueXggd2l0aCBhbGwgYnV0IG1pY3JvcGhvbmUgY29ubmVjdGVkICovCiBzdGF0aWMgc3RydWN0IGNvZGVjX2Nvbm5lY3Rpb24gb255eF9jb25uZWN0aW9uc19ub21pY1tdID0gewogCXsKQEAgLTUxOCw2ICs1MjAsMjcgQEAKIAkJLmNvbm5lY3Rpb25zID0gb255eF9jb25uZWN0aW9uc19ub2hlYWRwaG9uZXMsCiAJICB9LAogCX0sCisJLyogUG93ZXJNYWMzLDQgKi8KKwl7IC5kZXZpY2VfaWQgPSAxNCwKKwkgIC5jb2RlY3NbMF0gPSB7CisJCS5uYW1lID0gInRhcyIsCisJCS5jb25uZWN0aW9ucyA9IHRhc19jb25uZWN0aW9uc19ub2xpbmUsCisJICB9LAorCX0sCisJLyogUG93ZXJNYWMzLDYgKi8KKwl7IC5kZXZpY2VfaWQgPSAyMiwKKwkgIC5jb2RlY3NbMF0gPSB7CisJCS5uYW1lID0gInRhcyIsCisJCS5jb25uZWN0aW9ucyA9IHRhc19jb25uZWN0aW9uc19hbGwsCisJICB9LAorCX0sCisJLyogUG93ZXJCb29rNSwyICovCisJeyAuZGV2aWNlX2lkID0gMzUsCisJICAuY29kZWNzWzBdID0geworCQkubmFtZSA9ICJ0YXMiLAorCQkuY29ubmVjdGlvbnMgPSB0YXNfY29ubmVjdGlvbnNfYWxsLAorCSAgfSwKKwl9LAogCXt9CiB9OwogCkBAIC01MjYsNyArNTQ5LDcgQEAKIAlzdHJ1Y3QgbGF5b3V0ICpsOwogCiAJbCA9IGxheW91dHM7Ci0Jd2hpbGUgKGwtPmxheW91dF9pZCkgeworCXdoaWxlIChsLT5jb2RlY3NbMF0ubmFtZSkgewogCQlpZiAobC0+bGF5b3V0X2lkID09IGlkKQogCQkJcmV0dXJuIGw7CiAJCWwrKzsKQEAgLTUzNCw2ICs1NTcsMTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBsYXlvdXQgKmZpbmRfbGF5b3V0X2J5X2RldmljZSh1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IGxheW91dCAqbDsKKworCWwgPSBsYXlvdXRzOworCXdoaWxlIChsLT5jb2RlY3NbMF0ubmFtZSkgeworCQlpZiAobC0+ZGV2aWNlX2lkID09IGlkKQorCQkJcmV0dXJuIGw7CisJCWwrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIHVzZV9sYXlvdXQoc3RydWN0IGxheW91dCAqbCkKIHsKIAlpbnQgaTsKQEAgLTU2NCw2ICs2MDAsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmhlYWRwaG9uZV9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmxpbmVvdXRfY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpzcGVha2VyX2N0cmw7CisJc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyX2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqaGVhZHBob25lX2RldGVjdGVkX2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqbGluZW91dF9kZXRlY3RlZF9jdHJsOwogCkBAIC02MTUsNiArNjUyLDcgQEAKIEFNUF9DT05UUk9MKGhlYWRwaG9uZSwgIkhlYWRwaG9uZSBTd2l0Y2giKTsKIEFNUF9DT05UUk9MKHNwZWFrZXJzLCAiU3BlYWtlcnMgU3dpdGNoIik7CiBBTVBfQ09OVFJPTChsaW5lb3V0LCAiTGluZS1PdXQgU3dpdGNoIik7CitBTVBfQ09OVFJPTChtYXN0ZXIsICJNYXN0ZXIgU3dpdGNoIik7CiAKIHN0YXRpYyBpbnQgZGV0ZWN0X2Nob2ljZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQpAQCAtODU1LDYgKzg5MywxMSBAQAogIAlsaW5lb3V0ID0gY29kZWMtPmdwaW8tPm1ldGhvZHMtPmdldF9kZXRlY3QoY29kZWMtPmdwaW8sCiAJCQkJCQkgICBBT0FfTk9USUZZX0xJTkVfT1VUKTsKIAorCWlmIChjb2RlYy0+Z3Bpby0+bWV0aG9kcy0+c2V0X21hc3RlcikgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJm1hc3Rlcl9jdGwsIGNvZGVjLT5ncGlvKTsKKwkJbGRldi0+bWFzdGVyX2N0cmwgPSBjdGw7CisJCWFvYV9zbmRfY3RsX2FkZChjdGwpOworCX0KIAl3aGlsZSAoY2MtPmNvbm5lY3RlZCkgewogCQlpZiAoY2MtPmNvbm5lY3RlZCAmIENDX1NQRUFLRVJTKSB7CiAJCQlpZiAoaGVhZHBob25lcyA8PSAwICYmIGxpbmVvdXQgPD0gMCkKQEAgLTkzOCw4ICs5ODEsOCBAQAogc3RhdGljIGludCBhb2FfZmFicmljX2xheW91dF9wcm9iZShzdHJ1Y3Qgc291bmRidXNfZGV2ICpzZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc291bmQgPSBOVUxMOwotCWNvbnN0IHVuc2lnbmVkIGludCAqbGF5b3V0X2lkOwotCXN0cnVjdCBsYXlvdXQgKmxheW91dDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmlkOworCXN0cnVjdCBsYXlvdXQgKmxheW91dCA9IE5VTEw7CiAJc3RydWN0IGxheW91dF9kZXYgKmxkZXYgPSBOVUxMOwogCWludCBlcnI7CiAKQEAgLTk1MiwxNSArOTk1LDE4IEBACiAJCWlmIChzb3VuZC0+dHlwZSAmJiBzdHJjYXNlY21wKHNvdW5kLT50eXBlLCAic291bmRjaGlwIikgPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoIXNvdW5kKSByZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXNvdW5kKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWxheW91dF9pZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOwotCWlmICghbGF5b3V0X2lkKQotCQlnb3RvIG91dG5vZGV2OwotCXByaW50ayhLRVJOX0lORk8gInNuZC1hb2EtZmFicmljLWxheW91dDogZm91bmQgYnVzIHdpdGggbGF5b3V0ICVkXG4iLAotCSAgICAgICAqbGF5b3V0X2lkKTsKKwlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOworCWlmIChpZCkgeworCQlsYXlvdXQgPSBmaW5kX2xheW91dF9ieV9pZCgqaWQpOworCX0gZWxzZSB7CisJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCWlmIChpZCkKKwkJCWxheW91dCA9IGZpbmRfbGF5b3V0X2J5X2RldmljZSgqaWQpOworCX0KIAotCWxheW91dCA9IGZpbmRfbGF5b3V0X2J5X2lkKCpsYXlvdXRfaWQpOwogCWlmICghbGF5b3V0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAic25kLWFvYS1mYWJyaWMtbGF5b3V0OiB1bmtub3duIGxheW91dFxuIik7CiAJCWdvdG8gb3V0bm9kZXY7CkBAIC05NzYsNiArMTAyMiw3IEBACiAJbGRldi0+bGF5b3V0ID0gbGF5b3V0OwogCWxkZXYtPmdwaW8ubm9kZSA9IHNvdW5kLT5wYXJlbnQ7CiAJc3dpdGNoIChsYXlvdXQtPmxheW91dF9pZCkgeworCWNhc2UgMDogIC8qIGFueXRoaW5nIHdpdGggZGV2aWNlX2lkLCBub3QgbGF5b3V0X2lkICovCiAJY2FzZSA0MTogLyogdGhhdCB1bmtub3duIG1hY2hpbmUgbm8gb25lIHNlZW1zIHRvIGhhdmUgKi8KIAljYXNlIDUxOiAvKiBQb3dlckJvb2s1LDQgKi8KIAljYXNlIDU4OiAvKiBNYWMgTWluaSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYwppbmRleCBiZTQ2OGVkZi4uNDE4Yzg0YyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKKysrIGIvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogaTJzYnVzIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogR1BMIHYyLCBjYW4gYmUgZm91bmQgaW4gQ09QWUlORy4KICAqLwpAQCAtMTg2LDEzICsxODYsMjUgQEAKIAkJfQogCX0KIAlpZiAoaSA9PSAxKSB7Ci0JCWNvbnN0IHUzMiAqbGF5b3V0X2lkID0KLQkJCW9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOwotCQlpZiAobGF5b3V0X2lkKSB7Ci0JCQlsYXlvdXQgPSAqbGF5b3V0X2lkOworCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAibGF5b3V0LWlkIiwgTlVMTCk7CisKKwkJaWYgKGlkKSB7CisJCQlsYXlvdXQgPSAqaWQ7CiAJCQlzbnByaW50ZihkZXYtPnNvdW5kLm1vZGFsaWFzLCAzMiwKIAkJCQkgInNvdW5kLWxheW91dC0lZCIsIGxheW91dCk7CiAJCQlvayA9IDE7CisJCX0gZWxzZSB7CisJCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImRldmljZS1pZCIsIE5VTEwpOworCQkJLyoKKwkJCSAqIFdlIHByb2JhYmx5IGNhbm5vdCBoYW5kbGUgYWxsIGRldmljZS1pZCBtYWNoaW5lcywKKwkJCSAqIHNvIHJlc3RyaWN0IHRvIHRob3NlIHdlIGRvIGhhbmRsZSBmb3Igbm93LgorCQkJICovCisJCQlpZiAoaWQgJiYgKCppZCA9PSAyMiB8fCAqaWQgPT0gMTQgfHwgKmlkID09IDM1KSkgeworCQkJCXNucHJpbnRmKGRldi0+c291bmQubW9kYWxpYXMsIDMyLAorCQkJCQkgImFvYS1kZXZpY2UtaWQtJWQiLCAqaWQpOworCQkJCW9rID0gMTsKKwkJCQlsYXlvdXQgPSAtMTsKKwkJCX0KIAkJfQogCX0KIAkvKiBmb3IgdGhlIHRpbWUgYmVpbmcsIHVudGlsIHdlIGNhbiBoYW5kbGUgbm9uLWxheW91dC1pZApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL0tjb25maWcgYi9zb3VuZC9hcm0vS2NvbmZpZwppbmRleCBmOGU2ZGU0Li44ODU2ODNhIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vS2NvbmZpZworKysgYi9zb3VuZC9hcm0vS2NvbmZpZwpAQCAtMTEsMTcgKzExLDYgQEAKIAogaWYgU05EX0FSTQogCi1jb25maWcgU05EX1NBMTFYWF9VREExMzQxCi0JdHJpc3RhdGUgIlNBMTF4eCBVREExMzQxVFMgZHJpdmVyIChpUGFxIEgzNjAwKSIKLQlkZXBlbmRzIG9uIEFSQ0hfU0ExMTAwICYmIEwzCi0Jc2VsZWN0IFNORF9QQ00KLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgQ29tcGFxIGlQYXEgSDN4MDAgaGFuZGhlbGQgY29tcHV0ZXIKLQkgIGFuZCB3YW50IHRvIHVzZSBpdHMgUGhpbGlwcyBVREEgMTM0MSBhdWRpbyBjaGlwLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzbmQtc2ExMXh4LXVkYTEzNDEuCi0KIGNvbmZpZyBTTkRfQVJNQUFDSQogCXRyaXN0YXRlICJBUk0gUHJpbWVDZWxsIFBMMDQxIEFDIExpbmsgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTV9BTUJBCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vTWFrZWZpbGUgYi9zb3VuZC9hcm0vTWFrZWZpbGUKaW5kZXggMjA1NGRlMS4uNWE1NDllZCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL01ha2VmaWxlCisrKyBiL3NvdW5kL2FybS9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIEFMU0EKICMKIAotb2JqLSQoQ09ORklHX1NORF9TQTExWFhfVURBMTM0MSkgKz0gc25kLXNhMTF4eC11ZGExMzQxLm8gCi1zbmQtc2ExMXh4LXVkYTEzNDEtb2JqcwkJOj0gc2ExMXh4LXVkYTEzNDEubwotCiBvYmotJChDT05GSUdfU05EX0FSTUFBQ0kpCSs9IHNuZC1hYWNpLm8KIHNuZC1hYWNpLW9ianMJCQk6PSBhYWNpLm8gZGV2ZG1hLm8KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggNzcyOTAxZS4uN2ZiZDY4ZiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC05OTUsMTAgKzk5NSwxMSBAQAogewogCXN0cnVjdCBhYWNpICphYWNpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKLQkJCSAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQkgICAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhYWNpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IGFhY2lfZnJlZV9jYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDM1YWZkMGMuLjJlNjM1NWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTMxLDYgKzMxLDcgQEAKIHN0YXRpYyB2b2xhdGlsZSBsb25nIGdzcl9iaXRzOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdjb25mX2NsazsKK3N0YXRpYyBpbnQgcmVzZXRfZ3BpbzsKIAogLyoKICAqIEJld2FyZSBQWEEyN3ggYnVnczoKQEAgLTQyLDYgKzQzLDQ1IEBACiAgKiAxIGppZmZ5IHRpbWVvdXQgaWYgaW50ZXJydXB0IG5ldmVyIGNvbWVzKS4KICAqLwogCitlbnVtIHsKKwlSRVNFVEdQSU9fRk9SQ0VfSElHSCwKKwlSRVNFVEdQSU9fRk9SQ0VfTE9XLAorCVJFU0VUR1BJT19OT1JNQUxfQUxURlVOQworfTsKKworLyoqCisgKiBzZXRfcmVzZXRncGlvX21vZGUgLSBjb21wdXRlcyBhbmQgc2V0cyB0aGUgQUM5N19SRVNFVCBncGlvIG1vZGUgb24gUFhBCisgKiBAbW9kZTogY2hvc2VuIGFjdGlvbgorICoKKyAqIEFzIHRoZSBQWEEyN3ggQ1BVcyBzdWZmZXIgZnJvbSBhIEFDOTcgYnVnLCBhIG1hbnVhbCBjb250cm9sIG9mIHRoZSByZXNldCBsaW5lCisgKiBtdXN0IGJlIGRvbmUgdG8gaW5zdXJlIHByb3BlciB3b3JrIG9mIEFDOTcgcmVzZXQgbGluZS4gIFRoaXMgZnVuY3Rpb24KKyAqIGNvbXB1dGVzIHRoZSBjb3JyZWN0IGdwaW9fbW9kZSBmb3IgZnVydGhlciB1c2UgYnkgcmVzZXQgZnVuY3Rpb25zLCBhbmQKKyAqIGFwcGxpZWQgdGhlIGNoYW5nZSB0aHJvdWdoIHB4YV9ncGlvX21vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9yZXNldGdwaW9fbW9kZShpbnQgcmVzZXRncGlvX2FjdGlvbikKK3sKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAocmVzZXRfZ3BpbykKKwkJc3dpdGNoIChyZXNldGdwaW9fYWN0aW9uKSB7CisJCWNhc2UgUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DOgorCQkJaWYgKHJlc2V0X2dwaW8gPT0gMTEzKQorCQkJCW1vZGUgPSAxMTMgfCBHUElPX09VVCB8IEdQSU9fREZMVF9MT1c7CisJCQlpZiAocmVzZXRfZ3BpbyA9PSA5NSkKKwkJCQltb2RlID0gOTUgfCBHUElPX0FMVF9GTl8xX09VVDsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9MT1c6CisJCQltb2RlID0gcmVzZXRfZ3BpbyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0xPVzsKKwkJCWJyZWFrOworCQljYXNlIFJFU0VUR1BJT19GT1JDRV9ISUdIOgorCQkJbW9kZSA9IHJlc2V0X2dwaW8gfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIOworCQkJYnJlYWs7CisJCX07CisKKwlpZiAobW9kZSkKKwkJcHhhX2dwaW9fbW9kZShtb2RlKTsKK30KKwogdW5zaWduZWQgc2hvcnQgcHhhMnh4X2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2YWwgPSAtMTsKQEAgLTEzNywxMCArMTc3LDEwIEBACiAKIAkvKiB3YXJtIHJlc2V0IGJyb2tlbiBvbiBCdWx2ZXJkZSwKIAkgICBzbyBtYW51YWxseSBrZWVwIEFDOTcgcmVzZXQgaGlnaCAqLwotCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19GT1JDRV9ISUdIKTsKIAl1ZGVsYXkoMTApOwogCUdDUiB8PSBHQ1JfV0FSTV9SU1Q7Ci0JcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX0FMVF9GTl8yX09VVCk7CisJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJdWRlbGF5KDUwMCk7CiB9CiAKQEAgLTMwOCw4ICszNDgsOCBAQAogCQlweGFfZ3Bpb19tb2RlKEdQSU8yOV9TREFUQV9JTl9BQzk3X01EKTsKIAl9CiAJaWYgKGNwdV9pc19weGEyN3goKSkgewotCQkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwotCQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKKwkJLyogVXNlIEdQSU8gMTEzIG9yIDk1IGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KKwkJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJfQogCWNsa19lbmFibGUoYWM5N19jbGspOwogCXJldHVybiAwOwpAQCAtMzIwLDYgKzM2MCwyNyBAQAogaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19od19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgcHhhMnh4X2FjOTdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBkYXRhKSB7CisJCXN3aXRjaCAocGRhdGEtPnJlc2V0X2dwaW8pIHsKKwkJY2FzZSA5NToKKwkJY2FzZSAxMTM6CisJCQlyZXNldF9ncGlvID0gcGRhdGEtPnJlc2V0X2dwaW87CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkludmFsaWQgcmVzZXQgR1BJTyAlZFxuIiwKKwkJCQlwZGF0YS0+cmVzZXRfZ3Bpbyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY3B1X2lzX3B4YTI3eCgpKQorCQkJcmVzZXRfZ3BpbyA9IDExMzsKKwl9CiAKIAlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwpAQCAtMzMwLDcgKzM5MSw3IEBACiAKIAlpZiAoY3B1X2lzX3B4YTI3eCgpKSB7CiAJCS8qIFVzZSBHUElPIDExMyBhcyBBQzk3IFJlc2V0IG9uIEJ1bHZlcmRlICovCi0JCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCQlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DKTsKIAkJYWM5N2NvbmZfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJBQzk3Q09ORkNMSyIpOwogCQlpZiAoSVNfRVJSKGFjOTdjb25mX2NsaykpIHsKIAkJCXJldCA9IFBUUl9FUlIoYWM5N2NvbmZfY2xrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggODVjZjU5MS4uN2VkMTAwYyAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTE3MywxMCArMTczLDkgQEAKIAlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5N190ZW1wbGF0ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gLUVOT01FTTsKLQljYXJkID0gc25kX2NhcmRfbmV3KFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAotCQkJICAgIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJICAgICAgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CiAKIAljYXJkLT5kZXYgPSAmZGV2LT5kZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYyBiL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGNkNTFkLi4wMDAwMDAwCi0tLSBhL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTgzICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciBQaGlsaXBzIFVEQTEzNDFUUyBvbiBDb21wYXEgaVBBUSBIMzYwMCBzb3VuZGNhcmQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4KLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKiAKLSAqIEhpc3Rvcnk6Ci0gKgotICogMjAwMi0wMy0xMyAgIFRvbWFzIEthc3BhcmVrICBpbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiBoMzYwMC11ZGExMzQxLmMgZnJvbSBPU1MKLSAqIDIwMDItMDMtMjAgICBUb21hcyBLYXNwYXJlayAgcGxheWJhY2sgb3ZlciBBTFNBIGlzIHdvcmtpbmcKLSAqIDIwMDItMDMtMjggICBUb21hcyBLYXNwYXJlayAgcGxheWJhY2sgb3ZlciBPU1MgZW11bGF0aW9uIGlzIHdvcmtpbmcKLSAqIDIwMDItMDMtMjkgICBUb21hcyBLYXNwYXJlayAgYmFzaWMgY2FwdHVyZSBpcyB3b3JraW5nIChuYXRpdmUgQUxTQSkKLSAqIDIwMDItMDMtMjkgICBUb21hcyBLYXNwYXJlayAgY2FwdHVyZSBpcyB3b3JraW5nIChPU1MgZW11bGF0aW9uKQotICogMjAwMi0wNC0wNCAgIFRvbWFzIEthc3BhcmVrICBiZXR0ZXIgcmF0ZXMgaGFuZGxpbmcgKGFsbG93IG5vbi1zdGFuZGFyZCByYXRlcykKLSAqIDIwMDMtMDItMTQgICBCcmlhbiBBdmVyeSAgICAgZml4ZWQgZnVsbCBkdXBsZXggbW9kZSwgb3RoZXIgdXBkYXRlcwotICogMjAwMy0wMi0yMCAgIFRvbWFzIEthc3BhcmVrICBtZXJnZWQgdXBkYXRlcyBieSBCcmlhbiAoZXhjZXB0IEhBTCkKLSAqIDIwMDMtMDQtMTkgICBKYXJvc2xhdiBLeXNlbGEgcmVjb2RlZCBETUEgc3R1ZmYgdG8gZm9sbG93IDIuNC4xOHJtazMtaGgyNCBrZXJuZWwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2luZyBzdXNwZW5kIGFuZCByZXN1bWUKLSAqIDIwMDMtMDQtMjggICBUb21hcyBLYXNwYXJlayAgdXBkYXRlZCB3b3JrIGJ5IEphcm9zbGF2IHRvIGNvbXBpbGUgaXQgdW5kZXIgMi41LnggYWdhaW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkIEhBTCBsYXllciAocGF0Y2hlcyBmcm9tIEJyaWFuKQotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogVG8gdW5kZXJzdGFuZCB3aGF0IEFsc2EgRHJpdmVycyBzaG91bGQgYmUgZG9pbmcgbG9vayBhdCAiV3JpdGluZyBhbiBBbHNhIERyaXZlciIgYnkgVGFrYXNoaSBJd2FpCi0qIGF2YWlsYWJsZSBpbiB0aGUgQWxzYSBkb2Mgc2VjdGlvbiBvbiB0aGUgd2Vic2l0ZQkJCi0qIAotKiBBIGZldyBub3RlcyB0byBtYWtlIHRoaW5ncyBjbGVhcmVyLiBUaGUgVURBMTM0MSBpcyBob29rZWQgdXAgdG8gU2VyaWFsIHBvcnQgNCBvbiB0aGUgU0ExMTAwLgotKiBXZSBhcmUgdXNpbmcgIFNTUCBtb2RlIHRvIHRhbGsgdG8gdGhlIFVEQTEzNDEuIFRoZSBVREExMzQxIGJpdCAmIHdvcmRzZWxlY3QgY2xvY2tzIGFyZSBnZW5lcmF0ZWQKLSogYnkgdGhpcyBVQVJULiBVbmZvcnR1bmF0ZWx5LCB0aGUgY2xvY2sgb25seSBydW5zIGlmIHRoZSB0cmFuc21pdCBidWZmZXIgaGFzIHNvbWV0aGluZyBpbiBpdC4KLSogU28sIGlmIHdlIGFyZSBqdXN0IHJlY29yZGluZywgd2UgZmVlZCB0aGUgdHJhbnNtaXQgRE1BIHN0cmVhbSBhIGJ1bmNoIG9mIDB4MDAwMCBzbyB0aGF0IHRoZQotKiB0cmFuc21pdCBidWZmZXIgaXMgZnVsbCBhbmQgdGhlIGNsb2NrIGtlZXBzIGdvaW5nLiBUaGUgemVyb2VzIGNvbWUgZnJvbSBGTFVTSF9CQVNFX1BIWVMgd2hpY2gKLSogaXMgYSBtZW0gbG9jIHRoYXQgYWx3YXlzIGRlY29kZXMgdG8gMCdzIHcvIG5vIG9mZiBjaGlwIGFjY2Vzcy4KLSoKLSogU29tZSBhbHNhIHRlcm1pbm9sb2d5OgotKglmcmFtZSA9PiBudW1fY2hhbm5lbHMgKiBzYW1wbGVfc2l6ZSAgZS5nIHN0ZXJlbyAxNiBiaXQgaXMgMiAqIDE2ID0gMzIgYnl0ZXMKLSoJcGVyaW9kID0+IHRoZSBsZWFzdCBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCBlLmcuIHdlIGhhdmUgYSAxMDI0IGJ5dGUKLSogICAgICAgICAgICAgYnVmZmVyIGFuZCA0IHBlcmlvZHMgaW4gdGhlIHJ1bnRpbWUgc3RydWN0dXJlIHRoaXMgbWVhbnMgd2UnbGwgZ2V0IGFuIGludCBldmVyeSAyNTYKLSogICAgICAgICAgICAgYnl0ZXMgb3IgNCB0aW1lcyBwZXIgYnVmZmVyLgotKiAgICAgICAgICAgICBBIG51bWJlciBvZiB0aGUgc2l6ZXMgYXJlIGluIGZyYW1lcyByYXRoZXIgdGhhbiBieXRlcywgdXNlIGZyYW1lc190b19ieXRlcyBhbmQKLSogICAgICAgICAgICAgYnl0ZXNfdG9fZnJhbWVzIHRvIGNvbnZlcnQuICBUaGUgZWFzaWVzdCB3YXkgdG8gdGVsbCB0aGUgdW5pdHMgaXMgdG8gbG9vayBhdCB0aGUKLSogICAgICAgICAgICAgdHlwZSBpLmUuIHJ1bnRpbWUtPiBidWZmZXJfc2l6ZSBpcyBpbiBmcmFtZXMgYW5kIGl0cyB0eXBlIGlzIHNuZF9wY21fdWZyYW1lc190Ci0qICAgICAgICAgICAgIAotKglOb3RlcyBhYm91dCB0aGUgcG9pbnRlciBmeG46Ci0qCVRoZSBwb2ludGVyIGZ4biBuZWVkcyB0byByZXR1cm4gdGhlIG9mZnNldCBpbnRvIHRoZSBkbWEgYnVmZmVyIGluIGZyYW1lcy4KLSoJSW50ZXJydXB0cyBtdXN0IGJlIGJsb2NrZWQgYmVmb3JlIGNhbGxpbmcgdGhlIGRtYV9nZXRfcG9zIGZ4biB0byBhdm9pZCByYWNlIHdpdGggaW50ZXJydXB0cy4KLSoKLSoJTm90ZXMgYWJvdXQgcGF1c2UvcmVzdW1lCi0qCUltcGxlbWVudGluZyB0aGlzIHdvdWxkIGJlIGNvbXBsaWNhdGVkIHNvIGl0J3Mgc2tpcHBlZC4gIFRoZSBwcm9ibGVtIGNhc2UgaXM6Ci0qCUEgZnVsbCBkdXBsZXggY29ubmVjdGlvbiBpcyBnb2luZywgdGhlbiBwbGF5IGlzIHBhdXNlZC4gQXQgdGhpcyBwb2ludCB5b3UgbmVlZCB0byBzdGFydCB4bWl0dGluZwotKgkwJ3MgdG8ga2VlcCB0aGUgcmVjb3JkIGFjdGl2ZSB3aGljaCBtZWFucyB5b3UgY2FudCBqdXN0IGZyZWV6ZSB0aGUgZG1hIGFuZCByZXN1bWUgaXQgbGF0ZXIgeW91J2QKLSoJbmVlZCB0bwlzYXZlIG9mZiB0aGUgZG1hIGluZm8sIGFuZCByZXN0b3JlIGl0IHByb3Blcmx5IG9uIGEgcmVzdW1lLiAgWWVhY2ghCi0qCi0qCU5vdGVzIGFib3V0IHRyYW5zZmVyIG1ldGhvZHM6Ci0qCVRoZSBhc3luYyB3cml0ZSBjYWxscyBmYWlsLiAgSSBwcm9iYWJseSBuZWVkIHRvIGltcGxlbWVudCBzb21ldGhpbmcgZWxzZSB0byBzdXBwb3J0IHRoZW0/Ci0qIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaWZkZWYgQ09ORklHX1BNCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaDM2MDAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9sMy9sMy5oPgotCi0jdW5kZWYgREVCVUdfTU9ERQotI3VuZGVmIERFQlVHX0ZVTkNUSU9OX05BTUVTCi0jaW5jbHVkZSA8c291bmQvdWRhMTM0MS5oPgotCi0vKgotICogRklYTUU6IElzIHRoaXMgZW5vdWdoIGFzIGF1dG9kZXRlY3Rpb24gb2YgMi40Llgtcm1rWS1oaFoga2VybmVscz8KLSAqIFdlIHVzZSBETUEgc3R1ZmYgZnJvbSAyLjQuMTgtcm1rMy1oaDI0IGhlcmUgdG8gYmUgYWJsZSB0byBjb21waWxlIHRoaXMKLSAqIG1vZHVsZSBmb3IgRmFtaWxpYXIgMC42LjEKLSAqLwotCi0vKiB7e3sgVHlwZSBkZWZpbml0aW9ucyAqLwotCi1NT0RVTEVfQVVUSE9SKCJUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQTExMDAvU0ExMTExICsgVURBMTM0MVRTIGRyaXZlciBmb3IgQUxTQSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VURBMTM0MSxpUEFRIEgzNjAwIFVEQTEzNDFUU319Iik7Ci0KLXN0YXRpYyBjaGFyICppZDsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwotCi1tb2R1bGVfcGFyYW0oaWQsIGNoYXJwLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIFNBMTEwMC9TQTExMTEgKyBVREExMzQxVFMgc291bmRjYXJkLiIpOwotCi1zdHJ1Y3QgYXVkaW9fc3RyZWFtIHsKLQljaGFyICppZDsJCS8qIGlkZW50aWZpY2F0aW9uIHN0cmluZyAqLwotCWludCBzdHJlYW1faWQ7CQkvKiBudW1lcmljIGlkZW50aWZpY2F0aW9uICovCQotCWRtYV9kZXZpY2VfdCBkbWFfZGV2OwkvKiBkZXZpY2UgaWRlbnRpZmllciBmb3IgRE1BICovCi0jaWZkZWYgSEhfVkVSU0lPTgotCWRtYWNoX3QgZG1hY2g7CQkvKiBkbWEgY2hhbm5lbCBpZGVudGlmaWNhdGlvbiAqLwotI2Vsc2UKLQlkbWFfcmVnc190ICpkbWFfcmVnczsJLyogcG9pbnRzIHRvIG91ciBETUEgcmVnaXN0ZXJzICovCi0jZW5kaWYKLQl1bnNpZ25lZCBpbnQgYWN0aXZlOjE7CS8qIHdlIGFyZSB1c2luZyB0aGlzIHN0cmVhbSBmb3IgdHJhbnNmZXIgbm93ICovCi0JaW50IHBlcmlvZDsJCS8qIGN1cnJlbnQgdHJhbnNmZXIgcGVyaW9kICovCi0JaW50IHBlcmlvZHM7CQkvKiBjdXJyZW50IGNvdW50IG9mIHBlcmlvZHMgcmVnaXN0ZXJkIGluIHRoZSBETUEgZW5naW5lICovCi0JaW50IHR4X3NwaW47CQkvKiBhcmUgd2UgcmVjb2RpbmcgLSBmbGFnIHVzZWQgdG8gZG8gRE1BIHRyYW5zLiBmb3Igc3luYyAqLwotCXVuc2lnbmVkIGludCBvbGRfb2Zmc2V0OwotCXNwaW5sb2NrX3QgZG1hX2xvY2s7CS8qIGZvciBsb2NraW5nIGluIERNQSBvcGVyYXRpb25zIChzZWUgZG1hLXNhMTEwMC5jIGluIHRoZSBrZXJuZWwpICovCi0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdHJlYW07Ci19OwotCi1zdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxOwotCXN0cnVjdCBzbmRfcGNtICpwY207Ci0JbG9uZyBzYW1wbGVyYXRlOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gc1syXTsJLyogcGxheWJhY2sgJiBjYXB0dXJlICovCi19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPSB7Ci0JODAwMCwgIDEwNjY2LCAxMDk4NSwgMTQ2NDcsCi0JMTYwMDAsIDIxOTcwLCAyMjA1MCwgMjQwMDAsCi0JMjk0MDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGh3X2NvbnN0cmFpbnRzX3JhdGVzID0gewotCS5jb3VudAk9IEFSUkFZX1NJWkUocmF0ZXMpLAotCS5saXN0CT0gcmF0ZXMsCi0JLm1hc2sJPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQotLyogfX19ICovCi0KLS8qIHt7eyBDbG9jayBhbmQgc2FtcGxlIHJhdGUgc3R1ZmYgKi8KLQotLyoKLSAqIFN0b3AtZ2FwIHNvbHV0aW9uIHVudGlsIHJlc3Qgb2YgaGgub3JnIEhBTCBzdHVmZiBpcyBtZXJnZWQuCi0gKi8KLSNkZWZpbmUgR1BJT19IMzYwMF9DTEtfU0VUMAkJR1BJT19HUElPICgxMikKLSNkZWZpbmUgR1BJT19IMzYwMF9DTEtfU0VUMQkJR1BJT19HUElPICgxMykKLQotI2lmZGVmIENPTkZJR19TQTExMDBfSDNYWFgKLSNkZWZpbmUJY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKHgpCWNscl9oMzYwMF9lZ3Bpbyh4KQotI2RlZmluZSBzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oeCkJc2V0X2gzNjAwX2VncGlvKHgpCi0jZWxzZQotI2Vycm9yIFRoaXMgZHJpdmVyIGNvdWxkIHNlcnZlIEgzeDAwIGhhbmRoZWxkcyBvbmx5IQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX3NldF9hdWRpb19jbG9jayhsb25nIHZhbCkKLXsKLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMjQwMDA6IGNhc2UgMzIwMDA6IGNhc2UgNDgwMDA6CS8qIDAwOiAxMi4yODggTUh6ICovCi0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQwIHwgR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDIyMDUwOiBjYXNlIDI5NDAwOiBjYXNlIDQ0MTAwOgkvKiAwMTogMTEuMjg5NiBNSHogKi8KLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDA7Ci0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQotCWNhc2UgODAwMDogY2FzZSAxMDY2NjogY2FzZSAxNjAwMDoJLyogMTA6IDQuMDk2IE1IeiAqLwotCQlHUENSID0gR1BJT19IMzYwMF9DTEtfU0VUMDsKLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAxMDk4NTogY2FzZSAxNDY0NzogY2FzZSAyMTk3MDoJLyogMTE6IDUuNjI0NSBNSHogKi8KLQkJR1BTUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDAgfCBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX3NldF9zYW1wbGVyYXRlKHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEsIGxvbmcgcmF0ZSkKLXsKLQlpbnQgY2xrX2RpdiA9IDA7Ci0JaW50IGNsaz0wOwotCi0JLyogV2UgZG9uJ3Qgd2FudCB0byBtZXNzIHdpdGggY2xvY2tzIHdoZW4gZnJhbWVzIGFyZSBpbiBmbGlnaHQgKi8KLQlTZXI0U1NDUjAgJj0gflNTQ1IwX1NTRTsKLQkvKiB3YWl0IGZvciBhbnkgZnJhbWUgdG8gY29tcGxldGUgKi8KLQl1ZGVsYXkoMTI1KTsKLQotCS8qCi0JICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNsb2NrIHNvdXJjZXM6Ci0JICogNC4wOTYgTUh6LCA1LjYyNDUgTUh6LCAxMS4yODk2IE1IeiwgMTIuMjg4IE1IegotCSAqIFRob3NlIGNhbiBiZSBkaXZpZGVkIGVpdGhlciBieSAyNTYsIDM4NCBvciA1MTIuCi0JICogVGhpcyBtYWtlcyB1cCAxMiBjb21iaW5hdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgc2FtcGxlcmF0ZXMuLi4KLQkgKi8KLQlpZiAocmF0ZSA+PSA0ODAwMCkKLQkJcmF0ZSA9IDQ4MDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gNDQxMDApCi0JCXJhdGUgPSA0NDEwMDsKLQllbHNlIGlmIChyYXRlID49IDMyMDAwKQotCQlyYXRlID0gMzIwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyOTQwMCkKLQkJcmF0ZSA9IDI5NDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjQwMDApCi0JCXJhdGUgPSAyNDAwMDsKLQllbHNlIGlmIChyYXRlID49IDIyMDUwKQotCQlyYXRlID0gMjIwNTA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyMTk3MCkKLQkJcmF0ZSA9IDIxOTcwOwotCWVsc2UgaWYgKHJhdGUgPj0gMTYwMDApCi0JCXJhdGUgPSAxNjAwMDsKLQllbHNlIGlmIChyYXRlID49IDE0NjQ3KQotCQlyYXRlID0gMTQ2NDc7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxMDk4NSkKLQkJcmF0ZSA9IDEwOTg1OwotCWVsc2UgaWYgKHJhdGUgPj0gMTA2NjYpCi0JCXJhdGUgPSAxMDY2NjsKLQllbHNlCi0JCXJhdGUgPSA4MDAwOwotCi0JLyogU2V0IHRoZSBleHRlcm5hbCBjbG9jayBnZW5lcmF0b3IgKi8KLQkKLQlzYTExeHhfdWRhMTM0MV9zZXRfYXVkaW9fY2xvY2socmF0ZSk7Ci0KLQkvKiBTZWxlY3QgdGhlIGNsb2NrIGRpdmlzb3IgKi8KLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxMDk4NToKLQljYXNlIDIyMDUwOgotCWNhc2UgMjQwMDA6Ci0JCWNsayA9IEY1MTI7Ci0JCWNsa19kaXYgPSBTU0NSMF9TZXJDbGtEaXYoMTYpOwotCQlicmVhazsKLQljYXNlIDE2MDAwOgotCWNhc2UgMjE5NzA6Ci0JY2FzZSA0NDEwMDoKLQljYXNlIDQ4MDAwOgotCQljbGsgPSBGMjU2OwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDgpOwotCQlicmVhazsKLQljYXNlIDEwNjY2OgotCWNhc2UgMTQ2NDc6Ci0JY2FzZSAyOTQwMDoKLQljYXNlIDMyMDAwOgotCQljbGsgPSBGMzg0OwotCQljbGtfZGl2ID0gU1NDUjBfU2VyQ2xrRGl2KDEyKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogRk1UIHNldHRpbmcgc2hvdWxkIGJlIG1vdmVkIGF3YXkgd2hlbiBvdGhlciBGTVRzIGFyZSBhZGRlZCAoRklYTUUpICovCi0JbDNfY29tbWFuZChzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSwgQ01EX0ZPUk1BVCwgKHZvaWQgKilMU0IxNik7Ci0JCi0JbDNfY29tbWFuZChzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSwgQ01EX0ZTLCAodm9pZCAqKWNsayk7ICAgICAgICAKLQlTZXI0U1NDUjAgPSAoU2VyNFNTQ1IwICYgfjB4ZmYwMCkgKyBjbGtfZGl2ICsgU1NDUjBfU1NFOwotCXNhMTF4eF91ZGExMzQxLT5zYW1wbGVyYXRlID0gcmF0ZTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBIVyBpbml0IGFuZCBzaHV0ZG93biAqLwotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KHN0cnVjdCBzYTExeHhfdWRhMTM0MSAqc2ExMXh4X3VkYTEzNDEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFNldHVwIERNQSBzdHVmZiAqLwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmlkID0gIlVEQTEzNDEgb3V0IjsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5zdHJlYW1faWQgPSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYV9kZXYgPSBETUFfU2VyNFNTUFdyOwotCi0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5pZCA9ICJVREExMzQxIGluIjsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN0cmVhbV9pZCA9IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRTsKLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYV9kZXYgPSBETUFfU2VyNFNTUFJkOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVURBMTM0MSBpbnRlcm5hbCBzdGF0ZSAqLwotICAgICAgIAotCS8qIFNldHVwIHRoZSB1YXJ0cyAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlHQUZSIHw9IChHUElPX1NTUF9DTEspOwotCUdQRFIgJj0gfihHUElPX1NTUF9DTEspOwotCVNlcjRTU0NSMCA9IDA7Ci0JU2VyNFNTQ1IwID0gU1NDUjBfRGF0YVNpemUoMTYpICsgU1NDUjBfVEkgKyBTU0NSMF9TZXJDbGtEaXYoOCk7Ci0JU2VyNFNTQ1IxID0gU1NDUjFfU0Nsa0lhY3RMICsgU1NDUjFfU0NsazFQICsgU1NDUjFfRXh0Q2xrOwotCVNlcjRTU0NSMCB8PSBTU0NSMF9TU0U7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogRW5hYmxlIHRoZSBhdWRpbyBwb3dlciAqLwotCi0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19BVURJT19PTik7Ci0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotIAotCS8qIFdhaXQgZm9yIHRoZSBVREExMzQxIHRvIHdha2UgdXAgKi8KLQltZGVsYXkoMSk7IC8vRklYTUUgLSB3YXMgcmVtb3ZlZCBieSBQZXJleCAtIFdoeT8KLQotCS8qIEluaXRpYWxpemUgdGhlIFVEQTEzNDEgaW50ZXJuYWwgc3RhdGUgKi8KLQlsM19vcGVuKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxKTsKLQkKLQkvKiBleHRlcm5hbCBjbG9jayBjb25maWd1cmF0aW9uIChhZnRlciBsM19vcGVuIC0gcmVncyBtdXN0IGJlIGluaXRpYWxpemVkICovCi0Jc2ExMXh4X3VkYTEzNDFfc2V0X3NhbXBsZXJhdGUoc2ExMXh4X3VkYTEzNDEsIHNhMTF4eF91ZGExMzQxLT5zYW1wbGVyYXRlKTsKLQotCS8qIFdhaXQgZm9yIHRoZSBVREExMzQxIHRvIHdha2UgdXAgKi8KLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQpOwotCW1kZWxheSgxKTsJCi0KLQkvKiBtYWtlIHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVscyB1bnN3YXBwZWQgKGZsaXAgdGhlIFdTIGxhdGNoKSAqLwotCVNlcjRTU0RSID0gMDsKLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLX0KLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfYXVkaW9fc2h1dGRvd24oc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSkKLXsKLQkvKiBtdXRlIG9uICovCi0Jc2V0X3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotCQotCS8qIGRpc2FibGUgdGhlIGF1ZGlvIHBvd2VyIGFuZCBhbGwgc2lnbmFscyBsZWFkaW5nIHRvIHRoZSBhdWRpbyBjaGlwICovCi0JbDNfY2xvc2Uoc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEpOwotCVNlcjRTU0NSMCA9IDA7Ci0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQ09ERUNfTlJFU0VUKTsKLQotCS8qIHBvd2VyIG9mZiBhbmQgbXV0ZSBvZmYgKi8KLQkvKiBGSVhNRSAtIGlzIG11dGluZyBvZmYgbmVjZXNhcnk/Pz8gKi8KLQotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0FVRElPX09OKTsKLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgRE1BIHN0YWZmICovCi0KLS8qCi0gKiB0aGVzZSBhcmUgdGhlIGFkZHJlc3MgYW5kIHNpemVzIHVzZWQgdG8gZmlsbCB0aGUgeG1pdCBidWZmZXIKLSAqIHNvIHdlIGNhbiBnZXQgYSBjbG9jayBpbiByZWNvcmQgb25seSBtb2RlCi0gKi8KLSNkZWZpbmUgRk9SQ0VfQ0xPQ0tfQUREUgkJKGRtYV9hZGRyX3QpRkxVU0hfQkFTRV9QSFlTCi0jZGVmaW5lIEZPUkNFX0NMT0NLX1NJWkUJCTQwOTYgLy8gd2FzIDIwNDgKLQotLy8gRklYTUUgV2h5IHRoaXMgdmFsdWUgZXhhY3RseSAtIHdyb3RlIGNvbW1lbnQKLSNkZWZpbmUgRE1BX0JVRl9TSVpFCTgxNzYJLyogPD0gTUFYX0RNQV9TSVpFIGZyb20gYXNtL2FyY2gtc2ExMTAwL2RtYS5oICovCi0KLSNpZmRlZiBISF9WRVJTSU9OCi0KLXN0YXRpYyBpbnQgYXVkaW9fZG1hX3JlcXVlc3Qoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcywgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICosIGludCkpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNhMTEwMF9yZXF1ZXN0X2RtYSgmcy0+ZG1hY2gsIHMtPmlkLCBzLT5kbWFfZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIGF1ZGlvIGRtYSAweCV4XG4iLCBzLT5kbWFfZGV2KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0Jc2ExMTAwX2RtYV9zZXRfY2FsbGJhY2socy0+ZG1hY2gsIGNhbGxiYWNrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF1ZGlvX2RtYV9mcmVlKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc2ExMTAwX2ZyZWVfZG1hKHMtPmRtYWNoKTsKLQlzLT5kbWFjaCA9IC0xOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW50IGF1ZGlvX2RtYV9yZXF1ZXN0KHN0cnVjdCBhdWRpb19zdHJlYW0gKnMsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2ExMTAwX3JlcXVlc3RfZG1hKHMtPmRtYV9kZXYsIHMtPmlkLCBjYWxsYmFjaywgcywgJnMtPmRtYV9yZWdzKTsKLQlpZiAocmV0IDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBhdWRpbyBkbWEgMHgleFxuIiwgcy0+ZG1hX2Rldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2ZyZWUoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzYTExMDBfZnJlZV9kbWEocy0+ZG1hX3JlZ3MpOwotCXMtPmRtYV9yZWdzID0gMDsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyB1X2ludCBhdWRpb19nZXRfZG1hX3BvcyhzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcy0+c3RyZWFtOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWRtYV9hZGRyX3QgYWRkcjsKLQkKLQkvLyB0aGlzIG11c3QgYmUgY2FsbGVkIHcvIGludGVycnVwdHMgbG9ja2VkIG91dCBzZWUgZG1hLXNhMTEwMC5jIGluIHRoZSBrZXJuZWwKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsKLSNpZmRlZiBISF9WRVJTSU9OCQotCXNhMTEwMF9kbWFfZ2V0X2N1cnJlbnQocy0+ZG1hY2gsIE5VTEwsICZhZGRyKTsKLSNlbHNlCi0JYWRkciA9IHNhMTEwMF9nZXRfZG1hX3BvcygocyktPmRtYV9yZWdzKTsKLSNlbmRpZgotCW9mZnNldCA9IGFkZHIgLSBydW50aW1lLT5kbWFfYWRkcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwotCQotCW9mZnNldCA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLG9mZnNldCk7Ci0JaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJb2Zmc2V0ID0gMDsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLS8qCi0gKiB0aGlzIHN0b3BzIHRoZSBkbWEgYW5kIGNsZWFycyB0aGUgZG1hIHB0cnMKLSAqLwotc3RhdGljIHZvaWQgYXVkaW9fc3RvcF9kbWEoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7CQotCXMtPmFjdGl2ZSA9IDA7Ci0Jcy0+cGVyaW9kID0gMDsKLQkvKiB0aGlzIHN0b3BzIHRoZSBkbWEgY2hhbm5lbCBhbmQgY2xlYXJzIHRoZSBidWZmZXIgcHRycyAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCXNhMTEwMF9jbGVhcl9kbWEocy0+ZG1hX3JlZ3MpOwkKLSNlbmRpZgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF1ZGlvX3Byb2Nlc3NfZG1hKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzLT5zdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQl1bnNpZ25lZCBpbnQgZG1hX3NpemU7CQkKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQ7Ci0gICAgICAgICAgICAgICAgCi0JLyogd2UgYXJlIHJlcXVlc3RlZCB0byBwcm9jZXNzIHN5bmNocm9uaXphdGlvbiBETUEgdHJhbnNmZXIgKi8KLQlpZiAocy0+dHhfc3BpbikgewotCQlpZiAoc25kX0JVR19PTihzLT5zdHJlYW1faWQgIT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykpCi0JCQlyZXR1cm47Ci0JCS8qIGZpbGwgdGhlIHhtaXQgZG1hIGJ1ZmZlcnMgYW5kIHJldHVybiAqLwotI2lmZGVmIEhIX1ZFUlNJT04KLQkJc2ExMTAwX2RtYV9zZXRfc3BpbihzLT5kbWFjaCwgRk9SQ0VfQ0xPQ0tfQUREUiwgRk9SQ0VfQ0xPQ0tfU0laRSk7Ci0jZWxzZQotCQl3aGlsZSAoMSkgewotCQkJcmV0ID0gc2ExMTAwX3N0YXJ0X2RtYShzLT5kbWFfcmVncywgRk9SQ0VfQ0xPQ0tfQUREUiwgRk9SQ0VfQ0xPQ0tfU0laRSk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybjsgICAKLQkJfQotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBtdXN0IGJlIHNldCBoZXJlIC0gb25seSB2YWxpZCBmb3IgcnVubmluZyBzdHJlYW1zLCBub3QgZm9yIGZvcmNlZF9jbG9jayBkbWEgZmlsbHMgICovCi0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQl3aGlsZSAocy0+YWN0aXZlICYmIHMtPnBlcmlvZHMgPCBydW50aW1lLT5wZXJpb2RzKSB7Ci0JCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQkJaWYgKHMtPm9sZF9vZmZzZXQpIHsKLQkJCS8qIGEgbGl0dGxlIHRyaWNrLCB3ZSBuZWVkIHJlc3VtZSBmcm9tIG9sZCBwb3NpdGlvbiAqLwotCQkJb2Zmc2V0ID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHMtPm9sZF9vZmZzZXQgLSAxKTsKLQkJCXMtPm9sZF9vZmZzZXQgPSAwOwotCQkJcy0+cGVyaW9kcyA9IDA7Ci0JCQlzLT5wZXJpb2QgPSBvZmZzZXQgLyBkbWFfc2l6ZTsKLQkJCW9mZnNldCAlPSBkbWFfc2l6ZTsKLQkJCWRtYV9zaXplID0gZG1hX3NpemUgLSBvZmZzZXQ7Ci0JCQlpZiAoIWRtYV9zaXplKQotCQkJCWNvbnRpbnVlOwkJLyogc3BlY2lhbCBjYXNlICovCi0JCX0gZWxzZSB7Ci0JCQlvZmZzZXQgPSBkbWFfc2l6ZSAqIHMtPnBlcmlvZDsKLQkJCXNuZF9CVUdfT04oZG1hX3NpemUgPiBETUFfQlVGX1NJWkUpOwotCQl9Ci0jaWZkZWYgSEhfVkVSU0lPTgotCQlyZXQgPSBzYTExMDBfZG1hX3F1ZXVlX2J1ZmZlcihzLT5kbWFjaCwgcywgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIGRtYV9zaXplKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybjsgLy9GSVhNRQotI2Vsc2UKLQkJcmV0ID0gc2ExMTAwX3N0YXJ0X2RtYSgocyktPmRtYV9yZWdzLCBydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgZG1hX3NpemUpOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImF1ZGlvX3Byb2Nlc3NfZG1hOiBjYW5ub3QgcXVldWUgRE1BIGJ1ZmZlciAoJWkpXG4iLCByZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQotCQlzLT5wZXJpb2QrKzsKLQkJcy0+cGVyaW9kICU9IHJ1bnRpbWUtPnBlcmlvZHM7Ci0JCXMtPnBlcmlvZHMrKzsKLQl9Ci19Ci0KLSNpZmRlZiBISF9WRVJTSU9OCi1zdGF0aWMgdm9pZCBhdWRpb19kbWFfY2FsbGJhY2sodm9pZCAqZGF0YSwgaW50IHNpemUpCi0jZWxzZQotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2NhbGxiYWNrKHZvaWQgKmRhdGEpCi0jZW5kaWYKLXsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gZGF0YTsKLSAgICAgICAgCi0JLyogCi0JICogSWYgd2UgYXJlIGdldHRpbmcgYSBjYWxsYmFjayBmb3IgYW4gYWN0aXZlIHN0cmVhbSB0aGVuIHdlIGluZm9ybQotCSAqIHRoZSBQQ00gbWlkZGxlIGxheWVyIHdlJ3ZlIGZpbmlzaGVkIGEgcGVyaW9kCi0JICovCi0gCWlmIChzLT5hY3RpdmUpCi0JCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQocy0+c3RyZWFtKTsKLQotCXNwaW5fbG9jaygmcy0+ZG1hX2xvY2spOwotCWlmICghcy0+dHhfc3BpbiAmJiBzLT5wZXJpb2RzID4gMCkKLQkJcy0+cGVyaW9kcy0tOwotCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCXNwaW5fdW5sb2NrKCZzLT5kbWFfbG9jayk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgUENNIHNldHRpbmcgKi8KLQotLyoge3t7IHRyaWdnZXIgJiB0aW1lciAqLwotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlpbnQgc3RyZWFtX2lkID0gc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW07Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqcyA9ICZjaGlwLT5zW3N0cmVhbV9pZF07Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSAqczEgPSAmY2hpcC0+c1tzdHJlYW1faWQgXiAxXTsKLQlpbnQgZXJyID0gMDsKLQotCS8qIG5vdGUgbG9jYWwgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBkaXNhYmxlZCBpbiB0aGUgbWlkbGV2ZWwgY29kZSAqLwotCXNwaW5fbG9jaygmcy0+ZG1hX2xvY2spOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJLyogbm93IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGEgcmVjb3JkIG9ubHkgc3RyZWFtIGhhcyBhIGNsb2NrICovCi0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQkvKiB3ZSBuZWVkIHRvIGZvcmNlIGZpbGwgdGhlIHhtaXQgRE1BIHdpdGggemVyb3MgKi8KLQkJCXMxLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMxKTsKLQkJfQotCQkvKiB0aGlzIGNhc2UgaXMgd2hlbiB5b3Ugd2VyZSByZWNvcmRpbmcgdGhlbiB5b3UgdHVybiBvbiBhCi0JCSAqIHBsYXliYWNrIHN0cmVhbSBzbyB3ZSBzdG9wIChhbHNvIGNsZWFycyBpdCkgdGhlIGRtYSBmaXJzdCwKLQkJICogY2xlYXIgdGhlIHN5bmMgZmxhZyBhbmQgdGhlbiB3ZSBsZXQgaXQgdHVybmVkIG9uCi0JCSAqLwkJCi0JCWVsc2UgewotIAkJCXMtPnR4X3NwaW4gPSAwOwotIAkJfQotCi0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc3RhcnR1cCAqLwotCQlzLT5hY3RpdmUgPSAxOwotCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHNodXRkb3duICovCi0JCWF1ZGlvX3N0b3BfZG1hKHMpOwotCQkKLQkJLyoKLQkJICogbm93IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGEgcmVjb3JkIG9ubHkgc3RyZWFtIGhhcyBhIGNsb2NrCi0JCSAqIHNvIGlmIHdlJ3JlIHN0b3BwaW5nIGEgcGxheWJhY2sgd2l0aCBhbiBhY3RpdmUgY2FwdHVyZQotCQkgKiB3ZSBuZWVkIHRvIHR1cm4gdGhlIDAgZmlsbCBkbWEgb24gZm9yIHRoZSB4bWl0IHNpZGUKLQkJICovCi0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJiBzMS0+YWN0aXZlKSB7Ci0JCQkvKiB3ZSBuZWVkIHRvIGZvcmNlIGZpbGwgdGhlIHhtaXQgRE1BIHdpdGggemVyb3MgKi8KLQkJCXMtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCX0KLQkJLyoKLQkJICogd2Uga2lsbGVkIGEgY2FwdHVyZSBvbmx5IHN0cmVhbSwgc28gd2Ugc2hvdWxkIGFsc28ga2lsbAotCQkgKiB0aGUgemVybyBmaWxsIHRyYW5zbWl0Ci0JCSAqLwotCQllbHNlIHsKLQkJCWlmIChzMS0+dHhfc3BpbikgewotCQkJCXMxLT50eF9zcGluID0gMDsKLQkJCQlhdWRpb19zdG9wX2RtYShzMSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQkJcy0+YWN0aXZlID0gMDsKLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9zdG9wKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQotCQlzLT5vbGRfb2Zmc2V0ID0gYXVkaW9fZ2V0X2RtYV9wb3MocykgKyAxOwotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX2ZsdXNoX2FsbChzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkKLQkJcy0+cGVyaW9kcyA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCQlzLT5hY3RpdmUgPSAxOwotCQlzLT50eF9zcGluID0gMDsKLQkJYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX3N0b3Aocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgotCQlzLT5hY3RpdmUgPSAwOwotCQlpZiAoc3RyZWFtX2lkID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJCWlmIChzMS0+YWN0aXZlKSB7Ci0JCQkJcy0+dHhfc3BpbiA9IDE7Ci0JCQkJcy0+b2xkX29mZnNldCA9IGF1ZGlvX2dldF9kbWFfcG9zKHMpICsgMTsKLSNpZmRlZiBISF9WRVJTSU9OCQkJCQotCQkJCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMtPmRtYWNoKTsKLSNlbHNlCi0JCQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCQkKLQkJCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChzMS0+dHhfc3BpbikgewotCQkJCXMxLT50eF9zcGluID0gMDsKLSNpZmRlZiBISF9WRVJTSU9OCQkJCQotCQkJCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMxLT5kbWFjaCk7Ci0jZWxzZQotCQkJCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQkJCi0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlzLT5hY3RpdmUgPSAxOwotCQlpZiAocy0+b2xkX29mZnNldCkgewotCQkJcy0+dHhfc3BpbiA9IDA7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFICYmICFzMS0+YWN0aXZlKSB7Ci0JCQlzMS0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzMSk7Ci0JCX0KLSNpZmRlZiBISF9WRVJTSU9OCQkKLQkJc2ExMTAwX2RtYV9yZXN1bWUocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2soJnMtPmRtYV9sb2NrKTsJCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gJmNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dOwotICAgICAgICAKLQkvKiBzZXQgcmVxdWVzdGVkIHNhbXBsZXJhdGUgKi8KLQlzYTExeHhfdWRhMTM0MV9zZXRfc2FtcGxlcmF0ZShjaGlwLCBydW50aW1lLT5yYXRlKTsKLQotCS8qIHNldCByZXF1ZXN0ZCBmb3JtYXQgd2hlbiBhdmFpbGFibGUgKi8KLQkvKiBzZXQgRk1UIGhlcmUgISEhIEZJWE1FICovCi0KLQlzLT5wZXJpb2QgPSAwOwotCXMtPnBlcmlvZHMgPSAwOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlyZXR1cm4gYXVkaW9fZ2V0X2RtYV9wb3MoJmNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dKTsKLX0KLQotLyogfX19ICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZSA9Ci17Ci0JLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSksCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV9LTk9UKSwKLQkucmF0ZV9taW4JCT0gODAwMCwKLQkucmF0ZV9tYXgJCT0gNDgwMDAsCi0JLmNoYW5uZWxzX21pbgkJPSAyLAotCS5jaGFubmVsc19tYXgJCT0gMiwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDY0KjEwMjQsCi0JLnBlcmlvZF9ieXRlc19taW4JPSA2NCwKLQkucGVyaW9kX2J5dGVzX21heAk9IERNQV9CVUZfU0laRSwKLQkucGVyaW9kc19taW4JCT0gMiwKLQkucGVyaW9kc19tYXgJCT0gMjU1LAotCS5maWZvX3NpemUJCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2sgPQotewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUpLAotCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFX0tOT1QpLAotCS5yYXRlX21pbgkJPSA4MDAwLAotCS5yYXRlX21heAkJPSA0ODAwMCwKLQkuY2hhbm5lbHNfbWluCQk9IDIsCi0JLmNoYW5uZWxzX21heAkJPSAyLAotCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQqMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gRE1BX0JVRl9TSVpFLAotCS5wZXJpb2RzX21pbgkJPSAyLAotCS5wZXJpb2RzX21heAkJPSAyNTUsCi0JLmZpZm9fc2l6ZQkJPSAwLAotfTsKLQotc3RhdGljIGludCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCWludCBzdHJlYW1faWQgPSBzdWJzdHJlYW0tPnBzdHItPnN0cmVhbTsKLQlpbnQgZXJyOwotCi0JY2hpcC0+c1tzdHJlYW1faWRdLnN0cmVhbSA9IHN1YnN0cmVhbTsKLQotCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcnVudGltZS0+aHcgPSBzbmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2s7Ci0JZWxzZQotCQlydW50aW1lLT5odyA9IHNuZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlOwotCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgJmh3X2NvbnN0cmFpbnRzX3JhdGVzKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQljaGlwLT5zW3N1YnN0cmVhbS0+cHN0ci0+c3RyZWFtXS5zdHJlYW0gPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0vKiB7e3sgSFcgcGFyYW1zICYgZnJlZSAqLwotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQotewotICAgICAgICAKLQlyZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwotfQotCi0vKiB9fX0gKi8KLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4JCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX29wZW4sCi0JLmNsb3NlCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jbG9zZSwKLQkuaW9jdGwJCQk9IHNuZF9wY21fbGliX2lvY3RsLAotCS5od19wYXJhbXMJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19wYXJhbXMsCi0JLmh3X2ZyZWUJICAgICAgICA9IHNuZF9zYTExeHhfdWRhMTM0MV9od19mcmVlLAotCS5wcmVwYXJlCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wcmVwYXJlLAotCS50cmlnZ2VyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV90cmlnZ2VyLAotCS5wb2ludGVyCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9wb2ludGVyLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlX29wcyA9IHsKLQkub3BlbgkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfb3BlbiwKLQkuY2xvc2UJCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2Nsb3NlLAotCS5pb2N0bAkJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X3BhcmFtcywKLQkuaHdfZnJlZQkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X2ZyZWUsCi0JLnByZXBhcmUJCT0gc25kX3NhMTF4eF91ZGExMzQxX3ByZXBhcmUsCi0JLnRyaWdnZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3RyaWdnZXIsCi0JLnBvaW50ZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3BvaW50ZXIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wY20oc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSwgaW50IGRldmljZSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwotCWludCBlcnI7Ci0KLQlpZiAoKGVyciA9IHNuZF9wY21fbmV3KHNhMTF4eF91ZGExMzQxLT5jYXJkLCAiVURBMTM0MSBQQ00iLCBkZXZpY2UsIDEsIDEsICZwY20pKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQkvKgotCSAqIHRoaXMgc2V0cyB1cCBvdXIgaW5pdGlhbCBidWZmZXJzIGFuZCBzZXRzIHRoZSBkbWFfdHlwZSB0byBpc2EuCi0JICogaXNhIHdvcmtzIGJ1dCBJJ20gbm90IHN1cmUgd2h5IChvciBpZikgaXQncyB0aGUgcmlnaHQgY2hvaWNlCi0JICogdGhpcyBtYXkgYmUgdG9vIGxhcmdlLCB0cnlpbmcgaXQgZm9yIG5vdwotCSAqLwotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsIAotCQkJCQkgICAgICBzbmRfZG1hX2lzYV9kYXRhKCksCi0JCQkJCSAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOwotCi0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrX29wcyk7Ci0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2FwdHVyZV9vcHMpOwotCXBjbS0+cHJpdmF0ZV9kYXRhID0gc2ExMXh4X3VkYTEzNDE7Ci0JcGNtLT5pbmZvX2ZsYWdzID0gMDsKLQlzdHJjcHkocGNtLT5uYW1lLCAiVURBMTM0MSBQQ00iKTsKLQotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX2luaXQoc2ExMXh4X3VkYTEzNDEpOwotCi0JLyogc2V0dXAgRE1BIGNvbnRyb2xsZXIgKi8KLQlhdWRpb19kbWFfcmVxdWVzdCgmc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10sIGF1ZGlvX2RtYV9jYWxsYmFjayk7Ci0JYXVkaW9fZG1hX3JlcXVlc3QoJnNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0sIGF1ZGlvX2RtYV9jYWxsYmFjayk7Ci0KLQlzYTExeHhfdWRhMTM0MS0+cGNtID0gcGNtOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgbW9kdWxlIGluaXQgJiBleGl0ICovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIsCi0JCQkJICAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cik7Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKLSNpZmRlZiBISF9WRVJTSU9OCi0Jc2ExMTAwX2RtYV9zbGVlcChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYWNoKTsKLQlzYTExMDBfZG1hX3NsZWVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFjaCk7Ci0jZWxzZQotCS8vRklYTUUKLSNlbmRpZgotCWwzX2NvbW1hbmQoY2hpcC0+dWRhMTM0MSwgQ01EX1NVU1BFTkQsIE5VTEwpOwotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX3NodXRkb3duKGNoaXApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCi17Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKTsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlzYTExeHhfdWRhMTM0MV9hdWRpb19pbml0KGNoaXApOwotCWwzX2NvbW1hbmQoY2hpcC0+dWRhMTM0MSwgQ01EX1JFU1VNRSwgTlVMTCk7Ci0jaWZkZWYgSEhfVkVSU0lPTgkKLQlzYTExMDBfZG1hX3dha2V1cChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYWNoKTsKLQlzYTExMDBfZG1hX3dha2V1cChjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hY2gpOwotI2Vsc2UKLQkvL0ZJWE1FCi0jZW5kaWYKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09NRklHX1BNICovCi0KLXZvaWQgc25kX3NhMTF4eF91ZGExMzQxX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCWF1ZGlvX2RtYV9mcmVlKCZjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdKTsKLQlhdWRpb19kbWFfZnJlZSgmY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc2ExMXh4X3VkYTEzNDFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcDsKLQotCS8qIHJlZ2lzdGVyIHRoZSBzb3VuZGNhcmQgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnNbMF0uZG1hX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5zWzFdLmRtYV9sb2NrKTsKLQotCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYTExeHhfdWRhMTM0MV9mcmVlOwotCWNoaXAtPmNhcmQgPSBjYXJkOwotCWNoaXAtPnNhbXBsZXJhdGUgPSBBVURJT19SQVRFX0RFRkFVTFQ7Ci0KLQkvLyBtaXhlcgotCWlmICgoZXJyID0gc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoY2FyZCwgJmNoaXAtPnVkYTEzNDEpKSkKLQkJZ290byBub2RldjsKLQotCS8vIFBDTQotCWlmICgoZXJyID0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGNtKGNoaXAsIDApKSA8IDApCi0JCWdvdG8gbm9kZXY7Ci0gICAgICAgIAotCXN0cmNweShjYXJkLT5kcml2ZXIsICJVREExMzQxIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkgzNjAwIFVEQTEzNDFUUyIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJDb21wYXEgaVBBUSBIMzYwMCB3aXRoIFBoaWxpcHMgVURBMTM0MVRTIik7Ci0gICAgICAgIAotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldnB0ci0+ZGV2KTsKLQotCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpID09IDApIHsKLQkJcHJpbnRrKCBLRVJOX0lORk8gImlQQVEgYXVkaW8gc3VwcG9ydCBpbml0aWFsaXplZFxuIiApOwotCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIGNhcmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0gICAgICAgIAotIG5vZGV2OgotCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgc2ExMXh4X3VkYTEzNDFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKLXsKLQlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgU0ExMVhYX1VEQTEzNDFfRFJJVkVSCSJzYTExeHhfdWRhMTM0MSIKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMXh4X3VkYTEzNDFfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzYTExeHhfdWRhMTM0MV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNhMTF4eF91ZGExMzQxX3JlbW92ZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfc2ExMXh4X3VkYTEzNDFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9zYTExeHhfdWRhMTM0MV9yZXN1bWUsCi0jZW5kaWYKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBTQTExWFhfVURBMTM0MV9EUklWRVIsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNhMTF4eF91ZGExMzQxX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFtYWNoaW5lX2lzX2gzeHh4KCkpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTQTExWFhfVURBMTM0MV9EUklWRVIsIC0xLCBOVUxMLCAwKTsKLQlpZiAoIUlTX0VSUihkZXZpY2UpKSB7Ci0JCWlmIChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKQotCQkJcmV0dXJuIDA7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JfSBlbHNlCi0JCWVyciA9IFBUUl9FUlIoZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXh4X3VkYTEzNDFfZHJpdmVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2ExMXh4X3VkYTEzNDFfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4eF91ZGExMzQxX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHNhMTF4eF91ZGExMzQxX2luaXQpOwotbW9kdWxlX2V4aXQoc2ExMXh4X3VkYTEzNDFfZXhpdCk7Ci0KLS8qIH19fSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9LY29uZmlnIGIvc291bmQvYXRtZWwvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzIyOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvS2NvbmZpZwpAQCAtMCwwICsxLDE5IEBACittZW51ICJBdG1lbCBkZXZpY2VzIChBVlIzMiBhbmQgQVQ5MSkiCisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTEKKworY29uZmlnIFNORF9BVE1FTF9BQkRBQworCXRyaXN0YXRlICJBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykgZHJpdmVyIgorCXNlbGVjdCBTTkRfUENNCisJZGVwZW5kcyBvbiBEV19ETUFDICYmIEFWUjMyCisJaGVscAorCSAgQUxTQSBzb3VuZCBkcml2ZXIgZm9yIHRoZSBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykuCisKK2NvbmZpZyBTTkRfQVRNRUxfQUM5N0MKKwl0cmlzdGF0ZSAiQXRtZWwgQUM5NyBDb250cm9sbGVyIChBQzk3QykgZHJpdmVyIgorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJZGVwZW5kcyBvbiBEV19ETUFDICYmIEFWUjMyCisJaGVscAorCSAgQUxTQSBzb3VuZCBkcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3IGNvbnRyb2xsZXIuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL01ha2VmaWxlIGIvc291bmQvYXRtZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5ZGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorc25kLWF0bWVsLWFiZGFjLW9ianMJCTo9IGFiZGFjLm8KK3NuZC1hdG1lbC1hYzk3Yy1vYmpzCQk6PSBhYzk3Yy5vCisKK29iai0kKENPTkZJR19TTkRfQVRNRUxfQUJEQUMpCSs9IHNuZC1hdG1lbC1hYmRhYy5vCitvYmotJChDT05GSUdfU05EX0FUTUVMX0FDOTdDKQkrPSBzbmQtYXRtZWwtYWM5N2MubwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWJkYWMuYyBiL3NvdW5kL2F0bWVsL2FiZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiM2M3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FiZGFjLmMKQEAgLTAsMCArMSw2MDIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBvbi1jaGlwIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWJkYWMuaD4KKworLyogREFDIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgREFDX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBEQUNfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIERBQ19JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgREFDX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBEQUNfSU5UX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIERBQ19JTlRfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgREFDX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxYworCisvKiBCaXRmaWVsZHMgaW4gQ1RSTCAqLworI2RlZmluZSBEQUNfU1dBUF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgREFDX1NXQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREFDX0VOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIERBQ19FTl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJpdGZpZWxkcyBpbiBJTlRfTUFTSy9JTlRfRU4vSU5UX0RJUy9JTlRfU1RBVFVTL0lOVF9DTFIgKi8KKyNkZWZpbmUgREFDX1VOREVSUlVOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIERBQ19VTkRFUlJVTl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERBQ19UWF9SRUFEWV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBEQUNfVFhfUkVBRFlfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCaXQgbWFuaXB1bGF0aW9uIG1hY3JvcyAqLworI2RlZmluZSBEQUNfQklUKG5hbWUpCQkJCQlcCisJKDEgPDwgREFDXyMjbmFtZSMjX09GRlNFVCkKKyNkZWZpbmUgREFDX0JGKG5hbWUsIHZhbHVlKQkJCQlcCisJKCgodmFsdWUpICYgKCgxIDw8IERBQ18jI25hbWUjI19TSVpFKSAtIDEpKQlcCisJIDw8IERBQ18jI25hbWUjI19PRkZTRVQpCisjZGVmaW5lIERBQ19CRkVYVChuYW1lLCB2YWx1ZSkJCQkJXAorCSgoKHZhbHVlKSA+PiBEQUNfIyNuYW1lIyNfT0ZGU0VUKQkJXAorCSAmICgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKSkKKyNkZWZpbmUgREFDX0JGSU5TKG5hbWUsIHZhbHVlLCBvbGQpCQkJXAorCSgoKG9sZCkgJiB+KCgoMSA8PCBEQUNfIyNuYW1lIyNfU0laRSkgLSAxKQlcCisJCSAgICA8PCBEQUNfIyNuYW1lIyNfT0ZGU0VUKSkJCVwKKwkgfCBEQUNfQkYobmFtZSwgdmFsdWUpKQorCisvKiBSZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCisjZGVmaW5lIGRhY19yZWFkbChwb3J0LCByZWcpCQkJCVwKKwlfX3Jhd19yZWFkbCgocG9ydCktPnJlZ3MgKyBEQUNfIyNyZWcpCisjZGVmaW5lIGRhY193cml0ZWwocG9ydCwgcmVnLCB2YWx1ZSkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWx1ZSksIChwb3J0KS0+cmVncyArIERBQ18jI3JlZykKKworLyoKKyAqIEFCREFDIHN1cHBvcnRzIGEgbWF4aW11bSBvZiA2IGRpZmZlcmVudCByYXRlcyBmcm9tIGEgZ2VuZXJpYyBjbG9jay4gVGhlCisgKiBnZW5lcmljIGNsb2NrIGhhcyBhIHBvd2VyIG9mIHR3byBkaXZpZGVyLCB3aGljaCBnaXZlcyA2IHN0ZXBzIGZyb20gMTkyIGtIegorICogdG8gNTExMiBIei4KKyAqLworI2RlZmluZSBNQVhfTlVNX1JBVEVTCTYKKy8qIEFMU0Egc2VlbXMgdG8gdXNlIHJhdGVzIGJldHdlZW4gMTkyMDAwIEh6IGFuZCA1MTEyIEh6LiAqLworI2RlZmluZSBSQVRFX01BWAkxOTIwMDAKKyNkZWZpbmUgUkFURV9NSU4JNTExMgorCitlbnVtIHsKKwlETUFfUkVBRFkgPSAwLAorfTsKKworc3RydWN0IGF0bWVsX2FiZGFjX2RtYSB7CisJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJKmNkZXNjOworfTsKKworc3RydWN0IGF0bWVsX2FiZGFjIHsKKwlzdHJ1Y3QgY2xrCQkJCSpwY2xrOworCXN0cnVjdCBjbGsJCQkJKnNhbXBsZV9jbGs7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJCSpwZGV2OworCXN0cnVjdCBhdG1lbF9hYmRhY19kbWEJCQlkbWE7CisKKwlzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QJY29uc3RyYWludHNfcmF0ZXM7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCQkqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfY2FyZAkJCQkqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbQkJCQkqcGNtOworCisJdm9pZCBfX2lvbWVtCQkJCSpyZWdzOworCXVuc2lnbmVkIGxvbmcJCQkJZmxhZ3M7CisJdW5zaWduZWQgaW50CQkJCXJhdGVzW01BWF9OVU1fUkFURVNdOworCXVuc2lnbmVkIGludAkJCQlyYXRlc19udW07CisJaW50CQkJCQlpcnE7Cit9OworCisjZGVmaW5lIGdldF9kYWMoY2FyZCkgKChzdHJ1Y3QgYXRtZWxfYWJkYWMgKikoY2FyZCktPnByaXZhdGVfZGF0YSkKKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIERNQSBkcml2ZXIuICovCitzdGF0aWMgdm9pZCBhdG1lbF9hYmRhY19kbWFfcGVyaW9kX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoZGFjLT5zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3ByZXBhcmVfZG1hKHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjLAorCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuID0gZGFjLT5kbWEuY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJCSpjZGVzYzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nCQkJYnVmZmVyX2xlbiwgcGVyaW9kX2xlbjsKKworCS8qCisJICogV2UgZG9uJ3QgZG8gRE1BIG9uICJjb21wbGV4IiB0cmFuc2ZlcnMsIGkuZS4gd2l0aAorCSAqIG5vbi1oYWxmd29yZC1hbGlnbmVkIGJ1ZmZlcnMgb3IgbGVuZ3Rocy4KKwkgKi8KKwlpZiAocnVudGltZS0+ZG1hX2FkZHIgJiAxIHx8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICYgMSkgeworCQlkZXZfZGJnKCZkYWMtPnBkZXYtPmRldiwgInRvbyBjb21wbGV4IHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmZmVyX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk7CisJcGVyaW9kX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisKKwljZGVzYyA9IGR3X2RtYV9jeWNsaWNfcHJlcChjaGFuLCBydW50aW1lLT5kbWFfYWRkciwgYnVmZmVyX2xlbiwKKwkJCXBlcmlvZF9sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChJU19FUlIoY2Rlc2MpKSB7CisJCWRldl9kYmcoJmRhYy0+cGRldi0+ZGV2LCAiY291bGQgbm90IHByZXBhcmUgY3ljbGljIERNQVxuIik7CisJCXJldHVybiBQVFJfRVJSKGNkZXNjKTsKKwl9CisKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrID0gYXRtZWxfYWJkYWNfZG1hX3BlcmlvZF9kb25lOworCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2tfcGFyYW0gPSBkYWM7CisKKwlkYWMtPmRtYS5jZGVzYyA9IGNkZXNjOworCisJc2V0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYXRtZWxfYWJkYWNfaHcgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUkVTVU1FCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1BBVVNFKSwKKwkuZm9ybWF0cwkJPSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfQkUpLAorCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFX0tOT1QpLAorCS5yYXRlX21pbgkJPSBSQVRFX01JTiwKKwkucmF0ZV9tYXgJCT0gUkFURV9NQVgsCisJLmNoYW5uZWxzX21pbgkJPSAyLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogNDA5NiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDQwOTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSA0MDk2LAorCS5wZXJpb2RzX21pbgkJPSA0LAorCS5wZXJpb2RzX21heAkJPSA2NCwKK307CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRhYy0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCWF0bWVsX2FiZGFjX2h3LnJhdGVfbWF4ID0gZGFjLT5yYXRlc1tkYWMtPnJhdGVzX251bSAtIDFdOworCWF0bWVsX2FiZGFjX2h3LnJhdGVfbWluID0gZGFjLT5yYXRlc1swXTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3ID0gYXRtZWxfYWJkYWNfaHc7CisKKwlyZXR1cm4gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZkYWMtPmNvbnN0cmFpbnRzX3JhdGVzKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlkYWMtPnN1YnN0cmVhbSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJLyogc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzIHJldHVybnMgMSBpZiBidWZmZXIgaXMgY2hhbmdlZC4gKi8KKwlpZiAocmV0dmFsID09IDEpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JFQURZLCAmZGFjLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoZGFjLT5kbWEuY2hhbik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGRhYy0+ZG1hLmNoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY2xrX3NldF9yYXRlKGRhYy0+c2FtcGxlX2NsaywgMjU2ICogc3Vic3RyZWFtLT5ydW50aW1lLT5yYXRlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKCF0ZXN0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJcmV0dmFsID0gYXRtZWxfYWJkYWNfcHJlcGFyZV9kbWEoZGFjLCBzdWJzdHJlYW0sIERNQV9UT19ERVZJQ0UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWwgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQljbGtfZW5hYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJCXJldHZhbCA9IGR3X2RtYV9jeWNsaWNfc3RhcnQoZGFjLT5kbWEuY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJZGFjX3dyaXRlbChkYWMsIENUUkwsIERBQ19CSVQoRU4pKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGRhYy0+ZG1hLmNoYW4pOworCQlkYWNfd3JpdGVsKGRhYywgREFUQSwgMCk7CisJCWRhY193cml0ZWwoZGFjLCBDVFJMLCAwKTsKKwkJY2xrX2Rpc2FibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWJkYWNfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMJKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9zcmNfYWRkcihkYWMtPmRtYS5jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIGlycXJldHVybl90IGFiZGFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBkZXZfaWQ7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGRhY19yZWFkbChkYWMsIElOVF9TVEFUVVMpOworCWlmIChzdGF0dXMgJiBEQUNfQklUKFVOREVSUlVOKSkgeworCQlkZXZfZXJyKCZkYWMtPnBkZXYtPmRldiwgInVuZGVycnVuIGRldGVjdGVkXG4iKTsKKwkJZGFjX3dyaXRlbChkYWMsIElOVF9DTFIsIERBQ19CSVQoVU5ERVJSVU4pKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZkYWMtPnBkZXYtPmRldiwgInNwdXJpb3VzIGludGVycnVwdCAoc3RhdHVzPTB4JXgpXG4iLAorCQkJc3RhdHVzKTsKKwkJZGFjX3dyaXRlbChkYWMsIElOVF9DTFIsIHN0YXR1cyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FiZGFjX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYmRhY19vcGVuLAorCS5jbG9zZQkJPSBhdG1lbF9hYmRhY19jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGF0bWVsX2FiZGFjX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FiZGFjX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhdG1lbF9hYmRhY19wcmVwYXJlLAorCS50cmlnZ2VyCT0gYXRtZWxfYWJkYWNfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FiZGFjX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYmRhY19wY21fbmV3KHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjKQoreworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGh3ID0gYXRtZWxfYWJkYWNfaHc7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9uZXcoZGFjLT5jYXJkLCBkYWMtPmNhcmQtPnNob3J0bmFtZSwKKwkJCWRhYy0+cGRldi0+aWQsIDEsIDAsICZwY20pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlzdHJjcHkocGNtLT5uYW1lLCBkYWMtPmNhcmQtPnNob3J0bmFtZSk7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBkYWM7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlkYWMtPnBjbSA9IHBjbTsKKworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZhdG1lbF9hYmRhY19vcHMpOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCSZkYWMtPnBkZXYtPmRldiwgaHcucGVyaW9kc19taW4gKiBody5wZXJpb2RfYnl0ZXNfbWluLAorCQkJaHcuYnVmZmVyX2J5dGVzX21heCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSBzbGF2ZTsKKworCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKKwkJY2hhbi0+cHJpdmF0ZSA9IGR3czsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGVzKHN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjKQoreworCWxvbmcgbmV3X3JhdGUgPSBSQVRFX01BWDsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwlpbnQgaW5kZXggPSAwOworCisJLyogd2Ugc3RhcnQgYXQgMTkyIGtIeiBhbmQgd29yayBvdXIgd2F5IGRvd24gdG8gNTExMiBIeiAqLworCXdoaWxlIChuZXdfcmF0ZSA+PSBSQVRFX01JTiAmJiBpbmRleCA8IChNQVhfTlVNX1JBVEVTICsgMSkpIHsKKwkJbmV3X3JhdGUgPSBjbGtfcm91bmRfcmF0ZShkYWMtPnNhbXBsZV9jbGssIDI1NiAqIG5ld19yYXRlKTsKKwkJaWYgKG5ld19yYXRlIDwgMCkKKwkJCWJyZWFrOworCQkvKiBtYWtlIHN1cmUgd2UgYXJlIGJlbG93IHRoZSBBQkRBQyBjbG9jayAqLworCQlpZiAobmV3X3JhdGUgPD0gY2xrX2dldF9yYXRlKGRhYy0+cGNsaykpIHsKKwkJCWRhYy0+cmF0ZXNbaW5kZXhdID0gbmV3X3JhdGUgLyAyNTY7CisJCQlpbmRleCsrOworCQl9CisJCS8qIGRpdmlkZSBieSAyNTYgYW5kIHRoZW4gYnkgdHdvIHRvIGdldCBuZXh0IHJhdGUgKi8KKwkJbmV3X3JhdGUgLz0gMjU2ICogMjsKKwl9CisKKwlpZiAoaW5kZXgpIHsKKwkJaW50IGk7CisKKwkJLyogcmV2ZXJzZSBhcnJheSwgc21hbGxlc3QgZ28gZmlyc3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IChpbmRleCAvIDIpOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCB0bXAgPSBkYWMtPnJhdGVzW2luZGV4IC0gMSAtIGldOworCQkJZGFjLT5yYXRlc1tpbmRleCAtIDEgLSBpXSA9IGRhYy0+cmF0ZXNbaV07CisJCQlkYWMtPnJhdGVzW2ldID0gdG1wOworCQl9CisKKwkJZGFjLT5jb25zdHJhaW50c19yYXRlcy5jb3VudCA9IGluZGV4OworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLmxpc3QgPSBkYWMtPnJhdGVzOworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLm1hc2sgPSAwOworCQlkYWMtPnJhdGVzX251bSA9IGluZGV4OworCisJCXJldHZhbCA9IDA7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWJkYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQJCSpjYXJkOworCXN0cnVjdCBhdG1lbF9hYmRhYwkqZGFjOworCXN0cnVjdCByZXNvdXJjZQkJKnJlZ3M7CisJc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhCSpwZGF0YTsKKwlzdHJ1Y3QgY2xrCQkqcGNsazsKKwlzdHJ1Y3QgY2xrCQkqc2FtcGxlX2NsazsKKwlpbnQJCQlyZXR2YWw7CisJaW50CQkJaXJxOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IElSUSBudW1iZXJcbiIpOworCQlyZXR1cm4gaXJxOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGVyaXBoZXJhbCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHBjbGspOworCX0KKwlzYW1wbGVfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2FtcGxlX2NsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gc2FtcGxlIGNsb2NrXG4iKTsKKwkJcmV0dmFsID0gUFRSX0VSUihwY2xrKTsKKwkJZ290byBvdXRfcHV0X3BjbGs7CisJfQorCWNsa19lbmFibGUocGNsayk7CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQlUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYmRhYyksICZjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgc291bmQgY2FyZCBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9wdXRfc2FtcGxlX2NsazsKKwl9CisKKwlkYWMgPSBnZXRfZGFjKGNhcmQpOworCisJZGFjLT5pcnEgPSBpcnE7CisJZGFjLT5jYXJkID0gY2FyZDsKKwlkYWMtPnBjbGsgPSBwY2xrOworCWRhYy0+c2FtcGxlX2NsayA9IHNhbXBsZV9jbGs7CisJZGFjLT5wZGV2ID0gcGRldjsKKworCXJldHZhbCA9IHNldF9zYW1wbGVfcmF0ZXMoZGFjKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3Qgc2V0IHN1cHBvcnRlZCByYXRlc1xuIik7CisJCWdvdG8gb3V0X2ZyZWVfY2FyZDsKKwl9CisKKwlkYWMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCWlmICghZGFjLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZW1hcCByZWdpc3RlciBtZW1vcnlcbiIpOworCQlnb3RvIG91dF9mcmVlX2NhcmQ7CisJfQorCisJLyogbWFrZSBzdXJlIHRoZSBEQUMgaXMgc2lsZW50IGFuZCBkaXNhYmxlZCAqLworCWRhY193cml0ZWwoZGFjLCBEQVRBLCAwKTsKKwlkYWNfd3JpdGVsKGRhYywgQ1RSTCwgMCk7CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGFiZGFjX2ludGVycnVwdCwgMCwgImFiZGFjIiwgZGFjKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZXF1ZXN0IGlycVxuIik7CisJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKworCWlmIChwZGF0YS0+ZHdzLmRtYV9kZXYpIHsKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gJnBkYXRhLT5kd3M7CisJCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwkJZHdzLT50eF9yZWcgPSByZWdzLT5zdGFydCArIERBQ19EQVRBOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQlkYWMtPmRtYS5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisJfQorCWlmICghcGRhdGEtPmR3cy5kbWFfZGV2IHx8ICFkYWMtPmRtYS5jaGFuKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkRNQSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5zZXRfY2FyZF9kZXY7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkF0bWVsIEFCREFDIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF0bWVsIEFCREFDIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMiKTsKKworCXJldHZhbCA9IGF0bWVsX2FiZGFjX3BjbV9uZXcoZGFjKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBBQkRBQyBwY20gZGV2aWNlXG4iKTsKKwkJZ290byBvdXRfcmVsZWFzZV9kbWE7CisJfQorCisJcmV0dmFsID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgc291bmQgY2FyZFxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfZG1hOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkF0bWVsIEFCREFDIGF0IDB4JXAgdXNpbmcgJXNcbiIsCisJCQlkYWMtPnJlZ3MsIGRhYy0+ZG1hLmNoYW4tPmRldi0+ZGV2aWNlLmJ1c19pZCk7CisKKwlyZXR1cm4gcmV0dmFsOworCitvdXRfcmVsZWFzZV9kbWE6CisJZG1hX3JlbGVhc2VfY2hhbm5lbChkYWMtPmRtYS5jaGFuKTsKKwlkYWMtPmRtYS5jaGFuID0gTlVMTDsKK291dF91bnNldF9jYXJkX2RldjoKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCWZyZWVfaXJxKGlycSwgZGFjKTsKK291dF91bm1hcF9yZWdzOgorCWlvdW5tYXAoZGFjLT5yZWdzKTsKK291dF9mcmVlX2NhcmQ6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKK291dF9wdXRfc2FtcGxlX2NsazoKKwljbGtfcHV0KHNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKHBjbGspOworb3V0X3B1dF9wY2xrOgorCWNsa19wdXQocGNsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdG1lbF9hYmRhY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlkd19kbWFfY3ljbGljX3N0b3AoZGFjLT5kbWEuY2hhbik7CisJY2xrX2Rpc2FibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwljbGtfZGlzYWJsZShkYWMtPnBjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwljbGtfZW5hYmxlKGRhYy0+cGNsayk7CisJY2xrX2VuYWJsZShkYWMtPnNhbXBsZV9jbGspOworCWlmICh0ZXN0X2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdGFydChkYWMtPmRtYS5jaGFuKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYXRtZWxfYWJkYWNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF0bWVsX2FiZGFjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgYXRtZWxfYWJkYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBnZXRfZGFjKGNhcmQpOworCisJY2xrX3B1dChkYWMtPnNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKGRhYy0+cGNsayk7CisJY2xrX3B1dChkYWMtPnBjbGspOworCisJZG1hX3JlbGVhc2VfY2hhbm5lbChkYWMtPmRtYS5jaGFuKTsKKwlkYWMtPmRtYS5jaGFuID0gTlVMTDsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCWlvdW5tYXAoZGFjLT5yZWdzKTsKKwlmcmVlX2lycShkYWMtPmlycSwgZGFjKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfYWJkYWNfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXRtZWxfYWJkYWNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXRtZWxfYWJkYWMiLAorCX0sCisJLnN1c3BlbmQJPSBhdG1lbF9hYmRhY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRtZWxfYWJkYWNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRtZWxfYWJkYWNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWVsX2FiZGFjX2RyaXZlciwKKwkJCWF0bWVsX2FiZGFjX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGF0bWVsX2FiZGFjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfYWJkYWNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1lbF9hYmRhY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYXRtZWxfYWJkYWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBdG1lbCBBdWRpbyBCaXRzdHJlYW0gREFDIChBQkRBQykiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMtQ2hyaXN0aWFuIEVndHZlZHQgPGhhbnMtY2hyaXN0aWFuLmVndHZlZHRAYXRtZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWM5N2MuYyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3MmUwMAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKQEAgLTAsMCArMSw5MzIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBBdG1lbCBBQzk3QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CisjaW5jbHVkZSA8c291bmQvbWVtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworI2luY2x1ZGUgImFjOTdjLmgiCisKK2VudW0geworCURNQV9UWF9SRUFEWSA9IDAsCisJRE1BX1JYX1JFQURZLAorCURNQV9UWF9DSEFOX1BSRVNFTlQsCisJRE1BX1JYX0NIQU5fUFJFU0VOVCwKK307CisKKy8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gb3BlbmVkIHZhcmlhYmxlICovCitzdGF0aWMgREVGSU5FX01VVEVYKG9wZW5lZF9tdXRleCk7CisKK3N0cnVjdCBhdG1lbF9hYzk3Y19kbWEgeworCXN0cnVjdCBkbWFfY2hhbgkJCSpyeF9jaGFuOworCXN0cnVjdCBkbWFfY2hhbgkJCSp0eF9jaGFuOworfTsKKworc3RydWN0IGF0bWVsX2FjOTdjIHsKKwlzdHJ1Y3QgY2xrCQkJKnBjbGs7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7CisJc3RydWN0IGF0bWVsX2FjOTdjX2RtYQkJZG1hOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpwbGF5YmFja19zdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpjYXB0dXJlX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2NhcmQJCQkqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbQkJCSpwY207CisJc3RydWN0IHNuZF9hYzk3CQkJKmFjOTc7CisJc3RydWN0IHNuZF9hYzk3X2J1cwkJKmFjOTdfYnVzOworCisJdTY0CQkJCWN1cl9mb3JtYXQ7CisJdW5zaWduZWQgaW50CQkJY3VyX3JhdGU7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworCS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gb3BlbmVkIHZhcmlhYmxlICovCisJc3BpbmxvY2tfdAkJCWxvY2s7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJaW50CQkJCW9wZW5lZDsKKwlpbnQJCQkJcmVzZXRfcGluOworfTsKKworI2RlZmluZSBnZXRfY2hpcChjYXJkKSAoKHN0cnVjdCBhdG1lbF9hYzk3YyAqKShjYXJkKS0+cHJpdmF0ZV9kYXRhKQorCisjZGVmaW5lIGFjOTdjX3dyaXRlbChjaGlwLCByZWcsIHZhbCkJCQlcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAoY2hpcCktPnJlZ3MgKyBBQzk3Q18jI3JlZykKKyNkZWZpbmUgYWM5N2NfcmVhZGwoY2hpcCwgcmVnKQkJCQlcCisJX19yYXdfcmVhZGwoKGNoaXApLT5yZWdzICsgQUM5N0NfIyNyZWcpCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBETUEgZHJpdmVyLiAqLworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfZG1hX3BsYXliYWNrX3BlcmlvZF9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBhcmc7CisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y19kbWFfY2FwdHVyZV9wZXJpb2RfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gYXJnOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCwKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbjsKKwlzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MJCSpjZGVzYzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nCQkJYnVmZmVyX2xlbiwgcGVyaW9kX2xlbjsKKworCS8qCisJICogV2UgZG9uJ3QgZG8gRE1BIG9uICJjb21wbGV4IiB0cmFuc2ZlcnMsIGkuZS4gd2l0aAorCSAqIG5vbi1oYWxmd29yZC1hbGlnbmVkIGJ1ZmZlcnMgb3IgbGVuZ3Rocy4KKwkgKi8KKwlpZiAocnVudGltZS0+ZG1hX2FkZHIgJiAxIHx8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICYgMSkgeworCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJ0b28gY29tcGxleCB0cmFuc2ZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJY2hhbiA9IGNoaXAtPmRtYS50eF9jaGFuOworCWVsc2UKKwkJY2hhbiA9IGNoaXAtPmRtYS5yeF9jaGFuOworCisJYnVmZmVyX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk7CisJcGVyaW9kX2xlbiA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisKKwljZGVzYyA9IGR3X2RtYV9jeWNsaWNfcHJlcChjaGFuLCBydW50aW1lLT5kbWFfYWRkciwgYnVmZmVyX2xlbiwKKwkJCXBlcmlvZF9sZW4sIGRpcmVjdGlvbik7CisJaWYgKElTX0VSUihjZGVzYykpIHsKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHByZXBhcmUgY3ljbGljIERNQVxuIik7CisJCXJldHVybiBQVFJfRVJSKGNkZXNjKTsKKwl9CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwkJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FjOTdjX2RtYV9wbGF5YmFja19wZXJpb2RfZG9uZTsKKwkJc2V0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJY2Rlc2MtPnBlcmlvZF9jYWxsYmFjayA9IGF0bWVsX2FjOTdjX2RtYV9jYXB0dXJlX3BlcmlvZF9kb25lOworCQlzZXRfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKTsKKwl9CisKKwljZGVzYy0+cGVyaW9kX2NhbGxiYWNrX3BhcmFtID0gY2hpcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYXRtZWxfYWM5N2NfaHcgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRQorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZvcm1hdHMJCT0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFCisJCQkJICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKSwKKwkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTKSwKKwkucmF0ZV9taW4JCT0gNDAwMCwKKwkucmF0ZV9tYXgJCT0gNDgwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogNDA5NiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDQwOTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSA0MDk2LAorCS5wZXJpb2RzX21pbgkJPSA0LAorCS5wZXJpb2RzX21heAkJPSA2NCwKK307CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkKys7CisJcnVudGltZS0+aHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpZiAoY2hpcC0+Y3VyX3JhdGUpIHsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSBjaGlwLT5jdXJfcmF0ZTsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBjaGlwLT5jdXJfcmF0ZTsKKwl9CisJaWYgKGNoaXAtPmN1cl9mb3JtYXQpCisJCXJ1bnRpbWUtPmh3LmZvcm1hdHMgPSAoMVVMTCA8PCBjaGlwLT5jdXJfZm9ybWF0KTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkKys7CisJcnVudGltZS0+aHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpZiAoY2hpcC0+Y3VyX3JhdGUpIHsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSBjaGlwLT5jdXJfcmF0ZTsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBjaGlwLT5jdXJfcmF0ZTsKKwl9CisJaWYgKGNoaXAtPmN1cl9mb3JtYXQpCisJCXJ1bnRpbWUtPmh3LmZvcm1hdHMgPSAoMVVMTCA8PCBjaGlwLT5jdXJfZm9ybWF0KTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQtLTsKKwlpZiAoIWNoaXAtPm9wZW5lZCkgeworCQljaGlwLT5jdXJfcmF0ZSA9IDA7CisJCWNoaXAtPmN1cl9mb3JtYXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwljaGlwLT5wbGF5YmFja19zdWJzdHJlYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZC0tOworCWlmICghY2hpcC0+b3BlbmVkKSB7CisJCWNoaXAtPmN1cl9yYXRlID0gMDsKKwkJY2hpcC0+Y3VyX2Zvcm1hdCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCS8qIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyByZXR1cm5zIDEgaWYgYnVmZmVyIGlzIGNoYW5nZWQuICovCisJaWYgKHJldHZhbCA9PSAxKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEudHhfY2hhbik7CisKKwkvKiBTZXQgcmVzdHJpY3Rpb25zIHRvIHBhcmFtcy4gKi8KKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPmN1cl9yYXRlID0gcGFyYW1zX3JhdGUoaHdfcGFyYW1zKTsKKwljaGlwLT5jdXJfZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChod19wYXJhbXMpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMgcmV0dXJucyAxIGlmIGJ1ZmZlciBpcyBjaGFuZ2VkLiAqLworCWlmIChyZXR2YWwgPT0gMSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCisJLyogU2V0IHJlc3RyaWN0aW9ucyB0byBwYXJhbXMuICovCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5jdXJfcmF0ZSA9IHBhcmFtc19yYXRlKGh3X3BhcmFtcyk7CisJY2hpcC0+Y3VyX2Zvcm1hdCA9IHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKTsKKwltdXRleF91bmxvY2soJm9wZW5lZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnR4X2NoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZyB3b3JkID0gMDsKKwlpbnQgcmV0dmFsOworCisJLyogYXNzaWduIGNoYW5uZWxzIHRvIEFDOTdDIGNoYW5uZWwgQSAqLworCXN3aXRjaCAocnVudGltZS0+Y2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSkKKwkJCXwgQUM5N0NfQ0hfQVNTSUdOKFBDTV9SSUdIVCwgQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRPRE86IHN1cHBvcnQgbW9yZSB0aGFuIHR3byBjaGFubmVscyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWFjOTdjX3dyaXRlbChjaGlwLCBPQ0EsIHdvcmQpOworCisJLyogY29uZmlndXJlIHNhbXBsZSBmb3JtYXQgYW5kIHNpemUgKi8KKwl3b3JkID0gQUM5N0NfQ01SX0RNQUVOIHwgQUM5N0NfQ01SX1NJWkVfMTY7CisKKwlzd2l0Y2ggKHJ1bnRpbWUtPmZvcm1hdCkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdvcmQgfD0gQUM5N0NfQ01SX0NFTV9MSVRUTEU7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXdvcmQgJj0gfihBQzk3Q19DTVJfQ0VNX0xJVFRMRSk7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCB3b3JkKTsKKworCS8qIHNldCB2YXJpYWJsZSByYXRlIGlmIG5lZWRlZCAqLworCWlmIChydW50aW1lLT5yYXRlICE9IDQ4MDAwKSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgfD0gQUM5N0NfTVJfVlJBOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0gZWxzZSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgJj0gfihBQzk3Q19NUl9WUkEpOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0KKworCXJldHZhbCA9IHNuZF9hYzk3X3NldF9yYXRlKGNoaXAtPmFjOTcsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFLAorCQkJcnVudGltZS0+cmF0ZSk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHNldCByYXRlICVkIEh6XG4iLAorCQkJCXJ1bnRpbWUtPnJhdGUpOworCisJaWYgKCF0ZXN0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCXJldHZhbCA9IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKGNoaXAsIHN1YnN0cmVhbSwKKwkJCQlETUFfVE9fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcgd29yZCA9IDA7CisJaW50IHJldHZhbDsKKworCS8qIGFzc2lnbiBjaGFubmVscyB0byBBQzk3QyBjaGFubmVsIEEgKi8KKwlzd2l0Y2ggKHJ1bnRpbWUtPmNoYW5uZWxzKSB7CisJY2FzZSAxOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpCisJCQl8IEFDOTdDX0NIX0FTU0lHTihQQ01fUklHSFQsIEEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPOiBzdXBwb3J0IG1vcmUgdGhhbiB0d28gY2hhbm5lbHMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlhYzk3Y193cml0ZWwoY2hpcCwgSUNBLCB3b3JkKTsKKworCS8qIGNvbmZpZ3VyZSBzYW1wbGUgZm9ybWF0IGFuZCBzaXplICovCisJd29yZCA9IEFDOTdDX0NNUl9ETUFFTiB8IEFDOTdDX0NNUl9TSVpFXzE2OworCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQl3b3JkIHw9IEFDOTdDX0NNUl9DRU1fTElUVExFOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQl3b3JkICY9IH4oQUM5N0NfQ01SX0NFTV9MSVRUTEUpOworCQlicmVhazsKKwl9CisKKwlhYzk3Y193cml0ZWwoY2hpcCwgQ0FNUiwgd29yZCk7CisKKwkvKiBzZXQgdmFyaWFibGUgcmF0ZSBpZiBuZWVkZWQgKi8KKwlpZiAocnVudGltZS0+cmF0ZSAhPSA0ODAwMCkgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkIHw9IEFDOTdDX01SX1ZSQTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9IGVsc2UgeworCQl3b3JkID0gYWM5N2NfcmVhZGwoY2hpcCwgTVIpOworCQl3b3JkICY9IH4oQUM5N0NfTVJfVlJBKTsKKwkJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCB3b3JkKTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfYWM5N19zZXRfcmF0ZShjaGlwLT5hYzk3LCBBQzk3X1BDTV9MUl9BRENfUkFURSwKKwkJCXJ1bnRpbWUtPnJhdGUpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgcmF0ZSAlZCBIelxuIiwKKwkJCQlydW50aW1lLT5yYXRlKTsKKworCWlmICghdGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlyZXR2YWwgPSBhdG1lbF9hYzk3Y19wcmVwYXJlX2RtYShjaGlwLCBzdWJzdHJlYW0sCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2F0bWVsX2FjOTdjX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgY2FtcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNhbXIgPSBhYzk3Y19yZWFkbChjaGlwLCBDQU1SKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEudHhfY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJY2FtciB8PSBBQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS50eF9jaGFuKTsKKwkJaWYgKGNoaXAtPm9wZW5lZCA8PSAxKQorCQkJY2FtciAmPSB+QUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCBjYW1yKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CithdG1lbF9hYzk3Y19jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGxvbmcgY2FtcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNhbXIgPSBhYzk3Y19yZWFkbChjaGlwLCBDQU1SKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChjaGlwLT5kbWEucnhfY2hhbik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJY2FtciB8PSBBQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwkJaWYgKGNoaXAtPm9wZW5lZCA8PSAxKQorCQkJY2FtciAmPSB+QUM5N0NfQ01SX0NFTkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCBjYW1yKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2F0bWVsX2FjOTdjX3BsYXliYWNrX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjCSpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QJZnJhbWVzOworCXVuc2lnbmVkIGxvbmcJCWJ5dGVzOworCisJYnl0ZXMgPSBkd19kbWFfZ2V0X3NyY19hZGRyKGNoaXAtPmRtYS50eF9jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWM5N2NfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YwkqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190CWZyYW1lczsKKwl1bnNpZ25lZCBsb25nCQlieXRlczsKKworCWJ5dGVzID0gZHdfZG1hX2dldF9kc3RfYWRkcihjaGlwLT5kbWEucnhfY2hhbik7CisJYnl0ZXMgLT0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgYnl0ZXMpOworCWlmIChmcmFtZXMgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWZyYW1lcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlyZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX2FjOTdfcGxheWJhY2tfb3BzID0geworCS5vcGVuCQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9hYzk3Y19wbGF5YmFja190cmlnZ2VyLAorCS5wb2ludGVyCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfcG9pbnRlciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfYWM5N19jYXB0dXJlX29wcyA9IHsKKwkub3BlbgkJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfdHJpZ2dlciwKKwkucG9pbnRlcgk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfcG9pbnRlciwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FjOTdjX3BjbV9uZXcoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCXN0cnVjdCBzbmRfcGNtCQkqcGNtOworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlCWh3ID0gYXRtZWxfYWM5N2NfaHc7CisJaW50CQkJY2FwdHVyZSwgcGxheWJhY2ssIHJldHZhbDsKKworCWNhcHR1cmUgPSB0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCXBsYXliYWNrID0gdGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKworCXJldHZhbCA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSwKKwkJCWNoaXAtPnBkZXYtPmlkLCBwbGF5YmFjaywgY2FwdHVyZSwgJnBjbSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChjYXB0dXJlKQorCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkJJmF0bWVsX2FjOTdfY2FwdHVyZV9vcHMpOworCWlmIChwbGF5YmFjaykKKwkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKwkJCQkmYXRtZWxfYWM5N19wbGF5YmFja19vcHMpOworCisJcmV0dmFsID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKwkJCSZjaGlwLT5wZGV2LT5kZXYsIGh3LnBlcmlvZHNfbWluICogaHcucGVyaW9kX2J5dGVzX21pbiwKKwkJCWh3LmJ1ZmZlcl9ieXRlc19tYXgpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcGNtLT5pbmZvX2ZsYWdzID0gMDsKKwlzdHJjcHkocGNtLT5uYW1lLCBjaGlwLT5jYXJkLT5zaG9ydG5hbWUpOworCWNoaXAtPnBjbSA9IHBjbTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX21peGVyX25ldyhzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXApCit7CisJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIHRlbXBsYXRlOworCW1lbXNldCgmdGVtcGxhdGUsIDAsIHNpemVvZih0ZW1wbGF0ZSkpOworCXRlbXBsYXRlLnByaXZhdGVfZGF0YSA9IGNoaXA7CisJcmV0dXJuIHNuZF9hYzk3X21peGVyKGNoaXAtPmFjOTdfYnVzLCAmdGVtcGxhdGUsICZjaGlwLT5hYzk3KTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2Nfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChhYzk3KTsKKwl1bnNpZ25lZCBsb25nIHdvcmQ7CisJaW50IHRpbWVvdXQgPSA0MDsKKworCXdvcmQgPSAocmVnICYgMHg3ZikgPDwgMTYgfCB2YWw7CisKKwlkbyB7CisJCWlmIChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9UWFJEWSkgeworCQkJYWM5N2Nfd3JpdGVsKGNoaXAsIENPVEhSLCB3b3JkKTsKKwkJCXJldHVybjsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgImNvZGVjIHdyaXRlIHRpbWVvdXRcbiIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYXRtZWxfYWM5N2NfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCXVuc2lnbmVkIHNob3J0IHJlZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChhYzk3KTsKKwl1bnNpZ25lZCBsb25nIHdvcmQ7CisJaW50IHRpbWVvdXQgPSA0MDsKKwlpbnQgd3JpdGUgPSAxMDsKKworCXdvcmQgPSAoMHg4MCB8IChyZWcgJiAweDdmKSkgPDwgMTY7CisKKwlpZiAoKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1JYUkRZKSAhPSAwKQorCQlhYzk3Y19yZWFkbChjaGlwLCBDT1JIUik7CisKK3JldHJ5X3dyaXRlOgorCXRpbWVvdXQgPSA0MDsKKworCWRvIHsKKwkJaWYgKChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9UWFJEWSkgIT0gMCkgeworCQkJYWM5N2Nfd3JpdGVsKGNoaXAsIENPVEhSLCB3b3JkKTsKKwkJCWdvdG8gcmVhZF9yZWc7CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCEtLXdyaXRlKQorCQlnb3RvIHRpbWVkX291dDsKKwlnb3RvIHJldHJ5X3dyaXRlOworCityZWFkX3JlZzoKKwlkbyB7CisJCWlmICgoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfUlhSRFkpICE9IDApIHsKKwkJCXVuc2lnbmVkIHNob3J0IHZhbCA9IGFjOTdjX3JlYWRsKGNoaXAsIENPUkhSKTsKKwkJCXJldHVybiB2YWw7CisJCX0KKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCEtLXdyaXRlKQorCQlnb3RvIHRpbWVkX291dDsKKwlnb3RvIHJldHJ5X3dyaXRlOworCit0aW1lZF9vdXQ6CisJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY29kZWMgcmVhZCB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gMHhmZmZmOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSBzbGF2ZTsKKworCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKKwkJY2hhbi0+cHJpdmF0ZSA9IGR3czsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfYWM5N2NfcmVzZXQoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwKQoreworCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgQUM5N0NfTVJfV1JTVCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKSB7CisJCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPnJlc2V0X3BpbiwgMCk7CisJCS8qIEFDOTcgdjIuMiBzcGVjaWZpY2F0aW9ucyBzYXlzIG1pbmltdW0gMSB1cy4gKi8KKwkJdWRlbGF5KDEwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+cmVzZXRfcGluLCAxKTsKKwl9CisKKwl1ZGVsYXkoMSk7CisJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCBBQzk3Q19NUl9FTkEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYzk3Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZAkJCSpjYXJkOworCXN0cnVjdCBhdG1lbF9hYzk3YwkJKmNoaXA7CisJc3RydWN0IHJlc291cmNlCQkJKnJlZ3M7CisJc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEJKnBkYXRhOworCXN0cnVjdCBjbGsJCQkqcGNsazsKKwlzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMJb3BzID0geworCQkud3JpdGUJPSBhdG1lbF9hYzk3Y193cml0ZSwKKwkJLnJlYWQJPSBhdG1lbF9hYzk3Y19yZWFkLAorCX07CisJaW50CQkJCXJldHZhbDsKKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVncykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gcGVyaXBoZXJhbCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHBjbGspOworCX0KKwljbGtfZW5hYmxlKHBjbGspOworCisJcmV0dmFsID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYXRtZWxfYWM5N2MpLCAmY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHNvdW5kIGNhcmQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfc25kX2NhcmRfbmV3OworCX0KKworCWNoaXAgPSBnZXRfY2hpcChjYXJkKTsKKworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBdG1lbCBBQzk3QyIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBdG1lbCBBQzk3QyIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJBdG1lbCBBQzk3IGNvbnRyb2xsZXIiKTsKKworCWNoaXAtPmNhcmQgPSBjYXJkOworCWNoaXAtPnBjbGsgPSBwY2xrOworCWNoaXAtPnBkZXYgPSBwZGV2OworCWNoaXAtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCisJaWYgKCFjaGlwLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZW1hcCByZWdpc3RlciBtZW1vcnlcbiIpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5yZXNldF9waW4pKSB7CisJCWlmIChncGlvX3JlcXVlc3QocGRhdGEtPnJlc2V0X3BpbiwgInJlc2V0X3BpbiIpKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXNldCBwaW4gbm90IGF2YWlsYWJsZVxuIik7CisJCQljaGlwLT5yZXNldF9waW4gPSAtRU5PREVWOworCQl9IGVsc2UgeworCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5yZXNldF9waW4sIDEpOworCQkJY2hpcC0+cmVzZXRfcGluID0gcGRhdGEtPnJlc2V0X3BpbjsKKwkJfQorCX0KKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisKKwlyZXR2YWwgPSBzbmRfYWM5N19idXMoY2FyZCwgMCwgJm9wcywgY2hpcCwgJmNoaXAtPmFjOTdfYnVzKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBvbiBhYzk3IGJ1c1xuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCWF0bWVsX2FjOTdjX3Jlc2V0KGNoaXApOworCisJcmV0dmFsID0gYXRtZWxfYWM5N2NfbWl4ZXJfbmV3KGNoaXApOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIGFjOTcgbWl4ZXJcbiIpOworCQlnb3RvIGVycl9hYzk3X2J1czsKKwl9CisKKwlpZiAocGRhdGEtPnJ4X2R3cy5kbWFfZGV2KSB7CisJCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9ICZwZGF0YS0+cnhfZHdzOworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCWR3cy0+cnhfcmVnID0gcmVncy0+c3RhcnQgKyBBQzk3Q19DQVJIUiArIDI7CisKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJCWNoaXAtPmRtYS5yeF9jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisKKwkJZGV2X2luZm8oJmNoaXAtPnBkZXYtPmRldiwgInVzaW5nICVzIGZvciBETUEgUlhcbiIsCisJCQkJCWNoaXAtPmRtYS5yeF9jaGFuLT5kZXYtPmRldmljZS5idXNfaWQpOworCQlzZXRfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJfQorCisJaWYgKHBkYXRhLT50eF9kd3MuZG1hX2RldikgeworCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPnR4X2R3czsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkd3MtPnR4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgQUM5N0NfQ0FUSFIgKyAyOworCisJCWRtYV9jYXBfemVybyhtYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCQljaGlwLT5kbWEudHhfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBkd3MpOworCisJCWRldl9pbmZvKCZjaGlwLT5wZGV2LT5kZXYsICJ1c2luZyAlcyBmb3IgRE1BIFRYXG4iLAorCQkJCQljaGlwLT5kbWEudHhfY2hhbi0+ZGV2LT5kZXZpY2UuYnVzX2lkKTsKKwkJc2V0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCX0KKworCWlmICghdGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSAmJgorCQkJIXRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJcmV0dmFsID0gYXRtZWxfYWM5N2NfcGNtX25ldyhjaGlwKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBhYzk3IHBjbSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9kbWE7CisJfQorCisJcmV0dmFsID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgc291bmQgY2FyZFxuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkF0bWVsIEFDOTcgY29udHJvbGxlciBhdCAweCVwXG4iLAorCQkJY2hpcC0+cmVncyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2RtYToKKwlpZiAodGVzdF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEucnhfY2hhbik7CisJaWYgKHRlc3RfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsZWFyX2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNsZWFyX2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCWNoaXAtPmRtYS5yeF9jaGFuID0gTlVMTDsKKwljaGlwLT5kbWEudHhfY2hhbiA9IE5VTEw7CitlcnJfYWM5N19idXM6CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnJlc2V0X3BpbikpCisJCWdwaW9fZnJlZShjaGlwLT5yZXNldF9waW4pOworCisJaW91bm1hcChjaGlwLT5yZWdzKTsKK2Vycl9pb3JlbWFwOgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitlcnJfc25kX2NhcmRfbmV3OgorCWNsa19kaXNhYmxlKHBjbGspOworCWNsa19wdXQocGNsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdG1lbF9hYzk3Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHRlc3RfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJZHdfZG1hX2N5Y2xpY19zdG9wKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWNsa19kaXNhYmxlKGNoaXAtPnBjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJY2xrX2VuYWJsZShjaGlwLT5wY2xrKTsKKwlpZiAodGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS50eF9jaGFuKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYXRtZWxfYWM5N2Nfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF0bWVsX2FjOTdjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgYXRtZWxfYWM5N2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gZ2V0X2NoaXAoY2FyZCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5yZXNldF9waW4pKQorCQlncGlvX2ZyZWUoY2hpcC0+cmVzZXRfcGluKTsKKworCWNsa19kaXNhYmxlKGNoaXAtPnBjbGspOworCWNsa19wdXQoY2hpcC0+cGNsayk7CisJaW91bm1hcChjaGlwLT5yZWdzKTsKKworCWlmICh0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEudHhfY2hhbik7CisJY2xlYXJfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2xlYXJfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2hpcC0+ZG1hLnJ4X2NoYW4gPSBOVUxMOworCWNoaXAtPmRtYS50eF9jaGFuID0gTlVMTDsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2FjOTdjX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0bWVsX2FjOTdjX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0bWVsX2FjOTdjIiwKKwl9LAorCS5zdXNwZW5kCT0gYXRtZWxfYWM5N2Nfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0bWVsX2FjOTdjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0bWVsX2FjOTdjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhdG1lbF9hYzk3Y19kcml2ZXIsCisJCQlhdG1lbF9hYzk3Y19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChhdG1lbF9hYzk3Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0bWVsX2FjOTdjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtZWxfYWM5N2NfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGF0bWVsX2FjOTdjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQXRtZWwgQUM5NyBjb250cm9sbGVyIik7CitNT0RVTEVfQVVUSE9SKCJIYW5zLUNocmlzdGlhbiBFZ3R2ZWR0IDxoYW5zLWNocmlzdGlhbi5lZ3R2ZWR0QGF0bWVsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmggYi9zb3VuZC9hdG1lbC9hYzk3Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2JkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9hYzk3Yy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEF0bWVsIEFDOTdDIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19TT1VORF9BVE1FTF9BQzk3Q19ICisjZGVmaW5lIF9fU09VTkRfQVRNRUxfQUM5N0NfSAorCisjZGVmaW5lIEFDOTdDX01SCQkweDA4CisjZGVmaW5lIEFDOTdDX0lDQQkJMHgxMAorI2RlZmluZSBBQzk3Q19PQ0EJCTB4MTQKKyNkZWZpbmUgQUM5N0NfQ0FSSFIJCTB4MjAKKyNkZWZpbmUgQUM5N0NfQ0FUSFIJCTB4MjQKKyNkZWZpbmUgQUM5N0NfQ0FTUgkJMHgyOAorI2RlZmluZSBBQzk3Q19DQU1SCQkweDJjCisjZGVmaW5lIEFDOTdDX0NCUkhSCQkweDMwCisjZGVmaW5lIEFDOTdDX0NCVEhSCQkweDM0CisjZGVmaW5lIEFDOTdDX0NCU1IJCTB4MzgKKyNkZWZpbmUgQUM5N0NfQ0JNUgkJMHgzYworI2RlZmluZSBBQzk3Q19DT1JIUgkJMHg0MAorI2RlZmluZSBBQzk3Q19DT1RIUgkJMHg0NAorI2RlZmluZSBBQzk3Q19DT1NSCQkweDQ4CisjZGVmaW5lIEFDOTdDX0NPTVIJCTB4NGMKKyNkZWZpbmUgQUM5N0NfU1IJCTB4NTAKKyNkZWZpbmUgQUM5N0NfSUVSCQkweDU0CisjZGVmaW5lIEFDOTdDX0lEUgkJMHg1OAorI2RlZmluZSBBQzk3Q19JTVIJCTB4NWMKKyNkZWZpbmUgQUM5N0NfVkVSU0lPTgkJMHhmYworCisjZGVmaW5lIEFDOTdDX0NBVFBSCQlQRENfVFBSCisjZGVmaW5lIEFDOTdDX0NBVENSCQlQRENfVENSCisjZGVmaW5lIEFDOTdDX0NBVE5QUgkJUERDX1ROUFIKKyNkZWZpbmUgQUM5N0NfQ0FUTkNSCQlQRENfVE5DUgorI2RlZmluZSBBQzk3Q19DQVJQUgkJUERDX1JQUgorI2RlZmluZSBBQzk3Q19DQVJDUgkJUERDX1JDUgorI2RlZmluZSBBQzk3Q19DQVJOUFIJCVBEQ19STlBSCisjZGVmaW5lIEFDOTdDX0NBUk5DUgkJUERDX1JOQ1IKKyNkZWZpbmUgQUM5N0NfUFRDUgkJUERDX1BUQ1IKKworI2RlZmluZSBBQzk3Q19NUl9FTkEJCSgxIDw8IDApCisjZGVmaW5lIEFDOTdDX01SX1dSU1QJCSgxIDw8IDEpCisjZGVmaW5lIEFDOTdDX01SX1ZSQQkJKDEgPDwgMikKKworI2RlZmluZSBBQzk3Q19DU1JfVFhSRFkJCSgxIDw8IDApCisjZGVmaW5lIEFDOTdDX0NTUl9VTlJVTgkJKDEgPDwgMikKKyNkZWZpbmUgQUM5N0NfQ1NSX1JYUkRZCQkoMSA8PCA0KQorI2RlZmluZSBBQzk3Q19DU1JfRU5EVFgJCSgxIDw8IDEwKQorI2RlZmluZSBBQzk3Q19DU1JfRU5EUlgJCSgxIDw8IDE0KQorCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzIwCSgwIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfU0laRV8xOAkoMSA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMTYJKDIgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzEwCSgzIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfQ0VNX0xJVFRMRQkoMSA8PCAxOCkKKyNkZWZpbmUgQUM5N0NfQ01SX0NFTV9CSUcJKDAgPDwgMTgpCisjZGVmaW5lIEFDOTdDX0NNUl9DRU5BCQkoMSA8PCAyMSkKKyNkZWZpbmUgQUM5N0NfQ01SX0RNQUVOCQkoMSA8PCAyMikKKworI2RlZmluZSBBQzk3Q19TUl9DQUVWVAkJKDEgPDwgMykKKworI2RlZmluZSBBQzk3Q19DSF9BU1NJR04oc2xvdCwgY2hhbm5lbCkJCQkJCVwKKwkoQUM5N0NfQ0hBTk5FTF8jI2NoYW5uZWwgPDwgKDMgKiAoQUM5N19TTE9UXyMjc2xvdCAtIDMpKSkKKyNkZWZpbmUgQUM5N0NfQ0hBTk5FTF9OT05FCTB4MAorI2RlZmluZSBBQzk3Q19DSEFOTkVMX0EJCTB4MQorI2RlZmluZSBBQzk3Q19DSEFOTkVMX0IJCTB4MgorCisjZW5kaWYgLyogX19TT1VORF9BVE1FTF9BQzk3Q19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDYzNmIzYjUuLjRiMjBmYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCkBAIC0xMzczLDEyICsxMzczLDkgQEAKIHN0YXRpYyBpbnQgc25kX2N0bF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc25kX2N0bF9maWxlICpjdGw7Ci0JaW50IGVycjsKKwogCWN0bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmN0bC0+ZmFzeW5jKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjdGwtPmZhc3luYyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2h3ZGVwLmMgYi9zb3VuZC9jb3JlL2h3ZGVwLmMKaW5kZXggMTk1Y2FmYy4uYTcwZWU3ZiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9od2RlcC5jCisrKyBiL3NvdW5kL2NvcmUvaHdkZXAuYwpAQCAtOTksOSArOTksNiBAQAogCWlmIChodyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghaHctPm9wcy5vcGVuKQotCQlyZXR1cm4gLUVOWElPOwotCiAJaWYgKCF0cnlfbW9kdWxlX2dldChody0+Y2FyZC0+bW9kdWxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTExMyw2ICsxMTAsMTAgQEAKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWJyZWFrOwogCQl9CisJCWlmICghaHctPm9wcy5vcGVuKSB7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KIAkJZXJyID0gaHctPm9wcy5vcGVuKGh3LCBmaWxlKTsKIAkJaWYgKGVyciA+PSAwKQogCQkJYnJlYWs7CkBAIC0xNTEsNyArMTUyLDcgQEAKIAogc3RhdGljIGludCBzbmRfaHdkZXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0JaW50IGVyciA9IC1FTlhJTzsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpodyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbW9kdWxlICptb2QgPSBody0+Y2FyZC0+bW9kdWxlOwogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IDBkNTUyMGMuLmZkNTZhZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC0xMjEsMzEgKzEyMSw0NCBAQAogI2VuZGlmCiAKIC8qKgotICogIHNuZF9jYXJkX25ldyAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUKKyAqICBzbmRfY2FyZF9jcmVhdGUgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBzb3VuZGNhcmQgc3RydWN0dXJlCiAgKiAgQGlkeDogY2FyZCBpbmRleCAoYWRkcmVzcykgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0KICAqICBAeGlkOiBjYXJkIGlkZW50aWZpY2F0aW9uIChBU0NJSSBzdHJpbmcpCiAgKiAgQG1vZHVsZTogdG9wIGxldmVsIG1vZHVsZSBmb3IgbG9ja2luZwogICogIEBleHRyYV9zaXplOiBhbGxvY2F0ZSB0aGlzIGV4dHJhIHNpemUgYWZ0ZXIgdGhlIG1haW4gc291bmRjYXJkIHN0cnVjdHVyZQorICogIEBjYXJkX3JldDogdGhlIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGNyZWF0ZWQgY2FyZCBpbnN0YW5jZQogICoKICAqICBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUuCiAgKgotICogIFJldHVybnMga21hbGxvY2F0ZWQgc25kX2NhcmQgc3RydWN0dXJlLiBDcmVhdGVzIHRoZSBBTFNBIGNvbnRyb2wgaW50ZXJmYWNlCi0gKiAgKHdoaWNoIGlzIGJsb2NrZWQgdW50aWwgc25kX2NhcmRfcmVnaXN0ZXIgZnVuY3Rpb24gaXMgY2FsbGVkKS4KKyAqICBUaGUgZnVuY3Rpb24gYWxsb2NhdGVzIHNuZF9jYXJkIGluc3RhbmNlIHZpYSBremFsbG9jIHdpdGggdGhlIGdpdmVuCisgKiAgc3BhY2UgZm9yIHRoZSBkcml2ZXIgdG8gdXNlIGZyZWVseS4gIFRoZSBhbGxvY2F0ZWQgc3RydWN0IGlzIHN0b3JlZAorICogIGluIHRoZSBnaXZlbiBjYXJkX3JldCBwb2ludGVyLgorICoKKyAqICBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLXN0cnVjdCBzbmRfY2FyZCAqc25kX2NhcmRfbmV3KGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCwKLQkJCSBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKQoraW50IHNuZF9jYXJkX2NyZWF0ZShpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplLAorCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZF9yZXQpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnIsIGlkeDI7CiAKKwlpZiAoc25kX0JVR19PTighY2FyZF9yZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY2FyZF9yZXQgPSBOVUxMOworCiAJaWYgKGV4dHJhX3NpemUgPCAwKQogCQlleHRyYV9zaXplID0gMDsKIAljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpICsgZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoeGlkKSB7Ci0JCWlmICghc25kX2luZm9fY2hlY2tfcmVzZXJ2ZWRfd29yZHMoeGlkKSkKKwkJaWYgKCFzbmRfaW5mb19jaGVja19yZXNlcnZlZF93b3Jkcyh4aWQpKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgImdpdmVuIGlkIHN0cmluZyAnJXMnIGlzIHJlc2VydmVkLlxuIiwgeGlkKTsKKwkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gX19lcnJvcjsKKwkJfQogCQlzdHJsY3B5KGNhcmQtPmlkLCB4aWQsIHNpemVvZihjYXJkLT5pZCkpOwogCX0KIAllcnIgPSAwOwpAQCAtMTk1LDYgKzIwOCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNvbnRyb2xzKTsKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y3RsX2ZpbGVzKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+ZmlsZXNfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmZpbGVzX2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPnNodXRkb3duX3NsZWVwKTsKICNpZmRlZiBDT05GSUdfUE0KIAltdXRleF9pbml0KCZjYXJkLT5wb3dlcl9sb2NrKTsKQEAgLTIwMiwyNiArMjE2LDI4IEBACiAjZW5kaWYKIAkvKiB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gdGhlIHVzZXIgc3BhY2UgdW50aWwgKi8KIAkvKiBzbmRfY2FyZHNfYml0bWFzayBhbmQgc25kX2NhcmRzIGFyZSBzZXQgd2l0aCBzbmRfY2FyZF9yZWdpc3RlciAqLwotCWlmICgoZXJyID0gc25kX2N0bF9jcmVhdGUoY2FyZCkpIDwgMCkgewotCQlzbmRfcHJpbnRkKCJ1bmFibGUgdG8gcmVnaXN0ZXIgY29udHJvbCBtaW5vcnNcbiIpOworCWVyciA9IHNuZF9jdGxfY3JlYXRlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBjb250cm9sIG1pbm9yc1xuIik7CiAJCWdvdG8gX19lcnJvcjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfaW5mb19jYXJkX2NyZWF0ZShjYXJkKSkgPCAwKSB7Ci0JCXNuZF9wcmludGQoInVuYWJsZSB0byBjcmVhdGUgY2FyZCBpbmZvXG4iKTsKKwllcnIgPSBzbmRfaW5mb19jYXJkX2NyZWF0ZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gY3JlYXRlIGNhcmQgaW5mb1xuIik7CiAJCWdvdG8gX19lcnJvcl9jdGw7CiAJfQogCWlmIChleHRyYV9zaXplID4gMCkKIAkJY2FyZC0+cHJpdmF0ZV9kYXRhID0gKGNoYXIgKiljYXJkICsgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZCk7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRfcmV0ID0gY2FyZDsKKwlyZXR1cm4gMDsKIAogICAgICAgX19lcnJvcl9jdGw6CiAJc25kX2RldmljZV9mcmVlX2FsbChjYXJkLCBTTkRSVl9ERVZfQ01EX1BSRSk7CiAgICAgICBfX2Vycm9yOgogCWtmcmVlKGNhcmQpOwotICAgICAgCXJldHVybiBOVUxMOworICAJcmV0dXJuIGVycjsKIH0KLQotRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9uZXcpOworRVhQT1JUX1NZTUJPTChzbmRfY2FyZF9jcmVhdGUpOwogCiAvKiByZXR1cm4gbm9uLXplcm8gaWYgYSBjYXJkIGlzIGFscmVhZHkgbG9ja2VkICovCiBpbnQgc25kX2NhcmRfbG9ja2VkKGludCBjYXJkKQpAQCAtMjU5LDYgKzI3NSw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShfZGYsICZzaHV0ZG93bl9maWxlcywgc2h1dGRvd25fbGlzdCkgewogCQlpZiAoX2RmLT5maWxlID09IGZpbGUpIHsKIAkJCWRmID0gX2RmOworCQkJbGlzdF9kZWxfaW5pdCgmZGYtPnNodXRkb3duX2xpc3QpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zNDcsOCArMzY0LDcgQEAKIAkvKiBwaGFzZSAyOiByZXBsYWNlIGZpbGUtPmZfb3Agd2l0aCBzcGVjaWFsIGR1bW15IG9wZXJhdGlvbnMgKi8KIAkKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwotCW1maWxlID0gY2FyZC0+ZmlsZXM7Ci0Jd2hpbGUgKG1maWxlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtZmlsZSwgJmNhcmQtPmZpbGVzX2xpc3QsIGxpc3QpIHsKIAkJZmlsZSA9IG1maWxlLT5maWxlOwogCiAJCS8qIGl0J3MgY3JpdGljYWwgcGFydCwgdXNlIGVuZGxlc3MgbG9vcCAqLwpAQCAtMzYxLDggKzM3Nyw2IEBACiAKIAkJbWZpbGUtPmZpbGUtPmZfb3AgPSAmc25kX3NodXRkb3duX2Zfb3BzOwogCQlmb3BzX2dldChtZmlsZS0+ZmlsZS0+Zl9vcCk7Ci0JCQotCQltZmlsZSA9IG1maWxlLT5uZXh0OwogCX0KIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CQogCkBAIC00NDIsNyArNDU2LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Ci0JaWYgKGNhcmQtPmZpbGVzID09IE5VTEwpCisJaWYgKGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKQogCQlmcmVlX25vdyA9IDE7CiAJZWxzZQogCQljYXJkLT5mcmVlX29uX2xhc3RfY2xvc2UgPSAxOwpAQCAtNDYyLDcgKzQ3Niw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiB3YWl0LCB1bnRpbCBhbGwgZGV2aWNlcyBhcmUgcmVhZHkgZm9yIHRoZSBmcmVlIG9wZXJhdGlvbiAqLwotCXdhaXRfZXZlbnQoY2FyZC0+c2h1dGRvd25fc2xlZXAsIGNhcmQtPmZpbGVzID09IE5VTEwpOworCXdhaXRfZXZlbnQoY2FyZC0+c2h1dGRvd25fc2xlZXAsIGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKTsKIAlzbmRfY2FyZF9kb19mcmVlKGNhcmQpOwogCXJldHVybiAwOwogfQpAQCAtODA5LDE1ICs4MjMsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWZpbGUtPmZpbGUgPSBmaWxlOwogCW1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCA9IE5VTEw7Ci0JbWZpbGUtPm5leHQgPSBOVUxMOwogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJaWYgKGNhcmQtPnNodXRkb3duKSB7CiAJCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAkJa2ZyZWUobWZpbGUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JbWZpbGUtPm5leHQgPSBjYXJkLT5maWxlczsKLQljYXJkLT5maWxlcyA9IG1maWxlOworCWxpc3RfYWRkKCZtZmlsZS0+bGlzdCwgJmNhcmQtPmZpbGVzX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgzOSwyOSArODUxLDIwIEBACiAgKi8KIGludCBzbmRfY2FyZF9maWxlX3JlbW92ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICptZmlsZSwgKnBmaWxlID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSAqbWZpbGUsICpmb3VuZCA9IE5VTEw7CiAJaW50IGxhc3RfY2xvc2UgPSAwOwogCiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKLQltZmlsZSA9IGNhcmQtPmZpbGVzOwotCXdoaWxlIChtZmlsZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkobWZpbGUsICZjYXJkLT5maWxlc19saXN0LCBsaXN0KSB7CiAJCWlmIChtZmlsZS0+ZmlsZSA9PSBmaWxlKSB7Ci0JCQlpZiAocGZpbGUpCi0JCQkJcGZpbGUtPm5leHQgPSBtZmlsZS0+bmV4dDsKLQkJCWVsc2UKLQkJCQljYXJkLT5maWxlcyA9IG1maWxlLT5uZXh0OworCQkJbGlzdF9kZWwoJm1maWxlLT5saXN0KTsKKwkJCWlmIChtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApCisJCQkJZm9wc19wdXQobWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKTsKKwkJCWZvdW5kID0gbWZpbGU7CiAJCQlicmVhazsKIAkJfQotCQlwZmlsZSA9IG1maWxlOwotCQltZmlsZSA9IG1maWxlLT5uZXh0OwogCX0KLQlpZiAobWZpbGUgJiYgbWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKSB7Ci0JCWZvcHNfcHV0KG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCk7Ci0JCXNwaW5fbG9jaygmc2h1dGRvd25fbG9jayk7Ci0JCWxpc3RfZGVsKCZtZmlsZS0+c2h1dGRvd25fbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZzaHV0ZG93bl9sb2NrKTsKLQl9Ci0JaWYgKGNhcmQtPmZpbGVzID09IE5VTEwpCisJaWYgKGxpc3RfZW1wdHkoJmNhcmQtPmZpbGVzX2xpc3QpKQogCQlsYXN0X2Nsb3NlID0gMTsKIAlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CiAJaWYgKGxhc3RfY2xvc2UpIHsKQEAgLTg2OSwxMSArODcyLDExIEBACiAJCWlmIChjYXJkLT5mcmVlX29uX2xhc3RfY2xvc2UpCiAJCQlzbmRfY2FyZF9kb19mcmVlKGNhcmQpOwogCX0KLQlpZiAoIW1maWxlKSB7CisJaWYgKCFmb3VuZCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBTFNBIGNhcmQgZmlsZSByZW1vdmUgcHJvYmxlbSAoJXApXG4iLCBmaWxlKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWtmcmVlKG1maWxlKTsKKwlrZnJlZShmb3VuZCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvamFjay5jIGIvc291bmQvY29yZS9qYWNrLmMKaW5kZXggMDc3YTg1Mi4uYzgyNTRjNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9qYWNrLmMKKysrIGIvc291bmQvY29yZS9qYWNrLmMKQEAgLTIzLDYgKzIzLDE0IEBACiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KIAorc3RhdGljIGludCBqYWNrX3R5cGVzW10gPSB7CisJU1dfSEVBRFBIT05FX0lOU0VSVCwKKwlTV19NSUNST1BIT05FX0lOU0VSVCwKKwlTV19MSU5FT1VUX0lOU0VSVCwKKwlTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCwKKwlTV19WSURFT09VVF9JTlNFUlQsCit9OworCiBzdGF0aWMgaW50IHNuZF9qYWNrX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9qYWNrICpqYWNrID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKQEAgLTc5LDYgKzg3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX2phY2sgKmphY2s7CiAJaW50IGVycjsKKwlpbnQgaTsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0gc25kX2phY2tfZGV2X2ZyZWUsCiAJCS5kZXZfcmVnaXN0ZXIgPSBzbmRfamFja19kZXZfcmVnaXN0ZXIsCkBAIC0xMDAsMTggKzEwOSwxMCBAQAogCiAJamFjay0+dHlwZSA9IHR5cGU7CiAKLQlpZiAodHlwZSAmIFNORF9KQUNLX0hFQURQSE9ORSkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0hFQURQSE9ORV9JTlNFUlQpOwotCWlmICh0eXBlICYgU05EX0pBQ0tfTElORU9VVCkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX0xJTkVPVVRfSU5TRVJUKTsKLQlpZiAodHlwZSAmIFNORF9KQUNLX01JQ1JPUEhPTkUpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19NSUNST1BIT05FX0lOU0VSVCk7Ci0JaWYgKHR5cGUgJiBTTkRfSkFDS19NRUNIQU5JQ0FMKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGphY2tfdHlwZXMpOyBpKyspCisJCWlmICh0eXBlICYgKDEgPDwgaSkpCisJCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAorCQkJCQkgICAgIGphY2tfdHlwZXNbaV0pOwogCiAJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0pBQ0ssIGphY2ssICZvcHMpOwogCWlmIChlcnIgPCAwKQpAQCAtMTU0LDIxICsxNTUsMTcgQEAKICAqLwogdm9pZCBzbmRfamFja19yZXBvcnQoc3RydWN0IHNuZF9qYWNrICpqYWNrLCBpbnQgc3RhdHVzKQogeworCWludCBpOworCiAJaWYgKCFqYWNrKQogCQlyZXR1cm47CiAKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX0hFQURQSE9ORSkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0hFQURQSE9ORV9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX0hFQURQSE9ORSk7Ci0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19MSU5FT1VUKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfTElORU9VVF9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX0xJTkVPVVQpOwotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfTUlDUk9QSE9ORSkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX01JQ1JPUEhPTkVfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19NSUNST1BIT05FKTsKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX01FQ0hBTklDQUwpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfTUVDSEFOSUNBTCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoamFja190eXBlcyk7IGkrKykgeworCQlpbnQgdGVzdGJpdCA9IDEgPDwgaTsKKwkJaWYgKGphY2stPnR5cGUgJiB0ZXN0Yml0KQorCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIGphY2tfdHlwZXNbaV0sCisJCQkJCSAgICBzdGF0dXMgJiB0ZXN0Yml0KTsKKwl9CiAKIAlpbnB1dF9zeW5jKGphY2stPmlucHV0X2Rldik7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL21pc2MuYyBiL3NvdW5kL2NvcmUvbWlzYy5jCmluZGV4IDM4NTI0ZjYuLmE5NzEwZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWlzYy5jCisrKyBiL3NvdW5kL2NvcmUvbWlzYy5jCkBAIC05NSwxMiArOTUsMTQgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCWZvciAocSA9IGxpc3Q7IHEtPnN1YnZlbmRvcjsgcSsrKQotCQlpZiAocS0+c3VidmVuZG9yID09IHBjaS0+c3Vic3lzdGVtX3ZlbmRvciAmJgotCQkgICAgKCFxLT5zdWJkZXZpY2UgfHwgcS0+c3ViZGV2aWNlID09IHBjaS0+c3Vic3lzdGVtX2RldmljZSkpCisJZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspIHsKKwkJaWYgKHEtPnN1YnZlbmRvciAhPSBwY2ktPnN1YnN5c3RlbV92ZW5kb3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFxLT5zdWJkZXZpY2UgfHwKKwkJICAgIChwY2ktPnN1YnN5c3RlbV9kZXZpY2UgJiBxLT5zdWJkZXZpY2VfbWFzaykgPT0gcS0+c3ViZGV2aWNlKQogCQkJcmV0dXJuIHE7CisJfQogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MKHNuZF9wY2lfcXVpcmtfbG9va3VwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IDY5OWQyODkuLmRkYTAwMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTExNjAsOSArMTE2MCwxMSBAQAogCQkgICAgcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7CiAjaWZkZWYgT1NTX0RFQlVHCiAJCQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfWFJVTikKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRlOiByZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZTogcmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZTogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOwogI2VuZGlmCiAJCQlyZXQgPSBzbmRfcGNtX29zc19wcmVwYXJlKHN1YnN0cmVhbSk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTExOTYsOSArMTE5OCwxMSBAQAogCQkgICAgcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7CiAjaWZkZWYgT1NTX0RFQlVHCiAJCQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfWFJVTikKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWQ6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZDogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOwogCQkJZWxzZQotCQkJCXByaW50aygicGNtX29zczogcmVhZDogcmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fa2VybmVsX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RSQUlOLCBOVUxMKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTI0Miw5ICsxMjQ2LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogd3JpdGV2OiByZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRldjogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOwogCQkJZWxzZQotCQkJCXByaW50aygicGNtX29zczogd3JpdGV2OiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRldjogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOwogI2VuZGlmCiAJCQlyZXQgPSBzbmRfcGNtX29zc19wcmVwYXJlKHN1YnN0cmVhbSk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTEyNzgsOSArMTI4NCwxMSBAQAogCQkgICAgcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEKSB7CiAjaWZkZWYgT1NTX0RFQlVHCiAJCQlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfWFJVTikKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWR2OiByZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWR2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkdjogcmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkdjogIgorCQkJCSAgICAgICAicmVjb3ZlcmluZyBmcm9tIFNVU1BFTkRcbiIpOwogI2VuZGlmCiAJCQlyZXQgPSBzbmRfcGNtX2tlcm5lbF9pb2N0bChzdWJzdHJlYW0sIFNORFJWX1BDTV9JT0NUTF9EUkFJTiwgTlVMTCk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTE1MzMsNyArMTU0MSw3IEBACiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKCZydW50aW1lLT5zbGVlcCwgJndhaXQpOwogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygic3luYzE6IHNpemUgPSAlbGlcbiIsIHNpemUpOworCXByaW50ayhLRVJOX0RFQlVHICJzeW5jMTogc2l6ZSA9ICVsaVxuIiwgc2l6ZSk7CiAjZW5kaWYKIAl3aGlsZSAoMSkgewogCQlyZXN1bHQgPSBzbmRfcGNtX29zc193cml0ZTIoc3Vic3RyZWFtLCBydW50aW1lLT5vc3MuYnVmZmVyLCBzaXplLCAxKTsKQEAgLTE1OTAsNyArMTU5OCw3IEBACiAJCW11dGV4X2xvY2soJnJ1bnRpbWUtPm9zcy5wYXJhbXNfbG9jayk7CiAJCWlmIChydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQgPiAwKSB7CiAjaWZkZWYgT1NTX0RFQlVHCi0JCQlwcmludGsoInN5bmM6IGJ1ZmZlcl91c2VkXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzeW5jOiBidWZmZXJfdXNlZFxuIik7CiAjZW5kaWYKIAkJCXNpemUgPSAoOCAqIChydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzIC0gcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkKSArIDcpIC8gd2lkdGg7CiAJCQlzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShmb3JtYXQsCkBAIC0xNjAzLDcgKzE2MTEsNyBAQAogCQkJfQogCQl9IGVsc2UgaWYgKHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyID4gMCkgewogI2lmZGVmIE9TU19ERUJVRwotCQkJcHJpbnRrKCJzeW5jOiBwZXJpb2RfcHRyXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzeW5jOiBwZXJpb2RfcHRyXG4iKTsKICNlbmRpZgogCQkJc2l6ZSA9IHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMgLSBydW50aW1lLT5vc3MucGVyaW9kX3B0cjsKIAkJCXNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKGZvcm1hdCwKQEAgLTE4OTUsNyArMTkwMyw5IEBACiAKIHN0YXRpYyBpbnQgc25kX3BjbV9vc3Nfbm9uYmxvY2soc3RydWN0IGZpbGUgKiBmaWxlKQogeworCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NTIsNyArMTk2Miw3IEBACiAJaW50IGVyciwgY21kOwogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiB0cmlnZ2VyID0gMHgleFxuIiwgdHJpZ2dlcik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHRyaWdnZXIgPSAweCV4XG4iLCB0cmlnZ2VyKTsKICNlbmRpZgogCQogCXBzdWJzdHJlYW0gPSBwY21fb3NzX2ZpbGUtPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CkBAIC0yMTcwLDcgKzIxODAsOSBAQAogCX0KIAogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogc3BhY2U6IGJ5dGVzID0gJWksIGZyYWdtZW50cyA9ICVpLCBmcmFnc3RvdGFsID0gJWksIGZyYWdzaXplID0gJWlcbiIsIGluZm8uYnl0ZXMsIGluZm8uZnJhZ21lbnRzLCBpbmZvLmZyYWdzdG90YWwsIGluZm8uZnJhZ3NpemUpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiBzcGFjZTogYnl0ZXMgPSAlaSwgZnJhZ21lbnRzID0gJWksICIKKwkgICAgICAgImZyYWdzdG90YWwgPSAlaSwgZnJhZ3NpemUgPSAlaVxuIiwKKwkgICAgICAgaW5mby5ieXRlcywgaW5mby5mcmFnbWVudHMsIGluZm8uZnJhZ3N0b3RhbCwgaW5mby5mcmFnc2l6ZSk7CiAjZW5kaWYKIAlpZiAoY29weV90b191c2VyKF9pbmZvLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yNDczLDcgKzI0ODUsNyBAQAogCWlmICgoKGNtZCA+PiA4KSAmIDB4ZmYpICE9ICdQJykKIAkJcmV0dXJuIC1FSU5WQUw7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBpb2N0bCA9IDB4JXhcbiIsIGNtZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IGlvY3RsID0gMHgleFxuIiwgY21kKTsKICNlbmRpZgogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgpAQCAtMjYyNyw3ICsyNjM5LDggQEAKICNlbHNlCiAJewogCQlzc2l6ZV90IHJlcyA9IHNuZF9wY21fb3NzX3JlYWQxKHN1YnN0cmVhbSwgYnVmLCBjb3VudCk7Ci0JCXByaW50aygicGNtX29zczogcmVhZCAlbGkgYnl0ZXMgKHJldHVybmVkICVsaSBieXRlcylcbiIsIChsb25nKWNvdW50LCAobG9uZylyZXMpOworCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZCAlbGkgYnl0ZXMgIgorCQkgICAgICAgIihyZXR1cm5lZCAlbGkgYnl0ZXMpXG4iLCAobG9uZyljb3VudCwgKGxvbmcpcmVzKTsKIAkJcmV0dXJuIHJlczsKIAl9CiAjZW5kaWYKQEAgLTI2NDYsNyArMjY1OSw4IEBACiAJc3Vic3RyZWFtLT5mX2ZsYWdzID0gZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CiAJcmVzdWx0ID0gc25kX3BjbV9vc3Nfd3JpdGUxKHN1YnN0cmVhbSwgYnVmLCBjb3VudCk7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiB3cml0ZSAlbGkgYnl0ZXMgKHdyb3RlICVsaSBieXRlcylcbiIsIChsb25nKWNvdW50LCAobG9uZylyZXN1bHQpOworCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiB3cml0ZSAlbGkgYnl0ZXMgKHdyb3RlICVsaSBieXRlcylcbiIsCisJICAgICAgIChsb25nKWNvdW50LCAobG9uZylyZXN1bHQpOwogI2VuZGlmCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI3MjAsNyArMjczNCw3IEBACiAJaW50IGVycjsKIAogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogbW1hcCBiZWdpblxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IG1tYXAgYmVnaW5cbiIpOwogI2VuZGlmCiAJcGNtX29zc19maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN3aXRjaCAoKGFyZWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSkpKSB7CkBAIC0yNzcwLDcgKzI3ODQsOCBAQAogCXJ1bnRpbWUtPnNpbGVuY2VfdGhyZXNob2xkID0gMDsKIAlydW50aW1lLT5zaWxlbmNlX3NpemUgPSAwOwogI2lmZGVmIE9TU19ERUJVRwotCXByaW50aygicGNtX29zczogbW1hcCBvaywgYnl0ZXMgPSAweCV4XG4iLCBydW50aW1lLT5vc3MubW1hcF9ieXRlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IG1tYXAgb2ssIGJ5dGVzID0gMHgleFxuIiwKKwkgICAgICAgcnVudGltZS0+b3NzLm1tYXBfYnl0ZXMpOwogI2VuZGlmCiAJLyogSW4gbW1hcCBtb2RlIHdlIG5ldmVyIHN0b3AgKi8KIAlydW50aW1lLT5zdG9wX3RocmVzaG9sZCA9IHJ1bnRpbWUtPmJvdW5kYXJ5OwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCmluZGV4IGNhMmY0YzMuLmI5YWZhYjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaAorKysgYi9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKQEAgLTE3Niw5ICsxNzYsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBQTFVHSU5fREVCVUcKLSNkZWZpbmUgcGRwcmludGYoIGZtdCwgYXJncy4uLiApIHByaW50ayggInBsdWdpbjogIiBmbXQsICMjYXJncykKKyNkZWZpbmUgcGRwcmludGYoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAicGx1Z2luOiAiIGZtdCwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgcGRwcmludGYoIGZtdCwgYXJncy4uLiApIAorI2RlZmluZSBwZHByaW50ZihmbXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9fUENNX1BMVUdJTl9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbS5jIGIvc291bmQvY29yZS9wY20uYwppbmRleCAxOTJhNDMzLi4xNDU5MzFhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtLmMKQEAgLTY2Nyw3ICs2NjcsNiBAQAogCQlzcGluX2xvY2tfaW5pdCgmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLmxvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLnN1YnN0cmVhbXMpOwogCQlsaXN0X2FkZF90YWlsKCZzdWJzdHJlYW0tPmxpbmtfbGlzdCwgJnN1YnN0cmVhbS0+c2VsZl9ncm91cC5zdWJzdHJlYW1zKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnN1YnN0cmVhbS0+dGltZXJfbG9jayk7CiAJCWF0b21pY19zZXQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCwgMCk7CiAJCXByZXYgPSBzdWJzdHJlYW07CiAJfQpAQCAtNjkyLDcgKzY5MSw3IEBACiAgKgogICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1pbnQgc25kX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBjaGFyICppZCwgaW50IGRldmljZSwKK2ludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZGV2aWNlLAogCQlpbnQgcGxheWJhY2tfY291bnQsIGludCBjYXB0dXJlX2NvdW50LAogCSAgICAgICAgc3RydWN0IHNuZF9wY20gKiogcnBjbSkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggOTIxNjkxMC4uZmJiMmUzOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTEyNSwyMyArMTI1LDMyIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSkJKChzdWJzdHJlYW0pLT5wc3RyLT54cnVuX2RlYnVnKQorI2Vsc2UKKyNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pCTAKKyNlbmRpZgorCisjZGVmaW5lIGR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pIGRvIHsJXAorCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pID4gMSkJXAorCQkJZHVtcF9zdGFjaygpOwkJXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyB2b2lkIHhydW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtKSkgewogCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgIlhSVU46IHBjbUMlZEQlZCVjXG4iLAogCQkJICAgc3Vic3RyZWFtLT5wY20tPmNhcmQtPm51bWJlciwKIAkJCSAgIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsCiAJCQkgICBzdWJzdHJlYW0tPnN0cmVhbSA/ICdjJyA6ICdwJyk7Ci0JCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJZHVtcF9zdGFjaygpOworCQlkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKTsKIAl9Ci0jZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKIHsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7CiAKQEAgLTE1MCwxNyArMTU5LDIxIEBACiAJcG9zID0gc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKTsKIAlpZiAocG9zID09IFNORFJWX1BDTV9QT1NfWFJVTikKIAkJcmV0dXJuIHBvczsgLyogWFJVTiAqLwotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAocG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgICJCVUc6IHN0cmVhbSA9ICVpLCBwb3MgPSAweCVseCwgYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIHBvcywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQkJc25kX3ByaW50ZChLRVJOX0VSUiAgIkJVRzogc3RyZWFtID0gJWksIHBvcyA9IDB4JWx4LCAiCisJCQkJICAgImJ1ZmZlciBzaXplID0gMHglbHgsIHBlcmlvZCBzaXplID0gMHglbHhcbiIsCisJCQkJICAgc3Vic3RyZWFtLT5zdHJlYW0sIHBvcywgcnVudGltZS0+YnVmZmVyX3NpemUsCisJCQkJICAgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQl9CisJCXBvcyA9IDA7CiAJfQotI2VuZGlmCiAJcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKIAlyZXR1cm4gcG9zOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQogewogCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwogCkBAIC0xODIsMTEgKzE5NSwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorI2RlZmluZSBod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCBmbXQsIGFyZ3MuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSkpIHsJCQkJXAorCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgewkJCVwKKwkJCQlzbmRfcHJpbnRkKCJQQ006ICIgZm10LCAjI2FyZ3MpOwlcCisJCQl9CQkJCQkJXAorCQkJZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSk7CQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9pbnRlcnJ1cHQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgbmV3X2h3X3B0ciwgaHdfcHRyX2ludGVycnVwdDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0LCBod19iYXNlOwogCXNuZF9wY21fc2ZyYW1lc190IGRlbHRhOwogCiAJcG9zID0gc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdWJzdHJlYW0sIHJ1bnRpbWUpOwpAQCAtMTk0LDM2ICsyMTcsNTMgQEAKIAkJeHJ1bihzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQlpZiAocnVudGltZS0+cGVyaW9kX3NpemUgPT0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCWdvdG8gX19uZXh0X2J1ZjsKLQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJaHdfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOworCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwogCWh3X3B0cl9pbnRlcnJ1cHQgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0ICsgcnVudGltZS0+cGVyaW9kX3NpemU7Ci0KLQlkZWx0YSA9IGh3X3B0cl9pbnRlcnJ1cHQgLSBuZXdfaHdfcHRyOwotCWlmIChkZWx0YSA+IDApIHsKLQkJaWYgKChzbmRfcGNtX3VmcmFtZXNfdClkZWx0YSA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMikgewotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQkJCWlmIChydW50aW1lLT5wZXJpb2RzID4gMSAmJiBzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKLQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzFdIChzdHJlYW0gPSAlaSwgZGVsdGE6IC0lbGQsIG1heCBqaXR0ZXIgPSAlbGQpOiB3cm9uZyBpbnRlcnJ1cHQgYWNrbm93bGVkZ2U/XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpIGRlbHRhLCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpOwotCQkJCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJCQlkdW1wX3N0YWNrKCk7Ci0JCQl9Ci0jZW5kaWYKLQkJCXJldHVybiAwOwotCQl9Ci0JICAgICAgX19uZXh0X2J1ZjoKLQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChydW50aW1lLT5od19wdHJfYmFzZSA9PSBydW50aW1lLT5ib3VuZGFyeSkKLQkJCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gMDsKLQkJbmV3X2h3X3B0ciA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlICsgcG9zOworCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7CisJaWYgKGh3X3B0cl9pbnRlcnJ1cHQgPj0gcnVudGltZS0+Ym91bmRhcnkpIHsKKwkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKKwkJaWYgKGh3X2Jhc2UgPCBydW50aW1lLT5ib3VuZGFyeSAvIDIpCisJCQkvKiBod19iYXNlIHdhcyBhbHJlYWR5IGxhcHBlZDsgcmVjYWxjIGRlbHRhICovCisJCQlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OwogCX0KLQorCWlmIChkZWx0YSA8IDApIHsKKwkJZGVsdGEgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChkZWx0YSA8IDApIHsKKwkJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIAorCQkJCSAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSAiCisJCQkJICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgaW50cl9wdHI9JWxkKVxuIiwKKwkJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylwb3MsCisJCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKKwkJCS8qIHJlYmFzZSB0byBpbnRlcnJ1cHQgcG9zaXRpb24gKi8KKwkJCWh3X2Jhc2UgPSBuZXdfaHdfcHRyID0gaHdfcHRyX2ludGVycnVwdDsKKwkJCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KKwkJCWh3X2Jhc2UgLT0gaHdfYmFzZSAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQkJZGVsdGEgPSAwOworCQl9IGVsc2UgeworCQkJaHdfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQkJCWh3X2Jhc2UgPSAwOworCQkJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CisJCX0KKwl9CisJaWYgKGRlbHRhID4gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKKwkJCSAgICAgIkxvc3QgaW50ZXJydXB0cz8gIgorCQkJICAgICAiKHN0cmVhbT0laSwgZGVsdGE9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAorCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpZGVsdGEsCisJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOworCQkvKiByZWJhc2UgaHdfcHRyX2ludGVycnVwdCAqLworCQlod19wdHJfaW50ZXJydXB0ID0KKwkJCW5ld19od19wdHIgLSBuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemU7CisJfQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmCiAJICAgIHJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA+IDApCiAJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIG5ld19od19wdHIpOwogCisJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSBod19iYXNlOwogCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gbmV3X2h3X3B0cjsKLQlydW50aW1lLT5od19wdHJfaW50ZXJydXB0ID0gbmV3X2h3X3B0ciAtIG5ld19od19wdHIgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwlydW50aW1lLT5od19wdHJfaW50ZXJydXB0ID0gaHdfcHRyX2ludGVycnVwdDsKIAogCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOwogfQpAQCAtMjMzLDcgKzI3Myw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7Ci0Jc25kX3BjbV91ZnJhbWVzX3Qgb2xkX2h3X3B0ciwgbmV3X2h3X3B0cjsKKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19iYXNlOwogCXNuZF9wY21fc2ZyYW1lc190IGRlbHRhOwogCiAJb2xkX2h3X3B0ciA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyOwpAQCAtMjQyLDI5ICsyODIsMzggQEAKIAkJeHJ1bihzdWJzdHJlYW0pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KLQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJaHdfYmFzZSA9IHJ1bnRpbWUtPmh3X3B0cl9iYXNlOworCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwogCi0JZGVsdGEgPSBvbGRfaHdfcHRyIC0gbmV3X2h3X3B0cjsKLQlpZiAoZGVsdGEgPiAwKSB7Ci0JCWlmICgoc25kX3BjbV91ZnJhbWVzX3QpZGVsdGEgPCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpIHsKLSNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCi0JCQlpZiAocnVudGltZS0+cGVyaW9kcyA+IDIgJiYgc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnKSB7Ci0JCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlIFsyXSAoc3RyZWFtID0gJWksIGRlbHRhOiAtJWxkLCBtYXggaml0dGVyID0gJWxkKTogd3JvbmcgaW50ZXJydXB0IGFja25vd2xlZGdlP1xuIiwgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKSBkZWx0YSwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKTsKLQkJCQlpZiAoc3Vic3RyZWFtLT5wc3RyLT54cnVuX2RlYnVnID4gMSkKLQkJCQkJZHVtcF9zdGFjaygpOwotCQkJfQotI2VuZGlmCisJZGVsdGEgPSBuZXdfaHdfcHRyIC0gb2xkX2h3X3B0cjsKKwlpZiAoZGVsdGEgPCAwKSB7CisJCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoZGVsdGEgPCAwKSB7CisJCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKKwkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdICIKKwkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBvbGRfcHRyPSVsZClcbiIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpb2xkX2h3X3B0cik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlydW50aW1lLT5od19wdHJfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKHJ1bnRpbWUtPmh3X3B0cl9iYXNlID09IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSAwOwotCQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQorCQkJaHdfYmFzZSA9IDA7CisJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCX0KKwlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSAmJiBydW50aW1lLT5wZXJpb2RzID4gMSkgeworCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAorCQkJICAgICAiaHdfcHRyIHNraXBwaW5nISAiCisJCQkgICAgICIocG9zPSVsZCwgZGVsdGE9JWxkLCBwZXJpb2Q9JWxkKVxuIiwKKwkJCSAgICAgKGxvbmcpcG9zLCAobG9uZylkZWx0YSwKKwkJCSAgICAgKGxvbmcpcnVudGltZS0+cGVyaW9kX3NpemUpOworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKIAkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN1YnN0cmVhbSwgbmV3X2h3X3B0cik7CiAKKwlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwogCiAJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IGE3ODllZmMuLmExNTFmYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJaWYgKCEocGFyYW1zLT5ybWFzayAmICgxIDw8IGspKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CiAJCXByaW50aygiJTA0eCUwNHglMDR4JTA0eCAtPiAiLCBtLT5iaXRzWzNdLCBtLT5iaXRzWzJdLCBtLT5iaXRzWzFdLCBtLT5iaXRzWzBdKTsKICNlbmRpZgogCQljaGFuZ2VkID0gc25kX21hc2tfcmVmaW5lKG0sIGNvbnN0cnNfbWFzayhjb25zdHJzLCBrKSk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJaWYgKCEocGFyYW1zLT5ybWFzayAmICgxIDw8IGspKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIFJVTEVTX0RFQlVHCi0JCXByaW50aygiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1trXSk7CiAJCWlmIChpLT5lbXB0eSkKIAkJCXByaW50aygiZW1wdHkiKTsKIAkJZWxzZQpAQCAtMjUxLDcgKzI1MSw3IEBACiAJCQlpZiAoIWRvaXQpCiAJCQkJY29udGludWU7CiAjaWZkZWYgUlVMRVNfREVCVUcKLQkJCXByaW50aygiUnVsZSAlZCBbJXBdOiAiLCBrLCByLT5mdW5jKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJSdWxlICVkIFslcF06ICIsIGssIHItPmZ1bmMpOwogCQkJaWYgKHItPnZhciA+PSAwKSB7CiAJCQkJcHJpbnRrKCIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNbci0+dmFyXSk7CiAJCQkJaWYgKGh3X2lzX21hc2soci0+dmFyKSkgewpAQCAtMzI0Niw5ICszMjQ2LDcgQEAKIAllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnJ1bnRpbWUtPmZhc3luYyk7CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jIGIvc291bmQvY29yZS9wY21fdGltZXIuYwppbmRleCAyYzg5YzA0Li5jYTgwNjhiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKQEAgLTg1LDI1ICs4NSwxOSBAQAogCiBzdGF0aWMgaW50IHNuZF9wY21fdGltZXJfc3RhcnQoc3RydWN0IHNuZF90aW1lciAqIHRpbWVyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJCiAJc3Vic3RyZWFtID0gc25kX3RpbWVyX2NoaXAodGltZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlzdWJzdHJlYW0tPnRpbWVyX3J1bm5pbmcgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fdGltZXJfc3RvcChzdHJ1Y3Qgc25kX3RpbWVyICogdGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAkKIAlzdWJzdHJlYW0gPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXN1YnN0cmVhbS0+dGltZXJfcnVubmluZyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jIGIvc291bmQvY29yZS9yYXdtaWRpLmMKaW5kZXggMDAyNzc3Yi4uNDczMjQ3YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9yYXdtaWRpLmMKKysrIGIvc291bmQvY29yZS9yYXdtaWRpLmMKQEAgLTIyNCwxNTYgKzIyNCwxNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogbG9vayBmb3IgYW4gYXZhaWxhYmxlIHN1YnN0cmVhbSBmb3IgdGhlIGdpdmVuIHN0cmVhbSBkaXJlY3Rpb247CisgKiBpZiBhIHNwZWNpZmljIHN1YmRldmljZSBpcyBnaXZlbiwgdHJ5IHRvIGFzc2lnbiBpdAorICovCitzdGF0aWMgaW50IGFzc2lnbl9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwgaW50IHN1YmRldmljZSwKKwkJCSAgICBpbnQgc3RyZWFtLCBpbnQgbW9kZSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICoqc3ViX3JldCkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9yYXdtaWRpX3N0ciAqcyA9ICZybWlkaS0+c3RyZWFtc1tzdHJlYW1dOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5mb19mbGFnc1syXSA9IHsKKwkJW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0gPSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVULAorCQlbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdID0gU05EUlZfUkFXTUlESV9JTkZPX0lOUFVULAorCX07CisKKwlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIGluZm9fZmxhZ3Nbc3RyZWFtXSkpCisJCXJldHVybiAtRU5YSU87CisJaWYgKHN1YmRldmljZSA+PSAwICYmIHN1YmRldmljZSA+PSBzLT5zdWJzdHJlYW1fY291bnQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChzLT5zdWJzdHJlYW1fb3BlbmVkID49IHMtPnN1YnN0cmVhbV9jb3VudCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwgJnMtPnN1YnN0cmVhbXMsIGxpc3QpIHsKKwkJaWYgKHN1YnN0cmVhbS0+b3BlbmVkKSB7CisJCQlpZiAoc3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUIHx8CisJCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN1YmRldmljZSA8IDAgfHwgc3ViZGV2aWNlID09IHN1YnN0cmVhbS0+bnVtYmVyKSB7CisJCQkqc3ViX3JldCA9IHN1YnN0cmVhbTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUFHQUlOOworfQorCisvKiBvcGVuIGFuZCBkbyByZWYtY291bnRpbmcgZm9yIHRoZSBnaXZlbiBzdWJzdHJlYW0gKi8KK3N0YXRpYyBpbnQgb3Blbl9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBpbnQgbW9kZSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc3Vic3RyZWFtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXN1YnN0cmVhbS0+b3BlbmVkID0gMTsKKwlpZiAoc3Vic3RyZWFtLT51c2VfY291bnQrKyA9PSAwKQorCQlzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nID0gMTsKKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCisJCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZCsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgaW50IGNsZWFudXApOworCitzdGF0aWMgaW50IHJhd21pZGlfb3Blbl9wcml2KHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksIGludCBzdWJkZXZpY2UsIGludCBtb2RlLAorCQkJICAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGUpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc2lucHV0ID0gTlVMTCwgKnNvdXRwdXQgPSBOVUxMOworCWludCBlcnI7CisKKwlyZmlsZS0+aW5wdXQgPSByZmlsZS0+b3V0cHV0ID0gTlVMTDsKKwlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgeworCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCisJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorCQkJCSAgICAgICBtb2RlLCAmc2lucHV0KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJfQorCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgeworCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCisJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKKwkJCQkgICAgICAgbW9kZSwgJnNvdXRwdXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisKKwlpZiAoc2lucHV0KSB7CisJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIG1vZGUpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisJaWYgKHNvdXRwdXQpIHsKKwkJZXJyID0gb3Blbl9zdWJzdHJlYW0ocm1pZGksIHNvdXRwdXQsIG1vZGUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKHNpbnB1dCkKKwkJCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHNpbnB1dCwgMCk7CisJCQlnb3RvIF9fZXJyb3I7CisJCX0KKwl9CisKKwlyZmlsZS0+cm1pZGkgPSBybWlkaTsKKwlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7CisJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7CisJcmV0dXJuIDA7CisKKyAgICAgIF9fZXJyb3I6CisJaWYgKHNpbnB1dCAmJiBzaW5wdXQtPnJ1bnRpbWUpCisJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOworCWlmIChzb3V0cHV0ICYmIHNvdXRwdXQtPnJ1bnRpbWUpCisJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCiBpbnQgc25kX3Jhd21pZGlfa2VybmVsX29wZW4oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLCBpbnQgc3ViZGV2aWNlLAogCQkJICAgIGludCBtb2RlLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqIHJmaWxlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDEsICpsaXN0MjsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzaW5wdXQgPSBOVUxMLCAqc291dHB1dCA9IE5VTEw7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3J1bnRpbWUgKmlucHV0ID0gTlVMTCwgKm91dHB1dCA9IE5VTEw7CiAJaW50IGVycjsKIAotCWlmIChyZmlsZSkKLQkJcmZpbGUtPmlucHV0ID0gcmZpbGUtPm91dHB1dCA9IE5VTEw7CisJaWYgKHNuZF9CVUdfT04oIXJmaWxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcm1pZGkgPSBzbmRfcmF3bWlkaV9zZWFyY2goY2FyZCwgZGV2aWNlKTsKLQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAocm1pZGkgPT0gTlVMTCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIF9fZXJyb3IxOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghdHJ5X21vZHVsZV9nZXQocm1pZGktPmNhcmQtPm1vZHVsZSkpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBfX2Vycm9yMTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJCXJldHVybiAtRU5YSU87CiAJfQotCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQlpZiAoIShybWlkaS0+aW5mb19mbGFncyAmIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCkpIHsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAoc3ViZGV2aWNlID49IDAgJiYgKHVuc2lnbmVkIGludClzdWJkZXZpY2UgPj0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAocm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQgPj0KLQkJICAgIHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQl9Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCkpIHsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAoc3ViZGV2aWNlID49IDAgJiYgKHVuc2lnbmVkIGludClzdWJkZXZpY2UgPj0gcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQkJaWYgKHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZCA+PQotCQkgICAgcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fY291bnQpIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KLQl9Ci0JbGlzdDEgPSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtcy5uZXh0OwotCXdoaWxlICgxKSB7Ci0JCWlmIChsaXN0MSA9PSAmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbXMpIHsKLQkJCXNpbnB1dCA9IE5VTEw7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgewotCQkJCWVyciA9IC1FQUdBSU47Ci0JCQkJZ290byBfX2Vycm9yOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJc2lucHV0ID0gbGlzdF9lbnRyeShsaXN0MSwgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7Ci0JCWlmICgobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkgJiYgc2lucHV0LT5vcGVuZWQpCi0JCQlnb3RvIF9fbmV4dGk7Ci0JCWlmIChzdWJkZXZpY2UgPCAwIHx8IChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPT0gc2lucHV0LT5udW1iZXIpKQotCQkJYnJlYWs7Ci0JICAgICAgX19uZXh0aToKLQkJbGlzdDEgPSBsaXN0MS0+bmV4dDsKLQl9Ci0JbGlzdDIgPSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMubmV4dDsKLQl3aGlsZSAoMSkgewotCQlpZiAobGlzdDIgPT0gJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcykgewotCQkJc291dHB1dCA9IE5VTEw7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJCQllcnIgPSAtRUFHQUlOOwotCQkJCWdvdG8gX19lcnJvcjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCXNvdXRwdXQgPSBsaXN0X2VudHJ5KGxpc3QyLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtLCBsaXN0KTsKLQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpIHsKLQkJCQlpZiAoc291dHB1dC0+b3BlbmVkICYmICFzb3V0cHV0LT5hcHBlbmQpCi0JCQkJCWdvdG8gX19uZXh0bzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHNvdXRwdXQtPm9wZW5lZCkKLQkJCQkJZ290byBfX25leHRvOwotCQkJfQotCQl9Ci0JCWlmIChzdWJkZXZpY2UgPCAwIHx8IChzdWJkZXZpY2UgPj0gMCAmJiBzdWJkZXZpY2UgPT0gc291dHB1dC0+bnVtYmVyKSkKLQkJCWJyZWFrOwotCSAgICAgIF9fbmV4dG86Ci0JCWxpc3QyID0gbGlzdDItPm5leHQ7Ci0JfQotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7Ci0JCWlmICgoZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc2lucHV0KSkgPCAwKQotCQkJZ290byBfX2Vycm9yOwotCQlpbnB1dCA9IHNpbnB1dC0+cnVudGltZTsKLQkJaWYgKChlcnIgPSBzaW5wdXQtPm9wcy0+b3BlbihzaW5wdXQpKSA8IDApCi0JCQlnb3RvIF9fZXJyb3I7Ci0JCXNpbnB1dC0+b3BlbmVkID0gMTsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQrKzsKLQl9IGVsc2UgewotCQlzaW5wdXQgPSBOVUxMOwotCX0KLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJaWYgKHNvdXRwdXQtPm9wZW5lZCkKLQkJCWdvdG8gX19za2lwX291dHB1dDsKLQkJaWYgKChlcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzb3V0cHV0KSkgPCAwKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkKLQkJCQlzaW5wdXQtPm9wcy0+Y2xvc2Uoc2lucHV0KTsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlvdXRwdXQgPSBzb3V0cHV0LT5ydW50aW1lOwotCQlpZiAoKGVyciA9IHNvdXRwdXQtPm9wcy0+b3Blbihzb3V0cHV0KSkgPCAwKSB7Ci0JCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19JTlBVVCkKLQkJCQlzaW5wdXQtPm9wcy0+Y2xvc2Uoc2lucHV0KTsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCSAgICAgIF9fc2tpcF9vdXRwdXQ6Ci0JCXNvdXRwdXQtPm9wZW5lZCA9IDE7Ci0JCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKLQkJCXNvdXRwdXQtPmFwcGVuZCA9IDE7Ci0JICAgICAgCWlmIChzb3V0cHV0LT51c2VfY291bnQrKyA9PSAwKQotCQkJc291dHB1dC0+YWN0aXZlX3NlbnNpbmcgPSAxOwotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9vcGVuZWQrKzsKLQl9IGVsc2UgewotCQlzb3V0cHV0ID0gTlVMTDsKLQl9Ci0JaWYgKCEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLKSkKLQkJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7Ci0JaWYgKHJmaWxlKSB7Ci0JCXJmaWxlLT5ybWlkaSA9IHJtaWRpOwotCQlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7Ci0JCXJmaWxlLT5vdXRwdXQgPSBzb3V0cHV0OwotCX0KLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAotICAgICAgX19lcnJvcjoKLQlpZiAoaW5wdXQgIT0gTlVMTCkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNpbnB1dCk7Ci0JaWYgKG91dHB1dCAhPSBOVUxMKQotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc291dHB1dCk7Ci0JbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKLQlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLSAgICAgIF9fZXJyb3IxOgorCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwllcnIgPSByYXdtaWRpX29wZW5fcHJpdihybWlkaSwgc3ViZGV2aWNlLCBtb2RlLCByZmlsZSk7CisJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJaWYgKGVyciA8IDApCisJCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzg1LDEwICszNzIsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCBmZmxhZ3M7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyYXdtaWRpX2ZpbGU7CisJc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJhd21pZGlfZmlsZSA9IE5VTEw7CiAJd2FpdF9xdWV1ZV90IHdhaXQ7CiAJc3RydWN0IHNuZF9jdGxfZmlsZSAqa2N0bDsKIAorCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgCisJCXJldHVybiAtRUlOVkFMOwkJLyogaW52YWxpZCBjb21iaW5hdGlvbiAqLworCiAJaWYgKG1haiA9PSBzbmRfbWFqb3IpIHsKIAkJcm1pZGkgPSBzbmRfbG9va3VwX21pbm9yX2RhdGEoaW1pbm9yKGlub2RlKSwKIAkJCQkJICAgICAgU05EUlZfREVWSUNFX1RZUEVfUkFXTUlESSk7CkBAIC00MDIsMjQgKzM5MiwyNSBAQAogCiAJaWYgKHJtaWRpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgCi0JCXJldHVybiAtRUlOVkFMOwkJLyogaW52YWxpZCBjb21iaW5hdGlvbiAqLworCisJaWYgKCF0cnlfbW9kdWxlX2dldChybWlkaS0+Y2FyZC0+bW9kdWxlKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKIAljYXJkID0gcm1pZGktPmNhcmQ7CiAJZXJyID0gc25kX2NhcmRfZmlsZV9hZGQoY2FyZCwgZmlsZSk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIF9fZXJyb3JfY2FyZDsKIAlmZmxhZ3MgPSBzbmRfcmF3bWlkaV9maWxlX2ZsYWdzKGZpbGUpOwogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSB8fCBtYWogPT0gU09VTkRfTUFKT1IpIC8qIE9TUyBlbXVsPyAqLwogCQlmZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORDsKLQlmZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0s7CiAJcmF3bWlkaV9maWxlID0ga21hbGxvYyhzaXplb2YoKnJhd21pZGlfZmlsZSksIEdGUF9LRVJORUwpOwogCWlmIChyYXdtaWRpX2ZpbGUgPT0gTlVMTCkgewotCQlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gX19lcnJvcjsKIAl9CiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCXN1YmRldmljZSA9IC0xOwogCQlyZWFkX2xvY2soJmNhcmQtPmN0bF9maWxlc19yd2xvY2spOwpAQCAtNDMxLDggKzQyMiw3IEBACiAJCQl9CiAJCX0KIAkJcmVhZF91bmxvY2soJmNhcmQtPmN0bF9maWxlc19yd2xvY2spOwotCQllcnIgPSBzbmRfcmF3bWlkaV9rZXJuZWxfb3BlbihybWlkaS0+Y2FyZCwgcm1pZGktPmRldmljZSwKLQkJCQkJICAgICAgc3ViZGV2aWNlLCBmZmxhZ3MsIHJhd21pZGlfZmlsZSk7CisJCWVyciA9IHJhd21pZGlfb3Blbl9wcml2KHJtaWRpLCBzdWJkZXZpY2UsIGZmbGFncywgcmF3bWlkaV9maWxlKTsKIAkJaWYgKGVyciA+PSAwKQogCQkJYnJlYWs7CiAJCWlmIChlcnIgPT0gLUVBR0FJTikgewpAQCAtNDUxLDY3ICs0NDEsODkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7CisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWUocmF3bWlkaV9maWxlKTsKKwkJZ290byBfX2Vycm9yOworCX0KICNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKIAlpZiAocmF3bWlkaV9maWxlLT5pbnB1dCAmJiByYXdtaWRpX2ZpbGUtPmlucHV0LT5ydW50aW1lKQogCQlyYXdtaWRpX2ZpbGUtPmlucHV0LT5ydW50aW1lLT5vc3MgPSAobWFqID09IFNPVU5EX01BSk9SKTsKIAlpZiAocmF3bWlkaV9maWxlLT5vdXRwdXQgJiYgcmF3bWlkaV9maWxlLT5vdXRwdXQtPnJ1bnRpbWUpCiAJCXJhd21pZGlfZmlsZS0+b3V0cHV0LT5ydW50aW1lLT5vc3MgPSAobWFqID09IFNPVU5EX01BSk9SKTsKICNlbmRpZgotCXJlbW92ZV93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JaWYgKGVyciA+PSAwKSB7Ci0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJhd21pZGlfZmlsZTsKLQl9IGVsc2UgewotCQlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKLQkJa2ZyZWUocmF3bWlkaV9maWxlKTsKLQl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcmF3bWlkaV9maWxlOwogCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCXJldHVybiAwOworCisgX19lcnJvcjoKKwlzbmRfY2FyZF9maWxlX3JlbW92ZShjYXJkLCBmaWxlKTsKKyBfX2Vycm9yX2NhcmQ6CisJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2Uoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKiByZmlsZSkKK3N0YXRpYyB2b2lkIGNsb3NlX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLAorCQkJICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBpbnQgY2xlYW51cCkKIHsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfcnVudGltZSAqcnVudGltZTsKKwlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZC0tOworCWlmICgtLXN1YnN0cmVhbS0+dXNlX2NvdW50KQorCQlyZXR1cm47CiAKLQlpZiAoc25kX0JVR19PTighcmZpbGUpKQotCQlyZXR1cm4gLUVOWElPOwotCXJtaWRpID0gcmZpbGUtPnJtaWRpOwotCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAocmZpbGUtPmlucHV0ICE9IE5VTEwpIHsKLQkJc3Vic3RyZWFtID0gcmZpbGUtPmlucHV0OwotCQlyZmlsZS0+aW5wdXQgPSBOVUxMOwotCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCQlzbmRfcmF3bWlkaV9pbnB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7Ci0JCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQlpZiAocnVudGltZS0+cHJpdmF0ZV9mcmVlICE9IE5VTEwpCi0JCQlydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCXN1YnN0cmVhbS0+b3BlbmVkID0gMDsKLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9vcGVuZWQtLTsKLQl9Ci0JaWYgKHJmaWxlLT5vdXRwdXQgIT0gTlVMTCkgewotCQlzdWJzdHJlYW0gPSByZmlsZS0+b3V0cHV0OwotCQlyZmlsZS0+b3V0cHV0ID0gTlVMTDsKLQkJaWYgKC0tc3Vic3RyZWFtLT51c2VfY291bnQgPT0gMCkgewotCQkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpZiAoY2xlYW51cCkgeworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQpCisJCQlzbmRfcmF3bWlkaV9pbnB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7CisJCWVsc2UgewogCQkJaWYgKHN1YnN0cmVhbS0+YWN0aXZlX3NlbnNpbmcpIHsKIAkJCQl1bnNpZ25lZCBjaGFyIGJ1ZiA9IDB4ZmU7Ci0JCQkJLyogc2VuZGluZyBzaW5nbGUgYWN0aXZlIHNlbnNpbmcgbWVzc2FnZSB0byBzaHV0IHRoZSBkZXZpY2UgdXAgKi8KKwkJCQkvKiBzZW5kaW5nIHNpbmdsZSBhY3RpdmUgc2Vuc2luZyBtZXNzYWdlCisJCQkJICogdG8gc2h1dCB0aGUgZGV2aWNlIHVwCisJCQkJICovCiAJCQkJc25kX3Jhd21pZGlfa2VybmVsX3dyaXRlKHN1YnN0cmVhbSwgJmJ1ZiwgMSk7CiAJCQl9CiAJCQlpZiAoc25kX3Jhd21pZGlfZHJhaW5fb3V0cHV0KHN1YnN0cmVhbSkgPT0gLUVSRVNUQVJUU1lTKQogCQkJCXNuZF9yYXdtaWRpX291dHB1dF90cmlnZ2VyKHN1YnN0cmVhbSwgMCk7Ci0JCQlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKLQkJCWlmIChydW50aW1lLT5wcml2YXRlX2ZyZWUgIT0gTlVMTCkKLQkJCQlydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKLQkJCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzdWJzdHJlYW0pOwotCQkJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOwotCQkJc3Vic3RyZWFtLT5hcHBlbmQgPSAwOwogCQl9Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZC0tOwogCX0KKwlzdWJzdHJlYW0tPm9wcy0+Y2xvc2Uoc3Vic3RyZWFtKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2ZyZWUpCisJCXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9mcmVlKHN1YnN0cmVhbSk7CisJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7CisJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOworCXN1YnN0cmVhbS0+YXBwZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgcmF3bWlkaV9yZWxlYXNlX3ByaXYoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlybWlkaSA9IHJmaWxlLT5ybWlkaTsKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJaWYgKHJmaWxlLT5pbnB1dCkgeworCQljbG9zZV9zdWJzdHJlYW0ocm1pZGksIHJmaWxlLT5pbnB1dCwgMSk7CisJCXJmaWxlLT5pbnB1dCA9IE5VTEw7CisJfQorCWlmIChyZmlsZS0+b3V0cHV0KSB7CisJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgcmZpbGUtPm91dHB1dCwgMSk7CisJCXJmaWxlLT5vdXRwdXQgPSBOVUxMOworCX0KKwlyZmlsZS0+cm1pZGkgPSBOVUxMOwogCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCXdha2VfdXAoJnJtaWRpLT5vcGVuX3dhaXQpOworfQorCisvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCitpbnQgc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2Uoc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJmaWxlKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisKKwlpZiAoc25kX0JVR19PTighcmZpbGUpKQorCQlyZXR1cm4gLUVOWElPOworCQorCXJtaWRpID0gcmZpbGUtPnJtaWRpOworCXJhd21pZGlfcmVsZWFzZV9wcml2KHJmaWxlKTsKIAltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiAwOwogfQpAQCAtNTIwLDE1ICs1MzIsMTQgQEAKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGU7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlpbnQgZXJyOwogCiAJcmZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZXJyID0gc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2UocmZpbGUpOwogCXJtaWRpID0gcmZpbGUtPnJtaWRpOwotCXdha2VfdXAoJnJtaWRpLT5vcGVuX3dhaXQpOworCXJhd21pZGlfcmVsZWFzZV9wcml2KHJmaWxlKTsKIAlrZnJlZShyZmlsZSk7CiAJc25kX2NhcmRfZmlsZV9yZW1vdmUocm1pZGktPmNhcmQsIGZpbGUpOwotCXJldHVybiBlcnI7CisJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfcmF3bWlkaV9pbmZvKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX2RldmljZS5oIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKaW5kZXggYmY4ZDJiNC4uYzAxNTRhOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKKysrIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmgKQEAgLTE4MSw3ICsxODEsNyBAQAogLyogZm9yIGRlYnVnICovCiAjaWZkZWYgU05EUlZfU0VRX09TU19ERUJVRwogZXh0ZXJuIGludCBzZXFfb3NzX2RlYnVnOwotI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJZG8geyBpZiAoc2VxX29zc19kZWJ1ZyA+IDApIHNuZF9wcmludGsgeDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfcHJpbnRrKHgpCWRvIHsgaWYgKHNlcV9vc3NfZGVidWcgPiAwKSBzbmRfcHJpbnRkIHg7IH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJLyoqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfcHJpb3EuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCmluZGV4IDAxMDFhOGIuLjI5ODk2YWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jCkBAIC0zMjEsNyArMzIxLDggQEAKIAkJCWZyZWVwcmV2ID0gY2VsbDsKIAkJfSBlbHNlIHsKICNpZiAwCi0JCQlwcmludGsoInR5cGUgPSAlaSwgc291cmNlID0gJWksIGRlc3QgPSAlaSwgY2xpZW50ID0gJWlcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAidHlwZSA9ICVpLCBzb3VyY2UgPSAlaSwgZGVzdCA9ICVpLCAiCisJCQkgICAgICAgImNsaWVudCA9ICVpXG4iLAogCQkJCWNlbGwtPmV2ZW50LnR5cGUsCiAJCQkJY2VsbC0+ZXZlbnQuc291cmNlLmNsaWVudCwKIAkJCQljZWxsLT5ldmVudC5kZXN0LmNsaWVudCwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdGltZXIuYyBiL3NvdW5kL2NvcmUvdGltZXIuYwppbmRleCA3OTY1MzIwLi4zZjAwNTBkIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3RpbWVyLmMKKysrIGIvc291bmQvY29yZS90aW1lci5jCkBAIC0xODI1LDEzICsxODI1LDkgQEAKIHN0YXRpYyBpbnQgc25kX3RpbWVyX3VzZXJfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKiBmaWxlLCBpbnQgb24pCiB7CiAJc3RydWN0IHNuZF90aW1lcl91c2VyICp0dTsKLQlpbnQgZXJyOwogCiAJdHUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZXJyID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZ0dS0+ZmFzeW5jKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdHUtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNuZF90aW1lcl91c2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYyBiL3NvdW5kL2NvcmUvdm1hc3Rlci5jCmluZGV4IDRjYzU3ZjkuLjI1NzYyNGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvdm1hc3Rlci5jCisrKyBiL3NvdW5kL2NvcmUvdm1hc3Rlci5jCkBAIC01MCwxOCArNTAsMzggQEAKIAlzdHJ1Y3QgbGlua19tYXN0ZXIgKm1hc3RlcjsKIAlzdHJ1Y3QgbGlua19jdGxfaW5mbyBpbmZvOwogCWludCB2YWxzWzJdOwkJLyogY3VycmVudCB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJc3RydWN0IHNuZF9rY29udHJvbCBzbGF2ZTsgLyogdGhlIGNvcHkgb2Ygb3JpZ2luYWwgY29udHJvbCBlbnRyeSAqLwogfTsKIAorc3RhdGljIGludCBzbGF2ZV91cGRhdGUoc3RydWN0IGxpbmtfc2xhdmUgKnNsYXZlKQoreworCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjdGw7CisJaW50IGVyciwgY2g7CisKKwl1Y3RsID0ga21hbGxvYyhzaXplb2YoKnVjdGwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVjdGwpCisJCXJldHVybiAtRU5PTUVNOworCXVjdGwtPmlkID0gc2xhdmUtPnNsYXZlLmlkOworCWVyciA9IHNsYXZlLT5zbGF2ZS5nZXQoJnNsYXZlLT5zbGF2ZSwgdWN0bCk7CisJZm9yIChjaCA9IDA7IGNoIDwgc2xhdmUtPmluZm8uY291bnQ7IGNoKyspCisJCXNsYXZlLT52YWxzW2NoXSA9IHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbY2hdOworCWtmcmVlKHVjdGwpOworCXJldHVybiAwOworfQorCiAvKiBnZXQgdGhlIHNsYXZlIGN0bCBpbmZvIGFuZCBzYXZlIHRoZSBpbml0aWFsIHZhbHVlcyAqLwogc3RhdGljIGludCBzbGF2ZV9pbml0KHN0cnVjdCBsaW5rX3NsYXZlICpzbGF2ZSkKIHsKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvOwotCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjdGw7Ci0JaW50IGVyciwgY2g7CisJaW50IGVycjsKIAotCWlmIChzbGF2ZS0+aW5mby5jb3VudCkKLQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwlpZiAoc2xhdmUtPmluZm8uY291bnQpIHsKKwkJLyogYWxyZWFkeSBpbml0aWFsaXplZCAqLworCQlpZiAoc2xhdmUtPmZsYWdzICYgU05EX0NUTF9TTEFWRV9ORUVEX1VQREFURSkKKwkJCXJldHVybiBzbGF2ZV91cGRhdGUoc2xhdmUpOworCQlyZXR1cm4gMDsKKwl9CiAKIAl1aW5mbyA9IGttYWxsb2Moc2l6ZW9mKCp1aW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghdWluZm8pCkBAIC04NSwxNSArMTA1LDcgQEAKIAlzbGF2ZS0+aW5mby5tYXhfdmFsID0gdWluZm8tPnZhbHVlLmludGVnZXIubWF4OwogCWtmcmVlKHVpbmZvKTsKIAotCXVjdGwgPSBrbWFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOwotCWlmICghdWN0bCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdWN0bC0+aWQgPSBzbGF2ZS0+c2xhdmUuaWQ7Ci0JZXJyID0gc2xhdmUtPnNsYXZlLmdldCgmc2xhdmUtPnNsYXZlLCB1Y3RsKTsKLQlmb3IgKGNoID0gMDsgY2ggPCBzbGF2ZS0+aW5mby5jb3VudDsgY2grKykKLQkJc2xhdmUtPnZhbHNbY2hdID0gdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjaF07Ci0Ja2ZyZWUodWN0bCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNsYXZlX3VwZGF0ZShzbGF2ZSk7CiB9CiAKIC8qIGluaXRpYWxpemUgbWFzdGVyIHZvbHVtZSAqLwpAQCAtMjI5LDcgKzI0MSw4IEBACiAgKiAtIGxvZ2FyaXRobWljIHZvbHVtZSBjb250cm9sIChkQiBsZXZlbCksIG5vIGxpbmVhciB2b2x1bWUKICAqIC0gbWFzdGVyIGNhbiBvbmx5IGF0dGVudWF0ZSB0aGUgdm9sdW1lLCBubyBnYWluCiAgKi8KLWludCBzbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlKQoraW50IF9zbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBsaW5rX21hc3RlciAqbWFzdGVyX2xpbmsgPSBzbmRfa2NvbnRyb2xfY2hpcChtYXN0ZXIpOwogCXN0cnVjdCBsaW5rX3NsYXZlICpzcmVjOwpAQCAtMjQxLDYgKzI1NCw3IEBACiAJc3JlYy0+c2xhdmUgPSAqc2xhdmU7CiAJbWVtY3B5KHNyZWMtPnNsYXZlLnZkLCBzbGF2ZS0+dmQsIHNsYXZlLT5jb3VudCAqIHNpemVvZigqc2xhdmUtPnZkKSk7CiAJc3JlYy0+bWFzdGVyID0gbWFzdGVyX2xpbms7CisJc3JlYy0+ZmxhZ3MgPSBmbGFnczsKIAogCS8qIG92ZXJyaWRlIGNhbGxiYWNrcyAqLwogCXNsYXZlLT5pbmZvID0gc2xhdmVfaW5mbzsKQEAgLTI1NCw4ICsyNjgsNyBAQAogCWxpc3RfYWRkX3RhaWwoJnNyZWMtPmxpc3QsICZtYXN0ZXJfbGluay0+c2xhdmVzKTsKIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTChzbmRfY3RsX2FkZF9zbGF2ZSk7CitFWFBPUlRfU1lNQk9MKF9zbmRfY3RsX2FkZF9zbGF2ZSk7CiAKIC8qCiAgKiBjdGwgY2FsbGJhY2tzIGZvciBtYXN0ZXIgY29udHJvbHMKQEAgLTMyNyw4ICszNDAsMjAgQEAKIH0KIAogCi0vKgotICogQ3JlYXRlIGEgdmlydHVhbCBtYXN0ZXIgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lCisvKioKKyAqIHNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlciAtIENyZWF0ZSBhIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wKKyAqIEBuYW1lOiBuYW1lIHN0cmluZyBvZiB0aGUgY29udHJvbCBlbGVtZW50IHRvIGNyZWF0ZQorICogQHRsdjogb3B0aW9uYWwgVExWIGludCBhcnJheSBmb3IgZEIgaW5mb3JtYXRpb24KKyAqCisgKiBDcmVhdGVzIGEgdmlydHVhbCBtYXRzdGVyIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBzdHJpbmcuCisgKiBSZXR1cm5zIHRoZSBjcmVhdGVkIGNvbnRyb2wgZWxlbWVudCwgb3IgTlVMTCBmb3IgZXJyb3JzIChFTk9NRU0pLgorICoKKyAqIEFmdGVyIGNyZWF0aW5nIGEgdm1hc3RlciBlbGVtZW50LCB5b3UgY2FuIGFkZCB0aGUgc2xhdmUgY29udHJvbHMKKyAqIHZpYSBzbmRfY3RsX2FkZF9zbGF2ZSgpIG9yIHNuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkKCkuCisgKgorICogVGhlIG9wdGlvbmFsIGFyZ3VtZW50IEB0bHYgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgVExWIGluZm9ybWF0aW9uCisgKiBmb3IgZEIgc2NhbGUgb2YgdGhlIG1hc3RlciBjb250cm9sLiAgSXQgc2hvdWxkIGJlIGEgc2luZ2xlIGVsZW1lbnQKKyAqIHdpdGggI1NORFJWX0NUTF9UTFZUX0RCX1NDQUxFIHR5cGUsIGFuZCBzaG91bGQgYmUgdGhlIG1heCAwZEIuCiAgKi8KIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcihjaGFyICpuYW1lLAogCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCAqdGx2KQpAQCAtMzY3LDUgKzM5Miw0IEBACiAKIAlyZXR1cm4ga2N0bDsKIH0KLQogRVhQT1JUX1NZTUJPTChzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9kdW1teS5jIGIvc291bmQvZHJpdmVycy9kdW1teS5jCmluZGV4IDczYmU3ZTEuLjU0MjM5ZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYworKysgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKQEAgLTU4OCwxMCArNTg4LDEwIEBACiAJaW50IGlkeCwgZXJyOwogCWludCBkZXYgPSBkZXZwdHItPmlkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9kdW1teSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2R1bW15KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWR1bW15ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWR1bW15LT5jYXJkID0gY2FyZDsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9QQ01fREVWSUNFUyAmJiBpZHggPCBwY21fZGV2c1tkZXZdOyBpZHgrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYyBiL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKaW5kZXggNzc4Mzg0My4uMTk1MGZmYyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYworKysgYi9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCkBAIC0xMjc5LDkgKzEyNzksOSBAQAogCWlmICghZW5hYmxlW2Rldl0pCiAJCXJldHVybiAtRU5PRU5UOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZXJyID0gc25kX21sNDAzX2FjOTdjcl9jcmVhdGUoY2FyZCwgcGZkZXYsICZtbDQwM19hYzk3Y3IpOwogCWlmIChlcnIgPCAwKSB7CiAJCVBERUJVRyhJTklUX0ZBSUxVUkUsICJwcm9iZSgpOiBjcmVhdGUgZmFpbGVkIVxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYyBiL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jCmluZGV4IDViOTk2ZjMuLjE0OWQwNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jCkBAIC03Myw5ICs3Myw5IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInRoZSB1YXJ0X2VudGVyIG9wdGlvbiBpcyBvYnNvbGV0ZTsgcmVtb3ZlIGl0XG4iKTsKIAogCSpyY2FyZCA9IE5VTEw7Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIk1QVS00MDEgVUFSVCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGNhcmQtPmRyaXZlcik7CiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0ICUjbHgsICIsIGNhcmQtPnNob3J0bmFtZSwgcG9ydFtkZXZdKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwppbmRleCA0OGI2NGU2Li4yZjhmMjk1IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210cGF2LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCkBAIC0zMDMsOCArMzAzLDEwIEBACiAKIAkJc25kX210cGF2X3NlbmRfYnl0ZShtdHBfY2FyZCwgMHhmNSk7CiAJCXNuZF9tdHBhdl9zZW5kX2J5dGUobXRwX2NhcmQsIHBvcnRwLT5od3BvcnQpOwotCQkvL3NuZF9wcmludGsoIm5ldyBvdXRwb3J0OiAweCV4XG4iLCAodW5zaWduZWQgaW50KSBwb3J0cC0+aHdwb3J0KTsKLQorCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm5ldyBvdXRwb3J0OiAweCV4XG4iLAorCQkJICAgKHVuc2lnbmVkIGludCkgcG9ydHAtPmh3cG9ydCk7CisJCSovCiAJCWlmICghKG91dGJ5dGUgJiAweDgwKSAmJiBwb3J0cC0+cnVubmluZ19zdGF0dXMpCiAJCQlzbmRfbXRwYXZfc2VuZF9ieXRlKG10cF9jYXJkLCBwb3J0cC0+cnVubmluZ19zdGF0dXMpOwogCX0KQEAgLTU0MCw3ICs1NDIsNyBAQAogCiAJdTggc2J5dCA9IHNuZF9tdHBhdl9nZXRyZWcobWNyZCwgU1JFRyk7CiAKLQkvL3ByaW50aygic25kX210cGF2X3JlYWRfYnl0ZXMoKSBzYnl0OiAweCV4XG4iLCBzYnl0KTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAic25kX210cGF2X3JlYWRfYnl0ZXMoKSBzYnl0OiAweCV4XG4iLCBzYnl0KTsgKi8KIAogCWlmICghKHNieXQgJiBTSUdTX0JZVEUpKQogCQlyZXR1cm47CkBAIC01ODUsMTIgKzU4NywxMiBAQAogc3RhdGljIGludCBfX2RldmluaXQgc25kX210cGF2X2dldF9JU0Eoc3RydWN0IG10cGF2ICogbWNhcmQpCiB7CiAJaWYgKChtY2FyZC0+cmVzX3BvcnQgPSByZXF1ZXN0X3JlZ2lvbihwb3J0LCAzLCAiTW90dU1UUEFWIE1JREkiKSkgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJNVFZBUCBwb3J0IDB4JWx4IGlzIGJ1c3lcbiIsIHBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJNVFZBUCBwb3J0IDB4JWx4IGlzIGJ1c3lcbiIsIHBvcnQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAltY2FyZC0+cG9ydCA9IHBvcnQ7CiAJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX210cGF2X2lycWgsIElSUUZfRElTQUJMRUQsICJNT1RVIE1UUEFWIiwgbWNhcmQpKSB7Ci0JCXNuZF9wcmludGsoIk1UVkFQIElSUSAlZCBidXN5XG4iLCBpcnEpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJNVFZBUCBJUlEgJWQgYnVzeVxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJbWNhcmQtPmlycSA9IGlycTsKQEAgLTY5Niw5ICs2OTgsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IG10cGF2ICptdHBfY2FyZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCptdHBfY2FyZCkpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2YoKm10cF9jYXJkKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJbXRwX2NhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJc3Bpbl9sb2NrX2luaXQoJm10cF9jYXJkLT5zcGlubG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL210czY0LmMgYi9zb3VuZC9kcml2ZXJzL210czY0LmMKaW5kZXggODdiYTFkZC4uOTI4NDgyOSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tdHM2NC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbXRzNjQuYwpAQCAtOTU3LDEwICs5NTcsMTAgQEAKIAlpZiAoKGVyciA9IHNuZF9tdHM2NF9wcm9iZV9wb3J0KHApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ZCgiQ2Fubm90IGNyZWF0ZSBjYXJkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCXN0cmNweShjYXJkLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiRVNJICIgQ0FSRF9OQU1FKTsKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAJCWdvdG8gX19lcnI7CiAJfQogCi0Jc25kX3ByaW50aygiRVNJIE1pZGl0ZXJtaW5hbCA0MTQwIG9uIDB4JWx4XG4iLCBwLT5iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRVNJIE1pZGl0ZXJtaW5hbCA0MTQwIG9uIDB4JWx4XG4iLCBwLT5iYXNlKTsKIAlyZXR1cm4gMDsKIAogX19lcnI6CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX2xpYi5jCmluZGV4IDc4MDU4MjMuLjZlMzFlNDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX2xpYi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX2xpYi5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAlvcGwzID0gaHctPnByaXZhdGVfZGF0YTsKIAlzdGF0dXMgPSBpbmIob3BsMy0+bF9wb3J0KTsKICNpZiAwCi0Jc25kX3ByaW50aygiQWRMaWIgSVJRIHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJBZExpYiBJUlEgc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKICNlbmRpZgogCWlmICghKHN0YXR1cyAmIDB4ODApKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKaW5kZXggMTZmZWFmYS4uNmU3ZDA5YSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJaW50IGk7CiAJY2hhciAqc3RyID0gInguMjQiOwogCi0JcHJpbnRrKCJ0aW1lICUuNWk6ICVzIFslLjJpXTogIiwgb3BsMy0+dXNlX3RpbWUsIHMsIHZvaWNlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidGltZSAlLjVpOiAlcyBbJS4yaV06ICIsIG9wbDMtPnVzZV90aW1lLCBzLCB2b2ljZSk7CiAJZm9yIChpID0gMDsgaSA8IG9wbDMtPm1heF92b2ljZXM7IGkrKykKIAkJcHJpbnRrKCIlYyIsICooc3RyICsgb3BsMy0+dm9pY2VzW2ldLnN0YXRlICsgMSkpOwogCXByaW50aygiXG4iKTsKQEAgLTIxOCw3ICsyMTgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBFTkQ7IGkrKykgewogCQlpZiAoYmVzdFtpXS52b2ljZSA+PSAwKSB7CiAjaWZkZWYgREVCVUdfQUxMT0MKLQkJCXByaW50aygiJXMgJWlvcCBhbGxvY2F0aW9uIG9uIHZvaWNlICVpXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzICVpb3AgYWxsb2NhdGlvbiBvbiB2b2ljZSAlaVxuIiwKIAkJCSAgICAgICBhbGxvY190eXBlW2ldLCBpbnN0cl80b3AgPyA0IDogMiwKIAkJCSAgICAgICBiZXN0W2ldLnZvaWNlKTsKICNlbmRpZgpAQCAtMzE3LDcgKzMxNyw3IEBACiAJb3BsMyA9IHA7CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiTm90ZSBvbiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWksIHZlbCAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIk5vdGUgb24sIGNoICVpLCBpbnN0ICVpLCBub3RlICVpLCB2ZWwgJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtLCBub3RlLCB2ZWwpOwogI2VuZGlmCiAKQEAgLTM3Miw3ICszNzIsNyBAQAogCQlyZXR1cm47CiAJfQogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiBPUEwlaSBpbnN0cnVtZW50OiAlc1xuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IE9QTCVpIGluc3RydW1lbnQ6ICVzXG4iLAogCQkgICBpbnN0cl80b3AgPyAzIDogMiwgcGF0Y2gtPm5hbWUpOwogI2VuZGlmCiAJLyogaW4gU1lOVEggbW9kZSwgYXBwbGljYXRpb24gdGFrZXMgY2FyZSBvZiB2b2ljZXMgKi8KQEAgLTQzMSw3ICs0MzEsNyBAQAogCX0KIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiBzZXR0aW5nIE9QTDMgY29ubmVjdGlvbjogMHgleFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IHNldHRpbmcgT1BMMyBjb25uZWN0aW9uOiAweCV4XG4iLAogCQkgICBvcGwzLT5jb25uZWN0aW9uX3JlZyk7CiAjZW5kaWYKIAkvKgpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJLyogUHJvZ3JhbSB0aGUgRk0gdm9pY2UgY2hhcmFjdGVyaXN0aWNzICovCiAJZm9yIChpID0gMDsgaSA8IChpbnN0cl80b3AgPyA0IDogMik7IGkrKykgewogI2lmZGVmIERFQlVHX01JREkKLQkJc25kX3ByaW50aygiICAtLT4gcHJvZ3JhbW1pbmcgb3BlcmF0b3IgJWlcbiIsIGkpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IHByb2dyYW1taW5nIG9wZXJhdG9yICVpXG4iLCBpKTsKICNlbmRpZgogCQlvcF9vZmZzZXQgPSBzbmRfb3BsM19yZWdtYXBbdm9pY2Vfb2Zmc2V0XVtpXTsKIApAQCAtNTQ2LDcgKzU0Niw3IEBACiAJYmxvY2tudW0gfD0gT1BMM19LRVlPTl9CSVQ7CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4gdHJpZ2dlciB2b2ljZSAlaVxuIiwgdm9pY2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4gdHJpZ2dlciB2b2ljZSAlaVxuIiwgdm9pY2UpOwogI2VuZGlmCiAJLyogU2V0IE9QTDMgS0VZT05fQkxPQ0sgcmVnaXN0ZXIgb2YgcmVxdWVzdGVkIHZvaWNlICovIAogCW9wbDNfcmVnID0gcmVnX3NpZGUgfCAoT1BMM19SRUdfS0VZT05fQkxPQ0sgKyB2b2ljZV9vZmZzZXQpOwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJCQlwcmcgPSBleHRyYV9wcmcgLSAxOwogCQl9CiAjaWZkZWYgREVCVUdfTUlESQotCQlzbmRfcHJpbnRrKCIgKioqIGFsbG9jYXRpbmcgZXh0cmEgcHJvZ3JhbVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICoqKiBhbGxvY2F0aW5nIGV4dHJhIHByb2dyYW1cbiIpOwogI2VuZGlmCiAJCWdvdG8gX19leHRyYV9wcmc7CiAJfQpAQCAtNjMzLDcgKzYzMyw3IEBACiAKIAkvKiBraWxsIHZvaWNlICovCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IGtpbGwgdm9pY2UgJWlcbiIsIHZvaWNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIiAgLS0+IGtpbGwgdm9pY2UgJWlcbiIsIHZvaWNlKTsKICNlbmRpZgogCW9wbDNfcmVnID0gcmVnX3NpZGUgfCAoT1BMM19SRUdfS0VZT05fQkxPQ0sgKyB2b2ljZV9vZmZzZXQpOwogCS8qIGNsZWFyIEtleSBPTiBiaXQgKi8KQEAgLTY3MCw3ICs2NzAsNyBAQAogCW9wbDMgPSBwOwogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIk5vdGUgb2ZmLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIk5vdGUgb2ZmLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0sIG5vdGUpOwogI2VuZGlmCiAKQEAgLTcwOSw3ICs3MDksNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIktleSBwcmVzc3VyZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiS2V5IHByZXNzdXJlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogfQpAQCAtNzIzLDcgKzcyMyw3IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiVGVybWluYXRlIG5vdGUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIlRlcm1pbmF0ZSBub3RlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCiAJCSAgIGNoYW4tPm51bWJlciwgY2hhbi0+bWlkaV9wcm9ncmFtKTsKICNlbmRpZgogfQpAQCAtODEyLDcgKzgxMiw3IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiQ29udHJvbGxlciwgVFlQRSA9ICVpLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJDb250cm9sbGVyLCBUWVBFID0gJWksIGNoIzogJWksIGluc3QjOiAlaVxuIiwKIAkJICAgdHlwZSwgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0pOwogI2VuZGlmCiAKQEAgLTg0OSw3ICs4NDksNyBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIk5SUE4sIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIk5SUE4sIGNoIzogJWksIGluc3QjOiAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0pOwogI2VuZGlmCiB9CkBAIC04NjQsNiArODY0LDYgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJTWVNFWFxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJTWVNFWFxuIik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMKaW5kZXggOWEyMjcxZC4uYTU0YjFkYyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMKQEAgLTIyMCwxNCArMjIwLDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvdW50IDwgKGludClzaXplb2Yoc2JpKSkgewotCQlzbmRfcHJpbnRrKCJGTSBFcnJvcjogUGF0Y2ggcmVjb3JkIHRvbyBzaG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkZNIEVycm9yOiBQYXRjaCByZWNvcmQgdG9vIHNob3J0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3B5X2Zyb21fdXNlcigmc2JpLCBidWYsIHNpemVvZihzYmkpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoc2JpLmNoYW5uZWwgPCAwIHx8IHNiaS5jaGFubmVsID49IFNCRk1fTUFYSU5TVFIpIHsKLQkJc25kX3ByaW50aygiRk0gRXJyb3I6IEludmFsaWQgaW5zdHJ1bWVudCBudW1iZXIgJWRcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkZNIEVycm9yOiBJbnZhbGlkIGluc3RydW1lbnQgbnVtYmVyICVkXG4iLAogCQkJICAgc2JpLmNoYW5uZWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNTQsNyArMjU0LDkgQEAKIAlvcGwzID0gYXJnLT5wcml2YXRlX2RhdGE7CiAJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBTTkRDVExfRk1fTE9BRF9JTlNUUjoKLQkJCXNuZF9wcmludGsoIk9QTDM6IE9ic29sZXRlIGlvY3RsKFNORENUTF9GTV9MT0FEX0lOU1RSKSB1c2VkLiBGaXggdGhlIHByb2dyYW0uXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIk9QTDM6ICIKKwkJCQkgICAiT2Jzb2xldGUgaW9jdGwoU05EQ1RMX0ZNX0xPQURfSU5TVFIpIHVzZWQuICIKKwkJCQkgICAiRml4IHRoZSBwcm9ncmFtLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQljYXNlIFNORENUTF9TWU5USF9NRU1BVkw6CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYwppbmRleCA5NjJiYjljLi42ZDU3YjY0NDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygidW5rbm93biBJT0NUTDogMHgleFxuIiwgY21kKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInVua25vd24gSU9DVEw6IDB4JXhcbiIsIGNtZCk7CiAjZW5kaWYKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYwppbmRleCBhNDA0OWViLi5iNjBjZWYyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAllbHNlCiAJCW1pbl9kaXYgPSBNQVhfRElWOwogI2lmIFBDU1BfREVCVUcKLQlwcmludGsoIlBDU1A6IGxwaj0lbGksIG1pbl9kaXY9JWksIHJlcz0lbGlcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDU1A6IGxwaj0lbGksIG1pbl9kaXY9JWksIHJlcz0lbGlcbiIsCiAJICAgICAgIGxvb3BzX3Blcl9qaWZmeSwgbWluX2RpdiwgdHAudHZfbnNlYyk7CiAjZW5kaWYKIApAQCAtOTgsOSArOTgsOSBAQAogCWhydGltZXJfaW5pdCgmcGNzcF9jaGlwLnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCXBjc3BfY2hpcC50aW1lci5mdW5jdGlvbiA9IHBjc3BfZG9fdGltZXI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9wY3NwX2NyZWF0ZShjYXJkKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMgYi9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYwppbmRleCBiMWMwNDdlLi42MDE1OGUyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYworKysgYi9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYwpAQCAtNzQ2LDEwICs3NDYsMTAgQEAKIAlpZiAoKGVyciA9IHNuZF9wb3J0bWFuX3Byb2JlX3BvcnQocCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRkKCJDYW5ub3QgY3JlYXRlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIENBUkRfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCmluZGV4IGQ4YWFiOWQuLmIyYjZkNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCkBAIC0yNDEsNyArMjQxLDggQEAKIAkJCXNuZF9yYXdtaWRpX3JlY2VpdmUodWFydC0+bWlkaV9pbnB1dFtzdWJzdHJlYW1dLCAmYywgMSk7CiAKIAkJaWYgKHN0YXR1cyAmIFVBUlRfTFNSX09FKQotCQkJc25kX3ByaW50aygiJXM6IE92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiJXM6IE92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAogCQkJICAgICAgIHVhcnQtPnJtaWRpLT5uYW1lLCB1YXJ0LT5iYXNlKTsKIAl9CiAKQEAgLTYzNiw3ICs2MzcsOCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKCFzbmRfdWFydDE2NTUwX3dyaXRlX2J1ZmZlcih1YXJ0LCBtaWRpX2J5dGUpKSB7Ci0JCQlzbmRfcHJpbnRrKCIlczogQnVmZmVyIG92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiJXM6IEJ1ZmZlciBvdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKIAkJCQkgICB1YXJ0LT5ybWlkaS0+bmFtZSwgdWFydC0+YmFzZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtODE1LDcgKzgxNyw4IEBACiAJaWYgKGlycSA+PSAwICYmIGlycSAhPSBTTkRSVl9BVVRPX0lSUSkgewogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfdWFydDE2NTUwX2ludGVycnVwdCwKIAkJCQlJUlFGX0RJU0FCTEVELCAiU2VyaWFsIE1JREkiLCB1YXJ0KSkgewotCQkJc25kX3ByaW50aygiaXJxICVkIGJ1c3kuIFVzaW5nIFBvbGxpbmcuXG4iLCBpcnEpOworCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiaXJxICVkIGJ1c3kuIFVzaW5nIFBvbGxpbmcuXG4iLCBpcnEpOwogCQl9IGVsc2UgewogCQkJdWFydC0+aXJxID0gaXJxOwogCQl9CkBAIC05MTksMjYgKzkyMiwyOSBAQAogCWNhc2UgU05EUlZfU0VSSUFMX0dFTkVSSUM6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIkFkYXB0b3IgdHlwZSBpcyBvdXQgb2YgcmFuZ2UgMC0lZCAoJWQpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQWRhcHRvciB0eXBlIGlzIG91dCBvZiByYW5nZSAwLSVkICglZClcbiIsCiAJCQkgICBTTkRSVl9TRVJJQUxfTUFYX0FEQVBUT1IsIGFkYXB0b3JbZGV2XSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChvdXRzW2Rldl0gPCAxIHx8IG91dHNbZGV2XSA+IFNORFJWX1NFUklBTF9NQVhfT1VUUykgewotCQlzbmRfcHJpbnRrKCJDb3VudCBvZiBvdXRwdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJDb3VudCBvZiBvdXRwdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCiAJCQkgICBTTkRSVl9TRVJJQUxfTUFYX09VVFMsIG91dHNbZGV2XSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChpbnNbZGV2XSA8IDEgfHwgaW5zW2Rldl0gPiBTTkRSVl9TRVJJQUxfTUFYX0lOUykgewotCQlzbmRfcHJpbnRrKCJDb3VudCBvZiBpbnB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkNvdW50IG9mIGlucHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9JTlMsIGluc1tkZXZdKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2FyZCAgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciAgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTZXJpYWwiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU2VyaWFsIE1JREkgKFVBUlQxNjU1MEEpIik7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYyBiL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCmluZGV4IGY3OWUzNjEuLjBlNjMxYzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCkBAIC05MCwxNSArOTAsMTcgQEAKIAlpbnQgaWR4LCBlcnI7CiAJaW50IGRldiA9IGRldnB0ci0+aWQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAl2bWlkaSA9IChzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAl2bWlkaS0+Y2FyZCA9IGNhcmQ7CiAKIAlpZiAobWlkaV9kZXZzW2Rldl0gPiBNQVhfTUlESV9ERVZJQ0VTKSB7Ci0JCXNuZF9wcmludGsoInRvbyBtdWNoIG1pZGkgZGV2aWNlcyBmb3IgdmlybWlkaSAlZDogZm9yY2UgdG8gdXNlICVkXG4iLCBkZXYsIE1BWF9NSURJX0RFVklDRVMpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgInRvbyBtdWNoIG1pZGkgZGV2aWNlcyBmb3IgdmlybWlkaSAlZDogIgorCQkJICAgImZvcmNlIHRvIHVzZSAlZFxuIiwgZGV2LCBNQVhfTUlESV9ERVZJQ0VTKTsKIAkJbWlkaV9kZXZzW2Rldl0gPSBNQVhfTUlESV9ERVZJQ0VTOwogCX0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IG1pZGlfZGV2c1tkZXZdOyBpZHgrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYwppbmRleCAxNGUzMzU0Li4xOWM2ZTM3IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYwpAQCAtNjg4LDcgKzY4OCw4IEBACiAJCWltYWdlID0gZHNwLT5kYXRhICsgaTsKIAkJLyogV2FpdCBEU1AgcmVhZHkgZm9yIGEgbmV3IHJlYWQgKi8KIAkJaWYgKChlcnIgPSB2eF93YWl0X2lzcl9iaXQoY2hpcCwgSVNSX1RYX0VNUFRZKSkgPCAwKSB7Ci0JCQlwcmludGsoImRzcCBsb2FkaW5nIGVycm9yIGF0IHBvc2l0aW9uICVkXG4iLCBpKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJkc3AgbG9hZGluZyBlcnJvciBhdCBwb3NpdGlvbiAlZFxuIiwgaSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWNwdHIgPSBpbWFnZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwppbmRleCA4ZDYzNjJlLi40NmRmODgxIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCkBAIC0xMTksMTYgKzExOSw2IEBACiAKICNlbHNlIC8qIG9sZCBzdHlsZSBmaXJtd2FyZSBsb2FkaW5nICovCiAKLXN0YXRpYyBpbnQgdnhfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnhfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdnhfaHdkZXBfZHNwX3N0YXR1cyhzdHJ1Y3Qgc25kX2h3ZGVwICpodywKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKmluZm8pCiB7CkBAIC0yNDMsOCArMjMzLDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1ZYOwogCWh3LT5wcml2YXRlX2RhdGEgPSBjaGlwOwotCWh3LT5vcHMub3BlbiA9IHZ4X2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gdnhfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSB2eF9od2RlcF9kc3Bfc3RhdHVzOwogCWh3LT5vcHMuZHNwX2xvYWQgPSB2eF9od2RlcF9kc3BfbG9hZDsKIAlody0+ZXhjbHVzaXZlID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jCmluZGV4IDBlMWJhOWIuLmIwNTYwZmVjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogICogcmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIFVFUiwgb3IgMCBpZiBub3Qgc3luYywKICAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotc3RhdGljIGludCB2eF9yZWFkX3Vlcl9zdGF0dXMoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCAqbW9kZSkKK3N0YXRpYyBpbnQgdnhfcmVhZF91ZXJfc3RhdHVzKHN0cnVjdCB2eF9jb3JlICpjaGlwLCB1bnNpZ25lZCBpbnQgKm1vZGUpCiB7CiAJaW50IHZhbCwgZnJlcTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaTJjL01ha2VmaWxlIGIvc291bmQvaTJjL01ha2VmaWxlCmluZGV4IDM3OTcwNjY2Li4zNjg3OWJmIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvTWFrZWZpbGUKKysrIGIvc291bmQvaTJjL01ha2VmaWxlCkBAIC03LDggKzcsNiBAQAogc25kLWNzODQyNy1vYmpzIDo9IGNzODQyNy5vCiBzbmQtdGVhNjMzMHQtb2JqcyA6PSB0ZWE2MzMwdC5vCiAKLW9iai0kKENPTkZJR19MMykgKz0gbDMvCi0KIG9iai0kKENPTkZJR19TTkQpICs9IG90aGVyLwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvbDMvTWFrZWZpbGUgYi9zb3VuZC9pMmMvbDMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NDU1YjguLjAwMDAwMDAKLS0tIGEvc291bmQvaTJjL2wzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciBBTFNBCi0jCi0KLXNuZC11ZGExMzQxLW9ianMgOj0gdWRhMTM0MS5vCi0KLSMgTW9kdWxlIERlcGVuZGVuY3kKLW9iai0kKENPTkZJR19TTkRfU0ExMVhYX1VEQTEzNDEpICs9IHNuZC11ZGExMzQxLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMgYi9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQwZWI0Li4wMDAwMDAwCi0tLSBhL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzUgKzAsMCBAQAotLyoKLSAqIFBoaWxpcHMgVURBMTM0MSBtaXhlciBkZXZpY2UgZHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4KLSAqCi0gKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAyMDAwIExlcm5vdXQgJiBIYXVzcGllIFNwZWVjaCBQcm9kdWN0cywgTi5WLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIEhpc3Rvcnk6Ci0gKgotICogMjAwMi0wMy0xMyAgIFRvbWFzIEthc3BhcmVrICBpbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiB1ZGExMzQxLmMgZnJvbSBPU1MKLSAqIDIwMDItMDMtMjggICBUb21hcyBLYXNwYXJlayAgYmFzaWMgbWl4ZXIgaXMgd29ya2luZyAodm9sdW1lLCBiYXNzLCB0cmVibGUpCi0gKiAyMDAyLTAzLTMwICAgVG9tYXMgS2FzcGFyZWsgIHByb2MgZmlsZXN5c3RlbSBzdXBwb3J0LCBjb21wbGV0ZSBtaXhlciBhbmQgRFNQCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHN1cHBvcnQKLSAqIDIwMDItMDQtMTIJVG9tYXMgS2FzcGFyZWsJcHJvYyBpbnRlcmZhY2UgdXBkYXRlLCBjb2RlIGNsZWFudXAKLSAqIDIwMDItMDUtMTIgICBUb21hcyBLYXNwYXJlayAgYW5vdGhlciBjb2RlIGNsZWFudXAKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9sMy9sMy5oPgotCi0jaW5jbHVkZSA8c291bmQvdWRhMTM0MS5oPgotCi0vKiB7e3sgSFcgcmVncyBkZWZpbml0aW9uICovCi0KLSNkZWZpbmUgU1RBVDAgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBTVEFUMQkJCTB4ODAKLSNkZWZpbmUgU1RBVF9NQVNLICAgICAgICAgICAgICAgMHg4MAotCi0jZGVmaW5lIERBVEEwXzAJCQkweDAwCi0jZGVmaW5lIERBVEEwXzEJCQkweDQwCi0jZGVmaW5lIERBVEEwXzIJCQkweDgwCi0jZGVmaW5lIERBVEFfTUFTSyAgICAgICAgICAgICAgIDB4YzAKLQotI2RlZmluZSBJU19EQVRBMCh4KSAgICAgKCh4KSA+PSBkYXRhMF8wICYmICh4KSA8PSBkYXRhMF8yKQotI2RlZmluZSBJU19EQVRBMSh4KSAgICAgKCh4KSA9PSBkYXRhMSkKLSNkZWZpbmUgSVNfU1RBVFVTKHgpICAgICgoeCkgPT0gc3RhdDAgfHwgKHgpID09IHN0YXQxKQotI2RlZmluZSBJU19FWFRFTkQoeCkgICAoKHgpID49IGV4dDAgJiYgKHgpIDw9IGV4dDYpCi0KLS8qIH19fSAqLwotCi0KLXN0YXRpYyBjb25zdCBjaGFyICpwZWFrX25hbWVzW10gPSB7Ci0JImJlZm9yZSIsCi0JImFmdGVyIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpmaWx0ZXJfbmFtZXNbXSA9IHsKLQkiZmxhdCIsCi0JIm1pbiIsCi0JIm1pbiIsCi0JIm1heCIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqbWl4ZXJfbmFtZXNbXSA9IHsKLQkiZG91YmxlIGRpZmZlcmVudGlhbCIsCi0JImlucHV0IGNoYW5uZWwgMSAobGluZSBpbikiLAotCSJpbnB1dCBjaGFubmVsIDIgKG1pY3JvcGhvbmUpIiwKLQkiZGlnaXRhbCBtaXhlciIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZGVlbXBfbmFtZXNbXSA9IHsKLQkibm9uZSIsCi0JIjMyIGtIeiIsCi0JIjQ0LjEga0h6IiwKLQkiNDgga0h6IiwgICAgICAgIAotfTsKLQotZW51bSB1ZGExMzQxX3JlZ3NfbmFtZXMgewotCXN0YXQwLAotCXN0YXQxLAotCWRhdGEwXzAsCi0JZGF0YTBfMSwKLQlkYXRhMF8yLAotCWRhdGExLAotCWV4dDAsCi0JZXh0MSwKLQlleHQyLAotCWVtcHR5LAotCWV4dDQsCi0JZXh0NSwKLQlleHQ2LAotCXVkYTEzNDFfcmVnX2xhc3QsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqdWRhMTM0MV9yZWdfbmFtZXNbXSA9IHsKLQkic3RhdCAwICIsCi0JInN0YXQgMSAiLAotCSJkYXRhIDAwIiwKLQkiZGF0YSAwMSIsCi0JImRhdGEgMDIiLAotCSJkYXRhIDEgIiwKLQkiZXh0IDAiLAotCSJleHQgMSIsCi0JImV4dCAyIiwKLQkiZW1wdHkiLAotCSJleHQgNCIsCi0JImV4dCA1IiwKLQkiZXh0IDYiLAotfTsKLQotc3RhdGljIGNvbnN0IGludCB1ZGExMzQxX2VudW1faXRlbXNbXSA9IHsKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCTIsIC8vcGVhayAtIGJlZm9yZS9hZnRlcgotCTQsIC8vZGVlbXAgLSBub25lLzMyLzQ0LjEvNDgKLQkwLAotCTQsIC8vZmlsdGVyIC0gZmxhdC9taW4vbWluL21heAotCTAsIDAsIDAsCi0JNCwgLy9taXhlciAtIGRpZmZlci9saW5lL21pYy9taXhlcgotCTAsIDAsIDAsIDAsIDAsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqKiB1ZGExMzQxX2VudW1fbmFtZXNbXSA9IHsKLQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotCXBlYWtfbmFtZXMsIC8vcGVhayAtIGJlZm9yZS9hZnRlcgotCWRlZW1wX25hbWVzLCAvL2RlZW1wIC0gbm9uZS8zMi80NC4xLzQ4Ci0JTlVMTCwKLQlmaWx0ZXJfbmFtZXMsIC8vZmlsdGVyIC0gZmxhdC9taW4vbWluL21heAotCU5VTEwsIE5VTEwsIE5VTEwsCi0JbWl4ZXJfbmFtZXMsIC8vbWl4ZXIgLSBkaWZmZXIvbGluZS9taWMvbWl4ZXIKLQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotfTsKLQotdHlwZWRlZiBpbnQgdWRhMTM0MV9jZmdbQ01EX0xBU1RdOwotCi1zdHJ1Y3QgdWRhMTM0MSB7Ci0JaW50ICgqd3JpdGUpIChzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxLCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCk7Ci0JaW50ICgqcmVhZCkgKHN0cnVjdCBsM19jbGllbnQgKnVkYTEzNDEsIHVuc2lnbmVkIHNob3J0IHJlZyk7ICAgICAgICAKLQl1bnNpZ25lZCBjaGFyIHJlZ3NbdWRhMTM0MV9yZWdfbGFzdF07Ci0JaW50IGFjdGl2ZTsKLQlzcGlubG9ja190IHJlZ19sb2NrOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQl1ZGExMzQxX2NmZyBjZmc7Ci0jaWZkZWYgQ09ORklHX1BNCi0JdW5zaWduZWQgY2hhciBzdXNwZW5kX3JlZ3NbdWRhMTM0MV9yZWdfbGFzdF07Ci0JdWRhMTM0MV9jZmcgc3VzcGVuZF9jZmc7Ci0jZW5kaWYKLX07Ci0KLS8qIHRyYW5zZmVyIDhiaXQgaW50ZWdlciBpbnRvIHN0cmluZyB3aXRoIGJpbmFyeSByZXByZXNlbnRhdGlvbiAqLwotc3RhdGljIHZvaWQgaW50MnN0cl9iaW44KHVpbnQ4X3QgdmFsLCBjaGFyICpidWYpCi17Ci0JY29uc3QgaW50IHNpemUgPSBzaXplb2YodmFsKSAqIDg7Ci0JaW50IGk7Ci0KLQlmb3IgKGk9IDA7IGkgPCBzaXplOyBpKyspewotCQkqKGJ1ZisrKSA9ICh2YWwgPj4gKHNpemUgLSAxKSkgPyAnMScgOiAnMCc7Ci0JCXZhbCA8PD0gMTsKLQl9Ci0JKmJ1ZiA9ICdcMCc7IC8vZW5kIHRoZSBzdHJpbmcgd2l0aCB6ZXJvCi19Ci0KLS8qIHt7eyBIVyBtYW5pcHVsYXRpb24gcm91dGluZXMgKi8KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9jb2RlY193cml0ZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgY2hhciBidWZbMl0gPSB7IDB4YzAsIDB4ZTAgfTsgLy8gZm9yIEVYVCBhZGRyZXNzaW5nCi0JaW50IGVyciA9IDA7Ci0KLQl1ZGEtPnJlZ3NbcmVnXSA9IHZhbDsKLQotCWlmICh1ZGEtPmFjdGl2ZSkgewotCQlpZiAoSVNfREFUQTAocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9EQVRBMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKLQkJfSBlbHNlIGlmIChJU19EQVRBMShyZWcpKSB7Ci0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX0RBVEExLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOwotCQl9IGVsc2UgaWYgKElTX1NUQVRVUyhyZWcpKSB7Ci0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX1NUQVRVUywgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKLQkJfSBlbHNlIGlmIChJU19FWFRFTkQocmVnKSkgewotCQkJYnVmWzBdIHw9IChyZWcgLSBleHQwKSAmIDB4NzsgICAvL0VYVCBhZGRyZXNzCi0JCQlidWZbMV0gfD0gdmFsOyAgICAgICAgICAgICAgICAgIC8vRVhUIGRhdGEKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfREFUQTAsIChjb25zdCB1bnNpZ25lZCBjaGFyICopYnVmLCAyKTsKLQkJfQotCX0gZWxzZQotCQlwcmludGsoS0VSTl9FUlIgIlVEQTEzNDEgY29kZWMgbm90IGFjdGl2ZSFcbiIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfY29kZWNfcmVhZChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JdW5zaWduZWQgY2hhciB2YWw7Ci0JaW50IGVycjsKLQotCWVyciA9IGwzX3JlYWQoY2xudCwgcmVnLCAmdmFsLCAxKTsKLQlpZiAoZXJyID09IDEpCi0JCS8vIHVzZSBqdXN0IDZiaXRzIC0gdGhlIHJlc3QgaXMgYWRkcmVzcyBvZiB0aGUgcmVnCi0JCXJldHVybiB2YWwgJiA2MzsKLQlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IC1FSU87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNuZF91ZGExMzQxX3ZhbGlkX3JlZyhzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JcmV0dXJuIHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnLAotCQkJCSAgIHVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHNoaWZ0LAotCQkJCSAgIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBpbnQgZmx1c2gpCi17Ci0JaW50IGNoYW5nZTsKLQl1bnNpZ25lZCBzaG9ydCBvbGQsIG5ldzsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgInVwZGF0ZV9iaXRzOiByZWc6ICVzIG1hc2s6ICVkIHNoaWZ0OiAlZCB2YWw6ICVkXG4iLAotCSAgICAgICB1ZGExMzQxX3JlZ19uYW1lc1tyZWddLCBtYXNrLCBzaGlmdCwgdmFsdWUpOwotI2VuZGlmCi0gICAgICAgIAotCWlmICghc25kX3VkYTEzNDFfdmFsaWRfcmVnKGNsbnQsIHJlZykpCi0JCXJldHVybiAtRUlOVkFMOwotCXNwaW5fbG9jaygmdWRhLT5yZWdfbG9jayk7Ci0Jb2xkID0gdWRhLT5yZWdzW3JlZ107Ci0JbmV3ID0gKG9sZCAmIH4obWFzayA8PCBzaGlmdCkpIHwgKHZhbHVlIDw8IHNoaWZ0KTsKLQljaGFuZ2UgPSBvbGQgIT0gbmV3OwotCWlmIChjaGFuZ2UpIHsKLQkJaWYgKGZsdXNoKSB1ZGEtPndyaXRlKGNsbnQsIHJlZywgbmV3KTsKLQkJdWRhLT5yZWdzW3JlZ10gPSBuZXc7Ci0JfQotCXNwaW5fdW5sb2NrKCZ1ZGEtPnJlZ19sb2NrKTsKLQlyZXR1cm4gY2hhbmdlOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2NmZ193cml0ZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCB3aGF0LAotCQkJCSB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgaW50IGZsdXNoKQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgcmV0ID0gMDsKLSNpZmRlZiBDT05GSUdfUE0KLQlpbnQgcmVnOwotI2VuZGlmCi0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgImNmZ193cml0ZSB3aGF0OiAlZCB2YWx1ZTogJWRcbiIsIHdoYXQsIHZhbHVlKTsKLSNlbmRpZgotCi0JdWRhLT5jZmdbd2hhdF0gPSB2YWx1ZTsKLSAgICAgICAgCi0Jc3dpdGNoKHdoYXQpIHsKLQljYXNlIENNRF9SRVNFVDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMSwgMiwgMSwgZmx1c2gpOwkvLyBNVVRFCi0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCAxLCA2LCAxLCBmbHVzaCk7CS8vIFJFU0VUCi0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCAxLCA2LCAwLCBmbHVzaCk7CS8vIFJFU1RPUkUKLQkJdWRhLT5jZmdbQ01EX1JFU0VUXT0wOwotCQlicmVhazsKLQljYXNlIENNRF9GUzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDMsIDQsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0ZPUk1BVDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDcsIDEsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX09HQUlOOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgNiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfSUdBSU46Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCA1LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9EQUM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BREM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCAxLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9WT0xVTUU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzAsIDYzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9CQVNTOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8xLCAxNSwgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfVFJFQkJMRToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMSwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfUEVBSzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMSwgNSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfREVFTVA6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDMsIDMsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX01VVEU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0ZJTFRFUjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQ0gxOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQwLCAzMSwgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQ0gyOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQxLCAzMSwgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfTUlDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQyLCA3LCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9NSVhFUjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MiwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQUdDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ0LCAxLCA0LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9JRzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NCwgMywgMCwgdmFsdWUgJiAweDMsIGZsdXNoKTsKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NSwgMzEsIDAsIHZhbHVlID4+IDIsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQUdDX1RJTUU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDYsIDcsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQ19MRVZFTDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NiwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1BNCQkKLQljYXNlIENNRF9TVVNQRU5EOgotCQlmb3IgKHJlZyA9IHN0YXQwOyByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OyByZWcrKykKLQkJCXVkYS0+c3VzcGVuZF9yZWdzW3JlZ10gPSB1ZGEtPnJlZ3NbcmVnXTsKLQkJZm9yIChyZWcgPSAwOyByZWcgPCBDTURfTEFTVDsgcmVnKyspCi0JCQl1ZGEtPnN1c3BlbmRfY2ZnW3JlZ10gPSB1ZGEtPmNmZ1tyZWddOwotCQlicmVhazsKLQljYXNlIENNRF9SRVNVTUU6Ci0JCWZvciAocmVnID0gc3RhdDA7IHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7IHJlZysrKQotCQkJc25kX3VkYTEzNDFfY29kZWNfd3JpdGUoY2xudCwgcmVnLCB1ZGEtPnN1c3BlbmRfcmVnc1tyZWddKTsKLQkJZm9yIChyZWcgPSAwOyByZWcgPCBDTURfTEFTVDsgcmVnKyspCi0JCQl1ZGEtPmNmZ1tyZWddID0gdWRhLT5zdXNwZW5kX2NmZ1tyZWddOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLSAgICAgICAgICAgICAgICAKLQlpZiAoIXVkYS0+YWN0aXZlKQotCQlwcmludGsoS0VSTl9FUlIgIlVEQTEzNDEgY29kZWMgbm90IGFjdGl2ZSFcbiIpOyAgICAgICAgICAgICAgICAKLQlyZXR1cm4gcmV0OwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFByb2MgaW50ZXJmYWNlICovCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQotc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9uYW1lc1tdID0gewotCSJJMlMtYnVzIiwKLQkiTFNCIDE2Yml0cyIsCi0JIkxTQiAxOGJpdHMiLAotCSJMU0IgMjBiaXRzIiwKLQkiTVNCIiwKLQkiaW4gTFNCIDE2Yml0cy9vdXQgTVNCIiwKLQkiaW4gTFNCIDE4Yml0cy9vdXQgTVNCIiwKLQkiaW4gTFNCIDIwYml0cy9vdXQgTVNCIiwgICAgICAgIAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmZzX25hbWVzW10gPSB7Ci0JIjUxMipmcyIsCi0JIjM4NCpmcyIsCi0JIjI1NipmcyIsCi0JIlVudXNlZCAtIGJhZCB2YWx1ZSEiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGJhc3NfdmFsdWVzW11bMTZdID0gewotCXsiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwKLQkgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAidW5kZWZpbmVkIiwgfSwgLy9mbGF0Ci0JeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMTggZEIiLAotCSAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtaW4KLQl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIxOCBkQiIsCi0JICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1pbgotCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjIwIGRCIiwKLQkgIjIyIGRCIiwgIjI0IGRCIiwgIjI0IGRCIiwgIjI0IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWF4Ci19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqbWljX3NlbnNfdmFsdWVbXSA9IHsKLQkiLTMgZEIiLCAiMCBkQiIsICIzIGRCIiwgIjkgZEIiLCAiMTUgZEIiLCAiMjEgZEIiLCAiMjcgZEIiLCAibm90IHVzZWQiLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFHQ19hdGltZVtdID0gewotCTExLCAxNiwgMTEsIDE2LCAyMSwgMTEsIDE2LCAyMSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBBR0NfZHRpbWVbXSA9IHsKLQkxMDAsIDEwMCwgMjAwLCAyMDAsIDIwMCwgNDAwLCA0MDAsIDQwMCwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpBR0NfbGV2ZWxbXSA9IHsKLQkiLTkuMCIsICItMTEuNSIsICItMTUuMCIsICItMTcuNSIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqaWdfc21hbGxfdmFsdWVbXSA9IHsKLQkiLTMuMCIsICItMi41IiwgIi0yLjAiLCAiLTEuNSIsICItMS4wIiwgIi0wLjUiLAotfTsKLQotLyoKLSAqIHRoaXMgd2FzIGNvbXB1dGVkIGFzIHBlYWtfdmFsdWVbaV0gPSBwb3coKDYzLWkpKjEuNDIsMS4wMTMpCi0gKgotICogVURBMTM0MSBkYXRhc2hlZXQgb24gcGFnZSAyMTogUGVhayB2YWx1ZSAoZEIpID0gKFBlYWsgbGV2ZWwgLSA2My41KSo1KmxvZzIKLSAqIFRoZXJlIGlzIGFuIHRhYmxlIHdpdGggdGhlc2UgdmFsdWVzIFtsZXZlbF09dmFsdWU6IFszXT0tOTAuMzEsIFs3XT0tODQuMjkKLSAqIFs2MV09LTIuNzgsIFs2Ml0gPSAtMS40OCwgWzYzXSA9IDAuMAotICogSSB0cmllZCB0byBjb21wdXRlIGl0LCBidXQgdXNpbmcgYnV0IGV2ZW4gdXNpbmcgbG9nYXJpdGhtIHdpdGggYmFzZSBlaXRoZXIgMTAgb3IgMgotICogaSB3YXMnbiBhYmxlIHRvIGdldCB2YWx1ZXMgaW4gdGhlIHRhYmxlIGZyb20gdGhlIGZvcm11bGEuIFNvIEkgY29uc3RydWN0ZWQgYW5vdGhlcgotICogZm9ybXVsYSAoc2VlIGFib3ZlKSB0byBpbnRlcnBvbGF0ZSB0aGUgdmFsdWVzIGFzIGdvb2QgYXMgcG9zc2libGUuIElmIHRoZXJlIGlzIHNvbWUKLSAqIG1pc3Rha2UsIHBsZWFzZSBjb250YWN0IG1lIG9uIHRvbWFzLmthc3BhcmVrQHNlem5hbS5jei4gVGhhbmtzLgotICogVURBMTM0MVRTIGRhdGFzaGVldCBpcyBhdmFpbGFibGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3ctdXM5LnNlbWljb25kdWN0b3JzLmNvbS9hY3JvYmF0L2RhdGFzaGVldHMvVURBMTM0MVRTXzMucGRmIAotICovCi1zdGF0aWMgY29uc3QgY2hhciAqcGVha192YWx1ZVtdID0gewotCSItSU5GIGRCIiwgIk4uQS4iLCAiTi5BIiwgIjkwLjMxIGRCIiwgIk4uQS4iLCAiTi5BLiIsICJOLkEuIiwgIi04NC4yOSBkQiIsCi0JIi04Mi42NSBkQiIsICItODEuMTMgZEIiLCAiLTc5LjYxIGRCIiwgIi03OC4wOSBkQiIsICItNzYuNTcgZEIiLCAiLTc1LjA1IGRCIiwgIi03My41MyBkQiIsCi0JIi03Mi4wMSBkQiIsICItNzAuNDkgZEIiLCAiLTY4Ljk3IGRCIiwgIi02Ny40NSBkQiIsICItNjUuOTMgZEIiLCAiLTY0LjQxIGRCIiwgIi02Mi45MCBkQiIsCi0JIi02MS4zOCBkQiIsICItNTkuODYgZEIiLCAiLTU4LjM1IGRCIiwgIi01Ni44MyBkQiIsICItNTUuMzIgZEIiLCAiLTUzLjgwIGRCIiwgIi01Mi4yOSBkQiIsCi0JIi01MC43OCBkQiIsICItNDkuMjYgZEIiLCAiLTQ3Ljc1IGRCIiwgIi00Ni4yNCBkQiIsICItNDQuNzMgZEIiLCAiLTQzLjIyIGRCIiwgIi00MS43MSBkQiIsCi0JIi00MC4yMCBkQiIsICItMzguNjkgZEIiLCAiLTM3LjE5IGRCIiwgIi0zNS42OCBkQiIsICItMzQuMTcgZEIiLCAiLTMyLjY3IGRCIiwgIi0zMS4xNyBkQiIsCi0JIi0yOS42NiBkQiIsICItMjguMTYgZEIiLCAiLTI2LjY2IGRCIiwgIi0yNS4xNiBkQiIsICItMjMuNjYgZEIiLCAiLTIyLjE2IGRCIiwgIi0yMC42NyBkQiIsCi0JIi0xOS4xNyBkQiIsICItMTcuNjggZEIiLCAiLTE2LjE5IGRCIiwgIi0xNC43MCBkQiIsICItMTMuMjEgZEIiLCAiLTExLjcyIGRCIiwgIi0xMC4yNCBkQiIsCi0JIi04Ljc2IGRCIiwgIi03LjI4IGRCIiwgIi01LjgxIGRCIiwgIi00LjM0IGRCIiwgIi0yLjg4IGRCIiwgIi0xLjQzIGRCIiwgIjAuMDAgZEIiLAotfTsKLQotc3RhdGljIHZvaWQgc25kX3VkYTEzNDFfcHJvY19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIAotCQkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgcGVhazsKLQotCXBlYWsgPSBzbmRfdWRhMTM0MV9jb2RlY19yZWFkKGNsbnQsIFVEQTEzNDFfREFUQTEpOwotCWlmIChwZWFrIDwgMCkKLQkJcGVhayA9IDA7Ci0JCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiJXNcblxuIiwgdWRhLT5jYXJkLT5sb25nbmFtZSk7Ci0KLQkvLyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgY29tcHV0ZWQgdmFsdWVzIHNlZSBVREExMzQxVFMgZGF0YXNoZWV0IHBhZ2VzIDE1IC0gMjEKLQlzbmRfaXByaW50ZihidWZmZXIsICJEQUMgcG93ZXIgICAgICAgICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9EQUNdID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBREMgcG93ZXIgICAgICAgICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9BRENdID8gIm9uIiA6ICJvZmYiKTsKLSAJc25kX2lwcmludGYoYnVmZmVyLCAiQ2xvY2sgZnJlcXVlbmN5ICAgICA6ICVzXG4iLCBmc19uYW1lc1t1ZGEtPmNmZ1tDTURfRlNdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiRGF0YSBmb3JtYXQgICAgICAgICA6ICVzXG5cbiIsIGZvcm1hdF9uYW1lc1t1ZGEtPmNmZ1tDTURfRk9STUFUXV0pOwotCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiRmlsdGVyIG1vZGUgICAgICAgICA6ICVzXG4iLCBmaWx0ZXJfbmFtZXNbdWRhLT5jZmdbQ01EX0ZJTFRFUl1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBtb2RlICAgICAgICAgIDogJXNcbiIsIG1peGVyX25hbWVzW3VkYS0+Y2ZnW0NNRF9NSVhFUl1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJEZS1lbXBoYXNpcyAgICAgICAgIDogJXNcbiIsIGRlZW1wX25hbWVzW3VkYS0+Y2ZnW0NNRF9ERUVNUF1dKTsJCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiUGVhayBkZXRlY3Rpb24gcG9zLiA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfUEVBS10gPyAiYWZ0ZXIiIDogImJlZm9yZSIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBlYWsgdmFsdWUgICAgICAgICAgOiAlc1xuXG4iLCBwZWFrX3ZhbHVlW3BlYWtdKTsJCQotCQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkF1dG9tYXRpYyBHYWluIEN0cmwgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0FHQ10gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFHQyBhdHRhY2sgdGltZSAgICAgOiAlZCBtc1xuIiwgQUdDX2F0aW1lW3VkYS0+Y2ZnW0NNRF9BR0NfVElNRV1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBR0MgZGVjYXkgdGltZSAgICAgIDogJWQgbXNcbiIsIEFHQ19kdGltZVt1ZGEtPmNmZ1tDTURfQUdDX1RJTUVdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQUdDIG91dHB1dCBsZXZlbCAgICA6ICVzIGRCXG5cbiIsIEFHQ19sZXZlbFt1ZGEtPmNmZ1tDTURfQUdDX0xFVkVMXV0pOwotCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiTXV0ZSAgICAgICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfTVVURV0gPyAib24iIDogIm9mZiIpOwotCi0JaWYgKHVkYS0+Y2ZnW0NNRF9WT0xVTUVdID09IDApCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZvbHVtZSAgICAgICAgICAgICAgOiAwIGRCXG4iKTsKLQllbHNlIGlmICh1ZGEtPmNmZ1tDTURfVk9MVU1FXSA8IDYyKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogJWQgZEJcbiIsIC0xKnVkYS0+Y2ZnW0NNRF9WT0xVTUVdICsxKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZvbHVtZSAgICAgICAgICAgICAgOiAtSU5GIGRCXG4iKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJCYXNzICAgICAgICAgICAgICAgIDogJXNcbiIsIGJhc3NfdmFsdWVzW3VkYS0+Y2ZnW0NNRF9GSUxURVJdXVt1ZGEtPmNmZ1tDTURfQkFTU11dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJUcmViYmxlICAgICAgICAgICAgIDogJWQgZEJcbiIsIHVkYS0+Y2ZnW0NNRF9GSUxURVJdID8gMip1ZGEtPmNmZ1tDTURfVFJFQkJMRV0gOiAwKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCBHYWluICg2ZEIpICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9JR0FJTl0gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk91dHB1dCBHYWluICg2ZEIpICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX09HQUlOXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiTWljIHNlbnNpdGl2aXR5ICAgICA6ICVzXG4iLCBtaWNfc2Vuc192YWx1ZVt1ZGEtPmNmZ1tDTURfTUlDXV0pOwotCi0JCi0JaWYodWRhLT5jZmdbQ01EX0NIMV0gPCAzMSkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDE6IC0lZC4lYyBkQlxuIiwKLQkJCSAgICAoKHVkYS0+Y2ZnW0NNRF9DSDFdID4+IDEpICogMykgKyAodWRhLT5jZmdbQ01EX0NIMV0gJiAxKSwKLQkJCSAgICB1ZGEtPmNmZ1tDTURfQ0gxXSAmIDEgPyAnNScgOiAnMCcpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDE6IC1JTkYgZEJcbiIpOwotCWlmKHVkYS0+Y2ZnW0NNRF9DSDJdIDwgMzEpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAyOiAtJWQuJWMgZEJcbiIsCi0JCQkgICAgKCh1ZGEtPmNmZ1tDTURfQ0gyXSA+PiAxKSAqIDMpICsgKHVkYS0+Y2ZnW0NNRF9DSDJdICYgMSksCi0JCQkgICAgdWRhLT5jZmdbQ01EX0NIMl0gJiAxID8gJzUnIDogJzAnKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAyOiAtSU5GIGRCXG4iKTsKLQotCWlmKHVkYS0+Y2ZnW0NNRF9JR10gPiA1KQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCBBbXAuIEdhaW4gY2ggMjogJWQuJWMgZEJcbiIsCi0JCQkgICAgKHVkYS0+Y2ZnW0NNRF9JR10gPj4gMSkgLTMsIHVkYS0+Y2ZnW0NNRF9JR10gJiAxID8gJzUnIDogJzAnKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IEFtcC4gR2FpbiBjaCAyOiAlcyBkQlxuIiwgIGlnX3NtYWxsX3ZhbHVlW3VkYS0+Y2ZnW0NNRF9JR11dKTsKLX0KLQotc3RhdGljIHZvaWQgc25kX3VkYTEzNDFfcHJvY19yZWdzX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwgCi0JCQkJICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZW50cnktPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7CQkKLQlpbnQgcmVnOwotCWNoYXIgYnVmWzEyXTsKLQotCWZvciAocmVnID0gMDsgcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsgcmVnICsrKSB7Ci0JCWlmIChyZWcgPT0gZW1wdHkpCi0JCQljb250aW51ZTsKLQkJaW50MnN0cl9iaW44KHVkYS0+cmVnc1tyZWddLCBidWYpOwotCQlzbmRfaXByaW50ZihidWZmZXIsICIlcyA9ICVzXG4iLCB1ZGExMzQxX3JlZ19uYW1lc1tyZWddLCBidWYpOwotCX0KLQotCWludDJzdHJfYmluOChzbmRfdWRhMTM0MV9jb2RlY19yZWFkKGNsbnQsIFVEQTEzNDFfREFUQTEpLCBidWYpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRBVEExID0gJXNcbiIsIGJ1Zik7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF91ZGExMzQxX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKLQotCWlmICghIHNuZF9jYXJkX3Byb2NfbmV3KGNhcmQsICJ1ZGExMzQxIiwgJmVudHJ5KSkKLQkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjbG50LCBzbmRfdWRhMTM0MV9wcm9jX3JlYWQpOwotCWlmICghIHNuZF9jYXJkX3Byb2NfbmV3KGNhcmQsICJ1ZGExMzQxLXJlZ3MiLCAmZW50cnkpKQotCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNsbnQsIHNuZF91ZGExMzQxX3Byb2NfcmVnc19yZWFkKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBNaXhlciBjb250cm9scyBzZXR0aW5nICovCi0KLS8qIHt7eyBVREExMzQxIHNpbmdsZSBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBVREExMzQxX1NJTkdMRSh4bmFtZSwgd2hlcmUsIHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZm8gPSBzbmRfdWRhMTM0MV9pbmZvX3NpbmdsZSwgXAotICAuZ2V0ID0gc25kX3VkYTEzNDFfZ2V0X3NpbmdsZSwgLnB1dCA9IHNuZF91ZGExMzQxX3B1dF9zaW5nbGUsIFwKLSAgLnByaXZhdGVfdmFsdWUgPSB3aGVyZSB8IChyZWcgPDwgNSkgfCAoc2hpZnQgPDwgOSkgfCAobWFzayA8PCAxMikgfCAoaW52ZXJ0IDw8IDE4KSBcCi19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfaW5mb19zaW5nbGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQotCXVpbmZvLT50eXBlID0gbWFzayA9PSAxID8gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOIDogU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBtYXNrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2dldF9zaW5nbGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOCkgJiAxOwotICAgICAgICAKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHVkYS0+Y2ZnW3doZXJlXTsKLQlpZiAoaW52ZXJ0KQotCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG1hc2sgLSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF9zaW5nbGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IHJlZyA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA1KSAmIDE1OwotCWludCBzaGlmdCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA5KSAmIDc7Ci0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOCkgJiAxOwotCXVuc2lnbmVkIHNob3J0IHZhbDsKLQotCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwotCWlmIChpbnZlcnQpCi0JCXZhbCA9IG1hc2sgLSB2YWw7Ci0KLQl1ZGEtPmNmZ1t3aGVyZV0gPSB2YWw7Ci0JcmV0dXJuIHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZywgbWFzaywgc2hpZnQsIHZhbCwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFVEQTEzNDEgZW51bSBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBVREExMzQxX0VOVU0oeG5hbWUsIHdoZXJlLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmZvID0gc25kX3VkYTEzNDFfaW5mb19lbnVtLCBcCi0gIC5nZXQgPSBzbmRfdWRhMTM0MV9nZXRfZW51bSwgLnB1dCA9IHNuZF91ZGExMzQxX3B1dF9lbnVtLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gd2hlcmUgfCAocmVnIDw8IDUpIHwgKHNoaWZ0IDw8IDkpIHwgKG1hc2sgPDwgMTIpIHwgKGludmVydCA8PCAxOCkgXAotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2luZm9fZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOwotCWNvbnN0IGNoYXIgKip0ZXh0czsKLQkKLQkvLyB0aGlzIHJlZ2lzdGVyIHdlIGRvbid0IGhhbmRsZSB0aGlzIHdheQotCWlmICghdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXTsKLQotCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV0pCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdIC0gMTsKLQotCXRleHRzID0gdWRhMTM0MV9lbnVtX25hbWVzW3doZXJlXTsKLQlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2dldF9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLSAgICAgICAgCi0JdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHVkYS0+Y2ZnW3doZXJlXTsJCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfcHV0X2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCByZWcgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gNSkgJiAxNTsKLQlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOSkgJiA3OwotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCi0JdWRhLT5jZmdbd2hlcmVdID0gKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gJiBtYXNrKTsKLQkKLQlyZXR1cm4gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnLCBtYXNrLCBzaGlmdCwgdWRhLT5jZmdbd2hlcmVdLCBGTFVTSCk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgVURBMTM0MSAycmVncyBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBVREExMzQxXzJSRUdTKHhuYW1lLCB3aGVyZSwgcmVnXzEsIHJlZ18yLCBzaGlmdF8xLCBzaGlmdF8yLCBtYXNrXzEsIG1hc2tfMiwgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIC5pbmZvID0gc25kX3VkYTEzNDFfaW5mb18ycmVncywgXAotICAuZ2V0ID0gc25kX3VkYTEzNDFfZ2V0XzJyZWdzLCAucHV0ID0gc25kX3VkYTEzNDFfcHV0XzJyZWdzLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gd2hlcmUgfCAocmVnXzEgPDwgNSkgfCAocmVnXzIgPDwgOSkgfCAoc2hpZnRfMSA8PCAxMykgfCAoc2hpZnRfMiA8PCAxNikgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKG1hc2tfMSA8PCAxOSkgfCAobWFza18yIDw8IDI1KSB8IChpbnZlcnQgPDwgMzEpIFwKLX0KLQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2luZm9fMnJlZ3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCWludCBtYXNrXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgNjM7Ci0JaW50IG1hc2tfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNSkgJiA2MzsKLQlpbnQgbWFzazsKLSAgICAgICAgCi0JbWFzayA9IChtYXNrXzIgKyAxKSAqIChtYXNrXzEgKyAxKSAtIDE7Ci0JdWluZm8tPnR5cGUgPSBtYXNrID09IDEgPyBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4gOiBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IG1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfZ2V0XzJyZWdzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOwotCWludCBtYXNrXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgNjM7Ci0JaW50IG1hc2tfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNSkgJiA2MzsgICAgICAgIAotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMzEpICYgMTsKLQlpbnQgbWFzazsKLQotCW1hc2sgPSAobWFza18yICsgMSkgKiAobWFza18xICsgMSkgLSAxOwotCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB1ZGEtPmNmZ1t3aGVyZV07Ci0JaWYgKGludmVydCkKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtYXNrIC0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfcHV0XzJyZWdzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsgICAgICAgIAotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgcmVnXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gNSkgJiAxNTsKLQlpbnQgcmVnXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOSkgJiAxNTsgICAgICAgIAotCWludCBzaGlmdF8xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEzKSAmIDc7Ci0JaW50IHNoaWZ0XzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgNzsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7ICAgICAgICAKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDMxKSAmIDE7Ci0JaW50IG1hc2s7Ci0JdW5zaWduZWQgc2hvcnQgdmFsMSwgdmFsMiwgdmFsOwotCi0JdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0gICAgICAgICAKLQltYXNrID0gKG1hc2tfMiArIDEpICogKG1hc2tfMSArIDEpIC0gMTsKLQotCXZhbDEgPSB2YWwgJiBtYXNrXzE7Ci0JdmFsMiA9ICh2YWwgLyAobWFza18xICsgMSkpICYgbWFza18yOyAgICAgICAgCi0KLQlpZiAoaW52ZXJ0KSB7Ci0JCXZhbDEgPSBtYXNrXzEgLSB2YWwxOwotCQl2YWwyID0gbWFza18yIC0gdmFsMjsKLQl9Ci0KLQl1ZGEtPmNmZ1t3aGVyZV0gPSBpbnZlcnQgPyBtYXNrIC0gdmFsIDogdmFsOwotICAgICAgICAKLQkvL0ZJWE1FIC0gcmV0dXJuIHZhbHVlCi0Jc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnXzEsIG1hc2tfMSwgc2hpZnRfMSwgdmFsMSwgRkxVU0gpOwotCXJldHVybiBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWdfMiwgbWFza18yLCBzaGlmdF8yLCB2YWwyLCBGTFVTSCk7Ci19Ci0KLS8qIH19fSAqLwotICAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdWRhMTM0MV9jb250cm9sc1tdID0gewotCVVEQTEzNDFfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgQ01EX01VVEUsIGRhdGEwXzIsIDIsIDEsIDEpLAotCVVEQTEzNDFfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgQ01EX1ZPTFVNRSwgZGF0YTBfMCwgMCwgNjMsIDEpLAotCi0JVURBMTM0MV9TSU5HTEUoIkJhc3MgUGxheWJhY2sgVm9sdW1lIiwgQ01EX0JBU1MsIGRhdGEwXzEsIDIsIDE1LCAwKSwKLQlVREExMzQxX1NJTkdMRSgiVHJlYmxlIFBsYXliYWNrIFZvbHVtZSIsIENNRF9UUkVCQkxFLCBkYXRhMF8xLCAwLCAzLCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJJbnB1dCBHYWluIFN3aXRjaCIsIENNRF9JR0FJTiwgc3RhdDEsIDUsIDEsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJPdXRwdXQgR2FpbiBTd2l0Y2giLCBDTURfT0dBSU4sIHN0YXQxLCA2LCAxLCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJNaXhlciBHYWluIENoYW5uZWwgMSBWb2x1bWUiLCBDTURfQ0gxLCBleHQwLCAwLCAzMSwgMSksCi0JVURBMTM0MV9TSU5HTEUoIk1peGVyIEdhaW4gQ2hhbm5lbCAyIFZvbHVtZSIsIENNRF9DSDIsIGV4dDEsIDAsIDMxLCAxKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJNaWMgU2Vuc2l0aXZpdHkgVm9sdW1lIiwgQ01EX01JQywgZXh0MiwgMiwgNywgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiQUdDIE91dHB1dCBMZXZlbCIsIENNRF9BR0NfTEVWRUwsIGV4dDYsIDAsIDMsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJBR0MgVGltZSBDb25zdGFudCIsIENNRF9BR0NfVElNRSwgZXh0NiwgMiwgNywgMCksCi0JVURBMTM0MV9TSU5HTEUoIkFHQyBUaW1lIENvbnN0YW50IFN3aXRjaCIsIENNRF9BR0MsIGV4dDQsIDQsIDEsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIkRBQyBQb3dlciIsIENNRF9EQUMsIHN0YXQxLCAwLCAxLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiQURDIFBvd2VyIiwgQ01EX0FEQywgc3RhdDEsIDEsIDEsIDApLAotCi0JVURBMTM0MV9FTlVNKCJQZWFrIGRldGVjdGlvbiIsIENNRF9QRUFLLCBkYXRhMF8yLCA1LCAxLCAwKSwKLQlVREExMzQxX0VOVU0oIkRlLWVtcGhhc2lzIiwgQ01EX0RFRU1QLCBkYXRhMF8yLCAzLCAzLCAwKSwKLQlVREExMzQxX0VOVU0oIk1peGVyIG1vZGUiLCBDTURfTUlYRVIsIGV4dDIsIDAsIDMsIDApLAotCVVEQTEzNDFfRU5VTSgiRmlsdGVyIG1vZGUiLCBDTURfRklMVEVSLCBkYXRhMF8yLCAwLCAzLCAwKSwKLQotCVVEQTEzNDFfMlJFR1MoIkdhaW4gSW5wdXQgQW1wbGlmaWVyIEdhaW4gKGNoYW5uZWwgMikiLCBDTURfSUcsIGV4dDQsIGV4dDUsIDAsIDAsIDMsIDMxLCAwKSwKLX07Ci0KLXN0YXRpYyB2b2lkIHVkYTEzNDFfZnJlZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCWwzX2RldGFjaF9jbGllbnQoY2xudCk7IC8vIGNhbGxzIGtmcmVlIGZvciBkcml2ZXJfZGF0YSAoc3RydWN0IHVkYTEzNDEpCi0Ja2ZyZWUoY2xudCk7Ci19Ci0KLXN0YXRpYyBpbnQgdWRhMTM0MV9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBkZXZpY2UtPmRldmljZV9kYXRhOwotCXVkYTEzNDFfZnJlZShjbG50KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IF9faW5pdCBzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBsM19jbGllbnQgKipjbG50cCkKLXsKLQlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKLQkJLmRldl9mcmVlID0gICAgIHVkYTEzNDFfZGV2X2ZyZWUsCi0JfTsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50OwotCWludCBpZHgsIGVycjsKLQotCWlmIChzbmRfQlVHX09OKCFjYXJkKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbG50ID0ga3phbGxvYyhzaXplb2YoKmNsbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLSAgICAgICAgIAotCWlmICgoZXJyID0gbDNfYXR0YWNoX2NsaWVudChjbG50LCAibDMtYml0LXNhMTEwMC1ncGlvIiwgVURBMTM0MV9BTFNBX05BTUUpKSkgewotCQlrZnJlZShjbG50KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX3VkYTEzNDFfY29udHJvbHMpOyBpZHgrKykgewotCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX3VkYTEzNDFfY29udHJvbHNbaWR4XSwgY2xudCkpKSA8IDApIHsKLQkJCXVkYTEzNDFfZnJlZShjbG50KTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQlpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9DT0RFQywgY2xudCwgJm9wcykpIDwgMCkgewotCQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JKmNsbnRwID0gY2xudDsKLQlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiVURBMTM0MVRTIE1peGVyIik7Ci0JKChzdHJ1Y3QgdWRhMTM0MSAqKWNsbnQtPmRyaXZlcl9kYXRhKS0+Y2FyZCA9IGNhcmQ7Ci0gICAgICAgIAotCXNuZF91ZGExMzQxX3Byb2NfaW5pdChjYXJkLCBjbG50KTsKLSAgICAgICAgCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgTDMgb3BlcmF0aW9ucyAqLwotCi1zdGF0aWMgaW50IHVkYTEzNDFfYXR0YWNoKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYTsKLQotCXVkYSA9IGt6YWxsb2Moc2l6ZW9mKCp1ZGEpLCAwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVkYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBpbml0IGZpeGVkIHBhcnRzIG9mIG15IGNvcHkgb2YgcmVnaXN0ZXJzICovCi0JdWRhLT5yZWdzW3N0YXQwXSAgID0gU1RBVDA7Ci0JdWRhLT5yZWdzW3N0YXQxXSAgID0gU1RBVDE7Ci0KLQl1ZGEtPnJlZ3NbZGF0YTBfMF0gPSBEQVRBMF8wOwotCXVkYS0+cmVnc1tkYXRhMF8xXSA9IERBVEEwXzE7Ci0JdWRhLT5yZWdzW2RhdGEwXzJdID0gREFUQTBfMjsKLQotCXVkYS0+d3JpdGUgPSBzbmRfdWRhMTM0MV9jb2RlY193cml0ZTsKLQl1ZGEtPnJlYWQgPSBzbmRfdWRhMTM0MV9jb2RlY19yZWFkOwotICAKLQlzcGluX2xvY2tfaW5pdCgmdWRhLT5yZWdfbG9jayk7Ci0gICAgICAgIAotCWNsbnQtPmRyaXZlcl9kYXRhID0gdWRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2RldGFjaChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCWtmcmVlKGNsbnQtPmRyaXZlcl9kYXRhKTsKLX0KLQotc3RhdGljIGludAotdWRhMTM0MV9jb21tYW5kKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoY21kICE9IENNRF9SRUFEX1JFRykKLQkJcmV0dXJuIHNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBjbWQsIChpbnQpIGFyZywgRkxVU0gpOwotCi0JcmV0dXJuIHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoY2xudCwgKGludCkgYXJnKTsKLX0KLQotc3RhdGljIGludCB1ZGExMzQxX29wZW4oc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0KLQl1ZGEtPmFjdGl2ZSA9IDE7Ci0KLQkvKiBpbml0IGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfUkVTRVQsIDAsIFJFR1NfT05MWSk7Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9GUywgRjI1NiwgRkxVU0gpOyAgICAgICAvLyB1bmtub3duIHN0YXRlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9GT1JNQVQsIExTQjE2LCBGTFVTSCk7ICAvLyB1bmtub3duIHN0YXRlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9PR0FJTiwgT04sIEZMVVNIKTsgICAgICAvLyBkZWZhdWx0IG9mZiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfSUdBSU4sIE9OLCBGTFVTSCk7ICAgICAgLy8gZGVmYXVsdCBvZmYgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0RBQywgT04sIEZMVVNIKTsJLy8gPz8/IGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FEQywgT04sIEZMVVNIKTsJLy8gPz8/IGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1ZPTFVNRSwgMjAsIEZMVVNIKTsgICAgIC8vIGRlZmF1bHQgMGRCIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9CQVNTLCAwLCBSRUdTX09OTFkpOyAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9UUkVCQkxFLCAwLCBSRUdTX09OTFkpOyAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9QRUFLLCBBRlRFUiwgUkVHU19PTkxZKTsvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9ERUVNUCwgTk9ORSwgUkVHU19PTkxZKTsvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0JLy9hdCB0aGlzIG1vbWVudCBzaG91bGQgYmUgUU1VVEVEIGJ5IGgzNjAwX2F1ZGlvX2luaXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX01VVEUsIE9GRiwgUkVHU19PTkxZKTsgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0ZJTFRFUiwgTUFYLCBGTFVTSCk7ICAgIC8vIGRlZmF1bCBmbGF0IGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9DSDEsIDMxLCBGTFVTSCk7ICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9DSDIsIDQsIEZMVVNIKTsgICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9NSUMsIDQsIEZMVVNIKTsgICAgICAgICAvLyBkZWZhdWx0IDBkQiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfTUlYRVIsIE1JWEVSLCBGTFVTSCk7ICAgLy8gZGVmYXVsdCBkb3ViLmRpZi5tb2RlICAgICAgICAgIAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQUdDLCBPRkYsIEZMVVNIKTsgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfSUcsIDAsIEZMVVNIKTsgICAgICAgICAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQUdDX1RJTUUsIDAsIEZMVVNIKTsgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQUdDX0xFVkVMLCAwLCBGTFVTSCk7ICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVkYTEzNDFfY2xvc2Uoc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0KLQl1ZGEtPmFjdGl2ZSA9IDA7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgTW9kdWxlIGFuZCBMMyBpbml0aWFsaXphdGlvbiAqLwotCi1zdGF0aWMgc3RydWN0IGwzX29wcyB1ZGExMzQxX29wcyA9IHsKLQkub3BlbiA9CQl1ZGExMzQxX29wZW4sCi0JLmNvbW1hbmQgPQl1ZGExMzQxX2NvbW1hbmQsCi0JLmNsb3NlID0JdWRhMTM0MV9jbG9zZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbDNfZHJpdmVyIHVkYTEzNDFfZHJpdmVyID0gewotCS5uYW1lID0JCVVEQTEzNDFfQUxTQV9OQU1FLAotCS5hdHRhY2hfY2xpZW50ID0gdWRhMTM0MV9hdHRhY2gsCi0JLmRldGFjaF9jbGllbnQgPSB1ZGExMzQxX2RldGFjaCwKLQkub3BzID0JCSZ1ZGExMzQxX29wcywKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHVkYTEzNDFfaW5pdCh2b2lkKQotewotCXJldHVybiBsM19hZGRfZHJpdmVyKCZ1ZGExMzQxX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB1ZGExMzQxX2V4aXQodm9pZCkKLXsKLQlsM19kZWxfZHJpdmVyKCZ1ZGExMzQxX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHVkYTEzNDFfaW5pdCk7Ci1tb2R1bGVfZXhpdCh1ZGExMzQxX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFVEQTEzNDEgQ09ERUMgZHJpdmVyIGZvciBBTFNBIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tVREExMzQxLFVEQTEzNDFUU319Iik7Ci0KLUVYUE9SVF9TWU1CT0woc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcpOwotCi0vKiB9fX0gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGluZGVudC10YWJzLW1vZGU6IHQKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL0tjb25maWcgYi9zb3VuZC9pc2EvS2NvbmZpZwppbmRleCBjZTBhYTA0Li5jNWM5YTkyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvS2NvbmZpZworKysgYi9zb3VuZC9pc2EvS2NvbmZpZwpAQCAtNTYsOCArNTYsOCBAQAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEFEMTg0OCAoQW5hbG9nIERldmljZXMpIG9yCiAJICBDUzQyNDggKENpcnJ1cyBMb2dpYyAtIENyeXN0YWwgU2VtaWNvbmR1Y3RvcnMpIGNoaXBzLgogCSAgCi0JICBGb3IgbmV3ZXIgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMsIHVzZSB0aGUgQ1M0MjMxLCBDUzQyMzIgb3IKLQkgIENTNDIzNisgZHJpdmVycy4KKwkgIEZvciBuZXdlciBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYywgdXNlIHRoZSBDUzQyMzEgb3IgQ1M0MjMyKworCSAgZHJpdmVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWFkMTg0OC4KQEAgLTk0LDYgKzk0LDggQEAKIAl0cmlzdGF0ZSAiQy1NZWRpYSBDTUk4MzMwIgogCXNlbGVjdCBTTkRfV1NTX0xJQgogCXNlbGVjdCBTTkRfU0IxNl9EU1AKKwlzZWxlY3QgU05EX09QTDNfTElCCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQy1NZWRpYSBDTUk4MzMwIGNoaXAuCkBAIC0xMTIsMjYgKzExNCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWNzNDIzMS4KIAotY29uZmlnIFNORF9DUzQyMzIKLQl0cmlzdGF0ZSAiR2VuZXJpYyBDaXJydXMgTG9naWMgQ1M0MjMyIGRyaXZlciIKLQlzZWxlY3QgU05EX09QTDNfTElCCi0Jc2VsZWN0IFNORF9NUFU0MDFfVUFSVAotCXNlbGVjdCBTTkRfV1NTX0xJQgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDUzQyMzIgY2hpcHMgZnJvbSBDaXJydXMKLQkgIExvZ2ljIC0gQ3J5c3RhbCBTZW1pY29uZHVjdG9ycy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgc25kLWNzNDIzMi4KLQogY29uZmlnIFNORF9DUzQyMzYKLQl0cmlzdGF0ZSAiR2VuZXJpYyBDaXJydXMgTG9naWMgQ1M0MjM2KyBkcml2ZXIiCisJdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzMi9DUzQyMzYrIGRyaXZlciIKIAlzZWxlY3QgU05EX09QTDNfTElCCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfV1NTX0xJQgogCWhlbHAKLQkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjM1LENTNDIzNixDUzQyMzdCLENTNDIzOEIsCi0JICBDUzQyMzkgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMgLSBDcnlzdGFsIFNlbWljb25kdWN0b3JzLgorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDUzQyMzIsQ1M0MjM1LENTNDIzNixDUzQyMzdCLAorCSAgQ1M0MjM4QixDUzQyMzkgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMgLSBDcnlzdGFsCisJICBTZW1pY29uZHVjdG9ycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWNzNDIzNi4KQEAgLTM3NywxNCArMzY4LDE3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtc2dhbGF4eS4KIAogY29uZmlnIFNORF9TU0NBUEUKLQl0cmlzdGF0ZSAiRW5zb25pcSBTb3VuZFNjYXBlIFBuUCBkcml2ZXIiCisJdHJpc3RhdGUgIkVuc29uaXEgU291bmRTY2FwZSBkcml2ZXIiCiAJc2VsZWN0IFNORF9IV0RFUAogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1dTU19MSUIKIAloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRW5zb25pcSBTb3VuZFNjYXBlIFBuUAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVuc29uaXEgU291bmRTY2FwZSAKIAkgIHNvdW5kY2FyZHMuCiAKKwkgIFRoZSBQQ00gYXVkaW8gaXMgc3VwcG9ydGVkIG9uIFNvdW5kU2NhcGUgQ2xhc3NpYywgRWxpdGUsIFBuUAorCSAgYW5kIFZJVk8gY2FyZHMuIFRoZSBNSURJIHN1cHBvcnQgaXMgdmVyeSBleHBlcmltZW50YWwuCisKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1zc2NhcGUuCiAKQEAgLTQxMSw1ICs0MDUsMzYgQEAKIAkgIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIGZpcm13YXJlIGZpbGVzIGZyb20gdGhlCiAJICBhbHNhLWZpcm13YXJlIHBhY2thZ2UuCiAKK2NvbmZpZyBTTkRfTVNORF9QSU5OQUNMRQorCXRyaXN0YXRlICJUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS9GaWppIGRyaXZlciIKKwlkZXBlbmRzIG9uIFg4NiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS8KKwkgIEZpamkgc291bmRjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLW1zbmQtcGlubmFjbGUuCisKK2NvbmZpZyBTTkRfTVNORF9DTEFTU0lDCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSwgTW9udGVyZXkiCisJZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSBNIGhlcmUgaWYgeW91IGhhdmUgYSBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGkgb3IKKwkgIE1vbnRlcmV5IChub3QgZm9yIHRoZSBQaW5uYWNsZSBvciBGaWppKS4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL011bHRpU291bmQ+IGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24KKwkgIGFib3V0IHRoaXMgZHJpdmVyLiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIGRpc2NvbnRpbnVlZCwgYnV0IHRoZQorCSAgVm95ZXRyYSBUdXJ0bGUgQmVhY2gga25vd2xlZGdlIGJhc2UgZW50cnkgZm9yIGl0IGlzIHN0aWxsIGF2YWlsYWJsZQorCSAgYXQgPGh0dHA6Ly93d3cudHVydGxlYmVhY2guY29tL3NpdGUva2JfZnRwLzc5MC5hc3A+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbXNuZC1jbGFzc2ljLgorCiBlbmRpZgkjIFNORF9JU0EKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL01ha2VmaWxlIGIvc291bmQvaXNhL01ha2VmaWxlCmluZGV4IDYzYWYxM2QuLmI5MDZiOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9NYWtlZmlsZQorKysgYi9zb3VuZC9pc2EvTWFrZWZpbGUKQEAgLTI2LDUgKzI2LDUgQEAKIG9iai0kKENPTkZJR19TTkRfU0dBTEFYWSkgKz0gc25kLXNnYWxheHkubwogb2JqLSQoQ09ORklHX1NORF9TU0NBUEUpICs9IHNuZC1zc2NhcGUubwogCi1vYmotJChDT05GSUdfU05EKSArPSBhZDE4MTZhLyBhZDE4NDgvIGNzNDIzeC8gZXMxNjg4LyBndXMvIG9wdGk5eHgvIFwKK29iai0kKENPTkZJR19TTkQpICs9IGFkMTgxNmEvIGFkMTg0OC8gY3M0MjN4LyBlczE2ODgvIGd1cy8gbXNuZC8gb3B0aTl4eC8gXAogCQkgICAgIHNiLyB3YXZlZnJvbnQvIHdzcy8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYwppbmRleCA3NzUyNDI0Li5iYmNiZjkyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKKysrIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCkBAIC0xNTYsMTAgKzE1NiwxMiBAQAogCXN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhICphY2FyZDsKIAlzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXA7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOworCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IChzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9hZDE4MTZhX3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKQEAgLTE5NCw2ICsxOTYsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAorCWVycm9yID0gc25kX2FkMTgxNmFfdGltZXIoY2hpcCwgMCwgJnRpbWVyKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDApIHsKIAkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKIAkJCQkJbXB1X3BvcnRbZGV2XSwgMCwgbXB1X2lycVtkZXZdLCBJUlFGX0RJU0FCTEVELApAQCAtMjA3LDExICsyMTUsOCBAQAogCQkJCSAgICBPUEwzX0hXX0FVVE8sIDAsICZvcGwzKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE9QTCBkZXZpY2UgYXQgMHglbHgtMHglbHguXG4iLCBmbV9wb3J0W2Rldl0sIGZtX3BvcnRbZGV2XSArIDIpOwogCQl9IGVsc2UgewotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCAxLCAyKSkgPCAwKSB7Ci0JCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl9Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpKSA8IDApIHsKKwkJCWVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQkJaWYgKGVycm9yIDwgMCkgewogCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKaW5kZXggM2JmY2E3Yy4uMDVhZWY4YiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCkBAIC0zNyw3ICszNyw3IEBACiAJCWlmIChpbmIoQUQxODE2QV9SRUcoQUQxODE2QV9DSElQX1NUQVRVUykpICYgQUQxODE2QV9SRUFEWSkKIAkJCXJldHVybiAwOwogCi0Jc25kX3ByaW50aygiY2hpcCBidXN5LlxuIik7CisJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImNoaXAgYnVzeS5cbiIpOwogCXJldHVybiAtRUJVU1k7CiB9CiAKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQlzcGluX3VubG9jaygmY2hpcC0+bG9jayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImludmFsaWQgdHJpZ2dlciBtb2RlIDB4JXguXG4iLCB3aGF0KTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImludmFsaWQgdHJpZ2dlciBtb2RlIDB4JXguXG4iLCB3aGF0KTsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KIApAQCAtMzc3LDcgKzM3Nyw2IEBACiAJLmZpZm9fc2l6ZSA9CQkwLAogfTsKIAotI2lmIDAgLyogbm90IHVzZWQgbm93ICovCiBzdGF0aWMgaW50IHNuZF9hZDE4MTZhX3RpbWVyX2Nsb3NlKHN0cnVjdCBzbmRfdGltZXIgKnRpbWVyKQogewogCXN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCA9IHNuZF90aW1lcl9jaGlwKHRpbWVyKTsKQEAgLTQ0Miw4ICs0NDEsNiBAQAogCS5zdGFydCA9CXNuZF9hZDE4MTZhX3RpbWVyX3N0YXJ0LAogCS5zdG9wID0JCXNuZF9hZDE4MTZhX3RpbWVyX3N0b3AsCiB9OwotI2VuZGlmIC8qIG5vdCB1c2VkIG5vdyAqLwotCiAKIHN0YXRpYyBpbnQgc25kX2FkMTgxNmFfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTU2OCw3ICs1NjUsNyBAQAogCWNhc2UgQUQxODE2QV9IV19BRDE4MTU6CXJldHVybiAiQUQxODE1IjsKIAljYXNlIEFEMTgxNkFfSFdfQUQxOE1BWDEwOiByZXR1cm4gIkFEMThtYXgxMCI7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiVW5rbm93biBjaGlwIHZlcnNpb24gJWQ6JWQuXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBjaGlwIHZlcnNpb24gJWQ6JWQuXG4iLAogCQkJY2hpcC0+dmVyc2lvbiwgY2hpcC0+aGFyZHdhcmUpOwogCQlyZXR1cm4gIkFEMTgxNkEgLSB1bmtub3duIjsKIAl9CkBAIC02ODcsNyArNjg0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAgLyogbm90IHVzZWQgbm93ICovCiBpbnQgX19kZXZpbml0IHNuZF9hZDE4MTZhX3RpbWVyKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF90aW1lciAqKnJ0aW1lcikKIHsKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKQEAgLTcwOSw3ICs3MDUsNiBAQAogCQkqcnRpbWVyID0gdGltZXI7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogbm90IHVzZWQgbm93ICovCiAKIC8qCiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKaW5kZXggMjIzYTZjMC4uNGJlZWI2ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYworKysgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCkBAIC05MSw5ICs5MSw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydFtuXSwgLTEsIGlycVtuXSwgZG1hMVtuXSwgLTEsCiAJCQl0aGlua3BhZFtuXSA/IFdTU19IV19USElOS1BBRCA6IFdTU19IV19ERVRFQ1QsCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWRsaWIuYyBiL3NvdW5kL2lzYS9hZGxpYi5jCmluZGV4IDM3NGI3MTcuLjc0NjVhZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZGxpYi5jCisrKyBiL3NvdW5kL2lzYS9hZGxpYi5jCkBAIC01MywxMCArNTMsMTAgQEAKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpIHsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkgewogCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gcmVxdWVzdF9yZWdpb24ocG9ydFtuXSwgNCwgQ1JEX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FsczEwMC5jIGIvc291bmQvaXNhL2FsczEwMC5jCmluZGV4IGYxY2UzMGYuLjVmZDUyZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hbHMxMDAuYworKysgYi9zb3VuZC9pc2EvYWxzMTAwLmMKQEAgLTE2Myw5ICsxNjMsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwICphY2FyZDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9hbHMxMDBfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2F6dDIzMjAuYyBiL3NvdW5kL2lzYS9henQyMzIwLmMKaW5kZXggM2U3NGQxYS4uZjdhYTYzNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2F6dDIzMjAuYworKysgYi9zb3VuZC9pc2EvYXp0MjMyMC5jCkBAIC0xODQsOSArMTg0LDEwIEBACiAJc3RydWN0IHNuZF93c3MgKmNoaXA7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2F6dDIzMjApKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9henQyMzIwKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IChzdHJ1Y3Qgc25kX2NhcmRfYXp0MjMyMCAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9henQyMzIwX3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jbWk4MzMwLmMgYi9zb3VuZC9pc2EvY21pODMzMC5jCmluZGV4IGU0OWFlYzcuLmRlODM2MDggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jbWk4MzMwLmMKKysrIGIvc291bmQvaXNhL2NtaTgzMzAuYwpAQCAtMzEsMTEgKzMxLDExIEBACiAgKiAgVG8gcXVpY2tseSBsb2FkIHRoZSBtb2R1bGUsCiAgKgogICogIG1vZHByb2JlIC1hIHNuZC1jbWk4MzMwIHNicG9ydD0weDIyMCBzYmlycT01IHNiZG1hOD0xCi0gKiAgICBzYmRtYTE2PTUgd3NzcG9ydD0weDUzMCB3c3NpcnE9MTEgd3NzZG1hPTAKKyAqICAgIHNiZG1hMTY9NSB3c3Nwb3J0PTB4NTMwIHdzc2lycT0xMSB3c3NkbWE9MCBmbXBvcnQ9MHgzODgKICAqCiAgKiAgVGhpcyBjYXJkIGhhcyB0d28gbWl4ZXJzIGFuZCB0d28gUENNIGRldmljZXMuICBJJ3ZlIGNoZWVzZWQgaXQgc3VjaAogICogIHRoYXQgcmVjb3JkaW5nIGFuZCBwbGF5YmFjayBjYW4gYmUgZG9uZSB0aHJvdWdoIHRoZSBzYW1lIGRldmljZS4KLSAqICBUaGUgZHJpdmVyICJtYWdpY2FsbHkiIHJvdXRlcyB0aGUgY2FwdHVyaW5nIHRvIHRoZSBBRDE4NDggY29kZWMsCisgKiAgVGhlIGRyaXZlciAibWFnaWNhbGx5IiByb3V0ZXMgdGhlIGNhcHR1cmluZyB0byB0aGUgQ01JODMzMCBjb2RlYywKICAqICBhbmQgcGxheWJhY2sgdG8gdGhlIFNCMTYgY29kZWMuICBUaGlzIGFsbG93cyBmb3IgZnVsbC1kdXBsZXggbW9kZQogICogIHRvIHNvbWUgZXh0ZW50LgogICogIFRoZSB1dGlsaXRpZXMgaW4gYWxzYS11dGlscyBhcmUgYXdhcmUgb2YgYm90aCBkZXZpY2VzLCBzbyBwYXNzaW5nCkBAIC01MSw2ICs1MSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvd3NzLmg+CisjaW5jbHVkZSA8c291bmQvb3BsMy5oPgorI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgogI2luY2x1ZGUgPHNvdW5kL3NiLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCkBAIC03OSw2ICs4MSw5IEBACiBzdGF0aWMgbG9uZyB3c3Nwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKIHN0YXRpYyBpbnQgd3NzaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwogc3RhdGljIGludCB3c3NkbWFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9ETUE7CitzdGF0aWMgbG9uZyBmbXBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGxvbmcgbXB1cG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IG1wdWlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBDTUk4MzMwIHNvdW5kY2FyZC4iKTsKQEAgLTEwNyw2ICsxMTIsMTIgQEAKIG1vZHVsZV9wYXJhbV9hcnJheSh3c3NkbWEsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdzc2RtYSwgIkRNQSBmb3IgQ01JODMzMCBXU1MgZHJpdmVyLiIpOwogCittb2R1bGVfcGFyYW1fYXJyYXkoZm1wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1wb3J0LCAiRk0gcG9ydCAjIGZvciBDTUk4MzMwIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVwb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1cG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciBDTUk4MzMwIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVpcnEsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1wdWlycSwgIklSUSAjIGZvciBDTUk4MzMwIE1QVS00MDEgcG9ydC4iKTsKICNpZmRlZiBDT05GSUdfUE5QCiBzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOwogc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKQEAgLTE0OSw2ICsxNjAsNyBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlzdHJ1Y3QgcG5wX2RldiAqY2FwOwogCXN0cnVjdCBwbnBfZGV2ICpwbGF5OworCXN0cnVjdCBwbnBfZGV2ICptcHU7CiAjZW5kaWYKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF93c3MgKndzczsKQEAgLTE2NSw3ICsxNzcsNyBAQAogI2lmZGVmIENPTkZJR19QTlAKIAogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2NtaTgzMzBfcG5waWRzW10gPSB7Ci0JeyAuaWQgPSAiQ01JMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJDTUkwMDAxIiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0gfSB9LAogCXsgLmlkID0gIiIgfQogfTsKIApAQCAtMjE5LDggKzIzMSwxMCBAQAogCQlDTUk4MzMwX1JNVVgzRCwgNSwgMSwgMSksCiBXU1NfU0lOR0xFKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDAsCiAJCUNNSTgzMzBfT1VUUFVUVk9MLCAzLCAzLCAwKSwKLVdTU19TSU5HTEUoIkZNIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNNSTgzMzBfUkVDTVVYLCAzLCAxLCAxKSwKK1dTU19ET1VCTEUoIkZNIFBsYXliYWNrIFN3aXRjaCIsIDAsCisJCUNTNDIzMV9BVVgyX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKK1dTU19ET1VCTEUoIkZNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgyX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVULCAwLCAwLCAzMSwgMSksCiBXU1NfU0lOR0xFKFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiSW5wdXQgIiwgQ0FQVFVSRSwgU1dJVENIKSwgMCwKIAkJQ01JODMzMF9STVVYM0QsIDcsIDEsIDEpLAogV1NTX1NJTkdMRShTTkRSVl9DVExfTkFNRV9JRUM5NTgoIklucHV0ICIsIFBMQVlCQUNLLCBTV0lUQ0gpLCAwLApAQCAtMzIzLDE2ICszMzcsMjEgQEAKIAlpZiAoYWNhcmQtPnBsYXkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWFjYXJkLT5tcHUgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBpZC0+ZGV2c1syXS5pZCwgTlVMTCk7CisJaWYgKGFjYXJkLT5wbGF5ID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKIAlwZGV2ID0gYWNhcmQtPmNhcDsKIAogCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7CiAJaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ01JODMzMC9DM0QgKEFEMTg0OCkgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ01JODMzMC9DM0QgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJd3NzcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7CiAJd3NzZG1hW2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOwogCXdzc2lycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKKwlmbXBvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDEpOwogCiAJLyogYWxsb2NhdGUgU0IxNiByZXNvdXJjZXMgKi8KIAlwZGV2ID0gYWNhcmQtPnBsYXk7CkBAIC0zNDcsNiArMzY2LDE3IEBACiAJc2JkbWExNltkZXZdID0gcG5wX2RtYShwZGV2LCAxKTsKIAlzYmlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKIAorCS8qIGFsbG9jYXRlIE1QVS00MDEgcmVzb3VyY2VzICovCisJcGRldiA9IGFjYXJkLT5tcHU7CisKKwllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJDTUk4MzMwL0MzRCAoTVBVLTQwMSkgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbXB1cG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7CisJbXB1aXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC00NjcsMjYgKzQ5NywyOSBAQAogCiAjZGVmaW5lIFBGWAkiY21pODMzMDogIgogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfY21pODMzMF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfY21pODMzMF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9jbWk4MzMwICphY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NtaTgzMzApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImNvdWxkIG5vdCBnZXQgYSBuZXcgY2FyZFxuIik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZXJyOwogCX0KIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlhY2FyZC0+Y2FyZCA9IGNhcmQ7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NtaTgzMzBfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQogewogCXN0cnVjdCBzbmRfY21pODMzMCAqYWNhcmQ7CiAJaW50IGksIGVycjsKKwlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAllcnIgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCB3c3Nwb3J0W2Rldl0gKyA0LCAtMSwKQEAgLTQ5NCwxMSArNTI3LDExIEBACiAJCQkgICAgIHdzc2RtYVtkZXZdLCAtMSwKIAkJCSAgICAgV1NTX0hXX0RFVEVDVCwgMCwgJmFjYXJkLT53c3MpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQUQxODQ4KSBkZXZpY2UgYnVzeT8/XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihDTUk4MzMwKSBkZXZpY2UgYnVzeT8/XG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGFjYXJkLT53c3MtPmhhcmR3YXJlICE9IFdTU19IV19DTUk4MzMwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQUQxODQ4KSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihDTUk4MzMwKSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01MzAsNiArNTYzLDI3IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KKwlpZiAoZm1wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwKKwkJCQkgICAgZm1wb3J0W2Rldl0sIGZtcG9ydFtkZXZdICsgMiwKKwkJCQkgICAgT1BMM19IV19BVVRPLCAwLCAmb3BsMykgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSAgICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4ID9cbiIsCisJCQkJICAgZm1wb3J0W2Rldl0sIGZtcG9ydFtkZXZdICsgMik7CisJCX0gZWxzZSB7CisJCQllcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKG1wdXBvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKKwkJCQkJbXB1cG9ydFtkZXZdLCAwLCBtcHVpcnFbZGV2XSwKKwkJCQkJSVJRRl9ESVNBQkxFRCwgTlVMTCkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gTVBVLTQwMSBkZXZpY2UgYXQgMHglbHguXG4iLAorCQkJCW1wdXBvcnRbZGV2XSk7CisJfQogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkNNSTgzMzAvQzNEIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkMtTWVkaWEgQ01JODMzMC9DM0QiKTsKQEAgLTU2NCw5ICs2MTgsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF9jbWk4MzMwX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNjI4LDkgKzY4Miw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCQkgICAgICAgCi0JY2FyZCA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAJaWYgKChyZXMgPSBzbmRfY21pODMzMF9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIlBuUCBkZXRlY3Rpb24gZmFpbGVkXG4iKTsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUgYi9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlCmluZGV4IDU4NzBjYTIuLjZkMzk3ZTggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZQpAQCAtMywxMyArMywxMSBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4KICMKIAotc25kLWNzNDIzNi1saWItb2JqcyA6PSBjczQyMzZfbGliLm8KIHNuZC1jczQyMzEtb2JqcyA6PSBjczQyMzEubwotc25kLWNzNDIzMi1vYmpzIDo9IGNzNDIzMi5vCi1zbmQtY3M0MjM2LW9ianMgOj0gY3M0MjM2Lm8KK3NuZC1jczQyMzYtb2JqcyA6PSBjczQyMzYubyBjczQyMzZfbGliLm8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQogb2JqLSQoQ09ORklHX1NORF9DUzQyMzEpICs9IHNuZC1jczQyMzEubwotb2JqLSQoQ09ORklHX1NORF9DUzQyMzIpICs9IHNuZC1jczQyMzIubwotb2JqLSQoQ09ORklHX1NORF9DUzQyMzYpICs9IHNuZC1jczQyMzYubyBzbmQtY3M0MjM2LWxpYi5vCitvYmotJChDT05GSUdfU05EX0NTNDIzNikgKz0gc25kLWNzNDIzNi5vCisKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKaW5kZXggZjAxOWQ0NC4uY2I5MTUzZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCkBAIC05NSw5ICs5NSw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydFtuXSwgLTEsIGlycVtuXSwgZG1hMVtuXSwgZG1hMltuXSwKIAkJCVdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMyLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmFkMmU2Li4wMDAwMDAwCi0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSNkZWZpbmUgQ1M0MjMyCi0jaW5jbHVkZSAiY3M0MjM2LmMiCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwppbmRleCAwMTljOTQwLi5hMDc2YTZjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKQEAgLTMzLDE3ICszMywxNCBAQAogCiBNT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI2lmZGVmIENTNDIzMgotTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjMyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNpcnJ1cyBMb2dpYyBDUzQyMzItOSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VHVydGxlIEJlYWNoLFRCUy0yMDAwfSwiCiAJCSJ7VHVydGxlIEJlYWNoLFRyb3BleiBQbHVzfSwiCiAJCSJ7U0lDIENyeXN0YWxXYXZlIDMyfSwiCiAJCSJ7SGV3bGV0dCBQYWNrYXJkLE9tbmlib29rIDU1MDB9LCIKIAkJIntUZXJyYVRlYyxNYWVzdHJvIDMyLzk2fSwiCi0JCSJ7UGhpbGlwcyxQQ0E3MFBTfX0iKTsKLSNlbHNlCi1NT0RVTEVfREVTQ1JJUFRJT04oIkNpcnJ1cyBMb2dpYyBDUzQyMzUtOSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzV9LCIKKwkJIntQaGlsaXBzLFBDQTcwUFN9fSwiCisJCSJ7e0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM1fSwiCiAJCSJ7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzZ9LCIKIAkJIntDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzN30sIgogCQkie0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM4fSwiCkBAIC03MCwxNSArNjcsMTEgQEAKIAkJIntUeXBob29uIFNvdW5kc3lzdGVtLENTNDIzNkJ9LCIKIAkJIntUdXJ0bGUgQmVhY2gsTWFsaWJ1fSwiCiAJCSJ7VW5rbm93bixEaWdpdGFsIFBDIDUwMDAgT25ib2FyZH19Iik7Ci0jZW5kaWYKIAotI2lmZGVmIENTNDIzMgotI2RlZmluZSBJREVOVCAiQ1M0MjMyIgotI2RlZmluZSBERVZfTkFNRSAiY3M0MjMyIgotI2Vsc2UKLSNkZWZpbmUgSURFTlQgIkNTNDIzNisiCi0jZGVmaW5lIERFVl9OQU1FICJjczQyMzYiCi0jZW5kaWYKK01PRFVMRV9BTElBUygic25kX2NzNDIzMiIpOworCisjZGVmaW5lIElERU5UICJDUzQyMzIrIgorI2RlZmluZSBERVZfTkFNRSAiY3M0MjMyKyIKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMTI4LDkgKzEyMSw3IEBACiAjaWZkZWYgQ09ORklHX1BOUAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wY19yZWdpc3RlcmVkOwotI2lmZGVmIENTNDIzMgogc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKLSNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KIAogc3RydWN0IHNuZF9jYXJkX2NzNDIzNiB7CkBAIC0xNDUsMTEgKzEzNiwxMCBAQAogCiAjaWZkZWYgQ09ORklHX1BOUAogCi0jaWZkZWYgQ1M0MjMyCiAvKgogICogUE5QIEJJT1MKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNuZF9jczQyMzJfcG5wYmlvc2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNuZF9jczQyM3hfcG5wYmlvc2lkc1tdID0gewogCXsgLmlkID0gIkNTQzAxMDAiIH0sCiAJeyAuaWQgPSAiQ1NDMDAwMCIgfSwKIAkvKiBHdWlsbGVtb3QgVHVydGxlYmVhY2ggc29tZXRoaW5nIGFwcGVhcnMgdG8gYmUgY3M0MjMyIGNvbXBhdGlibGUKQEAgLTE1NywxMCArMTQ3LDggQEAKIAl7IC5pZCA9ICJHSU0wMTAwIiB9LAogCXsgLmlkID0gIiIgfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBzbmRfY3M0MjMyX3BucGJpb3NpZHMpOwotI2VuZGlmIC8qIENTNDIzMiAqLworTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHNuZF9jczQyM3hfcG5wYmlvc2lkcyk7CiAKLSNpZmRlZiBDUzQyMzIKICNkZWZpbmUgQ1M0MjNYX0lTQVBOUF9EUklWRVIJImNzNDIzMl9pc2FwbnAiCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfY3M0MjN4X3BucGlkc1tdID0gewogCS8qIFBoaWxpcHMgUENBNzBQUyAqLwpAQCAtMTc5LDEyICsxNjcsNiBAQAogCXsgLmlkID0gIkNTQ2YwMzIiLCAuZGV2cyA9IHsgeyAiQ1NDMDAwMCIgfSwgeyAiQ1NDMDAxMCIgfSwgeyAiQ1NDMDAwMyIgfSB9IH0sCiAJLyogTmV0ZmluaXR5IDMwMDAgb24tYm9hcmQgc291bmRjYXJkICovCiAJeyAuaWQgPSAiQ1NDZTgyNSIsIC5kZXZzID0geyB7ICJDU0MwMTAwIiB9LCB7ICJDU0MwMTEwIiB9LCB7ICJDU0MwMTBmIiB9IH0gfSwKLQkvKiAtLS0gKi8KLQl7IC5pZCA9ICIiIH0JLyogZW5kICovCi19OwotI2Vsc2UgLyogQ1M0MjM2ICovCi0jZGVmaW5lIENTNDIzWF9JU0FQTlBfRFJJVkVSCSJjczQyMzZfaXNhcG5wIgotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2NzNDIzeF9wbnBpZHNbXSA9IHsKIAkvKiBJbnRlbCBNYXJsaW4gU3Bpa2UgTW90aGVyYm9hcmQgLSBDUzQyMzUgKi8KIAl7IC5pZCA9ICJDU0MwMjI1IiwgLmRldnMgPSB7IHsgIkNTQzAwMDAiIH0sIHsgIkNTQzAwMTAiIH0sIHsgIkNTQzAwMDMiIH0gfSB9LAogCS8qIEludGVsIE1hcmxpbiBTcGlrZSBNb3RoZXJib2FyZCAoIzIpIC0gQ1M0MjM1ICovCkBAIC0yNjYsNyArMjQ4LDYgQEAKIAkvKiAtLS0gKi8KIAl7IC5pZCA9ICIiIH0JLyogZW5kICovCiB9OwotI2VuZGlmCiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wX2NhcmQsIHNuZF9jczQyM3hfcG5waWRzKTsKIApAQCAtMzIzLDE3ICszMDQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENTNDIzMgotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfY3M0MjMyX3BucChpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2ICphY2FyZCwKLQkJCQkJIHN0cnVjdCBwbnBfZGV2ICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfY3M0MjN4X3BucChpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2ICphY2FyZCwKKwkJCQkJIHN0cnVjdCBwbnBfZGV2ICpwZGV2LAorCQkJCQkgc3RydWN0IHBucF9kZXYgKmNkZXYpCiB7CiAJYWNhcmQtPndzcyA9IHBkZXY7CiAJaWYgKHNuZF9jczQyM3hfcG5wX2luaXRfd3NzKGRldiwgYWNhcmQtPndzcykgPCAwKQogCQlyZXR1cm4gLUVCVVNZOwotCWNwb3J0W2Rldl0gPSAtMTsKKwlpZiAoY2RldikKKwkJY3BvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KGNkZXYsIDApOworCWVsc2UKKwkJY3BvcnRbZGV2XSA9IC0xOwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzeF9wbnBjKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgKmFjYXJkLAogCQkJCQkgIHN0cnVjdCBwbnBfY2FyZF9saW5rICpjYXJkLApAQCAtMzgyLDE2ICszNjUsMTggQEAKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGFjYXJkLT5yZXNfc2JfcG9ydCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jczQyM3hfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2NzNDIzeF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9jczQyMzYpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2NzNDIzNiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9jczQyMzZfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjN4X3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTQwOSw0MCArMzk0LDM5IEBACiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLSNpZmRlZiBDUzQyMzIKIAllcnIgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0W2Rldl0sIGNwb3J0W2Rldl0sCiAJCQkgICAgIGlycVtkZXZdLAogCQkJICAgICBkbWExW2Rldl0sIGRtYTJbZGV2XSwKLQkJCSAgICAgV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOworCQkJICAgICBXU1NfSFdfREVURUNUMywgMCwgJmNoaXApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWFjYXJkLT5jaGlwID0gY2hpcDsKKwlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjM2Ql9NQVNLKSB7CisJCXNuZF93c3NfZnJlZShjaGlwKTsKKwkJZXJyID0gc25kX2NzNDIzNl9jcmVhdGUoY2FyZCwKKwkJCQkJcG9ydFtkZXZdLCBjcG9ydFtkZXZdLAorCQkJCQlpcnFbZGV2XSwgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCisJCQkJCVdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlhY2FyZC0+Y2hpcCA9IGNoaXA7CiAKLQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2NzNDIzNl9wY20oY2hpcCwgMCwgJnBjbSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAotCWVyciA9IHNuZF93c3NfbWl4ZXIoY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jczQyMzZfbWl4ZXIoY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQlhY2FyZC0+Y2hpcCA9IGNoaXA7CisJCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsICZwY20pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAKLSNlbHNlIC8qIENTNDIzNiAqLwotCWVyciA9IHNuZF9jczQyMzZfY3JlYXRlKGNhcmQsCi0JCQkJcG9ydFtkZXZdLCBjcG9ydFtkZXZdLAotCQkJCWlycVtkZXZdLCBkbWExW2Rldl0sIGRtYTJbZGV2XSwKLQkJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JYWNhcmQtPmNoaXAgPSBjaGlwOwotCi0JZXJyID0gc25kX2NzNDIzNl9wY20oY2hpcCwgMCwgJnBjbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzbmRfY3M0MjM2X21peGVyKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotI2VuZGlmCisJCWVyciA9IHNuZF93c3NfbWl4ZXIoY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgcGNtLT5uYW1lKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVpLCBkbWEgJWkiLApAQCAtNTEyLDkgKzQ5Niw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF9jczQyM3hfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC01NzcsMTMgKzU2MSwxNCBAQAogCiAKICNpZmRlZiBDT05GSUdfUE5QCi0jaWZkZWYgQ1M0MjMyCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjMyX3BucGJpb3NfZGV0ZWN0KHN0cnVjdCBwbnBfZGV2ICpwZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wbnBiaW9zX2RldGVjdChzdHJ1Y3QgcG5wX2RldiAqcGRldiwKIAkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgaW50IGRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcG5wX2RldiAqY2RldjsKKwljaGFyIGNpZFtQTlBfSURfTEVOXTsKIAogCWlmIChwbnBfZGV2aWNlX2lzX2lzYXBucChwZGV2KSkKIAkJcmV0dXJuIC1FTk9FTlQ7CS8qIHdlIGhhdmUgYW5vdGhlciBwcm9jZWR1cmUgLSBjYXJkICovCkBAIC01OTQsMTAgKzU3OSwxOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoKGVyciA9IHNuZF9jYXJkX2NzNDIzMl9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYpKSA8IDApIHsKKwkvKiBwcmVwYXJlIHNlY29uZCBpZCAqLworCXN0cmNweShjaWQsIHBkZXYtPmlkWzBdLmlkKTsKKwljaWRbNV0gPSAnMSc7CisJY2RldiA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjZGV2LCAmKHBkZXYtPnByb3RvY29sLT5kZXZpY2VzKSwgcHJvdG9jb2xfbGlzdCkgeworCQlpZiAoIXN0cmNtcChjZGV2LT5pZFswXS5pZCwgY2lkKSkKKwkJCWJyZWFrOworCX0KKwllcnIgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9jYXJkX2NzNDIzeF9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYsIGNkZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUG5QIEJJT1MgZGV0ZWN0aW9uIGZhaWxlZCBmb3IgIiBJREVOVCAiXG4iKTsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTYxMiwzNSArNjA2LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfY3M0MjMyX3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKiBwZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9jczQyM3hfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqcGRldikKIHsKIAlzbmRfY2FyZF9mcmVlKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJcG5wX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNuZF9jczQyMzJfcG5wX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc25kX2NzNDIzeF9wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXJldHVybiBzbmRfY3M0MjN4X3N1c3BlbmQocG5wX2dldF9kcnZkYXRhKHBkZXYpKTsKIH0KIAotc3RhdGljIGludCBzbmRfY3M0MjMyX3BucF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBkZXYpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfcG5wX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqcGRldikKIHsKIAlyZXR1cm4gc25kX2NzNDIzeF9yZXN1bWUocG5wX2dldF9kcnZkYXRhKHBkZXYpKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgY3M0MjMyX3BucF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY3M0MjMyLXBucGJpb3MiLAotCS5pZF90YWJsZSA9IHNuZF9jczQyMzJfcG5wYmlvc2lkcywKLQkucHJvYmUgPSBzbmRfY3M0MjMyX3BucGJpb3NfZGV0ZWN0LAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY3M0MjMyX3BucF9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGNzNDIzeF9wbnBfZHJpdmVyID0geworCS5uYW1lID0gImNzNDIzeC1wbnBiaW9zIiwKKwkuaWRfdGFibGUgPSBzbmRfY3M0MjN4X3BucGJpb3NpZHMsCisJLnByb2JlID0gc25kX2NzNDIzeF9wbnBiaW9zX2RldGVjdCwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NzNDIzeF9wbnBfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNuZF9jczQyMzJfcG5wX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzbmRfY3M0MjMyX3BucF9yZXN1bWUsCisJLnN1c3BlbmQJPSBzbmRfY3M0MjN4X3BucF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc25kX2NzNDIzeF9wbnBfcmVzdW1lLAogI2VuZGlmCiB9OwotI2VuZGlmIC8qIENTNDIzMiAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjN4X3BucGNfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKQEAgLTY1Niw5ICs2NDksOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCWlmICgocmVzID0gc25kX2NhcmRfY3M0MjN4X3BucGMoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpc2FwbnAgZGV0ZWN0aW9uIGZhaWxlZCBhbmQgcHJvYmluZyBmb3IgIiBJREVOVAogCQkgICAgICAgIiBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKQEAgLTcxNCwxOCArNzA3LDE0IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCWlmICghZXJyKQogCQlpc2FfcmVnaXN0ZXJlZCA9IDE7Ci0jaWZkZWYgQ1M0MjMyCi0JZXJyID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmY3M0MjMyX3BucF9kcml2ZXIpOworCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9wbnBfZHJpdmVyKTsKIAlpZiAoIWVycikKIAkJcG5wX3JlZ2lzdGVyZWQgPSAxOwotI2VuZGlmCiAJZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjczQyM3hfcG5wY19kcml2ZXIpOwogCWlmICghZXJyKQogCQlwbnBjX3JlZ2lzdGVyZWQgPSAxOwotI2lmZGVmIENTNDIzMgogCWlmIChwbnBfcmVnaXN0ZXJlZCkKIAkJZXJyID0gMDsKLSNlbmRpZgogCWlmIChpc2FfcmVnaXN0ZXJlZCkKIAkJZXJyID0gMDsKICNlbmRpZgpAQCAtNzM3LDEwICs3MjYsOCBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAocG5wY19yZWdpc3RlcmVkKQogCQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmY3M0MjN4X3BucGNfZHJpdmVyKTsKLSNpZmRlZiBDUzQyMzIKIAlpZiAocG5wX3JlZ2lzdGVyZWQpCi0JCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY3M0MjMyX3BucF9kcml2ZXIpOwotI2VuZGlmCisJCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY3M0MjN4X3BucF9kcml2ZXIpOwogCWlmIChpc2FfcmVnaXN0ZXJlZCkKICNlbmRpZgogCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9pc2FfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMKaW5kZXggNmE4NWZkYy4uMzg4MzVmMyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMKQEAgLTg4LDEwICs4OCw2IEBACiAjaW5jbHVkZSA8c291bmQvd3NzLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KIAotTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUm91dGluZXMgZm9yIGNvbnRyb2wgb2YgQ1M0MjM1LzQyMzZCLzQyMzdCLzQyMzhCLzQyMzkgY2hpcHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogLyoKICAqCiAgKi8KQEAgLTI4Niw3ICsyODIsOCBAQAogCWlmIChoYXJkd2FyZSA9PSBXU1NfSFdfREVURUNUKQogCQloYXJkd2FyZSA9IFdTU19IV19ERVRFQ1QzOwogCWlmIChjcG9ydCA8IDB4MTAwKSB7Ci0JCXNuZF9wcmludGsoInBsZWFzZSwgc3BlY2lmeSBjb250cm9sIHBvcnQgZm9yIENTNDIzNisgY2hpcHNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwbGVhc2UsIHNwZWNpZnkgY29udHJvbCBwb3J0ICIKKwkJCSAgICJmb3IgQ1M0MjM2KyBjaGlwc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAllcnIgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0LCBjcG9ydCwKQEAgLTI5NSw3ICsyOTIsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKCEoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjM2Ql9NQVNLKSkgewotCSAgICAgICAgc25kX3ByaW50aygiQ1M0MjM2KzogTU9ERTMgYW5kIGV4dGVuZGVkIHJlZ2lzdGVycyBub3QgYXZhaWxhYmxlLCBoYXJkd2FyZT0weCV4XG4iLGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ1M0MjM2KzogTU9ERTMgYW5kIGV4dGVuZGVkIHJlZ2lzdGVycyAiCisJCQkgICAibm90IGF2YWlsYWJsZSwgaGFyZHdhcmU9MHgleFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgY2hpcCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTMwMywxNiArMzAxLDE5IEBACiAJewogCQlpbnQgaWR4OwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDg7IGlkeCsrKQotCQkJc25kX3ByaW50aygiQ0QlaSA9IDB4JXhcbiIsIGlkeCwgaW5iKGNoaXAtPmNwb3J0ICsgaWR4KSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkNEJWkgPSAweCV4XG4iLAorCQkJCSAgIGlkeCwgaW5iKGNoaXAtPmNwb3J0ICsgaWR4KSk7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgOTsgaWR4KyspCi0JCQlzbmRfcHJpbnRrKCJDJWkgPSAweCV4XG4iLCBpZHgsIHNuZF9jczQyMzZfY3RybF9pbihjaGlwLCBpZHgpKTsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQyVpID0gMHgleFxuIiwKKwkJCQkgICBpZHgsIHNuZF9jczQyMzZfY3RybF9pbihjaGlwLCBpZHgpKTsKIAl9CiAjZW5kaWYKIAl2ZXIxID0gc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDEpOwogCXZlcjIgPSBzbmRfY3M0MjM2X2V4dF9pbihjaGlwLCBDUzQyMzZfVkVSU0lPTik7CiAJc25kX3ByaW50ZGQoIkNTNDIzNjogWzB4JWx4XSBDMSAodmVyc2lvbikgPSAweCV4LCBleHQgPSAweCV4XG4iLCBjcG9ydCwgdmVyMSwgdmVyMik7CiAJaWYgKHZlcjEgIT0gdmVyMikgewotCQlzbmRfcHJpbnRrKCJDUzQyMzYrIGNoaXAgZGV0ZWN0ZWQsIGJ1dCBjb250cm9sIHBvcnQgMHglbHggaXMgbm90IHZhbGlkXG4iLCBjcG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNTNDIzNisgY2hpcCBkZXRlY3RlZCwgYnV0ICIKKwkJCSAgICJjb250cm9sIHBvcnQgMHglbHggaXMgbm90IHZhbGlkXG4iLCBjcG9ydCk7CiAJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBjaGlwKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtODgzLDcgKzg4NCw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0gJiAweDAyID8gMSA6IDA7CiAjaWYgMAotCXByaW50aygiZ2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiZ2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgIgorCSAgICAgICAiQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKIAkJCXNuZF93c3NfaW4oY2hpcCwgQ1M0MjMxX0FMVF9GRUFUVVJFXzEpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDMpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDQpLApAQCAtOTIwLDcgKzkyMiw4IEBACiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogCiAjaWYgMAotCXByaW50aygic2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAic2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgIgorCSAgICAgICAiQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKIAkJCXNuZF93c3NfaW4oY2hpcCwgQ1M0MjMxX0FMVF9GRUFUVVJFXzEpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDMpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDQpLApAQCAtMTAxNSwyMyArMTAxOCwzIEBACiAJfQogCXJldHVybiAwOwogfQotCi1FWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfY3JlYXRlKTsKLUVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9wY20pOwotRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X21peGVyKTsKLQotLyoKLSAqICBJTklUIHBhcnQKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBhbHNhX2NzNDIzNl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NzNDIzNl9leGl0KHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGFsc2FfY3M0MjM2X2luaXQpCi1tb2R1bGVfZXhpdChhbHNhX2NzNDIzNl9leGl0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2R0MDE5eC5jIGIvc291bmQvaXNhL2R0MDE5eC5jCmluZGV4IGEwMjQyYzMuLjgwZjViMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9kdDAxOXguYworKysgYi9zb3VuZC9pc2EvZHQwMTl4LmMKQEAgLTE1MCw5ICsxNTAsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4ICphY2FyZDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4KSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4KSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKaW5kZXggYjQ2Mzc3MS4uNDQyYjA4MSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYworKysgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCkBAIC00OSw2ICs0OSw3IEBACiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCiBzdGF0aWMgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogMHgyMjAsMHgyNDAsMHgyNjAgKi8KK3N0YXRpYyBsb25nIGZtX3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBVc3VhbGx5IDB4Mzg4ICovCiBzdGF0aWMgbG9uZyBtcHVfcG9ydFtTTkRSVl9DQVJEU10gPSB7WzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IC0xfTsKIHN0YXRpYyBpbnQgaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwkvKiA1LDcsOSwxMCAqLwogc3RhdGljIGludCBtcHVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwkvKiA1LDcsOSwxMCAqLwpAQCAtNjUsNiArNjYsOCBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZm1fcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtX3BvcnQsICJGTSBwb3J0ICMgZm9yIEVTMTY4OCBkcml2ZXIuIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pcnEsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1wdV9pcnEsICJNUFUtNDAxIElSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwpAQCAtMTIyLDkgKzEyNSw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc25kX2VzMTY4OF9sZWdhY3lfY3JlYXRlKGNhcmQsIGRldiwgbiwgJmNoaXApOwogCWlmIChlcnJvciA8IDApCkBAIC0xNDMsMTMgKzE0NiwxOSBAQAogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVpLCBkbWEgJWkiLCBwY20tPm5hbWUsCiAJCWNoaXAtPnBvcnQsIGNoaXAtPmlycSwgY2hpcC0+ZG1hOCk7CiAKLQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyLAotCQkJT1BMM19IV19PUEwzLCAwLCAmb3BsMykgPCAwKQotCQlkZXZfd2FybihkZXYsICJvcGwzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgY2hpcC0+cG9ydCk7Ci0JZWxzZSB7Ci0JCWVycm9yID0Jc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJZ290byBvdXQ7CisJaWYgKGZtX3BvcnRbbl0gPT0gU05EUlZfQVVUT19QT1JUKQorCQlmbV9wb3J0W25dID0gcG9ydFtuXTsJLyogc2hhcmUgdGhlIHNhbWUgcG9ydCAqLworCisJaWYgKGZtX3BvcnRbbl0gPiAwKSB7CisJCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwgZm1fcG9ydFtuXSwgZm1fcG9ydFtuXSArIDIsCisJCQkJT1BMM19IV19PUEwzLCAwLCAmb3BsMykgPCAwKQorCQkJZGV2X3dhcm4oZGV2LAorCQkJCSAib3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGZtX3BvcnRbbl0pOworCQllbHNlIHsKKwkJCWVycm9yID0Jc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQkJaWYgKGVycm9yIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQogCX0KIAogCWlmIChtcHVfaXJxW25dID49IDAgJiYgbXB1X2lycVtuXSAhPSBTTkRSVl9BVVRPX0lSUSAmJgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYwppbmRleCA0ZmJiNTA4Li40YzZlMTRmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYworKysgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYwpAQCAtNDUsNyArNDUsNyBAQAogCQkJcmV0dXJuIDE7CiAJCX0KICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCi0JcHJpbnRrKCJzbmRfZXMxNjg4X2RzcF9jb21tYW5kOiB0aW1lb3V0ICgweCV4KVxuIiwgdmFsKTsKKwlwcmludGsoS0VSTl9ERUJVRyAic25kX2VzMTY4OF9kc3BfY29tbWFuZDogdGltZW91dCAoMHgleClcbiIsIHZhbCk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NywxMyArMTY3LDE2IEBACiAJaHcgPSBFUzE2ODhfSFdfQVVUTzsKIAlzd2l0Y2ggKGNoaXAtPnZlcnNpb24gJiAweGZmZjApIHsKIAljYXNlIDB4NDg4MDoKLQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IEF1ZGlvRHJpdmUgRVM0ODggZGV0ZWN0ZWQsIGJ1dCBkcml2ZXIgaXMgaW4gYW5vdGhlciBwbGFjZVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBBdWRpb0RyaXZlIEVTNDg4IGRldGVjdGVkLCAiCisJCQkgICAiYnV0IGRyaXZlciBpcyBpbiBhbm90aGVyIHBsYWNlXG4iLCBjaGlwLT5wb3J0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FzZSAweDY4ODA6CiAJCWh3ID0gKGNoaXAtPnZlcnNpb24gJiAweDBmKSA+PSA4ID8gRVMxNjg4X0hXXzE2ODggOiBFUzE2ODhfSFdfNjg4OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogdW5rbm93biBBdWRpb0RyaXZlIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXggKEphenoxNiBzb3VuZGNhcmQ/KVxuIiwgY2hpcC0+cG9ydCwgY2hpcC0+dmVyc2lvbik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiB1bmtub3duIEF1ZGlvRHJpdmUgY2hpcCAiCisJCQkgICAid2l0aCB2ZXJzaW9uIDB4JXggKEphenoxNiBzb3VuZGNhcmQ/KVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnZlcnNpb24pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTIyMyw3ICsyMjYsNyBAQAogCQl9CiAJfQogI2lmIDAKLQlzbmRfcHJpbnRrKCJtcHUgY2ZnID0gMHgleFxuIiwgY2ZnKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1wdSBjZmcgPSAweCV4XG4iLCBjZmcpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJc25kX2VzMTY4OF9taXhlcl93cml0ZShjaGlwLCAweDQwLCBjZmcpOwpAQCAtMjM3LDcgKzI0MCw5IEBACiAJCWNmZyA9IDB4ZjA7CS8qIGVuYWJsZSBvbmx5IERNQSBjb3VudGVyIGludGVycnVwdCAqLwogCQlpcnFfYml0cyA9IGlycXNbY2hpcC0+aXJxICYgMHgwZl07CiAJCWlmIChpcnFfYml0cyA8IDApIHsKLQkJCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiBiYWQgSVJRICVkIGZvciBFUzE2ODggY2hpcCEhXG4iLCBjaGlwLT5wb3J0LCBjaGlwLT5pcnEpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IGJhZCBJUlEgJWQgIgorCQkJCSAgICJmb3IgRVMxNjg4IGNoaXAhIVxuIiwKKwkJCQkgICBjaGlwLT5wb3J0LCBjaGlwLT5pcnEpOwogI2lmIDAKIAkJCWlycV9iaXRzID0gMDsKIAkJCWNmZyA9IDB4MTA7CkBAIC0yNTAsNyArMjU1LDggQEAKIAkJY2ZnID0gMHhmMDsJLyogZXh0ZW5kZWQgbW9kZSBETUEgZW5hYmxlICovCiAJCWRtYSA9IGNoaXAtPmRtYTg7CiAJCWlmIChkbWEgPiAzIHx8IGRtYSA9PSAyKSB7Ci0JCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogYmFkIERNQSBjaGFubmVsICVkIGZvciBFUzE2ODggY2hpcCEhXG4iLCBjaGlwLT5wb3J0LCBkbWEpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IGJhZCBETUEgY2hhbm5lbCAlZCAiCisJCQkJICAgImZvciBFUzE2ODggY2hpcCEhXG4iLCBjaGlwLT5wb3J0LCBkbWEpOwogI2lmIDAKIAkJCWRtYV9iaXRzID0gMDsKIAkJCWNmZyA9IDB4MDA7CS8qIGRpc2FibGUgYWxsIERNQSAqLwpAQCAtMzQxLDggKzM0Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwkvKiBzb21ldGhpbmcgaXMgd3JvbmcgKi8KIAl9CiAjaWYgMAotCXByaW50aygidHJpZ2dlcjogdmFsID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCB2YWwsIHZhbHVlKTsKLQlwcmludGsoInRyaWdnZXI6IHBvaW50ZXIgPSAweCV4XG4iLCBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+ZG1hX3NpemUpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidHJpZ2dlcjogdmFsID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCB2YWwsIHZhbHVlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidHJpZ2dlcjogcG9pbnRlciA9IDB4JXhcbiIsCisJICAgICAgIHNuZF9kbWFfcG9pbnRlcihjaGlwLT5kbWE4LCBjaGlwLT5kbWFfc2l6ZSkpOwogI2VuZGlmCiAJc25kX2VzMTY4OF93cml0ZShjaGlwLCAweGI4LCAodmFsICYgMHhmMCkgfCB2YWx1ZSk7CiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE4eHguYyBiL3NvdW5kL2lzYS9lczE4eHguYwppbmRleCA5MDQ5OGU0Li44Y2ZiZmY3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxOHh4LmMKKysrIGIvc291bmQvaXNhL2VzMTh4eC5jCkBAIC0yMTI1LDEwICsyMTI1LDEwIEBACiAjZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpCQkwCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2VzMTh4eF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfZXMxOHh4X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewotCXJldHVybiBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfYXVkaW9kcml2ZSkpOworCXJldHVybiBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfYXVkaW9kcml2ZSksIGNhcmRwKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2F1ZGlvZHJpdmVfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtMjE5Nyw5ICsyMTk3LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIGRldnB0cik7CiAJaWYgKChlcnIgPSBzbmRfYXVkaW9kcml2ZV9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTIzMDMsOSArMjMwMyw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfYXVkaW9kcml2ZV9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTIzNjIsOSArMjM2Miw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAKIAlpZiAoKHJlcyA9IHNuZF9hdWRpb2RyaXZlX3BucGMoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jIGIvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKaW5kZXggZjQ1ZjYxMS4uMzZjMjdjOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKQEAgLTQ1LDcgKzQ1LDggQEAKIAl1bnNpZ25lZCBjaGFyIGRtYV9jbWQ7CiAJdW5zaWduZWQgaW50IGFkZHJlc3NfaGlnaDsKIAotCS8vIHNuZF9wcmludGsoImRtYV90cmFuc2ZlcjogYWRkcj0weCV4LCBidWY9MHglbHgsIGNvdW50PTB4JXhcbiIsIGFkZHIsIChsb25nKSBidWYsIGNvdW50KTsKKwlzbmRfcHJpbnRkZCgiZG1hX3RyYW5zZmVyOiBhZGRyPTB4JXgsIGJ1Zj0weCVseCwgY291bnQ9MHgleFxuIiwKKwkJICAgIGFkZHIsIGJ1Zl9hZGRyLCBjb3VudCk7CiAKIAlpZiAoZ3VzLT5nZjEuZG1hMSA+IDMpIHsKIAkJaWYgKGd1cy0+Z2YxLmVuaF9tb2RlKSB7CkBAIC03Nyw3ICs3OCw4IEBACiAJc25kX2dmMV9kbWFfYWNrKGd1cyk7CiAJc25kX2RtYV9wcm9ncmFtKGd1cy0+Z2YxLmRtYTEsIGJ1Zl9hZGRyLCBjb3VudCwgZG1hX2NtZCAmIFNORFJWX0dGMV9ETUFfUkVBRCA/IERNQV9NT0RFX1JFQUQgOiBETUFfTU9ERV9XUklURSk7CiAjaWYgMAotCXNuZF9wcmludGsoImFkZHJlc3MgPSAweCV4LCBjb3VudCA9IDB4JXgsIGRtYV9jbWQgPSAweCV4XG4iLCBhZGRyZXNzIDw8IDEsIGNvdW50LCBkbWFfY21kKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImFkZHJlc3MgPSAweCV4LCBjb3VudCA9IDB4JXgsIGRtYV9jbWQgPSAweCV4XG4iLAorCQkgICBhZGRyZXNzIDw8IDEsIGNvdW50LCBkbWFfY21kKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKGd1cy0+Z2YxLmVuaF9tb2RlKSB7CkBAIC0xNDIsNyArMTQ0LDkgQEAKIAlzbmRfZ2YxX2RtYV9wcm9ncmFtKGd1cywgYmxvY2stPmFkZHIsIGJsb2NrLT5idWZfYWRkciwgYmxvY2stPmNvdW50LCAodW5zaWduZWQgc2hvcnQpIGJsb2NrLT5jbWQpOwogCWtmcmVlKGJsb2NrKTsKICNpZiAwCi0JcHJpbnRrKCJwcm9ncmFtIGRtYSAoSVJRKSAtIGFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLCBhZGRyLCAobG9uZykgYnVmZmVyLCBjb3VudCwgY21kKTsKKwlzbmRfcHJpbnRkKEtFUk5fREVCVUcgInByb2dyYW0gZG1hIChJUlEpIC0gIgorCQkgICAiYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsCisJCSAgIGJsb2NrLT5hZGRyLCBibG9jay0+YnVmX2FkZHIsIGJsb2NrLT5jb3VudCwgYmxvY2stPmNtZCk7CiAjZW5kaWYKIH0KIApAQCAtMjAzLDEzICsyMDcsMTYgQEAKIAl9CiAJKmJsb2NrID0gKl9fYmxvY2s7CiAJYmxvY2stPm5leHQgPSBOVUxMOwotI2lmIDAKLQlwcmludGsoImFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLCBibG9jay0+YWRkciwgKGxvbmcpIGJsb2NrLT5idWZmZXIsIGJsb2NrLT5jb3VudCwgYmxvY2stPmNtZCk7Ci0jZW5kaWYKLSNpZiAwCi0JcHJpbnRrKCJndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCA9IDB4JWx4XG4iLCAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCk7Ci0JcHJpbnRrKCJndXMtPmdmMS5kbWFfZGF0YV9wY20gPSAweCVseFxuIiwgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtKTsKLSNlbmRpZgorCisJc25kX3ByaW50ZGQoImFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLAorCQkgICAgYmxvY2stPmFkZHIsIChsb25nKSBibG9jay0+YnVmZmVyLCBibG9jay0+Y291bnQsCisJCSAgICBibG9jay0+Y21kKTsKKworCXNuZF9wcmludGRkKCJndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCA9IDB4JWx4XG4iLAorCQkgICAgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QpOworCXNuZF9wcmludGRkKCJndXMtPmdmMS5kbWFfZGF0YV9wY20gPSAweCVseFxuIiwKKwkJICAgIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbSk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3VzLT5kbWFfbG9jaywgZmxhZ3MpOwogCWlmIChzeW50aCkgewogCQlpZiAoZ3VzLT5nZjEuZG1hX2RhdGFfc3ludGhfbGFzdCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYwppbmRleCAwNDE4OTRkLi4yMDU1YWZmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYwpAQCAtNDEsNyArNDEsNyBAQAogCWlmIChzdGF0dXMgPT0gMCkKIAkJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiAJaGFuZGxlZCA9IDE7Ci0JLy8gc25kX3ByaW50aygiSVJROiBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiSVJROiBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOyAqLwogCWlmIChzdGF0dXMgJiAweDAyKSB7CiAJCVNUQVRfQUREKGd1cy0+Z2YxLmludGVycnVwdF9zdGF0X21pZGlfaW4pOwogCQlpZiAoZ3VzLT5nZjEuaW50ZXJydXB0X2hhbmRsZXJfbWlkaV9pbikKQEAgLTY1LDcgKzY1LDkgQEAKIAkJCQljb250aW51ZTsJLyogbXVsdGkgcmVxdWVzdCAqLwogCQkJYWxyZWFkeSB8PSBfY3VycmVudF87CS8qIG1hcmsgcmVxdWVzdCAqLwogI2lmIDAKLQkJCXByaW50aygidm9pY2UgPSAlaSwgdm9pY2Vfc3RhdHVzID0gMHgleCwgdm9pY2VfdmVyaWZ5ID0gJWlcbiIsIHZvaWNlLCB2b2ljZV9zdGF0dXMsIGluYihHVVNQKGd1cywgR0YxUEFHRSkpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2b2ljZSA9ICVpLCB2b2ljZV9zdGF0dXMgPSAweCV4LCAiCisJCQkgICAgICAgInZvaWNlX3ZlcmlmeSA9ICVpXG4iLAorCQkJICAgICAgIHZvaWNlLCB2b2ljZV9zdGF0dXMsIGluYihHVVNQKGd1cywgR0YxUEFHRSkpKTsKICNlbmRpZgogCQkJcHZvaWNlID0gJmd1cy0+Z2YxLnZvaWNlc1t2b2ljZV07IAogCQkJaWYgKHB2b2ljZS0+dXNlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jCmluZGV4IDM4NTEwYWUuLmVkYjExZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jCkBAIC04Miw3ICs4MiwxMCBAQAogCiAJY291bnQgKz0gb2Zmc2V0ICYgMzE7CiAJb2Zmc2V0ICY9IH4zMTsKLQkvLyBzbmRfcHJpbnRrKCJibG9jayBjaGFuZ2UgLSBvZmZzZXQgPSAweCV4LCBjb3VudCA9IDB4JXhcbiIsIG9mZnNldCwgY291bnQpOworCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJibG9jayBjaGFuZ2UgLSBvZmZzZXQgPSAweCV4LCBjb3VudCA9IDB4JXhcbiIsCisJCSAgIG9mZnNldCwgY291bnQpOworCSovCiAJbWVtc2V0KCZibG9jaywgMCwgc2l6ZW9mKGJsb2NrKSk7CiAJYmxvY2suY21kID0gU05EUlZfR0YxX0RNQV9JUlE7CiAJaWYgKHNuZF9wY21fZm9ybWF0X3Vuc2lnbmVkKHJ1bnRpbWUtPmZvcm1hdCkpCkBAIC0xMzUsNyArMTM4LDExIEBACiAJCWN1cnIgPSBiZWdpbiArIChwY21wLT5icG9zICogcGNtcC0+YmxvY2tfc2l6ZSkgLyBydW50aW1lLT5jaGFubmVsczsKIAkJZW5kID0gY3VyciArIChwY21wLT5ibG9ja19zaXplIC8gcnVudGltZS0+Y2hhbm5lbHMpOwogCQllbmQgLT0gc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KSA9PSAxNiA/IDIgOiAxOwotCQkvLyBzbmRfcHJpbnRrKCJpbml0OiBjdXJyPTB4JXgsIGJlZ2luPTB4JXgsIGVuZD0weCV4LCBjdHJsPTB4JXgsIHJhbXA9MHgleCwgcmF0ZT0weCV4XG4iLCBjdXJyLCBiZWdpbiwgZW5kLCB2b2ljZV9jdHJsLCByYW1wX2N0cmwsIHJhdGUpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6IGN1cnI9MHgleCwgYmVnaW49MHgleCwgZW5kPTB4JXgsICIKKwkJCSAgICJjdHJsPTB4JXgsIHJhbXA9MHgleCwgcmF0ZT0weCV4XG4iLAorCQkJICAgY3VyciwgYmVnaW4sIGVuZCwgdm9pY2VfY3RybCwgcmFtcF9jdHJsLCByYXRlKTsKKwkJKi8KIAkJcGFuID0gcnVudGltZS0+Y2hhbm5lbHMgPT0gMiA/ICghdm9pY2UgPyAxIDogMTQpIDogODsKIAkJdm9sID0gIXZvaWNlID8gZ3VzLT5nZjEucGNtX3ZvbHVtZV9sZXZlbF9sZWZ0IDogZ3VzLT5nZjEucGNtX3ZvbHVtZV9sZXZlbF9yaWdodDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTIwNSw5ICsyMTIsMTEgQEAKIAlyYW1wX2N0cmwgPSAoc25kX2dmMV9yZWFkOChndXMsIFNORFJWX0dGMV9WQl9WT0xVTUVfQ09OVFJPTCkgJiB+MHhhNCkgfCAweDAzOwogI2lmIDAKIAlzbmRfZ2YxX3NlbGVjdF92b2ljZShndXMsIHB2b2ljZS0+bnVtYmVyKTsKLQlwcmludGsoInBvc2l0aW9uID0gMHgleFxuIiwgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBvc2l0aW9uID0gMHgleFxuIiwKKwkgICAgICAgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwY21wLT5wdm9pY2VzWzFdLT5udW1iZXIpOwotCXByaW50aygicG9zaXRpb24gPSAweCV4XG4iLCAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicG9zaXRpb24gPSAweCV4XG4iLAorCSAgICAgICAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKIAlzbmRfZ2YxX3NlbGVjdF92b2ljZShndXMsIHB2b2ljZS0+bnVtYmVyKTsKICNlbmRpZgogCXBjbXAtPmJwb3MrKzsKQEAgLTI5OSw3ICszMDgsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvLyBwcmludGsoInBva2UgYmxvY2s7IGJ1ZiA9IDB4JXgsIHBvcyA9ICVpLCBjb3VudCA9ICVpLCBwb3J0ID0gMHgleFxuIiwgKGludClidWYsIHBvcywgY291bnQsIGd1cy0+Z2YxLnBvcnQpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInBva2UgYmxvY2s7IGJ1ZiA9IDB4JXgsIHBvcyA9ICVpLCBjb3VudCA9ICVpLCBwb3J0ID0gMHgleFxuIiwKKwkgICAgICAgKGludClidWYsIHBvcywgY291bnQsIGd1cy0+Z2YxLnBvcnQpOworCSovCiAJd2hpbGUgKGNvdW50ID4gMCkgewogCQlsZW4gPSBjb3VudDsKIAkJaWYgKGxlbiA+IDUxMikJCS8qIGxpbWl0LCB0byBhbGxvdyBJUlEgKi8KQEAgLTY4MCw3ICs2OTMsOCBAQAogCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9nZjFfcGNtX3BsYXliYWNrX2ZyZWU7CiAKICNpZiAwCi0JcHJpbnRrKCJwbGF5YmFjay5idWZmZXIgPSAweCVseCwgZ2YxLnBjbV9idWZmZXIgPSAweCVseFxuIiwgKGxvbmcpIHBjbS0+cGxheWJhY2suYnVmZmVyLCAobG9uZykgZ3VzLT5nZjEucGNtX2J1ZmZlcik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBsYXliYWNrLmJ1ZmZlciA9IDB4JWx4LCBnZjEucGNtX2J1ZmZlciA9IDB4JWx4XG4iLAorCSAgICAgICAobG9uZykgcGNtLT5wbGF5YmFjay5idWZmZXIsIChsb25nKSBndXMtPmdmMS5wY21fYnVmZmVyKTsKICNlbmRpZgogCWlmICgoZXJyID0gc25kX2dmMV9kbWFfaW5pdChndXMpKSA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKaW5kZXggZjBhZjNmNy4uMjFjYzQyZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYwpAQCAtMTI5LDggKzEyOSwxNCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndXMtPnVhcnRfY21kX2xvY2ssIGZsYWdzKTsKICNpZiAwCi0Jc25kX3ByaW50aygicmVhZCBpbml0IC0gZW5hYmxlID0gJWksIGNtZCA9IDB4JXgsIHN0YXQgPSAweCV4XG4iLCBndXMtPnVhcnRfZW5hYmxlLCBndXMtPmdmMS51YXJ0X2NtZCwgc25kX2dmMV91YXJ0X3N0YXQoZ3VzKSk7Ci0Jc25kX3ByaW50aygiWzB4JXhdIHJlZyAoY3RybC9zdGF0dXMpID0gMHgleCwgcmVnIChkYXRhKSA9IDB4JXggKHBhZ2UgPSAweCV4KVxuIiwgZ3VzLT5nZjEucG9ydCArIDB4MTAwLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAwKSwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMSksIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDIpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInJlYWQgaW5pdCAtIGVuYWJsZSA9ICVpLCBjbWQgPSAweCV4LCBzdGF0ID0gMHgleFxuIiwKKwkJICAgZ3VzLT51YXJ0X2VuYWJsZSwgZ3VzLT5nZjEudWFydF9jbWQsIHNuZF9nZjFfdWFydF9zdGF0KGd1cykpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAiWzB4JXhdIHJlZyAoY3RybC9zdGF0dXMpID0gMHgleCwgcmVnIChkYXRhKSA9IDB4JXggIgorCQkgICAiKHBhZ2UgPSAweCV4KVxuIiwKKwkJICAgZ3VzLT5nZjEucG9ydCArIDB4MTAwLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAwKSwKKwkJICAgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMSksIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDIpKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYwppbmRleCA0MjY1MzJhLi4wODZiOGYwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYwpAQCAtMTQ4LDkgKzE0OCw5IEBACiAJc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHBjbV9jaGFubmVsc1tuXSA8IDIpCiAJCXBjbV9jaGFubmVsc1tuXSA9IDI7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCmluZGV4IDdhZDRjM2IuLjE4MGE4ZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCkBAIC0yNDEsOSArMjQxLDkgQEAKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAobXB1X3BvcnRbbl0gPT0gU05EUlZfQVVUT19QT1JUKQogCQltcHVfcG9ydFtuXSA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwppbmRleCBmOTRjMTk3Li5mMjZlYWM4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKQEAgLTIxNCwxMCArMjE0LDEwIEBACiAJc3RydWN0IHNuZF93c3MgKndzczsKIAlzdHJ1Y3Qgc25kX2d1c21heCAqbWF4Y2FyZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZ3VzbWF4KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZ3VzbWF4KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ndXNtYXhfZnJlZTsKIAltYXhjYXJkID0gKHN0cnVjdCBzbmRfZ3VzbWF4ICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCW1heGNhcmQtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKaW5kZXggNWZhZWNmYi4uNTM0YTZlYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBidXMtPnByaXZhdGVfdmFsdWU7CiAKICNpZiAwCi0JcHJpbnRrKCJpMmNfc2V0bGluZXMgLSAweCVseCA8LSAlaSwlaVxuIiwgcG9ydCwgY3RybCwgZGF0YSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19zZXRsaW5lcyAtIDB4JWx4IDwtICVpLCVpXG4iLCBwb3J0LCBjdHJsLCBkYXRhKTsKICNlbmRpZgogCW91dGIoKGRhdGEgPDwgMSkgfCBjdHJsLCBwb3J0KTsKIAl1ZGVsYXkoMTApOwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIAlyZXMgPSBpbmIocG9ydCkgJiAxOwogI2lmIDAKLQlwcmludGsoImkyY19nZXRjbG9ja2xpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX2dldGNsb2NrbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOwogI2VuZGlmCiAJcmV0dXJuIHJlczsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQl1ZGVsYXkoMTApOwogCXJlcyA9IChpbmIocG9ydCkgJiAyKSA+PiAxOwogI2lmIDAKLQlwcmludGsoImkyY19nZXRkYXRhbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOworCXByaW50ayhLRVJOX0RFQlVHICJpMmNfZ2V0ZGF0YWxpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKICNlbmRpZgogCXJldHVybiByZXM7CiB9CkBAIC0zNDIsNyArMzQyLDggQEAKIAkJCXNuZF9nZjFfcG9rZShndXMsIGxvY2FsLCBkKTsKIAkJCXNuZF9nZjFfcG9rZShndXMsIGxvY2FsICsgMSwgZCArIDEpOwogI2lmIDAKLQkJCXByaW50aygiZCA9IDB4JXgsIGxvY2FsID0gMHgleCwgbG9jYWwgKyAxID0gMHgleCwgaWR4IDw8IDIyID0gMHgleFxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJkID0gMHgleCwgbG9jYWwgPSAweCV4LCAiCisJCQkgICAgICAgImxvY2FsICsgMSA9IDB4JXgsIGlkeCA8PCAyMiA9IDB4JXhcbiIsCiAJCQkgICAgICAgZCwKIAkJCSAgICAgICBzbmRfZ2YxX3BlZWsoZ3VzLCBsb2NhbCksCiAJCQkgICAgICAgc25kX2dmMV9wZWVrKGd1cywgbG9jYWwgKyAxKSwKQEAgLTM1Niw3ICszNTcsOCBAQAogCQl9CiAJfQogI2lmIDAKLQlwcmludGsoInNpemVzOiAlaSAlaSAlaSAlaVxuIiwgc2l6ZXNbMF0sIHNpemVzWzFdLCBzaXplc1syXSwgc2l6ZXNbM10pOworCXByaW50ayhLRVJOX0RFQlVHICJzaXplczogJWkgJWkgJWkgJWlcbiIsCisJICAgICAgIHNpemVzWzBdLCBzaXplc1sxXSwgc2l6ZXNbMl0sIHNpemVzWzNdKTsKICNlbmRpZgogfQogCkBAIC00MTAsMTIgKzQxMiwxMiBAQAogCQlsbWN0ID0gKHBzaXplc1szXSA8PCAyNCkgfCAocHNpemVzWzJdIDw8IDE2KSB8CiAJCSAgICAocHNpemVzWzFdIDw8IDgpIHwgcHNpemVzWzBdOwogI2lmIDAKLQkJcHJpbnRrKCJsbWN0ID0gMHglMDh4XG4iLCBsbWN0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImxtY3QgPSAweCUwOHhcbiIsIGxtY3QpOwogI2VuZGlmCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxtYyk7IGkrKykKIAkJCWlmIChsbWN0ID09IGxtY1tpXSkgewogI2lmIDAKLQkJCQlwcmludGsoImZvdW5kICEhISAlaVxuIiwgaSk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImZvdW5kICEhISAlaVxuIiwgaSk7CiAjZW5kaWYKIAkJCQlzbmRfZ2YxX3dyaXRlMTYoZ3VzLCBTTkRSVl9HRjFfR1dfTUVNT1JZX0NPTkZJRywgKHNuZF9nZjFfbG9vazE2KGd1cywgU05EUlZfR0YxX0dXX01FTU9SWV9DT05GSUcpICYgMHhmZmYwKSB8IGkpOwogCQkJCXNuZF9pbnRlcndhdmVfYmFua19zaXplcyhndXMsIHBzaXplcyk7CkBAIC02MjYsMjAgKzYyOCwyMiBAQAogCQlmcmVlX2lycShpd2NhcmQtPmlycSwgKHZvaWQgKilpd2NhcmQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfaW50ZXJ3YXZlICppd2NhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfaW50ZXJ3YXZlKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfaW50ZXJ3YXZlKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWl3Y2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpd2NhcmQtPmNhcmQgPSBjYXJkOwogCWl3Y2FyZC0+aXJxID0gLTE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2ludGVyd2F2ZV9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9pbnRlcndhdmVfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNzc4LDkgKzc4Miw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIGRldnB0cik7CiAJaWYgKChlcnIgPSBzbmRfaW50ZXJ3YXZlX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewpAQCAtODc2LDkgKzg4MCw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCQkJCi0JY2FyZCA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCiAJaWYgKChyZXMgPSBzbmRfaW50ZXJ3YXZlX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvTWFrZWZpbGUgYi9zb3VuZC9pc2EvbXNuZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTcxYzBhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisKK3NuZC1tc25kLWxpYi1vYmpzIDo9IG1zbmQubyBtc25kX21pZGkubyBtc25kX3Bpbm5hY2xlX21peGVyLm8KK3NuZC1tc25kLXBpbm5hY2xlLW9ianMgOj0gbXNuZF9waW5uYWNsZS5vCitzbmQtbXNuZC1jbGFzc2ljLW9ianMgOj0gbXNuZF9jbGFzc2ljLm8KKworIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQorb2JqLSQoQ09ORklHX1NORF9NU05EX1BJTk5BQ0xFKSArPSBzbmQtbXNuZC1waW5uYWNsZS5vIHNuZC1tc25kLWxpYi5vCitvYmotJChDT05GSUdfU05EX01TTkRfQ0xBU1NJQykgKz0gc25kLW1zbmQtY2xhc3NpYy5vIHNuZC1tc25kLWxpYi5vCisKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmQuYyBiL3NvdW5kL2lzYS9tc25kL21zbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY0NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZC5jCkBAIC0wLDAgKzEsNzA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogMjAwMi8wNi8zMCBLYXJzdGVuIFdpZXNlOgorICoJcmVtb3ZlZCBrZXJuZWwtdmVyc2lvbiBkZXBlbmRlbmNpZXMuCisgKglyaXBwZWQgZnJvbSBsaW51eCBrZXJuZWwgMi40LjE4IChPU1MgSW1wbGVtZW50YXRpb24pIGJ5IG1lLgorICoJSW4gdGhlIE9TUyBWZXJzaW9uLCB0aGlzIGZpbGUgaXMgY29tcGlsZWQgdG8gYSBzZXBhcmF0ZSBNT0RVTEUsCisgKgl0aGF0IGlzIHVzZWQgYnkgdGhlIHBpbm5hY2xlIGFuZCB0aGUgY2xhc3NpYyBkcml2ZXIuCisgKglzaW5jZSB0aGVyZSBpcyBubyBjbGFzc2ljIGRyaXZlciBmb3IgYWxzYSB5ZXQgKGkgZG9udCBoYXZlIGEgY2xhc3NpYworICoJJiB3cml0aW5nIG9uZSBibGluZGZvbGQgaXMgZGlmZmljdWx0KSB0aGlzIGZpbGUncyBvYmplY3QgaXMgc3RhdGljYWxseQorICoJbGlua2VkIGludG8gdGhlIHBpbm5hY2xlLWRyaXZlci1tb2R1bGUgZm9yIG5vdy4JbG9vayBmb3IgdGhlIHN0cmluZworICoJCSJ1bmNvbW1lbnQgdGhpcyB0byBtYWtlIHRoaXMgYSBtb2R1bGUgYWdhaW4iCisgKgl0byBkbyBndWVzcyB3aGF0LgorICoKKyAqIHRoZSBmb2xsb3dpbmcgaXMgYSBjb3B5IG9mIHRoZSAyLjQuMTggT1NTIEZSRUUgZmlsZS1oZWFkaW5nIGNvbW1lbnQ6CisgKgorICogbXNuZC5jIC0gRHJpdmVyIEJhc2UKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKKyNpbmNsdWRlICJtc25kLmgiCisKKyNkZWZpbmUgTE9HTkFNRQkJCSJtc25kIgorCisKK3ZvaWQgc25kX21zbmRfaW5pdF9xdWV1ZSh2b2lkICpiYXNlLCBpbnQgc3RhcnQsIGludCBzaXplKQoreworCXdyaXRldyhQQ1RPRFNQX0JBU0VEKHN0YXJ0KSwgYmFzZSArIEpRU193U3RhcnQpOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVChzaXplKSAtIDEsIGJhc2UgKyBKUVNfd1NpemUpOworCXdyaXRldygwLCBiYXNlICsgSlFTX3dIZWFkKTsKKwl3cml0ZXcoMCwgYmFzZSArIEpRU193VGFpbCk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2luaXRfcXVldWUpOworCitzdGF0aWMgaW50IHNuZF9tc25kX3dhaXRfVFhERShzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXdoaWxlICh0aW1lb3V0LS0gPiAwKQorCQlpZiAoaW5iKGlvICsgSFBfSVNSKSAmIEhQSVNSX1RYREUpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3dhaXRfSEMwKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGludCBpbyA9IGRldi0+aW87CisJaW50IHRpbWVvdXQgPSAxMDAwOworCisJd2hpbGUgKHRpbWVvdXQtLSA+IDApCisJCWlmICghKGluYihpbyArIEhQX0NWUikgJiBIUENWUl9IQykpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlPOworfQorCitpbnQgc25kX21zbmRfc2VuZF9kc3BfY21kKHN0cnVjdCBzbmRfbXNuZCAqZGV2LCB1OCBjbWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc25kX21zbmRfd2FpdF9IQzAoZGV2KSA9PSAwKSB7CisJCW91dGIoY21kLCBkZXYtPmlvICsgSFBfQ1ZSKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBTZW5kIERTUCBjb21tYW5kIHRpbWVvdXRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3NlbmRfZHNwX2NtZCk7CisKK2ludCBzbmRfbXNuZF9zZW5kX3dvcmQoc3RydWN0IHNuZF9tc25kICpkZXYsIHVuc2lnbmVkIGNoYXIgaGlnaCwKKwkJICAgdW5zaWduZWQgY2hhciBtaWQsIHVuc2lnbmVkIGNoYXIgbG93KQoreworCXVuc2lnbmVkIGludCBpbyA9IGRldi0+aW87CisKKwlpZiAoc25kX21zbmRfd2FpdF9UWERFKGRldikgPT0gMCkgeworCQlvdXRiKGhpZ2gsIGlvICsgSFBfVFhIKTsKKwkJb3V0YihtaWQsIGlvICsgSFBfVFhNKTsKKwkJb3V0Yihsb3csIGlvICsgSFBfVFhMKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IFNlbmQgaG9zdCB3b3JkIHRpbWVvdXRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3NlbmRfd29yZCk7CisKK2ludCBzbmRfbXNuZF91cGxvYWRfaG9zdChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgY29uc3QgdTggKmJpbiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWlmIChsZW4gJSAzICE9IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkgICAiOiBVcGxvYWQgaG9zdCBkYXRhIG5vdCBtdWx0aXBsZSBvZiAzIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIGJpbltpXSwgYmluW2kgKyAxXSwgYmluW2kgKyAyXSkpCisJCQlyZXR1cm4gLUVJTzsKKworCWluYihkZXYtPmlvICsgSFBfUlhMKTsKKwlpbmIoZGV2LT5pbyArIEhQX0NWUik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfdXBsb2FkX2hvc3QpOworCitpbnQgc25kX21zbmRfZW5hYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRldi0+aXJxX3JlZisrKQorCQlyZXR1cm4gMDsKKworCXNuZF9wcmludGRkKExPR05BTUUgIjogRW5hYmxpbmcgSVJRXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc25kX21zbmRfd2FpdF9UWERFKGRldikgPT0gMCkgeworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSB8IEhQSUNSX1RSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQlpZiAoZGV2LT50eXBlID09IG1zbmRDbGFzc2ljKQorCQkJb3V0YihkZXYtPmlycWlkLCBkZXYtPmlvICsgSFBfSVJRTSk7CisKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgJiB+SFBJQ1JfVFJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpIHwgSFBJQ1JfUlJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCQlzbmRfbXNuZF9pbml0X3F1ZXVlKGRldi0+RFNQUSwgZGV2LT5kc3BxX2RhdGFfYnVmZiwKKwkJCQkgICAgZGV2LT5kc3BxX2J1ZmZfc2l6ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRW5hYmxlIElSUSBmYWlsZWRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2VuYWJsZV9pcnEpOworCitpbnQgc25kX21zbmRfZGlzYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgtLWRldi0+aXJxX3JlZiA+IDApCisJCXJldHVybiAwOworCisJaWYgKGRldi0+aXJxX3JlZiA8IDApCisJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogSVJRIHJlZiBjb3VudCBpcyAlZFxuIiwKKwkJCSAgIGRldi0+aXJxX3JlZik7CisKKwlzbmRfcHJpbnRkZChMT0dOQU1FICI6IERpc2FibGluZyBJUlFcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChzbmRfbXNuZF93YWl0X1RYREUoZGV2KSA9PSAwKSB7CisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpICYgfkhQSUNSX1JSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQlpZiAoZGV2LT50eXBlID09IG1zbmRDbGFzc2ljKQorCQkJb3V0YihIUElSUV9OT05FLCBkZXYtPmlvICsgSFBfSVJRTSk7CisJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBEaXNhYmxlIElSUSBmYWlsZWRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2Rpc2FibGVfaXJxKTsKKworc3RhdGljIGlubGluZSBsb25nIGdldF9wbGF5X2RlbGF5X2ppZmZpZXMoc3RydWN0IHNuZF9tc25kICpjaGlwLCBsb25nIHNpemUpCit7CisJbG9uZyB0bXAgPSAoc2l6ZSAqIEhaICogY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSkgLyA4OworCXJldHVybiB0bXAgLyAoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSAqIGNoaXAtPnBsYXlfY2hhbm5lbHMpOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9kc3Bfd3JpdGVfZmx1c2goc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCWlmICghKGNoaXAtPm1vZGUgJiBGTU9ERV9XUklURSkgfHwgIXRlc3RfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKSkKKwkJcmV0dXJuOworCXNldF9iaXQoRl9XUklURUZMVVNILCAmY2hpcC0+ZmxhZ3MpOworLyoJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KAorCQkmY2hpcC0+d3JpdGVmbHVzaCwKKwkJZ2V0X3BsYXlfZGVsYXlfamlmZmllcygmY2hpcCwgY2hpcC0+REFQRi5sZW4pKTsqLworCWNsZWFyX2JpdChGX1dSSVRFRkxVU0gsICZjaGlwLT5mbGFncyk7CisJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKAorCQkJZ2V0X3BsYXlfZGVsYXlfamlmZmllcyhjaGlwLCBjaGlwLT5wbGF5X3BlcmlvZF9ieXRlcykpOworCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7Cit9CisKK3ZvaWQgc25kX21zbmRfZHNwX2hhbHQoc3RydWN0IHNuZF9tc25kICpjaGlwLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoKGZpbGUgPyBmaWxlLT5mX21vZGUgOiBjaGlwLT5tb2RlKSAmIEZNT0RFX1JFQUQpIHsKKwkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUkVDT1JEX1NUT1ApOworCQlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwkJaWYgKGZpbGUpIHsKKwkJCXNuZF9wcmludGQoS0VSTl9JTkZPIExPR05BTUUKKwkJCQkgICAiOiBTdG9wcGluZyByZWFkIGZvciAlcFxuIiwgZmlsZSk7CisJCQljaGlwLT5tb2RlICY9IH5GTU9ERV9SRUFEOworCQl9CisJCWNsZWFyX2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJfQorCWlmICgoZmlsZSA/IGZpbGUtPmZfbW9kZSA6IGNoaXAtPm1vZGUpICYgRk1PREVfV1JJVEUpIHsKKwkJaWYgKHRlc3RfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKSkgeworCQkJc25kX21zbmRfZHNwX3dyaXRlX2ZsdXNoKGNoaXApOworCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUExBWV9TVE9QKTsKKwkJfQorCQlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwkJaWYgKGZpbGUpIHsKKwkJCXNuZF9wcmludGQoS0VSTl9JTkZPCisJCQkJICAgTE9HTkFNRSAiOiBTdG9wcGluZyB3cml0ZSBmb3IgJXBcbiIsIGZpbGUpOworCQkJY2hpcC0+bW9kZSAmPSB+Rk1PREVfV1JJVEU7CisJCX0KKwkJY2xlYXJfYml0KEZfQVVESU9fV1JJVEVfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9kc3BfaGFsdCk7CisKKworaW50IHNuZF9tc25kX0RBUlEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgYmFuaykKK3sKKwlpbnQgLypzaXplLCBuLCovIHRpbWVvdXQgPSAzOworCXUxNiB3VG1wOworCS8qIHZvaWQgKkRBUUQ7ICovCisKKwkvKiBJbmNyZW1lbnQgdGhlIHRhaWwgYW5kIGNoZWNrIGZvciBxdWV1ZSB3cmFwICovCisJd1RtcCA9IHJlYWR3KGNoaXAtPkRBUlEgKyBKUVNfd1RhaWwpICsgUENUT0RTUF9PRkZTRVQoREFRRFNfX3NpemUpOworCWlmICh3VG1wID4gcmVhZHcoY2hpcC0+REFSUSArIEpRU193U2l6ZSkpCisJCXdUbXAgPSAwOworCXdoaWxlICh3VG1wID09IHJlYWR3KGNoaXAtPkRBUlEgKyBKUVNfd0hlYWQpICYmIHRpbWVvdXQtLSkKKwkJdWRlbGF5KDEpOworCisJaWYgKGNoaXAtPmNhcHR1cmVQZXJpb2RzID09IDIpIHsKKwkJdm9pZCAqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRiArCisJCQkgICAgIGJhbmsgKiBEQVFEU19fc2l6ZSArIERBUURTX3dTdGFydDsKKwkJdW5zaWduZWQgc2hvcnQgb2Zmc2V0ID0gMHgzMDAwICsgY2hpcC0+Y2FwdHVyZVBlcmlvZEJ5dGVzOworCisJCWlmIChyZWFkdyhwREFRKSAhPSBQQ1RPRFNQX0JBU0VEKDB4MzAwMCkpCisJCQlvZmZzZXQgPSAweDMwMDA7CisJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKG9mZnNldCksIHBEQVEpOworCX0KKworCXdyaXRldyh3VG1wLCBjaGlwLT5EQVJRICsgSlFTX3dUYWlsKTsKKworI2lmIDAKKwkvKiBHZXQgb3VyIGRpZ2l0YWwgYXVkaW8gcXVldWUgc3RydWN0ICovCisJREFRRCA9IGJhbmsgKiBEQVFEU19fc2l6ZSArIGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRjsKKworCS8qIEdldCBsZW5ndGggb2YgZGF0YSAqLworCXNpemUgPSByZWFkdyhEQVFEICsgREFRRFNfd1NpemUpOworCisJLyogUmVhZCBkYXRhIGZyb20gdGhlIGhlYWQgKHVucHJvdGVjdGVkIGJhbmsgMSBhY2Nlc3Mgb2theQorCSAgIHNpbmNlIHRoaXMgaXMgb25seSBjYWxsZWQgaW5zaWRlIGFuIGludGVycnVwdCkgKi8KKwlvdXRiKEhQQkxLU0VMXzEsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJbiA9IG1zbmRfZmlmb193cml0ZSgmY2hpcC0+REFSRiwKKwkJCSAgICAoY2hhciAqKShjaGlwLT5iYXNlICsgYmFuayAqIERBUl9CVUZGX1NJWkUpLAorCQkJICAgIHNpemUsIDApOworCWlmIChuIDw9IDApIHsKKwkJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCQlyZXR1cm4gbjsKKwl9CisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfREFSUSk7CisKK2ludCBzbmRfbXNuZF9EQVBRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KQoreworCXUxNglEQVBRX3RhaWw7CisJaW50CXByb3RlY3QgPSBzdGFydCwgbmJhbmtzID0gMDsKKwl2b2lkCSpEQVFEOworCXN0YXRpYyBpbnQgcGxheV9iYW5rc19zdWJtaXR0ZWQ7CisJLyogdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOyBub3QgbmVjZXNzYXJ5ICovCisKKwlEQVBRX3RhaWwgPSByZWFkdyhjaGlwLT5EQVBRICsgSlFTX3dUYWlsKTsKKwl3aGlsZSAoREFQUV90YWlsICE9IHJlYWR3KGNoaXAtPkRBUFEgKyBKUVNfd0hlYWQpIHx8IHN0YXJ0KSB7CisJCWludCBiYW5rX251bSA9IERBUFFfdGFpbCAvIFBDVE9EU1BfT0ZGU0VUKERBUURTX19zaXplKTsKKworCQlpZiAoc3RhcnQpIHsKKwkJCXN0YXJ0ID0gMDsKKwkJCXBsYXlfYmFua3Nfc3VibWl0dGVkID0gMDsKKwkJfQorCisJCS8qIEdldCBvdXIgZGlnaXRhbCBhdWRpbyBxdWV1ZSBzdHJ1Y3QgKi8KKwkJREFRRCA9IGJhbmtfbnVtICogREFRRFNfX3NpemUgKyBjaGlwLT5tYXBwZWRiYXNlICsKKwkJCURBUFFfREFUQV9CVUZGOworCisJCS8qIFdyaXRlIHNpemUgb2YgdGhpcyBiYW5rICovCisJCXdyaXRldyhjaGlwLT5wbGF5X3BlcmlvZF9ieXRlcywgREFRRCArIERBUURTX3dTaXplKTsKKwkJaWYgKHBsYXlfYmFua3Nfc3VibWl0dGVkIDwgMykKKwkJCSsrcGxheV9iYW5rc19zdWJtaXR0ZWQ7CisJCWVsc2UgaWYgKGNoaXAtPnBsYXlQZXJpb2RzID09IDIpIHsKKwkJCXVuc2lnbmVkIHNob3J0IG9mZnNldCA9IGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzOworCisJCQlpZiAocmVhZHcoREFRRCArIERBUURTX3dTdGFydCkgIT0gUENUT0RTUF9CQVNFRCgweDApKQorCQkJCW9mZnNldCA9IDA7CisKKwkJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKG9mZnNldCksIERBUUQgKyBEQVFEU193U3RhcnQpOworCQl9CisJCSsrbmJhbmtzOworCisJCS8qIFRoZW4gYWR2YW5jZSB0aGUgdGFpbCAqLworCQkvKgorCQlpZiAocHJvdGVjdCkKKwkJCXNuZF9wcmludGQoS0VSTl9JTkZPICJCICVYICVsWFxuIiwKKwkJCQkgICBiYW5rX251bSwgeHRpbWUudHZfdXNlYyk7CisJCSovCisKKwkJREFQUV90YWlsID0gKCsrYmFua19udW0gJSAzKSAqIFBDVE9EU1BfT0ZGU0VUKERBUURTX19zaXplKTsKKwkJd3JpdGV3KERBUFFfdGFpbCwgY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisJCS8qIFRlbGwgdGhlIERTUCB0byBwbGF5IHRoZSBiYW5rICovCisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1BMQVlfU1RBUlQpOworCQlpZiAocHJvdGVjdCkKKwkJCWlmICgyID09IGJhbmtfbnVtKQorCQkJCWJyZWFrOworCX0KKwkvKgorCWlmIChwcm90ZWN0KQorCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWxYXG4iLCB4dGltZS50dl91c2VjKTsKKwkqLworCS8qIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsgbm90IG5lY2Vzc2FyeSAqLworCXJldHVybiBuYmFua3M7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX0RBUFEpOworCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9wbGF5X3Jlc2V0X3F1ZXVlKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBjbV9jb3VudCkKK3sKKwlpbnQJbjsKKwl2b2lkCSpwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfREFUQV9CVUZGOworCisJY2hpcC0+bGFzdF9wbGF5YmFuayA9IC0xOworCWNoaXAtPnBsYXlMaW1pdCA9IHBjbV9jb3VudCAqIChwY21fcGVyaW9kcyAtIDEpOworCWNoaXAtPnBsYXlQZXJpb2RzID0gcGNtX3BlcmlvZHM7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKDAgKiBEQVFEU19fc2l6ZSksIGNoaXAtPkRBUFEgKyBKUVNfd0hlYWQpOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVCgwICogREFRRFNfX3NpemUpLCBjaGlwLT5EQVBRICsgSlFTX3dUYWlsKTsKKworCWNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzID0gcGNtX2NvdW50OworCisJZm9yIChuID0gMDsgbiA8IHBjbV9wZXJpb2RzOyArK24sIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJd3JpdGV3KFBDVE9EU1BfQkFTRUQoKHUzMikocGNtX2NvdW50ICogbikpLAorCQkJcERBUSArIERBUURTX3dTdGFydCk7CisJCXdyaXRldygwLCBwREFRICsgREFRRFNfd1NpemUpOworCQl3cml0ZXcoMSwgcERBUSArIERBUURTX3dGb3JtYXQpOworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwkJd3JpdGV3KEhJTVRfUExBWV9ET05FICogMHgxMDAgKyBuLCBwREFRICsgREFRRFNfd0ludE1zZyk7CisJCXdyaXRldyhuLCBwREFRICsgREFRRFNfd0ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX2NhcHR1cmVfcmVzZXRfcXVldWUoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJCQkgdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzLAorCQkJCQkgdW5zaWduZWQgaW50IHBjbV9jb3VudCkKK3sKKwlpbnQJCW47CisJdm9pZAkJKnBEQVE7CisJLyogdW5zaWduZWQgbG9uZwlmbGFnczsgKi8KKworCS8qIHNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+REFSUSwgREFSUV9EQVRBX0JVRkYsIERBUlFfQlVGRl9TSVpFKTsgKi8KKworCWNoaXAtPmxhc3RfcmVjYmFuayA9IDI7CisJY2hpcC0+Y2FwdHVyZUxpbWl0ID0gcGNtX2NvdW50ICogKHBjbV9wZXJpb2RzIC0gMSk7CisJY2hpcC0+Y2FwdHVyZVBlcmlvZHMgPSBwY21fcGVyaW9kczsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoMCAqIERBUURTX19zaXplKSwgY2hpcC0+REFSUSArIEpRU193SGVhZCk7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKGNoaXAtPmxhc3RfcmVjYmFuayAqIERBUURTX19zaXplKSwKKwkJY2hpcC0+REFSUSArIEpRU193VGFpbCk7CisKKyNpZiAwIC8qIENyaXRpY2FsIHNlY3Rpb246IGJhbmsgMSBhY2Nlc3MuIHRoaXMgaXMgaG93IHRoZSBPU1MgZHJpdmVyIGRvZXMgaXQ6Ki8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoSFBCTEtTRUxfMSwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwltZW1zZXRfaW8oY2hpcC0+bWFwcGVkYmFzZSwgMCwgREFSX0JVRkZfU0laRSAqIDMpOworCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisjZW5kaWYKKworCWNoaXAtPmNhcHR1cmVQZXJpb2RCeXRlcyA9IHBjbV9jb3VudDsKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfY2FwdHVyZV9yZXNldF9xdWV1ZSgpICVpXG4iLCBwY21fY291bnQpOworCisJcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRjsKKworCWZvciAobiA9IDA7IG4gPCBwY21fcGVyaW9kczsgKytuLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXUzMiB0bXAgPSBwY21fY291bnQgKiBuOworCisJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKHRtcCArIDB4MzAwMCksIHBEQVEgKyBEQVFEU193U3RhcnQpOworCQl3cml0ZXcocGNtX2NvdW50LCBwREFRICsgREFRRFNfd1NpemUpOworCQl3cml0ZXcoMSwgcERBUSArIERBUURTX3dGb3JtYXQpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwkJd3JpdGV3KEhJTVRfUkVDT1JEX0RPTkUgKiAweDEwMCArIG4sIHBEQVEgKyBEQVFEU193SW50TXNnKTsKKwkJd3JpdGV3KG4sIHBEQVEgKyBEQVFEU193RmxhZ3MpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9tc25kX3BsYXliYWNrID0geworCS5pbmZvID0JCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKwkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1U4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0JCVNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJLnJhdGVfbWluID0JCTgwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPQkJMSwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQkweDMwMDAsCisJLnBlcmlvZF9ieXRlc19taW4gPQkweDQwLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0JMHgxODAwLAorCS5wZXJpb2RzX21pbiA9CQkyLAorCS5wZXJpb2RzX21heCA9CQkzLAorCS5maWZvX3NpemUgPQkJMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbXNuZF9jYXB0dXJlID0geworCS5pbmZvID0JCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKwkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1U4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0JCVNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJLnJhdGVfbWluID0JCTgwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPQkJMSwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQkweDMwMDAsCisJLnBlcmlvZF9ieXRlc19taW4gPQkweDQwLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0JMHgxODAwLAorCS5wZXJpb2RzX21pbiA9CQkyLAorCS5wZXJpb2RzX21heCA9CQkzLAorCS5maWZvX3NpemUgPQkJMCwKK307CisKKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc2V0X2JpdChGX0FVRElPX1dSSVRFX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJc25kX21zbmRfZW5hYmxlX2lycShjaGlwKTsKKworCXJ1bnRpbWUtPmRtYV9hcmVhID0gY2hpcC0+bWFwcGVkYmFzZTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSAweDMwMDA7CisKKwljaGlwLT5wbGF5YmFja19zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfbXNuZF9wbGF5YmFjazsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwljbGVhcl9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJaW50CWk7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXZvaWQJKnBEQVEgPQljaGlwLT5tYXBwZWRiYXNlICsgREFQUV9EQVRBX0JVRkY7CisKKwljaGlwLT5wbGF5X3NhbXBsZV9zaXplID0gc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwljaGlwLT5wbGF5X2NoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+cGxheV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCX0KKwkvKiBkb250IGRvIHRoaXMgaGVyZToKKwkgKiBzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUpOworCSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9jb3VudCA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fcGVyaW9kcyA9IHBjbV9zaXplIC8gcGNtX2NvdW50OworCisJc25kX21zbmRfcGxheV9yZXNldF9xdWV1ZShjaGlwLCBwY21fcGVyaW9kcywgcGNtX2NvdW50KTsKKwljaGlwLT5wbGF5RE1BUG9zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50CXJlc3VsdCA9IDA7CisKKwlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSB7CisJCXNuZF9wcmludGRkKCJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKFNUQVJUKVxuIik7CisJCWNoaXAtPmJhbmtzUGxheWVkID0gMDsKKwkJc2V0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX0RBUFEoY2hpcCwgMSk7CisJfSBlbHNlIGlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RPUCkgeworCQlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihTVG9wKVxuIik7CisJCS8qIGludGVycnVwdCBkaWFnbm9zdGljLCBjb21tZW50IHRoaXMgb3V0IGxhdGVyICovCisJCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1BMQVlfU1RPUCk7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ZChLRVJOX0VSUiAic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcig/Pz8/PylcbiIpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0KKworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKCkgRU5ERVxuIik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfbXNuZF9wbGF5YmFja19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBjaGlwLT5wbGF5RE1BUG9zKTsKK30KKworCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9tc25kX3BsYXliYWNrX29wcyA9IHsKKwkub3BlbiA9CQlzbmRfbXNuZF9wbGF5YmFja19vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kX3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQlzbmRfbXNuZF9wbGF5YmFja19od19wYXJhbXMsCisJLnByZXBhcmUgPQlzbmRfbXNuZF9wbGF5YmFja19wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX21zbmRfcGxheWJhY2tfdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9tc25kX3BsYXliYWNrX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNldF9iaXQoRl9BVURJT19SRUFEX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2VuYWJsZV9pcnEoY2hpcCk7CisJcnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5tYXBwZWRiYXNlICsgMHgzMDAwOworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IDB4MzAwMDsKKwltZW1zZXQocnVudGltZS0+ZG1hX2FyZWEsIDAsIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfbXNuZF9jYXB0dXJlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJY2xlYXJfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMgPSBwY21fc2l6ZSAvIHBjbV9jb3VudDsKKworCXNuZF9tc25kX2NhcHR1cmVfcmVzZXRfcXVldWUoY2hpcCwgcGNtX3BlcmlvZHMsIHBjbV9jb3VudCk7CisJY2hpcC0+Y2FwdHVyZURNQVBvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpIHsKKwkJY2hpcC0+bGFzdF9yZWNiYW5rID0gLTE7CisJCXNldF9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlpZiAoc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUkVDT1JEX1NUQVJUKSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwl9IGVsc2UgaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QKSB7CisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVE9QKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX21zbmRfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBjaGlwLT5jYXB0dXJlRE1BUG9zKTsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQJCWk7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXZvaWQJCSpwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGOworCisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJY2hpcC0+Y2FwdHVyZV9jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXNuZF9jYXB0dXJlX29wcyA9IHsKKwkub3BlbiA9CQlzbmRfbXNuZF9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0Jc25kX21zbmRfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX21zbmRfY2FwdHVyZV9od19wYXJhbXMsCisJLnByZXBhcmUgPQlzbmRfbXNuZF9jYXB0dXJlX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfbXNuZF9jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIgPQlzbmRfbXNuZF9jYXB0dXJlX3BvaW50ZXIsCit9OworCisKK2ludCBzbmRfbXNuZF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLAorCQkJc3RydWN0IHNuZF9wY20gKipycGNtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbQkqcGNtOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiTVNORFBJTk5BQ0xFIiwgZGV2aWNlLCAxLCAxLCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZzbmRfbXNuZF9wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9tc25kX2NhcHR1cmVfb3BzKTsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlzdHJjcHkocGNtLT5uYW1lLCAiSHVycmljYW5lIik7CisKKworCWlmIChycGNtKQorCQkqcnBjbSA9IHBjbTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfcGNtKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21tb24gcm91dGluZXMgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aXNvdW5kIGRyaXZlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZC5oIGIvc291bmQvaXNhL21zbmQvbXNuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmgKQEAgLTAsMCArMSwzMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtc25kLmgKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBTb21lIHBhcnRzIG9mIHRoaXMgaGVhZGVyIGZpbGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIFR1cnRsZSBCZWFjaAorICogTXVsdGlTb3VuZCBEcml2ZXIgRGV2ZWxvcG1lbnQgS2l0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICogQ29weXJpZ2h0IChDKSAxOTkzIFR1cnRsZSBCZWFjaCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTkRfSAorI2RlZmluZSBfX01TTkRfSAorCisjZGVmaW5lIERFRlNBTVBMRVJBVEUJCTQ0MTAwCisjZGVmaW5lIERFRlNBTVBMRVNJWkUJCVNORFJWX1BDTV9GT1JNQVRfUzE2CisjZGVmaW5lIERFRkNIQU5ORUxTCQkxCisKKyNkZWZpbmUgU1JBTV9CQU5LX1NJWkUJCTB4ODAwMAorI2RlZmluZSBTUkFNX0NOVExfU1RBUlQJCTB4N0YwMAorI2RlZmluZSBTTUFfU1RSVUNUX1NUQVJUCTB4N0Y0MAorCisjZGVmaW5lIERTUF9CQVNFX0FERFIJCTB4NDAwMAorI2RlZmluZSBEU1BfQkFOS19CQVNFCQkweDQwMDAKKworI2RlZmluZSBBR05ECQkJMHgwMQorI2RlZmluZSBTSUdOQUwJCQkweDAyCisKKyNkZWZpbmUgRVhUX0RTUF9CSVRfRENBTAkweDAwMDEKKyNkZWZpbmUgRVhUX0RTUF9CSVRfTUlESV9DT04JMHgwMDAyCisKKyNkZWZpbmUgQlVGRlNJWkUJCTB4ODAwMAorI2RlZmluZSBIT1NUUV9TSVpFCQkweDQwCisKKyNkZWZpbmUgREFQX0JVRkZfU0laRQkJMHgyNDAwCisKKyNkZWZpbmUgREFQUV9TVFJVQ1RfU0laRQkweDEwCisjZGVmaW5lIERBUlFfU1RSVUNUX1NJWkUJMHgxMAorI2RlZmluZSBEQVBRX0JVRkZfU0laRQkJKDMgKiAweDEwKQorI2RlZmluZSBEQVJRX0JVRkZfU0laRQkJKDMgKiAweDEwKQorI2RlZmluZSBNT0RRX0JVRkZfU0laRQkJMHg0MDAKKworI2RlZmluZSBEQVBRX0RBVEFfQlVGRgkJMHg2QzAwCisjZGVmaW5lIERBUlFfREFUQV9CVUZGCQkweDZDMzAKKyNkZWZpbmUgTU9EUV9EQVRBX0JVRkYJCTB4NkM2MAorI2RlZmluZSBNSURRX0RBVEFfQlVGRgkJMHg3MDYwCisKKyNkZWZpbmUgREFQUV9PRkZTRVQJCVNSQU1fQ05UTF9TVEFSVAorI2RlZmluZSBEQVJRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MDgpCisjZGVmaW5lIE1PRFFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgxMCkKKyNkZWZpbmUgTUlEUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDE4KQorI2RlZmluZSBEU1BRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MjApCisKKyNkZWZpbmUJSFBfSUNSCQkJMHgwMAorI2RlZmluZQlIUF9DVlIJCQkweDAxCisjZGVmaW5lCUhQX0lTUgkJCTB4MDIKKyNkZWZpbmUJSFBfSVZSCQkJMHgwMworI2RlZmluZSBIUF9OVQkJCTB4MDQKKyNkZWZpbmUgSFBfSU5GTwkJCTB4MDQKKyNkZWZpbmUJSFBfVFhICQkJMHgwNQorI2RlZmluZQlIUF9SWEgJCQkweDA1CisjZGVmaW5lCUhQX1RYTQkJCTB4MDYKKyNkZWZpbmUJSFBfUlhNCQkJMHgwNgorI2RlZmluZQlIUF9UWEwJCQkweDA3CisjZGVmaW5lCUhQX1JYTAkJCTB4MDcKKworI2RlZmluZSBIUF9JQ1JfREVGCQkweDAwCisjZGVmaW5lIEhQX0NWUl9ERUYJCTB4MTIKKyNkZWZpbmUgSFBfSVNSX0RFRgkJMHgwNgorI2RlZmluZSBIUF9JVlJfREVGCQkweDBmCisjZGVmaW5lIEhQX05VX0RFRgkJMHgwMAorCisjZGVmaW5lCUhQX0lSUU0JCQkweDA5CisKKyNkZWZpbmUJSFBSX0JMUkMJCTB4MDgKKyNkZWZpbmUJSFBSX1NQUjEJCTB4MDkKKyNkZWZpbmUJSFBSX1NQUjIJCTB4MEEKKyNkZWZpbmUJSFBSX1RDTDAJCTB4MEIKKyNkZWZpbmUJSFBSX1RDTDEJCTB4MEMKKyNkZWZpbmUJSFBSX1RDTDIJCTB4MEQKKyNkZWZpbmUJSFBSX1RDTDMJCTB4MEUKKyNkZWZpbmUJSFBSX1RDTDQJCTB4MEYKKworI2RlZmluZQlIUElDUl9JTklUCQkweDgwCisjZGVmaW5lIEhQSUNSX0hNMQkJMHg0MAorI2RlZmluZSBIUElDUl9ITTAJCTB4MjAKKyNkZWZpbmUgSFBJQ1JfSEYxCQkweDEwCisjZGVmaW5lIEhQSUNSX0hGMAkJMHgwOAorI2RlZmluZQlIUElDUl9UUkVRCQkweDAyCisjZGVmaW5lCUhQSUNSX1JSRVEJCTB4MDEKKworI2RlZmluZSBIUENWUl9IQwkJMHg4MAorCisjZGVmaW5lCUhQSVNSX0hSRVEJCTB4ODAKKyNkZWZpbmUgSFBJU1JfRE1BCQkweDQwCisjZGVmaW5lIEhQSVNSX0hGMwkJMHgxMAorI2RlZmluZSBIUElTUl9IRjIJCTB4MDgKKyNkZWZpbmUJSFBJU1JfVFJEWQkJMHgwNAorI2RlZmluZQlIUElTUl9UWERFCQkweDAyCisjZGVmaW5lCUhQSVNSX1JYREYJCTB4MDEKKworI2RlZmluZQlIUElPXzI5MAkJMAorI2RlZmluZQlIUElPXzI2MAkJMQorI2RlZmluZQlIUElPXzI1MAkJMgorI2RlZmluZQlIUElPXzI0MAkJMworI2RlZmluZQlIUElPXzIzMAkJNAorI2RlZmluZQlIUElPXzIyMAkJNQorI2RlZmluZQlIUElPXzIxMAkJNgorI2RlZmluZQlIUElPXzNFMAkJNworCisjZGVmaW5lCUhQTUVNX05PTkUJCTAKKyNkZWZpbmUJSFBNRU1fQjAwMAkJMQorI2RlZmluZQlIUE1FTV9DODAwCQkyCisjZGVmaW5lCUhQTUVNX0QwMDAJCTMKKyNkZWZpbmUJSFBNRU1fRDQwMAkJNAorI2RlZmluZQlIUE1FTV9EODAwCQk1CisjZGVmaW5lCUhQTUVNX0UwMDAJCTYKKyNkZWZpbmUJSFBNRU1fRTgwMAkJNworCisjZGVmaW5lCUhQSVJRX05PTkUJCTAKKyNkZWZpbmUgSFBJUlFfNQkJCTEKKyNkZWZpbmUgSFBJUlFfNwkJCTIKKyNkZWZpbmUgSFBJUlFfOQkJCTMKKyNkZWZpbmUgSFBJUlFfMTAJCTQKKyNkZWZpbmUgSFBJUlFfMTEJCTUKKyNkZWZpbmUgSFBJUlFfMTIJCTYKKyNkZWZpbmUgSFBJUlFfMTUJCTcKKworI2RlZmluZQlISU1UX1BMQVlfRE9ORQkJMHgwMAorI2RlZmluZQlISU1UX1JFQ09SRF9ET05FCTB4MDEKKyNkZWZpbmUJSElNVF9NSURJX0VPUwkJMHgwMgorI2RlZmluZQlISU1UX01JRElfT1VUCQkweDAzCisKKyNkZWZpbmUJSElNVF9NSURJX0lOX1VDSEFSCTB4MEUKKyNkZWZpbmUJSElNVF9EU1AJCTB4MEYKKworI2RlZmluZQlIREVYX0JBU0UJICAgICAgIAkweDkyCisjZGVmaW5lCUhERVhfUExBWV9TVEFSVAkJKDAgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9TVE9QCQkoMSArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9QTEFZX1BBVVNFCQkoMiArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9QTEFZX1JFU1VNRQkoMyArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9SRUNPUkRfU1RBUlQJKDQgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUkVDT1JEX1NUT1AJKDUgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9JTl9TVEFSVCAJKDYgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9JTl9TVE9QCSg3ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfT1VUX1NUQVJUCSg4ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfT1VUX1NUT1AJKDkgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfQVVYX1JFUQkJKDEwICsgSERFWF9CQVNFKQorCisjZGVmaW5lCUhERVhBUl9DTEVBUl9QRUFLUwkxCisjZGVmaW5lCUhERVhBUl9JTl9TRVRfUE9UUwkyCisjZGVmaW5lCUhERVhBUl9BVVhfU0VUX1BPVFMJMworI2RlZmluZQlIREVYQVJfQ0FMX0FfVE9fRAk0CisjZGVmaW5lCUhERVhBUl9SRF9FWFRfRFNQX0JJVFMJNQorCisvKiBQaW5uYWNsZSBvbmx5IEhERVhBUiBkZWZzICovCisjZGVmaW5lCUhERVhBUl9TRVRfQU5BX0lOCTAKKyNkZWZpbmUJSERFWEFSX1NFVF9TWU5USF9JTgk0CisjZGVmaW5lCUhERVhBUl9SRUFEX0RBVF9JTgk1CisjZGVmaW5lCUhERVhBUl9NSUNfU0VUX1BPVFMJNgorI2RlZmluZQlIREVYQVJfU0VUX0RBVF9JTgk3CisKKyNkZWZpbmUgSERFWEFSX1NFVF9TWU5USF80OAk4CisjZGVmaW5lIEhERVhBUl9TRVRfU1lOVEhfNDQJOQorCisjZGVmaW5lIEhJV09SRChsKQkJKCh1MTYpKCgoKHUzMikobCkpID4+IDE2KSAmIDB4RkZGRikpCisjZGVmaW5lIExPV09SRChsKQkJKCh1MTYpKHUzMikobCkpCisjZGVmaW5lIEhJQllURSh3KQkJKCh1OCkoKCh1MTYpKHcpID4+IDgpICYgMHhGRikpCisjZGVmaW5lIExPQllURSh3KQkJKCh1OCkodykpCisjZGVmaW5lIE1BS0VMT05HKGxvdywgaGkpCSgobG9uZykoKCh1MTYpKGxvdykpfCgoKHUzMikoKHUxNikoaGkpKSk8PDE2KSkpCisjZGVmaW5lIE1BS0VXT1JEKGxvdywgaGkpCSgodTE2KSgoKHU4KShsb3cpKXwoKCh1MTYpKCh1OCkoaGkpKSk8PDgpKSkKKworI2RlZmluZSBQQ1RPRFNQX09GRlNFVCh3KQkodTE2KSgodykvMikKKyNkZWZpbmUgUENUT0RTUF9CQVNFRCh3KQkodTE2KSgoKHcpLzIpICsgRFNQX0JBU0VfQUREUikKKyNkZWZpbmUgRFNQVE9QQ19CQVNFRCh3KQkoKCh3KSAtIERTUF9CQVNFX0FERFIpICogMikKKworI2lmZGVmIFNMT1dJTworIyAgdW5kZWYgb3V0YgorIyAgdW5kZWYgaW5iCisjICBkZWZpbmUgb3V0YgkJCW91dGJfcAorIyAgZGVmaW5lIGluYgkJCWluYl9wCisjZW5kaWYKKworLyogSm9iUXVldWVTdHJ1Y3QgKi8KKyNkZWZpbmUgSlFTX3dTdGFydAkJMHgwMAorI2RlZmluZSBKUVNfd1NpemUJCTB4MDIKKyNkZWZpbmUgSlFTX3dIZWFkCQkweDA0CisjZGVmaW5lIEpRU193VGFpbAkJMHgwNgorI2RlZmluZSBKUVNfX3NpemUJCTB4MDgKKworLyogREFRdWV1ZURhdGFTdHJ1Y3QgKi8KKyNkZWZpbmUgREFRRFNfd1N0YXJ0CQkweDAwCisjZGVmaW5lIERBUURTX3dTaXplCQkweDAyCisjZGVmaW5lIERBUURTX3dGb3JtYXQJCTB4MDQKKyNkZWZpbmUgREFRRFNfd1NhbXBsZVNpemUJMHgwNgorI2RlZmluZSBEQVFEU193Q2hhbm5lbHMJCTB4MDgKKyNkZWZpbmUgREFRRFNfd1NhbXBsZVJhdGUJMHgwQQorI2RlZmluZSBEQVFEU193SW50TXNnCQkweDBDCisjZGVmaW5lIERBUURTX3dGbGFncwkJMHgwRQorI2RlZmluZSBEQVFEU19fc2l6ZQkJMHgxMAorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisKK3N0cnVjdCBzbmRfbXNuZCB7CisJdm9pZCBfX2lvbWVtCQkqbWFwcGVkYmFzZTsKKwlpbnQJCQlwbGF5X3BlcmlvZF9ieXRlczsKKwlpbnQJCQlwbGF5TGltaXQ7CisJaW50CQkJcGxheVBlcmlvZHM7CisJaW50IAkJCXBsYXlETUFQb3M7CisJaW50CQkJYmFua3NQbGF5ZWQ7CisJaW50IAkJCWNhcHR1cmVETUFQb3M7CisJaW50CQkJY2FwdHVyZVBlcmlvZEJ5dGVzOworCWludAkJCWNhcHR1cmVMaW1pdDsKKwlpbnQJCQljYXB0dXJlUGVyaW9kczsKKwlzdHJ1Y3Qgc25kX2NhcmQJCSpjYXJkOworCXZvaWQJCQkqbXNuZG1pZGlfbXB1OworCXN0cnVjdCBzbmRfcmF3bWlkaQkqcm1pZGk7CisKKwkvKiBIYXJkd2FyZSByZXNvdXJjZXMgKi8KKwlsb25nIGlvOworCWludCBtZW1pZCwgaXJxaWQ7CisJaW50IGlycSwgaXJxX3JlZjsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwkvKiBNb3Rvcm9sYSA1NmsgRFNQIFNNQSAqLworCXZvaWQgX19pb21lbQkqU01BOworCXZvaWQgX19pb21lbQkqREFQUTsKKwl2b2lkIF9faW9tZW0JKkRBUlE7CisJdm9pZCBfX2lvbWVtCSpNT0RROworCXZvaWQgX19pb21lbQkqTUlEUTsKKwl2b2lkIF9faW9tZW0JKkRTUFE7CisJaW50IGRzcHFfZGF0YV9idWZmLCBkc3BxX2J1ZmZfc2l6ZTsKKworCS8qIFN0YXRlIHZhcmlhYmxlcyAqLworCWVudW0geyBtc25kQ2xhc3NpYywgbXNuZFBpbm5hY2xlIH0gdHlwZTsKKwltb2RlX3QgbW9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2RlZmluZSBGX1JFU0VUVElORwkJCTAKKyNkZWZpbmUgRl9IQVZFRElHSVRBTAkJCTEKKyNkZWZpbmUgRl9BVURJT19XUklURV9JTlVTRQkJMgorI2RlZmluZSBGX1dSSVRJTkcJCQkzCisjZGVmaW5lIEZfV1JJVEVCTE9DSwkJCTQKKyNkZWZpbmUgRl9XUklURUZMVVNICQkJNQorI2RlZmluZSBGX0FVRElPX1JFQURfSU5VU0UJCTYKKyNkZWZpbmUgRl9SRUFESU5HCQkJNworI2RlZmluZSBGX1JFQURCTE9DSwkJCTgKKyNkZWZpbmUgRl9FWFRfTUlESV9JTlVTRQkJOQorI2RlZmluZSBGX0hEUl9NSURJX0lOVVNFCQkxMAorI2RlZmluZSBGX0RJU0FCTEVfV1JJVEVfTkRFTEFZCQkxMQorCXNwaW5sb2NrX3QgbG9jazsKKwlzcGlubG9ja190IG1peGVyX2xvY2s7CisJaW50IG5yZXNldHM7CisJdW5zaWduZWQgcmVjc3JjOworI2RlZmluZSBMRVZFTF9FTlRSSUVTIDMyCisJaW50IGxlZnRfbGV2ZWxzW0xFVkVMX0VOVFJJRVNdOworCWludCByaWdodF9sZXZlbHNbTEVWRUxfRU5UUklFU107CisJaW50IGNhbGlicmF0ZV9zaWduYWw7CisJaW50IHBsYXlfc2FtcGxlX3NpemUsIHBsYXlfc2FtcGxlX3JhdGUsIHBsYXlfY2hhbm5lbHM7CisJaW50IHBsYXlfbmRlbGF5OworCWludCBjYXB0dXJlX3NhbXBsZV9zaXplLCBjYXB0dXJlX3NhbXBsZV9yYXRlLCBjYXB0dXJlX2NoYW5uZWxzOworCWludCBjYXB0dXJlX25kZWxheTsKKwl1OCBiQ3VycmVudE1pZGlQYXRjaDsKKworCWludCBsYXN0X3BsYXliYW5rLCBsYXN0X3JlY2Jhbms7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwbGF5YmFja19zdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3N1YnN0cmVhbTsKKworfTsKKwordm9pZCBzbmRfbXNuZF9pbml0X3F1ZXVlKHZvaWQgKmJhc2UsIGludCBzdGFydCwgaW50IHNpemUpOworCitpbnQgc25kX21zbmRfc2VuZF9kc3BfY21kKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTggY21kKTsKK2ludCBzbmRfbXNuZF9zZW5kX3dvcmQoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJICAgdW5zaWduZWQgY2hhciBoaWdoLAorCQkJICAgdW5zaWduZWQgY2hhciBtaWQsCisJCQkgICB1bnNpZ25lZCBjaGFyIGxvdyk7CitpbnQgc25kX21zbmRfdXBsb2FkX2hvc3Qoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJICAgICBjb25zdCB1OCAqYmluLCBpbnQgbGVuKTsKK2ludCBzbmRfbXNuZF9lbmFibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCk7CitpbnQgc25kX21zbmRfZGlzYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpjaGlwKTsKK3ZvaWQgc25kX21zbmRfZHNwX2hhbHQoc3RydWN0IHNuZF9tc25kICpjaGlwLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitpbnQgc25kX21zbmRfREFQUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBzdGFydCk7CitpbnQgc25kX21zbmRfREFSUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBzdGFydCk7CitpbnQgc25kX21zbmRfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKKworaW50IHNuZF9tc25kbWlkaV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlKTsKK3ZvaWQgc25kX21zbmRtaWRpX2lucHV0X3JlYWQodm9pZCAqbXB1KTsKKwordm9pZCBzbmRfbXNuZG1peF9zZXR1cChzdHJ1Y3Qgc25kX21zbmQgKmNoaXApOworaW50IF9fZGV2aW5pdCBzbmRfbXNuZG1peF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKK2ludCBzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgcmVjc3JjKTsKKyNlbmRpZiAvKiBfX01TTkRfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjIzYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmMKQEAgLTAsMCArMSwzIEBACisvKiBUaGUgd29yayBpcyBpbiBtc25kX3Bpbm5hY2xlLmMsIGp1c3QgZGVmaW5lIE1TTkRfQ0xBU1NJQyBiZWZvcmUgaXQuICovCisjZGVmaW5lIE1TTkRfQ0xBU1NJQworI2luY2x1ZGUgIm1zbmRfcGlubmFjbGUuYyIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5oIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4ZDVmYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5oCkBAIC0wLDAgKzEsMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbXNuZF9jbGFzc2ljLmgKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBTb21lIHBhcnRzIG9mIHRoaXMgaGVhZGVyIGZpbGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIFR1cnRsZSBCZWFjaAorICogTXVsdGlTb3VuZCBEcml2ZXIgRGV2ZWxvcG1lbnQgS2l0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICogQ29weXJpZ2h0IChDKSAxOTkzIFR1cnRsZSBCZWFjaCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTkRfQ0xBU1NJQ19ICisjZGVmaW5lIF9fTVNORF9DTEFTU0lDX0gKKworI2RlZmluZSBEU1BfTlVNSU8JCQkJMHgxMAorCisjZGVmaW5lCUhQX01FTU0JCQkJCTB4MDgKKworI2RlZmluZQlIUF9CSVRNCQkJCQkweDBFCisjZGVmaW5lCUhQX1dBSVQJCQkJCTB4MEQKKyNkZWZpbmUJSFBfRFNQUgkJCQkJMHgwQQorI2RlZmluZQlIUF9QUk9SCQkJCQkweDBCCisjZGVmaW5lCUhQX0JMS1MJCQkJCTB4MEMKKworI2RlZmluZQlIUFBST1JFU0VUX09GRgkJCQkwCisjZGVmaW5lIEhQUFJPUkVTRVRfT04JCQkJMQorCisjZGVmaW5lIEhQRFNQUkVTRVRfT0ZGCQkJCTAKKyNkZWZpbmUgSFBEU1BSRVNFVF9PTgkJCQkxCisKKyNkZWZpbmUgSFBCTEtTRUxfMAkJCQkwCisjZGVmaW5lIEhQQkxLU0VMXzEJCQkJMQorCisjZGVmaW5lIEhQV0FJVFNUQVRFXzAJCQkJMAorI2RlZmluZSBIUFdBSVRTVEFURV8xCQkJCTEKKworI2RlZmluZSBIUEJJVE1PREVfMTYJCQkJMAorI2RlZmluZSBIUEJJVE1PREVfOAkJCQkxCisKKyNkZWZpbmUJSElEU1BfSU5UX1BMQVlfVU5ERVIJCQkweDAwCisjZGVmaW5lCUhJRFNQX0lOVF9SRUNPUkRfT1ZFUgkJCTB4MDEKKyNkZWZpbmUJSElEU1BfSU5QVVRfQ0xJUFBJTkcJCQkweDAyCisjZGVmaW5lCUhJRFNQX01JRElfSU5fT1ZFUgkJCTB4MTAKKyNkZWZpbmUJSElEU1BfTUlESV9PVkVSUlVOX0VSUiAgMHgxMworCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUX0RPTkUJCQkweDAyOEEKKyNkZWZpbmUgVElNRV9QUk9fU1lTRVgJCQkJMHgwMDQwCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUCQkJCTB4MDAzMgorCisjZGVmaW5lIERBUl9CVUZGX1NJWkUJCQkJMHgyMDAwCisKKyNkZWZpbmUgTUlEUV9CVUZGX1NJWkUJCQkJMHgyMDAKKyNkZWZpbmUgRFNQUV9CVUZGX1NJWkUJCQkJMHg0MAorCisjZGVmaW5lIERTUFFfREFUQV9CVUZGCQkJCTB4NzI2MAorCisjZGVmaW5lIE1PUF9TWU5USAkJCQkweDEwCisjZGVmaW5lIE1PUF9FWFRPVVQJCQkJMHgzMgorI2RlZmluZSBNT1BfRVhUVEhSVQkJCQkweDAyCisjZGVmaW5lIE1PUF9PVVRNQVNLCQkJCTB4MDEKKworI2RlZmluZSBNSVBfRVhUSU4JCQkJMHgwMQorI2RlZmluZSBNSVBfU1lOVEgJCQkJMHgwMAorI2RlZmluZSBNSVBfSU5NQVNLCQkJCTB4MzIKKworLyogQ2xhc3NpYyBTTUEgQ29tbW9uIERhdGEgKi8KKyNkZWZpbmUgU01BX3dDdXJyUGxheUJ5dGVzCQkJMHgwMDAwCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZEJ5dGVzCQkJMHgwMDAyCisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xMZWZ0CQkJMHgwMDA0CisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xSaWdodAkJCTB4MDAwNgorI2RlZmluZSBTTUFfd0N1cnJJblZvbExlZnQJCQkweDAwMDgKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xSaWdodAkJCTB4MDAwYQorI2RlZmluZSBTTUFfd1VzZXJfMwkJCQkweDAwMGMKKyNkZWZpbmUgU01BX3dVc2VyXzQJCQkJMHgwMDBlCisjZGVmaW5lIFNNQV9kd1VzZXJfNQkJCQkweDAwMTAKKyNkZWZpbmUgU01BX2R3VXNlcl82CQkJCTB4MDAxNAorI2RlZmluZSBTTUFfd1VzZXJfNwkJCQkweDAwMTgKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9BCQkJCTB4MDAxYQorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0IJCQkJMHgwMDFjCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfQwkJCQkweDAwMWUKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9ECQkJCTB4MDAyMAorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0UJCQkJMHgwMDIyCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRgkJCQkweDAwMjQKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9HCQkJCTB4MDAyNgorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0gJCQkJMHgwMDI4CisjZGVmaW5lIFNNQV93Q3VyckRTUFN0YXR1c0ZsYWdzCQkJMHgwMDJhCisjZGVmaW5lIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncwkJMHgwMDJjCisjZGVmaW5lIFNNQV93Q3VycklucHV0VGFnQml0cwkJCTB4MDAyZQorI2RlZmluZSBTTUFfd0N1cnJMZWZ0UGVhawkJCTB4MDAzMAorI2RlZmluZSBTTUFfd0N1cnJSaWdodFBlYWsJCQkweDAwMzIKKyNkZWZpbmUgU01BX3dFeHREU1BiaXRzCQkJCTB4MDAzNAorI2RlZmluZSBTTUFfYkV4dEhvc3RiaXRzCQkJMHgwMDM2CisjZGVmaW5lIFNNQV9iQm9hcmRMZXZlbAkJCQkweDAwMzcKKyNkZWZpbmUgU01BX2JJblBvdFBvc1JpZ2h0CQkJMHgwMDM4CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NMZWZ0CQkJMHgwMDM5CisjZGVmaW5lIFNNQV9iQXV4UG90UG9zUmlnaHQJCQkweDAwM2EKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NMZWZ0CQkJMHgwMDNiCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xMZWZ0CQkJMHgwMDNjCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xSaWdodAkJCTB4MDAzZQorI2RlZmluZSBTTUFfYlVzZXJfMTIJCQkJMHgwMDQwCisjZGVmaW5lIFNNQV9iVXNlcl8xMwkJCQkweDAwNDEKKyNkZWZpbmUgU01BX3dVc2VyXzE0CQkJCTB4MDA0MgorI2RlZmluZSBTTUFfd1VzZXJfMTUJCQkJMHgwMDQ0CisjZGVmaW5lIFNNQV93Q2FsRnJlcUF0b0QJCQkweDAwNDYKKyNkZWZpbmUgU01BX3dVc2VyXzE2CQkJCTB4MDA0OAorI2RlZmluZSBTTUFfd1VzZXJfMTcJCQkJMHgwMDRhCisjZGVmaW5lIFNNQV9fc2l6ZQkJCQkweDAwNGMKKworI2RlZmluZSBJTklUQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9tc25kaW5pdC5iaW4iCisjZGVmaW5lIFBFUk1DT0RFRklMRQkJInR1cnRsZWJlYWNoL21zbmRwZXJtLmJpbiIKKyNkZWZpbmUgTE9OR05BTUUJCSJNdWx0aVNvdW5kIChDbGFzc2ljL01vbnRlcmV5L1RhaGl0aSkiCisKKyNlbmRpZiAvKiBfX01TTkRfQ0xBU1NJQ19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWFhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IGJ5IEtyenlzenRvZiBIZWx0CisgKiAgUm91dGluZXMgZm9yIGNvbnRyb2wgb2YgTVBVLTQwMSBpbiBVQVJUIG1vZGUKKyAqCisgKiAgTVBVLTQwMSBzdXBwb3J0cyBVQVJUIG1vZGUgd2hpY2ggaXMgbm90IGNhcGFibGUgZ2VuZXJhdGUgdHJhbnNtaXQKKyAqICBpbnRlcnJ1cHRzIHRodXMgb3V0cHV0IGlzIGRvbmUgdmlhIHBvbGxpbmcuIEFsc28sIGlmIGlycSA8IDAsIHRoZW4KKyAqICBpbnB1dCBpcyBkb25lIGFsc28gdmlhIHBvbGxpbmcuIERvIG5vdCBleHBlY3QgZ29vZCBwZXJmb3JtYW5jZS4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKworI2luY2x1ZGUgIm1zbmQuaCIKKworI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9JTlBVVAkJMAorI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9PVVRQVVQJCTEKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUgkyCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX09VVFBVVF9UUklHR0VSCTMKKworc3RydWN0IHNuZF9tc25kbWlkaSB7CisJc3RydWN0IHNuZF9tc25kICpkZXY7CisKKwl1bnNpZ25lZCBsb25nIG1vZGU7CQkvKiBNU05ETUlESV9NT0RFX1hYWFggKi8KKworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbV9pbnB1dDsKKworCXNwaW5sb2NrX3QgaW5wdXRfbG9jazsKK307CisKKy8qCisgKiBpbnB1dC9vdXRwdXQgb3Blbi9jbG9zZSAtIHByb3RlY3RlZCBieSBvcGVuX211dGV4IGluIHJhd21pZGkuYworICovCitzdGF0aWMgaW50IHNuZF9tc25kbWlkaV9pbnB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRtaWRpX2lucHV0X29wZW4oKVxuIik7CisKKwltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwltcHUtPnN1YnN0cmVhbV9pbnB1dCA9IHN1YnN0cmVhbTsKKworCXNuZF9tc25kX2VuYWJsZV9pcnEobXB1LT5kZXYpOworCisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+ZGV2LCBIREVYX01JRElfSU5fU1RBUlQpOworCXNldF9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWlkaV9pbnB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCisJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPmRldiwgSERFWF9NSURJX0lOX1NUT1ApOworCWNsZWFyX2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVCwgJm1wdS0+bW9kZSk7CisJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBOVUxMOworCXNuZF9tc25kX2Rpc2FibGVfaXJxKG1wdS0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2lucHV0X2Ryb3Aoc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1KQoreworCXUxNiB0YWlsOworCisJdGFpbCA9IHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dUYWlsKTsKKwl3cml0ZXcodGFpbCwgbXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpOworfQorCisvKgorICogdHJpZ2dlciBpbnB1dAorICovCitzdGF0aWMgdm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCWludCB1cCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKworCXNuZF9wcmludGRkKCJzbmRfbXNuZG1pZGlfaW5wdXRfdHJpZ2dlcigsICVpKVxuIiwgdXApOworCisJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCXNwaW5fbG9ja19pcnFzYXZlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwlpZiAodXApIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIsCisJCQkJICAgICAgJm1wdS0+bW9kZSkpCisJCQlzbmRfbXNuZG1pZGlfaW5wdXRfZHJvcChtcHUpOworCX0gZWxzZSB7CisJCWNsZWFyX2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLCAmbXB1LT5tb2RlKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7CisJaWYgKHVwKQorCQlzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZChtcHUpOworfQorCit2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKHZvaWQgKm1wdXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHUgPSBtcHV2OworCXZvaWQgKnB3TUlEUURhdGEgPSBtcHUtPmRldi0+bWFwcGVkYmFzZSArIE1JRFFfREFUQV9CVUZGOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCXdoaWxlIChyZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193VGFpbCkgIT0KKwkgICAgICAgcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpKSB7CisJCXUxNiB3VG1wLCB2YWw7CisJCXZhbCA9IHJlYWR3KHB3TUlEUURhdGEgKyAyICogcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpKTsKKworCQkJaWYgKHRlc3RfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIsCisJCQkJICAgICAmbXB1LT5tb2RlKSkKKwkJCQlzbmRfcmF3bWlkaV9yZWNlaXZlKG1wdS0+c3Vic3RyZWFtX2lucHV0LAorCQkJCQkJICAgICh1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7CisKKwkJd1RtcCA9IHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSArIDE7CisJCWlmICh3VG1wID4gcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd1NpemUpKQorCQkJd3JpdGV3KDAsICBtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCk7CisJCWVsc2UKKwkJCXdyaXRldyh3VG1wLCAgbXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaWRpX2lucHV0X3JlYWQpOworCitzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBzbmRfbXNuZG1pZGlfaW5wdXQgPSB7CisJLm9wZW4gPQkJc25kX21zbmRtaWRpX2lucHV0X29wZW4sCisJLmNsb3NlID0Jc25kX21zbmRtaWRpX2lucHV0X2Nsb3NlLAorCS50cmlnZ2VyID0Jc25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIsCit9OworCitzdGF0aWMgdm9pZCBzbmRfbXNuZG1pZGlfZnJlZShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpKQoreworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdSA9IHJtaWRpLT5wcml2YXRlX2RhdGE7CisJa2ZyZWUobXB1KTsKK30KKworaW50IHNuZF9tc25kbWlkaV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3Jhd21pZGlfbmV3KGNhcmQsICJNU05ELU1JREkiLCBkZXZpY2UsIDEsIDEsICZybWlkaSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJbXB1ID0ga2NhbGxvYygxLCBzaXplb2YoKm1wdSksIEdGUF9LRVJORUwpOworCWlmIChtcHUgPT0gTlVMTCkgeworCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgcm1pZGkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbXB1LT5kZXYgPSBjaGlwOworCWNoaXAtPm1zbmRtaWRpX21wdSA9IG1wdTsKKwlybWlkaS0+cHJpdmF0ZV9kYXRhID0gbXB1OworCXJtaWRpLT5wcml2YXRlX2ZyZWUgPSBzbmRfbXNuZG1pZGlfZnJlZTsKKwlzcGluX2xvY2tfaW5pdCgmbXB1LT5pbnB1dF9sb2NrKTsKKwlzdHJjcHkocm1pZGktPm5hbWUsICJNU05EIE1JREkiKTsKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKKwkJCSAgICAmc25kX21zbmRtaWRpX2lucHV0KTsKKwlybWlkaS0+aW5mb19mbGFncyB8PSBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQ7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiNmFiZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYwpAQCAtMCwwICsxLDEyMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMaW51eCBtdWx0aXNvdW5kIHBpbm5hY2xlL2ZpamkgZHJpdmVyIGZvciBBTFNBLgorICoKKyAqIDIwMDIvMDYvMzAgS2Fyc3RlbiBXaWVzZToKKyAqCWZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgdG8gYnVpbGQgYSBwaW5uYWNsZSAvIGZpamkgZHJpdmVyLgorICoJdGhlIE9TUyBwYXJlbnQgb2YgdGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIGFsc28gc3VwcG9ydAorICoJdGhlIG11bHRpc291bmQgY2xhc3NpYyB2aWEgdGhlIGZpbGUgbXNuZF9jbGFzc2ljLmMuCisgKgl0byBtYWtlIGl0IGVhc2llciBmb3Igc29tZSBicmF2ZSBoZWFydCB0byBpbXBsZW10IGNsYXNzaWMKKyAqCXN1cHBvcnQgaW4gYWxzYSwgaSBsZWZ0IGFsbCB0aGUgTVNORF9DTEFTU0lDIHRva2VucyBpbiB0aGlzIGZpbGUuCisgKglidXQgZm9yIG5vdyB0aGlzIHVudGVzdGVkICYgdW5kb25lLgorICoKKyAqCisgKiByaXBwZWQgZnJvbSBsaW51eCBrZXJuZWwgMi40LjE4IGJ5IEthcnN0ZW4gV2llc2UuCisgKgorICogdGhlIGZvbGxvd2luZyBpcyBhIGNvcHkgb2YgdGhlIDIuNC4xOCBPU1MgRlJFRSBmaWxlLWhlYWRpbmcgY29tbWVudDoKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqIG1zbmRfcGlubmFjbGUuYyAvIG1zbmRfY2xhc3NpYy5jCisgKgorICogLS0gSWYgTVNORF9DTEFTU0lDIGlzIGRlZmluZWQ6CisgKgorICogICAgIC0+IGRyaXZlciBmb3IgVHVydGxlIEJlYWNoIENsYXNzaWMvTW9udGVyZXkvVGFoaXRpCisgKgorICogLS0gRWxzZQorICoKKyAqICAgICAtPiBkcml2ZXIgZm9yIFR1cnRsZSBCZWFjaCBQaW5uYWNsZS9GaWppCisgKgorICogMTItMy0yMDAwICBNb2RpZmllZCBJTyBwb3J0IHZhbGlkYXRpb24gIFN0ZXZlIFN5Y2Ftb3JlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CisjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKyMgaWZuZGVmIF9fYWxwaGFfXworIyAgZGVmaW5lIFNMT1dJTworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSAibXNuZC5oIgorI2lmZGVmIE1TTkRfQ0xBU1NJQworIyAgaW5jbHVkZSAibXNuZF9jbGFzc2ljLmgiCisjICBkZWZpbmUgTE9HTkFNRQkJCSJtc25kX2NsYXNzaWMiCisjZWxzZQorIyAgaW5jbHVkZSAibXNuZF9waW5uYWNsZS5oIgorIyAgZGVmaW5lIExPR05BTUUJCQkic25kX21zbmRfcGlubmFjbGUiCisjZW5kaWYKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHNldF9kZWZhdWx0X2F1ZGlvX3BhcmFtZXRlcnMoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCWNoaXAtPnBsYXlfc2FtcGxlX3NpemUgPSBERUZTQU1QTEVTSVpFOworCWNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgPSBERUZTQU1QTEVSQVRFOworCWNoaXAtPnBsYXlfY2hhbm5lbHMgPSBERUZDSEFOTkVMUzsKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplID0gREVGU0FNUExFU0laRTsKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlID0gREVGU0FNUExFUkFURTsKKwljaGlwLT5jYXB0dXJlX2NoYW5uZWxzID0gREVGQ0hBTk5FTFM7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX2V2YWxfZHNwX21zZyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHUxNiB3TWVzc2FnZSkKK3sKKwlzd2l0Y2ggKEhJQllURSh3TWVzc2FnZSkpIHsKKwljYXNlIEhJTVRfUExBWV9ET05FOiB7CisJCWlmIChjaGlwLT5iYW5rc1BsYXllZCA8IDMpCisJCQlzbmRfcHJpbnRkZCgiJTA4WDogSElNVF9QTEFZX0RPTkU6ICVpXG4iLAorCQkJCSh1bnNpZ25lZClqaWZmaWVzLCBMT0JZVEUod01lc3NhZ2UpKTsKKworCQlpZiAoY2hpcC0+bGFzdF9wbGF5YmFuayA9PSBMT0JZVEUod01lc3NhZ2UpKSB7CisJCQlzbmRfcHJpbnRkZCgiY2hpcC5sYXN0X3BsYXliYW5rID09IExPQllURSh3TWVzc2FnZSlcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJY2hpcC0+YmFua3NQbGF5ZWQrKzsKKworCQlpZiAodGVzdF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpKQorCQkJc25kX21zbmRfREFQUShjaGlwLCAwKTsKKworCQljaGlwLT5sYXN0X3BsYXliYW5rID0gTE9CWVRFKHdNZXNzYWdlKTsKKwkJY2hpcC0+cGxheURNQVBvcyArPSBjaGlwLT5wbGF5X3BlcmlvZF9ieXRlczsKKwkJaWYgKGNoaXAtPnBsYXlETUFQb3MgPiBjaGlwLT5wbGF5TGltaXQpCisJCQljaGlwLT5wbGF5RE1BUG9zID0gMDsKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pOworCisJCWJyZWFrOworCX0KKwljYXNlIEhJTVRfUkVDT1JEX0RPTkU6CisJCWlmIChjaGlwLT5sYXN0X3JlY2JhbmsgPT0gTE9CWVRFKHdNZXNzYWdlKSkKKwkJCWJyZWFrOworCQljaGlwLT5sYXN0X3JlY2JhbmsgPSBMT0JZVEUod01lc3NhZ2UpOworCQljaGlwLT5jYXB0dXJlRE1BUG9zICs9IGNoaXAtPmNhcHR1cmVQZXJpb2RCeXRlczsKKwkJaWYgKGNoaXAtPmNhcHR1cmVETUFQb3MgPiAoY2hpcC0+Y2FwdHVyZUxpbWl0KSkKKwkJCWNoaXAtPmNhcHR1cmVETUFQb3MgPSAwOworCisJCWlmICh0ZXN0X2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncykpCisJCQlzbmRfbXNuZF9EQVJRKGNoaXAsIGNoaXAtPmxhc3RfcmVjYmFuayk7CisKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSk7CisJCWJyZWFrOworCisJY2FzZSBISU1UX0RTUDoKKwkJc3dpdGNoIChMT0JZVEUod01lc3NhZ2UpKSB7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCQljYXNlIEhJRFNQX1BMQVlfVU5ERVI6CisjZW5kaWYKKwkJY2FzZSBISURTUF9JTlRfUExBWV9VTkRFUjoKKwkJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogUGxheSB1bmRlcmZsb3cgJWlcbiIsCisJCQkJY2hpcC0+YmFua3NQbGF5ZWQpOworCQkJaWYgKGNoaXAtPmJhbmtzUGxheWVkID4gMikKKwkJCQljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURTUF9JTlRfUkVDT1JEX09WRVI6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IFJlY29yZCBvdmVyZmxvd1xuIik7CisJCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUKKwkJCQkgICAiOiBEU1AgbWVzc2FnZSAlZCAweCUwMnhcbiIsCisJCQkJICAgTE9CWVRFKHdNZXNzYWdlKSwgTE9CWVRFKHdNZXNzYWdlKSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSElNVF9NSURJX0lOX1VDSEFSOgorCQlpZiAoY2hpcC0+bXNuZG1pZGlfbXB1KQorCQkJc25kX21zbmRtaWRpX2lucHV0X3JlYWQoY2hpcC0+bXNuZG1pZGlfbXB1KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IEhJTVQgbWVzc2FnZSAlZCAweCUwMnhcbiIsCisJCQkgICBISUJZVEUod01lc3NhZ2UpLCBISUJZVEUod01lc3NhZ2UpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX21zbmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBkZXZfaWQ7CisJdm9pZCAqcHdEU1BRRGF0YSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEU1BRX0RBVEFfQlVGRjsKKworCS8qIFNlbmQgYWNrIHRvIERTUCAqLworCS8qIGluYihjaGlwLT5pbyArIEhQX1JYTCk7ICovCisKKwkvKiBFdmFsdWF0ZSBxdWV1ZWQgRFNQIG1lc3NhZ2VzICovCisJd2hpbGUgKHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd1RhaWwpICE9IHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpKSB7CisJCXUxNiB3VG1wOworCisJCXNuZF9tc25kX2V2YWxfZHNwX21zZyhjaGlwLAorCQkJcmVhZHcocHdEU1BRRGF0YSArIDIgKiByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dIZWFkKSkpOworCisJCXdUbXAgPSByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dIZWFkKSArIDE7CisJCWlmICh3VG1wID4gcmVhZHcoY2hpcC0+RFNQUSArIEpRU193U2l6ZSkpCisJCQl3cml0ZXcoMCwgY2hpcC0+RFNQUSArIEpRU193SGVhZCk7CisJCWVsc2UKKwkJCXdyaXRldyh3VG1wLCBjaGlwLT5EU1BRICsgSlFTX3dIZWFkKTsKKwl9CisJLyogU2VuZCBhY2sgdG8gRFNQICovCisJaW5iKGNoaXAtPmlvICsgSFBfUlhMKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9yZXNldF9kc3AobG9uZyBpbywgdW5zaWduZWQgY2hhciAqaW5mbykKK3sKKwlpbnQgdGltZW91dCA9IDEwMDsKKworCW91dGIoSFBEU1BSRVNFVF9PTiwgaW8gKyBIUF9EU1BSKTsKKwltc2xlZXAoMSk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChpbmZvKQorCQkqaW5mbyA9IGluYihpbyArIEhQX0lORk8pOworI2VuZGlmCisJb3V0YihIUERTUFJFU0VUX09GRiwgaW8gKyBIUF9EU1BSKTsKKwltc2xlZXAoMSk7CisJd2hpbGUgKHRpbWVvdXQtLSA+IDApIHsKKwkJaWYgKGluYihpbyArIEhQX0NWUikgPT0gSFBfQ1ZSX0RFRikKKwkJCXJldHVybiAwOworCQltc2xlZXAoMSk7CisJfQorCXNuZF9wcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBDYW5ub3QgcmVzZXQgRFNQXG4iKTsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgaW5mbzsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJY2hhciAqeHYsICpyZXYgPSBOVUxMOworCWNoYXIgKnBpbiA9ICJUQiBQaW5uYWNsZSIsICpmaWppID0gIlRCIEZpamkiOworCWNoYXIgKnBpbmZpamkgPSAiVEIgUGlubmFjbGUvRmlqaSI7CisjZW5kaWYKKworCWlmICghcmVxdWVzdF9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTywgInByb2JpbmciKSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoc25kX21zbmRfcmVzZXRfZHNwKGNoaXAtPmlvLCAmaW5mbykgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQ2xhc3NpYy9UYWhpdGkvTW9udGVyZXkiKTsKKwlzdHJjcHkoY2FyZC0+bG9uZ25hbWUsICJUdXJ0bGUgQmVhY2ggTXVsdGlzb3VuZCIpOworCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiAlcywgIgorCSAgICAgICAiSS9PIDB4JWx4LTB4JWx4LCBJUlEgJWQsIG1lbW9yeSBtYXBwZWQgdG8gMHglbFgtMHglbFhcbiIsCisJICAgICAgIGNhcmQtPnNob3J0bmFtZSwKKwkgICAgICAgY2hpcC0+aW8sIGNoaXAtPmlvICsgRFNQX05VTUlPIC0gMSwKKwkgICAgICAgY2hpcC0+aXJxLAorCSAgICAgICBjaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgMHg3ZmZmKTsKKyNlbHNlCisJc3dpdGNoIChpbmZvID4+IDQpIHsKKwljYXNlIDB4ZjoKKwkJeHYgPSAiPD0gMS4xNSI7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQl4diA9ICIxLjE4LzEuMiI7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQl4diA9ICIxLjMiOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJeHYgPSAiMS40IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJeHYgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5mbyAmIDB4NykgeworCWNhc2UgMHgwOgorCQlyZXYgPSAiSSI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQlyZXYgPSAiRiI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQlyZXYgPSAiRyI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlyZXYgPSAiSCI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQlyZXYgPSAiRSI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZpamkpOworCQlicmVhazsKKwljYXNlIDB4NToKKwkJcmV2ID0gIkMiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBmaWppKTsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCXJldiA9ICJEIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZmlqaSk7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlyZXYgPSAiQS1CIChGaWppKSBvciBBLUUgKFBpbm5hY2xlKSI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbmZpamkpOworCQlicmVhazsKKwl9CisJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAiVHVydGxlIEJlYWNoIE11bHRpc291bmQgUGlubmFjbGUiKTsKKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogJXMgcmV2aXNpb24gJXMsIFhpbGlueCB2ZXJzaW9uICVzLCAiCisJICAgICAgICJJL08gMHglbHgtMHglbHgsIElSUSAlZCwgbWVtb3J5IG1hcHBlZCB0byAweCVsWC0weCVsWFxuIiwKKwkgICAgICAgY2FyZC0+c2hvcnRuYW1lLAorCSAgICAgICByZXYsIHh2LAorCSAgICAgICBjaGlwLT5pbywgY2hpcC0+aW8gKyBEU1BfTlVNSU8gLSAxLAorCSAgICAgICBjaGlwLT5pcnEsCisJICAgICAgIGNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyAweDdmZmYpOworI2VuZGlmCisKKwlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9pbml0X3NtYShzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJc3RhdGljIGludCBpbml0dGVkOworCXUxNiBtYXN0Vm9sTGVmdCwgbWFzdFZvbFJpZ2h0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlvdXRiKGNoaXAtPm1lbWlkLCBjaGlwLT5pbyArIEhQX01FTU0pOworI2VuZGlmCisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCS8qIE1vdG9yb2xhIDU2ayBzaGFyZWQgbWVtb3J5IGJhc2UgKi8KKwljaGlwLT5TTUEgPSBjaGlwLT5tYXBwZWRiYXNlICsgU01BX1NUUlVDVF9TVEFSVDsKKworCWlmIChpbml0dGVkKSB7CisJCW1hc3RWb2xMZWZ0ID0gcmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpOworCQltYXN0Vm9sUmlnaHQgPSByZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpOworCX0gZWxzZQorCQltYXN0Vm9sTGVmdCA9IG1hc3RWb2xSaWdodCA9IDA7CisJbWVtc2V0X2lvKGNoaXAtPm1hcHBlZGJhc2UsIDAsIDB4ODAwMCk7CisKKwkvKiBDcml0aWNhbCBzZWN0aW9uOiBiYW5rIDEgYWNjZXNzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKwlvdXRiKEhQQkxLU0VMXzEsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJbWVtc2V0X2lvKGNoaXAtPm1hcHBlZGJhc2UsIDAsIDB4ODAwMCk7CisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCS8qIERpZ2l0YWwgYXVkaW8gcGxheSBxdWV1ZSAqLworCWNoaXAtPkRBUFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFQUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EQVBRLCBEQVBRX0RBVEFfQlVGRiwgREFQUV9CVUZGX1NJWkUpOworCisJLyogRGlnaXRhbCBhdWRpbyByZWNvcmQgcXVldWUgKi8KKwljaGlwLT5EQVJRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+REFSUSwgREFSUV9EQVRBX0JVRkYsIERBUlFfQlVGRl9TSVpFKTsKKworCS8qIE1JREkgb3V0IHF1ZXVlICovCisJY2hpcC0+TU9EUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBNT0RRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPk1PRFEsIE1PRFFfREFUQV9CVUZGLCBNT0RRX0JVRkZfU0laRSk7CisKKwkvKiBNSURJIGluIHF1ZXVlICovCisJY2hpcC0+TUlEUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBNSURRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPk1JRFEsIE1JRFFfREFUQV9CVUZGLCBNSURRX0JVRkZfU0laRSk7CisKKwkvKiBEU1AgLT4gaG9zdCBtZXNzYWdlIHF1ZXVlICovCisJY2hpcC0+RFNQUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEU1BRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRTUFEsIERTUFFfREFUQV9CVUZGLCBEU1BRX0JVRkZfU0laRSk7CisKKwkvKiBTZXR1cCBzb21lIERTUCB2YWx1ZXMgKi8KKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJd3JpdGV3KDEsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlGb3JtYXQpOworCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9zaXplLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5U2FtcGxlU2l6ZSk7CisJd3JpdGV3KGNoaXAtPnBsYXlfY2hhbm5lbHMsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlDaGFubmVscyk7CisJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlTYW1wbGVSYXRlKTsKKyNlbmRpZgorCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0NhbEZyZXFBdG9EKTsKKwl3cml0ZXcobWFzdFZvbExlZnQsIGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwl3cml0ZXcobWFzdFZvbFJpZ2h0LCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwl3cml0ZWwoMHgwMDAxMDAwMCwgY2hpcC0+U01BICsgU01BX2R3Q3VyclBsYXlQaXRjaCk7CisJd3JpdGVsKDB4MDAwMDAwMDEsIGNoaXAtPlNNQSArIFNNQV9kd0N1cnJQbGF5UmF0ZSk7CisjZW5kaWYKKwl3cml0ZXcoMHgzMDMsIGNoaXAtPlNNQSArIFNNQV93Q3VycklucHV0VGFnQml0cyk7CisKKwlpbml0dGVkID0gMTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdXBsb2FkX2RzcF9jb2RlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICppbml0X2Z3ID0gTlVMTCwgKnBlcm1fZncgPSBOVUxMOworCWludCBlcnI7CisKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZpbml0X2Z3LCBJTklUQ09ERUZJTEUsIGNhcmQtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogRXJyb3IgbG9hZGluZyAiIElOSVRDT0RFRklMRSk7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnBlcm1fZncsIFBFUk1DT0RFRklMRSwgY2FyZC0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBFcnJvciBsb2FkaW5nICIgUEVSTUNPREVGSUxFKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCW1lbWNweV90b2lvKGNoaXAtPm1hcHBlZGJhc2UsIHBlcm1fZnctPmRhdGEsIHBlcm1fZnctPnNpemUpOworCWlmIChzbmRfbXNuZF91cGxvYWRfaG9zdChjaGlwLCBpbml0X2Z3LT5kYXRhLCBpbml0X2Z3LT5zaXplKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IEVycm9yIHVwbG9hZGluZyB0byBEU1BcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGNsZWFudXA7CisJfQorCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBEU1AgZmlybXdhcmUgdXBsb2FkZWRcbiIpOworCWVyciA9IDA7CisKK2NsZWFudXA6CisJcmVsZWFzZV9maXJtd2FyZShwZXJtX2Z3KTsKK2NsZWFudXAxOgorCXJlbGVhc2VfZmlybXdhcmUoaW5pdF9mdyk7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworc3RhdGljIHZvaWQgcmVzZXRfcHJvdGV1cyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJb3V0YihIUFBST1JFU0VUX09OLCBjaGlwLT5pbyArIEhQX1BST1IpOworCW1zbGVlcChUSU1FX1BST19SRVNFVCk7CisJb3V0YihIUFBST1JFU0VUX09GRiwgY2hpcC0+aW8gKyBIUF9QUk9SKTsKKwltc2xlZXAoVElNRV9QUk9fUkVTRVRfRE9ORSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzbmRfbXNuZF9pbml0aWFsaXplKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaW50IGVyciwgdGltZW91dDsKKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCW91dGIoSFBXQUlUU1RBVEVfMCwgY2hpcC0+aW8gKyBIUF9XQUlUKTsKKwlvdXRiKEhQQklUTU9ERV8xNiwgY2hpcC0+aW8gKyBIUF9CSVRNKTsKKworCXJlc2V0X3Byb3RldXMoY2hpcCk7CisjZW5kaWYKKwllcnIgPSBzbmRfbXNuZF9pbml0X3NtYShjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQ2Fubm90IGluaXRpYWxpemUgU01BXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZF9yZXNldF9kc3AoY2hpcC0+aW8sIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gdXBsb2FkX2RzcF9jb2RlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBDYW5ub3QgdXBsb2FkIERTUCBjb2RlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl0aW1lb3V0ID0gMjAwOworCisJd2hpbGUgKHJlYWR3KGNoaXAtPm1hcHBlZGJhc2UpKSB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKCF0aW1lb3V0LS0pIHsKKwkJCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBEU1AgcmVzZXQgdGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCXNuZF9tc25kbWl4X3NldHVwKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2RzcF9mdWxsX3Jlc2V0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaW50IHJ2OworCisJaWYgKHRlc3RfYml0KEZfUkVTRVRUSU5HLCAmY2hpcC0+ZmxhZ3MpIHx8ICsrY2hpcC0+bnJlc2V0cyA+IDEwKQorCQlyZXR1cm4gMDsKKworCXNldF9iaXQoRl9SRVNFVFRJTkcsICZjaGlwLT5mbGFncyk7CisJc25kX21zbmRfZHNwX2hhbHQoY2hpcCwgTlVMTCk7CS8qIFVuY29uZGl0aW9uYWxseSBoYWx0ICovCisKKwlydiA9IHNuZF9tc25kX2luaXRpYWxpemUoY2FyZCk7CisJaWYgKHJ2KQorCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogRFNQIHJlc2V0IGZhaWxlZFxuIik7CisJc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKGNoaXAsIDApOworCWNsZWFyX2JpdChGX1JFU0VUVElORywgJmNoaXAtPmZsYWdzKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfY2hpcF9mcmVlKClcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZF9jaGsoc3RydWN0IHNuZF9tc25kICpjaGlwLCB1OCBjbWQpCit7CisJaWYgKHNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBjbWQpID09IDApCisJCXJldHVybiAwOworCXNuZF9tc25kX2RzcF9mdWxsX3Jlc2V0KGNoaXAtPmNhcmQpOworCXJldHVybiBzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgY21kKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfY2FsaWJyYXRlX2FkYyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHUxNiBzcmF0ZSkKK3sKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfY2FsaWJyYXRlX2FkYyglaSlcbiIsIHNyYXRlKTsKKwl3cml0ZXcoc3JhdGUsIGNoaXAtPlNNQSArIFNNQV93Q2FsRnJlcUF0b0QpOworCWlmIChjaGlwLT5jYWxpYnJhdGVfc2lnbmFsID09IDApCisJCXdyaXRldyhyZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpCisJCSAgICAgICB8IDB4MDAwMSwgY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKTsKKwllbHNlCisJCXdyaXRldyhyZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpCisJCSAgICAgICAmIH4weDAwMDEsIGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncyk7CisJaWYgKHNuZF9tc25kX3NlbmRfd29yZChjaGlwLCAwLCAwLCBIREVYQVJfQ0FMX0FfVE9fRCkgPT0gMCAmJgorCSAgICBzbmRfbXNuZF9zZW5kX2RzcF9jbWRfY2hrKGNoaXAsIEhERVhfQVVYX1JFUSkgPT0gMCkgeworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygzMzMpKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBBREMgY2FsaWJyYXRpb24gZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIEFMU0EgY2FsbGJhY2sgZnVuY3Rpb24sIGNhbGxlZCB3aGVuIGF0dGVtcHRpbmcgdG8gb3BlbiB0aGUgTUlESSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgc25kX21zbmRfbXB1NDAxX29wZW4oc3RydWN0IHNuZF9tcHU0MDEgKm1wdSkKK3sKKwlzbmRfbXNuZF9lbmFibGVfaXJxKG1wdS0+cHJpdmF0ZV9kYXRhKTsKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5wcml2YXRlX2RhdGEsIEhERVhfTUlESV9JTl9TVEFSVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX21wdTQwMV9jbG9zZShzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1KQoreworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPnByaXZhdGVfZGF0YSwgSERFWF9NSURJX0lOX1NUT1ApOworCXNuZF9tc25kX2Rpc2FibGVfaXJxKG1wdS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGxvbmcgbXB1X2lvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgbXB1X2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfYXR0YWNoKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKwlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKKwkJLmRldl9mcmVlID0gICAgICBzbmRfbXNuZF9kZXZfZnJlZSwKKwkJfTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGNoaXAtPmlycSwgc25kX21zbmRfaW50ZXJydXB0LCAwLCBjYXJkLT5zaG9ydG5hbWUsCisJCQkgIGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENvdWxkbid0IGdyYWIgSVJRICVkXG4iLCBjaGlwLT5pcnEpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXF1ZXN0X3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPLCBjYXJkLT5zaG9ydG5hbWUpOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY2hpcC0+YmFzZSwgQlVGRlNJWkUsIGNhcmQtPnNob3J0bmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IHVuYWJsZSB0byBncmFiIG1lbW9yeSByZWdpb24gMHglbHgtMHglbHhcbiIsCisJCQljaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgQlVGRlNJWkUgLSAxKTsKKwkJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoaXAtPm1hcHBlZGJhc2UgPSBpb3JlbWFwX25vY2FjaGUoY2hpcC0+YmFzZSwgMHg4MDAwKTsKKwlpZiAoIWNoaXAtPm1hcHBlZGJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IHVuYWJsZSB0byBtYXAgbWVtb3J5IHJlZ2lvbiAweCVseC0weCVseFxuIiwKKwkJCWNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyBCVUZGU0laRSAtIDEpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwkvKiBSZWdpc3RlciBkZXZpY2UgKi8KKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKworCWVyciA9IHNuZF9tc25kX3BjbShjYXJkLCAwLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBlcnJvciBjcmVhdGluZyBuZXcgUENNIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCWVyciA9IHNuZF9tc25kbWl4X25ldyhjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBlcnJvciBjcmVhdGluZyBuZXcgTWl4ZXIgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisKKwlpZiAobXB1X2lvWzBdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1OworCisJCWVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKKwkJCQkJICBtcHVfaW9bMF0sCisJCQkJCSAgTVBVNDAxX01PREVfSU5QVVQgfAorCQkJCQkgIE1QVTQwMV9NT0RFX09VVFBVVCwKKwkJCQkJICBtcHVfaXJxWzBdLCBJUlFGX0RJU0FCTEVELAorCQkJCQkgICZjaGlwLT5ybWlkaSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJCSI6IGVycm9yIGNyZWF0aW5nIG5ldyBNaWRpIGRldmljZVxuIik7CisJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwkJfQorCQltcHUgPSBjaGlwLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJCW1wdS0+b3Blbl9pbnB1dCA9IHNuZF9tc25kX21wdTQwMV9vcGVuOworCQltcHUtPmNsb3NlX2lucHV0ID0gc25kX21zbmRfbXB1NDAxX2Nsb3NlOworCQltcHUtPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJfQorCisJZGlzYWJsZV9pcnEoY2hpcC0+aXJxKTsKKwlzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKGNoaXAsIGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUpOworCXNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhjaGlwLCAwKTsKKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKworCXJldHVybiAwOworCitlcnJfcmVsZWFzZV9yZWdpb246CisJaWYgKGNoaXAtPm1hcHBlZGJhc2UpCisJCWlvdW5tYXAoY2hpcC0+bWFwcGVkYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9tc25kX3VubG9hZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJaW91bm1hcChjaGlwLT5tYXBwZWRiYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oY2hpcC0+YmFzZSwgQlVGRlNJWkUpOworCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKK30KKworI2lmbmRlZiBNU05EX0NMQVNTSUMKKworLyogUGlubmFjbGUvRmlqaSBMb2dpY2FsIERldmljZSBDb25maWd1cmF0aW9uICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZyhpbnQgY2ZnLCBpbnQgcmVnLCBpbnQgdmFsdWUpCit7CisJb3V0YihyZWcsIGNmZyk7CisJb3V0Yih2YWx1ZSwgY2ZnICsgMSk7CisJaWYgKHZhbHVlICE9IGluYihjZmcgKyAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBzbmRfbXNuZF93cml0ZV9jZmc6IEkvTyBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2lvMChpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaW8pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzBfQkFTRUhJLCBISUJZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VMTywgTE9CWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfaW8xKGludCBjZmcsIGludCBudW0sIHUxNiBpbykKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMV9CQVNFSEksIEhJQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUxPLCBMT0JZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19pcnEoaW50IGNmZywgaW50IG51bSwgdTE2IGlycSkKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9OVU1CRVIsIExPQllURShpcnEpKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSVJRX1RZUEUsIElSUVRZUEVfRURHRSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfbWVtKGludCBjZmcsIGludCBudW0sIGludCBtZW0pCit7CisJdTE2IHdtZW07CisKKwltZW0gPj49IDg7CisJd21lbSA9ICh1MTYpKG1lbSAmIDB4ZmZmKTsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUJBU0VISSwgSElCWVRFKHdtZW0pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTUVNQkFTRUxPLCBMT0JZVEUod21lbSkpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAod21lbSAmJiBzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUNPTlRST0wsCisJCQkJICAgICAgIE1FTVRZUEVfSElBRERSIHwgTUVNVFlQRV8xNkJJVCkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGludCBjZmcsIGludCBudW0pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19BQ1RJVkFURSwgTERfQUNUSVZBVEUpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoaW50IGNmZywgaW50IG51bSwgdTE2IGlvMCwKKwkJCQkJCXUxNiBpbzEsIHUxNiBpcnEsIGludCBtZW0pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2lvMChjZmcsIG51bSwgaW8wKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19pbzEoY2ZnLCBudW0sIGlvMSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfaXJxKGNmZywgbnVtLCBpcnEpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX21lbShjZmcsIG51bSwgbWVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX2FjdGl2YXRlX2xvZ2ljYWwoY2ZnLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfcGlubmFjbGVfY2ZnX3Jlc2V0KGludCBjZmcpCit7CisJaW50IGk7CisKKwkvKiBSZXNldCBkZXZpY2VzIGlmIHRvbGQgdG8gKi8KKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogUmVzZXR0aW5nIGFsbCBkZXZpY2VzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorCQlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnLCBpLCAwLCAwLCAwLCAwKSkKKwkJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIG1zbmRfcGlubmFjbGUgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBtc25kX3Bpbm5hY2xlIHNvdW5kY2FyZC4iKTsKKworc3RhdGljIGxvbmcgaW9bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgbG9uZyBtZW1bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworCitzdGF0aWMgbG9uZyBjZmdbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworLyogRXh0cmEgUGVyaXBoZXJhbCBDb25maWd1cmF0aW9uIChEZWZhdWx0OiBEaXNhYmxlKSAqLworc3RhdGljIGxvbmcgaWRlX2lvMFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgbG9uZyBpZGVfaW8xW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgaWRlX2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKKworc3RhdGljIGxvbmcgam95c3RpY2tfaW9bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworLyogSWYgd2UgaGF2ZSB0aGUgZGlnaXRhbCBkYXVnaGVyYm9hcmQuLi4gKi8KK3N0YXRpYyBpbnQgZGlnaXRhbFtTTkRSVl9DQVJEU107CisKKy8qIEV4dHJhIFBlcmlwaGVyYWwgQ29uZmlndXJhdGlvbiAqLworc3RhdGljIGludCByZXNldFtTTkRSVl9DQVJEU107CisjZW5kaWYKKworc3RhdGljIGludCB3cml0ZV9uZGVsYXlbU05EUlZfQ0FSRFNdID0geyBbMCAuLi4gKFNORFJWX0NBUkRTLTEpXSA9IDEgfTsKKworc3RhdGljIGludCBjYWxpYnJhdGVfc2lnbmFsOworCisjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIGludCBpc2FwbnBbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworbW9kdWxlX3BhcmFtX2FycmF5KGlzYXBucCwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlzYXBucCwgIklTQSBQblAgZGV0ZWN0aW9uIGZvciBzcGVjaWZpZWQgc291bmRjYXJkLiIpOworI2RlZmluZSBoYXNfaXNhcG5wKHgpIGlzYXBucFt4XQorI2Vsc2UKKyNkZWZpbmUgaGFzX2lzYXBucCh4KSAwCisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBXaWVzZSA8YW5uYWJlbGxlc2dhcmRlbkB5YWhvby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVHVydGxlIEJlYWNoICIgTE9OR05BTUUgIiBMaW51eCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRShJTklUQ09ERUZJTEUpOworTU9EVUxFX0ZJUk1XQVJFKFBFUk1DT0RFRklMRSk7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbywgbG9uZywgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSU8gcG9ydCAjIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KG1lbSwgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkod3JpdGVfbmRlbGF5LCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNhbGlicmF0ZV9zaWduYWwsIGludCwgU19JUlVHTyk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworbW9kdWxlX3BhcmFtX2FycmF5KGRpZ2l0YWwsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoY2ZnLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShyZXNldCwgaW50LCAwLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVfaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pcnEsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWRlX2lvMCwgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWRlX2lvMSwgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWRlX2lycSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShqb3lzdGlja19pbywgbG9uZywgTlVMTCwgU19JUlVHTyk7CisjZW5kaWYKKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGkpCit7CisJaWYgKGlvW2ldID09IFNORFJWX0FVVE9fUE9SVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXJxW2ldID09IFNORFJWX0FVVE9fUE9SVCB8fCBtZW1baV0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBpbywgaXJxIGFuZCBtZW0gbXVzdCBiZSBzZXRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoIShpb1tpXSA9PSAweDI5MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjYwIHx8CisJICAgICAgaW9baV0gPT0gMHgyNTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDI0MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjMwIHx8CisJICAgICAgaW9baV0gPT0gMHgyMjAgfHwKKwkgICAgICBpb1tpXSA9PSAweDIxMCB8fAorCSAgICAgIGlvW2ldID09IDB4M2UwKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBcImlvXCIgLSBEU1AgSS9PIGJhc2UgbXVzdCBiZSBzZXQgIgorCQkJIiB0byAweDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MCwgMHgyNTAsIDB4MjYwLCAweDI5MCwgIgorCQkJIm9yIDB4M0UwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorI2Vsc2UKKwlpZiAoaW9baV0gPCAweDEwMCB8fCBpb1tpXSA+IDB4M2UwIHx8IChpb1tpXSAlIDB4MTApICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IFwiaW9cIiAtIERTUCBJL08gYmFzZSBtdXN0IHdpdGhpbiB0aGUgcmFuZ2UgMHgxMDAgIgorCQkJInRvIDB4M0UwIGFuZCBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUgYnkgMHgxMFxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBNU05EX0NMQVNTSUMgKi8KKworCWlmICghKGlycVtpXSA9PSA1IHx8CisJICAgICAgaXJxW2ldID09IDcgfHwKKwkgICAgICBpcnFbaV0gPT0gOSB8fAorCSAgICAgIGlycVtpXSA9PSAxMCB8fAorCSAgICAgIGlycVtpXSA9PSAxMSB8fAorCSAgICAgIGlycVtpXSA9PSAxMikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IFwiaXJxXCIgLSBtdXN0IGJlIHNldCB0byA1LCA3LCA5LCAxMCwgMTEgb3IgMTJcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIShtZW1baV0gPT0gMHhiMDAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGM4MDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZDAwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhkODAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGUwMDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZTgwMDApKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFwibWVtXCIgLSBtdXN0IGJlIHNldCB0byAiCisJCSAgICAgICAiMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwgMHhlMDAwMCBvciAiCisJCSAgICAgICAiMHhlODAwMFxuIik7CisJCXJldHVybiAwOworCX0KKworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoY2ZnW2ldID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogQXNzdW1pbmcgUG5QIG1vZGVcbiIpOworCX0gZWxzZSBpZiAoY2ZnW2ldICE9IDB4MjUwICYmIGNmZ1tpXSAhPSAweDI2MCAmJiBjZmdbaV0gIT0gMHgyNzApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCQkiOiBDb25maWcgcG9ydCBtdXN0IGJlIDB4MjUwLCAweDI2MCBvciAweDI3MCAiCisJCQkiKG9yIHVuc3BlY2lmaWVkIGZvciBQblAgbW9kZSlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogTVNORF9DTEFTU0lDICovCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpZHgpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9tc25kICpjaGlwOworCisJaWYgKGhhc19pc2FwbnAoaWR4KSB8fCBjZmdbaWR4XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IEFzc3VtaW5nIFBuUCBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfbXNuZCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwljaGlwLT5jYXJkID0gY2FyZDsKKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCXN3aXRjaCAoaXJxW2lkeF0pIHsKKwljYXNlIDU6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfNTsgYnJlYWs7CisJY2FzZSA3OgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzc7IGJyZWFrOworCWNhc2UgOToKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV85OyBicmVhazsKKwljYXNlIDEwOgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzEwOyBicmVhazsKKwljYXNlIDExOgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzExOyBicmVhazsKKwljYXNlIDEyOgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzEyOyBicmVhazsKKwl9CisKKwlzd2l0Y2ggKG1lbVtpZHhdKSB7CisJY2FzZSAweGIwMDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0IwMDA7IGJyZWFrOworCWNhc2UgMHhjODAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9DODAwOyBicmVhazsKKwljYXNlIDB4ZDAwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRDAwMDsgYnJlYWs7CisJY2FzZSAweGQ4MDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0Q4MDA7IGJyZWFrOworCWNhc2UgMHhlMDAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9FMDAwOyBicmVhazsKKwljYXNlIDB4ZTgwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRTgwMDsgYnJlYWs7CisJfQorI2Vsc2UKKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogTm9uLVBuUCBtb2RlOiBjb25maWd1cmluZyBhdCBwb3J0IDB4JWx4XG4iLAorCQkJY2ZnW2lkeF0pOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjZmdbaWR4XSwgMiwgIlBpbm5hY2xlL0ZpamkgQ29uZmlnIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ29uZmlnIHBvcnQgMHglbHggY29uZmxpY3RcbiIsCisJCQkgICBjZmdbaWR4XSk7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocmVzZXRbaWR4XSkKKwkJaWYgKHNuZF9tc25kX3Bpbm5hY2xlX2NmZ19yZXNldChjZmdbaWR4XSkpIHsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGNmZ19lcnJvcjsKKwkJfQorCisJLyogRFNQICovCisJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDAsCisJCQkJCSBpb1tpZHhdLCAwLAorCQkJCQkgaXJxW2lkeF0sIG1lbVtpZHhdKTsKKworCWlmIChlcnIpCisJCWdvdG8gY2ZnX2Vycm9yOworCisJLyogVGhlIGZvbGxvd2luZyBhcmUgUGlubmFjbGUgc3BlY2lmaWMgKi8KKworCS8qIE1QVSAqLworCWlmIChtcHVfaW9baWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQKKwkgICAgJiYgbXB1X2lycVtpZHhdICE9IFNORFJWX0FVVE9fSVJRKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgTVBVIHRvIEkvTyAweCVseCBJUlEgJWRcbiIsCisJCSAgICAgICBtcHVfaW9baWR4XSwgbXB1X2lycVtpZHhdKTsKKwkJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDEsCisJCQkJCQkgbXB1X2lvW2lkeF0sIDAsCisJCQkJCQkgbXB1X2lycVtpZHhdLCAwKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBjZmdfZXJyb3I7CisJfQorCisJLyogSURFICovCisJaWYgKGlkZV9pbzBbaWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQKKwkgICAgJiYgaWRlX2lvMVtpZHhdICE9IFNORFJWX0FVVE9fUE9SVAorCSAgICAmJiBpZGVfaXJxW2lkeF0gIT0gU05EUlZfQVVUT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCSAgICAgICAiOiBDb25maWd1cmluZyBJREUgdG8gSS9PIDB4JWx4LCAweCVseCBJUlEgJWRcbiIsCisJCSAgICAgICBpZGVfaW8wW2lkeF0sIGlkZV9pbzFbaWR4XSwgaWRlX2lycVtpZHhdKTsKKwkJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDIsCisJCQkJCQkgaWRlX2lvMFtpZHhdLCBpZGVfaW8xW2lkeF0sCisJCQkJCQkgaWRlX2lycVtpZHhdLCAwKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBjZmdfZXJyb3I7CisJfQorCisJLyogSm95c3RpY2sgKi8KKwlpZiAoam95c3RpY2tfaW9baWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCSAgICAgICAiOiBDb25maWd1cmluZyBqb3lzdGljayB0byBJL08gMHglbHhcbiIsCisJCSAgICAgICBqb3lzdGlja19pb1tpZHhdKTsKKwkJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDMsCisJCQkJCQkgam95c3RpY2tfaW9baWR4XSwgMCwKKwkJCQkJCSAwLCAwKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBjZmdfZXJyb3I7CisJfQorCXJlbGVhc2VfcmVnaW9uKGNmZ1tpZHhdLCAyKTsKKworI2VuZGlmIC8qIE1TTkRfQ0xBU1NJQyAqLworCisJc2V0X2RlZmF1bHRfYXVkaW9fcGFyYW1ldGVycyhjaGlwKTsKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwljaGlwLT50eXBlID0gbXNuZENsYXNzaWM7CisjZWxzZQorCWNoaXAtPnR5cGUgPSBtc25kUGlubmFjbGU7CisjZW5kaWYKKwljaGlwLT5pbyA9IGlvW2lkeF07CisJY2hpcC0+aXJxID0gaXJxW2lkeF07CisJY2hpcC0+YmFzZSA9IG1lbVtpZHhdOworCisJY2hpcC0+Y2FsaWJyYXRlX3NpZ25hbCA9IGNhbGlicmF0ZV9zaWduYWwgPyAxIDogMDsKKwljaGlwLT5yZWNzcmMgPSAwOworCWNoaXAtPmRzcHFfZGF0YV9idWZmID0gRFNQUV9EQVRBX0JVRkY7CisJY2hpcC0+ZHNwcV9idWZmX3NpemUgPSBEU1BRX0JVRkZfU0laRTsKKwlpZiAod3JpdGVfbmRlbGF5W2lkeF0pCisJCWNsZWFyX2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworCWVsc2UKKwkJc2V0X2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoZGlnaXRhbFtpZHhdKQorCQlzZXRfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncyk7CisjZW5kaWYKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisJZXJyID0gc25kX21zbmRfcHJvYmUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogUHJvYmUgZmFpbGVkXG4iKTsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZF9hdHRhY2goY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQXR0YWNoIGZhaWxlZFxuIik7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKworCXJldHVybiAwOworCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworY2ZnX2Vycm9yOgorCXJlbGVhc2VfcmVnaW9uKGNmZ1tpZHhdLCAyKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CisjZW5kaWYKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc25kX21zbmRfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KQoreworCXNuZF9tc25kX3VubG9hZChkZXZfZ2V0X2RydmRhdGEocGRldikpOworCWRldl9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBERVZfTkFNRSAibXNuZC1waW5uYWNsZSIKKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9tc25kX2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gc25kX21zbmRfaXNhX21hdGNoLAorCS5wcm9iZQkJPSBzbmRfbXNuZF9pc2FfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfbXNuZF9pc2FfcmVtb3ZlKSwKKwkvKiBGSVhNRTogc3VzcGVuZCwgcmVzdW1lICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gREVWX05BTUUKKwl9LAorfTsKKworI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3BucF9kZXRlY3Qoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLAorCQkJCQkgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQoreworCXN0YXRpYyBpbnQgaWR4OworCXN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2OworCXN0cnVjdCBwbnBfZGV2ICptcHVfZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXA7CisJaW50IHJldDsKKworCWZvciAoIDsgaWR4IDwgU05EUlZfQ0FSRFM7IGlkeCsrKSB7CisJCWlmIChoYXNfaXNhcG5wKGlkeCkpCisJCQlicmVhazsKKwl9CisJaWYgKGlkeCA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSByb29tIGZvciBhbm90aGVyIHNvdW5kIGNhcmQgLi4uCisJICovCisJcG5wX2RldiA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKHBjYXJkLCBwaWQtPmRldnNbMF0uaWQsIE5VTEwpOworCWlmICghcG5wX2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltcHVfZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UocGNhcmQsIHBpZC0+ZGV2c1sxXS5pZCwgTlVMTCk7CisJaWYgKCFtcHVfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcG5wX2lzX2FjdGl2ZShwbnBfZGV2KSAmJiBwbnBfYWN0aXZhdGVfZGV2KHBucF9kZXYpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJtc25kX3Bpbm5hY2xlOiBkZXZpY2UgaXMgaW5hY3RpdmVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICghcG5wX2lzX2FjdGl2ZShtcHVfZGV2KSAmJiBwbnBfYWN0aXZhdGVfZGV2KG1wdV9kZXYpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJtc25kX3Bpbm5hY2xlOiBNUFUgZGV2aWNlIGlzIGluYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSBhIG5ldyBBTFNBIHNvdW5kIGNhcmQgZW50cnksIGluIGFudGljaXBhdGlvbgorCSAqIG9mIGRldGVjdGluZyBvdXIgaGFyZHdhcmUgLi4uCisJICovCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfbXNuZCksICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNhcmQtPmNhcmQtPmRldik7CisKKwkvKgorCSAqIFJlYWQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBvZmYgdGhlIElTQSBQblAgYnVzIC4uLgorCSAqLworCWlvW2lkeF0gPSBwbnBfcG9ydF9zdGFydChwbnBfZGV2LCAwKTsKKwlpcnFbaWR4XSA9IHBucF9pcnEocG5wX2RldiwgMCk7CisJbWVtW2lkeF0gPSBwbnBfbWVtX3N0YXJ0KHBucF9kZXYsIDApOworCW1wdV9pb1tpZHhdID0gcG5wX3BvcnRfc3RhcnQobXB1X2RldiwgMCk7CisJbXB1X2lycVtpZHhdID0gcG5wX2lycShtcHVfZGV2LCAwKTsKKworCXNldF9kZWZhdWx0X2F1ZGlvX3BhcmFtZXRlcnMoY2hpcCk7CisjaWZkZWYgTVNORF9DTEFTU0lDCisJY2hpcC0+dHlwZSA9IG1zbmRDbGFzc2ljOworI2Vsc2UKKwljaGlwLT50eXBlID0gbXNuZFBpbm5hY2xlOworI2VuZGlmCisJY2hpcC0+aW8gPSBpb1tpZHhdOworCWNoaXAtPmlycSA9IGlycVtpZHhdOworCWNoaXAtPmJhc2UgPSBtZW1baWR4XTsKKworCWNoaXAtPmNhbGlicmF0ZV9zaWduYWwgPSBjYWxpYnJhdGVfc2lnbmFsID8gMSA6IDA7CisJY2hpcC0+cmVjc3JjID0gMDsKKwljaGlwLT5kc3BxX2RhdGFfYnVmZiA9IERTUFFfREFUQV9CVUZGOworCWNoaXAtPmRzcHFfYnVmZl9zaXplID0gRFNQUV9CVUZGX1NJWkU7CisJaWYgKHdyaXRlX25kZWxheVtpZHhdKQorCQljbGVhcl9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKwllbHNlCisJCXNldF9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGRpZ2l0YWxbaWR4XSkKKwkJc2V0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCXJldCA9IHNuZF9tc25kX3Byb2JlKGNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFByb2JlIGZhaWxlZFxuIik7CisJCWdvdG8gX3JlbGVhc2VfY2FyZDsKKwl9CisKKwlyZXQgPSBzbmRfbXNuZF9hdHRhY2goY2FyZCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQXR0YWNoIGZhaWxlZFxuIik7CisJCWdvdG8gX3JlbGVhc2VfY2FyZDsKKwl9CisKKwlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CisJKytpZHg7CisJcmV0dXJuIDA7CisKK19yZWxlYXNlX2NhcmQ6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX21zbmRfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQpCit7CisJc25kX21zbmRfdW5sb2FkKHBucF9nZXRfY2FyZF9kcnZkYXRhKHBjYXJkKSk7CisJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOworc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKKworc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgbXNuZF9wbnBpZHNbXSA9IHsKKwkvKiBQaW5uYWNsZSBQblAgKi8KKwl7IC5pZCA9ICJCVkowNDQwIiwgLmRldnMgPSB7IHsgIlRCUzAwMDAiIH0sIHsgIlRCUzAwMDEiIH0gfSB9LAorCXsgLmlkID0gIiIgfQkvKiBlbmQgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wX2NhcmQsIG1zbmRfcG5waWRzKTsKKworc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kcml2ZXIgbXNuZF9wbnBjX2RyaXZlciA9IHsKKwkuZmxhZ3MgPSBQTlBfRFJJVkVSX1JFU19ET19OT1RfQ0hBTkdFLAorCS5uYW1lID0gIm1zbmRfcGlubmFjbGUiLAorCS5pZF90YWJsZSA9IG1zbmRfcG5waWRzLAorCS5wcm9iZSA9IHNuZF9tc25kX3BucF9kZXRlY3QsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9tc25kX3BucF9yZW1vdmUpLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfUE5QICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9tc25kX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX21zbmRfZHJpdmVyLCBTTkRSVl9DQVJEUyk7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmICghZXJyKQorCQlpc2FfcmVnaXN0ZXJlZCA9IDE7CisKKwllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm1zbmRfcG5wY19kcml2ZXIpOworCWlmICghZXJyKQorCQlwbnBfcmVnaXN0ZXJlZCA9IDE7CisKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisJCWVyciA9IDA7CisjZW5kaWYKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX21zbmRfZXhpdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAocG5wX3JlZ2lzdGVyZWQpCisJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZtc25kX3BucGNfZHJpdmVyKTsKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisjZW5kaWYKKwkJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzbmRfbXNuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzbmRfbXNuZF9pbml0KTsKK21vZHVsZV9leGl0KHNuZF9tc25kX2V4aXQpOworCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmggYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzMThkMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuaApAQCAtMCwwICsxLDE4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1zbmRfcGlubmFjbGUuaAorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIFNvbWUgcGFydHMgb2YgdGhpcyBoZWFkZXIgZmlsZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgVHVydGxlIEJlYWNoCisgKiBNdWx0aVNvdW5kIERyaXZlciBEZXZlbG9wbWVudCBLaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVHVydGxlIEJlYWNoIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVNORF9QSU5OQUNMRV9ICisjZGVmaW5lIF9fTVNORF9QSU5OQUNMRV9ICisKKyNkZWZpbmUgRFNQX05VTUlPCQkJCTB4MDgKKworI2RlZmluZSBJUkVHX0xPR0RFVklDRQkJCQkweDA3CisjZGVmaW5lIElSRUdfQUNUSVZBVEUJCQkJMHgzMAorI2RlZmluZSBMRF9BQ1RJVkFURQkJCQkweDAxCisjZGVmaW5lIExEX0RJU0FDVElWQVRFCQkJCTB4MDAKKyNkZWZpbmUgSVJFR19FRUNPTlRST0wJCQkJMHgzRgorI2RlZmluZSBJUkVHX01FTUJBU0VISQkJCQkweDQwCisjZGVmaW5lIElSRUdfTUVNQkFTRUxPCQkJCTB4NDEKKyNkZWZpbmUgSVJFR19NRU1DT05UUk9MCQkJCTB4NDIKKyNkZWZpbmUgSVJFR19NRU1SQU5HRUhJCQkJCTB4NDMKKyNkZWZpbmUgSVJFR19NRU1SQU5HRUxPCQkJCTB4NDQKKyNkZWZpbmUgTUVNVFlQRV84QklUCQkJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV8xNkJJVAkJCQkweDAyCisjZGVmaW5lIE1FTVRZUEVfUkFOR0UJCQkJMHgwMAorI2RlZmluZSBNRU1UWVBFX0hJQUREUgkJCQkweDAxCisjZGVmaW5lIElSRUdfSU8wX0JBU0VISQkJCQkweDYwCisjZGVmaW5lIElSRUdfSU8wX0JBU0VMTwkJCQkweDYxCisjZGVmaW5lIElSRUdfSU8xX0JBU0VISQkJCQkweDYyCisjZGVmaW5lIElSRUdfSU8xX0JBU0VMTwkJCQkweDYzCisjZGVmaW5lIElSRUdfSVJRX05VTUJFUgkJCQkweDcwCisjZGVmaW5lIElSRUdfSVJRX1RZUEUJCQkJMHg3MQorI2RlZmluZSBJUlFUWVBFX0hJR0gJCQkJMHgwMgorI2RlZmluZSBJUlFUWVBFX0xPVwkJCQkweDAwCisjZGVmaW5lIElSUVRZUEVfTEVWRUwJCQkJMHgwMQorI2RlZmluZSBJUlFUWVBFX0VER0UJCQkJMHgwMAorCisjZGVmaW5lCUhQX0RTUFIJCQkJCTB4MDQKKyNkZWZpbmUJSFBfQkxLUwkJCQkJMHgwNAorCisjZGVmaW5lIEhQRFNQUkVTRVRfT0ZGCQkJCTIKKyNkZWZpbmUgSFBEU1BSRVNFVF9PTgkJCQkwCisKKyNkZWZpbmUgSFBCTEtTRUxfMAkJCQkyCisjZGVmaW5lIEhQQkxLU0VMXzEJCQkJMworCisjZGVmaW5lCUhJTVRfREFUX09GRgkJCQkweDAzCisKKyNkZWZpbmUJSElEU1BfUExBWV9VTkRFUgkJCTB4MDAKKyNkZWZpbmUJSElEU1BfSU5UX1BMQVlfVU5ERVIJCQkweDAxCisjZGVmaW5lCUhJRFNQX1NTSV9UWF9VTkRFUiAgCQkJMHgwMgorI2RlZmluZSBISURTUF9SRUNRX09WRVJGTE9XCQkJMHgwOAorI2RlZmluZSBISURTUF9JTlRfUkVDT1JEX09WRVIJCQkweDA5CisjZGVmaW5lIEhJRFNQX1NTSV9SWF9PVkVSRkxPVwkJCTB4MGEKKworI2RlZmluZQlISURTUF9NSURJX0lOX09WRVIJCQkweDEwCisKKyNkZWZpbmUJSElEU1BfTUlESV9GUkFNRV9FUlIJCQkweDExCisjZGVmaW5lCUhJRFNQX01JRElfUEFSSVRZX0VSUgkJCTB4MTIKKyNkZWZpbmUJSElEU1BfTUlESV9PVkVSUlVOX0VSUgkJCTB4MTMKKworI2RlZmluZSBISURTUF9JTlBVVF9DTElQUElORwkJCTB4MjAKKyNkZWZpbmUJSElEU1BfTUlYX0NMSVBQSU5HCQkJMHgzMAorI2RlZmluZSBISURTUF9EQVRfSU5fT0ZGCQkJMHgyMQorCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUX0RPTkUJCQkweDAyOEEKKyNkZWZpbmUgVElNRV9QUk9fU1lTRVgJCQkJMHgwMDFFCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUCQkJCTB4MDAzMgorCisjZGVmaW5lIERBUl9CVUZGX1NJWkUJCQkJMHgxMDAwCisKKyNkZWZpbmUgTUlEUV9CVUZGX1NJWkUJCQkJMHg4MDAKKyNkZWZpbmUgRFNQUV9CVUZGX1NJWkUJCQkJMHg1QTAKKworI2RlZmluZSBEU1BRX0RBVEFfQlVGRgkJCQkweDc4NjAKKworI2RlZmluZSBNT1BfV0FWRUhEUgkJCQkwCisjZGVmaW5lIE1PUF9FWFRPVVQJCQkJMQorI2RlZmluZSBNT1BfSFdJTklUCQkJCTB4ZmUKKyNkZWZpbmUgTU9QX05PTkUJCQkJMHhmZgorI2RlZmluZSBNT1BfTUFYCQkJCQkxCisKKyNkZWZpbmUgTUlQX0VYVElOCQkJCTAKKyNkZWZpbmUgTUlQX1dBVkVIRFIJCQkJMQorI2RlZmluZSBNSVBfSFdJTklUCQkJCTB4ZmUKKyNkZWZpbmUgTUlQX01BWAkJCQkJMQorCisvKiBQaW5uYWNsZS9GaWppIFNNQSBDb21tb24gRGF0YSAqLworI2RlZmluZSBTTUFfd0N1cnJQbGF5Qnl0ZXMJCQkweDAwMDAKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkQnl0ZXMJCQkweDAwMDIKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbExlZnQJCQkweDAwMDQKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbFJpZ2h0CQkJMHgwMDA2CisjZGVmaW5lIFNNQV93Q3VyckluVm9sTGVmdAkJCTB4MDAwOAorI2RlZmluZSBTTUFfd0N1cnJJblZvbFJpZ2h0CQkJMHgwMDBhCisjZGVmaW5lIFNNQV93Q3Vyck1IZHJWb2xMZWZ0CQkJMHgwMDBjCisjZGVmaW5lIFNNQV93Q3Vyck1IZHJWb2xSaWdodAkJCTB4MDAwZQorI2RlZmluZSBTTUFfZHdDdXJyUGxheVBpdGNoCQkJMHgwMDEwCisjZGVmaW5lIFNNQV9kd0N1cnJQbGF5UmF0ZQkJCTB4MDAxNAorI2RlZmluZSBTTUFfd0N1cnJNSURJSU9QYXRjaAkJCTB4MDAxOAorI2RlZmluZSBTTUFfd0N1cnJQbGF5Rm9ybWF0CQkJMHgwMDFhCisjZGVmaW5lIFNNQV93Q3VyclBsYXlTYW1wbGVTaXplCQkJMHgwMDFjCisjZGVmaW5lIFNNQV93Q3VyclBsYXlDaGFubmVscwkJCTB4MDAxZQorI2RlZmluZSBTTUFfd0N1cnJQbGF5U2FtcGxlUmF0ZQkJCTB4MDAyMAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRGb3JtYXQJCQkweDAwMjIKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkU2FtcGxlU2l6ZQkJMHgwMDI0CisjZGVmaW5lIFNNQV93Q3VyclJlY29yZENoYW5uZWxzCQkJMHgwMDI2CisjZGVmaW5lIFNNQV93Q3VyclJlY29yZFNhbXBsZVJhdGUJCTB4MDAyOAorI2RlZmluZSBTTUFfd0N1cnJEU1BTdGF0dXNGbGFncwkJCTB4MDAyYQorI2RlZmluZSBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MJCTB4MDAyYworI2RlZmluZSBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMJCQkweDAwMmUKKyNkZWZpbmUgU01BX3dDdXJyTGVmdFBlYWsJCQkweDAwMzAKKyNkZWZpbmUgU01BX3dDdXJyUmlnaHRQZWFrCQkJMHgwMDMyCisjZGVmaW5lIFNNQV9iTWljUG90UG9zTGVmdAkJCTB4MDAzNAorI2RlZmluZSBTTUFfYk1pY1BvdFBvc1JpZ2h0CQkJMHgwMDM1CisjZGVmaW5lIFNNQV9iTWljUG90TWF4TGVmdAkJCTB4MDAzNgorI2RlZmluZSBTTUFfYk1pY1BvdE1heFJpZ2h0CQkJMHgwMDM3CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NMZWZ0CQkJMHgwMDM4CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NSaWdodAkJCTB4MDAzOQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc0xlZnQJCQkweDAwM2EKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NSaWdodAkJCTB4MDAzYgorI2RlZmluZSBTTUFfYkluUG90TWF4TGVmdAkJCTB4MDAzYworI2RlZmluZSBTTUFfYkluUG90TWF4UmlnaHQJCQkweDAwM2QKKyNkZWZpbmUgU01BX2JBdXhQb3RNYXhMZWZ0CQkJMHgwMDNlCisjZGVmaW5lIFNNQV9iQXV4UG90TWF4UmlnaHQJCQkweDAwM2YKKyNkZWZpbmUgU01BX2JJblBvdE1heE1ldGhvZAkJCTB4MDA0MAorI2RlZmluZSBTTUFfYkF1eFBvdE1heE1ldGhvZAkJCTB4MDA0MQorI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sTGVmdAkJCTB4MDA0MgorI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQJCQkweDAwNDQKKyNkZWZpbmUgU01BX3dDYWxGcmVxQXRvRAkJCTB4MDA0NgorI2RlZmluZSBTTUFfd0N1cnJBdXhWb2xMZWZ0CQkJMHgwMDQ4CisjZGVmaW5lIFNNQV93Q3VyckF1eFZvbFJpZ2h0CQkJMHgwMDRhCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxVm9sTGVmdAkJCTB4MDA0YworI2RlZmluZSBTTUFfd0N1cnJQbGF5MVZvbFJpZ2h0CQkJMHgwMDRlCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyVm9sTGVmdAkJCTB4MDA1MAorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlZvbFJpZ2h0CQkJMHgwMDUyCisjZGVmaW5lIFNNQV93Q3VyclBsYXkzVm9sTGVmdAkJCTB4MDA1NAorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1ZvbFJpZ2h0CQkJMHgwMDU2CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0Vm9sTGVmdAkJCTB4MDA1OAorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFZvbFJpZ2h0CQkJMHgwMDVhCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxUGVha0xlZnQJCQkweDAwNWMKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFQZWFrUmlnaHQJCQkweDAwNWUKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJQZWFrTGVmdAkJCTB4MDA2MAorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlBlYWtSaWdodAkJCTB4MDA2MgorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1BlYWtMZWZ0CQkJMHgwMDY0CisjZGVmaW5lIFNNQV93Q3VyclBsYXkzUGVha1JpZ2h0CQkJMHgwMDY2CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0UGVha0xlZnQJCQkweDAwNjgKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRQZWFrUmlnaHQJCQkweDAwNmEKKyNkZWZpbmUgU01BX3dDdXJyUGxheVBlYWtMZWZ0CQkJMHgwMDZjCisjZGVmaW5lIFNNQV93Q3VyclBsYXlQZWFrUmlnaHQJCQkweDAwNmUKKyNkZWZpbmUgU01BX3dDdXJyREFUU1IJCQkJMHgwMDcwCisjZGVmaW5lIFNNQV93Q3VyckRBVFJYQ0hOTAkJCTB4MDA3MgorI2RlZmluZSBTTUFfd0N1cnJEQVRUWENITkwJCQkweDAwNzQKKyNkZWZpbmUgU01BX3dDdXJyREFUUlhSYXRlCQkJMHgwMDc2CisjZGVmaW5lIFNNQV9kd0RTUFBsYXlDb3VudAkJCTB4MDA3OAorI2RlZmluZSBTTUFfX3NpemUJCQkJMHgwMDdjCisKKyNkZWZpbmUgSU5JVENPREVGSUxFCQkidHVydGxlYmVhY2gvcG5kc3BpbmkuYmluIgorI2RlZmluZSBQRVJNQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9wbmRzcGVybS5iaW4iCisjZGVmaW5lIExPTkdOQU1FCQkiTXVsdGlTb3VuZCAoUGlubmFjbGUvRmlqaSkiCisKKyNlbmRpZiAvKiBfX01TTkRfUElOTkFDTEVfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZV9taXhlci5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZV9taXhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NDA1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlX21peGVyLmMKQEAgLTAsMCArMSwzNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCSAgbXNuZF9waW5uYWNsZV9taXhlci5jICAtICBkZXNjcmlwdGlvbgorCQkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYmVnaW4JCTogRnJlIEp1biA3IDIwMDIKKyAgICBjb3B5cmlnaHQgCQk6IChDKSAyMDAyIGJ5IGthcnN0ZW4gd2llc2UKKyAgICBlbWFpbAkJOiBhbm5hYmVsbGVzZ2FyZGVuQHlhaG9vLmRlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCQkJCQkgICAgICAJCSAgICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4JCQkJICAgKgorICoJCQkJCQkJCQkgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSAibXNuZC5oIgorI2luY2x1ZGUgIm1zbmRfcGlubmFjbGUuaCIKKworCisjZGVmaW5lIE1TTkRfTUlYRVJfVk9MVU1FCTAKKyNkZWZpbmUgTVNORF9NSVhFUl9QQ00JCTEKKyNkZWZpbmUgTVNORF9NSVhFUl9BVVgJCTIJLyogSW5wdXQgc291cmNlIDEgIChhdXgxKSAqLworI2RlZmluZSBNU05EX01JWEVSX0lNSVgJCTMJLyogIFJlY29yZGluZyBtb25pdG9yICAqLworI2RlZmluZSBNU05EX01JWEVSX1NZTlRICTQKKyNkZWZpbmUgTVNORF9NSVhFUl9TUEVBS0VSCTUKKyNkZWZpbmUgTVNORF9NSVhFUl9MSU5FCQk2CisjZGVmaW5lIE1TTkRfTUlYRVJfTUlDCQk3CisjZGVmaW5lIE1TTkRfTUlYRVJfUkVDTEVWCTExCS8qIFJlY29yZGluZyBsZXZlbCAqLworI2RlZmluZSBNU05EX01JWEVSX0lHQUlOCTEyCS8qIElucHV0IGdhaW4gKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9PR0FJTgkxMwkvKiBPdXRwdXQgZ2FpbiAqLworI2RlZmluZSBNU05EX01JWEVSX0RJR0lUQUwJMTcJLyogRGlnaXRhbCAoaW5wdXQpIDEgKi8KKworLyoJRGV2aWNlIG1hc2sgYml0cwkqLworCisjZGVmaW5lIE1TTkRfTUFTS19WT0xVTUUJKDEgPDwgTVNORF9NSVhFUl9WT0xVTUUpCisjZGVmaW5lIE1TTkRfTUFTS19TWU5USAkJKDEgPDwgTVNORF9NSVhFUl9TWU5USCkKKyNkZWZpbmUgTVNORF9NQVNLX1BDTQkJKDEgPDwgTVNORF9NSVhFUl9QQ00pCisjZGVmaW5lIE1TTkRfTUFTS19TUEVBS0VSCSgxIDw8IE1TTkRfTUlYRVJfU1BFQUtFUikKKyNkZWZpbmUgTVNORF9NQVNLX0xJTkUJCSgxIDw8IE1TTkRfTUlYRVJfTElORSkKKyNkZWZpbmUgTVNORF9NQVNLX01JQwkJKDEgPDwgTVNORF9NSVhFUl9NSUMpCisjZGVmaW5lIE1TTkRfTUFTS19JTUlYCQkoMSA8PCBNU05EX01JWEVSX0lNSVgpCisjZGVmaW5lIE1TTkRfTUFTS19SRUNMRVYJKDEgPDwgTVNORF9NSVhFUl9SRUNMRVYpCisjZGVmaW5lIE1TTkRfTUFTS19JR0FJTgkJKDEgPDwgTVNORF9NSVhFUl9JR0FJTikKKyNkZWZpbmUgTVNORF9NQVNLX09HQUlOCQkoMSA8PCBNU05EX01JWEVSX09HQUlOKQorI2RlZmluZSBNU05EX01BU0tfQVVYCQkoMSA8PCBNU05EX01JWEVSX0FVWCkKKyNkZWZpbmUgTVNORF9NQVNLX0RJR0lUQUwJKDEgPDwgTVNORF9NSVhFUl9ESUdJVEFMKQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X2luZm9fbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RhdGljIGNoYXIgKnRleHRzWzNdID0geworCQkiQW5hbG9nIiwgIk1BU1MiLCAiU1BESUYiLAorCX07CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGl0ZW1zID0gdGVzdF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKSA/IDMgOiAyOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IGl0ZW1zOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IGl0ZW1zKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gaXRlbXMgLSAxOworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAorCQl0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfZ2V0X211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJLyogTVNORF9NQVNLX0lNSVggaXMgdGhlIGRlZmF1bHQgKi8KKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKKworCWlmIChjaGlwLT5yZWNzcmMgJiBNU05EX01BU0tfU1lOVEgpIHsKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDE7CisJfSBlbHNlIGlmICgoY2hpcC0+cmVjc3JjICYgTVNORF9NQVNLX0RJR0lUQUwpICYmCisJCSB0ZXN0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpKSB7CisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCX0KKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfc2V0X211eChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCB2YWwpCit7CisJdW5zaWduZWQgbmV3cmVjc3JjOworCWludCBjaGFuZ2U7CisJdW5zaWduZWQgY2hhciBtc25kYnl0ZTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQluZXdyZWNzcmMgPSBNU05EX01BU0tfSU1JWDsKKwkJbXNuZGJ5dGUgPSBIREVYQVJfU0VUX0FOQV9JTjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQluZXdyZWNzcmMgPSBNU05EX01BU0tfU1lOVEg7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9TWU5USF9JTjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQluZXdyZWNzcmMgPSBNU05EX01BU0tfRElHSVRBTDsKKwkJbXNuZGJ5dGUgPSBIREVYQVJfU0VUX0RBVF9JTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNoYW5nZSAgPSBuZXdyZWNzcmMgIT0gY2hpcC0+cmVjc3JjOworCWlmIChjaGFuZ2UpIHsKKwkJY2hhbmdlID0gMDsKKwkJaWYgKCFzbmRfbXNuZF9zZW5kX3dvcmQoY2hpcCwgMCwgMCwgbXNuZGJ5dGUpKQorCQkJaWYgKCFzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9BVVhfUkVRKSkgeworCQkJCWNoaXAtPnJlY3NyYyA9IG5ld3JlY3NyYzsKKwkJCQljaGFuZ2UgPSAxOworCQkJfQorCX0KKwlyZXR1cm4gY2hhbmdlOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3B1dF9tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXJldHVybiBzbmRfbXNuZG1peF9zZXRfbXV4KG1zbmQsIHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfdm9sdW1lX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAyOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKm1zbmQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG1zbmQtPmxlZnRfbGV2ZWxzW2FkZHJdICogMTAwOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIC89IDB4RkZGRjsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IG1zbmQtPnJpZ2h0X2xldmVsc1thZGRyXSAqIDEwMDsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAvPSAweEZGRkY7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIHVwZGF0ZV92b2xtKGEsIGIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd3JpdGV3KChkZXYtPmxlZnRfbGV2ZWxzW2FdID4+IDEpICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KSAvIDB4ZmZmZiwJXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNiIyNMZWZ0KTsJCQlcCisJCXdyaXRldygoZGV2LT5yaWdodF9sZXZlbHNbYV0gPj4gMSkgICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCkgLyAweGZmZmYsIFwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjYiMjUmlnaHQpOwkJCVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSB1cGRhdGVfcG90bShkLCBzLCBhcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3cml0ZWIoKGRldi0+bGVmdF9sZXZlbHNbZF0gPj4gOCkgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpIC8gMHhmZmZmLCBcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI0xlZnQpOwkJCVwKKwkJd3JpdGViKChkZXYtPnJpZ2h0X2xldmVsc1tkXSA+PiA4KSAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpIC8gMHhmZmZmLCBcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI1JpZ2h0KTsJCQlcCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBhcikgPT0gMCkJCVwKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSB1cGRhdGVfcG90KGQsIHMsIGFyKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdyaXRlYihkZXYtPmxlZnRfbGV2ZWxzW2RdID4+IDgsCQkJXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNMZWZ0KTsJCQlcCisJCXdyaXRlYihkZXYtPnJpZ2h0X2xldmVsc1tkXSA+PiA4LAkJCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjUmlnaHQpOwkJCVwKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIGFyKSA9PSAwKQkJXAorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsJXAorCX0gd2hpbGUgKDApOworCisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfc2V0KHN0cnVjdCBzbmRfbXNuZCAqZGV2LCBpbnQgZCwgaW50IGxlZnQsIGludCByaWdodCkKK3sKKwlpbnQgYkxlZnQsIGJSaWdodDsKKwlpbnQgd0xlZnQsIHdSaWdodDsKKwlpbnQgdXBkYXRlbWFzdGVyID0gMDsKKworCWlmIChkID49IExFVkVMX0VOVFJJRVMpCisJCXJldHVybiAtRUlOVkFMOworCisJYkxlZnQgPSBsZWZ0ICogMHhmZiAvIDEwMDsKKwl3TGVmdCA9IGxlZnQgKiAweGZmZmYgLyAxMDA7CisKKwliUmlnaHQgPSByaWdodCAqIDB4ZmYgLyAxMDA7CisJd1JpZ2h0ID0gcmlnaHQgKiAweGZmZmYgLyAxMDA7CisKKwlkZXYtPmxlZnRfbGV2ZWxzW2RdID0gd0xlZnQ7CisJZGV2LT5yaWdodF9sZXZlbHNbZF0gPSB3UmlnaHQ7CisKKwlzd2l0Y2ggKGQpIHsKKwkJLyogbWFzdGVyIHZvbHVtZSB1bnNjYWxlZCBjb250cm9scyAqLworCWNhc2UgTVNORF9NSVhFUl9MSU5FOgkJCS8qIGxpbmUgcG90IGNvbnRyb2wgKi8KKwkJLyogc2NhbGVkIGJ5IElNSVggaW4gZGlnaXRhbCBtaXggKi8KKwkJd3JpdGViKGJMZWZ0LCBkZXYtPlNNQSArIFNNQV9iSW5Qb3RQb3NMZWZ0KTsKKwkJd3JpdGViKGJSaWdodCwgZGV2LT5TTUEgKyBTTUFfYkluUG90UG9zUmlnaHQpOworCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgSERFWEFSX0lOX1NFVF9QT1RTKSA9PSAwKQorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsKKwkJYnJlYWs7CisJY2FzZSBNU05EX01JWEVSX01JQzoJCQkvKiBtaWMgcG90IGNvbnRyb2wgKi8KKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCXJldHVybiAtRUlOVkFMOworCQkvKiBzY2FsZWQgYnkgSU1JWCBpbiBkaWdpdGFsIG1peCAqLworCQl3cml0ZWIoYkxlZnQsIGRldi0+U01BICsgU01BX2JNaWNQb3RQb3NMZWZ0KTsKKwkJd3JpdGViKGJSaWdodCwgZGV2LT5TTUEgKyBTTUFfYk1pY1BvdFBvc1JpZ2h0KTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIEhERVhBUl9NSUNfU0VUX1BPVFMpID09IDApCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOworCQlicmVhazsKKwljYXNlIE1TTkRfTUlYRVJfVk9MVU1FOgkJLyogbWFzdGVyIHZvbHVtZSAqLworCQl3cml0ZXcod0xlZnQsIGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpOworCQl3cml0ZXcod1JpZ2h0LCBkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBNU05EX01JWEVSX0FVWDoJCQkvKiBhdXggcG90IGNvbnRyb2wgKi8KKwkJLyogc2NhbGVkIGJ5IG1hc3RlciB2b2x1bWUgKi8KKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwkJLyogZGlnaXRhbCBjb250cm9scyAqLworCWNhc2UgTVNORF9NSVhFUl9TWU5USDoJCQkvKiBzeW50aCB2b2wgKGRzcCBtaXgpICovCisJY2FzZSBNU05EX01JWEVSX1BDTToJCQkvKiBwY20gdm9sIChkc3AgbWl4KSAqLworCWNhc2UgTVNORF9NSVhFUl9JTUlYOgkJCS8qIGlucHV0IG1vbml0b3IgKGRzcCBtaXgpICovCisJCS8qIHNjYWxlZCBieSBtYXN0ZXIgdm9sdW1lICovCisJCXVwZGF0ZW1hc3RlciA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVwZGF0ZW1hc3RlcikgeworCQkvKiB1cGRhdGUgbWFzdGVyIHZvbHVtZSBzY2FsZWQgY29udHJvbHMgKi8KKwkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9QQ00sIHdDdXJyUGxheVZvbCk7CisJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfSU1JWCwgd0N1cnJJblZvbCk7CisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZFBpbm5hY2xlKQorCQkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9TWU5USCwgd0N1cnJNSGRyVm9sKTsKKwkJdXBkYXRlX3BvdG0oTVNORF9NSVhFUl9BVVgsIGJBdXhQb3RQb3MsIEhERVhBUl9BVVhfU0VUX1BPVFMpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3ZvbHVtZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKm1zbmQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGNoYW5nZSwgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCBsZWZ0LCByaWdodDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGVmdCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICUgMTAxOworCXJpZ2h0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gJSAxMDE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwljaGFuZ2UgPSBtc25kLT5sZWZ0X2xldmVsc1thZGRyXSAhPSBsZWZ0CisJCXx8IG1zbmQtPnJpZ2h0X2xldmVsc1thZGRyXSAhPSByaWdodDsKKwlzbmRfbXNuZG1peF9zZXQobXNuZCwgYWRkciwgbGVmdCwgcmlnaHQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY2hhbmdlOworfQorCisKKyNkZWZpbmUgRFVNTVlfVk9MVU1FKHhuYW1lLCB4aW5kZXgsIGFkZHIpIFwKK3sgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhpbmRleCwgXAorICAuaW5mbyA9IHNuZF9tc25kbWl4X3ZvbHVtZV9pbmZvLCBcCisgIC5nZXQgPSBzbmRfbXNuZG1peF92b2x1bWVfZ2V0LCAucHV0ID0gc25kX21zbmRtaXhfdm9sdW1lX3B1dCwgXAorICAucHJpdmF0ZV92YWx1ZSA9IGFkZHIgfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbXNuZF9jb250cm9sc1tdID0geworRFVNTVlfVk9MVU1FKCJNYXN0ZXIgVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9WT0xVTUUpLAorRFVNTVlfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9QQ00pLAorRFVNTVlfVk9MVU1FKCJBdXggVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9BVVgpLAorRFVNTVlfVk9MVU1FKCJMaW5lIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfTElORSksCitEVU1NWV9WT0xVTUUoIk1pYyBWb2x1bWUiLCAwLCBNU05EX01JWEVSX01JQyksCitEVU1NWV9WT0xVTUUoIk1vbml0b3IiLAkwLCBNU05EX01JWEVSX0lNSVgpLAoreworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkuaW5mbyA9IHNuZF9tc25kbWl4X2luZm9fbXV4LAorCS5nZXQgPSBzbmRfbXNuZG1peF9nZXRfbXV4LAorCS5wdXQgPSBzbmRfbXNuZG1peF9wdXRfbXV4LAorfQorfTsKKworCitpbnQgX19kZXZpbml0IHNuZF9tc25kbWl4X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IGVycjsKKworCWlmIChzbmRfQlVHX09OKCFjaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPm1peGVyX2xvY2spOworCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJNU05EIFBpbm5hY2xlIE1peGVyIik7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX21zbmRfY29udHJvbHMpOyBpZHgrKykKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKKwkJCQkgIHNuZF9jdGxfbmV3MShzbmRfbXNuZF9jb250cm9scyArIGlkeCwgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaXhfbmV3KTsKKwordm9pZCBzbmRfbXNuZG1peF9zZXR1cChzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1cGRhdGVfcG90KE1TTkRfTUlYRVJfTElORSwgYkluUG90UG9zLCBIREVYQVJfSU5fU0VUX1BPVFMpOworCXVwZGF0ZV9wb3RtKE1TTkRfTUlYRVJfQVVYLCBiQXV4UG90UG9zLCBIREVYQVJfQVVYX1NFVF9QT1RTKTsKKwl1cGRhdGVfdm9sbShNU05EX01JWEVSX1BDTSwgd0N1cnJQbGF5Vm9sKTsKKwl1cGRhdGVfdm9sbShNU05EX01JWEVSX0lNSVgsIHdDdXJySW5Wb2wpOworCWlmIChkZXYtPnR5cGUgPT0gbXNuZFBpbm5hY2xlKSB7CisJCXVwZGF0ZV9wb3QoTVNORF9NSVhFUl9NSUMsIGJNaWNQb3RQb3MsIEhERVhBUl9NSUNfU0VUX1BPVFMpOworCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX1NZTlRILCB3Q3Vyck1IZHJWb2wpOworCX0KK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaXhfc2V0dXApOworCitpbnQgc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKHN0cnVjdCBzbmRfbXNuZCAqZGV2LCBpbnQgcmVjc3JjKQoreworCWRldi0+cmVjc3JjID0gLTE7CisJcmV0dXJuIHNuZF9tc25kbWl4X3NldF9tdXgoZGV2LCByZWNzcmMpOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wbDNzYTIuYyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKaW5kZXggYjg0OGQxMC4uZWY5NTI3OWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcGwzc2EyLmMKKysrIGIvc291bmQvaXNhL29wbDNzYTIuYwpAQCAtMTc5LDEyICsxNzksMTMgQEAKIAl1bnNpZ25lZCBjaGFyIHJlc3VsdDsKICNpZiAwCiAJb3V0YigweDFkLCBwb3J0KTsJLyogcGFzc3dvcmQgKi8KLQlwcmludGsoInJlYWQgWzB4JWx4XSA9IDB4JXhcbiIsIHBvcnQsIGluYihwb3J0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInJlYWQgWzB4JWx4XSA9IDB4JXhcbiIsIHBvcnQsIGluYihwb3J0KSk7CiAjZW5kaWYKIAlvdXRiKHJlZywgY2hpcC0+cG9ydCk7CS8qIHJlZ2lzdGVyICovCiAJcmVzdWx0ID0gaW5iKGNoaXAtPnBvcnQgKyAxKTsKICNpZiAwCi0JcHJpbnRrKCJyZWFkIFsweCVseF0gPSAweCV4IFsweCV4XVxuIiwgcG9ydCwgcmVzdWx0LCBpbmIocG9ydCkpOworCXByaW50ayhLRVJOX0RFQlVHICJyZWFkIFsweCVseF0gPSAweCV4IFsweCV4XVxuIiwKKwkgICAgICAgcG9ydCwgcmVzdWx0LCBpbmIocG9ydCkpOwogI2VuZGlmCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIzMyw3ICsyMzQsMTAgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IGdyYWIgcG9ydCAweCVseFxuIiwgcG9ydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCS8vIHNuZF9wcmludGsoIlJFRyAwQSA9IDB4JXhcbiIsIHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgMHgwYSkpOworCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJSRUcgMEEgPSAweCV4XG4iLAorCQkgICBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIDB4MGEpKTsKKwkqLwogCWNoaXAtPnZlcnNpb24gPSAwOwogCXRtcCA9IHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgT1BMM1NBMl9NSVNDKTsKIAlpZiAodG1wID09IDB4ZmYpIHsKQEAgLTYxOSwyNSArNjIzLDI4IEBACiB7CiAJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWlmIChjaGlwLT5pcnEgPj0gMCkKLQkJZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworCQlmcmVlX2lycShjaGlwLT5pcnEsIGNhcmQpOwogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+cmVzX3BvcnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfb3BsM3NhMl9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfb3BsM3NhMl9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9vcGwzc2EyKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiT1BMM1NBMiIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJZYW1haGEgT1BMMy1TQTIiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiWWFtYWhhIE9QTDMtU0EiKTsKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CiAJY2hpcC0+aXJxID0gLTE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX29wbDNzYTJfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3BsM3NhMl9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC03MjksOSArNzM2LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC03OTUsOSArODAyLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC04NzYsOSArODgzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfb3BsM3NhMl9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwppbmRleCA0NDA3NTVjLi4wMmUzMGQ3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCkBAIC0xMjI4LDkgKzEyMjgsMTAgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CiAKLQlpZiAoIShjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNuZF9taXJvKSkpKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX21pcm8pLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfbWlyb19mcmVlOwogCW1pcm8gPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCAxOTcwNmIwLi41Y2Q1NTUzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgaGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGhhcmR3YXJlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKQEAgLTMzNiw3ICszMzYsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC00MTIsNyArNDEyLDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDMwLDcgKzQzMCw4IEBACiAJCXdzc19iYXNlX2JpdHMgPSAweDAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsIGNoaXAtPndzc19iYXNlKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCSAgIGNoaXAtPndzc19iYXNlKTsKIAkJZ290byBfX3NraXBfYmFzZTsKIAl9CiAJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygxKSwgd3NzX2Jhc2VfYml0cyA8PCA0LCAweDMwKTsKQEAgLTQ1NSw3ICs0NTYsNyBAQAogCQlpcnFfYml0cyA9IDB4MDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBpcnEgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmlycSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgaXJxICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5pcnEpOwogCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CiAJfQogCkBAIC00NzAsMTMgKzQ3MSwxNCBAQAogCQlkbWFfYml0cyA9IDB4MDM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBkbWExICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5kbWExKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBkbWExICMgJWQgbm90IHZhbGlkXG4iLAorCQkJICAgY2hpcC0+ZG1hMSk7CiAJCWdvdG8gX19za2lwX3Jlc291cmNlczsKIAl9CiAKICNpZiBkZWZpbmVkKENTNDIzMSkgfHwgZGVmaW5lZChPUFRpOTNYKQogCWlmIChjaGlwLT5kbWExID09IGNoaXAtPmRtYTIpIHsKLQkJc25kX3ByaW50aygiZG9uJ3Qgd2FudCB0byBzaGFyZSBkbWFzXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZG9uJ3Qgd2FudCB0byBzaGFyZSBkbWFzXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTQ4NSw3ICs0ODcsOCBAQAogCWNhc2UgMToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmRtYTIpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsCisJCQkgICBjaGlwLT5kbWEyKTsKIAkJZ290byBfX3NraXBfcmVzb3VyY2VzOwogCX0KIAlkbWFfYml0cyB8PSAweDA0OwpAQCAtNTE2LDcgKzUxOSw4IEBACiAJCQltcHVfcG9ydF9iaXRzID0gMHgwMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc25kX3ByaW50aygiTVBVLTQwMSBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIk1QVS00MDEgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCiAJCQkJY2hpcC0+bXB1X3BvcnQpOwogCQkJZ290byBfX3NraXBfbXB1OwogCQl9CkBAIC01MzUsNyArNTM5LDcgQEAKIAkJCW1wdV9pcnFfYml0cyA9IDB4MDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNuZF9wcmludGsoIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAogCQkJCWNoaXAtPm1wdV9pcnEpOwogCQkJZ290byBfX3NraXBfbXB1OwogCQl9CkBAIC03MjYsNyArNzMwLDcgQEAKIAlpZiAoY2hpcC0+d3NzX2Jhc2UgPT0gU05EUlZfQVVUT19QT1JUKSB7CiAJCWNoaXAtPndzc19iYXNlID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaW9wb3J0KHBvc3NpYmxlX3BvcnRzLCA0KTsKIAkJaWYgKGNoaXAtPndzc19iYXNlIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIFdTUyBwb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQpAQCAtODE1LDE0ICs4MTksOCBAQAogCQkJCSAgIGNoaXAtPmZtX3BvcnQsIGNoaXAtPmZtX3BvcnQgKyA0IC0gMSk7CiAJCX0KIAkJaWYgKG9wbDMpIHsKLSNpZmRlZiBDUzQyMzEKLQkJCWNvbnN0IGludCB0MWRldiA9IDE7Ci0jZWxzZQotCQkJY29uc3QgaW50IHQxZGV2ID0gMDsKLSNlbmRpZgotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCB0MWRldiwgdDFkZXYrMSkpIDwgMCkKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsICZzeW50aCkpIDwgMCkKKwkJCWVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsICZzeW50aCk7CisJCQlpZiAoZXJyb3IgPCAwKQogCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KQEAgLTgzMCwxNSArODI4LDE4IEBACiAJcmV0dXJuIHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfb3B0aTl4eF9jYXJkX25ldyh2b2lkKQorc3RhdGljIGludCBzbmRfb3B0aTl4eF9jYXJkX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfb3B0aTl4eCkpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfb3B0aTl4eCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9vcHRpOXh4X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5eHhfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKQEAgLTg5NywxNSArODk4LDE1IEBACiAjaWYgZGVmaW5lZChDUzQyMzEpIHx8IGRlZmluZWQoT1BUaTkzWCkKIAlpZiAoZG1hMiA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQlpZiAoKGRtYTIgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hMnNbZG1hMSAlIDRdKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogI2VuZGlmCiAKLQljYXJkID0gc25kX29wdGk5eHhfY2FyZF9uZXcoKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfb3B0aTl4eF9kZXRlY3QoY2FyZCwgY2FyZC0+cHJpdmF0ZV9kYXRhKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC05NTAsOSArOTUxLDkgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoISBpc2FwbnApCiAJCXJldHVybiAtRU5PREVWOwotCWNhcmQgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX29wdGk5eHhfY2FyZF9uZXcoJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaHcgPSBzbmRfY2FyZF9vcHRpOXh4X3BucChjaGlwLCBwY2FyZCwgcGlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lczk2OC5jIGIvc291bmQvaXNhL3NiL2VzOTY4LmMKaW5kZXggYzhjOGUyMS4uY2FmYzNhNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VzOTY4LmMKKysrIGIvc291bmQvaXNhL3NiL2VzOTY4LmMKQEAgLTEwOCw5ICsxMDgsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9jYXJkX2VzOTY4ICphY2FyZDsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9lczk2OCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2VzOTY4KSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfZXM5NjhfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiMTYuYyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKaW5kZXggMmMyMDFmNy4uNTE5YzM2MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTYuYworKysgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCkBAIC0zMjQsMTQgKzMyNCwxOCBAQAogI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJMAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9zYjE2X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9zYjE2X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9zYjE2KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3NiMTYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3NiMTZfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2IxNl9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC00ODksOSArNDkzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJLyogbm9uLVBuUCBGTSBwb3J0IGFkZHJlc3MgaXMgaGFyZHdpcmVkIHdpdGggYmFzZSBwb3J0IGFkZHJlc3MgKi8KQEAgLTYxMCw5ICs2MTQsOSBAQAogCWZvciAoIDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7CiAJCWlmICghZW5hYmxlW2Rldl0gfHwgIWlzYXBucFtkZXZdKQogCQkJY29udGludWU7Ci0JCWNhcmQgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYpOwotCQlpZiAoISBjYXJkKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXJlcyA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CiAJCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwogCQlpZiAoKHJlcyA9IHNuZF9jYXJkX3NiMTZfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwIHx8CiAJCSAgICAocmVzID0gc25kX3NiMTZfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2I4LmMgYi9zb3VuZC9pc2Evc2Ivc2I4LmMKaW5kZXggZWEwNjg3Ny4uM2NkNTdlZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiOC5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjguYwpAQCAtMTAzLDEwICsxMDMsMTAgQEAKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfc2I4KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfc2I4KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYjhfZnJlZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwppbmRleCA0MDZhNDMxLi40NzUyMjBiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2R0MDE5eF9pbnB1dF9zd19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1s1XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbNV0gPSB7CiAJCSJDRCIsICJNaWMiLCAiTGluZSIsICJTeW50aCIsICJNYXN0ZXIiCiAJfTsKIApAQCAtMjY5LDEyICsyNjksNzMgQEAKIH0KIAogLyoKKyAqIEFMUzQwMDAgbW9ubyByZWNvcmRpbmcgY29udHJvbCBzd2l0Y2gKKyAqLworCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0c1szXSA9IHsKKwkJIkwgY2hhbiBvbmx5IiwgIlIgY2hhbiBvbmx5IiwgIkwgY2gvMiArIFIgY2gvMiIKKwl9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAyKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc2IgKnNiID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBvdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJb3ZhbCA9IHNuZF9zYm1peGVyX3JlYWQoc2IsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPj49IDY7CisJaWYgKG92YWwgPiAyKQorCQlvdmFsID0gMjsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBvdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc2IgKnNiID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNoYW5nZTsKKwl1bnNpZ25lZCBjaGFyIG52YWwsIG92YWw7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pcnFzYXZlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPSBzbmRfc2JtaXhlcl9yZWFkKHNiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCk7CisKKwludmFsID0gKG92YWwgJiB+KDMgPDwgNikpCisJICAgICB8ICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdIDw8IDYpOworCWNoYW5nZSA9IG52YWwgIT0gb3ZhbDsKKwlpZiAoY2hhbmdlKQorCQlzbmRfc2JtaXhlcl93cml0ZShzYiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIG52YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworLyoKICAqIFNCUFJPIGlucHV0IG11bHRpcGxleGVyCiAgKi8KIAogc3RhdGljIGludCBzbmRfc2I4bWl4ZXJfaW5mb19tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzWzNdID0geworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0c1szXSA9IHsKIAkJIk1pYyIsICJDRCIsICJMaW5lIgogCX07CiAKQEAgLTQ0Miw2ICs1MDMsMTIgQEAKIAkJCS5nZXQgPSBzbmRfZHQwMTl4X2lucHV0X3N3X2dldCwKIAkJCS5wdXQgPSBzbmRfZHQwMTl4X2lucHV0X3N3X3B1dCwKIAkJfSwKKwkJW1NCX01JWF9NT05PX0NBUFRVUkVfQUxTNEtdID0geworCQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCQkuaW5mbyA9IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfaW5mbywKKwkJCS5nZXQgPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2dldCwKKwkJCS5wdXQgPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX3B1dCwKKwkJfSwKIAl9OwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKIAlpbnQgZXJyOwpAQCAtNjM2LDYgKzcwMyw4IEBACiAJfTsKIAogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfZHQwMTl4X2NvbnRyb2xzW10gPSB7CisJLyogQUxTNDAwMCBiZWxvdyBoYXMgc29tZSBwYXJ0cyB3aGljaCB3ZSBtaWdodCBiZSBsYWNraW5nLAorCSAqIGUuZy4gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoIC0gY2hlY2sgaXQhICovCiAJJnNuZF9kdDAxOXhfY3RsX21hc3Rlcl9wbGF5X3ZvbCwKIAkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfdm9sLAogCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3ZvbCwKQEAgLTY2NiwxOCArNzM1LDIxIEBACiAvKgogICogQUxTNDAwMCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi0vKiBGSVhNRTogU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwgbmVlZHMgb3V0cHV0IHNlbGVjdCBjdHJsISAqLwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19wbGF5YmFja19zd2l0Y2ggPQogCVNCX1NJTkdMRSgiTWFzdGVyIE1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIDUsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlID0KLQlTQl9TSU5HTEUoIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNiwgMHgwMyk7Ci0vKiBGSVhNRTogbW9ubyBwbGF5YmFjayBzd2l0Y2ggYWxzbyBhdmFpbGFibGUgb24gRFQwMTlYPyAqLworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSA9IHsKKwkJLm5hbWUgPSAiTWFzdGVyIE1vbm8gQ2FwdHVyZSBSb3V0ZSIsCisJCS50eXBlID0gU0JfTUlYX01PTk9fQ0FQVFVSRV9BTFM0SworCX07CiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoID0KIAlTQl9TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDAsIDEpOwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCA9CiAJU0JfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDAsIDB4MDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taXhlcl9sb29wYmFjayA9Ci0JU0JfU0lOR0xFKCJBbmFsb2cgTG9vcGJhY2siLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrID0KKwlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfZGlnaXRhbF9sb29wYmFjayA9CisJU0JfU0lOR0xFKCJEaWdpdGFsIExvb3BiYWNrIFN3aXRjaCIsCisJCSAgU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTiwgNywgMHgwMSk7CiAvKiBGSVhNRTogZnVuY3Rpb25hbGl0eSBvZiAzRCBjb250cm9scyBtaWdodCBiZSBzd2FwcGVkLCBJIGRpZG4ndCBmaW5kCiAgKiBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBpZGVudGlmeSB3aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHdoYXQgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCA9CkBAIC02OTQsNiArNzY2LDkgQEAKIAlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBXaWRlIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCAwLCAweDBmKTsKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCA9CiAJU0JfU0lOR0xFKCIzRCBQb3dlck9mZiBTd2l0Y2giLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDQsIDB4MDEpOworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF8zZGJfZnJlcV9jb250cm9sX3N3aXRjaCA9CisJU0JfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgOGtIeiAvIDIwa0h6IExQRiBTd2l0Y2giLAorCQkgIFNCX0FMUzQwMDBfRk1EQUMsIDUsIDB4MDEpOwogI2lmZGVmIE5PVF9BVkFJTEFCTEUKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfZm1kYWMgPQogCVNCX1NJTkdMRSgiRk1EQUMgU3dpdGNoIChPcHRpb24gPykiLCBTQl9BTFM0MDAwX0ZNREFDLCAwLCAweDAxKTsKQEAgLTcwMiwzNSArNzc3LDM3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfYWxzNDAwMF9jb250cm9sc1tdID0gewotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAotCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlLAotCSZzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QsCi0JJnNuZF9zYjE2X2N0bF9hdXRvX21pY19nYWluLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfcGNfc3BlYWtlcl92b2wsCi0JJnNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BsYXlfdm9sLAotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfbG9vcGJhY2ssCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3JhdGlvLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2ZyZXEsCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZGVsYXksCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcG93ZXJvZmZfc3dpdGNoLAorCQkJCQkJLyogQUxTNDAwMGEuUERGIHJlZ3MgcGFnZSAqLworCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAkJLyogTVgzMC8zMSAxMiAqLworCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KKwkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwJCS8qIE1YMzIvMzMgMTIgKi8KKwkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KKwkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAkJLyogTVgzNC8zNSAxMi8xMyAqLworCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwJCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCQkvKiBNWDM2LzM3IDEzICovCisJJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAkJLyogTVgzOC8zOSAxMyAqLworCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAkvKiBNWDREICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCQkvKiBNWDNBICAgIDEzICovCisJJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwJCS8qIE1YM0IgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAkJLyogTVgzRi80MCAxNSAqLworCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCQkJLyogTVg0MS80MiAxNSAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLCAvKiBNWDRDIDE2ICovCisJJnNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwgLyogTVg0QiAgMTYgKi8KKwkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9hbmFsb2dfbG9vcGJhY2ssIC8qIE1YNEQgICAgMTYgKi8KKwkmc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2ssIC8qIENSMyAgICAyMSAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAkJIC8qIE1YNTAgICAxNyAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAkJIC8qIE1YNTEgICAxOCAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwJLyogTVg1MSAgICAxOCAqLworCSZzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2gsCS8qIE1YNEYgICAgMTcgKi8KICNpZmRlZiBOT1RfQVZBSUxBQkxFCiAJJnNuZF9hbHM0MDAwX2N0bF9mbWRhYywKIAkmc25kX2FsczQwMDBfY3RsX3Fzb3VuZCwKQEAgLTkwNSwxMyArOTgyLDE0IEBACiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBhbHM0MDAwX3NhdmVkX3JlZ3NbXSA9IHsKKwkvKiBwbGVhc2UgdmVyaWZ5IGluIGRzaGVldCB3aGV0aGVyIHJlZ3MgdG8gYmUgYWRkZWQKKwkgICBhcmUgYWN0dWFsbHkgcmVhbCBIL1cgb3IganVzdCBkdW1teSAqLwogCVNCX0RTUDRfTUFTVEVSX0RFViwgU0JfRFNQNF9NQVNURVJfREVWICsgMSwKIAlTQl9EU1A0X09VVFBVVF9TVywKIAlTQl9EU1A0X1BDTV9ERVYsIFNCX0RTUDRfUENNX0RFViArIDEsCiAJU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULAogCVNCX0RTUDRfU1lOVEhfREVWLCBTQl9EU1A0X1NZTlRIX0RFViArIDEsCiAJU0JfRFNQNF9DRF9ERVYsIFNCX0RTUDRfQ0RfREVWICsgMSwKLQlTQl9EU1A0X01JQ19BR0MsCiAJU0JfRFNQNF9NSUNfREVWLAogCVNCX0RTUDRfU1BFQUtFUl9ERVYsCiAJU0JfRFNQNF9JR0FJTl9ERVYsIFNCX0RTUDRfSUdBSU5fREVWICsgMSwKQEAgLTkxOSw4ICs5OTcsMTAgQEAKIAlTQl9EVDAxOVhfT1VUUFVUX1NXMiwKIAlTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwKIAlTQl9BTFM0MDAwX01JQ19JTl9HQUlOLAorCVNCX0FMUzQwMDBfRk1EQUMsCiAJU0JfQUxTNDAwMF8zRF9TTkRfRlgsCiAJU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLAorCVNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04sCiB9OwogCiBzdGF0aWMgdm9pZCBzYXZlX21peGVyKHN0cnVjdCBzbmRfc2IgKmNoaXAsIHVuc2lnbmVkIGNoYXIgKnJlZ3MsIGludCBudW1fcmVncykKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYzYwMDAuYyBiL3NvdW5kL2lzYS9zYzYwMDAuYwppbmRleCBjYTM1OTI0Li43ODIwMTA2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2M2MDAwLmMKKysrIGIvc291bmQvaXNhL3NjNjAwMC5jCkBAIC00ODksOSArNDg5LDkgQEAKIAljaGFyIF9faW9tZW0gKnZtc3NfcG9ydDsKIAogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CiAJCXhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CkBAIC01NzYsMTAgKzU3Niw2IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JXgtMHgleCA/XG4iLAogCQkJICAgMHgzODgsIDB4Mzg4ICsgMik7CiAJfSBlbHNlIHsKLQkJZXJyID0gc25kX29wbDNfdGltZXJfbmV3KG9wbDMsIDAsIDEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX3VubWFwMjsKLQogCQllcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBlcnJfdW5tYXAyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NnYWxheHkuYyBiL3NvdW5kL2lzYS9zZ2FsYXh5LmMKaW5kZXggMmM3NTAzYi4uNmZlMjdiOSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NnYWxheHkuYworKysgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCkBAIC0yNDMsOSArMjQzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF93c3MgKmNoaXA7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXhpcnEgPSBpcnFbZGV2XTsKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NzY2FwZS5jIGIvc291bmQvaXNhL3NzY2FwZS5jCmluZGV4IDQ4YTE2ZDguLjY2MTg3MTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zc2NhcGUuYworKysgYi9zb3VuZC9pc2Evc3NjYXBlLmMKQEAgLTg5LDkgKzg5LDYgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgTVBVNDAxX0lPKGkpICAgICAoKGkpICsgMCkKLSNkZWZpbmUgTUlESV9EQVRBX0lPKGkpICAoKGkpICsgMCkKLSNkZWZpbmUgTUlESV9DVFJMX0lPKGkpICAoKGkpICsgMSkKICNkZWZpbmUgSE9TVF9DVFJMX0lPKGkpICAoKGkpICsgMikKICNkZWZpbmUgSE9TVF9EQVRBX0lPKGkpICAoKGkpICsgMykKICNkZWZpbmUgT0RJRV9BRERSX0lPKGkpICAoKGkpICsgNCkKQEAgLTEyOSw5ICsxMjYsNiBAQAogI2RlZmluZSBETUFfOEJJVCAgMHg4MAogCiAKLSNkZWZpbmUgQUQxODQ1X0ZSRVFfU0VMX01TQiAgICAweDE2Ci0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9MU0IgICAgMHgxNwotCiBlbnVtIGNhcmRfdHlwZSB7CiAJU1NDQVBFLAogCVNTQ0FQRV9QTlAsCkBAIC0xNDEsOCArMTM1LDYgQEAKIHN0cnVjdCBzb3VuZHNjYXBlIHsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgaW9fYmFzZTsKLQl1bnNpZ25lZCB3c3NfYmFzZTsKLQlpbnQgY29kZWNfdHlwZTsKIAlpbnQgaWNfdHlwZTsKIAllbnVtIGNhcmRfdHlwZSB0eXBlOwogCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzOwpAQCAtMzMwLDcgKzMyMiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9tcHU0MDEoY29uc3Qgc3RydWN0IHNuZF9tcHU0MDEgKiBtcHUpCiB7Ci0JcmV0dXJuICgoaW5iKE1JRElfQ1RSTF9JTyhtcHUtPnBvcnQpKSAmIDB4YzApID09IDB4ODApOworCXJldHVybiAoKGluYihNUFU0MDFDKG1wdSkpICYgMHhjMCkgPT0gMHg4MCk7CiB9CiAKIC8qCkBAIC0zMzgsNyArMzMwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpc2VfbXB1NDAxKGNvbnN0IHN0cnVjdCBzbmRfbXB1NDAxICogbXB1KQogewotCW91dGIoMCwgTUlESV9EQVRBX0lPKG1wdS0+cG9ydCkpOworCW91dGIoMCwgTVBVNDAxRChtcHUpKTsKIH0KIAogLyoKQEAgLTM5NiwyMCArMzg4LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgb2JwX3N0YXJ0dXBfYWNrKHN0cnVjdCBzb3VuZHNjYXBlICpzLCB1bnNpZ25lZCB0aW1lb3V0KQogewotCXdoaWxlICh0aW1lb3V0ICE9IDApIHsKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisKKwlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgeDsKIAotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQl4ID0gaW5iKEhPU1RfREFUQV9JTyhzLT5pb19iYXNlKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKCh4ICYgMHhmZSkgPT0gMHhmZSkKIAkJCXJldHVybiAxOwogCi0JCS0tdGltZW91dDsKLQl9IC8qIHdoaWxlICovCisJCW1zbGVlcCgxMCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIzLDIwICs0MTUsMjAgQEAKICAqLwogc3RhdGljIGludCBob3N0X3N0YXJ0dXBfYWNrKHN0cnVjdCBzb3VuZHNjYXBlICpzLCB1bnNpZ25lZCB0aW1lb3V0KQogewotCXdoaWxlICh0aW1lb3V0ICE9IDApIHsKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisKKwlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgeDsKIAotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQl4ID0gaW5iKEhPU1RfREFUQV9JTyhzLT5pb19iYXNlKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHggPT0gMHhmZSkKIAkJCXJldHVybiAxOwogCi0JCS0tdGltZW91dDsKLQl9IC8qIHdoaWxlICovCisJCW1zbGVlcCgxMCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTMyLDEwICs1MjQsMTAgQEAKIAkgKiBnaXZlIGl0IDUgc2Vjb25kcyAobWF4KSAuLi4KIAkgKi8KIAlyZXQgPSAwOwotCWlmICghb2JwX3N0YXJ0dXBfYWNrKHMsIDUpKSB7CisJaWYgKCFvYnBfc3RhcnR1cF9hY2socywgNTAwMCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyByZXNwb25zZSBmcm9tIG9uLWJvYXJkIHByb2Nlc3NvciBhZnRlciB1cGxvYWRcbiIpOwogCQlyZXQgPSAtRUFHQUlOOwotCX0gZWxzZSBpZiAoIWhvc3Rfc3RhcnR1cF9hY2socywgNSkpIHsKKwl9IGVsc2UgaWYgKCFob3N0X3N0YXJ0dXBfYWNrKHMsIDUwMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogU291bmRTY2FwZSBmYWlsZWQgdG8gaW5pdGlhbGlzZVxuIik7CiAJCXJldCA9IC1FQUdBSU47CiAJfQpAQCAtNzMyLDEzICs3MjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCXNldF9ob3N0X21vZGVfdW5zYWZlKHMtPmlvX2Jhc2UpOwotCi0JaWYgKGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgQ01EX0dFVF9NSURJX1ZPTCwgMTAwKSkgewotCQl1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaG9zdF9yZWFkX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIDEwMCk7Ci0JfQotCi0Jc2V0X21pZGlfbW9kZV91bnNhZmUocy0+aW9fYmFzZSk7CisJdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHMtPm1pZGlfdm9sOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc3Myw2ICs3NTksNyBAQAogCWNoYW5nZSA9IChob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9TRVRfTUlESV9WT0wsIDEwMCkKIAkgICAgICAgICAgJiYgaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCAoKHVuc2lnbmVkIGNoYXIpIHVjdGwtPnZhbHVlLmludGVnZXIuIHZhbHVlWzBdKSAmIDEyNywgMTAwKQogCSAgICAgICAgICAmJiBob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9YWFhfTUlESV9WT0wsIDEwMCkpOworCXMtPm1pZGlfdm9sID0gKHVuc2lnbmVkIGNoYXIpIHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxMjc7CiAgICAgICBfX3NraXBfY2hhbmdlOgogCiAJLyoKQEAgLTgxNSwxMiArODAyLDExIEBACiAgKiBQZXJmb3JtIGNlcnRhaW4gYXJjYW5lIHBvcnQtY2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZXJlCiAgKiBpcyBhIFNvdW5kU2NhcGUgYm9hcmQgbHVya2luZyBiZWhpbmQgdGhlIGdpdmVuIHBvcnRzLgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkZXRlY3Rfc3NjYXBlKHN0cnVjdCBzb3VuZHNjYXBlICpzKQorc3RhdGljIGludCBfX2RldmluaXQgZGV0ZWN0X3NzY2FwZShzdHJ1Y3Qgc291bmRzY2FwZSAqcywgbG9uZyB3c3NfaW8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBkOwogCWludCByZXR2YWwgPSAwOwotCWludCBjb2RlYyA9IHMtPndzc19iYXNlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIApAQCAtODM2LDEzICs4MjIsMTEgQEAKIAlpZiAoKGQgJiAweDgwKSAhPSAwKQogCQlnb3RvIF9kb25lOwogCi0JaWYgKGQgPT0gMCkgewotCQlzLT5jb2RlY190eXBlID0gMTsKKwlpZiAoZCA9PSAwKQogCQlzLT5pY190eXBlID0gSUNfT0RJRTsKLQl9IGVsc2UgaWYgKChkICYgMHg2MCkgIT0gMCkgewotCQlzLT5jb2RlY190eXBlID0gMjsKKwllbHNlIGlmICgoZCAmIDB4NjApICE9IDApCiAJCXMtPmljX3R5cGUgPSBJQ19PUFVTOwotCX0gZWxzZQorCWVsc2UKIAkJZ290byBfZG9uZTsKIAogCW91dGIoMHhmYSwgT0RJRV9BRERSX0lPKHMtPmlvX2Jhc2UpKTsKQEAgLTg2MiwxMCArODQ2LDEwIEBACiAJc3NjYXBlX3dyaXRlX3Vuc2FmZShzLT5pb19iYXNlLCBHQV9ITUNUTF9SRUcsIGQgfCAweGMwKTsKIAogCWlmIChzLT50eXBlID09IFNTQ0FQRV9WSVZPKQotCQljb2RlYyArPSA0OworCQl3c3NfaW8gKz0gNDsKIAkvKiB3YWl0IGZvciBXU1MgY29kZWMgKi8KIAlmb3IgKGQgPSAwOyBkIDwgNTAwOyBkKyspIHsKLQkJaWYgKChpbmIoY29kZWMpICYgMHg4MCkgPT0gMCkKKwkJaWYgKChpbmIod3NzX2lvKSAmIDB4ODApID09IDApCiAJCQlicmVhazsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCQltc2xlZXAoMSk7CkBAIC05NTUsODIgKzkzOSw2IEBACiAKIAogLyoKLSAqIE92ZXJyaWRlIGZvciB0aGUgQ1M0MjMxIHBsYXliYWNrIGZvcm1hdCBmdW5jdGlvbi4KLSAqIFRoZSBBRDE4NDUgaGFzIG11Y2ggc2ltcGxlciBmb3JtYXQgYW5kIHJhdGUgc2VsZWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBhZDE4NDVfcGxheWJhY2tfZm9ybWF0KHN0cnVjdCBzbmRfd3NzICpjaGlwLAotCQkJCSAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgIHVuc2lnbmVkIGNoYXIgZm9ybWF0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0KLQkvKgotCSAqIFRoZSBBRDE4NDUgY2FuJ3QgaGFuZGxlIHNhbXBsZSBmcmVxdWVuY2llcwotCSAqIG91dHNpZGUgb2YgNCBrSFogdG8gNTAga0haCi0JICovCi0JaWYgKHJhdGUgPiA1MDAwMCkKLQkJcmF0ZSA9IDUwMDAwOwotCWVsc2UgaWYgKHJhdGUgPCA0MDAwKQotCQlyYXRlID0gNDAwMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBQcm9ncmFtIHRoZSBBRDE4NDUgY29ycmVjdGx5IGZvciB0aGUgcGxheWJhY2sgc3RyZWFtLgotCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQotCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgotCSAqIHJlZ2lzdGVyIGlzIHNldC4KLQkgKiAKLQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgotCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgotCSAqLwotCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9QTEFZQktfRk9STUFULCAoZm9ybWF0ICYgMHhmMCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9NU0IsICh1bnNpZ25lZCBjaGFyKSAocmF0ZSA+PiA4KSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX0xTQiwgKHVuc2lnbmVkIGNoYXIpIHJhdGUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIE92ZXJyaWRlIGZvciB0aGUgQ1M0MjMxIGNhcHR1cmUgZm9ybWF0IGZ1bmN0aW9uLiAKLSAqIFRoZSBBRDE4NDUgaGFzIG11Y2ggc2ltcGxlciBmb3JtYXQgYW5kIHJhdGUgc2VsZWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBhZDE4NDVfY2FwdHVyZV9mb3JtYXQoc3RydWN0IHNuZF93c3MgKmNoaXAsCi0JCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHVuc2lnbmVkIGNoYXIgZm9ybWF0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0KLQkvKgotCSAqIFRoZSBBRDE4NDUgY2FuJ3QgaGFuZGxlIHNhbXBsZSBmcmVxdWVuY2llcyAKLQkgKiBvdXRzaWRlIG9mIDQga0haIHRvIDUwIGtIWgotCSAqLwotCWlmIChyYXRlID4gNTAwMDApCi0JCXJhdGUgPSA1MDAwMDsKLQllbHNlIGlmIChyYXRlIDwgNDAwMCkKLQkJcmF0ZSA9IDQwMDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KLQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKLQkgKiB0aGUgQ0FQVFVSRV9FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgotCSAqIHJlZ2lzdGVyIGlzIHNldC4KLQkgKgotCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCi0JICogICAgICAgdG8gZ2V0IHRoZSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuCi0JICovCi0Jc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX1JFQ19GT1JNQVQsIChmb3JtYXQgJiAweGYwKSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX01TQiwgKHVuc2lnbmVkIGNoYXIpIChyYXRlID4+IDgpKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTFNCLCAodW5zaWduZWQgY2hhcikgcmF0ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotfQotCi0vKgogICogQ3JlYXRlIGFuIEFEMTg0NSBQQ00gc3ViZGV2aWNlIG9uIHRoZSBTb3VuZFNjYXBlLiBUaGUgQUQxODQ1CiAgKiBpcyB2ZXJ5IG11Y2ggbGlrZSBhIENTNDIzMSwgd2l0aCBhIGZldyBleHRyYSBiaXRzLiBXZSB3aWxsCiAgKiB0cnkgdG8gc3VwcG9ydCBhdCBsZWFzdCBzb21lIG9mIHRoZSBleHRyYSBiaXRzIGJ5IG92ZXJyaWRpbmcKQEAgLTEwNTUsMTEgKzk2Myw2IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXN0cnVjdCBzbmRfcGNtICpwY207CiAKLSNkZWZpbmUgQUQxODQ1X0ZSRVFfU0VMX0VOQUJMRSAgMHgwOAotCi0jZGVmaW5lIEFEMTg0NV9QV1JfRE9XTl9DVFJMICAgMHgxYgotI2RlZmluZSBBRDE4NDVfQ1JZU19DTE9DS19TRUwgIDB4MWQKLQogLyoKICAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IGlzIHNldAogICogYnkgdGhlIGxvd2xldmVsIGRyaXZlciAuLi4KQEAgLTEwNzQsNyArOTc3LDYgQEAKICAqLwogCiAJCWlmIChzc2NhcGUtPnR5cGUgIT0gU1NDQVBFX1ZJVk8pIHsKLQkJCWludCB2YWw7CiAJCQkvKgogCQkJICogVGhlIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBvbiB0aGUgU291bmRTY2FwZSBtdXN0CiAJCQkgKiBiZSAxNC4zMTgxOCBNSHosIGJlY2F1c2Ugd2UgbXVzdCBzZXQgdGhpcyByZWdpc3RlcgpAQCAtMTA4MiwyMiArOTg0LDEwIEBACiAJCQkgKi8KIAkJCXNuZF93c3NfbWNlX3VwKGNoaXApOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfQ1JZU19DTE9DS19TRUwsIDB4MjApOworCQkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0NMT0NLLCAweDIwKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCQlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCi0JCQkvKgotCQkJICogTW9yZSBjdXN0b20gY29uZmlndXJhdGlvbjoKLQkJCSAqIGEpIHNlbGVjdCAibW9kZSAyIiBhbmQgcHJvdmlkZSBhIGN1cnJlbnQgZHJpdmUgb2YgOG1BCi0JCQkgKiBiKSBlbmFibGUgZnJlcXVlbmN5IHNlbGVjdGlvbiAoZm9yIGNhcHR1cmUvcGxheWJhY2spCi0JCQkgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCQkJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX01JU0NfSU5GTywKLQkJCQkgICAgQ1M0MjMxX01PREUyIHwgMHgxMCk7Ci0JCQl2YWwgPSBzbmRfd3NzX2luKGNoaXAsIEFEMTg0NV9QV1JfRE9XTl9DVFJMKTsKLQkJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9QV1JfRE9XTl9DVFJMLAotCQkJCSAgICB2YWwgfCBBRDE4NDVfRlJFUV9TRUxfRU5BQkxFKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCX0KIAogCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKQEAgLTExMTMsMTEgKzEwMDMsMTMgQEAKIAkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOwogCQkJZ290byBfZXJyb3I7CiAJCX0KLQkJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogTm8gdGltZXIgZGV2aWNlICIKLQkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOwotCQkJZ290byBfZXJyb3I7CisJCWlmIChjaGlwLT5oYXJkd2FyZSAhPSBXU1NfSFdfQUQxODQ4KSB7CisJCQllcnIgPSBzbmRfd3NzX3RpbWVyKGNoaXAsIDAsIE5VTEwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIHRpbWVyIGRldmljZSAiCisJCQkJCQkgICAgImZvciBBRDE4NDUgY2hpcFxuIik7CisJCQkJZ290byBfZXJyb3I7CisJCQl9CiAJCX0KIAogCQlpZiAoc3NjYXBlLT50eXBlICE9IFNTQ0FQRV9WSVZPKSB7CkBAIC0xMTI4LDggKzEwMjAsNiBAQAogCQkJCQkJICAgICJNSURJIG1peGVyIGNvbnRyb2xcbiIpOwogCQkJCWdvdG8gX2Vycm9yOwogCQkJfQotCQkJY2hpcC0+c2V0X3BsYXliYWNrX2Zvcm1hdCA9IGFkMTg0NV9wbGF5YmFja19mb3JtYXQ7Ci0JCQljaGlwLT5zZXRfY2FwdHVyZV9mb3JtYXQgPSBhZDE4NDVfY2FwdHVyZV9mb3JtYXQ7CiAJCX0KIAogCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU291bmRTY2FwZSIpOwpAQCAtMTE1Nyw3ICsxMDQ3LDYgQEAKIAl1bnNpZ25lZCBkbWFfY2ZnOwogCXVuc2lnbmVkIGlycV9jZmc7CiAJdW5zaWduZWQgbXB1X2lycV9jZmc7Ci0JdW5zaWduZWQgeHBvcnQ7CiAJc3RydWN0IHJlc291cmNlICppb19yZXM7CiAJc3RydWN0IHJlc291cmNlICp3c3NfcmVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTc3LDE1ICsxMDY2LDE1IEBACiAJCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBJbnZhbGlkIElSUSAlZFxuIiwgbXB1X2lycVtkZXZdKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JeHBvcnQgPSBwb3J0W2Rldl07CiAKIAkvKgogCSAqIEdyYWIgSU8gcG9ydHMgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcHJvYmUgc28gdGhhdCB3ZQogCSAqIGNhbiBkZXRlY3QgYW5kIGNvbnRyb2wgdGhpcyBoYXJkd2FyZSAuLi4KIAkgKi8KLQlpb19yZXMgPSByZXF1ZXN0X3JlZ2lvbih4cG9ydCwgOCwgIlNvdW5kU2NhcGUiKTsKKwlpb19yZXMgPSByZXF1ZXN0X3JlZ2lvbihwb3J0W2Rldl0sIDgsICJTb3VuZFNjYXBlIik7CiAJaWYgKCFpb19yZXMpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBjYW4ndCBncmFiIHBvcnQgMHgleFxuIiwgeHBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAic3NjYXBlOiBjYW4ndCBncmFiIHBvcnQgMHglbHhcbiIsIHBvcnRbZGV2XSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXdzc19yZXMgPSBOVUxMOwpAQCAtMTIxMiwxMCArMTEwMSw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNzY2FwZS0+Zndsb2NrKTsKIAlzc2NhcGUtPmlvX3JlcyA9IGlvX3JlczsKIAlzc2NhcGUtPndzc19yZXMgPSB3c3NfcmVzOwotCXNzY2FwZS0+aW9fYmFzZSA9IHhwb3J0OwotCXNzY2FwZS0+d3NzX2Jhc2UgPSB3c3NfcG9ydFtkZXZdOworCXNzY2FwZS0+aW9fYmFzZSA9IHBvcnRbZGV2XTsKIAotCWlmICghZGV0ZWN0X3NzY2FwZShzc2NhcGUpKSB7CisJaWYgKCFkZXRlY3Rfc3NjYXBlKHNzY2FwZSwgd3NzX3BvcnRbZGV2XSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IGhhcmR3YXJlIG5vdCBkZXRlY3RlZCBhdCAweCV4XG4iLCBzc2NhcGUtPmlvX2Jhc2UpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIF9yZWxlYXNlX2RtYTsKQEAgLTEyODgsMTIgKzExNzYsMTEgQEAKIAl9CiAjZGVmaW5lIE1JRElfREVWTlVNICAwCiAJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewotCQllcnIgPSBjcmVhdGVfbXB1NDAxKGNhcmQsIE1JRElfREVWTlVNLAotCQkJCSAgICBNUFU0MDFfSU8oeHBvcnQpLCBtcHVfaXJxW2Rldl0pOworCQllcnIgPSBjcmVhdGVfbXB1NDAxKGNhcmQsIE1JRElfREVWTlVNLCBwb3J0W2Rldl0sIG1wdV9pcnFbZGV2XSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogRmFpbGVkIHRvIGNyZWF0ZSAiCi0JCQkJCSJNUFUtNDAxIGRldmljZSBhdCAweCV4XG4iLAotCQkJCQlNUFU0MDFfSU8oeHBvcnQpKTsKKwkJCQkJIk1QVS00MDEgZGV2aWNlIGF0IDB4JWx4XG4iLAorCQkJCQlwb3J0W2Rldl0pOwogCQkJZ290byBfcmVsZWFzZV9kbWE7CiAJCX0KIApAQCAtMTM1NywxMCArMTI0NCwxMCBAQAogCXN0cnVjdCBzb3VuZHNjYXBlICpzc2NhcGU7CiAJaW50IHJldDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlzc2NhcGUgPSBnZXRfY2FyZF9zb3VuZHNjYXBlKGNhcmQpOwogCXNzY2FwZS0+dHlwZSA9IFNTQ0FQRTsKQEAgLTE0NjIsMTAgKzEzNDksMTAgQEAKIAkgKiBDcmVhdGUgYSBuZXcgQUxTQSBzb3VuZCBjYXJkIGVudHJ5LCBpbiBhbnRpY2lwYXRpb24KIAkgKiBvZiBkZXRlY3Rpbmcgb3VyIGhhcmR3YXJlIC4uLgogCSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlzc2NhcGUgPSBnZXRfY2FyZF9zb3VuZHNjYXBlKGNhcmQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwppbmRleCA0YzA5NWJjLi5hMzRhZTdiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKQEAgLTMzOCwxNSArMzM4LDE2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXNuZF93YXZlZnJvbnRfY2FyZF90ICphY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyAoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgIHNpemVvZihzbmRfd2F2ZWZyb250X2NhcmRfdCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfd2F2ZWZyb250X2NhcmRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWFjYXJkLT53YXZlZnJvbnQuaXJxID0gLTE7CkBAIC0zNTcsNyArMzU4LDggQEAKIAlhY2FyZC0+d2F2ZWZyb250LmNhcmQgPSBjYXJkOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF93YXZlZnJvbnRfZnJlZTsKIAotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC01NTEsMTEgKzU1MywxMSBAQAogCQlyZXR1cm4gMDsKICNlbmRpZgogCWlmIChjczQyMzJfcGNtX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50aygic3BlY2lmeSBDUzQyMzIgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNwZWNpZnkgQ1M0MjMyIHBvcnRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGljczIxMTVfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IElDUzIxMTUgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNwZWNpZnkgSUNTMjExNSBwb3J0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtNTY3LDkgKzU2OSw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF93YXZlZnJvbnRfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC02MTYsOSArNjE4LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmIChzbmRfd2F2ZWZyb250X3BucCAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpIDwgMCkgewogCQlpZiAoY3M0MjMyX3BjbV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYwppbmRleCA0YzQxMDgyLi5iZWIzMTJjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKQEAgLTYzMyw3ICs2MzMsNyBAQAogCQl3YnVmWzFdID0gaSA+PiA3OwogCiAJCWlmIChzbmRfd2F2ZWZyb250X2NtZCAoZGV2LCBXRkNfSURFTlRJRllfU0FNUExFX1RZUEUsIHJidWYsIHdidWYpKSB7Ci0JCQlzbmRfcHJpbnRrKCJjYW5ub3QgaWRlbnRpZnkgc2FtcGxlICIKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJjYW5ub3QgaWRlbnRpZnkgc2FtcGxlICIKIAkJCQkgICAidHlwZSBvZiBzbG90ICVkXG4iLCBpKTsKIAkJCWRldi0+c2FtcGxlX3N0YXR1c1tpXSA9IFdGX1NUX0VNUFRZOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCmluZGV4IDNkNmM1ZjIuLjVkMmJhMWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC0xODEsMjUgKzE4MSw2IEBACiAJCXVkZWxheSgxMDApOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfd3NzX291dG0oc3RydWN0IHNuZF93c3MgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLAotCQkJICAgIHVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBjaGFyIHRtcCA9IChjaGlwLT5pbWFnZVtyZWddICYgbWFzaykgfCB2YWx1ZTsKLQotCXNuZF93c3Nfd2FpdChjaGlwKTsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCi0JaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJvdXRtOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKLSNlbmRpZgotCWNoaXAtPmltYWdlW3JlZ10gPSB0bXA7Ci0JaWYgKCFjaGlwLT5jYWxpYnJhdGVfbXV0ZSkgewotCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwotCQl3bWIoKTsKLQkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB0bXApOwotCQltYigpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgc25kX3dzc19kb3V0KHN0cnVjdCBzbmRfd3NzICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewpAQCAtMjE5LDcgKzIwMCw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAib3V0OiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICIKKwkJCSAgICItIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CiAjZW5kaWYKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdmFsdWUpOwpAQCAtMjM1LDcgKzIxNyw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoImluOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleFxuIiwgcmVnKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbjogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAiCisJCQkgICAiLSByZWcgPSAweCV4XG4iLCByZWcpOwogI2VuZGlmCiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKIAltYigpOwpAQCAtMjUyLDcgKzIzNSw3IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB2YWwpOwogCWNoaXAtPmVpbWFnZVtDUzQyMzZfUkVHKHJlZyldID0gdmFsOwogI2lmIDAKLQlwcmludGsoImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CiAjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9leHRfb3V0KTsKQEAgLTI2OCw3ICsyNTEsOCBAQAogCXsKIAkJdW5zaWduZWQgY2hhciByZXM7CiAJCXJlcyA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUcpKTsKLQkJcHJpbnRrKCJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLAorCQkgICAgICAgcmVnLCByZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMzk0LDEzICszNzgsMTYgQEAKIAlzbmRfd3NzX3dhaXQoY2hpcCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJtY2VfdXAgLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIik7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAljaGlwLT5tY2VfYml0IHw9IENTNDIzMV9NQ0U7CiAJdGltZW91dCA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJtY2VfdXAgWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfdXAgWzB4JWx4XTogIgorCQkJICAgInNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQpOwogCWlmICghKHRpbWVvdXQgJiBDUzQyMzFfTUNFKSkKIAkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLAogCQkJIGNoaXAtPm1jZV9iaXQgfCAodGltZW91dCAmIDB4MWYpKTsKQEAgLTQxOSw3ICs0MDYsOSBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XSAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLCAobG9uZylDUzQyMzFQKFJFR1NFTCkpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1jZV9kb3duIFsweCVseF0gLSAiCisJCQkgICAiYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIsCisJCQkgICAobG9uZylDUzQyMzFQKFJFR1NFTCkpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJY2hpcC0+bWNlX2JpdCAmPSB+Q1M0MjMxX01DRTsKQEAgLTQyNyw3ICs0MTYsOSBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfZG93biBbMHglbHhdOiAiCisJCQkgICAic2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLAorCQkJICAgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fCAhKGNoaXAtPmhhcmR3YXJlICYgaHdfbWFzaykpCiAJCXJldHVybjsKIApAQCAtNTY1LDcgKzU1Niw3IEBACiAJaWYgKGNoYW5uZWxzID4gMSkKIAkJcmZvcm1hdCB8PSBDUzQyMzFfU1RFUkVPOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJnZXRfZm9ybWF0OiAweCV4IChtb2RlPTB4JXgpXG4iLCBmb3JtYXQsIG1vZGUpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZ2V0X2Zvcm1hdDogMHgleCAobW9kZT0weCV4KVxuIiwgZm9ybWF0LCBtb2RlKTsKICNlbmRpZgogCXJldHVybiByZm9ybWF0OwogfQpAQCAtNTg3LDcgKzU3OCwxNSBAQAogCQkJICAgICBjaGlwLT5pbWFnZVtDUzQyMzFfUklHSFRfSU5QVVRdKTsKIAkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MT09QQkFDSywKIAkJCSAgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX0xPT1BCQUNLXSk7CisJfSBlbHNlIHsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MRUZUX0lOUFVULAorCQkJICAgICAwKTsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9SSUdIVF9JTlBVVCwKKwkJCSAgICAgMCk7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTE9PUEJBQ0ssCisJCQkgICAgIDB4ZmQpOwogCX0KKwogCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfQVVYMV9MRUZUX0lOUFVULAogCQkgICAgIG11dGUgfCBjaGlwLT5pbWFnZVtDUzQyMzFfQVVYMV9MRUZUX0lOUFVUXSk7CiAJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULApAQCAtNjMwLDcgKzYyOSw2IEBACiAJaW50IGZ1bGxfY2FsaWIgPSAxOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+bWNlX211dGV4KTsKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwogCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQ1M0MjMxQSB8fAogCSAgICAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjMyX01BU0spKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtNjQ2LDYgKzY0NCwyNCBAQAogCQkJZnVsbF9jYWxpYiA9IDA7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19BRDE4NDUpIHsKKwkJdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwkJLyoKKwkJICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9QTEFZQktfRk9STUFULCAocGRmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC02NjMsNyArNjc5LDYgQEAKIAkJCXVkZWxheSgxMDApOwkvKiB0aGlzIHNlZW1zIHRvIGhlbHAgKi8KIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTY3NSw3ICs2OTAsNiBAQAogCWludCBmdWxsX2NhbGliID0gMTsKIAogCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0NTNDIzMUEgfHwKIAkgICAgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzMl9NQVNLKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTY5MCw2ICs3MDQsMjQgQEAKIAkJCWZ1bGxfY2FsaWIgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQUQxODQ1KSB7CisJCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJCS8qCisJCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBjYXB0dXJlIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9SRUNfRk9STUFULCAoY2RmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC03MTQsNyArNzQ2LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTc3MSwxMCArODAyLDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICgxKVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoMSlcbiIpOwogI2VuZGlmCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC03ODksMTggKzgyMSwyMCBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMilcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDIpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICY9IH5DUzQyMzFfQVVUT0NBTElCOworCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9JRkFDRV9DVFJMLCBjaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0pOwogCXNuZF93c3Nfb3V0KGNoaXAsCiAJCSAgICBDUzQyMzFfQUxUX0ZFQVRVUkVfMSwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMykgLSBhZmVpID0gMHgleFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICgzKSAtIGFmZWkgPSAweCV4XG4iLAogCQkgICBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0pOwogI2VuZGlmCiAKQEAgLTgxNyw3ICs4NTEsNyBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoNClcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDQpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC04MjcsOSArODYxLDEwIEBACiAJCQkgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX1JFQ19GT1JNQVRdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CisJc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICg1KVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoNSlcbiIpOwogI2VuZGlmCiB9CiAKQEAgLTg4NSw4ICs5MjAsNiBAQAogCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm47CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7Ci0KIAkvKiBkaXNhYmxlIElSUSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmICghKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSkKQEAgLTkxOSw4ICs5NTIsNiBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoU1RBVFVTKSwgMCk7CS8qIGNsZWFyIElSUSAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwotCiAJY2hpcC0+bW9kZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIH0KQEAgLTExMTMsNyArMTE0NCw3IEBACiAJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKQogCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFNUQVRVUyksIDApOwogCWVsc2UKLQkJc25kX3dzc19vdXRtKGNoaXAsIENTNDIzMV9JUlFfU1RBVFVTLCBzdGF0dXMsIDApOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUywgc3RhdHVzKTsKIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEyNzgsNyArMTMwOSw4IEBACiAJCX0gZWxzZSBpZiAocmV2ID09IDB4MDMpIHsKIAkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzNkI7CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXhcbiIsIHJldik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgInVua25vd24gQ1MgY2hpcCB3aXRoIHZlcnNpb24gMHgleFxuIiwgcmV2KTsKIAkJCXJldHVybiAtRU5PREVWOwkJLyogdW5rbm93biBDUzQyMzEgY2hpcD8gKi8KIAkJfQogCX0KQEAgLTEzMTQsNiArMTM0NiwxMCBAQAogCQljaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMl0gPQogCQkJY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0lOVEVSV0FWRSA/IDB4YzIgOiAweDAxOwogCX0KKwkvKiBlbmFibGUgZmluZSBncmFpbmVkIGZyZXF1ZW5jeSBzZWxlY3Rpb24gKi8KKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0FEMTg0NSkKKwkJY2hpcC0+aW1hZ2VbQUQxODQ1X1BXUl9ET1dOXSA9IDg7CisKIAlwdHIgPSAodW5zaWduZWQgY2hhciAqKSAmY2hpcC0+aW1hZ2U7CiAJcmVnbnVtID0gKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSA/IDE2IDogMzI7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKQEAgLTEzNDIsNyArMTM3OCwxMCBAQAogCQkJCWNhc2UgNjoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzUgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzUgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MGIpIHsJLyogQ1M0MjM2L0IgKi8KIAkJCQlzd2l0Y2ggKGlkID4+IDUpIHsKQEAgLTEzNTMsNyArMTM5MiwxMCBAQAogCQkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzZCOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzNiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzNiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOCkgewkvKiBDUzQyMzdCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM3QjsKQEAgLTEzNjQsNyArMTQwNiwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzdCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM3QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOSkgewkvKiBDUzQyMzhCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM4QjsKQEAgLTEzNzQsNyArMTQxOSwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzhCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM4QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgxZSkgewkvKiBDUzQyMzkgKi8KIAkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzk7CkBAIC0xMzg0LDEwICsxNDMyLDE1IEBACiAJCQkJY2FzZSA2OgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzOSBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzOSBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwICIKKwkJCQkJICAgIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE2MTgsNyArMTY3MSw4IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJkb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gIgorCQkJICAgIi0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fAogCSAgICAhKGNoaXAtPmhhcmR3YXJlICYgKFdTU19IV19DUzQyMzFfTUFTSyB8IFdTU19IV19DUzQyMzJfTUFTSykpKSB7CiAJCXJldHVybjsKQEAgLTE2MjgsNyArMTY4Miw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBpbnQgc25kX3dzc19mcmVlKHN0cnVjdCBzbmRfd3NzICpjaGlwKQoraW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCkKIHsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19jcG9ydCk7CkBAIC0xNjUxLDYgKzE3MDUsNyBAQAogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChzbmRfd3NzX2ZyZWUpOwogCiBzdGF0aWMgaW50IHNuZF93c3NfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTE4MjAsNyArMTg3NSw4IEBACiAjaWYgMAogCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzJfTUFTSykgewogCQlpZiAoY2hpcC0+cmVzX2Nwb3J0ID09IE5VTEwpCi0JCQlzbmRfcHJpbnRrKCJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSBub3QgYWNjZXNzaWJsZVxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSAiCisJCQkJICAgIm5vdCBhY2Nlc3NpYmxlXG4iKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9hdTF4MDAuYyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKaW5kZXggMTg4MWNlYy4uM2U3NjNkNiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9hdTF4MDAuYworKysgYi9zb3VuZC9taXBzL2F1MXgwMC5jCkBAIC02MzYsOSArNjM2LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfYXUxMDAwICphdTEwMDA7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCAiQUM5NyIsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoLTEsICJBQzk3IiwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfYXUxMDAwX2ZyZWU7CiAJYXUxMDAwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpAQCAtNjc4LDcgKzY3OSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpbnRrKCBLRVJOX0lORk8gIkFMU0EgQUM5NzogRHJpdmVyIEluaXRpYWxpemVkXG4iICk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQUxTQSBBQzk3OiBEcml2ZXIgSW5pdGlhbGl6ZWRcbiIpOwogCWF1MTAwMF9jYXJkID0gY2FyZDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvaGFsMi5jIGIvc291bmQvbWlwcy9oYWwyLmMKaW5kZXggZGI0OTViZS4uYzUyNjkxYyAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9oYWwyLmMKKysrIGIvc291bmQvbWlwcy9oYWwyLmMKQEAgLTg3OCw5ICs4NzgsOSBAQAogCXN0cnVjdCBzbmRfaGFsMiAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gaGFsMl9jcmVhdGUoY2FyZCwgJmNoaXApOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IDRjNjM1MDQuLjY2ZjNiNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC05MzYsOSArOTM2LDkgQEAKIAlzdHJ1Y3Qgc25kX3NnaW8yYXVkaW8gKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9zZ2lvMmF1ZGlvX2NyZWF0ZShjYXJkLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4NDguYyBiL3NvdW5kL29zcy9hZDE4NDguYwppbmRleCA3Y2Y5OTEzLi5kMTJiZDk4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODQ4LmMKKysrIGIvc291bmQvb3NzL2FkMTg0OC5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAl3aGlsZSAodGltZW91dCA+IDAgJiYgKGFkX3JlYWQoZGV2YywgMTEpICYgMHgyMCkpCiAJCXRpbWVvdXQtLTsKIAlpZiAoYWRfcmVhZChkZXZjLCAxMSkgJiAweDIwKQotCQlpZiAoIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1KSB8fCAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpKQorCQlpZiAoKGRldmMtPm1vZGVsICE9IE1EXzE4NDUpICYmIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZDE4NDg6IEF1dG8gY2FsaWJyYXRpb24gdGltZWQgb3V0KDMpLlxuIik7CiB9CiAKQEAgLTIxMDcsNyArMjEwNyw3IEBACiAJc3dpdGNoIChjbWQpCiAJewogCQljYXNlIEFEMTg0OF9TRVRfWFRBTDoJLyogQ2hhbmdlIGNsb2NrIGZyZXF1ZW5jeSBvZiBBRDE4NDUgKG9ubHkgKSAqLwotCQkJaWYgKGRldmMtPm1vZGVsICE9IE1EXzE4NDUgfHwgZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpCisJCQlpZiAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSAmJiBkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZjLT5sb2NrLGZsYWdzKTsKIAkJCWFkX2VudGVyX01DRShkZXZjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKaW5kZXggODFlMWY0NC4uNDE5MWFjYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKKysrIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKQEAgLTE2MjcsNyArMTYyNyw5IEBACiAJCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdWRpby5jIGIvc291bmQvb3NzL2F1ZGlvLmMKaW5kZXggODliZDI3YS4uYjY5YzA1YiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL2F1ZGlvLmMKQEAgLTQzMyw3ICs0MzMsOSBAQAogCQkJcmV0dXJuIGRtYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKIAkJCiAJCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hYnVmLmMgYi9zb3VuZC9vc3MvZG1hYnVmLmMKaW5kZXggMWU5MGQ3Ni4uMWJmY2Y3ZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYWJ1Zi5jCisrKyBiL3NvdW5kL29zcy9kbWFidWYuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlETUFidWZfbGF1bmNoX291dHB1dChkZXYsIGRtYXApOwogCQlhZGV2LT5kbWFwX291dC0+ZmxhZ3MgfD0gRE1BX1NZTkNJTkc7CiAJCWFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9IDA7Ci0JCXdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgbisrIDw9IGFkZXYtPmRtYXBfb3V0LT5uYnVmcyAmJiAKKwkJd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiBuKysgPCBhZGV2LT5kbWFwX291dC0+bmJ1ZnMgJiYKIAkJICAgICAgIGFkZXYtPmRtYXBfb3V0LT5xbGVuICYmIGFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9PSAwKSB7CiAJCQlsb25nIHQgPSBkbWFidWZfdGltZW91dChkbWFwKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYXAtPmxvY2ssZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwppbmRleCAzODkzMWYyLi4xZjQ3NzQxIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwpAQCAtMTUyNCw3ICsxNTI0LDcgQEAKIAkuc3BlZWQJPSA4MDAwCiB9IDsKIAotc3RhdGljIE1BQ0hJTkUgbWFjaFRUID0geworc3RhdGljIF9faW5pdGRhdGEgTUFDSElORSBtYWNoVFQgPSB7CiAJLm5hbWUJCT0gIkF0YXJpIiwKIAkubmFtZTIJCT0gIlRUIiwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogCS5jYXBhYmlsaXRpZXMJPSAgRFNQX0NBUF9CQVRDSAkvKiBBcyBwZXIgU05EQ1RMX0RTUF9HRVRDQVBTICovCiB9OwogCi1zdGF0aWMgTUFDSElORSBtYWNoRmFsY29uID0geworc3RhdGljIF9faW5pdGRhdGEgTUFDSElORSBtYWNoRmFsY29uID0gewogCS5uYW1lCQk9ICJBdGFyaSIsCiAJLm5hbWUyCQk9ICJGQUxDT04iLAogCS5kbWFfYWxsb2MJPSBBdGFBbGxvYywKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wYXMyX2NhcmQuYyBiL3NvdW5kL29zcy9wYXMyX2NhcmQuYwppbmRleCAyNWYzYTIyLi43ZjM3N2VjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKKysrIGIvc291bmQvb3NzL3BhczJfY2FyZC5jCkBAIC0xNTYsOSArMTU2LDcgQEAKIAkJCQkJCSAqIDB4ODAKIAkJCQkJCSAqLyAsIDB4Qjg4KTsKIAotCXBhc193cml0ZSgweDgwCi0JCSAgfCBqb3lzdGljaz8weDQwOjAKLQkJICAsMHhGMzg4KTsKKwlwYXNfd3JpdGUoMHg4MCB8IChqb3lzdGljayA/IDB4NDAgOiAwKSwgMHhGMzg4KTsKIAogCWlmIChwYXNfaXJxIDwgMCB8fCBwYXNfaXJxID4gMTUpCiAJewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Bzcy5jIGIvc291bmQvb3NzL3Bzcy5jCmluZGV4IDE2ZWQwNjkuLjE2NTE3YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wc3MuYworKysgYi9zb3VuZC9vc3MvcHNzLmMKQEAgLTQ1NywxMCArNDU3LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3ZvbHVtZV9tb25vKHVuc2lnbmVkIF9fdXNlciAqcCwgaW50ICphbGVmdCkKK3N0YXRpYyBpbnQgc2V0X3ZvbHVtZV9tb25vKHVuc2lnbmVkIF9fdXNlciAqcCwgdW5zaWduZWQgaW50ICphbGVmdCkKIHsKLQlpbnQgbGVmdDsKLQl1bnNpZ25lZCB2b2x1bWU7CisJdW5zaWduZWQgaW50IGxlZnQsIHZvbHVtZTsKIAlpZiAoZ2V0X3VzZXIodm9sdW1lLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJCkBAIC00NzEsMTAgKzQ3MCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF92b2x1bWVfc3RlcmVvKHVuc2lnbmVkIF9fdXNlciAqcCwgaW50ICphbGVmdCwgaW50ICphcmlnaHQpCitzdGF0aWMgaW50IHNldF92b2x1bWVfc3RlcmVvKHVuc2lnbmVkIF9fdXNlciAqcCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICphbGVmdCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICphcmlnaHQpCiB7Ci0JaW50IGxlZnQsIHJpZ2h0OwotCXVuc2lnbmVkIHZvbHVtZTsKKwl1bnNpZ25lZCBpbnQgbGVmdCwgcmlnaHQsIHZvbHVtZTsKIAlpZiAoZ2V0X3VzZXIodm9sdW1lLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zZXF1ZW5jZXIuYyBiL3NvdW5kL29zcy9zZXF1ZW5jZXIuYwppbmRleCA1YzIxNWY3Li5jNzk4NzQ2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKKysrIGIvc291bmQvb3NzL3NlcXVlbmNlci5jCkBAIC0yMTIsNyArMjEyLDYgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGV2ZW50X3JlY1tFVl9TWl0sIGV2X2NvZGU7CiAJaW50IHAgPSAwLCBjLCBldl9zaXplOwotCWludCBlcnI7CiAJaW50IG1vZGUgPSB0cmFuc2xhdGVfbW9kZShmaWxlKTsKIAogCWRldiA9IGRldiA+PiA0OwpAQCAtMjg1LDcgKzI4NCw3IEBACiAJCXsKIAkJCWlmICghbWlkaV9vcGVuZWRbZXZlbnRfcmVjWzJdXSkKIAkJCXsKLQkJCQlpbnQgbW9kZTsKKwkJCQlpbnQgZXJyLCBtb2RlOwogCQkJCWludCBkZXYgPSBldmVudF9yZWNbMl07CiAKIAkJCQlpZiAoZGV2ID49IG1heF9taWRpZGV2IHx8IG1pZGlfZGV2c1tkZXZdPT1OVUxMKQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCmluZGV4IGU1ZDQyMzkuLjc4Y2ZiNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTEzNSw3ICsxMzUsOSBAQAogCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9VOCwgKGludCAqKWFyZyk7CiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCmluZGV4IDQxNTYyZWMuLjFlZGFiN2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKKysrIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwpAQCAtMjIwMCw3ICsyMjAwLDkgQEAKIAkJCQkgICAgc2l6ZW9mKGFiaW5mbykpID8gLUVGQVVMVCA6IDA7CiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUT0RFTEFZOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Z3c25kLmMgYi9zb3VuZC9vc3MvdndzbmQuYwppbmRleCA3OGI4YWNjLi4xODdmNzI3IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdndzbmQuYworKysgYi9zb3VuZC9vc3MvdndzbmQuYwpAQCAtMjY3Myw3ICsyNjczLDkgQEAKIAogCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoJLyogX1NJTyAgKCdQJywxNCkgKi8KIAkJREJHWCgiU05EQ1RMX0RTUF9OT05CTE9DS1xuIik7CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfUkVTRVQ6CQkvKiBfU0lPICAoJ1AnLCAwKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggNDFmODcwZi4uNjA1NWZkNiAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC05NzUsOSArOTc1LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9oYXJtb255ICpoOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2hhcm1vbnlfY3JlYXRlKGNhcmQsIHBhZGV2LCAmaCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDgyYjliZGQuLmNhMjVlNjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC00MDAsNiArNDAwLDI2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW5kaWdvZGoKIAorY29uZmlnIFNORF9JTkRJR09JT1gKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgSW5kaWdvIElPeCIKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBJbmRpZ28gSU94LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW5kaWdvaW94CisKK2NvbmZpZyBTTkRfSU5ESUdPREpYCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBESngiCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gSW5kaWdvIERKeC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2RqeAorCiBjb25maWcgU05EX0VNVTEwSzEKIAl0cmlzdGF0ZSAiRW11MTBrMSAoU0IgTGl2ZSEsIEF1ZGlneSwgRS1tdSBBUFMpIgogCXNlbGVjdCBGV19MT0FERVIKQEAgLTc0NCw3ICs3NjQsOCBAQAogCXNlbGVjdCBTTkRfT1hZR0VOX0xJQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIgYW5kIEQyWC4KKwkgIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgYW5kCisJICBFc3NlbmNlIFNUWC4KIAkgIFN1cHBvcnQgZm9yIHRoZSBIREFWMS4zIChEZWx1eGUpIGlzIHZlcnkgZXhwZXJpbWVudGFsLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggZTJiODQzYi4uOTdlZTEyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiB7IDB4NDM1MjU5NzAsIDB4ZmZmZmZmZjgsICJDUzQyMDIiLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg0MzU4NTQyMSwgMHhmZmZmZmZmZiwgIkhTRDExMjQ2IiwJCU5VTEwsCQlOVUxMIH0sCS8vIFNtYXJ0TUMgSUkKIHsgMHg0MzU4NTQyOCwgMHhmZmZmZmZmOCwgIkN4MjA0NjgiLAkJcGF0Y2hfY29uZXhhbnQsCU5VTEwgfSwgLy8gU21hcnRBTUMgZml4bWU6IHRoZSBtYXNrIG1pZ2h0IGJlIGRpZmZlcmVudAoreyAweDQzNTg1NDMwLCAweGZmZmZmZmZmLCAiQ3gyMDQ2OC0zMSIsCQlwYXRjaF9jb25leGFudCwgTlVMTCB9LAogeyAweDQzNTg1NDMxLCAweGZmZmZmZmZmLCAiQ3gyMDU1MSIsICAgICAgICAgICBwYXRjaF9jeDIwNTUxLCAgTlVMTCB9LAogeyAweDQ0NTQzMDMxLCAweGZmZmZmZmYwLCAiRFQwMzk4IiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NDU0ZDQzMjgsIDB4ZmZmZmZmZmYsICJFTTI4MDI4IiwJCU5VTEwsCQlOVUxMIH0sICAvLyBzYW1lIGFzIFRSMjgwMjg/CkBAIC0zODMsNyArMzg0LDcgQEAKIAogRVhQT1JUX1NZTUJPTChzbmRfYWM5N191cGRhdGVfYml0cyk7CiAKLS8qIG5vIGxvY2sgdmVyc2lvbiAtIHNlZSBzbmRfYWM5N191cGRhdF9iaXRzKCkgKi8KKy8qIG5vIGxvY2sgdmVyc2lvbiAtIHNlZSBzbmRfYWM5N191cGRhdGVfYml0cygpICovCiBpbnQgc25kX2FjOTdfdXBkYXRlX2JpdHNfbm9sb2NrKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHZhbHVlKQogewpAQCAtMTY0Myw3ICsxNjQ0LDEwIEBACiB7CiAJaW50IGVyciwgaWR4OwogCi0JLy9wcmludGsoIkFDOTdfR1BJT19DRkcgPSAleFxuIixzbmRfYWM5N19yZWFkKGFjOTcsQUM5N19HUElPX0NGRykpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIkFDOTdfR1BJT19DRkcgPSAleFxuIiwKKwkgICAgICAgc25kX2FjOTdfcmVhZChhYzk3LEFDOTdfR1BJT19DRkcpKTsKKwkqLwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19DRkcsIDB4ZmZmZiAmIH4oQUM5N19HUElPX0xJTkUxX09IKSk7CiAJc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19HUElPX1BPTEFSSVRZLCAweGZmZmYgJiB+KEFDOTdfR1BJT19MSU5FMV9PSCkpOwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19TVElDS1ksIDB4ZmZmZik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCmluZGV4IDA2MGVhNTkuLjczYjE3ZDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCkBAIC0xMjUsNiArMTI1LDggQEAKICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiUENJIFN1YnN5cyBEZXZpY2U6IDB4JTA0eFxuXG4iLAogICAgICAgICAgICAgICAgICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAorCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZsYWdzOiAleFxuIiwgYWM5Ny0+ZmxhZ3MpOworCiAJaWYgKChhYzk3LT5leHRfaWQgJiBBQzk3X0VJX1JFVl9NQVNLKSA+PSBBQzk3X0VJX1JFVl8yMykgewogCQl2YWwgPSBzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfSU5UX1BBR0lORyk7CiAJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfSU5UX1BBR0lORywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCBhN2YzOGU2Li5kMWYyNDJiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC05OTUsMTAgKzk5NSwxMCBAQAogCX0KIAogCS8qICgyKSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAJLyogWFhYIFJFVklTSVQ6IHdlIGNhbiBwcm9iYWJseSBhbGxvY2F0ZSBjaGlwIGluIHRoaXMgY2FsbCAqLwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFEMTg4OSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBbmFsb2cgRGV2aWNlcyBBRDE4ODkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYyBiL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYwppbmRleCAwZjgxOWRkLi5mZDEzNWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jCkBAIC01MSw3ICs1MSw4IEBACiAJaW50IGlkeDsKIAkKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDB4MTk7IGlkeCsrKQotCQlwcmludGsoImFrNDUzMSAweCV4OiAweCV4XG4iLCBpZHgsIGFrNDUzMS0+cmVnc1tpZHhdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFrNDUzMSAweCV4OiAweCV4XG4iLAorCQkgICAgICAgaWR4LCBhazQ1MzEtPnJlZ3NbaWR4XSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IDFhMGZkNjUuLjRlZGYyNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTIxNDIsNyArMjE0Miw3IEBACiB7CiAJaW50IGVycjsKIAotCXNuZF9hbGlfcHJpbnRrKCJyZXNvdWNlcyBhbGxvY2F0aW9uIC4uLlxuIik7CisJc25kX2FsaV9wcmludGsoInJlc291cmNlcyBhbGxvY2F0aW9uIC4uLlxuIik7CiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhjb2RlYy0+cGNpLCAiQUxJIDU0NTEiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTIxNTQsNyArMjE1NCw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWNvZGVjLT5pcnEgPSBjb2RlYy0+cGNpLT5pcnE7Ci0Jc25kX2FsaV9wcmludGsoInJlc291Y2VzIGFsbG9jYXRlZC5cbiIpOworCXNuZF9hbGlfcHJpbnRrKCJyZXNvdXJjZXMgYWxsb2NhdGVkLlxuIik7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW50IHNuZF9hbGlfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKQEAgLTIzMDcsOSArMjMwNyw5IEBACiAKIAlzbmRfYWxpX3ByaW50aygicHJvYmUgLi4uXG4iKTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2FsaV9jcmVhdGUoY2FyZCwgcGNpLCBwY21fY2hhbm5lbHMsIHNwZGlmLCAmY29kZWMpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczMwMC5jIGIvc291bmQvcGNpL2FsczMwMC5jCmluZGV4IDhkZjY4MjQuLjAwOWI0YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHMzMDAuYworKysgYi9zb3VuZC9wY2kvYWxzMzAwLmMKQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgREVCVUdfUExBWV9SRUMJMAogCiAjaWYgREVCVUdfQ0FMTFMKLSNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxscyhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxscyhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpIHByaW50ayhLRVJOX0VSUiAiLS0+ICVzXG4iLCBfX2Z1bmNfXykKICNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKSBwcmludGsoS0VSTl9FUlIgIjwtLSAlc1xuIiwgX19mdW5jX18pCiAjZWxzZQpAQCAtODEyLDEwICs4MTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNoaXBfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IGJhNTcwMDUuLjU0MmEwYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtODg5LDEyICs4ODksMTMgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpLCBQQ0lfQ09NTUFORCwgd29yZCB8IFBDSV9DT01NQU5EX0lPKTsKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIAotCQkJICAgIHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8pOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIAorCQkJICAgICAgc2l6ZW9mKCphY2FyZCkgLyogcHJpdmF0ZV9kYXRhOiBhY2FyZCAqLywKKwkJCSAgICAgICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaSk7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCAyMjZmZTgyLi45Y2U4NTQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0xNjQ1LDkgKzE2NDUsOSBAQAogCXN0cnVjdCBhdGlpeHAgKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsIHNwZGlmX2FjbGluayA/ICJBVElJWFAiIDogIkFUSUlYUC1TUERNQSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBVEkgSVhQIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKaW5kZXggMGU2ZTVjYy4uYzMxMzZjYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwpAQCAtMTI4OCw5ICsxMjg4LDkgQEAKIAlzdHJ1Y3QgYXRpaXhwX21vZGVtICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQVRJSVhQLU1PREVNIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkFUSSBJWFAgTW9kZW0iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCmluZGV4IGEzNmQ0ZDEuLjllYzEyMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwpAQCAtMjUwLDkgKzI1MCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAkvLyAoMikKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8vICgzKQogCWlmICgoZXJyID0gc25kX3ZvcnRleF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYwppbmRleCA2NDk4NDllLi5mNGFhOGZmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYwpAQCAtNDYyLDkgKzQ2MiwxMCBAQAogLyogUmVzZXQgU2luZ2xlIEEzRCBzb3VyY2UuICovCiBzdGF0aWMgdm9pZCBhM2RzcmNfWmVyb1N0YXRlKGEzZHNyY190ICogYSkKIHsKLQotCS8vcHJpbnRrKCJ2b3J0ZXg6IFplcm9TdGF0ZSBzbGljZTogJWQsIHNvdXJjZSAlZFxuIiwgYS0+c2xpY2UsIGEtPnNvdXJjZSk7Ci0KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFplcm9TdGF0ZSBzbGljZTogJWQsIHNvdXJjZSAlZFxuIiwKKwkgICAgICAgYS0+c2xpY2UsIGEtPnNvdXJjZSk7CisJKi8KIAlhM2RzcmNfU2V0QXRtb3NTdGF0ZShhLCAwLCAwLCAwLCAwKTsKIAlhM2RzcmNfU2V0SHJ0ZlN0YXRlKGEsIEEzZEhyaXJaZXJvcywgQTNkSHJpclplcm9zKTsKIAlhM2RzcmNfU2V0SXRkRGxpbmUoYSwgQTNkSXRkRGxpbmVaZXJvcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKaW5kZXggYjA3MGU1Ny4uMzkwNmY1YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwpAQCAtMTEzNSw3ICsxMTM1LDEwIEBACiAJCQlzbmRfcGNtX3NnYnVmX2dldF9hZGRyKGRtYS0+c3Vic3RyZWFtLCAwKSk7CiAJCWJyZWFrOwogCX0KLQkvL3ByaW50aygidm9ydGV4OiBjZmcwID0gMHgleFxudm9ydGV4OiBjZmcxPTB4JXhcbiIsIGRtYS0+Y2ZnMCwgZG1hLT5jZmcxKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IGNmZzAgPSAweCV4XG52b3J0ZXg6IGNmZzE9MHgleFxuIiwKKwkgICAgICAgZG1hLT5jZmcwLCBkbWEtPmNmZzEpOworCSovCiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFZPUlRFWF9BREJETUFfQlVGQ0ZHMCArIChhZGJkbWEgPDwgMyksIGRtYS0+Y2ZnMCk7CiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFZPUlRFWF9BREJETUFfQlVGQ0ZHMSArIChhZGJkbWEgPDwgMyksIGRtYS0+Y2ZnMSk7CiAKQEAgLTE5NTksNyArMTk2Miw3IEBACiAJCQkJCSAgQURCX0NPREVDT1VUKDAgKyA0KSk7CiAJCXZvcnRleF9jb25uZWN0aW9uX21peF9hZGIodm9ydGV4LCBlbiwgMHgxMSwgbWl4ZXJzWzNdLAogCQkJCQkgIEFEQl9DT0RFQ09VVCgxICsgNCkpOwotCQkvL3ByaW50aygiU0RBQyBkZXRlY3RlZCAiKTsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgIlNEQUMgZGV0ZWN0ZWQgIik7ICovCiAJfQogI2Vsc2UKIAkvLyBVc2UgcGxhaW4gZGlyZWN0IG91dHB1dCB0byBjb2RlYy4KQEAgLTIwMTMsNyArMjAxNiwxMSBAQAogCQkJCQlyZXNtYXBbcmVzdHlwZV0gfD0gKDEgPDwgaSk7CiAJCQkJZWxzZQogCQkJCQl2b3J0ZXgtPmRtYV9hZGJbaV0ucmVzb3VyY2VzW3Jlc3R5cGVdIHw9ICgxIDw8IGkpOwotCQkJCS8vcHJpbnRrKCJ2b3J0ZXg6IFJlc01hbmFnZXI6IHR5cGUgJWQgb3V0ICVkXG4iLCByZXN0eXBlLCBpKTsKKwkJCQkvKgorCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJ2b3J0ZXg6IFJlc01hbmFnZXI6IHR5cGUgJWQgb3V0ICVkXG4iLAorCQkJCSAgICAgICByZXN0eXBlLCBpKTsKKwkJCQkqLwogCQkJCXJldHVybiBpOwogCQkJfQogCQl9CkBAIC0yMDI0LDcgKzIwMzEsMTEgQEAKIAkJZm9yIChpID0gMDsgaSA8IHF0eTsgaSsrKSB7CiAJCQlpZiAocmVzbWFwW3Jlc3R5cGVdICYgKDEgPDwgaSkpIHsKIAkJCQlyZXNtYXBbcmVzdHlwZV0gJj0gfigxIDw8IGkpOwotCQkJCS8vcHJpbnRrKCJ2b3J0ZXg6IFJlc01hbmFnZXI6IHR5cGUgJWQgaW4gJWRcbiIscmVzdHlwZSwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIGluICVkXG4iLAorCQkJCSAgICAgICByZXN0eXBlLCBpKTsKKwkJCQkqLwogCQkJCXJldHVybiBpOwogCQkJfQogCQl9CkBAIC0yNzg5LDcgKzI4MDAsNyBAQAogewogCWludCBhLCB0aGlzXzE5NDsKIAotCWlmICgoYml0cyAhPSA4KSB8fCAoYml0cyAhPSAxNikpCisJaWYgKChiaXRzICE9IDgpICYmIChiaXRzICE9IDE2KSkKIAkJcmV0dXJuIC0xOwogCiAJc3dpdGNoIChlbmNvZCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKaW5kZXggOTc4Yjg1Ni4uMjgwNWUzNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCkBAIC0yMTMsMzggKzIxMyw1OSBAQAogCXN3aXRjaCAocmVnKSB7CiAJCS8qIFZvaWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KIAljYXNlIDA6CQkvKiBydW5uaW5nICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUlVOKHd0KSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9SVU4od3QpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9SVU4od3QpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDE6CQkvKiBwYXJhbSAwICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwwKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDApLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAwKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAyOgkJLyogcGFyYW0gMSAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMSksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwxKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMSksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMzoJCS8qIHBhcmFtIDIgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDIpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMiksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDIpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDQ6CQkvKiBwYXJhbSAzICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwzKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDMpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAzKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSA2OgkJLyogbXV0ZSAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX01VVEUod3QpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX01VVEUod3QpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9NVVRFKHd0KSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAweGI6CiAJCXsJCS8qIGRlbGF5ICovCi0JCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX0RFTEFZKHd0LDApLCAoaW50KXZhbCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkJICAgICAgIFdUX0RFTEFZKHd0LDApLCAoaW50KXZhbCk7CisJCQkqLwogCQkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX0RFTEFZKHd0LCAzKSwgdmFsKTsKIAkJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9ERUxBWSh3dCwgMiksIHZhbCk7CiAJCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfREVMQVkod3QsIDEpLCB2YWwpOwpAQCAtMjcyLDcgKzI5Myw5IEBACiAJCXJldHVybiAwOwogCQlicmVhazsKIAl9Ci0JLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBlY3gsIChpbnQpdmFsKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgZWN4LCAoaW50KXZhbCk7CisJKi8KIAlod3dyaXRlKHZvcnRleC0+bW1pbywgZWN4LCB2YWwpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCmluZGV4IGM3YzU0ZTcuLjhlZWEyOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYworKysgYi9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKQEAgLTM2OCw5ICszNjgsOSBAQAogCX0KIAogCS8qICgyKSBDcmVhdGUgY2FyZCBpbnN0YW5jZSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogKDMpIENyZWF0ZSBtYWluIGNvbXBvbmVudCAqLwogCWVyciA9IHNuZF9hdzJfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggMzMzMDA3Yy4uZTllOWI1OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0yMTEsMjUgKzIxMSwyNSBAQAogI2VuZGlmCiAKICNpZiBERUJVR19NSVhFUgotI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnbWl4ZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ21peGVyKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjaWYgREVCVUdfUExBWV9SRUMKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncGxheShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncGxheShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncGxheShmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX01JU0MKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJndGltZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3RpbWVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmd0aW1lcihmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX0dBTUUKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnZ2FtZShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnZ2FtZShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnZ2FtZShmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTIyMTYsOSArMjIxNiw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFaRjMzMjgiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXp0ZWNoIEFaRjMzMjggKFBDSTE2OCkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMWFhMWMwNC4uYTI5OTM0MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTg4OCw5ICs4ODgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2J0ODd4X2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwppbmRleCAwZTYyMjA1Li5kZjc1NzU3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCkBAIC0yNTUsNiArMjU1LDE0IEBACiAJICAgLmdwaW9fdHlwZSA9IDIsCiAJICAgLmkyY19hZGMgPSAxLAogCSAgIC5zcGlfZGFjID0gMSB9ICwKKwkvKiBHaWdhLWJ5dGUgR0EtRzE5NzVYIG1vYm8KKwkgKiBOb3ZlbGwgYm5jIzM5NTgwNworCSAqLworCS8qIEZJWE1FOiB0aGUgR1BJTyBhbmQgSTJDIHNldHRpbmcgYXJlbid0IHRlc3RlZCB3ZWxsICovCisJeyAuc2VyaWFsID0gMHgxNDU4YTAwNiwKKwkgIC5uYW1lID0gIkdpZ2EtYnl0ZSBHQS1HMTk3NVgiLAorCSAgLmdwaW9fdHlwZSA9IDEsCisJICAuaTJjX2FkYyA9IDEgfSwKIAkgLyogU2h1dHRsZSBYUEMgU0QzMVAgd2hpY2ggaGFzIGFuIG9uYm9hcmQgQ3JlYXRpdmUgTGFicwogCSAgKiBTb3VuZCBCbGFzdGVyIExpdmUhIDI0LWJpdCBFQVgKIAkgICogaGlnaC1kZWZpbml0aW9uIDcuMSBhdWRpbyBwcm9jZXNzb3IiLgpAQCAtNDA0LDcgKzQxMiw5IEBACiAJfQogCiAJdG1wID0gcmVnIDw8IDI1IHwgdmFsdWUgPDwgMTY7Ci0JLy8gc25kX3ByaW50aygiSTJDLXdyaXRlOnJlZz0weCV4LCB2YWx1ZT0weCV4XG4iLCByZWcsIHZhbHVlKTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiSTJDLXdyaXRlOnJlZz0weCV4LCB2YWx1ZT0weCV4XG4iLCByZWcsIHZhbHVlKTsKKwkqLwogCS8qIE5vdCBzdXJlIHdoYXQgdGhpcyBJMkMgY2hhbm5lbCBjb250cm9scy4gKi8KIAkvKiBzbmRfY2EwMTA2X3B0cl93cml0ZShlbXUsIEkyQ19EMCwgMCwgdG1wKTsgKi8KIApAQCAtNDIyLDcgKzQzMiw3IEBACiAJCS8qIFdhaXQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gZW5kcyAqLwogCQl3aGlsZSAoMSkgewogCQkJc3RhdHVzID0gc25kX2NhMDEwNl9wdHJfcmVhZChlbXUsIEkyQ19BLCAwKTsKLSAgICAgICAgICAgICAgICAJLy9zbmRfcHJpbnRrKCJJMkM6c3RhdHVzPTB4JXhcbiIsIHN0YXR1cyk7CisJCQkvKnNuZF9wcmludGsoS0VSTl9ERUJVRyAiSTJDOnN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOyovCiAJCQl0aW1lb3V0Kys7CiAJCQlpZiAoKHN0YXR1cyAmIEkyQ19BX0FEQ19TVEFSVCkgPT0gMCkKIAkJCQlicmVhazsKQEAgLTUyMSw3ICs1MzEsMTAgQEAKICAgICAgICAgY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogCWNoYW5uZWwtPnVzZSA9IDE7Ci0gICAgICAgIC8vcHJpbnRrKCJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkqLwogICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9jYTAxMDZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwogCWNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCkBAIC02MTQsNyArNjI3LDEwIEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2UgPSAxOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCS8qCisgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCSovCiAgICAgICAgIC8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX2NhMDEwNl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7CiAgICAgICAgIGNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCkBAIC03MDUsOSArNzIxLDIwIEBACiAJdTMyIHJlZzcxOwogCWludCBpOwogCQotICAgICAgICAvL3NuZF9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7Ci0JLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIixlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsICIKKwkJICAgImNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgIgorCQkgICAicGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCQkgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsCisJCSAgIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJICAgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsCisJCSAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIsCisJCSAgIHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIiwKKwkJICAgZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2VuZGlmIC8qIGRlYnVnICovCiAJLyogUmF0ZSBjYW4gYmUgc2V0IHBlciBjaGFubmVsLiAqLwogCS8qIHJlZzQwIGNvbnRyb2wgaG9zdCB0byBmaWZvICovCiAJLyogcmVnNzEgY29udHJvbHMgREFDIHJhdGUuICovCkBAIC03OTksOSArODI2LDIwIEBACiAJdTMyIHJlZzcxX3NldCA9IDA7CiAJdTMyIHJlZzcxOwogCQotICAgICAgICAvL3NuZF9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7Ci0JLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIixlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsICIKKwkJICAgImNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgIgorCQkgICAicGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCQkgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsCisJCSAgIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJICAgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsCisJCSAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisgICAgICAgIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCS8qIHJlZzcxIGNvbnRyb2xzIEFEQyByYXRlLiAqLwogCXN3aXRjaCAocnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC04NDYsNyArODg0LDE0IEBACiAJfQogCiAKLSAgICAgICAgLy9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgIgorCSAgICAgICAiYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkgICAgICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywKKwkgICAgICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCSAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCSovCiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCAweDEzLCBjaGFubmVsLCAwKTsKIAlzbmRfY2EwMTA2X3B0cl93cml0ZShlbXUsIENBUFRVUkVfRE1BX0FERFIsIGNoYW5uZWwsIHJ1bnRpbWUtPmRtYV9hZGRyKTsKIAlzbmRfY2EwMTA2X3B0cl93cml0ZShlbXUsIENBUFRVUkVfQlVGRkVSX1NJWkUsIGNoYW5uZWwsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk8PDE2KTsgLy8gYnVmZmVyIHNpemUgaW4gYnl0ZXMKQEAgLTg4OCwxMyArOTMzLDEzIEBACiAJCXJ1bnRpbWUgPSBzLT5ydW50aW1lOwogCQllcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCQljaGFubmVsID0gZXBjbS0+Y2hhbm5lbF9pZDsKLQkJLyogc25kX3ByaW50aygiY2hhbm5lbD0lZFxuIixjaGFubmVsKTsgKi8KKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJjaGFubmVsPSVkXG4iLCBjaGFubmVsKTsgKi8KIAkJZXBjbS0+cnVubmluZyA9IHJ1bm5pbmc7CiAJCWJhc2ljIHw9ICgweDEgPDwgY2hhbm5lbCk7CiAJCWV4dGVuZGVkIHw9ICgweDEwIDw8IGNoYW5uZWwpOwogICAgICAgICAgICAgICAgIHNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnN0cmVhbSk7CiAgICAgICAgIH0KLQkvKiBzbmRfcHJpbnRrKCJiYXNpYz0weCV4LCBleHRlbmRlZD0weCV4XG4iLGJhc2ljLCBleHRlbmRlZCk7ICovCisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJiYXNpYz0weCV4LCBleHRlbmRlZD0weCV4XG4iLGJhc2ljLCBleHRlbmRlZCk7ICovCiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC05NzIsOCArMTAxNywxMyBAQAogCXB0cj1wdHIyOwogICAgICAgICBpZiAocHRyID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQogCQlwdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JLy9wcmludGsoInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsIChpbnQpcnVudGltZS0+cmF0ZSk7Ci0KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgIgorCSAgICAgICAiYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsCisJICAgICAgIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkgICAgICAgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnJhdGUpOworCSovCiAJcmV0dXJuIHB0cjsKIH0KIApAQCAtOTk1LDggKzEwNDUsMTMgQEAKIAlwdHI9cHRyMjsKICAgICAgICAgaWYgKHB0ciA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTExODEsOCArMTIzNiwxMiBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKICAgICAgICAgc3RhdDc2ID0gc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBFWFRFTkRFRF9JTlQsIDApOwotCS8vc25kX3ByaW50aygiaW50ZXJydXB0IHN0YXR1cyA9IDB4JTA4eCwgc3RhdDc2PTB4JTA4eFxuIiwgc3RhdHVzLCBzdGF0NzYpOwotCS8vc25kX3ByaW50aygicHRyPTB4JTA4eFxuIixzbmRfY2EwMTA2X3B0cl9yZWFkKGNoaXAsIFBMQVlCQUNLX1BPSU5URVIsIDApKTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW50ZXJydXB0IHN0YXR1cyA9IDB4JTA4eCwgc3RhdDc2PTB4JTA4eFxuIiwKKwkJICAgc3RhdHVzLCBzdGF0NzYpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicHRyPTB4JTA4eFxuIiwKKwkJICAgc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBQTEFZQkFDS19QT0lOVEVSLCAwKSk7CisJKi8KICAgICAgICAgbWFzayA9IDB4MTE7IC8qIDB4MSBmb3Igb25lIGhhbGYsIDB4MTAgZm9yIHRoZSBvdGhlciBoYWxmIHBlcmlvZC4gKi8KIAlmb3IoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJcGNoYW5uZWwgPSAmKGNoaXAtPnBsYXliYWNrX2NoYW5uZWxzW2ldKTsKQEAgLTE0NzAsNyArMTUyOSw3IEBACiAJCWludCBzaXplLCBuOwogCiAJCXNpemUgPSBBUlJBWV9TSVpFKGkyY19hZGNfaW5pdCk7Ci0JCS8qIHNuZF9wcmludGsoIkkyQzphcnJheSBzaXplPTB4JXhcbiIsIHNpemUpOyAqLworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQzphcnJheSBzaXplPTB4JXhcbiIsIHNpemUpOyAqLwogCQlmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgbisrKQogCQkJc25kX2NhMDEwNl9pMmNfd3JpdGUoY2hpcCwgaTJjX2FkY19pbml0W25dWzBdLAogCQkJCQkgICAgIGkyY19hZGNfaW5pdFtuXVsxXSk7CkBAIC0xNzA3LDkgKzE3NjYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9jYTAxMDZfY3JlYXRlKGRldiwgY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggMWE3NGNhNi4uYzc4OTljMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMzI3Miw5ICszMjcyLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJCiAJc3dpdGNoIChwY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4OgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IDE5MmU3ODQuLmY2Mjg2ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQyODEuYworKysgYi9zb3VuZC9wY2kvY3M0MjgxLmMKQEAgLTgzNCw3ICs4MzQsMTEgQEAKIAlzdHJ1Y3QgY3M0MjgxX2RtYSAqZG1hID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjczQyODEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAKLQkvLyBwcmludGsoIkRDQyA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgamlmZmllcyA9ICVsaVxuIiwgc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIGRtYS0+cmVnRENDKSwgcnVudGltZS0+YnVmZmVyX3NpemUsIGppZmZpZXMpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIkRDQyA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgamlmZmllcyA9ICVsaVxuIiwKKwkgICAgICAgc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIGRtYS0+cmVnRENDKSwgcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIGppZmZpZXMpOworCSovCiAJcmV0dXJuIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0KIAkgICAgICAgc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIGRtYS0+cmVnRENDKSAtIDE7CiB9CkBAIC0xOTI1LDkgKzE5MjksOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2NzNDI4MV9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCwgZHVhbF9jb2RlY1tkZXZdKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwppbmRleCBlODc2YjMyLi5jOWIzZTNkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKQEAgLTg4LDkgKzg4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfY3M0Nnh4X2NyZWF0ZShjYXJkLCBwY2ksCiAJCQkJICAgICBleHRlcm5hbF9hbXBbZGV2XSwgdGhpbmtwYWRbZGV2XSwKIAkJCQkgICAgICZjaGlwKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCmluZGV4IDhhYjA3YWEuLjFiZTk2ZWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkgKiAgQUNTREEgPSBTdGF0dXMgRGF0YSBSZWdpc3RlciA9IDQ3NGgKIAkgKi8KICNpZiAwCi0JcHJpbnRrKCJlKSByZWcgPSAweCV4LCB2YWwgPSAweCV4LCBCQTBfQUNDQUQgPSAweCV4XG4iLCByZWcsCisJcHJpbnRrKEtFUk5fREVCVUcgImUpIHJlZyA9IDB4JXgsIHZhbCA9IDB4JXgsIEJBMF9BQ0NBRCA9IDB4JXhcbiIsIHJlZywKIAkJCXNuZF9jczQ2eHhfcGVla0JBMChjaGlwLCBCQTBfQUNTREEpLAogCQkJc25kX2NzNDZ4eF9wZWVrQkEwKGNoaXAsIEJBMF9BQ0NBRCkpOwogI2VuZGlmCkBAIC00MjgsOCArNDI4LDggQEAKIAl9CiAgIAogCWlmKHN0YXR1cyAmIFNFUkJTVF9XQlNZKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJjczQ2eHg6IGZhaWx1cmUgd2FpdGluZyBmb3IgRklGTyBjb21tYW5kIHRvIGNvbXBsZXRlXG4iKTsKLQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjczQ2eHg6IGZhaWx1cmUgd2FpdGluZyBmb3IgIgorCQkJICAgIkZJRk8gY29tbWFuZCB0byBjb21wbGV0ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmggYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaAppbmRleCAwMThhN2RlLi40ZWI1NWFhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaAorKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaApAQCAtNjIsNyArNjIsMTEgQEAKIAl1bnNpZ25lZCBpbnQgYmFuayA9IHJlZyA+PiAxNjsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcmVnICYgMHhmZmZmOwogCi0JLyppZiAoYmFuayA9PSAwKSBwcmludGsoInNuZF9jczQ2eHhfcG9rZTogJTA0WCAtICUwOFhcbiIscmVnID4+IDIsdmFsKTsgKi8KKwkvKgorCWlmIChiYW5rID09IDApCisJCXByaW50ayhLRVJOX0RFQlVHICJzbmRfY3M0Nnh4X3Bva2U6ICUwNFggLSAlMDhYXG4iLAorCQkgICAgICAgcmVnID4+IDIsdmFsKTsKKwkqLwogCXdyaXRlbCh2YWwsIGNoaXAtPnJlZ2lvbi5pZHhbYmFuaysxXS5yZW1hcF9hZGRyICsgb2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzMC5jIGIvc291bmQvcGNpL2NzNTUzMC5jCmluZGV4IDZkZWE1YjUuLmRjNDY0MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzAuYworKysgYi9zb3VuZC9wY2kvY3M1NTMwLmMKQEAgLTI1OCwxMCArMjU4LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfY3M1NTMwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwppbmRleCA4MjZlNmRlLi5jODllZDFmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYworKysgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jczU1MzVhdWRpb19pbnRlcnJ1cHQsCiAJCQlJUlFGX1NIQVJFRCwgIkNTNTUzNSBBdWRpbyIsIGNzNTUzNWF1KSkgewotCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBzbmRmYWlsOwogCX0KQEAgLTM1Myw5ICszNTMsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2NzNTUzNWF1ZGlvX2NyZWF0ZShjYXJkLCBwY2ksICZjczU1MzVhdSkpIDwgMCkKIAkJZ290byBwcm9iZWZhaWxfb3V0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZSBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUKaW5kZXggN2I1NzZhZS4uMTM2MWRlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw4IEBACiBzbmQtaW5kaWdvLW9ianMgOj0gaW5kaWdvLm8KIHNuZC1pbmRpZ29pby1vYmpzIDo9IGluZGlnb2lvLm8KIHNuZC1pbmRpZ29kai1vYmpzIDo9IGluZGlnb2RqLm8KK3NuZC1pbmRpZ29pb3gtb2JqcyA6PSBpbmRpZ29pb3gubworc25kLWluZGlnb2RqeC1vYmpzIDo9IGluZGlnb2RqeC5vCiAKIG9iai0kKENPTkZJR19TTkRfREFSTEEyMCkgKz0gc25kLWRhcmxhMjAubwogb2JqLSQoQ09ORklHX1NORF9HSU5BMjApICs9IHNuZC1naW5hMjAubwpAQCAtMjgsMyArMzAsNSBAQAogb2JqLSQoQ09ORklHX1NORF9JTkRJR08pICs9IHNuZC1pbmRpZ28ubwogb2JqLSQoQ09ORklHX1NORF9JTkRJR09JTykgKz0gc25kLWluZGlnb2lvLm8KIG9iai0kKENPTkZJR19TTkRfSU5ESUdPREopICs9IHNuZC1pbmRpZ29kai5vCitvYmotJChDT05GSUdfU05EX0lORElHT0lPWCkgKz0gc25kLWluZGlnb2lveC5vCitvYmotJChDT05GSUdfU05EX0lORElHT0RKWCkgKz0gc25kLWluZGlnb2RqeC5vCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCmluZGV4IDQxN2UyNWEuLjU3OTY3ZTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCkBAIC01Niw3ICs1Niw3IEBACiAJfQogCiAJY2hpcC0+Y29tbV9wYWdlLT5lM2dfZnJxX3JlZ2lzdGVyID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigoRTNHX01BR0lDX05VTUJFUiAvIDQ4MDAwKSAtIDIpOworCQljcHVfdG9fbGUzMigoRTNHX01BR0lDX05VTUJFUiAvIDQ4MDAwKSAtIDIpOwogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCmluZGV4IDhkYmM1YzQuLmRhMjA2NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwpAQCAtOTUwLDYgKzk1MCw4IEBACiAJQ29udHJvbCBpbnRlcmZhY2UKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisKIC8qKioqKioqKioqKioqKioqKioqIFBDTSBvdXRwdXQgdm9sdW1lICoqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNuZF9lY2hvX291dHB1dF9nYWluX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQpAQCAtMTAwMSwxOCArMTAwMyw2IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLSNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCi0vKiBPbiBWbWl4ZXIgY2FyZHMgdGhpcyBvbmUgY29udHJvbHMgdGhlIGxpbmUtb3V0IHZvbHVtZSAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4gX19kZXZpbml0ZGF0YSA9IHsKLQkubmFtZSA9ICJMaW5lIFBsYXliYWNrIFZvbHVtZSIsCi0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCi0JLmluZm8gPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvLAotCS5nZXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9nZXQsCi0JLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKLQkudGx2ID0gey5wID0gZGJfc2NhbGVfb3V0cHV0X2dhaW59LAotfTsKLSNlbHNlCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fcGNtX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xMDIyLDYgKzEwMTIsNyBAQAogCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCiAJLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKIH07CisKICNlbmRpZgogCiAKQEAgLTE5OTcsOSArMTk4OCw5IEBACiAKIAlERV9JTklUKCgiRWNob2F1ZGlvIGRyaXZlciBzdGFydGluZy4uLlxuIikpOwogCWkgPSAwOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOwogCkBAIC0yMDM3LDggKzIwMjgsNiBAQAogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgogCXNuZF9lY2hvX3ZtaXhlci5jb3VudCA9IG51bV9waXBlc19vdXQoY2hpcCkgKiBudW1fYnVzc2VzX291dChjaGlwKTsKLQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fbGluZV9vdXRwdXRfZ2FpbiwgY2hpcCkpKSA8IDApCi0JCWdvdG8gY3RsX2Vycm9yOwogCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob192bWl4ZXIsIGNoaXApKSkgPCAwKQogCQlnb3RvIGN0bF9lcnJvcjsKICNlbHNlCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAppbmRleCAxYzg4ZTA1Li5mOTQ5MGFlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKQEAgLTE4OSw2ICsxODksOSBAQAogI2RlZmluZSBJTkRJR08JCQkweDAwOTAKICNkZWZpbmUgSU5ESUdPX0lPCQkweDAwYTAKICNkZWZpbmUgSU5ESUdPX0RKCQkweDAwYjAKKyNkZWZpbmUgREM4CQkJMHgwMGMwCisjZGVmaW5lIElORElHT19JT1gJCTB4MDBkMAorI2RlZmluZSBJTkRJR09fREpYCQkweDAwZTAKICNkZWZpbmUgRUNITzNHCQkJMHgwMTAwCiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKaW5kZXggYzM3MzZiYi4uZTMyYTc0OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCkBAIC00MCw4ICs0MCw3IEBACiAJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQogCQlyZXR1cm4gLUVJTzsKIAotCWNoaXAtPmNvbW1fcGFnZS0+ZXh0X2JveF9zdGF0dXMgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEUzR19BU0lDX05PVF9MT0FERUQpOworCWNoaXAtPmNvbW1fcGFnZS0+ZXh0X2JveF9zdGF0dXMgPSBjcHVfdG9fbGUzMihFM0dfQVNJQ19OT1RfTE9BREVEKTsKIAljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOwogCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKIAlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVEVTVF9BU0lDKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKaW5kZXggYmUwZTE4MS4uNGRmNTFlZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKQEAgLTkyNiwxMSArOTI2LDExIEBACiAKIAkvKiBJbml0IHRoZSBjb21tIHBhZ2UgKi8KIAljaGlwLT5jb21tX3BhZ2UtPmNvbW1fc2l6ZSA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKKwkJY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKIAljaGlwLT5jb21tX3BhZ2UtPmhhbmRzaGFrZSA9IDB4ZmZmZmZmZmY7CiAJY2hpcC0+Y29tbV9wYWdlLT5taWRpX291dF9mcmVlX2NvdW50ID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKLQljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMig0NDEwMCk7CisJCWNwdV90b19sZTMyKERTUF9NSURJX09VVF9GSUZPX1NJWkUpOworCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMig0NDEwMCk7CiAJY2hpcC0+c2FtcGxlX3JhdGUgPSA0NDEwMDsKIAogCS8qIFNldCBsaW5lIGxldmVscyBzbyB3ZSBkb24ndCBibGFzdCBhbnkgaW5wdXRzIG9uIHN0YXJ0dXAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmgKaW5kZXggZTM1MmYzYS4uY2I3ZDc1YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmgKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmgKQEAgLTU3Niw4ICs1NzYsMTMgQEAKICNkZWZpbmUgRTNHX0FTSUNfTk9UX0xPQURFRAkJMHhmZmZmCiAjZGVmaW5lIEUzR19CT1hfVFlQRV9NQVNLCQkweGYwCiAKLSNkZWZpbmUgRVhUXzNHQk9YX05DCQkJMHgwMQotI2RlZmluZSBFWFRfM0dCT1hfTk9UX1NFVAkJMHgwMgorLyogSW5kaWdvIGV4cHJlc3MgY29udHJvbCByZWdpc3RlciB2YWx1ZXMgKi8KKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfMzIwMDAJCTB4MDIKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfNDQxMDAJCTB4MDEKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfNDgwMDAJCTB4MDAKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVECTB4MTAKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfUVVBRF9TUEVFRAkweDA0CisjZGVmaW5lIElORElHT19FWFBSRVNTX0NMT0NLX01BU0sJMHgxNwogCiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCmluZGV4IGRiNmM5NTIuLjNmMWU3NDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCkBAIC0yMDgsMTAgKzIwOCwxMCBAQAogCURFX0FDVCgoInNldF9wcm9mZXNzaW9uYWxfc3BkaWYgJWRcbiIsIHByb2YpKTsKIAlpZiAocHJvZikKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAllbHNlCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgJj0KLQkJCX5fX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBwcm9mOwogCXJldHVybiB1cGRhdGVfZmxhZ3MoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCmluZGV4IGYwNWUzOWYuLjBiMmNkOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiBhbGwgdmNoYW5uZWxzIGFyZSByb3V0ZWQKLQl0byB0aGUgc3RlcmVvIG91dHB1dCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiNjI1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSkKK3sKKwl1MzIgY2xvY2ssIGNvbnRyb2xfcmVnLCBvbGRfY29udHJvbF9yZWc7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJb2xkX2NvbnRyb2xfcmVnID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyKTsKKwljb250cm9sX3JlZyA9IG9sZF9jb250cm9sX3JlZyAmIH5JTkRJR09fRVhQUkVTU19DTE9DS19NQVNLOworCisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSAzMjAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU18zMjAwMDsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180NDEwMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180ODAwMDsKKwkJYnJlYWs7CisJY2FzZSA2NDAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU18zMjAwMHxJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQ7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDQxMDB8SU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVEOworCQlicmVhazsKKwljYXNlIDk2MDAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ4MDAwfElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29udHJvbF9yZWcgfD0gY2xvY2s7CisJaWYgKGNvbnRyb2xfcmVnICE9IG9sZF9jb250cm9sX3JlZykgeworCQljaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIgPSBjcHVfdG9fbGUzMihjb250cm9sX3JlZyk7CisJCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9DTE9DS1MpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRoaXMgZnVuY3Rpb24gcm91dGVzIHRoZSBzb3VuZCBmcm9tIGEgdmlydHVhbCBjaGFubmVsIHRvIGEgcmVhbCBvdXRwdXQgKi8KK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsIHUxNiBwaXBlLAorCQkJICAgaW50IGdhaW4pCit7CisJaW50IGluZGV4OworCisJaWYgKHNuZF9CVUdfT04ocGlwZSA+PSBudW1fcGlwZXNfb3V0KGNoaXApIHx8CisJCSAgICAgICBvdXRwdXQgPj0gbnVtX2J1c3Nlc19vdXQoY2hpcCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlwLT52bWl4ZXJfZ2FpbltvdXRwdXRdW3BpcGVdID0gZ2FpbjsKKwlpbmRleCA9IG91dHB1dCAqIG51bV9waXBlc19vdXQoY2hpcCkgKyBwaXBlOworCWNoaXAtPmNvbW1fcGFnZS0+dm1peGVyW2luZGV4XSA9IGdhaW47CisKKwlERV9BQ1QoKCJzZXRfdm1peGVyX2dhaW46IHBpcGUgJWQsIG91dCAlZCA9ICVkXG4iLCBwaXBlLCBvdXRwdXQsIGdhaW4pKTsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRlbGwgdGhlIERTUCB0byByZWFkIGFuZCB1cGRhdGUgdmlydHVhbCBtaXhlciBsZXZlbHMgaW4gY29tbSBwYWdlLiAqLworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19TRVRfVk1JWEVSX0dBSU4pOworfQorCisKKworc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworfQorCisKKworLyogVGhlIEluZGlnb0lPIGhhcyBubyBBU0lDLiBKdXN0IGRvIG5vdGhpbmcgKi8KK3N0YXRpYyBpbnQgbG9hZF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwppbmRleCA5MDczMGE1Li4wODM5MjkxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKQEAgLTYzLDE4ICs2Myw2IEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBEZWZhdWx0IHJvdXRpbmcgb2YgdGhlIHZpcnR1YWwgY2hhbm5lbHM6IHZjaGFubmVscyAwLTMgYW5kCi0JdmNoYW5uZWxzIDQtNyBhcmUgcm91dGVkIHRvIHJlYWwgY2hhbm5lbHMgMC00ICovCi0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDAsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAxLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgMiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDMsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA0LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDYsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA3LCAwKTsKLQllcnIgPSB1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDgyZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqICBBTFNBIGRyaXZlciBmb3IgRWNob2F1ZGlvIHNvdW5kY2FyZHMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNkZWZpbmUgSU5ESUdPX0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9JTkRJR09fREpYCisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkluZGlnbyBESngiCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVVBFUl9JTlRFUkxFQVZFCisjZGVmaW5lIEVDSE9DQVJEX0hBU19WTUlYRVIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JOAkvKiAwICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JOAkvKiAwICovCisjZGVmaW5lIFBYX05VTQkJOAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogNCAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTQKKworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiZWEvbG9hZGVyX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9pbmRpZ29fZGp4X2RzcC5mdyIpOworCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfSU5ESUdPX0RKWF9EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19kanhfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEUwLCAwLCAwLCAwfSwJLyogSW5kaWdvIERKeCovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzk2MDAwLAorCS5yYXRlX21pbiA9IDMyMDAwLAorCS5yYXRlX21heCA9IDk2MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA0LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCit9OworCisjaW5jbHVkZSAiaW5kaWdvZGp4X2RzcC5jIgorI2luY2x1ZGUgImluZGlnb19leHByZXNzX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW8uYyIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5MWZjMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LAorCQkJICAgdTE2IHBpcGUsIGludCBnYWluKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIEluZGlnbyBESnhcbiIpKTsKKwlpZiAoc25kX0JVR19PTigoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSAhPSBJTkRJR09fREpYKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fREpYX0RTUF07CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYwppbmRleCBhN2UwOWVjLi4wNjA0YzhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKQEAgLTYzLDE4ICs2Myw2IEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBEZWZhdWx0IHJvdXRpbmcgb2YgdGhlIHZpcnR1YWwgY2hhbm5lbHM6IGFsbCB2Y2hhbm5lbHMgYXJlIHJvdXRlZAotCXRvIHRoZSBzdGVyZW8gb3V0cHV0ICovCi0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDAsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAxLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDMsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA0LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDYsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA3LCAwKTsKLQllcnIgPSB1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJlZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqICBBTFNBIGRyaXZlciBmb3IgRWNob2F1ZGlvIHNvdW5kY2FyZHMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNkZWZpbmUgSU5ESUdPX0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9JTkRJR09fSU9YCisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkluZGlnbyBJT3giCisjZGVmaW5lIEVDSE9DQVJEX0hBU19NT05JVE9SCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVVBFUl9JTlRFUkxFQVZFCisjZGVmaW5lIEVDSE9DQVJEX0hBU19WTUlYRVIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JOAkvKiAyICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JMTAJLyogMCAqLworI2RlZmluZSBQWF9OVU0JCTEwCisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfT1VUCTIJLyogMCAqLworI2RlZmluZSBCWF9BTkFMT0dfSU4JMgkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JNAkvKiAwICovCisjZGVmaW5lIEJYX05VTQkJNAorCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJlY2hvYXVkaW8uaCIKKworTU9EVUxFX0ZJUk1XQVJFKCJlYS9sb2FkZXJfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL2luZGlnb19pb3hfZHNwLmZ3Iik7CisKKyNkZWZpbmUgRldfMzYxX0xPQURFUgkJMAorI2RlZmluZSBGV19JTkRJR09fSU9YX0RTUAkxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0geworCXswLCAibG9hZGVyX2RzcC5mdyJ9LAorCXswLCAiaW5kaWdvX2lveF9kc3AuZncifQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwRDAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gSU94ICovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzk2MDAwLAorCS5yYXRlX21pbiA9IDMyMDAwLAorCS5yYXRlX21heCA9IDk2MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA4LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCit9OworCisjaW5jbHVkZSAiaW5kaWdvaW94X2RzcC5jIgorI2luY2x1ZGUgImluZGlnb19leHByZXNzX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW8uYyIKKwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveF9kc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzU3NTIxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDUKK0FsbCByaWdodHMgcmVzZXJ2ZWQKK3d3dy5lY2hvYXVkaW8uY29tCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsCisJCQkgICB1MTYgcGlwZSwgaW50IGdhaW4pOworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gSW5kaWdvIElPeFxuIikpOworCWlmIChzbmRfQlVHX09OKChzdWJkZXZpY2VfaWQgJiAweGZmZjApICE9IElORElHT19JT1gpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IGluaXRfZHNwX2NvbW1fcGFnZShjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlERV9JTklUKCgiaW5pdF9odyAtIGNvdWxkIG5vdCBpbml0aWFsaXplIERTUCBjb21tIHBhZ2VcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOworCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19JT1hfRFNQXTsKKwkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKKwkgICB3b3JrcyBPSyAqLworCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKKwljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9IEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworCisJZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKKworCWVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwppbmRleCBlZGU3NWM2Li44Mzc1MGU5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCkBAIC0yODQsMTAgKzI4NCwxMCBAQAogCURFX0FDVCgoInNldF9wcm9mZXNzaW9uYWxfc3BkaWYgJWRcbiIsIHByb2YpKTsKIAlpZiAocHJvZikKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAllbHNlCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgJj0KLQkJCX5fX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBwcm9mOwogCXJldHVybiB1cGRhdGVfZmxhZ3MoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jCmluZGV4IDIyNzM4NjYuLjU1MTQwNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jCkBAIC02OSwxOCArNjksNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkpCiAJCXJldHVybiBlcnI7CiAKLQkvKiBEZWZhdWx0IHJvdXRpbmcgb2YgdGhlIHZpcnR1YWwgY2hhbm5lbHM6IHZjaGFubmVscyAwLTMgZ28gdG8gYW5hbG9nCi0Jb3V0cHV0cyBhbmQgdmNoYW5uZWxzIDQtNyBnbyB0byBTL1BESUYgb3V0cHV0cyAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjIyLDEwICsyMTAsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYwppbmRleCA3N2JmMmE4Li5hOTUzZDE0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYwpAQCAtNDQsMTAgKzQ0LDEwIEBACiAJaWYgKGVuYWJsZSkgewogCQljaGlwLT5tdGNfc3RhdGUgPSBNSURJX0lOX1NUQVRFX05PUk1BTDsKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX01JRElfSU5QVVQpOwogCX0gZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKIAogCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKIAlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9GTEFHUyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggODM1NGMxYS4uYzdmM2I5OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtMTE0LDkgKzExNCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmIChtYXhfYnVmZmVyX3NpemVbZGV2XSA8IDMyKQogCQltYXhfYnVmZmVyX3NpemVbZGV2XSA9IDMyOwogCWVsc2UgaWYgKG1heF9idWZmZXJfc2l6ZVtkZXZdID4gMTAyNCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYwppbmRleCAwZTY0OWRjLi43ZWY5NDlkOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9jYWxsYmFjay5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYwpAQCAtMTAzLDcgKzEwMywxMCBAQAogCQkJaW50IGNoOwogCQkJdnAgPSAmZW11LT52b2ljZXNbYmVzdFtpXS52b2ljZV07CiAJCQlpZiAoKGNoID0gdnAtPmNoKSA8IDApIHsKLQkJCQkvL3ByaW50aygic3ludGhfZ2V0X3ZvaWNlOiBjaCA8IDAgKCVkKSA/PyIsIGkpOworCQkJCS8qCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAic3ludGhfZ2V0X3ZvaWNlOiBjaCA8IDAgKCVkKSA/PyIsIGkpOworCQkJCSovCiAJCQkJY29udGludWU7CiAJCQl9CiAJCQl2cC0+ZW11LT5udW1fdm9pY2VzLS07CkBAIC0zMzUsNyArMzM4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZW1lbS0+bWFwX2xvY2tlZCsrOwogCWlmIChzbmRfZW11MTBrMV9tZW1ibGtfbWFwKGh3LCBlbWVtKSA8IDApIHsKLQkJLy8gcHJpbnRrKCJlbXU6IGNhbm5vdCBtYXAhXG4iKTsKKwkJLyogcHJpbnRrKEtFUk5fRVJSICJlbXU6IGNhbm5vdCBtYXAhXG4iKTsgKi8KIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1hcHBlZF9vZmZzZXQgPSBzbmRfZW11MTBrMV9tZW1ibGtfb2Zmc2V0KGVtZW0pID4+IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX21haW4uYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCmluZGV4IDEwMWExYzEuLmYxOGJkNjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jCkBAIC03MTEsOCArNzExLDcgQEAKIHN0YXRpYyBpbnQgZW11MTAxMF9maXJtd2FyZV90aHJlYWQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSA9IGRhdGE7Ci0JaW50IHRtcCwgdG1wMjsKLQlpbnQgcmVnOworCXUzMiB0bXAsIHRtcDIsIHJlZzsKIAlpbnQgZXJyOwogCiAJZm9yICg7OykgewpAQCAtNzU4LDcgKzc1Nyw4IEBACiAJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZW11MTAxMDogQXVkaW8gRG9jayBGaXJtd2FyZSBsb2FkZWRcbiIpOwogCQkJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0RPQ0tfTUFKT1JfUkVWLCAmdG1wKTsKIAkJCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9ET0NLX01JTk9SX1JFViwgJnRtcDIpOwotCQkJc25kX3ByaW50aygiQXVkaW8gRG9jayB2ZXI6JWQuJWRcbiIsIHRtcCwgdG1wMik7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiQXVkaW8gRG9jayB2ZXI6ICV1LiV1XG4iLAorCQkJCSAgIHRtcCwgdG1wMik7CiAJCQkvKiBTeW5jIGNsb2NraW5nIGJldHdlZW4gMTAxMCBhbmQgRG9jayAqLwogCQkJLyogQWxsb3cgRExMIHRvIHNldHRsZSAqLwogCQkJbXNsZWVwKDEwKTsKQEAgLTgwNCw4ICs4MDQsNyBAQAogc3RhdGljIGludCBzbmRfZW11MTBrMV9lbXUxMDEwX2luaXQoc3RydWN0IHNuZF9lbXUxMGsxICplbXUpCiB7CiAJdW5zaWduZWQgaW50IGk7Ci0JaW50IHRtcCwgdG1wMjsKLQlpbnQgcmVnOworCXUzMiB0bXAsIHRtcDIsIHJlZzsKIAlpbnQgZXJyOwogCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gTlVMTDsKIApAQCAtODg3LDcgKzg4Niw3IEBACiAJc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwMTA6IEhhbmEgRmlybXdhcmUgbG9hZGVkXG4iKTsKIAlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfSEFOQV9NQUpPUl9SRVYsICZ0bXApOwogCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9IQU5BX01JTk9SX1JFViwgJnRtcDIpOwotCXNuZF9wcmludGsoImVtdTEwMTA6IEhhbmEgdmVyc2lvbjogJWQuJWRcbiIsIHRtcCwgdG1wMik7CisJc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwMTA6IEhhbmEgdmVyc2lvbjogJXUuJXVcbiIsIHRtcCwgdG1wMik7CiAJLyogRW5hYmxlIDQ4Vm9sdCBwb3dlciB0byBBdWRpbyBEb2NrICovCiAJc25kX2VtdTEwMTBfZnBnYV93cml0ZShlbXUsIEVNVV9IQU5BX0RPQ0tfUFdSLCBFTVVfSEFOQV9ET0NLX1BXUl9PTik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IDVmZjRkYmIuLjMxNTQyYWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtMTU0NCw5ICsxNTQ0LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9lbXUxMGsxeF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKaW5kZXggN2RiYTA4Zi4uMTkxZTFjZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCkBAIC0xNTE5LDcgKzE1MTksNyBAQAogCS8qIEFfUFVUX1NURVJFT19PVVRQVVQoQV9FWFRPVVRfRlJPTlRfTCwgQV9FWFRPVVRfRlJPTlRfUiwgcGxheWJhY2sgKyBTTkRfRU1VMTBLMV9QTEFZQkFDS19DSEFOTkVMUyk7ICovCiAJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmVtdV9tb2RlbCkgewogCQkvKiBFTVUxMDEwIE91dHB1dHMgZnJvbSBQQ00gRnJvbnQsIFJlYXIsIENlbnRlciwgTEZFLCBTaWRlICovCi0JCXNuZF9wcmludGsoIkVNVSBvdXRwdXRzIG9uXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVNVSBvdXRwdXRzIG9uXG4iKTsKIAkJZm9yICh6ID0gMDsgeiA8IDg7IHorKykgewogCQkJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmNhMDEwOF9jaGlwKSB7CiAJCQkJQV9PUChpY29kZSwgJnB0ciwgaUFDQzMsIEEzX0VNVTMyT1VUKHopLCBBX0dQUihwbGF5YmFjayArIFNORF9FTVUxMEsxX1BMQVlCQUNLX0NIQU5ORUxTICsgeiksIEFfQ18wMDAwMDAwMCwgQV9DXzAwMDAwMDAwKTsKQEAgLTE1NjcsNyArMTU2Nyw3IEBACiAKIAlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+ZW11X21vZGVsKSB7CiAJCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5jYTAxMDhfY2hpcCkgewotCQkJc25kX3ByaW50aygiRU1VMiBpbnB1dHMgb25cbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVNVTIgaW5wdXRzIG9uXG4iKTsKIAkJCWZvciAoeiA9IDA7IHogPCAweDEwOyB6KyspIHsKIAkJCQlzbmRfZW11MTBrMV9hdWRpZ3lfZHNwX2NvbnZlcnRfMzJfdG9fMngxNiggaWNvZGUsICZwdHIsIHRtcCwgCiAJCQkJCQkJCQliaXRfc2hpZnRlcjE2LApAQCAtMTU3NSwxMCArMTU3NSwxMyBAQAogCQkJCQkJCQkJQV9GWEJVUzIoeioyKSApOwogCQkJfQogCQl9IGVsc2UgewotCQkJc25kX3ByaW50aygiRU1VIGlucHV0cyBvblxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRU1VIGlucHV0cyBvblxuIik7CiAJCQkvKiBDYXB0dXJlIDE2IChvcmlnaW5hbGx5IDgpIGNoYW5uZWxzIG9mIFMzMl9MRSBzb3VuZCAqLwogCi0JCQkvKiBwcmludGsoImVtdWZ4LmM6IGdwcj0weCV4LCB0bXA9MHgleFxuIixncHIsIHRtcCk7ICovCisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImVtdWZ4LmM6IGdwcj0weCV4LCB0bXA9MHgleFxuIiwKKwkJCSAgICAgICBncHIsIHRtcCk7CisJCQkqLwogCQkJLyogRm9yIHRoZSBFTVUxMDEwOiBIb3cgdG8gZ2V0IDMyYml0IHZhbHVlcyBmcm9tIHRoZSBEU1AuIEhpZ2ggMTZiaXRzIGludG8gTCwgbG93IDE2Yml0cyBpbnRvIFIuICovCiAJCQkvKiBBX1AxNlZJTigwKSBpcyBkZWxheWVkIGJ5IG9uZSBzYW1wbGUsCiAJCQkgKiBzbyBhbGwgb3RoZXIgQV9QMTZWSU4gY2hhbm5lbHMgd2lsbCBuZWVkIHRvIGFsc28gYmUgZGVsYXllZApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwppbmRleCBjZjkyNzZkLi43OGY2MmZkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwpAQCAtNDQsNyArNDQsNyBAQAogCWlmIChlcGNtLT5zdWJzdHJlYW0gPT0gTlVMTCkKIAkJcmV0dXJuOwogI2lmIDAKLQlwcmludGsoIklSUTogcG9zaXRpb24gPSAweCV4LCBwZXJpb2QgPSAweCV4LCBzaXplID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiSVJROiBwb3NpdGlvbiA9IDB4JXgsIHBlcmlvZCA9IDB4JXgsIHNpemUgPSAweCV4XG4iLAogCQkJZXBjbS0+c3Vic3RyZWFtLT5ydW50aW1lLT5ody0+cG9pbnRlcihlbXUsIGVwY20tPnN1YnN0cmVhbSksCiAJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoZXBjbS0+c3Vic3RyZWFtKSwKIAkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhlcGNtLT5zdWJzdHJlYW0pKTsKQEAgLTE0Niw3ICsxNDYsMTEgQEAKIAkJCQkJICAgICAgMSwKIAkJCQkJICAgICAgJmVwY20tPmV4dHJhKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCS8qIHByaW50aygicGNtX2NoYW5uZWxfYWxsb2M6IGZhaWxlZCBleHRyYTogdm9pY2VzPSVkLCBmcmFtZT0lZFxuIiwgdm9pY2VzLCBmcmFtZSk7ICovCisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9jaGFubmVsX2FsbG9jOiAiCisJCQkgICAgICAgImZhaWxlZCBleHRyYTogdm9pY2VzPSVkLCBmcmFtZT0lZFxuIiwKKwkJCSAgICAgICB2b2ljZXMsIGZyYW1lKTsKKwkJCSovCiAJCQlmb3IgKGkgPSAwOyBpIDwgdm9pY2VzOyBpKyspIHsKIAkJCQlzbmRfZW11MTBrMV92b2ljZV9mcmVlKGVwY20tPmVtdSwgZXBjbS0+dm9pY2VzW2ldKTsKIAkJCQllcGNtLT52b2ljZXNbaV0gPSBOVUxMOwpAQCAtNzM3LDcgKzc0MSwxMCBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9wY21fbWl4ZXIgKm1peDsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCS8qIHByaW50aygidHJpZ2dlciAtIGVtdTEwazEgPSAweCV4LCBjbWQgPSAlaSwgcG9pbnRlciA9ICVpXG4iLCAoaW50KWVtdSwgY21kLCBzdWJzdHJlYW0tPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ0cmlnZ2VyIC0gZW11MTBrMSA9IDB4JXgsIGNtZCA9ICVpLCBwb2ludGVyID0gJWlcbiIsCisJICAgICAgIChpbnQpZW11LCBjbWQsIHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSkpCisJKi8KIAlzcGluX2xvY2soJmVtdS0+cmVnX2xvY2spOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTc4Niw3ICs3OTMsMTAgQEAKIAkJLyogaG1tIHRoaXMgc2hvdWxkIGNhdXNlIGZ1bGwgYW5kIGhhbGYgZnVsbCBpbnRlcnJ1cHQgdG8gYmUgcmFpc2VkPyAqLwogCQlvdXRsKGVwY20tPmNhcHR1cmVfaXByLCBlbXUtPnBvcnQgKyBJUFIpOwogCQlzbmRfZW11MTBrMV9pbnRyX2VuYWJsZShlbXUsIGVwY20tPmNhcHR1cmVfaW50ZSk7Ci0JCS8qIHByaW50aygiYWRjY3IgPSAweCV4LCBhZGNicyA9IDB4JXhcbiIsIGVwY20tPmFkY2NyLCBlcGNtLT5hZGNicyk7ICovCisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJhZGNjciA9IDB4JXgsIGFkY2JzID0gMHgleFxuIiwKKwkJICAgICAgIGVwY20tPmFkY2NyLCBlcGNtLT5hZGNicyk7CisJCSovCiAJCXN3aXRjaCAoZXBjbS0+dHlwZSkgewogCQljYXNlIENBUFRVUkVfQUM5N0FEQzoKIAkJCXNuZF9lbXUxMGsxX3B0cl93cml0ZShlbXUsIEFEQ0NSLCAwLCBlcGNtLT5jYXB0dXJlX2NyX3ZhbCk7CkBAIC04NTcsNyArODY3LDExIEBACiAJCQlwdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJfQogI2VuZGlmCi0JLyogcHJpbnRrKCJwdHIgPSAweCV4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleFxuIiwgcHRyLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInB0ciA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4XG4iLAorCSAgICAgICBwdHIsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC0xNTQ2LDcgKzE1NjAsMTEgQEAKIAkJCQkJCSAgIHVuc2lnbmVkIGludCBjb3VudCwKIAkJCQkJCSAgIHVuc2lnbmVkIGludCB0cmFtX3NoaWZ0KQogewotCS8qIHByaW50aygidHJhbV9wb2tlMTogZHN0X2xlZnQgPSAweCVwLCBkc3RfcmlnaHQgPSAweCVwLCBzcmMgPSAweCVwLCBjb3VudCA9IDB4JXhcbiIsIGRzdF9sZWZ0LCBkc3RfcmlnaHQsIHNyYywgY291bnQpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInRyYW1fcG9rZTE6IGRzdF9sZWZ0ID0gMHglcCwgZHN0X3JpZ2h0ID0gMHglcCwgIgorCSAgICAgICAic3JjID0gMHglcCwgY291bnQgPSAweCV4XG4iLAorCSAgICAgICBkc3RfbGVmdCwgZHN0X3JpZ2h0LCBzcmMsIGNvdW50KTsKKwkqLwogCWlmICgodHJhbV9zaGlmdCAmIDEpID09IDApIHsKIAkJd2hpbGUgKGNvdW50LS0pIHsKIAkJCSpkc3RfbGVmdC0tID0gKnNyYysrOwpAQCAtMTYyMyw3ICsxNjQxLDEyIEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY20gKnBjbSA9ICZlbXUtPmZ4ODAxMC5wY21bc3Vic3RyZWFtLT5udW1iZXJdOwogCXVuc2lnbmVkIGludCBpOwogCQotCS8qIHByaW50aygicHJlcGFyZTogZXRyYW1fcGFnZXMgPSAweCVwLCBkbWFfYXJlYSA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCAoMHgleClcbiIsIGVtdS0+Zng4MDEwLmV0cmFtX3BhZ2VzLCBydW50aW1lLT5kbWFfYXJlYSwgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIDw8IDIpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInByZXBhcmU6IGV0cmFtX3BhZ2VzID0gMHglcCwgZG1hX2FyZWEgPSAweCV4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXggKDB4JXgpXG4iLAorCSAgICAgICBlbXUtPmZ4ODAxMC5ldHJhbV9wYWdlcywgcnVudGltZS0+ZG1hX2FyZWEsCisJICAgICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5idWZmZXJfc2l6ZSA8PCAyKTsKKwkqLwogCW1lbXNldCgmcGNtLT5wY21fcmVjLCAwLCBzaXplb2YocGNtLT5wY21fcmVjKSk7CiAJcGNtLT5wY21fcmVjLmh3X2J1ZmZlcl9zaXplID0gcGNtLT5idWZmZXJfc2l6ZSAqIDI7IC8qIGJ5dGUgc2l6ZSAqLwogCXBjbS0+cGNtX3JlYy5zd19idWZmZXJfc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvaW8uYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMKaW5kZXggYjVhODAyYi4uNGJmYzMxZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvaW8uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9pby5jCkBAIC0yMjYsNyArMjI2LDkgQEAKIAkJCQlicmVhazsKIAogCQkJaWYgKHRpbWVvdXQgPiAxMDAwKSB7Ci0gICAgICAgICAgICAgICAgCQlzbmRfcHJpbnRrKCJlbXUxMGsxOkkyQzp0aW1lb3V0IHN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgImVtdTEwazE6STJDOnRpbWVvdXQgc3RhdHVzPTB4JXhcbiIsCisJCQkJCSAgIHN0YXR1cyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwppbmRleCA3NDlhMjFiLi5lNjE3YWNhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfcGNtICplcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogICAKIAlpZiAoZXBjbSkgewotICAgICAgICAJLy9zbmRfcHJpbnRrKCJlcGNtIGZyZWU6ICVwXG4iLCBlcGNtKTsKKyAgICAgICAgCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBmcmVlOiAlcFxuIiwgZXBjbSk7ICovCiAJCWtmcmVlKGVwY20pOwogCX0KIH0KQEAgLTE4MywxNCArMTgzLDE2IEBACiAJaW50IGVycjsKIAogCWVwY20gPSBremFsbG9jKHNpemVvZigqZXBjbSksIEdGUF9LRVJORUwpOwotICAgICAgICAvL3NuZF9wcmludGsoImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOworICAgICAgICAvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOyAqLwogCiAJaWYgKGVwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZXBjbS0+ZW11ID0gZW11OwogCWVwY20tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7Ci0gIAorCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwKKwkJICAgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7CisJKi8KIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBlcGNtOwogCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9wMTZ2X3BjbV9mcmVlX3N1YnN0cmVhbTsKICAgCkBAIC0yMDAsMTAgKzIwMiwxNSBAQAogICAgICAgICBjaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAgICAgICAgIGNoYW5uZWwtPnVzZT0xOwotCS8vc25kX3ByaW50aygicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKLSAgICAgICAgLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKLSAgICAgICAgLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7Ci0gICAgICAgIGNoYW5uZWwtPmVwY209ZXBjbTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLAorCQkgICBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOworCXByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworI2VuZGlmIC8qIGRlYnVnICovCisJLyogY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OyAqLworCWNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKIApAQCAtMjI0LDE0ICsyMzEsMTYgQEAKIAlpbnQgZXJyOwogCiAJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7Ci0JLy9zbmRfcHJpbnRrKCJlcGNtIGtjYWxsb2M6ICVwXG4iLCBlcGNtKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOyAqLwogCiAJaWYgKGVwY20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZXBjbS0+ZW11ID0gZW11OwogCWVwY20tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKLQkvL3NuZF9wcmludGsoImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLCBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKLQorCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGRldmljZT0lZCwgY2hhbm5lbF9pZD0lZFxuIiwKKwkJICAgc3Vic3RyZWFtLT5wY20tPmRldmljZSwgY2hhbm5lbF9pZCk7CisJKi8KIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBlcGNtOwogCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9wMTZ2X3BjbV9mcmVlX3N1YnN0cmVhbTsKICAgCkBAIC0yNDEsMTAgKzI1MCwxNSBAQAogCWNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2U9MTsKLQkvL3NuZF9wcmludGsoInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7Ci0JLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKLQkvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKLQljaGFubmVsLT5lcGNtPWVwY207CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwKKwkJICAgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLworCS8qIGNoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsgKi8KKwljaGFubmVsLT5lcGNtID0gZXBjbTsKIAlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zMzQsOSArMzQ4LDE5IEBACiAJaW50IGk7CiAJdTMyIHRtcDsKIAkKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOwotICAgICAgICAvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIixydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOwotCS8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsZW11LT5wMTZ2X2J1ZmZlci5hZGRyLCBlbXUtPnAxNnZfYnVmZmVyLmFyZWEsIGVtdS0+cDE2dl9idWZmZXIuYnl0ZXMpOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsICIKKwkJICAgImZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCAiCisJCSAgICJwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkJICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywKKwkJICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCQkgICBydW50aW1lLT5wZXJpb2RzLCBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+cDE2dl9idWZmZXIuYWRkciwgZW11LT5wMTZ2X2J1ZmZlci5hcmVhLAorCQkgICBlbXUtPnAxNnZfYnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCXRtcCA9IHNuZF9lbXUxMGsxX3B0cl9yZWFkKGVtdSwgQV9TUERJRl9TQU1QTEVSQVRFLCBjaGFubmVsKTsKICAgICAgICAgc3dpdGNoIChydW50aW1lLT5yYXRlKSB7CiAJY2FzZSA0NDEwMDoKQEAgLTM3OSw3ICs0MDMsMTUgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCBjaGFubmVsID0gc3Vic3RyZWFtLT5wY20tPmRldmljZSAtIGVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0OwogCXUzMiB0bXA7Ci0JLy9wcmludGsoInByZXBhcmUgY2FwdHVyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwcmVwYXJlIGNhcHR1cmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsICIKKwkgICAgICAgImZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsICIKKwkgICAgICAgImZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkgICAgICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywKKwkgICAgICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCSAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCSovCiAJdG1wID0gc25kX2VtdTEwazFfcHRyX3JlYWQoZW11LCBBX1NQRElGX1NBTVBMRVJBVEUsIGNoYW5uZWwpOwogICAgICAgICBzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtNDU5LDEzICs0OTEsMTMgQEAKIAkJcnVudGltZSA9IHMtPnJ1bnRpbWU7CiAJCWVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCWNoYW5uZWwgPSBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLWVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0OwotCQkvL3NuZF9wcmludGsoInAxNnYgY2hhbm5lbD0lZFxuIixjaGFubmVsKTsKKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJwMTZ2IGNoYW5uZWw9JWRcbiIsIGNoYW5uZWwpOyAqLwogCQllcGNtLT5ydW5uaW5nID0gcnVubmluZzsKIAkJYmFzaWMgfD0gKDB4MTw8Y2hhbm5lbCk7CiAJCWludGUgfD0gKElOVEUyX1BMQVlCQUNLX0NIXzBfTE9PUDw8Y2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vic3RyZWFtKTsKICAgICAgICAgfQotCS8vc25kX3ByaW50aygiYmFzaWM9MHgleCwgaW50ZT0weCV4XG4iLGJhc2ljLCBpbnRlKTsKKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImJhc2ljPTB4JXgsIGludGU9MHgleFxuIiwgYmFzaWMsIGludGUpOyAqLwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtNTU4LDggKzU5MCwxMyBAQAogCQlwdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ1ZmZlciBjYXB0dXJlIGxpbWl0ZWQhXG4iKTsKIAl9Ci0JLy9wcmludGsoInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsIChpbnQpcnVudGltZS0+cmF0ZSk7Ci0KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgIgorCSAgICAgICAiYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsCisJICAgICAgIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkgICAgICAgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnJhdGUpOworCSovCiAJcmV0dXJuIHB0cjsKIH0KIApAQCAtNTkyLDcgKzYyOSwxMCBAQAogCS8vIHJlbGVhc2UgdGhlIGRhdGEKIAlpZiAoY2hpcC0+cDE2dl9idWZmZXIuYXJlYSkgewogCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJmNoaXAtPnAxNnZfYnVmZmVyKTsKLQkJLy9zbmRfcHJpbnRrKCJwZXJpb2QgbGFibGVzIGZyZWU6ICVwXG4iLCAmY2hpcC0+cDE2dl9idWZmZXIpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgInBlcmlvZCBsYWJsZXMgZnJlZTogJXBcbiIsCisJCQkgICAmY2hpcC0+cDE2dl9idWZmZXIpOworCQkqLwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYwNCw3ICs2NDQsNyBAQAogCWludCBlcnI7CiAgICAgICAgIGludCBjYXB0dXJlPTE7CiAgIAotCS8vc25kX3ByaW50aygic25kX3AxNnZfcGNtIGNhbGxlZC4gZGV2aWNlPSVkXG4iLCBkZXZpY2UpOworCS8qIHNuZF9wcmludGsoIktFUk5fREVCVUcgc25kX3AxNnZfcGNtIGNhbGxlZC4gZGV2aWNlPSVkXG4iLCBkZXZpY2UpOyAqLwogCWVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0ID0gZGV2aWNlOwogCWlmIChycGNtKQogCQkqcnBjbSA9IE5VTEw7CkBAIC02MzEsNyArNjcxLDEwIEBACiAJCQkJCQkJIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCAKIAkJCQkJCQkgKCg2NTUzNiAtIDY0KSAqIDgpLCAoKDY1NTM2IC0gNjQpICogOCkpKSA8IDApIAogCQkJcmV0dXJuIGVycjsKLQkJLy9zbmRfcHJpbnRrKCJwcmVhbGxvY2F0ZSBwbGF5YmFjayBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAicHJlYWxsb2NhdGUgcGxheWJhY2sgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCSovCiAJfQogCiAJZm9yIChzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW07IApAQCAtNjQyLDcgKzY4NSwxMCBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGVtdS0+cGNpKSwgCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1NTM2IC0gNjQsIDY1NTM2IC0gNjQpKSA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQkvL3NuZF9wcmludGsoInByZWFsbG9jYXRlIGNhcHR1cmUgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkJICAgInByZWFsbG9jYXRlIGNhcHR1cmUgc3Vic3RyZWFtOiBlcnI9JWRcbiIsIGVycik7CisJCSovCiAJfQogICAKIAlpZiAocnBjbSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMgYi9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jCmluZGV4IGQ3MzAwYTEuLjIwYjhkYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYwpAQCAtNTMsNyArNTMsMTAgQEAKIAkqcnZvaWNlID0gTlVMTDsKIAlmaXJzdF92b2ljZSA9IGxhc3Rfdm9pY2UgPSAwOwogCWZvciAoaSA9IGVtdS0+bmV4dF9mcmVlX3ZvaWNlLCBqID0gMDsgaiA8IE5VTV9HIDsgaSArPSBudW1iZXIsIGogKz0gbnVtYmVyKSB7Ci0JCS8vIHByaW50aygiaSAlZCBqICVkIG5leHQgZnJlZSAlZCFcbiIsIGksIGosIGVtdS0+bmV4dF9mcmVlX3ZvaWNlKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgImkgJWQgaiAlZCBuZXh0IGZyZWUgJWQhXG4iLAorCQkgICAgICAgaSwgaiwgZW11LT5uZXh0X2ZyZWVfdm9pY2UpOworCQkqLwogCQlpICU9IE5VTV9HOwogCiAJCS8qIHN0ZXJlbyB2b2ljZXMgbXVzdCBiZSBldmVuL29kZCAqLwpAQCAtNzEsNyArNzQsNyBAQAogCQkJfQogCQl9CiAJCWlmICghc2tpcCkgewotCQkJLy8gcHJpbnRrKCJhbGxvY2F0ZWQgdm9pY2UgJWRcbiIsIGkpOworCQkJLyogcHJpbnRrKEtFUk5fREVCVUcgImFsbG9jYXRlZCB2b2ljZSAlZFxuIiwgaSk7ICovCiAJCQlmaXJzdF92b2ljZSA9IGk7CiAJCQlsYXN0X3ZvaWNlID0gKGkgKyBudW1iZXIpICUgTlVNX0c7CiAJCQllbXUtPm5leHRfZnJlZV92b2ljZSA9IGxhc3Rfdm9pY2U7CkBAIC04NCw3ICs4NywxMCBAQAogCQogCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCQl2b2ljZSA9ICZlbXUtPnZvaWNlc1soZmlyc3Rfdm9pY2UgKyBpKSAlIE5VTV9HXTsKLQkJLy8gcHJpbnRrKCJ2b2ljZSBhbGxvYyAtICVpLCAlaSBvZiAlaVxuIiwgdm9pY2UtPm51bWJlciwgaWR4LWZpcnN0X3ZvaWNlKzEsIG51bWJlcik7CisJCS8qCisJCXByaW50ayhrRVJOX0RFQlVHICJ2b2ljZSBhbGxvYyAtICVpLCAlaSBvZiAlaVxuIiwKKwkJICAgICAgIHZvaWNlLT5udW1iZXIsIGlkeC1maXJzdF92b2ljZSsxLCBudW1iZXIpOworCQkqLwogCQl2b2ljZS0+dXNlID0gMTsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgRU1VMTBLMV9QQ006CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCA5YmY5NTM2Li4xOGY0ZDFlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTU4NCw3ICs1ODQsOCBAQAogCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWUgPSBqaWZmaWVzICsgSFogLyAxMDsKIAogI2lmIDAKLQlwcmludGsoIkNPREVDIFdSSVRFOiByZWcgPSAweCV4LCB2YWwgPSAweCV4ICgweCV4KSwgY3JlZyA9IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIkNPREVDIFdSSVRFOiByZWcgPSAweCV4LCB2YWwgPSAweCV4ICgweCV4KSwgY3JlZyA9IDB4JXhcbiIsCiAJICAgICAgIHJlZywgdmFsLCBFU18xMzcwX0NPREVDX1dSSVRFKHJlZywgdmFsKSwgRVNfUkVHKGVuc29uaXEsIDEzNzBfQ09ERUMpKTsKICNlbmRpZgogCWRvIHsKQEAgLTI0MDksOSArMjQxMCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfZW5zb25pcV9jcmVhdGUoY2FyZCwgcGNpLCAmZW5zb25pcSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IDRjZDlhMWZhLi5kZDYzYjEzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTM4LmMKKysrIGIvc291bmQvcGNpL2VzMTkzOC5jCkBAIC0xNjczLDE4ICsxNjczLDIyIEBACiAKIAlzdGF0dXMgPSBpbmIoU0xJT19SRUcoY2hpcCwgSVJRQ09OVFJPTCkpOwogI2lmIDAKLQlwcmludGsoIkVzMTkzOGRlYnVnIC0gaW50ZXJydXB0IHN0YXR1czogPTB4JXhcbiIsIHN0YXR1cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkVzMTkzOGRlYnVnIC0gaW50ZXJydXB0IHN0YXR1czogPTB4JXhcbiIsIHN0YXR1cyk7CiAjZW5kaWYKIAkKIAkvKiBBVURJTyAxICovCiAJaWYgKHN0YXR1cyAmIDB4MTApIHsKICNpZiAwCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBpbnRlcnJ1cHRcbiIpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGNvdW50OiAldVxuIiwKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIGludGVycnVwdFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgY291bnQ6ICV1XG4iLAogCQkgICAgICAgaW53KFNMRE1fUkVHKGNoaXAsIERNQUNPVU5UKSkpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGJhc2U6ICV1XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIGJhc2U6ICV1XG4iLAogCQkgICAgICAgaW5sKFNMRE1fUkVHKGNoaXAsIERNQUFERFIpKSk7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgc3RhdHVzOiAweCV4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIERNQUMgRE1BIHN0YXR1czogMHgleFxuIiwKIAkJICAgICAgIGlubChTTERNX1JFRyhjaGlwLCBETUFTVEFUVVMpKSk7CiAjZW5kaWYKIAkJLyogY2xlYXIgaXJxICovCkBAIC0xNjk5LDEwICsxNzAzLDEzIEBACiAJLyogQVVESU8gMiAqLwogCWlmIChzdGF0dXMgJiAweDIwKSB7CiAjaWYgMAotICAgICAgICAgICAgICAgIHByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgaW50ZXJydXB0XG4iKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBjb3VudDogJXVcbiIsCisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBpbnRlcnJ1cHRcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGNvdW50OiAldVxuIiwKIAkJICAgICAgIGludyhTTElPX1JFRyhjaGlwLCBBVURJTzJETUFDT1VOVCkpKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBiYXNlOiAldVxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBETUFDIERNQSBiYXNlOiAldVxuIiwKIAkJICAgICAgIGlubChTTElPX1JFRyhjaGlwLCBBVURJTzJETUFBRERSKSkpOwogCiAjZW5kaWYKQEAgLTE3OTksOSArMTgwNiw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgNTsgaWR4KyspIHsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIGlkeCkgPT0gMCB8fAogCQkgICAgIShwY2lfcmVzb3VyY2VfZmxhZ3MocGNpLCBpZHgpICYgSU9SRVNPVVJDRV9JTykpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBlOWMzNzk0Li5kYzk3ZTgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0yNjQ1LDkgKzI2NDUsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogICAgICAgICAgICAgICAgIAogCWlmICh0b3RhbF9idWZzaXplW2Rldl0gPCAxMjgpCiAJCXRvdGFsX2J1ZnNpemVbZGV2XSA9IDEyODsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggYzEyOWY5ZS4uNjBjZGI5ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTE0NjgsOSArMTQ2OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX2ZtODAxX2NyZWF0ZShjYXJkLCBwY2ksIHRlYTU3NXhfdHVuZXJbZGV2XSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwppbmRleCA5NjBmZDc5Li40ZGU1YmFjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCkBAIC0xMzgsNiArMTM4LDcgQEAKIAogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShiZWVwLT5kZXYpOwogCQlrZnJlZShiZWVwKTsKKwkJY29kZWMtPmJlZXAgPSBOVUxMOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaAppbmRleCBiOTY3OWYwLi41MWJmNmE1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBuaWQpOwogdm9pZCBzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZWxzZQotI2RlZmluZSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZSguLi4pCisjZGVmaW5lIHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKC4uLikJCTAKICNkZWZpbmUgc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoLi4uKQogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IGQwM2Y5OTIuLmE0ZTVlNTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtNjQ3LDkgKzY0Nyw5IEBACiAKIAl0b3RhbF9ub2RlcyA9IHNuZF9oZGFfZ2V0X3N1Yl9ub2Rlcyhjb2RlYywgQUNfTk9ERV9ST09ULCAmbmlkKTsKIAlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbm9kZXM7IGkrKywgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IGZ1bmM7Ci0JCWZ1bmMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX0ZVTkNUSU9OX1RZUEUpOwotCQlzd2l0Y2ggKGZ1bmMgJiAweGZmKSB7CisJCWNvZGVjLT5mdW5jdGlvbl9pZCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLAorCQkJCQkJQUNfUEFSX0ZVTkNUSU9OX1RZUEUpICYgMHhmZjsKKwkJc3dpdGNoIChjb2RlYy0+ZnVuY3Rpb25faWQpIHsKIAkJY2FzZSBBQ19HUlBfQVVESU9fRlVOQ1RJT046CiAJCQljb2RlYy0+YWZnID0gbmlkOwogCQkJYnJlYWs7CkBAIC02ODIsMTEgKzY4MiwxNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogcmVhZCBhbGwgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgYW5kIHNhdmUgY29kZWMtPmluaXRfcGlucyAqLworc3RhdGljIGludCByZWFkX3Bpbl9kZWZhdWx0cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwloZGFfbmlkX3QgbmlkID0gY29kZWMtPnN0YXJ0X25pZDsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX25vZGVzOyBpKyssIG5pZCsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisJCXVuc2lnbmVkIGludCB3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKKwkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gKHdjYXBzICYgQUNfV0NBUF9UWVBFKSA+PgorCQkJCUFDX1dDQVBfVFlQRV9TSElGVDsKKwkJaWYgKHdpZF90eXBlICE9IEFDX1dJRF9QSU4pCisJCQljb250aW51ZTsKKwkJcGluID0gc25kX2FycmF5X25ldygmY29kZWMtPmluaXRfcGlucyk7CisJCWlmICghcGluKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXBpbi0+bmlkID0gbmlkOworCQlwaW4tPmNmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJfQorCXJldHVybiAwOworfQorCisvKiBsb29rIHVwIHRoZSBnaXZlbiBwaW4gY29uZmlnIGxpc3QgYW5kIHJldHVybiB0aGUgaXRlbSBtYXRjaGluZyB3aXRoIE5JRCAqLworc3RhdGljIHN0cnVjdCBoZGFfcGluY2ZnICpsb29rX3VwX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJIHN0cnVjdCBzbmRfYXJyYXkgKmFycmF5LAorCQkJCQkgaGRhX25pZF90IG5pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oYXJyYXksIGkpOworCQlpZiAocGluLT5uaWQgPT0gbmlkKQorCQkJcmV0dXJuIHBpbjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIHdyaXRlIGEgY29uZmlnIHZhbHVlIGZvciB0aGUgZ2l2ZW4gTklEICovCitzdGF0aWMgdm9pZCBzZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNmZykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCArIGksCisJCQkJICAgIGNmZyAmIDB4ZmYpOworCQljZmcgPj49IDg7CisJfQorfQorCisvKiBzZXQgdGhlIGN1cnJlbnQgcGluIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIGdpdmVuIE5JRC4KKyAqIHRoZSB2YWx1ZSBpcyBjYWNoZWQsIGFuZCByZWFkIHZpYSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoKQorICovCitpbnQgc25kX2hkYV9hZGRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2FycmF5ICpsaXN0LAorCQkgICAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNmZykKK3sKKwlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOworCXVuc2lnbmVkIGludCBvbGRjZmc7CisKKwlvbGRjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsIGxpc3QsIG5pZCk7CisJaWYgKCFwaW4pIHsKKwkJcGluID0gc25kX2FycmF5X25ldyhsaXN0KTsKKwkJaWYgKCFwaW4pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcGluLT5uaWQgPSBuaWQ7CisJfQorCXBpbi0+Y2ZnID0gY2ZnOworCisJLyogY2hhbmdlIG9ubHkgd2hlbiBuZWVkZWQ7IGUuZy4gaWYgdGhlIHBpbmNmZyBpcyBhbHJlYWR5IHByZXNlbnQKKwkgKiBpbiB1c2VyX3BpbnNbXSwgZG9uJ3Qgd3JpdGUgaXQKKwkgKi8KKwljZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CisJaWYgKG9sZGNmZyAhPSBjZmcpCisJCXNldF9waW5jZmcoY29kZWMsIG5pZCwgY2ZnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCSAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNmZykKK3sKKwlyZXR1cm4gc25kX2hkYV9hZGRfcGluY2ZnKGNvZGVjLCAmY29kZWMtPmRyaXZlcl9waW5zLCBuaWQsIGNmZyk7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcpOworCisvKiBnZXQgdGhlIGN1cnJlbnQgcGluIGNvbmZpZyB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcGluIE5JRCAqLwordW5zaWduZWQgaW50IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOworCisjaWZkZWYgQ09ORklHX1NORF9IREFfSFdERVAKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIG5pZCk7CisJaWYgKHBpbikKKwkJcmV0dXJuIHBpbi0+Y2ZnOworI2VuZGlmCisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIG5pZCk7CisJaWYgKHBpbikKKwkJcmV0dXJuIHBpbi0+Y2ZnOworCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCAmY29kZWMtPmluaXRfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcpOworCisvKiByZXN0b3JlIGFsbCBjdXJyZW50IHBpbiBjb25maWdzICovCitzdGF0aWMgdm9pZCByZXN0b3JlX3BpbmNmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5pbml0X3BpbnMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmluaXRfcGlucywgaSk7CisJCXNldF9waW5jZmcoY29kZWMsIHBpbi0+bmlkLAorCQkJICAgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4tPm5pZCkpOworCX0KK30KIAogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKIHN0YXRpYyB2b2lkIGZyZWVfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSk7CiAKKy8qIHJlc3RvcmUgdGhlIGluaXRpYWwgcGluIGNmZ3MgYW5kIHJlbGVhc2UgYWxsIHBpbmNmZyBsaXN0cyAqLworc3RhdGljIHZvaWQgcmVzdG9yZV9pbml0X3BpbmNmZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogZmlyc3QgZnJlZSBkcml2ZXJfcGlucyBhbmQgdXNlcl9waW5zLCB0aGVuIGNhbGwgcmVzdG9yZV9waW5jZmcKKwkgKiBzbyB0aGF0IG9ubHkgdGhlIHZhbHVlcyBpbiBpbml0X3BpbnMgYXJlIHJlc3RvcmVkCisJICovCisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5kcml2ZXJfcGlucyk7CisjaWZkZWYgQ09ORklHX1NORF9IREFfSFdERVAKKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPnVzZXJfcGlucyk7CisjZW5kaWYKKwlyZXN0b3JlX3BpbmNmZ3MoY29kZWMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aW5pdF9waW5zKTsKK30KKwogLyoKICAqIGNvZGVjIGRlc3RydWN0b3IKICAqLwpAQCAtNjk0LDYgKzgyMyw3IEBACiB7CiAJaWYgKCFjb2RlYykKIAkJcmV0dXJuOworCXJlc3RvcmVfaW5pdF9waW5jZmdzKGNvZGVjKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmY29kZWMtPnBvd2VyX3dvcmspOwogCWZsdXNoX3dvcmtxdWV1ZShjb2RlYy0+YnVzLT53b3JrcSk7CkBAIC03MTIsNiArODQyLDkgQEAKIAlrZnJlZShjb2RlYyk7CiB9CiAKK3N0YXRpYyB2b2lkIGhkYV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBmZywKKwkJCQl1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUpOworCiAvKioKICAqIHNuZF9oZGFfY29kZWNfbmV3IC0gY3JlYXRlIGEgSERBIGNvZGVjCiAgKiBAYnVzOiB0aGUgYnVzIHRvIGFzc2lnbgpAQCAtNzUxLDYgKzg4NCw4IEBACiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5hbXBfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2FtcF9pbmZvKSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2NhY2hlX2hlYWQpKTsKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPm1peGVycywgc2l6ZW9mKHN0cnVjdCBzbmRfa2NvbnRyb2wgKiksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmluaXRfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+ZHJpdmVyX3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAlpZiAoY29kZWMtPmJ1cy0+bW9kZWxuYW1lKSB7CiAJCWNvZGVjLT5tb2RlbG5hbWUgPSBrc3RyZHVwKGNvZGVjLT5idXMtPm1vZGVsbmFtZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY29kZWMtPm1vZGVsbmFtZSkgewpAQCAtNzg3LDE1ICs5MjIsMTggQEAKIAlzZXR1cF9mZ19ub2Rlcyhjb2RlYyk7CiAJaWYgKCFjb2RlYy0+YWZnICYmICFjb2RlYy0+bWZnKSB7CiAJCXNuZF9wcmludGRkKCJoZGFfY29kZWM6IG5vIEFGRyBvciBNRkcgbm9kZSBmb3VuZFxuIik7Ci0JCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7Ci0JCXJldHVybiAtRU5PREVWOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChyZWFkX3dpZGdldF9jYXBzKGNvZGVjLCBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcpIDwgMCkgeworCWVyciA9IHJlYWRfd2lkZ2V0X2NhcHMoY29kZWMsIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZyk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgbWFsbG9jXG4iKTsKLQkJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CiAJfQorCWVyciA9IHJlYWRfcGluX2RlZmF1bHRzKGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKIAogCWlmICghY29kZWMtPnN1YnN5c3RlbV9pZCkgewogCQloZGFfbmlkX3QgbmlkID0gY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnOwpAQCAtODA2LDEyICs5NDQsMTUgQEAKIAlpZiAoYnVzLT5tb2RlbG5hbWUpCiAJCWNvZGVjLT5tb2RlbG5hbWUgPSBrc3RyZHVwKGJ1cy0+bW9kZWxuYW1lLCBHRlBfS0VSTkVMKTsKIAorCS8qIHBvd2VyLXVwIGFsbCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gKi8KKwloZGFfc2V0X3Bvd2VyX3N0YXRlKGNvZGVjLAorCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKKwkJCSAgICBBQ19QV1JTVF9EMCk7CisKIAlpZiAoZG9faW5pdCkgewogCQllcnIgPSBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShjb2RlYyk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3I7CiAJfQogCXNuZF9oZGFfY29kZWNfcHJvY19uZXcoY29kZWMpOwogCkBAIC04MjQsNiArOTY1LDEwIEBACiAJaWYgKGNvZGVjcCkKIAkJKmNvZGVjcCA9IGNvZGVjOwogCXJldHVybiAwOworCisgZXJyb3I6CisJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19uZXcpOwogCkBAIC05MDcsNiArMTA1Miw3IEBACiAKIC8qIEZJWE1FOiBtb3JlIGJldHRlciBoYXNoIGtleT8gKi8KICNkZWZpbmUgSERBX0hBU0hfS0VZKG5pZCxkaXIsaWR4KSAodTMyKSgobmlkKSArICgoaWR4KSA8PCAxNikgKyAoKGRpcikgPDwgMjQpKQorI2RlZmluZSBIREFfSEFTSF9QSU5DQVBfS0VZKG5pZCkgKHUzMikoKG5pZCkgKyAoMHgwMiA8PCAyNCkpCiAjZGVmaW5lIElORk9fQU1QX0NBUFMJKDE8PDApCiAjZGVmaW5lIElORk9fQU1QX1ZPTChjaCkJKDEgPDwgKDEgKyAoY2gpKSkKIApAQCAtOTk3LDYgKzExNDMsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMpOwogCit1MzIgc25kX2hkYV9xdWVyeV9waW5fY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvOworCisJaW5mbyA9IGdldF9hbGxvY19hbXBfaGFzaChjb2RlYywgSERBX0hBU0hfUElOQ0FQX0tFWShuaWQpKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAwOworCWlmICghaW5mby0+aGVhZC52YWwpIHsKKwkJaW5mby0+YW1wX2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOworCQlpbmZvLT5oZWFkLnZhbCB8PSBJTkZPX0FNUF9DQVBTOworCX0KKwlyZXR1cm4gaW5mby0+YW1wX2NhcHM7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKTsKKwogLyoKICAqIHJlYWQgdGhlIGN1cnJlbnQgdm9sdW1lIHRvIGluZm8KICAqIGlmIHRoZSBjYWNoZSBleGlzdHMsIHJlYWQgdGhlIGNhY2hlIHZhbHVlLgpAQCAtMTEyMCw2ICsxMjgxLDcgQEAKIAl1MTYgbmlkID0gZ2V0X2FtcF9uaWQoa2NvbnRyb2wpOwogCXU4IGNocyA9IGdldF9hbXBfY2hhbm5lbHMoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAl1MzIgY2FwczsKIAogCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgbmlkLCBkaXIpOwpAQCAtMTEzMSw2ICsxMjkzLDggQEAKIAkJICAgICAgIGtjb250cm9sLT5pZC5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWlmIChvZnMgPCBjYXBzKQorCQljYXBzIC09IG9mczsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKIAl1aW5mby0+Y291bnQgPSBjaHMgPT0gMyA/IDIgOiAxOwogCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CkBAIC0xMTM5LDYgKzEzMDMsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvKTsKIAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorcmVhZF9hbXBfdmFsdWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJICAgICAgIGludCBjaCwgaW50IGRpciwgaW50IGlkeCwgdW5zaWduZWQgaW50IG9mcykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCXZhbCA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgY2gsIGRpciwgaWR4KTsKKwl2YWwgJj0gSERBX0FNUF9WT0xNQVNLOworCWlmICh2YWwgPj0gb2ZzKQorCQl2YWwgLT0gb2ZzOworCWVsc2UKKwkJdmFsID0gMDsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludAordXBkYXRlX2FtcF92YWx1ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJIGludCBjaCwgaW50IGRpciwgaW50IGlkeCwgdW5zaWduZWQgaW50IG9mcywKKwkJIHVuc2lnbmVkIGludCB2YWwpCit7CisJaWYgKHZhbCA+IDApCisJCXZhbCArPSBvZnM7CisJcmV0dXJuIHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgbmlkLCBjaCwgZGlyLCBpZHgsCisJCQkJCUhEQV9BTVBfVk9MTUFTSywgdmFsKTsKK30KKwogaW50IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewpAQCAtMTE0NywxNCArMTMzNywxMyBAQAogCWludCBjaHMgPSBnZXRfYW1wX2NoYW5uZWxzKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOwogCWludCBpZHggPSBnZXRfYW1wX2luZGV4KGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKIAogCWlmIChjaHMgJiAxKQotCQkqdmFscCsrID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCkKLQkJCSYgSERBX0FNUF9WT0xNQVNLOworCQkqdmFscCsrID0gcmVhZF9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgsIG9mcyk7CiAJaWYgKGNocyAmIDIpCi0JCSp2YWxwID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCkKLQkJCSYgSERBX0FNUF9WT0xNQVNLOworCQkqdmFscCA9IHJlYWRfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4LCBvZnMpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldCk7CkBAIC0xMTY3LDE4ICsxMzU2LDE3IEBACiAJaW50IGNocyA9IGdldF9hbXBfY2hhbm5lbHMoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CiAJaW50IGlkeCA9IGdldF9hbXBfaW5kZXgoa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwogCWludCBjaGFuZ2UgPSAwOwogCiAJc25kX2hkYV9wb3dlcl91cChjb2RlYyk7CiAJaWYgKGNocyAmIDEpIHsKLQkJY2hhbmdlID0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4LAotCQkJCQkJICAweDdmLCAqdmFscCk7CisJCWNoYW5nZSA9IHVwZGF0ZV9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgsIG9mcywgKnZhbHApOwogCQl2YWxwKys7CiAJfQogCWlmIChjaHMgJiAyKQotCQljaGFuZ2UgfD0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4LAotCQkJCQkJICAgMHg3ZiwgKnZhbHApOworCQljaGFuZ2UgfD0gdXBkYXRlX2FtcF92YWx1ZShjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCwgb2ZzLCAqdmFscCk7CiAJc25kX2hkYV9wb3dlcl9kb3duKGNvZGVjKTsKIAlyZXR1cm4gY2hhbmdlOwogfQpAQCAtMTE5MCw2ICsxMzc4LDcgQEAKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0gZ2V0X2FtcF9uaWQoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAl1MzIgY2FwcywgdmFsMSwgdmFsMjsKIAogCWlmIChzaXplIDwgNCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKQpAQCAtMTE5OCw2ICsxMzg3LDcgQEAKIAl2YWwyID0gKGNhcHMgJiBBQ19BTVBDQVBfU1RFUF9TSVpFKSA+PiBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUOwogCXZhbDIgPSAodmFsMiArIDEpICogMjU7CiAJdmFsMSA9IC0oKGNhcHMgJiBBQ19BTVBDQVBfT0ZGU0VUKSA+PiBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKTsKKwl2YWwxICs9IG9mczsKIAl2YWwxID0gKChpbnQpdmFsMSkgKiAoKGludCl2YWwyKTsKIAlpZiAocHV0X3VzZXIoU05EUlZfQ1RMX1RMVlRfREJfU0NBTEUsIF90bHYpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEyNjgsNyArMTQ1OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2N0bF9hZGQpOwogCi0jaWZkZWYgQ09ORklHX1NORF9IREFfUkVDT05GSUcKIC8qIENsZWFyIGFsbCBjb250cm9scyBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4gY29kZWMgKi8KIHZvaWQgc25kX2hkYV9jdGxzX2NsZWFyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTI3OSw5ICsxNDY4LDUyIEBACiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5taXhlcnMpOwogfQogCi12b2lkIHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCisvKiBwc2V1ZG8gZGV2aWNlIGxvY2tpbmcKKyAqIHRvZ2dsZSBjYXJkLT5zaHV0ZG93biB0byBhbGxvdy9kaXNhbGxvdyB0aGUgZGV2aWNlIGFjY2VzcyAoYXMgYSBoYWNrKQorICovCitzdGF0aWMgaW50IGhkYV9sb2NrX2RldmljZXMoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogewotCWludCBpOworCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJaWYgKGNhcmQtPnNodXRkb3duKSB7CisJCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNhcmQtPnNodXRkb3duID0gMTsKKwlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhkYV91bmxvY2tfZGV2aWNlcyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwljYXJkLT5zaHV0ZG93biA9IDA7CisJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOworfQorCitpbnQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjb2RlYy0+YnVzLT5jYXJkOworCWludCBpLCBwY207CisKKwlpZiAoaGRhX2xvY2tfZGV2aWNlcyhjYXJkKSA8IDApCisJCXJldHVybiAtRUJVU1k7CisJLyogY2hlY2sgd2hldGhlciB0aGUgY29kZWMgaXNuJ3QgdXNlZCBieSBhbnkgbWl4ZXIgb3IgUENNIHN0cmVhbXMgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmNhcmQtPmN0bF9maWxlcykpIHsKKwkJaGRhX3VubG9ja19kZXZpY2VzKGNhcmQpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlmb3IgKHBjbSA9IDA7IHBjbSA8IGNvZGVjLT5udW1fcGNtczsgcGNtKyspIHsKKwkJc3RydWN0IGhkYV9wY20gKmNwY20gPSAmY29kZWMtPnBjbV9pbmZvW3BjbV07CisJCWlmICghY3BjbS0+cGNtKQorCQkJY29udGludWU7CisJCWlmIChjcGNtLT5wY20tPnN0cmVhbXNbMF0uc3Vic3RyZWFtX29wZW5lZCB8fAorCQkgICAgY3BjbS0+cGNtLT5zdHJlYW1zWzFdLnN1YnN0cmVhbV9vcGVuZWQpIHsKKwkJCWhkYV91bmxvY2tfZGV2aWNlcyhjYXJkKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiBPSywgbGV0IGl0IGZyZWUgKi8KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAljYW5jZWxfZGVsYXllZF93b3JrKCZjb2RlYy0+cG93ZXJfd29yayk7CkBAIC0xMjkxLDggKzE1MjMsNyBAQAogCS8qIHJlbGFzZSBQQ01zICovCiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fcGNtczsgaSsrKSB7CiAJCWlmIChjb2RlYy0+cGNtX2luZm9baV0ucGNtKSB7Ci0JCQlzbmRfZGV2aWNlX2ZyZWUoY29kZWMtPmJ1cy0+Y2FyZCwKLQkJCQkJY29kZWMtPnBjbV9pbmZvW2ldLnBjbSk7CisJCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgY29kZWMtPnBjbV9pbmZvW2ldLnBjbSk7CiAJCQljbGVhcl9iaXQoY29kZWMtPnBjbV9pbmZvW2ldLmRldmljZSwKIAkJCQkgIGNvZGVjLT5idXMtPnBjbV9kZXZfYml0cyk7CiAJCX0KQEAgLTEzMDUsMTMgKzE1MzYsMjIgQEAKIAlmcmVlX2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5hbXBfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2FtcF9pbmZvKSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2NhY2hlX2hlYWQpKTsKKwkvKiBmcmVlIG9ubHkgZHJpdmVyX3BpbnMgc28gdGhhdCBpbml0X3BpbnMgKyB1c2VyX3BpbnMgYXJlIHJlc3RvcmVkICovCisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5kcml2ZXJfcGlucyk7CisJcmVzdG9yZV9waW5jZmdzKGNvZGVjKTsKIAljb2RlYy0+bnVtX3BjbXMgPSAwOwogCWNvZGVjLT5wY21faW5mbyA9IE5VTEw7CiAJY29kZWMtPnByZXNldCA9IE5VTEw7CisJbWVtc2V0KCZjb2RlYy0+cGF0Y2hfb3BzLCAwLCBzaXplb2YoY29kZWMtPnBhdGNoX29wcykpOworCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IE5VTEw7CisJY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCA9IDA7CiAJbW9kdWxlX3B1dChjb2RlYy0+b3duZXIpOwogCWNvZGVjLT5vd25lciA9IE5VTEw7CisKKwkvKiBhbGxvdyBkZXZpY2UgYWNjZXNzIGFnYWluICovCisJaGRhX3VubG9ja19kZXZpY2VzKGNhcmQpOworCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1JFQ09ORklHICovCiAKIC8qIGNyZWF0ZSBhIHZpcnR1YWwgbWFzdGVyIGNvbnRyb2wgYW5kIGFkZCBzbGF2ZXMgKi8KIGludCBzbmRfaGRhX2FkZF92bWFzdGVyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjaGFyICpuYW1lLApAQCAtMTMzNiwxNSArMTU3NiwyMCBAQAogCQogCWZvciAocyA9IHNsYXZlczsgKnM7IHMrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICpzY3RsOwotCi0JCXNjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAqcyk7Ci0JCWlmICghc2N0bCkgewotCQkJc25kX3ByaW50ZGQoIkNhbm5vdCBmaW5kIHNsYXZlICVzLCBza2lwcGVkXG4iLCAqcyk7Ci0JCQljb250aW51ZTsKKwkJaW50IGkgPSAwOworCQlmb3IgKDs7KSB7CisJCQlzY3RsID0gX3NuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICpzLCBpKTsKKwkJCWlmICghc2N0bCkgeworCQkJCWlmICghaSkKKwkJCQkJc25kX3ByaW50ZGQoIkNhbm5vdCBmaW5kIHNsYXZlICVzLCAiCisJCQkJCQkgICAgInNraXBwZWRcbiIsICpzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKGtjdGwsIHNjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCWkrKzsKIAkJfQotCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZShrY3RsLCBzY3RsKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE5NTUsNiArMjIwMCw4IEBACiAJfQogCWZvciAoZGlnX21peCA9IGRpZ19pbl9jdGxzOyBkaWdfbWl4LT5uYW1lOyBkaWdfbWl4KyspIHsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MShkaWdfbWl4LCBjb2RlYyk7CisJCWlmICgha2N0bCkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gbmlkOwogCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGtjdGwpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTIwNzQsOCArMjMyMSw3IEBACiAJCQkJICogZG9uJ3QgcG93ZXIgZG93biB0aGUgd2lkZ2V0IGlmIGl0IGNvbnRyb2xzCiAJCQkJICogZWFwZCBhbmQgRUFQRF9CVExFTkFCTEUgaXMgc2V0LgogCQkJCSAqLwotCQkJCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLAotCQkJCQkJCSAgICBBQ19QQVJfUElOX0NBUCk7CisJCQkJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAkJCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX0VBUEQpIHsKIAkJCQkJaW50IGVhcGQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsCiAJCQkJCQluaWQsIDAsCkBAIC0yMTQ0LDYgKzIzOTAsNyBAQAogCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCiAJCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAogCQkJICAgIEFDX1BXUlNUX0QwKTsKKwlyZXN0b3JlX3BpbmNmZ3MoY29kZWMpOyAvKiByZXN0b3JlIGFsbCBjdXJyZW50IHBpbiBjb25maWdzICovCiAJaGRhX2V4ZWNfaW5pdF92ZXJicyhjb2RlYyk7CiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMucmVzdW1lKQogCQljb2RlYy0+cGF0Y2hfb3BzLnJlc3VtZShjb2RlYyk7CkBAIC0yMTcxLDggKzI0MTgsMTYgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29kZWMsICZidXMtPmNvZGVjX2xpc3QsIGxpc3QpIHsKIAkJaW50IGVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGJ1aWxkIGNvbnRyb2xzIgorCQkJICAgICAgICJmb3IgIyVkIChlcnJvciAlZClcbiIsIGNvZGVjLT5hZGRyLCBlcnIpOyAKKwkJCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImhkYV9jb2RlYzogY2Fubm90IHJldmVydCBjb2RlY1xuIik7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxODEsMTkgKzI0MzYsMTIgQEAKIGludCBzbmRfaGRhX2NvZGVjX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWludCBlcnIgPSAwOwotCS8qIGZha2UgYXMgaWYgYWxyZWFkeSBwb3dlcmVkLW9uICovCi0JaGRhX2tlZXBfcG93ZXJfb24oY29kZWMpOwotCS8qIHRoZW4gZmlyZSB1cCAqLwotCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCi0JCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAotCQkJICAgIEFDX1BXUlNUX0QwKTsKIAloZGFfZXhlY19pbml0X3ZlcmJzKGNvZGVjKTsKIAkvKiBjb250aW51ZSB0byBpbml0aWFsaXplLi4uICovCiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMuaW5pdCkKIAkJZXJyID0gY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlpZiAoIWVyciAmJiBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX2NvbnRyb2xzKQogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX2NvbnRyb2xzKGNvZGVjKTsKLQlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwpAQCAtMjMwNiwxMiArMjU1NCwxMSBAQAogc3RhdGljIGludCBzbmRfaGRhX3F1ZXJ5X3N1cHBvcnRlZF9wY20oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJdTMyICpyYXRlc3AsIHU2NCAqZm9ybWF0c3AsIHVuc2lnbmVkIGludCAqYnBzcCkKIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgdmFsLCBzdHJlYW1zOworCXVuc2lnbmVkIGludCBpLCB2YWwsIHdjYXBzOwogCiAJdmFsID0gMDsKLQlpZiAobmlkICE9IGNvZGVjLT5hZmcgJiYKLQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfRk9STUFUX09WUkQpKSB7CisJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJaWYgKG5pZCAhPSBjb2RlYy0+YWZnICYmICh3Y2FwcyAmIEFDX1dDQVBfRk9STUFUX09WUkQpKSB7CiAJCXZhbCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUENNKTsKIAkJaWYgKHZhbCA9PSAtMSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMjMyNSwxNSArMjU3MiwyMCBAQAogCQkJaWYgKHZhbCAmICgxIDw8IGkpKQogCQkJCXJhdGVzIHw9IHJhdGVfYml0c1tpXS5hbHNhX2JpdHM7CiAJCX0KKwkJaWYgKHJhdGVzID09IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogcmF0ZXMgPT0gMCAiCisJCQkJICAgIihuaWQ9MHgleCwgdmFsPTB4JXgsIG92cmQ9JWkpXG4iLAorCQkJCQluaWQsIHZhbCwKKwkJCQkJKHdjYXBzICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkgPyAxIDogMCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCQkqcmF0ZXNwID0gcmF0ZXM7CiAJfQogCiAJaWYgKGZvcm1hdHNwIHx8IGJwc3ApIHsKIAkJdTY0IGZvcm1hdHMgPSAwOwotCQl1bnNpZ25lZCBpbnQgYnBzOwotCQl1bnNpZ25lZCBpbnQgd2NhcHM7CisJCXVuc2lnbmVkIGludCBzdHJlYW1zLCBicHM7CiAKLQkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CiAJCXN0cmVhbXMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1NUUkVBTSk7CiAJCWlmIChzdHJlYW1zID09IC0xKQogCQkJcmV0dXJuIC1FSU87CkBAIC0yMzg2LDYgKzI2MzgsMTUgQEAKIAkJCWZvcm1hdHMgfD0gU05EUlZfUENNX0ZNVEJJVF9VODsKIAkJCWJwcyA9IDg7CiAJCX0KKwkJaWYgKGZvcm1hdHMgPT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBmb3JtYXRzID09IDAgIgorCQkJCSAgICIobmlkPTB4JXgsIHZhbD0weCV4LCBvdnJkPSVpLCAiCisJCQkJICAgInN0cmVhbXM9MHgleClcbiIsCisJCQkJCW5pZCwgdmFsLAorCQkJCQkod2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSA/IDEgOiAwLAorCQkJCQlzdHJlYW1zKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJCWlmIChmb3JtYXRzcCkKIAkJCSpmb3JtYXRzcCA9IGZvcm1hdHM7CiAJCWlmIChicHNwKQpAQCAtMjUwMSwxMiArMjc2MiwxNiBAQAogc3RhdGljIGludCBzZXRfcGNtX2RlZmF1bHRfdmFsdWVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvKQogeworCWludCBlcnI7CisKIAkvKiBxdWVyeSBzdXBwb3J0IFBDTSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbiBOSUQgKi8KIAlpZiAoaW5mby0+bmlkICYmICghaW5mby0+cmF0ZXMgfHwgIWluZm8tPmZvcm1hdHMpKSB7Ci0JCXNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShjb2RlYywgaW5mby0+bmlkLAorCQllcnIgPSBzbmRfaGRhX3F1ZXJ5X3N1cHBvcnRlZF9wY20oY29kZWMsIGluZm8tPm5pZCwKIAkJCQlpbmZvLT5yYXRlcyA/IE5VTEwgOiAmaW5mby0+cmF0ZXMsCiAJCQkJaW5mby0+Zm9ybWF0cyA/IE5VTEwgOiAmaW5mby0+Zm9ybWF0cywKIAkJCQlpbmZvLT5tYXhicHMgPyBOVUxMIDogJmluZm8tPm1heGJwcyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGluZm8tPm9wcy5vcGVuID09IE5VTEwpCiAJCWluZm8tPm9wcy5vcGVuID0gaGRhX3BjbV9kZWZhdWx0X29wZW5fY2xvc2U7CkBAIC0yNTQ5LDEzICsyODE0LDEwIEBACiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF1ZGlvX2lkeCk7IGkrKykgewogCQkJZGV2ID0gYXVkaW9faWR4W2ldOwogCQkJaWYgKCF0ZXN0X2JpdChkZXYsIGJ1cy0+cGNtX2Rldl9iaXRzKSkKLQkJCQlicmVhazsKKwkJCQlnb3RvIG9rOwogCQl9Ci0JCWlmIChpID49IEFSUkFZX1NJWkUoYXVkaW9faWR4KSkgewotCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlRvbyBtYW55IGF1ZGlvIGRldmljZXNcbiIpOwotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQkJYnJlYWs7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJUb28gbWFueSBhdWRpbyBkZXZpY2VzXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJY2FzZSBIREFfUENNX1RZUEVfU1BESUY6CiAJY2FzZSBIREFfUENNX1RZUEVfSERNSToKIAljYXNlIEhEQV9QQ01fVFlQRV9NT0RFTToKQEAgLTI1NzAsNiArMjgzMiw3IEBACiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIFBDTSB0eXBlICVkXG4iLCB0eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorIG9rOgogCXNldF9iaXQoZGV2LCBidXMtPnBjbV9kZXZfYml0cyk7CiAJcmV0dXJuIGRldjsKIH0KQEAgLTI2MDYsMjQgKzI4NjksMzYgQEAKIAkJaWYgKCFjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX3BjbXMpCiAJCQlyZXR1cm4gMDsKIAkJZXJyID0gY29kZWMtPnBhdGNoX29wcy5idWlsZF9wY21zKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBidWlsZCBQQ01zIgorCQkJICAgICAgICJmb3IgIyVkIChlcnJvciAlZClcbiIsIGNvZGVjLT5hZGRyLCBlcnIpOyAKKwkJCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImhkYV9jb2RlYzogY2Fubm90IHJldmVydCBjb2RlY1xuIik7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQogCX0KIAlmb3IgKHBjbSA9IDA7IHBjbSA8IGNvZGVjLT5udW1fcGNtczsgcGNtKyspIHsKIAkJc3RydWN0IGhkYV9wY20gKmNwY20gPSAmY29kZWMtPnBjbV9pbmZvW3BjbV07CiAJCWludCBkZXY7CiAKIAkJaWYgKCFjcGNtLT5zdHJlYW1bMF0uc3Vic3RyZWFtcyAmJiAhY3BjbS0+c3RyZWFtWzFdLnN1YnN0cmVhbXMpCi0JCQlyZXR1cm4gMDsgLyogbm8gc3Vic3RyZWFtcyBhc3NpZ25lZCAqLworCQkJY29udGludWU7IC8qIG5vIHN1YnN0cmVhbXMgYXNzaWduZWQgKi8KIAogCQlpZiAoIWNwY20tPnBjbSkgewogCQkJZGV2ID0gZ2V0X2VtcHR5X3BjbV9kZXZpY2UoY29kZWMtPmJ1cywgY3BjbS0+cGNtX3R5cGUpOwogCQkJaWYgKGRldiA8IDApCi0JCQkJcmV0dXJuIDA7CisJCQkJY29udGludWU7IC8qIG5vIGZhdGFsIGVycm9yICovCiAJCQljcGNtLT5kZXZpY2UgPSBkZXY7CiAJCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9wY20oY29kZWMsIGNwY20pOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBhdHRhY2ggIgorCQkJCSAgICAgICAiUENNIHN0cmVhbSAlZCBmb3IgY29kZWMgIyVkXG4iLAorCQkJCSAgICAgICBkZXYsIGNvZGVjLT5hZGRyKTsKKwkJCQljb250aW51ZTsgLyogbm8gZmF0YWwgZXJyb3IgKi8KKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTMzMjQsOCArMzU5OSw3IEBACiAJCWlmIChpZ25vcmVfbmlkcyAmJiBpc19pbl9uaWRfbGlzdChuaWQsIGlnbm9yZV9uaWRzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJY29udGludWU7CiAJCWxvYyA9IGdldF9kZWZjZmdfbG9jYXRpb24oZGVmX2NvbmYpOwpAQCAtMzQwMSwxMCArMzY3NSwyMiBAQAogCQkJY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0FVWF0gPSBuaWQ7CiAJCQlicmVhazsKIAkJY2FzZSBBQ19KQUNLX1NQRElGX09VVDoKLQkJCWNmZy0+ZGlnX291dF9waW4gPSBuaWQ7CisJCWNhc2UgQUNfSkFDS19ESUdfT1RIRVJfT1VUOgorCQkJaWYgKGNmZy0+ZGlnX291dHMgPj0gQVJSQVlfU0laRShjZmctPmRpZ19vdXRfcGlucykpCisJCQkJY29udGludWU7CisJCQljZmctPmRpZ19vdXRfcGluc1tjZmctPmRpZ19vdXRzXSA9IG5pZDsKKwkJCWNmZy0+ZGlnX291dF90eXBlW2NmZy0+ZGlnX291dHNdID0KKwkJCQkobG9jID09IEFDX0pBQ0tfTE9DX0hETUkpID8KKwkJCQlIREFfUENNX1RZUEVfSERNSSA6IEhEQV9QQ01fVFlQRV9TUERJRjsKKwkJCWNmZy0+ZGlnX291dHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFDX0pBQ0tfU1BESUZfSU46CisJCWNhc2UgQUNfSkFDS19ESUdfT1RIRVJfSU46CiAJCQljZmctPmRpZ19pbl9waW4gPSBuaWQ7CisJCQlpZiAobG9jID09IEFDX0pBQ0tfTE9DX0hETUkpCisJCQkJY2ZnLT5kaWdfaW5fdHlwZSA9IEhEQV9QQ01fVFlQRV9IRE1JOworCQkJZWxzZQorCQkJCWNmZy0+ZGlnX2luX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTM1MTAsNiArMzc5Niw5IEBACiAJCSAgIGNmZy0+aHBfcGluc1sxXSwgY2ZnLT5ocF9waW5zWzJdLAogCQkgICBjZmctPmhwX3BpbnNbM10sIGNmZy0+aHBfcGluc1s0XSk7CiAJc25kX3ByaW50ZCgiICAgbW9ubzogbW9ub19vdXQ9MHgleFxuIiwgY2ZnLT5tb25vX291dF9waW4pOworCWlmIChjZmctPmRpZ19vdXRzKQorCQlzbmRfcHJpbnRkKCIgICBkaWctb3V0PTB4JXgvMHgleFxuIiwKKwkJCSAgIGNmZy0+ZGlnX291dF9waW5zWzBdLCBjZmctPmRpZ19vdXRfcGluc1sxXSk7CiAJc25kX3ByaW50ZCgiICAgaW5wdXRzOiBtaWM9MHgleCwgZm1pYz0weCV4LCBsaW5lPTB4JXgsIGZsaW5lPTB4JXgsIgogCQkgICAiIGNkPTB4JXgsIGF1eD0weCV4XG4iLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSwKQEAgLTM1MTgsNiArMzgwNyw4IEBACiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9MSU5FXSwKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0NEXSwKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0FVWF0pOworCWlmIChjZmctPmRpZ19pbl9waW4pCisJCXNuZF9wcmludGQoIiAgIGRpZy1pbj0weCV4XG4iLCBjZmctPmRpZ19pbl9waW4pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAppbmRleCAwOWEzMzJhLi4yZmRlY2Y0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKQEAgLTczOSw2ICs3MzksNyBAQAogCWhkYV9uaWRfdCBtZmc7CS8qIE1GRyBub2RlIGlkICovCiAKIAkvKiBpZHMgKi8KKwl1MzIgZnVuY3Rpb25faWQ7CiAJdTMyIHZlbmRvcl9pZDsKIAl1MzIgc3Vic3lzdGVtX2lkOwogCXUzMiByZXZpc2lvbl9pZDsKQEAgLTc3OCwxMSArNzc5LDE0IEBACiAJdW5zaWduZWQgc2hvcnQgc3BkaWZfY3RsczsJLyogU1BESUYgY29udHJvbCBiaXRzICovCiAJdW5zaWduZWQgaW50IHNwZGlmX2luX2VuYWJsZTsJLyogU1BESUYgaW5wdXQgZW5hYmxlPyAqLwogCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7IC8qIG9wdGlvbmFsIGRpZ2l0YWwgb3V0IHNsYXZlIHdpZGdldHMgKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IGluaXRfcGluczsJLyogaW5pdGlhbCAoQklPUykgcGluIGNvbmZpZ3VyYXRpb25zICovCisJc3RydWN0IHNuZF9hcnJheSBkcml2ZXJfcGluczsJLyogcGluIGNvbmZpZ3Mgc2V0IGJ5IGNvZGVjIHBhcnNlciAqLwogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfSFdERVAKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcDsJLyogYXNzaWduZWQgaHdkZXAgZGV2aWNlICovCiAJc3RydWN0IHNuZF9hcnJheSBpbml0X3ZlcmJzOwkvKiBhZGRpdGlvbmFsIGluaXQgdmVyYnMgKi8KIAlzdHJ1Y3Qgc25kX2FycmF5IGhpbnRzOwkJLyogYWRkaXRpb25hbCBoaW50cyAqLworCXN0cnVjdCBzbmRfYXJyYXkgdXNlcl9waW5zOwkvKiBkZWZhdWx0IHBpbiBjb25maWdzIHRvIG92ZXJyaWRlICovCiAjZW5kaWYKIAogCS8qIG1pc2MgZmxhZ3MgKi8KQEAgLTc5MCw2ICs3OTQsOSBAQAogCQkJCQkgICAgICogc3RhdHVzIGNoYW5nZQogCQkJCQkgICAgICogKGUuZy4gUmVhbHRlayBjb2RlY3MpCiAJCQkJCSAgICAgKi8KKwl1bnNpZ25lZCBpbnQgcGluX2FtcF93b3JrYXJvdW5kOjE7IC8qIHBpbiBvdXQtYW1wIHRha2VzIGluZGV4CisJCQkJCSAgICAqIChlLmcuIENvbmV4YW50IGNvZGVjcykKKwkJCQkJICAgICovCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCXVuc2lnbmVkIGludCBwb3dlcl9vbiA6MTsJLyogY3VycmVudCAoZ2xvYmFsKSBwb3dlci1zdGF0ZSAqLwogCXVuc2lnbmVkIGludCBwb3dlcl90cmFuc2l0aW9uIDoxOyAvKiBwb3dlci1zdGF0ZSBpbiB0cmFuc2l0aW9uICovCkBAIC04NTUsNiArODYyLDE4IEBACiAjZGVmaW5lIHNuZF9oZGFfc2VxdWVuY2Vfd3JpdGVfY2FjaGUJc25kX2hkYV9zZXF1ZW5jZV93cml0ZQogI2VuZGlmCiAKKy8qIHRoZSBzdHJ1Y3QgZm9yIGNvZGVjLT5waW5fY29uZmlncyAqLworc3RydWN0IGhkYV9waW5jZmcgeworCWhkYV9uaWRfdCBuaWQ7CisJdW5zaWduZWQgaW50IGNmZzsKK307CisKK3Vuc2lnbmVkIGludCBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpOworaW50IHNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNmZyk7CitpbnQgc25kX2hkYV9hZGRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2FycmF5ICpsaXN0LAorCQkgICAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNmZyk7IC8qIGZvciBod2RlcCAqLworCiAvKgogICogTWl4ZXIKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCmluZGV4IDY1NzQ1ZTkuLjFkNTc5N2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKQEAgLTE0NCw5ICsxNDQsOSBAQAogCW5vZGUtPnR5cGUgPSAobm9kZS0+d2lkX2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKIAogCWlmIChub2RlLT50eXBlID09IEFDX1dJRF9QSU4pIHsKLQkJbm9kZS0+cGluX2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5vZGUtPm5pZCwgQUNfUEFSX1BJTl9DQVApOworCQlub2RlLT5waW5fY2FwcyA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5vZGUtPm5pZCk7CiAJCW5vZGUtPnBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5vZGUtPm5pZCwgMCwgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKLQkJbm9kZS0+ZGVmX2NmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbm9kZS0+bmlkLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCW5vZGUtPmRlZl9jZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5vZGUtPm5pZCk7CiAJfQogCiAJaWYgKG5vZGUtPndpZF9jYXBzICYgQUNfV0NBUF9PVVRfQU1QKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwppbmRleCA0YWU1MWRjLi4xYzU3NTA1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKQEAgLTMwLDYgKzMwLDEyIEBACiAjaW5jbHVkZSA8c291bmQvaGRhX2h3ZGVwLmg+CiAjaW5jbHVkZSA8c291bmQvbWlub3JzLmg+CiAKKy8qIGhpbnQgc3RyaW5nIHBhaXIgKi8KK3N0cnVjdCBoZGFfaGludCB7CisJY29uc3QgY2hhciAqa2V5OworCWNvbnN0IGNoYXIgKnZhbDsJLyogY29udGFpbmVkIGluIHRoZSBzYW1lIGFsbG9jIGFzIGtleSAqLworfTsKKwogLyoKICAqIHdyaXRlL3JlYWQgYW4gb3V0LW9mLWJvdW5kIHZlcmIKICAqLwpAQCAtOTksMTYgKzEwNSwxNyBAQAogCiBzdGF0aWMgdm9pZCBjbGVhcl9od2RlcF9lbGVtZW50cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQljaGFyICoqaGVhZDsKIAlpbnQgaTsKIAogCS8qIGNsZWFyIGluaXQgdmVyYnMgKi8KIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmluaXRfdmVyYnMpOwogCS8qIGNsZWFyIGhpbnRzICovCi0JaGVhZCA9IGNvZGVjLT5oaW50cy5saXN0OwotCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aGludHMudXNlZDsgaSsrLCBoZWFkKyspCi0JCWtmcmVlKCpoZWFkKTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmhpbnRzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmhpbnRzLCBpKTsKKwkJa2ZyZWUoaGludC0+a2V5KTsgLyogd2UgZG9uJ3QgbmVlZCB0byBmcmVlIGhpbnQtPnZhbCAqLworCX0KIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmhpbnRzKTsKKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPnVzZXJfcGlucyk7CiB9CiAKIHN0YXRpYyB2b2lkIGh3ZGVwX2ZyZWUoc3RydWN0IHNuZF9od2RlcCAqaHdkZXApCkBAIC0xNDAsNyArMTQ3LDggQEAKICNlbmRpZgogCiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3ZlcmJzLCBzaXplb2Yoc3RydWN0IGhkYV92ZXJiKSwgMzIpOwotCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aGludHMsIHNpemVvZihjaGFyICopLCAzMik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5oaW50cywgc2l6ZW9mKHN0cnVjdCBoZGFfaGludCksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPnVzZXJfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTMsNyArMTYxLDEzIEBACiAKIHN0YXRpYyBpbnQgY2xlYXJfY29kZWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRoZSBjb2RlYyBpcyBiZWluZyB1c2VkLCBjYW4ndCBmcmVlLlxuIik7CisJCXJldHVybiBlcnI7CisJfQogCWNsZWFyX2h3ZGVwX2VsZW1lbnRzKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MiwyMCArMTc2LDI5IEBACiB7CiAJaW50IGVycjsKIAorCXNuZF9oZGFfcG93ZXJfdXAoY29kZWMpOwogCXNuZF9wcmludGsoS0VSTl9JTkZPICJoZGEtY29kZWM6IHJlY29uZmlndXJpbmdcbiIpOwotCXNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJUaGUgY29kZWMgaXMgYmVpbmcgdXNlZCwgY2FuJ3QgcmVjb25maWd1cmUuXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CiAJZXJyID0gc25kX2hkYV9jb2RlY19jb25maWd1cmUoY29kZWMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycm9yOwogCS8qIHJlYnVpbGQgUENNcyAqLwogCWVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfcGNtcyhjb2RlYyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyb3I7CiAJLyogcmVidWlsZCBtaXhlcnMgKi8KIAllcnIgPSBzbmRfaGRhX2NvZGVjX2J1aWxkX2NvbnRyb2xzKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gc25kX2NhcmRfcmVnaXN0ZXIoY29kZWMtPmJ1cy0+Y2FyZCk7CisJCWdvdG8gZXJyb3I7CisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY29kZWMtPmJ1cy0+Y2FyZCk7CisgZXJyb3I6CisJc25kX2hkYV9wb3dlcl9kb3duKGNvZGVjKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtMjcxLDYgKzI5NCwyMiBAQAogQ09ERUNfQUNUSU9OX1NUT1JFKHJlY29uZmlnKTsKIENPREVDX0FDVElPTl9TVE9SRShjbGVhcik7CiAKK3N0YXRpYyBzc2l6ZV90IGluaXRfdmVyYnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCWludCBpLCBsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aW5pdF92ZXJicy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV92ZXJiICp2ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5pbml0X3ZlcmJzLCBpKTsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSIweCUwMnggMHglMDN4IDB4JTA0eFxuIiwKKwkJCQl2LT5uaWQsIHYtPnZlcmIsIHYtPnBhcmFtKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKwogc3RhdGljIHNzaXplX3QgaW5pdF92ZXJic19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0yOTMsMjYgKzMzMiwxNTcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGhpbnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCWludCBpLCBsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aGludHMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfaGludCAqaGludCA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aGludHMsIGkpOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkJIiVzID0gJXNcbiIsIGhpbnQtPmtleSwgaGludC0+dmFsKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBoZGFfaGludCAqZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aGludHMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfaGludCAqaGludCA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aGludHMsIGkpOworCQlpZiAoIXN0cmNtcChoaW50LT5rZXksIGtleSkpCisJCQlyZXR1cm4gaGludDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90cmFpbF9zcGFjZXMoY2hhciAqc3RyKQoreworCWNoYXIgKnA7CisJaWYgKCEqc3RyKQorCQlyZXR1cm47CisJcCA9IHN0ciArIHN0cmxlbihzdHIpIC0gMTsKKwlmb3IgKDsgaXNzcGFjZSgqcCk7IHAtLSkgeworCQkqcCA9IDA7CisJCWlmIChwID09IHN0cikKKwkJCXJldHVybjsKKwl9Cit9CisKKyNkZWZpbmUgTUFYX0hJTlRTCTEwMjQKKwogc3RhdGljIHNzaXplX3QgaGludHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKLQljaGFyICpwOwotCWNoYXIgKipoaW50OworCWNoYXIgKmtleSwgKnZhbDsKKwlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQ7CiAKLQlpZiAoISpidWYgfHwgaXNzcGFjZSgqYnVmKSB8fCAqYnVmID09ICcjJyB8fCAqYnVmID09ICdcbicpCisJd2hpbGUgKGlzc3BhY2UoKmJ1ZikpCisJCWJ1ZisrOworCWlmICghKmJ1ZiB8fCAqYnVmID09ICcjJyB8fCAqYnVmID09ICdcbicpCiAJCXJldHVybiBjb3VudDsKLQlwID0ga3N0cm5kdXBfbm9lb2woYnVmLCAxMDI0KTsKLQlpZiAoIXApCisJaWYgKCpidWYgPT0gJz0nKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlrZXkgPSBrc3RybmR1cF9ub2VvbChidWYsIDEwMjQpOworCWlmICgha2V5KQogCQlyZXR1cm4gLUVOT01FTTsKLQloaW50ID0gc25kX2FycmF5X25ldygmY29kZWMtPmhpbnRzKTsKKwkvKiBleHRyYWN0IGtleSBhbmQgdmFsICovCisJdmFsID0gc3RyY2hyKGtleSwgJz0nKTsKKwlpZiAoIXZhbCkgeworCQlrZnJlZShrZXkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJKnZhbCsrID0gMDsKKwl3aGlsZSAoaXNzcGFjZSgqdmFsKSkKKwkJdmFsKys7CisJcmVtb3ZlX3RyYWlsX3NwYWNlcyhrZXkpOworCXJlbW92ZV90cmFpbF9zcGFjZXModmFsKTsKKwloaW50ID0gZ2V0X2hpbnQoY29kZWMsIGtleSk7CisJaWYgKGhpbnQpIHsKKwkJLyogcmVwbGFjZSAqLworCQlrZnJlZShoaW50LT5rZXkpOworCQloaW50LT5rZXkgPSBrZXk7CisJCWhpbnQtPnZhbCA9IHZhbDsKKwkJcmV0dXJuIGNvdW50OworCX0KKwkvKiBhbGxvY2F0ZSBhIG5ldyBoaW50IGVudHJ5ICovCisJaWYgKGNvZGVjLT5oaW50cy51c2VkID49IE1BWF9ISU5UUykKKwkJaGludCA9IE5VTEw7CisJZWxzZQorCQloaW50ID0gc25kX2FycmF5X25ldygmY29kZWMtPmhpbnRzKTsKIAlpZiAoIWhpbnQpIHsKLQkJa2ZyZWUocCk7CisJCWtmcmVlKGtleSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkqaGludCA9IHA7CisJaGludC0+a2V5ID0ga2V5OworCWhpbnQtPnZhbCA9IHZhbDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBpbl9jb25maWdzX3Nob3coc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKKwkJCQljaGFyICpidWYpCit7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxpc3QtPnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0obGlzdCwgaSk7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjB4JTAyeCAweCUwOHhcbiIsCisJCQkgICAgICAgcGluLT5uaWQsIHBpbi0+Y2ZnKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgaW5pdF9waW5fY29uZmlnc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBwaW5fY29uZmlnc19zaG93KGNvZGVjLCAmY29kZWMtPmluaXRfcGlucywgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QgdXNlcl9waW5fY29uZmlnc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBwaW5fY29uZmlnc19zaG93KGNvZGVjLCAmY29kZWMtPnVzZXJfcGlucywgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QgZHJpdmVyX3Bpbl9jb25maWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBwaW5fY29uZmlnc19zaG93KGNvZGVjLCAmY29kZWMtPmRyaXZlcl9waW5zLCBidWYpOworfQorCisjZGVmaW5lIE1BWF9QSU5fQ09ORklHUwkJMzIKKworc3RhdGljIHNzaXplX3QgdXNlcl9waW5fY29uZmlnc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IG5pZCwgY2ZnOworCWludCBlcnI7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVpICVpIiwgJm5pZCwgJmNmZykgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuaWQpCisJCXJldHVybiAtRUlOVkFMOworCWVyciA9IHNuZF9oZGFfYWRkX3BpbmNmZyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIG5pZCwgY2ZnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMzMSw4ICs1MDEsMTEgQEAKIAlDT0RFQ19BVFRSX1JPKG1mZyksCiAJQ09ERUNfQVRUUl9SVyhuYW1lKSwKIAlDT0RFQ19BVFRSX1JXKG1vZGVsbmFtZSksCi0JQ09ERUNfQVRUUl9XTyhpbml0X3ZlcmJzKSwKLQlDT0RFQ19BVFRSX1dPKGhpbnRzKSwKKwlDT0RFQ19BVFRSX1JXKGluaXRfdmVyYnMpLAorCUNPREVDX0FUVFJfUlcoaGludHMpLAorCUNPREVDX0FUVFJfUk8oaW5pdF9waW5fY29uZmlncyksCisJQ09ERUNfQVRUUl9SVyh1c2VyX3Bpbl9jb25maWdzKSwKKwlDT0RFQ19BVFRSX1JPKGRyaXZlcl9waW5fY29uZmlncyksCiAJQ09ERUNfQVRUUl9XTyhyZWNvbmZpZyksCiAJQ09ERUNfQVRUUl9XTyhjbGVhciksCiB9OwpAQCAtMzUxLDQgKzUyNCwyOSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogTG9vayBmb3IgaGludCBzdHJpbmcKKyAqLworY29uc3QgY2hhciAqc25kX2hkYV9nZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCXN0cnVjdCBoZGFfaGludCAqaGludCA9IGdldF9oaW50KGNvZGVjLCBrZXkpOworCXJldHVybiBoaW50ID8gaGludC0+dmFsIDogTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZ2V0X2hpbnQpOworCitpbnQgc25kX2hkYV9nZXRfYm9vbF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJY29uc3QgY2hhciAqcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsIGtleSk7CisJaWYgKCFwIHx8ICEqcCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJc3dpdGNoICh0b3VwcGVyKCpwKSkgeworCWNhc2UgJ1QnOiAvKiB0cnVlICovCisJY2FzZSAnWSc6IC8qIHllcyAqLworCWNhc2UgJzEnOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2dldF9ib29sX2hpbnQpOworCiAjZW5kaWYgLyogQ09ORklHX1NORF9IREFfUkVDT05GSUcgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGYzYjU3MjMuLjMwODI5ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMzgxLDYgKzM4MSw3IEBACiAKIAkvKiBIRCBjb2RlYyAqLwogCXVuc2lnbmVkIHNob3J0IGNvZGVjX21hc2s7CisJaW50ICBjb2RlY19wcm9iZV9tYXNrOyAvKiBjb3BpZWQgZnJvbSBwcm9iZV9tYXNrIG9wdGlvbiAqLwogCXN0cnVjdCBoZGFfYnVzICpidXM7CiAKIAkvKiBDT1JCL1JJUkIgKi8KQEAgLTg1OCwxMyArODU5LDE4IEBACiAJCSAgICAgIFNEX0NUTF9ETUFfU1RBUlQgfCBTRF9JTlRfTUFTSyk7CiB9CiAKLS8qIHN0b3AgYSBzdHJlYW0gKi8KLXN0YXRpYyB2b2lkIGF6eF9zdHJlYW1fc3RvcChzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKKy8qIHN0b3AgRE1BICovCitzdGF0aWMgdm9pZCBhenhfc3RyZWFtX2NsZWFyKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQogewotCS8qIHN0b3AgRE1BICovCiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9DVEwsIGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpICYKIAkJICAgICAgfihTRF9DVExfRE1BX1NUQVJUIHwgU0RfSU5UX01BU0spKTsKIAlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX1NUUywgU0RfSU5UX01BU0spOyAvKiB0byBiZSBzdXJlICovCit9CisKKy8qIHN0b3AgYSBzdHJlYW0gKi8KK3N0YXRpYyB2b2lkIGF6eF9zdHJlYW1fc3RvcChzdHJ1Y3QgYXp4ICpjaGlwLCBzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldikKK3sKKwlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOwogCS8qIGRpc2FibGUgU0lFICovCiAJYXp4X3dyaXRlYihjaGlwLCBJTlRDVEwsCiAJCSAgIGF6eF9yZWFkYihjaGlwLCBJTlRDVEwpICYgfigxIDw8IGF6eF9kZXYtPmluZGV4KSk7CkBAIC0xMDc1LDggKzEwODEsNyBAQAogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUEwsIDApOwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUFUsIDApOwogCi0JcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7Ci0JYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gcGVyaW9kX2J5dGVzOworCXBlcmlvZF9ieXRlcyA9IGF6eF9kZXYtPnBlcmlvZF9ieXRlczsKIAlwZXJpb2RzID0gYXp4X2Rldi0+YnVmc2l6ZSAvIHBlcmlvZF9ieXRlczsKIAogCS8qIHByb2dyYW0gdGhlIGluaXRpYWwgQkRMIGVudHJpZXMgKi8KQEAgLTExMjMsMjQgKzExMjgsMTcgQEAKICBlcnJvcjoKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJUb28gbWFueSBCREwgZW50cmllczogYnVmZmVyPSVkLCBwZXJpb2Q9JWRcbiIsCiAJCSAgIGF6eF9kZXYtPmJ1ZnNpemUsIHBlcmlvZF9ieXRlcyk7Ci0JLyogcmVzZXQgKi8KLQlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBMLCAwKTsKLQlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCAwKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyoKLSAqIHNldCB1cCB0aGUgU0QgZm9yIHN0cmVhbWluZwotICovCi1zdGF0aWMgaW50IGF6eF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQorLyogcmVzZXQgc3RyZWFtICovCitzdGF0aWMgdm9pZCBhenhfc3RyZWFtX3Jlc2V0KHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQogewogCXVuc2lnbmVkIGNoYXIgdmFsOwogCWludCB0aW1lb3V0OwogCi0JLyogbWFrZSBzdXJlIHRoZSBydW4gYml0IGlzIHplcm8gZm9yIFNEICovCi0JYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9DVEwsIGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpICYKLQkJICAgICAgflNEX0NUTF9ETUFfU1RBUlQpOwotCS8qIHJlc2V0IHN0cmVhbSAqLworCWF6eF9zdHJlYW1fY2xlYXIoY2hpcCwgYXp4X2Rldik7CisKIAlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgfAogCQkgICAgICBTRF9DVExfU1RSRUFNX1JFU0VUKTsKIAl1ZGVsYXkoMyk7CkBAIC0xMTU3LDcgKzExNTUsMTUgQEAKIAl3aGlsZSAoKCh2YWwgPSBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSkgJiBTRF9DVExfU1RSRUFNX1JFU0VUKSAmJgogCSAgICAgICAtLXRpbWVvdXQpCiAJCTsKK30KIAorLyoKKyAqIHNldCB1cCB0aGUgU0QgZm9yIHN0cmVhbWluZworICovCitzdGF0aWMgaW50IGF6eF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQoreworCS8qIG1ha2Ugc3VyZSB0aGUgcnVuIGJpdCBpcyB6ZXJvIGZvciBTRCAqLworCWF6eF9zdHJlYW1fY2xlYXIoY2hpcCwgYXp4X2Rldik7CiAJLyogcHJvZ3JhbSB0aGUgc3RyZWFtX3RhZyAqLwogCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQ1RMLAogCQkgICAgICAoYXp4X3NkX3JlYWRsKGF6eF9kZXYsIFNEX0NUTCkgJiB+U0RfQ1RMX1NUUkVBTV9UQUdfTUFTSyl8CkBAIC0xMjI4LDcgKzEyMzQsNiBAQAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYXp4X2NvZGVjX2NyZWF0ZShzdHJ1Y3QgYXp4ICpjaGlwLCBjb25zdCBjaGFyICptb2RlbCwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY29kZWNfcHJvYmVfbWFzaywKIAkJCQkgICAgICBpbnQgbm9faW5pdCkKIHsKIAlzdHJ1Y3QgaGRhX2J1c190ZW1wbGF0ZSBidXNfdGVtcDsKQEAgLTEyNjEsNyArMTI2Niw3IEBACiAKIAkvKiBGaXJzdCB0cnkgdG8gcHJvYmUgYWxsIGdpdmVuIGNvZGVjIHNsb3RzICovCiAJZm9yIChjID0gMDsgYyA8IG1heF9zbG90czsgYysrKSB7Ci0JCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNvZGVjX3Byb2JlX21hc2spIHsKKwkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY2hpcC0+Y29kZWNfcHJvYmVfbWFzaykgewogCQkJaWYgKHByb2JlX2NvZGVjKGNoaXAsIGMpIDwgMCkgewogCQkJCS8qIFNvbWUgQklPU2VuIGdpdmUgeW91IHdyb25nIGNvZGVjIGFkZHJlc3NlcwogCQkJCSAqIHRoYXQgZG9uJ3QgZXhpc3QKQEAgLTEyODUsNyArMTI5MCw3IEBACiAKIAkvKiBUaGVuIGNyZWF0ZSBjb2RlYyBpbnN0YW5jZXMgKi8KIAlmb3IgKGMgPSAwOyBjIDwgbWF4X3Nsb3RzOyBjKyspIHsKLQkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY29kZWNfcHJvYmVfbWFzaykgeworCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjaGlwLT5jb2RlY19wcm9iZV9tYXNrKSB7CiAJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYzsKIAkJCWVyciA9IHNuZF9oZGFfY29kZWNfbmV3KGNoaXAtPmJ1cywgYywgIW5vX2luaXQsICZjb2RlYyk7CiAJCQlpZiAoZXJyIDwgMCkKQEAgLTE0MDMsNiArMTQwOCw4IEBACiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gYXp4X2RldjsKIAlzbmRfcGNtX3NldF9zeW5jKHN1YnN0cmVhbSk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKKworCWF6eF9zdHJlYW1fcmVzZXQoY2hpcCwgYXp4X2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MjksNiArMTQzNiwxMSBAQAogc3RhdGljIGludCBhenhfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7CisJc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYgPSBnZXRfYXp4X2RldihzdWJzdHJlYW0pOworCisJYXp4X2Rldi0+YnVmc2l6ZSA9IDA7CisJYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gMDsKKwlhenhfZGV2LT5mb3JtYXRfdmFsID0gMDsKIAlyZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKIAkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKIH0KQEAgLTE0NDMsNiArMTQ1NSw5IEBACiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQTCwgMCk7CiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQVSwgMCk7CiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9DVEwsIDApOworCWF6eF9kZXYtPmJ1ZnNpemUgPSAwOworCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IDA7CisJYXp4X2Rldi0+Zm9ybWF0X3ZhbCA9IDA7CiAKIAloaW5mby0+b3BzLmNsZWFudXAoaGluZm8sIGFwY20tPmNvZGVjLCBzdWJzdHJlYW0pOwogCkBAIC0xNDU2LDIzICsxNDcxLDM3IEBACiAJc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYgPSBnZXRfYXp4X2RldihzdWJzdHJlYW0pOwogCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8gPSBhcGNtLT5oaW5mb1tzdWJzdHJlYW0tPnN0cmVhbV07CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBpbnQgYnVmc2l6ZSwgcGVyaW9kX2J5dGVzLCBmb3JtYXRfdmFsOworCWludCBlcnI7CiAKLQlhenhfZGV2LT5idWZzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7Ci0JYXp4X2Rldi0+Zm9ybWF0X3ZhbCA9IHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KHJ1bnRpbWUtPnJhdGUsCi0JCQkJCQkJIHJ1bnRpbWUtPmNoYW5uZWxzLAotCQkJCQkJCSBydW50aW1lLT5mb3JtYXQsCi0JCQkJCQkJIGhpbmZvLT5tYXhicHMpOwotCWlmICghYXp4X2Rldi0+Zm9ybWF0X3ZhbCkgeworCWZvcm1hdF92YWwgPSBzbmRfaGRhX2NhbGNfc3RyZWFtX2Zvcm1hdChydW50aW1lLT5yYXRlLAorCQkJCQkJcnVudGltZS0+Y2hhbm5lbHMsCisJCQkJCQlydW50aW1lLT5mb3JtYXQsCisJCQkJCQloaW5mby0+bWF4YnBzKTsKKwlpZiAoIWZvcm1hdF92YWwpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlgKIAkJCSAgICJpbnZhbGlkIGZvcm1hdF92YWwsIHJhdGU9JWQsIGNoPSVkLCBmb3JtYXQ9JWRcbiIsCiAJCQkgICBydW50aW1lLT5yYXRlLCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+Zm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJYnVmc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOworCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCiAJc25kX3ByaW50ZGQoImF6eF9wY21fcHJlcGFyZTogYnVmc2l6ZT0weCV4LCBmb3JtYXQ9MHgleFxuIiwKLQkJICAgIGF6eF9kZXYtPmJ1ZnNpemUsIGF6eF9kZXYtPmZvcm1hdF92YWwpOwotCWlmIChhenhfc2V0dXBfcGVyaW9kcyhjaGlwLCBzdWJzdHJlYW0sIGF6eF9kZXYpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCSAgICBidWZzaXplLCBmb3JtYXRfdmFsKTsKKworCWlmIChidWZzaXplICE9IGF6eF9kZXYtPmJ1ZnNpemUgfHwKKwkgICAgcGVyaW9kX2J5dGVzICE9IGF6eF9kZXYtPnBlcmlvZF9ieXRlcyB8fAorCSAgICBmb3JtYXRfdmFsICE9IGF6eF9kZXYtPmZvcm1hdF92YWwpIHsKKwkJYXp4X2Rldi0+YnVmc2l6ZSA9IGJ1ZnNpemU7CisJCWF6eF9kZXYtPnBlcmlvZF9ieXRlcyA9IHBlcmlvZF9ieXRlczsKKwkJYXp4X2Rldi0+Zm9ybWF0X3ZhbCA9IGZvcm1hdF92YWw7CisJCWVyciA9IGF6eF9zZXR1cF9wZXJpb2RzKGNoaXAsIHN1YnN0cmVhbSwgYXp4X2Rldik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlhenhfc2V0dXBfY29udHJvbGxlcihjaGlwLCBhenhfZGV2KTsKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJYXp4X2Rldi0+Zmlmb19zaXplID0gYXp4X3NkX3JlYWR3KGF6eF9kZXYsIFNEX0ZJRk9TSVpFKSArIDE7CkBAIC0yMTAwLDI1ICsyMTI5LDM2IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MjBhYywgIkRlbGwgU3R1ZGlvIERlc2t0b3AiLCAweDAxKSwKIAkvKiBpbmNsdWRpbmcgYm9ndXMgQUxDMjY4IGluIHNsb3QjMiB0aGF0IGNvbmZsaWN0cyB3aXRoIEFMQzg4OCAqLwogCVNORF9QQ0lfUVVJUksoMHgxN2MwLCAweDQwODUsICJNZWRpb24gTUQ5NjYzMCIsIDB4MDEpLAotCS8qIGNvbmZsaWN0IG9mIEFMQzI2OCBpbiBzbG90IzMgKGRpZ2l0YWwgSS9PKTsgYSB0ZW1wb3JhcnkgZml4ICovCi0JU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYwMCwgIlRvc2hpYmEgbGFwdG9wIiwgMHgwMyksCisJLyogZm9yY2VkIGNvZGVjIHNsb3RzICovCisJU05EX1BDSV9RVUlSSygweDEwNDYsIDB4MTI2MiwgIkFTVVMgVzVGIiwgMHgxMDMpLAogCXt9CiB9OwogCisjZGVmaW5lIEFaWF9GT1JDRV9DT0RFQ19NQVNLCTB4MTAwCisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBjaGVja19wcm9iZV9tYXNrKHN0cnVjdCBhenggKmNoaXAsIGludCBkZXYpCiB7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnE7CiAKLQlpZiAocHJvYmVfbWFza1tkZXZdID09IC0xKSB7CisJY2hpcC0+Y29kZWNfcHJvYmVfbWFzayA9IHByb2JlX21hc2tbZGV2XTsKKwlpZiAoY2hpcC0+Y29kZWNfcHJvYmVfbWFzayA9PSAtMSkgewogCQlxID0gc25kX3BjaV9xdWlya19sb29rdXAoY2hpcC0+cGNpLCBwcm9iZV9tYXNrX2xpc3QpOwogCQlpZiAocSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJoZGFfaW50ZWw6IHByb2JlX21hc2sgc2V0IHRvIDB4JXggIgogCQkJICAgICAgICJmb3IgZGV2aWNlICUwNHg6JTA0eFxuIiwKIAkJCSAgICAgICBxLT52YWx1ZSwgcS0+c3VidmVuZG9yLCBxLT5zdWJkZXZpY2UpOwotCQkJcHJvYmVfbWFza1tkZXZdID0gcS0+dmFsdWU7CisJCQljaGlwLT5jb2RlY19wcm9iZV9tYXNrID0gcS0+dmFsdWU7CiAJCX0KIAl9CisKKwkvKiBjaGVjayBmb3JjZWQgb3B0aW9uICovCisJaWYgKGNoaXAtPmNvZGVjX3Byb2JlX21hc2sgIT0gLTEgJiYKKwkgICAgKGNoaXAtPmNvZGVjX3Byb2JlX21hc2sgJiBBWlhfRk9SQ0VfQ09ERUNfTUFTSykpIHsKKwkJY2hpcC0+Y29kZWNfbWFzayA9IGNoaXAtPmNvZGVjX3Byb2JlX21hc2sgJiAweGZmOworCQlwcmludGsoS0VSTl9JTkZPICJoZGFfaW50ZWw6IGNvZGVjX21hc2sgZm9yY2VkIHRvIDB4JXhcbiIsCisJCSAgICAgICBjaGlwLT5jb2RlY19tYXNrKTsKKwl9CiB9CiAKIApAQCAtMjM0NywxMCArMjM4NywxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAiRXJyb3IgY3JlYXRpbmcgY2FyZCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAllcnIgPSBhenhfY3JlYXRlKGNhcmQsIHBjaSwgZGV2LCBwY2lfaWQtPmRyaXZlcl9kYXRhLCAmY2hpcCk7CkBAIC0yMzU5LDggKzIzOTksNyBAQAogCWNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7CiAKIAkvKiBjcmVhdGUgY29kZWMgaW5zdGFuY2VzICovCi0JZXJyID0gYXp4X2NvZGVjX2NyZWF0ZShjaGlwLCBtb2RlbFtkZXZdLCBwcm9iZV9tYXNrW2Rldl0sCi0JCQkgICAgICAgcHJvYmVfb25seVtkZXZdKTsKKwllcnIgPSBhenhfY29kZWNfY3JlYXRlKGNoaXAsIG1vZGVsW2Rldl0sIHByb2JlX29ubHlbZGV2XSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKQEAgLTI0NTcsMTAgKzI0OTYsMTAgQEAKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMzKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDcpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJLyogVGVyYWRpY2kgKi8KIAl7IFBDSV9ERVZJQ0UoMHg2NTQ5LCAweDEyMDApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1RFUkEgfSwKIAkvKiBBTUQgR2VuZXJpYywgUENJIGNsYXNzIGNvZGUgYW5kIFZlbmRvciBJRCBmb3IgSEQgQXVkaW8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCmluZGV4IDQ0ZjE4OWMuLjgzMzQ5MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaApAQCAtMjYsOCArMjYsMTAgQEAKIC8qCiAgKiBmb3IgbWl4ZXIgY29udHJvbHMKICAqLworI2RlZmluZSBIREFfQ09NUE9TRV9BTVBfVkFMX09GUyhuaWQsY2hzLGlkeCxkaXIsb2ZzKQkJXAorCSgobmlkKSB8ICgoY2hzKTw8MTYpIHwgKChkaXIpPDwxOCkgfCAoKGlkeCk8PDE5KSB8ICgob2ZzKTw8MjMpKQogI2RlZmluZSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCxjaHMsaWR4LGRpcikgXAotCSgobmlkKSB8ICgoY2hzKTw8MTYpIHwgKChkaXIpPDwxOCkgfCAoKGlkeCk8PDE5KSkKKwlIREFfQ09NUE9TRV9BTVBfVkFMX09GUyhuaWQsIGNocywgaWR4LCBkaXIsIDApCiAvKiBtb25vIHZvbHVtZSB3aXRoIGluZGV4IChpbmRleD0wLDEsLi4uKSAoY2hhbm5lbD0xLDIpICovCiAjZGVmaW5lIEhEQV9DT0RFQ19WT0xVTUVfTU9OT19JRFgoeG5hbWUsIHhjaWR4LCBuaWQsIGNoYW5uZWwsIHhpbmRleCwgZGlyZWN0aW9uKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGNpZHgsICBcCkBAIC05Niw3ICs5OCw3IEBACiAJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsKIGludCBzbmRfaGRhX2FkZF92bWFzdGVyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjaGFyICpuYW1lLAogCQkJdW5zaWduZWQgaW50ICp0bHYsIGNvbnN0IGNoYXIgKipzbGF2ZXMpOwotdm9pZCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKK2ludCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIGludCBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qIGFtcCB2YWx1ZSBiaXRzICovCkBAIC0xMzQsNyArMTM2LDcgQEAKIAogc3RydWN0IGhkYV9iaW5kX2N0bHMgewogCXN0cnVjdCBoZGFfY3RsX29wcyAqb3BzOwotCWxvbmcgdmFsdWVzW107CisJdW5zaWduZWQgbG9uZyB2YWx1ZXNbXTsKIH07CiAKIGludCBzbmRfaGRhX21peGVyX2JpbmRfY3Rsc19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMjI3LDYgKzIyOSw3IEBACiAJaGRhX25pZF90IGhwX25pZDsJLyogb3B0aW9uYWwgREFDIGZvciBIUCwgMCB3aGVuIG5vdCBleGlzdHMgKi8KIAloZGFfbmlkX3QgZXh0cmFfb3V0X25pZFszXTsJLyogb3B0aW9uYWwgREFDcywgMCB3aGVuIG5vdCBleGlzdHMgKi8KIAloZGFfbmlkX3QgZGlnX291dF9uaWQ7CS8qIGRpZ2l0YWwgb3V0IGF1ZGlvIHdpZGdldCAqLworCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7CiAJaW50IG1heF9jaGFubmVsczsJLyogY3VycmVudGx5IHN1cHBvcnRlZCBhbmFsb2cgY2hhbm5lbHMgKi8KIAlpbnQgZGlnX291dF91c2VkOwkvKiBjdXJyZW50IHVzYWdlIG9mIGRpZ2l0YWwgb3V0IChIREFfRElHX1hYWCkgKi8KIAlpbnQgbm9fc2hhcmVfc3RyZWFtOwkvKiBkb24ndCBzaGFyZSBhIHN0cmVhbSB3aXRoIG11bHRpcGxlIHBpbnMgKi8KQEAgLTM1NCw5ICszNTcsMTIgQEAKIAlpbnQgbGluZV9vdXRfdHlwZTsJLyogQVVUT19QSU5fWFhYX09VVCAqLwogCWhkYV9uaWRfdCBocF9waW5zW0FVVE9fQ0ZHX01BWF9PVVRTXTsKIAloZGFfbmlkX3QgaW5wdXRfcGluc1tBVVRPX1BJTl9MQVNUXTsKLQloZGFfbmlkX3QgZGlnX291dF9waW47CisJaW50IGRpZ19vdXRzOworCWhkYV9uaWRfdCBkaWdfb3V0X3BpbnNbMl07CiAJaGRhX25pZF90IGRpZ19pbl9waW47CiAJaGRhX25pZF90IG1vbm9fb3V0X3BpbjsKKwlpbnQgZGlnX291dF90eXBlWzJdOyAvKiBIREFfUENNX1RZUEVfWFhYICovCisJaW50IGRpZ19pbl90eXBlOyAvKiBIREFfUENNX1RZUEVfWFhYICovCiB9OwogCiAjZGVmaW5lIGdldF9kZWZjZmdfY29ubmVjdChjZmcpIFwKQEAgLTQwNSw2ICs0MTEsNyBAQAogdTMyIHF1ZXJ5X2FtcF9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgZGlyZWN0aW9uKTsKIGludCBzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgZGlyLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNhcHMpOwordTMyIHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpOwogCiBpbnQgc25kX2hkYV9jdGxfYWRkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKTsKIHZvaWQgc25kX2hkYV9jdGxzX2NsZWFyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKQEAgLTQyNyw2ICs0MzQsMjMgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NORF9IREFfUkVDT05GSUcKK2NvbnN0IGNoYXIgKnNuZF9oZGFfZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSk7CitpbnQgc25kX2hkYV9nZXRfYm9vbF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK2NvbnN0IGNoYXIgKnNuZF9oZGFfZ2V0X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZQoraW50IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCXJldHVybiAtRU5PRU5UOworfQorI2VuZGlmCisKIC8qCiAgKiBwb3dlci1tYW5hZ2VtZW50CiAgKi8KQEAgLTQ1OCw2ICs0ODIsNyBAQAogI2RlZmluZSBnZXRfYW1wX2NoYW5uZWxzKGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHgzKQogI2RlZmluZSBnZXRfYW1wX2RpcmVjdGlvbihrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE4KSAmIDB4MSkKICNkZWZpbmUgZ2V0X2FtcF9pbmRleChrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDB4ZikKKyNkZWZpbmUgZ2V0X2FtcF9vZmZzZXQoa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAyMykgJiAweDNmKQogCiAvKgogICogQ0VBIFNob3J0IEF1ZGlvIERlc2NyaXB0b3IgZGF0YQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCmluZGV4IDE0NGI4NTIuLjkzZDc0OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKQEAgLTM5OSw4ICszOTksMTAgQEAKIHsKIAlpbnQgYywgY3VyciA9IC0xOwogCi0JaWYgKGNvbm5fbGVuID4gMSAmJiB3aWRfdHlwZSAhPSBBQ19XSURfQVVEX01JWCAmJgotCSAgICB3aWRfdHlwZSAhPSBBQ19XSURfVk9MX0tOQikKKwlpZiAoY29ubl9sZW4gPiAxICYmCisJICAgIHdpZF90eXBlICE9IEFDX1dJRF9BVURfTUlYICYmCisJICAgIHdpZF90eXBlICE9IEFDX1dJRF9WT0xfS05CICYmCisJICAgIHdpZF90eXBlICE9IEFDX1dJRF9QT1dFUikKIAkJY3VyciA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAwKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICIgIENvbm5lY3Rpb246ICVkXG4iLCBjb25uX2xlbik7CkBAIC00NjcsOCArNDY5LDkgQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICJDb2RlYzogJXNcbiIsCiAJCSAgICBjb2RlYy0+bmFtZSA/IGNvZGVjLT5uYW1lIDogIk5vdCBTZXQiKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJBZGRyZXNzOiAlZFxuIiwgY29kZWMtPmFkZHIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZlbmRvciBJZDogMHgleFxuIiwgY29kZWMtPnZlbmRvcl9pZCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiU3Vic3lzdGVtIElkOiAweCV4XG4iLCBjb2RlYy0+c3Vic3lzdGVtX2lkKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJGdW5jdGlvbiBJZDogMHgleFxuIiwgY29kZWMtPmZ1bmN0aW9uX2lkKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJWZW5kb3IgSWQ6IDB4JTA4eFxuIiwgY29kZWMtPnZlbmRvcl9pZCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiU3Vic3lzdGVtIElkOiAweCUwOHhcbiIsIGNvZGVjLT5zdWJzeXN0ZW1faWQpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlJldmlzaW9uIElkOiAweCV4XG4iLCBjb2RlYy0+cmV2aXNpb25faWQpOwogCiAJaWYgKGNvZGVjLT5tZmcpCkBAIC01NTQsOCArNTU3LDE0IEBACiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEFtcC1PdXQgY2FwczogIik7CiAJCQlwcmludF9hbXBfY2FwcyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOwogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBBbXAtT3V0IHZhbHM6ICIpOwotCQkJcHJpbnRfYW1wX3ZhbHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVULAotCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLCAxKTsKKwkJCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfUElOICYmCisJCQkgICAgY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCkKKwkJCQlwcmludF9hbXBfdmFscyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsCisJCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLAorCQkJCQkgICAgICAgY29ubl9sZW4pOworCQkJZWxzZQorCQkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCwKKwkJCQkJICAgICAgIHdpZF9jYXBzICYgQUNfV0NBUF9TVEVSRU8sIDEpOwogCQl9CiAKIAkJc3dpdGNoICh3aWRfdHlwZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggZTQ4NjEyMy4uNWJiNDhlZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0yNywxMSArMjcsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCisjaW5jbHVkZSAiaGRhX2JlZXAuaCIKIAogc3RydWN0IGFkMTk4eF9zcGVjIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOwogCWludCBudW1fbWl4ZXJzOwotCisJdW5zaWduZWQgaW50IGJlZXBfYW1wOwkvKiBiZWVwIGFtcCB2YWx1ZSwgc2V0IHZpYSBzZXRfYmVlcF9hbXAoKSAqLwogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMIHRlcm1pbmF0aW9uIQogCQkJCQkJICovCkBAIC0xNTQsNiArMTU1LDE2IEBACiAKIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAorLyogYWRkaXRpb25hbCBiZWVwIG1peGVyczsgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFyZSBvdmVyd3JpdHRlbiBhdCBidWlsZCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkX2JlZXBfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDAsIDAsIEhEQV9PVVRQVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKyNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIFwKKwkoKHNwZWMpLT5iZWVwX2FtcCA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCBpZHgsIGRpcikpIC8qIG1vbm8gKi8KKwogc3RhdGljIGludCBhZDE5OHhfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xODEsNiArMTkyLDIxIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIGNyZWF0ZSBiZWVwIGNvbnRyb2xzIGlmIG5lZWRlZCAqLworCWlmIChzcGVjLT5iZWVwX2FtcCkgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwkJZm9yIChrbmV3ID0gYWRfYmVlcF9taXhlcjsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CisJCQlpZiAoIWtjdGwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gc3BlYy0+YmVlcF9hbXA7CisJCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGtjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qIGlmIHdlIGhhdmUgbm8gbWFzdGVyIGNvbnRyb2wsIGxldCdzIGNyZWF0ZSBpdCAqLwogCWlmICghc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgewogCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CkBAIC00MDYsNyArNDMyLDggQEAKIAkJcmV0dXJuOwogCiAJYWQxOTh4X2ZyZWVfa2N0bHMoY29kZWMpOwotCWtmcmVlKGNvZGVjLT5zcGVjKTsKKwlrZnJlZShzcGVjKTsKKwlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBhZDE5OHhfcGF0Y2hfb3BzID0gewpAQCAtNTQ1LDggKzU3Miw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtNjEwLDggKzYzNSw3IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAotCSAgIEhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCisJLyogCiAJICAgSERBX0NPREVDX1ZPTFVNRSgiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLAogCSAgIEhEQV9DT0RFQ19NVVRFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksICovCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtODA5LDggKzgzMyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCiAJewpAQCAtMTAwMiwxMCArMTAyNCw4IEBACiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY0MCwgIlRvc2hpYmEiLCBBRDE5ODZBX0xBUFRPUF9FQVBEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhiMDNjLCAiU2Ftc3VuZyBSNTUiLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAxZSwgIkZTQyBWMjA2MCIsIEFEMTk4NkFfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDIzLCAiU2Ftc3VuZyBYNjAiLCBBRDE5ODZBX1NBTVNVTkcpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjQsICJTYW1zdW5nIFI2NSIsIEFEMTk4NkFfU0FNU1VORyksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyNiwgIlNhbXN1bmcgWDExIiwgQUQxOTg2QV9TQU1TVU5HKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI3LCAiU2Ftc3VuZyBRMSIsIEFEMTk4NkFfVUxUUkEpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE0NGQsIDB4ZmYwMCwgMHhjMDAwLCAiU2Ftc3VuZyIsIEFEMTk4NkFfU0FNU1VORyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzUwNCwgIlNhbXN1bmcgUTM1IiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMTEsICJMZW5vdm8gTTU1IiwgQUQxOTg2QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMTcsICJMZW5vdm8gQTYwIiwgQUQxOTg2QV8zU1RBQ0spLApAQCAtMTAyNywxNSArMTA0NywxNCBAQAogCiBzdGF0aWMgaW50IGlzX2phY2tfYXZhaWxhYmxlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogewotCXVuc2lnbmVkIGludCBjb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJdW5zaWduZWQgaW50IGNvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJcmV0dXJuIGdldF9kZWZjZmdfY29ubmVjdChjb25mKSAhPSBBQ19KQUNLX1BPUlRfTk9ORTsKIH0KIAogc3RhdGljIGludCBwYXRjaF9hZDE5ODZhKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMDQzLDYgKzEwNjIsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDE5KTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDE4LCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDY7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTk4NmFfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxOTg2YV9kYWNfbmlkczsKQEAgLTEyMjIsOCArMTI0OCw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAxLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTI5NCw2ICsxMzE4LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTgzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKKwlpbnQgZXJyOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTEzMDEsNiArMTMyNiwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxOTgzX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4M19kYWNfbmlkczsKQEAgLTEzNzAsOCArMTQwMiw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTQxNiw4ICsxNDQ2LDggQEAKIAl7MHgxZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKIAl7MHgxZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDgwfSwKIAkvKiBNaWMgYm9vc3Q6IDBkQiAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAotCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUmVjb3JkIHNlbGVjdG9yOiBGcm9udCBtaWMgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCkBAIC0xNjgyLDEwICsxNzEyLDEwIEBACiAJU05EX1BDSV9RVUlSSygweDEwMTQsIDB4MDU5NywgIkxlbm92byBaNjAiLCBBRDE5ODFfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1YjcsICJMZW5vdm8gWjYwbSIsIEFEMTk4MV9USElOS1BBRCksCiAJLyogQWxsIEhQIG1vZGVscyAqLwotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAwLCAiSFAgbngiLCBBRDE5ODFfSFApLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTAzYywgIkhQIG54IiwgQUQxOTgxX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBVMjA1IiwgQUQxOTgxX1RPU0hJQkEpLAogCS8qIExlbm92byBUaGlua3BhZCBUNjAvWDYwL1o2eHggKi8KLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMCwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4MV9USElOS1BBRCksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTgxX1RISU5LUEFEKSwKIAkvKiBIUCBueDYzMjAgKHJldmVyc2VkIFNTSUQsIEgvVyBidWcpICovCiAJU05EX1BDSV9RVUlSSygweDMwYjAsIDB4MTAzYywgIkhQIG54NjMyMCIsIEFEMTk4MV9IUCksCiAJe30KQEAgLTE2OTQsNyArMTcyNCw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4MShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTcwMiw2ICsxNzMyLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwZCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE5ODFfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxOTgxX2RhY19uaWRzOwpAQCAtMTk4OCw5ICsyMDI1LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0KIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMjAzNCw5ICsyMDY4LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0KIAlIREFfQ09ERUNfVk9MVU1FKCJBbmFsb2cgTWl4IFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkFuYWxvZyBNaXggUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMjA2Niw5ICsyMDk3LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDEsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQogCUhEQV9DT0RFQ19WT0xVTUUoIkFuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQW5hbG9nIE1peCBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0yMjk3LDEwICsyMzI1LDYgQEAKIAl7MHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKLQkvKiBBRENzOyBtdXRlZCAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCiAJeyB9CiB9OwpAQCAtMjQwOCwxMCArMjQzMiw2IEBACiAJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0JLyogQURDczsgbXV0ZWQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBBbmFsb2cgTWl4IG91dHB1dCBhbXAgKi8KIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfCAweDFmfSwgLyogMGRCICovCiAJeyB9CkBAIC0yNDgzLDEwICsyNTAzLDYgQEAKIAl7MHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKLQkvKiBBRENzOyBtdXRlZCAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIEFuYWxvZyBNaXggb3V0cHV0IGFtcCAqLwogCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4MWZ9LCAvKiAwZEIgKi8KIAl7IH0KQEAgLTI4OTAsNyArMjkwNiw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBRDE5ODhfU1BESUZfT1VUOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBBRDE5ODhfU1BESUZfSU47CkBAIC0yOTQwLDcgKzI5NTYsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE5ODgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTI5NjAsNyArMjk3Niw3IEBACiAKIAlpZiAoYm9hcmRfY29uZmlnID09IEFEMTk4OF9BVVRPKSB7CiAJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwotCQlpbnQgZXJyID0gYWQxOTg4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwkJZXJyID0gYWQxOTg4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWFkMTk4eF9mcmVlKGNvZGVjKTsKIAkJCXJldHVybiBlcnI7CkBAIC0yOTcwLDYgKzI5ODYsMTMgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBBRDE5ODhfNlNUQUNLOgogCWNhc2UgQUQxOTg4XzZTVEFDS19ESUc6CkBAIC0zMTI2LDEyICszMTQ5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKLQkvKgotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkRpZ2l0YWwgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJEaWdpdGFsIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQkqLwogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzIwNCwxMCArMzIyMSwxMCBAQAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAkvKiBQb3J0LUIgKGZyb250IG1pYykgcGluICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFBvcnQtQyAocmVhciBtaWMpIHBpbiAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBBbmFsb2cgbWl4ZXI7IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKQEAgLTMyNDAsNyArMzI1Nyw3IEBACiAJIkNEIFBsYXliYWNrIFZvbHVtZSIsCiAJIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLAogCSJEb2NraW5nIE1pYyBQbGF5YmFjayBWb2x1bWUiCi0JIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwKKwkvKiAiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAqLwogCSJJRUM5NTggUGxheWJhY2sgVm9sdW1lIiwKIAlOVUxMCiB9OwpAQCAtMzI0OCw2ICszMjY1LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxODg0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKKwlpbnQgZXJyOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTMyNTUsNiArMzI3MywxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxODg0X2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTg4NF9kYWNfbmlkczsKQEAgLTMzMjEsOCArMzM0Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTMzNTgsNyArMzM4MSw3IEBACiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCiAJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogZG9ja2luZyBtaWMgYm9vc3QgKi8KLQl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAkvKiBBbmFsb2cgbWl4ZXIgLSBkb2NraW5nIG1pYzsgbXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKIAkvKiBlbmFibGUgRUFQRCBiaXQgKi8KQEAgLTMzNzksMTAgKzM0MDIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLUluIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUtSW4gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKLQkvKgotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCSovCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZS1JbiBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzQ2OCw3ICszNDg3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFkMTk4NF9jZmdfdGJsW10gPSB7CiAJLyogTGVub3ZvIFRoaW5rcGFkIFQ2MS9YNjEgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMCwgIkxlbm92byBUaGlua3BhZCIsIEFEMTk4NF9USElOS1BBRCksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTg0X1RISU5LUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjE0LCAiRGVsbCBUMzQwMCIsIEFEMTk4NF9ERUxMX0RFU0tUT1ApLAogCXt9CiB9OwpAQCAtMzU2MSw4ICszNTgwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBCb29zdCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzYyMiwxMCArMzYzOSwxMCBAQAogCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIFBvcnQtQiAoZnJvbnQgbWljKSBwaW4gKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUG9ydC1DIChyZWFyIGxpbmUtaW4pIHBpbiAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIFBvcnQtRSAocmVhciBtaWMpIHBpbiAqLwogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LApAQCAtMzY5NSw4ICszNzEyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRG9jayBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM3MjQsOCArMzczOSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxNCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zODM2LDggKzM4NDksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM5MTEsOSArMzkyMiw5IEBACiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAzMCwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMzcsICJIUCAyMjMwcyIsIEFEMTg4NEFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDU2LCAiSFAiLCBBRDE4ODRBX01PQklMRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBlNiwgIkhQIDY3MzBiIiwgQUQxODg0QV9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZTcsICJIUCBFbGl0ZUJvb2sgODUzMHAiLCBBRDE4ODRBX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzYxNCwgIkhQIDY3MzBzIiwgQUQxODg0QV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHgzMDcwLCAiSFAiLCBBRDE4ODRBX01PQklMRSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZmYwLCAweDMwZTAsICJIUCBsYXB0b3AiLCBBRDE4ODRBX0xBUFRPUCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDM2MDAsICJIUCBsYXB0b3AiLCBBRDE4ODRBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBhYywgIlRoaW5rcGFkIFgzMDAiLCBBRDE4ODRBX1RISU5LUEFEKSwKIAl7fQogfTsKQEAgLTM5MjEsNyArMzkzMiw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTg4NGEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTM5MjksNiArMzk0MCwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxODg0YV9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE4ODRhX2RhY19uaWRzOwpAQCAtMzk2Niw2ICszOTg0LDE0IEBACiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTg4NGFfaHBfdW5zb2xfZXZlbnQ7CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTg4NGFfaHBfaW5pdDsKKwkJLyogc2V0IHRoZSB1cHBlci1saW1pdCBmb3IgbWl4ZXIgYW1wIHRvIDBkQiBmb3IgYXZvaWRpbmcgdGhlCisJCSAqIHBvc3NpYmxlIGRhbWFnZSBieSBvdmVybG9hZGluZworCQkgKi8KKwkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgyMCwgSERBX0lOUFVULAorCQkJCQkgICgweDE3IDw8IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpIHwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKSB8CisJCQkJCSAgKDB4MDUgPDwgQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVCkgfAorCQkJCQkgICgxIDw8IEFDX0FNUENBUF9NVVRFX1NISUZUKSk7CiAJCWJyZWFrOwogCWNhc2UgQUQxODg0QV9USElOS1BBRDoKIAkJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTg0YV90aGlua3BhZF9taXhlcnM7CkBAIC00MDgzLDggKzQxMDksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC00MDk3LDggKzQxMjEsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDcsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIE1pYyBCb29zdCIsIDB4MWYsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwpAQCAtNDI1Nyw3ICs0Mjc5LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxODgyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00MjY1LDYgKzQyODcsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDEwLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDY7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAzOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxODgyX2RhY19uaWRzOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKaW5kZXggZjNlYmU4My4uYzkyMTI2NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCkBAIC02ODAsMTMgKzY4MCwxMyBAQAogCQlzdHJ1Y3QgYXV0b19waW5fY2ZnIGNmZzsKIAogCQkvKiBjb2xsZWN0IHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQkJcG9ydF9lID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDBmLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCXBvcnRfZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlwb3J0X2UgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MGYpOworCQlwb3J0X2YgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MTApOwogCQlzcGVjLT5mcm9udF9wYW5lbCA9IDE7CiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9lKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSB8fAogCQkgICAgZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfZikgPT0gQUNfSkFDS19QT1JUX05PTkUpIHsKLQkJCXBvcnRfZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxZiwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOwotCQkJcG9ydF9oID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCQlwb3J0X2cgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MWYpOworCQkJcG9ydF9oID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDIwKTsKIAkJCXNwZWMtPmNoYW5uZWxfbW9kZXMgPSBjbWk5ODgwX2NoYW5uZWxfbW9kZXM7CiAJCQkvKiBubyBmcm9udCBwYW5lbCAqLwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X2cpID09IEFDX0pBQ0tfUE9SVF9OT05FIHx8CkBAIC03MDMsOCArNzAzLDggQEAKIAkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IGNtaTk4ODBfY2hhbm5lbF9tb2Rlc1swXS5jaGFubmVsczsKIAkJfSBlbHNlIHsKIAkJCXNwZWMtPmlucHV0X211eCA9ICZjbWk5ODgwX2Jhc2ljX211eDsKLQkJCXBvcnRfc3BkaWZpID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEzLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCQlwb3J0X3NwZGlmbyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMiwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJcG9ydF9zcGRpZmkgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MTMpOworCQkJcG9ydF9zcGRpZm8gPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MTIpOwogCQkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X3NwZGlmbykgIT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBDTUlfRElHX09VVF9OSUQ7CiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfc3BkaWZpKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCAwMTc3ZWY4Li4xZjJhZDc2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC01OCw2ICs1OCw3IEBACiAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOwogCWludCBudW1fbWl4ZXJzOworCWhkYV9uaWRfdCB2bWFzdGVyX25pZDsKIAogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMCkBAIC03Miw2ICs3Myw3IEBACiAJCQkJCSAqLwogCXVuc2lnbmVkIGludCBjdXJfZWFwZDsKIAl1bnNpZ25lZCBpbnQgaHBfcHJlc2VudDsKKwl1bnNpZ25lZCBpbnQgbm9fYXV0b19taWM7CiAJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKIAogCS8qIGNhcHR1cmUgKi8KQEAgLTQ2MSw2ICs0NjMsMjkgQEAKIAlrZnJlZShjb2RlYy0+c3BlYyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHRfY2FwdHVyZV9taXhlcnNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAorCX0sCisJe30KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbGF2ZV92b2xzW10gPSB7CisJIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCSJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNsYXZlX3N3c1tdID0geworCSJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAorCU5VTEwKK307CisKIHN0YXRpYyBpbnQgY29uZXhhbnRfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQ4OCw2ICs1MTMsMzIgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KKworCS8qIGlmIHdlIGhhdmUgbm8gbWFzdGVyIGNvbnRyb2wsIGxldCdzIGNyZWF0ZSBpdCAqLworCWlmIChzcGVjLT52bWFzdGVyX25pZCAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgeworCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CisJCXNuZF9oZGFfc2V0X3ZtYXN0ZXJfdGx2KGNvZGVjLCBzcGVjLT52bWFzdGVyX25pZCwKKwkJCQkJSERBX09VVFBVVCwgdm1hc3Rlcl90bHYpOworCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCQkJCSAgdm1hc3Rlcl90bHYsIHNsYXZlX3ZvbHMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChzcGVjLT52bWFzdGVyX25pZCAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKSkgeworCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCQkJCSAgTlVMTCwgc2xhdmVfc3dzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChzcGVjLT5pbnB1dF9tdXgpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIGN4dF9jYXB0dXJlX21peGVycyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzE5LDEzICs3NzAsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9taXhlcnNbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludCBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLApAQCAtNzU5LDEzICs4MDMsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDVfbWl4ZXJzX2hwNTMwW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKQEAgLTEwMDIsMTUgKzEwMzksOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNDVfY2ZnX3RibFtdID0gewotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYTUsICJIUCIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjIsICJIUCBEViBTZXJpZXMiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI1LCAiSFAgRFYyMTIwIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNywgIkhQIERWNjAwMFoiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGJiLCAiSFAgRFY4MDAwIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZCwgIkhQIERWIFNlcmllcyIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2YsICJIUCBEVjk1MzNFRyIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZDUsICJIUCA1MzAiLCBDWFQ1MDQ1X0xBUFRPUF9IUDUzMCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBkOSwgIkhQIFNwYXJ0YW4iLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzAwMCwgIkhQIERWIFNlcmllcyIsCisJCQkgICBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjMxLCAiVG9zaGliYSBQMTA1IiwgQ1hUNTA0NV9MQVBUT1BfTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDA3NTMsICJCZW5xIFI1NUUiLCBDWFQ1MDQ1X0JFTlEpLAogCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDEwYWQsICJGdWppdHN1IFNpMTUyMCIsIENYVDUwNDVfTEFQVE9QX01JQ1NFTlNFKSwKQEAgLTEwMjAsOCArMTA1MSw4IEBACiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4MWU0MCwgIkZJQyIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDJmMDUsICJGSUMiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHgyZjA2LCAiRklDIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDE2MzEsIDB4YzEwNiwgIlBhY2thcmQgQmVsbCIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMDcsICJQYWNrYXJkIEJlbGwiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxNjMxLCAweGZmMDAsIDB4YzEwMCwgIlBhY2thcmQgQmVsbCIsCisJCQkgICBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHgyMTExLCAiQ29uZXhhbnQgUmVmZXJlbmNlIGJvYXJkIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCiAJe30KIH07CkBAIC0xMDM1LDYgKzEwNjYsNyBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQgPSAxOwogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoY3h0NTA0NV9kYWNfbmlkcyk7CkBAIC0xMTM0LDcgKzExNjYsNyBAQAogLyogQ29uZXhhbnQgNTA0NyBzcGVjaWZpYyAqLwogI2RlZmluZSBDWFQ1MDQ3X1NQRElGX09VVAkweDExCiAKLXN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19kYWNfbmlkc1syXSA9IHsgMHgxMCwgMHgxYyB9Oworc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2RhY19uaWRzWzFdID0geyAweDEwIH07IC8qIDB4MWMgKi8KIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19hZGNfbmlkc1sxXSA9IHsgMHgxMiB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2NhcHNyY19uaWRzWzFdID0geyAweDFhIH07CiAKQEAgLTExNDIsMjAgKzExNzQsNiBAQAogCXsgMiwgTlVMTCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDEsCi0JLml0ZW1zID0gewotCQl7ICJNaWMiLCAweDIgfSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N19ocF9jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMSwKLQkuaXRlbXMgPSB7Ci0JCXsgIkV4dE1pYyIsIDB4MiB9LAotCX0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X3Rvc2hpYmFfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewpAQCAtMTE3OSw3ICsxMTk3LDExIEBACiAJICogdGhlIGhlYWRwaG9uZSBqYWNrCiAJICovCiAJYml0cyA9ICghc3BlYy0+aHBfcHJlc2VudCAmJiBzcGVjLT5jdXJfZWFwZCkgPyAwIDogSERBX0FNUF9NVVRFOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMCwKKwkvKiBOT1RFOiBDb25leGF0IGNvZGVjIG5lZWRzIHRoZSBpbmRleCBmb3IgKk9VVFBVVCogYW1wIG9mCisJICogcGluIHdpZGdldHMgdW5saWtlIG90aGVyIGNvZGVjcy4gIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0bworCSAqIHNldCBpbmRleCAweDAxIGZvciB0aGUgdm9sdW1lIGZyb20gdGhlIG1peGVyIGFtcCAweDE5LgorCSAqLworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMHgwMSwKIAkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKIAliaXRzID0gc3BlYy0+Y3VyX2VhcGQgPyAwIDogSERBX0FNUF9NVVRFOwogCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxMywgSERBX09VVFBVVCwgMCwKQEAgLTExODcsMTYgKzEyMDksNiBAQAogCXJldHVybiAxOwogfQogCi0vKiBiaW5kIHZvbHVtZXMgb2YgYm90aCBOSUQgMHgxMyAoSGVhZHBob25lcykgYW5kIDB4MWQgKFNwZWFrZXJzKSAqLwotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGN4dDUwNDdfYmluZF9tYXN0ZXJfdm9sID0gewotCS5vcHMgPSAmc25kX2hkYV9iaW5kX3ZvbCwKLQkudmFsdWVzID0gewotCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTMsIDMsIDAsIEhEQV9PVVRQVVQpLAotCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWQsIDMsIDAsIEhEQV9PVVRQVVQpLAotCQkwCi0JfSwKLX07Ci0KIC8qIG11dGUgaW50ZXJuYWwgc3BlYWtlciBpZiBIUCBpcyBwbHVnZ2VkICovCiBzdGF0aWMgdm9pZCBjeHQ1MDQ3X2hwX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTIwNywyNyArMTIxOSw4IEBACiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKIAogCWJpdHMgPSAoc3BlYy0+aHBfcHJlc2VudCB8fCAhc3BlYy0+Y3VyX2VhcGQpID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci0JLyogTXV0ZS9Vbm11dGUgUENNIDIgZm9yIGdvb2QgbWVhc3VyZSAtIHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8KLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWMsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci19Ci0KLS8qIG11dGUgaW50ZXJuYWwgc3BlYWtlciBpZiBIUCBpcyBwbHVnZ2VkICovCi1zdGF0aWMgdm9pZCBjeHQ1MDQ3X2hwMl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXVuc2lnbmVkIGludCBiaXRzOwotCi0Jc3BlYy0+aHBfcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMywgMCwKLQkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCi0JYml0cyA9IHNwZWMtPmhwX3ByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQkvKiBNdXRlL1VubXV0ZSBQQ00gMiBmb3IgZ29vZCBtZWFzdXJlIC0gc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyAqLwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxYywgSERBX09VVFBVVCwgMCwKKwkvKiBTZWUgdGhlIG5vdGUgaW4gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0ICovCisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAweDAxLAogCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwogfQogCkBAIC0xMjY4LDkwICsxMjYxLDM1IEBACiAJfQogfQogCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nIC0gbm9uLUVBUEQgc3lzdGVtcyAqLwotc3RhdGljIHZvaWQgY3h0NTA0N19ocDJfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICB1bnNpZ25lZCBpbnQgcmVzKQotewotCXJlcyA+Pj0gMjY7Ci0Jc3dpdGNoIChyZXMpIHsKLQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQljeHQ1MDQ3X2hwMl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDQ3X2hwX2F1dG9taWMoY29kZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X21peGVyc1tdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgR2FpbiBWb2x1bWUiLCAweDFhLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgR2FpbiBTd2l0Y2giLCAweDFhLCAweDAsIEhEQV9PVVRQVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfYmFzZV9taXhlcnNbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQ00tMiBWb2x1bWUiLCAweDFjLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUENNLTIgU3dpdGNoIiwgMHgxYywgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDFkLCAweDAwLCBIREFfT1VUUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAorCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAorCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTMsCisJfSwKKworCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19ocF9zcGtfbWl4ZXJzW10gPSB7CisJLyogU2VlIHRoZSBub3RlIGluIGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCAqLworCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwMSwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCi0KIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfdG9zaGliYV9taXhlcnNbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJ5cGFzcyBDYXB0dXJlIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUENNIFN3aXRjaCIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9CSU5EX1ZPTCgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsICZjeHQ1MDQ3X2JpbmRfbWFzdGVyX3ZvbCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAotCX0sCi0KLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfaHBfbWl4ZXJzW10gPSB7Ci0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKLQl9LAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwweDAyLEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQ00gU3dpdGNoIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19ocF9vbmx5X21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAotCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAotCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTMsCi0JfSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xMzYyLDggKzEzMDAsOCBAQAogCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTnxBQ19QSU5DVExfVlJFRl81MCB9LAogCS8qIEhQLCBTcGVha2VyICAqLwogCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LAotCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAotCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDB9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwgLyogbWl4ZXIoMHgxOSkgKi8KKwl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIG1peGVyKDB4MTkpICovCiAJLyogUmVjb3JkIHNlbGVjdG9yOiBNaWMgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCkBAIC0xMzgzLDMwICsxMzIxLDcgQEAKIAogLyogY29uZmlndXJhdGlvbiBmb3IgVG9zaGliYSBMYXB0b3BzICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDdfdG9zaGliYV9pbml0X3ZlcmJzW10gPSB7Ci0JezB4MTMsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAgfSwgLyogZGVmYXVsdCBvbiAqLwotCS8qIHBpbiBzZW5zaW5nIG9uIEhQIGFuZCBNaWMgamFja3MgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVH0sCi0JLyogU3BlYWtlciByb3V0aW5nICovCi0JezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCi0Je30KLX07Ci0KLS8qIGNvbmZpZ3VyYXRpb24gZm9yIEhQIExhcHRvcHMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0N19ocF9pbml0X3ZlcmJzW10gPSB7Ci0JLyogcGluIHNlbnNpbmcgb24gSFAgamFjayAqLwotCXsweDEzLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAotCS8qIDB4MTMgaXMgYWN0dWFsbHkgc2hhcmVkIGJ5IGJvdGggSFAgYW5kIHNwZWFrZXI7Ci0JICogc2V0dGluZyB0aGUgY29ubmVjdGlvbiB0byAwICg9MHgxOSkgbWFrZXMgdGhlIG1hc3RlciB2b2x1bWUgY29udHJvbAotCSAqIHdvcmtpbmcgbXlzdGVyaW91c2xseS4uLgotCSAqLwotCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQkvKiBSZWNvcmQgc2VsZWN0b3I6IEV4dCBNaWMgKi8KLQl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCi0JezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JIEFDX0FNUF9TRVRfSU5QVVR8QUNfQU1QX1NFVF9SSUdIVHxBQ19BTVBfU0VUX0xFRlR8MHgxN30sCi0JLyogU3BlYWtlciByb3V0aW5nICovCi0JezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDB9LCAvKiBkZWZhdWx0IG9mZiAqLwogCXt9CiB9OwogCkBAIC0xNTcxLDExICsxNDg2LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ3X2NmZ190YmxbXSA9IHsKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGEwLCAiSFAgRFYxMDAwIiwgQ1hUNTA0N19MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYTUsICJIUCBEVjUyMDBUL0RWODAwMFQiLCBDWFQ1MDQ3X0xBUFRPUF9IUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiMiwgIkhQIERWMjAwMFQvRFYzMDAwVCIsIENYVDUwNDdfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI1LCAiSFAgRFYyMDAwWiIsIENYVDUwNDdfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY2NzAwIiwgQ1hUNTA0N19MQVBUT1ApLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzMDAwLCAiSFAgRFYgU2VyaWVzIiwKKwkJCSAgIENYVDUwNDdfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjMxLCAiVG9zaGliYSBQMTAwIiwgQ1hUNTA0N19MQVBUT1BfRUFQRCksCiAJe30KIH07CkBAIC0xNTg5LDYgKzE1MDIsNyBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCWNvZGVjLT5waW5fYW1wX3dvcmthcm91bmQgPSAxOwogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoY3h0NTA0N19kYWNfbmlkcyk7CkBAIC0xNTk3LDkgKzE1MTEsOCBAQAogCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CiAJc3BlYy0+YWRjX25pZHMgPSBjeHQ1MDQ3X2FkY19uaWRzOwogCXNwZWMtPmNhcHNyY19uaWRzID0gY3h0NTA0N19jYXBzcmNfbmlkczsKLQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N19jYXB0dXJlX3NvdXJjZTsKIAlzcGVjLT5udW1fbWl4ZXJzID0gMTsKLQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X21peGVyczsKKwlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X2Jhc2VfbWl4ZXJzOwogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA0N19pbml0X3ZlcmJzOwogCXNwZWMtPnNwZGlmX3JvdXRlID0gMDsKQEAgLTE2MTMsMjEgKzE1MjYsMjIgQEAKIAkJCQkJCSAgY3h0NTA0N19jZmdfdGJsKTsKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewogCWNhc2UgQ1hUNTA0N19MQVBUT1A6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwMl91bnNvbF9ldmVudDsKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNDdfaHBfc3BrX21peGVyczsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA0N19MQVBUT1BfSFA6Ci0JCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ3X2hwX2NhcHR1cmVfc291cmNlOwotCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7Ci0JCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBjeHQ1MDQ3X2hwX2luaXRfdmVyYnM7Ci0JCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfaHBfbWl4ZXJzOworCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwkJc3BlYy0+bWl4ZXJzWzFdID0gY3h0NTA0N19ocF9vbmx5X21peGVyczsKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNDdfaHBfaW5pdDsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDQ3X0xBUFRPUF9FQVBEOgogCQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N190b3NoaWJhX2NhcHR1cmVfc291cmNlOworCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwkJc3BlYy0+bWl4ZXJzWzFdID0gY3h0NTA0N19ocF9zcGtfbWl4ZXJzOwogCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CiAJCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJiczsKLQkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N190b3NoaWJhX21peGVyczsKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKQEAgLTE2MzgsNiArMTU1Miw3IEBACiAJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDQ3X2hwX3Vuc29sX2V2ZW50OwogI2VuZGlmCQogCX0KKwlzcGVjLT52bWFzdGVyX25pZCA9IDB4MTM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzMsOCArMTU4OCwxMSBAQAogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDUxX3BvcnRiX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAorCWlmIChzcGVjLT5ub19hdXRvX21pYykKKwkJcmV0dXJuOwogCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTcsIDAsCiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYKIAkJQUNfUElOU0VOU0VfUFJFU0VOQ0U7CkBAIC0xNjkwLDYgKzE2MDgsOCBAQAogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCWhkYV9uaWRfdCBuZXdfYWRjOwogCisJaWYgKHNwZWMtPm5vX2F1dG9fbWljKQorCQlyZXR1cm47CiAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOCwgMCwKIAkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJgogCQlBQ19QSU5TRU5TRV9QUkVTRU5DRTsKQEAgLTE3NzYsNiArMTY5NiwyMiBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9ocF9kdjY3MzZfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAorCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAorCQkucHV0ID0gY3h0NTA1MV9ocF9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MWEsCisJfSwKKworCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfaW5pdF92ZXJic1tdID0gewogCS8qIExpbmUgaW4sIE1pYyAqLwogCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCkBAIC0xODA2LDYgKzE3NDIsNjYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfaHBfZHY2NzM2X2luaXRfdmVyYnNbXSA9IHsKKwkvKiBMaW5lIGluLCBNaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCS8qIEVBUEQgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBMaW5lIGluLCBNaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCS8qIFNQSyAgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIEhQLCBBbXAgICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIERvY2tpbmcgSFAgKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogREFDMSAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDQ0fSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHg0NH0sCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwkvKiBFQVBEICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVEJfRVZFTlR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVENfRVZFTlR9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNTFfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE4MjMsMTggKzE4MTksMjQgQEAKIGVudW0gewogCUNYVDUwNTFfTEFQVE9QLAkgLyogTGFwdG9wcyB3LyBFQVBEIHN1cHBvcnQgKi8KIAlDWFQ1MDUxX0hQLAkvKiBubyBkb2NraW5nICovCisJQ1hUNTA1MV9IUF9EVjY3MzYsCS8qIEhQIHdpdGhvdXQgbWljIHN3aXRjaCAqLworCUNYVDUwNTFfTEVOT1ZPX1gyMDAsCS8qIExlbm92byBYMjAwIGxhcHRvcCAqLwogCUNYVDUwNTFfTU9ERUxTCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqY3h0NTA1MV9tb2RlbHNbQ1hUNTA1MV9NT0RFTFNdID0gewogCVtDWFQ1MDUxX0xBUFRPUF0JPSAibGFwdG9wIiwKIAlbQ1hUNTA1MV9IUF0JCT0gImhwIiwKKwlbQ1hUNTA1MV9IUF9EVjY3MzZdCT0gImhwLWR2NjczNiIsCisJW0NYVDUwNTFfTEVOT1ZPX1gyMDBdCT0gImxlbm92by14MjAwIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDUxX2NmZ190YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY2NzM2IiwgQ1hUNTA1MV9IUF9EVjY3MzYpLAogCVNORF9QQ0lfUVVJUksoMHgxNGYxLCAweDAxMDEsICJDb25leGFudCBSZWZlcmVuY2UgYm9hcmQiLAogCQkgICAgICBDWFQ1MDUxX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4NTA1MSwgIkhQIFNwYXJ0YW4gMS4xIiwgQ1hUNTA1MV9IUCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIkxlbm92byBYMjAwIiwgQ1hUNTA1MV9MRU5PVk9fWDIwMCksCiAJe30KIH07CiAKQEAgLTE4NDcsNiArMTg0OSw3IEBACiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCA9IDE7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gY29uZXhhbnRfcGF0Y2hfb3BzOwogCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNTFfaW5pdDsKQEAgLTE4NjcsMTcgKzE4NzAsMjIgQEAKIAlzcGVjLT5jdXJfYWRjID0gMDsKIAlzcGVjLT5jdXJfYWRjX2lkeCA9IDA7CiAKKwljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA1MV9ocF91bnNvbF9ldmVudDsKKwogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDUxX01PREVMUywKIAkJCQkJCSAgY3h0NTA1MV9tb2RlbHMsCiAJCQkJCQkgIGN4dDUwNTFfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNTFfSFA6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX21peGVyczsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQljYXNlIENYVDUwNTFfTEFQVE9QOgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA1MV9ocF91bnNvbF9ldmVudDsKKwljYXNlIENYVDUwNTFfSFBfRFY2NzM2OgorCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9ocF9kdjY3MzZfaW5pdF92ZXJiczsKKwkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9ocF9kdjY3MzZfbWl4ZXJzOworCQlzcGVjLT5ub19hdXRvX21pYyA9IDE7CisJCWJyZWFrOworCWNhc2UgQ1hUNTA1MV9MRU5PVk9fWDIwMDoKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfbGVub3ZvX3gyMDBfaW5pdF92ZXJiczsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDZjMjZhZmMuLjgyMDk3NzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgorI2luY2x1ZGUgImhkYV9iZWVwLmgiCiAKICNkZWZpbmUgQUxDODgwX0ZST05UX0VWRU5UCQkweDAxCiAjZGVmaW5lIEFMQzg4MF9EQ1ZPTF9FVkVOVAkJMHgwMgpAQCAtNzcsNiArNzgsNyBAQAogCUFMQzI2MF9BQ0VSLAogCUFMQzI2MF9XSUxMLAogCUFMQzI2MF9SRVBMQUNFUl82NzJWLAorCUFMQzI2MF9GQVZPUklUMTAwLAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlBTEMyNjBfVEVTVCwKICNlbmRpZgpAQCAtMTAzLDYgKzEwNSw3IEBACiAJQUxDMjYyX05FQywKIAlBTEMyNjJfVE9TSElCQV9TMDYsCiAJQUxDMjYyX1RPU0hJQkFfUlgxLAorCUFMQzI2Ml9UWUFOLAogCUFMQzI2Ml9BVVRPLAogCUFMQzI2Ml9NT0RFTF9MQVNUIC8qIGxhc3QgdGFnICovCiB9OwpAQCAtMjM4LDYgKzI0MSwxMyBAQAogCUFMQzg4M19NT0RFTF9MQVNULAogfTsKIAorLyogc3R5bGVzIG9mIGNhcHR1cmUgc2VsZWN0aW9uICovCitlbnVtIHsKKwlDQVBUX01VWCA9IDAsCS8qIG9ubHkgbXV4IGJhc2VkICovCisJQ0FQVF9NSVgsCS8qIG9ubHkgbWl4ZXIgYmFzZWQgKi8KKwlDQVBUXzFNVVhfTUlYLAkvKiBmaXJzdCBtdXggYW5kIG90aGVyIG1peGVycyAqLworfTsKKwogLyogZm9yIEdQSU8gUG9sbCAqLwogI2RlZmluZSBHUElPX01BU0sJMHgwMwogCkBAIC0yNDYsNiArMjU2LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOwkvKiBtaXhlciBhcnJheXMgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX21peGVyczsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2FwX21peGVyOwkvKiBjYXB0dXJlIG1peGVyICovCisJdW5zaWduZWQgaW50IGJlZXBfYW1wOwkvKiBiZWVwIGFtcCB2YWx1ZSwgc2V0IHZpYSBzZXRfYmVlcF9hbXAoKSAqLwogCiAJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwKQEAgLTI2OSwxMyArMjgwLDE1IEBACiAJCQkJCSAqIGRpZ19vdXRfbmlkIGFuZCBocF9uaWQgYXJlIG9wdGlvbmFsCiAJCQkJCSAqLwogCWhkYV9uaWRfdCBhbHRfZGFjX25pZDsKKwloZGFfbmlkX3Qgc2xhdmVfZGlnX291dHNbM107CS8qIG9wdGlvbmFsIC0gZm9yIGF1dG8tcGFyc2luZyAqLworCWludCBkaWdfb3V0X3R5cGU7CiAKIAkvKiBjYXB0dXJlICovCiAJdW5zaWduZWQgaW50IG51bV9hZGNfbmlkczsKIAloZGFfbmlkX3QgKmFkY19uaWRzOwogCWhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CiAJaGRhX25pZF90IGRpZ19pbl9uaWQ7CQkvKiBkaWdpdGFsLWluIE5JRDsgb3B0aW9uYWwgKi8KLQl1bnNpZ25lZCBjaGFyIGlzX21peF9jYXB0dXJlOwkvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAobm9uLW11eCkgKi8KKwlpbnQgY2FwdHVyZV9zdHlsZTsJCS8qIGNhcHR1cmUgc3R5bGUgKENBUFRfKikgKi8KIAogCS8qIGNhcHR1cmUgc291cmNlICovCiAJdW5zaWduZWQgaW50IG51bV9tdXhfZGVmczsKQEAgLTI5Myw3ICszMDYsNyBAQAogCS8qIGR5bmFtaWMgY29udHJvbHMsIGluaXRfdmVyYnMgYW5kIGlucHV0X211eCAqLwogCXN0cnVjdCBhdXRvX3Bpbl9jZmcgYXV0b2NmZzsKIAlzdHJ1Y3Qgc25kX2FycmF5IGtjdGxzOwotCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX2ltdXhbM107CiAJaGRhX25pZF90IHByaXZhdGVfZGFjX25pZHNbQVVUT19DRkdfTUFYX09VVFNdOwogCiAJLyogaG9va3MgKi8KQEAgLTMwNSw2ICszMTgsOSBAQAogCXVuc2lnbmVkIGludCBqYWNrX3ByZXNlbnQ6IDE7CiAJdW5zaWduZWQgaW50IG1hc3Rlcl9zdzogMTsKIAorCS8qIG90aGVyIGZsYWdzICovCisJdW5zaWduZWQgaW50IG5vX2FuYWxvZyA6MTsgLyogZGlnaXRhbCBJL08gb25seSAqLworCiAJLyogZm9yIHZpcnR1YWwgbWFzdGVyICovCiAJaGRhX25pZF90IHZtYXN0ZXJfbmlkOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKQEAgLTMxNCwxMyArMzMwLDYgQEAKIAkvKiBmb3IgUExMIGZpeCAqLwogCWhkYV9uaWRfdCBwbGxfbmlkOwogCXVuc2lnbmVkIGludCBwbGxfY29lZl9pZHgsIHBsbF9jb2VmX2JpdDsKLQotI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCi0jZGVmaW5lIEFMQ19NQVhfUElOUwkxNgotCXVuc2lnbmVkIGludCBudW1fcGluczsKLQloZGFfbmlkX3QgcGluX25pZHNbQUxDX01BWF9QSU5TXTsKLQl1bnNpZ25lZCBpbnQgcGluX2NmZ3NbQUxDX01BWF9QSU5TXTsKLSNlbmRpZgogfTsKIAogLyoKQEAgLTMzNiw2ICszNDUsNyBAQAogCWhkYV9uaWRfdCAqZGFjX25pZHM7CiAJaGRhX25pZF90IGRpZ19vdXRfbmlkOwkJLyogb3B0aW9uYWwgKi8KIAloZGFfbmlkX3QgaHBfbmlkOwkJLyogb3B0aW9uYWwgKi8KKwloZGFfbmlkX3QgKnNsYXZlX2RpZ19vdXRzOwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7CiAJaGRhX25pZF90ICphZGNfbmlkczsKIAloZGFfbmlkX3QgKmNhcHNyY19uaWRzOwpAQCAtMzkyLDcgKzQwMiw4IEBACiAJbXV4X2lkeCA9IGFkY19pZHggPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGFkY19pZHg7CiAJaW11eCA9ICZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF07CiAKLQlpZiAoc3BlYy0+aXNfbWl4X2NhcHR1cmUpIHsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9zdHlsZSAmJgorCSAgICAhKHNwZWMtPmNhcHR1cmVfc3R5bGUgPT0gQ0FQVF8xTVVYX01JWCAmJiAhYWRjX2lkeCkpIHsKIAkJLyogTWF0cml4LW1peGVyIHN0eWxlIChlLmcuIEFMQzg4MikgKi8KIAkJdW5zaWduZWQgaW50ICpjdXJfdmFsID0gJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF07CiAJCXVuc2lnbmVkIGludCBpLCBpZHg7CkBAIC03NTAsNiArNzYxLDI0IEBACiAjZW5kaWYgICAvKiBDT05GSUdfU05EX0RFQlVHICovCiAKIC8qCisgKiBzZXQgdXAgdGhlIGlucHV0IHBpbiBjb25maWcgKGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gYXV0by1waW4gdHlwZSkKKyAqLworc3RhdGljIHZvaWQgYWxjX3NldF9pbnB1dF9waW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgICAgICBpbnQgYXV0b19waW5fdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gUElOX0lOOworCisJaWYgKGF1dG9fcGluX3R5cGUgPD0gQVVUT19QSU5fRlJPTlRfTUlDKSB7CisJCXVuc2lnbmVkIGludCBwaW5jYXA7CisJCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CisJCXBpbmNhcCA9IChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRikgPj4gQUNfUElOQ0FQX1ZSRUZfU0hJRlQ7CisJCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl84MCkKKwkJCXZhbCA9IFBJTl9WUkVGODA7CisJfQorCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCB2YWwpOworfQorCisvKgogICovCiBzdGF0aWMgdm9pZCBhZGRfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4KQogewpAQCAtODEwLDYgKzgzOSw3IEBACiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBwcmVzZXQtPm51bV9kYWNzOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gcHJlc2V0LT5kYWNfbmlkczsKIAlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IHByZXNldC0+ZGlnX291dF9uaWQ7CisJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBwcmVzZXQtPnNsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IHByZXNldC0+aHBfbmlkOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gcHJlc2V0LT5udW1fbXV4X2RlZnM7CkBAIC05MjEsNyArOTUxLDcgQEAKIAkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKIH0KICNlbHNlCi0jZGVmaW5lIGFsY19taWNfYXV0b211dGUoY29kZWMpIC8qIE5PUCAqLworI2RlZmluZSBhbGNfbWljX2F1dG9tdXRlKGNvZGVjKSBkbyB7fSB3aGlsZSgwKSAvKiBOT1AgKi8KICNlbmRpZiAvKiBkaXNhYmxlZCAqLwogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCkBAIC05NTIsNyArOTgyLDcgQEAKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAwKTsKIAl0bXAgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfR0VUX1BST0NfQ09FRiwgMCk7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgNyk7Ci0JaWYgKCh0bXAgJiAweGYwKSA9PSAyKQorCWlmICgodG1wICYgMHhmMCkgPT0gMHgyMCkKIAkJLyogYWxjODg4Uy1WQyAqLwogCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjAsIDAsCiAJCQkJICAgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDgzMCk7CkBAIC05OTEsOCArMTAyMSw3IEBACiAJbmlkID0gMHgxZDsKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwMjYwKQogCQluaWQgPSAweDE3OwotCWFzcyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJYXNzID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCWlmICghKGFzcyAmIDEpICYmICEoYXNzICYgMHgxMDAwMDApKQogCQlyZXR1cm47CiAJaWYgKChhc3MgPj4gMzApICE9IDEpCS8qIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gKi8KQEAgLTExNjYsMTYgKzExOTUsOCBAQAogCQlyZXR1cm47CiAKIAljZmcgPSBwaW5maXhbcXVpcmstPnZhbHVlXTsKLQlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKSB7Ci0JCWludCBpOwotCQl1MzIgdmFsID0gY2ZnLT52YWw7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGNmZy0+bmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wICsgaSwKLQkJCQkgICAgdmFsICYgMHhmZik7Ci0JCQl2YWwgPj49IDg7Ci0JCX0KLQl9CisJZm9yICg7IGNmZy0+bmlkOyBjZmcrKykKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBjZmctPm5pZCwgY2ZnLT52YWwpOwogfQogCiAvKgpAQCAtMTM3NSw4ICsxMzk2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQ4Myw4ICsxNTAyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxOSwgMHgwLCBIREFfT1VUUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTU3OCw4ICsxNTk1LDcgQEAKIAkJCQkgICAgIHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9wdXQpOwogfQogCi0jZGVmaW5lIERFRklORV9DQVBNSVgobnVtKSBcCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXIgIyMgbnVtW10gPSB7IFwKKyNkZWZpbmUgX0RFRklORV9DQVBNSVgobnVtKSBcCiAJeyBcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAJCS5uYW1lID0gIkNhcHR1cmUgU3dpdGNoIiwgXApAQCAtMTYwMCw3ICsxNjE2LDkgQEAKIAkJLmdldCA9IGFsY19jYXBfdm9sX2dldCwgXAogCQkucHV0ID0gYWxjX2NhcF92b2xfcHV0LCBcCiAJCS50bHYgPSB7IC5jID0gYWxjX2NhcF92b2xfdGx2IH0sIFwKLQl9LCBcCisJfQorCisjZGVmaW5lIF9ERUZJTkVfQ0FQU1JDKG51bSkgXAogCXsgXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAogCQkvKiAubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsICovIFwKQEAgLTE2MDksMTUgKzE2MjcsMjggQEAKIAkJLmluZm8gPSBhbGNfbXV4X2VudW1faW5mbywgXAogCQkuZ2V0ID0gYWxjX211eF9lbnVtX2dldCwgXAogCQkucHV0ID0gYWxjX211eF9lbnVtX3B1dCwgXAotCX0sIFwKLQl7IH0gLyogZW5kICovIFwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0NBUE1JWChudW0pIFwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfY2FwdHVyZV9taXhlciAjIyBudW1bXSA9IHsgXAorCV9ERUZJTkVfQ0FQTUlYKG51bSksCQkJCSAgICAgIFwKKwlfREVGSU5FX0NBUFNSQyhudW0pLAkJCQkgICAgICBcCisJeyB9IC8qIGVuZCAqLwkJCQkJICAgICAgXAorfQorCisjZGVmaW5lIERFRklORV9DQVBNSVhfTk9TUkMobnVtKSBcCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMgIyMgbnVtW10gPSB7IFwKKwlfREVGSU5FX0NBUE1JWChudW0pLAkJCQkJICAgIFwKKwl7IH0gLyogZW5kICovCQkJCQkJICAgIFwKIH0KIAogLyogdXAgdG8gdGhyZWUgQURDcyAqLwogREVGSU5FX0NBUE1JWCgxKTsKIERFRklORV9DQVBNSVgoMik7CiBERUZJTkVfQ0FQTUlYKDMpOwotCitERUZJTkVfQ0FQTUlYX05PU1JDKDEpOworREVGSU5FX0NBUE1JWF9OT1NSQygyKTsKK0RFRklORV9DQVBNSVhfTk9TUkMoMyk7CiAKIC8qCiAgKiBBTEM4ODAgNS1zdGFjayBtb2RlbApAQCAtMTcwNiw4ICsxNzM3LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC0xODg0LDEzICsxOTEzLDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0vKiBhZGRpdGlvbmFsIG1peGVycyB0byBhbGM4ODBfYXN1c19taXhlciAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9wY2JlZXBfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiAvKiBUQ0wgUzcwMCAqLwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF90Y2xfczcwMF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xOTIzLDggKzE5NDUsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKQEAgLTE5OTksNiArMjAxOSwxMyBAQAogCiBzdGF0aWMgdm9pZCBhbGNfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKKy8qIGFkZGl0aW9uYWwgYmVlcCBtaXhlcnM7IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcmUgb3ZlcndyaXR0ZW4gYXQgYnVpbGQgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfYmVlcF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAwLCAwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKIHN0YXRpYyBpbnQgYWxjX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMjAyMCwxMSArMjA0NywxMyBAQAogCQkJCQkJICAgIHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9zaGFyZV9zdyhjb2RlYywKLQkJCQkJCSAgICAmc3BlYy0+bXVsdGlvdXQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCXNwZWMtPm11bHRpb3V0LnNoYXJlX3NwZGlmID0gMTsKKwkJaWYgKCFzcGVjLT5ub19hbmFsb2cpIHsKKwkJCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX3NoYXJlX3N3KGNvZGVjLAorCQkJCQkJCSAgICAmc3BlYy0+bXVsdGlvdXQpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCXNwZWMtPm11bHRpb3V0LnNoYXJlX3NwZGlmID0gMTsKKwkJfQogCX0KIAlpZiAoc3BlYy0+ZGlnX2luX25pZCkgewogCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9pbl9jdGxzKGNvZGVjLCBzcGVjLT5kaWdfaW5fbmlkKTsKQEAgLTIwMzIsOCArMjA2MSwyNCBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBjcmVhdGUgYmVlcCBjb250cm9scyBpZiBuZWVkZWQgKi8KKwlpZiAoc3BlYy0+YmVlcF9hbXApIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJCWZvciAoa25ldyA9IGFsY19iZWVwX21peGVyOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJCQlrY3RsID0gc25kX2N0bF9uZXcxKGtuZXcsIGNvZGVjKTsKKwkJCWlmICgha2N0bCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBzcGVjLT5iZWVwX2FtcDsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywga2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJLyogaWYgd2UgaGF2ZSBubyBtYXN0ZXIgY29udHJvbCwgbGV0J3MgY3JlYXRlIGl0ICovCi0JaWYgKCFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKIAkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOwogCQlzbmRfaGRhX3NldF92bWFzdGVyX3Rsdihjb2RlYywgc3BlYy0+dm1hc3Rlcl9uaWQsCiAJCQkJCUhEQV9PVVRQVVQsIHZtYXN0ZXJfdGx2KTsKQEAgLTIwNDIsNyArMjA4Nyw4IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKCFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIpKSB7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYKKwkgICAgIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIikpIHsKIAkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAogCQkJCQkgIE5VTEwsIGFsY19zbGF2ZV9zd3MpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTI5NTEsNiArMjk5NywxNCBAQAogCQkJCQkgICAgIHN0cmVhbV90YWcsIGZvcm1hdCwgc3Vic3RyZWFtKTsKIH0KIAorc3RhdGljIGludCBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbGVhbnVwKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX2NsZWFudXAoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7Cit9CisKIHN0YXRpYyBpbnQgYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xvc2Uoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKIAkJCQkJIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0zMDM0LDcgKzMwODgsOCBAQAogCS5vcHMgPSB7CiAJCS5vcGVuID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fb3BlbiwKIAkJLmNsb3NlID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xvc2UsCi0JCS5wcmVwYXJlID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZQorCQkucHJlcGFyZSA9IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJCS5jbGVhbnVwID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fY2xlYW51cAogCX0sCiB9OwogCkBAIC0zMDYxLDYgKzMxMTYsOSBAQAogCWNvZGVjLT5udW1fcGNtcyA9IDE7CiAJY29kZWMtPnBjbV9pbmZvID0gaW5mbzsKIAorCWlmIChzcGVjLT5ub19hbmFsb2cpCisJCWdvdG8gc2tpcF9hbmFsb2c7CisKIAlpbmZvLT5uYW1lID0gc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nOwogCWlmIChzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrKSB7CiAJCWlmIChzbmRfQlVHX09OKCFzcGVjLT5tdWx0aW91dC5kYWNfbmlkcykpCkBAIC0zMDg0LDEyICszMTQyLDE3IEBACiAJCX0KIAl9CiAKKyBza2lwX2FuYWxvZzoKIAkvKiBTUERJRiBmb3Igc3RyZWFtIGluZGV4ICMxICovCiAJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkIHx8IHNwZWMtPmRpZ19pbl9uaWQpIHsKIAkJY29kZWMtPm51bV9wY21zID0gMjsKKwkgICAgICAgIGNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzOwogCQlpbmZvID0gc3BlYy0+cGNtX3JlYyArIDE7CiAJCWluZm8tPm5hbWUgPSBzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsOwotCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKKwkJaWYgKHNwZWMtPmRpZ19vdXRfdHlwZSkKKwkJCWluZm8tPnBjbV90eXBlID0gc3BlYy0+ZGlnX291dF90eXBlOworCQllbHNlCisJCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKIAkJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkICYmCiAJCSAgICBzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjaykgewogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gKihzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayk7CkBAIC0zMTA0LDYgKzMxNjcsOSBAQAogCQljb2RlYy0+c3BkaWZfc3RhdHVzX3Jlc2V0ID0gMTsKIAl9CiAKKwlpZiAoc3BlYy0+bm9fYW5hbG9nKQorCQlyZXR1cm4gMDsKKwogCS8qIElmIHRoZSB1c2Ugb2YgbW9yZSB0aGFuIG9uZSBBREMgaXMgcmVxdWVzdGVkIGZvciB0aGUgY3VycmVudAogCSAqIG1vZGVsLCBjb25maWd1cmUgYSBzZWNvbmQgYW5hbG9nIGNhcHR1cmUtb25seSBQQ00uCiAJICovCkBAIC0zMTYyLDY1ICszMjI4LDE3IEBACiAKIAlhbGNfZnJlZV9rY3Rscyhjb2RlYyk7CiAJa2ZyZWUoc3BlYyk7Ci0JY29kZWMtPnNwZWMgPSBOVUxMOyAvKiB0byBiZSBzdXJlICovCisJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwogfQogCiAjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKLXN0YXRpYyB2b2lkIHN0b3JlX3Bpbl9jb25maWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWhkYV9uaWRfdCBuaWQsIGVuZF9uaWQ7Ci0KLQllbmRfbmlkID0gY29kZWMtPnN0YXJ0X25pZCArIGNvZGVjLT5udW1fbm9kZXM7Ci0JZm9yIChuaWQgPSBjb2RlYy0+c3RhcnRfbmlkOyBuaWQgPCBlbmRfbmlkOyBuaWQrKykgewotCQl1bnNpZ25lZCBpbnQgd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7Ci0JCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9Ci0JCQkod2lkX2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKLQkJaWYgKHdpZF90eXBlICE9IEFDX1dJRF9QSU4pCi0JCQljb250aW51ZTsKLQkJaWYgKHNwZWMtPm51bV9waW5zID49IEFSUkFZX1NJWkUoc3BlYy0+cGluX25pZHMpKQotCQkJYnJlYWs7Ci0JCXNwZWMtPnBpbl9uaWRzW3NwZWMtPm51bV9waW5zXSA9IG5pZDsKLQkJc3BlYy0+cGluX2NmZ3Nbc3BlYy0+bnVtX3BpbnNdID0KLQkJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCXNwZWMtPm51bV9waW5zKys7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCByZXN1bWVfcGluX2NvbmZpZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykgewotCQloZGFfbmlkX3QgcGluX25pZCA9IHNwZWMtPnBpbl9uaWRzW2ldOwotCQl1bnNpZ25lZCBpbnQgcGluX2NvbmZpZyA9IHNwZWMtPnBpbl9jZmdzW2ldOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wLAotCQkJCSAgICBwaW5fY29uZmlnICYgMHgwMDAwMDBmZik7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzEsCi0JCQkJICAgIChwaW5fY29uZmlnICYgMHgwMDAwZmYwMCkgPj4gOCk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsCi0JCQkJICAgIChwaW5fY29uZmlnICYgMHgwMGZmMDAwMCkgPj4gMTYpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJCSAgICBwaW5fY29uZmlnID4+IDI0KTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgYWxjX3Jlc3VtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlyZXN1bWVfcGluX2NvbmZpZ3MoY29kZWMpOwogCWNvZGVjLT5wYXRjaF9vcHMuaW5pdChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfYW1wKGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9jYWNoZShjb2RlYyk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBzdG9yZV9waW5fY29uZmlncyhjb2RlYykKICNlbmRpZgogCiAvKgpAQCAtMzU1OSw3ICszNTc3LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTgxLCAiQVNVUyBQNEdQTCIsIEFMQzg4MF9BU1VTX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODE5NiwgIkFTVVMgUDVHRDEiLCBBTEM4ODBfNlNUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWI0LCAiQVNVUyIsIEFMQzg4MF82U1QpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAwLCAiQVNVUyIsIEFMQzg4MF9BU1VTKSwgLyogZGVmYXVsdCBBU1VTICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDQzLCAiQVNVUyIsIEFMQzg4MF9BU1VTKSwgLyogZGVmYXVsdCBBU1VTICovCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFhMCwgIlNvbnkiLCBBTEM4ODBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MWQ2LCAiU29ueSIsIEFMQzg4MF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDMwMzIsICJHYXRld2F5IiwgQUxDODgwXzVTVCksCkBAIC0zNjAyLDcgKzM2MjAsOCBAQAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGU0MDAsICJJbnRlbCBtb2JvIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGU0MDEsICJJbnRlbCBtb2JvIiwgQUxDODgwXzVTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGU0MDIsICJJbnRlbCBtb2JvIiwgQUxDODgwXzVTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAwLCAiSW50ZWwgbW9ibyIsIEFMQzg4MF8zU1QpLCAvKiBkZWZhdWx0IEludGVsICovCisJLyogZGVmYXVsdCBJbnRlbCAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4ODA4NiwgIkludGVsIG1vYm8iLCBBTEM4ODBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4YTBhMCwgMHgwNTYwLCAiQU9wZW4gaTkxNUdNbS1IRlMiLCBBTEM4ODBfNVNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweGU4MDMsIDB4MTAxOSwgTlVMTCwgQUxDODgwXzZTVF9ESUcpLAogCXt9CkBAIC0zNzgyLDcgKzM4MDEsNyBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9jYXB0dXJlX3NvdXJjZSwKIAl9LAogCVtBTEM4ODBfVU5JV0lMTF9ESUddID0gewotCQkubWl4ZXJzID0geyBhbGM4ODBfYXN1c19taXhlciwgYWxjODgwX3BjYmVlcF9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGM4ODBfYXN1c19taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF9waW5fYXN1c19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgwX2FzdXNfZGFjX25pZHMpLApAQCAtMzgyMCw4ICszODM5LDcgQEAKIAkJLmluaXRfaG9vayA9IGFsYzg4MF91bml3aWxsX3A1M19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODBfRlVKSVRTVV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4MF9mdWppdHN1X21peGVyLAotCQkJICAgIGFsYzg4MF9wY2JlZXBfbWl4ZXIsIH0sCisJCS5taXhlcnMgPSB7IGFsYzg4MF9mdWppdHN1X21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCiAJCQkJYWxjODgwX3VuaXdpbGxfcDUzX2luaXRfdmVyYnMsCiAJICAgICAgIAkJCWFsYzg4MF9iZWVwX2luaXRfdmVyYnMgfSwKQEAgLTQxMTQsNyArNDEzMiw3IEBACiBzdGF0aWMgaW50IGFsYzg4MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAlpbnQgaSwgZXJyLCBpZHg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC00MjAyLDExICs0MjIwLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChhbGM4ODBfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQkJaWYgKG5pZCAhPSBBTEM4ODBfUElOX0NEX05JRCkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEM4ODBfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CkBAIC00MjIxLDcgKzQyMzcsNyBAQAogc3RhdGljIGludCBhbGM4ODBfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGVycjsKKwlpbnQgaSwgZXJyOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwX2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKQEAgLTQyNTIsOCArNDI2OCwyMyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCi0JCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQ7CisJLyogY2hlY2sgbXVsdGlwbGUgU1BESUYtb3V0IChmb3IgcmVjZW50IGNvZGVjcykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+YXV0b2NmZy5kaWdfb3V0czsgaSsrKSB7CisJCWhkYV9uaWRfdCBkaWdfbmlkOworCQllcnIgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywKKwkJCQkJICAgICAgc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbnNbaV0sCisJCQkJCSAgICAgICZkaWdfbmlkLCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKCFpKQorCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOworCQllbHNlIHsKKwkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7CisJCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOworCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJCWJyZWFrOworCQl9CisJfQogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBBTEM4ODBfRElHSU5fTklEOwogCkBAIC00MjYzLDkgKzQyOTQsOCBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDI4MCwyMSArNDMxMCwzMyBAQAogCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCitzdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMpCit7CisJc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBzWzJdWzNdID0geworCQl7IGFsY19jYXB0dXJlX21peGVyX25vc3JjMSwKKwkJICBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzIsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMzIH0sCisJCXsgYWxjX2NhcHR1cmVfbWl4ZXIxLAorCQkgIGFsY19jYXB0dXJlX21peGVyMiwKKwkJICBhbGNfY2FwdHVyZV9taXhlcjMgfSwKKwl9OworCWlmIChzcGVjLT5udW1fYWRjX25pZHMgPiAwICYmIHNwZWMtPm51bV9hZGNfbmlkcyA8PSAzKSB7CisJCWludCBtdXg7CisJCWlmIChzcGVjLT5pbnB1dF9tdXggJiYgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPiAxKQorCQkJbXV4ID0gMTsKKwkJZWxzZQorCQkJbXV4ID0gMDsKKwkJc3BlYy0+Y2FwX21peGVyID0gY2Fwc1ttdXhdW3NwZWMtPm51bV9hZGNfbmlkcyAtIDFdOworCX0KK30KKworI2RlZmluZSBzZXRfYmVlcF9hbXAoc3BlYywgbmlkLCBpZHgsIGRpcikgXAorCSgoc3BlYyktPmJlZXBfYW1wID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIGlkeCwgZGlyKSkKKwogLyoKICAqIE9LLCBoZXJlIHdlIGhhdmUgZmluYWxseSB0aGUgcGF0Y2ggZm9yIEFMQzg4MAogICovCiAKLXN0YXRpYyB2b2lkIHNldF9jYXB0dXJlX21peGVyKHN0cnVjdCBhbGNfc3BlYyAqc3BlYykKLXsKLQlzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcHNbM10gPSB7Ci0JCWFsY19jYXB0dXJlX21peGVyMSwKLQkJYWxjX2NhcHR1cmVfbWl4ZXIyLAotCQlhbGNfY2FwdHVyZV9taXhlcjMsCi0JfTsKLQlpZiAoc3BlYy0+bnVtX2FkY19uaWRzID4gMCAmJiBzcGVjLT5udW1fYWRjX25pZHMgPD0gMykKLQkJc3BlYy0+Y2FwX21peGVyID0gY2Fwc1tzcGVjLT5udW1fYWRjX25pZHMgLSAxXTsKLX0KLQogc3RhdGljIGludCBwYXRjaF9hbGM4ODAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwpAQCAtNDMzMCw2ICs0MzcyLDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODBfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4ODBfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtNDM1Niw2ICs0NDA0LDcgQEAKIAkJfQogCX0KIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtNDQ2Myw2ICs0NTEyLDI2IEBACiAJCX0sCiAJfSwKIH07CisKKy8qIE1heGRhdGEgRmF2b3JpdCAxMDBYUyAqLworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9mYXZvcml0MTAwX2NhcHR1cmVfc291cmNlc1syXSA9IHsKKwl7CisJCS5udW1faXRlbXMgPSAyLAorCQkuaXRlbXMgPSB7CisJCQl7ICJMaW5lL01pYyIsIDB4MCB9LAorCQkJeyAiQ0QiLCAweDQgfSwKKwkJfSwKKwl9LAorCXsKKwkJLm51bV9pdGVtcyA9IDMsCisJCS5pdGVtcyA9IHsKKwkJCXsgIkxpbmUvTWljIiwgMHgwIH0sCisJCQl7ICJDRCIsIDB4NCB9LAorCQkJeyAiTWl4ZXIiLCAweDUgfSwKKwkJfSwKKwl9LAorfTsKKwogLyoKICAqIFRoaXMgaXMganVzdCBwbGFjZS1ob2xkZXIsIHNvIHRoZXJlJ3Mgc29tZXRoaW5nIGZvciBhbGNfYnVpbGRfcGNtcyB0byBsb29rCiAgKiBhdCB3aGVuIGl0IGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzLiBBTEMyNjAgaGFzIG5vIG1peGVyCkBAIC00NTA1LDEyICs0NTc0LDYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX3BjX2JlZXBfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiAvKiB1cGRhdGUgSFAsIGxpbmUgYW5kIG1vbm8gb3V0IHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBtYXN0ZXIgc3dpdGNoICovCiBzdGF0aWMgdm9pZCBhbGMyNjBfaHBfbWFzdGVyX3VwZGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgICAgaGRhX25pZF90IGhwLCBoZGFfbmlkX3QgbGluZSwKQEAgLTQ3MDIsOCArNDc2NSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljL0xpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMvTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCiAJQUxDX1BJTl9NT0RFKCJNaWMvTGluZSBKYWNrIE1vZGUiLCAweDEyLCBBTENfUElOX0RJUl9JTiksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOSwgMiwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC00NzQ4LDggKzQ4MDksMTggQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwMiwgSERBX0lOUFVUKSwKIAlBTENfUElOX01PREUoIkxpbmUgSmFjayBNb2RlIiwgMHgxNCwgQUxDX1BJTl9ESVJfSU5PVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIE1heGRhdGEgRmF2b3JpdCAxMDBYUzogb25lIG91dHB1dCBhbmQgb25lIGlucHV0ICgweDEyKSBqYWNrCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfZmF2b3JpdDEwMF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAorCUFMQ19QSU5fTU9ERSgiT3V0cHV0IEphY2sgTW9kZSIsIDB4MGYsIEFMQ19QSU5fRElSX0lOT1VUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lL01pYyBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUvTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKKwlBTENfUElOX01PREUoIkxpbmUvTWljIEphY2sgTW9kZSIsIDB4MTIsIEFMQ19QSU5fRElSX0lOKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC00NzY3LDggKzQ4MzgsNiBAQAogCUFMQ19QSU5fTU9ERSgiTGluZSBKYWNrIE1vZGUiLCAweDE0LCBBTENfUElOX0RJUl9JTk9VVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC01MTI2LDYgKzUxOTUsODkgQEAKIAl7IH0KIH07CiAKKy8qIEluaXRpYWxpc2F0aW9uIHNlcXVlbmNlIGZvciBNYXhkYXRhIEZhdm9yaXQgMTAwWFMKKyAqIChhZGFwdGVkIGZyb20gQWNlciBpbml0IHZlcmJzKS4KKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfZmF2b3JpdDEwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogR1BJTyAwIGVuYWJsZXMgdGhlIG91dHB1dCBqYWNrLgorCSAqIFR1cm4gdGhpcyBvbiBhbmQgcmVseSBvbiB0aGUgc3RhbmRhcmQgbXV0ZQorCSAqIG1ldGhvZHMgd2hlbmV2ZXIgdGhlIHVzZXIgd2FudHMgdG8gdHVybiB0aGVzZSBvdXRwdXRzIG9mZi4KKwkgKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAxfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDF9LAorCS8qIExpbmUvTWljIGlucHV0IGphY2sgaXMgY29ubmVjdGVkIHRvIE1pYzEgcGluICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY1MH0sCisJLyogRW5zdXJlIGFsbCBvdGhlciB1bnVzZWQgcGlucyBhcmUgZGlzYWJsZWQgYW5kIG11dGVkLiAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwkvKiBEaXNhYmxlIGRpZ2l0YWwgKFNQRElGKSBwaW5zICovCisJezB4MDMsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCAwfSwKKwl7MHgwNiwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIDB9LAorCisJLyogRW5zdXJlIE1pYzEgYW5kIExpbmUxIHBpbiB3aWRnZXRzIHRha2UgaW5wdXQgZnJvbSB0aGUgT1VUMSBzdW0KKwkgKiBidXMgd2hlbiBhY3RpbmcgYXMgb3V0cHV0cy4KKwkgKi8KKwl7MHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisKKwkvKiBTdGFydCB3aXRoIG91dHB1dCBzdW0gd2lkZ2V0cyBtdXRlZCBhbmQgdGhlaXIgb3V0cHV0IGdhaW5zIGF0IG1pbiAqLworCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCisJLyogVW5tdXRlIExpbmUtb3V0IHBpbiB3aWRnZXQgYW1wIGxlZnQgYW5kIHJpZ2h0CisJICogKG5vIGVxdWl2IG1peGVyIGN0cmwpCisJICovCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBVbm11dGUgTWljMSBhbmQgTGluZTEgcGluIHdpZGdldCBpbnB1dCBidWZmZXJzIHNpbmNlIHRoZXkgc3RhcnQgYXMKKwkgKiBpbnB1dHMuIElmIHRoZSBwaW4gbW9kZSBpcyBjaGFuZ2VkIGJ5IHRoZSB1c2VyIHRoZSBwaW4gbW9kZSBjb250cm9sCisJICogd2lsbCB0YWtlIGNhcmUgb2YgZW5hYmxpbmcgdGhlIHBpbidzIGlucHV0L291dHB1dCBidWZmZXJzIGFzIG5lZWRlZC4KKwkgKiBUaGVyZWZvcmUgdGhlcmUncyBubyBuZWVkIHRvIGVuYWJsZSB0aGUgaW5wdXQgYnVmZmVyIGF0IHRoaXMKKwkgKiBzdGFnZS4KKwkgKi8KKwl7MHgxMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisKKwkvKiBNdXRlIGNhcHR1cmUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwkvKiBTZXQgQURDIGNvbm5lY3Rpb24gc2VsZWN0IHRvIG1hdGNoIGRlZmF1bHQgbWl4ZXIgc2V0dGluZyAtIG1pYworCSAqIChvbiBtaWMxIHBpbikKKwkgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogRG8gc2ltaWxhciB3aXRoIHRoZSBzZWNvbmQgQURDOiBtdXRlIGNhcHR1cmUgaW5wdXQgYW1wIGFuZAorCSAqIHNldCBBREMgY29ubmVjdGlvbiB0byBtaWMgdG8gbWF0Y2ggQUxTQSdzIGRlZmF1bHQgc3RhdGUuCisJICovCisJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogTXV0ZSBhbGwgaW5wdXRzIHRvIG1peGVyIHdpZGdldCAoZXZlbiB1bmNvbm5lY3RlZCBvbmVzKSAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIG1pYzEgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwgLyogbWljMiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LCAvKiBsaW5lMSBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LCAvKiBsaW5lMiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LCAvKiBDRCBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LCAvKiBCZWVwLWdlbiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNil9LCAvKiBMaW5lLW91dCBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNyl9LCAvKiBIUC1waW4gcGluICovCisKKwl7IH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3dpbGxfdmVyYnNbXSA9IHsKIAl7MHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCXsweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCkBAIC01MjcyLDggKzU0MjQsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMSU5FMiBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTElORS1PVVQgbG9vcGJhY2sgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTElORS1PVVQgbG9vcGJhY2sgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIUC1PVVQgbG9vcGJhY2sgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHg3LCBIREFfSU5QVVQpLApAQCAtNTQ3MSw3ICs1NjIxLDcgQEAKIHN0YXRpYyBpbnQgYWxjMjYwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeDsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTU1NDYsMTEgKzU2OTYsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKG5pZCA+PSAweDEyKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJCWlmIChuaWQgIT0gQUxDMjYwX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDMjYwX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtNTYyMyw3ICs1NzcxLDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjBfRElHT1VUX05JRDsKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwpAQCAtNTYzMSw5ICs1Nzc5LDggQEAKIAlhZGRfdmVyYihzcGVjLCBhbGMyNjBfdm9sdW1lX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTU2NzAsNiArNTgxNyw3IEBACiAJW0FMQzI2MF9BQ0VSXQkJPSAiYWNlciIsCiAJW0FMQzI2MF9XSUxMXQkJPSAid2lsbCIsCiAJW0FMQzI2MF9SRVBMQUNFUl82NzJWXQk9ICJyZXBsYWNlciIsCisJW0FMQzI2MF9GQVZPUklUMTAwXQk9ICJmYXZvcml0MTAwIiwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzI2MF9URVNUXQkJPSAidGVzdCIsCiAjZW5kaWYKQEAgLTU2NzksNiArNTgyNyw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYwX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDdiLCAiQWNlciBDMjB4IiwgQUxDMjYwX0FDRVIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwOGYsICJBY2VyIiwgQUxDMjYwX0FDRVIpLAorCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDQ1NDAsICJGYXZvcml0IDEwMFhTIiwgQUxDMjYwX0ZBVk9SSVQxMDApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MDgsICJIUCBkNTcwMCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODBhLCAiSFAgZDU3NTAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMCwgIkhQIiwgQUxDMjYwX0hQXzMwMTMpLApAQCAtNTcwMSw4ICs1ODUwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjMjYwX3ByZXNldHNbXSA9IHsKIAlbQUxDMjYwX0JBU0lDXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX2Jhc2Vfb3V0cHV0X21peGVyLAotCQkJICAgIGFsYzI2MF9pbnB1dF9taXhlciwKLQkJCSAgICBhbGMyNjBfcGNfYmVlcF9taXhlciB9LAorCQkJICAgIGFsYzI2MF9pbnB1dF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYwX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjBfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjBfZGFjX25pZHMsCkBAIC01NzgxLDYgKzU5MjksMTggQEAKIAkJLm51bV9tdXhfZGVmcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2VzKSwKIAkJLmlucHV0X211eCA9IGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcywKIAl9LAorCVtBTEMyNjBfRkFWT1JJVDEwMF0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2MF9mYXZvcml0MTAwX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfZmF2b3JpdDEwMF9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjYwX2RhY19uaWRzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjBfZHVhbF9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzI2MF9kdWFsX2FkY19uaWRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYwX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2MF9tb2RlcywKKwkJLm51bV9tdXhfZGVmcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2Zhdm9yaXQxMDBfY2FwdHVyZV9zb3VyY2VzKSwKKwkJLmlucHV0X211eCA9IGFsYzI2MF9mYXZvcml0MTAwX2NhcHR1cmVfc291cmNlcywKKwl9LAogCVtBTEMyNjBfV0lMTF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2MF93aWxsX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfaW5pdF92ZXJicywgYWxjMjYwX3dpbGxfdmVyYnMgfSwKQEAgLTU4NTcsNiArNjAxNywxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjYwX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjYwX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTU4ODIsNiArNjA0OCw3IEBACiAJCX0KIAl9CiAJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDg7CiAKQEAgLTYwNTMsOCArNjIyMCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTYwODEsOCArNjI0Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTYxMzQsOCArNjI5Nyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTYyNDQsOCArNjQwNSwxMCBAQAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwkvKiBGSVhNRTogdGhpcyBsb29rcyBzdXNwaWNpb3VzLi4uCiAJSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJKi8KIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC02ODc3LDE5ICs3MDQwLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJdW5zaWduZWQgaW50IHZyZWY7CiAJCWlmICghbmlkKQogCQkJY29udGludWU7Ci0JCXZyZWYgPSBQSU5fSU47Ci0JCWlmICgxIC8qaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMqLykgewotCQkJdW5zaWduZWQgaW50IHBpbmNhcDsKLQkJCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7Ci0JCQlpZiAoKHBpbmNhcCA+PiBBQ19QSU5DQVBfVlJFRl9TSElGVCkgJgotCQkJICAgIEFDX1BJTkNBUF9WUkVGXzgwKQotCQkJCXZyZWYgPSBQSU5fVlJFRjgwOwotCQl9Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCB2cmVmKTsKKwkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgQVVUT19QSU5fRlJPTlRfTUlDIC8qaSovKTsKIAkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCkBAIC02OTAwLDE4ICs3MDUzLDIxIEBACiBzdGF0aWMgdm9pZCBhbGM4ODJfYXV0b19pbml0X2lucHV0X3NyYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9IHNwZWMtPmlucHV0X211eDsKIAlpbnQgYzsKIAogCWZvciAoYyA9IDA7IGMgPCBzcGVjLT5udW1fYWRjX25pZHM7IGMrKykgewogCQloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfTlVNX0lOUFVUU107CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5jYXBzcmNfbmlkc1tjXTsKKwkJdW5zaWduZWQgaW50IG11eF9pZHg7CisJCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4OwogCQlpbnQgY29ubnMsIG11dGUsIGlkeCwgaXRlbTsKIAogCQljb25ucyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm5fbGlzdCwKIAkJCQkJCUFSUkFZX1NJWkUoY29ubl9saXN0KSk7CiAJCWlmIChjb25ucyA8IDApCiAJCQljb250aW51ZTsKKwkJbXV4X2lkeCA9IGMgPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGM7CisJCWltdXggPSAmc3BlYy0+aW5wdXRfbXV4W211eF9pZHhdOwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbm5zOyBpZHgrKykgewogCQkJLyogaWYgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpcyB0aGUgc2VsZWN0ZWQgb25lLAogCQkJICogdW5tdXRlIGl0IGFzIGRlZmF1bHQgLSBvdGhlcndpc2UgbXV0ZSBpdApAQCAtNjkyNCw4ICs3MDgwLDIwIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIG11dGUpOworCQkJLyogY2hlY2sgaWYgd2UgaGF2ZSBhIHNlbGVjdG9yIG9yIG1peGVyCisJCQkgKiB3ZSBjb3VsZCBjaGVjayBmb3IgdGhlIHdpZGdldCB0eXBlIGluc3RlYWQsIGJ1dAorCQkJICoganVzdCBjaGVjayBmb3IgQW1wLUluIHByZXNlbmNlIChpbiBjYXNlIG9mIG1peGVyCisJCQkgKiB3aXRob3V0IGFtcC1pbiB0aGVyZSBpcyBzb21ldGhpbmcgd3JvbmcsIHRoaXMKKwkJCSAqIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSB1c2VkIG9yIGNhcHNyYyBuaWQgaXMgd3JvbmcpCisJCQkgKi8KKwkJCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkJCSAgICBtdXRlKTsKKwkJCWVsc2UgaWYgKG11dGUgIT0gQU1QX0lOX01VVEUoaWR4KSkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCQkJCQkgICAgaWR4KTsKIAkJfQogCX0KIH0KQEAgLTcwNTQsNiArNzIyMiwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgyX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTcwNzQsNyArNzI0OCw3IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODgyX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODgyX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCWlmICghc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwpAQCAtNzA5MSw2ICs3MjY1LDcgQEAKIAkJfQogCX0KIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKIApAQCAtNzE0MiwxMCArNzMxNywxNCBAQAogCTB4MDksIDB4MDgKIH07CiAKKyNkZWZpbmUgYWxjODg5X2FkY19uaWRzCQlhbGM4ODBfYWRjX25pZHMKKwogc3RhdGljIGhkYV9uaWRfdCBhbGM4ODNfY2Fwc3JjX25pZHNbMl0gPSB7IDB4MjMsIDB4MjIgfTsKIAogc3RhdGljIGhkYV9uaWRfdCBhbGM4ODNfY2Fwc3JjX25pZHNfcmV2WzJdID0geyAweDIyLCAweDIzIH07CiAKKyNkZWZpbmUgYWxjODg5X2NhcHNyY19uaWRzCWFsYzg4Ml9jYXBzcmNfbmlkcworCiAvKiBpbnB1dCBNVVggKi8KIC8qIEZJWE1FOiBzaG91bGQgYmUgYSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCiAKQEAgLTczNjMsOCArNzU0Miw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTc0MjcsOCArNzYwNCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTc0NTIsOCArNzYyNyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTc0NzgsOCArNzY1MSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTc1MDMsOCArNzY3NCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTc5MTIsMzYgKzgwODEsODMgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfdmVyYnNbXSA9IHsKLQl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAkvKiBGcm9udDogb3V0cHV0IDAgKDB4MGMpICovCi0JezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwJLyogUmVhciA6IG91dHB1dCAxICgweDBkKSAqLwotCXsweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMn0sCS8qIENMRkUgOiBvdXRwdXQgMiAoMHgwZSkgKi8KLQl7IH0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzZzdF9kZWxsX3ZlcmJzW10gPSB7CiAJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAogCXsgfQogfTsKIAorc3RhdGljIHZvaWQgYWxjODg4XzNzdF9ocF9mcm9udF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudCwgYml0czsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwliaXRzID0gcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDA7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE0LCBIREFfT1VUUFVULCAwLAorCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNiwgSERBX09VVFBVVCwgMCwKKwkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTgsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg4OF8zc3RfaHBfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHJlcykKK3sKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQUxDODgwX0hQX0VWRU5UOgorCQlhbGM4ODhfM3N0X2hwX2Zyb250X2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfdmVyYnNbXSA9IHsKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAkvKiBGcm9udDogb3V0cHV0IDAgKDB4MGMpICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwJLyogUmVhciA6IG91dHB1dCAxICgweDBkKSAqLworCXsweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMn0sCS8qIENMRkUgOiBvdXRwdXQgMiAoMHgwZSkgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDJjaCBtb2RlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF8yY2hfaW5pdFtdID0gewogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKLQl7IH0KKwl7IH0gLyogZW5kICovCiB9OwogCisvKgorICogNGNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwXzRjaF9pbml0W10gPSB7CisJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogNmNoIG1vZGUKKyAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwXzZjaF9pbml0W10gPSB7CiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAotCXsgfQorCXsgMHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg4XzNzdF9ocF9tb2Rlc1syXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODhfM3N0X2hwX21vZGVzWzNdID0gewogCXsgMiwgYWxjODg4XzNzdF9ocF8yY2hfaW5pdCB9LAorCXsgNCwgYWxjODg4XzNzdF9ocF80Y2hfaW5pdCB9LAogCXsgNiwgYWxjODg4XzNzdF9ocF82Y2hfaW5pdCB9LAogfTsKIApAQCAtODIwMiw3ICs4NDE4LDcgQEAKIHsKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewogCWNhc2UgQUxDODgwX0hQX0VWRU5UOgotCQlwcmludGsoImhwX2V2ZW50XG4iKTsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgImhwX2V2ZW50XG4iKTsgKi8KIAkJYWxjODg4XzZzdF9kZWxsX2Zyb250X2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQpAQCAtODQ2MSw2ICs4Njc3LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg2NjY4LCAiRUNTIiwgQUxDODgzXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDZjLCAiQWNlciBBc3BpcmUgOTgxMCIsIEFMQzg4M19BQ0VSX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA5MCwgIkFjZXIgQXNwaXJlIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTBhLCAiQWNlciBGZXJyYXJpIDUwMDAiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMTAsICJBY2VyIEFzcGlyZSIsIEFMQzg4M19BQ0VSX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDExMiwgIkFjZXIgQXNwaXJlIDkzMDMiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMjEsICJBY2VyIEFzcGlyZSA1OTIwRyIsIEFMQzg4M19BQ0VSX0FTUElSRSksCkBAIC04NDY4LDE3ICs4Njg1LDIxIEBACiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEzZiwgIkFjZXIgQXNwaXJlIDU5MzBHIiwKIAkJQUxDODg4X0FDRVJfQVNQSVJFXzQ5MzBHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTU3LCAiQWNlciBYMzIwMCIsIEFMQzg4M19BVVRPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTU4LCAiQWNlciBBWDE3MDAtVTM3MDBBIiwgQUxDODgzX0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWUsICJBY2VyIEFzcGlyZSA2OTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE2NiwgIkFjZXIgQXNwaXJlIDY1MzBHIiwKIAkJQUxDODg4X0FDRVJfQVNQSVJFXzQ5MzBHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMCwgIkFjZXIgbGFwdG9wIiwgQUxDODgzX0FDRVIpLCAvKiBkZWZhdWx0IEFjZXIgKi8KKwkvKiBkZWZhdWx0IEFjZXIgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwMjUsICJBY2VyIGxhcHRvcCIsIEFMQzg4M19BQ0VSKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjBkLCAiRGVsbCBJbnNwaXJvbiA1MzAiLCBBTEM4ODhfNlNUX0RFTEwpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhM2QsICJIUCBQYXZpbGxpb24iLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE0ZiwgIkhQIFNhbWJhIiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MCwgIkhQIEx1Y2tub3ciLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTYxLCAiSFAgTmV0dGxlIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjYsICJIUCBBY2FjaWEiLCBBTEM4ODhfM1NUX0hQKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTcyLCAiSFAgRWR1Yy5hciIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzMsICJBc3VzIE05MFYiLCBBTEM4ODhfQVNVU19NOTBWKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjQ5LCAiQXN1cyBNMkEtVk0gSERNSSIsIEFMQzg4M18zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI4NCwgIkFzdXMgWjM3RSIsIEFMQzg4M182U1RfRElHKSwKQEAgLTg1MTgsNyArODczOSw3IEBACiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTA4MywgIkFiaXQgSVAzNS1QUk8iLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE1NTgsIDB4MDcyMSwgIkNsZXZvIGxhcHRvcCBNNzIwUiIsIEFMQzg4M19DTEVWT19NNzIwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU1OCwgMHgwNzIyLCAiQ2xldm8gbGFwdG9wIE03MjBTUiIsIEFMQzg4M19DTEVWT19NNzIwKSwKLQlTTkRfUENJX1FVSVJLKDB4MTU1OCwgMCwgIkNsZXZvIGxhcHRvcCIsIEFMQzg4M19MQVBUT1BfRUFQRCksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNTU4LCAiQ2xldm8gbGFwdG9wIiwgQUxDODgzX0xBUFRPUF9FQVBEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTVkOSwgMHg4NzgwLCAiU3VwZXJtaWNybyBQRFNCQSIsIEFMQzg4M18zU1RfNmNoKSwKIAlTTkRfUENJX1FVSVJLKDB4MTYxZiwgMHgyMDU0LCAiTWVkaW9uIGxhcHRvcCIsIEFMQzg4M19NRURJT04pLAogCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDExMDcsICJGU0MgQU1JTE8gWGkyNTUwIiwKQEAgLTg1NDMsNiArODc2NCwxMCBAQAogCXt9CiB9OwogCitzdGF0aWMgaGRhX25pZF90IGFsYzEyMDBfc2xhdmVfZGlnX291dHNbXSA9IHsKKwlBTEM4ODNfRElHT1VUX05JRCwgMCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjODgzX3ByZXNldHNbXSA9IHsKIAlbQUxDODgzXzNTVF8yY2hfRElHXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzXzNTVF8yY2hfbWl4ZXIgfSwKQEAgLTg3NzgsNiArOTAwMyw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODhfM3N0X2hwX21vZGVzLAogCQkubmVlZF9kYWNfZml4ID0gMSwKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzg4OF8zc3RfaHBfdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGM4ODhfM3N0X2hwX2Zyb250X2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4OF82U1RfREVMTF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19iYXNlX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC04ODgzLDYgKzkxMTAsNyBAQAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzEyMDBfRElHT1VUX05JRCwKIAkJLmRpZ19pbl9uaWQgPSBBTEM4ODNfRElHSU5fTklELAorCQkuc2xhdmVfZGlnX291dHMgPSBhbGMxMjAwX3NsYXZlX2RpZ19vdXRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzX3NpeHN0YWNrX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M19zaXhzdGFja19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCkBAIC04OTUwLDExICs5MTc4LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChhbGM4ODNfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIChpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICAgUElOX1ZSRUY4MCA6IFBJTl9JTikpOwotCQkJaWYgKG5pZCAhPSBBTEM4ODNfUElOX0NEX05JRCkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEM4ODNfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CkBAIC04OTY5LDYgKzkxOTUsOCBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnIgPSBhbGM4ODBfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOworCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOworCWludCBpOwogCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC04OTgyLDYgKzkyMTAsMjYgQEAKIAkvKiBoYWNrIC0gb3ZlcnJpZGUgdGhlIGluaXQgdmVyYnMgKi8KIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gYWxjODgzX2F1dG9faW5pdF92ZXJiczsKIAorCS8qIHNldHVwIGlucHV0X211eCBmb3IgQUxDODg5ICovCisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDg4OSkgeworCQkvKiBkaWdpdGFsLW1pYyBpbnB1dCBwaW4gaXMgZXhjbHVkZWQgaW4gYWxjODgwX2F1dG9fY3JlYXRlLi4oKQorCQkgKiBiZWNhdXNlIGl0J3MgdW5kZXIgMHgxOAorCQkgKi8KKwkJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdID09IDB4MTIgfHwKKwkJICAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdID09IDB4MTIpIHsKKwkJCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKKwkJCWZvciAoaSA9IDE7IGkgPCAzOyBpKyspCisJCQkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2ltdXhbaV0sCisJCQkJICAgICAgICZzcGVjLT5wcml2YXRlX2ltdXhbMF0sCisJCQkJICAgICAgIHNpemVvZihzcGVjLT5wcml2YXRlX2ltdXhbMF0pKTsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPSAiSW50IERNaWMiOworCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IDB4MGI7CisJCQlpbXV4LT5udW1faXRlbXMrKzsKKwkJCXNwZWMtPm51bV9tdXhfZGVmcyA9IDM7CisJCQlzcGVjLT5pbnB1dF9tdXggPSBzcGVjLT5wcml2YXRlX2ltdXg7CisJCX0KKwl9CisKIAlyZXR1cm4gMTsgLyogY29uZmlnIGZvdW5kICovCiB9CiAKQEAgLTkwMzMsNiArOTI4MSwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgzX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgzX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTkwNDUsMTQgKzkyOTksMzYgQEAKIAkJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM4ODggQW5hbG9nIjsKIAkJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDODg4IERpZ2l0YWwiOwogCQl9CisJCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7CisJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyk7CisJCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKKwkJfQorCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQorCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7CisJCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAkJYnJlYWs7CiAJY2FzZSAweDEwZWMwODg5OgogCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg5IEFuYWxvZyI7CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDODg5IERpZ2l0YWwiOworCQlpZiAoIXNwZWMtPm51bV9hZGNfbmlkcykgeworCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODlfYWRjX25pZHMpOworCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODlfYWRjX25pZHM7CisJCX0KKwkJaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKKwkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODg5X2NhcHNyY19uaWRzOworCQlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF8xTVVYX01JWDsgLyogMW11eC9ObWl4LXN0eWxlCisJCQkJCQkJY2FwdHVyZSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODgzIEFuYWxvZyI7CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDODgzIERpZ2l0YWwiOworCQlpZiAoIXNwZWMtPm51bV9hZGNfbmlkcykgeworCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOworCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHM7CisJCX0KKwkJaWYgKCFzcGVjLT5jYXBzcmNfbmlkcykKKwkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzOworCQlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJCWJyZWFrOwogCX0KIApAQCAtOTA2MywxNSArOTMzOSw5IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODgzX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODgzX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlpZiAoIXNwZWMtPm51bV9hZGNfbmlkcykgewotCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyk7Ci0JCXNwZWMtPmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzOwotCX0KLQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQotCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkczsKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwogCkBAIC05MTI0LDggKzkzOTQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLCAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDBELCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTkxNDYsOCArOTQxNCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCSAgIEhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksICovCiAJLypIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwRCwgMHgwLCBIREFfT1VUUFVUKSwqLwogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC05MjU2LDggKzk1MjIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJBVVggSU4gUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQVVYIElOIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtOTI4Niw4ICs5NTUwLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtOTQzNSw2ICs5Njk3LDY3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml90eWFuX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQXV4IFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkF1eCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml90eWFuX3ZlcmJzW10gPSB7CisJLyogSGVhZHBob25lIGF1dG9tdXRlICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIFAxMSBBVVhfSU4sIHdoaXRlIDQtcGluIGNvbm5lY3RvciAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzEsIDB4ZTF9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18yLCAweDkzfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMywgMHgxOX0sCisKKwl7fQorfTsKKworLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLworc3RhdGljIHZvaWQgYWxjMjYyX3R5YW5fYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IG11dGU7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisKKwlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsIEFDX1ZFUkJfU0VUX1BJTl9TRU5TRSwgMCk7CisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCk7CisJcHJlc2VudCA9IChwcmVzZW50ICYgMHg4MDAwMDAwMCkgIT0gMDsKKwlpZiAocHJlc2VudCkgeworCQkvKiBtdXRlIGxpbmUgb3V0cHV0IG9uIEFUWCBwYW5lbCAqLworCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSBIREFfQU1QX01VVEUsIEhEQV9BTVBfTVVURSk7CisJfSBlbHNlIHsKKwkJLyogdW5tdXRlIGxpbmUgb3V0cHV0IGlmIG5lY2Vzc2FyeSAqLworCQltdXRlID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgMHgxYiwgMCwgSERBX09VVFBVVCwgMCk7CisJCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNSwgSERBX09VVFBVVCwgMCwKKwkJCQkJIEhEQV9BTVBfTVVURSwgbXV0ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbGMyNjJfdHlhbl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlcykKK3sKKwlpZiAoKHJlcyA+PiAyNikgIT0gQUxDODgwX0hQX0VWRU5UKQorCQlyZXR1cm47CisJYWxjMjYyX3R5YW5fYXV0b211dGUoY29kZWMpOworfQorCiAjZGVmaW5lIGFsYzI2Ml9jYXB0dXJlX21peGVyCQlhbGM4ODJfY2FwdHVyZV9taXhlcgogI2RlZmluZSBhbGMyNjJfY2FwdHVyZV9hbHRfbWl4ZXIJYWxjODgyX2NhcHR1cmVfYWx0X21peGVyCiAKQEAgLTk5MDEsOCArMTAyMjQsNiBAQAogCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCkBAIC0xMDQ3NCw4ICsxMDc5NSwxNCBAQAogCQkJCQkgICBhbGMyNjJfaWdub3JlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQorCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpIHsKKwkJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMgfHwgc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKSB7CisJCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOworCQkJc3BlYy0+bm9fYW5hbG9nID0gMTsKKwkJCWdvdG8gZGlnX29ubHk7CisJCX0KIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCisJfQogCWVyciA9IGFsYzI2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xMDQ4NSw4ICsxMDgxMiwxMSBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisgZGlnX29ubHk6CisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpIHsKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjJfRElHT1VUX05JRDsKKwkJc3BlYy0+ZGlnX291dF90eXBlID0gc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3R5cGVbMF07CisJfQogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBBTEMyNjJfRElHSU5fTklEOwogCkBAIC0xMDQ5NSwxMyArMTA4MjUsMTIgQEAKIAogCWFkZF92ZXJiKHNwZWMsIGFsYzI2Ml92b2x1bWVfaW5pdF92ZXJicyk7CiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTA1NDMsMjEgKzEwODcyLDE5IEBACiAJW0FMQzI2Ml9VTFRSQV0JCT0gInVsdHJhIiwKIAlbQUxDMjYyX0xFTk9WT18zMDAwXQk9ICJsZW5vdm8tMzAwMCIsCiAJW0FMQzI2Ml9ORUNdCQk9ICJuZWMiLAorCVtBTEMyNjJfVFlBTl0JCT0gInR5YW4iLAogCVtBTEMyNjJfQVVUT10JCT0gImF1dG8iLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2Ml9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMDIsIDB4NDM3YiwgIkhpcHBvIiwgQUxDMjYyX0hJUFBPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzMywgMHg4ODk1LCAiTkVDIFZlcnNhIFM5MTAwIiwgQUxDMjYyX05FQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTJmZSwgIkhQIHh3OTQwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEyZmYsICJIUCB4dzQ1NTAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA2LCAiSFAgeHc4NjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwNywgIkhQIHh3NjYwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDgsICJIUCB4dzQ2MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA5LCAiSFAgeHc0KjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwYSwgIkhQIHh3NiowMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMGIsICJIUCB4dzgqMDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxNzBiLCAiSFAgeHcqIiwgQUxDMjYyX0hQX0JQQyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDEyMDAsICJIUCB4dyBzZXJpZXMiLAorCQkJICAgQUxDMjYyX0hQX0JQQyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDEzMDAsICJIUCB4dyBzZXJpZXMiLAorCQkJICAgQUxDMjYyX0hQX0JQQyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDE3MDAsICJIUCB4dyBzZXJpZXMiLAorCQkJICAgQUxDMjYyX0hQX0JQQyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwMCwgIkhQIEQ3MDAwIiwgQUxDMjYyX0hQX0JQQ19ENzAwMF9XTCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwMSwgIkhQIEQ3MDAwIiwgQUxDMjYyX0hQX0JQQ19ENzAwMF9XRiksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwMiwgIkhQIEQ3MDAwIiwgQUxDMjYyX0hQX0JQQ19ENzAwMF9XTCksCkBAIC0xMDU3NSwxNyArMTA5MDIsMTcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHgxZjAwLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMDMsICJTb255IFVYLTkwIiwgQUxDMjYyX0hJUFBPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MjBmLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMGUsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNSwgIlNvbnkgMHg5MDE1IiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDMzLCAiU29ueSBWQUlPIFZHTi1TUjE5WE4iLAotCQkgICAgICBBTEMyNjJfU09OWV9BU1NBTUQpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTYsICJTb255IFZBSU8iLCBBTEMyNjJfQVVUTyksIC8qIGRpZy1vbmx5ICovCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTA0ZCwgMHhmZjAwLCAweDkwMDAsICJTb255IFZBSU8iLAorCQkJICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBkeW5hYm9vayBTUyBSWDEiLAogCQkgICAgICBBTEMyNjJfVE9TSElCQV9SWDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmN2IsICJUb3NoaWJhIFMwNiIsIEFMQzI2Ml9UT1NISUJBX1MwNiksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTM5NywgIkZ1aml0c3UiLCBBTEMyNjJfRlVKSVRTVSksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTQyZCwgIkZ1aml0c3UgTGlmZWJvb2sgRTg0MTAiLCBBTEMyNjJfRlVKSVRTVSksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAzMiwgIlNhbXN1bmcgUTEgVWx0cmEiLCBBTEMyNjJfVUxUUkEpLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMzksICJTYW1zdW5nIFExVSBFTCIsIEFMQzI2Ml9VTFRSQSksCisJU05EX1BDSV9RVUlSSygweDEwZjEsIDB4MjkxNSwgIlR5YW4gVGh1bmRlciBuNjY1MFciLCBBTEMyNjJfVFlBTiksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTQ0ZCwgMHhmZjAwLCAweGMwMzIsICJTYW1zdW5nIFExIiwKKwkJCSAgIEFMQzI2Ml9VTFRSQSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzUxMCwgIlNhbXN1bmcgUTQ1IiwgQUxDMjYyX0hJUFBPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzODRlLCAiTGVub3ZvIDMwMDAgeTQxMCIsIEFMQzI2Ml9MRU5PVk9fMzAwMCksCiAJU05EX1BDSV9RVUlSSygweDE3ZmYsIDB4MDU2MCwgIkJlbnEgRUQ4IiwgQUxDMjYyX0JFTlFfRUQ4KSwKQEAgLTEwODAyLDYgKzExMTI5LDE5IEBACiAJCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudCwKIAkJLmluaXRfaG9vayA9IGFsYzI2Ml9oaXBwb19hdXRvbXV0ZSwKIAl9LAorCVtBTEMyNjJfVFlBTl0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2Ml90eWFuX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicywgYWxjMjYyX3R5YW5fdmVyYnN9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2Ml9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzI2Ml9kYWNfbmlkcywKKwkJLmhwX25pZCA9IDB4MDIsCisJCS5kaWdfb3V0X25pZCA9IEFMQzI2Ml9ESUdPVVRfTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGMyNjJfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzI2Ml90eWFuX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjMjYyX3R5YW5fYXV0b211dGUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjMjYyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTA4NTQsNiArMTExOTQsMTQgQEAKIAkJfQogCX0KIAorCWlmICghc3BlYy0+bm9fYW5hbG9nKSB7CisJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJYWxjX2ZyZWUoY29kZWMpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjYyX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjYyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTEwODY1LDcgKzExMjEzLDcgQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGMyNjJfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGMyNjJfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsKKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7CiAJaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNyBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7CkBAIC0xMDg4Miw4ICsxMTIzMCwxMCBAQAogCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjJfY2Fwc3JjX25pZHM7CiAJCX0KIAl9Ci0JaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCisJaWYgKCFzcGVjLT5jYXBfbWl4ZXIgJiYgIXNwZWMtPm5vX2FuYWxvZykKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cpCisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwogCkBAIC0xMTI2MywxOSArMTE2MTMsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X2Jhc2VfaW5pdF92ZXJic1tdID0gewogCS8qIFVubXV0ZSBEQUMwLTEgYW5kIHNldCB2b2wgPSAwICovCiAJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCiAJLyoKIAkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwYyAtIDB4MGUpCiAJICovCiAJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KIAl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogICAgICAgICB7MHgwZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCiAJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtMTEyOTQsOSArMTE2MzgsNyBAQAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCiAJLyogc2V0IFBDQkVFUCB2b2wgPSAwLCBtdXRlIGNvbm5lY3Rpb25zICovCiAJezB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtMTEzMTgsMTAgKzExNjYwLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBzZXQgb3V0cHV0IERBQyAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAogCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjR9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjR9LApAQCAtMTEzMjksMTYgKzExNjY5LDEyIEBACiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyMH0sCiAJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyMH0sCiAKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAogCS8qIHNldCBQQ0JFRVAgdm9sID0gMCwgbXV0ZSBjb25uZWN0aW9ucyAqLwogCXsweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExNTM3LDcgKzExODczLDcgQEAKIHN0YXRpYyBpbnQgYWxjMjY4X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBpZHgxOwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtMTE2MzEsOSArMTE5NjcsMTQgQEAKIAkJCQkJICAgYWxjMjY4X2lnbm9yZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKSB7CisJCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzIHx8IHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikgeworCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJCXNwZWMtPm5vX2FuYWxvZyA9IDE7CisJCQlnb3RvIGRpZ19vbmx5OworCQl9CiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLwotCisJfQogCWVyciA9IGFsYzI2OF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xMTY0MywyNSArMTE5ODQsMjYgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAKKyBkaWdfb25seToKIAkvKiBkaWdpdGFsIG9ubHkgc3VwcG9ydCBvdXRwdXQgKi8KLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykgewogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2OF9ESUdPVVRfTklEOwotCisJCXNwZWMtPmRpZ19vdXRfdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOworCX0KIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdICE9IDB4MWQpCisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gIT0gMHgxZCkKIAkJYWRkX21peGVyKHNwZWMsIGFsYzI2OF9iZWVwX21peGVyKTsKIAogCWFkZF92ZXJiKHNwZWMsIGFsYzI2OF92b2x1bWVfaW5pdF92ZXJicyk7CiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTE3MjMsNyArMTIwNjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2OF9wcmVzZXRzW10gPSB7CiAJW0FMQzI2N19RVUFOVEFfSUwxXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjdfcXVhbnRhX2lsMV92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC0xMTgwNSw3ICsxMjE0Nyw4IEBACiAJfSwKIAlbQUxDMjY4X0FDRVJfQVNQSVJFX09ORV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfbWl4ZXIsCi0JCQkJYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyIH0sCisJCQkgICAgYWxjMjY4X2JlZXBfbWl4ZXIsCisJCQkgICAgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfYWNlcl9hc3BpcmVfb25lX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKQEAgLTExODc0LDcgKzEyMjE3LDcgQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CiAJaW50IGJvYXJkX2NvbmZpZzsKLQlpbnQgZXJyOworCWludCBpLCBoYXNfYmVlcCwgZXJyOwogCiAJc3BlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTExOTIzLDE1ICsxMjI2NiwzMCBAQAogCiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjY4X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCi0JaWYgKCFxdWVyeV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVUKSkKLQkJLyogb3ZlcnJpZGUgdGhlIGFtcCBjYXBzIGZvciBiZWVwIGdlbmVyYXRvciAqLwotCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQsCisJaGFzX2JlZXAgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKKwkJaWYgKHNwZWMtPm1peGVyc1tpXSA9PSBhbGMyNjhfYmVlcF9taXhlcikgeworCQkJaGFzX2JlZXAgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaGFzX2JlZXApIHsKKwkJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlhbGNfZnJlZShjb2RlYyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmICghcXVlcnlfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCkpCisJCQkvKiBvdmVycmlkZSB0aGUgYW1wIGNhcHMgZm9yIGJlZXAgZ2VuZXJhdG9yICovCisJCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQsCiAJCQkJCSAgKDB4MGMgPDwgQUNfQU1QQ0FQX09GRlNFVF9TSElGVCkgfAogCQkJCQkgICgweDBjIDw8IEFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQpIHwKIAkJCQkJICAoMHgwNyA8PCBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUKSB8CiAJCQkJCSAgKDAgPDwgQUNfQU1QQ0FQX01VVEVfU0hJRlQpKTsKKwl9CiAKLQlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgeworCWlmICghc3BlYy0+bm9fYW5hbG9nICYmICFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNyBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7CiAJCWludCBpOwpAQCAtMTIwMTIsOCArMTIzNzAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCkBAIC0xMjA0MCw4ICsxMjM5Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xMjA2NSw4ICsxMjQxOSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRG9jayBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBCb29zdCIsIDB4MWIsIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCkBAIC0xMjEwMywxMyArMTI0NTUsNiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLS8qIGJlZXAgY29udHJvbCAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9iZWVwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X3F1YW50YV9mbDFfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCkBAIC0xMjUwOSw3ICsxMjg1NCw3IEBACiAJICovCiAJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdID09IDB4MTIgfHwKIAkgICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ10gPT0gMHgxMikgewotCQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9ICJJbnQgTWljIjsKIAkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IDB4MDU7CiAJCWltdXgtPm51bV9pdGVtcysrOwpAQCAtMTI1MjcsMTMgKzEyODcyLDM0IEBACiAjZGVmaW5lIGFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjawlhbGM4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sKICNkZWZpbmUgYWxjMjY5X3BjbV9kaWdpdGFsX2NhcHR1cmUJYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUKIAorc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGMyNjlfNDRrX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSA4LAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwLCAvKiBmaXhlZCByYXRlICovCisJLyogTklEIGlzIHNldCBpbiBhbGNfYnVpbGRfcGNtcyAqLworCS5vcHMgPSB7CisJCS5vcGVuID0gYWxjODgwX3BsYXliYWNrX3BjbV9vcGVuLAorCQkucHJlcGFyZSA9IGFsYzg4MF9wbGF5YmFja19wY21fcHJlcGFyZSwKKwkJLmNsZWFudXAgPSBhbGM4ODBfcGxheWJhY2tfcGNtX2NsZWFudXAKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGMyNjlfNDRrX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKKwkuc3Vic3RyZWFtcyA9IDEsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAsIC8qIGZpeGVkIHJhdGUgKi8KKwkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCit9OworCiAvKgogICogQklPUyBhdXRvIGNvbmZpZ3VyYXRpb24KICAqLwogc3RhdGljIGludCBhbGMyNjlfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5X2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKQEAgLTEyNTUwLDIyICsxMjkxNiwxNSBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjY5X0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwogCi0JLyogY3JlYXRlIGEgYmVlcCBtaXhlciBjb250cm9sIGlmIHRoZSBwaW4gMHgxZCBpc24ndCBhc3NpZ25lZCAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaW5wdXRfcGlucyk7IGkrKykKLQkJaWYgKHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXSA9PSAweDFkKQotCQkJYnJlYWs7Ci0JaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnMpKQotCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY5X2JlZXBfbWl4ZXIpOwotCiAJYWRkX3ZlcmIoc3BlYywgYWxjMjY5X2luaXRfdmVyYnMpOwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCS8qIHNldCBkZWZhdWx0IGlucHV0IHNvdXJjZSAqLwogCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGFsYzI2OV9jYXBzcmNfbmlkc1swXSwKIAkJCQkgIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLApAQCAtMTI1NzUsMTAgKzEyOTM0LDkgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICghc3BlYy0+Y2FwX21peGVyKQorCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMjY3NSw3ICsxMzAzMyw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfZWVlcGNfZG1pY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjlfRlVKSVRTVV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OV9mdWppdHN1X21peGVyLCBhbGMyNjlfYmVlcF9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjlfZnVqaXRzdV9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5X2luaXRfdmVyYnMsCiAJCQkJYWxjMjY5X2VlZXBjX2RtaWNfaW5pdF92ZXJicyB9LApAQCAtMTI3NDAsMTMgKzEzMDk4LDI2IEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEMyNjlfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGMyNjlfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIAogCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEMyNjkgQW5hbG9nIjsKLQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2OV9wY21fYW5hbG9nX3BsYXliYWNrOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2FuYWxvZ19jYXB0dXJlOwotCisJaWYgKGNvZGVjLT5zdWJzeXN0ZW1faWQgPT0gMHgxN2FhM2JmOCkgeworCQkvKiBEdWUgdG8gYSBoYXJkd2FyZSBwcm9ibGVtIG9uIExlbm92byBJZGVhZHBhZCwgd2UgbmVlZCB0bworCQkgKiBmaXggdGhlIHNhbXBsZSByYXRlIG9mIGFuYWxvZyBJL08gdG8gNDQuMWtIegorCQkgKi8KKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjlfNDRrX3BjbV9hbmFsb2dfcGxheWJhY2s7CisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjlfNDRrX3BjbV9hbmFsb2dfY2FwdHVyZTsKKwl9IGVsc2UgeworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2OV9wY21fYW5hbG9nX3BsYXliYWNrOworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY5X3BjbV9hbmFsb2dfY2FwdHVyZTsKKwl9CiAJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEMyNjkgRGlnaXRhbCI7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjMjY5X3BjbV9kaWdpdGFsX2NhcHR1cmU7CkBAIC0xMjc1Niw2ICsxMzEyNyw3IEBACiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjlfY2Fwc3JjX25pZHM7CiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA0LCBIREFfSU5QVVQpOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEMyNjlfQVVUTykKQEAgLTEzMDA2LDggKzEzMzc4LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjFfYXN1c19sYXB0b3BfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMywgMHgwLCBIREFfT1VUUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEzNDgxLDcgKzEzODUxLDcgQEAKIHN0YXRpYyBpbnQgYWxjODYxX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeCwgaWR4MTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTEzNTY4LDEyICsxMzkzOCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCWlmIChuaWQgPj0gMHgwYyAmJiBuaWQgPD0gMHgxMSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCX0KKwkJaWYgKG5pZCA+PSAweDBjICYmIG5pZCA8PSAweDExKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CiAJfQogfQogCkBAIC0xMzYwOSw3ICsxMzk3NSw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4NjFfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQpAQCAtMTM2MTgsMTMgKzEzOTg0LDEyIEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjODYxX2F1dG9faW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCXNwZWMtPmFkY19uaWRzID0gYWxjODYxX2FkY19uaWRzOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODYxX2FkY19uaWRzKTsKIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTM4MzMsNiArMTQxOTgsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDIzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4NjFfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4NjFfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTM4NDQsNiArMTQyMTUsOCBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg2MV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg2MV9wY21fZGlnaXRhbF9jYXB0dXJlOwogCisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MjMsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAzOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CkBAIC0xNDAwMCw5ICsxNDM3Myw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQwMjYsOSArMTQzOTYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE0MDY3LDggKzE0NDM0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQzNzksOSArMTQ3NDQsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMDMsICJUb3NoaWJhIFAyMDUiLCBBTEM4NjFWRF9MRU5PVk8pLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMzEsICJUb3NoaWJhIEwzMC0xNDkiLCBBTEM4NjFWRF9EQUxMQVMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGQsICJCaW9zdGFyIE5GNjFTIFNFIiwgQUxDODYxVkRfNlNUX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjA2NiwgIkxlbm92byIsIEFMQzg2MVZEX0xFTk9WTyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzgwMiwgIkxlbm92byAzMDAwIEMyMDAiLCBBTEM4NjFWRF9MRU5PVk8pLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4NGUsICJMZW5vdm8gMzAwMCBOMjAwIiwgQUxDODYxVkRfTEVOT1ZPKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8iLCBBTEM4NjFWRF9MRU5PVk8pLAogCVNORF9QQ0lfUVVJUksoMHgxODQ5LCAweDA4NjIsICJBU1JvY2sgSzhORjZHLVZTVEEiLCBBTEM4NjFWRF82U1RfRElHKSwKIAl7fQogfTsKQEAgLTE0NTQzLDExICsxNDkwNiw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODYxdmRfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQlpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCQkJUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCQlpZiAobmlkICE9IEFMQzg2MVZEX1BJTl9DRF9OSUQpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDODYxVkRfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQlBTVBfT1VUX01VVEUpOwpAQCAtMTQ3MTMsNyArMTUwNzQsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODYxVkRfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQpAQCAtMTQ3MjIsMTMgKzE1MDgzLDEyIEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjODYxdmRfdm9sdW1lX2luaXRfdmVyYnMpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTQ3NzksNiArMTUxMzksMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDIzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4NjFWRF9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg2MXZkX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTE0ODAxLDkgKzE1MTY3LDEwIEBACiAJc3BlYy0+YWRjX25pZHMgPSBhbGM4NjF2ZF9hZGNfbmlkczsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MXZkX2FkY19uaWRzKTsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg2MXZkX2NhcHNyY19uaWRzOwotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsKKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7CiAKIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIApAQCAtMTQ5OTIsOCArMTUzNTksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTUwMTUsOCArMTUzODAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTU5OTIsNTYgKzE2MzU1LDU1IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2NmZ190YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg5MDg3LCAiRUNTIiwgQUxDNjYyX0VDUyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAwMCwgIkFTVVMgTjUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFjMywgIkFTVVMgTTcwViIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjAzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmMzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzUzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzY1LCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzgzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODIzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODMzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODQzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODY0LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc2LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTFWQSIsIEFMQzY2M19BU1VTX001MVZBKSwKKwkvKlNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzgsICJBU1VTIE01MFZyIiwgQUxDNjYzX0FTVVNfTU9ERTEpLCovCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5MywgIkFTVVMgTTUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5NCwgIkFTVVMgWDU1IiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MDMsICJBU1VTIEY1R0wiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkzMywgIkFTVVMgRjgwUSIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTYzLCAiQVNVUyBYNzFDIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5OTMsICJBU1VTIE4yMCIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBHNTBWIiwgQUxDNjYzX0FTVVNfRzUwViksCisJLypTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwqLworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YjMsICJBU1VTIEY3WiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWMzLCAiQVNVUyBGNVovRjZ4IiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyOTAsICJBU1VTIFA1R0MtTVgiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyYTEsICJBU1VTIEVlZXBjIiwgQUxDNjYyX0FTVVNfRUVFUENfUDcwMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODJkMSwgIkFTVVMgRWVlcGMgRVAyMCIsIEFMQzY2Ml9BU1VTX0VFRVBDX0VQMjApLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MDMsICJBU1VTIEY1R0wiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUwVnIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAwMCwgIkFTVVMgTjUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTliMywgIkFTVVMgRjdaIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyMDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5OTMsICJBU1VTIE4yMCIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWMzLCAiQVNVUyBGNVovRjZ4IiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NDMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZjMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzYsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NjQsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3ODMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YzMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5MzMsICJBU1VTIEY4MFEiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5MywgIkFTVVMgTTUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFjMywgIkFTVVMgTTcwViIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTYzLCAiQVNVUyBYNzFDIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4OTQsICJBU1VTIFg1NSIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDkyLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU0KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODIzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU1KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODMzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzYzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzY1LCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREU2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwY2Q2LCAiRm94Y29ubiIsIEFMQzY2Ml9FQ1MpLAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBkNDcsICJGb3hjb25uIDQ1Q01YLzQ1R01YLzQ1Q01YLUsiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMWUsICJMZW5vdm8iLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDkwODcsICJFQ1MiLCBBTEM2NjJfRUNTKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwY2Q2LCAiRm94Y29ubiIsIEFMQzY2Ml9FQ1MpLAogCVNORF9QQ0lfUVVJUksoMHgxNDU4LCAweGEwMDIsICJHaWdhYnl0ZSA5NDVHQ00tUzJMIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU2NSwgMHg4MjBmLCAiQmlvc3RhciBUQTc4MEcgTTIrIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDFlLCAiTGVub3ZvIiwgQUxDNjYyX0xFTk9WT18xMDFFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgzNjYyLCAiQVNST0NLIEsxME43OEZ1bGxIRC1oU0xJIFIzLjAiLAogCQkJCQlBTEM2NjJfM1NUXzZjaF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxODU0LCAweDIwMDAsICJBU1VTIEgxMy0yMDAwIiwgQUxDNjYzX0FTVVNfSDEzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgyMDAxLCAiQVNVUyBIMTMtMjAwMSIsIEFMQzY2M19BU1VTX0gxMyksCi0JU05EX1BDSV9RVUlSSygweDE4NTQsIDB4MjAwMiwgIkFTVVMgSDEzLTIwMDIiLCBBTEM2NjNfQVNVU19IMTMpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE4NTQsIDB4ZjAwMCwgMHgyMDAwLCAiQVNVUyBIMTMtMjAweCIsCisJCQkgICBBTEM2NjNfQVNVU19IMTMpLAogCXt9CiB9OwogCkBAIC0xNjM2MSw3ICsxNjcyMyw3IEBACiAKIAlpZiAoYWxjODgwX2lzX2ZpeGVkX3BpbihwaW4pKSB7CiAJCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGFsYzg4MF9maXhlZF9waW5faWR4KHBpbikpOwotICAgICAgICAgICAgICAgIC8qIHByaW50aygiREFDIG5pZD0leFxuIixuaWQpOyAqLworCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiREFDIG5pZD0leFxuIixuaWQpOyAqLwogCQkvKiBzcGVjaWZ5IHRoZSBEQUMgYXMgdGhlIGV4dHJhIG91dHB1dCAqLwogCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKIAkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IG5pZDsKQEAgLTE2MzkxLDI2ICsxNjc1Myw1OCBAQAogCXJldHVybiAwOwogfQogCisvKiByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzcmMgd2lkZ2V0IGZyb20gdGhlIGNvbm5lY3Rpb24gbGlzdCBvZiB0aGUgbmlkLgorICogcmV0dXJuIC0xIGlmIG5vdCBmb3VuZAorICovCitzdGF0aWMgaW50IGFsYzY2Ml9pbnB1dF9waW5faWR4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCWhkYV9uaWRfdCBzcmMpCit7CisJaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX0NPTk5FQ1RJT05TXTsKKwlpbnQgaSwgY29ubnM7CisKKwljb25ucyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm5fbGlzdCwKKwkJCQkJQVJSQVlfU0laRShjb25uX2xpc3QpKTsKKwlpZiAoY29ubnMgPCAwKQorCQlyZXR1cm4gLTE7CisJZm9yIChpID0gMDsgaSA8IGNvbm5zOyBpKyspCisJCWlmIChjb25uX2xpc3RbaV0gPT0gc3JjKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGFsYzY2Ml9pc19pbnB1dF9waW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJdW5zaWduZWQgaW50IHBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CisJcmV0dXJuIChwaW5jYXAgJiBBQ19QSU5DQVBfSU4pICE9IDA7Cit9CisKIC8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zICovCi1zdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeDsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKLQkJaWYgKGFsYzg4MF9pc19pbnB1dF9waW4oY2ZnLT5pbnB1dF9waW5zW2ldKSkgewotCQkJaWR4ID0gYWxjODgwX2lucHV0X3Bpbl9pZHgoY2ZnLT5pbnB1dF9waW5zW2ldKTsKLQkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAotCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwKLQkJCQkJICAgICAgIGlkeCwgMHgwYik7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9Ci0JCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPQotCQkJCWFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7Ci0JCQlpbXV4LT5udW1faXRlbXMrKzsKKwkJaWYgKGFsYzY2Ml9pc19pbnB1dF9waW4oY29kZWMsIGNmZy0+aW5wdXRfcGluc1tpXSkpIHsKKwkJCWlkeCA9IGFsYzY2Ml9pbnB1dF9waW5faWR4KGNvZGVjLCAweDBiLAorCQkJCQkJICAgY2ZnLT5pbnB1dF9waW5zW2ldKTsKKwkJCWlmIChpZHggPj0gMCkgeworCQkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAorCQkJCQkJICAgICAgIGF1dG9fcGluX2NmZ19sYWJlbHNbaV0sCisJCQkJCQkgICAgICAgaWR4LCAweDBiKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJCWlkeCA9IGFsYzY2Ml9pbnB1dF9waW5faWR4KGNvZGVjLCAweDIyLAorCQkJCQkJICAgY2ZnLT5pbnB1dF9waW5zW2ldKTsKKwkJCWlmIChpZHggPj0gMCkgeworCQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPQorCQkJCQlhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldOworCQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSBpZHg7CisJCQkJaW11eC0+bnVtX2l0ZW1zKys7CisJCQl9CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0xNjQ2MCw3ICsxNjg1NCw2IEBACiAJCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULCAwKTsKIH0KIAotI2RlZmluZSBhbGM2NjJfaXNfaW5wdXRfcGluKG5pZCkJYWxjODgwX2lzX2lucHV0X3BpbihuaWQpCiAjZGVmaW5lIEFMQzY2Ml9QSU5fQ0RfTklECQlBTEM4ODBfUElOX0NEX05JRAogCiBzdGF0aWMgdm9pZCBhbGM2NjJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTE2NDcwLDEyICsxNjg2MywxMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwotCQlpZiAoYWxjNjYyX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pKTsKLQkJCWlmIChuaWQgIT0gQUxDNjYyX1BJTl9DRF9OSUQpCisJCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKGNvZGVjLCBuaWQpKSB7CisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKKwkJCWlmIChuaWQgIT0gQUxDNjYyX1BJTl9DRF9OSUQgJiYKKwkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKIAkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtMTY1MTMsMjAgKzE2OTA0LDIwIEBACiAJCQkJCSAgICJIZWFkcGhvbmUiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQ7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwogCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlhZGRfdmVyYihzcGVjLCBhbGM2NjJfYXV0b19pbml0X3ZlcmJzKTsKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzKQpAQCAtMTY1MzYsNyArMTY5MjcsNiBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xNjU4OCw2ICsxNjk3OCwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJaWYgKGVyciA8IDApIHsKKwkJYWxjX2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWlmIChib2FyZF9jb25maWcgIT0gQUxDNjYyX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjNjYyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKQEAgLTE2NjExLDEwICsxNzAwNywxNCBAQAogCXNwZWMtPmFkY19uaWRzID0gYWxjNjYyX2FkY19uaWRzOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2FkY19uaWRzKTsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzY2Ml9jYXBzcmNfbmlkczsKLQlzcGVjLT5pc19taXhfY2FwdHVyZSA9IDE7CisJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOwogCiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjIpCisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOworCWVsc2UKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA2MDk0MzQ0Li5iNWUxMDhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC00Myw2ICs0Myw3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDX0FVVE8sCiAJU1RBQ19SRUYsCiAJU1RBQ185MjAwX09RTywKIAlTVEFDXzkyMDBfREVMTF9EMjEsCkBAIC02MiwxNCArNjMsMTcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTIwNV9BVVRPLAogCVNUQUNfOTIwNV9SRUYsCiAJU1RBQ185MjA1X0RFTExfTTQyLAogCVNUQUNfOTIwNV9ERUxMX000MywKIAlTVEFDXzkyMDVfREVMTF9NNDQsCisJU1RBQ185MjA1X0VBUEQsCiAJU1RBQ185MjA1X01PREVMUwogfTsKIAogZW51bSB7CisJU1RBQ185MkhENzNYWF9BVVRPLAogCVNUQUNfOTJIRDczWFhfTk9fSkQsIC8qIG5vIGphY2stZGV0ZWN0aW9uICovCiAJU1RBQ185MkhENzNYWF9SRUYsCiAJU1RBQ19ERUxMX002X0FNSUMsCkBAIC04MCwyMiArODQsMjcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTJIRDgzWFhYX0FVVE8sCiAJU1RBQ185MkhEODNYWFhfUkVGLAogCVNUQUNfOTJIRDgzWFhYX1BXUl9SRUYsCisJU1RBQ19ERUxMX1MxNCwKIAlTVEFDXzkySEQ4M1hYWF9NT0RFTFMKIH07CiAKIGVudW0geworCVNUQUNfOTJIRDcxQlhYX0FVVE8sCiAJU1RBQ185MkhENzFCWFhfUkVGLAogCVNUQUNfREVMTF9NNF8xLAogCVNUQUNfREVMTF9NNF8yLAogCVNUQUNfREVMTF9NNF8zLAogCVNUQUNfSFBfTTQsCiAJU1RBQ19IUF9EVjUsCisJU1RBQ19IUF9IRFgsCiAJU1RBQ185MkhENzFCWFhfTU9ERUxTCiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyNXhfQVVUTywKIAlTVEFDXzkyNXhfUkVGLAogCVNUQUNfTTEsCiAJU1RBQ19NMV8yLApAQCAtMTA4LDYgKzExNyw3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyMlhfQVVUTywKIAlTVEFDX0Q5NDVfUkVGLAogCVNUQUNfRDk0NUdUUDMsCiAJU1RBQ19EOTQ1R1RQNSwKQEAgLTEzNSw2ICsxNDUsNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MjdYX0FVVE8sCiAJU1RBQ19EOTY1X1JFRl9OT19KRCwgLyogbm8gamFjay1kZXRlY3Rpb24gKi8KIAlTVEFDX0Q5NjVfUkVGLAogCVNUQUNfRDk2NV8zU1QsCkBAIC0xNDQsNiArMTU1LDEyIEBACiAJU1RBQ185MjdYX01PREVMUwogfTsKIAorZW51bSB7CisJU1RBQ185ODcyX0FVVE8sCisJU1RBQ185ODcyX1ZBSU8sCisJU1RBQ185ODcyX01PREVMUworfTsKKwogc3RydWN0IHNpZ21hdGVsX2V2ZW50IHsKIAloZGFfbmlkX3QgbmlkOwogCXVuc2lnbmVkIGNoYXIgdHlwZTsKQEAgLTE2Nyw2ICsxODQsNyBAQAogCXVuc2lnbmVkIGludCBhbHRfc3dpdGNoOiAxOwogCXVuc2lnbmVkIGludCBocF9kZXRlY3Q6IDE7CiAJdW5zaWduZWQgaW50IHNwZGlmX211dGU6IDE7CisJdW5zaWduZWQgaW50IGNoZWNrX3ZvbHVtZV9vZmZzZXQ6MTsKIAogCS8qIGdwaW8gbGluZXMgKi8KIAl1bnNpZ25lZCBpbnQgZWFwZF9tYXNrOwpAQCAtMTc5LDYgKzE5Nyw3IEBACiAJdW5zaWduZWQgaW50IHN0cmVhbV9kZWxheTsKIAogCS8qIGFuYWxvZyBsb29wYmFjayAqLworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICphbG9vcGJhY2tfY3RsOwogCXVuc2lnbmVkIGNoYXIgYWxvb3BiYWNrX21hc2s7CiAJdW5zaWduZWQgY2hhciBhbG9vcGJhY2tfc2hpZnQ7CiAKQEAgLTIwMyw2ICsyMjIsOCBAQAogCWhkYV9uaWRfdCBocF9kYWNzWzVdOwogCWhkYV9uaWRfdCBzcGVha2VyX2RhY3NbNV07CiAKKwlpbnQgdm9sdW1lX29mZnNldDsKKwogCS8qIGNhcHR1cmUgKi8KIAloZGFfbmlkX3QgKmFkY19uaWRzOwogCXVuc2lnbmVkIGludCBudW1fYWRjczsKQEAgLTIyNCw3ICsyNDUsNiBAQAogCS8qIHBpbiB3aWRnZXRzICovCiAJaGRhX25pZF90ICpwaW5fbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX3BpbnM7Ci0JdW5zaWduZWQgaW50ICpwaW5fY29uZmlnczsKIAogCS8qIGNvZGVjIHNwZWNpZmljIHN0dWZmICovCiAJc3RydWN0IGhkYV92ZXJiICppbml0OwpAQCAtNDAwLDYgKzQyMCwxMCBAQAogICAgICAgICAweDEyLCAweDEzLAogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9zbGF2ZV9kaWdfb3V0c1syXSA9IHsKKwkweDFmLCAwLAorfTsKKwogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9hZGNfbmlkc1szXSA9IHsKICAgICAgICAgMHgwNywgMHgwOCwgMHgwOQogfTsKQEAgLTQ3MiwxNSArNDk2LDIxIEBACiAJMHgxNCwgMHgyMiwgMHgyMwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X3Bpbl9uaWRzWzE0XSA9IHsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9waW5fbmlkc1sxMF0gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwKLQkweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLAotCTB4MWQsIDB4MWUsIDB4MWYsIDB4MjAKKwkweDBmLCAweDEwLCAweDExLCAweDFmLCAweDIwLAogfTsKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc1sxMV0gPSB7CisKKyNkZWZpbmUgU1RBQzkySEQ3MUJYWF9OVU1fUElOUyAxMworc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzRwb3J0W1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0geworCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgxOCwgMHgxOSwgMHgxZSwKKwkweDFmLCAweDIwLCAweDI3Cit9Oworc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzZwb3J0W1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsCiAJMHgwZiwgMHgxNCwgMHgxOCwgMHgxOSwgMHgxZSwKLQkweDFmLAorCTB4MWYsIDB4MjAsIDB4MjcKIH07CiAKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfcGluX25pZHNbMTRdID0gewpAQCAtODQyLDkgKzg3Miw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkODN4eHhfY29yZV9pbml0W10gPSB7Ci0JeyAweGEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAotCXsgMHhiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKLQl7IDB4ZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJeyAweGEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCXsgMHhiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwl7IDB4ZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCiAKIAkvKiBwb3dlciBzdGF0ZSBjb250cm9scyBhbXBzICovCiAJeyAweDAxLCBBQ19WRVJCX1NFVF9FQVBELCAxIDw8IDJ9LApAQCAtODU0LDI2ICs4ODQsMjUgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8KIAl7IDB4MjgsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LAotCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwYSwgMHhkLCAweDBmICovCi0JeyAweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJe30KIH07CiAKLSNkZWZpbmUgSERfRElTQUJMRV9QT1JURiAyCisjZGVmaW5lIEhEX0RJU0FCTEVfUE9SVEYgMQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbXSA9IHsKIAkvKiBzdGFydCBvZiBjb25maWcgIzEgKi8KIAogCS8qIGNvbm5lY3QgcG9ydCAwZiB0byBhdWRpbyBtaXhlciAqLwogCXsgMHgwZiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4Mn0sCi0JLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlIDB4MGYgKi8KLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIHN0YXJ0IG9mIGNvbmZpZyAjMiAqLwogCiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKLQkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGEsIDB4ZCAqLworCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdFtdID0geworCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwZiwgMHhhLCAweDBkICovCisJeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IDB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgMHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJe30KQEAgLTk1NCwxNiArOTgzLDYgQEAKIAkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCBpZHgsIGRpcikgXAogCX0KIAotI2RlZmluZSBTVEFDX0lOUFVUX1NPVVJDRShjbnQpIFwKLQl7IFwKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKLQkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwgXAotCQkuY291bnQgPSBjbnQsIFwKLQkJLmluZm8gPSBzdGFjOTJ4eF9tdXhfZW51bV9pbmZvLCBcCi0JCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsIFwKLQkJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwgXAotCX0KLQogI2RlZmluZSBTVEFDX0FOQUxPR19MT09QQkFDSyh2ZXJiX3JlYWQsIHZlcmJfd3JpdGUsIGNudCkgXAogCXsgXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXApAQCAtOTc4LDcgKzk5Nyw2IEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHhiLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4YiwgMCwgSERBX09VVFBVVCksCi0JU1RBQ19JTlBVVF9TT1VSQ0UoMSksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBhLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBhLCAwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC0xMDAzLDggKzEwMjEsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkRBQyBNaXhlciBDYXB0dXJlIFZvbHVtZSIsIDB4MWQsIDB4MywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiREFDIE1peGVyIENhcHR1cmUgU3dpdGNoIiwgMHgxZCwgMHgzLCBIREFfSU5QVVQpLAogCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCAzKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMDE0LDkgKzEwMzAsMjIgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9taXhlcltdID0gewotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNCksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzZjaF9sb29wYmFja1tdID0geworCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgMyksCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA0KSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF8xMGNoX2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA1KSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTA0MSw4ICsxMDcwLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfMTBjaF9taXhlcltdID0gewotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMSwgNSksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTA5NCw5ICsxMTIxLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X2FuYWxvZ19taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMiksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTEyMiwxMCArMTE0NiwxMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKQorfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTEzNywxNiArMTE2MiwxMiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjV4X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMCwgSERBX09VVFBVVCksCi0JU1RBQ19JTlBVVF9TT1VSQ0UoMSksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE0LCAwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDVfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFMCwgMHg3RTAsIDEpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTE1NSw5ICsxMTc2LDEzIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjA1X2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRTAsIDB4N0UwLCAxKSwKKwl7fQorfTsKKwogLyogVGhpcyBuZWVkcyB0byBiZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VxdWVuY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIyeF9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKIApAQCAtMTE2OCw5ICsxMTkzLDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyN3hfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgzKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFQiwgMHg3RUIsIDEpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDE4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTE4Miw2ICsxMjA0LDExIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5Mjd4X2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRUIsIDB4N0VCLCAxKSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWNfZG11eF9taXhlciA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJEaWdpdGFsIElucHV0IFNvdXJjZSIsCkBAIC0xMjA3LDEwICsxMjM0LDcgQEAKIAkiTEZFIFBsYXliYWNrIFZvbHVtZSIsCiAJIlNpZGUgUGxheWJhY2sgVm9sdW1lIiwKIAkiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsCi0JIkhlYWRwaG9uZTIgUGxheWJhY2sgVm9sdW1lIiwKIAkiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAotCSJFeHRlcm5hbCBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCi0JIlNwZWFrZXIyIFBsYXliYWNrIFZvbHVtZSIsCiAJTlVMTAogfTsKIApAQCAtMTIyMSwxMCArMTI0NSw3IEBACiAJIkxGRSBQbGF5YmFjayBTd2l0Y2giLAogCSJTaWRlIFBsYXliYWNrIFN3aXRjaCIsCiAJIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAotCSJIZWFkcGhvbmUyIFBsYXliYWNrIFN3aXRjaCIsCiAJIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkiRXh0ZXJuYWwgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAotCSJTcGVha2VyMiBQbGF5YmFjayBTd2l0Y2giLAogCSJJRUM5NTggUGxheWJhY2sgU3dpdGNoIiwKIAlOVUxMCiB9OwpAQCAtMTI5NCw2ICsxMzE1LDggQEAKIAkJdW5zaWduZWQgaW50IHZtYXN0ZXJfdGx2WzRdOwogCQlzbmRfaGRhX3NldF92bWFzdGVyX3Rsdihjb2RlYywgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0sCiAJCQkJCUhEQV9PVVRQVVQsIHZtYXN0ZXJfdGx2KTsKKwkJLyogY29ycmVjdCB2b2x1bWUgb2Zmc2V0ICovCisJCXZtYXN0ZXJfdGx2WzJdICs9IHZtYXN0ZXJfdGx2WzNdICogc3BlYy0+dm9sdW1lX29mZnNldDsKIAkJZXJyID0gc25kX2hkYV9hZGRfdm1hc3Rlcihjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAogCQkJCQkgIHZtYXN0ZXJfdGx2LCBzbGF2ZV92b2xzKTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMzA2LDYgKzEzMjksMTMgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKHNwZWMtPmFsb29wYmFja19jdGwgJiYKKwkgICAgc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAibG9vcGJhY2siKSA9PSAxKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBzcGVjLT5hbG9vcGJhY2tfY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCXN0YWM5Mnh4X2ZyZWVfa2N0bHMoY29kZWMpOyAvKiBubyBsb25nZXIgbmVlZGVkICovCiAKIAkvKiBjcmVhdGUgamFjayBpbnB1dCBlbGVtZW50cyAqLwpAQCAtMTQ5MCw2ICsxNTIwLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTIwMF9tb2RlbHNbU1RBQ185MjAwX01PREVMU10gPSB7CisJW1NUQUNfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfUkVGXSA9ICJyZWYiLAogCVtTVEFDXzkyMDBfT1FPXSA9ICJvcW8iLAogCVtTVEFDXzkyMDBfREVMTF9EMjFdID0gImRlbGwtZDIxIiwKQEAgLTE1MTEsNiArMTU0Miw4IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAogCS8qIERlbGwgbGFwdG9wcyBoYXZlIEJJT1MgcHJvYmxlbSAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxYTgsCiAJCSAgICAgICJ1bmtub3duIERlbGwiLCBTVEFDXzkyMDBfREVMTF9EMjEpLApAQCAtMTYzMyw2ICsxNjY2LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTI1eF9tb2RlbHNbU1RBQ185MjV4X01PREVMU10gPSB7CisJW1NUQUNfOTI1eF9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ19SRUZdID0gInJlZiIsCiAJW1NUQUNfTTFdID0gIm0xIiwKIAlbU1RBQ19NMV8yXSA9ICJtMS0yIiwKQEAgLTE2NjAsNiArMTY5NCw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyNXhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LCAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKIAlTTkRfUENJX1FVSVJLKDB4ODM4NCwgMHg3NjMyLCAiU3RhYzkyMDIgUmVmZXJlbmNlIEJvYXJkIiwgU1RBQ19SRUYpLAogCiAJLyogRGVmYXVsdCB0YWJsZSBmb3IgdW5rbm93biBJRCAqLwpAQCAtMTY5MSw2ICsxNzI2LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJoZDczeHhfbW9kZWxzW1NUQUNfOTJIRDczWFhfTU9ERUxTXSA9IHsKKwlbU1RBQ185MkhENzNYWF9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MkhENzNYWF9OT19KRF0gPSAibm8tamQiLAogCVtTVEFDXzkySEQ3M1hYX1JFRl0gPSAicmVmIiwKIAlbU1RBQ19ERUxMX002X0FNSUNdID0gImRlbGwtbTYtYW1pYyIsCkBAIC0xNzAzLDYgKzE3MzksOCBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkJCSJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ3M1hYX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkJCSJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ3M1hYX1JFRiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDI1NCwKIAkJCQkiRGVsbCBTdHVkaW8gMTUzNSIsIFNUQUNfREVMTF9NNl9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjU1LApAQCAtMTcyNiw1MiArMTc2NCw2OCBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzWzE0XSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAyMjE0MDMwLCAweDAyMjExMDEwLCAweDAyYTE5MDIwLCAweDAyMTcwMTMwLAogCTB4MDEwMTQwNTAsIDB4MDE4MTkwNDAsIDB4MDEwMTQwMjAsIDB4OTBhMzAxNGUsCi0JMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwKIAkweDAxNDUxMTYwLCAweDk4NTYwMTcwLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX3MxNF9waW5fY29uZmlnc1sxMF0gPSB7CisJMHgwMjIxNDAzMCwgMHgwMjIxMTAxMCwgMHgwMmExOTAyMCwgMHgwMTAxNDA1MCwKKwkweDQwZjAwMGYwLCAweDAxODE5MDQwLCAweDQwZjAwMGYwLCAweDkwYTYwMTYwLAorCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCit9OworCiBzdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTJoZDgzeHh4X2JyZF90YmxbU1RBQ185MkhEODNYWFhfTU9ERUxTXSA9IHsKIAlbU1RBQ185MkhEODNYWFhfUkVGXSA9IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlncywKIAlbU1RBQ185MkhEODNYWFhfUFdSX1JFRl0gPSByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3MsCisJW1NUQUNfREVMTF9TMTRdID0gZGVsbF9zMTRfcGluX2NvbmZpZ3MsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyaGQ4M3h4eF9tb2RlbHNbU1RBQ185MkhEODNYWFhfTU9ERUxTXSA9IHsKKwlbU1RBQ185MkhEODNYWFhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTJIRDgzWFhYX1JFRl0gPSAicmVmIiwKIAlbU1RBQ185MkhEODNYWFhfUFdSX1JFRl0gPSAibWljLXJlZiIsCisJW1NUQUNfREVMTF9TMTRdID0gImRlbGwtczE0IiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDgzeHh4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDgzWFhYX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhEODNYWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMmJhLAorCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ19ERUxMX1MxNCksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCByZWY5MmhkNzFieHhfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCByZWY5MmhkNzFieHhfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMmExOTA0MCwgMHgwMWExOTAyMCwgMHgwMTAxNDAxMCwKIAkweDAxODEzMDJlLCAweDAxMDE0MDEwLCAweDAxMDE5MDIwLCAweDkwYTAwMGYwLAotCTB4OTBhMDAwZjAsIDB4MDE0NTIwNTAsIDB4MDE0NTIwNTAsCisJMHg5MGEwMDBmMCwgMHgwMTQ1MjA1MCwgMHgwMTQ1MjA1MCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMV9waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfMV9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDQwZjAwMGYwLCAweDkwMTcwMTEwLAogCTB4MjNhMTkwMmUsIDB4MjMwMTQyNTAsIDB4NDBmMDAwZjAsIDB4OTBhMDAwZjAsCi0JMHg0MGYwMDBmMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwKKwkweDQwZjAwMGYwLCAweDRmMDAwMGYwLCAweDRmMDAwMGYwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8yX3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8yX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4OTBhNzAzMzAsIDB4OTAxNzAxMTAsCiAJMHgyM2ExOTAyZSwgMHgyMzAxNDI1MCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwKLQkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLAorCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzNfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzNfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg5MGE3MDMzMCwgMHg5MDE3MDExMCwKIAkweDQwZjAwMGYwLCAweDQwZjAwMGYwLCAweDQwZjAwMGYwLCAweDkwYTAwMGYwLAotCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsCisJMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTJoZDcxYnh4X2JyZF90YmxbU1RBQ185MkhENzFCWFhfTU9ERUxTXSA9IHsKQEAgLTE3ODEsMzUgKzE4MzUsMzggQEAKIAlbU1RBQ19ERUxMX000XzNdCT0gZGVsbF9tNF8zX3Bpbl9jb25maWdzLAogCVtTVEFDX0hQX000XQkJPSBOVUxMLAogCVtTVEFDX0hQX0RWNV0JCT0gTlVMTCwKKwlbU1RBQ19IUF9IRFhdICAgICAgICAgICA9IE5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyaGQ3MWJ4eF9tb2RlbHNbU1RBQ185MkhENzFCWFhfTU9ERUxTXSA9IHsKKwlbU1RBQ185MkhENzFCWFhfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTJIRDcxQlhYX1JFRl0gPSAicmVmIiwKIAlbU1RBQ19ERUxMX000XzFdID0gImRlbGwtbTQtMSIsCiAJW1NUQUNfREVMTF9NNF8yXSA9ICJkZWxsLW00LTIiLAogCVtTVEFDX0RFTExfTTRfM10gPSAiZGVsbC1tNC0zIiwKIAlbU1RBQ19IUF9NNF0gPSAiaHAtbTQiLAogCVtTVEFDX0hQX0RWNV0gPSAiaHAtZHY1IiwKKwlbU1RBQ19IUF9IRFhdID0gImhwLWhkeCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyaGQ3MWJ4eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ3MUJYWF9SRUYpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzMGYyLAotCQkgICAgICAiSFAgZHY1IiwgU1RBQ19IUF9NNCksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDMwZjQsCi0JCSAgICAgICJIUCBkdjciLCBTVEFDX0hQX0RWNSksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDMwZjcsCi0JCSAgICAgICJIUCBkdjQiLCBTVEFDX0hQX0RWNSksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDMwZmMsCi0JCSAgICAgICJIUCBkdjciLCBTVEFDX0hQX000KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYwMCwKLQkJICAgICAgIkhQIGR2NSIsIFNUQUNfSFBfRFY1KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYwMywKLQkJICAgICAgIkhQIGR2NSIsIFNUQUNfSFBfRFY1KSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ3MUJYWF9SRUYpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzA4MCwKKwkJICAgICAgIkhQIiwgU1RBQ19IUF9EVjUpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzBmMCwKKwkJICAgICAgIkhQIGR2NC03IiwgU1RBQ19IUF9EVjUpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzYwMCwKKwkJICAgICAgIkhQIGR2NC03IiwgU1RBQ19IUF9EVjUpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjEwLAorCQkgICAgICAiSFAgSERYIiwgU1RBQ19IUF9IRFgpLCAgLyogSERYMTggKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYxYSwKLQkJCQkidW5rbm93biBIUCIsIFNUQUNfSFBfTTQpLAorCQkgICAgICAiSFAgbWluaSAxMDAwIiwgU1RBQ19IUF9NNCksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MWIsCisJCSAgICAgICJIUCBIRFgiLCBTVEFDX0hQX0hEWCksICAvKiBIRFgxNiAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMzMsCiAJCQkJInVua25vd24gRGVsbCIsIFNUQUNfREVMTF9NNF8xKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjM0LApAQCAtMTk2MSw2ICsyMDE4LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTIyeF9tb2RlbHNbU1RBQ185MjJYX01PREVMU10gPSB7CisJW1NUQUNfOTIyWF9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ19EOTQ1X1JFRl0JPSAicmVmIiwKIAlbU1RBQ19EOTQ1R1RQNV0JPSAiNXN0YWNrIiwKIAlbU1RBQ19EOTQ1R1RQM10JPSAiM3N0YWNrIiwKQEAgLTE5ODgsNiArMjA0Niw4IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NDVfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NDVfUkVGKSwKIAkvKiBJbnRlbCA5NDVHIGJhc2VkIHN5c3RlbXMgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDEwMSwKIAkJICAgICAgIkludGVsIEQ5NDVHIiwgU1RBQ19EOTQ1R1RQMyksCkBAIC0yMDQxLDYgKzIxMDEsOSBAQAogCQkgICAgICAiSW50ZWwgRDk0NVAiLCBTVEFDX0Q5NDVHVFAzKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDcwNywKIAkJICAgICAgIkludGVsIEQ5NDVQIiwgU1RBQ19EOTQ1R1RQNSksCisJLyogb3RoZXIgaW50ZWwgKi8KKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDIwNCwKKwkJICAgICAgIkludGVsIEQ5NDUiLCBTVEFDX0Q5NDVfUkVGKSwKIAkvKiBvdGhlciBzeXN0ZW1zICAqLwogCS8qIEFwcGxlIEludGVsIE1hYyAoTWFjIE1pbmksIE1hY0Jvb2ssIE1hY0Jvb2sgUHJvLi4uKSAqLwogCVNORF9QQ0lfUVVJUksoMHg4Mzg0LCAweDc2ODAsCkBAIC0yMDY1LDMxICsyMTI4LDcgQEAKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWQ3LAogCQkgICAgICAiRGVsbCBYUFMgTTEyMTAiLCBTVEFDXzkyMlhfREVMTF9NODIpLAogCS8qIEVDUy9QQyBDaGlwcyBib2FyZHMgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyMTQ0LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyNjA4LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyNjMzLAotCQkgICAgICAiRUNTL1BDIGNoaXBzIFAxN0cvMTMzMyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxMSwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxMiwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxMywKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxNCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxNSwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxNiwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxNywKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxOCwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgxOSwKLQkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4MjgyMCwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDE5LCAweGYwMDAsIDB4MjAwMCwKIAkJICAgICAgIkVDUy9QQyBjaGlwcyIsIFNUQUNfRUNTXzIwMiksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKQEAgLTIxMzIsNiArMjE3MSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyN3hfbW9kZWxzW1NUQUNfOTI3WF9NT0RFTFNdID0geworCVtTVEFDXzkyN1hfQVVUT10JPSAiYXV0byIsCiAJW1NUQUNfRDk2NV9SRUZfTk9fSkRdCT0gInJlZi1uby1qZCIsCiAJW1NUQUNfRDk2NV9SRUZdCQk9ICJyZWYiLAogCVtTVEFDX0Q5NjVfM1NUXQkJPSAiM3N0YWNrIiwKQEAgLTIxNDQsMjYgKzIxODQsMTYgQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfRDk2NV9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfRDk2NV9SRUYpLAogCSAvKiBJbnRlbCA5NDYgYmFzZWQgc3lzdGVtcyAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzZDAxLCAiSW50ZWwgRDk0NiIsIFNUQUNfRDk2NV8zU1QpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhhMzAxLCAiSW50ZWwgRDk0NiIsIFNUQUNfRDk2NV8zU1QpLAogCS8qIDk2NSBiYXNlZCAzIHN0YWNrIHN5c3RlbXMgKi8KLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjExNiwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjExNSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjExNCwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjExMywgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjExMiwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjExMSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjExMCwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwOSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwOCwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwNywgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwNiwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwNSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwNCwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwMywgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwMiwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjAwMSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDIxMDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjAwMCwKKwkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCiAJLyogRGVsbCAzIHN0YWNrIHN5c3RlbXMgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgIDB4MDFmNywgIkRlbGwgWFBTIE0xNzMwIiwgU1RBQ19ERUxMXzNTVCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsICAweDAxZGQsICJEZWxsIERpbWVuc2lvbiBFNTIwIiwgU1RBQ19ERUxMXzNTVCksCkBAIC0yMTc5LDE1ICsyMjA5LDEwIEBACiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsICAweDAyZmYsICJEZWxsICAgICAiLCBTVEFDX0RFTExfQklPUyksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsICAweDAyMDksICJEZWxsIFhQUyAxMzMwIiwgU1RBQ19ERUxMX0JJT1MpLAogCS8qIDk2NSBiYXNlZCA1IHN0YWNrIHN5c3RlbXMgKi8KLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjMwMSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjMwMiwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjMwMywgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjMwNCwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjMwNSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjUwMSwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjUwMiwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjUwMywgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjUwNCwgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDIzMDAsCisJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjUwMCwKKwkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMjI0MCwxOSArMjI2NSwyNSBAQAogCVtTVEFDXzkyMDVfREVMTF9NNDJdID0gZGVsbF85MjA1X200Ml9waW5fY29uZmlncywKIAlbU1RBQ185MjA1X0RFTExfTTQzXSA9IGRlbGxfOTIwNV9tNDNfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTIwNV9ERUxMX000NF0gPSBkZWxsXzkyMDVfbTQ0X3Bpbl9jb25maWdzLAorCVtTVEFDXzkyMDVfRUFQRF0gPSBOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MjA1X21vZGVsc1tTVEFDXzkyMDVfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjA1X0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkyMDVfUkVGXSA9ICJyZWYiLAogCVtTVEFDXzkyMDVfREVMTF9NNDJdID0gImRlbGwtbTQyIiwKIAlbU1RBQ185MjA1X0RFTExfTTQzXSA9ICJkZWxsLW00MyIsCiAJW1NUQUNfOTIwNV9ERUxMX000NF0gPSAiZGVsbC1tNDQiLAorCVtTVEFDXzkyMDVfRUFQRF0gPSAiZWFwZCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyMDVfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MjA1X1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MjA1X1JFRiksCisJLyogRGVsbCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxZjEsCiAJCSAgICAgICJ1bmtub3duIERlbGwiLCBTVEFDXzkyMDVfREVMTF9NNDIpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxZjIsCkBAIC0yMjgzLDEwMSArMjMxNCwyNCBAQAogCQkgICAgICAiRGVsbCBJbnNwaXJvbiIsIFNUQUNfOTIwNV9ERUxMX000NCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIyOCwKIAkJICAgICAgIkRlbGwgVm9zdHJvIDE1MDAiLCBTVEFDXzkyMDVfREVMTF9NNDIpLAorCS8qIEdhdGV3YXkgKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgwNTY1LCAiR2F0ZXdheSBUMTYxNiIsIFNUQUNfOTIwNV9FQVBEKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgaW50IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCQotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKLQlzcGVjLT5waW5fY29uZmlncyA9IGtjYWxsb2Moc3BlYy0+bnVtX3BpbnMsIHNpemVvZigqc3BlYy0+cGluX2NvbmZpZ3MpLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwZWMtPnBpbl9jb25maWdzKQotCQlyZXR1cm4gLUVOT01FTTsKLQkKLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykgewotCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+cGluX25pZHNbaV07Ci0JCXVuc2lnbmVkIGludCBwaW5fY2ZnOwotCQkKLQkJcGluX2NmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCAKLQkJCUFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAweDAwKTsJCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBwaW4gbmlkICUyLjJ4IGJpb3MgcGluIGNvbmZpZyAlOC44eFxuIiwKLQkJCQkJbmlkLCBwaW5fY2ZnKTsKLQkJc3BlYy0+cGluX2NvbmZpZ3NbaV0gPSBwaW5fY2ZnOwotCX0KLQkKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgIGhkYV9uaWRfdCBwaW5fbmlkLCB1bnNpZ25lZCBpbnQgcGluX2NvbmZpZykKLXsKLQlpbnQgaTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzAsCi0JCQkgICAgcGluX2NvbmZpZyAmIDB4MDAwMDAwZmYpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMSwKLQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDAwMGZmMDApID4+IDgpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMiwKLQkJCSAgICAocGluX2NvbmZpZyAmIDB4MDBmZjAwMDApID4+IDE2KTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsCi0JCQkgICAgcGluX2NvbmZpZyA+PiAyNCk7Ci0JaSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwKLQkJCSAgICAgICAweDAwKTsJCi0Jc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IHBpbiBuaWQgJTIuMnggcGluIGNvbmZpZyAlOC44eFxuIiwKLQkJICAgIHBpbl9uaWQsIGkpOwotfQotCi1zdGF0aWMgdm9pZCBzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKnBpbmNmZ3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotIAlpZiAoIXNwZWMtPnBpbl9jb25maWdzKQotIAkJcmV0dXJuOworCWlmICghcGluY2ZncykKKwkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspCi0JCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpXSwKLQkJCQkJc3BlYy0+cGluX2NvbmZpZ3NbaV0pOwotfQotCi1zdGF0aWMgaW50IHN0YWNfc2F2ZV9waW5fY2ZncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50ICpwaW5zKQotewotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KLQlpZiAoIXBpbnMpCi0JCXJldHVybiBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCi0Ja2ZyZWUoc3BlYy0+cGluX2NvbmZpZ3MpOwotCXNwZWMtPnBpbl9jb25maWdzID0ga21lbWR1cChwaW5zLAotCQkJCSAgICBzcGVjLT5udW1fcGlucyAqIHNpemVvZigqcGlucyksCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghc3BlYy0+cGluX2NvbmZpZ3MpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY2ZnKQotewotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykgewotCQlpZiAoc3BlYy0+cGluX25pZHNbaV0gPT0gbmlkKSB7Ci0JCQlzcGVjLT5waW5fY29uZmlnc1tpXSA9IGNmZzsKLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCBuaWQsIGNmZyk7Ci0JCQlicmVhazsKLQkJfQotCX0KKwkJaWYgKHNwZWMtPnBpbl9uaWRzW2ldICYmIHBpbmNmZ3NbaV0pCisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIHNwZWMtPnBpbl9uaWRzW2ldLAorCQkJCQkJIHBpbmNmZ3NbaV0pOwogfQogCiAvKgpAQCAtMjU2Nyw3ICsyNTIxLDcgQEAKIAkJY29kZWMtPm51bV9wY21zKys7CiAJCWluZm8rKzsKIAkJaW5mby0+bmFtZSA9ICJTVEFDOTJ4eCBEaWdpdGFsIjsKLQkJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfU1BESUY7CisJCWluZm8tPnBjbV90eXBlID0gc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3R5cGVbMF07CiAJCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCkgewogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gc3RhYzkyeHhfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10ubmlkID0gc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQ7CkBAIC0yNTgzLDggKzI1MzcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5Mnh4X2dldF92cmVmKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogewotCXVuc2lnbmVkIGludCBwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKLQkJCQkJCSBBQ19QQVJfUElOX0NBUCk7CisJdW5zaWduZWQgaW50IHBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJcGluY2FwID0gKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGKSA+PiBBQ19QSU5DQVBfVlJFRl9TSElGVDsKIAlpZiAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUZfMTAwKQogCQlyZXR1cm4gQUNfUElOQ1RMX1ZSRUZfMTAwOwpAQCAtMjc1OSwyMiArMjcxMiwzNyBAQAogfTsKIAogLyogYWRkIGR5bmFtaWMgY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgc3RhYzkyeHhfYWRkX2NvbnRyb2xfdGVtcChzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKLQkJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKLQkJCQkgICAgIGludCBpZHgsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqCitzdGFjX2NvbnRyb2xfbmV3KHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAorCQkgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmt0ZW1wLAorCQkgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKIAogCXNuZF9hcnJheV9pbml0KCZzcGVjLT5rY3Rscywgc2l6ZW9mKCprbmV3KSwgMzIpOwogCWtuZXcgPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5rY3Rscyk7CiAJaWYgKCFrbmV3KQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJKmtuZXcgPSAqa3RlbXA7Ci0Ja25ldy0+aW5kZXggPSBpZHg7CiAJa25ldy0+bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrbmV3LT5uYW1lKQorCWlmICgha25ldy0+bmFtZSkgeworCQkvKiByb29sYmFjayAqLworCQltZW1zZXQoa25ldywgMCwgc2l6ZW9mKCprbmV3KSk7CisJCXNwZWMtPmtjdGxzLmFsbG9jZWQtLTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBrbmV3OworfQorCitzdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9jb250cm9sX3RlbXAoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCisJCQkJICAgICBpbnQgaWR4LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXcgPSBzdGFjX2NvbnRyb2xfbmV3KHNwZWMsIGt0ZW1wLCBuYW1lKTsKKwlpZiAoIWtuZXcpCiAJCXJldHVybiAtRU5PTUVNOworCWtuZXctPmluZGV4ID0gaWR4OwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzk2LDYgKzI3NjQsMjkgQEAKIAlyZXR1cm4gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsIHR5cGUsIDAsIG5hbWUsIHZhbCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjX2lucHV0X3NyY190ZW1wID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIklucHV0IFNvdXJjZSIsCisJLmluZm8gPSBzdGFjOTJ4eF9tdXhfZW51bV9pbmZvLAorCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsCisJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwKK307CisKK3N0YXRpYyBpbnQgc3RhYzkyeHhfYWRkX2lucHV0X3NvdXJjZShzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYykKK3sKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisKKwlpZiAoIXNwZWMtPm51bV9hZGNzIHx8IGltdXgtPm51bV9pdGVtcyA8PSAxKQorCQlyZXR1cm4gMDsgLyogbm8gbmVlZCBmb3IgaW5wdXQgc291cmNlIGNvbnRyb2wgKi8KKwlrbmV3ID0gc3RhY19jb250cm9sX25ldyhzcGVjLCAmc3RhY19pbnB1dF9zcmNfdGVtcCwKKwkJCQlzdGFjX2lucHV0X3NyY190ZW1wLm5hbWUpOworCWlmICgha25ldykKKwkJcmV0dXJuIC1FTk9NRU07CisJa25ldy0+Y291bnQgPSBzcGVjLT5udW1fYWRjczsKKwlyZXR1cm4gMDsKK30KKwogLyogY2hlY2sgd2hldGhlciB0aGUgbGluZS1pbnB1dCBjYW4gYmUgdXNlZCBhcyBsaW5lLW91dCAqLwogc3RhdGljIGhkYV9uaWRfdCBjaGVja19saW5lX291dF9zd2l0Y2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0yODA3LDcgKzI3OTgsNyBAQAogCWlmIChjZmctPmxpbmVfb3V0X3R5cGUgIT0gQVVUT19QSU5fTElORV9PVVQpCiAJCXJldHVybiAwOwogCW5pZCA9IGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9MSU5FXTsKLQlwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOworCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9PVVQpCiAJCXJldHVybiBuaWQ7CiAJcmV0dXJuIDA7CkBAIC0yODI2LDEyICsyODE3LDExIEBACiAJbWljX3BpbiA9IEFVVE9fUElOX01JQzsKIAlmb3IgKDs7KSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBjZmctPmlucHV0X3BpbnNbbWljX3Bpbl07Ci0JCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJCS8qIHNvbWUgbGFwdG9wcyBoYXZlIGFuIGludGVybmFsIGFuYWxvZyBtaWNyb3Bob25lCiAJCSAqIHdoaWNoIGNhbid0IGJlIHVzZWQgYXMgYSBvdXRwdXQgKi8KIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgIT0gQUNfSkFDS19QT1JUX0ZJWEVEKSB7Ci0JCQlwaW5jYXAgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOworCQkJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAkJCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfT1VUKQogCQkJCXJldHVybiBuaWQ7CiAJCX0KQEAgLTI4NzksOCArMjg2OSw3IEBACiAJY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uLAogCQkJCQkgICBIREFfTUFYX0NPTk5FQ1RJT05TKTsKIAlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgewotCQl3Y2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgY29ubltqXSwKLQkJCQkJICAgQUNfUEFSX0FVRElPX1dJREdFVF9DQVApOworCQl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgY29ubltqXSk7CiAJCXd0eXBlID0gKHdjYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CiAJCS8qIHdlIGNoZWNrIG9ubHkgYW5hbG9nIG91dHB1dHMgKi8KIAkJaWYgKHd0eXBlICE9IEFDX1dJRF9BVURfT1VUIHx8ICh3Y2FwcyAmIEFDX1dDQVBfRElHSVRBTCkpCkBAIC0yODk1LDYgKzI4ODQsMTYgQEAKIAkJCXJldHVybiBjb25uW2pdOwogCQl9CiAJfQorCS8qIGlmIGFsbCBEQUNzIGFyZSBhbHJlYWR5IGFzc2lnbmVkLCBjb25uZWN0IHRvIHRoZSBwcmltYXJ5IERBQyAqLworCWlmIChjb25uX2xlbiA+IDEpIHsKKwkJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKKwkJCWlmIChjb25uW2pdID09IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdKSB7CisJCQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgaik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5MzUsNiArMjkzNCwyNiBAQAogCQlhZGRfc3BlY19kYWNzKHNwZWMsIGRhYyk7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7CisJCW5pZCA9IGNmZy0+aHBfcGluc1tpXTsKKwkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOworCQlpZiAoZGFjKSB7CisJCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKKwkJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBkYWM7CisJCQllbHNlCisJCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOworCQl9CisJCXNwZWMtPmhwX2RhY3NbaV0gPSBkYWM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKKwkJbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbaV07CisJCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKKwkJaWYgKGRhYykKKwkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKKwkJc3BlYy0+c3BlYWtlcl9kYWNzW2ldID0gZGFjOworCX0KKwogCS8qIGFkZCBsaW5lLWluIGFzIG91dHB1dCAqLwogCW5pZCA9IGNoZWNrX2xpbmVfb3V0X3N3aXRjaChjb2RlYyk7CiAJaWYgKG5pZCkgewpAQCAtMjk2MiwyNiArMjk4MSw2IEBACiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKLQkJbmlkID0gY2ZnLT5ocF9waW5zW2ldOwotCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7Ci0JCWlmIChkYWMpIHsKLQkJCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQotCQkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IGRhYzsKLQkJCWVsc2UKLQkJCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7Ci0JCX0KLQkJc3BlYy0+aHBfZGFjc1tpXSA9IGRhYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykgewotCQluaWQgPSBjZmctPnNwZWFrZXJfcGluc1tpXTsKLQkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOwotCQlpZiAoZGFjKQotCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOwotCQlzcGVjLT5zcGVha2VyX2RhY3NbaV0gPSBkYWM7Ci0JfQotCiAJc25kX3ByaW50ZCgic3RhYzkyeHg6IGRhY19uaWRzPSVkICgweCV4LzB4JXgvMHgleC8weCV4LzB4JXgpXG4iLAogCQkgICBzcGVjLT5tdWx0aW91dC5udW1fZGFjcywKIAkJICAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0sCkBAIC0yOTk0LDI0ICsyOTkzLDQ3IEBACiB9CiAKIC8qIGNyZWF0ZSB2b2x1bWUgY29udHJvbC9zd2l0Y2ggZm9yIHRoZSBnaXZlbiBwcmVmeCB0eXBlICovCi1zdGF0aWMgaW50IGNyZWF0ZV9jb250cm9scyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywgY29uc3QgY2hhciAqcGZ4LCBoZGFfbmlkX3QgbmlkLCBpbnQgY2hzKQorc3RhdGljIGludCBjcmVhdGVfY29udHJvbHNfaWR4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwZngsCisJCQkgICAgICAgaW50IGlkeCwgaGRhX25pZF90IG5pZCwgaW50IGNocykKIHsKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWNoYXIgbmFtZVszMl07CiAJaW50IGVycjsKIAorCWlmICghc3BlYy0+Y2hlY2tfdm9sdW1lX29mZnNldCkgeworCQl1bnNpZ25lZCBpbnQgY2Fwcywgc3RlcCwgbnVtcywgZGJfc2NhbGU7CisJCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgbmlkLCBIREFfT1VUUFVUKTsKKwkJc3RlcCA9IChjYXBzICYgQUNfQU1QQ0FQX1NURVBfU0laRSkgPj4KKwkJCUFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQ7CisJCXN0ZXAgPSAoc3RlcCArIDEpICogMjU7IC8qIGluIC4wMWRCIHVuaXQgKi8KKwkJbnVtcyA9IChjYXBzICYgQUNfQU1QQ0FQX05VTV9TVEVQUykgPj4KKwkJCUFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQ7CisJCWRiX3NjYWxlID0gbnVtcyAqIHN0ZXA7CisJCS8qIGlmIGRCIHNjYWxlIGlzIG92ZXIgLTY0ZEIsIGFuZCBmaW5lciBlbm91Z2gsCisJCSAqIGxldCdzIHJlZHVjZSBpdCB0byBoYWxmCisJCSAqLworCQlpZiAoZGJfc2NhbGUgPiA2NDAwICYmIG51bXMgPj0gMHgxZikKKwkJCXNwZWMtPnZvbHVtZV9vZmZzZXQgPSBudW1zIC8gMjsKKwkJc3BlYy0+Y2hlY2tfdm9sdW1lX29mZnNldCA9IDE7CisJfQorCiAJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKLQllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbChzcGVjLCBTVEFDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKKwllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbF9pZHgoc3BlYywgU1RBQ19DVExfV0lER0VUX1ZPTCwgaWR4LCBuYW1lLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMX09GUyhuaWQsIGNocywgMCwgSERBX09VVFBVVCwKKwkJCQkJc3BlYy0+dm9sdW1lX29mZnNldCkpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywgU1RBQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9NVVRFLCBpZHgsIG5hbWUsCiAJCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgMCwgSERBX09VVFBVVCkpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwogfQogCisjZGVmaW5lIGNyZWF0ZV9jb250cm9scyhjb2RlYywgcGZ4LCBuaWQsIGNocykgXAorCWNyZWF0ZV9jb250cm9sc19pZHgoY29kZWMsIHBmeCwgMCwgbmlkLCBjaHMpCisKIHN0YXRpYyBpbnQgYWRkX3NwZWNfZGFjcyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywgaGRhX25pZF90IG5pZCkKIHsKIAlpZiAoc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPiA0KSB7CkBAIC0zMDM3LDQwICszMDU5LDMyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaXNfdW5pcXVlX2RhYyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywgaGRhX25pZF90IG5pZCkKLXsKLQlpbnQgaTsKLQotCWlmIChzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAhPSAxKQotCQlyZXR1cm4gMDsKLQlpZiAoc3BlYy0+bXVsdGlvdXQuaHBfbmlkID09IG5pZCkKLQkJcmV0dXJuIDA7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZCk7IGkrKykKLQkJaWYgKHNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbaV0gPT0gbmlkKQotCQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQorLyogQ3JlYXRlIG91dHB1dCBjb250cm9scworICogVGhlIG1peGVyIGVsZW1lbnRzIGFyZSBuYW1lZCBkZXBlbmRpbmcgb24gdGhlIGdpdmVuIHR5cGUgKEFVVE9fUElOX1hYWF9PVVQpCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbnVtX291dHMsCisJCQkJIGNvbnN0IGhkYV9uaWRfdCAqcGlucywKKwkJCQkgY29uc3QgaGRhX25pZF90ICpkYWNfbmlkcywKKwkJCQkgaW50IHR5cGUpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIKIAl9OwotCWhkYV9uaWRfdCBuaWQgPSAwOworCWhkYV9uaWRfdCBuaWQ7CiAJaW50IGksIGVycjsKIAl1bnNpZ25lZCBpbnQgd2lkX2NhcHM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHMgJiYgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07IGkrKykgewotCQluaWQgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXTsKLQkJaWYgKGkgPT0gMikgeworCWZvciAoaSA9IDA7IGkgPCBudW1fb3V0cyAmJiBpIDwgQVJSQVlfU0laRShjaG5hbWUpOyBpKyspIHsKKwkJbmlkID0gZGFjX25pZHNbaV07CisJCWlmICghbmlkKQorCQkJY29udGludWU7CisJCWlmICh0eXBlICE9IEFVVE9fUElOX0hQX09VVCAmJiBpID09IDIpIHsKIAkJCS8qIENlbnRlci9MRkUgKi8KLQkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiQ2VudGVyIiwgbmlkLCAxKTsKKwkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkNlbnRlciIsIG5pZCwgMSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsICJMRkUiLCBuaWQsIDIpOworCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCAiTEZFIiwgbmlkLCAyKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAKQEAgLTMwODYsMjMgKzMxMDAsNDcgQEAKIAkJCX0KIAogCQl9IGVsc2UgewotCQkJY29uc3QgY2hhciAqbmFtZSA9IGNobmFtZVtpXTsKLQkJCS8qIGlmIGl0J3MgYSBzaW5nbGUgREFDLCBhc3NpZ24gYSBiZXR0ZXIgbmFtZSAqLwotCQkJaWYgKCFpICYmIGlzX3VuaXF1ZV9kYWMoc3BlYywgbmlkKSkgewotCQkJCXN3aXRjaCAoY2ZnLT5saW5lX291dF90eXBlKSB7Ci0JCQkJY2FzZSBBVVRPX1BJTl9IUF9PVVQ6Ci0JCQkJCW5hbWUgPSAiSGVhZHBob25lIjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBBVVRPX1BJTl9TUEVBS0VSX09VVDoKLQkJCQkJbmFtZSA9ICJTcGVha2VyIjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCWludCBpZHg7CisJCQlzd2l0Y2ggKHR5cGUpIHsKKwkJCWNhc2UgQVVUT19QSU5fSFBfT1VUOgorCQkJCW5hbWUgPSAiSGVhZHBob25lIjsKKwkJCQlpZHggPSBpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVVRPX1BJTl9TUEVBS0VSX09VVDoKKwkJCQluYW1lID0gIlNwZWFrZXIiOworCQkJCWlkeCA9IGk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5hbWUgPSBjaG5hbWVbaV07CisJCQkJaWR4ID0gMDsKKwkJCQlicmVhazsKIAkJCX0KLQkJCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCBuYW1lLCBuaWQsIDMpOworCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzX2lkeChjb2RlYywgbmFtZSwgaWR4LCBuaWQsIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKKwkJCWlmICh0eXBlID09IEFVVE9fUElOX0hQX09VVCAmJiAhc3BlYy0+aHBfZGV0ZWN0KSB7CisJCQkJd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIHBpbnNbaV0pOworCQkJCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQorCQkJCQlzcGVjLT5ocF9kZXRlY3QgPSAxOworCQkJfQogCQl9CiAJfQorCXJldHVybiAwOworfQorCisvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLworc3RhdGljIGludCBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBlcnI7CisKKwllcnIgPSBjcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsIGNmZy0+bGluZV9vdXRzLCBjZmctPmxpbmVfb3V0X3BpbnMsCisJCQkJICAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzLAorCQkJCSAgICBjZmctPmxpbmVfb3V0X3R5cGUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKGNmZy0+aHBfb3V0cyA+IDEgJiYgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX0xJTkVfT1VUKSB7CiAJCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsCkBAIC0zMTM3LDQwICszMTc1LDE4IEBACiAJCQkJCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWhkYV9uaWRfdCBuaWQ7Ci0JaW50IGksIGVyciwgbnVtczsKKwlpbnQgZXJyOwogCi0JbnVtcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7Ci0JCXN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7Ci0JCQkiSGVhZHBob25lIiwgIkhlYWRwaG9uZTIiLCAiSGVhZHBob25lMyIsCi0JCX07Ci0JCXVuc2lnbmVkIGludCB3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgY2ZnLT5ocF9waW5zW2ldKTsKLQkJaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApCi0JCQlzcGVjLT5ocF9kZXRlY3QgPSAxOwotCQlpZiAobnVtcyA+PSBBUlJBWV9TSVpFKHBmeHMpKQotCQkJY29udGludWU7Ci0JCW5pZCA9IHNwZWMtPmhwX2RhY3NbaV07Ci0JCWlmICghbmlkKQotCQkJY29udGludWU7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCBwZnhzW251bXMrK10sIG5pZCwgMyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JbnVtcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKLQkJc3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsKLQkJCSJTcGVha2VyIiwgIkV4dGVybmFsIFNwZWFrZXIiLCAiU3BlYWtlcjIiLAotCQl9OwotCQlpZiAobnVtcyA+PSBBUlJBWV9TSVpFKHBmeHMpKQotCQkJY29udGludWU7Ci0JCW5pZCA9IHNwZWMtPnNwZWFrZXJfZGFjc1tpXTsKLQkJaWYgKCFuaWQpCi0JCQljb250aW51ZTsKLQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsIHBmeHNbbnVtcysrXSwgbmlkLCAzKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBjcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsIGNmZy0+aHBfb3V0cywgY2ZnLT5ocF9waW5zLAorCQkJCSAgICBzcGVjLT5ocF9kYWNzLCBBVVRPX1BJTl9IUF9PVVQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCBjZmctPnNwZWFrZXJfb3V0cywgY2ZnLT5zcGVha2VyX3BpbnMsCisJCQkJICAgIHNwZWMtPnNwZWFrZXJfZGFjcywgQVVUT19QSU5fU1BFQUtFUl9PVVQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNzksMTEgKzMzOTUsNyBAQAogCQl1bnNpZ25lZCBpbnQgd2NhcHM7CiAJCXVuc2lnbmVkIGludCBkZWZfY29uZjsKIAotCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywKLQkJCQkJICAgICAgc3BlYy0+ZG1pY19uaWRzW2ldLAotCQkJCQkgICAgICAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwKLQkJCQkJICAgICAgMCk7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5kbWljX25pZHNbaV0pOwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKIAkJCWNvbnRpbnVlOwogCkBAIC0zNTA3LDYgKzM1MTksNyBAQAogc3RhdGljIGludCBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGRpZ19vdXQsIGhkYV9uaWRfdCBkaWdfaW4pCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaHBfc3dhcCA9IDA7CiAJaW50IGVycjsKIAogCWlmICgoZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywKQEAgLTM1MTYsNyArMzUyOSw2IEBACiAJaWYgKCEgc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIHBpbiBjb25maWcgKi8KIAotI2lmIDAgLyogRklYTUU6IHRlbXBvcmFyaWx5IGRpc2FibGVkICovCiAJLyogSWYgd2UgaGF2ZSBubyByZWFsIGxpbmUtb3V0IHBpbiBhbmQgbXVsdGlwbGUgaHAtb3V0cywgSFBzIHNob3VsZAogCSAqIGJlIHNldCB1cCBhcyBtdWx0aS1jaGFubmVsIG91dHB1dHMuCiAJICovCkBAIC0zNTM1LDggKzM1NDcsOCBAQAogCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyA9IHNwZWMtPmF1dG9jZmcuaHBfb3V0czsKIAkJc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlID0gQVVUT19QSU5fSFBfT1VUOwogCQlzcGVjLT5hdXRvY2ZnLmhwX291dHMgPSAwOworCQlocF9zd2FwID0gMTsKIAl9Ci0jZW5kaWYgLyogRklYTUU6IHRlbXBvcmFyaWx5IGRpc2FibGVkICovCiAJaWYgKHNwZWMtPmF1dG9jZmcubW9ub19vdXRfcGluKSB7CiAJCWludCBkaXIgPSBnZXRfd2NhcHMoY29kZWMsIHNwZWMtPmF1dG9jZmcubW9ub19vdXRfcGluKSAmCiAJCQkoQUNfV0NBUF9PVVRfQU1QIHwgQUNfV0NBUF9JTl9BTVApOwpAQCAtMzYyOSwxMiArMzY0MSwxOSBAQAogI2VuZGlmCiAKIAllcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9ocF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7Ci0KIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJLyogQWxsIG91dHB1dCBwYXJzaW5nIGRvbmUsIG5vdyByZXN0b3JlIHRoZSBzd2FwcGVkIGhwIHBpbnMgKi8KKwlpZiAoaHBfc3dhcCkgeworCQltZW1jcHkoc3BlYy0+YXV0b2NmZy5ocF9waW5zLCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnMsCisJCSAgICAgICBzaXplb2Yoc3BlYy0+YXV0b2NmZy5ocF9waW5zKSk7CisJCXNwZWMtPmF1dG9jZmcuaHBfb3V0cyA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOworCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUgPSBBVVRPX1BJTl9IUF9PVVQ7CisJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRzID0gMDsKKwl9CiAKKwllcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zNjYzLDExICszNjgyLDE1IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWVyciA9IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3BlYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAJaWYgKHNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA+IDIpCiAJCXNwZWMtPnN1cnJfc3dpdGNoID0gMTsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19vdXQ7CiAJaWYgKGRpZ19pbiAmJiBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBkaWdfaW47CkBAIC0zNzMwLDkgKzM3NTMsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+YXV0b2NmZy5saW5lX291dHMgJiYgbGZlX3BpbiA9PSAweDA7IGkrKykgewogCQkJaGRhX25pZF90IHBpbiA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXTsKIAkJCXVuc2lnbmVkIGludCBkZWZjZmc7Ci0JCQlkZWZjZmcgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbiwgMCwKLQkJCQkJCSBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwKLQkJCQkJCSAweDAwKTsKKwkJCWRlZmNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgcGluKTsKIAkJCWlmIChnZXRfZGVmY2ZnX2RldmljZShkZWZjZmcpID09IEFDX0pBQ0tfU1BFQUtFUikgewogCQkJCXVuc2lnbmVkIGludCB3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgcGluKTsKIAkJCQl3Y2FwcyAmPSAoQUNfV0NBUF9TVEVSRU8gfCBBQ19XQ0FQX09VVF9BTVApOwpAQCAtMzc0NSw3ICszNzY2LDcgQEAKIAl9CiAKIAlpZiAobGZlX3BpbikgewotCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgIkxGRSIsIGxmZV9waW4sIDEpOworCQllcnIgPSBjcmVhdGVfY29udHJvbHMoY29kZWMsICJMRkUiLCBsZmVfcGluLCAxKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTM3NzYsNyArMzc5NywxMSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwllcnIgPSBzdGFjOTJ4eF9hZGRfaW5wdXRfc291cmNlKHNwZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMHgwNTsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gMHgwNDsKQEAgLTM4MzIsOCArMzg1Nyw3IEBACiAjaWZkZWYgQ09ORklHX1NORF9KQUNLCiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfamFjayAqamFjazsKLQlpbnQgZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKLQkJCTAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwlpbnQgZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJaW50IGNvbm5lY3Rpdml0eSA9IGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZik7CiAJY2hhciBuYW1lWzMyXTsKIApAQCAtMzk0OCw2ICszOTcyLDM2IEBACiBzdGF0aWMgdm9pZCBzdGFjX3RvZ2dsZV9wb3dlcl9tYXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJICBpbnQgZW5hYmxlKTsKIAorLyogb3ZlcnJpZGUgc29tZSBoaW50cyBmcm9tIHRoZSBod2RlcCBlbnRyeSAqLworc3RhdGljIHZvaWQgc3RhY19zdG9yZV9oaW50cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWNvbnN0IGNoYXIgKnA7CisJaW50IHZhbDsKKworCXZhbCA9IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImhwX2RldGVjdCIpOworCWlmICh2YWwgPj0gMCkKKwkJc3BlYy0+aHBfZGV0ZWN0ID0gdmFsOworCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19tYXNrIik7CisJaWYgKHApIHsKKwkJc3BlYy0+Z3Bpb19tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCk7CisJCXNwZWMtPmVhcGRfbWFzayA9IHNwZWMtPmdwaW9fZGlyID0gc3BlYy0+Z3Bpb19kYXRhID0KKwkJCXNwZWMtPmdwaW9fbWFzazsKKwl9CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RpciIpOworCWlmIChwKQorCQlzcGVjLT5ncGlvX2RpciA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOworCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19kYXRhIik7CisJaWYgKHApCisJCXNwZWMtPmdwaW9fZGF0YSA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOworCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZWFwZF9tYXNrIik7CisJaWYgKHApCisJCXNwZWMtPmVhcGRfbWFzayA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOworCXZhbCA9IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImVhcGRfc3dpdGNoIik7CisJaWYgKHZhbCA+PSAwKQorCQlzcGVjLT5lYXBkX3N3aXRjaCA9IHZhbDsKK30KKwogc3RhdGljIGludCBzdGFjOTJ4eF9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0zOTY0LDYgKzQwMTgsOSBAQAogCQkJCXNwZWMtPmFkY19uaWRzW2ldLCAwLAogCQkJCUFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMyk7CiAKKwkvKiBvdmVycmlkZSBzb21lIGhpbnRzICovCisJc3RhY19zdG9yZV9oaW50cyhjb2RlYyk7CisKIAkvKiBzZXQgdXAgR1BJTyAqLwogCWdwaW8gPSBzcGVjLT5ncGlvX2RhdGE7CiAJLyogdHVybiBvbiBFQVBEIHN0YXRpY2FsbHkgd2hlbiBzcGVjLT5lYXBkX3N3aXRjaCBpc24ndCBzZXQuCkBAIC00MDEzLDggKzQwNzAsNyBAQAogCQkJCQkJCQkgcGluY3RsKTsKIAkJCQl9CiAJCQl9Ci0JCQljb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJCWNvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNvbmYpICE9IEFDX0pBQ0tfUE9SVF9GSVhFRCkgewogCQkJCWVuYWJsZV9waW5fZGV0ZWN0KGNvZGVjLCBuaWQsCiAJCQkJCQkgIFNUQUNfSU5TRVJUX0VWRU5UKTsKQEAgLTQwMjYsOCArNDA4Miw4IEBACiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9kbWljczsgaSsrKQogCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIHNwZWMtPmRtaWNfbmlkc1tpXSwKIAkJCQkJQUNfUElOQ1RMX0lOX0VOKTsKLQlpZiAoY2ZnLT5kaWdfb3V0X3BpbikKLQkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBjZmctPmRpZ19vdXRfcGluLAorCWlmIChjZmctPmRpZ19vdXRfcGluc1swXSkKKwkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBjZmctPmRpZ19vdXRfcGluc1swXSwKIAkJCQkJIEFDX1BJTkNUTF9PVVRfRU4pOwogCWlmIChjZmctPmRpZ19pbl9waW4pCiAJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5kaWdfaW5fcGluLApAQCAtNDA1NSw4ICs0MTExLDcgQEAKIAkJCXN0YWNfdG9nZ2xlX3Bvd2VyX21hcChjb2RlYywgbmlkLCAxKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJCWRlZl9jb25mID0gZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKTsKIAkJLyogc2tpcCBhbnkgcG9ydHMgdGhhdCBkb24ndCBoYXZlIGphY2tzIHNpbmNlIHByZXNlbmNlCiAgCQkgKiBkZXRlY3Rpb24gaXMgdXNlbGVzcyAqLwpAQCAtNDExMCw3ICs0MTY1LDYgQEAKIAlpZiAoISBzcGVjKQogCQlyZXR1cm47CiAKLQlrZnJlZShzcGVjLT5waW5fY29uZmlncyk7CiAJc3RhYzkyeHhfZnJlZV9qYWNrcyhjb2RlYyk7CiAJc25kX2FycmF5X2ZyZWUoJnNwZWMtPmV2ZW50cyk7CiAKQEAgLTQxMjEsNyArNDE3NSw5IEBACiBzdGF0aWMgdm9pZCBzdGFjOTJ4eF9zZXRfcGluY3RsKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCXVuc2lnbmVkIGludCBmbGFnKQogewotCXVuc2lnbmVkIGludCBwaW5fY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCisJdW5zaWduZWQgaW50IG9sZF9jdGwsIHBpbl9jdGw7CisKKwlwaW5fY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCiAJCQkwLCBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MDApOwogCiAJaWYgKHBpbl9jdGwgJiBBQ19QSU5DVExfSU5fRU4pIHsKQEAgLTQxMzUsMTQgKzQxOTEsMTcgQEAKIAkJCXJldHVybjsKIAl9CiAKKwlvbGRfY3RsID0gcGluX2N0bDsKIAkvKiBpZiBzZXR0aW5nIHBpbiBkaXJlY3Rpb24gYml0cywgY2xlYXIgdGhlIGN1cnJlbnQKIAkgICBkaXJlY3Rpb24gYml0cyBmaXJzdCAqLwogCWlmIChmbGFnICYgKEFDX1BJTkNUTF9JTl9FTiB8IEFDX1BJTkNUTF9PVVRfRU4pKQogCQlwaW5fY3RsICY9IH4oQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX09VVF9FTik7CiAJCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAotCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJcGluX2N0bCB8IGZsYWcpOworCXBpbl9jdGwgfD0gZmxhZzsKKwlpZiAob2xkX2N0bCAhPSBwaW5fY3RsKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkgIHBpbl9jdGwpOwogfQogCiBzdGF0aWMgdm9pZCBzdGFjOTJ4eF9yZXNldF9waW5jdGwoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCkBAIC00MTUwLDkgKzQyMDksMTAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgcGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAogCQkJMCwgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCi0JCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQlwaW5fY3RsICYgfmZsYWcpOworCWlmIChwaW5fY3RsICYgZmxhZykKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJICBwaW5fY3RsICYgfmZsYWcpOwogfQogCiBzdGF0aWMgaW50IGdldF9waW5fcHJlc2VuY2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCkBAIC00NDE1LDcgKzQ0NzUsNiBAQAogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMpOwogCXN0YWM5Mnh4X2luaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwpAQCAtNDQyNiw2ICs0NDg1LDM3IEBACiAJcmV0dXJuIDA7CiB9CiAKKworLyoKKyAqIHVzaW5nIHBvd2VyIGNoZWNrIGZvciBjb250cm9sbGluZyBtdXRlIGxlZCBvZiBIUCBIRFggbm90ZWJvb2tzCisgKiBjaGVjayBmb3IgbXV0ZSBzdGF0ZSBvbmx5IG9uIFNwZWFrZXJzIChuaWQgPSAweDEwKQorICoKKyAqIEZvciB0aGlzIGZlYXR1cmUgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRSBpcyBuZWVkZWQsIG90aGVyd2lzZQorICogdGhlIExFRCBpcyBOT1Qgd29ya2luZyBwcm9wZXJseSAhCisgKi8KKworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKK3N0YXRpYyBpbnQgc3RhYzkyeHhfaHBfaGR4X2NoZWNrX3Bvd2VyX3N0YXR1cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgICAgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKG5pZCA9PSAweDEwKSB7CisJCWlmIChzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIEhEQV9PVVRQVVQsIDApICYKKwkJICAgIEhEQV9BTVBfTVVURSkKKwkJCXNwZWMtPmdwaW9fZGF0YSAmPSB+MHgwODsgIC8qIG9yYW5nZSAqLworCQllbHNlCisJCQlzcGVjLT5ncGlvX2RhdGEgfD0gMHgwODsgICAvKiB3aGl0ZSAqLworCisJCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKKwkJCSAgICAgIHNwZWMtPmdwaW9fZGlyLAorCQkJICAgICAgc3BlYy0+Z3Bpb19kYXRhKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHN0YWM5Mnh4X3N1c3BlbmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNDQ2NCwxNiArNDU1NCwxMSBAQAogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzkyMDBfTU9ERUxTLAogCQkJCQkJCXN0YWM5MjAwX21vZGVscywKIAkJCQkJCQlzdGFjOTIwMF9jZmdfdGJsKTsKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMDAsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTIwMF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwpAQCAtNDU0MSwxNyArNDYyNiwxMiBAQAogCQkJCQkJCXN0YWM5MjV4X21vZGVscywKIAkJCQkJCQlzdGFjOTI1eF9jZmdfdGJsKTsKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyNXgsIgogCQkJCSAgICAgICJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCQkgc3RhYzkyNXhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMTsKQEAgLTQ2MjksMTcgKzQ3MDksMTIgQEAKIAkJCQkJCQlzdGFjOTJoZDczeHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkNzN4eF9jZmdfdGJsKTsKIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKIAkJCSIgU1RBQzkySEQ3M1hYLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MmhkNzN4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIDB4MGEsCiAJCQljb25uLCBTVEFDOTJIRDczX0RBQ19DT1VOVCArIDIpIC0gMTsKQEAgLTQ2NTMsMTQgKzQ3MjgsMTggQEAKIAljYXNlIDB4MzogLyogNiBDaGFubmVsICovCiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3M3h4XzZjaF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF82Y2hfY29yZV9pbml0OworCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzZjaF9sb29wYmFjazsKIAkJYnJlYWs7CiAJY2FzZSAweDQ6IC8qIDggQ2hhbm5lbCAqLwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzN4eF84Y2hfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDczeHhfOGNoX2NvcmVfaW5pdDsKKwkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF84Y2hfbG9vcGJhY2s7CiAJCWJyZWFrOwogCWNhc2UgMHg1OiAvKiAxMCBDaGFubmVsICovCiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3M3h4XzEwY2hfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDczeHhfMTBjaF9jb3JlX2luaXQ7CisJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfMTBjaF9sb29wYmFjazsKKwkJYnJlYWs7CiAJfQogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CiAKQEAgLTQ2OTksMTggKzQ3NzgsMTggQEAKIAkJCXNwZWMtPmluaXQgPSBkZWxsX202X2NvcmVfaW5pdDsKIAkJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAkJY2FzZSBTVEFDX0RFTExfTTZfQU1JQzogLyogQW5hbG9nIE1pY3MgKi8KLQkJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CiAJCQlzcGVjLT5udW1fZG1pY3MgPSAwOwogCQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RBQ19ERUxMX002X0RNSUM6IC8qIERpZ2l0YWwgTWljcyAqLwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDE7CiAJCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDI7CiAJCQlicmVhazsKIAkJY2FzZSBTVEFDX0RFTExfTTZfQk9USDogLyogQm90aCAqLwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CiAJCQlzcGVjLT5udW1fZG1pY3MgPSAxOwogCQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgPSAyOwogCQkJYnJlYWs7CkBAIC00NzczLDYgKzQ4NTIsNyBAQAogCWhkYV9uaWRfdCBjb25uW1NUQUM5MkhEODNfREFDX0NPVU5UICsgMV07CiAJaW50IGVycjsKIAlpbnQgbnVtX2RhY3M7CisJaGRhX25pZF90IG5pZDsKIAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtNDc5MSwxNSArNDg3MSw2IEBACiAJc3BlYy0+bnVtX3B3cnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODN4eHhfcHdyX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CiAKLQotCS8qIHNldCBwb3J0IDB4ZSB0byBzZWxlY3QgdGhlIGxhc3QgREFDCi0JICovCi0JbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgMHgwZSwKLQkJY29ubiwgU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxKSAtIDE7Ci0KLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweGUsIDAsCi0JCUFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBudW1fZGFjcyk7Ci0KIAlzcGVjLT5pbml0ID0gc3RhYzkyaGQ4M3h4eF9jb3JlX2luaXQ7CiAJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDgzeHh4X21peGVyOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X3Bpbl9uaWRzKTsKQEAgLTQ4MTQsMTcgKzQ4ODUsMTIgQEAKIAkJCQkJCQlzdGFjOTJoZDgzeHh4X21vZGVscywKIAkJCQkJCQlzdGFjOTJoZDgzeHh4X2NmZ190YmwpOwogYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgogCQkJIiBTVEFDOTJIRDgzWFhYLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MmhkODN4eHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAljYXNlIDB4MTExZDc2MDQ6CkBAIC00ODUxLDYgKzQ5MTcsMjMgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgeworCWNhc2UgU1RBQ19ERUxMX1MxNDoKKwkJbmlkID0gMHhmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQluaWQgPSAweGU7CisJCWJyZWFrOworCX0KKworCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwKKwkJCQljb25uLCBTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDEpIC0gMTsKKworCS8qIHNldCBwb3J0IFggdG8gc2VsZWN0IHRoZSBsYXN0IERBQworCSAqLworCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCUFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBudW1fZGFjcyk7CisKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwogCiAJY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBzdGFjOTJoZF9wcm9jX2hvb2s7CkBAIC00ODU4LDcgKzQ5NDEsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkNzFieHhfZG11eCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBzdGFjOTJoZDcxYnh4X2RtdXhfbm9taXhlciA9IHsKKwkubnVtX2l0ZW1zID0gMywKKwkuaXRlbXMgPSB7CisJCXsgIkFuYWxvZyBJbnB1dHMiLCAweDAwIH0sCisJCXsgIkRpZ2l0YWwgTWljIDEiLCAweDAyIH0sCisJCXsgIkRpZ2l0YWwgTWljIDIiLCAweDAzIH0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJBbmFsb2cgSW5wdXRzIiwgMHgwMCB9LApAQCAtNDg2OCwxMCArNDk2MCw2NyBAQAogCX0KIH07CiAKKy8qIGdldCB0aGUgcGluIGNvbm5lY3Rpb24gKGZpeGVkLCBub25lLCBldGMpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgaWR4KQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IGNmZzsKKworCWNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgc3BlYy0+cGluX25pZHNbaWR4XSk7CisJcmV0dXJuIGdldF9kZWZjZmdfY29ubmVjdChjZmcpOworfQorCitzdGF0aWMgaW50IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgaGRhX25pZF90ICpuaWRzLCBpbnQgbnVtX25pZHMpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaWR4LCBudW07CisJdW5zaWduZWQgaW50IGRlZl9jb25mOworCisJZm9yIChudW0gPSAwOyBudW0gPCBudW1fbmlkczsgbnVtKyspIHsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBzcGVjLT5udW1fcGluczsgaWR4KyspCisJCQlpZiAoc3BlYy0+cGluX25pZHNbaWR4XSA9PSBuaWRzW251bV0pCisJCQkJYnJlYWs7CisJCWlmIChpZHggPj0gc3BlYy0+bnVtX3BpbnMpCisJCQlicmVhazsKKwkJZGVmX2NvbmYgPSBzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4KTsKKwkJaWYgKGRlZl9jb25mID09IEFDX0pBQ0tfUE9SVF9OT05FKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBudW07Cit9CisKK3N0YXRpYyBpbnQgc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfc211eGVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgIGhkYV9uaWRfdCBkaWcwcGluKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgc3BlYy0+bnVtX3BpbnM7IGlkeCsrKQorCQlpZiAoc3BlYy0+cGluX25pZHNbaWR4XSA9PSBkaWcwcGluKQorCQkJYnJlYWs7CisJaWYgKChpZHggKyAyKSA+PSBzcGVjLT5udW1fcGlucykKKwkJcmV0dXJuIDA7CisKKwkvKiBkaWcxcGluIGNhc2UgKi8KKwlpZiAoc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3QoY29kZWMsIGlkeCArIDEpICE9IEFDX0pBQ0tfUE9SVF9OT05FKQorCQlyZXR1cm4gMjsKKworCS8qIGRpZzBwaW4gKyBkaWcycGluIGNhc2UgKi8KKwlpZiAoc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3QoY29kZWMsIGlkeCArIDIpICE9IEFDX0pBQ0tfUE9SVF9OT05FKQorCQlyZXR1cm4gMjsKKwlpZiAoc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3QoY29kZWMsIGlkeCkgIT0gQUNfSkFDS19QT1JUX05PTkUpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGF0Y2hfc3RhYzkyaGQ3MWJ4eChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKKwlzdHJ1Y3QgaGRhX3ZlcmIgKnVubXV0ZV9pbml0ID0gc3RhYzkyaGQ3MWJ4eF91bm11dGVfY29yZV9pbml0OwogCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCBuZG1pY19uaWRzID0gMDsKIAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtNDg3OSwyNyArNTAyOCwzMiBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTJ4eF9wYXRjaF9vcHM7Ci0Jc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfcGluX25pZHMpOworCXNwZWMtPm51bV9waW5zID0gU1RBQzkySEQ3MUJYWF9OVU1fUElOUzsKKwlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwljYXNlIDB4MTExZDc2YjY6CisJY2FzZSAweDExMWQ3NmI3OgorCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNHBvcnQ7CisJCWJyZWFrOworCWNhc2UgMHgxMTFkNzYwMzoKKwljYXNlIDB4MTExZDc2MDg6CisJCS8qIE9uIDkySEQ3NUJ4IDB4MjcgaXNuJ3QgYSBwaW4gbmlkICovCisJCXNwZWMtPm51bV9waW5zLS07CisJCS8qIGZhbGx0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzZwb3J0OworCX0KIAlzcGVjLT5udW1fcHdycyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9wd3Jfbmlkcyk7Ci0Jc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzOwotCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eCwKLQkJCXNpemVvZihzdGFjOTJoZDcxYnh4X2RtdXgpKTsKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywKIAkJCQkJCQlTVEFDXzkySEQ3MUJYWF9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyaGQ3MWJ4eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyaGQ3MWJ4eF9jZmdfdGJsKTsKIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKIAkJCSIgU1RBQzkySEQ3MUJYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTJoZDcxYnh4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA+IFNUQUNfOTJIRDcxQlhYX1JFRikgewogCQkvKiBHUElPMCA9IEVBUEQgKi8KQEAgLTQ5MDgsMTYgKzUwNjIsMzQgQEAKIAkJc3BlYy0+Z3Bpb19kYXRhID0gMHgwMTsKIAl9CiAKKwlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtaWNfbmlkczsKKwlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtdXhfbmlkczsKKwogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewogCWNhc2UgMHgxMTFkNzZiNjogLyogNCBQb3J0IHdpdGhvdXQgQW5hbG9nIE1peGVyICovCiAJY2FzZSAweDExMWQ3NmI3OgorCQl1bm11dGVfaW5pdCsrOworCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgMHgxMTFkNzZiNDogLyogNiBQb3J0IHdpdGhvdXQgQW5hbG9nIE1peGVyICovCiAJY2FzZSAweDExMWQ3NmI1OgorCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXhfbm9taXhlciwKKwkJICAgICAgIHNpemVvZihzdGFjOTJoZDcxYnh4X2RtdXhfbm9taXhlcikpOwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzFieHhfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDcxYnh4X2NvcmVfaW5pdDsKIAkJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ3MWJ4eF9zbGF2ZV9kaWdfb3V0czsKKwkJc3BlYy0+bnVtX2RtaWNzID0gc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCisJCQkJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzLAorCQkJCQlTVEFDOTJIRDcxQlhYX05VTV9ETUlDUyk7CisJCWlmIChzcGVjLT5udW1fZG1pY3MpIHsKKwkJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwkJCXNwZWMtPmRpbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9kaW11eDsKKwkJCW5kbWljX25pZHMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG1pY19uaWRzKSAtIDE7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSAweDExMWQ3NjA4OiAvKiA1IFBvcnQgd2l0aCBBbmFsb2cgTWl4ZXIgKi8KKwkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlciwKKwkJICAgICAgIHNpemVvZihzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyKSk7CisJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zLS07CiAJCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CiAJCWNhc2UgU1RBQ19IUF9NNDoKIAkJCS8qIEVuYWJsZSBWUkVGIHBvd2VyIHNhdmluZyBvbiBHUElPMSBkZXRlY3QgKi8KQEAgLTQ5NDQsNyArNTExNiwxNSBAQAogCiAJCS8qIGRpc2FibGUgVlNXICovCiAJCXNwZWMtPmluaXQgPSAmc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0W0hEX0RJU0FCTEVfUE9SVEZdOwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweGYsIDB4NDBmMDAwZjApOworCQl1bm11dGVfaW5pdCsrOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIDB4NDBmMDAwZjApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTksIDB4NDBmMDAwZjMpOworCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkc1tTVEFDOTJIRDcxQlhYX05VTV9ETUlDUyAtIDFdID0gMDsKKwkJc3BlYy0+bnVtX2RtaWNzID0gc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCisJCQkJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzLAorCQkJCQlTVEFDOTJIRDcxQlhYX05VTV9ETUlDUyAtIDEpOworCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJCW5kbWljX25pZHMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG1pY19uaWRzKSAtIDI7CiAJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwMzogLyogNiBQb3J0IHdpdGggQW5hbG9nIE1peGVyICovCiAJCWlmICgoY29kZWMtPnJldmlzaW9uX2lkICYgMHhmKSA9PSAxKQpAQCAtNDk1NCwxMiArNTEzNCwyMyBAQAogCQlzcGVjLT5udW1fcHdycyA9IDA7CiAJCS8qIGZhbGx0aHJ1ICovCiAJZGVmYXVsdDoKKwkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlciwKKwkJICAgICAgIHNpemVvZihzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyKSk7CiAJCXNwZWMtPmRpbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9kaW11eDsKIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDcxYnh4X2FuYWxvZ19taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdDsKIAkJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ3MWJ4eF9zbGF2ZV9kaWdfb3V0czsKKwkJc3BlYy0+bnVtX2RtaWNzID0gc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCisJCQkJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzLAorCQkJCQlTVEFDOTJIRDcxQlhYX05VTV9ETUlDUyk7CisJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwkJbmRtaWNfbmlkcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMTsKIAl9CiAKKwlpZiAoZ2V0X3djYXBzKGNvZGVjLCAweGEpICYgQUNfV0NBUF9JTl9BTVApCisJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGVfY2FjaGUoY29kZWMsIHVubXV0ZV9pbml0KTsKKworCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDcxYnh4X2xvb3BiYWNrOwogCXNwZWMtPmFsb29wYmFja19tYXNrID0gMHg1MDsKIAlzcGVjLT5hbG9vcGJhY2tfc2hpZnQgPSAwOwogCkBAIC00OTY3LDE4ICs1MTU4LDE3IEBACiAJc3BlYy0+ZGlnYmVlcF9uaWQgPSAweDI2OwogCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9tdXhfbmlkczsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MmhkNzFieHhfYWRjX25pZHM7Ci0Jc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHM7Ci0Jc3BlYy0+ZG11eF9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHM7CiAJc3BlYy0+c211eF9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9zbXV4X25pZHM7CiAJc3BlYy0+cHdyX25pZHMgPSBzdGFjOTJoZDcxYnh4X3B3cl9uaWRzOwogCiAJc3BlYy0+bnVtX211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X211eF9uaWRzKTsKIAlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9hZGNfbmlkcyk7CisJc3BlYy0+bnVtX3NtdXhlcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3NtdXhlcyhjb2RlYywgMHgxZSk7CiAKIAlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCWNhc2UgU1RBQ19IUF9NNDoKIAkJLyogZW5hYmxlIGludGVybmFsIG1pY3JvcGhvbmUgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwZSwgMHgwMTgxMzA0MCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZSwgMHgwMTgxMzA0MCk7CiAJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgMHgwZSwKIAkJCUFDX1BJTkNUTF9JTl9FTiB8IEFDX1BJTkNUTF9WUkVGXzgwKTsKIAkJLyogZmFsbHRocnUgKi8KQEAgLTQ5OTMsMTkgKzUxODMsMzYgQEAKIAkJc3BlYy0+bnVtX3NtdXhlcyA9IDA7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlzcGVjLT5udW1fZG1pY3MgPSBTVEFDOTJIRDcxQlhYX05VTV9ETUlDUzsKLQkJc3BlYy0+bnVtX3NtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9zbXV4X25pZHMpOwotCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7CisJY2FzZSBTVEFDX0hQX0RWNToKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBkLCAweDkwMTcwMDEwKTsKKwkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCAweDBkLCBBQ19QSU5DVExfT1VUX0VOKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFDX0hQX0hEWDoKKwkJc3BlYy0+bnVtX2RtaWNzID0gMTsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IDE7CisJCXNwZWMtPm51bV9zbXV4ZXMgPSAxOworCQkvKgorCQkgKiBGb3IgY29udHJvbGxpbmcgTVVURSBMRUQgb24gSFAgSERYMTYvSERYMTggbm90ZWJvb2tzLAorCQkgKiB0aGUgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRSBpcyBuZWVkZWQgdG8gYmUgc2V0LgorCQkgKi8KKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJCS8qIG9yYW5nZS93aGl0ZSBtdXRlIGxlZCBvbiBHUElPMywgb3JhbmdlPTAsIHdoaXRlPTEgKi8KKwkJc3BlYy0+Z3Bpb19tYXNrIHw9IDB4MDg7CisJCXNwZWMtPmdwaW9fZGlyICB8PSAweDA4OworCQlzcGVjLT5ncGlvX2RhdGEgfD0gMHgwODsgIC8qIHNldCB0byB3aGl0ZSAqLworCisJCS8qIHJlZ2lzdGVyIGNoZWNrX3Bvd2VyX3N0YXR1cyBjYWxsYmFjay4gKi8KKwkJY29kZWMtPnBhdGNoX29wcy5jaGVja19wb3dlcl9zdGF0dXMgPQorCQkgICAgc3RhYzkyeHhfaHBfaGR4X2NoZWNrX3Bvd2VyX3N0YXR1czsKKyNlbmRpZgkKKwkJYnJlYWs7CiAJfTsKIAogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CiAJaWYgKHNwZWMtPmRpbnB1dF9tdXgpCi0JCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zICs9Ci0JCQlzcGVjLT5udW1fZG1pY3MgLQotCQkJCShBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG1pY19uaWRzKSAtIDEpOworCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyArPSBzcGVjLT5udW1fZG1pY3MgLSBuZG1pY19uaWRzOwogCi0JZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MjEsIDB4MjMpOworCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDIxLCAwKTsKIAlpZiAoIWVycikgewogCQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGRhX2NvZGVjOiBObyBhdXRvLWNvbmZpZyBpcyAiCkBAIC01MDgwLDE3ICs1Mjg3LDEyIEBACiAJfQogCiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjJ4LCAiCiAJCQkidXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTIyeF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyMnhfYWRjX25pZHM7CiAJc3BlYy0+bXV4X25pZHMgPSBzdGFjOTIyeF9tdXhfbmlkczsKQEAgLTUxNDEsMjQgKzUzNDMsMTkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyN3hfc2xhdmVfZGlnX291dHM7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5Mjd4X3Bpbl9uaWRzKTsKIAlzcGVjLT5waW5fbmlkcyA9IHN0YWM5Mjd4X3Bpbl9uaWRzOwogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzkyN1hfTU9ERUxTLAogCQkJCQkJCXN0YWM5Mjd4X21vZGVscywKIAkJCQkJCQlzdGFjOTI3eF9jZmdfdGJsKTsKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCB8fCAhc3RhYzkyN3hfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKSB7Ci0JCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQotCQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgotCQkJCSAgICAiU1RBQzkyN3gsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKKwkJCSAgICAiU1RBQzkyN3gsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOworCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5Mjd4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+ZGlnYmVlcF9uaWQgPSAweDIzOwogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyN3hfYWRjX25pZHM7CkBAIC01MTg3LDE1ICs1Mzg0LDE1IEBACiAJCWNhc2UgMHgxMDI4MDIwOToKIAkJY2FzZSAweDEwMjgwMjJlOgogCQkJLyogY29ycmVjdCB0aGUgZGV2aWNlIGZpZWxkIHRvIFNQRElGIG91dCAqLwotCQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgyMSwgMHgwMTQ0MjA3MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MjEsIDB4MDE0NDIwNzApOwogCQkJYnJlYWs7CiAJCX07CiAJCS8qIGNvbmZpZ3VyZSB0aGUgYW5hbG9nIG1pY3JvcGhvbmUgb24gc29tZSBsYXB0b3BzICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGMsIDB4OTBhNzkxMzApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGMsIDB4OTBhNzkxMzApOwogCQkvKiBjb3JyZWN0IHRoZSBmcm9udCBvdXRwdXQgamFjayBhcyBhIGhwIG91dCAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBmLCAweDAyMjcwMTFmKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBmLCAweDAyMjcwMTFmKTsKIAkJLyogY29ycmVjdCB0aGUgZnJvbnQgaW5wdXQgamFjayBhcyBhIG1pYyAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBlLCAweDAyYTc5MTMwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBlLCAweDAyYTc5MTMwKTsKIAkJLyogZmFsbHRocnUgKi8KIAljYXNlIFNUQUNfREVMTF8zU1Q6CiAJCS8qIEdQSU8yIEhpZ2ggPSBFbmFibGUgRUFQRCAqLwpAQCAtNTIyMiw2ICs1NDE5LDcgQEAKIAl9CiAKIAlzcGVjLT5udW1fcHdycyA9IDA7CisJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5Mjd4X2xvb3BiYWNrOwogCXNwZWMtPmFsb29wYmFja19tYXNrID0gMHg0MDsKIAlzcGVjLT5hbG9vcGJhY2tfc2hpZnQgPSAwOwogCXNwZWMtPmVhcGRfc3dpdGNoID0gMTsKQEAgLTUyODAsMTYgKzU0NzgsMTEgQEAKIAkJCQkJCQlzdGFjOTIwNV9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyMDVfY2ZnX3RibCk7CiAgYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjA1LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCQkgc3RhYzkyMDVfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjM7CiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTIwNV9hZGNfbmlkczsKQEAgLTUzMDYsMTcgKzU0OTksMjAgQEAKIAogCXNwZWMtPmluaXQgPSBzdGFjOTIwNV9jb3JlX2luaXQ7CiAJc3BlYy0+bWl4ZXIgPSBzdGFjOTIwNV9taXhlcjsKKwlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyMDVfbG9vcGJhY2s7CiAKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NDA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKLQlzcGVjLT5lYXBkX3N3aXRjaCA9IDE7CisJLyogVHVybiBvbi9vZmYgRUFQRCBwZXIgSFAgcGx1Z2dpbmcgKi8KKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnICE9IFNUQUNfOTIwNV9FQVBEKQorCQlzcGVjLT5lYXBkX3N3aXRjaCA9IDE7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIAkKIAlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZyl7CiAJY2FzZSBTVEFDXzkyMDVfREVMTF9NNDM6CiAJCS8qIEVuYWJsZSBTUERJRiBpbi9vdXQgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgxZiwgMHgwMTQ0MTAzMCk7Ci0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MjAsIDB4MWM0MTAwMzApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MWYsIDB4MDE0NDEwMzApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MjAsIDB4MWM0MTAwMzApOwogCiAJCS8qIEVuYWJsZSB1bnNvbCByZXNwb25zZSBmb3IgR1BJTzQvRG9jayBIUCBjb25uZWN0aW9uICovCiAJCWVyciA9IHN0YWNfYWRkX2V2ZW50KHNwZWMsIGNvZGVjLT5hZmcsIFNUQUNfVlJFRl9FVkVOVCwgMHgwMSk7CkBAIC01MzczLDIyMyArNTU2OSw4NyBAQAogICogU1RBQzk4NzIgaGFjawogICovCiAKLS8qIHN0YXRpYyBjb25maWcgZm9yIFNvbnkgVkFJTyBGRTU1MEcgYW5kIFNvbnkgVkFJTyBBUiAqLwotc3RhdGljIGhkYV9uaWRfdCB2YWlvX2RhY3NbXSA9IHsgMHgyIH07Ci0jZGVmaW5lIFZBSU9fSFBfREFDCTB4NQotc3RhdGljIGhkYV9uaWRfdCB2YWlvX2FkY3NbXSA9IHsgMHg4IC8qLDB4NiovIH07Ci1zdGF0aWMgaGRhX25pZF90IHZhaW9fbXV4X25pZHNbXSA9IHsgMHgxNSB9OwotCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggdmFpb19tdXggPSB7Ci0JLm51bV9pdGVtcyA9IDMsCi0JLml0ZW1zID0gewotCQkvKiB7ICJIUCIsIDB4MCB9LCAqLwotCQl7ICJNaWMgSmFjayIsIDB4MSB9LAotCQl7ICJJbnRlcm5hbCBNaWMiLCAweDIgfSwKLQkJeyAiUENNIiwgMHgzIH0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2YWlvX2luaXRbXSA9IHsKLQl7MHgwYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwgLyogSFAgPC0gMHgyICovCi0JezB4MGEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBTVEFDX0hQX0VWRU5UfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sIC8qIFNwZWFrZXIgPC0gMHg1ICovCi0JezB4MGQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LCAvKiBNaWM/ICg8LSAweDIpICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sIC8qIENEICovCi0JezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LCAvKiBNaWM/ICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5ODcyX2NvcmVfaW5pdFtdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwgLyogbWljLXNlbDogMGEsMGQsMTQsMDIgKi8KLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogSFAgKi8KLQl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogU3BlYWtlciAqLwotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIGNhcHR1cmUgc3cvdm9sIC0+IDB4OCAqLwotCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwgLyogQ0QtaW4gLT4gMHg2ICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwgLyogTWljLWluIC0+IDB4OSAqLwogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZhaW9fYXJfaW5pdFtdID0gewotCXsweDBhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LCAvKiBIUCA8LSAweDIgKi8KLQl7MHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sIC8qIFNwZWFrZXIgPC0gMHg1ICovCi0JezB4MGQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LCAvKiBNaWM/ICg8LSAweDIpICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sIC8qIENEICovCi0vKgl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sKi8gLyogT3B0aWNhbCBPdXQgKi8KLQl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKi8KLQl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIG1pYy1zZWw6IDBhLDBkLDE0LDAyICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIEhQICovCi0JezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIFNwZWFrZXIgKi8KLS8qCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCovIC8qIE9wdGljYWwgT3V0ICovCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogY2FwdHVyZSBzdy92b2wgLT4gMHg4ICovCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LCAvKiBDRC1pbiAtPiAweDYgKi8KLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LCAvKiBNaWMtaW4gLT4gMHg5ICovCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2YWlvX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwMiwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA1LCAwLCBIREFfT1VUUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJDRCBDYXB0dXJlIFZvbHVtZSIsIDB4MDcsIDAsIEhEQV9JTlBVVCksICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzk4NzJfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5jb3VudCA9IDEsCi0JCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwKLQl9LAotCXt9CisJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZhaW9fYXJfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDUsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDUsIDAsIEhEQV9PVVRQVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIkNEIENhcHR1cmUgVm9sdW1lIiwgMHgwNywgMCwgSERBX0lOUFVUKSwgKi8KLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKLQkvKkhEQV9DT0RFQ19NVVRFKCJPcHRpY2FsIE91dCBTd2l0Y2giLCAweDEwLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJPcHRpY2FsIE91dCBWb2x1bWUiLCAweDEwLCAwLCBIREFfT1VUUFVUKSwqLwotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmNvdW50ID0gMSwKLQkJLmluZm8gPSBzdGFjOTJ4eF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gc3RhYzkyeHhfbXV4X2VudW1fcHV0LAotCX0sCi0Je30KK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzk4NzJfcGluX25pZHNbXSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorCTB4MTEsIDB4MTMsIDB4MTQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgc3RhYzk4NzJfcGF0Y2hfb3BzID0gewotCS5idWlsZF9jb250cm9scyA9IHN0YWM5Mnh4X2J1aWxkX2NvbnRyb2xzLAotCS5idWlsZF9wY21zID0gc3RhYzkyeHhfYnVpbGRfcGNtcywKLQkuaW5pdCA9IHN0YWM5Mnh4X2luaXQsCi0JLmZyZWUgPSBzdGFjOTJ4eF9mcmVlLAotI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCi0JLnJlc3VtZSA9IHN0YWM5Mnh4X3Jlc3VtZSwKLSNlbmRpZgorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTg3Ml9hZGNfbmlkc1tdID0geworCTB4OCAvKiwweDYqLwogfTsKIAotc3RhdGljIGludCBzdGFjOTg3Ml92YWlvX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHN0YWM5Mnh4X2luaXQoY29kZWMpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KQotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KGNvZGVjLCBTVEFDX0hQX0VWRU5UIDw8IDI2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RhYzk4NzJfdmFpb19ocF9kZXRlY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0JaWYgKGdldF9waW5fcHJlc2VuY2UoY29kZWMsIDB4MGEpKSB7Ci0JCXN0YWM5Mnh4X3Jlc2V0X3BpbmN0bChjb2RlYywgMHgwZiwgQUNfUElOQ1RMX09VVF9FTik7Ci0JCXN0YWM5Mnh4X3NldF9waW5jdGwoY29kZWMsIDB4MGEsIEFDX1BJTkNUTF9PVVRfRU4pOwotCX0gZWxzZSB7Ci0JCXN0YWM5Mnh4X3Jlc2V0X3BpbmN0bChjb2RlYywgMHgwYSwgQUNfUElOQ1RMX09VVF9FTik7Ci0JCXN0YWM5Mnh4X3NldF9waW5jdGwoY29kZWMsIDB4MGYsIEFDX1BJTkNUTF9PVVRfRU4pOwotCX0KLX0gCi0KLXN0YXRpYyB2b2lkIHN0YWM5ODcyX3ZhaW9fdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIFNUQUNfSFBfRVZFTlQ6Ci0JCXN0YWM5ODcyX3ZhaW9faHBfZGV0ZWN0KGNvZGVjLCByZXMpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBzdGFjOTg3Ml92YWlvX3BhdGNoX29wcyA9IHsKLQkuYnVpbGRfY29udHJvbHMgPSBzdGFjOTJ4eF9idWlsZF9jb250cm9scywKLQkuYnVpbGRfcGNtcyA9IHN0YWM5Mnh4X2J1aWxkX3BjbXMsCi0JLmluaXQgPSBzdGFjOTg3Ml92YWlvX2luaXQsCi0JLmZyZWUgPSBzdGFjOTJ4eF9mcmVlLAotCS51bnNvbF9ldmVudCA9IHN0YWM5ODcyX3ZhaW9fdW5zb2xfZXZlbnQsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZSA9IHN0YWM5Mnh4X3Jlc3VtZSwKLSNlbmRpZgorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTg3Ml9tdXhfbmlkc1tdID0geworCTB4MTUKIH07CiAKLWVudW0geyAvKiBGRSBhbmQgU1ogc2VyaWVzLiBpZD0weDgzODQ3NjYxIGFuZCBzdWJzeXM9MHgxMDREMDcwMCBvciAxMDREMTAwMC4gKi8KLSAgICAgICBDWEQ5ODcyUkRfVkFJTywKLSAgICAgICAvKiBVbmtub3duLiBpZD0weDgzODQ3NjYyIGFuZCBzdWJzeXM9MHgxMDREMTIwMCBvciAxMDREMTAwMC4gKi8KLSAgICAgICBTVEFDOTg3MkFLX1ZBSU8sIAotICAgICAgIC8qIFVua25vd24uIGlkPTB4ODM4NDc2NjEgYW5kIHN1YnN5cz0weDEwNEQxMjAwLiAqLwotICAgICAgIFNUQUM5ODcyS19WQUlPLAotICAgICAgIC8qIEFSIFNlcmllcy4gaWQ9MHg4Mzg0NzY2NCBhbmQgc3Vic3lzPTEwNEQxMzAwICovCi0gICAgICAgQ1hEOTg3MkFLRF9WQUlPLAotICAgICAgIFNUQUNfOTg3Ml9NT0RFTFMsCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5ODcyX3ZhaW9fcGluX2NvbmZpZ3NbOV0gPSB7CisJMHgwMzIxMTAyMCwgMHg0MTExMTFmMCwgMHg0MTExMTFmMCwgMHgwM2ExNTAzMCwKKwkweDQxMTExMWYwLCAweDkwMTcwMTEwLCAweDQxMTExMWYwLCAweDQxMTExMWYwLAorCTB4OTBhNzAxM2UKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTg3Ml9tb2RlbHNbU1RBQ185ODcyX01PREVMU10gPSB7Ci0JW0NYRDk4NzJSRF9WQUlPXQk9ICJ2YWlvIiwKLQlbQ1hEOTg3MkFLRF9WQUlPXQk9ICJ2YWlvLWFyIiwKKwlbU1RBQ185ODcyX0FVVE9dID0gImF1dG8iLAorCVtTVEFDXzk4NzJfVkFJT10gPSAidmFpbyIsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTg3Ml9icmRfdGJsW1NUQUNfOTg3Ml9NT0RFTFNdID0geworCVtTVEFDXzk4NzJfVkFJT10gPSBzdGFjOTg3Ml92YWlvX3Bpbl9jb25maWdzLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5ODcyX2NmZ190YmxbXSA9IHsKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MWU2LCAiU29ueSBWQUlPIEYvUyIsIENYRDk4NzJSRF9WQUlPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MWVmLCAiU29ueSBWQUlPIEYvUyIsIENYRDk4NzJSRF9WQUlPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MWZkLCAiU29ueSBWQUlPIEFSIiwgQ1hEOTg3MkFLRF9WQUlPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MjA1LCAiU29ueSBWQUlPIEFSIiwgQ1hEOTg3MkFLRF9WQUlPKSwKLQl7fQorCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKIHN0YXRpYyBpbnQgcGF0Y2hfc3RhYzk4NzIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyOwogCi0JYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTg3Ml9NT0RFTFMsCi0JCQkJCQkgIHN0YWM5ODcyX21vZGVscywKLQkJCQkJCSAgc3RhYzk4NzJfY2ZnX3RibCk7Ci0JaWYgKGJvYXJkX2NvbmZpZyA8IDApCi0JCS8qIHVua25vd24gY29uZmlnLCBsZXQgZ2VuZXJpYy1wYXJzZXIgZG8gaXRzIGpvYi4uLiAqLwotCQlyZXR1cm4gc25kX2hkYV9wYXJzZV9nZW5lcmljX2NvZGVjKGNvZGVjKTsKLQkKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0KIAljb2RlYy0+c3BlYyA9IHNwZWM7Ci0Jc3dpdGNoIChib2FyZF9jb25maWcpIHsKLQljYXNlIENYRDk4NzJSRF9WQUlPOgotCWNhc2UgU1RBQzk4NzJBS19WQUlPOgotCWNhc2UgU1RBQzk4NzJLX1ZBSU86Ci0JCXNwZWMtPm1peGVyID0gdmFpb19taXhlcjsKLQkJc3BlYy0+aW5pdCA9IHZhaW9faW5pdDsKLQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKLQkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKHZhaW9fZGFjcyk7Ci0JCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gdmFpb19kYWNzOwotCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBWQUlPX0hQX0RBQzsKLQkJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHZhaW9fYWRjcyk7Ci0JCXNwZWMtPmFkY19uaWRzID0gdmFpb19hZGNzOwotCQlzcGVjLT5udW1fcHdycyA9IDA7Ci0JCXNwZWMtPmlucHV0X211eCA9ICZ2YWlvX211eDsKLQkJc3BlYy0+bXV4X25pZHMgPSB2YWlvX211eF9uaWRzOwotCQljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzk4NzJfdmFpb19wYXRjaF9vcHM7Ci0JCWJyZWFrOwotCQotCWNhc2UgQ1hEOTg3MkFLRF9WQUlPOgotCQlzcGVjLT5taXhlciA9IHZhaW9fYXJfbWl4ZXI7Ci0JCXNwZWMtPmluaXQgPSB2YWlvX2FyX2luaXQ7Ci0JCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7Ci0JCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRSh2YWlvX2RhY3MpOwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHZhaW9fZGFjczsKLQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gVkFJT19IUF9EQUM7Ci0JCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRSh2YWlvX2FkY3MpOwotCQlzcGVjLT5udW1fcHdycyA9IDA7Ci0JCXNwZWMtPmFkY19uaWRzID0gdmFpb19hZGNzOwotCQlzcGVjLT5pbnB1dF9tdXggPSAmdmFpb19tdXg7Ci0JCXNwZWMtPm11eF9uaWRzID0gdmFpb19tdXhfbmlkczsKLQkJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5ODcyX3BhdGNoX29wczsKLQkJYnJlYWs7Ci0JfQogCisJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTg3Ml9NT0RFTFMsCisJCQkJCQkJc3RhYzk4NzJfbW9kZWxzLAorCQkJCQkJCXN0YWM5ODcyX2NmZ190YmwpOworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQorCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzk4NzIsICIKKwkJCSAgICAidXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCisJCQkJCSBzdGFjOTg3Ml9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOworCisJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5ODcyX3Bpbl9uaWRzKTsKKwlzcGVjLT5waW5fbmlkcyA9IHN0YWM5ODcyX3Bpbl9uaWRzOworCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CisJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHN0YWM5ODcyX2FkY19uaWRzKTsKKwlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5ODcyX2FkY19uaWRzOworCXNwZWMtPm51bV9tdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzk4NzJfbXV4X25pZHMpOworCXNwZWMtPm11eF9uaWRzID0gc3RhYzk4NzJfbXV4X25pZHM7CisJc3BlYy0+bWl4ZXIgPSBzdGFjOTg3Ml9taXhlcjsKKwlzcGVjLT5pbml0ID0gc3RhYzk4NzJfY29yZV9pbml0OworCisJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MTAsIDB4MTIpOworCWlmIChlcnIgPCAwKSB7CisJCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwppbmRleCBjNzYxMzk0Li5iMjVhNWNjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKQEAgLTEzMDgsMTYgKzEzMDgsMTMgQEAKIAl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CiAJdW5zaWduZWQgY2hhciBzZXFhc3NvYzsKIAotCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBuaWQpOwogCXNlcWFzc29jID0gKHVuc2lnbmVkIGNoYXIpIGdldF9kZWZjZmdfYXNzb2NpYXRpb24oZGVmX2NvbmYpOwogCXNlcWFzc29jID0gKHNlcWFzc29jIDw8IDQpIHwgZ2V0X2RlZmNmZ19zZXF1ZW5jZShkZWZfY29uZik7CiAJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpIHsKIAkJaWYgKHNlcWFzc29jID09IDB4ZmYpIHsKIAkJCWRlZl9jb25mID0gZGVmX2NvbmYgJiAofihBQ19KQUNLX1BPUlRfQk9USCA8PCAzMCkpOwotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMywKLQkJCQkJICAgIGRlZl9jb25mID4+IDI0KTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgbmlkLCBkZWZfY29uZik7CiAJCX0KIAl9CiAKQEAgLTEzNTQsNyArMTM1MSw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBWVDE3MDhfRElHT1VUX05JRDsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gVlQxNzA4X0RJR0lOX05JRDsKQEAgLTE4MjcsNyArMTgyNCw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBWVDE3MDlfRElHT1VUX05JRDsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gVlQxNzA5X0RJR0lOX05JRDsKQEAgLTIzNzEsNyArMjM2OCw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBWVDE3MDhCX0RJR09VVF9OSUQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IFZUMTcwOEJfRElHSU5fTklEOwpAQCAtMjgzNiw3ICsyODMzLDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwOFNfRElHT1VUX05JRDsKIAogCXNwZWMtPmV4dHJhX2RpZ19vdXRfbmlkID0gMHgxNTsKQEAgLTMxNTUsNyArMzE1Miw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBWVDE3MDJfRElHT1VUX05JRDsKIAogCXNwZWMtPmV4dHJhX2RpZ19vdXRfbmlkID0gMHgxQjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCA1OGQ3Y2RhLi4zZGQ2M2YxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAkJCXUxNiBwYmtzdGF0dXM7CiAJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAkJCXBia3N0YXR1cyA9IGludyhJQ0VEUyhpY2UsIElOVFNUQVQpKTsKLQkJCS8qIHByaW50aygicGJrc3RhdHVzID0gMHgleFxuIiwgcGJrc3RhdHVzKTsgKi8KKwkJCS8qIHByaW50ayhLRVJOX0RFQlVHICJwYmtzdGF0dXMgPSAweCV4XG4iLCBwYmtzdGF0dXMpOyAqLwogCQkJZm9yIChpZHggPSAwOyBpZHggPCA2OyBpZHgrKykgewogCQkJCWlmICgocGJrc3RhdHVzICYgKDMgPDwgKGlkeCAqIDIpKSkgPT0gMCkKIAkJCQkJY29udGludWU7CkBAIC0yNjQ4LDkgKzI2NDgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJJQ0UxNzEyIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIklDRW5zZW1ibGUgSUNFMTcxMiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IGJiOGQ4YzcuLjEyODUxMGU3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCkBAIC0yNDEsNiArMjQxLDggQEAKIAkJCQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtLCBsaXN0KTsKIH0KIAorc3RhdGljIHZvaWQgZW5hYmxlX21pZGlfaXJxKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1OCBmbGFnLCBpbnQgZW5hYmxlKTsKKwogc3RhdGljIHZvaWQgdnQxNzI0X21pZGlfd3JpdGUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqczsKQEAgLTI1NCw2ICsyNTYsMTEgQEAKIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCiAJCQlvdXRiKGJ1ZmZlcltpXSwgSUNFUkVHMTcyNChpY2UsIE1QVV9EQVRBKSk7CiAJfQorCS8qIG1hc2sgaXJxIHdoZW4gYWxsIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KKwkgKiBlbmFibGVkIGFnYWluIGluIG91dHB1dF90cmlnZ2VyIHdoZW4gdGhlIG5ldyBkYXRhIGNvbWVzIGluLgorCSAqLworCWVuYWJsZV9taWRpX2lycShpY2UsIFZUMTcyNF9JUlFfTVBVX1RYLAorCQkJIXNuZF9yYXdtaWRpX3RyYW5zbWl0X2VtcHR5KHMpKTsKIH0KIAogc3RhdGljIHZvaWQgdnQxNzI0X21pZGlfcmVhZChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKQEAgLTI3MiwzMSArMjc5LDM0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICB1OCBmbGFnLCBpbnQgZW5hYmxlKQorLyogY2FsbCB3aXRoIGljZS0+cmVnX2xvY2sgKi8KK3N0YXRpYyB2b2lkIGVuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdTggZmxhZywgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKLQl1OCBtYXNrOwotCi0Jc3Bpbl9sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7Ci0JbWFzayA9IGluYihJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOworCXU4IG1hc2sgPSBpbmIoSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKTsKIAlpZiAoZW5hYmxlKQogCQltYXNrICY9IH5mbGFnOwogCWVsc2UKIAkJbWFzayB8PSBmbGFnOwogCW91dGIobWFzaywgSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKTsKK30KKworc3RhdGljIHZvaWQgdnQxNzI0X2VuYWJsZV9taWRpX2lycShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgdTggZmxhZywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCXNwaW5fbG9ja19pcnEoJmljZS0+cmVnX2xvY2spOworCWVuYWJsZV9taWRpX2lycShpY2UsIGZsYWcsIGVuYWJsZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKIH0KIAogc3RhdGljIGludCB2dDE3MjRfbWlkaV9vdXRwdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzKQogewotCXZ0MTcyNF9lbmFibGVfbWlkaV9pcnEocywgVlQxNzI0X0lSUV9NUFVfVFgsIDEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZ0MTcyNF9taWRpX291dHB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzKQogewotCXZ0MTcyNF9lbmFibGVfbWlkaV9pcnEocywgVlQxNzI0X0lSUV9NUFVfVFgsIDApOwogCXJldHVybiAwOwogfQogCkBAIC0zMTEsNiArMzIxLDcgQEAKIAkJdnQxNzI0X21pZGlfd3JpdGUoaWNlKTsKIAl9IGVsc2UgewogCQlpY2UtPm1pZGlfb3V0cHV0ID0gMDsKKwkJZW5hYmxlX21pZGlfaXJxKGljZSwgVlQxNzI0X0lSUV9NUFVfVFgsIDApOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2UtPnJlZ19sb2NrLCBmbGFncyk7CiB9CkBAIC0zMjAsNiArMzMxLDcgQEAKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHMtPnJtaWRpLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCisJdnQxNzI0X2VuYWJsZV9taWRpX2lycShzLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJLyogMzIgYnl0ZXMgc2hvdWxkIGJlIHRyYW5zbWl0dGVkIGluIGxlc3MgdGhhbiBhYm91dCAxMiBtcyAqLwogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNSk7CiAJZG8gewpAQCAtMzg5LDI0ICs0MDEsMjQgQEAKIAkJc3RhdHVzICY9IHN0YXR1c19tYXNrOwogCQlpZiAoc3RhdHVzID09IDApCiAJCQlicmVhazsKKwkJc3Bpbl9sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJaWYgKCsrdGltZW91dCA+IDEwKSB7CiAJCQlzdGF0dXMgPSBpbmIoSUNFUkVHMTcyNChpY2UsIElSUVNUQVQpKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiaWNlMTcyNDogVG9vIGxvbmcgaXJxIGxvb3AsICIKIAkJCSAgICAgICAic3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKIAkJCWlmIChzdGF0dXMgJiBWVDE3MjRfSVJRX01QVV9UWCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiaWNlMTcyNDogRGlzYWJsaW5nIE1QVV9UWFxuIik7Ci0JCQkJb3V0YihpbmIoSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKSB8Ci0JCQkJICAgICBWVDE3MjRfSVJRX01QVV9UWCwKLQkJCQkgICAgIElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7CisJCQkJZW5hYmxlX21pZGlfaXJxKGljZSwgVlQxNzI0X0lSUV9NUFVfVFgsIDApOwogCQkJfQorCQkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOwogCQkJYnJlYWs7CiAJCX0KIAkJaGFuZGxlZCA9IDE7CiAJCWlmIChzdGF0dXMgJiBWVDE3MjRfSVJRX01QVV9UWCkgewotCQkJc3Bpbl9sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJCWlmIChpY2UtPm1pZGlfb3V0cHV0KQogCQkJCXZ0MTcyNF9taWRpX3dyaXRlKGljZSk7Ci0JCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CisJCQllbHNlCisJCQkJZW5hYmxlX21pZGlfaXJxKGljZSwgVlQxNzI0X0lSUV9NUFVfVFgsIDApOwogCQkJLyogRHVlIHRvIG15c3RlcmljYWwgcmVhc29ucywgTVBVX1RYIGlzIGFsd2F5cwogCQkJICogZ2VuZXJhdGVkIChhbmQgY2FuJ3QgYmUgY2xlYXJlZCkgd2hlbiBhIFBDTQogCQkJICogcGxheWJhY2sgaXMgZ29pbmcuICBTbyBsZXQncyBpZ25vcmUgYXQgdGhlCkBAIC00MTUsMTUgKzQyNywxNCBAQAogCQkJc3RhdHVzX21hc2sgJj0gflZUMTcyNF9JUlFfTVBVX1RYOwogCQl9CiAJCWlmIChzdGF0dXMgJiBWVDE3MjRfSVJRX01QVV9SWCkgewotCQkJc3Bpbl9sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJCWlmIChpY2UtPm1pZGlfaW5wdXQpCiAJCQkJdnQxNzI0X21pZGlfcmVhZChpY2UpOwogCQkJZWxzZQogCQkJCXZ0MTcyNF9taWRpX2NsZWFyX3J4KGljZSk7Ci0JCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCX0KIAkJLyogYWNrIE1QVSBpcnEgKi8KIAkJb3V0YihzdGF0dXMsIElDRVJFRzE3MjQoaWNlLCBJUlFTVEFUKSk7CisJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJaWYgKHN0YXR1cyAmIFZUMTcyNF9JUlFfTVRQQ00pIHsKIAkJCS8qCiAJCQkgKiBNdWx0aS10cmFjayBQQ00KQEAgLTc0NSw3ICs3NTYsMTQgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CiAKLQkvKiBwcmludGsoInBybyBwcmVwYXJlOiBjaCA9ICVkLCBhZGRyID0gMHgleCwgYnVmZmVyID0gMHgleCwgcGVyaW9kID0gMHgleFxuIiwgc3Vic3RyZWFtLT5ydW50aW1lLT5jaGFubmVscywgKHVuc2lnbmVkIGludClzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hZGRyLCBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwgc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSkpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInBybyBwcmVwYXJlOiBjaCA9ICVkLCBhZGRyID0gMHgleCwgIgorCSAgICAgICAiYnVmZmVyID0gMHgleCwgcGVyaW9kID0gMHgleFxuIiwKKwkgICAgICAgc3Vic3RyZWFtLT5ydW50aW1lLT5jaGFubmVscywKKwkgICAgICAgKHVuc2lnbmVkIGludClzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hZGRyLAorCSAgICAgICBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKKwkgICAgICAgc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSkpOworCSovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMjIsNyArMjE0MCw5IEBACiAJd2FpdF9pMmNfYnVzeShpY2UpOwogCXZhbCA9IGluYihJQ0VSRUcxNzI0KGljZSwgSTJDX0RBVEEpKTsKIAltdXRleF91bmxvY2soJmljZS0+aTJjX211dGV4KTsKLQkvKiBwcmludGsoImkyY19yZWFkOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgdmFsKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJpMmNfcmVhZDogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIHZhbCk7CisJKi8KIAlyZXR1cm4gdmFsOwogfQogCkBAIC0yMTMxLDcgKzIxNTEsOSBAQAogewogCW11dGV4X2xvY2soJmljZS0+aTJjX211dGV4KTsKIAl3YWl0X2kyY19idXN5KGljZSk7Ci0JLyogcHJpbnRrKCJpMmNfd3JpdGU6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCBkYXRhKTsgKi8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJpMmNfd3JpdGU6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCBkYXRhKTsKKwkqLwogCW91dGIoYWRkciwgSUNFUkVHMTcyNChpY2UsIEkyQ19CWVRFX0FERFIpKTsKIAlvdXRiKGRhdGEsIElDRVJFRzE3MjQoaWNlLCBJMkNfREFUQSkpOwogCW91dGIoZGV2IHwgVlQxNzI0X0kyQ19XUklURSwgSUNFUkVHMTcyNChpY2UsIEkyQ19ERVZfQUREUikpOwpAQCAtMjQ1Niw5ICsyNDc4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiSUNFMTcyNCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJQ0Vuc2VtYmxlIElDRTE3MjQiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYwppbmRleCBjNTE2NTliLi5mZDk0OGJmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCkBAIC0zNDUsOCArMzQ1LDkgQEAKIAkJCW5ld19ncGlvID0gIG9sZF9ncGlvICYKIAkJCQl+KCh1bnNpZ25lZCBpbnQpIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKIAl9Ci0JLyogcHJpbnRrKCJKVUxJIC0gbXV0ZS91bm11dGU6IGNvbnRyb2xfdmFsdWU6IDB4JXgsIG9sZF9ncGlvOiAweCV4LCBcCi0JCW5ld19ncGlvIDB4JXhcbiIsCisJLyogcHJpbnRrKEtFUk5fREVCVUcKKwkJIkpVTEkgLSBtdXRlL3VubXV0ZTogY29udHJvbF92YWx1ZTogMHgleCwgb2xkX2dwaW86IDB4JXgsICIKKwkJIm5ld19ncGlvIDB4JXhcbiIsCiAJCSh1bnNpZ25lZCBpbnQpdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0sIG9sZF9ncGlvLAogCQluZXdfZ3Bpbyk7ICovCiAJaWYgKG9sZF9ncGlvICE9IG5ld19ncGlvKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMKaW5kZXggNDhkMzY3OS4uMmE4ZTVjZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYwpAQCAtMTMzLDggKzEzMywxMCBAQAogCQlpZHggID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJvbCwgJnVjb250cm9sLT5pZCkgKyBTVEFDOTQ2WF9MRl9WT0xVTUU7CiAJLyogZHVlIHRvIHBvc3NpYmxlIGNvbmZsaWN0cyB3aXRoIHN0YWM5NDYwX3NldF9yYXRlX3ZhbCwgbXV0ZXhpbmcgKi8KIAltdXRleF9sb2NrKCZzcGVjLT5tdXRlX211dGV4KTsKLQkvKnByaW50aygiTXV0ZSBwdXQ6IHJlZyAweCUwMngsIGN0cmwgdmFsdWU6IDB4JTAyeFxuIiwgaWR4LAotCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Ki8KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJNdXRlIHB1dDogcmVnIDB4JTAyeCwgY3RybCB2YWx1ZTogMHglMDJ4XG4iLCBpZHgsCisJICAgICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKwkqLwogCWNoYW5nZSA9IHN0YWM5NDYwX2RhY19tdXRlKGljZSwgaWR4LCB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CiAJbXV0ZXhfdW5sb2NrKCZzcGVjLT5tdXRlX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwpAQCAtMTg1LDcgKzE4NywxMCBAQAogCWNoYW5nZSA9IChvdm9sICE9IG52b2wpOwogCWlmIChjaGFuZ2UpIHsKIAkJb3ZvbCA9ICAoMHg3ZiAtIG52b2wpIHwgKHRtcCAmIDB4ODApOwotCQkvKnByaW50aygiREFDIFZvbHVtZTogcmVnIDB4JTAyeDogMHglMDJ4XG4iLCBpZHgsIG92b2wpOyovCisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJEQUMgVm9sdW1lOiByZWcgMHglMDJ4OiAweCUwMnhcbiIsCisJCSAgICAgICBpZHgsIG92b2wpOworCQkqLwogCQlzdGFjOTQ2MF9wdXQoaWNlLCBpZHgsICgweDdmIC0gbnZvbCkgfCAodG1wICYgMHg4MCkpOwogCX0KIAlyZXR1cm4gY2hhbmdlOwpAQCAtMzQ0LDcgKzM0OSw3IEBACiAJZm9yIChpZHggPSAwOyBpZHggPCA3IDsgKytpZHgpCiAJCWNoYW5nZWRbaWR4XSA9IHN0YWM5NDYwX2RhY19tdXRlKGljZSwKIAkJCQlTVEFDOTQ2WF9NQVNURVJfVk9MVU1FICsgaWR4LCAwKTsKLQkvKnByaW50aygiUmF0ZSBjaGFuZ2U6ICVkLCBuZXcgTUM6IDB4JTAyeFxuIiwgcmF0ZSwgbmV3KTsqLworCS8qcHJpbnRrKEtFUk5fREVCVUcgIlJhdGUgY2hhbmdlOiAlZCwgbmV3IE1DOiAweCUwMnhcbiIsIHJhdGUsIG5ldyk7Ki8KIAlzdGFjOTQ2MF9wdXQoaWNlLCBTVEFDOTQ2WF9NQVNURVJfQ0xPQ0tJTkcsIG5ldyk7CiAJdWRlbGF5KDEwKTsKIAkvKiB1bm11dGluZyAtIG9ubHkgb3JpZ2luYWxseSB1bm11dGVkIGRhY3MgLQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCBlOTAwY2RjLi41NzY0ODgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtNjg5LDcgKzY4OSw3IEBACiAJCQliZGJhcltpZHggKyAxXSA9IGNwdV90b19sZTMyKDB4ODAwMDAwMDAgfCAvKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLwogCQkJCQkJICAgICBpY2hkZXYtPmZyYWdzaXplID4+IGljaGRldi0+cG9zX3NoaWZ0KTsKICNpZiAwCi0JCQlwcmludGsoImJkYmFyWyVpXSA9IDB4JXggWzB4JXhdXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgImJkYmFyWyVpXSA9IDB4JXggWzB4JXhdXG4iLAogCQkJICAgICAgIGlkeCArIDAsIGJkYmFyW2lkeCArIDBdLCBiZGJhcltpZHggKyAxXSk7CiAjZW5kaWYKIAkJfQpAQCAtNzAxLDggKzcwMSwxMCBAQAogCWljaGRldi0+bHZpX2ZyYWcgPSBJQ0hfUkVHX0xWSV9NQVNLICUgaWNoZGV2LT5mcmFnczsKIAlpY2hkZXYtPnBvc2l0aW9uID0gMDsKICNpZiAwCi0JcHJpbnRrKCJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCi0JCQlpY2hkZXYtPmx2aV9mcmFnLCBpY2hkZXYtPmZyYWdzLCBpY2hkZXYtPmZyYWdzaXplLCBpY2hkZXYtPmZyYWdzaXplMSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImx2aV9mcmFnID0gJWksIGZyYWdzID0gJWksIHBlcmlvZF9zaXplID0gMHgleCwgIgorCSAgICAgICAicGVyaW9kX3NpemUxID0gMHgleFxuIiwKKwkgICAgICAgaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwKKwkgICAgICAgaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2VuZGlmCiAJLyogY2xlYXIgaW50ZXJydXB0cyAqLwogCWlwdXRieXRlKGNoaXAsIHBvcnQgKyBpY2hkZXYtPnJvZmZfc3IsIElDSF9GSUZPRSB8IElDSF9CQ0lTIHwgSUNIX0xWQkNJKTsKQEAgLTc2OCw3ICs3NzAsOCBAQAogCQlpY2hkZXYtPmx2aV9mcmFnICU9IGljaGRldi0+ZnJhZ3M7CiAJCWljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyXSA9IGNwdV90b19sZTMyKGljaGRldi0+cGh5c2J1ZiArIGljaGRldi0+bHZpX2ZyYWcgKiBpY2hkZXYtPmZyYWdzaXplMSk7CiAjaWYgMAotCXByaW50aygibmV3OiBiZGJhclslaV0gPSAweCV4IFsweCV4XSwgcHJlZmV0Y2ggPSAlaSwgYWxsID0gMHgleCwgMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAibmV3OiBiZGJhclslaV0gPSAweCV4IFsweCV4XSwgcHJlZmV0Y2ggPSAlaSwgIgorCSAgICAgICAiYWxsID0gMHgleCwgMHgleFxuIiwKIAkgICAgICAgaWNoZGV2LT5sdmkgKiAyLCBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMl0sCiAJICAgICAgIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyICsgMV0sIGluYihJQ0hfUkVHX09GRl9QSVYgKyBwb3J0KSwKIAkgICAgICAgaW5sKHBvcnQgKyA0KSwgaW5iKHBvcnQgKyBJQ0hfUkVHX09GRl9DUikpOwpAQCAtMjI4NywyMyArMjI5MCwyMyBAQAogCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoQUxJX0lOVEVSUlVQVFNSKSwgMHgwMDAwMDAwMCk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2ludGVsOHgwX2ljaF9jaGlwX2luaXQoc3RydWN0IGludGVsOHgwICpjaGlwLCBpbnQgcHJvYmluZykKLXsKLQl1bnNpZ25lZCBsb25nIGVuZF90aW1lOwotCXVuc2lnbmVkIGludCBjbnQsIHN0YXR1cywgbnN0YXR1czsKLQkKLQkvKiBwdXQgbG9naWMgdG8gcmlnaHQgc3RhdGUgKi8KLQkvKiBmaXJzdCBjbGVhciBzdGF0dXMgYml0cyAqLwotCXN0YXR1cyA9IElDSF9SQ1MgfCBJQ0hfTUNJTlQgfCBJQ0hfUE9JTlQgfCBJQ0hfUElJTlQ7Ci0JaWYgKGNoaXAtPmRldmljZV90eXBlID09IERFVklDRV9ORk9SQ0UpCi0JCXN0YXR1cyB8PSBJQ0hfTlZTUElOVDsKLQljbnQgPSBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSk7Ci0JaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSksIGNudCAmIHN0YXR1cyk7CisjaWZkZWYgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBpY2hfY2hpcF9yZXNldF9tb2RlW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwMTQsIDB4MDUxZiwgIlRoaW5rcGFkIFIzMiIsIDEpLAorCXsgfSAvKiBlbmQgKi8KK307CiAKK3N0YXRpYyBpbnQgc25kX2ludGVsOHgwX2ljaF9jaGlwX2NvbGRfcmVzZXQoc3RydWN0IGludGVsOHgwICpjaGlwKQoreworCXVuc2lnbmVkIGludCBjbnQ7CiAJLyogQUNMaW5rIG9uLCAyIGNoYW5uZWxzICovCisKKwlpZiAoc25kX3BjaV9xdWlya19sb29rdXAoY2hpcC0+cGNpLCBpY2hfY2hpcF9yZXNldF9tb2RlKSkKKwkJcmV0dXJuIC1FSU87CisKIAljbnQgPSBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSk7CiAJY250ICY9IH4oSUNIX0FDTElOSyB8IElDSF9QQ01fMjQ2X01BU0spOwotI2lmZGVmIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFCisKIAkvKiBkbyBjb2xkIHJlc2V0IC0gdGhlIGZ1bGwgYWM5NyBwb3dlcmRvd24gbWF5IGxlYXZlIHRoZSBjb250cm9sbGVyCiAJICogaW4gYSB3YXJtIHN0YXRlIGJ1dCBhY3R1YWxseSBpdCBjYW5ub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgY29kZWMuCiAJICovCkBAIC0yMzEyLDIyICsyMzE1LDU4IEBACiAJdWRlbGF5KDEwKTsKIAlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSwgY250IHwgSUNIX0FDOTdDT0xEKTsKIAltc2xlZXAoMSk7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jYW5fY29sZF9yZXNldChjaGlwKSBcCisJKCFzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIGljaF9jaGlwX3Jlc2V0X21vZGUpKQogI2Vsc2UKKyNkZWZpbmUgc25kX2ludGVsOHgwX2ljaF9jaGlwX2NvbGRfcmVzZXQoY2hpcCkJMAorI2RlZmluZSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY2FuX2NvbGRfcmVzZXQoY2hpcCkgKDApCisjZW5kaWYKKworc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfcmVzZXQoc3RydWN0IGludGVsOHgwICpjaGlwKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CisJdW5zaWduZWQgaW50IGNudDsKKwkvKiBBQ0xpbmsgb24sIDIgY2hhbm5lbHMgKi8KKwljbnQgPSBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSk7CisJY250ICY9IH4oSUNIX0FDTElOSyB8IElDSF9QQ01fMjQ2X01BU0spOwogCS8qIGZpbmlzaCBjb2xkIG9yIGRvIHdhcm0gcmVzZXQgKi8KIAljbnQgfD0gKGNudCAmIElDSF9BQzk3Q09MRCkgPT0gMCA/IElDSF9BQzk3Q09MRCA6IElDSF9BQzk3V0FSTTsKIAlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSwgY250KTsKIAllbmRfdGltZSA9IChqaWZmaWVzICsgKEhaIC8gNCkpICsgMTsKIAlkbyB7CiAJCWlmICgoaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpICYgSUNIX0FDOTdXQVJNKSA9PSAwKQotCQkJZ290byBfX29rOworCQkJcmV0dXJuIDA7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCX0gd2hpbGUgKHRpbWVfYWZ0ZXJfZXEoZW5kX3RpbWUsIGppZmZpZXMpKTsKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJBQyc5NyB3YXJtIHJlc2V0IHN0aWxsIGluIHByb2dyZXNzPyBbMHgleF1cbiIsCiAJCSAgIGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKSk7CiAJcmV0dXJuIC1FSU87Cit9CiAKLSAgICAgIF9fb2s6Ci0jZW5kaWYKK3N0YXRpYyBpbnQgc25kX2ludGVsOHgwX2ljaF9jaGlwX2luaXQoc3RydWN0IGludGVsOHgwICpjaGlwLCBpbnQgcHJvYmluZykKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lOworCXVuc2lnbmVkIGludCBzdGF0dXMsIG5zdGF0dXM7CisJdW5zaWduZWQgaW50IGNudDsKKwlpbnQgZXJyOworCisJLyogcHV0IGxvZ2ljIHRvIHJpZ2h0IHN0YXRlICovCisJLyogZmlyc3QgY2xlYXIgc3RhdHVzIGJpdHMgKi8KKwlzdGF0dXMgPSBJQ0hfUkNTIHwgSUNIX01DSU5UIHwgSUNIX1BPSU5UIHwgSUNIX1BJSU5UOworCWlmIChjaGlwLT5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfTkZPUkNFKQorCQlzdGF0dXMgfD0gSUNIX05WU1BJTlQ7CisJY250ID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSkpOworCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpLCBjbnQgJiBzdGF0dXMpOworCisJaWYgKHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jYW5fY29sZF9yZXNldChjaGlwKSkKKwkJZXJyID0gc25kX2ludGVsOHgwX2ljaF9jaGlwX2NvbGRfcmVzZXQoY2hpcCk7CisJZWxzZQorCQllcnIgPSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfcmVzZXQoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKIAlpZiAocHJvYmluZykgewogCQkvKiB3YWl0IGZvciBhbnkgY29kZWMgcmVhZHkgc3RhdHVzLgogCQkgKiBPbmNlIGl0IGJlY29tZXMgcmVhZHkgaXQgc2hvdWxkIHJlbWFpbiByZWFkeQpAQCAtMzA1OCw5ICszMDk3LDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBzaG9ydG5hbWVfdGFibGUgKm5hbWU7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoc3BkaWZfYWNsaW5rIDwgMCkKIAkJc3BkaWZfYWNsaW5rID0gY2hlY2tfZGVmYXVsdF9zcGRpZl9hY2xpbmsocGNpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCA5MzQ0OWU0Li42ZWMwZmM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC00MTEsNyArNDExLDEwIEBACiAJCQliZGJhcltpZHggKyAwXSA9IGNwdV90b19sZTMyKGljaGRldi0+cGh5c2J1ZiArICgoKGlkeCA+PiAxKSAqIGljaGRldi0+ZnJhZ3NpemUpICUgaWNoZGV2LT5zaXplKSk7CiAJCQliZGJhcltpZHggKyAxXSA9IGNwdV90b19sZTMyKDB4ODAwMDAwMDAgfCAvKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLwogCQkJCQkJICAgICBpY2hkZXYtPmZyYWdzaXplID4+IGNoaXAtPnBjbV9wb3Nfc2hpZnQpOwotCQkJLy8gcHJpbnRrKCJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwgaWR4ICsgMCwgYmRiYXJbaWR4ICsgMF0sIGJkYmFyW2lkeCArIDFdKTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsCisJCQkgICAgICAgaWR4ICsgMCwgYmRiYXJbaWR4ICsgMF0sIGJkYmFyW2lkeCArIDFdKTsKKwkJCSovCiAJCX0KIAkJaWNoZGV2LT5mcmFncyA9IGljaGRldi0+c2l6ZSAvIGljaGRldi0+ZnJhZ3NpemU7CiAJfQpAQCAtNDIxLDggKzQyNCwxMCBAQAogCWljaGRldi0+bHZpX2ZyYWcgPSBJQ0hfUkVHX0xWSV9NQVNLICUgaWNoZGV2LT5mcmFnczsKIAlpY2hkZXYtPnBvc2l0aW9uID0gMDsKICNpZiAwCi0JcHJpbnRrKCJsdmlfZnJhZyA9ICVpLCBmcmFncyA9ICVpLCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplMSA9IDB4JXhcbiIsCi0JCQlpY2hkZXYtPmx2aV9mcmFnLCBpY2hkZXYtPmZyYWdzLCBpY2hkZXYtPmZyYWdzaXplLCBpY2hkZXYtPmZyYWdzaXplMSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImx2aV9mcmFnID0gJWksIGZyYWdzID0gJWksIHBlcmlvZF9zaXplID0gMHgleCwgIgorCSAgICAgICAicGVyaW9kX3NpemUxID0gMHgleFxuIiwKKwkgICAgICAgaWNoZGV2LT5sdmlfZnJhZywgaWNoZGV2LT5mcmFncywgaWNoZGV2LT5mcmFnc2l6ZSwKKwkgICAgICAgaWNoZGV2LT5mcmFnc2l6ZTEpOwogI2VuZGlmCiAJLyogY2xlYXIgaW50ZXJydXB0cyAqLwogCWlwdXRieXRlKGNoaXAsIHBvcnQgKyBpY2hkZXYtPnJvZmZfc3IsIElDSF9GSUZPRSB8IElDSF9CQ0lTIHwgSUNIX0xWQkNJKTsKQEAgLTQ2NSw3ICs0NzAsOCBAQAogCQkJCQkJCSAgICAgaWNoZGV2LT5sdmlfZnJhZyAqCiAJCQkJCQkJICAgICBpY2hkZXYtPmZyYWdzaXplMSk7CiAjaWYgMAotCQlwcmludGsoIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sIHByZWZldGNoID0gJWksIGFsbCA9IDB4JXgsIDB4JXhcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCAiCisJCSAgICAgICAicHJlZmV0Y2ggPSAlaSwgYWxsID0gMHgleCwgMHgleFxuIiwKIAkJICAgICAgIGljaGRldi0+bHZpICogMiwgaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDJdLAogCQkgICAgICAgaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDIgKyAxXSwgaW5iKElDSF9SRUdfT0ZGX1BJViArIHBvcnQpLAogCQkgICAgICAgaW5sKHBvcnQgKyA0KSwgaW5iKHBvcnQgKyBJQ0hfUkVHX09GRl9DUikpOwpAQCAtMTI2OSw5ICsxMjc1LDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBzaG9ydG5hbWVfdGFibGUgKm5hbWU7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiSUNILU1PREVNIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkludGVsIElDSCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA1ZjgwMDZiLi44Yjc5OTY5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtMjQ0Myw5ICsyNDQzLDkgQEAKIAkJZGV2Kys7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLSAgICAgICAgaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKICAgICAgICAgaWYgKChlcnIgPSBzbmRfa29yZzEyMTJfY3JlYXRlKGNhcmQsIHBjaSwgJmtvcmcxMjEyKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWFlc3RybzMuYyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCmluZGV4IDU5YmJhZjguLjcwMTQxNTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCkBAIC0yNjkxLDkgKzI2OTEsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAocGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk86CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwppbmRleCBiYjE2MjUwLi5jMWViODRhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKQEAgLTEzNjYsMTIgKzEzNjYsMTIgQEAKIAkJZWxzZQogCQkJaWR4ID0gaW5kZXhbZGV2XSArIGk7CiAJCXNucHJpbnRmKHRtcGlkLCBzaXplb2YodG1waWQpLCAiJXMtJWQiLCBpZFtkZXZdID8gaWRbZGV2XSA6ICJNSVhBUlQiLCBpKTsKLQkJY2FyZCA9IHNuZF9jYXJkX25ldyhpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCk7CisJCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpZHgsIHRtcGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JCWlmICghIGNhcmQpIHsKKwkJaWYgKGVyciA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBhbGxvY2F0ZSB0aGUgY2FyZCAlZFxuIiwgaSk7CiAJCQlzbmRfbWl4YXJ0X2ZyZWUobWdyKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIGVycjsKIAkJfQogCiAJCXN0cmNweShjYXJkLT5kcml2ZXIsIENBUkRfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYwppbmRleCAzNzgyYjUyLi40Y2Y0Y2Q4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKQEAgLTM0NSw4ICszNDUsOCBAQAogCXN0YXR1c19kYXVnaHQgPSByZWFkbF9iZSggTUlYQVJUX01FTSggbWdyLE1JWEFSVF9QU0VVRE9SRUdfRFhMWF9TVEFUVVNfT0ZGU0VUICkpOwogCiAJLyogbW90aGVyYm9hcmQgeGlsaW54IHN0YXR1cyA1IHdpbGwgc2F5IHRoYXQgdGhlIGJvYXJkIGlzIHBlcmZvcm1pbmcgYSByZXNldCAqLwotCWlmKCBzdGF0dXNfeGlsaW54ID09IDUgKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJtaVhhcnQgaXMgcmVzZXR0aW5nICFcbiIpOworCWlmIChzdGF0dXNfeGlsaW54ID09IDUpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibWlYYXJ0IGlzIHJlc2V0dGluZyAhXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiBsYXRlciAqLwogCX0KIApAQCAtMzU0LDEzICszNTQsMTQgQEAKIAljYXNlIE1JWEFSVF9NT1RIRVJCT0FSRF9YTFhfSU5ERVg6CiAKIAkJLyogeGlsaW54IGFscmVhZHkgbG9hZGVkID8gKi8gCi0JCWlmKCBzdGF0dXNfeGlsaW54ID09IDQgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0RFQlVHICJ4aWxpbnggaXMgYWxyZWFkeSBsb2FkZWQgIVxuIik7CisJCWlmIChzdGF0dXNfeGlsaW54ID09IDQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAieGlsaW54IGlzIGFscmVhZHkgbG9hZGVkICFcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogdGhlIHN0YXR1cyBzaG91bGQgYmUgMCA9PSAiaWRsZSIgKi8KLQkJaWYoIHN0YXR1c194aWxpbnggIT0gMCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJ4aWxpbnggbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLCBzdGF0dXNfeGlsaW54KTsKKwkJaWYgKHN0YXR1c194aWxpbnggIT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAieGlsaW54IGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwKKwkJCQkgICBzdGF0dXNfeGlsaW54KTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogCkBAIC0zODksMjEgKzM5MCwyMyBAQAogCiAJY2FzZSBNSVhBUlRfTU9USEVSQk9BUkRfRUxGX0lOREVYOgogCi0JCWlmKCBzdGF0dXNfZWxmID09IDQgKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0RFQlVHICJlbGYgZmlsZSBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKKwkJaWYgKHN0YXR1c19lbGYgPT0gNCkgeworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJlbGYgZmlsZSBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAKIAkJLyogdGhlIHN0YXR1cyBzaG91bGQgYmUgMCA9PSAiaWRsZSIgKi8KLQkJaWYoIHN0YXR1c19lbGYgIT0gMCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJlbGYgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLCBzdGF0dXNfZWxmKTsKKwkJaWYgKHN0YXR1c19lbGYgIT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZWxmIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwKKwkJCQkgICBzdGF0dXNfZWxmKTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogCiAJCS8qIHdhaXQgZm9yIHhpbGlueCBzdGF0dXMgPT0gNCAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX01YTFhfU1RBVFVTX09GRlNFVCwgMSwgNCwgNTAwKTsgLyogNXNlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgInhpbGlueCB3YXMgbm90IGxvYWRlZCBvciBjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggd2FzIG5vdCBsb2FkZWQgb3IgIgorCQkJCSAgICJjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTQyNCw3ICs0MjcsNyBAQAogCQkvKiB3YWl0IGZvciBlbGYgc3RhdHVzID09IDQgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19FTEZfU1RBVFVTX09GRlNFVCwgMSwgNCwgMzAwKTsgLyogM3NlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImVsZiBjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlbGYgY291bGQgbm90IGJlIHN0YXJ0ZWRcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC00MzcsMTUgKzQ0MCwxNiBAQAogCWRlZmF1bHQ6CiAKIAkJLyogZWxmIGFuZCB4aWxpbnggc2hvdWxkIGJlIGxvYWRlZCAqLwotCQlpZiggKHN0YXR1c19lbGYgIT0gNCkgfHwgKHN0YXR1c194aWxpbnggIT0gNCkgKSB7Ci0JCQlwcmludGsoIEtFUk5fRVJSICJ4aWxpbnggb3IgZWxmIG5vdCBzdWNjZXNzZnVsbHkgbG9hZGVkXG4iKTsKKwkJaWYgKHN0YXR1c19lbGYgIT0gNCB8fCBzdGF0dXNfeGlsaW54ICE9IDQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAieGlsaW54IG9yIGVsZiBub3QgIgorCQkJICAgICAgICJzdWNjZXNzZnVsbHkgbG9hZGVkXG4iKTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogCiAJCS8qIHdhaXQgZm9yIGRhdWdodGVyIGRldGVjdGlvbiAhPSAwICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfREJSRF9QUkVTRU5DRV9PRkZTRVQsIDAsIDAsIDMwKTsgLyogMzAwbXNlYyAqLwogCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImVycm9yIHN0YXJ0aW5nIGVsZiBmaWxlXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVycm9yIHN0YXJ0aW5nIGVsZiBmaWxlXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNDYwLDggKzQ2NCw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkvKiBkYXVnaHRlciBzaG91bGQgYmUgaWRsZSAqLwotCQlpZiggc3RhdHVzX2RhdWdodCAhPSAwICkgewotCQkJcHJpbnRrKCBLRVJOX0VSUiAiZGF1Z2h0ZXIgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLCBzdGF0dXNfZGF1Z2h0KTsKKwkJaWYgKHN0YXR1c19kYXVnaHQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkYXVnaHRlciBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsCisJCQkgICAgICAgc3RhdHVzX2RhdWdodCk7CiAJCQlyZXR1cm4gLUVJTzsgLyogbW9kcHJvYiAtciBtYXkgaGVscCA/ICovCiAJCX0KICAKQEAgLTQ4MCw3ICs0ODUsNyBAQAogCQkvKiB3YWl0IGZvciBzdGF0dXMgPT0gMiAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0RYTFhfU1RBVFVTX09GRlNFVCwgMSwgMiwgMzApOyAvKiAzMDBtc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZGF1Z2h0ZXIgYm9hcmQgbG9hZCBlcnJvclxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkYXVnaHRlciBib2FyZCBsb2FkIGVycm9yXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNTAyLDcgKzUwNyw4IEBACiAgICAgICAgIC8qIHdhaXQgZm9yIGRhdWdodGVyIHN0YXR1cyA9PSAzICovCiAgICAgICAgIGVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfRFhMWF9TVEFUVVNfT0ZGU0VULCAxLCAzLCAzMDApOyAvKiAzc2VjICovCiAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBib2FyZCBjb3VsZCBub3QgYmUgaW5pdGlhbGlzZWRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiZGF1Z2h0ZXIgYm9hcmQgY291bGQgbm90IGJlIGluaXRpYWxpc2VkXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTUxMiw3ICs1MTgsNyBAQAogCS8qIGZpcnN0IGNvbW11bmljYXRpb24gd2l0aCBlbWJlZGRlZCAqLwogCWVyciA9IG1peGFydF9maXJzdF9pbml0KG1ncik7CiAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJtaVhhcnQgY291bGQgbm90IGJlIHNldCB1cFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm1pWGFydCBjb3VsZCBub3QgYmUgc2V0IHVwXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTU4MSwxNiArNTg3LDYgQEAKIC8qIG1pWGFydCBod2RlcCBpbnRlcmZhY2UgaWQgc3RyaW5nICovCiAjZGVmaW5lIFNORF9NSVhBUlRfSFdERVBfSUQgICAgICAgIm1pWGFydCBMb2FkZXIiCiAKLXN0YXRpYyBpbnQgbWl4YXJ0X2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1peGFydF9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBtaXhhcnRfaHdkZXBfZHNwX3N0YXR1cyhzdHJ1Y3Qgc25kX2h3ZGVwICpodywKIAkJCQkgICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKmluZm8pCiB7CkBAIC02NDMsOCArNjM5LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX01JWEFSVDsKIAlody0+cHJpdmF0ZV9kYXRhID0gbWdyOwotCWh3LT5vcHMub3BlbiA9IG1peGFydF9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IG1peGFydF9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IG1peGFydF9od2RlcF9kc3Bfc3RhdHVzOwogCWh3LT5vcHMuZHNwX2xvYWQgPSBtaXhhcnRfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPmV4Y2x1c2l2ZSA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IDUwYzlmOGEuLjUyMmEwNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC0xNjY4LDkgKzE2NjgsOSBAQAogCQl9CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoIChwY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NkFWX0FVRElPOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKaW5kZXggMWFiODMzZi4uODRlZjEzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCkBAIC00NSw2ICs0NSw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaGlmaWVyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTRjMywgMHgxNzEwKSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMSkgfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSURfQlJPS0VOX0VFUFJPTSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBoaWZpZXJfaWRzKTsKQEAgLTE1MSw3ICsxNTIsNiBAQAogCS5zaG9ydG5hbWUgPSAiQy1NZWRpYSBDTUk4Nzg3IiwKIAkubG9uZ25hbWUgPSAiQy1NZWRpYSBPeHlnZW4gSEQgQXVkaW8iLAogCS5jaGlwID0gIkNNSTg3ODgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pbml0ID0gaGlmaWVyX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0gaGlmaWVyX2NvbnRyb2xfZmlsdGVyLAogCS5jbGVhbnVwID0gaGlmaWVyX2NsZWFudXAsCkBAIC0xNzMsNiArMTczLDEzIEBACiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfaGlmaWVyX21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWNoaXAtPm1vZGVsID0gbW9kZWxfaGlmaWVyOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBoaWZpZXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CkBAIC0xODUsNyArMTkyLDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgJm1vZGVsX2hpZmllciwgMCk7CisJZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIGhpZmllcl9pZHMsIGdldF9oaWZpZXJfbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCmluZGV4IGRlOTk5YzYuLjcyZGI0YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDLU1lZGlhIENNSTg3ODggZHJpdmVyIGZvciBDLU1lZGlhJ3MgcmVmZXJlbmNlIGRlc2lnbiBhbmQgZm9yIHRoZSBYLU1lcmlkaWFuCisgKiBDLU1lZGlhIENNSTg3ODggZHJpdmVyIGZvciBDLU1lZGlhJ3MgcmVmZXJlbmNlIGRlc2lnbiBhbmQgc2ltaWxhciBtb2RlbHMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgogICoKQEAgLTI2LDYgKzI2LDcgQEAKICAqCiAgKiBHUElPIDAgLT4gREZTMCBvZiBBSzUzODUKICAqIEdQSU8gMSAtPiBERlMxIG9mIEFLNTM4NQorICogR1BJTyA4IC0+IGVuYWJsZSBoZWFkcGhvbmUgYW1wbGlmaWVyIG9uIEhULU9tZWdhIG1vZGVscwogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNjEsNyArNjIsOCBAQAogZW51bSB7CiAJTU9ERUxfQ01FRElBX1JFRiwJLyogQy1NZWRpYSdzIHJlZmVyZW5jZSBkZXNpZ24gKi8KIAlNT0RFTF9NRVJJRElBTiwJCS8qIEF1emVuVGVjaCBYLU1lcmlkaWFuICovCi0JTU9ERUxfSEFMTywJCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KKwlNT0RFTF9DTEFSTywJCS8qIEhULU9tZWdhIENsYXJvICovCisJTU9ERUxfQ0xBUk9fSEFMTywJLyogSFQtT21lZ2EgQ2xhcm8gaGFsbyAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG94eWdlbl9pZHNbXSBfX2RldmluaXRkYXRhID0gewpAQCAtNzQsOCArNzYsOCBAQAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0N2EsIDB4YTAxNyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxYTU4LCAweDA5MTApLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4NDE1YSwgMHg1NDMxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfTUVSSURJQU4gfSwKLQl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3NjEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCi0JeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzgxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfSEFMTyB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc2MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NMQVJPIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzgxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ0xBUk9fSEFMTyB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBveHlnZW5faWRzKTsKQEAgLTg2LDYgKzg4LDggQEAKICNkZWZpbmUgR1BJT19BSzUzODVfREZTX0RPVUJMRQkweDAwMDEKICNkZWZpbmUgR1BJT19BSzUzODVfREZTX1FVQUQJMHgwMDAyCiAKKyNkZWZpbmUgR1BJT19DTEFST19IUAkJMHgwMTAwCisKIHN0cnVjdCBnZW5lcmljX2RhdGEgewogCXU4IGFrNDM5Nl9jdGwyOwogCXUxNiBzYXZlZF93bTg3ODVfcmVnaXN0ZXJzWzJdOwpAQCAtMTk2LDEwICsyMDAsNDYgQEAKIAlhazUzODVfaW5pdChjaGlwKTsKIH0KIAorc3RhdGljIHZvaWQgY2xhcm9fZW5hYmxlX2hwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJbXNsZWVwKDMwMCk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19DTEFST19IUCk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19DTEFST19IUCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfaW5pdChjaGlwKTsKKwl3bTg3ODVfaW5pdChjaGlwKTsKKwljbGFyb19lbmFibGVfaHAoY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX2hhbG9faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9pbml0KGNoaXApOworCWFrNTM4NV9pbml0KGNoaXApOworCWNsYXJvX2VuYWJsZV9ocChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgZ2VuZXJpY19jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiB9CiAKK3N0YXRpYyB2b2lkIGNsYXJvX2Rpc2FibGVfaHAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIEdQSU9fQ0xBUk9fSFApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJY2xhcm9fZGlzYWJsZV9ocChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9fc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWNsYXJvX2Rpc2FibGVfaHAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIGdlbmVyaWNfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOwpAQCAtMjExLDYgKzI1MSwxMiBAQAogCWFrNDM5Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKIH0KIAorc3RhdGljIHZvaWQgY2xhcm9fcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOworCWNsYXJvX2VuYWJsZV9ocChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgc2V0X2FrNDM5Nl9wYXJhbXMoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewpAQCAtMjkzLDMwICszMzksMTAgQEAKIAogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihhazQzOTZfZGJfc2NhbGUsIFRMVl9EQl9HQUlOX01VVEUsIDApOwogCi1zdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKLXsKLQlpZiAoZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4pIHsKLQkJY2hpcC0+bW9kZWwuaW5pdCA9IG1lcmlkaWFuX2luaXQ7Ci0JCWNoaXAtPm1vZGVsLnJlc3VtZSA9IG1lcmlkaWFuX3Jlc3VtZTsKLQkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKLQkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKLQkJCQkJICAgIFBMQVlCQUNLXzFfVE9fU1BESUYgfAotCQkJCQkgICAgQ0FQVFVSRV8wX0ZST01fSTJTXzIgfAotCQkJCQkgICAgQ0FQVFVSRV8xX0ZST01fU1BESUY7Ci0JfQotCWlmIChkcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTiB8fCBkcml2ZXJfZGF0YSA9PSBNT0RFTF9IQUxPKSB7Ci0JCWNoaXAtPm1vZGVsLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJOwotCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnIHw9IE1JRElfT1VUUFVUIHwgTUlESV9JTlBVVDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX2dlbmVyaWMgPSB7CiAJLnNob3J0bmFtZSA9ICJDLU1lZGlhIENNSTg3ODgiLAogCS5sb25nbmFtZSA9ICJDLU1lZGlhIE94eWdlbiBIRCBBdWRpbyIsCiAJLmNoaXAgPSAiQ01JODc4OCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnByb2JlID0gZ2VuZXJpY19wcm9iZSwKIAkuaW5pdCA9IGdlbmVyaWNfaW5pdCwKIAkuY2xlYW51cCA9IGdlbmVyaWNfY2xlYW51cCwKIAkucmVzdW1lID0gZ2VuZXJpY19yZXN1bWUsCkBAIC0zNDEsNiArMzY3LDQyIEBACiAJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCiB9OwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfb3h5Z2VuX21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWNoaXAtPm1vZGVsID0gbW9kZWxfZ2VuZXJpYzsKKwlzd2l0Y2ggKGlkLT5kcml2ZXJfZGF0YSkgeworCWNhc2UgTU9ERUxfTUVSSURJQU46CisJCWNoaXAtPm1vZGVsLmluaXQgPSBtZXJpZGlhbl9pbml0OworCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBtZXJpZGlhbl9yZXN1bWU7CisJCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zID0gc2V0X2FrNTM4NV9wYXJhbXM7CisJCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CisJCQkJCSAgICBQTEFZQkFDS18xX1RPX1NQRElGIHwKKwkJCQkJICAgIENBUFRVUkVfMF9GUk9NX0kyU18yIHwKKwkJCQkJICAgIENBUFRVUkVfMV9GUk9NX1NQRElGOworCQlicmVhazsKKwljYXNlIE1PREVMX0NMQVJPOgorCQljaGlwLT5tb2RlbC5pbml0ID0gY2xhcm9faW5pdDsKKwkJY2hpcC0+bW9kZWwuY2xlYW51cCA9IGNsYXJvX2NsZWFudXA7CisJCWNoaXAtPm1vZGVsLnN1c3BlbmQgPSBjbGFyb19zdXNwZW5kOworCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBjbGFyb19yZXN1bWU7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfQ0xBUk9fSEFMTzoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IGNsYXJvX2hhbG9faW5pdDsKKwkJY2hpcC0+bW9kZWwuY2xlYW51cCA9IGNsYXJvX2NsZWFudXA7CisJCWNoaXAtPm1vZGVsLnN1c3BlbmQgPSBjbGFyb19zdXNwZW5kOworCQljaGlwLT5tb2RlbC5yZXN1bWUgPSBjbGFyb19yZXN1bWU7CisJCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zID0gc2V0X2FrNTM4NV9wYXJhbXM7CisJCWJyZWFrOworCX0KKwlpZiAoaWQtPmRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOIHx8CisJICAgIGlkLT5kcml2ZXJfZGF0YSA9PSBNT0RFTF9DTEFST19IQUxPKSB7CisJCWNoaXAtPm1vZGVsLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJOworCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnIHw9IE1JRElfT1VUUFVUIHwgTUlESV9JTlBVVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdlbmVyaWNfb3h5Z2VuX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKQEAgLTM1Myw4ICs0MTUsOCBAQAogCQkrK2RldjsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgICAgICZtb2RlbF9nZW5lcmljLCBwY2lfaWQtPmRyaXZlcl9kYXRhKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgb3h5Z2VuX2lkcywgZ2V0X294eWdlbl9tb2RlbCk7CiAJaWYgKGVyciA+PSAwKQogCQkrK2RldjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaCBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKaW5kZXggMTkxMDdjNi4uYmQ2MTVkYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCkBAIC0xOCw2ICsxOCw4IEBACiAKICNkZWZpbmUgT1hZR0VOX0lPX1NJWkUJMHgxMDAKIAorI2RlZmluZSBPWFlHRU5fRUVQUk9NX0lECTB4NDM0ZAkvKiAiQ00iICovCisKIC8qIG1vZGVsLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb2Ygb3V0cHV0cy9pbnB1dHMgKi8KICNkZWZpbmUgUExBWUJBQ0tfMF9UT19JMlMJMHgwMDAxCiAgICAgIC8qIFBMQVlCQUNLXzBfVE9fQUM5N18wCQlub3QgaW1wbGVtZW50ZWQgKi8KQEAgLTQ5LDcgKzUxLDEzIEBACiAJLnN1YnZlbmRvciA9IHN2LCBcCiAJLnN1YmRldmljZSA9IHNkCiAKKyNkZWZpbmUgQlJPS0VOX0VFUFJPTV9EUklWRVJfREFUQSAoKHVuc2lnbmVkIGxvbmcpLTEpCisjZGVmaW5lIE9YWUdFTl9QQ0lfU1VCSURfQlJPS0VOX0VFUFJPTSBcCisJT1hZR0VOX1BDSV9TVUJJRChQQ0lfVkVORE9SX0lEX0NNRURJQSwgMHg4Nzg4KSwgXAorCS5kcml2ZXJfZGF0YSA9IEJST0tFTl9FRVBST01fRFJJVkVSX0RBVEEKKwogc3RydWN0IHBjaV9kZXY7CitzdHJ1Y3QgcGNpX2RldmljZV9pZDsKIHN0cnVjdCBzbmRfY2FyZDsKIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbTsKIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlOwpAQCAtNjIsOCArNzAsNiBAQAogCWNvbnN0IGNoYXIgKnNob3J0bmFtZTsKIAljb25zdCBjaGFyICpsb25nbmFtZTsKIAljb25zdCBjaGFyICpjaGlwOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCWludCAoKnByb2JlKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKTsKIAl2b2lkICgqaW5pdCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJaW50ICgqY29udHJvbF9maWx0ZXIpKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSk7CiAJaW50ICgqbWl4ZXJfaW5pdCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CkBAIC04Myw2ICs4OSw3IEBACiAJdm9pZCAoKmFjOTdfc3dpdGNoKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBtdXRlKTsKIAljb25zdCB1bnNpZ25lZCBpbnQgKmRhY190bHY7CisJdW5zaWduZWQgbG9uZyBwcml2YXRlX2RhdGE7CiAJc2l6ZV90IG1vZGVsX2RhdGFfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgZGV2aWNlX2NvbmZpZzsKIAl1OCBkYWNfY2hhbm5lbHM7CkBAIC0xMzQsOCArMTQxLDEyIEBACiAvKiBveHlnZW5fbGliLmMgKi8KIAogaW50IG94eWdlbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgaW50IGluZGV4LCBjaGFyICppZCwKLQkJICAgICBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsICptb2RlbCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKTsKKwkJICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLAorCQkgICAgIGludCAoKmdldF9tb2RlbCkoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQKKwkJCQkgICAgICkKKwkJICAgICk7CiB2b2lkIG94eWdlbl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpOwogI2lmZGVmIENPTkZJR19QTQogaW50IG94eWdlbl9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwpAQCAtMTgwLDYgKzE5MSw5IEBACiB2b2lkIG94eWdlbl9yZXNldF91YXJ0KHN0cnVjdCBveHlnZW4gKmNoaXApOwogdm9pZCBveHlnZW5fd3JpdGVfdWFydChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1OCBkYXRhKTsKIAordTE2IG94eWdlbl9yZWFkX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgpOwordm9pZCBveHlnZW5fd3JpdGVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHZhbHVlKTsKKwogc3RhdGljIGlubGluZSB2b2lkIG94eWdlbl9zZXRfYml0czgoc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdTggdmFsdWUpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwppbmRleCAzMTI2YzRiLi5jMWViOTIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKQEAgLTI1NCwzICsyNTQsMzQgQEAKIAlfd3JpdGVfdWFydChjaGlwLCAwLCBkYXRhKTsKIH0KIEVYUE9SVF9TWU1CT0wob3h5Z2VuX3dyaXRlX3VhcnQpOworCit1MTYgb3h5Z2VuX3JlYWRfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKworCW94eWdlbl93cml0ZTgoY2hpcCwgT1hZR0VOX0VFUFJPTV9DT05UUk9MLAorCQkgICAgICBpbmRleCB8IE9YWUdFTl9FRVBST01fRElSX1JFQUQpOworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDA7ICsrdGltZW91dCkgeworCQl1ZGVsYXkoMSk7CisJCWlmICghKG94eWdlbl9yZWFkOChjaGlwLCBPWFlHRU5fRUVQUk9NX1NUQVRVUykKKwkJICAgICAgJiBPWFlHRU5fRUVQUk9NX0JVU1kpKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9FRVBST01fREFUQSk7Cit9CisKK3ZvaWQgb3h5Z2VuX3dyaXRlX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKworCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9FRVBST01fREFUQSwgdmFsdWUpOworCW94eWdlbl93cml0ZTgoY2hpcCwgT1hZR0VOX0VFUFJPTV9DT05UUk9MLAorCQkgICAgICBpbmRleCB8IE9YWUdFTl9FRVBST01fRElSX1dSSVRFKTsKKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgMTA7ICsrdGltZW91dCkgeworCQltc2xlZXAoMSk7CisJCWlmICghKG94eWdlbl9yZWFkOChjaGlwLCBPWFlHRU5fRUVQUk9NX1NUQVRVUykKKwkJICAgICAgJiBPWFlHRU5fRUVQUk9NX0JVU1kpKQorCQkJcmV0dXJuOworCX0KKwlzbmRfcHJpbnRrKEtFUk5fRVJSICJFRVBST00gd3JpdGUgdGltZW91dFxuIik7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCmluZGV4IDg0ZjQ4MWQuLjMxMjI1MWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCkBAIC0zNCw2ICszNCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkMtTWVkaWEgQ01JODc4OCBoZWxwZXIgbGlicmFyeSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCisjZGVmaW5lIERSSVZFUiAib3h5Z2VuIgogCiBzdGF0aWMgaW5saW5lIGludCBveHlnZW5fdWFydF9pbnB1dF9yZWFkeShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewpAQCAtMjQzLDYgKzI0NCw2MiBAQAogI2RlZmluZSBveHlnZW5fcHJvY19pbml0KGNoaXApCiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICoKK294eWdlbl9zZWFyY2hfcGNpX2lkKHN0cnVjdCBveHlnZW4gKmNoaXAsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkc1tdKQoreworCXUxNiBzdWJkZXZpY2U7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgRUVQUk9NIHBpbnMgYXJlIGF2YWlsYWJsZSwgaS5lLiwgbm90IHVzZWQgZm9yIFNQSS4KKwkgKiAoVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHdlIGluaXRpYWxpemUgb3IgdXNlIFNQSS4pCisJICovCisJb3h5Z2VuX2NsZWFyX2JpdHM4KGNoaXAsIE9YWUdFTl9GVU5DVElPTiwKKwkJCSAgIE9YWUdFTl9GVU5DVElPTl9FTkFCTEVfU1BJXzRfNSk7CisJLyoKKwkgKiBSZWFkIHRoZSBzdWJzeXN0ZW0gZGV2aWNlIElEIGRpcmVjdGx5IGZyb20gdGhlIEVFUFJPTSwgYmVjYXVzZSB0aGUKKwkgKiBjaGlwIGRpZG4ndCBpZiB0aGUgZmlyc3QgRUVQUk9NIHdvcmQgd2FzIG92ZXJ3cml0dGVuLgorCSAqLworCXN1YmRldmljZSA9IG94eWdlbl9yZWFkX2VlcHJvbShjaGlwLCAyKTsKKwkvKgorCSAqIFdlIHVzZSBvbmx5IHRoZSBzdWJzeXN0ZW0gZGV2aWNlIElEIGZvciBzZWFyY2hpbmcgYmVjYXVzZSBpdCBpcworCSAqIHVuaXF1ZSBldmVuIHdpdGhvdXQgdGhlIHN1YnN5c3RlbSB2ZW5kb3IgSUQsIHdoaWNoIG1heSBoYXZlIGJlZW4KKwkgKiBvdmVyd3JpdHRlbiBpbiB0aGUgRUVQUk9NLgorCSAqLworCWZvciAoOyBpZHMtPnZlbmRvcjsgKytpZHMpCisJCWlmIChpZHMtPnN1YmRldmljZSA9PSBzdWJkZXZpY2UgJiYKKwkJICAgIGlkcy0+ZHJpdmVyX2RhdGEgIT0gQlJPS0VOX0VFUFJPTV9EUklWRVJfREFUQSkKKwkJCXJldHVybiBpZHM7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG94eWdlbl9yZXN0b3JlX2VlcHJvbShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWlmIChveHlnZW5fcmVhZF9lZXByb20oY2hpcCwgMCkgIT0gT1hZR0VOX0VFUFJPTV9JRCkgeworCQkvKgorCQkgKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIG9ubHkgd2hlbiBhIGtub3duIGNhcmQgbW9kZWwgaGFzCisJCSAqIGJlZW4gZGV0ZWN0ZWQsIGkuZS4sIHdlIGtub3cgdGhlcmUgaXMgYSB2YWxpZCBzdWJzeXN0ZW0KKwkJICogcHJvZHVjdCBJRCBhdCBpbmRleCAyIGluIHRoZSBFRVBST00uICBUaGVyZWZvcmUsIHdlIGhhdmUKKwkJICogYmVlbiBhYmxlIHRvIGRlZHVjZSB0aGUgY29ycmVjdCBzdWJzeXN0ZW0gdmVuZG9yIElELCBhbmQKKwkJICogdGhpcyBpcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgRUVQUk9NCisJCSAqIGNvbnRlbnRzLgorCQkgKi8KKwkJb3h5Z2VuX3dyaXRlX2VlcHJvbShjaGlwLCAxLCBpZC0+c3VidmVuZG9yKTsKKwkJb3h5Z2VuX3dyaXRlX2VlcHJvbShjaGlwLCAwLCBPWFlHRU5fRUVQUk9NX0lEKTsKKworCQlveHlnZW5fc2V0X2JpdHM4KGNoaXAsIE9YWUdFTl9NSVNDLAorCQkJCSBPWFlHRU5fTUlTQ19XUklURV9QQ0lfU1VCSUQpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKKwkJCQkgICAgICBpZC0+c3VidmVuZG9yKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaXAtPnBjaSwgUENJX1NVQlNZU1RFTV9JRCwKKwkJCQkgICAgICBpZC0+c3ViZGV2aWNlKTsKKwkJb3h5Z2VuX2NsZWFyX2JpdHM4KGNoaXAsIE9YWUdFTl9NSVNDLAorCQkJCSAgIE9YWUdFTl9NSVNDX1dSSVRFX1BDSV9TVUJJRCk7CisKKwkJc25kX3ByaW50ayhLRVJOX0lORk8gIkVFUFJPTSBJRCByZXN0b3JlZFxuIik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBveHlnZW5faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtNDQ2LDMwICs1MDMsMzMgQEAKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCWNoaXAtPm1vZGVsLmNsZWFudXAoY2hpcCk7CisJa2ZyZWUoY2hpcC0+bW9kZWxfZGF0YSk7CiAJbXV0ZXhfZGVzdHJveSgmY2hpcC0+bXV0ZXgpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKIH0KIAogaW50IG94eWdlbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgaW50IGluZGV4LCBjaGFyICppZCwKLQkJICAgICBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsICptb2RlbCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKQorCQkgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsCisJCSAgICAgaW50ICgqZ2V0X21vZGVsKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZAorCQkJCSAgICAgKQorCQkgICAgKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgb3h5Z2VuICpjaGlwOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBtb2RlbC0+b3duZXIsCi0JCQkgICAgc2l6ZW9mICpjaGlwICsgbW9kZWwtPm1vZGVsX2RhdGFfc2l6ZSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBvd25lciwgc2l6ZW9mKCpjaGlwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAljaGlwLT5jYXJkID0gY2FyZDsKIAljaGlwLT5wY2kgPSBwY2k7CiAJY2hpcC0+aXJxID0gLTE7Ci0JY2hpcC0+bW9kZWwgPSAqbW9kZWw7Ci0JY2hpcC0+bW9kZWxfZGF0YSA9IGNoaXAgKyAxOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CiAJbXV0ZXhfaW5pdCgmY2hpcC0+bXV0ZXgpOwogCUlOSVRfV09SSygmY2hpcC0+c3BkaWZfaW5wdXRfYml0c193b3JrLApAQCAtNDgxLDcgKzU0MSw3IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX2NhcmQ7CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgbW9kZWwtPmNoaXApOworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCBEUklWRVIpOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCByZXNlcnZlIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9wY2lfZW5hYmxlOwpAQCAtNDk1LDIwICs1NTUsMzQgQEAKIAl9CiAJY2hpcC0+YWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwogCisJcGNpX2lkID0gb3h5Z2VuX3NlYXJjaF9wY2lfaWQoY2hpcCwgaWRzKTsKKwlpZiAoIXBjaV9pZCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9wY2lfcmVnaW9uczsKKwl9CisJb3h5Z2VuX3Jlc3RvcmVfZWVwcm9tKGNoaXAsIHBjaV9pZCk7CisJZXJyID0gZ2V0X21vZGVsKGNoaXAsIHBjaV9pZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCisJaWYgKGNoaXAtPm1vZGVsLm1vZGVsX2RhdGFfc2l6ZSkgeworCQljaGlwLT5tb2RlbF9kYXRhID0ga3phbGxvYyhjaGlwLT5tb2RlbC5tb2RlbF9kYXRhX3NpemUsCisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXAtPm1vZGVsX2RhdGEpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9wY2lfcmVnaW9uczsKKwkJfQorCX0KKwogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IG94eWdlbl9jYXJkX2ZyZWU7CiAKLQlpZiAoY2hpcC0+bW9kZWwucHJvYmUpIHsKLQkJZXJyID0gY2hpcC0+bW9kZWwucHJvYmUoY2hpcCwgZHJpdmVyX2RhdGEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX2NhcmQ7Ci0JfQogCW94eWdlbl9pbml0KGNoaXApOwogCWNoaXAtPm1vZGVsLmluaXQoY2hpcCk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShwY2ktPmlycSwgb3h5Z2VuX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkgIGNoaXAtPm1vZGVsLmNoaXAsIGNoaXApOworCQkJICBEUklWRVIsIGNoaXApOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGludGVycnVwdCAlZFxuIiwgcGNpLT5pcnEpOwogCQlnb3RvIGVycl9jYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCmluZGV4IDZjODcwYzEuLmJjNWNlMTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKQEAgLTExMiw2ICsxMTIsMzQgQEAKICAqIENTNDM2MkE6IEFEMCA8LSAwCiAgKi8KIAorLyoKKyAqIFhvbmFyIEVzc2VuY2UgU1RYCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENNSTg3ODg6CisgKgorICogScKyQyA8LT4gUENNMTc5MkEKKyAqCisgKiBHUEkgMCA8LSBleHRlcm5hbCBwb3dlciBwcmVzZW50CisgKgorICogR1BJTyAwIC0+IGVuYWJsZSBvdXRwdXQgdG8gc3BlYWtlcnMKKyAqIEdQSU8gMSAtPiByb3V0ZSBIUCB0byBmcm9udCBwYW5lbCAoMCkgb3IgcmVhciBqYWNrICgxKQorICogR1BJTyAyIC0+IE0wIG9mIENTNTM4MQorICogR1BJTyAzIC0+IE0xIG9mIENTNTM4MQorICogR1BJTyA3IC0+IHJvdXRlIG91dHB1dCB0byBzcGVha2VyIGphY2tzICgwKSBvciBIUCAoMSkKKyAqIEdQSU8gOCAtPiByb3V0ZSBpbnB1dCBqYWNrIHRvIGxpbmUtaW4gKDApIG9yIG1pYy1pbiAoMSkKKyAqCisgKiBQQ00xNzkyQToKKyAqCisgKiBBRDAgPC0gMAorICoKKyAqIEg2IGRhdWdodGVyYm9hcmQKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBHUElPIDQgPC0gMAorICogR1BJTyA1IDwtIDAKKyAqLworCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtMTUyLDYgKzE4MCw3IEBACiAJTU9ERUxfRFgsCiAJTU9ERUxfSERBViwJLyogd2l0aG91dCBkYXVnaHRlcmJvYXJkICovCiAJTU9ERUxfSERBVl9INiwJLyogd2l0aCBINiBkYXVnaHRlcmJvYXJkICovCisJTU9ERUxfU1RYLAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHhvbmFyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC0xNjAsNiArMTg5LDggQEAKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgyYjcpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9EMlggfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzMTQpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9IREFWIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzRmKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfRDEgfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNWMpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9TVFggfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSURfQlJPS0VOX0VFUFJPTSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB4b25hcl9pZHMpOwpAQCAtMTgzLDEyICsyMTQsMTQgQEAKICNkZWZpbmUgR1BJT19IREFWX0RCX0g2CQkweDAwMDAKICNkZWZpbmUgR1BJT19IREFWX0RCX1hYCQkweDAwMjAKIAorI2RlZmluZSBHUElPX1NUX0hQX1JFQVIJCTB4MDAwMgorI2RlZmluZSBHUElPX1NUX0hQCQkweDAwODAKKwogI2RlZmluZSBJMkNfREVWSUNFX1BDTTE3OTYoaSkJKDB4OTggKyAoKGkpIDw8IDEpKQkvKiAxMDAxMSwgQUR4PWksIC9XPTAgKi8KICNkZWZpbmUgSTJDX0RFVklDRV9DUzQzOTgJMHg5ZQkvKiAxMDAxMSwgQUQxPTEsIEFEMD0xLCAvVz0wICovCiAjZGVmaW5lIEkyQ19ERVZJQ0VfQ1M0MzYyQQkweDMwCS8qIDAwMTEwMCwgQUQwPTAsIC9XPTAgKi8KIAogc3RydWN0IHhvbmFyX2RhdGEgewotCXVuc2lnbmVkIGludCBtb2RlbDsKIAl1bnNpZ25lZCBpbnQgYW50aV9wb3BfZGVsYXk7CiAJdW5zaWduZWQgaW50IGRhY3M7CiAJdTE2IG91dHB1dF9lbmFibGVfYml0OwpAQCAtMzM0LDE1ICszNjcsOSBAQAogCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKIAogCWRhdGEtPmFudGlfcG9wX2RlbGF5ID0gMzAwOworCWRhdGEtPmRhY3MgPSA0OwogCWRhdGEtPm91dHB1dF9lbmFibGVfYml0ID0gR1BJT19EMl9PVVRQVVRfRU5BQkxFOwogCWRhdGEtPnBjbTE3OTZfb3ZlcnNhbXBsaW5nID0gUENNMTc5Nl9PU182NDsKLQlpZiAoZGF0YS0+bW9kZWwgPT0gTU9ERUxfRDJYKSB7Ci0JCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJT19EQVRBOwotCQlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElPX0lOVEVSUlVQVF9NQVNLOwotCQlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJT19EMlhfRVhUX1BPV0VSOwotCQlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCi0JCQkJICAgIEdQSU9fRDJYX0VYVF9QT1dFUik7Ci0JfQogCiAJcGNtMTc5Nl9pbml0KGNoaXApOwogCkBAIC0zNTUsNiArMzgyLDE4IEBACiAJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNTM4MSIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9kMnhfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJT19EQVRBOworCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0s7CisJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSU9fRDJYX0VYVF9QT1dFUjsKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsIEdQSU9fRDJYX0VYVF9QT1dFUik7CisKKwl4b25hcl9kMl9pbml0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB1cGRhdGVfY3M0MzYyYV92b2x1bWVzKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJdTggbXV0ZTsKQEAgLTQyMiwxMSArNDYxLDYgQEAKIAlkYXRhLT5jczQzOThfZm0gPSBDUzQzOThfRk1fU0lOR0xFIHwgQ1M0Mzk4X0RFTV9OT05FIHwgQ1M0Mzk4X0RJRl9MSlVTVDsKIAlkYXRhLT5jczQzNjJhX2ZtID0gQ1M0MzYyQV9GTV9TSU5HTEUgfAogCQlDUzQzNjJBX0FUQVBJX0JfUiB8IENTNDM2MkFfQVRBUElfQV9MOwotCWlmIChkYXRhLT5tb2RlbCA9PSBNT0RFTF9EWCkgewotCQlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSV9EQVRBOwotCQlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7Ci0JCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElfRFhfRVhUX1BPV0VSOwotCX0KIAogCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl8yV0lSRV9CVVNfU1RBVFVTLAogCQkgICAgICAgT1hZR0VOXzJXSVJFX0xFTkdUSF84IHwKQEAgLTQ0Nyw2ICs0ODEsMTcgQEAKIAlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzYxIik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX2R4X2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSV9EQVRBOworCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKKwlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJX0RYX0VYVF9QT1dFUjsKKworCXhvbmFyX2QxX2luaXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2hkYXZfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKQEAgLTQ1OCw2ICs1MDMsNyBAQAogCQkgICAgICAgT1hZR0VOXzJXSVJFX1NQRUVEX0ZBU1QpOwogCiAJZGF0YS0+YW50aV9wb3BfZGVsYXkgPSAxMDA7CisJZGF0YS0+ZGFjcyA9IGNoaXAtPm1vZGVsLnByaXZhdGVfZGF0YSA9PSBNT0RFTF9IREFWX0g2ID8gNCA6IDE7CiAJZGF0YS0+b3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RYX09VVFBVVF9FTkFCTEU7CiAJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElfREFUQTsKIAlkYXRhLT5leHRfcG93ZXJfaW50X3JlZyA9IE9YWUdFTl9HUElfSU5URVJSVVBUX01BU0s7CkBAIC00ODQsNiArNTMwLDM2IEBACiAJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNTM4MSIpOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdHhfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl8yV0lSRV9CVVNfU1RBVFVTLAorCQkgICAgICAgT1hZR0VOXzJXSVJFX0xFTkdUSF84IHwKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9JTlRFUlJVUFRfTUFTSyB8CisJCSAgICAgICBPWFlHRU5fMldJUkVfU1BFRURfRkFTVCk7CisKKwlkYXRhLT5hbnRpX3BvcF9kZWxheSA9IDEwMDsKKwlkYXRhLT5kYWNzID0gMTsKKwlkYXRhLT5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fRFhfT1VUUFVUX0VOQUJMRTsKKwlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSV9EQVRBOworCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKKwlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJX0RYX0VYVF9QT1dFUjsKKwlkYXRhLT5wY20xNzk2X292ZXJzYW1wbGluZyA9IFBDTTE3OTZfT1NfNjQ7CisKKwlwY20xNzk2X2luaXQoY2hpcCk7CisKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAorCQkJICBHUElPX0RYX0lOUFVUX1JPVVRFIHwgR1BJT19TVF9IUF9SRUFSIHwgR1BJT19TVF9IUCk7CisJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLAorCQkJICAgIEdQSU9fRFhfSU5QVVRfUk9VVEUgfCBHUElPX1NUX0hQX1JFQVIgfCBHUElPX1NUX0hQKTsKKworCXhvbmFyX2NvbW1vbl9pbml0KGNoaXApOworCisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIlBDTTE3OTJBIik7CisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIkNTNTM4MSIpOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9kaXNhYmxlX291dHB1dChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKQEAgLTUxMSw2ICs1ODcsMTEgQEAKIAl4b25hcl9kaXNhYmxlX291dHB1dChjaGlwKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3RfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9kMl9zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJeG9uYXJfZDJfY2xlYW51cChjaGlwKTsKQEAgLTUyNyw2ICs2MDgsMTEgQEAKIAltc2xlZXAoMik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0X3N1c3BlbmQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl4b25hcl9zdF9jbGVhbnVwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCB4b25hcl9kMl9yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlwY20xNzk2X2luaXQoY2hpcCk7CkBAIC01NTQsNiArNjQwLDEyIEBACiAJeG9uYXJfZW5hYmxlX291dHB1dChjaGlwKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3RfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJcGNtMTc5Nl9pbml0KGNoaXApOworCXhvbmFyX2VuYWJsZV9vdXRwdXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2hkYXZfcGNtX2hhcmR3YXJlX2ZpbHRlcih1bnNpZ25lZCBpbnQgY2hhbm5lbCwKIAkJCQkJICAgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmhhcmR3YXJlKQogewpAQCAtNzMzLDYgKzgyNSw3MiBAQAogCS5wcml2YXRlX3ZhbHVlID0gR1BJT19EWF9GUk9OVF9QQU5FTCwKIH07CiAKK3N0YXRpYyBpbnQgc3Rfb3V0cHV0X3N3aXRjaF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1szXSA9IHsKKwkJIlNwZWFrZXJzIiwgIkhlYWRwaG9uZXMiLCAiRlAgSGVhZHBob25lcyIKKwl9OworCisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwlpbmZvLT5jb3VudCA9IDE7CisJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisJaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSAzKQorCQlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAyOworCXN0cmNweShpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIG5hbWVzW2luZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJdTE2IGdwaW87CisKKwlncGlvID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlpZiAoIShncGlvICYgR1BJT19TVF9IUCkpCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOworCWVsc2UgaWYgKGdwaW8gJiBHUElPX1NUX0hQX1JFQVIpCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAxOworCWVsc2UKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDI7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzdF9vdXRwdXRfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXUxNiBncGlvX29sZCwgZ3BpbzsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwlncGlvX29sZCA9IG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSk7CisJZ3BpbyA9IGdwaW9fb2xkOworCXN3aXRjaCAodmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgeworCWNhc2UgMDoKKwkJZ3BpbyAmPSB+KEdQSU9fU1RfSFAgfCBHUElPX1NUX0hQX1JFQVIpOworCQlicmVhazsKKwljYXNlIDE6CisJCWdwaW8gfD0gR1BJT19TVF9IUCB8IEdQSU9fU1RfSFBfUkVBUjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlncGlvID0gKGdwaW8gfCBHUElPX1NUX0hQKSAmIH5HUElPX1NUX0hQX1JFQVI7CisJCWJyZWFrOworCX0KKwlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBncGlvKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gZ3BpbyAhPSBncGlvX29sZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0X291dHB1dF9zd2l0Y2ggPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiQW5hbG9nIE91dHB1dCIsCisJLmluZm8gPSBzdF9vdXRwdXRfc3dpdGNoX2luZm8sCisJLmdldCA9IHN0X291dHB1dF9zd2l0Y2hfZ2V0LAorCS5wdXQgPSBzdF9vdXRwdXRfc3dpdGNoX3B1dCwKK307CisKIHN0YXRpYyB2b2lkIHhvbmFyX2xpbmVfbWljX2FjOTdfc3dpdGNoKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBtdXRlKQogewpAQCAtNzQ1LDggKzkwMyw4IEBACiAJfQogfQogCi1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUocGNtMTc5Nl9kYl9zY2FsZSwgLTEyMDAwLCA1MCwgMCk7Ci1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoY3M0MzYyYV9kYl9zY2FsZSwgLTEyNzAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHBjbTE3OTZfZGJfc2NhbGUsIC02MDAwLCA1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoY3M0MzYyYV9kYl9zY2FsZSwgLTYwMDAsIDEwMCwgMCk7CiAKIHN0YXRpYyBpbnQgeG9uYXJfZDJfY29udHJvbF9maWx0ZXIoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKQogewpAQCAtNzYzLDYgKzkyMSwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHhvbmFyX3N0X2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3sKKwlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJDRCBDYXB0dXJlICIsIDExKSkKKwkJcmV0dXJuIDE7IC8qIG5vIENEIGlucHV0ICovCisJaWYgKCFzdHJjbXAodGVtcGxhdGUtPm5hbWUsICJTdGVyZW8gVXBtaXhpbmciKSkKKwkJcmV0dXJuIDE7IC8qIHN0ZXJlbyBvbmx5IC0gd2UgZG9uJ3QgbmVlZCB1cG1peGluZyAqLworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHhvbmFyX2QyX21peGVyX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlyZXR1cm4gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZhbHRfc3dpdGNoLCBjaGlwKSk7CkBAIC03NzMsNTEgKzk0MCwxNCBAQAogCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJmZyb250X3BhbmVsX3N3aXRjaCwgY2hpcCkpOwogfQogCi1zdGF0aWMgaW50IHhvbmFyX21vZGVsX3Byb2JlKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCitzdGF0aWMgaW50IHhvbmFyX3N0X21peGVyX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKLQkJW01PREVMX0QxXQk9ICJYb25hciBEMSIsCi0JCVtNT0RFTF9EWF0JPSAiWG9uYXIgRFgiLAotCQlbTU9ERUxfRDJdCT0gIlhvbmFyIEQyIiwKLQkJW01PREVMX0QyWF0JPSAiWG9uYXIgRDJYIiwKLQkJW01PREVMX0hEQVZdCT0gIlhvbmFyIEhEQVYxLjMiLAotCQlbTU9ERUxfSERBVl9INl0JPSAiWG9uYXIgSERBVjEuMytINiIsCi0JfTsKLQlzdGF0aWMgY29uc3QgdTggZGFjc1tdID0gewotCQlbTU9ERUxfRDFdCT0gMiwKLQkJW01PREVMX0RYXQk9IDIsCi0JCVtNT0RFTF9EMl0JPSA0LAotCQlbTU9ERUxfRDJYXQk9IDQsCi0JCVtNT0RFTF9IREFWXQk9IDEsCi0JCVtNT0RFTF9IREFWX0g2XQk9IDQsCi0JfTsKLQlzdHJ1Y3QgeG9uYXJfZGF0YSAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7Ci0KLQlkYXRhLT5tb2RlbCA9IGRyaXZlcl9kYXRhOwotCWlmIChkYXRhLT5tb2RlbCA9PSBNT0RFTF9IREFWKSB7Ci0JCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKLQkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOwotCQlzd2l0Y2ggKG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSkgJgotCQkJR1BJT19IREFWX0RCX01BU0spIHsKLQkJY2FzZSBHUElPX0hEQVZfREJfSDY6Ci0JCQlkYXRhLT5tb2RlbCA9IE1PREVMX0hEQVZfSDY7Ci0JCQlicmVhazsKLQkJY2FzZSBHUElPX0hEQVZfREJfWFg6Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGRhdWdodGVyYm9hcmRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0KLQlkYXRhLT5kYWNzID0gZGFjc1tkYXRhLT5tb2RlbF07Ci0JY2hpcC0+bW9kZWwuc2hvcnRuYW1lID0gbmFtZXNbZGF0YS0+bW9kZWxdOwotCXJldHVybiAwOworCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnN0X291dHB1dF9zd2l0Y2gsIGNoaXApKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfZDIgPSB7CiAJLmxvbmduYW1lID0gIkFzdXMgVmlydHVvc28gMjAwIiwKIAkuY2hpcCA9ICJBVjIwMCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnByb2JlID0geG9uYXJfbW9kZWxfcHJvYmUsCiAJLmluaXQgPSB4b25hcl9kMl9pbml0LAogCS5jb250cm9sX2ZpbHRlciA9IHhvbmFyX2QyX2NvbnRyb2xfZmlsdGVyLAogCS5taXhlcl9pbml0ID0geG9uYXJfZDJfbWl4ZXJfaW5pdCwKQEAgLTgzNyw4ICs5NjcsOCBAQAogCQkJIE1JRElfT1VUUFVUIHwKIAkJCSBNSURJX0lOUFVULAogCS5kYWNfY2hhbm5lbHMgPSA4LAotCS5kYWNfdm9sdW1lX21pbiA9IDB4MGYsCi0JLmRhY192b2x1bWVfbWF4ID0gMHhmZiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKIAkubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREksCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OX1NQSSB8CiAJCQkgIE9YWUdFTl9GVU5DVElPTl9FTkFCTEVfU1BJXzRfNSwKQEAgLTg0OSw4ICs5NzksNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfZDEgPSB7CiAJLmxvbmduYW1lID0gIkFzdXMgVmlydHVvc28gMTAwIiwKIAkuY2hpcCA9ICJBVjIwMCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnByb2JlID0geG9uYXJfbW9kZWxfcHJvYmUsCiAJLmluaXQgPSB4b25hcl9kMV9pbml0LAogCS5jb250cm9sX2ZpbHRlciA9IHhvbmFyX2QxX2NvbnRyb2xfZmlsdGVyLAogCS5taXhlcl9pbml0ID0geG9uYXJfZDFfbWl4ZXJfaW5pdCwKQEAgLTg2OCw3ICs5OTYsNyBAQAogCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAogCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAogCS5kYWNfY2hhbm5lbHMgPSA4LAotCS5kYWNfdm9sdW1lX21pbiA9IDAsCisJLmRhY192b2x1bWVfbWluID0gMTI3IC0gNjAsCiAJLmRhY192b2x1bWVfbWF4ID0gMTI3LAogCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl8yV0lSRSwKIAkuZGFjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKQEAgLTg3OCw4ICsxMDA2LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2hkYXYgPSB7CiAJLmxvbmduYW1lID0gIkFzdXMgVmlydHVvc28gMjAwIiwKIAkuY2hpcCA9ICJBVjIwMCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnByb2JlID0geG9uYXJfbW9kZWxfcHJvYmUsCiAJLmluaXQgPSB4b25hcl9oZGF2X2luaXQsCiAJLmNsZWFudXAgPSB4b25hcl9oZGF2X2NsZWFudXAsCiAJLnN1c3BlbmQgPSB4b25hcl9oZGF2X3N1c3BlbmQsCkBAIC04OTcsMTYgKzEwMjMsNDMgQEAKIAkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKIAkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKIAkuZGFjX2NoYW5uZWxzID0gOCwKLQkuZGFjX3ZvbHVtZV9taW4gPSAweDBmLAotCS5kYWNfdm9sdW1lX21heCA9IDB4ZmYsCisJLmRhY192b2x1bWVfbWluID0gMjU1IC0gMio2MCwKKwkuZGFjX3ZvbHVtZV9tYXggPSAyNTUsCiAJLm1pc2NfZmxhZ3MgPSBPWFlHRU5fTUlTQ19NSURJLAogCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl8yV0lSRSwKIAkuZGFjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHhvbmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0JCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9zdCA9IHsKKwkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAxMDAiLAorCS5jaGlwID0gIkFWMjAwIiwKKwkuaW5pdCA9IHhvbmFyX3N0eF9pbml0LAorCS5jb250cm9sX2ZpbHRlciA9IHhvbmFyX3N0X2NvbnRyb2xfZmlsdGVyLAorCS5taXhlcl9pbml0ID0geG9uYXJfc3RfbWl4ZXJfaW5pdCwKKwkuY2xlYW51cCA9IHhvbmFyX3N0X2NsZWFudXAsCisJLnN1c3BlbmQgPSB4b25hcl9zdF9zdXNwZW5kLAorCS5yZXN1bWUgPSB4b25hcl9zdF9yZXN1bWUsCisJLnNldF9kYWNfcGFyYW1zID0gc2V0X3BjbTE3OTZfcGFyYW1zLAorCS5zZXRfYWRjX3BhcmFtcyA9IHNldF9jczUzeDFfcGFyYW1zLAorCS51cGRhdGVfZGFjX3ZvbHVtZSA9IHVwZGF0ZV9wY20xNzk2X3ZvbHVtZSwKKwkudXBkYXRlX2RhY19tdXRlID0gdXBkYXRlX3BjbTE3OTZfbXV0ZSwKKwkuYWM5N19zd2l0Y2ggPSB4b25hcl9saW5lX21pY19hYzk3X3N3aXRjaCwKKwkuZGFjX3RsdiA9IHBjbTE3OTZfZGJfc2NhbGUsCisJLm1vZGVsX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgeG9uYXJfZGF0YSksCisJLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CisJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CisJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCisJLmRhY19jaGFubmVscyA9IDIsCisJLmRhY192b2x1bWVfbWluID0gMjU1IC0gMio2MCwKKwkuZGFjX3ZvbHVtZV9tYXggPSAyNTUsCisJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAorCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAorCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZ2V0X3hvbmFyX21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKmNvbnN0IG1vZGVsc1tdID0gewogCQlbTU9ERUxfRDFdCT0gJm1vZGVsX3hvbmFyX2QxLApAQCAtOTE0LDcgKzEwNjcsNTcgQEAKIAkJW01PREVMX0QyXQk9ICZtb2RlbF94b25hcl9kMiwKIAkJW01PREVMX0QyWF0JPSAmbW9kZWxfeG9uYXJfZDIsCiAJCVtNT0RFTF9IREFWXQk9ICZtb2RlbF94b25hcl9oZGF2LAorCQlbTU9ERUxfU1RYXQk9ICZtb2RlbF94b25hcl9zdCwKIAl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0geworCQlbTU9ERUxfRDFdCT0gIlhvbmFyIEQxIiwKKwkJW01PREVMX0RYXQk9ICJYb25hciBEWCIsCisJCVtNT0RFTF9EMl0JPSAiWG9uYXIgRDIiLAorCQlbTU9ERUxfRDJYXQk9ICJYb25hciBEMlgiLAorCQlbTU9ERUxfSERBVl0JPSAiWG9uYXIgSERBVjEuMyIsCisJCVtNT0RFTF9IREFWX0g2XQk9ICJYb25hciBIREFWMS4zK0g2IiwKKwkJW01PREVMX1NUWF0JPSAiWG9uYXIgRXNzZW5jZSBTVFgiLAorCX07CisJdW5zaWduZWQgaW50IG1vZGVsID0gaWQtPmRyaXZlcl9kYXRhOworCisJaWYgKG1vZGVsID49IEFSUkFZX1NJWkUobW9kZWxzKSB8fCAhbW9kZWxzW21vZGVsXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2hpcC0+bW9kZWwgPSAqbW9kZWxzW21vZGVsXTsKKworCXN3aXRjaCAobW9kZWwpIHsKKwljYXNlIE1PREVMX0QyWDoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IHhvbmFyX2QyeF9pbml0OworCQlicmVhazsKKwljYXNlIE1PREVMX0RYOgorCQljaGlwLT5tb2RlbC5pbml0ID0geG9uYXJfZHhfaW5pdDsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9IREFWOgorCQlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCisJCQkJICAgIEdQSU9fSERBVl9EQl9NQVNLKTsKKwkJc3dpdGNoIChveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpICYKKwkJCUdQSU9fSERBVl9EQl9NQVNLKSB7CisJCWNhc2UgR1BJT19IREFWX0RCX0g2OgorCQkJbW9kZWwgPSBNT0RFTF9IREFWX0g2OworCQkJYnJlYWs7CisJCWNhc2UgR1BJT19IREFWX0RCX1hYOgorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5rbm93biBkYXVnaHRlcmJvYXJkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWJyZWFrOworCWNhc2UgTU9ERUxfU1RYOgorCQlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCisJCQkJICAgIEdQSU9fSERBVl9EQl9NQVNLKTsKKwkJYnJlYWs7CisJfQorCisJY2hpcC0+bW9kZWwuc2hvcnRuYW1lID0gbmFtZXNbbW9kZWxdOworCWNoaXAtPm1vZGVsLnByaXZhdGVfZGF0YSA9IG1vZGVsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4b25hcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQorewogCXN0YXRpYyBpbnQgZGV2OwogCWludCBlcnI7CiAKQEAgLTkyNCwxMCArMTEyNyw4IEBACiAJCSsrZGV2OwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JQlVHX09OKHBjaV9pZC0+ZHJpdmVyX2RhdGEgPj0gQVJSQVlfU0laRShtb2RlbHMpKTsKLQllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwKLQkJCSAgICAgICBtb2RlbHNbcGNpX2lkLT5kcml2ZXJfZGF0YV0sCi0JCQkgICAgICAgcGNpX2lkLT5kcml2ZXJfZGF0YSk7CisJZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIHhvbmFyX2lkcywgZ2V0X3hvbmFyX21vZGVsKTsKIAlpZiAoZXJyID49IDApCiAJCSsrZGV2OwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jCmluZGV4IDI3Y2YyYzIuLjgwZTA2NGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jCkBAIC0xMzM0LDYgKzEzMzQsNDAgQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogfQogCitzdGF0aWMgdm9pZCBwY3hocl9wcm9jX2dwaW9fcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNuZF9wY3hociAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBjeGhyX21nciAqbWdyID0gY2hpcC0+bWdyOworCS8qIGNvbW1hbmRzIGF2YWlsYWJsZSB3aGVuIGVtYmVkZGVkIERTUCBpcyBydW5uaW5nICovCisJaWYgKG1nci0+ZHNwX2xvYWRlZCAmICgxIDw8IFBDWEhSX0ZJUk1XQVJFX0RTUF9NQUlOX0lOREVYKSkgeworCQkvKiBncGlvIHBvcnRzIG9uIHN0ZXJlbyBib2FyZHMgb25seSBhdmFpbGFibGUgKi8KKwkJaW50IHZhbHVlID0gMDsKKwkJaHIyMjJfcmVhZF9ncGlvKG1nciwgMSwgJnZhbHVlKTsJLyogR1BJICovCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkdQSTogMHgleFxuIiwgdmFsdWUpOworCQlocjIyMl9yZWFkX2dwaW8obWdyLCAwLCAmdmFsdWUpOwkvKiBHUDAgKi8KKwkJc25kX2lwcmludGYoYnVmZmVyLCAiR1BPOiAweCV4XG4iLCB2YWx1ZSk7CisJfSBlbHNlCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIm5vIGZpcm13YXJlIGxvYWRlZFxuIik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKK30KK3N0YXRpYyB2b2lkIHBjeGhyX3Byb2NfZ3BvX3dyaXRlKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGN4aHJfbWdyICptZ3IgPSBjaGlwLT5tZ3I7CisJY2hhciBsaW5lWzY0XTsKKwlpbnQgdmFsdWU7CisJLyogY29tbWFuZHMgYXZhaWxhYmxlIHdoZW4gZW1iZWRkZWQgRFNQIGlzIHJ1bm5pbmcgKi8KKwlpZiAoIShtZ3ItPmRzcF9sb2FkZWQgJiAoMSA8PCBQQ1hIUl9GSVJNV0FSRV9EU1BfTUFJTl9JTkRFWCkpKQorCQlyZXR1cm47CisJd2hpbGUgKCFzbmRfaW5mb19nZXRfbGluZShidWZmZXIsIGxpbmUsIHNpemVvZihsaW5lKSkpIHsKKwkJaWYgKHNzY2FuZihsaW5lLCAiR1BPOiAweCV4IiwgJnZhbHVlKSAhPSAxKQorCQkJY29udGludWU7CisJCWhyMjIyX3dyaXRlX2dwbyhtZ3IsIHZhbHVlKTsJLyogR1AwICovCisJfQorfQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGN4aHJfcHJvY19pbml0KHN0cnVjdCBzbmRfcGN4aHIgKmNoaXApCiB7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKQEAgLTEzNDIsNiArMTM3NiwxMyBAQAogCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIHBjeGhyX3Byb2NfaW5mbyk7CiAJaWYgKCEgc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgInN5bmMiLCAmZW50cnkpKQogCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIHBjeGhyX3Byb2Nfc3luYyk7CisJLyogZ3BpbyBhdmFpbGFibGUgb24gc3RlcmVvIHNvdW5kIGNhcmRzIG9ubHkgKi8KKwlpZiAoY2hpcC0+bWdyLT5pc19ocl9zdGVyZW8gJiYKKwkgICAgIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJncGlvIiwgJmVudHJ5KSkgeworCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIHBjeGhyX3Byb2NfZ3Bpb19yZWFkKTsKKwkJZW50cnktPmMudGV4dC53cml0ZSA9IHBjeGhyX3Byb2NfZ3BvX3dyaXRlOworCQllbnRyeS0+bW9kZSB8PSBTX0lXVVNSOworCX0KIH0KIC8qIGVuZCBvZiBwcm9jIGludGVyZmFjZSAqLwogCkBAIC0xNTEwLDEyICsxNTUxLDEyIEBACiAKIAkJc25wcmludGYodG1waWQsIHNpemVvZih0bXBpZCksICIlcy0lZCIsCiAJCQkgaWRbZGV2XSA/IGlkW2Rldl0gOiBjYXJkX25hbWUsIGkpOwotCQljYXJkID0gc25kX2NhcmRfbmV3KGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwKTsKKwkJZXJyID0gc25kX2NhcmRfY3JlYXRlKGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQkJaWYgKCEgY2FyZCkgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHRoZSBjYXJkICVkXG4iLCBpKTsKIAkJCXBjeGhyX2ZyZWUobWdyKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIGVycjsKIAkJfQogCiAJCXN0cmNweShjYXJkLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmgKaW5kZXggNjlkODdkZS4uYmRhNzc2YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmgKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmgKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogCi0jZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OCQkweDAwMDkwNQkvKiAwLjkuNSAqLwotI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTl9TVFJJTkcJIjAuOS41IgkJLyogMC45LjUgKi8KKyNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT04JCTB4MDAwOTA2CS8qIDAuOS42ICovCisjZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OX1NUUklORwkiMC45LjYiCQkvKiAwLjkuNiAqLwogCiAKICNkZWZpbmUgUENYSFJfTUFYX0NBUkRTCQk2CkBAIC0xMjQsNiArMTI0LDcgQEAKIAogCXVuc2lnbmVkIGNoYXIgeGx4X2NmZzsJCS8qIGNvcHkgb2YgUENYSFJfWExYX0NGRyByZWdpc3RlciAqLwogCXVuc2lnbmVkIGNoYXIgeGx4X3NlbG1pYzsJLyogY29weSBvZiBQQ1hIUl9YTFhfU0VMTUlDIHJlZ2lzdGVyICovCisJdW5zaWduZWQgY2hhciBkc3BfcmVzZXQ7CS8qIGNvcHkgb2YgUENYSFJfRFNQX1JFU0VUIHJlZ2lzdGVyICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmggYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oCmluZGV4IGJiYmQ2NmQuLmJlMDE3MzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmgKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIERpZ2lncmFtIHBjeGhyIGNvbXBhdGlibGUgc291bmRjYXJkcwogICoKLSAqIGxvdyBsZXZlbCBpbnRlcmZhY2Ugd2l0aCBpbnRlcnJ1cHQgYW5zIG1lc3NhZ2UgaGFuZGxpbmcKKyAqIGxvdyBsZXZlbCBpbnRlcmZhY2Ugd2l0aCBpbnRlcnJ1cHQgYW5kIG1lc3NhZ2UgaGFuZGxpbmcKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgRGlnaWdyYW0gPGFsc2FAZGlnaWdyYW0uY29tPgogICoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX2h3ZGVwLmMKaW5kZXggNTkyNzQzYS4uMTdjYjEyMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX2h3ZGVwLmMKQEAgLTQ3MSwxNiArNDcxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY3hocl9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY3hocl9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogaW50IHBjeGhyX3NldHVwX2Zpcm13YXJlKHN0cnVjdCBwY3hocl9tZ3IgKm1ncikKIHsKIAlpbnQgZXJyOwpAQCAtNDk1LDggKzQ4NSw2IEBACiAKIAlody0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9QQ1hIUjsKIAlody0+cHJpdmF0ZV9kYXRhID0gbWdyOwotCWh3LT5vcHMub3BlbiA9IHBjeGhyX2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gcGN4aHJfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSBwY3hocl9od2RlcF9kc3Bfc3RhdHVzOwogCWh3LT5vcHMuZHNwX2xvYWQgPSBwY3hocl9od2RlcF9kc3BfbG9hZDsKIAlody0+ZXhjbHVzaXZlID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmMKaW5kZXggZmYwMTkxMi4uMWNiODJjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmMKQEAgLTUzLDYgKzUzLDggQEAKICNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX0RTUAkweDAxCiAjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9NVVRFCTB4MDIKICNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX0NPREVDCTB4MDgKKyNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX0dQT19PRkZTRVQJNQorI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0sJMHg2MAogCiAvKiB2YWx1ZXMgZm9yIFBDSFJfWExYX0NGRyByZWdpc3RlciAqLwogI2RlZmluZSBQQ1hIUl9DRkdfU1lOQ0RTUF9NQVNLCQkweDgwCkBAIC04MSw2ICs4Myw4IEBACiAvKiB2YWx1ZXMgZm9yIFBDSFJfWExYX1NUQVRVUyByZWdpc3RlciAtIFJFQUQgKi8KICNkZWZpbmUgUENYSFJfU1RBVF9TUkNfTE9DSwkJMHgwMQogI2RlZmluZSBQQ1hIUl9TVEFUX0xFVkVMX0lOCQkweDAyCisjZGVmaW5lIFBDWEhSX1NUQVRfR1BJX09GRlNFVAkJMgorI2RlZmluZSBQQ1hIUl9TVEFUX0dQSV9NQVNLCQkweDBDCiAjZGVmaW5lIFBDWEhSX1NUQVRfTUlDX0NBUFMJCTB4MTAKIC8qIHZhbHVlcyBmb3IgUENIUl9YTFhfU1RBVFVTIHJlZ2lzdGVyIC0gV1JJVEUgKi8KICNkZWZpbmUgUENYSFJfU1RBVF9GUkVRX1NZTkNfTUFTSwkweDAxCkBAIC0yOTEsMTAgKzI5NSwxMSBAQAogCVBDWEhSX09VVFBCKG1nciwgUENYSFJfRFNQX1JFU0VULAogCQkgICAgUENYSFJfRFNQX1JFU0VUX0RTUCk7CiAJbXNsZWVwKDUpOwotCVBDWEhSX09VVFBCKG1nciwgUENYSFJfRFNQX1JFU0VULAotCQkgICAgUENYSFJfRFNQX1JFU0VUX0RTUCAgfAotCQkgICAgUENYSFJfRFNQX1JFU0VUX01VVEUgfAotCQkgICAgUENYSFJfRFNQX1JFU0VUX0NPREVDKTsKKwltZ3ItPmRzcF9yZXNldCA9IFBDWEhSX0RTUF9SRVNFVF9EU1AgIHwKKwkJCSBQQ1hIUl9EU1BfUkVTRVRfTVVURSB8CisJCQkgUENYSFJfRFNQX1JFU0VUX0NPREVDOworCVBDWEhSX09VVFBCKG1nciwgUENYSFJfRFNQX1JFU0VULCBtZ3ItPmRzcF9yZXNldCk7CisJLyogaHIyMjJfd3JpdGVfZ3BvKG1nciwgMCk7IGRvZXMgdGhlIHNhbWUgKi8KIAltc2xlZXAoNSk7CiAKIAkvKiBjb25maWcgQUtNICovCkBAIC00OTYsNiArNTAxLDMzIEBACiB9CiAKIAoraW50IGhyMjIyX3JlYWRfZ3BpbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCBpc19ncGksIGludCAqdmFsdWUpCit7CisJaWYgKGlzX2dwaSkgeworCQl1bnNpZ25lZCBjaGFyIHJlZyA9IFBDWEhSX0lOUEIobWdyLCBQQ1hIUl9YTFhfU1RBVFVTKTsKKwkJKnZhbHVlID0gKGludCkocmVnICYgUENYSFJfU1RBVF9HUElfTUFTSykgPj4KKwkJCSAgICAgIFBDWEhSX1NUQVRfR1BJX09GRlNFVDsKKwl9IGVsc2UgeworCQkqdmFsdWUgPSAoaW50KShtZ3ItPmRzcF9yZXNldCAmIFBDWEhSX0RTUF9SRVNFVF9HUE9fTUFTSykgPj4KKwkJCSBQQ1hIUl9EU1BfUkVTRVRfR1BPX09GRlNFVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworaW50IGhyMjIyX3dyaXRlX2dwbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZyA9IG1nci0+ZHNwX3Jlc2V0ICYgflBDWEhSX0RTUF9SRVNFVF9HUE9fTUFTSzsKKworCXJlZyB8PSAodW5zaWduZWQgY2hhcikodmFsdWUgPDwgUENYSFJfRFNQX1JFU0VUX0dQT19PRkZTRVQpICYKKwkgICAgICAgUENYSFJfRFNQX1JFU0VUX0dQT19NQVNLOworCisJUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsIHJlZyk7CisJbWdyLT5kc3BfcmVzZXQgPSByZWc7CisJcmV0dXJuIDA7Cit9CisKKwogaW50IGhyMjIyX3VwZGF0ZV9hbmFsb2dfYXVkaW9fbGV2ZWwoc3RydWN0IHNuZF9wY3hociAqY2hpcCwKIAkJCQkgICAgaW50IGlzX2NhcHR1cmUsIGludCBjaGFubmVsKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmggYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuaAppbmRleCA2YjMxOGIyLi41YTM3YTAwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuaApAQCAtMzIsNiArMzIsOSBAQAogCQkJICAgICBlbnVtIHBjeGhyX2Nsb2NrX3R5cGUgY2xvY2tfdHlwZSwKIAkJCSAgICAgaW50ICpzYW1wbGVfcmF0ZSk7CiAKK2ludCBocjIyMl9yZWFkX2dwaW8oc3RydWN0IHBjeGhyX21nciAqbWdyLCBpbnQgaXNfZ3BpLCBpbnQgKnZhbHVlKTsKK2ludCBocjIyMl93cml0ZV9ncG8oc3RydWN0IHBjeGhyX21nciAqbWdyLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIEhSMjIyX0xJTkVfUExBWUJBQ0tfTEVWRUxfTUlOCQkwCS8qIC0yNS41IGRCICovCiAjZGVmaW5lIEhSMjIyX0xJTkVfUExBWUJBQ0tfWkVST19MRVZFTAkJNTEJLyogMC4wIGRCICovCiAjZGVmaW5lIEhSMjIyX0xJTkVfUExBWUJBQ0tfTEVWRUxfTUFYCQk5OQkvKiArMjQuMCBkQiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peGVyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4ZXIuYwppbmRleCAyNDM2ZTM3Li5mZWMwNDkzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4ZXIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4ZXIuYwpAQCAtNzg5LDExICs3ODksMTUgQEAKIAlpZiAobWdyLT51c2VfY2xvY2tfdHlwZSAhPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CiAJCW11dGV4X2xvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCQltZ3ItPnVzZV9jbG9ja190eXBlID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKLQkJaWYgKG1nci0+dXNlX2Nsb2NrX3R5cGUpCisJCXJhdGUgPSAwOworCQlpZiAobWdyLT51c2VfY2xvY2tfdHlwZSAhPSBQQ1hIUl9DTE9DS19UWVBFX0lOVEVSTkFMKSB7CiAJCQlwY3hocl9nZXRfZXh0ZXJuYWxfY2xvY2sobWdyLCBtZ3ItPnVzZV9jbG9ja190eXBlLAogCQkJCQkJICZyYXRlKTsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJcmF0ZSA9IG1nci0+c2FtcGxlX3JhdGU7CisJCQlpZiAoIXJhdGUpCisJCQkJcmF0ZSA9IDQ4MDAwOworCQl9CiAJCWlmIChyYXRlKSB7CiAJCQlwY3hocl9zZXRfY2xvY2sobWdyLCByYXRlKTsKIAkJCWlmIChtZ3ItPnNhbXBsZV9yYXRlKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCmluZGV4IDNjYWFjZmIuLjZmMTAzNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYworKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKQEAgLTIxMDIsOSArMjEwMiw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX3JpcHRpZGVfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggZTdlZjNhMS4uZDdiOTY2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTMyLmMKKysrIGIvc291bmQvcGNpL3JtZTMyLmMKQEAgLTE5NDEsOSArMTk0MSwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgcm1lMzIpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBybWUzMiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfcm1lMzJfY2FyZF9mcmVlOwogCXJtZTMyID0gKHN0cnVjdCBybWUzMiAqKSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJcm1lMzItPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2LmMgYi9zb3VuZC9wY2kvcm1lOTYuYwppbmRleCAzZmRkNDg4Li41NWZiMWMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTYuYworKysgYi9zb3VuZC9wY2kvcm1lOTYuYwpAQCAtMjM0OCw5ICsyMzQ4LDEwIEBACiAJCWRldisrOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHJtZTk2KSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgcm1lOTYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3JtZTk2X2NhcmRfZnJlZTsKIAlybWU5NiA9IChzdHJ1Y3Qgcm1lOTYgKiljYXJkLT5wcml2YXRlX2RhdGE7CQogCXJtZTk2LT5jYXJkID0gY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCA0NGQwYzE1Li4zMTRlNzM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogLyogdGhlIG1ldGVycyBhcmUgcmVndWxhciBpL28tbWFwcGVkIHJlZ2lzdGVycywgYnV0IG9mZnNldAogICAgY29uc2lkZXJhYmx5IGZyb20gdGhlIHJlc3QuIHRoZSBwZWFrIHJlZ2lzdGVycyBhcmUgcmVzZXQKLSAgIHdoZW4gcmVhZDsgdGhlIGxlYXN0LXNpZ25pZmljYW50IDQgYml0cyBhcmUgZnVsbC1zY2FsZSBjb3VudGVyczsgCisgICB3aGVuIHJlYWQ7IHRoZSBsZWFzdC1zaWduaWZpY2FudCA0IGJpdHMgYXJlIGZ1bGwtc2NhbGUgY291bnRlcnM7CiAgICB0aGUgYWN0dWFsIHBlYWsgdmFsdWUgaXMgaW4gdGhlIG1vc3Qtc2lnbmlmaWNhbnQgMjQgYml0cy4KICovCiAKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgMjYqMyB2YWx1ZXMgYXJlIHJlYWQgaW4gc3MgbW9kZQogICAgMTQqMyBpbiBkcyBtb2RlLCB3aXRoIG5vIGdhcCBiZXR3ZWVuIHZhbHVlcwogKi8KLSNkZWZpbmUgSERTUF85NjUyX3BlYWtCYXNlCTcxNjQJCisjZGVmaW5lIEhEU1BfOTY1Ml9wZWFrQmFzZQk3MTY0CiAjZGVmaW5lIEhEU1BfOTY1Ml9ybXNCYXNlCTQwOTYKIAogLyogYy5mLiB0aGUgaGRzcF85NjMyX21ldGVyc190IHN0cnVjdCAqLwpAQCAtMTczLDEyICsxNzMsMTIgQEAKICNkZWZpbmUgSERTUF9TUERJRkVtcGhhc2lzICAgICAgICAoMTw8MTApIC8qIDA9bm9uZSwgMT1vbiAqLwogI2RlZmluZSBIRFNQX1NQRElGTm9uQXVkaW8gICAgICAgICgxPDwxMSkgLyogMD1vZmYsIDE9b24gKi8KICNkZWZpbmUgSERTUF9TUERJRk9wdGljYWxPdXQgICAgICAoMTw8MTIpIC8qIDE9dXNlIDFzdCBBREFUIGNvbm5lY3RvciBmb3IgU1BESUYsIDA9ZG8gbm90ICovCi0jZGVmaW5lIEhEU1BfU3luY1JlZjIgICAgICAgICAgICAgKDE8PDEzKSAKLSNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MCAgICAoMTw8MTQpIAotI2RlZmluZSBIRFNQX1NQRElGSW5wdXRTZWxlY3QxICAgICgxPDwxNSkgCi0jZGVmaW5lIEhEU1BfU3luY1JlZjAgICAgICAgICAgICAgKDE8PDE2KSAKKyNkZWZpbmUgSERTUF9TeW5jUmVmMiAgICAgICAgICAgICAoMTw8MTMpCisjZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDAgICAgKDE8PDE0KQorI2RlZmluZSBIRFNQX1NQRElGSW5wdXRTZWxlY3QxICAgICgxPDwxNSkKKyNkZWZpbmUgSERTUF9TeW5jUmVmMCAgICAgICAgICAgICAoMTw8MTYpCiAjZGVmaW5lIEhEU1BfU3luY1JlZjEgICAgICAgICAgICAgKDE8PDE3KQotI2RlZmluZSBIRFNQX0FuYWxvZ0V4dGVuc2lvbkJvYXJkICgxPDwxOCkgLyogRm9yIEg5NjMyIGNhcmRzICovIAorI2RlZmluZSBIRFNQX0FuYWxvZ0V4dGVuc2lvbkJvYXJkICgxPDwxOCkgLyogRm9yIEg5NjMyIGNhcmRzICovCiAjZGVmaW5lIEhEU1BfWExSQnJlYWtvdXRDYWJsZSAgICAgKDE8PDIwKSAvKiBGb3IgSDk2MzIgY2FyZHMgKi8KICNkZWZpbmUgSERTUF9NaWRpMEludGVycnVwdEVuYWJsZSAoMTw8MjIpCiAjZGVmaW5lIEhEU1BfTWlkaTFJbnRlcnJ1cHRFbmFibGUgKDE8PDIzKQpAQCAtMzE0LDcgKzMxNCw3IEBACiAjZGVmaW5lIEhEU1BfVGltZWNvZGVTeW5jICAgICAgICgxPDwyNykKICNkZWZpbmUgSERTUF9BRUJPICAgICAgICAgIAkoMTw8MjgpIC8qIEg5NjMyIHNwZWNpZmljIEFuYWxvZyBFeHRlbnNpb24gQm9hcmRzICovCiAjZGVmaW5lIEhEU1BfQUVCSQkJKDE8PDI5KSAvKiAwID0gcHJlc2VudCwgMSA9IGFic2VudCAqLwotI2RlZmluZSBIRFNQX21pZGkwSVJRUGVuZGluZyAgICAoMTw8MzApIAorI2RlZmluZSBIRFNQX21pZGkwSVJRUGVuZGluZyAgICAoMTw8MzApCiAjZGVmaW5lIEhEU1BfbWlkaTFJUlFQZW5kaW5nICAgICgxPDwzMSkKIAogI2RlZmluZSBIRFNQX3NwZGlmRnJlcXVlbmN5TWFzayAgICAoSERTUF9zcGRpZkZyZXF1ZW5jeTB8SERTUF9zcGRpZkZyZXF1ZW5jeTF8SERTUF9zcGRpZkZyZXF1ZW5jeTIpCkBAIC0zOTEsNyArMzkxLDcgQEAKICNkZWZpbmUgSERTUF9DSEFOTkVMX0JVRkZFUl9CWVRFUyAgICAoNCpIRFNQX0NIQU5ORUxfQlVGRkVSX1NBTVBMRVMpCiAKIC8qIHRoZSBzaXplIG9mIHRoZSBhcmVhIHdlIG5lZWQgdG8gYWxsb2NhdGUgZm9yIERNQSB0cmFuc2ZlcnMuIHRoZQotICAgc2l6ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgLSB0aGUgCisgICBzaXplIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBjaGFubmVscyAtIHRoZQogICAgTXVsdGlmYWNlIHN0aWxsIHVzZXMgdGhlIHNhbWUgbWVtb3J5IGFyZWEuCiAKICAgIE5vdGUgdGhhdCB3ZSBhbGxvY2F0ZSAxIG1vcmUgY2hhbm5lbCB0aGFuIGlzIGFwcGFyZW50bHkgbmVlZGVkCkBAIC00NjAsNyArNDYwLDcgQEAKIAl1bnNpZ25lZCBjaGFyCSAgICAgIHFzX2luX2NoYW5uZWxzOwkgICAgIC8qIHF1YWQgc3BlZWQgbW9kZSBmb3IgSDk2MzIgKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgZHNfaW5fY2hhbm5lbHM7CiAJdW5zaWduZWQgY2hhciAgICAgICAgIHNzX2luX2NoYW5uZWxzOwkgICAgLyogZGlmZmVyZW50IGZvciBtdWx0aWZhY2UvZGlnaWZhY2UgKi8KLQl1bnNpZ25lZCBjaGFyCSAgICAgIHFzX291dF9jaGFubmVsczsJICAgIAorCXVuc2lnbmVkIGNoYXIJICAgICAgcXNfb3V0X2NoYW5uZWxzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBkc19vdXRfY2hhbm5lbHM7CiAJdW5zaWduZWQgY2hhciAgICAgICAgIHNzX291dF9jaGFubmVsczsKIApAQCAtNTAyLDkgKzUwMiw5IEBACiAKIHN0YXRpYyBjaGFyIGNoYW5uZWxfbWFwX21mX3NzW0hEU1BfTUFYX0NIQU5ORUxTXSA9IHsgLyogTXVsdGlmYWNlICovCiAJLyogQW5hbG9nICovCi0JMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgCisJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywKIAkvKiBBREFUIDIgKi8KLQkxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIAorCTE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywKIAkvKiBTUERJRiAqLwogCTI0LCAyNSwKIAktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKQEAgLTUyNSwxMSArNTI1LDExIEBACiAJLyogU1BESUYgKi8KIAk4LCA5LAogCS8qIEFuYWxvZyAqLwotCTEwLCAxMSwgCisJMTAsIDExLAogCS8qIEFPNFMtMTkyIGFuZCBBSTRTLTE5MiBleHRlbnNpb24gYm9hcmRzICovCiAJMTIsIDEzLCAxNCwgMTUsCiAJLyogb3RoZXJzIGRvbid0IGV4aXN0ICovCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAJLTEsIC0xCiB9OwogCkBAIC01MzksNyArNTM5LDcgQEAKIAkvKiBTUERJRiAqLwogCTgsIDksCiAJLyogQW5hbG9nICovCi0JMTAsIDExLCAKKwkxMCwgMTEsCiAJLyogQU80Uy0xOTIgYW5kIEFJNFMtMTkyIGV4dGVuc2lvbiBib2FyZHMgKi8KIAkxMiwgMTMsIDE0LCAxNSwKIAkvKiBvdGhlcnMgZG9uJ3QgZXhpc3QgKi8KQEAgLTU4Nyw3ICs1ODcsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwX2lkc1tdID0gewogCXsKIAkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfWElMSU5YLAotCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1AsIAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1AsCiAJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAogCQkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKIAl9LCAvKiBSTUUgSGFtbWVyZmFsbC1EU1AgKi8KQEAgLTY1Myw3ICs2NTMsNiBAQAogCiBzdGF0aWMgaW50IGhkc3BfY2hlY2tfZm9yX2lvYm94IChzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKLQogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAwOwogCWlmIChoZHNwX3JlYWQgKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpICYgSERTUF9Db25maWdFcnJvcikgewogCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IG5vIERpZ2lmYWNlIG9yIE11bHRpZmFjZSBjb25uZWN0ZWQhXG4iKTsKQEAgLTY2MSw3ICs2NjAsMjkgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOworfQogCitzdGF0aWMgaW50IGhkc3Bfd2FpdF9mb3JfaW9ib3goc3RydWN0IGhkc3AgKmhkc3AsIHVuc2lnbmVkIGludCBsb29wcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVsYXkpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgIT0gbG9vcHM7ICsraSkgeworCQlpZiAoaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpICYgSERTUF9Db25maWdFcnJvcikKKwkJCW1zbGVlcChkZWxheSk7CisJCWVsc2UgeworCQkJc25kX3ByaW50ZCgiSGFtbWVyZmFsbC1EU1A6IGlvYm94IGZvdW5kIGFmdGVyICV1bXMhXG4iLAorCQkJCSAgIGkgKiBkZWxheSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXNuZF9wcmludGsoIkhhbW1lcmZhbGwtRFNQOiBubyBEaWdpZmFjZSBvciBNdWx0aWZhY2UgY29ubmVjdGVkIVxuIik7CisJaGRzcC0+c3RhdGUgJj0gfkhEU1BfRmlybXdhcmVMb2FkZWQ7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfbG9hZF9maXJtd2FyZV9mcm9tX2NhY2hlKHN0cnVjdCBoZHNwICpoZHNwKSB7CkBAIC02NzAsMTkgKzY5MSwxOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0RsbEVycm9yKSAhPSAwKSB7Ci0JCQorCiAJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogbG9hZGluZyBmaXJtd2FyZVxuIik7CiAKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9jb250cm9sMlJlZywgSERTUF9TX1BST0dSQU0pOwogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2ZpZm9EYXRhLCAwKTsKLQkJCisKIAkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAwLCBIRFNQX0xPTkdfV0FJVCkpIHsKIAkJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogdGltZW91dCB3YWl0aW5nIGZvciBkb3dubG9hZCBwcmVwYXJhdGlvblxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQkKKwogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBIRFNQX1NfTE9BRCk7Ci0JCQorCiAJCWZvciAoaSA9IDA7IGkgPCAyNDQxMzsgKytpKSB7CiAJCQloZHNwX3dyaXRlKGhkc3AsIEhEU1BfZmlmb0RhdGEsIGhkc3AtPmZpcm13YXJlX2NhY2hlW2ldKTsKIAkJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMTI3LCBIRFNQX0xPTkdfV0FJVCkpIHsKQEAgLTY5Miw3ICs3MTMsNyBAQAogCQl9CiAKIAkJc3NsZWVwKDMpOwotCQkKKwogCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfTE9OR19XQUlUKSkgewogCQkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiB0aW1lb3V0IGF0IGVuZCBvZiBmaXJtd2FyZSBsb2FkaW5nXG4iKTsKIAkJICAgIAlyZXR1cm4gLUVJTzsKQEAgLTcwNSwxNSArNzI2LDE1IEBACiAjZW5kaWYKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9jb250cm9sMlJlZywgaGRzcC0+Y29udHJvbDJfcmVnaXN0ZXIpOwogCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IGZpbmlzaGVkIGZpcm13YXJlIGxvYWRpbmdcbiIpOwotCQkKKwogCX0KIAlpZiAoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpIHsKIAkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBmaXJtd2FyZSBsb2FkZWQgZnJvbSBjYWNoZSwgcmVzdG9yaW5nIGRlZmF1bHRzXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmhkc3AtPmxvY2ssIGZsYWdzKTsKIAkJc25kX2hkc3Bfc2V0X2RlZmF1bHRzKGhkc3ApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZHNwLT5sb2NrLCBmbGFncyk7IAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZHNwLT5sb2NrLCBmbGFncyk7CiAJfQotCQorCiAJaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUxvYWRlZDsKIAogCXJldHVybiAwOwpAQCAtNzIyLDcgKzc0Myw3IEBACiBzdGF0aWMgaW50IGhkc3BfZ2V0X2lvYm94X3ZlcnNpb24gKHN0cnVjdCBoZHNwICpoZHNwKQogewogCWlmICgoaGRzcF9yZWFkIChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfRGxsRXJyb3IpICE9IDApIHsKLQkKKwogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBIRFNQX1BST0dSQU0pOwogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2ZpZm9EYXRhLCAwKTsKIAkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAwLCBIRFNQX1NIT1JUX1dBSVQpIDwgMCkKQEAgLTczOCw3ICs3NTksNyBAQAogCQkJaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfU0hPUlRfV0FJVCk7CiAJCX0gZWxzZSB7CiAJCQloZHNwLT5pb190eXBlID0gRGlnaWZhY2U7Ci0JCX0gCisJCX0KIAl9IGVsc2UgewogCQkvKiBmaXJtd2FyZSB3YXMgYWxyZWFkeSBsb2FkZWQsIGdldCBpb2JveCB0eXBlICovCiAJCWlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpICYgSERTUF92ZXJzaW9uMSkKQEAgLTc4NiwxMyArODA3LDEzIEBACiAKIAogc3RhdGljIGludCBoZHNwX2ZpZm9fd2FpdChzdHJ1Y3QgaGRzcCAqaGRzcCwgaW50IGNvdW50LCBpbnQgdGltZW91dCkKLXsgICAgCit7CiAJaW50IGk7CiAKIAkvKiB0aGUgZmlmb1N0YXR1cyByZWdpc3RlcnMgcmVwb3J0cyBvbiBob3cgbWFueSB3b3JkcwogCSAgIGFyZSBhdmFpbGFibGUgaW4gdGhlIGNvbW1hbmQgRklGTy4KIAkqLwotCQorCiAJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgewogCiAJCWlmICgoaW50KShoZHNwX3JlYWQgKGhkc3AsIEhEU1BfZmlmb1N0YXR1cykgJiAweGZmKSA8PSBjb3VudCkKQEAgLTgyNCwxMSArODQ1LDExIEBACiAKIAlpZiAoYWRkciA+PSBIRFNQX01BVFJJWF9NSVhFUl9TSVpFKQogCQlyZXR1cm4gLTE7Ci0JCisKIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSB7CiAKIAkJLyogZnJvbSBtYXJ0aW4gYmpvcm5zZW46Ci0JCSAgIAorCiAJCSAgICJZb3UgY2FuIG9ubHkgd3JpdGUgZHdvcmRzIHRvIHRoZQogCQkgICBtaXhlciBtZW1vcnkgd2hpY2ggY29udGFpbiB0d28KIAkJICAgbWl4ZXIgdmFsdWVzIGluIHRoZSBsb3cgYW5kIGhpZ2gKQEAgLTg0Nyw3ICs4NjgsNyBAQAogCiAJCWhkc3AtPm1peGVyX21hdHJpeFthZGRyXSA9IGRhdGE7CiAKLQkJCisKIAkJLyogYGFkZHInIGFkZHJlc3NlcyBhIDE2LWJpdCB3aWRlIGFkZHJlc3MsIGJ1dAogCQkgICB0aGUgYWRkcmVzcyBzcGFjZSBhY2Nlc3NlZCB2aWEgaGRzcF93cml0ZQogCQkgICB1c2VzIGJ5dGUgb2Zmc2V0cy4gcHV0IGFub3RoZXIgd2F5LCBhZGRyCkBAIC04NTYsMTcgKzg3NywxNyBAQAogCQkgICB0byBhY2Nlc3MgMCB0byAyNzAzIC4uLgogCQkqLwogCQlhZCA9IGFkZHIvMjsKLQkKLQkJaGRzcF93cml0ZSAoaGRzcCwgNDA5NiArIChhZCo0KSwgCi0JCQkgICAgKGhkc3AtPm1peGVyX21hdHJpeFsoYWRkciYweDdmZSkrMV0gPDwgMTYpICsgCisKKwkJaGRzcF93cml0ZSAoaGRzcCwgNDA5NiArIChhZCo0KSwKKwkJCSAgICAoaGRzcC0+bWl4ZXJfbWF0cml4WyhhZGRyJjB4N2ZlKSsxXSA8PCAxNikgKwogCQkJICAgIGhkc3AtPm1peGVyX21hdHJpeFthZGRyJjB4N2ZlXSk7Ci0JCQorCiAJCXJldHVybiAwOwogCiAJfSBlbHNlIHsKIAogCQlhZCA9IChhZGRyIDw8IDE2KSArIGRhdGE7Ci0JCQorCiAJCWlmIChoZHNwX2ZpZm9fd2FpdChoZHNwLCAxMjcsIEhEU1BfTE9OR19XQUlUKSkKIAkJCXJldHVybiAtMTsKIApAQCAtOTAyLDcgKzkyMyw3IEBACiAKIAlpZiAoc3RhdHVzICYgSERTUF9TUERJRkVycm9yRmxhZykKIAkJcmV0dXJuIDA7Ci0JCisKIAlzd2l0Y2ggKHJhdGVfYml0cykgewogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTMyS0h6OiByZXR1cm4gMzIwMDA7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5NDRfMUtIejogcmV0dXJuIDQ0MTAwOwpAQCAtOTEwLDEzICs5MzEsMTMgQEAKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3k2NEtIejogcmV0dXJuIDY0MDAwOwogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTg4XzJLSHo6IHJldHVybiA4ODIwMDsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3k5NktIejogcmV0dXJuIDk2MDAwOwotCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTEyOEtIejogCisJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTI4S0h6OgogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIDEyODAwMDsKIAkJYnJlYWs7Ci0JY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTc2XzRLSHo6IAorCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE3Nl80S0h6OgogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIDE3NjQwMDsKIAkJYnJlYWs7Ci0JY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTkyS0h6OiAKKwljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxOTJLSHo6CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMTkyMDAwOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTAyNyw3ICsxMDQ4LDcgQEAKIHsKIAl1NjQgbjsKIAl1MzIgcjsKLQkKKwogCWlmIChyYXRlID49IDExMjAwMCkKIAkJcmF0ZSAvPSA0OwogCWVsc2UgaWYgKHJhdGUgPj0gNTYwMDApCkBAIC0xMDUzLDM1ICsxMDc0LDM1IEBACiAJICAgdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQgKGUuZy4gZHVyaW5nIG1vZHVsZQogCSAgIGluaXRpYWxpemF0aW9uKS4KIAkqLwotCQotCWlmICghKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX0Nsb2NrTW9kZU1hc3RlcikpIHsJCisKKwlpZiAoIShoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9DbG9ja01vZGVNYXN0ZXIpKSB7CiAJCWlmIChjYWxsZWRfaW50ZXJuYWxseSkgewogCQkJLyogcmVxdWVzdCBmcm9tIGN0bCBvciBjYXJkIGluaXRpYWxpemF0aW9uICovCiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZGV2aWNlIGlzIG5vdCBydW5uaW5nIGFzIGEgY2xvY2sgbWFzdGVyOiBjYW5ub3Qgc2V0IHNhbXBsZSByYXRlLlxuIik7CiAJCQlyZXR1cm4gLTE7Ci0JCX0gZWxzZSB7CQkKKwkJfSBlbHNlIHsKIAkJCS8qIGh3X3BhcmFtIHJlcXVlc3Qgd2hpbGUgaW4gQXV0b1N5bmMgbW9kZSAqLwogCQkJaW50IGV4dGVybmFsX2ZyZXEgPSBoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApOwogCQkJaW50IHNwZGlmX2ZyZXEgPSBoZHNwX3NwZGlmX3NhbXBsZV9yYXRlKGhkc3ApOwotCQkKKwogCQkJaWYgKChzcGRpZl9mcmVxID09IGV4dGVybmFsX2ZyZXEqMikgJiYgKGhkc3BfYXV0b3N5bmNfcmVmKGhkc3ApID49IEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMSkpCiAJCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBEZXRlY3RlZCBBREFUIGluIGRvdWJsZSBzcGVlZCBtb2RlXG4iKTsKIAkJCWVsc2UgaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIgJiYgKHNwZGlmX2ZyZXEgPT0gZXh0ZXJuYWxfZnJlcSo0KSAmJiAoaGRzcF9hdXRvc3luY19yZWYoaGRzcCkgPj0gSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxKSkKLQkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IERldGVjdGVkIEFEQVQgaW4gcXVhZCBzcGVlZCBtb2RlXG4iKTsJCQkKKwkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IERldGVjdGVkIEFEQVQgaW4gcXVhZCBzcGVlZCBtb2RlXG4iKTsKIAkJCWVsc2UgaWYgKHJhdGUgIT0gZXh0ZXJuYWxfZnJlcSkgewogCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogTm8gQXV0b1N5bmMgc291cmNlIGZvciByZXF1ZXN0ZWQgcmF0ZVxuIik7CiAJCQkJcmV0dXJuIC0xOwotCQkJfQkJCi0JCX0JCisJCQl9CisJCX0KIAl9CiAKIAljdXJyZW50X3JhdGUgPSBoZHNwLT5zeXN0ZW1fc2FtcGxlX3JhdGU7CiAKIAkvKiBDaGFuZ2luZyBmcm9tIGEgInNpbmdsZSBzcGVlZCIgdG8gYSAiZG91YmxlIHNwZWVkIiByYXRlIGlzCiAJICAgbm90IGFsbG93ZWQgaWYgYW55IHN1YnN0cmVhbXMgYXJlIG9wZW4uIFRoaXMgaXMgYmVjYXVzZQotCSAgIHN1Y2ggYSBjaGFuZ2UgY2F1c2VzIGEgc2hpZnQgaW4gdGhlIGxvY2F0aW9uIG9mIAorCSAgIHN1Y2ggYSBjaGFuZ2UgY2F1c2VzIGEgc2hpZnQgaW4gdGhlIGxvY2F0aW9uIG9mCiAJICAgdGhlIERNQSBidWZmZXJzIGFuZCBhIHJlZHVjdGlvbiBpbiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZQotCSAgIGJ1ZmZlcnMuIAorCSAgIGJ1ZmZlcnMuCiAKIAkgICBOb3RlIHRoYXQgYSBzaW1pbGFyIGJ1dCBlc3NlbnRpYWxseSBpbnNvbHVibGUgcHJvYmxlbQogCSAgIGV4aXN0cyBmb3IgZXh0ZXJuYWxseS1kcml2ZW4gcmF0ZSBjaGFuZ2VzLiBBbGwgd2UgY2FuIGRvCkBAIC0xMDg5LDcgKzExMTAsNyBAQAogCiAJaWYgKHJhdGUgPiA5NjAwMCAmJiBoZHNwLT5pb190eXBlICE9IEg5NjMyKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkKKwogCXN3aXRjaCAocmF0ZSkgewogCWNhc2UgMzIwMDA6CiAJCWlmIChjdXJyZW50X3JhdGUgPiA0ODAwMCkKQEAgLTExNzksNyArMTIwMCw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQkKKwogCWhkc3AtPnN5c3RlbV9zYW1wbGVfcmF0ZSA9IHJhdGU7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNDUsMTYgKzEyNjYsMTYgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOwogCiAJLyogT3V0cHV0IGlzIG5vdCBpbnRlcnJ1cHQgZHJpdmVuICovCi0JCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZobWlkaS0+bG9jaywgZmxhZ3MpOwogCWlmIChobWlkaS0+b3V0cHV0KSB7CiAJCWlmICghc25kX3Jhd21pZGlfdHJhbnNtaXRfZW1wdHkgKGhtaWRpLT5vdXRwdXQpKSB7CiAJCQlpZiAoKG5fcGVuZGluZyA9IHNuZF9oZHNwX21pZGlfb3V0cHV0X3Bvc3NpYmxlIChobWlkaS0+aGRzcCwgaG1pZGktPmlkKSkgPiAwKSB7CiAJCQkJaWYgKG5fcGVuZGluZyA+IChpbnQpc2l6ZW9mIChidWYpKQogCQkJCQluX3BlbmRpbmcgPSBzaXplb2YgKGJ1Zik7Ci0JCQkJCisKIAkJCQlpZiAoKHRvX3dyaXRlID0gc25kX3Jhd21pZGlfdHJhbnNtaXQgKGhtaWRpLT5vdXRwdXQsIGJ1Ziwgbl9wZW5kaW5nKSkgPiAwKSB7Ci0JCQkJCWZvciAoaSA9IDA7IGkgPCB0b193cml0ZTsgKytpKSAKKwkJCQkJZm9yIChpID0gMDsgaSA8IHRvX3dyaXRlOyArK2kpCiAJCQkJCQlzbmRfaGRzcF9taWRpX3dyaXRlX2J5dGUgKGhtaWRpLT5oZHNwLCBobWlkaS0+aWQsIGJ1ZltpXSk7CiAJCQkJfQogCQkJfQpAQCAtMTMyNSwxNCArMTM0NiwxNCBAQAogewogCXN0cnVjdCBoZHNwX21pZGkgKmhtaWRpID0gKHN0cnVjdCBoZHNwX21pZGkgKikgZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCiAJc25kX2hkc3BfbWlkaV9vdXRwdXRfd3JpdGUoaG1pZGkpOwogCXNwaW5fbG9ja19pcnFzYXZlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIAogCS8qIHRoaXMgZG9lcyBub3QgYnVtcCBobWlkaS0+aXN0aW1lciwgYmVjYXVzZSB0aGUKIAkgICBrZXJuZWwgYXV0b21hdGljYWxseSByZW1vdmVkIHRoZSB0aW1lciB3aGVuIGl0CiAJICAgZXhwaXJlZCwgYW5kIHdlIGFyZSBub3cgYWRkaW5nIGl0IGJhY2ssIHRodXMKLQkgICBsZWF2aW5nIGlzdGltZXIgd2hlcmV2ZXIgaXQgd2FzIHNldCBiZWZvcmUuICAKKwkgICBsZWF2aW5nIGlzdGltZXIgd2hlcmV2ZXIgaXQgd2FzIHNldCBiZWZvcmUuCiAJKi8KIAogCWlmIChobWlkaS0+aXN0aW1lcikgewpAQCAtMTUwMSw3ICsxNTIyLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfY29udHJvbF9zcGRpZl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc25kX2hkc3BfY29udmVydF90b19hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgsIGhkc3AtPmNyZWdfc3BkaWYpOwogCXJldHVybiAwOwogfQpAQCAtMTUxMSw3ICsxNTMyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXUzMiB2YWw7Ci0JCisKIAl2YWwgPSBzbmRfaGRzcF9jb252ZXJ0X2Zyb21fYWVzKCZ1Y29udHJvbC0+dmFsdWUuaWVjOTU4KTsKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAljaGFuZ2UgPSB2YWwgIT0gaGRzcC0+Y3JlZ19zcGRpZjsKQEAgLTE1MzAsNyArMTU1MSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2NvbnRyb2xfc3BkaWZfc3RyZWFtX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzbmRfaGRzcF9jb252ZXJ0X3RvX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCwgaGRzcC0+Y3JlZ19zcGRpZl9zdHJlYW0pOwogCXJldHVybiAwOwogfQpAQCAtMTU0MCw3ICsxNTYxLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXUzMiB2YWw7Ci0JCisKIAl2YWwgPSBzbmRfaGRzcF9jb252ZXJ0X2Zyb21fYWVzKCZ1Y29udHJvbC0+dmFsdWUuaWVjOTU4KTsKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAljaGFuZ2UgPSB2YWwgIT0gaGRzcC0+Y3JlZ19zcGRpZl9zdHJlYW07CkBAIC0xNjAyLDcgKzE2MjMsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3Bfc3BkaWZfaW4oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjEyLDcgKzE2MzMsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICUgKChoZHNwLT5pb190eXBlID09IEg5NjMyKSA/IDQgOiAzKTsKQEAgLTE2NDksNyArMTY3MCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9vdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX3NwZGlmX291dChoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NTksNyArMTY4MCw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTE2OTMsNyArMTcxNCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9wcm9mZXNzaW9uYWwoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX3NwZGlmX3Byb2Zlc3Npb25hbChoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MDMsNyArMTcyNCw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTE3MzcsNyArMTc1OCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9lbXBoYXNpcyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfZW1waGFzaXMoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzQ3LDcgKzE3NjgsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xNzgxLDcgKzE4MDIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfbm9uYXVkaW8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX3NwZGlmX25vbmF1ZGlvKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTc5MSw3ICsxODEyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTgyOCw3ICsxODQ5LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXN3aXRjaCAoaGRzcF9zcGRpZl9zYW1wbGVfcmF0ZShoZHNwKSkgewogCWNhc2UgMzIwMDA6CiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOwpAQCAtMTg1OCw3ICsxODc5LDcgQEAKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwkJCisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODIsNyArMTkwMyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zeXN0ZW1fc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3AtPnN5c3RlbV9zYW1wbGVfcmF0ZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4OTksNyArMTkyMCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fYXV0b3N5bmNfc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IjMyMDAwIiwgIjQ0MTAwIiwgIjQ4MDAwIiwgIjY0MDAwIiwgIjg4MjAwIiwgIjk2MDAwIiwgIk5vbmUiLCAiMTI4MDAwIiwgIjE3NjQwMCIsICIxOTIwMDAifTsJCisJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IjMyMDAwIiwgIjQ0MTAwIiwgIjQ4MDAwIiwgIjY0MDAwIiwgIjg4MjAwIiwgIjk2MDAwIiwgIk5vbmUiLCAiMTI4MDAwIiwgIjE3NjQwMCIsICIxOTIwMDAifTsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpID8gMTAgOiA3IDsKQEAgLTE5MTIsNyArMTkzMyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hdXRvc3luY19zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzd2l0Y2ggKGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCkpIHsKIAljYXNlIDMyMDAwOgogCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKQEAgLTE5NDAsOSArMTk2MSw5IEBACiAJCWJyZWFrOwogCWNhc2UgMTkyMDAwOgogCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gOTsKLQkJYnJlYWs7CQorCQlicmVhazsKIAlkZWZhdWx0OgotCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gNjsJCQorCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gNjsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTY4LDcgKzE5ODksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3N5c3RlbV9jbG9ja19tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJNYXN0ZXIiLCAiU2xhdmUiIH07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKQEAgLTE5ODEsNyArMjAwMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zeXN0ZW1fY2xvY2tfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9zeXN0ZW1fY2xvY2tfbW9kZShoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMTgsNyArMjAzOSw3IEBACiAJCWNhc2UgMTkyMDAwOgogCQkJcmV0dXJuIDk7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMzsJCisJCQlyZXR1cm4gMzsKIAkJfQogCX0gZWxzZSB7CiAJCXJldHVybiAwOwpAQCAtMjAzMiw3ICsyMDUzLDcgQEAKIAljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0FVVE9TWU5DOgogCQlpZiAoaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKSAhPSAwKSB7CiAJCSAgICBpZiAoIWhkc3Bfc2V0X3JhdGUoaGRzcCwgaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKSwgMSkpIHsKLQkJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfkhEU1BfQ2xvY2tNb2RlTWFzdGVyOwkJCisJCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyICY9IH5IRFNQX0Nsb2NrTW9kZU1hc3RlcjsKIAkJCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9jb250cm9sUmVnaXN0ZXIsIGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIpOwogCQkJcmV0dXJuIDA7CiAJCSAgICB9CkBAIC0yMDQzLDcgKzIwNjQsNyBAQAogCQlicmVhazsKIAljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzQ0XzFLSFo6CiAJCXJhdGUgPSA0NDEwMDsKLQkJYnJlYWs7CSAgICAKKwkJYnJlYWs7CiAJY2FzZSBIRFNQX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF80OEtIWjoKIAkJcmF0ZSA9IDQ4MDAwOwogCQlicmVhazsKQEAgLTIwNzgsMTMgKzIwOTksMTMgQEAKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiQXV0b1N5bmMiLCAiSW50ZXJuYWwgMzIuMCBrSHoiLCAiSW50ZXJuYWwgNDQuMSBrSHoiLCAiSW50ZXJuYWwgNDguMCBrSHoiLCAiSW50ZXJuYWwgNjQuMCBrSHoiLCAiSW50ZXJuYWwgODguMiBrSHoiLCAiSW50ZXJuYWwgOTYuMCBrSHoiLCAiSW50ZXJuYWwgMTI4IGtIeiIsICJJbnRlcm5hbCAxNzYuNCBrSHoiLCAiSW50ZXJuYWwgMTkyLjAgS0h6IiB9OwogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKIAkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAxMDsKIAllbHNlCi0JICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gNzsJCisJICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gNzsKIAlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKIAkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKIAlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwpAQCAtMjA5NCw3ICsyMTE1LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2Nsb2NrX3NvdXJjZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9jbG9ja19zb3VyY2UoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTA0LDcgKzIxMjUsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMjEzMCw3ICsyMTUxLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2Nsb2NrX3NvdXJjZV9sb2NrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcC0+Y2xvY2tfc291cmNlX2xvY2tlZDsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNjUsNyArMjE4Niw3IEBACiAJY2FzZSBIRFNQX0RBR2Fpbk1pbnVzMTBkQlY6CiAJCXJldHVybiAyOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAxOwkKKwkJcmV0dXJuIDE7CiAJfQogfQogCkBAIC0yMTgwLDggKzIyMDEsOCBAQAogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfREFHYWluUGx1czRkQnU7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0RBR2Fpbk1pbnVzMTBkQlY7CQkKLQkJYnJlYWs7CSAgICAKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0RBR2Fpbk1pbnVzMTBkQlY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIApAQCAtMjE5Myw3ICsyMjE0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19kYV9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJIaSBHYWluIiwgIis0IGRCdSIsICItMTAgZGJWIn07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTIyMDYsNyArMjIyNyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9kYV9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2RhX2dhaW4oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjE2LDcgKzIyMzcsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMjI1MCw3ICsyMjcxLDcgQEAKIAljYXNlIEhEU1BfQURHYWluTG93R2FpbjoKIAkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDE7CQorCQlyZXR1cm4gMTsKIAl9CiB9CiAKQEAgLTIyNjIsMTEgKzIyODMsMTEgQEAKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2Fpbk1pbnVzMTBkQlY7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2FpblBsdXM0ZEJ1OwkJCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5QbHVzNGRCdTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluTG93R2FpbjsJCQotCQlicmVhazsJICAgIAorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluTG93R2FpbjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCkBAIC0yMjc4LDcgKzIyOTksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2FkX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ii0xMCBkQlYiLCAiKzQgZEJ1IiwgIkxvIEdhaW4ifTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwpAQCAtMjI5MSw3ICsyMzEyLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2FkX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfYWRfZ2FpbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMDEsNyArMjMyMiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yMzM1LDcgKzIzNTYsNyBAQAogCWNhc2UgSERTUF9QaG9uZUdhaW5NaW51czEyZEI6CiAJCXJldHVybiAyOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwkKKwkJcmV0dXJuIDA7CiAJfQogfQogCkBAIC0yMzQ3LDExICsyMzY4LDExIEBACiAJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW4wZEI7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzNmRCOwkJCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW5NaW51czZkQjsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXMxMmRCOwkJCi0JCWJyZWFrOwkgICAgCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW5NaW51czEyZEI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIApAQCAtMjM2Myw3ICsyMzg0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19waG9uZV9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyIwIGRCIiwgIi02IGRCIiwgIi0xMiBkQiJ9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yMzc2LDcgKzIzOTcsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcGhvbmVfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9waG9uZV9nYWluKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjM4Niw3ICsyNDA3LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTI0MzIsNyArMjQ1Myw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF94bHJfYnJlYWtvdXRfY2FibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfeGxyX2JyZWFrb3V0X2NhYmxlKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjQ0Miw3ICsyNDYzLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjQ4OCw3ICsyNTA5LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2FlYihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9hZWIoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDk4LDcgKzI1MTksNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yNTc2LDcgKzI1OTcsNyBAQAogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJXb3JkIiwgIklFQzk1OCIsICJBREFUMSIsICJBREFUIFN5bmMiLCAiQURBVDIiLCAiQURBVDMiIH07CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCkBAIC0yNTk1LDcgKzI2MTYsNyBAQAogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDA7CiAJCWJyZWFrOwogCX0KLQkJCisKIAlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKIAkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKIAlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwpAQCAtMjYwNSw3ICsyNjI2LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3ByZWZfc3luY19yZWYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfcHJlZl9zeW5jX3JlZihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI2MTUsNyArMjYzNiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZSwgbWF4OwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTI2NjQsNyArMjY4NSw3IEBACiAJY2FzZSBIRFNQX1NlbFN5bmNSZWZfU1BESUY6CiAJCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fU1BESUY7CiAJY2FzZSBIRFNQX1NlbFN5bmNSZWZNYXNrOgotCQlyZXR1cm4gSERTUF9BVVRPU1lOQ19GUk9NX05PTkU7CQorCQlyZXR1cm4gSERTUF9BVVRPU1lOQ19GUk9NX05PTkU7CiAJY2FzZSBIRFNQX1NlbFN5bmNSZWZfQURBVDE6CiAJCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fQURBVDE7CiAJY2FzZSBIRFNQX1NlbFN5bmNSZWZfQURBVDI6CkBAIC0yNjgwLDcgKzI3MDEsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2F1dG9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiV29yZCIsICJBREFUIFN5bmMiLCAiSUVDOTU4IiwgIk5vbmUiLCAiQURBVDEiLCAiQURBVDIiLCAiQURBVDMiIH07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gNzsKQEAgLTI2OTMsNyArMjcxNCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hdXRvc3luY19yZWYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfYXV0b3N5bmNfcmVmKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjcyNyw3ICsyNzQ4LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2xpbmVfb3V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9saW5lX291dChoZHNwKTsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjczOSw3ICsyNzYwLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjc3Myw3ICsyNzk0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3ByZWNpc2VfcG9pbnRlcihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3AtPnByZWNpc2VfcHRyOwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yNzg1LDcgKzI4MDYsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yODE5LDcgKzI4NDAsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfdXNlX21pZGlfdGFza2xldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3AtPnVzZV9taWRpX3Rhc2tsZXQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKQEAgLTI4MzEsNyArMjg1Miw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI4NzMsMTIgKzI4OTQsMTIgQEAKIAogCXNvdXJjZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCWRlc3RpbmF0aW9uID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07Ci0JCisKIAlpZiAoc291cmNlID49IGhkc3AtPm1heF9jaGFubmVscykKIAkJYWRkciA9IGhkc3BfcGxheWJhY2tfdG9fb3V0cHV0X2tleShoZHNwLHNvdXJjZS1oZHNwLT5tYXhfY2hhbm5lbHMsZGVzdGluYXRpb24pOwogCWVsc2UKIAkJYWRkciA9IGhkc3BfaW5wdXRfdG9fb3V0cHV0X2tleShoZHNwLHNvdXJjZSwgZGVzdGluYXRpb24pOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMl0gPSBoZHNwX3JlYWRfZ2FpbiAoaGRzcCwgYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKQEAgLTI5MjYsNyArMjk0Nyw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19zeW5jX2NoZWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJObyBMb2NrIiwgIkxvY2siLCAiU3luYyIgfTsJCisJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik5vIExvY2siLCAiTG9jayIsICJTeW5jIiB9OwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwpAQCAtMjk3MSw3ICsyOTkyLDcgQEAKIAlpbnQgc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwogCWlmIChzdGF0dXMgJiBIRFNQX1NQRElGRXJyb3JGbGFnKQogCQlyZXR1cm4gMDsKLQllbHNlIHsJCisJZWxzZSB7CiAJCWlmIChzdGF0dXMgJiBIRFNQX1NQRElGU3luYykKIAkJCXJldHVybiAyOwogCQllbHNlCkBAIC0zMDA3LDcgKzMwMjgsNyBAQAogCQkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCXJldHVybiAwOwotfQkKK30KIAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWRhdHN5bmNfc3luY19jaGVjayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0zMDI1LDE3ICszMDQ2LDE3IEBACiB9CiAKIHN0YXRpYyBpbnQgaGRzcF9hZGF0X3N5bmNfY2hlY2soc3RydWN0IGhkc3AgKmhkc3AsIGludCBpZHgpCi17CQorewogCWludCBzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7Ci0JCisKIAlpZiAoc3RhdHVzICYgKEhEU1BfTG9jazA+PmlkeCkpIHsKIAkJaWYgKHN0YXR1cyAmIChIRFNQX1N5bmMwPj5pZHgpKQogCQkJcmV0dXJuIDI7CiAJCWVsc2UKLQkJCXJldHVybiAxOwkJCisJCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7Ci19IAorfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZGF0X3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewpAQCAtMzA1Myw3ICszMDc0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNdWx0aWZhY2U6CiAJY2FzZSBIOTYzMjoKLQkJaWYgKG9mZnNldCA+PSAxKSAKKwkJaWYgKG9mZnNldCA+PSAxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zMTE1LDcgKzMxMzYsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfZGRzX29mZnNldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9kZHNfb2Zmc2V0KGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMzEyNSw3ICszMTQ2LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTMxNzAsNyArMzE5MSw3IEBACiAJLmdldCA9CQlzbmRfaGRzcF9jb250cm9sX3NwZGlmX21hc2tfZ2V0LAogCS5wcml2YXRlX3ZhbHVlID0gSUVDOTU4X0FFUzBfTk9OQVVESU8gfAogICAJCQkgSUVDOTU4X0FFUzBfUFJPRkVTU0lPTkFMIHwKLQkJCSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVMsCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCQkgSUVDOTU4X0FFUzBfQ09OX0VNUEhBU0lTLAogfSwKIHsKIAkuYWNjZXNzID0JU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCkBAIC0zMTg4LDcgKzMyMDksNyBAQAogSERTUF9TUERJRl9QUk9GRVNTSU9OQUwoIklFQzk1OCBQcm9mZXNzaW9uYWwgQml0IiwgMCksCiBIRFNQX1NQRElGX0VNUEhBU0lTKCJJRUM5NTggRW1waGFzaXMgQml0IiwgMCksCiBIRFNQX1NQRElGX05PTl9BVURJTygiSUVDOTU4IE5vbi1hdWRpbyBCaXQiLCAwKSwKLS8qICdTYW1wbGUgQ2xvY2sgU291cmNlJyBjb21wbGllcyB3aXRoIHRoZSBhbHNhIGNvbnRyb2wgbmFtaW5nIHNjaGVtZSAqLyAKKy8qICdTYW1wbGUgQ2xvY2sgU291cmNlJyBjb21wbGllcyB3aXRoIHRoZSBhbHNhIGNvbnRyb2wgbmFtaW5nIHNjaGVtZSAqLwogSERTUF9DTE9DS19TT1VSQ0UoIlNhbXBsZSBDbG9jayBTb3VyY2UiLCAwKSwKIHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTMyNDAsNyArMzI2MSw3IEBACiAJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQkKKwogCS8qIERBLCBBRCBhbmQgUGhvbmUgZ2FpbiBhbmQgWExSIGJyZWFrb3V0IGNhYmxlIGNvbnRyb2xzIGZvciBIOTYzMiBjYXJkcyAqLwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSB7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfaGRzcF85NjMyX2NvbnRyb2xzKTsgaWR4KyspIHsKQEAgLTMyNTksNyArMzI4MCw3IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAvcHJvYyBpbnRlcmZhY2UgCisgICAvcHJvYyBpbnRlcmZhY2UKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgdm9pZApAQCAtMzI5OCw3ICszMzE5LDcgQEAKIAkJCX0KIAkJfQogCX0KLQkKKwogCXN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAlzdGF0dXMyID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKTsKIApAQCAtMzM2MiwxNyArMzM4MywxNyBAQAogCQlicmVhazsKIAkJY2FzZSBIRFNQX0NMT0NLX1NPVVJDRV9JTlRFUk5BTF8xOTJLSFo6CiAJCWNsb2NrX3NvdXJjZSA9ICJJbnRlcm5hbCAxOTIga0h6IjsKLQkJYnJlYWs7CQorCQlicmVhazsKIAlkZWZhdWx0OgotCQljbG9ja19zb3VyY2UgPSAiRXJyb3IiOwkJCisJCWNsb2NrX3NvdXJjZSA9ICJFcnJvciI7CiAJfQogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTYW1wbGUgQ2xvY2sgU291cmNlOiAlc1xuIiwgY2xvY2tfc291cmNlKTsKLQkJCQorCiAJaWYgKGhkc3Bfc3lzdGVtX2Nsb2NrX21vZGUoaGRzcCkpCiAJCXN5c3RlbV9jbG9ja19tb2RlID0gIlNsYXZlIjsKIAllbHNlCiAJCXN5c3RlbV9jbG9ja19tb2RlID0gIk1hc3RlciI7Ci0JCisKIAlzd2l0Y2ggKGhkc3BfcHJlZl9zeW5jX3JlZiAoaGRzcCkpIHsKIAljYXNlIEhEU1BfU1lOQ19GUk9NX1dPUkQ6CiAJCXByZWZfc3luY19yZWYgPSAiV29yZCBDbG9jayI7CkBAIC0zMzk3LDcgKzM0MTgsNyBAQAogCQlicmVhazsKIAl9CiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlByZWZlcnJlZCBTeW5jIFJlZmVyZW5jZTogJXNcbiIsIHByZWZfc3luY19yZWYpOwotCQorCiAJc3dpdGNoIChoZHNwX2F1dG9zeW5jX3JlZiAoaGRzcCkpIHsKIAljYXNlIEhEU1BfQVVUT1NZTkNfRlJPTV9XT1JEOgogCQlhdXRvc3luY19yZWYgPSAiV29yZCBDbG9jayI7CkBAIC0zNDEwLDcgKzM0MzEsNyBAQAogCQlicmVhazsKIAljYXNlIEhEU1BfQVVUT1NZTkNfRlJPTV9OT05FOgogCQlhdXRvc3luY19yZWYgPSAiTm9uZSI7Ci0JCWJyZWFrOwkKKwkJYnJlYWs7CiAJY2FzZSBIRFNQX0FVVE9TWU5DX0ZST01fQURBVDE6CiAJCWF1dG9zeW5jX3JlZiA9ICJBREFUMSI7CiAJCWJyZWFrOwpAQCAtMzQyNSwxNCArMzQ0NiwxNCBAQAogCQlicmVhazsKIAl9CiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIkF1dG9TeW5jIFJlZmVyZW5jZTogJXNcbiIsIGF1dG9zeW5jX3JlZik7Ci0JCisKIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiQXV0b1N5bmMgRnJlcXVlbmN5OiAlZFxuIiwgaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKSk7Ci0JCisKIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU3lzdGVtIENsb2NrIE1vZGU6ICVzXG4iLCBzeXN0ZW1fY2xvY2tfbW9kZSk7CiAKIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU3lzdGVtIENsb2NrIEZyZXF1ZW5jeTogJWRcbiIsIGhkc3AtPnN5c3RlbV9zYW1wbGVfcmF0ZSk7CiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlN5c3RlbSBDbG9jayBMb2NrZWQ6ICVzXG4iLCBoZHNwLT5jbG9ja19zb3VyY2VfbG9ja2VkID8gIlllcyIgOiAiTm8iKTsKLQkJCisKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogCiAJc3dpdGNoIChoZHNwX3NwZGlmX2luKGhkc3ApKSB7CkBAIC0zNDUyLDcgKzM0NzMsNyBAQAogCQlzbmRfaXByaW50ZihidWZmZXIsICJJRUM5NTggaW5wdXQ6ID8/P1xuIik7CiAJCWJyZWFrOwogCX0KLQkKKwogCWlmIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9TUERJRk9wdGljYWxPdXQpCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBvdXRwdXQ6IENvYXhpYWwgJiBBREFUMVxuIik7CiAJZWxzZQpAQCAtMzUxMCwxMyArMzUzMSwxMyBAQAogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU1BESUY6IE5vIExvY2tcbiIpOwogCWVsc2UKIAkJc25kX2lwcmludGYgKGJ1ZmZlciwgIlNQRElGOiAlc1xuIiwgeCA/ICJTeW5jIiA6ICJMb2NrIik7Ci0JCisKIAl4ID0gc3RhdHVzMiAmIEhEU1Bfd2Nfc3luYzsKIAlpZiAoc3RhdHVzMiAmIEhEU1Bfd2NfbG9jaykKIAkJc25kX2lwcmludGYgKGJ1ZmZlciwgIldvcmQgQ2xvY2s6ICVzXG4iLCB4ID8gIlN5bmMiIDogIkxvY2siKTsKIAllbHNlCiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJXb3JkIENsb2NrOiBObyBMb2NrXG4iKTsKLQkKKwogCXggPSBzdGF0dXMgJiBIRFNQX1RpbWVjb2RlU3luYzsKIAlpZiAoc3RhdHVzICYgSERTUF9UaW1lY29kZUxvY2spCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFEQVQgU3luYzogJXNcbiIsIHggPyAiU3luYyIgOiAiTG9jayIpOwpAQCAtMzUyNCwxMSArMzU0NSwxMSBAQAogCQlzbmRfaXByaW50ZihidWZmZXIsICJBREFUIFN5bmM6IE5vIExvY2tcbiIpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKLQkKKwogCS8qIEluZm9ybWF0aW9ucyBhYm91dCBIOTYzMiBzcGVjaWZpYyBjb250cm9scyAqLwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSB7CiAJCWNoYXIgKnRtcDsKLQkKKwogCQlzd2l0Y2ggKGhkc3BfYWRfZ2FpbihoZHNwKSkgewogCQljYXNlIDA6CiAJCQl0bXAgPSAiLTEwIGRCViI7CkBAIC0zNTU0LDcgKzM1NzUsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJc25kX2lwcmludGYoYnVmZmVyLCAiREEgR2FpbiA6ICVzXG4iLCB0bXApOwotCQkKKwogCQlzd2l0Y2ggKGhkc3BfcGhvbmVfZ2FpbihoZHNwKSkgewogCQljYXNlIDA6CiAJCQl0bXAgPSAiMCBkQiI7CkBAIC0zNTY4LDggKzM1ODksOCBAQAogCQl9CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBob25lcyBHYWluIDogJXNcbiIsIHRtcCk7CiAKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiWExSIEJyZWFrb3V0IENhYmxlIDogJXNcbiIsIGhkc3BfeGxyX2JyZWFrb3V0X2NhYmxlKGhkc3ApID8gInllcyIgOiAibm8iKTsJCi0JCQorCQlzbmRfaXByaW50ZihidWZmZXIsICJYTFIgQnJlYWtvdXQgQ2FibGUgOiAlc1xuIiwgaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCkgPyAieWVzIiA6ICJubyIpOworCiAJCWlmIChoZHNwLT5jb250cm9sX3JlZ2lzdGVyICYgSERTUF9BbmFsb2dFeHRlbnNpb25Cb2FyZCkKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFFQiA6IG9uIChBREFUMSBpbnRlcm5hbClcbiIpOwogCQllbHNlCkBAIC0zNjMyLDE4ICszNjUzLDE4IEBACiAKIAkvKiBzZXQgZGVmYXVsdHM6CiAKLQkgICBTUERJRiBJbnB1dCB2aWEgQ29heCAKKwkgICBTUERJRiBJbnB1dCB2aWEgQ29heAogCSAgIE1hc3RlciBjbG9jayBtb2RlCiAJICAgbWF4aW11bSBsYXRlbmN5ICg3ID0+IDJeNyA9IDgxOTIgc2FtcGxlcywgNjRLYnl0ZSBidWZmZXIsCiAJICAgICAgICAgICAgICAgICAgICB3aGljaCBpbXBsaWVzIDIgNDA5NiBzYW1wbGUsIDMyS2J5dGUgcGVyaW9kcykuCi0gICAgICAgICAgIEVuYWJsZSBsaW5lIG91dC4JCQkgICAgCisgICAgICAgICAgIEVuYWJsZSBsaW5lIG91dC4KIAkgKi8KIAotCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgPSBIRFNQX0Nsb2NrTW9kZU1hc3RlciB8IAotCQkgICAgICAgICAgICAgICAgIEhEU1BfU1BESUZJbnB1dENvYXhpYWwgfCAKLQkJICAgICAgICAgICAgICAgICBoZHNwX2VuY29kZV9sYXRlbmN5KDcpIHwgCisJaGRzcC0+Y29udHJvbF9yZWdpc3RlciA9IEhEU1BfQ2xvY2tNb2RlTWFzdGVyIHwKKwkJICAgICAgICAgICAgICAgICBIRFNQX1NQRElGSW5wdXRDb2F4aWFsIHwKKwkJICAgICAgICAgICAgICAgICBoZHNwX2VuY29kZV9sYXRlbmN5KDcpIHwKIAkJICAgICAgICAgICAgICAgICBIRFNQX0xpbmVPdXQ7Ci0JCisKIAogCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9jb250cm9sUmVnaXN0ZXIsIGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIpOwogCkBAIC0zNjYxLDcgKzM2ODIsNyBAQAogCWhkc3BfY29tcHV0ZV9wZXJpb2Rfc2l6ZShoZHNwKTsKIAogCS8qIHNpbGVuY2UgZXZlcnl0aGluZyAqLwotCQorCiAJZm9yIChpID0gMDsgaSA8IEhEU1BfTUFUUklYX01JWEVSX1NJWkU7ICsraSkKIAkJaGRzcC0+bWl4ZXJfbWF0cml4W2ldID0gTUlOVVNfSU5GSU5JVFlfR0FJTjsKIApAQCAtMzY2OSw3ICszNjkwLDcgQEAKIAkJaWYgKGhkc3Bfd3JpdGVfZ2FpbiAoaGRzcCwgaSwgTUlOVVNfSU5GSU5JVFlfR0FJTikpCiAJCQlyZXR1cm4gLUVJTzsKIAl9Ci0JCisKIAkvKiBIOTYzMiBzcGVjaWZpYyBkZWZhdWx0cyAqLwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSB7CiAJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gKEhEU1BfREFHYWluUGx1czRkQnUgfCBIRFNQX0FER2FpblBsdXM0ZEJ1IHwgSERTUF9QaG9uZUdhaW4wZEIpOwpAQCAtMzY4NywxMiArMzcwOCwxMiBAQAogc3RhdGljIHZvaWQgaGRzcF9taWRpX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSAoc3RydWN0IGhkc3AgKilhcmc7Ci0JCisKIAlpZiAoaGRzcC0+bWlkaVswXS5wZW5kaW5nKQogCQlzbmRfaGRzcF9taWRpX2lucHV0X3JlYWQgKCZoZHNwLT5taWRpWzBdKTsKIAlpZiAoaGRzcC0+bWlkaVsxXS5wZW5kaW5nKQogCQlzbmRfaGRzcF9taWRpX2lucHV0X3JlYWQgKCZoZHNwLT5taWRpWzFdKTsKLX0gCit9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfaGRzcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewpAQCAtMzcwNCw3ICszNzI1LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWlkaTBzdGF0dXM7CiAJdW5zaWduZWQgaW50IG1pZGkxc3RhdHVzOwogCWludCBzY2hlZHVsZSA9IDA7Ci0JCisKIAlzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAKIAlhdWRpbyA9IHN0YXR1cyAmIEhEU1BfYXVkaW9JUlFQZW5kaW5nOwpAQCAtMzcxOCwxNSArMzczOSwxOCBAQAogCiAJbWlkaTBzdGF0dXMgPSBoZHNwX3JlYWQgKGhkc3AsIEhEU1BfbWlkaVN0YXR1c0luMCkgJiAweGZmOwogCW1pZGkxc3RhdHVzID0gaGRzcF9yZWFkIChoZHNwLCBIRFNQX21pZGlTdGF0dXNJbjEpICYgMHhmZjsKLQkKKworCWlmICghKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCiAJaWYgKGF1ZGlvKSB7CiAJCWlmIChoZHNwLT5jYXB0dXJlX3N1YnN0cmVhbSkKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaGRzcC0+cGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtKTsKLQkJCisKIAkJaWYgKGhkc3AtPnBsYXliYWNrX3N1YnN0cmVhbSkKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaGRzcC0+cGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbSk7CiAJfQotCQorCiAJaWYgKG1pZGkwICYmIG1pZGkwc3RhdHVzKSB7CiAJCWlmIChoZHNwLT51c2VfbWlkaV90YXNrbGV0KSB7CiAJCQkvKiB3ZSBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMgaW5wdXQgdW50aWwgcHJvY2Vzc2luZyBpcyBkb25lICovCkBAIC0zNzY5LDEwICszNzkzLDEwIEBACiAKICAgICAgICAgaWYgKHNuZF9CVUdfT04oY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+PSBoZHNwLT5tYXhfY2hhbm5lbHMpKQogCQlyZXR1cm4gTlVMTDsKLSAgICAgICAgCisKIAlpZiAoKG1hcHBlZF9jaGFubmVsID0gaGRzcC0+Y2hhbm5lbF9tYXBbY2hhbm5lbF0pIDwgMCkKIAkJcmV0dXJuIE5VTEw7Ci0JCisKIAlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKIAkJcmV0dXJuIGhkc3AtPmNhcHR1cmVfYnVmZmVyICsgKG1hcHBlZF9jaGFubmVsICogSERTUF9DSEFOTkVMX0JVRkZFUl9CWVRFUyk7CiAJZWxzZQpAQCAtMzk2NSw3ICszOTg5LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKm90aGVyOwogCWludCBydW5uaW5nOwotCQorCiAJaWYgKGhkc3BfY2hlY2tfZm9yX2lvYm94IChoZHNwKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTQwNTksMTAgKzQwODMsMTAgQEAKIAkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKICNlbmRpZgogCS5yYXRlcyA9CQkoU05EUlZfUENNX1JBVEVfMzIwMDAgfAotCQkJCSBTTkRSVl9QQ01fUkFURV80NDEwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV82NDAwMCB8IAotCQkJCSBTTkRSVl9QQ01fUkFURV84ODIwMCB8IAorCQkJCSBTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV84ODIwMCB8CiAJCQkJIFNORFJWX1BDTV9SQVRFXzk2MDAwKSwKIAkucmF0ZV9taW4gPQkJMzIwMDAsCiAJLnJhdGVfbWF4ID0JCTk2MDAwLApAQCAtNDA4OCwxMCArNDExMiwxMCBAQAogCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAogI2VuZGlmCiAJLnJhdGVzID0JCShTTkRSVl9QQ01fUkFURV8zMjAwMCB8Ci0JCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgCisJCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV82NDAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKIAkJCQkgU05EUlZfUENNX1JBVEVfOTYwMDApLAogCS5yYXRlX21pbiA9CQkzMjAwMCwKIAkucmF0ZV9tYXggPQkJOTYwMDAsCkBAIC00MTcwLDcgKzQxOTQsNyBAQAogCQkJLm1heCA9IGhkc3AtPnFzX2luX2NoYW5uZWxzLAogCQkJLmludGVnZXIgPSAxLAogCQl9OwotCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmdCk7CQorCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmdCk7CiAJfSBlbHNlIGlmIChyLT5taW4gPiA0ODAwMCAmJiByLT5tYXggPD0gOTYwMDApIHsKIAkJc3RydWN0IHNuZF9pbnRlcnZhbCB0ID0gewogCQkJLm1pbiA9IGhkc3AtPmRzX2luX2NoYW5uZWxzLApAQCAtNDIwMSw3ICs0MjI1LDcgQEAKIAkJCS5tYXggPSBoZHNwLT5xc19vdXRfY2hhbm5lbHMsCiAJCQkuaW50ZWdlciA9IDEsCiAJCX07Ci0JCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsJCisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKIAl9IGVsc2UgaWYgKHItPm1pbiA+IDQ4MDAwICYmIHItPm1heCA8PSA5NjAwMCkgewogCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CiAJCQkubWluID0gaGRzcC0+ZHNfb3V0X2NoYW5uZWxzLApAQCAtNDMxOCw4ICs0MzQyLDggQEAKIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgewogCQlydW50aW1lLT5ody5jaGFubmVsc19taW4gPSBoZHNwLT5xc19vdXRfY2hhbm5lbHM7CiAJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IGhkc3AtPnNzX291dF9jaGFubmVsczsKLQl9CQotCQorCX0KKwogCXNuZF9wY21faHdfcnVsZV9hZGQocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAogCQkJICAgICBzbmRfaGRzcF9od19ydWxlX291dF9jaGFubmVscywgaGRzcCwKIAkJCSAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7CkBAIC00NDEzLDEzICs0NDM3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaGRzcF9od2RlcF9kdW1teV9vcChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JLyogd2UgaGF2ZSBub3RoaW5nIHRvIGluaXRpYWxpemUgYnV0IHRoZSBjYWxsIGlzIHJlcXVpcmVkICovCi0JcmV0dXJuIDA7Ci19Ci0KLQogLyogaGVscGVyIGZ1bmN0aW9ucyBmb3IgY29weWluZyBtZXRlciB2YWx1ZXMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNvcHlfdTMyX2xlKHZvaWQgX191c2VyICpkZXN0LCB2b2lkIF9faW9tZW0gKnNyYykKIHsKQEAgLTQ1MzYsNyArNDU1Myw3IEBACiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9wbGF5YmFja1Jtc0xldmVsICsgaSAqIDggKyA0LAogCQkJCWhkc3AtPmlvYmFzZSArIEhEU1BfcGxheWJhY2tSbXNMZXZlbCArIGkgKiA4KSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoY29weV91NjRfbGUoJnBlYWtfcm1zLT5pbnB1dF9ybXNbaV0sIAorCQlpZiAoY29weV91NjRfbGUoJnBlYWtfcm1zLT5pbnB1dF9ybXNbaV0sCiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9pbnB1dFJtc0xldmVsICsgaSAqIDggKyA0LAogCQkJCWhkc3AtPmlvYmFzZSArIEhEU1BfaW5wdXRSbXNMZXZlbCArIGkgKiA4KSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNDU0Niw3ICs0NTYzLDcgQEAKIAogc3RhdGljIGludCBzbmRfaGRzcF9od2RlcF9pb2N0bChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBoZHNwICpoZHNwID0gKHN0cnVjdCBoZHNwICopaHctPnByaXZhdGVfZGF0YTsJCisJc3RydWN0IGhkc3AgKmhkc3AgPSAoc3RydWN0IGhkc3AgKilody0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBlcnI7CiAKQEAgLTQ1ODAsNyArNDU5Nyw3IEBACiAJCXN0cnVjdCBoZHNwX2NvbmZpZ19pbmZvIGluZm87CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBpOwotCQkKKwogCQllcnIgPSBoZHNwX2NoZWNrX2Zvcl9pb2JveChoZHNwKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwpAQCAtNDYxNCw3ICs0NjMxLDcgQEAKIAkJCWluZm8uYWRfZ2FpbiA9ICh1bnNpZ25lZCBjaGFyKWhkc3BfYWRfZ2FpbihoZHNwKTsKIAkJCWluZm8ucGhvbmVfZ2FpbiA9ICh1bnNpZ25lZCBjaGFyKWhkc3BfcGhvbmVfZ2FpbihoZHNwKTsKIAkJCWluZm8ueGxyX2JyZWFrb3V0X2NhYmxlID0gKHVuc2lnbmVkIGNoYXIpaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCk7Ci0JCQorCiAJCX0KIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTY1MikKIAkJCWluZm8uYW5hbG9nX2V4dGVuc2lvbl9ib2FyZCA9ICh1bnNpZ25lZCBjaGFyKWhkc3BfYWViKGhkc3ApOwpAQCAtNDYyNSw3ICs0NjQyLDcgQEAKIAl9CiAJY2FzZSBTTkRSVl9IRFNQX0lPQ1RMX0dFVF85NjMyX0FFQjogewogCQlzdHJ1Y3QgaGRzcF85NjMyX2FlYiBoOTYzMl9hZWI7Ci0JCQorCiAJCWlmIChoZHNwLT5pb190eXBlICE9IEg5NjMyKSByZXR1cm4gLUVJTlZBTDsKIAkJaDk2MzJfYWViLmFlYmkgPSBoZHNwLT5zc19pbl9jaGFubmVscyAtIEg5NjMyX1NTX0NIQU5ORUxTOwogCQloOTYzMl9hZWIuYWVibyA9IGhkc3AtPnNzX291dF9jaGFubmVscyAtIEg5NjMyX1NTX0NIQU5ORUxTOwpAQCAtNDYzNiw3ICs0NjUzLDcgQEAKIAljYXNlIFNORFJWX0hEU1BfSU9DVExfR0VUX1ZFUlNJT046IHsKIAkJc3RydWN0IGhkc3BfdmVyc2lvbiBoZHNwX3ZlcnNpb247CiAJCWludCBlcnI7Ci0JCQorCiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAtRUlOVkFMOwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBVbmRlZmluZWQpIHsKIAkJCWlmICgoZXJyID0gaGRzcF9nZXRfaW9ib3hfdmVyc2lvbihoZHNwKSkgPCAwKQpAQCAtNDY1Miw3ICs0NjY5LDcgQEAKIAkJc3RydWN0IGhkc3BfZmlybXdhcmUgX191c2VyICpmaXJtd2FyZTsKIAkJdTMyIF9fdXNlciAqZmlybXdhcmVfZGF0YTsKIAkJaW50IGVycjsKLQkJCisKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIC1FSU5WQUw7CiAJCS8qIFNORFJWX0hEU1BfSU9DVExfR0VUX1ZFUlNJT04gbXVzdCBoYXZlIGJlZW4gY2FsbGVkICovCiAJCWlmIChoZHNwLT5pb190eXBlID09IFVuZGVmaW5lZCkgcmV0dXJuIC1FSU5WQUw7CkBAIC00NjY1LDI1ICs0NjgyLDI1IEBACiAKIAkJaWYgKGdldF91c2VyKGZpcm13YXJlX2RhdGEsICZmaXJtd2FyZS0+ZmlybXdhcmVfZGF0YSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCisKIAkJaWYgKGhkc3BfY2hlY2tfZm9yX2lvYm94IChoZHNwKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihoZHNwLT5maXJtd2FyZV9jYWNoZSwgZmlybXdhcmVfZGF0YSwgc2l6ZW9mKGhkc3AtPmZpcm13YXJlX2NhY2hlKSkgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwotCQkKKwogCQloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlQ2FjaGVkOwogCiAJCWlmICgoZXJyID0gc25kX2hkc3BfbG9hZF9maXJtd2FyZV9mcm9tX2NhY2hlKGhkc3ApKSA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQkKKwogCQlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpIHsKIAkJCWlmICgoZXJyID0gc25kX2hkc3BfZW5hYmxlX2lvKGhkc3ApKSA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCQotCQkJc25kX2hkc3BfaW5pdGlhbGl6ZV9jaGFubmVscyhoZHNwKTsJCQorCisJCQlzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKGhkc3ApOwogCQkJc25kX2hkc3BfaW5pdGlhbGl6ZV9taWRpX2ZsdXNoKGhkc3ApOwotCSAgICAKKwogCQkJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfYWxzYV9kZXZpY2VzKGhkc3AtPmNhcmQsIGhkc3ApKSA8IDApIHsKIAkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZXJyb3IgY3JlYXRpbmcgYWxzYSBkZXZpY2VzXG4iKTsKIAkJCQlyZXR1cm4gZXJyOwpAQCAtNDczMCwxOCArNDc0NywxNiBAQAogewogCXN0cnVjdCBzbmRfaHdkZXAgKmh3OwogCWludCBlcnI7Ci0JCisKIAlpZiAoKGVyciA9IHNuZF9od2RlcF9uZXcoY2FyZCwgIkhEU1AgaHdkZXAiLCAwLCAmaHcpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JCQorCiAJaGRzcC0+aHdkZXAgPSBodzsKIAlody0+cHJpdmF0ZV9kYXRhID0gaGRzcDsKIAlzdHJjcHkoaHctPm5hbWUsICJIRFNQIGh3ZGVwIGludGVyZmFjZSIpOwogCi0JaHctPm9wcy5vcGVuID0gc25kX2hkc3BfaHdkZXBfZHVtbXlfb3A7CiAJaHctPm9wcy5pb2N0bCA9IHNuZF9oZHNwX2h3ZGVwX2lvY3RsOwotCWh3LT5vcHMucmVsZWFzZSA9IHNuZF9oZHNwX2h3ZGVwX2R1bW15X29wOwotCQkKKwogCXJldHVybiAwOwogfQogCkBAIC00Nzc0LDI0ICs0Nzg5LDI0IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2VuYWJsZV9pbyAoc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaW50IGk7Ci0JCisKIAlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIDEwMCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IGVuYWJsZV9pbyBmaWZvX3dhaXQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCQorCiAJZm9yIChpID0gMDsgaSA8IGhkc3AtPm1heF9jaGFubmVsczsgKytpKSB7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfaW5wdXRFbmFibGUgKyAoNCAqIGkpLCAxKTsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9vdXRwdXRFbmFibGUgKyAoNCAqIGkpLCAxKTsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX2hkc3BfaW5pdGlhbGl6ZV9jaGFubmVscyhzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpbnQgc3RhdHVzLCBhZWJpX2NoYW5uZWxzLCBhZWJvX2NoYW5uZWxzOwotCQorCiAJc3dpdGNoIChoZHNwLT5pb190eXBlKSB7CiAJY2FzZSBEaWdpZmFjZToKIAkJaGRzcC0+Y2FyZF9uYW1lID0gIlJNRSBIYW1tZXJmYWxsIERTUCArIERpZ2lmYWNlIjsKQEAgLTQ4MDQsNyArNDgxOSw3IEBACiAJCWhkc3AtPnNzX2luX2NoYW5uZWxzID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzID0gSDk2NTJfU1NfQ0hBTk5FTFM7CiAJCWhkc3AtPmRzX2luX2NoYW5uZWxzID0gaGRzcC0+ZHNfb3V0X2NoYW5uZWxzID0gSDk2NTJfRFNfQ0hBTk5FTFM7CiAJCWJyZWFrOwotCQorCiAJY2FzZSBIOTYzMjoKIAkJc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwogCQkvKiBIRFNQX0FFQnggYml0cyBhcmUgbG93IHdoZW4gQUVCIGFyZSBjb25uZWN0ZWQgKi8KQEAgLTQ4MjQsNyArNDgzOSw3IEBACiAJCWhkc3AtPnNzX2luX2NoYW5uZWxzID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzID0gTVVMVElGQUNFX1NTX0NIQU5ORUxTOwogCQloZHNwLT5kc19pbl9jaGFubmVscyA9IGhkc3AtPmRzX291dF9jaGFubmVscyA9IE1VTFRJRkFDRV9EU19DSEFOTkVMUzsKIAkJYnJlYWs7Ci0JCQorCiAJZGVmYXVsdDoKICAJCS8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwogCQlicmVhazsKQEAgLTQ4NDAsMTIgKzQ4NTUsMTIgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfY3JlYXRlX2Fsc2FfZGV2aWNlcyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBoZHNwICpoZHNwKQogewogCWludCBlcnI7Ci0JCisKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9wY20oY2FyZCwgaGRzcCkpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogRXJyb3IgY3JlYXRpbmcgcGNtIGludGVyZmFjZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQotCQorCiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9taWRpKGNhcmQsIGhkc3AsIDApKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IEVycm9yIGNyZWF0aW5nIGZpcnN0IG1pZGkgaW50ZXJmYWNlXG4iKTsKQEAgLTQ4NzYsMTkgKzQ4OTEsMTkgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IEVycm9yIHNldHRpbmcgZGVmYXVsdCB2YWx1ZXNcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQkKKwogCWlmICghKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSkgewogCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSGFtbWVyZmFsbCBEU1AiKTsKLQkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQiLCBoZHNwLT5jYXJkX25hbWUsIAorCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwKIAkJCWhkc3AtPnBvcnQsIGhkc3AtPmlycSk7Ci0JICAgIAorCiAJCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiSGFtbWVyZmFsbC1EU1A6IGVycm9yIHJlZ2lzdGVyaW5nIGNhcmRcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQloZHNwLT5zdGF0ZSB8PSBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGU7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4OTksNyArNDkxNCw3IEBACiAJY29uc3QgY2hhciAqZndmaWxlOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IGVycjsKLQkJCisKIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKQogCQlyZXR1cm4gMDsKIAlpZiAoaGRzcC0+aW9fdHlwZSA9PSBVbmRlZmluZWQpIHsKQEAgLTQ5MDgsNyArNDkyMyw3IEBACiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCiAJCQlyZXR1cm4gMDsKIAl9Ci0JCisKIAkvKiBjYXV0aW9uOiBtYXggbGVuZ3RoIG9mIGZpcm13YXJlIGZpbGVuYW1lIGlzIDMwISAqLwogCXN3aXRjaCAoaGRzcC0+aW9fdHlwZSkgewogCWNhc2UgTXVsdGlmYWNlOgpAQCAtNDk0MiwxMiArNDk1NywxMiBAQAogCW1lbWNweShoZHNwLT5maXJtd2FyZV9jYWNoZSwgZnctPmRhdGEsIHNpemVvZihoZHNwLT5maXJtd2FyZV9jYWNoZSkpOwogCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQorCiAJaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUNhY2hlZDsKIAogCWlmICgoZXJyID0gc25kX2hkc3BfbG9hZF9maXJtd2FyZV9mcm9tX2NhY2hlKGhkc3ApKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JCQorCiAJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKSB7CiAJCWlmICgoZXJyID0gc25kX2hkc3BfZW5hYmxlX2lvKGhkc3ApKSA8IDApCiAJCQlyZXR1cm4gZXJyOwpAQCAtNDk5NCwxNCArNTAwOSwxNCBAQAogCWhkc3AtPm1heF9jaGFubmVscyA9IDI2OwogCiAJaGRzcC0+Y2FyZCA9IGNhcmQ7Ci0JCisKIAlzcGluX2xvY2tfaW5pdCgmaGRzcC0+bG9jayk7CiAKIAl0YXNrbGV0X2luaXQoJmhkc3AtPm1pZGlfdGFza2xldCwgaGRzcF9taWRpX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWhkc3ApOwotCQorCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGRzcC0+cGNpLCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZoZHNwLT5maXJtd2FyZV9yZXYpOwogCWhkc3AtPmZpcm13YXJlX3JldiAmPSAweGZmOwotCQorCiAJLyogRnJvbSBNYXJ0aW4gQmpvZXJuc2VuIDoKIAkgICAgIkl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBjYXJkJ3MgbGF0ZW5jeSB0aW1lciByZWdpc3RlciBpbgogCSAgICB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgaXMgc2V0IHRvIGEgdmFsdWUgbXVjaCBsYXJnZXIKQEAgLTUwMTAsNyArNTAyNSw3IEBACiAJICAgIHRvIGl0cyBtYXhpbXVtIDI1NSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHNvbWUgY29tcHV0ZXJzLiIKIAkqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShoZHNwLT5wY2ksIFBDSV9MQVRFTkNZX1RJTUVSLCAweEZGKTsKLQkKKwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJILURTUCIpOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJYaWxpbnggRlBHQSIpOwogCkBAIC01MDI0LDcgKzUwMzksNyBAQAogCX0gZWxzZSB7CiAJCWhkc3AtPmNhcmRfbmFtZSA9ICJSTUUgSERTUCA5NjMyIjsKIAkJaGRzcC0+bWF4X2NoYW5uZWxzID0gMTY7Ci0JCWlzXzk2MzIgPSAxOwkKKwkJaXNfOTYzMiA9IDE7CiAJfQogCiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCkBAIC01MDUzLDEyICs1MDY4LDEyIEBACiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2luaXRpYWxpemVfbWVtb3J5KGhkc3ApKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JCi0JaWYgKCFpc185NjUyICYmICFpc185NjMyKSB7Ci0JCS8qIHdlIHdhaXQgMiBzZWNvbmRzIHRvIGxldCBmcmVzaGx5IGluc2VydGVkIGNhcmRidXMgY2FyZHMgZG8gdGhlaXIgaGFyZHdhcmUgaW5pdCAqLwotCQlzc2xlZXAoMik7CiAKLQkJZXJyID0gaGRzcF9jaGVja19mb3JfaW9ib3goaGRzcCk7CisJaWYgKCFpc185NjUyICYmICFpc185NjMyKSB7CisJCS8qIHdlIHdhaXQgYSBtYXhpbXVtIG9mIDEwIHNlY29uZHMgdG8gbGV0IGZyZXNobHkKKwkJICogaW5zZXJ0ZWQgY2FyZGJ1cyBjYXJkcyBkbyB0aGVpciBoYXJkd2FyZSBpbml0ICovCisJCWVyciA9IGhkc3Bfd2FpdF9mb3JfaW9ib3goaGRzcCwgMTAwMCwgMTApOworCiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIApAQCAtNTA4MCwzNSArNTA5NSwzNSBAQAogCQkJCXJldHVybiBlcnI7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKLQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRmlybXdhcmUgYWxyZWFkeSBwcmVzZW50LCBpbml0aWFsaXppbmcgY2FyZC5cbiIpOwkgICAgCisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IEZpcm13YXJlIGFscmVhZHkgcHJlc2VudCwgaW5pdGlhbGl6aW5nIGNhcmQuXG4iKTsKIAkJCWlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpICYgSERTUF92ZXJzaW9uMSkKIAkJCQloZHNwLT5pb190eXBlID0gTXVsdGlmYWNlOwotCQkJZWxzZSAKKwkJCWVsc2UKIAkJCQloZHNwLT5pb190eXBlID0gRGlnaWZhY2U7CiAJCX0KIAl9Ci0JCisKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2VuYWJsZV9pbyhoZHNwKSkgIT0gMCkKIAkJcmV0dXJuIGVycjsKLQkKKwogCWlmIChpc185NjUyKQogCSAgICAgICAgaGRzcC0+aW9fdHlwZSA9IEg5NjUyOwotCQorCiAJaWYgKGlzXzk2MzIpCiAJCWhkc3AtPmlvX3R5cGUgPSBIOTYzMjsKIAogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX2h3ZGVwKGNhcmQsIGhkc3ApKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JCisKIAlzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKGhkc3ApOwogCXNuZF9oZHNwX2luaXRpYWxpemVfbWlkaV9mbHVzaChoZHNwKTsKIAotCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVMb2FkZWQ7CQorCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVMb2FkZWQ7CiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9hbHNhX2RldmljZXMoY2FyZCwgaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXJldHVybiAwOwkKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfaGRzcF9mcmVlKHN0cnVjdCBoZHNwICpoZHNwKQpAQCAtNTEyNCwxMyArNTEzOSwxMyBAQAogCQlmcmVlX2lycShoZHNwLT5pcnEsICh2b2lkICopaGRzcCk7CiAKIAlzbmRfaGRzcF9mcmVlX2J1ZmZlcnMoaGRzcCk7Ci0JCisKIAlpZiAoaGRzcC0+aW9iYXNlKQogCQlpb3VubWFwKGhkc3AtPmlvYmFzZSk7CiAKIAlpZiAoaGRzcC0+cG9ydCkKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhoZHNwLT5wY2kpOwotCQkKKwogCXBjaV9kaXNhYmxlX2RldmljZShoZHNwLT5wY2kpOwogCXJldHVybiAwOwogfQpAQCAtNTE1OCw4ICs1MTczLDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmICghKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgaGRzcCkpKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBoZHNwKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2hkc3BfY2FyZF9mcmVlOwpAQCAtNTE3Myw3ICs1MTkwLDcgQEAKIAl9CiAKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSGFtbWVyZmFsbCBEU1AiKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwgCisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQiLCBoZHNwLT5jYXJkX25hbWUsCiAJCWhkc3AtPnBvcnQsIGhkc3AtPmlycSk7CiAKIAlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCmluZGV4IDcxMjMxY2YuLmJhYzJkYzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwpAQCAtNDEwMCwxMyArNDEwMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2hkc3BtX2h3ZGVwX2R1bW15X29wKHN0cnVjdCBzbmRfaHdkZXAgKiBodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JLyogd2UgaGF2ZSBub3RoaW5nIHRvIGluaXRpYWxpemUgYnV0IHRoZSBjYWxsIGlzIHJlcXVpcmVkICovCi0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIGludCBzbmRfaGRzcG1faHdkZXBfaW9jdGwoc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC00MjEzLDkgKzQyMDYsNyBAQAogCWh3LT5wcml2YXRlX2RhdGEgPSBoZHNwbTsKIAlzdHJjcHkoaHctPm5hbWUsICJIRFNQTSBod2RlcCBpbnRlcmZhY2UiKTsKIAotCWh3LT5vcHMub3BlbiA9IHNuZF9oZHNwbV9od2RlcF9kdW1teV9vcDsKIAlody0+b3BzLmlvY3RsID0gc25kX2hkc3BtX2h3ZGVwX2lvY3RsOwotCWh3LT5vcHMucmVsZWFzZSA9IHNuZF9oZHNwbV9od2RlcF9kdW1teV9vcDsKIAogCXJldHVybiAwOwogfQpAQCAtNDUwMywxMCArNDQ5NCwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sCi0JCQkgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgaGRzcG0pKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLAorCQkJICAgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgaGRzcG0pLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAloZHNwbSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfaGRzcG1fY2FyZF9mcmVlOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCmluZGV4IDI1NzA5MDcuLmJjNTM5YWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKQEAgLTI1OTQsMTEgKzI1OTQsMTEgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9ybWU5NjUyKSk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfcm1lOTY1MiksICZjYXJkKTsKIAotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlybWU5NjUyID0gKHN0cnVjdCBzbmRfcm1lOTY1MiAqKSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3JtZTk2NTJfY2FyZF9mcmVlOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3NpczcwMTkuYyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKaW5kZXggZGYyMDA3ZS4uYmFmNmQ4ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3NpczcwMTkuYworKysgYi9zb3VuZC9wY2kvc2lzNzAxOS5jCkBAIC0xMzg3LDkgKzEzODcsOCBAQAogCWlmICghZW5hYmxlKQogCQlnb3RvIGVycm9yX291dDsKIAotCXJjID0gLUVOT01FTTsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqc2lzKSk7Ci0JaWYgKCFjYXJkKQorCXJjID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqc2lzKSwgJmNhcmQpOworCWlmIChyYyA8IDApCiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNpUzcwMTkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCmluZGV4IGNkNDA4YjguLmQ5ODkyMTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKKysrIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwpAQCAtMjczLDcgKzI3Myw4IEBACiAJb3V0bChjb3VudCwgc29uaWMtPmRtYWFfcG9ydCArIFNWX0RNQV9DT1VOVDApOwogCW91dGIoMHgxOCwgc29uaWMtPmRtYWFfcG9ydCArIFNWX0RNQV9NT0RFKTsKICNpZiAwCi0JcHJpbnRrKCJwcm9ncmFtIGRtYWE6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsIGFkZHIsIGlubChzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInByb2dyYW0gZG1hYTogYWRkciA9IDB4JXgsIHBhZGRyID0gMHgleFxuIiwKKwkgICAgICAgYWRkciwgaW5sKHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfQUREUjApKTsKICNlbmRpZgogfQogCkBAIC0yODgsNyArMjg5LDggQEAKIAlvdXRsKGNvdW50LCBzb25pYy0+ZG1hY19wb3J0ICsgU1ZfRE1BX0NPVU5UMCk7CiAJb3V0YigweDE0LCBzb25pYy0+ZG1hY19wb3J0ICsgU1ZfRE1BX01PREUpOwogI2lmIDAKLQlwcmludGsoInByb2dyYW0gZG1hYzogYWRkciA9IDB4JXgsIHBhZGRyID0gMHgleFxuIiwgYWRkciwgaW5sKHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfQUREUjApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicHJvZ3JhbSBkbWFjOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLAorCSAgICAgICBhZGRyLCBpbmwoc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9BRERSMCkpOwogI2VuZGlmCiB9CiAKQEAgLTM1NSw3MSArMzU3LDEwNCBAQAogI2lmIDAKIHN0YXRpYyB2b2lkIHNuZF9zb25pY3ZpYmVzX2RlYnVnKHN0cnVjdCBzb25pY3ZpYmVzICogc29uaWMpCiB7Ci0JcHJpbnRrKCJTViBSRUdTOiAgICAgICAgICBJTkRFWCA9IDB4JTAyeCAgIiwgaW5iKFNWX1JFRyhzb25pYywgSU5ERVgpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIlNWIFJFR1M6ICAgICAgICAgIElOREVYID0gMHglMDJ4ICAiLCBpbmIoU1ZfUkVHKHNvbmljLCBJTkRFWCkpKTsKIAlwcmludGsoIiAgICAgICAgICAgICAgICAgU1RBVFVTID0gMHglMDJ4XG4iLCBpbmIoU1ZfUkVHKHNvbmljLCBTVEFUVVMpKSk7Ci0JcHJpbnRrKCIgIDB4MDA6IGxlZnQgaW5wdXQgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDApKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDAwOiBsZWZ0IGlucHV0ICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAwKSk7CiAJcHJpbnRrKCIgIDB4MjA6IHN5bnRoIHJhdGUgbG93ICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjApKTsKLQlwcmludGsoIiAgMHgwMTogcmlnaHQgaW5wdXQgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDE6IHJpZ2h0IGlucHV0ICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDEpKTsKIAlwcmludGsoIiAgMHgyMTogc3ludGggcmF0ZSBoaWdoID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMSkpOwotCXByaW50aygiICAweDAyOiBsZWZ0IEFVWDEgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAyKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMjogbGVmdCBBVVgxICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMikpOwogCXByaW50aygiICAweDIyOiBBREMgY2xvY2sgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIyKSk7Ci0JcHJpbnRrKCIgIDB4MDM6IHJpZ2h0IEFVWDEgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDMpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDAzOiByaWdodCBBVVgxICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAzKSk7CiAJcHJpbnRrKCIgIDB4MjM6IEFEQyBhbHQgcmF0ZSAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjMpKTsKLQlwcmludGsoIiAgMHgwNDogbGVmdCBDRCAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDQ6IGxlZnQgQ0QgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDQpKTsKIAlwcmludGsoIiAgMHgyNDogQURDIHBsbCBNICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyNCkpOwotCXByaW50aygiICAweDA1OiByaWdodCBDRCAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA1KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNTogcmlnaHQgQ0QgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNSkpOwogCXByaW50aygiICAweDI1OiBBREMgcGxsIE4gICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI1KSk7Ci0JcHJpbnRrKCIgIDB4MDY6IGxlZnQgbGluZSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDYpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA2OiBsZWZ0IGxpbmUgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA2KSk7CiAJcHJpbnRrKCIgIDB4MjY6IFN5bnRoIHBsbCBNICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjYpKTsKLQlwcmludGsoIiAgMHgwNzogcmlnaHQgbGluZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDc6IHJpZ2h0IGxpbmUgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDcpKTsKIAlwcmludGsoIiAgMHgyNzogU3ludGggcGxsIE4gICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyNykpOwotCXByaW50aygiICAweDA4OiBNSUMgICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA4KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwODogTUlDICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOCkpOwogCXByaW50aygiICAweDI4OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI4KSk7Ci0JcHJpbnRrKCIgIDB4MDk6IEdhbWUgcG9ydCAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDkpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA5OiBHYW1lIHBvcnQgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA5KSk7CiAJcHJpbnRrKCIgIDB4Mjk6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjkpKTsKLQlwcmludGsoIiAgMHgwYTogbGVmdCBzeW50aCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGE6IGxlZnQgc3ludGggICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGEpKTsKIAlwcmludGsoIiAgMHgyYTogTVBVNDAxICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyYSkpOwotCXByaW50aygiICAweDBiOiByaWdodCBzeW50aCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBiKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwYjogcmlnaHQgc3ludGggICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYikpOwogCXByaW50aygiICAweDJiOiBkcml2ZSBjdHJsICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJiKSk7Ci0JcHJpbnRrKCIgIDB4MGM6IGxlZnQgQVVYMiAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGMpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBjOiBsZWZ0IEFVWDIgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBjKSk7CiAJcHJpbnRrKCIgIDB4MmM6IFNSUyBzcGFjZSAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmMpKTsKLQlwcmludGsoIiAgMHgwZDogcmlnaHQgQVVYMiAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGQ6IHJpZ2h0IEFVWDIgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGQpKTsKIAlwcmludGsoIiAgMHgyZDogU1JTIGNlbnRlciAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyZCkpOwotCXByaW50aygiICAweDBlOiBsZWZ0IGFuYWxvZyAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBlKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwZTogbGVmdCBhbmFsb2cgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZSkpOwogCXByaW50aygiICAweDJlOiB3YXZlIHNvdXJjZSAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJlKSk7Ci0JcHJpbnRrKCIgIDB4MGY6IHJpZ2h0IGFuYWxvZyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGYpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBmOiByaWdodCBhbmFsb2cgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBmKSk7CiAJcHJpbnRrKCIgIDB4MmY6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmYpKTsKLQlwcmludGsoIiAgMHgxMDogbGVmdCBQQ00gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTA6IGxlZnQgUENNICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTApKTsKIAlwcmludGsoIiAgMHgzMDogYW5hbG9nIHBvd2VyICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzMCkpOwotCXByaW50aygiICAweDExOiByaWdodCBQQ00gICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDExKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMTogcmlnaHQgUENNICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMSkpOwogCXByaW50aygiICAweDMxOiBhbmFsb2cgcG93ZXIgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMxKSk7Ci0JcHJpbnRrKCIgIDB4MTI6IERNQSBkYXRhIGZvcm1hdCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDEyOiBETUEgZGF0YSBmb3JtYXQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEyKSk7CiAJcHJpbnRrKCIgIDB4MzI6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzIpKTsKLQlwcmludGsoIiAgMHgxMzogUC9DIGVuYWJsZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTM6IFAvQyBlbmFibGUgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTMpKTsKIAlwcmludGsoIiAgMHgzMzogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzMykpOwotCXByaW50aygiICAweDE0OiBVL0QgYnV0dG9uICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxNDogVS9EIGJ1dHRvbiAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNCkpOwogCXByaW50aygiICAweDM0OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM0KSk7Ci0JcHJpbnRrKCIgIDB4MTU6IHJldmlzaW9uICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE1OiByZXZpc2lvbiAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE1KSk7CiAJcHJpbnRrKCIgIDB4MzU6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzUpKTsKLQlwcmludGsoIiAgMHgxNjogQURDIG91dHB1dCBjdHJsID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTY6IEFEQyBvdXRwdXQgY3RybCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTYpKTsKIAlwcmludGsoIiAgMHgzNjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNikpOwotCXByaW50aygiICAweDE3OiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE3KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxNzogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNykpOwogCXByaW50aygiICAweDM3OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM3KSk7Ci0JcHJpbnRrKCIgIDB4MTg6IERNQSBBIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTgpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE4OiBETUEgQSB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE4KSk7CiAJcHJpbnRrKCIgIDB4Mzg6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzgpKTsKLQlwcmludGsoIiAgMHgxOTogRE1BIEEgbG93ZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTk6IERNQSBBIGxvd2VyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTkpKTsKIAlwcmludGsoIiAgMHgzOTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzOSkpOwotCXByaW50aygiICAweDFhOiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFhKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxYTogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYSkpOwogCXByaW50aygiICAweDNhOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNhKSk7Ci0JcHJpbnRrKCIgIDB4MWI6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFiOiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFiKSk7CiAJcHJpbnRrKCIgIDB4M2I6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2IpKTsKLQlwcmludGsoIiAgMHgxYzogRE1BIEMgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWM6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWMpKTsKIAlwcmludGsoIiAgMHgzYzogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzYykpOwotCXByaW50aygiICAweDFkOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFkKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxZDogRE1BIEMgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZCkpOwogCXByaW50aygiICAweDNkOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNkKSk7Ci0JcHJpbnRrKCIgIDB4MWU6IFBDTSByYXRlIGxvdyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFlOiBQQ00gcmF0ZSBsb3cgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFlKSk7CiAJcHJpbnRrKCIgIDB4M2U6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2UpKTsKLQlwcmludGsoIiAgMHgxZjogUENNIHJhdGUgaGlnaCAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWY6IFBDTSByYXRlIGhpZ2ggICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWYpKTsKIAlwcmludGsoIiAgMHgzZjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzZikpOwogfQogCkBAIC00NzYsOCArNTExLDggQEAKIAkqcmVzX20gPSBtOwogCSpyZXNfbiA9IG47CiAjaWYgMAotCXByaW50aygibWV0cmljID0gJWksIHhtID0gJWksIHhuID0gJWlcbiIsIG1ldHJpYywgeG0sIHhuKTsKLQlwcmludGsoInBsbDogbSA9IDB4JXgsIHIgPSAweCV4LCBuID0gMHgleFxuIiwgcmVnLCBtLCByLCBuKTsKKwlwcmludGsoS0VSTl9ERUJVRyAibWV0cmljID0gJWksIHhtID0gJWksIHhuID0gJWlcbiIsIG1ldHJpYywgeG0sIHhuKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGxsOiBtID0gMHgleCwgciA9IDB4JXgsIG4gPSAweCV4XG4iLCByZWcsIG0sIHIsIG4pOwogI2VuZGlmCiB9CiAKQEAgLTE0MjMsOSArMTQ1OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KICAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDU7IGlkeCsrKSB7CiAJCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCBpZHgpID09IDAgfHwKIAkJICAgICEocGNpX3Jlc291cmNlX2ZsYWdzKHBjaSwgaWR4KSAmIElPUkVTT1VSQ0VfSU8pKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKaW5kZXggZDk0YjE2Zi4uMjFjZWY5NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwpAQCAtODksOSArODksOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX3RyaWRlbnRfY3JlYXRlKGNhcmQsIHBjaSwKIAkJCQkgICAgICBwY21fY2hhbm5lbHNbZGV2XSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKaW5kZXggYzYxMmI0My4uYTlkYTljMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKQEAgLTY4LDQwICs2OCw0MCBAQAogewogCXVuc2lnbmVkIGludCB2YWwsIHRtcDsKIAotCXByaW50aygiVHJpZGVudCB2b2ljZSAlaTpcbiIsIHZvaWNlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVHJpZGVudCB2b2ljZSAlaTpcbiIsIHZvaWNlKTsKIAlvdXRiKHZvaWNlLCBUUklEX1JFRyh0cmlkZW50LCBUNERfTEZPX0dDX0NJUikpOwogCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9MQkEpKTsKLQlwcmludGsoIkxCQTogMHgleFxuIiwgdmFsKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiTEJBOiAweCV4XG4iLCB2YWwpOwogCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMpKTsKLQlwcmludGsoIkdWU2VsOiAlaVxuIiwgdmFsID4+IDMxKTsKLQlwcmludGsoIlBhbjogMHgleFxuIiwgKHZhbCA+PiAyNCkgJiAweDdmKTsKLQlwcmludGsoIlZvbDogMHgleFxuIiwgKHZhbCA+PiAxNikgJiAweGZmKTsKLQlwcmludGsoIkNUUkw6IDB4JXhcbiIsICh2YWwgPj4gMTIpICYgMHgwZik7Ci0JcHJpbnRrKCJFQzogMHgleFxuIiwgdmFsICYgMHgwZmZmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiR1ZTZWw6ICVpXG4iLCB2YWwgPj4gMzEpOworCXByaW50ayhLRVJOX0RFQlVHICJQYW46IDB4JXhcbiIsICh2YWwgPj4gMjQpICYgMHg3Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZvbDogMHgleFxuIiwgKHZhbCA+PiAxNikgJiAweGZmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiQ1RSTDogMHgleFxuIiwgKHZhbCA+PiAxMikgJiAweDBmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiRUM6IDB4JXhcbiIsIHZhbCAmIDB4MGZmZik7CiAJaWYgKHRyaWRlbnQtPmRldmljZSAhPSBUUklERU5UX0RFVklDRV9JRF9OWCkgewogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfRFhfQ1NPX0FMUEhBX0ZNUykpOwotCQlwcmludGsoIkNTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKIAkJcHJpbnRrKCJBbHBoYTogMHgleFxuIiwgKHZhbCA+PiA0KSAmIDB4MGZmZik7Ci0JCXByaW50aygiRk1TOiAweCV4XG4iLCB2YWwgJiAweDBmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZNUzogMHgleFxuIiwgdmFsICYgMHgwZik7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9EWF9FU09fREVMVEEpKTsKLQkJcHJpbnRrKCJFU086IDB4JXhcbiIsIHZhbCA+PiAxNik7Ci0JCXByaW50aygiRGVsdGE6IDB4JXhcbiIsIHZhbCAmIDB4ZmZmZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJFU086IDB4JXhcbiIsIHZhbCA+PiAxNik7CisJCXByaW50ayhLRVJOX0RFQlVHICJEZWx0YTogMHgleFxuIiwgdmFsICYgMHhmZmZmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0RYX0ZNQ19SVk9MX0NWT0wpKTsKIAl9IGVsc2UgewkJLy8gVFJJREVOVF9ERVZJQ0VfSURfTlgKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX05YX0RFTFRBX0NTTykpOwogCQl0bXAgPSAodmFsID4+IDI0KSAmIDB4ZmY7Ci0JCXByaW50aygiQ1NPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNTTzogMHgleFxuIiwgdmFsICYgMHgwMGZmZmZmZik7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9OWF9ERUxUQV9FU08pKTsKIAkJdG1wIHw9ICh2YWwgPj4gMTYpICYgMHhmZjAwOwotCQlwcmludGsoIkRlbHRhOiAweCV4XG4iLCB0bXApOwotCQlwcmludGsoIkVTTzogMHgleFxuIiwgdmFsICYgMHgwMGZmZmZmZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJEZWx0YTogMHgleFxuIiwgdG1wKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkVTTzogMHgleFxuIiwgdmFsICYgMHgwMGZmZmZmZik7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9OWF9BTFBIQV9GTVNfRk1DX1JWT0xfQ1ZPTCkpOwotCQlwcmludGsoIkFscGhhOiAweCV4XG4iLCB2YWwgPj4gMjApOwotCQlwcmludGsoIkZNUzogMHgleFxuIiwgKHZhbCA+PiAxNikgJiAweDBmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFscGhhOiAweCV4XG4iLCB2YWwgPj4gMjApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRk1TOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4MGYpOwogCX0KLQlwcmludGsoIkZNQzogMHgleFxuIiwgKHZhbCA+PiAxNCkgJiAzKTsKLQlwcmludGsoIlJWb2w6IDB4JXhcbiIsICh2YWwgPj4gNykgJiAweDdmKTsKLQlwcmludGsoIkNWb2w6IDB4JXhcbiIsIHZhbCAmIDB4N2YpOworCXByaW50ayhLRVJOX0RFQlVHICJGTUM6IDB4JXhcbiIsICh2YWwgPj4gMTQpICYgMyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlJWb2w6IDB4JXhcbiIsICh2YWwgPj4gNykgJiAweDdmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiQ1ZvbDogMHgleFxuIiwgdmFsICYgMHg3Zik7CiB9CiAjZW5kaWYKIApAQCAtNDk2LDEyICs0OTYsMTcgQEAKIAlvdXRsKHJlZ3NbNF0sIFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTYpKTsKIAogI2lmIDAKLQlwcmludGsoIndyaXR0ZW4gJWkgY2hhbm5lbDpcbiIsIHZvaWNlLT5udW1iZXIpOwotCXByaW50aygiICByZWdzWzBdID0gMHgleC8weCV4XG4iLCByZWdzWzBdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAwKSkpOwotCXByaW50aygiICByZWdzWzFdID0gMHgleC8weCV4XG4iLCByZWdzWzFdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyA0KSkpOwotCXByaW50aygiICByZWdzWzJdID0gMHgleC8weCV4XG4iLCByZWdzWzJdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyA4KSkpOwotCXByaW50aygiICByZWdzWzNdID0gMHgleC8weCV4XG4iLCByZWdzWzNdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxMikpKTsKLQlwcmludGsoIiAgcmVnc1s0XSA9IDB4JXgvMHgleFxuIiwgcmVnc1s0XSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTYpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIndyaXR0ZW4gJWkgY2hhbm5lbDpcbiIsIHZvaWNlLT5udW1iZXIpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbMF0gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbMF0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDApKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1sxXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1sxXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgNCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzJdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzJdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyA4KSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbM10gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbM10sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDEyKSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbNF0gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbNF0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDE2KSkpOwogI2VuZGlmCiB9CiAKQEAgLTU4Myw3ICs1ODgsNyBAQAogCQlvdXRiKHZvaWNlLT5Wb2wgPj4gMiwgVFJJRF9SRUcodHJpZGVudCwgQ0hfR1ZTRUxfUEFOX1ZPTF9DVFJMX0VDICsgMikpOwogCQlicmVhazsKIAljYXNlIFRSSURFTlRfREVWSUNFX0lEX1NJNzAxODoKLQkJLy8gcHJpbnRrKCJ2b2ljZS0+Vm9sID0gMHgleFxuIiwgdm9pY2UtPlZvbCk7CisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJ2b2ljZS0+Vm9sID0gMHgleFxuIiwgdm9pY2UtPlZvbCk7ICovCiAJCW91dHcoKHZvaWNlLT5DVFJMIDw8IDEyKSB8IHZvaWNlLT5Wb2wsCiAJCSAgICAgVFJJRF9SRUcodHJpZGVudCwgQ0hfR1ZTRUxfUEFOX1ZPTF9DVFJMX0VDKSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggMWFhZmU5NS4uODA5YjIzMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC00NjYsNyArNDY2LDEwIEBACiAJCQkJCWZsYWcgPSBWSUFfVEJMX0JJVF9GTEFHOyAvKiBwZXJpb2QgYm91bmRhcnkgKi8KIAkJCX0gZWxzZQogCQkJCWZsYWcgPSAwOyAvKiBwZXJpb2QgY29udGludWVzIHRvIHRoZSBuZXh0ICovCi0JCQkvLyBwcmludGsoInZpYTogdGJsICVkOiBhdCAlZCAgc2l6ZSAlZCAocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkICIKKwkJCSAgICAgICAiKHJlc3QgJWQpXG4iLCBpZHgsIG9mcywgciwgcmVzdCk7CisJCQkqLwogCQkJKCh1MzIgKilkZXYtPnRhYmxlLmFyZWEpWyhpZHg8PDEpICsgMV0gPSBjcHVfdG9fbGUzMihyIHwgZmxhZyk7CiAJCQlkZXYtPmlkeF90YWJsZVtpZHhdLm9mZnNldCA9IG9mczsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0uc2l6ZSA9IHI7CkBAIC0yMzYwLDE0ICsyMzYzLDE0IEBACiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4MDk5NiwgIkVTQyBNb2JvIiwgVklBX0RYU180OEspLAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDBhODEsICJFQ1MgSzdWVEEzIHY4LjAiLCBWSUFfRFhTX05PX1ZSQSksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4MGE4NSwgIkVDUyBMN1ZNTTIiLCBWSUFfRFhTX05PX1ZSQSksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDAsICJFU0MgSzgiLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDE5LCAiRVNDIEs4IiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweGFhMDEsICJFU0MgSzhUODkwLUEiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDAzMywgIkFjZXIgSW5zcGlyZSAxMzUzTE0iLCBWSUFfRFhTX05PX1ZSQSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA0NiwgIkFjZXIgQXNwaXJlIDE1MjQgV0xNaSIsIFZJQV9EWFNfU1JDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMCwgIkFTVVMgQTcvQTgiLCBWSUFfRFhTX05PX1ZSQSksCi0JU05EX1BDSV9RVUlSSygweDEwNzEsIDAsICJEaXZlcnNlIE5vdGVib29rIiwgVklBX0RYU19OT19WUkEpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTA0MywgIkFTVVMgQTcvQTgiLCBWSUFfRFhTX05PX1ZSQSksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDcxLCAiRGl2ZXJzZSBOb3RlYm9vayIsIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxMThlLCAiRlNDIExhcHRvcCIsIFZJQV9EWFNfRU5BQkxFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTEwNiwgMCwgIkFTUm9jayIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDExMDYsICJBU1JvY2siLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEyOTcsIDB4YTIzMSwgIlNodXR0bGUgQUszMXYyIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxMjk3LCAweGEyMzIsICJTaHV0dGxlIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxMjk3LCAweGMxNjAsICJTaHV0dGxlIFNrNDFHIiwgVklBX0RYU19TUkMpLApAQCAtMjM3NSw3ICsyMzc4LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgzODAwLCAiTVNJIEtUMjY2IiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDcxMjAsICJNU0kgS1Q0ViIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHg3MTQyLCAiTVNJIEs4TU0tViIsIFZJQV9EWFNfRU5BQkxFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMCwgIk1TSSBNb2JvIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTQ2MiwgIk1TSSBNb2JvIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDE0MDEsICJBQklUIEtENygtUkFJRCkiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTQxMSwgIkFCSVQgVkEtMjAiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTQxMywgIkFCSVQgS1Y4IFBybyIsIFZJQV9EWFNfRU5BQkxFKSwKQEAgLTIzODksMTEgKzIzOTIsMTEgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTYxZiwgMHgyMDMyLCAibTY4MHggbWFjaGluZXMiLCBWSUFfRFhTXzQ4SyksCiAJU05EX1BDSV9RVUlSSygweDE2MzEsIDB4ZTAwNCwgIlBCIEVhc3lOb3RlIDMxNzQiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE2OTUsIDB4MzAwNSwgIkVQb1ggRVAtOEs5QSIsIFZJQV9EWFNfRU5BQkxFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTY5NSwgMCwgIkVQb1ggbW9ibyIsIFZJQV9EWFNfU1JDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTZmMywgMCwgIkpldHdheSBLOCIsIFZJQV9EWFNfU1JDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTczNCwgMCwgIkZTQyBMYXB0b3AiLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNjk1LCAiRVBvWCBtb2JvIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTZmMywgIkpldHdheSBLOCIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3MzQsICJGU0MgTGFwdG9wIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxODQ5LCAweDMwNTksICJBU1JvY2sgSzdWTTIiLCBWSUFfRFhTX05PX1ZSQSksCi0JU05EX1BDSV9RVUlSSygweDE4NDksIDAsICJBU1JvY2sgbW9ibyIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE4NDksICJBU1JvY2sgbW9ibyIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTkxOSwgMHgyMDBhLCAiU29sdGVrIFNMLUs4IiwgIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4NDAwNSwgMHg0NzEwLCAiTVNJIEs3VDI2NiIsIFZJQV9EWFNfU1JDKSwKIAl7IH0gLyogdGVybWluYXRvciAqLwpAQCAtMjQzMyw5ICsyNDM2LDkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2FyZF90eXBlID0gcGNpX2lkLT5kcml2ZXJfZGF0YTsKIAlzd2l0Y2ggKGNhcmRfdHlwZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKaW5kZXggNWJkNzlkMi4uMGQ1NGUzNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0zMjgsNyArMzI4LDEwIEBACiAJCQkJCWZsYWcgPSBWSUFfVEJMX0JJVF9GTEFHOyAvKiBwZXJpb2QgYm91bmRhcnkgKi8KIAkJCX0gZWxzZQogCQkJCWZsYWcgPSAwOyAvKiBwZXJpb2QgY29udGludWVzIHRvIHRoZSBuZXh0ICovCi0JCQkvLyBwcmludGsoInZpYTogdGJsICVkOiBhdCAlZCAgc2l6ZSAlZCAocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkICIKKwkJCSAgICAgICAiKHJlc3QgJWQpXG4iLCBpZHgsIG9mcywgciwgcmVzdCk7CisJCQkqLwogCQkJKCh1MzIgKilkZXYtPnRhYmxlLmFyZWEpWyhpZHg8PDEpICsgMV0gPSBjcHVfdG9fbGUzMihyIHwgZmxhZyk7CiAJCQlkZXYtPmlkeF90YWJsZVtpZHhdLm9mZnNldCA9IG9mczsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0uc2l6ZSA9IHI7CkBAIC0xMTY3LDkgKzExNzAsOSBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOwogCXN3aXRjaCAoY2FyZF90eXBlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCmluZGV4IGFjYzM1MmYuLmZjOTEzNmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCisrKyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jCkBAIC0yMDQsOSArMjA0LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKChpbnQpcGNpX2lkLT5kcml2ZXJfZGF0YSkgewogCWNhc2UgVlhfUENJX1ZYMjIyX09MRDoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYwppbmRleCA3ZTg3ZjM5Li5jMGVmZTQ0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCkBAIC0xMDcsNyArMTA3LDkgQEAKIHN0YXRpYyB2b2lkIHZ4Ml9vdXRiKHN0cnVjdCB2eF9jb3JlICpjaGlwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbCkKIHsKIAlvdXRiKHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOwotCS8vcHJpbnRrKCJvdXRiOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAib3V0YjogJXggLT4gJXhcbiIsIHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOworCSovCiB9CiAKIC8qKgpAQCAtMTI2LDcgKzEyOCw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHZ4Ml9vdXRsKHN0cnVjdCB2eF9jb3JlICpjaGlwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgdmFsKQogewotCS8vIHByaW50aygib3V0bDogJXggLT4gJXhcbiIsIHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIm91dGw6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkqLwogCW91dGwodmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCmluZGV4IDI2MzFhNTUuLjRhZjY2NjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwpAQCAtMTg3LDkgKzE4Nyw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoIChwY2lfaWQtPmRldmljZSkgewogCWNhc2UgMHgwMDA0OiBzdHIgPSAiWU1GNzI0IjsgIG1vZGVsID0gIkRTLTEiOyBicmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwppbmRleCA5MGQwZDYyLi4yZjA5MjUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCkBAIC0zMTgsNyArMzE4LDEyIEBACiAJCXlwY20tPnBlcmlvZF9wb3MgKz0gZGVsdGE7CiAJCXlwY20tPmxhc3RfcG9zID0gcG9zOwogCQlpZiAoeXBjbS0+cGVyaW9kX3BvcyA+PSB5cGNtLT5wZXJpb2Rfc2l6ZSkgewotCQkJLy8gcHJpbnRrKCJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsIGNoaXAtPmFjdGl2ZV9iYW5rLCB2b2ljZS0+YmFua1tjaGlwLT5hY3RpdmVfYmFua10uc3RhcnQpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImRvbmUgLSBhY3RpdmVfYmFuayA9IDB4JXgsIHN0YXJ0ID0gMHgleFxuIiwKKwkJCSAgICAgICBjaGlwLT5hY3RpdmVfYmFuaywKKwkJCSAgICAgICB2b2ljZS0+YmFua1tjaGlwLT5hY3RpdmVfYmFua10uc3RhcnQpOworCQkJKi8KIAkJCXlwY20tPnBlcmlvZF9wb3MgJT0geXBjbS0+cGVyaW9kX3NpemU7CiAJCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZCh5cGNtLT5zdWJzdHJlYW0pOwpAQCAtMzY2LDcgKzM3MSwxMiBAQAogCQl5cGNtLT5sYXN0X3BvcyA9IHBvczsKIAkJaWYgKHlwY20tPnBlcmlvZF9wb3MgPj0geXBjbS0+cGVyaW9kX3NpemUpIHsKIAkJCXlwY20tPnBlcmlvZF9wb3MgJT0geXBjbS0+cGVyaW9kX3NpemU7Ci0JCQkvLyBwcmludGsoImRvbmUgLSBhY3RpdmVfYmFuayA9IDB4JXgsIHN0YXJ0ID0gMHgleFxuIiwgY2hpcC0+YWN0aXZlX2JhbmssIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLAorCQkJICAgICAgIGNoaXAtPmFjdGl2ZV9iYW5rLAorCQkJICAgICAgIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkqLwogCQkJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAkJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKaW5kZXggODE5YWFhYS4uN2RlYTc0YiAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCkBAIC05MSw3ICs5MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3BkYWNmX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWludCBpOworCWludCBpLCBlcnI7CiAJc3RydWN0IHNuZF9wZGFjZiAqcGRhY2Y7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewpAQCAtMTEyLDIwICsxMTIsMjMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7IC8qIGRpc2FibGVkIGV4cGxpY2l0bHkgKi8KIAogCS8qIG9rLCBjcmVhdGUgYSBjYXJkIGluc3RhbmNlICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpXSwgaWRbaV0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwZGFjZjogY2Fubm90IGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlwZGFjZiA9IHNuZF9wZGFjZl9jcmVhdGUoY2FyZCk7Ci0JaWYgKCEgcGRhY2YpCi0JCXJldHVybiAtRUlPOworCWlmICghcGRhY2YpIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCi0JaWYgKHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgcGRhY2YsICZvcHMpIDwgMCkgeworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgcGRhY2YsICZvcHMpOworCWlmIChlcnIgPCAwKSB7CiAJCWtmcmVlKHBkYWNmKTsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBlcnI7CiAJfQogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMKaW5kZXggZGZhNDBiMC4uNWQyYWZhMCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYwpAQCAtODIsMTQgKzgyLDIxIEBACiAjaWYgMAogdm9pZCBwZGFjZl9kdW1wKHN0cnVjdCBzbmRfcGRhY2YgKmNoaXApCiB7Ci0JcHJpbnRrKCJQREFVRElPQ0YgRFVNUCAoMHglbHgpOlxuIiwgY2hpcC0+cG9ydCk7Ci0JcHJpbnRrKCJXUEQgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19XRFApKTsKLQlwcmludGsoIlJEUCAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1JEUCkpOwotCXByaW50aygiVENSICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfVENSKSk7Ci0JcHJpbnRrKCJTQ1IgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19TQ1IpKTsKLQlwcmludGsoIklTUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0lTUikpOwotCXByaW50aygiSUVSICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSUVSKSk7Ci0JcHJpbnRrKCJBS19JRlIgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19BS19JRlIpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUERBVURJT0NGIERVTVAgKDB4JWx4KTpcbiIsIGNoaXAtPnBvcnQpOworCXByaW50ayhLRVJOX0RFQlVHICJXUEQgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19XRFApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUkRQICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfUkRQKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlRDUiAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1RDUikpOworCXByaW50ayhLRVJOX0RFQlVHICJTQ1IgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19TQ1IpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSVNSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSVNSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIklFUiAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0lFUikpOworCXByaW50ayhLRVJOX0RFQlVHICJBS19JRlIgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19BS19JRlIpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9pcnEuYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2lycS5jCmluZGV4IGVhOTAzYzguLmRjZDMyMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2lycS5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2lycS5jCkBAIC0yNjksNyArMjY5LDcgQEAKIAogCXJkcCA9IGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19SRFApOwogCXdkcCA9IGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19XRFApOwotCS8vIHByaW50aygiVEFTS0xFVDogcmRwID0gJXgsIHdkcCA9ICV4XG4iLCByZHAsIHdkcCk7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgIlRBU0tMRVQ6IHJkcCA9ICV4LCB3ZHAgPSAleFxuIiwgcmRwLCB3ZHApOyAqLwogCXNpemUgPSB3ZHAgLSByZHA7CiAJaWYgKHNpemUgPCAwKQogCQlzaXplICs9IDB4MTAwMDA7CkBAIC0zMjEsNSArMzIxLDUgQEAKIAkJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7Ci0JLy8gcHJpbnRrKCJUQVNLTEVUOiBlbmRcbiIpOworCS8qIHByaW50ayhLRVJOX0RFQlVHICJUQVNLTEVUOiBlbmRcbiIpOyAqLwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwppbmRleCA3MDY2MDJhLi43NDQ1Y2M4IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwpAQCAtMTMwLDIzICsxMzAsMjYgQEAKIC8qCiAgKiBjcmVhdGUgdnhwb2NrZXQgaW5zdGFuY2UKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfdnhwb2NrZXQgKnNuZF92eHBvY2tldF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgaWJsLAotCQkJCQkgICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQorc3RhdGljIGludCBzbmRfdnhwb2NrZXRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGlibCwKKwkJCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywKKwkJCSAgICBzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICoqY2hpcF9yZXQpCiB7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXA7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwOwogCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewogCQkuZGV2X2ZyZWUgPQlzbmRfdnhwb2NrZXRfZGV2X2ZyZWUsCiAJfTsKKwlpbnQgZXJyOwogCiAJY2hpcCA9IHNuZF92eF9jcmVhdGUoY2FyZCwgJnZ4cG9ja2V0X2h3LCAmc25kX3Z4cG9ja2V0X29wcywKIAkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfdnhwb2NrZXQpIC0gc2l6ZW9mKHN0cnVjdCB2eF9jb3JlKSk7Ci0JaWYgKCEgY2hpcCkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKCFjaGlwKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpIDwgMCkgeworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CisJaWYgKGVyciA8IDApIHsKIAkJa2ZyZWUoY2hpcCk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZXJyOwogCX0KIAljaGlwLT5pYmwuc2l6ZSA9IGlibDsKIApAQCAtMTY5LDcgKzE3Miw4IEBACiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CiAJbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKLQlyZXR1cm4gdnhwOworCSpjaGlwX3JldCA9IHZ4cDsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0yOTIsNyArMjk2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwOwotCWludCBpOworCWludCBpLCBlcnI7CiAKIAkvKiBmaW5kIGFuIGVtcHR5IHNsb3QgZnJvbSB0aGUgY2FyZCBsaXN0ICovCiAJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKQEAgLTMwNywxNiArMzExLDE2IEBACiAJCXJldHVybiAtRU5PREVWOyAvKiBkaXNhYmxlZCBleHBsaWNpdGx5ICovCiAKIAkvKiBvaywgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpXSwgaWRbaV0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidnhwb2NrZXQ6IGNhbm5vdCBjcmVhdGUgYSBjYXJkIGluc3RhbmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCi0JdnhwID0gc25kX3Z4cG9ja2V0X25ldyhjYXJkLCBpYmxbaV0sIHBfZGV2KTsKLQlpZiAoISB2eHApIHsKKwllcnIgPSBzbmRfdnhwb2NrZXRfbmV3KGNhcmQsIGlibFtpXSwgcF9kZXYsICZ2eHApOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZXJyOwogCX0KIAljYXJkLT5wcml2YXRlX2RhdGEgPSB2eHA7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9LY29uZmlnIGIvc291bmQvcHBjL0tjb25maWcKaW5kZXggNzc3ZGUyYi4uYmQyMzM4YSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL0tjb25maWcKKysrIGIvc291bmQvcHBjL0tjb25maWcKQEAgLTEzLDYgKzEzLDcgQEAKIAl0cmlzdGF0ZSAiUG93ZXJNYWMgKEFXQUNTLCBEQUNBLCBCdXJndW5keSwgVHVtYmxlciwgS2V5d2VzdCkiCiAJZGVwZW5kcyBvbiBJMkMgJiYgSU5QVVQgJiYgUFBDX1BNQUMKIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfVk1BU1RFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgaW50ZWdyYXRlZCBzb3VuZCBkZXZpY2UuCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9hd2Fjcy5jIGIvc291bmQvcHBjL2F3YWNzLmMKaW5kZXggN2JkMzNlNi4uODBkZjliMSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2F3YWNzLmMKKysrIGIvc291bmQvcHBjL2F3YWNzLmMKQEAgLTYwOCw5ICs2MDgsMTIgQEAKIAlBV0FDU19TV0lUQ0goIkNEIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0xJTkUsIDApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19pbWFjW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfbG9bXSBfX2luaXRkYXRhID0gewogCUFXQUNTX1ZPTFVNRSgiTGluZSBvdXQgUGxheWJhY2sgVm9sdW1lIiwgMiwgNiwgMSksCi0JQVdBQ1NfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgNSwgNiwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWNbXSBfX2luaXRkYXRhID0geworCUFXQUNTX1ZPTFVNRSgiUGxheS10aHJvdWdoIFBsYXliYWNrIFZvbHVtZSIsIDUsIDYsIDEpLAogCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfQ0QsIDApLAogfTsKIApAQCAtNjI3LDYgKzYzMCwxMCBAQAogCUFXQUNTX1NXSVRDSCgiTGluZSBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9NSUMsIDApLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjNTUwMFtdIF9faW5pdGRhdGEgPSB7CisJQVdBQ1NfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMiwgNiwgMSksCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWNbXSBfX2luaXRkYXRhID0gewogCUFXQUNTX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDIsIDYsIDEpLAogCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfQ0QsIDApLApAQCAtNjQ1LDEyICs2NTIsMTkgQEAKIAlBV0FDU19TV0lUQ0goIk1pYyBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9MSU5FLCAwKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taXhlcnMyX3BtYWM1NTAwW10gX19pbml0ZGF0YSA9IHsKKwlBV0FDU19TV0lUQ0goIkNEIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0NELCAwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3cgX19pbml0ZGF0YSA9CiBBV0FDU19TV0lUQ0goIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAxLCBTSElGVF9IRE1VVEUsIDEpOwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3X2ltYWMgX19pbml0ZGF0YSA9CiBBV0FDU19TV0lUQ0goIkxpbmUgb3V0IFBsYXliYWNrIFN3aXRjaCIsIDEsIFNISUZUX0hETVVURSwgMSk7CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfcG1hYzU1MDAgX19pbml0ZGF0YSA9CitBV0FDU19TV0lUQ0goIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAxLCBTSElGVF9IRE1VVEUsIDEpOworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWljX2Jvb3N0W10gX19pbml0ZGF0YSA9IHsKIAlBV0FDU19TV0lUQ0goIk1pYyBCb29zdCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX0dBSU5MSU5FLCAwKSwKIH07CkBAIC03NjYsMTIgKzc4MCwxNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi0jZGVmaW5lIElTX1BNNzUwMCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDc1MDAiKSkKKyNkZWZpbmUgSVNfUE03NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsNzUwMCIpIFwKKwkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDg1MDAiKSBcCisJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw5NTAwIikpCisjZGVmaW5lIElTX1BNNTUwMCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLGU0MTEiKSkKICNkZWZpbmUgSVNfQkVJR0UgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxHb3NzYW1lciIpKQogI2RlZmluZSBJU19JTUFDMSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMSIpKQogI2RlZmluZSBJU19JTUFDMiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMiIpIFwKIAkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMSIpKQogI2RlZmluZSBJU19HNEFHUCAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsMSIpKQorI2RlZmluZSBJU19MT01CQVJEIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQogCiBzdGF0aWMgaW50IGltYWMxLCBpbWFjMjsKIApAQCAtODU4LDEwICs4NzYsMTQgQEAKIHNuZF9wbWFjX2F3YWNzX2luaXQoc3RydWN0IHNuZF9wbWFjICpjaGlwKQogewogCWludCBwbTc1MDAgPSBJU19QTTc1MDA7CisJaW50IHBtNTUwMCA9IElTX1BNNTUwMDsKIAlpbnQgYmVpZ2UgPSBJU19CRUlHRTsKIAlpbnQgZzRhZ3AgPSBJU19HNEFHUDsKKwlpbnQgbG9tYmFyZCA9IElTX0xPTUJBUkQ7CiAJaW50IGltYWM7CiAJaW50IGVyciwgdm9sOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnZtYXN0ZXJfc3csICp2bWFzdGVyX3ZvbDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXJfdm9sLCAqc3BlYWtlcl92b2w7CiAKIAlpbWFjMSA9IElTX0lNQUMxOwogCWltYWMyID0gSVNfSU1BQzI7CkBAIC05MTUsNyArOTM3LDcgQEAKIAkJLyogc2V0IGhlYWRwaG9uZS1qYWNrIGRldGVjdGlvbiBiaXQgKi8KIAkJc3dpdGNoIChjaGlwLT5tb2RlbCkgewogCQljYXNlIFBNQUNfQVdBQ1M6Ci0JCQljaGlwLT5ocF9zdGF0X21hc2sgPSBwbTc1MDAgPyBNQVNLX0hEUENPTk4KKwkJCWNoaXAtPmhwX3N0YXRfbWFzayA9IHBtNzUwMCB8fCBwbTU1MDAgPyBNQVNLX0hEUENPTk4KIAkJCQk6IE1BU0tfTE9DT05OOwogCQkJYnJlYWs7CiAJCWNhc2UgUE1BQ19TQ1JFQU1FUjoKQEAgLTk1NCw3ICs5NzYsNyBAQAogCQlyZXR1cm4gZXJyOwogCWlmIChiZWlnZSB8fCBnNGFncCkKIAkJOwotCWVsc2UgaWYgKGNoaXAtPm1vZGVsID09IFBNQUNfU0NSRUFNRVIpCisJZWxzZSBpZiAoY2hpcC0+bW9kZWwgPT0gUE1BQ19TQ1JFQU1FUiB8fCBwbTU1MDApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLCBBUlJBWV9TSVpFKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyczIpLAogCQkJCSAgIHNuZF9wbWFjX3NjcmVhbWVyX21peGVyczIpOwogCWVsc2UgaWYgKCFwbTc1MDApCkBAIC05NjIsMTkgKzk4NCwzNSBAQAogCQkJCSAgIHNuZF9wbWFjX2F3YWNzX21peGVyczIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOworCWlmIChwbTU1MDApIHsKKwkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCisJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19hd2Fjc19taXhlcnMyX3BtYWM1NTAwKSwKKwkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnMyX3BtYWM1NTAwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAlpZiAocG03NTAwKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKIAkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjNzUwMCksCiAJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM3NTAwKTsKKwllbHNlIGlmIChwbTU1MDApCisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCSAgICAobWFzdGVyX3ZvbCA9IHNuZF9jdGxfbmV3MShzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzU1MDAsCisJCQkJCQljaGlwKSkpOwogCWVsc2UgaWYgKGJlaWdlKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKIAkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19iZWlnZSksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2JlaWdlKTsKLQllbHNlIGlmIChpbWFjKQorCWVsc2UgaWYgKGltYWMgfHwgbG9tYmFyZCkgeworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkgICAgKG1hc3Rlcl92b2wgPSBzbmRfY3RsX25ldzEoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2xvLAorCQkJCQkJY2hpcCkpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKIAkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19pbWFjKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hYyk7Ci0JZWxzZSBpZiAoZzRhZ3ApCisJfSBlbHNlIGlmIChnNGFncCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsCiAJCQkJICAgQVJSQVlfU0laRShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfZzRhZ3ApLAogCQkJCSAgIHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19nNGFncCk7CkBAIC05ODQsOCArMTAyMiwxMCBAQAogCQkJCSAgIHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQljaGlwLT5tYXN0ZXJfc3dfY3RsID0gc25kX2N0bF9uZXcxKChwbTc1MDAgfHwgaW1hYyB8fCBnNGFncCkKKwljaGlwLT5tYXN0ZXJfc3dfY3RsID0gc25kX2N0bF9uZXcxKChwbTc1MDAgfHwgaW1hYyB8fCBnNGFncCB8fCBsb21iYXJkKQogCQkJPyAmc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3X2ltYWMKKwkJCTogcG01NTAwCisJCQk/ICZzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfcG1hYzU1MDAKIAkJCTogJnNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zdywgY2hpcCk7CiAJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY2hpcC0+bWFzdGVyX3N3X2N0bCk7CiAJaWYgKGVyciA8IDApCkBAIC0xMDE3LDggKzEwNTcsOSBAQAogI2VuZGlmIC8qIFBNQUNfQU1QX0FWQUlMICovCiAJewogCQkvKiByb3V0ZSBBID0gaGVhZHBob25lLCByb3V0ZSBDID0gc3BlYWtlciAqLwotCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwgQVJSQVlfU0laRShzbmRfcG1hY19hd2Fjc19zcGVha2VyX3ZvbCksCi0JCQkJCXNuZF9wbWFjX2F3YWNzX3NwZWFrZXJfdm9sKTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJICAgIChzcGVha2VyX3ZvbCA9IHNuZF9jdGxfbmV3MShzbmRfcG1hY19hd2Fjc19zcGVha2VyX3ZvbCwKKwkJCQkJCWNoaXApKSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJY2hpcC0+c3BlYWtlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoaW1hYzEKQEAgLTEwMzEsNiArMTA3MiwzMyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwlpZiAocG01NTAwIHx8IGltYWMgfHwgbG9tYmFyZCkgeworCQl2bWFzdGVyX3N3ID0gc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKAorCQkJIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAodW5zaWduZWQgaW50ICopIE5VTEwpOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZV91bmNhY2hlZCh2bWFzdGVyX3N3LAorCQkJCQkJIGNoaXAtPm1hc3Rlcl9zd19jdGwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkKHZtYXN0ZXJfc3csCisJCQkJCQkgIGNoaXAtPnNwZWFrZXJfc3dfY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCB2bWFzdGVyX3N3KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQl2bWFzdGVyX3ZvbCA9IHNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcigKKwkJCSJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgKHVuc2lnbmVkIGludCAqKSBOVUxMKTsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUodm1hc3Rlcl92b2wsIG1hc3Rlcl92b2wpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKHZtYXN0ZXJfdm9sLCBzcGVha2VyX3ZvbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgdm1hc3Rlcl92b2wpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJlaWdlIHx8IGc0YWdwKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKIAkJCQlBUlJBWV9TSVpFKHNuZF9wbWFjX3NjcmVhbWVyX21pY19ib29zdF9iZWlnZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYnVyZ3VuZHkuYyBiL3NvdW5kL3BwYy9idXJndW5keS5jCmluZGV4IGY4NjBkMzkuLjQ1YTc2MjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9idXJndW5keS5jCisrKyBiL3NvdW5kL3BwYy9idXJndW5keS5jCkBAIC0zNSw3ICszNSw3IEBACiAJaW50IHRpbWVvdXQgPSA1MDsKIAl3aGlsZSAoKGluX2xlMzIoJmNoaXAtPmF3YWNzLT5jb2RlY19jdHJsKSAmIE1BU0tfTkVXRUNNRCkgJiYgdGltZW91dC0tKQogCQl1ZGVsYXkoMSk7Ci0JaWYgKCEgdGltZW91dCkKKwlpZiAodGltZW91dCA8IDApCiAJCXByaW50ayhLRVJOX0RFQlVHICJidXJndW5keV9idXN5X3dhaXQ6IHRpbWVvdXRcbiIpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvZGFjYS5jIGIvc291bmQvcHBjL2RhY2EuYwppbmRleCA4YTViMjkwLi5mOGQ0NzhjIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvZGFjYS5jCisrKyBiL3NvdW5kL3BwYy9kYWNhLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAlkYXRhWzFdIHw9IG1peC0+ZGVlbXBoYXNpcyA/IDB4NDAgOiAwOwogCWlmIChpMmNfc21idXNfd3JpdGVfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIERBQ0FfUkVHX0FWT0wsCiAJCQkJICAgICAgIDIsIGRhdGEpIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IHZvbHVtZSBcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IHZvbHVtZSBcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvcG1hYy5jIGIvc291bmQvcHBjL3BtYWMuYwppbmRleCBhZjc2ZWU4Li45YjRlOWMzIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvcG1hYy5jCisrKyBiL3NvdW5kL3BwYy9wbWFjLmMKQEAgLTI5OSw3ICsyOTksNyBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAkJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCXJlYy0+cnVubmluZyA9IDA7Ci0JCS8qcHJpbnRrKCJzdG9wcGVkISFcbiIpOyovCisJCS8qcHJpbnRrKEtFUk5fREVCVUcgInN0b3BwZWQhIVxuIik7Ki8KIAkJc25kX3BtYWNfZG1hX3N0b3AocmVjKTsKIAkJZm9yIChpID0gMCwgY3AgPSByZWMtPmNtZC5jbWRzOyBpIDwgcmVjLT5ucGVyaW9kczsgaSsrLCBjcCsrKQogCQkJb3V0X2xlMTYoJmNwLT5jb21tYW5kLCBEQkRNQV9TVE9QKTsKQEAgLTMzNCw3ICszMzQsNyBAQAogCX0KICNlbmRpZgogCWNvdW50ICs9IHJlYy0+Y3VyX3BlcmlvZCAqIHJlYy0+cGVyaW9kX3NpemU7Ci0JLypwcmludGsoInBvaW50ZXI9JWRcbiIsIGNvdW50KTsqLworCS8qcHJpbnRrKEtFUk5fREVCVUcgInBvaW50ZXI9JWRcbiIsIGNvdW50KTsqLwogCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vicy0+cnVudGltZSwgY291bnQpOwogfQogCkBAIC00ODYsNyArNDg2LDcgQEAKIAkJCWlmICghIChzdGF0ICYgQUNUSVZFKSkKIAkJCQlicmVhazsKIAotCQkJLypwcmludGsoInVwZGF0ZSBmcmFnICVkXG4iLCByZWMtPmN1cl9wZXJpb2QpOyovCisJCQkvKnByaW50ayhLRVJOX0RFQlVHICJ1cGRhdGUgZnJhZyAlZFxuIiwgcmVjLT5jdXJfcGVyaW9kKTsqLwogCQkJc3RfbGUxNigmY3AtPnhmZXJfc3RhdHVzLCAwKTsKIAkJCXN0X2xlMTYoJmNwLT5yZXFfY291bnQsIHJlYy0+cGVyaW9kX3NpemUpOwogCQkJLypzdF9sZTE2KCZjcC0+cmVzX2NvdW50LCAwKTsqLwpAQCAtODA2LDcgKzgwNiw3IEBACiAJc3RydWN0IHNuZF9wbWFjICpjaGlwID0gZGV2aWQ7CiAJaW50IGN0cmwgPSBpbl9sZTMyKCZjaGlwLT5hd2Fjcy0+Y29udHJvbCk7CiAKLQkvKnByaW50aygicG1hYzogY29udHJvbCBpbnRlcnJ1cHQuLiAweCV4XG4iLCBjdHJsKTsqLworCS8qcHJpbnRrKEtFUk5fREVCVUcgInBtYWM6IGNvbnRyb2wgaW50ZXJydXB0Li4gMHgleFxuIiwgY3RybCk7Ki8KIAlpZiAoY3RybCAmIE1BU0tfUE9SVENIRykgewogCQkvKiBkbyBzb21ldGhpbmcgd2hlbiBoZWFkcGhvbmUgaXMgcGx1Z2dlZC91bnBsdWdnZWQ/ICovCiAJCWlmIChjaGlwLT51cGRhdGVfYXV0b211dGUpCkBAIC0xMDMzLDcgKzEwMzMsOCBAQAogCX0KIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoc291bmQsICJ0dW1ibGVyIikpIHsKIAkJY2hpcC0+bW9kZWwgPSBQTUFDX1RVTUJMRVI7Ci0JCWNoaXAtPmNhbl9jYXB0dXJlID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMiIpOworCQljaGlwLT5jYW5fY2FwdHVyZSA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDIiKQorCQkJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIik7CiAJCWNoaXAtPmNhbl9kdXBsZXggPSAwOwogCQkvLyBjaGlwLT5jYW5fYnl0ZV9zd2FwID0gMDsgLyogRklYTUU6IGNoZWNrIHRoaXMgKi8KIAkJY2hpcC0+bnVtX2ZyZXFzID0gQVJSQVlfU0laRSh0dW1ibGVyX2ZyZXFzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wb3dlcm1hYy5jIGIvc291bmQvcHBjL3Bvd2VybWFjLmMKaW5kZXggYzkzNjIyNS4uNWE5MjkwNiAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3Bvd2VybWFjLmMKKysrIGIvc291bmQvcHBjL3Bvd2VybWFjLmMKQEAgLTU4LDkgKzU4LDkgQEAKIAljaGFyICpuYW1lX2V4dDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfcG1hY19uZXcoY2FyZCwgJmNoaXApKSA8IDApCiAJCWdvdG8gX19lcnJvcjsKQEAgLTExMCw3ICsxMTAsNyBAQAogCQkJZ290byBfX2Vycm9yOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJ1bnN1cHBvcnRlZCBoYXJkd2FyZSAlZFxuIiwgY2hpcC0+bW9kZWwpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bnN1cHBvcnRlZCBoYXJkd2FyZSAlZFxuIiwgY2hpcC0+bW9kZWwpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIF9fZXJyb3I7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3NuZF9wczMuYyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKaW5kZXggZmYzMjExMS4uZjM2MWMyNiAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3NuZF9wczMuYworKysgYi9zb3VuZC9wcGMvc25kX3BzMy5jCkBAIC05NjksMTEgKzk2OSw5IEBACiAJfQogCiAJLyogY3JlYXRlIGNhcmQgaW5zdGFuY2UgKi8KLQl0aGVfY2FyZC5jYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghdGhlX2NhcmQuY2FyZCkgewotCQlyZXQgPSAtRU5YSU87CisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZ0aGVfY2FyZC5jYXJkKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBjbGVhbl9pcnE7Ci0JfQogCiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPmRyaXZlciwgIlBTMyIpOwogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5zaG9ydG5hbWUsICJQUzMiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy90dW1ibGVyLmMgYi9zb3VuZC9wcGMvdHVtYmxlci5jCmluZGV4IDNlYjIyMzMuLjQwMjIyZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy90dW1ibGVyLmMKKysrIGIvc291bmQvcHBjL3R1bWJsZXIuYwpAQCAtNDEsNyArNDEsNyBAQAogI3VuZGVmIERFQlVHCiAKICNpZmRlZiBERUJVRwotI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoZm10KQorI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCiAjZWxzZQogI2RlZmluZSBEQkcoZm10Li4uKQogI2VuZGlmCkBAIC0yNDAsNyArMjQwLDcgQEAKICAgCiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIFRBU19SRUdfVk9MLCA2LAogCQkJCQkgICBibG9jaykgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIFRBU19SRUdfRFJDLAogCQkJCQkgICAyLCB2YWwpIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgRFJDXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMzg2LDcgKzM4Niw3IEBACiAKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgVEFTX1JFR19EUkMsCiAJCQkJCSAgIDYsIHZhbCkgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgRFJDXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCBEUkNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC01MDYsNyArNTA2LDggQEAKIAkJYmxvY2tbaV0gPSAodm9sID4+ICgoaW5mby0+Ynl0ZXMgLSBpIC0gMSkgKiA4KSkgJiAweGZmOwogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBpbmZvLT5yZWcsCiAJCQkJCSAgIGluZm8tPmJ5dGVzLCBibG9jaykgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgbW9ubyB2b2x1bWUgJWRcbiIsIGluZm8tPmluZGV4KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCBtb25vIHZvbHVtZSAlZFxuIiwKKwkJCSAgIGluZm8tPmluZGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtNjQzLDcgKzY0NCw3IEBACiAJfQogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCByZWcsCiAJCQkJCSAgIDksIGJsb2NrKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBtb25vIHZvbHVtZSAlZFxuIiwgcmVnKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCBtb25vIHZvbHVtZSAlZFxuIiwgcmVnKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc2gvS2NvbmZpZyBiL3NvdW5kL3NoL0tjb25maWcKaW5kZXggY2ZjMTQzOS4uYWVkMGY5MCAxMDA2NDQKLS0tIGEvc291bmQvc2gvS2NvbmZpZworKysgYi9zb3VuZC9zaC9LY29uZmlnCkBAIC0xNSw2ICsxNSw3IEBACiAJdHJpc3RhdGUgIkRyZWFtY2FzdCBZYW1haGEgQUlDQSBzb3VuZCIKIAlkZXBlbmRzIG9uIFNIX0RSRUFNQ0FTVAogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IEcyX0RNQQogCWhlbHAKIAkgIEFMU0EgU291bmQgZHJpdmVyIGZvciB0aGUgU0VHQSBEcmVhbWNhc3QgY29uc29sZS4KIApkaWZmIC0tZ2l0IGEvc291bmQvc2gvYWljYS5jIGIvc291bmQvc2gvYWljYS5jCmluZGV4IDdjOTIwZjMuLmY1NTEyMzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NoL2FpY2EuYworKysgYi9zb3VuZC9zaC9haWNhLmMKQEAgLTYwOSwxMSArNjA5LDExIEBACiAJZHJlYW1jYXN0Y2FyZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9haWNhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFkcmVhbWNhc3RjYXJkKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZHJlYW1jYXN0Y2FyZC0+Y2FyZCA9Ci0JICAgIHNuZF9jYXJkX25ldyhpbmRleCwgU05EX0FJQ0FfRFJJVkVSLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKHVubGlrZWx5KCFkcmVhbWNhc3RjYXJkLT5jYXJkKSkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgU05EX0FJQ0FfRFJJVkVSLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZkcmVhbWNhc3RjYXJkLT5jYXJkKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKIAkJa2ZyZWUoZHJlYW1jYXN0Y2FyZCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZXJyOwogCX0KIAlzdHJjcHkoZHJlYW1jYXN0Y2FyZC0+Y2FyZC0+ZHJpdmVyLCAic25kX2FpY2EiKTsKIAlzdHJjcHkoZHJlYW1jYXN0Y2FyZC0+Y2FyZC0+c2hvcnRuYW1lLCBTTkRfQUlDQV9EUklWRVIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL0tjb25maWcgYi9zb3VuZC9zb2MvS2NvbmZpZwppbmRleCBlZjAyNWM2Li4zZDJiYjZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAl0cmlzdGF0ZSAiQUxTQSBmb3IgU29DIGF1ZGlvIHN1cHBvcnQiCiAJc2VsZWN0IFNORF9QQ00KIAlzZWxlY3QgQUM5N19CVVMgaWYgU05EX1NPQ19BQzk3X0JVUworCXNlbGVjdCBTTkRfSkFDSyBpZiBJTlBVVD15IHx8IElOUFVUPVNORAogCS0tLWhlbHAtLS0KIAogCSAgSWYgeW91IHdhbnQgQVNvQyBzdXBwb3J0LCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgYW5kIGFsc28gdG8gdGhlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvTWFrZWZpbGUKaW5kZXggODZhOWIxZi4uMDIzNzg3OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLXNuZC1zb2MtY29yZS1vYmpzIDo9IHNvYy1jb3JlLm8gc29jLWRhcG0ubworc25kLXNvYy1jb3JlLW9ianMgOj0gc29jLWNvcmUubyBzb2MtZGFwbS5vIHNvYy1qYWNrLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHNuZC1zb2MtY29yZS5vCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gY29kZWNzLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jCmluZGV4IDNkY2RjNGUuLjllZjZiOTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYworKysgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCk7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9wY21fb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9wY21fb3BzID0gewogCS5vcGVuCQk9IGF0bWVsX3BjbV9vcGVuLAogCS5jbG9zZQkJPSBhdG1lbF9wY21fY2xvc2UsCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKaW5kZXggZmYwMDU0Yi4uZTU4OGU2MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCkBAIC02OTcsNiArNjk3LDE1IEBACiAjZGVmaW5lIEFUTUVMX1NTQ19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1M4ICAgICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHxcCiAJCQkgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGF0bWVsX3NzY19kYWlfb3BzID0geworCS5zdGFydHVwCT0gYXRtZWxfc3NjX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gYXRtZWxfc3NjX3NodXRkb3duLAorCS5wcmVwYXJlCT0gYXRtZWxfc3NjX3ByZXBhcmUsCisJLmh3X3BhcmFtcwk9IGF0bWVsX3NzY19od19wYXJhbXMsCisJLnNldF9mbXQJPSBhdG1lbF9zc2Nfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSBhdG1lbF9zc2Nfc2V0X2RhaV9jbGtkaXYsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYXRtZWxfc3NjX2RhaVtOVU1fU1NDX0RFVklDRVNdID0gewogCXsJLm5hbWUgPSAiYXRtZWwtc3NjMCIsCiAJCS5pZCA9IDAsCkBAIC03MTIsMTMgKzcyMSw3IEBACiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IEFUTUVMX1NTQ19SQVRFUywKIAkJCS5mb3JtYXRzID0gQVRNRUxfU1NDX0ZPUk1BVFMsfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gYXRtZWxfc3NjX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdG1lbF9zc2Nfc2h1dGRvd24sCi0JCQkucHJlcGFyZSA9IGF0bWVsX3NzY19wcmVwYXJlLAotCQkJLmh3X3BhcmFtcyA9IGF0bWVsX3NzY19od19wYXJhbXMsCi0JCQkuc2V0X2ZtdCA9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfY2xrZGl2ID0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LH0sCisJCS5vcHMgPSAmYXRtZWxfc3NjX2RhaV9vcHMsCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMF0sCiAJfSwKICNpZiBOVU1fU1NDX0RFVklDRVMgPT0gMwpAQCAtNzM2LDEzICs3MzksNyBAQAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBBVE1FTF9TU0NfUkFURVMsCiAJCQkuZm9ybWF0cyA9IEFUTUVMX1NTQ19GT1JNQVRTLH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0bWVsX3NzY19zdGFydHVwLAotCQkJLnNodXRkb3duID0gYXRtZWxfc3NjX3NodXRkb3duLAotCQkJLnByZXBhcmUgPSBhdG1lbF9zc2NfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAotCQkJLnNldF9mbXQgPSBhdG1lbF9zc2Nfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X2Nsa2RpdiA9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2Rpdix9LAorCQkub3BzID0gJmF0bWVsX3NzY19kYWlfb3BzLAogCQkucHJpdmF0ZV9kYXRhID0gJnNzY19pbmZvWzFdLAogCX0sCiAJewkubmFtZSA9ICJhdG1lbC1zc2MyIiwKQEAgLTc1OSwxMyArNzU2LDcgQEAKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gQVRNRUxfU1NDX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBBVE1FTF9TU0NfRk9STUFUUyx9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBhdG1lbF9zc2Nfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IGF0bWVsX3NzY19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXRtZWxfc3NjX3ByZXBhcmUsCi0JCQkuaHdfcGFyYW1zID0gYXRtZWxfc3NjX2h3X3BhcmFtcywKLQkJCS5zZXRfZm10ID0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdG1lbF9zc2Nfc2V0X2RhaV9jbGtkaXYsfSwKKwkJLm9wcyA9ICZhdG1lbF9zc2NfZGFpX29wcywKIAkJLnByaXZhdGVfZGF0YSA9ICZzc2NfaW5mb1syXSwKIAl9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvcGxheXBhcV93bTg1MTAuYyBiL3NvdW5kL3NvYy9hdG1lbC9wbGF5cGFxX3dtODUxMC5jCmluZGV4IDQzZGQ4Y2UuLjcwNjU3NTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9wbGF5cGFxX3dtODUxMC5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9wbGF5cGFxX3dtODUxMC5jCkBAIC0xNjQsNDEgKzE2NCw0MSBAQAogCSAqLwogCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewogCWNhc2UgNDgwMDA6Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8xOwotCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ0MTAwOgotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMTsKLQkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7Ci0JCWJyZWFrOwotCi0JY2FzZSAyMjA1MDoKLQkJcGxsX291dCA9IDExMjg5NjAwOworCQlwbGxfb3V0ID0gMjQ1NzYwMDA7CiAJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMjsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCi0JY2FzZSAxNjAwMDoKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzM7CisJY2FzZSA0NDEwMDoKKwkJcGxsX291dCA9IDIyNTc5MjAwOworCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzI7CiAJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwogCQlicmVhazsKIAotCWNhc2UgMTEwMjU6Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKKwljYXNlIDIyMDUwOgorCQlwbGxfb3V0ID0gMjI1NzkyMDA7CiAJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfNDsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCi0JY2FzZSA4MDAwOgotCQlwbGxfb3V0ID0gMTIyODgwMDA7CisJY2FzZSAxNjAwMDoKKwkJcGxsX291dCA9IDI0NTc2MDAwOwogCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzY7CiAJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwogCQlicmVhazsKIAorCWNhc2UgMTEwMjU6CisJCXBsbF9vdXQgPSAyMjU3OTIwMDsKKwkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl84OworCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKKwkJYnJlYWs7CisKKwljYXNlIDgwMDA6CisJCXBsbF9vdXQgPSAyNDU3NjAwMDsKKwkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8xMjsKKwkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcHJfd2FybmluZygicGxheXBhcV93bTg1MTA6IFVuc3VwcG9ydGVkIHNhbXBsZSByYXRlICVkXG4iLAogCQkJICAgcGFyYW1zX3JhdGUocGFyYW1zKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCmluZGV4IDZlYTA0YmUuLjE3M2EyMzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2F0bWVsLXNzYy5oPgogCkBAIC00NSw2ICs0Niw3IEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogCkBAIC01Miw2ICs1NCw5IEBACiAjaW5jbHVkZSAiYXRtZWwtcGNtLmgiCiAjaW5jbHVkZSAiYXRtZWxfc3NjX2RhaS5oIgogCisjZGVmaW5lIE1DTEtfUkFURSAxMjAwMDAwMAorCitzdGF0aWMgc3RydWN0IGNsayAqbWNsazsKIAogc3RhdGljIGludCBhdDkxc2FtOWcyMGVrX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CkBAIC01OSwxMSArNjQsMTIgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CiAJaW50IHJldDsKIAotCS8qIGNvZGVjIHN5c3RlbSBjbG9jayBpcyBzdXBwbGllZCBieSBQQ0swLCBzZXQgdG8gMTJNSHogKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzMxX1NZU0NMSywKLQkJMTIwMDAwMDAsIFNORF9TT0NfQ0xPQ0tfSU4pOwotCWlmIChyZXQgPCAwKQorCQlNQ0xLX1JBVEUsIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKSB7CisJCWNsa19kaXNhYmxlKG1jbGspOwogCQlyZXR1cm4gcmV0OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTg5LDYgKzE5NSwzMSBAQAogCS5zaHV0ZG93biA9IGF0OTFzYW05ZzIwZWtfc2h1dGRvd24sCiB9OwogCitzdGF0aWMgaW50IGF0OTFzYW05ZzIwZWtfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwKKwkJCQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RhdGljIGludCBtY2xrX29uOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWlmICghbWNsa19vbikKKwkJCXJldCA9IGNsa19lbmFibGUobWNsayk7CisJCWlmIChyZXQgPT0gMCkKKwkJCW1jbGtfb24gPSAxOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAobWNsa19vbikKKwkJCWNsa19kaXNhYmxlKG1jbGspOworCQltY2xrX29uID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGF0OTFzYW05ZzIwZWtfZGFwbV93aWRnZXRzW10gPSB7CiAJU05EX1NPQ19EQVBNX01JQygiSW50IE1pYyIsIE5VTEwpLApAQCAtMjQzLDIxICsyNzQsNDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNuZF9zb2NfYXQ5MXNhbTlnMjBlayA9IHsKLQkubmFtZSA9ICJXTTg3MzEiLAorCS5uYW1lID0gIkFUOTFTQU1HMjAtRUsiLAogCS5wbGF0Zm9ybSA9ICZhdG1lbF9zb2NfcGxhdGZvcm0sCiAJLmRhaV9saW5rID0gJmF0OTFzYW05ZzIwZWtfZGFpLAogCS5udW1fbGlua3MgPSAxLAorCS5zZXRfYmlhc19sZXZlbCA9IGF0OTFzYW05ZzIwZWtfc2V0X2JpYXNfbGV2ZWwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHdtODczMV9zZXR1cF9kYXRhIGF0OTFzYW05ZzIwZWtfd204NzMxX3NldHVwID0gewotCS5pMmNfYnVzID0gMCwKLQkuaTJjX2FkZHJlc3MgPSAweDFiLAotfTsKKy8qCisgKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBib2RnZSB0byBhdm9pZCBjcm9zcy10cmVlIG1lcmdlIGlzc3Vlcy4KKyAqIE5ldyBkcml2ZXJzIHNob3VsZCByZWdpc3RlciB0aGUgd204NzMxIEkyQyBkZXZpY2UgaW4gdGhlIG1hY2hpbmUKKyAqIHNldHVwIGNvZGUgKHVuZGVyIGFyY2gvYXJtIGZvciBBUk0gc3lzdGVtcykuCisgKi8KK3N0YXRpYyBpbnQgd204NzMxX2kyY19yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJaW5mby5hZGRyID0gMHgxYjsKKwlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOworCisJYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgMFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7CisJaWYgKCFjbGllbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAorCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBhdDkxc2FtOWcyMGVrX3NuZF9kZXZkYXRhID0gewogCS5jYXJkID0gJnNuZF9zb2NfYXQ5MXNhbTlnMjBlaywKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLAotCS5jb2RlY19kYXRhID0gJmF0OTFzYW05ZzIwZWtfd204NzMxX3NldHVwLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0OTFzYW05ZzIwZWtfc25kX2RldmljZTsKQEAgLTI2NiwyMyArMzI0LDU2IEBACiB7CiAJc3RydWN0IGF0bWVsX3NzY19pbmZvICpzc2NfcCA9IGF0OTFzYW05ZzIwZWtfZGFpLmNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc3NjX2RldmljZSAqc3NjID0gTlVMTDsKKwlzdHJ1Y3QgY2xrICpwbGxiOwogCWludCByZXQ7CiAKKwlpZiAoIW1hY2hpbmVfaXNfYXQ5MXNhbTlnMjBlaygpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogQ29kZWMgTUNMSyBpcyBzdXBwbGllZCBieSBQQ0swIC0gc2V0IGl0IHVwLgorCSAqLworCW1jbGsgPSBjbGtfZ2V0KE5VTEwsICJwY2swIik7CisJaWYgKElTX0VSUihtY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IEZhaWxlZCB0byBnZXQgTUNMS1xuIik7CisJCXJldCA9IFBUUl9FUlIobWNsayk7CisJCWdvdG8gZXJyOworCX0KKworCXBsbGIgPSBjbGtfZ2V0KE5VTEwsICJwbGxiIik7CisJaWYgKElTX0VSUihtY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IEZhaWxlZCB0byBnZXQgUExMQlxuIik7CisJCXJldCA9IFBUUl9FUlIobWNsayk7CisJCWdvdG8gZXJyX21jbGs7CisJfQorCXJldCA9IGNsa19zZXRfcGFyZW50KG1jbGssIHBsbGIpOworCWNsa19wdXQocGxsYik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIHNldCBNQ0xLIHBhcmVudFxuIik7CisJCWdvdG8gZXJyX21jbGs7CisJfQorCisJY2xrX3NldF9yYXRlKG1jbGssIE1DTEtfUkFURSk7CisKIAkvKgogCSAqIFJlcXVlc3QgU1NDIGRldmljZQogCSAqLwogCXNzYyA9IHNzY19yZXF1ZXN0KDApOwogCWlmIChJU19FUlIoc3NjKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IEZhaWxlZCB0byByZXF1ZXN0IFNTQyAwXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihzc2MpOwogCQlzc2MgPSBOVUxMOwogCQlnb3RvIGVycl9zc2M7CiAJfQogCXNzY19wLT5zc2MgPSBzc2M7CiAKKwlyZXQgPSB3bTg3MzFfaTJjX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycl9zc2M7CisKIAlhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIWF0OTFzYW05ZzIwZWtfc25kX2RldmljZSkgewotCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSJwbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJfQogCkBAIC0yOTIsMTQgKzM4MywxOSBAQAogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkicGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGF0OTFzYW05ZzIwZWtfc25kX2RldmljZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKIAogZXJyX3NzYzoKKwlzc2NfZnJlZShzc2MpOworCXNzY19wLT5zc2MgPSBOVUxMOworZXJyX21jbGs6CisJY2xrX3B1dChtY2xrKTsKKwltY2xrID0gTlVMTDsKK2VycjoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTcsNiArNDEzLDggQEAKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGF0OTFzYW05ZzIwZWtfc25kX2RldmljZSk7CiAJYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlID0gTlVMTDsKKwljbGtfcHV0KG1jbGspOworCW1jbGsgPSBOVUxMOwogfQogCiBtb2R1bGVfaW5pdChhdDkxc2FtOWcyMGVrX2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwppbmRleCBiYzhkNjU0Li4zMDQ5MGEyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYworKysgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBhdTF4cHNjX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF1MXhwc2NfcGNtX29wcyA9IHsKIAkub3BlbgkJPSBhdTF4cHNjX3BjbV9vcGVuLAogCS5jbG9zZQkJPSBhdTF4cHNjX3BjbV9jbG9zZSwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jIGIvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYwppbmRleCBmMGUzMGFlLi40NzlkN2JkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKQEAgLTM0Miw2ICszNDIsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYXUxeHBzY19hYzk3X2RhaV9vcHMgPSB7CisJLnRyaWdnZXIJPSBhdTF4cHNjX2FjOTdfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gYXUxeHBzY19hYzk3X2h3X3BhcmFtcywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhdTF4cHNjX2FjOTdfZGFpID0gewogCS5uYW1lCQkJPSAiYXUxeHBzY19hYzk3IiwKIAkuYWM5N19jb250cm9sCQk9IDEsCkBAIC0zNjEsMTAgKzM2Niw3IEBACiAJCS5jaGFubmVsc19taW4JPSAyLAogCQkuY2hhbm5lbHNfbWF4CT0gMiwKIAl9LAotCS5vcHMgPSB7Ci0JCS50cmlnZ2VyCT0gYXUxeHBzY19hYzk3X3RyaWdnZXIsCi0JCS5od19wYXJhbXMJPSBhdTF4cHNjX2FjOTdfaHdfcGFyYW1zLAotCX0sCisJLm9wcyA9ICZhdTF4cHNjX2FjOTdfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhdTF4cHNjX2FjOTdfZGFpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvcHNjLWkycy5jIGIvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCmluZGV4IGY5MTZkZTQuLmJiNTg5MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYworKysgYi9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKQEAgLTM2Nyw2ICszNjcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYXUxeHBzY19pMnNfZGFpX29wcyA9IHsKKwkudHJpZ2dlcgk9IGF1MXhwc2NfaTJzX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IGF1MXhwc2NfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGF1MXhwc2NfaTJzX3NldF9mbXQsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgYXUxeHBzY19pMnNfZGFpID0gewogCS5uYW1lCQkJPSAiYXUxeHBzY19pMnMiLAogCS5wcm9iZQkJCT0gYXUxeHBzY19pMnNfcHJvYmUsCkBAIC0zODUsMTEgKzM5MSw3IEBACiAJCS5jaGFubmVsc19taW4JPSAyLAogCQkuY2hhbm5lbHNfbWF4CT0gOCwJLyogMiB3aXRob3V0IGV4dGVybmFsIGhlbHAgKi8KIAl9LAotCS5vcHMgPSB7Ci0JCS50cmlnZ2VyCT0gYXUxeHBzY19pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IGF1MXhwc2NfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQJPSBhdTF4cHNjX2kyc19zZXRfZm10LAotCX0sCisJLm9wcyA9ICZhdTF4cHNjX2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0woYXUxeHBzY19pMnNfZGFpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwppbmRleCA4MDY3Y2ZhLi44Y2ZlZDFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiB9CiAjZW5kaWYKIAotc3RydWN0IHNuZF9wY21fb3BzIGJmNXh4X3BjbV9hYzk3X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2FjOTdfb3BzID0gewogCS5vcGVuCQk9IGJmNXh4X3BjbV9vcGVuLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zCT0gYmY1eHhfcGNtX2h3X3BhcmFtcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCmluZGV4IDNiZTJiZTYuLjhhOTM1ZjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwpAQCAtMzEsNzIgKzMxLDQ2IEBACiAjaW5jbHVkZSAiYmY1eHgtc3BvcnQuaCIKICNpbmNsdWRlICJiZjV4eC1hYzk3LmgiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkKLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8wIHtQX1NQT1JUMF9URlMsIFBfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgXAotCQlQX1NQT1JUMF9SRlMsIFBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgMH0KLQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzEge1BfU1BPUlQxX1RGUywgUF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBcCi0JCVBfU1BPUlQxX1JGUywgUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMiB7UF9TUE9SVDJfVEZTLCBQX1NQT1JUMl9EVFBSSSwgUF9TUE9SVDJfVFNDTEssIFwKLQkJUF9TUE9SVDJfUkZTLCBQX1NQT1JUMl9EUlBSSSwgUF9TUE9SVDJfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8zIHtQX1NQT1JUM19URlMsIFBfU1BPUlQzX0RUUFJJLCBQX1NQT1JUM19UU0NMSywgXAotCQlQX1NQT1JUM19SRlMsIFBfU1BPUlQzX0RSUFJJLCBQX1NQT1JUM19SU0NMSywgMH0KLSNlbHNlCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMCB7UF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsIFwKLQkJIFBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgMH0KLQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzEge1BfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLCBcCi0JCSBQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDB9Ci0jZW5kaWYKLQogc3RhdGljIGludCAqY21kX2NvdW50Owogc3RhdGljIGludCBzcG9ydF9udW0gPSBDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTTsKIAorI2RlZmluZSBTUE9SVF9SRVEoeCkgXAorCVt4XSA9IHtQX1NQT1JUIyN4IyNfVEZTLCBQX1NQT1JUIyN4IyNfRFRQUkksIFBfU1BPUlQjI3gjI19UU0NMSywgXAorCSAgICAgICBQX1NQT1JUIyN4IyNfUkZTLCBQX1NQT1JUIyN4IyNfRFJQUkksIFBfU1BPUlQjI3gjI19SU0NMSywgMH0KIHN0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7Ci0JCVBJTl9SRVFfU1BPUlRfMCwKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzEKLQkJUElOX1JFUV9TUE9SVF8xLAorI2lmZGVmIFNQT1JUMF9UQ1IxCisJU1BPUlRfUkVRKDApLAogI2VuZGlmCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8yCi0JCVBJTl9SRVFfU1BPUlRfMiwKKyNpZmRlZiBTUE9SVDFfVENSMQorCVNQT1JUX1JFUSgxKSwKICNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMwotCQlQSU5fUkVRX1NQT1JUXzMsCisjaWZkZWYgU1BPUlQyX1RDUjEKKwlTUE9SVF9SRVEoMiksCiAjZW5kaWYKLQl9OworI2lmZGVmIFNQT1JUM19UQ1IxCisJU1BPUlRfUkVRKDMpLAorI2VuZGlmCit9OwogCi1zdGF0aWMgc3RydWN0IHNwb3J0X3BhcmFtIHNwb3J0X3BhcmFtc1s0XSA9IHsKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUMF9SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQwX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDBfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDBfVENSMSwKLQl9LAotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMQotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQxX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDFfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUMV9FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMV9UQ1IxLAotCX0sCi0jZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzIKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUMl9SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQyX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDJfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDJfVENSMSwKLQl9LAotI2VuZGlmCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8zCi0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDNfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUM19UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQzX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQzX1RDUjEsCisjZGVmaW5lIFNQT1JUX1BBUkFNUyh4KSBcCisJW3hdID0geyBcCisJCS5kbWFfcnhfY2hhbiA9IENIX1NQT1JUIyN4IyNfUlgsIFwKKwkJLmRtYV90eF9jaGFuID0gQ0hfU1BPUlQjI3gjI19UWCwgXAorCQkuZXJyX2lycSAgICAgPSBJUlFfU1BPUlQjI3gjI19FUlJPUiwgXAorCQkucmVncyAgICAgICAgPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQjI3gjI19UQ1IxLCBcCiAJfQorc3RhdGljIHN0cnVjdCBzcG9ydF9wYXJhbSBzcG9ydF9wYXJhbXNbNF0gPSB7CisjaWZkZWYgU1BPUlQwX1RDUjEKKwlTUE9SVF9QQVJBTVMoMCksCisjZW5kaWYKKyNpZmRlZiBTUE9SVDFfVENSMQorCVNQT1JUX1BBUkFNUygxKSwKKyNlbmRpZgorI2lmZGVmIFNQT1JUMl9UQ1IxCisJU1BPUlRfUEFSQU1TKDIpLAorI2VuZGlmCisjaWZkZWYgU1BPUlQzX1RDUjEKKwlTUE9SVF9QQVJBTVMoMyksCiAjZW5kaWYKIH07CiAKQEAgLTMzMiwxMSArMzA2LDExIEBACiAJaWYgKGNtZF9jb3VudCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0sICJzb2MtYXVkaW8iKSkgeworCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChzcG9ydF9yZXFbc3BvcnRfbnVtXSwgInNvYy1hdWRpbyIpKSB7CiAJCXByX2VycigiUmVxdWVzdGluZyBQZXJpcGhlcmFscyBmYWlsZWRcbiIpOwogCQlyZXQgPSAgLUVGQVVMVDsKIAkJZ290byBwZXJpcGhlcmFsX2VycjsKLQkJfQorCX0KIAogI2lmZGVmIENPTkZJR19TTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCiAJLyogUmVxdWVzdCBQQjMgYXMgcmVzZXQgcGluICovCkBAIC0zODMsOSArMzU3LDkgQEAKIHNwb3J0X2VycjoKICNpZmRlZiBDT05GSUdfU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAogCWdwaW9fZnJlZShDT05GSUdfU05EX0JGNVhYX1JFU0VUX0dQSU9fTlVNKTsKLSNlbmRpZgogZ3Bpb19lcnI6Ci0JcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKKyNlbmRpZgorCXBlcmlwaGVyYWxfZnJlZV9saXN0KHNwb3J0X3JlcVtzcG9ydF9udW1dKTsKIHBlcmlwaGVyYWxfZXJyOgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljbWRfY291bnQpOwogCWNtZF9jb3VudCA9IE5VTEw7CkBAIC0zOTgsNyArMzcyLDcgQEAKIHsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY21kX2NvdW50KTsKIAljbWRfY291bnQgPSBOVUxMOwotCXBlcmlwaGVyYWxfZnJlZV9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSk7CisJcGVyaXBoZXJhbF9mcmVlX2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0pOwogI2lmZGVmIENPTkZJR19TTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCiAJZ3Bpb19mcmVlKENPTkZJR19TTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYwppbmRleCA3ZjJhNWUxLi5lZGZiZGMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCVNTWU5DKCk7CiAKIAkvKiBXaGVuIFRVVkYgaXMgc2V0LCB0aGUgZGF0YSBpcyBhbHJlYWR5IHNlbmQgb3V0ICovCi0Jd2hpbGUgKCEoc3RhdHVzICYgVFVWRikgJiYgY291bnQrKyA8IDEwMDAwKSB7CisJd2hpbGUgKCEoc3RhdHVzICYgVFVWRikgJiYgKytjb3VudCA8IDEwMDAwKSB7CiAJCXVkZWxheSgxKTsKIAkJc3RhdHVzID0gYmZpbl9yZWFkX1NQT1JUX1NUQVQoKTsKIAkJU1NZTkMoKTsKQEAgLTEyMyw3ICsxMjMsNyBAQAogCVNTWU5DKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JaWYgKGNvdW50ID09IDEwMDAwKSB7CisJaWYgKGNvdW50ID49IDEwMDAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWQ3MzMxMTogZmFpbGVkIHRvIGNvbmZpZ3VyZSBjb2RlY1xuIik7CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYwppbmRleCA1M2QyOTBiLi4xMzE4YzRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCXJldHVybiAwIDsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGJmNXh4X3BjbV9pMnNfb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21faTJzX29wcyA9IHsKIAkub3BlbgkJPSBiZjV4eF9wY21fb3BlbiwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcwk9IGJmNXh4X3BjbV9od19wYXJhbXMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKaW5kZXggZDFkOTVkMi4uOTY0ODI0NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwpAQCAtMjg3LDYgKzI4NywxMyBAQAogI2RlZmluZSBCRjVYWF9JMlNfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8XAogCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBiZjV4eF9pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGJmNXh4X2kyc19zdGFydHVwLAorCS5zaHV0ZG93bgk9IGJmNXh4X2kyc19zaHV0ZG93biwKKwkuaHdfcGFyYW1zCT0gYmY1eHhfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGJmNXh4X2kyc19zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBiZjV4eF9pMnNfZGFpID0gewogCS5uYW1lID0gImJmNXh4LWkycyIsCiAJLmlkID0gMCwKQEAgLTMwNCwxMiArMzExLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IEJGNVhYX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBCRjVYWF9JMlNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwICAgPSBiZjV4eF9pMnNfc3RhcnR1cCwKLQkJLnNodXRkb3duICA9IGJmNXh4X2kyc19zaHV0ZG93biwKLQkJLmh3X3BhcmFtcyA9IGJmNXh4X2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gYmY1eHhfaTJzX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZiZjV4eF9pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChiZjV4eF9pMnNfZGFpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYwppbmRleCAzYjk5ZTQ4Li5iNzk1M2M4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZnJhZ2NvdW50OyArK2kpIHsKLQkJZGVzY1tpXS5uZXh0X2Rlc2NfYWRkciAgPSAodW5zaWduZWQgbG9uZykmKGRlc2NbaSArIDFdKTsKKwkJZGVzY1tpXS5uZXh0X2Rlc2NfYWRkciAgPSAmKGRlc2NbaSArIDFdKTsKIAkJZGVzY1tpXS5zdGFydF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYnVmICsgaSpmcmFnc2l6ZTsKIAkJZGVzY1tpXS5jZmcgPSBjZmc7CiAJCWRlc2NbaV0ueF9jb3VudCA9IHhfY291bnQ7CkBAIC0xNDMsMTIgKzE0MywxMiBAQAogCX0KIAogCS8qIG1ha2UgY2lyY3VsYXIgKi8KLQlkZXNjW2ZyYWdjb3VudC0xXS5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc2M7CisJZGVzY1tmcmFnY291bnQtMV0ubmV4dF9kZXNjX2FkZHIgPSBkZXNjOwogCi0JcHJfZGVidWcoInNldHVwIGRlc2M6IGRlc2MwPSVwLCBuZXh0MD0lbHgsIGRlc2MxPSVwLCIKLQkJIm5leHQxPSVseFxueF9jb3VudD0leCx5X2NvdW50PSV4LGFkZHI9MHglbHgsY2ZzPTB4JXhcbiIsCi0JCSYoZGVzY1swXSksIGRlc2NbMF0ubmV4dF9kZXNjX2FkZHIsCi0JCSYoZGVzY1sxXSksIGRlc2NbMV0ubmV4dF9kZXNjX2FkZHIsCisJcHJfZGVidWcoInNldHVwIGRlc2M6IGRlc2MwPSVwLCBuZXh0MD0lcCwgZGVzYzE9JXAsIgorCQkibmV4dDE9JXBcbnhfY291bnQ9JXgseV9jb3VudD0leCxhZGRyPTB4JWx4LGNmcz0weCV4XG4iLAorCQlkZXNjLCBkZXNjWzBdLm5leHRfZGVzY19hZGRyLAorCQlkZXNjKzEsIGRlc2NbMV0ubmV4dF9kZXNjX2FkZHIsCiAJCWRlc2NbMF0ueF9jb3VudCwgZGVzY1swXS55X2NvdW50LAogCQlkZXNjWzBdLnN0YXJ0X2FkZHIsIGRlc2NbMF0uY2ZnKTsKIH0KQEAgLTE4NCwyMiArMTg0LDIwIEBACiAJQlVHX09OKHNwb3J0LT5jdXJyX3J4X2Rlc2MgPT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpOwogCiAJLyogTWF5YmUgdGhlIGR1bW15IGJ1ZmZlciBkZXNjcmlwdG9yIHJpbmcgaXMgZGFtYWdlZCAqLwotCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfcnhfZGVzYysxKTsKKwlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYyArIDE7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKilnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKTsKKwlkZXNjID0gZ2V0X2RtYV9uZXh0X2Rlc2NfcHRyKHNwb3J0LT5kbWFfcnhfY2hhbik7CiAJLyogQ29weSB0aGUgZGVzY3JpcHRvciB3aGljaCB3aWxsIGJlIGRhbWFnZWQgdG8gYmFja3VwICovCiAJdGVtcF9kZXNjID0gKmRlc2M7CiAJZGVzYy0+eF9jb3VudCA9IDB4YTsKIAlkZXNjLT55X2NvdW50ID0gMDsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfcnhfZGVzYyk7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJLyogV2FpdGluZyBmb3IgZHVtbXkgYnVmZmVyIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBob29rZWQqLwogCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfcnhfY2hhbikgLQotCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9Ci0JCQkodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfcnhfZGVzYykKLQkJOworCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9IHNwb3J0LT5kdW1teV9yeF9kZXNjKQorCQljb250aW51ZTsKIAlzcG9ydC0+Y3Vycl9yeF9kZXNjID0gc3BvcnQtPmR1bW15X3J4X2Rlc2M7CiAJLyogUmVzdG9yZSB0aGUgZGFtYWdlZCBkZXNjcmlwdG9yICovCiAJKmRlc2MgPSB0ZW1wX2Rlc2M7CkBAIC0yMTAsMTQgKzIwOCwxMiBAQAogc3RhdGljIGlubGluZSBpbnQgc3BvcnRfcnhfZG1hX3N0YXJ0KHN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0LCBpbnQgZHVtbXkpCiB7CiAJaWYgKGR1bW15KSB7Ci0JCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IFwKLQkJCQkodW5zaWduZWQgbG9uZykgc3BvcnQtPmR1bW15X3J4X2Rlc2M7CisJCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCQlzcG9ydC0+Y3Vycl9yeF9kZXNjID0gc3BvcnQtPmR1bW15X3J4X2Rlc2M7CiAJfSBlbHNlCiAJCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZG1hX3J4X2Rlc2M7CiAKLQlzZXRfZG1hX25leHRfZGVzY19hZGRyKHNwb3J0LT5kbWFfcnhfY2hhbiwgXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5jdXJyX3J4X2Rlc2MpKTsKKwlzZXRfZG1hX25leHRfZGVzY19hZGRyKHNwb3J0LT5kbWFfcnhfY2hhbiwgc3BvcnQtPmN1cnJfcnhfZGVzYyk7CiAJc2V0X2RtYV94X2NvdW50KHNwb3J0LT5kbWFfcnhfY2hhbiwgMCk7CiAJc2V0X2RtYV94X21vZGlmeShzcG9ydC0+ZG1hX3J4X2NoYW4sIDApOwogCXNldF9kbWFfY29uZmlnKHNwb3J0LT5kbWFfcnhfY2hhbiwgKERNQUZMT1dfTEFSR0UgfCBORFNJWkVfOSB8IFwKQEAgLTIzMSwxNCArMjI3LDEyIEBACiBzdGF0aWMgaW5saW5lIGludCBzcG9ydF90eF9kbWFfc3RhcnQoc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQsIGludCBkdW1teSkKIHsKIAlpZiAoZHVtbXkpIHsKLQkJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJCSh1bnNpZ25lZCBsb25nKSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKKwkJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3R4X2Rlc2M7CiAJCXNwb3J0LT5jdXJyX3R4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAl9IGVsc2UKIAkJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kbWFfdHhfZGVzYzsKIAotCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV90eF9jaGFuLCBcCi0JCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmN1cnJfdHhfZGVzYykpOworCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV90eF9jaGFuLCBzcG9ydC0+Y3Vycl90eF9kZXNjKTsKIAlzZXRfZG1hX3hfY291bnQoc3BvcnQtPmRtYV90eF9jaGFuLCAwKTsKIAlzZXRfZG1hX3hfbW9kaWZ5KHNwb3J0LT5kbWFfdHhfY2hhbiwgMCk7CiAJc2V0X2RtYV9jb25maWcoc3BvcnQtPmRtYV90eF9jaGFuLApAQCAtMjYxLDExICsyNTUsOSBAQAogCQlCVUdfT04oc3BvcnQtPmN1cnJfcnhfZGVzYyAhPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYyk7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJd2hpbGUgKChnZXRfZG1hX2N1cnJfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKSAtCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0KLQkJCSh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9yeF9kZXNjKQotCQkJOwotCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPQotCQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZG1hX3J4X2Rlc2MpOworCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9IHNwb3J0LT5kdW1teV9yeF9kZXNjKQorCQkJY29udGludWU7CisJCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kbWFfcnhfZGVzYzsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlzcG9ydC0+Y3Vycl9yeF9kZXNjID0gc3BvcnQtPmRtYV9yeF9kZXNjOwogCX0gZWxzZSB7CkBAIC0zMTAsMjMgKzMwMiwyMSBAQAogCUJVR19PTihzcG9ydC0+ZHVtbXlfdHhfZGVzYyA9PSBOVUxMKTsKIAlCVUdfT04oc3BvcnQtPmN1cnJfdHhfZGVzYyA9PSBzcG9ydC0+ZHVtbXlfdHhfZGVzYyk7CiAKLQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmR1bW15X3R4X2Rlc2MrMSk7CisJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3R4X2Rlc2MgKyAxOwogCiAJLyogU2hvcnRlbiB0aGUgdGltZSBvbiBsYXN0IG5vcm1hbCBkZXNjcmlwdG9yICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRlc2MgPSAoc3RydWN0IGRtYXNnICopZ2V0X2RtYV9uZXh0X2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbik7CisJZGVzYyA9IGdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3R4X2NoYW4pOwogCS8qIFN0b3JlIHRoZSBkZXNjcmlwdG9yIHdoaWNoIHdpbGwgYmUgZGFtYWdlZCAqLwogCXRlbXBfZGVzYyA9ICpkZXNjOwogCWRlc2MtPnhfY291bnQgPSAweGE7CiAJZGVzYy0+eV9jb3VudCA9IDA7Ci0JZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZykoc3BvcnQtPmR1bW15X3R4X2Rlc2MpOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3R4X2Rlc2M7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCS8qIFdhaXRpbmcgZm9yIGR1bW15IGJ1ZmZlciBkZXNjcmlwdG9yIGlzIGFscmVhZHkgaG9va2VkKi8KIAl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3R4X2NoYW4pIC0gXAotCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9IFwKLQkJCSh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV90eF9kZXNjKQotCQk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3R4X2Rlc2MpCisJCWNvbnRpbnVlOwogCXNwb3J0LT5jdXJyX3R4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAkvKiBSZXN0b3JlIHRoZSBkYW1hZ2VkIGRlc2NyaXB0b3IgKi8KIAkqZGVzYyA9IHRlbXBfZGVzYzsKQEAgLTM0NywxMSArMzM3LDkgQEAKIAkJLyogSG9vayB0aGUgbm9ybWFsIGJ1ZmZlciBkZXNjcmlwdG9yICovCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJd2hpbGUgKChnZXRfZG1hX2N1cnJfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKSAtCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0KLQkJCSh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV90eF9kZXNjKQotCQkJOwotCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPQotCQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZG1hX3R4X2Rlc2MpOworCQkJc2l6ZW9mKHN0cnVjdCBkbWFzZykpICE9IHNwb3J0LT5kdW1teV90eF9kZXNjKQorCQkJY29udGludWU7CisJCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kbWFfdHhfZGVzYzsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmRtYV90eF9kZXNjOwogCX0gZWxzZSB7CkBAIC01MzYsMTkgKzUyNCwxNyBAQAogCXVuc2lnbmVkIGNvbmZpZzsKIAogCXByX2RlYnVnKCIlcyBlbnRlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKikgbDFfZGF0YV9zcmFtX2FsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKLSNlbHNlCi0JeworCWlmIChMMV9EQVRBX0FfTEVOR1RIKQorCQlkZXNjID0gbDFfZGF0YV9zcmFtX3phbGxvYygyICogc2l6ZW9mKCpkZXNjKSk7CisJZWxzZSB7CiAJCWRtYV9hZGRyX3QgYWRkcjsKIAkJZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCAyICogc2l6ZW9mKCpkZXNjKSwgJmFkZHIsIDApOworCQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCX0KLSNlbmRpZgogCWlmIChkZXNjID09IE5VTEwpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkdW1teSByeCBkZXNjXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChkZXNjLCAwLCAyICogc2l6ZW9mKCpkZXNjKSk7CiAJc3BvcnQtPmR1bW15X3J4X2Rlc2MgPSBkZXNjOwogCWRlc2MtPnN0YXJ0X2FkZHIgPSAodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfYnVmOwogCWNvbmZpZyA9IERNQUZMT1dfTEFSR0UgfCBORFNJWkVfOSB8IGNvbXB1dGVfd2RzaXplKHNwb3J0LT53ZHNpemUpCkBAIC01NTksOCArNTQ1LDggQEAKIAlkZXNjLT55X2NvdW50ID0gMDsKIAlkZXNjLT55X21vZGlmeSA9IDA7CiAJbWVtY3B5KGRlc2MrMSwgZGVzYywgc2l6ZW9mKCpkZXNjKSk7Ci0JZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZykoZGVzYysxKTsKLQlkZXNjWzFdLm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYzsKKwlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9IGRlc2MgKyAxOworCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSBkZXNjOwogCXJldHVybiAwOwogfQogCkBAIC01NzEsMTkgKzU1NywxNyBAQAogCiAJcHJfZGVidWcoIiVzIGVudGVyZWRcbiIsIF9fZnVuY19fKTsKIAotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCWRlc2MgPSAoc3RydWN0IGRtYXNnICopIGwxX2RhdGFfc3JhbV9hbGxvYygyICogc2l6ZW9mKCpkZXNjKSk7Ci0jZWxzZQotCXsKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJZGVzYyA9IGwxX2RhdGFfc3JhbV96YWxsb2MoMiAqIHNpemVvZigqZGVzYykpOworCWVsc2UgewogCQlkbWFfYWRkcl90IGFkZHI7CiAJCWRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgMiAqIHNpemVvZigqZGVzYyksICZhZGRyLCAwKTsKKwkJbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAl9Ci0jZW5kaWYKIAlpZiAoIWRlc2MpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkdW1teSB0eCBkZXNjXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChkZXNjLCAwLCAyICogc2l6ZW9mKCpkZXNjKSk7CiAJc3BvcnQtPmR1bW15X3R4X2Rlc2MgPSBkZXNjOwogCWRlc2MtPnN0YXJ0X2FkZHIgPSAodW5zaWduZWQgbG9uZylzcG9ydC0+ZHVtbXlfYnVmICsgXAogCQlzcG9ydC0+ZHVtbXlfY291bnQ7CkBAIC01OTUsOCArNTc5LDggQEAKIAlkZXNjLT55X2NvdW50ID0gMDsKIAlkZXNjLT55X21vZGlmeSA9IDA7CiAJbWVtY3B5KGRlc2MrMSwgZGVzYywgc2l6ZW9mKCpkZXNjKSk7Ci0JZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZykoZGVzYysxKTsKLQlkZXNjWzFdLm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYzsKKwlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9IGRlc2MgKyAxOworCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSBkZXNjOwogCXJldHVybiAwOwogfQogCkBAIC04NzIsMTcgKzg1NiwxNSBAQAogCXNwb3J0LT53ZHNpemUgPSB3ZHNpemU7CiAJc3BvcnQtPmR1bW15X2NvdW50ID0gZHVtbXlfY291bnQ7CiAKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlzcG9ydC0+ZHVtbXlfYnVmID0gbDFfZGF0YV9zcmFtX2FsbG9jKGR1bW15X2NvdW50ICogMik7Ci0jZWxzZQotCXNwb3J0LT5kdW1teV9idWYgPSBrbWFsbG9jKGR1bW15X2NvdW50ICogMiwgR0ZQX0tFUk5FTCk7Ci0jZW5kaWYKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJc3BvcnQtPmR1bW15X2J1ZiA9IGwxX2RhdGFfc3JhbV96YWxsb2MoZHVtbXlfY291bnQgKiAyKTsKKwllbHNlCisJCXNwb3J0LT5kdW1teV9idWYgPSBremFsbG9jKGR1bW15X2NvdW50ICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwb3J0LT5kdW1teV9idWYgPT0gTlVMTCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkdW1teSBidWZmZXJcbiIpOwogCQlnb3RvIF9fZXJyb3I7CiAJfQogCi0JbWVtc2V0KHNwb3J0LT5kdW1teV9idWYsIDAsIGR1bW15X2NvdW50ICogMik7CiAJcmV0ID0gc3BvcnRfY29uZmlnX3J4X2R1bW15KHNwb3J0KTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGNvbmZpZyByeCBkdW1teSByaW5nXG4iKTsKQEAgLTkzOSw2ICs5MjEsNyBAQAogCQlzcG9ydCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKHNwb3J0X2RvbmUpOworCiAvKgogKiBJdCBpcyBvbmx5IHVzZWQgdG8gc2VuZCBzZXZlcmFsIGJ5dGVzIHdoZW4gZG1hIGlzIG5vdCBlbmFibGVkCiAgKiBzcG9ydCBjb250cm9sbGVyIGlzIGNvbmZpZ3VyZWQgYnV0IG5vdCBlbmFibGVkLgpAQCAtMTAyOSw0ICsxMDEyLDMgQEAKIE1PRFVMRV9BVVRIT1IoIlJveSBIdWFuZyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTUE9SVCBkcml2ZXIgZm9yIEFESSBCbGFja2ZpbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKaW5kZXggZDBlMGQ2OS4uYjZjN2Y3YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwpAQCAtMTAsOSArMTAsMTEgQEAKIAogY29uZmlnIFNORF9TT0NfQUxMX0NPREVDUwogCXRyaXN0YXRlICJCdWlsZCBhbGwgQVNvQyBDT0RFQyBkcml2ZXJzIgorCXNlbGVjdCBTTkRfU09DX0wzCiAJc2VsZWN0IFNORF9TT0NfQUM5N19DT0RFQyBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUQxOTgwIGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BRDczMzExIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX0FLNDEwNCBpZiBTUElfTUFTVEVSCiAJc2VsZWN0IFNORF9TT0NfQUs0NTM1IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0NTNDI3MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19QQ00zMDA4CkBAIC0yNCw2ICsyNiw3IEBACiAJc2VsZWN0IFNORF9TT0NfVURBMTM0WAogCXNlbGVjdCBTTkRfU09DX1VEQTEzODAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004MzUwIGlmIE1GRF9XTTgzNTAKKwlzZWxlY3QgU05EX1NPQ19XTTg0MDAgaWYgTUZEX1dNODQwMAogCXNlbGVjdCBTTkRfU09DX1dNODUxMCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfV004NTgwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODcyOCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCkBAIC0zNCw2ICszNyw3IEBACiAJc2VsZWN0IFNORF9TT0NfV004OTAzIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk3MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5OTAgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV005NzA1IGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19XTTk3MTIgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX1dNOTcxMyBpZiBTTkRfU09DX0FDOTdfQlVTCiAgICAgICAgIGhlbHAKQEAgLTU4LDYgKzYyLDkgQEAKIGNvbmZpZyBTTkRfU09DX0FENzMzMTEKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19BSzQxMDQKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19BSzQ1MzUKIAl0cmlzdGF0ZQogCkBAIC02NSwxMiArNzIsNiBAQAogY29uZmlnIFNORF9TT0NfQ1M0MjcwCiAJdHJpc3RhdGUKIAotIyBDaXJydXMgTG9naWMgQ1M0MjcwIENvZGVjIEhhcmR3YXJlIE11dGUgU3VwcG9ydAotIyBTZWxlY3QgaWYgeW91IGhhdmUgZXh0ZXJuYWwgbXV0aW5nIGNpcmN1aXRyeSBhdHRhY2hlZCB0byB5b3VyIENTNDI3MC4KLWNvbmZpZyBTTkRfU09DX0NTNDI3MF9IV01VVEUKLQlib29sCi0JZGVwZW5kcyBvbiBTTkRfU09DX0NTNDI3MAotCiAjIENpcnJ1cyBMb2dpYyBDUzQyNzAgQ29kZWMgVkQgPSAzLjNWIEVycmF0YQogIyBTZWxlY3QgaWYgeW91IGFyZSBhZmZlY3RlZCBieSB0aGUgZXJyYXRhIHdoZXJlIHRoZSBwYXJ0IHdpbGwgbm90IGZ1bmN0aW9uCiAjIGlmIE1DTEsgZGl2aWRlLWJ5LTEuNSBpcyBzZWxlY3RlZCBhbmQgVkQgaXMgc2V0IHRvIDMuM1YuICBUaGUgZHJpdmVyIHdpbGwKQEAgLTkwLDcgKzkxLDYgQEAKIAogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDMjMKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gSTJDCiAKIGNvbmZpZyBTTkRfU09DX1RMVjMyMEFJQzI2CiAJdHJpc3RhdGUgIlRJIFRMVjMyMEFJQzI2IENvZGVjIHN1cHBvcnQiIGlmIFNORF9TT0NfT0ZfU0lNUExFCkBAIC05OCwxNSArOTgsMTIgQEAKIAogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDM1gKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gSTJDCiAKIGNvbmZpZyBTTkRfU09DX1RXTDQwMzAKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCiAKIGNvbmZpZyBTTkRfU09DX1VEQTEzNFgKICAgICAgICB0cmlzdGF0ZQotICAgICAgIHNlbGVjdCBTTkRfU09DX0wzCiAKIGNvbmZpZyBTTkRfU09DX1VEQTEzODAKICAgICAgICAgdHJpc3RhdGUKQEAgLTExNCw2ICsxMTEsOSBAQAogY29uZmlnIFNORF9TT0NfV004MzUwCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004NDAwCisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV004NTEwCiAJdHJpc3RhdGUKIApAQCAtMTQ0LDYgKzE0NCw5IEBACiBjb25maWcgU05EX1NPQ19XTTg5OTAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTk3MDUKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTk3MTIKIAl0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQppbmRleCBjNGRkYzlhLi4wMzBkMjQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKQEAgLTEsNiArMSw3IEBACiBzbmQtc29jLWFjOTctb2JqcyA6PSBhYzk3Lm8KIHNuZC1zb2MtYWQxOTgwLW9ianMgOj0gYWQxOTgwLm8KIHNuZC1zb2MtYWQ3MzMxMS1vYmpzIDo9IGFkNzMzMTEubworc25kLXNvYy1hazQxMDQtb2JqcyA6PSBhazQxMDQubwogc25kLXNvYy1hazQ1MzUtb2JqcyA6PSBhazQ1MzUubwogc25kLXNvYy1jczQyNzAtb2JqcyA6PSBjczQyNzAubwogc25kLXNvYy1sMy1vYmpzIDo9IGwzLm8KQEAgLTEzLDYgKzE0LDcgQEAKIHNuZC1zb2MtdWRhMTM0eC1vYmpzIDo9IHVkYTEzNHgubwogc25kLXNvYy11ZGExMzgwLW9ianMgOj0gdWRhMTM4MC5vCiBzbmQtc29jLXdtODM1MC1vYmpzIDo9IHdtODM1MC5vCitzbmQtc29jLXdtODQwMC1vYmpzIDo9IHdtODQwMC5vCiBzbmQtc29jLXdtODUxMC1vYmpzIDo9IHdtODUxMC5vCiBzbmQtc29jLXdtODU4MC1vYmpzIDo9IHdtODU4MC5vCiBzbmQtc29jLXdtODcyOC1vYmpzIDo9IHdtODcyOC5vCkBAIC0yMywxMiArMjUsMTQgQEAKIHNuZC1zb2Mtd204OTAzLW9ianMgOj0gd204OTAzLm8KIHNuZC1zb2Mtd204OTcxLW9ianMgOj0gd204OTcxLm8KIHNuZC1zb2Mtd204OTkwLW9ianMgOj0gd204OTkwLm8KK3NuZC1zb2Mtd205NzA1LW9ianMgOj0gd205NzA1Lm8KIHNuZC1zb2Mtd205NzEyLW9ianMgOj0gd205NzEyLm8KIHNuZC1zb2Mtd205NzEzLW9ianMgOj0gd205NzEzLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQykJKz0gc25kLXNvYy1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FEMTk4MCkJKz0gc25kLXNvYy1hZDE5ODAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUQ3MzMxMSkgKz0gc25kLXNvYy1hZDczMzExLm8KK29iai0kKENPTkZJR19TTkRfU09DX0FLNDEwNCkJKz0gc25kLXNvYy1hazQxMDQubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0NTM1KQkrPSBzbmQtc29jLWFrNDUzNS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DUzQyNzApCSs9IHNuZC1zb2MtY3M0MjcwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0wzKQkrPSBzbmQtc29jLWwzLm8KQEAgLTQxLDYgKzQ1LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1VEQTEzNFgpCSs9IHNuZC1zb2MtdWRhMTM0eC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19VREExMzgwKQkrPSBzbmQtc29jLXVkYTEzODAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004MzUwKQkrPSBzbmQtc29jLXdtODM1MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg0MDApCSs9IHNuZC1zb2Mtd204NDAwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODUxMCkJKz0gc25kLXNvYy13bTg1MTAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NTgwKQkrPSBzbmQtc29jLXdtODU4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3MjgpCSs9IHNuZC1zb2Mtd204NzI4Lm8KQEAgLTUxLDUgKzU2LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1dNODkwMykJKz0gc25kLXNvYy13bTg5MDMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTcxKQkrPSBzbmQtc29jLXdtODk3MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTApCSs9IHNuZC1zb2Mtd204OTkwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk5MSkJKz0gc25kLXNvYy13bTg5OTEubworb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzA1KQkrPSBzbmQtc29jLXdtOTcwNS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MTIpCSs9IHNuZC1zb2Mtd205NzEyLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcxMykJKz0gc25kLXNvYy13bTk3MTMubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hYzk3LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYwppbmRleCBmYjUzZTY1Li5iMGQ0YWYxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYwpAQCAtMzAsNyArMzAsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaW50IHJlZyA9IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSA/CiAJCSAgQUM5N19QQ01fRlJPTlRfREFDX1JBVEUgOiBBQzk3X1BDTV9MUl9BRENfUkFURTsKQEAgLTQxLDYgKzQxLDEwIEBACiAJCVNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfFwKIAkJU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFjOTdfZGFpX29wcyA9IHsKKwkucHJlcGFyZQk9IGFjOTdfcHJlcGFyZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhYzk3X2RhaSA9IHsKIAkubmFtZSA9ICJBQzk3IEhpRmkiLAogCS5hYzk3X2NvbnRyb2wgPSAxLApAQCAtNTYsOCArNjAsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gU1REX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IGFjOTdfcHJlcGFyZSx9LAorCS5vcHMgPSAmYWM5N19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFjOTdfZGFpKTsKIApAQCAtODQsMTAgKzg3LDEwIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJBQzk3IFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgQUM5N19WRVJTSU9OKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmICghc29jZGV2LT5jb2RlYykKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY2Rldi0+Y2FyZC0+Y29kZWMpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5uYW1lID0gIkFDOTciOwpAQCAtMTIzLDIzICsxMjYsMjEgQEAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCiBlcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYy0+cmVnX2NhY2hlKTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFjOTdfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKCFjb2RlYykKIAkJcmV0dXJuIDA7CiAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMtPnJlZ19jYWNoZSk7Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0OSw3ICsxNTAsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlzbmRfYWM5N19zdXNwZW5kKHNvY2Rldi0+Y29kZWMtPmFjOTcpOworCXNuZF9hYzk3X3N1c3BlbmQoc29jZGV2LT5jYXJkLT5jb2RlYy0+YWM5Nyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OCw3ICsxNTksNyBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlzbmRfYWM5N19yZXN1bWUoc29jZGV2LT5jb2RlYy0+YWM5Nyk7CisJc25kX2FjOTdfcmVzdW1lKHNvY2Rldi0+Y2FyZC0+Y29kZWMtPmFjOTcpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jIGIvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYwppbmRleCA3M2ZkYmI0Li5kZGIzYjA4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKQEAgLTkzLDIwICs5Myw2IEBACiBTT0NfU0lOR0xFKCJNaWMgQm9vc3QgU3dpdGNoIiwgQUM5N19NSUMsIDYsIDEsIDApLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IGFkMTk4MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZDE5ODBfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsIHNuZF9zb2NfY25ldygKLQkJCQkmYWQxOTgwX3NuZF9hYzk3X2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGFjOTdfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJdW5zaWduZWQgaW50IHJlZykKIHsKQEAgLTEyMyw3ICsxMDksNyBAQAogCWRlZmF1bHQ6CiAJCXJlZyA9IHJlZyA+PiAxOwogCi0JCWlmIChyZWcgPj0gKEFSUkFZX1NJWkUoYWQxOTgwX3JlZykpKQorCQlpZiAocmVnID49IEFSUkFZX1NJWkUoYWQxOTgwX3JlZykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlyZXR1cm4gY2FjaGVbcmVnXTsKQEAgLTEzNyw3ICsxMjMsNyBAQAogCiAJc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CiAJcmVnID0gcmVnID4+IDE7Ci0JaWYgKHJlZyA8IChBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKSkKKwlpZiAocmVnIDwgQVJSQVlfU0laRShhZDE5ODBfcmVnKSkKIAkJY2FjaGVbcmVnXSA9IHZhbDsKIAogCXJldHVybiAwOwpAQCAtMjAwLDEwICsxODYsMTAgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIkFEMTk4MCBTb0MgQXVkaW8gQ29kZWNcbiIpOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNvY2Rldi0+Y29kZWMgPT0gTlVMTCkKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+cmVnX2NhY2hlID0KQEAgLTI2OSw3ICsyNTUsOCBAQAogCWV4dF9zdGF0dXMgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUywgZXh0X3N0YXR1cyZ+MHgzODAwKTsKIAotCWFkMTk4MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhZDE5ODBfc25kX2FjOTdfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShhZDE5ODBfc25kX2FjOTdfY29udHJvbHMpKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWQxOTgwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CkBAIC0yODgsMTUgKzI3NSwxNSBAQAogCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCiBjYWNoZV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhZDE5ODBfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYwppbmRleCBiMDkyODlhLi5lNjFkYWM1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYwpAQCAtNTMsNyArNTMsNyBAQAogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCWNvZGVjLT5kYWkgPSAmYWQ3MzMxMV9kYWk7CiAJY29kZWMtPm51bV9kYWkgPSAxOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CiAKQEAgLTc1LDE1ICs3NSwxNSBAQAogcmVnaXN0ZXJfZXJyOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiBwY21fZXJyOgotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWQ3MzMxMV9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oCmluZGV4IDUwN2NlMGMuLjU2OTU3M2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oCkBAIC03MCw3ICs3MCw3IEBACiAjZGVmaW5lIFJFR0RfSUdTKHgpCQkoeCAmIDB4NykKICNkZWZpbmUgUkVHRF9STU9ECQkoMSA8PCAzKQogI2RlZmluZSBSRUdEX09HUyh4KQkJKCh4ICYgMHg3KSA8PCA0KQotI2RlZmluZSBSRUdEX01VVEUJCSh4IDw8IDcpCisjZGVmaW5lIFJFR0RfTVVURQkJKDEgPDwgNykKIAogLyogQ29udHJvbCByZWdpc3RlciBFICovCiAjZGVmaW5lIENUUkxfUkVHX0UJKDQgPDwgOCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDdiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogQUs0MTA0IEFMU0EgU29DIChBU29DKSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorCisjaW5jbHVkZSAiYWs0MTA0LmgiCisKKy8qIEFLNDEwNCByZWdpc3RlcnMgYWRkcmVzc2VzICovCisjZGVmaW5lIEFLNDEwNF9SRUdfQ09OVFJPTDEJCTB4MDAKKyNkZWZpbmUgQUs0MTA0X1JFR19SRVNFUlZFRAkJMHgwMQorI2RlZmluZSBBSzQxMDRfUkVHX0NPTlRST0wyCQkweDAyCisjZGVmaW5lIEFLNDEwNF9SRUdfVFgJCQkweDAzCisjZGVmaW5lIEFLNDEwNF9SRUdfQ0hOX1NUQVRVUyh4KQkoKHgpICsgMHgwNCkKKyNkZWZpbmUgQUs0MTA0X05VTV9SRUdTCQkJMTAKKworI2RlZmluZSBBSzQxMDRfUkVHX01BU0sJCQkweDFmCisjZGVmaW5lIEFLNDEwNF9SRUFECQkJMHhjMAorI2RlZmluZSBBSzQxMDRfV1JJVEUJCQkweGUwCisjZGVmaW5lIEFLNDEwNF9SRVNFUlZFRF9WQUwJCTB4NWIKKworLyogQml0IG1hc2tzIGZvciBBSzQxMDQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9SU1ROCQkoMSA8PCAwKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDFfUFcJCSgxIDw8IDEpCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9ESUYwCQkoMSA8PCAyKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDFfRElGMQkJKDEgPDwgMykKKworI2RlZmluZSBBSzQxMDRfQ09OVFJPTDJfU0VMMAkJKDEgPDwgMCkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wyX1NFTDEJCSgxIDw8IDEpCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMl9NT0RFCQkoMSA8PCAyKQorCisjZGVmaW5lIEFLNDEwNF9UWF9UWEUJCQkoMSA8PCAwKQorI2RlZmluZSBBSzQxMDRfVFhfVgkJCSgxIDw8IDEpCisKKyNkZWZpbmUgRFJWX05BTUUgImFrNDEwNCIKKworc3RydWN0IGFrNDEwNF9wcml2YXRlIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1OCByZWdfY2FjaGVbQUs0MTA0X05VTV9SRUdTXTsKK307CisKK3N0YXRpYyBpbnQgYWs0MTA0X2ZpbGxfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCXU4ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZTsgaSsrKSB7CisJCWludCByZXQgPSBzcGlfdzhyOChzcGksIGkgfCBBSzQxMDRfUkVBRCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgIlNQSSB3cml0ZSBmYWlsdXJlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZWdfY2FjaGVbaV0gPSByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWs0MTA0X3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkJICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXU4ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJlZ19jYWNoZVtyZWddOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9zcGlfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnICY9IEFLNDEwNF9SRUdfTUFTSzsKKwlyZWcgfD0gQUs0MTA0X1dSSVRFOworCisJLyogb25seSB3cml0ZSB0byB0aGUgaGFyZHdhcmUgaWYgdmFsdWUgaGFzIGNoYW5nZWQgKi8KKwlpZiAoY2FjaGVbcmVnXSAhPSB2YWx1ZSkgeworCQl1OCB0bXBbMl0gPSB7IHJlZywgdmFsdWUgfTsKKwkJaWYgKHNwaV93cml0ZShzcGksIHRtcCwgc2l6ZW9mKHRtcCkpKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgIlNQSSB3cml0ZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQljYWNoZVtyZWddID0gdmFsdWU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCB2YWwgPSAwOworCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXZhbCAmPSB+KEFLNDEwNF9DT05UUk9MMV9ESUYwIHwgQUs0MTA0X0NPTlRST0wxX0RJRjEpOworCisJLyogc2V0IERBSSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJdmFsIHw9IEFLNDEwNF9DT05UUk9MMV9ESUYwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJdmFsIHw9IEFLNDEwNF9DT05UUk9MMV9ESUYwIHwgQUs0MTA0X0NPTlRST0wxX0RJRjE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgImludmFsaWQgZGFpIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRoaXMgZGV2aWNlIGNhbiBvbmx5IGJlIHNsYXZlICovCisJaWYgKChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgIT0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSwgdmFsKTsKK30KKworc3RhdGljIGludCBhazQxMDRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJaW50IHZhbCA9IDA7CisKKwkvKiBzZXQgdGhlIElFQzk1OCBiaXRzOiBjb25zdW1lciBtb2RlLCBubyBjb3B5cmlnaHQgYml0ICovCisJdmFsIHw9IElFQzk1OF9BRVMwX0NPTl9OT1RfQ09QWVJJR0hUOworCWFrNDEwNF9zcGlfd3JpdGUoY29kZWMsIEFLNDEwNF9SRUdfQ0hOX1NUQVRVUygwKSwgdmFsKTsKKworCXZhbCA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDQ0MTAwOgorCQl2YWwgfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzQ0MTAwOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQl2YWwgfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzQ4MDAwOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCQl2YWwgfD0gSUVDOTU4X0FFUzNfQ09OX0ZTXzMyMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bnN1cHBvcnRlZCBzYW1wbGluZyByYXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGFrNDEwNF9zcGlfd3JpdGUoY29kZWMsIEFLNDEwNF9SRUdfQ0hOX1NUQVRVUygzKSwgdmFsKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWs0MTAxX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IGFrNDEwNF9od19wYXJhbXMsCisJLnNldF9mbXQgPSBhazQxMDRfc2V0X2RhaV9mbXQsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgYWs0MTA0X2RhaSA9IHsKKwkubmFtZSA9IERSVl9OQU1FLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJIFNORFJWX1BDTV9SQVRFXzMyMDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFICB8CisJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUKKwl9LAorCS5vcHMgPSAmYWs0MTAxX2RhaV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmFrNDEwNF9jb2RlYzsKKworc3RhdGljIGludCBhazQxMDRfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBhazQxMDRfcHJpdmF0ZSAqYWs0MTA0OworCWludCByZXQsIHZhbDsKKworCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisJc3BpLT5tb2RlID0gU1BJX01PREVfMDsKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWFrNDEwNCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhazQxMDRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghYWs0MTA0KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGNvZGVjXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY29kZWMgPSAmYWs0MTA0LT5jb2RlYzsKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPmRldiA9ICZzcGktPmRldjsKKwljb2RlYy0+bmFtZSA9IERSVl9OQU1FOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5kYWkgPSAmYWs0MTA0X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IGFrNDEwNDsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOworCWNvZGVjLT5yZWdfY2FjaGUgPSBhazQxMDQtPnJlZ19jYWNoZTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBSzQxMDRfTlVNX1JFR1M7CisKKwkvKiByZWFkIGFsbCByZWdzIGFuZCBmaWxsIHRoZSBjYWNoZSAqLworCXJldCA9IGFrNDEwNF9maWxsX2NhY2hlKGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiByZWFkIHRoZSAncmVzZXJ2ZWQnIHJlZ2lzdGVyIC0gYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2hlZXQsIGl0CisJICogc2hvdWxkIGNvbnRhaW4gMHg1Yi4gTm90IGEgZ29vZCB3YXkgdG8gdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZgorCSAqIHRoZSBkZXZpY2UsIGJ1dCB0aGVyZSBpcyBubyBoYXJkd2FyZSBJRCByZWdpc3Rlci4gKi8KKwlpZiAoYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX1JFU0VSVkVEKSAhPQorCQkJCQkgQUs0MTA0X1JFU0VSVkVEX1ZBTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJfQorCisJLyogc2V0IHBvd2VyLXVwIGFuZCBub24tcmVzZXQgYml0cyAqLworCXZhbCA9IGFrNDEwNF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSk7CisJdmFsIHw9IEFLNDEwNF9DT05UUk9MMV9QVyB8IEFLNDEwNF9DT05UUk9MMV9SU1ROOworCXJldCA9IGFrNDEwNF9zcGlfd3JpdGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKworCS8qIGVuYWJsZSB0cmFuc21pdHRlciAqLworCXZhbCA9IGFrNDEwNF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0MTA0X1JFR19UWCk7CisJdmFsIHw9IEFLNDEwNF9UWF9UWEU7CisJcmV0ID0gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19UWCwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCisJYWs0MTA0X2NvZGVjID0gY29kZWM7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmFrNDEwNF9kYWkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERBSVxuIik7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBhazQxMDQpOworCWRldl9pbmZvKCZzcGktPmRldiwgIlNQSSBkZXZpY2UgaW5pdGlhbGl6ZWRcbiIpOworCXJldHVybiAwOworCitlcnJvcl9mcmVlX2NvZGVjOgorCWtmcmVlKGFrNDEwNCk7CisJYWs0MTA0X2RhaS5kZXYgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFrNDEwNF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldCwgdmFsOworCXN0cnVjdCBhazQxMDRfcHJpdmF0ZSAqYWs0MTA0ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoJmFrNDEwNC0+Y29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJLyogY2xlYXIgcG93ZXItdXAgYW5kIG5vbi1yZXNldCBiaXRzICovCisJdmFsICY9IH4oQUs0MTA0X0NPTlRST0wxX1BXIHwgQUs0MTA0X0NPTlRST0wxX1JTVE4pOworCXJldCA9IGFrNDEwNF9zcGlfd3JpdGUoJmFrNDEwNC0+Y29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlhazQxMDRfY29kZWMgPSBOVUxMOworCWtmcmVlKGFrNDEwNCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBhazQxMDRfY29kZWM7CisJaW50IHJldDsKKworCS8qIENvbm5lY3QgdGhlIGNvZGVjIHRvIHRoZSBzb2NkZXYuICBzbmRfc29jX25ld19wY21zKCkgbmVlZHMgdGhpcy4gKi8KKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CisKKwkvKiBSZWdpc3RlciBQQ01zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFJlZ2lzdGVyIHRoZSBzb2NkZXYgKi8KKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMDRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXJldHVybiAwOworfTsKKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZpY2VfYWs0MTA0ID0geworCS5wcm9iZSA9IAlhazQxMDRfcHJvYmUsCisJLnJlbW92ZSA9IAlhazQxMDRfcmVtb3ZlCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2RldmljZV9hazQxMDQpOworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWs0MTA0X3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciAgPSB7CisJCS5uYW1lICAgPSBEUlZfTkFNRSwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICA9IGFrNDEwNF9zcGlfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFrNDEwNF9zcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFrNDEwNF9pbml0KHZvaWQpCit7CisJcHJfaW5mbygiQXNhaGkgS2FzZWkgQUs0MTA0IEFMU0EgU29DIENvZGVjIERyaXZlclxuIik7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFrNDEwNF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFrNDEwNF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFrNDEwNF9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhazQxMDRfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhazQxMDRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFzYWhpIEthc2VpIEFLNDEwNCBBTFNBIFNvQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4OGZlNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9BSzQxMDRfSAorI2RlZmluZSBfQUs0MTA0X0gKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBhazQxMDRfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2aWNlX2FrNDEwNDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jIGIvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYwppbmRleCA4MTMwMGQ4ZC4uMWY2M2QzOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCkBAIC0xNTUsMjEgKzE1NSw2IEBACiAJU09DX1NJTkdMRSgiTWljIFNpZGV0b25lIFZvbHVtZSIsIEFLNDUzNV9WT0wsIDQsIDcsIDApLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IGFrNDUzNV9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhazQ1MzVfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZhazQ1MzVfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIE1vbm8gMSBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFrNDUzNV9tb25vMV9taXhlcl9jb250cm9sc1tdID0gewogCVNPQ19EQVBNX1NJTkdMRSgiTWljIFNpZGV0b25lIFN3aXRjaCIsIEFLNDUzNV9TSUcxLCA0LCAxLCAwKSwKQEAgLTM0NCw3ICszMjksNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWs0NTM1X3ByaXYgKmFrNDUzNSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTggbW9kZTIgPSBhazQ1MzVfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDUzNV9NT0RFMikgJiB+KDB4MyA8PCA1KTsKIAlpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyksIGZzID0gMjU2OwpAQCAtNDM2LDYgKzQyMSwxMyBAQAogCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHxcCiAJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFrNDUzNV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBhazQ1MzVfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYWs0NTM1X3NldF9kYWlfZm10LAorCS5kaWdpdGFsX211dGUJPSBhazQ1MzVfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IGFrNDUzNV9zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhazQ1MzVfZGFpID0gewogCS5uYW1lID0gIkFLNDUzNSIsCiAJLnBsYXliYWNrID0gewpAQCAtNDUwLDE5ICs0NDIsMTQgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IEFLNDUzNV9SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBhazQ1MzVfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IGFrNDUzNV9zZXRfZGFpX2ZtdCwKLQkJLmRpZ2l0YWxfbXV0ZSA9IGFrNDUzNV9tdXRlLAotCQkuc2V0X3N5c2NsayA9IGFrNDUzNV9zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmYWs0NTM1X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYWs0NTM1X2RhaSk7CiAKIHN0YXRpYyBpbnQgYWs0NTM1X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTQ3MSw3ICs0NTgsNyBAQAogc3RhdGljIGludCBhazQ1MzVfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJYWs0NTM1X3N5bmMoY29kZWMpOwogCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCWFrNDUzNV9zZXRfYmlhc19sZXZlbChjb2RlYywgY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCk7CkBAIC00ODQsNyArNDcxLDcgQEAKICAqLwogc3RhdGljIGludCBhazQ1MzVfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJBSzQ1MzUiOwpAQCAtNTEwLDcgKzQ5Nyw4IEBACiAJLyogcG93ZXIgb24gZGV2aWNlICovCiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKLQlhazQ1MzVfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWs0NTM1X3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFrNDUzNV9zbmRfY29udHJvbHMpKTsKIAlhazQ1MzVfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTUzNyw3ICs1MjUsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGFrNDUzNV9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC02MzYsNyArNjI0LDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gYWs0NTM1OwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTY2Myw3ICs2NTEsNyBAQAogc3RhdGljIGludCBhazQ1MzVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCmluZGV4IGYxYWEwYzMuLjdmYTA5YTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwpAQCAtMywyNyArMywyMiBAQAogICoKICAqIEF1dGhvcjogVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4KICAqCi0gKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQotICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMKKyAqIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlcgorICogZXhwcmVzcyBvciBpbXBsaWVkLgogICoKICAqIFRoaXMgaXMgYW4gQVNvQyBkZXZpY2UgZHJpdmVyIGZvciB0aGUgQ2lycnVzIExvZ2ljIENTNDI3MCBjb2RlYy4KICAqCiAgKiBDdXJyZW50IGZlYXR1cmVzL2xpbWl0YXRpb25zOgogICoKLSAqIDEpIFNvZnR3YXJlIG1vZGUgaXMgc3VwcG9ydGVkLiAgU3RhbmQtYWxvbmUgbW9kZSBpcyBhdXRvbWF0aWNhbGx5Ci0gKiAgICBzZWxlY3RlZCBpZiBJMkMgaXMgZGlzYWJsZWQgb3IgaWYgYSBDUzQyNzAgaXMgbm90IGZvdW5kIG9uIHRoZSBJMkMKLSAqICAgIGJ1cy4gIEhvd2V2ZXIsIHN0YW5kLWFsb25lIG1vZGUgaXMgb25seSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQgYmVjYXVzZQotICogICAgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIHlldCBmb3IgdGhpcyBkcml2ZXIgYW5kIHRoZSBtYWNoaW5lIGRyaXZlciB0bwotICogICAgY29tbXVuaWNhdGUgdGhlIHZhbHVlcyBvZiB0aGUgTTAsIE0xLCBNQ0xLMSwgYW5kIE1DTEsyIHBpbnMuCi0gKiAyKSBPbmx5IEkyQyBpcyBzdXBwb3J0ZWQsIG5vdCBTUEkKLSAqIDMpIE9ubHkgTWFzdGVyIG1vZGUgaXMgc3VwcG9ydGVkLCBub3QgU2xhdmUuCi0gKiA0KSBUaGUgbWFjaGluZSBkcml2ZXIncyAnc3RhcnR1cCcgZnVuY3Rpb24gbXVzdCBjYWxsCi0gKiAgICBjczQyNzBfc2V0X2RhaV9zeXNjbGsoKSB3aXRoIHRoZSB2YWx1ZSBvZiBNQ0xLLgotICogNSkgT25seSBJMlMgYW5kIGxlZnQtanVzdGlmaWVkIG1vZGVzIGFyZSBzdXBwb3J0ZWQKLSAqIDYpIFBvd2VyIG1hbmFnZW1lbnQgaXMgbm90IHN1cHBvcnRlZAotICogNykgVGhlIG9ubHkgc3VwcG9ydGVkIGNvbnRyb2wgaXMgdm9sdW1lIGFuZCBoYXJkd2FyZSBtdXRlIChpZiBlbmFibGVkKQorICogLSBTb2Z0d2FyZSBtb2RlIGlzIHN1cHBvcnRlZC4gIFN0YW5kLWFsb25lIG1vZGUgaXMgbm90IHN1cHBvcnRlZC4KKyAqIC0gT25seSBJMkMgaXMgc3VwcG9ydGVkLCBub3QgU1BJCisgKiAtIFN1cHBvcnQgZm9yIG1hc3RlciBhbmQgc2xhdmUgbW9kZQorICogLSBUaGUgbWFjaGluZSBkcml2ZXIncyAnc3RhcnR1cCcgZnVuY3Rpb24gbXVzdCBjYWxsCisgKiAgIGNzNDI3MF9zZXRfZGFpX3N5c2NsaygpIHdpdGggdGhlIHZhbHVlIG9mIE1DTEsuCisgKiAtIE9ubHkgSTJTIGFuZCBsZWZ0LWp1c3RpZmllZCBtb2RlcyBhcmUgc3VwcG9ydGVkCisgKiAtIFBvd2VyIG1hbmFnZW1lbnQgaXMgbm90IHN1cHBvcnRlZAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM1LDE4ICszMCw2IEBACiAKICNpbmNsdWRlICJjczQyNzAuaCIKIAotLyogSWYgSTJDIGlzIGRlZmluZWQsIHRoZW4gd2Ugc3VwcG9ydCBzb2Z0d2FyZSBtb2RlLiAgSG93ZXZlciwgaWYgd2UncmUKLSAgIG5vdCBjb21waWxlZCBhcyBtb2R1bGUgYnV0IEkyQyBpcywgdGhlbiB3ZSBjYW4ndCB1c2UgSTJDIGNhbGxzLiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgKGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLSNkZWZpbmUgVVNFX0kyQwotI2VuZGlmCi0KLS8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIENTNDI3MCAqLwotc3RydWN0IGNzNDI3MF9wcml2YXRlIHsKLQl1bnNpZ25lZCBpbnQgbWNsazsgLyogSW5wdXQgZnJlcXVlbmN5IG9mIHRoZSBNQ0xLIHBpbiAqLwotCXVuc2lnbmVkIGludCBtb2RlOyAvKiBUaGUgbW9kZSAoSTJTIG9yIGxlZnQtanVzdGlmaWVkKSAqLwotfTsKLQogLyoKICAqIFRoZSBjb2RlYyBpc24ndCByZWFsbHkgYmlnLWVuZGlhbiBvciBsaXR0bGUtZW5kaWFuLCBzaW5jZSB0aGUgSTJTCiAgKiBpbnRlcmZhY2UgcmVxdWlyZXMgZGF0YSB0byBiZSBzZW50IHNlcmlhbGx5IHdpdGggdGhlIE1TYml0IGZpcnN0LgpAQCAtNjAsOCArNDMsNiBAQAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0JFIHwgXAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfQkUpCiAKLSNpZmRlZiBVU0VfSTJDCi0KIC8qIENTNDI3MCByZWdpc3RlcnMgYWRkcmVzc2VzICovCiAjZGVmaW5lIENTNDI3MF9DSElQSUQJMHgwMQkvKiBDaGlwIElEICovCiAjZGVmaW5lIENTNDI3MF9QV1JDVEwJMHgwMgkvKiBQb3dlciBDb250cm9sICovCkBAIC0xMjEsOCArMTAyLDIyIEBACiAjZGVmaW5lIENTNDI3MF9NVVRFX0RBQ19BCTB4MDEKICNkZWZpbmUgQ1M0MjcwX01VVEVfREFDX0IJMHgwMgogCi0vKgotICogQ2xvY2sgUmF0aW8gU2VsZWN0aW9uIGZvciBNYXN0ZXIgTW9kZSB3aXRoIEkyQyBlbmFibGVkCisvKiBQcml2YXRlIGRhdGEgZm9yIHRoZSBDUzQyNzAgKi8KK3N0cnVjdCBjczQyNzBfcHJpdmF0ZSB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTggcmVnX2NhY2hlW0NTNDI3MF9OVU1SRUdTXTsKKwl1bnNpZ25lZCBpbnQgbWNsazsgLyogSW5wdXQgZnJlcXVlbmN5IG9mIHRoZSBNQ0xLIHBpbiAqLworCXVuc2lnbmVkIGludCBtb2RlOyAvKiBUaGUgbW9kZSAoSTJTIG9yIGxlZnQtanVzdGlmaWVkKSAqLworCXVuc2lnbmVkIGludCBzbGF2ZV9tb2RlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY3M0MjcwX21vZGVfcmF0aW9zIC0gY2xvY2sgcmF0aW8gdGFibGVzCisgKiBAcmF0aW86IHRoZSByYXRpbyBvZiBNQ0xLIHRvIHRoZSBzYW1wbGUgcmF0ZQorICogQHNwZWVkX21vZGU6IHRoZSBTcGVlZCBNb2RlIGJpdHMgdG8gc2V0IGluIHRoZSBNb2RlIENvbnRyb2wgcmVnaXN0ZXIgZm9yCisgKiAgICAgICAgICAgICAgdGhpcyByYXRpbworICogQG1jbGs6IHRoZSBSYXRpbyBTZWxlY3QgYml0cyB0byBzZXQgaW4gdGhlIE1vZGUgQ29udHJvbCByZWdpc3RlciBmb3IgdGhpcworICogICAgICAgIHJhdGlvCiAgKgogICogVGhlIGRhdGEgZm9yIHRoaXMgY2hhcnQgaXMgdGFrZW4gZnJvbSBUYWJsZSA1IG9mIHRoZSBDUzQyNzAgcmVmZXJlbmNlCiAgKiBtYW51YWwuCkBAIC0xMzEsMzEgKzEyNiwzMCBAQAogICogSXQgaXMgYWxzbyB1c2VkIGJ5IGNzNDI3MF9zZXRfZGFpX3N5c2NsaygpIHRvIHRlbGwgQUxTQSB3aGljaCBzYW1wbGluZwogICogcmF0ZXMgdGhlIENTNDI3MCBjdXJyZW50bHkgc3VwcG9ydHMuCiAgKgotICogRWFjaCBlbGVtZW50IGluIHRoaXMgYXJyYXkgY29ycmVzcG9uZHMgdG8gdGhlIHJhdGlvcyBpbiBtY2xrX3JhdGlvc1tdLgotICogVGhlc2UgdHdvIGFycmF5cyBuZWVkIHRvIGJlIGluIHN5bmMuCi0gKgotICogJ3NwZWVkX21vZGUnIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBwYXR0ZXJuIHRvIGJlIHdyaXR0ZW4gdG8gdGhlCisgKiBAc3BlZWRfbW9kZSBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3cml0dGVuIHRvIHRoZQogICogTU9ERSBiaXRzIG9mIHRoZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIKICAqCi0gKiAnbWNsaycgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd2lydGVuIHRvIHRoZSBNQ0xLIGJpdHMgb2YKKyAqIEBtY2xrIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBwYXR0ZXJuIHRvIGJlIHdpcnRlbiB0byB0aGUgTUNMSyBiaXRzIG9mCiAgKiB0aGUgTW9kZSBDb250cm9sIFJlZ2lzdGVyLgogICoKICAqIEluIHNpdHVhdGlvbnMgd2hlcmUgYSBzaW5nbGUgcmF0aW8gaXMgcmVwcmVzZW50ZWQgYnkgbXVsdGlwbGUgc3BlZWQKICAqIG1vZGVzLCB3ZSBmYXZvciB0aGUgc2xvd2VzdCBzcGVlZC4gIEUuZywgZm9yIGEgcmF0aW8gb2YgMTI4LCB3ZSBwaWNrCiAgKiBkb3VibGUtc3BlZWQgaW5zdGVhZCBvZiBxdWFkLXNwZWVkLiAgSG93ZXZlciwgdGhlIENTNDI3MCBlcnJhdGEgc3RhdGVzCi0gKiB0aGF0IERpdmlkZS1CeS0xLjUgY2FuIGNhdXNlIGZhaWx1cmVzLCBzbyB3ZSBhdm9pZCB0aGF0IG1vZGUgd2hlcmUKKyAqIHRoYXQgZGl2aWRlLUJ5LTEuNSBjYW4gY2F1c2UgZmFpbHVyZXMsIHNvIHdlIGF2b2lkIHRoYXQgbW9kZSB3aGVyZQogICogcG9zc2libGUuCiAgKgotICogRVJSQVRBOiBUaGVyZSBpcyBhbiBlcnJhdGEgZm9yIHRoZSBDUzQyNzAgd2hlcmUgZGl2aWRlLWJ5LTEuNSBkb2VzIG5vdAotICogd29yayBpZiBWRCA9IDMuM1YuICBJZiB0aGlzIGVmZmVjdHMgeW91LCBzZWxlY3QgdGhlCisgKiBFcnJhdGE6IFRoZXJlIGlzIGFuIGVycmF0YSBmb3IgdGhlIENTNDI3MCB3aGVyZSBkaXZpZGUtYnktMS41IGRvZXMgbm90CisgKiB3b3JrIGlmIFZkIGlzIDMuM1YuICBJZiB0aGlzIGVmZmVjdHMgeW91LCBzZWxlY3QgdGhlCiAgKiBDT05GSUdfU05EX1NPQ19DUzQyNzBfVkQzM19FUlJBVEEgS2NvbmZpZyBvcHRpb24sIGFuZCB0aGUgZHJpdmVyIHdpbGwKICAqIG5ldmVyIHNlbGVjdCBhbnkgc2FtcGxlIHJhdGVzIHRoYXQgcmVxdWlyZSBkaXZpZGUtYnktMS41LgogICovCi1zdGF0aWMgc3RydWN0IHsKK3N0cnVjdCBjczQyNzBfbW9kZV9yYXRpb3MgewogCXVuc2lnbmVkIGludCByYXRpbzsKIAl1OCBzcGVlZF9tb2RlOwogCXU4IG1jbGs7Ci19IGNzNDI3MF9tb2RlX3JhdGlvc1tdID0geworfTsKKworc3RhdGljIHN0cnVjdCBjczQyNzBfbW9kZV9yYXRpb3MgY3M0MjcwX21vZGVfcmF0aW9zW10gPSB7CiAJezY0LCBDUzQyNzBfTU9ERV80WCwgQ1M0MjcwX01PREVfRElWMX0sCiAjaWZuZGVmIENPTkZJR19TTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQQogCXs5NiwgQ1M0MjcwX01PREVfNFgsIENTNDI3MF9NT0RFX0RJVjE1fSwKQEAgLTE3MiwzNCArMTY2LDI3IEBACiAvKiBUaGUgbnVtYmVyIG9mIE1DTEsvTFJDSyByYXRpb3Mgc3VwcG9ydGVkIGJ5IHRoZSBDUzQyNzAgKi8KICNkZWZpbmUgTlVNX01DTEtfUkFUSU9TCQlBUlJBWV9TSVpFKGNzNDI3MF9tb2RlX3JhdGlvcykKIAotLyoKLSAqIERldGVybWluZSB0aGUgQ1M0MjcwIHNhbXBsZXMgcmF0ZXMuCisvKioKKyAqIGNzNDI3MF9zZXRfZGFpX3N5c2NsayAtIGRldGVybWluZSB0aGUgQ1M0MjcwIHNhbXBsZXMgcmF0ZXMuCisgKiBAY29kZWNfZGFpOiB0aGUgY29kZWMgREFJCisgKiBAY2xrX2lkOiB0aGUgY2xvY2sgSUQgKGlnbm9yZWQpCisgKiBAZnJlcTogdGhlIE1DTEsgaW5wdXQgZnJlcXVlbmN5CisgKiBAZGlyOiB0aGUgY2xvY2sgZGlyZWN0aW9uIChpZ25vcmVkKQogICoKLSAqICdmcmVxJyBpcyB0aGUgaW5wdXQgZnJlcXVlbmN5IHRvIE1DTEsuICBUaGUgb3RoZXIgcGFyYW1ldGVycyBhcmUgaWdub3JlZC4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZWxsIHRoZSBjb2RlYyBkcml2ZXIgd2hhdCB0aGUgaW5wdXQgTUNMSworICogZnJlcXVlbmN5IGlzLgogICoKICAqIFRoZSB2YWx1ZSBvZiBNQ0xLIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHNhbXBsZSByYXRlcyBhcmUgc3VwcG9ydGVkCiAgKiBieSB0aGUgQ1M0MjcwLiAgVGhlIHJhdGlvIG9mIE1DTEsgLyBGcyBtdXN0IGJlIGVxdWFsIHRvIG9uZSBvZiBuaW5lCi0gKiBzdXBwb3J0IHZhbHVlczogNjQsIDk2LCAxMjgsIDE5MiwgMjU2LCAzODQsIDUxMiwgNzY4LCBhbmQgMTAyNC4KKyAqIHN1cHBvcnRlZCB2YWx1ZXMgLSA2NCwgOTYsIDEyOCwgMTkyLCAyNTYsIDM4NCwgNTEyLCA3NjgsIGFuZCAxMDI0LgogICoKICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbmluZSByYXRpb3MgYW5kIGRldGVybWluZXMgd2hpY2ggb25lcyBtYXRjaAogICogYSBzdGFuZGFyZCBzYW1wbGUgcmF0ZS4gIElmIHRoZXJlJ3MgYSBtYXRjaCwgdGhlbiBpdCBpcyBhZGRlZCB0byB0aGUgbGlzdAotICogb2Ygc3VwcG9ydCBzYW1wbGUgcmF0ZXMuCisgKiBvZiBzdXBwb3J0ZWQgc2FtcGxlIHJhdGVzLgogICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgdGhlIG1hY2hpbmUgZHJpdmVyJ3MgJ3N0YXJ0dXAnIGZ1bmN0aW9uLAogICogb3RoZXJ3aXNlIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBzYW1wbGUgcmF0ZXMgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGluCiAgKiB0aW1lIGZvciBBTFNBLgotICoKLSAqIE5vdGUgdGhhdCBpbiBzdGFuZC1hbG9uZSBtb2RlLCB0aGUgc2FtcGxlIHJhdGUgaXMgZGV0ZXJtaW5lZCBieSBpbnB1dAotICogcGlucyBNMCwgTTEsIE1ESVYxLCBhbmQgTURJVjIuICBBbHNvIGluIHN0YW5kLWFsb25lIG1vZGUsIGRpdmlkZS1ieS0zCi0gKiBpcyBub3QgYSBwcm9ncmFtbWFibGUgb3B0aW9uLiAgSG93ZXZlciwgZGl2aWRlLWJ5LTMgaXMgbm90IGFuIGF2YWlsYWJsZQotICogb3B0aW9uIGluIHN0YW5kLWFsb25lIG1vZGUuICBUaGlzIGNhc2VzIHR3byBwcm9ibGVtczogYSByYXRpbyBvZiA3NjggaXMKLSAqIG5vdCBhdmFpbGFibGUgKGl0IHJlcXVpcmVzIGRpdmlkZS1ieS0zKSBhbmQgQikgcmF0aW9zIDE5MiBhbmQgMzg0IGNhbgotICogb25seSBiZSBzZWxlY3RlZCB3aXRoIGRpdmlkZS1ieS0xLjUsIGJ1dCB0aGVyZSBpcyBhbiBlcnJhdGUgdGhhdCBtYWtlCi0gKiB0aGlzIHNlbGVjdGlvbiBkaWZmaWN1bHQuCi0gKgotICogSW4gYWRkaXRpb24sIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBtYWNoaW5lCi0gKiBkcml2ZXIgd2hhdCB0aGUgaW5wdXQgc2V0dGluZ3MgY2FuIGJlLiAgVGhpcyB3b3VsZCBuZWVkIHRvIGJlIGltcGxlbWVudGVkCi0gKiBmb3Igc3RhbmQtYWxvbmUgbW9kZSB0byB3b3JrLgogICovCiBzdGF0aWMgaW50IGNzNDI3MF9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKIAkJCQkgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCkBAIC0yMjUsNyArMjEyLDcgQEAKIAlyYXRlcyAmPSB+U05EUlZfUENNX1JBVEVfS05PVDsKIAogCWlmICghcmF0ZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGNvdWxkIG5vdCBmaW5kIGEgdmFsaWQgc2FtcGxlIHJhdGVcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJjb3VsZCBub3QgZmluZCBhIHZhbGlkIHNhbXBsZSByYXRlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yNDAsOCArMjI3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDb25maWd1cmUgdGhlIGNvZGVjIGZvciB0aGUgc2VsZWN0ZWQgYXVkaW8gZm9ybWF0CisvKioKKyAqIGNzNDI3MF9zZXRfZGFpX2ZtdCAtIGNvbmZpZ3VyZSB0aGUgY29kZWMgZm9yIHRoZSBzZWxlY3RlZCBhdWRpbyBmb3JtYXQKKyAqIEBjb2RlY19kYWk6IHRoZSBjb2RlYyBEQUkKKyAqIEBmb3JtYXQ6IGEgU05EX1NPQ19EQUlGTVRfeCB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBkYXRhIGZvcm1hdAogICoKICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBiaXRtYXNrIG9mIFNORF9TT0NfREFJRk1UX3ggYml0cyBhbmQgcHJvZ3JhbXMgdGhlCiAgKiBjb2RlYyBhY2NvcmRpbmdseS4KQEAgLTI1OCwzMiArMjQ3LDQzIEBACiAJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwogCisJLyogc2V0IERBSSBmb3JtYXQgKi8KIAlzd2l0Y2ggKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CiAJCWNzNDI3MC0+bW9kZSA9IGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogaW52YWxpZCBEQUkgZm9ybWF0XG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaW52YWxpZCBkYWkgZm9ybWF0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLworCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWNzNDI3MC0+c2xhdmVfbW9kZSA9IDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJY3M0MjcwLT5zbGF2ZV9tb2RlID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogYWxsIG90aGVyIG1vZGVzIGFyZSB1bnN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgKi8KIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogQSBsaXN0IG9mIGFkZHJlc3NlcyBvbiB3aGljaCB0aGlzIENTNDI3MCBjb3VsZCB1c2UuICBJMkMgYWRkcmVzc2VzIGFyZQotICogNyBiaXRzLiAgRm9yIHRoZSBDUzQyNzAsIHRoZSB1cHBlciBmb3VyIGJpdHMgYXJlIGFsd2F5cyAxMDAxLCBhbmQgdGhlCi0gKiBsb3dlciB0aHJlZSBiaXRzIGFyZSBkZXRlcm1pbmVkIHZpYSB0aGUgQUQyLCBBRDEsIGFuZCBBRDAgcGlucwotICogKHJlc3BlY3RpdmVseSkuCi0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JMHg0OCwgMHg0OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgSTJDX0NMSUVOVF9FTkQKLX07Ci1JMkNfQ0xJRU5UX0lOU01PRDsKLQotLyoKLSAqIFByZS1maWxsIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisvKioKKyAqIGNzNDI3MF9maWxsX2NhY2hlIC0gcHJlLWZpbGwgdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZS4KKyAqIEBjb2RlYzogdGhlIGNvZGVjIGZvciB0aGlzIENTNDI3MAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZSBieSByZWFkaW5nIHRoZSByZWdpc3RlcgorICogdmFsdWVzIGZyb20gdGhlIGhhcmR3YXJlLgorICoKKyAqIFRoaXMgQ1M0MjcwIHJlZ2lzdGVycyBhcmUgY2FjaGVkIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBJMkMgSS9PIG9wZXJhdGlvbnMuCisgKiBBZnRlciB0aGUgaW5pdGlhbCByZWFkIHRvIHByZS1maWxsIHRoZSBjYWNoZSwgdGhlIENTNDI3MCBuZXZlciB1cGRhdGVzCisgKiB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBzbyB3ZSB3b24ndCBoYXZlIGEgY2FjaGUgY29oZXJlbmN5IHByb2JsZW0uCiAgKgogICogV2UgdXNlIHRoZSBhdXRvLWluY3JlbWVudCBmZWF0dXJlIG9mIHRoZSBDUzQyNzAgdG8gcmVhZCBhbGwgcmVnaXN0ZXJzIGluCiAgKiBvbmUgc2hvdC4KQEAgLTI5OCw3ICsyOTgsNyBAQAogCQlDUzQyNzBfRklSU1RSRUcgfCAweDgwLCBDUzQyNzBfTlVNUkVHUywgY2FjaGUpOwogCiAJaWYgKGxlbmd0aCAhPSBDUzQyNzBfTlVNUkVHUykgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHJlYWQgZmFpbHVyZSwgYWRkcj0weCV4XG4iLAorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgcmVhZCBmYWlsdXJlLCBhZGRyPTB4JXhcbiIsCiAJCSAgICAgICBpMmNfY2xpZW50LT5hZGRyKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMzA2LDEyICszMDYsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlYWQgZnJvbSB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorLyoqCisgKiBjczQyNzBfcmVhZF9yZWdfY2FjaGUgLSByZWFkIGZyb20gdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZS4KKyAqIEBjb2RlYzogdGhlIGNvZGVjIGZvciB0aGlzIENTNDI3MAorICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHJlYWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIHJlZ2lzdGVyLiAgSXQgcmVhZHMgb25seSBmcm9tCisgKiB0aGUgcmVnaXN0ZXIgY2FjaGUsIG5vdCB0aGUgaGFyZHdhcmUgaXRzZWxmLgogICoKICAqIFRoaXMgQ1M0MjcwIHJlZ2lzdGVycyBhcmUgY2FjaGVkIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBJMkMgSS9PIG9wZXJhdGlvbnMuCiAgKiBBZnRlciB0aGUgaW5pdGlhbCByZWFkIHRvIHByZS1maWxsIHRoZSBjYWNoZSwgdGhlIENTNDI3MCBuZXZlciB1cGRhdGVzCi0gKiB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBzbyB3ZSB3b24ndCBoYXZlIGEgY2FjaGUgY29oZXJuY3kgcHJvYmxlbS4KKyAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbS4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBjczQyNzBfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXVuc2lnbmVkIGludCByZWcpCkBAIC0zMjQsOCArMzI5LDExIEBACiAJcmV0dXJuIGNhY2hlW3JlZyAtIENTNDI3MF9GSVJTVFJFR107CiB9CiAKLS8qCi0gKiBXcml0ZSB0byBhIENTNDI3MCByZWdpc3RlciB2aWEgdGhlIEkyQyBidXMuCisvKioKKyAqIGNzNDI3MF9pMmNfd3JpdGUgLSB3cml0ZSB0byBhIENTNDI3MCByZWdpc3RlciB2aWEgdGhlIEkyQyBidXMuCisgKiBAY29kZWM6IHRoZSBjb2RlYyBmb3IgdGhpcyBDUzQyNzAKKyAqIEByZWc6IHRoZSByZWdpc3RlciB0byB3cml0ZQorICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyCiAgKgogICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBnaXZlbiBDUzQyNzAgcmVnaXN0ZXIsIGFuZAogICogYWxzbyB1cGRhdGVzIHRoZSByZWdpc3RlciBjYWNoZS4KQEAgLTM0Niw3ICszNTQsNyBAQAogCWlmIChjYWNoZVtyZWcgLSBDUzQyNzBfRklSU1RSRUddICE9IHZhbHVlKSB7CiAJCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKQEAgLTM1NywxMSArMzY1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBQcm9ncmFtIHRoZSBDUzQyNzAgd2l0aCB0aGUgZ2l2ZW4gaGFyZHdhcmUgcGFyYW1ldGVycy4KKy8qKgorICogY3M0MjcwX2h3X3BhcmFtcyAtIHByb2dyYW0gdGhlIENTNDI3MCB3aXRoIHRoZSBnaXZlbiBoYXJkd2FyZSBwYXJhbWV0ZXJzLgorICogQHN1YnN0cmVhbTogdGhlIGF1ZGlvIHN0cmVhbQorICogQHBhcmFtczogdGhlIGhhcmR3YXJlIHBhcmFtZXRlcnMgdG8gc2V0CisgKiBAZGFpOiB0aGUgU09DIERBSSAoaWdub3JlZCkKICAqCi0gKiBUaGUgLm9wcyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcHJvdmlkZSBib2FyZC1zcGVjaWZpYyBkYXRhLCBsaWtlCi0gKiBpbnB1dCBmcmVxdWVuY2llcywgdG8gdGhpcyBkcml2ZXIuICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoYXQgaW5mb3JtYXRpb24sCisgKiBUaGlzIGZ1bmN0aW9uIHByb2dyYW1zIHRoZSBoYXJkd2FyZSB3aXRoIHRoZSB2YWx1ZXMgcHJvdmlkZWQuCisgKiBTcGVjaWZpY2FsbHksIHRoZSBzYW1wbGUgcmF0ZSBhbmQgdGhlIGRhdGEgZm9ybWF0LgorICoKKyAqIFRoZSAub3BzIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBwcm92aWRlIGJvYXJkLXNwZWNpZmljIGRhdGEsIGxpa2UgaW5wdXQKKyAqIGZyZXF1ZW5jaWVzLCB0byB0aGlzIGRyaXZlci4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhhdCBpbmZvcm1hdGlvbiwKICAqIGNvbWJpbmVzIGl0IHdpdGggdGhlIGhhcmR3YXJlIHBhcmFtZXRlcnMgcHJvdmlkZWQsIGFuZCBwcm9ncmFtcyB0aGUKICAqIGhhcmR3YXJlIGFjY29yZGluZ2x5LgogICovCkBAIC0zNzEsNyArMzg1LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0zOTEsMzMgKzQwNSwyOCBAQAogCiAJaWYgKGkgPT0gTlVNX01DTEtfUkFUSU9TKSB7CiAJCS8qIFdlIGRpZCBub3QgZmluZCBhIG1hdGNoaW5nIHJhdGlvICovCi0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBjb3VsZCBub3QgZmluZCBtYXRjaGluZyByYXRpb1xuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIHJhdGlvXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogRnJlZXplIGFuZCBwb3dlci1kb3duIHRoZSBjb2RlYyAqLwotCi0JcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX1BXUkNUTCwgQ1M0MjcwX1BXUkNUTF9GUkVFWkUgfAotCQkJICAgIENTNDI3MF9QV1JDVExfUEROX0FEQyB8IENTNDI3MF9QV1JDVExfUEROX0RBQyB8Ci0JCQkgICAgQ1M0MjcwX1BXUkNUTF9QRE4pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBQcm9ncmFtIHRoZSBtb2RlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkvKiBTZXQgdGhlIHNhbXBsZSByYXRlICovCiAKIAlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9NT0RFKTsKIAlyZWcgJj0gfihDUzQyNzBfTU9ERV9TUEVFRF9NQVNLIHwgQ1M0MjcwX01PREVfRElWX01BU0spOwotCXJlZyB8PSBjczQyNzBfbW9kZV9yYXRpb3NbaV0uc3BlZWRfbW9kZSB8IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5tY2xrOworCXJlZyB8PSBjczQyNzBfbW9kZV9yYXRpb3NbaV0ubWNsazsKKworCWlmIChjczQyNzAtPnNsYXZlX21vZGUpCisJCXJlZyB8PSBDUzQyNzBfTU9ERV9TTEFWRTsKKwllbHNlCisJCXJlZyB8PSBjczQyNzBfbW9kZV9yYXRpb3NbaV0uc3BlZWRfbW9kZTsKIAogCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9NT0RFLCByZWcpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogUHJvZ3JhbSB0aGUgZm9ybWF0IHJlZ2lzdGVyICovCisJLyogU2V0IHRoZSBEQUkgZm9ybWF0ICovCiAKIAlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDI3MF9GT1JNQVQpOwogCXJlZyAmPSB+KENTNDI3MF9GT1JNQVRfREFDX01BU0sgfCBDUzQyNzBfRk9STUFUX0FEQ19NQVNLKTsKQEAgLTQzMCw1NSArNDM5LDIzIEBACiAJCXJlZyB8PSBDUzQyNzBfRk9STUFUX0RBQ19MSiB8IENTNDI3MF9GT1JNQVRfQURDX0xKOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogdW5rbm93biBmb3JtYXRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bmtub3duIGRhaSBmb3JtYXRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfRk9STUFULCByZWcpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBEaXNhYmxlIGF1dG8tbXV0ZS4gIFRoaXMgZmVhdHVyZSBhcHBlYXJzIHRvIGJlIGJ1Z2d5LCBiZWNhdXNlIGluCi0JICAgc29tZSBzaXR1YXRpb25zLCBhdXRvLW11dGUgd2lsbCBub3QgZGVhY3RpdmF0ZSB3aGVuIGl0IHNob3VsZC4gKi8KLQotCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX01VVEUpOwotCXJlZyAmPSB+Q1M0MjcwX01VVEVfQVVUTzsKLQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfTVVURSwgcmVnKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogRGlzYWJsZSBhdXRvbWF0aWMgdm9sdW1lIGNvbnRyb2wuICBJdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kCi0JICogaXQgY2F1c2VzIHZvbHVtZSBjaGFuZ2UgY29tbWFuZHMgdG8gYmUgZGVsYXllZCwgc29tZXRpbWVzIHVudGlsCi0JICogYWZ0ZXIgcGxheWJhY2sgaGFzIHN0YXJ0ZWQuCi0JICovCi0KLQlyZWcgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIENTNDI3MF9UUkFOUyk7Ci0JcmVnICY9IH4oQ1M0MjcwX1RSQU5TX1NPRlQgfCBDUzQyNzBfVFJBTlNfWkVSTyk7Ci0JcmV0ID0gY3M0MjcwX2kyY193cml0ZShjb2RlYywgQ1M0MjcwX1RSQU5TLCByZWcpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSTJDIHdyaXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogVGhhdyBhbmQgcG93ZXItdXAgdGhlIGNvZGVjICovCi0KLQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCAwKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogSTJDIHdyaXRlIGZhaWxlZFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfU05EX1NPQ19DUzQyNzBfSFdNVVRFCi0KLS8qCi0gKiBTZXQgdGhlIENTNDI3MCBleHRlcm5hbCBtdXRlCisvKioKKyAqIGNzNDI3MF9tdXRlIC0gZW5hYmxlL2Rpc2FibGUgdGhlIENTNDI3MCBleHRlcm5hbCBtdXRlCisgKiBAZGFpOiB0aGUgU09DIERBSQorICogQG11dGU6IDAgPSBkaXNhYmxlIG11dGUsIDEgPSBlbmFibGUgbXV0ZQogICoKICAqIFRoaXMgZnVuY3Rpb24gdG9nZ2xlcyB0aGUgbXV0ZSBiaXRzIGluIHRoZSBNVVRFIHJlZ2lzdGVyLiAgVGhlIENTNDI3MCdzCiAgKiBtdXRlIGNhcGFiaWxpdHkgaXMgaW50ZW5kZWQgZm9yIGV4dGVybmFsIG11dGluZyBjaXJjdWl0cnksIHNvIGlmIHRoZQpAQCAtNDkzLDE1MCArNDcwLDQ3IEBACiAJcmVnNiA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX01VVEUpOwogCiAJaWYgKG11dGUpCi0JCXJlZzYgfD0gQ1M0MjcwX01VVEVfQURDX0EgfCBDUzQyNzBfTVVURV9BRENfQiB8Ci0JCQlDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19COworCQlyZWc2IHw9IENTNDI3MF9NVVRFX0RBQ19BIHwgQ1M0MjcwX01VVEVfREFDX0I7CiAJZWxzZQotCQlyZWc2ICY9IH4oQ1M0MjcwX01VVEVfQURDX0EgfCBDUzQyNzBfTVVURV9BRENfQiB8Ci0JCQkgIENTNDI3MF9NVVRFX0RBQ19BIHwgQ1M0MjcwX01VVEVfREFDX0IpOworCQlyZWc2ICY9IH4oQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQik7CiAKIAlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX01VVEUsIHJlZzYpOwogfQogCi0jZW5kaWYKLQotc3RhdGljIGludCBjczQyNzBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICosIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICopOwotCiAvKiBBIGxpc3Qgb2Ygbm9uLURBUE0gY29udHJvbHMgdGhhdCB0aGUgQ1M0MjcwIHN1cHBvcnRzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3M0MjcwX3NuZF9jb250cm9sc1tdID0gewogCVNPQ19ET1VCTEVfUigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCi0JCUNTNDI3MF9WT0xBLCBDUzQyNzBfVk9MQiwgMCwgMHhGRiwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBjczQyNzBfaWRbXSA9IHsKLQl7ImNzNDI3MCIsIDB9LAotCXt9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGNzNDI3MF9pZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjczQyNzBfaTJjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJDUzQyNzAgSTJDIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkuaWRfdGFibGUgPSBjczQyNzBfaWQsCi0JLnByb2JlID0gY3M0MjcwX2kyY19wcm9iZSwKKwkJQ1M0MjcwX1ZPTEEsIENTNDI3MF9WT0xCLCAwLCAweEZGLCAxKSwKKwlTT0NfU0lOR0xFKCJEaWdpdGFsIFNpZGV0b25lIFN3aXRjaCIsIENTNDI3MF9GT1JNQVQsIDUsIDEsIDApLAorCVNPQ19TSU5HTEUoIlNvZnQgUmFtcCBTd2l0Y2giLCBDUzQyNzBfVFJBTlMsIDYsIDEsIDApLAorCVNPQ19TSU5HTEUoIlplcm8gQ3Jvc3MgU3dpdGNoIiwgQ1M0MjcwX1RSQU5TLCA1LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJQb3BndWFyZCBTd2l0Y2giLCBDUzQyNzBfTU9ERSwgMCwgMSwgMSksCisJU09DX1NJTkdMRSgiQXV0by1NdXRlIFN3aXRjaCIsIENTNDI3MF9NVVRFLCA1LCAxLCAwKSwKKwlTT0NfRE9VQkxFKCJNYXN0ZXIgQ2FwdHVyZSBTd2l0Y2giLCBDUzQyNzBfTVVURSwgMywgNCwgMSwgMCkKIH07CiAKIC8qCi0gKiBHbG9iYWwgdmFyaWFibGUgdG8gc3RvcmUgc29jZGV2IGZvciBpMmMgcHJvYmUgZnVuY3Rpb24uCisgKiBjczQyNzBfY29kZWMgLSBnbG9iYWwgdmFyaWFibGUgdG8gc3RvcmUgY29kZWMgZm9yIHRoZSBBU29DIHByb2JlIGZ1bmN0aW9uCiAgKgogICogSWYgc3RydWN0IGkyY19kcml2ZXIgaGFkIGEgcHJpdmF0ZV9kYXRhIGZpZWxkLCB3ZSB3b3VsZG4ndCBuZWVkIHRvIHVzZQotICogY3M0MjcwX3NvY2RlYy4gIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHBhc3MgdGhlIHNvY2RldiBzdHJ1Y3R1cmUgdG8KLSAqIGNzNDI3MF9pMmNfcHJvYmUoKS4KLSAqCi0gKiBUaGUgcmVhbCBzb2x1dGlvbiB0byBjczQyNzBfc29jZGV2IGlzIHRvIGNyZWF0ZSBhIG1lY2hhbmlzbQotICogdGhhdCBtYXBzIEkyQyBhZGRyZXNzZXMgdG8gc25kX3NvY19kZXZpY2Ugc3RydWN0dXJlcy4gIFBlcmhhcHMgdGhlCi0gKiBjcmVhdGlvbiBvZiB0aGUgc25kX3NvY19kZXZpY2Ugb2JqZWN0IHNob3VsZCBiZSBtb3ZlZCBvdXQgb2YKLSAqIGNzNDI3MF9wcm9iZSgpIGFuZCBpbnRvIGNzNDI3MF9pMmNfcHJvYmUoKSwgYnV0IHRoYXQgd291bGQgbWFrZSB0aGlzCi0gKiBkcml2ZXIgZGVwZW5kZW50IG9uIEkyQy4gIFRoZSBDUzQyNzAgc3VwcG9ydHMgInN0YW5kLWFsb25lIiBtb2RlLCB3aGVyZWJ5Ci0gKiB0aGUgY2hpcCBpcyAqbm90KiBjb25uZWN0ZWQgdG8gdGhlIEkyQyBidXMsIGJ1dCBpcyBpbnN0ZWFkIGNvbmZpZ3VyZWQgdmlhCi0gKiBpbnB1dCBwaW5zLgorICogY3M0MjcwX2NvZGVjLiAgVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gcGFzcyB0aGUgY29kZWMgc3RydWN0dXJlIGZyb20KKyAqIGNzNDI3MF9pMmNfcHJvYmUoKSB0byBjczQyNzBfcHJvYmUoKS4gIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vIGdvb2QKKyAqIHdheSB0byBzeW5jaHJvbml6ZSB0aGVzZSB0d28gZnVuY3Rpb25zLiAgY3M0MjcwX2kyY19wcm9iZSgpIGNhbiBiZSBjYWxsZWQKKyAqIG11bHRpcGxlIHRpbWVzIGJlZm9yZSBjczQyNzBfcHJvYmUoKSBpcyBjYWxsZWQgZXZlbiBvbmNlLiAgU28gZm9yIG5vdywgd2UKKyAqIGFsc28gb25seSBhbGxvdyBjczQyNzBfaTJjX3Byb2JlKCkgdG8gYmUgcnVuIG9uY2UuICBUaGF0IG1lYW5zIHRoYXQgd2UgZG8KKyAqIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY3M0MjcwIGRldmljZSBpbiB0aGUgc3lzdGVtLCBhdCBsZWFzdCBmb3Igbm93LgogICovCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICpjczQyNzBfc29jZGV2Oworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjczQyNzBfY29kZWM7CiAKLS8qCi0gKiBJbml0aWFsaXplIHRoZSBJMkMgaW50ZXJmYWNlIG9mIHRoZSBDUzQyNzAKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igd2hlbmV2ZXIgdGhlIEkyQyBzdWJzeXN0ZW0gZmluZHMgYSBkZXZpY2UKLSAqIGF0IGEgcGFydGljdWxhciBhZGRyZXNzLgotICoKLSAqIE5vdGU6IHNuZF9zb2NfbmV3X3BjbXMoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkLAotICogYmVjYXVzZSBvZiBzbmRfY3RsX2FkZCgpLgotICovCi1zdGF0aWMgaW50IGNzNDI3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQsCi0JY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gY3M0MjcwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCBpOwotCWludCByZXQgPSAwOwotCi0JLyogUHJvYmluZyBhbGwgcG9zc2libGUgYWRkcmVzc2VzIGhhcyBvbmUgZHJhd2JhY2s6IGlmIHRoZXJlIGFyZQotCSAgIG11bHRpcGxlIENTNDI3MHMgb24gdGhlIGJ1cywgdGhlbiB5b3UgY2Fubm90IHNwZWNpZnkgd2hpY2gKLQkgICBzb2NkZXYgaXMgbWF0Y2hlZCB3aXRoIHdoaWNoIENTNDI3MC4gIEZvciBub3csIHdlIGp1c3QgcmVqZWN0Ci0JICAgdGhpcyBJMkMgZGV2aWNlIGlmIHRoZSBzb2NkZXYgYWxyZWFkeSBoYXMgb25lIGF0dGFjaGVkLiAqLwotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIE5vdGU6IGNvZGVjX2RhaS0+Y29kZWMgaXMgTlVMTCBoZXJlICovCi0KLQljb2RlYy0+cmVnX2NhY2hlID0ga3phbGxvYyhDUzQyNzBfTlVNUkVHUywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb2RlYy0+cmVnX2NhY2hlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBjb3VsZCBub3QgYWxsb2NhdGUgcmVnaXN0ZXIgY2FjaGVcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBDUzQyNzAgKi8KLQotCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShpMmNfY2xpZW50LCBDUzQyNzBfQ0hJUElEKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIHJlYWQgSTJDXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JLyogVGhlIHRvcCBmb3VyIGJpdHMgb2YgdGhlIGNoaXAgSUQgc2hvdWxkIGJlIDExMDAuICovCi0JaWYgKChyZXQgJiAweEYwKSAhPSAweEMwKSB7Ci0JCS8qIFRoZSBkZXZpY2UgYXQgdGhpcyBhZGRyZXNzIGlzIG5vdCBhIENTNDI3MCBjb2RlYyAqLwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogZm91bmQgZGV2aWNlIGF0IEkyQyBhZGRyZXNzICVYXG4iLAotCQlpMmNfY2xpZW50LT5hZGRyKTsKLQlwcmludGsoS0VSTl9JTkZPICJjczQyNzA6IGhhcmR3YXJlIHJldmlzaW9uICVYXG4iLCByZXQgJiAweEYpOwotCi0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyY19jbGllbnQ7Ci0JY29kZWMtPnJlYWQgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gY3M0MjcwX2kyY193cml0ZTsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBDUzQyNzBfTlVNUkVHUzsKLQotCS8qIFRoZSBJMkMgaW50ZXJmYWNlIGlzIHNldCB1cCwgc28gcHJlLWZpbGwgb3VyIHJlZ2lzdGVyIGNhY2hlICovCi0KLQlyZXQgPSBjczQyNzBfZmlsbF9jYWNoZShjb2RlYyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBBZGQgdGhlIG5vbi1EQVBNIGNvbnRyb2xzICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjczQyNzBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdHJsID0KLQkJc25kX3NvY19jbmV3KCZjczQyNzBfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCk7Ci0KLQkJcmV0ID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsIGtjdHJsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycm9yOwotCX0KLQotCWkyY19zZXRfY2xpZW50ZGF0YShpMmNfY2xpZW50LCBjb2RlYyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JY29kZWMtPmNvbnRyb2xfZGF0YSA9IE5VTEw7Ci0KLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKLQljb2RlYy0+cmVnX2NhY2hlID0gTlVMTDsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSAwOwotCi0JcmV0dXJuIHJldDsKLX0KLQotI2VuZGlmIC8qIFVTRV9JMkMqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgY3M0MjcwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGNzNDI3MF9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSBjczQyNzBfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSBjczQyNzBfc2V0X2RhaV9mbXQsCisJLmRpZ2l0YWxfbXV0ZQk9IGNzNDI3MF9tdXRlLAorfTsKIAogc3RydWN0IHNuZF9zb2NfZGFpIGNzNDI3MF9kYWkgPSB7Ci0JLm5hbWUgPSAiQ1M0MjcwIiwKKwkubmFtZSA9ICJjczQyNzAiLAogCS5wbGF5YmFjayA9IHsKIAkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKIAkJLmNoYW5uZWxzX21pbiA9IDEsCkBAIC02NTEsMTE4ICs1MjUsMjUxIEBACiAJCS5yYXRlcyA9IDAsCiAJCS5mb3JtYXRzID0gQ1M0MjcwX0ZPUk1BVFMsCiAJfSwKKwkub3BzID0gJmNzNDI3MF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNzNDI3MF9kYWkpOwogCi0vKgotICogQVNvQyBwcm9iZSBmdW5jdGlvbgorLyoqCisgKiBjczQyNzBfcHJvYmUgLSBBU29DIHByb2JlIGZ1bmN0aW9uCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgbWFjaGluZSBkcml2ZXIgY2FsbHMKLSAqIHBsYXRmb3JtX2RldmljZV9hZGQoKS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gQVNvQyBoYXMgYWxsIHRoZSBwaWVjZXMgaXQgbmVlZHMgdG8KKyAqIGluc3RhbnRpYXRlIGEgc291bmQgZHJpdmVyLgogICovCiBzdGF0aWMgaW50IGNzNDI3MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCWludCByZXQgPSAwOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNzNDI3MF9jb2RlYzsKKwlpbnQgcmV0OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ1M0MjcwIEFMU0EgU29DIENvZGVjXG4iKTsKLQotCS8qIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHNuZF9zb2NfY29kZWMgc3RydWN0dXJlCi0JICAgYW5kIG91ciBwcml2YXRlIGRhdGEgdG9nZXRoZXIuICovCi0JY29kZWMgPSBremFsbG9jKEFMSUdOKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIDQpICsKLQkJCXNpemVvZihzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvZGVjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBDb3VsZCBub3QgYWxsb2NhdGUgY29kZWMgc3RydWN0dXJlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKLQotCWNvZGVjLT5uYW1lID0gIkNTNDI3MCI7Ci0JY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPmRhaSA9ICZjczQyNzBfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gMTsKLQljb2RlYy0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKikgY29kZWMgKwotCQlBTElHTihzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCA0KTsKLQotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwkvKiBDb25uZWN0IHRoZSBjb2RlYyB0byB0aGUgc29jZGV2LiAgc25kX3NvY19uZXdfcGNtcygpIG5lZWRzIHRoaXMuICovCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCiAJLyogUmVnaXN0ZXIgUENNcyAqLwotCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIGNyZWF0ZSBQQ01zXG4iKTsKLQkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAotI2lmZGVmIFVTRV9JMkMKLQljczQyNzBfc29jZGV2ID0gc29jZGV2OwotCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gYXR0YWNoIGRyaXZlciIpOworCS8qIEFkZCB0aGUgbm9uLURBUE0gY29udHJvbHMgKi8KKwlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgY3M0MjcwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGNzNDI3MF9zbmRfY29udHJvbHMpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gYWRkIGNvbnRyb2xzXG4iKTsKIAkJZ290byBlcnJvcl9mcmVlX3BjbXM7CiAJfQogCi0JLyogRGlkIHdlIGZpbmQgYSBDUzQyNzAgb24gdGhlIEkyQyBidXM/ICovCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpIHsKLQkJLyogSW5pdGlhbGl6ZSBjb2RlYyBvcHMgKi8KLQkJY3M0MjcwX2RhaS5vcHMuaHdfcGFyYW1zID0gY3M0MjcwX2h3X3BhcmFtczsKLQkJY3M0MjcwX2RhaS5vcHMuc2V0X3N5c2NsayA9IGNzNDI3MF9zZXRfZGFpX3N5c2NsazsKLQkJY3M0MjcwX2RhaS5vcHMuc2V0X2ZtdCA9IGNzNDI3MF9zZXRfZGFpX2ZtdDsKLSNpZmRlZiBDT05GSUdfU05EX1NPQ19DUzQyNzBfSFdNVVRFCi0JCWNzNDI3MF9kYWkub3BzLmRpZ2l0YWxfbXV0ZSA9IGNzNDI3MF9tdXRlOwotI2VuZGlmCi0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogbm8gSTJDIGRldmljZSBmb3VuZCwgIgotCQkJInVzaW5nIHN0YW5kLWFsb25lIG1vZGVcbiIpOwotI2Vsc2UKLQlwcmludGsoS0VSTl9JTkZPICJjczQyNzA6IEkyQyBkaXNhYmxlZCwgdXNpbmcgc3RhbmQtYWxvbmUgbW9kZVxuIik7Ci0jZW5kaWYKLQorCS8qIEFuZCBmaW5hbGx5LCByZWdpc3RlciB0aGUgc29jZGV2ICovCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOwotCQlnb3RvIGVycm9yX2RlbF9kcml2ZXI7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX3BjbXM7CiAJfQogCiAJcmV0dXJuIDA7CiAKLWVycm9yX2RlbF9kcml2ZXI6Ci0jaWZkZWYgVVNFX0kyQwotCWkyY19kZWxfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7Ci0KIGVycm9yX2ZyZWVfcGNtczoKLSNlbmRpZgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAKLWVycm9yX2ZyZWVfY29kZWM6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7Ci0KIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGNzNDI3MF9yZW1vdmUgLSBBU29DIHJlbW92ZSBmdW5jdGlvbgorICogQHBkZXY6IHBsYXRmb3JtIGRldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIGNzNDI3MF9wcm9iZSgpLgorICovCiBzdGF0aWMgaW50IGNzNDI3MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAotI2lmZGVmIFVTRV9JMkMKLQlpMmNfZGVsX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwotI2VuZGlmCisJcmV0dXJuIDA7Cit9OwogCi0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisvKioKKyAqIGNzNDI3MF9pMmNfcHJvYmUgLSBpbml0aWFsaXplIHRoZSBJMkMgaW50ZXJmYWNlIG9mIHRoZSBDUzQyNzAKKyAqIEBpMmNfY2xpZW50OiB0aGUgSTJDIGNsaWVudCBvYmplY3QKKyAqIEBpZDogdGhlIEkyQyBkZXZpY2UgSUQgKGlnbm9yZWQpCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIEkyQyBzdWJzeXN0ZW0gZmluZHMgYSBkZXZpY2UgdGhhdAorICogbWF0Y2hlcyB0aGUgZGV2aWNlIElEIGdpdmVuIHZpYSBhIHByaW9yIGNhbGwgdG8gaTJjX2FkZF9kcml2ZXIoKS4KKyAqLworc3RhdGljIGludCBjczQyNzBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50LAorCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzA7CisJdW5zaWduZWQgaW50IHJlZzsKKwlpbnQgcmV0OworCisJLyogRm9yIG5vdywgd2Ugb25seSBzdXBwb3J0IG9uZSBjczQyNzAgZGV2aWNlIGluIHRoZSBzeXN0ZW0uICBTZWUgdGhlCisJICogY29tbWVudCBmb3IgY3M0MjcwX2NvZGVjLgorCSAqLworCWlmIChjczQyNzBfY29kZWMpIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiaWdub3JpbmcgQ1M0MjcwIGF0IGFkZHIgJVhcbiIsCisJCSAgICAgICBpMmNfY2xpZW50LT5hZGRyKTsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAib25seSBvbmUgcGVyIGJvYXJkIGFsbG93ZWRcbiIpOworCQkvKiBTaG91bGQgd2UgcmV0dXJuIHNvbWV0aGluZyBvdGhlciB0aGFuIEVOT0RFViBoZXJlPyAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgQ1M0MjcwICovCisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaTJjX2NsaWVudCwgQ1M0MjcwX0NISVBJRCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgaTJjIGF0IGFkZHIgJVhcbiIsCisJCSAgICAgICBpMmNfY2xpZW50LT5hZGRyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogVGhlIHRvcCBmb3VyIGJpdHMgb2YgdGhlIGNoaXAgSUQgc2hvdWxkIGJlIDExMDAuICovCisJaWYgKChyZXQgJiAweEYwKSAhPSAweEMwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImRldmljZSBhdCBhZGRyICVYIGlzIG5vdCBhIENTNDI3MFxuIiwKKwkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfaW5mbygmaTJjX2NsaWVudC0+ZGV2LCAiZm91bmQgZGV2aWNlIGF0IGkyYyBhZGRyZXNzICVYXG4iLAorCQlpMmNfY2xpZW50LT5hZGRyKTsKKwlkZXZfaW5mbygmaTJjX2NsaWVudC0+ZGV2LCAiaGFyZHdhcmUgcmV2aXNpb24gJVhcbiIsIHJldCAmIDB4Rik7CisKKwkvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBzbmRfc29jX2NvZGVjIHN0cnVjdHVyZQorCSAgIGFuZCBvdXIgcHJpdmF0ZSBkYXRhIHRvZ2V0aGVyLiAqLworCWNzNDI3MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjczQyNzBfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghY3M0MjcwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjb2RlY1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljb2RlYyA9ICZjczQyNzAtPmNvZGVjOworCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5kZXYgPSAmaTJjX2NsaWVudC0+ZGV2OworCWNvZGVjLT5uYW1lID0gIkNTNDI3MCI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZjczQyNzBfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gY3M0MjcwOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmNfY2xpZW50OworCWNvZGVjLT5yZWFkID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IGNzNDI3MF9pMmNfd3JpdGU7CisJY29kZWMtPnJlZ19jYWNoZSA9IGNzNDI3MC0+cmVnX2NhY2hlOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IENTNDI3MF9OVU1SRUdTOworCisJLyogVGhlIEkyQyBpbnRlcmZhY2UgaXMgc2V0IHVwLCBzbyBwcmUtZmlsbCBvdXIgcmVnaXN0ZXIgY2FjaGUgKi8KKworCXJldCA9IGNzNDI3MF9maWxsX2NhY2hlKGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZVxuIik7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwkvKiBEaXNhYmxlIGF1dG8tbXV0ZS4gIFRoaXMgZmVhdHVyZSBhcHBlYXJzIHRvIGJlIGJ1Z2d5LiAgSW4gc29tZQorCSAqIHNpdHVhdGlvbnMsIGF1dG8tbXV0ZSB3aWxsIG5vdCBkZWFjdGl2YXRlIHdoZW4gaXQgc2hvdWxkLCBzbyB3ZSB3YW50CisJICogdGhpcyBmZWF0dXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBBbiBhcHBsaWNhdGlvbiAoZS5nLiBhbHNhY3RsKSBjYW4KKwkgKiByZS1lbmFibGVkIGl0IGJ5IHVzaW5nIHRoZSBjb250cm9scy4KKwkgKi8KKworCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX01VVEUpOworCXJlZyAmPSB+Q1M0MjcwX01VVEVfQVVUTzsKKwlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfTVVURSwgcmVnKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEaXNhYmxlIGF1dG9tYXRpYyB2b2x1bWUgY29udHJvbC4gIFRoZSBoYXJkd2FyZSBlbmFibGVzLCBhbmQgaXQKKwkgKiBjYXVzZXMgdm9sdW1lIGNoYW5nZSBjb21tYW5kcyB0byBiZSBkZWxheWVkLCBzb21ldGltZXMgdW50aWwgYWZ0ZXIKKwkgKiBwbGF5YmFjayBoYXMgc3RhcnRlZC4gIEFuIGFwcGxpY2F0aW9uIChlLmcuIGFsc2FjdGwpIGNhbgorCSAqIHJlLWVuYWJsZWQgaXQgYnkgdXNpbmcgdGhlIGNvbnRyb2xzLgorCSAqLworCisJcmVnID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBDUzQyNzBfVFJBTlMpOworCXJlZyAmPSB+KENTNDI3MF9UUkFOU19TT0ZUIHwgQ1M0MjcwX1RSQU5TX1pFUk8pOworCXJldCA9IGNzNDI3MF9pMmNfd3JpdGUoY29kZWMsIENTNDI3MF9UUkFOUywgcmVnKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBEQUkuIE5vcm1hbGx5LCB3ZSdkIHByZWZlciB0byBoYXZlIGEga21hbGxvYydkIERBSQorCSAqIHN0cnVjdHVyZSBmb3IgZWFjaCBDUzQyNzAgZGV2aWNlLCBidXQgdGhlIG1hY2hpbmUgZHJpdmVyIG5lZWRzIHRvCisJICogaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIERBSSBzdHJ1Y3R1cmUsIHNvIGZvciBub3cgaXQgbXVzdCBiZSBhIGdsb2JhbAorCSAqIHZhcmlhYmxlLgorCSAqLworCWNzNDI3MF9kYWkuZGV2ID0gJmkyY19jbGllbnQtPmRldjsKKworCS8qIFJlZ2lzdGVyIHRoZSBEQUkuICBJZiBhbGwgdGhlIG90aGVyIEFTb0MgZHJpdmVyIGhhdmUgYWxyZWFkeQorCSAqIHJlZ2lzdGVyZWQsIHRoZW4gdGhpcyB3aWxsIGNhbGwgb3VyIHByb2JlIGZ1bmN0aW9uLCBzbworCSAqIGNzNDI3MF9jb2RlYyBuZWVkcyB0byBiZSByZWFkeS4KKwkgKi8KKwljczQyNzBfY29kZWMgPSBjb2RlYzsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmY3M0MjcwX2RhaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERBSWVcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGkyY19jbGllbnQsIGNzNDI3MCk7CisKKwlyZXR1cm4gMDsKKworZXJyb3JfZnJlZV9jb2RlYzoKKwlrZnJlZShjczQyNzApOworCWNzNDI3MF9jb2RlYyA9IE5VTEw7CisJY3M0MjcwX2RhaS5kZXYgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBjczQyNzBfaTJjX3JlbW92ZSAtIHJlbW92ZSBhbiBJMkMgZGV2aWNlCisgKiBAaTJjX2NsaWVudDogdGhlIEkyQyBjbGllbnQgb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY291bnRlcnBhcnQgdG8gY3M0MjcwX2kyY19wcm9iZSgpLgorICovCitzdGF0aWMgaW50IGNzNDI3MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50KQoreworCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyY19jbGllbnQpOworCisJa2ZyZWUoY3M0MjcwKTsKKwljczQyNzBfY29kZWMgPSBOVUxMOworCWNzNDI3MF9kYWkuZGV2ID0gTlVMTDsKIAogCXJldHVybiAwOwogfQogCiAvKgorICogY3M0MjcwX2lkIC0gSTJDIGRldmljZSBJRHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCBjczQyNzBfaWRbXSA9IHsKKwl7ImNzNDI3MCIsIDB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGNzNDI3MF9pZCk7CisKKy8qCisgKiBjczQyNzBfaTJjX2RyaXZlciAtIEkyQyBkZXZpY2UgaWRlbnRpZmljYXRpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSB0ZWxscyB0aGUgSTJDIHN1YnN5c3RlbSBob3cgdG8gaWRlbnRpZnkgYW5kIHN1cHBvcnQgYQorICogZ2l2ZW4gSTJDIGRldmljZSB0eXBlLgorICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3M0MjcwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiY3M0MjcwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkuaWRfdGFibGUgPSBjczQyNzBfaWQsCisJLnByb2JlID0gY3M0MjcwX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gY3M0MjcwX2kyY19yZW1vdmUsCit9OworCisvKgogICogQVNvQyBjb2RlYyBkZXZpY2Ugc3RydWN0dXJlCiAgKgogICogQXNzaWduIHRoaXMgdmFyaWFibGUgdG8gdGhlIGNvZGVjX2RldiBmaWVsZCBvZiB0aGUgbWFjaGluZSBkcml2ZXIncwpAQCAtNzc2LDEzICs3ODMsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3M0MjcwX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmNzNDI3MF9kYWkpOworCXByX2luZm8oIkNpcnJ1cyBMb2dpYyBDUzQyNzAgQUxTQSBTb0MgQ29kZWMgRHJpdmVyXG4iKTsKKworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoY3M0MjcwX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3M0MjcwX2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZjczQyNzBfZGFpKTsKKwlpMmNfZGVsX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoY3M0MjcwX2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3BjbTMwMDguYyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzAwOC5jCmluZGV4IDlhM2U2N2UuLjVjZGE5ZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzAwOC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzAwOC5jCkBAIC02NywxMSArNjcsMTEgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIlBDTTMwMDggU29DIEF1ZGlvIENvZGVjICVzXG4iLCBQQ00zMDA4X1ZFUlNJT04pOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzb2NkZXYtPmNvZGVjKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmICghc29jZGV2LT5jYXJkLT5jb2RlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+bmFtZSA9ICJQQ00zMDA4IjsKQEAgLTEzOSw3ICsxMzksNyBAQAogY2FyZF9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIHBjbV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiBzdGF0aWMgaW50IHBjbTMwMDhfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBwY20zMDA4X3NldHVwX2RhdGEgKnNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwogCiAJaWYgKCFjb2RlYykKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiAJcGNtMzAwOF9ncGlvX2ZyZWUoc2V0dXApOwogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKaW5kZXggY2FjMzczNi4uODdmNjA2YzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jCkBAIC0xNTEsMjEgKzE1MSw2IEBACiBTT0NfRU5VTSgiUGxheWJhY2sgRGUtZW1waGFzaXMiLCBzc20yNjAyX2VudW1bMV0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHNzbTI2MDJfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3NtMjYwMl9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJnNzbTI2MDJfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIE91dHB1dCBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNzbTI2MDJfb3V0cHV0X21peGVyX2NvbnRyb2xzW10gPSB7CiBTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFNTTTI2MDJfQVBBTkEsIDMsIDEsIDApLApAQCAtMjkxLDcgKzI3Niw3IEBACiAJdTE2IHNyYXRlOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc3NtMjYwMl9wcml2ICpzc20yNjAyID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAl1MTYgaWZhY2UgPSBzc20yNjAyX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBTU00yNjAyX0lGQUNFKSAmIDB4ZmZmMzsKQEAgLTMzNiw3ICszMjEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc3NtMjYwMl9wcml2ICpzc20yNjAyID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICptYXN0ZXJfcnVudGltZTsKQEAgLTM3Myw3ICszNTgsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAkvKiBzZXQgYWN0aXZlICovCiAJc3NtMjYwMl93cml0ZShjb2RlYywgU1NNMjYwMl9BQ1RJVkUsIEFDVElWRV9BQ1RJVkFURV9DT0RFQyk7CiAKQEAgLTM4NSw3ICszNzAsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc3NtMjYwMl9wcml2ICpzc20yNjAyID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAkvKiBkZWFjdGl2YXRlICovCiAJaWYgKCFjb2RlYy0+YWN0aXZlKQpAQCAtNTIxLDYgKzUwNiwxNiBAQAogI2RlZmluZSBTU00yNjAyX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHNzbTI2MDJfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHNzbTI2MDJfc3RhcnR1cCwKKwkucHJlcGFyZQk9IHNzbTI2MDJfcGNtX3ByZXBhcmUsCisJLmh3X3BhcmFtcwk9IHNzbTI2MDJfaHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHNzbTI2MDJfc2h1dGRvd24sCisJLmRpZ2l0YWxfbXV0ZQk9IHNzbTI2MDJfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IHNzbTI2MDJfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSBzc20yNjAyX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHNzbTI2MDJfZGFpID0gewogCS5uYW1lID0gIlNTTTI2MDIiLAogCS5wbGF5YmFjayA9IHsKQEAgLTUzNSwyMiArNTMwLDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBTU00yNjAyX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNTTTI2MDJfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gc3NtMjYwMl9zdGFydHVwLAotCQkucHJlcGFyZSA9IHNzbTI2MDJfcGNtX3ByZXBhcmUsCi0JCS5od19wYXJhbXMgPSBzc20yNjAyX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gc3NtMjYwMl9zaHV0ZG93biwKLQkJLmRpZ2l0YWxfbXV0ZSA9IHNzbTI2MDJfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSBzc20yNjAyX3NldF9kYWlfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IHNzbTI2MDJfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmc3NtMjYwMl9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNzbTI2MDJfZGFpKTsKIAogc3RhdGljIGludCBzc20yNjAyX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJc3NtMjYwMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CkBAIC01NTksNyArNTQ2LDcgQEAKIHN0YXRpYyBpbnQgc3NtMjYwMl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNTgxLDcgKzU2OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc3NtMjYwMl9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnLCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiU1NNMjYwMiI7CkBAIC02MjIsNyArNjA5LDggQEAKIAkJCUFQQU5BX0VOQUJMRV9NSUNfQk9PU1QpOwogCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfUFdSLCAwKTsKIAotCXNzbTI2MDJfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgc3NtMjYwMl9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShzc20yNjAyX3NuZF9jb250cm9scykpOwogCXNzbTI2MDJfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTY1Myw3ICs2NDEsNyBAQAogCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBzc20yNjAyX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTc0Nyw3ICs3MzUsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBzc20yNjAyOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTc2OCw3ICs3NTYsNyBAQAogc3RhdGljIGludCBzc20yNjAyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXNzbTI2MDJfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCmluZGV4IGNmZGVhMDAuLmMzZjRhZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKQEAgLTE4MywyNCArMTgzLDYgQEAKIAlTT0NfRU5VTSgiUGxheWJhY2sgRGUtZW1waGFzaXMiLCB0bHYzMjBhaWMyM19kZWVtcGgpLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHRsdjMyMGFpYzIzX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0KLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGx2MzIwYWljMjNfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ0bHYzMjBhaWMyM19zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLX0KLQogLyogUEdBIE1peGVyIGNvbnRyb2xzIGZvciBMaW5lIGFuZCBNaWMgc3dpdGNoICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdGx2MzIwYWljMjNfb3V0cHV0X21peGVyX2NvbnRyb2xzW10gPSB7CiAJU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBUTFYzMjBBSUMyM19BTkxHLCAzLCAxLCAwKSwKQEAgLTQyMyw3ICs0MDUsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgaWZhY2VfcmVnOwogCWludCByZXQ7CiAJc3RydWN0IGFpYzIzICphaWMyMyA9IGNvbnRhaW5lcl9vZihjb2RlYywgc3RydWN0IGFpYzIzLCBjb2RlYyk7CkBAIC00NzEsNyArNDUzLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBzZXQgYWN0aXZlICovCiAJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgwMDAxKTsKQEAgLTQ4NCw3ICs0NjYsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljMjMgKmFpYzIzID0gY29udGFpbmVyX29mKGNvZGVjLCBzdHJ1Y3QgYWljMjMsIGNvZGVjKTsKIAogCS8qIGRlYWN0aXZhdGUgKi8KQEAgLTU5OCw2ICs1ODAsMTUgQEAKICNkZWZpbmUgQUlDMjNfRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBcCiAJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHRsdjMyMGFpYzIzX2RhaV9vcHMgPSB7CisJLnByZXBhcmUJPSB0bHYzMjBhaWMyM19wY21fcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gdGx2MzIwYWljMjNfaHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHRsdjMyMGFpYzIzX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUJPSB0bHYzMjBhaWMyM19tdXRlLAorCS5zZXRfZm10CT0gdGx2MzIwYWljMjNfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSB0bHYzMjBhaWMyM19zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB0bHYzMjBhaWMyM19kYWkgPSB7CiAJLm5hbWUgPSAidGx2MzIwYWljMjMiLAogCS5wbGF5YmFjayA9IHsKQEAgLTYxMiwxNCArNjAzLDcgQEAKIAkJICAgIC5jaGFubmVsc19tYXggPSAyLAogCQkgICAgLnJhdGVzID0gQUlDMjNfUkFURVMsCiAJCSAgICAuZm9ybWF0cyA9IEFJQzIzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IHRsdjMyMGFpYzIzX3BjbV9wcmVwYXJlLAotCQkuaHdfcGFyYW1zID0gdGx2MzIwYWljMjNfaHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB0bHYzMjBhaWMyM19zaHV0ZG93biwKLQkJLmRpZ2l0YWxfbXV0ZSA9IHRsdjMyMGFpYzIzX211dGUsCi0JCS5zZXRfZm10ID0gdGx2MzIwYWljMjNfc2V0X2RhaV9mbXQsCi0JCS5zZXRfc3lzY2xrID0gdGx2MzIwYWljMjNfc2V0X2RhaV9zeXNjbGssCi0JfQorCS5vcHMgPSAmdGx2MzIwYWljMjNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh0bHYzMjBhaWMyM19kYWkpOwogCkBAIC02MjcsNyArNjExLDcgQEAKIAkJCSAgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDApOwogCXRsdjMyMGFpYzIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKQEAgLTYzOCw3ICs2MjIsNyBAQAogc3RhdGljIGludCB0bHYzMjBhaWMyM19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1MTYgcmVnOwogCkBAIC02NjAsNyArNjQ0LDcgQEAKICAqLwogc3RhdGljIGludCB0bHYzMjBhaWMyM19pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgcmVnOwogCkBAIC03MTgsNyArNzAyLDggQEAKIAogCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MSk7CiAKLQl0bHYzMjBhaWMyM19hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB0bHYzMjBhaWMyM19zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh0bHYzMjBhaWMyM19zbmRfY29udHJvbHMpKTsKIAl0bHYzMjBhaWMyM19hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNzQ2LDcgKzczMSw3IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHRsdjMyMGFpYzIzX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtODA0LDcgKzc4OSw3IEBACiAJaWYgKGFpYzIzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjID0gJmFpYzIzLT5jb2RlYzsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC04MjMsNyArODA4LDcgQEAKIHN0YXRpYyBpbnQgdGx2MzIwYWljMjNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzIzICphaWMyMyA9IGNvbnRhaW5lcl9vZihjb2RlYywgc3RydWN0IGFpYzIzLCBjb2RlYyk7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuYwppbmRleCAyOWYyZjFhLi4zMzg3ZDllIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGFpYzI2ICphaWMyNiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IGZzcmVmLCBkaXZpc29yLCB3bGVuLCBwdmFsLCBqdmFsLCBkdmFsLCBxdmFsOwogCXUxNiByZWc7CkBAIC0yNzAsNiArMjcwLDEzIEBACiAjZGVmaW5lIEFJQzI2X0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzggICAgIHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfQkUgfFwKIAkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF9CRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0JFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhaWMyNl9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBhaWMyNl9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IGFpYzI2X211dGUsCisJLnNldF9zeXNjbGsJPSBhaWMyNl9zZXRfc3lzY2xrLAorCS5zZXRfZm10CT0gYWljMjZfc2V0X2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhaWMyNl9kYWkgPSB7CiAJLm5hbWUgPSAidGx2MzIwYWljMjYiLAogCS5wbGF5YmFjayA9IHsKQEAgLTI4NiwxMiArMjkzLDcgQEAKIAkJLnJhdGVzID0gQUlDMjZfUkFURVMsCiAJCS5mb3JtYXRzID0gQUlDMjZfRk9STUFUUywKIAl9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBhaWMyNl9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSBhaWMyNl9tdXRlLAotCQkuc2V0X3N5c2NsayA9IGFpYzI2X3NldF9zeXNjbGssCi0JCS5zZXRfZm10ID0gYWljMjZfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmYWljMjZfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhaWMyNl9kYWkpOwogCkBAIC0zMjIsOSArMzI0LDggQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbDsKIAlzdHJ1Y3QgYWljMjYgKmFpYzI2OwotCWludCBpLCByZXQsIGVycjsKKwlpbnQgcmV0LCBlcnI7CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUHJvYmluZyBBSUMyNiBTb0MgQ09ERUMgZHJpdmVyXG4iKTsKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJzb2NkZXY9JXBcbiIsIHNvY2Rldik7CkBAIC0zMzgsNyArMzM5LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWNvZGVjID0gJmFpYzI2LT5jb2RlYzsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVnaXN0ZXJpbmcgUENNcywgZGV2PSVwLCBzb2NkZXYtPmRldj0lcFxuIiwKIAkJJnBkZXYtPmRldiwgc29jZGV2LT5kZXYpOwpAQCAtMzUxLDExICszNTIsOSBAQAogCiAJLyogcmVnaXN0ZXIgY29udHJvbHMgKi8KIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWdpc3RlcmluZyBjb250cm9sc1xuIik7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljMjZfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWtjb250cm9sID0gc25kX3NvY19jbmV3KCZhaWMyNl9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKTsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsIGtjb250cm9sKTsKLQkJV0FSTl9PTihlcnIgPCAwKTsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzI2X3NuZF9jb250cm9scywKKwkJCUFSUkFZX1NJWkUoYWljMjZfc25kX2NvbnRyb2xzKSk7CisJV0FSTl9PTihlcnIgPCAwKTsKIAogCS8qIENPREVDIGlzIHNldHVwLCB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGNhcmQgbm93ICovCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVnaXN0ZXJpbmcgY2FyZFxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKaW5kZXggYWVhMGNiNy4uYWIwOTlmNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCiAjaW5jbHVkZSAidGx2MzIwYWljM3guaCIKIApAQCAtMjUwLDU2ICsyNTEsODYgQEAKIAlTT0NfRU5VTV9ET1VCTEUoQUlDM1hfQ09ERUNfREZJTFRfQ1RSTCwgNiwgNCwgNCwgYWljM3hfYWRjX2hwZiksCiB9OwogCisvKgorICogREFDIGRpZ2l0YWwgdm9sdW1lcy4gRnJvbSAtNjMuNSB0byAwIGRCIGluIDAuNSBkQiBzdGVwcworICovCitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoZGFjX3RsdiwgLTYzNTAsIDUwLCAwKTsKKy8qIEFEQyBQR0EgZ2FpbiB2b2x1bWVzLiBGcm9tIDAgdG8gNTkuNSBkQiBpbiAwLjUgZEIgc3RlcHMgKi8KK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShhZGNfdGx2LCAwLCA1MCwgMCk7CisvKgorICogT3V0cHV0IHN0YWdlIHZvbHVtZXMuIEZyb20gLTc4LjMgdG8gMCBkQi4gTXV0ZWQgYmVsb3cgLTc4LjMgZEIuCisgKiBTdGVwIHNpemUgaXMgYXBwcm94aW1hdGVseSAwLjUgZEIgb3ZlciBtb3N0IG9mIHRoZSBzY2FsZSBidXQgaW5jcmVhc2luZworICogbmVhciB0aGUgdmVyeSBsb3cgbGV2ZWxzLgorICogRGVmaW5lIGRCIHNjYWxlIHNvIHRoYXQgaXQgaXMgbW9zdGx5IGNvcnJlY3QgZm9yIHJhbmdlIGFib3V0IC01NSB0byAwIGRCCisgKiBidXQgaGF2aW5nIGluY3JlYXNpbmcgZEIgZGlmZmVyZW5jZSBiZWxvdyB0aGF0IChhbmQgd2hlcmUgaXQgZG9lc24ndCBjb3VudAorICogc28gbXVjaCkuIFRoaXMgc2V0dGluZyBzaG93cyAtNTAgZEIgKGFjdHVhbCBpcyAtNTAuMyBkQikgZm9yIHJlZ2lzdGVyCisgKiB2YWx1ZSAxMDAgYW5kIC01OC41IGRCIChhY3R1YWwgaXMgLTc4LjMgZEIpIGZvciByZWdpc3RlciB2YWx1ZSAxMTcuCisgKi8KK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRwdXRfc3RhZ2VfdGx2LCAtNTkwMCwgNTAsIDEpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljM3hfc25kX2NvbnRyb2xzW10gPSB7CiAJLyogT3V0cHV0ICovCi0JU09DX0RPVUJMRV9SKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgTERBQ19WT0wsIFJEQUNfVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMREFDX1ZPTCwgUkRBQ19WT0wsIDAsIDB4N2YsIDEsIGRhY190bHYpLAogCi0JU09DX0RPVUJMRV9SKCJMaW5lIERBQyBQbGF5YmFjayBWb2x1bWUiLCBEQUNMMV8yX0xMT1BNX1ZPTCwKLQkJICAgICBEQUNSMV8yX1JMT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiTGluZSBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX0xMT1BNX1ZPTCwgREFDUjFfMl9STE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfU0lOR0xFKCJMaW5lTCBQbGF5YmFjayBTd2l0Y2giLCBMTE9QTV9DVFJMLCAzLCAweDAxLCAwKSwKIAlTT0NfU0lOR0xFKCJMaW5lUiBQbGF5YmFjayBTd2l0Y2giLCBSTE9QTV9DVFJMLCAzLCAweDAxLCAwKSwKLQlTT0NfRE9VQkxFX1IoIkxpbmVMIERBQyBQbGF5YmFjayBWb2x1bWUiLCBEQUNMMV8yX0xMT1BNX1ZPTCwKLQkJICAgICBEQUNSMV8yX0xMT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCi0JU09DX1NJTkdMRSgiTGluZUwgTGVmdCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9MTE9QTV9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX1NJTkdMRSgiTGluZVIgUmlnaHQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FSXzJfUkxPUE1fVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19ET1VCTEVfUigiTGluZUwgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIExJTkUyTF8yX0xMT1BNX1ZPTCwKLQkJICAgICBMSU5FMlJfMl9MTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAotCVNPQ19ET1VCTEVfUigiTGluZVIgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIExJTkUyTF8yX1JMT1BNX1ZPTCwKLQkJICAgICBMSU5FMlJfMl9STE9QTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmVMIERBQyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBQ0wxXzJfTExPUE1fVk9MLCBEQUNSMV8yX0xMT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJMaW5lTCBMZWZ0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQUxfMl9MTE9QTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkxpbmVSIFJpZ2h0IFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQVJfMl9STE9QTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiTGluZUwgTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfTExPUE1fVk9MLCBMSU5FMlJfMl9MTE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lUiBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBMSU5FMkxfMl9STE9QTV9WT0wsIExJTkUyUl8yX1JMT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX0RPVUJMRV9SKCJNb25vIERBQyBQbGF5YmFjayBWb2x1bWUiLCBEQUNMMV8yX01PTk9MT1BNX1ZPTCwKLQkJICAgICBEQUNSMV8yX01PTk9MT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiTW9ubyBEQUMgUGxheWJhY2sgVm9sdW1lIiwKKwkJCSBEQUNMMV8yX01PTk9MT1BNX1ZPTCwgREFDUjFfMl9NT05PTE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfU0lOR0xFKCJNb25vIERBQyBQbGF5YmFjayBTd2l0Y2giLCBNT05PTE9QTV9DVFJMLCAzLCAweDAxLCAwKSwKLQlTT0NfRE9VQkxFX1IoIk1vbm8gUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FMXzJfTU9OT0xPUE1fVk9MLAotCQkgICAgIFBHQVJfMl9NT05PTE9QTV9WT0wsIDAsIDB4N2YsIDEpLAotCVNPQ19ET1VCTEVfUigiTW9ubyBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfTU9OT0xPUE1fVk9MLAotCQkgICAgIExJTkUyUl8yX01PTk9MT1BNX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX0RPVUJMRV9SX1RMVigiTW9ubyBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgUEdBTF8yX01PTk9MT1BNX1ZPTCwgUEdBUl8yX01PTk9MT1BNX1ZPTCwKKwkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIk1vbm8gTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgTElORTJMXzJfTU9OT0xPUE1fVk9MLCBMSU5FMlJfMl9NT05PTE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAotCVNPQ19ET1VCTEVfUigiSFAgREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfSFBMT1VUX1ZPTCwKLQkJICAgICBEQUNSMV8yX0hQUk9VVF9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkhQIERBQyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBQ0wxXzJfSFBMT1VUX1ZPTCwgREFDUjFfMl9IUFJPVVRfVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX0RPVUJMRV9SKCJIUCBEQUMgUGxheWJhY2sgU3dpdGNoIiwgSFBMT1VUX0NUUkwsIEhQUk9VVF9DVFJMLCAzLAogCQkgICAgIDB4MDEsIDApLAotCVNPQ19ET1VCTEVfUigiSFAgUmlnaHQgUEdBIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLCBQR0FSXzJfSFBMT1VUX1ZPTCwKLQkJICAgICBQR0FSXzJfSFBST1VUX1ZPTCwgMCwgMHg3ZiwgMSksCi0JU09DX1NJTkdMRSgiSFBMIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0hQTE9VVF9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX1NJTkdMRSgiSFBSIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgUEdBTF8yX0hQUk9VVF9WT0wsCi0JCSAgICAgMCwgMHg3ZiwgMSksCi0JU09DX0RPVUJMRV9SKCJIUCBMaW5lMiBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgTElORTJMXzJfSFBMT1VUX1ZPTCwKLQkJICAgICBMSU5FMlJfMl9IUFJPVVRfVk9MLCAwLCAweDdmLCAxKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJIUCBSaWdodCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCQkgUEdBUl8yX0hQTE9VVF9WT0wsIFBHQVJfMl9IUFJPVVRfVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkhQTCBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfSFBMT1VUX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiSFBSIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQUxfMl9IUFJPVVRfVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkhQIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX0hQTE9VVF9WT0wsIExJTkUyUl8yX0hQUk9VVF9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAotCVNPQ19ET1VCTEVfUigiSFBDT00gREFDIFBsYXliYWNrIFZvbHVtZSIsIERBQ0wxXzJfSFBMQ09NX1ZPTCwKLQkJICAgICBEQUNSMV8yX0hQUkNPTV9WT0wsIDAsIDB4N2YsIDEpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkhQQ09NIERBQyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBQ0wxXzJfSFBMQ09NX1ZPTCwgREFDUjFfMl9IUFJDT01fVk9MLAorCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX0RPVUJMRV9SKCJIUENPTSBEQUMgUGxheWJhY2sgU3dpdGNoIiwgSFBMQ09NX0NUUkwsIEhQUkNPTV9DVFJMLCAzLAogCQkgICAgIDB4MDEsIDApLAotCVNPQ19TSU5HTEUoIkhQTENPTSBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9IUExDT01fVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19TSU5HTEUoIkhQUkNPTSBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFBHQUxfMl9IUFJDT01fVk9MLAotCQkgICAgIDAsIDB4N2YsIDEpLAotCVNPQ19ET1VCTEVfUigiSFBDT00gTGluZTIgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIExJTkUyTF8yX0hQTENPTV9WT0wsCi0JCSAgICAgTElORTJSXzJfSFBSQ09NX1ZPTCwgMCwgMHg3ZiwgMSksCisJU09DX1NJTkdMRV9UTFYoIkhQTENPTSBQR0EgQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgICAgICBQR0FMXzJfSFBMQ09NX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiSFBSQ09NIFBHQSBCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwKKwkJICAgICAgIFBHQUxfMl9IUFJDT01fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkhQQ09NIExpbmUyIEJ5cGFzcyBQbGF5YmFjayBWb2x1bWUiLAorCQkJIExJTkUyTF8yX0hQTENPTV9WT0wsIExJTkUyUl8yX0hQUkNPTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAogCS8qCiAJICogTm90ZTogZW5hYmxlIEF1dG9tYXRpYyBpbnB1dCBHYWluIENvbnRyb2xsZXIgd2l0aCBjYXJlLiBJdCBjYW4KQEAgLTMwOCwyOCArMzM5LDEzIEBACiAJU09DX0RPVUJMRV9SKCJBR0MgU3dpdGNoIiwgTEFHQ19DVFJMX0EsIFJBR0NfQ1RSTF9BLCA3LCAweDAxLCAwKSwKIAogCS8qIElucHV0ICovCi0JU09DX0RPVUJMRV9SKCJQR0EgQ2FwdHVyZSBWb2x1bWUiLCBMQURDX1ZPTCwgUkFEQ19WT0wsIDAsIDB4N2YsIDApLAorCVNPQ19ET1VCTEVfUl9UTFYoIlBHQSBDYXB0dXJlIFZvbHVtZSIsIExBRENfVk9MLCBSQURDX1ZPTCwKKwkJCSAwLCAxMTksIDAsIGFkY190bHYpLAogCVNPQ19ET1VCTEVfUigiUEdBIENhcHR1cmUgU3dpdGNoIiwgTEFEQ19WT0wsIFJBRENfVk9MLCA3LCAweDAxLCAxKSwKIAogCVNPQ19FTlVNKCJBREMgSFBGIEN1dC1vZmYiLCBhaWMzeF9lbnVtW0FEQ19IUEZfRU5VTV0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IGFpYzN4X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFpYzN4X3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmYWljM3hfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBMZWZ0IERBQyBNdXggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWMzeF9sZWZ0X2RhY19tdXhfY29udHJvbHMgPQogU09DX0RBUE1fRU5VTSgiUm91dGUiLCBhaWMzeF9lbnVtW0xEQUNfRU5VTV0pOwpAQCAtNzQ2LDcgKzc2Miw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMzeF9wcml2ICphaWMzeCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IGNvZGVjX2NsayA9IDAsIGJ5cGFzc19wbGwgPSAwLCBmc3JlZiwgbGFzdF9jbGsgPSAwOwogCXU4IGRhdGEsIHIsIHAsIHBsbF9xLCBwbGxfcCA9IDEsIHBsbF9yID0gMSwgcGxsX2ogPSAxOwpAQCAtMTA3Miw2ICsxMDg4LDEzIEBACiAjZGVmaW5lIEFJQzNYX0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAogCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhaWMzeF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBhaWMzeF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IGFpYzN4X211dGUsCisJLnNldF9zeXNjbGsJPSBhaWMzeF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IGFpYzN4X3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFpYzN4X2RhaSA9IHsKIAkubmFtZSA9ICJ0bHYzMjBhaWMzeCIsCiAJLnBsYXliYWNrID0gewpAQCAtMTA4NiwxOSArMTEwOSwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQUlDM1hfUkFURVMsCiAJCS5mb3JtYXRzID0gQUlDM1hfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBhaWMzeF9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSBhaWMzeF9tdXRlLAotCQkuc2V0X3N5c2NsayA9IGFpYzN4X3NldF9kYWlfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IGFpYzN4X3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJmFpYzN4X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYWljM3hfZGFpKTsKIAogc3RhdGljIGludCBhaWMzeF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWFpYzN4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIApAQCAtMTEwOCw3ICsxMTI2LDcgQEAKIHN0YXRpYyBpbnQgYWljM3hfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtMTEzMSw3ICsxMTQ5LDcgQEAKICAqLwogc3RhdGljIGludCBhaWMzeF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljM3hfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAJaW50IHJlZywgcmV0ID0gMDsKIApAQCAtMTIyNyw3ICsxMjQ1LDggQEAKIAlhaWMzeF93cml0ZShjb2RlYywgQUlDM1hfR1BJTzFfUkVHLCAoc2V0dXAtPmdwaW9fZnVuY1swXSAmIDB4ZikgPDwgNCk7CiAJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8yX1JFRywgKHNldHVwLT5ncGlvX2Z1bmNbMV0gJiAweGYpIDw8IDQpOwogCi0JYWljM3hfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWljM3hfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWljM3hfc25kX2NvbnRyb2xzKSk7CiAJYWljM3hfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTEyNjEsNyArMTI4MCw3IEBACiAJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBhaWMzeF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC0xMzY2LDcgKzEzODUsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBhaWMzeDsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CkBAIC0xMzkyLDcgKzE0MTEsNyBAQAogc3RhdGljIGludCBhaWMzeF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIHBvd2VyIGRvd24gY2hpcCAqLwogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwppbmRleCBlYTM3MGE0Li45NzczOGUyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwpAQCAtNDIsNyArNDIsNyBAQAogICovCiBzdGF0aWMgY29uc3QgdTggdHdsNDAzMF9yZWdbVFdMNDAzMF9DQUNIRVJFR05VTV0gPSB7CiAJMHgwMCwgLyogdGhpcyByZWdpc3RlciBub3QgdXNlZAkJKi8KLQkweDkzLCAvKiBSRUdfQ09ERUNfTU9ERQkJKDB4MSkJKi8KKwkweDkxLCAvKiBSRUdfQ09ERUNfTU9ERQkJKDB4MSkJKi8KIAkweGMzLCAvKiBSRUdfT1BUSU9OCQkoMHgyKQkqLwogCTB4MDAsIC8qIFJFR19VTktOT1dOCQkoMHgzKQkqLwogCTB4MDAsIC8qIFJFR19NSUNCSUFTX0NUTAkoMHg0KQkqLwpAQCAtMTE3LDYgKzExNywxMyBAQAogCTB4MDAsIC8qIFJFR19NSVNDX1NFVF8yCQkoMHg0OSkJKi8KIH07CiAKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHR3bDQwMzBfcHJpdiB7CisJdW5zaWduZWQgaW50IGJ5cGFzc19zdGF0ZTsKKwl1bnNpZ25lZCBpbnQgY29kZWNfcG93ZXJlZDsKKwl1bnNpZ25lZCBpbnQgY29kZWNfbXV0ZWQ7Cit9OworCiAvKgogICogcmVhZCB0d2w0MDMwIHJlZ2lzdGVyIGNhY2hlCiAgKi8KQEAgLTEyNSw2ICsxMzIsOSBAQAogewogCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKKwlpZiAocmVnID49IFRXTDQwMzBfQ0FDSEVSRUdOVU0pCisJCXJldHVybiAtRUlPOworCiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKQEAgLTE1MSwyNiArMTYxLDIyIEBACiAJcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCB2YWx1ZSwgcmVnKTsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF9jbGVhcl9jb2RlY3BkeihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCB0d2w0MDMwX2NvZGVjX2VuYWJsZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBlbmFibGUpCiB7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTggbW9kZTsKIAotCW1vZGUgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFKTsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLAotCQltb2RlICYgflRXTDQwMzBfQ09ERUNQRFopOwotCi0JLyogUkVWSVNJVDogdGhpcyBkZWxheSBpcyBwcmVzZW50IGluIFRJIHNhbXBsZSBkcml2ZXJzICovCi0JLyogYnV0IHRoZXJlIHNlZW1zIHRvIGJlIG5vIFRSTSByZXF1aXJlbWVudCBmb3IgaXQgICAgICovCi0JdWRlbGF5KDEwKTsKLX0KLQotc3RhdGljIHZvaWQgdHdsNDAzMF9zZXRfY29kZWNwZHooc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXU4IG1vZGU7CisJaWYgKGVuYWJsZSA9PSB0d2w0MDMwLT5jb2RlY19wb3dlcmVkKQorCQlyZXR1cm47CiAKIAltb2RlID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwKLQkJbW9kZSB8IFRXTDQwMzBfQ09ERUNQRFopOworCWlmIChlbmFibGUpCisJCW1vZGUgfD0gVFdMNDAzMF9DT0RFQ1BEWjsKKwllbHNlCisJCW1vZGUgJj0gflRXTDQwMzBfQ09ERUNQRFo7CisKKwl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLCBtb2RlKTsKKwl0d2w0MDMwLT5jb2RlY19wb3dlcmVkID0gZW5hYmxlOwogCiAJLyogUkVWSVNJVDogdGhpcyBkZWxheSBpcyBwcmVzZW50IGluIFRJIHNhbXBsZSBkcml2ZXJzICovCiAJLyogYnV0IHRoZXJlIHNlZW1zIHRvIGJlIG5vIFRSTSByZXF1aXJlbWVudCBmb3IgaXQgICAgICovCkBAIC0xODIsNyArMTg4LDcgQEAKIAlpbnQgaTsKIAogCS8qIGNsZWFyIENPREVDUERaIHByaW9yIHRvIHNldHRpbmcgcmVnaXN0ZXIgZGVmYXVsdHMgKi8KLQl0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KGNvZGVjKTsKKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAKIAkvKiBzZXQgYWxsIGF1ZGlvIHNlY3Rpb24gcmVnaXN0ZXJzIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMgKi8KIAlmb3IgKGkgPSBUV0w0MDMwX1JFR19PUFRJT047IGkgPD0gVFdMNDAzMF9SRUdfTUlTQ19TRVRfMjsgaSsrKQpAQCAtMTkwLDYgKzE5NiwxMjIgQEAKIAogfQogCitzdGF0aWMgdm9pZCB0d2w0MDMwX2NvZGVjX211dGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1OCByZWdfdmFsOworCisJaWYgKG11dGUgPT0gdHdsNDAzMC0+Y29kZWNfbXV0ZWQpCisJCXJldHVybjsKKworCWlmIChtdXRlKSB7CisJCS8qIEJ5cGFzcyB0aGUgcmVnX2NhY2hlIGFuZCBtdXRlIHRoZSB2b2x1bWVzCisJCSAqIEhlYWRzZXQgbXV0ZSBpcyBkb25lIGluIGl0J3Mgb3duIGV2ZW50IGhhbmRsZXIKKwkJICogVGhpbmdzIHRvIG11dGU6ICBFYXJwaWVjZSwgUHJlRHJpdkwvUiwgQ2Fya2l0TC9SCisJCSAqLworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfRUFSX0NUTCk7CisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX0VBUl9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfRUFSX0NUTCk7CisKKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURMX0NUTCk7CisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRURMX0dBSU4pLAorCQkJCQlUV0w0MDMwX1JFR19QUkVETF9DVEwpOworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRFJfQ1RMKTsKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFRFJfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX1BSRURMX0NUTCk7CisKKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLTF9DVEwpOworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVDS0xfR0FJTiksCisJCQkJCVRXTDQwMzBfUkVHX1BSRUNLTF9DVEwpOworCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCk7CisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRUNLTF9HQUlOKSwKKwkJCQkJVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCk7CisKKwkJLyogRGlzYWJsZSBQTEwgKi8KKwkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMKTsKKwkJcmVnX3ZhbCAmPSB+VFdMNDAzMF9BUExMX0VOOworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCwgcmVnX3ZhbCk7CisJfSBlbHNlIHsKKwkJLyogUmVzdG9yZSB0aGUgdm9sdW1lcworCQkgKiBIZWFkc2V0IG11dGUgaXMgZG9uZSBpbiBpdCdzIG93biBldmVudCBoYW5kbGVyCisJCSAqIFRoaW5ncyB0byByZXN0b3JlOiAgRWFycGllY2UsIFByZURyaXZML1IsIENhcmtpdEwvUgorCQkgKi8KKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfRUFSX0NUTCwKKwkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0VBUl9DVEwpKTsKKworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVETF9DVEwsCisJCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVETF9DVEwpKTsKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRFJfQ1RMLAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRFJfQ1RMKSk7CisKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCwKKwkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLTF9DVEwpKTsKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCwKKwkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLUl9DVEwpKTsKKworCQkvKiBFbmFibGUgUExMICovCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCk7CisJCXJlZ192YWwgfD0gVFdMNDAzMF9BUExMX0VOOworCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCwgcmVnX3ZhbCk7CisJfQorCisJdHdsNDAzMC0+Y29kZWNfbXV0ZWQgPSBtdXRlOworfQorCitzdGF0aWMgdm9pZCB0d2w0MDMwX3Bvd2VyX3VwKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1OCBhbmFtaWNsLCByZWdtaXNjMSwgYnl0ZTsKKwlpbnQgaSA9IDA7CisKKwlpZiAodHdsNDAzMC0+Y29kZWNfcG93ZXJlZCkKKwkJcmV0dXJuOworCisJLyogc2V0IENPREVDUERaIHRvIHR1cm4gb24gY29kZWMgKi8KKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CisKKwkvKiBpbml0aWF0ZSBvZmZzZXQgY2FuY2VsbGF0aW9uICovCisJYW5hbWljbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wpOworCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wsCisJCWFuYW1pY2wgfCBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKTsKKworCS8qIHdhaXQgZm9yIG9mZnNldCBjYW5jZWxsYXRpb24gdG8gY29tcGxldGUgKi8KKwlkbyB7CisJCS8qIHRoaXMgdGFrZXMgYSBsaXR0bGUgd2hpbGUsIHNvIGRvbid0IHNsYW0gaTJjICovCisJCXVkZWxheSgyMDAwKTsKKwkJdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgJmJ5dGUsCisJCQkJICAgIFRXTDQwMzBfUkVHX0FOQU1JQ0wpOworCX0gd2hpbGUgKChpKysgPCAxMDApICYmCisJCSAoKGJ5dGUgJiBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKSA9PQorCQkgIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpKTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSByZWdfY2FjaGUgaGFzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBIVyAqLworCXR3bDQwMzBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMLCBieXRlKTsKKworCS8qIGFudGktcG9wIHdoZW4gY2hhbmdpbmcgYW5hbG9nIGdhaW4gKi8KKwlyZWdtaXNjMSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX01JU0NfU0VUXzEpOworCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX01JU0NfU0VUXzEsCisJCXJlZ21pc2MxIHwgVFdMNDAzMF9TTU9PVEhfQU5BVk9MX0VOKTsKKworCS8qIHRvZ2dsZSBDT0RFQ1BEWiBhcyBwZXIgVFJNICovCisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKK30KKworLyoKKyAqIFVuY29uZGl0aW9uYWwgcG93ZXIgZG93bgorICovCitzdGF0aWMgdm9pZCB0d2w0MDMwX3Bvd2VyX2Rvd24oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCS8qIHBvd2VyIGRvd24gKi8KKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7Cit9CisKIC8qIEVhcnBpZWNlICovCiBzdGF0aWMgY29uc3QgY2hhciAqdHdsNDAzMF9lYXJwaWVjZV90ZXh0c1tdID0KIAkJeyJPZmYiLCAiREFDTDEiLCAiREFDTDIiLCAiREFDUjEifTsKQEAgLTM2Niw2ICs0ODgsNDEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fbWljcGF0aHR4Ml9jb250cm9sID0KIFNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgdHdsNDAzMF9taWNwYXRodHgyX2VudW0pOwogCisvKiBBbmFsb2cgYnlwYXNzIGZvciBBdWRpb1IxICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2FieXBhc3NyMV9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDQwMzBfUkVHX0FSWFIxX0FQR0FfQ1RMLCAyLCAxLCAwKTsKKworLyogQW5hbG9nIGJ5cGFzcyBmb3IgQXVkaW9MMSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9hYnlwYXNzbDFfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w0MDMwX1JFR19BUlhMMV9BUEdBX0NUTCwgMiwgMSwgMCk7CisKKy8qIEFuYWxvZyBieXBhc3MgZm9yIEF1ZGlvUjIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYWJ5cGFzc3IyX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfQVJYUjJfQVBHQV9DVEwsIDIsIDEsIDApOworCisvKiBBbmFsb2cgYnlwYXNzIGZvciBBdWRpb0wyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2FieXBhc3NsMl9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDQwMzBfUkVHX0FSWEwyX0FQR0FfQ1RMLCAyLCAxLCAwKTsKKworLyogRGlnaXRhbCBieXBhc3MgZ2FpbiwgMCBtdXRlcyB0aGUgYnlwYXNzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHR3bDQwMzBfZGFwbV9kYnlwYXNzX3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDIpLAorCTAsIDMsIFRMVl9EQl9TQ0FMRV9JVEVNKC0yNDAwLCAwLCAxKSwKKwk0LCA3LCBUTFZfREJfU0NBTEVfSVRFTSgtMTgwMCwgNjAwLCAwKSwKK307CisKKy8qIERpZ2l0YWwgYnlwYXNzIGxlZnQgKFRYMUwgLT4gUlgyTCkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fZGJ5cGFzc2xfY29udHJvbCA9CisJU09DX0RBUE1fU0lOR0xFX1RMVigiVm9sdW1lIiwKKwkJCVRXTDQwMzBfUkVHX0FUWDJBUlhQR0EsIDMsIDcsIDAsCisJCQl0d2w0MDMwX2RhcG1fZGJ5cGFzc190bHYpOworCisvKiBEaWdpdGFsIGJ5cGFzcyByaWdodCAoVFgxUiAtPiBSWDJSKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9kYnlwYXNzcl9jb250cm9sID0KKwlTT0NfREFQTV9TSU5HTEVfVExWKCJWb2x1bWUiLAorCQkJVFdMNDAzMF9SRUdfQVRYMkFSWFBHQSwgMCwgNywgMCwKKwkJCXR3bDQwMzBfZGFwbV9kYnlwYXNzX3Rsdik7CisKIHN0YXRpYyBpbnQgbWljcGF0aF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewpAQCAtNDIwLDYgKzU3Nyw3OSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGhlYWRzZXRsX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXVuc2lnbmVkIGNoYXIgaHNfZ2FpbiwgaHNfcG9wOworCisJLyogU2F2ZSB0aGUgY3VycmVudCB2b2x1bWUgKi8KKwloc19nYWluID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfR0FJTl9TRVQpOworCWhzX3BvcCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VUKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKKwkJLyogRG8gdGhlIGFudGktcG9wL2JpYXMgcmFtcCBlbmFibGUgYWNjb3JkaW5nIHRvIHRoZSBUUk0gKi8KKwkJaHNfcG9wIHw9IFRXTDQwMzBfVk1JRF9FTjsKKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7CisJCS8qIElzIHRoaXMgbmVlZGVkPyBDYW4gd2UganVzdCB1c2Ugd2hhdGV2ZXIgZ2FpbiBoZXJlPyAqLworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19HQUlOX1NFVCwKKwkJCQkoaHNfZ2FpbiAmICh+MHgwZikpIHwgMHgwYSk7CisJCWhzX3BvcCB8PSBUV0w0MDMwX1JBTVBfRU47CisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOworCisJCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHZvbHVtZSAqLworCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IU19HQUlOX1NFVCwgaHNfZ2Fpbik7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQkvKiBEbyB0aGUgYW50aS1wb3AvYmlhcyByYW1wIGRpc2FibGUgYWNjb3JkaW5nIHRvIHRoZSBUUk0gKi8KKwkJaHNfcG9wICY9IH5UV0w0MDMwX1JBTVBfRU47CisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOworCQkvKiBCeXBhc3MgdGhlIHJlZ19jYWNoZSB0byBtdXRlIHRoZSBoZWFkc2V0ICovCisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAorCQkJCQloc19nYWluICYgKH4weDBmKSwKKwkJCQkJVFdMNDAzMF9SRUdfSFNfR0FJTl9TRVQpOworCQloc19wb3AgJj0gflRXTDQwMzBfVk1JRF9FTjsKKwkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBieXBhc3NfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKXctPmtjb250cm9scy0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gdy0+Y29kZWMtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKworCXJlZyA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIG0tPnJlZyk7CisKKwlpZiAobS0+cmVnIDw9IFRXTDQwMzBfUkVHX0FSWFIyX0FQR0FfQ1RMKSB7CisJCS8qIEFuYWxvZyBieXBhc3MgKi8KKwkJaWYgKHJlZyAmICgxIDw8IG0tPnNoaWZ0KSkKKwkJCXR3bDQwMzAtPmJ5cGFzc19zdGF0ZSB8PQorCQkJCSgxIDw8IChtLT5yZWcgLSBUV0w0MDMwX1JFR19BUlhMMV9BUEdBX0NUTCkpOworCQllbHNlCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgJj0KKwkJCQl+KDEgPDwgKG0tPnJlZyAtIFRXTDQwMzBfUkVHX0FSWEwxX0FQR0FfQ1RMKSk7CisJfSBlbHNlIHsKKwkJLyogRGlnaXRhbCBieXBhc3MgKi8KKwkJaWYgKHJlZyAmICgweDcgPDwgbS0+c2hpZnQpKQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlIHw9ICgxIDw8IChtLT5zaGlmdCA/IDUgOiA0KSk7CisJCWVsc2UKKwkJCXR3bDQwMzAtPmJ5cGFzc19zdGF0ZSAmPSB+KDEgPDwgKG0tPnNoaWZ0ID8gNSA6IDQpKTsKKwl9CisKKwlpZiAody0+Y29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHsKKwkJaWYgKHR3bDQwMzAtPmJ5cGFzc19zdGF0ZSkKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZSh3LT5jb2RlYywgMCk7CisJCWVsc2UKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZSh3LT5jb2RlYywgMSk7CisJfQorCXJldHVybiAwOworfQorCiAvKgogICogU29tZSBvZiB0aGUgZ2FpbiBjb250cm9scyBpbiBUV0wgKG1vc3RseSB0aG9zZSB3aGljaCBhcmUgYXNzb2NpYXRlZCB3aXRoCiAgKiB0aGUgb3V0cHV0cykgYXJlIGltcGxlbWVudGVkIGluIGFuIGludGVyZXN0aW5nIHdheToKQEAgLTYxNCw2ICs4NDQsMTcgQEAKICAqLwogc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGlucHV0X2dhaW5fdGx2LCAwLCA2MDAsIDApOwogCitzdGF0aWMgY29uc3QgY2hhciAqdHdsNDAzMF9yYW1wZGVsYXlfdGV4dHNbXSA9IHsKKwkiMjcvMjAvMTQgbXMiLCAiNTUvNDAvMjcgbXMiLCAiMTA5LzgxLzU1IG1zIiwgIjIxOC8xNjEvMTA5IG1zIiwKKwkiNDM3LzMyMy8yMTggbXMiLCAiODc0LzY0NS80MzcgbXMiLCAiMTc0OC8xMjkxLzg3NCBtcyIsCisJIjM0OTUvMjU4MS8xNzQ4IG1zIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB0d2w0MDMwX3JhbXBkZWxheV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIDIsCisJCQlBUlJBWV9TSVpFKHR3bDQwMzBfcmFtcGRlbGF5X3RleHRzKSwKKwkJCXR3bDQwMzBfcmFtcGRlbGF5X3RleHRzKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfc25kX2NvbnRyb2xzW10gPSB7CiAJLyogQ29tbW9uIHBsYXliYWNrIGdhaW4gY29udHJvbHMgKi8KIAlTT0NfRE9VQkxFX1JfVExWKCJEQUMxIERpZ2l0YWwgRmluZSBQbGF5YmFjayBWb2x1bWUiLApAQCAtNjY4LDI0ICs5MDksMTAgQEAKIAogCVNPQ19ET1VCTEVfVExWKCJBbmFsb2cgQ2FwdHVyZSBWb2x1bWUiLCBUV0w0MDMwX1JFR19BTkFNSUNfR0FJTiwKIAkJMCwgMywgNSwgMCwgaW5wdXRfZ2Fpbl90bHYpLAorCisJU09DX0VOVU0oIkhTIHJhbXAgZGVsYXkiLCB0d2w0MDMwX3JhbXBkZWxheV9lbnVtKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB0d2w0MDMwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR3bDQwMzBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ0d2w0MDMwX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHR3bDQwMzBfZGFwbV93aWRnZXRzW10gPSB7CiAJLyogTGVmdCBjaGFubmVsIGlucHV0cyAqLwogCVNORF9TT0NfREFQTV9JTlBVVCgiTUFJTk1JQyIpLApAQCAtNzE0LDEzICs5NDEsMTMgQEAKIAogCS8qIERBQ3MgKi8KIAlTTkRfU09DX0RBUE1fREFDKCJEQUMgUmlnaHQxIiwgIlJpZ2h0IEZyb250IFBsYXliYWNrIiwKLQkJCVRXTDQwMzBfUkVHX0FWREFDX0NUTCwgMCwgMCksCisJCQlTTkRfU09DX05PUE0sIDAsIDApLAogCVNORF9TT0NfREFQTV9EQUMoIkRBQyBMZWZ0MSIsICJMZWZ0IEZyb250IFBsYXliYWNrIiwKLQkJCVRXTDQwMzBfUkVHX0FWREFDX0NUTCwgMSwgMCksCisJCQlTTkRfU09DX05PUE0sIDAsIDApLAogCVNORF9TT0NfREFQTV9EQUMoIkRBQyBSaWdodDIiLCAiUmlnaHQgUmVhciBQbGF5YmFjayIsCi0JCQlUV0w0MDMwX1JFR19BVkRBQ19DVEwsIDIsIDApLAorCQkJU05EX1NPQ19OT1BNLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fREFDKCJEQUMgTGVmdDIiLCAiTGVmdCBSZWFyIFBsYXliYWNrIiwKLQkJCVRXTDQwMzBfUkVHX0FWREFDX0NUTCwgMywgMCksCisJCQlTTkRfU09DX05PUE0sIDAsIDApLAogCiAJLyogQW5hbG9nIFBHQXMgKi8KIAlTTkRfU09DX0RBUE1fUEdBKCJBUlhSMV9BUEdBIiwgVFdMNDAzMF9SRUdfQVJYUjFfQVBHQV9DVEwsCkBAIC03MzIsNiArOTU5LDM3IEBACiAJU05EX1NPQ19EQVBNX1BHQSgiQVJYTDJfQVBHQSIsIFRXTDQwMzBfUkVHX0FSWEwyX0FQR0FfQ1RMLAogCQkJMCwgMCwgTlVMTCwgMCksCiAKKwkvKiBBbmFsb2cgYnlwYXNzZXMgKi8KKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2FieXBhc3NyMV9jb250cm9sLCBieXBhc3NfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiTGVmdDEgQW5hbG9nIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9hYnlwYXNzbDFfY29udHJvbCwKKwkJCWJ5cGFzc19ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIlJpZ2h0MiBBbmFsb2cgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2FieXBhc3NyMl9jb250cm9sLAorCQkJYnlwYXNzX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAorCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiTGVmdDIgQW5hbG9nIExvb3BiYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJJnR3bDQwMzBfZGFwbV9hYnlwYXNzbDJfY29udHJvbCwKKwkJCWJ5cGFzc19ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKworCS8qIERpZ2l0YWwgYnlwYXNzZXMgKi8KKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIkxlZnQgRGlnaXRhbCBMb29wYmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZ0d2w0MDMwX2RhcG1fZGJ5cGFzc2xfY29udHJvbCwgYnlwYXNzX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIX0UoIlJpZ2h0IERpZ2l0YWwgTG9vcGJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkmdHdsNDAzMF9kYXBtX2RieXBhc3NyX2NvbnRyb2wsIGJ5cGFzc19ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciIsIFRXTDQwMzBfUkVHX0FWREFDX0NUTCwKKwkJCTAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIiwgVFdMNDAzMF9SRUdfQVZEQUNfQ1RMLAorCQkJMSwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIiLCBUV0w0MDMwX1JFR19BVkRBQ19DVEwsCisJCQkyLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciIsIFRXTDQwMzBfUkVHX0FWREFDX0NUTCwKKwkJCTMsIDAsIE5VTEwsIDApLAorCiAJLyogT3V0cHV0IE1VWCBjb250cm9scyAqLwogCS8qIEVhcnBpZWNlICovCiAJU05EX1NPQ19EQVBNX1ZBTFVFX01VWCgiRWFycGllY2UgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLApAQCAtNzQyLDggKzEwMDAsOSBAQAogCVNORF9TT0NfREFQTV9WQUxVRV9NVVgoIlByZWRyaXZlUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCSZ0d2w0MDMwX2RhcG1fcHJlZHJpdmVyX2NvbnRyb2wpLAogCS8qIEhlYWRzZXRML1IgKi8KLQlTTkRfU09DX0RBUE1fTVVYKCJIZWFkc2V0TCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCi0JCSZ0d2w0MDMwX2RhcG1faHNvbF9jb250cm9sKSwKKwlTTkRfU09DX0RBUE1fTVVYX0UoIkhlYWRzZXRMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnR3bDQwMzBfZGFwbV9oc29sX2NvbnRyb2wsIGhlYWRzZXRsX2V2ZW50LAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAlTTkRfU09DX0RBUE1fTVVYKCJIZWFkc2V0UiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCSZ0d2w0MDMwX2RhcG1faHNvcl9jb250cm9sKSwKIAkvKiBDYXJraXRML1IgKi8KQEAgLTc4MiwxNiArMTA0MSwxNiBAQAogCQlTTkRfU09DX0RBUE1fUE9TVF9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EfAogCQlTTkRfU09DX0RBUE1fUE9TVF9SRUcpLAogCi0JLyogQW5hbG9nIGlucHV0IG11eGVzIHdpdGggcG93ZXIgc3dpdGNoIGZvciB0aGUgcGh5c2ljYWwgQURDTC9SICovCisJLyogQW5hbG9nIGlucHV0IG11eGVzIHdpdGggc3dpdGNoIGZvciB0aGUgY2FwdHVyZSBhbXBsaWZpZXJzICovCiAJU05EX1NPQ19EQVBNX1ZBTFVFX01VWCgiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSIsCi0JCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMywgMCwgJnR3bDQwMzBfZGFwbV9hbmFsb2dsbWljX2NvbnRyb2wpLAorCQlUV0w0MDMwX1JFR19BTkFNSUNMLCA0LCAwLCAmdHdsNDAzMF9kYXBtX2FuYWxvZ2xtaWNfY29udHJvbCksCiAJU05EX1NPQ19EQVBNX1ZBTFVFX01VWCgiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUiLAotCQlUV0w0MDMwX1JFR19BVkFEQ19DVEwsIDEsIDAsICZ0d2w0MDMwX2RhcG1fYW5hbG9ncm1pY19jb250cm9sKSwKKwkJVFdMNDAzMF9SRUdfQU5BTUlDUiwgNCwgMCwgJnR3bDQwMzBfZGFwbV9hbmFsb2dybWljX2NvbnRyb2wpLAogCi0JU05EX1NPQ19EQVBNX1BHQSgiQW5hbG9nIExlZnQgQW1wbGlmaWVyIiwKLQkJVFdMNDAzMF9SRUdfQU5BTUlDTCwgNCwgMCwgTlVMTCwgMCksCi0JU05EX1NPQ19EQVBNX1BHQSgiQW5hbG9nIFJpZ2h0IEFtcGxpZmllciIsCi0JCVRXTDQwMzBfUkVHX0FOQU1JQ1IsIDQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkFEQyBQaHlzaWNhbCBMZWZ0IiwKKwkJVFdMNDAzMF9SRUdfQVZBRENfQ1RMLCAzLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJBREMgUGh5c2ljYWwgUmlnaHQiLAorCQlUV0w0MDMwX1JFR19BVkFEQ19DVEwsIDEsIDAsIE5VTEwsIDApLAogCiAJU05EX1NPQ19EQVBNX1BHQSgiRGlnaW1pYzAgRW5hYmxlIiwKIAkJVFdMNDAzMF9SRUdfQURDTUlDU0VMLCAxLCAwLCBOVUxMLCAwKSwKQEAgLTgwMSwxMyArMTA2MCwxOSBAQAogCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyAxIiwgVFdMNDAzMF9SRUdfTUlDQklBU19DVEwsIDAsIDApLAogCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyAyIiwgVFdMNDAzMF9SRUdfTUlDQklBU19DVEwsIDEsIDApLAogCVNORF9TT0NfREFQTV9NSUNCSUFTKCJIZWFkc2V0IE1pYyBCaWFzIiwgVFdMNDAzMF9SRUdfTUlDQklBU19DVEwsIDIsIDApLAorCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0gewotCXsiQVJYTDFfQVBHQSIsIE5VTEwsICJEQUMgTGVmdDEifSwKLQl7IkFSWFIxX0FQR0EiLCBOVUxMLCAiREFDIFJpZ2h0MSJ9LAotCXsiQVJYTDJfQVBHQSIsIE5VTEwsICJEQUMgTGVmdDIifSwKLQl7IkFSWFIyX0FQR0EiLCBOVUxMLCAiREFDIFJpZ2h0MiJ9LAorCXsiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRBQyBMZWZ0MSJ9LAorCXsiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRBQyBSaWdodDEifSwKKwl7IkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEQUMgTGVmdDIifSwKKwl7IkFuYWxvZyBSMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEQUMgUmlnaHQyIn0sCisKKwl7IkFSWEwxX0FQR0EiLCBOVUxMLCAiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIn0sCisJeyJBUlhSMV9BUEdBIiwgTlVMTCwgIkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciJ9LAorCXsiQVJYTDJfQVBHQSIsIE5VTEwsICJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIifSwKKwl7IkFSWFIyX0FQR0EiLCBOVUxMLCAiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIn0sCiAKIAkvKiBJbnRlcm5hbCBwbGF5YmFjayByb3V0aW5ncyAqLwogCS8qIEVhcnBpZWNlICovCkBAIC04NjUsMjMgKzExMzAsMjMgQEAKIAl7IkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIiwgIlN1YiBtaWMiLCAiU1VCTUlDIn0sCiAJeyJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSIsICJBVVhSIiwgIkFVWFIifSwKIAotCXsiQW5hbG9nIExlZnQgQW1wbGlmaWVyIiwgTlVMTCwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKLQl7IkFuYWxvZyBSaWdodCBBbXBsaWZpZXIiLCBOVUxMLCAiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUifSwKKwl7IkFEQyBQaHlzaWNhbCBMZWZ0IiwgTlVMTCwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKKwl7IkFEQyBQaHlzaWNhbCBSaWdodCIsIE5VTEwsICJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSJ9LAogCiAJeyJEaWdpbWljMCBFbmFibGUiLCBOVUxMLCAiRElHSU1JQzAifSwKIAl7IkRpZ2ltaWMxIEVuYWJsZSIsIE5VTEwsICJESUdJTUlDMSJ9LAogCiAJLyogVFgxIExlZnQgY2FwdHVyZSBwYXRoICovCi0JeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQW5hbG9nIExlZnQgQW1wbGlmaWVyIn0sCisJeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQURDIFBoeXNpY2FsIExlZnQifSwKIAl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkRpZ2ltaWMwIiwgIkRpZ2ltaWMwIEVuYWJsZSJ9LAogCS8qIFRYMSBSaWdodCBjYXB0dXJlIHBhdGggKi8KLQl7IlRYMSBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBbmFsb2cgUmlnaHQgQW1wbGlmaWVyIn0sCisJeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJBbmFsb2ciLCAiQURDIFBoeXNpY2FsIFJpZ2h0In0sCiAJeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMCIsICJEaWdpbWljMCBFbmFibGUifSwKIAkvKiBUWDIgTGVmdCBjYXB0dXJlIHBhdGggKi8KLQl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBbmFsb2cgTGVmdCBBbXBsaWZpZXIifSwKKwl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBREMgUGh5c2ljYWwgTGVmdCJ9LAogCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiRGlnaW1pYzEiLCAiRGlnaW1pYzEgRW5hYmxlIn0sCiAJLyogVFgyIFJpZ2h0IGNhcHR1cmUgcGF0aCAqLwotCXsiVFgyIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFuYWxvZyBSaWdodCBBbXBsaWZpZXIifSwKKwl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkFuYWxvZyIsICJBREMgUGh5c2ljYWwgUmlnaHQifSwKIAl7IlRYMiBDYXB0dXJlIFJvdXRlIiwgIkRpZ2ltaWMxIiwgIkRpZ2ltaWMxIEVuYWJsZSJ9LAogCiAJeyJBREMgVmlydHVhbCBMZWZ0MSIsIE5VTEwsICJUWDEgQ2FwdHVyZSBSb3V0ZSJ9LApAQCAtODg5LDYgKzExNTQsMjQgQEAKIAl7IkFEQyBWaXJ0dWFsIExlZnQyIiwgTlVMTCwgIlRYMiBDYXB0dXJlIFJvdXRlIn0sCiAJeyJBREMgVmlydHVhbCBSaWdodDIiLCBOVUxMLCAiVFgyIENhcHR1cmUgUm91dGUifSwKIAorCS8qIEFuYWxvZyBieXBhc3Mgcm91dGVzICovCisJeyJSaWdodDEgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiTGVmdDEgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIn0sCisJeyJSaWdodDIgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiTGVmdDIgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIn0sCisKKwl7IkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJSaWdodDEgQW5hbG9nIExvb3BiYWNrIn0sCisJeyJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiTGVmdDEgQW5hbG9nIExvb3BiYWNrIn0sCisJeyJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiUmlnaHQyIEFuYWxvZyBMb29wYmFjayJ9LAorCXsiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkxlZnQyIEFuYWxvZyBMb29wYmFjayJ9LAorCisJLyogRGlnaXRhbCBieXBhc3Mgcm91dGVzICovCisJeyJSaWdodCBEaWdpdGFsIExvb3BiYWNrIiwgIlZvbHVtZSIsICJUWDEgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiTGVmdCBEaWdpdGFsIExvb3BiYWNrIiwgIlZvbHVtZSIsICJUWDEgQ2FwdHVyZSBSb3V0ZSJ9LAorCisJeyJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiUmlnaHQgRGlnaXRhbCBMb29wYmFjayJ9LAorCXsiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkxlZnQgRGlnaXRhbCBMb29wYmFjayJ9LAorCiB9OwogCiBzdGF0aWMgaW50IHR3bDQwMzBfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQpAQCAtOTAyLDgyICsxMTg1LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHR3bDQwMzBfcG93ZXJfdXAoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXU4IGFuYW1pY2wsIHJlZ21pc2MxLCBieXRlLCBwb3BuOwotCWludCBpID0gMDsKLQotCS8qIHNldCBDT0RFQ1BEWiB0byB0dXJuIG9uIGNvZGVjICovCi0JdHdsNDAzMF9zZXRfY29kZWNwZHooY29kZWMpOwotCi0JLyogaW5pdGlhdGUgb2Zmc2V0IGNhbmNlbGxhdGlvbiAqLwotCWFuYW1pY2wgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMKTsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMLAotCQlhbmFtaWNsIHwgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCk7Ci0KLQotCS8qIHdhaXQgZm9yIG9mZnNldCBjYW5jZWxsYXRpb24gdG8gY29tcGxldGUgKi8KLQlkbyB7Ci0JCS8qIHRoaXMgdGFrZXMgYSBsaXR0bGUgd2hpbGUsIHNvIGRvbid0IHNsYW0gaTJjICovCi0JCXVkZWxheSgyMDAwKTsKLQkJdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgJmJ5dGUsCi0JCQkJICAgIFRXTDQwMzBfUkVHX0FOQU1JQ0wpOwotCX0gd2hpbGUgKChpKysgPCAxMDApICYmCi0JCSAoKGJ5dGUgJiBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKSA9PQotCQkgIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpKTsKLQotCS8qIGFudGktcG9wIHdoZW4gY2hhbmdpbmcgYW5hbG9nIGdhaW4gKi8KLQlyZWdtaXNjMSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX01JU0NfU0VUXzEpOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX01JU0NfU0VUXzEsCi0JCXJlZ21pc2MxIHwgVFdMNDAzMF9TTU9PVEhfQU5BVk9MX0VOKTsKLQotCS8qIHRvZ2dsZSBDT0RFQ1BEWiBhcyBwZXIgVFJNICovCi0JdHdsNDAzMF9jbGVhcl9jb2RlY3Bkeihjb2RlYyk7Ci0JdHdsNDAzMF9zZXRfY29kZWNwZHooY29kZWMpOwotCi0JLyogcHJvZ3JhbSBhbnRpLXBvcCB3aXRoIGJpYXMgcmFtcCBkZWxheSAqLwotCXBvcG4gPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCk7Ci0JcG9wbiAmPSBUV0w0MDMwX1JBTVBfREVMQVk7Ci0JcG9wbiB8PQlUV0w0MDMwX1JBTVBfREVMQVlfNjQ1TVM7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotCXBvcG4gfD0JVFdMNDAzMF9WTUlEX0VOOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLQotCS8qIGVuYWJsZSBhbnRpLXBvcCByYW1wICovCi0JcG9wbiB8PSBUV0w0MDMwX1JBTVBfRU47Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIHBvcG4pOwotfQotCi1zdGF0aWMgdm9pZCB0d2w0MDMwX3Bvd2VyX2Rvd24oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXU4IHBvcG47Ci0KLQkvKiBkaXNhYmxlIGFudGktcG9wIHJhbXAgKi8KLQlwb3BuID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQpOwotCXBvcG4gJj0gflRXTDQwMzBfUkFNUF9FTjsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcG9wbik7Ci0KLQkvKiBkaXNhYmxlIGJpYXMgb3V0ICovCi0JcG9wbiAmPSB+VFdMNDAzMF9WTUlEX0VOOwotCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBwb3BuKTsKLQotCS8qIHBvd2VyIGRvd24gKi8KLQl0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KGNvZGVjKTsKLX0KLQogc3RhdGljIGludCB0d2w0MDMwX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogeworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgotCQl0d2w0MDMwX3Bvd2VyX3VwKGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19tdXRlKGNvZGVjLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKLQkJLyogVE9ETzogZGV2ZWxvcCBhIHR3bDQwMzBfcHJlcGFyZSBmdW5jdGlvbiAqLworCQl0d2w0MDMwX3Bvd2VyX3VwKGNvZGVjKTsKKwkJaWYgKHR3bDQwMzAtPmJ5cGFzc19zdGF0ZSkKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMCk7CisJCWVsc2UKKwkJCXR3bDQwMzBfY29kZWNfbXV0ZShjb2RlYywgMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCS8qIFRPRE86IGRldmVsb3AgYSB0d2w0MDMwX3N0YW5kYnkgZnVuY3Rpb24gKi8KLQkJdHdsNDAzMF9wb3dlcl9kb3duKGNvZGVjKTsKKwkJdHdsNDAzMF9wb3dlcl91cChjb2RlYyk7CisJCWlmICh0d2w0MDMwLT5ieXBhc3Nfc3RhdGUpCisJCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDApOworCQllbHNlCisJCQl0d2w0MDMwX2NvZGVjX211dGUoY29kZWMsIDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6CiAJCXR3bDQwMzBfcG93ZXJfZG93bihjb2RlYyk7CkBAIC05OTQsMTAgKzEyMjMsOSBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1OCBtb2RlLCBvbGRfbW9kZSwgZm9ybWF0LCBvbGRfZm9ybWF0OwogCi0KIAkvKiBiaXQgcmF0ZSAqLwogCW9sZF9tb2RlID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywKIAkJCVRXTDQwMzBfUkVHX0NPREVDX01PREUpICYgflRXTDQwMzBfQ09ERUNQRFo7CkBAIC0xMDM5LDggKzEyNjcsOSBAQAogCiAJaWYgKG1vZGUgIT0gb2xkX21vZGUpIHsKIAkJLyogY2hhbmdlIHJhdGUgYW5kIHNldCBDT0RFQ1BEWiAqLworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsIG1vZGUpOwotCQl0d2w0MDMwX3NldF9jb2RlY3Bkeihjb2RlYyk7CisJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKIAl9CiAKIAkvKiBzYW1wbGUgc2l6ZSAqLwpAQCAtMTA2MywxMyArMTI5MiwxMyBAQAogCWlmIChmb3JtYXQgIT0gb2xkX2Zvcm1hdCkgewogCiAJCS8qIGNsZWFyIENPREVDUERaIGJlZm9yZSBjaGFuZ2luZyBmb3JtYXQgKGNvZGVjIHJlcXVpcmVtZW50KSAqLwotCQl0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwogCiAJCS8qIGNoYW5nZSBmb3JtYXQgKi8KIAkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsIGZvcm1hdCk7CiAKIAkJLyogc2V0IENPREVDUERaIGFmdGVyd2FyZHMgKi8KLQkJdHdsNDAzMF9zZXRfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTEzOSwxMyArMTM2OCwxMyBAQAogCWlmIChmb3JtYXQgIT0gb2xkX2Zvcm1hdCkgewogCiAJCS8qIGNsZWFyIENPREVDUERaIGJlZm9yZSBjaGFuZ2luZyBmb3JtYXQgKGNvZGVjIHJlcXVpcmVtZW50KSAqLwotCQl0d2w0MDMwX2NsZWFyX2NvZGVjcGR6KGNvZGVjKTsKKwkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwogCiAJCS8qIGNoYW5nZSBmb3JtYXQgKi8KIAkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsIGZvcm1hdCk7CiAKIAkJLyogc2V0IENPREVDUERaIGFmdGVyd2FyZHMgKi8KLQkJdHdsNDAzMF9zZXRfY29kZWNwZHooY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTU0LDYgKzEzODMsMTIgQEAKICNkZWZpbmUgVFdMNDAzMF9SQVRFUwkgKFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDApCiAjZGVmaW5lIFRXTDQwMzBfRk9STUFUUwkgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHR3bDQwMzBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gdHdsNDAzMF9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSB0d2w0MDMwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gdHdsNDAzMF9zZXRfZGFpX2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB0d2w0MDMwX2RhaSA9IHsKIAkubmFtZSA9ICJ0d2w0MDMwIiwKIAkucGxheWJhY2sgPSB7CkBAIC0xMTY4LDE4ICsxNDAzLDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBUV0w0MDMwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFRXTDQwMzBfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB0d2w0MDMwX2h3X3BhcmFtcywKLQkJLnNldF9zeXNjbGsgPSB0d2w0MDMwX3NldF9kYWlfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IHR3bDQwMzBfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmdHdsNDAzMF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHR3bDQwMzBfZGFpKTsKIAogc3RhdGljIGludCB0d2w0MDMwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAKQEAgLTExODksNyArMTQyMCw3IEBACiBzdGF0aWMgaW50IHR3bDQwMzBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCk7CkBAIC0xMjAzLDcgKzE0MzQsNyBAQAogCiBzdGF0aWMgaW50IHR3bDQwMzBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUV0w0MDMwIEF1ZGlvIENvZGVjIGluaXQgXG4iKTsKQEAgLTEyMzMsNyArMTQ2NCw4IEBACiAJLyogcG93ZXIgb24gZGV2aWNlICovCiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCi0JdHdsNDAzMF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB0d2w0MDMwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHR3bDQwMzBfc25kX2NvbnRyb2xzKSk7CiAJdHdsNDAzMF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwpAQCAtMTI1OCwxMiArMTQ5MCwyMCBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzA7CiAKIAljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXR3bDQwMzAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHdsNDAzMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHR3bDQwMzAgPT0gTlVMTCkgeworCQlrZnJlZShjb2RlYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB0d2w0MDMwOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtMTI3NywxMSArMTUxNywxMyBAQAogc3RhdGljIGludCB0d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVFdMNDAzMCBBdWRpbyBDb2RlYyByZW1vdmVcbiIpOworCXR3bDQwMzBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKwlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKIAlrZnJlZShjb2RlYyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKaW5kZXggNDQyZTVhOC4uMzNkYmIxNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKQEAgLTE3MCw2ICsxNzAsOSBAQAogI2RlZmluZSBUV0w0MDMwX0NMSzI1NkZTX0VOCQkweDAyCiAjZGVmaW5lIFRXTDQwMzBfQUlGX0VOCQkJMHgwMQogCisvKiBFQVJfQ1RMICgweDIxKSAqLworI2RlZmluZSBUV0w0MDMwX0VBUl9HQUlOCQkweDMwCisKIC8qIEhTX0dBSU5fU0VUICgweDIzKSBGaWVsZHMgKi8KIAogI2RlZmluZSBUV0w0MDMwX0hTUl9HQUlOCQkweDBDCkBAIC0xOTgsNiArMjAxLDE4IEBACiAjZGVmaW5lIFRXTDQwMzBfUkFNUF9ERUxBWV8yNTgxTVMJMHgxQwogI2RlZmluZSBUV0w0MDMwX1JBTVBfRU4JCQkweDAyCiAKKy8qIFBSRURMX0NUTCAoMHgyNSkgKi8KKyNkZWZpbmUgVFdMNDAzMF9QUkVETF9HQUlOCQkweDMwCisKKy8qIFBSRURSX0NUTCAoMHgyNikgKi8KKyNkZWZpbmUgVFdMNDAzMF9QUkVEUl9HQUlOCQkweDMwCisKKy8qIFBSRUNLTF9DVEwgKDB4MjcpICovCisjZGVmaW5lIFRXTDQwMzBfUFJFQ0tMX0dBSU4JCTB4MzAKKworLyogUFJFQ0tSX0NUTCAoMHgyOCkgKi8KKyNkZWZpbmUgVFdMNDAzMF9QUkVDS1JfR0FJTgkJMHgzMAorCiAvKiBIRkxfQ1RMICgweDI5LCAweDJBKSBGaWVsZHMgKi8KICNkZWZpbmUgVFdMNDAzMF9IRl9DVExfSEJfRU4JCTB4MDQKICNkZWZpbmUgVFdMNDAzMF9IRl9DVExfTE9PUF9FTgkJMHgwOApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYwppbmRleCBhMmM1MDY0Li5kZGVmYjhmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYwpAQCAtMTczLDcgKzE3Myw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB1ZGExMzR4X3ByaXYgKnVkYTEzNHggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKm1hc3Rlcl9ydW50aW1lOwogCkBAIC0yMDYsNyArMjA2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHVkYTEzNHhfcHJpdiAqdWRhMTM0eCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAodWRhMTM0eC0+bWFzdGVyX3N1YnN0cmVhbSA9PSBzdWJzdHJlYW0pCkBAIC0yMjEsNyArMjIxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHVkYTEzNHhfcHJpdiAqdWRhMTM0eCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTggaHdfcGFyYW1zOwogCkBAIC00MzEsMzggKzQzMSwxNCBAQAogU09DX1NJTkdMRSgiREMgRmlsdGVyIEVuYWJsZSBTd2l0Y2giLCBVREExMzRYX1NUQVRVUzAsIDAsIDEsIDApLAogfTsKIAotc3RhdGljIGludCB1ZGExMzR4X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaSwgbjsKLQljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY3RybHM7Ci0Jc3RydWN0IHVkYTEzNHhfcGxhdGZvcm1fZGF0YSAqcGQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwotCi0Jc3dpdGNoIChwZC0+bW9kZWwpIHsKLQljYXNlIFVEQTEzNFhfVURBMTM0MDoKLQljYXNlIFVEQTEzNFhfVURBMTM0NDoKLQkJbiA9IEFSUkFZX1NJWkUodWRhMTM0MF9zbmRfY29udHJvbHMpOwotCQljdHJscyA9IHVkYTEzNDBfc25kX2NvbnRyb2xzOwotCQlicmVhazsKLQljYXNlIFVEQTEzNFhfVURBMTM0MToKLQkJbiA9IEFSUkFZX1NJWkUodWRhMTM0MV9zbmRfY29udHJvbHMpOwotCQljdHJscyA9IHVkYTEzNDFfc25kX2NvbnRyb2xzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzIHVua293biBjb2RlYyB0eXBlOiAlZCIsCi0JCSAgICAgICBfX2Z1bmNfXywgcGQtPm1vZGVsKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmY3RybHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB1ZGExMzR4X2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSB1ZGExMzR4X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gdWRhMTM0eF9zaHV0ZG93biwKKwkuaHdfcGFyYW1zCT0gdWRhMTM0eF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHVkYTEzNHhfbXV0ZSwKKwkuc2V0X3N5c2Nsawk9IHVkYTEzNHhfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB1ZGExMzR4X3NldF9kYWlfZm10LAorfTsKIAogc3RydWN0IHNuZF9zb2NfZGFpIHVkYTEzNHhfZGFpID0gewogCS5uYW1lID0gIlVEQTEzNFgiLApAQCAtNDgzLDE0ICs0NTksNyBAQAogCQkuZm9ybWF0cyA9IFVEQTEzNFhfRk9STUFUUywKIAl9LAogCS8qIHBjbSBvcGVyYXRpb25zICovCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSB1ZGExMzR4X3N0YXJ0dXAsCi0JCS5zaHV0ZG93biA9IHVkYTEzNHhfc2h1dGRvd24sCi0JCS5od19wYXJhbXMgPSB1ZGExMzR4X2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHVkYTEzNHhfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSB1ZGExMzR4X3NldF9kYWlfc3lzY2xrLAotCQkuc2V0X2ZtdCA9IHVkYTEzNHhfc2V0X2RhaV9mbXQsCi0JfQorCS5vcHMgPSAmdWRhMTM0eF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0wodWRhMTM0eF9kYWkpOwogCkBAIC01MjUsMTEgKzQ5NCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc29jZGV2LT5jb2RlYyA9PSBOVUxMKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCiAJCXJldHVybiByZXQ7CiAKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdWRhMTM0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZGExMzR4X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAodWRhMTM0eCA9PSBOVUxMKQpAQCAtNTcyLDcgKzU0MSwyMiBAQAogCQlnb3RvIHBjbV9lcnI7CiAJfQogCi0JcmV0ID0gdWRhMTM0eF9hZGRfY29udHJvbHMoY29kZWMpOworCXN3aXRjaCAocGQtPm1vZGVsKSB7CisJY2FzZSBVREExMzRYX1VEQTEzNDA6CisJY2FzZSBVREExMzRYX1VEQTEzNDQ6CisJCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB1ZGExMzQwX3NuZF9jb250cm9scywKKwkJCQkJQVJSQVlfU0laRSh1ZGExMzQwX3NuZF9jb250cm9scykpOworCWJyZWFrOworCWNhc2UgVURBMTM0WF9VREExMzQxOgorCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdWRhMTM0MV9zbmRfY29udHJvbHMsCisJCQkJCUFSUkFZX1NJWkUodWRhMTM0MV9zbmRfY29udHJvbHMpKTsKKwlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzIHVua293biBjb2RlYyB0eXBlOiAlZCIsCisJCQlfX2Z1bmNfXywgcGQtPm1vZGVsKTsKKwlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVEQTEzNFg6IGZhaWxlZCB0byByZWdpc3RlciBjb250cm9sc1xuIik7CiAJCWdvdG8gcGNtX2VycjsKQEAgLTYwMiw3ICs1ODYsNyBAQAogc3RhdGljIGludCB1ZGExMzR4X3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKQEAgLTYyMiw3ICs2MDYsNyBAQAogCQkJCQkJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpAQCAtNjMyLDcgKzYxNiw3IEBACiBzdGF0aWMgaW50IHVkYTEzNHhfc29jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJdWRhMTM0eF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1BSRVBBUkUpOwogCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PTik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jCmluZGV4IGU2YmYwODQuLjViMjE1OTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgpAQCAtMzUsNyArMzYsOCBAQAogCiAjaW5jbHVkZSAidWRhMTM4MC5oIgogCi0jZGVmaW5lIFVEQTEzODBfVkVSU0lPTiAiMC42Igorc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCB1ZGExMzgwX3dvcms7CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKnVkYTEzODBfY29kZWM7CiAKIC8qCiAgKiB1ZGExMzgwIHJlZ2lzdGVyIGNhY2hlCkBAIC01Miw2ICs1NCw4IEBACiAJMHgwMDAwLCAweDgwMDAsIDB4MDAwMiwgMHgwMDAwLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgdWRhMTM4MF9jYWNoZV9kaXJ0eTsKKwogLyoKICAqIHJlYWQgdWRhMTM4MCByZWdpc3RlciBjYWNoZQogICovCkBAIC03Myw4ICs3NywxMSBAQAogCXUxNiByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwogCWlmIChyZWcgPj0gVURBMTM4MF9DQUNIRVJFR05VTSkKIAkJcmV0dXJuOworCWlmICgocmVnID49IDB4MTApICYmIChjYWNoZVtyZWddICE9IHZhbHVlKSkKKwkJc2V0X2JpdChyZWcgLSAweDEwLCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSk7CiAJY2FjaGVbcmVnXSA9IHZhbHVlOwogfQogCkBAIC0xMTMsNiArMTIwLDggQEAKIAkJCQkJKGRhdGFbMF08PDgpIHwgZGF0YVsxXSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQorCQlpZiAocmVnID49IDB4MTApCisJCQljbGVhcl9iaXQocmVnIC0gMHgxMCwgJnVkYTEzODBfY2FjaGVfZGlydHkpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU87CkBAIC0xMjAsNiArMTI5LDIwIEBACiAKICNkZWZpbmUgdWRhMTM4MF9yZXNldChjKQl1ZGExMzgwX3dyaXRlKGMsIFVEQTEzODBfUkVTRVQsIDApCiAKK3N0YXRpYyB2b2lkIHVkYTEzODBfZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IGJpdCwgcmVnOworCisJZm9yX2VhY2hfYml0KGJpdCwgJnVkYTEzODBfY2FjaGVfZGlydHksIFVEQTEzODBfQ0FDSEVSRUdOVU0gLSAweDEwKSB7CisJCXJlZyA9IDB4MTAgKyBiaXQ7CisJCXByX2RlYnVnKCJ1ZGExMzgwOiBmbHVzaCByZWcgJXggdmFsICV4OlxuIiwgcmVnLAorCQkJCXVkYTEzODBfcmVhZF9yZWdfY2FjaGUodWRhMTM4MF9jb2RlYywgcmVnKSk7CisJCXVkYTEzODBfd3JpdGUodWRhMTM4MF9jb2RlYywgcmVnLAorCQkJCXVkYTEzODBfcmVhZF9yZWdfY2FjaGUodWRhMTM4MF9jb2RlYywgcmVnKSk7CisJCWNsZWFyX2JpdChiaXQsICZ1ZGExMzgwX2NhY2hlX2RpcnR5KTsKKwl9Cit9CisKIC8qIGRlY2xhcmF0aW9ucyBvZiBBTFNBIHJlZ19lbGVtX1JFQUwgY29udHJvbHMgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp1ZGExMzgwX2RlZW1wW10gPSB7CiAJIk5vbmUiLApAQCAtMjU0LDcgKzI3Nyw2IEBACiAJU09DX1NJTkdMRSgiREFDIFBvbGFyaXR5IGludmVydGluZyBTd2l0Y2giLCBVREExMzgwX01JWEVSLCAxNSwgMSwgMCksCS8qIERBX1BPTF9JTlYgKi8KIAlTT0NfRU5VTSgiTm9pc2UgU2hhcGVyIiwgdWRhMTM4MF9zZWxfbnNfZW51bSksCQkJCS8qIFNFTF9OUyAqLwogCVNPQ19FTlVNKCJEaWdpdGFsIE1peGVyIFNpZ25hbCBDb250cm9sIiwgdWRhMTM4MF9taXhfZW51bSksCQkvKiBNSVhfUE9TLCBNSVggKi8KLQlTT0NfU0lOR0xFKCJTaWxlbmNlIFN3aXRjaCIsIFVEQTEzODBfTUlYRVIsIDcsIDEsIDApLAkJCS8qIFNJTEVOQ0UsIGZvcmNlIERBQyBvdXRwdXQgdG8gc2lsZW5jZSAqLwogCVNPQ19TSU5HTEUoIlNpbGVuY2UgRGV0ZWN0b3IgU3dpdGNoIiwgVURBMTM4MF9NSVhFUiwgNiwgMSwgMCksCQkvKiBTREVUX09OICovCiAJU09DX0VOVU0oIlNpbGVuY2UgRGV0ZWN0b3IgU2V0dGluZyIsIHVkYTEzODBfc2RldF9lbnVtKSwJCS8qIFNEX1ZBTFVFICovCiAJU09DX0VOVU0oIk92ZXJzYW1wbGluZyBJbnB1dCIsIHVkYTEzODBfb3NfZW51bSksCQkJLyogT1MgKi8KQEAgLTI3MSwyMSArMjkzLDYgQEAKIAlTT0NfU0lOR0xFKCJBR0MgU3dpdGNoIiwgVURBMTM4MF9BR0MsIDAsIDEsIDApLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHVkYTEzODBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWRhMTM4MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJnVkYTEzODBfc25kX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIElucHV0IG11eCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHVkYTEzODBfaW5wdXRfbXV4X2NvbnRyb2wgPQogCVNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgdWRhMTM4MF9pbnB1dF9zZWxfZW51bSk7CkBAIC0zNzEsNyArMzc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1ZGExMzgwX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorc3RhdGljIGludCB1ZGExMzgwX3NldF9kYWlfZm10X2JvdGgoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCiAJCXVuc2lnbmVkIGludCBmbXQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKQEAgLTM4MSwxNiArMzg4LDc1IEBACiAJaWZhY2UgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0lGQUNFKTsKIAlpZmFjZSAmPSB+KFIwMV9TRk9SSV9NQVNLIHwgUjAxX1NJTSB8IFIwMV9TRk9ST19NQVNLKTsKIAotCS8qIEZJWE1FOiBob3cgdG8gc2VsZWN0IEkyUyBmb3IgREFUQU8gYW5kIE1TQiBmb3IgREFUQUkgY29ycmVjdGx5PyAqLwogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKIAkJaWZhY2UgfD0gUjAxX1NGT1JJX0kyUyB8IFIwMV9TRk9ST19JMlM7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfTFNCOgotCQlpZmFjZSB8PSBSMDFfU0ZPUklfTFNCMTYgfCBSMDFfU0ZPUk9fSTJTOworCQlpZmFjZSB8PSBSMDFfU0ZPUklfTFNCMTYgfCBSMDFfU0ZPUk9fTFNCMTY7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfTVNCOgotCQlpZmFjZSB8PSBSMDFfU0ZPUklfTVNCIHwgUjAxX1NGT1JPX0kyUzsKKwkJaWZhY2UgfD0gUjAxX1NGT1JJX01TQiB8IFIwMV9TRk9ST19NU0I7CisJfQorCisJLyogREFUQUkgaXMgc2xhdmUgb25seSwgc28gaW4gc2luZ2xlLWxpbmsgbW9kZSwgdGhpcyBoYXMgdG8gYmUgc2xhdmUgKi8KKwlpZiAoKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSAhPSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfSUZBQ0UsIGlmYWNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkYTEzODBfc2V0X2RhaV9mbXRfcGxheWJhY2soc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgaWZhY2U7CisKKwkvKiBzZXQgdXAgREFJIGJhc2VkIHVwb24gZm10ICovCisJaWZhY2UgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0lGQUNFKTsKKwlpZmFjZSAmPSB+UjAxX1NGT1JJX01BU0s7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWlmYWNlIHw9IFIwMV9TRk9SSV9JMlM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTFNCOgorCQlpZmFjZSB8PSBSMDFfU0ZPUklfTFNCMTY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTVNCOgorCQlpZmFjZSB8PSBSMDFfU0ZPUklfTVNCOworCX0KKworCS8qIERBVEFJIGlzIHNsYXZlIG9ubHksIHNvIHRoaXMgaGFzIHRvIGJlIHNsYXZlICovCisJaWYgKChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgIT0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0lGQUNFLCBpZmFjZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1ZGExMzgwX3NldF9kYWlfZm10X2NhcHR1cmUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgaWZhY2U7CisKKwkvKiBzZXQgdXAgREFJIGJhc2VkIHVwb24gZm10ICovCisJaWZhY2UgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0lGQUNFKTsKKwlpZmFjZSAmPSB+KFIwMV9TSU0gfCBSMDFfU0ZPUk9fTUFTSyk7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWlmYWNlIHw9IFIwMV9TRk9ST19JMlM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTFNCOgorCQlpZmFjZSB8PSBSMDFfU0ZPUk9fTFNCMTY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTVNCOgorCQlpZmFjZSB8PSBSMDFfU0ZPUk9fTVNCOwogCX0KIAogCWlmICgoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spID09IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pCkBAIC00MDEsNDEgKzQ2NywyOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogRmx1c2ggcmVnIGNhY2hlCi0gKiBXZSBjYW4gb25seSB3cml0ZSB0aGUgaW50ZXJwb2xhdG9yIGFuZCBkZWNpbWF0b3IgcmVnaXN0ZXJzCi0gKiB3aGVuIHRoZSBEQUkgaXMgYmVpbmcgY2xvY2tlZCBieSB0aGUgQ1BVIERBSS4gSXQncyB1cCB0byB0aGUKLSAqIG1hY2hpbmUgYW5kIGNwdSBEQUkgZHJpdmVyIHRvIGRvIHRoaXMgYmVmb3JlIHdlIGFyZSBjYWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgdWRhMTM4MF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3N0YXRpYyBpbnQgdWRhMTM4MF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZWcsIHJlZ19zdGFydCwgcmVnX2VuZCwgY2xrOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJaW50IG1peGVyID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9NSVhFUik7CiAKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQlyZWdfc3RhcnQgPSBVREExMzgwX01WT0w7Ci0JCXJlZ19lbmQgPSBVREExMzgwX01JWEVSOwotCX0gZWxzZSB7Ci0JCXJlZ19zdGFydCA9IFVEQTEzODBfREVDOwotCQlyZWdfZW5kID0gVURBMTM4MF9BR0M7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJdWRhMTM4MF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfTUlYRVIsCisJCQkJCW1peGVyICYgflIxNF9TSUxFTkNFKTsKKwkJc2NoZWR1bGVfd29yaygmdWRhMTM4MF93b3JrKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJdWRhMTM4MF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfTUlYRVIsCisJCQkJCW1peGVyIHwgUjE0X1NJTEVOQ0UpOworCQlzY2hlZHVsZV93b3JrKCZ1ZGExMzgwX3dvcmspOworCQlicmVhazsKIAl9Ci0KLQkvKiBGSVhNRSBkaXNhYmxlIERBQ19DTEsgKi8KLQljbGsgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0NMSyk7Ci0JdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9DTEssIGNsayAmIH5SMDBfREFDX0NMSyk7Ci0KLQlmb3IgKHJlZyA9IHJlZ19zdGFydDsgcmVnIDw9IHJlZ19lbmQ7IHJlZysrKSB7Ci0JCXByX2RlYnVnKCJ1ZGExMzgwOiBmbHVzaCByZWcgJXggdmFsICV4OiIsIHJlZywKLQkJCQl1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpKTsKLQkJdWRhMTM4MF93cml0ZShjb2RlYywgcmVnLCB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpKTsKLQl9Ci0KLQkvKiBGSVhNRSBlbmFibGUgREFDX0NMSyAqLwotCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfQ0xLLCBjbGsgfCBSMDBfREFDX0NMSyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQ1LDcgKzQ5OCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBjbGsgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0NMSyk7CiAKIAkvKiBzZXQgV1NQTEwgcG93ZXIgYW5kIGRpdmlkZXIgaWYgcnVubmluZyBmcm9tIHRoaXMgY2xvY2sgKi8KQEAgLTQ4NCw3ICs1MzcsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgY2xrID0gdWRhMTM4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM4MF9DTEspOwogCiAJLyogc2h1dCBkb3duIFdTUExMIHBvd2VyIGlmIHJ1bm5pbmcgZnJvbSB0aGlzIGNsb2NrICovCkBAIC01MDEsMjQgKzU1NCw2IEBACiAJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9DTEssIGNsayk7CiB9CiAKLXN0YXRpYyBpbnQgdWRhMTM4MF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgbXV0ZSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwotCXUxNiBtdXRlX3JlZyA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfREVFTVApICYgflIxM19NVE07Ci0KLQkvKiBGSVhNRTogbXV0ZShjb2RlYywwKSBpcyBjYWxsZWQgd2hlbiB0aGUgbWFnaWNpYW4gY2xvY2sgaXMgYWxyZWFkeQotCSAqIHNldCB0byBXU1BMTCwgYnV0IGZvciBzb21lIHVua25vd24gcmVhc29uIHdyaXRpbmcgdG8gaW50ZXJwb2xhdG9yCi0JICogcmVnaXN0ZXJzIHdvcmtzIG9ubHkgd2hlbiBjbG9ja2VkIGJ5IFNZU0NMSyAqLwotCXUxNiBjbGsgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX0NMSyk7Ci0JdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9DTEssIH5SMDBfREFDX0NMSyAmIGNsayk7Ci0JaWYgKG11dGUpCi0JCXVkYTEzODBfd3JpdGUoY29kZWMsIFVEQTEzODBfREVFTVAsIG11dGVfcmVnIHwgUjEzX01UTSk7Ci0JZWxzZQotCQl1ZGExMzgwX3dyaXRlKGNvZGVjLCBVREExMzgwX0RFRU1QLCBtdXRlX3JlZyk7Ci0JdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9DTEssIGNsayk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdWRhMTM4MF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CkBAIC01NDQsNiArNTc5LDI3IEBACiAJCSAgICAgICBTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHxcCiAJCSAgICAgICBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB1ZGExMzgwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHVkYTEzODBfdHJpZ2dlciwKKwkuc2V0X2ZtdAk9IHVkYTEzODBfc2V0X2RhaV9mbXRfYm90aCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHVkYTEzODBfZGFpX29wc19wbGF5YmFjayA9IHsKKwkuaHdfcGFyYW1zCT0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHVkYTEzODBfcGNtX3NodXRkb3duLAorCS50cmlnZ2VyCT0gdWRhMTM4MF90cmlnZ2VyLAorCS5zZXRfZm10CT0gdWRhMTM4MF9zZXRfZGFpX2ZtdF9wbGF5YmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHVkYTEzODBfZGFpX29wc19jYXB0dXJlID0geworCS5od19wYXJhbXMJPSB1ZGExMzgwX3BjbV9od19wYXJhbXMsCisJLnNodXRkb3duCT0gdWRhMTM4MF9wY21fc2h1dGRvd24sCisJLnRyaWdnZXIJPSB1ZGExMzgwX3RyaWdnZXIsCisJLnNldF9mbXQJPSB1ZGExMzgwX3NldF9kYWlfZm10X2NhcHR1cmUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdWRhMTM4MF9kYWlbXSA9IHsKIHsKIAkubmFtZSA9ICJVREExMzgwIiwKQEAgLTU1OSwxMyArNjE1LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFVEQTEzODBfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKLQkJLnByZXBhcmUgPSB1ZGExMzgwX3BjbV9wcmVwYXJlLAotCQkuZGlnaXRhbF9tdXRlID0gdWRhMTM4MF9tdXRlLAotCQkuc2V0X2ZtdCA9IHVkYTEzODBfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJnVkYTEzODBfZGFpX29wcywKIH0sCiB7IC8qIHBsYXliYWNrIG9ubHkgLSBkdWFsIGludGVyZmFjZSAqLwogCS5uYW1lID0gIlVEQTEzODAiLApAQCAtNTc2LDEzICs2MjYsNyBAQAogCQkucmF0ZXMgPSBVREExMzgwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHVkYTEzODBfcGNtX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gdWRhMTM4MF9wY21fc2h1dGRvd24sCi0JCS5wcmVwYXJlID0gdWRhMTM4MF9wY21fcHJlcGFyZSwKLQkJLmRpZ2l0YWxfbXV0ZSA9IHVkYTEzODBfbXV0ZSwKLQkJLnNldF9mbXQgPSB1ZGExMzgwX3NldF9kYWlfZm10LAotCX0sCisJLm9wcyA9ICZ1ZGExMzgwX2RhaV9vcHNfcGxheWJhY2ssCiB9LAogeyAvKiBjYXB0dXJlIG9ubHkgLSBkdWFsIGludGVyZmFjZSovCiAJLm5hbWUgPSAiVURBMTM4MCIsCkBAIC01OTMsMTIgKzYzNyw3IEBACiAJCS5yYXRlcyA9IFVEQTEzODBfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAJfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gdWRhMTM4MF9wY21faHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB1ZGExMzgwX3BjbV9zaHV0ZG93biwKLQkJLnByZXBhcmUgPSB1ZGExMzgwX3BjbV9wcmVwYXJlLAotCQkuc2V0X2ZtdCA9IHVkYTEzODBfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJnVkYTEzODBfZGFpX29wc19jYXB0dXJlLAogfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh1ZGExMzgwX2RhaSk7CkBAIC02MDYsNyArNjQ1LDcgQEAKIHN0YXRpYyBpbnQgdWRhMTM4MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXVkYTEzODBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNjE1LDcgKzY1NCw3IEBACiBzdGF0aWMgaW50IHVkYTEzODBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTYzNyw3ICs2NzYsNyBAQAogICovCiBzdGF0aWMgaW50IHVkYTEzODBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiwgaW50IGRhY19jbGspCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiVURBMTM4MCI7CkBAIC02NTUsNiArNjk0LDkgQEAKIAljb2RlYy0+cmVnX2NhY2hlX3N0ZXAgPSAxOwogCXVkYTEzODBfcmVzZXQoY29kZWMpOwogCisJdWRhMTM4MF9jb2RlYyA9IGNvZGVjOworCUlOSVRfV09SSygmdWRhMTM4MF93b3JrLCB1ZGExMzgwX2ZsdXNoX3dvcmspOworCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTY3NSw3ICs3MTcsOCBAQAogCX0KIAogCS8qIHVkYTEzODAgaW5pdCAqLwotCXVkYTEzODBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdWRhMTM4MF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh1ZGExMzgwX3NuZF9jb250cm9scykpOwogCXVkYTEzODBfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTcwMiw3ICs3NDUsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gdWRhMTM4MF9zb2NkZXY7CiAJc3RydWN0IHVkYTEzODBfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC03ODYsMTQgKzgyOSwxMiBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgcmV0OwogCi0JcHJfaW5mbygiVURBMTM4MCBBdWRpbyBDb2RlYyAlcyIsIFVEQTEzODBfVkVSU0lPTik7Ci0KIAlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKIAljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtODE3LDcgKzg1OCw3IEBACiBzdGF0aWMgaW50IHVkYTEzODBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJdWRhMTM4MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwppbmRleCAzNWQ5OTc1Li4zYjFkMDk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKQEAgLTUxLDEwICs1MSwxNyBAQAogCXUxNiBtdXRlOwogfTsKIAorc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgeworCXN0cnVjdCBzbmRfc29jX2phY2sgKmphY2s7CisJaW50IHJlcG9ydDsKK307CisKIHN0cnVjdCB3bTgzNTBfZGF0YSB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CiAJc3RydWN0IHdtODM1MF9vdXRwdXQgb3V0MTsKIAlzdHJ1Y3Qgd204MzUwX291dHB1dCBvdXQyOworCXN0cnVjdCB3bTgzNTBfamFja19kYXRhIGhwbDsKKwlzdHJ1Y3Qgd204MzUwX2phY2tfZGF0YSBocHI7CiAJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShzdXBwbHlfbmFtZXMpXTsKIH07CiAKQEAgLTc3NSwyMSArNzgyLDYgQEAKIAl7IkJlZXAiLCBOVUxMLCAiSU4zUiBQR0EifSwKIH07CiAKLXN0YXRpYyBpbnQgd204MzUwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODM1MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODM1MF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgd204MzUwX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlpbnQgcmV0OwpAQCAtMTMwOSw3ICsxMzAxLDcgQEAKIHN0YXRpYyBpbnQgd204MzUwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204MzUwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTEzMTgsNyArMTMxMCw3IEBACiBzdGF0aWMgaW50IHdtODM1MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODM1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCkBAIC0xMzI4LDYgKzEzMjAsOTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgd204MzUwX2hwX2phY2tfaGFuZGxlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHdtODM1MF9kYXRhICpwcml2ID0gZGF0YTsKKwl1MTYgcmVnOworCWludCByZXBvcnQ7CisJaW50IG1hc2s7CisJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgKmphY2sgPSBOVUxMOworCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MOgorCQlqYWNrID0gJnByaXYtPmhwbDsKKwkJbWFzayA9IFdNODM1MF9KQUNLX0xfTFZMOworCQlicmVhazsKKworCWNhc2UgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1I6CisJCWphY2sgPSAmcHJpdi0+aHByOworCQltYXNrID0gV004MzUwX0pBQ0tfUl9MVkw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJaWYgKCFqYWNrLT5qYWNrKSB7CisJCWRldl93YXJuKHdtODM1MC0+ZGV2LCAiSmFjayBpbnRlcnJ1cHQgY2FsbGVkIHdpdGggbm8gamFja1xuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBEZWJvdW5jZSAqLworCW1zbGVlcCgyMDApOworCisJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0pBQ0tfUElOX1NUQVRVUyk7CisJaWYgKHJlZyAmIG1hc2spCisJCXJlcG9ydCA9IGphY2stPnJlcG9ydDsKKwllbHNlCisJCXJlcG9ydCA9IDA7CisKKwlzbmRfc29jX2phY2tfcmVwb3J0KGphY2stPmphY2ssIHJlcG9ydCwgamFjay0+cmVwb3J0KTsKK30KKworLyoqCisgKiB3bTgzNTBfaHBfamFja19kZXRlY3QgLSBFbmFibGUgaGVhZHBob25lIGphY2sgZGV0ZWN0aW9uLgorICoKKyAqIEBjb2RlYzogIFdNODM1MCBjb2RlYworICogQHdoaWNoOiAgbGVmdCBvciByaWdodCBqYWNrIGRldGVjdCBzaWduYWwKKyAqIEBqYWNrOiAgIGphY2sgdG8gcmVwb3J0IGRldGVjdGlvbiBldmVudHMgb24KKyAqIEByZXBvcnQ6IHZhbHVlIHRvIHJlcG9ydAorICoKKyAqIEVuYWJsZXMgdGhlIGhlYWRwaG9uZSBqYWNrIGRldGVjdGlvbiBvZiB0aGUgV004MzUwLgorICovCitpbnQgd204MzUwX2hwX2phY2tfZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgZW51bSB3bTgzNTBfamFjayB3aGljaCwKKwkJCSAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHJlcG9ydCkKK3sKKwlzdHJ1Y3Qgd204MzUwX2RhdGEgKnByaXYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisJaW50IGlycTsKKwlpbnQgZW5hOworCisJc3dpdGNoICh3aGljaCkgeworCWNhc2UgV004MzUwX0pETDoKKwkJcHJpdi0+aHBsLmphY2sgPSBqYWNrOworCQlwcml2LT5ocGwucmVwb3J0ID0gcmVwb3J0OworCQlpcnEgPSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDsKKwkJZW5hID0gV004MzUwX0pETF9FTkE7CisJCWJyZWFrOworCisJY2FzZSBXTTgzNTBfSkRSOgorCQlwcml2LT5ocHIuamFjayA9IGphY2s7CisJCXByaXYtPmhwci5yZXBvcnQgPSByZXBvcnQ7CisJCWlycSA9IFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SOworCQllbmEgPSBXTTgzNTBfSkRSX0VOQTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF80LCBXTTgzNTBfVE9DTEtfRU5BKTsKKwl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSkFDS19ERVRFQ1QsIGVuYSk7CisKKwkvKiBTeW5jIHN0YXR1cyAqLworCXdtODM1MF9ocF9qYWNrX2hhbmRsZXIod204MzUwLCBpcnEsIHByaXYpOworCisJd204MzUwX3VubWFza19pcnEod204MzUwLCBpcnEpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfaHBfamFja19kZXRlY3QpOworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODM1MF9jb2RlYzsKIAogc3RhdGljIGludCB3bTgzNTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTEzNDIsOCArMTQyMyw4IEBACiAKIAlCVUdfT04oIXdtODM1MF9jb2RlYyk7CiAKLQlzb2NkZXYtPmNvZGVjID0gd204MzUwX2NvZGVjOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204MzUwX2NvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl3bTgzNTAgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCXByaXYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCkBAIC0xMzgxLDEzICsxNDYyLDIxIEBACiAJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1JPVVQyX1ZPTFVNRSwKIAkJCVdNODM1MF9PVVQyX1ZVIHwgV004MzUwX09VVDJSX01VVEUpOwogCisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOworCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKKwl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wsCisJCQkgICAgd204MzUwX2hwX2phY2tfaGFuZGxlciwgcHJpdik7CisJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SLAorCQkJICAgIHdtODM1MF9ocF9qYWNrX2hhbmRsZXIsIHByaXYpOworCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXdtODM1MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTgzNTBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204MzUwX3NuZF9jb250cm9scykpOwogCXdtODM1MF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAKIAl3bTgzNTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKQEAgLTE0MDksMTAgKzE0OTgsMjMgQEAKIHN0YXRpYyBpbnQgd204MzUwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisJc3RydWN0IHdtODM1MF9kYXRhICpwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0OwogCisJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSkFDS19ERVRFQ1QsCisJCQkgIFdNODM1MF9KRExfRU5BIHwgV004MzUwX0pEUl9FTkEpOworCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX1BPV0VSX01HTVRfNCwgV004MzUwX1RPQ0xLX0VOQSk7CisKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCk7CisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IpOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUik7CisKKwlwcml2LT5ocGwuamFjayA9IE5VTEw7CisJcHJpdi0+aHByLmphY2sgPSBOVUxMOworCiAJLyogY2FuY2VsIGFueSB3b3JrIHdhaXRpbmcgdG8gYmUgcXVldWVkLiAqLwogCXJldCA9IGNhbmNlbF9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmspOwogCkBAIC0xNDM2LDYgKzE1MzgsMTYgQEAKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODM1MF9kYWlfb3BzID0geworCSAuaHdfcGFyYW1zCT0gd204MzUwX3BjbV9od19wYXJhbXMsCisJIC5kaWdpdGFsX211dGUJPSB3bTgzNTBfbXV0ZSwKKwkgLnRyaWdnZXIJPSB3bTgzNTBfcGNtX3RyaWdnZXIsCisJIC5zZXRfZm10CT0gd204MzUwX3NldF9kYWlfZm10LAorCSAuc2V0X3N5c2Nsawk9IHdtODM1MF9zZXRfZGFpX3N5c2NsaywKKwkgLnNldF9wbGwJPSB3bTgzNTBfc2V0X2ZsbCwKKwkgLnNldF9jbGtkaXYJPSB3bTgzNTBfc2V0X2Nsa2RpdiwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTgzNTBfZGFpID0gewogCS5uYW1lID0gIldNODM1MCIsCiAJLnBsYXliYWNrID0gewpAQCAtMTQ1MiwxNSArMTU2NCw3IEBACiAJCSAucmF0ZXMgPSBXTTgzNTBfUkFURVMsCiAJCSAuZm9ybWF0cyA9IFdNODM1MF9GT1JNQVRTLAogCSB9LAotCS5vcHMgPSB7Ci0JCSAuaHdfcGFyYW1zID0gd204MzUwX3BjbV9od19wYXJhbXMsCi0JCSAuZGlnaXRhbF9tdXRlID0gd204MzUwX211dGUsCi0JCSAudHJpZ2dlciA9IHdtODM1MF9wY21fdHJpZ2dlciwKLQkJIC5zZXRfZm10ID0gd204MzUwX3NldF9kYWlfZm10LAotCQkgLnNldF9zeXNjbGsgPSB3bTgzNTBfc2V0X2RhaV9zeXNjbGssCi0JCSAuc2V0X3BsbCA9IHdtODM1MF9zZXRfZmxsLAotCQkgLnNldF9jbGtkaXYgPSB3bTgzNTBfc2V0X2Nsa2RpdiwKLQkgfSwKKwkub3BzID0gJndtODM1MF9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9kYWkpOwogCkBAIC0xNDcyLDcgKzE1NzYsNyBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204MzUwKTsKIAotc3RhdGljIGludCB3bTgzNTBfY29kZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODM1MF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5oCmluZGV4IGNjMjg4N2EuLmQxMWJkOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuaApAQCAtMTcsNCArMTcsMTIgQEAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204MzUwX2RhaTsKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTgzNTA7CiAKK2VudW0gd204MzUwX2phY2sgeworCVdNODM1MF9KREwgPSAxLAorCVdNODM1MF9KRFIgPSAyLAorfTsKKworaW50IHdtODM1MF9ocF9qYWNrX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGVudW0gd204MzUwX2phY2sgd2hpY2gsCisJCQkgIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCByZXBvcnQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMGVmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jCkBAIC0wLDAgKzEsMTU4MiBAQAorLyoKKyAqIHdtODQwMC5jICAtLSAgV004NDAwIEFMU0EgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4LCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg0MDAtYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204NDAwLXByaXZhdGUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAid204NDAwLmgiCisKKy8qIEZha2UgcmVnaXN0ZXIgZm9yIGludGVybmFsIHN0YXRlICovCisjZGVmaW5lIFdNODQwMF9JTlREUklWQklUUyAgICAgIChXTTg0MDBfUkVHSVNURVJfQ09VTlQgKyAxKQorI2RlZmluZSBXTTg0MDBfSU5NSVhMX1BXUgkJCTAKKyNkZWZpbmUgV004NDAwX0FJTkxNVVhfUFdSCQkJMQorI2RlZmluZSBXTTg0MDBfSU5NSVhSX1BXUgkJCTIKKyNkZWZpbmUgV004NDAwX0FJTlJNVVhfUFdSCQkJMworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgcG93ZXJbXSA9IHsKKwl7CisJCS5zdXBwbHkgPSAiSTJTMVZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiSTJTMlZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiRENWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkFWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkZMTFZERCIsCisJfSwKKwl7CisJCS5zdXBwbHkgPSAiSFBWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIlNQS1ZERCIsCisJfSwKK307CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODQwMF9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDA7CisJdTE2IGZha2VfcmVnaXN0ZXI7CisJdW5zaWduZWQgaW50IHN5c2NsazsKKwl1bnNpZ25lZCBpbnQgcGNtY2xrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCWludCBmbGxfaW4sIGZsbF9vdXQ7Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTg0MDBfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHJlZyA9PSBXTTg0MDBfSU5URFJJVkJJVFMpCisJCXJldHVybiB3bTg0MDAtPmZha2VfcmVnaXN0ZXI7CisJZWxzZQorCQlyZXR1cm4gd204NDAwX3JlZ19yZWFkKHdtODQwMC0+d204NDAwLCByZWcpOworfQorCisvKgorICogd3JpdGUgdG8gdGhlIHdtODQwMCByZWdpc3RlciBzcGFjZQorICovCitzdGF0aWMgaW50IHdtODQwMF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCWlmIChyZWcgPT0gV004NDAwX0lOVERSSVZCSVRTKSB7CisJCXdtODQwMC0+ZmFrZV9yZWdpc3RlciA9IHZhbHVlOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIHdtODQwMF9zZXRfYml0cyh3bTg0MDAtPndtODQwMCwgcmVnLCAweGZmZmYsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgd204NDAwX2NvZGVjX3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwl3bTg0MDBfcmVzZXRfY29kZWNfcmVnX2NhY2hlKHdtODQwMC0+d204NDAwKTsKK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihyZWNfbWl4X3RsdiwgLTE1MDAsIDYwMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIoaW5fcGdhX3RsdiwgLTE2NTAsIDMwMDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9taXhfdGx2LCAtMjEwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIob3V0X3BnYV90bHYsIC03MzAwLCA2MDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKG91dF9vbWl4X3RsdiwgLTYwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIob3V0X2RhY190bHYsIC03MTYzLCAwKTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihpbl9hZGNfdGx2LCAtNzE2MywgMTc2Myk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9MSU5FQVIob3V0X3NpZGV0b25lX3RsdiwgLTM2MDAsIDApOworCitzdGF0aWMgaW50IHdtODQwMF9vdXRwZ2FfcHV0X3ZvbHN3X3Z1KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKyAgICAgICAgc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJaW50IHJlZyA9IG1jLT5yZWc7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHUxNiB2YWw7CisKKyAgICAgICAgcmV0ID0gc25kX3NvY19wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAvKiBub3cgaGl0IHRoZSB2b2x1bWUgdXBkYXRlIGJpdHMgKGFsd2F5cyBiaXQgOCkgKi8KKyAgICAgICAgdmFsID0gd204NDAwX3JlYWQoY29kZWMsIHJlZyk7CisgICAgICAgIHJldHVybiB3bTg0MDBfd3JpdGUoY29kZWMsIHJlZywgdmFsIHwgMHgwMTAwKTsKK30KKworI2RlZmluZSBXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVih4bmFtZSwgcmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQsIHRsdl9hcnJheSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCBcCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8XAorCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLFwKKwkudGx2LnAgPSAodGx2X2FycmF5KSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3LCBcCisJLmdldCA9IHNuZF9zb2NfZ2V0X3ZvbHN3LCAucHV0ID0gd204NDAwX291dHBnYV9wdXRfdm9sc3dfdnUsIFwKKwkucHJpdmF0ZV92YWx1ZSA9IFNPQ19TSU5HTEVfVkFMVUUocmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQpIH0KKworCitzdGF0aWMgY29uc3QgY2hhciAqd204NDAwX2RpZ2l0YWxfc2lkZXRvbmVbXSA9CisJeyJOb25lIiwgIkxlZnQgQURDIiwgIlJpZ2h0IEFEQyIsICJSZXNlcnZlZCJ9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9sZWZ0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoV004NDAwX0RJR0lUQUxfU0lERV9UT05FLAorCQlXTTg0MDBfQURDX1RPX0RBQ0xfU0hJRlQsIDIsIHdtODQwMF9kaWdpdGFsX3NpZGV0b25lKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfcmlnaHRfZGlnaXRhbF9zaWRldG9uZV9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRShXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUsCisJCVdNODQwMF9BRENfVE9fREFDUl9TSElGVCwgMiwgd204NDAwX2RpZ2l0YWxfc2lkZXRvbmUpOworCitzdGF0aWMgY29uc3QgY2hhciAqd204NDAwX2FkY21vZGVbXSA9CisJeyJIaS1maSBtb2RlIiwgIlZvaWNlIG1vZGUgMSIsICJWb2ljZSBtb2RlIDIiLCAiVm9pY2UgbW9kZSAzIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NDAwX3JpZ2h0X2FkY21vZGVfZW51bSA9CitTT0NfRU5VTV9TSU5HTEUoV004NDAwX0FEQ19DVFJMLCBXTTg0MDBfQURDX0hQRl9DVVRfU0hJRlQsIDMsIHdtODQwMF9hZGNtb2RlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9zbmRfY29udHJvbHNbXSA9IHsKKy8qIElOTUlYTCAqLworU09DX1NJTkdMRSgiTElOMTIgUEdBIEJvb3N0IiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX0wxMk1OQlNUX1NISUZULAorCSAgIDEsIDApLAorU09DX1NJTkdMRSgiTElOMzQgUEdBIEJvb3N0IiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX0wzNE1OQlNUX1NISUZULAorCSAgIDEsIDApLAorLyogSU5NSVhSICovCitTT0NfU0lOR0xFKCJSSU4xMiBQR0EgQm9vc3QiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfUjEyTU5CU1RfU0hJRlQsCisJICAgMSwgMCksCitTT0NfU0lOR0xFKCJSSU4zNCBQR0EgQm9vc3QiLCBXTTg0MDBfSU5QVVRfTUlYRVIzLCBXTTg0MDBfUjM0TU5CU1RfU0hJRlQsCisJICAgMSwgMCksCisKKy8qIExPTUlYICovCitTT0NfU0lOR0xFX1RMVigiTE9NSVggTElOMyBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjMsCisJV004NDAwX0xMSTNMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxPTUlYIFJJTjEyIFBHQSBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjMsCisJV004NDAwX0xSMTJMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxPTUlYIExJTjEyIFBHQSBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjMsCisJV004NDAwX0xMMTJMT1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxPTUlYIFJJTjMgQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI1LAorCVdNODQwMF9MUkkzTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBBSU5STVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNSwKKwlXTTg0MDBfTFJCTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMT01JWCBBSU5MTVVYIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNSwKKwlXTTg0MDBfTFJCTE9WT0xfU0hJRlQsIDcsIDAsIG91dF9taXhfdGx2KSwKKworLyogUk9NSVggKi8KK1NPQ19TSU5HTEVfVExWKCJST01JWCBSSU4zIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNCwKKwlXTTg0MDBfUlJJM1JPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUk9NSVggTElOMTIgUEdBIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNCwKKwlXTTg0MDBfUkwxMlJPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUk9NSVggUklOMTIgUEdBIEJ5cGFzcyBWb2x1bWUiLCBXTTg0MDBfT1VUUFVUX01JWEVSNCwKKwlXTTg0MDBfUlIxMlJPVk9MX1NISUZULCA3LCAwLCBvdXRfbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUk9NSVggTElOMyBCeXBhc3MgVm9sdW1lIiwgV004NDAwX09VVFBVVF9NSVhFUjYsCisJV004NDAwX1JMSTNST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIEFJTkxNVVggQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI2LAorCVdNODQwMF9STEJST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJPTUlYIEFJTlJNVVggQnlwYXNzIFZvbHVtZSIsIFdNODQwMF9PVVRQVVRfTUlYRVI2LAorCVdNODQwMF9SUkJST1ZPTF9TSElGVCwgNywgMCwgb3V0X21peF90bHYpLAorCisvKiBMT1VUICovCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTE9VVCBWb2x1bWUiLCBXTTg0MDBfTEVGVF9PVVRQVVRfVk9MVU1FLAorCVdNODQwMF9MT1VUVk9MX1NISUZULCBXTTg0MDBfTE9VVFZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCitTT0NfU0lOR0xFKCJMT1VUIFpDIiwgV004NDAwX0xFRlRfT1VUUFVUX1ZPTFVNRSwgV004NDAwX0xPWkNfU0hJRlQsIDEsIDApLAorCisvKiBST1VUICovCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiUk9VVCBWb2x1bWUiLCBXTTg0MDBfUklHSFRfT1VUUFVUX1ZPTFVNRSwKKwlXTTg0MDBfUk9VVFZPTF9TSElGVCwgV004NDAwX1JPVVRWT0xfTUFTSywgMCwgb3V0X3BnYV90bHYpLAorU09DX1NJTkdMRSgiUk9VVCBaQyIsIFdNODQwMF9SSUdIVF9PVVRQVVRfVk9MVU1FLCBXTTg0MDBfUk9aQ19TSElGVCwgMSwgMCksCisKKy8qIExPUEdBICovCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTE9QR0EgVm9sdW1lIiwgV004NDAwX0xFRlRfT1BHQV9WT0xVTUUsCisJV004NDAwX0xPUEdBVk9MX1NISUZULCBXTTg0MDBfTE9QR0FWT0xfTUFTSywgMCwgb3V0X3BnYV90bHYpLAorU09DX1NJTkdMRSgiTE9QR0EgWkMgU3dpdGNoIiwgV004NDAwX0xFRlRfT1BHQV9WT0xVTUUsCisJV004NDAwX0xPUEdBWkNfU0hJRlQsIDEsIDApLAorCisvKiBST1BHQSAqLworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJPUEdBIFZvbHVtZSIsIFdNODQwMF9SSUdIVF9PUEdBX1ZPTFVNRSwKKwlXTTg0MDBfUk9QR0FWT0xfU0hJRlQsIFdNODQwMF9ST1BHQVZPTF9NQVNLLCAwLCBvdXRfcGdhX3RsdiksCitTT0NfU0lOR0xFKCJST1BHQSBaQyBTd2l0Y2giLCBXTTg0MDBfUklHSFRfT1BHQV9WT0xVTUUsCisJV004NDAwX1JPUEdBWkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJMT04gTXV0ZSBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfTE9OTVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJMT1AgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfTE9QTVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJMT1AgQXR0ZW51YXRpb24gU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX0xPQVRUTl9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJST04gTXV0ZSBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfUk9OTVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJST1AgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSwKKwlXTTg0MDBfUk9QTVVURV9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJST1AgQXR0ZW51YXRpb24gU3dpdGNoIiwgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUsCisJV004NDAwX1JPQVRUTl9TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIk9VVDMgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfT1VUM180X1ZPTFVNRSwKKwlXTTg0MDBfT1VUM01VVEVfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiT1VUMyBBdHRlbnVhdGlvbiBTd2l0Y2giLCBXTTg0MDBfT1VUM180X1ZPTFVNRSwKKwlXTTg0MDBfT1VUM0FUVE5fU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJPVVQ0IE11dGUgU3dpdGNoIiwgV004NDAwX09VVDNfNF9WT0xVTUUsCisJV004NDAwX09VVDRNVVRFX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIk9VVDQgQXR0ZW51YXRpb24gU3dpdGNoIiwgV004NDAwX09VVDNfNF9WT0xVTUUsCisJV004NDAwX09VVDRBVFROX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiU3BlYWtlciBNb2RlIFN3aXRjaCIsIFdNODQwMF9DTEFTU0QxLAorCVdNODQwMF9DRE1PREVfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJTcGVha2VyIE91dHB1dCBBdHRlbnVhdGlvbiBWb2x1bWUiLCBXTTg0MDBfU1BFQUtFUl9WT0xVTUUsCisJV004NDAwX1NQS0FUVE5fU0hJRlQsIFdNODQwMF9TUEtBVFROX01BU0ssIDApLAorU09DX1NJTkdMRSgiU3BlYWtlciBEQyBCb29zdCBWb2x1bWUiLCBXTTg0MDBfQ0xBU1NEMywKKwlXTTg0MDBfRENHQUlOX1NISUZULCA2LCAwKSwKK1NPQ19TSU5HTEUoIlNwZWFrZXIgQUMgQm9vc3QgVm9sdW1lIiwgV004NDAwX0NMQVNTRDMsCisJV004NDAwX0FDR0FJTl9TSElGVCwgNiwgMCksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMZWZ0IERBQyBEaWdpdGFsIFZvbHVtZSIsCisJV004NDAwX0xFRlRfREFDX0RJR0lUQUxfVk9MVU1FLCBXTTg0MDBfREFDTF9WT0xfU0hJRlQsCisJMTI3LCAwLCBvdXRfZGFjX3RsdiksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJSaWdodCBEQUMgRGlnaXRhbCBWb2x1bWUiLAorCVdNODQwMF9SSUdIVF9EQUNfRElHSVRBTF9WT0xVTUUsIFdNODQwMF9EQUNSX1ZPTF9TSElGVCwKKwkxMjcsIDAsIG91dF9kYWNfdGx2KSwKKworU09DX0VOVU0oIkxlZnQgRGlnaXRhbCBTaWRldG9uZSIsIHdtODQwMF9sZWZ0X2RpZ2l0YWxfc2lkZXRvbmVfZW51bSksCitTT0NfRU5VTSgiUmlnaHQgRGlnaXRhbCBTaWRldG9uZSIsIHdtODQwMF9yaWdodF9kaWdpdGFsX3NpZGV0b25lX2VudW0pLAorCitTT0NfU0lOR0xFX1RMVigiTGVmdCBEaWdpdGFsIFNpZGV0b25lIFZvbHVtZSIsIFdNODQwMF9ESUdJVEFMX1NJREVfVE9ORSwKKwlXTTg0MDBfQURDTF9EQUNfU1ZPTF9TSElGVCwgMTUsIDAsIG91dF9zaWRldG9uZV90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJpZ2h0IERpZ2l0YWwgU2lkZXRvbmUgVm9sdW1lIiwgV004NDAwX0RJR0lUQUxfU0lERV9UT05FLAorCVdNODQwMF9BRENSX0RBQ19TVk9MX1NISUZULCAxNSwgMCwgb3V0X3NpZGV0b25lX3RsdiksCisKK1NPQ19TSU5HTEUoIkFEQyBEaWdpdGFsIEhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgV004NDAwX0FEQ19DVFJMLAorCVdNODQwMF9BRENfSFBGX0VOQV9TSElGVCwgMSwgMCksCisKK1NPQ19FTlVNKCJBREMgSFBGIE1vZGUiLCB3bTg0MDBfcmlnaHRfYWRjbW9kZV9lbnVtKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIkxlZnQgQURDIERpZ2l0YWwgVm9sdW1lIiwKKwlXTTg0MDBfTEVGVF9BRENfRElHSVRBTF9WT0xVTUUsCisJV004NDAwX0FEQ0xfVk9MX1NISUZULAorCVdNODQwMF9BRENMX1ZPTF9NQVNLLAorCTAsCisJaW5fYWRjX3RsdiksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJSaWdodCBBREMgRGlnaXRhbCBWb2x1bWUiLAorCVdNODQwMF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUsCisJV004NDAwX0FEQ1JfVk9MX1NISUZULAorCVdNODQwMF9BRENSX1ZPTF9NQVNLLAorCTAsCisJaW5fYWRjX3RsdiksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJMSU4xMiBWb2x1bWUiLAorCVdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfTElOMTJWT0xfU0hJRlQsCisJV004NDAwX0xJTjEyVk9MX01BU0ssCisJMCwKKwlpbl9wZ2FfdGx2KSwKKworU09DX1NJTkdMRSgiTElOMTIgWkMgU3dpdGNoIiwgV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9MSTEyWkNfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFKCJMSU4xMiBNdXRlIFN3aXRjaCIsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfTEkxMk1VVEVfU0hJRlQsIDEsIDApLAorCitXTTg0MDBfT1VUUEdBX1NJTkdMRV9SX1RMVigiTElOMzQgVm9sdW1lIiwKKwlXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX0xJTjM0Vk9MX1NISUZULAorCVdNODQwMF9MSU4zNFZPTF9NQVNLLAorCTAsCisJaW5fcGdhX3RsdiksCisKK1NPQ19TSU5HTEUoIkxJTjM0IFpDIFN3aXRjaCIsIFdNODQwMF9MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfTEkzNFpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiTElOMzQgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX0xJMzRNVVRFX1NISUZULCAxLCAwKSwKKworV004NDAwX09VVFBHQV9TSU5HTEVfUl9UTFYoIlJJTjEyIFZvbHVtZSIsCisJV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfUklOMTJWT0xfU0hJRlQsCisJV004NDAwX1JJTjEyVk9MX01BU0ssCisJMCwKKwlpbl9wZ2FfdGx2KSwKKworU09DX1NJTkdMRSgiUklOMTIgWkMgU3dpdGNoIiwgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwlXTTg0MDBfUkkxMlpDX1NISUZULCAxLCAwKSwKKworU09DX1NJTkdMRSgiUklOMTIgTXV0ZSBTd2l0Y2giLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCVdNODQwMF9SSTEyTVVURV9TSElGVCwgMSwgMCksCisKK1dNODQwMF9PVVRQR0FfU0lOR0xFX1JfVExWKCJSSU4zNCBWb2x1bWUiLAorCVdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX1JJTjM0Vk9MX1NISUZULAorCVdNODQwMF9SSU4zNFZPTF9NQVNLLAorCTAsCisJaW5fcGdhX3RsdiksCisKK1NPQ19TSU5HTEUoIlJJTjM0IFpDIFN3aXRjaCIsIFdNODQwMF9SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJV004NDAwX1JJMzRaQ19TSElGVCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIlJJTjM0IE11dGUgU3dpdGNoIiwgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwlXTTg0MDBfUkkzNE1VVEVfU0hJRlQsIDEsIDApLAorCit9OworCisvKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgd204NDAwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg0MDBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NDAwX3NuZF9jb250cm9scykpOworfQorCisvKgorICogX0RBUE1fIENvbnRyb2xzCisgKi8KKworc3RhdGljIGludCBpbm1peGVyX2V2ZW50IChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXUxNiByZWcsIGZha2Vwb3dlcjsKKworCXJlZyA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yKTsKKwlmYWtlcG93ZXIgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX0lOVERSSVZCSVRTKTsKKworCWlmIChmYWtlcG93ZXIgJiAoKDEgPDwgV004NDAwX0lOTUlYTF9QV1IpIHwKKwkJKDEgPDwgV004NDAwX0FJTkxNVVhfUFdSKSkpIHsKKwkJcmVnIHw9IFdNODQwMF9BSU5MX0VOQTsKKwl9IGVsc2UgeworCQlyZWcgJj0gfldNODQwMF9BSU5MX0VOQTsKKwl9CisKKwlpZiAoZmFrZXBvd2VyICYgKCgxIDw8IFdNODQwMF9JTk1JWFJfUFdSKSB8CisJCSgxIDw8IFdNODQwMF9BSU5STVVYX1BXUikpKSB7CisJCXJlZyB8PSBXTTg0MDBfQUlOUl9FTkE7CisJfSBlbHNlIHsKKwkJcmVnICY9IH5XTTg0MDBfQUlOTF9FTkE7CisJfQorCXdtODQwMF93cml0ZSh3LT5jb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG91dG1peGVyX2V2ZW50IChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICoga2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXUzMiByZWdfc2hpZnQgPSBtYy0+c2hpZnQ7CisJaW50IHJldCA9IDA7CisJdTE2IHJlZzsKKworCXN3aXRjaCAocmVnX3NoaWZ0KSB7CisJY2FzZSBXTTg0MDBfU1BFQUtFUl9NSVhFUiB8IChXTTg0MDBfTERTUEsgPDwgOCkgOgorCQlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX09VVFBVVF9NSVhFUjEpOworCQlpZiAocmVnICYgV004NDAwX0xETE8pIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJDYW5ub3Qgc2V0IGFzIE91dHB1dCBNaXhlciAxIExETE8gU2V0XG4iKTsKKwkJCXJldCA9IC0xOworCQl9CisJCWJyZWFrOworCWNhc2UgV004NDAwX1NQRUFLRVJfTUlYRVIgfCAoV004NDAwX1JEU1BLIDw8IDgpOgorCQlyZWcgPSB3bTg0MDBfcmVhZCh3LT5jb2RlYywgV004NDAwX09VVFBVVF9NSVhFUjIpOworCQlpZiAocmVnICYgV004NDAwX1JEUk8pIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJDYW5ub3Qgc2V0IGFzIE91dHB1dCBNaXhlciAyIFJEUk8gU2V0XG4iKTsKKwkJCXJldCA9IC0xOworCQl9CisJCWJyZWFrOworCWNhc2UgV004NDAwX09VVFBVVF9NSVhFUjEgfCAoV004NDAwX0xETE8gPDwgOCk6CisJCXJlZyA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfU1BFQUtFUl9NSVhFUik7CisJCWlmIChyZWcgJiBXTTg0MDBfTERTUEspIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJDYW5ub3Qgc2V0IGFzIFNwZWFrZXIgTWl4ZXIgTERTUEsgU2V0XG4iKTsKKwkJCXJldCA9IC0xOworCQl9CisJCWJyZWFrOworCWNhc2UgV004NDAwX09VVFBVVF9NSVhFUjIgfCAoV004NDAwX1JEUk8gPDwgOCk6CisJCXJlZyA9IHdtODQwMF9yZWFkKHctPmNvZGVjLCBXTTg0MDBfU1BFQUtFUl9NSVhFUik7CisJCWlmIChyZWcgJiBXTTg0MDBfUkRTUEspIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJDYW5ub3Qgc2V0IGFzIFNwZWFrZXIgTWl4ZXIgUkRTUEsgU2V0XG4iKTsKKwkJCXJldCA9IC0xOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIElOTUlYIGRCIHZhbHVlcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbl9taXhfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMSksCisJMCw3LCBUTFZfREJfTElORUFSX0lURU0oLTEyMDAsIDYwMCksCit9OworCisvKiBMZWZ0IEluIFBHQSBDb25uZWN0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xpbjEyX3BnYV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMSU4xIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9MTU4xX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTElOMiBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfTE1QMl9TSElGVCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbGluMzRfcGdhX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxJTjMgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX0xNTjNfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMSU40IFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9MTVA0X1NISUZULCAxLCAwKSwKK307CisKKy8qIFJpZ2h0IEluIFBHQSBDb25uZWN0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3JpbjEyX3BnYV9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJSSU4xIFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9STU4xX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUklOMiBTd2l0Y2giLCBXTTg0MDBfSU5QVVRfTUlYRVIyLCBXTTg0MDBfUk1QMl9TSElGVCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcmluMzRfcGdhX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJJTjMgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMiwgV004NDAwX1JNTjNfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSSU40IFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjIsIFdNODQwMF9STVA0X1NISUZULCAxLCAwKSwKK307CisKKy8qIElOTUlYTCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2lubWl4bF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFX1RMVigiUmVjb3JkIExlZnQgVm9sdW1lIiwgV004NDAwX0lOUFVUX01JWEVSMywKKwlXTTg0MDBfTERCVk9MX1NISUZULCBXTTg0MDBfTERCVk9MX01BU0ssIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFX1RMVigiTElOMiBWb2x1bWUiLCBXTTg0MDBfSU5QVVRfTUlYRVI1LCBXTTg0MDBfTEkyQlZPTF9TSElGVCwKKwk3LCAwLCBpbl9taXhfdGx2KSwKK1NPQ19EQVBNX1NJTkdMRSgiTElOUEdBMTIgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX0wxMk1OQl9TSElGVCwKKwkJMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxJTlBHQTM0IFN3aXRjaCIsIFdNODQwMF9JTlBVVF9NSVhFUjMsIFdNODQwMF9MMzRNTkJfU0hJRlQsCisJCTEsIDApLAorfTsKKworLyogSU5NSVhSICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1faW5taXhyX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEVfVExWKCJSZWNvcmQgUmlnaHQgVm9sdW1lIiwgV004NDAwX0lOUFVUX01JWEVSNCwKKwlXTTg0MDBfUkRCVk9MX1NISUZULCBXTTg0MDBfUkRCVk9MX01BU0ssIDAsIGluX21peF90bHYpLAorU09DX0RBUE1fU0lOR0xFX1RMVigiUklOMiBWb2x1bWUiLCBXTTg0MDBfSU5QVVRfTUlYRVI2LCBXTTg0MDBfUkkyQlZPTF9TSElGVCwKKwk3LCAwLCBpbl9taXhfdGx2KSwKK1NPQ19EQVBNX1NJTkdMRSgiUklOUEdBMTIgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX0wxMk1OQl9TSElGVCwKKwkxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUklOUEdBMzQgU3dpdGNoIiwgV004NDAwX0lOUFVUX01JWEVSMywgV004NDAwX0wzNE1OQl9TSElGVCwKKwkxLCAwKSwKK307CisKKy8qIEFJTkxNVVggKi8KK3N0YXRpYyBjb25zdCBjaGFyICp3bTg0MDBfYWlubG11eFtdID0KKwl7IklOTUlYTCBNaXgiLCAiUlhWT0lDRSBNaXgiLCAiRElGRklOTCBNaXgifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg0MDBfYWlubG11eF9lbnVtID0KK1NPQ19FTlVNX1NJTkdMRSggV004NDAwX0lOUFVUX01JWEVSMSwgV004NDAwX0FJTkxNT0RFX1NISUZULAorCUFSUkFZX1NJWkUod204NDAwX2FpbmxtdXgpLCB3bTg0MDBfYWlubG11eCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9haW5sbXV4X2NvbnRyb2xzID0KK1NPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204NDAwX2FpbmxtdXhfZW51bSk7CisKKy8qIERJRkZJTkwgKi8KKworLyogQUlOUk1VWCAqLworc3RhdGljIGNvbnN0IGNoYXIgKndtODQwMF9haW5ybXV4W10gPQorCXsiSU5NSVhSIE1peCIsICJSWFZPSUNFIE1peCIsICJESUZGSU5SIE1peCJ9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODQwMF9haW5ybXV4X2VudW0gPQorU09DX0VOVU1fU0lOR0xFKCBXTTg0MDBfSU5QVVRfTUlYRVIxLCBXTTg0MDBfQUlOUk1PREVfU0hJRlQsCisJQVJSQVlfU0laRSh3bTg0MDBfYWlucm11eCksIHdtODQwMF9haW5ybXV4KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2FpbnJtdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg0MDBfYWlucm11eF9lbnVtKTsKKworLyogUlhWT0lDRSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3J4dm9pY2VfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIkxJTjQvUlhOIiwgV004NDAwX0lOUFVUX01JWEVSNSwgV004NDAwX0xSNEJWT0xfU0hJRlQsCisJCQlXTTg0MDBfTFI0QlZPTF9NQVNLLCAwLCBpbl9taXhfdGx2KSwKK1NPQ19EQVBNX1NJTkdMRV9UTFYoIlJJTjQvUlhQIiwgV004NDAwX0lOUFVUX01JWEVSNiwgV004NDAwX1JMNEJWT0xfU0hJRlQsCisJCQlXTTg0MDBfUkw0QlZPTF9NQVNLLCAwLCBpbl9taXhfdGx2KSwKK307CisKKy8qIExPTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fbG9taXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTFJCTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBMZWZ0IEFEQyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xMQkxPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVFBVVF9NSVhFUjEsCisJV004NDAwX0xSSTNMT19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxPTUlYIExJTjMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MTEkzTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBSSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MUjEyTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBMSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIxLAorCVdNODQwMF9MTDEyTE9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT01JWCBMZWZ0IERBQyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMSwKKwlXTTg0MDBfTERMT19TSElGVCwgMSwgMCksCit9OworCisvKiBST01JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3JvbWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIExlZnQgQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUkxCUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBSaWdodCBBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9SUkJST19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPTUlYIExJTjMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9STEkzUk9fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST01JWCBSSU4zIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUlJJM1JPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUkwxMlJPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggUklOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfT1VUUFVUX01JWEVSMiwKKwlXTTg0MDBfUlIxMlJPX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUk9NSVggUmlnaHQgREFDIFN3aXRjaCIsIFdNODQwMF9PVVRQVVRfTUlYRVIyLAorCVdNODQwMF9SRFJPX1NISUZULCAxLCAwKSwKK307CisKKy8qIExPTk1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX2xvbm1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMT05NSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MTE9QR0FMT05fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMSwKKwlXTTg0MDBfTFJPUEdBTE9OX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9OTUlYIEludmVydGVkIExPUCBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xPUExPTl9TSElGVCwgMSwgMCksCit9OworCisvKiBMT1BNSVggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg0MDBfZGFwbV9sb3BtaXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTE9QTUlYIFJpZ2h0IE1pYyBCeXBhc3MgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MUjEyTE9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTE9QTUlYIExlZnQgTWljIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfTElORV9NSVhFUjEsCisJV004NDAwX0xMMTJMT1BfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMT1BNSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIxLAorCVdNODQwMF9MTE9QR0FMT1BfU0hJRlQsIDEsIDApLAorfTsKKworLyogUk9OTUlYICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NDAwX2RhcG1fcm9ubWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJPTk1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9SUk9QR0FST05fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST05NSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9STE9QR0FST05fU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJST05NSVggSW52ZXJ0ZWQgUk9QIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUk9QUk9OX1NISUZULCAxLCAwKSwKK307CisKKy8qIFJPUE1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3JvcG1peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJST1BNSVggTGVmdCBNaWMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUkwxMlJPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPUE1JWCBSaWdodCBNaWMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9MSU5FX01JWEVSMiwKKwlXTTg0MDBfUlIxMlJPUF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJPUE1JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX0xJTkVfTUlYRVIyLAorCVdNODQwMF9SUk9QR0FST1BfU0hJRlQsIDEsIDApLAorfTsKKworLyogT1VUM01JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX291dDNtaXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiT1VUM01JWCBMSU40L1JYUCBCeXBhc3MgU3dpdGNoIiwgV004NDAwX09VVDNfNF9NSVhFUiwKKwlXTTg0MDBfTEk0TzNfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJPVVQzTUlYIExlZnQgT3V0IFBHQSBTd2l0Y2giLCBXTTg0MDBfT1VUM180X01JWEVSLAorCVdNODQwMF9MUEdBTzNfU0hJRlQsIDEsIDApLAorfTsKKworLyogT1VUNE1JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX291dDRtaXhfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiT1VUNE1JWCBSaWdodCBPdXQgUEdBIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfTUlYRVIsCisJV004NDAwX1JQR0FPNF9TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk9VVDRNSVggUklONC9SWFAgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9PVVQzXzRfTUlYRVIsCisJV004NDAwX1JJNE80X1NISUZULCAxLCAwKSwKK307CisKKy8qIFNQS01JWCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODQwMF9kYXBtX3Nwa21peF9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggTElOMiBCeXBhc3MgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX0xJMlNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBMQURDIEJ5cGFzcyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfTEIyU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9MT1BHQVNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBMZWZ0IERBQyBTd2l0Y2giLCBXTTg0MDBfU1BFQUtFUl9NSVhFUiwKKwlXTTg0MDBfTERTUEtfU0hJRlQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTUEtNSVggUmlnaHQgREFDIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9SRFNQS19TSElGVCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS01JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgV004NDAwX1NQRUFLRVJfTUlYRVIsCisJV004NDAwX1JPUEdBU1BLX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIFJBREMgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9STDEyUk9QX1NISUZULCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTUlYIFJJTjIgQnlwYXNzIFN3aXRjaCIsIFdNODQwMF9TUEVBS0VSX01JWEVSLAorCVdNODQwMF9SSTJTUEtfU0hJRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODQwMF9kYXBtX3dpZGdldHNbXSA9IHsKKy8qIElucHV0IFNpZGUgKi8KKy8qIElucHV0IExpbmVzICovCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTjEiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElOMiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4zIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTjQvUlhOIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIlJJTjMiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUklONC9SWFAiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUklOMSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU4yIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkludGVybmFsIEFEQyBTb3VyY2UiKSwKKworLyogREFDcyAqLworU05EX1NPQ19EQVBNX0FEQygiTGVmdCBBREMiLCAiTGVmdCBDYXB0dXJlIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwKKwlXTTg0MDBfQURDTF9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FEQygiUmlnaHQgQURDIiwgIlJpZ2h0IENhcHR1cmUiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yLAorCVdNODQwMF9BRENSX0VOQV9TSElGVCwgMCksCisKKy8qIElucHV0IFBHQXMgKi8KK1NORF9TT0NfREFQTV9NSVhFUigiTElOMTIgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJICAgV004NDAwX0xJTjEyX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX2xpbjEyX3BnYV9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9saW4xMl9wZ2FfY29udHJvbHMpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiTElOMzQgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJICAgV004NDAwX0xJTjM0X0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX2xpbjM0X3BnYV9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9saW4zNF9wZ2FfY29udHJvbHMpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiUklOMTIgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJICAgV004NDAwX1JJTjEyX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX3JpbjEyX3BnYV9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yaW4xMl9wZ2FfY29udHJvbHMpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiUklOMzQgUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJICAgV004NDAwX1JJTjM0X0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX3JpbjM0X3BnYV9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9yaW4zNF9wZ2FfY29udHJvbHMpKSwKKworLyogSU5NSVhMICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiSU5NSVhMIiwgV004NDAwX0lOVERSSVZCSVRTLCBXTTg0MDBfSU5NSVhMX1BXUiwgMCwKKwkmd204NDAwX2RhcG1faW5taXhsX2NvbnRyb2xzWzBdLAorCUFSUkFZX1NJWkUod204NDAwX2RhcG1faW5taXhsX2NvbnRyb2xzKSwKKwlpbm1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisvKiBBSU5MTVVYICovCitTTkRfU09DX0RBUE1fTVVYX0UoIkFJTE5NVVgiLCBXTTg0MDBfSU5URFJJVkJJVFMsIFdNODQwMF9BSU5MTVVYX1BXUiwgMCwKKwkmd204NDAwX2RhcG1fYWlubG11eF9jb250cm9scywgaW5taXhlcl9ldmVudCwKKwlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisvKiBJTk1JWFIgKi8KK1NORF9TT0NfREFQTV9NSVhFUl9FKCJJTk1JWFIiLCBXTTg0MDBfSU5URFJJVkJJVFMsIFdNODQwMF9JTk1JWFJfUFdSLCAwLAorCSZ3bTg0MDBfZGFwbV9pbm1peHJfY29udHJvbHNbMF0sCisJQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9pbm1peHJfY29udHJvbHMpLAorCWlubWl4ZXJfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKy8qIEFJTlJNVVggKi8KK1NORF9TT0NfREFQTV9NVVhfRSgiQUlSTk1VWCIsIFdNODQwMF9JTlREUklWQklUUywgV004NDAwX0FJTlJNVVhfUFdSLCAwLAorCSZ3bTg0MDBfZGFwbV9haW5ybXV4X2NvbnRyb2xzLCBpbm1peGVyX2V2ZW50LAorCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKy8qIE91dHB1dCBTaWRlICovCisvKiBEQUNzICovCitTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IFBsYXliYWNrIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywKKwlXTTg0MDBfREFDTF9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0RBQygiUmlnaHQgREFDIiwgIlJpZ2h0IFBsYXliYWNrIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywKKwlXTTg0MDBfREFDUl9FTkFfU0hJRlQsIDApLAorCisvKiBMT01JWCAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIkxPTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywKKwkJICAgICBXTTg0MDBfTE9NSVhfRU5BX1NISUZULAorCQkgICAgIDAsICZ3bTg0MDBfZGFwbV9sb21peF9jb250cm9sc1swXSwKKwkJICAgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX2xvbWl4X2NvbnRyb2xzKSwKKwkJICAgICBvdXRtaXhlcl9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9SRUcpLAorCisvKiBMT05NSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiTE9OTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX0xPTl9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9sb25taXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fbG9ubWl4X2NvbnRyb2xzKSksCisKKy8qIExPUE1JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJMT1BNSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLCBXTTg0MDBfTE9QX0VOQV9TSElGVCwKKwkJICAgMCwgJndtODQwMF9kYXBtX2xvcG1peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9sb3BtaXhfY29udHJvbHMpKSwKKworLyogT1VUM01JWCAqLworU05EX1NPQ19EQVBNX01JWEVSKCJPVVQzTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgV004NDAwX09VVDNfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fb3V0M21peF9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9vdXQzbWl4X2NvbnRyb2xzKSksCisKKy8qIFNQS01JWCAqLworU05EX1NPQ19EQVBNX01JWEVSX0UoIlNQS01JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIFdNODQwMF9TUEtfRU5BX1NISUZULAorCQkgICAgIDAsICZ3bTg0MDBfZGFwbV9zcGttaXhfY29udHJvbHNbMF0sCisJCSAgICAgQVJSQVlfU0laRSh3bTg0MDBfZGFwbV9zcGttaXhfY29udHJvbHMpLCBvdXRtaXhlcl9ldmVudCwKKwkJICAgICBTTkRfU09DX0RBUE1fUFJFX1JFRyksCisKKy8qIE9VVDRNSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiT1VUNE1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIFdNODQwMF9PVVQ0X0VOQV9TSElGVCwKKwkwLCAmd204NDAwX2RhcG1fb3V0NG1peF9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODQwMF9kYXBtX291dDRtaXhfY29udHJvbHMpKSwKKworLyogUk9QTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVIoIlJPUE1JWCIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzMsIFdNODQwMF9ST1BfRU5BX1NISUZULAorCQkgICAwLCAmd204NDAwX2RhcG1fcm9wbWl4X2NvbnRyb2xzWzBdLAorCQkgICBBUlJBWV9TSVpFKHdtODQwMF9kYXBtX3JvcG1peF9jb250cm9scykpLAorCisvKiBST05NSVggKi8KK1NORF9TT0NfREFQTV9NSVhFUigiUk9OTUlYIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX1JPTl9FTkFfU0hJRlQsCisJCSAgIDAsICZ3bTg0MDBfZGFwbV9yb25taXhfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcm9ubWl4X2NvbnRyb2xzKSksCisKKy8qIFJPTUlYICovCitTTkRfU09DX0RBUE1fTUlYRVJfRSgiUk9NSVgiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zLAorCQkgICAgIFdNODQwMF9ST01JWF9FTkFfU0hJRlQsCisJCSAgICAgMCwgJndtODQwMF9kYXBtX3JvbWl4X2NvbnRyb2xzWzBdLAorCQkgICAgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fcm9taXhfY29udHJvbHMpLAorCQkgICAgIG91dG1peGVyX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1JFRyksCisKKy8qIExPVVQgUEdBICovCitTTkRfU09DX0RBUE1fUEdBKCJMT1VUIFBHQSIsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEsIFdNODQwMF9MT1VUX0VOQV9TSElGVCwKKwkJIDAsIE5VTEwsIDApLAorCisvKiBST1VUIFBHQSAqLworU05EX1NPQ19EQVBNX1BHQSgiUk9VVCBQR0EiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCBXTTg0MDBfUk9VVF9FTkFfU0hJRlQsCisJCSAwLCBOVUxMLCAwKSwKKworLyogTE9QR0EgKi8KK1NORF9TT0NfREFQTV9QR0EoIkxPUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX0xPUEdBX0VOQV9TSElGVCwgMCwKKwlOVUxMLCAwKSwKKworLyogUk9QR0EgKi8KK1NORF9TT0NfREFQTV9QR0EoIlJPUEdBIiwgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMywgV004NDAwX1JPUEdBX0VOQV9TSElGVCwgMCwKKwlOVUxMLCAwKSwKKworLyogTUlDQklBUyAqLworU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMiLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLAorCVdNODQwMF9NSUMxQklBU19FTkFfU0hJRlQsIDApLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT04iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUMyIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLTiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUNCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9QIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST04iKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiSW50ZXJuYWwgREFDIFNpbmsiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIE1ha2UgREFDcyB0dXJuIG9uIHdoZW4gcGxheWluZyBldmVuIGlmIG5vdCBtaXhlZCBpbnRvIGFueSBvdXRwdXRzICovCisJeyJJbnRlcm5hbCBEQUMgU2luayIsIE5VTEwsICJMZWZ0IERBQyJ9LAorCXsiSW50ZXJuYWwgREFDIFNpbmsiLCBOVUxMLCAiUmlnaHQgREFDIn0sCisKKwkvKiBNYWtlIEFEQ3MgdHVybiBvbiB3aGVuIHJlY29yZGluZworCSAqIGV2ZW4gaWYgbm90IG1peGVkIGZyb20gYW55IGlucHV0cyAqLworCXsiTGVmdCBBREMiLCBOVUxMLCAiSW50ZXJuYWwgQURDIFNvdXJjZSJ9LAorCXsiUmlnaHQgQURDIiwgTlVMTCwgIkludGVybmFsIEFEQyBTb3VyY2UifSwKKworCS8qIElucHV0IFNpZGUgKi8KKwkvKiBMSU4xMiBQR0EgKi8KKwl7IkxJTjEyIFBHQSIsICJMSU4xIFN3aXRjaCIsICJMSU4xIn0sCisJeyJMSU4xMiBQR0EiLCAiTElOMiBTd2l0Y2giLCAiTElOMiJ9LAorCS8qIExJTjM0IFBHQSAqLworCXsiTElOMzQgUEdBIiwgIkxJTjMgU3dpdGNoIiwgIkxJTjMifSwKKwl7IkxJTjM0IFBHQSIsICJMSU40IFN3aXRjaCIsICJMSU40L1JYTiJ9LAorCS8qIElOTUlYTCAqLworCXsiSU5NSVhMIiwgIlJlY29yZCBMZWZ0IFZvbHVtZSIsICJMT01JWCJ9LAorCXsiSU5NSVhMIiwgIkxJTjIgVm9sdW1lIiwgIkxJTjIifSwKKwl7IklOTUlYTCIsICJMSU5QR0ExMiBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJJTk1JWEwiLCAiTElOUEdBMzQgU3dpdGNoIiwgIkxJTjM0IFBHQSJ9LAorCS8qIEFJTE5NVVggKi8KKwl7IkFJTE5NVVgiLCAiSU5NSVhMIE1peCIsICJJTk1JWEwifSwKKwl7IkFJTE5NVVgiLCAiRElGRklOTCBNaXgiLCAiTElOMTIgUEdBIn0sCisJeyJBSUxOTVVYIiwgIkRJRkZJTkwgTWl4IiwgIkxJTjM0IFBHQSJ9LAorCXsiQUlMTk1VWCIsICJSWFZPSUNFIE1peCIsICJMSU40L1JYTiJ9LAorCXsiQUlMTk1VWCIsICJSWFZPSUNFIE1peCIsICJSSU40L1JYUCJ9LAorCS8qIEFEQyAqLworCXsiTGVmdCBBREMiLCBOVUxMLCAiQUlMTk1VWCJ9LAorCisJLyogUklOMTIgUEdBICovCisJeyJSSU4xMiBQR0EiLCAiUklOMSBTd2l0Y2giLCAiUklOMSJ9LAorCXsiUklOMTIgUEdBIiwgIlJJTjIgU3dpdGNoIiwgIlJJTjIifSwKKwkvKiBSSU4zNCBQR0EgKi8KKwl7IlJJTjM0IFBHQSIsICJSSU4zIFN3aXRjaCIsICJSSU4zIn0sCisJeyJSSU4zNCBQR0EiLCAiUklONCBTd2l0Y2giLCAiUklONC9SWFAifSwKKwkvKiBJTk1JWEwgKi8KKwl7IklOTUlYUiIsICJSZWNvcmQgUmlnaHQgVm9sdW1lIiwgIlJPTUlYIn0sCisJeyJJTk1JWFIiLCAiUklOMiBWb2x1bWUiLCAiUklOMiJ9LAorCXsiSU5NSVhSIiwgIlJJTlBHQTEyIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IklOTUlYUiIsICJSSU5QR0EzNCBTd2l0Y2giLCAiUklOMzQgUEdBIn0sCisJLyogQUlSTk1VWCAqLworCXsiQUlSTk1VWCIsICJJTk1JWFIgTWl4IiwgIklOTUlYUiJ9LAorCXsiQUlSTk1VWCIsICJESUZGSU5SIE1peCIsICJSSU4xMiBQR0EifSwKKwl7IkFJUk5NVVgiLCAiRElGRklOUiBNaXgiLCAiUklOMzQgUEdBIn0sCisJeyJBSVJOTVVYIiwgIlJYVk9JQ0UgTWl4IiwgIkxJTjQvUlhOIn0sCisJeyJBSVJOTVVYIiwgIlJYVk9JQ0UgTWl4IiwgIlJJTjQvUlhQIn0sCisJLyogQURDICovCisJeyJSaWdodCBBREMiLCBOVUxMLCAiQUlSTk1VWCJ9LAorCisJLyogTE9NSVggKi8KKwl7IkxPTUlYIiwgIkxPTUlYIFJJTjMgQnlwYXNzIFN3aXRjaCIsICJSSU4zIn0sCisJeyJMT01JWCIsICJMT01JWCBMSU4zIEJ5cGFzcyBTd2l0Y2giLCAiTElOMyJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTElOMTIgUEdBIEJ5cGFzcyBTd2l0Y2giLCAiTElOMTIgUEdBIn0sCisJeyJMT01JWCIsICJMT01JWCBSSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJSSU4xMiBQR0EifSwKKwl7IkxPTUlYIiwgIkxPTUlYIFJpZ2h0IEFEQyBCeXBhc3MgU3dpdGNoIiwgIkFJUk5NVVgifSwKKwl7IkxPTUlYIiwgIkxPTUlYIExlZnQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlMTk1VWCJ9LAorCXsiTE9NSVgiLCAiTE9NSVggTGVmdCBEQUMgU3dpdGNoIiwgIkxlZnQgREFDIn0sCisKKwkvKiBST01JWCAqLworCXsiUk9NSVgiLCAiUk9NSVggUklOMyBCeXBhc3MgU3dpdGNoIiwgIlJJTjMifSwKKwl7IlJPTUlYIiwgIlJPTUlYIExJTjMgQnlwYXNzIFN3aXRjaCIsICJMSU4zIn0sCisJeyJST01JWCIsICJST01JWCBMSU4xMiBQR0EgQnlwYXNzIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IlJPTUlYIiwgIlJPTUlYIFJJTjEyIFBHQSBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiUk9NSVgiLCAiUk9NSVggUmlnaHQgQURDIEJ5cGFzcyBTd2l0Y2giLCAiQUlSTk1VWCJ9LAorCXsiUk9NSVgiLCAiUk9NSVggTGVmdCBBREMgQnlwYXNzIFN3aXRjaCIsICJBSUxOTVVYIn0sCisJeyJST01JWCIsICJST01JWCBSaWdodCBEQUMgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCisJLyogU1BLTUlYICovCisJeyJTUEtNSVgiLCAiU1BLTUlYIExJTjIgQnlwYXNzIFN3aXRjaCIsICJMSU4yIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJJTjIgQnlwYXNzIFN3aXRjaCIsICJSSU4yIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIExBREMgQnlwYXNzIFN3aXRjaCIsICJBSUxOTVVYIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJBREMgQnlwYXNzIFN3aXRjaCIsICJBSVJOTVVYIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIExlZnQgTWl4ZXIgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCXsiU1BLTUlYIiwgIlNQS01JWCBSaWdodCBNaXhlciBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIFJpZ2h0IERBQyBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisJeyJTUEtNSVgiLCAiU1BLTUlYIExlZnQgREFDIFN3aXRjaCIsICJSaWdodCBEQUMifSwKKworCS8qIExPTk1JWCAqLworCXsiTE9OTUlYIiwgIkxPTk1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKwl7IkxPTk1JWCIsICJMT05NSVggUmlnaHQgTWl4ZXIgUEdBIFN3aXRjaCIsICJST1BHQSJ9LAorCXsiTE9OTUlYIiwgIkxPTk1JWCBJbnZlcnRlZCBMT1AgU3dpdGNoIiwgIkxPUE1JWCJ9LAorCisJLyogTE9QTUlYICovCisJeyJMT1BNSVgiLCAiTE9QTUlYIFJpZ2h0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIlJJTjEyIFBHQSJ9LAorCXsiTE9QTUlYIiwgIkxPUE1JWCBMZWZ0IE1pYyBCeXBhc3MgU3dpdGNoIiwgIkxJTjEyIFBHQSJ9LAorCXsiTE9QTUlYIiwgIkxPUE1JWCBMZWZ0IE1peGVyIFBHQSBTd2l0Y2giLCAiTE9QR0EifSwKKworCS8qIE9VVDNNSVggKi8KKwl7Ik9VVDNNSVgiLCAiT1VUM01JWCBMSU40L1JYUCBCeXBhc3MgU3dpdGNoIiwgIkxJTjQvUlhOIn0sCisJeyJPVVQzTUlYIiwgIk9VVDNNSVggTGVmdCBPdXQgUEdBIFN3aXRjaCIsICJMT1BHQSJ9LAorCisJLyogT1VUNE1JWCAqLworCXsiT1VUNE1JWCIsICJPVVQ0TUlYIFJpZ2h0IE91dCBQR0EgU3dpdGNoIiwgIlJPUEdBIn0sCisJeyJPVVQ0TUlYIiwgIk9VVDRNSVggUklONC9SWFAgQnlwYXNzIFN3aXRjaCIsICJSSU40L1JYUCJ9LAorCisJLyogUk9OTUlYICovCisJeyJST05NSVgiLCAiUk9OTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKwl7IlJPTk1JWCIsICJST05NSVggTGVmdCBNaXhlciBQR0EgU3dpdGNoIiwgIkxPUEdBIn0sCisJeyJST05NSVgiLCAiUk9OTUlYIEludmVydGVkIFJPUCBTd2l0Y2giLCAiUk9QTUlYIn0sCisKKwkvKiBST1BNSVggKi8KKwl7IlJPUE1JWCIsICJST1BNSVggTGVmdCBNaWMgQnlwYXNzIFN3aXRjaCIsICJMSU4xMiBQR0EifSwKKwl7IlJPUE1JWCIsICJST1BNSVggUmlnaHQgTWljIEJ5cGFzcyBTd2l0Y2giLCAiUklOMTIgUEdBIn0sCisJeyJST1BNSVgiLCAiUk9QTUlYIFJpZ2h0IE1peGVyIFBHQSBTd2l0Y2giLCAiUk9QR0EifSwKKworCS8qIE91dCBNaXhlciBQR0FzICovCisJeyJMT1BHQSIsIE5VTEwsICJMT01JWCJ9LAorCXsiUk9QR0EiLCBOVUxMLCAiUk9NSVgifSwKKworCXsiTE9VVCBQR0EiLCBOVUxMLCAiTE9NSVgifSwKKwl7IlJPVVQgUEdBIiwgTlVMTCwgIlJPTUlYIn0sCisKKwkvKiBPdXRwdXQgUGlucyAqLworCXsiTE9OIiwgTlVMTCwgIkxPTk1JWCJ9LAorCXsiTE9QIiwgTlVMTCwgIkxPUE1JWCJ9LAorCXsiT1VUMyIsIE5VTEwsICJPVVQzTUlYIn0sCisJeyJMT1VUIiwgTlVMTCwgIkxPVVQgUEdBIn0sCisJeyJTUEtOIiwgTlVMTCwgIlNQS01JWCJ9LAorCXsiUk9VVCIsIE5VTEwsICJST1VUIFBHQSJ9LAorCXsiT1VUNCIsIE5VTEwsICJPVVQ0TUlYIn0sCisJeyJST1AiLCBOVUxMLCAiUk9QTUlYIn0sCisJeyJST04iLCBOVUxMLCAiUk9OTUlYIn0sCit9OworCitzdGF0aWMgaW50IHdtODQwMF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NDAwX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204NDAwX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDbG9jayBhZnRlciBGTEwgYW5kIGRpdmlkZXJzCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg0MDBfcHJpdiAqd204NDAwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXdtODQwMC0+c3lzY2xrID0gZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGZsbF9mYWN0b3JzIHsKKwl1MTYgbjsKKwl1MTYgazsKKwl1MTYgb3V0ZGl2OworCXUxNiBmcmF0aW87CisJdTE2IGZyZXFfcmVmOworfTsKKworI2RlZmluZSBGSVhFRF9GTExfU0laRSAoKDEgPDwgMTYpICogMTApCisKK3N0YXRpYyBpbnQgZmxsX2ZhY3RvcnMoc3RydWN0IHdtODQwMF9wcml2ICp3bTg0MDAsIHN0cnVjdCBmbGxfZmFjdG9ycyAqZmFjdG9ycywKKwkJICAgICAgIHVuc2lnbmVkIGludCBGcmVmLCB1bnNpZ25lZCBpbnQgRm91dCkKK3sKKwl1NjQgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5tb2QsIHRhcmdldDsKKworCWZhY3RvcnMtPm91dGRpdiA9IDI7CisJd2hpbGUgKEZvdXQgKiBmYWN0b3JzLT5vdXRkaXYgPCAgOTAwMDAwMDAgfHwKKwkgICAgICAgRm91dCAqIGZhY3RvcnMtPm91dGRpdiA+IDEwMDAwMDAwMCkgeworCQlmYWN0b3JzLT5vdXRkaXYgKj0gMjsKKwkJaWYgKGZhY3RvcnMtPm91dGRpdiA+IDMyKSB7CisJCQlkZXZfZXJyKHdtODQwMC0+d204NDAwLT5kZXYsCisJCQkJIlVuc3VwcG9ydGVkIEZMTCBvdXRwdXQgZnJlcXVlbmN5ICVkSHpcbiIsCisJCQkJRm91dCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwl0YXJnZXQgPSBGb3V0ICogZmFjdG9ycy0+b3V0ZGl2OworCWZhY3RvcnMtPm91dGRpdiA9IGZhY3RvcnMtPm91dGRpdiA+PiAyOworCisJaWYgKEZyZWYgPCA0ODAwMCkKKwkJZmFjdG9ycy0+ZnJlcV9yZWYgPSAxOworCWVsc2UKKwkJZmFjdG9ycy0+ZnJlcV9yZWYgPSAwOworCisJaWYgKEZyZWYgPCAxMDAwMDAwKQorCQlmYWN0b3JzLT5mcmF0aW8gPSA5OworCWVsc2UKKwkJZmFjdG9ycy0+ZnJhdGlvID0gMDsKKworCS8qIEVuc3VyZSB3ZSBoYXZlIGEgZnJhY3Rpb25hbCBwYXJ0ICovCisJZG8geworCQlpZiAoRnJlZiA8IDEwMDAwMDApCisJCQlmYWN0b3JzLT5mcmF0aW8tLTsKKwkJZWxzZQorCQkJZmFjdG9ycy0+ZnJhdGlvKys7CisKKwkJaWYgKGZhY3RvcnMtPmZyYXRpbyA8IDEgfHwgZmFjdG9ycy0+ZnJhdGlvID4gOCkgeworCQkJZGV2X2Vycih3bTg0MDAtPndtODQwMC0+ZGV2LAorCQkJCSJVbmFibGUgdG8gY2FsY3VsYXRlIEZSQVRJT1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWZhY3RvcnMtPm4gPSB0YXJnZXQgLyAoRnJlZiAqIGZhY3RvcnMtPmZyYXRpbyk7CisJCU5tb2QgPSB0YXJnZXQgJSAoRnJlZiAqIGZhY3RvcnMtPmZyYXRpbyk7CisJfSB3aGlsZSAoTm1vZCA9PSAwKTsKKworCS8qIENhbGN1bGF0ZSBmcmFjdGlvbmFsIHBhcnQgLSBzY2FsZSB1cCBzbyB3ZSBjYW4gcm91bmQuICovCisJS3BhcnQgPSBGSVhFRF9GTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgKEZyZWYgKiBmYWN0b3JzLT5mcmF0aW8pKTsKKworCUsgPSBLcGFydCAmIDB4RkZGRkZGRkY7CisKKwlpZiAoKEsgJSAxMCkgPj0gNSkKKwkJSyArPSA1OworCisJLyogTW92ZSBkb3duIHRvIHByb3BlciByYW5nZSBub3cgcm91bmRpbmcgaXMgZG9uZSAqLworCWZhY3RvcnMtPmsgPSBLIC8gMTA7CisKKwlkZXZfZGJnKHdtODQwMC0+d204NDAwLT5kZXYsCisJCSJGTEw6IEZyZWY9JWQgRm91dD0lZCBOPSV4IEs9JXgsIEZSQVRJTz0leCBPVVRESVY9JXhcbiIsCisJCUZyZWYsIEZvdXQsCisJCWZhY3RvcnMtPm4sIGZhY3RvcnMtPmssIGZhY3RvcnMtPmZyYXRpbywgZmFjdG9ycy0+b3V0ZGl2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODQwMF9zZXRfZGFpX3BsbChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IHBsbF9pZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZsbF9mYWN0b3JzIGZhY3RvcnM7CisJaW50IHJldDsKKwl1MTYgcmVnOworCisJaWYgKGZyZXFfaW4gPT0gd204NDAwLT5mbGxfaW4gJiYgZnJlcV9vdXQgPT0gd204NDAwLT5mbGxfb3V0KQorCQlyZXR1cm4gMDsKKworCWlmIChmcmVxX291dCAhPSAwKSB7CisJCXJldCA9IGZsbF9mYWN0b3JzKHdtODQwMCwgJmZhY3RvcnMsIGZyZXFfaW4sIGZyZXFfb3V0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwl3bTg0MDAtPmZsbF9vdXQgPSBmcmVxX291dDsKKwl3bTg0MDAtPmZsbF9pbiA9IGZyZXFfaW47CisKKwkvKiBXZSAqbXVzdCogZGlzYWJsZSB0aGUgRkxMIGJlZm9yZSBhbnkgY2hhbmdlcyAqLworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yKTsKKwlyZWcgJj0gfldNODQwMF9GTExfRU5BOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnKTsKKworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfMSk7CisJcmVnICY9IH5XTTg0MDBfRkxMX09TQ19FTkE7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfMSwgcmVnKTsKKworCWlmIChmcmVxX291dCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJlZyAmPSB+KFdNODQwMF9GTExfUkVGX0ZSRVEgfCBXTTg0MDBfRkxMX0ZSQVRJT19NQVNLKTsKKwlyZWcgfD0gV004NDAwX0ZMTF9GUkFDIHwgZmFjdG9ycy5mcmF0aW87CisJcmVnIHw9IGZhY3RvcnMuZnJlcV9yZWYgPDwgV004NDAwX0ZMTF9SRUZfRlJFUV9TSElGVDsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8xLCByZWcpOworCisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfMiwgZmFjdG9ycy5rKTsKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF8zLCBmYWN0b3JzLm4pOworCisJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9GTExfQ09OVFJPTF80KTsKKwlyZWcgJj0gV004NDAwX0ZMTF9PVVRESVZfTUFTSzsKKwlyZWcgfD0gZmFjdG9ycy5vdXRkaXY7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfRkxMX0NPTlRST0xfNCwgcmVnKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0cyBBREMgYW5kIFZvaWNlIERBQyBmb3JtYXQuCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IGF1ZGlvMSwgYXVkaW8zOworCisJYXVkaW8xID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMSk7CisJYXVkaW8zID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMyk7CisKKwkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWF1ZGlvMyAmPSB+V004NDAwX0FJRl9NU1RSMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlhdWRpbzMgfD0gV004NDAwX0FJRl9NU1RSMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0ZNVF9NQVNLOworCisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX0kyUzsKKwkJYXVkaW8xICY9IH5XTTg0MDBfQUlGX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9GTVRfUklHSFRKOworCQlhdWRpbzEgJj0gfldNODQwMF9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfRk1UX0xFRlRKOworCQlhdWRpbzEgJj0gfldNODQwMF9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9GTVRfRFNQOworCQlhdWRpbzEgJj0gfldNODQwMF9BSUZfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9GTVRfRFNQIHwgV004NDAwX0FJRl9MUkNMS19JTlY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xLCBhdWRpbzEpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FVRElPX0lOVEVSRkFDRV8zLCBhdWRpbzMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODQwMF9zZXRfZGFpX2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJaW50IGRpdl9pZCwgaW50IGRpdikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiByZWc7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgV004NDAwX01DTEtfRElWOgorCQlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0NMT0NLSU5HXzIpICYKKwkJCX5XTTg0MDBfTUNMS19ESVZfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMiwgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfREFDQ0xLX0RJVjoKKwkJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yKSAmCisJCQl+V004NDAwX0RBQ19DTEtESVZfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMiwgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfQURDQ0xLX0RJVjoKKwkJcmVnID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9DTE9DS0lOR18yKSAmCisJCQl+V004NDAwX0FEQ19DTEtESVZfTUFTSzsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMiwgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBXTTg0MDBfQkNMS19ESVY6CisJCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQ0xPQ0tJTkdfMSkgJgorCQkJfldNODQwMF9CQ0xLX0RJVl9NQVNLOworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9DTE9DS0lOR18xLCByZWcgfCBkaXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBQQ00gREFJIGJpdCBzaXplIGFuZCBzYW1wbGUgcmF0ZS4KKyAqLworc3RhdGljIGludCB3bTg0MDBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJdTE2IGF1ZGlvMSA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEpOworCisJYXVkaW8xICY9IH5XTTg0MDBfQUlGX1dMX01BU0s7CisJLyogYml0IHNpemUgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlhdWRpbzEgfD0gV004NDAwX0FJRl9XTF8yMEJJVFM7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWF1ZGlvMSB8PSBXTTg0MDBfQUlGX1dMXzI0QklUUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJYXVkaW8xIHw9IFdNODQwMF9BSUZfV0xfMzJCSVRTOworCQlicmVhazsKKwl9CisKKwl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BVURJT19JTlRFUkZBQ0VfMSwgYXVkaW8xKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwl1MTYgdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9EQUNfQ1RSTCkgJiB+V004NDAwX0RBQ19NVVRFOworCisJaWYgKG11dGUpCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0RBQ19DVFJMLCB2YWwgfCBXTTg0MDBfREFDX01VVEUpOworCWVsc2UKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVE9ETzogc2V0IGJpYXMgZm9yIGJlc3QgcGVyZm9ybWFuY2UgYXQgc3RhbmRieSAqLworc3RhdGljIGludCB3bTg0MDBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKndtODQwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTE2IHZhbDsKKwlpbnQgcmV0OworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCS8qIFZNSUQ9Mio1MGsgKi8KKwkJdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpICYKKwkJCX5XTTg0MDBfVk1JRF9NT0RFX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsIHwgMHgyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUocG93ZXIpLAorCQkJCQkJICAgICZwb3dlclswXSk7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKHdtODQwMC0+d204NDAwLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnM6ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgIFdNODQwMF9DT0RFQ19FTkEgfCBXTTg0MDBfU1lTQ0xLX0VOQSk7CisKKwkJCS8qIEVuYWJsZSBQT0JDVFJMLCBTT0ZUX1NULCBWTUlEVE9HIGFuZCBCVUZEQ09QRU4gKi8KKwkJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCBXTTg0MDBfU09GVFNUIHwKKwkJCQkgICAgIFdNODQwMF9CVUZEQ09QRU4gfCBXTTg0MDBfUE9CQ1RSTCk7CisKKwkJCW1zbGVlcCg1MCk7CisKKwkJCS8qIEVuYWJsZSBWUkVGICYgVk1JRCBhdCAyeDUwayAqLworCQkJdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpOworCQkJdmFsIHw9IDB4MiB8IFdNODQwMF9WUkVGX0VOQTsKKwkJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsKTsKKworCQkJLyogRW5hYmxlIEJVRklPRU4gKi8KKwkJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCBXTTg0MDBfU09GVFNUIHwKKwkJCQkgICAgIFdNODQwMF9CVUZEQ09QRU4gfCBXTTg0MDBfUE9CQ1RSTCB8CisJCQkJICAgICBXTTg0MDBfQlVGSU9FTik7CisKKwkJCS8qIGRpc2FibGUgUE9CQ1RSTCwgU09GVF9TVCBhbmQgQlVGRENPUEVOICovCisJCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMiwgV004NDAwX0JVRklPRU4pOworCQl9CisKKwkJLyogVk1JRD0yKjMwMGsgKi8KKwkJdmFsID0gd204NDAwX3JlYWQoY29kZWMsIFdNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzEpICYKKwkJCX5XTTg0MDBfVk1JRF9NT0RFX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsIHwgMHg0KTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCS8qIEVuYWJsZSBQT0JDVFJMIGFuZCBTT0ZUX1NUICovCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCBXTTg0MDBfU09GVFNUIHwKKwkJCVdNODQwMF9QT0JDVFJMIHwgV004NDAwX0JVRklPRU4pOworCisJCS8qIEVuYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfQU5USVBPUDIsIFdNODQwMF9TT0ZUU1QgfAorCQkJV004NDAwX0JVRkRDT1BFTiB8IFdNODQwMF9QT0JDVFJMIHwKKwkJCVdNODQwMF9CVUZJT0VOKTsKKworCQkvKiBtdXRlIERBQyAqLworCQl2YWwgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX0RBQ19DVFJMKTsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfREFDX0NUUkwsIHZhbCB8IFdNODQwMF9EQUNfTVVURSk7CisKKwkJLyogRW5hYmxlIGFueSBkaXNhYmxlZCBvdXRwdXRzICovCisJCXZhbCA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwkJdmFsIHw9IFdNODQwMF9TUEtfRU5BIHwgV004NDAwX09VVDNfRU5BIHwKKwkJCVdNODQwMF9PVVQ0X0VOQSB8IFdNODQwMF9MT1VUX0VOQSB8CisJCQlXTTg0MDBfUk9VVF9FTkE7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsKTsKKworCQkvKiBEaXNhYmxlIFZNSUQgKi8KKwkJdmFsICY9IH5XTTg0MDBfVk1JRF9NT0RFX01BU0s7CisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsKTsKKworCQltc2xlZXAoMzAwKTsKKworCQkvKiBFbmFibGUgYWxsIG91dHB1dCBkaXNjaGFyZ2UgYml0cyAqLworCQl3bTg0MDBfd3JpdGUoY29kZWMsIFdNODQwMF9BTlRJUE9QMSwgV004NDAwX0RJU19MTElORSB8CisJCQlXTTg0MDBfRElTX1JMSU5FIHwgV004NDAwX0RJU19PVVQzIHwKKwkJCVdNODQwMF9ESVNfT1VUNCB8IFdNODQwMF9ESVNfTE9VVCB8CisJCQlXTTg0MDBfRElTX1JPVVQpOworCisJCS8qIERpc2FibGUgVlJFRiAqLworCQl2YWwgJj0gfldNODQwMF9WUkVGX0VOQTsKKwkJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwpOworCisJCS8qIGRpc2FibGUgUE9CQ1RSTCwgU09GVF9TVCBhbmQgQlVGRENPUEVOICovCisJCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0FOVElQT1AyLCAweDApOworCisJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShwb3dlciksCisJCQkJCSAgICAgJnBvd2VyWzBdKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKworCQlicmVhazsKKwl9CisKKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODQwMF9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisKKyNkZWZpbmUgV004NDAwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODQwMF9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSB3bTg0MDBfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgPSB3bTg0MDBfbXV0ZSwKKwkuc2V0X2ZtdCA9IHdtODQwMF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2RpdiA9IHdtODQwMF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3N5c2NsayA9IHdtODQwMF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X3BsbCA9IHdtODQwMF9zZXRfZGFpX3BsbCwKK307CisKKy8qCisgKiBUaGUgV004NDAwIHN1cHBvcnRzIDIgZGlmZmVyZW50IGFuZCBtdXR1YWxseSBleGNsdXNpdmUgREFJCisgKiBjb25maWd1cmF0aW9ucy4KKyAqCisgKiAxLiBBREMvREFDIG9uIFByaW1hcnkgSW50ZXJmYWNlCisgKiAyLiBBREMgb24gUHJpbWFyeSBJbnRlcmZhY2UvREFDIG9uIHNlY29uZGFyeQorICovCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204NDAwX2RhaSA9IHsKKy8qIEFEQy9EQUMgb24gcHJpbWFyeSAqLworCS5uYW1lID0gIldNODQwMCBBREMvREFDIFByaW1hcnkiLAorCS5pZCA9IDEsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODQwMF9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg0MDBfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NDAwX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODQwMF9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZ3bTg0MDBfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfZGFpKTsKKworc3RhdGljIGludCB3bTg0MDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204NDAwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODQwMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg0MDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODQwMF9jb2RlYzsKKworc3RhdGljIGludCB3bTg0MDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0OworCisJaWYgKCF3bTg0MDBfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAid204NDAwIG5vdCB5ZXQgZGlzY292ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwljb2RlYyA9IHdtODQwMF9jb2RlYzsKKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwl3bTg0MDBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwl3bTg0MDBfYWRkX3dpZGdldHMoY29kZWMpOworCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gY2FyZF9lcnI7CisJfQorCisJcmV0dXJuIHJldDsKKworY2FyZF9lcnI6CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgd204NDAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NDAwID0geworCS5wcm9iZSA9CXdtODQwMF9wcm9iZSwKKwkucmVtb3ZlID0Jd204NDAwX3JlbW92ZSwKKwkuc3VzcGVuZCA9CXdtODQwMF9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg0MDBfcmVzdW1lLAorfTsKKworc3RhdGljIHZvaWQgd204NDAwX3Byb2JlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd204NDAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODQwMF9wcml2LAorCQkJCQkJd29yayk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJnByaXYtPmNvZGVjOworCWludCByZXQ7CisKKwkvKiBjaGFyZ2Ugb3V0cHV0IGNhcHMgKi8KKwl3bTg0MDBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIFdlJ3JlIGRvbmUsIHRlbGwgdGhlIHN1YnN5c3RlbS4gKi8KKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihwcml2LT53bTg0MDAtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NDAwX2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIocHJpdi0+d204NDAwLT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybjsKKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJd204NDAwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKK30KKworc3RhdGljIGludCB3bTg0MDBfY29kZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqcHJpdjsKKwlpbnQgcmV0OworCXUxNiByZWc7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg0MDBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmcHJpdi0+Y29kZWM7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHByaXY7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGRldi0+ZGV2LmRyaXZlcl9kYXRhOworCXByaXYtPndtODQwMCA9IGRldi0+ZGV2LmRyaXZlcl9kYXRhOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KHByaXYtPndtODQwMC0+ZGV2LAorCQkJCSBBUlJBWV9TSVpFKHBvd2VyKSwgJnBvd2VyWzBdKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJlZ3VsYXRvcnM6ICVkXG4iLCByZXQpOworCSAgICAgICAgZ290byBlcnI7CisJfQorCisJY29kZWMtPmRldiA9ICZkZXYtPmRldjsKKwl3bTg0MDBfZGFpLmRldiA9ICZkZXYtPmRldjsKKworCWNvZGVjLT5uYW1lID0gIldNODQwMCI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQgPSB3bTg0MDBfcmVhZDsKKwljb2RlYy0+d3JpdGUgPSB3bTg0MDBfd3JpdGU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODQwMF9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODQwMF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODQwMF9SRUdJU1RFUl9DT1VOVDsKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCUlOSVRfV09SSygmcHJpdi0+d29yaywgd204NDAwX3Byb2JlX2RlZmVycmVkKTsKKworCXdtODQwMF9jb2RlY19yZXNldChjb2RlYyk7CisKKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xLCByZWcgfCBXTTg0MDBfQ09ERUNfRU5BKTsKKworCS8qIExhdGNoIHZvbHVtZSB1cGRhdGUgYml0cyAqLworCXJlZyA9IHdtODQwMF9yZWFkKGNvZGVjLCBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUpOworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCQkgICAgIHJlZyAmIFdNODQwMF9JUFZVKTsKKwlyZWcgPSB3bTg0MDBfcmVhZChjb2RlYywgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLAorCQkgICAgIHJlZyAmIFdNODQwMF9JUFZVKTsKKworCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0xFRlRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CisJd204NDAwX3dyaXRlKGNvZGVjLCBXTTg0MDBfUklHSFRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CisKKwl3bTg0MDBfY29kZWMgPSBjb2RlYzsKKworCWlmICghc2NoZWR1bGVfd29yaygmcHJpdi0+d29yaykpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfcmVndWxhdG9yOworCX0KKworCXJldHVybiAwOworCitlcnJfcmVndWxhdG9yOgorCXdtODQwMF9jb2RlYyA9IE5VTEw7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHBvd2VyKSwgcG93ZXIpOworZXJyOgorCWtmcmVlKHByaXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHdtODQwMF9jb2RlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB3bTg0MDBfcHJpdiAqcHJpdiA9IHdtODQwMF9jb2RlYy0+cHJpdmF0ZV9kYXRhOworCXUxNiByZWc7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg0MDBfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMod204NDAwX2NvZGVjKTsKKworCXJlZyA9IHdtODQwMF9yZWFkKHdtODQwMF9jb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSk7CisJd204NDAwX3dyaXRlKHdtODQwMF9jb2RlYywgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJICAgICByZWcgJiAofldNODQwMF9DT0RFQ19FTkEpKTsKKworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShwb3dlciksIHBvd2VyKTsKKwlrZnJlZShwcml2KTsKKworCXdtODQwMF9jb2RlYyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204NDAwX2NvZGVjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTg0MDAtY29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHdtODQwMF9jb2RlY19wcm9iZSwKKwkucmVtb3ZlCT0gX19leGl0X3Aod204NDAwX2NvZGVjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg0MDBfY29kZWNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtODQwMF9jb2RlY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204NDAwX2NvZGVjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204NDAwX2NvZGVjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204NDAwX2NvZGVjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg0MDBfY29kZWNfZXhpdCk7CisKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NDAwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODQwMCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204NDAwLWNvZGVjIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWM1OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogd204NDAwLmggIC0tICBhdWRpbyBkcml2ZXIgZm9yIFdNODQwMAorICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9XTTg0MDBfQ09ERUNfSAorI2RlZmluZSBfV004NDAwX0NPREVDX0gKKworI2RlZmluZSBXTTg0MDBfTUNMS19ESVYgMAorI2RlZmluZSBXTTg0MDBfREFDQ0xLX0RJViAxCisjZGVmaW5lIFdNODQwMF9BRENDTEtfRElWIDIKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWIDMKKworI2RlZmluZSBXTTg0MDBfTUNMS19ESVZfMSAweDQwMAorI2RlZmluZSBXTTg0MDBfTUNMS19ESVZfMiAweDgwMAorCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzEgICAgMHgwMAorI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl8xXzUgIDB4MDQKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfMiAgICAweDA4CisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzMgICAgMHgwYworI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl80ICAgIDB4MTAKKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfNV81ICAweDE0CisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWXzYgICAgMHgxOAorCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzEgICAgMHgwMAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl8xXzUgIDB4MjAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfMiAgICAweDQwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzMgICAgMHg2MAorI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl80ICAgIDB4ODAKKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfNV81ICAweGEwCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWXzYgICAgMHhjMAorCisKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzEgICAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzFfNSAgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzIgICAgICAgICAgICAgICAgICAgICAgICgweDIgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzMgICAgICAgICAgICAgICAgICAgICAgICgweDMgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzQgICAgICAgICAgICAgICAgICAgICAgICgweDQgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzVfNSAgICAgICAgICAgICAgICAgICAgICgweDUgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzYgICAgICAgICAgICAgICAgICAgICAgICgweDYgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzggICAgICAgICAgICAgICAgICAgICAgICgweDcgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzExICAgICAgICAgICAgICAgICAgICAgICgweDggPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzEyICAgICAgICAgICAgICAgICAgICAgICgweDkgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzE2ICAgICAgICAgICAgICAgICAgICAgICgweEEgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzIyICAgICAgICAgICAgICAgICAgICAgICgweEIgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzI0ICAgICAgICAgICAgICAgICAgICAgICgweEMgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzMyICAgICAgICAgICAgICAgICAgICAgICgweEQgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzQ0ICAgICAgICAgICAgICAgICAgICAgICgweEUgPDwgMSkKKyNkZWZpbmUgV004NDAwX0JDTEtfRElWXzQ4ICAgICAgICAgICAgICAgICAgICAgICgweEYgPDwgMSkKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg0MDBfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODQwMDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYwppbmRleCA0MGY4MjM4Li42YTRjZWEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKQEAgLTE3MSwyMiArMTcxLDYgQEAKIFNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgV004NTEwX01PTk9NSVgsIDYsIDEsIDEpLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODUxMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1MTBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204NTEwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsCi0JCQkJCU5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBTcGVha2VyIE91dHB1dCBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODUxMF9zcGVha2VyX21peGVyX2NvbnRyb2xzW10gPSB7CiBTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODUxMF9TUEtNSVgsIDEsIDEsIDApLApAQCAtMzUyLDcgKzMzNiw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXBsbF9mYWN0b3JzKGZyZXFfb3V0KjgsIGZyZXFfaW4pOworCXBsbF9mYWN0b3JzKGZyZXFfb3V0KjQsIGZyZXFfaW4pOwogCiAJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMTiwgKHBsbF9kaXYucHJlX2RpdiA8PCA0KSB8IHBsbF9kaXYubik7CiAJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMSzEsIHBsbF9kaXYuayA+PiAxOCk7CkBAIC0zODMsNyArMzY3LDcgQEAKIAkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfR1BJTywgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg1MTBfTUNMS0RJVjoKLQkJcmVnID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfQ0xPQ0spICYgMHgxZjsKKwkJcmVnID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfQ0xPQ0spICYgMHgxMWY7CiAJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0NMT0NLLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODUxMF9BRENDTEs6CkBAIC00NjgsNyArNDUyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IGlmYWNlID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfSUZBQ0UpICYgMHgxOWY7CiAJdTE2IGFkbiA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0FERCkgJiAweDFmMTsKIApAQCAtNTcwLDYgKzU1NCwxNCBAQAogI2RlZmluZSBXTTg1MTBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg1MTBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204NTEwX3BjbV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODUxMF9tdXRlLAorCS5zZXRfZm10CT0gd204NTEwX3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NTEwX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NTEwX3NldF9kYWlfcGxsLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODUxMF9kYWkgPSB7CiAJLm5hbWUgPSAiV004NTEwIEhpRmkiLAogCS5wbGF5YmFjayA9IHsKQEAgLTU4NCwyMCArNTc2LDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg1MTBfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NTEwX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NTEwX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg1MTBfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg1MTBfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NTEwX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODUxMF9zZXRfZGFpX3BsbCwKLQl9LAorCS5vcHMgPSAmd204NTEwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NTEwX2RhaSk7CiAKIHN0YXRpYyBpbnQgd204NTEwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NTEwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTYwNiw3ICs1OTIsNyBAQAogc3RhdGljIGludCB3bTg1MTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTYyOCw3ICs2MTQsNyBAQAogICovCiBzdGF0aWMgaW50IHdtODUxMF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIldNODUxMCI7CkBAIC02NTYsNyArNjQyLDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CiAJd204NTEwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7Ci0Jd204NTEwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODUxMF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg1MTBfc25kX2NvbnRyb2xzKSk7CiAJd204NTEwX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC02ODUsNyArNjcyLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg1MTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNzY2LDcgKzc1Myw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg1MTBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg1MTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKQEAgLTgzMiw3ICs4MTksNyBAQAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTg2Miw3ICs4NDksNyBAQAogc3RhdGljIGludCB3bTg1MTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204NTEwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCmluZGV4IGQwMDRlNTguLjQ0MmVhNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB3bTg1ODAuYyAgLS0gIFdNODU4MCBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0zNSwxOSArMzUsNiBAQAogCiAjaW5jbHVkZSAid204NTgwLmgiCiAKLSNkZWZpbmUgV004NTgwX1ZFUlNJT04gIjAuMSIKLQotc3RydWN0IHBsbF9zdGF0ZSB7Ci0JdW5zaWduZWQgaW50IGluOwotCXVuc2lnbmVkIGludCBvdXQ7Ci19OwotCi0vKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KLXN0cnVjdCB3bTg1ODBfcHJpdiB7Ci0Jc3RydWN0IHBsbF9zdGF0ZSBhOwotCXN0cnVjdCBwbGxfc3RhdGUgYjsKLX07Ci0KIC8qIFdNODU4MCByZWdpc3RlciBzcGFjZSAqLwogI2RlZmluZSBXTTg1ODBfUExMQTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSBXTTg1ODBfUExMQTIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQpAQCAtMTAyLDYgKzg5LDggQEAKICNkZWZpbmUgV004NTgwX1JFQURCQUNLICAgICAgICAgICAgICAgICAgICAgIDB4MzQKICNkZWZpbmUgV004NTgwX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUKIAorI2RlZmluZSBXTTg1ODBfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgMHgzNQorCiAvKiBQTExCNCAocmVnaXN0ZXIgN2gpICovCiAjZGVmaW5lIFdNODU4MF9QTExCNF9NQ0xLT1VUU1JDX01BU0sgICAweDYwCiAjZGVmaW5lIFdNODU4MF9QTExCNF9NQ0xLT1VUU1JDX1BMTEEgICAweDIwCkBAIC0xOTMsNiArMTgyLDIwIEBACiAJMHgwMDAwLCAweDAwMDAgLypSNTMqLwogfTsKIAorc3RydWN0IHBsbF9zdGF0ZSB7CisJdW5zaWduZWQgaW50IGluOworCXVuc2lnbmVkIGludCBvdXQ7Cit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg1ODBfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg1ODBfTUFYX1JFR0lTVEVSICsgMV07CisJc3RydWN0IHBsbF9zdGF0ZSBhOworCXN0cnVjdCBwbGxfc3RhdGUgYjsKK307CisKKwogLyoKICAqIHJlYWQgd204NTgwIHJlZ2lzdGVyIGNhY2hlCiAgKi8KQEAgLTIwMCw3ICsyMDMsNyBAQAogCXVuc2lnbmVkIGludCByZWcpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUod204NTgwX3JlZykpOworCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg1ODBfcmVnKSk7CiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKQEAgLTIyMyw3ICsyMjYsNyBAQAogewogCXU4IGRhdGFbMl07CiAKLQlCVUdfT04ocmVnID4gQVJSQVlfU0laRSh3bTg1ODBfcmVnKSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODU4MF9yZWcpKTsKIAogCS8qIFJlZ2lzdGVycyBhcmUgOSBiaXRzIHdpZGUgKi8KIAl2YWx1ZSAmPSAweDFmZjsKQEAgLTMzMCwyMCArMzMzLDYgQEAKIFNPQ19TSU5HTEUoIkFEQyBIaWdoLVBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODU4MF9BRENfQ09OVFJPTDEsIDQsIDEsIDApLAogfTsKIAotLyogQWRkIG5vbi1EQVBNIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODU4MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1ODBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg1ODBfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg1ODBfZGFwbV93aWRnZXRzW10gPSB7CiBTTkRfU09DX0RBUE1fREFDKCJEQUMxIiwgIlBsYXliYWNrIiwgV004NTgwX1BXUkROMSwgMiwgMSksCiBTTkRfU09DX0RBUE1fREFDKCJEQUMyIiwgIlBsYXliYWNrIiwgV004NTgwX1BXUkROMSwgMywgMSksCkBAIC01NTMsNyArNTQyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IHBhaWZiID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QQUlGMyArIGRhaS0+aWQpOwogCiAJcGFpZmIgJj0gfldNODU4MF9BSUZfTEVOR1RIX01BU0s7CkBAIC03NzEsOCArNzYwLDIyIEBACiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Ci0JY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJLyogUG93ZXIgdXAgYW5kIGdldCBpbmRpdmlkdWFsIGNvbnRyb2wgb2YgdGhlIERBQ3MgKi8KKwkJCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUFdSRE4xKTsKKwkJCXJlZyAmPSB+KFdNODU4MF9QV1JETjFfUFdETiB8IFdNODU4MF9QV1JETjFfQUxMREFDUEQpOworCQkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUFdSRE4xLCByZWcpOworCisJCQkvKiBNYWtlIFZNSUQgaGlnaCBpbXBlZGVuY2UgKi8KKwkJCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCAgV004NTgwX0FEQ19DT05UUk9MMSk7CisJCQlyZWcgJj0gfjB4MTAwOworCQkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfQURDX0NPTlRST0wxLCByZWcpOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BXUkROMSk7CiAJCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgcmVnIHwgV004NTgwX1BXUkROMV9QV0ROKTsKQEAgLTc4NSw2ICs3ODgsMjEgQEAKICNkZWZpbmUgV004NTgwX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg1ODBfZGFpX29wc19wbGF5YmFjayA9IHsKKwkuaHdfcGFyYW1zCT0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg1ODBfc2V0X2RhaV9wbGwsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODU4MF9kaWdpdGFsX211dGUsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg1ODBfZGFpX29wc19jYXB0dXJlID0geworCS5od19wYXJhbXMJPSB3bTg1ODBfcGFpZl9od19wYXJhbXMsCisJLnNldF9mbXQJPSB3bTg1ODBfc2V0X3BhaWZfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODU4MF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODU4MF9zZXRfZGFpX3BsbCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg1ODBfZGFpW10gPSB7CiAJewogCQkubmFtZSA9ICJXTTg1ODAgUEFJRlJYIiwKQEAgLTc5NiwxMyArODE0LDcgQEAKIAkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAogCQkJLmZvcm1hdHMgPSBXTTg1ODBfRk9STUFUUywKIAkJfSwKLQkJLm9wcyA9IHsKLQkJCSAuaHdfcGFyYW1zID0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAotCQkJIC5zZXRfZm10ID0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCi0JCQkgLnNldF9jbGtkaXYgPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCi0JCQkgLnNldF9wbGwgPSB3bTg1ODBfc2V0X2RhaV9wbGwsCi0JCQkgLmRpZ2l0YWxfbXV0ZSA9IHdtODU4MF9kaWdpdGFsX211dGUsCi0JCSB9LAorCQkub3BzID0gJndtODU4MF9kYWlfb3BzX3BsYXliYWNrLAogCX0sCiAJewogCQkubmFtZSA9ICJXTTg1ODAgUEFJRlRYIiwKQEAgLTgxNCwxMDkgKzgyNiwxNjggQEAKIAkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAogCQkJLmZvcm1hdHMgPSBXTTg1ODBfRk9STUFUUywKIAkJfSwKLQkJLm9wcyA9IHsKLQkJCSAuaHdfcGFyYW1zID0gd204NTgwX3BhaWZfaHdfcGFyYW1zLAotCQkJIC5zZXRfZm10ID0gd204NTgwX3NldF9wYWlmX2RhaV9mbXQsCi0JCQkgLnNldF9jbGtkaXYgPSB3bTg1ODBfc2V0X2RhaV9jbGtkaXYsCi0JCQkgLnNldF9wbGwgPSB3bTg1ODBfc2V0X2RhaV9wbGwsCi0JCSB9LAorCQkub3BzID0gJndtODU4MF9kYWlfb3BzX2NhcHR1cmUsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg1ODBfZGFpKTsKIAotLyoKLSAqIGluaXRpYWxpc2UgdGhlIFdNODU4MCBkcml2ZXIKLSAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCi0gKi8KLXN0YXRpYyBpbnQgd204NTgwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODU4MF9jb2RlYzsKKworc3RhdGljIGludCB3bTg1ODBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQgPSAwOwogCi0JY29kZWMtPm5hbWUgPSAiV004NTgwIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODU4MF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg1ODBfd3JpdGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NTgwX3NldF9iaWFzX2xldmVsOwotCWNvZGVjLT5kYWkgPSB3bTg1ODBfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh3bTg1ODBfZGFpKTsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODU4MF9yZWcpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtODU4MF9yZWcsIHNpemVvZih3bTg1ODBfcmVnKSwKLQkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAod204NTgwX2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0JaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBHZXQgdGhlIGNvZGVjIGludG8gYSBrbm93biBzdGF0ZSAqLwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1JFU0VULCAwKTsKLQotCS8qIFBvd2VyIHVwIGFuZCBnZXQgaW5kaXZpZHVhbCBjb250cm9sIG9mIHRoZSBEQUNzICovCi0Jd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUFdSRE4xLCB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BXUkROMSkgJgotCQkgICAgIH4oV004NTgwX1BXUkROMV9QV0ROIHwgV004NTgwX1BXUkROMV9BTExEQUNQRCkpOwotCi0JLyogTWFrZSBWTUlEIGhpZ2ggaW1wZWRlbmNlICovCi0Jd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfQURDX0NPTlRST0wxLAotCQkgICAgIHdtODU4MF9yZWFkKGNvZGVjLCAgV004NTgwX0FEQ19DT05UUk9MMSkgJiB+MHgxMDApOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg1ODBfY29kZWM7CisJY29kZWMgPSB3bTg1ODBfY29kZWM7CiAKIAkvKiByZWdpc3RlciBwY21zICovCi0JcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwKLQkJCSAgICAgICBTTkRSVl9ERUZBVUxUX1NUUjEpOworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3bTg1ODA6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQl3bTg1ODBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NTgwX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg1ODBfc25kX2NvbnRyb2xzKSk7CiAJd204NTgwX2FkZF93aWRnZXRzKGNvZGVjKTsKLQogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3bTg1ODA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGNhcmRfZXJyOwogCX0KKwogCXJldHVybiByZXQ7CiAKIGNhcmRfZXJyOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKIHBjbV9lcnI6Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyogSWYgdGhlIGkyYyBsYXllciB3ZXJlbid0IHNvIGJyb2tlbiwgd2UgY291bGQgcGFzcyB0aGlzIGtpbmQgb2YgZGF0YQotICAgYXJvdW5kICovCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp3bTg1ODBfc29jZGV2OworLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODU4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODU4MCA9IHsKKwkucHJvYmUgPSAJd204NTgwX3Byb2JlLAorCS5yZW1vdmUgPSAJd204NTgwX3JlbW92ZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODU4MCk7CisKK3N0YXRpYyBpbnQgd204NTgwX3JlZ2lzdGVyKHN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwKQoreworCWludCByZXQsIGk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODU4MC0+Y29kZWM7CisKKwlpZiAod204NTgwX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004NTgwIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODU4MDsKKwljb2RlYy0+bmFtZSA9ICJXTTg1ODAiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NTgwX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHdtODU4MF93cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NTgwX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSB3bTg1ODBfZGFpOworCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh3bTg1ODBfZGFpKTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODU4MC0+cmVnX2NhY2hlKTsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODU4MC0+cmVnX2NhY2hlOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODU4MF9yZWcsIHNpemVvZih3bTg1ODBfcmVnKSk7CisKKwkvKiBHZXQgdGhlIGNvZGVjIGludG8gYSBrbm93biBzdGF0ZSAqLworCXJldCA9IHdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1JFU0VULCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlc2V0IGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NTgwX2RhaSk7IGkrKykKKwkJd204NTgwX2RhaVtpXS5kZXYgPSBjb2RlYy0+ZGV2OworCisJd204NTgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwl3bTg1ODBfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMod204NTgwX2RhaSwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUod204NTgwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg1ODBfdW5yZWdpc3RlcihzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MCkKK3sKKwl3bTg1ODBfc2V0X2JpYXNfbGV2ZWwoJndtODU4MC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204NTgwLT5jb2RlYyk7CisJa2ZyZWUod204NTgwKTsKKwl3bTg1ODBfY29kZWMgPSBOVUxMOworfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCi0vKgotICogV004NTgwIDIgd2lyZSBhZGRyZXNzIGlzIGRldGVybWluZWQgYnkgR1BJTzUKLSAqIHN0YXRlIGR1cmluZyBwb3dlcnVwLgotICogICAgbG93ICA9IDB4MWEKLSAqICAgIGhpZ2ggPSAweDFiCi0gKi8KLQogc3RhdGljIGludCB3bTg1ODBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NTgwX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7CisJc3RydWN0IHdtODU4MF9wcml2ICp3bTg1ODA7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOworCXdtODU4MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg1ODBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg1ODAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg1ODAtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODU4MCk7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAotCXJldCA9IHdtODU4MF9pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJmkyYy0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NTgwXG4iKTsKLQlyZXR1cm4gcmV0OworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NTgwX3JlZ2lzdGVyKHdtODU4MCk7CiB9CiAKIHN0YXRpYyBpbnQgd204NTgwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwlzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODU4MF91bnJlZ2lzdGVyKHdtODU4MCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyOCwxMjkgKzk5OSwzNSBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NTgwX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiV004NTgwIEkyQyBDb2RlYyIsCisJCS5uYW1lID0gIndtODU4MCIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlID0gICAgd204NTgwX2kyY19wcm9iZSwKIAkucmVtb3ZlID0gICB3bTg1ODBfaTJjX3JlbW92ZSwKIAkuaWRfdGFibGUgPSB3bTg1ODBfaTJjX2lkLAogfTsKLQotc3RhdGljIGludCB3bTg1ODBfYWRkX2kyY19kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgY29uc3Qgc3RydWN0IHdtODU4MF9zZXR1cF9kYXRhICpzZXR1cCkKLXsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCWluZm8uYWRkciA9IHNldHVwLT5pMmNfYWRkcmVzczsKLQlzdHJsY3B5KGluZm8udHlwZSwgIndtODU4MCIsIEkyQ19OQU1FX1NJWkUpOwotCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcihzZXR1cC0+aTJjX2J1cyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpMmMgYWRhcHRlciAlZFxuIiwKLQkJCXNldHVwLT5pMmNfYnVzKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKCFjbGllbnQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19CiAjZW5kaWYKIAotc3RhdGljIGludCB3bTg1ODBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCB3bTg1ODBfc2V0dXBfZGF0YSAqc2V0dXA7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwOwotCWludCByZXQgPSAwOwotCi0JcHJfaW5mbygiV004NTgwIEF1ZGlvIENvZGVjICVzXG4iLCBXTTg1ODBfVkVSU0lPTik7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd204NTgwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODU4MF9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdtODU4MCA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODU4MDsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKLQl3bTg1ODBfc29jZGV2ID0gc29jZGV2OwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwotCQlyZXQgPSB3bTg1ODBfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwotCX0KLSNlbHNlCi0JCS8qIEFkZCBvdGhlciBpbnRlcmZhY2VzIGhlcmUgKi8KLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHBvd2VyIGRvd24gY2hpcCAqLwotc3RhdGljIGludCB3bTg1ODBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXdtODU4MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Ci0Jc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY29kZWMtPmNvbnRyb2xfZGF0YSk7Ci0JaTJjX2RlbF9kcml2ZXIoJndtODU4MF9pMmNfZHJpdmVyKTsKLSNlbmRpZgotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg1ODAgPSB7Ci0JLnByb2JlID0gCXdtODU4MF9wcm9iZSwKLQkucmVtb3ZlID0gCXdtODU4MF9yZW1vdmUsCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg1ODApOwotCiBzdGF0aWMgaW50IF9faW5pdCB3bTg1ODBfbW9kaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMod204NTgwX2RhaSwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKSk7CisJaW50IHJldDsKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NTgwX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBXTTg1ODAgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHdtODU4MF9tb2Rpbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHdtODU4MF9leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMod204NTgwX2RhaSwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKSk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg1ODBfaTJjX2RyaXZlcik7CisjZW5kaWYKIH0KIG1vZHVsZV9leGl0KHdtODU4MF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmgKaW5kZXggMDllNDQyMi4uMGRmYjVkZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5oCkBAIC0yOCwxMSArMjgsNiBAQAogI2RlZmluZSBXTTg1ODBfQ0xLU1JDX09TQyAgNAogI2RlZmluZSBXTTg1ODBfQ0xLU1JDX05PTkUgNQogCi1zdHJ1Y3Qgd204NTgwX3NldHVwX2RhdGEgewotCWludCBpMmNfYnVzOwotCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOwotfTsKLQogI2RlZmluZSBXTTg1ODBfREFJX1BBSUZSWCAwCiAjZGVmaW5lIFdNODU4MF9EQUlfUEFJRlRYIDEKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MjguYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKaW5kZXggODBiMTE5OC4uZTdmZjIxMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MjguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJdW5zaWduZWQgaW50IHJlZykKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID4gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODcyOF9yZWdfZGVmYXVsdHMpKTsKIAlyZXR1cm4gY2FjaGVbcmVnXTsKIH0KIApAQCAtNTUsNyArNTUsNyBAQAogCXUxNiByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID4gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODcyOF9yZWdfZGVmYXVsdHMpKTsKIAljYWNoZVtyZWddID0gdmFsdWU7CiB9CiAKQEAgLTkyLDIxICs5Miw2IEBACiBTT0NfU0lOR0xFKCJEZWVtcGhhc2lzIiwgV004NzI4X0RBQ0NUTCwgMSwgMSwgMCksCiB9OwogCi1zdGF0aWMgaW50IHdtODcyOF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3Mjhfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg3Mjhfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKgogICogREFQTSBjb250cm9scy4KICAqLwpAQCAtMTUyLDcgKzEzNyw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiBkYWMgPSB3bTg3MjhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODcyOF9EQUNDVEwpOwogCiAJZGFjICY9IH4weDE4OwpAQCAtMjU5LDYgKzI0NCwxMiBAQAogI2RlZmluZSBXTTg3MjhfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzI4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODcyOF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODcyOF9tdXRlLAorCS5zZXRfZm10CT0gd204NzI4X3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODcyOF9kYWkgPSB7CiAJLm5hbWUgPSAiV004NzI4IiwKIAkucGxheWJhY2sgPSB7CkBAIC0yNjgsMTggKzI1OSwxNCBAQAogCQkucmF0ZXMgPSBXTTg3MjhfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzI4X0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkgLmh3X3BhcmFtcyA9IHdtODcyOF9od19wYXJhbXMsCi0JCSAuZGlnaXRhbF9tdXRlID0gd204NzI4X211dGUsCi0JCSAuc2V0X2ZtdCA9IHdtODcyOF9zZXRfZGFpX2ZtdCwKLQl9CisJLm9wcyA9ICZ3bTg3MjhfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg3MjhfZGFpKTsKIAogc3RhdGljIGludCB3bTg3Mjhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg3Mjhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0yODksNyArMjc2LDcgQEAKIHN0YXRpYyBpbnQgd204NzI4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd204NzI4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKIApAQCAtMzAyLDcgKzI4OSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd204NzI4X2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004NzI4IjsKQEAgLTMzMCw3ICszMTcsOCBAQAogCS8qIHBvd2VyIG9uIGRldmljZSAqLwogCXdtODcyOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCi0Jd204NzI4X2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODcyOF9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3Mjhfc25kX2NvbnRyb2xzKSk7CiAJd204NzI4X2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0zNjMsNyArMzUxLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3Mjhfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtNDQ0LDcgKzQzMiw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3Mjhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3Mjhfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKQEAgLTUwOCw3ICs0OTYsNyBAQAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTU0MSw3ICs1MjksNyBAQAogc3RhdGljIGludCB3bTg3MjhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204NzI4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCmluZGV4IGM0NDRiOWYuLmUwNDNlM2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwpAQCAtMjksMTUgKzI5LDIwIEBACiAKICNpbmNsdWRlICJ3bTg3MzEuaCIKIAotI2RlZmluZSBXTTg3MzFfVkVSU0lPTiAiMC4xMyIKLQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg3MzFfY29kZWM7CiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzE7CiAKIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwogc3RydWN0IHdtODczMV9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODczMV9DQUNIRVJFR05VTV07CiAJdW5zaWduZWQgaW50IHN5c2NsazsKIH07CiAKKyNpZmRlZiBDT05GSUdfU1BJX01BU1RFUgorc3RhdGljIGludCB3bTg3MzFfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pOworI2VuZGlmCisKIC8qCiAgKiB3bTg3MzEgcmVnaXN0ZXIgY2FjaGUKICAqIFdlIGNhbid0IHJlYWQgdGhlIFdNODczMSByZWdpc3RlciBzcGFjZSB3aGVuIHdlIGFyZQpAQCAtMTI5LDIyICsxMzQsNiBAQAogU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgd204NzMxX2VudW1bMV0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODczMV9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTg3MzFfc25kX2NvbnRyb2xzW2ldLAotCQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBPdXRwdXQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg3MzFfb3V0cHV0X21peGVyX2NvbnRyb2xzW10gPSB7CiBTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODczMV9BUEFOQSwgMywgMSwgMCksCkBAIC0yNjksNyArMjU4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBpZmFjZSA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0lGQUNFKSAmIDB4ZmZmMzsKIAlpbnQgaSA9IGdldF9jb2VmZih3bTg3MzEtPnN5c2NsaywgcGFyYW1zX3JhdGUocGFyYW1zKSk7CkBAIC0yOTksNyArMjg4LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBzZXQgYWN0aXZlICovCiAJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQUNUSVZFLCAweDAwMDEpOwpAQCAtMzEyLDcgKzMwMSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogZGVhY3RpdmF0ZSAqLwogCWlmICghY29kZWMtPmFjdGl2ZSkgewpAQCAtNDE0LDIxICs0MDMsMTkgQEAKIHN0YXRpYyBpbnQgd204NzMxX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0JdTE2IHJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1BXUikgJiAweGZmN2Y7CisJdTE2IHJlZzsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJLyogdnJlZi9taWQsIG9zYyBvbiwgZGFjIHVubXV0ZSAqLwotCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9QV1IsIHJlZyk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCS8qIGV2ZXJ5dGhpbmcgb2ZmIGV4Y2VwdCB2cmVmL3ZtaWQsICovCisJCS8qIENsZWFyIFBXUk9GRiwgZ2F0ZSBDTEtPVVQsIGV2ZXJ5dGhpbmcgZWxzZSBhcy1pcyAqLworCQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9QV1IpICYgMHhmZjdmOwogCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9QV1IsIHJlZyB8IDB4MDA0MCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJLyogZXZlcnl0aGluZyBvZmYsIGRhYyBtdXRlLCBpbmFjdGl2ZSAqLwogCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7CiAJCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1BXUiwgMHhmZmZmKTsKIAkJYnJlYWs7CkBAIC00NDYsNiArNDMzLDE1IEBACiAjZGVmaW5lIFdNODczMV9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAogCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3MzFfZGFpX29wcyA9IHsKKwkucHJlcGFyZQk9IHdtODczMV9wY21fcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gd204NzMxX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSB3bTg3MzFfc2h1dGRvd24sCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODczMV9tdXRlLAorCS5zZXRfc3lzY2xrCT0gd204NzMxX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gd204NzMxX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHdtODczMV9kYWkgPSB7CiAJLm5hbWUgPSAiV004NzMxIiwKIAkucGxheWJhY2sgPSB7CkBAIC00NjAsMjEgKzQ1NiwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzMxX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODczMV9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSB3bTg3MzFfcGNtX3ByZXBhcmUsCi0JCS5od19wYXJhbXMgPSB3bTg3MzFfaHdfcGFyYW1zLAotCQkuc2h1dGRvd24gPSB3bTg3MzFfc2h1dGRvd24sCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3MzFfbXV0ZSwKLQkJLnNldF9zeXNjbGsgPSB3bTg3MzFfc2V0X2RhaV9zeXNjbGssCi0JCS5zZXRfZm10ID0gd204NzMxX3NldF9kYWlfZm10LAotCX0KKwkub3BzID0gJndtODczMV9kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODczMV9kYWkpOwogCiBzdGF0aWMgaW50IHdtODczMV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FDVElWRSwgMHgwKTsKIAl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpAQCAtNDg0LDcgKzQ3Myw3IEBACiBzdGF0aWMgaW50IHdtODczMV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNTAwLDU0ICs0ODksMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGluaXRpYWxpc2UgdGhlIFdNODczMSBkcml2ZXIKLSAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCi0gKi8KLXN0YXRpYyBpbnQgd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgaW50IHdtODczMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJlZywgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKIAotCWNvZGVjLT5uYW1lID0gIldNODczMSI7Ci0JY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204NzMxX3dyaXRlOwotCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODczMV9zZXRfYmlhc19sZXZlbDsKLQljb2RlYy0+ZGFpID0gJndtODczMV9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NzMxX3JlZyk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod204NzMxX3JlZywgc2l6ZW9mKHdtODczMV9yZWcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAod204NzMxX2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0Jd204NzMxX3Jlc2V0KGNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204NzMxX2NvZGVjOworCWNvZGVjID0gd204NzMxX2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3bTg3MzE6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQkvKiBwb3dlciBvbiBkZXZpY2UgKi8KLQl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKLQotCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MT1VUMVYpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xPVVQxViwgcmVnICYgfjB4MDEwMCk7Ci0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUk9VVDFWKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9ST1VUMVYsIHJlZyAmIH4weDAxMDApOwotCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0xJTlZPTCk7Ci0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfTElOVk9MLCByZWcgJiB+MHgwMTAwKTsKLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9SSU5WT0wpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1JJTlZPTCwgcmVnICYgfjB4MDEwMCk7Ci0KLQl3bTg3MzFfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzMxX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg3MzFfc25kX2NvbnRyb2xzKSk7CiAJd204NzMxX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAid204NzMxOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBjYXJkX2VycjsKIAl9CiAKQEAgLTU1NywxMzMgKzUyNSwxMDkgQEAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CiBwY21fZXJyOgotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKndtODczMV9zb2NkZXY7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0KLS8qCi0gKiBXTTg3MzEgMiB3aXJlIGFkZHJlc3MgaXMgZGV0ZXJtaW5lZCBieSBHUElPNQotICogc3RhdGUgZHVyaW5nIHBvd2VydXAuCi0gKiAgICBsb3cgID0gMHgxYQotICogICAgaGlnaCA9IDB4MWIKLSAqLwotCi1zdGF0aWMgaW50IHdtODczMV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgd204NzMxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzMxX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKLQljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKIAotCXJldCA9IHdtODczMV9pbml0KHNvY2Rldik7Ci0JaWYgKHJldCA8IDApCi0JCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzMxXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd204NzMxX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODczMV9pMmNfaWRbXSA9IHsKLQl7ICJ3bTg3MzEiLCAwIH0sCi0JeyB9CitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3MzEgPSB7CisJLnByb2JlID0gCXdtODczMV9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODczMV9yZW1vdmUsCisJLnN1c3BlbmQgPSAJd204NzMxX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODczMV9yZXN1bWUsCiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODczMV9pMmNfaWQpOworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg3MzEpOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NzMxX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiV004NzMxIEkyQyBDb2RlYyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlID0gICAgd204NzMxX2kyY19wcm9iZSwKLQkucmVtb3ZlID0gICB3bTg3MzFfaTJjX3JlbW92ZSwKLQkuaWRfdGFibGUgPSB3bTg3MzFfaTJjX2lkLAotfTsKLQotc3RhdGljIGludCB3bTg3MzFfYWRkX2kyY19kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgY29uc3Qgc3RydWN0IHdtODczMV9zZXR1cF9kYXRhICpzZXR1cCkKK3N0YXRpYyBpbnQgd204NzMxX3JlZ2lzdGVyKHN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxKQogewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODczMS0+Y29kZWM7CisJdTE2IHJlZzsKIAotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZHJpdmVyXG4iKTsKKwlpZiAod204NzMxX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004NzMxIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODczMTsKKwljb2RlYy0+bmFtZSA9ICJXTTg3MzEiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NzMxX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHdtODczMV93cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzMxX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204NzMxX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004NzMxX0NBQ0hFUkVHTlVNOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204NzMxLT5yZWdfY2FjaGU7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204NzMxX3JlZywgc2l6ZW9mKHdtODczMV9yZWcpKTsKKworCXJldCA9IHdtODczMV9yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSBzZXR1cC0+aTJjX2FkZHJlc3M7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJ3bTg3MzEiLCBJMkNfTkFNRV9TSVpFKTsKKwl3bTg3MzFfZGFpLmRldiA9IGNvZGVjLT5kZXY7CiAKLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKHNldHVwLT5pMmNfYnVzKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyICVkXG4iLAotCQkJc2V0dXAtPmkyY19idXMpOwotCQlnb3RvIGVycl9kcml2ZXI7CisJd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBMYXRjaCB0aGUgdXBkYXRlIGJpdHMgKi8KKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MT1VUMVYpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xPVVQxViwgcmVnICYgfjB4MDEwMCk7CisJcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUk9VVDFWKTsKKwl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9ST1VUMVYsIHJlZyAmIH4weDAxMDApOworCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0xJTlZPTCk7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfTElOVk9MLCByZWcgJiB+MHgwMTAwKTsKKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9SSU5WT0wpOworCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1JJTlZPTCwgcmVnICYgfjB4MDEwMCk7CisKKwkvKiBEaXNhYmxlIGJ5cGFzcyBwYXRoIGJ5IGRlZmF1bHQgKi8KKwlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9BUEFOQSk7CisJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQVBBTkEsIHJlZyAmIH4weDQpOworCisJd204NzMxX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwotCi1lcnJfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ3bTg3MzFfaTJjX2RyaXZlcik7Ci0JcmV0dXJuIC1FTk9ERVY7CiB9Ci0jZW5kaWYKKworc3RhdGljIHZvaWQgd204NzMxX3VucmVnaXN0ZXIoc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEpCit7CisJd204NzMxX3NldF9iaWFzX2xldmVsKCZ3bTg3MzEtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg3MzFfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODczMS0+Y29kZWMpOworCWtmcmVlKHdtODczMSk7CisJd204NzMxX2NvZGVjID0gTlVMTDsKK30KIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3MzFfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3MzFfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IHJldDsKLQotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7Ci0KLQlyZXQgPSB3bTg3MzFfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODczMVxuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3MzFfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzMxX3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAid204NzMxIiwKLQkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCQk9IHdtODczMV9zcGlfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3MzFfc3BpX3JlbW92ZSksCi19OwotCiBzdGF0aWMgaW50IHdtODczMV9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CkBAIC03MDcsMTAxICs2NTEsMTIxIEBACiAKIAlyZXR1cm4gbGVuOwogfQotI2VuZGlmIC8qIENPTkZJR19TUElfTUFTVEVSICovCiAKLXN0YXRpYyBpbnQgd204NzMxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3MzFfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgKnNldHVwOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMTsKLQlpbnQgcmV0ID0gMDsKLQotCXByX2luZm8oIldNODczMSBBdWRpbyBDb2RlYyAlcyIsIFdNODczMV9WRVJTSU9OKTsKLQotCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwotCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CiAKIAl3bTg3MzEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzMxX3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAod204NzMxID09IE5VTEwpIHsKLQkJa2ZyZWUoY29kZWMpOworCWlmICh3bTg3MzEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCi0JY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODczMTsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwljb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzMxX3NwaV93cml0ZTsKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OwogCi0Jd204NzMxX3NvY2RldiA9IHNvY2RldjsKLQlyZXQgPSAtRU5PREVWOworCXNwaS0+ZGV2LmRyaXZlcl9kYXRhID0gd204NzMxOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwotCQlyZXQgPSB3bTg3MzFfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi0JaWYgKHNldHVwLT5zcGkpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzMxX3NwaV93cml0ZTsKLQkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzMxX3NwaV9kcml2ZXIpOwotCQlpZiAocmV0ICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBzcGkgZHJpdmVyIik7Ci0JfQotI2VuZGlmCi0KLQlpZiAocmV0ICE9IDApIHsKLQkJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0JCWtmcmVlKGNvZGVjKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gd204NzMxX3JlZ2lzdGVyKHdtODczMSk7CiB9CiAKLS8qIHBvd2VyIGRvd24gY2hpcCAqLwotc3RhdGljIGludCB3bTg3MzFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3MzFfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IHNwaS0+ZGV2LmRyaXZlcl9kYXRhOwogCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXdtODczMV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Ci0KLQlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWkyY191bnJlZ2lzdGVyX2RldmljZShjb2RlYy0+Y29udHJvbF9kYXRhKTsKLQlpMmNfZGVsX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODczMV9zcGlfZHJpdmVyKTsKLSNlbmRpZgotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKKwl3bTg3MzFfdW5yZWdpc3Rlcih3bTg3MzEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODczMSA9IHsKLQkucHJvYmUgPSAJd204NzMxX3Byb2JlLAotCS5yZW1vdmUgPSAJd204NzMxX3JlbW92ZSwKLQkuc3VzcGVuZCA9IAl3bTg3MzFfc3VzcGVuZCwKLQkucmVzdW1lID0Jd204NzMxX3Jlc3VtZSwKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3MzFfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ3bTg3MzEiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gd204NzMxX3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODczMV9zcGlfcmVtb3ZlKSwKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODczMSk7CisjZW5kaWYgLyogQ09ORklHX1NQSV9NQVNURVIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODczMV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzE7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJd204NzMxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODczMV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODczMSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODczMS0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204NzMxKTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg3MzFfcmVnaXN0ZXIod204NzMxKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204NzMxX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODczMV91bnJlZ2lzdGVyKHdtODczMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3MzFfaTJjX2lkW10gPSB7CisJeyAid204NzMxIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3MzFfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODczMV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODczMSBJMkMgQ29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODczMV9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204NzMxX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODczMV9pMmNfaWQsCit9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IHdtODczMV9tb2Rpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg3MzFfZGFpKTsKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzMxX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg3MzEgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzMxX3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg3MzEgU1BJIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQod204NzMxX21vZGluaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd204NzMxX2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg3MzFfZGFpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODczMV9pMmNfZHJpdmVyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3MzFfc3BpX2RyaXZlcik7CisjZW5kaWYKIH0KIG1vZHVsZV9leGl0KHdtODczMV9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmgKaW5kZXggOTUxOTBlOS4uY2Q3YjgwNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MzEuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5oCkBAIC0zNCwxMiArMzQsNiBAQAogI2RlZmluZSBXTTg3MzFfU1lTQ0xLCTAKICNkZWZpbmUgV004NzMxX0RBSQkJMAogCi1zdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgewotCWludCAgICAgICAgICAgIHNwaTsKLQlpbnQgICAgICAgICAgICBpMmNfYnVzOwotCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOwotfTsKLQogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3MzFfZGFpOwogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODczMTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKaW5kZXggNTk5N2ZhNi4uYjY0NTA5YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCkBAIC0yMzEsMjEgKzIzMSw2IEBACiAKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTg3NTBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUwX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODc1MF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogREFQTSBDb250cm9scwogICovCkBAIC02MTksNyArNjA0LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODc1MF9wcml2ICp3bTg3NTAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBpZmFjZSA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX0lGQUNFKSAmIDB4MWYzOwogCXUxNiBzcmF0ZSA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX1NSQVRFKSAmIDB4MWMwOwpAQCAtNjk0LDYgKzY3OSwxMyBAQAogI2RlZmluZSBXTTg3NTBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUwX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1MF9wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTBfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1MF9zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1MF9zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg3NTBfZGFpID0gewogCS5uYW1lID0gIldNODc1MCIsCiAJLnBsYXliYWNrID0gewpAQCAtNzA4LDEyICs3MDAsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1MF9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1MF9wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUwX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUwX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHdtODc1MF9zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NzUwX2RhaSk7CiAKQEAgLTcyNyw3ICs3MTQsNyBAQAogc3RhdGljIGludCB3bTg3NTBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg3NTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNzM2LDcgKzcyMyw3IEBACiBzdGF0aWMgaW50IHdtODc1MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNzY5LDcgKzc1Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd204NzUwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWcsIHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg3NTAiOwpAQCAtODE2LDcgKzgwMyw4IEBACiAJcmVnID0gd204NzUwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTBfUklOVk9MKTsKIAl3bTg3NTBfd3JpdGUoY29kZWMsIFdNODc1MF9SSU5WT0wsIHJlZyB8IDB4MDEwMCk7CiAKLQl3bTg3NTBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzUwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODc1MF9zbmRfY29udHJvbHMpKTsKIAl3bTg3NTBfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTg1MCw3ICs4MzgsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC05MzEsNyArOTE5LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdtODc1MF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1MF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwpAQCAtMTAwMyw3ICs5OTEsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3NTA7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtMTA1Nyw3ICsxMDQ1LDcgQEAKIHN0YXRpYyBpbnQgd204NzUwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODc1MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwppbmRleCA3NzYyMGFiLi5hNmU4ZjNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKQEAgLTUxLDggKzUxLDYgQEAKIAogI2luY2x1ZGUgIndtODc1My5oIgogCi0jZGVmaW5lIFdNODc1M19WRVJTSU9OICIwLjE2IgotCiBzdGF0aWMgaW50IGNhcHNfY2hhcmdlID0gMjAwMDsKIG1vZHVsZV9wYXJhbShjYXBzX2NoYXJnZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2Fwc19jaGFyZ2UsICJXTTg3NTMgY2FwIGNoYXJnZSB0aW1lIChtc2VjcykiKTsKQEAgLTYwLDEyICs1OCw2IEBACiBzdGF0aWMgdm9pZCB3bTg3NTNfc2V0X2RhaV9tb2RlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAl1bnNpZ25lZCBpbnQgbW9kZSk7CiAKLS8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwotc3RydWN0IHdtODc1M19wcml2IHsKLQl1bnNpZ25lZCBpbnQgc3lzY2xrOwotCXVuc2lnbmVkIGludCBwY21jbGs7Ci19OwotCiAvKgogICogd204NzUzIHJlZ2lzdGVyIGNhY2hlCiAgKiBXZSBjYW4ndCByZWFkIHRoZSBXTTg3NTMgcmVnaXN0ZXIgc3BhY2Ugd2hlbiB3ZQpAQCAtOTAsNiArODIsMTQgQEAKIAkweDAwMDAsIDB4MDAwMAogfTsKIAorLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204NzUzX3ByaXYgeworCXVuc2lnbmVkIGludCBzeXNjbGs7CisJdW5zaWduZWQgaW50IHBjbWNsazsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW0FSUkFZX1NJWkUod204NzUzX3JlZyldOworfTsKKwogLyoKICAqIHJlYWQgd204NzUzIHJlZ2lzdGVyIGNhY2hlCiAgKi8KQEAgLTk3LDcgKzk3LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPCAxIHx8IHJlZyA+IChBUlJBWV9TSVpFKHdtODc1M19yZWcpICsgMSkpCisJaWYgKHJlZyA8IDEgfHwgcmVnID49IChBUlJBWV9TSVpFKHdtODc1M19yZWcpICsgMSkpCiAJCXJldHVybiAtMTsKIAlyZXR1cm4gY2FjaGVbcmVnIC0gMV07CiB9CkBAIC0xMDksNyArMTA5LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaWYgKHJlZyA8IDEgfHwgcmVnID4gMHgzZikKKwlpZiAocmVnIDwgMSB8fCByZWcgPj0gKEFSUkFZX1NJWkUod204NzUzX3JlZykgKyAxKSkKIAkJcmV0dXJuOwogCWNhY2hlW3JlZyAtIDFdID0gdmFsdWU7CiB9CkBAIC0zMzksMjEgKzMzOSw2IEBACiBTT0NfRU5VTSgiUk9VVDIgUGhhc2UiLCB3bTg3NTNfZW51bVsyOF0pLAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODc1M19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204NzUzX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBfREFQTV8gQ29udHJvbHMKICAqLwpAQCAtOTI3LDcgKzkxMiw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1MTYgdm9pY2UgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19QQ00pICYgMHgwMWYzOwogCXUxNiBzcmF0ZSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1NSQVRFMSkgJiAweDAxN2Y7CkBAIC0xMTYxLDcgKzExNDYsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2IHNyYXRlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfU1JBVEUxKSAmIDB4MDFjMDsKIAl1MTYgaGlmaSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0hJRkkpICYgMHgwMWYzOwpAQCAtMTMxNiw2ICsxMzAxLDUxIEBACiAgKiAzLiBWb2ljZSBkaXNhYmxlZCAtIEhJRkkgb3ZlciBISUZJCiAgKiA0LiBWb2ljZSBkaXNhYmxlZCAtIEhJRkkgb3ZlciBISUZJLCB1c2VzIHZvaWNlIERBSSBMUkMgZm9yIGNhcHR1cmUKICAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlMSA9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX2kyc19od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUxaF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX3ZvaWNlX21vZGUxID0geworCS5od19wYXJhbXMJPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204NzUzX211dGUsCisJLnNldF9mbXQJPSB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTIgPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlMl9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc1M19kYWlfb3BzX2hpZmlfbW9kZTMJPSB7CisJLmh3X3BhcmFtcwk9IHdtODc1M19pMnNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg3NTNfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd204NzUzX3NldF9kYWlfcGxsLAorCS5zZXRfc3lzY2xrCT0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NzUzX2RhaV9vcHNfaGlmaV9tb2RlNAk9IHsKKwkuaHdfcGFyYW1zCT0gd204NzUzX2kyc19od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODc1M19tdXRlLAorCS5zZXRfZm10CT0gd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJLnNldF9zeXNjbGsJPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFpIHdtODc1M19hbGxfZGFpW10gPSB7CiAvKiBEQUkgSGlGaSBtb2RlIDEgKi8KIHsJLm5hbWUgPSAiV004NzUzIEhpRmkiLApAQCAtMTMzMiwxNCArMTM2Miw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFN9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlMWhfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX2hpZmlfbW9kZTEsCiB9LAogLyogREFJIFZvaWNlIG1vZGUgMSAqLwogewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLApAQCAtMTM1NiwxNCArMTM3OSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204NzUzX3BjbV9od19wYXJhbXMsCi0JCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKLQkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc192b2ljZV9tb2RlMSwKIH0sCiAvKiBEQUkgSGlGaSBtb2RlIDIgLSBkdW1teSAqLwogewkubmFtZSA9ICJXTTg3NTMgSGlGaSIsCkBAIC0xMzg0LDE0ICsxNDAwLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfcGNtX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlMl9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg3NTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204NzUzX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODc1M19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204NzUzX2RhaV9vcHNfdm9pY2VfbW9kZTIsCiB9LAogLyogREFJIEhpRmkgbW9kZSAzICovCiB7CS5uYW1lID0gIldNODc1MyBIaUZpIiwKQEAgLTE0MDgsMTQgKzE0MTcsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004NzUzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODc1M19pMnNfaHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204NzUzX211dGUsCi0JCS5zZXRfZm10ID0gd204NzUzX21vZGUzXzRfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKLQkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJndtODc1M19kYWlfb3BzX2hpZmlfbW9kZTMsCiB9LAogLyogREFJIFZvaWNlIG1vZGUgMyAtIGR1bW15ICovCiB7CS5uYW1lID0gIldNODc1MyBWb2ljZSIsCkBAIC0xNDM2LDE0ICsxNDM4LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTg3NTNfaTJzX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCi0JCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZ3bTg3NTNfZGFpX29wc19oaWZpX21vZGU0LAogfSwKIC8qIERBSSBWb2ljZSBtb2RlIDQgLSBkdW1teSAqLwogewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLApAQCAtMTQ2NiwzMCArMTQ2MSwzNSBAQAogCWlmIChtb2RlIDwgNCkgewogCQlpbnQgcGxheWJhY2tfYWN0aXZlLCBjYXB0dXJlX2FjdGl2ZSwgY29kZWNfYWN0aXZlLCBwb3Bfd2FpdDsKIAkJdm9pZCAqcHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKIAkJcGxheWJhY2tfYWN0aXZlID0gd204NzUzX2RhaVswXS5wbGF5YmFjay5hY3RpdmU7CiAJCWNhcHR1cmVfYWN0aXZlID0gd204NzUzX2RhaVswXS5jYXB0dXJlLmFjdGl2ZTsKIAkJY29kZWNfYWN0aXZlID0gd204NzUzX2RhaVswXS5hY3RpdmU7CiAJCXByaXZhdGVfZGF0YSA9IHdtODc1M19kYWlbMF0ucHJpdmF0ZV9kYXRhOwogCQlwb3Bfd2FpdCA9IHdtODc1M19kYWlbMF0ucG9wX3dhaXQ7CisJCWxpc3QgPSB3bTg3NTNfZGFpWzBdLmxpc3Q7CiAJCXdtODc1M19kYWlbMF0gPSB3bTg3NTNfYWxsX2RhaVttb2RlIDw8IDFdOwogCQl3bTg3NTNfZGFpWzBdLnBsYXliYWNrLmFjdGl2ZSA9IHBsYXliYWNrX2FjdGl2ZTsKIAkJd204NzUzX2RhaVswXS5jYXB0dXJlLmFjdGl2ZSA9IGNhcHR1cmVfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzBdLmFjdGl2ZSA9IGNvZGVjX2FjdGl2ZTsKIAkJd204NzUzX2RhaVswXS5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJCXdtODc1M19kYWlbMF0ucG9wX3dhaXQgPSBwb3Bfd2FpdDsKKwkJd204NzUzX2RhaVswXS5saXN0ID0gbGlzdDsKIAogCQlwbGF5YmFja19hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLnBsYXliYWNrLmFjdGl2ZTsKIAkJY2FwdHVyZV9hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLmNhcHR1cmUuYWN0aXZlOwogCQljb2RlY19hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLmFjdGl2ZTsKIAkJcHJpdmF0ZV9kYXRhID0gd204NzUzX2RhaVsxXS5wcml2YXRlX2RhdGE7CiAJCXBvcF93YWl0ID0gd204NzUzX2RhaVsxXS5wb3Bfd2FpdDsKKwkJbGlzdCA9IHdtODc1M19kYWlbMV0ubGlzdDsKIAkJd204NzUzX2RhaVsxXSA9IHdtODc1M19hbGxfZGFpWyhtb2RlIDw8IDEpICsgMV07CiAJCXdtODc1M19kYWlbMV0ucGxheWJhY2suYWN0aXZlID0gcGxheWJhY2tfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzFdLmNhcHR1cmUuYWN0aXZlID0gY2FwdHVyZV9hY3RpdmU7CiAJCXdtODc1M19kYWlbMV0uYWN0aXZlID0gY29kZWNfYWN0aXZlOwogCQl3bTg3NTNfZGFpWzFdLnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKIAkJd204NzUzX2RhaVsxXS5wb3Bfd2FpdCA9IHBvcF93YWl0OworCQl3bTg3NTNfZGFpWzFdLmxpc3QgPSBsaXN0OwogCX0KIAl3bTg3NTNfZGFpWzBdLmNvZGVjID0gY29kZWM7CiAJd204NzUzX2RhaVsxXS5jb2RlYyA9IGNvZGVjOwpAQCAtMTUwNSw3ICsxNTA1LDcgQEAKIHN0YXRpYyBpbnQgd204NzUzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogd2Ugb25seSBuZWVkIHRvIHN1c3BlbmQgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwogCWlmICghY29kZWMtPmNhcmQpCkBAIC0xNTE4LDcgKzE1MTgsNyBAQAogc3RhdGljIGludCB3bTg3NTNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTE1MzEsNiArMTUzMSwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19yZWcpOyBpKyspIHsKIAkJaWYgKGkgKyAxID09IFdNODc1M19SRVNFVCkKIAkJCWNvbnRpbnVlOworCisJCS8qIE5vIHBvaW50IGluIHdyaXRpbmcgaGFyZHdhcmUgZGVmYXVsdCB2YWx1ZXMgYmFjayAqLworCQlpZiAoY2FjaGVbaV0gPT0gd204NzUzX3JlZ1tpXSkKKwkJCWNvbnRpbnVlOworCiAJCWRhdGFbMF0gPSAoKGkgKyAxKSA8PCAxKSB8ICgoY2FjaGVbaV0gPj4gOCkgJiAweDAwMDEpOwogCQlkYXRhWzFdID0gY2FjaGVbaV0gJiAweDAwZmY7CiAJCWNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKQEAgLTE1NDksMzIgKzE1NTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGluaXRpYWxpc2UgdGhlIFdNODc1MyBkcml2ZXIKLSAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCi0gKi8KLXN0YXRpYyBpbnQgd204NzUzX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODc1M19jb2RlYzsKKworc3RhdGljIGludCB3bTg3NTNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZWcsIHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CiAKLQljb2RlYy0+bmFtZSA9ICJXTTg3NTMiOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204NzUzX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHdtODc1M193cml0ZTsKLQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg3NTNfc2V0X2JpYXNfbGV2ZWw7Ci0JY29kZWMtPmRhaSA9IHdtODc1M19kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAyOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NzUzX3JlZyk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod204NzUzX3JlZywgc2l6ZW9mKHdtODc1M19yZWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdtODc1M19jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJXTTg3NTMgY29kZWMgbm90IHlldCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODc1M19jb2RlYzsKKwljb2RlYyA9IHdtODc1M19jb2RlYzsKIAogCXdtODc1M19zZXRfZGFpX21vZGUoY29kZWMsIDApOwogCi0Jd204NzUzX3Jlc2V0KGNvZGVjKTsKLQogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xNTgyLDM1ICsxNTc5LDggQEAKIAkJZ290byBwY21fZXJyOwogCX0KIAotCS8qIGNoYXJnZSBvdXRwdXQgY2FwcyAqLwotCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1BSRVBBUkUpOwotCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX1NUQU5EQlk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrLAotCQltc2Vjc190b19qaWZmaWVzKGNhcHNfY2hhcmdlKSk7Ci0KLQkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICovCi0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTERBQyk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTERBQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SREFDKTsKLQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SREFDLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xBREMpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xBREMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkFEQyk7Ci0Jd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkFEQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMVYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMVYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMlYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQyViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMlYpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQyViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MSU5WT0wpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xJTlZPTCwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SSU5WT0wpOwotCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKLQotCXdtODc1M19hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTNfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODc1M19zbmRfY29udHJvbHMpKTsKIAl3bTg3NTNfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE2MTgsMjE1ICsxNTg4LDEzIEBACiAJCWdvdG8gY2FyZF9lcnI7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogY2FyZF9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCiBwY21fZXJyOgotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIElmIHRoZSBpMmMgbGF5ZXIgd2VyZW4ndCBzbyBicm9rZW4sIHdlIGNvdWxkIHBhc3MgdGhpcyBraW5kIG9mIGRhdGEKLSAgIGFyb3VuZCAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqd204NzUzX3NvY2RldjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQotLyoKLSAqIFdNODc1MyAyIHdpcmUgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IEdQSU81Ci0gKiBzdGF0ZSBkdXJpbmcgcG93ZXJ1cC4KLSAqICAgIGxvdyAgPSAweDFhCi0gKiAgICBoaWdoID0gMHgxYgotICovCi0KLXN0YXRpYyBpbnQgd204NzUzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1M19zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKLQlpbnQgcmV0OwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7Ci0KLQlyZXQgPSB3bTg3NTNfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODc1M1xuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdtODc1M19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Ja2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3NTNfaTJjX2lkW10gPSB7Ci0JeyAid204NzUzIiwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3NTNfaTJjX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODc1M19pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIldNODc1MyBJMkMgQ29kZWMiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZSA9ICAgIHdtODc1M19pMmNfcHJvYmUsCi0JLnJlbW92ZSA9ICAgd204NzUzX2kyY19yZW1vdmUsCi0JLmlkX3RhYmxlID0gd204NzUzX2kyY19pZCwKLX07Ci0KLXN0YXRpYyBpbnQgd204NzUzX2FkZF9pMmNfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSAqc2V0dXApCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSBzZXR1cC0+aTJjX2FkZHJlc3M7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJ3bTg3NTMiLCBJMkNfTkFNRV9TSVpFKTsKLQotCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoc2V0dXAtPmkyY19idXMpOwotCWlmICghYWRhcHRlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgJWRcbiIsCi0JCQlzZXR1cC0+aTJjX2J1cyk7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2RyaXZlcjoKLQlpMmNfZGVsX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotc3RhdGljIGludCBfX2RldmluaXQgd204NzUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzUzX3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwotCWludCByZXQ7Ci0KLQljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwotCi0JcmV0ID0gd204NzUzX2luaXQoc29jZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3NTNcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgd204NzUzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODc1M19zcGlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIndtODc1MyIsCi0JCS5idXMJPSAmc3BpX2J1c190eXBlLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQkJPSB3bTg3NTNfc3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzUzX3NwaV9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCB3bTg3NTNfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1syXTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzBdOwotCW1zZ1sxXSA9IGRhdGFbMV07Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOwotCi0JdC50eF9idWYgPSAmbXNnWzBdOwotCXQubGVuID0gbGVuOwotCi0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlzcGlfc3luYyhzcGksICZtKTsKLQotCXJldHVybiBsZW47Ci19Ci0jZW5kaWYKLQotCi1zdGF0aWMgaW50IHdtODc1M19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHdtODc1M19zZXR1cF9kYXRhICpzZXR1cDsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0Jc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTM7Ci0JaW50IHJldCA9IDA7Ci0KLQlwcl9pbmZvKCJXTTg3NTMgQXVkaW8gQ29kZWMgJXMiLCBXTTg3NTNfVkVSU0lPTik7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd204NzUzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc1M19wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdtODc1MyA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODc1MzsKLQlzb2NkZXYtPmNvZGVjID0gY29kZWM7Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKLQl3bTg3NTNfc29jZGV2ID0gc29jZGV2OwotCUlOSVRfREVMQVlFRF9XT1JLKCZjb2RlYy0+ZGVsYXllZF93b3JrLCB3bTg3NTNfd29yayk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7Ci0JCXJldCA9IHdtODc1M19hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLQlpZiAoc2V0dXAtPnNwaSkgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3NTNfc3BpX3dyaXRlOwotCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChyZXQgIT0gMCkgewotCQlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKLQkJa2ZyZWUoY29kZWMpOwotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODUzLDIyICsxNjIxLDkgQEAKIHN0YXRpYyBpbnQgd204NzUzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCXJ1bl9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmspOwogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwotCWkyY19kZWxfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOwotI2VuZGlmCi0Ja2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0Ja2ZyZWUoY29kZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODgxLDE1ICsxNjM2LDI0MCBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NzUzKTsKIAorc3RhdGljIGludCB3bTg3NTNfcmVnaXN0ZXIoc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204NzUzLT5jb2RlYzsKKwl1MTYgcmVnOworCisJaWYgKHdtODc1M19jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJNdWx0aXBsZSBXTTg3NTMgZGV2aWNlcyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5uYW1lID0gIldNODc1MyI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gd204NzUzX3dyaXRlOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX1NUQU5EQlk7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzUzX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSB3bTg3NTNfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMjsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODc1My0+cmVnX2NhY2hlKTsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODc1My0+cmVnX2NhY2hlOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3NTM7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204NzUzX3JlZywgc2l6ZW9mKGNvZGVjLT5yZWdfY2FjaGUpKTsKKwlJTklUX0RFTEFZRURfV09SSygmY29kZWMtPmRlbGF5ZWRfd29yaywgd204NzUzX3dvcmspOworCisJcmV0ID0gd204NzUzX3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBjaGFyZ2Ugb3V0cHV0IGNhcHMgKi8KKwl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19QUkVQQVJFKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmssCisJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKGNhcHNfY2hhcmdlKSk7CisKKwkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICovCisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTERBQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTERBQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SREFDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SREFDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xBREMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xBREMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUkFEQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUkFEQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMVYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQxViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMVYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MT1VUMlYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xPVVQyViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19ST1VUMlYpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JPVVQyViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MSU5WT0wpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0xJTlZPTCwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SSU5WT0wpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKKworCXdtODc1M19jb2RlYyA9IGNvZGVjOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX2RhaSk7IGkrKykKKwkJd204NzUzX2RhaVtpXS5kZXYgPSBjb2RlYy0+ZGV2OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcygmd204NzUzX2RhaVswXSwgQVJSQVlfU0laRSh3bTg3NTNfZGFpKSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUlzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9jb2RlYzoKKwlydW5fZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCWtmcmVlKHdtODc1Myk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204NzUzX3VucmVnaXN0ZXIoc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTMpCit7CisJd204NzUzX3NldF9iaWFzX2xldmVsKCZ3bTg3NTMtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlydW5fZGVsYXllZF93b3JrKCZ3bTg3NTMtPmNvZGVjLmRlbGF5ZWRfd29yayk7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJndtODc1M19kYWlbMF0sIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204NzUzLT5jb2RlYyk7CisJa2ZyZWUod204NzUzKTsKKwl3bTg3NTNfY29kZWMgPSBOVUxMOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCitzdGF0aWMgaW50IHdtODc1M19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzOworCisJd204NzUzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc1M19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODc1MyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworICAgICAgICBjb2RlYyA9ICZ3bTg3NTMtPmNvZGVjOworICAgICAgICBjb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisgICAgICAgIGNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisgICAgICAgIGkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODc1Myk7CisKKyAgICAgICAgY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg3NTNfcmVnaXN0ZXIod204NzUzKTsKK30KKworc3RhdGljIGludCB3bTg3NTNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworICAgICAgICBzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworICAgICAgICB3bTg3NTNfdW5yZWdpc3Rlcih3bTg3NTMpOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODc1M19pMmNfaWRbXSA9IHsKKwl7ICJ3bTg3NTMiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODc1M19pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NzUzX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204NzUzIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg3NTNfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIHdtODc1M19pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHdtODc1M19pMmNfaWQsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCB3bTg3NTNfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1syXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzBdOworCW1zZ1sxXSA9IGRhdGFbMV07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODc1M19zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdtODc1M19wcml2ICp3bTg3NTM7CisKKwl3bTg3NTMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzUzX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NzUzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204NzUzLT5jb2RlYzsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODc1M19zcGlfd3JpdGU7CisJY29kZWMtPmRldiA9ICZzcGktPmRldjsKKworCXNwaS0+ZGV2LmRyaXZlcl9kYXRhID0gd204NzUzOworCisJcmV0dXJuIHdtODc1M19yZWdpc3Rlcih3bTg3NTMpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3NTNfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gc3BpLT5kZXYuZHJpdmVyX2RhdGE7CisJd204NzUzX3VucmVnaXN0ZXIod204NzUzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODc1M19zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIndtODc1MyIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTg3NTNfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzUzX3NwaV9yZW1vdmUpLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCB3bTg3NTNfbW9kaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMod204NzUzX2RhaSwgQVJSQVlfU0laRSh3bTg3NTNfZGFpKSk7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODc1MyBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzUzIFNQSSBkcml2ZXI6ICVkXG4iLCByZXQpOworI2VuZGlmCisJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdCh3bTg3NTNfbW9kaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3bTg3NTNfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODc1M19kYWksIEFSUkFZX1NJWkUod204NzUzX2RhaSkpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODc1M19zcGlfZHJpdmVyKTsKKyNlbmRpZgogfQogbW9kdWxlX2V4aXQod204NzUzX2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaAppbmRleCBmNTU3MDRjLi41N2IyYmEyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmgKQEAgLTc3LDEyICs3Nyw2IEBACiAjZGVmaW5lIFdNODc1M19CSUFTQ1RMCQkweDNkCiAjZGVmaW5lIFdNODc1M19BRENUTDIJCTB4M2YKIAotc3RydWN0IHdtODc1M19zZXR1cF9kYXRhIHsKLQlpbnQgc3BpOwotCWludCBpMmNfYnVzOwotCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOwotfTsKLQogI2RlZmluZSBXTTg3NTNfUExMMQkJCTAKICNkZWZpbmUgV004NzUzX1BMTDIJCQkxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCmluZGV4IDY3NjdkZTEuLjQ2YzVlYTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwpAQCAtNTE3LDIyICs1MTcsNiBAQAogCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd204OTAwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkwMF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJICBzbmRfc29jX2NuZXcoJndtODkwMF9zbmRfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDBfZGFwbV9sb3V0cHV0Ml9jb250cm9sID0KIFNPQ19EQVBNX1NJTkdMRSgiTElORU9VVDJMIFN3aXRjaCIsIFdNODkwMF9SRUdfUE9XRVIzLCA2LCAxLCAwKTsKIApAQCAtNzM2LDcgKzcyMCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiByZWc7CiAKIAlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzEpICYgfjB4NjA7CkBAIC0xMTA0LDYgKzEwODgsMTQgQEAKIAkoU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgfCBcCiAJIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5MDBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTAwX2h3X3BhcmFtcywKKwkuc2V0X2Nsa2Rpdgk9IHdtODkwMF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODkwMF9zZXRfZGFpX3BsbCwKKwkuc2V0X2ZtdAk9IHdtODkwMF9zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlCT0gd204OTAwX2RpZ2l0YWxfbXV0ZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5MDBfZGFpID0gewogCS5uYW1lID0gIldNODkwMCBIaUZpIiwKIAkucGxheWJhY2sgPSB7CkBAIC0xMTIwLDEzICsxMTEyLDcgQEAKIAkJLnJhdGVzID0gV004OTAwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODkwMF9QQ01fRk9STUFUUywKIAkgfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204OTAwX2h3X3BhcmFtcywKLQkJIC5zZXRfY2xrZGl2ID0gd204OTAwX3NldF9kYWlfY2xrZGl2LAotCQkgLnNldF9wbGwgPSB3bTg5MDBfc2V0X2RhaV9wbGwsCi0JCSAuc2V0X2ZtdCA9IHdtODkwMF9zZXRfZGFpX2ZtdCwKLQkJIC5kaWdpdGFsX211dGUgPSB3bTg5MDBfZGlnaXRhbF9tdXRlLAotCSB9LAorCS5vcHMgPSAmd204OTAwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTAwX2RhaSk7CiAKQEAgLTEyMjYsNyArMTIxMiw3IEBACiBzdGF0aWMgaW50IHdtODkwMF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAwX3ByaXYgKndtODkwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IGZsbF9vdXQgPSB3bTg5MDAtPmZsbF9vdXQ7CiAJaW50IGZsbF9pbiAgPSB3bTg5MDAtPmZsbF9pbjsKQEAgLTEyNTAsNyArMTIzNiw3IEBACiBzdGF0aWMgaW50IHdtODkwMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAwX3ByaXYgKndtODkwMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTE2ICpjYWNoZTsKIAlpbnQgaSwgcmV0OwpAQCAtMTI4OCw4ICsxMjc0LDggQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg5MDBfY29kZWM7CiAKLXN0YXRpYyBpbnQgd204OTAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODkwMF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHdtODkwMF9wcml2ICp3bTg5MDA7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwpAQCAtMTM4OCw3ICsxMzc0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHdtODkwMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5MDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODkwMF9kYWkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyh3bTg5MDBfY29kZWMpOwpAQCAtMTQxNCw3ICsxNDAwLDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSB3bTg5MDBfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSB3bTg5MDBfaTJjX3JlbW92ZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod204OTAwX2kyY19yZW1vdmUpLAogCS5pZF90YWJsZSA9IHdtODkwMF9pMmNfaWQsCiB9OwogCkBAIC0xNDMwLDcgKzE0MTYsNyBAQAogCX0KIAogCWNvZGVjID0gd204OTAwX2NvZGVjOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAKIAkvKiBSZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKQEAgLTE0MzksNyArMTQyNSw4IEBACiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKLQl3bTg5MDBfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTAwX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODkwMF9zbmRfY29udHJvbHMpKTsKIAl3bTg5MDBfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCmluZGV4IGJkZTc0NTQuLjhjZjU3MWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwpAQCAtNzQ0LDIxICs3NDQsNiBAQAogCQkgMCwgNjMsIDAsIG91dF90bHYpLAogfTsKIAotc3RhdGljIGludCB3bTg5MDNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTAzX3NuZF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQkgIHNuZF9zb2NfY25ldygmd204OTAzX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbnB1dF9tb2RlX211eCA9CiAJU09DX0RBUE1fRU5VTSgiTGVmdCBJbnB1dCBNb2RlIE11eCIsIGxpbnB1dF9tb2RlX2VudW0pOwogCkBAIC0xMjc2LDcgKzEyNjEsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAzX3ByaXYgKndtODkwMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqbWFzdGVyX3J1bnRpbWU7CkBAIC0xMzE4LDcgKzEzMDMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTAzX3ByaXYgKndtODkwMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKQEAgLTEzMzgsNyArMTMyMyw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlpbnQgZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwpAQCAtMTUxMiw2ICsxNDk3LDE1IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5MDNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHdtODkwM19zdGFydHVwLAorCS5zaHV0ZG93bgk9IHdtODkwM19zaHV0ZG93biwKKwkuaHdfcGFyYW1zCT0gd204OTAzX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTAzX2RpZ2l0YWxfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODkwM19zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHdtODkwM19zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5MDNfZGFpID0gewogCS5uYW1lID0gIldNODkwMyIsCiAJLnBsYXliYWNrID0gewpAQCAtMTUyOCwyMSArMTUyMiwxNCBAQAogCQkgLnJhdGVzID0gV004OTAzX0NBUFRVUkVfUkFURVMsCiAJCSAuZm9ybWF0cyA9IFdNODkwM19GT1JNQVRTLAogCSB9LAotCS5vcHMgPSB7Ci0JCSAuc3RhcnR1cCA9IHdtODkwM19zdGFydHVwLAotCQkgLnNodXRkb3duID0gd204OTAzX3NodXRkb3duLAotCQkgLmh3X3BhcmFtcyA9IHdtODkwM19od19wYXJhbXMsCi0JCSAuZGlnaXRhbF9tdXRlID0gd204OTAzX2RpZ2l0YWxfbXV0ZSwKLQkJIC5zZXRfZm10ID0gd204OTAzX3NldF9kYWlfZm10LAotCQkgLnNldF9zeXNjbGsgPSB3bTg5MDNfc2V0X2RhaV9zeXNjbGsKLQl9CisJLm9wcyA9ICZ3bTg5MDNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg5MDNfZGFpKTsKIAogc3RhdGljIGludCB3bTg5MDNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg5MDNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCkBAIC0xNTUyLDcgKzE1MzksNyBAQAogc3RhdGljIGludCB3bTg5MDNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IGk7CiAJdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtMTU3Nyw4ICsxNTY0LDggQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg5MDNfY29kZWM7CiAKLXN0YXRpYyBpbnQgd204OTAzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODkwM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDM7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwpAQCAtMTY4NCw3ICsxNjcxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHdtODkwM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5MDNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0xNzE0LDcgKzE3MDEsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSAgICA9IHdtODkwM19pMmNfcHJvYmUsCi0JLnJlbW92ZSAgID0gd204OTAzX2kyY19yZW1vdmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod204OTAzX2kyY19yZW1vdmUpLAogCS5pZF90YWJsZSA9IHdtODkwM19pMmNfaWQsCiB9OwogCkBAIC0xNzI4LDcgKzE3MTUsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlzb2NkZXYtPmNvZGVjID0gd204OTAzX2NvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg5MDNfY29kZWM7CiAKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKQEAgLTE3MzcsOCArMTcyNCw5IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCXdtODkwM19hZGRfY29udHJvbHMoc29jZGV2LT5jb2RlYyk7Ci0Jd204OTAzX2FkZF93aWRnZXRzKHNvY2Rldi0+Y29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKHNvY2Rldi0+Y2FyZC0+Y29kZWMsIHdtODkwM19zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5MDNfc25kX2NvbnRyb2xzKSk7CisJd204OTAzX2FkZF93aWRnZXRzKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOwogCiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTc1OSw3ICsxNzQ3LDcgQEAKIHN0YXRpYyBpbnQgd204OTAzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCiAJCXdtODkwM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYwppbmRleCA4OGVhZDdmLi4wMzJkY2EyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKQEAgLTE5NSwyMSArMTk1LDYgQEAKIAlTT0NfRE9VQkxFX1IoIk1pYyBCb29zdCIsIFdNODk3MV9MQURDSU4sIFdNODk3MV9SQURDSU4sIDQsIDMsIDApLAogfTsKIAotLyogYWRkIG5vbi1EQVBNIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODk3MV9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NzFfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204OTcxX3NuZF9jb250cm9sc1tpXSwKLQkJCQkJICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogREFQTSBDb250cm9scwogICovCkBAIC01NDYsNyArNTMxLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHdtODk3MV9wcml2ICp3bTg5NzEgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXUxNiBpZmFjZSA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX0lGQUNFKSAmIDB4MWYzOwogCXUxNiBzcmF0ZSA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX1NSQVRFKSAmIDB4MWMwOwpAQCAtNjE5LDYgKzYwNCwxMyBAQAogI2RlZmluZSBXTTg5NzFfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTcxX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODk3MV9wY21faHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg5NzFfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODk3MV9zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHdtODk3MV9zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5NzFfZGFpID0gewogCS5uYW1lID0gIldNODk3MSIsCiAJLnBsYXliYWNrID0gewpAQCAtNjMzLDEyICs2MjUsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV004OTcxX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODk3MV9GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHdtODk3MV9wY21faHdfcGFyYW1zLAotCQkuZGlnaXRhbF9tdXRlID0gd204OTcxX211dGUsCi0JCS5zZXRfZm10ID0gd204OTcxX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHdtODk3MV9zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204OTcxX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTcxX2RhaSk7CiAKQEAgLTY1Miw3ICs2MzksNyBAQAogc3RhdGljIGludCB3bTg5NzFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAl3bTg5NzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNjYxLDcgKzY0OCw3IEBACiBzdGF0aWMgaW50IHdtODk3MV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwpAQCAtNjkyLDcgKzY3OSw3IEBACiAKIHN0YXRpYyBpbnQgd204OTcxX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWcsIHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg5NzEiOwpAQCAtNzQ1LDcgKzczMiw4IEBACiAJcmVnID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfUklOVk9MKTsKIAl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9SSU5WT0wsIHJlZyB8IDB4MDEwMCk7CiAKLQl3bTg5NzFfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTcxX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODk3MV9zbmRfY29udHJvbHMpKTsKIAl3bTg5NzFfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTc3Miw3ICs3NjAsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODk3MV9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CkBAIC04NzMsNyArODYxLDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTcxOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTkwOCw3ICs4OTYsNyBAQAogc3RhdGljIGludCB3bTg5NzFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKIAkJd204OTcxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCmluZGV4IGE1NzMxZmEuLmM1MThjM2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJdW5zaWduZWQgaW50IHJlZykKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID4gKEFSUkFZX1NJWkUod204OTkwX3JlZykpIC0gMSk7CisJQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODk5MF9yZWcpKTsKIAlyZXR1cm4gY2FjaGVbcmVnXTsKIH0KIApAQCAtMTI4LDcgKzEyOCw3IEBACiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKIAkvKiBSZXNldCByZWdpc3RlciBhbmQgcmVzZXJ2ZWQgcmVnaXN0ZXJzIGFyZSB1bmNhY2hlZCAqLwotCWlmIChyZWcgPT0gMCB8fCByZWcgPiBBUlJBWV9TSVpFKHdtODk5MF9yZWcpIC0gMSkKKwlpZiAocmVnID09IDAgfHwgcmVnID49IEFSUkFZX1NJWkUod204OTkwX3JlZykpCiAJCXJldHVybjsKIAogCWNhY2hlW3JlZ10gPSB2YWx1ZTsKQEAgLTQxOCwyMSArNDE4LDYgQEAKIAogfTsKIAotLyogYWRkIG5vbiBkYXBtIGNvbnRyb2xzICovCi1zdGF0aWMgaW50IHdtODk5MF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTBfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmd204OTkwX3NuZF9jb250cm9sc1tpXSwgY29kZWMsCi0JCQkJCU5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIF9EQVBNXyBDb250cm9scwogICovCkBAIC0xMTc4LDcgKzExNjMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAl1MTYgYXVkaW8xID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5OTBfQVVESU9fSU5URVJGQUNFXzEpOwogCiAJYXVkaW8xICY9IH5XTTg5OTBfQUlGX1dMX01BU0s7CkBAIC0xMzQ3LDYgKzEzMzIsMTUgQEAKICAqIDEuIEFEQy9EQUMgb24gUHJpbWFyeSBJbnRlcmZhY2UKICAqIDIuIEFEQyBvbiBQcmltYXJ5IEludGVyZmFjZS9EQUMgb24gc2Vjb25kYXJ5CiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk5MF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSB3bTg5OTBfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg5OTBfbXV0ZSwKKwkuc2V0X2ZtdAk9IHdtODk5MF9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHdtODk5MF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHdtODk5MF9zZXRfZGFpX3BsbCwKKwkuc2V0X3N5c2Nsawk9IHdtODk5MF9zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5OTBfZGFpID0gewogLyogQURDL0RBQyBvbiBwcmltYXJ5ICovCiAJLm5hbWUgPSAiV004OTkwIEFEQy9EQUMgUHJpbWFyeSIsCkBAIC0xMzYzLDIxICsxMzU3LDE0IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTg5OTBfUkFURVMsCiAJCS5mb3JtYXRzID0gV004OTkwX0ZPUk1BVFMsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gd204OTkwX2h3X3BhcmFtcywKLQkJLmRpZ2l0YWxfbXV0ZSA9IHdtODk5MF9tdXRlLAotCQkuc2V0X2ZtdCA9IHdtODk5MF9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSB3bTg5OTBfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd204OTkwX3NldF9kYWlfcGxsLAotCQkuc2V0X3N5c2NsayA9IHdtODk5MF9zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmd204OTkwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204OTkwX2RhaSk7CiAKIHN0YXRpYyBpbnQgd204OTkwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogd2Ugb25seSBuZWVkIHRvIHN1c3BlbmQgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwogCWlmICghY29kZWMtPmNhcmQpCkBAIC0xMzkwLDcgKzEzNzcsNyBAQAogc3RhdGljIGludCB3bTg5OTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IGk7CiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTE0MTgsNyArMTQwNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd204OTkwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiByZWc7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE0NjEsNyArMTQ0OCw4IEBACiAJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfTEVGVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKIAl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9SSUdIVF9PVVRQVVRfVk9MVU1FLCAweDUwIHwgKDE8PDgpKTsKIAotCXdtODk5MF9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5OTBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204OTkwX3NuZF9jb250cm9scykpOwogCXdtODk5MF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTQ5NSw3ICsxNDgzLDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg5OTBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0OwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwpAQCAtMTU5NCw3ICsxNTgyLDcgQEAKIAl9CiAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTkwOwotCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKQEAgLTE2MjAsNyArMTYwOCw3IEBACiBzdGF0aWMgaW50IHdtODk5MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQl3bTg5OTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2NTgxNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKQEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiB3bTk3MDUuYyAgLS0gIEFMU0EgU29jIFdNOTcwNSBjb2RlYyBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IDIwMDggSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBWZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlIG9ubHkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgIndtOTcwNS5oIgorCisvKgorICogV005NzA1IHJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBjb25zdCB1MTYgd205NzA1X3JlZ1tdID0geworCTB4NjE1MCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgLyogMHgwICAqLworCTB4MDAwMCwgMHg4MDAwLCAweDgwMDgsIDB4ODAwOCwgLyogMHg4ICAqLworCTB4ODgwOCwgMHg4ODA4LCAweDg4MDgsIDB4ODgwOCwgLyogMHgxMCAqLworCTB4ODgwOCwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwgLyogMHgxOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwZiwgLyogMHgyMCAqLworCTB4MDYwNSwgMHgwMDAwLCAweGJiODAsIDB4MDAwMCwgLyogMHgyOCAqLworCTB4MDAwMCwgMHhiYjgwLCAweDAwMDAsIDB4MDAwMCwgLyogMHgzMCAqLworCTB4MDAwMCwgMHgyMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHgzOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg0MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg0OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg1MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg1OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg2MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgLyogMHg2OCAqLworCTB4MDAwMCwgMHgwODA4LCAweDAwMDAsIDB4MDAwNiwgLyogMHg3MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDU3NGQsIDB4NGMwNSwgLyogMHg3OCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9zbmRfYWM5N19jb250cm9sc1tdID0geworCVNPQ19ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUiwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01BU1RFUiwgMTUsIDEsIDEpLAorCVNPQ19ET1VCTEUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0hFQURQSE9ORSwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X0hFQURQSE9ORSwgMTUsIDEsIDEpLAorCVNPQ19ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDTSwgOCwgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X1BDTSwgMTUsIDEsIDEpLAorCVNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfTU9OTywgMCwgMzEsIDEpLAorCVNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgMTUsIDEsIDEpLAorCVNPQ19TSU5HTEUoIlBDQmVlcCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDX0JFRVAsIDEsIDE1LCAxKSwKKwlTT0NfU0lOR0xFKCJQaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BIT05FLCAwLCAzMSwgMSksCisJU09DX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0xJTkUsIDgsIDAsIDMxLCAxKSwKKwlTT0NfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0NELCA4LCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUlDLCAwLCAzMSwgMSksCisJU09DX1NJTkdMRSgiTWljIDIwZEIgQm9vc3QgU3dpdGNoIiwgQUM5N19NSUMsIDYsIDEsIDApLAorCVNPQ19ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwgQUM5N19SRUNfR0FJTiwgOCwgMCwgMTUsIDApLAorCVNPQ19TSU5HTEUoIkNhcHR1cmUgU3dpdGNoIiwgQUM5N19SRUNfR0FJTiwgMTUsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKndtOTcwNV9taWNbXSA9IHsiTWljIDEiLCAiTWljIDIifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTk3MDVfcmVjX3NlbFtdID0geyJNaWMiLCAiQ0QiLCAiTkMiLCAiTkMiLAorCSJMaW5lIiwgIlN0ZXJlbyBNaXgiLCAiTW9ubyBNaXgiLCAiUGhvbmUifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTk3MDVfZW51bV9taWMgPQorCVNPQ19FTlVNX1NJTkdMRShBQzk3X0dFTkVSQUxfUFVSUE9TRSwgOCwgMiwgd205NzA1X21pYyk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtOTcwNV9lbnVtX3JlY19sID0KKwlTT0NfRU5VTV9TSU5HTEUoQUM5N19SRUNfU0VMLCA4LCA4LCB3bTk3MDVfcmVjX3NlbCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtOTcwNV9lbnVtX3JlY19yID0KKwlTT0NfRU5VTV9TSU5HTEUoQUM5N19SRUNfU0VMLCAwLCA4LCB3bTk3MDVfcmVjX3NlbCk7CisKKy8qIEhlYWRwaG9uZSBNaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9ocF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiUENCZWVwIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfUENfQkVFUCwgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19DRCwgMTUsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUlDLCAxNSwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJQaG9uZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X1BIT05FLCAxNSwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTElORSwgMTUsIDEsIDEpLAorfTsKKworLyogTWljIHNvdXJjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcwNV9taWNfc3JjX2NvbnRyb2xzID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtOTcwNV9lbnVtX21pYyk7CisKKy8qIENhcHR1cmUgc291cmNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzA1X2NhcHR1cmVfc2VsZWN0bF9jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTk3MDVfZW51bV9yZWNfbCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzA1X2NhcHR1cmVfc2VsZWN0cl9jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTk3MDVfZW51bV9yZWNfcik7CisKKy8qIERBUE0gd2lkZ2V0cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtOTcwNV9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fTVVYKCJNaWMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmd205NzA1X21pY19zcmNfY29udHJvbHMpLAorCVNORF9TT0NfREFQTV9NVVgoIkxlZnQgQ2FwdHVyZSBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ3bTk3MDVfY2FwdHVyZV9zZWxlY3RsX2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBDYXB0dXJlIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJndtOTcwNV9jYXB0dXJlX3NlbGVjdHJfY29udHJvbHMpLAorCVNORF9TT0NfREFQTV9EQUMoIkxlZnQgREFDIiwgIkxlZnQgSGlGaSBQbGF5YmFjayIsCisJCVNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiUmlnaHQgREFDIiwgIlJpZ2h0IEhpRmkgUGxheWJhY2siLAorCQlTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVEwoIkhQIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmd205NzA1X2hwX21peGVyX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKHdtOTcwNV9ocF9taXhlcl9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTW9ubyBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiTGVmdCBBREMiLCAiTGVmdCBIaUZpIENhcHR1cmUiLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9BREMoIlJpZ2h0IEFEQyIsICJSaWdodCBIaUZpIENhcHR1cmUiLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkhlYWRwaG9uZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlNwZWFrZXIgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJMaW5lIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTGluZSBvdXQgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNb25vIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUGhvbmUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNaWMgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJQQ0JFRVAgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJDRCBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkFEQyBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUTCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUUiIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OT09VVCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUEhPTkUiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVJTkwiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVJTlIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkNESU5MIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJDRElOUiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUENCRUVQIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMxIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMyIiksCit9OworCisvKiBBdWRpbyBtYXAKKyAqIFdNOTcwNSBoYXMgbm8gc3dpdGNoZXMgdG8gZGlzYWJsZSB0aGUgcm91dGUgZnJvbSB0aGUgaW5wdXRzIHRvIHRoZSBIUCBtaXhlcgorICogc28gaW4gb3JkZXIgdG8gcHJldmVudCBhY3RpdmUgaW5wdXRzIGZyb20gZm9yY2luZyB0aGUgYXVkaW8gb3V0cHV0cyB0byBiZQorICogY29uc3RhbnRseSBlbmFibGVkLCB3ZSB1c2UgdGhlIG11dGVzIG9uIHRob3NlIGlucHV0cyB0byBzaW11bGF0ZSBzdWNoCisgKiBjb250cm9scy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogSFAgbWl4ZXIgKi8KKwl7IkhQIE1peGVyIiwgIlBDQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAiUENCRUVQIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiQ0QgUGxheWJhY2sgU3dpdGNoIiwgIkNEIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCAiTWljIFBsYXliYWNrIFN3aXRjaCIsICJNaWMgUEdBIn0sCisJeyJIUCBNaXhlciIsICJQaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAiUGhvbmUgUEdBIn0sCisJeyJIUCBNaXhlciIsICJMaW5lIFBsYXliYWNrIFN3aXRjaCIsICJMaW5lIFBHQSJ9LAorCXsiSFAgTWl4ZXIiLCBOVUxMLCAiTGVmdCBEQUMifSwKKwl7IkhQIE1peGVyIiwgTlVMTCwgIlJpZ2h0IERBQyJ9LAorCisJLyogbW9ubyBtaXhlciAqLworCXsiTW9ubyBNaXhlciIsIE5VTEwsICJIUCBNaXhlciJ9LAorCisJLyogb3V0cHV0cyAqLworCXsiSGVhZHBob25lIFBHQSIsIE5VTEwsICJIUCBNaXhlciJ9LAorCXsiSFBPVVRMIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EifSwKKwl7IkhQT1VUUiIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIn0sCisJeyJMaW5lIG91dCBQR0EiLCBOVUxMLCAiSFAgTWl4ZXIifSwKKwl7IkxPVVQiLCBOVUxMLCAiTGluZSBvdXQgUEdBIn0sCisJeyJST1VUIiwgTlVMTCwgIkxpbmUgb3V0IFBHQSJ9LAorCXsiTW9ubyBQR0EiLCBOVUxMLCAiTW9ubyBNaXhlciJ9LAorCXsiTU9OT09VVCIsIE5VTEwsICJNb25vIFBHQSJ9LAorCisJLyogaW5wdXRzICovCisJeyJDRCBQR0EiLCBOVUxMLCAiQ0RJTkwifSwKKwl7IkNEIFBHQSIsIE5VTEwsICJDRElOUiJ9LAorCXsiTGluZSBQR0EiLCBOVUxMLCAiTElORUlOTCJ9LAorCXsiTGluZSBQR0EiLCBOVUxMLCAiTElORUlOUiJ9LAorCXsiUGhvbmUgUEdBIiwgTlVMTCwgIlBIT05FIn0sCisJeyJNaWMgU291cmNlIiwgIk1pYyAxIiwgIk1JQzEifSwKKwl7Ik1pYyBTb3VyY2UiLCAiTWljIDIiLCAiTUlDMiJ9LAorCXsiTWljIFBHQSIsIE5VTEwsICJNaWMgU291cmNlIn0sCisJeyJQQ0JFRVAgUEdBIiwgTlVMTCwgIlBDQkVFUCJ9LAorCisJLyogTGVmdCBjYXB0dXJlIHNlbGVjdG9yICovCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIk1pYyIsICJNaWMgU291cmNlIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIkNEIiwgIkNESU5MIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIkxpbmUiLCAiTElORUlOTCJ9LAorCXsiTGVmdCBDYXB0dXJlIFNvdXJjZSIsICJTdGVyZW8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIk1vbm8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJMZWZ0IENhcHR1cmUgU291cmNlIiwgIlBob25lIiwgIlBIT05FIn0sCisKKwkvKiBSaWdodCBjYXB0dXJlIHNvdXJjZSAqLworCXsiUmlnaHQgQ2FwdHVyZSBTb3VyY2UiLCAiTWljIiwgIk1pYyBTb3VyY2UifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIkNEIiwgIkNESU5SIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJMaW5lIiwgIkxJTkVJTlIifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIlN0ZXJlbyBNaXgiLCAiSFAgTWl4ZXIifSwKKwl7IlJpZ2h0IENhcHR1cmUgU291cmNlIiwgIk1vbm8gTWl4IiwgIkhQIE1peGVyIn0sCisJeyJSaWdodCBDYXB0dXJlIFNvdXJjZSIsICJQaG9uZSIsICJQSE9ORSJ9LAorCisJeyJBREMgUEdBIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBTb3VyY2UifSwKKwl7IkFEQyBQR0EiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBTb3VyY2UifSwKKworCS8qIEFEQydzICovCisJeyJMZWZ0IEFEQyIsICBOVUxMLCAiQURDIFBHQSJ9LAorCXsiUmlnaHQgQURDIiwgTlVMTCwgIkFEQyBQR0EifSwKK307CisKK3N0YXRpYyBpbnQgd205NzA1X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTk3MDVfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKHdtOTcwNV9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogV2UgdXNlIGEgcmVnaXN0ZXIgY2FjaGUgdG8gZW5oYW5jZSByZWFkIHBlcmZvcm1hbmNlLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFDOTdfUkVTRVQ6CisJY2FzZSBBQzk3X1ZFTkRPUl9JRDE6CisJY2FzZSBBQzk3X1ZFTkRPUl9JRDI6CisJCXJldHVybiBzb2NfYWM5N19vcHMucmVhZChjb2RlYy0+YWM5NywgcmVnKTsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWcgPj4gMTsKKworCQlpZiAocmVnID49IChBUlJBWV9TSVpFKHdtOTcwNV9yZWcpKSkKKwkJCXJldHVybiAtRUlPOworCisJCXJldHVybiBjYWNoZVtyZWddOworCX0KK30KKworc3RhdGljIGludCBhYzk3X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CisJcmVnID0gcmVnID4+IDE7CisJaWYgKHJlZyA8IChBUlJBWV9TSVpFKHdtOTcwNV9yZWcpKSkKKwkJY2FjaGVbcmVnXSA9IHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjOTdfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgcmVnOworCXUxNiB2cmE7CisKKwl2cmEgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKKwlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUywgdnJhIHwgMHgxKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZWcgPSBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURTsKKwllbHNlCisJCXJlZyA9IEFDOTdfUENNX0xSX0FEQ19SQVRFOworCisJcmV0dXJuIGFjOTdfd3JpdGUoY29kZWMsIHJlZywgcnVudGltZS0+cmF0ZSk7Cit9CisKKyNkZWZpbmUgV005NzA1X0FDOTdfUkFURVMgKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFwKKwkJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBcCisJCQlTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAorCQkJU05EUlZfUENNX1JBVEVfNDgwMDApCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtOTcwNV9kYWlfb3BzID0geworCS5wcmVwYXJlCT0gYWM5N19wcmVwYXJlLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHdtOTcwNV9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5hYzk3X2NvbnRyb2wgPSAxLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV005NzA1X0FDOTdfUkFURVMsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJIaUZpIENhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNOTcwNV9BQzk3X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwkJLm9wcyA9ICZ3bTk3MDVfZGFpX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQXV4IFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDEsCisJCQkucmF0ZXMgPSBXTTk3MDVfQUM5N19SQVRFUywKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJfQorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtOTcwNV9kYWkpOworCitzdGF0aWMgaW50IHdtOTcwNV9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaWYgKHNvY19hYzk3X29wcy5yZXNldCkgeworCQlzb2NfYWM5N19vcHMucmVzZXQoY29kZWMtPmFjOTcpOworCQlpZiAoYWM5N19yZWFkKGNvZGVjLCAwKSA9PSB3bTk3MDVfcmVnWzBdKQorCQkJcmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi8KKwl9CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCB3bTk3MDVfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJXTTk3MDUgU29DIEF1ZGlvIENvZGVjXG4iKTsKKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisKKwljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTk3MDVfcmVnLCBzaXplb2Yod205NzA1X3JlZyksIEdGUF9LRVJORUwpOworCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjYWNoZV9lcnI7CisJfQorCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IHNpemVvZih3bTk3MDVfcmVnKTsKKwljb2RlYy0+cmVnX2NhY2hlX3N0ZXAgPSAyOworCisJY29kZWMtPm5hbWUgPSAiV005NzA1IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gd205NzA1X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUod205NzA1X2RhaSk7CisJY29kZWMtPndyaXRlID0gYWM5N193cml0ZTsKKwljb2RlYy0+cmVhZCA9IGFjOTdfcmVhZDsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCXJldCA9IHNuZF9zb2NfbmV3X2FjOTdfY29kZWMoY29kZWMsICZzb2NfYWM5N19vcHMsIDApOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid205NzA1OiBmYWlsZWQgdG8gcmVnaXN0ZXIgQUM5NyBjb2RlY1xuIik7CisJCWdvdG8gY29kZWNfZXJyOworCX0KKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHBjbV9lcnI7CisKKwlyZXQgPSB3bTk3MDVfcmVzZXQoY29kZWMpOworCWlmIChyZXQpCisJCWdvdG8gcmVzZXRfZXJyOworCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTcwNV9zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtOTcwNV9zbmRfYWM5N19jb250cm9scykpOworCXdtOTcwNV9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid205NzA1OiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworcmVzZXRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CitwY21fZXJyOgorCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKGNvZGVjKTsKK2NvZGVjX2VycjoKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKK2NhY2hlX2VycjoKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtOTcwNV9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJaWYgKGNvZGVjID09IE5VTEwpCisJCXJldHVybiAwOworCisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKGNvZGVjKTsKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwlrZnJlZShjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtOTcwNSA9IHsKKwkucHJvYmUgPSAJd205NzA1X3NvY19wcm9iZSwKKwkucmVtb3ZlID0gCXdtOTcwNV9zb2NfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd205NzA1KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNOTcwNSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODBmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiB3bTk3MDUuaCAgLS0gIFdNOTcwNSBTb2MgQXVkaW8gZHJpdmVyCisgKi8KKworI2lmbmRlZiBfV005NzA1X0gKKyNkZWZpbmUgX1dNOTcwNV9ICisKKyNkZWZpbmUgV005NzA1X0RBSV9BQzk3X0hJRkkJMAorI2RlZmluZSBXTTk3MDVfREFJX0FDOTdfQVVYCTEKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTk3MDVfZGFpWzJdOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtOTcwNTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCBhZjgzZDYyLi43NjVjZjFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKQEAgLTE1NCwyMSArMTU0LDYgQEAKIFNPQ19TSU5HTEUoIk1pYyAyMGRCIEJvb3N0IFN3aXRjaCIsIEFDOTdfTUlDLCA3LCAxLCAwKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCB3bTk3MTJfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod205NzEyX3NuZF9hYzk3X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCSAgc25kX3NvY19jbmV3KCZ3bTk3MTJfc25kX2FjOTdfY29udHJvbHNbaV0sCi0JCQkJCSAgICAgICBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIGZha2UgbGVmdCBhbmQgcmlnaHQgSFAgbWl4ZXJzIGJlY2F1c2UKICAqIHRoZSBjb2RlYyBvbmx5IGhhcyBhIHNpbmdsZSBjb250cm9sIHRoYXQgaXMgc2hhcmVkIGJ5IGJvdGggY2hhbm5lbHMuCiAgKiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBhdWRpbyBwYXRoLgpAQCAtNDY3LDcgKzQ1Miw3IEBACiAJZWxzZSB7CiAJCXJlZyA9IHJlZyA+PiAxOwogCi0JCWlmIChyZWcgPiAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCisJCWlmIChyZWcgPj0gKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJcmV0dXJuIGNhY2hlW3JlZ107CkBAIC00ODEsNyArNDY2LDcgQEAKIAogCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwotCWlmIChyZWcgPD0gKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQorCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CiAKIAlyZXR1cm4gMDsKQEAgLTQ5Myw3ICs0NzgsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZWc7CiAJdTE2IHZyYTsKIApAQCAtNTE0LDcgKzQ5OSw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJdTE2IHZyYSwgeHNsZTsKIAogCXZyYSA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwpAQCAtNTMyLDYgKzUxNywxNCBAQAogCQlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHxcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTJfZGFpX29wc19oaWZpID0geworCS5wcmVwYXJlCT0gYWM5N19wcmVwYXJlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEyX2RhaV9vcHNfYXV4ID0geworCS5wcmVwYXJlCT0gYWM5N19hdXhfcHJlcGFyZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTk3MTJfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiQUM5NyBIaUZpIiwKQEAgLTU0OCw4ICs1NDEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV005NzEyX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkucHJlcGFyZSA9IGFjOTdfcHJlcGFyZSx9LAorCS5vcHMgPSAmd205NzEyX2RhaV9vcHNfaGlmaSwKIH0sCiB7CiAJLm5hbWUgPSAiQUM5NyBBdXgiLApAQCAtNTU5LDggKzU1MSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBXTTk3MTJfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19hdXhfcHJlcGFyZSx9LAorCS5vcHMgPSAmd205NzEyX2RhaV9vcHNfYXV4LAogfQogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtOTcxMl9kYWkpOwpAQCAtNjA3LDcgKzU5OCw3IEBACiAJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJd205NzEyX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKQEAgLTYxNiw3ICs2MDcsNyBAQAogc3RhdGljIGludCB3bTk3MTJfc29jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCBpLCByZXQ7CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKQEAgLTY1MiwxMCArNjQzLDExIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJXTTk3MTEvV005NzEyIFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgV005NzEyX1ZFUlNJT04pOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNvY2Rldi0+Y29kZWMgPT0gTlVMTCkKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtOTcxMl9yZWcsIHNpemVvZih3bTk3MTJfcmVnKSwgR0ZQX0tFUk5FTCk7CkBAIC02OTgsNyArNjkwLDggQEAKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X1ZJREVPLCBhYzk3X3JlYWQoY29kZWMsIEFDOTdfVklERU8pIHwgMHgzMDAwKTsKIAogCXdtOTcxMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwotCXdtOTcxMl9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTk3MTJfc25kX2FjOTdfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTk3MTJfc25kX2FjOTdfY29udHJvbHMpKTsKIAl3bTk3MTJfYWRkX3dpZGdldHMoY29kZWMpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTcxOCwxNSArNzExLDE1IEBACiAJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAKIGNhY2hlX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHdtOTcxMl9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwppbmRleCBmM2NhOGFhLi41MjNiYWQwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogc3RydWN0IHdtOTcxM19wcml2IHsKIAl1MzIgcGxsX2luOyAvKiBQTEwgaW5wdXQgZnJlcXVlbmN5ICovCi0JdTMyIHBsbF9vdXQ7IC8qIFBMTCBvdXRwdXQgZnJlcXVlbmN5ICovCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGFjOTdfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCkBAIC0xOTAsMjEgKzE4OSw2IEBACiBTT0NfU0lOR0xFKCIzRCBEZXB0aCIsIEFDOTdfUkVDX0dBSU5fTUlDLCAwLCAxNSwgMSksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgd205NzEzX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtOTcxM19zbmRfYWM5N19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtOTcxM19zbmRfYWM5N19jb250cm9sc1tpXSwKLQkJCQkJY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyogV2UgaGF2ZSB0byBjcmVhdGUgYSBmYWtlIGxlZnQgYW5kIHJpZ2h0IEhQIG1peGVycyBiZWNhdXNlCiAgKiB0aGUgY29kZWMgb25seSBoYXMgYSBzaW5nbGUgY29udHJvbCB0aGF0IGlzIHNoYXJlZCBieSBib3RoIGNoYW5uZWxzLgogICogVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgYXVkaW8gcGF0aCB1c2luZyB0aGUgY3VycmVudApAQCAtNjM2LDcgKzYyMCw3IEBACiAJZWxzZSB7CiAJCXJlZyA9IHJlZyA+PiAxOwogCi0JCWlmIChyZWcgPiAoQVJSQVlfU0laRSh3bTk3MTNfcmVnKSkpCisJCWlmIChyZWcgPj0gKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJcmV0dXJuIGNhY2hlW3JlZ107CkBAIC02NTAsNyArNjM0LDcgQEAKIAlpZiAocmVnIDwgMHg3YykKIAkJc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CiAJcmVnID0gcmVnID4+IDE7Ci0JaWYgKHJlZyA8PSAoQVJSQVlfU0laRSh3bTk3MTNfcmVnKSkpCisJaWYgKHJlZyA8IChBUlJBWV9TSVpFKHdtOTcxM19yZWcpKSkKIAkJY2FjaGVbcmVnXSA9IHZhbDsKIAogCXJldHVybiAwOwpAQCAtNzM4LDEzICs3MjIsMTMgQEAKIAlzdHJ1Y3QgX3BsbF9kaXYgcGxsX2RpdjsKIAogCS8qIHR1cm4gUExMIG9mZiA/ICovCi0JaWYgKGZyZXFfaW4gPT0gMCB8fCBmcmVxX291dCA9PSAwKSB7CisJaWYgKGZyZXFfaW4gPT0gMCkgewogCQkvKiBkaXNhYmxlIFBMTCBwb3dlciBhbmQgc2VsZWN0IGV4dCBzb3VyY2UgKi8KIAkJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSk7CiAJCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByZWcgfCAweDAwODApOwogCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfTUlEKTsKIAkJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHJlZyB8IDB4MDIwMCk7Ci0JCXdtOTcxMy0+cGxsX291dCA9IDA7CisJCXdtOTcxMy0+cGxsX2luID0gMDsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03ODgsNyArNzcyLDYgQEAKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgcmVnICYgMHhmZGZmKTsKIAlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKTsKIAlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmVnICYgMHhmZjdmKTsKLQl3bTk3MTMtPnBsbF9vdXQgPSBmcmVxX291dDsKIAl3bTk3MTMtPnBsbF9pbiA9IGZyZXFfaW47CiAKIAkvKiB3YWl0IDEwbXMgQUM5NyBsaW5rIGZyYW1lcyBmb3IgdGhlIGxpbmsgdG8gc3RhYmlsaXNlICovCkBAIC05NTcsMTMgKzk0MCwxNCBAQAogCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBzdGF0dXM7CisJdTE2IHN0YXR1cywgcmF0ZTsKIAogCS8qIEdyYWNlZnVsbHkgc2h1dCBkb3duIHRoZSB2b2ljZSBpbnRlcmZhY2UuICovCiAJc3RhdHVzID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUykgfCAweDEwMDA7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIDB4MDI4MCk7CisJcmF0ZSA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUpICYgMHhGMEZGOworCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByYXRlIHwgMHgwMjAwKTsKIAlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxKSk7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIDB4MEY4MCk7CisJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJhdGUgfCAweDBGMDApOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCBzdGF0dXMpOwogfQogCkBAIC0xMDIxLDYgKzEwMDUsMjcgQEAKIAkoU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgfCBcCiAJIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTNfZGFpX29wc19oaWZpID0geworCS5wcmVwYXJlCT0gYWM5N19oaWZpX3ByZXBhcmUsCisJLnNldF9jbGtkaXYJPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSB3bTk3MTNfc2V0X2RhaV9wbGwsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTk3MTNfZGFpX29wc19hdXggPSB7CisJLnByZXBhcmUJPSBhYzk3X2F1eF9wcmVwYXJlLAorCS5zZXRfY2xrZGl2CT0gd205NzEzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd205NzEzX3NldF9kYWlfcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd205NzEzX2RhaV9vcHNfdm9pY2UgPSB7CisJLmh3X3BhcmFtcwk9IHdtOTcxM19wY21faHdfcGFyYW1zLAorCS5zaHV0ZG93bgk9IHdtOTcxM192b2ljZXNodXRkb3duLAorCS5zZXRfY2xrZGl2CT0gd205NzEzX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfcGxsCT0gd205NzEzX3NldF9kYWlfcGxsLAorCS5zZXRfZm10CT0gd205NzEzX3NldF9kYWlfZm10LAorCS5zZXRfdHJpc3RhdGUJPSB3bTk3MTNfc2V0X2RhaV90cmlzdGF0ZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSB3bTk3MTNfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiQUM5NyBIaUZpIiwKQEAgLTEwMzcsMTAgKzEwNDIsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gV005NzEzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X2hpZmlfcHJlcGFyZSwKLQkJLnNldF9jbGtkaXYgPSB3bTk3MTNfc2V0X2RhaV9jbGtkaXYsCi0JCS5zZXRfcGxsID0gd205NzEzX3NldF9kYWlfcGxsLH0sCisJLm9wcyA9ICZ3bTk3MTNfZGFpX29wc19oaWZpLAogCX0sCiAJewogCS5uYW1lID0gIkFDOTcgQXV4IiwKQEAgLTEwNTAsMTAgKzEwNTIsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gV005NzEzX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnByZXBhcmUgPSBhYzk3X2F1eF9wcmVwYXJlLAotCQkuc2V0X2Nsa2RpdiA9IHdtOTcxM19zZXRfZGFpX2Nsa2RpdiwKLQkJLnNldF9wbGwgPSB3bTk3MTNfc2V0X2RhaV9wbGwsfSwKKwkub3BzID0gJndtOTcxM19kYWlfb3BzX2F1eCwKIAl9LAogCXsKIAkubmFtZSA9ICJXTTk3MTMgVm9pY2UiLApAQCAtMTA2OSwxNCArMTA2OCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBXTTk3MTNfUENNX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNOTcxM19QQ01fRk9STUFUUyx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSB3bTk3MTNfcGNtX2h3X3BhcmFtcywKLQkJLnNodXRkb3duID0gd205NzEzX3ZvaWNlc2h1dGRvd24sCi0JCS5zZXRfY2xrZGl2ID0gd205NzEzX3NldF9kYWlfY2xrZGl2LAotCQkuc2V0X3BsbCA9IHdtOTcxM19zZXRfZGFpX3BsbCwKLQkJLnNldF9mbXQgPSB3bTk3MTNfc2V0X2RhaV9mbXQsCi0JCS5zZXRfdHJpc3RhdGUgPSB3bTk3MTNfc2V0X2RhaV90cmlzdGF0ZSwKLQl9LAorCS5vcHMgPSAmd205NzEzX2RhaV9vcHNfdm9pY2UsCiAJfSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTk3MTNfZGFpKTsKQEAgLTExMzIsNyArMTEyNCw3IEBACiAJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiByZWc7CiAKIAkvKiBEaXNhYmxlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRvdWNocGFuZWwgLSB0aGF0IHdpbGwgYmUgaGFuZGxlZApAQCAtMTE1MCw3ICsxMTQyLDcgQEAKIHN0YXRpYyBpbnQgd205NzEzX3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd205NzEzX3ByaXYgKndtOTcxMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IGksIHJldDsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKQEAgLTExNjQsOCArMTE1Niw4IEBACiAJd205NzEzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAkvKiBkbyB3ZSBuZWVkIHRvIHJlLXN0YXJ0IHRoZSBQTEwgPyAqLwotCWlmICh3bTk3MTMtPnBsbF9vdXQpCi0JCXdtOTcxM19zZXRfcGxsKGNvZGVjLCAwLCB3bTk3MTMtPnBsbF9pbiwgd205NzEzLT5wbGxfb3V0KTsKKwlpZiAod205NzEzLT5wbGxfaW4pCisJCXdtOTcxM19zZXRfcGxsKGNvZGVjLCAwLCB3bTk3MTMtPnBsbF9pbiwgMCk7CiAKIAkvKiBvbmx5IHN5bmNocm9uaXNlIHRoZSBjb2RlYyBpZiB3YXJtIHJlc2V0IGZhaWxlZCAqLwogCWlmIChyZXQgPT0gMCkgewpAQCAtMTE5MSwxMCArMTE4MywxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiV005NzEzL1dNOTcxNCBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFdNOTcxM19WRVJTSU9OKTsKIAotCXNvY2Rldi0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwotCWlmIChzb2NkZXYtPmNvZGVjID09IE5VTEwpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKIAljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTk3MTNfcmVnLCBzaXplb2Yod205NzEzX3JlZyksIEdGUF9LRVJORUwpOwpAQCAtMTI0NSw3ICsxMjM4LDggQEAKIAlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfQ0QpICYgMHg3ZmZmOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfQ0QsIHJlZyk7CiAKLQl3bTk3MTNfYWRkX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205NzEzX3NuZF9hYzk3X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod205NzEzX3NuZF9hYzk3X2NvbnRyb2xzKSk7CiAJd205NzEzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKQpAQCAtMTI2NSwxNSArMTI1OSwxNSBAQAogCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCiBjYWNoZV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bTk3MTNfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJaWYgKGNvZGVjID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZyBiL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcKaW5kZXggYjUwMjc0MS4uYmQ3MzkyYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnCkBAIC0yMCw3ICsyMCw3IEBACiAKIGNvbmZpZyBTTkRfREFWSU5DSV9TT0NfU0ZGU0RSCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBTRkZTRFIiCi0JZGVwZW5kcyBvbiBTTkRfREFWSU5DSV9TT0MgJiYgTUFDSF9EQVZJTkNJX1NGRlNEUgorCWRlcGVuZHMgb24gU05EX0RBVklOQ0lfU09DICYmIE1BQ0hfU0ZGU0RSCiAJc2VsZWN0IFNORF9EQVZJTkNJX1NPQ19JMlMKIAlzZWxlY3QgU05EX1NPQ19QQ00zMDA4CiAJc2VsZWN0IFNGRlNEUl9GUEdBCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwppbmRleCA1NDg1MWYzLi45YjkwYjM0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKQEAgLTE4Niw3ICsxODYsOCBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZXZtX3NuZF9kZXZpY2UsICZldm1fc25kX2RldmRhdGEpOwogCWV2bV9zbmRfZGV2ZGF0YS5kZXYgPSAmZXZtX3NuZF9kZXZpY2UtPmRldjsKLQlldm1fc25kX2RldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmZXZtX3NuZF9kYXRhOworCXBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShldm1fc25kX2RldmljZSwgJmV2bV9zbmRfZGF0YSwKKwkJCQkgc2l6ZW9mKGV2bV9zbmRfZGF0YSkpOwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMoZXZtX3NuZF9kZXZpY2UsIGV2bV9zbmRfcmVzb3VyY2VzLAogCQkJCQkgICAgQVJSQVlfU0laRShldm1fc25kX3Jlc291cmNlcykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKaW5kZXggMGZlZTc3OS4uZmZkYjk0MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCkBAIC00OTksNiArNDk5LDEzIEBACiAKICNkZWZpbmUgREFWSU5DSV9JMlNfUkFURVMJU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBkYXZpbmNpX2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKKwkudHJpZ2dlcgk9IGRhdmluY2lfaTJzX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IGRhdmluY2lfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGRhdmluY2lfaTJzX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGRhdmluY2lfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJkYXZpbmNpLWkycyIsCiAJLmlkID0gMCwKQEAgLTUxNCwxMiArNTIxLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IERBVklOQ0lfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBkYXZpbmNpX2kyc19zdGFydHVwLAotCQkudHJpZ2dlciA9IGRhdmluY2lfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMgPSBkYXZpbmNpX2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gZGF2aW5jaV9pMnNfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJmRhdmluY2lfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoZGF2aW5jaV9pMnNfZGFpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggMzY2MDQ5ZC4uN2FmM2I1YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC0yODYsNyArMjg2LDcgQEAKIAkJCQkgICAgIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CiB9CiAKLXN0cnVjdCBzbmRfcGNtX29wcyBkYXZpbmNpX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGRhdmluY2lfcGNtX29wcyA9IHsKIAkub3BlbiA9IAlkYXZpbmNpX3BjbV9vcGVuLAogCS5jbG9zZSA9IAlkYXZpbmNpX3BjbV9jbG9zZSwKIAkuaW9jdGwgPSAJc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1zZmZzZHIuYwppbmRleCA0OTM1ZDFiLi40MGVjY2ZlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXNmZnNkci5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktc2Zmc2RyLmMKQEAgLTI1LDcgKzI1LDkgQEAKIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2lmZGVmIENPTkZJR19TRkZTRFJfRlBHQQogI2luY2x1ZGUgPGFzbS9wbGF0LXNmZnNkci9zZmZzZHItZnBnYS5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxtYWNoL21jYnNwLmg+CiAjaW5jbHVkZSA8bWFjaC9lZG1hLmg+CkBAIC0zNCwzMSArMzYsNDUgQEAKICNpbmNsdWRlICJkYXZpbmNpLXBjbS5oIgogI2luY2x1ZGUgImRhdmluY2ktaTJzLmgiCiAKKy8qCisgKiBDTEtYIGFuZCBDTEtSIGFyZSB0aGUgaW5wdXRzIGZvciB0aGUgU2FtcGxlIFJhdGUgR2VuZXJhdG9yLgorICogRlNYIGFuZCBGU1IgYXJlIG91dHB1dHMsIGRyaXZlbiBieSB0aGUgc2FtcGxlIFJhdGUgR2VuZXJhdG9yLgorICovCisjZGVmaW5lIEFVRElPX0ZPUk1BVCAoU05EX1NPQ19EQUlGTVRfRFNQX0IgfAlcCisJCSAgICAgIFNORF9TT0NfREFJRk1UX0NCTV9DRlMgfAlcCisJCSAgICAgIFNORF9TT0NfREFJRk1UX0lCX05GKQorCiBzdGF0aWMgaW50IHNmZnNkcl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCWludCBmczsKIAlpbnQgcmV0ID0gMDsKIAotCS8qIFNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb246Ci0JICogQ0xLWCBhbmQgQ0xLUiBhcmUgdGhlIGlucHV0cyBmb3IgdGhlIFNhbXBsZSBSYXRlIEdlbmVyYXRvci4KLQkgKiBGU1ggYW5kIEZTUiBhcmUgb3V0cHV0cywgZHJpdmVuIGJ5IHRoZSBzYW1wbGUgUmF0ZSBHZW5lcmF0b3IuICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLAotCQkJCSAgU05EX1NPQ19EQUlGTVRfUklHSFRfSiB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTIHwKLQkJCQkgIFNORF9TT0NfREFJRk1UX0lCX05GKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIEZzcmVmIGNhbiBiZSAzMjAwMCwgNDQxMDAgb3IgNDgwMDAuICovCiAJZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwogCisjaWZuZGVmIENPTkZJR19TRkZTRFJfRlBHQQorCS8qIFdpdGhvdXQgdGhlIEZQR0EgbW9kdWxlLCB0aGUgRnMgaXMgZml4ZWQgYXQgNDQxMDAgSHogKi8KKwlpZiAoZnMgIT0gNDQxMDApIHsKKwkJcHJfZGVidWcoIndhcm5pbmc6IG9ubHkgNDQuMSBrSHogaXMgc3VwcG9ydGVkIHdpdGhvdXQgU0ZGU0RSIEZQR0EgbW9kdWxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmCisKKwkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBBVURJT19GT1JNQVQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCiAJcHJfZGVidWcoInNmZnNkcl9od19wYXJhbXM6IHJhdGUgPSAlZCBIelxuIiwgZnMpOwogCisjaWZuZGVmIENPTkZJR19TRkZTRFJfRlBHQQorCXJldHVybiAwOworI2Vsc2UKIAlyZXR1cm4gc2Zmc2RyX2ZwZ2Ffc2V0X2NvZGVjX2ZzKGZzKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNmZnNkcl9vcHMgPSB7CkBAIC0xMjcsNyArMTQzLDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHNmZnNkcl9zbmRfZGV2aWNlLCAmc2Zmc2RyX3NuZF9kZXZkYXRhKTsKIAlzZmZzZHJfc25kX2RldmRhdGEuZGV2ID0gJnNmZnNkcl9zbmRfZGV2aWNlLT5kZXY7Ci0Jc2Zmc2RyX3NuZF9kZXZpY2UtPmRldi5wbGF0Zm9ybV9kYXRhID0gJnNmZnNkcl9zbmRfZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoc2Zmc2RyX3NuZF9kZXZpY2UsICZzZmZzZHJfc25kX2RhdGEsCisJCQkJIHNpemVvZihzZmZzZHJfc25kX2RhdGEpKTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHNmZnNkcl9zbmRfZGV2aWNlLAogCQkJCQkgICAgc2Zmc2RyX3NuZF9yZXNvdXJjZXMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL0tjb25maWcgYi9zb3VuZC9zb2MvZnNsL0tjb25maWcKaW5kZXggOTVjMTJiMi4uOWZjOTA4MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9mc2wvS2NvbmZpZwpAQCAtMSwxNyArMSwxOCBAQAogY29uZmlnIFNORF9TT0NfT0ZfU0lNUExFCiAJdHJpc3RhdGUKIAorIyBBU29DIHBsYXRmb3JtIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODYxMCBTT0MuICBUaGlzIGNvbXBpbGVzIGRyaXZlcnMKKyMgZm9yIHRoZSBTU0kgYW5kIHRoZSBFbG8gRE1BIGNvbnRyb2xsZXIuICBZb3Ugd2lsbCBzdGlsbCBuZWVkIHRvIHNlbGVjdAorIyBhIHBsYXRmb3JtIGRyaXZlciBhbmQgYSBjb2RlYyBkcml2ZXIuCiBjb25maWcgU05EX1NPQ19NUEM4NjEwCi0JYm9vbCAiQUxTQSBTb0Mgc3VwcG9ydCBmb3IgdGhlIE1QQzg2MTAgU09DIgotCWRlcGVuZHMgb24gTVBDODYxMF9IUENECi0JZGVmYXVsdCB5IGlmIE1QQzg2MTAKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvIHRoZSBTU0kKLSAgICAgICAgICBkZXZpY2Ugb24gYW4gTVBDODYxMC4KKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gTVBDODYxMAogCiBjb25maWcgU05EX1NPQ19NUEM4NjEwX0hQQ0QKLQlib29sICJBTFNBIFNvQyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzg2MTAgSFBDRCBib2FyZCIKLQlkZXBlbmRzIG9uIFNORF9TT0NfTVBDODYxMAorCXRyaXN0YXRlICJBTFNBIFNvQyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzg2MTAgSFBDRCBib2FyZCIKKwkjIEkyQyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBDUzQyNzAgZHJpdmVyCisJZGVwZW5kcyBvbiBNUEM4NjEwX0hQQ0QgJiYgSTJDCisJc2VsZWN0IFNORF9TT0NfTVBDODYxMAogCXNlbGVjdCBTTkRfU09DX0NTNDI3MAogCXNlbGVjdCBTTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQQogCWRlZmF1bHQgeSBpZiBNUEM4NjEwX0hQQ0QKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUgYi9zb3VuZC9zb2MvZnNsL01ha2VmaWxlCmluZGV4IDAzNWRhNGEuLmY4NTEzNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2ZzbC9NYWtlZmlsZQpAQCAtMiwxMCArMiwxMyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfT0ZfU0lNUExFKSArPSBzb2Mtb2Ytc2ltcGxlLm8KIAogIyBNUEM4NjEwIEhQQ0QgTWFjaGluZSBTdXBwb3J0Ci1vYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwX0hQQ0QpICs9IG1wYzg2MTBfaHBjZC5vCitzbmQtc29jLW1wYzg2MTAtaHBjZC1vYmpzIDo9IG1wYzg2MTBfaHBjZC5vCitvYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwX0hQQ0QpICs9IHNuZC1zb2MtbXBjODYxMC1ocGNkLm8KIAogIyBNUEM4NjEwIFBsYXRmb3JtIFN1cHBvcnQKLW9iai0kKENPTkZJR19TTkRfU09DX01QQzg2MTApICs9IGZzbF9zc2kubyBmc2xfZG1hLm8KK3NuZC1zb2MtZnNsLXNzaS1vYmpzIDo9IGZzbF9zc2kubworc25kLXNvYy1mc2wtZG1hLW9ianMgOj0gZnNsX2RtYS5vCitvYmotJChDT05GSUdfU05EX1NPQ19NUEM4NjEwKSArPSBzbmQtc29jLWZzbC1zc2kubyBzbmQtc29jLWZzbC1kbWEubwogCiBvYmotJChDT05GSUdfU05EX1NPQ19NUEM1MjAwX0kyUykgKz0gbXBjNTIwMF9wc2NfaTJzLm8KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYwppbmRleCA2NDk5M2VkLi5iM2ViODU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9kbWEuYwpAQCAtMTQyLDcgKzE0Miw4IEBACiAJLmluZm8gICAJCT0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgIFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWCwKKwkJCQkgIFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWCB8CisJCQkJICBTTkRSVl9QQ01fSU5GT19QQVVTRSwKIAkuZm9ybWF0cwkJPSBGU0xETUFfUENNX0ZPUk1BVFMsCiAJLnJhdGVzICAJCT0gRlNMRE1BX1BDTV9SQVRFUywKIAkucmF0ZV9taW4gICAgICAgCT0gNTUxMiwKQEAgLTQ2NCwxMSArNDY1LDcgQEAKIAkJc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9MSU5LUzsgaSsrKSB7Ci0JCXN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvciAqbGluayA9ICZkbWFfcHJpdmF0ZS0+bGlua1tpXTsKLQotCQlsaW5rLT5zb3VyY2VfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9TTk9PUCk7Ci0JCWxpbmstPmRlc3RfYXR0ciA9IGNwdV90b19iZTMyKENDU1JfRE1BX0FUUl9TTk9PUCk7Ci0JCWxpbmstPm5leHQgPSBjcHVfdG9fYmU2NCh0ZW1wX2xpbmspOworCQlkbWFfcHJpdmF0ZS0+bGlua1tpXS5uZXh0ID0gY3B1X3RvX2JlNjQodGVtcF9saW5rKTsKIAogCQl0ZW1wX2xpbmsgKz0gc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvcik7CiAJfQpAQCAtNTI1LDc5ICs1MjIsOSBAQAogICogVGhpcyBmdW5jdGlvbiBvYnRhaW5zIGhhcmR3YXJlIHBhcmFtZXRlcnMgYWJvdXQgdGhlIG9wZW5lZCBzdHJlYW0gYW5kCiAgKiBwcm9ncmFtcyB0aGUgRE1BIGNvbnRyb2xsZXIgYWNjb3JkaW5nbHkuCiAgKgotICogTm90ZSB0aGF0IGR1ZSB0byBhIHF1aXJrIG9mIHRoZSBTU0kncyBTVFggcmVnaXN0ZXIsIHRoZSB0YXJnZXQgYWRkcmVzcwotICogZm9yIHRoZSBETUEgb3BlcmF0aW9ucyBkZXBlbmRzIG9uIHRoZSBzYW1wbGUgc2l6ZS4gIFNvIHdlIGRvbid0IHByb2dyYW0KLSAqIHRoZSBkZXN0X2FkZHIgKGZvciBwbGF5YmFjayAtLSBzb3VyY2VfYWRkciBmb3IgY2FwdHVyZSkgZmllbGRzIGluIHRoZQotICogbGluayBkZXNjcmlwdG9ycyBoZXJlLiAgV2UgZG8gdGhhdCBpbiBmc2xfZG1hX3ByZXBhcmUoKQotICovCi1zdGF0aWMgaW50IGZzbF9kbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IGZzbF9kbWFfcHJpdmF0ZSAqZG1hX3ByaXZhdGUgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlkbWFfYWRkcl90IHRlbXBfYWRkcjsgICAvKiBQb2ludGVyIHRvIG5leHQgcGVyaW9kICovCi0KLQl1bnNpZ25lZCBpbnQgaTsKLQotCS8qIEdldCBhbGwgdGhlIHBhcmFtZXRlcnMgd2UgbmVlZCAqLwotCXNpemVfdCBidWZmZXJfc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKLQlzaXplX3QgcGVyaW9kX3NpemUgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcyk7Ci0KLQkvKiBJbml0aWFsaXplIG91ciBETUEgdHJhY2tpbmcgdmFyaWFibGVzICovCi0JZG1hX3ByaXZhdGUtPnBlcmlvZF9zaXplID0gcGVyaW9kX3NpemU7Ci0JZG1hX3ByaXZhdGUtPm51bV9wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMoaHdfcGFyYW1zKTsKLQlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsgYnVmZmVyX3NpemU7Ci0JZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgKwotCQkoTlVNX0RNQV9MSU5LUyAqIHBlcmlvZF9zaXplKTsKLQlpZiAoZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA+PSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQpCi0JCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzOwotCi0JLyoKLQkgKiBUaGUgYWN0dWFsIGFkZHJlc3MgaW4gU1RYMCAoZGVzdGluYXRpb24gZm9yIHBsYXliYWNrLCBzb3VyY2UgZm9yCi0JICogY2FwdHVyZSkgaXMgYmFzZWQgb24gdGhlIHNhbXBsZSBzaXplLCBidXQgd2UgZG9uJ3Qga25vdyB0aGUgc2FtcGxlCi0JICogc2l6ZSBpbiB0aGlzIGZ1bmN0aW9uLCBzbyB3ZSdsbCBoYXZlIHRvIGFkanVzdCB0aGF0IGxhdGVyLiAgU2VlCi0JICogY29tbWVudHMgaW4gZnNsX2RtYV9wcmVwYXJlKCkuCi0JICoKLQkgKiBUaGUgRE1BIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBhIGNhY2hlLCBzbyB0aGUgQ1BVIGRvZXMgbm90Ci0JICogbmVlZCB0byB0ZWxsIGl0IHRvIGZsdXNoIGl0cyBjYWNoZS4gIEhvd2V2ZXIsIHRoZSBETUEKLQkgKiBjb250cm9sbGVyIGRvZXMgbmVlZCB0byB0ZWxsIHRoZSBDUFUgdG8gZmx1c2ggaXRzIGNhY2hlLgotCSAqIFRoYXQncyB3aGF0IHRoZSBTTk9PUCBiaXQgZG9lcy4KLQkgKgotCSAqIEFsc28sIGV2ZW4gdGhvdWdoIHRoZSBETUEgY29udHJvbGxlciBzdXBwb3J0cyAzNi1iaXQgYWRkcmVzc2luZywgZm9yCi0JICogc2ltcGxpY2l0eSB3ZSBjdXJyZW50bHkgc3VwcG9ydCBvbmx5IDMyLWJpdCBhZGRyZXNzZXMgZm9yIHRoZSBhdWRpbwotCSAqIGJ1ZmZlciBpdHNlbGYuCi0JICovCi0JdGVtcF9hZGRyID0gc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmFkZHI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9MSU5LUzsgaSsrKSB7Ci0JCXN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvciAqbGluayA9ICZkbWFfcHJpdmF0ZS0+bGlua1tpXTsKLQotCQlsaW5rLT5jb3VudCA9IGNwdV90b19iZTMyKHBlcmlvZF9zaXplKTsKLQotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCWxpbmstPnNvdXJjZV9hZGRyID0gY3B1X3RvX2JlMzIodGVtcF9hZGRyKTsKLQkJZWxzZQotCQkJbGluay0+ZGVzdF9hZGRyID0gY3B1X3RvX2JlMzIodGVtcF9hZGRyKTsKLQotCQl0ZW1wX2FkZHIgKz0gcGVyaW9kX3NpemU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZnNsX2RtYV9wcmVwYXJlIC0gcHJlcGFyZSB0aGUgRE1BIHJlZ2lzdGVycyBmb3IgcGxheWJhY2suCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHNwZWNpZmljcyBvZiB0aGUgYXVkaW8gZGF0YSBhcmUga25vd24sCi0gKiBpLmUuIHNuZF9wY21fcnVudGltZSBpcyBpbml0aWFsaXplZC4KLSAqCi0gKiBJbiB0aGlzIGZ1bmN0aW9uLCB3ZSBmaW5pc2ggcHJvZ3JhbW1pbmcgdGhlIHJlZ2lzdGVycyBvZiB0aGUgRE1BCi0gKiBjb250cm9sbGVyIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgc2FtcGxlIHNpemUuCi0gKgotICogT25lIG9mIHRoZSBkcmF3YmFja3Mgd2l0aCBiaWctZW5kaWFuIGlzIHRoYXQgd2hlbiBjb3B5aW5nIGludGVnZXJzIG9mCi0gKiBkaWZmZXJlbnQgc2l6ZXMgdG8gYSBmaXhlZC1zaXplZCByZWdpc3RlciwgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhlCi0gKiBpbnRlZ2VyIG11c3QgYmUgY29waWVkIGlzIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgaW50ZWdlci4KKyAqIE9uZSBkcmF3YmFjayBvZiBiaWctZW5kaWFuIGlzIHRoYXQgd2hlbiBjb3B5aW5nIGludGVnZXJzIG9mIGRpZmZlcmVudAorICogc2l6ZXMgdG8gYSBmaXhlZC1zaXplZCByZWdpc3RlciwgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIGludGVnZXIgbXVzdCBiZQorICogY29waWVkIGlzIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgaW50ZWdlci4KICAqCiAgKiBGb3IgZXhhbXBsZSwgaWYgUCBpcyB0aGUgYWRkcmVzcyBvZiBhIDMyLWJpdCByZWdpc3RlciwgYW5kIFggaXMgYSAzMi1iaXQKICAqIGludGVnZXIsIHRoZW4gWCBzaG91bGQgYmUgY29waWVkIHRvIGFkZHJlc3MgUC4gIEhvd2V2ZXIsIGlmIFggaXMgYSAxNi1iaXQKQEAgLTYxMywyMiArNTQwLDU4IEBACiAgKiBhbmQgOCBieXRlcyBhdCBhIHRpbWUpLiAgU28gd2UgZG8gbm90IHN1cHBvcnQgcGFja2VkIDI0LWJpdCBzYW1wbGVzLgogICogMjQtYml0IGRhdGEgbXVzdCBiZSBwYWRkZWQgdG8gMzIgYml0cy4KICAqLwotc3RhdGljIGludCBmc2xfZG1hX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IGZzbF9kbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IGZzbF9kbWFfcHJpdmF0ZSAqZG1hX3ByaXZhdGUgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNjc3JfZG1hX2NoYW5uZWwgX19pb21lbSAqZG1hX2NoYW5uZWwgPSBkbWFfcHJpdmF0ZS0+ZG1hX2NoYW5uZWw7Ci0JdTMyIG1yOwotCXVuc2lnbmVkIGludCBpOwotCWRtYV9hZGRyX3Qgc3NpX3N4eF9waHlzOwkvKiBCdXMgYWRkcmVzcyBvZiBTU0kgU1RYIHJlZ2lzdGVyICovCi0JdW5zaWduZWQgaW50IGZyYW1lX3NpemU7CS8qIE51bWJlciBvZiBieXRlcyBwZXIgZnJhbWUgKi8KIAotCXNzaV9zeHhfcGh5cyA9IGRtYV9wcml2YXRlLT5zc2lfc3h4X3BoeXM7CisJLyogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSAqLworCXVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZSA9CisJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKSk7CisKKwkvKiBOdW1iZXIgb2YgYnl0ZXMgcGVyIGZyYW1lICovCisJdW5zaWduZWQgaW50IGZyYW1lX3NpemUgPSAyICogKHNhbXBsZV9zaXplIC8gOCk7CisKKwkvKiBCdXMgYWRkcmVzcyBvZiBTU0kgU1RYIHJlZ2lzdGVyICovCisJZG1hX2FkZHJfdCBzc2lfc3h4X3BoeXMgPSBkbWFfcHJpdmF0ZS0+c3NpX3N4eF9waHlzOworCisJLyogU2l6ZSBvZiB0aGUgRE1BIGJ1ZmZlciwgaW4gYnl0ZXMgKi8KKwlzaXplX3QgYnVmZmVyX3NpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7CisKKwkvKiBOdW1iZXIgb2YgYnl0ZXMgcGVyIHBlcmlvZCAqLworCXNpemVfdCBwZXJpb2Rfc2l6ZSA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKKworCS8qIFBvaW50ZXIgdG8gbmV4dCBwZXJpb2QgKi8KKwlkbWFfYWRkcl90IHRlbXBfYWRkciA9IHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hZGRyOworCisJLyogUG9pbnRlciB0byBETUEgY29udHJvbGxlciAqLworCXN0cnVjdCBjY3NyX2RtYV9jaGFubmVsIF9faW9tZW0gKmRtYV9jaGFubmVsID0gZG1hX3ByaXZhdGUtPmRtYV9jaGFubmVsOworCisJdTMyIG1yOyAvKiBETUEgTW9kZSBSZWdpc3RlciAqLworCisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBJbml0aWFsaXplIG91ciBETUEgdHJhY2tpbmcgdmFyaWFibGVzICovCisJZG1hX3ByaXZhdGUtPnBlcmlvZF9zaXplID0gcGVyaW9kX3NpemU7CisJZG1hX3ByaXZhdGUtPm51bV9wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMoaHdfcGFyYW1zKTsKKwlkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9lbmQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzICsgYnVmZmVyX3NpemU7CisJZG1hX3ByaXZhdGUtPmRtYV9idWZfbmV4dCA9IGRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgKworCQkoTlVNX0RNQV9MSU5LUyAqIHBlcmlvZF9zaXplKTsKKworCWlmIChkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9uZXh0ID49IGRtYV9wcml2YXRlLT5kbWFfYnVmX2VuZCkKKwkJLyogVGhpcyBoYXBwZW5zIGlmIHRoZSBudW1iZXIgb2YgcGVyaW9kcyA9PSBOVU1fRE1BX0xJTktTICovCisJCWRtYV9wcml2YXRlLT5kbWFfYnVmX25leHQgPSBkbWFfcHJpdmF0ZS0+ZG1hX2J1Zl9waHlzOwogCiAJbXIgPSBpbl9iZTMyKCZkbWFfY2hhbm5lbC0+bXIpICYgfihDQ1NSX0RNQV9NUl9CV0NfTUFTSyB8CiAJCSAgQ0NTUl9ETUFfTVJfU0FIVFNfTUFTSyB8IENDU1JfRE1BX01SX0RBSFRTX01BU0spOwogCi0Jc3dpdGNoIChydW50aW1lLT5zYW1wbGVfYml0cykgeworCS8qIER1ZSB0byBhIHF1aXJrIG9mIHRoZSBTU0kncyBTVFggcmVnaXN0ZXIsIHRoZSB0YXJnZXQgYWRkcmVzcworCSAqIGZvciB0aGUgRE1BIG9wZXJhdGlvbnMgZGVwZW5kcyBvbiB0aGUgc2FtcGxlIHNpemUuICBTbyB3ZSBjYWxjdWxhdGUKKwkgKiB0aGF0IG9mZnNldCBoZXJlLiAgV2hpbGUgd2UncmUgYXQgaXQsIGFsc28gdGVsbCB0aGUgRE1BIGNvbnRyb2xsZXIKKwkgKiBob3cgbXVjaCBkYXRhIHRvIHRyYW5zZmVyIHBlciBzYW1wbGUuCisJICovCisJc3dpdGNoIChzYW1wbGVfc2l6ZSkgewogCWNhc2UgODoKIAkJbXIgfD0gQ0NTUl9ETUFfTVJfREFIVFNfMSB8IENDU1JfRE1BX01SX1NBSFRTXzE7CiAJCXNzaV9zeHhfcGh5cyArPSAzOwpAQCAtNjQxLDEyICs2MDQsMTIgQEAKIAkJbXIgfD0gQ0NTUl9ETUFfTVJfREFIVFNfNCB8IENDU1JfRE1BX01SX1NBSFRTXzQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwogCQlkZXZfZXJyKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsCi0JCQkidW5zdXBwb3J0ZWQgc2FtcGxlIHNpemUgJXVcbiIsIHJ1bnRpbWUtPnNhbXBsZV9iaXRzKTsKKwkJCSJ1bnN1cHBvcnRlZCBzYW1wbGUgc2l6ZSAldVxuIiwgc2FtcGxlX3NpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmcmFtZV9zaXplID0gcnVudGltZS0+ZnJhbWVfYml0cyAvIDg7CiAJLyoKIAkgKiBCV0Mgc2hvdWxkIGFsd2F5cyBiZSBhIG11bHRpcGxlIG9mIHRoZSBmcmFtZSBzaXplLiAgQldDIGRldGVybWluZXMKIAkgKiBob3cgbWFueSBieXRlcyBhcmUgc2VudC9yZWNlaXZlZCBiZWZvcmUgdGhlIERNQSBjb250cm9sbGVyIGNoZWNrcyB0aGUKQEAgLTY1NSw3ICs2MTgsNiBAQAogCSAqIGNhcHR1cmUsIHRoZSByZWNlaXZlIEZJRk8gaXMgdHJpZ2dlcmVkIHdoZW4gaXQgY29udGFpbnMgb25lIGZyYW1lLCBzbwogCSAqIHdlIHdhbnQgdG8gcmVjZWl2ZSBvbmUgZnJhbWUgYXQgYSB0aW1lLgogCSAqLwotCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCW1yIHw9IENDU1JfRE1BX01SX0JXQygyICogZnJhbWVfc2l6ZSk7CiAJZWxzZQpAQCAtNjYzLDE2ICs2MjUsNDggQEAKIAogCW91dF9iZTMyKCZkbWFfY2hhbm5lbC0+bXIsIG1yKTsKIAotCS8qCi0JICogUHJvZ3JhbSB0aGUgYWRkcmVzcyBvZiB0aGUgRE1BIHRyYW5zZmVyIHRvL2Zyb20gdGhlIFNTSS4KLQkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9MSU5LUzsgaSsrKSB7CiAJCXN0cnVjdCBmc2xfZG1hX2xpbmtfZGVzY3JpcHRvciAqbGluayA9ICZkbWFfcHJpdmF0ZS0+bGlua1tpXTsKIAotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJbGluay0+Y291bnQgPSBjcHVfdG9fYmUzMihwZXJpb2Rfc2l6ZSk7CisKKwkJLyogRXZlbiB0aG91Z2ggdGhlIERNQSBjb250cm9sbGVyIHN1cHBvcnRzIDM2LWJpdCBhZGRyZXNzaW5nLAorCQkgKiBmb3Igc2ltcGxpY2l0eSB3ZSBhbGxvdyBvbmx5IDMyLWJpdCBhZGRyZXNzZXMgZm9yIHRoZSBhdWRpbworCQkgKiBidWZmZXIgaXRzZWxmLiAgVGhpcyB3YXMgZW5mb3JjZWQgaW4gZnNsX2RtYV9uZXcoKSB3aXRoIHRoZQorCQkgKiBETUEgbWFzay4KKwkJICoKKwkJICogVGhlIHNub29wIGJpdCB0ZWxscyB0aGUgRE1BIGNvbnRyb2xsZXIgd2hldGhlciBpdCBzaG91bGQgdGVsbAorCQkgKiB0aGUgRUNNIHRvIHNub29wIGR1cmluZyBhIHJlYWQgb3Igd3JpdGUgdG8gYW4gYWRkcmVzcy4gRm9yCisJCSAqIGF1ZGlvLCB3ZSB1c2UgRE1BIHRvIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBtZW1vcnkgYW5kIGFuIEkvTworCQkgKiBkZXZpY2UgKHRoZSBTU0kncyBTVFgwIG9yIFNSWDAgcmVnaXN0ZXIpLiBTbm9vcGluZyBpcyBvbmx5CisJCSAqIG5lZWRlZCBpZiB0aGVyZSBpcyBhIGNhY2hlLCBzbyB3ZSBuZWVkIHRvIHNub29wIG1lbW9yeQorCQkgKiBhZGRyZXNzZXMgb25seS4gIEZvciBwbGF5YmFjaywgdGhhdCBtZWFucyB3ZSBzbm9vcCB0aGUgc291cmNlCisJCSAqIGJ1dCBub3QgdGhlIGRlc3RpbmF0aW9uLiAgRm9yIGNhcHR1cmUsIHdlIHNub29wIHRoZQorCQkgKiBkZXN0aW5hdGlvbiBidXQgbm90IHRoZSBzb3VyY2UuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBmYWlsaW5nIHRvIHNub29wIHByb3Blcmx5IGlzIHVubGlrZWx5IHRvIGNhdXNlCisJCSAqIGNhY2hlIGluY29oZXJlbmN5IGlmIHRoZSBwZXJpb2Qgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUKKwkJICogc2l6ZSBvZiBMMSBjYWNoZS4gIFRoaXMgaXMgYmVjYXVzZSBmaWxsaW5nIGluIG9uZSBwZXJpb2Qgd2lsbAorCQkgKiBmbHVzaCBvdXQgdGhlIGRhdGEgZm9yIHRoZSBwcmV2aW91cyBwZXJpb2QuICBTbyBpZiB5b3UKKwkJICogaW5jcmVhc2VkIHBlcmlvZF9ieXRlc19taW4gdG8gYSBsYXJnZSBlbm91Z2ggc2l6ZSwgeW91IG1pZ2h0CisJCSAqIGdldCBtb3JlIHBlcmZvcm1hbmNlIGJ5IG5vdCBzbm9vcGluZywgYW5kIHlvdSdsbCBzdGlsbCBiZQorCQkgKiBva2F5LgorCQkgKi8KKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCWxpbmstPnNvdXJjZV9hZGRyID0gY3B1X3RvX2JlMzIodGVtcF9hZGRyKTsKKwkJCWxpbmstPnNvdXJjZV9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX1NOT09QKTsKKwogCQkJbGluay0+ZGVzdF9hZGRyID0gY3B1X3RvX2JlMzIoc3NpX3N4eF9waHlzKTsKLQkJZWxzZQorCQkJbGluay0+ZGVzdF9hdHRyID0gY3B1X3RvX2JlMzIoQ0NTUl9ETUFfQVRSX05PU05PT1ApOworCQl9IGVsc2UgewogCQkJbGluay0+c291cmNlX2FkZHIgPSBjcHVfdG9fYmUzMihzc2lfc3h4X3BoeXMpOworCQkJbGluay0+c291cmNlX2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfTk9TTk9PUCk7CisKKwkJCWxpbmstPmRlc3RfYWRkciA9IGNwdV90b19iZTMyKHRlbXBfYWRkcik7CisJCQlsaW5rLT5kZXN0X2F0dHIgPSBjcHVfdG9fYmUzMihDQ1NSX0RNQV9BVFJfU05PT1ApOworCQl9CisKKwkJdGVtcF9hZGRyICs9IHBlcmlvZF9zaXplOwogCX0KIAogCXJldHVybiAwOwpAQCAtODA4LDcgKzgwMiw2IEBACiAJLmlvY3RsICAJPSBzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zICAgICAgPSBmc2xfZG1hX2h3X3BhcmFtcywKIAkuaHdfZnJlZQk9IGZzbF9kbWFfaHdfZnJlZSwKLQkucHJlcGFyZQk9IGZzbF9kbWFfcHJlcGFyZSwKIAkucG9pbnRlcgk9IGZzbF9kbWFfcG9pbnRlciwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKaW5kZXggYzZkNmViNy4uMTY5YmNhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqIEBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlcgogICogQHBsYXliYWNrOiB0aGUgbnVtYmVyIG9mIHBsYXliYWNrIHN0cmVhbXMgb3BlbmVkCiAgKiBAY2FwdHVyZTogdGhlIG51bWJlciBvZiBjYXB0dXJlIHN0cmVhbXMgb3BlbmVkCisgKiBAYXN5bmNocm9ub3VzOiAwPXN5bmNocm9ub3VzIG1vZGUsIDE9YXN5bmNocm9ub3VzIG1vZGUKICAqIEBjcHVfZGFpOiB0aGUgQ1BVIERBSSBmb3IgdGhpcyBkZXZpY2UKICAqIEBkZXZfYXR0cjogdGhlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0dXJlCiAgKiBAc3RhdHM6IFNTSSBzdGF0aXN0aWNzCkBAIC04Niw2ICs4Nyw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCXVuc2lnbmVkIGludCBwbGF5YmFjazsKIAl1bnNpZ25lZCBpbnQgY2FwdHVyZTsKKwlpbnQgYXN5bmNocm9ub3VzOwogCXN0cnVjdCBzbmRfc29jX2RhaSBjcHVfZGFpOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyOwogCkBAIC0zMDEsOSArMzAzLDEwIEBACiAJCSAqCiAJCSAqIEZJWE1FOiBMaXR0bGUtZW5kaWFuIHNhbXBsZXMgcmVxdWlyZSBhIGRpZmZlcmVudCBzaGlmdCBkaXIKIAkJICovCi0JCWNscnNldGJpdHNfYmUzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9JMlNfTU9ERV9NQVNLLAotCQkJQ0NTUl9TU0lfU0NSX1RGUl9DTEtfRElTIHwKLQkJCUNDU1JfU1NJX1NDUl9JMlNfTU9ERV9TTEFWRSB8IENDU1JfU1NJX1NDUl9TWU4pOworCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c2NyLAorCQkJQ0NTUl9TU0lfU0NSX0kyU19NT0RFX01BU0sgfCBDQ1NSX1NTSV9TQ1JfU1lOLAorCQkJQ0NTUl9TU0lfU0NSX1RGUl9DTEtfRElTIHwgQ0NTUl9TU0lfU0NSX0kyU19NT0RFX1NMQVZFCisJCQl8IChzc2lfcHJpdmF0ZS0+YXN5bmNocm9ub3VzID8gMCA6IENDU1JfU1NJX1NDUl9TWU4pKTsKIAogCQlvdXRfYmUzMigmc3NpLT5zdGNyLAogCQkJIENDU1JfU1NJX1NUQ1JfVFhCSVQwIHwgQ0NTUl9TU0lfU1RDUl9URkVOMCB8CkBAIC0zODIsMTAgKzM4NSwxNSBAQAogCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCiAJCQlmaXJzdF9ydW50aW1lLT5yYXRlLCBmaXJzdF9ydW50aW1lLT5yYXRlKTsKIAotCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKLQkJCVNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUywKLQkJCWZpcnN0X3J1bnRpbWUtPnNhbXBsZV9iaXRzLAotCQkJZmlyc3RfcnVudGltZS0+c2FtcGxlX2JpdHMpOworCQkvKiBJZiB3ZSdyZSBpbiBzeW5jaHJvbm91cyBtb2RlLCB0aGVuIHdlIG5lZWQgdG8gY29uc3RyYWluCisJCSAqIHRoZSBzYW1wbGUgc2l6ZSBhcyB3ZWxsLiAgV2UgZG9uJ3Qgc3VwcG9ydCBpbmRlcGVuZGVudCBzYW1wbGUKKwkJICogcmF0ZXMgaW4gYXN5bmNocm9ub3VzIG1vZGUuCisJCSAqLworCQlpZiAoIXNzaV9wcml2YXRlLT5hc3luY2hyb25vdXMpCisJCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMsCisJCQkJZmlyc3RfcnVudGltZS0+c2FtcGxlX2JpdHMsCisJCQkJZmlyc3RfcnVudGltZS0+c2FtcGxlX2JpdHMpOwogCiAJCXNzaV9wcml2YXRlLT5zZWNvbmRfc3RyZWFtID0gc3Vic3RyZWFtOwogCX0KQEAgLTQwMCw3ICs0MDgsNyBAQAogfQogCiAvKioKLSAqIGZzbF9zc2lfcHJlcGFyZTogcHJlcGFyZSB0aGUgU1NJLgorICogZnNsX3NzaV9od19wYXJhbXMgLSBwcm9ncmFtIHRoZSBzYW1wbGUgc2l6ZQogICoKICAqIE1vc3Qgb2YgdGhlIFNTSSByZWdpc3RlcnMgaGF2ZSBiZWVuIHByb2dyYW1tZWQgaW4gdGhlIHN0YXJ0dXAgZnVuY3Rpb24sCiAgKiBidXQgdGhlIHdvcmQgbGVuZ3RoIG11c3QgYmUgcHJvZ3JhbW1lZCBoZXJlLiAgVW5mb3J0dW5hdGVseSwgcHJvZ3JhbW1pbmcKQEAgLTQxMiwyMyArNDIwLDI3IEBACiAgKiBOb3RlOiBUaGUgU3hDQ1IuREMgYW5kIFN4Q0NSLlBNIGJpdHMgYXJlIG9ubHkgdXNlZCBpZiB0aGUgU1NJIGlzIHRoZQogICogY2xvY2sgbWFzdGVyLgogICovCi1zdGF0aWMgaW50IGZzbF9zc2lfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorc3RhdGljIGludCBmc2xfc3NpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQogewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBmc2xfc3NpX3ByaXZhdGUgKnNzaV9wcml2YXRlID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQotCXN0cnVjdCBjY3NyX3NzaSBfX2lvbWVtICpzc2kgPSBzc2lfcHJpdmF0ZS0+c3NpOworCXN0cnVjdCBmc2xfc3NpX3ByaXZhdGUgKnNzaV9wcml2YXRlID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHN1YnN0cmVhbSA9PSBzc2lfcHJpdmF0ZS0+Zmlyc3Rfc3RyZWFtKSB7Ci0JCXUzMiB3bDsKKwkJc3RydWN0IGNjc3Jfc3NpIF9faW9tZW0gKnNzaSA9IHNzaV9wcml2YXRlLT5zc2k7CisJCXVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZSA9CisJCQlzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcykpOworCQl1MzIgd2wgPSBDQ1NSX1NTSV9TeENDUl9XTChzYW1wbGVfc2l6ZSk7CiAKIAkJLyogVGhlIFNTSSBzaG91bGQgYWx3YXlzIGJlIGRpc2FibGVkIGF0IHRoaXMgcG9pbnRzIChTU0lFTj0wKSAqLwotCQl3bCA9IENDU1JfU1NJX1N4Q0NSX1dMKHNuZF9wY21fZm9ybWF0X3dpZHRoKHJ1bnRpbWUtPmZvcm1hdCkpOwogCiAJCS8qIEluIHN5bmNocm9ub3VzIG1vZGUsIHRoZSBTU0kgdXNlcyBTVENDUiBmb3IgY2FwdHVyZSAqLwotCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c3RjY3IsIENDU1JfU1NJX1N4Q0NSX1dMX01BU0ssIHdsKTsKKwkJaWYgKChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB8fAorCQkgICAgIXNzaV9wcml2YXRlLT5hc3luY2hyb25vdXMpCisJCQljbHJzZXRiaXRzX2JlMzIoJnNzaS0+c3RjY3IsCisJCQkJCUNDU1JfU1NJX1N4Q0NSX1dMX01BU0ssIHdsKTsKKwkJZWxzZQorCQkJY2xyc2V0Yml0c19iZTMyKCZzc2ktPnNyY2NyLAorCQkJCQlDQ1NSX1NTSV9TeENDUl9XTF9NQVNLLCB3bCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NTIsMjggKzQ2NCwzMyBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCQljbHJiaXRzMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfU1NJRU4pOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKIAkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJCWNscmJpdHMzMigmc3NpLT5zY3IsIENDU1JfU1NJX1NDUl9TU0lFTik7CiAJCQlzZXRiaXRzMzIoJnNzaS0+c2NyLAogCQkJCUNDU1JfU1NJX1NDUl9TU0lFTiB8IENDU1JfU1NJX1NDUl9URSk7CiAJCX0gZWxzZSB7Ci0JCQljbHJiaXRzMzIoJnNzaS0+c2NyLCBDQ1NSX1NTSV9TQ1JfU1NJRU4pOworCQkJbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwOworCiAJCQlzZXRiaXRzMzIoJnNzaS0+c2NyLAogCQkJCUNDU1JfU1NJX1NDUl9TU0lFTiB8IENDU1JfU1NJX1NDUl9SRSk7CiAKLQkJCS8qCi0JCQkgKiBJIHRoaW5rIHdlIG5lZWQgdGhpcyBkZWxheSB0byBhbGxvdyB0aW1lIGZvciB0aGUgU1NJCi0JCQkgKiB0byBwdXQgZGF0YSBpbnRvIGl0cyBGSUZPLiAgV2l0aG91dCBpdCwgQUxTQSBzdGFydHMKLQkJCSAqIHRvIGNvbXBsYWluIGFib3V0IG92ZXJydW5zLgorCQkJLyogV2FpdCB1bnRpbCB0aGUgU1NJIGhhcyBmaWxsZWQgaXRzIEZJRk8uIFdpdGhvdXQgdGhpcworCQkJICogZGVsYXksIEFMU0EgY29tcGxhaW5zIGFib3V0IG92ZXJydW5zLiAgV2hlbiB0aGUgRklGTworCQkJICogaXMgZnVsbCwgdGhlIERNQSBjb250cm9sbGVyIGluaXRpYXRlcyBpdHMgZmlyc3QKKwkJCSAqIHRyYW5zZmVyLiAgVW50aWwgdGhlbiwgaG93ZXZlciwgdGhlIERNQSdzIERBUgorCQkJICogcmVnaXN0ZXIgaXMgemVybywgd2hpY2ggdHJhbnNsYXRlcyB0byBhbgorCQkJICogb3V0LW9mLWJvdW5kcyBwb2ludGVyLiAgVGhpcyBtYWtlcyBBTFNBIHRoaW5rIGFuCisJCQkgKiBvdmVycnVuIGhhcyBvY2N1cnJlZC4KIAkJCSAqLwotCQkJbWRlbGF5KDEpOworCQkJd2hpbGUgKCEoaW5fYmUzMigmc3NpLT5zaXNyKSAmIENDU1JfU1NJX1NJU1JfUkZGMCkgJiYKKwkJCSAgICAgICAoamlmZmllcyA8IHRpbWVvdXQpKTsKKwkJCWlmICghKGluX2JlMzIoJnNzaS0+c2lzcikgJiBDQ1NSX1NTSV9TSVNSX1JGRjApKQorCQkJCXJldHVybiAtRUlPOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CiAJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQkJY2xyYml0czMyKCZzc2ktPnNjciwgQ0NTUl9TU0lfU0NSX1RFKTsKQEAgLTU2Myw2ICs1ODAsMTUgQEAKIC8qKgogICogZnNsX3NzaV9kYWlfdGVtcGxhdGU6IHRlbXBsYXRlIENQVSBEQUkgZm9yIHRoZSBTU0kKICAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZnNsX3NzaV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gZnNsX3NzaV9zdGFydHVwLAorCS5od19wYXJhbXMJPSBmc2xfc3NpX2h3X3BhcmFtcywKKwkuc2h1dGRvd24JPSBmc2xfc3NpX3NodXRkb3duLAorCS50cmlnZ2VyCT0gZnNsX3NzaV90cmlnZ2VyLAorCS5zZXRfc3lzY2xrCT0gZnNsX3NzaV9zZXRfc3lzY2xrLAorCS5zZXRfZm10CT0gZnNsX3NzaV9zZXRfZm10LAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBmc2xfc3NpX2RhaV90ZW1wbGF0ZSA9IHsKIAkucGxheWJhY2sgPSB7CiAJCS8qIFRoZSBTU0kgZG9lcyBub3Qgc3VwcG9ydCBtb25hdXJhbCBhdWRpby4gKi8KQEAgLTU3NywxNCArNjAzLDcgQEAKIAkJLnJhdGVzID0gRlNMU1NJX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBGU0xTU0lfSTJTX0ZPUk1BVFMsCiAJfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IGZzbF9zc2lfc3RhcnR1cCwKLQkJLnByZXBhcmUgPSBmc2xfc3NpX3ByZXBhcmUsCi0JCS5zaHV0ZG93biA9IGZzbF9zc2lfc2h1dGRvd24sCi0JCS50cmlnZ2VyID0gZnNsX3NzaV90cmlnZ2VyLAotCQkuc2V0X3N5c2NsayA9IGZzbF9zc2lfc2V0X3N5c2NsaywKLQkJLnNldF9mbXQgPSBmc2xfc3NpX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJmZzbF9zc2lfZGFpX29wcywKIH07CiAKIC8qKgpAQCAtNjU0LDYgKzY3Myw3IEBACiAJc3NpX3ByaXZhdGUtPnNzaV9waHlzID0gc3NpX2luZm8tPnNzaV9waHlzOwogCXNzaV9wcml2YXRlLT5pcnEgPSBzc2lfaW5mby0+aXJxOwogCXNzaV9wcml2YXRlLT5kZXYgPSBzc2lfaW5mby0+ZGV2OworCXNzaV9wcml2YXRlLT5hc3luY2hyb25vdXMgPSBzc2lfaW5mby0+YXN5bmNocm9ub3VzOwogCiAJc3NpX3ByaXZhdGUtPmRldi0+ZHJpdmVyX2RhdGEgPSBmc2xfc3NpX2RhaTsKIApAQCAtNzA0LDYgKzcyNCwxNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnNsX3NzaV9kZXN0cm95X2RhaSk7CiAKK3N0YXRpYyBpbnQgX19pbml0IGZzbF9zc2lfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkZyZWVzY2FsZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlIChTU0kpIEFTb0MgRHJpdmVyXG4iKTsKKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZnNsX3NzaV9pbml0KTsKKwogTU9EVUxFX0FVVEhPUigiVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIFN5bmNocm9ub3VzIFNlcmlhbCBJbnRlcmZhY2UgKFNTSSkgQVNvQyBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5oIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmgKaW5kZXggODNiNDRkNy4uZWFkZTAxZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmgKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogICogc3NpX3BoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFNTSSByZWdpc3RlcnMKICAqIGlycTogSVJRIG9mIHRoaXMgU1NJCiAgKiBkZXY6IHN0cnVjdCBkZXZpY2UsIHVzZWQgdG8gY3JlYXRlIHRoZSBzeXNmcyBzdGF0aXN0aWNzIGZpbGUKKyAqIGFzeW5jaHJvbm91czogMD1zeW5jaHJvbm91cyBtb2RlLCAxPWFzeW5jaHJvbm91cyBtb2RlCiAqLwogc3RydWN0IGZzbF9zc2lfaW5mbyB7CiAJdW5zaWduZWQgaW50IGlkOwpAQCAtMjE1LDYgKzIxNiw3IEBACiAJZG1hX2FkZHJfdCBzc2lfcGh5czsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgYXN5bmNocm9ub3VzOwogfTsKIAogc3RydWN0IHNuZF9zb2NfZGFpICpmc2xfc3NpX2NyZWF0ZV9kYWkoc3RydWN0IGZzbF9zc2lfaW5mbyAqc3NpX2luZm8pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYyBiL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMKaW5kZXggOWViMWNlMS4uM2FhNzI5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYworKysgYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5jCkBAIC00NjgsNiArNDY4LDE2IEBACiAvKioKICAqIHBzY19pMnNfZGFpX3RlbXBsYXRlOiB0ZW1wbGF0ZSBDUFUgRGlnaXRhbCBBdWRpbyBJbnRlcmZhY2UKICAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHNjX2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gcHNjX2kyc19zdGFydHVwLAorCS5od19wYXJhbXMJPSBwc2NfaTJzX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHBzY19pMnNfaHdfZnJlZSwKKwkuc2h1dGRvd24JPSBwc2NfaTJzX3NodXRkb3duLAorCS50cmlnZ2VyCT0gcHNjX2kyc190cmlnZ2VyLAorCS5zZXRfc3lzY2xrCT0gcHNjX2kyc19zZXRfc3lzY2xrLAorCS5zZXRfZm10CT0gcHNjX2kyc19zZXRfZm10LAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBwc2NfaTJzX2RhaV90ZW1wbGF0ZSA9IHsKIAkucGxheWJhY2sgPSB7CiAJCS5jaGFubmVsc19taW4gPSAyLApAQCAtNDgxLDE1ICs0OTEsNyBAQAogCQkucmF0ZXMgPSBQU0NfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFBTQ19JMlNfRk9STUFUUywKIAl9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gcHNjX2kyc19zdGFydHVwLAotCQkuaHdfcGFyYW1zID0gcHNjX2kyc19od19wYXJhbXMsCi0JCS5od19mcmVlID0gcHNjX2kyc19od19mcmVlLAotCQkuc2h1dGRvd24gPSBwc2NfaTJzX3NodXRkb3duLAotCQkudHJpZ2dlciA9IHBzY19pMnNfdHJpZ2dlciwKLQkJLnNldF9zeXNjbGsgPSBwc2NfaTJzX3NldF9zeXNjbGssCi0JCS5zZXRfZm10ID0gcHNjX2kyc19zZXRfZm10LAotCX0sCisJLm9wcyA9ICZwc2NfaTJzX2RhaV9vcHMsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMgYi9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCmluZGV4IGFjZjM5YTYuLmVmNjdkMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYwpAQCAtMzUzLDYgKzM1MywxMSBAQAogCX0KIAlzc2lfaW5mby5pcnEgPSBtYWNoaW5lX2RhdGEtPnNzaV9pcnE7CiAKKwkvKiBEbyB3ZSB3YW50IHRvIHVzZSBhc3luY2hyb25vdXMgbW9kZT8gKi8KKwlzc2lfaW5mby5hc3luY2hyb25vdXMgPQorCQlvZl9maW5kX3Byb3BlcnR5KG5wLCAiZnNsLHNzaS1hc3luY2hyb25vdXMiLCBOVUxMKSA/IDEgOiAwOworCWlmIChzc2lfaW5mby5hc3luY2hyb25vdXMpCisJCWRldl9pbmZvKCZvZmRldi0+ZGV2LCAidXNpbmcgYXN5bmNocm9ub3VzIG1vZGVcbiIpOwogCiAJLyogTWFwIHRoZSBnbG9iYWwgdXRpbGl0aWVzIHJlZ2lzdGVycy4gKi8KIAlndXRzX25wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxtcGM4NjEwLWd1dHMiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCmluZGV4IDRmN2YwNDAuLjY3NTczMmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKKysrIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIAogY29uZmlnIFNORF9PTUFQX1NPQ19OODEwCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBOb2tpYSBOODEwIgotCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfTk9LSUFfTjgxMAorCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfTk9LSUFfTjgxMCAmJiBJMkMKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IE9NQVBfTVVYCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKQEAgLTE3LDcgKzE3LDcgQEAKIAogY29uZmlnIFNORF9PTUFQX1NPQ19PU0s1OTEyCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBvbWFwIG9zazU5MTIiCi0JZGVwZW5kcyBvbiBTTkRfT01BUF9TT0MgJiYgTUFDSF9PTUFQX09TSworCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfT01BUF9PU0sgJiYgSTJDCiAJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzIzCiAJaGVscApAQCAtNTUsMyArNTUsMTMgQEAKIAlzZWxlY3QgU05EX1NPQ19UV0w0MDMwCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgT01BUDMgUGFuZG9yYS4KKworY29uZmlnIFNORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE9NQVAzIEJlYWdsZSIKKwlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRSAmJiBTTkRfT01BUF9TT0MgJiYgTUFDSF9PTUFQM19CRUFHTEUKKwlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCisJc2VsZWN0IFNORF9TT0NfVFdMNDAzMAorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIEJlYWdsZWJvYXJkLgorCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlIGIvc291bmQvc29jL29tYXAvTWFrZWZpbGUKaW5kZXggNzZmZWRkOS4uMGM5ZTRhYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL29tYXAvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDcgQEAKIHNuZC1zb2Mtb21hcDJldm0tb2JqcyA6PSBvbWFwMmV2bS5vCiBzbmQtc29jLXNkcDM0MzAtb2JqcyA6PSBzZHAzNDMwLm8KIHNuZC1zb2Mtb21hcDNwYW5kb3JhLW9ianMgOj0gb21hcDNwYW5kb3JhLm8KK3NuZC1zb2Mtb21hcDNiZWFnbGUtb2JqcyA6PSBvbWFwM2JlYWdsZS5vCiAKIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfTjgxMCkgKz0gc25kLXNvYy1uODEwLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT1NLNTkxMikgKz0gc25kLXNvYy1vc2s1OTEyLm8KQEAgLTE5LDMgKzIwLDQgQEAKIG9iai0kKENPTkZJR19NQUNIX09NQVAyRVZNKSArPSBzbmQtc29jLW9tYXAyZXZtLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMCkgKz0gc25kLXNvYy1zZHAzNDMwLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfUEFORE9SQSkgKz0gc25kLXNvYy1vbWFwM3BhbmRvcmEubworb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUpICs9IHNuZC1zb2Mtb21hcDNiZWFnbGUubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvbjgxMC5jIGIvc291bmQvc29jL29tYXAvbjgxMC5jCmluZGV4IDI1NTkzZmUuLmE2ZDExNzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL244MTAuYworKysgYi9zb3VuZC9zb2Mvb21hcC9uODEwLmMKQEAgLTQwLDYgKzQwLDEzIEBACiAjZGVmaW5lIE44MTBfSEVBRFNFVF9BTVBfR1BJTwkxMAogI2RlZmluZSBOODEwX1NQRUFLRVJfQU1QX0dQSU8JMTAxCiAKK2VudW0geworCU44MTBfSkFDS19ESVNBQkxFRCwKKwlOODEwX0pBQ0tfSFAsCisJTjgxMF9KQUNLX0hTLAorCU44MTBfSkFDS19NSUMsCit9OworCiBzdGF0aWMgc3RydWN0IGNsayAqc3lzX2Nsa291dDI7CiBzdGF0aWMgc3RydWN0IGNsayAqc3lzX2Nsa291dDJfc3JjOwogc3RhdGljIHN0cnVjdCBjbGsgKmZ1bmM5Nm1fY2xrOwpAQCAtNTAsMTUgKzU3LDMyIEBACiAKIHN0YXRpYyB2b2lkIG44MTBfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCWludCBocCA9IDAsIGxpbmUxbCA9IDA7CisKKwlzd2l0Y2ggKG44MTBfamFja19mdW5jKSB7CisJY2FzZSBOODEwX0pBQ0tfSFM6CisJCWxpbmUxbCA9IDE7CisJY2FzZSBOODEwX0pBQ0tfSFA6CisJCWhwID0gMTsKKwkJYnJlYWs7CisJY2FzZSBOODEwX0pBQ0tfTUlDOgorCQlsaW5lMWwgPSAxOworCQlicmVhazsKKwl9CisKIAlpZiAobjgxMF9zcGtfZnVuYykKIAkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CiAJZWxzZQogCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CiAKLQlpZiAobjgxMF9qYWNrX2Z1bmMpCisJaWYgKGhwKQogCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7CiAJZWxzZQogCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOworCWlmIChsaW5lMWwpCisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTElORTFMIik7CisJZWxzZQorCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMSU5FMUwiKTsKIAogCWlmIChuODEwX2RtaWNfZnVuYykKIAkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJETWljIik7CkBAIC03Miw3ICs5Niw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwKIAkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgMiwgMik7CkBAIC0yMjksNyArMjUzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzcGtfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIk9uIn07Ci1zdGF0aWMgY29uc3QgY2hhciAqamFja19mdW5jdGlvbltdID0geyJPZmYiLCAiSGVhZHBob25lIn07CitzdGF0aWMgY29uc3QgY2hhciAqamFja19mdW5jdGlvbltdID0geyJPZmYiLCAiSGVhZHBob25lIiwgIkhlYWRzZXQiLCAiTWljIn07CiBzdGF0aWMgY29uc3QgY2hhciAqaW5wdXRfZnVuY3Rpb25bXSA9IHsiQURDIiwgIkRpZ2l0YWwgTWljIn07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIG44MTBfZW51bVtdID0gewogCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShzcGtfZnVuY3Rpb24pLCBzcGtfZnVuY3Rpb24pLApAQCAtMjQ4LDIwICsyNzIsMjMgQEAKIAogc3RhdGljIGludCBuODEwX2FpYzMzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCS8qIE5vdCBjb25uZWN0ZWQgKi8KIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT19MT1VUIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQTENPTSIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUFJDT00iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDM0wiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDM1IiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTFSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUyTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMlIiKTsKIAogCS8qIEFkZCBOODEwIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljMzNfbjgxMF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmYWljMzNfbjgxMF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgYWljMzNfbjgxMF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFpYzMzX244MTBfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBOODEwIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBhaWMzM19kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggMDVkZDVhYi4uZDY4ODJiZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtNDYxLDYgKzQ2MSwxNiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG9tYXBfbWNic3BfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IG9tYXBfbWNic3BfZGFpX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gb21hcF9tY2JzcF9kYWlfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBvbWFwX21jYnNwX2RhaV90cmlnZ2VyLAorCS5od19wYXJhbXMJPSBvbWFwX21jYnNwX2RhaV9od19wYXJhbXMsCisJLnNldF9mbXQJPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IG9tYXBfbWNic3BfZGFpX3NldF9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX3N5c2NsaywKK307CisKICNkZWZpbmUgT01BUF9NQ0JTUF9EQUlfQlVJTERFUihsaW5rX2lkKQkJCQlcCiB7CQkJCQkJCQlcCiAJLm5hbWUgPSAib21hcC1tY2JzcC1kYWktIiNsaW5rX2lkLAkJCVwKQEAgLTQ3NywxNSArNDg3LDcgQEAKIAkJLnJhdGVzID0gT01BUF9NQ0JTUF9SQVRFUywJCQlcCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCQlcCiAJfSwJCQkJCQkJXAotCS5vcHMgPSB7CQkJCQkJXAotCQkuc3RhcnR1cCA9IG9tYXBfbWNic3BfZGFpX3N0YXJ0dXAsCQlcCi0JCS5zaHV0ZG93biA9IG9tYXBfbWNic3BfZGFpX3NodXRkb3duLAkJXAotCQkudHJpZ2dlciA9IG9tYXBfbWNic3BfZGFpX3RyaWdnZXIsCQlcCi0JCS5od19wYXJhbXMgPSBvbWFwX21jYnNwX2RhaV9od19wYXJhbXMsCQlcCi0JCS5zZXRfZm10ID0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9mbXQsCQlcCi0JCS5zZXRfY2xrZGl2ID0gb21hcF9tY2JzcF9kYWlfc2V0X2Nsa2RpdiwJXAotCQkuc2V0X3N5c2NsayA9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfc3lzY2xrLAlcCi0JfSwJCQkJCQkJXAorCS5vcHMgPSAmb21hcF9tY2JzcF9kYWlfb3BzLAkJCQlcCiAJLnByaXZhdGVfZGF0YSA9ICZtY2JzcF9kYXRhWyhsaW5rX2lkKV0uYnVzX2lkLAkJXAogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwppbmRleCBkZDNiYjI5Li44ZTE0MzFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQkJCSAgICAgcnVudGltZS0+ZG1hX2J5dGVzKTsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIG9tYXBfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgb21hcF9wY21fb3BzID0gewogCS5vcGVuCQk9IG9tYXBfcGNtX29wZW4sCiAJLmNsb3NlCQk9IG9tYXBfcGNtX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jIGIvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKaW5kZXggZmNjMmY1ZC4uZmUyODJkNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG9tYXAzcGFuZG9yYV9pbl9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsKSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoaW50ZXJuYWwpIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX01JQygiTWljIChleHRlcm5hbCkiLCBOVUxMKSwKIAlTTkRfU09DX0RBUE1fTElORSgiTGluZSBJbiIsIE5VTEwpLAogfTsKQEAgLTE1NSwxNiArMTU1LDMzIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBvbWFwM3BhbmRvcmFfaW5fbWFwW10gPSB7Ci0JeyJJTkwiLCBOVUxMLCAiTGluZSBJbiJ9LAotCXsiSU5SIiwgTlVMTCwgIkxpbmUgSW4ifSwKLQl7IklOTCIsIE5VTEwsICJNaWMgKEludGVybmFsKSJ9LAotCXsiSU5SIiwgTlVMTCwgIk1pYyAoZXh0ZXJuYWwpIn0sCisJeyJBVVhMIiwgTlVMTCwgIkxpbmUgSW4ifSwKKwl7IkFVWFIiLCBOVUxMLCAiTGluZSBJbiJ9LAorCisJeyJNQUlOTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDEifSwKKwl7Ik1pYyBCaWFzIDEiLCBOVUxMLCAiTWljIChpbnRlcm5hbCkifSwKKworCXsiU1VCTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDIifSwKKwl7Ik1pYyBCaWFzIDIiLCBOVUxMLCAiTWljIChleHRlcm5hbCkifSwKIH07CiAKIHN0YXRpYyBpbnQgb21hcDNwYW5kb3JhX291dF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlpbnQgcmV0OwogCisJLyogQWxsIFRXTDQwMzAgb3V0cHV0IHBpbnMgYXJlIGZsb2F0aW5nICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJFQVJQSUVDRSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRUwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT0wiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFNPUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGUiIpOworCiAJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMsCiAJCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0cykpOwogCWlmIChyZXQgPCAwKQpAQCAtMTgwLDE4ICsxOTcsMTEgQEAKIHsKIAlpbnQgcmV0OwogCi0JLyogQWxsIFRXTDQwMzAgb3V0cHV0IHBpbnMgYXJlIGZsb2F0aW5nICovCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVEwiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUUiIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJFQVJQSUVDRSIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRUwiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVSIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTT0wiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFNPUiIpLAotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKSwKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZMIiksCi0Jc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGUiIpLAorCS8qIE5vdCBjb21ubmVjdGVkICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhTTUlDIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVE1JQyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMSIpOwogCiAJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgb21hcDNwYW5kb3JhX2luX2RhcG1fd2lkZ2V0cywKIAkJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9pbl9kYXBtX3dpZGdldHMpKTsKQEAgLTI1MSwxMCArMjYxLDkgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFtYWNoaW5lX2lzX29tYXAzX3BhbmRvcmEoKSkgewotCQlwcl9kZWJ1ZyhQUkVGSVggIk5vdCBPTUFQMyBQYW5kb3JhXG4iKTsKKwlpZiAoIW1hY2hpbmVfaXNfb21hcDNfcGFuZG9yYSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisKIAlwcl9pbmZvKCJPTUFQMyBQYW5kb3JhIFNvQyBpbml0XG4iKTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdChPTUFQM19QQU5ET1JBX0RBQ19QT1dFUl9HUElPLCAiZGFjX3Bvd2VyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMgYi9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKaW5kZXggY2Q0MWE5NC4uYTk1MmE0ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb3NrNTkxMi5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYwpAQCAtMTg2LDEzICsxODYsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoY2xrX2dldF91c2Vjb3VudCh0bHYzMjBhaWMyM19tY2xrKSA+IDApIHsKLQkJLyogTUNMSyBpcyBhbHJlYWR5IGluIHVzZSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiTUNMSyBpbiB1c2UgYXQgJWQgSHouIFdlIGNoYW5nZSBpdCB0byAlZCBIelxuIiwKLQkJICAgICAgICh1aW50KSBjbGtfZ2V0X3JhdGUodGx2MzIwYWljMjNfbWNsayksIENPREVDX0NMT0NLKTsKLQl9Ci0KIAkvKgogCSAqIENvbmZpZ3VyZSAxMiBNSHogb3V0cHV0IG9uIE1DTEsuCiAJICovCkBAIC0yMDUsOSArMTk4LDggQEAKIAkJfQogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIk1DTEsgPSAlZCBbJWRdLCB1c2Vjb3VudCA9ICVkXG4iLAotCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSywKLQkgICAgICAgY2xrX2dldF91c2Vjb3VudCh0bHYzMjBhaWMyM19tY2xrKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTUNMSyA9ICVkIFslZF1cbiIsCisJICAgICAgICh1aW50KSBjbGtfZ2V0X3JhdGUodGx2MzIwYWljMjNfbWNsayksIENPREVDX0NMT0NLKTsKIAogCXJldHVybiAwOwogZXJyMToKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwppbmRleCBlMjI2ZmE3Li4xMGYxYzg2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKKysrIGIvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM4LDYgKzM5LDggQEAKICNpbmNsdWRlICJvbWFwLXBjbS5oIgogI2luY2x1ZGUgIi4uL2NvZGVjcy90d2w0MDMwLmgiCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNuZF9zb2Nfc2RwMzQzMDsKKwogc3RhdGljIGludCBzZHAzNDMwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTgxLDEyICs4NCwxMjEgQEAKIAkuaHdfcGFyYW1zID0gc2RwMzQzMF9od19wYXJhbXMsCiB9OwogCisvKiBIZWFkc2V0IGphY2sgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrIGhzX2phY2s7CisKKy8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gREFQTSBwaW5zICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gaHNfamFja19waW5zW10gPSB7CisJeworCQkucGluID0gIkhlYWRzZXQgTWljIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19NSUNST1BIT05FLAorCX0sCisJeworCQkucGluID0gIkhlYWRzZXQgU3RlcmVvcGhvbmUiLAorCQkubWFzayA9IFNORF9KQUNLX0hFQURQSE9ORSwKKwl9LAorfTsKKworLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiBncGlvcyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyBoc19qYWNrX2dwaW9zW10gPSB7CisJeworCQkuZ3BpbyA9IChPTUFQX01BWF9HUElPX0xJTkVTICsgMiksCisJCS5uYW1lID0gImhzZGV0LWdwaW8iLAorCQkucmVwb3J0ID0gU05EX0pBQ0tfSEVBRFNFVCwKKwkJLmRlYm91bmNlX3RpbWUgPSAyMDAsCisJfSwKK307CisKKy8qIFNEUDM0MzAgbWFjaGluZSBEQVBNICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgc2RwMzQzMF90d2w0MDMwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9NSUMoIkV4dCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJFeHQgU3BrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIEV4dGVybmFsIE1pY3M6IE1BSU5NSUMsIFNVQk1JQyB3aXRoIGJpYXMqLworCXsiTUFJTk1JQyIsIE5VTEwsICJNaWMgQmlhcyAxIn0sCisJeyJTVUJNSUMiLCBOVUxMLCAiTWljIEJpYXMgMiJ9LAorCXsiTWljIEJpYXMgMSIsIE5VTEwsICJFeHQgTWljIn0sCisJeyJNaWMgQmlhcyAyIiwgTlVMTCwgIkV4dCBNaWMifSwKKworCS8qIEV4dGVybmFsIFNwZWFrZXJzOiBIRkwsIEhGUiAqLworCXsiRXh0IFNwayIsIE5VTEwsICJIRkwifSwKKwl7IkV4dCBTcGsiLCBOVUxMLCAiSEZSIn0sCisKKwkvKiBIZWFkc2V0IE1pYzogSFNNSUMgd2l0aCBiaWFzICovCisJeyJIU01JQyIsIE5VTEwsICJIZWFkc2V0IE1pYyBCaWFzIn0sCisJeyJIZWFkc2V0IE1pYyBCaWFzIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisKKwkvKiBIZWFkc2V0IFN0ZXJlb3Bob25lIChIZWFkcGhvbmUpOiBIU09MLCBIU09SICovCisJeyJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCwgIkhTT0wifSwKKwl7IkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMLCAiSFNPUiJ9LAorfTsKKworc3RhdGljIGludCBzZHAzNDMwX3R3bDQwMzBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IHJldDsKKworCS8qIEFkZCBTRFAzNDMwIHNwZWNpZmljIHdpZGdldHMgKi8KKwlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBzZHAzNDMwX3R3bDQwMzBfZGFwbV93aWRnZXRzLAorCQkJCUFSUkFZX1NJWkUoc2RwMzQzMF90d2w0MDMwX2RhcG1fd2lkZ2V0cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTZXQgdXAgU0RQMzQzMCBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwkvKiBTRFAzNDMwIGNvbm5lY3RlZCBwaW5zICovCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgTWljIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IFN0ZXJlb3Bob25lIik7CisKKwkvKiBUV0w0MDMwIG5vdCBjb25uZWN0ZWQgcGlucyAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJBVVhMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkFVWFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTUlDIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMwIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkRJR0lNSUMxIik7CisKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkVBUlBJRUNFIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRVIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gKi8KKwlyZXQgPSBzbmRfc29jX2phY2tfbmV3KCZzbmRfc29jX3NkcDM0MzAsICJIZWFkc2V0IEphY2siLAorCQkJCVNORF9KQUNLX0hFQURTRVQsICZoc19qYWNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19qYWNrX2FkZF9waW5zKCZoc19qYWNrLCBBUlJBWV9TSVpFKGhzX2phY2tfcGlucyksCisJCQkJaHNfamFja19waW5zKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19qYWNrX2FkZF9ncGlvcygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX2dwaW9zKSwKKwkJCQloc19qYWNrX2dwaW9zKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIERpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIGdsdWUgLSBjb25uZWN0cyBjb2RlYyA8LS0+IENQVSAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNkcDM0MzBfZGFpID0gewogCS5uYW1lID0gIlRXTDQwMzAiLAogCS5zdHJlYW1fbmFtZSA9ICJUV0w0MDMwIiwKIAkuY3B1X2RhaSA9ICZvbWFwX21jYnNwX2RhaVswXSwKIAkuY29kZWNfZGFpID0gJnR3bDQwMzBfZGFpLAorCS5pbml0ID0gc2RwMzQzMF90d2w0MDMwX2luaXQsCiAJLm9wcyA9ICZzZHAzNDMwX29wcywKIH07CiAKQEAgLTE0Miw2ICsyNTQsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2RwMzQzMF9zb2NfZXhpdCh2b2lkKQogeworCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKCZoc19qYWNrLCBBUlJBWV9TSVpFKGhzX2phY2tfZ3Bpb3MpLAorCQkJCWhzX2phY2tfZ3Bpb3MpOworCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2RwMzQzMF9zbmRfZGV2aWNlKTsKIH0KIG1vZHVsZV9leGl0KHNkcDM0MzBfc29jX2V4aXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9LY29uZmlnIGIvc291bmQvc29jL3B4YS9LY29uZmlnCmluZGV4IGY4MmUxMDYuLjU5OThhYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKQEAgLTYxLDYgKzYxLDI0IEBACiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFNoYXJwCiAJICBaYXVydXMgU0wtQzYwMDB4IG1vZGVscyAoVG9zYSkuCiAKK2NvbmZpZyBTTkRfUFhBMlhYX1NPQ19FNzQwCisJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIGU3NDAiCisJZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0U3NDAKKwlzZWxlY3QgU05EX1NPQ19XTTk3MDUKKwlzZWxlY3QgU05EX1BYQTJYWF9TT0NfQUM5NworCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCisJICB0b3NoaWJhIGU3NDAgUERBCisKK2NvbmZpZyBTTkRfUFhBMlhYX1NPQ19FNzUwCisJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIGU3NTAiCisJZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0U3NTAKKwlzZWxlY3QgU05EX1NPQ19XTTk3MDUKKwlzZWxlY3QgU05EX1BYQTJYWF9TT0NfQUM5NworCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCisJICB0b3NoaWJhIGU3NTAgUERBCisKIGNvbmZpZyBTTkRfUFhBMlhYX1NPQ19FODAwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIGU4MDAiCiAJZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0U4MDAKQEAgLTk3LDMgKzExNSwxMiBAQAogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCiAJICBNYXJ2ZWxsIFp5bG9uaXRlIHJlZmVyZW5jZSBwbGF0Zm9ybS4KKworY29uZmlnIFNORF9QWEEyWFhfU09DX01JT0E3MDEKKyAgICAgICAgdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBNSU8gQTcwMSIKKyAgICAgICAgZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX01JT0E3MDEKKyAgICAgICAgc2VsZWN0IFNORF9QWEEyWFhfU09DX0FDOTcKKyAgICAgICAgc2VsZWN0IFNORF9TT0NfV005NzEzCisgICAgICAgIGhlbHAKKyAgICAgICAgICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorICAgICAgICAgIE1JTyBBNzAxLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9NYWtlZmlsZSBiL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUKaW5kZXggMDhhOWYyNy4uOGVkODgxYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvcHhhL01ha2VmaWxlCkBAIC0xMywxNyArMTMsMjMgQEAKIHNuZC1zb2MtY29yZ2ktb2JqcyA6PSBjb3JnaS5vCiBzbmQtc29jLXBvb2RsZS1vYmpzIDo9IHBvb2RsZS5vCiBzbmQtc29jLXRvc2Etb2JqcyA6PSB0b3NhLm8KK3NuZC1zb2MtZTc0MC1vYmpzIDo9IGU3NDBfd205NzA1Lm8KK3NuZC1zb2MtZTc1MC1vYmpzIDo9IGU3NTBfd205NzA1Lm8KIHNuZC1zb2MtZTgwMC1vYmpzIDo9IGU4MDBfd205NzEyLm8KIHNuZC1zb2Mtc3BpdHotb2JqcyA6PSBzcGl0ei5vCiBzbmQtc29jLWVtLXgyNzAtb2JqcyA6PSBlbS14MjcwLm8KIHNuZC1zb2MtcGFsbTI3eC1vYmpzIDo9IHBhbG0yN3gubwogc25kLXNvYy16eWxvbml0ZS1vYmpzIDo9IHp5bG9uaXRlLm8KK3NuZC1zb2MtbWlvYTcwMS1vYmpzIDo9IG1pb2E3MDFfd205NzEzLm8KIAogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0NPUkdJKSArPSBzbmQtc29jLWNvcmdpLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19QT09ETEUpICs9IHNuZC1zb2MtcG9vZGxlLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19UT1NBKSArPSBzbmQtc29jLXRvc2Eubworb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0U3NDApICs9IHNuZC1zb2MtZTc0MC5vCitvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRTc1MCkgKz0gc25kLXNvYy1lNzUwLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FODAwKSArPSBzbmQtc29jLWU4MDAubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1NQSVRaKSArPSBzbmQtc29jLXNwaXR6Lm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FTV9YMjcwKSArPSBzbmQtc29jLWVtLXgyNzAubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1BBTE0yN1gpICs9IHNuZC1zb2MtcGFsbTI3eC5vCitvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfTUlPQTcwMSkgKz0gc25kLXNvYy1taW9hNzAxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1pZTE9OSVRFKSArPSBzbmQtc29jLXp5bG9uaXRlLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwppbmRleCAxYmEyNWE1Li4wMjI2M2U1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKKysrIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KQEAgLTEwMCw3ICsxMDEsNyBAQAogc3RhdGljIGludCBjb3JnaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJY29yZ2lfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMjc1LDE4ICsyNzYsMTYgQEAKICAqLwogc3RhdGljIGludCBjb3JnaV93bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX2NvcmdpX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3MzFfY29yZ2lfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODczMV9jb3JnaV9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODczMV9jb3JnaV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfZGFwbV93aWRnZXRzLApAQCAtMzE3LDE5ICszMTYsNDQgQEAKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKLS8qIGNvcmdpIGF1ZGlvIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBjb3JnaV93bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OwotCiAvKiBjb3JnaSBhdWRpbyBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgY29yZ2lfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19jb3JnaSwKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLAotCS5jb2RlY19kYXRhID0gJmNvcmdpX3dtODczMV9zZXR1cCwKIH07CiAKKy8qCisgKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBib2RnZSB0byBhdm9pZCBjcm9zcy10cmVlIG1lcmdlIGlzc3Vlcy4KKyAqIE5ldyBkcml2ZXJzIHNob3VsZCByZWdpc3RlciB0aGUgd204NzMxIEkyQyBkZXZpY2UgaW4gdGhlIG1hY2hpbmUKKyAqIHNldHVwIGNvZGUgKHVuZGVyIGFyY2gvYXJtIGZvciBBUk0gc3lzdGVtcykuCisgKi8KK3N0YXRpYyBpbnQgd204NzMxX2kyY19yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJaW5mby5hZGRyID0gMHgxYjsKKwlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOworCisJYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgMFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7CisJaWYgKCFjbGllbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAorCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvcmdpX3NuZF9kZXZpY2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNvcmdpX2luaXQodm9pZCkKQEAgLTM0MCw2ICszNjQsMTAgQEAKIAkgICAgICBtYWNoaW5lX2lzX2h1c2t5KCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAljb3JnaV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFjb3JnaV9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYyBiL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2QyZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogZTc0MC13bTk3MDUuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZTc0MAorICoKKyAqIENvcHlyaWdodCAyMDA3IChjKSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBPTkxZLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MDUuaCIKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKworCisjZGVmaW5lIEU3NDBfQVVESU9fT1VUIDEKKyNkZWZpbmUgRTc0MF9BVURJT19JTiAgMgorCitzdGF0aWMgaW50IGU3NDBfYXVkaW9fcG93ZXI7CisKK3N0YXRpYyB2b2lkIGU3NDBfc3luY19hdWRpb19wb3dlcihpbnQgc3RhdHVzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAhc3RhdHVzKTsKKwlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfQU1QX09OLCAoc3RhdHVzICYgRTc0MF9BVURJT19PVVQpID8gMSA6IDApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9NSUNfT04sIChzdGF0dXMgJiBFNzQwX0FVRElPX0lOKSA/IDEgOiAwKTsKK30KKworc3RhdGljIGludCBlNzQwX21pY19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZTc0MF9hdWRpb19wb3dlciB8PSBFNzQwX0FVRElPX0lOOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQllNzQwX2F1ZGlvX3Bvd2VyICY9IH5FNzQwX0FVRElPX0lOOworCisJZTc0MF9zeW5jX2F1ZGlvX3Bvd2VyKGU3NDBfYXVkaW9fcG93ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZTc0MF9vdXRwdXRfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWU3NDBfYXVkaW9fcG93ZXIgfD0gRTc0MF9BVURJT19PVVQ7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWU3NDBfYXVkaW9fcG93ZXIgJj0gfkU3NDBfQVVESU9fT1VUOworCisJZTc0MF9zeW5jX2F1ZGlvX3Bvd2VyKGU3NDBfYXVkaW9fcG93ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlNzQwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIk91dHB1dCBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzQwX291dHB1dF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJNaWMgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc0MF9taWNfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJPdXRwdXQgQW1wIiwgTlVMTCwgIkxPVVQifSwKKwl7Ik91dHB1dCBBbXAiLCBOVUxMLCAiUk9VVCJ9LAorCXsiT3V0cHV0IEFtcCIsIE5VTEwsICJNT05PT1VUIn0sCisKKwl7IlNwZWFrZXIiLCBOVUxMLCAiT3V0cHV0IEFtcCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiT3V0cHV0IEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyBBbXAifSwKKwl7Ik1pYyBBbXAiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKK307CisKK3N0YXRpYyBpbnQgZTc0MF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUE9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBPVVRSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQQ0JFRVAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDMiIpOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgZTc0MF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoZTc0MF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU3NDBfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTc0MF9hYzk3X2luaXQsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0FVWF0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU3NDAgPSB7CisJLm5hbWUgPSAiVG9zaGliYSBlNzQwIiwKKwkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBlNzQwX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShlNzQwX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGU3NDBfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmZTc0MCwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzA1LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmU3NDBfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZTc0MF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19lNzQwKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9NSUNfT04sICAiTWljIGFtcCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzQwX0FNUF9PTiwgIk91dHB1dCBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfbWljX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAiQXVkaW8gcG93ZXIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfb3BfYW1wX2dwaW87CisKKwkvKiBEaXNhYmxlIGF1ZGlvICovCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9NSUNfT04sIDApOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9BTVBfT04sIDApOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCisJZTc0MF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFlNzQwX3NuZF9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2Fwd3JfZ3BpbzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShlNzQwX3NuZF9kZXZpY2UsICZlNzQwX3NuZF9kZXZkYXRhKTsKKwllNzQwX3NuZF9kZXZkYXRhLmRldiA9ICZlNzQwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU3NDBfc25kX2RldmljZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKy8qIEZhaWwgZ3JhY2VmdWxseSAqLworCXBsYXRmb3JtX2RldmljZV9wdXQoZTc0MF9zbmRfZGV2aWNlKTsKK2ZyZWVfYXB3cl9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfV005NzA1X25BVkREMik7CitmcmVlX29wX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfQU1QX09OKTsKK2ZyZWVfbWljX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NDBfTUlDX09OKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlNzQwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihlNzQwX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChlNzQwX2luaXQpOworbW9kdWxlX2V4aXQoZTc0MF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU3NDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNlY2NjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogZTc1MC13bTk3MDUuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZTc1MAorICoKKyAqIENvcHlyaWdodCAyMDA3IChjKSBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBPTkxZLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MDUuaCIKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKworc3RhdGljIGludCBlNzUwX3Nwa19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU3NTBfaHBfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzUwX0hQX0FNUF9PRkYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlNzUwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbCkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllNzUwX2hwX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIlNwZWFrZXIgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc1MF9zcGtfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgQW1wIiwgTlVMTCwgIkhQT1VUTCJ9LAorCXsiSGVhZHBob25lIEFtcCIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXAifSwKKworCXsiU3BlYWtlciBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJTcGVha2VyIEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwpIn0sCit9OworCitzdGF0aWMgaW50IGU3NTBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJST1VUIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORUlOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDRElOUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQQ0JFRVAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTUlDMiIpOworCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgZTc1MF9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoZTc1MF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU3NTBfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTc1MF9hYzk3X2luaXQsCisJCS8qIHVzZSBvcHMgdG8gY2hlY2sgc3RhcnR1cCBzdGF0ZSAqLworCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MDVfZGFpW1dNOTcwNV9EQUlfQUM5N19BVVhdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlNzUwID0geworCS5uYW1lID0gIlRvc2hpYmEgZTc1MCIsCisJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gZTc1MF9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoZTc1MF9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBlNzUwX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmU3NTAsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcwNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplNzUwX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGU3NTBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfZTc1MCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NTBfSFBfQU1QX09GRiwgICJIZWFkcGhvbmUgYW1wIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NTBfU1BLX0FNUF9PRkYsICJTcGVha2VyIGFtcCIpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9ocF9hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NTBfSFBfQU1QX09GRiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NTBfU1BLX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwllNzUwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWU3NTBfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGU3NTBfc25kX2RldmljZSwgJmU3NTBfc25kX2RldmRhdGEpOworCWU3NTBfc25kX2RldmRhdGEuZGV2ID0gJmU3NTBfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZTc1MF9zbmRfZGV2aWNlKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworLyogRmFpbCBncmFjZWZ1bGx5ICovCisJcGxhdGZvcm1fZGV2aWNlX3B1dChlNzUwX3NuZF9kZXZpY2UpOworZnJlZV9zcGtfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRik7CitmcmVlX2hwX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NTBfSFBfQU1QX09GRik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZTc1MF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTc1MF9zbmRfZGV2aWNlKTsKKwlncGlvX2ZyZWUoR1BJT19FNzUwX1NQS19BTVBfT0ZGKTsKKwlncGlvX2ZyZWUoR1BJT19FNzUwX0hQX0FNUF9PRkYpOworfQorCittb2R1bGVfaW5pdChlNzUwX2luaXQpOworbW9kdWxlX2V4aXQoZTc1MF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU3NTAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYyBiL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYwppbmRleCAyZTMzODZkLi5iYzAxOWNkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKKysrIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCkBAIC0xLDggKzEsNiBAQAogLyoKICAqIGU4MDAtd205NzEyLmMgIC0tICBTb0MgYXVkaW8gZm9yIGU4MDAKICAqCi0gKiBCYXNlZCBvbiB0b3NhLmMKLSAqCiAgKiBDb3B5cmlnaHQgMjAwNyAoYykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xMyw3ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTIxLDIzICsxOSw4NSBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEyLmgiCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgogI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU4MDA7CitzdGF0aWMgaW50IGU4MDBfc3BrX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfU1BLX0FNUF9PTiwgMSk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9TUEtfQU1QX09OLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU4MDBfaHBfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAwKTsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FODAwX0hQX0FNUF9PRkYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBlODAwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsMSkiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgKEludGVybmFsMikiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTgwMF9ocF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJTcGVha2VyIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU4MDBfc3BrX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRMIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXAifSwKKworCXsiU3BlYWtlciBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJTcGVha2VyIEFtcCJ9LAorCisJeyJNSUMxIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwxKSJ9LAorCXsiTUlDMiIsIE5VTEwsICJNaWMgKEludGVybmFsMikifSwKK307CisKK3N0YXRpYyBpbnQgZTgwMF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU4MDBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGU4MDBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZTgwMF9kYWlbXSA9IHsKLXsKLQkubmFtZSA9ICJBQzk3IEF1eCIsCi0JLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCi0JLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19BVVhdLAotfSwKKwl7CisJCS5uYW1lID0gIkFDOTciLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19ISUZJXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19ISUZJXSwKKwkJLmluaXQgPSBlODAwX2FjOTdfaW5pdCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfQVVYXSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZTgwMCA9IHsKQEAgLTYxLDYgKzEyMSwyMiBAQAogCWlmICghbWFjaGluZV9pc19lODAwKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAgIkhlYWRwaG9uZSBhbXAiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTgwMF9TUEtfQU1QX09OLCAiU3BlYWtlciBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaHBfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FODAwX0hQX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FODAwX1NQS19BTVBfT04sIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKIAllODAwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIWU4MDBfc25kX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02OSw4ICsxNDUsMTUgQEAKIAllODAwX3NuZF9kZXZkYXRhLmRldiA9ICZlODAwX3NuZF9kZXZpY2UtPmRldjsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU4MDBfc25kX2RldmljZSk7CiAKLQlpZiAocmV0KQotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU4MDBfc25kX2RldmljZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisvKiBGYWlsIGdyYWNlZnVsbHkgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU4MDBfc25kX2RldmljZSk7CitmcmVlX3Nwa19hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FODAwX1NQS19BTVBfT04pOworZnJlZV9ocF9hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FODAwX0hQX0FNUF9PRkYpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc4LDYgKzE2MSw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZTgwMF9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTgwMF9zbmRfZGV2aWNlKTsKKwlncGlvX2ZyZWUoR1BJT19FODAwX1NQS19BTVBfT04pOworCWdwaW9fZnJlZShHUElPX0U4MDBfSFBfQU1QX09GRik7CiB9CiAKIG1vZHVsZV9pbml0KGU4MDBfaW5pdCk7CkBAIC04Niw0ICsxNzEsNCBAQAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCiBNT0RVTEVfQVVUSE9SKCJJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIGU4MDAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWVkYThiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogSGFuZGxlcyB0aGUgTWl0YWMgbWlvYTcwMSBTb0Mgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJvYmVydCBKYXJ6bWlrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFRoaXMgaXMgYSBsaXR0bGUgc2NoZW1hIG9mIHRoZSBzb3VuZCBpbnRlcmNvbm5lY3Rpb25zIDoKKyAqCisgKiAgICBTYWdlbSBYMjAwICAgICAgICAgICAgICAgICBXb2xmc29uIFdNOTcxMworICogICAgKy0tLS0tLS0tKyAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICBSZWFyIFNwZWFrZXIKKyAqICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAvLSsKKyAqICAgIHwgICAgICAgICstLS0+LS0tLS0+LS0tK01PTk9JTiAgICAgICAgIFNQS0wrLS0tPi0tLS0rLSsgIHwKKyAqICAgIHwgIEdTTSAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8IHwgIHwKKyAqICAgIHwgICAgICAgICstLS0+LS0tLS0+LS0tK1BDQkVFUCAgICAgICAgIFNQS1IrLS0tPi0tLS0rLSsgIHwKKyAqICAgIHwgIENISVAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBcLSsKKyAqICAgIHwgICAgICAgICstLS08LS0tLS08LS0tK01PTk8gICAgICAgICAgICAgICB8CisgKiAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgIEZyb250IFNwZWFrZXIKKyAqICAgICstLS0tLS0tLSsgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAvLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBIUEwrLS0tPi0tLS0rLSsgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8IHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIE9VVDMrLS0tPi0tLS0rLSsgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBcLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgRnJvbnQgTWljcm8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgTUlDMSstLS0tLTwtLStvKworICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICArCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgLS0tCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisKKyNpbmNsdWRlICJweGEyeHgtcGNtLmgiCisjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEzLmgiCisKKyNkZWZpbmUgQVJSQVlfQU5EX1NJWkUoeCkJKHgpLCBBUlJBWV9TSVpFKHgpCisKKyNkZWZpbmUgQUM5N19HUElPX1BVTEwJCTB4NTgKKworLyogVXNlIEdQSU84IGZvciByZWFyIHNwZWFrZXIgYW1wbGlmaWVyICovCitzdGF0aWMgaW50IHJlYXJfYW1wX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQoreworCXVuc2lnbmVkIHNob3J0IHJlZzsKKworCWlmIChwb3dlcikgeworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgfCAweDAxMDApOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19QVUxMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX1BVTEwsIHJlZyB8ICgxPDwxNSkpOworCX0gZWxzZSB7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX0NGRyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19DRkcsIHJlZyAmIH4weDAxMDApOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19QVUxMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX1BVTEwsIHJlZyAmIH4oMTw8MTUpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFyX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0LAorCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd2lkZ2V0LT5jb2RlYzsKKworCXJldHVybiByZWFyX2FtcF9wb3dlcihjb2RlYywgU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSk7Cit9CisKKy8qIG1pb2E3MDEgbWFjaGluZSBkYXBtIHdpZGdldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtaW9hNzAxX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9TUEsoIkZyb250IFNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJSZWFyIFNwZWFrZXIiLCByZWFyX2FtcF9ldmVudCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJHU00gTGluZSBPdXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiR1NNIExpbmUgSW4iLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkZyb250IE1pYyIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogQ2FsbCBNaWMgKi8KKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIkZyb250IE1pYyJ9LAorCXsiTUlDMSIsIE5VTEwsICJNaWMgQmlhcyJ9LAorCisJLyogSGVhZHNldCBNaWMgKi8KKwl7IkxJTkVMIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisJeyJMSU5FUiIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCisJLyogR1NNIE1vZHVsZSAqLworCXsiTU9OT0lOIiwgTlVMTCwgIkdTTSBMaW5lIE91dCJ9LAorCXsiUENCRUVQIiwgTlVMTCwgIkdTTSBMaW5lIE91dCJ9LAorCXsiR1NNIExpbmUgSW4iLCBOVUxMLCAiTU9OTyJ9LAorCisJLyogaGVhZHBob25lIGNvbm5lY3RlZCB0byBIUEwsIEhQUiAqLworCXsiSGVhZHNldCIsIE5VTEwsICJIUEwifSwKKwl7IkhlYWRzZXQiLCBOVUxMLCAiSFBSIn0sCisKKwkvKiBmcm9udCBzcGVha2VyIGNvbm5lY3RlZCB0byBIUEwsIE9VVDMgKi8KKwl7IkZyb250IFNwZWFrZXIiLCBOVUxMLCAiSFBMIn0sCisJeyJGcm9udCBTcGVha2VyIiwgTlVMTCwgIk9VVDMifSwKKworCS8qIHJlYXIgc3BlYWtlciBjb25uZWN0ZWQgdG8gU1BLTCwgU1BLUiAqLworCXsiUmVhciBTcGVha2VyIiwgTlVMTCwgIlNQS0wifSwKKwl7IlJlYXIgU3BlYWtlciIsIE5VTEwsICJTUEtSIn0sCit9OworCitzdGF0aWMgaW50IG1pb2E3MDFfd205NzEzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIHNob3J0IHJlZzsKKworCS8qIEFkZCBtaW9hNzAxIHNwZWNpZmljIHdpZGdldHMgKi8KKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBBUlJBWV9BTkRfU0laRShtaW9hNzAxX2RhcG1fd2lkZ2V0cykpOworCisJLyogU2V0IHVwIG1pb2E3MDEgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXBuZWN0cyAqLworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBBUlJBWV9BTkRfU0laRShhdWRpb19tYXApKTsKKworCS8qIFByZXBhcmUgR1BJTzggZm9yIHJlYXIgc3BlYWtlciBhbXBsaWZpZXIgKi8KKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUM5N19HUElPX0NGRyk7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgfCAweDAxMDApOworCisJLyogUHJlcGFyZSBNSUMgaW5wdXQgKi8KKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUM5N18zRF9DT05UUk9MKTsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFDOTdfM0RfQ09OVFJPTCwgcmVnIHwgMHhjMDAwKTsKKworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRnJvbnQgU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiUmVhciBTcGVha2VyIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJGcm9udCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIEluIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBPdXQiKTsKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBtaW9hNzAxX29wczsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG1pb2E3MDFfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzEzX2RhaVtXTTk3MTNfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gbWlvYTcwMV93bTk3MTNfaW5pdCwKKwkJLm9wcyA9ICZtaW9hNzAxX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzEzX2RhaVtXTTk3MTNfREFJX0FDOTdfQVVYXSwKKwkJLm9wcyA9ICZtaW9hNzAxX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbWlvYTcwMSA9IHsKKwkubmFtZSA9ICJNaW9BNzAxIiwKKwkucGxhdGZvcm0gPSAmcHhhMnh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBtaW9hNzAxX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShtaW9hNzAxX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG1pb2E3MDFfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmbWlvYTcwMSwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd205NzEzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1pb2E3MDFfc25kX2RldmljZTsKKworc3RhdGljIGludCBtaW9hNzAxX3dtOTcxM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfbWlvYTcwMSgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl93YXJuKCZwZGV2LT5kZXYsICJCZSB3YXJuZWQgdGhhdCBpbmNvcnJlY3QgbWl4ZXJzL211eGVzIHNldHVwIHdpbGwiCisJCSAibGVhZCB0byBvdmVyaGVhdGluZyBhbmQgcG9zc2libGUgZGVzdHJ1Y3Rpb24gb2YgeW91ciBkZXZpY2UuIgorCQkgIkRvIG5vdCB1c2Ugd2l0aG91dCBhIGdvb2Qga25vd2xlZGdlIG9mIG1pbydzIGJvYXJkIGRlc2lnbiFcbiIpOworCisJbWlvYTcwMV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFtaW9hNzAxX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEobWlvYTcwMV9zbmRfZGV2aWNlLCAmbWlvYTcwMV9zbmRfZGV2ZGF0YSk7CisJbWlvYTcwMV9zbmRfZGV2ZGF0YS5kZXYgPSAmbWlvYTcwMV9zbmRfZGV2aWNlLT5kZXY7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG1pb2E3MDFfc25kX2RldmljZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcGxhdGZvcm1fZGV2aWNlX3B1dChtaW9hNzAxX3NuZF9kZXZpY2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1pb2E3MDFfd205NzEzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1pb2E3MDFfc25kX2RldmljZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1pb2E3MDFfd205NzEzX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbWlvYTcwMV93bTk3MTNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtaW9hNzAxX3dtOTcxM19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAibWlvYTcwMS13bTk3MTMiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1pb2E3MDFfYXNvY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWlvYTcwMV93bTk3MTNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1pb2E3MDFfYXNvY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1pb2E3MDFfd205NzEzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1pb2E3MDFfYXNvY19pbml0KTsKK21vZHVsZV9leGl0KG1pb2E3MDFfYXNvY19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJSb2JlcnQgSmFyem1payAocmphcnptaWtAZnJlZS5mcikiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgV005NzEzIE1JTyBBNzAxIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCmluZGV4IDRhOWNmMzAuLjQ4YTczZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCkBAIC01NSw3ICs1NSw3IEBACiBzdGF0aWMgaW50IHBhbG0yN3hfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXBhbG0yN3hfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMTQ2LDE5ICsxNDYsMTYgQEAKIAogc3RhdGljIGludCBwYWxtMjd4X2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT09VVCIpOwogCiAJLyogYWRkIHBhbG0yN3ggc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYWxtMjd4X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmcGFsbTI3eF9jb250cm9sc1tpXSwKLQkJCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHBhbG0yN3hfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRShwYWxtMjd4X2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBhZGQgcGFsbTI3eCBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgcGFsbTI3eF9kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCA2ZTk4MjcxLi5lZjdjNmM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtNzcsNyArNzgsNyBAQAogc3RhdGljIGludCBwb29kbGVfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXBvb2RsZV9leHRfY29udHJvbChjb2RlYyk7CkBAIC0yNDAsMTkgKzI0MSwxNyBAQAogICovCiBzdGF0aWMgaW50IHBvb2RsZV93bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTUlDSU4iKTsKIAogCS8qIEFkZCBwb29kbGUgc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfcG9vZGxlX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3MzFfcG9vZGxlX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfcG9vZGxlX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUod204NzMxX3Bvb2RsZV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIHBvb2RsZSBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzMxX2RhcG1fd2lkZ2V0cywKQEAgLTI4MywxNyArMjgyLDQyIEBACiAJLm51bV9saW5rcyA9IDEsCiB9OwogCi0vKiBwb29kbGUgYXVkaW8gcHJpdmF0ZSBkYXRhICovCi1zdGF0aWMgc3RydWN0IHdtODczMV9zZXR1cF9kYXRhIHBvb2RsZV93bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OworLyoKKyAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgorICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQorICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KKyAqLworc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSAweDFiOworCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQogCiAvKiBwb29kbGUgYXVkaW8gc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIHBvb2RsZV9zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZzbmRfc29jX3Bvb2RsZSwKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLAotCS5jb2RlY19kYXRhID0gJnBvb2RsZV93bTg3MzFfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG9vZGxlX3NuZF9kZXZpY2U7CkBAIC0zMDUsNiArMzI5LDEwIEBACiAJaWYgKCFtYWNoaW5lX2lzX3Bvb2RsZSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAlsb2NvbW9fZ3Bpb19zZXRfZGlyKCZwb29kbGVfbG9jb21vX2RldmljZS5kZXYsCiAJCVBPT0RMRV9MT0NPTU9fR1BJT19BTVBfT04sIDApOwogCS8qIHNob3VsZCB3ZSBtdXRlIEhQIGF0IHN0YXJ0dXAgLSBidXJuaW5nIHBvd2VyID8qLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwppbmRleCA3M2NiNmI0Li5iMGJmNDA5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwpAQCAtMSw0ICsxLDMgQEAKLSNkZWZpbmUgREVCVUcKIC8qCiAgKiBweGEtc3NwLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgogICoKQEAgLTIxLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTIyMSw5ICsyMjIsOSBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKLQkJcmV0ID0gc3NwX2luaXQoJnByaXYtPmRldiwgY3B1X2RhaS0+aWQgKyAxLCBTU1BfTk9fSVJRKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlwcml2LT5kZXYucG9ydCA9IGNwdV9kYWktPmlkICsgMTsKKwkJcHJpdi0+ZGV2LmlycSA9IE5PX0lSUTsKKwkJY2xrX2VuYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOwogCQlzc3BfZGlzYWJsZSgmcHJpdi0+ZGV2KTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTIzOCw3ICsyMzksNyBAQAogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKIAkJc3NwX2Rpc2FibGUoJnByaXYtPmRldik7Ci0JCXNzcF9leGl0KCZwcml2LT5kZXYpOworCQljbGtfZGlzYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOwogCX0KIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBACiAJaW50IHZhbDsKIAogCXUzMiBzc2NyMCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmCi0JCX4oU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FEQyk7CisJCX4oU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FDUyk7CiAKIAlkZXZfZGJnKCZzc3AtPnBkZXYtPmRldiwKIAkJInB4YV9zc3Bfc2V0X2RhaV9zeXNjbGsgaWQ6ICVkLCBjbGtfaWQgJWQsIGZyZXEgJWRcbiIsCkBAIC0zMjYsNyArMzI3LDcgQEAKIAljYXNlIFBYQV9TU1BfQ0xLX0FVRElPOgogCQlwcml2LT5zeXNjbGsgPSAwOwogCQlzc3Bfc2V0X3NjcigmcHJpdi0+ZGV2LCAxKTsKLQkJc3NjcjAgfD0gU1NDUjBfQURDOworCQlzc2NyMCB8PSBTU0NSMF9BQ1M7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTIwLDkgKzUyMSwyMCBAQAogCXUzMiBzc2NyMTsKIAl1MzIgc3Nwc3A7CiAKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBhdCBhbGwgKi8KKwlpZiAocHJpdi0+ZGFpX2ZtdCA9PSBmbXQpCisJCXJldHVybiAwOworCisJLyogd2UgY2FuIG9ubHkgY2hhbmdlIHRoZSBzZXR0aW5ncyBpZiB0aGUgcG9ydCBpcyBub3QgaW4gdXNlICovCisJaWYgKHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmIFNTQ1IwX1NTRSkgeworCQlkZXZfZXJyKCZzc3AtPnBkZXYtPmRldiwKKwkJCSJjYW4ndCBjaGFuZ2UgaGFyZHdhcmUgZGFpIGZvcm1hdDogc3RyZWFtIGlzIGluIHVzZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiByZXNldCBwb3J0IHNldHRpbmdzICovCiAJc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCkgJgotCQkoU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FEQyk7CisJCShTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQUNTKTsKIAlzc2NyMSA9IFNTQ1IxX1J4VHJlc2goOCkgfCBTU0NSMV9UeFRyZXNoKDcpOwogCXNzcHNwID0gMDsKIApAQCAtNTQ1LDE4ICs1NTcsMTggQEAKIAogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKLQkJc3NjcjAgfD0gU1NDUjBfTU9EIHwgU1NDUjBfUFNQOworCQlzc2NyMCB8PSBTU0NSMF9QU1A7CiAJCXNzY3IxIHw9IFNTQ1IxX1JXT1QgfCBTU0NSMV9UUkFJTDsKIAorCQkvKiBTZWUgaHdfcGFyYW1zKCkgKi8KIAkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgewogCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgotCQkJc3Nwc3AgfD0gU1NQU1BfRlNSVDsKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9TRlJNUCB8IFNTUFNQX0ZTUlQ7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKLQkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QOworCQkJc3Nwc3AgfD0gU1NQU1BfU0NNT0RFKDMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MiwzNCArNjU0LDY1IEBACiAJCQlzc2NyMCB8PSBTU0NSMF9GUENLRTsKICNlbmRpZgogCQlzc2NyMCB8PSBTU0NSMF9EYXRhU2l6ZSgxNik7Ci0JCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSA+IDEpCi0JCQlzc2NyMCB8PSBTU0NSMF9FRFNTOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgogCQlzc2NyMCB8PSAoU1NDUjBfRURTUyB8IFNTQ1IwX0RhdGFTaXplKDgpKTsKLQkJLyogd2UgbXVzdCBiZSBpbiBuZXR3b3JrIG1vZGUgKDIgc2xvdHMpIGZvciAyNCBiaXQgc3RlcmVvICovCiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CiAJCXNzY3IwIHw9IChTU0NSMF9FRFNTIHwgU1NDUjBfRGF0YVNpemUoMTYpKTsKLQkJLyogd2UgbXVzdCBiZSBpbiBuZXR3b3JrIG1vZGUgKDIgc2xvdHMpIGZvciAzMiBiaXQgc3RlcmVvICovCiAJCWJyZWFrOwogCX0KIAlzc3Bfd3JpdGVfcmVnKHNzcCwgU1NDUjAsIHNzY3IwKTsKIAogCXN3aXRjaCAocHJpdi0+ZGFpX2ZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCS8qIENsZWFyZWQgd2hlbiB0aGUgREFJIGZvcm1hdCBpcyBzZXQgKi8KLQkJc3Nwc3AgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU1BTUCkgfCBTU1BTUF9TRlJNV0RUSCh3aWR0aCk7CisJICAgICAgIHNzcHNwID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NQU1ApOworCisJCWlmICgoKHNzY3IwICYgU1NDUjBfU0NSKSA9PSBTU0NSMF9TZXJDbGtEaXYoNCkpICYmCisJCSAgICAgKHdpZHRoID09IDE2KSkgeworCQkJLyogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgYml0Y2xrIGlzIDY0ZnMKKwkJCSogYW5kIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggMiozMiBiaXRzIG9mIGF1ZGlvCisJCQkqIHNhbXBsZXMuCisJCQkqCisJCQkqIFRoZSBTU1AgdmFsdWVzIHVzZWQgZm9yIHRoYXQgYXJlIGFsbCBmb3VuZCBvdXQgYnkKKwkJCSogdHJ5aW5nIGFuZCBmYWlsaW5nIGEgbG90OyBzb21lIG9mIHRoZSByZWdpc3RlcnMKKwkJCSogbmVlZGVkIGZvciB0aGF0IG1vZGUgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTN4eC4KKwkJCSovCisKKyNpZmRlZiBDT05GSUdfUFhBM3h4CisJCQlpZiAoIWNwdV9pc19weGEzeHgoKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVdEVEgod2lkdGggKiAyKTsKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1ETFkod2lkdGggKiA0KTsKKwkJCXNzcHNwIHw9IFNTUFNQX0VETVlTVE9QKDMpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RPUCgzKTsKKwkJCXNzcHNwIHw9IFNTUFNQX0RNWVNUUlQoMSk7CisjZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBmcmFtZSB3aWR0aCBpcyB0aGUgd2lkdGggdGhlIExSQ0xLIGlzCisJCQkgKiBhc3NlcnRlZCBmb3I7IHRoZSBkZWxheSBpcyBleHByZXNzZWQgaW4KKwkJCSAqIGhhbGYgY3ljbGUgdW5pdHMuICBXZSBuZWVkIHRoZSBleHRyYSBjeWNsZQorCQkJICogYmVjYXVzZSB0aGUgZGF0YSBzdGFydHMgY2xvY2tpbmcgb3V0IG9uZSBCQ0xLCisJCQkgKiBhZnRlciBMUkNMSyBjaGFuZ2VzIHBvbGFyaXR5LgorCQkJICovCisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNV0RUSCh3aWR0aCArIDEpOworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTURMWSgod2lkdGggKyAxKSAqIDIpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RSVCgxKTsKKwkJfQorCiAJCXNzcF93cml0ZV9yZWcoc3NwLCBTU1BTUCwgc3Nwc3ApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKLQkvKiBXZSBhbHdheXMgdXNlIGEgbmV0d29yayBtb2RlIHNvIHdlIGFsd2F5cyByZXF1aXJlIFRETSBzbG90cworCS8qIFdoZW4gd2UgdXNlIGEgbmV0d29yayBtb2RlLCB3ZSBhbHdheXMgcmVxdWlyZSBURE0gc2xvdHMKIAkgKiAtIGNvbXBsYWluIGxvdWRseSBhbmQgZmFpbCBpZiB0aGV5J3ZlIG5vdCBiZWVuIHNldCB1cCB5ZXQuCiAJICovCi0JaWYgKCEoc3NwX3JlYWRfcmVnKHNzcCwgU1NUU0EpICYgMHhmKSkgeworCWlmICgoc3NjcjAgJiBTU0NSMF9NT0QpICYmICEoc3NwX3JlYWRfcmVnKHNzcCwgU1NUU0EpICYgMHhmKSkgewogCQlkZXZfZXJyKCZzc3AtPnBkZXYtPmRldiwgIk5vIFRETSB0aW1lc2xvdCBjb25maWd1cmVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzUxLDcgKzc5NCw3IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPmRldi5zc3AgPSBzc3BfcmVxdWVzdChkYWktPmlkLCAiU29DIGF1ZGlvIik7CisJcHJpdi0+ZGV2LnNzcCA9IHNzcF9yZXF1ZXN0KGRhaS0+aWQgKyAxLCAiU29DIGF1ZGlvIik7CiAJaWYgKHByaXYtPmRldi5zc3AgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9wcml2OwpAQCAtNzgyLDYgKzgyNSwxOSBAQAogCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwJXAogCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfc3NwX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBweGFfc3NwX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gcHhhX3NzcF9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHB4YV9zc3BfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gcHhhX3NzcF9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfY2xrZGl2CT0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCisJLnNldF9mbXQJPSBweGFfc3NwX3NldF9kYWlfZm10LAorCS5zZXRfdGRtX3Nsb3QJPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCisJLnNldF90cmlzdGF0ZQk9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBweGFfc3NwX2RhaVtdID0gewogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDEiLApAQCAtODAyLDE4ICs4NTgsNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiAJewkubmFtZSA9ICJweGEyeHgtc3NwMiIsCiAJCS5pZCA9IDEsCkBAIC04MzMsMTggKzg3OCw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIAl7CiAJCS5uYW1lID0gInB4YTJ4eC1zc3AzIiwKQEAgLTg2NSwxOCArODk5LDcgQEAKIAkJCS5yYXRlcyA9IFBYQV9TU1BfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFBYQV9TU1BfRk9STUFUUywKIAkJIH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IHB4YV9zc3Bfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IHB4YV9zc3Bfc2h1dGRvd24sCi0JCQkudHJpZ2dlciA9IHB4YV9zc3BfdHJpZ2dlciwKLQkJCS5od19wYXJhbXMgPSBweGFfc3NwX2h3X3BhcmFtcywKLQkJCS5zZXRfc3lzY2xrID0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKLQkJCS5zZXRfY2xrZGl2ID0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKLQkJCS5zZXRfcGxsID0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKLQkJCS5zZXRfZm10ID0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfdGRtX3Nsb3QgPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCi0JCQkuc2V0X3RyaXN0YXRlID0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAotCQl9LAorCQkub3BzID0gJnB4YV9zc3BfZGFpX29wcywKIAl9LAogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDQiLApAQCAtODk3LDE4ICs5MjAsNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwocHhhX3NzcF9kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCmluZGV4IDgxMmMyYjQuLjAxYzIxYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKQEAgLTEwNiwxMyArMTA2LDEzIEBACiBzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXJldHVybiBweGEyeHhfYWM5N19od19wcm9iZShwZGV2KTsKKwlyZXR1cm4gcHhhMnh4X2FjOTdfaHdfcHJvYmUodG9fcGxhdGZvcm1fZGV2aWNlKGRhaS0+ZGV2KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHB4YTJ4eF9hYzk3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXB4YTJ4eF9hYzk3X2h3X3JlbW92ZShwZGV2KTsKKwlweGEyeHhfYWM5N19od19yZW1vdmUodG9fcGxhdGZvcm1fZGV2aWNlKGRhaS0+ZGV2KSk7CiB9CiAKIHN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtMTY0LDYgKzE2NCwxOCBAQAogCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfYWM5N19oaWZpX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9hYzk3X2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9hYzk3X2F1eF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBweGEyeHhfYWM5N19od19hdXhfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2FjOTdfbWljX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9hYzk3X2h3X21pY19wYXJhbXMsCit9OworCiAvKgogICogVGhlcmUgaXMgb25seSAxIHBoeXNpY2FsIEFDOTcgaW50ZXJmYWNlIGZvciBweGEyeHgsIGJ1dCBpdAogICogaGFzIGV4dHJhIGZpZm8ncyB0aGF0IGNhbiBiZSB1c2VkIGZvciBhdXggREFDcyBhbmQgQURDcy4KQEAgLTE4OSw4ICsyMDEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gUFhBMlhYX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2FjOTdfaHdfcGFyYW1zLH0sCisJLm9wcyA9ICZweGFfYWM5N19oaWZpX2RhaV9vcHMsCiB9LAogewogCS5uYW1lID0gInB4YTJ4eC1hYzk3LWF1eCIsCkBAIC0yMDgsOCArMjE5LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IFBYQTJYWF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9hYzk3X2h3X2F1eF9wYXJhbXMsfSwKKwkub3BzID0gJnB4YV9hYzk3X2F1eF9kYWlfb3BzLAogfSwKIHsKIAkubmFtZSA9ICJweGEyeHgtYWM5Ny1taWMiLApAQCAtMjIxLDIzICsyMzEsNTIgQEAKIAkJLmNoYW5uZWxzX21heCA9IDEsCiAJCS5yYXRlcyA9IFBYQTJYWF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9hYzk3X2h3X21pY19wYXJhbXMsfSwKKwkub3BzID0gJnB4YV9hYzk3X21pY19kYWlfb3BzLAogfSwKIH07CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHB4YV9hYzk3X2RhaSk7CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfYWM5N19vcHMpOwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSk7IGkrKykKKwkJcHhhX2FjOTdfZGFpW2ldLmRldiA9ICZwZGV2LT5kZXY7CisKKwkvKiBQdW50IG1vc3Qgb2YgdGhlIGluaXQgdG8gdGhlIFNvQyBwcm9iZTsgd2UgbWF5IG5lZWQgdGhlIG1hY2hpbmUKKwkgKiBkcml2ZXIgdG8gZG8gaW50ZXJlc3RpbmcgdGhpbmdzIHdpdGggdGhlIGNsb2NraW5nIHRvIGdldCB1cyB1cAorCSAqIGFuZCBydW5uaW5nLgorCSAqLworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBweGEyeHhfYWM5N19kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9hYzk3X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcHhhMnh4X2FjOTdfZGV2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2FjOTdfZGV2X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInB4YTJ4eC1hYzk3IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHB4YV9hYzk3X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfYWM5N19kcml2ZXIpOwogfQogbW9kdWxlX2luaXQocHhhX2FjOTdfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBweGFfYWM5N19leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGEyeHhfYWM5N19kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQocHhhX2FjOTdfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKaW5kZXggNTE3OTkxZi4uZTZjMjQ0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKQEAgLTI1LDIwICsyNSwxMSBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgogI2luY2x1ZGUgInB4YTJ4eC1pMnMuaCIKIAotc3RydWN0IHB4YTJ4eF9ncGlvIHsKLQl1MzIgc3lzOwotCXUzMglyeDsKLQl1MzIgdHg7Ci0JdTMyIGNsazsKLQl1MzIgZnJtOwotfTsKLQogLyoKICAqIEkyUyBDb250cm9sbGVyIFJlZ2lzdGVyIGFuZCBCaXQgRGVmaW5pdGlvbnMKICAqLwpAQCAtMTA2LDIxICs5Nyw2IEBACiAJCQkJICBEQ01EX0JVUlNUMzIgfCBEQ01EX1dJRFRINCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X2dwaW8gZ3Bpb19idXNbXSA9IHsKLQl7IC8qIEkyUyBTb0MgU2xhdmUgKi8KLQkJLnJ4ID0gR1BJTzI5X1NEQVRBX0lOX0kyU19NRCwKLQkJLnR4ID0gR1BJTzMwX1NEQVRBX09VVF9JMlNfTUQsCi0JCS5jbGsgPSBHUElPMjhfQklUQ0xLX0lOX0kyU19NRCwKLQkJLmZybSA9IEdQSU8zMV9TWU5DX0kyU19NRCwKLQl9LAotCXsgLyogSTJTIFNvQyBNYXN0ZXIgKi8KLQkJLnJ4ID0gR1BJTzI5X1NEQVRBX0lOX0kyU19NRCwKLQkJLnR4ID0gR1BJTzMwX1NEQVRBX09VVF9JMlNfTUQsCi0JCS5jbGsgPSBHUElPMjhfQklUQ0xLX09VVF9JMlNfTUQsCi0JCS5mcm0gPSBHUElPMzFfU1lOQ19JMlNfTUQsCi0JfSwKLX07Ci0KIHN0YXRpYyBpbnQgcHhhMnh4X2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CkBAIC0xODEsOSArMTU3LDYgQEAKIAlpZiAoY2xrX2lkICE9IFBYQTJYWF9JMlNfU1lTQ0xLKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChweGFfaTJzLm1hc3RlciAmJiBkaXIgPT0gU05EX1NPQ19DTE9DS19PVVQpCi0JCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLnN5cyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0LDEwICsxNjcsNiBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKIAotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLnJ4KTsKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS50eCk7Ci0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0uZnJtKTsKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5jbGspOwogCUJVR19PTihJU19FUlIoY2xrX2kycykpOwogCWNsa19lbmFibGUoY2xrX2kycyk7CiAJcHhhX2kyc193YWl0KCk7CkBAIC0zMzUsNiArMzA0LDE1IEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKIAkJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gcHhhMnh4X2kyc19zdGFydHVwLAorCS5zaHV0ZG93bgk9IHB4YTJ4eF9pMnNfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBweGEyeHhfaTJzX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gcHhhMnh4X2kyc19zZXRfZGFpX2ZtdCwKKwkuc2V0X3N5c2Nsawk9IHB4YTJ4eF9pMnNfc2V0X2RhaV9zeXNjbGssCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgcHhhX2kyc19kYWkgPSB7CiAJLm5hbWUgPSAicHhhMnh4LWkycyIsCiAJLmlkID0gMCwKQEAgLTM1MCwxNCArMzI4LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFBYQTJYWF9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IHB4YTJ4eF9pMnNfc3RhcnR1cCwKLQkJLnNodXRkb3duID0gcHhhMnh4X2kyc19zaHV0ZG93biwKLQkJLnRyaWdnZXIgPSBweGEyeHhfaTJzX3RyaWdnZXIsCi0JCS5od19wYXJhbXMgPSBweGEyeHhfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBweGEyeHhfaTJzX3NldF9kYWlfZm10LAotCQkuc2V0X3N5c2NsayA9IHB4YTJ4eF9pMnNfc2V0X2RhaV9zeXNjbGssCi0JfSwKKwkub3BzID0gJnB4YV9pMnNfZGFpX29wcywKIH07CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHB4YV9pMnNfZGFpKTsKQEAgLTM5OCwxMSArMzY5LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2kyc19pbml0KHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19weGEyN3goKSkKLQkJZ3Bpb19idXNbMV0uc3lzID0gR1BJTzExM19JMlNfU1lTQ0xLX01EOwotCWVsc2UKLQkJZ3Bpb19idXNbMV0uc3lzID0gR1BJTzMyX1NZU0NMS19JMlNfTUQ7Ci0KIAljbGtfaTJzID0gRVJSX1BUUigtRU5PRU5UKTsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfaTJzX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKaW5kZXggYTNiOWU2Yi4uNmNhOWY1MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9zcGl0ei5jCisrKyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwpAQCAtMTA5LDcgKzEwOSw3IEBACiBzdGF0aWMgaW50IHNwaXR6X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAlzcGl0el9leHRfY29udHJvbChjb2RlYyk7CkBAIC0yNzgsNyArMjc4LDcgQEAKICAqLwogc3RhdGljIGludCBzcGl0el93bTg3NTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJLyogTkMgY29kZWMgcGlucyAqLwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQxIik7CkBAIC0yOTAsMTIgKzI5MCwxMCBAQAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PMSIpOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUwX3NwaXR6X2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZ3bTg3NTBfc3BpdHpfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1MF9zcGl0el9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODc1MF9zcGl0el9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS90b3NhLmMgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwppbmRleCBjNzcxOTRmLi5mYzc4MTM3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYworKysgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIGludCB0b3NhX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAl0b3NhX2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTE4OCwxOCArMTg4LDE2IEBACiAKIHN0YXRpYyBpbnQgdG9zYV9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9PVVQiKTsKIAogCS8qIGFkZCB0b3NhIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG9zYV9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJnRvc2FfY29udHJvbHNbaV0sY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgdG9zYV9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHRvc2FfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIGFkZCB0b3NhIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB0b3NhX2RhcG1fd2lkZ2V0cywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwppbmRleCBmOGU5ZWNkLi45YTM4NmI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKKysrIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yNiw2ICsyNywxNyBAQAogI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCiAjaW5jbHVkZSAicHhhLXNzcC5oIgogCisvKgorICogVGhlcmUgaXMgYSBwaHlzaWNhbCBzd2l0Y2ggU1cxNSBvbiB0aGUgYm9hcmQgd2hpY2ggY2hhbmdlcyB0aGUgTUNMSworICogZm9yIHRoZSBXTTk3MTMgYmV0d2VlbiB0aGUgc3RhbmRhcmQgQUM5NyBtYXN0ZXIgY2xvY2sgYW5kIHRoZQorICogb3V0cHV0IG9mIHRoZSBDTEtfUE9VVCBzaWduYWwgZnJvbSB0aGUgUFhBLgorICovCitzdGF0aWMgaW50IGNsa19wb3V0OworbW9kdWxlX3BhcmFtKGNsa19wb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhjbGtfcG91dCwgIlVzZSBDTEtfUE9VVCBhcyBXTTk3MTMgTUNMSyAoU1cxNSBvbiBib2FyZCkuIik7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpwb3V0OworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCB6eWxvbml0ZTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHp5bG9uaXRlX2RhcG1fd2lkZ2V0c1tdID0gewpAQCAtNjEsMTAgKzczLDggQEAKIAogc3RhdGljIGludCB6eWxvbml0ZV93bTk3MTNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JLyogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCB1c2Ugb2YgdGhlIEFDOTcgY2xvY2sgaGVyZS4gIElmCi0JICogQ0xLX1BPVVQgaXMgc2VsZWN0ZWQgYnkgU1cxNSB0aGVuIHRoZSBjbG9jayBBUEkgd2lsbCBuZWVkCi0JICogdG8gYmUgdXNlZCB0byByZXF1ZXN0IGFuZCBlbmFibGUgaXQgaGVyZS4KLQkgKi8KKwlpZiAoY2xrX3BvdXQpCisJCXNuZF9zb2NfZGFpX3NldF9wbGwoJmNvZGVjLT5kYWlbMF0sIDAsIGNsa19nZXRfcmF0ZShwb3V0KSwgMCk7CiAKIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB6eWxvbml0ZV9kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHp5bG9uaXRlX2RhcG1fd2lkZ2V0cykpOwpAQCAtODYsMjcgKzk2LDUxIEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCXVuc2lnbmVkIGludCBwbGxfb3V0ID0gMDsKLQl1bnNpZ25lZCBpbnQgYWNkcyA9IDA7CiAJdW5zaWduZWQgaW50IHdtOTcxM19kaXYgPSAwOwogCWludCByZXQgPSAwOworCWludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlpbnQgd2lkdGggPSBzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOwogCi0Jc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJLyogT25seSBzdXBwb3J0IHJhdGlvcyB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBuZWF0bHkgZnJvbSB0aGUgQUM5NworCSAqIGJhc2VkIG1hc3RlciBjbG9jayAtIGluIHBhcnRpY3VsYXIsIHRoaXMgZXhjbHVkZXMgNDQuMWtIei4KKwkgKiBJbiBtb3N0IGFwcGxpY2F0aW9ucyB0aGUgdm9pY2UgREFDIHdpbGwgYmUgdXNlZCBmb3IgdGVsZXBob255CisJICogZGF0YSBzbyBtdWx0aXBsZXMgb2YgOGtIeiB3aWxsIGJlIHRoZSBjb21tb24gY2FzZS4KKwkgKi8KKwlzd2l0Y2ggKHJhdGUpIHsKIAljYXNlIDgwMDA6CiAJCXdtOTcxM19kaXYgPSAxMjsKLQkJcGxsX291dCA9IDIwNDgwMDA7CiAJCWJyZWFrOwogCWNhc2UgMTYwMDA6CiAJCXdtOTcxM19kaXYgPSA2OwotCQlwbGxfb3V0ID0gNDA5NjAwMDsKIAkJYnJlYWs7CiAJY2FzZSA0ODAwMDoKLQlkZWZhdWx0OgogCQl3bTk3MTNfZGl2ID0gMjsKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQlhY2RzID0gMTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogRG9uJ3Qgc3VwcG9ydCBPU1MgZW11bGF0aW9uICovCisJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIEFkZCAxIHRvIHRoZSB3aWR0aCBmb3IgdGhlIGxlYWRpbmcgY2xvY2sgY3ljbGUgKi8KKwlwbGxfb3V0ID0gcmF0ZSAqICh3aWR0aCArIDEpICogODsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfQVVESU8sIDAsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjcHVfZGFpLCAwLCAwLCBwbGxfb3V0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjbGtfcG91dCkKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNOTcxM19QQ01DTEtfUExMX0RJViwKKwkJCQkJICAgICBXTTk3MTNfUENNRElWKHdtOTcxM19kaXYpKTsKKwllbHNlCisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY29kZWNfZGFpLCBXTTk3MTNfUENNQ0xLX0RJViwKKwkJCQkJICAgICBXTTk3MTNfUENNRElWKHdtOTcxM19kaXYpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAogCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwogCWlmIChyZXQgPCAwKQpAQCAtMTE3LDMyICsxNTEsNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KGNwdV9kYWksCi0JCQkJICAgICAgIHBhcmFtc19jaGFubmVscyhwYXJhbXMpLAotCQkJCSAgICAgICBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNwdV9kYWksIDAsIDAsIHBsbF9vdXQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBQWEFfU1NQX0FVRElPX0RJVl9BQ0RTLCBhY2RzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfQVVESU8sIDAsIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogTm90ZSB0aGF0IGlmIHRoZSBQTEwgaXMgaW4gdXNlIHRoZSBXTTk3MTNfUENNQ0xLX1BMTF9ESVYgbmVlZHMKLQkgKiB0byBiZSBzZXQgaW5zdGVhZC4KLQkgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV005NzEzX1BDTUNMS19ESVYsCi0JCQkJICAgICBXTTk3MTNfUENNRElWKHdtOTcxM19kaXYpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNzMsOCArMTgxLDcyIEBACiB9LAogfTsKIAorc3RhdGljIGludCB6eWxvbml0ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoY2xrX3BvdXQpIHsKKwkJcG91dCA9IGNsa19nZXQoTlVMTCwgIkNMS19QT1VUIik7CisJCWlmIChJU19FUlIocG91dCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBvYnRhaW4gQ0xLX1BPVVQ6ICVsZFxuIiwKKwkJCQlQVFJfRVJSKHBvdXQpKTsKKwkJCXJldHVybiBQVFJfRVJSKHBvdXQpOworCQl9CisKKwkJcmV0ID0gY2xrX2VuYWJsZShwb3V0KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZW5hYmxlIENMS19QT1VUOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJY2xrX3B1dChwb3V0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJNQ0xLIGVuYWJsZWQgYXQgJWx1SHpcbiIsCisJCQljbGtfZ2V0X3JhdGUocG91dCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp5bG9uaXRlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChjbGtfcG91dCkgeworCQljbGtfZGlzYWJsZShwb3V0KTsKKwkJY2xrX3B1dChwb3V0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6eWxvbml0ZV9zdXNwZW5kX3Bvc3Qoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWlmIChjbGtfcG91dCkKKwkJY2xrX2Rpc2FibGUocG91dCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6eWxvbml0ZV9yZXN1bWVfcHJlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoY2xrX3BvdXQpIHsKKwkJcmV0ID0gY2xrX2VuYWJsZShwb3V0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGVuYWJsZSBDTEtfUE9VVDogJWRcbiIsCisJCQkJcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCB6eWxvbml0ZSA9IHsKIAkubmFtZSA9ICJaeWxvbml0ZSIsCisJLnByb2JlID0gJnp5bG9uaXRlX3Byb2JlLAorCS5yZW1vdmUgPSAmenlsb25pdGVfcmVtb3ZlLAorCS5zdXNwZW5kX3Bvc3QgPSAmenlsb25pdGVfc3VzcGVuZF9wb3N0LAorCS5yZXN1bWVfcHJlID0gJnp5bG9uaXRlX3Jlc3VtZV9wcmUsCiAJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCiAJLmRhaV9saW5rID0genlsb25pdGVfZGFpLAogCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKHp5bG9uaXRlX2RhaSksCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnIGIvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZwppbmRleCBmY2QwM2FjLi4yZjNhMjFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKQEAgLTEsMTkgKzEsMzEgQEAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0MKLQl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciB0aGUgU2Ftc3VuZyBTM0MyNFhYIGNoaXBzIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgdGhlIFNhbXN1bmcgUzNDWFhYWCBjaGlwcyIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1MzQzY0WFgKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KLQkgIHRoZSBTM0MyNFhYIEFDOTcsIEkyUyBvciBTU1AgaW50ZXJmYWNlLiBZb3Ugd2lsbCBhbHNvIG5lZWQKLQkgIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgorCSAgdGhlIFMzQzI0WFggYW5kIFMzQzY0WFggQUM5NywgSTJTIG9yIFNTUCBpbnRlcmZhY2UuIFlvdSB3aWxsCisJICBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCiAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfSTJTCiAJdHJpc3RhdGUKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKworY29uZmlnIFNORF9TM0NfSTJTVjJfU09DCisJdHJpc3RhdGUKIAogY29uZmlnIFNORF9TM0MyNDEyX1NPQ19JMlMKIAl0cmlzdGF0ZQorCXNlbGVjdCBTTkRfUzNDX0kyU1YyX1NPQworCXNlbGVjdCBTM0MyNDEwX0RNQQorCitjb25maWcgU05EX1MzQzY0WFhfU09DX0kyUworCXRyaXN0YXRlCisJc2VsZWN0IFNORF9TM0NfSTJTVjJfU09DCisJc2VsZWN0IFMzQzY0WFhfRE1BCiAKIGNvbmZpZyBTTkRfUzNDMjQ0M19TT0NfQUM5NwogCXRyaXN0YXRlCisJc2VsZWN0IFMzQzI0MTBfRE1BCiAJc2VsZWN0IEFDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUM5N19CVVMKIAkKQEAgLTI2LDYgKzM4LDE0IEBACiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQwCiAJICB3aXRoIHRoZSBXTTg3NTMuCiAKK2NvbmZpZyBTTkRfUzNDMjRYWF9TT0NfSklWRV9XTTg3NTAKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBKaXZlIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfSklWRQorCXNlbGVjdCBTTkRfU09DX1dNODc1MAorCXNlbGVjdCBTTkRfUzNDMjQxMl9TT0NfSTJTCisJaGVscAorCSAgU2F0IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgSml2ZS4KKwogY29uZmlnIFNORF9TM0MyNFhYX1NPQ19TTURLMjQ0M19XTTk3MTAKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgU01ESzI0NDMgLSBXTTk3MTAiCiAJZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9TTURLMjQ0MwpAQCAtNDgsNCArNjgsNSBAQAogCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgVURBMTM0WCB3aXJlZCB0byBhIFMzQzI0WFgiCiAgICAgICAgCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DCiAgICAgICAgCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCisJc2VsZWN0IFNORF9TT0NfTDMKICAgICAgICAJc2VsZWN0IFNORF9TT0NfVURBMTM0WApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQppbmRleCA5NmIzZjNmLi4wN2E5M2EyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQpAQCAtMiwxOSArMiwyNSBAQAogc25kLXNvYy1zM2MyNHh4LW9ianMgOj0gczNjMjR4eC1wY20ubwogc25kLXNvYy1zM2MyNHh4LWkycy1vYmpzIDo9IHMzYzI0eHgtaTJzLm8KIHNuZC1zb2MtczNjMjQxMi1pMnMtb2JqcyA6PSBzM2MyNDEyLWkycy5vCitzbmQtc29jLXMzYzY0eHgtaTJzLW9ianMgOj0gczNjNjR4eC1pMnMubwogc25kLXNvYy1zM2MyNDQzLWFjOTctb2JqcyA6PSBzM2MyNDQzLWFjOTcubworc25kLXNvYy1zM2MtaTJzLXYyLW9ianMgOj0gczNjLWkycy12Mi5vCiAKIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0MpICs9IHNuZC1zb2MtczNjMjR4eC5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0kyUykgKz0gc25kLXNvYy1zM2MyNHh4LWkycy5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0NDNfU09DX0FDOTcpICs9IHNuZC1zb2MtczNjMjQ0My1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjQxMl9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0MTItaTJzLm8KK29iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzY0eHgtaTJzLm8KK29iai0kKENPTkZJR19TTkRfUzNDX0kyU1YyX1NPQykgKz0gc25kLXNvYy1zM2MtaTJzLXYyLm8KIAogIyBTM0MyNFhYIE1hY2hpbmUgU3VwcG9ydAorc25kLXNvYy1qaXZlLXdtODc1MC1vYmpzIDo9IGppdmVfd204NzUwLm8KIHNuZC1zb2MtbmVvMTk3My13bTg3NTMtb2JqcyA6PSBuZW8xOTczX3dtODc1My5vCiBzbmQtc29jLXNtZGsyNDQzLXdtOTcxMC1vYmpzIDo9IHNtZGsyNDQzX3dtOTcxMC5vCiBzbmQtc29jLWxuMjQ0MHNiYy1hbGM2NTAtb2JqcyA6PSBsbjI0NDBzYmNfYWxjNjUwLm8KIHNuZC1zb2MtczNjMjR4eC11ZGExMzR4LW9ianMgOj0gczNjMjR4eF91ZGExMzR4Lm8KIAorb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19KSVZFX1dNODc1MCkgKz0gc25kLXNvYy1qaXZlLXdtODc1MC5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX05FTzE5NzNfV004NzUzKSArPSBzbmQtc29jLW5lbzE5NzMtd204NzUzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwKSArPSBzbmQtc29jLXNtZGsyNDQzLXdtOTcxMC5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0xOMjQ0MFNCQ19BTEM2NTApICs9IHNuZC1zb2MtbG4yNDQwc2JjLWFsYzY1MC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9qaXZlX3dtODc1MC5jIGIvc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjA2Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYwpAQCAtMCwwICsxLDIwMSBAQAorLyogc291bmQvc29jL3MzYzI0eHgvaml2ZV93bTg3NTAuYworICoKKyAqIENvcHlyaWdodCAyMDA3LDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogQmFzZWQgb24gc291bmQvc29jL3B4YS9zcGl0ei5jCisgKglDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoJQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgorI2luY2x1ZGUgInMzYzI0MTItaTJzLmgiCisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzUwLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsgIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkxPVVQxIiB9LAorCXsgIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlJPVVQxIiB9LAorCXsgIkludGVybmFsIFNwZWFrZXIiLCBOVUxMLCAiTE9VVDIiIH0sCisJeyAiSW50ZXJuYWwgU3BlYWtlciIsIE5VTEwsICJST1VUMiIgfSwKKwl7ICJMSU5QVVQxIiwgTlVMTCwgIkxpbmUgSW5wdXQiIH0sCisJeyAiUklOUFVUMSIsIE5VTEwsICJMaW5lIElucHV0IiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODc1MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiSW50ZXJuYWwgU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJMaW5lIEluIiwgTlVMTCksCit9OworCitzdGF0aWMgaW50IGppdmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXN0cnVjdCBzM2NfaTJzdjJfcmF0ZV9jYWxjIGRpdjsKKwl1bnNpZ25lZCBpbnQgY2xrID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgODAwMDoKKwljYXNlIDE2MDAwOgorCWNhc2UgNDgwMDA6CisJY2FzZSA5NjAwMDoKKwkJY2xrID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgMTEwMjU6CisJY2FzZSAyMjA1MDoKKwljYXNlIDQ0MTAwOgorCQljbGsgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJfQorCisJczNjX2kyc3YyX2NhbGNfcmF0ZSgmZGl2LCBOVUxMLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAorCQkJICAgIHMzYzI0MTJfZ2V0X2lpc2NsaygpKTsKKworCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgdGhlIGNvZGVjIHN5c3RlbSBjbG9jayBmb3IgREFDIGFuZCBBREMgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzUwX1NZU0NMSywgY2xrLAorCQkJCSAgICAgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0MTJfRElWX1JDTEssIGRpdi5mc19kaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBTM0MyNDEyX0RJVl9QUkVTQ0FMRVIsCisJCQkJICAgICBkaXYuY2xrX2RpdiAtIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgaml2ZV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGppdmVfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIGludCBqaXZlX3dtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgZXJyOworCisJLyogVGhlc2UgZW5kcG9pbnRzIGFyZSBub3QgYmVpbmcgdXNlZC4gKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOUFVUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQyIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk8iKTsKKworCS8qIEFkZCBqaXZlIHNwZWNpZmljIHdpZGdldHMgKi8KKwllcnIgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKHdtODc1MF9kYXBtX3dpZGdldHMpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhZGQgd2lkZ2V0cyAoJWQpXG4iLAorCQkgICAgICAgX19mdW5jX18sIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGppdmVfZGFpID0geworCS5uYW1lCQk9ICJ3bTg3NTAiLAorCS5zdHJlYW1fbmFtZQk9ICJXTTg3NTAiLAorCS5jcHVfZGFpCT0gJnMzYzI0MTJfaTJzX2RhaSwKKwkuY29kZWNfZGFpCT0gJndtODc1MF9kYWksCisJLmluaXQJCT0gaml2ZV93bTg3NTBfaW5pdCwKKwkub3BzCQk9ICZqaXZlX29wcywKK307CisKKy8qIGppdmUgYXVkaW8gbWFjaGluZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19tYWNoaW5lIHNuZF9zb2NfbWFjaGluZV9qaXZlID0geworCS5uYW1lCQk9ICJKaXZlIiwKKwkuZGFpX2xpbmsJPSAmaml2ZV9kYWksCisJLm51bV9saW5rcwk9IDEsCit9OworCisvKiBqaXZlIGF1ZGlvIHByaXZhdGUgZGF0YSAqLworc3RhdGljIHN0cnVjdCB3bTg3NTBfc2V0dXBfZGF0YSBqaXZlX3dtODc1MF9zZXR1cCA9IHsKK307CisKKy8qIGppdmUgYXVkaW8gc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGppdmVfc25kX2RldmRhdGEgPSB7CisJLm1hY2hpbmUJPSAmc25kX3NvY19tYWNoaW5lX2ppdmUsCisJLnBsYXRmb3JtCT0gJnMzYzI0eHhfc29jX3BsYXRmb3JtLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTg3NTBfc3BpLAorCS5jb2RlY19kYXRhCT0gJmppdmVfd204NzUwX3NldHVwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmppdmVfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgaml2ZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19qaXZlKCkpCisJCXJldHVybiAwOworCisJcHJpbnRrKCJKSVZFIFdNODc1MCBBdWRpbyBzdXBwb3J0XG4iKTsKKworCWppdmVfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghaml2ZV9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGppdmVfc25kX2RldmljZSwgJmppdmVfc25kX2RldmRhdGEpOworCWppdmVfc25kX2RldmRhdGEuZGV2ID0gJmppdmVfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoaml2ZV9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQoaml2ZV9zbmRfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqaXZlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihqaXZlX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChqaXZlX2luaXQpOworbW9kdWxlX2V4aXQoaml2ZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBKaXZlIEF1ZGlvIHN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX3dtODc1My5jCmluZGV4IDQ1YmIxMmUuLjI4OWZhZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYwpAQCAtMjksMjUgKzI5LDE3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzUzLmgiCiAjaW5jbHVkZSAibG00ODU3LmgiCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogCi0vKiBEZWJ1Z2dpbmcgc3R1ZmYgKi8KLSNkZWZpbmUgUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTNfREVCVUcgMAotI2lmIFMzQzI0WFhfU09DX05FTzE5NzNfV004NzUzX0RFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyAiczNjMjR4eC1zb2MtbmVvMTk3My13bTg3NTM6ICIgeCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQotI2VuZGlmCi0KIC8qIGRlZmluZSB0aGUgc2NlbmFyaW9zICovCiAjZGVmaW5lIE5FT19BVURJT19PRkYJCQkwCiAjZGVmaW5lIE5FT19HU01fQ0FMTF9BVURJT19IQU5EU0VUCTEKQEAgLTcyLDcgKzY0LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGlpc19jbGtyYXRlOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc19jbGtyYXRlID0gczNjMjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSgpOwogCkBAIC0xNTgsNyArMTUwLDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIGRpc2FibGUgdGhlIFBMTCAqLwogCXJldHVybiBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgV004NzUzX1BMTDEsIDAsIDApOwpAQCAtMTgxLDcgKzE3Myw3IEBACiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBpaXNfY2xrcmF0ZTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNfY2xrcmF0ZSA9IHMzYzI0eHhfaTJzX2dldF9jbG9ja3JhdGUoKTsKIApAQCAtMjI0LDcgKzIxNiw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KIAlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODc1M19QTEwyLCAwLCAwKTsKQEAgLTI0Niw3ICsyMzgsNyBAQAogCiBzdGF0aWMgaW50IHNldF9zY2VuYXJpb19lbmRwb2ludHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgc2NlbmFyaW8pCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN3aXRjaCAobmVvMTk3M19zY2VuYXJpbykgewogCWNhc2UgTkVPX0FVRElPX09GRjoKQEAgLTMzMCw3ICszMjIsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAobmVvMTk3M19zY2VuYXJpbyA9PSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKIAkJcmV0dXJuIDA7CkBAIC0zNDQsNyArMzM2LDcgQEAKIAogc3RhdGljIHZvaWQgbG00ODU3X3dyaXRlX3JlZ3Modm9pZCkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGkyY19tYXN0ZXJfc2VuZChpMmMsIGxtNDg1N19yZWdzLCA0KSAhPSA0KQogCQlwcmludGsoS0VSTl9FUlIgImxtNDg1NzogaTJjIHdyaXRlIGZhaWxlZFxuIik7CkBAIC0zNTcsNyArMzQ5LDcgQEAKIAlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweDBGOwogCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4RkY7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAobG00ODU3X3JlZ3NbcmVnXSA+PiBzaGlmdCkgJiBtYXNrOwogCXJldHVybiAwOwpAQCAtMzg1LDcgKzM3Nyw3IEBACiB7CiAJdTggdmFsdWUgPSBsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJiAweDBGOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmICh2YWx1ZSkKIAkJdmFsdWUgLT0gNTsKQEAgLTM5OSw3ICszOTEsNyBAQAogewogCXU4IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHZhbHVlKQogCQl2YWx1ZSArPSA1OwpAQCAtNTA2LDkgKzQ5OCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgbmVvMTk3M193bTg3NTNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHNldCB1cCBOQyBjb2RlYyBwaW5zICovCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxPVVQyIik7CkBAIC01MjYsMTMgKzUxOCwxMCBAQAogCXNldF9zY2VuYXJpb19lbmRwb2ludHMoY29kZWMsIE5FT19BVURJT19PRkYpOwogCiAJLyogYWRkIG5lbzE5NzMgc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfbmVvMTk3M19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJndtODc1M19uZW8xOTczX2NvbnRyb2xzW2ldLAotCQkJCWNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc1M19uZW8xOTczX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoODc1M19uZW8xOTczX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBzZXQgdXAgbmVvMTk3MyBzcGVjaWZpYyBhdWRpbyByb3V0ZXMgKi8KIAllcnIgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgZGFwbV9yb3V0ZXMsCkBAIC01ODUsMjEgKzU3NCwxNSBAQAogCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKG5lbzE5NzNfZGFpKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgbmVvMTk3M193bTg3NTNfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWEsCi19OwotCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG5lbzE5NzNfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmbmVvMTk3MywKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzUzLAotCS5jb2RlY19kYXRhID0gJm5lbzE5NzNfd204NzUzX3NldHVwLAogfTsKIAogc3RhdGljIGludCBsbTQ4NTdfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpMmMgPSBjbGllbnQ7CiAKQEAgLTYwOSw3ICs1OTIsNyBAQAogCiBzdGF0aWMgaW50IGxtNDg1N19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWkyYyA9IE5VTEw7CiAKQEAgLTYyMCw3ICs2MDMsNyBAQAogCiBzdGF0aWMgaW50IGxtNDg1N19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJZGV2X2RiZygmZGV2LT5kZXYsICJsbTQ4NTdfc3VzcGVuZFxuIik7CiAJbG00ODU3X3N0YXRlID0gbG00ODU3X3JlZ3NbTE00ODU3X0NUUkxdICYgMHhmOwpAQCAtNjMzLDcgKzYxNiw3IEBACiAKIHN0YXRpYyBpbnQgbG00ODU3X3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2KQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAobG00ODU3X3N0YXRlKSB7CiAJCWxtNDg1N19yZWdzW0xNNDg1N19DVFJMXSB8PSAobG00ODU3X3N0YXRlICYgMHgwZik7CkBAIC02NDQsNyArNjI3LDcgQEAKIAogc3RhdGljIHZvaWQgbG00ODU3X3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpkZXYpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWRldl9kYmcoJmRldi0+ZGV2LCAibG00ODU3X3NodXRkb3duXG4iKTsKIAlsbTQ4NTdfcmVnc1tMTTQ4NTdfQ1RSTF0gJj0gMHhmMDsKQEAgLTY3NSw3ICs2NTgsNyBAQAogewogCWludCByZXQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFtYWNoaW5lX2lzX25lbzE5NzNfZ3RhMDEoKSkgewogCQlwcmludGsoS0VSTl9JTkZPCkBAIC03MDYsNyArNjg5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG5lbzE5NzNfZXhpdCh2b2lkKQogewotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpMmNfZGVsX2RyaXZlcigmbG00ODU3X2kyY19kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG5lbzE5NzNfc25kX2RldmljZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1YTRjOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuYwpAQCAtMCwwICsxLDYzOCBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWkyYy12Mi5jCisgKgorICogQUxTQSBTb2MgQXVkaW8gTGF5ZXIgLSBJMlMgY29yZSBmb3IgbmV3ZXIgU2Ftc3VuZyBTb0NzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoJR3JhZW1lIEdyZWdvcnkgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbQorICoJbGludXhAd29sZnNvbm1pY3JvLmNvbQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwNywgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtczNjMjQxMi1paXMuaD4KKworI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCisjaW5jbHVkZSAiczNjLWkycy12Mi5oIgorCisjZGVmaW5lIFMzQzI0MTJfSTJTX0RFQlVHX0NPTiAwCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19pMnN2Ml9pbmZvICp0b19pbmZvKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlyZXR1cm4gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworfQorCisjZGVmaW5lIGJpdF9zZXQodiwgYikgKCgodikgJiAoYikpID8gMSA6IDApCisKKyNpZiBTM0MyNDEyX0kyU19ERUJVR19DT04KK3N0YXRpYyB2b2lkIGRiZ19zaG93Y29uKGNvbnN0IGNoYXIgKmZuLCB1MzIgY29uKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlczogTFJJPSVkLCBUWEZFTVBUPSVkLCBSWEZFTVBUPSVkLCBUWEZGVUxMPSVkLCBSWEZGVUxMPSVkXG4iLCBmbiwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhGSUZPX0VNUFRZKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRklGT19FTVBUWSksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRlVMTCksCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRlVMTCkpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQQVVTRTogVFhETUE9JWQsIFJYRE1BPSVkLCBUWENIPSVkLCBSWENIPSVkXG4iLAorCSAgICAgICBmbiwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0UpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRSkpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogQUNUSVZFOiBUWERNQT0lZCwgUlhETUE9JWQsIElJUz0lZFxuIiwgZm4sCisJICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUpLAorCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFKSwKKwkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkUpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX3Nob3djb24oY29uc3QgY2hhciAqZm4sIHUzMiBjb24pCit7Cit9CisjZW5kaWYKKworCisvKiBUdXJuIG9uIG9yIG9mZiB0aGUgdHJhbnNtaXNzaW9uIHBhdGguICovCit2b2lkIHMzYzI0MTJfc25kX3R4Y3RybChzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywgaW50IG9uKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IGkycy0+cmVnczsKKwl1MzIgZmljLCBjb24sIG1vZDsKKworCXByX2RlYnVnKCIlcyglZClcbiIsIF9fZnVuY19fLCBvbik7CisKKwlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCWNvbiA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJbW9kID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCXByX2RlYnVnKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOworCisJaWYgKG9uKSB7CisJCWNvbiB8PSBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUgfCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0U7CisKKwkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6CisJCQkvKiBkbyBub3RoaW5nLCB3ZSBhcmUgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwkJCWJyZWFrOworCisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycihpMnMtPmRldiwgIlRYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOworCQl9CisKKwkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwl9IGVsc2UgeworCQkvKiBOb3RlLCB3ZSBkbyBub3QgaGF2ZSBhbnkgaW5kaWNhdGlvbiB0aGF0IHRoZSBGSUZPIHByb2JsZW1zCisJCSAqIHRoYSB0aGUgUzNDMjQxMC8yNDQwIGhhZCBhcHBseSBoZXJlLCBzbyB3ZSBzaG91bGQgYmUgYWJsZQorCQkgKiB0byBkaXNhYmxlIHRoZSBETUEgYW5kIFRYIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBGSUZPUy4KKwkJICovCisKKwkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRTsKKwkJY29uIHw9ICBTM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRTsKKworCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgeworCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOworCQkJYnJlYWs7CisKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoaTJzLT5kZXYsICJUWERJUzogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7CisJCX0KKworCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOworCX0KKworCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisJZGJnX3Nob3djb24oX19mdW5jX18sIGNvbik7CisJcHJfZGVidWcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX3NuZF90eGN0cmwpOworCit2b2lkIHMzYzI0MTJfc25kX3J4Y3RybChzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywgaW50IG9uKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IGkycy0+cmVnczsKKwl1MzIgZmljLCBjb24sIG1vZDsKKworCXByX2RlYnVnKCIlcyglZClcbiIsIF9fZnVuY19fLCBvbik7CisKKwlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOworCWNvbiA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJbW9kID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCXByX2RlYnVnKCIlczogSUlTOiBDT049JXggTU9EPSV4IEZJQz0leFxuIiwgX19mdW5jX18sIGNvbiwgbW9kLCBmaWMpOworCisJaWYgKG9uKSB7CisJCWNvbiB8PSBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUgfCBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFOworCQljb24gJj0gflMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0U7CisKKwkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6CisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9SWE9OTFk6CisJCQkvKiBkbyBub3RoaW5nLCB3ZSBhcmUgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwkJCWJyZWFrOworCisJCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycihpMnMtPmRldiwgIlJYRU46IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOworCQl9CisKKwkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwl9IGVsc2UgeworCQkvKiBTZWUgdHhjdHJsIG5vdGVzIG9uIEZJRk9zLiAqLworCisJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFOworCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFOworCQljb24gfD0gIFMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0U7CisKKwkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKKwkJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKKwkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOworCQkJYnJlYWs7CisKKwkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6CisJCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKKwkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGkycy0+ZGV2LCAiUlhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7CisJCX0KKworCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOworCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCX0KKworCWZpYyA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisJcHJfZGVidWcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2MyNDEyX3NuZF9yeGN0cmwpOworCisvKgorICogV2FpdCBmb3IgdGhlIExSIHNpZ25hbCB0byBhbGxvdyBzeW5jaHJvbmlzYXRpb24gdG8gdGhlIEwvUiBjbG9jaworICogZnJvbSB0aGUgY29kZWMuIE1heSBvbmx5IGJlIG5lZWRlZCBmb3Igc2xhdmUgbW9kZS4KKyAqLworc3RhdGljIGludCBzM2MyNDEyX3NuZF9scnN5bmMoc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnMpCit7CisJdTMyIGlpc2NvbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisKKwl3aGlsZSAoMSkgeworCQlpaXNjb24gPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJCWlmIChpaXNjb24gJiBTM0MyNDEyX0lJU0NPTl9MUklOREVYKQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVvdXQgPCBqaWZmaWVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IFMzQzI0MTIgSTJTIERBSSBmb3JtYXQKKyAqLworc3RhdGljIGludCBzM2MyNDEyX2kyc19zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhjcHVfZGFpKTsKKwl1MzIgaWlzbW9kOworCisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKworCWlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHI6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEzKQorI2RlZmluZSBJSVNNT0RfTUFTVEVSX01BU0sgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0sKKyNkZWZpbmUgSUlTTU9EX1NMQVZFIFMzQzI0MTJfSUlTTU9EX1NMQVZFCisjZGVmaW5lIElJU01PRF9NQVNURVIgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfUzNDNjRYWCkKKy8qIEZyb20gUmV2MS4xIGRhdGFzaGVldCwgd2UgaGF2ZSB0d28gbWFzdGVyIGFuZCB0d28gc2xhdmUgbW9kZXM6CisgKiBJTVNbMTE6MTBdOgorICoJMDAgPSBtYXN0ZXIgbW9kZSwgZmVkIGZyb20gUENMSworICoJMDEgPSBtYXN0ZXIgbW9kZSwgZmVkIGZyb20gQ0xLQVVESU8KKyAqCTEwID0gc2xhdmUgbW9kZSwgdXNpbmcgUENMSworICoJMTEgPSBzbGF2ZSBtb2RlLCB1c2luZyBJMlNDTEsKKyAqLworI2RlZmluZSBJSVNNT0RfTUFTVEVSX01BU0sgKDEgPDwgMTEpCisjZGVmaW5lIElJU01PRF9TTEFWRSAoMSA8PCAxMSkKKyNkZWZpbmUgSUlTTU9EX01BU1RFUiAoMHgwKQorI2VuZGlmCisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlpMnMtPm1hc3RlciA9IDA7CisJCWlpc21vZCAmPSB+SUlTTU9EX01BU1RFUl9NQVNLOworCQlpaXNtb2QgfD0gSUlTTU9EX1NMQVZFOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWkycy0+bWFzdGVyID0gMTsKKwkJaWlzbW9kICY9IH5JSVNNT0RfTUFTVEVSX01BU0s7CisJCWlpc21vZCB8PSBJSVNNT0RfTUFTVEVSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygidW5rbndvbiBtYXN0ZXIvc2xhdmUgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9TREZfTUFTSzsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfTVNCOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9MU0I7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX0lJUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIlVua25vd24gZGF0YSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICV4IFxuIiwgaWlzbW9kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNDEyX2kyc19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKnNvY2RhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaSA9IHJ0ZC0+ZGFpOworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWktPmNwdV9kYWkpOworCXUzMiBpaXNtb2Q7CisKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSBpMnMtPmRtYV9wbGF5YmFjazsKKwllbHNlCisJCWRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSBpMnMtPmRtYV9jYXB0dXJlOworCisJLyogV29ya2luZyBjb3BpZXMgb2YgcmVnaXN0ZXIgKi8KKwlpaXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJcHJfZGVidWcoIiVzOiByOiBJSVNNT0Q6ICV4XG4iLCBfX2Z1bmNfXywgaWlzbW9kKTsKKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgorCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfOEJJVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF84QklUOworCQlicmVhazsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJcHJfZGVidWcoIiVzOiB3OiBJSVNNT0Q6ICV4XG4iLCBfX2Z1bmNfXywgaWlzbW9kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNDEyX2kyc190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8ocnRkLT5kYWktPmNwdV9kYWkpOworCWludCBjYXB0dXJlID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisJdW5zaWduZWQgbG9uZyBpcnFzOworCWludCByZXQgPSAwOworCisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJLyogT24gc3RhcnQsIGVuc3VyZSB0aGF0IHRoZSBGSUZPcyBhcmUgY2xlYXJlZCBhbmQgcmVzZXQuICovCisKKwkJd3JpdGVsKGNhcHR1cmUgPyBTM0MyNDEyX0lJU0ZJQ19SWEZMVVNIIDogUzNDMjQxMl9JSVNGSUNfVFhGTFVTSCwKKwkJICAgICAgIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKKworCQkvKiBjbGVhciBhZ2FpbiwganVzdCBpbiBjYXNlICovCisJCXdyaXRlbCgweDAsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaWYgKCFpMnMtPm1hc3RlcikgeworCQkJcmV0ID0gczNjMjQxMl9zbmRfbHJzeW5jKGkycyk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXhpdF9lcnI7CisJCX0KKworCQlsb2NhbF9pcnFfc2F2ZShpcnFzKTsKKworCQlpZiAoY2FwdHVyZSkKKwkJCXMzYzI0MTJfc25kX3J4Y3RybChpMnMsIDEpOworCQllbHNlCisJCQlzM2MyNDEyX3NuZF90eGN0cmwoaTJzLCAxKTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFzKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJbG9jYWxfaXJxX3NhdmUoaXJxcyk7CisKKwkJaWYgKGNhcHR1cmUpCisJCQlzM2MyNDEyX3NuZF9yeGN0cmwoaTJzLCAwKTsKKwkJZWxzZQorCQkJczNjMjQxMl9zbmRfdHhjdHJsKGkycywgMCk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworZXhpdF9lcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCBTM0MyNDEyIENsb2NrIGRpdmlkZXJzCisgKi8KK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfc2V0X2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkJICBpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhjcHVfZGFpKTsKKwl1MzIgcmVnOworCisJcHJfZGVidWcoIiVzKCVwLCAlZCwgJWQpXG4iLCBfX2Z1bmNfXywgY3B1X2RhaSwgZGl2X2lkLCBkaXYpOworCisJc3dpdGNoIChkaXZfaWQpIHsKKwljYXNlIFMzQ19JMlNWMl9ESVZfQkNMSzoKKwkJcmVnID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCQlyZWcgJj0gflMzQzI0MTJfSUlTTU9EX0JDTEtfTUFTSzsKKwkJd3JpdGVsKHJlZyB8IGRpdiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJCXByX2RlYnVnKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOworCQlicmVhazsKKworCWNhc2UgUzNDX0kyU1YyX0RJVl9SQ0xLOgorCQlpZiAoZGl2ID4gMykgeworCQkJLyogY29udmVydCB2YWx1ZSB0byBiaXQgZmllbGQgKi8KKworCQkJc3dpdGNoIChkaXYpIHsKKwkJCWNhc2UgMjU2OgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfMjU2RlM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzg0OgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfMzg0RlM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNTEyOgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfNTEyRlM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNzY4OgorCQkJCWRpdiA9IFMzQzI0MTJfSUlTTU9EX1JDTEtfNzY4RlM7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKworCQlyZWcgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXJlZyAmPSB+UzNDMjQxMl9JSVNNT0RfUkNMS19NQVNLOworCQl3cml0ZWwocmVnIHwgZGl2LCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCXByX2RlYnVnKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOworCQlicmVhazsKKworCWNhc2UgUzNDX0kyU1YyX0RJVl9QUkVTQ0FMRVI6CisJCWlmIChkaXYgPj0gMCkgeworCQkJd3JpdGVsKChkaXYgPDwgOCkgfCBTM0MyNDEyX0lJU1BTUl9QU1JFTiwKKwkJCSAgICAgICBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7CisJCX0gZWxzZSB7CisJCQl3cml0ZWwoMHgwLCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7CisJCX0KKwkJcHJfZGVidWcoIiVzOiBQU1I9JTA4eFxuIiwgX19mdW5jX18sIHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGRlZmF1bHQgdGFibGUgb2YgYWxsIGF2YWlhbGFibGUgcm9vdCBmcyBkaXZpc29ycyAqLworc3RhdGljIHVuc2lnbmVkIGludCBpaXNfZnNfdGFiW10gPSB7IDI1NiwgNTEyLCAzODQsIDc2OCB9OworCitpbnQgczNjMjQxMl9paXNfY2FsY19yYXRlKHN0cnVjdCBzM2NfaTJzdjJfcmF0ZV9jYWxjICppbmZvLAorCQkJICB1bnNpZ25lZCBpbnQgKmZzdGFiLAorCQkJICB1bnNpZ25lZCBpbnQgcmF0ZSwgc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IGZzY2xrOworCXVuc2lnbmVkIGludCBhY3R1YWw7CisJdW5zaWduZWQgaW50IGZzOworCXVuc2lnbmVkIGludCBmc2RpdjsKKwlzaWduZWQgaW50IGRldmlhdGlvbiA9IDA7CisJdW5zaWduZWQgaW50IGJlc3RfZnMgPSAwOworCXVuc2lnbmVkIGludCBiZXN0X2RpdiA9IDA7CisJdW5zaWduZWQgaW50IGJlc3RfcmF0ZSA9IDA7CisJdW5zaWduZWQgaW50IGJlc3RfZGV2aWF0aW9uID0gSU5UX01BWDsKKworCWlmIChmc3RhYiA9PSBOVUxMKQorCQlmc3RhYiA9IGlpc19mc190YWI7CisKKwlmb3IgKGZzID0gMDsgZnMgPCBBUlJBWV9TSVpFKGlpc19mc190YWIpOyBmcysrKSB7CisJCWZzZGl2ID0gaWlzX2ZzX3RhYltmc107CisKKwkJZnNjbGsgPSBjbGtyYXRlIC8gZnNkaXY7CisJCWRpdiA9IGZzY2xrIC8gcmF0ZTsKKworCQlpZiAoKGZzY2xrICUgcmF0ZSkgPiAocmF0ZSAvIDIpKQorCQkJZGl2Kys7CisKKwkJaWYgKGRpdiA8PSAxKQorCQkJY29udGludWU7CisKKwkJYWN0dWFsID0gY2xrcmF0ZSAvIChmc2RpdiAqIGRpdik7CisJCWRldmlhdGlvbiA9IGFjdHVhbCAtIHJhdGU7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVkZnM6IGRpdiAlZCA9PiByZXN1bHQgJWQsIGRldmlhdGlvbiAlZFxuIiwKKwkJICAgICAgIGZzZGl2LCBkaXYsIGFjdHVhbCwgZGV2aWF0aW9uKTsKKworCQlkZXZpYXRpb24gPSBhYnMoZGV2aWF0aW9uKTsKKworCQlpZiAoZGV2aWF0aW9uIDwgYmVzdF9kZXZpYXRpb24pIHsKKwkJCWJlc3RfZnMgPSBmc2RpdjsKKwkJCWJlc3RfZGl2ID0gZGl2OworCQkJYmVzdF9yYXRlID0gYWN0dWFsOworCQkJYmVzdF9kZXZpYXRpb24gPSBkZXZpYXRpb247CisJCX0KKworCQlpZiAoZGV2aWF0aW9uID09IDApCisJCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiYmVzdDogZnM9JWQsIGRpdj0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgYmVzdF9mcywgYmVzdF9kaXYsIGJlc3RfcmF0ZSk7CisKKwlpbmZvLT5mc19kaXYgPSBiZXN0X2ZzOworCWluZm8tPmNsa19kaXYgPSBiZXN0X2RpdjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjMjQxMl9paXNfY2FsY19yYXRlKTsKKworaW50IHMzY19pMnN2Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCSAgICBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywKKwkJICAgIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCisJaTJzLT5kZXYgPSBkZXY7CisKKwkvKiByZWNvcmQgb3VyIGkycyBzdHJ1Y3R1cmUgZm9yIGxhdGVyIHVzZSBpbiB0aGUgY2FsbGJhY2tzICovCisJZGFpLT5wcml2YXRlX2RhdGEgPSBpMnM7CisKKwlpMnMtPnJlZ3MgPSBpb3JlbWFwKGJhc2UsIDB4MTAwKTsKKwlpZiAoaTJzLT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgaW9yZW1hcCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWkycy0+aWlzX3BjbGsgPSBjbGtfZ2V0KGRldiwgImlpcyIpOworCWlmIChpMnMtPmlpc19wY2xrID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGlpc19jbG9ja1xuIik7CisJCWlvdW5tYXAoaTJzLT5yZWdzKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJY2xrX2VuYWJsZShpMnMtPmlpc19wY2xrKTsKKworCXMzYzI0MTJfc25kX3R4Y3RybChpMnMsIDApOworCXMzYzI0MTJfc25kX3J4Y3RybChpMnMsIDApOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19pMnN2Ml9wcm9iZSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycyA9IHRvX2luZm8oZGFpKTsKKwl1MzIgaWlzbW9kOworCisJaWYgKGRhaS0+YWN0aXZlKSB7CisJCWkycy0+c3VzcGVuZF9paXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CisJCWkycy0+c3VzcGVuZF9paXNjb24gPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7CisJCWkycy0+c3VzcGVuZF9paXNwc3IgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7CisKKwkJLyogc29tZSBiYXNpYyBzdXNwZW5kIGNoZWNrcyAqLworCisJCWlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKworCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFKQorCQkJcHJfd2FybmluZygiJXM6IFJYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKKworCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFKQorCQkJcHJfd2FybmluZygiJXM6IFRYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKKworCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRSkKKwkJCXByX3dhcm5pbmcoIiVzOiBJSVMgYWN0aXZlXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQxMl9pMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWkpOworCisJcHJfaW5mbygiZGFpX2FjdGl2ZSAlZCwgSUlTTU9EICUwOHgsIElJU0NPTiAlMDh4XG4iLAorCQlkYWktPmFjdGl2ZSwgaTJzLT5zdXNwZW5kX2lpc21vZCwgaTJzLT5zdXNwZW5kX2lpc2Nvbik7CisKKwlpZiAoZGFpLT5hY3RpdmUpIHsKKwkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNjb24sIGkycy0+cmVncyArIFMzQzI0MTJfSUlTQ09OKTsKKwkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNtb2QsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKKwkJd3JpdGVsKGkycy0+c3VzcGVuZF9paXNwc3IsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTUFNSKTsKKworCQl3cml0ZWwoUzNDMjQxMl9JSVNGSUNfUlhGTFVTSCB8IFMzQzI0MTJfSUlTRklDX1RYRkxVU0gsCisJCSAgICAgICBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0ZJQyk7CisKKwkJbmRlbGF5KDI1MCk7CisJCXdyaXRlbCgweDAsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzYzI0MTJfaTJzX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNDEyX2kyc19yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitpbnQgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlkYWktPm9wcy50cmlnZ2VyID0gczNjMjQxMl9pMnNfdHJpZ2dlcjsKKwlkYWktPm9wcy5od19wYXJhbXMgPSBzM2MyNDEyX2kyc19od19wYXJhbXM7CisJZGFpLT5vcHMuc2V0X2ZtdCA9IHMzYzI0MTJfaTJzX3NldF9mbXQ7CisJZGFpLT5vcHMuc2V0X2Nsa2RpdiA9IHMzYzI0MTJfaTJzX3NldF9jbGtkaXY7CisKKwlkYWktPnN1c3BlbmQgPSBzM2MyNDEyX2kyc19zdXNwZW5kOworCWRhaS0+cmVzdW1lID0gczNjMjQxMl9pMnNfcmVzdW1lOworCisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpKGRhaSk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19pMnN2Ml9yZWdpc3Rlcl9kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Njg1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmgKQEAgLTAsMCArMSw5MCBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5oCisgKgorICogQUxTQSBTb2MgQXVkaW8gTGF5ZXIgLSBTM0NfSTJTVjIgSTJTIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqLworCisvKiBUaGlzIGNvZGUgaXMgdGhlIGNvcmUgc3VwcG9ydCBmb3IgdGhlIEkyUyBibG9jayBmb3VuZCBpbiBhIG51bWJlciBvZgorICogU2Ftc3VuZyBTb0MgZGV2aWNlcyB3aGljaCBpcyB1bm9mZmljaWFsbHkgbmFtZWQgSTJTLVYyLiBDdXJyZW50bHkgdGhlCisgKiBTM0MyNDEyIGFuZCB0aGUgUzNDNjRYWCBzZXJpZXMgdXNlIHRoaXMgYmxvY2sgdG8gcHJvdmlkZSAxIG9yIDIgSTJTCisgKiBjaGFubmVscyB2aWEgY29uZmlndXJhYmxlIEdQSU8uCisgKi8KKworI2lmbmRlZiBfX1NORF9TT0NfUzNDMjRYWF9TM0NfSTJTVjJfSTJTX0gKKyNkZWZpbmUgX19TTkRfU09DX1MzQzI0WFhfUzNDX0kyU1YyX0kyU19IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDX0kyU1YyX0RJVl9CQ0xLCSgxKQorI2RlZmluZSBTM0NfSTJTVjJfRElWX1JDTEsJKDIpCisjZGVmaW5lIFMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSCSgzKQorCisvKioKKyAqIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAtIFMzQyBJMlMtVjIgaW5mb3JtYXRpb24KKyAqIEBkZXY6IFRoZSBwYXJlbnQgZGV2aWNlIHBhc3NlZCB0byB1c2UgZnJvbSB0aGUgcHJvYmUuCisgKiBAcmVnczogVGhlIHBvaW50ZXIgdG8gdGhlIGRldmljZSByZWdpc3RlIGJsb2NrLgorICogQG1hc3RlcjogVHJ1ZSBpZiB0aGUgSTJTIGNvcmUgaXMgdGhlIEkyUyBiaXQgY2xvY2sgbWFzdGVyLgorICogQGRtYV9wbGF5YmFjazogRE1BIGluZm9ybWF0aW9uIGZvciBwbGF5YmFjayBjaGFubmVsLgorICogQGRtYV9jYXB0dXJlOiBETUEgaW5mb3JtYXRpb24gZm9yIGNhcHR1cmUgY2hhbm5lbC4KKyAqIEBzdXNwZW5kX2lpc21vZDogUE0gc2F2ZSBmb3IgdGhlIElJU01PRCByZWdpc3Rlci4KKyAqIEBzdXNwZW5kX2lpc2NvbjogUE0gc2F2ZSBmb3IgdGhlIElJU0NPTiByZWdpc3Rlci4KKyAqIEBzdXNwZW5kX2lpc3BzcjogUE0gc2F2ZSBmb3IgdGhlIElJU1BTUiByZWdpc3Rlci4KKyAqCisgKiBUaGlzIGlzIHRoZSBwcml2YXRlIGNvZGVjIHN0YXRlIGZvciB0aGUgaGFyZHdhcmUgYXNzb2NpYXRlZCB3aXRoIGFuCisgKiBJMlMgY2hhbm5lbCBzdWNoIGFzIHRoZSByZWdpc3RlciBtYXBwaW5ncyBhbmQgY2xvY2sgc291cmNlcy4KKyAqLworc3RydWN0IHMzY19pMnN2Ml9pbmZvIHsKKwlzdHJ1Y3QgZGV2aWNlCSpkZXY7CisJdm9pZCBfX2lvbWVtCSpyZWdzOworCisJc3RydWN0IGNsawkqaWlzX3BjbGs7CisJc3RydWN0IGNsawkqaWlzX2NjbGs7CisJc3RydWN0IGNsawkqaWlzX2NsazsKKworCXVuc2lnbmVkIGNoYXIJIG1hc3RlcjsKKworCXN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zCSpkbWFfcGxheWJhY2s7CisJc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMJKmRtYV9jYXB0dXJlOworCisJdTMyCQkgc3VzcGVuZF9paXNtb2Q7CisJdTMyCQkgc3VzcGVuZF9paXNjb247CisJdTMyCQkgc3VzcGVuZF9paXNwc3I7Cit9OworCitzdHJ1Y3QgczNjX2kyc3YyX3JhdGVfY2FsYyB7CisJdW5zaWduZWQgaW50CWNsa19kaXY7CS8qIGZvciBwcmVzY2FsZXIgKi8KKwl1bnNpZ25lZCBpbnQJZnNfZGl2OwkJLyogZm9yIHJvb3QgZnJhbWUgY2xvY2sgKi8KK307CisKK2V4dGVybiBpbnQgczNjX2kyc3YyX2lpc19jYWxjX3JhdGUoc3RydWN0IHMzY19pMnN2Ml9yYXRlX2NhbGMgKmluZm8sCisJCQkJICAgdW5zaWduZWQgaW50ICpmc3RhYiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgcmF0ZSwgc3RydWN0IGNsayAqY2xrKTsKKworLyoqCisgKiBzM2NfaTJzdjJfcHJvYmUgLSBwcm9iZSBmb3IgaTJzIGRldmljZSBoZWxwZXIKKyAqIEBwZGV2OiBUaGUgcGxhdGZvcm0gZGV2aWNlIHN1cHBsaWVkIHRvIHRoZSBvcmlnaW5hbCBwcm9iZS4KKyAqIEBkYWk6IFRoZSBBU29DIERBSSBzdHJ1Y3R1cmUgc3VwcGxpZWQgdG8gdGhlIG9yaWdpbmFsIHByb2JlLgorICogQGkyczogT3VyIGxvY2FsIGkycyBzdHJ1Y3R1cmUgdG8gZmlsbCBpbi4KKyAqIEBiYXNlOiBUaGUgYmFzZSBhZGRyZXNzIGZvciB0aGUgcmVnaXN0ZXJzLgorICovCitleHRlcm4gaW50IHMzY19pMnN2Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkgICBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKmkycywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYmFzZSk7CisKKy8qKgorICogczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSAtIHJlZ2lzdGVyIGRhaSB3aXRoIHNvYyBjb3JlCisgKiBAZGFpOiBUaGUgc25kX3NvY19kYWkgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCisgKgorICogRmlsbCBpbiBhbnkgbWlzc2luZyBmaWVsZHMgYW5kIHRoZW4gcmVnaXN0ZXIgdGhlIGdpdmVuIGRhaSB3aXRoIHRoZQorICogc29jIGNvcmUuCisgKi8KK2V4dGVybiBpbnQgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSk7CisKKyNlbmRpZiAvKiBfX1NORF9TT0NfUzNDMjRYWF9TM0NfSTJTVjJfSTJTX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5jCmluZGV4IGYzZmMwYWIuLjFjYTNjZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTMwLDI2ICszMSwxNiBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zM2MyNDEyLWlpcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKICNpbmNsdWRlICJzM2MyNDEyLWkycy5oIgogCiAjZGVmaW5lIFMzQzI0MTJfSTJTX0RFQlVHIDAKLSNkZWZpbmUgUzNDMjQxMl9JMlNfREVCVUdfQ09OIDAKLQotI2lmIFMzQzI0MTJfSTJTX0RFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9JTkZPIHgpCi0jZWxzZQotI2RlZmluZSBEQkcoeC4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0MTJfZG1hX2NsaWVudF9vdXQgPSB7CiAJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIG91dCIKQEAgLTczLDQzMSArNjQsNyBAQAogCS5kbWFfc2l6ZQk9IDQsCiB9OwogCi1zdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyB7Ci0Jc3RydWN0IGRldmljZQkqZGV2OwotCXZvaWQgX19pb21lbQkqcmVnczsKLQlzdHJ1Y3QgY2xrCSppaXNfY2xrOwotCXN0cnVjdCBjbGsJKmlpc19wY2xrOwotCXN0cnVjdCBjbGsJKmlpc19jY2xrOwotCi0JdTMyCQkgc3VzcGVuZF9paXNtb2Q7Ci0JdTMyCQkgc3VzcGVuZF9paXNjb247Ci0JdTMyCQkgc3VzcGVuZF9paXNwc3I7Ci19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gczNjMjQxMl9pMnM7Ci0KLSNkZWZpbmUgYml0X3NldCh2LCBiKSAoKCh2KSAmIChiKSkgPyAxIDogMCkKLQotI2lmIFMzQzI0MTJfSTJTX0RFQlVHX0NPTgotc3RhdGljIHZvaWQgZGJnX3Nob3djb24oY29uc3QgY2hhciAqZm4sIHUzMiBjb24pCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMUkk9JWQsIFRYRkVNUFQ9JWQsIFJYRkVNUFQ9JWQsIFRYRkZVTEw9JWQsIFJYRkZVTEw9JWRcbiIsIGZuLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fTFJJTkRFWCksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRU1QVFkpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhGSUZPX0VNUFRZKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRklGT19GVUxMKSwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1JYRklGT19GVUxMKSk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBBVVNFOiBUWERNQT0lZCwgUlhETUE9JWQsIFRYQ0g9JWQsIFJYQ0g9JWRcbiIsCi0JICAgICAgIGZuLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0UpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0UpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWENIX1BBVVNFKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBQ1RJVkU6IFRYRE1BPSVkLCBSWERNQT0lZCwgSUlTPSVkXG4iLCBmbiwKLQkgICAgICAgYml0X3NldChjb24sIFMzQzI0MTJfSUlTQ09OX1RYRE1BX0FDVElWRSksCi0JICAgICAgIGJpdF9zZXQoY29uLCBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUpLAotCSAgICAgICBiaXRfc2V0KGNvbiwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRSkpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYmdfc2hvd2Nvbihjb25zdCBjaGFyICpmbiwgdTMyIGNvbikKLXsKLX0KLSNlbmRpZgotCi0vKiBUdXJuIG9uIG9yIG9mZiB0aGUgdHJhbnNtaXNzaW9uIHBhdGguICovCi1zdGF0aWMgdm9pZCBzM2MyNDEyX3NuZF90eGN0cmwoaW50IG9uKQotewotCXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvICppMnMgPSAmczNjMjQxMl9pMnM7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gaTJzLT5yZWdzOwotCXUzMiBmaWMsIGNvbiwgbW9kOwotCi0JREJHKCIlcyglZClcbiIsIF9fZnVuY19fLCBvbik7Ci0KLQlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCWNvbiA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JbW9kID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQotCURCRygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKLQotCWlmIChvbikgewotCQljb24gfD0gUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFIHwgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFOwotCi0JCXN3aXRjaCAobW9kICYgUzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLKSB7Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6Ci0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOgotCQkJLyogZG8gbm90aGluZywgd2UgYXJlIGluIHRoZSByaWdodCBtb2RlICovCi0JCQlicmVhazsKLQotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQltb2QgfD0gUzNDMjQxMl9JSVNNT0RfTU9ERV9UWFJYOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIoaTJzLT5kZXYsICJUWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKLQkJfQotCi0JCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JfSBlbHNlIHsKLQkJLyogTm90ZSwgd2UgZG8gbm90IGhhdmUgYW55IGluZGljYXRpb24gdGhhdCB0aGUgRklGTyBwcm9ibGVtcwotCQkgKiB0aGEgdGhlIFMzQzI0MTAvMjQ0MCBoYWQgYXBwbHkgaGVyZSwgc28gd2Ugc2hvdWxkIGJlIGFibGUKLQkJICogdG8gZGlzYWJsZSB0aGUgRE1BIGFuZCBUWCB3aXRob3V0IHJlc2V0dGluZyB0aGUgRklGT1MuCi0JCSAqLwotCi0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fVFhETUFfUEFVU0U7Ci0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fVFhDSF9QQVVTRTsKLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkU7Ci0KLQkJc3dpdGNoIChtb2QgJiBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0spIHsKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYUlg6Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCW1vZCB8PSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUzNDMjQxMl9JSVNNT0RfTU9ERV9UWE9OTFk6Ci0JCQltb2QgJj0gflMzQzI0MTJfSUlTTU9EX01PREVfTUFTSzsKLQkJCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGkycy0+ZGV2LCAiVFhESVM6IEludmFsaWQgTU9ERSBpbiBJSVNNT0RcbiIpOwotCQl9Ci0KLQkJd3JpdGVsKG1vZCwgcmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJd3JpdGVsKGNvbiwgcmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQl9Ci0KLQlmaWMgPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCWRiZ19zaG93Y29uKF9fZnVuY19fLCBjb24pOwotCURCRygiJXM6IElJUzogQ09OPSV4IE1PRD0leCBGSUM9JXhcbiIsIF9fZnVuY19fLCBjb24sIG1vZCwgZmljKTsKLX0KLQotc3RhdGljIHZvaWQgczNjMjQxMl9zbmRfcnhjdHJsKGludCBvbikKLXsKLQlzdHJ1Y3QgczNjMjQxMl9pMnNfaW5mbyAqaTJzID0gJnMzYzI0MTJfaTJzOwotCXZvaWQgX19pb21lbSAqcmVncyA9IGkycy0+cmVnczsKLQl1MzIgZmljLCBjb24sIG1vZDsKLQotCURCRygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgb24pOwotCi0JZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQljb24gPSByZWFkbChyZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCW1vZCA9IHJlYWRsKHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0KLQlEQkcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Ci0KLQlpZiAob24pIHsKLQkJY29uIHw9IFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRSB8IFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkU7Ci0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0U7Ci0JCWNvbiAmPSB+UzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRTsKLQotCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgewotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1JYT05MWToKLQkJCS8qIGRvIG5vdGhpbmcsIHdlIGFyZSBpbiB0aGUgcmlnaHQgbW9kZSAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTM0MyNDEyX0lJU01PRF9NT0RFX1RYT05MWToKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKGkycy0+ZGV2LCAiUlhFTjogSW52YWxpZCBNT0RFIGluIElJU01PRFxuIik7Ci0JCX0KLQotCQl3cml0ZWwobW9kLCByZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQl3cml0ZWwoY29uLCByZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCX0gZWxzZSB7Ci0JCS8qIFNlZSB0eGN0cmwgbm90ZXMgb24gRklGT3MuICovCi0KLQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkU7Ci0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fUlhETUFfUEFVU0U7Ci0JCWNvbiB8PSAgUzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRTsKLQotCQlzd2l0Y2ggKG1vZCAmIFMzQzI0MTJfSUlTTU9EX01PREVfTUFTSykgewotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZOgotCQkJY29uICY9IH5TM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFOwotCQkJbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NT0RFX01BU0s7Ci0JCQlicmVhazsKLQotCQljYXNlIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWDoKLQkJCW1vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTU9ERV9NQVNLOwotCQkJbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIoaTJzLT5kZXYsICJSWEVOOiBJbnZhbGlkIE1PREUgaW4gSUlTTU9EXG4iKTsKLQkJfQotCi0JCXdyaXRlbChjb24sIHJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCXdyaXRlbChtb2QsIHJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JfQotCi0JZmljID0gcmVhZGwocmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQlEQkcoIiVzOiBJSVM6IENPTj0leCBNT0Q9JXggRklDPSV4XG4iLCBfX2Z1bmNfXywgY29uLCBtb2QsIGZpYyk7Ci19Ci0KLQotLyoKLSAqIFdhaXQgZm9yIHRoZSBMUiBzaWduYWwgdG8gYWxsb3cgc3luY2hyb25pc2F0aW9uIHRvIHRoZSBML1IgY2xvY2sKLSAqIGZyb20gdGhlIGNvZGVjLiBNYXkgb25seSBiZSBuZWVkZWQgZm9yIHNsYXZlIG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgczNjMjQxMl9zbmRfbHJzeW5jKHZvaWQpCi17Ci0JdTMyIGlpc2NvbjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKLQotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwotCi0Jd2hpbGUgKDEpIHsKLQkJaWlzY29uID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTQ09OKTsKLQkJaWYgKGlpc2NvbiAmIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgpCi0JCQlicmVhazsKLQotCQlpZiAodGltZW91dCA8IGppZmZpZXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDaGVjayB3aGV0aGVyIENQVSBpcyB0aGUgbWFzdGVyIG9yIHNsYXZlCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHMzYzI0MTJfc25kX2lzX2Nsa21hc3Rlcih2b2lkKQotewotCXUzMiBpaXNtb2QgPSByZWFkbChzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpaXNtb2QgJj0gUzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0s7Ci0JcmV0dXJuICEoaWlzbW9kID09IFMzQzI0MTJfSUlTTU9EX1NMQVZFKTsKLX0KLQotLyoKLSAqIFNldCBTM0MyNDEyIEkyUyBEQUkgZm9ybWF0Ci0gKi8KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGZtdCkKLXsKLQl1MzIgaWlzbW9kOwotCi0KLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlpc21vZCA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgcjogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7Ci0KLQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgotCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLOwotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0xBVkU7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKLQkJaWlzbW9kICY9IH5TM0MyNDEyX0lJU01PRF9NQVNURVJfTUFTSzsKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX01BU1RFUl9JTlRFUk5BTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJREJHKCJ1bmtud29uIG1hc3Rlci9zbGF2ZSBmb3JtYXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX1NERl9NQVNLOwotCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EX1NERl9NU0I7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgotCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfU0RGX0xTQjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9TREZfSUlTOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEQkcoIlVua25vd24gZGF0YSBmb3JtYXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl3cml0ZWwoaWlzbW9kLCBzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHc6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQl1MzIgaWlzbW9kOwotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0MTJfaTJzX3BjbV9zdGVyZW9fb3V0OwotCWVsc2UKLQkJcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0MTJfaTJzX3BjbV9zdGVyZW9faW47Ci0KLQkvKiBXb3JraW5nIGNvcGllcyBvZiByZWdpc3RlciAqLwotCWlpc21vZCA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JREJHKCIlczogcjogSUlTTU9EOiAleFxuIiwgX19mdW5jX18sIGlpc21vZCk7Ci0KLQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKLQkJaWlzbW9kIHw9IFMzQzI0MTJfSUlTTU9EXzhCSVQ7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6Ci0JCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfOEJJVDsKLQkJYnJlYWs7Ci0JfQotCi0Jd3JpdGVsKGlpc21vZCwgczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQlEQkcoIiVzOiB3OiBJSVNNT0Q6ICV4XG4iLCBfX2Z1bmNfXywgaWlzbW9kKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEyX2kyc190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCWludCBjYXB0dXJlID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7Ci0JdW5zaWduZWQgbG9uZyBpcnFzOwotCWludCByZXQgPSAwOwotCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCS8qIE9uIHN0YXJ0LCBlbnN1cmUgdGhhdCB0aGUgRklGT3MgYXJlIGNsZWFyZWQgYW5kIHJlc2V0LiAqLwotCi0JCXdyaXRlbChjYXB0dXJlID8gUzNDMjQxMl9JSVNGSUNfUlhGTFVTSCA6IFMzQzI0MTJfSUlTRklDX1RYRkxVU0gsCi0JCSAgICAgICBzM2MyNDEyX2kycy5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCi0JCS8qIGNsZWFyIGFnYWluLCBqdXN0IGluIGNhc2UgKi8KLQkJd3JpdGVsKDB4MCwgczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJaWYgKCFzM2MyNDEyX3NuZF9pc19jbGttYXN0ZXIoKSkgewotCQkJcmV0ID0gczNjMjQxMl9zbmRfbHJzeW5jKCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXhpdF9lcnI7Ci0JCX0KLQotCQlsb2NhbF9pcnFfc2F2ZShpcnFzKTsKLQotCQlpZiAoY2FwdHVyZSkKLQkJCXMzYzI0MTJfc25kX3J4Y3RybCgxKTsKLQkJZWxzZQotCQkJczNjMjQxMl9zbmRfdHhjdHJsKDEpOwotCi0JCWxvY2FsX2lycV9yZXN0b3JlKGlycXMpOwotCQlicmVhazsKLQotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlsb2NhbF9pcnFfc2F2ZShpcnFzKTsKLQotCQlpZiAoY2FwdHVyZSkKLQkJCXMzYzI0MTJfc25kX3J4Y3RybCgwKTsKLQkJZWxzZQotCQkJczNjMjQxMl9zbmRfdHhjdHJsKDApOwotCi0JCWxvY2FsX2lycV9yZXN0b3JlKGlycXMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLWV4aXRfZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLS8qIGRlZmF1bHQgdGFibGUgb2YgYWxsIGF2YWlhbGFibGUgcm9vdCBmcyBkaXZpc29ycyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzM2MyNDEyX2lpc19mc1tdID0geyAyNTYsIDUxMiwgMzg0LCA3NjgsIDAgfTsKLQotaW50IHMzYzI0MTJfaWlzX2NhbGNfcmF0ZShzdHJ1Y3QgczNjMjQxMl9yYXRlX2NhbGMgKmluZm8sCi0JCQkgIHVuc2lnbmVkIGludCAqZnN0YWIsCi0JCQkgIHVuc2lnbmVkIGludCByYXRlLCBzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7Ci0JdW5zaWduZWQgaW50IGRpdjsKLQl1bnNpZ25lZCBpbnQgZnNjbGs7Ci0JdW5zaWduZWQgaW50IGFjdHVhbDsKLQl1bnNpZ25lZCBpbnQgZnM7Ci0JdW5zaWduZWQgaW50IGZzZGl2OwotCXNpZ25lZCBpbnQgZGV2aWF0aW9uID0gMDsKLQl1bnNpZ25lZCBpbnQgYmVzdF9mcyA9IDA7Ci0JdW5zaWduZWQgaW50IGJlc3RfZGl2ID0gMDsKLQl1bnNpZ25lZCBpbnQgYmVzdF9yYXRlID0gMDsKLQl1bnNpZ25lZCBpbnQgYmVzdF9kZXZpYXRpb24gPSBJTlRfTUFYOwotCi0KLQlpZiAoZnN0YWIgPT0gTlVMTCkKLQkJZnN0YWIgPSBzM2MyNDEyX2lpc19mczsKLQotCWZvciAoZnMgPSAwOzsgZnMrKykgewotCQlmc2RpdiA9IHMzYzI0MTJfaWlzX2ZzW2ZzXTsKLQotCQlpZiAoZnNkaXYgPT0gMCkKLQkJCWJyZWFrOwotCi0JCWZzY2xrID0gY2xrcmF0ZSAvIGZzZGl2OwotCQlkaXYgPSBmc2NsayAvIHJhdGU7Ci0KLQkJaWYgKChmc2NsayAlIHJhdGUpID4gKHJhdGUgLyAyKSkKLQkJCWRpdisrOwotCi0JCWlmIChkaXYgPD0gMSkKLQkJCWNvbnRpbnVlOwotCi0JCWFjdHVhbCA9IGNsa3JhdGUgLyAoZnNkaXYgKiBkaXYpOwotCQlkZXZpYXRpb24gPSBhY3R1YWwgLSByYXRlOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlZGZzOiBkaXYgJWQgPT4gcmVzdWx0ICVkLCBkZXZpYXRpb24gJWRcbiIsCi0JCSAgICAgICBmc2RpdiwgZGl2LCBhY3R1YWwsIGRldmlhdGlvbik7Ci0KLQkJZGV2aWF0aW9uID0gYWJzKGRldmlhdGlvbik7Ci0KLQkJaWYgKGRldmlhdGlvbiA8IGJlc3RfZGV2aWF0aW9uKSB7Ci0JCQliZXN0X2ZzID0gZnNkaXY7Ci0JCQliZXN0X2RpdiA9IGRpdjsKLQkJCWJlc3RfcmF0ZSA9IGFjdHVhbDsKLQkJCWJlc3RfZGV2aWF0aW9uID0gZGV2aWF0aW9uOwotCQl9Ci0KLQkJaWYgKGRldmlhdGlvbiA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgImJlc3Q6IGZzPSVkLCBkaXY9JWQsIHJhdGU9JWRcbiIsCi0JICAgICAgIGJlc3RfZnMsIGJlc3RfZGl2LCBiZXN0X3JhdGUpOwotCi0JaW5mby0+ZnNfZGl2ID0gYmVzdF9mczsKLQlpbmZvLT5jbGtfZGl2ID0gYmVzdF9kaXY7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0MTJfaWlzX2NhbGNfcmF0ZSk7CitzdGF0aWMgc3RydWN0IHMzY19pMnN2Ml9pbmZvIHMzYzI0MTJfaTJzOwogCiAvKgogICogU2V0IFMzQzI0MTIgQ2xvY2sgc291cmNlCkBAIC01MDcsMTUgKzc0LDE3IEBACiB7CiAJdTMyIGlpc21vZCA9IHJlYWRsKHMzYzI0MTJfaTJzLnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7CiAKLQlEQkcoIiVzKCVwLCAlZCwgJXUsICVkKVxuIiwgX19mdW5jX18sIGNwdV9kYWksIGNsa19pZCwKKwlwcl9kZWJ1ZygiJXMoJXAsICVkLCAldSwgJWQpXG4iLCBfX2Z1bmNfXywgY3B1X2RhaSwgY2xrX2lkLAogCSAgICBmcmVxLCBkaXIpOwogCiAJc3dpdGNoIChjbGtfaWQpIHsKIAljYXNlIFMzQzI0MTJfQ0xLU1JDX1BDTEs6CisJCXMzYzI0MTJfaTJzLm1hc3RlciA9IDE7CiAJCWlpc21vZCAmPSB+UzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0s7CiAJCWlpc21vZCB8PSBTM0MyNDEyX0lJU01PRF9NQVNURVJfSU5URVJOQUw7CiAJCWJyZWFrOwogCWNhc2UgUzNDMjQxMl9DTEtTUkNfSTJTQ0xLOgorCQlzM2MyNDEyX2kycy5tYXN0ZXIgPSAwOwogCQlpaXNtb2QgJj0gflMzQzI0MTJfSUlTTU9EX01BU1RFUl9NQVNLOwogCQlpaXNtb2QgfD0gUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0VYVEVSTkFMOwogCQlicmVhazsKQEAgLTUyNyw3NCArOTYsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogU2V0IFMzQzI0MTIgQ2xvY2sgZGl2aWRlcnMKLSAqLwotc3RhdGljIGludCBzM2MyNDEyX2kyc19zZXRfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKLQkJCQkgIGludCBkaXZfaWQsIGludCBkaXYpCi17Ci0Jc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gKmkycyA9ICZzM2MyNDEyX2kyczsKLQl1MzIgcmVnOwotCi0JREJHKCIlcyglcCwgJWQsICVkKVxuIiwgX19mdW5jX18sIGNwdV9kYWksIGRpdl9pZCwgZGl2KTsKLQotCXN3aXRjaCAoZGl2X2lkKSB7Ci0JY2FzZSBTM0MyNDEyX0RJVl9CQ0xLOgotCQlyZWcgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCXJlZyAmPSB+UzNDMjQxMl9JSVNNT0RfQkNMS19NQVNLOwotCQl3cml0ZWwocmVnIHwgZGl2LCBpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0KLQkJREJHKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQxMl9ESVZfUkNMSzoKLQkJaWYgKGRpdiA+IDMpIHsKLQkJCS8qIGNvbnZlcnQgdmFsdWUgdG8gYml0IGZpZWxkICovCi0KLQkJCXN3aXRjaCAoZGl2KSB7Ci0JCQljYXNlIDI1NjoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzI1NkZTOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDM4NDoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzM4NEZTOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDUxMjoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzUxMkZTOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDc2ODoKLQkJCQlkaXYgPSBTM0MyNDEyX0lJU01PRF9SQ0xLXzc2OEZTOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0KLQkJcmVnID0gcmVhZGwoczNjMjQxMl9pMnMucmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJcmVnICY9IH5TM0MyNDEyX0lJU01PRF9SQ0xLX01BU0s7Ci0JCXdyaXRlbChyZWcgfCBkaXYsIGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQkJREJHKCIlczogTU9EPSUwOHhcbiIsIF9fZnVuY19fLCByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCkpOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQxMl9ESVZfUFJFU0NBTEVSOgotCQlpZiAoZGl2ID49IDApIHsKLQkJCXdyaXRlbCgoZGl2IDw8IDgpIHwgUzNDMjQxMl9JSVNQU1JfUFNSRU4sCi0JCQkgICAgICAgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOwotCQl9IGVsc2UgewotCQkJd3JpdGVsKDB4MCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOwotCQl9Ci0JCURCRygiJXM6IFBTUj0lMDh4XG4iLCBfX2Z1bmNfXywgcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KIAogc3RydWN0IGNsayAqczNjMjQxMl9nZXRfaWlzY2xrKHZvaWQpCiB7CkBAIC02MDYsMzQgKzEwNywzMCBAQAogc3RhdGljIGludCBzM2MyNDEyX2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlpbnQgcmV0OwogCi0JczNjMjQxMl9pMnMuZGV2ID0gJnBkZXYtPmRldjsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCi0JczNjMjQxMl9pMnMucmVncyA9IGlvcmVtYXAoUzNDMjQxMF9QQV9JSVMsIDB4MTAwKTsKLQlpZiAoczNjMjQxMl9pMnMucmVncyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOWElPOworCXJldCA9IHMzY19pMnN2Ml9wcm9iZShwZGV2LCBkYWksICZzM2MyNDEyX2kycywgUzNDMjQxMF9QQV9JSVMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlzM2MyNDEyX2kycy5paXNfcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImlpcyIpOwotCWlmIChzM2MyNDEyX2kycy5paXNfcGNsayA9PSBOVUxMKSB7Ci0JCURCRygiZmFpbGVkIHRvIGdldCBpaXNfY2xvY2tcbiIpOwotCQlpb3VubWFwKHMzYzI0MTJfaTJzLnJlZ3MpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJczNjMjQxMl9pMnMuZG1hX2NhcHR1cmUgPSAmczNjMjQxMl9pMnNfcGNtX3N0ZXJlb19pbjsKKwlzM2MyNDEyX2kycy5kbWFfcGxheWJhY2sgPSAmczNjMjQxMl9pMnNfcGNtX3N0ZXJlb19vdXQ7CiAKIAlzM2MyNDEyX2kycy5paXNfY2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImkyc2NsayIpOwogCWlmIChzM2MyNDEyX2kycy5paXNfY2NsayA9PSBOVUxMKSB7Ci0JCURCRygiZmFpbGVkIHRvIGdldCBpMnNjbGsgY2xvY2tcbiIpOworCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBpMnNjbGsgY2xvY2tcbiIpOwogCQlpb3VubWFwKHMzYzI0MTJfaTJzLnJlZ3MpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQljbGtfc2V0X3BhcmVudChzM2MyNDEyX2kycy5paXNfY2NsaywgY2xrX2dldChOVUxMLCAibXBsbCIpKTsKKwkvKiBTZXQgTVBMTCBhcyB0aGUgc291cmNlIGZvciBJSVMgQ0xLICovCiAKLQljbGtfZW5hYmxlKHMzYzI0MTJfaTJzLmlpc19wY2xrKTsKKwljbGtfc2V0X3BhcmVudChzM2MyNDEyX2kycy5paXNfY2NsaywgY2xrX2dldChOVUxMLCAibXBsbCIpKTsKIAljbGtfZW5hYmxlKHMzYzI0MTJfaTJzLmlpc19jY2xrKTsKIAotCXMzYzI0MTJfaTJzLmlpc19jbGsgPSBzM2MyNDEyX2kycy5paXNfcGNsazsKKwlzM2MyNDEyX2kycy5paXNfY2NsayA9IHMzYzI0MTJfaTJzLmlpc19wY2xrOwogCiAJLyogQ29uZmlndXJlIHRoZSBJMlMgcGlucyBpbiBjb3JyZWN0IG1vZGUgKi8KIAlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMCwgUzNDMjQxMF9HUEUwX0kyU0xSQ0spOwpAQCAtNjQyLDc4ICsxMzksMjIgQEAKIAlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMywgUzNDMjQxMF9HUEUzX0kyU1NESSk7CiAJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTQsIFMzQzI0MTBfR1BFNF9JMlNTRE8pOwogCi0JczNjMjQxMl9zbmRfdHhjdHJsKDApOwotCXMzYzI0MTJfc25kX3J4Y3RybCgwKTsKLQogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMzYzI0MTJfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHMzYzI0MTJfaTJzX2luZm8gKmkycyA9ICZzM2MyNDEyX2kyczsKLQl1MzIgaWlzbW9kOwotCi0JaWYgKGRhaS0+YWN0aXZlKSB7Ci0JCWkycy0+c3VzcGVuZF9paXNtb2QgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU01PRCk7Ci0JCWkycy0+c3VzcGVuZF9paXNjb24gPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU0NPTik7Ci0JCWkycy0+c3VzcGVuZF9paXNwc3IgPSByZWFkbChpMnMtPnJlZ3MgKyBTM0MyNDEyX0lJU1BTUik7Ci0KLQkJLyogc29tZSBiYXNpYyBzdXNwZW5kIGNoZWNrcyAqLwotCi0JCWlpc21vZCA9IHJlYWRsKGkycy0+cmVncyArIFMzQzI0MTJfSUlTTU9EKTsKLQotCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFKQotCQkJcHJfd2FybmluZygiJXM6IFJYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKLQotCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFKQotCQkJcHJfd2FybmluZygiJXM6IFRYRE1BIGFjdGl2ZT9cbiIsIF9fZnVuY19fKTsKLQotCQlpZiAoaWlzbW9kICYgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRSkKLQkJCXByX3dhcm5pbmcoIiVzOiBJSVMgYWN0aXZlXG4iLCBfX2Z1bmNfXyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMl9pMnNfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzM2MyNDEyX2kyc19pbmZvICppMnMgPSAmczNjMjQxMl9pMnM7Ci0KLQlwcl9pbmZvKCJkYWlfYWN0aXZlICVkLCBJSVNNT0QgJTA4eCwgSUlTQ09OICUwOHhcbiIsCi0JCWRhaS0+YWN0aXZlLCBpMnMtPnN1c3BlbmRfaWlzbW9kLCBpMnMtPnN1c3BlbmRfaWlzY29uKTsKLQotCWlmIChkYWktPmFjdGl2ZSkgewotCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc2NvbiwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNDT04pOwotCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOwotCQl3cml0ZWwoaTJzLT5zdXNwZW5kX2lpc3BzciwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNQU1IpOwotCi0JCXdyaXRlbChTM0MyNDEyX0lJU0ZJQ19SWEZMVVNIIHwgUzNDMjQxMl9JSVNGSUNfVFhGTFVTSCwKLQkJICAgICAgIGkycy0+cmVncyArIFMzQzI0MTJfSUlTRklDKTsKLQotCQluZGVsYXkoMjUwKTsKLQkJd3JpdGVsKDB4MCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNGSUMpOwotCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotI2RlZmluZSBzM2MyNDEyX2kyc19zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjQxMl9pMnNfcmVzdW1lICBOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KICNkZWZpbmUgUzNDMjQxMl9JMlNfUkFURVMgXAogCShTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFwKIAlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNDEyX2kyc19kYWlfb3BzID0geworCS5zZXRfc3lzY2xrCT0gczNjMjQxMl9pMnNfc2V0X3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDEyX2kyc19kYWkgPSB7Ci0JLm5hbWUJPSAiczNjMjQxMi1pMnMiLAotCS5pZAk9IDAsCi0JLnByb2JlCT0gczNjMjQxMl9pMnNfcHJvYmUsCi0JLnN1c3BlbmQgPSBzM2MyNDEyX2kyc19zdXNwZW5kLAotCS5yZXN1bWUgPSBzM2MyNDEyX2kyc19yZXN1bWUsCisJLm5hbWUJCT0gInMzYzI0MTItaTJzIiwKKwkuaWQJCT0gMCwKKwkucHJvYmUJCT0gczNjMjQxMl9pMnNfcHJvYmUsCiAJLnBsYXliYWNrID0gewogCQkuY2hhbm5lbHNfbWluCT0gMiwKIAkJLmNoYW5uZWxzX21heAk9IDIsCkBAIC03MjYsMTkgKzE2NywxMyBAQAogCQkucmF0ZXMJCT0gUzNDMjQxMl9JMlNfUkFURVMsCiAJCS5mb3JtYXRzCT0gU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBzM2MyNDEyX2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gczNjMjQxMl9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdAk9IHMzYzI0MTJfaTJzX3NldF9mbXQsCi0JCS5zZXRfY2xrZGl2CT0gczNjMjQxMl9pMnNfc2V0X2Nsa2RpdiwKLQkJLnNldF9zeXNjbGsJPSBzM2MyNDEyX2kyc19zZXRfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZzM2MyNDEyX2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0MTJfaTJzX2RhaSk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTJfaTJzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJnMzYzI0MTJfaTJzX2RhaSk7CisJcmV0dXJuICBzM2NfaTJzdjJfcmVnaXN0ZXJfZGFpKCZzM2MyNDEyX2kyc19kYWkpOwogfQogbW9kdWxlX2luaXQoczNjMjQxMl9pMnNfaW5pdCk7CiAKQEAgLTc0OCw3ICsxODMsNiBAQAogfQogbW9kdWxlX2V4aXQoczNjMjQxMl9pMnNfZXhpdCk7CiAKLQogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCiBNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0MyNDEyIEkyUyBTb0MgSW50ZXJmYWNlIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQxMi1pMnMuaAppbmRleCBhYWMwOGEyLi45Mjg0OGU1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDEyLWkycy5oCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0MTItaTJzLmgKQEAgLTE1LDkgKzE1LDExIEBACiAjaWZuZGVmIF9fU05EX1NPQ19TM0MyNFhYX1MzQzI0MTJfSTJTX0gKICNkZWZpbmUgX19TTkRfU09DX1MzQzI0WFhfUzNDMjQxMl9JMlNfSCBfX0ZJTEVfXwogCi0jZGVmaW5lIFMzQzI0MTJfRElWX0JDTEsJKDEpCi0jZGVmaW5lIFMzQzI0MTJfRElWX1JDTEsJKDIpCi0jZGVmaW5lIFMzQzI0MTJfRElWX1BSRVNDQUxFUgkoMykKKyNpbmNsdWRlICJzM2MtaTJzLXYyLmgiCisKKyNkZWZpbmUgUzNDMjQxMl9ESVZfQkNMSwlTM0NfSTJTVjJfRElWX0JDTEsKKyNkZWZpbmUgUzNDMjQxMl9ESVZfUkNMSwlTM0NfSTJTVjJfRElWX1JDTEsKKyNkZWZpbmUgUzNDMjQxMl9ESVZfUFJFU0NBTEVSCVMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSCiAKICNkZWZpbmUgUzNDMjQxMl9DTEtTUkNfUENMSwkoMCkKICNkZWZpbmUgUzNDMjQxMl9DTEtTUkNfSTJTQ0xLCSgxKQpAQCAtMjYsMTMgKzI4LDQgQEAKIAogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDEyX2kyc19kYWk7CiAKLXN0cnVjdCBzM2MyNDEyX3JhdGVfY2FsYyB7Ci0JdW5zaWduZWQgaW50CWNsa19kaXY7CS8qIGZvciBwcmVzY2FsZXIgKi8KLQl1bnNpZ25lZCBpbnQJZnNfZGl2OwkJLyogZm9yIHJvb3QgZnJhbWUgY2xvY2sgKi8KLX07Ci0KLWV4dGVybiBpbnQgczNjMjQxMl9paXNfY2FsY19yYXRlKHN0cnVjdCBzM2MyNDEyX3JhdGVfY2FsYyAqaW5mbywKLQkJCQkgdW5zaWduZWQgaW50ICpmc3RhYiwKLQkJCQkgdW5zaWduZWQgaW50IHJhdGUsIHN0cnVjdCBjbGsgKmNsayk7Ci0KICNlbmRpZiAvKiBfX1NORF9TT0NfUzNDMjRYWF9TM0MyNDEyX0kyU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCmluZGV4IDU4MjJkMmQuLjM2OThmNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8cGxhdC9yZWdzLWFjOTcuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKQEAgLTM1NSw2ICszNTUsMTYgQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFwKIAkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHMzYzI0NDNfYWM5N19od19wYXJhbXMsCisJLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfdHJpZ2dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0NDNfYWM5N19taWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMsCisJLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfbWljX3RyaWdnZXIsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQ0M19hYzk3X2RhaVtdID0gewogewogCS5uYW1lID0gInMzYzI0NDMtYWM5NyIsCkBAIC0zNzQsOSArMzg0LDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBzM2MyNDQzX2FjOTdfaHdfcGFyYW1zLAotCQkudHJpZ2dlciA9IHMzYzI0NDNfYWM5N190cmlnZ2VyfSwKKwkub3BzID0gJnMzYzI0NDNfYWM5N19kYWlfb3BzLAogfSwKIHsKIAkubmFtZSA9ICJweGEyeHgtYWM5Ny1taWMiLApAQCAtMzg4LDkgKzM5Niw3IEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBzM2MyNDQzX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMsCi0JCS50cmlnZ2VyID0gczNjMjQ0M19hYzk3X21pY190cmlnZ2VyLH0sCisJLm9wcyA9ICZzM2MyNDQzX2FjOTdfbWljX2RhaV9vcHMsCiB9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0NDNfYWM5N19kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKaW5kZXggNmY0ZDQzOS4uY2MwNjY5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jCkBAIC00LDcgKzQsNyBAQAogICogKGMpIDIwMDYgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIEdyYWVtZSBHcmVnb3J5IGdyYWVtZS5ncmVnb3J5QHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQogICoKLSAqIChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCkBAIC0zMCwyMiArMzAsMTUgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KIAogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKIAotI2RlZmluZSBTM0MyNFhYX0kyU19ERUJVRyAwCi0jaWYgUzNDMjRYWF9JMlNfREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHICJzM2MyNHh4LWkyczogIiB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjMjR4eF9kbWFfY2xpZW50X291dCA9IHsKIAkubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCiB9OwpAQCAtODQsMTMgKzc3LDEzIEBACiAJdTMyIGlpc2NvbjsKIAl1MzIgaWlzbW9kOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlpc2Zjb24gPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNGQ09OKTsKIAlpaXNjb24gID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKIAlpaXNtb2QgID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAotCURCRygicjogSUlTQ09OOiAlbHggSUlTTU9EOiAlbHggSUlTRkNPTjogJWx4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CisJcHJfZGVidWcoInI6IElJU0NPTjogJXggSUlTTU9EOiAleCBJSVNGQ09OOiAleFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOwogCiAJaWYgKG9uKSB7CiAJCWlpc2Zjb24gfD0gUzNDMjQxMF9JSVNGQ09OX1RYRE1BIHwgUzNDMjQxMF9JSVNGQ09OX1RYRU5BQkxFOwpAQCAtMTIwLDcgKzExMyw3IEBACiAJCXdyaXRlbChpaXNtb2QsICBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCX0KIAotCURCRygidzogSUlTQ09OOiAlbHggSUlTTU9EOiAlbHggSUlTRkNPTjogJWx4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CisJcHJfZGVidWcoInc6IElJU0NPTjogJXggSUlTTU9EOiAleCBJSVNGQ09OOiAleFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOwogfQogCiBzdGF0aWMgdm9pZCBzM2MyNHh4X3NuZF9yeGN0cmwoaW50IG9uKQpAQCAtMTI5LDEzICsxMjIsMTMgQEAKIAl1MzIgaWlzY29uOwogCXUzMiBpaXNtb2Q7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWlzZmNvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0ZDT04pOwogCWlpc2NvbiAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOwogCWlpc21vZCAgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwogCi0JREJHKCJyOiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygicjogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiAKIAlpZiAob24pIHsKIAkJaWlzZmNvbiB8PSBTM0MyNDEwX0lJU0ZDT05fUlhETUEgfCBTM0MyNDEwX0lJU0ZDT05fUlhFTkFCTEU7CkBAIC0xNjUsNyArMTU4LDcgQEAKIAkJd3JpdGVsKGlpc21vZCwgIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CiAJfQogCi0JREJHKCJ3OiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKKwlwcl9kZWJ1ZygidzogSUlTQ09OOiAleCBJSVNNT0Q6ICV4IElJU0ZDT046ICV4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CiB9CiAKIC8qCkBAIC0xNzcsNyArMTcwLDcgQEAKIAl1MzIgaWlzY29uOwogCWludCB0aW1lb3V0ID0gNTA7IC8qIDVtcyAqLwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXdoaWxlICgxKSB7CiAJCWlpc2NvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CkBAIC0xOTcsNyArMTkwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgczNjMjR4eF9zbmRfaXNfY2xrbWFzdGVyKHZvaWQpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAocmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKSAmIFMzQzI0MTBfSUlTTU9EX1NMQVZFKSA/IDA6MTsKIH0KQEAgLTIxMCwxMCArMjAzLDEwIEBACiB7CiAJdTMyIGlpc21vZDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOwotCURCRygiaHdfcGFyYW1zIHI6IElJU01PRDogJWx4IFxuIiwgaWlzbW9kKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHI6IElJU01PRDogJXggXG4iLCBpaXNtb2QpOwogCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKQEAgLTIzOCw3ICsyMzEsNyBAQAogCX0KIAogCXdyaXRlbChpaXNtb2QsIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgdzogSUlTTU9EOiAlbHggXG4iLCBpaXNtb2QpOworCXByX2RlYnVnKCJod19wYXJhbXMgdzogSUlTTU9EOiAleCBcbiIsIGlpc21vZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0OSw3ICsyNDIsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAl1MzIgaWlzbW9kOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjR4eF9pMnNfcGNtX3N0ZXJlb19vdXQ7CkBAIC0yNTgsNyArMjUxLDcgQEAKIAogCS8qIFdvcmtpbmcgY29waWVzIG9mIHJlZ2lzdGVyICovCiAJaWlzbW9kID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKLQlEQkcoImh3X3BhcmFtcyByOiBJSVNNT0Q6ICVseFxuIiwgaWlzbW9kKTsKKwlwcl9kZWJ1ZygiaHdfcGFyYW1zIHI6IElJU01PRDogJXhcbiIsIGlpc21vZCk7CiAKIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKQEAgLTI3Niw3ICsyNjksNyBAQAogCX0KIAogCXdyaXRlbChpaXNtb2QsIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7Ci0JREJHKCJod19wYXJhbXMgdzogSUlTTU9EOiAlbHhcbiIsIGlpc21vZCk7CisJcHJfZGVidWcoImh3X3BhcmFtcyB3OiBJSVNNT0Q6ICV4XG4iLCBpaXNtb2QpOwogCXJldHVybiAwOwogfQogCkBAIC0yODUsNyArMjc4LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC0zMjcsNyArMzIwLDcgQEAKIHsKIAl1MzIgaWlzbW9kID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpaXNtb2QgJj0gflMzQzI0NDBfSUlTTU9EX01QTEw7CiAKQEAgLTM1Myw3ICszNDYsNyBAQAogewogCXUzMiByZWc7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc3dpdGNoIChkaXZfaWQpIHsKIAljYXNlIFMzQzI0WFhfRElWX0JDTEs6CkBAIC0zODksNyArMzgyLDcgQEAKIHN0YXRpYyBpbnQgczNjMjR4eF9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXMzYzI0eHhfaTJzLnJlZ3MgPSBpb3JlbWFwKFMzQzI0MTBfUEFfSUlTLCAweDEwMCk7CiAJaWYgKHMzYzI0eHhfaTJzLnJlZ3MgPT0gTlVMTCkKQEAgLTM5Nyw3ICszOTAsNyBAQAogCiAJczNjMjR4eF9pMnMuaWlzX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImlpcyIpOwogCWlmIChzM2MyNHh4X2kycy5paXNfY2xrID09IE5VTEwpIHsKLQkJREJHKCJmYWlsZWQgdG8gZ2V0IGlpc19jbG9ja1xuIik7CisJCXByX2VycigiZmFpbGVkIHRvIGdldCBpaXNfY2xvY2tcbiIpOwogCQlpb3VubWFwKHMzYzI0eHhfaTJzLnJlZ3MpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00MjEsNyArNDE0LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgczNjMjR4eF9pMnNfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXMzYzI0eHhfaTJzLmlpc2NvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CiAJczNjMjR4eF9pMnMuaWlzbW9kID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKQEAgLTQzNSw3ICs0MjgsNyBAQAogCiBzdGF0aWMgaW50IHMzYzI0eHhfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCiB7Ci0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAljbGtfZW5hYmxlKHMzYzI0eHhfaTJzLmlpc19jbGspOwogCiAJd3JpdGVsKHMzYzI0eHhfaTJzLmlpc2NvbiwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKQEAgLTQ1Niw2ICs0NDksMTQgQEAKIAlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNHh4X2kyc19kYWlfb3BzID0geworCS50cmlnZ2VyCT0gczNjMjR4eF9pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gczNjMjR4eF9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gczNjMjR4eF9pMnNfc2V0X2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IHMzYzI0eHhfaTJzX3NldF9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSBzM2MyNHh4X2kyc19zZXRfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0eHhfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJzM2MyNHh4LWkycyIsCiAJLmlkID0gMCwKQEAgLTQ3MiwxMyArNDczLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFMzQzI0WFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS50cmlnZ2VyID0gczNjMjR4eF9pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcyA9IHMzYzI0eHhfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBzM2MyNHh4X2kyc19zZXRfZm10LAotCQkuc2V0X2Nsa2RpdiA9IHMzYzI0eHhfaTJzX3NldF9jbGtkaXYsCi0JCS5zZXRfc3lzY2xrID0gczNjMjR4eF9pMnNfc2V0X3N5c2NsaywKLQl9LAorCS5vcHMgPSAmczNjMjR4eF9pMnNfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzM2MyNHh4X2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwppbmRleCA3YzY0ZDMxLi5hOWQ2OGZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKQEAgLTQsNyArNCw3IEBACiAgKiAoYykgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogR3JhZW1lIEdyZWdvcnkgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCiAgKgotICogKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKQEAgLTI5LDE3ICsyOSwxMCBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogCiAjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKIAotI2RlZmluZSBTM0MyNFhYX1BDTV9ERUJVRyAwCi0jaWYgUzNDMjRYWF9QQ01fREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHICJzM2MyNHh4LXBjbTogIiB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHMzYzI0eHhfcGNtX2hhcmR3YXJlID0gewogCS5pbmZvCQkJPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKQEAgLTg0LDE2ICs3NywxNiBAQAogCWRtYV9hZGRyX3QgcG9zID0gcHJ0ZC0+ZG1hX3BvczsKIAlpbnQgcmV0OwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCXdoaWxlIChwcnRkLT5kbWFfbG9hZGVkIDwgcHJ0ZC0+ZG1hX2xpbWl0KSB7CiAJCXVuc2lnbmVkIGxvbmcgbGVuID0gcHJ0ZC0+ZG1hX3BlcmlvZDsKIAotCQlEQkcoImRtYV9sb2FkZWQ6ICVkXG4iLCBwcnRkLT5kbWFfbG9hZGVkKTsKKwkJcHJfZGVidWcoImRtYV9sb2FkZWQ6ICVkXG4iLCBwcnRkLT5kbWFfbG9hZGVkKTsKIAogCQlpZiAoKHBvcyArIGxlbikgPiBwcnRkLT5kbWFfZW5kKSB7CiAJCQlsZW4gID0gcHJ0ZC0+ZG1hX2VuZCAtIHBvczsKLQkJCURCRyhLRVJOX0RFQlVHICIlczogY29ycmVjdGVkIGRtYSBsZW4gJWxkXG4iLAorCQkJcHJfZGVidWcoS0VSTl9ERUJVRyAiJXM6IGNvcnJlY3RlZCBkbWEgbGVuICVsZFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgbGVuKTsKIAkJfQogCkBAIC0xMTksNyArMTEyLDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IGRldl9pZDsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHJlc3VsdCA9PSBTM0MyNDEwX1JFU19BQk9SVCB8fCByZXN1bHQgPT0gUzNDMjQxMF9SRVNfRVJSKQogCQlyZXR1cm47CkBAIC0xNDgsNyArMTQxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHRvdGJ5dGVzID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOwogCWludCByZXQgPSAwOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHJldHVybiBpZiB0aGlzIGlzIGEgYnVmZmVybGVzcyB0cmFuc2ZlciBlLmcuCiAJICogY29kZWMgPC0tPiBCVCBjb2RlYyBvciBHU00gbW9kZW0gLS0gbGcgRklYTUUgKi8KQEAgLTE2MSwxNCArMTU0LDE0IEBACiAJCS8qIHByZXBhcmUgRE1BICovCiAJCXBydGQtPnBhcmFtcyA9IGRtYTsKIAotCQlEQkcoInBhcmFtcyAlcCwgY2xpZW50ICVwLCBjaGFubmVsICVkXG4iLCBwcnRkLT5wYXJhbXMsCisJCXByX2RlYnVnKCJwYXJhbXMgJXAsIGNsaWVudCAlcCwgY2hhbm5lbCAlZFxuIiwgcHJ0ZC0+cGFyYW1zLAogCQkJcHJ0ZC0+cGFyYW1zLT5jbGllbnQsIHBydGQtPnBhcmFtcy0+Y2hhbm5lbCk7CiAKIAkJcmV0ID0gczNjMjQxMF9kbWFfcmVxdWVzdChwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCiAJCQkJCSAgcHJ0ZC0+cGFyYW1zLT5jbGllbnQsIE5VTEwpOwogCiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlEQkcoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgZG1hIGNoYW5uZWxcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGRtYSBjaGFubmVsXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xOTYsNyArMTg5LDcgQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBUT0RPIC0gZG8gd2UgbmVlZCB0byBlbnN1cmUgRE1BIGZsdXNoZWQgKi8KIAlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sIE5VTEwpOwpAQCAtMjE0LDcgKzIwNyw3IEBACiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogcmV0dXJuIGlmIHRoaXMgaXMgYSBidWZmZXJsZXNzIHRyYW5zZmVyIGUuZy4KIAkgKiBjb2RlYyA8LS0+IEJUIGNvZGVjIG9yIEdTTSBtb2RlbSAtLSBsZyBGSVhNRSAqLwpAQCAtMjU5LDcgKzI1Miw3IEBACiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKIApAQCAtMjk3LDcgKzI5MCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXM7CiAJZG1hX2FkZHJfdCBzcmMsIGRzdDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2soJnBydGQtPmxvY2spOwogCXMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwgJnNyYywgJmRzdCk7CkBAIC0zMDksNyArMzAyLDcgQEAKIAogCXNwaW5fdW5sb2NrKCZwcnRkLT5sb2NrKTsKIAotCURCRygiUG9pbnRlciAleCAleFxuIiwgc3JjLCBkc3QpOworCXByX2RlYnVnKCJQb2ludGVyICV4ICV4XG4iLCBzcmMsIGRzdCk7CiAKIAkvKiB3ZSBzZWVtIHRvIGJlIGdldHRpbmcgdGhlIG9kZCBlcnJvciBmcm9tIHRoZSBwY20gbGlicmFyeSBkdWUKIAkgKiB0byBvdXQtb2YtYm91bmRzIHBvaW50ZXJzLiB0aGlzIGlzIG1heWJlIGR1ZSB0byB0aGUgZG1hIGVuZ2luZQpAQCAtMzMwLDcgKzMyMyw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQ7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzM2MyNHh4X3BjbV9oYXJkd2FyZSk7CiAKQEAgLTM0OSwxMCArMzQyLDEwIEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFwcnRkKQotCQlEQkcoInMzYzI0eHhfcGNtX2Nsb3NlIGNhbGxlZCB3aXRoIHBydGQgPT0gTlVMTFxuIik7CisJCXByX2RlYnVnKCJzM2MyNHh4X3BjbV9jbG9zZSBjYWxsZWQgd2l0aCBwcnRkID09IE5VTExcbiIpOwogCiAJa2ZyZWUocHJ0ZCk7CiAKQEAgLTM2NCw3ICszNTcsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIGRtYV9tbWFwX3dyaXRlY29tYmluZShzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LCB2bWEsCiAJCQkJICAgICBydW50aW1lLT5kbWFfYXJlYSwKQEAgLTM5MCw3ICszODMsNyBAQAogCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKIAlzaXplX3Qgc2l6ZSA9IHMzYzI0eHhfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJYnVmLT5kZXYudHlwZSA9IFNORFJWX0RNQV9UWVBFX0RFVjsKIAlidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsKQEAgLTQwOSw3ICs0MDIsNyBAQAogCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmOwogCWludCBzdHJlYW07CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgewogCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CkBAIC00MzMsNyArNDI2LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCiAJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmczNjMjR4eF9wY21fZG1hbWFzazsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggYTBhNGQxODMuLjhlNzlhNDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8c291bmQvczNjMjR4eF91ZGExMzR4Lmg+CiAjaW5jbHVkZSA8c291bmQvdWRhMTM0eC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KIAogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYzVkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCkBAIC0wLDAgKzEsMjIyIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCisgKgorICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0M2NFhYIEkyUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstZC5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1iYW5rLWUuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCisjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKKyNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfb3V0ID0geworCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfaW4gPSB7CisJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIGluIgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9fb3V0WzJdID0geworCVswXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMwX09VVCwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X291dCwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNUWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKKwlbMV0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9PVVQsCisJCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTVFhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pblsyXSA9IHsKKwlbMF0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9JTiwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAorCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzAgKyBTM0MyNDEyX0lJU1JYRCwKKwkJLmRtYV9zaXplCT0gNCwKKwl9LAorCVsxXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMxX0lOLAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfaW4sCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTUlhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19pMnN2Ml9pbmZvIHMzYzY0eHhfaTJzWzJdOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqdG9faW5mbyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJcmV0dXJuIGNwdV9kYWktPnByaXZhdGVfZGF0YTsKK30KKworc3RhdGljIGludCBzM2M2NHh4X2kyc19zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCQkgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhjcHVfZGFpKTsKKwl1MzIgaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFMzQzY0WFhfQ0xLU1JDX1BDTEs6CisJCWlpc21vZCAmPSB+UzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzY0WFhfQ0xLU1JDX01VWDoKKwkJaWlzbW9kIHw9IFMzQzY0WFhfSUlTTU9EX0lNU19TWVNNVVg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKGlpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJcmV0dXJuIDA7Cit9CisKKwordW5zaWduZWQgbG9uZyBzM2M2NHh4X2kyc19nZXRfY2xvY2tyYXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWkpOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShpMnMtPmlpc19jY2xrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2dldF9jbG9ja3JhdGUpOworCitzdGF0aWMgaW50IHMzYzY0eHhfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnM7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXM6IHByb2JpbmcgZGFpICVkXG4iLCBfX2Z1bmNfXywgcGRldi0+aWQpOworCisJaWYgKHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+IEFSUkFZX1NJWkUoczNjNjR4eF9pMnMpKSB7CisJCWRldl9lcnIoZGV2LCAiaWQgJWQgb3V0IG9mIHJhbmdlXG4iLCBwZGV2LT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkycyA9ICZzM2M2NHh4X2kyc1twZGV2LT5pZF07CisKKwlyZXQgPSBzM2NfaTJzdjJfcHJvYmUocGRldiwgZGFpLCBpMnMsCisJCQkgICAgICBwZGV2LT5pZCA/IFMzQzY0WFhfUEFfSUlTMSA6IFMzQzY0WFhfUEFfSUlTMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWkycy0+ZG1hX2NhcHR1cmUgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltwZGV2LT5pZF07CisJaTJzLT5kbWFfcGxheWJhY2sgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdOworCisJaTJzLT5paXNfY2NsayA9IGNsa19nZXQoZGV2LCAiYXVkaW8tYnVzIik7CisJaWYgKElTX0VSUihpMnMtPmlpc19jY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYXVkaW8tYnVzIik7CisJCWlvdW5tYXAoaTJzLT5yZWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogY29uZmlndXJlIEdQSU8gZm9yIGkycyBwb3J0ICovCisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgMDoKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDApLCBTM0M2NFhYX0dQRDBfSTJTMF9DTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMSksIFMzQzY0WFhfR1BEMV9JMlMwX0NEQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDIpLCBTM0M2NFhYX0dQRDJfSTJTMF9MUkNMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgzKSwgUzNDNjRYWF9HUEQzX0kyUzBfREkpOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoNCksIFMzQzY0WFhfR1BENF9JMlMwX0QwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMCksIFMzQzY0WFhfR1BFMF9JMlMxX0NMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgxKSwgUzNDNjRYWF9HUEUxX0kyUzFfQ0RDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMiksIFMzQzY0WFhfR1BFMl9JMlMxX0xSQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDMpLCBTM0M2NFhYX0dQRTNfSTJTMV9ESSk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSg0KSwgUzNDNjRYWF9HUEU0X0kyUzFfRDApOworCX0KKworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgUzNDNjRYWF9JMlNfUkFURVMgXAorCShTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFwKKwlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQorCisjZGVmaW5lIFMzQzY0WFhfSTJTX0ZNVFMgXAorCShTTkRSVl9QQ01fRk1UQklUX1M4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzY0eHhfaTJzX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsJPSBzM2M2NHh4X2kyc19zZXRfc3lzY2xrLAkKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWkgPSB7CisJLm5hbWUJCT0gInMzYzY0eHgtaTJzIiwKKwkuaWQJCT0gMCwKKwkucHJvYmUJCT0gczNjNjR4eF9pMnNfcHJvYmUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluCT0gMiwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJCS5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKKwkJLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4JPSAyLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAorCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCisJfSwKKwkub3BzID0gJnMzYzY0eHhfaTJzX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoczNjNjR4eF9pMnNfZGFpKTsKKworc3RhdGljIGludCBfX2luaXQgczNjNjR4eF9pMnNfaW5pdCh2b2lkKQoreworCXJldHVybiAgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSgmczNjNjR4eF9pMnNfZGFpKTsKK30KK21vZHVsZV9pbml0KHMzYzY0eHhfaTJzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjNjR4eF9pMnNfZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJnMzYzY0eHhfaTJzX2RhaSk7Cit9Cittb2R1bGVfZXhpdChzM2M2NHh4X2kyc19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0M2NFhYIEkyUyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZmZTNjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaApAQCAtMCwwICsxLDMxIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oCisgKgorICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0M2NFhYIEkyUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19TTkRfU09DX1MzQzI0WFhfUzNDNjRYWF9JMlNfSAorI2RlZmluZSBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19IIF9fRklMRV9fCisKKyNpbmNsdWRlICJzM2MtaTJzLXYyLmgiCisKKyNkZWZpbmUgUzNDNjRYWF9ESVZfQkNMSwlTM0NfSTJTVjJfRElWX0JDTEsKKyNkZWZpbmUgUzNDNjRYWF9ESVZfUkNMSwlTM0NfSTJTVjJfRElWX1JDTEsKKyNkZWZpbmUgUzNDNjRYWF9ESVZfUFJFU0NBTEVSCVMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSCisKKyNkZWZpbmUgUzNDNjRYWF9DTEtTUkNfUENMSwkoMCkKKyNkZWZpbmUgUzNDNjRYWF9DTEtTUkNfTVVYCSgxKQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzY0eHhfaTJzX2RhaTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpOworCisjZW5kaWYgLyogX19TTkRfU09DX1MzQzI0WFhfUzNDNjRYWF9JMlNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2hhYy5jIGIvc291bmQvc29jL3NoL2hhYy5jCmluZGV4IGVhYjMxODMuLjQxZGI3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9oYWMuYworKysgYi9zb3VuZC9zb2Mvc2gvaGFjLmMKQEAgLTI2Nyw2ICsyNjcsMTAgQEAKICNkZWZpbmUgQUM5N19GTVRTCVwKIAlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBoYWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gaGFjX2h3X3BhcmFtcywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzaDRfaGFjX2RhaVtdID0gewogewogCS5uYW1lCQkJPSAiSEFDMCIsCkBAIC0yODQsOSArMjg4LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcwk9IGhhY19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmhhY19kYWlfb3BzLAogfSwKICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwCiB7CkBAIC0zMDUsOSArMzA3LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcwk9IGhhY19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmhhY19kYWlfb3BzLAogCiB9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc3NpLmMgYi9zb3VuZC9zb2Mvc2gvc3NpLmMKaW5kZXggZDFlNTM5MC4uNTZmYTA4NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9zc2kuYwpAQCAtMzM2LDYgKzMzNiwxNiBAQAogCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1UyNF8zTEUgfAlcCiAJIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFICB8IFNORFJWX1BDTV9GTVRCSVRfVTMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzc2lfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHNzaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IHNzaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAorCS5od19wYXJhbXMJPSBzc2lfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gc3NpX3NldF9zeXNjbGssCisJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKKwkuc2V0X2ZtdAk9IHNzaV9zZXRfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHNoNF9zc2lfZGFpW10gPSB7CiB7CiAJLm5hbWUJCQk9ICJTU0kwIiwKQEAgLTM1MiwxNSArMzYyLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAJPSBzc2lfc3RhcnR1cCwKLQkJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAotCQkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gc3NpX2h3X3BhcmFtcywKLQkJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKLQkJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKLQkJLnNldF9mbXQJPSBzc2lfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmc3NpX2RhaV9vcHMsCiB9LAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAKIHsKQEAgLTM3OCwxNSArMzgwLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAJPSBzc2lfc3RhcnR1cCwKLQkJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAotCQkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gc3NpX2h3X3BhcmFtcywKLQkJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKLQkJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKLQkJLnNldF9mbXQJPSBzc2lfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmc3NpX2RhaV9vcHMsCiB9LAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCBlYzNmOGJiLi42ZTcxMGY3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTMzLDggKzEzMyw4IEBACiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIAogCS8qIHN0YXJ0dXAgdGhlIGF1ZGlvIHN1YnN5c3RlbSAqLwotCWlmIChjcHVfZGFpLT5vcHMuc3RhcnR1cCkgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMuc3RhcnR1cChzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnN0YXJ0dXApIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5zdGFydHVwKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNhbid0IG9wZW4gaW50ZXJmYWNlICVzXG4iLAogCQkJCWNwdV9kYWktPm5hbWUpOwpAQCAtMTUwLDggKzE1MCw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMuc3RhcnR1cCkgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5zdGFydHVwKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnN0YXJ0dXApIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnN0YXJ0dXAoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBvcGVuIGNvZGVjICVzXG4iLAogCQkJCWNvZGVjX2RhaS0+bmFtZSk7CkBAIC0yMzQsNyArMjM0LDcgQEAKIAkJY3B1X2RhaS0+Y2FwdHVyZS5hY3RpdmUgPSBjb2RlY19kYWktPmNhcHR1cmUuYWN0aXZlID0gMTsKIAljcHVfZGFpLT5hY3RpdmUgPSBjb2RlY19kYWktPmFjdGl2ZSA9IDE7CiAJY3B1X2RhaS0+cnVudGltZSA9IHJ1bnRpbWU7Ci0Jc29jZGV2LT5jb2RlYy0+YWN0aXZlKys7CisJY2FyZC0+Y29kZWMtPmFjdGl2ZSsrOwogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtMjQ3LDggKzI0Nyw4IEBACiAJCXBsYXRmb3JtLT5wY21fb3BzLT5jbG9zZShzdWJzdHJlYW0pOwogCiBwbGF0Zm9ybV9lcnI6Ci0JaWYgKGNwdV9kYWktPm9wcy5zaHV0ZG93bikKLQkJY3B1X2RhaS0+b3BzLnNodXRkb3duKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+c2h1dGRvd24pCisJCWNwdV9kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKIG91dDoKIAltdXRleF91bmxvY2soJnBjbV9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfY2FyZCwKIAkJCQkJCSBkZWxheWVkX3dvcmsud29yayk7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjYXJkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgaTsKIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIApAQCAtMzQwLDExICszNDAsMTEgQEAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJc25kX3NvY19kYWlfZGlnaXRhbF9tdXRlKGNvZGVjX2RhaSwgMSk7CiAKLQlpZiAoY3B1X2RhaS0+b3BzLnNodXRkb3duKQotCQljcHVfZGFpLT5vcHMuc2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY3B1X2RhaS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOwogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnNodXRkb3duKQotCQljb2RlY19kYWktPm9wcy5zaHV0ZG93bihzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY29kZWNfZGFpLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAogCWlmIChtYWNoaW5lLT5vcHMgJiYgbWFjaGluZS0+b3BzLT5zaHV0ZG93bikKIAkJbWFjaGluZS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0pOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKQEAgLTQwOCwxNiArNDA4LDE2IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMucHJlcGFyZSkgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5wcmVwYXJlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnByZXBhcmUpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnByZXBhcmUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjb2RlYyBEQUkgcHJlcGFyZSBlcnJvclxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWlmIChjcHVfZGFpLT5vcHMucHJlcGFyZSkgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMucHJlcGFyZShzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnByZXBhcmUpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5wcmVwYXJlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNwdSBEQUkgcHJlcGFyZSBlcnJvclxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTQ5NCw4ICs0OTQsOCBAQAogCQl9CiAJfQogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLmh3X3BhcmFtcykgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19wYXJhbXMpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY29kZWNfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3Qgc2V0IGNvZGVjICVzIGh3IHBhcmFtc1xuIiwKIAkJCQljb2RlY19kYWktPm5hbWUpOwpAQCAtNTAzLDggKzUwMyw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY3B1X2RhaS0+b3BzLmh3X3BhcmFtcykgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMuaHdfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19wYXJhbXMpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNwdV9kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBpbnRlcmZhY2UgJXMgaHcgcGFyYW1zIGZhaWxlZFxuIiwKIAkJCQljcHVfZGFpLT5uYW1lKTsKQEAgLTUyNiwxMiArNTI2LDEyIEBACiAJcmV0dXJuIHJldDsKIAogcGxhdGZvcm1fZXJyOgotCWlmIChjcHVfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY3B1X2RhaS0+b3BzLmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19mcmVlKQorCQljcHVfZGFpLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAogaW50ZXJmYWNlX2VycjoKLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY29kZWNfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19mcmVlKQorCQljb2RlY19kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAKIGNvZGVjX2VycjoKIAlpZiAobWFjaGluZS0+b3BzICYmIG1hY2hpbmUtPm9wcy0+aHdfZnJlZSkKQEAgLTU1Myw3ICs1NTMsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IG1hY2hpbmUtPmNwdV9kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBtYWNoaW5lLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCW11dGV4X2xvY2soJnBjbV9tdXRleCk7CiAKQEAgLTU3MCwxMSArNTcwLDExIEBACiAJCXBsYXRmb3JtLT5wY21fb3BzLT5od19mcmVlKHN1YnN0cmVhbSk7CiAKIAkvKiBub3cgZnJlZSBodyBwYXJhbXMgZm9yIHRoZSBEQUkncyAgKi8KLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY29kZWNfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19mcmVlKQorCQljb2RlY19kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAKLQlpZiAoY3B1X2RhaS0+b3BzLmh3X2ZyZWUpCi0JCWNwdV9kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+aHdfZnJlZSkKKwkJY3B1X2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAKIAltdXRleF91bmxvY2soJnBjbV9tdXRleCk7CiAJcmV0dXJuIDA7CkBAIC01OTEsOCArNTkxLDggQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnRyaWdnZXIpIHsKLQkJcmV0ID0gY29kZWNfZGFpLT5vcHMudHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnRyaWdnZXIpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnRyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC02MDMsOCArNjAzLDggQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGNwdV9kYWktPm9wcy50cmlnZ2VyKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT50cmlnZ2VyKSB7CisJCXJldCA9IGNwdV9kYWktPm9wcy0+dHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC02MjksNyArNjI5LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSAqY29kZWNfZGV2ID0gc29jZGV2LT5jb2RlY19kZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAogCS8qIER1ZSB0byB0aGUgcmVzdW1lIGJlaW5nIHNjaGVkdWxlZCBpbnRvIGEgd29ya3F1ZXVlIHdlIGNvdWxkCkBAIC02NDUsOCArNjQ1LDggQEAKIAkvKiBtdXRlIGFueSBhY3RpdmUgREFDJ3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBjYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWk7Ci0JCWlmIChkYWktPm9wcy5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCi0JCQlkYWktPm9wcy5kaWdpdGFsX211dGUoZGFpLCAxKTsKKwkJaWYgKGRhaS0+b3BzLT5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCisJCQlkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKGRhaSwgMSk7CiAJfQogCiAJLyogc3VzcGVuZCBhbGwgcGNtcyAqLwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjYXJkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlICpjb2RlY19kZXYgPSBzb2NkZXYtPmNvZGVjX2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2Uoc29jZGV2LT5kZXYpOwogCWludCBpOwogCkBAIC03NDEsOCArNzQxLDggQEAKIAkvKiB1bm11dGUgYW55IGFjdGl2ZSBEQUNzICovCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpOwotCQlpZiAoZGFpLT5vcHMuZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQotCQkJZGFpLT5vcHMuZGlnaXRhbF9tdXRlKGRhaSwgMCk7CisJCWlmIChkYWktPm9wcy0+ZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQorCQkJZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZShkYWksIDApOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewpAQCAtOTgyLDggKzk4Miw4IEBACiBzdGF0aWMgaW50IHNvY19uZXdfcGNtKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LAogCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluaywgaW50IG51bSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBkYWlfbGluay0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGRhaV9saW5rLT5jcHVfZGFpOwpAQCAtOTk4LDcgKzk5OCw3IEBACiAKIAlydGQtPmRhaSA9IGRhaV9saW5rOwogCXJ0ZC0+c29jZGV2ID0gc29jZGV2OwotCWNvZGVjX2RhaS0+Y29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjX2RhaS0+Y29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIGNsaWVudCBhbmQgaW50ZXJmYWNlIGh3IGNhcGFiaWxpdGllcyAqLwogCXNwcmludGYobmV3X25hbWUsICIlcyAlcy0lZCIsIGRhaV9saW5rLT5zdHJlYW1fbmFtZSwgY29kZWNfZGFpLT5uYW1lLApAQCAtMTA0OCw5ICsxMDQ4LDggQEAKIH0KIAogLyogY29kZWMgcmVnaXN0ZXIgZHVtcCAqLwotc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqYnVmKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRldmRhdGEtPmNvZGVjOwogCWludCBpLCBzdGVwID0gMSwgY291bnQgPSAwOwogCiAJaWYgKCFjb2RlYy0+cmVnX2NhY2hlX3NpemUpCkBAIC0xMDkwLDcgKzEwODksNyBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JcmV0dXJuIHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLCBidWYpOworCXJldHVybiBzb2NfY29kZWNfcmVnX3Nob3coZGV2ZGF0YS0+Y2FyZC0+Y29kZWMsIGJ1Zik7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb2RlY19yZWcsIDA0NDQsIGNvZGVjX3JlZ19zaG93LCBOVUxMKTsKQEAgLTExMDcsMTIgKzExMDYsMTAgQEAKIHsKIAlzc2l6ZV90IHJldDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRldmljZSAqY2FyZF9kZXYgPSBjb2RlYy0+Y2FyZC0+ZGV2OwotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSA9IGNhcmRfZGV2LT5kcml2ZXJfZGF0YTsKIAljaGFyICpidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLCBidWYpOworCXJldCA9IHNvY19jb2RlY19yZWdfc2hvdyhjb2RlYywgYnVmKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOwogCWtmcmVlKGJ1Zik7CkBAIC0xMzA5LDE5ICsxMzA2LDE5IEBACiAgKi8KIGludCBzbmRfc29jX25ld19wY21zKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LCBpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwotCWludCByZXQgPSAwLCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOworCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiAJLyogcmVnaXN0ZXIgYSBzb3VuZCBjYXJkICovCi0JY29kZWMtPmNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB4aWQsIGNvZGVjLT5vd25lciwgMCk7Ci0JaWYgKCFjb2RlYy0+Y2FyZCkgeworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpZHgsIHhpZCwgY29kZWMtPm93bmVyLCAwLCAmY29kZWMtPmNhcmQpOworCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3QgY3JlYXRlIHNvdW5kIGNhcmQgZm9yIGNvZGVjICVzXG4iLAogCQkJY29kZWMtPm5hbWUpOwogCQltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWNvZGVjLT5jYXJkLT5kZXYgPSBzb2NkZXYtPmRldjsKQEAgLTEzNTUsOCArMTM1Miw4IEBACiAgKi8KIGludCBzbmRfc29jX2luaXRfY2FyZChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDAsIGksIGFjOTcgPSAwLCBlcnIgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CkBAIC0xNDA3LDcgKzE0MDQsNyBAQAogCWlmIChlcnIgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGNvZGVjIHN5c2ZzIGZpbGVzXG4iKTsKIAotCXNvY19pbml0X2NvZGVjX2RlYnVnZnMoc29jZGV2LT5jb2RlYyk7CisJc29jX2luaXRfY29kZWNfZGVidWdmcyhjb2RlYyk7CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiBvdXQ6CkBAIC0xNDI0LDE4ICsxNDIxLDE5IEBACiAgKi8KIHZvaWQgc25kX3NvY19mcmVlX3BjbXMoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CiAJaW50IGk7CiAjZW5kaWYKIAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7Ci0Jc29jX2NsZWFudXBfY29kZWNfZGVidWdmcyhzb2NkZXYtPmNvZGVjKTsKKwlzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKGNvZGVjKTsKICNpZmRlZiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX2RhaTsgaSsrKSB7CiAJCWNvZGVjX2RhaSA9ICZjb2RlYy0+ZGFpW2ldOwotCQlpZiAoY29kZWNfZGFpLT5hYzk3X2NvbnRyb2wgJiYgY29kZWMtPmFjOTcpIHsKKwkJaWYgKGNvZGVjX2RhaS0+YWM5N19jb250cm9sICYmIGNvZGVjLT5hYzk3ICYmCisJCSAgICBzdHJjbXAoY29kZWMtPm5hbWUsICJBQzk3IikgIT0gMCkgewogCQkJc29jX2FjOTdfZGV2X3VucmVnaXN0ZXIoY29kZWMpOwogCQkJZ290byBmcmVlX2NhcmQ7CiAJCX0KQEAgLTE0OTgsNiArMTQ5NiwzNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jbmV3KTsKIAogLyoqCisgKiBzbmRfc29jX2FkZF9jb250cm9scyAtIGFkZCBhbiBhcnJheSBvZiBjb250cm9scyB0byBhIGNvZGVjLgorICogQ29udmllbmllbmNlIGZ1bmN0aW9uIHRvIGFkZCBhIGxpc3Qgb2YgY29udHJvbHMuIE1hbnkgY29kZWNzIHdlcmUKKyAqIGR1cGxpY2F0aW5nIHRoaXMgY29kZS4KKyAqCisgKiBAY29kZWM6IGNvZGVjIHRvIGFkZCBjb250cm9scyB0bworICogQGNvbnRyb2xzOiBhcnJheSBvZiBjb250cm9scyB0byBhZGQKKyAqIEBudW1fY29udHJvbHM6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkKKyAqCisgKiBSZXR1cm4gMCBmb3Igc3VjY2VzcywgZWxzZSBlcnJvci4KKyAqLworaW50IHNuZF9zb2NfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbHMsIGludCBudW1fY29udHJvbHMpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY29kZWMtPmNhcmQ7CisJaW50IGVyciwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY29udHJvbHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbCA9ICZjb250cm9sc1tpXTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX3NvY19jbmV3KGNvbnRyb2wsIGNvZGVjLCBOVUxMKSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlczogRmFpbGVkIHRvIGFkZCAlc1xuIiwKKwkJCQljb2RlYy0+bmFtZSwgY29udHJvbC0+bmFtZSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2FkZF9jb250cm9scyk7CisKKy8qKgogICogc25kX3NvY19pbmZvX2VudW1fZG91YmxlIC0gZW51bWVyYXRlZCBkb3VibGUgbWl4ZXIgaW5mbyBjYWxsYmFjawogICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCiAgKiBAdWluZm86IGNvbnRyb2wgZWxlbWVudCBpbmZvcm1hdGlvbgpAQCAtMjAyMyw4ICsyMDUyLDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgY2xrX2lkLAogCXVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQogewotCWlmIChkYWktPm9wcy5zZXRfc3lzY2xrKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3N5c2NsayhkYWksIGNsa19pZCwgZnJlcSwgZGlyKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3N5c2NsayhkYWksIGNsa19pZCwgZnJlcSwgZGlyKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA0Myw4ICsyMDcyLDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAogCWludCBkaXZfaWQsIGludCBkaXYpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9jbGtkaXYpCi0JCXJldHVybiBkYWktPm9wcy5zZXRfY2xrZGl2KGRhaSwgZGl2X2lkLCBkaXYpOworCWlmIChkYWktPm9wcy0+c2V0X2Nsa2RpdikKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfY2xrZGl2KGRhaSwgZGl2X2lkLCBkaXYpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDYyLDggKzIwOTEsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJaW50IHBsbF9pZCwgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3BsbCkKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9wbGwoZGFpLCBwbGxfaWQsIGZyZXFfaW4sIGZyZXFfb3V0KTsKKwlpZiAoZGFpLT5vcHMtPnNldF9wbGwpCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3BsbChkYWksIHBsbF9pZCwgZnJlcV9pbiwgZnJlcV9vdXQpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDc4LDggKzIxMDcsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X2ZtdCkKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9mbXQoZGFpLCBmbXQpOworCWlmIChkYWktPm9wcy0+c2V0X2ZtdCkKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfZm10KGRhaSwgZm10KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA5Nyw4ICsyMTI2LDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCBzbG90cykKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3N5c2NsaykKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF90ZG1fc2xvdChkYWksIG1hc2ssIHNsb3RzKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3RkbV9zbG90KGRhaSwgbWFzaywgc2xvdHMpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTEzLDggKzIxNDIsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfc2V0X3RyaXN0YXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgdHJpc3RhdGUpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9zeXNjbGspCi0JCXJldHVybiBkYWktPm9wcy5zZXRfdHJpc3RhdGUoZGFpLCB0cmlzdGF0ZSk7CisJaWYgKGRhaS0+b3BzLT5zZXRfc3lzY2xrKQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF90cmlzdGF0ZShkYWksIHRyaXN0YXRlKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjEyOSw4ICsyMTU4LDggQEAKICAqLwogaW50IHNuZF9zb2NfZGFpX2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCiB7Ci0JaWYgKGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZSkKLQkJcmV0dXJuIGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZShkYWksIG11dGUpOworCWlmIChkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKQorCQlyZXR1cm4gZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZShkYWksIG11dGUpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTgzLDYgKzIyMTIsOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBudWxsX2RhaV9vcHMgPSB7Cit9OworCiAvKioKICAqIHNuZF9zb2NfcmVnaXN0ZXJfZGFpIC0gUmVnaXN0ZXIgYSBEQUkgd2l0aCB0aGUgQVNvQyBjb3JlCiAgKgpAQCAtMjE5Nyw2ICsyMjI5LDkgQEAKIAlpZiAoIWRhaS0+ZGV2KQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBkZXZpY2UgZm9yIERBSSAlc1xuIiwgZGFpLT5uYW1lKTsKIAorCWlmICghZGFpLT5vcHMpCisJCWRhaS0+b3BzID0gJm51bGxfZGFpX29wczsKKwogCUlOSVRfTElTVF9IRUFEKCZkYWktPmxpc3QpOwogCiAJbXV0ZXhfbG9jaygmY2xpZW50X211dGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggYTJmMWRhOC4uNzM1OTAzYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTU0LDE0ICs1NCwxNSBAQAogc3RhdGljIGludCBkYXBtX3VwX3NlcVtdID0gewogCXNuZF9zb2NfZGFwbV9wcmUsIHNuZF9zb2NfZGFwbV9taWNiaWFzLCBzbmRfc29jX2RhcG1fbWljLAogCXNuZF9zb2NfZGFwbV9tdXgsIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsIHNuZF9zb2NfZGFwbV9kYWMsCi0Jc25kX3NvY19kYXBtX21peGVyLCBzbmRfc29jX2RhcG1fcGdhLCBzbmRfc29jX2RhcG1fYWRjLCBzbmRfc29jX2RhcG1faHAsCi0Jc25kX3NvY19kYXBtX3Nwaywgc25kX3NvY19kYXBtX3Bvc3QKKwlzbmRfc29jX2RhcG1fbWl4ZXIsIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIHNuZF9zb2NfZGFwbV9wZ2EsCisJc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLCBzbmRfc29jX2RhcG1fc3BrLCBzbmRfc29jX2RhcG1fcG9zdAogfTsKKwogc3RhdGljIGludCBkYXBtX2Rvd25fc2VxW10gPSB7CiAJc25kX3NvY19kYXBtX3ByZSwgc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLCBzbmRfc29jX2RhcG1fc3BrLAotCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9taXhlciwgc25kX3NvY19kYXBtX2RhYywgc25kX3NvY19kYXBtX21pYywKLQlzbmRfc29jX2RhcG1fbWljYmlhcywgc25kX3NvY19kYXBtX211eCwgc25kX3NvY19kYXBtX3ZhbHVlX211eCwKLQlzbmRfc29jX2RhcG1fcG9zdAorCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIHNuZF9zb2NfZGFwbV9taXhlciwKKwlzbmRfc29jX2RhcG1fZGFjLCBzbmRfc29jX2RhcG1fbWljLCBzbmRfc29jX2RhcG1fbWljYmlhcywKKwlzbmRfc29jX2RhcG1fbXV4LCBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LCBzbmRfc29jX2RhcG1fcG9zdAogfTsKIAogc3RhdGljIGludCBkYXBtX3N0YXR1cyA9IDE7CkBAIC0xMDEsNyArMTAyLDggQEAKIHsKIAlzd2l0Y2ggKHctPmlkKSB7CiAJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgotCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOiB7CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOiB7CiAJCWludCB2YWw7CiAJCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPSAoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopCiAJCQl3LT5rY29udHJvbHNbaV0ucHJpdmF0ZV92YWx1ZTsKQEAgLTMyMywxNSArMzI1LDMyIEBACiAJCQlpZiAocGF0aC0+bmFtZSAhPSAoY2hhciopdy0+a2NvbnRyb2xzW2ldLm5hbWUpCiAJCQkJY29udGludWU7CiAKLQkJCS8qIGFkZCBkYXBtIGNvbnRyb2wgd2l0aCBsb25nIG5hbWUgKi8KLQkJCW5hbWVfbGVuID0gMiArIHN0cmxlbih3LT5uYW1lKQotCQkJCSsgc3RybGVuKHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCS8qIGFkZCBkYXBtIGNvbnRyb2wgd2l0aCBsb25nIG5hbWUuCisJCQkgKiBmb3IgZGFwbV9taXhlciB0aGlzIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQorCQkJICogbWl4ZXIgYW5kIGtjb250cm9sIG5hbWUuCisJCQkgKiBmb3IgZGFwbV9taXhlcl9uYW1lZF9jdGwgdGhpcyBpcyBzaW1wbHkgdGhlCisJCQkgKiBrY29udHJvbCBuYW1lLgorCQkJICovCisJCQluYW1lX2xlbiA9IHN0cmxlbih3LT5rY29udHJvbHNbaV0ubmFtZSkgKyAxOworCQkJaWYgKHctPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwpCisJCQkJbmFtZV9sZW4gKz0gMSArIHN0cmxlbih3LT5uYW1lKTsKKwogCQkJcGF0aC0+bG9uZ19uYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0tFUk5FTCk7CisKIAkJCWlmIChwYXRoLT5sb25nX25hbWUgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAotCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzICVzIiwKLQkJCQkgdy0+bmFtZSwgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJc3dpdGNoICh3LT5pZCkgeworCQkJZGVmYXVsdDoKKwkJCQlzbnByaW50ZihwYXRoLT5sb25nX25hbWUsIG5hbWVfbGVuLCAiJXMgJXMiLAorCQkJCQkgdy0+bmFtZSwgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJCWJyZWFrOworCQkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgorCQkJCXNucHJpbnRmKHBhdGgtPmxvbmdfbmFtZSwgbmFtZV9sZW4sICIlcyIsCisJCQkJCSB3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCXBhdGgtPmxvbmdfbmFtZVtuYW1lX2xlbiAtIDFdID0gJ1wwJzsKIAogCQkJcGF0aC0+a2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJnctPmtjb250cm9sc1tpXSwgdywKQEAgLTUwMyw2ICs1MjIsMTM3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChkYXBtX3JlZ19ldmVudCk7CiAKIC8qCisgKiBTY2FuIGEgc2luZ2xlIERBUE0gd2lkZ2V0IGZvciBhIGNvbXBsZXRlIGF1ZGlvIHBhdGggYW5kIHVwZGF0ZSB0aGUKKyAqIHBvd2VyIHN0YXR1cyBhcHByb3ByaWF0ZWx5LgorICovCitzdGF0aWMgaW50IGRhcG1fcG93ZXJfd2lkZ2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGV2ZW50LAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3sKKwlpbnQgaW4sIG91dCwgcG93ZXJfY2hhbmdlLCBwb3dlciwgcmV0OworCisJLyogdm1pZCAtIG5vIGFjdGlvbiAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fdm1pZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBhY3RpdmUgQURDICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9hZGMgJiYgdy0+YWN0aXZlKSB7CisJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOworCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCQl3LT5wb3dlciA9IChpbiAhPSAwKSA/IDEgOiAwOworCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBhY3RpdmUgREFDICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9kYWMgJiYgdy0+YWN0aXZlKSB7CisJCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7CisJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJCXctPnBvd2VyID0gKG91dCAhPSAwKSA/IDEgOiAwOworCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBwcmUgYW5kIHBvc3QgZXZlbnQgd2lkZ2V0cyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcHJlKSB7CisJCWlmICghdy0+ZXZlbnQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcG9zdCkgeworCQlpZiAoIXctPmV2ZW50KQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWxsIG90aGVyIHdpZGdldHMgKi8KKwlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKKwlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7CisJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwlwb3dlciA9IChvdXQgIT0gMCAmJiBpbiAhPSAwKSA/IDEgOiAwOworCXBvd2VyX2NoYW5nZSA9ICh3LT5wb3dlciA9PSBwb3dlcikgPyAwIDogMTsKKwl3LT5wb3dlciA9IHBvd2VyOworCisJaWYgKCFwb3dlcl9jaGFuZ2UpCisJCXJldHVybiAwOworCisJLyogY2FsbCBhbnkgcG93ZXIgY2hhbmdlIGV2ZW50IGhhbmRsZXJzICovCisJaWYgKHctPmV2ZW50KQorCQlwcl9kZWJ1ZygicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAorCQkJIHctPnBvd2VyID8gIm9uIiA6ICJvZmYiLAorCQkJIHctPm5hbWUsIHctPmV2ZW50X2ZsYWdzKTsKKworCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLworCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogcG93ZXIgZG93biBwcmUgZXZlbnQgKi8KKwlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBMb3dlciBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgIXBvd2VyKQorCQlkYXBtX3NldF9wZ2EodywgcG93ZXIpOworCisJZGFwbV91cGRhdGVfYml0cyh3KTsKKworCS8qIFJhaXNlIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiBwb3dlcikKKwkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKKworCS8qIHBvd2VyIHVwIHBvc3QgZXZlbnQgKi8KKwlpZiAocG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwb3dlciBkb3duIHBvc3QgZXZlbnQgKi8KKwlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgogICogU2NhbiBlYWNoIGRhcG0gd2lkZ2V0IGZvciBjb21wbGV0ZSBhdWRpbyBwYXRoLgogICogQSBjb21wbGV0ZSBwYXRoIGlzIGEgcm91dGUgdGhhdCBoYXMgdmFsaWQgZW5kcG9pbnRzIGkuZS46LQogICoKQEAgLTUxNCw3ICs2NjQsNyBAQAogc3RhdGljIGludCBkYXBtX3Bvd2VyX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZXZlbnQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7Ci0JaW50IGluLCBvdXQsIGksIGMgPSAxLCAqc2VxID0gTlVMTCwgcmV0ID0gMCwgcG93ZXJfY2hhbmdlLCBwb3dlcjsKKwlpbnQgaSwgYyA9IDEsICpzZXEgPSBOVUxMLCByZXQgPSAwOwogCiAJLyogZG8gd2UgaGF2ZSBhIHNlcXVlbmNlZCBzdHJlYW0gZXZlbnQgKi8KIAlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgewpAQCAtNTI1LDEzNSArNjc1LDIwIEBACiAJCXNlcSA9IGRhcG1fZG93bl9zZXE7CiAJfQogCi0JZm9yKGkgPSAwOyBpIDwgYzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGM7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7CiAKIAkJCS8qIGlzIHdpZGdldCBpbiBzdHJlYW0gb3JkZXIgKi8KIAkJCWlmIChzZXEgJiYgc2VxW2ldICYmIHctPmlkICE9IHNlcVtpXSkKIAkJCQljb250aW51ZTsKIAotCQkJLyogdm1pZCAtIG5vIGFjdGlvbiAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV92bWlkKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBhY3RpdmUgQURDICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2FkYyAmJiB3LT5hY3RpdmUpIHsKLQkJCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCXctPnBvd2VyID0gKGluICE9IDApID8gMSA6IDA7Ci0JCQkJZGFwbV91cGRhdGVfYml0cyh3KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogYWN0aXZlIERBQyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9kYWMgJiYgdy0+YWN0aXZlKSB7Ci0JCQkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCXctPnBvd2VyID0gKG91dCAhPSAwKSA/IDEgOiAwOwotCQkJCWRhcG1fdXBkYXRlX2JpdHModyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIHByZSBhbmQgcG9zdCBldmVudCB3aWRnZXRzICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3ByZSkgewotCQkJCWlmICghdy0+ZXZlbnQpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1VKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3Bvc3QpIHsKLQkJCQlpZiAoIXctPmV2ZW50KQotCQkJCQljb250aW51ZTsKLQotCQkJCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIGFsbCBvdGhlciB3aWRnZXRzICovCi0JCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCXBvd2VyID0gKG91dCAhPSAwICYmIGluICE9IDApID8gMSA6IDA7Ci0JCQlwb3dlcl9jaGFuZ2UgPSAody0+cG93ZXIgPT0gcG93ZXIpID8gMDogMTsKLQkJCXctPnBvd2VyID0gcG93ZXI7Ci0KLQkJCWlmICghcG93ZXJfY2hhbmdlKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBjYWxsIGFueSBwb3dlciBjaGFuZ2UgZXZlbnQgaGFuZGxlcnMgKi8KLQkJCWlmICh3LT5ldmVudCkKLQkJCQlwcl9kZWJ1ZygicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAotCQkJCQkgdy0+cG93ZXIgPyAib24iIDogIm9mZiIsCi0JCQkJCSB3LT5uYW1lLCB3LT5ldmVudF9mbGFncyk7Ci0KLQkJCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLwotCQkJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQkvKiBwb3dlciBkb3duIHByZSBldmVudCAqLwotCQkJaWYgKCFwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLyogTG93ZXIgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgIXBvd2VyKQotCQkJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7Ci0KLQkJCWRhcG1fdXBkYXRlX2JpdHModyk7Ci0KLQkJCS8qIFJhaXNlIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmIHBvd2VyKQotCQkJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7Ci0KLQkJCS8qIHBvd2VyIHVwIHBvc3QgZXZlbnQgKi8KLQkJCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkpIHsKLQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLyogcG93ZXIgZG93biBwb3N0IGV2ZW50ICovCi0JCQlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9CisJCQlyZXQgPSBkYXBtX3Bvd2VyX3dpZGdldChjb2RlYywgZXZlbnQsIHcpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAjaWZkZWYgREVCVUcKQEAgLTY4Nyw2ICs3MjIsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCWlmICh3LT5uYW1lKSB7CiAJCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7CiAJCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKQEAgLTc2MCw2ICs3OTYsNyBAQAogCWludCBmb3VuZCA9IDA7CiAKIAlpZiAod2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fbWl4ZXIgJiYKKwkgICAgd2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsICYmCiAJICAgIHdpZGdldC0+aWQgIT0gc25kX3NvY19kYXBtX3N3aXRjaCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTc5NSw3ICs4MzIsNyBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAJaW50IGNvdW50ID0gMDsKIAljaGFyICpzdGF0ZSA9ICJub3Qgc2V0IjsKQEAgLTgxMyw2ICs4NTAsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCWlmICh3LT5uYW1lKQogCQkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlczogJXNcbiIsCiAJCQkJCXctPm5hbWUsIHctPnBvd2VyID8gIk9uIjoiT2ZmIik7CkBAIC04NzYsNyArOTE0LDcgQEAKIH0KIAogc3RhdGljIGludCBzbmRfc29jX2RhcG1fc2V0X3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JY2hhciAqcGluLCBpbnQgc3RhdHVzKQorCQkJCWNvbnN0IGNoYXIgKnBpbiwgaW50IHN0YXR1cykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIApAQCAtOTkxLDYgKzEwMjksNyBAQAogCQlicmVhazsKIAljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CiAJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQlyZXQgPSBkYXBtX2Nvbm5lY3RfbWl4ZXIoY29kZWMsIHdzb3VyY2UsIHdzaW5rLCBwYXRoLCBjb250cm9sKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJZ290byBlcnI7CkBAIC0xMDY4LDYgKzExMDcsNyBAQAogCQlzd2l0Y2gody0+aWQpIHsKIAkJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJZGFwbV9uZXdfbWl4ZXIoY29kZWMsIHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX211eDoKQEAgLTEzOTYsNiArMTQzNiw3NiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZSk7CiAKIC8qKgorICogc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCAtIEluZm8gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVpbmZvOiBjb250cm9sIGVsZW1lbnQgaW5mb3JtYXRpb24KKyAqCisgKiBDYWxsYmFjayB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGEgcGluIHN3aXRjaCBjb250cm9sLgorICovCitpbnQgc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCk7CisKKy8qKgorICogc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoIC0gR2V0IGluZm9ybWF0aW9uIGZvciBhIHBpbiBzd2l0Y2gKKyAqCisgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKKyAqIEB1Y29udHJvbDogVmFsdWUKKyAqLworaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJY29uc3QgY2hhciAqcGluID0gKGNvbnN0IGNoYXIgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCXNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgcGluKTsKKworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoKTsKKworLyoqCisgKiBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2ggLSBTZXQgaW5mb3JtYXRpb24gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVjb250cm9sOiBWYWx1ZQorICovCitpbnQgc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljb25zdCBjaGFyICpwaW4gPSAoY29uc3QgY2hhciAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsIHBpbik7CisJZWxzZQorCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsIHBpbik7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaCk7CisKKy8qKgogICogc25kX3NvY19kYXBtX25ld19jb250cm9sIC0gY3JlYXRlIG5ldyBkYXBtIGNvbnRyb2wKICAqIEBjb2RlYzogYXVkaW8gY29kZWMKICAqIEB3aWRnZXQ6IHdpZGdldCB0ZW1wbGF0ZQpAQCAtMTUyNyw4ICsxNjM3LDggQEAKIGludCBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsCiAJCQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2FyZC0+c2V0X2JpYXNfbGV2ZWwpCkBAIC0xNTQ5LDcgKzE2NTksNyBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMSk7CiB9CkBAIC0xNTY0LDcgKzE2NzQsNyBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAwKTsKIH0KQEAgLTE1ODQsNyArMTY5NCw3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMCk7CiB9CkBAIC0xNTk5LDcgKzE3MDksNyBAQAogICoKICAqIFJldHVybnMgMSBmb3IgY29ubmVjdGVkIG90aGVyd2lzZSAwLgogICovCi1pbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIApAQCAtMTYyMCw3ICsxNzMwLDcgQEAKICAqLwogdm9pZCBzbmRfc29jX2RhcG1fZnJlZShzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlzbmRfc29jX2RhcG1fc3lzX3JlbW92ZShzb2NkZXYtPmRldik7CiAJZGFwbV9mcmVlX3dpZGdldHMoY29kZWMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1qYWNrLmMgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODM0NmZiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NvYy1qYWNrLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBzb2MtamFjay5jICAtLSAgQUxTQSBTb0MgamFjayBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKy8qKgorICogc25kX3NvY19qYWNrX25ldyAtIENyZWF0ZSBhIG5ldyBqYWNrCisgKiBAY2FyZDogIEFTb0MgY2FyZAorICogQGlkOiAgICBhbiBpZGVudGlmeWluZyBzdHJpbmcgZm9yIHRoaXMgamFjaworICogQHR5cGU6ICBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGNhbiBiZSBkZXRlY3RlZCBieQorICogICAgICAgICB0aGlzIGphY2sKKyAqIEBqYWNrOiAgc3RydWN0dXJlIHRvIHVzZSBmb3IgdGhlIGphY2sKKyAqCisgKiBDcmVhdGVzIGEgbmV3IGphY2sgb2JqZWN0LgorICoKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIE9uIHN1Y2Nlc3MgamFjayB3aWxsIGJlIGluaXRpYWxpc2VkLgorICovCitpbnQgc25kX3NvY19qYWNrX25ldyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IHR5cGUsCisJCSAgICAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaykKK3sKKwlqYWNrLT5jYXJkID0gY2FyZDsKKwlJTklUX0xJU1RfSEVBRCgmamFjay0+cGlucyk7CisKKwlyZXR1cm4gc25kX2phY2tfbmV3KGNhcmQtPmNvZGVjLT5jYXJkLCBpZCwgdHlwZSwgJmphY2stPmphY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX25ldyk7CisKKy8qKgorICogc25kX3NvY19qYWNrX3JlcG9ydCAtIFJlcG9ydCB0aGUgY3VycmVudCBzdGF0dXMgZm9yIGEgamFjaworICoKKyAqIEBqYWNrOiAgIHRoZSBqYWNrCisgKiBAc3RhdHVzOiBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGFyZSBjdXJyZW50bHkgZGV0ZWN0ZWQuCisgKiBAbWFzazogICBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGJlaW5nIHJlcG9ydGVkLgorICoKKyAqIElmIGNvbmZpZ3VyZWQgdXNpbmcgc25kX3NvY19qYWNrX2FkZF9waW5zKCkgdGhlbiB0aGUgYXNzb2NpYXRlZAorICogREFQTSBwaW5zIHdpbGwgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBhcHByb3ByaWF0ZSBhbmQgREFQTQorICogc3luY2hyb25pc2VkLgorICoKKyAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gdXNlcyBtdXRleGVzIGFuZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gYQorICogY29udGV4dCB3aGljaCBjYW4gc2xlZXAgKHN1Y2ggYXMgYSB3b3JrcXVldWUpLgorICovCit2b2lkIHNuZF9zb2NfamFja19yZXBvcnQoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHN0YXR1cywgaW50IG1hc2spCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gamFjay0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfamFja19waW4gKnBpbjsKKwlpbnQgZW5hYmxlOworCWludCBvbGRzdGF0dXM7CisKKwlpZiAoIWphY2spIHsKKwkJV0FSTl9PTl9PTkNFKCFqYWNrKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisKKwlvbGRzdGF0dXMgPSBqYWNrLT5zdGF0dXM7CisKKwlqYWNrLT5zdGF0dXMgJj0gfm1hc2s7CisJamFjay0+c3RhdHVzIHw9IHN0YXR1czsKKworCS8qIFRoZSBEQVBNIHN5bmMgaXMgZXhwZW5zaXZlIGVub3VnaCB0byBiZSB3b3J0aCBza2lwcGluZyAqLworCWlmIChqYWNrLT5zdGF0dXMgPT0gb2xkc3RhdHVzKQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmamFjay0+cGlucywgbGlzdCkgeworCQllbmFibGUgPSBwaW4tPm1hc2sgJiBzdGF0dXM7CisKKwkJaWYgKHBpbi0+aW52ZXJ0KQorCQkJZW5hYmxlID0gIWVuYWJsZTsKKworCQlpZiAoZW5hYmxlKQorCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsIHBpbi0+cGluKTsKKwkJZWxzZQorCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCBwaW4tPnBpbik7CisJfQorCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJc25kX2phY2tfcmVwb3J0KGphY2stPmphY2ssIHN0YXR1cyk7CisKK291dDoKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfcmVwb3J0KTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfYWRkX3BpbnMgLSBBc3NvY2lhdGUgREFQTSBwaW5zIHdpdGggYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogTnVtYmVyIG9mIHBpbnMKKyAqIEBwaW5zOiAgQXJyYXkgb2YgcGlucworICoKKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHRoZSBEQVBNIHBpbnMgc3BlY2lmaWVkIGluIHRoZQorICogcGlucyBhcnJheSB3aWxsIGhhdmUgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY3VycmVudAorICogc3RhdGUgb2YgdGhlIGphY2sgd2hlbmV2ZXIgdGhlIGphY2sgc3RhdHVzIGlzIHVwZGF0ZWQuCisgKi8KK2ludCBzbmRfc29jX2phY2tfYWRkX3BpbnMoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGlucykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghcGluc1tpXS5waW4pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTm8gbmFtZSBmb3IgcGluICVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICghcGluc1tpXS5tYXNrKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIG1hc2sgZm9yIHBpbiAlZCAoJXMpXG4iLCBpLAorCQkJICAgICAgIHBpbnNbaV0ucGluKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBpbnNbaV0ubGlzdCk7CisJCWxpc3RfYWRkKCYocGluc1tpXS5saXN0KSwgJmphY2stPnBpbnMpOworCX0KKworCS8qIFVwZGF0ZSB0byByZWZsZWN0IHRoZSBsYXN0IHJlcG9ydGVkIHN0YXR1czsgY2FubmVkIGphY2sKKwkgKiBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpa2VseSB0byBzZXQgdGhlaXIgc3RhdGUgYmVmb3JlIHRoZQorCSAqIGNhcmQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGFzc29jaWF0ZSBwaW5zLgorCSAqLworCXNuZF9zb2NfamFja19yZXBvcnQoamFjaywgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19hZGRfcGlucyk7CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorLyogZ3BpbyBkZXRlY3QgKi8KK3N0YXRpYyB2b2lkIHNuZF9zb2NfamFja19ncGlvX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW8pCit7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjayA9IGdwaW8tPmphY2s7CisJaW50IGVuYWJsZTsKKwlpbnQgcmVwb3J0OworCisJaWYgKGdwaW8tPmRlYm91bmNlX3RpbWUgPiAwKQorCQltZGVsYXkoZ3Bpby0+ZGVib3VuY2VfdGltZSk7CisKKwllbmFibGUgPSBncGlvX2dldF92YWx1ZShncGlvLT5ncGlvKTsKKwlpZiAoZ3Bpby0+aW52ZXJ0KQorCQllbmFibGUgPSAhZW5hYmxlOworCisJaWYgKGVuYWJsZSkKKwkJcmVwb3J0ID0gZ3Bpby0+cmVwb3J0OworCWVsc2UKKwkJcmVwb3J0ID0gMDsKKworCXNuZF9zb2NfamFja19yZXBvcnQoamFjaywgcmVwb3J0LCBncGlvLT5yZXBvcnQpOworfQorCisvKiBpcnEgaGFuZGxlciBmb3IgZ3BpbyBwaW4gKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW8gPSBkYXRhOworCisJc2NoZWR1bGVfd29yaygmZ3Bpby0+d29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIGdwaW8gd29yayAqLworc3RhdGljIHZvaWQgZ3Bpb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW87CisKKwlncGlvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbmRfc29jX2phY2tfZ3Bpbywgd29yayk7CisJc25kX3NvY19qYWNrX2dwaW9fZGV0ZWN0KGdwaW8pOworfQorCisvKioKKyAqIHNuZF9zb2NfamFja19hZGRfZ3Bpb3MgLSBBc3NvY2lhdGUgR1BJTyBwaW5zIHdpdGggYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBpbnMKKyAqIEBncGlvczogYXJyYXkgb2YgZ3BpbyBwaW5zCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlcXVlc3QgZ3Bpbywgc2V0IGRhdGEgZGlyZWN0aW9uIGFuZCByZXF1ZXN0IGlycQorICogZm9yIGVhY2ggZ3BpbyBpbiB0aGUgYXJyYXkuCisgKi8KK2ludCBzbmRfc29jX2phY2tfYWRkX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpCit7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghZ3Bpb19pc192YWxpZChncGlvc1tpXS5ncGlvKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGdwaW8gJWRcbiIsCisJCQkJZ3Bpb3NbaV0uZ3Bpbyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bmRvOworCQl9CisJCWlmICghZ3Bpb3NbaV0ubmFtZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJObyBuYW1lIGZvciBncGlvICVkXG4iLAorCQkJCWdwaW9zW2ldLmdwaW8pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gdW5kbzsKKwkJfQorCisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvc1tpXS5ncGlvLCBncGlvc1tpXS5uYW1lKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5kbzsKKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvc1tpXS5ncGlvKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9zW2ldLmdwaW8pLAorCQkJCWdwaW9faGFuZGxlciwKKwkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJamFjay0+Y2FyZC0+ZGV2LT5kcml2ZXItPm5hbWUsCisJCQkJJmdwaW9zW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCUlOSVRfV09SSygmZ3Bpb3NbaV0ud29yaywgZ3Bpb193b3JrKTsKKwkJZ3Bpb3NbaV0uamFjayA9IGphY2s7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlncGlvX2ZyZWUoZ3Bpb3NbaV0uZ3Bpbyk7Cit1bmRvOgorCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKGphY2ssIGksIGdwaW9zKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfYWRkX2dwaW9zKTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyAtIFJlbGVhc2UgR1BJTyBwaW5zJyByZXNvdXJjZXMgb2YgYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBpbnMKKyAqIEBncGlvczogYXJyYXkgb2YgZ3BpbyBwaW5zCisgKgorICogUmVsZWFzZSBncGlvIGFuZCBpcnEgcmVzb3VyY2VzIGZvciBncGlvIHBpbnMgYXNzb2NpYXRlZCB3aXRoIGFuIEFTb0MgamFjay4KKyAqLwordm9pZCBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksICZncGlvc1tpXSk7CisJCWdwaW9fZnJlZShncGlvc1tpXS5ncGlvKTsKKwkJZ3Bpb3NbaV0uamFjayA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MpOworI2VuZGlmCS8qIENPTkZJR19HUElPTElCICovCmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKaW5kZXggZjg3OTMzZS4uNTc0YWY1NiAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvYW1kNzkzMC5jCisrKyBiL3NvdW5kL3NwYXJjL2FtZDc5MzAuYwpAQCAtOTU0LDcgKzk1NCw4IEBACiAJYW1kLT5yZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCAwLAogCQkJICAgICAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVswXSksICJhbWQ3OTMwIik7CiAJaWYgKCFhbWQtPnJlZ3MpIHsKLQkJc25kX3ByaW50aygiYW1kNzkzMC0lZDogVW5hYmxlIHRvIG1hcCBjaGlwIHJlZ2lzdGVycy5cbiIsIGRldik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gbWFwIGNoaXAgcmVnaXN0ZXJzLlxuIiwgZGV2KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC05NjIsNyArOTYzLDcgQEAKIAogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9hbWQ3OTMwX2ludGVycnVwdCwKIAkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgImFtZDc5MzAiLCBhbWQpKSB7Ci0JCXNuZF9wcmludGsoImFtZDc5MzAtJWQ6IFVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYW1kNzkzMC0lZDogVW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLAogCQkJICAgZGV2LCBpcnEpOwogCQlzbmRfYW1kNzkzMF9mcmVlKGFtZCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0xMDE4LDkgKzEwMTksMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZfbnVtXSwgaWRbZGV2X251bV0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2X251bV0sIGlkW2Rldl9udW1dLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTUQ3OTMwIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlN1biBBTUQ3OTMwIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9jczQyMzEuYyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCmluZGV4IDQxYzM4NzUuLjdkOTNmYTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jCisrKyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCkBAIC0xNTYzLDYgKzE1NjMsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcDsKKwlpbnQgZXJyOwogCiAJKnJjYXJkID0gTlVMTDsKIApAQCAtMTU3NCwxMCArMTU3NSwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NzNDIzMSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NzNDIzMSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDUzQyMzEiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIENTNDIzMSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvZGJyaS5jIGIvc291bmQvc3BhcmMvZGJyaS5jCmluZGV4IDIzZWQ2ZjAuLmFmOTVmZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2RicmkuYworKysgYi9zb3VuZC9zcGFyYy9kYnJpLmMKQEAgLTI2MTIsMTAgKzI2MTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9kYnJpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZGJyaSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJEQlJJIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlN1biBEQlJJIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGkvYXQ3M2MyMTMuYyBiL3NvdW5kL3NwaS9hdDczYzIxMy5jCmluZGV4IDA5ODAyZTguLjRjN2IwNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwaS9hdDczYzIxMy5jCisrKyBiL3NvdW5kL3NwaS9hdDczYzIxMy5jCkBAIC05NjUsMTIgKzk2NSwxMSBAQAogCQlyZXR1cm4gUFRSX0VSUihib2FyZC0+ZGFjX2Nsayk7CiAJfQogCi0JcmV0dmFsID0gLUVOT01FTTsKLQogCS8qIEFsbG9jYXRlICJjYXJkIiB1c2luZyBzb21lIHVudXNlZCBpZGVudGlmaWVycy4gKi8KIAlzbnByaW50ZihpZCwgc2l6ZW9mIGlkLCAiYXQ3M2MyMTNfJWQiLCBib2FyZC0+c3NjX2lkKTsKLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX2F0NzNjMjEzKSk7Ci0JaWYgKCFjYXJkKQorCXJldHZhbCA9IHNuZF9jYXJkX2NyZWF0ZSgtMSwgaWQsIFRISVNfTU9EVUxFLAorCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9hdDczYzIxMyksICZjYXJkKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXQ7CiAKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X2h3ZGVwLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwppbmRleCAwYTUzOTE0Li5mZjBiMmE4IDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwpAQCAtMjQsMjUgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImVtdXhfdm9pY2UuaCIKIAotLyoKLSAqIG9wZW4gdGhlIGh3ZGVwIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1zbmRfZW11eF9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogY2xvc2UgdGhlIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1zbmRfZW11eF9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogCiAjZGVmaW5lIFRNUF9DTElFTlRfSUQJMHgxMDAxCiAKQEAgLTE0Niw4ICsxMjcsNiBAQAogCWVtdS0+aHdkZXAgPSBodzsKIAlzdHJjcHkoaHctPm5hbWUsIFNORFJWX0VNVVhfSFdERVBfTkFNRSk7CiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfRU1VWF9XQVZFVEFCTEU7Ci0JaHctPm9wcy5vcGVuID0gc25kX2VtdXhfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfZW11eF9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfZW11eF9od2RlcF9pb2N0bDsKIAlody0+ZXhjbHVzaXZlID0gMTsKIAlody0+cHJpdmF0ZV9kYXRhID0gZW11OwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCmluZGV4IDVjNDdiNmMuLjg3ZTQyMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXAgPSBzbmRfZW11eF9jcmVhdGVfcG9ydChlbXUsIHRtcG5hbWUsIDMyLAogCQkJCSAxLCAmY2FsbGJhY2spOwogCWlmIChwID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygiY2FuJ3QgY3JlYXRlIHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CiAJCXNuZF9lbXV4X2RlY19jb3VudChlbXUpOwogCQltdXRleF91bmxvY2soJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYwppbmRleCAzMzVhYTJjLi5jYTVmN2VmIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCkBAIC03NCwxNSArNzQsMTUgQEAKIAllbXUtPmNsaWVudCA9IHNuZF9zZXFfY3JlYXRlX2tlcm5lbF9jbGllbnQoY2FyZCwgaW5kZXgsCiAJCQkJCQkgICAiJXMgV2F2ZVRhYmxlIiwgZW11LT5uYW1lKTsKIAlpZiAoZW11LT5jbGllbnQgPCAwKSB7Ci0JCXNuZF9wcmludGsoImNhbid0IGNyZWF0ZSBjbGllbnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgY2xpZW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGVtdS0+bnVtX3BvcnRzIDwgMCkgewotCQlzbmRfcHJpbnRrKCJzZXFwb3J0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInNlcXBvcnRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm9cbiIpOwogCQllbXUtPm51bV9wb3J0cyA9IDE7CiAJfSBlbHNlIGlmIChlbXUtPm51bV9wb3J0cyA+PSBTTkRSVl9FTVVYX01BWF9QT1JUUykgewotCQlzbmRfcHJpbnRrKCJ0b28gbWFueSBwb3J0cy4iCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ0b28gbWFueSBwb3J0cy4iCiAJCQkgICAibGltaXRlZCBtYXguIHBvcnRzICVkXG4iLCBTTkRSVl9FTVVYX01BWF9QT1JUUyk7CiAJCWVtdS0+bnVtX3BvcnRzID0gU05EUlZfRU1VWF9NQVhfUE9SVFM7CiAJfQpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCXAgPSBzbmRfZW11eF9jcmVhdGVfcG9ydChlbXUsIHRtcG5hbWUsIE1JRElfQ0hBTk5FTFMsCiAJCQkJCSAwLCAmcGluZm8pOwogCQlpZiAocCA9PSBOVUxMKSB7Ci0JCQlzbmRfcHJpbnRrKCJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCkBAIC0xNDcsMTIgKzE0NywxMiBAQAogCiAJLyogQWxsb2NhdGUgc3RydWN0dXJlcyBmb3IgdGhpcyBjaGFubmVsICovCiAJaWYgKChwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJubyBtZW1vcnlcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBtZW1vcnlcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcC0+Y2hzZXQuY2hhbm5lbHMgPSBrY2FsbG9jKG1heF9jaGFubmVscywgc2l6ZW9mKHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHAtPmNoc2V0LmNoYW5uZWxzID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygibm8gbWVtb3J5XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gbWVtb3J5XG4iKTsKIAkJa2ZyZWUocCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTM3NiwxMiArMzc2LDEyIEBACiAJCQlnb3RvIF9fZXJyb3I7CiAJCX0KIAkJZW11LT52bWlkaVtpXSA9IHJtaWRpOwotCQkvL3NuZF9wcmludGsoInZpcm1pZGkgJWQgb2tcbiIsIGkpOworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgInZpcm1pZGkgJWQgb2tcbiIsIGkpOyAqLwogCX0KIAlyZXR1cm4gMDsKIAogX19lcnJvcjoKLQkvL3NuZF9wcmludGsoImVycm9yIGluaXQuLlxuIik7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcnJvciBpbml0Li5cbiIpOyAqLwogCXNuZF9lbXV4X2RlbGV0ZV92aXJtaWRpKGVtdSk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCmluZGV4IDJjYzZmNmYuLjNlOTIxYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCkBAIC05NTYsNyArOTU2LDggQEAKIAlpZiAoZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID09IFNORFJWX0VNVVhfU1RfT0ZGKQogCQllbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPSBTTkRSVl9FTVVYX1NUX0xPQ0tFRDsKIAllbHNlCi0JCXNuZF9wcmludGsoImludmFsaWQgdm9pY2UgZm9yIGxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgImludmFsaWQgdm9pY2UgZm9yIGxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAogCQkJICAgdm9pY2UsIGVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW11LT52b2ljZV9sb2NrLCBmbGFncyk7CiB9CkBAIC05NzMsNyArOTc0LDggQEAKIAlpZiAoZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID09IFNORFJWX0VNVVhfU1RfTE9DS0VEKQogCQllbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPSBTTkRSVl9FTVVYX1NUX09GRjsKIAllbHNlCi0JCXNuZF9wcmludGsoImludmFsaWQgdm9pY2UgZm9yIHVubG9jayAlZCAoc3RhdGUgPSAleClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAiaW52YWxpZCB2b2ljZSBmb3IgdW5sb2NrICVkIChzdGF0ZSA9ICV4KVxuIiwKIAkJCSAgIHZvaWNlLCBlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVtdS0+dm9pY2VfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYyBiL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKaW5kZXggMzZkNTNiZC4uNjNjOGY0NSAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpbnQgIHJjOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHBhdGNoKSkgewotCQlzbmRfcHJpbnRrKCJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXRjaCwgZGF0YSwgc2l6ZW9mKHBhdGNoKSkpCkBAIC0xNDMsMTUgKzE0MywxNiBAQAogCWRhdGEgKz0gc2l6ZW9mKHBhdGNoKTsKIAogCWlmIChwYXRjaC5rZXkgIT0gU05EUlZfT1NTX1NPVU5ERk9OVF9QQVRDSCkgewotCQlzbmRfcHJpbnRrKCInVGhlIHdyb25nIGtpbmQgb2YgcGF0Y2gnICV4XG4iLCBwYXRjaC5rZXkpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJUaGUgd3Jvbmcga2luZCBvZiBwYXRjaCAleFxuIiwgcGF0Y2gua2V5KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3VudCA8IHBhdGNoLmxlbikgewotCQlzbmRfcHJpbnRrKCJQYXRjaCB0b28gc2hvcnQgJWxkLCBuZWVkICVkXG4iLCBjb3VudCwgcGF0Y2gubGVuKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiUGF0Y2ggdG9vIHNob3J0ICVsZCwgbmVlZCAlZFxuIiwKKwkJCSAgIGNvdW50LCBwYXRjaC5sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHBhdGNoLmxlbiA8IDApIHsKLQkJc25kX3ByaW50aygicG9vciBsZW5ndGggJWRcbiIsIHBhdGNoLmxlbik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBvb3IgbGVuZ3RoICVkXG4iLCBwYXRjaC5sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5NSw3ICsxOTYsOCBAQAogCWNhc2UgU05EUlZfU0ZOVF9SRU1PVkVfSU5GTzoKIAkJLyogcGF0Y2ggbXVzdCBiZSBvcGVuZWQgKi8KIAkJaWYgKCFzZmxpc3QtPmN1cnJzZikgewotCQkJc25kX3ByaW50aygic291bmRmb250OiByZW1vdmVfaW5mbzogcGF0Y2ggbm90IG9wZW5lZFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzb3VuZGZvbnQ6IHJlbW92ZV9pbmZvOiAiCisJCQkJICAgInBhdGNoIG5vdCBvcGVuZWRcbiIpOwogCQkJcmMgPSAtRUlOVkFMOwogCQl9IGVsc2UgewogCQkJaW50IGJhbmssIGluc3RyOwpAQCAtNTMxLDcgKzUzMyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKGhkcikpIHsKLQkJcHJpbnRrKCJTb3VuZGZvbnQgZXJyb3I6IGludmFsaWQgcGF0Y2ggem9uZSBsZW5ndGhcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNvdW5kZm9udCBlcnJvcjogaW52YWxpZCBwYXRjaCB6b25lIGxlbmd0aFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIqKSZoZHIsIGRhdGEsIHNpemVvZihoZHIpKSkKQEAgLTU0MSwxMiArNTQzLDE0IEBACiAJY291bnQgLT0gc2l6ZW9mKGhkcik7CiAKIAlpZiAoaGRyLm52b2ljZXMgPD0gMCB8fCBoZHIubnZvaWNlcyA+PSAxMDApIHsKLQkJcHJpbnRrKCJTb3VuZGZvbnQgZXJyb3I6IElsbGVnYWwgdm9pY2UgbnVtYmVyICVkXG4iLCBoZHIubnZvaWNlcyk7CisJCXByaW50ayhLRVJOX0VSUiAiU291bmRmb250IGVycm9yOiBJbGxlZ2FsIHZvaWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIGhkci5udm9pY2VzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBzb3VuZGZvbnRfdm9pY2VfaW5mbykgKiBoZHIubnZvaWNlcykgewotCQlwcmludGsoIlNvdW5kZm9udCBFcnJvcjogcGF0Y2ggbGVuZ3RoKCVsZCkgaXMgc21hbGxlciB0aGFuIG52b2ljZXMoJWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIlNvdW5kZm9udCBFcnJvcjogIgorCQkgICAgICAgInBhdGNoIGxlbmd0aCglbGQpIGlzIHNtYWxsZXIgdGhhbiBudm9pY2VzKCVkKVxuIiwKIAkJICAgICAgIGNvdW50LCBoZHIubnZvaWNlcyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTk1Miw3ICs5NTYsNyBAQAogCWludCByYzsKIAogCWlmIChjb3VudCA8IChsb25nKXNpemVvZihwYXRjaCkpIHsKLQkJc25kX3ByaW50aygicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3B5X2Zyb21fdXNlcigmcGF0Y2gsIGRhdGEsIHNpemVvZihwYXRjaCkpKQpAQCAtMTAzNCw3ICsxMDM4LDggQEAKIAkvKiBwYW5uaW5nIHBvc2l0aW9uOyAtMTI4IC0gMTI3ID0+IDAtMTI3ICovCiAJem9uZS0+di5wYW4gPSAocGF0Y2gucGFubmluZyArIDEyOCkgLyAyOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJndXM6IGJhc2VmcnE9JWQgKG9mcz0lZCkgcm9vdD0lZCx0dW5lPSVkLCByYW5nZTolZC0lZFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgImd1czogYmFzZWZycT0lZCAob2ZzPSVkKSByb290PSVkLHR1bmU9JWQsIHJhbmdlOiVkLSVkXG4iLAogCQkgICAoaW50KXBhdGNoLmJhc2VfZnJlcSwgem9uZS0+di5yYXRlX29mZnNldCwKIAkJICAgem9uZS0+di5yb290LCB6b25lLT52LnR1bmUsIHpvbmUtPnYubG93LCB6b25lLT52LmhpZ2gpOwogI2VuZGlmCkBAIC0xMDY4LDcgKzEwNzMsOCBAQAogCQl6b25lLT52LnBhcm0udm9scmVsZWFzZSA9IDB4ODAwMCB8IHNuZF9zZl9jYWxjX3Bhcm1fZGVjYXkocmVsZWFzZSk7CiAJCXpvbmUtPnYuYXR0ZW51YXRpb24gPSBjYWxjX2d1c19hdHRlbnVhdGlvbihwYXRjaC5lbnZfb2Zmc2V0WzBdKTsKICNpZiAwCi0JCXNuZF9wcmludGsoImd1czogYXRraGxkPSV4LCBkY3lzdXM9JXgsIHZvbHJlbD0leCwgYXR0PSVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJndXM6IGF0a2hsZD0leCwgZGN5c3VzPSV4LCB2b2xyZWw9JXgsIGF0dD0lZFxuIiwKIAkJCSAgIHpvbmUtPnYucGFybS52b2xhdGtobGQsCiAJCQkgICB6b25lLT52LnBhcm0udm9sZGN5c3VzLAogCQkJICAgem9uZS0+di5wYXJtLnZvbHJlbGVhc2UsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvS2NvbmZpZyBiL3NvdW5kL3VzYi9LY29uZmlnCmluZGV4IDRmMGVhYzkuLjUyM2FlYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9LY29uZmlnCisrKyBiL3NvdW5kL3VzYi9LY29uZmlnCkBAIC00OCw3ICs0OCwxMCBAQAogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBLb3JlIENvbnRyb2xsZXIKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgS29yZSBDb250cm9sbGVyIDIKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gS29udHJvbCAxCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIDQgREoKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gOCBESgorCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBHdWl0YXIgUmlnIFNlc3Npb24gSS9PCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEd1aXRhciBSaWcgbW9iaWxlCiAKIAkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICAgd2lsbCBiZSBjYWxsZWQgc25kLXVzYi1jYWlhcS4KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1hdWRpby5jIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKaW5kZXggYjNhNjAzMy4uMDhkNTFlMCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogCWRldi0+b3V0cHV0X3BhbmljID0gMDsKIAlkZXYtPmZpcnN0X3BhY2tldCA9IDE7CiAJZGV2LT5zdHJlYW1pbmcgPSAxOworCWRldi0+d2FybmVkID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBOX1VSQlM7IGkrKykgewogCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmRhdGFfdXJic19pbltpXSwgR0ZQX0FUT01JQyk7CkBAIC0zNzYsNiArMzc3LDkgQEAKIAogCQlmb3IgKHN0cmVhbSA9IDA7IHN0cmVhbSA8IGRldi0+bl9zdHJlYW1zOyBzdHJlYW0rKywgaSsrKSB7CiAJCQlzdWIgPSBkZXYtPnN1Yl9jYXB0dXJlW3N0cmVhbV07CisJCQlpZiAoZGV2LT5pbnB1dF9wYW5pYykKKwkJCQl1c2JfYnVmW2ldID0gMDsKKwogCQkJaWYgKHN1YikgewogCQkJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3ViLT5ydW50aW1lOwogCQkJCWNoYXIgKmF1ZGlvX2J1ZiA9IHJ0LT5kbWFfYXJlYTsKQEAgLTM5Nyw2ICs0MDEsOSBAQAogCWlmICghZGV2LT5zdHJlYW1pbmcpCiAJCXJldHVybjsKIAorCWlmIChpc28tPmFjdHVhbF9sZW5ndGggPCBkZXYtPmJwcCkKKwkJcmV0dXJuOworCiAJc3dpdGNoIChkZXYtPnNwZWMuZGF0YV9hbGlnbm1lbnQpIHsKIAljYXNlIDA6CiAJCXJlYWRfaW5fdXJiX21vZGUwKGRldiwgdXJiLCBpc28pOwpAQCAtNDA2LDEwICs0MTMsMTEgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpIHsKKwlpZiAoKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpICYmICFkZXYtPndhcm5lZCkgewogCQlkZWJ1Zygic3RyZWFtaW5nIGVycm9yIGRldGVjdGVkICVzICVzXG4iLCAKIAkJCQlkZXYtPmlucHV0X3BhbmljID8gIihpbnB1dCkiIDogIiIsCiAJCQkJZGV2LT5vdXRwdXRfcGFuaWMgPyAiKG91dHB1dCkiIDogIiIpOworCQlkZXYtPndhcm5lZCA9IDE7CiAJfQogfQogCkBAIC02MzgsOSArNjQ2LDEwIEBACiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BSzEpOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfUklHS09OVFJPTDMpOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfU0VTU0lPTklPKToKLQkJZGV2LT5zYW1wbGVyYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84ODIwMDsKKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0dVSVRBUlJJR01PQklMRSk6CiAJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfMTkyMDAwOwotCQlicmVhazsKKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESik6CiAJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfODgyMDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1jb250cm9sLmMKaW5kZXggY2NkNzYzZC4uZTkyYzJiYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYworKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jCkBAIC0zOSwxMiArMzksMTIgQEAKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gY2FpYXFkZXYoY2hpcC0+Y2FyZCk7CiAJaW50IHBvcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCWludCBpc19pbnR2YWwgPSBwb3MgJiBDTlRfSU5UVkFMOworCXVuc2lnbmVkIGludCBpZCA9IGRldi0+Y2hpcC51c2JfaWQ7CiAKIAl1aW5mby0+Y291bnQgPSAxOwogCXBvcyAmPSB+Q05UX0lOVFZBTDsKIAotCWlmIChkZXYtPmNoaXAudXNiX2lkID09Ci0JCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPOERKKQorCWlmIChpZCA9PSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESikKIAkJJiYgKHBvcyA9PSAwKSkgewogCQkvKiBjdXJyZW50IGlucHV0IG1vZGUgb2YgQThESiAqLwogCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKQEAgLTUzLDYgKzUzLDE1IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmIChpZCA9PSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESikKKwkJJiYgKHBvcyA9PSAwKSkgeworCQkvKiBjdXJyZW50IGlucHV0IG1vZGUgb2YgQTRESiAqLworCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGlzX2ludHZhbCkgewogCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKIAkJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKQEAgLTczLDYgKzgyLDE0IEBACiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IGNhaWFxZGV2KGNoaXAtPmNhcmQpOwogCWludCBwb3MgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAorCWlmIChkZXYtPmNoaXAudXNiX2lkID09CisJCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKSkgeworCQkvKiBBNERKIGhhcyBvbmx5IG9uZSBjb250cm9sICovCisJCS8qIGRvIG5vdCBleHBvc2UgaGFyZHdhcmUgaW5wdXQgbW9kZSAwICovCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGV2LT5jb250cm9sX3N0YXRlWzBdIC0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHBvcyAmIENOVF9JTlRWQUwpCiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdCiAJCQk9IGRldi0+Y29udHJvbF9zdGF0ZVtwb3MgJiB+Q05UX0lOVFZBTF07CkBAIC05MCwxMCArMTA3LDIwIEBACiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IGNhaWFxZGV2KGNoaXAtPmNhcmQpOwogCWludCBwb3MgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAorCWlmIChkZXYtPmNoaXAudXNiX2lkID09CisJCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKSkgeworCQkvKiBBNERKIGhhcyBvbmx5IG9uZSBjb250cm9sICovCisJCS8qIGRvIG5vdCBleHBvc2UgaGFyZHdhcmUgaW5wdXQgbW9kZSAwICovCisJCWRldi0+Y29udHJvbF9zdGF0ZVswXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICsgMTsKKwkJc25kX3VzYl9jYWlhcV9zZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX1dSSVRFX0lPLAorCQkJCWRldi0+Y29udHJvbF9zdGF0ZSwgc2l6ZW9mKGRldi0+Y29udHJvbF9zdGF0ZSkpOworCQlyZXR1cm4gMTsKKwl9CisKIAlpZiAocG9zICYgQ05UX0lOVFZBTCkgewogCQlkZXYtPmNvbnRyb2xfc3RhdGVbcG9zICYgfkNOVF9JTlRWQUxdCiAJCQk9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfRElNTV9MRURTLAorCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfV1JJVEVfSU8sCiAJCQkJZGV2LT5jb250cm9sX3N0YXRlLCBzaXplb2YoZGV2LT5jb250cm9sX3N0YXRlKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQpAQCAtMjQzLDEwICsyNzAsMTMgQEAKIAl7ICJHTkQgbGlmdCBmb3IgVEMgVmlueWwgbW9kZSIsIAkyNCArIDAgCQl9LAogCXsgIkdORCBsaWZ0IGZvciBUQyBDRC9MaW5lIG1vZGUiLCAJMjQgKyAxIAkJfSwKIAl7ICJHTkQgbGlmdCBmb3IgcGhvbm8gbW9kZSIsIAkJMjQgKyAyIAkJfSwKLQl7ICJHTkQgbGlmdCBmb3IgVEMgVmlueWwgbW9kZSIsIAkyNCArIDMgCQl9LAogCXsgIlNvZnR3YXJlIGxvY2siLCAJCQk0MCAJCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2FpYXFfY29udHJvbGxlciBhNGRqX2NvbnRyb2xsZXJbXSA9IHsKKwl7ICJDdXJyZW50IGlucHV0IG1vZGUiLAkwIHwgQ05UX0lOVFZBTCAJfQorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWRkX2NvbnRyb2xzKHN0cnVjdCBjYWlhcV9jb250cm9sbGVyICpjLCBpbnQgbnVtLAogCQkJCSAgc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKIHsKQEAgLTI5NSw2ICszMjUsMTAgQEAKIAkJcmV0ID0gYWRkX2NvbnRyb2xzKGE4ZGpfY29udHJvbGxlciwKIAkJCUFSUkFZX1NJWkUoYThkal9jb250cm9sbGVyKSwgZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CisJCXJldCA9IGFkZF9jb250cm9scyhhNGRqX2NvbnRyb2xsZXIsCisJCQlBUlJBWV9TSVpFKGE0ZGpfY29udHJvbGxlciksIGRldik7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMKaW5kZXggNDFjMzZiMC4uY2Y1NzNhOSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYwpAQCAtNDIsMTUgKzQyLDE3IEBACiAjZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4xMCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjEzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wzfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEtvcmUgQ29udHJvbGxlcn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBLb3JlIENvbnRyb2xsZXIgMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyBLb250cm9sIDF9LCIKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgQXVkaW8gNCBESn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyA4IERKfSwiCi0JCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFNlc3Npb24gSS9PfX0iKTsKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgU2Vzc2lvbiBJL099LCIKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgR3VpdGFyUmlnIG1vYmlsZX0iKTsKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsgLyogSW5kZXggMC1tYXggKi8KIHN0YXRpYyBjaGFyKiBpZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsgLyogSWQgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMTE2LDYgKzExOCwxNiBAQAogCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKIAkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfU0VTU0lPTklPCiAJfSwKKwl7CisJCS5tYXRjaF9mbGFncyA9ICBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCisJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX0dVSVRBUlJJR01PQklMRQorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MgPSAgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJCS5pZFZlbmRvciA9ICAgICBVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLAorCQkuaWRQcm9kdWN0ID0gICAgVVNCX1BJRF9BVURJTzRESgorCX0sCiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKQEAgLTIzOSw2ICsyNTEsOCBAQAogCQkKIAlpZiAoZGV2LT5hdWRpb19wYXJtX2Fuc3dlciAhPSAxKSAKIAkJZGVidWcoInVuYWJsZSB0byBzZXQgdGhlIGRldmljZSdzIGF1ZGlvIHBhcmFtc1xuIik7CisJZWxzZQorCQlkZXYtPmJwcCA9IGJwcDsKIAogCXJldHVybiBkZXYtPmF1ZGlvX3Bhcm1fYW5zd2VyID09IDEgPyAwIDogLUVJTlZBTDsKIH0KQEAgLTMwMCw2ICszMTQsMTIgQEAKIAkJfQogCiAJCWJyZWFrOworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopOgorCQkvKiBBdWRpbyA0IERKIC0gZGVmYXVsdCBpbnB1dCBtb2RlIHRvIHBob25vICovCisJCWRldi0+Y29udHJvbF9zdGF0ZVswXSA9IDI7CisJCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9XUklURV9JTywKKwkJCWRldi0+Y29udHJvbF9zdGF0ZSwgMSk7CisJCWJyZWFrOwogCX0KIAkKIAlpZiAoZGV2LT5zcGVjLm51bV9hbmFsb2dfYXVkaW9fb3V0ICsKQEAgLTMzNiw5ICszNTYsMTAgQEAKIAkJbG9nKCJVbmFibGUgdG8gc2V0IHVwIGNvbnRyb2wgc3lzdGVtIChyZXQ9JWQpXG4iLCByZXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkKiBjcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSogdXNiX2RldikKK3N0YXRpYyBpbnQgY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UqIHVzYl9kZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludCBkZXZudW07CisJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldjsKIApAQCAtMzQ3LDEyICszNjgsMTIgQEAKIAkJCWJyZWFrOwogCiAJaWYgKGRldm51bSA+PSBTTkRSVl9DQVJEUykKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldikpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLCAKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWRldiA9IGNhaWFxZGV2KGNhcmQpOwogCWRldi0+Y2hpcC5kZXYgPSB1c2JfZGV2OwpAQCAtMzYyLDcgKzM4Myw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c3BpbmxvY2spOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnVzYl9kZXYtPmRldik7CiAKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X2NhcmQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKQEAgLTQ0MSwxMCArNDYzLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCQotCWNhcmQgPSBjcmVhdGVfY2FyZChkZXZpY2UpOworCXJldCA9IGNyZWF0ZV9jYXJkKGRldmljZSwgJmNhcmQpOwogCQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJCQkKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmQpOwogCXJldCA9IGluaXRfY2FyZChjYWlhcWRldihjYXJkKSk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmggYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKaW5kZXggYWI1NmU3My4uNGNjZTFhZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaApAQCAtMTAsOCArMTAsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9LT1JFQ09OVFJPTExFUgkweDQ3MTEKICNkZWZpbmUgVVNCX1BJRF9LT1JFQ09OVFJPTExFUjIJMHg0NzEyCiAjZGVmaW5lIFVTQl9QSURfQUsxCQkweDA4MTUKKyNkZWZpbmUgVVNCX1BJRF9BVURJTzRESgkweDA4MzkKICNkZWZpbmUgVVNCX1BJRF9BVURJTzhESgkweDE5NzgKICNkZWZpbmUgVVNCX1BJRF9TRVNTSU9OSU8JMHgxOTE1CisjZGVmaW5lIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFCTB4MGQ4ZAogCiAjZGVmaW5lIEVQMV9CVUZTSVpFIDY0CiAjZGVmaW5lIENBSUFRX1VTQl9TVFJfTEVOIDB4ZmYKQEAgLTg3LDkgKzg5LDkgQEAKIAlpbnQgYXVkaW9fb3V0X2J1Zl9wb3NbTUFYX1NUUkVBTVNdOwogCWludCBwZXJpb2RfaW5fY291bnRbTUFYX1NUUkVBTVNdOwogCWludCBwZXJpb2Rfb3V0X2NvdW50W01BWF9TVFJFQU1TXTsKLQlpbnQgaW5wdXRfcGFuaWMsIG91dHB1dF9wYW5pYzsKKwlpbnQgaW5wdXRfcGFuaWMsIG91dHB1dF9wYW5pYywgd2FybmVkOwogCWNoYXIgKmF1ZGlvX2luX2J1ZiwgKmF1ZGlvX291dF9idWY7Ci0JdW5zaWduZWQgaW50IHNhbXBsZXJhdGVzOworCXVuc2lnbmVkIGludCBzYW1wbGVyYXRlcywgYnBwOwogCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJfcGxheWJhY2tbTUFYX1NUUkVBTVNdOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViX2NhcHR1cmVbTUFYX1NUUkVBTVNdOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCAxOWUzNzQ1Li5jMmRiMGY5IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lIE1BWF9QQUNLU19IUwkoTUFYX1BBQ0tTICogOCkJLyogaW4gaGlnaCBzcGVlZCBtb2RlICovCiAjZGVmaW5lIE1BWF9VUkJTCTgKICNkZWZpbmUgU1lOQ19VUkJTCTQJLyogYWx3YXlzIGZvdXIgdXJicyBmb3Igc3luYyAqLwotI2RlZmluZSBNSU5fUEFDS1NfVVJCCTEJLyogbWluaW11bSAxIHBhY2tldCBwZXIgdXJiICovCisjZGVmaW5lIE1BWF9RVUVVRQkyNAkvKiB0cnkgbm90IHRvIGV4Y2VlZCB0aGlzIHF1ZXVlIGxlbmd0aCwgaW4gbXMgKi8KIAogc3RydWN0IGF1ZGlvZm9ybWF0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC01MjUsNyArNTI1LDcgQEAKIC8qCiAgKiBQcmVwYXJlIHVyYiBmb3Igc3RyZWFtaW5nIGJlZm9yZSBwbGF5YmFjayBzdGFydHMgb3Igd2hlbiBwYXVzZWQuCiAgKgotICogV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSwgc28gd2Ugc2VuZCBhIGZyYW1lIG9mIHNpbGVuY2UuCisgKiBXZSBkb24ndCBoYXZlIGFueSBkYXRhLCBzbyB3ZSBzZW5kIHNpbGVuY2UuCiAgKi8KIHN0YXRpYyBpbnQgcHJlcGFyZV9ub2RhdGFfcGxheWJhY2tfdXJiKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3VicywKIAkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSwKQEAgLTUzNywxMyArNTM3LDEzIEBACiAKIAlvZmZzID0gMDsKIAl1cmItPmRldiA9IGN0eC0+c3Vicy0+ZGV2OwotCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBzdWJzLT5wYWNrc19wZXJfbXM7Ci0JZm9yIChpID0gMDsgaSA8IHN1YnMtPnBhY2tzX3Blcl9tczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+cGFja2V0czsgKytpKSB7CiAJCWNvdW50cyA9IHNuZF91c2JfYXVkaW9fbmV4dF9wYWNrZXRfc2l6ZShzdWJzKTsKIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzICogc3RyaWRlOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IGNvdW50cyAqIHN0cmlkZTsKIAkJb2ZmcyArPSBjb3VudHM7CiAJfQorCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBjdHgtPnBhY2tldHM7CiAJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gb2ZmcyAqIHN0cmlkZTsKIAltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJICAgICAgIHN1YnMtPmN1cl9hdWRpb2ZtdC0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfVTggPyAweDgwIDogMCwKQEAgLTEwMzQsOSArMTAzNCw5IEBACiBzdGF0aWMgaW50IGluaXRfc3Vic3RyZWFtX3VyYnMoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLCB1bnNpZ25lZCBpbnQgcGVyaW9kX2J5dGVzLAogCQkJICAgICAgIHVuc2lnbmVkIGludCByYXRlLCB1bnNpZ25lZCBpbnQgZnJhbWVfYml0cykKIHsKLQl1bnNpZ25lZCBpbnQgbWF4c2l6ZSwgbiwgaTsKKwl1bnNpZ25lZCBpbnQgbWF4c2l6ZSwgaTsKIAlpbnQgaXNfcGxheWJhY2sgPSBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQl1bnNpZ25lZCBpbnQgbnBhY2tzW01BWF9VUkJTXSwgdXJiX3BhY2tzLCB0b3RhbF9wYWNrcywgcGFja3NfcGVyX21zOworCXVuc2lnbmVkIGludCB1cmJfcGFja3MsIHRvdGFsX3BhY2tzLCBwYWNrc19wZXJfbXM7CiAKIAkvKiBjYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeSBpbiAxNi4xNiBmb3JtYXQgKi8KIAlpZiAoc25kX3VzYl9nZXRfc3BlZWQoc3Vicy0+ZGV2KSA9PSBVU0JfU1BFRURfRlVMTCkKQEAgLTEwNzAsOCArMTA3MCw3IEBACiAJc3Vicy0+cGFja3NfcGVyX21zID0gcGFja3NfcGVyX21zOwogCiAJaWYgKGlzX3BsYXliYWNrKSB7Ci0JCXVyYl9wYWNrcyA9IG5ycGFja3M7Ci0JCXVyYl9wYWNrcyA9IG1heCh1cmJfcGFja3MsICh1bnNpZ25lZCBpbnQpTUlOX1BBQ0tTX1VSQik7CisJCXVyYl9wYWNrcyA9IG1heChucnBhY2tzLCAxKTsKIAkJdXJiX3BhY2tzID0gbWluKHVyYl9wYWNrcywgKHVuc2lnbmVkIGludClNQVhfUEFDS1MpOwogCX0gZWxzZQogCQl1cmJfcGFja3MgPSAxOwpAQCAtMTA3OSw3ICsxMDc4LDcgQEAKIAogCS8qIGRlY2lkZSBob3cgbWFueSBwYWNrZXRzIHRvIGJlIHVzZWQgKi8KIAlpZiAoaXNfcGxheWJhY2spIHsKLQkJdW5zaWduZWQgaW50IG1pbnNpemU7CisJCXVuc2lnbmVkIGludCBtaW5zaXplLCBtYXhwYWNrczsKIAkJLyogZGV0ZXJtaW5lIGhvdyBzbWFsbCBhIHBhY2tldCBjYW4gYmUgKi8KIAkJbWluc2l6ZSA9IChzdWJzLT5mcmVxbiA+PiAoMTYgLSBzdWJzLT5kYXRhaW50ZXJ2YWwpKQogCQkJICAqIChmcmFtZV9iaXRzID4+IDMpOwpAQCAtMTA5Miw4ICsxMDkxLDEzIEBACiAJCXRvdGFsX3BhY2tzID0gKHRvdGFsX3BhY2tzICsgcGFja3NfcGVyX21zIC0gMSkKIAkJCQkmIH4ocGFja3NfcGVyX21zIC0gMSk7CiAJCS8qIHdlIG5lZWQgYXQgbGVhc3QgdHdvIFVSQnMgZm9yIHF1ZXVlaW5nICovCi0JCWlmICh0b3RhbF9wYWNrcyA8IDIgKiBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zKQotCQkJdG90YWxfcGFja3MgPSAyICogTUlOX1BBQ0tTX1VSQiAqIHBhY2tzX3Blcl9tczsKKwkJaWYgKHRvdGFsX3BhY2tzIDwgMiAqIHBhY2tzX3Blcl9tcykgeworCQkJdG90YWxfcGFja3MgPSAyICogcGFja3NfcGVyX21zOworCQl9IGVsc2UgeworCQkJLyogYW5kIHdlIGRvbid0IHdhbnQgdG9vIGxvbmcgYSBxdWV1ZSBlaXRoZXIgKi8KKwkJCW1heHBhY2tzID0gbWF4KE1BWF9RVUVVRSAqIHBhY2tzX3Blcl9tcywgdXJiX3BhY2tzICogMik7CisJCQl0b3RhbF9wYWNrcyA9IG1pbih0b3RhbF9wYWNrcywgbWF4cGFja3MpOworCQl9CiAJfSBlbHNlIHsKIAkJdG90YWxfcGFja3MgPSBNQVhfVVJCUyAqIHVyYl9wYWNrczsKIAl9CkBAIC0xMTAyLDMxICsxMTA2LDExIEBACiAJCS8qIHRvbyBtdWNoLi4uICovCiAJCXN1YnMtPm51cmJzID0gTUFYX1VSQlM7CiAJCXRvdGFsX3BhY2tzID0gTUFYX1VSQlMgKiB1cmJfcGFja3M7Ci0JfQotCW4gPSB0b3RhbF9wYWNrczsKLQlmb3IgKGkgPSAwOyBpIDwgc3Vicy0+bnVyYnM7IGkrKykgewotCQlucGFja3NbaV0gPSBuID4gdXJiX3BhY2tzID8gdXJiX3BhY2tzIDogbjsKLQkJbiAtPSB1cmJfcGFja3M7Ci0JfQotCWlmIChzdWJzLT5udXJicyA8PSAxKSB7CisJfSBlbHNlIGlmIChzdWJzLT5udXJicyA8IDIpIHsKIAkJLyogdG9vIGxpdHRsZSAtIHdlIG5lZWQgYXQgbGVhc3QgdHdvIHBhY2tldHMKIAkJICogdG8gZW5zdXJlIGNvbnRpZ3VvdXMgcGxheWJhY2svY2FwdHVyZQogCQkgKi8KIAkJc3Vicy0+bnVyYnMgPSAyOwotCQlucGFja3NbMF0gPSAodG90YWxfcGFja3MgKyAxKSAvIDI7Ci0JCW5wYWNrc1sxXSA9IHRvdGFsX3BhY2tzIC0gbnBhY2tzWzBdOwotCX0gZWxzZSBpZiAobnBhY2tzW3N1YnMtPm51cmJzLTFdIDwgTUlOX1BBQ0tTX1VSQiAqIHBhY2tzX3Blcl9tcykgewotCQkvKiB0aGUgbGFzdCBwYWNrZXQgaXMgdG9vIHNtYWxsLi4gKi8KLQkJaWYgKHN1YnMtPm51cmJzID4gMikgewotCQkJLyogbWVyZ2UgdG8gdGhlIGZpcnN0IG9uZSAqLwotCQkJbnBhY2tzWzBdICs9IG5wYWNrc1tzdWJzLT5udXJicyAtIDFdOwotCQkJc3Vicy0+bnVyYnMtLTsKLQkJfSBlbHNlIHsKLQkJCS8qIGRpdmlkZSB0byB0d28gKi8KLQkJCXN1YnMtPm51cmJzID0gMjsKLQkJCW5wYWNrc1swXSA9ICh0b3RhbF9wYWNrcyArIDEpIC8gMjsKLQkJCW5wYWNrc1sxXSA9IHRvdGFsX3BhY2tzIC0gbnBhY2tzWzBdOwotCQl9CiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGF0YSB1cmJzICovCkBAIC0xMTM0LDcgKzExMTgsOCBAQAogCQlzdHJ1Y3Qgc25kX3VyYl9jdHggKnUgPSAmc3Vicy0+ZGF0YXVyYltpXTsKIAkJdS0+aW5kZXggPSBpOwogCQl1LT5zdWJzID0gc3ViczsKLQkJdS0+cGFja2V0cyA9IG5wYWNrc1tpXTsKKwkJdS0+cGFja2V0cyA9IChpICsgMSkgKiB0b3RhbF9wYWNrcyAvIHN1YnMtPm51cmJzCisJCQktIGkgKiB0b3RhbF9wYWNrcyAvIHN1YnMtPm51cmJzOwogCQl1LT5idWZmZXJfc2l6ZSA9IG1heHNpemUgKiB1LT5wYWNrZXRzOwogCQlpZiAoc3Vicy0+Zm10X3R5cGUgPT0gVVNCX0ZPUk1BVF9UWVBFX0lJKQogCQkJdS0+cGFja2V0cysrOyAvKiBmb3IgdHJhbnNmZXIgZGVsaW1pdGVyICovCkBAIC0xMjkyLDE0ICsxMjc3LDE0IEBACiAJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKIAkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwIDB4JXhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgcmF0ZSwgZXApOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLAogCQkJCQkgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9JTiwKIAkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JWQ6JWQ6IGNhbm5vdCBnZXQgZnJlcSBhdCBlcCAweCV4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiVkOiVkOiBjYW5ub3QgZ2V0IGZyZXEgYXQgZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBlcCk7CiAJCQlyZXR1cm4gMDsgLyogc29tZSBkZXZpY2VzIGRvbid0IHN1cHBvcnQgcmVhZGluZyAqLwogCQl9CkBAIC0xNDMxLDkgKzE0MTYsMTEgQEAKIAlzdWJzLT5jdXJfYXVkaW9mbXQgPSBmbXQ7CiAKICNpZiAwCi0JcHJpbnRrKCJzZXR0aW5nIGRvbmU6IGZvcm1hdCA9ICVkLCByYXRlID0gJWQuLiVkLCBjaGFubmVscyA9ICVkXG4iLAorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJzZXR0aW5nIGRvbmU6IGZvcm1hdCA9ICVkLCByYXRlID0gJWQuLiVkLCBjaGFubmVscyA9ICVkXG4iLAogCSAgICAgICBmbXQtPmZvcm1hdCwgZm10LT5yYXRlX21pbiwgZm10LT5yYXRlX21heCwgZm10LT5jaGFubmVscyk7Ci0JcHJpbnRrKCIgIGRhdGFwaXBlID0gMHglMHgsIHN5bmNwaXBlID0gMHglMHhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgZGF0YXBpcGUgPSAweCUweCwgc3luY3BpcGUgPSAweCUweFxuIiwKIAkgICAgICAgc3Vicy0+ZGF0YXBpcGUsIHN1YnMtPnN5bmNwaXBlKTsKICNlbmRpZgogCkBAIC0xNDY4LDcgKzE0NTUsNyBAQAogCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcyk7CiAJZm10ID0gZmluZF9mb3JtYXQoc3VicywgZm9ybWF0LCByYXRlLCBjaGFubmVscyk7CiAJaWYgKCFmbXQpIHsKLQkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJjYW5ub3Qgc2V0IGZvcm1hdDogZm9ybWF0ID0gMHgleCwgcmF0ZSA9ICVkLCBjaGFubmVscyA9ICVkXG4iLAorCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgImNhbm5vdCBzZXQgZm9ybWF0OiBmb3JtYXQgPSAlI3gsIHJhdGUgPSAlZCwgY2hhbm5lbHMgPSAlZFxuIiwKIAkJCSAgIGZvcm1hdCwgcmF0ZSwgY2hhbm5lbHMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNzk1LDcgKzE3ODIsNyBAQAogCQkJaWYgKHJhdGVzW2YtPmZvcm1hdF0gJiYgcmF0ZXNbZi0+Zm9ybWF0XSAhPSBmLT5yYXRlcykKIAkJCQlnb3RvIF9fb3V0OwogCQl9Ci0JCWNoYW5uZWxzW2YtPmZvcm1hdF0gfD0gKDEgPDwgZi0+Y2hhbm5lbHMpOworCQljaGFubmVsc1tmLT5mb3JtYXRdIHw9IDEgPDwgKGYtPmNoYW5uZWxzIC0gMSk7CiAJCXJhdGVzW2YtPmZvcm1hdF0gfD0gZi0+cmF0ZXM7CiAJCS8qIG5lZWRzIGtub3Q/ICovCiAJCWlmIChmLT5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCkBAIC0xODIyLDcgKzE4MDksNyBAQAogCQkJY29udGludWU7CiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCQlpZiAoZi0+cmF0ZXMgJiAoMSA8PCBpKSkKLQkJCQljaGFubmVsc1tpXSB8PSAoMSA8PCBmLT5jaGFubmVscyk7CisJCQkJY2hhbm5lbHNbaV0gfD0gMSA8PCAoZi0+Y2hhbm5lbHMgLSAxKTsKIAkJfQogCX0KIAljbWFzdGVyID0gMDsKQEAgLTE5MTksNyArMTkwNiw3IEBACiAJICogaW4gdGhlIGN1cnJlbnQgY29kZSBhc3N1bWUgdGhlIDFtcyBwZXJpb2QuCiAJICovCiAJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUsCi0JCQkJICAgICAxMDAwICogTUlOX1BBQ0tTX1VSQiwKKwkJCQkgICAgIDEwMDAsCiAJCQkJICAgICAvKihucnBhY2tzICogTUFYX1VSQlMpICogMTAwMCovIFVJTlRfTUFYKTsKIAogCWVyciA9IGNoZWNrX2h3X3BhcmFtc19jb252ZW50aW9uKHN1YnMpOwpAQCAtMjE2MCw3ICsyMTQ3LDcgQEAKIAkJZnAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBhdWRpb2Zvcm1hdCwgbGlzdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgSW50ZXJmYWNlICVkXG4iLCBmcC0+aWZhY2UpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQWx0c2V0ICVkXG4iLCBmcC0+YWx0c2V0dGluZyk7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6IDB4JXhcbiIsIGZwLT5mb3JtYXQpOworCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRm9ybWF0OiAlI3hcbiIsIGZwLT5mb3JtYXQpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQ2hhbm5lbHM6ICVkXG4iLCBmcC0+Y2hhbm5lbHMpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRW5kcG9pbnQ6ICVkICVzICglcylcbiIsCiAJCQkgICAgZnAtPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLApAQCAtMjE4MCw3ICsyMTY3LDcgQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJCX0KIAkJLy8gc25kX2lwcmludGYoYnVmZmVyLCAiICAgIE1heCBQYWNrZXQgU2l6ZSA9ICVkXG4iLCBmcC0+bWF4cGFja3NpemUpOwotCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgRVAgQXR0cmlidXRlID0gMHgleFxuIiwgZnAtPmF0dHJpYnV0ZXMpOworCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgRVAgQXR0cmlidXRlID0gJSN4XG4iLCBmcC0+YXR0cmlidXRlcyk7CiAJfQogfQogCkBAIC0yNjIxLDcgKzI2MDgsNyBAQAogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bmtub3duIGZvcm1hdCB0YWcgMHgleCBpcyBkZXRlY3RlZC4gIHByb2Nlc3NlZCBhcyBNUEVHLlxuIiwKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVkOiV1OiVkIDogdW5rbm93biBmb3JtYXQgdGFnICUjeCBpcyBkZXRlY3RlZC4gIHByb2Nlc3NlZCBhcyBNUEVHLlxuIiwKIAkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLCBmb3JtYXQpOwogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKQEAgLTI4MTksNyArMjgwNiw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQ6IGFkZCBhdWRpbyBlbmRwb2ludCAweCV4XG4iLCBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vLCBmcC0+ZW5kcG9pbnQpOworCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiV1OiVkOiBhZGQgYXVkaW8gZW5kcG9pbnQgJSN4XG4iLCBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vLCBmcC0+ZW5kcG9pbnQpOwogCQllcnIgPSBhZGRfYXVkaW9fZW5kcG9pbnQoY2hpcCwgc3RyZWFtLCBmcCk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZShmcC0+cmF0ZV90YWJsZSk7CkBAIC0zNDY2LDEwICszNDUzLDEwIEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBjcmVhdGUgY2FyZCBpbnN0YW5jZSAlZFxuIiwgaWR4KTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CkBAIC0zNzY2LDcgKzM3NTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfdXNiX2F1ZGlvX2luaXQodm9pZCkKIHsKLQlpZiAobnJwYWNrcyA8IE1JTl9QQUNLU19VUkIgfHwgbnJwYWNrcyA+IE1BWF9QQUNLUykgeworCWlmIChucnBhY2tzIDwgMSB8fCBucnBhY2tzID4gTUFYX1BBQ0tTKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImludmFsaWQgbnJwYWNrcyB2YWx1ZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IDAwMzk3YzguLmVjYjU4ZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlci5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCkBAIC02Niw2ICs2Niw3IEBACiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwMDApLCAwLCAxLCAyLCAxLCAgMTgsIDB4MDAxMyB9LCAvKiBFeHRpZ3kgICAgICAgKi8KIAl7IFVTQl9JRCgweDA0MWUsIDB4MzAyMCksIDIsIDEsIDYsIDYsICAxOCwgMHgwMDEzIH0sIC8qIEF1ZGlneSAyIE5YICAqLwogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogTGl2ZSEgMjQtYml0ICovCisJeyBVU0JfSUQoMHgwNDFlLCAweDMwNDgpLCAyLCAyLCA2LCA2LCAgMiwgIDB4NmU5MSB9LCAvKiBUb3NoaWJhIFNCMDUwMCAqLwogfTsKIAogc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgewpAQCAtNzgsNyArNzksNiBAQAogCiAJLyogU291bmQgQmxhc3RlciByZW1vdGUgY29udHJvbCBzdHVmZiAqLwogCWNvbnN0IHN0cnVjdCByY19jb25maWcgKnJjX2NmZzsKLQl1bnNpZ25lZCBsb25nIHJjX2h3ZGVwX29wZW47CiAJdTMyIHJjX2NvZGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmNfd2FpdHE7CiAJc3RydWN0IHVyYiAqcmNfdXJiOwpAQCAtMTEwLDYgKzExMCw4IEBACiAJY29uc3Qgc3RydWN0IHVzYm1peF9zZWxlY3Rvcl9tYXAgKnNlbGVjdG9yX21hcDsKIH07CiAKKyNkZWZpbmUgTUFYX0NIQU5ORUxTCTEwCS8qIG1heCBsb2dpY2FsIGNoYW5uZWxzICovCisKIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvIHsKIAlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXI7CiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKm5leHRfaWRfZWxlbTsgLyogbGlzdCBvZiBjb250cm9scyB3aXRoIHNhbWUgaWQgKi8KQEAgLTEyMCw2ICsxMjIsOCBAQAogCWludCBjaGFubmVsczsKIAlpbnQgdmFsX3R5cGU7CiAJaW50IG1pbiwgbWF4LCByZXM7CisJaW50IGNhY2hlZDsKKwlpbnQgY2FjaGVfdmFsW01BWF9DSEFOTkVMU107CiAJdTggaW5pdGlhbGl6ZWQ7CiB9OwogCkBAIC0xODEsOCArMTg1LDYgQEAKIAlVU0JfUFJPQ19EQ1JfUkVMRUFTRSA9IDYsCiB9OwogCi0jZGVmaW5lIE1BWF9DSEFOTkVMUwkxMAkvKiBtYXggbG9naWNhbCBjaGFubmVscyAqLwotCiAKIC8qCiAgKiBtYW51YWwgbWFwcGluZyBvZiBtaXhlciBuYW1lcwpAQCAtMjE5LDcgKzIyMSwxMCBAQAogCWZvciAocCA9IHN0YXRlLT5tYXA7IHAtPmlkOyBwKyspIHsKIAkJaWYgKHAtPmlkID09IHVuaXRpZCAmJiAhIHAtPm5hbWUgJiYKIAkJICAgICghIGNvbnRyb2wgfHwgISBwLT5jb250cm9sIHx8IGNvbnRyb2wgPT0gcC0+Y29udHJvbCkpIHsKLQkJCS8vIHByaW50aygiaWdub3JlZCBjb250cm9sICVkOiVkXG4iLCB1bml0aWQsIGNvbnRyb2wpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJpZ25vcmVkIGNvbnRyb2wgJWQ6JWRcbiIsCisJCQkgICAgICAgdW5pdGlkLCBjb250cm9sKTsKKwkJCSovCiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTM3NiwxMSArMzgxLDM1IEBACiB9CiAKIC8qIGNoYW5uZWwgPSAwOiBtYXN0ZXIsIDEgPSBmaXJzdCBjaGFubmVsICovCi1zdGF0aWMgaW5saW5lIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsIGludCAqdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBnZXRfY3VyX21peF9yYXcoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsCisJCQkJICBpbnQgY2hhbm5lbCwgaW50ICp2YWx1ZSkKIHsKIAlyZXR1cm4gZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsIHZhbHVlKTsKIH0KIAorc3RhdGljIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKKwkJCSAgICAgaW50IGNoYW5uZWwsIGludCBpbmRleCwgaW50ICp2YWx1ZSkKK3sKKwlpbnQgZXJyOworCisJaWYgKGN2YWwtPmNhY2hlZCAmICgxIDw8IGNoYW5uZWwpKSB7CisJCSp2YWx1ZSA9IGN2YWwtPmNhY2hlX3ZhbFtpbmRleF07CisJCXJldHVybiAwOworCX0KKwllcnIgPSBnZXRfY3VyX21peF9yYXcoY3ZhbCwgY2hhbm5lbCwgdmFsdWUpOworCWlmIChlcnIgPCAwKSB7CisJCWlmICghY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpCisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yICIKKwkJCQkgICAiY29udHJvbCAlZCBjaCAlZDogZXJyID0gJWRcbiIsCisJCQkJICAgY3ZhbC0+Y29udHJvbCwgY2hhbm5lbCwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY3ZhbC0+Y2FjaGVkIHw9IDEgPDwgY2hhbm5lbDsKKwljdmFsLT5jYWNoZV92YWxbaW5kZXhdID0gKnZhbHVlOworCXJldHVybiAwOworfQorCisKIC8qCiAgKiBzZXQgYSBtaXhlciB2YWx1ZQogICovCkBAIC00MTIsOSArNDQxLDE3IEBACiAJcmV0dXJuIHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgdmFsaWR4LCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgY2hhbm5lbCwgaW50IHZhbHVlKQorc3RhdGljIGludCBzZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsCisJCQkgICAgIGludCBpbmRleCwgaW50IHZhbHVlKQogewotCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOworCWludCBlcnI7CisJZXJyID0gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsCisJCQkgICAgdmFsdWUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWN2YWwtPmNhY2hlZCB8PSAxIDw8IGNoYW5uZWw7CisJY3ZhbC0+Y2FjaGVfdmFsW2luZGV4XSA9IHZhbHVlOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNzE4LDcgKzc1NSw3IEBACiAJCWlmIChjdmFsLT5taW4gKyBjdmFsLT5yZXMgPCBjdmFsLT5tYXgpIHsKIAkJCWludCBsYXN0X3ZhbGlkX3JlcyA9IGN2YWwtPnJlczsKIAkJCWludCBzYXZlZCwgdGVzdCwgY2hlY2s7Ci0JCQlnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZzYXZlZCk7CisJCQlnZXRfY3VyX21peF9yYXcoY3ZhbCwgbWluY2huLCAmc2F2ZWQpOwogCQkJZm9yICg7OykgewogCQkJCXRlc3QgPSBzYXZlZDsKIAkJCQlpZiAodGVzdCA8IGN2YWwtPm1heCkKQEAgLTcyNiw4ICs3NjMsOCBAQAogCQkJCWVsc2UKIAkJCQkJdGVzdCAtPSBjdmFsLT5yZXM7CiAJCQkJaWYgKHRlc3QgPCBjdmFsLT5taW4gfHwgdGVzdCA+IGN2YWwtPm1heCB8fAotCQkJCSAgICBzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIHRlc3QpIHx8Ci0JCQkJICAgIGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgJmNoZWNrKSkgeworCQkJCSAgICBzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIDAsIHRlc3QpIHx8CisJCQkJICAgIGdldF9jdXJfbWl4X3JhdyhjdmFsLCBtaW5jaG4sICZjaGVjaykpIHsKIAkJCQkJY3ZhbC0+cmVzID0gbGFzdF92YWxpZF9yZXM7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTczNSw3ICs3NzIsNyBAQAogCQkJCQlicmVhazsKIAkJCQljdmFsLT5yZXMgKj0gMjsKIAkJCX0KLQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgc2F2ZWQpOworCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAwLCBzYXZlZCk7CiAJCX0KIAogCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CkBAIC03NzUsMzUgKzgxMiwyNSBAQAogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKIAlpbnQgYywgY250LCB2YWwsIGVycjsKIAorCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3ZhbC0+bWluOwogCWlmIChjdmFsLT5jbWFzaykgewogCQljbnQgPSAwOwogCQlmb3IgKGMgPSAwOyBjIDwgTUFYX0NIQU5ORUxTOyBjKyspIHsKLQkJCWlmIChjdmFsLT5jbWFzayAmICgxIDw8IGMpKSB7Ci0JCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsICZ2YWwpOwotCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWlmIChjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikgewotCQkJCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdmFsLT5taW47Ci0JCQkJCQlyZXR1cm4gMDsKLQkJCQkJfQotCQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgY2ggJWQ6IGVyciA9ICVkXG4iLCBjdmFsLT5jb250cm9sLCBjICsgMSwgZXJyKTsKLQkJCQkJcmV0dXJuIGVycjsKLQkJCQl9Ci0JCQkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7Ci0JCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XSA9IHZhbDsKLQkJCQljbnQrKzsKLQkJCX0KKwkJCWlmICghKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgJnZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOworCQkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7CisJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdID0gdmFsOworCQkJY250Kys7CiAJCX0KKwkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJLyogbWFzdGVyIGNoYW5uZWwgKi8KLQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgJnZhbCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlpZiAoY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpIHsKLQkJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN2YWwtPm1pbjsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3VycmVudCB2YWx1ZSBmb3IgY29udHJvbCAlZCBtYXN0ZXIgY2g6IGVyciA9ICVkXG4iLCBjdmFsLT5jb250cm9sLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAwLCAmdmFsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOwogCQl2YWwgPSBnZXRfcmVsYXRpdmVfdmFsdWUoY3ZhbCwgdmFsKTsKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWw7CiAJfQpAQCAtODIwLDM0ICs4NDcsMjggQEAKIAlpZiAoY3ZhbC0+Y21hc2spIHsKIAkJY250ID0gMDsKIAkJZm9yIChjID0gMDsgYyA8IE1BWF9DSEFOTkVMUzsgYysrKSB7Ci0JCQlpZiAoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkgewotCQkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmb3ZhbCk7Ci0JCQkJaWYgKGVyciA8IDApIHsKLQkJCQkJaWYgKGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCXJldHVybiBlcnI7Ci0JCQkJfQotCQkJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF07Ci0JCQkJdmFsID0gZ2V0X2Fic192YWx1ZShjdmFsLCB2YWwpOwotCQkJCWlmIChvdmFsICE9IHZhbCkgewotCQkJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgdmFsKTsKLQkJCQkJY2hhbmdlZCA9IDE7Ci0JCQkJfQotCQkJCWdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmdmFsKTsKLQkJCQljbnQrKzsKKwkJCWlmICghKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgJm92YWwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKKwkJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF07CisJCQl2YWwgPSBnZXRfYWJzX3ZhbHVlKGN2YWwsIHZhbCk7CisJCQlpZiAob3ZhbCAhPSB2YWwpIHsKKwkJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgY250LCB2YWwpOworCQkJCWNoYW5nZWQgPSAxOwogCQkJfQorCQkJY250Kys7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBtYXN0ZXIgY2hhbm5lbCAqLwotCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAmb3ZhbCk7Ci0JCWlmIChlcnIgPCAwICYmIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQotCQkJcmV0dXJuIDA7CisJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIDAsICZvdmFsKTsKIAkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKIAkJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJCXZhbCA9IGdldF9hYnNfdmFsdWUoY3ZhbCwgdmFsKTsKIAkJaWYgKHZhbCAhPSBvdmFsKSB7Ci0JCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCB2YWwpOworCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgMCwgdmFsKTsKIAkJCWNoYW5nZWQgPSAxOwogCQl9CiAJfQpAQCAtMTcwNiw3ICsxNzI3LDggQEAKIAkJYnJlYWs7CiAJLyogbGl2ZTI0ZXh0OiA0ID0gbGluZS1pbiBqYWNrICovCiAJY2FzZSAzOgkvKiBocC1vdXQgamFjayAobWF5IGFjdHVhdGUgTXV0ZSkgKi8KLQkJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkKKwkJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKQogCQkJc25kX3VzYl9taXhlcl9ub3RpZnlfaWQobWl4ZXIsIG1peGVyLT5yY19jZmctPm11dGVfbWl4ZXJfaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTc5NywyNCArMTgxOSw2IEBACiAJd2FrZV91cCgmbWl4ZXItPnJjX3dhaXRxKTsKIH0KIAotc3RhdGljIGludCBzbmRfdXNiX3NicmNfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gaHctPnByaXZhdGVfZGF0YTsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZtaXhlci0+cmNfaHdkZXBfb3BlbikpCi0JCXJldHVybiAtRUJVU1k7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VzYl9zYnJjX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IGh3LT5wcml2YXRlX2RhdGE7Ci0KLQljbGVhcl9iaXQoMCwgJm1peGVyLT5yY19od2RlcF9vcGVuKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgbG9uZyBzbmRfdXNiX3NicmNfaHdkZXBfcmVhZChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICAgIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewpAQCAtMTg2Nyw5ICsxODcxLDggQEAKIAlod2RlcC0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9TQl9SQzsKIAlod2RlcC0+cHJpdmF0ZV9kYXRhID0gbWl4ZXI7CiAJaHdkZXAtPm9wcy5yZWFkID0gc25kX3VzYl9zYnJjX2h3ZGVwX3JlYWQ7Ci0JaHdkZXAtPm9wcy5vcGVuID0gc25kX3VzYl9zYnJjX2h3ZGVwX29wZW47Ci0JaHdkZXAtPm9wcy5yZWxlYXNlID0gc25kX3VzYl9zYnJjX2h3ZGVwX3JlbGVhc2U7CiAJaHdkZXAtPm9wcy5wb2xsID0gc25kX3VzYl9zYnJjX2h3ZGVwX3BvbGw7CisJaHdkZXAtPmV4Y2x1c2l2ZSA9IDE7CiAKIAltaXhlci0+cmNfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1peGVyLT5yY191cmIpCkBAIC0xOTU2LDggKzE5NTksOSBAQAogCWludCBpLCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzbmRfYXVkaWd5Mm54X2NvbnRyb2xzKTsgKytpKSB7Ci0JCWlmIChpID4gMSAmJiAgLyogTGl2ZTI0ZXh0IGhhcyAyIExFRHMgb25seSAqLwotCQkJbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKQorCQlpZiAoaSA+IDEgJiYgLyogTGl2ZTI0ZXh0IGhhcyAyIExFRHMgb25seSAqLworCQkJKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkJIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkpCiAJCQlicmVhazsgCiAJCWVyciA9IHNuZF9jdGxfYWRkKG1peGVyLT5jaGlwLT5jYXJkLAogCQkJCSAgc25kX2N0bF9uZXcxKCZzbmRfYXVkaWd5Mm54X2NvbnRyb2xzW2ldLCBtaXhlcikpOwpAQCAtMTk5NCw3ICsxOTk4LDggQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICIlcyBqYWNrc1xuXG4iLCBtaXhlci0+Y2hpcC0+Y2FyZC0+c2hvcnRuYW1lKTsKIAlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApKQogCQlqYWNrcyA9IGphY2tzX2F1ZGlneTJueDsKLQllbHNlIGlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpCisJZWxzZSBpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpCiAJCWphY2tzID0gamFja3NfbGl2ZTI0ZXh0OwogCWVsc2UKIAkJcmV0dXJuOwpAQCAtMjA0NCw3ICsyMDQ5LDggQEAKIAkJZ290byBfZXJyb3I7CiAKIAlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApIHx8Ci0JICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkgeworCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKSB7CiAJCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CiAKIAkJaWYgKChlcnIgPSBzbmRfYXVkaWd5Mm54X2NvbnRyb2xzX2NyZWF0ZShtaXhlcikpIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCmluZGV4IGQ3NTViZTAuLjNlNWQ2NmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYwpAQCAtMjYxLDYgKzI2MSwyMiBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwIHNjcmF0Y2hfbGl2ZV9tYXBbXSA9IHsKKwkvKiAxOiBJVCBMaW5lIDEgKFVTQiBzdHJlYW1pbmcpICovCisJLyogMjogT1QgTGluZSAxIChTcGVha2VyKSAqLworCS8qIDM6IElUIExpbmUgMSAoTGluZSBjb25uZWN0b3IpICovCisJeyA0LCAiTGluZSAxIEluIiB9LCAvKiBGVSAqLworCS8qIDU6IE9UIExpbmUgMSAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiA2OiBJVCBMaW5lIDIgKFVTQiBzdHJlYW1pbmcpICovCisJLyogNzogT1QgTGluZSAyIChTcGVha2VyKSAqLworCS8qIDg6IElUIExpbmUgMiAoTGluZSBjb25uZWN0b3IpICovCisJeyA5LCAiTGluZSAyIEluIiB9LCAvKiBGVSAqLworCS8qIDEwOiBPVCBMaW5lIDIgKFVTQiBzdHJlYW1pbmcpICovCisJLyogMTE6IElUIE1pYyAoTGluZSBjb25uZWN0b3IpICovCisJLyogMTI6IE9UIE1pYyAoVVNCIHN0cmVhbWluZykgKi8KKwl7IDAgfSAvKiB0ZXJtaW5hdG9yICovCit9OworCiAvKgogICogQ29udHJvbCBtYXAgZW50cmllcwogICovCkBAIC0yODUsNiArMzAxLDExIEBACiAJCS5tYXAgPSBsaXZlMjRleHRfbWFwLAogCX0sCiAJeworCQkuaWQgPSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpLAorCQkubWFwID0gYXVkaWd5Mm54X21hcCwKKwkJLnNlbGVjdG9yX21hcCA9IGF1ZGlneTJueF9zZWxlY3RvcnMsCisJfSwKKwl7CiAJCS8qIEhlcmN1bGVzIERKIENvbnNvbGUgKFdpbmRvd3MgRWRpdGlvbikgKi8KIAkJLmlkID0gVVNCX0lEKDB4MDZmOCwgMHhiMDAwKSwKIAkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLApAQCAtMzExLDYgKzMzMiwxMSBAQAogCQkuaWQgPSBVU0JfSUQoMHgwY2NkLCAweDAwMjgpLAogCQkubWFwID0gYXVyZW9uXzUxXzJfbWFwLAogCX0sCisJeworCQkuaWQgPSBVU0JfSUQoMHgxM2U1LCAweDAwMDEpLAorCQkubWFwID0gc2NyYXRjaF9saXZlX21hcCwKKwkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLAorCX0sCiAJeyAwIH0gLyogdGVybWluYXRvciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYnF1aXJrcy5oIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCmluZGV4IDVkOGVmMDkuLjY0N2VmNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JxdWlya3MuaAorKysgYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKQEAgLTM5LDYgKzM5LDE2IEBACiAJLmlkUHJvZHVjdCA9IHByb2QsIFwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDCiAKKy8qIENyZWF0aXZlL1Rvc2hpYmEgTXVsdGltZWRpYSBDZW50ZXIgU0ItMDUwMCAqLworeworCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwNDgpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiVG9zaGliYSIsCisJCS5wcm9kdWN0X25hbWUgPSAiU0ItMDUwMCIsCisJCS5pZm51bSA9IFFVSVJLX05PX0lOVEVSRkFDRQorCX0KK30sCisKIC8qIENyZWF0aXZlL0UtTXUgZGV2aWNlcyAqLwogewogCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwMTApLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCmluZGV4IDczZTU5ZjQuLjk4Mjc2YWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKQEAgLTQ3OCwxOSArNDc4LDIxIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnVzeDJ5X2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVzeDJ5X2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZGV2OwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCiAJZm9yIChkZXYgPSAwOyBkZXYgPCBTTkRSVl9DQVJEUzsgKytkZXYpCiAJCWlmIChlbmFibGVbZGV2XSAmJiAhc25kX3VzMTIybF9jYXJkX3VzZWRbZGV2XSkKIAkJCWJyZWFrOwogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCB1czEyMmwpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHVzMTIybCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfdXMxMjJsX2NhcmRfdXNlZFtVUzEyMkwoY2FyZCktPmNoaXAuaW5kZXggPSBkZXZdID0gMTsKIAogCVVTMTIyTChjYXJkKS0+Y2hpcC5kZXYgPSBkZXZpY2U7CkBAIC01MDksNDYgKzUxMSw1NyBAQAogCQlVUzEyMkwoY2FyZCktPmNoaXAuZGV2LT5kZXZudW0KIAkJKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZpY2UtPmRldik7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKnVzMTIybF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkKQorc3RhdGljIGludCB1czEyMmxfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQsCisJCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gdXN4MnlfY3JlYXRlX2NhcmQoZGV2aWNlKTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gdXN4MnlfY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKLQlpZiAoIXVzMTIybF9jcmVhdGVfY2FyZChjYXJkKSB8fAotCSAgICBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSA8IDApIHsKKwlpZiAoIXVzMTIybF9jcmVhdGVfY2FyZChjYXJkKSkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAl1c2JfZ2V0X2RldihkZXZpY2UpOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3VzMTIybF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHIiVwOiVpXG4iLAogCQkgICAgaW50ZiwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMSkKIAkJcmV0dXJuIDA7CiAKLQljYXJkID0gdXMxMjJsX3VzYl9wcm9iZSh1c2JfZ2V0X2ludGYoaW50ZiksIGlkKTsKLQotCWlmIChjYXJkKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7Ci0JCXJldHVybiAwOworCWVyciA9IHVzMTIybF91c2JfcHJvYmUodXNiX2dldF9pbnRmKGludGYpLCBpZCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXVzYl9wdXRfaW50ZihpbnRmKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQl1c2JfcHV0X2ludGYoaW50Zik7Ci0JcmV0dXJuIC1FSU87CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXJkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3VzMTIybF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKaW5kZXggMTU1OGE1Yy4uNGFmODc0MCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCkBAIC0zMCw5ICszMCw2IEBACiAjaW5jbHVkZSAidXNidXN4MnkuaCIKICNpbmNsdWRlICJ1c1gyWWh3ZGVwLmgiCiAKLWludCB1c1gyWV9od2RlcF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7Ci0KLQogc3RhdGljIGludCBzbmRfdXM0MjhjdGxzX3ZtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSwKIAkJCQkgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewpAQCAtMTA2LDE2ICsxMDMsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgc25kX3VzWDJZX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91c1gyWV9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzbmRfdXNYMllfaHdkZXBfZHNwX3N0YXR1cyhzdHJ1Y3Qgc25kX2h3ZGVwICpodywKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKmluZm8pCiB7CkBAIC0yNjcsOCArMjU0LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1VTWDJZOwogCWh3LT5wcml2YXRlX2RhdGEgPSB1c1gyWShjYXJkKTsKLQlody0+b3BzLm9wZW4gPSBzbmRfdXNYMllfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfdXNYMllfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSBzbmRfdXNYMllfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gc25kX3VzWDJZX2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5vcHMubW1hcCA9IHNuZF91czQyOGN0bHNfbW1hcDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMgYi9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jCmluZGV4IDcwYjk2MzUuLjI0MzkzZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYwpAQCAtNTU3LDcgKzU1Nyw3IEBACiAJCXMtPmlkbGVfaW5zaXplIC09IG1heF9kaWZmIC0gbWF4X2RpZmZfMDsKIAkJcy0+aWRsZV9pbnNpemUgKz0gdXJiX3NpemUgLSBzLT5wZXJpb2Rfc2l6ZTsKIAkJaWYgKHMtPmlkbGVfaW5zaXplIDwgMCkgewotCQkJc25kX3ByaW50aygiJWkgJWkgJWlcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWkgJWkgJWlcbiIsCiAJCQkJICAgcy0+aWRsZV9pbnNpemUsIHVyYl9zaXplLCBzLT5wZXJpb2Rfc2l6ZSk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAocy0+aWRsZV9pbnNpemUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwppbmRleCAxMTYzOWJkLi41Y2UwZGEyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwpAQCAtMjI3LDkgKzIyNyw5IEBACiAJCiAJaWYgKHVzWDJZLT5VUzA0KSB7CiAJCWlmICgwID09IHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQpCi0JCQlkbworCQkJZG8gewogCQkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVzWDJZLT5VUzA0LT51cmJbdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCsrXSwgR0ZQX0FUT01JQyk7Ci0JCQl3aGlsZSAoIWVyciAmJiB1c1gyWS0+VVMwNC0+c3VibWl0dGVkIDwgdXNYMlktPlVTMDQtPmxlbik7CisJCQl9IHdoaWxlICghZXJyICYmIHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQgPCB1c1gyWS0+VVMwNC0+bGVuKTsKIAl9IGVsc2UKIAkJaWYgKHVzNDI4Y3RscyAmJiB1czQyOGN0bHMtPnA0b3V0TGFzdCA+PSAwICYmIHVzNDI4Y3Rscy0+cDRvdXRMYXN0IDwgTl91czQyOF9wNG91dF9CVUZTKSB7CiAJCQlpZiAodXM0MjhjdGxzLT5wNG91dExhc3QgIT0gdXM0MjhjdGxzLT5wNG91dFNlbnQpIHsKQEAgLTMzMywxOCArMzMzLDIxIEBACiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnVzWDJZX2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVzWDJZX2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZGV2OwogCXN0cnVjdCBzbmRfY2FyZCAqCWNhcmQ7CisJaW50IGVycjsKKwogCWZvciAoZGV2ID0gMDsgZGV2IDwgU05EUlZfQ0FSRFM7ICsrZGV2KQogCQlpZiAoZW5hYmxlW2Rldl0gJiYgIXNuZF91c1gyWV9jYXJkX3VzZWRbZGV2XSkKIAkJCWJyZWFrOwogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgdXNYMllkZXYpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHVzWDJZZGV2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF91c1gyWV9jYXJkX3VzZWRbdXNYMlkoY2FyZCktPmNoaXAuaW5kZXggPSBkZXZdID0gMTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfdXNYMllfY2FyZF9wcml2YXRlX2ZyZWU7CiAJdXNYMlkoY2FyZCktPmNoaXAuZGV2ID0gZGV2aWNlOwpAQCAtMzYyLDI2ICszNjUsMzYgQEAKIAkJdXNYMlkoY2FyZCktPmNoaXAuZGV2LT5idXMtPmJ1c251bSwgdXNYMlkoY2FyZCktPmNoaXAuZGV2LT5kZXZudW0KIAkJKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZpY2UtPmRldik7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgdm9pZCAqdXNYMllfdXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkKQorc3RhdGljIGludCB1c1gyWV91c2JfcHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwKKwkJCSAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCwKKwkJCSAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZXJyOwogCXN0cnVjdCBzbmRfY2FyZCAqCWNhcmQ7CisKKwkqY2FyZHAgPSBOVUxMOwogCWlmIChsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IDB4MTYwNCB8fAogCSAgICAobGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTMTIyICYmCiAJICAgICBsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVMyMjQgJiYKLQkgICAgIGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzQyOCkgfHwKLQkgICAgIShjYXJkID0gdXNYMllfY3JlYXRlX2NhcmQoZGV2aWNlKSkpCi0JCXJldHVybiBOVUxMOworCSAgICAgbGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTNDI4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSB1c1gyWV9jcmVhdGVfY2FyZChkZXZpY2UsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHVzWDJZX2h3ZGVwX25ldyhjYXJkLCBkZXZpY2UpKSA8IDAgIHx8CiAJICAgIChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZXJyOwogCX0KLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzg5LDEzICs0MDIsMTQgQEAKICAqLwogc3RhdGljIGludCBzbmRfdXNYMllfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQl2b2lkICpjaGlwOwotCWNoaXAgPSB1c1gyWV91c2JfcHJvYmUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgaW50ZiwgaWQpOwotCWlmIChjaGlwKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2hpcCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gLUVJTzsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKworCWVyciA9IHVzWDJZX3VzYl9wcm9iZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmLCBpZCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWRldl9zZXRfZHJ2ZGF0YSgmaW50Zi0+ZGV2LCBjYXJkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3VzWDJZX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaAppbmRleCBjMzM4MmZkLi45YzRmYjg0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmgKQEAgLTE4LDMgKzE4LDUgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBjYXB0dXJlZF9pc29fZnJhbWVzOwogCWludCBjYXB0dXJlX2lzb19zdGFydDsKIH07CisKK2ludCB1c1gyWV9od2RlcF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuYyBiL3ZpcnQva3ZtL2lvYXBpYy5jCmluZGV4IDIzYjgxY2YuLmMzYjk5ZGUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5jCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5jCkBAIC04MywyNCArODMsMjggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaWR4KQorc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaWR4KQogewogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSAqcGVudDsKKwlpbnQgaW5qZWN0ZWQgPSAtMTsKIAogCXBlbnQgPSAmaW9hcGljLT5yZWRpcnRibFtpZHhdOwogCiAJaWYgKCFwZW50LT5maWVsZHMubWFzaykgewotCQlpbnQgaW5qZWN0ZWQgPSBpb2FwaWNfZGVsaXZlcihpb2FwaWMsIGlkeCk7CisJCWluamVjdGVkID0gaW9hcGljX2RlbGl2ZXIoaW9hcGljLCBpZHgpOwogCQlpZiAoaW5qZWN0ZWQgJiYgcGVudC0+ZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKIAkJCXBlbnQtPmZpZWxkcy5yZW1vdGVfaXJyID0gMTsKIAl9CiAJaWYgKCFwZW50LT5maWVsZHMudHJpZ19tb2RlKQogCQlpb2FwaWMtPmlyciAmPSB+KDEgPDwgaWR4KTsKKworCXJldHVybiBpbmplY3RlZDsKIH0KIAogc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpCiB7CiAJdW5zaWduZWQgaW5kZXg7CisJYm9vbCBtYXNrX2JlZm9yZSwgbWFza19hZnRlcjsKIAogCXN3aXRjaCAoaW9hcGljLT5pb3JlZ3NlbCkgewogCWNhc2UgSU9BUElDX1JFR19WRVJTSU9OOgpAQCAtMTIwLDYgKzEyNCw3IEBACiAJCWlvYXBpY19kZWJ1ZygiY2hhbmdlIHJlZGlyIGluZGV4ICV4IHZhbCAleFxuIiwgaW5kZXgsIHZhbCk7CiAJCWlmIChpbmRleCA+PSBJT0FQSUNfTlVNX1BJTlMpCiAJCQlyZXR1cm47CisJCW1hc2tfYmVmb3JlID0gaW9hcGljLT5yZWRpcnRibFtpbmRleF0uZmllbGRzLm1hc2s7CiAJCWlmIChpb2FwaWMtPmlvcmVnc2VsICYgMSkgewogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyAmPSAweGZmZmZmZmZmOwogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyB8PSAodTY0KSB2YWwgPDwgMzI7CkBAIC0xMjgsNiArMTMzLDkgQEAKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgfD0gKHUzMikgdmFsOwogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uZmllbGRzLnJlbW90ZV9pcnIgPSAwOwogCQl9CisJCW1hc2tfYWZ0ZXIgPSBpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMubWFzazsKKwkJaWYgKG1hc2tfYmVmb3JlICE9IG1hc2tfYWZ0ZXIpCisJCQlrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhpb2FwaWMtPmt2bSwgaW5kZXgsIG1hc2tfYWZ0ZXIpOwogCQlpZiAoaW9hcGljLT5pcnIgJiAoMSA8PCBpbmRleCkpCiAJCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIGluZGV4KTsKIAkJYnJlYWs7CkBAIC0yMDIsNyArMjEwLDcgQEAKIAl1OCB0cmlnX21vZGUgPSBpb2FwaWMtPnJlZGlydGJsW2lycV0uZmllbGRzLnRyaWdfbW9kZTsKIAl1MzIgZGVsaXZlcl9iaXRtYXNrOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlpbnQgdmNwdV9pZCwgciA9IDA7CisJaW50IHZjcHVfaWQsIHIgPSAtMTsKIAogCWlvYXBpY19kZWJ1ZygiZGVzdD0leCBkZXN0X21vZGU9JXggZGVsaXZlcnlfbW9kZT0leCAiCiAJCSAgICAgInZlY3Rvcj0leCB0cmlnX21vZGU9JXhcbiIsCkBAIC0yNDIsNyArMjUwLDkgQEAKIAkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7CiAJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOwogCQkJaWYgKHZjcHUpIHsKLQkJCQlyID0gaW9hcGljX2lual9pcnEoaW9hcGljLCB2Y3B1LCB2ZWN0b3IsCisJCQkJaWYgKHIgPCAwKQorCQkJCQlyID0gMDsKKwkJCQlyICs9IGlvYXBpY19pbmpfaXJxKGlvYXBpYywgdmNwdSwgdmVjdG9yLAogCQkJCQkgICAgICAgdHJpZ19tb2RlLCBkZWxpdmVyeV9tb2RlKTsKIAkJCX0KIAkJfQpAQCAtMjUzLDggKzI2MywxMCBAQAogCQkJCWNvbnRpbnVlOwogCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKIAkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07Ci0JCQlpZiAodmNwdSkKKwkJCWlmICh2Y3B1KSB7CiAJCQkJaW9hcGljX2lual9ubWkodmNwdSk7CisJCQkJciA9IDE7CisJCQl9CiAJCQllbHNlCiAJCQkJaW9hcGljX2RlYnVnKCJOTUkgdG8gdmNwdSAlZCBmYWlsZWRcbiIsCiAJCQkJCQl2Y3B1LT52Y3B1X2lkKTsKQEAgLTI2OCwxMSArMjgwLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKLXZvaWQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCkKK2ludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKQogewogCXUzMiBvbGRfaXJyID0gaW9hcGljLT5pcnI7CiAJdTMyIG1hc2sgPSAxIDw8IGlycTsKIAl1bmlvbiBpb2FwaWNfcmVkaXJfZW50cnkgZW50cnk7CisJaW50IHJldCA9IDE7CiAKIAlpZiAoaXJxID49IDAgJiYgaXJxIDwgSU9BUElDX05VTV9QSU5TKSB7CiAJCWVudHJ5ID0gaW9hcGljLT5yZWRpcnRibFtpcnFdOwpAQCAtMjgzLDI1ICsyOTYsMjYgQEAKIAkJCWlvYXBpYy0+aXJyIHw9IG1hc2s7CiAJCQlpZiAoKCFlbnRyeS5maWVsZHMudHJpZ19tb2RlICYmIG9sZF9pcnIgIT0gaW9hcGljLT5pcnIpCiAJCQkgICAgfHwgIWVudHJ5LmZpZWxkcy5yZW1vdGVfaXJyKQotCQkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxKTsKKwkJCQlyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSk7CiAJCX0KIAl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19rdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGdzaSwKK3N0YXRpYyB2b2lkIF9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBwaW4sCiAJCQkJICAgIGludCB0cmlnZ2VyX21vZGUpCiB7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5ICplbnQ7CiAKLQllbnQgPSAmaW9hcGljLT5yZWRpcnRibFtnc2ldOworCWVudCA9ICZpb2FwaWMtPnJlZGlydGJsW3Bpbl07CiAKLQlrdm1fbm90aWZ5X2Fja2VkX2lycShpb2FwaWMtPmt2bSwgZ3NpKTsKKwlrdm1fbm90aWZ5X2Fja2VkX2lycShpb2FwaWMtPmt2bSwgS1ZNX0lSUUNISVBfSU9BUElDLCBwaW4pOwogCiAJaWYgKHRyaWdnZXJfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykgewogCQlBU1NFUlQoZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKTsKIAkJZW50LT5maWVsZHMucmVtb3RlX2lyciA9IDA7Ci0JCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBnc2kpKSkKLQkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgZ3NpKTsKKwkJaWYgKCFlbnQtPmZpZWxkcy5tYXNrICYmIChpb2FwaWMtPmlyciAmICgxIDw8IHBpbikpKQorCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBwaW4pOwogCX0KIH0KIApAQCAtNDI2LDMgKzQ0MCw0IEBACiAJa3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoJmt2bS0+bW1pb19idXMsICZpb2FwaWMtPmRldik7CiAJcmV0dXJuIDA7CiB9CisKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvYXBpYy5oIGIvdmlydC9rdm0vaW9hcGljLmgKaW5kZXggNDljOTU4MS4uYTM0YmQ1ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9hcGljLmgKKysrIGIvdmlydC9rdm0vaW9hcGljLmgKQEAgLTgzLDcgKzgzLDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiaXRtYXApOwogdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKTsKIGludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKLXZvaWQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCk7CitpbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCk7CiB2b2lkIGt2bV9pb2FwaWNfcmVzZXQoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyk7CiB1MzIga3ZtX2lvYXBpY19nZXRfZGVsaXZlcnlfYml0bWFzayhzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1OCBkZXN0LAogCQkJCXU4IGRlc3RfbW9kZSk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pcnFfY29tbS5jIGIvdmlydC9rdm0vaXJxX2NvbW0uYwppbmRleCBhYTVkMWU1Li44NjRhYzU0IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pcnFfY29tbS5jCisrKyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKQEAgLTIwLDM1ICsyMCwxMzIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKworI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KKwogI2luY2x1ZGUgImlycS5oIgogCiAjaW5jbHVkZSAiaW9hcGljLmgiCiAKLS8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBrdm0tPmxvY2sgbXV0ZXggaGVsZCAqLwotdm9pZCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitzdGF0aWMgaW50IGt2bV9zZXRfcGljX2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQogewotCXVuc2lnbmVkIGxvbmcgKmlycV9zdGF0ZSA9ICh1bnNpZ25lZCBsb25nICopJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2lycV07CisjaWZkZWYgQ09ORklHX1g4NgorCXJldHVybiBrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwgZS0+aXJxY2hpcC5waW4sIGxldmVsKTsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CiAKLQkvKiBMb2dpY2FsIE9SIGZvciBsZXZlbCB0cmlnIGludGVycnVwdCAqLwotCWlmIChsZXZlbCkKLQkJc2V0X2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOwotCWVsc2UKLQkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7CitzdGF0aWMgaW50IGt2bV9zZXRfaW9hcGljX2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQoreworCXJldHVybiBrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIGUtPmlycWNoaXAucGluLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3NldF9tc2koc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCSAgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCkKK3sKKwlpbnQgdmNwdV9pZCwgciA9IC0xOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gaW9hcGljX2lycWNoaXAoa3ZtKTsKKwlpbnQgZGVzdF9pZCA9IChlLT5tc2kuYWRkcmVzc19sbyAmIE1TSV9BRERSX0RFU1RfSURfTUFTSykKKwkJCT4+IE1TSV9BRERSX0RFU1RfSURfU0hJRlQ7CisJaW50IHZlY3RvciA9IChlLT5tc2kuZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKQorCQkJPj4gTVNJX0RBVEFfVkVDVE9SX1NISUZUOworCWludCBkZXN0X21vZGUgPSB0ZXN0X2JpdChNU0lfQUREUl9ERVNUX01PREVfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmFkZHJlc3NfbG8pOworCWludCB0cmlnX21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9UUklHR0VSX1NISUZULAorCQkJCSh1bnNpZ25lZCBsb25nICopJmUtPm1zaS5kYXRhKTsKKwlpbnQgZGVsaXZlcnlfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmRhdGEpOworCXUzMiBkZWxpdmVyX2JpdG1hc2s7CisKKwlCVUdfT04oIWlvYXBpYyk7CisKKwlkZWxpdmVyX2JpdG1hc2sgPSBrdm1faW9hcGljX2dldF9kZWxpdmVyeV9iaXRtYXNrKGlvYXBpYywKKwkJCQlkZXN0X2lkLCBkZXN0X21vZGUpOworCS8qIElPQVBJQyBkZWxpdmVyeSBtb2RlIHZhbHVlIGlzIHRoZSBzYW1lIGFzIE1TSSBoZXJlICovCisJc3dpdGNoIChkZWxpdmVyeV9tb2RlKSB7CisJY2FzZSBJT0FQSUNfTE9XRVNUX1BSSU9SSVRZOgorCQl2Y3B1ID0ga3ZtX2dldF9sb3dlc3RfcHJpb192Y3B1KGlvYXBpYy0+a3ZtLCB2ZWN0b3IsCisJCQkJZGVsaXZlcl9iaXRtYXNrKTsKKwkJaWYgKHZjcHUgIT0gTlVMTCkKKwkJCXIgPSBrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBudWxsIGxvd2VzdCBwcmlvcml0eSB2Y3B1IVxuIik7CisJCWJyZWFrOworCWNhc2UgSU9BUElDX0ZJWEVEOgorCQlmb3IgKHZjcHVfaWQgPSAwOyBkZWxpdmVyX2JpdG1hc2sgIT0gMDsgdmNwdV9pZCsrKSB7CisJCQlpZiAoIShkZWxpdmVyX2JpdG1hc2sgJiAoMSA8PCB2Y3B1X2lkKSkpCisJCQkJY29udGludWU7CisJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOworCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKKwkJCWlmICh2Y3B1KSB7CisJCQkJaWYgKHIgPCAwKQorCQkJCQlyID0gMDsKKwkJCQlyICs9IGt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcjsKK30KKworLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGt2bS0+bG9jayBtdXRleCBoZWxkCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgPCAwICAgSW50ZXJydXB0IHdhcyBpZ25vcmVkIChtYXNrZWQgb3Igbm90IGRlbGl2ZXJlZCBmb3Igb3RoZXIgcmVhc29ucykKKyAqICA9IDAgICBJbnRlcnJ1cHQgd2FzIGNvYWxlc2NlZCAocHJldmlvdXMgaXJxIGlzIHN0aWxsIHBlbmRpbmcpCisgKiAgPiAwICAgTnVtYmVyIG9mIENQVXMgaW50ZXJydXB0IHdhcyBkZWxpdmVyZWQgdG8KKyAqLworaW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZTsKKwl1bnNpZ25lZCBsb25nICppcnFfc3RhdGUsIHNpZ19sZXZlbDsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAoaXJxIDwgS1ZNX0lPQVBJQ19OVU1fUElOUykgeworCQlpcnFfc3RhdGUgPSAodW5zaWduZWQgbG9uZyAqKSZrdm0tPmFyY2guaXJxX3N0YXRlc1tpcnFdOworCisJCS8qIExvZ2ljYWwgT1IgZm9yIGxldmVsIHRyaWcgaW50ZXJydXB0ICovCisJCWlmIChsZXZlbCkKKwkJCXNldF9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7CisJCXNpZ19sZXZlbCA9ICEhKCppcnFfc3RhdGUpOworCX0gZWxzZSAvKiBEZWFsIHdpdGggTVNJL01TSS1YICovCisJCXNpZ19sZXZlbCA9IDE7CiAKIAkvKiBOb3QgcG9zc2libGUgdG8gZGV0ZWN0IGlmIHRoZSBndWVzdCB1c2VzIHRoZSBQSUMgb3IgdGhlCiAJICogSU9BUElDLiAgU28gc2V0IHRoZSBiaXQgaW4gYm90aC4gVGhlIGd1ZXN0IHdpbGwgaWdub3JlCiAJICogd3JpdGVzIHRvIHRoZSB1bnVzZWQgb25lLgogCSAqLwotCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgaXJxLCAhISgqaXJxX3N0YXRlKSk7Ci0jaWZkZWYgQ09ORklHX1g4NgotCWt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCBpcnEsICEhKCppcnFfc3RhdGUpKTsKLSNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmt2bS0+aXJxX3JvdXRpbmcsIGxpbmspCisJCWlmIChlLT5nc2kgPT0gaXJxKSB7CisJCQlpbnQgciA9IGUtPnNldChlLCBrdm0sIHNpZ19sZXZlbCk7CisJCQlpZiAociA8IDApCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IHIgKyAoKHJldCA8IDApID8gMCA6IHJldCk7CisJCX0KKwlyZXR1cm4gcmV0OwogfQogCi12b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKQordm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbikKIHsKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZTsKIAlzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW47CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQgZ3NpID0gcGluOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAma3ZtLT5pcnFfcm91dGluZywgbGluaykKKwkJaWYgKGUtPmlycWNoaXAuaXJxY2hpcCA9PSBpcnFjaGlwICYmCisJCSAgICBlLT5pcnFjaGlwLnBpbiA9PSBwaW4pIHsKKwkJCWdzaSA9IGUtPmdzaTsKKwkJCWJyZWFrOworCQl9CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShraWFuLCBuLCAma3ZtLT5hcmNoLmlycV9hY2tfbm90aWZpZXJfbGlzdCwgbGluaykKIAkJaWYgKGtpYW4tPmdzaSA9PSBnc2kpCkBAIC05OSwzICsxOTYsMTc3IEBACiAJCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaV0pOwogCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCk7CiB9CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKK3sKKwlraW1uLT5pcnEgPSBpcnE7CisJaGxpc3RfYWRkX2hlYWQoJmtpbW4tPmxpbmssICZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7Cit9CisKK3ZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pCit7CisJaGxpc3RfZGVsKCZraW1uLT5saW5rKTsKK30KKwordm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGJvb2wgbWFzaykKK3sKKwlzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoa2ltbiwgbiwgJmt2bS0+bWFza19ub3RpZmllcl9saXN0LCBsaW5rKQorCQlpZiAoa2ltbi0+aXJxID09IGlycSkKKwkJCWtpbW4tPmZ1bmMoa2ltbiwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGxpc3RfaGVhZCAqaXJxX3JvdXRpbmcpCit7CisJc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIGlycV9yb3V0aW5nLCBsaW5rKQorCQlrZnJlZShlKTsKK30KKwordm9pZCBrdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJX19rdm1fZnJlZV9pcnFfcm91dGluZygma3ZtLT5pcnFfcm91dGluZyk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSkKK3sKKwlpbnQgciA9IC1FSU5WQUw7CisJaW50IGRlbHRhOworCisJZS0+Z3NpID0gdWUtPmdzaTsKKwlzd2l0Y2ggKHVlLT50eXBlKSB7CisJY2FzZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUDoKKwkJZGVsdGEgPSAwOworCQlzd2l0Y2ggKHVlLT51LmlycWNoaXAuaXJxY2hpcCkgeworCQljYXNlIEtWTV9JUlFDSElQX1BJQ19NQVNURVI6CisJCQllLT5zZXQgPSBrdm1fc2V0X3BpY19pcnE7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fSVJRQ0hJUF9QSUNfU0xBVkU6CisJCQllLT5zZXQgPSBrdm1fc2V0X3BpY19pcnE7CisJCQlkZWx0YSA9IDg7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fSVJRQ0hJUF9JT0FQSUM6CisJCQkJZS0+c2V0ID0ga3ZtX3NldF9pb2FwaWNfaXJxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCQllLT5pcnFjaGlwLmlycWNoaXAgPSB1ZS0+dS5pcnFjaGlwLmlycWNoaXA7CisJCWUtPmlycWNoaXAucGluID0gdWUtPnUuaXJxY2hpcC5waW4gKyBkZWx0YTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fSVJRX1JPVVRJTkdfTVNJOgorCQllLT5zZXQgPSBrdm1fc2V0X21zaTsKKwkJZS0+bXNpLmFkZHJlc3NfbG8gPSB1ZS0+dS5tc2kuYWRkcmVzc19sbzsKKwkJZS0+bXNpLmFkZHJlc3NfaGkgPSB1ZS0+dS5tc2kuYWRkcmVzc19oaTsKKwkJZS0+bXNpLmRhdGEgPSB1ZS0+dS5tc2kuZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBvdXQ7CisJfQorCXIgPSAwOworb3V0OgorCXJldHVybiByOworfQorCisKK2ludCBrdm1fc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlLAorCQkJdW5zaWduZWQgbnIsCisJCQl1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlycV9saXN0ID0gTElTVF9IRUFEX0lOSVQoaXJxX2xpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgdG1wID0gTElTVF9IRUFEX0lOSVQodG1wKTsKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSA9IE5VTEw7CisJdW5zaWduZWQgaTsKKwlpbnQgcjsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgKytpKSB7CisJCXIgPSAtRUlOVkFMOworCQlpZiAodWUtPmdzaSA+PSBLVk1fTUFYX0lSUV9ST1VURVMpCisJCQlnb3RvIG91dDsKKwkJaWYgKHVlLT5mbGFncykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVOT01FTTsKKwkJZSA9IGt6YWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZSkKKwkJCWdvdG8gb3V0OworCQlyID0gc2V0dXBfcm91dGluZ19lbnRyeShlLCB1ZSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCSsrdWU7CisJCWxpc3RfYWRkKCZlLT5saW5rLCAmaXJxX2xpc3QpOworCQllID0gTlVMTDsKKwl9CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCWxpc3Rfc3BsaWNlKCZrdm0tPmlycV9yb3V0aW5nLCAmdG1wKTsKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFfcm91dGluZyk7CisJbGlzdF9zcGxpY2UoJmlycV9saXN0LCAma3ZtLT5pcnFfcm91dGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmlycV9saXN0KTsKKwlsaXN0X3NwbGljZSgmdG1wLCAmaXJxX2xpc3QpOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKworCXIgPSAwOworCitvdXQ6CisJa2ZyZWUoZSk7CisJX19rdm1fZnJlZV9pcnFfcm91dGluZygmaXJxX2xpc3QpOworCXJldHVybiByOworfQorCisjZGVmaW5lIElPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkgXAorCXsgLmdzaSA9IGlycSwgLnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCwJXAorCSAgLnUuaXJxY2hpcC5pcnFjaGlwID0gS1ZNX0lSUUNISVBfSU9BUElDLCAudS5pcnFjaGlwLnBpbiA9IChpcnEpIH0KKyNkZWZpbmUgUk9VVElOR19FTlRSWTEoaXJxKSBJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpCisKKyNpZmRlZiBDT05GSUdfWDg2CisjICBkZWZpbmUgUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcCisJeyAuZ3NpID0gaXJxLCAudHlwZSA9IEtWTV9JUlFfUk9VVElOR19JUlFDSElQLAlcCisJICAudS5pcnFjaGlwLmlycWNoaXAgPSBTRUxFQ1RfUElDKGlycSksIC51LmlycWNoaXAucGluID0gKGlycSkgJSA4IH0KKyMgIGRlZmluZSBST1VUSU5HX0VOVFJZMihpcnEpIFwKKwlJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpLCBQSUNfUk9VVElOR19FTlRSWShpcnEpCisjZWxzZQorIyAgZGVmaW5lIFJPVVRJTkdfRU5UUlkyKGlycSkgXAorCUlPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBkZWZhdWx0X3JvdXRpbmdbXSA9IHsKKwlST1VUSU5HX0VOVFJZMigwKSwgUk9VVElOR19FTlRSWTIoMSksCisJUk9VVElOR19FTlRSWTIoMiksIFJPVVRJTkdfRU5UUlkyKDMpLAorCVJPVVRJTkdfRU5UUlkyKDQpLCBST1VUSU5HX0VOVFJZMig1KSwKKwlST1VUSU5HX0VOVFJZMig2KSwgUk9VVElOR19FTlRSWTIoNyksCisJUk9VVElOR19FTlRSWTIoOCksIFJPVVRJTkdfRU5UUlkyKDkpLAorCVJPVVRJTkdfRU5UUlkyKDEwKSwgUk9VVElOR19FTlRSWTIoMTEpLAorCVJPVVRJTkdfRU5UUlkyKDEyKSwgUk9VVElOR19FTlRSWTIoMTMpLAorCVJPVVRJTkdfRU5UUlkyKDE0KSwgUk9VVElOR19FTlRSWTIoMTUpLAorCVJPVVRJTkdfRU5UUlkxKDE2KSwgUk9VVElOR19FTlRSWTEoMTcpLAorCVJPVVRJTkdfRU5UUlkxKDE4KSwgUk9VVElOR19FTlRSWTEoMTkpLAorCVJPVVRJTkdfRU5UUlkxKDIwKSwgUk9VVElOR19FTlRSWTEoMjEpLAorCVJPVVRJTkdfRU5UUlkxKDIyKSwgUk9VVElOR19FTlRSWTEoMjMpLAorI2lmZGVmIENPTkZJR19JQTY0CisJUk9VVElOR19FTlRSWTEoMjQpLCBST1VUSU5HX0VOVFJZMSgyNSksCisJUk9VVElOR19FTlRSWTEoMjYpLCBST1VUSU5HX0VOVFJZMSgyNyksCisJUk9VVElOR19FTlRSWTEoMjgpLCBST1VUSU5HX0VOVFJZMSgyOSksCisJUk9VVElOR19FTlRSWTEoMzApLCBST1VUSU5HX0VOVFJZMSgzMSksCisJUk9VVElOR19FTlRSWTEoMzIpLCBST1VUSU5HX0VOVFJZMSgzMyksCisJUk9VVElOR19FTlRSWTEoMzQpLCBST1VUSU5HX0VOVFJZMSgzNSksCisJUk9VVElOR19FTlRSWTEoMzYpLCBST1VUSU5HX0VOVFJZMSgzNyksCisJUk9VVElOR19FTlRSWTEoMzgpLCBST1VUSU5HX0VOVFJZMSgzOSksCisJUk9VVElOR19FTlRSWTEoNDApLCBST1VUSU5HX0VOVFJZMSg0MSksCisJUk9VVElOR19FTlRSWTEoNDIpLCBST1VUSU5HX0VOVFJZMSg0MyksCisJUk9VVElOR19FTlRSWTEoNDQpLCBST1VUSU5HX0VOVFJZMSg0NSksCisJUk9VVElOR19FTlRSWTEoNDYpLCBST1VUSU5HX0VOVFJZMSg0NyksCisjZW5kaWYKK307CisKK2ludCBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJcmV0dXJuIGt2bV9zZXRfaXJxX3JvdXRpbmcoa3ZtLCBkZWZhdWx0X3JvdXRpbmcsCisJCQkJICAgQVJSQVlfU0laRShkZWZhdWx0X3JvdXRpbmcpLCAwKTsKK30KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDI5YTY2N2MuLjYwNTY5N2UgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNDcsMTAgKzQ3LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2Ci0jaW5jbHVkZSA8YXNtL21zaWRlZi5oPgotI2VuZGlmCi0KICNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKICNpbmNsdWRlICJjb2FsZXNjZWRfbW1pby5oIgogI2VuZGlmCkBAIC04NSw1NyArODEsNiBAQAogc3RhdGljIGJvb2wga3ZtX3JlYm9vdGluZzsKIAogI2lmZGVmIEtWTV9DQVBfREVWSUNFX0FTU0lHTk1FTlQKLQotI2lmZGVmIENPTkZJR19YODYKLXN0YXRpYyB2b2lkIGFzc2lnbmVkX2RldmljZV9tc2lfZGlzcGF0Y2goc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICpkZXYpCi17Ci0JaW50IHZjcHVfaWQ7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBpb2FwaWNfaXJxY2hpcChkZXYtPmt2bSk7Ci0JaW50IGRlc3RfaWQgPSAoZGV2LT5ndWVzdF9tc2kuYWRkcmVzc19sbyAmIE1TSV9BRERSX0RFU1RfSURfTUFTSykKLQkJCT4+IE1TSV9BRERSX0RFU1RfSURfU0hJRlQ7Ci0JaW50IHZlY3RvciA9IChkZXYtPmd1ZXN0X21zaS5kYXRhICYgTVNJX0RBVEFfVkVDVE9SX01BU0spCi0JCQk+PiBNU0lfREFUQV9WRUNUT1JfU0hJRlQ7Ci0JaW50IGRlc3RfbW9kZSA9IHRlc3RfYml0KE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvKTsKLQlpbnQgdHJpZ19tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfVFJJR0dFUl9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5kYXRhKTsKLQlpbnQgZGVsaXZlcnlfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGV2LT5ndWVzdF9tc2kuZGF0YSk7Ci0JdTMyIGRlbGl2ZXJfYml0bWFzazsKLQotCUJVR19PTighaW9hcGljKTsKLQotCWRlbGl2ZXJfYml0bWFzayA9IGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soaW9hcGljLAotCQkJCWRlc3RfaWQsIGRlc3RfbW9kZSk7Ci0JLyogSU9BUElDIGRlbGl2ZXJ5IG1vZGUgdmFsdWUgaXMgdGhlIHNhbWUgYXMgTVNJIGhlcmUgKi8KLQlzd2l0Y2ggKGRlbGl2ZXJ5X21vZGUpIHsKLQljYXNlIElPQVBJQ19MT1dFU1RfUFJJT1JJVFk6Ci0JCXZjcHUgPSBrdm1fZ2V0X2xvd2VzdF9wcmlvX3ZjcHUoaW9hcGljLT5rdm0sIHZlY3RvciwKLQkJCQlkZWxpdmVyX2JpdG1hc2spOwotCQlpZiAodmNwdSAhPSBOVUxMKQotCQkJa3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gImt2bTogbnVsbCBsb3dlc3QgcHJpb3JpdHkgdmNwdSFcbiIpOwotCQlicmVhazsKLQljYXNlIElPQVBJQ19GSVhFRDoKLQkJZm9yICh2Y3B1X2lkID0gMDsgZGVsaXZlcl9iaXRtYXNrICE9IDA7IHZjcHVfaWQrKykgewotCQkJaWYgKCEoZGVsaXZlcl9iaXRtYXNrICYgKDEgPDwgdmNwdV9pZCkpKQotCQkJCWNvbnRpbnVlOwotCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKLQkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07Ci0JCQlpZiAodmNwdSkKLQkJCQlrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICJrdm06IHVuc3VwcG9ydGVkIE1TSSBkZWxpdmVyeSBtb2RlXG4iKTsKLQl9Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgYXNzaWduZWRfZGV2aWNlX21zaV9kaXNwYXRjaChzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmRldikge30KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICprdm1fZmluZF9hc3NpZ25lZF9kZXYoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJCSAgICAgIGludCBhc3NpZ25lZF9kZXZfaWQpCiB7CkBAIC0xNjIsMTMgKzEwNywxMCBAQAogCSAqIGZpbmVyLWdyYWluZWQgbG9jaywgdXBkYXRlIHRoaXMKIAkgKi8KIAltdXRleF9sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7Ci0JaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYKQotCQlrdm1fc2V0X2lycShhc3NpZ25lZF9kZXYtPmt2bSwKLQkJCSAgICBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCi0JCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOwotCWVsc2UgaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYKLQkJCQlLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkgewotCQlhc3NpZ25lZF9kZXZpY2VfbXNpX2Rpc3BhdGNoKGFzc2lnbmVkX2Rldik7CisJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKKwkJICAgIGFzc2lnbmVkX2Rldi0+Z3Vlc3RfaXJxLCAxKTsKKworCWlmIChhc3NpZ25lZF9kZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJKSB7CiAJCWVuYWJsZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X2lycSk7CiAJCWFzc2lnbmVkX2Rldi0+aG9zdF9pcnFfZGlzYWJsZWQgPSBmYWxzZTsKIAl9CkBAIC0zMzEsMTggKzI3MywyNCBAQAogewogCWludCByOwogCisJYWRldi0+Z3Vlc3RfaXJxID0gYWlycS0+Z3Vlc3RfaXJxOwogCWlmIChhaXJxLT5mbGFncyAmIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJKSB7CiAJCS8qIHg4NiBkb24ndCBjYXJlIHVwcGVyIGFkZHJlc3Mgb2YgZ3Vlc3QgbXNpIG1lc3NhZ2UgYWRkciAqLwogCQlhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgfD0gS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0k7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmPSB+S1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYOwotCQlhZGV2LT5ndWVzdF9tc2kuYWRkcmVzc19sbyA9IGFpcnEtPmd1ZXN0X21zaS5hZGRyX2xvOwotCQlhZGV2LT5ndWVzdF9tc2kuZGF0YSA9IGFpcnEtPmd1ZXN0X21zaS5kYXRhOwogCQlhZGV2LT5hY2tfbm90aWZpZXIuZ3NpID0gLTE7CiAJfSBlbHNlIGlmIChtc2kyaW50eCkgewogCQlhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgfD0gS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYOwogCQlhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJj0gfktWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJOwotCQlhZGV2LT5ndWVzdF9pcnEgPSBhaXJxLT5ndWVzdF9pcnE7CiAJCWFkZXYtPmFja19ub3RpZmllci5nc2kgPSBhaXJxLT5ndWVzdF9pcnE7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogR3Vlc3QgcmVxdWlyZSB0byBkaXNhYmxlIGRldmljZSBNU0ksIHdlIGRpc2FibGUgTVNJIGFuZAorCQkgKiByZS1lbmFibGUgSU5UeCBieSBkZWZhdWx0IGFnYWluLiBOb3RpY2UgaXQncyBvbmx5IGZvcgorCQkgKiBub24tbXNpMmludHguCisJCSAqLworCQlhc3NpZ25lZF9kZXZpY2VfdXBkYXRlX2ludHgoa3ZtLCBhZGV2LCBhaXJxKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfSE9TVF9NU0kpCkBAIC0zNzksNiArMzI3LDcgQEAKIHsKIAlpbnQgciA9IDA7CiAJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICptYXRjaDsKKwl1MzIgY3VycmVudF9mbGFncyA9IDAsIGNoYW5nZWRfZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCkBAIC00MTYsOCArMzY1LDEzIEBACiAJCX0KIAl9CiAKLQlpZiAoKCFtc2kyaW50eCAmJgotCSAgICAgKGFzc2lnbmVkX2lycS0+ZmxhZ3MgJiBLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSSkpIHx8CisJaWYgKChtYXRjaC0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX01TSSkgJiYKKwkJIChtYXRjaC0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kpKQorCQljdXJyZW50X2ZsYWdzIHw9IEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJOworCisJY2hhbmdlZF9mbGFncyA9IGFzc2lnbmVkX2lycS0+ZmxhZ3MgXiBjdXJyZW50X2ZsYWdzOworCisJaWYgKChjaGFuZ2VkX2ZsYWdzICYgS1ZNX0RFVl9JUlFfQVNTSUdOX01TSV9BQ1RJT04pIHx8CiAJICAgIChtc2kyaW50eCAmJiBtYXRjaC0+ZGV2LT5tc2lfZW5hYmxlZCkpIHsKICNpZmRlZiBDT05GSUdfWDg2CiAJCXIgPSBhc3NpZ25lZF9kZXZpY2VfdXBkYXRlX21zaShrdm0sIG1hdGNoLCBhc3NpZ25lZF9pcnEpOwpAQCAtNTYzLDcgKzUxNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChhc3NpZ25lZF9kZXYtPmZsYWdzICYgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VKQorCWlmIChtYXRjaC0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpCiAJCWt2bV9kZWFzc2lnbl9kZXZpY2Uoa3ZtLCBtYXRjaCk7CiAKIAlrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoa3ZtLCBtYXRjaCk7CkBAIC01ODEsOCArNTM1LDEwIEBACiAKIGlubGluZSBpbnQga3ZtX2lzX21taW9fcGZuKHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCi0JCXJldHVybiBQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7CisJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gY29tcG91bmRfaGVhZChwZm5fdG9fcGFnZShwZm4pKTsKKwkJcmV0dXJuIFBhZ2VSZXNlcnZlZChwYWdlKTsKKwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTgyOCw2ICs3ODQsMTAgQEAKIAogCWlmIChJU19FUlIoa3ZtKSkKIAkJZ290byBvdXQ7CisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFfcm91dGluZyk7CisJSU5JVF9ITElTVF9IRUFEKCZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7CisjZW5kaWYKIAogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKQEAgLTkwOSw2ICs4NjksNyBAQAogCXNwaW5fbG9jaygma3ZtX2xvY2spOwogCWxpc3RfZGVsKCZrdm0tPnZtX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7CisJa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoa3ZtKTsKIAlrdm1faW9fYnVzX2Rlc3Ryb3koJmt2bS0+cGlvX2J1cyk7CiAJa3ZtX2lvX2J1c19kZXN0cm95KCZrdm0tPm1taW9fYnVzKTsKICNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKQEAgLTE3NTUsMTMgKzE3MTYsMTMgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KLQljYXNlIEtWTV9ERUJVR19HVUVTVDogewotCQlzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0IGRiZzsKKwljYXNlIEtWTV9TRVRfR1VFU1RfREVCVUc6IHsKKwkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyBkYmc7CiAKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZGJnLCBhcmdwLCBzaXplb2YgZGJnKSkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdCh2Y3B1LCAmZGJnKTsKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHZjcHUsICZkYmcpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKQEAgLTE5MjksNiArMTg5MCwzNiBAQAogCQlicmVhazsKIAl9CiAjZW5kaWYKKyNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCisJY2FzZSBLVk1fU0VUX0dTSV9ST1VUSU5HOiB7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmcgcm91dGluZzsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZyBfX3VzZXIgKnVyb3V0aW5nOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICplbnRyaWVzOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJvdXRpbmcsIGFyZ3AsIHNpemVvZihyb3V0aW5nKSkpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FSU5WQUw7CisJCWlmIChyb3V0aW5nLm5yID49IEtWTV9NQVhfSVJRX1JPVVRFUykKKwkJCWdvdG8gb3V0OworCQlpZiAocm91dGluZy5mbGFncykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVOT01FTTsKKwkJZW50cmllcyA9IHZtYWxsb2Mocm91dGluZy5uciAqIHNpemVvZigqZW50cmllcykpOworCQlpZiAoIWVudHJpZXMpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCXVyb3V0aW5nID0gYXJncDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGVudHJpZXMsIHVyb3V0aW5nLT5lbnRyaWVzLAorCQkJCSAgIHJvdXRpbmcubnIgKiBzaXplb2YoKmVudHJpZXMpKSkKKwkJCWdvdG8gb3V0X2ZyZWVfaXJxX3JvdXRpbmc7CisJCXIgPSBrdm1fc2V0X2lycV9yb3V0aW5nKGt2bSwgZW50cmllcywgcm91dGluZy5uciwKKwkJCQkJcm91dGluZy5mbGFncyk7CisJb3V0X2ZyZWVfaXJxX3JvdXRpbmc6CisJCXZmcmVlKGVudHJpZXMpOworCQlicmVhazsKKwl9CisjZW5kaWYKIAlkZWZhdWx0OgogCQlyID0ga3ZtX2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CiAJfQpAQCAtMTk5NSw2ICsxOTg2LDEwIEBACiAJY2FzZSBLVk1fQ0FQX1VTRVJfTUVNT1JZOgogCWNhc2UgS1ZNX0NBUF9ERVNUUk9ZX01FTU9SWV9SRUdJT05fV09SS1M6CiAJCXJldHVybiAxOworI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisJY2FzZSBLVk1fQ0FQX0lSUV9ST1VUSU5HOgorCQlyZXR1cm4gS1ZNX01BWF9JUlFfUk9VVEVTOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQo=